ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IGQwNTczN2EuLjA2Yjk4MmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtODIsNiArODIsOCBAQAogCS0gaW5mbyBvbiB0aGUgQmxvY2sgSS9PIChCSU8pIGxheWVyLgogYmxvY2tkZXYvCiAJLSBpbmZvIG9uIGJsb2NrIGRldmljZXMgJiBkcml2ZXJzCitidG1ydmwudHh0CisJLSBpbmZvIG9uIE1hcnZlbGwgQmx1ZXRvb3RoIGRyaXZlciB1c2FnZS4KIGNhY2hldGxiLnR4dAogCS0gZGVzY3JpYmVzIHRoZSBjYWNoZS9UTEIgZmx1c2hpbmcgaW50ZXJmYWNlcyBMaW51eCB1c2VzLgogY2Ryb20vCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvQ1BVZnJlcS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvQ1BVZnJlcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiM2ExMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9DUFVmcmVxLnR4dApAQCAtMCwwICsxLDc1IEBACisJCVMzQzI0WFggQ1BVZnJlcSBzdXBwb3J0CisJCT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKKyBUaGUgUzNDMjRYWCBzZXJpZXMgc3VwcG9ydCBhIG51bWJlciBvZiBwb3dlciBzYXZpbmcgc3lzdGVtcywgc3VjaCBhcworIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgY29yZSwgbWVtb3J5IGFuZCBwZXJpcGhlcmFsIG9wZXJhdGluZworIGZyZXF1ZW5jaWVzLiBUaGUgY29yZSBjb250cm9sIGlzIGV4cG9ydGVkIHZpYSB0aGUgQ1BVRnJlcSBkcml2ZXIKKyB3aGljaCBoYXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IG1hbnVhbCBvciBhdXRvbWF0aWMgY29udHJvbHMgb3ZlciB0aGUKKyByYXRlIHRoZSBjb3JlIGlzIHJ1bm5pbmcgYXQuCisKKyBUaGVyZSBhcmUgdHdvIGZvcm1zIG9mIHRoZSBkcml2ZXIgZGVwZW5kaW5nIG9uIHRoZSBzcGVjaWZpYyBDUFUgYW5kCisgaG93IHRoZSBjbG9ja3MgYXJlIGFycmFuZ2VkLiBUaGUgZmlyc3QgaW1wbGVtZW50YXRpb24gdXNlZCBhcyBzaW5nbGUKKyBQTEwgdG8gZmVlZCB0aGUgQVJNLCBtZW1vcnkgYW5kIHBlcmlwaGVyYWxzIHZpYSBhIHNlcmllcyBvZiBkaXZpZGVycworIGFuZCBtdXhlcyBhbmQgdGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBkb2N1bWVudGVkIGhlcmUuIEEKKyBuZXdlciB2ZXJzaW9uIHdoZXJlIHRoZXJlIGlzIGEgc2VwZXJhdGUgUExMIGFuZCBjbG9jayBkaXZpZGVyIGZvciB0aGUKKyBBUk0gY29yZSBpcyBhdmFpbGFibGUgYXMgYSBzZXBlcmF0ZSBkcml2ZXIuCisKKworTGF5b3V0CistLS0tLS0KKworIFRoZSBjb2RlIGNvcmUgbWFuYWdlcyB0aGUgQ1BVIHNwZWNpZmljIGRyaXZlcnMsIGFueSBkYXRhIHRoYXQgdGhleQorIG5lZWQgdG8gcmVnaXN0ZXIgYW5kIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGdlbmVyaWMgZHJpdmVycy9jcHVmcmVxCisgc3lzdGVtLiBFYWNoIENQVSByZWdpc3RlcnMgYSBkcml2ZXIgdG8gY29udHJvbCB0aGUgUExMLCBjbG9jayBkaXZpZGVycworIGFuZCBhbnl0aGluZyBlbHNlIGFzc29jaWF0ZWQgd2l0aCBpdC4gQW55IGJvYXJkIHRoYXQgd2FudHMgdG8gdXNlIHRoaXMKKyBmcmFtZXdvcmsgbmVlZHMgdG8gc3VwcGx5IGF0IGxlYXN0IGJhc2ljIGRldGFpbHMgb2Ygd2hhdCBpcyByZXF1aXJlZC4KKworIFRoZSBjb3JlIHJlZ2lzdGVycyB3aXRoIGRyaXZlcnMvY3B1ZnJlcSBhdCBpbml0IHRpbWUgaWYgYWxsIHRoZSBkYXRhCisgbmVjZXNzYXJ5IGhhcyBiZWVuIHN1cHBsaWVkLgorCisKK0NQVSBzdXBwb3J0CistLS0tLS0tLS0tLQorCisgVGhlIHN1cHBvcnQgZm9yIGVhY2ggQ1BVIGRlcGVuZHMgb24gdGhlIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlCisgU29DIGFuZCB0aGUgZHJpdmVyIGFzIGVhY2ggZGV2aWNlIGhhcyBkaWZmZXJlbnQgUExMIGFuZCBjbG9jayBjaGFpbnMKKyBhc3NvY2lhdGVkIHdpdGggaXQuCisKKworU2xvdyBNb2RlCistLS0tLS0tLS0KKworIFRoZSBTTE9XIG1vZGUgd2hlcmUgdGhlIFBMTCBpcyB0dXJuZWQgb2ZmIGFsdG9nZXRoZXIgYW5kIHRoZQorIHN5c3RlbSBpcyBmZWQgYnkgdGhlIGV4dGVybmFsIGNyeXN0YWwgaW5wdXQgaXMgY3VycmVudGx5IG5vdAorIHN1cHBvcnRlZC4KKworCitzeXNmcworLS0tLS0KKworIFRoZSBjb3JlIGNvZGUgZXhwb3J0cyBleHRyYSBpbmZvcm1hdGlvbiB2aWEgc3lzZnMgaW4gdGhlIGRpcmVjdG9yeQorIGRldmljZXMvc3lzdGVtL2NwdS9jcHUwL2FyY2gtZnJlcS4KKworCitCb2FyZCBTdXBwb3J0CistLS0tLS0tLS0tLS0tCisKKyBFYWNoIGJvYXJkIHRoYXQgd2FudHMgdG8gdXNlIHRoZSBjcHVmcmVxIGNvZGUgbXVzdCByZWdpc3RlciBzb21lIGJhc2ljCisgaW5mb3JtYXRpb24gd2l0aCB0aGUgY29yZSBkcml2ZXIgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZQorIGJvYXJkIHJlcXVpcmVzIGFuZCBhbnkgcmVzdHJpY3Rpb25zIGJlaW5nIHBsYWNlZCBvbiBpdC4KKworIFRoZSBib2FyZCBuZWVkcyB0byBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBpdCBuZWVkcyB0aGUgSU8gYmFuaworIHRpbWluZ3MgY2hhbmdpbmcsIGFueSBtYXhpbXVtIGZyZXF1ZW5jeSBsaW1pdHMgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZQorIFNEUkFNIHJlZnJlc2ggcmF0ZS4KKworCisKKworRG9jdW1lbnQgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0KKworQmVuIERvb2tzLCBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKK0xpY2Vuc2VkIHVuZGVyIEdQTHYyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2J0bXJ2bC50eHQgYi9Eb2N1bWVudGF0aW9uL2J0bXJ2bC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ5MTZhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYnRtcnZsLnR4dApAQCAtMCwwICsxLDExOSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJUkVBRE1FIGZvciBidG1ydmwgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0FsbCBjb21tYW5kcyBhcmUgdXNlZCB2aWEgZGVidWdmcyBpbnRlcmZhY2UuCisKKz09PT09PT09PT09PT09PT09PT09PQorU2V0L2dldCBkcml2ZXIgY29uZmlndXJhdGlvbnM6CisKK1BhdGg6CS9kZWJ1Zy9idG1ydmwvY29uZmlnLworCitncGlvZ2FwPVtuXQoraHNjZmdjbWQKKwlUaGVzZSBjb21tYW5kcyBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGhvc3Qgc2xlZXAgcGFyYW1ldGVycy4KKwliaXQgODowICAtLSBHYXAKKwliaXQgMTY6OCAtLSBHUElPCisKKwl3aGVyZSBHUElPIGlzIHRoZSBwaW4gbnVtYmVyIG9mIEdQSU8gdXNlZCB0byB3YWtlIHVwIHRoZSBob3N0LgorCUl0IGNvdWxkIGJlIGFueSB2YWxpZCBHUElPIHBpbiMgKGUuZy4gMC03KSBvciAweGZmIChTRElPIGludGVyZmFjZQorCXdha2V1cCB3aWxsIGJlIHVzZWQgaW5zdGVhZCkuCisKKwl3aGVyZSBHYXAgaXMgdGhlIGdhcCBpbiBtaWxsaSBzZWNvbmRzIGJldHdlZW4gd2FrZXVwIHNpZ25hbCBhbmQKKwl3YWtldXAgZXZlbnQsIG9yIDB4ZmYgZm9yIHNwZWNpYWwgaG9zdCBzbGVlcCBzZXR0aW5nLgorCisJVXNhZ2U6CisJCSMgVXNlIFNESU8gaW50ZXJmYWNlIHRvIHdha2UgdXAgdGhlIGhvc3QgYW5kIHNldCBHQVAgdG8gMHg4MDoKKwkJZWNobyAweGZmODAgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9ncGlvZ2FwCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL2hzY2ZnY21kCisKKwkJIyBVc2UgR1BJTyBwaW4gIzMgdG8gd2FrZSB1cCB0aGUgaG9zdCBhbmQgc2V0IEdBUCB0byAweGZmOgorCQllY2hvIDB4MDNmZiA+ICAvZGVidWcvYnRtcnZsL2NvbmZpZy9ncGlvZ2FwCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL2hzY2ZnY21kCisKK3BzbW9kZT1bbl0KK3BzY21kCisJVGhlc2UgY29tbWFuZHMgYXJlIHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgYXV0byBzbGVlcCBtb2RlCisKKwl3aGVyZSB0aGUgb3B0aW9uIGlzOgorCQkJMSAJLS0gRW5hYmxlIGF1dG8gc2xlZXAgbW9kZQorCQkJMCAJLS0gRGlzYWJsZSBhdXRvIHNsZWVwIG1vZGUKKworCVVzYWdlOgorCQkjIEVuYWJsZSBhdXRvIHNsZWVwIG1vZGUKKwkJZWNobyAxID4gL2RlYnVnL2J0bXJ2bC9jb25maWcvcHNtb2RlCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL3BzY21kCisKKwkJIyBEaXNhYmxlIGF1dG8gc2xlZXAgbW9kZQorCQllY2hvIDAgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9wc21vZGUKKwkJZWNobyAxID4gL2RlYnVnL2J0bXJ2bC9jb25maWcvcHNjbWQKKworCitoc21vZGU9W25dCitoc2NtZAorCVRoZXNlIGNvbW1hbmRzIGFyZSB1c2VkIHRvIGVuYWJsZSBob3N0IHNsZWVwIG9yIHdha2UgdXAgZmlybXdhcmUKKworCXdoZXJlIHRoZSBvcHRpb24gaXM6CisJCQkxCS0tIEVuYWJsZSBob3N0IHNsZWVwCisJCQkwCS0tIFdha2UgdXAgZmlybXdhcmUKKworCVVzYWdlOgorCQkjIEVuYWJsZSBob3N0IHNsZWVwCisJCWVjaG8gMSA+IC9kZWJ1Zy9idG1ydmwvY29uZmlnL2hzbW9kZQorCQllY2hvIDEgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9oc2NtZAorCisJCSMgV2FrZSB1cCBmaXJtd2FyZQorCQllY2hvIDAgPiAvZGVidWcvYnRtcnZsL2NvbmZpZy9oc21vZGUKKwkJZWNobyAxID4gL2RlYnVnL2J0bXJ2bC9jb25maWcvaHNjbWQKKworCis9PT09PT09PT09PT09PT09PT09PT09CitHZXQgZHJpdmVyIHN0YXR1czoKKworUGF0aDoJL2RlYnVnL2J0bXJ2bC9zdGF0dXMvCisKK1VzYWdlOgorCWNhdCAvZGVidWcvYnRtcnZsL3N0YXR1cy88YXJncz4KKword2hlcmUgdGhlIGFyZ3MgYXJlOgorCitjdXJwc21vZGUKKwlUaGlzIGNvbW1hbmQgZGlzcGxheXMgY3VycmVudCBhdXRvIHNsZWVwIHN0YXR1cy4KKworcHNzdGF0ZQorCVRoaXMgY29tbWFuZCBkaXNwbGF5IHRoZSBwb3dlciBzYXZlIHN0YXRlLgorCitoc3N0YXRlCisJVGhpcyBjb21tYW5kIGRpc3BsYXkgdGhlIGhvc3Qgc2xlZXAgc3RhdGUuCisKK3R4ZG5sZHJkeQorCVRoaXMgY29tbWFuZCBkaXNwbGF5cyB0aGUgdmFsdWUgb2YgVHggZG93bmxvYWQgcmVhZHkgZmxhZy4KKworCis9PT09PT09PT09PT09PT09PT09PT0KKworVXNlIGhjaXRvb2wgdG8gaXNzdWUgcmF3IGhjaSBjb21tYW5kLCByZWZlciB0byBoY2l0b29sIG1hbnVhbAorCisJVXNhZ2U6IEhjaXRvb2wgY21kIDxvZ2Y+IDxvY2Y+IFtQYXJhbWV0ZXJzXQorCisJSW50ZXJmYWNlIENvbnRyb2wgQ29tbWFuZAorCWhjaXRvb2wgY21kIDB4M2YgMHg1YiAweGY1IDB4MDEgMHgwMCAgICAtLUVuYWJsZSBBbGwgaW50ZXJmYWNlCisJaGNpdG9vbCBjbWQgMHgzZiAweDViIDB4ZjUgMHgwMSAweDAxICAgIC0tRW5hYmxlIFdsYW4gaW50ZXJmYWNlCisJaGNpdG9vbCBjbWQgMHgzZiAweDViIDB4ZjUgMHgwMSAweDAyICAgIC0tRW5hYmxlIEJUIGludGVyZmFjZQorCWhjaXRvb2wgY21kIDB4M2YgMHg1YiAweGY1IDB4MDAgMHgwMCAgICAtLURpc2FibGUgQWxsIGludGVyZmFjZQorCWhjaXRvb2wgY21kIDB4M2YgMHg1YiAweGY1IDB4MDAgMHgwMSAgICAtLURpc2FibGUgV2xhbiBpbnRlcmZhY2UKKwloY2l0b29sIGNtZCAweDNmIDB4NWIgMHhmNSAweDAwIDB4MDIgICAgLS1EaXNhYmxlIEJUIGludGVyZmFjZQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK1NEODY4OCBmaXJtd2FyZToKKworL2xpYi9maXJtd2FyZS9zZDg2ODhfaGVscGVyLmJpbgorL2xpYi9maXJtd2FyZS9zZDg2ODguYmluCisKKworVGhlIGltYWdlcyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOgorCitnaXQuaW5mcmFkZWFkLm9yZy91c2Vycy9kd213Mi9saW51eC1maXJtd2FyZS5naXQvbGliZXJ0YXMvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL01ha2VmaWxlCmluZGV4IDhkZjFhNzIuLmQ5OGU0ZGYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL01ha2VmaWxlCkBAIC05LDMgKzksOCBAQAogYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpCiAKIEhPU1RDRkxBR1NfdWNvbi5vICs9IC1JJChvYmp0cmVlKS91c3IvaW5jbHVkZQorCithbGw6IG1vZHVsZXMKKworbW9kdWxlcyBjbGVhbjoKKwkkKE1BS0UpIC1DIC4uLy4uIFNVQkRJUlM9JChQV0QpICRACmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jbl90ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jbl90ZXN0LmMKaW5kZXggNmE1YmU1ZC4uMTcxMWFkYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY25fdGVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2NuX3Rlc3QuYwpAQCAtMTksNiArMTksOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImNuX3Rlc3Q6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMjcsMTggKzI5LDE3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KIAotc3RhdGljIHN0cnVjdCBjYl9pZCBjbl90ZXN0X2lkID0geyAweDEyMywgMHg0NTYgfTsKK3N0YXRpYyBzdHJ1Y3QgY2JfaWQgY25fdGVzdF9pZCA9IHsgQ05fTkVUTElOS19VU0VSUyArIDMsIDB4NDU2IH07CiBzdGF0aWMgY2hhciBjbl90ZXN0X25hbWVbXSA9ICJjbl90ZXN0IjsKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbmxzOwogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGNuX3Rlc3RfdGltZXI7CiAKLXZvaWQgY25fdGVzdF9jYWxsYmFjayh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY25fdGVzdF9jYWxsYmFjayhzdHJ1Y3QgY25fbXNnICptc2cpCiB7Ci0Jc3RydWN0IGNuX21zZyAqbXNnID0gKHN0cnVjdCBjbl9tc2cgKilkYXRhOwotCi0JcHJpbnRrKCIlczogJWx1OiBpZHg9JXgsIHZhbD0leCwgc2VxPSV1LCBhY2s9JXUsIGxlbj0lZDogJXMuXG4iLAotCSAgICAgICBfX2Z1bmNfXywgamlmZmllcywgbXNnLT5pZC5pZHgsIG1zZy0+aWQudmFsLAotCSAgICAgICBtc2ctPnNlcSwgbXNnLT5hY2ssIG1zZy0+bGVuLCAoY2hhciAqKW1zZy0+ZGF0YSk7CisJcHJfaW5mbygiJXM6ICVsdTogaWR4PSV4LCB2YWw9JXgsIHNlcT0ldSwgYWNrPSV1LCBsZW49JWQ6ICVzLlxuIiwKKwkgICAgICAgIF9fZnVuY19fLCBqaWZmaWVzLCBtc2ctPmlkLmlkeCwgbXNnLT5pZC52YWwsCisJICAgICAgICBtc2ctPnNlcSwgbXNnLT5hY2ssIG1zZy0+bGVuLAorCSAgICAgICAgbXNnLT5sZW4gPyAoY2hhciAqKW1zZy0+ZGF0YSA6ICIiKTsKIH0KIAogLyoKQEAgLTYzLDkgKzY0LDcgQEAKIAogCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIHdpdGggc2l6ZT0ldS5cbiIsCi0JCSAgICAgICBzaXplKTsKLQorCQlwcl9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIHdpdGggc2l6ZT0ldVxuIiwgc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTE0LDEyICsxMTMsMTIgQEAKIAkvL25ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCBjdGwtPmdyb3VwLCBHRlBfQVRPTUlDKTsKIAluZXRsaW5rX3VuaWNhc3QobmxzLCBza2IsIDAsIDApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUmVxdWVzdCB3YXMgc2VudC4gR3JvdXA9MHgleC5cbiIsIGN0bC0+Z3JvdXApOworCXByX2luZm8oInJlcXVlc3Qgd2FzIHNlbnQ6IGdyb3VwPTB4JXhcbiIsIGN0bC0+Z3JvdXApOwogCiAJcmV0dXJuIDA7CiAKIG5sbXNnX2ZhaWx1cmU6Ci0JcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2VuZCAldS4ldVxuIiwgbXNnLT5zZXEsIG1zZy0+YWNrKTsKKwlwcl9lcnIoImZhaWxlZCB0byBzZW5kICV1LiV1XG4iLCBtc2ctPnNlcSwgbXNnLT5hY2spOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTMxLDYgKzEzMCw4IEBACiAJc3RydWN0IGNuX21zZyAqbTsKIAljaGFyIGRhdGFbMzJdOwogCisJcHJfZGVidWcoIiVzOiB0aW1lciBmaXJlZCB3aXRoIGRhdGEgJWx1XG4iLCBfX2Z1bmNfXywgX19kYXRhKTsKKwogCW0gPSBremFsbG9jKHNpemVvZigqbSkgKyBzaXplb2YoZGF0YSksIEdGUF9BVE9NSUMpOwogCWlmIChtKSB7CiAKQEAgLTE1MCw3ICsxNTEsNyBAQAogCiAJY25fdGVzdF90aW1lcl9jb3VudGVyKys7CiAKLQltb2RfdGltZXIoJmNuX3Rlc3RfdGltZXIsIGppZmZpZXMgKyBIWik7CisJbW9kX3RpbWVyKCZjbl90ZXN0X3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CiB9CiAKIHN0YXRpYyBpbnQgY25fdGVzdF9pbml0KHZvaWQpCkBAIC0xNjgsOCArMTY5LDEwIEBACiAJfQogCiAJc2V0dXBfdGltZXIoJmNuX3Rlc3RfdGltZXIsIGNuX3Rlc3RfdGltZXJfZnVuYywgMCk7Ci0JY25fdGVzdF90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOwotCWFkZF90aW1lcigmY25fdGVzdF90aW1lcik7CisJbW9kX3RpbWVyKCZjbl90ZXN0X3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisKKwlwcl9pbmZvKCJpbml0aWFsaXplZCB3aXRoIGlkPXsldS4ldX1cbiIsCisJCWNuX3Rlc3RfaWQuaWR4LCBjbl90ZXN0X2lkLnZhbCk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dCBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL2Nvbm5lY3Rvci50eHQKaW5kZXggYWQ2ZTBiYS4uODFlNmJmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvY29ubmVjdG9yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci9jb25uZWN0b3IudHh0CkBAIC01LDEwICs1LDEwIEBACiBLZXJuZWwgY29ubmVjdG9yIC0gbmV3IG5ldGxpbmsgYmFzZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWwgc3BhY2UgZWFzeQogdG8gdXNlIGNvbW11bmljYXRpb24gbW9kdWxlLgogCi1Db25uZWN0b3IgZHJpdmVyIGFkZHMgcG9zc2liaWxpdHkgdG8gY29ubmVjdCB2YXJpb3VzIGFnZW50cyB1c2luZwotbmV0bGluayBiYXNlZCBuZXR3b3JrLiAgT25lIG11c3QgcmVnaXN0ZXIgY2FsbGJhY2sgYW5kCi1pZGVudGlmaWVyLiBXaGVuIGRyaXZlciByZWNlaXZlcyBzcGVjaWFsIG5ldGxpbmsgbWVzc2FnZSB3aXRoCi1hcHByb3ByaWF0ZSBpZGVudGlmaWVyLCBhcHByb3ByaWF0ZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4KK1RoZSBDb25uZWN0b3IgZHJpdmVyIG1ha2VzIGl0IGVhc3kgdG8gY29ubmVjdCB2YXJpb3VzIGFnZW50cyB1c2luZyBhCituZXRsaW5rIGJhc2VkIG5ldHdvcmsuICBPbmUgbXVzdCByZWdpc3RlciBhIGNhbGxiYWNrIGFuZCBhbiBpZGVudGlmaWVyLgorV2hlbiB0aGUgZHJpdmVyIHJlY2VpdmVzIGEgc3BlY2lhbCBuZXRsaW5rIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUKK2lkZW50aWZpZXIsIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4KIAogRnJvbSB0aGUgdXNlcnNwYWNlIHBvaW50IG9mIHZpZXcgaXQncyBxdWl0ZSBzdHJhaWdodGZvcndhcmQ6CiAKQEAgLTE3LDEwICsxNywxMCBAQAogCXNlbmQoKTsKIAlyZWN2KCk7CiAKLUJ1dCBpZiBrZXJuZWxzcGFjZSB3YW50IHRvIHVzZSBmdWxsIHBvd2VyIG9mIHN1Y2ggY29ubmVjdGlvbnMsIGRyaXZlcgotd3JpdGVyIG11c3QgY3JlYXRlIHNwZWNpYWwgc29ja2V0cywgbXVzdCBrbm93IGFib3V0IHN0cnVjdCBza19idWZmCi1oYW5kbGluZy4uLiAgQ29ubmVjdG9yIGFsbG93cyBhbnkga2VybmVsc3BhY2UgYWdlbnRzIHRvIHVzZSBuZXRsaW5rCi1iYXNlZCBuZXR3b3JraW5nIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gaW4gYSBzaWduaWZpY2FudGx5CitCdXQgaWYga2VybmVsc3BhY2Ugd2FudHMgdG8gdXNlIHRoZSBmdWxsIHBvd2VyIG9mIHN1Y2ggY29ubmVjdGlvbnMsIHRoZQorZHJpdmVyIHdyaXRlciBtdXN0IGNyZWF0ZSBzcGVjaWFsIHNvY2tldHMsIG11c3Qga25vdyBhYm91dCBzdHJ1Y3Qgc2tfYnVmZgoraGFuZGxpbmcsIGV0Yy4uLiAgVGhlIENvbm5lY3RvciBkcml2ZXIgYWxsb3dzIGFueSBrZXJuZWxzcGFjZSBhZ2VudHMgdG8gdXNlCituZXRsaW5rIGJhc2VkIG5ldHdvcmtpbmcgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBpbiBhIHNpZ25pZmljYW50bHkKIGVhc2llciB3YXk6CiAKIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSk7CkBAIC0zMiwxNSArMzIsMTUgQEAKIAlfX3UzMgkJCXZhbDsKIH07CiAKLWlkeCBhbmQgdmFsIGFyZSB1bmlxdWUgaWRlbnRpZmllcnMgd2hpY2ggbXVzdCBiZSByZWdpc3RlcmVkIGluCi1jb25uZWN0b3IuaCBmb3IgaW4ta2VybmVsIHVzYWdlLiAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSAtIGlzIGEKLWNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gbWVzc2FnZSB3aXRoIGFib3ZlIGlkeC52YWwKLXdpbGwgYmUgcmVjZWl2ZWQgYnkgY29ubmVjdG9yIGNvcmUuICBBcmd1bWVudCBmb3IgdGhhdCBmdW5jdGlvbiBtdXN0CitpZHggYW5kIHZhbCBhcmUgdW5pcXVlIGlkZW50aWZpZXJzIHdoaWNoIG11c3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUKK2Nvbm5lY3Rvci5oIGhlYWRlciBmb3IgaW4ta2VybmVsIHVzYWdlLiAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSBpcyBhCitjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgbWVzc2FnZSB3aXRoIGFib3ZlIGlkeC52YWwKK2lzIHJlY2VpdmVkIGJ5IHRoZSBjb25uZWN0b3IgY29yZS4gIFRoZSBhcmd1bWVudCBmb3IgdGhhdCBmdW5jdGlvbiBtdXN0CiBiZSBkZXJlZmVyZW5jZWQgdG8gc3RydWN0IGNuX21zZyAqLgogCiBzdHJ1Y3QgY25fbXNnCiB7Ci0Jc3RydWN0IGNiX2lkIAkJaWQ7CisJc3RydWN0IGNiX2lkCQlpZDsKIAogCV9fdTMyCQkJc2VxOwogCV9fdTMyCQkJYWNrOwpAQCAtNTUsOTIgKzU1LDk1IEBACiAKIGludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKSk7CiAKLVJlZ2lzdGVycyBuZXcgY2FsbGJhY2sgd2l0aCBjb25uZWN0b3IgY29yZS4KKyBSZWdpc3RlcnMgbmV3IGNhbGxiYWNrIHdpdGggY29ubmVjdG9yIGNvcmUuCiAKLXN0cnVjdCBjYl9pZCAqaWQgCQktIHVuaXF1ZSBjb25uZWN0b3IncyB1c2VyIGlkZW50aWZpZXIuCi0JCQkgIAkgIEl0IG11c3QgYmUgcmVnaXN0ZXJlZCBpbiBjb25uZWN0b3IuaCBmb3IgbGVnYWwgaW4ta2VybmVsIHVzZXJzLgotY2hhciAqbmFtZSAJCQktIGNvbm5lY3RvcidzIGNhbGxiYWNrIHN5bWJvbGljIG5hbWUuCi12b2lkICgqY2FsbGJhY2spICh2b2lkICopCS0gY29ubmVjdG9yJ3MgY2FsbGJhY2suCisgc3RydWN0IGNiX2lkICppZAkJLSB1bmlxdWUgY29ubmVjdG9yJ3MgdXNlciBpZGVudGlmaWVyLgorCQkJCSAgSXQgbXVzdCBiZSByZWdpc3RlcmVkIGluIGNvbm5lY3Rvci5oIGZvciBsZWdhbCBpbi1rZXJuZWwgdXNlcnMuCisgY2hhciAqbmFtZQkJCS0gY29ubmVjdG9yJ3MgY2FsbGJhY2sgc3ltYm9saWMgbmFtZS4KKyB2b2lkICgqY2FsbGJhY2spICh2b2lkICopCS0gY29ubmVjdG9yJ3MgY2FsbGJhY2suCiAJCQkJICBBcmd1bWVudCBtdXN0IGJlIGRlcmVmZXJlbmNlZCB0byBzdHJ1Y3QgY25fbXNnICouCiAKKwogdm9pZCBjbl9kZWxfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCk7CiAKLVVucmVnaXN0ZXJzIG5ldyBjYWxsYmFjayB3aXRoIGNvbm5lY3RvciBjb3JlLgorIFVucmVnaXN0ZXJzIG5ldyBjYWxsYmFjayB3aXRoIGNvbm5lY3RvciBjb3JlLgogCi1zdHJ1Y3QgY2JfaWQgKmlkIAkJLSB1bmlxdWUgY29ubmVjdG9yJ3MgdXNlciBpZGVudGlmaWVyLgorIHN0cnVjdCBjYl9pZCAqaWQJCS0gdW5pcXVlIGNvbm5lY3RvcidzIHVzZXIgaWRlbnRpZmllci4KKwogCiBpbnQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKm1zZywgdTMyIF9fZ3JvdXBzLCBpbnQgZ2ZwX21hc2spOwogCi1TZW5kcyBtZXNzYWdlIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXBzLiAgSXQgY2FuIGJlIHNhZmVseSBjYWxsZWQgZnJvbQotc29mdGlycSBjb250ZXh0LCBidXQgbWF5IHNpbGVudGx5IGZhaWwgdW5kZXIgc3Ryb25nIG1lbW9yeSBwcmVzc3VyZS4KLUlmIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgZm9yIGdpdmVuIGdyb3VwIC1FU1JDSCBjYW4gYmUgcmV0dXJuZWQuCisgU2VuZHMgbWVzc2FnZSB0byB0aGUgc3BlY2lmaWVkIGdyb3Vwcy4gIEl0IGNhbiBiZSBzYWZlbHkgY2FsbGVkIGZyb20KKyBzb2Z0aXJxIGNvbnRleHQsIGJ1dCBtYXkgc2lsZW50bHkgZmFpbCB1bmRlciBzdHJvbmcgbWVtb3J5IHByZXNzdXJlLgorIElmIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgZm9yIGdpdmVuIGdyb3VwIC1FU1JDSCBjYW4gYmUgcmV0dXJuZWQuCiAKLXN0cnVjdCBjbl9tc2cgKgkJCS0gbWVzc2FnZSBoZWFkZXIod2l0aCBhdHRhY2hlZCBkYXRhKS4KLXUzMiBfX2dyb3VwCQkJLSBkZXN0aW5hdGlvbiBncm91cC4KKyBzdHJ1Y3QgY25fbXNnICoJCS0gbWVzc2FnZSBoZWFkZXIod2l0aCBhdHRhY2hlZCBkYXRhKS4KKyB1MzIgX19ncm91cAkJCS0gZGVzdGluYXRpb24gZ3JvdXAuCiAJCQkJICBJZiBfX2dyb3VwIGlzIHplcm8sIHRoZW4gYXBwcm9wcmlhdGUgZ3JvdXAgd2lsbAogCQkJCSAgYmUgc2VhcmNoZWQgdGhyb3VnaCBhbGwgcmVnaXN0ZXJlZCBjb25uZWN0b3IgdXNlcnMsCiAJCQkJICBhbmQgbWVzc2FnZSB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgZ3JvdXAgd2hpY2ggd2FzCiAJCQkJICBjcmVhdGVkIGZvciB1c2VyIHdpdGggdGhlIHNhbWUgSUQgYXMgaW4gbXNnLgogCQkJCSAgSWYgX19ncm91cCBpcyBub3QgemVybywgdGhlbiBtZXNzYWdlIHdpbGwgYmUgZGVsaXZlcmVkCiAJCQkJICB0byB0aGUgc3BlY2lmaWVkIGdyb3VwLgotaW50IGdmcF9tYXNrCQkJLSBHRlAgbWFzay4KKyBpbnQgZ2ZwX21hc2sJCQktIEdGUCBtYXNrLgogCi1Ob3RlOiBXaGVuIHJlZ2lzdGVyaW5nIG5ldyBjYWxsYmFjayB1c2VyLCBjb25uZWN0b3IgY29yZSBhc3NpZ25zCi1uZXRsaW5rIGdyb3VwIHRvIHRoZSB1c2VyIHdoaWNoIGlzIGVxdWFsIHRvIGl0J3MgaWQuaWR4LgorIE5vdGU6IFdoZW4gcmVnaXN0ZXJpbmcgbmV3IGNhbGxiYWNrIHVzZXIsIGNvbm5lY3RvciBjb3JlIGFzc2lnbnMKKyBuZXRsaW5rIGdyb3VwIHRvIHRoZSB1c2VyIHdoaWNoIGlzIGVxdWFsIHRvIGl0J3MgaWQuaWR4LgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBQcm90b2NvbCBkZXNjcmlwdGlvbi4KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotQ3VycmVudCBvZmZlcnMgdHJhbnNwb3J0IGxheWVyIHdpdGggZml4ZWQgaGVhZGVyLiAgUmVjb21tZW5kZWQKLXByb3RvY29sIHdoaWNoIHVzZXMgc3VjaCBoZWFkZXIgaXMgZm9sbG93aW5nOgorVGhlIGN1cnJlbnQgZnJhbWV3b3JrIG9mZmVycyBhIHRyYW5zcG9ydCBsYXllciB3aXRoIGZpeGVkIGhlYWRlcnMuICBUaGUKK3JlY29tbWVuZGVkIHByb3RvY29sIHdoaWNoIHVzZXMgc3VjaCBhIGhlYWRlciBpcyBhcyBmb2xsb3dpbmc6CiAKIG1zZy0+c2VxIGFuZCBtc2ctPmFjayBhcmUgdXNlZCB0byBkZXRlcm1pbmUgbWVzc2FnZSBnZW5lYWxvZ3kuICBXaGVuCi1zb21lb25lIHNlbmRzIG1lc3NhZ2UgaXQgcHV0cyB0aGVyZSBsb2NhbGx5IHVuaXF1ZSBzZXF1ZW5jZSBhbmQgcmFuZG9tCi1hY2tub3dsZWRnZSBudW1iZXJzLiAgU2VxdWVuY2UgbnVtYmVyIG1heSBiZSBjb3BpZWQgaW50bworc29tZW9uZSBzZW5kcyBhIG1lc3NhZ2UsIHRoZXkgdXNlIGEgbG9jYWxseSB1bmlxdWUgc2VxdWVuY2UgYW5kIHJhbmRvbQorYWNrbm93bGVkZ2UgbnVtYmVyLiAgVGhlIHNlcXVlbmNlIG51bWJlciBtYXkgYmUgY29waWVkIGludG8KIG5sbXNnaGRyLT5ubG1zZ19zZXEgdG9vLgogCi1TZXF1ZW5jZSBudW1iZXIgaXMgaW5jcmVtZW50ZWQgd2l0aCBlYWNoIG1lc3NhZ2UgdG8gYmUgc2VudC4KK1RoZSBzZXF1ZW5jZSBudW1iZXIgaXMgaW5jcmVtZW50ZWQgd2l0aCBlYWNoIG1lc3NhZ2Ugc2VudC4KIAotSWYgd2UgZXhwZWN0IHJlcGx5IHRvIG91ciBtZXNzYWdlLCB0aGVuIHNlcXVlbmNlIG51bWJlciBpbiByZWNlaXZlZAotbWVzc2FnZSBNVVNUIGJlIHRoZSBzYW1lIGFzIGluIG9yaWdpbmFsIG1lc3NhZ2UsIGFuZCBhY2tub3dsZWRnZQotbnVtYmVyIE1VU1QgYmUgdGhlIHNhbWUgKyAxLgorSWYgeW91IGV4cGVjdCBhIHJlcGx5IHRvIHRoZSBtZXNzYWdlLCB0aGVuIHRoZSBzZXF1ZW5jZSBudW1iZXIgaW4gdGhlCityZWNlaXZlZCBtZXNzYWdlIE1VU1QgYmUgdGhlIHNhbWUgYXMgaW4gdGhlIG9yaWdpbmFsIG1lc3NhZ2UsIGFuZCB0aGUKK2Fja25vd2xlZGdlIG51bWJlciBNVVNUIGJlIHRoZSBzYW1lICsgMS4KIAotSWYgd2UgcmVjZWl2ZSBtZXNzYWdlIGFuZCBpdCdzIHNlcXVlbmNlIG51bWJlciBpcyBub3QgZXF1YWwgdG8gb25lIHdlCi1hcmUgZXhwZWN0aW5nLCB0aGVuIGl0IGlzIG5ldyBtZXNzYWdlLiAgSWYgd2UgcmVjZWl2ZSBtZXNzYWdlIGFuZCBpdCdzCi1zZXF1ZW5jZSBudW1iZXIgaXMgdGhlIHNhbWUgYXMgb25lIHdlIGFyZSBleHBlY3RpbmcsIGJ1dCBpdCdzCi1hY2tub3dsZWRnZSBpcyBub3QgZXF1YWwgYWNrbm93bGVkZ2UgbnVtYmVyIGluIG9yaWdpbmFsIG1lc3NhZ2UgKyAxLAotdGhlbiBpdCBpcyBuZXcgbWVzc2FnZS4KK0lmIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGFuZCBpdHMgc2VxdWVuY2UgbnVtYmVyIGlzIG5vdCBlcXVhbCB0byBvbmUgd2UKK2FyZSBleHBlY3RpbmcsIHRoZW4gaXQgaXMgYSBuZXcgbWVzc2FnZS4gIElmIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGFuZAoraXRzIHNlcXVlbmNlIG51bWJlciBpcyB0aGUgc2FtZSBhcyBvbmUgd2UgYXJlIGV4cGVjdGluZywgYnV0IGl0cworYWNrbm93bGVkZ2UgaXMgbm90IGVxdWFsIHRvIHRoZSBhY2tub3dsZWRnZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsCittZXNzYWdlICsgMSwgdGhlbiBpdCBpcyBhIG5ldyBtZXNzYWdlLgogCi1PYnZpb3VzbHksIHByb3RvY29sIGhlYWRlciBjb250YWlucyBhYm92ZSBpZC4KK09idmlvdXNseSwgdGhlIHByb3RvY29sIGhlYWRlciBjb250YWlucyB0aGUgYWJvdmUgaWQuCiAKLWNvbm5lY3RvciBhbGxvd3MgZXZlbnQgbm90aWZpY2F0aW9uIGluIHRoZSBmb2xsb3dpbmcgZm9ybToga2VybmVsCitUaGUgY29ubmVjdG9yIGFsbG93cyBldmVudCBub3RpZmljYXRpb24gaW4gdGhlIGZvbGxvd2luZyBmb3JtOiBrZXJuZWwKIGRyaXZlciBvciB1c2Vyc3BhY2UgcHJvY2VzcyBjYW4gYXNrIGNvbm5lY3RvciB0byBub3RpZnkgaXQgd2hlbgotc2VsZWN0ZWQgaWQncyB3aWxsIGJlIHR1cm5lZCBvbiBvciBvZmYocmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQgaXQncwotY2FsbGJhY2spLiBJdCBpcyBkb25lIGJ5IHNlbmRpbmcgc3BlY2lhbCBjb21tYW5kIHRvIGNvbm5lY3RvcgotZHJpdmVyKGl0IGFsc28gcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIGlkPXstMSwgLTF9KS4KK3NlbGVjdGVkIGlkcyB3aWxsIGJlIHR1cm5lZCBvbiBvciBvZmYgKHJlZ2lzdGVyZWQgb3IgdW5yZWdpc3RlcmVkIGl0cworY2FsbGJhY2spLiAgSXQgaXMgZG9uZSBieSBzZW5kaW5nIGEgc3BlY2lhbCBjb21tYW5kIHRvIHRoZSBjb25uZWN0b3IKK2RyaXZlciAoaXQgYWxzbyByZWdpc3RlcnMgaXRzZWxmIHdpdGggaWQ9ey0xLCAtMX0pLgogCi1BcyBleGFtcGxlIG9mIHVzYWdlIERvY3VtZW50YXRpb24vY29ubmVjdG9yIG5vdyBjb250YWlucyBjbl90ZXN0LmMgLQotdGVzdGluZyBtb2R1bGUgd2hpY2ggdXNlcyBjb25uZWN0b3IgdG8gcmVxdWVzdCBub3RpZmljYXRpb24gYW5kIHRvCi1zZW5kIG1lc3NhZ2VzLgorQXMgZXhhbXBsZSBvZiB0aGlzIHVzYWdlIGNhbiBiZSBmb3VuZCBpbiB0aGUgY25fdGVzdC5jIG1vZHVsZSB3aGljaAordXNlcyB0aGUgY29ubmVjdG9yIHRvIHJlcXVlc3Qgbm90aWZpY2F0aW9uIGFuZCB0byBzZW5kIG1lc3NhZ2VzLgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBSZWxpYWJpbGl0eS4KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotTmV0bGluayBpdHNlbGYgaXMgbm90IHJlbGlhYmxlIHByb3RvY29sLCB0aGF0IG1lYW5zIHRoYXQgbWVzc2FnZXMgY2FuCitOZXRsaW5rIGl0c2VsZiBpcyBub3QgYSByZWxpYWJsZSBwcm90b2NvbC4gIFRoYXQgbWVhbnMgdGhhdCBtZXNzYWdlcyBjYW4KIGJlIGxvc3QgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSBvciBwcm9jZXNzJyByZWNlaXZpbmcgcXVldWUgb3ZlcmZsb3dlZCwKLXNvIGNhbGxlciBpcyB3YXJuZWQgbXVzdCBiZSBwcmVwYXJlZC4gVGhhdCBpcyB3aHkgc3RydWN0IGNuX21zZyBbbWFpbgotY29ubmVjdG9yJ3MgbWVzc2FnZSBoZWFkZXJdIGNvbnRhaW5zIHUzMiBzZXEgYW5kIHUzMiBhY2sgZmllbGRzLgorc28gY2FsbGVyIGlzIHdhcm5lZCB0aGF0IGl0IG11c3QgYmUgcHJlcGFyZWQuICBUaGF0IGlzIHdoeSB0aGUgc3RydWN0Citjbl9tc2cgW21haW4gY29ubmVjdG9yJ3MgbWVzc2FnZSBoZWFkZXJdIGNvbnRhaW5zIHUzMiBzZXEgYW5kIHUzMiBhY2sKK2ZpZWxkcy4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogVXNlcnNwYWNlIHVzYWdlLgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAyLjYuMTQgaGFzIGEgbmV3IG5ldGxpbmsgc29ja2V0IGltcGxlbWVudGF0aW9uLCB3aGljaCBieSBkZWZhdWx0IGRvZXMgbm90Ci1hbGxvdyB0byBzZW5kIGRhdGEgdG8gbmV0bGluayBncm91cHMgb3RoZXIgdGhhbiAxLgotU28sIGlmIHRvIHVzZSBuZXRsaW5rIHNvY2tldCAoZm9yIGV4YW1wbGUgdXNpbmcgY29ubmVjdG9yKSAKLXdpdGggZGlmZmVyZW50IGdyb3VwIG51bWJlciB1c2Vyc3BhY2UgYXBwbGljYXRpb24gbXVzdCBzdWJzY3JpYmUgdG8gCi10aGF0IGdyb3VwLiBJdCBjYW4gYmUgYWNoaWV2ZWQgYnkgZm9sbG93aW5nIHBzZXVkb2NvZGU6CithbGxvdyBwZW9wbGUgdG8gc2VuZCBkYXRhIHRvIG5ldGxpbmsgZ3JvdXBzIG90aGVyIHRoYW4gMS4KK1NvLCBpZiB5b3Ugd2lzaCB0byB1c2UgYSBuZXRsaW5rIHNvY2tldCAoZm9yIGV4YW1wbGUgdXNpbmcgY29ubmVjdG9yKQord2l0aCBhIGRpZmZlcmVudCBncm91cCBudW1iZXIsIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gbXVzdCBzdWJzY3JpYmUgdG8KK3RoYXQgZ3JvdXAgZmlyc3QuICBJdCBjYW4gYmUgYWNoaWV2ZWQgYnkgdGhlIGZvbGxvd2luZyBwc2V1ZG9jb2RlOgogCiBzID0gc29ja2V0KFBGX05FVExJTkssIFNPQ0tfREdSQU0sIE5FVExJTktfQ09OTkVDVE9SKTsKIApAQCAtMTYwLDggKzE2Myw4IEBACiB9CiAKIFdoZXJlIDI3MCBhYm92ZSBpcyBTT0xfTkVUTElOSywgYW5kIDEgaXMgYSBORVRMSU5LX0FERF9NRU1CRVJTSElQIHNvY2tldAotb3B0aW9uLiBUbyBkcm9wIG11bHRpY2FzdCBzdWJzY3JpcHRpb24gb25lIHNob3VsZCBjYWxsIGFib3ZlIHNvY2tldCBvcHRpb24KLXdpdGggTkVUTElOS19EUk9QX01FTUJFUlNISVAgcGFyYW1ldGVyIHdoaWNoIGlzIGRlZmluZWQgYXMgMC4KK29wdGlvbi4gIFRvIGRyb3AgYSBtdWx0aWNhc3Qgc3Vic2NyaXB0aW9uLCBvbmUgc2hvdWxkIGNhbGwgdGhlIGFib3ZlIHNvY2tldAorb3B0aW9uIHdpdGggdGhlIE5FVExJTktfRFJPUF9NRU1CRVJTSElQIHBhcmFtZXRlciB3aGljaCBpcyBkZWZpbmVkIGFzIDAuCiAKIDIuNi4xNCBuZXRsaW5rIGNvZGUgb25seSBhbGxvd3MgdG8gc2VsZWN0IGEgZ3JvdXAgd2hpY2ggaXMgbGVzcyBvciBlcXVhbCB0bwogdGhlIG1heGltdW0gZ3JvdXAgbnVtYmVyLCB3aGljaCBpcyB1c2VkIGF0IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgpIHRpbWUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci91Y29uLmMgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci91Y29uLmMKaW5kZXggYzUwOTJhZC4uNDg0OGRiOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25uZWN0b3IvdWNvbi5jCisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL3Vjb24uYwpAQCAtMzAsMTggKzMwLDI0IEBACiAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KIAorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgogCiAjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CiAKICNkZWZpbmUgREVCVUcKICNkZWZpbmUgTkVUTElOS19DT05ORUNUT1IgCTExCiAKKy8qIEhvcGVmdWxseSB5b3VyIHVzZXJzcGFjZSBjb25uZWN0b3IuaCBtYXRjaGVzIHRoaXMga2VybmVsICovCisjZGVmaW5lIENOX1RFU1RfSURYCQlDTl9ORVRMSU5LX1VTRVJTICsgMworI2RlZmluZSBDTl9URVNUX1ZBTAkJMHg0NTYKKwogI2lmZGVmIERFQlVHCiAjZGVmaW5lIHVsb2coZiwgYS4uLikgZnByaW50ZihzdGRvdXQsIGYsICMjYSkKICNlbHNlCkBAIC04Myw2ICs4OSwyNSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJcHJpbnRmKAorCQkiVXNhZ2U6IHVjb24gW29wdGlvbnNdIFtvdXRwdXQgZmlsZV1cbiIKKwkJIlxuIgorCQkiXHQtaFx0dGhpcyBoZWxwIHNjcmVlblxuIgorCQkiXHQtc1x0c2VuZCBidWZmZXJzIHRvIHRoZSB0ZXN0IG1vZHVsZVxuIgorCQkiXG4iCisJCSJUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB1Y29uIGlzIHRvIHN1YnNjcmliZSB0byB0aGUgdGVzdCBtb2R1bGVcbiIKKwkJImFuZCB3YWl0IGZvciBzdGF0ZSBtZXNzYWdlcy4gIEFueSBvbmVzIHJlY2VpdmVkIGFyZSBkdW1wZWQgdG8gdGhlXG4iCisJCSJzcGVjaWZpZWQgb3V0cHV0IGZpbGUgKG9yIHN0ZG91dCkuICBUaGUgdGVzdCBtb2R1bGUgaXMgYXNzdW1lZCB0b1xuIgorCQkiaGF2ZSBhbiBpZCBvZiB7JXUuJXV9XG4iCisJCSJcbiIKKwkJIklmIHlvdSBnZXQgbm8gb3V0cHV0LCB0aGVuIHZlcmlmeSB0aGUgY25fdGVzdCBtb2R1bGUgaWQgbWF0Y2hlc1xuIgorCQkidGhlIGV4cGVjdGVkIGlkIGFib3ZlLlxuIgorCQksIENOX1RFU1RfSURYLCBDTl9URVNUX1ZBTAorCSk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJaW50IHM7CkBAIC05NCwxNyArMTE5LDM0IEBACiAJRklMRSAqb3V0OwogCXRpbWVfdCB0bTsKIAlzdHJ1Y3QgcG9sbGZkIHBmZDsKKwlib29sIHNlbmRfbXNncyA9IGZhbHNlOwogCi0JaWYgKGFyZ2MgPCAyKQotCQlvdXQgPSBzdGRvdXQ7Ci0JZWxzZSB7Ci0JCW91dCA9IGZvcGVuKGFyZ3ZbMV0sICJhKyIpOworCXdoaWxlICgocyA9IGdldG9wdChhcmdjLCBhcmd2LCAiaHMiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChzKSB7CisJCWNhc2UgJ3MnOgorCQkJc2VuZF9tc2dzID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2gnOgorCQkJdXNhZ2UoKTsKKwkJCXJldHVybiAwOworCisJCWRlZmF1bHQ6CisJCQkvKiBnZXRvcHQoKSBvdXRwdXRzIGFuIGVycm9yIGZvciB1cyAqLworCQkJdXNhZ2UoKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJaWYgKGFyZ2MgIT0gb3B0aW5kKSB7CisJCW91dCA9IGZvcGVuKGFyZ3Zbb3B0aW5kXSwgImErIik7CiAJCWlmICghb3V0KSB7CiAJCQl1bG9nKCJVbmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZzogJXNcbiIsCiAJCQkJYXJndlsxXSwgc3RyZXJyb3IoZXJybm8pKTsKIAkJCW91dCA9IHN0ZG91dDsKIAkJfQotCX0KKwl9IGVsc2UKKwkJb3V0ID0gc3Rkb3V0OwogCiAJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCkBAIC0xMTUsOSArMTU3LDExIEBACiAJfQogCiAJbF9sb2NhbC5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOwotCWxfbG9jYWwubmxfZ3JvdXBzID0gMHgxMjM7IC8qIGJpdG1hc2sgb2YgcmVxdWVzdGVkIGdyb3VwcyAqLworCWxfbG9jYWwubmxfZ3JvdXBzID0gLTE7IC8qIGJpdG1hc2sgb2YgcmVxdWVzdGVkIGdyb3VwcyAqLwogCWxfbG9jYWwubmxfcGlkID0gMDsKIAorCXVsb2coInN1YnNjcmliaW5nIHRvICV1LiV1XG4iLCBDTl9URVNUX0lEWCwgQ05fVEVTVF9WQUwpOworCiAJaWYgKGJpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZsX2xvY2FsLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX25sKSkgPT0gLTEpIHsKIAkJcGVycm9yKCJiaW5kIik7CiAJCWNsb3NlKHMpOwpAQCAtMTMwLDE1ICsxNzQsMTUgQEAKIAkJc2V0c29ja29wdChzLCBTT0xfTkVUTElOSywgTkVUTElOS19BRERfTUVNQkVSU0hJUCwgJm9uLCBzaXplb2Yob24pKTsKIAl9CiAjZW5kaWYKLQlpZiAoMCkgeworCWlmIChzZW5kX21zZ3MpIHsKIAkJaW50IGksIGo7CiAKIAkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCiAJCWRhdGEgPSAoc3RydWN0IGNuX21zZyAqKWJ1ZjsKIAotCQlkYXRhLT5pZC5pZHggPSAweDEyMzsKLQkJZGF0YS0+aWQudmFsID0gMHg0NTY7CisJCWRhdGEtPmlkLmlkeCA9IENOX1RFU1RfSURYOworCQlkYXRhLT5pZC52YWwgPSBDTl9URVNUX1ZBTDsKIAkJZGF0YS0+c2VxID0gc2VxKys7CiAJCWRhdGEtPmFjayA9IDA7CiAJCWRhdGEtPmxlbiA9IDA7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggYmIzYTUzYy4uNTAzZDIxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNiw2ICs2LDM1IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OglQUklTTTU0CitXaGVuOgkyLjYuMzQKKworV2h5OglwcmlzbTU0IEZ1bGxNQUMgUENJIC8gQ2FyZGJ1cyBkZXZpY2VzIHVzZWQgdG8gYmUgc3VwcG9ydGVkIG9ubHkgYnkgdGhlCisJcHJpc201NCB3aXJlbGVzcyBkcml2ZXIuIEFmdGVyIEludGVyc2lsIHN0b3BwZWQgc2VsbGluZyB0aGVzZQorCWRldmljZXMgaW4gcHJlZmVyZW5jZSBmb3IgdGhlIG5ld2VyIG1vcmUgZmxleGlibGUgU29mdE1BQyBkZXZpY2VzCisJYSBTb2Z0TUFDIGRldmljZSBkcml2ZXIgd2FzIHJlcXVpcmVkIGFuZCBwcmlzbTU0IGRpZCBub3Qgc3VwcG9ydAorCXRoZW0uIFRoZSBwNTRwY2kgZHJpdmVyIG5vdyBleGlzdHMgYW5kIGhhcyBiZWVuIHByZXNlbnQgaW4gdGhlIGtlcm5lbCBmb3IKKwlhIHdoaWxlLiBUaGlzIGRyaXZlciBzdXBwb3J0cyBib3RoIFNvZnRNQUMgZGV2aWNlcyBhbmQgRnVsbE1BQyBkZXZpY2VzLgorCVRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBkZXZpY2VzIHdhcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB3aGljaAorCWNvdWxkIGJlIHVzZWQgZm9yIHRoZSBmaXJtd2FyZS4gVGhlIFNvZnRNQUMgZGV2aWNlcyBzdXBwb3J0IGEgc21hbGxlcgorCWFtb3VudCBvZiBtZW1vcnkuIEJlY2F1c2Ugb2YgdGhpcyB0aGUgU29mdE1BQyBmaXJtd2FyZSBmaXRzIGludG8gRnVsbE1BQworCWRldmljZXMncyBtZW1vcnkuIHA1NHBjaSBzdXBwb3J0cyBub3Qgb25seSBQQ0kgLyBDYXJkYnVzIGJ1dCBhbHNvIFVTQgorCWFuZCBTUEkuIFNpbmNlIHA1NHBjaSBzdXBwb3J0cyBhbGwgZGV2aWNlcyBwcmlzbTU0IHN1cHBvcnRzCisJeW91IHdpbGwgaGF2ZSBhIGNvbmZsaWN0LiBJJ20gbm90IHF1aXRlIHN1cmUgaG93IGRpc3RyaWJ1dGlvbnMgYXJlCisJaGFuZGxpbmcgdGhpcyBjb25mbGljdCByaWdodCBub3cuIHByaXNtNTQgd2FzIGtlcHQgYXJvdW5kIGR1ZSB0bworCWNsYWltcyB1c2VycyBtYXkgZXhwZXJpZW5jZSBpc3N1ZXMgd2hlbiB1c2luZyB0aGUgU29mdE1BQyBkcml2ZXIuCisJVGltZSBoYXMgcGFzc2VkIHVzZXJzIGhhdmUgbm90IHJlcG9ydGVkIGlzc3Vlcy4gSWYgeW91IHVzZSBwcmlzbTU0CisJYW5kIGZvciB3aGF0ZXZlciByZWFzb24geW91IGNhbm5vdCB1c2UgcDU0cGNpIHBsZWFzZSBsZXQgdXMga25vdyEKKwlFLW1haWwgdXMgYXQ6IGxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworCisJRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBwNTQgd2lraSBwYWdlOgorCisJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9wNTQKKworV2hvOglMdWlzIFIuIFJvZHJpZ3VleiA8bHJvZHJpZ3VlekBhdGhlcm9zLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CUlSUUZfU0FNUExFX1JBTkRPTQogQ2hlY2s6CUlSUUZfU0FNUExFX1JBTkRPTQogV2hlbjoJSnVseSAyMDA5CkBAIC0yMTcsMzEgKzI0Niw2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2hhdCAoV2h5KToKLQktIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oIGlwdF90b3MuaCBoZWFkZXIgZmlsZXMKLQkgIChzdXBlcnNlZGVkIGJ5IHh0X1RPUy94dF90b3MgdGFyZ2V0ICYgbWF0Y2gpCi0KLQktICJmb3J3YXJkaW5nIiBoZWFkZXIgZmlsZXMgbGlrZSBpcHRfbWFjLmggaW4KLQkgIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvIGFuZCBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LwotCi0JLSB4dF9DT05OTUFSSyBtYXRjaCByZXZpc2lvbiAwCi0JICAoc3VwZXJzZWRlZCBieSB4dF9DT05OTUFSSyBtYXRjaCByZXZpc2lvbiAxKQotCi0JLSB4dF9NQVJLIHRhcmdldCByZXZpc2lvbnMgMCBhbmQgMQotCSAgKHN1cGVyc2VkZWQgYnkgeHRfTUFSSyBtYXRjaCByZXZpc2lvbiAyKQotCi0JLSB4dF9jb25ubWFyayBtYXRjaCByZXZpc2lvbiAwCi0JICAoc3VwZXJzZWRlZCBieSB4dF9jb25ubWFyayBtYXRjaCByZXZpc2lvbiAxKQotCi0JLSB4dF9jb25udHJhY2sgbWF0Y2ggcmV2aXNpb24gMAotCSAgKHN1cGVyc2VkZWQgYnkgeHRfY29ubnRyYWNrIG1hdGNoIHJldmlzaW9uIDEpCi0KLQktIHh0X2lwcmFuZ2UgbWF0Y2ggcmV2aXNpb24gMCwKLQkgIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaAotCSAgKHN1cGVyc2VkZWQgYnkgeHRfaXByYW5nZSBtYXRjaCByZXZpc2lvbiAxKQotCi0JLSB4dF9tYXJrIG1hdGNoIHJldmlzaW9uIDAKLQkgIChzdXBlcnNlZGVkIGJ5IHh0X21hcmsgbWF0Y2ggcmV2aXNpb24gMSkKLQogCS0geHRfcmVjZW50OiB0aGUgb2xkIGlwdF9yZWNlbnQgcHJvYyBkaXIKIAkgIChzdXBlcnNlZGVkIGJ5IC9wcm9jL25ldC94dF9yZWNlbnQpCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi11ZXZlbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZ2ZzMi11ZXZlbnRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDk2NmRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9nZnMyLXVldmVudHMudHh0CkBAIC0wLDAgKzEsMTAwIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZXZlbnRzIGFuZCBHRlMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PQorCitEdXJpbmcgdGhlIGxpZmV0aW1lIG9mIGEgR0ZTMiBtb3VudCwgYSBudW1iZXIgb2YgdWV2ZW50cyBhcmUgZ2VuZXJhdGVkLgorVGhpcyBkb2N1bWVudCBleHBsYWlucyB3aGF0IHRoZSBldmVudHMgYXJlIGFuZCB3aGF0IHRoZXkgYXJlIHVzZWQKK2ZvciAoYnkgZ2ZzX2NvbnRyb2xkIGluIGdmczItdXRpbHMpLgorCitBIGxpc3Qgb2YgR0ZTMiB1ZXZlbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBBREQKKworVGhlIEFERCBldmVudCBvY2N1cnMgYXQgbW91bnQgdGltZS4gSXQgd2lsbCBhbHdheXMgYmUgdGhlIGZpcnN0Cit1ZXZlbnQgZ2VuZXJhdGVkIGJ5IHRoZSBuZXdseSBjcmVhdGVkIGZpbGVzeXN0ZW0uIElmIHRoZSBtb3VudAoraXMgc3VjY2Vzc2Z1bCwgYW4gT05MSU5FIHVldmVudCB3aWxsIGZvbGxvdy4gIElmIGl0IGlzIG5vdCBzdWNjZXNzZnVsCit0aGVuIGEgUkVNT1ZFIHVldmVudCB3aWxsIGZvbGxvdy4KKworVGhlIEFERCB1ZXZlbnQgaGFzIHR3byBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IFNQRUNUQVRPUj1bMHwxXQorYW5kIFJET05MWT1bMHwxXSB0aGF0IHNwZWNpZnkgdGhlIHNwZWN0YXRvciBzdGF0dXMgKGEgcmVhZC1vbmx5IG1vdW50Cit3aXRoIG5vIGpvdXJuYWwgYXNzaWduZWQpLCBhbmQgcmVhZC1vbmx5ICh3aXRoIGpvdXJuYWwgYXNzaWduZWQpIHN0YXR1cworb2YgdGhlIGZpbGVzeXN0ZW0gcmVzcGVjdGl2ZWx5LgorCisyLiBPTkxJTkUKKworVGhlIE9OTElORSB1ZXZlbnQgaXMgZ2VuZXJhdGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBtb3VudCBvciByZW1vdW50LiBJdAoraGFzIHRoZSBzYW1lIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcyB0aGUgQUREIHVldmVudC4gVGhlIE9OTElORQordWV2ZW50LCBhbG9uZyB3aXRoIHRoZSB0d28gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBzcGVjdGF0b3IgYW5kCitSRE9OTFkgYXJlIGEgcmVsYXRpdmVseSByZWNlbnQgYWRkaXRpb24gKDIuNi4zMi1yYyspIGFuZCB3aWxsIG5vdAorYmUgZ2VuZXJhdGVkIGJ5IG9sZGVyIGtlcm5lbHMuCisKKzMuIENIQU5HRQorCitUaGUgQ0hBTkdFIHVldmVudCBpcyB1c2VkIGluIHR3byBwbGFjZXMuIE9uZSBpcyB3aGVuIHJlcG9ydGluZyB0aGUKK3N1Y2Nlc3NmdWwgbW91bnQgb2YgdGhlIGZpbGVzeXN0ZW0gYnkgdGhlIGZpcnN0IG5vZGUgKEZJUlNUTU9VTlQ9RG9uZSkuCitUaGlzIGlzIHVzZWQgYXMgYSBzaWduYWwgYnkgZ2ZzX2NvbnRyb2xkIHRoYXQgaXQgaXMgdGhlbiBvayBmb3Igb3RoZXIKK25vZGVzIGluIHRoZSBjbHVzdGVyIHRvIG1vdW50IHRoZSBmaWxlc3lzdGVtLgorCitUaGUgb3RoZXIgQ0hBTkdFIHVldmVudCBpcyB1c2VkIHRvIGluZm9ybSBvZiB0aGUgY29tcGxldGlvbgorb2Ygam91cm5hbCByZWNvdmVyeSBmb3Igb25lIG9mIHRoZSBmaWxlc3lzdGVtcyBqb3VybmFscy4gSXQgaGFzCit0d28gZW52aXJvbm1lbnQgdmFyaWFibGVzLCBKSUQ9IHdoaWNoIHNwZWNpZmllcyB0aGUgam91cm5hbCBpZCB3aGljaAoraGFzIGp1c3QgYmVlbiByZWNvdmVyZWQsIGFuZCBSRUNPVkVSWT1bRG9uZXxGYWlsZWRdIHRvIGluZGljYXRlIHRoZQorc3VjY2VzcyAob3Igb3RoZXJ3aXNlKSBvZiB0aGUgb3BlcmF0aW9uLiBUaGVzZSB1ZXZlbnRzIGFyZSBnZW5lcmF0ZWQKK2ZvciBldmVyeSBqb3VybmFsIHJlY292ZXJlZCwgd2hldGhlciBpdCBpcyBkdXJpbmcgdGhlIGluaXRpYWwgbW91bnQKK3Byb2Nlc3Mgb3IgYXMgdGhlIHJlc3VsdCBvZiBnZnNfY29udHJvbGQgcmVxdWVzdGluZyBhIHNwZWNpZmljIGpvdXJuYWwKK3JlY292ZXJ5IHZpYSB0aGUgL3N5cy9mcy9nZnMyLzxmc25hbWU+L2xvY2tfbW9kdWxlL3JlY292ZXJ5IGZpbGUuCisKK0JlY2F1c2UgdGhlIENIQU5HRSB1ZXZlbnQgd2FzIHVzZWQgKGluIGVhcmx5IHZlcnNpb25zIG9mIGdmc19jb250cm9sZCkKK3dpdGhvdXQgY2hlY2tpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBkaXNjb3ZlciB0aGUgc3RhdGUsIHdlCitjYW5ub3QgYWRkIGFueSBtb3JlIGZ1bmN0aW9ucyB0byBpdCB3aXRob3V0IHJ1bm5pbmcgdGhlIHJpc2sgb2YKK3NvbWVvbmUgdXNpbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiB0aGUgdXNlciB0b29scyBhbmQgYnJlYWtpbmcgdGhlaXIKK2NsdXN0ZXIuIEZvciB0aGlzIHJlYXNvbiB0aGUgT05MSU5FIHVldmVudCB3YXMgdXNlZCB3aGVuIGFkZGluZyBhIG5ldwordWV2ZW50IGZvciBhIHN1Y2Nlc3NmdWwgbW91bnQgb3IgcmVtb3VudC4KKworNC4gT0ZGTElORQorCitUaGUgT0ZGTElORSB1ZXZlbnQgaXMgb25seSBnZW5lcmF0ZWQgZHVlIHRvIGZpbGVzeXN0ZW0gZXJyb3JzIGFuZCBpcyB1c2VkCithcyBwYXJ0IG9mIHRoZSAid2l0aGRyYXciIG1lY2hhbmlzbS4gQ3VycmVudGx5IHRoaXMgZG9lc24ndCBnaXZlIGFueQoraW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgZXJyb3IgaXMsIHdoaWNoIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvCitiZSBmaXhlZC4KKworNS4gUkVNT1ZFCisKK1RoZSBSRU1PVkUgdWV2ZW50IGlzIGdlbmVyYXRlZCBhdCB0aGUgZW5kIG9mIGFuIHVuc3VjY2Vzc2Z1bCBtb3VudAorb3IgYXQgdGhlIGVuZCBvZiBhIHVtb3VudCBvZiB0aGUgZmlsZXN5c3RlbS4gQWxsIFJFTU9WRSB1ZXZlbnRzIHdpbGwKK2hhdmUgYmVlbiBwcmVjZWVkZWQgYnkgYXQgbGVhc3QgYW4gQUREIHVldmVudCBmb3IgdGhlIHNhbWUgZmlsZXlzdGVtLAorYW5kIHVubGlrZSB0aGUgb3RoZXIgdWV2ZW50cyBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUga2VybmVsJ3MKK2tvYmplY3Qgc3Vic3lzdGVtLgorCisKK0luZm9ybWF0aW9uIGNvbW1vbiB0byBhbGwgR0ZTMiB1ZXZlbnRzICh1ZXZlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBMT0NLVEFCTEU9CisKK1RoZSBMT0NLVEFCTEUgaXMgYSBzdHJpbmcsIGFzIHN1cHBsaWVkIG9uIHRoZSBtb3VudCBjb21tYW5kCitsaW5lIChsb2NrdGFibGU9KSBvciB2aWEgZnN0YWIuIEl0IGlzIHVzZWQgYXMgYSBmaWxlc3lzdGVtIGxhYmVsCithcyB3ZWxsIGFzIHByb3ZpZGluZyB0aGUgaW5mb3JtYXRpb24gZm9yIGEgbG9ja19kbG0gbW91bnQgdG8gYmUKK2FibGUgdG8gam9pbiB0aGUgY2x1c3Rlci4KKworMi4gTE9DS1BST1RPPQorCitUaGUgTE9DS1BST1RPIGlzIGEgc3RyaW5nLCBhbmQgaXRzIHZhbHVlIGRlcGVuZHMgb24gd2hhdCBpcyBzZXQKK29uIHRoZSBtb3VudCBjb21tYW5kIGxpbmUsIG9yIHZpYSBmc3RhYi4gSXQgd2lsbCBiZSBlaXRoZXIKK2xvY2tfbm9sb2NrIG9yIGxvY2tfZGxtLiBJbiB0aGUgZnV0dXJlIG90aGVyIGxvY2sgbWFuYWdlcnMKK21heSBiZSBzdXBwb3J0ZWQuCisKKzMuIEpPVVJOQUxJRD0KKworSWYgYSBqb3VybmFsIGlzIGluIHVzZSBieSB0aGUgZmlsZXN5c3RlbSAoam91cm5hbHMgYXJlIG5vdAorYXNzaWduZWQgZm9yIHNwZWN0YXRvciBtb3VudHMpIHRoZW4gdGhpcyB3aWxsIGdpdmUgdGhlCitudW1lcmljIGpvdXJuYWwgaWQgaW4gYWxsIEdGUzIgdWV2ZW50cy4KKworNC4gVVVJRD0KKworV2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgZ2ZzMi11dGlscywgbWtmcy5nZnMyIHdyaXRlcyBhIFVVSUQKK2ludG8gdGhlIGZpbGVzeXN0ZW0gc3VwZXJibG9jay4gSWYgaXQgZXhpc3RzLCB0aGlzIHdpbGwKK2JlIGluY2x1ZGVkIGluIGV2ZXJ5IHVldmVudCByZWxhdGluZyB0byB0aGUgZmlsZXN5c3RlbS4KKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zZXFfZmlsZS50eHQKaW5kZXggYjg0Mzc0My4uMGQxNWViYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zZXFfZmlsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zZXFfZmlsZS50eHQKQEAgLTQ2LDcgKzQ2LDcgQEAKIGZvbGxvd2luZzoKIAogICAgIGRkIGlmPS9wcm9jL3NlcXVlbmNlIG9mPW91dDEgY291bnQ9MQotICAgIGRkIGlmPS9wcm9jL3NlcXVlbmNlIHNraXA9MSBvdXQ9b3V0MiBjb3VudD0xCisgICAgZGQgaWY9L3Byb2Mvc2VxdWVuY2Ugc2tpcD0xIG9mPW91dDIgY291bnQ9MQogCiBUaGVuIGNvbmNhdGVuYXRlIHRoZSBvdXRwdXQgZmlsZXMgb3V0MSBhbmQgb3V0MiBhbmQgZ2V0IHRoZSByaWdodAogcmVzdWx0LiBZZXMsIGl0IGlzIGEgdGhvcm91Z2hseSB1c2VsZXNzIG1vZHVsZSwgYnV0IHRoZSBwb2ludCBpcyB0byBzaG93CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlYjI2OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dApAQCAtMCwwICsxLDk5IEBACitVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAorTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0pvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+CisKK0xhcmdlIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb25zIGNhbiBiZSB1bnJlbGlhYmxlIGluIHRoZSBMaW51eCBrZXJuZWwuCitLZXJuZWwgcHJvZ3JhbW1lcnMgd2lsbCBzb21ldGltZXMgcmVzcG9uZCB0byB0aGlzIHByb2JsZW0gYnkgYWxsb2NhdGluZworcGFnZXMgd2l0aCB2bWFsbG9jKCkuICBUaGlzIHNvbHV0aW9uIG5vdCBpZGVhbCwgdGhvdWdoLiAgT24gMzItYml0IHN5c3RlbXMsCittZW1vcnkgZnJvbSB2bWFsbG9jKCkgbXVzdCBiZSBtYXBwZWQgaW50byBhIHJlbGF0aXZlbHkgc21hbGwgYWRkcmVzcyBzcGFjZTsKK2l0J3MgZWFzeSB0byBydW4gb3V0LiAgT24gU01QIHN5c3RlbXMsIHRoZSBwYWdlIHRhYmxlIGNoYW5nZXMgcmVxdWlyZWQgYnkKK3ZtYWxsb2MoKSBhbGxvY2F0aW9ucyBjYW4gcmVxdWlyZSBleHBlbnNpdmUgY3Jvc3MtcHJvY2Vzc29yIGludGVycnVwdHMgb24KK2FsbCBDUFVzLiAgQW5kLCBvbiBhbGwgc3lzdGVtcywgdXNlIG9mIHNwYWNlIGluIHRoZSB2bWFsbG9jKCkgcmFuZ2UKK2luY3JlYXNlcyBwcmVzc3VyZSBvbiB0aGUgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciAoVExCKSwgcmVkdWNpbmcgdGhlCitwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtLgorCitJbiBtYW55IGNhc2VzLCB0aGUgbmVlZCBmb3IgbWVtb3J5IGZyb20gdm1hbGxvYygpIGNhbiBiZSBlbGltaW5hdGVkIGJ5CitwaWVjaW5nIHRvZ2V0aGVyIGFuIGFycmF5IGZyb20gc21hbGxlciBwYXJ0czsgdGhlIGZsZXhpYmxlIGFycmF5IGxpYnJhcnkKK2V4aXN0cyB0byBtYWtlIHRoaXMgdGFzayBlYXNpZXIuCisKK0EgZmxleGlibGUgYXJyYXkgaG9sZHMgYW4gYXJiaXRyYXJ5ICh3aXRoaW4gbGltaXRzKSBudW1iZXIgb2YgZml4ZWQtc2l6ZWQKK29iamVjdHMsIGFjY2Vzc2VkIHZpYSBhbiBpbnRlZ2VyIGluZGV4LiAgU3BhcnNlIGFycmF5cyBhcmUgaGFuZGxlZAorcmVhc29uYWJseSB3ZWxsLiAgT25seSBzaW5nbGUtcGFnZSBhbGxvY2F0aW9ucyBhcmUgbWFkZSwgc28gbWVtb3J5CithbGxvY2F0aW9uIGZhaWx1cmVzIHNob3VsZCBiZSByZWxhdGl2ZWx5IHJhcmUuICBUaGUgZG93biBzaWRlcyBhcmUgdGhhdCB0aGUKK2FycmF5cyBjYW5ub3QgYmUgaW5kZXhlZCBkaXJlY3RseSwgaW5kaXZpZHVhbCBvYmplY3Qgc2l6ZSBjYW5ub3QgZXhjZWVkIHRoZQorc3lzdGVtIHBhZ2Ugc2l6ZSwgYW5kIHB1dHRpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgcmVxdWlyZXMgYSBjb3B5CitvcGVyYXRpb24uICBJdCdzIGFsc28gd29ydGggbm90aW5nIHRoYXQgZmxleGlibGUgYXJyYXlzIGRvIG5vIGludGVybmFsCitsb2NraW5nIGF0IGFsbDsgaWYgY29uY3VycmVudCBhY2Nlc3MgdG8gYW4gYXJyYXkgaXMgcG9zc2libGUsIHRoZW4gdGhlCitjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBhcHByb3ByaWF0ZSBtdXR1YWwgZXhjbHVzaW9uLgorCitUaGUgY3JlYXRpb24gb2YgYSBmbGV4aWJsZSBhcnJheSBpcyBkb25lIHdpdGg6CisKKyAgICAjaW5jbHVkZSA8bGludXgvZmxleF9hcnJheS5oPgorCisgICAgc3RydWN0IGZsZXhfYXJyYXkgKmZsZXhfYXJyYXlfYWxsb2MoaW50IGVsZW1lbnRfc2l6ZSwKKwkJCQkJdW5zaWduZWQgaW50IHRvdGFsLAorCQkJCQlnZnBfdCBmbGFncyk7CisKK1RoZSBpbmRpdmlkdWFsIG9iamVjdCBzaXplIGlzIHByb3ZpZGVkIGJ5IGVsZW1lbnRfc2l6ZSwgd2hpbGUgdG90YWwgaXMgdGhlCittYXhpbXVtIG51bWJlciBvZiBvYmplY3RzIHdoaWNoIGNhbiBiZSBzdG9yZWQgaW4gdGhlIGFycmF5LiAgVGhlIGZsYWdzCithcmd1bWVudCBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGludGVybmFsIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzLiAgV2l0aAordGhlIGN1cnJlbnQgY29kZSwgdXNpbmcgZmxhZ3MgdG8gYXNrIGZvciBoaWdoIG1lbW9yeSBpcyBsaWtlbHkgdG8gbGVhZCB0bworbm90YWJseSB1bnBsZWFzYW50IHNpZGUgZWZmZWN0cy4KKworU3RvcmluZyBkYXRhIGludG8gYSBmbGV4aWJsZSBhcnJheSBpcyBhY2NvbXBsaXNoZWQgd2l0aCBhIGNhbGwgdG86CisKKyAgICBpbnQgZmxleF9hcnJheV9wdXQoc3RydWN0IGZsZXhfYXJyYXkgKmFycmF5LCB1bnNpZ25lZCBpbnQgZWxlbWVudF9uciwKKyAgICAJCSAgICAgICB2b2lkICpzcmMsIGdmcF90IGZsYWdzKTsKKworVGhpcyBjYWxsIHdpbGwgY29weSB0aGUgZGF0YSBmcm9tIHNyYyBpbnRvIHRoZSBhcnJheSwgaW4gdGhlIHBvc2l0aW9uCitpbmRpY2F0ZWQgYnkgZWxlbWVudF9uciAod2hpY2ggbXVzdCBiZSBsZXNzIHRoYW4gdGhlIG1heGltdW0gc3BlY2lmaWVkIHdoZW4KK3RoZSBhcnJheSB3YXMgY3JlYXRlZCkuICBJZiBhbnkgbWVtb3J5IGFsbG9jYXRpb25zIG11c3QgYmUgcGVyZm9ybWVkLCBmbGFncword2lsbCBiZSB1c2VkLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorb3RoZXJ3aXNlLgorCitUaGVyZSBtaWdodCBwb3NzaWJseSBiZSBhIG5lZWQgdG8gc3RvcmUgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgd2hpbGUKK3J1bm5pbmcgaW4gc29tZSBzb3J0IG9mIGF0b21pYyBjb250ZXh0OyBpbiB0aGlzIHNpdHVhdGlvbiwgc2xlZXBpbmcgaW4gdGhlCittZW1vcnkgYWxsb2NhdG9yIHdvdWxkIGJlIGEgYmFkIHRoaW5nLiAgVGhhdCBjYW4gYmUgYXZvaWRlZCBieSB1c2luZworR0ZQX0FUT01JQyBmb3IgdGhlIGZsYWdzIHZhbHVlLCBidXQsIG9mdGVuLCB0aGVyZSBpcyBhIGJldHRlciB3YXkuICBUaGUKK3RyaWNrIGlzIHRvIGVuc3VyZSB0aGF0IGFueSBuZWVkZWQgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBkb25lIGJlZm9yZQorZW50ZXJpbmcgYXRvbWljIGNvbnRleHQsIHVzaW5nOgorCisgICAgaW50IGZsZXhfYXJyYXlfcHJlYWxsb2Moc3RydWN0IGZsZXhfYXJyYXkgKmFycmF5LCB1bnNpZ25lZCBpbnQgc3RhcnQsCisJCQkgICAgdW5zaWduZWQgaW50IGVuZCwgZ2ZwX3QgZmxhZ3MpOworCitUaGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgbWVtb3J5IGZvciB0aGUgZWxlbWVudHMgaW5kZXhlZCBpbiB0aGUgcmFuZ2UKK2RlZmluZWQgYnkgc3RhcnQgYW5kIGVuZCBoYXMgYmVlbiBhbGxvY2F0ZWQuICBUaGVyZWFmdGVyLCBhCitmbGV4X2FycmF5X3B1dCgpIGNhbGwgb24gYW4gZWxlbWVudCBpbiB0aGF0IHJhbmdlIGlzIGd1YXJhbnRlZWQgbm90IHRvCitibG9jay4KKworR2V0dGluZyBkYXRhIGJhY2sgb3V0IG9mIHRoZSBhcnJheSBpcyBkb25lIHdpdGg6CisKKyAgICB2b2lkICpmbGV4X2FycmF5X2dldChzdHJ1Y3QgZmxleF9hcnJheSAqZmEsIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gdGhlIGRhdGEgZWxlbWVudCwgb3IgTlVMTCBpZiB0aGF0CitwYXJ0aWN1bGFyIGVsZW1lbnQgaGFzIG5ldmVyIGJlZW4gYWxsb2NhdGVkLgorCitOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gZ2V0IGJhY2sgYSB2YWxpZCBwb2ludGVyIGZvciBhbiBlbGVtZW50IHdoaWNoCitoYXMgbmV2ZXIgYmVlbiBzdG9yZWQgaW4gdGhlIGFycmF5LiAgTWVtb3J5IGZvciBhcnJheSBlbGVtZW50cyBpcyBhbGxvY2F0ZWQKK29uZSBwYWdlIGF0IGEgdGltZTsgYSBzaW5nbGUgYWxsb2NhdGlvbiBjb3VsZCBwcm92aWRlIG1lbW9yeSBmb3Igc2V2ZXJhbAorYWRqYWNlbnQgZWxlbWVudHMuICBUaGUgZmxleGlibGUgYXJyYXkgY29kZSBkb2VzIG5vdCBrbm93IGlmIGEgc3BlY2lmaWMKK2VsZW1lbnQgaGFzIGJlZW4gd3JpdHRlbjsgaXQgb25seSBrbm93cyBpZiB0aGUgYXNzb2NpYXRlZCBtZW1vcnkgaXMKK3ByZXNlbnQuICBTbyBhIGZsZXhfYXJyYXlfZ2V0KCkgY2FsbCBvbiBhbiBlbGVtZW50IHdoaWNoIHdhcyBuZXZlciBzdG9yZWQKK2luIHRoZSBhcnJheSBoYXMgdGhlIHBvdGVudGlhbCB0byByZXR1cm4gYSBwb2ludGVyIHRvIHJhbmRvbSBkYXRhLiAgSWYgdGhlCitjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIHNlcGFyYXRlIHdheSB0byBrbm93IHdoaWNoIGVsZW1lbnRzIHdlcmUgYWN0dWFsbHkKK3N0b3JlZCwgaXQgbWlnaHQgYmUgd2lzZSwgYXQgbGVhc3QsIHRvIGFkZCBHRlBfWkVSTyB0byB0aGUgZmxhZ3MgYXJndW1lbnQKK3RvIGVuc3VyZSB0aGF0IGFsbCBlbGVtZW50cyBhcmUgemVyb2VkLgorCitUaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKK3Rob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKKworICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CisKK1RoaXMgY2FsbCBmcmVlcyBhbGwgZWxlbWVudHMsIGJ1dCBsZWF2ZXMgdGhlIGFycmF5IGl0c2VsZiBpbiBwbGFjZS4KK0ZyZWVpbmcgdGhlIGVudGlyZSBhcnJheSBpcyBkb25lIHdpdGg6CisKKyAgICB2b2lkIGZsZXhfYXJyYXlfZnJlZShzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitBcyBvZiB0aGlzIHdyaXRpbmcsIHRoZXJlIGFyZSBubyB1c2VycyBvZiBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIG1haW5saW5lCitrZXJuZWwuICBUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBoZXJlIGFyZSBhbHNvIG5vdCBleHBvcnRlZCB0byBtb2R1bGVzOwordGhhdCB3aWxsIHByb2JhYmx5IGJlIGZpeGVkIHdoZW4gc29tZWJvZHkgY29tZXMgdXAgd2l0aCBhIG5lZWQgZm9yIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L3NlbnRlbGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzE2MGEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9zZW50ZWxpYy50eHQKQEAgLTAsMCArMSw0NzUgQEAKK0NvcHlyaWdodCAoQykgMjAwMi0yMDA4IFNlbnRlbGljIENvcnBvcmF0aW9uLgorTGFzdCB1cGRhdGU6IE9jdC0zMS0yMDA4CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBGaW5nZXIgU2Vuc2luZyBQYWQgSW50ZWxsaW1vdXNlIE1vZGUoc2Nyb2xsaW5nIHdoZWVsLCA0dGggYW5kIDV0aCBidXR0b25zKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBKSBNU0lEIDQ6IFNjcm9sbGluZyB3aGVlbCBtb2RlIHBsdXMgRm9yd2FyZCBwYWdlKDR0aCBidXR0b24pIGFuZCBCYWNrd2FyZAorICAgcGFnZSAoNXRoIGJ1dHRvbikKK0AxLiBTZXQgc2FtcGxlIHJhdGUgdG8gMjAwOworQDIuIFNldCBzYW1wbGUgcmF0ZSB0byAyMDA7CitAMy4gU2V0IHNhbXBsZSByYXRlIHRvIDgwOworQDQuIElzc3VpbmcgdGhlICJHZXQgZGV2aWNlIElEIiBjb21tYW5kICgweEYyKSBhbmQgd2FpdHMgZm9yIHRoZSByZXNwb25zZTsKK0A1LiBGU1Agd2lsbCByZXNwb25kIDB4MDQuCisKK1BhY2tldCAxCisgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAorQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CisgIDEgICB8WXxYfHl8eHwxfE18UnxMfCAgMiAgfFh8WHxYfFh8WHxYfFh8WHwgIDMgfFl8WXxZfFl8WXxZfFl8WXwgIDQgfCB8IHxCfEZ8V3xXfFd8V3wKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAorCitCeXRlIDE6IEJpdDcgPT4gWSBvdmVyZmxvdworICAgICAgICBCaXQ2ID0+IFggb3ZlcmZsb3cKKyAgICAgICAgQml0NSA9PiBZIHNpZ24gYml0CisgICAgICAgIEJpdDQgPT4gWCBzaWduIGJpdAorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBNaWRkbGUgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogWCBNb3ZlbWVudCg5LWJpdCAyJ3MgY29tcGxlbWVudCBpbnRlZ2VycykKK0J5dGUgMzogWSBNb3ZlbWVudCg5LWJpdCAyJ3MgY29tcGxlbWVudCBpbnRlZ2VycykKK0J5dGUgNDogQml0M35CaXQwID0+IHRoZSBzY3JvbGxpbmcgd2hlZWwncyBtb3ZlbWVudCBzaW5jZSB0aGUgbGFzdCBkYXRhIHJlcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgIHZhbGlkIHZhbHVlcywgLTggfiArNworICAgICAgICBCaXQ0ID0+IDEgPSA0dGggbW91c2UgYnV0dG9uIGlzIHByZXNzZWQsIEZvcndhcmQgb25lIHBhZ2UuCisgICAgICAgICAgICAgICAgMCA9IDR0aCBtb3VzZSBidXR0b24gaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDUgPT4gMSA9IDV0aCBtb3VzZSBidXR0b24gaXMgcHJlc3NlZCwgQmFja3dhcmQgb25lIHBhZ2UuCisgICAgICAgICAgICAgICAgMCA9IDV0aCBtb3VzZSBidXR0b24gaXMgbm90IHByZXNzZWQuCisKK0IpIE1TSUQgNjogSG9yaXpvbnRhbCBhbmQgVmVydGljYWwgc2Nyb2xsaW5nLgorQCBTZXQgYml0IDEgaW4gcmVnaXN0ZXIgMHg0MCB0byAxCisKKyMgRlNQIHJlcGxhY2VzIHNjcm9sbGluZyB3aGVlbCdzIG1vdmVtZW50IGFzIDQgYml0cyB0byBzaG93IGhvcml6b250YWwgYW5kCisgIHZlcnRpY2FsIHNjcm9sbGluZy4KKworUGFja2V0IDEKKyAgIEJpdCA3IDYgNSA0IDMgMiAxIDAgICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwICAgICAgNyA2IDUgNCAzIDIgMSAwCitCWVRFICB8LS0tLS0tLS0tLS0tLS0tfEJZVEUgfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXxCWVRFfC0tLS0tLS0tLS0tLS0tLXwKKyAgMSAgIHxZfFh8eXx4fDF8TXxSfEx8ICAyICB8WHxYfFh8WHxYfFh8WHxYfCAgMyB8WXxZfFl8WXxZfFl8WXxZfCAgNCB8IHwgfEJ8RnxsfHJ8dXxkfAorICAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgIHwtLS0tLS0tLS0tLS0tLS18CisKK0J5dGUgMTogQml0NyA9PiBZIG92ZXJmbG93CisgICAgICAgIEJpdDYgPT4gWCBvdmVyZmxvdworICAgICAgICBCaXQ1ID0+IFkgc2lnbiBiaXQKKyAgICAgICAgQml0NCA9PiBYIHNpZ24gYml0CisgICAgICAgIEJpdDMgPT4gMQorICAgICAgICBCaXQyID0+IE1pZGRsZSBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MSA9PiBSaWdodCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MCA9PiBMZWZ0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorQnl0ZSAyOiBYIE1vdmVtZW50KDktYml0IDIncyBjb21wbGVtZW50IGludGVnZXJzKQorQnl0ZSAzOiBZIE1vdmVtZW50KDktYml0IDIncyBjb21wbGVtZW50IGludGVnZXJzKQorQnl0ZSA0OiBCaXQwID0+IHRoZSBWZXJ0aWNhbCBzY3JvbGxpbmcgbW92ZW1lbnQgZG93bndhcmQuCisJQml0MSA9PiB0aGUgVmVydGljYWwgc2Nyb2xsaW5nIG1vdmVtZW50IHVwd2FyZC4KKwlCaXQyID0+IHRoZSBWZXJ0aWNhbCBzY3JvbGxpbmcgbW92ZW1lbnQgcmlnaHR3YXJkLgorCUJpdDMgPT4gdGhlIFZlcnRpY2FsIHNjcm9sbGluZyBtb3ZlbWVudCBsZWZ0d2FyZC4KKyAgICAgICAgQml0NCA9PiAxID0gNHRoIG1vdXNlIGJ1dHRvbiBpcyBwcmVzc2VkLCBGb3J3YXJkIG9uZSBwYWdlLgorICAgICAgICAgICAgICAgIDAgPSA0dGggbW91c2UgYnV0dG9uIGlzIG5vdCBwcmVzc2VkLgorICAgICAgICBCaXQ1ID0+IDEgPSA1dGggbW91c2UgYnV0dG9uIGlzIHByZXNzZWQsIEJhY2t3YXJkIG9uZSBwYWdlLgorICAgICAgICAgICAgICAgIDAgPSA1dGggbW91c2UgYnV0dG9uIGlzIG5vdCBwcmVzc2VkLgorCitDKSBNU0lEIDc6CisjIEZTUCB1c2VzIDIgcGFja2V0cyg4IEJ5dGVzKSBkYXRhIHRvIHJlcHJlc2VudCBBYnNvbHV0ZSBQb3NpdGlvbgorICBzbyB3ZSBoYXZlIFBBQ0tFVCBOVU1CRVIgdG8gaWRlbnRpZnkgcGFja2V0cy4KKyAgSWYgUEFDS0VUIE5VTUJFUiBpcyAwLCB0aGUgcGFja2V0IGlzIFBhY2tldCAxLgorICBJZiBQQUNLRVQgTlVNQkVSIGlzIDEsIHRoZSBwYWNrZXQgaXMgUGFja2V0IDIuCisgIFBsZWFzZSBjb3VudCB0aGlzIG51bWJlciBpbiBwcm9ncmFtLgorCisjIE1TSUQ2IHNwZWNpYWwgcGFja2V0IHdpbGwgYmUgZW5hYmxlIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiBlbmFibGUgTVNJRCA3LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogQWJzb2x1dGUgcG9zaXRpb24gZm9yIFNUTDM4ODYtRzAuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0AgU2V0IGJpdCAyIG9yIDMgaW4gcmVnaXN0ZXIgMHg0MCB0byAxCitAIFNldCBiaXQgNiBpbiByZWdpc3RlciAweDQwIHRvIDEKKworUGFja2V0IDEgKEFCU09MVVRFIFBPU0lUSU9OKQorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfDB8MXxWfDF8MXxNfFJ8THwgIDIgIHxYfFh8WHxYfFh8WHxYfFh8ICAzIHxZfFl8WXxZfFl8WXxZfFl8ICA0IHxyfGx8ZHx1fFh8WHxZfFl8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworQnl0ZSAxOiBCaXQ3fkJpdDYgPT4gMDAsIE5vcm1hbCBkYXRhIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMDEsIEFic29sdXRlIGNvb3JkaW5hdGlvbiBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDEwLCBOb3RpZnkgcGFja2V0CisgICAgICAgIEJpdDUgPT4gdmFsaWQgYml0CisgICAgICAgIEJpdDQgPT4gMQorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBNaWRkbGUgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogWCBjb29yZGluYXRlICh4cG9zWzk6Ml0pCitCeXRlIDM6IFkgY29vcmRpbmF0ZSAoeXBvc1s5OjJdKQorQnl0ZSA0OiBCaXQxfkJpdDAgPT4gWSBjb29yZGluYXRlICh4cG9zWzE6MF0pCisgICAgICAgIEJpdDN+Qml0MiA9PiBYIGNvb3JkaW5hdGUgKHlwb3NbMTowXSkKKyAgICAgICAgQml0NCA9PiBzY3JvbGwgdXAKKyAgICAgICAgQml0NSA9PiBzY3JvbGwgZG93bgorICAgICAgICBCaXQ2ID0+IHNjcm9sbCBsZWZ0CisgICAgICAgIEJpdDcgPT4gc2Nyb2xsIHJpZ2h0CisKK05vdGlmeSBQYWNrZXQgZm9yIEcwCisgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAorQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CisgIDEgICB8MXwwfDB8MXwxfE18UnxMfCAgMiAgfEN8Q3xDfEN8Q3xDfEN8Q3wgIDMgfE18TXxNfE18TXxNfE18TXwgIDQgfDB8MHwwfDB8MHwwfDB8MHwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAorCitCeXRlIDE6IEJpdDd+Qml0NiA9PiAwMCwgTm9ybWFsIGRhdGEgcGFja2V0CisgICAgICAgICAgICAgICAgICA9PiAwMSwgQWJzb2x1dGUgY29vcmRpbmF0aW9uIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMTAsIE5vdGlmeSBwYWNrZXQKKyAgICAgICAgQml0NSA9PiAwCisgICAgICAgIEJpdDQgPT4gMQorICAgICAgICBCaXQzID0+IDEKKyAgICAgICAgQml0MiA9PiBNaWRkbGUgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDEgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgbm90IHByZXNzZWQuCisgICAgICAgIEJpdDAgPT4gTGVmdCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KK0J5dGUgMjogTWVzc2FnZSBUeXBlID0+IDB4NUEgKEVuYWJsZS9EaXNhYmxlIHN0YXR1cyBwYWNrZXQpCisgICAgICAgIE1vZGUgVHlwZSA9PiAweEE1IChOb3JtYWwvSWNvbiBtb2RlIHN0YXR1cykKK0J5dGUgMzogTWVzc2FnZSBUeXBlID0+IDB4MDAgKERpc2FibGVkKQorICAgICAgICAgICAgICAgICAgICAgPT4gMHgwMSAoRW5hYmxlZCkKKyAgICAgICAgTW9kZSBUeXBlICAgID0+IDB4MDAgKE5vcm1hbCkKKyAgICAgICAgICAgICAgICAgICAgID0+IDB4MDEgKEljb24pCitCeXRlIDQ6IEJpdDd+Qml0MCA9PiBEb24ndCBDYXJlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBBYnNvbHV0ZSBwb3NpdGlvbiBmb3IgU1RMMzg4OC1BMC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUGFja2V0IDEgKEFCU09MVVRFIFBPU0lUSU9OKQorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfDB8MXxWfEF8MXxMfDB8MXwgIDIgIHxYfFh8WHxYfFh8WHxYfFh8ICAzIHxZfFl8WXxZfFl8WXxZfFl8ICA0IHx4fHh8eXx5fFh8WHxZfFl8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworQnl0ZSAxOiBCaXQ3fkJpdDYgPT4gMDAsIE5vcm1hbCBkYXRhIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMDEsIEFic29sdXRlIGNvb3JkaW5hdGlvbiBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDEwLCBOb3RpZnkgcGFja2V0CisgICAgICAgIEJpdDUgPT4gVmFsaWQgYml0LCAwIG1lYW5zIHRoYXQgdGhlIGNvb3JkaW5hdGUgaXMgaW52YWxpZCBvciBmaW5nZXIgdXAuCisgICAgICAgICAgICAgICAgV2hlbiBib3RoIGZpbmdlcnMgYXJlIHVwLCB0aGUgbGFzdCB0d28gcmVwb3J0cyBoYXZlIHplcm8gdmFsaWQKKyAgICAgICAgICAgICAgICBiaXQuCisgICAgICAgIEJpdDQgPT4gYXJjCisgICAgICAgIEJpdDMgPT4gMQorICAgICAgICBCaXQyID0+IExlZnQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgcmVsZWFzZWQuCisgICAgICAgIEJpdDEgPT4gMAorICAgICAgICBCaXQwID0+IDEKK0J5dGUgMjogWCBjb29yZGluYXRlICh4cG9zWzk6Ml0pCitCeXRlIDM6IFkgY29vcmRpbmF0ZSAoeXBvc1s5OjJdKQorQnl0ZSA0OiBCaXQxfkJpdDAgPT4gWSBjb29yZGluYXRlICh4cG9zWzE6MF0pCisgICAgICAgIEJpdDN+Qml0MiA9PiBYIGNvb3JkaW5hdGUgKHlwb3NbMTowXSkKKyAgICAgICAgQml0NX5CaXQ0ID0+IHkxX2cKKyAgICAgICAgQml0N35CaXQ2ID0+IHgxX2cKKworUGFja2V0IDIgKEFCU09MVVRFIFBPU0lUSU9OKQorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfDB8MXxWfEF8MXxSfDF8MHwgIDIgIHxYfFh8WHxYfFh8WHxYfFh8ICAzIHxZfFl8WXxZfFl8WXxZfFl8ICA0IHx4fHh8eXx5fFh8WHxZfFl8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworQnl0ZSAxOiBCaXQ3fkJpdDYgPT4gMDAsIE5vcm1hbCBkYXRhIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMDEsIEFic29sdXRlIGNvb3JkaW5hdGVzIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMTAsIE5vdGlmeSBwYWNrZXQKKyAgICAgICAgQml0NSA9PiBWYWxpZCBiaXQsIDAgbWVhbnMgdGhhdCB0aGUgY29vcmRpbmF0ZSBpcyBpbnZhbGlkIG9yIGZpbmdlciB1cC4KKyAgICAgICAgICAgICAgICBXaGVuIGJvdGggZmluZ2VycyBhcmUgdXAsIHRoZSBsYXN0IHR3byByZXBvcnRzIGhhdmUgemVybyB2YWxpZAorICAgICAgICAgICAgICAgIGJpdC4KKyAgICAgICAgQml0NCA9PiBhcmMKKyAgICAgICAgQml0MyA9PiAxCisgICAgICAgIEJpdDIgPT4gUmlnaHQgQnV0dG9uLCAxIGlzIHByZXNzZWQsIDAgaXMgcmVsZWFzZWQuCisgICAgICAgIEJpdDEgPT4gMQorICAgICAgICBCaXQwID0+IDAKK0J5dGUgMjogWCBjb29yZGluYXRlICh4cG9zWzk6Ml0pCitCeXRlIDM6IFkgY29vcmRpbmF0ZSAoeXBvc1s5OjJdKQorQnl0ZSA0OiBCaXQxfkJpdDAgPT4gWSBjb29yZGluYXRlICh4cG9zWzE6MF0pCisgICAgICAgIEJpdDN+Qml0MiA9PiBYIGNvb3JkaW5hdGUgKHlwb3NbMTowXSkKKyAgICAgICAgQml0NX5CaXQ0ID0+IHkyX2cKKyAgICAgICAgQml0N35CaXQ2ID0+IHgyX2cKKworTm90aWZ5IFBhY2tldCBmb3IgU1RMMzg4OC1BMAorICAgQml0IDcgNiA1IDQgMyAyIDEgMCAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAgICAgICA3IDYgNSA0IDMgMiAxIDAKK0JZVEUgIHwtLS0tLS0tLS0tLS0tLS18QllURSB8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfEJZVEV8LS0tLS0tLS0tLS0tLS0tfAorICAxICAgfDF8MHwxfFB8MXxNfFJ8THwgIDIgIHxDfEN8Q3xDfEN8Q3xDfEN8ICAzIHwwfDB8RnxGfDB8MHwwfGl8ICA0IHxyfGx8ZHx1fDB8MHwwfDB8CisgICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwgICAgfC0tLS0tLS0tLS0tLS0tLXwKKworQnl0ZSAxOiBCaXQ3fkJpdDYgPT4gMDAsIE5vcm1hbCBkYXRhIHBhY2tldAorICAgICAgICAgICAgICAgICAgPT4gMDEsIEFic29sdXRlIGNvb3JkaW5hdGlvbiBwYWNrZXQKKyAgICAgICAgICAgICAgICAgID0+IDEwLCBOb3RpZnkgcGFja2V0CisgICAgICAgIEJpdDUgPT4gMQorICAgICAgICBCaXQ0ID0+IHdoZW4gaW4gYWJzb2x1dGUgY29vcmRpbmF0ZXMgbW9kZSAodmFsaWQgd2hlbiBFTl9QS1RfR08gaXMgMSk6CisgICAgICAgICAgICAgICAgMDogbGVmdCBidXR0b24gaXMgZ2VuZXJhdGVkIGJ5IHRoZSBvbi1wYWQgY29tbWFuZAorICAgICAgICAgICAgICAgIDE6IGxlZnQgYnV0dG9uIGlzIGdlbmVyYXRlZCBieSB0aGUgZXh0ZXJuYWwgYnV0dG9uCisgICAgICAgIEJpdDMgPT4gMQorICAgICAgICBCaXQyID0+IE1pZGRsZSBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MSA9PiBSaWdodCBCdXR0b24sIDEgaXMgcHJlc3NlZCwgMCBpcyBub3QgcHJlc3NlZC4KKyAgICAgICAgQml0MCA9PiBMZWZ0IEJ1dHRvbiwgMSBpcyBwcmVzc2VkLCAwIGlzIG5vdCBwcmVzc2VkLgorQnl0ZSAyOiBNZXNzYWdlIFR5cGUgPT4gMHhCNyAoTXVsdGkgRmluZ2VyLCBNdWx0aSBDb29yZGluYXRlIG1vZGUpCitCeXRlIDM6IEJpdDd+Qml0NiA9PiBEb24ndCBjYXJlCisgICAgICAgIEJpdDV+Qml0NCA9PiBOdW1iZXIgb2YgZmluZ2VycworICAgICAgICBCaXQzfkJpdDEgPT4gUmVzZXJ2ZWQKKyAgICAgICAgQml0MCA9PiAxOiBlbnRlciBnZXN0dXJlIG1vZGU7IDA6IGxlYXZpbmcgZ2VzdHVyZSBtb2RlCitCeXRlIDQ6IEJpdDcgPT4gc2Nyb2xsIHJpZ2h0IGJ1dHRvbgorICAgICAgICBCaXQ2ID0+IHNjcm9sbCBsZWZ0IGJ1dHRvbgorICAgICAgICBCaXQ1ID0+IHNjcm9sbCBkb3duIGJ1dHRvbgorICAgICAgICBCaXQ0ID0+IHNjcm9sbCB1cCBidXR0b24KKyAgICAgICAgICAgICogTm90ZSB0aGF0IGlmIGdlc3R1cmUgYW5kIGFkZGl0aW9uYWwgYnV0dG9uIChCaXQ0fkJpdDcpCisJICAgICAgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBidXR0b24gaW5mb3JtYXRpb24gd2lsbCBub3QKKwkgICAgICBiZSBzZW50LgorICAgICAgICBCaXQzfkJpdDAgPT4gUmVzZXJ2ZWQKKworU2FtcGxlIHNlcXVlbmNlIG9mIE11bHRpLWZpbmdlciwgTXVsdGktY29vcmRpbmF0ZSBtb2RlOgorCisJbm90aWZ5IHBhY2tldCAodmFsaWQgYml0ID09IDEpLCBhYnMgcGt0IDEsIGFicyBwa3QgMiwgYWJzIHBrdCAxLAorCWFicyBwa3QgMiwgLi4uLCBub3RpZnkgcGFja2V0KHZhbGlkIGJpdCA9PSAwKQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogRlNQIEVuYWJsZS9EaXNhYmxlIHBhY2tldAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBCaXQgNyA2IDUgNCAzIDIgMSAwICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgIDcgNiA1IDQgMyAyIDEgMAorQllURSAgfC0tLS0tLS0tLS0tLS0tLXxCWVRFIHwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18QllURXwtLS0tLS0tLS0tLS0tLS18CisgIDEgICB8WXxYfDB8MHwxfE18UnxMfCAgMiAgfDB8MXwwfDF8MXwwfDF8RXwgIDMgfCB8IHwgfCB8IHwgfCB8IHwgIDQgfCB8IHwgfCB8IHwgfCB8IHwKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS18ICAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfCAgICB8LS0tLS0tLS0tLS0tLS0tfAorCitGU1Agd2lsbCBzZW5kIG91dCBlbmFibGUvZGlzYWJsZSBwYWNrZXQgd2hlbiBGU1AgcmVjZWl2ZSBQUy8yIGVuYWJsZS9kaXNhYmxlCitjb21tYW5kLiBIb3N0IHdpbGwgcmVjZWl2ZSB0aGUgcGFja2V0IHdoaWNoIE1pZGRsZSwgUmlnaHQsIExlZnQgYnV0dG9uIHdpbGwKK2JlIHNldC4gVGhlIHBhY2tldCBvbmx5IHVzZSBieXRlIDAgYW5kIGJ5dGUgMSBhcyBhIHBhdHRlcm4gb2Ygb3JpZ2luYWwgcGFja2V0LgorSWdub3JlIHRoZSBvdGhlciBieXRlcyBvZiB0aGUgcGFja2V0LgorCitCeXRlIDE6IEJpdDcgPT4gMCwgWSBvdmVyZmxvdworICAgICAgICBCaXQ2ID0+IDAsIFggb3ZlcmZsb3cKKwlCaXQ1ID0+IDAsIFkgc2lnbiBiaXQKKyAgICAgICAgQml0NCA9PiAwLCBYIHNpZ24gYml0CisJQml0MyA9PiAxCisJQml0MiA9PiAxLCBNaWRkbGUgQnV0dG9uCisgICAgICAgIEJpdDEgPT4gMSwgUmlnaHQgQnV0dG9uCisgICAgICAgIEJpdDAgPT4gMSwgTGVmdCBCdXR0b24KK0J5dGUgMjogQml0N34xID0+ICgwMTAxMTAxYikKKyAgICAgICAgQml0MCA9PiAxID0gRW5hYmxlCisJCTAgPSBEaXNhYmxlCitCeXRlIDM6IERvbid0IGNhcmUKK0J5dGUgNDogRG9uJ3QgY2FyZSAoTU9VU0UgSUQgMywgNCkKK0J5dGUgNX44OiBEb24ndCBjYXJlIChBYnNvbHV0ZSBwYWNrZXQpCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBQUy8yIENvbW1hbmQgU2V0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRlNQIHN1cHBvcnRzIGJhc2ljIFBTLzIgY29tbWFuZGluZyBzZXQgYW5kIG1vZGVzLCByZWZlciB0byBmb2xsb3dpbmcgVVJMIGZvcgorZGV0YWlscyBhYm91dCBQUy8yIGNvbW1hbmRzOgorCitodHRwOi8vd3d3LmNvbXB1dGVyLWVuZ2luZWVyaW5nLm9yZy9pbmRleC5waHA/dGl0bGU9UFMvMl9Nb3VzZV9JbnRlcmZhY2UKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIFByb2dyYW1taW5nIFNlcXVlbmNlIGZvciBEZXRlcm1pbmluZyBQYWNrZXQgUGFyc2luZyBGbG93Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzEuIElkZW50aWZ5IEZTUCBieSByZWFkaW5nIGRldmljZSBJRCgweDAwKSBhbmQgdmVyc2lvbigweDAxKSByZWdpc3RlcgorCisyLiBEZXRlcm1pbmUgbnVtYmVyIG9mIGJ1dHRvbnMgYnkgcmVhZGluZyBzdGF0dXMyICgweDBiKSByZWdpc3RlcgorCisJYnV0dG9ucyA9IHJlZ1sweDBiXSAmIDB4MzAKKworCWlmIGJ1dHRvbnMgPT0gMHgzMCBvciBidXR0b25zID09IDB4MjA6CisJCSMgdHdvL2ZvdXIgYnV0dG9ucworCQlSZWZlciB0byAnRmluZ2VyIFNlbnNpbmcgUGFkIFBTLzIgTW91c2UgSW50ZWxsaW1vdXNlJworCQlzZWN0aW9uIEEgZm9yIHBhY2tldCBwYXJzaW5nIGRldGFpbChpZ25vcmUgYnl0ZSA0LCBiaXQgfiA3KQorCWVsaWYgYnV0dG9ucyA9PSAweDEwOgorCQkjIDYgYnV0dG9ucworCQlSZWZlciB0byAnRmluZ2VyIFNlbnNpbmcgUGFkIFBTLzIgTW91c2UgSW50ZWxsaW1vdXNlJworCQlzZWN0aW9uIEIgZm9yIHBhY2tldCBwYXJzaW5nIGRldGFpbAorCWVsaWYgYnV0dG9ucyA9PSAweDAwOgorCQkjIDYgYnV0dG9ucworCQlSZWZlciB0byAnRmluZ2VyIFNlbnNpbmcgUGFkIFBTLzIgTW91c2UgSW50ZWxsaW1vdXNlJworCQlzZWN0aW9uIEEgZm9yIHBhY2tldCBwYXJzaW5nIGRldGFpbAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogUHJvZ3JhbW1pbmcgU2VxdWVuY2UgZm9yIFJlZ2lzdGVyIFJlYWRpbmcvV3JpdGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlZ2lzdGVyIGludmVyc2lvbiByZXF1aXJlbWVudDoKKworICBGb2xsb3dpbmcgdmFsdWVzIG5lZWRlZCB0byBiZSBpbnZlcnRlZCh0aGUgJ34nIG9wZXJhdG9yIGluIEMpIGJlZm9yZSBiZWluZworc2VudCB0byBGU1A6CisKKwkweGU5LCAweGVlLCAweGYyIGFuZCAweGZmLgorCitSZWdpc3RlciBzd2FwcGluZyByZXF1aXJlbWVudDoKKworICBGb2xsb3dpbmcgdmFsdWVzIG5lZWRlZCB0byBoYXZlIHRoZWlyIGhpZ2hlciA0IGJpdHMgYW5kIGxvd2VyIDQgYml0cyBiZWluZworc3dhcHBlZCBiZWZvcmUgYmVpbmcgc2VudCB0byBGU1A6CisKKwkxMCwgMjAsIDQwLCA2MCwgODAsIDEwMCBhbmQgMjAwLgorCitSZWdpc3RlciByZWFkaW5nIHNlcXVlbmNlOgorCisJMS4gc2VuZCAweGYzIFBTLzIgY29tbWFuZCB0byBGU1A7CisKKwkyLiBzZW5kIDB4NjYgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTMuIHNlbmQgMHg4OCBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJNC4gc2VuZCAweGYzIFBTLzIgY29tbWFuZCB0byBGU1A7CisKKwk1LiBpZiB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBiZWluZyB0byByZWFkIGlzIG5vdCByZXF1aXJlZCB0byBiZQorCWludmVydGVkKHJlZmVyIHRvIHRoZSAnUmVnaXN0ZXIgaW52ZXJzaW9uIHJlcXVpcmVtZW50JyBzZWN0aW9uKSwKKwlnb3RvIHN0ZXAgNgorCisJNWEuIHNlbmQgMHg2OCBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJNWIuIHNlbmQgdGhlIGludmVydGVkIHJlZ2lzdGVyIGFkZHJlc3MgdG8gRlNQIGFuZCBnb3RvIHN0ZXAgODsKKworCTYuIGlmIHRoZSByZWdpc3RlciBhZGRyZXNzIGJlaW5nIHRvIHJlYWQgaXMgbm90IHJlcXVpcmVkIHRvIGJlCisJc3dhcHBlZChyZWZlciB0byB0aGUgJ1JlZ2lzdGVyIHN3YXBwaW5nIHJlcXVpcmVtZW50JyBzZWN0aW9uKSwKKwlnb3RvIHN0ZXAgNworCisJNmEuIHNlbmQgMHhjYyBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJNmIuIHNlbmQgdGhlIHN3YXBwZWQgcmVnaXN0ZXIgYWRkcmVzcyB0byBGU1AgYW5kIGdvdG8gc3RlcCA4OworCisJNy4gc2VuZCAweDY2IFBTLzIgY29tbWFuZCB0byBGU1A7CisKKwk3YS4gc2VuZCB0aGUgb3JpZ2luYWwgcmVnaXN0ZXIgYWRkcmVzcyB0byBGU1AgYW5kIGdvdG8gc3RlcCA4OworCisJOC4gc2VuZCAweGU5KHN0YXR1cyByZXF1ZXN0KSBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJOS4gdGhlIHJlc3BvbnNlIHJlYWQgZnJvbSBGU1Agc2hvdWxkIGJlIHRoZSByZXF1ZXN0ZWQgcmVnaXN0ZXIgdmFsdWUuCisKK1JlZ2lzdGVyIHdyaXRpbmcgc2VxdWVuY2U6CisKKwkxLiBzZW5kIDB4ZjMgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTIuIGlmIHRoZSByZWdpc3RlciBhZGRyZXNzIGJlaW5nIHRvIHdyaXRlIGlzIG5vdCByZXF1aXJlZCB0byBiZQorCWludmVydGVkKHJlZmVyIHRvIHRoZSAnUmVnaXN0ZXIgaW52ZXJzaW9uIHJlcXVpcmVtZW50JyBzZWN0aW9uKSwKKwlnb3RvIHN0ZXAgMworCisJMmEuIHNlbmQgMHg3NCBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJMmIuIHNlbmQgdGhlIGludmVydGVkIHJlZ2lzdGVyIGFkZHJlc3MgdG8gRlNQIGFuZCBnb3RvIHN0ZXAgNTsKKworCTMuIGlmIHRoZSByZWdpc3RlciBhZGRyZXNzIGJlaW5nIHRvIHdyaXRlIGlzIG5vdCByZXF1aXJlZCB0byBiZQorCXN3YXBwZWQocmVmZXIgdG8gdGhlICdSZWdpc3RlciBzd2FwcGluZyByZXF1aXJlbWVudCcgc2VjdGlvbiksCisJZ290byBzdGVwIDQKKworCTNhLiBzZW5kIDB4NzcgUFMvMiBjb21tYW5kIHRvIEZTUDsKKworCTNiLiBzZW5kIHRoZSBzd2FwcGVkIHJlZ2lzdGVyIGFkZHJlc3MgdG8gRlNQIGFuZCBnb3RvIHN0ZXAgNTsKKworCTQuIHNlbmQgMHg1NSBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJNGEuIHNlbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgdG8gRlNQIGFuZCBnb3RvIHN0ZXAgNTsKKworCTUuIHNlbmQgMHhmMyBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJNi4gaWYgdGhlIHJlZ2lzdGVyIHZhbHVlIGJlaW5nIHRvIHdyaXRlIGlzIG5vdCByZXF1aXJlZCB0byBiZQorCWludmVydGVkKHJlZmVyIHRvIHRoZSAnUmVnaXN0ZXIgaW52ZXJzaW9uIHJlcXVpcmVtZW50JyBzZWN0aW9uKSwKKwlnb3RvIHN0ZXAgNworCisJNmEuIHNlbmQgMHg0NyBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJNmIuIHNlbmQgdGhlIGludmVydGVkIHJlZ2lzdGVyIHZhbHVlIHRvIEZTUCBhbmQgZ290byBzdGVwIDk7CisKKwk3LiBpZiB0aGUgcmVnaXN0ZXIgdmFsdWUgYmVpbmcgdG8gd3JpdGUgaXMgbm90IHJlcXVpcmVkIHRvIGJlCisJc3dhcHBlZChyZWZlciB0byB0aGUgJ1JlZ2lzdGVyIHN3YXBwaW5nIHJlcXVpcmVtZW50JyBzZWN0aW9uKSwKKwlnb3RvIHN0ZXAgOAorCisJN2EuIHNlbmQgMHg0NCBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJN2IuIHNlbmQgdGhlIHN3YXBwZWQgcmVnaXN0ZXIgdmFsdWUgdG8gRlNQIGFuZCBnb3RvIHN0ZXAgOTsKKworCTguIHNlbmQgMHgzMyBQUy8yIGNvbW1hbmQgdG8gRlNQOworCisJOGEuIHNlbmQgdGhlIHJlZ2lzdGVyIHZhbHVlIHRvIEZTUDsKKworCTkuIHRoZSByZWdpc3RlciB3cml0aW5nIHNlcXVlbmNlIGlzIGNvbXBsZXRlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqIFJlZ2lzdGVyIExpc3RpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitvZmZzZXQJd2lkdGgJCWRlZmF1bHQJci93CW5hbWUKKzB4MDAJYml0N35iaXQwCTB4MDEJUk8JZGV2aWNlIElECisKKzB4MDEJYml0N35iaXQwCTB4YzAJUlcJdmVyc2lvbiBJRAorCisweDAyCWJpdDd+Yml0MAkweDAxCVJPCXZlbmRvciBJRAorCisweDAzCWJpdDd+Yml0MAkweDAxCVJPCXByb2R1Y3QgSUQKKworMHgwNAliaXQzfmJpdDAJMHgwMQlSVwlyZXZpc2lvbiBJRAorCisweDBiCQkJCVJPCXRlc3QgbW9kZSBzdGF0dXMgMQorCWJpdDMJCTEJUk8JMDogcm90YXRlIDE4MCBkZWdyZWUsIDE6IG5vIHJvdGF0aW9uCisKKwliaXQ1fmJpdDQJCVJPCW51bWJlciBvZiBidXR0b25zCisJCQkxMSA9PiAyLCBsYnRuL3JidG4KKwkJCTEwID0+IDQsIGxidG4vcmJ0bi9zY3J1L3NjcmQKKwkJCTAxID0+IDYsIGxidG4vcmJ0bi9zY3J1L3NjcmQvc2NybC9zY3JyCisJCQkwMCA9PiA2LCBsYnRuL3JidG4vc2NydS9zY3JkL2ZidG4vYmJ0bgorCisweDBmCQkJCVJXCXJlZ2lzdGVyIGZpbGUgcGFnZSBjb250cm9sCisJYml0MAkJMAlSVwkxIHRvIGVuYWJsZSBwYWdlIDEgcmVnaXN0ZXIgZmlsZXMKKworMHgxMAkJCQlSVwlzeXN0ZW0gY29udHJvbCAxCisJYml0MAkJMQlSVwlSZXNlcnZlZCwgbXVzdCBiZSAxCisJYml0MQkJMAlSVwlSZXNlcnZlZCwgbXVzdCBiZSAwCisJYml0NAkJMQlSVwlSZXNlcnZlZCwgbXVzdCBiZSAwCisJYml0NQkJMAlSVwlyZWdpc3RlciBjbG9jayBnYXRpbmcgZW5hYmxlCisJCQkJCTA6IHJlYWQgb25seSwgMTogcmVhZC93cml0ZSBlbmFibGUKKwkoTm90ZSB0aGF0IGZvbGxvd2luZyByZWdpc3RlcnMgZG9lcyBub3QgcmVxdWlyZSBjbG9jayBnYXRpbmcgYmVpbmcKKwllbmFibGVkIHByaW9yIHRvIHdyaXRlOiAwNSAwNiAwNyAwOCAwOSAwYyAwZiAxMCAxMSAxMiAxNiAxNyAxOCAyMyAyZQorCTQwIDQxIDQyIDQzLikKKworMHgzMQkJCQlSVwlvbi1wYWQgY29tbWFuZCBkZXRlY3Rpb24KKwliaXQ3CQkwCVJXCW9uLXBhZCBjb21tYW5kIGxlZnQgYnV0dG9uIGRvd24gdGFnCisJCQkJCWVuYWJsZQorCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKKworMHgzNAkJCQlSVwlvbi1wYWQgY29tbWFuZCBjb250cm9sIDUKKwliaXQ0fmJpdDAJMHgwNQlSVwlYTE8gaW4gMHMvNC8xLCBzbyAwM2ggPSAwMDEwLjFiID0gMi41CisJKE5vdGUgdGhhdCBwb3NpdGlvbiB1bml0IGlzIGluIDAuNSBzY2FubGluZSkKKworCWJpdDcJCTAJUlcJb24tcGFkIHRhcCB6b25lIGVuYWJsZQorCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKKworMHgzNQkJCQlSVwlvbi1wYWQgY29tbWFuZCBjb250cm9sIDYKKwliaXQ0fmJpdDAJMHgxZAlSVwlYSEkgaW4gMHMvNC8xLCBzbyAxOWggPSAxMTAwLjFiID0gMTIuNQorCShOb3RlIHRoYXQgcG9zaXRpb24gdW5pdCBpcyBpbiAwLjUgc2NhbmxpbmUpCisKKzB4MzYJCQkJUlcJb24tcGFkIGNvbW1hbmQgY29udHJvbCA3CisJYml0NH5iaXQwCTB4MDQJUlcJWUxPIGluIDBzLzQvMSwgc28gMDNoID0gMDAxMC4xYiA9IDIuNQorCShOb3RlIHRoYXQgcG9zaXRpb24gdW5pdCBpcyBpbiAwLjUgc2NhbmxpbmUpCisKKzB4MzcJCQkJUlcJb24tcGFkIGNvbW1hbmQgY29udHJvbCA4CisJYml0NH5iaXQwCTB4MTMJUlcJWUhJIGluIDBzLzQvMSwgc28gMTFoID0gMTAwMC4xYiA9IDguNQorCShOb3RlIHRoYXQgcG9zaXRpb24gdW5pdCBpcyBpbiAwLjUgc2NhbmxpbmUpCisKKzB4NDAJCQkJUlcJc3lzdGVtIGNvbnRyb2wgNQorCWJpdDEJCTAJUlcJRlNQIEludGVsbGltb3VzZSBtb2RlIGVuYWJsZQorCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKKworCWJpdDIJCTAJUlcJbW92ZW1lbnQgKyBhYnMuIGNvb3JkaW5hdGUgbW9kZSBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisJKE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBiaXQgMSBldmVuIHdoZW4KKwliaXQgMSBpcyBub3Qgc2V0LiBIb3dldmVyLCB0aGUgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgYml0IDEuCisJSW4gYWRkaXRpb24sIHdoZW4gYml0IDEgYW5kIGJpdCAyIGFyZSBzZXQgYXQgdGhlIHNhbWUgdGltZSwgYml0IDIgd2lsbAorCW92ZXJyaWRlIGJpdCAxLikKKworCWJpdDMJCTAJUlcJYWJzLiBjb29yZGluYXRlIG9ubHkgbW9kZSBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisJKE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBiaXQgMSBldmVuIHdoZW4KKwliaXQgMSBpcyBub3Qgc2V0LiBIb3dldmVyLCB0aGUgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgYml0IDEuCisJSW4gYWRkaXRpb24sIHdoZW4gYml0IDEsIGJpdCAyIGFuZCBiaXQgMyBhcmUgc2V0IGF0IHRoZSBzYW1lIHRpbWUsCisJYml0IDMgd2lsbCBvdmVycmlkZSBiaXQgMSBhbmQgMi4pCisKKwliaXQ1CQkwCVJXCWF1dG8gc3dpdGNoIGVuYWJsZQorCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKKworCWJpdDYJCTAJUlcJRzAgYWJzLiArIG5vdGlmeSBwYWNrZXQgZm9ybWF0IGVuYWJsZQorCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKKwkoTm90ZSB0aGF0IHRoZSBhYnNvbHV0ZS9yZWxhdGl2ZSBjb29yZGluYXRlIG91dHB1dCBzdGlsbCBkZXBlbmRzIG9uCisJYml0IDIgYW5kIDMuICBUaGF0IGlzLCBpZiBhbnkgb2YgdGhvc2UgYml0IGlzIDEsIGhvc3Qgd2lsbCByZWNlaXZlCisJYWJzb2x1dGUgY29vcmRpbmF0ZXM7IG90aGVyd2lzZSwgaG9zdCBvbmx5IHJlY2VpdmVzIHBhY2tldHMgd2l0aAorCXJlbGF0aXZlIGNvb3JkaW5hdGUuKQorCisweDQzCQkJCVJXCW9uLXBhZCBjb250cm9sCisJYml0MAkJMAlSVwlvbi1wYWQgY29udHJvbCBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCisJKE5vdGUgdGhhdCBpZiB0aGlzIGJpdCBpcyBjbGVhcmVkLCBiaXQgMy81IHdpbGwgYmUgaW5lZmZlY3RpdmUpCisKKwliaXQzCQkwCVJXCW9uLXBhZCBmaXggdmVydGljYWwgc2Nyb2xsaW5nIGVuYWJsZQorCQkJCQkwOiBkaXNhYmxlLCAxOiBlbmFibGUKKworCWJpdDUJCTAJUlcJb24tcGFkIGZpeCBob3Jpem9udGFsIHNjcm9sbGluZyBlbmFibGUKKwkJCQkJMDogZGlzYWJsZSwgMTogZW5hYmxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKaW5kZXggZGJlYTRmOS4uYWFmY2EwYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dApAQCAtMTIxLDYgKzEyMSw3IEBACiAnYycJMDAtN0YJbGludXgvY29tc3RhdHMuaAljb25mbGljdCEKICdjJwkwMC03RglsaW51eC9jb2RhLmgJCWNvbmZsaWN0IQogJ2MnCTgwLTlGCWFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaHNjLmgKKydjJwlBMC1BRiAgIGFyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCiAnZCcJMDAtRkYJbGludXgvY2hhci9kcm0vZHJtL2gJY29uZmxpY3QhCiAnZCcJRjAtRkYJbGludXgvZGlnaTEuaAogJ2UnCWFsbAlsaW51eC9kaWdpMS5oCQljb25mbGljdCEKQEAgLTE5Miw3ICsxOTMsNyBAQAogMHhBRAkwMAlOZXRmaWx0ZXIgZGV2aWNlCWluIGRldmVsb3BtZW50OgogCQkJCQk8bWFpbHRvOnJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4JCiAweEFFCWFsbAlsaW51eC9rdm0uaAkJS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZQotCQkJCQk8bWFpbHRvOmt2bS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisJCQkJCTxtYWlsdG86a3ZtQHZnZXIua2VybmVsLm9yZz4KIDB4QjAJYWxsCVJBVElPIGRldmljZXMJCWluIGRldmVsb3BtZW50OgogCQkJCQk8bWFpbHRvOnZnb0ByYXRpby5kZT4KIDB4QjEJMDAtMUYJUFBQb1gJCQk8bWFpbHRvOm1vc3Ryb3dzQHN0eXgudXdhdGVybG9vLmNhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA1ZDQ0MjdkLi4zYTIzODY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNTcsNiArNTcsNyBAQAogCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KIAlJU0ROCUFwcHJvcHJpYXRlIElTRE4gc3VwcG9ydCBpcyBlbmFibGVkLgogCUpPWQlBcHByb3ByaWF0ZSBqb3lzdGljayBzdXBwb3J0IGlzIGVuYWJsZWQuCisJS1ZNCUtlcm5lbCBWaXJ0dWFsIE1hY2hpbmUgc3VwcG9ydCBpcyBlbmFibGVkLgogCUxJQkFUQSAgTGliYXRhIGRyaXZlciBpcyBlbmFibGVkCiAJTFAJUHJpbnRlciBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJTE9PUAlMb29wYmFjayBkZXZpY2Ugc3VwcG9ydCBpcyBlbmFibGVkLgpAQCAtMTA5OCw2ICsxMDk5LDQ0IEBACiAJa3N0YWNrPU4JW1g4Nl0gUHJpbnQgTiB3b3JkcyBmcm9tIHRoZSBrZXJuZWwgc3RhY2sKIAkJCWluIG9vcHMgZHVtcHMuCiAKKwlrdm0uaWdub3JlX21zcnM9W0tWTV0gSWdub3JlIGd1ZXN0IGFjY2Vzc2VzIHRvIHVuaGFuZGxlZCBNU1JzLgorCQkJRGVmYXVsdCBpcyAwIChkb24ndCBpZ25vcmUsIGJ1dCBpbmplY3QgI0dQKQorCisJa3ZtLm9vc19zaGFkb3c9CVtLVk1dIERpc2FibGUgb3V0LW9mLXN5bmMgc2hhZG93IHBhZ2luZy4KKwkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkKKworCWt2bS1hbWQubmVzdGVkPQlbS1ZNLEFNRF0gQWxsb3cgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGluIEtWTS9TVk0uCisJCQlEZWZhdWx0IGlzIDAgKG9mZikKKworCWt2bS1hbWQubnB0PQlbS1ZNLEFNRF0gRGlzYWJsZSBuZXN0ZWQgcGFnaW5nICh2aXJ0dWFsaXplZCBNTVUpCisJCQlmb3IgYWxsIGd1ZXN0cy4KKwkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkgaWYgaW4gNjRiaXQgb3IgMzJiaXQtUEFFIG1vZGUKKworCWt2bS1pbnRlbC5ieXBhc3NfZ3Vlc3RfcGY9CisJCQlbS1ZNLEludGVsXSBEaXNhYmxlcyBieXBhc3Npbmcgb2YgZ3Vlc3QgcGFnZSBmYXVsdHMKKwkJCW9uIEludGVsIGNoaXBzLiBEZWZhdWx0IGlzIDEgKGVuYWJsZWQpCisKKwlrdm0taW50ZWwuZXB0PQlbS1ZNLEludGVsXSBEaXNhYmxlIGV4dGVuZGVkIHBhZ2UgdGFibGVzCisJCQkodmlydHVhbGl6ZWQgTU1VKSBzdXBwb3J0IG9uIGNhcGFibGUgSW50ZWwgY2hpcHMuCisJCQlEZWZhdWx0IGlzIDEgKGVuYWJsZWQpCisKKwlrdm0taW50ZWwuZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlPQorCQkJW0tWTSxJbnRlbF0gRW5hYmxlIGVtdWxhdGlvbiBvZiBpbnZhbGlkIGd1ZXN0IHN0YXRlcworCQkJRGVmYXVsdCBpcyAwIChkaXNhYmxlZCkKKworCWt2bS1pbnRlbC5mbGV4cHJpb3JpdHk9CisJCQlbS1ZNLEludGVsXSBEaXNhYmxlIEZsZXhQcmlvcml0eSBmZWF0dXJlIChUUFIgc2hhZG93KS4KKwkJCURlZmF1bHQgaXMgMSAoZW5hYmxlZCkKKworCWt2bS1pbnRlbC51bnJlc3RyaWN0ZWRfZ3Vlc3Q9CisJCQlbS1ZNLEludGVsXSBEaXNhYmxlIHVucmVzdHJpY3RlZCBndWVzdCBmZWF0dXJlCisJCQkodmlydHVhbGl6ZWQgcmVhbCBhbmQgdW5wYWdlZCBtb2RlKSBvbiBjYXBhYmxlCisJCQlJbnRlbCBjaGlwcy4gRGVmYXVsdCBpcyAxIChlbmFibGVkKQorCisJa3ZtLWludGVsLnZwaWQ9CVtLVk0sSW50ZWxdIERpc2FibGUgVmlydHVhbCBQcm9jZXNzb3IgSWRlbnRpZmljYXRpb24KKwkJCWZlYXR1cmUgKHRhZ2dlZCBUTEJzKSBvbiBjYXBhYmxlIEludGVsIGNoaXBzLgorCQkJRGVmYXVsdCBpcyAxIChlbmFibGVkKQorCiAJbDJjcj0JCVtQUENdCiAKIAlsM2NyPQkJW1BQQ10KQEAgLTE1NDMsNiArMTU4MiwxMSBAQAogCQkJc3ltYm9saWMgbmFtZXM6IGxhcGljIGFuZCBpb2FwaWMKIAkJCUV4YW1wbGU6IG5taV93YXRjaGRvZz0yIG9yIG5taV93YXRjaGRvZz1wYW5pYyxsYXBpYwogCisJbmV0cG9sbC5jYXJyaWVyX3RpbWVvdXQ9CisJCQlbTkVUXSBTcGVjaWZpZXMgYW1vdW50IG9mIHRpbWUgKGluIHNlY29uZHMpIHRoYXQKKwkJCW5ldHBvbGwgc2hvdWxkIHdhaXQgZm9yIGEgY2Fycmllci4gQnkgZGVmYXVsdCBuZXRwb2xsCisJCQl3YWl0cyA0IHNlY29uZHMuCisKIAlubzM4NwkJW0JVR1M9WDg2LTMyXSBUZWxscyB0aGUga2VybmVsIHRvIHVzZSB0aGUgMzg3IG1hdGhzCiAJCQllbXVsYXRpb24gbGlicmFyeSBldmVuIGlmIGEgMzg3IG1hdGhzIGNvcHJvY2Vzc29yCiAJCQlpcyBwcmVzZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dCBiL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0YmM4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CkBAIC0wLDAgKzEsNzU5IEBACitUaGUgRGVmaW5pdGl2ZSBLVk0gKEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUpIEFQSSBEb2N1bWVudGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIEdlbmVyYWwgZGVzY3JpcHRpb24KKworVGhlIGt2bSBBUEkgaXMgYSBzZXQgb2YgaW9jdGxzIHRoYXQgYXJlIGlzc3VlZCB0byBjb250cm9sIHZhcmlvdXMgYXNwZWN0cworb2YgYSB2aXJ0dWFsIG1hY2hpbmUuICBUaGUgaW9jdGxzIGJlbG9uZyB0byB0aHJlZSBjbGFzc2VzCisKKyAtIFN5c3RlbSBpb2N0bHM6IFRoZXNlIHF1ZXJ5IGFuZCBzZXQgZ2xvYmFsIGF0dHJpYnV0ZXMgd2hpY2ggYWZmZWN0IHRoZQorICAgd2hvbGUga3ZtIHN1YnN5c3RlbS4gIEluIGFkZGl0aW9uIGEgc3lzdGVtIGlvY3RsIGlzIHVzZWQgdG8gY3JlYXRlCisgICB2aXJ0dWFsIG1hY2hpbmVzCisKKyAtIFZNIGlvY3RsczogVGhlc2UgcXVlcnkgYW5kIHNldCBhdHRyaWJ1dGVzIHRoYXQgYWZmZWN0IGFuIGVudGlyZSB2aXJ0dWFsCisgICBtYWNoaW5lLCBmb3IgZXhhbXBsZSBtZW1vcnkgbGF5b3V0LiAgSW4gYWRkaXRpb24gYSBWTSBpb2N0bCBpcyB1c2VkIHRvCisgICBjcmVhdGUgdmlydHVhbCBjcHVzICh2Y3B1cykuCisKKyAgIE9ubHkgcnVuIFZNIGlvY3RscyBmcm9tIHRoZSBzYW1lIHByb2Nlc3MgKGFkZHJlc3Mgc3BhY2UpIHRoYXQgd2FzIHVzZWQKKyAgIHRvIGNyZWF0ZSB0aGUgVk0uCisKKyAtIHZjcHUgaW9jdGxzOiBUaGVzZSBxdWVyeSBhbmQgc2V0IGF0dHJpYnV0ZXMgdGhhdCBjb250cm9sIHRoZSBvcGVyYXRpb24KKyAgIG9mIGEgc2luZ2xlIHZpcnR1YWwgY3B1LgorCisgICBPbmx5IHJ1biB2Y3B1IGlvY3RscyBmcm9tIHRoZSBzYW1lIHRocmVhZCB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgIHZjcHUuCisKKzIuIEZpbGUgZGVzY3JpdHBvcnMKKworVGhlIGt2bSBBUEkgaXMgY2VudGVyZWQgYXJvdW5kIGZpbGUgZGVzY3JpcHRvcnMuICBBbiBpbml0aWFsCitvcGVuKCIvZGV2L2t2bSIpIG9idGFpbnMgYSBoYW5kbGUgdG8gdGhlIGt2bSBzdWJzeXN0ZW07IHRoaXMgaGFuZGxlCitjYW4gYmUgdXNlZCB0byBpc3N1ZSBzeXN0ZW0gaW9jdGxzLiAgQSBLVk1fQ1JFQVRFX1ZNIGlvY3RsIG9uIHRoaXMKK2hhbmRsZSB3aWxsIGNyZWF0ZSBhIFZNIGZpbGUgZGVzY3JpcHJvciB3aGljaCBjYW4gYmUgdXNlZCB0byBpc3N1ZSBWTQoraW9jdGxzLiAgQSBLVk1fQ1JFQVRFX1ZDUFUgaW9jdGwgb24gYSBWTSBmZCB3aWxsIGNyZWF0ZSBhIHZpcnR1YWwgY3B1CithbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nIHRvIGl0LiAgRmluYWxseSwgaW9jdGxzIG9uIGEgdmNwdQorZmQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgdmNwdSwgaW5jbHVkaW5nIHRoZSBpbXBvcnRhbnQgdGFzayBvZgorYWN0dWFsbHkgcnVubmluZyBndWVzdCBjb2RlLgorCitJbiBnZW5lcmFsIGZpbGUgZGVzY3JpcHRvcnMgY2FuIGJlIG1pZ3JhdGVkIGFtb25nIHByb2Nlc3NlcyBieSBtZWFucworb2YgZm9yaygpIGFuZCB0aGUgU0NNX1JJR0hUUyBmYWNpbGl0eSBvZiB1bml4IGRvbWFpbiBzb2NrZXQuICBUaGVzZQora2luZHMgb2YgdHJpY2tzIGFyZSBleHBsaWNpdGx5IG5vdCBzdXBwb3J0ZWQgYnkga3ZtLiAgV2hpbGUgdGhleSB3aWxsCitub3QgY2F1c2UgaGFybSB0byB0aGUgaG9zdCwgdGhlaXIgYWN0dWFsIGJlaGF2aW9yIGlzIG5vdCBndWFyYW50ZWVkIGJ5Cit0aGUgQVBJLiAgVGhlIG9ubHkgc3VwcG9ydGVkIHVzZSBpcyBvbmUgdmlydHVhbCBtYWNoaW5lIHBlciBwcm9jZXNzLAorYW5kIG9uZSB2Y3B1IHBlciB0aHJlYWQuCisKKzMuIEV4dGVuc2lvbnMKKworQXMgb2YgTGludXggMi42LjIyLCB0aGUgS1ZNIEFCSSBoYXMgYmVlbiBzdGFiaWxpemVkOiBubyBiYWNrd2FyZAoraW5jb21wYXRpYmxlIGNoYW5nZSBhcmUgYWxsb3dlZC4gIEhvd2V2ZXIsIHRoZXJlIGlzIGFuIGV4dGVuc2lvbgorZmFjaWxpdHkgdGhhdCBhbGxvd3MgYmFja3dhcmQtY29tcGF0aWJsZSBleHRlbnNpb25zIHRvIHRoZSBBUEkgdG8gYmUKK3F1ZXJpZWQgYW5kIHVzZWQuCisKK1RoZSBleHRlbnNpb24gbWVjaGFuaXNtIGlzIG5vdCBiYXNlZCBvbiBvbiB0aGUgTGludXggdmVyc2lvbiBudW1iZXIuCitJbnN0ZWFkLCBrdm0gZGVmaW5lcyBleHRlbnNpb24gaWRlbnRpZmllcnMgYW5kIGEgZmFjaWxpdHkgdG8gcXVlcnkKK3doZXRoZXIgYSBwYXJ0aWN1bGFyIGV4dGVuc2lvbiBpZGVudGlmaWVyIGlzIGF2YWlsYWJsZS4gIElmIGl0IGlzLCBhCitzZXQgb2YgaW9jdGxzIGlzIGF2YWlsYWJsZSBmb3IgYXBwbGljYXRpb24gdXNlLgorCis0LiBBUEkgZGVzY3JpcHRpb24KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBpb2N0bHMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIGt2bSBndWVzdHMuCitGb3IgZWFjaCBpb2N0bCwgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCBhbG9uZyB3aXRoIGEKK2Rlc2NyaXB0aW9uOgorCisgIENhcGFiaWxpdHk6IHdoaWNoIEtWTSBleHRlbnNpb24gcHJvdmlkZXMgdGhpcyBpb2N0bC4gIENhbiBiZSAnYmFzaWMnLAorICAgICAgd2hpY2ggbWVhbnMgdGhhdCBpcyB3aWxsIGJlIHByb3ZpZGVkIGJ5IGFueSBrZXJuZWwgdGhhdCBzdXBwb3J0cworICAgICAgQVBJIHZlcnNpb24gMTIgKHNlZSBzZWN0aW9uIDQuMSksIG9yIGEgS1ZNX0NBUF94eXogY29uc3RhbnQsIHdoaWNoCisgICAgICBtZWFucyBhdmFpbGFiaWxpdHkgbmVlZHMgdG8gYmUgY2hlY2tlZCB3aXRoIEtWTV9DSEVDS19FWFRFTlNJT04KKyAgICAgIChzZWUgc2VjdGlvbiA0LjQpLgorCisgIEFyY2hpdGVjdHVyZXM6IHdoaWNoIGluc3RydWN0aW9uIHNldCBhcmNoaXRlY3R1cmVzIHByb3ZpZGUgdGhpcyBpb2N0bC4KKyAgICAgIHg4NiBpbmNsdWRlcyBib3RoIGkzODYgYW5kIHg4Nl82NC4KKworICBUeXBlOiBzeXN0ZW0sIHZtLCBvciB2Y3B1LgorCisgIFBhcmFtZXRlcnM6IHdoYXQgcGFyYW1ldGVycyBhcmUgYWNjZXB0ZWQgYnkgdGhlIGlvY3RsLgorCisgIFJldHVybnM6IHRoZSByZXR1cm4gdmFsdWUuICBHZW5lcmFsIGVycm9yIG51bWJlcnMgKEVCQURGLCBFTk9NRU0sIEVJTlZBTCkKKyAgICAgIGFyZSBub3QgZGV0YWlsZWQsIGJ1dCBlcnJvcnMgd2l0aCBzcGVjaWZpYyBtZWFuaW5ncyBhcmUuCisKKzQuMSBLVk1fR0VUX0FQSV9WRVJTSU9OCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiBhbGwKK1R5cGU6IHN5c3RlbSBpb2N0bAorUGFyYW1ldGVyczogbm9uZQorUmV0dXJuczogdGhlIGNvbnN0YW50IEtWTV9BUElfVkVSU0lPTiAoPTEyKQorCitUaGlzIGlkZW50aWZpZXMgdGhlIEFQSSB2ZXJzaW9uIGFzIHRoZSBzdGFibGUga3ZtIEFQSS4gSXQgaXMgbm90CitleHBlY3RlZCB0aGF0IHRoaXMgbnVtYmVyIHdpbGwgY2hhbmdlLiAgSG93ZXZlciwgTGludXggMi42LjIwIGFuZAorMi42LjIxIHJlcG9ydCBlYXJsaWVyIHZlcnNpb25zOyB0aGVzZSBhcmUgbm90IGRvY3VtZW50ZWQgYW5kIG5vdAorc3VwcG9ydGVkLiAgQXBwbGljYXRpb25zIHNob3VsZCByZWZ1c2UgdG8gcnVuIGlmIEtWTV9HRVRfQVBJX1ZFUlNJT04KK3JldHVybnMgYSB2YWx1ZSBvdGhlciB0aGFuIDEyLiAgSWYgdGhpcyBjaGVjayBwYXNzZXMsIGFsbCBpb2N0bHMKK2Rlc2NyaWJlZCBhcyAnYmFzaWMnIHdpbGwgYmUgYXZhaWxhYmxlLgorCis0LjIgS1ZNX0NSRUFURV9WTQorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiBzeXN0ZW0gaW9jdGwKK1BhcmFtZXRlcnM6IG5vbmUKK1JldHVybnM6IGEgVk0gZmQgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBuZXcgdmlydHVhbCBtYWNoaW5lLgorCitUaGUgbmV3IFZNIGhhcyBubyB2aXJ0dWFsIGNwdXMgYW5kIG5vIG1lbW9yeS4gIEFuIG1tYXAoKSBvZiBhIFZNIGZkCit3aWxsIGFjY2VzcyB0aGUgdmlydHVhbCBtYWNoaW5lJ3MgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZTsgb2Zmc2V0IHplcm8KK2NvcnJlc3BvbmRzIHRvIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgemVyby4gIFVzZSBvZiBtbWFwKCkgb24gYSBWTSBmZAoraXMgZGlzY291cmFnZWQgaWYgdXNlcnNwYWNlIG1lbW9yeSBhbGxvY2F0aW9uIChLVk1fQ0FQX1VTRVJfTUVNT1JZKSBpcworYXZhaWxhYmxlLgorCis0LjMgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVAorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiBzeXN0ZW0KK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbXNyX2xpc3QgKGluL291dCkKK1JldHVybnM6IDAgb24gc3VjY2VzczsgLTEgb24gZXJyb3IKK0Vycm9yczoKKyAgRTJCSUc6ICAgICB0aGUgbXNyIGluZGV4IGxpc3QgaXMgdG8gYmUgdG8gZml0IGluIHRoZSBhcnJheSBzcGVjaWZpZWQgYnkKKyAgICAgICAgICAgICB0aGUgdXNlci4KKworc3RydWN0IGt2bV9tc3JfbGlzdCB7CisJX191MzIgbm1zcnM7IC8qIG51bWJlciBvZiBtc3JzIGluIGVudHJpZXMgKi8KKwlfX3UzMiBpbmRpY2VzWzBdOworfTsKKworVGhpcyBpb2N0bCByZXR1cm5zIHRoZSBndWVzdCBtc3JzIHRoYXQgYXJlIHN1cHBvcnRlZC4gIFRoZSBsaXN0IHZhcmllcworYnkga3ZtIHZlcnNpb24gYW5kIGhvc3QgcHJvY2Vzc29yLCBidXQgZG9lcyBub3QgY2hhbmdlIG90aGVyd2lzZS4gIFRoZQordXNlciBmaWxscyBpbiB0aGUgc2l6ZSBvZiB0aGUgaW5kaWNlcyBhcnJheSBpbiBubXNycywgYW5kIGluIHJldHVybgora3ZtIGFkanVzdHMgbm1zcnMgdG8gcmVmbGVjdCB0aGUgYWN0dWFsIG51bWJlciBvZiBtc3JzIGFuZCBmaWxscyBpbgordGhlIGluZGljZXMgYXJyYXkgd2l0aCB0aGVpciBudW1iZXJzLgorCis0LjQgS1ZNX0NIRUNLX0VYVEVOU0lPTgorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiBzeXN0ZW0gaW9jdGwKK1BhcmFtZXRlcnM6IGV4dGVuc2lvbiBpZGVudGlmaWVyIChLVk1fQ0FQXyopCitSZXR1cm5zOiAwIGlmIHVuc3VwcG9ydGVkOyAxIChvciBzb21lIG90aGVyIHBvc2l0aXZlIGludGVnZXIpIGlmIHN1cHBvcnRlZAorCitUaGUgQVBJIGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gcXVlcnkgYWJvdXQgZXh0ZW5zaW9ucyB0byB0aGUgY29yZQora3ZtIEFQSS4gIFVzZXJzcGFjZSBwYXNzZXMgYW4gZXh0ZW5zaW9uIGlkZW50aWZpZXIgKGFuIGludGVnZXIpIGFuZAorcmVjZWl2ZXMgYW4gaW50ZWdlciB0aGF0IGRlc2NyaWJlcyB0aGUgZXh0ZW5zaW9uIGF2YWlsYWJpbGl0eS4KK0dlbmVyYWxseSAwIG1lYW5zIG5vIGFuZCAxIG1lYW5zIHllcywgYnV0IHNvbWUgZXh0ZW5zaW9ucyBtYXkgcmVwb3J0CithZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRoZSBpbnRlZ2VyIHJldHVybiB2YWx1ZS4KKworNC41IEtWTV9HRVRfVkNQVV9NTUFQX1NJWkUKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IGFsbAorVHlwZTogc3lzdGVtIGlvY3RsCitQYXJhbWV0ZXJzOiBub25lCitSZXR1cm5zOiBzaXplIG9mIHZjcHUgbW1hcCBhcmVhLCBpbiBieXRlcworCitUaGUgS1ZNX1JVTiBpb2N0bCAoY2YuKSBjb21tdW5pY2F0ZXMgd2l0aCB1c2Vyc3BhY2UgdmlhIGEgc2hhcmVkCittZW1vcnkgcmVnaW9uLiAgVGhpcyBpb2N0bCByZXR1cm5zIHRoZSBzaXplIG9mIHRoYXQgcmVnaW9uLiAgU2VlIHRoZQorS1ZNX1JVTiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCis0LjYgS1ZNX1NFVF9NRU1PUllfUkVHSU9OCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiBhbGwKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24gKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24geworCV9fdTMyIHNsb3Q7CisJX191MzIgZmxhZ3M7CisJX191NjQgZ3Vlc3RfcGh5c19hZGRyOworCV9fdTY0IG1lbW9yeV9zaXplOyAvKiBieXRlcyAqLworfTsKKworLyogZm9yIGt2bV9tZW1vcnlfcmVnaW9uOjpmbGFncyAqLworI2RlZmluZSBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUyAgMVVMCisKK1RoaXMgaW9jdGwgYWxsb3dzIHRoZSB1c2VyIHRvIGNyZWF0ZSBvciBtb2RpZnkgYSBndWVzdCBwaHlzaWNhbCBtZW1vcnkKK3Nsb3QuICBXaGVuIGNoYW5naW5nIGFuIGV4aXN0aW5nIHNsb3QsIGl0IG1heSBiZSBtb3ZlZCBpbiB0aGUgZ3Vlc3QKK3BoeXNpY2FsIG1lbW9yeSBzcGFjZSwgb3IgaXRzIGZsYWdzIG1heSBiZSBtb2RpZmllZC4gIEl0IG1heSBub3QgYmUKK3Jlc2l6ZWQuICBTbG90cyBtYXkgbm90IG92ZXJsYXAuCisKK1RoZSBmbGFncyBmaWVsZCBzdXBwb3J0cyBqdXN0IG9uZSBmbGFnLCBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUywgd2hpY2gKK2luc3RydWN0cyBrdm0gdG8ga2VlcCB0cmFjayBvZiB3cml0ZXMgdG8gbWVtb3J5IHdpdGhpbiB0aGUgc2xvdC4gIFNlZQordGhlIEtWTV9HRVRfRElSVFlfTE9HIGlvY3RsLgorCitJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIEtWTV9TRVRfVVNFUl9NRU1PUllfUkVHSU9OIGlvY3RsIGluc3RlYWQKK29mIHRoaXMgQVBJLCBpZiBhdmFpbGFibGUuICBUaGlzIG5ld2VyIEFQSSBhbGxvd3MgcGxhY2luZyBndWVzdCBtZW1vcnkKK2F0IHNwZWNpZmllZCBsb2NhdGlvbnMgaW4gdGhlIGhvc3QgYWRkcmVzcyBzcGFjZSwgeWllbGRpbmcgYmV0dGVyCitjb250cm9sIGFuZCBlYXN5IGFjY2Vzcy4KKworNC42IEtWTV9DUkVBVEVfVkNQVQorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiB2bSBpb2N0bAorUGFyYW1ldGVyczogdmNwdSBpZCAoYXBpYyBpZCBvbiB4ODYpCitSZXR1cm5zOiB2Y3B1IGZkIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1RoaXMgQVBJIGFkZHMgYSB2Y3B1IHRvIGEgdmlydHVhbCBtYWNoaW5lLiAgVGhlIHZjcHUgaWQgaXMgYSBzbWFsbCBpbnRlZ2VyCitpbiB0aGUgcmFuZ2UgWzAsIG1heF92Y3B1cykuCisKKzQuNyBLVk1fR0VUX0RJUlRZX0xPRyAodm0gaW9jdGwpCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAoaW4vb3V0KQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCisvKiBmb3IgS1ZNX0dFVF9ESVJUWV9MT0cgKi8KK3N0cnVjdCBrdm1fZGlydHlfbG9nIHsKKwlfX3UzMiBzbG90OworCV9fdTMyIHBhZGRpbmc7CisJdW5pb24geworCQl2b2lkIF9fdXNlciAqZGlydHlfYml0bWFwOyAvKiBvbmUgYml0IHBlciBwYWdlICovCisJCV9fdTY0IHBhZGRpbmc7CisJfTsKK307CisKK0dpdmVuIGEgbWVtb3J5IHNsb3QsIHJldHVybiBhIGJpdG1hcCBjb250YWluaW5nIGFueSBwYWdlcyBkaXJ0aWVkCitzaW5jZSB0aGUgbGFzdCBjYWxsIHRvIHRoaXMgaW9jdGwuICBCaXQgMCBpcyB0aGUgZmlyc3QgcGFnZSBpbiB0aGUKK21lbW9yeSBzbG90LiAgRW5zdXJlIHRoZSBlbnRpcmUgc3RydWN0dXJlIGlzIGNsZWFyZWQgdG8gYXZvaWQgcGFkZGluZworaXNzdWVzLgorCis0LjggS1ZNX1NFVF9NRU1PUllfQUxJQVMKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzIChpbikKK1JldHVybnM6IDAgKHN1Y2Nlc3MpLCAtMSAoZXJyb3IpCisKK3N0cnVjdCBrdm1fbWVtb3J5X2FsaWFzIHsKKwlfX3UzMiBzbG90OyAgLyogdGhpcyBoYXMgYSBkaWZmZXJlbnQgbmFtZXNwYWNlIHRoYW4gbWVtb3J5IHNsb3RzICovCisJX191MzIgZmxhZ3M7CisJX191NjQgZ3Vlc3RfcGh5c19hZGRyOworCV9fdTY0IG1lbW9yeV9zaXplOworCV9fdTY0IHRhcmdldF9waHlzX2FkZHI7Cit9OworCitEZWZpbmVzIGEgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSByZWdpb24gYXMgYW4gYWxpYXMgdG8gYW5vdGhlcgorcmVnaW9uLiAgVXNlZnVsIGZvciBhbGlhc2VkIGFkZHJlc3MsIGZvciBleGFtcGxlIHRoZSBWR0EgbG93IG1lbW9yeQord2luZG93LiBTaG91bGQgbm90IGJlIHVzZWQgd2l0aCB1c2Vyc3BhY2UgbWVtb3J5LgorCis0LjkgS1ZNX1JVTgorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBub25lCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCitFcnJvcnM6CisgIEVJTlRSOiAgICAgYW4gdW5tYXNrZWQgc2lnbmFsIGlzIHBlbmRpbmcKKworVGhpcyBpb2N0bCBpcyB1c2VkIHRvIHJ1biBhIGd1ZXN0IHZpcnR1YWwgY3B1LiAgV2hpbGUgdGhlcmUgYXJlIG5vCitleHBsaWNpdCBwYXJhbWV0ZXJzLCB0aGVyZSBpcyBhbiBpbXBsaWNpdCBwYXJhbWV0ZXIgYmxvY2sgdGhhdCBjYW4gYmUKK29idGFpbmVkIGJ5IG1tYXAoKWluZyB0aGUgdmNwdSBmZCBhdCBvZmZzZXQgMCwgd2l0aCB0aGUgc2l6ZSBnaXZlbiBieQorS1ZNX0dFVF9WQ1BVX01NQVBfU0laRS4gIFRoZSBwYXJhbWV0ZXIgYmxvY2sgaXMgZm9ybWF0dGVkIGFzIGEgJ3N0cnVjdAora3ZtX3J1bicgKHNlZSBiZWxvdykuCisKKzQuMTAgS1ZNX0dFVF9SRUdTCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiBhbGwKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fcmVncyAob3V0KQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitSZWFkcyB0aGUgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBmcm9tIHRoZSB2Y3B1LgorCisvKiB4ODYgKi8KK3N0cnVjdCBrdm1fcmVncyB7CisJLyogb3V0IChLVk1fR0VUX1JFR1MpIC8gaW4gKEtWTV9TRVRfUkVHUykgKi8KKwlfX3U2NCByYXgsIHJieCwgcmN4LCByZHg7CisJX191NjQgcnNpLCByZGksIHJzcCwgcmJwOworCV9fdTY0IHI4LCAgcjksICByMTAsIHIxMTsKKwlfX3U2NCByMTIsIHIxMywgcjE0LCByMTU7CisJX191NjQgcmlwLCByZmxhZ3M7Cit9OworCis0LjExIEtWTV9TRVRfUkVHUworCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogYWxsCitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3JlZ3MgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitXcml0ZXMgdGhlIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgaW50byB0aGUgdmNwdS4KKworU2VlIEtWTV9HRVRfUkVHUyBmb3IgdGhlIGRhdGEgc3RydWN0dXJlLgorCis0LjEyIEtWTV9HRVRfU1JFR1MKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9zcmVncyAob3V0KQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitSZWFkcyBzcGVjaWFsIHJlZ2lzdGVycyBmcm9tIHRoZSB2Y3B1LgorCisvKiB4ODYgKi8KK3N0cnVjdCBrdm1fc3JlZ3MgeworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgZHMsIGVzLCBmcywgZ3MsIHNzOworCXN0cnVjdCBrdm1fc2VnbWVudCB0ciwgbGR0OworCXN0cnVjdCBrdm1fZHRhYmxlIGdkdCwgaWR0OworCV9fdTY0IGNyMCwgY3IyLCBjcjMsIGNyNCwgY3I4OworCV9fdTY0IGVmZXI7CisJX191NjQgYXBpY19iYXNlOworCV9fdTY0IGludGVycnVwdF9iaXRtYXBbKEtWTV9OUl9JTlRFUlJVUFRTICsgNjMpIC8gNjRdOworfTsKKworaW50ZXJydXB0X2JpdG1hcCBpcyBhIGJpdG1hcCBvZiBwZW5kaW5nIGV4dGVybmFsIGludGVycnVwdHMuICBBdCBtb3N0CitvbmUgYml0IG1heSBiZSBzZXQuICBUaGlzIGludGVycnVwdCBoYXMgYmVlbiBhY2tub3dsZWRnZWQgYnkgdGhlIEFQSUMKK2J1dCBub3QgeWV0IGluamVjdGVkIGludG8gdGhlIGNwdSBjb3JlLgorCis0LjEzIEtWTV9TRVRfU1JFR1MKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9zcmVncyAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1dyaXRlcyBzcGVjaWFsIHJlZ2lzdGVycyBpbnRvIHRoZSB2Y3B1LiAgU2VlIEtWTV9HRVRfU1JFR1MgZm9yIHRoZQorZGF0YSBzdHJ1Y3R1cmVzLgorCis0LjE0IEtWTV9UUkFOU0xBVEUKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV90cmFuc2xhdGlvbiAoaW4vb3V0KQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitUcmFuc2xhdGVzIGEgdmlydHVhbCBhZGRyZXNzIGFjY29yZGluZyB0byB0aGUgdmNwdSdzIGN1cnJlbnQgYWRkcmVzcwordHJhbnNsYXRpb24gbW9kZS4KKworc3RydWN0IGt2bV90cmFuc2xhdGlvbiB7CisJLyogaW4gKi8KKwlfX3U2NCBsaW5lYXJfYWRkcmVzczsKKworCS8qIG91dCAqLworCV9fdTY0IHBoeXNpY2FsX2FkZHJlc3M7CisJX191OCAgdmFsaWQ7CisJX191OCAgd3JpdGVhYmxlOworCV9fdTggIHVzZXJtb2RlOworCV9fdTggIHBhZFs1XTsKK307CisKKzQuMTUgS1ZNX0lOVEVSUlVQVAorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2ludGVycnVwdCAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisKK1F1ZXVlcyBhIGhhcmR3YXJlIGludGVycnVwdCB2ZWN0b3IgdG8gYmUgaW5qZWN0ZWQuICBUaGlzIGlzIG9ubHkKK3VzZWZ1bCBpZiBpbi1rZXJuZWwgbG9jYWwgQVBJQyBpcyBub3QgdXNlZC4KKworLyogZm9yIEtWTV9JTlRFUlJVUFQgKi8KK3N0cnVjdCBrdm1faW50ZXJydXB0IHsKKwkvKiBpbiAqLworCV9fdTMyIGlycTsKK307CisKK05vdGUgJ2lycScgaXMgYW4gaW50ZXJydXB0IHZlY3Rvciwgbm90IGFuIGludGVycnVwdCBwaW4gb3IgbGluZS4KKworNC4xNiBLVk1fREVCVUdfR1VFU1QKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IG5vbmUKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IG5vbmUpCitSZXR1cm5zOiAtMSBvbiBlcnJvcgorCitTdXBwb3J0IGZvciB0aGlzIGhhcyBiZWVuIHJlbW92ZWQuICBVc2UgS1ZNX1NFVF9HVUVTVF9ERUJVRyBpbnN0ZWFkLgorCis0LjE3IEtWTV9HRVRfTVNSUworCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21zcnMgKGluL291dCkKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworUmVhZHMgbW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIGZyb20gdGhlIHZjcHUuICBTdXBwb3J0ZWQgbXNyIGluZGljZXMgY2FuCitiZSBvYnRhaW5lZCB1c2luZyBLVk1fR0VUX01TUl9JTkRFWF9MSVNULgorCitzdHJ1Y3Qga3ZtX21zcnMgeworCV9fdTMyIG5tc3JzOyAvKiBudW1iZXIgb2YgbXNycyBpbiBlbnRyaWVzICovCisJX191MzIgcGFkOworCisJc3RydWN0IGt2bV9tc3JfZW50cnkgZW50cmllc1swXTsKK307CisKK3N0cnVjdCBrdm1fbXNyX2VudHJ5IHsKKwlfX3UzMiBpbmRleDsKKwlfX3UzMiByZXNlcnZlZDsKKwlfX3U2NCBkYXRhOworfTsKKworQXBwbGljYXRpb24gY29kZSBzaG91bGQgc2V0IHRoZSAnbm1zcnMnIG1lbWJlciAod2hpY2ggaW5kaWNhdGVzIHRoZQorc2l6ZSBvZiB0aGUgZW50cmllcyBhcnJheSkgYW5kIHRoZSAnaW5kZXgnIG1lbWJlciBvZiBlYWNoIGFycmF5IGVudHJ5Lgora3ZtIHdpbGwgZmlsbCBpbiB0aGUgJ2RhdGEnIG1lbWJlci4KKworNC4xOCBLVk1fU0VUX01TUlMKKworQ2FwYWJpbGl0eTogYmFzaWMKK0FyY2hpdGVjdHVyZXM6IHg4NgorVHlwZTogdmNwdSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9tc3JzIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworV3JpdGVzIG1vZGVsLXNwZWNpZmljIHJlZ2lzdGVycyB0byB0aGUgdmNwdS4gIFNlZSBLVk1fR0VUX01TUlMgZm9yIHRoZQorZGF0YSBzdHJ1Y3R1cmVzLgorCitBcHBsaWNhdGlvbiBjb2RlIHNob3VsZCBzZXQgdGhlICdubXNycycgbWVtYmVyICh3aGljaCBpbmRpY2F0ZXMgdGhlCitzaXplIG9mIHRoZSBlbnRyaWVzIGFycmF5KSwgYW5kIHRoZSAnaW5kZXgnIGFuZCAnZGF0YScgbWVtYmVycyBvZiBlYWNoCithcnJheSBlbnRyeS4KKworNC4xOSBLVk1fU0VUX0NQVUlECisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY3B1aWQgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitEZWZpbmVzIHRoZSB2Y3B1IHJlc3BvbnNlcyB0byB0aGUgY3B1aWQgaW5zdHJ1Y3Rpb24uICBBcHBsaWNhdGlvbnMKK3Nob3VsZCB1c2UgdGhlIEtWTV9TRVRfQ1BVSUQyIGlvY3RsIGlmIGF2YWlsYWJsZS4KKworCitzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5IHsKKwlfX3UzMiBmdW5jdGlvbjsKKwlfX3UzMiBlYXg7CisJX191MzIgZWJ4OworCV9fdTMyIGVjeDsKKwlfX3UzMiBlZHg7CisJX191MzIgcGFkZGluZzsKK307CisKKy8qIGZvciBLVk1fU0VUX0NQVUlEICovCitzdHJ1Y3Qga3ZtX2NwdWlkIHsKKwlfX3UzMiBuZW50OworCV9fdTMyIHBhZGRpbmc7CisJc3RydWN0IGt2bV9jcHVpZF9lbnRyeSBlbnRyaWVzWzBdOworfTsKKworNC4yMCBLVk1fU0VUX1NJR05BTF9NQVNLCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fc2lnbmFsX21hc2sgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitEZWZpbmVzIHdoaWNoIHNpZ25hbHMgYXJlIGJsb2NrZWQgZHVyaW5nIGV4ZWN1dGlvbiBvZiBLVk1fUlVOLiAgVGhpcworc2lnbmFsIG1hc2sgdGVtcG9yYXJpbHkgb3ZlcnJpZGVzIHRoZSB0aHJlYWRzIHNpZ25hbCBtYXNrLiAgQW55Cit1bmJsb2NrZWQgc2lnbmFsIHJlY2VpdmVkIChleGNlcHQgU0lHS0lMTCBhbmQgU0lHU1RPUCwgd2hpY2ggcmV0YWluCit0aGVpciB0cmFkaXRpb25hbCBiZWhhdmlvdXIpIHdpbGwgY2F1c2UgS1ZNX1JVTiB0byByZXR1cm4gd2l0aCAtRUlOVFIuCisKK05vdGUgdGhlIHNpZ25hbCB3aWxsIG9ubHkgYmUgZGVsaXZlcmVkIGlmIG5vdCBibG9ja2VkIGJ5IHRoZSBvcmlnaW5hbAorc2lnbmFsIG1hc2suCisKKy8qIGZvciBLVk1fU0VUX1NJR05BTF9NQVNLICovCitzdHJ1Y3Qga3ZtX3NpZ25hbF9tYXNrIHsKKwlfX3UzMiBsZW47CisJX191OCAgc2lnc2V0WzBdOworfTsKKworNC4yMSBLVk1fR0VUX0ZQVQorCitDYXBhYmlsaXR5OiBiYXNpYworQXJjaGl0ZWN0dXJlczogeDg2CitUeXBlOiB2Y3B1IGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2ZwdSAob3V0KQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitSZWFkcyB0aGUgZmxvYXRpbmcgcG9pbnQgc3RhdGUgZnJvbSB0aGUgdmNwdS4KKworLyogZm9yIEtWTV9HRVRfRlBVIGFuZCBLVk1fU0VUX0ZQVSAqLworc3RydWN0IGt2bV9mcHUgeworCV9fdTggIGZwcls4XVsxNl07CisJX191MTYgZmN3OworCV9fdTE2IGZzdzsKKwlfX3U4ICBmdHd4OyAgLyogaW4gZnhzYXZlIGZvcm1hdCAqLworCV9fdTggIHBhZDE7CisJX191MTYgbGFzdF9vcGNvZGU7CisJX191NjQgbGFzdF9pcDsKKwlfX3U2NCBsYXN0X2RwOworCV9fdTggIHhtbVsxNl1bMTZdOworCV9fdTMyIG14Y3NyOworCV9fdTMyIHBhZDI7Cit9OworCis0LjIyIEtWTV9TRVRfRlBVCisKK0NhcGFiaWxpdHk6IGJhc2ljCitBcmNoaXRlY3R1cmVzOiB4ODYKK1R5cGU6IHZjcHUgaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1fZnB1IChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworV3JpdGVzIHRoZSBmbG9hdGluZyBwb2ludCBzdGF0ZSB0byB0aGUgdmNwdS4KKworLyogZm9yIEtWTV9HRVRfRlBVIGFuZCBLVk1fU0VUX0ZQVSAqLworc3RydWN0IGt2bV9mcHUgeworCV9fdTggIGZwcls4XVsxNl07CisJX191MTYgZmN3OworCV9fdTE2IGZzdzsKKwlfX3U4ICBmdHd4OyAgLyogaW4gZnhzYXZlIGZvcm1hdCAqLworCV9fdTggIHBhZDE7CisJX191MTYgbGFzdF9vcGNvZGU7CisJX191NjQgbGFzdF9pcDsKKwlfX3U2NCBsYXN0X2RwOworCV9fdTggIHhtbVsxNl1bMTZdOworCV9fdTMyIG14Y3NyOworCV9fdTMyIHBhZDI7Cit9OworCis0LjIzIEtWTV9DUkVBVEVfSVJRQ0hJUAorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0lSUUNISVAKK0FyY2hpdGVjdHVyZXM6IHg4NiwgaWE2NAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IG5vbmUKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworQ3JlYXRlcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlciBtb2RlbCBpbiB0aGUga2VybmVsLiAgT24geDg2LCBjcmVhdGVzIGEgdmlydHVhbAoraW9hcGljLCBhIHZpcnR1YWwgUElDICh0d28gUElDcywgbmVzdGVkKSwgYW5kIHNldHMgdXAgZnV0dXJlIHZjcHVzIHRvIGhhdmUgYQorbG9jYWwgQVBJQy4gIElSUSByb3V0aW5nIGZvciBHU0lzIDAtMTUgaXMgc2V0IHRvIGJvdGggUElDIGFuZCBJT0FQSUM7IEdTSSAxNi0yMworb25seSBnbyB0byB0aGUgSU9BUElDLiAgT24gaWE2NCwgYSBJT1NBUElDIGlzIGNyZWF0ZWQuCisKKzQuMjQgS1ZNX0lSUV9MSU5FCisKK0NhcGFiaWxpdHk6IEtWTV9DQVBfSVJRQ0hJUAorQXJjaGl0ZWN0dXJlczogeDg2LCBpYTY0CitUeXBlOiB2bSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9pcnFfbGV2ZWwKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworU2V0cyB0aGUgbGV2ZWwgb2YgYSBHU0kgaW5wdXQgdG8gdGhlIGludGVycnVwdCBjb250cm9sbGVyIG1vZGVsIGluIHRoZSBrZXJuZWwuCitSZXF1aXJlcyB0aGF0IGFuIGludGVycnVwdCBjb250cm9sbGVyIG1vZGVsIGhhcyBiZWVuIHByZXZpb3VzbHkgY3JlYXRlZCB3aXRoCitLVk1fQ1JFQVRFX0lSUUNISVAuICBOb3RlIHRoYXQgZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0cyByZXF1aXJlIHRoZSBsZXZlbAordG8gYmUgc2V0IHRvIDEgYW5kIHRoZW4gYmFjayB0byAwLgorCitzdHJ1Y3Qga3ZtX2lycV9sZXZlbCB7CisJdW5pb24geworCQlfX3UzMiBpcnE7ICAgICAvKiBHU0kgKi8KKwkJX19zMzIgc3RhdHVzOyAgLyogbm90IHVzZWQgZm9yIEtWTV9JUlFfTEVWRUwgKi8KKwl9OworCV9fdTMyIGxldmVsOyAgICAgICAgICAgLyogMCBvciAxICovCit9OworCis0LjI1IEtWTV9HRVRfSVJRQ0hJUAorCitDYXBhYmlsaXR5OiBLVk1fQ0FQX0lSUUNISVAKK0FyY2hpdGVjdHVyZXM6IHg4NiwgaWE2NAorVHlwZTogdm0gaW9jdGwKK1BhcmFtZXRlcnM6IHN0cnVjdCBrdm1faXJxY2hpcCAoaW4vb3V0KQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorCitSZWFkcyB0aGUgc3RhdGUgb2YgYSBrZXJuZWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgY3JlYXRlZCB3aXRoCitLVk1fQ1JFQVRFX0lSUUNISVAgaW50byBhIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorCitzdHJ1Y3Qga3ZtX2lycWNoaXAgeworCV9fdTMyIGNoaXBfaWQ7ICAvKiAwID0gUElDMSwgMSA9IFBJQzIsIDIgPSBJT0FQSUMgKi8KKwlfX3UzMiBwYWQ7CisgICAgICAgIHVuaW9uIHsKKwkJY2hhciBkdW1teVs1MTJdOyAgLyogcmVzZXJ2aW5nIHNwYWNlICovCisJCXN0cnVjdCBrdm1fcGljX3N0YXRlIHBpYzsKKwkJc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgaW9hcGljOworCX0gY2hpcDsKK307CisKKzQuMjYgS1ZNX1NFVF9JUlFDSElQCisKK0NhcGFiaWxpdHk6IEtWTV9DQVBfSVJRQ0hJUAorQXJjaGl0ZWN0dXJlczogeDg2LCBpYTY0CitUeXBlOiB2bSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9pcnFjaGlwIChpbikKK1JldHVybnM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKworU2V0cyB0aGUgc3RhdGUgb2YgYSBrZXJuZWwgaW50ZXJydXB0IGNvbnRyb2xsZXIgY3JlYXRlZCB3aXRoCitLVk1fQ1JFQVRFX0lSUUNISVAgZnJvbSBhIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorCitzdHJ1Y3Qga3ZtX2lycWNoaXAgeworCV9fdTMyIGNoaXBfaWQ7ICAvKiAwID0gUElDMSwgMSA9IFBJQzIsIDIgPSBJT0FQSUMgKi8KKwlfX3UzMiBwYWQ7CisgICAgICAgIHVuaW9uIHsKKwkJY2hhciBkdW1teVs1MTJdOyAgLyogcmVzZXJ2aW5nIHNwYWNlICovCisJCXN0cnVjdCBrdm1fcGljX3N0YXRlIHBpYzsKKwkJc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgaW9hcGljOworCX0gY2hpcDsKK307CisKKzUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZQorCitBcHBsaWNhdGlvbiBjb2RlIG9idGFpbnMgYSBwb2ludGVyIHRvIHRoZSBrdm1fcnVuIHN0cnVjdHVyZSBieQorbW1hcCgpaW5nIGEgdmNwdSBmZC4gIEZyb20gdGhhdCBwb2ludCwgYXBwbGljYXRpb24gY29kZSBjYW4gY29udHJvbAorZXhlY3V0aW9uIGJ5IGNoYW5naW5nIGZpZWxkcyBpbiBrdm1fcnVuIHByaW9yIHRvIGNhbGxpbmcgdGhlIEtWTV9SVU4KK2lvY3RsLCBhbmQgb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWFzb24gS1ZNX1JVTiByZXR1cm5lZCBieQorbG9va2luZyB1cCBzdHJ1Y3R1cmUgbWVtYmVycy4KKworc3RydWN0IGt2bV9ydW4geworCS8qIGluICovCisJX191OCByZXF1ZXN0X2ludGVycnVwdF93aW5kb3c7CisKK1JlcXVlc3QgdGhhdCBLVk1fUlVOIHJldHVybiB3aGVuIGl0IGJlY29tZXMgcG9zc2libGUgdG8gaW5qZWN0IGV4dGVybmFsCitpbnRlcnJ1cHRzIGludG8gdGhlIGd1ZXN0LiAgVXNlZnVsIGluIGNvbmp1bmN0aW9uIHdpdGggS1ZNX0lOVEVSUlVQVC4KKworCV9fdTggcGFkZGluZzFbN107CisKKwkvKiBvdXQgKi8KKwlfX3UzMiBleGl0X3JlYXNvbjsKKworV2hlbiBLVk1fUlVOIGhhcyByZXR1cm5lZCBzdWNjZXNzZnVsbHkgKHJldHVybiB2YWx1ZSAwKSwgdGhpcyBpbmZvcm1zCithcHBsaWNhdGlvbiBjb2RlIHdoeSBLVk1fUlVOIGhhcyByZXR1cm5lZC4gIEFsbG93YWJsZSB2YWx1ZXMgZm9yIHRoaXMKK2ZpZWxkIGFyZSBkZXRhaWxlZCBiZWxvdy4KKworCV9fdTggcmVhZHlfZm9yX2ludGVycnVwdF9pbmplY3Rpb247CisKK0lmIHJlcXVlc3RfaW50ZXJydXB0X3dpbmRvdyBoYXMgYmVlbiBzcGVjaWZpZWQsIHRoaXMgZmllbGQgaW5kaWNhdGVzCithbiBpbnRlcnJ1cHQgY2FuIGJlIGluamVjdGVkIG5vdyB3aXRoIEtWTV9JTlRFUlJVUFQuCisKKwlfX3U4IGlmX2ZsYWc7CisKK1RoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZmxhZy4gIE9ubHkgdmFsaWQgaWYgaW4ta2VybmVsCitsb2NhbCBBUElDIGlzIG5vdCB1c2VkLgorCisJX191OCBwYWRkaW5nMlsyXTsKKworCS8qIGluIChwcmVfa3ZtX3J1biksIG91dCAocG9zdF9rdm1fcnVuKSAqLworCV9fdTY0IGNyODsKKworVGhlIHZhbHVlIG9mIHRoZSBjcjggcmVnaXN0ZXIuICBPbmx5IHZhbGlkIGlmIGluLWtlcm5lbCBsb2NhbCBBUElDIGlzCitub3QgdXNlZC4gIEJvdGggaW5wdXQgYW5kIG91dHB1dC4KKworCV9fdTY0IGFwaWNfYmFzZTsKKworVGhlIHZhbHVlIG9mIHRoZSBBUElDIEJBU0UgbXNyLiAgT25seSB2YWxpZCBpZiBpbi1rZXJuZWwgbG9jYWwKK0FQSUMgaXMgbm90IHVzZWQuICBCb3RoIGlucHV0IGFuZCBvdXRwdXQuCisKKwl1bmlvbiB7CisJCS8qIEtWTV9FWElUX1VOS05PV04gKi8KKwkJc3RydWN0IHsKKwkJCV9fdTY0IGhhcmR3YXJlX2V4aXRfcmVhc29uOworCQl9IGh3OworCitJZiBleGl0X3JlYXNvbiBpcyBLVk1fRVhJVF9VTktOT1dOLCB0aGUgdmNwdSBoYXMgZXhpdGVkIGR1ZSB0byB1bmtub3duCityZWFzb25zLiAgRnVydGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluCitoYXJkd2FyZV9leGl0X3JlYXNvbi4KKworCQkvKiBLVk1fRVhJVF9GQUlMX0VOVFJZICovCisJCXN0cnVjdCB7CisJCQlfX3U2NCBoYXJkd2FyZV9lbnRyeV9mYWlsdXJlX3JlYXNvbjsKKwkJfSBmYWlsX2VudHJ5OworCitJZiBleGl0X3JlYXNvbiBpcyBLVk1fRVhJVF9GQUlMX0VOVFJZLCB0aGUgdmNwdSBjb3VsZCBub3QgYmUgcnVuIGR1ZQordG8gdW5rbm93biByZWFzb25zLiAgRnVydGhlciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW5mb3JtYXRpb24gaXMKK2F2YWlsYWJsZSBpbiBoYXJkd2FyZV9lbnRyeV9mYWlsdXJlX3JlYXNvbi4KKworCQkvKiBLVk1fRVhJVF9FWENFUFRJT04gKi8KKwkJc3RydWN0IHsKKwkJCV9fdTMyIGV4Y2VwdGlvbjsKKwkJCV9fdTMyIGVycm9yX2NvZGU7CisJCX0gZXg7CisKK1VudXNlZC4KKworCQkvKiBLVk1fRVhJVF9JTyAqLworCQlzdHJ1Y3QgeworI2RlZmluZSBLVk1fRVhJVF9JT19JTiAgMAorI2RlZmluZSBLVk1fRVhJVF9JT19PVVQgMQorCQkJX191OCBkaXJlY3Rpb247CisJCQlfX3U4IHNpemU7IC8qIGJ5dGVzICovCisJCQlfX3UxNiBwb3J0OworCQkJX191MzIgY291bnQ7CisJCQlfX3U2NCBkYXRhX29mZnNldDsgLyogcmVsYXRpdmUgdG8ga3ZtX3J1biBzdGFydCAqLworCQl9IGlvOworCitJZiBleGl0X3JlYXNvbiBpcyBLVk1fRVhJVF9JT19JTiBvciBLVk1fRVhJVF9JT19PVVQsIHRoZW4gdGhlIHZjcHUgaGFzCitleGVjdXRlZCBhIHBvcnQgSS9PIGluc3RydWN0aW9uIHdoaWNoIGNvdWxkIG5vdCBiZSBzYXRpc2ZpZWQgYnkga3ZtLgorZGF0YV9vZmZzZXQgZGVzY3JpYmVzIHdoZXJlIHRoZSBkYXRhIGlzIGxvY2F0ZWQgKEtWTV9FWElUX0lPX09VVCkgb3IKK3doZXJlIGt2bSBleHBlY3RzIGFwcGxpY2F0aW9uIGNvZGUgdG8gcGxhY2UgdGhlIGRhdGEgZm9yIHRoZSBuZXh0CitLVk1fUlVOIGludm9jYXRpb24gKEtWTV9FWElUX0lPX0lOKS4gIERhdGEgZm9ybWF0IGlzIGEgcGF0Y2tlZCBhcnJheS4KKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggYXJjaDsKKwkJfSBkZWJ1ZzsKKworVW51c2VkLgorCisJCS8qIEtWTV9FWElUX01NSU8gKi8KKwkJc3RydWN0IHsKKwkJCV9fdTY0IHBoeXNfYWRkcjsKKwkJCV9fdTggIGRhdGFbOF07CisJCQlfX3UzMiBsZW47CisJCQlfX3U4ICBpc193cml0ZTsKKwkJfSBtbWlvOworCitJZiBleGl0X3JlYXNvbiBpcyBLVk1fRVhJVF9NTUlPIG9yIEtWTV9FWElUX0lPX09VVCwgdGhlbiB0aGUgdmNwdSBoYXMKK2V4ZWN1dGVkIGEgbWVtb3J5LW1hcHBlZCBJL08gaW5zdHJ1Y3Rpb24gd2hpY2ggY291bGQgbm90IGJlIHNhdGlzZmllZAorYnkga3ZtLiAgVGhlICdkYXRhJyBtZW1iZXIgY29udGFpbnMgdGhlIHdyaXR0ZW4gZGF0YSBpZiAnaXNfd3JpdGUnIGlzCit0cnVlLCBhbmQgc2hvdWxkIGJlIGZpbGxlZCBieSBhcHBsaWNhdGlvbiBjb2RlIG90aGVyd2lzZS4KKworCQkvKiBLVk1fRVhJVF9IWVBFUkNBTEwgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTY0IG5yOworCQkJX191NjQgYXJnc1s2XTsKKwkJCV9fdTY0IHJldDsKKwkJCV9fdTMyIGxvbmdtb2RlOworCQkJX191MzIgcGFkOworCQl9IGh5cGVyY2FsbDsKKworVW51c2VkLgorCisJCS8qIEtWTV9FWElUX1RQUl9BQ0NFU1MgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTY0IHJpcDsKKwkJCV9fdTMyIGlzX3dyaXRlOworCQkJX191MzIgcGFkOworCQl9IHRwcl9hY2Nlc3M7CisKK1RvIGJlIGRvY3VtZW50ZWQgKEtWTV9UUFJfQUNDRVNTX1JFUE9SVElORykuCisKKwkJLyogS1ZNX0VYSVRfUzM5MF9TSUVJQyAqLworCQlzdHJ1Y3QgeworCQkJX191OCBpY3B0Y29kZTsKKwkJCV9fdTY0IG1hc2s7IC8qIHBzdyB1cHBlciBoYWxmICovCisJCQlfX3U2NCBhZGRyOyAvKiBwc3cgbG93ZXIgaGFsZiAqLworCQkJX191MTYgaXBhOworCQkJX191MzIgaXBiOworCQl9IHMzOTBfc2llaWM7CisKK3MzOTAgc3BlY2lmaWMuCisKKwkJLyogS1ZNX0VYSVRfUzM5MF9SRVNFVCAqLworI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9QT1IgICAgICAgMQorI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9DTEVBUiAgICAgMgorI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9TVUJTWVNURU0gNAorI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9DUFVfSU5JVCAgOAorI2RlZmluZSBLVk1fUzM5MF9SRVNFVF9JUEwgICAgICAgMTYKKwkJX191NjQgczM5MF9yZXNldF9mbGFnczsKKworczM5MCBzcGVjaWZpYy4KKworCQkvKiBLVk1fRVhJVF9EQ1IgKi8KKwkJc3RydWN0IHsKKwkJCV9fdTMyIGRjcm47CisJCQlfX3UzMiBkYXRhOworCQkJX191OCAgaXNfd3JpdGU7CisJCX0gZGNyOworCitwb3dlcnBjIHNwZWNpZmljLgorCisJCS8qIEZpeCB0aGUgc2l6ZSBvZiB0aGUgdW5pb24uICovCisJCWNoYXIgcGFkZGluZ1syNTZdOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCmluZGV4IDE2MzRjNmRjLi41MDE4OWJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCkBAIC02MCw2ICs2MCw4IEBACiAJLSBpbmZvIG9uIHVzaW5nIEZyYW1lIFJlbGF5L0RhdGEgTGluayBDb25uZWN0aW9uIElkZW50aWZpZXIgKERMQ0kpLgogZ2VuZXJpY19uZXRsaW5rLnR4dAogCS0gaW5mbyBvbiBHZW5lcmljIE5ldGxpbmsKK2llZWU4MDIxNTQudHh0CisJLSBMaW51eCBJRUVFIDgwMi4xNS40IGltcGxlbWVudGF0aW9uLCBBUEkgYW5kIGRyaXZlcnMKIGlwLXN5c2N0bC50eHQKIAktIC9wcm9jL3N5cy9uZXQvaXB2NC8qIHZhcmlhYmxlcwogaXBfZHluYWRkci50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZWVlODAyMTU0LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZWVlODAyMTU0LnR4dAppbmRleCBhMDI4MGFkLi4yM2M5OTVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWVlZTgwMjE1NC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2llZWU4MDIxNTQudHh0CkBAIC0yMiw3ICsyMiw3IEBACiAuLi4uLgogCiBUaGUgYWRkcmVzcyBmYW1pbHksIHNvY2tldCBhZGRyZXNzZXMgZXRjLiBhcmUgZGVmaW5lZCBpbiB0aGUKLWluY2x1ZGUvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oIGhlYWRlciBvciBpbiB0aGUgc3BlY2lhbCBoZWFkZXIKK2luY2x1ZGUvbmV0L2FmX2llZWU4MDIxNTQuaCBoZWFkZXIgb3IgaW4gdGhlIHNwZWNpYWwgaGVhZGVyCiBpbiBvdXIgdXNlcnNwYWNlIHBhY2thZ2UgKHNlZSBlaXRoZXIgbGludXgtemlnYmVlIHNvdXJjZWZvcmdlIGRvd25sb2FkIHBhZ2UKIG9yIGdpdCB0cmVlIGF0IGdpdDovL2xpbnV4LXppZ2JlZS5naXQuc291cmNlZm9yZ2UubmV0L2dpdHJvb3QvbGludXgtemlnYmVlKS4KIApAQCAtMzMsNyArMzMsNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBNb3N0IG9mIElFRUUgODAyLjE1LjQgTUxNRSBpbnRlcmZhY2VzIGFyZSBkaXJlY3RseSBtYXBwZWQgb24gbmV0bGluayBjb21tYW5kcy4KLVNlZSB0aGUgaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5oIGhlYWRlci4gT3VyIHVzZXJzcGFjZSB0b29scyBwYWNrYWdlCitTZWUgdGhlIGluY2x1ZGUvbmV0L25sODAyMTU0LmggaGVhZGVyLiBPdXIgdXNlcnNwYWNlIHRvb2xzIHBhY2thZ2UKIChzZWUgYWJvdmUpIHByb3ZpZGVzIENMSSBjb25maWd1cmF0aW9uIHV0aWxpdHkgZm9yIHJhZGlvIGludGVyZmFjZXMgYW5kIHNpbXBsZQogY29vcmRpbmF0b3IgZm9yIElFRUUgODAyLjE1LjQgbmV0d29ya3MgYXMgYW4gZXhhbXBsZSB1c2VycyBvZiBNTE1FIHByb3RvY29sLgogCkBAIC01NCwxMCArNTQsMTQgQEAKIEhhcmRNQUMKID09PT09PT0KIAotU2VlIHRoZSBoZWFkZXIgaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9uZXRkZXZpY2UuaC4gWW91IGhhdmUgdG8gaW1wbGVtZW50IExpbnV4CitTZWUgdGhlIGhlYWRlciBpbmNsdWRlL25ldC9pZWVlODAyMTU0X25ldGRldi5oLiBZb3UgaGF2ZSB0byBpbXBsZW1lbnQgTGludXgKIG5ldF9kZXZpY2UsIHdpdGggLnR5cGUgPSBBUlBIUkRfSUVFRTgwMjE1NC4gRGF0YSBpcyBleGNoYW5nZWQgd2l0aCBzb2NrZXQgZmFtaWx5Ci1jb2RlIHZpYSBwbGFpbiBza19idWZmcy4gVGhlIGNvbnRyb2wgYmxvY2sgb2Ygc2tfYnVmZnMgd2lsbCBjb250YWluIGFkZGl0aW9uYWwKLWluZm8gYXMgZGVzY3JpYmVkIGluIHRoZSBzdHJ1Y3QgaWVlZTgwMjE1NF9tYWNfY2IuCitjb2RlIHZpYSBwbGFpbiBza19idWZmcy4gT24gc2tiIHJlY2VwdGlvbiBza2ItPmNiIG11c3QgY29udGFpbiBhZGRpdGlvbmFsCitpbmZvIGFzIGRlc2NyaWJlZCBpbiB0aGUgc3RydWN0IGllZWU4MDIxNTRfbWFjX2NiLiBEdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbgordGhlIHNrYi0+Y2IgaXMgdXNlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgZGF0YSB0byBkZXZpY2UncyBoZWFkZXJfb3BzLT5jcmVhdGUKK2Z1bmN0aW9uLiBCZSBhd2FyZSwgdGhhdCB0aGlzIGRhdGEgY2FuIGJlIG92ZXJyaWRlbiBsYXRlciAod2hlbiBzb2NrZXQgY29kZQorc3VibWl0cyBza2IgdG8gcWRpc2MpLCBzbyBpZiB5b3UgbmVlZCBzb21ldGhpbmcgZnJvbSB0aGF0IGNiIGxhdGVyLCB5b3Ugc2hvdWxkCitzdG9yZSBpbmZvIGluIHRoZSBza2ItPmRhdGEgb24geW91ciBvd24uCiAKIFRvIGhvb2sgdGhlIE1MTUUgaW50ZXJmYWNlIHlvdSBoYXZlIHRvIHBvcHVsYXRlIHRoZSBtbF9wcml2IGZpZWxkIG9mIHlvdXIKIG5ldF9kZXZpY2Ugd2l0aCBhIHBvaW50ZXIgdG8gc3RydWN0IGllZWU4MDIxNTRfbWxtZV9vcHMgaW5zdGFuY2UuIEFsbCBmaWVsZHMgYXJlCkBAIC02OSw4ICs3Myw4IEBACiBTb2Z0TUFDCiA9PT09PT09CiAKLVdlIGFyZSBnb2luZyB0byBwcm92aWRlIGludGVybWVkaWF0ZSBsYXllciBpbXBlbGVtZW50aW5nIElFRUUgODAyLjE1LjQgTUFDCitXZSBhcmUgZ29pbmcgdG8gcHJvdmlkZSBpbnRlcm1lZGlhdGUgbGF5ZXIgaW1wbGVtZW50aW5nIElFRUUgODAyLjE1LjQgTUFDCiBpbiBzb2Z0d2FyZS4gVGhpcyBpcyBjdXJyZW50bHkgV0lQLgogCi1TZWUgaGVhZGVyIGluY2x1ZGUvbmV0L2llZWU4MDIxNTQvbWFjODAyMTU0LmggYW5kIHNldmVyYWwgZHJpdmVycyBpbgotZHJpdmVycy9pZWVlODAyMTU0LworU2VlIGhlYWRlciBpbmNsdWRlL25ldC9tYWM4MDIxNTQuaCBhbmQgc2V2ZXJhbCBkcml2ZXJzIGluIGRyaXZlcnMvaWVlZTgwMjE1NC8uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggOGJlNzYyMy4uZmJlNDI3YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTMxMSw5ICszMTEsMTIgQEAKIAljb25uZWN0aW9ucy4KIAogdGNwX29ycGhhbl9yZXRyaWVzIC0gSU5URUdFUgotCUhvdyBtYXkgdGltZXMgdG8gcmV0cnkgYmVmb3JlIGtpbGxpbmcgVENQIGNvbm5lY3Rpb24sIGNsb3NlZAotCWJ5IG91ciBzaWRlLiBEZWZhdWx0IHZhbHVlIDcgY29ycmVzcG9uZHMgdG8gfjUwc2VjLTE2bWluCi0JZGVwZW5kaW5nIG9uIFJUTy4gSWYgeW91IG1hY2hpbmUgaXMgbG9hZGVkIFdFQiBzZXJ2ZXIsCisJVGhpcyB2YWx1ZSBpbmZsdWVuY2VzIHRoZSB0aW1lb3V0IG9mIGEgbG9jYWxseSBjbG9zZWQgVENQIGNvbm5lY3Rpb24sCisJd2hlbiBSVE8gcmV0cmFuc21pc3Npb25zIHJlbWFpbiB1bmFja25vd2xlZGdlZC4KKwlTZWUgdGNwX3JldHJpZXMyIGZvciBtb3JlIGRldGFpbHMuCisKKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyA3LgorCUlmIHlvdXIgbWFjaGluZSBpcyBhIGxvYWRlZCBXRUIgc2VydmVyLAogCXlvdSBzaG91bGQgdGhpbmsgYWJvdXQgbG93ZXJpbmcgdGhpcyB2YWx1ZSwgc3VjaCBzb2NrZXRzCiAJbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDZi4gdGNwX21heF9vcnBoYW5zLgogCkBAIC0zMjcsMTYgKzMzMCwyOCBAQAogCWNlcnRhaW4gVENQIHN0YWNrcy4KIAogdGNwX3JldHJpZXMxIC0gSU5URUdFUgotCUhvdyBtYW55IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBkZWNpZGluZyB0aGF0IHNvbWV0aGluZyBpcyB3cm9uZwotCWFuZCBpdCBpcyBuZWNlc3NhcnkgdG8gcmVwb3J0IHRoaXMgc3VzcGljaW9uIHRvIG5ldHdvcmsgbGF5ZXIuCi0JTWluaW1hbCBSRkMgdmFsdWUgaXMgMywgaXQgaXMgZGVmYXVsdCwgd2hpY2ggY29ycmVzcG9uZHMKLQl0byB+M3NlYy04bWluIGRlcGVuZGluZyBvbiBSVE8uCisJVGhpcyB2YWx1ZSBpbmZsdWVuY2VzIHRoZSB0aW1lLCBhZnRlciB3aGljaCBUQ1AgZGVjaWRlcywgdGhhdAorCXNvbWV0aGluZyBpcyB3cm9uZyBkdWUgdG8gdW5hY2tub3dsZWRnZWQgUlRPIHJldHJhbnNtaXNzaW9ucywKKwlhbmQgcmVwb3J0cyB0aGlzIHN1c3BpY2lvbiB0byB0aGUgbmV0d29yayBsYXllci4KKwlTZWUgdGNwX3JldHJpZXMyIGZvciBtb3JlIGRldGFpbHMuCisKKwlSRkMgMTEyMiByZWNvbW1lbmRzIGF0IGxlYXN0IDMgcmV0cmFuc21pc3Npb25zLCB3aGljaCBpcyB0aGUKKwlkZWZhdWx0LgogCiB0Y3BfcmV0cmllczIgLSBJTlRFR0VSCi0JSG93IG1heSB0aW1lcyB0byByZXRyeSBiZWZvcmUga2lsbGluZyBhbGl2ZSBUQ1AgY29ubmVjdGlvbi4KLQlSRkMxMTIyIHNheXMgdGhhdCB0aGUgbGltaXQgc2hvdWxkIGJlIGxvbmdlciB0aGFuIDEwMCBzZWMuCi0JSXQgaXMgdG9vIHNtYWxsIG51bWJlci4JRGVmYXVsdCB2YWx1ZSAxNSBjb3JyZXNwb25kcyB0byB+MTMtMzBtaW4KLQlkZXBlbmRpbmcgb24gUlRPLgorCVRoaXMgdmFsdWUgaW5mbHVlbmNlcyB0aGUgdGltZW91dCBvZiBhbiBhbGl2ZSBUQ1AgY29ubmVjdGlvbiwKKwl3aGVuIFJUTyByZXRyYW5zbWlzc2lvbnMgcmVtYWluIHVuYWNrbm93bGVkZ2VkLgorCUdpdmVuIGEgdmFsdWUgb2YgTiwgYSBoeXBvdGhldGljYWwgVENQIGNvbm5lY3Rpb24gZm9sbG93aW5nCisJZXhwb25lbnRpYWwgYmFja29mZiB3aXRoIGFuIGluaXRpYWwgUlRPIG9mIFRDUF9SVE9fTUlOIHdvdWxkCisJcmV0cmFuc21pdCBOIHRpbWVzIGJlZm9yZSBraWxsaW5nIHRoZSBjb25uZWN0aW9uIGF0IHRoZSAoTisxKXRoIFJUTy4KKworCVRoZSBkZWZhdWx0IHZhbHVlIG9mIDE1IHlpZWxkcyBhIGh5cG90aGV0aWNhbCB0aW1lb3V0IG9mIDkyNC42CisJc2Vjb25kcyBhbmQgaXMgYSBsb3dlciBib3VuZCBmb3IgdGhlIGVmZmVjdGl2ZSB0aW1lb3V0LgorCVRDUCB3aWxsIGVmZmVjdGl2ZWx5IHRpbWUgb3V0IGF0IHRoZSBmaXJzdCBSVE8gd2hpY2ggZXhjZWVkcyB0aGUKKwloeXBvdGhldGljYWwgdGltZW91dC4KKworCVJGQyAxMTIyIHJlY29tbWVuZHMgYXQgbGVhc3QgMTAwIHNlY29uZHMgZm9yIHRoZSB0aW1lb3V0LAorCXdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgdmFsdWUgb2YgYXQgbGVhc3QgOC4KIAogdGNwX3JmYzEzMzcgLSBCT09MRUFOCiAJSWYgc2V0LCB0aGUgVENQIHN0YWNrIGJlaGF2ZXMgY29uZm9ybWluZyB0byBSRkMxMzM3LiBJZiB1bnNldCwKQEAgLTEyODIsNiArMTI5NywxNiBAQAogc2N0cF93bWVtICAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIGRlZmF1bHQsIG1heAogCVNlZSB0Y3Bfd21lbSBmb3IgYSBkZXNjcmlwdGlvbi4KIAorYWRkcl9zY29wZV9wb2xpY3kgLSBJTlRFR0VSCisJQ29udHJvbCBJUHY0IGFkZHJlc3Mgc2NvcGluZyAtIGRyYWZ0LXN0ZXdhcnQtdHN2d2ctc2N0cC1pcHY0LTAwCisKKwkwICAgLSBEaXNhYmxlIElQdjQgYWRkcmVzcyBzY29waW5nCisJMSAgIC0gRW5hYmxlIElQdjQgYWRkcmVzcyBzY29waW5nCisJMiAgIC0gRm9sbG93IGRyYWZ0IGJ1dCBhbGxvdyBJUHY0IHByaXZhdGUgYWRkcmVzc2VzCisJMyAgIC0gRm9sbG93IGRyYWZ0IGJ1dCBhbGxvdyBJUHY0IGxpbmsgbG9jYWwgYWRkcmVzc2VzCisKKwlEZWZhdWx0OiAxCisKIAogL3Byb2Mvc3lzL25ldC9jb3JlLyoKIGRldl93ZWlnaHQgLSBJTlRFR0VSCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDlhMzNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dApAQCAtMCwwICsxLDM3OCBAQAorUnVuLXRpbWUgUG93ZXIgTWFuYWdlbWVudCBGcmFtZXdvcmsgZm9yIEkvTyBEZXZpY2VzCisKKyhDKSAyMDA5IFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4sIE5vdmVsbCBJbmMuCisKKzEuIEludHJvZHVjdGlvbgorCitTdXBwb3J0IGZvciBydW4tdGltZSBwb3dlciBtYW5hZ2VtZW50IChydW4tdGltZSBQTSkgb2YgSS9PIGRldmljZXMgaXMgcHJvdmlkZWQKK2F0IHRoZSBwb3dlciBtYW5hZ2VtZW50IGNvcmUgKFBNIGNvcmUpIGxldmVsIGJ5IG1lYW5zIG9mOgorCisqIFRoZSBwb3dlciBtYW5hZ2VtZW50IHdvcmtxdWV1ZSBwbV93cSBpbiB3aGljaCBidXMgdHlwZXMgYW5kIGRldmljZSBkcml2ZXJzIGNhbgorICBwdXQgdGhlaXIgUE0tcmVsYXRlZCB3b3JrIGl0ZW1zLiAgSXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCBwbV93cSBiZQorICB1c2VkIGZvciBxdWV1aW5nIGFsbCB3b3JrIGl0ZW1zIHJlbGF0ZWQgdG8gcnVuLXRpbWUgUE0sIGJlY2F1c2UgdGhpcyBhbGxvd3MKKyAgdGhlbSB0byBiZSBzeW5jaHJvbml6ZWQgd2l0aCBzeXN0ZW0td2lkZSBwb3dlciB0cmFuc2l0aW9ucyAoc3VzcGVuZCB0byBSQU0sCisgIGhpYmVybmF0aW9uIGFuZCByZXN1bWUgZnJvbSBzeXN0ZW0gc2xlZXAgc3RhdGVzKS4gIHBtX3dxIGlzIGRlY2xhcmVkIGluCisgIGluY2x1ZGUvbGludXgvcG1fcnVudGltZS5oIGFuZCBkZWZpbmVkIGluIGtlcm5lbC9wb3dlci9tYWluLmMuCisKKyogQSBudW1iZXIgb2YgcnVuLXRpbWUgUE0gZmllbGRzIGluIHRoZSAncG93ZXInIG1lbWJlciBvZiAnc3RydWN0IGRldmljZScgKHdoaWNoCisgIGlzIG9mIHRoZSB0eXBlICdzdHJ1Y3QgZGV2X3BtX2luZm8nLCBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvcG0uaCkgdGhhdCBjYW4KKyAgYmUgdXNlZCBmb3Igc3luY2hyb25pemluZyBydW4tdGltZSBQTSBvcGVyYXRpb25zIHdpdGggb25lIGFub3RoZXIuCisKKyogVGhyZWUgZGV2aWNlIHJ1bi10aW1lIFBNIGNhbGxiYWNrcyBpbiAnc3RydWN0IGRldl9wbV9vcHMnIChkZWZpbmVkIGluCisgIGluY2x1ZGUvbGludXgvcG0uaCkuCisKKyogQSBzZXQgb2YgaGVscGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGRyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgdGhhdCBjYW4gYmUKKyAgdXNlZCBmb3IgY2Fycnlpbmcgb3V0IHJ1bi10aW1lIFBNIG9wZXJhdGlvbnMgaW4gc3VjaCBhIHdheSB0aGF0IHRoZQorICBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGVtIGlzIHRha2VuIGNhcmUgb2YgYnkgdGhlIFBNIGNvcmUuICBCdXMgdHlwZXMgYW5kCisgIGRldmljZSBkcml2ZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMuCisKK1RoZSBydW4tdGltZSBQTSBjYWxsYmFja3MgcHJlc2VudCBpbiAnc3RydWN0IGRldl9wbV9vcHMnLCB0aGUgZGV2aWNlIHJ1bi10aW1lIFBNCitmaWVsZHMgb2YgJ3N0cnVjdCBkZXZfcG1faW5mbycgYW5kIHRoZSBjb3JlIGhlbHBlciBmdW5jdGlvbnMgcHJvdmlkZWQgZm9yCitydW4tdGltZSBQTSBhcmUgZGVzY3JpYmVkIGJlbG93LgorCisyLiBEZXZpY2UgUnVuLXRpbWUgUE0gQ2FsbGJhY2tzCisKK1RoZXJlIGFyZSB0aHJlZSBkZXZpY2UgcnVuLXRpbWUgUE0gY2FsbGJhY2tzIGRlZmluZWQgaW4gJ3N0cnVjdCBkZXZfcG1fb3BzJzoKKworc3RydWN0IGRldl9wbV9vcHMgeworCS4uLgorCWludCAoKnJ1bnRpbWVfc3VzcGVuZCkoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCpydW50aW1lX3Jlc3VtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwl2b2lkICgqcnVudGltZV9pZGxlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCS4uLgorfTsKKworVGhlIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgYnkgdGhlIFBNIGNvcmUgZm9yIHRoZSBidXMgdHlwZSBvZgordGhlIGRldmljZSBiZWluZyBzdXNwZW5kZWQuICBUaGUgYnVzIHR5cGUncyBjYWxsYmFjayBpcyB0aGVuIF9lbnRpcmVseV8KK19yZXNwb25zaWJsZV8gZm9yIGhhbmRsaW5nIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHdoaWNoIG1heSwgYnV0IG5lZWQgbm90CitpbmNsdWRlIGV4ZWN1dGluZyB0aGUgZGV2aWNlIGRyaXZlcidzIG93biAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIChmcm9tIHRoZQorUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfc3VzcGVuZCgpCitjYWxsYmFjayBpbiBhIGRldmljZSBkcml2ZXIgYXMgbG9uZyBhcyB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGtub3dzCit3aGF0IHRvIGRvIHRvIGhhbmRsZSB0aGUgZGV2aWNlKS4KKworICAqIE9uY2UgdGhlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseQorICAgIGZvciBnaXZlbiBkZXZpY2UsIHRoZSBQTSBjb3JlIHJlZ2FyZHMgdGhlIGRldmljZSBhcyBzdXNwZW5kZWQsIHdoaWNoIG5lZWQKKyAgICBub3QgbWVhbiB0aGF0IHRoZSBkZXZpY2UgaGFzIGJlZW4gcHV0IGludG8gYSBsb3cgcG93ZXIgc3RhdGUuICBJdCBpcworICAgIHN1cHBvc2VkIHRvIG1lYW4sIGhvd2V2ZXIsIHRoYXQgdGhlIGRldmljZSB3aWxsIG5vdCBwcm9jZXNzIGRhdGEgYW5kIHdpbGwKKyAgICBub3QgY29tbXVuaWNhdGUgd2l0aCB0aGUgQ1BVKHMpIGFuZCBSQU0gdW50aWwgaXRzIGJ1cyB0eXBlJ3MKKyAgICAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgZm9yIGl0LiAgVGhlIHJ1bi10aW1lIFBNIHN0YXR1cyBvZgorICAgIGEgZGV2aWNlIGFmdGVyIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mIGl0cyBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkKKyAgICBjYWxsYmFjayBpcyAnc3VzcGVuZGVkJy4KKworICAqIElmIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgcmV0dXJucyAtRUJVU1kgb3IgLUVBR0FJTiwKKyAgICB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIGlzIHN1cHBvc2VkIHRvIGJlICdhY3RpdmUnLCB3aGljaCBtZWFucyB0aGF0CisgICAgdGhlIGRldmljZSBfbXVzdF8gYmUgZnVsbHkgb3BlcmF0aW9uYWwgYWZ0ZXJ3YXJkcy4KKworICAqIElmIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBjb2RlCisgICAgZGlmZmVyZW50IGZyb20gLUVCVVNZIG9yIC1FQUdBSU4sIHRoZSBQTSBjb3JlIHJlZ2FyZHMgdGhpcyBhcyBhIGZhdGFsCisgICAgZXJyb3IgYW5kIHdpbGwgcmVmdXNlIHRvIHJ1biB0aGUgaGVscGVyIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0CisgICAgZm9yIHRoZSBkZXZpY2UsIHVudGlsIHRoZSBzdGF0dXMgb2YgaXQgaXMgZGlyZWN0bHkgc2V0IGVpdGhlciB0byAnYWN0aXZlJworICAgIG9yIHRvICdzdXNwZW5kZWQnICh0aGUgUE0gY29yZSBwcm92aWRlcyBzcGVjaWFsIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoaXMKKyAgICBwdXJwb3NlKS4KKworSW4gcGFydGljdWxhciwgaWYgdGhlIGRyaXZlciByZXF1aXJlcyByZW1vdGUgd2FrZXVwIGNhcGFiaWxpdHkgZm9yIHByb3BlcgorZnVuY3Rpb25pbmcgYW5kIGRldmljZV9tYXlfd2FrZXVwKCkgcmV0dXJucyAnZmFsc2UnIGZvciB0aGUgZGV2aWNlLCB0aGVuCistPnJ1bnRpbWVfc3VzcGVuZCgpIHNob3VsZCByZXR1cm4gLUVCVVNZLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmCitkZXZpY2VfbWF5X3dha2V1cCgpIHJldHVybnMgJ3RydWUnIGZvciB0aGUgZGV2aWNlIGFuZCB0aGUgZGV2aWNlIGlzIHB1dAoraW50byBhIGxvdyBwb3dlciBzdGF0ZSBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBpdHMgYnVzIHR5cGUncworLT5ydW50aW1lX3N1c3BlbmQoKSwgaXQgaXMgZXhwZWN0ZWQgdGhhdCByZW1vdGUgd2FrZS11cCAoaS5lLiBoYXJkd2FyZSBtZWNoYW5pc20KK2FsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIgc3RhdGUsIHN1Y2ggYXMgUENJIFBNRSkKK3dpbGwgYmUgZW5hYmxlZCBmb3IgdGhlIGRldmljZS4gIEdlbmVyYWxseSwgcmVtb3RlIHdha2UtdXAgc2hvdWxkIGJlIGVuYWJsZWQKK2ZvciBhbGwgaW5wdXQgZGV2aWNlcyBwdXQgaW50byBhIGxvdyBwb3dlciBzdGF0ZSBhdCBydW4gdGltZS4KKworVGhlIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBpcyBleGVjdXRlZCBieSB0aGUgUE0gY29yZSBmb3IgdGhlIGJ1cyB0eXBlIG9mCit0aGUgZGV2aWNlIGJlaW5nIHdva2VuIHVwLiAgVGhlIGJ1cyB0eXBlJ3MgY2FsbGJhY2sgaXMgdGhlbiBfZW50aXJlbHlfCitfcmVzcG9uc2libGVfIGZvciBoYW5kbGluZyB0aGUgZGV2aWNlIGFzIGFwcHJvcHJpYXRlLCB3aGljaCBtYXksIGJ1dCBuZWVkIG5vdAoraW5jbHVkZSBleGVjdXRpbmcgdGhlIGRldmljZSBkcml2ZXIncyBvd24gLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIChmcm9tIHRoZQorUE0gY29yZSdzIHBvaW50IG9mIHZpZXcgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgYSAtPnJ1bnRpbWVfcmVzdW1lKCkKK2NhbGxiYWNrIGluIGEgZGV2aWNlIGRyaXZlciBhcyBsb25nIGFzIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9yZXN1bWUoKSBrbm93cword2hhdCB0byBkbyB0byBoYW5kbGUgdGhlIGRldmljZSkuCisKKyAgKiBPbmNlIHRoZSBidXMgdHlwZSdzIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwKKyAgICB0aGUgUE0gY29yZSByZWdhcmRzIHRoZSBkZXZpY2UgYXMgZnVsbHkgb3BlcmF0aW9uYWwsIHdoaWNoIG1lYW5zIHRoYXQgdGhlCisgICAgZGV2aWNlIF9tdXN0XyBiZSBhYmxlIHRvIGNvbXBsZXRlIEkvTyBvcGVyYXRpb25zIGFzIG5lZWRlZC4gIFRoZSBydW4tdGltZQorICAgIFBNIHN0YXR1cyBvZiB0aGUgZGV2aWNlIGlzIHRoZW4gJ2FjdGl2ZScuCisKKyAgKiBJZiB0aGUgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB0aGUgUE0KKyAgICBjb3JlIHJlZ2FyZHMgdGhpcyBhcyBhIGZhdGFsIGVycm9yIGFuZCB3aWxsIHJlZnVzZSB0byBydW4gdGhlIGhlbHBlcgorICAgIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0IGZvciB0aGUgZGV2aWNlLCB1bnRpbCBpdHMgc3RhdHVzIGlzCisgICAgZGlyZWN0bHkgc2V0IGVpdGhlciB0byAnYWN0aXZlJyBvciB0byAnc3VzcGVuZGVkJyAodGhlIFBNIGNvcmUgcHJvdmlkZXMKKyAgICBzcGVjaWFsIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoaXMgcHVycG9zZSkuCisKK1RoZSAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGJ5IHRoZSBQTSBjb3JlIGZvciB0aGUgYnVzIHR5cGUgb2YKK2dpdmVuIGRldmljZSB3aGVuZXZlciB0aGUgZGV2aWNlIGFwcGVhcnMgdG8gYmUgaWRsZSwgd2hpY2ggaXMgaW5kaWNhdGVkIHRvIHRoZQorUE0gY29yZSBieSB0d28gY291bnRlcnMsIHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyIGFuZCB0aGUgY291bnRlciBvZiAnYWN0aXZlJworY2hpbGRyZW4gb2YgdGhlIGRldmljZS4KKworICAqIElmIGFueSBvZiB0aGVzZSBjb3VudGVycyBpcyBkZWNyZWFzZWQgdXNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gcHJvdmlkZWQgYnkKKyAgICB0aGUgUE0gY29yZSBhbmQgaXQgdHVybnMgb3V0IHRvIGJlIGVxdWFsIHRvIHplcm8sIHRoZSBvdGhlciBjb3VudGVyIGlzCisgICAgY2hlY2tlZC4gIElmIHRoYXQgY291bnRlciBhbHNvIGlzIGVxdWFsIHRvIHplcm8sIHRoZSBQTSBjb3JlIGV4ZWN1dGVzIHRoZQorICAgIGRldmljZSBidXMgdHlwZSdzIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2sgKHdpdGggdGhlIGRldmljZSBhcyBhbgorICAgIGFyZ3VtZW50KS4KKworVGhlIGFjdGlvbiBwZXJmb3JtZWQgYnkgYSBidXMgdHlwZSdzIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2sgaXMgdG90YWxseQorZGVwZW5kZW50IG9uIHRoZSBidXMgdHlwZSBpbiBxdWVzdGlvbiwgYnV0IHRoZSBleHBlY3RlZCBhbmQgcmVjb21tZW5kZWQgYWN0aW9uCitpcyB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGNhbiBiZSBzdXNwZW5kZWQgKGkuZS4gaWYgYWxsIG9mIHRoZSBjb25kaXRpb25zCituZWNlc3NhcnkgZm9yIHN1c3BlbmRpbmcgdGhlIGRldmljZSBhcmUgc2F0aXNmaWVkKSBhbmQgdG8gcXVldWUgdXAgYSBzdXNwZW5kCityZXF1ZXN0IGZvciB0aGUgZGV2aWNlIGluIHRoYXQgY2FzZS4KKworVGhlIGhlbHBlciBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhlIFBNIGNvcmUsIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQsIGd1YXJhbnRlZQordGhhdCB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzIGFyZSBtZXQgd2l0aCByZXNwZWN0IHRvIHRoZSBidXMgdHlwZSdzIHJ1bi10aW1lCitQTSBjYWxsYmFja3M6CisKKygxKSBUaGUgY2FsbGJhY2tzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgKGUuZy4gaXQgaXMgZm9yYmlkZGVuIHRvIGV4ZWN1dGUKKyAgICAtPnJ1bnRpbWVfc3VzcGVuZCgpIGluIHBhcmFsbGVsIHdpdGggLT5ydW50aW1lX3Jlc3VtZSgpIG9yIHdpdGggYW5vdGhlcgorICAgIGluc3RhbmNlIG9mIC0+cnVudGltZV9zdXNwZW5kKCkgZm9yIHRoZSBzYW1lIGRldmljZSkgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQKKyAgICAtPnJ1bnRpbWVfc3VzcGVuZCgpIG9yIC0+cnVudGltZV9yZXN1bWUoKSBjYW4gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwgd2l0aAorICAgIC0+cnVudGltZV9pZGxlKCkgKGFsdGhvdWdoIC0+cnVudGltZV9pZGxlKCkgd2lsbCBub3QgYmUgc3RhcnRlZCB3aGlsZSBhbnkKKyAgICBvZiB0aGUgb3RoZXIgY2FsbGJhY2tzIGlzIGJlaW5nIGV4ZWN1dGVkIGZvciB0aGUgc2FtZSBkZXZpY2UpLgorCisoMikgLT5ydW50aW1lX2lkbGUoKSBhbmQgLT5ydW50aW1lX3N1c3BlbmQoKSBjYW4gb25seSBiZSBleGVjdXRlZCBmb3IgJ2FjdGl2ZScKKyAgICBkZXZpY2VzIChpLmUuIHRoZSBQTSBjb3JlIHdpbGwgb25seSBleGVjdXRlIC0+cnVudGltZV9pZGxlKCkgb3IKKyAgICAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgZGV2aWNlcyB0aGUgcnVuLXRpbWUgUE0gc3RhdHVzIG9mIHdoaWNoIGlzCisgICAgJ2FjdGl2ZScpLgorCisoMykgLT5ydW50aW1lX2lkbGUoKSBhbmQgLT5ydW50aW1lX3N1c3BlbmQoKSBjYW4gb25seSBiZSBleGVjdXRlZCBmb3IgYSBkZXZpY2UKKyAgICB0aGUgdXNhZ2UgY291bnRlciBvZiB3aGljaCBpcyBlcXVhbCB0byB6ZXJvIF9hbmRfIGVpdGhlciB0aGUgY291bnRlciBvZgorICAgICdhY3RpdmUnIGNoaWxkcmVuIG9mIHdoaWNoIGlzIGVxdWFsIHRvIHplcm8sIG9yIHRoZSAncG93ZXIuaWdub3JlX2NoaWxkcmVuJworICAgIGZsYWcgb2Ygd2hpY2ggaXMgc2V0LgorCisoNCkgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbiBvbmx5IGJlIGV4ZWN1dGVkIGZvciAnc3VzcGVuZGVkJyBkZXZpY2VzICAoaS5lLiB0aGUKKyAgICBQTSBjb3JlIHdpbGwgb25seSBleGVjdXRlIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZXMgdGhlIHJ1bi10aW1lCisgICAgUE0gc3RhdHVzIG9mIHdoaWNoIGlzICdzdXNwZW5kZWQnKS4KKworQWRkaXRpb25hbGx5LCB0aGUgaGVscGVyIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgUE0gY29yZSBvYmV5IHRoZSBmb2xsb3dpbmcKK3J1bGVzOgorCisgICogSWYgLT5ydW50aW1lX3N1c3BlbmQoKSBpcyBhYm91dCB0byBiZSBleGVjdXRlZCBvciB0aGVyZSdzIGEgcGVuZGluZyByZXF1ZXN0CisgICAgdG8gZXhlY3V0ZSBpdCwgLT5ydW50aW1lX2lkbGUoKSB3aWxsIG5vdCBiZSBleGVjdXRlZCBmb3IgdGhlIHNhbWUgZGV2aWNlLgorCisgICogQSByZXF1ZXN0IHRvIGV4ZWN1dGUgb3IgdG8gc2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiAtPnJ1bnRpbWVfc3VzcGVuZCgpCisgICAgd2lsbCBjYW5jZWwgYW55IHBlbmRpbmcgcmVxdWVzdHMgdG8gZXhlY3V0ZSAtPnJ1bnRpbWVfaWRsZSgpIGZvciB0aGUgc2FtZQorICAgIGRldmljZS4KKworICAqIElmIC0+cnVudGltZV9yZXN1bWUoKSBpcyBhYm91dCB0byBiZSBleGVjdXRlZCBvciB0aGVyZSdzIGEgcGVuZGluZyByZXF1ZXN0CisgICAgdG8gZXhlY3V0ZSBpdCwgdGhlIG90aGVyIGNhbGxiYWNrcyB3aWxsIG5vdCBiZSBleGVjdXRlZCBmb3IgdGhlIHNhbWUgZGV2aWNlLgorCisgICogQSByZXF1ZXN0IHRvIGV4ZWN1dGUgLT5ydW50aW1lX3Jlc3VtZSgpIHdpbGwgY2FuY2VsIGFueSBwZW5kaW5nIG9yCisgICAgc2NoZWR1bGVkIHJlcXVlc3RzIHRvIGV4ZWN1dGUgdGhlIG90aGVyIGNhbGxiYWNrcyBmb3IgdGhlIHNhbWUgZGV2aWNlLgorCiszLiBSdW4tdGltZSBQTSBEZXZpY2UgRmllbGRzCisKK1RoZSBmb2xsb3dpbmcgZGV2aWNlIHJ1bi10aW1lIFBNIGZpZWxkcyBhcmUgcHJlc2VudCBpbiAnc3RydWN0IGRldl9wbV9pbmZvJywgYXMKK2RlZmluZWQgaW4gaW5jbHVkZS9saW51eC9wbS5oOgorCisgIHN0cnVjdCB0aW1lcl9saXN0IHN1c3BlbmRfdGltZXI7CisgICAgLSB0aW1lciB1c2VkIGZvciBzY2hlZHVsaW5nIChkZWxheWVkKSBzdXNwZW5kIHJlcXVlc3QKKworICB1bnNpZ25lZCBsb25nIHRpbWVyX2V4cGlyZXM7CisgICAgLSB0aW1lciBleHBpcmF0aW9uIHRpbWUsIGluIGppZmZpZXMgKGlmIHRoaXMgaXMgZGlmZmVyZW50IGZyb20gemVybywgdGhlCisgICAgICB0aW1lciBpcyBydW5uaW5nIGFuZCB3aWxsIGV4cGlyZSBhdCB0aGF0IHRpbWUsIG90aGVyd2lzZSB0aGUgdGltZXIgaXMgbm90CisgICAgICBydW5uaW5nKQorCisgIHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworICAgIC0gd29yayBzdHJ1Y3R1cmUgdXNlZCBmb3IgcXVldWluZyB1cCByZXF1ZXN0cyAoaS5lLiB3b3JrIGl0ZW1zIGluIHBtX3dxKQorCisgIHdhaXRfcXVldWVfaGVhZF90IHdhaXRfcXVldWU7CisgICAgLSB3YWl0IHF1ZXVlIHVzZWQgaWYgYW55IG9mIHRoZSBoZWxwZXIgZnVuY3Rpb25zIG5lZWRzIHRvIHdhaXQgZm9yIGFub3RoZXIKKyAgICAgIG9uZSB0byBjb21wbGV0ZQorCisgIHNwaW5sb2NrX3QgbG9jazsKKyAgICAtIGxvY2sgdXNlZCBmb3Igc3luY2hyb25pc2F0aW9uCisKKyAgYXRvbWljX3QgdXNhZ2VfY291bnQ7CisgICAgLSB0aGUgdXNhZ2UgY291bnRlciBvZiB0aGUgZGV2aWNlCisKKyAgYXRvbWljX3QgY2hpbGRfY291bnQ7CisgICAgLSB0aGUgY291bnQgb2YgJ2FjdGl2ZScgY2hpbGRyZW4gb2YgdGhlIGRldmljZQorCisgIHVuc2lnbmVkIGludCBpZ25vcmVfY2hpbGRyZW47CisgICAgLSBpZiBzZXQsIHRoZSB2YWx1ZSBvZiBjaGlsZF9jb3VudCBpcyBpZ25vcmVkIChidXQgc3RpbGwgdXBkYXRlZCkKKworICB1bnNpZ25lZCBpbnQgZGlzYWJsZV9kZXB0aDsKKyAgICAtIHVzZWQgZm9yIGRpc2FibGluZyB0aGUgaGVscGVyIGZ1bmNpb25zICh0aGV5IHdvcmsgbm9ybWFsbHkgaWYgdGhpcyBpcworICAgICAgZXF1YWwgdG8gemVybyk7IHRoZSBpbml0aWFsIHZhbHVlIG9mIGl0IGlzIDEgKGkuZS4gcnVuLXRpbWUgUE0gaXMKKyAgICAgIGluaXRpYWxseSBkaXNhYmxlZCBmb3IgYWxsIGRldmljZXMpCisKKyAgdW5zaWduZWQgaW50IHJ1bnRpbWVfZXJyb3I7CisgICAgLSBpZiBzZXQsIHRoZXJlIHdhcyBhIGZhdGFsIGVycm9yIChvbmUgb2YgdGhlIGNhbGxiYWNrcyByZXR1cm5lZCBlcnJvciBjb2RlCisgICAgICBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAyKSwgc28gdGhlIGhlbHBlciBmdW50aW9ucyB3aWxsIG5vdCB3b3JrIHVudGlsCisgICAgICB0aGlzIGZsYWcgaXMgY2xlYXJlZDsgdGhpcyBpcyB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSB0aGUgZmFpbGluZworICAgICAgY2FsbGJhY2sKKworICB1bnNpZ25lZCBpbnQgaWRsZV9ub3RpZmljYXRpb247CisgICAgLSBpZiBzZXQsIC0+cnVudGltZV9pZGxlKCkgaXMgYmVpbmcgZXhlY3V0ZWQKKworICB1bnNpZ25lZCBpbnQgcmVxdWVzdF9wZW5kaW5nOworICAgIC0gaWYgc2V0LCB0aGVyZSdzIGEgcGVuZGluZyByZXF1ZXN0IChpLmUuIGEgd29yayBpdGVtIHF1ZXVlZCB1cCBpbnRvIHBtX3dxKQorCisgIGVudW0gcnBtX3JlcXVlc3QgcmVxdWVzdDsKKyAgICAtIHR5cGUgb2YgcmVxdWVzdCB0aGF0J3MgcGVuZGluZyAodmFsaWQgaWYgcmVxdWVzdF9wZW5kaW5nIGlzIHNldCkKKworICB1bnNpZ25lZCBpbnQgZGVmZXJyZWRfcmVzdW1lOworICAgIC0gc2V0IGlmIC0+cnVudGltZV9yZXN1bWUoKSBpcyBhYm91dCB0byBiZSBydW4gd2hpbGUgLT5ydW50aW1lX3N1c3BlbmQoKSBpcworICAgICAgYmVpbmcgZXhlY3V0ZWQgZm9yIHRoYXQgZGV2aWNlIGFuZCBpdCBpcyBub3QgcHJhY3RpY2FsIHRvIHdhaXQgZm9yIHRoZQorICAgICAgc3VzcGVuZCB0byBjb21wbGV0ZTsgbWVhbnMgInN0YXJ0IGEgcmVzdW1lIGFzIHNvb24gYXMgeW91J3ZlIHN1c3BlbmRlZCIKKworICBlbnVtIHJwbV9zdGF0dXMgcnVudGltZV9zdGF0dXM7CisgICAgLSB0aGUgcnVuLXRpbWUgUE0gc3RhdHVzIG9mIHRoZSBkZXZpY2U7IHRoaXMgZmllbGQncyBpbml0aWFsIHZhbHVlIGlzCisgICAgICBSUE1fU1VTUEVOREVELCB3aGljaCBtZWFucyB0aGF0IGVhY2ggZGV2aWNlIGlzIGluaXRpYWxseSByZWdhcmRlZCBieSB0aGUKKyAgICAgIFBNIGNvcmUgYXMgJ3N1c3BlbmRlZCcsIHJlZ2FyZGxlc3Mgb2YgaXRzIHJlYWwgaGFyZHdhcmUgc3RhdHVzCisKK0FsbCBvZiB0aGUgYWJvdmUgZmllbGRzIGFyZSBtZW1iZXJzIG9mIHRoZSAncG93ZXInIG1lbWJlciBvZiAnc3RydWN0IGRldmljZScuCisKKzQuIFJ1bi10aW1lIFBNIERldmljZSBIZWxwZXIgRnVuY3Rpb25zCisKK1RoZSBmb2xsb3dpbmcgcnVuLXRpbWUgUE0gaGVscGVyIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbgorZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBhbmQgaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmg6CisKKyAgdm9pZCBwbV9ydW50aW1lX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGluaXRpYWxpemUgdGhlIGRldmljZSBydW4tdGltZSBQTSBmaWVsZHMgaW4gJ3N0cnVjdCBkZXZfcG1faW5mbycKKworICB2b2lkIHBtX3J1bnRpbWVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBtYWtlIHN1cmUgdGhhdCB0aGUgcnVuLXRpbWUgUE0gb2YgdGhlIGRldmljZSB3aWxsIGJlIGRpc2FibGVkIGFmdGVyCisgICAgICByZW1vdmluZyB0aGUgZGV2aWNlIGZyb20gZGV2aWNlIGhpZXJhcmNoeQorCisgIGludCBwbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGV4ZWN1dGUgLT5ydW50aW1lX2lkbGUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlOyByZXR1cm5zIDAgb24gc3VjY2VzcworICAgICAgb3IgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUlOUFJPR1JFU1MgbWVhbnMgdGhhdCAtPnJ1bnRpbWVfaWRsZSgpCisgICAgICBpcyBhbHJlYWR5IGJlaW5nIGV4ZWN1dGVkCisKKyAgaW50IHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gZXhlY3V0ZSAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgICAgc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIHdhcyBhbHJlYWR5ICdzdXNwZW5kZWQnLCBvcgorICAgICAgZXJyb3IgY29kZSBvbiBmYWlsdXJlLCB3aGVyZSAtRUFHQUlOIG9yIC1FQlVTWSBtZWFucyBpdCBpcyBzYWZlIHRvIGF0dGVtcHQKKyAgICAgIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhZ2FpbiBpbiBmdXR1cmUKKworICBpbnQgcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGV4ZWN1dGUgLT5ydW50aW1lX3Jlc3VtZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGU7IHJldHVybnMgMCBvbgorICAgICAgc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIHdhcyBhbHJlYWR5ICdhY3RpdmUnIG9yCisgICAgICBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FQUdBSU4gbWVhbnMgaXQgbWF5IGJlIHNhZmUgdG8gYXR0ZW1wdCB0bworICAgICAgcmVzdW1lIHRoZSBkZXZpY2UgYWdhaW4gaW4gZnV0dXJlLCBidXQgJ3Bvd2VyLnJ1bnRpbWVfZXJyb3InIHNob3VsZCBiZQorICAgICAgY2hlY2tlZCBhZGRpdGlvbmFsbHkKKworICBpbnQgcG1fcmVxdWVzdF9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBzdWJtaXQgYSByZXF1ZXN0IHRvIGV4ZWN1dGUgLT5ydW50aW1lX2lkbGUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCisgICAgICAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24gc3VjY2VzcworICAgICAgb3IgZXJyb3IgY29kZSBpZiB0aGUgcmVxdWVzdCBoYXMgbm90IGJlZW4gcXVldWVkIHVwCisKKyAgaW50IHBtX3NjaGVkdWxlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpOworICAgIC0gc2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiAtPnJ1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGUKKyAgICAgIGluIGZ1dHVyZSwgd2hlcmUgJ2RlbGF5JyBpcyB0aGUgdGltZSB0byB3YWl0IGJlZm9yZSBxdWV1aW5nIHVwIGEgc3VzcGVuZAorICAgICAgd29yayBpdGVtIGluIHBtX3dxLCBpbiBtaWxsaXNlY29uZHMgKGlmICdkZWxheScgaXMgemVybywgdGhlIHdvcmsgaXRlbSBpcworICAgICAgcXVldWVkIHVwIGltbWVkaWF0ZWx5KTsgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIFBNCisgICAgICBydW4tdGltZSBzdGF0dXMgd2FzIGFscmVhZHkgJ3N1c3BlbmRlZCcsIG9yIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QKKyAgICAgIGhhc24ndCBiZWVuIHNjaGVkdWxlZCAob3IgcXVldWVkIHVwIGlmICdkZWxheScgaXMgMCk7IGlmIHRoZSBleGVjdXRpb24gb2YKKyAgICAgIC0+cnVudGltZV9zdXNwZW5kKCkgaXMgYWxyZWFkeSBzY2hlZHVsZWQgYW5kIG5vdCB5ZXQgZXhwaXJlZCwgdGhlIG5ldworICAgICAgdmFsdWUgb2YgJ2RlbGF5JyB3aWxsIGJlIHVzZWQgYXMgdGhlIHRpbWUgdG8gd2FpdAorCisgIGludCBwbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gc3VibWl0IGEgcmVxdWVzdCB0byBleGVjdXRlIC0+cnVudGltZV9yZXN1bWUoKSBmb3IgdGhlIGRldmljZSdzIGJ1cyB0eXBlCisgICAgICAodGhlIHJlcXVlc3QgaXMgcmVwcmVzZW50ZWQgYnkgYSB3b3JrIGl0ZW0gaW4gcG1fd3EpOyByZXR1cm5zIDAgb24KKyAgICAgIHN1Y2Nlc3MsIDEgaWYgdGhlIGRldmljZSdzIHJ1bi10aW1lIFBNIHN0YXR1cyB3YXMgYWxyZWFkeSAnYWN0aXZlJywgb3IKKyAgICAgIGVycm9yIGNvZGUgaWYgdGhlIHJlcXVlc3QgaGFzbid0IGJlZW4gcXVldWVkIHVwCisKKyAgdm9pZCBwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaW5jcmVtZW50IHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyCisKKyAgaW50IHBtX3J1bnRpbWVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpbmNyZW1lbnQgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIsIHJ1biBwbV9yZXF1ZXN0X3Jlc3VtZShkZXYpIGFuZAorICAgICAgcmV0dXJuIGl0cyByZXN1bHQKKworICBpbnQgcG1fcnVudGltZV9nZXRfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaW5jcmVtZW50IHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyLCBydW4gcG1fcnVudGltZV9yZXN1bWUoZGV2KSBhbmQKKyAgICAgIHJldHVybiBpdHMgcmVzdWx0CisKKyAgdm9pZCBwbV9ydW50aW1lX3B1dF9ub2lkbGUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGRlY3JlbWVudCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlcgorCisgIGludCBwbV9ydW50aW1lX3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gZGVjcmVtZW50IHRoZSBkZXZpY2UncyB1c2FnZSBjb3VudGVyLCBydW4gcG1fcmVxdWVzdF9pZGxlKGRldikgYW5kIHJldHVybgorICAgICAgaXRzIHJlc3VsdAorCisgIGludCBwbV9ydW50aW1lX3B1dF9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBkZWNyZW1lbnQgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIsIHJ1biBwbV9ydW50aW1lX2lkbGUoZGV2KSBhbmQgcmV0dXJuCisgICAgICBpdHMgcmVzdWx0CisKKyAgdm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gZW5hYmxlIHRoZSBydW4tdGltZSBQTSBoZWxwZXIgZnVuY3Rpb25zIHRvIHJ1biB0aGUgZGV2aWNlIGJ1cyB0eXBlJ3MKKyAgICAgIHJ1bi10aW1lIFBNIGNhbGxiYWNrcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAyCisKKyAgaW50IHBtX3J1bnRpbWVfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gcHJldmVudCB0aGUgcnVuLXRpbWUgUE0gaGVscGVyIGZ1bmN0aW9ucyBmcm9tIHJ1bm5pbmcgdGhlIGRldmljZSBidXMKKyAgICAgIHR5cGUncyBydW4tdGltZSBQTSBjYWxsYmFja3MsIG1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGUgcGVuZGluZyBydW4tdGltZQorICAgICAgUE0gb3BlcmF0aW9ucyBvbiB0aGUgZGV2aWNlIGFyZSBlaXRoZXIgY29tcGxldGVkIG9yIGNhbmNlbGVkOyByZXR1cm5zCisgICAgICAxIGlmIHRoZXJlIHdhcyBhIHJlc3VtZSByZXF1ZXN0IHBlbmRpbmcgYW5kIGl0IHdhcyBuZWNlc3NhcnkgdG8gZXhlY3V0ZQorICAgICAgLT5ydW50aW1lX3Jlc3VtZSgpIGZvciB0aGUgZGV2aWNlJ3MgYnVzIHR5cGUgdG8gc2F0aXNmeSB0aGF0IHJlcXVlc3QsCisgICAgICBvdGhlcndpc2UgMCBpcyByZXR1cm5lZAorCisgIHZvaWQgcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSk7CisgICAgLSBzZXQvdW5zZXQgdGhlIHBvd2VyLmlnbm9yZV9jaGlsZHJlbiBmbGFnIG9mIHRoZSBkZXZpY2UKKworICBpbnQgcG1fcnVudGltZV9zZXRfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBjbGVhciB0aGUgZGV2aWNlJ3MgJ3Bvd2VyLnJ1bnRpbWVfZXJyb3InIGZsYWcsIHNldCB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUKKyAgICAgIFBNIHN0YXR1cyB0byAnYWN0aXZlJyBhbmQgdXBkYXRlIGl0cyBwYXJlbnQncyBjb3VudGVyIG9mICdhY3RpdmUnCisgICAgICBjaGlsZHJlbiBhcyBhcHByb3ByaWF0ZSAoaXQgaXMgb25seSB2YWxpZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBpZgorICAgICAgJ3Bvd2VyLnJ1bnRpbWVfZXJyb3InIGlzIHNldCBvciAncG93ZXIuZGlzYWJsZV9kZXB0aCcgaXMgZ3JlYXRlciB0aGFuCisgICAgICB6ZXJvKTsgaXQgd2lsbCBmYWlsIGFuZCByZXR1cm4gZXJyb3IgY29kZSBpZiB0aGUgZGV2aWNlIGhhcyBhIHBhcmVudAorICAgICAgd2hpY2ggaXMgbm90IGFjdGl2ZSBhbmQgdGhlICdwb3dlci5pZ25vcmVfY2hpbGRyZW4nIGZsYWcgb2Ygd2hpY2ggaXMgdW5zZXQKKworICB2b2lkIHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gY2xlYXIgdGhlIGRldmljZSdzICdwb3dlci5ydW50aW1lX2Vycm9yJyBmbGFnLCBzZXQgdGhlIGRldmljZSdzIHJ1bi10aW1lCisgICAgICBQTSBzdGF0dXMgdG8gJ3N1c3BlbmRlZCcgYW5kIHVwZGF0ZSBpdHMgcGFyZW50J3MgY291bnRlciBvZiAnYWN0aXZlJworICAgICAgY2hpbGRyZW4gYXMgYXBwcm9wcmlhdGUgKGl0IGlzIG9ubHkgdmFsaWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24gaWYKKyAgICAgICdwb3dlci5ydW50aW1lX2Vycm9yJyBpcyBzZXQgb3IgJ3Bvd2VyLmRpc2FibGVfZGVwdGgnIGlzIGdyZWF0ZXIgdGhhbgorICAgICAgemVybykKKworSXQgaXMgc2FmZSB0byBleGVjdXRlIHRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9ucyBmcm9tIGludGVycnVwdCBjb250ZXh0OgorCitwbV9yZXF1ZXN0X2lkbGUoKQorcG1fc2NoZWR1bGVfc3VzcGVuZCgpCitwbV9yZXF1ZXN0X3Jlc3VtZSgpCitwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgpCitwbV9ydW50aW1lX2dldCgpCitwbV9ydW50aW1lX3B1dF9ub2lkbGUoKQorcG1fcnVudGltZV9wdXQoKQorcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oKQorcG1fcnVudGltZV9zZXRfYWN0aXZlKCkKK3BtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZCgpCitwbV9ydW50aW1lX2VuYWJsZSgpCisKKzUuIFJ1bi10aW1lIFBNIEluaXRpYWxpemF0aW9uLCBEZXZpY2UgUHJvYmluZyBhbmQgUmVtb3ZhbAorCitJbml0aWFsbHksIHRoZSBydW4tdGltZSBQTSBpcyBkaXNhYmxlZCBmb3IgYWxsIGRldmljZXMsIHdoaWNoIG1lYW5zIHRoYXQgdGhlCittYWpvcml0eSBvZiB0aGUgcnVuLXRpbWUgUE0gaGVscGVyIGZ1bnRpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQgd2lsbCByZXR1cm4KKy1FQUdBSU4gdW50aWwgcG1fcnVudGltZV9lbmFibGUoKSBpcyBjYWxsZWQgZm9yIHRoZSBkZXZpY2UuCisKK0luIGFkZGl0aW9uIHRvIHRoYXQsIHRoZSBpbml0aWFsIHJ1bi10aW1lIFBNIHN0YXR1cyBvZiBhbGwgZGV2aWNlcyBpcworJ3N1c3BlbmRlZCcsIGJ1dCBpdCBuZWVkIG5vdCByZWZsZWN0IHRoZSBhY3R1YWwgcGh5c2ljYWwgc3RhdGUgb2YgdGhlIGRldmljZS4KK1RodXMsIGlmIHRoZSBkZXZpY2UgaXMgaW5pdGlhbGx5IGFjdGl2ZSAoaS5lLiBpdCBpcyBhYmxlIHRvIHByb2Nlc3MgSS9PKSwgaXRzCitydW4tdGltZSBQTSBzdGF0dXMgbXVzdCBiZSBjaGFuZ2VkIHRvICdhY3RpdmUnLCB3aXRoIHRoZSBoZWxwIG9mCitwbV9ydW50aW1lX3NldF9hY3RpdmUoKSwgYmVmb3JlIHBtX3J1bnRpbWVfZW5hYmxlKCkgaXMgY2FsbGVkIGZvciB0aGUgZGV2aWNlLgorCitIb3dldmVyLCBpZiB0aGUgZGV2aWNlIGhhcyBhIHBhcmVudCBhbmQgdGhlIHBhcmVudCdzIHJ1bi10aW1lIFBNIGlzIGVuYWJsZWQsCitjYWxsaW5nIHBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgpIGZvciB0aGUgZGV2aWNlIHdpbGwgYWZmZWN0IHRoZSBwYXJlbnQsIHVubGVzcwordGhlIHBhcmVudCdzICdwb3dlci5pZ25vcmVfY2hpbGRyZW4nIGZsYWcgaXMgc2V0LiAgTmFtZWx5LCBpbiB0aGF0IGNhc2UgdGhlCitwYXJlbnQgd29uJ3QgYmUgYWJsZSB0byBzdXNwZW5kIGF0IHJ1biB0aW1lLCB1c2luZyB0aGUgUE0gY29yZSdzIGhlbHBlcgorZnVuY3Rpb25zLCBhcyBsb25nIGFzIHRoZSBjaGlsZCdzIHN0YXR1cyBpcyAnYWN0aXZlJywgZXZlbiBpZiB0aGUgY2hpbGQncworcnVuLXRpbWUgUE0gaXMgc3RpbGwgZGlzYWJsZWQgKGkuZS4gcG1fcnVudGltZV9lbmFibGUoKSBoYXNuJ3QgYmVlbiBjYWxsZWQgZm9yCit0aGUgY2hpbGQgeWV0IG9yIHBtX3J1bnRpbWVfZGlzYWJsZSgpIGhhcyBiZWVuIGNhbGxlZCBmb3IgaXQpLiAgRm9yIHRoaXMgcmVhc29uLAorb25jZSBwbV9ydW50aW1lX3NldF9hY3RpdmUoKSBoYXMgYmVlbiBjYWxsZWQgZm9yIHRoZSBkZXZpY2UsIHBtX3J1bnRpbWVfZW5hYmxlKCkKK3Nob3VsZCBiZSBjYWxsZWQgZm9yIGl0IHRvbyBhcyBzb29uIGFzIHJlYXNvbmFibHkgcG9zc2libGUgb3IgaXRzIHJ1bi10aW1lIFBNCitzdGF0dXMgc2hvdWxkIGJlIGNoYW5nZWQgYmFjayB0byAnc3VzcGVuZGVkJyB3aXRoIHRoZSBoZWxwIG9mCitwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoKS4KKworSWYgdGhlIGRlZmF1bHQgaW5pdGlhbCBydW4tdGltZSBQTSBzdGF0dXMgb2YgdGhlIGRldmljZSAoaS5lLiAnc3VzcGVuZGVkJykKK3JlZmxlY3RzIHRoZSBhY3R1YWwgc3RhdGUgb2YgdGhlIGRldmljZSwgaXRzIGJ1cyB0eXBlJ3Mgb3IgaXRzIGRyaXZlcidzCistPnByb2JlKCkgY2FsbGJhY2sgd2lsbCBsaWtlbHkgbmVlZCB0byB3YWtlIGl0IHVwIHVzaW5nIG9uZSBvZiB0aGUgUE0gY29yZSdzCitoZWxwZXIgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQuICBJbiB0aGF0IGNhc2UsIHBtX3J1bnRpbWVfcmVzdW1lKCkKK3Nob3VsZCBiZSB1c2VkLiAgT2YgY291cnNlLCBmb3IgdGhpcyBwdXJwb3NlIHRoZSBkZXZpY2UncyBydW4tdGltZSBQTSBoYXMgdG8gYmUKK2VuYWJsZWQgZWFybGllciBieSBjYWxsaW5nIHBtX3J1bnRpbWVfZW5hYmxlKCkuCisKK0lmIHRoZSBkZXZpY2UgYnVzIHR5cGUncyBvciBkcml2ZXIncyAtPnByb2JlKCkgb3IgLT5yZW1vdmUoKSBjYWxsYmFjayBydW5zCitwbV9ydW50aW1lX3N1c3BlbmQoKSBvciBwbV9ydW50aW1lX2lkbGUoKSBvciB0aGVpciBhc3luY2hyb25vdXMgY291bnRlcnBhcnRzLAordGhleSB3aWxsIGZhaWwgcmV0dXJuaW5nIC1FQUdBSU4sIGJlY2F1c2UgdGhlIGRldmljZSdzIHVzYWdlIGNvdW50ZXIgaXMKK2luY3JlbWVudGVkIGJ5IHRoZSBjb3JlIGJlZm9yZSBleGVjdXRpbmcgLT5wcm9iZSgpIGFuZCAtPnJlbW92ZSgpLiAgU3RpbGwsIGl0CittYXkgYmUgZGVzaXJhYmxlIHRvIHN1c3BlbmQgdGhlIGRldmljZSBhcyBzb29uIGFzIC0+cHJvYmUoKSBvciAtPnJlbW92ZSgpIGhhcworZmluaXNoZWQsIHNvIHRoZSBQTSBjb3JlIHVzZXMgcG1fcnVudGltZV9pZGxlX3N5bmMoKSB0byBpbnZva2UgdGhlIGRldmljZSBidXMKK3R5cGUncyAtPnJ1bnRpbWVfaWRsZSgpIGNhbGxiYWNrIGF0IHRoYXQgdGltZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3NsdWIudHh0CmluZGV4IGJiMWY1YzYuLjUxMDkxN2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dApAQCAtNDEsNiArNDEsOCBAQAogCVAJCVBvaXNvbmluZyAob2JqZWN0IGFuZCBwYWRkaW5nKQogCVUJCVVzZXIgdHJhY2tpbmcgKGZyZWUgYW5kIGFsbG9jKQogCVQJCVRyYWNlIChwbGVhc2Ugb25seSB1c2Ugb24gc2luZ2xlIHNsYWJzKQorCU8JCVN3aXRjaCBkZWJ1Z2dpbmcgb2ZmIGZvciBjYWNoZXMgdGhhdCB3b3VsZCBoYXZlCisJCQljYXVzZWQgaGlnaGVyIG1pbmltdW0gc2xhYiBvcmRlcnMKIAktCQlTd2l0Y2ggYWxsIGRlYnVnZ2luZyBvZmYgKHVzZWZ1bCBpZiB0aGUga2VybmVsIGlzCiAJCQljb25maWd1cmVkIHdpdGggQ09ORklHX1NMVUJfREVCVUdfT04pCiAKQEAgLTU5LDYgKzYxLDE0IEBACiAKIAlzbHViX2RlYnVnPUYsZGVudHJ5CiAKK0RlYnVnZ2luZyBvcHRpb25zIG1heSByZXF1aXJlIHRoZSBtaW5pbXVtIHBvc3NpYmxlIHNsYWIgb3JkZXIgdG8gaW5jcmVhc2UgYXMKK2EgcmVzdWx0IG9mIHN0b3JpbmcgdGhlIG1ldGFkYXRhIChmb3IgZXhhbXBsZSwgY2FjaGVzIHdpdGggUEFHRV9TSVpFIG9iamVjdAorc2l6ZXMpLiAgVGhpcyBoYXMgYSBoaWdoZXIgbGlrbGlob29kIG9mIHJlc3VsdGluZyBpbiBzbGFiIGFsbG9jYXRpb24gZXJyb3JzCitpbiBsb3cgbWVtb3J5IHNpdHVhdGlvbnMgb3IgaWYgdGhlcmUncyBoaWdoIGZyYWdtZW50YXRpb24gb2YgbWVtb3J5LiAgVG8KK3N3aXRjaCBvZmYgZGVidWdnaW5nIGZvciBzdWNoIGNhY2hlcyBieSBkZWZhdWx0LCB1c2UKKworCXNsdWJfZGVidWc9TworCiBJbiBjYXNlIHlvdSBmb3Jnb3QgdG8gZW5hYmxlIGRlYnVnZ2luZyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZTogSXQgaXMKIHBvc3NpYmxlIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgbWFudWFsbHkgd2hlbiB0aGUga2VybmVsIGlzIHVwLiBMb29rIGF0IHRoZQogY29udGVudHMgb2Y6CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDk4OWZmMTEuLjgzN2I1OTggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC01MzQsMTAgKzUzNCwzMCBAQAogVzoJaHR0cDovL21heGltLm9yZy56YS9hdDkxXzI2Lmh0bWwKIFM6CU1haW50YWluZWQKIAotQVJNL0NJUlJVUyBMT0dJQyBFUDkzWFggQVJNIEFSQ0hJVEVDVFVSRQotTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KK0FSTS9CQ01SSU5HIEFSTSBBUkNISVRFQ1RVUkUKK006CUxlbyBDaGVuIDxsZW9jaGVuQGJyb2FkY29tLmNvbT4KK006CVNjb3R0IEJyYW5kZW4gPHNicmFuZGVuQGJyb2FkY29tLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtYmNtcmluZworCitBUk0vQkNNUklORyBNVEQgTkFORCBEUklWRVIKK006CUxlbyBDaGVuIDxsZW9jaGVuQGJyb2FkY29tLmNvbT4KK006CVNjb3R0IEJyYW5kZW4gPHNicmFuZGVuQGJyb2FkY29tLmNvbT4KK0w6CWxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfbmFuZC5jCitGOglkcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfYmNoLmMKK0Y6CWRyaXZlcnMvbXRkL25hbmQvYmNtX3VtaV9oYW1taW5nLmMKK0Y6CWRyaXZlcnMvbXRkL25hbmQvbmFuZF9iY21fdW1pLmgKKworQVJNL0NJUlJVUyBMT0dJQyBFUDkzWFggQVJNIEFSQ0hJVEVDVFVSRQorTToJSGFydGxleSBTd2VldGVuIDxoc3dlZXRlbkB2aXNpb25lbmdyYXZlcnMuY29tPgorTToJUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtZXA5M3h4LworRjoJYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoLwogCiBBUk0vQ0lSUlVTIExPR0lDIEVEQjkzMTVBIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KQEAgLTY4NSw2ICs3MDUsMTggQEAKIE06CVBoaWxpcHAgWmFiZWwgPHBoaWxpcHAuemFiZWxAZ21haWwuY29tPgogUzoJTWFpbnRhaW5lZAogCitBUk0vTWFydmVsbCBMb2tpL0tpcmt3b29kL01WNzh4eDAvT3Jpb24gU09DIHN1cHBvcnQKK006CUxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQG1hcnZlbGwuY29tPgorTToJTmljb2xhcyBQaXRyZSA8bmljb0BtYXJ2ZWxsLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51ayAoc3Vic2NyaWJlcnMtb25seSkKK1Q6CWdpdCBnaXQ6Ly9naXQubWFydmVsbC5jb20vb3Jpb24KK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtbG9raS8KK0Y6CWFyY2gvYXJtL21hY2gta2lya3dvb2QvCitGOglhcmNoL2FybS9tYWNoLW12Nzh4eDAvCitGOglhcmNoL2FybS9tYWNoLW9yaW9uNXgvCitGOglhcmNoL2FybS9wbGF0LW9yaW9uLworCiBBUk0vTUlPQTcwMSBNQUNISU5FIFNVUFBPUlQKIE06CVJvYmVydCBKYXJ6bWlrIDxyb2JlcnQuamFyem1pa0BmcmVlLmZyPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5hcm0ubGludXgub3JnLnVrIChzdWJzY3JpYmVycy1vbmx5KQpAQCAtODc2LDYgKzkwOCw3IEBACiBNOglCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogTDoJYXRoNWstZGV2ZWxAbGlzdHMuYXRoNWsub3JnCitXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDVrCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvCiAKQEAgLTg4Nyw2ICs5MjAsNyBAQAogTToJU2VudGhpbCBCYWxhc3VicmFtYW5pYW4gPHNlbnRoaWxrdW1hckBhdGhlcm9zLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwogTDoJYXRoOWstZGV2ZWxAbGlzdHMuYXRoOWsub3JnCitXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDlrCiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay8KIApAQCAtMjY2MCwyNSArMjY5NCwyMSBAQAogCiBJTlRFTCBQUk8vV0lSRUxFU1MgMjEwMCBORVRXT1JLIENPTk5FQ1RJT04gU1VQUE9SVAogTToJWmh1IFlpIDx5aS56aHVAaW50ZWwuY29tPgotTToJSmFtZXMgS2V0cmVub3MgPGprZXRyZW5vQGxpbnV4LmludGVsLmNvbT4KIE06CVJlaW5ldHRlIENoYXRyZSA8cmVpbmV0dGUuY2hhdHJlQGludGVsLmNvbT4KK006CUludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCi1MOglpcHcyMTAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9tYWlsbWFuL2xpc3RpbmZvL2lwdzIxMDAtZGV2ZWwKIFc6CWh0dHA6Ly9pcHcyMTAwLnNvdXJjZWZvcmdlLm5ldAotUzoJU3VwcG9ydGVkCitTOglPZGQgRml4ZXMKIEY6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9SRUFETUUuaXB3MjEwMAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLioKIAogSU5URUwgUFJPL1dJUkVMRVNTIDI5MTVBQkcgTkVUV09SSyBDT05ORUNUSU9OIFNVUFBPUlQKIE06CVpodSBZaSA8eWkuemh1QGludGVsLmNvbT4KLU06CUphbWVzIEtldHJlbm9zIDxqa2V0cmVub0BsaW51eC5pbnRlbC5jb20+CiBNOglSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CitNOglJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotTDoJaXB3MjEwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLVc6CWh0dHA6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbWFpbG1hbi9saXN0aW5mby9pcHcyMTAwLWRldmVsCiBXOglodHRwOi8vaXB3MjIwMC5zb3VyY2Vmb3JnZS5uZXQKLVM6CVN1cHBvcnRlZAorUzoJT2RkIEZpeGVzCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLmlwdzIyMDAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC4qCiAKQEAgLTI2OTUsOCArMjcyNSw4IEBACiBJTlRFTCBXSVJFTEVTUyBXSUZJIExJTksgKGl3bHdpZmkpCiBNOglaaHUgWWkgPHlpLnpodUBpbnRlbC5jb20+CiBNOglSZWluZXR0ZSBDaGF0cmUgPHJlaW5ldHRlLmNoYXRyZUBpbnRlbC5jb20+CitNOglJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotTDoJaXB3Mzk0NS1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9pbnRlbGxpbnV4d2lyZWxlc3Mub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2l3bHdpZmkvaXdsd2lmaS0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKQEAgLTI5MjgsNiArMjk1OCw3IEBACiAKIEtFUk5FTCBWSVJUVUFMIE1BQ0hJTkUgKEtWTSkKIE06CUF2aSBLaXZpdHkgPGF2aUByZWRoYXQuY29tPgorTToJTWFyY2VsbyBUb3NhdHRpIDxtdG9zYXR0aUByZWRoYXQuY29tPgogTDoJa3ZtQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2t2bS5xdW1yYW5ldC5jb20KIFM6CVN1cHBvcnRlZApAQCAtMzI3OSw2ICszMzEwLDEyIEBACiBGOglkcml2ZXJzL25ldC9tdjY0M3h4X2V0aC4qCiBGOglpbmNsdWRlL2xpbnV4L212NjQzeHguaAogCitNQVJWRUxMIE1XTDhLIFdJUkVMRVNTIERSSVZFUgorTToJTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+CitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYworCiBNQVJWRUxMIFNPQyBNTUMvU0QvU0RJTyBDT05UUk9MTEVSIERSSVZFUgogTToJTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgogUzoJTWFpbnRhaW5lZApAQCAtMzU5MSw5ICszNjI4LDEyIEBACiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtMi42LmdpdAogUzoJTWFpbnRhaW5lZAorRjoJbmV0L21hYzgwMjExLworRjoJbmV0L3Jma2lsbC8KIEY6CW5ldC93aXJlbGVzcy8KIEY6CWluY2x1ZGUvbmV0L2llZWU4MDIxMSoKIEY6CWluY2x1ZGUvbGludXgvd2lyZWxlc3MuaAorRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvCiAKIE5FVFdPUktJTkcgRFJJVkVSUwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtMzk2OSw2ICs0MDA5LDE0IEBACiBGOglkcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwogRjoJaW5jbHVkZS9saW51eC9wa3RjZHZkLmgKIAorUE1DIFNJRVJSQSBNYXhSQUlEIERSSVZFUgorUDoJQW5pbCBSYXZpbmRyYW5hdGgKK006CWFuaWxfcmF2aW5kcmFuYXRoQHBtYy1zaWVycmEuY29tCitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5wbWMtc2llcnJhLmNvbS8KK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9zY3NpL3BtY3JhaWQuKgorCiBQT1NJWCBDTE9DS1MgYW5kIFRJTUVSUwogTToJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CiBTOglTdXBwb3J0ZWQKQEAgLTQyOTksNyArNDM0Nyw3IEBACiBXOglodHRwOi8vbGludXh3aXJlbGVzcy5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLXRlc3RpbmcuZ2l0CiBTOglNYWludGFpbmVkCi1GOglkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTgqCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODAqCiAKIFJUTDgxODcgV0lSRUxFU1MgRFJJVkVSCiBNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AbWFuZHJpdmEuY29tLmJyPgpAQCAtNDQwNyw3ICs0NDU1LDcgQEAKIEY6CWluY2x1ZGUvc2NzaS9zZy5oCiAKIFNDU0kgU1VCU1lTVEVNCi1NOgkiSmFtZXMgRS5KLiBCb3R0b21sZXkiIDxKYW1lcy5Cb3R0b21sZXlASGFuc2VuUGFydG5lcnNoaXAuY29tPgorTToJIkphbWVzIEUuSi4gQm90dG9tbGV5IiA8SmFtZXMuQm90dG9tbGV5QHN1c2UuZGU+CiBMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qZWpiL3Njc2ktbWlzYy0yLjYuZ2l0CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2plamIvc2NzaS1yYy1maXhlcy0yLjYuZ2l0CkBAIC00NTI2LDkgKzQ1NzQsMTAgQEAKIEY6CWRyaXZlcnMvbmV0L2JlbmV0LwogCiBTRkMgTkVUV09SSyBEUklWRVIKLVA6CVN0ZXZlIEhvZGdzb24KLVA6CUJlbiBIdXRjaGluZ3MKLU06CVJvYmVydCBTdG9uZWhvdXNlIDxsaW51eC1uZXQtZHJpdmVyc0Bzb2xhcmZsYXJlLmNvbT4KK006CVNvbGFyZmxhcmUgbGludXggbWFpbnRhaW5lcnMgPGxpbnV4LW5ldC1kcml2ZXJzQHNvbGFyZmxhcmUuY29tPgorTToJU3RldmUgSG9kZ3NvbiA8c2hvZGdzb25Ac29sYXJmbGFyZS5jb20+CitNOglCZW4gSHV0Y2hpbmdzIDxiaHV0Y2hpbmdzQHNvbGFyZmxhcmUuY29tPgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL25ldC9zZmMvCiAKQEAgLTU1NzgsNiArNTYyNywyNCBAQAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCiAKK1dMMTI1MSBXSVJFTEVTUyBEUklWRVIKK1A6CUthbGxlIFZhbG8KK006CWthbGxlLnZhbG9Abm9raWEuY29tCitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLXRlc3RpbmcuZ2l0CitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvKgorWDoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MSoKKworV0wxMjcxIFdJUkVMRVNTIERSSVZFUgorTToJTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KK0w6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtdGVzdGluZy5naXQKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEqCisKIFdMMzUwMSBXSVJFTEVTUyBQQ01DSUEgQ0FSRCBEUklWRVIKIE06CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBnaG9zdHByb3RvY29scy5uZXQ+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDM2NDFlYzEuLjI2NzczZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtMzIsNiArMzIsOCBAQAogI2RlZmluZQlTT19SQ1ZUSU1FTwkweDEwMTIKICNkZWZpbmUJU09fU05EVElNRU8JMHgxMDEzCiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4JMHgxMDE0CisjZGVmaW5lIFNPX1BST1RPQ09MCTB4MTAyOAorI2RlZmluZSBTT19ET01BSU4JMHgxMDI5CiAKIC8qIGxpbnV4LXNwZWNpZmljLCBtaWdodCBhcyB3ZWxsIGJlIHRoZSBzYW1lIGFzIG9uIGkzODYgKi8KICNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGFlZjYzYzguLmQ3NzhhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtNDYsMTAgKzQ2LDYgQEAKIAlkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAlkZWZhdWx0IHkgaWYgU01QICYmICFMT0NBTF9USU1FUlMKIAotY29uZmlnIE1NVQotCWJvb2wKLQlkZWZhdWx0IHkKLQogY29uZmlnIE5PX0lPUE9SVAogCWJvb2wKIApAQCAtMTI2LDYgKzEyMiwxMyBAQAogY29uZmlnIEFSQ0hfSEFTX0lMT0cyX1U2NAogCWJvb2wKIAorY29uZmlnIEFSQ0hfSEFTX0NQVUZSRVEKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgbm9kZSB0byBzaWduaWZ5IHRoYXQgdGhlIEFSQ0ggaGFzIENQVUZSRVEgc3VwcG9ydAorCSAgYW5kIHRoYXQgdGhlIHJlbGV2YW50IG1lbnUgY29uZmlndXJhdGlvbnMgYXJlIGRpc3BsYXllZCBmb3IKKwkgIGl0LgorCiBjb25maWcgR0VORVJJQ19IV0VJR0hUCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtMTg4LDYgKzE5MSwxMyBAQAogCiBtZW51ICJTeXN0ZW0gVHlwZSIKIAorY29uZmlnIE1NVQorCWJvb2wgIk1NVS1iYXNlZCBQYWdlZCBNZW1vcnkgTWFuYWdlbWVudCBTdXBwb3J0IgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNlbGVjdCBpZiB5b3Ugd2FudCBNTVUtYmFzZWQgdmlydHVhbGlzZWQgYWRkcmVzc2luZyBzcGFjZQorCSAgc3VwcG9ydCBieSBwYWdlZCBtZW1vcnkgbWFuYWdlbWVudC4gSWYgdW5zdXJlLCBzYXkgJ1knLgorCiBjaG9pY2UKIAlwcm9tcHQgIkFSTSBzeXN0ZW0gdHlwZSIKIAlkZWZhdWx0IEFSQ0hfVkVSU0FUSUxFCkBAIC0yMDMsNiArMjEzLDcgQEAKIGNvbmZpZyBBUkNIX0lOVEVHUkFUT1IKIAlib29sICJBUk0gTHRkLiBJbnRlZ3JhdG9yIGZhbWlseSIKIAlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgQVJDSF9IQVNfQ1BVRlJFUQogCXNlbGVjdCBIQVZFX0NMSwogCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJc2VsZWN0IElDU1Q1MjUKQEAgLTIxNyw2ICsyMjgsNyBAQAogCXNlbGVjdCBJQ1NUMzA3CiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIEFSTSBMdGQgUmVhbFZpZXcgYm9hcmRzLgogCkBAIC0yMjksNiArMjQxLDcgQEAKIAlzZWxlY3QgSUNTVDMwNwogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBBUk0gTHRkIFZlcnNhdGlsZSBib2FyZC4KIApAQCAtMzI3LDYgKzM0MCwyMCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBIeW5peCBITVM3MjB4CiAKK2NvbmZpZyBBUkNIX05PTUFESUsKKwlib29sICJTVE1pY3JvZWxlY3Ryb25pY3MgTm9tYWRpayIKKwlzZWxlY3QgQVJNX0FNQkEKKwlzZWxlY3QgQVJNX1ZJQworCXNlbGVjdCBDUFVfQVJNOTI2VAorCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBOb21hZGlrIHBsYXRmb3JtIGJ5IFNULUVyaWNzc29uCisKIGNvbmZpZyBBUkNIX0lPUDEzWFgKIAlib29sICJJT1AxM3h4LWJhc2VkIgogCWRlcGVuZHMgb24gTU1VCkBAIC00OTMsMTAgKzUyMCwxOCBAQAogCXNlbGVjdCBDUFVfQVJNOTI2VAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWhlbHAKLQkJU3VwcG9ydCBmb3IgTnV2b3RvbiAoV2luYm9uZCBsb2dpYyBkZXB0LikgQVJNOSBwcm9jZXNzb3IsWW91Ci0JCWNhbiBsb2dpbiB3d3cubWN1b3MuY29tIG9yIHd3dy5udXZvdG9uLmNvbSB0byBrbm93IG1vcmUuCisJICBTdXBwb3J0IGZvciBOdXZvdG9uIChXaW5ib25kIGxvZ2ljIGRlcHQuKSBBUk05IHByb2Nlc3NvciwKKwkgIEF0IHByZXNlbnQsIHRoZSB3OTB4OTAwIGhhcyBiZWVuIHJlbmFtZWQgbnVjOTAwLCByZWdhcmRpbmcKKwkgIHRoZSBBUk0gc2VyaWVzIHByb2R1Y3QgbGluZSwgeW91IGNhbiBsb2dpbiB0aGUgZm9sbG93aW5nCisJICBsaW5rIGFkZHJlc3MgdG8ga25vdyBtb3JlLgorCisJICA8aHR0cDovL3d3dy5udXZvdG9uLmNvbS9ocS9lbnUvUHJvZHVjdEFuZFNhbGVzL1Byb2R1Y3RMaW5lcy8KKwkJQ29uc3VtZXJFbGVjdHJvbmljc0lDL0FSTU1pY3JvY29udHJvbGxlci9BUk1NaWNyb2NvbnRyb2xsZXI+CiAKIGNvbmZpZyBBUkNIX1BOWDQwMDgKIAlib29sICJQaGlsaXBzIE5leHBlcmlhIFBOWDQwMDggTW9iaWxlIgpAQCAtNTA5LDYgKzU0NCw3IEBACiAJYm9vbCAiUFhBMnh4L1BYQTN4eC1iYXNlZCIKIAlkZXBlbmRzIG9uIE1NVQogCXNlbGVjdCBBUkNIX01URF9YSVAKKwlzZWxlY3QgQVJDSF9IQVNfQ1BVRlJFUQogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKIAlzZWxlY3QgQ09NTU9OX0NMS0RFVgpAQCAtNTUxLDYgKzU4Nyw3IEBACiAJc2VsZWN0IElTQQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKIAlzZWxlY3QgQVJDSF9NVERfWElQCisJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCkBAIC01NjMsNiArNjAwLDcgQEAKIGNvbmZpZyBBUkNIX1MzQzI0MTAKIAlib29sICJTYW1zdW5nIFMzQzI0MTAsIFMzQzI0MTIsIFMzQzI0MTMsIFMzQzI0NDAsIFMzQzI0NDIsIFMzQzI0NDMiCiAJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCiAJc2VsZWN0IEhBVkVfQ0xLCiAJaGVscAogCSAgU2Ftc3VuZyBTM0MyNDEwWCBDUFUgYmFzZWQgc3lzdGVtcywgc3VjaCBhcyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzCkBAIC01NzMsOSArNjExLDE4IEBACiAJYm9vbCAiU2Ftc3VuZyBTM0M2NFhYIgogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQVJDSF9IQVNfQ1BVRlJFUQogCWhlbHAKIAkgIFNhbXN1bmcgUzNDNjRYWCBzZXJpZXMgYmFzZWQgc3lzdGVtcwogCitjb25maWcgQVJDSF9TNVBDMVhYCisJYm9vbCAiU2Ftc3VuZyBTNVBDMVhYIgorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ1BVX1Y3CisJaGVscAorCSAgU2Ftc3VuZyBTNVBDMVhYIHNlcmllcyBiYXNlZCBzeXN0ZW1zCisKIGNvbmZpZyBBUkNIX1NIQVJLCiAJYm9vbCAiU2hhcmsiCiAJc2VsZWN0IENQVV9TQTExMApAQCAtNjMyLDExICs2NzksMjQgQEAKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAloZWxwCiAJICBTdXBwb3J0IGZvciBUSSdzIE9NQVAgcGxhdGZvcm0gKE9NQVAxIGFuZCBPTUFQMikuCiAKK2NvbmZpZyBBUkNIX0JDTVJJTkcKKwlib29sICJCcm9hZGNvbSBCQ01SSU5HIgorCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBBUk1fQU1CQQorCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IEFSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCCisJaGVscAorCSAgU3VwcG9ydCBmb3IgQnJvYWRjb20ncyBCQ01SaW5nIHBsYXRmb3JtLgorCiBlbmRjaG9pY2UKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWciCkBAIC02ODUsNiArNzQ1LDcgQEAKIHNvdXJjZSAiYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWciCiBzb3VyY2UgImFyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZyIKIAogaWYgQVJDSF9TM0MyNDEwCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtczNjMjQwMC9LY29uZmlnIgpAQCAtNzAyLDYgKzc2MywxMCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL3BsYXQtc3RtcDN4eHgvS2NvbmZpZyIKIAoraWYgQVJDSF9TNVBDMVhYCitzb3VyY2UgImFyY2gvYXJtL21hY2gtczVwYzEwMC9LY29uZmlnIgorZW5kaWYKKwogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWg3MjB4L0tjb25maWciCkBAIC03MTYsNiArNzgxLDggQEAKIAogc291cmNlICJhcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbm9tYWRpay9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbmV0eC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbnM5eHh4L0tjb25maWciCkBAIC03MzAsNiArNzk3LDggQEAKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXc5MHg5MDAvS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLWJjbXJpbmcvS2NvbmZpZyIKKwogIyBEZWZpbml0aW9ucyB0byBtYWtlIGxpZmUgZWFzaWVyCiBjb25maWcgQVJDSF9BQ09STgogCWJvb2wKQEAgLTk2MiwxOCArMTAzMSw3IEBACiAJICBhY2NvdW50aW5nIHRvIGJlIHNwcmVhZCBhY3Jvc3MgdGhlIHRpbWVyIGludGVydmFsLCBwcmV2ZW50aW5nIGEKIAkgICJ0aHVuZGVyaW5nIGhlcmQiIGF0IGV2ZXJ5IHRpbWVyIHRpY2suCiAKLWNvbmZpZyBQUkVFTVBUCi0JYm9vbCAiUHJlZW1wdGlibGUgS2VybmVsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgVGhpcyBvcHRpb24gcmVkdWNlcyB0aGUgbGF0ZW5jeSBvZiB0aGUga2VybmVsIHdoZW4gcmVhY3RpbmcgdG8KLQkgIHJlYWwtdGltZSBvciBpbnRlcmFjdGl2ZSBldmVudHMgYnkgYWxsb3dpbmcgYSBsb3cgcHJpb3JpdHkgcHJvY2VzcyB0bwotCSAgYmUgcHJlZW1wdGVkIGV2ZW4gaWYgaXQgaXMgaW4ga2VybmVsIG1vZGUgZXhlY3V0aW5nIGEgc3lzdGVtIGNhbGwuCi0JICBUaGlzIGFsbG93cyBhcHBsaWNhdGlvbnMgdG8gcnVuIG1vcmUgcmVsaWFibHkgZXZlbiB3aGVuIHRoZSBzeXN0ZW0gaXMKLQkgIHVuZGVyIGxvYWQuCi0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYSBkZXNrdG9wLCBlbWJlZGRlZAotCSAgb3IgcmVhbC10aW1lIHN5c3RlbS4gIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgorc291cmNlIGtlcm5lbC9LY29uZmlnLnByZWVtcHQKIAogY29uZmlnIEhaCiAJaW50CkBAIC05ODMsNiArMTA0MSwyMSBAQAogCWRlZmF1bHQgQVQ5MV9USU1FUl9IWiBpZiBBUkNIX0FUOTEKIAlkZWZhdWx0IDEwMAogCitjb25maWcgVEhVTUIyX0tFUk5FTAorCWJvb2wgIkNvbXBpbGUgdGhlIGtlcm5lbCBpbiBUaHVtYi0yIG1vZGUiCisJZGVwZW5kcyBvbiBDUFVfVjcgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEFFQUJJCisJc2VsZWN0IEFSTV9BU01fVU5JRklFRAorCWhlbHAKKwkgIEJ5IGVuYWJsaW5nIHRoaXMgb3B0aW9uLCB0aGUga2VybmVsIHdpbGwgYmUgY29tcGlsZWQgaW4KKwkgIFRodW1iLTIgbW9kZS4gQSBjb21waWxlci9hc3NlbWJsZXIgdGhhdCB1bmRlcnN0YW5kIHRoZSB1bmlmaWVkCisJICBBUk0tVGh1bWIgc3ludGF4IGlzIG5lZWRlZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIEFSTV9BU01fVU5JRklFRAorCWJvb2wKKwogY29uZmlnIEFFQUJJCiAJYm9vbCAiVXNlIHRoZSBBUk0gRUFCSSB0byBjb21waWxlIHRoZSBrZXJuZWwiCiAJaGVscApAQCAtMTA1NCw2ICsxMTI3LDExIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IG4uCiAKK2NvbmZpZyBISUdIUFRFCisJYm9vbCAiQWxsb2NhdGUgMm5kLWxldmVsIHBhZ2V0YWJsZXMgZnJvbSBoaWdobWVtIgorCWRlcGVuZHMgb24gSElHSE1FTQorCWRlcGVuZHMgb24gIU9VVEVSX0NBQ0hFCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKQEAgLTEyNDEsNyArMTMxOSw3IEBACiAKIG1lbnUgIkNQVSBQb3dlciBNYW5hZ2VtZW50IgogCi1pZiAoQVJDSF9TQTExMDAgfHwgQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfT01BUCB8fCBBUkNIX1BYQSB8fCBBUkNIX1MzQzY0WFgpCitpZiBBUkNIX0hBU19DUFVGUkVRCiAKIHNvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWciCiAKQEAgLTEyNzYsNiArMTM1NCw1MiBAQAogCWJvb2wgIkNQVWZyZXEgc3VwcG9ydCBmb3IgU2Ftc3VuZyBTM0M2NFhYIENQVXMiCiAJZGVwZW5kcyBvbiBDUFVfRlJFUSAmJiBDUFVfUzNDNjQxMAogCitjb25maWcgQ1BVX0ZSRVFfUzNDCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gbm9kZSBmb3IgY29tbW9uIGNwdWZyZXEgb24gU2Ftc3VuZyBTb0MKKworY29uZmlnIENQVV9GUkVRX1MzQzI0WFgKKwlib29sICJDUFVmcmVxIGRyaXZlciBmb3IgU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBDUFVzIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIENQVV9GUkVRICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBDUFVfRlJFUV9TM0MKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIENQVWZyZXEgZHJpdmVyIGZvciB0aGUgU2Ftc3VuZyBTM0MyNFhYIGZhbWlseQorCSAgb2YgQ1BVcy4KKworCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXE+LgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKK2NvbmZpZyBDUFVfRlJFUV9TM0MyNFhYX1BMTAorCWJvb2wgIlN1cHBvcnQgQ1BVZnJlcSBjaGFuZ2luZyBvZiBQTEwgZnJlcXVlbmN5IgorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBDb21waWxlIGluIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZSBQTEwgZnJlcXVlbmN5IGZyb20gdGhlCisJICBTM0MyNFhYIHNlcmllcyBDUFVmcmVxIGRyaXZlci4gVGhlIFBMTCB0YWtlcyB0aW1lIHRvIHNldHRsZQorCSAgYWZ0ZXIgYSBmcmVxdWVuY3kgY2hhbmdlLCBzbyBieSBkZWZhdWx0IGl0IGlzIG5vdCBlbmFibGVkLgorCisJICBUaGlzIGFsc28gbWVhbnMgdGhhdCB0aGUgUExMIHRhYmxlcyBmb3IgdGhlIHNlbGVjdGVkIENQVShzKSB3aWxsCisJICBiZSBidWlsdCB3aGljaCBtYXkgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBpbWFnZS4KKworY29uZmlnIENQVV9GUkVRX1MzQzI0WFhfREVCVUcKKwlib29sICJEZWJ1ZyBDUFVmcmVxIFNhbXN1bmcgZHJpdmVyIGNvcmUiCisJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYCisJaGVscAorCSAgRW5hYmxlIHMzY19mcmVxX2RiZyBmb3IgdGhlIFNhbXN1bmcgUzNDIENQVWZyZXEgY29yZQorCitjb25maWcgQ1BVX0ZSRVFfUzNDMjRYWF9JT0RFQlVHCisJYm9vbCAiRGVidWcgQ1BVZnJlcSBTYW1zdW5nIGRyaXZlciBJTyB0aW1pbmciCisJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYCisJaGVscAorCSAgRW5hYmxlIHMzY19mcmVxX2lvZGJnIGZvciB0aGUgU2Ftc3VuZyBTM0MgQ1BVZnJlcSBjb3JlCisKK2NvbmZpZyBDUFVfRlJFUV9TM0MyNFhYX0RFQlVHRlMKKwlib29sICJFeHBvcnQgZGVidWdmcyBmb3IgQ1BVRnJlcSIKKwlkZXBlbmRzIG9uIENQVV9GUkVRX1MzQzI0WFggJiYgREVCVUdfRlMKKwloZWxwCisJICBFeHBvcnQgc3RhdHVzIGluZm9ybWF0aW9uIHZpYSBkZWJ1Z2ZzLgorCiBlbmRpZgogCiBzb3VyY2UgImRyaXZlcnMvY3B1aWRsZS9LY29uZmlnIgpAQCAtMTM3NywxMDcgKzE1MDEsNyBAQAogCiBzb3VyY2UgIm5ldC9LY29uZmlnIgogCi1tZW51ICJEZXZpY2UgRHJpdmVycyIKLQotc291cmNlICJkcml2ZXJzL2Jhc2UvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnIgotCi1pZiBBTElHTk1FTlRfVFJBUCB8fCAhQ1BVX0NQMTVfTU1VCi1zb3VyY2UgImRyaXZlcnMvbXRkL0tjb25maWciCi1lbmRpZgotCi1zb3VyY2UgImRyaXZlcnMvcGFycG9ydC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvcG5wL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9ibG9jay9LY29uZmlnIgotCi0jIG1pc2MgYmVmb3JlIGlkZSAtIEJMS19ERVZfU0dJSU9DNCBkZXBlbmRzIG9uIFNHSV9JT0M0Ci0KLXNvdXJjZSAiZHJpdmVycy9taXNjL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9pZGUvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3Njc2kvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL2F0YS9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvbWQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL21lc3NhZ2UvZnVzaW9uL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvbWVzc2FnZS9pMm8vS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL25ldC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvaXNkbi9LY29uZmlnIgotCi0jIGlucHV0IGJlZm9yZSBjaGFyIC0gY2hhci9qb3lzdGljayBkZXBlbmRzIG9uIGl0LiBBcyBkb2VzIFVTQi4KLQotc291cmNlICJkcml2ZXJzL2lucHV0L0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9jaGFyL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9pMmMvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3NwaS9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvZ3Bpby9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvdzEvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3Bvd2VyL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9od21vbi9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvdGhlcm1hbC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3NzYi9LY29uZmlnIgotCi0jc291cmNlICJkcml2ZXJzL2wzL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9tZmQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL21lZGlhL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy92aWRlby9LY29uZmlnIgotCi1zb3VyY2UgInNvdW5kL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9oaWQvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3VzYi9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvdXdiL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9tbWMvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL21lbXN0aWNrL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9hY2Nlc3NpYmlsaXR5L0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9sZWRzL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9ydGMvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL2RtYS9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvZGNhL0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWciCi0KLXNvdXJjZSAiZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZyIKLQotc291cmNlICJkcml2ZXJzL3Vpby9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9LY29uZmlnIgotCi1lbmRtZW51Citzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKIAogc291cmNlICJmcy9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnLmRlYnVnIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwppbmRleCBhODllNDczLi4xYTZmNzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKQEAgLTgsNiArOCw3IEBACiAjIG4sIGJ1dCB0aGVuIFJNSyB3aWxsIGhhdmUgdG8ga2lsbCB5b3UgOykuCiBjb25maWcgRlJBTUVfUE9JTlRFUgogCWJvb2wKKwlkZXBlbmRzIG9uICFUSFVNQjJfS0VSTkVMCiAJZGVmYXVsdCB5IGlmICFBUk1fVU5XSU5ECiAJaGVscAogCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZSByZXN1bHRpbmcga2VybmVsIHdpbGwgYmUgc2xpZ2h0bHkgc21hbGxlciBhbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggYzg3N2Q2ZC4uNzM1MDU1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTkzLDkgKzkzLDE2IEBACiBDRkxBR1NfQUJJCSs9LWZ1bndpbmQtdGFibGVzCiBlbmRpZgogCitpZmVxICgkKENPTkZJR19USFVNQjJfS0VSTkVMKSx5KQorQUZMQUdTX0FVVE9JVAk6PSQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbWltcGxpY2l0LWl0PXRodW1iLC1XYSQoY29tbWEpLW1hdXRvLWl0KQorQUZMQUdTX05PV0FSTgk6PSQoY2FsbCBhcy1vcHRpb24sLVdhJChjb21tYSktbW5vLXdhcm4tZGVwcmVjYXRlZCwtV2EkKGNvbW1hKS1XKQorQ0ZMQUdTX1RIVU1CMgk6PS1tdGh1bWIgJChBRkxBR1NfQVVUT0lUKSAkKEFGTEFHU19OT1dBUk4pCitBRkxBR1NfVEhVTUIyCTo9JChDRkxBR1NfVEhVTUIyKSAtV2EkKGNvbW1hKS1tdGh1bWIKK2VuZGlmCisKICMgTmVlZCAtVWFybSBmb3IgZ2NjIDwgMy54Ci1LQlVJTERfQ0ZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKGFyY2gteSkgJCh0dW5lLXkpICQoY2FsbCBjYy1vcHRpb24sLW1zaG9ydC1sb2FkLWJ5dGVzLCQoY2FsbCBjYy1vcHRpb24sLW1hbGlnbm1lbnQtdHJhcHMsKSkgLW1zb2Z0LWZsb2F0IC1VYXJtCi1LQlVJTERfQUZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKGFyY2gteSkgJCh0dW5lLXkpIC1tc29mdC1mbG9hdAorS0JVSUxEX0NGTEFHUwkrPSQoQ0ZMQUdTX0FCSSkgJChDRkxBR1NfVEhVTUIyKSAkKGFyY2gteSkgJCh0dW5lLXkpICQoY2FsbCBjYy1vcHRpb24sLW1zaG9ydC1sb2FkLWJ5dGVzLCQoY2FsbCBjYy1vcHRpb24sLW1hbGlnbm1lbnQtdHJhcHMsKSkgLW1zb2Z0LWZsb2F0IC1VYXJtCitLQlVJTERfQUZMQUdTCSs9JChDRkxBR1NfQUJJKSAkKEFGTEFHU19USFVNQjIpICQoYXJjaC15KSAkKHR1bmUteSkgLWluY2x1ZGUgYXNtL3VuaWZpZWQuaCAtbXNvZnQtZmxvYXQKIAogQ0hFQ0tGTEFHUwkrPSAtRF9fYXJtX18KIApAQCAtMTEyLDYgKzExOSw3IEBACiAjIGJ5IENPTkZJR18qIG1hY3JvIG5hbWUuCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQUFFQzIwMDApCQk6PSBhYWVjMjAwMAogbWFjaGluZS0kKENPTkZJR19BUkNIX0FUOTEpCQk6PSBhdDkxCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfQkNNUklORykJCTo9IGJjbXJpbmcKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9DTFBTNzExWCkJCTo9IGNscHM3MTF4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfREFWSU5DSSkJCTo9IGRhdmluY2kKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9FQlNBMTEwKQkJOj0gZWJzYTExMApAQCAtMTM1LDggKzE0MywxMCBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX01WNzhYWDApCQk6PSBtdjc4eHgwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgxKQkJOj0gbXgxCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyKQkJOj0gbXgyCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyNSkJCTo9IG14MjUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDMpCQk6PSBteDMKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9ORVRYKQkJOj0gbmV0eAorbWFjaGluZS0kKENPTkZJR19BUkNIX05PTUFESUspCQk6PSBub21hZGlrCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTlM5WFhYKQkJOj0gbnM5eHh4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDEpCQk6PSBvbWFwMQogbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAyKQkJOj0gb21hcDIKQEAgLTE1MCw2ICsxNjAsNyBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCQk6PSBzM2MyNDEwIHMzYzI0MDAgczNjMjQxMiBzM2MyNDQwIHMzYzI0NDIgczNjMjQ0MwogbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0QTApCQk6PSBzM2MyNGEwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDNjRYWCkJCTo9IHMzYzY0MDAgczNjNjQxMAorbWFjaGluZS0kKENPTkZJR19BUkNIX1M1UEMxWFgpCQk6PSBzNXBjMTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0ExMTAwKQkJOj0gc2ExMTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0hBUkspCQk6PSBzaGFyawogbWFjaGluZS0kKENPTkZJR19BUkNIX1NUTVAzNzhYKQkJOj0gc3RtcDM3OHgKQEAgLTE1OCw2ICsxNjksNyBAQAogbWFjaGluZS0kKENPTkZJR19BUkNIX1ZFUlNBVElMRSkJOj0gdmVyc2F0aWxlCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkJCTo9IHc5MHg5MDAKIG1hY2hpbmUtJChDT05GSUdfRk9PVEJSSURHRSkJCTo9IGZvb3RicmlkZ2UKK21hY2hpbmUtJChDT05GSUdfQVJDSF9NWEM5MTIzMSkJCTo9IG14YzkxMjMxCiAKICMgUGxhdGZvcm0gZGlyZWN0b3J5IG5hbWUuICBUaGlzIGxpc3QgaXMgc29ydGVkIGFscGhhbnVtZXJpY2FsbHkKICMgYnkgQ09ORklHXyogbWFjcm8gbmFtZS4KQEAgLTE2OCw2ICsxODAsNyBAQAogcGxhdC0kKENPTkZJR19QTEFUX1BYQSkJCTo9IHB4YQogcGxhdC0kKENPTkZJR19QTEFUX1MzQzI0WFgpCTo9IHMzYzI0eHggczNjCiBwbGF0LSQoQ09ORklHX1BMQVRfUzNDNjRYWCkJOj0gczNjNjR4eCBzM2MKK3BsYXQtJChDT05GSUdfUExBVF9TNVBDMVhYKQk6PSBzNXBjMXh4IHMzYwogcGxhdC0kKENPTkZJR19BUkNIX1NUTVAzWFhYKQk6PSBzdG1wM3h4eAogCiBpZmVxICgkKENPTkZJR19BUkNIX0VCU0ExMTApLHkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9NYWtlZmlsZQppbmRleCBkYTIyNmFiLi40YTU5MGY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL2Jvb3QvTWFrZWZpbGUKQEAgLTYxLDcgKzYxLDcgQEAKIAogcXVpZXRfY21kX3VpbWFnZSA9IFVJTUFHRSAgJEAKICAgICAgIGNtZF91aW1hZ2UgPSAkKENPTkZJR19TSEVMTCkgJChNS0lNQUdFKSAtQSBhcm0gLU8gbGludXggLVQga2VybmVsIFwKLQkJICAgLUMgbm9uZSAtYSAkKExPQURBRERSKSAtZSAkKExPQURBRERSKSBcCisJCSAgIC1DIG5vbmUgLWEgJChMT0FEQUREUikgLWUgJChTVEFSVEFERFIpIFwKIAkJICAgLW4gJ0xpbnV4LSQoS0VSTkVMUkVMRUFTRSknIC1kICQ8ICRACiAKIGlmZXEgKCQoQ09ORklHX1pCT09UX1JPTSkseSkKQEAgLTcwLDYgKzcwLDEzIEBACiAkKG9iaikvdUltYWdlOiBMT0FEQUREUj0kKFpSRUxBRERSKQogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfVEhVTUIyX0tFUk5FTCkseSkKKyMgU2V0IGJpdCAwIHRvIDEgc28gdGhhdCAibW92IHBjLCByeCIgc3dpdGNoZXMgdG8gVGh1bWItMiBtb2RlCiskKG9iaikvdUltYWdlOiBTVEFSVEFERFI9JChzaGVsbCBlY2hvICQoTE9BREFERFIpIHwgc2VkIC1lICJzLy4kJC8xLyIpCitlbHNlCiskKG9iaikvdUltYWdlOiBTVEFSVEFERFI9JChMT0FEQUREUikKK2VuZGlmCisKICQob2JqKS91SW1hZ2U6CSQob2JqKS96SW1hZ2UgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UpCiAJQGVjaG8gJyAgSW1hZ2UgJEAgaXMgcmVhZHknCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCA0NTE1NzI4Li5mYTZmYmY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTE0MCw3ICsxNDAsOCBAQAogCQl0c3QJcjIsICMzCQkJQCBub3QgdXNlcj8KIAkJYm5lCW5vdF9hbmdlbAogCQltb3YJcjAsICMweDE3CQlAIGFuZ2VsX1NXSXJlYXNvbl9FbnRlclNWQwotCQlzd2kJMHgxMjM0NTYJCUAgYW5nZWxfU1dJX0FSTQorIEFSTSgJCXN3aQkweDEyMzQ1NgkpCUAgYW5nZWxfU1dJX0FSTQorIFRIVU1CKAkJc3ZjCTB4YWIJCSkJQCBhbmdlbF9TV0lfVEhVTUIKIG5vdF9hbmdlbDoKIAkJbXJzCXIyLCBjcHNyCQlAIHR1cm4gb2ZmIGludGVycnVwdHMgdG8KIAkJb3JyCXIyLCByMiwgIzB4YzAJCUAgcHJldmVudCBhbmdlbCBmcm9tIHJ1bm5pbmcKQEAgLTE2MSw3ICsxNjIsOSBAQAogCiAJCS50ZXh0CiAJCWFkcglyMCwgTEMwCi0JCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgaXAsIHNwfQorIEFSTSgJCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgaXAsIHNwfQkpCisgVEhVTUIoCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI0LCByNSwgcjYsIGlwfQkpCisgVEhVTUIoCQlsZHIJc3AsIFtyMCwgIzI4XQkJCQkpCiAJCXN1YnMJcjAsIHIwLCByMQkJQCBjYWxjdWxhdGUgdGhlIGRlbHRhIG9mZnNldAogCiAJCQkJCQlAIGlmIGRlbHRhIGlzIHplcm8sIHdlIGFyZQpAQCAtMjYzLDIyICsyNjYsMjUgQEAKICAqIHI2ICAgICA9IHByb2Nlc3NvciBJRAogICogcjcgICAgID0gYXJjaGl0ZWN0dXJlIElECiAgKiByOCAgICAgPSBhdGFncyBwb2ludGVyCi0gKiByOS1yMTQgPSBjb3JydXB0ZWQKKyAqIHI5LXIxMixyMTQgPSBjb3JydXB0ZWQKICAqLwogCQlhZGQJcjEsIHI1LCByMAkJQCBlbmQgb2YgZGVjb21wcmVzc2VkIGtlcm5lbAogCQlhZHIJcjIsIHJlbG9jX3N0YXJ0CiAJCWxkcglyMywgTEMxCiAJCWFkZAlyMywgcjIsIHIzCi0xOgkJbGRtaWEJcjIhLCB7cjkgLSByMTR9CQlAIGNvcHkgcmVsb2NhdGlvbiBjb2RlCi0JCXN0bWlhCXIxISwge3I5IC0gcjE0fQotCQlsZG1pYQlyMiEsIHtyOSAtIHIxNH0KLQkJc3RtaWEJcjEhLCB7cjkgLSByMTR9CisxOgkJbGRtaWEJcjIhLCB7cjkgLSByMTIsIHIxNH0JQCBjb3B5IHJlbG9jYXRpb24gY29kZQorCQlzdG1pYQlyMSEsIHtyOSAtIHIxMiwgcjE0fQorCQlsZG1pYQlyMiEsIHtyOSAtIHIxMiwgcjE0fQorCQlzdG1pYQlyMSEsIHtyOSAtIHIxMiwgcjE0fQogCQljbXAJcjIsIHIzCiAJCWJsbwkxYgotCQlhZGQJc3AsIHIxLCAjMTI4CQlAIHJlbG9jYXRlIHRoZSBzdGFjaworCQltb3YJc3AsIHIxCisJCWFkZAlzcCwgc3AsICMxMjgJCUAgcmVsb2NhdGUgdGhlIHN0YWNrCiAKIAkJYmwJY2FjaGVfY2xlYW5fZmx1c2gKLQkJYWRkCXBjLCByNSwgcjAJCUAgY2FsbCByZWxvY2F0aW9uIGNvZGUKKyBBUk0oCQlhZGQJcGMsIHI1LCByMAkJKSBAIGNhbGwgcmVsb2NhdGlvbiBjb2RlCisgVEhVTUIoCQlhZGQJcjEyLCByNSwgcjAJCSkKKyBUSFVNQigJCW1vdglwYywgcjEyCQkJKSBAIGNhbGwgcmVsb2NhdGlvbiBjb2RlCiAKIC8qCiAgKiBXZSdyZSBub3QgaW4gZGFuZ2VyIG9mIG92ZXJ3cml0aW5nIG91cnNlbHZlcy4gIERvIHRoaXMgdGhlIHNpbXBsZSB3YXkuCkBAIC0yOTEsNiArMjk3LDcgQEAKIAkJYmwJZGVjb21wcmVzc19rZXJuZWwKIAkJYgljYWxsX2tlcm5lbAogCisJCS5hbGlnbgkyCiAJCS50eXBlCUxDMCwgI29iamVjdAogTEMwOgkJLndvcmQJTEMwCQkJQCByMQogCQkud29yZAlfX2Jzc19zdGFydAkJQCByMgpAQCAtNDMxLDYgKzQzOCw3IEBACiAKIF9fYXJtdjRfbW11X2NhY2hlX29uOgogCQltb3YJcjEyLCBscgorI2lmZGVmIENPTkZJR19NTVUKIAkJYmwJX19zZXR1cF9tbXUKIAkJbW92CXIwLCAjMAogCQltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAlAIGRyYWluIHdyaXRlIGJ1ZmZlcgpAQCAtNDQ0LDEwICs0NTIsMTIgQEAKIAkJYmwJX19jb21tb25fbW11X2NhY2hlX29uCiAJCW1vdglyMCwgIzAKIAkJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGZsdXNoIEksRCBUTEJzCisjZW5kaWYKIAkJbW92CXBjLCByMTIKIAogX19hcm12N19tbXVfY2FjaGVfb246CiAJCW1vdglyMTIsIGxyCisjaWZkZWYgQ09ORklHX01NVQogCQltcmMJcDE1LCAwLCByMTEsIGMwLCBjMSwgNAlAIHJlYWQgSURfTU1GUjAKIAkJdHN0CXIxMSwgIzB4ZgkJQCBWTVNBCiAJCWJsbmUJX19zZXR1cF9tbXUKQEAgLTQ1NSw5ICs0NjUsMTEgQEAKIAkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkcmFpbiB3cml0ZSBidWZmZXIKIAkJdHN0CXIxMSwgIzB4ZgkJQCBWTVNBCiAJCW1jcm5lCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGZsdXNoIEksRCBUTEJzCisjZW5kaWYKIAkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKIAkJb3JyCXIwLCByMCwgIzB4NTAwMAkJQCBJLWNhY2hlIGVuYWJsZSwgUlIgY2FjaGUgcmVwbGFjZW1lbnQKIAkJb3JyCXIwLCByMCwgIzB4MDAzYwkJQCB3cml0ZSBidWZmZXIKKyNpZmRlZiBDT05GSUdfTU1VCiAjaWZkZWYgQ09ORklHX0NQVV9FTkRJQU5fQkU4CiAJCW9ycglyMCwgcjAsICMxIDw8IDI1CUAgYmlnLWVuZGlhbiBwYWdlIHRhYmxlcwogI2VuZGlmCkBAIC00NjUsNiArNDc3LDcgQEAKIAkJbW92bmUJcjEsICMtMQogCQltY3JuZQlwMTUsIDAsIHIzLCBjMiwgYzAsIDAJQCBsb2FkIHBhZ2UgdGFibGUgcG9pbnRlcgogCQltY3JuZQlwMTUsIDAsIHIxLCBjMywgYzAsIDAJQCBsb2FkIGRvbWFpbiBhY2Nlc3MgY29udHJvbAorI2VuZGlmCiAJCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJQCBsb2FkIGNvbnRyb2wgcmVnaXN0ZXIKIAkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIGFuZCByZWFkIGl0IGJhY2sKIAkJbW92CXIwLCAjMApAQCAtNDk4LDYgKzUxMSw3IEBACiAJCW1vdglwYywgcjEyCiAKIF9fY29tbW9uX21tdV9jYWNoZV9vbjoKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKICNpZm5kZWYgREVCVUcKIAkJb3JyCXIwLCByMCwgIzB4MDAwZAkJQCBXcml0ZSBidWZmZXIsIG1tdQogI2VuZGlmCkBAIC01MDksNiArNTIzLDcgQEAKIDE6CQltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgbG9hZCBjb250cm9sIHJlZ2lzdGVyCiAJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJQCBhbmQgcmVhZCBpdCBiYWNrIHRvCiAJCXN1YglwYywgbHIsIHIwLCBsc3IgIzMyCUAgcHJvcGVybHkgZmx1c2ggcGlwZWxpbmUKKyNlbmRpZgogCiAvKgogICogQWxsIGNvZGUgZm9sbG93aW5nIHRoaXMgbGluZSBpcyByZWxvY2F0YWJsZS4gIEl0IGlzIHJlbG9jYXRlZCBieQpAQCAtNTIyLDcgKzUzNyw3IEBACiAgKiByNiAgICAgPSBwcm9jZXNzb3IgSUQKICAqIHI3ICAgICA9IGFyY2hpdGVjdHVyZSBJRAogICogcjggICAgID0gYXRhZ3MgcG9pbnRlcgotICogcjktcjE0ID0gY29ycnVwdGVkCisgKiByOS1yMTIscjE0ID0gY29ycnVwdGVkCiAgKi8KIAkJLmFsaWduCTUKIHJlbG9jX3N0YXJ0OglhZGQJcjksIHI1LCByMApAQCAtNTMxLDEzICs1NDYsMTQgQEAKIAkJbW92CXIxLCByNAogMToKIAkJLnJlcHQJNAotCQlsZG1pYQlyNSEsIHtyMCwgcjIsIHIzLCByMTAgLSByMTR9CUAgcmVsb2NhdGUga2VybmVsCi0JCXN0bWlhCXIxISwge3IwLCByMiwgcjMsIHIxMCAtIHIxNH0KKwkJbGRtaWEJcjUhLCB7cjAsIHIyLCByMywgcjEwIC0gcjEyLCByMTR9CUAgcmVsb2NhdGUga2VybmVsCisJCXN0bWlhCXIxISwge3IwLCByMiwgcjMsIHIxMCAtIHIxMiwgcjE0fQogCQkuZW5kcgogCiAJCWNtcAlyNSwgcjkKIAkJYmxvCTFiCi0JCWFkZAlzcCwgcjEsICMxMjgJCUAgcmVsb2NhdGUgdGhlIHN0YWNrCisJCW1vdglzcCwgcjEKKwkJYWRkCXNwLCBzcCwgIzEyOAkJQCByZWxvY2F0ZSB0aGUgc3RhY2sKIAkJZGVidWdfcmVsb2NfZW5kCiAKIGNhbGxfa2VybmVsOglibAljYWNoZV9jbGVhbl9mbHVzaApAQCAtNTcxLDcgKzU4Nyw5IEBACiAJCWxkcglyMiwgW3IxMiwgIzRdCQlAIGdldCBtYXNrCiAJCWVvcglyMSwgcjEsIHI2CQlAIChyZWFsIF4gbWF0Y2gpCiAJCXRzdAlyMSwgcjIJCQlAICAgICAgICYgbWFzawotCQlhZGRlcQlwYywgcjEyLCByMwkJQCBjYWxsIGNhY2hlIGZ1bmN0aW9uCisgQVJNKAkJYWRkZXEJcGMsIHIxMiwgcjMJCSkgQCBjYWxsIGNhY2hlIGZ1bmN0aW9uCisgVEhVTUIoCQlhZGRlcQlyMTIsIHIzCQkJKQorIFRIVU1CKAkJbW92ZXEJcGMsIHIxMgkJCSkgQCBjYWxsIGNhY2hlIGZ1bmN0aW9uCiAJCWFkZAlyMTIsIHIxMiwgIzQqNQogCQliCTFiCiAKQEAgLTU4OSwxMyArNjA3LDE1IEBACiAgKiBtZXRob2RzLiAgV3JpdGViYWNrIGNhY2hlcyBfbXVzdF8gaGF2ZSB0aGUgZmx1c2ggbWV0aG9kCiAgKiBkZWZpbmVkLgogICovCisJCS5hbGlnbgkyCiAJCS50eXBlCXByb2NfdHlwZXMsI29iamVjdAogcHJvY190eXBlczoKIAkJLndvcmQJMHg0MTU2MDYwMAkJQCBBUk02LzYxMAogCQkud29yZAkweGZmZmZmZmUwCi0JCWIJX19hcm02X21tdV9jYWNoZV9vZmYJQCB3b3JrcywgYnV0IHNsb3cKLQkJYglfX2FybTZfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtNl9tbXVfY2FjaGVfb2ZmCUAgd29ya3MsIGJ1dCBzbG93CisJCVcoYikJX19hcm02X21tdV9jYWNoZV9vZmYKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIEAJCWIJX19hcm02X21tdV9jYWNoZV9vbgkJQCB1bnRlc3RlZAogQAkJYglfX2FybTZfbW11X2NhY2hlX29mZgogQAkJYglfX2FybXYzX21tdV9jYWNoZV9mbHVzaApAQCAtNjAzLDc2ICs2MjMsODQgQEAKIAkJLndvcmQJMHgwMDAwMDAwMAkJQCBvbGQgQVJNIElECiAJCS53b3JkCTB4MDAwMGYwMDAKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAogCQkud29yZAkweDQxMDA3MDAwCQlAIEFSTTcvNzEwCiAJCS53b3JkCTB4ZmZmOGZlMDAKLQkJYglfX2FybTdfbW11X2NhY2hlX29mZgotCQliCV9fYXJtN19tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm03X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybTdfbW11X2NhY2hlX29mZgogCQltb3YJcGMsIGxyCisgVEhVTUIoCQlub3AJCQkJKQogCiAJCS53b3JkCTB4NDE4MDcyMDAJCUAgQVJNNzIwVCAod3JpdGV0aHJvdWdoKQogCQkud29yZAkweGZmZmZmZjAwCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb24KLQkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgogCQltb3YJcGMsIGxyCisgVEhVTUIoCQlub3AJCQkJKQogCiAJCS53b3JkCTB4NDEwMDc0MDAJCUAgQVJNNzR4CiAJCS53b3JkCTB4ZmYwMGZmMDAKLQkJYglfX2FybXYzX21wdV9jYWNoZV9vbgotCQliCV9fYXJtdjNfbXB1X2NhY2hlX29mZgotCQliCV9fYXJtdjNfbXB1X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12M19tcHVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXYzX21wdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXYzX21wdV9jYWNoZV9mbHVzaAogCQkKIAkJLndvcmQJMHg0MTAwOTQwMAkJQCBBUk05NHgKIAkJLndvcmQJMHhmZjAwZmYwMAotCQliCV9fYXJtdjRfbXB1X2NhY2hlX29uCi0JCWIJX19hcm12NF9tcHVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tcHVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21wdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbXB1X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbXB1X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHgwMDAwNzAwMAkJQCBBUk03IElEcwogCQkud29yZAkweDAwMDBmMDAwCiAJCW1vdglwYywgbHIKKyBUSFVNQigJCW5vcAkJCQkpCiAJCW1vdglwYywgbHIKKyBUSFVNQigJCW5vcAkJCQkpCiAJCW1vdglwYywgbHIKKyBUSFVNQigJCW5vcAkJCQkpCiAKIAkJQCBFdmVyeXRoaW5nIGZyb20gaGVyZSBvbiB3aWxsIGJlIHRoZSBuZXcgSUQgc3lzdGVtLgogCiAJCS53b3JkCTB4NDQwMWExMDAJCUAgc2ExMTAgLyBzYTExMDAKIAkJLndvcmQJMHhmZmZmZmZlMAotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg2OTAxYjExMAkJQCBzYTExMTAKIAkJLndvcmQJMHhmZmZmZmZmMAotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjA1NjkzMAogCQkud29yZAkweGZmMGZmZmYwCQlAIFBYQTkzNQotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjE1ODAwMAkJQCBQWEExNjgKIAkJLndvcmQJMHhmZmZmZjAwMAotCQliIF9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIgX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIgX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjA1NjkzMAogCQkud29yZAkweGZmMGZmZmYwCQlAIFBYQTkzNQotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHg1NjA1MDAwMAkJQCBGZXJvY2VvbgogCQkud29yZAkweGZmMGYwMDAwCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb24KLQkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKLQkJYglfX2FybXY1dGVqX21tdV9jYWNoZV9mbHVzaAorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm12NXRlal9tbXVfY2FjaGVfZmx1c2gKIAogI2lmZGVmIENPTkZJR19DUFVfRkVST0NFT05fT0xEX0lECiAJCS8qIHRoaXMgY29uZmxpY3RzIHdpdGggdGhlIHN0YW5kYXJkIEFSTXY1VEUgZW50cnkgKi8KQEAgLTY4NSw0NyArNzEzLDUwIEBACiAKIAkJLndvcmQJMHg2NjAxNTI2MQkJQCBGQTUyNgogCQkud29yZAkweGZmMDFmZmYxCi0JCWIJX19mYTUyNl9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fZmE1MjZfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2ZhNTI2X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19mYTUyNl9jYWNoZV9mbHVzaAogCiAJCUAgVGhlc2UgbWF0Y2ggb24gdGhlIGFyY2hpdGVjdHVyZSBJRAogCiAJCS53b3JkCTB4MDAwMjAwMDAJCUAgQVJNdjRUCiAJCS53b3JkCTB4MDAwZjAwMDAKLQkJYglfX2FybXY0X21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjRfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCiAJCS53b3JkCTB4MDAwNTAwMDAJCUAgQVJNdjVURQogCQkud29yZAkweDAwMGYwMDAwCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb24KLQkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKLQkJYglfX2FybXY0X21tdV9jYWNoZV9mbHVzaAorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29uCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKIAogCQkud29yZAkweDAwMDYwMDAwCQlAIEFSTXY1VEVKCiAJCS53b3JkCTB4MDAwZjAwMDAKLQkJYglfX2FybXY0X21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12NF9tbXVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCiAJCS53b3JkCTB4MDAwN2IwMDAJCUAgQVJNdjYKIAkJLndvcmQJMHgwMDBmZjAwMAotCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCi0JCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCi0JCWIJX19hcm12Nl9tbXVfY2FjaGVfZmx1c2gKKwkJVyhiKQlfX2FybXY0X21tdV9jYWNoZV9vbgorCQlXKGIpCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQlXKGIpCV9fYXJtdjZfbW11X2NhY2hlX2ZsdXNoCiAKIAkJLndvcmQJMHgwMDBmMDAwMAkJQCBuZXcgQ1BVIElkCiAJCS53b3JkCTB4MDAwZjAwMDAKLQkJYglfX2FybXY3X21tdV9jYWNoZV9vbgotCQliCV9fYXJtdjdfbW11X2NhY2hlX29mZgotCQliCV9fYXJtdjdfbW11X2NhY2hlX2ZsdXNoCisJCVcoYikJX19hcm12N19tbXVfY2FjaGVfb24KKwkJVyhiKQlfX2FybXY3X21tdV9jYWNoZV9vZmYKKwkJVyhiKQlfX2FybXY3X21tdV9jYWNoZV9mbHVzaAogCiAJCS53b3JkCTAJCQlAIHVucmVjb2duaXNlZCB0eXBlCiAJCS53b3JkCTAKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAkJbW92CXBjLCBscgorIFRIVU1CKAkJbm9wCQkJCSkKIAogCQkuc2l6ZQlwcm9jX3R5cGVzLCAuIC0gcHJvY190eXBlcwogCkBAIC03NjAsMjIgKzc5MSwzMCBAQAogCQltb3YJcGMsIGxyCiAKIF9fYXJtdjRfbW11X2NhY2hlX29mZjoKKyNpZmRlZiBDT05GSUdfTU1VCiAJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAKIAkJYmljCXIwLCByMCwgIzB4MDAwZAogCQltY3IJcDE1LCAwLCByMCwgYzEsIGMwCUAgdHVybiBNTVUgYW5kIGNhY2hlIG9mZgogCQltb3YJcjAsICMwCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzcJQCBpbnZhbGlkYXRlIHdob2xlIGNhY2hlIHY0CiAJCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJQCBpbnZhbGlkYXRlIHdob2xlIFRMQiB2NAorI2VuZGlmCiAJCW1vdglwYywgbHIKIAogX19hcm12N19tbXVfY2FjaGVfb2ZmOgogCQltcmMJcDE1LCAwLCByMCwgYzEsIGMwCisjaWZkZWYgQ09ORklHX01NVQogCQliaWMJcjAsIHIwLCAjMHgwMDBkCisjZWxzZQorCQliaWMJcjAsIHIwLCAjMHgwMDBjCisjZW5kaWYKIAkJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMAlAIHR1cm4gTU1VIGFuZCBjYWNoZSBvZmYKIAkJbW92CXIxMiwgbHIKIAkJYmwJX19hcm12N19tbXVfY2FjaGVfZmx1c2gKIAkJbW92CXIwLCAjMAorI2lmZGVmIENPTkZJR19NTVUKIAkJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGludmFsaWRhdGUgd2hvbGUgVExCCisjZW5kaWYKIAkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNglAIGludmFsaWRhdGUgQlRDCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CUAgRFNCCiAJCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDQJQCBJU0IKQEAgLTg1Miw3ICs4OTEsNyBAQAogCQliCWlmbHVzaAogaGllcmFyY2hpY2FsOgogCQltY3IJcDE1LCAwLCByMTAsIGM3LCBjMTAsIDUJQCBETUIKLQkJc3RtZmQJc3AhLCB7cjAtcjUsIHI3LCByOSwgcjExfQorCQlzdG1mZAlzcCEsIHtyMC1yNywgcjktcjExfQogCQltcmMJcDE1LCAxLCByMCwgYzAsIGMwLCAxCUAgcmVhZCBjbGlkcgogCQlhbmRzCXIzLCByMCwgIzB4NzAwMDAwMAlAIGV4dHJhY3QgbG9jIGZyb20gY2xpZHIKIAkJbW92CXIzLCByMywgbHNyICMyMwkJQCBsZWZ0IGFsaWduIGxvYyBiaXQgZmllbGQKQEAgLTg3Nyw4ICs5MTYsMTIgQEAKIGxvb3AyOgogCQltb3YJcjksIHI0CQkJQCBjcmVhdGUgd29ya2luZyBjb3B5IG9mIG1heCB3YXkgc2l6ZQogbG9vcDM6Ci0JCW9ycglyMTEsIHIxMCwgcjksIGxzbCByNQlAIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlciBpbnRvIHIxMQotCQlvcnIJcjExLCByMTEsIHI3LCBsc2wgcjIJQCBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExCisgQVJNKAkJb3JyCXIxMSwgcjEwLCByOSwgbHNsIHI1CSkgQCBmYWN0b3Igd2F5IGFuZCBjYWNoZSBudW1iZXIgaW50byByMTEKKyBBUk0oCQlvcnIJcjExLCByMTEsIHI3LCBsc2wgcjIJKSBAIGZhY3RvciBpbmRleCBudW1iZXIgaW50byByMTEKKyBUSFVNQigJCWxzbAlyNiwgcjksIHI1CQkpCisgVEhVTUIoCQlvcnIJcjExLCByMTAsIHI2CQkpIEAgZmFjdG9yIHdheSBhbmQgY2FjaGUgbnVtYmVyIGludG8gcjExCisgVEhVTUIoCQlsc2wJcjYsIHI3LCByMgkJKQorIFRIVU1CKAkJb3JyCXIxMSwgcjExLCByNgkJKSBAIGZhY3RvciBpbmRleCBudW1iZXIgaW50byByMTEKIAkJbWNyCXAxNSwgMCwgcjExLCBjNywgYzE0LCAyCUAgY2xlYW4gJiBpbnZhbGlkYXRlIGJ5IHNldC93YXkKIAkJc3VicwlyOSwgcjksICMxCQlAIGRlY3JlbWVudCB0aGUgd2F5CiAJCWJnZQlsb29wMwpAQCAtODg5LDcgKzkzMiw3IEBACiAJCWNtcAlyMywgcjEwCiAJCWJndAlsb29wMQogZmluaXNoZWQ6Ci0JCWxkbWZkCXNwISwge3IwLXI1LCByNywgcjksIHIxMX0KKwkJbGRtZmQJc3AhLCB7cjAtcjcsIHI5LXIxMX0KIAkJbW92CXIxMCwgIzAJCQlAIHN3aXRoIGJhY2sgdG8gY2FjaGUgbGV2ZWwgMAogCQltY3IJcDE1LCAyLCByMTAsIGMwLCBjMCwgMAlAIHNlbGVjdCBjdXJyZW50IGNhY2hlIGxldmVsIGluIGNzc3IKIGlmbHVzaDoKQEAgLTkyMyw5ICs5NjYsMTMgQEAKIAkJbW92CXIxMSwgIzgKIAkJbW92CXIxMSwgcjExLCBsc2wgcjMJQCBjYWNoZSBsaW5lIHNpemUgaW4gYnl0ZXMKIG5vX2NhY2hlX2lkOgotCQliaWMJcjEsIHBjLCAjNjMJCUAgYWxpZ24gdG8gbG9uZ2VzdCBjYWNoZSBsaW5lCisJCW1vdglyMSwgcGMKKwkJYmljCXIxLCByMSwgIzYzCQlAIGFsaWduIHRvIGxvbmdlc3QgY2FjaGUgbGluZQogCQlhZGQJcjIsIHIxLCByMgotMToJCWxkcglyMywgW3IxXSwgcjExCQlAIHMvdyBmbHVzaCBEIGNhY2hlCisxOgorIEFSTSgJCWxkcglyMywgW3IxXSwgcjExCQkpIEAgcy93IGZsdXNoIEQgY2FjaGUKKyBUSFVNQigJCWxkciAgICAgcjMsIFtyMV0JCSkgQCBzL3cgZmx1c2ggRCBjYWNoZQorIFRIVU1CKAkJYWRkICAgICByMSwgcjEsIHIxMQkJKQogCQl0ZXEJcjEsIHIyCiAJCWJuZQkxYgogCkBAIC05NDUsNiArOTkyLDcgQEAKICAqIG1lbW9yeSwgd2hpY2ggYWdhaW4gbXVzdCBiZSByZWxvY2F0YWJsZS4KICAqLwogI2lmZGVmIERFQlVHCisJCS5hbGlnbgkyCiAJCS50eXBlCXBoZXhidWYsI29iamVjdAogcGhleGJ1ZjoJLnNwYWNlCTEyCiAJCS5zaXplCXBoZXhidWYsIC4gLSBwaGV4YnVmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vdmljLmMgYi9hcmNoL2FybS9jb21tb24vdmljLmMKaW5kZXggNmVkODk4My4uOTIwY2VkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwpAQCAtMjIsMTAgKzIyLDIwIEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KIAorc3RhdGljIHZvaWQgdmljX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWlycSAmPSAzMTsKKwl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJLyogbW9yZW92ZXIsIGNsZWFyIHRoZSBzb2Z0LXRyaWdnZXJlZCwgaW4gY2FzZSBpdCB3YXMgdGhlIHJlYXNvbiAqLworCXdyaXRlbCgxIDw8IGlycSwgYmFzZSArIFZJQ19JTlRfU09GVF9DTEVBUik7Cit9CisKIHN0YXRpYyB2b2lkIHZpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CkBAIC0yNTMsMTIgKzI2MywxNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHZpY19jaGlwID0gewogCS5uYW1lCT0gIlZJQyIsCi0JLmFjawk9IHZpY19tYXNrX2lycSwKKwkuYWNrCT0gdmljX2Fja19pcnEsCiAJLm1hc2sJPSB2aWNfbWFza19pcnEsCiAJLnVubWFzawk9IHZpY191bm1hc2tfaXJxLAogCS5zZXRfd2FrZSA9IHZpY19zZXRfd2FrZSwKIH07CiAKKy8qIFRoZSBQTDE5MCBjZWxsIGZyb20gQVJNIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IFNULCBzbyBoYW5kbGUgYm90aCBoZXJlICovCitzdGF0aWMgdm9pZCB2aWtfaW5pdF9zdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCisJCQkgdTMyIHZpY19zb3VyY2VzKTsKKwogLyoqCiAgKiB2aWNfaW5pdCAtIGluaXRpYWxpc2UgYSB2ZWN0b3JlZCBpbnRlcnJ1cHQgY29udHJvbGxlcgogICogQGJhc2U6IGlvbWVtIGJhc2UgYWRkcmVzcwpAQCAtMjcwLDYgKzI4NCwyOCBAQAogCQkgICAgIHUzMiB2aWNfc291cmNlcywgdTMyIHJlc3VtZV9zb3VyY2VzKQogewogCXVuc2lnbmVkIGludCBpOworCXUzMiBjZWxsaWQgPSAwOworCWVudW0gYW1iYV92ZW5kb3IgdmVuZG9yOworCisJLyogSWRlbnRpZnkgd2hpY2ggVklDIGNlbGwgdGhpcyBvbmUgaXMsIGJ5IHJlYWRpbmcgdGhlIElEICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQl1MzIgYWRkciA9ICgodTMyKWJhc2UgJiBQQUdFX01BU0spICsgMHhmZTAgKyAoaSAqIDQpOworCQljZWxsaWQgfD0gKHJlYWRsKGFkZHIpICYgMHhmZikgPDwgKDggKiBpKTsKKwl9CisJdmVuZG9yID0gKGNlbGxpZCA+PiAxMikgJiAweGZmOworCXByaW50ayhLRVJOX0lORk8gIlZJQyBAJXA6IGlkIDB4JTA4eCwgdmVuZG9yIDB4JTAyeFxuIiwKKwkgICAgICAgYmFzZSwgY2VsbGlkLCB2ZW5kb3IpOworCisJc3dpdGNoKHZlbmRvcikgeworCWNhc2UgQU1CQV9WRU5ET1JfU1Q6CisJCXZpa19pbml0X3N0KGJhc2UsIGlycV9zdGFydCwgdmljX3NvdXJjZXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVklDOiB1bmtub3duIHZlbmRvciwgY29udGludWluZyBhbnl3YXlzXG4iKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBBTUJBX1ZFTkRPUl9BUk06CisJCWJyZWFrOworCX0KIAogCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgaW5pdGlhbGx5LiAqLwogCkBAIC0zMDYsMyArMzQyLDYwIEBACiAKIAl2aWNfcG1fcmVnaXN0ZXIoYmFzZSwgaXJxX3N0YXJ0LCByZXN1bWVfc291cmNlcyk7CiB9CisKKy8qCisgKiBUaGUgUEwxOTAgY2VsbCBmcm9tIEFSTSBoYXMgYmVlbiBtb2RpZmllZCBieSBTVCB0byBoYW5kbGUgNjQgaW50ZXJydXB0cy4KKyAqIFRoZSBvcmlnaW5hbCBjZWxsIGhhcyAzMiBpbnRlcnJ1cHRzLCB3aGlsZSB0aGUgbW9kaWZpZWQgb25lIGhhcyA2NCwKKyAqIHJlcGxvY2F0aW5nIHR3byBibG9ja3MgMHgwMC4uMHgxZiBpbiAweDIwLi4weDNmLiBJbiB0aGF0IGNhc2UKKyAqIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBjYWxsZWQgdHdpY2UsIHdpdGggYmFzZSBzZXQgdG8gb2Zmc2V0IDAwMAorICogIGFuZCAwMjAgd2l0aGluIHRoZSBwYWdlLiBXZSBjYWxsIHRoaXMgInNlY29uZCBibG9jayIuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB2aWtfaW5pdF9zdCh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBpcnFfc3RhcnQsCisJCQkJdTMyIHZpY19zb3VyY2VzKQoreworCXVuc2lnbmVkIGludCBpOworCWludCB2aWNfMm5kX2Jsb2NrID0gKCh1bnNpZ25lZCBsb25nKWJhc2UgJiB+UEFHRV9NQVNLKSAhPSAwOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbml0aWFsbHkuICovCisKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfU0VMRUNUKTsKKwl3cml0ZWwoMCwgYmFzZSArIFZJQ19JTlRfRU5BQkxFKTsKKwl3cml0ZWwofjAsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRV9DTEVBUik7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVJRX1NUQVRVUyk7CisJd3JpdGVsKDAsIGJhc2UgKyBWSUNfSVRDUik7CisJd3JpdGVsKH4wLCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKKworCS8qCisJICogTWFrZSBzdXJlIHdlIGNsZWFyIGFsbCBleGlzdGluZyBpbnRlcnJ1cHRzLiBUaGUgdmVjdG9yIHJlZ2lzdGVycworCSAqIGluIHRoaXMgY2VsbCBhcmUgYWZ0ZXIgdGhlIHNlY29uZCBibG9jayBvZiBnZW5lcmFsIHJlZ2lzdGVycywKKwkgKiBzbyB3ZSBjYW4gYWRkcmVzcyB0aGVtIHVzaW5nIHN0YW5kYXJkIG9mZnNldHMsIGJ1dCBvbmx5IGZyb20KKwkgKiB0aGUgc2Vjb25kIGJhc2UgYWRkcmVzcywgd2hpY2ggaXMgMHgyMCBpbiB0aGUgcGFnZQorCSAqLworCWlmICh2aWNfMm5kX2Jsb2NrKSB7CisJCXdyaXRlbCgwLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CisJCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkJCXZhbHVlID0gcmVhZGwoYmFzZSArIFZJQ19QTDE5MF9WRUNUX0FERFIpOworCQkJd3JpdGVsKHZhbHVlLCBiYXNlICsgVklDX1BMMTkwX1ZFQ1RfQUREUik7CisJCX0KKwkJLyogU1QgaGFzIDE2IHZlY3RvcnMgYXMgd2VsbCwgYnV0IHdlIGRvbid0IGVuYWJsZSB0aGVtIGJ5IG5vdyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJdm9pZCBfX2lvbWVtICpyZWcgPSBiYXNlICsgVklDX1ZFQ1RfQ05UTDAgKyAoaSAqIDQpOworCQkJd3JpdGVsKDAsIHJlZyk7CisJCX0KKworCQl3cml0ZWwoMzIsIGJhc2UgKyBWSUNfUEwxOTBfREVGX1ZFQ1RfQUREUik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaWYgKHZpY19zb3VyY2VzICYgKDEgPDwgaSkpIHsKKwkJCXVuc2lnbmVkIGludCBpcnEgPSBpcnFfc3RhcnQgKyBpOworCisJCQlzZXRfaXJxX2NoaXAoaXJxLCAmdmljX2NoaXApOworCQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBiYXNlKTsKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmNtcmluZ19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYzBiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2JjbXJpbmdfZGVmY29uZmlnCkBAIC0wLDAgKzEsNzI1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCisjIEZyaSBKdWwgMTcgMTI6MDc6MjggMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKKyMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR05BTEZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSRkQgaXMgbm90IHNldAorIyBDT05GSUdfRVZFTlRGRCBpcyBub3Qgc2V0CitDT05GSUdfU0hNRU09eQorIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0JDTVJJTkc9eQorIyBDT05GSUdfQVJDSF9GUEdBMTExMDcgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQkNNMTExMDc9eQorCisjCisjIEJDTVJJTkcgT3B0aW9ucworIworQ09ORklHX0JDTV9aUkVMQUREUj0weDgwMDAKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1Y2PXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV8zMnY2PXkKK0NPTkZJR19DUFVfQUJSVF9FVjY9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y2PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwIGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0FSTV9BTUJBPXkKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDBlMDAwMDAwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDBlYTAwMDAwCitDT05GSUdfWkJPT1RfUk9NPXkKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CisjIENPTkZJR19NVERfQ0ZJX0kyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorQ09ORklHX01URF9OQU5EX0JDTV9VTUk9eQorQ09ORklHX01URF9OQU5EX0JDTV9VTUlfSFdDUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKKyMgQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfQU1CQV9QTDAxMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTE9eQorQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD02NAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GSUxFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKK0NPTkZJR19KRkZTMl9GU19YQVRUUj15CitDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfSEVBREVSU19DSEVDSz15CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JVSUxEX0RPQ1NSQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19BUk1fVU5XSU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHU5MjYwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZTdmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OTI2MF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzM4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCisjIFR1ZSBKdWwgMTQgMTQ6NTc6NTUgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjA9eQorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIworIyBBVDkxU0FNOTI2MCBWYXJpYW50cworIworIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MF9TQU05WEUgaXMgbm90IHNldAorCisjCisjIEFUOTFTQU05MjYwIC8gQVQ5MVNBTTlYRSBCb2FyZCBUeXBlCisjCisjIENPTkZJR19NQUNIX0FUOTFTQU05MjYwRUsgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DQU02MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBTTlfTDkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BRkVCOTI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1VTQl9BOTI2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1FJTF9BOTI2MCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9DUFU5MjYwPXkKKworIworIyBBVDkxIEJvYXJkIE9wdGlvbnMKKyMKKworIworIyBBVDkxIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1RJTUVSX0haPTEwMAorQ09ORklHX0FUOTFfRUFSTFlfREJHVT15CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUMyBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNCBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX0VBUkxZX1VTQVJUNSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9DQUNIRV9ST1VORF9ST0JJTiBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUExBVFJBTT15CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0FUTUVMPXkKK0NPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfSFc9eQorIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX1NPRlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTkJEPXkKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX01BQ0I9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9eQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9eQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT15CitDT05GSUdfUFBQX0JTRENPTVA9eQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz15CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0dQSU89eQorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQVRNRUw9eQorQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfUERDPXkKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTMyCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MVNBTTlYX1dBVENIRE9HPXkKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKK0NPTkZJR19VU0JfR0FER0VUX0FUOTE9eQorQ09ORklHX1VTQl9BVDkxPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD15CitDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVQ5MT15CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQorIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0dQSU89eQorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKKyMgQ09ORklHX1JUQ19IQ1RPU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQVQ5MVNBTTkgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlM0X0ZTPXkKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKK0NPTkZJR19BUk1fVU5XSU5EPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3B1OWcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjljYmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2NwdTlnMjBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTMyOCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMworIyBUdWUgSnVsIDE0IDE1OjAzOjQzIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0RFQURMSU5FPXkKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0FUOTE9eQorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisKKyMKKyMgQXRtZWwgQVQ5MSBTeXN0ZW0tb24tQ2hpcAorIworIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9BVDkxU0FNOUcyMD15CisjIENPTkZJR19BUkNIX0FUOTFDQVA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVg0MCBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MV9QTUNfVU5JVD15CisKKyMKKyMgQVQ5MVNBTTlHMjAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9BVDkxU0FNOUcyMEVLIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0NQVTlHMjA9eQorCisjCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCitDT05GSUdfQVQ5MV9FQVJMWV9EQkdVPXkKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ1IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyNlQ9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUSj15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKyMgQ09ORklHX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19WRlAgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorQ09ORklHX0lORVRfTFJPPXkKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKK0NPTkZJR19NVERfUkFNPXkKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorQ09ORklHX01URF9QTEFUUkFNPXkKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfQVRNRUw9eQorIyBDT05GSUdfTVREX05BTkRfQVRNRUxfRUNDX0hXIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfU09GVD15CisjIENPTkZJR19NVERfTkFORF9BVE1FTF9FQ0NfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorQ09ORklHX1NNU0NfUEhZPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CitDT05GSUdfTUFDQj15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD15CisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz15CisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPXkKK0NPTkZJR19QUFBfQlNEQ09NUD15CisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPXkKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfR1BJTz15CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0c9eQorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorQ09ORklHX1VTQl9HQURHRVRfQVQ5MT15CitDT05GSUdfVVNCX0FUOTE9eQorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPXkKK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19BVDkxPXkKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworQ09ORklHX0xFRFNfVFJJR0dFUlM9eQorQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9BVDkxU0FNOSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9eQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JTklYX0ZTPXkKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PXkKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorQ09ORklHX0FSTV9VTldJTkQ9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jcHVhdDkxX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwMTgyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3B1YXQ5MV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzE2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMzCisjIFR1ZSBKdWwgMTQgMTQ6NDU6MDEgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBBdG1lbCBBVDkxIFN5c3RlbS1vbi1DaGlwCisjCitDT05GSUdfQVJDSF9BVDkxUk05MjAwPXkKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05MjYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFTQU05RzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MUNBUDkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxWDQwIGlzIG5vdCBzZXQKK0NPTkZJR19BVDkxX1BNQ19VTklUPXkKKworIworIyBBVDkxUk05MjAwIEJvYXJkIFR5cGUKKyMKKyMgQ09ORklHX01BQ0hfT05FQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMERLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVQ5MVJNOTIwMEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNjM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ0FSTUVWQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0FURUI5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfS0I5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUElDT1RVWDJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0tBRkEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FQ0JBVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWUw5MjAwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0NQVUFUOTE9eQorCisjCisjIEFUOTEgQm9hcmQgT3B0aW9ucworIworCisjCisjIEFUOTEgRmVhdHVyZSBTZWxlY3Rpb25zCisjCisjIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgaXMgbm90IHNldAorQ09ORklHX0FUOTFfVElNRVJfSFo9MTAwCitDT05GSUdfQVQ5MV9FQVJMWV9EQkdVPXkKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUOTFfRUFSTFlfVVNBUlQ1IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX0FSTTkyMFQ9eQorQ09ORklHX0NQVV8zMnY0VD15CitDT05GSUdfQ1BVX0FCUlRfRVY0VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y0V1Q9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKKyMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9IiIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUExBVFJBTT15CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9OQkQ9eQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19BUk1fQVQ5MV9FVEhFUj15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD15CisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz15CisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorQ09ORklHX1BQUF9ERUZMQVRFPXkKK0NPTkZJR19QUFBfQlNEQ09NUD15CisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPXkKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQVRNRUw9eQorQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQVRNRUxfUERDPXkKKyMgQ09ORklHX1NFUklBTF9BVE1FTF9UVFlBVCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTMyCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfQVQ5MVJNOTIwMF9XQVRDSERPRz15CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CitDT05GSUdfVVNCX0dBREdFVF9BVDkxPXkKK0NPTkZJR19VU0JfQVQ5MT15CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0FUOTE9eQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1NjM9eQorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9BVDkxUk05MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1NVTU1BUlk9eQorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlOSVhfRlM9eQorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9eQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwppbmRleCBmMzA3NGU0Li5kZjliZmJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM2Ci0jIFR1ZSBTZXAgMTYgMTg6NTY6NTggMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgorIyBGcmkgQXVnIDIxIDE1OjQxOjM5IDIwMDkKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTksNyArOSw2IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTE4LDE2ICsxNywxNCBAQAogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKIENPTkZJR19aT05FX0RNQT15CiBDT05GSUdfQVJDSF9NVERfWElQPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDQsMTAgKzQxLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTYsOSArNjIsMTEgQEAKICMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjksMTcgKzc3LDIyIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC04NywzMCArMTAwLDI1IEBACiAjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAotIyBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQotIyBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0RNQV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9DTEs9eQotQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEyNiw3ICsxMzQsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMzYsMTQgKzE0NCwxNSBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTUyLDIzICsxNjEsMjUgQEAKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NBMTEwMD15CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotQ09ORklHX0RNQUJPVU5DRT15CiAKICMKICMgU0ExMXgwIEltcGxlbWVudGF0aW9ucwpAQCAtMTg5LDE0ICsyMDAsNiBAQAogQ09ORklHX1NBMTEwMF9TU1A9eQogCiAjCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwogIyBQcm9jZXNzb3IgVHlwZQogIwogQ09ORklHX0NQVV8zMj15CkBAIC0yMTUsOCArMjE4LDggQEAKICMKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX1NBMTExMT15CitDT05GSUdfRE1BQk9VTkNFPXkKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTkKIAogIwpAQCAtMjQ2LDMwICsyNDksMzYgQEAKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAogIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKLUNPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX05PREVTX1NISUZUPTIKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0RJU0NPTlRJR01FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVM9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CitDT05GSUdfU1BBUlNFTUVNPXkKK0NPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKK0NPTkZJR19TUEFSU0VNRU1fRVhUUkVNRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKICMgQ09ORklHX0xFRFMgaXMgbm90IHNldAogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAogCiAjCiAjIEJvb3Qgb3B0aW9ucwpAQCAtMjgxLDkgKzI5MCwxMCBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCiAjCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAogIwogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogCiAjCiAjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgpAQCAtMjk0LDEyICszMDQsMTQgQEAKICMKIENPTkZJR19GUEVfTldGUEU9eQogIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLUNPTkZJR19GUEVfRkFTVEZQRT15CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CiAKICMKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKIENPTkZJR19CSU5GTVRfQU9VVD15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldApAQCAtMzUzLDcgKzM2NSw2IEBACiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKQEAgLTM2NywxMCArMzc4LDEyIEBACiAjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAogIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKIAogIwogIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KICMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CkBAIC0zNzksNiArMzkyLDcgQEAKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzg4LDcgKzQwMiwxMCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKQEAgLTQzMSwxNCArNDQ4LDE3IEBACiBDT05GSUdfU0ExMTAwX0ZJUj1tCiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKIAogIwotIyBXaXJlbGVzcworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDY0LDI5ICs0ODQsMzQgQEAKICMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCitDT05GSUdfQkxLX0RFVl9MT09QPXkKICMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9OQkQ9bQorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKICMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz15Ci0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFQ1M9eQogIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAogQ09ORklHX0lERV9QUk9DX0ZTPXkKIApAQCAtNTEzLDggKzUzOCwzNCBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci1DT05GSUdfTUlJPW0KKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9SQUNBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1M4OXgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldApAQCAtNTIzLDE3ICs1NzQsMjcgQEAKICMgV2lyZWxlc3MgTEFOCiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX1BDTUNJQV9SQVlDUyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogQ09ORklHX05FVF9QQ01DSUE9eQotQ09ORklHX1BDTUNJQV8zQzU4OT1tCi1DT05GSUdfUENNQ0lBXzNDNTc0PW0KLUNPTkZJR19QQ01DSUFfRk1WSjE4WD1tCi1DT05GSUdfUENNQ0lBX1BDTkVUPW0KLUNPTkZJR19QQ01DSUFfTk1DTEFOPW0KLUNPTkZJR19QQ01DSUFfU01DOTFDOTI9bQotQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KLUNPTkZJR19QQ01DSUFfQVhORVQ9bQorIyBDT05GSUdfUENNQ0lBXzNDNTg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfRk1WSjE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU01DOTFDOTIgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FYTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC01NjUsMjAgKzYyNiwyMyBAQAogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfSFA3WFg9eQogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9IUDdYWD15Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKQEAgLTU4Nyw4ICs2NTEsOCBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtNjI0LDExICs2ODgsMTIgQEAKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTEVHQUNZX1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MzIKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPW0KLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCkBAIC02NTAsNiArNzE1LDEwIEBACiAjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKIAogIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCiAjIEkyQyBHUElPIGV4cGFuZGVyczoKICMKIApAQCAtNjYzLDEyICs3MzIsMTQgQEAKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKQEAgLTY3Niw2ICs3NDcsNyBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CkBAIC02ODcsMjIgKzc1OSw3IEBACiAjIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwogIwogIyBDT05GSUdfTUNQX1NBMTFYMCBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzEyLDYgKzc2OSw3IEBACiBDT05GSUdfRkI9eQogIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKQEAgLTczMyw3ICs3OTEsMTcgQEAKICMgQ09ORklHX0ZCX1NBMTEwMCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfUzFEMTNYWFg9eQogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTENEX0hQNzAwPXkKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfSFA3MDA9eQogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTc1Nyw2ICs4MjUsOCBAQAogIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CkBAIC03ODEsMTIgKzg1MSwxNSBAQAogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5NCwxNSArODY3LDEwIEBACiAjCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCi0jCisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC04MTEsMTIgKzg3OSwxNiBAQAogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtODI2LDYgKzg5OCwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTg0NiwxNCArOTIzLDEyIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiAjIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtODYyLDYgKzkzNyw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODcwLDYgKzk0Niw3IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzNSwxMiArMTAxMiwxNiBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTk1OCwxOSArMTAzOSwyMCBAQAogQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0ZUUkFDRT15Ci1DT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTk4NSwxMyArMTA2NywxNiBAQAogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKQEAgLTEwNjIsMTUgKzExNDcsMjEgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9bQogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CkBAIC0xMDc4LDcgKzExNjksNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9uaGs4ODE1X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiNDViOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbmhrODgxNV9kZWZjb25maWcKQEAgLTAsMCArMSwxMzE2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKKyMgVHVlIEp1biAyMyAyMjo1NzoxNiAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9OT01BRElLPXkKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIE5vbWFkaWsgYm9hcmRzCisjCitDT05GSUdfTUFDSF9OT01BRElLXzg4MTVOSEs9eQorQ09ORklHX05PTUFESUtfODgxNT15CitDT05GSUdfSTJDX0JJVEJBTkdfODgxNU5ISz15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorQ09ORklHX09VVEVSX0NBQ0hFPXkKK0NPTkZJR19DQUNIRV9MMlgwPXkKK0NPTkZJR19BUk1fVklDPXkKK0NPTkZJR19BUk1fVklDX05SPTIKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX0FSTV9BTUJBPXkKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0FQTV9FTVVMQVRJT04gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPXkKK0NPTkZJR19ORVRfSVBHUkU9eQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CisjIENPTkZJR19JUF9QSU1TTV9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9bQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJVUFSVD1tCitDT05GSUdfQlRfSENJVUFSVF9IND15CitDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKKyMgQ09ORklHX0JUX0hDSVVBUlRfTEwgaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVZIQ0k9bQorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCitDT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1RFU1RTPW0KKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CitDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFPXkKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9OT01BRElLPXkKK0NPTkZJR19NVERfT05FTkFORD15CitDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFPXkKK0NPTkZJR19NVERfT05FTkFORF9HRU5FUklDPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD15CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01VTFRJX0xVTj15CitDT05GSUdfU0NTSV9DT05TVEFOVFM9eQorQ09ORklHX1NDU0lfTE9HR0lORz15CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj15CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQT0U9bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCitDT05GSUdfTkVUQ09OU09MRT1tCisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0RFQlVHX0dQSU89eQorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fUEwwNjEgaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPXkKKyMgQ09ORklHX0NVU0UgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xNT15CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zNXBjMTAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBkN2QzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwYzEwMF9kZWZjb25maWcKQEAgLTAsMCArMSw4OTIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAorIyBXZWQgSnVsICAxIDE1OjUzOjA3IDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX01NVT15CitDT05GSUdfTk9fSU9QT1JUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CisjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1M1UEMxWFg9eQorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorQ09ORklHX1BMQVRfUzNDPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKKyMgQ09ORklHX1MzQ19CT09UX0VSUk9SX1JFU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19TM0NfQk9PVF9VQVJUX0ZPUkNFX0ZJRk89eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKK0NPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUPTAKK0NPTkZJR19TM0NfR1BJT19TUEFDRT0wCitDT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQorQ09ORklHX1MzQ19HUElPX1BVTExfVVBET1dOPXkKK0NPTkZJR19QTEFUX1M1UEMxWFg9eQorQ09ORklHX0NQVV9TNVBDMTAwX0lOSVQ9eQorQ09ORklHX0NQVV9TNVBDMTAwX0NMT0NLPXkKK0NPTkZJR19TNVBDMTAwX1NFVFVQX0kyQzA9eQorQ09ORklHX0NQVV9TNVBDMTAwPXkKK0NPTkZJR19NQUNIX1NNREtDMTAwPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAorQ09ORklHX0FSTV9WSUM9eQorQ09ORklHX0FSTV9WSUNfTlI9MgorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWNyYW1mcyBpbml0PS9saW51eHJjIGNvbnNvbGU9dHR5U0FDMiwxMTUyMDAgbWVtPTEyOE0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCitDT05GSUdfRUVQUk9NX0FUMjQ9eQorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0FNU1VORz15CitDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM9MworIyBDT05GSUdfU0VSSUFMX1NBTVNVTkdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9TQU1TVU5HX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKKyMKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19ERUJVRz15CitDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CitDT05GSUdfU0RJT19VQVJUPXkKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19TREhDST15CisjIENPTkZJR19NTUNfU0RIQ0lfUExURk0gaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15CisjIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19PTl9CTE9DSz15CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TM0NfUE9SVD15CitDT05GSUdfREVCVUdfUzNDX1VBUlQ9MAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXNzZW1ibGVyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaAppbmRleCAxNWY4YTA5Li4wMGY0NmQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hc3NlbWJsZXIuaApAQCAtNzQsMjMgKzc0LDU2IEBACiAgKiBFbmFibGUgYW5kIGRpc2FibGUgaW50ZXJydXB0cwogICovCiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKLQkubWFjcm8JZGlzYWJsZV9pcnEKKwkubWFjcm8JZGlzYWJsZV9pcnFfbm90cmFjZQogCWNwc2lkCWkKIAkuZW5kbQogCi0JLm1hY3JvCWVuYWJsZV9pcnEKKwkubWFjcm8JZW5hYmxlX2lycV9ub3RyYWNlCiAJY3BzaWUJaQogCS5lbmRtCiAjZWxzZQotCS5tYWNybwlkaXNhYmxlX2lycQorCS5tYWNybwlkaXNhYmxlX2lycV9ub3RyYWNlCiAJbXNyCWNwc3JfYywgI1BTUl9JX0JJVCB8IFNWQ19NT0RFCiAJLmVuZG0KIAotCS5tYWNybwllbmFibGVfaXJxCisJLm1hY3JvCWVuYWJsZV9pcnFfbm90cmFjZQogCW1zcgljcHNyX2MsICNTVkNfTU9ERQogCS5lbmRtCiAjZW5kaWYKIAorCS5tYWNybyBhc21fdHJhY2VfaGFyZGlycXNfb2ZmCisjaWYgZGVmaW5lZChDT05GSUdfVFJBQ0VfSVJRRkxBR1MpCisJc3RtZGIgICBzcCEsIHtyMC1yMywgaXAsIGxyfQorCWJsCXRyYWNlX2hhcmRpcnFzX29mZgorCWxkbWlhCXNwISwge3IwLXIzLCBpcCwgbHJ9CisjZW5kaWYKKwkuZW5kbQorCisJLm1hY3JvIGFzbV90cmFjZV9oYXJkaXJxc19vbl9jb25kLCBjb25kCisjaWYgZGVmaW5lZChDT05GSUdfVFJBQ0VfSVJRRkxBR1MpCisJLyoKKwkgKiBhY3R1YWxseSB0aGUgcmVnaXN0ZXJzIHNob3VsZCBiZSBwdXNoZWQgYW5kIHBvcCdkIGNvbmRpdGlvbmFsbHksIGJ1dAorCSAqIGFmdGVyIGJsIHRoZSBmbGFncyBhcmUgY2VydGFpbmx5IGNsb2JiZXJlZAorCSAqLworCXN0bWRiICAgc3AhLCB7cjAtcjMsIGlwLCBscn0KKwlibFxjb25kCXRyYWNlX2hhcmRpcnFzX29uCisJbGRtaWEJc3AhLCB7cjAtcjMsIGlwLCBscn0KKyNlbmRpZgorCS5lbmRtCisKKwkubWFjcm8gYXNtX3RyYWNlX2hhcmRpcnFzX29uCisJYXNtX3RyYWNlX2hhcmRpcnFzX29uX2NvbmQgYWwKKwkuZW5kbQorCisJLm1hY3JvIGRpc2FibGVfaXJxCisJZGlzYWJsZV9pcnFfbm90cmFjZQorCWFzbV90cmFjZV9oYXJkaXJxc19vZmYKKwkuZW5kbQorCisJLm1hY3JvIGVuYWJsZV9pcnEKKwlhc21fdHJhY2VfaGFyZGlycXNfb24KKwllbmFibGVfaXJxX25vdHJhY2UKKwkuZW5kbQogLyoKICAqIFNhdmUgdGhlIGN1cnJlbnQgSVJRIHN0YXRlIGFuZCBkaXNhYmxlIElSUXMuICBOb3RlIHRoYXQgdGhpcyBtYWNybwogICogYXNzdW1lcyBGSVFzIGFyZSBlbmFibGVkLCBhbmQgdGhhdCB0aGUgcHJvY2Vzc29yIGlzIGluIFNWQyBtb2RlLgpAQCAtMTA0LDEwICsxMzcsMTYgQEAKICAqIFJlc3RvcmUgaW50ZXJydXB0IHN0YXRlIHByZXZpb3VzbHkgc3RvcmVkIGluIGEgcmVnaXN0ZXIuICBXZSBkb24ndAogICogZ3VhcmFudGVlIHRoYXQgdGhpcyB3aWxsIHByZXNlcnZlIHRoZSBmbGFncy4KICAqLwotCS5tYWNybwlyZXN0b3JlX2lycXMsIG9sZGNwc3IKKwkubWFjcm8JcmVzdG9yZV9pcnFzX25vdHJhY2UsIG9sZGNwc3IKIAltc3IJY3Bzcl9jLCBcb2xkY3BzcgogCS5lbmRtCiAKKwkubWFjcm8gcmVzdG9yZV9pcnFzLCBvbGRjcHNyCisJdHN0CVxvbGRjcHNyLCAjUFNSX0lfQklUCisJYXNtX3RyYWNlX2hhcmRpcnFzX29uX2NvbmQgZXEKKwlyZXN0b3JlX2lycXNfbm90cmFjZSBcb2xkY3BzcgorCS5lbmRtCisKICNkZWZpbmUgVVNFUih4Li4uKQkJCQlcCiA5OTk5Ogl4OwkJCQkJXAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiOwkJXApAQCAtMTI3LDMgKzE2Niw4NyBAQAogI2VuZGlmCiAjZW5kaWYKIAkuZW5kbQorCisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKwkubWFjcm8Jc2V0bW9kZSwgbW9kZSwgcmVnCisJbW92CVxyZWcsICNcbW9kZQorCW1zcgljcHNyX2MsIFxyZWcKKwkuZW5kbQorI2Vsc2UKKwkubWFjcm8Jc2V0bW9kZSwgbW9kZSwgcmVnCisJbXNyCWNwc3JfYywgI1xtb2RlCisJLmVuZG0KKyNlbmRpZgorCisvKgorICogU1RSVC9MRFJUIGFjY2VzcyBtYWNyb3Mgd2l0aCBBUk0gYW5kIFRodW1iLTIgdmFyaWFudHMKKyAqLworI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCisKKwkubWFjcm8JdXNyYWNjb2ZmLCBpbnN0ciwgcmVnLCBwdHIsIGluYywgb2ZmLCBjb25kLCBhYm9ydAorOTk5OToKKwkuaWYJXGluYyA9PSAxCisJXGluc3RyXGNvbmRcKClidCBccmVnLCBbXHB0ciwgI1xvZmZdCisJLmVsc2VpZglcaW5jID09IDQKKwlcaW5zdHJcY29uZFwoKXQgXHJlZywgW1xwdHIsICNcb2ZmXQorCS5lbHNlCisJLmVycm9yCSJVbnN1cHBvcnRlZCBpbmMgbWFjcm8gYXJndW1lbnQiCisJLmVuZGlmCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgkzCisJLmxvbmcJOTk5OWIsIFxhYm9ydAorCS5wcmV2aW91cworCS5lbmRtCisKKwkubWFjcm8JdXNyYWNjLCBpbnN0ciwgcmVnLCBwdHIsIGluYywgY29uZCwgcmVwdCwgYWJvcnQKKwlAIGV4cGxpY2l0IElUIGluc3RydWN0aW9uIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBsYWJlbAorCUAgaW50cm9kdWNlZCBieSB0aGUgVVNFUiBtYWNybworCS5pZm5jCVxjb25kLGFsCisJLmlmCVxyZXB0ID09IDEKKwlpdHQJXGNvbmQKKwkuZWxzZWlmCVxyZXB0ID09IDIKKwlpdHR0CVxjb25kCisJLmVsc2UKKwkuZXJyb3IJIlVuc3VwcG9ydGVkIHJlcHQgbWFjcm8gYXJndW1lbnQiCisJLmVuZGlmCisJLmVuZGlmCisKKwlAIFNsaWdodGx5IG9wdGltaXNlZCB0byBhdm9pZCBpbmNyZW1lbnRpbmcgdGhlIHBvaW50ZXIgdHdpY2UKKwl1c3JhY2NvZmYgXGluc3RyLCBccmVnLCBccHRyLCBcaW5jLCAwLCBcY29uZCwgXGFib3J0CisJLmlmCVxyZXB0ID09IDIKKwl1c3JhY2NvZmYgXGluc3RyLCBccmVnLCBccHRyLCBcaW5jLCA0LCBcY29uZCwgXGFib3J0CisJLmVuZGlmCisKKwlhZGRcY29uZCBccHRyLCAjXHJlcHQgKiBcaW5jCisJLmVuZG0KKworI2Vsc2UJLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCisKKwkubWFjcm8JdXNyYWNjLCBpbnN0ciwgcmVnLCBwdHIsIGluYywgY29uZCwgcmVwdCwgYWJvcnQKKwkucmVwdAlccmVwdAorOTk5OToKKwkuaWYJXGluYyA9PSAxCisJXGluc3RyXGNvbmRcKClidCBccmVnLCBbXHB0cl0sICNcaW5jCisJLmVsc2VpZglcaW5jID09IDQKKwlcaW5zdHJcY29uZFwoKXQgXHJlZywgW1xwdHJdLCAjXGluYworCS5lbHNlCisJLmVycm9yCSJVbnN1cHBvcnRlZCBpbmMgbWFjcm8gYXJndW1lbnQiCisJLmVuZGlmCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbgkzCisJLmxvbmcJOTk5OWIsIFxhYm9ydAorCS5wcmV2aW91cworCS5lbmRyCisJLmVuZG0KKworI2VuZGlmCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCisKKwkubWFjcm8Jc3RydXNyLCByZWcsIHB0ciwgaW5jLCBjb25kPWFsLCByZXB0PTEsIGFib3J0PTkwMDFmCisJdXNyYWNjCXN0ciwgXHJlZywgXHB0ciwgXGluYywgXGNvbmQsIFxyZXB0LCBcYWJvcnQKKwkuZW5kbQorCisJLm1hY3JvCWxkcnVzciwgcmVnLCBwdHIsIGluYywgY29uZD1hbCwgcmVwdD0xLCBhYm9ydD05MDAxZgorCXVzcmFjYwlsZHIsIFxyZWcsIFxwdHIsIFxpbmMsIFxjb25kLCBccmVwdCwgXGFib3J0CisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggYzYxNjQyYi4uOWYzOTBjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTEyLDQgKzEyLDcgQEAKICNlbmRpZgogfTsKIAorc3RydWN0IHBkZXZfYXJjaGRhdGEgeworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IGMyMDc1MDQuLmMzYjkxMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC01NSw2ICs1NSw5IEBACiAjZGVmaW5lIFJfQVJNX01PVldfQUJTX05DCTQzCiAjZGVmaW5lIFJfQVJNX01PVlRfQUJTCQk0NAogCisjZGVmaW5lIFJfQVJNX1RITV9DQUxMCQkxMAorI2RlZmluZSBSX0FSTV9USE1fSlVNUDI0CTMwCisKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCAzOWM4YmMxLi4xMDNmN2VlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtNyw4ICs3LDQzIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdm9pZCBtY291bnQodm9pZCk7CitleHRlcm4gdm9pZCBfX2dudV9tY291bnRfbmModm9pZCk7CiAjZW5kaWYKIAogI2VuZGlmCiAKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpZiBkZWZpbmVkKENPTkZJR19GUkFNRV9QT0lOVEVSKSAmJiAhZGVmaW5lZChDT05GSUdfQVJNX1VOV0lORCkKKy8qCisgKiByZXR1cm5fYWRkcmVzcyB1c2VzIHdhbGtfc3RhY2tmcmFtZSB0byBkbyBpdCdzIHdvcmsuICBJZiBib3RoCisgKiBDT05GSUdfRlJBTUVfUE9JTlRFUj15IGFuZCBDT05GSUdfQVJNX1VOV0lORD15IHdhbGtfc3RhY2tmcmFtZSB1c2VzIHVud2luZAorICogaW5mb3JtYXRpb24uICBGb3IgdGhpcyB0byB3b3JrIGluIHRoZSBmdW5jdGlvbiB0cmFjZXIgbWFueSBmdW5jdGlvbnMgd291bGQKKyAqIGhhdmUgdG8gYmUgbWFya2VkIHdpdGggX19ub3RyYWNlLiAgU28gZm9yIG5vdyBqdXN0IGRlcGVuZCBvbgorICogIUNPTkZJR19BUk1fVU5XSU5ELgorICovCisKK3ZvaWQgKnJldHVybl9hZGRyZXNzKHVuc2lnbmVkIGludCk7CisKKyNlbHNlCisKK2V4dGVybiBpbmxpbmUgdm9pZCAqcmV0dXJuX2FkZHJlc3ModW5zaWduZWQgaW50IGxldmVsKQoreworCXJldHVybiBOVUxMOworfQorCisjZW5kaWYKKworI2RlZmluZSBIQVZFX0FSQ0hfQ0FMTEVSX0FERFIKKworI2RlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFIxICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcygxKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFIyICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcygyKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFIzICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcygzKSkKKyNkZWZpbmUgQ0FMTEVSX0FERFI0ICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcyg0KSkKKyNkZWZpbmUgQ0FMTEVSX0FERFI1ICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcyg1KSkKKyNkZWZpbmUgQ0FMTEVSX0FERFI2ICgodW5zaWduZWQgbG9uZylyZXR1cm5fYWRkcmVzcyg2KSkKKworI2VuZGlmIC8qIGlmbmRlZiBfX0FTU0VNQkxZX18gKi8KKwogI2VuZGlmIC8qIF9BU01fQVJNX0ZUUkFDRSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnV0ZXguaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Z1dGV4LmgKaW5kZXggOWVlNzQzYi4uYmZjYzE1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZnV0ZXguaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9mdXRleC5oCkBAIC05OSw2ICs5OSw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pY1xuIgogCSIxOglsZHJ0CSUwLCBbJTNdXG4iCiAJIgl0ZXEJJTAsICUxXG4iCisJIglpdAllcQlAIGV4cGxpY2l0IElUIG5lZWRlZCBmb3IgdGhlIDJiIGxhYmVsXG4iCiAJIjI6CXN0cmVxdAklMiwgWyUzXVxuIgogCSIzOlxuIgogCSIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKaW5kZXggNGRhMzMyYi4uYjQ5MGVjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21tYy5oCkBAIC0xMCw2ICsxMCw4IEBACiAJdW5zaWduZWQgaW50IG9jcl9tYXNrOwkJCS8qIGF2YWlsYWJsZSB2b2x0YWdlcyAqLwogCXUzMiAoKnRyYW5zbGF0ZV92ZGQpKHN0cnVjdCBkZXZpY2UgKiwgdW5zaWduZWQgaW50KTsKIAl1bnNpZ25lZCBpbnQgKCpzdGF0dXMpKHN0cnVjdCBkZXZpY2UgKik7CisJaW50CWdwaW9fd3A7CisJaW50CWdwaW9fY2Q7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKaW5kZXggODU3NjNkYi4uY2VmZWRmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWVtb3J5LmgKQEAgLTQ0LDcgKzQ0LDEzIEBACiAgKiBUaGUgbW9kdWxlIHNwYWNlIGxpdmVzIGJldHdlZW4gdGhlIGFkZHJlc3NlcyBnaXZlbiBieSBUQVNLX1NJWkUKICAqIGFuZCBQQUdFX09GRlNFVCAtIGl0IG11c3QgYmUgd2l0aGluIDMyTUIgb2YgdGhlIGtlcm5lbCB0ZXh0LgogICovCisjaWZuZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCiAjZGVmaW5lIE1PRFVMRVNfVkFERFIJCShQQUdFX09GRlNFVCAtIDE2KjEwMjQqMTAyNCkKKyNlbHNlCisvKiBzbWFsbGVyIHJhbmdlIGZvciBUaHVtYi0yIHN5bWJvbHMgcmVsb2NhdGlvbiAoMl4yNCkqLworI2RlZmluZSBNT0RVTEVTX1ZBRERSCQkoUEFHRV9PRkZTRVQgLSA4KjEwMjQqMTAyNCkKKyNlbmRpZgorCiAjaWYgVEFTS19TSVpFID4gTU9EVUxFU19WQUREUgogI2Vycm9yIFRvcCBvZiB1c2VyIHNwYWNlIGNsYXNoZXMgd2l0aCBzdGFydCBvZiBtb2R1bGUgc3BhY2UKICNlbmRpZgpAQCAtMjEyLDcgKzIxOCw2IEBACiAgKgogICogIHBhZ2VfdG9fcGZuKHBhZ2UpCWNvbnZlcnQgYSBzdHJ1Y3QgcGFnZSAqIHRvIGEgUEZOIG51bWJlcgogICogIHBmbl90b19wYWdlKHBmbikJY29udmVydCBhIF92YWxpZF8gUEZOIG51bWJlciB0byBzdHJ1Y3QgcGFnZSAqCi0gKiAgcGZuX3ZhbGlkKHBmbikJaW5kaWNhdGVzIHdoZXRoZXIgYSBQRk4gbnVtYmVyIGlzIHZhbGlkCiAgKgogICogIHZpcnRfdG9fcGFnZShrKQljb252ZXJ0IGEgX3ZhbGlkXyB2aXJ0dWFsIGFkZHJlc3MgdG8gc3RydWN0IHBhZ2UgKgogICogIHZpcnRfYWRkcl92YWxpZChrKQlpbmRpY2F0ZXMgd2hldGhlciBhIHZpcnR1YWwgYWRkcmVzcyBpcyB2YWxpZApAQCAtMjIxLDEwICsyMjYsNiBAQAogCiAjZGVmaW5lIEFSQ0hfUEZOX09GRlNFVAkJUEhZU19QRk5fT0ZGU0VUCiAKLSNpZm5kZWYgQ09ORklHX1NQQVJTRU1FTQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKChwZm4pID49IFBIWVNfUEZOX09GRlNFVCAmJiAocGZuKSA8IChQSFlTX1BGTl9PRkZTRVQgKyBtYXhfbWFwbnIpKQotI2VuZGlmCi0KICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCSgodW5zaWduZWQgbG9uZykoa2FkZHIpID49IFBBR0VfT0ZGU0VUICYmICh1bnNpZ25lZCBsb25nKShrYWRkcikgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkKIApAQCAtMjQxLDE4ICsyNDIsNiBAQAogI2RlZmluZSBhcmNoX3Bmbl90b19uaWQocGZuKQlQRk5fVE9fTklEKHBmbikKICNkZWZpbmUgYXJjaF9sb2NhbF9wYWdlX29mZnNldChwZm4sIG5pZCkgTE9DQUxfTUFQX05SKChwZm4pIDw8IFBBR0VfU0hJRlQpCiAKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCQkJCQlcCi0JKHsJCQkJCQkJXAotCQl1bnNpZ25lZCBpbnQgbmlkID0gUEZOX1RPX05JRChwZm4pOwkJXAotCQlpbnQgdmFsaWQgPSBuaWQgPCBNQVhfTlVNTk9ERVM7CQkJXAotCQlpZiAodmFsaWQpIHsJCQkJCVwKLQkJCXBnX2RhdGFfdCAqbm9kZSA9IE5PREVfREFUQShuaWQpOwlcCi0JCQl2YWxpZCA9IChwZm4gLSBub2RlLT5ub2RlX3N0YXJ0X3BmbikgPAlcCi0JCQkJbm9kZS0+bm9kZV9zcGFubmVkX3BhZ2VzOwlcCi0JCX0JCQkJCQlcCi0JCXZhbGlkOwkJCQkJCVwKLQl9KQotCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJCQkJCVwKIAkoQUREUl9UT19NQVBCQVNFKGthZGRyKSArIExPQ0FMX01BUF9OUihrYWRkcikpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDI2M2ZlZDAuLmJjZGI5MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtNjIsOCArNjIsMTAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CisjaWZkZWYgQ09ORklHX01NVQogCWlmICh1bmxpa2VseShtbS0+Y29udGV4dC5rdm1fc2VxICE9IGluaXRfbW0uY29udGV4dC5rdm1fc2VxKSkKIAkJX19jaGVja19rdm1fc2VxKG1tKTsKKyNlbmRpZgogfQogCiAjZGVmaW5lIGluaXRfbmV3X2NvbnRleHQodHNrLG1tKQkwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmgKaW5kZXggMzU3NGMwZC4uZDFiMTYyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaApAQCAtNDMsNyArNDMsNCBAQAogI2RlZmluZSBfX3BtZCh4KSAgICAgICAgKHgpCiAjZGVmaW5lIF9fcGdwcm90KHgpICAgICAoeCkKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggOWM3NDZhZi4uM2EzMmFmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaApAQCAtMTk0LDYgKzE5NCwxMCBAQAogCiB0eXBlZGVmIHN0cnVjdCBwYWdlICpwZ3RhYmxlX3Q7CiAKKyNpZm5kZWYgQ09ORklHX1NQQVJTRU1FTQorZXh0ZXJuIGludCBwZm5fdmFsaWQodW5zaWduZWQgbG9uZyk7CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KIAogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAzZGNkNjRiLi5iMTJjYzk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0zNiw2ICszNiw4IEBACiAjZGVmaW5lIHBnZF9hbGxvYyhtbSkJCQlnZXRfcGdkX3Nsb3cobW0pCiAjZGVmaW5lIHBnZF9mcmVlKG1tLCBwZ2QpCQlmcmVlX3BnZF9zbG93KG1tLCBwZ2QpCiAKKyNkZWZpbmUgUEdBTExPQ19HRlAJKEdGUF9LRVJORUwgfCBfX0dGUF9OT1RSQUNLIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTykKKwogLyoKICAqIEFsbG9jYXRlIG9uZSBQVEUgdGFibGUuCiAgKgpAQCAtNTcsNyArNTksNyBAQAogewogCXB0ZV90ICpwdGU7CiAKLQlwdGUgPSAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTyk7CisJcHRlID0gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKFBHQUxMT0NfR0ZQKTsKIAlpZiAocHRlKSB7CiAJCWNsZWFuX2RjYWNoZV9hcmVhKHB0ZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7CiAJCXB0ZSArPSBQVFJTX1BFUl9QVEU7CkBAIC03MSwxMCArNzMsMTYgQEAKIHsKIAlzdHJ1Y3QgcGFnZSAqcHRlOwogCi0JcHRlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVR8X19HRlBfWkVSTywgMCk7CisjaWZkZWYgQ09ORklHX0hJR0hQVEUKKwlwdGUgPSBhbGxvY19wYWdlcyhQR0FMTE9DX0dGUCB8IF9fR0ZQX0hJR0hNRU0sIDApOworI2Vsc2UKKwlwdGUgPSBhbGxvY19wYWdlcyhQR0FMTE9DX0dGUCwgMCk7CisjZW5kaWYKIAlpZiAocHRlKSB7Ci0JCXZvaWQgKnBhZ2UgPSBwYWdlX2FkZHJlc3MocHRlKTsKLQkJY2xlYW5fZGNhY2hlX2FyZWEocGFnZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7CisJCWlmICghUGFnZUhpZ2hNZW0ocHRlKSkgeworCQkJdm9pZCAqcGFnZSA9IHBhZ2VfYWRkcmVzcyhwdGUpOworCQkJY2xlYW5fZGNhY2hlX2FyZWEocGFnZSwgc2l6ZW9mKHB0ZV90KSAqIFBUUlNfUEVSX1BURSk7CisJCX0KIAkJcGd0YWJsZV9wYWdlX2N0b3IocHRlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBjNDMzYzZjLi4yMDFjY2FhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNjIsMTAgKzE2Miw4IEBACiAgKiBlbnRyaWVzIGFyZSBzdG9yZWQgMTAyNCBieXRlcyBiZWxvdy4KICAqLwogI2RlZmluZSBMX1BURV9QUkVTRU5UCQkoMSA8PCAwKQotI2RlZmluZSBMX1BURV9GSUxFCQkoMSA8PCAxKQkvKiBvbmx5IHdoZW4gIVBSRVNFTlQgKi8KICNkZWZpbmUgTF9QVEVfWU9VTkcJCSgxIDw8IDEpCi0jZGVmaW5lIExfUFRFX0JVRkZFUkFCTEUJKDEgPDwgMikJLyogb2Jzb2xldGUsIG1hdGNoZXMgUFRFICovCi0jZGVmaW5lIExfUFRFX0NBQ0hFQUJMRQkJKDEgPDwgMykJLyogb2Jzb2xldGUsIG1hdGNoZXMgUFRFICovCisjZGVmaW5lIExfUFRFX0ZJTEUJCSgxIDw8IDIpCS8qIG9ubHkgd2hlbiAhUFJFU0VOVCAqLwogI2RlZmluZSBMX1BURV9ESVJUWQkJKDEgPDwgNikKICNkZWZpbmUgTF9QVEVfV1JJVEUJCSgxIDw8IDcpCiAjZGVmaW5lIExfUFRFX1VTRVIJCSgxIDw8IDgpCkBAIC0yNjQsMTAgKzI2MiwxOSBAQAogI2RlZmluZSBwdGVfY2xlYXIobW0sYWRkcixwdGVwKQlzZXRfcHRlX2V4dChwdGVwLCBfX3B0ZSgwKSwgMCkKICNkZWZpbmUgcHRlX3BhZ2UocHRlKQkJKHBmbl90b19wYWdlKHB0ZV9wZm4ocHRlKSkpCiAjZGVmaW5lIHB0ZV9vZmZzZXRfa2VybmVsKGRpcixhZGRyKQkocG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIF9fcHRlX2luZGV4KGFkZHIpKQotI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsYWRkcikJKHBtZF9wYWdlX3ZhZGRyKCooZGlyKSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKLSNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpcixhZGRyKQkocG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIF9fcHRlX2luZGV4KGFkZHIpKQotI2RlZmluZSBwdGVfdW5tYXAocHRlKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkJZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpcixhZGRyKQkoX19wdGVfbWFwKGRpciwgS01fUFRFMCkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpcixhZGRyKQkoX19wdGVfbWFwKGRpciwgS01fUFRFMSkgKyBfX3B0ZV9pbmRleChhZGRyKSkKKyNkZWZpbmUgcHRlX3VubWFwKHB0ZSkJCQlfX3B0ZV91bm1hcChwdGUsIEtNX1BURTApCisjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQkJX19wdGVfdW5tYXAocHRlLCBLTV9QVEUxKQorCisjaWZuZGVmIENPTkZJR19ISUdIUFRFCisjZGVmaW5lIF9fcHRlX21hcChkaXIsa20pCXBtZF9wYWdlX3ZhZGRyKCooZGlyKSkKKyNkZWZpbmUgX19wdGVfdW5tYXAocHRlLGttKQlkbyB7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBfX3B0ZV9tYXAoZGlyLGttKQkoKHB0ZV90ICopa21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSwga20pICsgUFRSU19QRVJfUFRFKQorI2RlZmluZSBfX3B0ZV91bm1hcChwdGUsa20pCWt1bm1hcF9hdG9taWMoKHB0ZSAtIFBUUlNfUEVSX1BURSksIGttKQorI2VuZGlmCiAKICNkZWZpbmUgc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KSBjcHVfc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQogCkBAIC0zODEsMTMgKzM4OCwxMyBAQAogICoKICAqICAgMyAzIDIgMiAyIDIgMiAyIDIgMiAyIDIgMSAxIDEgMSAxIDEgMSAxIDEgMQogICogICAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAKLSAqICAgPC0tLS0tLS0tLS0tLS0tLSBvZmZzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0+IDwtLS0gdHlwZSAtLT4gMCAwCisgKiAgIDwtLS0tLS0tLS0tLS0tLS0gb2Zmc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tPiA8LSB0eXBlIC0tPiAwIDAgMAogICoKLSAqIFRoaXMgZ2l2ZXMgdXMgdXAgdG8gMTI3IHN3YXAgZmlsZXMgYW5kIDMyR0IgcGVyIHN3YXAgZmlsZS4gIE5vdGUgdGhhdAorICogVGhpcyBnaXZlcyB1cyB1cCB0byA2MyBzd2FwIGZpbGVzIGFuZCAzMkdCIHBlciBzd2FwIGZpbGUuICBOb3RlIHRoYXQKICAqIHRoZSBvZmZzZXQgZmllbGQgaXMgYWx3YXlzIG5vbi16ZXJvLgogICovCi0jZGVmaW5lIF9fU1dQX1RZUEVfU0hJRlQJMgotI2RlZmluZSBfX1NXUF9UWVBFX0JJVFMJCTcKKyNkZWZpbmUgX19TV1BfVFlQRV9TSElGVAkzCisjZGVmaW5lIF9fU1dQX1RZUEVfQklUUwkJNgogI2RlZmluZSBfX1NXUF9UWVBFX01BU0sJCSgoMSA8PCBfX1NXUF9UWVBFX0JJVFMpIC0gMSkKICNkZWZpbmUgX19TV1BfT0ZGU0VUX1NISUZUCShfX1NXUF9UWVBFX0JJVFMgKyBfX1NXUF9UWVBFX1NISUZUKQogCkBAIC00MTEsMTMgKzQxOCwxMyBAQAogICoKICAqICAgMyAzIDIgMiAyIDIgMiAyIDIgMiAyIDIgMSAxIDEgMSAxIDEgMSAxIDEgMQogICogICAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAKLSAqICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBvZmZzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gMSAwCisgKiAgIDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBvZmZzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAxIDAgMAogICovCiAjZGVmaW5lIHB0ZV9maWxlKHB0ZSkJCShwdGVfdmFsKHB0ZSkgJiBMX1BURV9GSUxFKQotI2RlZmluZSBwdGVfdG9fcGdvZmYoeCkJCShwdGVfdmFsKHgpID4+IDIpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZSh4KQkJX19wdGUoKCh4KSA8PCAyKSB8IExfUFRFX0ZJTEUpCisjZGVmaW5lIHB0ZV90b19wZ29mZih4KQkJKHB0ZV92YWwoeCkgPj4gMykKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKHgpCQlfX3B0ZSgoKHgpIDw8IDMpIHwgTF9QVEVfRklMRSkKIAotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkzMAorI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyOQogCiAvKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBpdCBpcyBhcmNoIGRlcGVuZGVudCAqLwogLyogRklYTUU6IHRoaXMgaXMgbm90IGNvcnJlY3QgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNjdiODMzYy4uYmJlY2NjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTgyLDYgKzgyLDE0IEBACiAjZGVmaW5lIFBTUl9FTkRTVEFURQkwCiAjZW5kaWYKIAorLyogCisgKiBUaGVzZSBhcmUgJ21hZ2ljJyB2YWx1ZXMgZm9yIFBUUkFDRV9QRUVLVVNSIHRoYXQgcmV0dXJuIGluZm8gYWJvdXQgd2hlcmUgYQorICogcHJvY2VzcyBpcyBsb2NhdGVkIGluIG1lbW9yeS4KKyAqLworI2RlZmluZSBQVF9URVhUX0FERFIJCTB4MTAwMDAKKyNkZWZpbmUgUFRfREFUQV9BRERSCQkweDEwMDA0CisjZGVmaW5lIFBUX1RFWFRfRU5EX0FERFIJMHgxMDAwOAorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA1MzdkZTRlLi45MmFjNjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTcsNCArNTcsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IGQzYTM5YjEuLjJkZmI3ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMTQyLDYgKzE0Miw3IEBACiAjZGVmaW5lIFRJRl9VU0lOR19JV01NWFQJMTcKICNkZWZpbmUgVElGX01FTURJRQkJMTgKICNkZWZpbmUgVElGX0ZSRUVaRQkJMTkKKyNkZWZpbmUgVElGX1JFU1RPUkVfU0lHTUFTSwkyMAogCiAjZGVmaW5lIF9USUZfU0lHUEVORElORwkJKDEgPDwgVElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxIDw8IFRJRl9ORUVEX1JFU0NIRUQpCkBAIC0xNTAsNiArMTUxLDcgQEAKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMSA8PCBUSUZfUE9MTElOR19OUkZMQUcpCiAjZGVmaW5lIF9USUZfVVNJTkdfSVdNTVhUCSgxIDw8IFRJRl9VU0lOR19JV01NWFQpCiAjZGVmaW5lIF9USUZfRlJFRVpFCQkoMSA8PCBUSUZfRlJFRVpFKQorI2RlZmluZSBfVElGX1JFU1RPUkVfU0lHTUFTSwkoMSA8PCBUSUZfUkVTVE9SRV9TSUdNQVNLKQogCiAvKgogICogQ2hhbmdlIHRoZXNlIGFuZCB5b3UgYnJlYWsgQVNNIGNvZGUgaW4gZW50cnktY29tbW9uLlMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCAwZGE5YmM5Li4xZDZiZDQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VuaWZpZWQuaD4KIAogI2RlZmluZSBWRVJJRllfUkVBRCAwCiAjZGVmaW5lIFZFUklGWV9XUklURSAxCkBAIC0zNjUsOCArMzY2LDEwIEBACiAKICNkZWZpbmUgX19wdXRfdXNlcl9hc21fZHdvcmQoeCxfX3B1X2FkZHIsZXJyKQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkiMToJc3RydAkiIF9fcmVnX29wZXIxICIsIFslMV0sICM0XG4iCQlcCi0JIjI6CXN0cnQJIiBfX3JlZ19vcGVyMCAiLCBbJTFdXG4iCQlcCisgQVJNKAkiMToJc3RydAkiIF9fcmVnX29wZXIxICIsIFslMV0sICM0XG4iCSkJXAorIEFSTSgJIjI6CXN0cnQJIiBfX3JlZ19vcGVyMCAiLCBbJTFdXG4iCSkJXAorIFRIVU1CKAkiMToJc3RydAkiIF9fcmVnX29wZXIxICIsIFslMV1cbiIJKQlcCisgVEhVTUIoCSIyOglzdHJ0CSIgX19yZWdfb3BlcjAgIiwgWyUxLCAjNF1cbiIJKQlcCiAJIjM6XG4iCQkJCQkJCVwKIAkiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJCQlcCiAJIgkuYWxpZ24JMlxuIgkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2U4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vdW5pZmllZC5oIC0gVW5pZmllZCBBc3NlbWJsZXIgU3ludGF4IGhlbHBlciBtYWNyb3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19BU01fVU5JRklFRF9ICisjZGVmaW5lIF9fQVNNX1VOSUZJRURfSAorCisjaWYgZGVmaW5lZChfX0FTU0VNQkxZX18pICYmIGRlZmluZWQoQ09ORklHX0FSTV9BU01fVU5JRklFRCkKKwkuc3ludGF4IHVuaWZpZWQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKworI2lmIF9fR05VQ19fIDwgNAorI2Vycm9yIFRodW1iLTIga2VybmVsIHJlcXVpcmVzIGdjYyA+PSA0CisjZW5kaWYKKworLyogVGhlIENQU1IgYml0IGRlc2NyaWJpbmcgdGhlIGluc3RydWN0aW9uIHNldCAoVGh1bWIpICovCisjZGVmaW5lIFBTUl9JU0VUU1RBVEUJUFNSX1RfQklUCisKKyNkZWZpbmUgQVJNKHguLi4pCisjZGVmaW5lIFRIVU1CKHguLi4pCXgKKyNkZWZpbmUgVyhpbnN0cikJaW5zdHIudworI2RlZmluZSBCU1lNKHN5bSkJc3ltICsgMQorCisjZWxzZQkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KKworLyogVGhlIENQU1IgYml0IGRlc2NyaWJpbmcgdGhlIGluc3RydWN0aW9uIHNldCAoQVJNKSAqLworI2RlZmluZSBQU1JfSVNFVFNUQVRFCTAKKworI2RlZmluZSBBUk0oeC4uLikJeAorI2RlZmluZSBUSFVNQih4Li4uKQorI2RlZmluZSBXKGluc3RyKQlpbnN0cgorI2RlZmluZSBCU1lNKHN5bSkJc3ltCisKKyNlbmRpZgkvKiBDT05GSUdfVEhVTUIyX0tFUk5FTCAqLworCisjaWZuZGVmIENPTkZJR19BUk1fQVNNX1VOSUZJRUQKKworLyoKKyAqIElmIHRoZSB1bmlmaWVkIGFzc2VtYmx5IHN5bnRheCBpc24ndCB1c2VkIChpbiBBUk0gbW9kZSksIHRoZXNlCisgKiBtYWNyb3MgZXhwYW5kIHRvIGFuIGVtcHR5IHN0cmluZworICovCisjaWZkZWYgX19BU1NFTUJMWV9fCisJLm1hY3JvCWl0LCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXR0LCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXRlLCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXR0dCwgY29uZAorCS5lbmRtCisJLm1hY3JvCWl0dGUsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdGV0LCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXRlZSwgY29uZAorCS5lbmRtCisJLm1hY3JvCWl0dHR0LCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXR0dGUsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdHRldCwgY29uZAorCS5lbmRtCisJLm1hY3JvCWl0dGVlLCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXRldHQsIGNvbmQKKwkuZW5kbQorCS5tYWNybwlpdGV0ZSwgY29uZAorCS5lbmRtCisJLm1hY3JvCWl0ZWV0LCBjb25kCisJLmVuZG0KKwkubWFjcm8JaXRlZWUsIGNvbmQKKwkuZW5kbQorI2Vsc2UJLyogIV9fQVNTRU1CTFlfXyAqLworX19hc21fXygKKyIJLm1hY3JvCWl0LCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdHQsIGNvbmRcbiIKKyIJLmVuZG1cbiIKKyIJLm1hY3JvCWl0ZSwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXR0dCwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXR0ZSwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXRldCwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXRlZSwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXR0dHQsIGNvbmRcbiIKKyIJLmVuZG1cbiIKKyIJLm1hY3JvCWl0dHRlLCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdHRldCwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXR0ZWUsIGNvbmRcbiIKKyIJLmVuZG1cbiIKKyIJLm1hY3JvCWl0ZXR0LCBjb25kXG4iCisiCS5lbmRtXG4iCisiCS5tYWNybwlpdGV0ZSwgY29uZFxuIgorIgkuZW5kbVxuIgorIgkubWFjcm8JaXRlZXQsIGNvbmRcbiIKKyIJLmVuZG1cbiIKKyIJLm1hY3JvCWl0ZWVlLCBjb25kXG4iCisiCS5lbmRtXG4iKTsKKyNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmCS8qIENPTkZJR19BUk1fQVNNX1VOSUZJRUQgKi8KKworI2VuZGlmCS8qICFfX0FTTV9VTklGSUVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMGU5N2I4Yy4uOTEyMmM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM2MCw4ICszNjAsOCBAQAogI2RlZmluZSBfX05SX3JlYWRsaW5rYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzMyKQogI2RlZmluZSBfX05SX2ZjaG1vZGF0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzMykKICNkZWZpbmUgX19OUl9mYWNjZXNzYXQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzM0KQotCQkJCQkvKiAzMzUgZm9yIHBzZWxlY3Q2ICovCi0JCQkJCS8qIDMzNiBmb3IgcHBvbGwgKi8KKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJCShfX05SX1NZU0NBTExfQkFTRSszMzUpCisjZGVmaW5lIF9fTlJfcHBvbGwJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzM2KQogI2RlZmluZSBfX05SX3Vuc2hhcmUJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzM3KQogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzMzOCkKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCShfX05SX1NZU0NBTExfQkFTRSszMzkpCkBAIC0zNzIsNyArMzcyLDcgQEAKICNkZWZpbmUgX19OUl92bXNwbGljZQkJCShfX05SX1NZU0NBTExfQkFTRSszNDMpCiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJCShfX05SX1NZU0NBTExfQkFTRSszNDQpCiAjZGVmaW5lIF9fTlJfZ2V0Y3B1CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NSkKLQkJCQkJLyogMzQ2IGZvciBlcG9sbF9wd2FpdCAqLworI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0CQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ2KQogI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ3KQogI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJCShfX05SX1NZU0NBTExfQkFTRSszNDgpCiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzQ5KQpAQCAtNDMyLDYgKzQzMiw3IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECiAKICNpZiAhZGVmaW5lZChDT05GSUdfQUVBQkkpIHx8IGRlZmluZWQoQ09ORklHX09BQklfQ09NUEFUKQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IGZmODlkMGIuLjMyMTNjOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsMTAgKzgsMTIgQEAKIENGTEFHU19SRU1PVkVfZnRyYWNlLm8gPSAtcGcKIGVuZGlmCiAKK0NGTEFHU19SRU1PVkVfcmV0dXJuX2FkZHJlc3MubyA9IC1wZworCiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCiBvYmoteQkJOj0gY29tcGF0Lm8gZWxmLm8gZW50cnktYXJtdi5vIGVudHJ5LWNvbW1vbi5vIGlycS5vIFwKLQkJICAgcHJvY2Vzcy5vIHB0cmFjZS5vIHNldHVwLm8gc2lnbmFsLm8gXAorCQkgICBwcm9jZXNzLm8gcHRyYWNlLm8gcmV0dXJuX2FkZHJlc3MubyBzZXR1cC5vIHNpZ25hbC5vIFwKIAkJICAgc3lzX2FybS5vIHN0YWNrdHJhY2UubyB0aW1lLm8gdHJhcHMubwogCiBvYmotJChDT05GSUdfSVNBX0RNQV9BUEkpCSs9IGRtYS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYXJta3N5bXMuYyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCmluZGV4IDUzMWUxODYuLjBlNjI3NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9hcm1rc3ltcy5jCkBAIC0xODYsNCArMTg2LDUgQEAKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKIEVYUE9SVF9TWU1CT0wobWNvdW50KTsKK0VYUE9SVF9TWU1CT0woX19nbnVfbWNvdW50X25jKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwppbmRleCBmNzc2ZTcyLi5lY2ZhOTg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvY2FsbHMuUwpAQCAtODEsNyArODEsNyBAQAogCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogd2FzIHN5c19zc2V0bWFzayAqLwogLyogNzAgKi8JQ0FMTChzeXNfc2V0cmV1aWQxNikKIAkJQ0FMTChzeXNfc2V0cmVnaWQxNikKLQkJQ0FMTChzeXNfc2lnc3VzcGVuZF93cmFwcGVyKQorCQlDQUxMKHN5c19zaWdzdXNwZW5kKQogCQlDQUxMKHN5c19zaWdwZW5kaW5nKQogCQlDQUxMKHN5c19zZXRob3N0bmFtZSkKIC8qIDc1ICovCUNBTEwoc3lzX3NldHJsaW1pdCkKQEAgLTE4OCw3ICsxODgsNyBAQAogCQlDQUxMKHN5c19ydF9zaWdwZW5kaW5nKQogCQlDQUxMKHN5c19ydF9zaWd0aW1lZHdhaXQpCiAJCUNBTEwoc3lzX3J0X3NpZ3F1ZXVlaW5mbykKLQkJQ0FMTChzeXNfcnRfc2lnc3VzcGVuZF93cmFwcGVyKQorCQlDQUxMKHN5c19ydF9zaWdzdXNwZW5kKQogLyogMTgwICovCUNBTEwoQUJJKHN5c19wcmVhZDY0LCBzeXNfb2FiaV9wcmVhZDY0KSkKIAkJQ0FMTChBQkkoc3lzX3B3cml0ZTY0LCBzeXNfb2FiaV9wd3JpdGU2NCkpCiAJCUNBTEwoc3lzX2Nob3duMTYpCkBAIC0zNDQsOCArMzQ0LDggQEAKIAkJQ0FMTChzeXNfcmVhZGxpbmthdCkKIAkJQ0FMTChzeXNfZmNobW9kYXQpCiAJCUNBTEwoc3lzX2ZhY2Nlc3NhdCkKLS8qIDMzNSAqLwlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogZXZlbnR1YWxseSBwc2VsZWN0NiAqLwotCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogZXZlbnR1YWxseSBwcG9sbCAqLworLyogMzM1ICovCUNBTEwoc3lzX3BzZWxlY3Q2KQorCQlDQUxMKHN5c19wcG9sbCkKIAkJQ0FMTChzeXNfdW5zaGFyZSkKIAkJQ0FMTChzeXNfc2V0X3JvYnVzdF9saXN0KQogCQlDQUxMKHN5c19nZXRfcm9idXN0X2xpc3QpCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJQ0FMTChzeXNfdm1zcGxpY2UpCiAJCUNBTEwoc3lzX21vdmVfcGFnZXMpCiAvKiAzNDUgKi8JQ0FMTChzeXNfZ2V0Y3B1KQotCQlDQUxMKHN5c19uaV9zeXNjYWxsKQkJLyogZXZlbnR1YWxseSBlcG9sbF9wd2FpdCAqLworCQlDQUxMKHN5c19lcG9sbF9wd2FpdCkKIAkJQ0FMTChzeXNfa2V4ZWNfbG9hZCkKIAkJQ0FMTChzeXNfdXRpbWVuc2F0KQogCQlDQUxMKHN5c19zaWduYWxmZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYyBiL2FyY2gvYXJtL2tlcm5lbC9jcnVuY2guYwppbmRleCA5OTk5NWMyLi43NjlhYmUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvY3J1bmNoLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NydW5jaC5jCkBAIC0zMSw3ICszMSw3IEBACiAKIHN0YXRpYyBpbnQgY3J1bmNoX2VuYWJsZWQodTMyIGRldmNmZykKIHsKLQlyZXR1cm4gISEoZGV2Y2ZnICYgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHX0NSVU5DSF9FTkFCTEUpOworCXJldHVybiAhIShkZXZjZmcgJiBFUDkzWFhfU1lTQ09OX0RFVkNGR19DUEVOQSk7CiB9CiAKIHN0YXRpYyBpbnQgY3J1bmNoX2RvKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKnQpCkBAIC01NiwxMSArNTYsMTYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFRIUkVBRF9OT1RJRllfU1dJVENIOgotCQlkZXZjZmcgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcpOworCQlkZXZjZmcgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0RFVkNGRyk7CiAJCWlmIChjcnVuY2hfZW5hYmxlZChkZXZjZmcpIHx8IGNydW5jaF9vd25lciA9PSBjcnVuY2hfc3RhdGUpIHsKLQkJCWRldmNmZyBePSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfQ1JVTkNIX0VOQUJMRTsKKwkJCS8qCisJCQkgKiBXZSBkb24ndCB1c2UgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSgpIGhlcmUKKwkJCSAqIGJlY2F1c2Ugd2UgYXJlIG9uIHRoZSBjb250ZXh0IHN3aXRjaCBwYXRoIGFuZAorCQkJICogcHJlZW1wdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkLgorCQkJICovCisJCQlkZXZjZmcgXj0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfQ1BFTkE7CiAJCQlfX3Jhd193cml0ZWwoMHhhYSwgRVA5M1hYX1NZU0NPTl9TV0xPQ0spOwotCQkJX19yYXdfd3JpdGVsKGRldmNmZywgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKKwkJCV9fcmF3X3dyaXRlbChkZXZjZmcsIEVQOTNYWF9TWVNDT05fREVWQ0ZHKTsKIAkJfQogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCBmYzhhZjQzLi4zZDcyN2E4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTM0LDcgKzM0LDcgQEAKIAlACiAJQCByb3V0aW5lIGNhbGxlZCB3aXRoIHIwID0gaXJxIG51bWJlciwgcjEgPSBzdHJ1Y3QgcHRfcmVncyAqCiAJQAotCWFkcm5lCWxyLCAxYgorCWFkcm5lCWxyLCBCU1lNKDFiKQogCWJuZQlhc21fZG9fSVJRCiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC00NiwxMyArNDYsMTMgQEAKIAkgKi8KIAl0ZXN0X2Zvcl9pcGkgcjAsIHI2LCByNSwgbHIKIAltb3ZuZQlyMCwgc3AKLQlhZHJuZQlsciwgMWIKKwlhZHJuZQlsciwgQlNZTSgxYikKIAlibmUJZG9fSVBJCiAKICNpZmRlZiBDT05GSUdfTE9DQUxfVElNRVJTCiAJdGVzdF9mb3JfbHRpcnEgcjAsIHI2LCByNSwgbHIKIAltb3ZuZQlyMCwgc3AKLQlhZHJuZQlsciwgMWIKKwlhZHJuZQlsciwgQlNZTSgxYikKIAlibmUJZG9fbG9jYWxfdGltZXIKICNlbmRpZgogI2VuZGlmCkBAIC03MCw3ICs3MCwxMCBAQAogICovCiAJLm1hY3JvCWludl9lbnRyeSwgcmVhc29uCiAJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQotCXN0bWliCXNwLCB7cjEgLSBscn0KKyBBUk0oCXN0bWliCXNwLCB7cjEgLSBscn0JCSkKKyBUSFVNQigJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCSkKKyBUSFVNQigJc3RyCXNwLCBbc3AsICNTX1NQXQkJKQorIFRIVU1CKAlzdHIJbHIsIFtzcCwgI1NfTFJdCQkpCiAJbW92CXIxLCAjXHJlYXNvbgogCS5lbmRtCiAKQEAgLTEyNiwxNyArMTI5LDI0IEBACiAJLm1hY3JvCXN2Y19lbnRyeSwgc3RhY2tfaG9sZT0wCiAgVU5XSU5EKC5mbnN0YXJ0CQkpCiAgVU5XSU5EKC5zYXZlIHtyMCAtIHBjfQkJKQotCXN1YglzcCwgc3AsICMoU19GUkFNRV9TSVpFICsgXHN0YWNrX2hvbGUpCisJc3ViCXNwLCBzcCwgIyhTX0ZSQU1FX1NJWkUgKyBcc3RhY2tfaG9sZSAtIDQpCisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKyBTUEZJWCgJc3RyCXIwLCBbc3BdCSkJQCB0ZW1wb3JhcmlseSBzYXZlZAorIFNQRklYKAltb3YJcjAsIHNwCQkpCisgU1BGSVgoCXRzdAlyMCwgIzQJCSkJQCB0ZXN0IG9yaWdpbmFsIHN0YWNrIGFsaWdubWVudAorIFNQRklYKAlsZHIJcjAsIFtzcF0JKQlAIHJlc3RvcmVkCisjZWxzZQogIFNQRklYKAl0c3QJc3AsICM0CQkpCi0gU1BGSVgoCWJpY25lCXNwLCBzcCwgIzQJKQotCXN0bWliCXNwLCB7cjEgLSByMTJ9CisjZW5kaWYKKyBTUEZJWCgJc3ViZXEJc3AsIHNwLCAjNAkpCisJc3RtaWEJc3AsIHtyMSAtIHIxMn0KIAogCWxkbWlhCXIwLCB7cjEgLSByM30KLQlhZGQJcjUsIHNwLCAjU19TUAkJQCBoZXJlIGZvciBpbnRlcmxvY2sgYXZvaWRhbmNlCisJYWRkCXI1LCBzcCwgI1NfU1AgLSA0CUAgaGVyZSBmb3IgaW50ZXJsb2NrIGF2b2lkYW5jZQogCW1vdglyNCwgIy0xCQkJQCAgIiIgICIiICAgICAgIiIgICAgICAgIiIKLQlhZGQJcjAsIHNwLCAjKFNfRlJBTUVfU0laRSArIFxzdGFja19ob2xlKQotIFNQRklYKAlhZGRuZQlyMCwgcjAsICM0CSkKLQlzdHIJcjEsIFtzcF0JCUAgc2F2ZSB0aGUgInJlYWwiIHIwIGNvcGllZAorCWFkZAlyMCwgc3AsICMoU19GUkFNRV9TSVpFICsgXHN0YWNrX2hvbGUgLSA0KQorIFNQRklYKAlhZGRlcQlyMCwgcjAsICM0CSkKKwlzdHIJcjEsIFtzcCwgIy00XSEJCUAgc2F2ZSB0aGUgInJlYWwiIHIwIGNvcGllZAogCQkJCQlAIGZyb20gdGhlIGV4Y2VwdGlvbiBzdGFjawogCiAJbW92CXIxLCBscgpAQCAtMTUxLDYgKzE2MSw4IEBACiAJQCAgcjQgLSBvcmlnX3IwIChzZWUgcHRfcmVncyBkZWZpbml0aW9uIGluIHB0cmFjZS5oKQogCUAKIAlzdG1pYQlyNSwge3IwIC0gcjR9CisKKwlhc21fdHJhY2VfaGFyZGlycXNfb2ZmCiAJLmVuZG0KIAogCS5hbGlnbgk1CkBAIC0xOTYsOSArMjA4LDggQEAKIAlACiAJQCByZXN0b3JlIFNQU1IgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uCiAJQAotCWxkcglyMCwgW3NwLCAjU19QU1JdCi0JbXNyCXNwc3JfY3hzZiwgcjAKLQlsZG1pYQlzcCwge3IwIC0gcGN9XgkJCUAgbG9hZCByMCAtIHBjLCBjcHNyCisJbGRyCXIyLCBbc3AsICNTX1BTUl0KKwlzdmNfZXhpdCByMgkJCQlAIHJldHVybiBmcm9tIGV4Y2VwdGlvbgogIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19kYWJ0X3N2YykKIApAQCAtMjA2LDkgKzIxNyw2IEBACiBfX2lycV9zdmM6CiAJc3ZjX2VudHJ5CiAKLSNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlibAl0cmFjZV9oYXJkaXJxc19vZmYKLSNlbmRpZgogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJZ2V0X3RocmVhZF9pbmZvIHRzawogCWxkcglyOCwgW3RzaywgI1RJX1BSRUVNUFRdCQlAIGdldCBwcmVlbXB0IGNvdW50CkBAIC0yMjUsMTMgKzIzMywxMiBAQAogCXRzdAlyMCwgI19USUZfTkVFRF9SRVNDSEVECiAJYmxuZQlzdmNfcHJlZW1wdAogI2VuZGlmCi0JbGRyCXIwLCBbc3AsICNTX1BTUl0JCUAgaXJxcyBhcmUgYWxyZWFkeSBkaXNhYmxlZAotCW1zcglzcHNyX2N4c2YsIHIwCisJbGRyCXI0LCBbc3AsICNTX1BTUl0JCUAgaXJxcyBhcmUgYWxyZWFkeSBkaXNhYmxlZAogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCXRzdAlyMCwgI1BTUl9JX0JJVAorCXRzdAlyNCwgI1BTUl9JX0JJVAogCWJsZXEJdHJhY2VfaGFyZGlycXNfb24KICNlbmRpZgotCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKwlzdmNfZXhpdCByNAkJCQlAIHJldHVybiBmcm9tIGV4Y2VwdGlvbgogIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19pcnFfc3ZjKQogCkBAIC0yNjYsNyArMjczLDcgQEAKIAlAICByMCAtIGluc3RydWN0aW9uCiAJQAogCWxkcglyMCwgW3IyLCAjLTRdCi0JYWRyCXI5LCAxZgorCWFkcglyOSwgQlNZTSgxZikKIAlibAljYWxsX2ZwZQogCiAJbW92CXIwLCBzcAkJCQlAIHN0cnVjdCBwdF9yZWdzICpyZWdzCkBAIC0yODAsOSArMjg3LDggQEAKIAlACiAJQCByZXN0b3JlIFNQU1IgYW5kIHJlc3RhcnQgdGhlIGluc3RydWN0aW9uCiAJQAotCWxkcglsciwgW3NwLCAjU19QU1JdCQlAIEdldCBTVkMgY3BzcgotCW1zcglzcHNyX2N4c2YsIGxyCi0JbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIFJlc3RvcmUgU1ZDIHJlZ2lzdGVycworCWxkcglyMiwgW3NwLCAjU19QU1JdCQlAIEdldCBTVkMgY3BzcgorCXN2Y19leGl0IHIyCQkJCUAgcmV0dXJuIGZyb20gZXhjZXB0aW9uCiAgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX3VuZF9zdmMpCiAKQEAgLTMyMyw5ICszMjksOCBAQAogCUAKIAlAIHJlc3RvcmUgU1BTUiBhbmQgcmVzdGFydCB0aGUgaW5zdHJ1Y3Rpb24KIAlACi0JbGRyCXIwLCBbc3AsICNTX1BTUl0KLQltc3IJc3Bzcl9jeHNmLCByMAotCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKwlsZHIJcjIsIFtzcCwgI1NfUFNSXQorCXN2Y19leGl0IHIyCQkJCUAgcmV0dXJuIGZyb20gZXhjZXB0aW9uCiAgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX3BhYnRfc3ZjKQogCkBAIC0zNTMsNyArMzU4LDggQEAKICBVTldJTkQoLmZuc3RhcnQJKQogIFVOV0lORCguY2FudHVud2luZAkpCUAgZG9uJ3QgdW53aW5kIHRoZSB1c2VyIHNwYWNlCiAJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQotCXN0bWliCXNwLCB7cjEgLSByMTJ9CisgQVJNKAlzdG1pYglzcCwge3IxIC0gcjEyfQkpCisgVEhVTUIoCXN0bWlhCXNwLCB7cjAgLSByMTJ9CSkKIAogCWxkbWlhCXIwLCB7cjEgLSByM30KIAlhZGQJcjAsIHNwLCAjU19QQwkJQCBoZXJlIGZvciBpbnRlcmxvY2sgYXZvaWRhbmNlCkBAIC0zNzIsNyArMzc4LDggQEAKIAlAIEFsc28sIHNlcGFyYXRlbHkgc2F2ZSBzcF91c3IgYW5kIGxyX3VzcgogCUAKIAlzdG1pYQlyMCwge3IyIC0gcjR9Ci0Jc3RtZGIJcjAsIHtzcCwgbHJ9XgorIEFSTSgJc3RtZGIJcjAsIHtzcCwgbHJ9XgkJCSkKKyBUSFVNQigJc3RvcmVfdXNlcl9zcF9sciByMCwgcjEsIFNfU1AgLSBTX1BDCSkKIAogCUAKIAlAIEVuYWJsZSB0aGUgYWxpZ25tZW50IHRyYXAgd2hpbGUgaW4ga2VybmVsIG1vZGUKQEAgLTM4Myw2ICszOTAsOCBAQAogCUAgQ2xlYXIgRlAgdG8gbWFyayB0aGUgZmlyc3Qgc3RhY2sgZnJhbWUKIAlACiAJemVyb19mcAorCisJYXNtX3RyYWNlX2hhcmRpcnFzX29mZgogCS5lbmRtCiAKIAkubWFjcm8Ja3VzZXJfY21weGNoZ19jaGVjawpAQCAtNDI3LDcgKzQzNiw3IEBACiAJQAogCWVuYWJsZV9pcnEKIAltb3YJcjIsIHNwCi0JYWRyCWxyLCByZXRfZnJvbV9leGNlcHRpb24KKwlhZHIJbHIsIEJTWU0ocmV0X2Zyb21fZXhjZXB0aW9uKQogCWIJZG9fRGF0YUFib3J0CiAgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX2RhYnRfdXNyKQpAQCAtNDM3LDkgKzQ0Niw2IEBACiAJdXNyX2VudHJ5CiAJa3VzZXJfY21weGNoZ19jaGVjawogCi0jaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JYmwJdHJhY2VfaGFyZGlycXNfb2ZmCi0jZW5kaWYKIAlnZXRfdGhyZWFkX2luZm8gdHNrCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIAlsZHIJcjgsIFt0c2ssICNUSV9QUkVFTVBUXQkJQCBnZXQgcHJlZW1wdCBjb3VudApAQCAtNDUyLDcgKzQ1OCw5IEBACiAJbGRyCXIwLCBbdHNrLCAjVElfUFJFRU1QVF0KIAlzdHIJcjgsIFt0c2ssICNUSV9QUkVFTVBUXQogCXRlcQlyMCwgcjcKLQlzdHJuZQlyMCwgW3IwLCAtcjBdCisgQVJNKAlzdHJuZQlyMCwgW3IwLCAtcjBdCSkKKyBUSFVNQigJbW92bmUJcjAsICMwCQkpCisgVEhVTUIoCXN0cm5lCXIwLCBbcjBdCSkKICNlbmRpZgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwogCWJsCXRyYWNlX2hhcmRpcnFzX29uCkBAIC00NzYsOSArNDg0LDEwIEBACiAJQAogCUAgIHIwIC0gaW5zdHJ1Y3Rpb24KIAlACi0JYWRyCXI5LCByZXRfZnJvbV9leGNlcHRpb24KLQlhZHIJbHIsIF9fdW5kX3Vzcl91bmtub3duCisJYWRyCXI5LCBCU1lNKHJldF9mcm9tX2V4Y2VwdGlvbikKKwlhZHIJbHIsIEJTWU0oX191bmRfdXNyX3Vua25vd24pCiAJdHN0CXIzLCAjUFNSX1RfQklUCQkJQCBUaHVtYiBtb2RlPworCWl0ZXQJZXEJCQkJQCBleHBsaWNpdCBJVCBuZWVkZWQgZm9yIHRoZSAxZiBsYWJlbAogCXN1YmVxCXI0LCByMiwgIzQJCQlAIEFSTSBpbnN0ciBhdCBMUiAtIDQKIAlzdWJuZQlyNCwgcjIsICMyCQkJQCBUaHVtYiBpbnN0ciBhdCBMUiAtIDIKIDE6CWxkcmVxdAlyMCwgW3I0XQpAQCAtNDg4LDcgKzQ5NywxMCBAQAogCWJlcQljYWxsX2ZwZQogCUAgVGh1bWIgaW5zdHJ1Y3Rpb24KICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNwotMjoJbGRyaHQJcjUsIFtyNF0sICMyCisyOgorIEFSTSgJbGRyaHQJcjUsIFtyNF0sICMyCSkKKyBUSFVNQigJbGRyaHQJcjUsIFtyNF0JKQorIFRIVU1CKAlhZGQJcjQsIHI0LCAjMgkpCiAJYW5kCXIwLCByNSwgIzB4ZjgwMAkJCUAgbWFzayBiaXRzIDExMXggeC4uLiAuLi4uIC4uLi4KIAljbXAJcjAsICMweGU4MDAJCQlAIDMyYml0IGluc3RydWN0aW9uIGlmIHh4ICE9IDAKIAlibG8JX191bmRfdXNyX3Vua25vd24KQEAgLTU3Nyw5ICs1ODksMTEgQEAKIAltb3ZlcQlwYywgbHIKIAlnZXRfdGhyZWFkX2luZm8gcjEwCQkJQCBnZXQgY3VycmVudCB0aHJlYWQKIAlhbmQJcjgsIHIwLCAjMHgwMDAwMGYwMAkJQCBtYXNrIG91dCBDUCBudW1iZXIKKyBUSFVNQigJbHNyCXI4LCByOCwgIzgJCSkKIAltb3YJcjcsICMxCiAJYWRkCXI2LCByMTAsICNUSV9VU0VEX0NQCi0Jc3RyYglyNywgW3I2LCByOCwgbHNyICM4XQkJQCBzZXQgYXBwcm9wcmlhdGUgdXNlZF9jcFtdCisgQVJNKAlzdHJiCXI3LCBbcjYsIHI4LCBsc3IgIzhdCSkJQCBzZXQgYXBwcm9wcmlhdGUgdXNlZF9jcFtdCisgVEhVTUIoCXN0cmIJcjcsIFtyNiwgcjhdCQkpCUAgc2V0IGFwcHJvcHJpYXRlIHVzZWRfY3BbXQogI2lmZGVmIENPTkZJR19JV01NWFQKIAlAIFRlc3QgaWYgd2UgbmVlZCB0byBnaXZlIGFjY2VzcyB0byBpV01NWHQgY29wcm9jZXNzb3JzCiAJbGRyCXI1LCBbcjEwLCAjVElfRkxBR1NdCkBAIC01ODcsMzYgKzYwMSwzOCBAQAogCW1vdmNzcwlyNywgcjUsIGxzciAjKFRJRl9VU0lOR19JV01NWFQgKyAxKQogCWJjcwlpd21teHRfdGFza19lbmFibGUKICNlbmRpZgotCWFkZAlwYywgcGMsIHI4LCBsc3IgIzYKLQltb3YJcjAsIHIwCisgQVJNKAlhZGQJcGMsIHBjLCByOCwgbHNyICM2CSkKKyBUSFVNQigJbHNsCXI4LCByOCwgIzIJCSkKKyBUSFVNQigJYWRkCXBjLCByOAkJCSkKKwlub3AKIAotCW1vdglwYywgbHIJCQkJQCBDUCMwCi0JYglkb19mcGUJCQkJQCBDUCMxIChGUEUpCi0JYglkb19mcGUJCQkJQCBDUCMyIChGUEUpCi0JbW92CXBjLCBscgkJCQlAIENQIzMKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMAorCVcoYikJZG9fZnBlCQkJCUAgQ1AjMSAoRlBFKQorCVcoYikJZG9fZnBlCQkJCUAgQ1AjMiAoRlBFKQorCVcobW92KQlwYywgbHIJCQkJQCBDUCMzCiAjaWZkZWYgQ09ORklHX0NSVU5DSAogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzQgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzUgKE1hdmVyaWNrQ3J1bmNoKQogCWIJY3J1bmNoX3Rhc2tfZW5hYmxlCQlAIENQIzYgKE1hdmVyaWNrQ3J1bmNoKQogI2Vsc2UKLQltb3YJcGMsIGxyCQkJCUAgQ1AjNAotCW1vdglwYywgbHIJCQkJQCBDUCM1Ci0JbW92CXBjLCBscgkJCQlAIENQIzYKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNAorCVcobW92KQlwYywgbHIJCQkJQCBDUCM1CisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzYKICNlbmRpZgotCW1vdglwYywgbHIJCQkJQCBDUCM3Ci0JbW92CXBjLCBscgkJCQlAIENQIzgKLQltb3YJcGMsIGxyCQkJCUAgQ1AjOQorCVcobW92KQlwYywgbHIJCQkJQCBDUCM3CisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzgKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjOQogI2lmZGVmIENPTkZJR19WRlAKLQliCWRvX3ZmcAkJCQlAIENQIzEwIChWRlApCi0JYglkb192ZnAJCQkJQCBDUCMxMSAoVkZQKQorCVcoYikJZG9fdmZwCQkJCUAgQ1AjMTAgKFZGUCkKKwlXKGIpCWRvX3ZmcAkJCQlAIENQIzExIChWRlApCiAjZWxzZQotCW1vdglwYywgbHIJCQkJQCBDUCMxMCAoVkZQKQotCW1vdglwYywgbHIJCQkJQCBDUCMxMSAoVkZQKQorCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMCAoVkZQKQorCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMSAoVkZQKQogI2VuZGlmCi0JbW92CXBjLCBscgkJCQlAIENQIzEyCi0JbW92CXBjLCBscgkJCQlAIENQIzEzCi0JbW92CXBjLCBscgkJCQlAIENQIzE0IChEZWJ1ZykKLQltb3YJcGMsIGxyCQkJCUAgQ1AjMTUgKENvbnRyb2wpCisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzEyCisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzEzCisJVyhtb3YpCXBjLCBscgkJCQlAIENQIzE0IChEZWJ1ZykKKwlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTUgKENvbnRyb2wpCiAKICNpZmRlZiBDT05GSUdfTkVPTgogCS5hbGlnbgk2CkBAIC02NjcsNyArNjgzLDcgQEAKIF9fdW5kX3Vzcl91bmtub3duOgogCWVuYWJsZV9pcnEKIAltb3YJcjAsIHNwCi0JYWRyCWxyLCByZXRfZnJvbV9leGNlcHRpb24KKwlhZHIJbHIsIEJTWU0ocmV0X2Zyb21fZXhjZXB0aW9uKQogCWIJZG9fdW5kZWZpbnN0cgogRU5EUFJPQyhfX3VuZF91c3JfdW5rbm93bikKIApAQCAtNzExLDcgKzcyNywxMCBAQAogIFVOV0lORCguY2FudHVud2luZAkpCiAJYWRkCWlwLCByMSwgI1RJX0NQVV9TQVZFCiAJbGRyCXIzLCBbcjIsICNUSV9UUF9WQUxVRV0KLQlzdG1pYQlpcCEsIHtyNCAtIHNsLCBmcCwgc3AsIGxyfQlAIFN0b3JlIG1vc3QgcmVncyBvbiBzdGFjaworIEFSTSgJc3RtaWEJaXAhLCB7cjQgLSBzbCwgZnAsIHNwLCBscn0gKQlAIFN0b3JlIG1vc3QgcmVncyBvbiBzdGFjaworIFRIVU1CKAlzdG1pYQlpcCEsIHtyNCAtIHNsLCBmcH0JICAgKQlAIFN0b3JlIG1vc3QgcmVncyBvbiBzdGFjaworIFRIVU1CKAlzdHIJc3AsIFtpcF0sICM0CQkgICApCisgVEhVTUIoCXN0cglsciwgW2lwXSwgIzQJCSAgICkKICNpZmRlZiBDT05GSUdfTU1VCiAJbGRyCXI2LCBbcjIsICNUSV9DUFVfRE9NQUlOXQogI2VuZGlmCkBAIC03MzYsOCArNzU1LDEyIEBACiAJbGRyCXIwLCA9dGhyZWFkX25vdGlmeV9oZWFkCiAJbW92CXIxLCAjVEhSRUFEX05PVElGWV9TV0lUQ0gKIAlibAlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbgorIFRIVU1CKAltb3YJaXAsIHI0CQkJICAgKQogCW1vdglyMCwgcjUKLQlsZG1pYQlyNCwge3I0IC0gc2wsIGZwLCBzcCwgcGN9CUAgTG9hZCBhbGwgcmVncyBzYXZlZCBwcmV2aW91c2x5CisgQVJNKAlsZG1pYQlyNCwge3I0IC0gc2wsIGZwLCBzcCwgcGN9ICApCUAgTG9hZCBhbGwgcmVncyBzYXZlZCBwcmV2aW91c2x5CisgVEhVTUIoCWxkbWlhCWlwISwge3I0IC0gc2wsIGZwfQkgICApCUAgTG9hZCBhbGwgcmVncyBzYXZlZCBwcmV2aW91c2x5CisgVEhVTUIoCWxkcglzcCwgW2lwXSwgIzQJCSAgICkKKyBUSFVNQigJbGRyCXBjLCBbaXBdCQkgICApCiAgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX3N3aXRjaF90bykKIApAQCAtNzcyLDYgKzc5NSw3IEBACiAgKiBpZiB5b3VyIGNvbXBpbGVkIGNvZGUgaXMgbm90IGdvaW5nIHRvIHVzZSB0aGUgbmV3IGluc3RydWN0aW9ucyBmb3Igb3RoZXIKICAqIHB1cnBvc2UuCiAgKi8KKyBUSFVNQigJLmFybQkpCiAKIAkubWFjcm8JdXNyX3JldCwgcmVnCiAjaWZkZWYgQ09ORklHX0FSTV9USFVNQgpAQCAtMTAyMCw2ICsxMDQ0LDcgQEAKIAkuZ2xvYmwJX19rdXNlcl9oZWxwZXJfZW5kCiBfX2t1c2VyX2hlbHBlcl9lbmQ6CiAKKyBUSFVNQigJLnRodW1iCSkKIAogLyoKICAqIFZlY3RvciBzdHVicy4KQEAgLTEwNTQsMTcgKzEwNzksMjMgQEAKIAlAIFByZXBhcmUgZm9yIFNWQzMyIG1vZGUuICBJUlFzIHJlbWFpbiBkaXNhYmxlZC4KIAlACiAJbXJzCXIwLCBjcHNyCi0JZW9yCXIwLCByMCwgIyhcbW9kZSBeIFNWQ19NT0RFKQorCWVvcglyMCwgcjAsICMoXG1vZGUgXiBTVkNfTU9ERSB8IFBTUl9JU0VUU1RBVEUpCiAJbXNyCXNwc3JfY3hzZiwgcjAKIAogCUAKIAlAIHRoZSBicmFuY2ggdGFibGUgbXVzdCBpbW1lZGlhdGVseSBmb2xsb3cgdGhpcyBjb2RlCiAJQAogCWFuZAlsciwgbHIsICMweDBmCisgVEhVTUIoCWFkcglyMCwgMWYJCQkpCisgVEhVTUIoCWxkcglsciwgW3IwLCBsciwgbHNsICMyXQkpCiAJbW92CXIwLCBzcAotCWxkcglsciwgW3BjLCBsciwgbHNsICMyXQorIEFSTSgJbGRyCWxyLCBbcGMsIGxyLCBsc2wgIzJdCSkKIAltb3ZzCXBjLCBscgkJCUAgYnJhbmNoIHRvIGhhbmRsZXIgaW4gU1ZDIG1vZGUKIEVORFBST0ModmVjdG9yX1xuYW1lKQorCisJLmFsaWduCTIKKwlAIGhhbmRsZXIgYWRkcmVzc2VzIGZvbGxvdyB0aGlzIGxhYmVsCisxOgogCS5lbmRtCiAKIAkuZ2xvYmwJX19zdHVic19zdGFydApAQCAtMTIwMiwxNCArMTIzMywxNiBAQAogCiAJLmdsb2JsCV9fdmVjdG9yc19zdGFydAogX192ZWN0b3JzX3N0YXJ0OgotCXN3aQlTWVNfRVJST1IwCi0JYgl2ZWN0b3JfdW5kICsgc3R1YnNfb2Zmc2V0Ci0JbGRyCXBjLCAuTEN2c3dpICsgc3R1YnNfb2Zmc2V0Ci0JYgl2ZWN0b3JfcGFidCArIHN0dWJzX29mZnNldAotCWIJdmVjdG9yX2RhYnQgKyBzdHVic19vZmZzZXQKLQliCXZlY3Rvcl9hZGRyZXhjcHRuICsgc3R1YnNfb2Zmc2V0Ci0JYgl2ZWN0b3JfaXJxICsgc3R1YnNfb2Zmc2V0Ci0JYgl2ZWN0b3JfZmlxICsgc3R1YnNfb2Zmc2V0CisgQVJNKAlzd2kJU1lTX0VSUk9SMAkpCisgVEhVTUIoCXN2YwkjMAkJKQorIFRIVU1CKAlub3AJCQkpCisJVyhiKQl2ZWN0b3JfdW5kICsgc3R1YnNfb2Zmc2V0CisJVyhsZHIpCXBjLCAuTEN2c3dpICsgc3R1YnNfb2Zmc2V0CisJVyhiKQl2ZWN0b3JfcGFidCArIHN0dWJzX29mZnNldAorCVcoYikJdmVjdG9yX2RhYnQgKyBzdHVic19vZmZzZXQKKwlXKGIpCXZlY3Rvcl9hZGRyZXhjcHRuICsgc3R1YnNfb2Zmc2V0CisJVyhiKQl2ZWN0b3JfaXJxICsgc3R1YnNfb2Zmc2V0CisJVyhiKQl2ZWN0b3JfZmlxICsgc3R1YnNfb2Zmc2V0CiAKIAkuZ2xvYmwJX192ZWN0b3JzX2VuZAogX192ZWN0b3JzX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA3ODEzYWI3Li44MDdjZmViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0zMywxNCArMzMsNyBAQAogCS8qIHBlcmZvcm0gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGFjdGlvbnMgYmVmb3JlIHVzZXIgcmV0dXJuICovCiAJYXJjaF9yZXRfdG9fdXNlciByMSwgbHIKIAotCUAgZmFzdF9yZXN0b3JlX3VzZXJfcmVncwotCWxkcglyMSwgW3NwLCAjU19PRkYgKyBTX1BTUl0JQCBnZXQgY2FsbGluZyBjcHNyCi0JbGRyCWxyLCBbc3AsICNTX09GRiArIFNfUENdIQlAIGdldCBwYwotCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCi0JbGRtZGIJc3AsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKLQltb3YJcjAsIHIwCi0JYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRSAtIFNfUEMKLQltb3ZzCXBjLCBscgkJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCisJcmVzdG9yZV91c2VyX3JlZ3MgZmFzdCA9IDEsIG9mZnNldCA9IFNfT0ZGCiAgVU5XSU5EKC5mbmVuZAkJKQogCiAvKgpAQCAtNzMsMTQgKzY2LDcgQEAKIAkvKiBwZXJmb3JtIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBhY3Rpb25zIGJlZm9yZSB1c2VyIHJldHVybiAqLwogCWFyY2hfcmV0X3RvX3VzZXIgcjEsIGxyCiAKLQlAIHNsb3dfcmVzdG9yZV91c2VyX3JlZ3MKLQlsZHIJcjEsIFtzcCwgI1NfUFNSXQkJQCBnZXQgY2FsbGluZyBjcHNyCi0JbGRyCWxyLCBbc3AsICNTX1BDXSEJCUAgZ2V0IHBjCi0JbXNyCXNwc3JfY3hzZiwgcjEJCQlAIHNhdmUgaW4gc3Bzcl9zdmMKLQlsZG1kYglzcCwge3IwIC0gbHJ9XgkJCUAgZ2V0IGNhbGxpbmcgcjAgLSBscgotCW1vdglyMCwgcjAKLQlhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gU19QQwotCW1vdnMJcGMsIGxyCQkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKKwlyZXN0b3JlX3VzZXJfcmVncyBmYXN0ID0gMCwgb2Zmc2V0ID0gMAogRU5EUFJPQyhyZXRfdG9fdXNlcikKIAogLyoKQEAgLTEzMiw2ICsxMTgsMjUgQEAKIAogI2Vsc2UKIAorRU5UUlkoX19nbnVfbWNvdW50X25jKQorCXN0bWRiIHNwISwge3IwLXIzLCBscn0KKwlsZHIgcjAsID1mdHJhY2VfdHJhY2VfZnVuY3Rpb24KKwlsZHIgcjIsIFtyMF0KKwlhZHIgcjAsIGZ0cmFjZV9zdHViCisJY21wIHIwLCByMgorCWJuZSBnbnVfdHJhY2UKKwlsZG1pYSBzcCEsIHtyMC1yMywgaXAsIGxyfQorCWJ4IGlwCisKK2dudV90cmFjZToKKwlsZHIgcjEsIFtzcCwgIzIwXQkJCUAgbHIgb2YgaW5zdHJ1bWVudGVkIHJvdXRpbmUKKwltb3YgcjAsIGxyCisJc3ViIHIwLCByMCwgI01DT1VOVF9JTlNOX1NJWkUKKwltb3YgbHIsIHBjCisJbW92IHBjLCByMgorCWxkbWlhIHNwISwge3IwLXIzLCBpcCwgbHJ9CisJYnggaXAKKwogRU5UUlkobWNvdW50KQogCXN0bWRiIHNwISwge3IwLXIzLCBscn0KIAlsZHIgcjAsID1mdHJhY2VfdHJhY2VfZnVuY3Rpb24KQEAgLTE4Miw4ICsxODcsMTAgQEAKIEVOVFJZKHZlY3Rvcl9zd2kpCiAJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQogCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwIC0gcjEyCi0JYWRkCXI4LCBzcCwgI1NfUEMKLQlzdG1kYglyOCwge3NwLCBscn1eCQkJQCBDYWxsaW5nIHNwLCBscgorIEFSTSgJYWRkCXI4LCBzcCwgI1NfUEMJCSkKKyBBUk0oCXN0bWRiCXI4LCB7c3AsIGxyfV4JCSkJQCBDYWxsaW5nIHNwLCBscgorIFRIVU1CKAltb3YJcjgsIHNwCQkJKQorIFRIVU1CKAlzdG9yZV91c2VyX3NwX2xyIHI4LCByMTAsIFNfU1AJKQlAIGNhbGxpbmcgc3AsIGxyCiAJbXJzCXI4LCBzcHNyCQkJQCBjYWxsZWQgZnJvbSBub24tRklRIG1vZGUsIHNvIG9rLgogCXN0cglsciwgW3NwLCAjU19QQ10JCQlAIFNhdmUgY2FsbGluZyBQQwogCXN0cglyOCwgW3NwLCAjU19QU1JdCQlAIFNhdmUgQ1BTUgpAQCAtMjcyLDcgKzI3OSw3IEBACiAJYm5lCV9fc3lzX3RyYWNlCiAKIAljbXAJc2NubywgI05SX3N5c2NhbGxzCQlAIGNoZWNrIHVwcGVyIHN5c2NhbGwgbGltaXQKLQlhZHIJbHIsIHJldF9mYXN0X3N5c2NhbGwJCUAgcmV0dXJuIGFkZHJlc3MKKwlhZHIJbHIsIEJTWU0ocmV0X2Zhc3Rfc3lzY2FsbCkJQCByZXR1cm4gYWRkcmVzcwogCWxkcmNjCXBjLCBbdGJsLCBzY25vLCBsc2wgIzJdCQlAIGNhbGwgc3lzXyogcm91dGluZQogCiAJYWRkCXIxLCBzcCwgI1NfT0ZGCkBAIC0yOTMsNyArMzAwLDcgQEAKIAltb3YJcjAsICMwCQkJCUAgdHJhY2UgZW50cnkgW0lQID0gMF0KIAlibAlzeXNjYWxsX3RyYWNlCiAKLQlhZHIJbHIsIF9fc3lzX3RyYWNlX3JldHVybgkJQCByZXR1cm4gYWRkcmVzcworCWFkcglsciwgQlNZTShfX3N5c190cmFjZV9yZXR1cm4pCUAgcmV0dXJuIGFkZHJlc3MKIAltb3YJc2NubywgcjAJCQlAIHN5c2NhbGwgbnVtYmVyIChwb3NzaWJseSBuZXcpCiAJYWRkCXIxLCBzcCwgI1NfUjAgKyBTX09GRgkJQCBwb2ludGVyIHRvIHJlZ3MKIAljbXAJc2NubywgI05SX3N5c2NhbGxzCQlAIGNoZWNrIHVwcGVyIHN5c2NhbGwgbGltaXQKQEAgLTM3MywxNiArMzgwLDYgQEAKIAkJYglzeXNfY2xvbmUKIEVORFBST0Moc3lzX2Nsb25lX3dyYXBwZXIpCiAKLXN5c19zaWdzdXNwZW5kX3dyYXBwZXI6Ci0JCWFkZAlyMywgc3AsICNTX09GRgotCQliCXN5c19zaWdzdXNwZW5kCi1FTkRQUk9DKHN5c19zaWdzdXNwZW5kX3dyYXBwZXIpCi0KLXN5c19ydF9zaWdzdXNwZW5kX3dyYXBwZXI6Ci0JCWFkZAlyMiwgc3AsICNTX09GRgotCQliCXN5c19ydF9zaWdzdXNwZW5kCi1FTkRQUk9DKHN5c19ydF9zaWdzdXNwZW5kX3dyYXBwZXIpCi0KIHN5c19zaWdyZXR1cm5fd3JhcHBlcjoKIAkJYWRkCXIwLCBzcCwgI1NfT0ZGCiAJCWIJc3lzX3NpZ3JldHVybgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCmluZGV4IDg3YWI0ZTEuLmE0ZWFmNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKQEAgLTM2LDExICszNiw2IEBACiAjZW5kaWYKIAkuZW5kbQogCi0JLm1hY3JvCWdldF90aHJlYWRfaW5mbywgcmQKLQltb3YJXHJkLCBzcCwgbHNyICMxMwotCW1vdglccmQsIFxyZCwgbHNsICMxMwotCS5lbmRtCi0KIAkubWFjcm8JYWxpZ25tZW50X3RyYXAsIHJ0ZW1wCiAjaWZkZWYgQ09ORklHX0FMSUdOTUVOVF9UUkFQCiAJbGRyCVxydGVtcCwgLkxDY3JhbGlnbgpAQCAtNDksNiArNDQsOTMgQEAKICNlbmRpZgogCS5lbmRtCiAKKwlACisJQCBTdG9yZS9sb2FkIHRoZSBVU0VSIFNQIGFuZCBMUiByZWdpc3RlcnMgYnkgc3dpdGNoaW5nIHRvIHRoZSBTWVMKKwlAIG1vZGUuIFVzZWZ1bCBpbiBUaHVtYi0yIG1vZGUgd2hlcmUgInN0bS9sZG0gcmQsIHtzcCwgbHJ9XiIgaXMgbm90CisJQCBhdmFpbGFibGUuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIFNWQyBtb2RlCisJQAorCS5tYWNybwlzdG9yZV91c2VyX3NwX2xyLCByZCwgcnRlbXAsIG9mZnNldCA9IDAKKwltcnMJXHJ0ZW1wLCBjcHNyCisJZW9yCVxydGVtcCwgXHJ0ZW1wLCAjKFNWQ19NT0RFIF4gU1lTVEVNX01PREUpCisJbXNyCWNwc3JfYywgXHJ0ZW1wCQkJQCBzd2l0Y2ggdG8gdGhlIFNZUyBtb2RlCisKKwlzdHIJc3AsIFtccmQsICNcb2Zmc2V0XQkJQCBzYXZlIHNwX3VzcgorCXN0cglsciwgW1xyZCwgI1xvZmZzZXQgKyA0XQkJQCBzYXZlIGxyX3VzcgorCisJZW9yCVxydGVtcCwgXHJ0ZW1wLCAjKFNWQ19NT0RFIF4gU1lTVEVNX01PREUpCisJbXNyCWNwc3JfYywgXHJ0ZW1wCQkJQCBzd2l0Y2ggYmFjayB0byB0aGUgU1ZDIG1vZGUKKwkuZW5kbQorCisJLm1hY3JvCWxvYWRfdXNlcl9zcF9sciwgcmQsIHJ0ZW1wLCBvZmZzZXQgPSAwCisJbXJzCVxydGVtcCwgY3BzcgorCWVvcglccnRlbXAsIFxydGVtcCwgIyhTVkNfTU9ERSBeIFNZU1RFTV9NT0RFKQorCW1zcgljcHNyX2MsIFxydGVtcAkJCUAgc3dpdGNoIHRvIHRoZSBTWVMgbW9kZQorCisJbGRyCXNwLCBbXHJkLCAjXG9mZnNldF0JCUAgbG9hZCBzcF91c3IKKwlsZHIJbHIsIFtccmQsICNcb2Zmc2V0ICsgNF0JCUAgbG9hZCBscl91c3IKKworCWVvcglccnRlbXAsIFxydGVtcCwgIyhTVkNfTU9ERSBeIFNZU1RFTV9NT0RFKQorCW1zcgljcHNyX2MsIFxydGVtcAkJCUAgc3dpdGNoIGJhY2sgdG8gdGhlIFNWQyBtb2RlCisJLmVuZG0KKworI2lmbmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorCS5tYWNybwlzdmNfZXhpdCwgcnBzcgorCW1zcglzcHNyX2N4c2YsIFxycHNyCisJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorCS5lbmRtCisKKwkubWFjcm8JcmVzdG9yZV91c2VyX3JlZ3MsIGZhc3QgPSAwLCBvZmZzZXQgPSAwCisJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgorCWxkcglsciwgW3NwLCAjXG9mZnNldCArIFNfUENdIQlAIGdldCBwYworCW1zcglzcHNyX2N4c2YsIHIxCQkJQCBzYXZlIGluIHNwc3Jfc3ZjCisJLmlmCVxmYXN0CisJbGRtZGIJc3AsIHtyMSAtIGxyfV4JCQlAIGdldCBjYWxsaW5nIHIxIC0gbHIKKwkuZWxzZQorCWxkbWRiCXNwLCB7cjAgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMCAtIGxyCisJLmVuZGlmCisJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRSAtIFNfUEMKKwltb3ZzCXBjLCBscgkJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCisJLmVuZG0KKworCS5tYWNybwlnZXRfdGhyZWFkX2luZm8sIHJkCisJbW92CVxyZCwgc3AsIGxzciAjMTMKKwltb3YJXHJkLCBccmQsIGxzbCAjMTMKKwkuZW5kbQorI2Vsc2UJLyogQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KKwkubWFjcm8Jc3ZjX2V4aXQsIHJwc3IKKwlsZHIJcjAsIFtzcCwgI1NfU1BdCQkJQCB0b3Agb2YgdGhlIHN0YWNrCisJbGRyCXIxLCBbc3AsICNTX1BDXQkJCUAgcmV0dXJuIGFkZHJlc3MKKwl0c3QJcjAsICM0CQkJCUAgb3JpZyBzdGFjayA4LWJ5dGUgYWxpZ25lZD8KKwlzdG1kYglyMCwge3IxLCBccnBzcn0JCQlAIHJmZSBjb250ZXh0CisJbGRtaWEJc3AsIHtyMCAtIHIxMn0KKwlsZHIJbHIsIFtzcCwgI1NfTFJdCisJYWRkZXEJc3AsIHNwLCAjU19GUkFNRV9TSVpFIC0gOAlAIGFsaWduZWQKKwlhZGRuZQlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSA0CUAgbm90IGFsaWduZWQKKwlyZmVpYQlzcCEKKwkuZW5kbQorCisJLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzLCBmYXN0ID0gMCwgb2Zmc2V0ID0gMAorCW1vdglyMiwgc3AKKwlsb2FkX3VzZXJfc3BfbHIgcjIsIHIzLCBcb2Zmc2V0ICsgU19TUAlAIGNhbGxpbmcgc3AsIGxyCisJbGRyCXIxLCBbc3AsICNcb2Zmc2V0ICsgU19QU1JdCUAgZ2V0IGNhbGxpbmcgY3BzcgorCWxkcglsciwgW3NwLCAjXG9mZnNldCArIFNfUENdCUAgZ2V0IHBjCisJYWRkCXNwLCBzcCwgI1xvZmZzZXQgKyBTX1NQCisJbXNyCXNwc3JfY3hzZiwgcjEJCQlAIHNhdmUgaW4gc3Bzcl9zdmMKKwkuaWYJXGZhc3QKKwlsZG1kYglzcCwge3IxIC0gcjEyfQkJCUAgZ2V0IGNhbGxpbmcgcjEgLSByMTIKKwkuZWxzZQorCWxkbWRiCXNwLCB7cjAgLSByMTJ9CQkJQCBnZXQgY2FsbGluZyByMCAtIHIxMgorCS5lbmRpZgorCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1NQCisJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X3RocmVhZF9pbmZvLCByZAorCW1vdglccmQsIHNwCisJbHNyCVxyZCwgXHJkLCAjMTMKKwltb3YJXHJkLCBccmQsIGxzbCAjMTMKKwkuZW5kbQorI2VuZGlmCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCiAvKgogICogVGhlc2UgYXJlIHRoZSByZWdpc3RlcnMgdXNlZCBpbiB0aGUgc3lzY2FsbCBoYW5kbGVyLCBhbmQgYWxsb3cgdXMgdG8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKaW5kZXggOTkxOTUyYy4uOTNhZDU3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMKQEAgLTE0LDYgKzE0LDcgQEAKICNkZWZpbmUgQVRBR19DT1JFIDB4NTQ0MTAwMDEKICNkZWZpbmUgQVRBR19DT1JFX1NJWkUgKCgyKjQgKyAzKjQpID4+IDIpCiAKKwkuYWxpZ24JMgogCS50eXBlCV9fc3dpdGNoX2RhdGEsICVvYmplY3QKIF9fc3dpdGNoX2RhdGE6CiAJLmxvbmcJX19tbWFwX3N3aXRjaGVkCkBAIC01MSw3ICs1Miw5IEBACiAJc3RyY2MJZnAsIFtyNl0sIzQKIAliY2MJMWIKIAotCWxkbWlhCXIzLCB7cjQsIHI1LCByNiwgcjcsIHNwfQorIEFSTSgJbGRtaWEJcjMsIHtyNCwgcjUsIHI2LCByNywgc3B9KQorIFRIVU1CKAlsZG1pYQlyMywge3I0LCByNSwgcjYsIHI3fQkpCisgVEhVTUIoCWxkcglzcCwgW3IzLCAjMTZdCQkpCiAJc3RyCXI5LCBbcjRdCQkJQCBTYXZlIHByb2Nlc3NvciBJRAogCXN0cglyMSwgW3I1XQkJCUAgU2F2ZSBtYWNoaW5lIHR5cGUKIAlzdHIJcjIsIFtyNl0JCQlAIFNhdmUgYXRhZ3MgcG9pbnRlcgpAQCAtMTU1LDcgKzE1OCw4IEBACiAgKi8KIF9fbG9va3VwX3Byb2Nlc3Nvcl90eXBlOgogCWFkcglyMywgM2YKLQlsZG1kYQlyMywge3I1IC0gcjd9CisJbGRtaWEJcjMsIHtyNSAtIHI3fQorCWFkZAlyMywgcjMsICM4CiAJc3ViCXIzLCByMywgcjcJCQlAIGdldCBvZmZzZXQgYmV0d2VlbiB2aXJ0JnBoeXMKIAlhZGQJcjUsIHI1LCByMwkJCUAgY29udmVydCB2aXJ0IGFkZHJlc3NlcyB0bwogCWFkZAlyNiwgcjYsIHIzCQkJQCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCkBAIC0xODUsOSArMTg5LDEwIEBACiAgKiBMb29rIGluIDxhc20vcHJvY2luZm8uaD4gYW5kIGFyY2gvYXJtL2tlcm5lbC9hcmNoLltjaF0gZm9yCiAgKiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBfX3Byb2NfaW5mbyBhbmQgX19hcmNoX2luZm8gc3RydWN0dXJlcy4KICAqLwotCS5sb25nCV9fcHJvY19pbmZvX2JlZ2luCisJLmFsaWduCTIKKzM6CS5sb25nCV9fcHJvY19pbmZvX2JlZ2luCiAJLmxvbmcJX19wcm9jX2luZm9fZW5kCi0zOgkubG9uZwkuCis0OgkubG9uZwkuCiAJLmxvbmcJX19hcmNoX2luZm9fYmVnaW4KIAkubG9uZwlfX2FyY2hfaW5mb19lbmQKIApAQCAtMjAzLDcgKzIwOCw3IEBACiAgKiAgcjUgPSBtYWNoX2luZm8gcG9pbnRlciBpbiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlCiAgKi8KIF9fbG9va3VwX21hY2hpbmVfdHlwZToKLQlhZHIJcjMsIDNiCisJYWRyCXIzLCA0YgogCWxkbWlhCXIzLCB7cjQsIHI1LCByNn0KIAlzdWIJcjMsIHIzLCByNAkJCUAgZ2V0IG9mZnNldCBiZXR3ZWVuIHZpcnQmcGh5cwogCWFkZAlyNSwgcjUsIHIzCQkJQCBjb252ZXJ0IHZpcnQgYWRkcmVzc2VzIHRvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUwppbmRleCBjYzg3ZTE3Li5lNWRmYzI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMKQEAgLTM0LDcgKzM0LDcgQEAKICAqLwogCS5zZWN0aW9uICIudGV4dC5oZWFkIiwgImF4IgogRU5UUlkoc3RleHQpCi0JbXNyCWNwc3JfYywgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFIEAgZW5zdXJlIHN2YyBtb2RlCisJc2V0bW9kZQlQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERSwgcjkgQCBlbnN1cmUgc3ZjIG1vZGUKIAkJCQkJCUAgYW5kIGlycXMgZGlzYWJsZWQKICNpZm5kZWYgQ09ORklHX0NQVV9DUDE1CiAJbGRyCXI5LCA9Q09ORklHX1BST0NFU1NPUl9JRApAQCAtNTAsOCArNTAsMTAgQEAKIAogCWxkcglyMTMsIF9fc3dpdGNoX2RhdGEJCUAgYWRkcmVzcyB0byBqdW1wIHRvIGFmdGVyCiAJCQkJCQlAIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lCi0JYWRyCWxyLCBfX2FmdGVyX3Byb2NfaW5pdAkJQCByZXR1cm4gKFBJQykgYWRkcmVzcwotCWFkZAlwYywgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMKKwlhZHIJbHIsIEJTWU0oX19hZnRlcl9wcm9jX2luaXQpCUAgcmV0dXJuIChQSUMpIGFkZHJlc3MKKyBBUk0oCWFkZAlwYywgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMJKQorIFRIVU1CKAlhZGQJcjEyLCByMTAsICNQUk9DSU5GT19JTklURlVOQwkpCisgVEhVTUIoCW1vdglwYywgcjEyCQkJCSkKIEVORFBST0Moc3RleHQpCiAKIC8qCkBAIC01OSw3ICs2MSwxMCBAQAogICovCiBfX2FmdGVyX3Byb2NfaW5pdDoKICNpZmRlZiBDT05GSUdfQ1BVX0NQMTUKLQltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHJlYWQgY29udHJvbCByZWcKKwkvKgorCSAqIENQMTUgc3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUgcmV0dXJuZWQgaW4gcjAgZnJvbQorCSAqIHRoZSBDUFUgaW5pdCBmdW5jdGlvbi4KKwkgKi8KICNpZmRlZiBDT05GSUdfQUxJR05NRU5UX1RSQVAKIAlvcnIJcjAsIHIwLCAjQ1JfQQogI2Vsc2UKQEAgLTgyLDcgKzg3LDggQEAKIAltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHdyaXRlIGNvbnRyb2wgcmVnCiAjZW5kaWYgLyogQ09ORklHX0NQVV9DUDE1ICovCiAKLQltb3YJcGMsIHIxMwkJCQlAIGNsZWFyIHRoZSBCU1MgYW5kIGp1bXAKKwltb3YJcjMsIHIxMworCW1vdglwYywgcjMJCQkJQCBjbGVhciB0aGUgQlNTIGFuZCBqdW1wCiAJCQkJCQlAIHRvIHN0YXJ0X2tlcm5lbAogRU5EUFJPQyhfX2FmdGVyX3Byb2NfaW5pdCkKIAkubHRvcmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCmluZGV4IDIxZTE3ZGMuLjM4Y2NiZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwpAQCAtNzYsNyArNzYsNyBAQAogICovCiAJLnNlY3Rpb24gIi50ZXh0LmhlYWQiLCAiYXgiCiBFTlRSWShzdGV4dCkKLQltc3IJY3Bzcl9jLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUgQCBlbnN1cmUgc3ZjIG1vZGUKKwlzZXRtb2RlCVBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFLCByOSBAIGVuc3VyZSBzdmMgbW9kZQogCQkJCQkJQCBhbmQgaXJxcyBkaXNhYmxlZAogCW1yYwlwMTUsIDAsIHI5LCBjMCwgYzAJCUAgZ2V0IHByb2Nlc3NvciBpZAogCWJsCV9fbG9va3VwX3Byb2Nlc3Nvcl90eXBlCQlAIHI1PXByb2NpbmZvIHI5PWNwdWlkCkBAIC05Nyw4ICs5NywxMCBAQAogCSAqLwogCWxkcglyMTMsIF9fc3dpdGNoX2RhdGEJCUAgYWRkcmVzcyB0byBqdW1wIHRvIGFmdGVyCiAJCQkJCQlAIG1tdSBoYXMgYmVlbiBlbmFibGVkCi0JYWRyCWxyLCBfX2VuYWJsZV9tbXUJCUAgcmV0dXJuIChQSUMpIGFkZHJlc3MKLQlhZGQJcGMsIHIxMCwgI1BST0NJTkZPX0lOSVRGVU5DCisJYWRyCWxyLCBCU1lNKF9fZW5hYmxlX21tdSkJCUAgcmV0dXJuIChQSUMpIGFkZHJlc3MKKyBBUk0oCWFkZAlwYywgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMJKQorIFRIVU1CKAlhZGQJcjEyLCByMTAsICNQUk9DSU5GT19JTklURlVOQwkpCisgVEhVTUIoCW1vdglwYywgcjEyCQkJCSkKIEVORFBST0Moc3RleHQpCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApCkBAIC0xMTAsNyArMTEyLDcgQEAKIAkgKiB0aGUgcHJvY2Vzc29yIHR5cGUgLSB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIHRoZSBtYWNoaW5lIHR5cGUKIAkgKiBhcyBpdCBoYXMgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBieSB0aGUgcHJpbWFyeSBwcm9jZXNzb3IuCiAJICovCi0JbXNyCWNwc3JfYywgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJc2V0bW9kZQlQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERSwgcjkKIAltcmMJcDE1LCAwLCByOSwgYzAsIGMwCQlAIGdldCBwcm9jZXNzb3IgaWQKIAlibAlfX2xvb2t1cF9wcm9jZXNzb3JfdHlwZQogCW1vdnMJcjEwLCByNQkJCQlAIGludmFsaWQgcHJvY2Vzc29yPwpAQCAtMTIxLDEyICsxMjMsMTUgQEAKIAkgKiBVc2UgdGhlIHBhZ2UgdGFibGVzIHN1cHBsaWVkIGZyb20gIF9fY3B1X3VwLgogCSAqLwogCWFkcglyNCwgX19zZWNvbmRhcnlfZGF0YQotCWxkbWlhCXI0LCB7cjUsIHI3LCByMTN9CQlAIGFkZHJlc3MgdG8ganVtcCB0byBhZnRlcgorCWxkbWlhCXI0LCB7cjUsIHI3LCByMTJ9CQlAIGFkZHJlc3MgdG8ganVtcCB0byBhZnRlcgogCXN1YglyNCwgcjQsIHI1CQkJQCBtbXUgaGFzIGJlZW4gZW5hYmxlZAogCWxkcglyNCwgW3I3LCByNF0JCQlAIGdldCBzZWNvbmRhcnlfZGF0YS5wZ2RpcgotCWFkcglsciwgX19lbmFibGVfbW11CQlAIHJldHVybiBhZGRyZXNzCi0JYWRkCXBjLCByMTAsICNQUk9DSU5GT19JTklURlVOQwlAIGluaXRpYWxpc2UgcHJvY2Vzc29yCi0JCQkJCQlAIChyZXR1cm4gY29udHJvbCByZWcpCisJYWRyCWxyLCBCU1lNKF9fZW5hYmxlX21tdSkJCUAgcmV0dXJuIGFkZHJlc3MKKwltb3YJcjEzLCByMTIJCQlAIF9fc2Vjb25kYXJ5X3N3aXRjaGVkIGFkZHJlc3MKKyBBUk0oCWFkZAlwYywgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMJKSBAIGluaXRpYWxpc2UgcHJvY2Vzc29yCisJCQkJCQkgIEAgKHJldHVybiBjb250cm9sIHJlZykKKyBUSFVNQigJYWRkCXIxMiwgcjEwLCAjUFJPQ0lORk9fSU5JVEZVTkMJKQorIFRIVU1CKAltb3YJcGMsIHIxMgkJCQkpCiBFTkRQUk9DKHNlY29uZGFyeV9zdGFydHVwKQogCiAJLyoKQEAgLTE5Myw4ICsxOTgsOCBAQAogCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgd3JpdGUgY29udHJvbCByZWcKIAltcmMJcDE1LCAwLCByMywgYzAsIGMwLCAwCQlAIHJlYWQgaWQgcmVnCiAJbW92CXIzLCByMwotCW1vdglyMywgcjMKLQltb3YJcGMsIHIxMworCW1vdglyMywgcjEzCisJbW92CXBjLCByMwogRU5EUFJPQyhfX3R1cm5fbW11X29uKQogCiAKQEAgLTIzNSw3ICsyNDAsOCBAQAogCSAqIHdpbGwgYmUgcmVtb3ZlZCBieSBwYWdpbmdfaW5pdCgpLiAgV2UgdXNlIG91ciBjdXJyZW50IHByb2dyYW0KIAkgKiBjb3VudGVyIHRvIGRldGVybWluZSBjb3JyZXNwb25kaW5nIHNlY3Rpb24gYmFzZSBhZGRyZXNzLgogCSAqLwotCW1vdglyNiwgcGMsIGxzciAjMjAJCQlAIHN0YXJ0IG9mIGtlcm5lbCBzZWN0aW9uCisJbW92CXI2LCBwYworCW1vdglyNiwgcjYsIGxzciAjMjAJCQlAIHN0YXJ0IG9mIGtlcm5lbCBzZWN0aW9uCiAJb3JyCXIzLCByNywgcjYsIGxzbCAjMjAJCUAgZmxhZ3MgKyBrZXJuZWwgYmFzZQogCXN0cglyMywgW3I0LCByNiwgbHNsICMyXQkJQCBpZGVudGl0eSBtYXBwaW5nCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwppbmRleCBiN2MzNDkwLi5jOWE4NjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCkBAIC04Niw3ICs4Niw3IEBACiB1bmxvY2s6CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgewotI2lmZGVmIENPTkZJR19BUkNIX0FDT1JOCisjaWZkZWYgQ09ORklHX0ZJUQogCQlzaG93X2ZpcV9saXN0KHAsIHYpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCmluZGV4IGJhYzAzYzguLmYyOGM1ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvYzsKIAkJRWxmMzJfU3ltICpzeW07CiAJCXMzMiBvZmZzZXQ7CisJCXUzMiB1cHBlciwgbG93ZXIsIHNpZ24sIGoxLCBqMjsKIAogCQlvZmZzZXQgPSBFTEYzMl9SX1NZTShyZWwtPnJfaW5mbyk7CiAJCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IChzeW1zZWMtPnNoX3NpemUgLyBzaXplb2YoRWxmMzJfU3ltKSkpIHsKQEAgLTE4NCw2ICsxODUsNTggQEAKIAkJCQkJKG9mZnNldCAmIDB4MGZmZik7CiAJCQlicmVhazsKIAorCQljYXNlIFJfQVJNX1RITV9DQUxMOgorCQljYXNlIFJfQVJNX1RITV9KVU1QMjQ6CisJCQl1cHBlciA9ICoodTE2ICopbG9jOworCQkJbG93ZXIgPSAqKHUxNiAqKShsb2MgKyAyKTsKKworCQkJLyoKKwkJCSAqIDI1IGJpdCBzaWduZWQgYWRkcmVzcyByYW5nZSAoVGh1bWItMiBCTCBhbmQgQi5XCisJCQkgKiBpbnN0cnVjdGlvbnMpOgorCQkJICogICBTOkkxOkkyOmltbTEwOmltbTExOjAKKwkJCSAqIHdoZXJlOgorCQkJICogICBTICAgICA9IHVwcGVyWzEwXSAgID0gb2Zmc2V0WzI0XQorCQkJICogICBJMSAgICA9IH4oSjEgXiBTKSAgID0gb2Zmc2V0WzIzXQorCQkJICogICBJMiAgICA9IH4oSjIgXiBTKSAgID0gb2Zmc2V0WzIyXQorCQkJICogICBpbW0xMCA9IHVwcGVyWzk6MF0gID0gb2Zmc2V0WzIxOjEyXQorCQkJICogICBpbW0xMSA9IGxvd2VyWzEwOjBdID0gb2Zmc2V0WzExOjFdCisJCQkgKiAgIEoxICAgID0gbG93ZXJbMTNdCisJCQkgKiAgIEoyICAgID0gbG93ZXJbMTFdCisJCQkgKi8KKwkJCXNpZ24gPSAodXBwZXIgPj4gMTApICYgMTsKKwkJCWoxID0gKGxvd2VyID4+IDEzKSAmIDE7CisJCQlqMiA9IChsb3dlciA+PiAxMSkgJiAxOworCQkJb2Zmc2V0ID0gKHNpZ24gPDwgMjQpIHwgKCh+KGoxIF4gc2lnbikgJiAxKSA8PCAyMykgfAorCQkJCSgofihqMiBeIHNpZ24pICYgMSkgPDwgMjIpIHwKKwkJCQkoKHVwcGVyICYgMHgwM2ZmKSA8PCAxMikgfAorCQkJCSgobG93ZXIgJiAweDA3ZmYpIDw8IDEpOworCQkJaWYgKG9mZnNldCAmIDB4MDEwMDAwMDApCisJCQkJb2Zmc2V0IC09IDB4MDIwMDAwMDA7CisJCQlvZmZzZXQgKz0gc3ltLT5zdF92YWx1ZSAtIGxvYzsKKworCQkJLyogb25seSBUaHVtYiBhZGRyZXNzZXMgYWxsb3dlZCAobm8gaW50ZXJ3b3JraW5nKSAqLworCQkJaWYgKCEob2Zmc2V0ICYgMSkgfHwKKwkJCSAgICBvZmZzZXQgPD0gKHMzMikweGZmMDAwMDAwIHx8CisJCQkgICAgb2Zmc2V0ID49IChzMzIpMHgwMTAwMDAwMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IHJlbG9jYXRpb24gb3V0IG9mIHJhbmdlLCBzZWN0aW9uICIKKwkJCQkgICAgICAgIiVkIHJlbG9jICVkIHN5bSAnJXMnXG4iLCBtb2R1bGUtPm5hbWUsCisJCQkJICAgICAgIHJlbGluZGV4LCBpLCBzdHJ0YWIgKyBzeW0tPnN0X25hbWUpOworCQkJCXJldHVybiAtRU5PRVhFQzsKKwkJCX0KKworCQkJc2lnbiA9IChvZmZzZXQgPj4gMjQpICYgMTsKKwkJCWoxID0gc2lnbiBeICh+KG9mZnNldCA+PiAyMykgJiAxKTsKKwkJCWoyID0gc2lnbiBeICh+KG9mZnNldCA+PiAyMikgJiAxKTsKKwkJCSoodTE2ICopbG9jID0gKHUxNikoKHVwcGVyICYgMHhmODAwKSB8IChzaWduIDw8IDEwKSB8CisJCQkJCSAgICAoKG9mZnNldCA+PiAxMikgJiAweDAzZmYpKTsKKwkJCSoodTE2ICopKGxvYyArIDIpID0gKHUxNikoKGxvd2VyICYgMHhkMDAwKSB8CisJCQkJCQkgIChqMSA8PCAxMykgfCAoajIgPDwgMTEpIHwKKwkJCQkJCSAgKChvZmZzZXQgPj4gMSkgJiAweDA3ZmYpKTsKKwkJCXVwcGVyID0gKih1MTYgKilsb2M7CisJCQlsb3dlciA9ICoodTE2ICopKGxvYyArIDIpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gcmVsb2NhdGlvbjogJXVcbiIsCiAJCQkgICAgICAgbW9kdWxlLT5uYW1lLCBFTEYzMl9SX1RZUEUocmVsLT5yX2luZm8pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDM5MTk2ZGYuLjc5MGZiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMzg4LDcgKzM4OCw3IEBACiAJcmVncy5BUk1fcjIgPSAodW5zaWduZWQgbG9uZylmbjsKIAlyZWdzLkFSTV9yMyA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfZXhpdDsKIAlyZWdzLkFSTV9wYyA9ICh1bnNpZ25lZCBsb25nKWtlcm5lbF90aHJlYWRfaGVscGVyOwotCXJlZ3MuQVJNX2Nwc3IgPSBTVkNfTU9ERSB8IFBTUl9FTkRTVEFURTsKKwlyZWdzLkFSTV9jcHNyID0gU1ZDX01PREUgfCBQU1JfRU5EU1RBVEUgfCBQU1JfSVNFVFNUQVRFOwogCiAJcmV0dXJuIGRvX2ZvcmsoZmxhZ3N8Q0xPTkVfVk18Q0xPTkVfVU5UUkFDRUQsIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCA4OTg4MmExLi5hMmVhMzg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC01MjEsNyArNTIxLDEzIEBACiAJCXJldHVybiAtRUlPOwogCiAJdG1wID0gMDsKLQlpZiAob2ZmIDwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSkKKwlpZiAob2ZmID09IFBUX1RFWFRfQUREUikKKwkJdG1wID0gdHNrLT5tbS0+c3RhcnRfY29kZTsKKwllbHNlIGlmIChvZmYgPT0gUFRfREFUQV9BRERSKQorCQl0bXAgPSB0c2stPm1tLT5zdGFydF9kYXRhOworCWVsc2UgaWYgKG9mZiA9PSBQVF9URVhUX0VORF9BRERSKQorCQl0bXAgPSB0c2stPm1tLT5lbmRfY29kZTsKKwllbHNlIGlmIChvZmYgPCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQogCQl0bXAgPSBnZXRfdXNlcl9yZWcodHNrLCBvZmYgPj4gMik7CiAKIAlyZXR1cm4gcHV0X3VzZXIodG1wLCByZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3JldHVybl9hZGRyZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcmV0dXJuX2FkZHJlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjI0NmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3JldHVybl9hZGRyZXNzLmMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIGFyY2gvYXJtL2tlcm5lbC9yZXR1cm5fYWRkcmVzcy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFV3ZSBLbGVpbmUtS29lbmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+CisgKiBmb3IgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19GUkFNRV9QT0lOVEVSKSAmJiAhZGVmaW5lZChDT05GSUdfQVJNX1VOV0lORCkKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KKworc3RydWN0IHJldHVybl9hZGRyZXNzX2RhdGEgeworCXVuc2lnbmVkIGludCBsZXZlbDsKKwl2b2lkICphZGRyOworfTsKKworc3RhdGljIGludCBzYXZlX3JldHVybl9hZGRyKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgcmV0dXJuX2FkZHJlc3NfZGF0YSAqZGF0YSA9IGQ7CisKKwlpZiAoIWRhdGEtPmxldmVsKSB7CisJCWRhdGEtPmFkZHIgPSAodm9pZCAqKWZyYW1lLT5scjsKKworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQktLWRhdGEtPmxldmVsOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3ZvaWQgKnJldHVybl9hZGRyZXNzKHVuc2lnbmVkIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgcmV0dXJuX2FkZHJlc3NfZGF0YSBkYXRhOworCXN0cnVjdCBzdGFja2ZyYW1lIGZyYW1lOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgY3VycmVudF9zcCBhc20gKCJzcCIpOworCisJZGF0YS5sZXZlbCA9IGxldmVsICsgMTsKKworCWZyYW1lLmZwID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX2ZyYW1lX2FkZHJlc3MoMCk7CisJZnJhbWUuc3AgPSBjdXJyZW50X3NwOworCWZyYW1lLmxyID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCWZyYW1lLnBjID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX2FkZHJlc3M7CisKKwl3YWxrX3N0YWNrZnJhbWUoJmZyYW1lLCBzYXZlX3JldHVybl9hZGRyLCAmZGF0YSk7CisKKwlpZiAoIWRhdGEubGV2ZWwpCisJCXJldHVybiBkYXRhLmFkZHI7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworI2Vsc2UgLyogaWYgZGVmaW5lZChDT05GSUdfRlJBTUVfUE9JTlRFUikgJiYgIWRlZmluZWQoQ09ORklHX0FSTV9VTldJTkQpICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUk1fVU5XSU5EKQorI3dhcm5pbmcgIlRPRE86IHJldHVybl9hZGRyZXNzIHNob3VsZCB1c2UgdW53aW5kIHRhYmxlcyIKKyNlbmRpZgorCit2b2lkICpyZXR1cm5fYWRkcmVzcyh1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZiAvKiBpZiBkZWZpbmVkKENPTkZJR19GUkFNRV9QT0lOVEVSKSAmJiAhZGVmaW5lZChDT05GSUdfQVJNX1VOV0lORCkgLyBlbHNlICovCisKK0VYUE9SVF9TWU1CT0xfR1BMKHJldHVybl9hZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggYmM1ZTQxMi4uZDRkNGY3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCisjaW5jbHVkZSA8YXNtL3VuaWZpZWQuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CkBAIC0zMjcsMjUgKzMyOCwzOCBAQAogCX0KIAogCS8qCisJICogRGVmaW5lIHRoZSBwbGFjZW1lbnQgY29uc3RyYWludCBmb3IgdGhlIGlubGluZSBhc20gZGlyZWN0aXZlIGJlbG93LgorCSAqIEluIFRodW1iLTIsIG1zciB3aXRoIGFuIGltbWVkaWF0ZSB2YWx1ZSBpcyBub3QgYWxsb3dlZC4KKwkgKi8KKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorI2RlZmluZSBQTEMJInIiCisjZWxzZQorI2RlZmluZSBQTEMJIkkiCisjZW5kaWYKKworCS8qCiAJICogc2V0dXAgc3RhY2tzIGZvciByZS1lbnRyYW50IGV4Y2VwdGlvbiBoYW5kbGVycwogCSAqLwogCV9fYXNtX18gKAogCSJtc3IJY3Bzcl9jLCAlMVxuXHQiCi0JImFkZAlzcCwgJTAsICUyXG5cdCIKKwkiYWRkCXIxNCwgJTAsICUyXG5cdCIKKwkibW92CXNwLCByMTRcblx0IgogCSJtc3IJY3Bzcl9jLCAlM1xuXHQiCi0JImFkZAlzcCwgJTAsICU0XG5cdCIKKwkiYWRkCXIxNCwgJTAsICU0XG5cdCIKKwkibW92CXNwLCByMTRcblx0IgogCSJtc3IJY3Bzcl9jLCAlNVxuXHQiCi0JImFkZAlzcCwgJTAsICU2XG5cdCIKKwkiYWRkCXIxNCwgJTAsICU2XG5cdCIKKwkibW92CXNwLCByMTRcblx0IgogCSJtc3IJY3Bzcl9jLCAlNyIKIAkgICAgOgogCSAgICA6ICJyIiAoc3RrKSwKLQkgICAgICAiSSIgKFBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IElSUV9NT0RFKSwKKwkgICAgICBQTEMgKFBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IElSUV9NT0RFKSwKIAkgICAgICAiSSIgKG9mZnNldG9mKHN0cnVjdCBzdGFjaywgaXJxWzBdKSksCi0JICAgICAgIkkiIChQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBBQlRfTU9ERSksCisJICAgICAgUExDIChQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBBQlRfTU9ERSksCiAJICAgICAgIkkiIChvZmZzZXRvZihzdHJ1Y3Qgc3RhY2ssIGFidFswXSkpLAotCSAgICAgICJJIiAoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgVU5EX01PREUpLAorCSAgICAgIFBMQyAoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgVU5EX01PREUpLAogCSAgICAgICJJIiAob2Zmc2V0b2Yoc3RydWN0IHN0YWNrLCB1bmRbMF0pKSwKLQkgICAgICAiSSIgKFBTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFKQorCSAgICAgIFBMQyAoUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUpCiAJICAgIDogInIxNCIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYjc2ZmUwNi4uMTQyM2EzNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwpAQCAtNDgsNTcgKzQ4LDIyIEBACiAJTU9WX1I3X05SX1JUX1NJR1JFVFVSTiwgU1dJX1NZU19SVF9TSUdSRVRVUk4sIFNXSV9USFVNQl9SVF9TSUdSRVRVUk4sCiB9OwogCi1zdGF0aWMgaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGludCBzeXNjYWxsKTsKLQogLyoKICAqIGF0b21pY2FsbHkgc3dhcCBpbiB0aGUgbmV3IHNpZ25hbCBtYXNrLCBhbmQgd2FpdCBmb3IgYSBzaWduYWwuCiAgKi8KLWFzbWxpbmthZ2UgaW50IHN5c19zaWdzdXNwZW5kKGludCByZXN0YXJ0LCB1bnNpZ25lZCBsb25nIG9sZG1hc2ssIG9sZF9zaWdzZXRfdCBtYXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK2FzbWxpbmthZ2UgaW50IHN5c19zaWdzdXNwZW5kKGludCByZXN0YXJ0LCB1bnNpZ25lZCBsb25nIG9sZG1hc2ssIG9sZF9zaWdzZXRfdCBtYXNrKQogewotCXNpZ3NldF90IHNhdmVzZXQ7Ci0KIAltYXNrICY9IF9CTE9DS0FCTEU7CiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CisJY3VycmVudC0+c2F2ZWRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7CiAJc2lnaW5pdHNldCgmY3VycmVudC0+YmxvY2tlZCwgbWFzayk7CiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXJlZ3MtPkFSTV9yMCA9IC1FSU5UUjsKIAotCXdoaWxlICgxKSB7Ci0JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQlzY2hlZHVsZSgpOwotCQlpZiAoZG9fc2lnbmFsKCZzYXZlc2V0LCByZWdzLCAwKSkKLQkJCXJldHVybiByZWdzLT5BUk1fcjA7Ci0JfQotfQotCi1hc21saW5rYWdlIGludAotc3lzX3J0X3NpZ3N1c3BlbmQoc2lnc2V0X3QgX191c2VyICp1bmV3c2V0LCBzaXplX3Qgc2lnc2V0c2l6ZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc2lnc2V0X3Qgc2F2ZXNldCwgbmV3c2V0OwotCi0JLyogWFhYOiBEb24ndCBwcmVjbHVkZSBoYW5kbGluZyBkaWZmZXJlbnQgc2l6ZWQgc2lnc2V0X3Qncy4gKi8KLQlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2Yoc2lnc2V0X3QpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3c2V0LCB1bmV3c2V0LCBzaXplb2YobmV3c2V0KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXNpZ2RlbHNldG1hc2soJm5ld3NldCwgfl9CTE9DS0FCTEUpOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7Ci0JY3VycmVudC0+YmxvY2tlZCA9IG5ld3NldDsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JcmVncy0+QVJNX3IwID0gLUVJTlRSOwotCi0Jd2hpbGUgKDEpIHsKLQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCXNjaGVkdWxlKCk7Ci0JCWlmIChkb19zaWduYWwoJnNhdmVzZXQsIHJlZ3MsIDApKQotCQkJcmV0dXJuIHJlZ3MtPkFSTV9yMDsKLQl9CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJc2NoZWR1bGUoKTsKKwlzZXRfcmVzdG9yZV9zaWdtYXNrKCk7CisJcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKIH0KIAogYXNtbGlua2FnZSBpbnQgCkBAIC01NDYsNyArNTExLDcgQEAKIC8qCiAgKiBPSywgd2UncmUgaW52b2tpbmcgYSBoYW5kbGVyCiAgKi8JCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkgICAgICBzaWdpbmZvX3QgKmluZm8sIHNpZ3NldF90ICpvbGRzZXQsCiAJICAgICAgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBpbnQgc3lzY2FsbCkKQEAgLTU5Nyw3ICs1NjIsNyBAQAogCiAJaWYgKHJldCAhPSAwKSB7CiAJCWZvcmNlX3NpZ3NlZ3Yoc2lnLCB0c2spOwotCQlyZXR1cm47CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyoKQEAgLTYxMSw2ICs1NzYsNyBAQAogCXJlY2FsY19zaWdwZW5kaW5nKCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ0c2stPnNpZ2hhbmQtPnNpZ2xvY2spOwogCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC02MjIsNyArNTg4LDcgQEAKICAqIHRoZSBrZXJuZWwgY2FuIGhhbmRsZSwgYW5kIHRoZW4gd2UgYnVpbGQgYWxsIHRoZSB1c2VyLWxldmVsIHNpZ25hbCBoYW5kbGluZwogICogc3RhY2stZnJhbWVzIGluIG9uZSBnbyBhZnRlciB0aGF0LgogICovCi1zdGF0aWMgaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHN5c2NhbGwpCitzdGF0aWMgdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzeXNjYWxsKQogewogCXN0cnVjdCBrX3NpZ2FjdGlvbiBrYTsKIAlzaWdpbmZvX3QgaW5mbzsKQEAgLTYzNSw3ICs2MDEsNyBAQAogCSAqIGlmIHNvLgogCSAqLwogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJaWYgKHRyeV90b19mcmVlemUoKSkKIAkJZ290byBub19zaWduYWw7CkBAIC02NDQsOSArNjEwLDI0IEBACiAKIAlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKIAlpZiAoc2lnbnIgPiAwKSB7Ci0JCWhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncywgc3lzY2FsbCk7CisJCXNpZ3NldF90ICpvbGRzZXQ7CisKKwkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKKwkJZWxzZQorCQkJb2xkc2V0ID0gJmN1cnJlbnQtPmJsb2NrZWQ7CisJCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MsIHN5c2NhbGwpID09IDApIHsKKwkJCS8qCisJCQkgKiBBIHNpZ25hbCB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZDsgdGhlIHNhdmVkCisJCQkgKiBzaWdtYXNrIHdpbGwgaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgc2lnbmFsIGZyYW1lLAorCQkJICogYW5kIHdpbGwgYmUgcmVzdG9yZWQgYnkgc2lncmV0dXJuLCBzbyB3ZSBjYW4gc2ltcGx5CisJCQkgKiBjbGVhciB0aGUgVElGX1JFU1RPUkVfU0lHTUFTSyBmbGFnLgorCQkJICovCisJCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkKKwkJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwkJfQogCQlzaW5nbGVfc3RlcF9zZXQoY3VycmVudCk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAgbm9fc2lnbmFsOgpAQCAtNjk4LDE2ICs2NzksMjMgQEAKIAkJICAgIHJlZ3MtPkFSTV9yMCA9PSAtRVJFU1RBUlROT0lOVFIpIHsKIAkJCXNldHVwX3N5c2NhbGxfcmVzdGFydChyZWdzKTsKIAkJfQorCisJCS8qIElmIHRoZXJlJ3Mgbm8gc2lnbmFsIHRvIGRlbGl2ZXIsIHdlIGp1c3QgcHV0IHRoZSBzYXZlZCBzaWdtYXNrCisJCSAqIGJhY2suCisJCSAqLworCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKSkgeworCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2ssIE5VTEwpOworCQl9CiAJfQogCXNpbmdsZV9zdGVwX3NldChjdXJyZW50KTsKLQlyZXR1cm4gMDsKIH0KIAogYXNtbGlua2FnZSB2b2lkCiBkb19ub3RpZnlfcmVzdW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgdGhyZWFkX2ZsYWdzLCBpbnQgc3lzY2FsbCkKIHsKIAlpZiAodGhyZWFkX2ZsYWdzICYgX1RJRl9TSUdQRU5ESU5HKQotCQlkb19zaWduYWwoJmN1cnJlbnQtPmJsb2NrZWQsIHJlZ3MsIHN5c2NhbGwpOworCQlkb19zaWduYWwocmVncywgc3lzY2FsbCk7CiAKIAlpZiAodGhyZWFkX2ZsYWdzICYgX1RJRl9OT1RJRllfUkVTVU1FKSB7CiAJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9OT1RJRllfUkVTVU1FKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IDlmNDQ0ZTUuLjIwYjc0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMjEsNyArMjEsNyBAQAogICogTm90ZSB0aGF0IHdpdGggZnJhbWVwb2ludGVyIGVuYWJsZWQsIGV2ZW4gdGhlIGxlYWYgZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUKICAqIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSwgdGhlcmVmb3JlIHdlIGNhbiBpZ25vcmUgdGhlIExSIHZhbHVlIGluIHRoaXMgY2FzZS4KICAqLwotaW50IHVud2luZF9mcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUpCitpbnQgbm90cmFjZSB1bndpbmRfZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lKQogewogCXVuc2lnbmVkIGxvbmcgaGlnaCwgbG93OwogCXVuc2lnbmVkIGxvbmcgZnAgPSBmcmFtZS0+ZnA7CkBAIC00Myw3ICs0Myw3IEBACiB9CiAjZW5kaWYKIAotdm9pZCB3YWxrX3N0YWNrZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lLAordm9pZCBub3RyYWNlIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUsCiAJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBzdGFja2ZyYW1lICosIHZvaWQgKiksIHZvaWQgKmRhdGEpCiB7CiAJd2hpbGUgKDEpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwppbmRleCBkZDU2ZTExLi4zOWJhZjExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCkBAIC02Miw3ICs2MiwxMSBAQAogfTsKIAogZW51bSByZWdzIHsKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorCUZQID0gNywKKyNlbHNlCiAJRlAgPSAxMSwKKyNlbmRpZgogCVNQID0gMTMsCiAJTFIgPSAxNCwKIAlQQyA9IDE1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYXNobGRpMy5TIGIvYXJjaC9hcm0vbGliL2FzaGxkaTMuUwppbmRleCAxMTU0ZDkyLi42MzhkZWIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvYXNobGRpMy5TCisrKyBiL2FyY2gvYXJtL2xpYi9hc2hsZGkzLlMKQEAgLTQzLDcgKzQzLDkgQEAKIAlyc2IJaXAsIHIyLCAjMzIKIAltb3ZtaQlhaCwgYWgsIGxzbCByMgogCW1vdnBsCWFoLCBhbCwgbHNsIHIzCi0Jb3JybWkJYWgsIGFoLCBhbCwgbHNyIGlwCisgQVJNKAlvcnJtaQlhaCwgYWgsIGFsLCBsc3IgaXAJKQorIFRIVU1CKAlsc3JtaQlyMywgYWwsIGlwCQkpCisgVEhVTUIoCW9ycm1pCWFoLCBhaCwgcjMJCSkKIAltb3YJYWwsIGFsLCBsc2wgcjIKIAltb3YJcGMsIGxyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9hc2hyZGkzLlMgYi9hcmNoL2FybS9saWIvYXNocmRpMy5TCmluZGV4IDlmOGIzNTUuLjAxNWU4YWE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvYXNocmRpMy5TCisrKyBiL2FyY2gvYXJtL2xpYi9hc2hyZGkzLlMKQEAgLTQzLDcgKzQzLDkgQEAKIAlyc2IJaXAsIHIyLCAjMzIKIAltb3ZtaQlhbCwgYWwsIGxzciByMgogCW1vdnBsCWFsLCBhaCwgYXNyIHIzCi0Jb3JybWkJYWwsIGFsLCBhaCwgbHNsIGlwCisgQVJNKAlvcnJtaQlhbCwgYWwsIGFoLCBsc2wgaXAJKQorIFRIVU1CKAlsc2xtaQlyMywgYWgsIGlwCQkpCisgVEhVTUIoCW9ycm1pCWFsLCBhbCwgcjMJCSkKIAltb3YJYWgsIGFoLCBhc3IgcjIKIAltb3YJcGMsIGxyCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUyBiL2FyY2gvYXJtL2xpYi9iYWNrdHJhY2UuUwppbmRleCBiMDk1MWQwLi5hYWY3MjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvYmFja3RyYWNlLlMKKysrIGIvYXJjaC9hcm0vbGliL2JhY2t0cmFjZS5TCkBAIC0zOCw3ICszOCw5IEBACiAJCWJlcQlub19mcmFtZQkJQCB3ZSBoYXZlIG5vIHN0YWNrIGZyYW1lcwogCiAJCXRzdAlyMSwgIzB4MTAJCUAgMjYgb3IgMzItYml0IG1vZGU/Ci0JCW1vdmVxCW1hc2ssICMweGZjMDAwMDAzCUAgbWFzayBmb3IgMjYtYml0CisgQVJNKAkJbW92ZXEJbWFzaywgIzB4ZmMwMDAwMDMJKQorIFRIVU1CKAkJbW92ZXEJbWFzaywgIzB4ZmMwMDAwMDAJKQorIFRIVU1CKAkJb3JyZXEJbWFzaywgIzB4MDMJCSkKIAkJbW92bmUJbWFzaywgIzAJCUAgbWFzayBmb3IgMzItYml0CiAKIDE6CQlzdG1mZAlzcCEsIHtwY30JCUAgY2FsY3VsYXRlIG9mZnNldCBvZiBQQyBzdG9yZWQKQEAgLTEyNiw3ICsxMjgsOSBAQAogCQltb3YJcmVnLCAjMTAKIAkJbW92CXI3LCAjMAogMToJCW1vdglyMywgIzEKLQkJdHN0CWluc3RyLCByMywgbHNsIHJlZworIEFSTSgJCXRzdAlpbnN0ciwgcjMsIGxzbCByZWcJKQorIFRIVU1CKAkJbHNsCXIzLCByZWcJCQkpCisgVEhVTUIoCQl0c3QJaW5zdHIsIHIzCQkpCiAJCWJlcQkyZgogCQlhZGQJcjcsIHI3LCAjMQogCQl0ZXEJcjcsICM2CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvYml0b3BzLmggYi9hcmNoL2FybS9saWIvYml0b3BzLmgKaW5kZXggYzdmMjYyNy4uZDQyMjUyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2JpdG9wcy5oCisrKyBiL2FyY2gvYXJtL2xpYi9iaXRvcHMuaApAQCAtNjAsOCArNjAsOCBAQAogCXRzdAlyMiwgcjAsIGxzbCByMwogCVxpbnN0cglyMiwgcjIsIHIwLCBsc2wgcjMKIAlcc3RvcmUJcjIsIFtyMV0KLQlyZXN0b3JlX2lycXMgaXAKIAltb3ZlcQlyMCwgIzAKKwlyZXN0b3JlX2lycXMgaXAKIAltb3YJcGMsIGxyCiAJLmVuZG0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NsZWFyX3VzZXIuUyBiL2FyY2gvYXJtL2xpYi9jbGVhcl91c2VyLlMKaW5kZXggODQ0ZjU2Ny4uMTI3OWFiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2NsZWFyX3VzZXIuUworKysgYi9hcmNoL2FybS9saWIvY2xlYXJfdXNlci5TCkBAIC0yNywyMSArMjcsMjAgQEAKIAkJYW5kcwlpcCwgcjAsICMzCiAJCWJlcQkxZgogCQljbXAJaXAsICMyCi1VU0VSKAkJc3RyYnQJcjIsIFtyMF0sICMxKQotVVNFUigJCXN0cmxlYnQJcjIsIFtyMF0sICMxKQotVVNFUigJCXN0cmx0YnQJcjIsIFtyMF0sICMxKQorCQlzdHJ1c3IJcjIsIHIwLCAxCisJCXN0cnVzcglyMiwgcjAsIDEsIGxlCisJCXN0cnVzcglyMiwgcjAsIDEsIGx0CiAJCXJzYglpcCwgaXAsICM0CiAJCXN1YglyMSwgcjEsIGlwCQlAICA3ICA2ICA1ICA0ICAzICAyICAxCiAxOgkJc3VicwlyMSwgcjEsICM4CQlAIC0xIC0yIC0zIC00IC01IC02IC03Ci1VU0VSKAkJc3RycGx0CXIyLCBbcjBdLCAjNCkKLVVTRVIoCQlzdHJwbHQJcjIsIFtyMF0sICM0KQorCQlzdHJ1c3IJcjIsIHIwLCA0LCBwbCwgcmVwdD0yCiAJCWJwbAkxYgogCQlhZGRzCXIxLCByMSwgIzQJCUAgIDMgIDIgIDEgIDAgLTEgLTIgLTMKLVVTRVIoCQlzdHJwbHQJcjIsIFtyMF0sICM0KQorCQlzdHJ1c3IJcjIsIHIwLCA0LCBwbAogMjoJCXRzdAlyMSwgIzIJCQlAIDF4IDF4IDB4IDB4IDF4IDF4IDB4Ci1VU0VSKAkJc3RybmVidAlyMiwgW3IwXSwgIzEpCi1VU0VSKAkJc3RybmVidAlyMiwgW3IwXSwgIzEpCisJCXN0cnVzcglyMiwgcjAsIDEsIG5lLCByZXB0PTIKIAkJdHN0CXIxLCAjMQkJCUAgeDEgeDAgeDEgeDAgeDEgeDAgeDEKKwkJaXQJbmUJCQlAIGV4cGxpY2l0IElUIG5lZWRlZCBmb3IgdGhlIGxhYmVsCiBVU0VSKAkJc3RybmVidAlyMiwgW3IwXSkKIAkJbW92CXIwLCAjMAogCQlsZG1mZAlzcCEsIHtyMSwgcGN9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvY29weV9mcm9tX3VzZXIuUyBiL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCmluZGV4IDU2Nzk5YTEuLmU0ZmUxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9jb3B5X2Zyb21fdXNlci5TCkBAIC0zMywxMSArMzMsMTUgQEAKICAqCU51bWJlciBvZiBieXRlcyBOT1QgY29waWVkLgogICovCiAKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKyNkZWZpbmUgTERSMVdfU0hJRlQJMAorI2Vsc2UKKyNkZWZpbmUgTERSMVdfU0hJRlQJMQorI2VuZGlmCisjZGVmaW5lIFNUUjFXX1NISUZUCTAKKwogCS5tYWNybyBsZHIxdyBwdHIgcmVnIGFib3J0Ci0xMDA6CWxkcnQgXHJlZywgW1xwdHJdLCAjNAotCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCS5sb25nIDEwMGIsIFxhYm9ydAotCS5wcmV2aW91cworCWxkcnVzcglccmVnLCBccHRyLCA0LCBhYm9ydD1cYWJvcnQKIAkuZW5kbQogCiAJLm1hY3JvIGxkcjR3IHB0ciByZWcxIHJlZzIgcmVnMyByZWc0IGFib3J0CkBAIC01MywxNCArNTcsMTEgQEAKIAkuZW5kbQogCiAJLm1hY3JvIGxkcjFiIHB0ciByZWcgY29uZD1hbCBhYm9ydAotMTAwOglsZHJcY29uZFwoKWJ0IFxyZWcsIFtccHRyXSwgIzEKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkubG9uZyAxMDBiLCBcYWJvcnQKLQkucHJldmlvdXMKKwlsZHJ1c3IJXHJlZywgXHB0ciwgMSwgXGNvbmQsIGFib3J0PVxhYm9ydAogCS5lbmRtCiAKIAkubWFjcm8gc3RyMXcgcHRyIHJlZyBhYm9ydAotCXN0ciBccmVnLCBbXHB0cl0sICM0CisJVyhzdHIpIFxyZWcsIFtccHRyXSwgIzQKIAkuZW5kbQogCiAJLm1hY3JvIHN0cjh3IHB0ciByZWcxIHJlZzIgcmVnMyByZWc0IHJlZzUgcmVnNiByZWc3IHJlZzggYWJvcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jb3B5X3RlbXBsYXRlLlMgYi9hcmNoL2FybS9saWIvY29weV90ZW1wbGF0ZS5TCmluZGV4IDEzOWNjZTYuLjgwNWUzZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X3RlbXBsYXRlLlMKKysrIGIvYXJjaC9hcm0vbGliL2NvcHlfdGVtcGxhdGUuUwpAQCAtNTcsNiArNTcsMTMgQEAKICAqCiAgKglSZXN0b3JlIHJlZ2lzdGVycyB3aXRoIHRoZSB2YWx1ZXMgcHJldmlvdXNseSBzYXZlZCB3aXRoIHRoZQogICoJJ3ByZXNlcnYnIG1hY3JvLiBDYWxsZWQgdXBvbiBjb2RlIHRlcm1pbmF0aW9uLgorICoKKyAqIExEUjFXX1NISUZUCisgKiBTVFIxV19TSElGVAorICoKKyAqCUNvcnJlY3Rpb24gdG8gYmUgYXBwbGllZCB0byB0aGUgImlwIiByZWdpc3RlciB3aGVuIGJyYW5jaGluZyBpbnRvCisgKgl0aGUgbGRyMXcgb3Igc3RyMXcgaW5zdHJ1Y3Rpb25zIChzb21lIG9mIHRoZXNlIG1hY3JvcyBtYXkgZXhwYW5kIHRvCisgKgl0aGFuIG9uZSAzMmJpdCBpbnN0cnVjdGlvbiBpbiBUaHVtYi0yKQogICovCiAKIApAQCAtOTksOSArMTA2LDE1IEBACiAKIDU6CQlhbmRzCWlwLCByMiwgIzI4CiAJCXJzYglpcCwgaXAsICMzMgorI2lmIExEUjFXX1NISUZUID4gMAorCQlsc2wJaXAsIGlwLCAjTERSMVdfU0hJRlQKKyNlbmRpZgogCQlhZGRuZQlwYywgcGMsIGlwCQlAIEMgaXMgYWx3YXlzIGNsZWFyIGhlcmUKIAkJYgk3ZgotNjoJCW5vcAorNjoKKwkJLnJlcHQJKDEgPDwgTERSMVdfU0hJRlQpCisJCVcobm9wKQorCQkuZW5kcgogCQlsZHIxdwlyMSwgcjMsIGFib3J0PTIwZgogCQlsZHIxdwlyMSwgcjQsIGFib3J0PTIwZgogCQlsZHIxdwlyMSwgcjUsIGFib3J0PTIwZgpAQCAtMTEwLDkgKzEyMywxNiBAQAogCQlsZHIxdwlyMSwgcjgsIGFib3J0PTIwZgogCQlsZHIxdwlyMSwgbHIsIGFib3J0PTIwZgogCisjaWYgTERSMVdfU0hJRlQgPCBTVFIxV19TSElGVAorCQlsc2wJaXAsIGlwLCAjU1RSMVdfU0hJRlQgLSBMRFIxV19TSElGVAorI2VsaWYgTERSMVdfU0hJRlQgPiBTVFIxV19TSElGVAorCQlsc3IJaXAsIGlwLCAjTERSMVdfU0hJRlQgLSBTVFIxV19TSElGVAorI2VuZGlmCiAJCWFkZAlwYywgcGMsIGlwCiAJCW5vcAotCQlub3AKKwkJLnJlcHQJKDEgPDwgU1RSMVdfU0hJRlQpCisJCVcobm9wKQorCQkuZW5kcgogCQlzdHIxdwlyMCwgcjMsIGFib3J0PTIwZgogCQlzdHIxdwlyMCwgcjQsIGFib3J0PTIwZgogCQlzdHIxdwlyMCwgcjUsIGFib3J0PTIwZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NvcHlfdG9fdXNlci5TIGIvYXJjaC9hcm0vbGliL2NvcHlfdG9fdXNlci5TCmluZGV4IDg3ODgyMGYuLjFhNzFlMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jb3B5X3RvX3VzZXIuUworKysgYi9hcmNoL2FybS9saWIvY29weV90b191c2VyLlMKQEAgLTMzLDggKzMzLDE1IEBACiAgKglOdW1iZXIgb2YgYnl0ZXMgTk9UIGNvcGllZC4KICAqLwogCisjZGVmaW5lIExEUjFXX1NISUZUCTAKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKyNkZWZpbmUgU1RSMVdfU0hJRlQJMAorI2Vsc2UKKyNkZWZpbmUgU1RSMVdfU0hJRlQJMQorI2VuZGlmCisKIAkubWFjcm8gbGRyMXcgcHRyIHJlZyBhYm9ydAotCWxkciBccmVnLCBbXHB0cl0sICM0CisJVyhsZHIpIFxyZWcsIFtccHRyXSwgIzQKIAkuZW5kbQogCiAJLm1hY3JvIGxkcjR3IHB0ciByZWcxIHJlZzIgcmVnMyByZWc0IGFib3J0CkBAIC01MCwxMCArNTcsNyBAQAogCS5lbmRtCiAKIAkubWFjcm8gc3RyMXcgcHRyIHJlZyBhYm9ydAotMTAwOglzdHJ0IFxyZWcsIFtccHRyXSwgIzQKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkubG9uZyAxMDBiLCBcYWJvcnQKLQkucHJldmlvdXMKKwlzdHJ1c3IJXHJlZywgXHB0ciwgNCwgYWJvcnQ9XGFib3J0CiAJLmVuZG0KIAogCS5tYWNybyBzdHI4dyBwdHIgcmVnMSByZWcyIHJlZzMgcmVnNCByZWc1IHJlZzYgcmVnNyByZWc4IGFib3J0CkBAIC02OCwxMCArNzIsNyBAQAogCS5lbmRtCiAKIAkubWFjcm8gc3RyMWIgcHRyIHJlZyBjb25kPWFsIGFib3J0Ci0xMDA6CXN0clxjb25kXCgpYnQgXHJlZywgW1xwdHJdLCAjMQotCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCS5sb25nIDEwMGIsIFxhYm9ydAotCS5wcmV2aW91cworCXN0cnVzcglccmVnLCBccHRyLCAxLCBcY29uZCwgYWJvcnQ9XGFib3J0CiAJLmVuZG0KIAogCS5tYWNybyBlbnRlciByZWcxIHJlZzIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWxjb3B5dXNlci5TCmluZGV4IDE0Njc3ZmIuLmZkMGU5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9jc3VtcGFydGlhbGNvcHl1c2VyLlMKKysrIGIvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsY29weXVzZXIuUwpAQCAtMjYsNTAgKzI2LDI4IEBACiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQxYiwJcmVnMQotOTk5OToJCWxkcmJ0CVxyZWcxLCBbcjBdLCAkMQotCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmFsaWduCTMKLQkJLmxvbmcJOTk5OWIsIDYwMDFmCi0JCS5wcmV2aW91cworCQlsZHJ1c3IJXHJlZzEsIHIwLCAxCiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQyYiwgcmVnMSwgcmVnMgotOTk5OToJCWxkcmJ0CVxyZWcxLCBbcjBdLCAkMQotOTk5ODoJCWxkcmJ0CVxyZWcyLCBbcjBdLCAkMQotCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmxvbmcJOTk5OWIsIDYwMDFmCi0JCS5sb25nCTk5OThiLCA2MDAxZgotCQkucHJldmlvdXMKKwkJbGRydXNyCVxyZWcxLCByMCwgMQorCQlsZHJ1c3IJXHJlZzIsIHIwLCAxCiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQxbCwgcmVnMQotOTk5OToJCWxkcnQJXHJlZzEsIFtyMF0sICQ0Ci0JCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCQkuYWxpZ24JMwotCQkubG9uZwk5OTk5YiwgNjAwMWYKLQkJLnByZXZpb3VzCisJCWxkcnVzcglccmVnMSwgcjAsIDQKIAkJLmVuZG0KIAogCQkubWFjcm8JbG9hZDJsLCByZWcxLCByZWcyCi05OTk5OgkJbGRydAlccmVnMSwgW3IwXSwgJDQKLTk5OTg6CQlsZHJ0CVxyZWcyLCBbcjBdLCAkNAotCQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmxvbmcJOTk5OWIsIDYwMDFmCi0JCS5sb25nCTk5OThiLCA2MDAxZgotCQkucHJldmlvdXMKKwkJbGRydXNyCVxyZWcxLCByMCwgNAorCQlsZHJ1c3IJXHJlZzIsIHIwLCA0CiAJCS5lbmRtCiAKIAkJLm1hY3JvCWxvYWQ0bCwgcmVnMSwgcmVnMiwgcmVnMywgcmVnNAotOTk5OToJCWxkcnQJXHJlZzEsIFtyMF0sICQ0Ci05OTk4OgkJbGRydAlccmVnMiwgW3IwXSwgJDQKLTk5OTc6CQlsZHJ0CVxyZWczLCBbcjBdLCAkNAotOTk5NjoJCWxkcnQJXHJlZzQsIFtyMF0sICQ0Ci0JCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCQkubG9uZwk5OTk5YiwgNjAwMWYKLQkJLmxvbmcJOTk5OGIsIDYwMDFmCi0JCS5sb25nCTk5OTdiLCA2MDAxZgotCQkubG9uZwk5OTk2YiwgNjAwMWYKLQkJLnByZXZpb3VzCisJCWxkcnVzcglccmVnMSwgcjAsIDQKKwkJbGRydXNyCVxyZWcyLCByMCwgNAorCQlsZHJ1c3IJXHJlZzMsIHIwLCA0CisJCWxkcnVzcglccmVnNCwgcjAsIDQKIAkJLmVuZG0KIAogLyoKQEAgLTkyLDE0ICs3MCwxNCBAQAogICovCiAJCS5zZWN0aW9uIC5maXh1cCwiYXgiCiAJCS5hbGlnbgk0Ci02MDAxOgkJbW92CXI0LCAjLUVGQVVMVAorOTAwMToJCW1vdglyNCwgIy1FRkFVTFQKIAkJbGRyCXI1LCBbZnAsICM0XQkJQCAqZXJyX3B0cgogCQlzdHIJcjQsIFtyNV0KIAkJbGRtaWEJc3AsIHtyMSwgcjJ9CQlAIHJldHJpZXZlIGRzdCwgbGVuCiAJCWFkZAlyMiwgcjIsIHIxCiAJCW1vdglyMCwgIzAJCQlAIHplcm8gdGhlIGJ1ZmZlcgotNjAwMjoJCXRlcQlyMiwgcjEKKzkwMDI6CQl0ZXEJcjIsIHIxCiAJCXN0cm5lYglyMCwgW3IxXSwgIzEKLQkJYm5lCTYwMDJiCisJCWJuZQk5MDAyYgogCQlsb2FkX3JlZ3MKIAkJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZGl2NjQuUyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCmluZGV4IDE0MjVlNzguLmZhYTc3NDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9kaXY2NC5TCisrKyBiL2FyY2gvYXJtL2xpYi9kaXY2NC5TCkBAIC0xNzcsNyArMTc3LDkgQEAKIAltb3YJeWgsIHhoLCBsc3IgaXAKIAltb3YJeWwsIHhsLCBsc3IgaXAKIAlyc2IJaXAsIGlwLCAjMzIKLQlvcnIJeWwsIHlsLCB4aCwgbHNsIGlwCisgQVJNKAlvcnIJeWwsIHlsLCB4aCwgbHNsIGlwCSkKKyBUSFVNQigJbHNsCXhoLCB4aCwgaXAJCSkKKyBUSFVNQigJb3JyCXlsLCB5bCwgeGgJCSkKIAltb3YJeGgsIHhsLCBsc2wgaXAKIAltb3YJeGgsIHhoLCBsc3IgaXAKIAltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvZmluZGJpdC5TIGIvYXJjaC9hcm0vbGliL2ZpbmRiaXQuUwppbmRleCA4YzRkZWZjLi4xZTRjYmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvZmluZGJpdC5TCisrKyBiL2FyY2gvYXJtL2xpYi9maW5kYml0LlMKQEAgLTI1LDcgKzI1LDEwIEBACiAJCXRlcQlyMSwgIzAJCiAJCWJlcQkzZgogCQltb3YJcjIsICMwCi0xOgkJbGRyYglyMywgW3IwLCByMiwgbHNyICMzXQorMToKKyBBUk0oCQlsZHJiCXIzLCBbcjAsIHIyLCBsc3IgIzNdCSkKKyBUSFVNQigJCWxzcglyMywgcjIsICMzCQkpCisgVEhVTUIoCQlsZHJiCXIzLCBbcjAsIHIzXQkJKQogCQllb3JzCXIzLCByMywgIzB4ZmYJCUAgaW52ZXJ0IGJpdHMKIAkJYm5lCS5MX2ZvdW5kCQlAIGFueSBub3cgc2V0IC0gZm91bmQgemVybyBiaXQKIAkJYWRkCXIyLCByMiwgIzgJCUAgbmV4dCBiaXQgcG9pbnRlcgpAQCAtNDQsNyArNDcsOSBAQAogCQliZXEJM2IKIAkJYW5kcwlpcCwgcjIsICM3CiAJCWJlcQkxYgkJCUAgSWYgbmV3IGJ5dGUsIGdvdG8gb2xkIHJvdXRpbmUKLQkJbGRyYglyMywgW3IwLCByMiwgbHNyICMzXQorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCByMiwgIzMJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCWVvcglyMywgcjMsICMweGZmCQlAIG5vdyBsb29raW5nIGZvciBhIDEgYml0CiAJCW1vdnMJcjMsIHIzLCBsc3IgaXAJCUAgc2hpZnQgb2ZmIHVudXNlZCBiaXRzCiAJCWJuZQkuTF9mb3VuZApAQCAtNjEsNyArNjYsMTAgQEAKIAkJdGVxCXIxLCAjMAkKIAkJYmVxCTNmCiAJCW1vdglyMiwgIzAKLTE6CQlsZHJiCXIzLCBbcjAsIHIyLCBsc3IgIzNdCisxOgorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCByMiwgIzMJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCW1vdnMJcjMsIHIzCiAJCWJuZQkuTF9mb3VuZAkJQCBhbnkgbm93IHNldCAtIGZvdW5kIHplcm8gYml0CiAJCWFkZAlyMiwgcjIsICM4CQlAIG5leHQgYml0IHBvaW50ZXIKQEAgLTgwLDcgKzg4LDkgQEAKIAkJYmVxCTNiCiAJCWFuZHMJaXAsIHIyLCAjNwogCQliZXEJMWIJCQlAIElmIG5ldyBieXRlLCBnb3RvIG9sZCByb3V0aW5lCi0JCWxkcmIJcjMsIFtyMCwgcjIsIGxzciAjM10KKyBBUk0oCQlsZHJiCXIzLCBbcjAsIHIyLCBsc3IgIzNdCSkKKyBUSFVNQigJCWxzcglyMywgcjIsICMzCQkpCisgVEhVTUIoCQlsZHJiCXIzLCBbcjAsIHIzXQkJKQogCQltb3ZzCXIzLCByMywgbHNyIGlwCQlAIHNoaWZ0IG9mZiB1bnVzZWQgYml0cwogCQlibmUJLkxfZm91bmQKIAkJb3JyCXIyLCByMiwgIzcJCUAgaWYgemVybywgdGhlbiBubyBiaXRzIGhlcmUKQEAgLTk1LDcgKzEwNSw5IEBACiAJCWJlcQkzZgogCQltb3YJcjIsICMwCiAxOgkJZW9yCXIzLCByMiwgIzB4MTgJCUAgYmlnIGVuZGlhbiBieXRlIG9yZGVyaW5nCi0JCWxkcmIJcjMsIFtyMCwgcjMsIGxzciAjM10KKyBBUk0oCQlsZHJiCXIzLCBbcjAsIHIzLCBsc3IgIzNdCSkKKyBUSFVNQigJCWxzcglyMywgIzMJCQkpCisgVEhVTUIoCQlsZHJiCXIzLCBbcjAsIHIzXQkJKQogCQllb3JzCXIzLCByMywgIzB4ZmYJCUAgaW52ZXJ0IGJpdHMKIAkJYm5lCS5MX2ZvdW5kCQlAIGFueSBub3cgc2V0IC0gZm91bmQgemVybyBiaXQKIAkJYWRkCXIyLCByMiwgIzgJCUAgbmV4dCBiaXQgcG9pbnRlcgpAQCAtMTExLDcgKzEyMyw5IEBACiAJCWFuZHMJaXAsIHIyLCAjNwogCQliZXEJMWIJCQlAIElmIG5ldyBieXRlLCBnb3RvIG9sZCByb3V0aW5lCiAJCWVvcglyMywgcjIsICMweDE4CQlAIGJpZyBlbmRpYW4gYnl0ZSBvcmRlcmluZwotCQlsZHJiCXIzLCBbcjAsIHIzLCBsc3IgIzNdCisgQVJNKAkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQkpCisgVEhVTUIoCQlsc3IJcjMsICMzCQkJKQorIFRIVU1CKAkJbGRyYglyMywgW3IwLCByM10JCSkKIAkJZW9yCXIzLCByMywgIzB4ZmYJCUAgbm93IGxvb2tpbmcgZm9yIGEgMSBiaXQKIAkJbW92cwlyMywgcjMsIGxzciBpcAkJQCBzaGlmdCBvZmYgdW51c2VkIGJpdHMKIAkJYm5lCS5MX2ZvdW5kCkBAIC0xMjUsNyArMTM5LDkgQEAKIAkJYmVxCTNmCiAJCW1vdglyMiwgIzAKIDE6CQllb3IJcjMsIHIyLCAjMHgxOAkJQCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXJpbmcKLQkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjMsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCAjMwkJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCW1vdnMJcjMsIHIzCiAJCWJuZQkuTF9mb3VuZAkJQCBhbnkgbm93IHNldCAtIGZvdW5kIHplcm8gYml0CiAJCWFkZAlyMiwgcjIsICM4CQlAIG5leHQgYml0IHBvaW50ZXIKQEAgLTE0MSw3ICsxNTcsOSBAQAogCQlhbmRzCWlwLCByMiwgIzcKIAkJYmVxCTFiCQkJQCBJZiBuZXcgYnl0ZSwgZ290byBvbGQgcm91dGluZQogCQllb3IJcjMsIHIyLCAjMHgxOAkJQCBiaWcgZW5kaWFuIGJ5dGUgb3JkZXJpbmcKLQkJbGRyYglyMywgW3IwLCByMywgbHNyICMzXQorIEFSTSgJCWxkcmIJcjMsIFtyMCwgcjMsIGxzciAjM10JKQorIFRIVU1CKAkJbHNyCXIzLCAjMwkJCSkKKyBUSFVNQigJCWxkcmIJcjMsIFtyMCwgcjNdCQkpCiAJCW1vdnMJcjMsIHIzLCBsc3IgaXAJCUAgc2hpZnQgb2ZmIHVudXNlZCBiaXRzCiAJCWJuZQkuTF9mb3VuZAogCQlvcnIJcjIsIHIyLCAjNwkJQCBpZiB6ZXJvLCB0aGVuIG5vIGJpdHMgaGVyZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2dldHVzZXIuUyBiL2FyY2gvYXJtL2xpYi9nZXR1c2VyLlMKaW5kZXggNjc2MzA4OC4uYTE4MTRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2dldHVzZXIuUworKysgYi9hcmNoL2FybS9saWIvZ2V0dXNlci5TCkBAIC0zNiw4ICszNiwxMyBAQAogRU5EUFJPQyhfX2dldF91c2VyXzEpCiAKIEVOVFJZKF9fZ2V0X3VzZXJfMikKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorMjoJbGRyYnQJcjIsIFtyMF0KKzM6CWxkcmJ0CXIzLCBbcjAsICMxXQorI2Vsc2UKIDI6CWxkcmJ0CXIyLCBbcjBdLCAjMQogMzoJbGRyYnQJcjMsIFtyMF0KKyNlbmRpZgogI2lmbmRlZiBfX0FSTUVCX18KIAlvcnIJcjIsIHIyLCByMywgbHNsICM4CiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2lvLXdyaXRlc3ctYXJtdjQuUyBiL2FyY2gvYXJtL2xpYi9pby13cml0ZXN3LWFybXY0LlMKaW5kZXggZDY1ODU2MS4uZmY0ZjcxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL2lvLXdyaXRlc3ctYXJtdjQuUworKysgYi9hcmNoL2FybS9saWIvaW8td3JpdGVzdy1hcm12NC5TCkBAIC03NSw3ICs3NSwxMCBAQAogI2VuZGlmCiAKIC5Mb3V0c3dfbm9hbGlnbjoKLQkJbGRyCXIzLCBbcjEsIC1yM10hCisgQVJNKAkJbGRyCXIzLCBbcjEsIC1yM10hCSkKKyBUSFVNQigJCXJzYglyMywgcjMsICMwCSkKKyBUSFVNQigJCWxkcglyMywgW3IxLCByM10JKQorIFRIVU1CKAkJc3ViCXIxLCByMwkJKQogCQlzdWJjcwlyMiwgcjIsICMxCiAJCWJjcwkyZgogCQlzdWJzCXIyLCByMiwgIzIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9sc2hyZGkzLlMgYi9hcmNoL2FybS9saWIvbHNocmRpMy5TCmluZGV4IDk5ZWEzMzguLmY4M2Q0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9sc2hyZGkzLlMKKysrIGIvYXJjaC9hcm0vbGliL2xzaHJkaTMuUwpAQCAtNDMsNyArNDMsOSBAQAogCXJzYglpcCwgcjIsICMzMgogCW1vdm1pCWFsLCBhbCwgbHNyIHIyCiAJbW92cGwJYWwsIGFoLCBsc3IgcjMKLQlvcnJtaQlhbCwgYWwsIGFoLCBsc2wgaXAKKyBBUk0oCW9ycm1pCWFsLCBhbCwgYWgsIGxzbCBpcAkpCisgVEhVTUIoCWxzbG1pCXIzLCBhaCwgaXAJCSkKKyBUSFVNQigJb3JybWkJYWwsIGFsLCByMwkJKQogCW1vdglhaCwgYWgsIGxzciByMgogCW1vdglwYywgbHIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL21lbWNweS5TIGIvYXJjaC9hcm0vbGliL21lbWNweS5TCmluZGV4IGUwZDAwMjYuLmE5YjllMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9tZW1jcHkuUworKysgYi9hcmNoL2FybS9saWIvbWVtY3B5LlMKQEAgLTEzLDggKzEzLDExIEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KIAorI2RlZmluZSBMRFIxV19TSElGVAkwCisjZGVmaW5lIFNUUjFXX1NISUZUCTAKKwogCS5tYWNybyBsZHIxdyBwdHIgcmVnIGFib3J0Ci0JbGRyIFxyZWcsIFtccHRyXSwgIzQKKwlXKGxkcikgXHJlZywgW1xwdHJdLCAjNAogCS5lbmRtCiAKIAkubWFjcm8gbGRyNHcgcHRyIHJlZzEgcmVnMiByZWczIHJlZzQgYWJvcnQKQEAgLTMwLDcgKzMzLDcgQEAKIAkuZW5kbQogCiAJLm1hY3JvIHN0cjF3IHB0ciByZWcgYWJvcnQKLQlzdHIgXHJlZywgW1xwdHJdLCAjNAorCVcoc3RyKSBccmVnLCBbXHB0cl0sICM0CiAJLmVuZG0KIAogCS5tYWNybyBzdHI4dyBwdHIgcmVnMSByZWcyIHJlZzMgcmVnNCByZWc1IHJlZzYgcmVnNyByZWc4IGFib3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvbWVtbW92ZS5TIGIvYXJjaC9hcm0vbGliL21lbW1vdmUuUwppbmRleCAxMjU0OTE4Li41MDI1Yzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvbWVtbW92ZS5TCisrKyBiL2FyY2gvYXJtL2xpYi9tZW1tb3ZlLlMKQEAgLTc1LDI0ICs3NSwyNCBAQAogCQlhZGRuZQlwYywgcGMsIGlwCQlAIEMgaXMgYWx3YXlzIGNsZWFyIGhlcmUKIAkJYgk3ZgogNjoJCW5vcAotCQlsZHIJcjMsIFtyMSwgIy00XSEKLQkJbGRyCXI0LCBbcjEsICMtNF0hCi0JCWxkcglyNSwgW3IxLCAjLTRdIQotCQlsZHIJcjYsIFtyMSwgIy00XSEKLQkJbGRyCXI3LCBbcjEsICMtNF0hCi0JCWxkcglyOCwgW3IxLCAjLTRdIQotCQlsZHIJbHIsIFtyMSwgIy00XSEKKwkJVyhsZHIpCXIzLCBbcjEsICMtNF0hCisJCVcobGRyKQlyNCwgW3IxLCAjLTRdIQorCQlXKGxkcikJcjUsIFtyMSwgIy00XSEKKwkJVyhsZHIpCXI2LCBbcjEsICMtNF0hCisJCVcobGRyKQlyNywgW3IxLCAjLTRdIQorCQlXKGxkcikJcjgsIFtyMSwgIy00XSEKKwkJVyhsZHIpCWxyLCBbcjEsICMtNF0hCiAKIAkJYWRkCXBjLCBwYywgaXAKIAkJbm9wCiAJCW5vcAotCQlzdHIJcjMsIFtyMCwgIy00XSEKLQkJc3RyCXI0LCBbcjAsICMtNF0hCi0JCXN0cglyNSwgW3IwLCAjLTRdIQotCQlzdHIJcjYsIFtyMCwgIy00XSEKLQkJc3RyCXI3LCBbcjAsICMtNF0hCi0JCXN0cglyOCwgW3IwLCAjLTRdIQotCQlzdHIJbHIsIFtyMCwgIy00XSEKKwkJVyhzdHIpCXIzLCBbcjAsICMtNF0hCisJCVcoc3RyKQlyNCwgW3IwLCAjLTRdIQorCQlXKHN0cikJcjUsIFtyMCwgIy00XSEKKwkJVyhzdHIpCXI2LCBbcjAsICMtNF0hCisJCVcoc3RyKQlyNywgW3IwLCAjLTRdIQorCQlXKHN0cikJcjgsIFtyMCwgIy00XSEKKwkJVyhzdHIpCWxyLCBbcjAsICMtNF0hCiAKIAlDQUxHTigJYmNzCTJiCQkJKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvcHV0dXNlci5TIGIvYXJjaC9hcm0vbGliL3B1dHVzZXIuUwppbmRleCA4NjRmM2MxLi4wMmZlZGJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvcHV0dXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9wdXR1c2VyLlMKQEAgLTM3LDYgKzM3LDE1IEBACiAKIEVOVFJZKF9fcHV0X3VzZXJfMikKIAltb3YJaXAsIHIyLCBsc3IgIzgKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorI2lmbmRlZiBfX0FSTUVCX18KKzI6CXN0cmJ0CXIyLCBbcjBdCiszOglzdHJidAlpcCwgW3IwLCAjMV0KKyNlbHNlCisyOglzdHJidAlpcCwgW3IwXQorMzoJc3RyYnQJcjIsIFtyMCwgIzFdCisjZW5kaWYKKyNlbHNlCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogI2lmbmRlZiBfX0FSTUVCX18KIDI6CXN0cmJ0CXIyLCBbcjBdLCAjMQogMzoJc3RyYnQJaXAsIFtyMF0KQEAgLTQ0LDYgKzUzLDcgQEAKIDI6CXN0cmJ0CWlwLCBbcjBdLCAjMQogMzoJc3RyYnQJcjIsIFtyMF0KICNlbmRpZgorI2VuZGlmCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCiAJbW92CXIwLCAjMAogCW1vdglwYywgbHIKIEVORFBST0MoX19wdXRfdXNlcl8yKQpAQCAtNTUsOCArNjUsMTMgQEAKIEVORFBST0MoX19wdXRfdXNlcl80KQogCiBFTlRSWShfX3B1dF91c2VyXzgpCisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKzU6CXN0cnQJcjIsIFtyMF0KKzY6CXN0cnQJcjMsIFtyMCwgIzRdCisjZWxzZQogNToJc3RydAlyMiwgW3IwXSwgIzQKIDY6CXN0cnQJcjMsIFtyMF0KKyNlbmRpZgogCW1vdglyMCwgIzAKIAltb3YJcGMsIGxyCiBFTkRQUk9DKF9fcHV0X3VzZXJfOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9zaGExLlMgYi9hcmNoL2FybS9saWIvc2hhMS5TCmluZGV4IGExNmZiMjAuLjA5YjU0OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2xpYi9zaGExLlMKKysrIGIvYXJjaC9hcm0vbGliL3NoYTEuUwpAQCAtMTg3LDYgKzE4Nyw3IEBACiAKIEVORFBST0Moc2hhX3RyYW5zZm9ybSkKIAorCS5hbGlnbgkyCiAuTF9zaGFfSzoKIAkud29yZAkweDVhODI3OTk5LCAweDZlZDllYmExLCAweDhmMWJiY2RjLCAweGNhNjJjMWQ2CiAKQEAgLTE5NSw2ICsxOTYsNyBAQAogICogdm9pZCBzaGFfaW5pdChfX3UzMiAqYnVmKQogICovCiAKKwkuYWxpZ24JMgogLkxfc2hhX2luaXRpYWxfZGlnZXN0OgogCS53b3JkCTB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL3N0cm5jcHlfZnJvbV91c2VyLlMgYi9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUwppbmRleCAzMzAzNzNjLi4xYzk4MTRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUworKysgYi9hcmNoL2FybS9saWIvc3RybmNweV9mcm9tX3VzZXIuUwpAQCAtMjMsNyArMjMsNyBAQAogRU5UUlkoX19zdHJuY3B5X2Zyb21fdXNlcikKIAltb3YJaXAsIHIxCiAxOglzdWJzCXIyLCByMiwgIzEKLVVTRVIoCWxkcnBsYnQJcjMsIFtyMV0sICMxKQorCWxkcnVzcglyMywgcjEsIDEsIHBsCiAJYm1pCTJmCiAJc3RyYglyMywgW3IwXSwgIzEKIAl0ZXEJcjMsICMwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvc3Rybmxlbl91c2VyLlMgYi9hcmNoL2FybS9saWIvc3Rybmxlbl91c2VyLlMKaW5kZXggOTBiYjlkMC4uNzg1NWIyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbGliL3N0cm5sZW5fdXNlci5TCisrKyBiL2FyY2gvYXJtL2xpYi9zdHJubGVuX3VzZXIuUwpAQCAtMjMsNyArMjMsNyBAQAogRU5UUlkoX19zdHJubGVuX3VzZXIpCiAJbW92CXIyLCByMAogMToKLVVTRVIoCWxkcmJ0CXIzLCBbcjBdLCAjMSkKKwlsZHJ1c3IJcjMsIHIwLCAxCiAJdGVxCXIzLCAjMAogCWJlcQkyZgogCXN1YnMJcjEsIHIxLCAjMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwppbmRleCAzMjNiNDdmLi5hMjRkODI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZwpAQCAtMjMsNiArMjMsMTIgQEAKIAlzZWxlY3QgR0VORVJJQ19USU1FCiAJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKIAorY29uZmlnIEFSQ0hfQVQ5MVNBTTlHMTAKKwlib29sICJBVDkxU0FNOUcxMCIKKwlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgR0VORVJJQ19USU1FCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwogY29uZmlnIEFSQ0hfQVQ5MVNBTTkyNjMKIAlib29sICJBVDkxU0FNOTI2MyIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKQEAgLTQxLDYgKzQ3LDEyIEBACiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAKK2NvbmZpZyBBUkNIX0FUOTFTQU05RzQ1CisJYm9vbCAiQVQ5MVNBTTlHNDUiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBBUkNIX0FUOTFDQVA5CiAJYm9vbCAiQVQ5MUNBUDkiCiAJc2VsZWN0IENQVV9BUk05MjZUCkBAIC0xNDQsNiArMTU2LDEzIEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgdWNEcmFnb24gWUwtOTIwMCBib2FyZC4KIAorY29uZmlnIE1BQ0hfQ1BVQVQ5MQorCWJvb2wgIkV1a3JlYSBDUFVBVDkxIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxUk05MjAwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgRXVrcmVhIEVsZWN0cm9tYXRpcXVlJ3MKKwkgIENQVUFUOTEgYm9hcmQgPGh0dHA6Ly93d3cuZXVrcmVhLmNvbS8+LgorCiBlbmRpZgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwNSw2ICsyMjQsMTMgQEAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBDYWxhbyBTeXN0ZW1zIFFJTC1BOTI2MCBCb2FyZC4KIAkgIDxodHRwOi8vd3d3LmNhbGFvLXN5c3RlbXMuY29tPgogCitjb25maWcgTUFDSF9DUFU5MjYwCisJYm9vbCAiRXVrcmVhIENQVTkyNjAgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05MjYwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIEV1a3JlYSBFbGVjdHJvbWF0aXF1ZSdzCisJICBDUFU5MjYwIEJvYXJkIDxodHRwOi8vd3d3LmV1a3JlYS5jb20vPgorCiBlbmRpZgogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyNCw2ICsyNTAsMjEgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2lmIEFSQ0hfQVQ5MVNBTTlHMTAKKworY29tbWVudCAiQVQ5MVNBTTlHMTAgQm9hcmQgVHlwZSIKKworY29uZmlnIE1BQ0hfQVQ5MVNBTTlHMTBFSworCWJvb2wgIkF0bWVsIEFUOTFTQU05RzEwLUVLIEV2YWx1YXRpb24gS2l0IgorCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOUcxMAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcxMC1FSyBFdmFsdWF0aW9uIEtpdC4KKwkgIDxodHRwOi8vd3d3LmF0bWVsLmNvbS9keW4vcHJvZHVjdHMvdG9vbHNfY2FyZC5hc3A/dG9vbF9pZD00NTg4PgorCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogaWYgQVJDSF9BVDkxU0FNOTI2MwogCiBjb21tZW50ICJBVDkxU0FNOTI2MyBCb2FyZCBUeXBlIgpAQCAtMjc2LDYgKzMxNywyOSBAQAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdC4KIAorY29uZmlnIE1BQ0hfQ1BVOUcyMAorCWJvb2wgIkV1a3JlYSBDUFU5RzIwIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOUcyMAorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgYSBFdWtyZWEgRWxlY3Ryb21hdGlxdWUncworCSAgQ1BVOUcyMCBCb2FyZCA8aHR0cDovL3d3dy5ldWtyZWEuY29tLz4KKworZW5kaWYKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lmIEFSQ0hfQVQ5MVNBTTlHNDUKKworY29tbWVudCAiQVQ5MVNBTTlHNDUgQm9hcmQgVHlwZSIKKworY29uZmlnIE1BQ0hfQVQ5MVNBTTlHNDVFS0VTCisJYm9vbCAiQXRtZWwgQVQ5MVNBTTlHNDUtRUtFUyBFdmFsdWF0aW9uIEtpdCIKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MVNBTTlHNDUKKwloZWxwCisJICBTZWxlY3QgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIEF0bWVsJ3MgQVQ5MVNBTTlHNDUtRUtFUyBFdmFsdWF0aW9uIEtpdC4KKwkgICJFUyIgYXQgdGhlIGVuZCBvZiB0aGUgbmFtZSBtZWFucyB0aGF0IHRoaXMgYm9hcmQgaXMgYW4KKwkgIEVuZ2luZWVyaW5nIFNhbXBsZS4KKwogZW5kaWYKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMTUsMTMgKzM3OSwxMyBAQAogCiBjb25maWcgTVREX0FUOTFfREFUQUZMQVNIX0NBUkQKIAlib29sICJFbmFibGUgRGF0YUZsYXNoIENhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChBUkNIX0FUOTFSTTkyMDBESyB8fCBNQUNIX0FUOTFSTTkyMDBFSyB8fCBNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9FQ0JBVDkxIHx8IE1BQ0hfU0FNOV9MOTI2MCB8fCBNQUNIX0FUOTFDQVA5QURLIHx8IE1BQ0hfTkVPQ09SRTkyNikKKwlkZXBlbmRzIG9uIChBUkNIX0FUOTFSTTkyMDBESyB8fCBNQUNIX0FUOTFSTTkyMDBFSyB8fCBNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLIHx8IE1BQ0hfRUNCQVQ5MSB8fCBNQUNIX1NBTTlfTDkyNjAgfHwgTUFDSF9BVDkxQ0FQOUFESyB8fCBNQUNIX05FT0NPUkU5MjYpCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBEYXRhRmxhc2ggY2FyZC4KIAogY29uZmlnIE1URF9OQU5EX0FUTUVMX0JVU1dJRFRIXzE2CiAJYm9vbCAiRW5hYmxlIDE2LWJpdCBkYXRhIGJ1cyBpbnRlcmZhY2UgdG8gTkFORCBmbGFzaCIKLQlkZXBlbmRzIG9uIChNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9BVDkxQ0FQOUFESykKKwlkZXBlbmRzIG9uIChNQUNIX0FUOTFTQU05MjYwRUsgfHwgTUFDSF9BVDkxU0FNOTI2MUVLIHx8IE1BQ0hfQVQ5MVNBTTlHMTBFSyB8fCBNQUNIX0FUOTFTQU05MjYzRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLIHx8IE1BQ0hfQVQ5MVNBTTlHNDVFS0VTIHx8IE1BQ0hfQVQ5MUNBUDlBREspCiAJaGVscAogCSAgT24gQVQ5MVNBTTkyNnggYm9hcmRzIGJvdGggdHlwZXMgb2YgTkFORCBmbGFzaCBjYW4gYmUgcHJlc2VudAogCSAgKDggYW5kIDE2IGJpdCBkYXRhIGJ1cyB3aWR0aCkuCkBAIC0zODMsNyArNDQ3LDcgQEAKIAogY29uZmlnIEFUOTFfRUFSTFlfVVNBUlQzCiAJYm9vbCAiVVNBUlQzIgotCWRlcGVuZHMgb24gKEFSQ0hfQVQ5MVJNOTIwMCB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05RzIwKQorCWRlcGVuZHMgb24gKEFSQ0hfQVQ5MVJNOTIwMCB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxU0FNOTI2MCB8fCBBUkNIX0FUOTFTQU05RzIwIHx8IEFSQ0hfQVQ5MVNBTTlHNDUpCiAKIGNvbmZpZyBBVDkxX0VBUkxZX1VTQVJUNAogCWJvb2wgIlVTQVJUNCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYXQ5MS9NYWtlZmlsZQppbmRleCBjNjlmZjIzLi5hNmVkMDE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlCkBAIC0xMyw5ICsxMywxMSBAQAogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCkJKz0gYXQ5MXJtOTIwMC5vIGF0OTFybTkyMDBfdGltZS5vIGF0OTFybTkyMDBfZGV2aWNlcy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkJKz0gYXQ5MXNhbTkyNjAubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjBfZGV2aWNlcy5vIHNhbTlfc21jLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQkrPSBhdDkxc2FtOTI2MS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOTI2MV9kZXZpY2VzLm8gc2FtOV9zbWMubworb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMTApCSs9IGF0OTFzYW05MjYxLm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05MjYxX2RldmljZXMubyBzYW05X3NtYy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykJKz0gYXQ5MXNhbTkyNjMubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTkyNjNfZGV2aWNlcy5vIHNhbTlfc21jLm8KIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05UkwpCSs9IGF0OTFzYW05cmwubyBhdDkxc2FtOTI2eF90aW1lLm8gYXQ5MXNhbTlybF9kZXZpY2VzLm8gc2FtOV9zbWMubwogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMjApCSs9IGF0OTFzYW05MjYwLm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFzYW05MjYwX2RldmljZXMubyAgc2FtOV9zbWMubworIG9iai0kKENPTkZJR19BUkNIX0FUOTFTQU05RzQ1KQkrPSBhdDkxc2FtOWc0NS5vIGF0OTFzYW05MjZ4X3RpbWUubyBhdDkxc2FtOWc0NV9kZXZpY2VzLm8gc2FtOV9zbWMubwogb2JqLSQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpCSs9IGF0OTFjYXA5Lm8gYXQ5MXNhbTkyNnhfdGltZS5vIGF0OTFjYXA5X2RldmljZXMubyBzYW05X3NtYy5vCiBvYmotJChDT05GSUdfQVJDSF9BVDkxWDQwKQkrPSBhdDkxeDQwLm8gYXQ5MXg0MF90aW1lLm8KIApAQCAtMzIsNiArMzQsNyBAQAogb2JqLSQoQ09ORklHX01BQ0hfUElDT1RVWDJYWCkJKz0gYm9hcmQtcGljb3R1eDIwMC5vCiBvYmotJChDT05GSUdfTUFDSF9FQ0JBVDkxKQkrPSBib2FyZC1lY2JhdDkxLm8KIG9iai0kKENPTkZJR19NQUNIX1lMOTIwMCkJKz0gYm9hcmQteWwtOTIwMC5vCitvYmotJChDT05GSUdfTUFDSF9DUFVBVDkxKQkrPSBib2FyZC1jcHVhdDkxLm8KIAogIyBBVDkxU0FNOTI2MCBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOTI2MEVLKSArPSBib2FyZC1zYW05MjYwZWsubwpAQCAtNDAsOSArNDMsMTEgQEAKIG9iai0kKENPTkZJR19NQUNIX1VTQl9BOTI2MCkJKz0gYm9hcmQtdXNiLWE5MjYwLm8KIG9iai0kKENPTkZJR19NQUNIX1FJTF9BOTI2MCkJKz0gYm9hcmQtcWlsLWE5MjYwLm8KIG9iai0kKENPTkZJR19NQUNIX0FGRUI5MjYwKQkrPSBib2FyZC1hZmViLTkyNjB2MS5vCitvYmotJChDT05GSUdfTUFDSF9DUFU5MjYwKQkrPSBib2FyZC1jcHU5a3JlYS5vCiAKICMgQVQ5MVNBTTkyNjEgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjFFSykgKz0gYm9hcmQtc2FtOTI2MWVrLm8KK29iai0kKENPTkZJR19NQUNIX0FUOTFTQU05RzEwRUspICs9IGJvYXJkLXNhbTkyNjFlay5vCiAKICMgQVQ5MVNBTTkyNjMgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjNFSykgKz0gYm9hcmQtc2FtOTI2M2VrLm8KQEAgLTU0LDYgKzU5LDEwIEBACiAKICMgQVQ5MVNBTTlHMjAgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMjBFSykgKz0gYm9hcmQtc2FtOWcyMGVrLm8KK29iai0kKENPTkZJR19NQUNIX0NQVTlHMjApCSs9IGJvYXJkLWNwdTlrcmVhLm8KKworIyBBVDkxU0FNOUc0NSBib2FyZC1zcGVjaWZpYyBzdXBwb3J0CitvYmotJChDT05GSUdfTUFDSF9BVDkxU0FNOUc0NUVLRVMpICs9IGJvYXJkLXNhbTltMTBnNDVlay5vCiAKICMgQVQ5MUNBUDkgYm9hcmQtc3BlY2lmaWMgc3VwcG9ydAogb2JqLSQoQ09ORklHX01BQ0hfQVQ5MUNBUDlBREspCSs9IGJvYXJkLWNhcDlhZGsubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdAppbmRleCAwNzFhMjUwLi4zNDYyYjgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvTWFrZWZpbGUuYm9vdApAQCAtNyw2ICs3LDEwIEBACiAgICB6cmVsYWRkci15CTo9IDB4NzAwMDgwMDAKIHBhcmFtc19waHlzLXkJOj0gMHg3MDAwMDEwMAogaW5pdHJkX3BoeXMteQk6PSAweDcwNDEwMDAwCitlbHNlIGlmZXEgKCQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpLHkpCisgICB6cmVsYWRkci15CTo9IDB4NzAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHg3MDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDcwNDEwMDAwCiBlbHNlCiAgICB6cmVsYWRkci15CTo9IDB4MjAwMDgwMDAKIHBhcmFtc19waHlzLXkJOj0gMHgyMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKaW5kZXggZDc0YzlhYy4uZWU0ZWEwZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2MF9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYwX2RldmljZXMuYwpAQCAtMTExMyw2ICsxMTEzLDEyMiBAQAogdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQogI2VuZGlmCiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ0YvSURFCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfQVQ5MV9NT0RVTEUpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19QQVRBX0FUOTEpIHx8IGRlZmluZWQoQ09ORklHX1BBVEFfQVQ5MV9NT0RVTEUpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BVDkxX0NGKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxX0NGX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgY2YwX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2YwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MV9DSElQU0VMRUNUXzQsCisJCS5lbmQJPSBBVDkxX0NISVBTRUxFQ1RfNCArIFNaXzI1Nk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjZjBfZGV2aWNlID0geworCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJmNmMF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY2YwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY2YwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IGF0OTFfY2ZfZGF0YSBjZjFfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZjFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxX0NISVBTRUxFQ1RfNSwKKwkJLmVuZAk9IEFUOTFfQ0hJUFNFTEVDVF81ICsgU1pfMjU2TSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNmMV9kZXZpY2UgPSB7CisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmY2YxX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjZjFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjZjFfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9jZihzdHJ1Y3QgYXQ5MV9jZl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJdW5zaWduZWQgbG9uZyBjc2E7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKKworCXN3aXRjaCAoZGF0YS0+Y2hpcHNlbGVjdCkgeworCWNhc2UgNDoKKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEM4LCAwKTsKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEM4LCAwKTsKKwkJY3NhIHw9IEFUOTFfTUFUUklYX0NTNEFfU01DX0NGMTsKKwkJY2YwX2RhdGEgPSAqZGF0YTsKKwkJcGRldiA9ICZjZjBfZGV2aWNlOworCQlicmVhazsKKwljYXNlIDU6CisJCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BDOSwgMCk7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BDOSwgMCk7CisJCWNzYSB8PSBBVDkxX01BVFJJWF9DUzVBX1NNQ19DRjI7CisJCWNmMV9kYXRhID0gKmRhdGE7CisJCXBkZXYgPSAmY2YxX2RldmljZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJBVDkxIENGOiBiYWQgY2hpcC1zZWxlY3QgcmVxdWVzdGVkICgldSlcbiIsCisJCSAgICAgICBkYXRhLT5jaGlwc2VsZWN0KTsKKwkJcmV0dXJuOworCX0KKworCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhKTsKKworCWlmIChkYXRhLT5yc3RfcGluKSB7CisJCWF0OTFfc2V0X211bHRpX2RyaXZlKGRhdGEtPnJzdF9waW4sIDApOworCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yc3RfcGluLCAxKTsKKwl9CisKKwlpZiAoZGF0YS0+aXJxX3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmlycV9waW4sIDApOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5pcnFfcGluLCAxKTsKKwl9CisKKwlpZiAoZGF0YS0+ZGV0X3BpbikgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPmRldF9waW4sIDApOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5kZXRfcGluLCAxKTsKKwl9CisKKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzYsIDApOyAgICAgLyogQ0ZDRTEgKi8KKwlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzcsIDApOyAgICAgLyogQ0ZDRTIgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzEwLCAwKTsgICAgLyogQ0ZSTlcgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQzE1LCAxKTsgICAgLyogTldBSVQgKi8KKworCWlmIChkYXRhLT5mbGFncyAmIEFUOTFfQ0ZfVFJVRV9JREUpCisjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19QQVRBX0FUOTFfTU9EVUxFKQorCQlwZGV2LT5uYW1lID0gInBhdGFfYXQ5MSI7CisjZWxpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9BVDkxX01PRFVMRSkKKwkJcGRldi0+bmFtZSA9ICJhdDkxX2lkZSI7CisjZWxzZQorI3dhcm5pbmcgImJvYXJkIHJlcXVpcmVzIEFUOTFfQ0ZfVFJVRV9JREU6IGVuYWJsZSBlaXRoZXIgYXQ5MV9pZGUgb3IgcGF0YV9hdDkxIgorI2VuZGlmCisJZWxzZQorCQlwZGV2LT5uYW1lID0gImF0OTFfY2YiOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworfQorCisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2NmKHN0cnVjdCBhdDkxX2NmX2RhdGEgKiBkYXRhKSB7fQorI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwppbmRleCAzYWNkN2Q3Li40ZWNmMzc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjEuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9jcHUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYxLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MV9yc3RjLmg+CkBAIC0zMCw3ICszMSwxMSBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NZUyksCiAJCS5sZW5ndGgJCT0gU1pfMTZLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgeworCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGF0OTFzYW05MjYxX3NyYW1fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewogCQkudmlydHVhbAk9IEFUOTFfSU9fVklSVF9CQVNFIC0gQVQ5MVNBTTkyNjFfU1JBTV9TSVpFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MVNBTTkyNjFfU1JBTV9CQVNFKSwKIAkJLmxlbmd0aAkJPSBBVDkxU0FNOTI2MV9TUkFNX1NJWkUsCkBAIC0zOCw2ICs0MywxNSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGF0OTFzYW05ZzEwX3NyYW1fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEFUOTFfSU9fVklSVF9CQVNFIC0gQVQ5MVNBTTlHMTBfU1JBTV9TSVpFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MVNBTTlHMTBfU1JBTV9CQVNFKSwKKwkJLmxlbmd0aAkJPSBBVDkxU0FNOUcxMF9TUkFNX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBDbG9ja3MKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNjMsNiArMjc3LDEyIEBACiAJLyogTWFwIHBlcmlwaGVyYWxzICovCiAJaW90YWJsZV9pbml0KGF0OTFzYW05MjYxX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYXQ5MXNhbTkyNjFfaW9fZGVzYykpOwogCisJaWYgKGNwdV9pc19hdDkxc2FtOWcxMCgpKQorCQlpb3RhYmxlX2luaXQoYXQ5MXNhbTlnMTBfc3JhbV9kZXNjLCBBUlJBWV9TSVpFKGF0OTFzYW05ZzEwX3NyYW1fZGVzYykpOworCWVsc2UKKwkJaW90YWJsZV9pbml0KGF0OTFzYW05MjYxX3NyYW1fZGVzYywgQVJSQVlfU0laRShhdDkxc2FtOTI2MV9zcmFtX2Rlc2MpKTsKKworCiAJYXQ5MV9hcmNoX3Jlc2V0ID0gYXQ5MXNhbTkyNjFfcmVzZXQ7CiAJcG1fcG93ZXJfb2ZmID0gYXQ5MXNhbTkyNjFfcG93ZXJvZmY7CiAJYXQ5MV9leHRlcm5faXJxID0gKDEgPDwgQVQ5MVNBTTkyNjFfSURfSVJRMCkgfCAoMSA8PCBBVDkxU0FNOTI2MV9JRF9JUlExKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2M19kZXZpY2VzLmMKaW5kZXggYjdmMjMzMi4uNTU3MTlhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjYzX2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNjNfZGV2aWNlcy5jCkBAIC03MDcsOSArNzA3LDkgQEAKICAqICBBQzk3CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5NykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUOTFfQUM5N19NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQogc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgYWM5N19kYXRhOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTcyNSw4ICs3MjUsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjNfYWM5N19kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImFjOTdjIiwKLQkuaWQJCT0gMSwKKwkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAorCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAogCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCkBAIC03MzYsNyArNzM2LDcgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYWM5N19yZXNvdXJjZXMpLAogfTsKIAotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGF0bWVsX2FjOTdfZGF0YSAqZGF0YSkKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQogewogCWlmICghZGF0YSkKIAkJcmV0dXJuOwpAQCAtNzUwLDExICs3NTAsMTEgQEAKIAlpZiAoZGF0YS0+cmVzZXRfcGluKQogCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOwogCi0JYWM5N19kYXRhID0gKmVrX2RhdGE7CisJYWM5N19kYXRhID0gKmRhdGE7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2M19hYzk3X2RldmljZSk7CiB9CiAjZWxzZQotdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGF0bWVsX2FjOTdfZGF0YSAqZGF0YSkge30KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKSB7fQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTE2NmI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1LmMKQEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiAgQ2hpcC1zcGVjaWZpYyBzZXR1cCBjb2RlIGZvciB0aGUgQVQ5MVNBTTlHNDUgZmFtaWx5CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9wbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFfcnN0Yy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MV9zaGR3Yy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYXQ5MXNhbTlnNDVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9TWVMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1lTKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gQVQ5MV9JT19WSVJUX0JBU0UgLSBBVDkxU0FNOUc0NV9TUkFNX1NJWkUsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxU0FNOUc0NV9TUkFNX0JBU0UpLAorCQkubGVuZ3RoCQk9IEFUOTFTQU05RzQ1X1NSQU1fU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0KK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQ2xvY2tzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIHBlcmlwaGVyYWwgY2xvY2tzLgorICovCitzdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUElPQSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0geworCS5uYW1lCQk9ICJwaW9CX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QSU9CLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQ19jbGsgPSB7CisJLm5hbWUJCT0gInBpb0NfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1BJT0MsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwaW9ERV9jbGsgPSB7CisJLm5hbWUJCT0gInBpb0RFX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9QSU9ERSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MF9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQxX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VUzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VTMiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0M19jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0M19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVVMzLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgbW1jMF9jbGsgPSB7CisJLm5hbWUJCT0gIm1jaTBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX01DSTAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2kwX2NsayA9IHsKKwkubmFtZQkJPSAidHdpMF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFdJMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHR3aTFfY2xrID0geworCS5uYW1lCQk9ICJ0d2kxX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9UV0kxLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3BpMF9jbGsgPSB7CisJLm5hbWUJCT0gInNwaTBfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NQSTAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBzcGkxX2NsayA9IHsKKwkubmFtZQkJPSAic3BpMV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfU1BJMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzYzBfY2xrID0geworCS5uYW1lCQk9ICJzc2MwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9TU0MwLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgc3NjMV9jbGsgPSB7CisJLm5hbWUJCT0gInNzYzFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1NTQzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0Y2JfY2xrID0geworCS5uYW1lCQk9ICJ0Y2JfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1RDQiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHB3bV9jbGsgPSB7CisJLm5hbWUJCT0gInB3bV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfUFdNQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRzY19jbGsgPSB7CisJLm5hbWUJCT0gInRzY19jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVNBTTlHNDVfSURfVFNDLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NsayA9IHsKKwkubmFtZQkJPSAiZG1hX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9ETUEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1aHBoc19jbGsgPSB7CisJLm5hbWUJCT0gInVocGhzX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9VSFBIUywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZGNfY2xrID0geworCS5uYW1lCQk9ICJsY2RjX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxU0FNOUc0NV9JRF9MQ0RDLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgYWM5N19jbGsgPSB7CisJLm5hbWUJCT0gImFjOTdfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0FDOTdDLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgbWFjYl9jbGsgPSB7CisJLm5hbWUJCT0gIm1hY2JfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0VNQUMsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBpc2lfY2xrID0geworCS5uYW1lCQk9ICJpc2lfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX0lTSSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVkcGhzX2NsayA9IHsKKwkubmFtZQkJPSAidWRwaHNfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX1VEUEhTLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jbGsgPSB7CisJLm5hbWUJCT0gIm1jaTFfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFTQU05RzQ1X0lEX01DSTEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CisKKy8qIE9uZSBhZGRpdGlvbmFsIGZha2UgY2xvY2sgZm9yIG9oY2kgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0geworCS5uYW1lCQk9ICJvaGNpX2NsayIsCisJLnBtY19tYXNrCT0gMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorCS5wYXJlbnQJCT0gJnVocGhzX2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpwZXJpcGhfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKKwkmcGlvQV9jbGssCisJJnBpb0JfY2xrLAorCSZwaW9DX2NsaywKKwkmcGlvREVfY2xrLAorCSZ1c2FydDBfY2xrLAorCSZ1c2FydDFfY2xrLAorCSZ1c2FydDJfY2xrLAorCSZ1c2FydDNfY2xrLAorCSZtbWMwX2NsaywKKwkmdHdpMF9jbGssCisJJnR3aTFfY2xrLAorCSZzcGkwX2NsaywKKwkmc3BpMV9jbGssCisJJnNzYzBfY2xrLAorCSZzc2MxX2NsaywKKwkmdGNiX2NsaywKKwkmcHdtX2NsaywKKwkmdHNjX2NsaywKKwkmZG1hX2NsaywKKwkmdWhwaHNfY2xrLAorCSZsY2RjX2NsaywKKwkmYWM5N19jbGssCisJJm1hY2JfY2xrLAorCSZpc2lfY2xrLAorCSZ1ZHBoc19jbGssCisJJm1tYzFfY2xrLAorCS8vIGlycTAKKwkmb2hjaV9jbGssCit9OworCisvKgorICogVGhlIHR3byBwcm9ncmFtbWFibGUgY2xvY2tzLgorICogWW91IG11c3QgY29uZmlndXJlIHBpbiBtdWx0aXBsZXhpbmcgdG8gYnJpbmcgdGhlc2Ugc2lnbmFscyBvdXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazAgPSB7CisJLm5hbWUJCT0gInBjazAiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzAsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5pZAkJPSAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBjazEgPSB7CisJLm5hbWUJCT0gInBjazEiLAorCS5wbWNfbWFzawk9IEFUOTFfUE1DX1BDSzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5pZAkJPSAxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFzYW05ZzQ1X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGVyaXBoX2Nsb2Nrcyk7IGkrKykKKwkJY2xrX3JlZ2lzdGVyKHBlcmlwaF9jbG9ja3NbaV0pOworCisJY2xrX3JlZ2lzdGVyKCZwY2swKTsKKwljbGtfcmVnaXN0ZXIoJnBjazEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEdQSU8KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXNhbTlnNDVfZ3Bpb1tdID0geworCXsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0EsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9BLAorCQkuY2xvY2sJCT0gJnBpb0FfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0IsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9CLAorCQkuY2xvY2sJCT0gJnBpb0JfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0MsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9DLAorCQkuY2xvY2sJCT0gJnBpb0NfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFTQU05RzQ1X0lEX1BJT0RFLAorCQkub2Zmc2V0CQk9IEFUOTFfUElPRCwKKwkJLmNsb2NrCQk9ICZwaW9ERV9jbGssCisJfSwgeworCQkuaWQJCT0gQVQ5MVNBTTlHNDVfSURfUElPREUsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9FLAorCQkuY2xvY2sJCT0gJnBpb0RFX2NsaywKKwl9Cit9OworCitzdGF0aWMgdm9pZCBhdDkxc2FtOWc0NV9yZXNldCh2b2lkKQoreworCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlNUQ19DUiwgQVQ5MV9SU1RDX0tFWSB8IEFUOTFfUlNUQ19QUk9DUlNUIHwgQVQ5MV9SU1RDX1BFUlJTVCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0OTFzYW05ZzQ1X3Bvd2Vyb2ZmKHZvaWQpCit7CisJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TSERXX0NSLCBBVDkxX1NIRFdfS0VZIHwgQVQ5MV9TSERXX1NIRFcpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgQVQ5MVNBTTlHNDUgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIF9faW5pdCBhdDkxc2FtOWc0NV9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKK3sKKwkvKiBNYXAgcGVyaXBoZXJhbHMgKi8KKwlpb3RhYmxlX2luaXQoYXQ5MXNhbTlnNDVfaW9fZGVzYywgQVJSQVlfU0laRShhdDkxc2FtOWc0NV9pb19kZXNjKSk7CisKKwlhdDkxX2FyY2hfcmVzZXQgPSBhdDkxc2FtOWc0NV9yZXNldDsKKwlwbV9wb3dlcl9vZmYgPSBhdDkxc2FtOWc0NV9wb3dlcm9mZjsKKwlhdDkxX2V4dGVybl9pcnEgPSAoMSA8PCBBVDkxU0FNOUc0NV9JRF9JUlEwKTsKKworCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCisJYXQ5MV9jbG9ja19pbml0KG1haW5fY2xvY2spOworCisJLyogUmVnaXN0ZXIgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBjbG9ja3MgKi8KKwlhdDkxc2FtOWc0NV9yZWdpc3Rlcl9jbG9ja3MoKTsKKworCS8qIFJlZ2lzdGVyIEdQSU8gc3Vic3lzdGVtICovCisJYXQ5MV9ncGlvX2luaXQoYXQ5MXNhbTlnNDVfZ3BpbywgNSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0OTFzYW05ZzQ1X2RlZmF1bHRfaXJxX3ByaW9yaXR5W05SX0FJQ19JUlFTXSBfX2luaXRkYXRhID0geworCTcsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChGSVEpICovCisJNywJLyogU3lzdGVtIFBlcmlwaGVyYWxzICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBDICovCisJMSwJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEIGFuZCBFICovCisJMCwKKwk1LAkvKiBVU0FSVCAwICovCisJNSwJLyogVVNBUlQgMSAqLworCTUsCS8qIFVTQVJUIDIgKi8KKwk1LAkvKiBVU0FSVCAzICovCisJMCwJLyogTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCisJNiwJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KKwk2LAkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLworCTUsCS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisJNSwJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKwk0LAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisJNCwJLyogU2VyaWFsIFN5bmNocm9ub3VzIENvbnRyb2xsZXIgMSAqLworCTAsCS8qIFRpbWVyIENvdW50ZXIgMCwgMSwgMiwgMywgNCBhbmQgNSAqLworCTAsCS8qIFB1bHNlIFdpZHRoIE1vZHVsYXRpb24gQ29udHJvbGxlciAqLworCTAsCS8qIFRvdWNoIFNjcmVlbiBDb250cm9sbGVyICovCisJMCwJLyogRE1BIENvbnRyb2xsZXIgKi8KKwkyLAkvKiBVU0IgSG9zdCBIaWdoIFNwZWVkIHBvcnQgKi8KKwkzLAkvKiBMREMgQ29udHJvbGxlciAqLworCTUsCS8qIEFDOTcgQ29udHJvbGxlciAqLworCTMsCS8qIEV0aGVybmV0ICovCisJMCwJLyogSW1hZ2UgU2Vuc29yIEludGVyZmFjZSAqLworCTIsCS8qIFVTQiBEZXZpY2UgSGlnaCBzcGVlZCBwb3J0ICovCisJMCwKKwkwLAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlIDEgKi8KKwkwLAorCTAsCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEwKSAqLworfTsKKwordm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtOUl9BSUNfSVJRU10pCit7CisJaWYgKCFwcmlvcml0eSkKKwkJcHJpb3JpdHkgPSBhdDkxc2FtOWc0NV9kZWZhdWx0X2lycV9wcmlvcml0eTsKKworCS8qIEluaXRpYWxpemUgdGhlIEFJQyBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCWF0OTFfYWljX2luaXQocHJpb3JpdHkpOworCisJLyogRW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLworCWF0OTFfZ3Bpb19pcnFfc2V0dXAoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDZlODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCkBAIC0wLDAgKzEsMTIzMCBAQAorLyoKKyAqICBPbi1DaGlwIGRldmljZXMgc2V0dXAgY29kZSBmb3IgdGhlIEFUOTFTQU05RzQ1IGZhbWlseQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPHZpZGVvL2F0bWVsX2xjZGMuaD4KKworI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1Lmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NV9tYXRyaXguaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVVNCIEhvc3QgKE9IQ0kpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSB1c2JoX29oY2lfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JoX29oY2lfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9PSENJX0JBU0UgKyBTWl8xTSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VSFBIUywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX1VIUEhTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JoX29oY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX29oY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JoX29oY2lfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVzYmhfb2hjaV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYmhfb2hjaV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmhfb2hjaShzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgKmRhdGEpCit7CisJaW50IGk7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCS8qIEVuYWJsZSBWQnVzIGNvbnRyb2wgZm9yIFVIUCBwb3J0cyAqLworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5wb3J0czsgaSsrKSB7CisJCWlmIChkYXRhLT52YnVzX3BpbltpXSkKKwkJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnZidXNfcGluW2ldLCAwKTsKKwl9CisKKwl1c2JoX29oY2lfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX29oY2lfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVVNCIEhTIERldmljZSAoR2FkZ2V0KQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiYV91ZGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9VRFBIU19GSUZPLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfVURQSFNfRklGTyArIFNaXzUxMksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VRFBIUywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVURQSFMgKyBTWl8xSyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VRFBIUywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0lEX1VEUEhTLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworI2RlZmluZSBFUChuYW0sIGlkeCwgbWF4cGt0LCBtYXhiaywgZG1hLCBpc29jKQkJCVwKKwlbaWR4XSA9IHsJCQkJCQlcCisJCS5uYW1lCQk9IG5hbSwJCQkJXAorCQkuaW5kZXgJCT0gaWR4LAkJCQlcCisJCS5maWZvX3NpemUJPSBtYXhwa3QsCQkJXAorCQkubnJfYmFua3MJPSBtYXhiaywJCQlcCisJCS5jYW5fZG1hCT0gZG1hLAkJCQlcCisJCS5jYW5faXNvYwk9IGlzb2MsCQkJCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiYV9lcF9kYXRhIHVzYmFfdWRjX2VwW10gX19pbml0ZGF0YSA9IHsKKwlFUCgiZXAwIiwgMCwgNjQsIDEsIDAsIDApLAorCUVQKCJlcDEiLCAxLCAxMDI0LCAyLCAxLCAxKSwKKwlFUCgiZXAyIiwgMiwgMTAyNCwgMiwgMSwgMSksCisJRVAoImVwMyIsIDMsIDEwMjQsIDMsIDEsIDApLAorCUVQKCJlcDQiLCA0LCAxMDI0LCAzLCAxLCAwKSwKKwlFUCgiZXA1IiwgNSwgMTAyNCwgMywgMSwgMSksCisJRVAoImVwNiIsIDYsIDEwMjQsIDMsIDEsIDEpLAorfTsKKworI3VuZGVmIEVQCisKKy8qCisgKiBwZGF0YSBkb2Vzbid0IGhhdmUgcm9vbSBmb3IgYW55IGVuZHBvaW50cywgc28gd2UgbmVlZCB0bworICogYXBwZW5kIHJvb20gZm9yIHRoZSBvbmVzIHdlIG5lZWQgcmlnaHQgYWZ0ZXIgaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgcGRhdGE7CisJc3RydWN0IHVzYmFfZXBfZGF0YSBlcFs3XTsKK30gdXNiYV91ZGNfZGF0YTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91c2JhX3VkY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYmFfdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmdXNiYV91ZGNfZGF0YS5wZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVzYmFfdWRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodXNiYV91ZGNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JhKHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgKmRhdGEpCit7CisJdXNiYV91ZGNfZGF0YS5wZGF0YS52YnVzX3BpbiA9IC1FSU5WQUw7CisJdXNiYV91ZGNfZGF0YS5wZGF0YS5udW1fZXAgPSBBUlJBWV9TSVpFKHVzYmFfdWRjX2VwKTsKKwltZW1jcHkodXNiYV91ZGNfZGF0YS5lcCwgdXNiYV91ZGNfZXAsIHNpemVvZih1c2JhX3VkY19lcCkpOzsKKworCWlmIChkYXRhICYmIGRhdGEtPnZidXNfcGluID4gMCkgeworCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnZidXNfcGluLCAwKTsKKwkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+dmJ1c19waW4sIDEpOworCQl1c2JhX3VkY19kYXRhLnBkYXRhLnZidXNfcGluID0gZGF0YS0+dmJ1c19waW47CisJfQorCisJLyogUHVsbHVwIHBpbiBpcyBoYW5kbGVkIGludGVybmFsbHkgYnkgVVNCIGRldmljZSBwZXJpcGhlcmFsICovCisKKwkvKiBDbG9ja3MgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXRtaV9jbGsiLCAmYXQ5MV91c2JhX3VkY19kZXZpY2UuZGV2LCAiaGNsayIpOworCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1ZHBoc19jbGsiLCAmYXQ5MV91c2JhX3VkY19kZXZpY2UuZGV2LCAicGNsayIpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VzYmFfdWRjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmEoc3RydWN0IHVzYmFfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgRXRoZXJuZXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNCKSB8fCBkZWZpbmVkKENPTkZJR19NQUNCX01PRFVMRSkKK3N0YXRpYyB1NjQgZXRoX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIGV0aF9kYXRhOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV0aF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfRU1BQyArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9FTUFDLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfRU1BQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2V0aF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm1hY2IiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJmV0aF9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmV0aF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gZXRoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXRoX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBhdDkxX2V0aF9kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJaWYgKGRhdGEtPnBoeV9pcnFfcGluKSB7CisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+cGh5X2lycV9waW4sIDApOworCQlhdDkxX3NldF9kZWdsaXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7CisJfQorCisJLyogUGlucyB1c2VkIGZvciBNSUkgYW5kIFJNSUkgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE3LCAwKTsJLyogRVRYQ0tfRVJFRkNLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNSwgMCk7CS8qIEVSWERWICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMiwgMCk7CS8qIEVSWDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEzLCAwKTsJLyogRVJYMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTYsIDApOwkvKiBFUlhFUiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTQsIDApOwkvKiBFVFhFTiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTAsIDApOwkvKiBFVFgwICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMSwgMCk7CS8qIEVUWDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsJLyogRU1ESU8gKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRU1EQyAqLworCisJaWYgKCFkYXRhLT5pc19ybWlpKSB7CisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjksIDApOwkvKiBFQ1JTICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMzAsIDApOwkvKiBFQ09MICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOCwgIDApOwkvKiBFUlgyICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBOSwgIDApOwkvKiBFUlgzICovCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjgsIDApOwkvKiBFUlhDSyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTYsICAwKTsJLyogRVRYMiAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTcsICAwKTsJLyogRVRYMyAqLworCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVRYRVIgKi8KKwl9CisKKwlldGhfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfZXRoX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgTkFORCAvIFNtYXJ0TWVkaWEKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVRNRUxfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgbmFuZF9kYXRhOworCisjZGVmaW5lIE5BTkRfQkFTRQlBVDkxX0NISVBTRUxFQ1RfMworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5hbmRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBOQU5EX0JBU0UsCisJCS5lbmQJPSBOQU5EX0JBU0UgKyBTWl8yNTZNIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQywKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0VDQyArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gbmFuZF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBjc2E7CisKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWNzYSA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9NQVRSSVhfRUJJQ1NBKTsKKwlhdDkxX3N5c193cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0VCSV9DUzNBX1NNQ19TTUFSVE1FRElBKTsKKworCS8qIGVuYWJsZSBwaW4gKi8KKwlpZiAoZGF0YS0+ZW5hYmxlX3BpbikKKwkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+ZW5hYmxlX3BpbiwgMSk7CisKKwkvKiByZWFkeS9idXN5IHBpbiAqLworCWlmIChkYXRhLT5yZHlfcGluKQorCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOworCisJLyogY2FyZCBkZXRlY3QgcGluICovCisJaWYgKGRhdGEtPmRldF9waW4pCisJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgMSk7CisKKwluYW5kX2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X25hbmRfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbmFuZChzdHJ1Y3QgYXRtZWxfbmFuZF9kYXRhICpkYXRhKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUV0kgKGkyYykKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBQcmVmZXIgdGhlIEdQSU8gY29kZSBzaW5jZSB0aGUgVFdJIGNvbnRyb2xsZXIgaXNuJ3Qgcm9idXN0CisgKiAoZ2V0cyBvdmVycnVucyBhbmQgdW5kZXJydW5zIHVuZGVyIGxvYWQpIGFuZCBjYW4gb25seSBpc3N1ZQorICogcmVwZWF0ZWQgU1RBUlRzIGluIG9uZSBzY2VuYXJpbyAodGhlIGRyaXZlciBkb2Vzbid0IHlldCBoYW5kbGUgdGhlbSkuCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIHBkYXRhX2kyYzAgPSB7CisJLnNkYV9waW4JCT0gQVQ5MV9QSU5fUEEyMCwKKwkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAorCS5zY2xfcGluCQk9IEFUOTFfUElOX1BBMjEsCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMSwKKwkudWRlbGF5CQkJPSAyLAkJLyogfjEwMCBrSHogKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3R3aTBfZGV2aWNlID0geworCS5uYW1lCQkJPSAiaTJjLWdwaW8iLAorCS5pZAkJCT0gMCwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmcGRhdGFfaTJjMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBwZGF0YV9pMmMxID0geworCS5zZGFfcGluCQk9IEFUOTFfUElOX1BCMTAsCisJLnNkYV9pc19vcGVuX2RyYWluCT0gMSwKKwkuc2NsX3BpbgkJPSBBVDkxX1BJTl9QQjExLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnVkZWxheQkJCT0gMiwJCS8qIH4xMDAga0h6ICovCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90d2kxX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImkyYy1ncGlvIiwKKwkuaWQJCQk9IDEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnBkYXRhX2kyYzEsCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykKK3sKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbyhpMmNfaWQsIGRldmljZXMsIG5yX2RldmljZXMpOworCisJaWYgKGkyY19pZCA9PSAwKSB7CisJCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjAsIDEpOwkJLyogVFdEIChTREEpICovCisJCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjAsIDEpOworCisJCWF0OTFfc2V0X0dQSU9fcGVyaXBoKEFUOTFfUElOX1BBMjEsIDEpOwkJLyogVFdDSyAoU0NMKSAqLworCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIxLCAxKTsKKworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3R3aTBfZGV2aWNlKTsKKwl9IGVsc2UgeworCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQjEwLCAxKTsJCS8qIFRXRCAoU0RBKSAqLworCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQjEwLCAxKTsKKworCQlhdDkxX3NldF9HUElPX3BlcmlwaChBVDkxX1BJTl9QQjExLCAxKTsJCS8qIFRXQ0sgKFNDTCkgKi8KKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEIxMSwgMSk7CisKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90d2kxX2RldmljZSk7CisJfQorfQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19JMkNfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0FUOTFfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kwLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1RXSTAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UV0kwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0d2kwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0d2kxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9UV0kxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1RXSTEsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UV0kxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0OTFfaTJjIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSB0d2kxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpMV9yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oaTJjX2lkLCBkZXZpY2VzLCBucl9kZXZpY2VzKTsKKworCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFjZSAqLworCWlmIChpMmNfaWQgPT0gMCkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIwLCAwKTsJCS8qIFRXRCAqLworCQlhdDkxX3NldF9tdWx0aV9kcml2ZShBVDkxX1BJTl9QQTIwLCAxKTsKKworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJCS8qIFRXQ0sgKi8KKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEEyMSwgMSk7CisKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV90d2kwX2RldmljZSk7CisJfSBlbHNlIHsKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMCk7CQkvKiBUV0QgKi8KKwkJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEIxMCwgMSk7CisKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMSwgMCk7CQkvKiBUV0NLICovCisJCWF0OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BCMTEsIDEpOworCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfdHdpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHNob3J0IGkyY19pZCwgc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgU1BJCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU1BJX0FUTUVMKSB8fCBkZWZpbmVkKENPTkZJR19TUElfQVRNRUxfTU9EVUxFKQorc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9TUEkwLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfU1BJMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NwaTBfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMF9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIzLCBBVDkxX1BJTl9QQjE4LCBBVDkxX1BJTl9QQjE5LCBBVDkxX1BJTl9QRDI3IH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3BpMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfU1BJMSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9TUEkxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfU1BJMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3NwaTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorCS5yZXNvdXJjZQk9IHNwaTFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5fUEIxNywgQVQ5MV9QSU5fUEQyOCwgQVQ5MV9QSU5fUEQxOCwgQVQ5MV9QSU5fUEQxOSB9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBjc19waW47CisJc2hvcnQgZW5hYmxlX3NwaTAgPSAwOworCXNob3J0IGVuYWJsZV9zcGkxID0gMDsKKworCS8qIENob29zZSBTUEkgY2hpcC1zZWxlY3RzICovCisJZm9yIChpID0gMDsgaSA8IG5yX2RldmljZXM7IGkrKykgeworCQlpZiAoZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCisJCQljc19waW4gPSAodW5zaWduZWQgbG9uZykgZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGE7CisJCWVsc2UgaWYgKGRldmljZXNbaV0uYnVzX251bSA9PSAwKQorCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKwkJZWxzZQorCQkJY3NfcGluID0gc3BpMV9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0XTsKKworCQlpZiAoZGV2aWNlc1tpXS5idXNfbnVtID09IDApCisJCQllbmFibGVfc3BpMCA9IDE7CisJCWVsc2UKKwkJCWVuYWJsZV9zcGkxID0gMTsKKworCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGluICovCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGNzX3BpbiwgMSk7CisKKwkJLyogcGFzcyBjaGlwLXNlbGVjdCBwaW4gdG8gZHJpdmVyICovCisJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOworCX0KKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGRldmljZXMsIG5yX2RldmljZXMpOworCisJLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCisJaWYgKGVuYWJsZV9zcGkwKSB7CisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMCwgMCk7CS8qIFNQSTBfTUlTTyAqLworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBTUEkwX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyLCAwKTsJLyogU1BJMF9TUENLICovCisKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNwaTBfY2xrIiwgJmF0OTFzYW05ZzQ1X3NwaTBfZGV2aWNlLmRldiwgInNwaV9jbGsiKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9zcGkwX2RldmljZSk7CisJfQorCWlmIChlbmFibGVfc3BpMSkgeworCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAwKTsJLyogU1BJMV9NSVNPICovCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDApOwkvKiBTUEkxX01PU0kgKi8KKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxNiwgMCk7CS8qIFNQSTFfU1BDSyAqLworCisJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJzcGkxX2NsayIsICZhdDkxc2FtOWc0NV9zcGkxX2RldmljZS5kZXYsICJzcGlfY2xrIik7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfc3BpMV9kZXZpY2UpOworCX0KK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIExDRCBDb250cm9sbGVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQVRNRUwpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0FUTUVMX01PRFVMRSkKK3N0YXRpYyB1NjQgbGNkY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBsY2RjX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0xDRENfQkFTRSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0xDRENfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX0xDREMsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9MQ0RDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV9sY2RjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfbGNkZmIiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmbGNkY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmxjZGNfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGxjZGNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfbGNkYyhzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMCwgMCk7CS8qIExDRERQV1IgKi8KKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMiwgMCk7CS8qIExDRENDICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUzLCAwKTsJLyogTENEVlNZTkMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTQsIDApOwkvKiBMQ0RIU1lOQyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFNSwgMCk7CS8qIExDRERPVENLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU2LCAwKTsJLyogTENEREVOICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEU3LCAwKTsJLyogTENERDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTgsIDApOwkvKiBMQ0REMSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFOSwgMCk7CS8qIExDREQyICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMCwgMCk7CS8qIExDREQzICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMSwgMCk7CS8qIExDREQ0ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMiwgMCk7CS8qIExDREQ1ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxMywgMCk7CS8qIExDREQ2ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNCwgMCk7CS8qIExDREQ3ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNSwgMCk7CS8qIExDREQ4ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNiwgMCk7CS8qIExDREQ5ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUxNywgMCk7CS8qIExDREQxMCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMTgsIDApOwkvKiBMQ0REMTEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTE5LCAwKTsJLyogTENERDEyICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMCwgMCk7CS8qIExDREQxMyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjEsIDApOwkvKiBMQ0REMTQgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTIyLCAwKTsJLyogTENERDE1ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyMywgMCk7CS8qIExDREQxNiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjQsIDApOwkvKiBMQ0REMTcgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI1LCAwKTsJLyogTENERDE4ICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyNiwgMCk7CS8qIExDREQxOSAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMjcsIDApOwkvKiBMQ0REMjAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRTI4LCAwKTsJLyogTENERDIxICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEUyOSwgMCk7CS8qIExDREQyMiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BFMzAsIDApOwkvKiBMQ0REMjMgKi8KKworCWxjZGNfZGF0YSA9ICpkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV9sY2RjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2xjZGMoc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gKmRhdGEpIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFRpbWVyL0NvdW50ZXIgYmxvY2sKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfQVRNRUxfVENMSUIKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMCwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90Y2IwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSB0Y2IwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMF9yZXNvdXJjZXMpLAorfTsKKworLyogVENCMSBiZWdpbnMgd2l0aCBUQzMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGNiMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSwKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfVENCMSArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9UQ0IsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV90Y2IxX2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdGNiIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSB0Y2IxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodGNiMV9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV90Yyh2b2lkKQoreworCS8qIHRoaXMgY2hpcCBoYXMgb25lIGNsb2NrIGFuZCBpcnEgZm9yIGFsbCBzaXggVEMgY2hhbm5lbHMgKi8KKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGNiX2NsayIsICZhdDkxc2FtOWc0NV90Y2IwX2RldmljZS5kZXYsICJ0MF9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjBfZGV2aWNlKTsKKwlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidGNiX2NsayIsICZhdDkxc2FtOWc0NV90Y2IxX2RldmljZS5kZXYsICJ0MF9jbGsiKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3RjYjFfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3RjKHZvaWQpIHsgfQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBSVEMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0FUOTFSTTkyMDApIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQVQ5MVJNOTIwMF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ydGNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX3J0YyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcnRjKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOWc0NV9ydGNfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0Yyh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBSVFQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnR0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfUlRULAorCQkuZW5kCT0gQVQ5MV9CQVNFX1NZUyArIEFUOTFfUlRUICsgU1pfMTYgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9ydHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX3J0dCIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gcnR0X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocnR0X3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3J0dCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfcnR0X2RldmljZSk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBXYXRjaGRvZworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxU0FNOV9XQVRDSERPR19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV93ZHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdDkxX3dkdCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X3dkdF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2codm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgUFdNCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVE1FTF9QV00pIHx8IGRlZmluZWQoQ09ORklHX0FUTUVMX1BXTV9NT0RVTEUpCitzdGF0aWMgdTMyIHB3bV9tYXNrOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB3bV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfUFdNQyArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9QV01DLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfUFdNQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X3B3bTBfZGV2aWNlID0geworCS5uYW1lCT0gImF0bWVsX3B3bSIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnB3bV9tYXNrLAorCX0sCisJLnJlc291cmNlCT0gcHdtX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocHdtX3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfcHdtKHUzMiBtYXNrKQoreworCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00wKSkKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQyNCwgMSk7CS8qIGVuYWJsZSBQV00wICovCisKKwlpZiAobWFzayAmICgxIDw8IEFUOTFfUFdNMSkpCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BEMzEsIDEpOwkvKiBlbmFibGUgUFdNMSAqLworCisJaWYgKG1hc2sgJiAoMSA8PCBBVDkxX1BXTTIpKQorCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QRDI2LCAxKTsJLyogZW5hYmxlIFBXTTIgKi8KKworCWlmIChtYXNrICYgKDEgPDwgQVQ5MV9QV00zKSkKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEQwLCAxKTsJLyogZW5hYmxlIFBXTTMgKi8KKworCXB3bV9tYXNrID0gbWFzazsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTlnNDVfcHdtMF9kZXZpY2UpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9wd20odTMyIG1hc2spIHt9CisjZW5kaWYKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIFNTQyAtLSBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0FUTUVMX1NTQykgfHwgZGVmaW5lZChDT05GSUdfQVRNRUxfU1NDX01PRFVMRSkKK3N0YXRpYyB1NjQgc3NjMF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MwICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1NTQzAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9TU0MwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3NjMF9kZXZpY2UgPSB7CisJLm5hbWUJPSAic3NjIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5kbWFfbWFzawkJPSAmc3NjMF9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLnJlc291cmNlCT0gc3NjMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMF9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMSwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEspCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMCwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEQpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkspCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENCwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkYpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENSwgMSk7Cit9CisKK3N0YXRpYyB1NjQgc3NjMV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzc2MxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9TU0MxICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0lEX1NTQzEsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9TU0MxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfc3NjMV9kZXZpY2UgPSB7CisJLm5hbWUJPSAic3NjIiwKKwkuaWQJPSAxLAorCS5kZXYJPSB7CisJCS5kbWFfbWFzawkJPSAmc3NjMV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLnJlc291cmNlCT0gc3NjMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzYzFfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfc3NjMV9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfVEYpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTQsIDEpOworCWlmIChwaW5zICYgQVRNRUxfU1NDX1RLKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEyLCAxKTsKKwlpZiAocGlucyAmIEFUTUVMX1NTQ19URCkKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxMCwgMSk7CisJaWYgKHBpbnMgJiBBVE1FTF9TU0NfUkQpCisJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMTEsIDEpOworCWlmIChwaW5zICYgQVRNRUxfU1NDX1JLKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDEzLCAxKTsKKwlpZiAocGlucyAmIEFUTUVMX1NTQ19SRikKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNSwgMSk7Cit9CisKKy8qCisgKiBTU0MgY29udHJvbGxlcnMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggbGlicmFyeSBjb2RlLCBpbnN0ZWFkIG9mIGFueQorICoga2luZCBvZiBhbGwtc2luZ2luZy9hbGwtZGFuY2luZyBkcml2ZXIuICBGb3IgZXhhbXBsZSBvbmUgY291bGQgYmUKKyAqIHVzZWQgYnkgYSBwYXJ0aWN1bGFyIEkyUyBhdWRpbyBjb2RlYydzIGRyaXZlciwgd2hpbGUgYW5vdGhlciBvbmUKKyAqIG9uIHRoZSBzYW1lIHN5c3RlbSBtaWdodCBiZSB1c2VkIGJ5IGEgY3VzdG9tIGRhdGEgY2FwdHVyZSBkcml2ZXIuCisgKi8KK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zc2ModW5zaWduZWQgaWQsIHVuc2lnbmVkIHBpbnMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCS8qCisJICogTk9URTogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5nIGluZm9ybWF0aW9uIG1hdGNoaW5nCisJICogInBpbnMiIHRvIHdoYXRldmVyIHdpbGwgYmUgdXNpbmcgZWFjaCBwYXJ0aWN1bGFyIGNvbnRyb2xsZXIuCisJICovCisJc3dpdGNoIChpZCkgeworCWNhc2UgQVQ5MVNBTTlHNDVfSURfU1NDMDoKKwkJcGRldiA9ICZhdDkxc2FtOWc0NV9zc2MwX2RldmljZTsKKwkJY29uZmlndXJlX3NzYzBfcGlucyhwaW5zKTsKKwkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInNzYzBfY2xrIiwgJnBkZXYtPmRldiwgInBjbGsiKTsKKwkJYnJlYWs7CisJY2FzZSBBVDkxU0FNOUc0NV9JRF9TU0MxOgorCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X3NzYzFfZGV2aWNlOworCQljb25maWd1cmVfc3NjMV9waW5zKHBpbnMpOworCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgic3NjMV9jbGsiLCAmcGRldi0+ZGV2LCAicGNsayIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOworfQorCisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NzYyh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcGlucykge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgVUFSVAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9BVE1FTCkKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGJndV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfVkFfQkFTRV9TWVMgKyBBVDkxX0RCR1UsCisJCS5lbmQJPSBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVICsgU1pfNTEyIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFfSURfU1lTLAorCQkuZW5kCT0gQVQ5MV9JRF9TWVMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSBkYmd1X2RhdGEgPSB7CisJLnVzZV9kbWFfdHgJPSAwLAorCS51c2VfZG1hX3J4CT0gMCwKKwkucmVncwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9TWVMgKyBBVDkxX0RCR1UpLAorfTsKKworc3RhdGljIHU2NCBkYmd1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV9kYmd1X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmZGJndV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmRiZ3VfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGRiZ3VfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkYmd1X3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX2RiZ3VfcGlucyh2b2lkKQoreworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTIsIDApOwkJLyogRFJYRCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTMsIDEpOwkJLyogRFRYRCAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VUzAsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9VUzAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0MF9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgdTY0IHVhcnQwX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnVhcnQwX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDBfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQwX3BpbnModW5zaWduZWQgcGlucykKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE5LCAxKTsJCS8qIFRYRDAgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE4LCAwKTsJCS8qIFJYRDAgKi8KKworCWlmIChwaW5zICYgQVRNRUxfVUFSVF9SVFMpCisJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMTcsIDApOwkvKiBSVFMwICovCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEIxNSwgMCk7CS8qIENUUzAgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzEgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfSURfVVMxLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfVVMxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDFfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHU2NCB1YXJ0MV9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdWFydDFfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0MV9kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQxX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQxX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MV9waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI0LCAxKTsJCS8qIFRYRDEgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjUsIDApOwkJLyogUlhEMSAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQxNiwgMCk7CS8qIFJUUzEgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QRDE3LCAwKTsJLyogQ1RTMSAqLworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzIsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9CQVNFX1VTMiArIFNaXzE2SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9VUzIsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9VUzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0Ml9kYXRhID0geworCS51c2VfZG1hX3R4CT0gMSwKKwkudXNlX2RtYV9yeAk9IDEsCit9OworCitzdGF0aWMgdTY0IHVhcnQyX2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV91YXJ0Ml9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJCQkuZG1hX21hc2sJCT0gJnVhcnQyX2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdWFydDJfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDJfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQyX3BpbnModW5zaWduZWQgcGlucykKK3sKKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjYsIDEpOwkJLyogVFhEMiAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CQkvKiBSWEQyICovCisKKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfUlRTKQorCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQzksIDApOwkvKiBSVFMyICovCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX0NUUykKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEMxMSwgMCk7CS8qIENUUzIgKi8KK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05RzQ1X0JBU0VfVVMzLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfSURfVVMzLAorCQkuZW5kCT0gQVQ5MVNBTTlHNDVfSURfVVMzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdG1lbF91YXJ0X2RhdGEgdWFydDNfZGF0YSA9IHsKKwkudXNlX2RtYV90eAk9IDEsCisJLnVzZV9kbWFfcngJPSAxLAorfTsKKworc3RhdGljIHU2NCB1YXJ0M19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlnNDVfdWFydDNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF91c2FydCIsCisJLmlkCQk9IDQsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZ1YXJ0M19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVhcnQzX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSB1YXJ0M19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVhcnQzX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0M19waW5zKHVuc2lnbmVkIHBpbnMpCit7CisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI4LCAxKTsJCS8qIFRYRDMgKi8KKwlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjksIDApOwkJLyogUlhEMyAqLworCisJaWYgKHBpbnMgJiBBVE1FTF9VQVJUX1JUUykKKwkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CS8qIFJUUzMgKi8KKwlpZiAocGlucyAmIEFUTUVMX1VBUlRfQ1RTKQorCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI0LCAwKTsJLyogQ1RTMyAqLworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX19pbml0ZGF0YSBhdDkxX3VhcnRzW0FUTUVMX01BWF9VQVJUXTsJLyogdGhlIFVBUlRzIHRvIHVzZSAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsJLyogdGhlIHNlcmlhbCBjb25zb2xlIGRldmljZSAqLworCit2b2lkIF9faW5pdCBhdDkxX3JlZ2lzdGVyX3VhcnQodW5zaWduZWQgaWQsIHVuc2lnbmVkIHBvcnRuciwgdW5zaWduZWQgcGlucykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJc3dpdGNoIChpZCkgeworCQljYXNlIDA6CQkvKiBEQkdVICovCisJCQlwZGV2ID0gJmF0OTFzYW05ZzQ1X2RiZ3VfZGV2aWNlOworCQkJY29uZmlndXJlX2RiZ3VfcGlucygpOworCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoIm1jayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMwOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0MF9kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQwX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQwX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMxOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0MV9kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQxX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQxX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMyOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0Ml9kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQyX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQyX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWNhc2UgQVQ5MVNBTTlHNDVfSURfVVMzOgorCQkJcGRldiA9ICZhdDkxc2FtOWc0NV91YXJ0M19kZXZpY2U7CisJCQljb25maWd1cmVfdXNhcnQzX3BpbnMocGlucyk7CisJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQzX2NsayIsICZwZGV2LT5kZXYsICJ1c2FydCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm47CisJfQorCXBkZXYtPmlkID0gcG9ydG5yOwkJLyogdXBkYXRlIHRvIG1hcHBlZCBJRCAqLworCisJaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQorCQlhdDkxX3VhcnRzW3BvcnRucl0gPSBwZGV2OworfQorCit2b2lkIF9faW5pdCBhdDkxX3NldF9zZXJpYWxfY29uc29sZSh1bnNpZ25lZCBwb3J0bnIpCit7CisJaWYgKHBvcnRuciA8IEFUTUVMX01BWF9VQVJUKQorCQlhdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlID0gYXQ5MV91YXJ0c1twb3J0bnJdOworfQorCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRNRUxfTUFYX1VBUlQ7IGkrKykgeworCQlpZiAoYXQ5MV91YXJ0c1tpXSkKKwkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcihhdDkxX3VhcnRzW2ldKTsKKwl9CisKKwlpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZpY2UpCisJCXByaW50ayhLRVJOX0lORk8gIkFUOTE6IE5vIGRlZmF1bHQgc2VyaWFsIGNvbnNvbGUgZGVmaW5lZC5cbiIpOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IGF0OTFfcmVnaXN0ZXJfdWFydCh1bnNpZ25lZCBpZCwgdW5zaWduZWQgcG9ydG5yLCB1bnNpZ25lZCBwaW5zKSB7fQordm9pZCBfX2luaXQgYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUodW5zaWduZWQgcG9ydG5yKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2b2lkKSB7fQorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBUaGVzZSBkZXZpY2VzIGFyZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKKyAqIHNldHVwLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpCit7CisJYXQ5MV9hZGRfZGV2aWNlX3J0YygpOworCWF0OTFfYWRkX2RldmljZV9ydHQoKTsKKwlhdDkxX2FkZF9kZXZpY2Vfd2F0Y2hkb2coKTsKKwlhdDkxX2FkZF9kZXZpY2VfdGMoKTsKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1hZmViLTkyNjB2MS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMKaW5kZXggOTcwZmQ2Yi4uNjFlNTJiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWFmZWItOTI2MHYxLmMKQEAgLTE3NCw2ICsxNzQsMTYgQEAKIAl9LAogfTsKIAorLyoKKyAqIElERSAoQ0YgVHJ1ZSBJREUgbW9kZSkKKyAqLworc3RhdGljIHN0cnVjdCBhdDkxX2NmX2RhdGEgYWZlYjkyNjBfY2ZfZGF0YSA9IHsKKwkuY2hpcHNlbGVjdCA9IDQsCisJLmlycV9waW4gICAgPSBBVDkxX1BJTl9QQTYsCisJLnJzdF9waW4gICAgPSBBVDkxX1BJTl9QQTcsCisJLmZsYWdzICAgICAgPSBBVDkxX0NGX1RSVUVfSURFLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGFmZWI5MjYwX2JvYXJkX2luaXQodm9pZCkKIHsKIAkvKiBTZXJpYWwgKi8KQEAgLTIwMiw2ICsyMTIsOCBAQAogCQkJQVJSQVlfU0laRShhZmViOTI2MF9pMmNfZGV2aWNlcykpOwogCS8qIEF1ZGlvICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NzYyhBVDkxU0FNOTI2MF9JRF9TU0MsIEFUTUVMX1NTQ19UWCk7CisJLyogSURFICovCisJYXQ5MV9hZGRfZGV2aWNlX2NmKCZhZmViOTI2MF9jZl9kYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChBRkVCOTI2MCwgIkN1c3RvbSBhZmViOTI2MCBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzJlOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1OWtyZWEuYwpAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHU5a3JlYS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBTQU4gUGVvcGxlCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEF0bWVsCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2F0OTFzYW05X3NtYy5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjBfbWF0cml4Lmg+CisKKyNpbmNsdWRlICJzYW05X3NtYy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworc3RhdGljIHZvaWQgX19pbml0IGNwdTlrcmVhX21hcF9pbyh2b2lkKQoreworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KKwlhdDkxc2FtOTI2MF9pbml0aWFsaXplKDE4NDMyMDAwKTsKKworCS8qIERHQlUgb24gdHR5UzAuIChSeCAmIFR4IG9ubHkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KDAsIDAsIDApOworCisJLyogVVNBUlQwIG9uIHR0eVMxLiAoUngsIFR4LCBDVFMsIFJUUywgRFRSLCBEU1IsIERDRCwgUkkpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfAorCQlBVE1FTF9VQVJUX1JUUyB8IEFUTUVMX1VBUlRfRFRSIHwgQVRNRUxfVUFSVF9EU1IgfAorCQlBVE1FTF9VQVJUX0RDRCB8IEFUTUVMX1VBUlRfUkkpOworCisJLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTkyNjBfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8CisJCUFUTUVMX1VBUlRfUlRTKTsKKworCS8qIFVTQVJUMiBvbiB0dHlTMy4gKFJ4LCBUeCwgUlRTLCBDVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMiwgMywgQVRNRUxfVUFSVF9DVFMgfAorCQlBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBVU0FSVDMgb24gdHR5UzQuIChSeCwgVHgpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTMywgNCwgMCk7CisKKwkvKiBVU0FSVDQgb24gdHR5UzUuIChSeCwgVHgpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNCwgNSwgMCk7CisKKwkvKiBVU0FSVDUgb24gdHR5UzYuIChSeCwgVHgpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFTQU05MjYwX0lEX1VTNSwgNiwgMCk7CisKKwkvKiBzZXQgc2VyaWFsIGNvbnNvbGUgdG8gdHR5UzAgKGllLCBEQkdVKSAqLworCWF0OTFfc2V0X3NlcmlhbF9jb25zb2xlKDApOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxc2FtOTI2MF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKy8qCisgKiBVU0IgSG9zdCBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV91c2JoX2RhdGEgPSB7CisJLnBvcnRzCQk9IDIsCit9OworCisvKgorICogVVNCIERldmljZSBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSBfX2luaXRkYXRhIGNwdTlrcmVhX3VkY19kYXRhID0geworCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BDOCwKKwkucHVsbHVwX3Bpbgk9IDAsCQkvKiBwdWxsLXVwIGRyaXZlbiBieSBVREMgKi8KK307CisKKy8qCisgKiBNQUNCIEV0aGVybmV0IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9tYWNiX2RhdGEgPSB7CisJLmlzX3JtaWkJPSAxLAorfTsKKworLyoKKyAqIE5BTkQgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX2RhdGEgPSB7CisJLmFsZQkJPSAyMSwKKwkuY2xlCQk9IDIyLAorCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMxMywKKwkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMTQsCisJLmJ1c193aWR0aF8xNgk9IDAsCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9uYW5kX3NtY19jb25maWcgPSB7CisJLm5jc19yZWFkX3NldHVwCQk9IDAsCisJLm5yZF9zZXR1cAkJPSAxLAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAwLAorCS5ud2Vfc2V0dXAJCT0gMSwKKworCS5uY3NfcmVhZF9wdWxzZQkJPSAzLAorCS5ucmRfcHVsc2UJCT0gMywKKwkubmNzX3dyaXRlX3B1bHNlCT0gMywKKwkubndlX3B1bHNlCQk9IDMsCisKKwkucmVhZF9jeWNsZQkJPSA1LAorCS53cml0ZV9jeWNsZQkJPSA1LAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCisJCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0RCV184LAorCS50ZGZfY3ljbGVzCQk9IDIsCit9OworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgY3B1OWtyZWFfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMiwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDIsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNCwKKwkubnJkX3B1bHNlCQk9IDQsCisJLm5jc193cml0ZV9wdWxzZQk9IDQsCisJLm53ZV9wdWxzZQkJPSA0LAorCisJLnJlYWRfY3ljbGUJCT0gNywKKwkud3JpdGVfY3ljbGUJCT0gNywKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERQorCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19EQldfOCwKKwkudGRmX2N5Y2xlcwkJPSAzLAorfTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9uYW5kKHZvaWQpCit7CisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZjcHU5a3JlYV9uYW5kX3NtY19jb25maWcpOworCWF0OTFfYWRkX2RldmljZV9uYW5kKCZjcHU5a3JlYV9uYW5kX2RhdGEpOworfQorCisvKgorICogTk9SIGZsYXNoCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNwdWF0OTI2MF9ub3JfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKK307CisKKyNkZWZpbmUgTk9SX0JBU0UJQVQ5MV9DSElQU0VMRUNUXzAKKyNkZWZpbmUgTk9SX1NJWkUJU1pfNjRNCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTk9SX0JBU0UsCisJCS5lbmQJPSBOT1JfQkFTRSArIE5PUl9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1OWtyZWFfbm9yX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY3B1YXQ5MjYwX25vcl9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gbm9yX2ZsYXNoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3Jlc291cmNlcyksCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfQ1BVOTI2MAorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDEwLAorCS5ucmRfcHVsc2UJCT0gMTAsCisJLm5jc193cml0ZV9wdWxzZQk9IDYsCisJLm53ZV9wdWxzZQkJPSA2LAorCisJLnJlYWRfY3ljbGUJCT0gMTIsCisJLndyaXRlX2N5Y2xlCQk9IDgsCisKKwkubW9kZQkJCT0gQVQ5MV9TTUNfUkVBRE1PREUgfCBBVDkxX1NNQ19XUklURU1PREUKKwkJCXwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX0JBVF9XUklURQorCQkJfCBBVDkxX1NNQ19EQldfMTYsCisJLnRkZl9jeWNsZXMJCT0gMiwKK307CisjZWxzZQorc3RhdGljIHN0cnVjdCBzYW05X3NtY19jb25maWcgX19pbml0ZGF0YSBjcHU5a3JlYV9ub3Jfc21jX2NvbmZpZyA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMCwKKwkubnJkX3NldHVwCQk9IDEsCisJLm5jc193cml0ZV9zZXR1cAk9IDAsCisJLm53ZV9zZXR1cAkJPSAxLAorCisJLm5jc19yZWFkX3B1bHNlCQk9IDEzLAorCS5ucmRfcHVsc2UJCT0gMTMsCisJLm5jc193cml0ZV9wdWxzZQk9IDgsCisJLm53ZV9wdWxzZQkJPSA4LAorCisJLnJlYWRfY3ljbGUJCT0gMTUsCisJLndyaXRlX2N5Y2xlCQk9IDEwLAorCisJLm1vZGUJCQk9IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJVEVNT0RFCisJCQl8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUgfCBBVDkxX1NNQ19CQVRfV1JJVEUKKwkJCXwgQVQ5MV9TTUNfREJXXzE2LAorCS50ZGZfY3ljbGVzCQk9IDIsCit9OworI2VuZGlmCisKK3N0YXRpYyBfX2luaXQgdm9pZCBjcHU5a3JlYV9hZGRfZGV2aWNlX25vcih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY3NhOworCisJY3NhID0gYXQ5MV9zeXNfcmVhZChBVDkxX01BVFJJWF9FQklDU0EpOworCWF0OTFfc3lzX3dyaXRlKEFUOTFfTUFUUklYX0VCSUNTQSwgY3NhIHwgQVQ5MV9NQVRSSVhfVkRESU9NU0VMXzNfM1YpOworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDAgKE5PUikgKi8KKwlzYW05X3NtY19jb25maWd1cmUoMCwgJmNwdTlrcmVhX25vcl9zbWNfY29uZmlnKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3B1OWtyZWFfbm9yX2ZsYXNoKTsKK30KKworLyoKKyAqIExFRHMKKyAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjcHU5a3JlYV9sZWRzW10gPSB7CisJewkvKiBMRUQxICovCisJCS5uYW1lCQkJPSAiTEVEMSIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzExLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gInRpbWVyIiwKKwl9LAorCXsJLyogTEVEMiAqLworCQkubmFtZQkJCT0gIkxFRDIiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMxMiwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCX0sCisJewkvKiBMRUQzICovCisJCS5uYW1lCQkJPSAiTEVEMyIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQzcsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJfSwKKwl7CS8qIExFRDQgKi8KKwkJLm5hbWUJCQk9ICJMRUQ0IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BDOSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgY3B1OWtyZWFfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtZHMxMzA3IiwgMHg2OCksCisJCS50eXBlCT0gImRzMTMzOSIsCisJfSwKK307CisKKy8qCisgKiBHUElPIEJ1dHRvbnMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNwdTlrcmVhX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5ncGlvCQk9IEFUOTFfUElOX1BDMywKKwkJLmNvZGUJCT0gQlROXzAsCisJCS5kZXNjCQk9ICJCUDEiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS53YWtldXAJCT0gMSwKKwl9LAorCXsKKwkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIyMCwKKwkJLmNvZGUJCT0gQlROXzEsCisJCS5kZXNjCQk9ICJCUDIiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS53YWtldXAJCT0gMSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGNwdTlrcmVhX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0gY3B1OWtyZWFfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGNwdTlrcmVhX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3B1OWtyZWFfYnV0dG9uX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjcHU5a3JlYV9idXR0b25fZGF0YSwKKwl9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCit7CisJYXQ5MV9zZXRfZ3Bpb19pbnB1dChBVDkxX1BJTl9QQzMsIDEpOwkvKiBCUDEgKi8KKwlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQzMsIDEpOworCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIyMCwgMSk7CS8qIEJQMiAqLworCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMjAsIDEpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjcHU5a3JlYV9idXR0b25fZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1OWtyZWFfYWRkX2RldmljZV9idXR0b25zKHZvaWQpCit7Cit9CisjZW5kaWYKKworLyoKKyAqIE1DSSAoU0QvTU1DKQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfbW1jX2RhdGEgX19pbml0ZGF0YSBjcHU5a3JlYV9tbWNfZGF0YSA9IHsKKwkuc2xvdF9iCQk9IDAsCisJLndpcmU0CQk9IDEsCisJLmRldF9waW4JPSBBVDkxX1BJTl9QQTI5LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNwdTlrcmVhX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBOT1IgKi8KKwljcHU5a3JlYV9hZGRfZGV2aWNlX25vcigpOworCS8qIFNlcmlhbCAqLworCWF0OTFfYWRkX2RldmljZV9zZXJpYWwoKTsKKwkvKiBVU0IgSG9zdCAqLworCWF0OTFfYWRkX2RldmljZV91c2JoKCZjcHU5a3JlYV91c2JoX2RhdGEpOworCS8qIFVTQiBEZXZpY2UgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjcHU5a3JlYV91ZGNfZGF0YSk7CisJLyogTkFORCAqLworCWNwdTlrcmVhX2FkZF9kZXZpY2VfbmFuZCgpOworCS8qIEV0aGVybmV0ICovCisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3B1OWtyZWFfbWFjYl9kYXRhKTsKKwkvKiBNTUMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZjcHU5a3JlYV9tbWNfZGF0YSk7CisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYyhjcHU5a3JlYV9pMmNfZGV2aWNlcywKKwkJQVJSQVlfU0laRShjcHU5a3JlYV9pMmNfZGV2aWNlcykpOworCS8qIExFRHMgKi8KKwlhdDkxX2dwaW9fbGVkcyhjcHU5a3JlYV9sZWRzLCBBUlJBWV9TSVpFKGNwdTlrcmVhX2xlZHMpKTsKKwkvKiBQdXNoIEJ1dHRvbnMgKi8KKwljcHU5a3JlYV9hZGRfZGV2aWNlX2J1dHRvbnMoKTsKK30KKworI2lmZGVmIENPTkZJR19NQUNIX0NQVTkyNjAKK01BQ0hJTkVfU1RBUlQoQ1BVQVQ5MjYwLCAiRXVrcmVhIENQVTkyNjAiKQorI2Vsc2UKK01BQ0hJTkVfU1RBUlQoQ1BVQVQ5RzIwLCAiRXVrcmVhIENQVTlHMjAiKQorI2VuZGlmCisJLyogTWFpbnRhaW5lcjogRXJpYyBCZW5hcmQgLSBFVUtSRUEgRWxlY3Ryb21hdGlxdWUgKi8KKwkucGh5c19pbwk9IEFUOTFfQkFTRV9TWVMsCisJLmlvX3BnX29mZnN0CT0gKEFUOTFfVkFfQkFTRV9TWVMgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IEFUOTFfU0RSQU1fQkFTRSArIDB4MTAwLAorCS50aW1lcgkJPSAmYXQ5MXNhbTkyNnhfdGltZXIsCisJLm1hcF9pbwkJPSBjcHU5a3JlYV9tYXBfaW8sCisJLmluaXRfaXJxCT0gY3B1OWtyZWFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGNwdTlrcmVhX2JvYXJkX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNwdWF0OTEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4ZDk5NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jcHVhdDkxLmMKQEAgLTAsMCArMSwxODUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY3B1YXQ5MS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMF9tYy5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNwdWF0OTFfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEMwLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1YXQ5MV9tYXBfaW8odm9pZCkKK3sKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCisJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDE4NDMyMDAwLCBBVDkxUk05MjAwX1BRRlApOworCisJLyogREJHVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgb24gdHR5UzEuIChSeCwgVHgsIENUUywgUlRTKSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMCwgMSwgQVRNRUxfVUFSVF9DVFMgfAorCQlBVE1FTF9VQVJUX1JUUyk7CisKKwkvKiBVU0FSVDEgb24gdHR5UzIuIChSeCwgVHgsIENUUywgUlRTLCBEVFIsIERTUiwgRENELCBSSSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVJNOTIwMF9JRF9VUzEsIDIsIEFUTUVMX1VBUlRfQ1RTIHwKKwkJQVRNRUxfVUFSVF9SVFMgfCBBVE1FTF9VQVJUX0RUUiB8IEFUTUVMX1VBUlRfRFNSIHwKKwkJQVRNRUxfVUFSVF9EQ0QgfCBBVE1FTF9VQVJUX1JJKTsKKworCS8qIFVTQVJUMiBvbiB0dHlTMyAoUngsIFR4KSAqLworCWF0OTFfcmVnaXN0ZXJfdWFydChBVDkxUk05MjAwX0lEX1VTMiwgMywgMCk7CisKKwkvKiBVU0FSVDMgb24gdHR5UzQgKFJ4LCBUeCwgQ1RTLCBSVFMpICovCisJYXQ5MV9yZWdpc3Rlcl91YXJ0KEFUOTFSTTkyMDBfSURfVVMzLCA0LCBBVE1FTF9VQVJUX0NUUyB8CisJCUFUTUVMX1VBUlRfUlRTKTsKKworCS8qIHNldCBzZXJpYWwgY29uc29sZSB0byB0dHlTMCAoaWUsIERCR1UpICovCisJYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUoMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjcHVhdDkxX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfZXRoX2RhdGEgPSB7CisJLmlzX3JtaWkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDkxX3VzYmhfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfdXNiaF9kYXRhID0geworCS5wb3J0cwkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIF9faW5pdGRhdGEgY3B1YXQ5MV91ZGNfZGF0YSA9IHsKKwkudmJ1c19waW4JPSBBVDkxX1BJTl9QQzE1LAorCS5wdWxsdXBfcGluCT0gQVQ5MV9QSU5fUEMxNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9tbWNfZGF0YSBfX2luaXRkYXRhIGNwdWF0OTFfbW1jX2RhdGEgPSB7CisJLmRldF9waW4JPSBBVDkxX1BJTl9QQzIsCisJLndpcmU0CQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBjcHVhdDkxX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNwdWF0OTFfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEFUOTFfQ0hJUFNFTEVDVF8wLAorCS5lbmQJCT0gQVQ5MV9DSElQU0VMRUNUXzAgKyBTWl8xNk0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNwdWF0OTFfbm9yZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNwdWF0OTFfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9ICZjcHVhdDkxX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKKyNpZmRlZiBDT05GSUdfTVREX1BMQVRSQU0KK3N0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIGF0OTFfc3JhbV9wZGF0YSA9IHsKKwkubWFwbmFtZQk9ICJTUkFNIiwKKwkuYmFua3dpZHRoCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9zcmFtX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBBVDkxUk05MjAwX1NSQU1fQkFTRSwKKwkJLmVuZCAgID0gQVQ5MVJNOTIwMF9TUkFNX0JBU0UgKyBBVDkxUk05MjAwX1NSQU1fU0laRSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxX3NyYW0gPSB7CisJLm5hbWUJCT0gIm10ZC1yYW0iLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IGF0OTFfc3JhbV9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoYXQ5MV9zcmFtX3Jlc291cmNlKSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZhdDkxX3NyYW1fcGRhdGEsCisJfSwKK307CisjZW5kaWYgLyogTVREX1BMQVRSQU0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjcHVhdDkxX25vcmZsYXNoLAorI2lmZGVmIENPTkZJR19NVERfUExBVFJBTQorCSZhdDkxX3NyYW0sCisjZW5kaWYgLyogQ09ORklHX01URF9QTEFUUkFNICovCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY3B1YXQ5MV9ib2FyZF9pbml0KHZvaWQpCit7CisJLyogU2VyaWFsICovCisJYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCgpOworCS8qIExFRHMuICovCisJYXQ5MV9ncGlvX2xlZHMoY3B1YXQ5MV9sZWRzLCBBUlJBWV9TSVpFKGNwdWF0OTFfbGVkcykpOworCS8qIEV0aGVybmV0ICovCisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmY3B1YXQ5MV9ldGhfZGF0YSk7CisJLyogVVNCIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaCgmY3B1YXQ5MV91c2JoX2RhdGEpOworCS8qIFVTQiBEZXZpY2UgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdWRjKCZjcHVhdDkxX3VkY19kYXRhKTsKKwkvKiBNTUMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZjcHVhdDkxX21tY19kYXRhKTsKKwkvKiBJMkMgKi8KKwlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOworCS8qIFBsYXRmb3JtIGRldmljZXMgKi8KKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChDUFVBVDkxLCAiRXVrcmVhIikKKwkvKiBNYWludGFpbmVyOiBFcmljIEJlbmFyZCAtIEVVS1JFQSBFbGVjdHJvbWF0aXF1ZSAqLworCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKKwkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQVQ5MV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLnRpbWVyCQk9ICZhdDkxcm05MjAwX3RpbWVyLAorCS5tYXBfaW8JCT0gY3B1YXQ5MV9tYXBfaW8sCisJLmluaXRfaXJxCT0gY3B1YXQ5MV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gY3B1YXQ5MV9ib2FyZF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYxZWsuYwppbmRleCBkNTI2NmRhLi5mOWIxOTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2MWVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjFlay5jCkBAIC0yODcsNyArMjg3LDExIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXQ3M2MyMTNfYm9hcmRfaW5mbyBhdDczYzIxM19kYXRhID0gewogCS5zc2NfaWQJCT0gMSwKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0FUOTFTQU05MjYxRUspCiAJLnNob3J0bmFtZQk9ICJBVDkxU0FNOTI2MS1FSyBleHRlcm5hbCBEQUMiLAorI2Vsc2UKKwkuc2hvcnRuYW1lCT0gIkFUOTFTQU05RzEwLUVLIGV4dGVybmFsIERBQyIsCisjZW5kaWYKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfQVQ3M0MyMTMpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDczQzIxM19NT0RVTEUpCkBAIC00MTQsNiArNDE4LDkgQEAKIAkuZGVmYXVsdF9tb25zcGVjcwkJPSAmYXQ5MWZiX2RlZmF1bHRfc3RuX21vbnNwZWNzLAogCS5hdG1lbF9sY2RmYl9wb3dlcl9jb250cm9sCT0gYXQ5MV9sY2RjX3N0bl9wb3dlcl9jb250cm9sLAogCS5ndWFyZF90aW1lCQkJPSAxLAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQVQ5MVNBTTlHMTBFSykKKwkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQiwKKyNlbmRpZgogfTsKIAogI2Vsc2UKQEAgLTQ2Nyw2ICs0NzQsOSBAQAogCS5kZWZhdWx0X21vbnNwZWNzCQk9ICZhdDkxZmJfZGVmYXVsdF90ZnRfbW9uc3BlY3MsCiAJLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wJPSBhdDkxX2xjZGNfdGZ0X3Bvd2VyX2NvbnRyb2wsCiAJLmd1YXJkX3RpbWUJCQk9IDEsCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9BVDkxU0FNOUcxMEVLKQorCS5sY2Rfd2lyaW5nX21vZGUJCT0gQVRNRUxfTENEQ19XSVJJTkdfUkdCLAorI2VuZGlmCiB9OwogI2VuZGlmCiAKQEAgLTYwMCw3ICs2MTAsMTEgQEAKIAlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQVQ5MVNBTTkyNjFFSykKIE1BQ0hJTkVfU1RBUlQoQVQ5MVNBTTkyNjFFSywgIkF0bWVsIEFUOTFTQU05MjYxLUVLIikKKyNlbHNlCitNQUNISU5FX1NUQVJUKEFUOTFTQU05RzEwRUssICJBdG1lbCBBVDkxU0FNOUcxMC1FSyIpCisjZW5kaWYKIAkvKiBNYWludGFpbmVyOiBBdG1lbCAqLwogCS5waHlzX2lvCT0gQVQ5MV9CQVNFX1NZUywKIAkuaW9fcGdfb2Zmc3QJPSAoQVQ5MV9WQV9CQVNFX1NZUyA+PiAxOCkgJiAweGZmZmMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOTI2M2VrLmMKaW5kZXggNTdkNTI1Mi4uMWJmN2JkNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTkyNjNlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05MjYzZWsuYwpAQCAtMzY0LDkgKzM2NCw5IEBACiAKIC8qCiAgKiBBQzk3CisgKiByZXNldF9waW4gaXMgbm90IGNvbm5lY3RlZDogTlJTVAogICovCi1zdGF0aWMgc3RydWN0IGF0bWVsX2FjOTdfZGF0YSBla19hYzk3X2RhdGEgPSB7Ci0JLnJlc2V0X3Bpbgk9IEFUOTFfUElOX1BBMTMsCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgZWtfYWM5N19kYXRhID0gewogfTsKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKaW5kZXggYTU1Mzk4ZS4uY2E0NzBkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYwpAQCAtMjczLDYgKzI3Myw3IEBACiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWtfaTJjX2RldmljZXNbXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCIyNGM1MTIiLCAweDUwKSwKKwkJSTJDX0JPQVJEX0lORk8oIndtODczMSIsIDB4MWIpLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1NThlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYwpAQCAtMCwwICsxLDM4OSBAQAorLyoKKyAqICBCb2FyZC1zcGVjaWZpYyBzZXR1cCBjb2RlIGZvciB0aGUgQVQ5MVNBTTlNMTBHNDUgRXZhbHVhdGlvbiBLaXQgZmFtaWx5CisgKgorICogIENvdmVyczogKiBBVDkxU0FNOUc0NS1FS0VTICBib2FyZAorICogICAgICAgICAgKiBBVDkxU0FNOU0xMEc0NS1FSyBib2FyZAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQXRtZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdDkxX3NoZHdjLmg+CisKKyNpbmNsdWRlICJzYW05X3NtYy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfbWFwX2lvKHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDEyLjAwMCBNSHogY3J5c3RhbCAqLworCWF0OTFzYW05ZzQ1X2luaXRpYWxpemUoMTIwMDAwMDApOworCisJLyogREdCVSBvbiB0dHlTMC4gKFJ4ICYgVHggb25seSkgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoMCwgMCwgMCk7CisKKwkvKiBVU0FSVDAgbm90IGNvbm5lY3RlZCBvbiB0aGUgLUVLIGJvYXJkICovCisJLyogVVNBUlQxIG9uIHR0eVMyLiAoUngsIFR4LCBSVFMsIENUUykgKi8KKwlhdDkxX3JlZ2lzdGVyX3VhcnQoQVQ5MVNBTTlHNDVfSURfVVMxLCAyLCBBVE1FTF9VQVJUX0NUUyB8IEFUTUVMX1VBUlRfUlRTKTsKKworCS8qIHNldCBzZXJpYWwgY29uc29sZSB0byB0dHlTMCAoaWUsIERCR1UpICovCisJYXQ5MV9zZXRfc2VyaWFsX2NvbnNvbGUoMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19pbml0X2lycSh2b2lkKQoreworCWF0OTFzYW05ZzQ1X2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKworCisvKgorICogVVNCIEhTIEhvc3QgcG9ydCAoY29tbW9uIHRvIE9IQ0kgJiBFSENJKQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfdXNiaF9kYXRhIF9faW5pdGRhdGEgZWtfdXNiaF9oc19kYXRhID0geworCS5wb3J0cwkJPSAyLAorCS52YnVzX3Bpbgk9IHtBVDkxX1BJTl9QRDEsIEFUOTFfUElOX1BEM30sCit9OworCisKKy8qCisgKiBVU0IgSFMgRGV2aWNlIHBvcnQKKyAqLworc3RhdGljIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBla191c2JhX3VkY19kYXRhID0geworCS52YnVzX3Bpbgk9IEFUOTFfUElOX1BCMTksCit9OworCisKKy8qCisgKiBTUEkgZGV2aWNlcy4KKyAqLworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBla19zcGlfZGV2aWNlc1tdID0geworCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KKwkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkubWF4X3NwZWVkX2h6CT0gMTUgKiAxMDAwICogMTAwMCwKKwkJLmJ1c19udW0JPSAwLAorCX0sCit9OworCisKKy8qCisgKiBNQUNCIEV0aGVybmV0IGRldmljZQorICovCitzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7CisJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEQ1LAorCS5pc19ybWlpCT0gMSwKK307CisKKworLyoKKyAqIE5BTkQgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIF9faW5pdGRhdGEgZWtfbmFuZF9wYXJ0aXRpb25bXSA9IHsKKwl7CisJCS5uYW1lCT0gIlBhcnRpdGlvbiAxIiwKKwkJLm9mZnNldAk9IDAsCisJCS5zaXplCT0gU1pfNjRNLAorCX0sCisJeworCQkubmFtZQk9ICJQYXJ0aXRpb24gMiIsCisJCS5vZmZzZXQJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICogX19pbml0IG5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3sKKwkqbnVtX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKGVrX25hbmRfcGFydGl0aW9uKTsKKwlyZXR1cm4gZWtfbmFuZF9wYXJ0aXRpb247Cit9CisKKy8qIGRldF9waW4gaXMgbm90IGNvbm5lY3RlZCAqLworc3RhdGljIHN0cnVjdCBhdG1lbF9uYW5kX2RhdGEgX19pbml0ZGF0YSBla19uYW5kX2RhdGEgPSB7CisJLmFsZQkJPSAyMSwKKwkuY2xlCQk9IDIyLAorCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEM4LAorCS5lbmFibGVfcGluCT0gQVQ5MV9QSU5fUEMxNCwKKwkucGFydGl0aW9uX2luZm8JPSBuYW5kX3BhcnRpdGlvbnMsCisjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVQ5MV9CVVNXSURUSF8xNikKKwkuYnVzX3dpZHRoXzE2CT0gMSwKKyNlbHNlCisJLmJ1c193aWR0aF8xNgk9IDAsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2FtOV9zbWNfY29uZmlnIF9faW5pdGRhdGEgZWtfbmFuZF9zbWNfY29uZmlnID0geworCS5uY3NfcmVhZF9zZXR1cAkJPSAwLAorCS5ucmRfc2V0dXAJCT0gMiwKKwkubmNzX3dyaXRlX3NldHVwCT0gMCwKKwkubndlX3NldHVwCQk9IDIsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gNCwKKwkubnJkX3B1bHNlCQk9IDQsCisJLm5jc193cml0ZV9wdWxzZQk9IDQsCisJLm53ZV9wdWxzZQkJPSA0LAorCisJLnJlYWRfY3ljbGUJCT0gNywKKwkud3JpdGVfY3ljbGUJCT0gNywKKworCS5tb2RlCQkJPSBBVDkxX1NNQ19SRUFETU9ERSB8IEFUOTFfU01DX1dSSVRFTU9ERSB8IEFUOTFfU01DX0VYTldNT0RFX0RJU0FCTEUsCisJLnRkZl9jeWNsZXMJCT0gMywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX25hbmQodm9pZCkKK3sKKwkvKiBzZXR1cCBidXMtd2lkdGggKDggb3IgMTYpICovCisJaWYgKGVrX25hbmRfZGF0YS5idXNfd2lkdGhfMTYpCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV18xNjsKKwllbHNlCisJCWVrX25hbmRfc21jX2NvbmZpZy5tb2RlIHw9IEFUOTFfU01DX0RCV184OworCisJLyogY29uZmlndXJlIGNoaXAtc2VsZWN0IDMgKE5BTkQpICovCisJc2FtOV9zbWNfY29uZmlndXJlKDMsICZla19uYW5kX3NtY19jb25maWcpOworCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmVrX25hbmRfZGF0YSk7Cit9CisKKworLyoKKyAqIExDRCBDb250cm9sbGVyCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19GQl9BVE1FTCkgfHwgZGVmaW5lZChDT05GSUdfRkJfQVRNRUxfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYXQ5MV90ZnRfdmdhX21vZGVzW10gPSB7CisJeworCQkubmFtZSAgICAgICAgICAgPSAiTEciLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSA0ODAsCQkueXJlcwkJPSAyNzIsCisJCS5waXhjbG9jawk9IEtIWjJQSUNPUyg5MDAwKSwKKworCQkubGVmdF9tYXJnaW4JPSAxLAkJLnJpZ2h0X21hcmdpbgk9IDEsCisJCS51cHBlcl9tYXJnaW4JPSA0MCwJCS5sb3dlcl9tYXJnaW4JPSAxLAorCQkuaHN5bmNfbGVuCT0gNDUsCQkudnN5bmNfbGVuCT0gMSwKKworCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBhdDkxZmJfZGVmYXVsdF9tb25zcGVjcyA9IHsKKwkubWFudWZhY3R1cmVyCT0gIkxHIiwKKwkubW9uaXRvciAgICAgICAgPSAiTEIwNDNXUTEiLAorCisJLm1vZGVkYgkJPSBhdDkxX3RmdF92Z2FfbW9kZXMsCisJLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKGF0OTFfdGZ0X3ZnYV9tb2RlcyksCisJLmhmbWluCQk9IDE1MDAwLAorCS5oZm1heAkJPSAxNzY0MCwKKwkudmZtaW4JCT0gNTcsCisJLnZmbWF4CQk9IDY3LAorfTsKKworI2RlZmluZSBBVDkxU0FNOUc0NV9ERUZBVUxUX0xDRENPTjIgCShBVE1FTF9MQ0RDX01FTU9SX0xJVFRMRSBcCisJCQkJCXwgQVRNRUxfTENEQ19ESVNUWVBFX1RGVCBcCisJCQkJCXwgQVRNRUxfTENEQ19DTEtNT0RfQUxXQVlTQUNUSVZFKQorCisvKiBEcml2ZXIgZGF0YXMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfbGNkZmJfaW5mbyBfX2luaXRkYXRhIGVrX2xjZGNfZGF0YSA9IHsKKwkubGNkY29uX2lzX2JhY2tsaWdodAkJPSB0cnVlLAorCS5kZWZhdWx0X2JwcAkJCT0gMzIsCisJLmRlZmF1bHRfZG1hY29uCQkJPSBBVE1FTF9MQ0RDX0RNQUVOLAorCS5kZWZhdWx0X2xjZGNvbjIJCT0gQVQ5MVNBTTlHNDVfREVGQVVMVF9MQ0RDT04yLAorCS5kZWZhdWx0X21vbnNwZWNzCQk9ICZhdDkxZmJfZGVmYXVsdF9tb25zcGVjcywKKwkuZ3VhcmRfdGltZQkJCT0gOSwKKwkubGNkX3dpcmluZ19tb2RlCQk9IEFUTUVMX0xDRENfV0lSSU5HX1JHQiwKK307CisKKyNlbHNlCitzdGF0aWMgc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gX19pbml0ZGF0YSBla19sY2RjX2RhdGE7CisjZW5kaWYKKworCisvKgorICogR1BJTyBCdXR0b25zCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBla19idXR0b25zW10gPSB7CisJewkvKiBCUDEsICJsZWZ0Y2xpYyIgKi8KKwkJLmNvZGUJCT0gQlROX0xFRlQsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCNiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAibGVmdF9jbGljayIsCisJCS53YWtldXAJCT0gMSwKKwl9LAorCXsJLyogQlAyLCAicmlnaHRjbGljIiAqLworCQkuY29kZQkJPSBCVE5fUklHSFQsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCNywKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAicmlnaHRfY2xpY2siLAorCQkud2FrZXVwCQk9IDEsCisJfSwKKwkJLyogQlAzLCAiam95c3RpY2siICovCisJeworCQkuY29kZQkJPSBLRVlfTEVGVCwKKwkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNCwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAiSm95c3RpY2sgTGVmdCIsCisJfSwKKwl7CisJCS5jb2RlCQk9IEtFWV9SSUdIVCwKKwkJLmdwaW8JCT0gQVQ5MV9QSU5fUEIxNSwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAiSm95c3RpY2sgUmlnaHQiLAorCX0sCisJeworCQkuY29kZQkJPSBLRVlfVVAsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMTYsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIkpveXN0aWNrIFVwIiwKKwl9LAorCXsKKwkJLmNvZGUJCT0gS0VZX0RPV04sCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMTcsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIkpveXN0aWNrIERvd24iLAorCX0sCisJeworCQkuY29kZQkJPSBLRVlfRU5URVIsCisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMTgsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gIkpveXN0aWNrIFByZXNzIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBla19idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IGVrX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShla19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVrX2J1dHRvbl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdwaW8ta2V5cyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZWtfYnV0dG9uX2RhdGEsCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyk7IGkrKykgeworCQlhdDkxX3NldF9HUElPX3BlcmlwaChla19idXR0b25zW2ldLmdwaW8sIDEpOworCQlhdDkxX3NldF9kZWdsaXRjaChla19idXR0b25zW2ldLmdwaW8sIDEpOworCX0KKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWtfYnV0dG9uX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgX19pbml0IGVrX2FkZF9kZXZpY2VfYnV0dG9ucyh2b2lkKSB7fQorI2VuZGlmCisKKworLyoKKyAqIExFRHMgLi4uIHRoZXNlIGNvdWxkIGFsbCBiZSBQV00tZHJpdmVuLCBmb3IgdmFyaWFibGUgYnJpZ2h0bmVzcworICovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKKwl7CS8qICJ0b3AiIGxlZCwgcmVkLCBwb3dlcmxlZCAqLworCQkubmFtZQkJCT0gImQ4IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMzAsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwl9LAorCXsJLyogImxlZnQiIGxlZCwgZ3JlZW4sIHVzZXJsZWQyLCBwd20zICovCisJCS5uYW1lCQkJPSAiZDYiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQwLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJfSwKKyNpZiAhKGRlZmluZWQoQ09ORklHX0xFRFNfQVRNRUxfUFdNKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0FUTUVMX1BXTV9NT0RVTEUpKQorCXsJLyogInJpZ2h0IiBsZWQsIGdyZWVuLCB1c2VybGVkMSwgcHdtMSAqLworCQkubmFtZQkJCT0gImQ3IiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMzEsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibW1jMCIsCisJfSwKKyNlbmRpZgorfTsKKworCisvKgorICogUFdNIExlZHMKKyAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19wd21fbGVkW10gPSB7CisjaWYgZGVmaW5lZChDT05GSUdfTEVEU19BVE1FTF9QV00pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfQVRNRUxfUFdNX01PRFVMRSkKKwl7CS8qICJyaWdodCIgbGVkLCBncmVlbiwgdXNlcmxlZDEsIHB3bTEgKi8KKwkJLm5hbWUJCQk9ICJkNyIsCisJCS5ncGlvCQkJPSAxLAkvKiBpcyBQV00gY2hhbm5lbCBudW1iZXIgKi8KKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorI2VuZGlmCit9OworCisKKworc3RhdGljIHZvaWQgX19pbml0IGVrX2JvYXJkX2luaXQodm9pZCkKK3sKKwkvKiBTZXJpYWwgKi8KKwlhdDkxX2FkZF9kZXZpY2Vfc2VyaWFsKCk7CisJLyogVVNCIEhTIEhvc3QgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKCZla191c2JoX2hzX2RhdGEpOworCS8qIFVTQiBIUyBEZXZpY2UgKi8KKwlhdDkxX2FkZF9kZXZpY2VfdXNiYSgmZWtfdXNiYV91ZGNfZGF0YSk7CisJLyogU1BJICovCisJYXQ5MV9hZGRfZGV2aWNlX3NwaShla19zcGlfZGV2aWNlcywgQVJSQVlfU0laRShla19zcGlfZGV2aWNlcykpOworCS8qIEV0aGVybmV0ICovCisJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKKwkvKiBOQU5EICovCisJZWtfYWRkX2RldmljZV9uYW5kKCk7CisJLyogSTJDICovCisJYXQ5MV9hZGRfZGV2aWNlX2kyYygwLCBOVUxMLCAwKTsKKwkvKiBMQ0QgQ29udHJvbGxlciAqLworCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOworCS8qIFB1c2ggQnV0dG9ucyAqLworCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOworCS8qIExFRHMgKi8KKwlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKKwlhdDkxX3B3bV9sZWRzKGVrX3B3bV9sZWQsIEFSUkFZX1NJWkUoZWtfcHdtX2xlZCkpOworfQorCitNQUNISU5FX1NUQVJUKEFUOTFTQU05RzQ1RUtFUywgIkF0bWVsIEFUOTFTQU05RzQ1LUVLRVMiKQorCS8qIE1haW50YWluZXI6IEF0bWVsICovCisJLnBoeXNfaW8JPSBBVDkxX0JBU0VfU1lTLAorCS5pb19wZ19vZmZzdAk9IChBVDkxX1ZBX0JBU0VfU1lTID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBBVDkxX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkudGltZXIJCT0gJmF0OTFzYW05MjZ4X3RpbWVyLAorCS5tYXBfaW8JCT0gZWtfbWFwX2lvLAorCS5pbml0X2lycQk9IGVrX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBla19ib2FyZF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggZjZiNTY3Mi4uOWQwNzY3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogCiAjaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgogCkBAIC0yMDgsNiArMjEwLDc5IEBACiAjZW5kaWYKIAogCisvKgorICogTEVEcworICovCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKKwl7CS8qICJib3R0b20iIGxlZCwgZ3JlZW4sIHVzZXJsZWQxIHRvIGJlIGRlZmluZWQgKi8KKwkJLm5hbWUJCQk9ICJkczEiLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEQxNSwKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJub25lIiwKKwl9LAorCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDIgdG8gYmUgZGVmaW5lZCAqLworCQkubmFtZQkJCT0gImRzMiIsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QRDE2LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCX0sCisJewkvKiAicG93ZXIiIGxlZCwgeWVsbG93ICovCisJCS5uYW1lCQkJPSAiZHMzIiwKKwkJLmdwaW8JCQk9IEFUOTFfUElOX1BEMTQsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwl9Cit9OworCisKKy8qCisgKiBHUElPIEJ1dHRvbnMKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQorc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGVrX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5ncGlvCQk9IEFUOTFfUElOX1BCMCwKKwkJLmNvZGUJCT0gQlROXzIsCisJCS5kZXNjCQk9ICJSaWdodCBDbGljayIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLndha2V1cAkJPSAxLAorCX0sCisJeworCQkuZ3BpbwkJPSBBVDkxX1BJTl9QQjEsCisJCS5jb2RlCQk9IEJUTl8xLAorCQkuZGVzYwkJPSAiTGVmdCBDbGljayIsCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLndha2V1cAkJPSAxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgZWtfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBla19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZWtfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBla19idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVrX2J1dHRvbl9kYXRhLAorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkKK3sKKwlhdDkxX3NldF9ncGlvX2lucHV0KEFUOTFfUElOX1BCMSwgMSk7CS8qIGJ0bjEgKi8KKwlhdDkxX3NldF9kZWdsaXRjaChBVDkxX1BJTl9QQjEsIDEpOworCWF0OTFfc2V0X2dwaW9faW5wdXQoQVQ5MV9QSU5fUEIwLCAxKTsJLyogYnRuMiAqLworCWF0OTFfc2V0X2RlZ2xpdGNoKEFUOTFfUElOX1BCMCwgMSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVrX2J1dHRvbl9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBla19hZGRfZGV2aWNlX2J1dHRvbnModm9pZCkge30KKyNlbmRpZgorCisKIHN0YXRpYyB2b2lkIF9faW5pdCBla19ib2FyZF9pbml0KHZvaWQpCiB7CiAJLyogU2VyaWFsICovCkBAIC0yMjYsNiArMzAxLDEwIEBACiAJYXQ5MV9hZGRfZGV2aWNlX2xjZGMoJmVrX2xjZGNfZGF0YSk7CiAJLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKi8KIAlhdDkxX2FkZF9kZXZpY2VfdHNhZGNjKCk7CisJLyogTEVEcyAqLworCWF0OTFfZ3Bpb19sZWRzKGVrX2xlZHMsIEFSUkFZX1NJWkUoZWtfbGVkcykpOworCS8qIFB1c2ggQnV0dG9ucyAqLworCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOwogfQogCiBNQUNISU5FX1NUQVJUKEFUOTFTQU05UkxFSywgIkF0bWVsIEFUOTFTQU05UkwtRUsiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwppbmRleCBiYWM1NzhmLi5jMDQyZGNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvY2xvY2suYwpAQCAtNDcsMjAgKzQ3LDI1IEBACiAgKiBDaGlwcyBoYXZlIHNvbWUga2luZCBvZiBjbG9ja3MgOiBncm91cCB0aGVtIGJ5IGZ1bmN0aW9uYWxpdHkKICAqLwogI2RlZmluZSBjcHVfaGFzX3V0bWkoKQkJKCAgY3B1X2lzX2F0OTFjYXA5KCkgXAotCQkJCXx8IGNwdV9pc19hdDkxc2FtOXJsKCkpCisJCQkJfHwgY3B1X2lzX2F0OTFzYW05cmwoKSBcCisJCQkJfHwgY3B1X2lzX2F0OTFzYW05ZzQ1KCkpCiAKLSNkZWZpbmUgY3B1X2hhc184MDBNX3BsbGEoKQkoY3B1X2lzX2F0OTFzYW05ZzIwKCkpCisjZGVmaW5lIGNwdV9oYXNfODAwTV9wbGxhKCkJKCAgY3B1X2lzX2F0OTFzYW05ZzIwKCkgXAorCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpKQogCi0jZGVmaW5lIGNwdV9oYXNfcGxsYigpCQkoIWNwdV9pc19hdDkxc2FtOXJsKCkpCisjZGVmaW5lIGNwdV9oYXNfMzAwTV9wbGxhKCkJKGNwdV9pc19hdDkxc2FtOWcxMCgpKQogCi0jZGVmaW5lIGNwdV9oYXNfdXBsbCgpCQkoMCkKKyNkZWZpbmUgY3B1X2hhc19wbGxiKCkJCSghKGNwdV9pc19hdDkxc2FtOXJsKCkgXAorCQkJCXx8IGNwdV9pc19hdDkxc2FtOWc0NSgpKSkKKworI2RlZmluZSBjcHVfaGFzX3VwbGwoKQkJKGNwdV9pc19hdDkxc2FtOWc0NSgpKQogCiAvKiBVU0IgaG9zdCBIUyAmIEZTICovCiAjZGVmaW5lIGNwdV9oYXNfdWhwKCkJCSghY3B1X2lzX2F0OTFzYW05cmwoKSkKIAogLyogVVNCIGRldmljZSBGUyBvbmx5ICovCi0jZGVmaW5lIGNwdV9oYXNfdWRwZnMoKQkJKCFjcHVfaXNfYXQ5MXNhbTlybCgpKQotCisjZGVmaW5lIGNwdV9oYXNfdWRwZnMoKQkJKCEoY3B1X2lzX2F0OTFzYW05cmwoKSBcCisJCQkJfHwgY3B1X2lzX2F0OTFzYW05ZzQ1KCkpKQogCiBzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKQEAgLTEzMyw2ICsxMzgsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdWNrciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9DS0dSX1VDS1IpOwogCisJaWYgKGNwdV9pc19hdDkxc2FtOWc0NSgpKSB7CisJCWlmIChpc19vbikKKwkJCXVja3IgfD0gQVQ5MV9QTUNfQklBU0VOOworCQllbHNlCisJCQl1Y2tyICY9IH5BVDkxX1BNQ19CSUFTRU47CisJfQorCiAJaWYgKGlzX29uKSB7CiAJCWlzX29uID0gQVQ5MV9QTUNfTE9DS1U7CiAJCWF0OTFfc3lzX3dyaXRlKEFUOTFfQ0tHUl9VQ0tSLCB1Y2tyIHwgY2xrLT5wbWNfbWFzayk7CkBAIC0zMTAsNiArMzIyLDcgQEAKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXVuc2lnbmVkCXByZXNjYWxlOwogCXVuc2lnbmVkIGxvbmcJYWN0dWFsOworCXVuc2lnbmVkIGxvbmcJcHJldiA9IFVMT05HX01BWDsKIAogCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxNyw4ICszMzAsMTYgQEAKIAogCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OwogCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDc7IHByZXNjYWxlKyspIHsKLQkJaWYgKGFjdHVhbCAmJiBhY3R1YWwgPD0gcmF0ZSkKKwkJaWYgKGFjdHVhbCA+IHJhdGUpCisJCQlwcmV2ID0gYWN0dWFsOworCisJCWlmIChhY3R1YWwgJiYgYWN0dWFsIDw9IHJhdGUpIHsKKwkJCWlmICgocHJldiAtIHJhdGUpIDwgKHJhdGUgLSBhY3R1YWwpKSB7CisJCQkJYWN0dWFsID0gcHJldjsKKwkJCQlwcmVzY2FsZS0tOworCQkJfQogCQkJYnJlYWs7CisJCX0KIAkJYWN0dWFsID4+PSAxOwogCX0KIApAQCAtMzczLDYgKzM5NCwxMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjcHVfaXNfYXQ5MXNhbTlybCgpICYmIHBhcmVudC0+aWQgPT0gQVQ5MV9QTUNfQ1NTX1BMTEIpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsa19sb2NrLCBmbGFncyk7CiAKIAljbGstPnJhdGVfaHogPSBwYXJlbnQtPnJhdGVfaHo7CkBAIC02MDEsNyArNjI2LDkgQEAKIAkJdWhwY2sucG1jX21hc2sgPSBBVDkxUk05MjAwX1BNQ19VSFA7CiAJCXVkcGNrLnBtY19tYXNrID0gQVQ5MVJNOTIwMF9QTUNfVURQOwogCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0VSLCBBVDkxUk05MjAwX1BNQ19NQ0tVRFApOwotCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYxKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkgfHwgY3B1X2lzX2F0OTFzYW05ZzIwKCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8CisJCSAgIGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8CisJCSAgIGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7CiAJCXVocGNrLnBtY19tYXNrID0gQVQ5MVNBTTkyNnhfUE1DX1VIUDsKIAkJdWRwY2sucG1jX21hc2sgPSBBVDkxU0FNOTI2eF9QTUNfVURQOwogCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFjYXA5KCkpIHsKQEAgLTYzNyw2ICs2NjQsNyBAQAogewogCXVuc2lnbmVkIHRtcCwgZnJlcSwgbWNrcjsKIAlpbnQgaTsKKwlpbnQgcGxsX292ZXJjbG9jayA9IGZhbHNlOwogCiAJLyoKIAkgKiBXaGVuIHRoZSBib290bG9hZGVyIGluaXRpYWxpemVkIHRoZSBtYWluIG9zY2lsbGF0b3IgY29ycmVjdGx5LApAQCAtNjU0LDEyICs2ODIsMjUgQEAKIAogCS8qIHJlcG9ydCBpZiBQTExBIGlzIG1vcmUgdGhhbiBtaWxkbHkgb3ZlcmNsb2NrZWQgKi8KIAlwbGxhLnJhdGVfaHogPSBhdDkxX3BsbF9yYXRlKCZwbGxhLCBtYWluX2Nsb2NrLCBhdDkxX3N5c19yZWFkKEFUOTFfQ0tHUl9QTExBUikpOwotCWlmICgoIWNwdV9oYXNfODAwTV9wbGxhKCkgJiYgcGxsYS5yYXRlX2h6ID4gMjA5MDAwMDAwKQotCSAgIHx8IChjcHVfaGFzXzgwME1fcGxsYSgpICYmIHBsbGEucmF0ZV9oeiA+IDgwMDAwMDAwMCkpCisJaWYgKGNwdV9oYXNfMzAwTV9wbGxhKCkpIHsKKwkJaWYgKHBsbGEucmF0ZV9oeiA+IDMwMDAwMDAwMCkKKwkJCXBsbF9vdmVyY2xvY2sgPSB0cnVlOworCX0gZWxzZSBpZiAoY3B1X2hhc184MDBNX3BsbGEoKSkgeworCQlpZiAocGxsYS5yYXRlX2h6ID4gODAwMDAwMDAwKQorCQkJcGxsX292ZXJjbG9jayA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKHBsbGEucmF0ZV9oeiA+IDIwOTAwMDAwMCkKKwkJCXBsbF9vdmVyY2xvY2sgPSB0cnVlOworCX0KKwlpZiAocGxsX292ZXJjbG9jaykKIAkJcHJfaW5mbygiQ2xvY2tzOiBQTExBIG92ZXJjbG9ja2VkLCAlbGQgTUh6XG4iLCBwbGxhLnJhdGVfaHogLyAxMDAwMDAwKTsKIAorCWlmIChjcHVfaXNfYXQ5MXNhbTlnNDUoKSkgeworCQltY2tyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19NQ0tSKTsKKwkJcGxsYS5yYXRlX2h6IC89ICgxIDw8ICgobWNrciAmIEFUOTFfUE1DX1BMTEFESVYyKSA+PiAxMikpOwkvKiBwbGxhIGRpdmlzb3IgYnkgMiAqLworCX0KIAotCWlmIChjcHVfaGFzX3VwbGwoKSAmJiAhY3B1X2hhc19wbGxiKCkpIHsKKwlpZiAoIWNwdV9oYXNfcGxsYigpICYmIGNwdV9oYXNfdXBsbCgpKSB7CiAJCS8qIHNldHVwIFVUTUkgY2xvY2sgYXMgdGhlIGZvdXJ0aCBwcmltYXJ5IGNsb2NrCiAJCSAqIChpbnN0ZWFkIG9mIHBsbGIpICovCiAJCXV0bWlfY2xrLnR5cGUgfD0gQ0xLX1RZUEVfUFJJTUFSWTsKQEAgLTcwMSw2ICs3NDIsOSBAQAogCQkJZnJlcSAvICgobWNrciAmIEFUOTFfUE1DX01ESVYpID4+IDcpIDogZnJlcTsJLyogbWRpdiA7ICh4ID4+IDcpID0gKCh4ID4+IDgpICogMikgKi8KIAkJaWYgKG1ja3IgJiBBVDkxX1BNQ19QRElWKQogCQkJZnJlcSAvPSAyOwkJLyogcHJvY2Vzc29yIGNsb2NrIGRpdmlzaW9uICovCisJfSBlbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTlnNDUoKSkgeworCQltY2sucmF0ZV9oeiA9IChtY2tyICYgQVQ5MV9QTUNfTURJVikgPT0gQVQ5MVNBTTlfUE1DX01ESVZfMyA/CisJCQlmcmVxIC8gMyA6IGZyZXEgLyAoMSA8PCAoKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA+PiA4KSk7CS8qIG1kaXYgKi8KIAl9IGVsc2UgewogCQltY2sucmF0ZV9oeiA9IGZyZXEgLyAoMSA8PCAoKG1ja3IgJiBBVDkxX1BNQ19NRElWKSA+PiA4KSk7ICAgICAgLyogbWRpdiAqLwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCmluZGV4IGI1ZGFmN2YuLjg4ZTQxM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaApAQCAtMTQsNiArMTQsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOTI2M19pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlybF9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jayk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTF4NDBfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIG1haW5fY2xvY2spOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFjYXA5X2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIApAQCAtMjMsNiArMjQsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFzYW05MjYxX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTkyNjNfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxc2FtOXJsX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXNhbTlnNDVfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxeDQwX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MWNhcDlfaW5pdF9pbnRlcnJ1cHRzKHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FpY19pbml0KHVuc2lnbmVkIGludCBwcmlvcml0eVtdKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCmluZGV4IGYyMjM2ZjAuLmFlNDc3MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpAQCAtNDQsMTMgKzQ0LDExIEBACiAJCQkJCSB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpOwogc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCiAJCQkJCXVuc2lnbmVkIG9mZnNldCk7Ci1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7CiAKICNkZWZpbmUgQVQ5MV9HUElPX0NISVAobmFtZSwgYmFzZV9ncGlvLCBucl9ncGlvKQkJCVwKIAl7CQkJCQkJCQlcCiAJCS5jaGlwID0gewkJCQkJCVwKIAkJCS5sYWJlbAkJICA9IG5hbWUsCQkJXAotCQkJLnJlcXVlc3QJICA9IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0LAlcCiAJCQkuZGlyZWN0aW9uX2lucHV0ICA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25faW5wdXQsIFwKIAkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9vdXRwdXQsIFwKIAkJCS5nZXQJCSAgPSBhdDkxX2dwaW9saWJfZ2V0LAkJXApAQCAtNTg4LDE5ICs1ODYsNiBAQAogCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOwogfQogCi1zdGF0aWMgaW50IGF0OTFfZ3Bpb2xpYl9yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQl1bnNpZ25lZCBwaW4gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OwotCXZvaWQgX19pb21lbSAqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZCBtYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCS8qIENhbm5vdCByZXF1ZXN0IEdQSU9zIHRoYXQgYXJlIGluIGFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlICovCi0JaWYgKCEoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOTI2MS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOTI2MS5oCmluZGV4IDNhMzQ4Y2EuLjg3ZGU4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTkyNjEuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05MjYxLmgKQEAgLTk1LDYgKzk1LDkgQEAKICNkZWZpbmUgQVQ5MVNBTTkyNjFfU1JBTV9CQVNFCTB4MDAzMDAwMDAJLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgQVQ5MVNBTTkyNjFfU1JBTV9TSVpFCTB4MDAwMjgwMDAJLyogSW50ZXJuYWwgU1JBTSBzaXplICgxNjBLYikgKi8KIAorI2RlZmluZSBBVDkxU0FNOUcxMF9TUkFNX0JBU0UJQVQ5MVNBTTkyNjFfU1JBTV9CQVNFCS8qIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEFUOTFTQU05RzEwX1NSQU1fU0laRQkweDAwMDA0MDAwCS8qIEludGVybmFsIFNSQU0gc2l6ZSAoMTZLYikgKi8KKwogI2RlZmluZSBBVDkxU0FNOTI2MV9ST01fQkFTRQkweDAwNDAwMDAwCS8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgQVQ5MVNBTTkyNjFfUk9NX1NJWkUJU1pfMzJLCQkvKiBJbnRlcm5hbCBST00gc2l6ZSAoMzJLYikgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOWc0NS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxc2FtOWc0NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MjY4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05ZzQ1LmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDaGlwLXNwZWNpZmljIGhlYWRlciBmaWxlIGZvciB0aGUgQVQ5MVNBTTlHNDUgZmFtaWx5CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEF0bWVsIENvcnBvcmF0aW9uLgorICoKKyAqIENvbW1vbiBkZWZpbml0aW9ucy4KKyAqIEJhc2VkIG9uIEFUOTFTQU05RzQ1IHByZWxpbWluYXJ5IGRhdGFzaGVldC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQVQ5MVNBTTlHNDVfSAorI2RlZmluZSBBVDkxU0FNOUc0NV9ICisKKy8qCisgKiBQZXJpcGhlcmFsIGlkZW50aWZpZXJzL2ludGVycnVwdHMuCisgKi8KKyNkZWZpbmUgQVQ5MV9JRF9GSVEJCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KKyNkZWZpbmUgQVQ5MV9JRF9TWVMJCTEJLyogU3lzdGVtIENvbnRyb2xsZXIgSW50ZXJydXB0ICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0EJMgkvKiBQYXJhbGxlbCBJL08gQ29udHJvbGxlciBBICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0IJMwkvKiBQYXJhbGxlbCBJL08gQ29udHJvbGxlciBCICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0MJNAkvKiBQYXJhbGxlbCBJL08gQ29udHJvbGxlciBDICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BJT0RFCTUJLyogUGFyYWxsZWwgSS9PIENvbnRyb2xsZXIgRCBhbmQgRSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9UUk5HCTYJLyogVHJ1ZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9VUzAJNwkvKiBVU0FSVCAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1VTMQk4CS8qIFVTQVJUIDEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfVVMyCTkJLyogVVNBUlQgMiAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9VUzMJMTAJLyogVVNBUlQgMyAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9NQ0kwCTExCS8qIEhpZ2ggU3BlZWQgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1RXSTAJMTIJLyogVHdvLVdpcmUgSW50ZXJmYWNlIDAgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfVFdJMQkxMwkvKiBUd28tV2lyZSBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9TUEkwCTE0CS8qIFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1NQSTEJMTUJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIDEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfU1NDMAkxNgkvKiBTeW5jaHJvbm91cyBTZXJpYWwgQ29udHJvbGxlciAwICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1NTQzEJMTcJLyogU3luY2hyb25vdXMgU2VyaWFsIENvbnRyb2xsZXIgMSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9UQ0IJMTgJLyogVGltZXIgQ291bnRlciAwLCAxLCAyLCAzLCA0IGFuZCA1ICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1BXTUMJMTkJLyogUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1RTQwkyMAkvKiBUb3VjaCBTY3JlZW4gQURDIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfRE1BCTIxCS8qIERNQSBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX1VIUEhTCTIyCS8qIFVTQiBIb3N0IEhpZ2ggU3BlZWQgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfTENEQwkyMwkvKiBMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9BQzk3QwkyNAkvKiBBQzk3IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfRU1BQwkyNQkvKiBFdGhlcm5ldCBNQUMgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfSVNJCTI2CS8qIEltYWdlIFNlbnNvciBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfVURQSFMJMjcJLyogVVNCIERldmljZSBIaWdoIFNwZWVkICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0lEX0FFU1RERVNTSEEgMjgJLyogQUVTICsgVC1ERVMgKyBTSEEgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfTUNJMQkyOQkvKiBIaWdoIFNwZWVkIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgMSAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9JRF9WREVDCTMwCS8qIFZpZGVvIERlY29kZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfSURfSVJRMAkzMQkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLworCisvKgorICogVXNlciBQZXJpcGhlcmFsIHBoeXNpY2FsIGJhc2UgYWRkcmVzc2VzLgorICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVURQSFMJCTB4ZmZmNzgwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UQ0IwCQkweGZmZjdjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMwCQkweGZmZjdjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMxCQkweGZmZjdjMDQwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMyCQkweGZmZjdjMDgwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfTUNJMAkJMHhmZmY4MDAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX1RXSTAJCTB4ZmZmODQwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UV0kxCQkweGZmZjg4MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMwCQkweGZmZjhjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMxCQkweGZmZjkwMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMyCQkweGZmZjk0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVVMzCQkweGZmZjk4MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfU1NDMAkJMHhmZmY5YzAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX1NTQzEJCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9TUEkwCQkweGZmZmE0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfU1BJMQkJMHhmZmZhODAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX0FDOTdDCQkweGZmZmFjMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVFNDCQkweGZmZmIwMDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfSVNJCQkweGZmZmI0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfUFdNQwkJMHhmZmZiODAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX0VNQUMJCTB4ZmZmYmMwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9BRVMJCTB4ZmZmYzAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UREVTCQkweGZmZmM0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfU0hBCQkweGZmZmM4MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVFJORwkJMHhmZmZjYzAwMAorI2RlZmluZSBBVDkxU0FNOUc0NV9CQVNFX01DSTEJCTB4ZmZmZDAwMDAKKyNkZWZpbmUgQVQ5MVNBTTlHNDVfQkFTRV9UQ0IxCQkweGZmZmQ0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEMzCQkweGZmZmQ0MDAwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEM0CQkweGZmZmQ0MDQwCisjZGVmaW5lIEFUOTFTQU05RzQ1X0JBU0VfVEM1CQkweGZmZmQ0MDgwCisjZGVmaW5lIEFUOTFfQkFTRV9TWVMJCQkweGZmZmZlMjAwCisKKy8qCisgKiBTeXN0ZW0gUGVyaXBoZXJhbHMgKG9mZnNldCBmcm9tIEFUOTFfQkFTRV9TWVMpCisgKi8KKyNkZWZpbmUgQVQ5MV9FQ0MJKDB4ZmZmZmUyMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX0REUlNEUkMxCSgweGZmZmZlNDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9ERFJTRFJDMAkoMHhmZmZmZTYwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfU01DCSgweGZmZmZlODAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9NQVRSSVgJKDB4ZmZmZmVhMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX0RNQQkoMHhmZmZmZWMwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfREJHVQkoMHhmZmZmZWUwMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfQUlDCSgweGZmZmZmMDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9BCSgweGZmZmZmMjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9CCSgweGZmZmZmNDAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9DCSgweGZmZmZmNjAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9ECSgweGZmZmZmODAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QSU9FCSgweGZmZmZmYTAwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9QTUMJKDB4ZmZmZmZjMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1JTVEMJKDB4ZmZmZmZkMDAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1NIRFdDCSgweGZmZmZmZDEwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SVFQJKDB4ZmZmZmZkMjAgLSBBVDkxX0JBU0VfU1lTKQorI2RlZmluZSBBVDkxX1BJVAkoMHhmZmZmZmQzMCAtIEFUOTFfQkFTRV9TWVMpCisjZGVmaW5lIEFUOTFfV0RUCSgweGZmZmZmZDQwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9HUEJSCSgweGZmZmZmZDYwIC0gQVQ5MV9CQVNFX1NZUykKKyNkZWZpbmUgQVQ5MV9SVEMJKDB4ZmZmZmZkYjAgLSBBVDkxX0JBU0VfU1lTKQorCisjZGVmaW5lIEFUOTFfVVNBUlQwCUFUOTFTQU05RzQ1X0JBU0VfVVMwCisjZGVmaW5lIEFUOTFfVVNBUlQxCUFUOTFTQU05RzQ1X0JBU0VfVVMxCisjZGVmaW5lIEFUOTFfVVNBUlQyCUFUOTFTQU05RzQ1X0JBU0VfVVMyCisjZGVmaW5lIEFUOTFfVVNBUlQzCUFUOTFTQU05RzQ1X0JBU0VfVVMzCisKKy8qCisgKiBJbnRlcm5hbCBNZW1vcnkuCisgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfU1JBTV9CQVNFCTB4MDAzMDAwMDAJLyogSW50ZXJuYWwgU1JBTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfU1JBTV9TSVpFCVNaXzY0SwkJLyogSW50ZXJuYWwgU1JBTSBzaXplICg2NEtiKSAqLworCisjZGVmaW5lIEFUOTFTQU05RzQ1X1JPTV9CQVNFCTB4MDA0MDAwMDAJLyogSW50ZXJuYWwgUk9NIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDkxU0FNOUc0NV9ST01fU0laRQlTWl82NEsJCS8qIEludGVybmFsIFJPTSBzaXplICg2NEtiKSAqLworCisjZGVmaW5lIEFUOTFTQU05RzQ1X0xDRENfQkFTRQkweDAwNTAwMDAwCS8qIExDRCBDb250cm9sbGVyICovCisjZGVmaW5lIEFUOTFTQU05RzQ1X1VEUEhTX0ZJRk8JMHgwMDYwMDAwMAkvKiBVU0IgRGV2aWNlIEhTIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfT0hDSV9CQVNFCTB4MDA3MDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAoT0hDSSkgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfRUhDSV9CQVNFCTB4MDA4MDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAoRUhDSSkgKi8KKyNkZWZpbmUgQVQ5MVNBTTlHNDVfVkRFQ19CQVNFCTB4MDA5MDAwMDAJLyogVmlkZW8gRGVjb2RlciBDb250cm9sbGVyICovCisKKyNkZWZpbmUgQ09ORklHX0RSQU1fQkFTRQlBVDkxX0NISVBTRUxFQ1RfNgorCisjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUJU1pfNE0KKworLyoKKyAqIERNQSBwZXJpcGhlcmFsIGlkZW50aWZpZXJzCisgKiBmb3IgaGFyZHdhcmUgaGFuZHNoYWtpbmcgaW50ZXJmYWNlCisgKi8KKyNkZWZpbmUgQVRfRE1BX0lEX01DSTAJCSAwCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkwX1RYCSAxCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkwX1JYCSAyCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkxX1RYCSAzCisjZGVmaW5lIEFUX0RNQV9JRF9TUEkxX1JYCSA0CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MwX1RYCSA1CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MwX1JYCSA2CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MxX1RYCSA3CisjZGVmaW5lIEFUX0RNQV9JRF9TU0MxX1JYCSA4CisjZGVmaW5lIEFUX0RNQV9JRF9BQzk3X1RYCSA5CisjZGVmaW5lIEFUX0RNQV9JRF9BQzk3X1JYCTEwCisjZGVmaW5lIEFUX0RNQV9JRF9NQ0kxCQkxMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MXNhbTlnNDVfbWF0cml4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzJkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogTWF0cml4LWNlbnRyaWMgaGVhZGVyIGZpbGUgZm9yIHRoZSBBVDkxU0FNOUc0NSBmYW1pbHkKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24uCisgKgorICogTWVtb3J5IENvbnRyb2xsZXJzIChNQVRSSVgsIEVCSSkgLSBTeXN0ZW0gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzLgorICogQmFzZWQgb24gQVQ5MVNBTTlHNDUgcHJlbGltaW5hcnkgZGF0YXNoZWV0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBBVDkxU0FNOUc0NV9NQVRSSVhfSAorI2RlZmluZSBBVDkxU0FNOUc0NV9NQVRSSVhfSAorCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcwCShBVDkxX01BVFJJWCArIDB4MDApCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzEJKEFUOTFfTUFUUklYICsgMHgwNCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHMgkoQVQ5MV9NQVRSSVggKyAweDA4KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkczCShBVDkxX01BVFJJWCArIDB4MEMpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzQJKEFUOTFfTUFUUklYICsgMHgxMCkJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHNQkoQVQ5MV9NQVRSSVggKyAweDE0KQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc2CShBVDkxX01BVFJJWCArIDB4MTgpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDYgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzcJKEFUOTFfTUFUUklYICsgMHgxQykJLyogTWFzdGVyIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9NQ0ZHOAkoQVQ5MV9NQVRSSVggKyAweDIwKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA4ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkc5CShBVDkxX01BVFJJWCArIDB4MjQpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDkgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfTUNGRzEwCShBVDkxX01BVFJJWCArIDB4MjgpCS8qIE1hc3RlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX01DRkcxMQkoQVQ5MV9NQVRSSVggKyAweDJDKQkvKiBNYXN0ZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxMSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfVUxCVAkoNyA8PCAwKQkvKiBVbmRlZmluZWQgTGVuZ3RoIEJ1cnN0IFR5cGUgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX0lORklOSVRFCSgwIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9TSU5HTEUJCSgxIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9GT1VSCQkoMiA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfRUlHSFQJCSgzIDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9TSVhURUVOCSg0IDw8IDApCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVUxCVF9USElSVFlUV08JKDUgPDwgMCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9VTEJUX1NJWFRZRk9VUgkoNiA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1VMQlRfMTI4CQkoNyA8PCAwKQorCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkcwCShBVDkxX01BVFJJWCArIDB4NDApCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHMQkoQVQ5MV9NQVRSSVggKyAweDQ0KQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzIJKEFUOTFfTUFUUklYICsgMHg0OCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkczCShBVDkxX01BVFJJWCArIDB4NEMpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNAkoQVQ5MV9NQVRSSVggKyAweDUwKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfU0NGRzUJKEFUOTFfTUFUUklYICsgMHg1NCkJLyogU2xhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciA1ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1NDRkc2CShBVDkxX01BVFJJWCArIDB4NTgpCS8qIFNsYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgNiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9TQ0ZHNwkoQVQ5MV9NQVRSSVggKyAweDVDKQkvKiBTbGF2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDcgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1NMT1RfQ1lDTEUJCSgweDFmZiA8PCAwKQkvKiBNYXhpbXVtIE51bWJlciBvZiBBbGxvd2VkIEN5Y2xlcyBmb3IgYSBCdXJzdCAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFCSgzICAgIDw8IDE2KQkvKiBEZWZhdWx0IE1hc3RlciBUeXBlICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX05PTkUJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0xBU1QJKDEgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfREVGTVNUUl9UWVBFX0ZJWEVECSgyIDw8IDE2KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfRklYRURfREVGTVNUUgkoMHhmICA8PCAxOCkJLyogRml4ZWQgSW5kZXggb2YgRGVmYXVsdCBNYXN0ZXIgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMAkoQVQ5MV9NQVRSSVggKyAweDgwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAwICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlMwCShBVDkxX01BVFJJWCArIDB4ODQpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDAgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzEJKEFUOTFfTUFUUklYICsgMHg4OCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgMSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTMQkoQVQ5MV9NQVRSSVggKyAweDhDKQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSAxICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVMyCShBVDkxX01BVFJJWCArIDB4OTApCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDIgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzIJKEFUOTFfTUFUUklYICsgMHg5NCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgMiAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTMwkoQVQ5MV9NQVRSSVggKyAweDk4KQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSAzICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlMzCShBVDkxX01BVFJJWCArIDB4OUMpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDMgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzQJKEFUOTFfTUFUUklYICsgMHhBMCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNCAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTNAkoQVQ5MV9NQVRSSVggKyAweEE0KQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSA0ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQVM1CShBVDkxX01BVFJJWCArIDB4QTgpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEEgZm9yIFNsYXZlIDUgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJCUzUJKEFUOTFfTUFUUklYICsgMHhBQykJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQiBmb3IgU2xhdmUgNSAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkFTNgkoQVQ5MV9NQVRSSVggKyAweEIwKQkvKiBQcmlvcml0eSBSZWdpc3RlciBBIGZvciBTbGF2ZSA2ICovCisjZGVmaW5lIEFUOTFfTUFUUklYX1BSQlM2CShBVDkxX01BVFJJWCArIDB4QjQpCS8qIFByaW9yaXR5IFJlZ2lzdGVyIEIgZm9yIFNsYXZlIDYgKi8KKyNkZWZpbmUgQVQ5MV9NQVRSSVhfUFJBUzcJKEFUOTFfTUFUUklYICsgMHhCOCkJLyogUHJpb3JpdHkgUmVnaXN0ZXIgQSBmb3IgU2xhdmUgNyAqLworI2RlZmluZSBBVDkxX01BVFJJWF9QUkJTNwkoQVQ5MV9NQVRSSVggKyAweEJDKQkvKiBQcmlvcml0eSBSZWdpc3RlciBCIGZvciBTbGF2ZSA3ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMFBSCQkoMyA8PCAwKQkvKiBNYXN0ZXIgMCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTFQUgkJKDMgPDwgNCkJLyogTWFzdGVyIDEgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00yUFIJCSgzIDw8IDgpCS8qIE1hc3RlciAyIFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NM1BSCQkoMyA8PCAxMikJLyogTWFzdGVyIDMgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX000UFIJCSgzIDw8IDE2KQkvKiBNYXN0ZXIgNCBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTTVQUgkJKDMgPDwgMjApCS8qIE1hc3RlciA1IFByaW9yaXR5ICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NNlBSCQkoMyA8PCAyNCkJLyogTWFzdGVyIDYgUHJpb3JpdHkgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX003UFIJCSgzIDw8IDI4KQkvKiBNYXN0ZXIgNyBQcmlvcml0eSAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfTThQUgkJKDMgPDwgMCkJLyogTWFzdGVyIDggUHJpb3JpdHkgKGluIFJlZ2lzdGVyIEIpICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NOVBSCQkoMyA8PCA0KQkvKiBNYXN0ZXIgOSBQcmlvcml0eSAoaW4gUmVnaXN0ZXIgQikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX00xMFBSCQkoMyA8PCA4KQkvKiBNYXN0ZXIgMTAgUHJpb3JpdHkgKGluIFJlZ2lzdGVyIEIpICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9NMTFQUgkJKDMgPDwgMTIpCS8qIE1hc3RlciAxMSBQcmlvcml0eSAoaW4gUmVnaXN0ZXIgQikgKi8KKworI2RlZmluZSBBVDkxX01BVFJJWF9NUkNSCShBVDkxX01BVFJJWCArIDB4MTAwKQkvKiBNYXN0ZXIgUmVtYXAgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMAkJKDEgPDwgMCkJLyogUmVtYXAgQ29tbWFuZCBmb3IgQUhCIE1hc3RlciAwIChBUk05MjZFSi1TIEluc3RydWN0aW9uIE1hc3RlcikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjEJCSgxIDw8IDEpCS8qIFJlbWFwIENvbW1hbmQgZm9yIEFIQiBNYXN0ZXIgMSAoQVJNOTI2RUotUyBEYXRhIE1hc3RlcikgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjIJCSgxIDw8IDIpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0IzCQkoMSA8PCAzKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNAkJKDEgPDwgNCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjUJCSgxIDw8IDUpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I2CQkoMSA8PCA2KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCNwkJKDEgPDwgNykKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1JDQjgJCSgxIDw8IDgpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9SQ0I5CQkoMSA8PCA5KQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMTAJCSgxIDw8IDEwKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfUkNCMTEJCSgxIDw8IDExKQorCisjZGVmaW5lIEFUOTFfTUFUUklYX1RDTVIJKEFUOTFfTUFUUklYICsgMHgxMTApCS8qIFRDTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9JVENNX1NJWkUJCSgweGYgPDwgMCkJLyogU2l6ZSBvZiBJVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfSVRDTV8wCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0lUQ01fMzIJCSg2IDw8IDApCisjZGVmaW5lCQlBVDkxX01BVFJJWF9EVENNX1NJWkUJCSgweGYgPDwgNCkJLyogU2l6ZSBvZiBEVENNIGVuYWJsZWQgbWVtb3J5IGJsb2NrICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV8wCQkoMCA8PCA0KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0RUQ01fMzIJCSg2IDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRFRDTV82NAkJKDcgPDwgNCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1RDTV9OV1MJCSgweDEgPDwgMTEpCS8qIFdhaXQgc3RhdGUgVENNIHJlZ2lzdGVyICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfVENNX05PX1dTCQkoMHgwIDw8IDExKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1RDTV9PTkVfV1MJCSgweDEgPDwgMTEpCisKKyNkZWZpbmUgQVQ5MV9NQVRSSVhfVklERU8JKEFUOTFfTUFUUklYICsgMHgxMTgpCS8qIFZpZGVvIE1vZGUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MUNfVkRFQ19TRUwJCQkoMHgxIDw8ICAwKSAvKiBWaWRlbyBNb2RlIFNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFDX1ZERUNfU0VMX09GRgkJKDAgPDwgMCkKKyNkZWZpbmUJCQlBVDkxQ19WREVDX1NFTF9PTgkJKDEgPDwgMCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9FQklDU0EJKEFUOTFfTUFUUklYICsgMHgxMjgpCS8qIEVCSSBDaGlwIFNlbGVjdCBBc3NpZ25tZW50IFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9FQklfQ1MxQQkJKDEgPDwgMSkJLyogQ2hpcCBTZWxlY3QgMSBBc3NpZ25tZW50ICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTMUFfU01DCQkoMCA8PCAxKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSV9DUzFBX1NEUkFNQwkJKDEgPDwgMSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9DUzNBCQkoMSA8PCAzKQkvKiBDaGlwIFNlbGVjdCAzIEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfQ1MzQV9TTUMJCSgwIDw8IDMpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTM0FfU01DX1NNQVJUTUVESUEJKDEgPDwgMykKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9DUzRBCQkoMSA8PCA0KQkvKiBDaGlwIFNlbGVjdCA0IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfQ1M0QV9TTUMJCSgwIDw8IDQpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTNEFfU01DX0NGMAkJKDEgPDwgNCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9DUzVBCQkoMSA8PCA1KQkvKiBDaGlwIFNlbGVjdCA1IEFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfQ1M1QV9TTUMJCSgwIDw8IDUpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0NTNUFfU01DX0NGMQkJKDEgPDwgNSkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9EQlBVQwkJKDEgPDwgOCkJLyogRGF0YSBCdXMgUHVsbC11cCBDb25maWd1cmF0aW9uICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0RCUFVfT04JCQkoMCA8PCA4KQorI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSV9EQlBVX09GRgkJKDEgPDwgOCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9WRERJT01TRUwJKDEgPDwgMTYpCS8qIE1lbW9yeSB2b2x0YWdlIHNlbGVjdGlvbiAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX0VCSV9WRERJT01TRUxfMV84VgkJKDAgPDwgMTYpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX1ZERElPTVNFTF8zXzNWCQkoMSA8PCAxNikKKyNkZWZpbmUJCUFUOTFfTUFUUklYX0VCSV9FQklfSU9TUgkoMSA8PCAxNykJLyogRUJJIEkvTyBzbGV3IHJhdGUgc2VsZWN0aW9uICovCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0VCSV9JT1NSX1JFRFVDRUQJKDAgPDwgMTcpCisjZGVmaW5lCQkJQVQ5MV9NQVRSSVhfRUJJX0VCSV9JT1NSX05PUk1BTAkJKDEgPDwgMTcpCisjZGVmaW5lCQlBVDkxX01BVFJJWF9FQklfRERSX0lPU1IJKDEgPDwgMTgpCS8qIEREUjIgZGVkaWNhdGVkIHBvcnQgSS9PIHNsZXcgcmF0ZSBzZWxlY3Rpb24gKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfRERSX0lPU1JfUkVEVUNFRAkoMCA8PCAxOCkKKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9FQklfRERSX0lPU1JfTk9STUFMCQkoMSA8PCAxOCkKKworI2RlZmluZSBBVDkxX01BVFJJWF9XUE1SCShBVDkxX01BVFJJWCArIDB4MUU0KQkvKiBXcml0ZSBQcm90ZWN0IE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJCUFUOTFfTUFUUklYX1dQTVJfV1BFTgkJKDEgPDwgMCkJLyogV3JpdGUgUHJvdGVjdCBFTmFibGUgKi8KKyNkZWZpbmUJCQlBVDkxX01BVFJJWF9XUE1SX1dQX1dQRElTCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1dQTVJfV1BfV1BFTgkJKDEgPDwgMCkKKyNkZWZpbmUJCUFUOTFfTUFUUklYX1dQTVJfV1BLRVkJCSgweEZGRkZGRiA8PCA4KQkvKiBXcml0ZSBQcm90ZWN0IEtFWSAqLworCisjZGVmaW5lIEFUOTFfTUFUUklYX1dQU1IJKEFUOTFfTUFUUklYICsgMHgxRTgpCS8qIFdyaXRlIFByb3RlY3QgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX01BVFJJWF9XUFNSX1dQVlMJCSgxIDw8IDApCS8qIFdyaXRlIFByb3RlY3QgVmlvbGF0aW9uIFN0YXR1cyAqLworI2RlZmluZQkJCUFUOTFfTUFUUklYX1dQU1JfTk9fV1BWCQkoMCA8PCAwKQorI2RlZmluZQkJCUFUOTFfTUFUUklYX1dQU1JfV1BWCQkoMSA8PCAwKQorI2RlZmluZQkJQVQ5MV9NQVRSSVhfV1BTUl9XUFZTUkMJCSgweEZGRkYgPDwgOCkJLyogV3JpdGUgUHJvdGVjdCBWaW9sYXRpb24gU291cmNlICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IGU2YWZmZjguLjEzZjI3YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYm9hcmQuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oPgorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CiAKICAvKiBVU0IgRGV2aWNlICovCiBzdHJ1Y3QgYXQ5MV91ZGNfZGF0YSB7CkBAIC04MCw3ICs4MSw4IEBACiB9OwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9ldGgoc3RydWN0IGF0OTFfZXRoX2RhdGEgKmRhdGEpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxQ0FQOSkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05RzIwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFDQVA5KSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUc0NSkKICNkZWZpbmUgZXRoX3BsYXRmb3JtX2RhdGEJYXQ5MV9ldGhfZGF0YQogI2VuZGlmCiAKQEAgLTkwLDYgKzkyLDcgQEAKIAl1OAkJdmJ1c19waW5bMl07CS8qIHBvcnQgcG93ZXItY29udHJvbCBwaW4gKi8KIH07CiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNiaF9kYXRhICpkYXRhKTsKK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdXNiaF9vaGNpKHN0cnVjdCBhdDkxX3VzYmhfZGF0YSAqZGF0YSk7CiAKICAvKiBOQU5EIC8gU21hcnRNZWRpYSAqLwogc3RydWN0IGF0bWVsX25hbmRfZGF0YSB7CkBAIC0xMDUsNyArMTA4LDExIEBACiBleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX25hbmQoc3RydWN0IGF0bWVsX25hbmRfZGF0YSAqZGF0YSk7CiAKICAvKiBJMkMqLworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2kyYyhzaG9ydCBpMmNfaWQsIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpOworI2Vsc2UKIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpOworI2VuZGlmCiAKICAvKiBTUEkgKi8KIGV4dGVybiB2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG5yX2RldmljZXMpOwpAQCAtMTY4LDEwICsxNzUsNyBAQAogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9sY2RjKHN0cnVjdCBhdG1lbF9sY2RmYl9pbmZvICpkYXRhKTsKIAogIC8qIEFDOTcgKi8KLXN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgewotCXU4CQlyZXNldF9waW47CS8qIHJlc2V0ICovCi19OwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKTsKIAogIC8qIElTSSAqLwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9pc2kodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCBjNTU0YzNlLi4zNGE5NTAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTIxLDggKzIxLDEwIEBACiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTkyNjAJMHgwMTk4MDNhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05MjYxCTB4MDE5NzAzYTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOTI2MwkweDAxOTYwN2EwCisjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHMTAJMHg4MTk5MDNhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzIwCTB4MDE5OTA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVJMNjQJMHgwMTliMDNhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1CTB4ODE5YjA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxQ0FQOQkweDAzOUEwM0EwCiAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVhFMTI4CTB4MzI5OTczYTAKQEAgLTM5LDYgKzQxLDE1IEBACiAJcmV0dXJuIChhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9DSURSKSAmIH5BVDkxX0NJRFJfVkVSU0lPTik7CiB9CiAKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTExCTB4MDAwMDAwMDEKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05TTEwCTB4MDAwMDAwMDIKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzQ1CTB4MDAwMDAwMDQKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfZXhpZF9pZGVudGlmeSh2b2lkKQoreworCXJldHVybiBhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9FWElEKTsKK30KKwogCiAjZGVmaW5lIEFSQ0hfRkFNSUxZX0FUOTFYOTIJMHgwOTIwMDAwMAogI2RlZmluZSBBUkNIX0ZBTUlMWV9BVDkxU0FNOQkweDAxOTAwMDAwCkBAIC04Nyw2ICs5OCwxMiBAQAogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjEoKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfQVQ5MVNBTTlHMTAKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzEwKCkJKGF0OTFfY3B1X2lkZW50aWZ5KCkgPT0gQVJDSF9JRF9BVDkxU0FNOUcxMCkKKyNlbHNlCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxMCgpCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOTI2MwogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjMoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05MjYzKQogI2Vsc2UKQEAgLTk5LDYgKzExNiwxMiBAQAogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlybCgpCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOUc0NQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05RzQ1KQorI2Vsc2UKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1KCkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX0FUOTFDQVA5CiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOSgpCShhdDkxX2NwdV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MUNBUDkpCiAjZGVmaW5lIGNwdV9pc19hdDkxY2FwOV9yZXZCKCkJKGF0OTFjYXA5X3Jldl9pZGVudGlmeSgpID09IEFSQ0hfUkVWSVNJT05fQ0FQOV9CKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGRhMGI2ODEuLmEwZGY4YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTIwLDEyICsyMCwxNCBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MXJtOTIwMC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcyMCkKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYwLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcxMCkKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05MjYxLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYzKQogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTkyNjMuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlSTCkKICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05cmwuaD4KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCisjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOWc0NS5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxQ0FQOSkKICNpbmNsdWRlIDxtYWNoL2F0OTFjYXA5Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFYNDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggZDg0Yzk5NC4uMzFhYzJkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtNDIsNiArNDIsMTEgQEAKICNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTk5MzAwMDAwCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFTQU05X01BU1RFUl9DTE9DSy8xNikKIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOUcxMCkKKworI2RlZmluZSBBVDkxU0FNOV9NQVNURVJfQ0xPQ0sJMTMzMDAwMDAwCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKEFUOTFTQU05X01BU1RFUl9DTE9DSy8xNikKKwogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MykKIAogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfVVNCX0E5MjYzKQpAQCAtNjIsNiArNjcsMTEgQEAKICNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTEzMjA5NjAwMAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShBVDkxU0FNOV9NQVNURVJfQ0xPQ0svMTYpCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MVNBTTlHNDUpCisKKyNkZWZpbmUgQVQ5MVNBTTlfTUFTVEVSX0NMT0NLCTEzMzMzMzMzMworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShBVDkxU0FNOV9NQVNURVJfQ0xPQ0svMTYpCisKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfQVQ5MUNBUDkpCiAKICNkZWZpbmUgQVQ5MUNBUDlfTUFTVEVSX0NMT0NLCTEwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwppbmRleCBlMjZjNGZlLi40MDI4NzI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYwpAQCAtMjAxLDcgKzIwMSw4IEBACiAJCQlwcl9lcnIoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JfSBlbHNlIGlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKSB8fCBjcHVfaXNfYXQ5MXNhbTlnMjAoKSkgeworCX0gZWxzZSBpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYxKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkKKwkJCXx8IGNwdV9pc19hdDkxc2FtOWcyMCgpIHx8IGNwdV9pc19hdDkxc2FtOWcxMCgpKSB7CiAJCWlmICgoc2NzciAmIChBVDkxU0FNOTI2eF9QTUNfVUhQIHwgQVQ5MVNBTTkyNnhfUE1DX1VEUCkpICE9IDApIHsKIAkJCXByX2VycigiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1N2I0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACitjaG9pY2UKKwlwcm9tcHQgIlByb2Nlc3NvciBzZWxlY3Rpb24gaW4gQkNNUklORyBmYW1pbHkgb2YgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIEFSQ0hfQkNNUklORworCWRlZmF1bHQgQVJDSF9CQ00xMTEwNworCitjb25maWcgQVJDSF9GUEdBMTExMDcKKwlib29sICJGUEdBMTExMDciCisKK2NvbmZpZyBBUkNIX0JDTTExMTA3CisJYm9vbCAiQkNNMTExMDciCitlbmRjaG9pY2UKKworbWVudSAiQkNNUklORyBPcHRpb25zIgorCWRlcGVuZHMgb24gQVJDSF9CQ01SSU5HCisKK2NvbmZpZyBCQ01fWlJFTEFERFIKKwloZXggIkNvbXByZXNzZWQgWlJFTCBBRERSIgorCitlbmRtZW51CisKKyMgc291cmNlICJkcml2ZXJzL2NoYXIvYmNtcmluZy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDlmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSw4IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIE9iamVjdCBmaWxlIGxpc3RzLgorCitvYmoteSA6PSBhcmNoLm8gbW0ubyBpcnEubyBjbG9jay5vIGNvcmUubyB0aW1lci5vIGRtYS5vCitvYmoteSArPSBjc3AvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNTNiMjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDYgQEAKKyMgQWRkcmVzcyB3aGVyZSBkZWNvbXByZXNzb3Igd2lsbCBiZSB3cml0dGVuIGFuZCBldmVudHVhbGx5IGV4ZWN1dGVkLgorIworIyBkZWZhdWx0IHRvIFNEUkFNCit6cmVsYWRkci15ICAgICAgOj0gJChDT05GSUdfQkNNX1pSRUxBRERSKQorcGFyYW1zX3BoeXMteSAgIDo9IDB4MDAwMDA4MDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2FyY2guYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9hcmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNjkzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9hcmNoLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9tbV9pby5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfZGVmLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KKworI2luY2x1ZGUgImNvcmUuaCIKKworSFdfREVDTEFSRV9TUElOTE9DSyhhcmNoKQorSFdfREVDTEFSRV9TUElOTE9DSyhncGlvKQorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQorICAgIEVYUE9SVF9TWU1CT0woYmNtcmluZ19ncGlvX3JlZ19sb2NrKTsKKyNlbmRpZgorCisvKiBGSVhNRTogdGVtcG9yYXJ5IHNvbHV0aW9uICovCisjZGVmaW5lIEJDTV9TWVNDVExfUkVCT09UX1dBUk0gICAgICAgICAgICAgICAxCisjZGVmaW5lIENUTF9CQ01fUkVCT09UICAgICAgICAgICAgICAgICAxMTIKKworLyogc3lzY3RsICovCitpbnQgYmNtcmluZ19hcmNoX3dhcm1fcmVib290OwkvKiBkbyBhIHdhcm0gcmVib290IG9uIGhhcmQgcmVzZXQgKi8KKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpiY21yaW5nX3N5c2N0bF9oZWFkZXI7CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJjbXJpbmdfc3lzY3RsX3dhcm1fcmVib290W10gPSB7CisJeworCSAuY3RsX25hbWUgPSBCQ01fU1lTQ1RMX1JFQk9PVF9XQVJNLAorCSAucHJvY25hbWUgPSAid2FybSIsCisJIC5kYXRhID0gJmJjbXJpbmdfYXJjaF93YXJtX3JlYm9vdCwKKwkgLm1heGxlbiA9IHNpemVvZihpbnQpLAorCSAubW9kZSA9IDA2NDQsCisJIC5wcm9jX2hhbmRsZXIgPSAmcHJvY19kb2ludHZlY30sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJjbXJpbmdfc3lzY3RsX3JlYm9vdFtdID0geworCXsKKwkgLmN0bF9uYW1lID0gQ1RMX0JDTV9SRUJPT1QsCisJIC5wcm9jbmFtZSA9ICJyZWJvb3QiLAorCSAubW9kZSA9IDA1NTUsCisJIC5jaGlsZCA9IGJjbXJpbmdfc3lzY3RsX3dhcm1fcmVib290fSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUgPSAiYmNtLW5hbmQiLAorCS5pZCA9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZuYW5kX2RldmljZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgQ2FsbGVkIGZyb20gdGhlIGN1c3RvbWl6ZV9tYWNoaW5lIGZ1bmN0aW9uIGluIGFyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisqCisqICAgVGhlIGN1c3RvbWl6ZV9tYWNoaW5lIGZ1bmN0aW9uIGlzIHRhZ2dlZCBhcyBhbiBhcmNoX2luaXRjYWxsCisqICAgKHNlZSBpbmNsdWRlL2xpbnV4L2luaXQuaCBmb3IgdGhlIG9yZGVyIHRoYXQgdGhlIHZhcmlvdXMgaW5pdCBzZWN0aW9ucworKiAgIGFyZSBjYWxsZWQgaW4uCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBiY21yaW5nX2luaXRfbWFjaGluZSh2b2lkKQoreworCisJYmNtcmluZ19zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGJjbXJpbmdfc3lzY3RsX3JlYm9vdCk7CisKKwkvKiBFbmFibGUgc3ByZWFkIHNwZWN0cnVtICovCisJY2hpcGNId19lbmFibGVTcHJlYWRTcGVjdHJ1bSgpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisKKwliY21yaW5nX2FtYmFfaW5pdCgpOworCisJZG1hX2luaXQoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDYWxsZWQgZnJvbSBzZXR1cF9hcmNoIChpbiBhcmNoL2FybS9rZXJuZWwvc2V0dXAuYykgdG8gZml4dXAgYW55IHRhZ3MKKyogICBwYXNzZWQgaW4gYnkgdGhlIGJvb3QgbG9hZGVyLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9faW5pdCBiY21yaW5nX2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKmRlc2MsCisgICAgIHN0cnVjdCB0YWcgKnQsIGNoYXIgKipjbWRsaW5lLCBzdHJ1Y3QgbWVtaW5mbyAqbWkpIHsKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlwcmludGsoS0VSTl9OT1RJQ0UgImJjbXJpbmdfZml4dXBcbiIpOworCXQtPmhkci50YWcgPSBBVEFHX0NPUkU7CisJdC0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfY29yZSk7CisJdC0+dS5jb3JlLmZsYWdzID0gMDsKKwl0LT51LmNvcmUucGFnZXNpemUgPSBQQUdFX1NJWkU7CisJdC0+dS5jb3JlLnJvb3RkZXYgPSAzMSA8PCA4IHwgMDsKKwl0ID0gdGFnX25leHQodCk7CisKKwl0LT5oZHIudGFnID0gQVRBR19NRU07CisJdC0+aGRyLnNpemUgPSB0YWdfc2l6ZSh0YWdfbWVtMzIpOworCXQtPnUubWVtLnN0YXJ0ID0gQ0ZHX0dMT0JBTF9SQU1fQkFTRTsKKwl0LT51Lm1lbS5zaXplID0gQ0ZHX0dMT0JBTF9SQU1fU0laRTsKKworCXQgPSB0YWdfbmV4dCh0KTsKKworCXQtPmhkci50YWcgPSBBVEFHX05PTkU7CisJdC0+aGRyLnNpemUgPSAwOworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgTWFjaGluZSBEZXNjcmlwdGlvbgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK01BQ0hJTkVfU1RBUlQoQkNNUklORywgIkJDTVJJTkciKQorCS8qIE1haW50YWluZXI6IEJyb2FkY29tIENvcnBvcmF0aW9uICovCisJLnBoeXNfaW8gPSBNTV9JT19TVEFSVCwKKwkuaW9fcGdfb2Zmc3QgPSAoTU1fSU9fQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLmZpeHVwID0gYmNtcmluZ19maXh1cCwKKwkubWFwX2lvID0gYmNtcmluZ19tYXBfaW8sCisJLmluaXRfaXJxID0gYmNtcmluZ19pbml0X2lycSwKKwkudGltZXIgPSAmYmNtcmluZ190aW1lciwKKwkuaW5pdF9tYWNoaW5lID0gYmNtcmluZ19pbml0X21hY2hpbmUKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YmFmYzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY2xvY2suYwpAQCAtMCwwICsxLDIyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAxIC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvaHdfY2ZnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19kZWYuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCisjZGVmaW5lIGNsa19pc19wcmltYXJ5KHgpICAgICAgICgoeCktPnR5cGUgJiBDTEtfVFlQRV9QUklNQVJZKQorI2RlZmluZSBjbGtfaXNfcGxsMSh4KSAgICAgICAgICAoKHgpLT50eXBlICYgQ0xLX1RZUEVfUExMMSkKKyNkZWZpbmUgY2xrX2lzX3BsbDIoeCkgICAgICAgICAgKCh4KS0+dHlwZSAmIENMS19UWVBFX1BMTDIpCisjZGVmaW5lIGNsa19pc19wcm9ncmFtbWFibGUoeCkgICgoeCktPnR5cGUgJiBDTEtfVFlQRV9QUk9HUkFNTUFCTEUpCisjZGVmaW5lIGNsa19pc19ieXBhc3NhYmxlKHgpICAgICgoeCktPnR5cGUgJiBDTEtfVFlQRV9CWVBBU1NBQkxFKQorCisjZGVmaW5lIGNsa19pc191c2luZ194dGFsKHgpICAgICgoeCktPm1vZGUgJiBDTEtfTU9ERV9YVEFMKQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHZvaWQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJLyogZW5hYmxlIHBhcmVudCBjbG9jayBmaXJzdCAqLworCWlmIChjbGstPnBhcmVudCkKKwkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKKworCWlmIChjbGstPnVzZV9jbnQrKyA9PSAwKSB7CisJCWlmIChjbGtfaXNfcGxsMShjbGspKSB7CS8qIFBMTDEgKi8KKwkJCWNoaXBjSHdfcGxsMUVuYWJsZShjbGstPnJhdGVfaHosIDApOworCQl9IGVsc2UgaWYgKGNsa19pc19wbGwyKGNsaykpIHsJLyogUExMMiAqLworCQkJY2hpcGNId19wbGwyRW5hYmxlKGNsay0+cmF0ZV9oeik7CisJCX0gZWxzZSBpZiAoY2xrX2lzX3VzaW5nX3h0YWwoY2xrKSkgewkvKiBzb3VyY2UgaXMgY3J5c3RhbCAqLworCQkJaWYgKCFjbGtfaXNfcHJpbWFyeShjbGspKQorCQkJCWNoaXBjSHdfYnlwYXNzQ2xvY2tFbmFibGUoY2xrLT5jc3BfaWQpOworCQl9IGVsc2UgewkvKiBzb3VyY2UgaXMgUExMICovCisJCQljaGlwY0h3X3NldENsb2NrRW5hYmxlKGNsay0+Y3NwX2lkKTsKKwkJfQorCX0KK30KKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWNsaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlfX2Nsa19lbmFibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCitzdGF0aWMgdm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJQlVHX09OKGNsay0+dXNlX2NudCA9PSAwKTsKKworCWlmICgtLWNsay0+dXNlX2NudCA9PSAwKSB7CisJCWlmIChjbGtfaXNfcGxsMShjbGspKSB7CS8qIFBMTDEgKi8KKwkJCWNoaXBjSHdfcGxsMURpc2FibGUoKTsKKwkJfSBlbHNlIGlmIChjbGtfaXNfcGxsMihjbGspKSB7CS8qIFBMTDIgKi8KKwkJCWNoaXBjSHdfcGxsMkRpc2FibGUoKTsKKwkJfSBlbHNlIGlmIChjbGtfaXNfdXNpbmdfeHRhbChjbGspKSB7CS8qIHNvdXJjZSBpcyBjcnlzdGFsICovCisJCQlpZiAoIWNsa19pc19wcmltYXJ5KGNsaykpCisJCQkJY2hpcGNId19ieXBhc3NDbG9ja0Rpc2FibGUoY2xrLT5jc3BfaWQpOworCQl9IGVsc2UgewkvKiBzb3VyY2UgaXMgUExMICovCisJCQljaGlwY0h3X3NldENsb2NrRGlzYWJsZShjbGstPmNzcF9pZCk7CisJCX0KKwl9CisKKwlpZiAoY2xrLT5wYXJlbnQpCisJCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworfQorCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFjbGspCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2Rpc2FibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY2xrLT5yYXRlX2h6OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBhY3R1YWw7CisJdW5zaWduZWQgbG9uZyByYXRlX2h6OworCisJaWYgKCFjbGspCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjbGtfaXNfcHJvZ3JhbW1hYmxlKGNsaykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsay0+dXNlX2NudCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCWFjdHVhbCA9IGNsay0+cGFyZW50LT5yYXRlX2h6OworCXJhdGVfaHogPSBtaW4oYWN0dWFsLCByYXRlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJhdGVfaHo7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworaW50IGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYWN0dWFsOworCXVuc2lnbmVkIGxvbmcgcmF0ZV9oejsKKworCWlmICghY2xrKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGstPnVzZV9jbnQpCisJCXJldHVybiAtRUJVU1k7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlhY3R1YWwgPSBjbGstPnBhcmVudC0+cmF0ZV9oejsKKwlyYXRlX2h6ID0gbWluKGFjdHVhbCwgcmF0ZSk7CisJcmF0ZV9oeiA9IGNoaXBjSHdfc2V0Q2xvY2tGcmVxdWVuY3koY2xrLT5jc3BfaWQsIHJhdGVfaHopOworCWNsay0+cmF0ZV9oeiA9IHJhdGVfaHo7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xrX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKCFjbGspCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGNsay0+cGFyZW50OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CisKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjbGsgKm9sZF9wYXJlbnQ7CisKKwlpZiAoIWNsayB8fCAhcGFyZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX2J5cGFzc2FibGUoY2xrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBpZiBtb3JlIHRoYW4gb25lIHVzZXIsIHBhcmVudCBpcyBub3QgYWxsb3dlZCAqLworCWlmIChjbGstPnVzZV9jbnQgPiAxKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGNsay0+cGFyZW50ID09IHBhcmVudCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlvbGRfcGFyZW50ID0gY2xrLT5wYXJlbnQ7CisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisJaWYgKGNsa19pc191c2luZ194dGFsKHBhcmVudCkpCisJCWNsay0+bW9kZSB8PSBDTEtfTU9ERV9YVEFMOworCWVsc2UKKwkJY2xrLT5tb2RlICY9ICh+Q0xLX01PREVfWFRBTCk7CisKKwkvKiBpZiBjbG9jayBpcyBhY3RpdmUgKi8KKwlpZiAoY2xrLT51c2VfY250ICE9IDApIHsKKwkJY2xrLT51c2VfY250LS07CisJCS8qIGVuYWJsZSBjbG9jayB3aXRoIHRoZSBuZXcgcGFyZW50ICovCisJCV9fY2xrX2VuYWJsZShjbGspOworCQkvKiBkaXNhYmxlIHRoZSBvbGQgcGFyZW50ICovCisJCV9fY2xrX2Rpc2FibGUob2xkX3BhcmVudCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsa19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBiOTgxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2Nsb2NrLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAxIC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2RlZi5oPgorCisjZGVmaW5lIENMS19UWVBFX1BSSU1BUlkgICAgICAgICAxCS8qIHByaW1hcnkgY2xvY2sgbXVzdCBOT1QgaGF2ZSBhIHBhcmVudCAqLworI2RlZmluZSBDTEtfVFlQRV9QTEwxICAgICAgICAgICAgMgkvKiBQUEwxICovCisjZGVmaW5lIENMS19UWVBFX1BMTDIgICAgICAgICAgICA0CS8qIFBQTDIgKi8KKyNkZWZpbmUgQ0xLX1RZUEVfUFJPR1JBTU1BQkxFICAgIDgJLyogcHJvZ3JhbW1hYmxlIGNsb2NrIHJhdGUgKi8KKyNkZWZpbmUgQ0xLX1RZUEVfQllQQVNTQUJMRSAgICAgIDE2CS8qIHBhcmVudCBjYW4gYmUgY2hhbmdlZCAqLworCisjZGVmaW5lIENMS19NT0RFX1hUQUwgICAgICAgICAgICAxCS8qIGNsb2NrIHNvdXJjZSBpcyBmcm9tIGNyeXN0YWwgKi8KKworc3RydWN0IGNsayB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogY2xvY2sgbmFtZSAqLworCXVuc2lnbmVkIGludCB0eXBlOwkvKiBjbG9jayB0eXBlICovCisJdW5zaWduZWQgaW50IG1vZGU7CS8qIGN1cnJlbnQgbW9kZSAqLworCXZvbGF0aWxlIGludCB1c2VfYnlwYXNzOwkvKiBpbmRpY2F0ZSBpZiBpdCdzIGluIGJ5cGFzcyBtb2RlICovCisJY2hpcGNId19DTE9DS19lIGNzcF9pZDsJLyogY2xvY2sgSUQgZm9yIENTUCBDSElQQyAqLworCXVuc2lnbmVkIGxvbmcgcmF0ZV9oejsJLyogY2xvY2sgcmF0ZSBpbiBIeiAqLworCXVuc2lnbmVkIGludCB1c2VfY250OwkvKiB1c2FnZSBjb3VudCAqLworCXN0cnVjdCBjbGsgKnBhcmVudDsJLyogcGFyZW50IGNsb2NrICovCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyYzY0OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKQEAgLTAsMCArMSwzNjcgQEAKKy8qCisgKiAgZGVyaXZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworICogIGxpbnV4L2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IC0gMjAwMyBBUk0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworLyogUG9ydGlvbnMgY29weXJpZ2h0IEJyb2FkY29tIDIwMDggKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL21tX2FkZHIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgorCisjaW5jbHVkZSA8Y2ZnX2dsb2JhbC5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworI2luY2x1ZGUgPGNzcC9zZWNIdy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL3NlY0h3X2RlZi5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvdG1ySHdfcmVnLmg+CisKKyNkZWZpbmUgQU1CQV9ERVZJQ0UobmFtZSwgaW5pdG5hbWUsIGJhc2UsIHBsYXQsIHNpemUpICAgICAgIFwKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbmFtZSMjX2RldmljZSA9IHsgICAgIFwKKyAgIC5kZXYgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IH4wLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5pbml0X25hbWUgPSBpbml0bmFtZSwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5wbGF0Zm9ybV9kYXRhID0gcGxhdCAgICAgICAgICAgICAgICAgICAgIFwKKyAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIC5yZXMgPSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC5zdGFydCA9IE1NX0FERFJfSU9fIyNiYXNlLCAgICAgICAgICAgICAgIFwKKwkJLmVuZCA9IE1NX0FERFJfSU9fIyNiYXNlICsgKHNpemUpIC0gMSwgICAgXAorICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0gICAgICAgICAgICAgICAgICAgXAorICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgLmRtYV9tYXNrID0gfjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgLmlycSA9IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgSVJRXyMjYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisKK0FNQkFfREVWSUNFKHVhcnRBLCAidWFydGEiLCBVQVJUQSwgTlVMTCwgU1pfNEspOworQU1CQV9ERVZJQ0UodWFydEIsICJ1YXJ0YiIsIFVBUlRCLCBOVUxMLCBTWl80Syk7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfY2xrID0geworCS5uYW1lID0gIlBMTDEiLAorCS50eXBlID0gQ0xLX1RZUEVfUFJJTUFSWSB8IENMS19UWVBFX1BMTDEsCisJLnJhdGVfaHogPSAyMDAwMDAwMDAwLAorCS51c2VfY250ID0gNywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrID0geworCS5uYW1lID0gIlVBUlQiLAorCS50eXBlID0gQ0xLX1RZUEVfUFJPR1JBTU1BQkxFLAorCS5jc3BfaWQgPSBjaGlwY0h3X0NMT0NLX1VBUlQsCisJLnJhdGVfaHogPSBIV19DRkdfVUFSVF9DTEtfSFosCisJLnBhcmVudCA9ICZwbGwxX2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJewkJCS8qIFVBUlQwICovCisJIC5kZXZfaWQgPSAidWFydGEiLAorCSAuY2xrID0gJnVhcnRfY2xrLAorCSB9LCB7CQkJLyogVUFSVDEgKi8KKwkgICAgIC5kZXZfaWQgPSAidWFydGIiLAorCSAgICAgLmNsayA9ICZ1YXJ0X2NsaywKKwkgICAgIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJJnVhcnRBX2RldmljZSwKKwkmdWFydEJfZGV2aWNlLAorfTsKKwordm9pZCBfX2luaXQgYmNtcmluZ19hbWJhX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwl1MzIgYnVzX2Nsb2NrOworCisvKiBMaW51eCBpcyBydW4gaW5pdGlhbGx5IGluIG5vbi1zZWN1cmUgbW9kZS4gU2VjdXJlIHBlcmlwaGVyYWxzICovCisvKiBnZW5lcmF0ZSBGSVEsIGFuZCBtdXN0IGJlIGhhbmRsZWQgaW4gc2VjdXJlIG1vZGUuIFVudGlsIHdlIGhhdmUgKi8KKy8qIGEgbGludXggc2VjdXJpdHkgbW9uaXRvciBpbXBsZW1lbnRhdGlvbiwga2VlcCBldmVyeXRoaW5nIGluICovCisvKiBub24tc2VjdXJlIG1vZGUuICovCisJY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0VuYWJsZShjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfU1BVKTsKKwlzZWNId19zZXRVbnNlY3VyZShzZWNId19CTEtfTUFTS19DSElQX0NPTlRST0wgfAorCQkJICBzZWNId19CTEtfTUFTS19LRVlfU0NBTiB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1RPVUNIX1NDUkVFTiB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1VBUlQwIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfVUFSVDEgfAorCQkJICBzZWNId19CTEtfTUFTS19XQVRDSERPRyB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1NQVU0gfAorCQkJICBzZWNId19CTEtfTUFTS19ERFIyIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfU1BVIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfUEtBIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfUk5HIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfUlRDIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfT1RQIHwKKwkJCSAgc2VjSHdfQkxLX01BU0tfQk9PVCB8CisJCQkgIHNlY0h3X0JMS19NQVNLX01QVSB8CisJCQkgIHNlY0h3X0JMS19NQVNLX1RaQ1RSTCB8IHNlY0h3X0JMS19NQVNLX0lOVFIpOworCisJLyogT25seSB0aGUgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgQU1CQSBidXMgYXJlIGVuYWJsZWQganVzdCBiZWZvcmUgdGhlIGJ1cyBpcyAqLworCS8qIHNjYW5uZWQgYW5kIHRoZSBkcml2ZXJzIGFyZSBsb2FkZWQuIFRoZSBjbG9ja3MgbmVlZCB0byBiZSBvbiBmb3IgdGhlIEFNQkEgYnVzICovCisJLyogZHJpdmVyIHRvIGFjY2VzcyB0aGVzZSBibG9ja3MuIFRoZSBidXMgaXMgcHJvYmVkLCBhbmQgdGhlIGRyaXZlcnMgYXJlIGxvYWRlZC4gKi8KKwkvKiBGSVhNRSBOZWVkIHRvIHJlbW92ZSBlbmFibGUgb2YgUElGIG9uY2UgQ0xDRCBjbG9jayBlbmFibGUgdXNlZCBwcm9wZXJseSBpbiBGUEdBLiAqLworCWJ1c19jbG9jayA9IGNoaXBjSHdfUkVHX0JVU19DTE9DS19HRQorCSAgICB8IGNoaXBjSHdfUkVHX0JVU19DTE9DS19TRElPMCB8IGNoaXBjSHdfUkVHX0JVU19DTE9DS19TRElPMTsKKworCWNoaXBjSHdfYnVzSW50ZXJmYWNlQ2xvY2tFbmFibGUoYnVzX2Nsb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CisJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKKwkJYW1iYV9kZXZpY2VfcmVnaXN0ZXIoZCwgJmlvbWVtX3Jlc291cmNlKTsKKwl9Cit9CisKKy8qCisgKiBXaGVyZSBpcyB0aGUgdGltZXIgKFZBKT8KKyAqLworI2RlZmluZSBUSU1FUjBfVkFfQkFTRQkJIE1NX0lPX0JBU0VfVE1SCisjZGVmaW5lIFRJTUVSMV9WQV9CQVNFCQkoTU1fSU9fQkFTRV9UTVIgKyAweDIwKQorI2RlZmluZSBUSU1FUjJfVkFfQkFTRQkJKE1NX0lPX0JBU0VfVE1SICsgMHg0MCkKKyNkZWZpbmUgVElNRVIzX1ZBX0JBU0UgICAgICAgICAgKE1NX0lPX0JBU0VfVE1SICsgMHg2MCkKKworLyogVGltZXIgMCAtIDI1IE1IeiwgVGltZXIzIGF0IGJ1cyBjbG9jayByYXRlLCB0eXBpY2FsbHkgIDE1MC0xNjYgTUh6ICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9GUEdBMTExMDcpCisvKiBmcGdhIGNwdS9idXMgYXJlIGN1cnJlbnRseSAzMCB0aW1lcyBzbG93ZXIgc28gc2NhbGUgZnJlcXVlbmN5IGFzIHdlbGwgdG8gKi8KKy8qIHNsb3cgZG93biBMaW51eCdzIHNlbnNlIG9mIHRpbWUgKi8KKyNkZWZpbmUgVElNRVIwX0ZSRVFVRU5DWV9NSFogICh0bXJId19MT1dfRlJFUVVFTkNZX01IWiAqIDMwKQorI2RlZmluZSBUSU1FUjFfRlJFUVVFTkNZX01IWiAgKHRtckh3X0xPV19GUkVRVUVOQ1lfTUhaICogMzApCisjZGVmaW5lIFRJTUVSM19GUkVRVUVOQ1lfTUhaICAodG1ySHdfSElHSF9GUkVRVUVOQ1lfTUhaICogMzApCisjZGVmaW5lIFRJTUVSM19GUkVRVUVOQ1lfS0haICAgKHRtckh3X0hJR0hfRlJFUVVFTkNZX0haIC8gMTAwMCAqIDMwKQorI2Vsc2UKKyNkZWZpbmUgVElNRVIwX0ZSRVFVRU5DWV9NSFogIHRtckh3X0xPV19GUkVRVUVOQ1lfTUhaCisjZGVmaW5lIFRJTUVSMV9GUkVRVUVOQ1lfTUhaICB0bXJId19MT1dfRlJFUVVFTkNZX01IWgorI2RlZmluZSBUSU1FUjNfRlJFUVVFTkNZX01IWiAgdG1ySHdfSElHSF9GUkVRVUVOQ1lfTUhaCisjZGVmaW5lIFRJTUVSM19GUkVRVUVOQ1lfS0haICAodG1ySHdfSElHSF9GUkVRVUVOQ1lfSFogLyAxMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgVElDS1NfUEVSX3VTRUMgICAgIFRJTUVSMF9GUkVRVUVOQ1lfTUhaCisKKy8qCisgKiAgVGhlc2UgYXJlIHVzZWNvbmRzIE5PVCB0aWNrcy4KKyAqCisgKi8KKyNkZWZpbmUgbVNFQ18xICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwCisjZGVmaW5lIG1TRUNfNSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDUpCisjZGVmaW5lIG1TRUNfMTAgICAgICAgICAgICAgICAgICAgICAgICAgKG1TRUNfMSAqIDEwKQorI2RlZmluZSBtU0VDXzI1ICAgICAgICAgICAgICAgICAgICAgICAgIChtU0VDXzEgKiAyNSkKKyNkZWZpbmUgU0VDXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNFQ18xICogMTAwMCkKKworLyoKKyAqIEhvdyBsb25nIGlzIHRoZSB0aW1lciBpbnRlcnZhbD8KKyAqLworI2RlZmluZSBUSU1FUl9JTlRFUlZBTAkoVElDS1NfUEVSX3VTRUMgKiBtU0VDXzEwKQorI2lmIFRJTUVSX0lOVEVSVkFMID49IDB4MTAwMDAwCisjZGVmaW5lIFRJTUVSX1JFTE9BRAkoVElNRVJfSU5URVJWQUwgPj4gOCkKKyNkZWZpbmUgVElNRVJfRElWSVNPUgkoVElNRVJfQ1RSTF9ESVYyNTYpCisjZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSgyNTYgKiAoeCkgLyBUSUNLU19QRVJfdVNFQykKKyNlbGlmIFRJTUVSX0lOVEVSVkFMID49IDB4MTAwMDAKKyNkZWZpbmUgVElNRVJfUkVMT0FECShUSU1FUl9JTlRFUlZBTCA+PiA0KQkvKiBEaXZpZGUgYnkgMTYgKi8KKyNkZWZpbmUgVElNRVJfRElWSVNPUgkoVElNRVJfQ1RSTF9ESVYxNikKKyNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKDE2ICogKHgpIC8gVElDS1NfUEVSX3VTRUMpCisjZWxzZQorI2RlZmluZSBUSU1FUl9SRUxPQUQJKFRJTUVSX0lOVEVSVkFMKQorI2RlZmluZSBUSU1FUl9ESVZJU09SCShUSU1FUl9DVFJMX0RJVjEpCisjZGVmaW5lIFRJQ0tTMlVTRUNTKHgpCSgoeCkgLyBUSUNLU19QRVJfdVNFQykKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB0aW1lcl9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGN0cmw7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQl3cml0ZWwoVElNRVJfUkVMT0FELCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCisJCWN0cmwgPSBUSU1FUl9DVFJMX1BFUklPRElDOworCQljdHJsIHw9CisJCSAgICBUSU1FUl9ESVZJU09SIHwgVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfSUUgfAorCQkgICAgVElNRVJfQ1RSTF9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwkJLyogcGVyaW9kIHNldCwgYW5kIHRpbWVyIGVuYWJsZWQgaW4gJ25leHRfZXZlbnQnIGhvb2sgKi8KKwkJY3RybCA9IFRJTUVSX0NUUkxfT05FU0hPVDsKKwkJY3RybCB8PSBUSU1FUl9ESVZJU09SIHwgVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfSUU7CisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJZGVmYXVsdDoKKwkJY3RybCA9IDA7CisJfQorCisJd3JpdGVsKGN0cmwsIFRJTUVSMF9WQV9CQVNFICsgVElNRVJfQ1RSTCk7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqdW51c2VkKQoreworCXVuc2lnbmVkIGxvbmcgY3RybCA9IHJlYWRsKFRJTUVSMF9WQV9CQVNFICsgVElNRVJfQ1RSTCk7CisKKwl3cml0ZWwoZXZ0LCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCXdyaXRlbChjdHJsIHwgVElNRVJfQ1RSTF9FTkFCTEUsIFRJTUVSMF9WQV9CQVNFICsgVElNRVJfQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgdGltZXIwX2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUgPSAidGltZXIwIiwKKwkuc2hpZnQgPSAzMiwKKwkuZmVhdHVyZXMgPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNldF9tb2RlID0gdGltZXJfc2V0X21vZGUsCisJLnNldF9uZXh0X2V2ZW50ID0gdGltZXJfc2V0X25leHRfZXZlbnQsCit9OworCisvKgorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYmNtcmluZ190aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZ0aW1lcjBfY2xvY2tldmVudDsKKworCXdyaXRlbCgxLCBUSU1FUjBfVkFfQkFTRSArIFRJTUVSX0lOVENMUik7CisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYmNtcmluZ190aW1lcl9pcnEgPSB7CisJLm5hbWUgPSAiYmNtcmluZyBUaW1lciBUaWNrIiwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKKwkuaGFuZGxlciA9IGJjbXJpbmdfdGltZXJfaW50ZXJydXB0LAorfTsKKworc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMSh2b2lkKQoreworCXJldHVybiB+cmVhZGwoVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7Cit9CisKK3N0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjModm9pZCkKK3sKKwlyZXR1cm4gfnJlYWRsKFRJTUVSM19WQV9CQVNFICsgVElNRVJfVkFMVUUpOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxID0geworCS5uYW1lID0gInRpbWVyMSIsCisJLnJhdGluZyA9IDIwMCwKKwkucmVhZCA9IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjEsCisJLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuc2hpZnQgPSAyMCwKKwkuZmxhZ3MgPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfYmNtcmluZ190aW1lcjMgPSB7CisJLm5hbWUgPSAidGltZXIzIiwKKwkucmF0aW5nID0gMTAwLAorCS5yZWFkID0gYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMywKKwkubWFzayA9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdCA9IDIwLAorCS5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYmNtcmluZ19jbG9ja3NvdXJjZV9pbml0KHZvaWQpCit7CisJLyogc2V0dXAgdGltZXIxIGFzIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSAqLworCXdyaXRlbCgwLCBUSU1FUjFfVkFfQkFTRSArIFRJTUVSX0NUUkwpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjFfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjFfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKKwl3cml0ZWwoVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQywKKwkgICAgICAgVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKworCWNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxLm11bHQgPQorCSAgICBjbG9ja3NvdXJjZV9raHoybXVsdChUSU1FUjFfRlJFUVVFTkNZX01IWiAqIDEwMDAsCisJCQkJIGNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIxLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfYmNtcmluZ190aW1lcjEpOworCisJLyogc2V0dXAgdGltZXIzIGFzIGZyZWUtcnVubmluZyBjbG9ja3NvdXJjZSAqLworCXdyaXRlbCgwLCBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX0NUUkwpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX0xPQUQpOworCXdyaXRlbCgweGZmZmZmZmZmLCBUSU1FUjNfVkFfQkFTRSArIFRJTUVSX1ZBTFVFKTsKKwl3cml0ZWwoVElNRVJfQ1RSTF8zMkJJVCB8IFRJTUVSX0NUUkxfRU5BQkxFIHwgVElNRVJfQ1RSTF9QRVJJT0RJQywKKwkgICAgICAgVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKworCWNsb2Nrc291cmNlX2JjbXJpbmdfdGltZXIzLm11bHQgPQorCSAgICBjbG9ja3NvdXJjZV9raHoybXVsdChUSU1FUjNfRlJFUVVFTkNZX0tIWiwKKwkJCQkgY2xvY2tzb3VyY2VfYmNtcmluZ190aW1lcjMuc2hpZnQpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9iY21yaW5nX3RpbWVyMyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgorICovCit2b2lkIF9faW5pdCBiY21yaW5nX2luaXRfdGltZXIodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJiY21yaW5nX2luaXRfdGltZXJcbiIpOworCS8qCisJICogSW5pdGlhbGlzZSB0byBhIGtub3duIHN0YXRlIChhbGwgdGltZXJzIG9mZikKKwkgKi8KKwl3cml0ZWwoMCwgVElNRVIwX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgVElNRVIyX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKwl3cml0ZWwoMCwgVElNRVIzX1ZBX0JBU0UgKyBUSU1FUl9DVFJMKTsKKworCS8qCisJICogTWFrZSBpcnFzIGhhcHBlbiBmb3IgdGhlIHN5c3RlbSB0aW1lcgorCSAqLworCXNldHVwX2lycShJUlFfVElNRVIwLCAmYmNtcmluZ190aW1lcl9pcnEpOworCisJYmNtcmluZ19jbG9ja3NvdXJjZV9pbml0KCk7CisKKwl0aW1lcjBfY2xvY2tldmVudC5tdWx0ID0KKwkgICAgZGl2X3NjKDEwMDAwMDAsIE5TRUNfUEVSX1NFQywgdGltZXIwX2Nsb2NrZXZlbnQuc2hpZnQpOworCXRpbWVyMF9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9CisJICAgIGNsb2NrZXZlbnRfZGVsdGEybnMoMHhmZmZmZmZmZiwgJnRpbWVyMF9jbG9ja2V2ZW50KTsKKwl0aW1lcjBfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPQorCSAgICBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZiwgJnRpbWVyMF9jbG9ja2V2ZW50KTsKKworCXRpbWVyMF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmdGltZXIwX2Nsb2NrZXZlbnQpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIGJjbXJpbmdfdGltZXIgPSB7CisJLmluaXQgPSBiY21yaW5nX2luaXRfdGltZXIsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5N2JhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisvKiBQb3J0aW9ucyBjb3B5cmlnaHQgQnJvYWRjb20gMjAwOCAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0JDTVJJTkdfSAorI2RlZmluZSBfX0FTTV9BUkNIX0JDTVJJTkdfSAorCit2b2lkIF9faW5pdCBiY21yaW5nX2FtYmFfaW5pdCh2b2lkKTsKK3ZvaWQgX19pbml0IGJjbXJpbmdfbWFwX2lvKHZvaWQpOwordm9pZCBfX2luaXQgYmNtcmluZ19pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgYmNtcmluZ190aW1lcjsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YzAzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmoteSArPSBkbWFjLworb2JqLXkgKz0gdG1yLworb2JqLXkgKz0gY2hpcGMvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzM5NTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSArPSBjaGlwY0h3Lm8gY2hpcGNId19zdHIubyBjaGlwY0h3X3Jlc2V0Lm8gY2hpcGNId19pbml0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNIdy5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhNjFkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNIdy5jCkBAIC0wLDAgKzEsNzc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgY2hpcGNIdy5jCisqCisqICBAYnJpZWYgICBMb3cgbGV2ZWwgVmFyaW91cyBDSElQIGNsb2NrIGNvbnRyb2xsaW5nIHJvdXRpbmVzCisqCisqICBAbm90ZQorKgorKiAgIFRoZXNlIHJvdXRpbmVzIHByb3ZpZGUgYmFzaWMgY2xvY2sgY29udHJvbGxpbmcgZnVuY3Rpb25hbGl0eSBvbmx5LgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8Y3NwL2Vycm5vLmg+CisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorI2luY2x1ZGUgPGNzcC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfZGVmLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworI2luY2x1ZGUgPGNzcC9yZWcuaD4KKyNpbmNsdWRlIDxjc3AvZGVsYXkuaD4KKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFZQTSBhbGlnbm1lbnQgYWxnb3JpdGhtIHVzZXMgdGhpcyAqLworI2RlZmluZSBNQVhfUEhBU0VfQURKVVNUX0NPVU5UICAgICAgICAgMHhGRkZGCS8qIE1heCBudW1iZXIgb2YgdGltZXMgYWxsb3dlZCB0byBhZGp1c3QgdGhlIHBoYXNlICovCisjZGVmaW5lIE1BWF9QSEFTRV9BTElHTl9BVFRFTVBUUyAgICAgICAxMAkvKiBNYXggbnVtYmVyIG9mIGF0dGVtcHQgdG8gYWxpZ24gdGhlIHBoYXNlICovCisKKy8qIExvY2FsIGRlZmluaXRpb24gb2YgY2xvY2sgdHlwZSAqLworI2RlZmluZSBQTExfQ0xPQ0sgICAgICAgICAgICAgICAgICAgICAgMQkvKiBQTEwgQ2xvY2sgKi8KKyNkZWZpbmUgTk9OX1BMTF9DTE9DSyAgICAgICAgICAgICAgICAgIDIJLyogRGl2aWRlciBjbG9jayAqLworCitzdGF0aWMgaW50IGNoaXBjSHdfZGl2aWRlKGludCBudW0sIGludCBkZW5vbSkKKyAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBjbG9jayBmZXF1ZW5jeSBmb3IgbWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgY2xvY2tzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgY2xvY2sgZnJlcXVlbmN5CisqCisqICBAcmV0dXJuICBDb25maWd1cmVkIGNsb2NrIGZyZXF1ZW5jeSBpbiBoZXJ0egorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2hpcGNId19mcmVxIGNoaXBjSHdfZ2V0Q2xvY2tGcmVxdWVuY3koY2hpcGNId19DTE9DS19lIGNsb2NrCS8qICBbIElOIF0gQ29uZmlndXJhYmxlIGNsb2NrICovCisgICAgKSB7CisJdm9sYXRpbGUgdWludDMyX3QgKnBQTExSZWcgPSAodWludDMyX3QgKikgMHgwOworCXZvbGF0aWxlIHVpbnQzMl90ICpwQ2xvY2tDdHJsID0gKHVpbnQzMl90ICopIDB4MDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqcERlcGVuZGVudENsb2NrID0gKHVpbnQzMl90ICopIDB4MDsKKwl1aW50MzJfdCB2Y29GcmVxUGxsMUh6ID0gMDsJLyogRWZmZWN0aXZlIFZDTyBmcmVxdWVuY3kgZm9yIFBMTDEgaW4gSHogKi8KKwl1aW50MzJfdCB2Y29GcmVxUGxsMkh6ID0gMDsJLyogRWZmZWN0aXZlIFZDTyBmcmVxdWVuY3kgZm9yIFBMTDIgaW4gSHogKi8KKwl1aW50MzJfdCBkZXBlbmRlbnRDbG9ja1R5cGUgPSAwOworCXVpbnQzMl90IHZjb0h6ID0gMDsKKworCS8qIEdldCBWQ08gZnJlcXVlbmNpZXMgKi8KKwlpZiAoKHBDaGlwY0h3LT5QTExQcmVEaXZpZGVyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX01BU0spICE9IGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9JTlRFR0VSKSB7CisJCXVpbnQ2NF90IGFkanVzdEZyZXEgPSAwOworCisJCXZjb0ZyZXFQbGwxSHogPSBjaGlwY0h3X1hUQUxfRlJFUV9IeiAqCisJCSAgICBjaGlwY0h3X2RpdmlkZShjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSwgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDIpICoKKwkJICAgICgocENoaXBjSHctPlBMTFByZURpdmlkZXIgJiBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01BU0spID4+CisJCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCk7CisKKwkJLyogQWRqdXN0ZWQgZnJlcXVlbmN5IGR1ZSB0byBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2ZfU1MgKi8KKwkJYWRqdXN0RnJlcSA9ICh1aW50NjRfdCkgY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkJKHVpbnQ2NF90KSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2ZfU1MgKgorCQkJY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMiAqICh1aW50NjRfdCkgY2hpcGNId19SRUdfUExMX0RJVklERVJfRlJBQykpOworCQl2Y29GcmVxUGxsMUh6ICs9ICh1aW50MzJfdCkgYWRqdXN0RnJlcTsKKwl9IGVsc2UgeworCQl2Y29GcmVxUGxsMUh6ID0gY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkgICAgY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJCSAgICAoKHBDaGlwY0h3LT5QTExQcmVEaXZpZGVyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLKSA+PgorCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQpOworCX0KKwl2Y29GcmVxUGxsMkh6ID0KKwkgICAgY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkgY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJICAgICgocENoaXBjSHctPlBMTFByZURpdmlkZXIyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLKSA+PgorCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCk7CisKKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0REUjoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RERSQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FSTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+QVJNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VTVzoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVNXQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1ZQTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VTVzEyNToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVNXMTI1Q2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1VBUlQ6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlVBUlRDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfU0RJTzA6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNESU8wQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1NESU8xOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5TRElPMUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TUEk6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNQSUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FVE06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVUTUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19VU0I6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlVTQkNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19MQ0Q6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkxDRENsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19BUE06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkFQTUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19CVVM6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkFDTEtDbG9jazsKKwkJcERlcGVuZGVudENsb2NrID0gJnBDaGlwY0h3LT5BUk1DbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXBlbmRlbnRDbG9ja1R5cGUgPSBQTExfQ0xPQ0s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19PVFA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPk9UUENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMkNDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1JUQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5SVEJVU0Nsb2NrOworCQlwRGVwZW5kZW50Q2xvY2sgPSAmcENoaXBjSHctPkFDTEtDbG9jazsKKwkJZGVwZW5kZW50Q2xvY2tUeXBlID0gTk9OX1BMTF9DTE9DSzsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FQTTEwMDoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+QVBNMTAwQ2xvY2s7CisJCXBEZXBlbmRlbnRDbG9jayA9ICZwQ2hpcGNIdy0+QVBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJZGVwZW5kZW50Q2xvY2tUeXBlID0gUExMX0NMT0NLOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVFNDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5UU0NDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0xFRDoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+TEVEQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19JMlMxOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMlMxQ2xvY2s7CisJCWJyZWFrOworCX0KKworCWlmIChwUExMUmVnKSB7CisJCS8qIE9idGFpbiBQTEwgY2xvY2sgZnJlcXVlbmN5ICovCisJCWlmICgqcFBMTFJlZyAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19CWVBBU1NfU0VMRUNUKSB7CisJCQkvKiBSZXR1cm4gY3J5c3RhbCBjbG9jayBmcmVxdWVuY3kgd2hlbiBieXBhc3NlZCAqLworCQkJcmV0dXJuIGNoaXBjSHdfWFRBTF9GUkVRX0h6OworCQl9IGVsc2UgaWYgKGNsb2NrID09IGNoaXBjSHdfQ0xPQ0tfRERSKSB7CisJCQkvKiBERFIgZnJlcXVlbmN5IGlzIGNvbmZpZ3VyZWQgaW4gUExMRGl2aWRlciByZWdpc3RlciAqLworCQkJcmV0dXJuIGNoaXBjSHdfZGl2aWRlICh2Y29IeiwgKCgocENoaXBjSHctPlBMTERpdmlkZXIgJiAweEZGMDAwMDAwKSA+PiAyNCkgPyAoKHBDaGlwY0h3LT5QTExEaXZpZGVyICYgMHhGRjAwMDAwMCkgPj4gMjQpIDogMjU2KSk7CisJCX0gZWxzZSB7CisJCQkvKiBGcm9tIGNoaXAgcmV2aXNpb24gbnVtYmVyIEIwLCBMQ0QgY2xvY2sgaXMgaW50ZXJuYWxseSBkaXZpZGVkIGJ5IDIgKi8KKwkJCWlmICgocFBMTFJlZyA9PSAmcENoaXBjSHctPkxDRENsb2NrKSAmJiAoY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIoKSAhPSBjaGlwY0h3X1JFVl9OVU1CRVJfQTApKSB7CisJCQkJdmNvSHogPj49IDE7CisJCQl9CisJCQkvKiBPYnRhaW4gUExMIGNsb2NrIGZyZXF1ZW5jeSB1c2luZyBWQ08gZGl2aWRlcnMgKi8KKwkJCXJldHVybiBjaGlwY0h3X2RpdmlkZSh2Y29IeiwgKCgqcFBMTFJlZyAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spID8gKCpwUExMUmVnICYgY2hpcGNId19SRUdfUExMX0NMT0NLX01ESVZfTUFTSykgOiAyNTYpKTsKKwkJfQorCX0gZWxzZSBpZiAocENsb2NrQ3RybCkgeworCQkvKiBPYnRhaW4gZGl2aWRlciBjbG9jayBmcmVxdWVuY3kgKi8KKwkJdWludDMyX3QgZGl2OworCQl1aW50MzJfdCBmcmVxID0gMDsKKworCQlpZiAoKnBDbG9ja0N0cmwgJiBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCkgeworCQkJLyogUmV0dXJuIGNyeXN0YWwgY2xvY2sgZnJlcXVlbmN5IHdoZW4gYnlwYXNzZWQgKi8KKwkJCXJldHVybiBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJfSBlbHNlIGlmIChwRGVwZW5kZW50Q2xvY2spIHsKKwkJCS8qIElkZW50aWZ5IHRoZSBkZXBlbmRlbnQgY2xvY2sgZnJlcXVlbmN5ICovCisJCQlzd2l0Y2ggKGRlcGVuZGVudENsb2NrVHlwZSkgeworCQkJY2FzZSBQTExfQ0xPQ0s6CisJCQkJaWYgKCpwRGVwZW5kZW50Q2xvY2sgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfQllQQVNTX1NFTEVDVCkgeworCQkJCQkvKiBVc2UgY3J5c3RhbCBjbG9jayBmcmVxdWVuY3kgd2hlbiBkZXBlbmRlbnQgUExMIGNsb2NrIGlzIGJ5cGFzc2VkICovCisJCQkJCWZyZXEgPSBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBPYnRhaW4gUExMIGNsb2NrIGZyZXF1ZW5jeSB1c2luZyBWQ08gZGl2aWRlcnMgKi8KKwkJCQkJZGl2ID0gKnBEZXBlbmRlbnRDbG9jayAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0s7CisJCQkJCWZyZXEgPSBkaXYgPyBjaGlwY0h3X2RpdmlkZSh2Y29IeiwgZGl2KSA6IDA7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBOT05fUExMX0NMT0NLOgorCQkJCWlmIChwRGVwZW5kZW50Q2xvY2sgPT0gKHVpbnQzMl90ICopICZwQ2hpcGNIdy0+QUNMS0Nsb2NrKSB7CisJCQkJCWZyZXEgPSBjaGlwY0h3X2dldENsb2NrRnJlcXVlbmN5IChjaGlwY0h3X0NMT0NLX0JVUyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKCpwRGVwZW5kZW50Q2xvY2sgJiBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCkgeworCQkJCQkJLyogVXNlIGNyeXN0YWwgY2xvY2sgZnJlcXVlbmN5IHdoZW4gZGVwZW5kZW50IGRpdmlkZXIgY2xvY2sgaXMgYnlwYXNzZWQgKi8KKwkJCQkJCWZyZXEgPSBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIE9idGFpbiBkaXZpZGVyIGNsb2NrIGZyZXF1ZW5jeSB1c2luZyBYVEFMIGRpdmlkZXJzICovCisJCQkJCQlkaXYgPSAqcERlcGVuZGVudENsb2NrICYgY2hpcGNId19SRUdfRElWX0NMT0NLX0RJVl9NQVNLOworCQkJCQkJZnJlcSA9IGNoaXBjSHdfZGl2aWRlIChjaGlwY0h3X1hUQUxfRlJFUV9IeiwgKGRpdiA/IGRpdiA6IDI1NikpOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRGVwZW5kZW50IG9uIGNyeXN0YWwgY2xvY2sgKi8KKwkJCWZyZXEgPSBjaGlwY0h3X1hUQUxfRlJFUV9IejsKKwkJfQorCisJCWRpdiA9ICpwQ2xvY2tDdHJsICYgY2hpcGNId19SRUdfRElWX0NMT0NLX0RJVl9NQVNLOworCQlyZXR1cm4gY2hpcGNId19kaXZpZGUoZnJlcSwgKGRpdiA/IGRpdiA6IDI1NikpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBjbG9jayBmZXF1ZW5jeSBmb3IgbWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgY2xvY2tzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgY2xvY2sgZnJlcXVlbmN5CisqCisqICBAcmV0dXJuICBDb25maWd1cmVkIGNsb2NrIGZyZXF1ZW5jeSBpbiBIegorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2hpcGNId19mcmVxIGNoaXBjSHdfc2V0Q2xvY2tGcmVxdWVuY3koY2hpcGNId19DTE9DS19lIGNsb2NrLAkvKiAgWyBJTiBdIENvbmZpZ3VyYWJsZSBjbG9jayAqLworCQkJCSAgICAgICB1aW50MzJfdCBmcmVxCS8qICBbIElOIF0gQ2xvY2sgZnJlcXVlbmN5IGluIEh6ICovCisgICAgKSB7CisJdm9sYXRpbGUgdWludDMyX3QgKnBQTExSZWcgPSAodWludDMyX3QgKikgMHgwOworCXZvbGF0aWxlIHVpbnQzMl90ICpwQ2xvY2tDdHJsID0gKHVpbnQzMl90ICopIDB4MDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqcERlcGVuZGVudENsb2NrID0gKHVpbnQzMl90ICopIDB4MDsKKwl1aW50MzJfdCB2Y29GcmVxUGxsMUh6ID0gMDsJLyogRWZmZWN0aXZlIFZDTyBmcmVxdWVuY3kgZm9yIFBMTDEgaW4gSHogKi8KKwl1aW50MzJfdCBkZXNWY29GcmVxUGxsMUh6ID0gMDsJLyogRGVzaXJlZCBWQ08gZnJlcXVlbmN5IGZvciBQTEwxIGluIEh6ICovCisJdWludDMyX3QgdmNvRnJlcVBsbDJIeiA9IDA7CS8qIEVmZmVjdGl2ZSBWQ08gZnJlcXVlbmN5IGZvciBQTEwyIGluIEh6ICovCisJdWludDMyX3QgZGVwZW5kZW50Q2xvY2tUeXBlID0gMDsKKwl1aW50MzJfdCB2Y29IeiA9IDA7CisJdWludDMyX3QgZGVzVmNvSHogPSAwOworCisJLyogR2V0IFZDTyBmcmVxdWVuY2llcyAqLworCWlmICgocENoaXBjSHctPlBMTFByZURpdmlkZXIgJiBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfTUFTSykgIT0gY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX0lOVEVHRVIpIHsKKwkJdWludDY0X3QgYWRqdXN0RnJlcSA9IDA7CisKKwkJdmNvRnJlcVBsbDFIeiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6ICoKKwkJICAgIGNoaXBjSHdfZGl2aWRlKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxLCBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMikgKgorCQkgICAgKChwQ2hpcGNIdy0+UExMUHJlRGl2aWRlciAmIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTUFTSykgPj4KKwkJICAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX1NISUZUKTsKKworCQkvKiBBZGp1c3RlZCBmcmVxdWVuY3kgZHVlIHRvIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX05ESVZfZl9TUyAqLworCQlhZGp1c3RGcmVxID0gKHVpbnQ2NF90KSBjaGlwY0h3X1hUQUxfRlJFUV9IeiAqCisJCQkodWludDY0X3QpIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX05ESVZfZl9TUyAqCisJCQljaGlwY0h3X2RpdmlkZShjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSwgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyICogKHVpbnQ2NF90KSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9GUkFDKSk7CisJCXZjb0ZyZXFQbGwxSHogKz0gKHVpbnQzMl90KSBhZGp1c3RGcmVxOworCisJCS8qIERlc2lyZWQgVkNPIGZyZXF1ZW5jeSAqLworCQlkZXNWY29GcmVxUGxsMUh6ID0gY2hpcGNId19YVEFMX0ZSRVFfSHogKgorCQkgICAgY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJCSAgICAoKChwQ2hpcGNIdy0+UExMUHJlRGl2aWRlciAmIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTUFTSykgPj4KKwkJICAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCkgKyAxKTsKKwl9IGVsc2UgeworCQl2Y29GcmVxUGxsMUh6ID0gZGVzVmNvRnJlcVBsbDFIeiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6ICoKKwkJICAgIGNoaXBjSHdfZGl2aWRlKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxLCBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMikgKgorCQkgICAgKChwQ2hpcGNIdy0+UExMUHJlRGl2aWRlciAmIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTUFTSykgPj4KKwkJICAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX1NISUZUKTsKKwl9CisJdmNvRnJlcVBsbDJIeiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6ICogY2hpcGNId19kaXZpZGUoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEsIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyKSAqCisJICAgICgocENoaXBjSHctPlBMTFByZURpdmlkZXIyICYgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLKSA+PgorCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9TSElGVCk7CisKKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0REUjoKKwkJLyogQ29uZmlndXJlIHRoZSBERFJfY3RybDpCVVMgcmF0aW8gc2V0dGluZ3MgKi8KKwkJeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJLyogRHZpZGUgRERSX3BoeSBieSB0d28gdG8gb2J0YWluIEREUl9jdHJsIGNsb2NrICovCisJCQlwQ2hpcGNIdy0+RERSQ2xvY2sgPSAocENoaXBjSHctPkREUkNsb2NrICYgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19UT19CVVNfUkFUSU9fTUFTSykgfCAoKCgoZnJlcSAvIDIpIC8gY2hpcGNId19nZXRDbG9ja0ZyZXF1ZW5jeShjaGlwY0h3X0NMT0NLX0JVUykpIC0gMSkKKwkJCQk8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfVE9fQlVTX1JBVElPX1NISUZUKTsKKwkJCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKKwkJfQorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5ERFJDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19BUk06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkFSTUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWRlc1Zjb0h6ID0gZGVzVmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VTVzoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVNXQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJZGVzVmNvSHogPSBkZXNWY29GcmVxUGxsMUh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVlBNOgorCQkvKiBDb25maWd1cmUgdGhlIFZQTTpCVVMgcmF0aW8gc2V0dGluZ3MgKi8KKwkJeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJcENoaXBjSHctPlZQTUNsb2NrID0gKHBDaGlwY0h3LT5WUE1DbG9jayAmIH5jaGlwY0h3X1JFR19QTExfQ0xPQ0tfVE9fQlVTX1JBVElPX01BU0spIHwgKChjaGlwY0h3X2RpdmlkZSAoZnJlcSwgY2hpcGNId19nZXRDbG9ja0ZyZXF1ZW5jeShjaGlwY0h3X0NMT0NLX0JVUykpIC0gMSkKKwkJCQk8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfVE9fQlVTX1JBVElPX1NISUZUKTsKKwkJCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKKwkJfQorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5WUE1DbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FU1cxMjU6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVTVzEyNUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWRlc1Zjb0h6ID0gZGVzVmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1VBUlQ6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlVBUlRDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TRElPMDoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U0RJTzBDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TRElPMToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U0RJTzFDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMUh6OworCQlkZXNWY29IeiA9IGRlc1Zjb0ZyZXFQbGwxSHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TUEk6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNQSUNsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwxSHo7CisJCWRlc1Zjb0h6ID0gZGVzVmNvRnJlcVBsbDFIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0VUTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RVRNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJZGVzVmNvSHogPSBkZXNWY29GcmVxUGxsMUh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVVNCOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5VU0JDbG9jazsKKwkJdmNvSHogPSB2Y29GcmVxUGxsMkh6OworCQlkZXNWY29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19MQ0Q6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkxDRENsb2NrOworCQl2Y29IeiA9IHZjb0ZyZXFQbGwySHo7CisJCWRlc1Zjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FQTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+QVBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJZGVzVmNvSHogPSB2Y29GcmVxUGxsMkh6OworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5BQ0xLQ2xvY2s7CisJCXBEZXBlbmRlbnRDbG9jayA9ICZwQ2hpcGNIdy0+QVJNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDFIejsKKwkJZGVzVmNvSHogPSBkZXNWY29GcmVxUGxsMUh6OworCQlkZXBlbmRlbnRDbG9ja1R5cGUgPSBQTExfQ0xPQ0s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19PVFA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPk9UUENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMkNDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1JUQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5SVEJVU0Nsb2NrOworCQlwRGVwZW5kZW50Q2xvY2sgPSAmcENoaXBjSHctPkFDTEtDbG9jazsKKwkJZGVwZW5kZW50Q2xvY2tUeXBlID0gTk9OX1BMTF9DTE9DSzsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0FQTTEwMDoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+QVBNMTAwQ2xvY2s7CisJCXBEZXBlbmRlbnRDbG9jayA9ICZwQ2hpcGNIdy0+QVBNQ2xvY2s7CisJCXZjb0h6ID0gdmNvRnJlcVBsbDJIejsKKwkJZGVzVmNvSHogPSB2Y29GcmVxUGxsMkh6OworCQlkZXBlbmRlbnRDbG9ja1R5cGUgPSBQTExfQ0xPQ0s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19UU0M6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPlRTQ0Nsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfTEVEOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5MRURDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzE6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzFDbG9jazsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBQTExSZWcpIHsKKwkJLyogU2VsZWN0IFhUQUwgYXMgYnlwYXNzIHNvdXJjZSAqLworCQlyZWczMl9tb2RpZnlfYW5kKHBQTExSZWcsIH5jaGlwY0h3X1JFR19QTExfQ0xPQ0tfU09VUkNFX0dQSU8pOworCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywgY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QpOworCQkvKiBGb3IgRERSIHNldHRpbmdzIHVzZSBvbmx5IHRoZSBQTEwgZGl2aWRlciBjbG9jayAqLworCQlpZiAocFBMTFJlZyA9PSAmcENoaXBjSHctPkREUkNsb2NrKSB7CisJCQkvKiBTZXQgTTFESVYgZm9yIFBMTDEsIHdoaWNoIGNvbnRyb2xzIHRoZSBERFIgY2xvY2sgKi8KKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+UExMRGl2aWRlciwgKHBDaGlwY0h3LT5QTExEaXZpZGVyICYgMHgwMEZGRkZGRikgfCAoKGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX01ESVYgKGRlc1Zjb0h6LCBmcmVxKSkgPDwgMjQpKTsKKwkJCS8qIENhbGN1bGF0ZSBleHBlY3RlZCBmcmVxdWVuY3kgKi8KKwkJCWZyZXEgPSBjaGlwY0h3X2RpdmlkZSh2Y29IeiwgKCgocENoaXBjSHctPlBMTERpdmlkZXIgJiAweEZGMDAwMDAwKSA+PiAyNCkgPyAoKHBDaGlwY0h3LT5QTExEaXZpZGVyICYgMHhGRjAwMDAwMCkgPj4gMjQpIDogMjU2KSk7CisJCX0gZWxzZSB7CisJCQkvKiBGcm9tIGNoaXAgcmV2aXNpb24gbnVtYmVyIEIwLCBMQ0QgY2xvY2sgaXMgaW50ZXJuYWxseSBkaXZpZGVkIGJ5IDIgKi8KKwkJCWlmICgocFBMTFJlZyA9PSAmcENoaXBjSHctPkxDRENsb2NrKSAmJiAoY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIoKSAhPSBjaGlwY0h3X1JFVl9OVU1CRVJfQTApKSB7CisJCQkJZGVzVmNvSHogPj49IDE7CisJCQkJdmNvSHogPj49IDE7CisJCQl9CisJCQkvKiBTZXQgTURJViB0byBjaGFuZ2UgdGhlIGZyZXF1ZW5jeSAqLworCQkJcmVnMzJfbW9kaWZ5X2FuZChwUExMUmVnLCB+KGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spKTsKKwkJCXJlZzMyX21vZGlmeV9vcihwUExMUmVnLCBjaGlwY0h3X1JFR19QTExfRElWSURFUl9NRElWKGRlc1Zjb0h6LCBmcmVxKSk7CisJCQkvKiBDYWxjdWxhdGUgZXhwZWN0ZWQgZnJlcXVlbmN5ICovCisJCQlmcmVxID0gY2hpcGNId19kaXZpZGUodmNvSHosICgoKihwUExMUmVnKSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spID8gKCoocFBMTFJlZykgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfTURJVl9NQVNLKSA6IDI1NikpOworCQl9CisJCS8qIFdhaXQgZm9yIGZvciBhdGxlYXN0IDIwMG5zIGFzIHBlciB0aGUgcHJvdG9jb2wgdG8gY2hhbmdlIGZyZXF1ZW5jeSAqLworCQl1ZGVsYXkoMSk7CisJCS8qIERvIG5vdCBieXBhc3MgKi8KKwkJcmVnMzJfbW9kaWZ5X2FuZChwUExMUmVnLCB+Y2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QpOworCQkvKiBSZXR1cm4gdGhlIGNvbmZpZ3VyZWQgZnJlcXVlbmN5ICovCisJCXJldHVybiBmcmVxOworCX0gZWxzZSBpZiAocENsb2NrQ3RybCkgeworCQl1aW50MzJfdCBkaXZpZGVyID0gMDsKKworCQkvKiBEaXZpZGVyIGNsb2NrIHNob3VsZCBub3QgYmUgYnlwYXNzZWQgICovCisJCXJlZzMyX21vZGlmeV9hbmQocENsb2NrQ3RybCwKKwkJCQkgfmNoaXBjSHdfUkVHX0RJVl9DTE9DS19CWVBBU1NfU0VMRUNUKTsKKworCQkvKiBJZGVudGlmeSB0aGUgY2xvY2sgc291cmNlICovCisJCWlmIChwRGVwZW5kZW50Q2xvY2spIHsKKwkJCXN3aXRjaCAoZGVwZW5kZW50Q2xvY2tUeXBlKSB7CisJCQljYXNlIFBMTF9DTE9DSzoKKwkJCQlkaXZpZGVyID0gY2hpcGNId19kaXZpZGUoY2hpcGNId19kaXZpZGUgKGRlc1Zjb0h6LCAoKnBEZXBlbmRlbnRDbG9jayAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19NRElWX01BU0spKSwgZnJlcSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5PTl9QTExfQ0xPQ0s6CisJCQkJeworCQkJCQl1aW50MzJfdCBzb3VyY2VDbG9jayA9IDA7CisKKwkJCQkJaWYgKHBEZXBlbmRlbnRDbG9jayA9PSAodWludDMyX3QgKikgJnBDaGlwY0h3LT5BQ0xLQ2xvY2spIHsKKwkJCQkJCXNvdXJjZUNsb2NrID0gY2hpcGNId19nZXRDbG9ja0ZyZXF1ZW5jeSAoY2hpcGNId19DTE9DS19CVVMpOworCQkJCQl9IGVsc2UgeworCQkJCQkJdWludDMyX3QgZGl2ID0gKnBEZXBlbmRlbnRDbG9jayAmIGNoaXBjSHdfUkVHX0RJVl9DTE9DS19ESVZfTUFTSzsKKwkJCQkJCXNvdXJjZUNsb2NrID0gY2hpcGNId19kaXZpZGUgKGNoaXBjSHdfWFRBTF9GUkVRX0h6LCAoKGRpdikgPyBkaXYgOiAyNTYpKTsKKwkJCQkJfQorCQkJCQlkaXZpZGVyID0gY2hpcGNId19kaXZpZGUoc291cmNlQ2xvY2ssIGZyZXEpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRpdmlkZXIgPSBjaGlwY0h3X2RpdmlkZShjaGlwY0h3X1hUQUxfRlJFUV9IeiwgZnJlcSk7CisJCX0KKworCQlpZiAoZGl2aWRlcikgeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJLyogU2V0IHRoZSBkaXZpZGVyIHRvIG9idGFpbiB0aGUgcmVxdWlyZWQgZnJlcXVlbmN5ICovCisJCQkqcENsb2NrQ3RybCA9ICgqcENsb2NrQ3RybCAmICh+Y2hpcGNId19SRUdfRElWX0NMT0NLX0RJVl9NQVNLKSkgfCAoKChkaXZpZGVyID4gMjU2KSA/IGNoaXBjSHdfUkVHX0RJVl9DTE9DS19ESVZfMjU2IDogZGl2aWRlcikgJiBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfRElWX01BU0spOworCQkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCQkJcmV0dXJuIGZyZXE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChjaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBWUE0gY2xvY2sgaW4gc3luYyB3aXRoIEJVUyBjbG9jayBmb3IgQ2hpcCBSZXYgI0EwCisqCisqICBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIHBoYXNlIGFkanVzdG1lbnQgYmV0d2VlbiBWUE0gYW5kIEJVUyBjbG9jaworKgorKiAgQHJldHVybiA+PSAwIDogT24gc3VjY2VzcyAoIyBvZiBhZGp1c3RtZW50IHJlcXVpcmVkKQorKiAgICAgICAgICAgIC0xIDogT24gZmFpbHVyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCB2cG1QaGFzZUFsaWduQTAodm9pZCkKK3sKKwl1aW50MzJfdCBwaGFzZUNvbnRyb2w7CisJdWludDMyX3QgcGhhc2VWYWx1ZTsKKwl1aW50MzJfdCBwcmV2UGhhc2VDb21wOworCWludCBpdGVyID0gMDsKKwlpbnQgYWRqdXN0Q291bnQgPSAwOworCWludCBjb3VudCA9IDA7CisKKwlmb3IgKGl0ZXIgPSAwOyAoaXRlciA8IE1BWF9QSEFTRV9BTElHTl9BVFRFTVBUUykgJiYgKGFkanVzdENvdW50IDwgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCk7IGl0ZXIrKykgeworCQlwaGFzZUNvbnRyb2wgPSAocENoaXBjSHctPlZQTUNsb2NrICYgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfTUFTSykgPj4gY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQ7CisJCXBoYXNlVmFsdWUgPSAwOworCQlwcmV2UGhhc2VDb21wID0gMDsKKworCQkvKiBTdGVwIDE6IExvb2sgZm9yIGZhbGxpbmcgUEhfQ09NUCB0cmFuc2l0aW9uICovCisKKwkJLyogUmVhZCB0aGUgY29udGVudHMgb2YgVlBNIENsb2NrIHJlc2dpc3RlciAqLworCQlwaGFzZVZhbHVlID0gcENoaXBjSHctPlZQTUNsb2NrOworCQlkbyB7CisJCQkvKiBTdG9yZSBwcmV2aW91cyB2YWx1ZSBvZiBwaGFzZSBjb21wYXJhdG9yICovCisJCQlwcmV2UGhhc2VDb21wID0gcGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QOworCQkJLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBQSF9DVFJMLiAqLworCQkJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5WUE1DbG9jaywgKHBDaGlwY0h3LT5WUE1DbG9jayAmICh+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfTUFTSykpIHwgKHBoYXNlQ29udHJvbCA8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9TSElGVCkpOworCQkJLyogV2FpdCBhdGxlYXN0IDIwIG5zICovCisJCQl1ZGVsYXkoMSk7CisJCQkvKiBUb2dnbGUgdGhlIExPQURfQ0ggYWZ0ZXIgcGhhc2UgY29udHJvbCBpcyB3cml0dGVuLiAqLworCQkJcENoaXBjSHctPlZQTUNsb2NrIF49IGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9VUERBVEVfRU5BQkxFOworCQkJLyogUmVhZCB0aGUgY29udGVudHMgb2YgIFZQTSBDbG9jayByZXNnaXN0ZXIuICovCisJCQlwaGFzZVZhbHVlID0gcENoaXBjSHctPlZQTUNsb2NrOworCisJCQlpZiAoKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkgPT0gMHgwKSB7CisJCQkJcGhhc2VDb250cm9sID0gKDB4M0YgJiAocGhhc2VDb250cm9sIC0gMSkpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJbmNyZW1lbnQgdG8gdGhlIFBoYXNlIGNvdW50IHZhbHVlIGZvciBuZXh0IHdyaXRlLCBpZiBQaGFzZSBpcyBub3Qgc3RhYmxlLiAqLworCQkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCArIDEpKTsKKwkJCX0KKwkJCS8qIENvdW50IG51bWJlciBvZiBhZGp1c3RtZW50IG1hZGUgKi8KKwkJCWFkanVzdENvdW50Kys7CisJCX0gd2hpbGUgKCgocHJldlBoYXNlQ29tcCA9PSAocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSkgfHwJLyogTG9vayBmb3IgYSB0cmFuc2l0aW9uICovCisJCQkgICgocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSAhPSAweDApKSAmJgkvKiBMb29rIGZvciBhIGZhbGxpbmcgZWRnZSAqLworCQkJIChhZGp1c3RDb3VudCA8IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpCS8qIERvIG5vdCBleGNlZWQgdGhlIGxpbWl0IHdoaWxlIHRyeWluZyAqLworCQkgICAgKTsKKworCQlpZiAoYWRqdXN0Q291bnQgPj0gTUFYX1BIQVNFX0FESlVTVF9DT1VOVCkgeworCQkJLyogRmFpbGVkIHRvIGFsaWduIFZQTSBwaGFzZSBhZnRlciBNQVhfUEhBU0VfQURKVVNUX0NPVU5UIHRyaWVzICovCisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBTdGVwIDI6IEtlZXAgbW92aW5nIGZvcndhcmQgdG8gbWFrZSBzdXJlIGZhbGxpbmcgUEhfQ09NUCB0cmFuc2l0aW9uIHdhcyB2YWxpZCAqLworCisJCWZvciAoY291bnQgPSAwOyAoY291bnQgPCA1KSAmJiAoKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkgPT0gMCk7IGNvdW50KyspIHsKKwkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCArIDEpKTsKKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+VlBNQ2xvY2ssIChwQ2hpcGNIdy0+VlBNQ2xvY2sgJiAofmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spKSB8IChwaGFzZUNvbnRyb2wgPDwgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpKTsKKwkJCS8qIFdhaXQgYXRsZWFzdCAyMCBucyAqLworCQkJdWRlbGF5KDEpOworCQkJLyogVG9nZ2xlIHRoZSBMT0FEX0NIIGFmdGVyIHBoYXNlIGNvbnRyb2wgaXMgd3JpdHRlbi4gKi8KKwkJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAqLworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGNvdW50ICE9IDUpIHsKKwkJCS8qIERldGVjdGVkIGZhbHNlIHRyYW5zaXRpb24gKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3RlcCAzOiBLZWVwIG1vdmluZyBiYWNrd2FyZCB0byBtYWtlIHN1cmUgZmFsbGluZyBQSF9DT01QIHRyYW5zaXRpb24gd2FzIHN0YWJsZSAqLworCisJCWZvciAoY291bnQgPSAwOyAoY291bnQgPCAzKSAmJiAoKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkgPT0gMCk7IGNvdW50KyspIHsKKwkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCAtIDEpKTsKKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+VlBNQ2xvY2ssIChwQ2hpcGNIdy0+VlBNQ2xvY2sgJiAofmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spKSB8IChwaGFzZUNvbnRyb2wgPDwgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpKTsKKwkJCS8qIFdhaXQgYXRsZWFzdCAyMCBucyAqLworCQkJdWRlbGF5KDEpOworCQkJLyogVG9nZ2xlIHRoZSBMT0FEX0NIIGFmdGVyIHBoYXNlIGNvbnRyb2wgaXMgd3JpdHRlbi4gKi8KKwkJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAqLworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGNvdW50ICE9IDMpIHsKKwkJCS8qIERldGVjdGVkIG5vaXN5IHRyYW5zaXRpb24gKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3RlcCA0OiBLZWVwIG1vdmluZyBiYWNrd2FyZCBiZWZvcmUgdGhlIG9yaWdpbmFsIHRyYW5zaXRpb24gdG9vayBwbGFjZS4gKi8KKworCQlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgNSk7IGNvdW50KyspIHsKKwkJCXBoYXNlQ29udHJvbCA9ICgweDNGICYgKHBoYXNlQ29udHJvbCAtIDEpKTsKKwkJCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+VlBNQ2xvY2ssIChwQ2hpcGNIdy0+VlBNQ2xvY2sgJiAofmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spKSB8IChwaGFzZUNvbnRyb2wgPDwgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpKTsKKwkJCS8qIFdhaXQgYXRsZWFzdCAyMCBucyAqLworCQkJdWRlbGF5KDEpOworCQkJLyogVG9nZ2xlIHRoZSBMT0FEX0NIIGFmdGVyIHBoYXNlIGNvbnRyb2wgaXMgd3JpdHRlbi4gKi8KKwkJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAqLworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKChwaGFzZVZhbHVlICYgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTVApID09IDApIHsKKwkJCS8qIERldGVjdGVkIGZhbHNlIHRyYW5zaXRpb24gKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3RlcCA1OiBSZSBkaXNjb3ZlciB0aGUgdmFsaWQgdHJhbnNpdGlvbiAqLworCisJCWRvIHsKKwkJCS8qIFN0b3JlIHByZXZpb3VzIHZhbHVlIG9mIHBoYXNlIGNvbXBhcmF0b3IgKi8KKwkJCXByZXZQaGFzZUNvbXAgPSBwaGFzZVZhbHVlOworCQkJLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBQSF9DVFJMLiAqLworCQkJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5WUE1DbG9jaywgKHBDaGlwY0h3LT5WUE1DbG9jayAmICh+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfTUFTSykpIHwgKHBoYXNlQ29udHJvbCA8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9TSElGVCkpOworCQkJLyogV2FpdCBhdGxlYXN0IDIwIG5zICovCisJCQl1ZGVsYXkoMSk7CisJCQkvKiBUb2dnbGUgdGhlIExPQURfQ0ggYWZ0ZXIgcGhhc2UgY29udHJvbCBpcyB3cml0dGVuLiAqLworCQkJcENoaXBjSHctPlZQTUNsb2NrIF49CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX1VQREFURV9FTkFCTEU7CisJCQkvKiBSZWFkIHRoZSBjb250ZW50cyBvZiAgVlBNIENsb2NrIHJlc2dpc3Rlci4gKi8KKwkJCXBoYXNlVmFsdWUgPSBwQ2hpcGNIdy0+VlBNQ2xvY2s7CisKKwkJCWlmICgocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSA9PSAweDApIHsKKwkJCQlwaGFzZUNvbnRyb2wgPSAoMHgzRiAmIChwaGFzZUNvbnRyb2wgLSAxKSk7CisJCQl9IGVsc2UgeworCQkJCS8qIEluY3JlbWVudCB0byB0aGUgUGhhc2UgY291bnQgdmFsdWUgZm9yIG5leHQgd3JpdGUsIGlmIFBoYXNlIGlzIG5vdCBzdGFibGUuICovCisJCQkJcGhhc2VDb250cm9sID0gKDB4M0YgJiAocGhhc2VDb250cm9sICsgMSkpOworCQkJfQorCisJCQkvKiBDb3VudCBudW1iZXIgb2YgYWRqdXN0bWVudCBtYWRlICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9IHdoaWxlICgoKHByZXZQaGFzZUNvbXAgPT0gKHBoYXNlVmFsdWUgJiBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCkpIHx8ICgocGhhc2VWYWx1ZSAmIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT01QKSAhPSAweDApKSAmJiAoYWRqdXN0Q291bnQgPCBNQVhfUEhBU0VfQURKVVNUX0NPVU5UKSk7CisKKwkJaWYgKGFkanVzdENvdW50ID49IE1BWF9QSEFTRV9BREpVU1RfQ09VTlQpIHsKKwkJCS8qIEZhaWxlZCB0byBhbGlnbiBWUE0gcGhhc2UgYWZ0ZXIgTUFYX1BIQVNFX0FESlVTVF9DT1VOVCB0cmllcyAgKi8KKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZhbGlkIHBoYXNlIG11c3QgaGF2ZSBkZXRlY3RlZCAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBGb3IgVlBNIFBoYXNlIHNob3VsZCBiZSBwZXJmZWN0bHkgYWxpZ25lZC4gKi8KKwlwaGFzZUNvbnRyb2wgPSAoKChwQ2hpcGNIdy0+VlBNQ2xvY2sgPj4gY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX0NPTlRST0xfU0hJRlQpIC0gMSkgJiAweDNGKTsKKwl7CisJCVJFR19MT0NBTF9JUlFfU0FWRTsKKworCQlwQ2hpcGNIdy0+VlBNQ2xvY2sgPSAocENoaXBjSHctPlZQTUNsb2NrICYgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX01BU0spIHwgKHBoYXNlQ29udHJvbCA8PCBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9TSElGVCk7CisJCS8qIExvYWQgbmV3IHBoYXNlIHZhbHVlICovCisJCXBDaGlwY0h3LT5WUE1DbG9jayBePSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfVVBEQVRFX0VOQUJMRTsKKworCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJfQorCS8qIFJldHVybiB0aGUgc3RhdHVzICovCisJcmV0dXJuIChpbnQpYWRqdXN0Q291bnQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIGNsb2NrIGluIHN5bmMgd2l0aCBCVVMgY2xvY2sKKyoKKyogIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgcGhhc2UgYWRqdXN0bWVudCBiZXR3ZWVuIFZQTSBhbmQgQlVTIGNsb2NrCisqCisqICBAcmV0dXJuID49IDAgOiBPbiBzdWNjZXNzICgjIG9mIGFkanVzdG1lbnQgcmVxdWlyZWQpCisqICAgICAgICAgICAgLTEgOiBPbiBmYWlsdXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgY2hpcGNId192cG1QaGFzZUFsaWduKHZvaWQpCit7CisKKwlpZiAoY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIoKSA9PSBjaGlwY0h3X1JFVl9OVU1CRVJfQTApIHsKKwkJcmV0dXJuIHZwbVBoYXNlQWxpZ25BMCgpOworCX0gZWxzZSB7CisJCXVpbnQzMl90IHBoYXNlQ29udHJvbCA9IGNoaXBjSHdfZ2V0VnBtUGhhc2VDb250cm9sKCk7CisJCXVpbnQzMl90IHBoYXNlVmFsdWUgPSAwOworCQlpbnQgYWRqdXN0Q291bnQgPSAwOworCisJCS8qIERpc2FibGUgVlBNIGFjY2VzcyAqLworCQlwQ2hpcGNIdy0+U3BhcmUxICY9IH5jaGlwY0h3X1JFR19TUEFSRTFfVlBNX0JVU19BQ0NFU1NfRU5BQkxFOworCQkvKiBEaXNhYmxlIEhXIFZQTSBwaGFzZSBhbGlnbm1lbnQgICovCisJCWNoaXBjSHdfdnBtSHdQaGFzZUFsaWduRGlzYWJsZSgpOworCQkvKiBFbmFibGUgU1cgVlBNIHBoYXNlIGFsaWdubWVudCAgKi8KKwkJY2hpcGNId192cG1Td1BoYXNlQWxpZ25FbmFibGUoKTsKKwkJLyogQWRqdXN0IFZQTSBwaGFzZSAqLworCQl3aGlsZSAoYWRqdXN0Q291bnQgPCBNQVhfUEhBU0VfQURKVVNUX0NPVU5UKSB7CisJCQlwaGFzZVZhbHVlID0gY2hpcGNId19nZXRWcG1Id1BoYXNlQWxpZ25TdGF0dXMoKTsKKworCQkJLyogQWRqdXN0IHBoYXNlIGNvbnRyb2wgdmFsdWUgKi8KKwkJCWlmIChwaGFzZVZhbHVlID4gMHhGKSB7CisJCQkJLyogSW5jcmVtZW50IHBoYXNlIGNvbnRyb2wgdmFsdWUgKi8KKwkJCQlwaGFzZUNvbnRyb2wrKzsKKwkJCX0gZWxzZSBpZiAocGhhc2VWYWx1ZSA8IDB4RikgeworCQkJCS8qIERlY3JlbWVudCBwaGFzZSBjb250cm9sIHZhbHVlICovCisJCQkJcGhhc2VDb250cm9sLS07CisJCQl9IGVsc2UgeworCQkJCS8qIEVuYWJsZSBWUE0gYWNjZXNzICovCisJCQkJcENoaXBjSHctPlNwYXJlMSB8PSBjaGlwY0h3X1JFR19TUEFSRTFfVlBNX0JVU19BQ0NFU1NfRU5BQkxFOworCQkJCS8qIFJldHVybiBhZGp1c3QgY291bnQgKi8KKwkJCQlyZXR1cm4gYWRqdXN0Q291bnQ7CisJCQl9CisJCQkvKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIFBIX0NUUkwuICovCisJCQlyZWczMl93cml0ZSgmcENoaXBjSHctPlZQTUNsb2NrLCAocENoaXBjSHctPlZQTUNsb2NrICYgKH5jaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9NQVNLKSkgfCAocGhhc2VDb250cm9sIDw8IGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX1NISUZUKSk7CisJCQkvKiBXYWl0IGF0bGVhc3QgMjAgbnMgKi8KKwkJCXVkZWxheSgxKTsKKwkJCS8qIFRvZ2dsZSB0aGUgTE9BRF9DSCBhZnRlciBwaGFzZSBjb250cm9sIGlzIHdyaXR0ZW4uICovCisJCQlwQ2hpcGNIdy0+VlBNQ2xvY2sgXj0gY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX1VQREFURV9FTkFCTEU7CisJCQkvKiBDb3VudCBhZGp1c3RtZW50ICovCisJCQlhZGp1c3RDb3VudCsrOworCQl9CisJfQorCisJLyogRGlzYWJsZSBWUE0gYWNjZXNzICovCisJcENoaXBjSHctPlNwYXJlMSAmPSB+Y2hpcGNId19SRUdfU1BBUkUxX1ZQTV9CVVNfQUNDRVNTX0VOQUJMRTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBMb2NhbCBEaXZpZGUgZnVuY3Rpb24KKyoKKyogIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgZGl2aWRlCisqCisqICBAcmV0dXJuIGRpdmlkZSB2YWx1ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBjaGlwY0h3X2RpdmlkZShpbnQgbnVtLCBpbnQgZGVub20pCit7CisJaW50IHI7CisJaW50IHQgPSAxOworCisJLyogU2hpZnQgZGVub20gYW5kIHQgdXAgdG8gdGhlIGxhcmdlc3QgdmFsdWUgdG8gb3B0aW1pemUgYWxnb3JpdGhtICovCisJLyogdCBjb250YWlucyB0aGUgdW5pdHMgb2YgZWFjaCBkaXZpZGUgKi8KKwl3aGlsZSAoKGRlbm9tICYgMHg0MDAwMDAwMCkgPT0gMCkgewkvKiBmYWlscyBpZiBkZW5vbT0wICovCisJCWRlbm9tID0gZGVub20gPDwgMTsKKwkJdCA9IHQgPDwgMTsKKwl9CisKKwkvKiBJbnRpYWxpemUgdGhlIHJlc3VsdCAqLworCXIgPSAwOworCisJZG8geworCQkvKiBEZXRlcm1pbmUgaWYgdGhlcmUgZXhpc3RzIGEgcG9zaXRpdmUgcmVtYWluZGVyICovCisJCWlmICgobnVtIC0gZGVub20pID49IDApIHsKKwkJCS8qIEFjY3VtbGF0ZSB0IHRvIHRoZSByZXN1bHQgYW5kIGNhbGN1bGF0ZSBhIG5ldyByZW1haW5kZXIgKi8KKwkJCW51bSA9IG51bSAtIGRlbm9tOworCQkJciA9IHIgKyB0OworCQl9CisJCS8qIENvbnRpbnVlIHRvIHNoaWZ0IGRlbm9tIGFuZCBzaGlmdCB0IGRvd24gdG8gMCAqLworCQlkZW5vbSA9IGRlbm9tID4+IDE7CisJCXQgPSB0ID4+IDE7CisJfSB3aGlsZSAodCAhPSAwKTsKKworCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3X2luaXQuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNId19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3ZGY3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNId19pbml0LmMKQEAgLTAsMCArMSwyOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBjaGlwY0h3X2luaXQuYworKgorKiAgQGJyaWVmICAgTG93IGxldmVsIENISVBDIFBMTCBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucworKgorKiAgQG5vdGUKKyoKKyogICBUaGVzZSByb3V0aW5lcyBwcm92aWRlIGJhc2ljIFBMTCBjb250cm9sbGluZyBmdW5jdGlvbmFsaXR5IG9ubHkuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3AvZXJybm8uaD4KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8Y3NwL21vZHVsZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19kZWYuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oPgorCisjaW5jbHVkZSA8Y3NwL3JlZy5oPgorI2luY2x1ZGUgPGNzcC9kZWxheS5oPgorLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICAgQ2FsY3VsYXRpb24gZm9yIE5ESVZfaSB0byBvYnRhaW4gVkNPIGZyZXF1ZW5jeQorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlGcmVxX3ZjbyA9IEZyZXFfcmVmICogKFAyIC8gUDEpICogKFBMTF9ORElWX2kgKyBQTExfTkRJVl9mKQorCWZvciBGcmVxX3ZjbyA9IFZDT19GUkVRX01IegorCQlGcmVxX3JlZiA9IGNoaXBjSHdfWFRBTF9GUkVRX0h6CisJCVBMTF9QMSA9IFBMTF9QMiA9IDEKKwkJYW5kCisJCVBMTF9ORElWX2YgPSAwCisKKwlXZSBnZXQ6CisJCVBMTF9ORElWX2kgPSBGcmVxX3ZjbyAvIEZyZXFfcmVmID0gVkNPX0ZSRVFfTUh6IC8gY2hpcGNId19YVEFMX0ZSRVFfSHoKKworICAgIENhbGN1bGF0aW9uIGZvciBQTEwgTURJViB0byBvYnRhaW4gZnJlcXVlbmN5IEZyZXFfeCBmb3IgY2hhbm5lbCB4CisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJRnJlcV94ID0gY2hpcGNId19YVEFMX0ZSRVFfSHogKiBQTExfTkRJVl9pIC8gUExMX01ESVZfeCA9IFZDT19GUkVRX01IeiAvIFBMTF9NRElWX3gKKworCQlQTExfTURJVl94ID0gVkNPX0ZSRVFfTUh6IC8gRnJlcV94CisqLworCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBQTEwyCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBQTEwyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNoaXBjSHdfcGxsMkVuYWJsZSh1aW50MzJfdCB2Y29GcmVxSHopCit7CisJdWludDMyX3QgcGxsUHJlRGl2aWRlcjIgPSAwOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCXBDaGlwY0h3LT5QTExDb25maWcyID0KKwkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfRF9SRVNFVCB8CisJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX0FfUkVTRVQ7CisKKwkJcGxsUHJlRGl2aWRlcjIgPSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QT1dFUl9ET1dOIHwKKwkJICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9JTlRFR0VSIHwKKwkJICAgIChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX2kodmNvRnJlcUh6KSA8PAorCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQpIHwKKwkJICAgIChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSA8PAorCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxX1NISUZUKSB8CisJCSAgICAoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDIgPDwKKwkJICAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMl9TSElGVCk7CisKKwkJLyogRW5hYmxlIENISVBDIHJlZ2lzdGVycyB0byBjb250cm9sIHRoZSBQTEwgKi8KKwkJcENoaXBjSHctPlBMTFN0YXR1cyB8PSBjaGlwY0h3X1JFR19QTExfU1RBVFVTX0NPTlRST0xfRU5BQkxFOworCisJCS8qIFNldCBwcmUgZGl2aWRlciB0byBnZXQgZGVzaXJlZCBWQ08gZnJlcXVlbmN5ICovCisJCXBDaGlwY0h3LT5QTExQcmVEaXZpZGVyMiA9IHBsbFByZURpdmlkZXIyOworCQkvKiBTZXQgTkRJViBGcmFjICovCisJCXBDaGlwY0h3LT5QTExEaXZpZGVyMiA9IGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX05ESVZfZjsKKworCQkvKiBUaGlzIGhhcyB0byBiZSByZW1vdmVkIG9uY2UgdGhlIGRlZmF1bHQgdmFsdWVzIGFyZSBmaXhlZCBmb3IgUExMMi4gKi8KKwkJcENoaXBjSHctPlBMTENvbnRyb2wxMiA9IDB4MzgwMDA3MDA7CisJCXBDaGlwY0h3LT5QTExDb250cm9sMjIgPSAweDAwMDAwMDE1OworCisJCS8qIFJlc2V0IFBMTDIgKi8KKwkJaWYgKHZjb0ZyZXFIeiA+IGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPX1NQTElUX0ZSRVEpIHsKKwkJCXBDaGlwY0h3LT5QTExDb25maWcyID0gY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX0FfUkVTRVQgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPXzE2MDFfMzIwMCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOOworCQl9IGVsc2UgeworCQkJcENoaXBjSHctPlBMTENvbmZpZzIgPSBjaGlwY0h3X1JFR19QTExfQ09ORklHX0RfUkVTRVQgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQV9SRVNFVCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19WQ09fODAwXzE2MDAgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfUE9XRVJfRE9XTjsKKwkJfQorCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJfQorCisJLyogSW5zZXJ0IGNlcnRhaW4gYW1vdW50IG9mIGRlbGF5IGJlZm9yZSBkZWFzc2VydGluZyBBUkVTRVQuICovCisJdWRlbGF5KDEpOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCS8qIFJlbW92ZSBhbmFsb2cgcmVzZXQgYW5kIFBvd2VyIG9uIHRoZSBQTEwgKi8KKwkJcENoaXBjSHctPlBMTENvbmZpZzIgJj0KKwkJICAgIH4oY2hpcGNId19SRUdfUExMX0NPTkZJR19BX1JFU0VUIHwKKwkJICAgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOKTsKKworCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisKKwl9CisKKwkvKiBXYWl0IHVudGlsIFBMTCBpcyBsb2NrZWQgKi8KKwl3aGlsZSAoIShwQ2hpcGNIdy0+UExMU3RhdHVzMiAmIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEKSkKKwkJOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCS8qIFJlbW92ZSBkaWdpdGFsIHJlc2V0ICovCisJCXBDaGlwY0h3LT5QTExDb25maWcyICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX0RfUkVTRVQ7CisKKwkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCX0KK30KKworRVhQT1JUX1NZTUJPTChjaGlwY0h3X3BsbDJFbmFibGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBJbml0aWFsaXplcyB0aGUgUExMMQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgUExMMQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjaGlwY0h3X3BsbDFFbmFibGUodWludDMyX3QgdmNvRnJlcUh6LCBjaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9lIHNzU3VwcG9ydCkKK3sKKwl1aW50MzJfdCBwbGxQcmVEaXZpZGVyID0gMDsKKworCXsKKwkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCisJCXBDaGlwY0h3LT5QTExDb25maWcgPQorCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUIHwKKwkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQV9SRVNFVDsKKwkJLyogU2V0dGluZyBWQ08gZnJlcXVlbmN5ICovCisJCWlmIChzc1N1cHBvcnQgPT0gY2hpcGNId19TUFJFQURfU1BFQ1RSVU1fQUxMT1cpIHsKKwkJCXBsbFByZURpdmlkZXIgPQorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9NQVNIXzFfOCB8CisJCQkgICAgKChjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX2kodmNvRnJlcUh6KSAtCisJCQkgICAgICAxKSA8PCBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX1NISUZUKSB8CisJCQkgICAgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxIDw8CisJCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AxX1NISUZUKSB8CisJCQkgICAgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyIDw8CisJCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyX1NISUZUKTsKKwkJfSBlbHNlIHsKKwkJCXBsbFByZURpdmlkZXIgPSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QT1dFUl9ET1dOIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfSU5URUdFUiB8CisJCQkgICAgKGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfaSh2Y29GcmVxSHopIDw8CisJCQkgICAgIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQpIHwKKwkJCSAgICAoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDEgPDwKKwkJCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDFfU0hJRlQpIHwKKwkJCSAgICAoY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDIgPDwKKwkJCSAgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDJfU0hJRlQpOworCQl9CisKKwkJLyogRW5hYmxlIENISVBDIHJlZ2lzdGVycyB0byBjb250cm9sIHRoZSBQTEwgKi8KKwkJcENoaXBjSHctPlBMTFN0YXR1cyB8PSBjaGlwY0h3X1JFR19QTExfU1RBVFVTX0NPTlRST0xfRU5BQkxFOworCisJCS8qIFNldCBwcmUgZGl2aWRlciB0byBnZXQgZGVzaXJlZCBWQ08gZnJlcXVlbmN5ICovCisJCXBDaGlwY0h3LT5QTExQcmVEaXZpZGVyID0gcGxsUHJlRGl2aWRlcjsKKwkJLyogU2V0IE5ESVYgRnJhYyAqLworCQlpZiAoc3NTdXBwb3J0ID09IGNoaXBjSHdfU1BSRUFEX1NQRUNUUlVNX0FMTE9XKSB7CisJCQlwQ2hpcGNIdy0+UExMRGl2aWRlciA9IGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX00xRElWIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2ZfU1M7CisJCX0gZWxzZSB7CisJCQlwQ2hpcGNIdy0+UExMRGl2aWRlciA9IGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX00xRElWIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2Y7CisJCX0KKworCQkvKiBSZXNldCBQTEwxICovCisJCWlmICh2Y29GcmVxSHogPiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1ZDT19TUExJVF9GUkVRKSB7CisJCQlwQ2hpcGNIdy0+UExMQ29uZmlnID0gY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX0FfUkVTRVQgfAorCQkJICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPXzE2MDFfMzIwMCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOOworCQl9IGVsc2UgeworCQkJcENoaXBjSHctPlBMTENvbmZpZyA9IGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfRF9SRVNFVCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19BX1JFU0VUIHwKKwkJCSAgICBjaGlwY0h3X1JFR19QTExfQ09ORklHX1ZDT184MDBfMTYwMCB8CisJCQkgICAgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOOworCQl9CisKKwkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCisJCS8qIEluc2VydCBjZXJ0YWluIGFtb3VudCBvZiBkZWxheSBiZWZvcmUgZGVhc3NlcnRpbmcgQVJFU0VULiAqLworCQl1ZGVsYXkoMSk7CisKKwkJeworCQkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCQkJLyogUmVtb3ZlIGFuYWxvZyByZXNldCBhbmQgUG93ZXIgb24gdGhlIFBMTCAqLworCQkJcENoaXBjSHctPlBMTENvbmZpZyAmPQorCQkJICAgIH4oY2hpcGNId19SRUdfUExMX0NPTkZJR19BX1JFU0VUIHwKKwkJCSAgICAgIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfUE9XRVJfRE9XTik7CisJCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJCX0KKworCQkvKiBXYWl0IHVudGlsIFBMTCBpcyBsb2NrZWQgKi8KKwkJd2hpbGUgKCEocENoaXBjSHctPlBMTFN0YXR1cyAmIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEKQorCQkgICAgICAgfHwgIShwQ2hpcGNIdy0+CisJCQkgICAgUExMU3RhdHVzMiAmIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEKSkKKwkJCTsKKworCQkvKiBSZW1vdmUgZGlnaXRhbCByZXNldCAqLworCQl7CisJCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCQlwQ2hpcGNIdy0+UExMQ29uZmlnICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX0RfUkVTRVQ7CisJCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJCX0KKwl9Cit9CisKK0VYUE9SVF9TWU1CT0woY2hpcGNId19wbGwxRW5hYmxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIGNoaXBjIG1vZHVsZQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgUExMcyBhbmQgY29yZSBzeXN0ZW0gY2xvY2tzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgY2hpcGNId19Jbml0KGNoaXBjSHdfSU5JVF9QQVJBTV90ICppbml0UGFyYW0JLyogIFsgSU4gXSBNaXNjIGNoaXAgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyICovCisgICAgKSB7CisjaWYgIShkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpKQorCWRlbGF5X2luaXQoKTsKKyNlbmRpZgorCisJLyogRG8gbm90IHByb2dyYW0gUExMLCB3aGVuIHdhcm0gcmVzZXQgKi8KKwlpZiAoIShjaGlwY0h3X2dldFN0aWNreUJpdHMoKSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9DSElQX1dBUk1fUkVTRVQpKSB7CisJCWNoaXBjSHdfcGxsMUVuYWJsZShpbml0UGFyYW0tPnBsbFZjb0ZyZXFIeiwKKwkJCQkgICBpbml0UGFyYW0tPnNzU3VwcG9ydCk7CisJCWNoaXBjSHdfcGxsMkVuYWJsZShpbml0UGFyYW0tPnBsbDJWY29GcmVxSHopOworCX0gZWxzZSB7CisJCS8qIENsZWFyIHN0aWNreSBiaXRzICovCisJCWNoaXBjSHdfY2xlYXJTdGlja3lCaXRzKGNoaXBjSHdfUkVHX1NUSUNLWV9DSElQX1dBUk1fUkVTRVQpOworCX0KKwkvKiBDbGVhciBzdGlja3kgYml0cyAqLworCWNoaXBjSHdfY2xlYXJTdGlja3lCaXRzKGNoaXBjSHdfUkVHX1NUSUNLWV9DSElQX1NPRlRfUkVTRVQpOworCisJLyogQmVmb3JlIGNvbmZpZ3VyaW5nIHRoZSBBUk0gY2xvY2ssIGF0bGVhc3Qgd2UgbmVlZCB0byBtYWtlIHN1cmUgQlVTIGNsb2NrIG1haW50YWlucyB0aGUgcHJvcGVyIHJhdGlvIHdpdGggQVJNIGNsb2NrICovCisJcENoaXBjSHctPkFDTEtDbG9jayA9CisJICAgIChwQ2hpcGNIdy0+CisJICAgICBBQ0xLQ2xvY2sgJiB+Y2hpcGNId19SRUdfQUNMS0Nsb2NrX0NMS19ESVZfTUFTSykgfCAoaW5pdFBhcmFtLT4KKwkJCQkJCQkJIGFybUJ1c1JhdGlvICYKKwkJCQkJCQkJIGNoaXBjSHdfUkVHX0FDTEtDbG9ja19DTEtfRElWX01BU0spOworCisJLyogU2V0IHZhcmlvdXMgY29yZSBjb21wb25lbnQgZnJlcXVlbmNpZXMuIFRoZSBvcmRlciBpbiB3aGljaCB0aGlzIGlzIGRvbmUgaXMgaW1wb3J0YW50IGZvciBzb21lLiAqLworCS8qIFRoZSBSVEJVUyAoRERSIFBIWSkgaXMgZGVyaXZlZCBmcm9tIHRoZSBCVVMsIGFuZCB0aGUgQlVTIGZyb20gdGhlIEFSTSwgYW5kIFZQTSBuZWVkcyB0byBrbm93IEJVUyAqLworCS8qIGZyZXF1ZW5jeSB0byBmaW5kIGl0cyByYXRpbyB3aXRoIHRoZSBCVVMuICBIZW5jZSB3ZSBtdXN0IHNldCB0aGUgQVJNIGZpcnN0LCBmb2xsb3dlZCBieSB0aGUgQlVTLCAgKi8KKwkvKiB0aGVuIFZQTSBhbmQgUlRCVVMuICovCisKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfQVJNLAorCQkJCSAgaW5pdFBhcmFtLT5idXNDbG9ja0ZyZXFIeiAqCisJCQkJICBpbml0UGFyYW0tPmFybUJ1c1JhdGlvKTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfQlVTLCBpbml0UGFyYW0tPmJ1c0Nsb2NrRnJlcUh6KTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfVlBNLAorCQkJCSAgaW5pdFBhcmFtLT5idXNDbG9ja0ZyZXFIeiAqCisJCQkJICBpbml0UGFyYW0tPnZwbUJ1c1JhdGlvKTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfRERSLAorCQkJCSAgaW5pdFBhcmFtLT5idXNDbG9ja0ZyZXFIeiAqCisJCQkJICBpbml0UGFyYW0tPmRkckJ1c1JhdGlvKTsKKwljaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfUlRCVVMsCisJCQkJICBpbml0UGFyYW0tPmJ1c0Nsb2NrRnJlcUh6IC8gMik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL2NoaXBjSHdfcmVzZXQuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvY2hpcGMvY2hpcGNId19yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NzFkODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL2NoaXBjSHdfcmVzZXQuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19kZWYuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oPgorI2luY2x1ZGUgPGNzcC9pbnRjSHcuaD4KKyNpbmNsdWRlIDxjc3AvY2FjaGUuaD4KKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgY2hpcGNId19yZXNldF9ydW5fZnJvbV9hcmFtKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKCpSVU5GVU5DKSAodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICB3YXJtUmVzZXQKKyoKKyogIEBub3RlIHdhcm1SZXNldCBjb25maWd1cmVzIHRoZSBjbG9ja3Mgd2hpY2ggYXJlIG5vdCByZXNldCBiYWNrIHRvIHRoZSBzdGF0ZQorKiAgIHJlcXVpcmVkIHRvIGV4ZWN1dGUgb24gcmVzZXQuICBUbyBkbyBzbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIGNvZGUgaW50byBpbnRlcm5hbAorKiAgIG1lbW9yeSB0byBjaGFuZ2UgdGhlIEFSTSBjbG9jayB3aGlsZSB3ZSBhcmUgbm90IGV4ZWN1dGluZyBmcm9tIEREUi4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY2hpcGNId19yZXNldCh1aW50MzJfdCBtYXNrKQoreworCWludCBpID0gMDsKKwlSVU5GVU5DIHJ1bkZ1bmMgPSAoUlVORlVOQykgKHVuc2lnbmVkIGxvbmcpTU1fQUREUl9JT19BUkFNOworCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWludGNId19pcnFfZGlzYWJsZShJTlRDSFdfSU5UQzAsIDB4ZmZmZmZmZmYpOworCWludGNId19pcnFfZGlzYWJsZShJTlRDSFdfSU5UQzEsIDB4ZmZmZmZmZmYpOworCWludGNId19pcnFfZGlzYWJsZShJTlRDSFdfU0lOVEMsIDB4ZmZmZmZmZmYpOworCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisJCWlmIChtYXNrICYgY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1NPRlQpIHsKKwkJCWNoaXBjSHdfc29mdFJlc2V0KGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfQ0hJUF9TT0ZUKTsKKwkJfQorCQkvKiBCeXBhc3MgdGhlIFBMTCBjbG9ja3MgYmVmb3JlIHJlYm9vdCAqLworCQlwQ2hpcGNIdy0+VUFSVENsb2NrIHw9IGNoaXBjSHdfUkVHX1BMTF9DTE9DS19CWVBBU1NfU0VMRUNUOworCQlwQ2hpcGNIdy0+U1BJQ2xvY2sgfD0gY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1Q7CisKKwkJLyogQ29weSB0aGUgY2hpcGNId193YXJtUmVzZXRfcnVuX2Zyb21fYXJhbSBmdW5jdGlvbiBpbnRvIEFSQU0gKi8KKwkJZG8geworCQkJKCh1aW50MzJfdCAqKSBNTV9JT19CQVNFX0FSQU0pW2ldID0KKwkJCSAgICAoKHVpbnQzMl90ICopICZjaGlwY0h3X3Jlc2V0X3J1bl9mcm9tX2FyYW0pW2ldOworCQkJaSsrOworCQl9IHdoaWxlICgoKHVpbnQzMl90ICopIE1NX0lPX0JBU0VfQVJBTSlbaSAtIDFdICE9IDB4ZTFhMGYwMGYpOwkvKiAweGUxYTBmMDBmID09IGFzbSAoIm1vdiByMTUsIHIxNSIpOyAqLworCisJCUNTUF9DQUNIRV9GTFVTSF9BTEw7CisKKwkJLyogcnVuIHRoZSBmdW5jdGlvbiBmcm9tIEFSQU0gKi8KKwkJcnVuRnVuYygpOworCisJCS8qIENvZGUgd2lsbCBuZXZlciBnZXQgaGVyZSwgYnV0IGluY2x1ZGUgaXQgdG8gYmFsYW5jZSBSRUdfTE9DQUxfSVJRX1NBVkUgYWJvdmUgKi8KKwkJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBtdXN0IHJ1biBmcm9tIGludGVybmFsIG1lbW9yeSAqLwordm9pZCBjaGlwY0h3X3Jlc2V0X3J1bl9mcm9tX2FyYW0odm9pZCkKK3sKKy8qIE1ha2Ugc3VyZSwgcGlwZWxpbmUgaXMgZmlsbGVkIHdpdGggaW5zdHJ1Y3Rpb25zIGNvbWluZyBmcm9tIEFSQU0gKi8KK19fYXNtICgiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpCisJCSIgTVJDICAgICAgcDE1LCMweDAscjAsYzEsYzAsIzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBCSUMgICAgICByMCxyMCwjMHhkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIE1DUiAgICAgIHAxNSwjMHgwLHIwLGMxLGMwLCMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisjZW5kaWYKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisvKiBCeXBhc3MgdGhlIEFSTSBjbG9jayBhbmQgc3dpdGNoIHRvIFhUQUwgY2xvY2sgKi8KKwkJIiBNT1YgICAgICByMiwjMHg4MDAwMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIExEUiAgICAgIHIzLFtyMiwjOF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgT1JSICAgICAgcjMscjMsIzB4MjAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBTVFIgICAgICByMyxbcjIsIzhdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisJCSIgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdCIKKwkJIiBub3AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorLyogSXNzdWUgcmVzZXQgKi8KKwkJIiBNT1YgICAgICByMywjMHgyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblx0IgorCQkiIFNUUiAgICAgIHIzLFtyMiwjMHg4MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiCisvKiBFbmQgaGVyZSAqLworCQkiIE1PViAgICAgIHBjLHBjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHQiKTsKKy8qIDB4ZTFhMGYwMGYgPT0gIGFzbSAoIm1vdiByMTUsIHIxNSIpOyAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3X3N0ci5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9jaGlwYy9jaGlwY0h3X3N0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YWQ5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2NoaXBjL2NoaXBjSHdfc3RyLmMKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGNoaXBjSHdfc3RyLmMKKyoKKyogIEBicmllZiAgIENvbnRhaW5zIHN0cmluZ3Mgd2hpY2ggYXJlIHVzZWZ1bCB0byBsaW51eCBhbmQgY3NwCisqCisqICBAbm90ZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpnTXV4U3RyW10gPSB7CisJIkdQSU8iLAkJCS8qIDAgKi8KKwkiS2V5UGFkIiwJCS8qIDEgKi8KKwkiSTJDLUhvc3QiLAkJLyogMiAqLworCSJTUEkiLAkJCS8qIDMgKi8KKwkiVWFydCIsCQkJLyogNCAqLworCSJMRUQtTXR4LVAiLAkJLyogNSAqLworCSJMRUQtTXR4LVMiLAkJLyogNiAqLworCSJTRElPLTAiLAkJLyogNyAqLworCSJTRElPLTEiLAkJLyogOCAqLworCSJQQ00iLAkJCS8qIDkgKi8KKwkiSTJTIiwJCQkvKiAxMCAqLworCSJFVE0iLAkJCS8qIDExICovCisJIkRlYnVnIiwJCS8qIDEyICovCisJIk1pc2MiLAkJCS8qIDEzICovCisJIjB4RSIsCQkJLyogMTQgKi8KKwkiMHhGIiwJCQkvKiAxNSAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJldHJpZXZlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbXV4IHNldHRpbmcgZm9yIGEgcGluLgorKgorKiAgQHJldHVybiAgUG9pbnRlciB0byBhIGNoYXJhY3RlciBzdHJpbmcuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NvbnN0IGNoYXIgKmNoaXBjSHdfZ2V0R3Bpb1BpbkZ1bmN0aW9uU3RyKGludCBwaW4pCit7CisJaWYgKChwaW4gPCAwKSB8fCAocGluID49IGNoaXBjSHdfR1BJT19DT1VOVCkpIHsKKwkJcmV0dXJuICIiOworCX0KKworCXJldHVybiBnTXV4U3RyW2NoaXBjSHdfZ2V0R3Bpb1BpbkZ1bmN0aW9uKHBpbildOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC9kbWFjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMTEwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgKz0gZG1hY0h3Lm8gZG1hY0h3X2V4dHJhLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3LmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5YmFjMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHcuYwpAQCAtMCwwICsxLDkxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGRtYWNIdy5jCisqCisqICBAYnJpZWYgICBMb3cgbGV2ZWwgRE1BIGNvbnRyb2xsZXIgZHJpdmVyIHJvdXRpbmVzCisqCisqICBAbm90ZQorKgorKiAgIFRoZXNlIHJvdXRpbmVzIHByb3ZpZGUgYmFzaWMgRE1BIGZ1bmN0aW9uYWxpdHkgb25seS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8Y3NwL3N0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaW5jbHVkZSA8Y3NwL2RtYWNIdy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2RtYWNId19yZWcuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9kbWFjSHdfcHJpdi5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfaW5saW5lLmg+CisKKy8qIC0tLS0gRXh0ZXJuYWwgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEFsbG9jYXRlIERNQSBjb250cm9sIGJsb2NrcyAqLworZG1hY0h3X0NCTEtfdCBkbWFjSHdfZ0NibGtbZG1hY0h3X01BWF9DSEFOTkVMX0NPVU5UXTsKKwordWludDMyX3QgZG1hQ2hhbm5lbENvdW50XzAgPSBkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlQgLyAyOwordWludDMyX3QgZG1hQ2hhbm5lbENvdW50XzEgPSBkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlQgLyAyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IG1heGltdW0gRklGTyBmb3IgYSBETUEgY2hhbm5lbAorKgorKiAgQHJldHVybiAgTWF4aW11bSBhbGxvd2FibGUgRklGTyBzaXplCisqCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdWludDMyX3QgR2V0Rmlmb1NpemUoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApIHsKKwl1aW50MzJfdCB2YWwgPSAwOworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJZG1hY0h3X01JU0NfdCAqcE1pc2NSZWcgPQorCSAgICAoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRShwQ2Jsay0+bW9kdWxlKTsKKworCXN3aXRjaCAocENibGstPmNoYW5uZWwpIHsKKwljYXNlIDA6CisJCXZhbCA9IChwTWlzY1JlZy0+Q29tcFBhcm0yLmxvICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gKHBNaXNjUmVnLT5Db21wUGFybTMuaGkgJiAweDcwMDAwMDAwKSA+PiAyODsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSAocE1pc2NSZWctPkNvbXBQYXJtMy5sbyAmIDB4NzAwMDAwMDApID4+IDI4OworCQlicmVhazsKKwljYXNlIDM6CisJCXZhbCA9IChwTWlzY1JlZy0+Q29tcFBhcm00LmhpICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJdmFsID0gKHBNaXNjUmVnLT5Db21wUGFybTQubG8gJiAweDcwMDAwMDAwKSA+PiAyODsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQl2YWwgPSAocE1pc2NSZWctPkNvbXBQYXJtNS5oaSAmIDB4NzAwMDAwMDApID4+IDI4OworCQlicmVhazsKKwljYXNlIDY6CisJCXZhbCA9IChwTWlzY1JlZy0+Q29tcFBhcm01LmxvICYgMHg3MDAwMDAwMCkgPj4gMjg7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJdmFsID0gKHBNaXNjUmVnLT5Db21wUGFybTYuaGkgJiAweDcwMDAwMDAwKSA+PiAyODsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZhbCA8PSAweDQpIHsKKwkJcmV0dXJuIDggPDwgdmFsOworCX0gZWxzZSB7CisJCWRtYWNId19BU1NFUlQoMCk7CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJvZ3JhbSBjaGFubmVsIHJlZ2lzdGVyIHRvIGluaXRpYXRlIHRyYW5zZmVyCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqCisqICBAbm90ZQorKiAgICAgLSBEZXNjcmlwdG9yIGJ1ZmZlciBNVVNUIEFMV0FZUyBiZSBmbHVzaGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyogICAgIC0gVGhpcyBmdW5jdGlvbiBzaG91bGQgYWxzbyBiZSBjYWxsZWQgZnJvbSBJU1IgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbCB3aXRoCisqICAgICAgIHBlbmRpbmcgZGVzY3JpcHRvcnMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkgICAgIGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJICAgICB2b2lkICpwRGVzY3JpcHRvcgkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworICAgICkgeworCWRtYWNId19ERVNDX1JJTkdfdCAqcFJpbmc7CisJZG1hY0h3X0RFU0NfdCAqcFByb2c7CisJZG1hY0h3X0NCTEtfdCAqcENibGs7CisKKwlwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCXBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCisJaWYgKENIQU5ORUxfQlVTWShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkpIHsKKwkJLyogTm90IHNhZmUgeWV0IHRvIHByb2dyYW0gdGhlIGNoYW5uZWwgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChwQ2Jsay0+dmFyRGF0YVN0YXJ0ZWQpIHsKKwkJaWYgKHBDYmxrLT5kZXNjVXBkYXRlZCkgeworCQkJcENibGstPmRlc2NVcGRhdGVkID0gMDsKKwkJCXBQcm9nID0KKwkJCSAgICAoZG1hY0h3X0RFU0NfdCAqKSAoKHVpbnQzMl90KQorCQkJCQkgICAgICAgZG1hY0h3X1JFR19MTFAocENibGstPm1vZHVsZSwKKwkJCQkJCQkgICAgICBwQ2Jsay0+Y2hhbm5lbCkgKworCQkJCQkgICAgICAgcFJpbmctPnZpcnQyUGh5T2Zmc2V0KTsKKworCQkJLyogTG9hZCBkZXNjcmlwdG9yIGlmIG5vdCBsb2FkZWQgKi8KKwkJCWlmICghKHBQcm9nLT5jdGwuaGkgJiBkbWFjSHdfUkVHX0NUTF9ET05FKSkgeworCQkJCWRtYWNId19TRVRfU0FSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLAorCQkJCQkgICAgICAgcFByb2ctPnNhcik7CisJCQkJZG1hY0h3X1NFVF9EQVIocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwsCisJCQkJCSAgICAgICBwUHJvZy0+ZGFyKTsKKwkJCQlkbWFjSHdfUkVHX0NUTF9MTyhwQ2Jsay0+bW9kdWxlLAorCQkJCQkJICBwQ2Jsay0+Y2hhbm5lbCkgPQorCQkJCSAgICBwUHJvZy0+Y3RsLmxvOworCQkJCWRtYWNId19SRUdfQ1RMX0hJKHBDYmxrLT5tb2R1bGUsCisJCQkJCQkgIHBDYmxrLT5jaGFubmVsKSA9CisJCQkJICAgIHBQcm9nLT5jdGwuaGk7CisJCQl9IGVsc2UgaWYgKHBQcm9nID09IChkbWFjSHdfREVTQ190ICopIHBSaW5nLT5wRW5kLT5sbHApIHsKKwkJCQkvKiBSZXR1cm4gYXMgZW5kIGRlc2NyaXB0b3IgaXMgcHJvY2Vzc2VkICovCisJCQkJcmV0dXJuOworCQkJfSBlbHNlIHsKKwkJCQlkbWFjSHdfQVNTRVJUKDApOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHBDb25maWctPnRyYW5zZmVyTW9kZSA9PSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJJT0RJQykgeworCQkJLyogRG8gbm90IG1ha2UgYSBzaW5nbGUgY2hhaW4sIHJhdGhlciBwcm9jZXNzIG9uZSBkZXNjcmlwdG9yIGF0IGEgdGltZSAqLworCQkJcFByb2cgPSBwUmluZy0+cEhlYWQ7CisJCQkvKiBQb2ludCB0byB0aGUgbmV4dCBkZXNjcmlwdG9yIGZvciBuZXh0IGl0ZXJhdGlvbiAqLworCQkJZG1hY0h3X05FWFRfREVTQyhwUmluZywgcEhlYWQpOworCQl9IGVsc2UgeworCQkJLyogUmV0dXJuIGlmIG5vIG1vcmUgcGVuZGluZyBkZXNjcmlwdG9yICovCisJCQlpZiAocFJpbmctPnBFbmQgPT0gTlVMTCkgeworCQkJCXJldHVybjsKKwkJCX0KKworCQkJcFByb2cgPSBwUmluZy0+cFByb2c7CisJCQlpZiAocENvbmZpZy0+dHJhbnNmZXJNb2RlID09CisJCQkgICAgZG1hY0h3X1RSQU5TRkVSX01PREVfQ09OVElOVU9VUykgeworCQkJCS8qIE1ha2Ugc3VyZSBhIGNvbXBsZXRlIHJpbmcgY2FuIGJlIGZvcm1lZCAqLworCQkJCWRtYWNId19BU1NFUlQoKGRtYWNId19ERVNDX3QgKikgcFJpbmctPnBFbmQtPgorCQkJCQkgICAgICBsbHAgPT0gcFJpbmctPnBQcm9nKTsKKwkJCQkvKiBNYWtlIHN1cmUgcFByb2cgcG9pbnRpbmcgdG8gdGhlIHBIZWFkICovCisJCQkJZG1hY0h3X0FTU0VSVCgoZG1hY0h3X0RFU0NfdCAqKSBwUmluZy0+cFByb2cgPT0KKwkJCQkJICAgICAgcFJpbmctPnBIZWFkKTsKKwkJCQkvKiBNYWtlIGEgY29tcGxldGUgcmluZyAqLworCQkJCWRvIHsKKwkJCQkJcFJpbmctPnBQcm9nLT5jdGwubG8gfD0KKwkJCQkJICAgIChkbWFjSHdfUkVHX0NUTF9MTFBfRFNUX0VOIHwKKwkJCQkJICAgICBkbWFjSHdfUkVHX0NUTF9MTFBfU1JDX0VOKTsKKwkJCQkJcFJpbmctPnBQcm9nID0KKwkJCQkJICAgIChkbWFjSHdfREVTQ190ICopIHBSaW5nLT5wUHJvZy0+bGxwOworCQkJCX0gd2hpbGUgKHBSaW5nLT5wUHJvZyAhPSBwUmluZy0+cEhlYWQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBNYWtlIGEgc2luZ2xlIGxvbmcgY2hhaW4gKi8KKwkJCQl3aGlsZSAocFJpbmctPnBQcm9nICE9IHBSaW5nLT5wRW5kKSB7CisJCQkJCXBSaW5nLT5wUHJvZy0+Y3RsLmxvIHw9CisJCQkJCSAgICAoZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8CisJCQkJCSAgICAgZG1hY0h3X1JFR19DVExfTExQX1NSQ19FTik7CisJCQkJCXBSaW5nLT5wUHJvZyA9CisJCQkJCSAgICAoZG1hY0h3X0RFU0NfdCAqKSBwUmluZy0+cFByb2ctPmxscDsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBQcm9ncmFtIHRoZSBjaGFubmVsIHJlZ2lzdGVycyAqLworCQlkbWFjSHdfU0VUX1NBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwgcFByb2ctPnNhcik7CisJCWRtYWNId19TRVRfREFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLCBwUHJvZy0+ZGFyKTsKKwkJZG1hY0h3X1NFVF9MTFAocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwsCisJCQkgICAgICAgKHVpbnQzMl90KSBwUHJvZyAtIHBSaW5nLT52aXJ0MlBoeU9mZnNldCk7CisJCWRtYWNId19SRUdfQ1RMX0xPKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKSA9CisJCSAgICBwUHJvZy0+Y3RsLmxvOworCQlkbWFjSHdfUkVHX0NUTF9ISShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkgPQorCQkgICAgcFByb2ctPmN0bC5oaTsKKwkJaWYgKHBSaW5nLT5wRW5kKSB7CisJCQkvKiBSZW1lbWJlciB0aGUgZGVzY3JpcHRvciB0byB1c2UgbmV4dCAqLworCQkJcFJpbmctPnBQcm9nID0gKGRtYWNId19ERVNDX3QgKikgcFJpbmctPnBFbmQtPmxscDsKKwkJfQorCQkvKiBJbmRpY2F0ZSBubyBtb3JlIHBlbmRpbmcgZGVzY3JpcHRvciAgKi8KKwkJcFJpbmctPnBFbmQgPSAoZG1hY0h3X0RFU0NfdCAqKSBOVUxMOworCX0KKwkvKiBTdGFydCBETUEgb3BlcmF0aW9uICovCisJZG1hY0h3X0RNQV9TVEFSVChwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbml0aWFsaXplcyBETUEKKyoKKyogIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgRE1BIENTUCBkcml2ZXIKKyoKKyogIEBub3RlCisqICAgICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgYW55IERNQSBjaGFubmVsCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19pbml0RG1hKHZvaWQpCit7CisKKwl1aW50MzJfdCBpID0gMDsKKworCWRtYUNoYW5uZWxDb3VudF8wID0gZG1hY0h3X0dFVF9OVU1fQ0hBTk5FTCgwKTsKKwlkbWFDaGFubmVsQ291bnRfMSA9IGRtYWNId19HRVRfTlVNX0NIQU5ORUwoMSk7CisKKwkvKiBFbmFibGUgYWNjZXNzIHRvIHRoZSBETUEgYmxvY2sgKi8KKwljaGlwY0h3X2J1c0ludGVyZmFjZUNsb2NrRW5hYmxlKGNoaXBjSHdfUkVHX0JVU19DTE9DS19ETUFDMCk7CisJY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0VuYWJsZShjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfRE1BQzEpOworCisJaWYgKChkbWFDaGFubmVsQ291bnRfMCArIGRtYUNoYW5uZWxDb3VudF8xKSA+IGRtYWNId19NQVhfQ0hBTk5FTF9DT1VOVCkgeworCQlkbWFjSHdfQVNTRVJUKDApOworCX0KKworCW1lbXNldCgodm9pZCAqKWRtYWNId19nQ2JsaywgMCwKKwkgICAgICAgc2l6ZW9mKGRtYWNId19DQkxLX3QpICogKGRtYUNoYW5uZWxDb3VudF8wICsgZG1hQ2hhbm5lbENvdW50XzEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZG1hQ2hhbm5lbENvdW50XzA7IGkrKykgeworCQlkbWFjSHdfZ0NibGtbaV0ubW9kdWxlID0gMDsKKwkJZG1hY0h3X2dDYmxrW2ldLmNoYW5uZWwgPSBpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZG1hQ2hhbm5lbENvdW50XzE7IGkrKykgeworCQlkbWFjSHdfZ0NibGtbaSArIGRtYUNoYW5uZWxDb3VudF8wXS5tb2R1bGUgPSAxOworCQlkbWFjSHdfZ0NibGtbaSArIGRtYUNoYW5uZWxDb3VudF8wXS5jaGFubmVsID0gaTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFeGl0IGZ1bmN0aW9uIGZvciAgRE1BCisqCisqICBUaGlzIGZ1bmN0aW9uIGlzb2xhdGVzIERNQSBmcm9tIHRoZSBzeXN0ZW0KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X2V4aXREbWEodm9pZCkKK3sKKwkvKiBEaXNhYmxlIGFjY2VzcyB0byB0aGUgRE1BIGJsb2NrICovCisJY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0Rpc2FibGUoY2hpcGNId19SRUdfQlVTX0NMT0NLX0RNQUMwKTsKKwljaGlwY0h3X2J1c0ludGVyZmFjZUNsb2NrRGlzYWJsZShjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfRE1BQzEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0cyBhIGhhbmRsZSB0byBhIERNQSBjaGFubmVsCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBoYW5kbGUsIHJlcHJlc2VudGluZyBhIGNvbnRyb2wgYmxvY2sgb2YgYSBwYXJ0aWN1bGFyIERNQSBjaGFubmVsCisqCisqICBAcmV0dXJuICAtMSAgICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICBoYW5kbGUgIC0gT24gU3VjY2VzcywgcmVwcmVzZW50aW5nIGEgY2hhbm5lbCBjb250cm9sIGJsb2NrCisqCisqICBAbm90ZQorKiAgICAgTm9uZSAgQ2hhbm5lbCBJRCBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcgImRtYWNId19NQUtFX0NIQU5ORUxfSUQiIG1hY3JvCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitkbWFjSHdfSEFORExFX3QgZG1hY0h3X2dldENoYW5uZWxIYW5kbGUoZG1hY0h3X0lEX3QgY2hhbm5lbElkCS8qIFsgSU4gXSBETUEgQ2hhbm5lbCBJZCAqLworICAgICkgeworCWludCBpZHg7CisKKwlzd2l0Y2ggKChjaGFubmVsSWQgPj4gOCkpIHsKKwljYXNlIDA6CisJCWRtYWNId19BU1NFUlQoKGNoYW5uZWxJZCAmIDB4ZmYpIDwgZG1hQ2hhbm5lbENvdW50XzApOworCQlpZHggPSAoY2hhbm5lbElkICYgMHhmZik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZG1hY0h3X0FTU0VSVCgoY2hhbm5lbElkICYgMHhmZikgPCBkbWFDaGFubmVsQ291bnRfMSk7CisJCWlkeCA9IGRtYUNoYW5uZWxDb3VudF8wICsgKGNoYW5uZWxJZCAmIDB4ZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkbWFjSHdfQVNTRVJUKDApOworCQlyZXR1cm4gKGRtYWNId19IQU5ETEVfdCkgLTE7CisJfQorCisJcmV0dXJuIGRtYWNId19DQkxLX1RPX0hBTkRMRSgmZG1hY0h3X2dDYmxrW2lkeF0pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5pdGlhbGl6ZXMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFuZCByZXNldHMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBAcmV0dXJuICAtMSAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgMCAgICAgLSBPbiBTdWNjZXNzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19pbml0Q2hhbm5lbChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJaW50IG1vZHVsZSA9IHBDYmxrLT5tb2R1bGU7CisJaW50IGNoYW5uZWwgPSBwQ2Jsay0+Y2hhbm5lbDsKKworCS8qIFJlaW5pdGlhbGl6ZSB0aGUgY29udHJvbCBibG9jayAqLworCW1lbXNldCgodm9pZCAqKXBDYmxrLCAwLCBzaXplb2YoZG1hY0h3X0NCTEtfdCkpOworCXBDYmxrLT5tb2R1bGUgPSBtb2R1bGU7CisJcENibGstPmNoYW5uZWwgPSBjaGFubmVsOworCisJLyogRW5hYmxlIERNQSBjb250cm9sbGVyICovCisJZG1hY0h3X0RNQV9FTkFCTEUocENibGstPm1vZHVsZSk7CisJLyogUmVzZXQgRE1BIGNoYW5uZWwgKi8KKwlkbWFjSHdfUkVTRVRfQ09OVFJPTF9MTyhwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X1JFU0VUX0NPTlRST0xfSEkocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCWRtYWNId19SRVNFVF9DT05GSUdfTE8ocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCWRtYWNId19SRVNFVF9DT05GSUdfSEkocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCisJLyogQ2xlYXIgYWxsIHJhdyBpbnRlcnJ1cHQgc3RhdHVzICovCisJZG1hY0h3X1RSQU5fSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfQkxPQ0tfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfRVJST1JfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKworCS8qIE1hc2sgZXZlbnQgc3BlY2lmaWMgaW50ZXJydXB0cyAqLworCWRtYWNId19UUkFOX0lOVF9ESVNBQkxFKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfQkxPQ0tfSU5UX0RJU0FCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCWRtYWNId19TVFJBTl9JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X0RUUkFOX0lOVF9ESVNBQkxFKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfRVJST1JfSU5UX0RJU0FCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEZpbmRzIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgdG8gZm9ybSBhIGRlc2NyaXB0b3IgcmluZworKgorKgorKiAgQHJldHVybiAgIE51bWJlciBvZiBieXRlcyByZXF1aXJlZCB0byBmb3JtIGEgZGVzY3JpcHRvciByaW5nCisqCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCBkbWFjSHdfZGVzY3JpcHRvckxlbih1aW50MzJfdCBkZXNjQ250CS8qIFsgSU4gXSBOdW1iZXIgb2YgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqLworICAgICkgeworCS8qIE5lZWQgZXh0cmEgNCBieXRlIHRvIGVuc3VyZSAzMiBiaXQgYWxpZ25tZW50ICAqLworCXJldHVybiAoZGVzY0NudCAqIHNpemVvZihkbWFjSHdfREVTQ190KSkgKyBzaXplb2YoZG1hY0h3X0RFU0NfUklOR190KSArCisJCXNpemVvZih1aW50MzJfdCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbml0aWFsaXplcyBkZXNjcmlwdG9yIHJpbmcKKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplcyB0aGUgZGVzY3JpcHRvciByaW5nIG9mIGEgRE1BIGNoYW5uZWwKKyoKKyoKKyogIEByZXR1cm4gICAtMSAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAgMCAtIE9uIHN1Y2Nlc3MKKyogIEBub3RlCisqICAgICAtICJsZW4iIHBhcmFtZXRlciBzaG91bGQgYmUgb2J0YWluZWQgZnJvbSAiZG1hY0h3X2Rlc2NyaXB0b3JMZW4iCisqICAgICAtIERlc2NyaXB0b3IgYnVmZmVyIE1VU1QgYmUgMzIgYml0IGFsaWduZWQgYW5kIHVuY2FjaGVkIGFzIGl0IGlzCisqICAgICAgIGFjY2Vzc2VkIGJ5IEFSTSBhbmQgRE1BCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2luaXREZXNjcmlwdG9yKHZvaWQgKnBEZXNjcmlwdG9yVmlydCwJLyogIFsgSU4gXSBWaXJ0dWFsIGFkZHJlc3Mgb2YgdW5jYWhjZWQgYnVmZmVyIGFsbG9jYXRlZCB0byBmb3JtIGRlc2NyaXB0b3IgcmluZyAqLworCQkJICB1aW50MzJfdCBkZXNjcmlwdG9yUGh5QWRkciwJLyogIFsgSU4gXSBQaHlzaWNhbCBhZGRyZXNzIG9mIHBEZXNjcmlwdG9yVmlydCAoZGVzY3JpcHRvciBidWZmZXIpICovCisJCQkgIHVpbnQzMl90IGxlbiwJLyogIFsgSU4gXSBTaXplIG9mIHRoZSBwQnVmICovCisJCQkgIHVpbnQzMl90IG51bQkvKiAgWyBJTiBdIE51bWJlciBvZiBkZXNjcmlwdG9yIGluIHRoZSByaW5nICovCisgICAgKSB7CisJdWludDMyX3QgaTsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nOworCWRtYWNId19ERVNDX3QgKnBEZXNjOworCisJLyogQ2hlY2sgdGhlIGFsaWdubWVudCBvZiB0aGUgZGVzY3JpcHRvciAqLworCWlmICgodWludDMyX3QpIHBEZXNjcmlwdG9yVmlydCAmIDB4MDAwMDAwMDMpIHsKKwkJZG1hY0h3X0FTU0VSVCgwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENoZWNrIGlmIGVub3VnaCBzcGFjZSBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIGRlc2NyaXB0b3IgcmluZyAqLworCWlmIChsZW4gPCBkbWFjSHdfZGVzY3JpcHRvckxlbihudW0pKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlwUmluZyA9IGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yVmlydCk7CisJcFJpbmctPnBIZWFkID0KKwkgICAgKGRtYWNId19ERVNDX3QgKikgKCh1aW50MzJfdCkgcFJpbmcgKyBzaXplb2YoZG1hY0h3X0RFU0NfUklOR190KSk7CisJcFJpbmctPnBGcmVlID0gcFJpbmctPnBUYWlsID0gcFJpbmctPnBFbmQgPSBwUmluZy0+cEhlYWQ7CisJcFJpbmctPnBQcm9nID0gZG1hY0h3X0RFU0NfSU5JVDsKKwkvKiBJbml0aWFsaXplIGxpbmsgaXRlbSBjaGFpbiwgc3RhcnRpbmcgZnJvbSB0aGUgaGVhZCAqLworCXBEZXNjID0gcFJpbmctPnBIZWFkOworCS8qIEZpbmQgdGhlIG9mZnNldCBiZXR3ZWVuIHZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyAqLworCXBSaW5nLT52aXJ0MlBoeU9mZnNldCA9ICh1aW50MzJfdCkgcERlc2NyaXB0b3JWaXJ0IC0gZGVzY3JpcHRvclBoeUFkZHI7CisKKwkvKiBGb3JtIHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtIC0gMTsgaSsrKSB7CisJCS8qIENsZWFyIGxpbmsgbGlzdCBpdGVtICovCisJCW1lbXNldCgodm9pZCAqKXBEZXNjLCAwLCBzaXplb2YoZG1hY0h3X0RFU0NfdCkpOworCQkvKiBQb2ludCB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzICovCisJCXBEZXNjLT5sbHBQaHkgPSAodWludDMyX3QpIChwRGVzYyArIDEpIC0gcFJpbmctPnZpcnQyUGh5T2Zmc2V0OworCQkvKiBQb2ludCB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwkJcERlc2MtPmxscCA9ICh1aW50MzJfdCkgKHBEZXNjICsgMSk7CisJCS8qIE1hcmsgZGVzY3JpcHRvciBpcyByZWFkeSB0byB1c2UgKi8KKwkJcERlc2MtPmN0bC5oaSA9IGRtYWNId19ERVNDX0ZSRUU7CisJCS8qIExvb2sgaW50byBuZXh0IGxpbmsgbGlzdCBpdGVtICovCisJCXBEZXNjKys7CisJfQorCisJLyogQ2xlYXIgbGFzdCBsaW5rIGxpc3QgaXRlbSAqLworCW1lbXNldCgodm9pZCAqKXBEZXNjLCAwLCBzaXplb2YoZG1hY0h3X0RFU0NfdCkpOworCS8qIExhc3QgaXRlbSBwb2ludGluZyB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUKKwkgICBwaHlzaWNhbCBhZGRyZXNzIHRvIGNvbXBsZXRlIHRoZSByaW5nICovCisJcERlc2MtPmxscFBoeSA9ICh1aW50MzJfdCkgcFJpbmctPnBIZWFkIC0gcFJpbmctPnZpcnQyUGh5T2Zmc2V0OworCS8qIExhc3QgaXRlbSBwb2ludGluZyB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUKKwkgICB2aXJ0dWFsIGFkZHJlc3MgdG8gY29tcGxldGUgdGhlIHJpbmcKKwkgKi8KKwlwRGVzYy0+bGxwID0gKHVpbnQzMl90KSBwUmluZy0+cEhlYWQ7CisJLyogTWFyayBkZXNjcmlwdG9yIGlzIHJlYWR5IHRvIHVzZSAqLworCXBEZXNjLT5jdGwuaGkgPSBkbWFjSHdfREVTQ19GUkVFOworCS8qIFNldCB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRoZSByaW5nICovCisJcFJpbmctPm51bSA9IG51bTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZSBETUEgY2hhbm5lbAorKgorKiAgQHJldHVybiAgMCAgOiBPbiBzdWNjZXNzCisqICAgICAgICAgICAtMSA6IE9uIGZhaWx1cmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfY29uZmlnQ2hhbm5lbChkbWFjSHdfSEFORExFX3QgaGFuZGxlLAkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCSBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJdWludDMyX3QgY2ZnSGlnaCA9IDA7CisJaW50IHNyY1RyU2l6ZTsKKwlpbnQgZHN0VHJTaXplOworCisJcENibGstPnZhckRhdGFTdGFydGVkID0gMDsKKwlwQ2Jsay0+dXNlckRhdGEgPSBOVUxMOworCisJLyogQ29uZmlndXJlCisJICAgLSBCdXJzdCB0cmFuc2FjdGlvbiB3aGVuIGVub3VnaCBkYXRhIGluIGF2YWlsYWJsZSBpbiBGSUZPCisJICAgLSBBSEIgQWNjZXNzIHByb3RlY3Rpb24gMQorCSAgIC0gU291cmNlIGFuZCBkZXN0aW5hdGlvbiBwZXJpcGhlcmFsIHBvcnRzCisJICovCisJY2ZnSGlnaCA9CisJICAgIGRtYWNId19SRUdfQ0ZHX0hJX0ZJRk9fRU5PVUdIIHwgZG1hY0h3X1JFR19DRkdfSElfQUhCX0hQUk9UXzEgfAorCSAgICBkbWFjSHdfU1JDX1BFUklfSU5URihwQ29uZmlnLT4KKwkJCQkgc3JjUGVyaXBoZXJhbFBvcnQpIHwKKwkgICAgZG1hY0h3X0RTVF9QRVJJX0lOVEYocENvbmZpZy0+ZHN0UGVyaXBoZXJhbFBvcnQpOworCS8qIFNldCBwcmlvcml0eSAqLworCWRtYWNId19TRVRfQ0hBTk5FTF9QUklPUklUWShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwKKwkJCQkgICAgcENvbmZpZy0+Y2hhbm5lbFByaW9yaXR5KTsKKworCWlmIChwQ29uZmlnLT5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgIT0gMCkgeworCQkvKiBEZXN0aW5hdGlvbiBzdGF0dXMgdXBkYXRlIGVuYWJsZSAqLworCQljZmdIaWdoIHw9IGRtYWNId19SRUdfQ0ZHX0hJX1VQREFURV9EU1RfU1RBVDsKKwkJLyogQ29uZmlndXJlIHN0YXR1cyByZWdpc3RlcnMgKi8KKwkJZG1hY0h3X1NFVF9EU1RBVEFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLAorCQkJCSAgIHBDb25maWctPmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyk7CisJfQorCisJaWYgKHBDb25maWctPnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyAhPSAwKSB7CisJCS8qIFNvdXJjZSBzdGF0dXMgdXBkYXRlIGVuYWJsZSAqLworCQljZmdIaWdoIHw9IGRtYWNId19SRUdfQ0ZHX0hJX1VQREFURV9TUkNfU1RBVDsKKwkJLyogU291cmNlIHN0YXR1cyB1cGRhdGUgZW5hYmxlICovCisJCWRtYWNId19TRVRfU1NUQVRBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwKKwkJCQkgICBwQ29uZmlnLT5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MpOworCX0KKwkvKiBDb25maWd1cmUgdGhlIGNvbmZpZyBoaWdoIHJlZ2lzdGVyICovCisJZG1hY0h3X0dFVF9DT05GSUdfSEkocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpID0gY2ZnSGlnaDsKKworCS8qIENsZWFyIGFsbCByYXcgaW50ZXJydXB0IHN0YXR1cyAqLworCWRtYWNId19UUkFOX0lOVF9DTEVBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X0JMT0NLX0lOVF9DTEVBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJZG1hY0h3X0VSUk9SX0lOVF9DTEVBUihwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisKKwkvKiBDb25maWd1cmUgYmxvY2sgaW50ZXJydXB0ICovCisJaWYgKHBDb25maWctPmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPT0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUpIHsKKwkJZG1hY0h3X0JMT0NLX0lOVF9FTkFCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCX0gZWxzZSB7CisJCWRtYWNId19CTE9DS19JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJfQorCS8qIENvbmZpZ3VyZSBjb21wbGV0ZSB0cmFuc2ZlciBpbnRlcnJ1cHQgKi8KKwlpZiAocENvbmZpZy0+Y29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9PSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSkgeworCQlkbWFjSHdfVFJBTl9JTlRfRU5BQkxFKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwl9IGVsc2UgeworCQlkbWFjSHdfVFJBTl9JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJfQorCS8qIENvbmZpZ3VyZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwlpZiAocENvbmZpZy0+ZXJyb3JJbnRlcnJ1cHQgPT0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUpIHsKKwkJZG1hY0h3X0VSUk9SX0lOVF9FTkFCTEUocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworCX0gZWxzZSB7CisJCWRtYWNId19FUlJPUl9JTlRfRElTQUJMRShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCk7CisJfQorCS8qIENvbmZpZ3VyZSBnYXRoZXIgcmVnaXN0ZXIgKi8KKwlpZiAocENvbmZpZy0+c3JjR2F0aGVyV2lkdGgpIHsKKwkJc3JjVHJTaXplID0KKwkJICAgIGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKwkJaWYgKCEKKwkJICAgICgocENvbmZpZy0+c3JjR2F0aGVyV2lkdGggJSBzcmNUclNpemUpCisJCSAgICAgJiYgKHBDb25maWctPnNyY0dhdGhlckp1bXAgJSBzcmNUclNpemUpKSkgeworCQkJZG1hY0h3X1JFR19TR1JfTE8ocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpID0KKwkJCSAgICAoKHBDb25maWctPnNyY0dhdGhlcldpZHRoIC8KKwkJCSAgICAgIHNyY1RyU2l6ZSkgPDwgMjApIHwgKHBDb25maWctPnNyY0dhdGhlckp1bXAgLworCQkJCQkJICAgc3JjVHJTaXplKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkvKiBDb25maWd1cmUgc2NhdHRlciByZWdpc3RlciAqLworCWlmIChwQ29uZmlnLT5kc3RTY2F0dGVyV2lkdGgpIHsKKwkJZHN0VHJTaXplID0KKwkJICAgIGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5kc3RNYXhUcmFuc2FjdGlvbldpZHRoKTsKKwkJaWYgKCEKKwkJICAgICgocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoICUgZHN0VHJTaXplKQorCQkgICAgICYmIChwQ29uZmlnLT5kc3RTY2F0dGVySnVtcCAlIGRzdFRyU2l6ZSkpKSB7CisJCQlkbWFjSHdfUkVHX0RTUl9MTyhwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkgPQorCQkJICAgICgocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoIC8KKwkJCSAgICAgIGRzdFRyU2l6ZSkgPDwgMjApIHwgKHBDb25maWctPmRzdFNjYXR0ZXJKdW1wIC8KKwkJCQkJCSAgIGRzdFRyU2l6ZSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbmRpY2F0ZXMgd2hldGhlciBETUEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3Mgb3IgY29tcGxldGVkCisqCisqICBAcmV0dXJuICAgRE1BIHRyYW5zZmVyIHN0YXR1cworKiAgICAgICAgICBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0JVU1k6ICAgICAgICAgRE1BIFRyYW5zZmVyIG9uZ29pbmcKKyogICAgICAgICAgZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19ET05FOiAgICAgICAgIERNQSBUcmFuc2ZlciBjb21wbGV0ZWQKKyogICAgICAgICAgZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19FUlJPUjogICAgICAgIERNQSBUcmFuc2ZlciBlcnJvcgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19lIGRtYWNId190cmFuc2ZlckNvbXBsZXRlZChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisKKwlpZiAoQ0hBTk5FTF9CVVNZKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKSkgeworCQlyZXR1cm4gZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19CVVNZOworCX0gZWxzZSBpZiAoZG1hY0h3X1JFR19JTlRfUkFXX0VSUk9SKHBDYmxrLT5tb2R1bGUpICYKKwkJICAgKDB4MDAwMDAwMDEgPDwgcENibGstPmNoYW5uZWwpKSB7CisJCXJldHVybiBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0VSUk9SOworCX0KKworCXJldHVybiBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0RPTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgZGVzY3JpcHRvcnMgZm9yIGtub3duIGRhdGEgbGVuZ3RoCisqCisqICBXaGVuIERNQSBoYXMgdG8gd29yayBhcyBhIGZsb3cgY29udHJvbGxlciwgdGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUKKyogIGRlc2NyaXB0b3IgY2hhaW4gdG8gdHJhbnNmZXIgZGF0YQorKgorKiAgZnJvbToKKyogICAgICAgICAgLSBNZW1vcnkgdG8gbWVtb3J5CisqICAgICAgICAgIC0gUGVyaXBoZXJhbCB0byBtZW1vcnkKKyogICAgICAgICAgLSBNZW1vcnkgdG8gUGVyaXBoZXJhbAorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gUGVyaXBoZXJhbAorKgorKiAgQHJldHVybiAgIC0xIC0gT24gZmFpbHVyZQorKiAgICAgICAgICAgICAwIC0gT24gc3VjY2VzcworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19zZXREYXRhRGVzY3JpcHRvcihkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkgICAgIHZvaWQgKnBTcmNBZGRyLAkvKiAgIFsgSU4gXSBTb3VyY2UgKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkgICAgIHZvaWQgKnBEc3RBZGRyLAkvKiAgIFsgSU4gXSBEZXN0aW5hdGlvbiAoUGVyaXBoZXJhbC9NZW1vcnkpIGFkZHJlc3MgKi8KKwkJCSAgICAgc2l6ZV90IGRhdGFMZW4JLyogICBbIElOIF0gRGF0YSBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICApIHsKKwlkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfZSBkc3RUcldpZHRoOworCWRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIHNyY1RyV2lkdGg7CisJZG1hY0h3X0RFU0NfUklOR190ICpwUmluZyA9IGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yKTsKKwlkbWFjSHdfREVTQ190ICpwU3RhcnQ7CisJZG1hY0h3X0RFU0NfdCAqcFByb2c7CisJaW50IHNyY1RzID0gMDsKKwlpbnQgYmxrVHMgPSAwOworCWludCBvZGRTaXplID0gMDsKKwlpbnQgZGVzY0NvdW50ID0gMDsKKwlpbnQgY291bnQgPSAwOworCWludCBkc3RUclNpemUgPSAwOworCWludCBzcmNUclNpemUgPSAwOworCXVpbnQzMl90IG1heEJsb2NrU2l6ZSA9IGRtYWNId19NQVhfQkxPQ0tTSVpFOworCisJZHN0VHJTaXplID0gZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGgpOworCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKworCS8qIFNraXAgVHggaWYgYnVmZmVyIGlzIE5VTEwgIG9yIGxlbmd0aCBpcyB1bmtub3duICovCisJaWYgKChwU3JjQWRkciA9PSBOVUxMKSB8fCAocERzdEFkZHIgPT0gTlVMTCkgfHwgKGRhdGFMZW4gPT0gMCkpIHsKKwkJLyogRG8gbm90IGluaXRpYXRlIHRyYW5zZmVyICovCisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBFbnN1cmUgc2NhdHRlciBhbmQgZ2F0aGVyIGFyZSB0cmFuc2FjdGlvbiBhbGlnbmVkICovCisJaWYgKChwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCAlIHNyY1RyU2l6ZSkKKwkgICAgfHwgKHBDb25maWctPmRzdFNjYXR0ZXJXaWR0aCAlIGRzdFRyU2l6ZSkpIHsKKwkJcmV0dXJuIC0yOworCX0KKworCS8qCisJICAgQmFja2dyb3VuZCAxOiBETUFDIGNhbiBub3QgcGVyZm9ybSBETUEgaWYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgYXJlCisJICAgbm90IHByb3Blcmx5IGFsaWduZWQgd2l0aCB0aGUgY2hhbm5lbCdzIHRyYW5zYWN0aW9uIHdpZHRoLiBTbywgZm9yIHN1Y2Nlc3NmdWwKKwkgICBETUEgdHJhbnNmZXIsIHRyYW5zYWN0aW9uIHdpZHRoIG11c3QgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgYWxpZ25tZW50IG9mIHRoZQorCSAgIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzcy4KKwkgKi8KKworCS8qIEFkanVzdCBkZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiB3aWR0aCBpZiBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5ICovCisJZHN0VHJXaWR0aCA9IHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGg7CisJd2hpbGUgKGRtYWNId19BRERSRVNTX01BU0soZHN0VHJTaXplKSAmICh1aW50MzJfdCkgcERzdEFkZHIpIHsKKwkJZHN0VHJXaWR0aCA9IGRtYWNId19HZXROZXh0VHJXaWR0aChkc3RUcldpZHRoKTsKKwkJZHN0VHJTaXplID0gZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKGRzdFRyV2lkdGgpOworCX0KKworCS8qIEFkanVzdCBzb3VyY2UgdHJhbnNhY3Rpb24gd2lkdGggaWYgc291cmNlIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgKi8KKwlzcmNUcldpZHRoID0gcENvbmZpZy0+c3JjTWF4VHJhbnNhY3Rpb25XaWR0aDsKKwl3aGlsZSAoZG1hY0h3X0FERFJFU1NfTUFTSyhzcmNUclNpemUpICYgKHVpbnQzMl90KSBwU3JjQWRkcikgeworCQlzcmNUcldpZHRoID0gZG1hY0h3X0dldE5leHRUcldpZHRoKHNyY1RyV2lkdGgpOworCQlzcmNUclNpemUgPSBkbWFjSHdfR2V0VHJXaWR0aEluQnl0ZXMoc3JjVHJXaWR0aCk7CisJfQorCisJLyogRmluZCB0aGUgbWF4aW11bSB0cmFuc2FjdGlvbiBwZXIgZGVzY3JpcHRvciAqLworCWlmIChwQ29uZmlnLT5tYXhEYXRhUGVyQmxvY2sKKwkgICAgJiYgKChwQ29uZmlnLT5tYXhEYXRhUGVyQmxvY2sgLyBzcmNUclNpemUpIDwKKwkJZG1hY0h3X01BWF9CTE9DS1NJWkUpKSB7CisJCW1heEJsb2NrU2l6ZSA9IHBDb25maWctPm1heERhdGFQZXJCbG9jayAvIHNyY1RyU2l6ZTsKKwl9CisKKwkvKiBGaW5kIG51bWJlciBvZiBzb3VyY2UgdHJhbnNhY3Rpb25zIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgRE1BIHRyYW5zZmVyICovCisJc3JjVHMgPSBkYXRhTGVuIC8gc3JjVHJTaXplOworCS8qIEZpbmQgdGhlIG9kZCBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIHRyYW5zZmVycmVkIGFzIHNpbmdsZSBieXRlIHRyYW5zYWN0aW9uIHdpZHRoICovCisJaWYgKHNyY1RzICYmIChkc3RUclNpemUgPiBzcmNUclNpemUpKSB7CisJCW9kZFNpemUgPSBkYXRhTGVuICUgZHN0VHJTaXplOworCQkvKiBBZGp1c3Qgc291cmNlIHRyYW5zYWN0aW9uIGNvdW50IGR1ZSB0byAib2RkU2l6ZSIgKi8KKwkJc3JjVHMgPSBzcmNUcyAtIChvZGRTaXplIC8gc3JjVHJTaXplKTsKKwl9IGVsc2UgeworCQlvZGRTaXplID0gZGF0YUxlbiAlIHNyY1RyU2l6ZTsKKwl9CisJLyogQWRqdXN0ICJkZXNjQ291bnQiIGR1ZSB0byAib2RkU2l6ZSIgKi8KKwlpZiAob2RkU2l6ZSkgeworCQlkZXNjQ291bnQrKzsKKwl9CisJLyogRmluZCB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3IgbmVlZGVkIGZvciB0b3RhbCAic3JjVHMiICovCisJaWYgKHNyY1RzKSB7CisJCWRlc2NDb3VudCArPSAoKHNyY1RzIC0gMSkgLyBtYXhCbG9ja1NpemUpICsgMTsKKwl9CisKKwkvKiBDaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mICJkZXNjQ291bnQiIGRpc2NyaXB0b3JzIGluIHRoZSByaW5nICovCisJcFByb2cgPSBwUmluZy0+cEhlYWQ7CisJZm9yIChjb3VudCA9IDA7IChkZXNjQ291bnQgPD0gcFJpbmctPm51bSkgJiYgKGNvdW50IDwgZGVzY0NvdW50KTsKKwkgICAgIGNvdW50KyspIHsKKwkJaWYgKChwUHJvZy0+Y3RsLmhpICYgZG1hY0h3X0RFU0NfRlJFRSkgPT0gMCkgeworCQkJLyogU3VmZmljaWVudCBkZXNjcmlwdG9ycyBhcmUgbm90IGF2YWlsYWJsZSAqLworCQkJcmV0dXJuIC0zOworCQl9CisJCXBQcm9nID0gKGRtYWNId19ERVNDX3QgKikgcFByb2ctPmxscDsKKwl9CisKKwkvKiBSZW1lbWJlciB0aGUgbGluayBsaXN0IGl0ZW0gdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbCByZWdpc3RlcnMgKi8KKwlwU3RhcnQgPSBwUHJvZyA9IHBSaW5nLT5wSGVhZDsKKwkvKiBNYWtlIGEgbGluayBsaXN0IHdpdGggImRlc2NDb3VudCg9Y291bnQpIiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgKi8KKwl3aGlsZSAoY291bnQpIHsKKwkJLyogUmVzZXQgY2hhbm5lbCBjb250cm9sIGluZm9ybWF0aW9uICovCisJCXBQcm9nLT5jdGwubG8gPSAwOworCQkvKiBFbmFibGUgc291cmNlIGdhdGhlciBpZiBjb25maWd1cmVkICovCisJCWlmIChwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCkgeworCQkJcFByb2ctPmN0bC5sbyB8PSBkbWFjSHdfUkVHX0NUTF9TR19FTkFCTEU7CisJCX0KKwkJLyogRW5hYmxlIGRlc3RpbmF0aW9uIHNjYXR0ZXIgaWYgY29uZmlndXJlZCAqLworCQlpZiAocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoKSB7CisJCQlwUHJvZy0+Y3RsLmxvIHw9IGRtYWNId19SRUdfQ1RMX0RTX0VOQUJMRTsKKwkJfQorCQkvKiBTZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJCXBQcm9nLT5zYXIgPSAodWludDMyX3QpIHBTcmNBZGRyOworCQlwUHJvZy0+ZGFyID0gKHVpbnQzMl90KSBwRHN0QWRkcjsKKwkJLyogVXNlICJkZXZDdGwiIHRvIG1hcmsgdGhhdCB1c2VyIG1lbW9yeSBuZWVkIHRvIGJlIGZyZWVkIGxhdGVyIGlmIG5lZWRlZCAqLworCQlpZiAocFByb2cgPT0gcFJpbmctPnBIZWFkKSB7CisJCQlwUHJvZy0+ZGV2Q3RsID0gZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlk7CisJCX0gZWxzZSB7CisJCQlwUHJvZy0+ZGV2Q3RsID0gMDsKKwkJfQorCisJCWJsa1RzID0gc3JjVHM7CisKKwkJLyogU3BlY2lhbCB0cmVhdG1lYW50IGZvciBsYXN0IGRlc2NyaXB0b3IgKi8KKwkJaWYgKGNvdW50ID09IDEpIHsKKwkJCS8qIE1hcmsgdGhlIGxhc3QgZGVzY3JpcHRvciAqLworCQkJcFByb2ctPmN0bC5sbyAmPQorCQkJICAgIH4oZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8CisJCQkgICAgICBkbWFjSHdfUkVHX0NUTF9MTFBfU1JDX0VOKTsKKwkJCS8qIFRyZWF0bWVudCBmb3Igb2RkIGRhdGEgYnl0ZXMgKi8KKwkJCWlmIChvZGRTaXplKSB7CisJCQkJLyogQWRqdXN0IGZvciBzaW5nbGUgYnl0ZSB0cmFuc2FjdGlvbiB3aWR0aCAqLworCQkJCXN3aXRjaCAocENvbmZpZy0+dHJhbnNmZXJUeXBlKSB7CisJCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTToKKwkJCQkJZHN0VHJXaWR0aCA9CisJCQkJCSAgICBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzg7CisJCQkJCWJsa1RzID0KKwkJCQkJICAgIChvZGRTaXplIC8gc3JjVHJTaXplKSArCisJCQkJCSAgICAoKG9kZFNpemUgJSBzcmNUclNpemUpID8gMSA6IDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMOgorCQkJCQlzcmNUcldpZHRoID0KKwkJCQkJICAgIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfODsKKwkJCQkJYmxrVHMgPSBvZGRTaXplOworCQkJCQlicmVhazsKKwkJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19NRU06CisJCQkJCXNyY1RyV2lkdGggPQorCQkJCQkgICAgZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF84OworCQkJCQlkc3RUcldpZHRoID0KKwkJCQkJICAgIGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfODsKKwkJCQkJYmxrVHMgPSBvZGRTaXplOworCQkJCQlicmVhazsKKwkJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fUEVSSVBIRVJBTDoKKwkJCQkJLyogRG8gbm90IGFkanVzdCB0aGUgdHJhbnNhY3Rpb24gd2lkdGggICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3JjVHMgLT0gYmxrVHM7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3JjVHMgLyBtYXhCbG9ja1NpemUpIHsKKwkJCQlibGtUcyA9IG1heEJsb2NrU2l6ZTsKKwkJCX0KKwkJCS8qIFJlbWFpbmluZyBzb3VyY2UgdHJhbnNhY3Rpb25zIGZvciBuZXh0IGl0ZXJhdGlvbiAqLworCQkJc3JjVHMgLT0gYmxrVHM7CisJCX0KKwkJLyogTXVzdCBoYXZlIGEgdmFsaWQgc291cmNlIHRyYW5zYWN0aW9ucyAqLworCQlkbWFjSHdfQVNTRVJUKGJsa1RzID4gMCk7CisJCS8qIFNldCBjb250cm9sIGluZm9ybWF0aW9uICovCisJCWlmIChwQ29uZmlnLT5mbG93Q29udHJvbGVyID09IGRtYWNId19GTE9XX0NPTlRST0xfRE1BKSB7CisJCQlwUHJvZy0+Y3RsLmxvIHw9IHBDb25maWctPnRyYW5zZmVyVHlwZSB8CisJCQkgICAgcENvbmZpZy0+c3JjVXBkYXRlIHwKKwkJCSAgICBwQ29uZmlnLT5kc3RVcGRhdGUgfAorCQkJICAgIHNyY1RyV2lkdGggfAorCQkJICAgIGRzdFRyV2lkdGggfAorCQkJICAgIHBDb25maWctPnNyY01heEJ1cnN0V2lkdGggfAorCQkJICAgIHBDb25maWctPmRzdE1heEJ1cnN0V2lkdGggfAorCQkJICAgIHBDb25maWctPnNyY01hc3RlckludGVyZmFjZSB8CisJCQkgICAgcENvbmZpZy0+ZHN0TWFzdGVySW50ZXJmYWNlIHwgZG1hY0h3X1JFR19DVExfSU5UX0VOOworCQl9IGVsc2UgeworCQkJdWludDMyX3QgdHJhbnNmZXJUeXBlID0gMDsKKwkJCXN3aXRjaCAocENvbmZpZy0+dHJhbnNmZXJUeXBlKSB7CisJCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNOgorCQkJCXRyYW5zZmVyVHlwZSA9IGRtYWNId19SRUdfQ1RMX1RURkNfUE1fUEVSSTsKKwkJCQlicmVhazsKKwkJCWNhc2UgZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUw6CisJCQkJdHJhbnNmZXJUeXBlID0gZG1hY0h3X1JFR19DVExfVFRGQ19NUF9QRVJJOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkbWFjSHdfQVNTRVJUKDApOworCQkJfQorCQkJcFByb2ctPmN0bC5sbyB8PSB0cmFuc2ZlclR5cGUgfAorCQkJICAgIHBDb25maWctPnNyY1VwZGF0ZSB8CisJCQkgICAgcENvbmZpZy0+ZHN0VXBkYXRlIHwKKwkJCSAgICBzcmNUcldpZHRoIHwKKwkJCSAgICBkc3RUcldpZHRoIHwKKwkJCSAgICBwQ29uZmlnLT5zcmNNYXhCdXJzdFdpZHRoIHwKKwkJCSAgICBwQ29uZmlnLT5kc3RNYXhCdXJzdFdpZHRoIHwKKwkJCSAgICBwQ29uZmlnLT5zcmNNYXN0ZXJJbnRlcmZhY2UgfAorCQkJICAgIHBDb25maWctPmRzdE1hc3RlckludGVyZmFjZSB8IGRtYWNId19SRUdfQ1RMX0lOVF9FTjsKKwkJfQorCisJCS8qIFNldCBibG9jayB0cmFuc2FjdGlvbiBzaXplICovCisJCXBQcm9nLT5jdGwuaGkgPSBibGtUcyAmIGRtYWNId19SRUdfQ1RMX0JMT0NLX1RTX01BU0s7CisJCS8qIExvb2sgZm9yIG5leHQgZGVzY3JpcHRvciAqLworCQlpZiAoY291bnQgPiAxKSB7CisJCQkvKiBQb2ludCB0byB0aGUgbmV4dCBkZXNjcmlwdG9yICovCisJCQlwUHJvZyA9IChkbWFjSHdfREVTQ190ICopIHBQcm9nLT5sbHA7CisKKwkJCS8qIFVwZGF0ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIG5leHQgaXRlcmF0aW9uICovCisJCQlzd2l0Y2ggKHBDb25maWctPnRyYW5zZmVyVHlwZSkgeworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTToKKwkJCQlpZiAocENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoKSB7CisJCQkJCXBEc3RBZGRyID0KKwkJCQkJICAgIChjaGFyICopcERzdEFkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemUgKworCQkJCQkgICAgKCgoYmxrVHMgKiBzcmNUclNpemUpIC8KKwkJCQkJICAgICAgcENvbmZpZy0+ZHN0U2NhdHRlcldpZHRoKSAqCisJCQkJCSAgICAgcENvbmZpZy0+ZHN0U2NhdHRlckp1bXApOworCQkJCX0gZWxzZSB7CisJCQkJCXBEc3RBZGRyID0KKwkJCQkJICAgIChjaGFyICopcERzdEFkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTDoKKwkJCQlpZiAocENvbmZpZy0+c3JjR2F0aGVyV2lkdGgpIHsKKwkJCQkJcFNyY0FkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZSArCisJCQkJCSAgICAoKChibGtUcyAqIHNyY1RyU2l6ZSkgLworCQkJCQkgICAgICBwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCkgKgorCQkJCQkgICAgIHBDb25maWctPnNyY0dhdGhlckp1bXApOworCQkJCX0gZWxzZSB7CisJCQkJCXBTcmNBZGRyID0KKwkJCQkJICAgIChjaGFyICopcFNyY0FkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNOgorCQkJCWlmIChwQ29uZmlnLT5kc3RTY2F0dGVyV2lkdGgpIHsKKwkJCQkJcERzdEFkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZSArCisJCQkJCSAgICAoKChibGtUcyAqIHNyY1RyU2l6ZSkgLworCQkJCQkgICAgICBwQ29uZmlnLT5kc3RTY2F0dGVyV2lkdGgpICoKKwkJCQkJICAgICBwQ29uZmlnLT5kc3RTY2F0dGVySnVtcCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcERzdEFkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZTsKKwkJCQl9CisKKwkJCQlpZiAocENvbmZpZy0+c3JjR2F0aGVyV2lkdGgpIHsKKwkJCQkJcFNyY0FkZHIgPQorCQkJCQkgICAgKGNoYXIgKilwRHN0QWRkciArCisJCQkJCSAgICBibGtUcyAqIHNyY1RyU2l6ZSArCisJCQkJCSAgICAoKChibGtUcyAqIHNyY1RyU2l6ZSkgLworCQkJCQkgICAgICBwQ29uZmlnLT5zcmNHYXRoZXJXaWR0aCkgKgorCQkJCQkgICAgIHBDb25maWctPnNyY0dhdGhlckp1bXApOworCQkJCX0gZWxzZSB7CisJCQkJCXBTcmNBZGRyID0KKwkJCQkJICAgIChjaGFyICopcFNyY0FkZHIgKworCQkJCQkgICAgYmxrVHMgKiBzcmNUclNpemU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX1BFUklQSEVSQUw6CisJCQkJLyogRG8gbm90IGFkanVzdCB0aGUgYWRkcmVzcyAqLworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkbWFjSHdfQVNTRVJUKDApOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQXQgdGhlIGVuZCBvZiB0cmFuc2ZlciAic3JjVHMiIG11c3QgYmUgemVybyAqLworCQkJZG1hY0h3X0FTU0VSVChzcmNUcyA9PSAwKTsKKwkJfQorCQljb3VudC0tOworCX0KKworCS8qIFJlbWVtYmVyIHRoZSBkZXNjcmlwdG9yIHRvIGluaXRpYWxpemUgdGhlIHJlZ2lzdGVycyAqLworCWlmIChwUmluZy0+cFByb2cgPT0gZG1hY0h3X0RFU0NfSU5JVCkgeworCQlwUmluZy0+cFByb2cgPSBwU3RhcnQ7CisJfQorCS8qIEluZGljYXRlIHRoYXQgdGhlIGRlc2NyaXB0b3IgaXMgdXBkYXRlZCAqLworCXBSaW5nLT5wRW5kID0gcFByb2c7CisJLyogSGVhZCBwb2ludGluZyB0byB0aGUgbmV4dCBkZXNjcmlwdG9yICovCisJcFJpbmctPnBIZWFkID0gKGRtYWNId19ERVNDX3QgKikgcFByb2ctPmxscDsKKwkvKiBVcGRhdGUgVGFpbCBwb2ludGVyIGlmIGRlc3RpbmF0aW9uIGlzIGEgcGVyaXBoZXJhbCwKKwkgICBiZWNhdXNlIG5vIG9uZSBpcyBnb2luZyB0byByZWFkIGZyb20gdGhlIHBUYWlsCisJICovCisJaWYgKCFkbWFjSHdfRFNUX0lTX01FTU9SWShwQ29uZmlnLT50cmFuc2ZlclR5cGUpKSB7CisJCXBSaW5nLT5wVGFpbCA9IHBSaW5nLT5wSGVhZDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBQcm92aWRlcyBETUEgY29udHJvbGxlciBhdHRyaWJ1dGVzCisqCisqCisqICBAcmV0dXJuICBETUEgY29udHJvbGxlciBhdHRyaWJ1dGVzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgZG1hY0h3X2dldERtYUNvbnRyb2xsZXJBdHRyaWJ1dGUoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSAgRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkJCSAgZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX2UgYXR0cgkvKiAgWyBJTiBdICBETUEgQ29udHJvbGVyIGF0dHJpYnV0ZSBvZiB0eXBlICBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisKKwlzd2l0Y2ggKGF0dHIpIHsKKwljYXNlIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9DSEFOTkVMX05VTToKKwkJcmV0dXJuIGRtYWNId19HRVRfTlVNX0NIQU5ORUwocENibGstPm1vZHVsZSk7CisJY2FzZSBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfQ0hBTk5FTF9NQVhfQkxPQ0tfU0laRToKKwkJcmV0dXJuICgxIDw8CisJCQkgKGRtYWNId19HRVRfTUFYX0JMT0NLX1NJWkUKKwkJCSAgKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5tb2R1bGUpICsgMikpIC0gODsKKwljYXNlIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9NQVNURVJfSU5URl9OVU06CisJCXJldHVybiBkbWFjSHdfR0VUX05VTV9JTlRFUkZBQ0UocENibGstPm1vZHVsZSk7CisJY2FzZSBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfQ0hBTk5FTF9CVVNfV0lEVEg6CisJCXJldHVybiAzMiA8PCBkbWFjSHdfR0VUX0NIQU5ORUxfREFUQV9XSURUSChwQ2Jsay0+bW9kdWxlLAorCQkJCQkJCSAgIHBDYmxrLT5jaGFubmVsKTsKKwljYXNlIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9DSEFOTkVMX0ZJRk9fU0laRToKKwkJcmV0dXJuIEdldEZpZm9TaXplKGhhbmRsZSk7CisJfQorCWRtYWNId19BU1NFUlQoMCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL2RtYWMvZG1hY0h3X2V4dHJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3YjQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvZG1hYy9kbWFjSHdfZXh0cmEuYwpAQCAtMCwwICsxLDEwMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBkbWFjSHdfZXh0cmEuYworKgorKiAgQGJyaWVmICAgRXh0cmEgTG93IGxldmVsIERNQSBjb250cm9sbGVyIGRyaXZlciByb3V0aW5lcworKgorKiAgQG5vdGUKKyoKKyogICBUaGVzZSByb3V0aW5lcyBwcm92aWRlIGJhc2ljIERNQSBmdW5jdGlvbmFsaXR5IG9ubHkuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxjc3AvZG1hY0h3Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvZG1hY0h3X3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2RtYWNId19wcml2Lmg+CisKK2V4dGVybiBkbWFjSHdfQ0JMS190IGRtYWNId19nQ2Jsa1tkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlRdOwkvKiBEZWNsYXJlZCBpbiBkbWFjSHcuYyAqLworCisvKiAtLS0tIEV4dGVybmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAtLS0tIEludGVybmFsIFVzZSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIE92ZXJ3cml0ZXMgZGF0YSBsZW5ndGggaW4gdGhlIGRlc2NyaXB0b3IKKyoKKyogIFRoaXMgZnVuY3Rpb24gb3ZlcndyaXRlcyBkYXRhIGxlbmd0aCBpbiB0aGUgZGVzY3JpcHRvcgorKgorKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlCisqICAgICAgICAgIFRoaXMgaXMgb25seSB1c2VkIGZvciBQQ00gY2hhbm5lbAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfc2V0RGF0YUxlbmd0aChkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkgIHNpemVfdCBkYXRhTGVuCS8qICAgWyBJTiBdIERhdGEgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwbGF5IERNQSByZWdpc3RlcnMKKyoKKyogIEByZXR1cm4gIHZvaWQKKyoKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBEaXNwbGF5UmVnaXN0ZXJDb250ZW50cyhpbnQgbW9kdWxlLAkvKiAgIFsgSU4gXSBETUEgQ29udHJvbGxlciB1bml0ICAoMC0xKSAqLworCQkJCSAgICBpbnQgY2hhbm5lbCwJLyogICBbIElOIF0gRE1BIENoYW5uZWwgICAgICAgICAgKDAtNykgLyAtMShhbGwpICovCisJCQkJICAgIGludCAoKmZwUHJpbnQpIChjb25zdCBjaGFyICosIC4uLikJLyogICBbIElOIF0gQ2FsbGJhY2sgdG8gdGhlIHByaW50IGZ1bmN0aW9uICovCisgICAgKSB7CisJaW50IGNoYW47CisKKwkoKmZwUHJpbnQpICgiRGlzcGxheWluZyByZWdpc3RlciBjb250ZW50IFxuXG4iKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgcmF3IHRyYW5zZmVyICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9SQVdfVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHJhdyBibG9jayAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfUkFXX0JMT0NLKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgcmF3IHNyYyB0cmFuc2ZlciAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9SQVdfU1RSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCByYXcgZHN0IHRyYW5zZmVyICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX1JBV19EVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHJhdyBlcnJvciAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfUkFXX0VSUk9SKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBzdGF0IHRyYW5zZmVyICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX1NUQVRfVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgYmxvY2sgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9CTE9DSyhtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgc3JjIHRyYW5zZmVyICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9TVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgZHN0IHRyYW5zZmVyICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9EVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IHN0YXQgZXJyb3IgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfU1RBVF9FUlJPUihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgbWFzayB0cmFuc2ZlciAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9NQVNLX1RSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIGJsb2NrICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfQkxPQ0sobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIHNyYyB0cmFuc2ZlciAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfU1RSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIGRzdCB0cmFuc2ZlciAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfRFRSQU4obW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBtYXNrIGVycm9yICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX01BU0tfRVJST1IobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IGNsZWFyIHRyYW5zZmVyICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfQ0xFQVJfVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IGNsZWFyIGJsb2NrICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfQ0xFQVJfQkxPQ0sobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IEludGVycnVwdCBjbGVhciBzcmMgdHJhbnNmZXIgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfSU5UX0NMRUFSX1NUUkFOKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBJbnRlcnJ1cHQgY2xlYXIgZHN0IHRyYW5zZmVyICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0lOVF9DTEVBUl9EVFJBTihtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogSW50ZXJydXB0IGNsZWFyIGVycm9yICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19JTlRfQ0xFQVJfRVJST1IobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogU1cgc291cmNlIHJlcSAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19TV19IU19TUkNfUkVRKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBTVyBkZXN0IHJlcSAgICAgICAgICAgICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX1NXX0hTX0RTVF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIHNvdXJjZSBzaWduYWwgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfU1JDX1NHTF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIGRlc3Qgc2lnbmFsICAgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfRFNUX1NHTF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIHNvdXJjZSBsYXN0ICAgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfU1JDX0xTVF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCJNb2R1bGUgJWQ6IFNXIGRlc3QgbGFzdCAgICAgICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICBtb2R1bGUsICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1dfSFNfRFNUX0xTVF9SRVEobW9kdWxlKSkpOworCSgqZnBQcmludCkgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogbWlzYyBjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19NSVNDX0NGRyhtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogbWlzYyBjaGFubmVsIGVuYWJsZSAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRShtb2R1bGUpKSk7CisJKCpmcFByaW50KSAoIk1vZHVsZSAlZDogbWlzYyBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgIG1vZHVsZSwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19NSVNDX0lEKG1vZHVsZSkpKTsKKwkoKmZwUHJpbnQpICgiTW9kdWxlICVkOiBtaXNjIHRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgbW9kdWxlLCAodWludDMyX3QpIChkbWFjSHdfUkVHX01JU0NfVEVTVChtb2R1bGUpKSk7CisKKwlpZiAoY2hhbm5lbCA9PSAtMSkgeworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgODsgY2hhbisrKSB7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19TQVIobW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3RpbmF0aW9uICAgICAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfREFSKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBMTFAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX0xMUChtb2R1bGUsIGNoYW4pKSk7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29udHJvbCAoTE8pICAgICAgICAgICAgIDB4JVhcbiIsCisJCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DVExfTE8obW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIENvbnRyb2wgKEhJKSAgICAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ1RMX0hJKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBTb3VyY2UgU3RhdHMgICAgICAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX1NTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBEZXN0IFN0YXRzICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX0RTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJCSgqZnBQcmludCkKKwkJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBTb3VyY2UgU3RhdHMgQWRkciAgICAgICAgMHglWFxuIiwKKwkJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX1NTVEFUQVIobW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3QgU3RhdHMgQWRkciAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfRFNUQVRBUihtb2R1bGUsIGNoYW4pKSk7CisJCQkoKmZwUHJpbnQpCisJCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29uZmlnIChMTykgICAgICAgICAgICAgIDB4JVhcbiIsCisJCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DRkdfTE8obW9kdWxlLCBjaGFuKSkpOworCQkJKCpmcFByaW50KQorCQkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIENvbmZpZyAoSEkpICAgICAgICAgICAgICAweCVYXG4iLAorCQkJICAgICBtb2R1bGUsIGNoYW4sCisJCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ0ZHX0hJKG1vZHVsZSwgY2hhbikpKTsKKwkJfQorCX0gZWxzZSB7CisJCWNoYW4gPSBjaGFubmVsOworCQkoKmZwUHJpbnQpCisJCSAgICAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlICAgICAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLCAodWludDMyX3QpIChkbWFjSHdfUkVHX1NBUihtb2R1bGUsIGNoYW4pKSk7CisJCSgqZnBQcmludCkKKwkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3RpbmF0aW9uICAgICAgICAgICAgICAweCVYXG4iLAorCQkgICAgIG1vZHVsZSwgY2hhbiwgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19EQVIobW9kdWxlLCBjaGFuKSkpOworCQkoKmZwUHJpbnQpCisJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBMTFAgICAgICAgICAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgICBtb2R1bGUsIGNoYW4sICh1aW50MzJfdCkgKGRtYWNId19SRUdfTExQKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29udHJvbCAoTE8pICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ1RMX0xPKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgQ29udHJvbCAoSEkpICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfQ1RMX0hJKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlIFN0YXRzICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLCAodWludDMyX3QpIChkbWFjSHdfUkVHX1NTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgRGVzdCBTdGF0cyAgICAgICAgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLCAodWludDMyX3QpIChkbWFjSHdfUkVHX0RTVEFUKG1vZHVsZSwgY2hhbikpKTsKKwkJKCpmcFByaW50KQorCQkgICAgKCJNb2R1bGUgJWQ6IENoYW5uZWwgJWQgU291cmNlIFN0YXRzIEFkZHIgICAgICAgIDB4JVhcbiIsCisJCSAgICAgbW9kdWxlLCBjaGFuLAorCQkgICAgICh1aW50MzJfdCkgKGRtYWNId19SRUdfU1NUQVRBUihtb2R1bGUsIGNoYW4pKSk7CisJCSgqZnBQcmludCkKKwkJICAgICgiTW9kdWxlICVkOiBDaGFubmVsICVkIERlc3QgU3RhdHMgQWRkciAgICAgICAgICAweCVYXG4iLAorCQkgICAgIG1vZHVsZSwgY2hhbiwKKwkJICAgICAodWludDMyX3QpIChkbWFjSHdfUkVHX0RTVEFUQVIobW9kdWxlLCBjaGFuKSkpOworCQkoKmZwUHJpbnQpCisJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBDb25maWcgKExPKSAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgICBtb2R1bGUsIGNoYW4sCisJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DRkdfTE8obW9kdWxlLCBjaGFuKSkpOworCQkoKmZwUHJpbnQpCisJCSAgICAoIk1vZHVsZSAlZDogQ2hhbm5lbCAlZCBDb25maWcgKEhJKSAgICAgICAgICAgICAgMHglWFxuIiwKKwkJICAgICBtb2R1bGUsIGNoYW4sCisJCSAgICAgKHVpbnQzMl90KSAoZG1hY0h3X1JFR19DRkdfSEkobW9kdWxlLCBjaGFuKSkpOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEhlbHBlciBmdW5jdGlvbiB0byBkaXNwbGF5IGRlc2NyaXB0b3IgcmluZworKgorKiAgQHJldHVybiAgdm9pZAorKgorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIERpc3BsYXlEZXNjUmluZyh2b2lkICpwRGVzY3JpcHRvciwJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKwkJCSAgICBpbnQgKCpmcFByaW50KSAoY29uc3QgY2hhciAqLCAuLi4pCS8qICAgWyBJTiBdIENhbGxiYWNrIHRvIHRoZSBwcmludCBmdW5jdGlvbiAqLworICAgICkgeworCWRtYWNId19ERVNDX1JJTkdfdCAqcFJpbmcgPSBkbWFjSHdfR0VUX0RFU0NfUklORyhwRGVzY3JpcHRvcik7CisJZG1hY0h3X0RFU0NfdCAqcFN0YXJ0OworCisJaWYgKHBSaW5nLT5wSGVhZCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlwU3RhcnQgPSBwUmluZy0+cEhlYWQ7CisKKwl3aGlsZSAoKGRtYWNId19ERVNDX3QgKikgcFN0YXJ0LT5sbHAgIT0gcFJpbmctPnBIZWFkKSB7CisJCWlmIChwU3RhcnQgPT0gcFJpbmctPnBIZWFkKSB7CisJCQkoKmZwUHJpbnQpICgiSGVhZFxuIik7CisJCX0KKwkJaWYgKHBTdGFydCA9PSBwUmluZy0+cFRhaWwpIHsKKwkJCSgqZnBQcmludCkgKCJUYWlsXG4iKTsKKwkJfQorCQlpZiAocFN0YXJ0ID09IHBSaW5nLT5wUHJvZykgeworCQkJKCpmcFByaW50KSAoIlByb2dcbiIpOworCQl9CisJCWlmIChwU3RhcnQgPT0gcFJpbmctPnBFbmQpIHsKKwkJCSgqZnBQcmludCkgKCJFbmRcbiIpOworCQl9CisJCWlmIChwU3RhcnQgPT0gcFJpbmctPnBGcmVlKSB7CisJCQkoKmZwUHJpbnQpICgiRnJlZVxuIik7CisJCX0KKwkJKCpmcFByaW50KSAoIjB4JVg6XG4iLCAodWludDMyX3QpIHBTdGFydCk7CisJCSgqZnBQcmludCkgKCJzYXIgICAgMHglMFhcbiIsIHBTdGFydC0+c2FyKTsKKwkJKCpmcFByaW50KSAoImRhciAgICAweCUwWFxuIiwgcFN0YXJ0LT5kYXIpOworCQkoKmZwUHJpbnQpICgibGxwICAgIDB4JTBYXG4iLCBwU3RhcnQtPmxscCk7CisJCSgqZnBQcmludCkgKCJjdGwubG8gMHglMFhcbiIsIHBTdGFydC0+Y3RsLmxvKTsKKwkJKCpmcFByaW50KSAoImN0bC5oaSAweCUwWFxuIiwgcFN0YXJ0LT5jdGwuaGkpOworCQkoKmZwUHJpbnQpICgic3N0YXQgIDB4JTBYXG4iLCBwU3RhcnQtPnNzdGF0KTsKKwkJKCpmcFByaW50KSAoImRzdGF0ICAweCUwWFxuIiwgcFN0YXJ0LT5kc3RhdCk7CisJCSgqZnBQcmludCkgKCJkZXZDdGwgMHglMFhcbiIsIHBTdGFydC0+ZGV2Q3RsKTsKKworCQlwU3RhcnQgPSAoZG1hY0h3X0RFU0NfdCAqKSBwU3RhcnQtPmxscDsKKwl9CisJaWYgKHBTdGFydCA9PSBwUmluZy0+cEhlYWQpIHsKKwkJKCpmcFByaW50KSAoIkhlYWRcbiIpOworCX0KKwlpZiAocFN0YXJ0ID09IHBSaW5nLT5wVGFpbCkgeworCQkoKmZwUHJpbnQpICgiVGFpbFxuIik7CisJfQorCWlmIChwU3RhcnQgPT0gcFJpbmctPnBQcm9nKSB7CisJCSgqZnBQcmludCkgKCJQcm9nXG4iKTsKKwl9CisJaWYgKHBTdGFydCA9PSBwUmluZy0+cEVuZCkgeworCQkoKmZwUHJpbnQpICgiRW5kXG4iKTsKKwl9CisJaWYgKHBTdGFydCA9PSBwUmluZy0+cEZyZWUpIHsKKwkJKCpmcFByaW50KSAoIkZyZWVcbiIpOworCX0KKwkoKmZwUHJpbnQpICgiMHglWDpcbiIsICh1aW50MzJfdCkgcFN0YXJ0KTsKKwkoKmZwUHJpbnQpICgic2FyICAgIDB4JTBYXG4iLCBwU3RhcnQtPnNhcik7CisJKCpmcFByaW50KSAoImRhciAgICAweCUwWFxuIiwgcFN0YXJ0LT5kYXIpOworCSgqZnBQcmludCkgKCJsbHAgICAgMHglMFhcbiIsIHBTdGFydC0+bGxwKTsKKwkoKmZwUHJpbnQpICgiY3RsLmxvIDB4JTBYXG4iLCBwU3RhcnQtPmN0bC5sbyk7CisJKCpmcFByaW50KSAoImN0bC5oaSAweCUwWFxuIiwgcFN0YXJ0LT5jdGwuaGkpOworCSgqZnBQcmludCkgKCJzc3RhdCAgMHglMFhcbiIsIHBTdGFydC0+c3N0YXQpOworCSgqZnBQcmludCkgKCJkc3RhdCAgMHglMFhcbiIsIHBTdGFydC0+ZHN0YXQpOworCSgqZnBQcmludCkgKCJkZXZDdGwgMHglMFhcbiIsIHBTdGFydC0+ZGV2Q3RsKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENoZWNrIGlmIERNQSBjaGFubmVsIGlzIHRoZSBmbG93IGNvbnRyb2xsZXIKKyoKKyogIEByZXR1cm4gIDEgOiBJZiBETUEgaXMgYSBmbG93IGNvbnRyb2xlcgorKiAgICAgICAgICAgMCA6IFBlcmlwaGVyYWwgaXMgdGhlIGZsb3cgY29udHJvbGxlcgorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgaW50IERtYUlzRmxvd0NvbnRyb2xsZXIodm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKyAgICApIHsKKwl1aW50MzJfdCB0dGZjID0KKwkgICAgKGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yKSktPnBUYWlsLT5jdGwuCisJICAgIGxvICYgZG1hY0h3X1JFR19DVExfVFRGQ19NQVNLOworCisJc3dpdGNoICh0dGZjKSB7CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX01NX0RNQUM6CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX01QX0RNQUM6CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX1BNX0RNQUM6CisJY2FzZSBkbWFjSHdfUkVHX0NUTF9UVEZDX1BQX0RNQUM6CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgT3ZlcndyaXRlcyBkYXRhIGxlbmd0aCBpbiB0aGUgZGVzY3JpcHRvcgorKgorKiAgVGhpcyBmdW5jdGlvbiBvdmVyd3JpdGVzIGRhdGEgbGVuZ3RoIGluIHRoZSBkZXNjcmlwdG9yCisqCisqCisqICBAcmV0dXJuICAgdm9pZAorKgorKiAgQG5vdGUKKyogICAgICAgICAgVGhpcyBpcyBvbmx5IHVzZWQgZm9yIFBDTSBjaGFubmVsCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19zZXREYXRhTGVuZ3RoKGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJICB2b2lkICpwRGVzY3JpcHRvciwJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKwkJCSAgc2l6ZV90IGRhdGFMZW4JLyogICBbIElOIF0gRGF0YSBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICApIHsKKwlkbWFjSHdfREVTQ190ICpwUHJvZzsKKwlkbWFjSHdfREVTQ190ICpwSGVhZDsKKwlpbnQgc3JjVHMgPSAwOworCWludCBzcmNUclNpemUgPSAwOworCisJcEhlYWQgPSAoZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpKS0+cEhlYWQ7CisJcFByb2cgPSBwSGVhZDsKKworCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKwlzcmNUcyA9IGRhdGFMZW4gLyBzcmNUclNpemU7CisJZG8geworCQlwUHJvZy0+Y3RsLmhpID0gc3JjVHMgJiBkbWFjSHdfUkVHX0NUTF9CTE9DS19UU19NQVNLOworCQlwUHJvZyA9IChkbWFjSHdfREVTQ190ICopIHBQcm9nLT5sbHA7CisJfSB3aGlsZSAocFByb2cgIT0gcEhlYWQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2xlYXJzIHRoZSBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBETUEgY2hhbm5lbCBzcGVjaWZpYyBpbnRlcnJ1cHQKKyoKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIGNvbnRleHQgb2YgSVNSCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19jbGVhckludGVycnVwdChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApIHsKKwlkbWFjSHdfQ0JMS190ICpwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCisJZG1hY0h3X1RSQU5fSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfQkxPQ0tfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKKwlkbWFjSHdfRVJST1JfSU5UX0NMRUFSKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJldHVybnMgdGhlIGNhdXNlIG9mIGNoYW5uZWwgc3BlY2lmaWMgRE1BIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjYXVzZSBvZiBpbnRlcnJ1cHQKKyoKKyogIEByZXR1cm4gIEludGVycnVwdCBzdGF0dXMsIGVhY2ggYml0IHJlcHJlc2VudGluZyBhIHNwZWNpZmljIHR5cGUgb2YgaW50ZXJydXB0CisqCisqICBAbm90ZQorKiAgICAgU2hvdWxkIGJlIGNhbGxlZCB1bmRlciB0aGUgY29udGV4dCBvZiBJU1IKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYWNId19JTlRFUlJVUFRfU1RBVFVTX2UgZG1hY0h3X2dldEludGVycnVwdFN0YXR1cyhkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApIHsKKwlkbWFjSHdfQ0JMS190ICpwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCWRtYWNId19JTlRFUlJVUFRfU1RBVFVTX2Ugc3RhdHVzID0gZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfTk9ORTsKKworCWlmIChkbWFjSHdfUkVHX0lOVF9TVEFUX1RSQU4ocENibGstPm1vZHVsZSkgJgorCSAgICAoKDB4MDAwMDAwMDEgPDwgcENibGstPmNoYW5uZWwpKSkgeworCQlzdGF0dXMgfD0gZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfVFJBTlM7CisJfQorCWlmIChkbWFjSHdfUkVHX0lOVF9TVEFUX0JMT0NLKHBDYmxrLT5tb2R1bGUpICYKKwkgICAgKCgweDAwMDAwMDAxIDw8IHBDYmxrLT5jaGFubmVsKSkpIHsKKwkJc3RhdHVzIHw9IGRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0JMT0NLOworCX0KKwlpZiAoZG1hY0h3X1JFR19JTlRfU1RBVF9FUlJPUihwQ2Jsay0+bW9kdWxlKSAmCisJICAgICgoMHgwMDAwMDAwMSA8PCBwQ2Jsay0+Y2hhbm5lbCkpKSB7CisJCXN0YXR1cyB8PSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19FUlJPUjsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5kZW50aWZpZXMgYSBETUEgY2hhbm5lbCBjYXVzaW5nIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbnMgcmV0dXJucyBhIGNoYW5uZWwgY2F1c2luZyBpbnRlcnJ1cHQgb2YgdHlwZSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19lCisqCisqICBAcmV0dXJuICBOVUxMICAgOiBObyBjaGFubmVsIGNhdXNpbmcgRE1BIGludGVycnVwdAorKiAgICAgICAgICAgISBOVUxMIDogSGFuZGxlIHRvIGEgY2hhbm5lbCBjYXVzaW5nIERNQSBpbnRlcnJ1cHQKKyogIEBub3RlCisqICAgICBkbWFjSHdfY2xlYXJJbnRlcnJ1cHQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgdmFsaWQgaGFuZGxlIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X0hBTkRMRV90IGRtYWNId19nZXRJbnRlcnJ1cHRTb3VyY2Uodm9pZCkKK3sKKwl1aW50MzJfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGRtYUNoYW5uZWxDb3VudF8wICsgZG1hQ2hhbm5lbENvdW50XzE7IGkrKykgeworCQlpZiAoKGRtYWNId19SRUdfSU5UX1NUQVRfVFJBTihkbWFjSHdfZ0NibGtbaV0ubW9kdWxlKSAmCisJCSAgICAgKCgweDAwMDAwMDAxIDw8IGRtYWNId19nQ2Jsa1tpXS5jaGFubmVsKSkpCisJCSAgICB8fCAoZG1hY0h3X1JFR19JTlRfU1RBVF9CTE9DSyhkbWFjSHdfZ0NibGtbaV0ubW9kdWxlKSAmCisJCQkoKDB4MDAwMDAwMDEgPDwgZG1hY0h3X2dDYmxrW2ldLmNoYW5uZWwpKSkKKwkJICAgIHx8IChkbWFjSHdfUkVHX0lOVF9TVEFUX0VSUk9SKGRtYWNId19nQ2Jsa1tpXS5tb2R1bGUpICYKKwkJCSgoMHgwMDAwMDAwMSA8PCBkbWFjSHdfZ0NibGtbaV0uY2hhbm5lbCkpKQorCQkgICAgKSB7CisJCQlyZXR1cm4gZG1hY0h3X0NCTEtfVE9fSEFORExFKCZkbWFjSHdfZ0NibGtbaV0pOworCQl9CisJfQorCXJldHVybiBkbWFjSHdfQ0JMS19UT19IQU5ETEUoTlVMTCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEVzdGltYXRlcyBudW1iZXIgb2YgZGVzY3JpcHRvciBuZWVkZWQgdG8gcGVyZm9ybSBjZXJ0YWluIERNQSB0cmFuc2ZlcgorKgorKgorKiAgQHJldHVybiAgT24gZmFpbHVyZSA6IC0xCisqICAgICAgICAgICBPbiBzdWNjZXNzIDogTnVtYmVyIG9mIGRlc2NyaXB0b3IgY291bnQKKyoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfY2FsY3VsYXRlRGVzY3JpcHRvckNvdW50KGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJCSAgICB2b2lkICpwU3JjQWRkciwJLyogICBbIElOIF0gU291cmNlIChQZXJpcGhlcmFsL01lbW9yeSkgYWRkcmVzcyAqLworCQkJCSAgICB2b2lkICpwRHN0QWRkciwJLyogICBbIElOIF0gRGVzdGluYXRpb24gKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkJICAgIHNpemVfdCBkYXRhTGVuCS8qICAgWyBJTiBdIERhdGEgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKSB7CisJaW50IHNyY1RzID0gMDsKKwlpbnQgb2RkU2l6ZSA9IDA7CisJaW50IGRlc2NDb3VudCA9IDA7CisJaW50IGRzdFRyU2l6ZSA9IDA7CisJaW50IHNyY1RyU2l6ZSA9IDA7CisJdWludDMyX3QgbWF4QmxvY2tTaXplID0gZG1hY0h3X01BWF9CTE9DS1NJWkU7CisJZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX2UgZHN0VHJXaWR0aDsKKwlkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfZSBzcmNUcldpZHRoOworCisJZHN0VHJTaXplID0gZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGgpOworCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoKTsKKworCS8qIFNraXAgVHggaWYgYnVmZmVyIGlzIE5VTEwgIG9yIGxlbmd0aCBpcyB1bmtub3duICovCisJaWYgKChwU3JjQWRkciA9PSBOVUxMKSB8fCAocERzdEFkZHIgPT0gTlVMTCkgfHwgKGRhdGFMZW4gPT0gMCkpIHsKKwkJLyogRG8gbm90IGluaXRpYXRlIHRyYW5zZmVyICovCisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBFbnN1cmUgc2NhdHRlciBhbmQgZ2F0aGVyIGFyZSB0cmFuc2FjdGlvbiBhbGlnbmVkICovCisJaWYgKHBDb25maWctPnNyY0dhdGhlcldpZHRoICUgc3JjVHJTaXplCisJICAgIHx8IHBDb25maWctPmRzdFNjYXR0ZXJXaWR0aCAlIGRzdFRyU2l6ZSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgICBCYWNrZ3JvdW5kIDE6IERNQUMgY2FuIG5vdCBwZXJmb3JtIERNQSBpZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBhcmUKKwkgICBub3QgcHJvcGVybHkgYWxpZ25lZCB3aXRoIHRoZSBjaGFubmVsJ3MgdHJhbnNhY3Rpb24gd2lkdGguIFNvLCBmb3Igc3VjY2Vzc2Z1bAorCSAgIERNQSB0cmFuc2ZlciwgdHJhbnNhY3Rpb24gd2lkdGggbXVzdCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBhbGlnbm1lbnQgb2YgdGhlCisJICAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzLgorCSAqLworCisJLyogQWRqdXN0IGRlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIHdpZHRoIGlmIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgKi8KKwlkc3RUcldpZHRoID0gcENvbmZpZy0+ZHN0TWF4VHJhbnNhY3Rpb25XaWR0aDsKKwl3aGlsZSAoZG1hY0h3X0FERFJFU1NfTUFTSyhkc3RUclNpemUpICYgKHVpbnQzMl90KSBwRHN0QWRkcikgeworCQlkc3RUcldpZHRoID0gZG1hY0h3X0dldE5leHRUcldpZHRoKGRzdFRyV2lkdGgpOworCQlkc3RUclNpemUgPSBkbWFjSHdfR2V0VHJXaWR0aEluQnl0ZXMoZHN0VHJXaWR0aCk7CisJfQorCisJLyogQWRqdXN0IHNvdXJjZSB0cmFuc2FjdGlvbiB3aWR0aCBpZiBzb3VyY2UgYWRkcmVzcyBpcyBub3QgYWxpZ25lZCBwcm9wZXJseSAqLworCXNyY1RyV2lkdGggPSBwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoOworCXdoaWxlIChkbWFjSHdfQUREUkVTU19NQVNLKHNyY1RyU2l6ZSkgJiAodWludDMyX3QpIHBTcmNBZGRyKSB7CisJCXNyY1RyV2lkdGggPSBkbWFjSHdfR2V0TmV4dFRyV2lkdGgoc3JjVHJXaWR0aCk7CisJCXNyY1RyU2l6ZSA9IGRtYWNId19HZXRUcldpZHRoSW5CeXRlcyhzcmNUcldpZHRoKTsKKwl9CisKKwkvKiBGaW5kIHRoZSBtYXhpbXVtIHRyYW5zYWN0aW9uIHBlciBkZXNjcmlwdG9yICovCisJaWYgKHBDb25maWctPm1heERhdGFQZXJCbG9jaworCSAgICAmJiAoKHBDb25maWctPm1heERhdGFQZXJCbG9jayAvIHNyY1RyU2l6ZSkgPAorCQlkbWFjSHdfTUFYX0JMT0NLU0laRSkpIHsKKwkJbWF4QmxvY2tTaXplID0gcENvbmZpZy0+bWF4RGF0YVBlckJsb2NrIC8gc3JjVHJTaXplOworCX0KKworCS8qIEZpbmQgbnVtYmVyIG9mIHNvdXJjZSB0cmFuc2FjdGlvbnMgbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBETUEgdHJhbnNmZXIgKi8KKwlzcmNUcyA9IGRhdGFMZW4gLyBzcmNUclNpemU7CisJLyogRmluZCB0aGUgb2RkIG51bWJlciBvZiBieXRlcyB0aGF0IG5lZWQgdG8gYmUgdHJhbnNmZXJyZWQgYXMgc2luZ2xlIGJ5dGUgdHJhbnNhY3Rpb24gd2lkdGggKi8KKwlpZiAoc3JjVHMgJiYgKGRzdFRyU2l6ZSA+IHNyY1RyU2l6ZSkpIHsKKwkJb2RkU2l6ZSA9IGRhdGFMZW4gJSBkc3RUclNpemU7CisJCS8qIEFkanVzdCBzb3VyY2UgdHJhbnNhY3Rpb24gY291bnQgZHVlIHRvICJvZGRTaXplIiAqLworCQlzcmNUcyA9IHNyY1RzIC0gKG9kZFNpemUgLyBzcmNUclNpemUpOworCX0gZWxzZSB7CisJCW9kZFNpemUgPSBkYXRhTGVuICUgc3JjVHJTaXplOworCX0KKwkvKiBBZGp1c3QgImRlc2NDb3VudCIgZHVlIHRvICJvZGRTaXplIiAqLworCWlmIChvZGRTaXplKSB7CisJCWRlc2NDb3VudCsrOworCX0KKworCS8qIEZpbmQgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9yIG5lZWRlZCBmb3IgdG90YWwgInNyY1RzIiAqLworCWlmIChzcmNUcykgeworCQlkZXNjQ291bnQgKz0gKChzcmNUcyAtIDEpIC8gbWF4QmxvY2tTaXplKSArIDE7CisJfQorCisJcmV0dXJuIGRlc2NDb3VudDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENoZWNrIHRoZSBleGlzdGFuY2Ugb2YgcGVuZGluZyBkZXNjcmlwdG9yCisqCisqICBUaGlzIGZ1bmN0aW9uIGNvbmZpcm1lcyBpZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBkZXNjcmlwdG9yIGluIHRoZSBjaGFpbgorKiAgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbAorKgorKiAgQHJldHVybiAgMSA6IENoYW5uZWwgbmVlZCB0byBiZSBwcm9ncmFtbWVkIHdpdGggcGVuZGluZyBkZXNjcmlwdG9yCisqICAgICAgICAgICAwIDogTm8gbW9yZSBwZW5kaW5nIGRlc2NyaXB0b3IgdG8gcHJvZ3JhbWUgdGhlIGNoYW5uZWwKKyoKKyogIEBub3RlCisqICAgICAtIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIElTUiBpbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nCisqICAgICAgIGRlc2NyaXB0b3IgdG8gcHJvZ3JhbSB0aGUgY2hhbm5lbC4KKyoKKyogICAgIEV4YW1wbGU6CisqCisqICAgICBkbWFjX2lzciAoKQorKiAgICAgeworKiAgICAgICAgIC4uLgorKiAgICAgICAgIGlmIChkbWFjSHdfZGVzY3JpcHRvclBlbmRpbmcgKGhhbmRsZSkpCisqICAgICAgICAgeworKiAgICAgICAgICAgIGRtYWNId19pbml0aWF0ZVRyYW5zZmVyIChoYW5kbGUpOworKiAgICAgICAgIH0KKyogICAgIH0KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IGRtYWNId19kZXNjcmlwdG9yUGVuZGluZyhkbWFjSHdfSEFORExFX3QgaGFuZGxlLAkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCQkgIHZvaWQgKnBEZXNjcmlwdG9yCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisgICAgKSB7CisJZG1hY0h3X0NCTEtfdCAqcENibGsgPSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKTsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCisJLyogTWFrZSBzdXJlIGNoYW5uZWwgaXMgbm90IGJ1c3kgKi8KKwlpZiAoIUNIQU5ORUxfQlVTWShwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCkpIHsKKwkJLyogQ2hlY2sgaWYgcEVuZCBpcyBub3QgcHJvY2Vzc2VkICovCisJCWlmIChwUmluZy0+cEVuZCkgeworCQkJLyogU29tZXRoaW5nIGxlZnQgZm9yIHByb2Nlc3NpbmcgKi8KKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJvZ3JhbSBjaGFubmVsIHJlZ2lzdGVyIHRvIHN0b3AgdHJhbnNmZXIKKyoKKyogIEVuc3VyZXMgdGhlIGNoYW5uZWwgaXMgbm90IGRvaW5nIGFueSB0cmFuc2ZlciBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyoKKyogIEByZXR1cm4gIHZvaWQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X3N0b3BUcmFuc2ZlcihkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrOworCisJcENibGsgPSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKTsKKworCS8qIFN0b3AgdGhlIGNoYW5uZWwgKi8KKwlkbWFjSHdfRE1BX1NUT1AocENibGstPm1vZHVsZSwgcENibGstPmNoYW5uZWwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGVhbGxvY2F0ZXMgc291cmNlIG9yIGRlc3RpbmF0aW9uIG1lbW9yeSwgYWxsb2NhdGVkCisqCisqICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gZGVhbGxvY2F0ZSBkYXRhIG1lbW9yeSB0aGF0IHdhcyBETUFlZCBzdWNjZXNzZnVsbHkKKyoKKyogIEByZXR1cm4gIE9uIGZhaWx1cmUgOiAtMQorKiAgICAgICAgICAgT24gc3VjY2VzcyA6IE51bWJlciBvZiBidWZmZXIgZnJlZWQKKyoKKyogIEBub3RlCisqICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIE9OTFksIHdoZW4gc291cmNlIE9SIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgcG9pbnRpbmcKKyogICAgIHRvIGR5bmFtaWMgbWVtb3J5CisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2ZyZWVNZW0oZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgIFsgSU4gXSBDb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJCSAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworCQkgICB2b2lkICgqZnBGcmVlKSAodm9pZCAqKQkvKiAgIFsgSU4gXSBGdW5jdGlvbiBwb2ludGVyIHRvIGZyZWUgZGF0YSBtZW1vcnkgKi8KKyAgICApIHsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCXVpbnQzMl90IGNvdW50ID0gMDsKKworCWlmIChmcEZyZWUgPT0gTlVMTCkgeworCQlyZXR1cm4gLTE7CisJfQorCisJd2hpbGUgKChwUmluZy0+cEZyZWUgIT0gcFJpbmctPnBUYWlsKQorCSAgICAgICAmJiAocFJpbmctPnBGcmVlLT5jdGwubG8gJiBkbWFjSHdfREVTQ19GUkVFKSkgeworCQlpZiAocFJpbmctPnBGcmVlLT5kZXZDdGwgPT0gZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlkpIHsKKwkJCS8qIElkZW50aWZ5LCB3aGljaCBtZW1vcnkgdG8gZnJlZSAqLworCQkJaWYgKGRtYWNId19EU1RfSVNfTUVNT1JZKHBDb25maWctPnRyYW5zZmVyVHlwZSkpIHsKKwkJCQkoKmZwRnJlZSkgKCh2b2lkICopcFJpbmctPnBGcmVlLT5kYXIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBEZXN0aW5hdGlvbiB3YXMgYSBwZXJpcGhlcmFsICovCisJCQkJKCpmcEZyZWUpICgodm9pZCAqKXBSaW5nLT5wRnJlZS0+c2FyKTsKKwkJCX0KKwkJCS8qIFVubWFyayB1c2VyIG1lbW9yeSB0byBpbmRpY2F0ZSBpdCBpcyBmcmVlZCAqLworCQkJcFJpbmctPnBGcmVlLT5kZXZDdGwgPSB+ZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlk7CisJCX0KKwkJZG1hY0h3X05FWFRfREVTQyhwUmluZywgcEZyZWUpOworCisJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJlcGFyZXMgZGVzY3JpcHRvciByaW5nLCB3aGVuIHNvdXJjZSBwZXJpcGhlcmFsIHdvcmtpbmcgYXMgYSBmbG93IGNvbnRyb2xsZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgdGhlIGRpc2NyaXB0b3IgcmluZyBieSBhbGxvY2F0aW5nIGJ1ZmZlcnMsIHdoZW4gc291cmNlIHBlcmlwaGVyYWwKKyogIGhhcyB0byB3b3JrIGFzIGEgZmxvdyBjb250cm9sbGVyIHRvIHRyYW5zZmVyIGRhdGEgZnJvbToKKyogICAgICAgICAgIC0gUGVyaXBoZXJhbCB0byBtZW1vcnkuCisqCisqICBAcmV0dXJuICBPbiBmYWlsdXJlIDogLTEKKyogICAgICAgICAgIE9uIHN1Y2Nlc3MgOiBOdW1iZXIgb2YgZGVzY3JpcHRvciB1cGRhdGVkCisqCisqCisqICBAbm90ZQorKiAgICAgQ2hhbm5lbCBtdXN0IGJlIGNvbmZpZ3VyZWQgZm9yIHBlcmlwaGVyYWwgdG8gbWVtb3J5IHRyYW5zZmVyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3NldFZhcmlhYmxlRGF0YURlc2NyaXB0b3IoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkJICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCQkgICAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworCQkJCSAgICAgdWludDMyX3Qgc3JjQWRkciwJLyogICBbIElOIF0gU291cmNlIHBlcmlwaGVyYWwgYWRkcmVzcyAqLworCQkJCSAgICAgdm9pZCAqKCpmcEFsbG9jKSAoaW50IGxlbiksCS8qICAgWyBJTiBdIEZ1bmN0aW9uIHBvaW50ZXIgIHRoYXQgcHJvdmlkZXMgZGVzdGluYXRpb24gbWVtb3J5ICovCisJCQkJICAgICBpbnQgbGVuLAkvKiAgIFsgSU4gXSBOdW1iZXIgb2YgYnl0ZXMgImZwQWxsb2MiIHdpbGwgYWxsb2NhdGUgZm9yIGRlc3RpbmF0aW9uICovCisJCQkJICAgICBpbnQgbnVtCS8qICAgWyBJTiBdIE51bWJlciBvZiBkZXNjcmlwdG9yIHRvIHNldCAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisJZG1hY0h3X0RFU0NfdCAqcFByb2cgPSBOVUxMOworCWRtYWNId19ERVNDX3QgKnBMYXN0ID0gTlVMTDsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCXVpbnQzMl90IGRzdEFkZHI7CisJdWludDMyX3QgY29udHJvbFBhcmFtOworCWludCBpOworCisJZG1hY0h3X0FTU0VSVChwQ29uZmlnLT50cmFuc2ZlclR5cGUgPT0KKwkJICAgICAgZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0pOworCisJaWYgKG51bSA+IHBSaW5nLT5udW0pIHsKKwkJcmV0dXJuIC0xOworCX0KKworCXBMYXN0ID0gcFJpbmctPnBFbmQ7CS8qIExhc3QgZGVzY3JpcHRvciB1cGRhdGVkICovCisJcFByb2cgPSBwUmluZy0+cEhlYWQ7CS8qIEZpcnN0IGRlc2NyaXB0b3IgaW4gdGhlIG5ldyBsaXN0ICovCisKKwljb250cm9sUGFyYW0gPSBwQ29uZmlnLT5zcmNVcGRhdGUgfAorCSAgICBwQ29uZmlnLT5kc3RVcGRhdGUgfAorCSAgICBwQ29uZmlnLT5zcmNNYXhUcmFuc2FjdGlvbldpZHRoIHwKKwkgICAgcENvbmZpZy0+ZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCB8CisJICAgIHBDb25maWctPnNyY01hc3RlckludGVyZmFjZSB8CisJICAgIHBDb25maWctPmRzdE1hc3RlckludGVyZmFjZSB8CisJICAgIHBDb25maWctPnNyY01heEJ1cnN0V2lkdGggfAorCSAgICBwQ29uZmlnLT5kc3RNYXhCdXJzdFdpZHRoIHwKKwkgICAgZG1hY0h3X1JFR19DVExfVFRGQ19QTV9QRVJJIHwKKwkgICAgZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8CisJICAgIGRtYWNId19SRUdfQ1RMX0xMUF9TUkNfRU4gfCBkbWFjSHdfUkVHX0NUTF9JTlRfRU47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJLyogQWxsb2NhdGUgUnggYnVmZmVyIG9ubHkgZm9yIGlkbGUgZGVzY3JpcHRvciAqLworCQlpZiAoKChwUmluZy0+cEhlYWQtPmN0bC5oaSAmIGRtYWNId19ERVNDX0ZSRUUpID09IDApIHx8CisJCSAgICAoKGRtYWNId19ERVNDX3QgKikgcFJpbmctPnBIZWFkLT5sbHAgPT0gcFJpbmctPnBUYWlsKQorCQkgICAgKSB7CisJCQkvKiBSeCBkZXNjcmlwdG9yIGlzIG5vdCBpZGxlICovCisJCQlicmVhazsKKwkJfQorCQkvKiBTZXQgc291cmNlIGFkZHJlc3MgKi8KKwkJcFJpbmctPnBIZWFkLT5zYXIgPSBzcmNBZGRyOworCQlpZiAoZnBBbGxvYykgeworCQkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXIgaW4gZGVzY3JpcHRvciAqLworCQkJZHN0QWRkciA9ICh1aW50MzJfdCkgKCpmcEFsbG9jKSAobGVuKTsKKwkJCS8qIENoZWNrIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJCQlpZiAoZHN0QWRkciA9PSAwKSB7CisJCQkJaWYgKGkgPT0gMCkgeworCQkJCQkvKiBOb3QgYSBzaW5nbGUgZGVzY3JpcHRvciBpcyBhdmFpbGFibGUgKi8KKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIFNldCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJCQlwUmluZy0+cEhlYWQtPmRhciA9IGRzdEFkZHI7CisJCX0KKwkJLyogU2V0IGNvbnRyb2wgaW5mb3JtYXRpb24gKi8KKwkJcFJpbmctPnBIZWFkLT5jdGwubG8gPSBjb250cm9sUGFyYW07CisJCS8qIFVzZSAiZGV2Q3RsIiB0byBtYXJrIHRoZSBtZW1vcnkgdGhhdCBuZWVkIHRvIGJlIGZyZWVkIGxhdGVyICovCisJCXBSaW5nLT5wSGVhZC0+ZGV2Q3RsID0gZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlk7CisJCS8qIERlc2NyaXB0b3IgaXMgbm93IG93bmVkIGJ5IHRoZSBjaGFubmVsICovCisJCXBSaW5nLT5wSGVhZC0+Y3RsLmhpID0gMDsKKwkJLyogUmVtZW1iZXIgdGhlIGRlc2NyaXB0b3IgbGFzdCB1cGRhdGVkICovCisJCXBSaW5nLT5wRW5kID0gcFJpbmctPnBIZWFkOworCQkvKiBVcGRhdGUgbmV4dCBkZXNjcmlwdG9yICovCisJCWRtYWNId19ORVhUX0RFU0MocFJpbmcsIHBIZWFkKTsKKwl9CisKKwkvKiBNYXJrIHRoZSBlbmQgb2YgdGhlIGxpc3QgKi8KKwlwUmluZy0+cEVuZC0+Y3RsLmxvICY9CisJICAgIH4oZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8IGRtYWNId19SRUdfQ1RMX0xMUF9TUkNfRU4pOworCS8qIENvbm5lY3QgdGhlIGxpc3QgKi8KKwlpZiAocExhc3QgIT0gcFByb2cpIHsKKwkJcExhc3QtPmN0bC5sbyB8PQorCQkgICAgZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiB8IGRtYWNId19SRUdfQ1RMX0xMUF9TUkNfRU47CisJfQorCS8qIE1hcmsgdGhlIGRlc2NyaXB0b3JzIGFyZSB1cGRhdGVkICovCisJcENibGstPmRlc2NVcGRhdGVkID0gMTsKKwlpZiAoIXBDYmxrLT52YXJEYXRhU3RhcnRlZCkgeworCQkvKiBMTFAgbXVzdCBiZSBwb2ludGluZyB0byB0aGUgZmlyc3QgZGVzY3JpcHRvciAqLworCQlkbWFjSHdfU0VUX0xMUChwQ2Jsay0+bW9kdWxlLCBwQ2Jsay0+Y2hhbm5lbCwKKwkJCSAgICAgICAodWludDMyX3QpIHBQcm9nIC0gcFJpbmctPnZpcnQyUGh5T2Zmc2V0KTsKKwkJLyogQ2hhbm5lbCwgaGFuZGxpbmcgdmFyaWFibGUgZGF0YSBzdGFydGVkICovCisJCXBDYmxrLT52YXJEYXRhU3RhcnRlZCA9IDE7CisJfQorCisJcmV0dXJuIGk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBSZWFkIGRhdGEgRE1BZWQgdG8gbWVtb3J5CisqCisqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBkYXRhIHRoYXQgaGFzIGJlZW4gRE1BZWQgdG8gbWVtb3J5IHdoaWxlIHRyYW5zZmVyaW5nIGZyb206CisqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CisqCisqICBAcGFyYW0gICAgaGFuZGxlICAgICAtCisqICBAcGFyYW0gICAgcHBCYnVmICAgICAtCisqICBAcGFyYW0gICAgcExlbiAgICAgICAtCisqCisqICBAcmV0dXJuICAwIC0gTm8gbW9yZSBkYXRhIGlzIGF2YWlsYWJsZSB0byByZWFkCisqICAgICAgICAgICAxIC0gTW9yZSBkYXRhIG1pZ2h0IGJlIGF2YWlsYWJsZSB0byByZWFkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3JlYWRUcmFuc2ZlcnJlZERhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCSAgICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdICBDb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJCQkgICAgICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkgICAgICAgdm9pZCAqKnBwQmJ1ZiwJLyogICBbIE9VVCBdIERhdGEgcmVjZWl2ZWQgKi8KKwkJCSAgICAgICBzaXplX3QgKnBMbGVuCS8qICAgWyBPVVQgXSBMZW5ndGggb2YgdGhlIGRhdGEgcmVjZWl2ZWQgKi8KKyAgICApIHsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nID0gZG1hY0h3X0dFVF9ERVNDX1JJTkcocERlc2NyaXB0b3IpOworCisJKHZvaWQpaGFuZGxlOworCisJaWYgKHBDb25maWctPnRyYW5zZmVyTW9kZSAhPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTKSB7CisJCWlmICgoKHBSaW5nLT5wVGFpbC0+Y3RsLmhpICYgZG1hY0h3X0RFU0NfRlJFRSkgPT0gMCkgfHwKKwkJICAgIChwUmluZy0+cFRhaWwgPT0gcFJpbmctPnBIZWFkKQorCQkgICAgKSB7CisJCQkvKiBObyByZWNlaXZlIGRhdGEgYXZhaWxhYmxlICovCisJCQkqcHBCYnVmID0gKGNoYXIgKilOVUxMOworCQkJKnBMbGVuID0gMDsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBSZXR1cm4gcmVhZCBidWZmZXIgYW5kIGxlbmd0aCAqLworCSpwcEJidWYgPSAoY2hhciAqKXBSaW5nLT5wVGFpbC0+ZGFyOworCisJLyogRXh0cmFjdCBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGRhdGEgKi8KKwlpZiAoRG1hSXNGbG93Q29udHJvbGxlcihwRGVzY3JpcHRvcikpIHsKKwkJdWludDMyX3Qgc3JjVHJTaXplID0gMDsKKworCQlzd2l0Y2ggKHBSaW5nLT5wVGFpbC0+Y3RsLmxvICYgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX01BU0spIHsKKwkJY2FzZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfODoKKwkJCXNyY1RyU2l6ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMTY6CisJCQlzcmNUclNpemUgPSAyOworCQkJYnJlYWs7CisJCWNhc2UgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIXzMyOgorCQkJc3JjVHJTaXplID0gNDsKKwkJCWJyZWFrOworCQljYXNlIGRtYWNId19SRUdfQ1RMX1NSQ19UUl9XSURUSF82NDoKKwkJCXNyY1RyU2l6ZSA9IDg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRtYWNId19BU1NFUlQoMCk7CisJCX0KKwkJLyogQ2FsY3VsYXRlIGxlbmd0aCBmcm9tIHRoZSBibG9jayBzaXplICovCisJCSpwTGxlbiA9CisJCSAgICAocFJpbmctPnBUYWlsLT5jdGwuaGkgJiBkbWFjSHdfUkVHX0NUTF9CTE9DS19UU19NQVNLKSAqCisJCSAgICBzcmNUclNpemU7CisJfSBlbHNlIHsKKwkJLyogRXh0cmFjdCBsZW5ndGggZnJvbSB0aGUgc291cmNlIHBlcmlwaGVyYWwgKi8KKwkJKnBMbGVuID0gcFJpbmctPnBUYWlsLT5zc3RhdDsKKwl9CisKKwkvKiBBZHZhbmNlIHRhaWwgdG8gbmV4dCBkZXNjcmlwdG9yICovCisJZG1hY0h3X05FWFRfREVTQyhwUmluZywgcFRhaWwpOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgZGVzY3JpcHRvciBjYXJyeWluZyBjb250cm9sIGluZm9ybWF0aW9uCisqCisqICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBzZW5kIHNwZWNpZmljIGNvbnRyb2wgaW5mb3JtYXRpb24gdG8gdGhlIGRldmljZQorKiAgdXNpbmcgdGhlIERNQSBjaGFubmVsCisqCisqCisqICBAcmV0dXJuICAtMSAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAwIC0gT24gc3VjY2VzcworKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfc2V0Q29udHJvbERlc2NyaXB0b3IoZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgIFsgSU4gXSBDb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJCQkJdm9pZCAqcERlc2NyaXB0b3IsCS8qICAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICovCisJCQkJdWludDMyX3QgY3RsQWRkcmVzcywJLyogICBbIElOIF0gQWRkcmVzcyBvZiB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJCQl1aW50MzJfdCBjb250cm9sCS8qICAgWyBJTiBdIERldmljZSBjb250cm9sIGluZm9ybWF0aW9uICovCisgICAgKSB7CisJZG1hY0h3X0RFU0NfUklOR190ICpwUmluZyA9IGRtYWNId19HRVRfREVTQ19SSU5HKHBEZXNjcmlwdG9yKTsKKworCWlmIChjdGxBZGRyZXNzID09IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIENoZWNrIHRoZSBhdmFpbGFiaWxpdHkgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHJpbmcgKi8KKwlpZiAoKHBSaW5nLT5wSGVhZC0+Y3RsLmhpICYgZG1hY0h3X0RFU0NfRlJFRSkgPT0gMCkgeworCQlyZXR1cm4gLTE7CisJfQorCS8qIFNldCBjb250cm9sIGluZm9ybWF0aW9uICovCisJcFJpbmctPnBIZWFkLT5kZXZDdGwgPSBjb250cm9sOworCS8qIFNldCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwlwUmluZy0+cEhlYWQtPnNhciA9ICh1aW50MzJfdCkgJnBSaW5nLT5wSGVhZC0+ZGV2Q3RsOworCXBSaW5nLT5wSGVhZC0+ZGFyID0gY3RsQWRkcmVzczsKKwkvKiBTZXQgY29udHJvbCBwYXJhbWV0ZXJzICovCisJaWYgKHBDb25maWctPmZsb3dDb250cm9sZXIgPT0gZG1hY0h3X0ZMT1dfQ09OVFJPTF9ETUEpIHsKKwkJcFJpbmctPnBIZWFkLT5jdGwubG8gPSBwQ29uZmlnLT50cmFuc2ZlclR5cGUgfAorCQkgICAgZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQyB8CisJCSAgICBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DIHwKKwkJICAgIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIgfAorCQkgICAgcENvbmZpZy0+ZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCB8CisJCSAgICBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzAgfAorCQkgICAgZG1hY0h3X0RTVF9CVVJTVF9XSURUSF8wIHwKKwkJICAgIHBDb25maWctPnNyY01hc3RlckludGVyZmFjZSB8CisJCSAgICBwQ29uZmlnLT5kc3RNYXN0ZXJJbnRlcmZhY2UgfCBkbWFjSHdfUkVHX0NUTF9JTlRfRU47CisJfSBlbHNlIHsKKwkJdWludDMyX3QgdHJhbnNmZXJUeXBlID0gMDsKKwkJc3dpdGNoIChwQ29uZmlnLT50cmFuc2ZlclR5cGUpIHsKKwkJY2FzZSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTToKKwkJCXRyYW5zZmVyVHlwZSA9IGRtYWNId19SRUdfQ1RMX1RURkNfUE1fUEVSSTsKKwkJCWJyZWFrOworCQljYXNlIGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMOgorCQkJdHJhbnNmZXJUeXBlID0gZG1hY0h3X1JFR19DVExfVFRGQ19NUF9QRVJJOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkbWFjSHdfQVNTRVJUKDApOworCQl9CisJCXBSaW5nLT5wSGVhZC0+Y3RsLmxvID0gdHJhbnNmZXJUeXBlIHwKKwkJICAgIGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMgfAorCQkgICAgZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQyB8CisJCSAgICBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyIHwKKwkJICAgIHBDb25maWctPmRzdE1heFRyYW5zYWN0aW9uV2lkdGggfAorCQkgICAgZG1hY0h3X1NSQ19CVVJTVF9XSURUSF8wIHwKKwkJICAgIGRtYWNId19EU1RfQlVSU1RfV0lEVEhfMCB8CisJCSAgICBwQ29uZmlnLT5zcmNNYXN0ZXJJbnRlcmZhY2UgfAorCQkgICAgcENvbmZpZy0+ZHN0TWFzdGVySW50ZXJmYWNlIHwKKwkJICAgIHBDb25maWctPmZsb3dDb250cm9sZXIgfCBkbWFjSHdfUkVHX0NUTF9JTlRfRU47CisJfQorCisJLyogU2V0IGJsb2NrIHRyYW5zYWN0aW9uIHNpemUgdG8gb25lIDMyIGJpdCB0cmFuc2FjdGlvbiAqLworCXBSaW5nLT5wSGVhZC0+Y3RsLmhpID0gZG1hY0h3X1JFR19DVExfQkxPQ0tfVFNfTUFTSyAmIDE7CisKKwkvKiBSZW1lbWJlciB0aGUgZGVzY3JpcHRvciB0byBpbml0aWFsaXplIHRoZSByZWdpc3RlcnMgKi8KKwlpZiAocFJpbmctPnBQcm9nID09IGRtYWNId19ERVNDX0lOSVQpIHsKKwkJcFJpbmctPnBQcm9nID0gcFJpbmctPnBIZWFkOworCX0KKwlwUmluZy0+cEVuZCA9IHBSaW5nLT5wSGVhZDsKKworCS8qIEFkdmFuY2UgdGhlIGRlc2NyaXB0b3IgKi8KKwlkbWFjSHdfTkVYVF9ERVNDKHBSaW5nLCBwSGVhZCk7CisKKwkvKiBVcGRhdGUgVGFpbCBwb2ludGVyIGlmIGRlc3RpbmF0aW9uIGlzIGEgcGVyaXBoZXJhbCAqLworCWlmICghZG1hY0h3X0RTVF9JU19NRU1PUlkocENvbmZpZy0+dHJhbnNmZXJUeXBlKSkgeworCQlwUmluZy0+cFRhaWwgPSBwUmluZy0+cEhlYWQ7CisJfQorCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0cyBjaGFubmVsIHNwZWNpZmljIHVzZXIgZGF0YQorKgorKiAgVGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVzIHVzZXIgZGF0YSB0byBhIHNwZWNpZiBETUEgY2hhbm5lbAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfc2V0Q2hhbm5lbFVzZXJEYXRhKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICovCisJCQkgICAgICAgdm9pZCAqdXNlckRhdGEJLyogIFsgSU4gXSBVc2VyIGRhdGEgKi8KKyAgICApIHsKKwlkbWFjSHdfQ0JMS190ICpwQ2JsayA9IGRtYWNId19IQU5ETEVfVE9fQ0JMSyhoYW5kbGUpOworCisJcENibGstPnVzZXJEYXRhID0gdXNlckRhdGE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGNoYW5uZWwgc3BlY2lmaWMgdXNlciBkYXRhCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdXNlciBkYXRhIHNwZWNpZmljIHRvIGEgRE1BIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gICB1c2VyIGRhdGEKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgKmRtYWNId19nZXRDaGFubmVsVXNlckRhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworICAgICkgeworCWRtYWNId19DQkxLX3QgKnBDYmxrID0gZG1hY0h3X0hBTkRMRV9UT19DQkxLKGhhbmRsZSk7CisKKwlyZXR1cm4gcENibGstPnVzZXJEYXRhOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUmVzZXRzIGRlc2NyaXB0b3IgY29udHJvbCBpbmZvcm1hdGlvbgorKgorKiAgQHJldHVybiAgdm9pZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfcmVzZXREZXNjcmlwdG9yQ29udHJvbCh2b2lkICpwRGVzY3JpcHRvcgkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAgKi8KKyAgICApIHsKKwlpbnQgaTsKKwlkbWFjSHdfREVTQ19SSU5HX3QgKnBSaW5nOworCWRtYWNId19ERVNDX3QgKnBEZXNjOworCisJcFJpbmcgPSBkbWFjSHdfR0VUX0RFU0NfUklORyhwRGVzY3JpcHRvcik7CisJcERlc2MgPSBwUmluZy0+cEhlYWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcFJpbmctPm51bTsgaSsrKSB7CisJCS8qIE1hcmsgZGVzY3JpcHRvciBpcyByZWFkeSB0byB1c2UgKi8KKwkJcERlc2MtPmN0bC5oaSA9IGRtYWNId19ERVNDX0ZSRUU7CisJCS8qIExvb2sgaW50byBuZXh0IGxpbmsgbGlzdCBpdGVtICovCisJCXBEZXNjKys7CisJfQorCXBSaW5nLT5wRnJlZSA9IHBSaW5nLT5wVGFpbCA9IHBSaW5nLT5wRW5kID0gcFJpbmctPnBIZWFkOworCXBSaW5nLT5wUHJvZyA9IGRtYWNId19ERVNDX0lOSVQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNwbGF5cyBjaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgb3RoZXIgY29udHJvbCBwYXJhbWV0ZXJzCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfcHJpbnREZWJ1Z0luZm8oZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKwkJCSAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAqLworCQkJICAgaW50ICgqZnBQcmludCkgKGNvbnN0IGNoYXIgKiwgLi4uKQkvKiAgWyBJTiBdIFByaW50IGNhbGxiYWNrIGZ1bmN0aW9uICovCisgICAgKSB7CisJZG1hY0h3X0NCTEtfdCAqcENibGsgPSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKTsKKworCURpc3BsYXlSZWdpc3RlckNvbnRlbnRzKHBDYmxrLT5tb2R1bGUsIHBDYmxrLT5jaGFubmVsLCBmcFByaW50KTsKKwlEaXNwbGF5RGVzY1JpbmcocERlc2NyaXB0b3IsIGZwUHJpbnQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC90bXIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY3NwL3Rtci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDRhNjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC90bXIvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgKz0gdG1ySHcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NzcC90bXIvdG1ySHcuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvdG1yL3Rtckh3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxYzlhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jc3AvdG1yL3Rtckh3LmMKQEAgLTAsMCArMSw1NzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICB0bXJIdy5jCisqCisqICBAYnJpZWYgICBMb3cgbGV2ZWwgVGltZXIgZHJpdmVyIHJvdXRpbmVzCisqCisqICBAbm90ZQorKgorKiAgIFRoZXNlIHJvdXRpbmVzIHByb3ZpZGUgYmFzaWMgdGltZXIgZnVuY3Rpb25hbGl0eSBvbmx5LgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8Y3NwL2Vycm5vLmg+CisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorCisjaW5jbHVkZSA8Y3NwL3Rtckh3Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvdG1ySHdfcmVnLmg+CisKKyNkZWZpbmUgdG1ySHdfQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSkpICooY2hhciAqKTAgPSAwCisjZGVmaW5lIHRtckh3X01JTExJU0VDX1BFUl9TRUMgICAgICAgICAgICAgICgxMDAwKQorCisjZGVmaW5lIHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQgICAgICAgICh0bXJId19MT1dfUkVTT0xVVElPTl9DTE9DSyAvIHRtckh3X01JTExJU0VDX1BFUl9TRUMpCisjZGVmaW5lIHRtckh3X0xPV18xX01BWF9NSUxMSVNFQyAgICAgICAgICAgICgweEZGRkZGRkZGIC8gdG1ySHdfTE9XXzFfUkVTT0xVVElPTl9DT1VOVCkKKyNkZWZpbmUgdG1ySHdfTE9XXzE2X1JFU09MVVRJT05fQ09VTlQgICAgICAgKHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQgLyAxNikKKyNkZWZpbmUgdG1ySHdfTE9XXzE2X01BWF9NSUxMSVNFQyAgICAgICAgICAgKDB4RkZGRkZGRkYgLyB0bXJId19MT1dfMTZfUkVTT0xVVElPTl9DT1VOVCkKKyNkZWZpbmUgdG1ySHdfTE9XXzI1Nl9SRVNPTFVUSU9OX0NPVU5UICAgICAgKHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQgLyAyNTYpCisjZGVmaW5lIHRtckh3X0xPV18yNTZfTUFYX01JTExJU0VDICAgICAgICAgICgweEZGRkZGRkZGIC8gdG1ySHdfTE9XXzI1Nl9SRVNPTFVUSU9OX0NPVU5UKQorCisjZGVmaW5lIHRtckh3X0hJR0hfMV9SRVNPTFVUSU9OX0NPVU5UICAgICAgICh0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0sgLyB0bXJId19NSUxMSVNFQ19QRVJfU0VDKQorI2RlZmluZSB0bXJId19ISUdIXzFfTUFYX01JTExJU0VDICAgICAgICAgICAoMHhGRkZGRkZGRiAvIHRtckh3X0hJR0hfMV9SRVNPTFVUSU9OX0NPVU5UKQorI2RlZmluZSB0bXJId19ISUdIXzE2X1JFU09MVVRJT05fQ09VTlQgICAgICAodG1ySHdfSElHSF8xX1JFU09MVVRJT05fQ09VTlQgLyAxNikKKyNkZWZpbmUgdG1ySHdfSElHSF8xNl9NQVhfTUlMTElTRUMgICAgICAgICAgKDB4RkZGRkZGRkYgLyB0bXJId19ISUdIXzE2X1JFU09MVVRJT05fQ09VTlQpCisjZGVmaW5lIHRtckh3X0hJR0hfMjU2X1JFU09MVVRJT05fQ09VTlQgICAgICh0bXJId19ISUdIXzFfUkVTT0xVVElPTl9DT1VOVCAvIDI1NikKKyNkZWZpbmUgdG1ySHdfSElHSF8yNTZfTUFYX01JTExJU0VDICAgICAgICAgKDB4RkZGRkZGRkYgLyB0bXJId19ISUdIXzI1Nl9SRVNPTFVUSU9OX0NPVU5UKQorCitzdGF0aWMgdm9pZCBSZXNldFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZCkKKyAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKK3N0YXRpYyBpbnQgdG1ySHdfZGl2aWRlKGludCBudW0sIGludCBkZW5vbSkKKyAgICBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCB0aW1lciBjYXBhYmlsaXR5CisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdmFyaW91cyBjYXBhYmlsaXRpZXMvYXR0cmlidXRlcyBvZiBhIHRpbWVyCisqCisqICBAcmV0dXJuICBDYXBhYmlsaXR5CisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1aW50MzJfdCB0bXJId19nZXRUaW1lckNhcGFiaWxpdHkodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIElkICovCisJCQkJICB0bXJId19DQVBBQklMSVRZX2UgY2FwYWJpbGl0eQkvKiAgWyBJTiBdIFRpbWVyIGNhcGFiaWxpdHkgKi8KKykgeworCXN3aXRjaCAoY2FwYWJpbGl0eSkgeworCWNhc2UgdG1ySHdfQ0FQQUJJTElUWV9DTE9DSzoKKwkJcmV0dXJuICh0aW1lcklkIDw9CisJCQkxKSA/IHRtckh3X0xPV19SRVNPTFVUSU9OX0NMT0NLIDoKKwkJICAgIHRtckh3X0hJR0hfUkVTT0xVVElPTl9DTE9DSzsKKwljYXNlIHRtckh3X0NBUEFCSUxJVFlfUkVTT0xVVElPTjoKKwkJcmV0dXJuIDMyOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJlc2V0cyBhIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzICB0aW1lcgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgUmVzZXRUaW1lcih0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBJZCAqLworKSB7CisJLyogUmVzZXQgdGltZXIgKi8KKwlwVG1ySHdbdGltZXJJZF0uTG9hZFZhbHVlID0gMDsKKwlwVG1ySHdbdGltZXJJZF0uQ3VycmVudFZhbHVlID0gMHhGRkZGRkZGRjsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCA9IDA7CisJcFRtckh3W3RpbWVySWRdLkJhY2tncm91bmRMb2FkID0gMDsKKwkvKiBBbHdheXMgY29uZmlndXJlIGFzIGEgMzIgYml0IHRpbWVyICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF8zMkJJVDsKKwkvKiBDbGVhciBpbnRlcnJ1cHQgb25seSBpZiByYXcgc3RhdHVzIGludGVycnVwdCBpcyBzZXQgKi8KKwlpZiAocFRtckh3W3RpbWVySWRdLlJhd0ludGVycnVwdFN0YXR1cykgeworCQlwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0Q2xlYXIgPSAweEZGRkZGRkZGOworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldHMgY291bnRlciB2YWx1ZSBmb3IgYW4gaW50ZXJ2YWwgaW4gbXMKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgY291bnRlciB2YWx1ZSBzZXQKKyogICAgICAgICAgICBPbiBmYWlsdXJlOiAwCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdG1ySHdfSU5URVJWQUxfdCBTZXRUaW1lclBlcmlvZCh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkgICAgICAgdG1ySHdfSU5URVJWQUxfdCBtc2VjCS8qICBbIElOIF0gSW50ZXJ2YWwgaW4gbWlsbGktc2Vjb25kICovCispIHsKKwl1aW50MzJfdCBzY2FsZSA9IDA7CisJdWludDMyX3QgY291bnQgPSAwOworCisJaWYgKHRpbWVySWQgPT0gMCB8fCB0aW1lcklkID09IDEpIHsKKwkJaWYgKG1zZWMgPD0gdG1ySHdfTE9XXzFfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE7CisJCQlzY2FsZSA9IHRtckh3X0xPV18xX1JFU09MVVRJT05fQ09VTlQ7CisJCX0gZWxzZSBpZiAobXNlYyA8PSB0bXJId19MT1dfMTZfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE2OworCQkJc2NhbGUgPSB0bXJId19MT1dfMTZfUkVTT0xVVElPTl9DT1VOVDsKKwkJfSBlbHNlIGlmIChtc2VjIDw9IHRtckh3X0xPV18yNTZfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzI1NjsKKwkJCXNjYWxlID0gdG1ySHdfTE9XXzI1Nl9SRVNPTFVUSU9OX0NPVU5UOworCQl9IGVsc2UgeworCQkJcmV0dXJuIDA7CisJCX0KKworCQljb3VudCA9IG1zZWMgKiBzY2FsZTsKKwkJLyogU2V0IGNvdW50ZXIgdmFsdWUgKi8KKwkJcFRtckh3W3RpbWVySWRdLkxvYWRWYWx1ZSA9IGNvdW50OworCQlwVG1ySHdbdGltZXJJZF0uQmFja2dyb3VuZExvYWQgPSBjb3VudDsKKworCX0gZWxzZSBpZiAodGltZXJJZCA9PSAyIHx8IHRpbWVySWQgPT0gMykgeworCQlpZiAobXNlYyA8PSB0bXJId19ISUdIXzFfTUFYX01JTExJU0VDKSB7CisJCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE7CisJCQlzY2FsZSA9IHRtckh3X0hJR0hfMV9SRVNPTFVUSU9OX0NPVU5UOworCQl9IGVsc2UgaWYgKG1zZWMgPD0gdG1ySHdfSElHSF8xNl9NQVhfTUlMTElTRUMpIHsKKwkJCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMTY7CisJCQlzY2FsZSA9IHRtckh3X0hJR0hfMTZfUkVTT0xVVElPTl9DT1VOVDsKKwkJfSBlbHNlIGlmIChtc2VjIDw9IHRtckh3X0hJR0hfMjU2X01BWF9NSUxMSVNFQykgeworCQkJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8yNTY7CisJCQlzY2FsZSA9IHRtckh3X0hJR0hfMjU2X1JFU09MVVRJT05fQ09VTlQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNvdW50ID0gbXNlYyAqIHNjYWxlOworCQkvKiBTZXQgY291bnRlciB2YWx1ZSAqLworCQlwVG1ySHdbdGltZXJJZF0uTG9hZFZhbHVlID0gY291bnQ7CisJCXBUbXJId1t0aW1lcklkXS5CYWNrZ3JvdW5kTG9hZCA9IGNvdW50OworCX0KKwlyZXR1cm4gY291bnQgLyBzY2FsZTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSBwZXJpb2RpYyB0aW1lciBpbiB0ZXJtcyBvZiB0aW1lciBpbnRlcnJ1cHQgcmF0ZQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHNwZWNpZmljIG51bWJlciBvZgorKiAgdGltZXIgaW50ZXJydXB0IHBlciBzZWNvbmQKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgdGltZXIgZnJlcXVlbmN5CisqICAgICAgICAgICAgT24gZmFpbHVyZTogMAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfUkFURV90IHRtckh3X3NldFBlcmlvZGljVGltZXJSYXRlKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCQl0bXJId19SQVRFX3QgcmF0ZQkvKiAgWyBJTiBdIE51bWJlciBvZiB0aW1lciBpbnRlcnJ1cHQgcGVyIHNlY29uZCAqLworKSB7CisJdWludDMyX3QgcmVzb2x1dGlvbiA9IDA7CisJdWludDMyX3QgY291bnQgPSAwOworCVJlc2V0VGltZXIodGltZXJJZCk7CisKKwkvKiBTZXQgdGltZXIgbW9kZSBwZXJpb2RpYyAqLworCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUEVSSU9ESUM7CisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfT05FU0hPVDsKKwkvKiBTZXQgdGltZXIgaW4gaGlnaGVzdCByZXNvbHV0aW9uICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8xOworCisJaWYgKHJhdGUgJiYgKHRpbWVySWQgPT0gMCB8fCB0aW1lcklkID09IDEpKSB7CisJCWlmIChyYXRlID4gdG1ySHdfTE9XX1JFU09MVVRJT05fQ0xPQ0spIHsKKwkJCXJldHVybiAwOworCQl9CisJCXJlc29sdXRpb24gPSB0bXJId19MT1dfUkVTT0xVVElPTl9DTE9DSzsKKwl9IGVsc2UgaWYgKHJhdGUgJiYgKHRpbWVySWQgPT0gMiB8fCB0aW1lcklkID09IDMpKSB7CisJCWlmIChyYXRlID4gdG1ySHdfSElHSF9SRVNPTFVUSU9OX0NMT0NLKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCXJlc29sdXRpb24gPSB0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0s7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisJLyogRmluZCB0aGUgY291bnRlciB2YWx1ZSAqLworCWNvdW50ID0gcmVzb2x1dGlvbiAvIHJhdGU7CisJLyogU2V0IGNvdW50ZXIgdmFsdWUgKi8KKwlwVG1ySHdbdGltZXJJZF0uTG9hZFZhbHVlID0gY291bnQ7CisJcFRtckh3W3RpbWVySWRdLkJhY2tncm91bmRMb2FkID0gY291bnQ7CisKKwlyZXR1cm4gcmVzb2x1dGlvbiAvIGNvdW50OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ29uZmlndXJlcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHRpbWVyIGludGVycnVwdCBhZnRlcgorKiAgICAgICAgICAgY2VydGFpbiB0aW1lIGludGVydmFsCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgcGVyaW9kaWMgdGltZXIgdG8gZ2VuZXJhdGUgdGltZXIgaW50ZXJydXB0CisqICBhZnRlciBldmVyeSB0aW1lIGludGVydmFsIGluIG1pbGxpc2Vjb25kCisqCisqICBAcmV0dXJuICAgT24gc3VjY2VzczogRWZmZWN0aXZlIGludGVydmFsIHNldCBpbiBtaWxsaS1zZWNvbmQKKyogICAgICAgICAgICBPbiBmYWlsdXJlOiAwCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19JTlRFUlZBTF90IHRtckh3X3NldFBlcmlvZGljVGltZXJJbnRlcnZhbCh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkJCXRtckh3X0lOVEVSVkFMX3QgbXNlYwkvKiAgWyBJTiBdIEludGVydmFsIGluIG1pbGxpLXNlY29uZCAqLworKSB7CisJUmVzZXRUaW1lcih0aW1lcklkKTsKKworCS8qIFNldCB0aW1lciBtb2RlIHBlcmlvZGljICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QRVJJT0RJQzsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCAmPSB+dG1ySHdfQ09OVFJPTF9PTkVTSE9UOworCisJcmV0dXJuIFNldFRpbWVyUGVyaW9kKHRpbWVySWQsIG1zZWMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ29uZmlndXJlcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHRpbWVyIGludGVycnVwdCBqdXN0IG9uY2UKKyogICAgICAgICAgIGFmdGVyIGNlcnRhaW4gdGltZSBpbnRlcnZhbAorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIGEgc2luZ2xlIHRpY2tzIGFmdGVyCisqICBjZXJ0YWluIHRpbWUgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmQKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgaW50ZXJ2YWwgc2V0IGluIG1pbGxpLXNlY29uZAorKiAgICAgICAgICAgIE9uIGZhaWx1cmU6IDAKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSVkFMX3QgdG1ySHdfc2V0T25lc2hvdFRpbWVySW50ZXJ2YWwodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIElkICovCisJCQkJCSAgICAgICB0bXJId19JTlRFUlZBTF90IG1zZWMJLyogIFsgSU4gXSBJbnRlcnZhbCBpbiBtaWxsaS1zZWNvbmQgKi8KKykgeworCVJlc2V0VGltZXIodGltZXJJZCk7CisKKwkvKiBTZXQgdGltZXIgbW9kZSBvbmVzaG90ICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgfD0gdG1ySHdfQ09OVFJPTF9QRVJJT0RJQzsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX09ORVNIT1Q7CisKKwlyZXR1cm4gU2V0VGltZXJQZXJpb2QodGltZXJJZCwgbXNlYyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmVzIGEgdGltZXIgdG8gcnVuIGFzIGEgZnJlZSBydW5uaW5nIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgdGltZXIgdG8gcnVuIGFzIGEgZnJlZSBydW5uaW5nIHRpbWVyCisqCisqICBAcmV0dXJuICAgVGltZXIgcmVzb2x1dGlvbiAoY291bnQgLyBzZWMpCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19SQVRFX3QgdG1ySHdfc2V0RnJlZVJ1bm5pbmdUaW1lcih0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkgICAgICAgdWludDMyX3QgZGl2aWRlcgkvKiAgWyBJTiBdIERpdmlkaW5nIHRoZSBjbG9jayBmcmVxdWVuY3kgKi8KKykgeworCXVpbnQzMl90IHNjYWxlID0gMDsKKworCVJlc2V0VGltZXIodGltZXJJZCk7CisJLyogU2V0IHRpbWVyIGFzIGZyZWUgcnVubmluZyBtb2RlICovCisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfUEVSSU9ESUM7CisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfT05FU0hPVDsKKworCWlmIChkaXZpZGVyID49IDY0KSB7CisJCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMjU2OworCQlzY2FsZSA9IDI1NjsKKwl9IGVsc2UgaWYgKGRpdmlkZXIgPj0gOCkgeworCQlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzE2OworCQlzY2FsZSA9IDE2OworCX0gZWxzZSB7CisJCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMTsKKwkJc2NhbGUgPSAxOworCX0KKworCWlmICh0aW1lcklkID09IDAgfHwgdGltZXJJZCA9PSAxKSB7CisJCXJldHVybiB0bXJId19kaXZpZGUodG1ySHdfTE9XX1JFU09MVVRJT05fQ0xPQ0ssIHNjYWxlKTsKKwl9IGVsc2UgaWYgKHRpbWVySWQgPT0gMiB8fCB0aW1lcklkID09IDMpIHsKKwkJcmV0dXJuIHRtckh3X2RpdmlkZSh0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0ssIHNjYWxlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFN0YXJ0cyBhIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhIHByZWNvbmZpZ3VyZWQgdGltZXIKKyoKKyogIEByZXR1cm4gIC0xICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICAwICAgICAtIE9uIFN1Y2Nlc3MKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCB0bXJId19zdGFydFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCB8PSB0bXJId19DT05UUk9MX1RJTUVSX0VOQUJMRTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFN0b3BzIGEgdGltZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gc3RvcHMgYSBydW5uaW5nIHRpbWVyCisqCisqICBAcmV0dXJuICAtMSAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgMCAgICAgLSBPbiBTdWNjZXNzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgdG1ySHdfc3RvcFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwlwVG1ySHdbdGltZXJJZF0uQ29udHJvbCAmPSB+dG1ySHdfQ09OVFJPTF9USU1FUl9FTkFCTEU7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGN1cnJlbnQgdGltZXIgY291bnQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB0aW1lciB2YWx1ZQorKgorKiAgQHJldHVybiAgQ3VycmVudCBkb3duY291bnRpbmcgdGltZXIgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IHRtckh3X0dldEN1cnJlbnRDb3VudCh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKSB7CisJLyogcmV0dXJuIDMyIGJpdCB0aW1lciB2YWx1ZSAqLworCXN3aXRjaCAocFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJiB0bXJId19DT05UUk9MX01PREVfTUFTSykgeworCWNhc2UgdG1ySHdfQ09OVFJPTF9GUkVFX1JVTk5JTkc6CisJCWlmIChwVG1ySHdbdGltZXJJZF0uQ3VycmVudFZhbHVlKSB7CisJCQlyZXR1cm4gdG1ySHdfTUFYX0NPVU5UIC0gcFRtckh3W3RpbWVySWRdLkN1cnJlbnRWYWx1ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIHRtckh3X0NPTlRST0xfUEVSSU9ESUM6CisJY2FzZSB0bXJId19DT05UUk9MX09ORVNIT1Q6CisJCXJldHVybiBwVG1ySHdbdGltZXJJZF0uQmFja2dyb3VuZExvYWQgLQorCQkgICAgcFRtckh3W3RpbWVySWRdLkN1cnJlbnRWYWx1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIHRpbWVyIGNvdW50IHJhdGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvdW50cyBwZXIgc2Vjb25kCisqCisqICBAcmV0dXJuICBDb3VudCByYXRlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19SQVRFX3QgdG1ySHdfZ2V0Q291bnRSYXRlKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwl1aW50MzJfdCBkaXZpZGVyID0gMDsKKworCXN3aXRjaCAocFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJiB0bXJId19DT05UUk9MX1BSRVNDQUxFX01BU0spIHsKKwljYXNlIHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMToKKwkJZGl2aWRlciA9IDE7CisJCWJyZWFrOworCWNhc2UgdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8xNjoKKwkJZGl2aWRlciA9IDE2OworCQlicmVhazsKKwljYXNlIHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMjU2OgorCQlkaXZpZGVyID0gMjU2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl0bXJId19BU1NFUlQoMCk7CisJfQorCisJaWYgKHRpbWVySWQgPT0gMCB8fCB0aW1lcklkID09IDEpIHsKKwkJcmV0dXJuIHRtckh3X2RpdmlkZSh0bXJId19MT1dfUkVTT0xVVElPTl9DTE9DSywgZGl2aWRlcik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHRtckh3X2RpdmlkZSh0bXJId19ISUdIX1JFU09MVVRJT05fQ0xPQ0ssIGRpdmlkZXIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdGltZXIgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHRpbWVyIGludGVycnVwdAorKgorKiAgQHJldHVybiAgIE4vQQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19lbmFibGVJbnRlcnJ1cHQodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKykgeworCXBUbXJId1t0aW1lcklkXS5Db250cm9sIHw9IHRtckh3X0NPTlRST0xfSU5URVJSVVBUX0VOQUJMRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVzIHRpbWVyIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQKKyoKKyogIEByZXR1cm4gICBOL0EKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgdG1ySHdfZGlzYWJsZUludGVycnVwdCh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKSB7CisJcFRtckh3W3RpbWVySWRdLkNvbnRyb2wgJj0gfnRtckh3X0NPTlRST0xfSU5URVJSVVBUX0VOQUJMRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFycyB0aGUgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgdGltZXIgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICAgTi9BCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIGNvbnRleHQgb2YgSVNSCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHRtckh3X2NsZWFySW50ZXJydXB0KHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIHsKKwlwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0Q2xlYXIgPSAweDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGltZXIgaW50ZXJydXB0IHN0YXR1cworKgorKiAgQHJldHVybiAgIEludGVycnVwdCBzdGF0dXMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSUlVQVF9TVEFUVVNfZSB0bXJId19nZXRJbnRlcnJ1cHRTdGF0dXModG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKykgeworCWlmIChwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0U3RhdHVzKSB7CisJCXJldHVybiB0bXJId19JTlRFUlJVUFRfU1RBVFVTX1NFVDsKKwl9IGVsc2UgeworCQlyZXR1cm4gdG1ySHdfSU5URVJSVVBUX1NUQVRVU19VTlNFVDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBJbmRlbnRpZmllcyBhIHRpbWVyIGNhdXNpbmcgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9ucyByZXR1cm5zIGEgdGltZXIgY2F1c2luZyBpbnRlcnJ1cHQKKyoKKyogIEByZXR1cm4gIDB4RkZGRkZGRkYgICA6IE5vIHRpbWVyIGNhdXNpbmcgYW4gaW50ZXJydXB0CisqICAgICAgICAgICAhIDB4RkZGRkZGRkYgOiB0aW1lciBjYXVzaW5nIGFuIGludGVycnVwdAorKiAgQG5vdGUKKyogICAgIHRtckh3X2NsZWFySW50cnJ1cHQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgdmFsaWQgdGltZXIgaWQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0bXJId19JRF90IHRtckh3X2dldEludGVycnVwdFNvdXJjZSh2b2lkCS8qICB2b2lkICovCispIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0bXJId19USU1FUl9OVU1fQ09VTlQ7IGkrKykgeworCQlpZiAocFRtckh3W2ldLkludGVycnVwdFN0YXR1cykgeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlyZXR1cm4gMHhGRkZGRkZGRjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc3BsYXlzIHNwZWNpZmljIHRpbWVyIHJlZ2lzdGVycworKgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19wcmludERlYnVnSW5mbyh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKwkJCSAgaW50ICgqZnBQcmludCkgKGNvbnN0IGNoYXIgKiwgLi4uKQkvKiAgWyBJTiBdIFByaW50IGNhbGxiYWNrIGZ1bmN0aW9uICovCispIHsKKwkoKmZwUHJpbnQpICgiRGlzcGxheWluZyByZWdpc3RlciBjb250ZW50cyBcblxuIik7CisJKCpmcFByaW50KSAoIlRpbWVyICVkOiBMb2FkIHZhbHVlICAgICAgICAgICAgICAweCVYXG4iLCB0aW1lcklkLAorCQkgICAgcFRtckh3W3RpbWVySWRdLkxvYWRWYWx1ZSk7CisJKCpmcFByaW50KSAoIlRpbWVyICVkOiBCYWNrZ3JvdW5kIGxvYWQgdmFsdWUgICAweCVYXG4iLCB0aW1lcklkLAorCQkgICAgcFRtckh3W3RpbWVySWRdLkJhY2tncm91bmRMb2FkKTsKKwkoKmZwUHJpbnQpICgiVGltZXIgJWQ6IENvbnRyb2wgICAgICAgICAgICAgICAgIDB4JVhcbiIsIHRpbWVySWQsCisJCSAgICBwVG1ySHdbdGltZXJJZF0uQ29udHJvbCk7CisJKCpmcFByaW50KSAoIlRpbWVyICVkOiBJbnRlcnJ1cHQgY2xlYXIgICAgICAgICAweCVYXG4iLCB0aW1lcklkLAorCQkgICAgcFRtckh3W3RpbWVySWRdLkludGVycnVwdENsZWFyKTsKKwkoKmZwUHJpbnQpICgiVGltZXIgJWQ6IEludGVycnVwdCByYXcgaW50ZXJydXB0IDB4JVhcbiIsIHRpbWVySWQsCisJCSAgICBwVG1ySHdbdGltZXJJZF0uUmF3SW50ZXJydXB0U3RhdHVzKTsKKwkoKmZwUHJpbnQpICgiVGltZXIgJWQ6IEludGVycnVwdCBzdGF0dXMgICAgICAgIDB4JVhcbiIsIHRpbWVySWQsCisJCSAgICBwVG1ySHdbdGltZXJJZF0uSW50ZXJydXB0U3RhdHVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFVzZSBhIHRpbWVyIHRvIHBlcmZvcm0gYSBidXN5IHdhaXQgZGVsYXkgZm9yIGEgbnVtYmVyIG9mIHVzZWNzLgorKgorKiAgQHJldHVybiAgIE4vQQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId191ZGVsYXkodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCisJCSAgdW5zaWduZWQgbG9uZyB1c2VjcyAvKiAgWyBJTiBdIHVzZWMgdG8gZGVsYXkgKi8KKykgeworCXRtckh3X1JBVEVfdCB1c2VjX3RpY2tfcmF0ZTsKKwl0bXJId19DT1VOVF90IHN0YXJ0X3RpbWU7CisJdG1ySHdfQ09VTlRfdCBkZWx0YV90aW1lOworCisJc3RhcnRfdGltZSA9IHRtckh3X0dldEN1cnJlbnRDb3VudCh0aW1lcklkKTsKKwl1c2VjX3RpY2tfcmF0ZSA9IHRtckh3X2RpdmlkZSh0bXJId19nZXRDb3VudFJhdGUodGltZXJJZCksIDEwMDAwMDApOworCWRlbHRhX3RpbWUgPSB1c2VjcyAqIHVzZWNfdGlja19yYXRlOworCisJLyogQnVzeSB3YWl0ICovCisJd2hpbGUgKGRlbHRhX3RpbWUgPiAodG1ySHdfR2V0Q3VycmVudENvdW50KHRpbWVySWQpIC0gc3RhcnRfdGltZSkpCisJCTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIExvY2FsIERpdmlkZSBmdW5jdGlvbgorKgorKiAgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBkaXZpZGUKKyoKKyogIEByZXR1cm4gZGl2aWRlIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHRtckh3X2RpdmlkZShpbnQgbnVtLCBpbnQgZGVub20pCit7CisJaW50IHI7CisJaW50IHQgPSAxOworCisJLyogU2hpZnQgZGVub20gYW5kIHQgdXAgdG8gdGhlIGxhcmdlc3QgdmFsdWUgdG8gb3B0aW1pemUgYWxnb3JpdGhtICovCisJLyogdCBjb250YWlucyB0aGUgdW5pdHMgb2YgZWFjaCBkaXZpZGUgKi8KKwl3aGlsZSAoKGRlbm9tICYgMHg0MDAwMDAwMCkgPT0gMCkgewkvKiBmYWlscyBpZiBkZW5vbT0wICovCisJCWRlbm9tID0gZGVub20gPDwgMTsKKwkJdCA9IHQgPDwgMTsKKwl9CisKKwkvKiBJbnRpYWxpemUgdGhlIHJlc3VsdCAqLworCXIgPSAwOworCisJZG8geworCQkvKiBEZXRlcm1pbmUgaWYgdGhlcmUgZXhpc3RzIGEgcG9zaXRpdmUgcmVtYWluZGVyICovCisJCWlmICgobnVtIC0gZGVub20pID49IDApIHsKKwkJCS8qIEFjY3VtbGF0ZSB0IHRvIHRoZSByZXN1bHQgYW5kIGNhbGN1bGF0ZSBhIG5ldyByZW1haW5kZXIgKi8KKwkJCW51bSA9IG51bSAtIGRlbm9tOworCQkJciA9IHIgKyB0OworCQl9CisJCS8qIENvbnRpbnVlIHRvIHNoaWZ0IGRlbm9tIGFuZCBzaGlmdCB0IGRvd24gdG8gMCAqLworCQlkZW5vbSA9IGRlbm9tID4+IDE7CisJCXQgPSB0ID4+IDE7CisJfSB3aGlsZSAodCAhPSAwKTsKKwlyZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjIwZmNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYS5jCkBAIC0wLDAgKzEsMjMyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBAZmlsZSAgIGRtYS5jCisqCisqICAgQGJyaWVmICBJbXBsZW1lbnRzIHRoZSBETUEgaW50ZXJmYWNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKKyNpbmNsdWRlIDxtYWNoL3RpbWVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorCisvKiBJIGRvbid0IHF1aXRlIHVuZGVyc3RhbmQgd2h5IGRjNCBmYWlscyB3aGVuIHRoaXMgaXMgc2V0IHRvIDEgYW5kIERNQSBpcyBlbmFibGVkICovCisvKiBlc3BlY2lhbGx5IHNpbmNlIGRjNCBkb2Vzbid0IHVzZSBrbWFsbG9jJ2QgbWVtb3J5LiAqLworCisjZGVmaW5lIEFMTE9XX01BUF9PRl9LTUFMTE9DX01FTU9SWSAwCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIC0tLS0gUHJpdmF0ZSBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUFLRV9IQU5ETEUoY29udHJvbGxlcklkeCwgY2hhbm5lbElkeCkgICAgKCgoY29udHJvbGxlcklkeCkgPDwgNCkgfCAoY2hhbm5lbElkeCkpCisKKyNkZWZpbmUgQ09OVFJPTExFUl9GUk9NX0hBTkRMRShoYW5kbGUpICAgICgoKGhhbmRsZSkgPj4gNCkgJiAweDBmKQorI2RlZmluZSBDSEFOTkVMX0ZST01fSEFORExFKGhhbmRsZSkgICAgICAgKChoYW5kbGUpICYgMHgwZikKKworI2RlZmluZSBETUFfTUFQX0RFQlVHICAgMAorCisjaWYgRE1BX01BUF9ERUJVRworIyAgIGRlZmluZSAgRE1BX01BUF9QUklOVChmbXQsIGFyZ3MuLi4pICAgcHJpbnRrKCIlczogIiBmbXQsIF9fZnVuY19fLCAgIyMgYXJncykKKyNlbHNlCisjICAgZGVmaW5lICBETUFfTUFQX1BSSU5UKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiAtLS0tIFByaXZhdGUgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgRE1BX0dsb2JhbF90IGdETUE7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpnRG1hRGlyOworCitzdGF0aWMgYXRvbWljX3QgZ0RtYVN0YXRNZW1UeXBlS21hbGxvYyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIGF0b21pY190IGdEbWFTdGF0TWVtVHlwZVZtYWxsb2MgPSBBVE9NSUNfSU5JVCgwKTsKK3N0YXRpYyBhdG9taWNfdCBnRG1hU3RhdE1lbVR5cGVVc2VyID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgYXRvbWljX3QgZ0RtYVN0YXRNZW1UeXBlQ29oZXJlbnQgPSBBVE9NSUNfSU5JVCgwKTsKKworI2luY2x1ZGUgImRtYV9kZXZpY2UuYyIKKworLyogLS0tLSBQcml2YXRlIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLSBGdW5jdGlvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgL3Byb2MvZG1hL21lbS10eXBlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZG1hX3Byb2NfcmVhZF9tZW1fdHlwZShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGVuID0gMDsKKworCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgImRtYV9tYXBfbWVtIHN0YXRpc3RpY3NcbiIpOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgImNvaGVyZW50OiAlZFxuIiwKKwkJICAgIGF0b21pY19yZWFkKCZnRG1hU3RhdE1lbVR5cGVDb2hlcmVudCkpOworCWxlbiArPQorCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgImttYWxsb2M6ICAlZFxuIiwKKwkJICAgIGF0b21pY19yZWFkKCZnRG1hU3RhdE1lbVR5cGVLbWFsbG9jKSk7CisJbGVuICs9CisJICAgIHNwcmludGYoYnVmICsgbGVuLCAidm1hbGxvYzogICVkXG4iLAorCQkgICAgYXRvbWljX3JlYWQoJmdEbWFTdGF0TWVtVHlwZVZtYWxsb2MpKTsKKwlsZW4gKz0KKwkgICAgc3ByaW50ZihidWYgKyBsZW4sICJ1c2VyOiAgICAgJWRcbiIsCisJCSAgICBhdG9taWNfcmVhZCgmZ0RtYVN0YXRNZW1UeXBlVXNlcikpOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgL3Byb2MvZG1hL2NoYW5uZWxzCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZG1hX3Byb2NfcmVhZF9jaGFubmVscyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgY29udHJvbGxlcklkeDsKKwlpbnQgY2hhbm5lbElkeDsKKwlpbnQgbGltaXQgPSBjb3VudCAtIDIwMDsKKwlpbnQgbGVuID0gMDsKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZ0RNQS5sb2NrKSA8IDApIHsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlmb3IgKGNvbnRyb2xsZXJJZHggPSAwOyBjb250cm9sbGVySWR4IDwgRE1BX05VTV9DT05UUk9MTEVSUzsKKwkgICAgIGNvbnRyb2xsZXJJZHgrKykgeworCQlmb3IgKGNoYW5uZWxJZHggPSAwOyBjaGFubmVsSWR4IDwgRE1BX05VTV9DSEFOTkVMUzsKKwkJICAgICBjaGFubmVsSWR4KyspIHsKKwkJCWlmIChsZW4gPj0gbGltaXQpIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY2hhbm5lbCA9CisJCQkgICAgJmdETUEuY29udHJvbGxlcltjb250cm9sbGVySWR4XS5jaGFubmVsW2NoYW5uZWxJZHhdOworCisJCQlsZW4gKz0KKwkJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIiVkOiVkICIsIGNvbnRyb2xsZXJJZHgsCisJCQkJICAgIGNoYW5uZWxJZHgpOworCisJCQlpZiAoKGNoYW5uZWwtPmZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19JU19ERURJQ0FURUQpICE9CisJCQkgICAgMCkgeworCQkJCWxlbiArPQorCQkJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkRlZGljYXRlZCBmb3IgJXMgIiwKKwkJCQkJICAgIERNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPgorCQkJCQkJCQkgZGV2VHlwZV0ubmFtZSk7CisJCQl9IGVsc2UgeworCQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlNoYXJlZCAiKTsKKwkJCX0KKworCQkJaWYgKChjaGFubmVsLT5mbGFncyAmIERNQV9DSEFOTkVMX0ZMQUdfTk9fSVNSKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiTm8gSVNSICIpOworCQkJfQorCisJCQlpZiAoKGNoYW5uZWwtPmZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiRmlmbzogMTI4ICIpOworCQkJfSBlbHNlIHsKKwkJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJGaWZvOiA2NCAgIik7CisJCQl9CisKKwkJCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX0lOX1VTRSkgIT0gMCkgeworCQkJCWxlbiArPQorCQkJCSAgICBzcHJpbnRmKGJ1ZiArIGxlbiwgIkluVXNlIGJ5ICVzIiwKKwkJCQkJICAgIERNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPgorCQkJCQkJCQkgZGV2VHlwZV0ubmFtZSk7CisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKKwkJCQlsZW4gKz0KKwkJCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICIgKCVzOiVkKSIsCisJCQkJCSAgICBjaGFubmVsLT5maWxlTmFtZSwKKwkJCQkJICAgIGNoYW5uZWwtPmxpbmVOdW0pOworI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkF2YWlsICIpOworCQkJfQorCisJCQlpZiAoY2hhbm5lbC0+bGFzdERldlR5cGUgIT0gRE1BX0RFVklDRV9OT05FKSB7CisJCQkJbGVuICs9CisJCQkJICAgIHNwcmludGYoYnVmICsgbGVuLCAiTGFzdCB1c2U6ICVzICIsCisJCQkJCSAgICBETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT4KKwkJCQkJCQkJIGxhc3REZXZUeXBlXS4KKwkJCQkJICAgIG5hbWUpOworCQkJfQorCisJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcbiIpOworCQl9CisJfQorCXVwKCZnRE1BLmxvY2spOworCSplb2YgPSAxOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgL3Byb2MvZG1hL2RldmljZXMKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBkbWFfcHJvY19yZWFkX2RldmljZXMoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgbGltaXQgPSBjb3VudCAtIDIwMDsKKwlpbnQgbGVuID0gMDsKKwlpbnQgZGV2SWR4OworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZ0RNQS5sb2NrKSA8IDApIHsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlmb3IgKGRldklkeCA9IDA7IGRldklkeCA8IERNQV9OVU1fREVWSUNFX0VOVFJJRVM7IGRldklkeCsrKSB7CisJCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZJZHhdOworCisJCWlmIChkZXZBdHRyLT5uYW1lID09IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxlbiA+PSBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0KKworCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlLTEycyAiLCBkZXZBdHRyLT5uYW1lKTsKKworCQlpZiAoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCkgIT0gMCkgeworCQkJbGVuICs9CisJCQkgICAgc3ByaW50ZihidWYgKyBsZW4sICJEZWRpY2F0ZWQgJWQ6JWQgIiwKKwkJCQkgICAgZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQkgICAgZGV2QXR0ci0+ZGVkaWNhdGVkQ2hhbm5lbCk7CisJCX0gZWxzZSB7CisJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJTaGFyZWQgRE1BOiIpOworCQkJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMCIpOworCQkJfQorCQkJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19PTl9ETUExKSAhPSAwKSB7CisJCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMSIpOworCQkJfQorCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiICIpOworCQl9CisJCWlmICgoZGV2QXR0ci0+ZmxhZ3MgJiBETUFfREVWSUNFX0ZMQUdfTk9fSVNSKSAhPSAwKSB7CisJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJOb0lTUiAiKTsKKwkJfQorCQlpZiAoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX0FMTE9XX0xBUkdFX0ZJRk8pICE9IDApIHsKKwkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIkFsbG93LTEyOCAiKTsKKwkJfQorCisJCWxlbiArPQorCQkgICAgc3ByaW50ZihidWYgKyBsZW4sCisJCQkgICAgIlhmZXIgIzogJUx1IFRpY2tzOiAlTHUgQnl0ZXM6ICVMdSBEZXNjTGVuOiAldVxuIiwKKwkJCSAgICBkZXZBdHRyLT5udW1UcmFuc2ZlcnMsIGRldkF0dHItPnRyYW5zZmVyVGlja3MsCisJCQkgICAgZGV2QXR0ci0+dHJhbnNmZXJCeXRlcywKKwkJCSAgICBkZXZBdHRyLT5yaW5nLmJ5dGVzQWxsb2NhdGVkKTsKKworCX0KKworCXVwKCZnRE1BLmxvY2spOworCSplb2YgPSAxOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEZXRlcm1pbmVzIGlmIGEgRE1BX0RldmljZV90IGlzICJ2YWxpZCIuCisqCisqICAgQHJldHVybgorKiAgICAgICBUUlVFICAgICAgICAtIGRtYSBkZXZpY2UgaXMgdmFsaWQKKyogICAgICAgRkFMU0UgICAgICAgLSBkbWEgZGV2aWNlIGlzbid0IHZhbGlkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgaW50IElzRGV2aWNlVmFsaWQoRE1BX0RldmljZV90IGRldmljZSkKK3sKKwlyZXR1cm4gKGRldmljZSA+PSAwKSAmJiAoZGV2aWNlIDwgRE1BX05VTV9ERVZJQ0VfRU5UUklFUyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgVHJhbnNsYXRlcyBhIERNQSBoYW5kbGUgaW50byBhIHBvaW50ZXIgdG8gYSBjaGFubmVsLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgbm9uLU5VTEwgICAgLSBwb2ludGVyIHRvIERNQV9DaGFubmVsX3QKKyogICAgICAgTlVMTCAgICAgICAgLSBETUEgSGFuZGxlIHdhcyBpbnZhbGlkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgRE1BX0NoYW5uZWxfdCAqSGFuZGxlVG9DaGFubmVsKERNQV9IYW5kbGVfdCBoYW5kbGUpCit7CisJaW50IGNvbnRyb2xsZXJJZHg7CisJaW50IGNoYW5uZWxJZHg7CisKKwljb250cm9sbGVySWR4ID0gQ09OVFJPTExFUl9GUk9NX0hBTkRMRShoYW5kbGUpOworCWNoYW5uZWxJZHggPSBDSEFOTkVMX0ZST01fSEFORExFKGhhbmRsZSk7CisKKwlpZiAoKGNvbnRyb2xsZXJJZHggPiBETUFfTlVNX0NPTlRST0xMRVJTKQorCSAgICB8fCAoY2hhbm5lbElkeCA+IERNQV9OVU1fQ0hBTk5FTFMpKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gJmdETUEuY29udHJvbGxlcltjb250cm9sbGVySWR4XS5jaGFubmVsW2NoYW5uZWxJZHhdOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEludGVycnVwdCBoYW5kbGVyIHdoaWNoIGlzIGNhbGxlZCB0byBwcm9jZXNzIERNQSBpbnRlcnJ1cHRzLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlpbnQgaXJxU3RhdHVzOworCisJY2hhbm5lbCA9IChETUFfQ2hhbm5lbF90ICopIGRldl9pZDsKKworCS8qIEZpZ3VyZSBvdXQgd2h5IHdlIHdlcmUgY2FsbGVkLCBhbmQga25vY2sgZG93biB0aGUgaW50ZXJydXB0ICovCisKKwlpcnFTdGF0dXMgPSBkbWFjSHdfZ2V0SW50ZXJydXB0U3RhdHVzKGNoYW5uZWwtPmRtYWNId0hhbmRsZSk7CisJZG1hY0h3X2NsZWFySW50ZXJydXB0KGNoYW5uZWwtPmRtYWNId0hhbmRsZSk7CisKKwlpZiAoKGNoYW5uZWwtPmRldlR5cGUgPCAwKQorCSAgICB8fCAoY2hhbm5lbC0+ZGV2VHlwZSA+IERNQV9OVU1fREVWSUNFX0VOVFJJRVMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZG1hX2ludGVycnVwdF9oYW5kbGVyOiBJbnZhbGlkIGRldlR5cGU6ICVkXG4iLAorCQkgICAgICAgY2hhbm5lbC0+ZGV2VHlwZSk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKworCS8qIFVwZGF0ZSBzdGF0cyAqLworCisJaWYgKChpcnFTdGF0dXMgJiBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19UUkFOUykgIT0gMCkgeworCQlkZXZBdHRyLT50cmFuc2ZlclRpY2tzICs9CisJCSAgICAodGltZXJfZ2V0X3RpY2tfY291bnQoKSAtIGRldkF0dHItPnRyYW5zZmVyU3RhcnRUaW1lKTsKKwl9CisKKwlpZiAoKGlycVN0YXR1cyAmIGRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0VSUk9SKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImRtYV9pbnRlcnJ1cHRfaGFuZGxlcjogZGV2VHlwZSA6JWQgRE1BIGVycm9yICglcylcbiIsCisJCSAgICAgICBjaGFubmVsLT5kZXZUeXBlLCBkZXZBdHRyLT5uYW1lKTsKKwl9IGVsc2UgeworCQlkZXZBdHRyLT5udW1UcmFuc2ZlcnMrKzsKKwkJZGV2QXR0ci0+dHJhbnNmZXJCeXRlcyArPSBkZXZBdHRyLT5udW1CeXRlczsKKwl9CisKKwkvKiBDYWxsIGFueSBpbnN0YWxsZWQgaGFuZGxlciAqLworCisJaWYgKGRldkF0dHItPmRldkhhbmRsZXIgIT0gTlVMTCkgeworCQlkZXZBdHRyLT5kZXZIYW5kbGVyKGNoYW5uZWwtPmRldlR5cGUsIGlycVN0YXR1cywKKwkJCQkgICAgZGV2QXR0ci0+dXNlckRhdGEpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBbGxvY2F0ZXMgbWVtb3J5IHRvIGhvbGQgYSBkZXNjcmlwdG9yIHJpbmcuIFRoZSBkZXNjcmlwdG9yIHJpbmcgdGhlbgorKiAgIG5lZWRzIHRvIGJlIHBvcHVsYXRlZCBieSBtYWtpbmcgb25lIG9yIG1vcmUgY2FsbHMgdG8KKyogICBkbmFfYWRkX2Rlc2NyaXB0b3JzLgorKgorKiAgIFRoZSByZXR1cm5lZCBkZXNjcmlwdG9yIHJpbmcgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVkLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICAgICAgRGVzY3JpcHRvciByaW5nIHdhcyBhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgICAgIEludmFsaWQgcGFyYW1ldGVycyBwYXNzZWQgaW4KKyogICAgICAgLUVOT01FTSAgICAgVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FsbG9jX2Rlc2NyaXB0b3JfcmluZyhETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZywJLyogRGVzY3JpcHRvciByaW5nIHRvIHBvcHVsYXRlICovCisJCQkgICAgICBpbnQgbnVtRGVzY3JpcHRvcnMJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRoYXQgbmVlZCB0byBiZSBhbGxvY2F0ZWQuICovCisgICAgKSB7CisJc2l6ZV90IGJ5dGVzVG9BbGxvYyA9IGRtYWNId19kZXNjcmlwdG9yTGVuKG51bURlc2NyaXB0b3JzKTsKKworCWlmICgocmluZyA9PSBOVUxMKSB8fCAobnVtRGVzY3JpcHRvcnMgPD0gMCkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmluZy0+cGh5c0FkZHIgPSAwOworCXJpbmctPmRlc2NyaXB0b3JzQWxsb2NhdGVkID0gMDsKKwlyaW5nLT5ieXRlc0FsbG9jYXRlZCA9IDA7CisKKwlyaW5nLT52aXJ0QWRkciA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoTlVMTCwKKwkJCQkJCSAgICAgYnl0ZXNUb0FsbG9jLAorCQkJCQkJICAgICAmcmluZy0+cGh5c0FkZHIsCisJCQkJCQkgICAgIEdGUF9LRVJORUwpOworCWlmIChyaW5nLT52aXJ0QWRkciA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJpbmctPmJ5dGVzQWxsb2NhdGVkID0gYnl0ZXNUb0FsbG9jOworCXJpbmctPmRlc2NyaXB0b3JzQWxsb2NhdGVkID0gbnVtRGVzY3JpcHRvcnM7CisKKwlyZXR1cm4gZG1hX2luaXRfZGVzY3JpcHRvcl9yaW5nKHJpbmcsIG51bURlc2NyaXB0b3JzKTsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBSZWxlYXNlcyB0aGUgbWVtb3J5IHdoaWNoIHdhcyBwcmV2aW91c2x5IGFsbG9jYXRlZCBmb3IgYSBkZXNjcmlwdG9yIHJpbmcuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nCS8qIERlc2NyaXB0b3IgdG8gcmVsZWFzZSAqLworICAgICkgeworCWlmIChyaW5nLT52aXJ0QWRkciAhPSBOVUxMKSB7CisJCWRtYV9mcmVlX3dyaXRlY29tYmluZShOVUxMLAorCQkJCSAgICAgIHJpbmctPmJ5dGVzQWxsb2NhdGVkLAorCQkJCSAgICAgIHJpbmctPnZpcnRBZGRyLCByaW5nLT5waHlzQWRkcik7CisJfQorCisJcmluZy0+Ynl0ZXNBbGxvY2F0ZWQgPSAwOworCXJpbmctPmRlc2NyaXB0b3JzQWxsb2NhdGVkID0gMDsKKwlyaW5nLT52aXJ0QWRkciA9IE5VTEw7CisJcmluZy0+cGh5c0FkZHIgPSAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9mcmVlX2Rlc2NyaXB0b3JfcmluZyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhbGl6ZXMgYSBkZXNjcmlwdG9yIHJpbmcsIHNvIHRoYXQgZGVzY3JpcHRvcnMgY2FuIGJlIGFkZGVkIHRvIGl0LgorKiAgIE9uY2UgYSBkZXNjcmlwdG9yIHJpbmcgaGFzIGJlZW4gYWxsb2NhdGVkLCBpdCBtYXkgYmUgcmVpbml0aWFsaXplZCBmb3IKKyogICB1c2Ugd2l0aCBhZGRpdGlvbmFsL2RpZmZlcmVudCByZWdpb25zIG9mIG1lbW9yeS4KKyoKKyogICBOb3RlIHRoYXQgaWYgNyBkZXNjcmlwdG9ycyBhcmUgYWxsb2NhdGVkLCBpdCdzIHBlcmZlY3RseSBhY2NlcHRhYmxlIHRvCisqICAgaW5pdGlhbGl6ZSB0aGUgcmluZyB3aXRoIGEgc21hbGxlciBudW1iZXIgb2YgZGVzY3JpcHRvcnMuIFRoZSBhbW91bnQKKyogICBvZiBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgZGVzY3JpcHRvciByaW5nIHdpbGwgbm90IGJlIHJlZHVjZWQsIGFuZAorKiAgIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWF5IGJlIHJlaW5pdGlhbGl6ZWQgbGF0ZXIKKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgICAgIERlc2NyaXB0b3IgcmluZyB3YXMgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9NRU0gICAgIFRoZSBkZXNjcmlwdG9yIHdoaWNoIHdhcyBwYXNzZWQgaW4gaGFzIGluc3VmZmljaWVudCBzcGFjZQorKiAgICAgICAgICAgICAgICAgICB0byBob2xkIHRoZSBkZXNpcmVkIG51bWJlciBvZiBkZXNjcmlwdG9ycy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9pbml0X2Rlc2NyaXB0b3JfcmluZyhETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZywJLyogRGVzY3JpcHRvciByaW5nIHRvIGluaXRpYWxpemUgKi8KKwkJCSAgICAgaW50IG51bURlc2NyaXB0b3JzCS8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyB0byBpbml0aWFsaXplLiAqLworICAgICkgeworCWlmIChyaW5nLT52aXJ0QWRkciA9PSBOVUxMKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZG1hY0h3X2luaXREZXNjcmlwdG9yKHJpbmctPnZpcnRBZGRyLAorCQkJCSAgcmluZy0+cGh5c0FkZHIsCisJCQkJICByaW5nLT5ieXRlc0FsbG9jYXRlZCwgbnVtRGVzY3JpcHRvcnMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJkbWFfaW5pdF9kZXNjcmlwdG9yX3Jpbmc6IGRtYWNId19pbml0RGVzY3JpcHRvciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfaW5pdF9kZXNjcmlwdG9yX3JpbmcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIERldGVybWluZXMgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyB3aGljaCB3b3VsZCBiZSByZXF1aXJlZCBmb3IgYQorKiAgIHRyYW5zZmVyIG9mIHRoZSBpbmRpY2F0ZWQgbWVtb3J5IHJlZ2lvbi4KKyoKKyogICBUaGlzIGZ1bmN0aW9uIGFsc28gbmVlZHMgdG8ga25vdyB3aGljaCBETUEgZGV2aWNlIHRoaXMgdHJhbnNmZXIgd2lsbAorKiAgIGJlIGRlc3RpbmVkIGZvciwgc28gdGhhdCB0aGUgYXBwcm9wcmlhdGUgRE1BIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHJldHJpZXZlZC4KKyogICBETUEgcGFyYW1ldGVycyBzdWNoIGFzIHRyYW5zZmVyIHdpZHRoLCBhbmQgd2hldGhlciB0aGlzIGlzIGEgbWVtb3J5LXRvLW1lbW9yeQorKiAgIG9yIG1lbW9yeS10by1wZXJpcGhlcmFsLCBldGMgY2FuIGFsbCBhZmZlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgZGVzY3JpcHRvcnMKKyogICByZXF1aXJlZC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgID4gMCAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlcXVpcmVkIGZvciB0aGUgaW5kaWNhdGVkIHRyYW5zZmVyCisqICAgICAgIC1FTk9ERVYgLSBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBwYXJhbWV0ZXJzCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2NhbGN1bGF0ZV9kZXNjcmlwdG9yX2NvdW50KERNQV9EZXZpY2VfdCBkZXZpY2UsCS8qIERNQSBEZXZpY2UgdGhhdCB0aGlzIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoICovCisJCQkJICAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQbGFjZSB0byBnZXQgZGF0YSB0byB3cml0ZSB0byBkZXZpY2UgKi8KKwkJCQkgICBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBvaW50ZXIgdG8gZGV2aWNlIGRhdGEgYWRkcmVzcyAqLworCQkJCSAgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCWludCBudW1EZXNjcmlwdG9yczsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisKKwlpZiAoIUlzRGV2aWNlVmFsaWQoZGV2aWNlKSkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZpY2VdOworCisJbnVtRGVzY3JpcHRvcnMgPSBkbWFjSHdfY2FsY3VsYXRlRGVzY3JpcHRvckNvdW50KCZkZXZBdHRyLT5jb25maWcsCisJCQkJCQkJICAgICAgKHZvaWQgKilzcmNEYXRhLAorCQkJCQkJCSAgICAgICh2b2lkICopZHN0RGF0YSwKKwkJCQkJCQkgICAgICBudW1CeXRlcyk7CisJaWYgKG51bURlc2NyaXB0b3JzIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJkbWFfY2FsY3VsYXRlX2Rlc2NyaXB0b3JfY291bnQ6IGRtYWNId19jYWxjdWxhdGVEZXNjcmlwdG9yQ291bnQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIG51bURlc2NyaXB0b3JzOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9jYWxjdWxhdGVfZGVzY3JpcHRvcl9jb3VudCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWRkcyBhIHJlZ2lvbiBvZiBtZW1vcnkgdG8gdGhlIGRlc2NyaXB0b3IgcmluZy4gTm90ZSB0aGF0IGl0IG1heSB0YWtlCisqICAgbXVsdGlwbGUgZGVzY3JpcHRvcnMgZm9yIGVhY2ggcmVnaW9uIG9mIG1lbW9yeS4gSXQgaXMgdGhlIGNhbGxlcnMKKyogICByZXNwb25zaWJpbGl0eSB0byBhbGxvY2F0ZSBhIHN1ZmZpY2llbnRseSBsYXJnZSBkZXNjcmlwdG9yIHJpbmcuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIERlc2NyaXB0b3JzIHdlcmUgYWRkZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9ERVYgRGV2aWNlIGhhbmRlZCBpbiBpcyBpbnZhbGlkLgorKiAgICAgICAtRUlOVkFMIEludmFsaWQgcGFyYW1ldGVycworKiAgICAgICAtRU5PTUVNIE1lbW9yeSBleGhhdXN0ZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9hZGRfZGVzY3JpcHRvcnMoRE1BX0Rlc2NyaXB0b3JSaW5nX3QgKnJpbmcsCS8qIERlc2NyaXB0b3IgcmluZyB0byBhZGQgZGVzY3JpcHRvcnMgdG8gKi8KKwkJCURNQV9EZXZpY2VfdCBkZXZpY2UsCS8qIERNQSBEZXZpY2UgdGhhdCBkZXNjcmlwdG9ycyBhcmUgZm9yICovCisJCQlkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIChtZW1vcnkgb3IgZGV2aWNlKSAqLworCQkJZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQbGFjZSB0byBwdXQgZGF0YSAobWVtb3J5IG9yIGRldmljZSkgKi8KKwkJCXNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCWludCByYzsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisKKwlpZiAoIUlzRGV2aWNlVmFsaWQoZGV2aWNlKSkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZpY2VdOworCisJcmMgPSBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IoJmRldkF0dHItPmNvbmZpZywKKwkJCQkgICAgICByaW5nLT52aXJ0QWRkciwKKwkJCQkgICAgICAodm9pZCAqKXNyY0RhdGEsCisJCQkJICAgICAgKHZvaWQgKilkc3REYXRhLCBudW1CeXRlcyk7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJkbWFfYWRkX2Rlc2NyaXB0b3JzOiBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IgZmFpbGVkIHdpdGggY29kZTogJWRcbiIsCisJCSAgICAgICByYyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9hZGRfZGVzY3JpcHRvcnMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFNldHMgdGhlIGRlc2NyaXB0b3IgcmluZyBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuCisqCisqICAgT25jZSBzZXQsIHRoZSBkZXNjcmlwdG9yIHJpbmcgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSwgZXZlbgorKiAgIGFjcm9zcyBjaGFubmVsIHJlcXVlc3QvZnJlZSBjYWxscy4gUGFzc2luZyBpbiBhIE5VTEwgZGVzY3JpcHRvciByaW5nCisqICAgd2lsbCByZWxlYXNlIGFueSBkZXNjcmlwdG9yIHJpbmcgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLgorKgorKiAgIE5vdGU6IElmIHlvdSBjYWxsIGRtYV90cmFuc2Zlciwgb3Igb25lIG9mIHRoZSBvdGhlciBkbWFfYWxsb2NfIGZ1bmN0aW9ucworKiAgICAgICAgIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWF5IGJlIHJlbGVhc2VkIGFuZCByZWFsbG9jYXRlZC4KKyoKKyogICBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVsZWFzZSB0aGUgZGVzY3JpcHRvciBtZW1vcnkgZm9yIGFueSBjdXJyZW50CisqICAgICAgICAgZGVzY3JpcHRvciByaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhZGRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVOT0RFViBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgZGVzY3JpcHRvciByaW5nIGZvci4gKi8KKwkJCQkgICBETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZwkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gYWRkIGRlc2NyaXB0b3JzIHRvICovCisgICAgKSB7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCisJaWYgKCFJc0RldmljZVZhbGlkKGRldmljZSkpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbZGV2aWNlXTsKKworCS8qIEZyZWUgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGRlc2NyaXB0b3IgcmluZyAqLworCisJZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nKTsKKworCWlmIChyaW5nICE9IE5VTEwpIHsKKwkJLyogQ29weSBpbiB0aGUgbmV3IG9uZSAqLworCisJCWRldkF0dHItPnJpbmcgPSAqcmluZzsKKwl9CisKKwkvKiBTZXQgdGhpbmdzIHVwIHNvIHRoYXQgaWYgZG1hX3RyYW5zZmVyIGlzIGNhbGxlZCB0aGVuIHRoaXMgZGVzY3JpcHRvciAqLworCS8qIHJpbmcgd2lsbCBnZXQgZnJlZWQuICovCisKKwlkZXZBdHRyLT5wcmV2U3JjRGF0YSA9IDA7CisJZGV2QXR0ci0+cHJldkRzdERhdGEgPSAwOworCWRldkF0dHItPnByZXZOdW1CeXRlcyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfc2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFJldHJpZXZlcyB0aGUgZGVzY3JpcHRvciByaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGRldmljZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhZGRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVOT0RFViBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZ2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHJldHJpZXZlIHRoZSBkZXNjcmlwdG9yIHJpbmcgZm9yLiAqLworCQkJCSAgIERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nCS8qIFBsYWNlIHRvIHN0b3JlIHJldHJpZXZlZCByaW5nICovCisgICAgKSB7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCisJbWVtc2V0KHJpbmcsIDAsIHNpemVvZigqcmluZykpOworCisJaWYgKCFJc0RldmljZVZhbGlkKGRldmljZSkpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbZGV2aWNlXTsKKworCSpyaW5nID0gZGV2QXR0ci0+cmluZzsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9nZXRfZGV2aWNlX2Rlc2NyaXB0b3JfcmluZyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQ29uZmlndXJlcyBhIERNQSBjaGFubmVsLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KKyoKKyogICAgICAgLUVCVVNZICAtIERldmljZSBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBDb25maWdDaGFubmVsKERNQV9IYW5kbGVfdCBoYW5kbGUpCit7CisJRE1BX0NoYW5uZWxfdCAqY2hhbm5lbDsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisJaW50IGNvbnRyb2xsZXJJZHg7CisKKwljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGhhbmRsZSk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKwljb250cm9sbGVySWR4ID0gQ09OVFJPTExFUl9GUk9NX0hBTkRMRShoYW5kbGUpOworCisJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19QT1JUX1BFUl9ETUFDKSAhPSAwKSB7CisJCWlmIChkZXZBdHRyLT5jb25maWcudHJhbnNmZXJUeXBlID09CisJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTCkgeworCQkJZGV2QXR0ci0+Y29uZmlnLmRzdFBlcmlwaGVyYWxQb3J0ID0KKwkJCSAgICBkZXZBdHRyLT5kbWFjUG9ydFtjb250cm9sbGVySWR4XTsKKwkJfSBlbHNlIGlmIChkZXZBdHRyLT5jb25maWcudHJhbnNmZXJUeXBlID09CisJCQkgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSkgeworCQkJZGV2QXR0ci0+Y29uZmlnLnNyY1BlcmlwaGVyYWxQb3J0ID0KKwkJCSAgICBkZXZBdHRyLT5kbWFjUG9ydFtjb250cm9sbGVySWR4XTsKKwkJfQorCX0KKworCWlmIChkbWFjSHdfY29uZmlnQ2hhbm5lbChjaGFubmVsLT5kbWFjSHdIYW5kbGUsICZkZXZBdHRyLT5jb25maWcpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb25maWdDaGFubmVsOiBkbWFjSHdfY29uZmlnQ2hhbm5lbCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbnRpYWxpemVzIGFsbCBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRE1BLgorKiAgIEByZXR1cm4KKyogICAgICAgPj0gMCAgICAtIEluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsbC4KKyoKKyogICAgICAgLUVCVVNZICAtIERldmljZSBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9pbml0KHZvaWQpCit7CisJaW50IHJjID0gMDsKKwlpbnQgY29udHJvbGxlcklkeDsKKwlpbnQgY2hhbm5lbElkeDsKKwlETUFfRGV2aWNlX3QgZGV2SWR4OworCURNQV9DaGFubmVsX3QgKmNoYW5uZWw7CisJRE1BX0hhbmRsZV90IGRlZGljYXRlZEhhbmRsZTsKKworCW1lbXNldCgmZ0RNQSwgMCwgc2l6ZW9mKGdETUEpKTsKKworCWluaXRfTVVURVhfTE9DS0VEKCZnRE1BLmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmdETUEuZnJlZUNoYW5uZWxRKTsKKworCS8qIEluaXRpYWxpemUgdGhlIEhhcmR3YXJlICovCisKKwlkbWFjSHdfaW5pdERtYSgpOworCisJLyogU3RhcnQgb2ZmIGJ5IG1hcmtpbmcgYWxsIG9mIHRoZSBETUEgY2hhbm5lbHMgYXMgc2hhcmVkLiAqLworCisJZm9yIChjb250cm9sbGVySWR4ID0gMDsgY29udHJvbGxlcklkeCA8IERNQV9OVU1fQ09OVFJPTExFUlM7CisJICAgICBjb250cm9sbGVySWR4KyspIHsKKwkJZm9yIChjaGFubmVsSWR4ID0gMDsgY2hhbm5lbElkeCA8IERNQV9OVU1fQ0hBTk5FTFM7CisJCSAgICAgY2hhbm5lbElkeCsrKSB7CisJCQljaGFubmVsID0KKwkJCSAgICAmZ0RNQS5jb250cm9sbGVyW2NvbnRyb2xsZXJJZHhdLmNoYW5uZWxbY2hhbm5lbElkeF07CisKKwkJCWNoYW5uZWwtPmZsYWdzID0gMDsKKwkJCWNoYW5uZWwtPmRldlR5cGUgPSBETUFfREVWSUNFX05PTkU7CisJCQljaGFubmVsLT5sYXN0RGV2VHlwZSA9IERNQV9ERVZJQ0VfTk9ORTsKKworI2lmIChETUFfREVCVUdfVFJBQ0tfUkVTRVJWQVRJT04pCisJCQljaGFubmVsLT5maWxlTmFtZSA9ICIiOworCQkJY2hhbm5lbC0+bGluZU51bSA9IDA7CisjZW5kaWYKKworCQkJY2hhbm5lbC0+ZG1hY0h3SGFuZGxlID0KKwkJCSAgICBkbWFjSHdfZ2V0Q2hhbm5lbEhhbmRsZShkbWFjSHdfTUFLRV9DSEFOTkVMX0lECisJCQkJCQkgICAgKGNvbnRyb2xsZXJJZHgsCisJCQkJCQkgICAgIGNoYW5uZWxJZHgpKTsKKwkJCWRtYWNId19pbml0Q2hhbm5lbChjaGFubmVsLT5kbWFjSHdIYW5kbGUpOworCQl9CisJfQorCisJLyogUmVjb3JkIGFueSBzcGVjaWFsIGF0dHJpYnV0ZXMgdGhhdCBjaGFubmVscyBtYXkgaGF2ZSAqLworCisJZ0RNQS5jb250cm9sbGVyWzBdLmNoYW5uZWxbMF0uZmxhZ3MgfD0gRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPOworCWdETUEuY29udHJvbGxlclswXS5jaGFubmVsWzFdLmZsYWdzIHw9IERNQV9DSEFOTkVMX0ZMQUdfTEFSR0VfRklGTzsKKwlnRE1BLmNvbnRyb2xsZXJbMV0uY2hhbm5lbFswXS5mbGFncyB8PSBETUFfQ0hBTk5FTF9GTEFHX0xBUkdFX0ZJRk87CisJZ0RNQS5jb250cm9sbGVyWzFdLmNoYW5uZWxbMV0uZmxhZ3MgfD0gRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPOworCisJLyogTm93IHdhbGsgdGhyb3VnaCBhbmQgcmVjb3JkIHRoZSBkZWRpY2F0ZWQgY2hhbm5lbHMuICovCisKKwlmb3IgKGRldklkeCA9IDA7IGRldklkeCA8IERNQV9OVU1fREVWSUNFX0VOVFJJRVM7IGRldklkeCsrKSB7CisJCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZJZHhdOworCisJCWlmICgoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX05PX0lTUikgIT0gMCkKKwkJICAgICYmICgoZGV2QXR0ci0+ZmxhZ3MgJiBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVEKSA9PSAwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkRNQSBEZXZpY2U6ICVzIENhbiBvbmx5IHJlcXVlc3QgTk9fSVNSIGZvciBkZWRpY2F0ZWQgZGV2aWNlc1xuIiwKKwkJCSAgICAgICBkZXZBdHRyLT5uYW1lKTsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19JU19ERURJQ0FURUQpICE9IDApIHsKKwkJCS8qIFRoaXMgaXMgYSBkZWRpY2F0ZWQgZGV2aWNlLiBNYXJrIHRoZSBjaGFubmVsIGFzIGJlaW5nIHJlc2VydmVkLiAqLworCisJCQlpZiAoZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciA+PSBETUFfTlVNX0NPTlRST0xMRVJTKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJETUEgRGV2aWNlOiAlcyBETUEgQ29udHJvbGxlciAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJICAgICAgIGRldkF0dHItPm5hbWUsCisJCQkJICAgICAgIGRldkF0dHItPmRlZGljYXRlZENvbnRyb2xsZXIpOworCQkJCXJjID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJaWYgKGRldkF0dHItPmRlZGljYXRlZENoYW5uZWwgPj0gRE1BX05VTV9DSEFOTkVMUykgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiRE1BIERldmljZTogJXMgRE1BIENoYW5uZWwgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCSAgICAgICBkZXZBdHRyLT5uYW1lLAorCQkJCSAgICAgICBkZXZBdHRyLT5kZWRpY2F0ZWRDaGFubmVsKTsKKwkJCQlyYyA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCWRlZGljYXRlZEhhbmRsZSA9CisJCQkgICAgTUFLRV9IQU5ETEUoZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQkJZGV2QXR0ci0+ZGVkaWNhdGVkQ2hhbm5lbCk7CisJCQljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGRlZGljYXRlZEhhbmRsZSk7CisKKwkJCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRCkgIT0KKwkJCSAgICAwKSB7CisJCQkJcHJpbnRrCisJCQkJICAgICgiRE1BIERldmljZTogJXMgYXR0ZW1wdGluZyB0byB1c2Ugc2FtZSBETUEgQ29udHJvbGxlcjpDaGFubmVsICglZDolZCkgYXMgJXNcbiIsCisJCQkJICAgICBkZXZBdHRyLT5uYW1lLAorCQkJCSAgICAgZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQkgICAgIGRldkF0dHItPmRlZGljYXRlZENoYW5uZWwsCisJCQkJICAgICBETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXS4KKwkJCQkgICAgIG5hbWUpOworCQkJCXJjID0gLUVCVVNZOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQljaGFubmVsLT5mbGFncyB8PSBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRDsKKwkJCWNoYW5uZWwtPmRldlR5cGUgPSBkZXZJZHg7CisKKwkJCWlmIChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19OT19JU1IpIHsKKwkJCQljaGFubmVsLT5mbGFncyB8PSBETUFfQ0hBTk5FTF9GTEFHX05PX0lTUjsKKwkJCX0KKworCQkJLyogRm9yIGRlZGljYXRlZCBjaGFubmVscywgd2UgY2FuIGdvIGFoZWFkIGFuZCBjb25maWd1cmUgdGhlIERNQSBjaGFubmVsIG5vdyAqLworCQkJLyogYXMgd2VsbC4gKi8KKworCQkJQ29uZmlnQ2hhbm5lbChkZWRpY2F0ZWRIYW5kbGUpOworCQl9CisJfQorCisJLyogR28gdGhyb3VnaCBhbmQgcmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVycyAqLworCisJZm9yIChjb250cm9sbGVySWR4ID0gMDsgY29udHJvbGxlcklkeCA8IERNQV9OVU1fQ09OVFJPTExFUlM7CisJICAgICBjb250cm9sbGVySWR4KyspIHsKKwkJZm9yIChjaGFubmVsSWR4ID0gMDsgY2hhbm5lbElkeCA8IERNQV9OVU1fQ0hBTk5FTFM7CisJCSAgICAgY2hhbm5lbElkeCsrKSB7CisJCQljaGFubmVsID0KKwkJCSAgICAmZ0RNQS5jb250cm9sbGVyW2NvbnRyb2xsZXJJZHhdLmNoYW5uZWxbY2hhbm5lbElkeF07CisKKwkJCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX05PX0lTUikgPT0gMCkgeworCQkJCXNucHJpbnRmKGNoYW5uZWwtPm5hbWUsIHNpemVvZihjaGFubmVsLT5uYW1lKSwKKwkJCQkJICJkbWEgJWQ6JWQgJXMiLCBjb250cm9sbGVySWR4LAorCQkJCQkgY2hhbm5lbElkeCwKKwkJCQkJIGNoYW5uZWwtPmRldlR5cGUgPT0KKwkJCQkJIERNQV9ERVZJQ0VfTk9ORSA/ICIiIDoKKwkJCQkJIERNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPmRldlR5cGVdLgorCQkJCQkgbmFtZSk7CisKKwkJCQlyYyA9CisJCQkJICAgICByZXF1ZXN0X2lycShJUlFfRE1BMEMwICsKKwkJCQkJCSAoY29udHJvbGxlcklkeCAqCisJCQkJCQkgIERNQV9OVU1fQ0hBTk5FTFMpICsKKwkJCQkJCSBjaGFubmVsSWR4LAorCQkJCQkJIGRtYV9pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCQkJCSBJUlFGX0RJU0FCTEVELCBjaGFubmVsLT5uYW1lLAorCQkJCQkJIGNoYW5uZWwpOworCQkJCWlmIChyYyAhPSAwKSB7CisJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkgICAgICAgInJlcXVlc3RfaXJxIGZvciBJUlFfRE1BJWRDJWQgZmFpbGVkXG4iLAorCQkJCQkgICAgICAgY29udHJvbGxlcklkeCwgY2hhbm5lbElkeCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyogQ3JlYXRlIC9wcm9jL2RtYS9jaGFubmVscyBhbmQgL3Byb2MvZG1hL2RldmljZXMgKi8KKworCWdEbWFEaXIgPSBjcmVhdGVfcHJvY19lbnRyeSgiZG1hIiwgU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPLCBOVUxMKTsKKworCWlmIChnRG1hRGlyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIC9wcm9jL2RtYVxuIik7CisJfSBlbHNlIHsKKwkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiY2hhbm5lbHMiLCAwLCBnRG1hRGlyLAorCQkJCSAgICAgICBkbWFfcHJvY19yZWFkX2NoYW5uZWxzLCBOVUxMKTsKKwkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZGV2aWNlcyIsIDAsIGdEbWFEaXIsCisJCQkJICAgICAgIGRtYV9wcm9jX3JlYWRfZGV2aWNlcywgTlVMTCk7CisJCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoIm1lbS10eXBlIiwgMCwgZ0RtYURpciwKKwkJCQkgICAgICAgZG1hX3Byb2NfcmVhZF9tZW1fdHlwZSwgTlVMTCk7CisJfQorCitvdXQ6CisKKwl1cCgmZ0RNQS5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBSZXNlcnZlcyBhIGNoYW5uZWwgZm9yIHVzZSB3aXRoIEBhIGRldi4gSWYgdGhlIGRldmljZSBpcyBzZXR1cCB0byB1c2UKKyogICBhIHNoYXJlZCBjaGFubmVsLCB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCBhIGZyZWUgY2hhbm5lbAorKiAgIGJlY29tZXMgYXZhaWxhYmxlLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgPj0gMCAgICAtIEEgdmFsaWQgRE1BIEhhbmRsZS4KKyogICAgICAgLUVCVVNZICAtIERldmljZSBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIChETUFfREVCVUdfVFJBQ0tfUkVTRVJWQVRJT04pCitETUFfSGFuZGxlX3QgZG1hX3JlcXVlc3RfY2hhbm5lbF9kYmcKKyAgICAoRE1BX0RldmljZV90IGRldiwgY29uc3QgY2hhciAqZmlsZU5hbWUsIGludCBsaW5lTnVtKQorI2Vsc2UKK0RNQV9IYW5kbGVfdCBkbWFfcmVxdWVzdF9jaGFubmVsKERNQV9EZXZpY2VfdCBkZXYpCisjZW5kaWYKK3sKKwlETUFfSGFuZGxlX3QgaGFuZGxlOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCWludCBjb250cm9sbGVySWR4OworCWludCBjb250cm9sbGVySWR4MjsKKwlpbnQgY2hhbm5lbElkeDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmdETUEubG9jaykgPCAwKSB7CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJaWYgKChkZXYgPCAwKSB8fCAoZGV2ID49IERNQV9OVU1fREVWSUNFX0VOVFJJRVMpKSB7CisJCWhhbmRsZSA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2Rldl07CisKKyNpZiAoRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OKQorCXsKKwkJY2hhciAqczsKKworCQlzID0gc3RycmNocihmaWxlTmFtZSwgJy8nKTsKKwkJaWYgKHMgIT0gTlVMTCkgeworCQkJZmlsZU5hbWUgPSBzICsgMTsKKwkJfQorCX0KKyNlbmRpZgorCWlmICgoZGV2QXR0ci0+ZmxhZ3MgJiBETUFfREVWSUNFX0ZMQUdfSU5fVVNFKSAhPSAwKSB7CisJCS8qIFRoaXMgZGV2aWNlIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkIGFuZCBub3QgYmVlbiBmcmVlZCAqLworCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldmljZSAlcyBpcyBhbHJlYWR5IHJlcXVlc3RlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXZBdHRyLT5uYW1lKTsKKwkJaGFuZGxlID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKGRldkF0dHItPmZsYWdzICYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCkgIT0gMCkgeworCQkvKiBUaGlzIGRldmljZSBoYXMgYSBkZWRpY2F0ZWQgY2hhbm5lbC4gKi8KKworCQljaGFubmVsID0KKwkJICAgICZnRE1BLmNvbnRyb2xsZXJbZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlcl0uCisJCSAgICBjaGFubmVsW2RldkF0dHItPmRlZGljYXRlZENoYW5uZWxdOworCQlpZiAoKGNoYW5uZWwtPmZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0UpICE9IDApIHsKKwkJCWhhbmRsZSA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJY2hhbm5lbC0+ZmxhZ3MgfD0gRE1BX0NIQU5ORUxfRkxBR19JTl9VU0U7CisJCWRldkF0dHItPmZsYWdzIHw9IERNQV9ERVZJQ0VfRkxBR19JTl9VU0U7CisKKyNpZiAoRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OKQorCQljaGFubmVsLT5maWxlTmFtZSA9IGZpbGVOYW1lOworCQljaGFubmVsLT5saW5lTnVtID0gbGluZU51bTsKKyNlbmRpZgorCQloYW5kbGUgPQorCQkgICAgTUFLRV9IQU5ETEUoZGV2QXR0ci0+ZGVkaWNhdGVkQ29udHJvbGxlciwKKwkJCQlkZXZBdHRyLT5kZWRpY2F0ZWRDaGFubmVsKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogVGhpcyBkZXZpY2UgbmVlZHMgdG8gdXNlIG9uZSBvZiB0aGUgc2hhcmVkIGNoYW5uZWxzLiAqLworCisJaGFuZGxlID0gRE1BX0lOVkFMSURfSEFORExFOworCXdoaWxlIChoYW5kbGUgPT0gRE1BX0lOVkFMSURfSEFORExFKSB7CisJCS8qIFNjYW4gdGhyb3VnaCB0aGUgc2hhcmVkIGNoYW5uZWxzIGFuZCBzZWUgaWYgb25lIGlzIGF2YWlsYWJsZSAqLworCisJCWZvciAoY29udHJvbGxlcklkeDIgPSAwOyBjb250cm9sbGVySWR4MiA8IERNQV9OVU1fQ09OVFJPTExFUlM7CisJCSAgICAgY29udHJvbGxlcklkeDIrKykgeworCQkJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCB0cnkgb24gY29udHJvbGxlciAxIGZpcnN0LiAqLworCisJCQljb250cm9sbGVySWR4ID0gY29udHJvbGxlcklkeDI7CisJCQlpZiAoKGRldkF0dHItPgorCQkJICAgICBmbGFncyAmIERNQV9ERVZJQ0VfRkxBR19BTExPQ19ETUExX0ZJUlNUKSAhPSAwKSB7CisJCQkJY29udHJvbGxlcklkeCA9IDEgLSBjb250cm9sbGVySWR4OworCQkJfQorCisJCQkvKiBTZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgb24gdGhlIGNvbnRyb2xsZXIgYmVpbmcgdGVzdGVkICovCisKKwkJCWlmICgoZGV2QXR0ci0+CisJCQkgICAgIGZsYWdzICYgKERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwIDw8IGNvbnRyb2xsZXJJZHgpKQorCQkJICAgICE9IDApIHsKKwkJCQlmb3IgKGNoYW5uZWxJZHggPSAwOworCQkJCSAgICAgY2hhbm5lbElkeCA8IERNQV9OVU1fQ0hBTk5FTFM7CisJCQkJICAgICBjaGFubmVsSWR4KyspIHsKKwkJCQkJY2hhbm5lbCA9CisJCQkJCSAgICAmZ0RNQS5jb250cm9sbGVyW2NvbnRyb2xsZXJJZHhdLgorCQkJCQkgICAgY2hhbm5lbFtjaGFubmVsSWR4XTsKKworCQkJCQlpZiAoKChjaGFubmVsLT4KKwkJCQkJICAgICAgZmxhZ3MgJgorCQkJCQkgICAgICBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRCkgPT0KKwkJCQkJICAgICAwKQorCQkJCQkgICAgJiYKKwkJCQkJICAgICgoY2hhbm5lbC0+CisJCQkJCSAgICAgIGZsYWdzICYgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0UpCisJCQkJCSAgICAgPT0gMCkpIHsKKwkJCQkJCWlmICgoKGNoYW5uZWwtPgorCQkJCQkJICAgICAgZmxhZ3MgJgorCQkJCQkJICAgICAgRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPKQorCQkJCQkJICAgICAhPSAwKQorCQkJCQkJICAgICYmCisJCQkJCQkgICAgKChkZXZBdHRyLT4KKwkJCQkJCSAgICAgIGZsYWdzICYKKwkJCQkJCSAgICAgIERNQV9ERVZJQ0VfRkxBR19BTExPV19MQVJHRV9GSUZPKQorCQkJCQkJICAgICA9PSAwKSkgeworCQkJCQkJCS8qIFRoaXMgY2hhbm5lbCBpcyBhIGxhcmdlIGZpZm8gLSBkb24ndCB0aWUgaXQgdXAgKi8KKwkJCQkJCQkvKiB3aXRoIGRldmljZXMgdGhhdCB3ZSBkb24ndCB3YW50IHVzaW5nIGl0LiAqLworCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisKKwkJCQkJCWNoYW5uZWwtPmZsYWdzIHw9CisJCQkJCQkgICAgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0U7CisJCQkJCQljaGFubmVsLT5kZXZUeXBlID0gZGV2OworCQkJCQkJZGV2QXR0ci0+ZmxhZ3MgfD0KKwkJCQkJCSAgICBETUFfREVWSUNFX0ZMQUdfSU5fVVNFOworCisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKKwkJCQkJCWNoYW5uZWwtPmZpbGVOYW1lID0gZmlsZU5hbWU7CisJCQkJCQljaGFubmVsLT5saW5lTnVtID0gbGluZU51bTsKKyNlbmRpZgorCQkJCQkJaGFuZGxlID0KKwkJCQkJCSAgICBNQUtFX0hBTkRMRShjb250cm9sbGVySWR4LAorCQkJCQkJCQljaGFubmVsSWR4KTsKKworCQkJCQkJLyogTm93IHRoYXQgd2UndmUgcmVzZXJ2ZWQgdGhlIGNoYW5uZWwgLSB3ZSBjYW4gZ28gYWhlYWQgYW5kIGNvbmZpZ3VyZSBpdCAqLworCisJCQkJCQlpZiAoQ29uZmlnQ2hhbm5lbChoYW5kbGUpICE9IDApIHsKKwkJCQkJCQloYW5kbGUgPSAtRUlPOworCQkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkJCSAgICAgICAiZG1hX3JlcXVlc3RfY2hhbm5lbDogQ29uZmlnQ2hhbm5lbCBmYWlsZWRcbiIpOworCQkJCQkJfQorCQkJCQkJZ290byBvdXQ7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBObyBjaGFubmVscyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZS4gTGV0J3Mgd2FpdCBmb3Igb25lIHRvIGZyZWUgdXAuICovCisKKwkJeworCQkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJCXByZXBhcmVfdG9fd2FpdCgmZ0RNQS5mcmVlQ2hhbm5lbFEsICZ3YWl0LAorCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJdXAoJmdETUEubG9jayk7CisJCQlzY2hlZHVsZSgpOworCQkJZmluaXNoX3dhaXQoJmdETUEuZnJlZUNoYW5uZWxRLCAmd2FpdCk7CisKKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCS8qIFdlIGRvbid0IGN1cnJlbnRseSBob2xkIGdETUEubG9jaywgc28gd2UgcmV0dXJuIGRpcmVjdGx5ICovCisKKwkJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCQkJfQorCQl9CisKKwkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZ0RNQS5sb2NrKSkgeworCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJfQorCX0KKworb3V0OgorCXVwKCZnRE1BLmxvY2spOworCisJcmV0dXJuIGhhbmRsZTsKK30KKworLyogQ3JlYXRlIGJvdGggX2RiZyBhbmQgbm9uIF9kYmcgZnVuY3Rpb25zIGZvciBtb2R1bGVzLiAqLworCisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKKyN1bmRlZiBkbWFfcmVxdWVzdF9jaGFubmVsCitETUFfSGFuZGxlX3QgZG1hX3JlcXVlc3RfY2hhbm5lbChETUFfRGV2aWNlX3QgZGV2KQoreworCXJldHVybiBkbWFfcmVxdWVzdF9jaGFubmVsX2RiZyhkZXYsIF9fRklMRV9fLCBfX0xJTkVfXyk7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX3JlcXVlc3RfY2hhbm5lbF9kYmcpOworI2VuZGlmCitFWFBPUlRfU1lNQk9MKGRtYV9yZXF1ZXN0X2NoYW5uZWwpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEZyZWVzIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgRE1BIEhhbmRsZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9mcmVlX2NoYW5uZWwoRE1BX0hhbmRsZV90IGhhbmRsZQkvKiBETUEgaGFuZGxlLiAqLworICAgICkgeworCWludCByYyA9IDA7CisJRE1BX0NoYW5uZWxfdCAqY2hhbm5lbDsKKwlETUFfRGV2aWNlQXR0cmlidXRlX3QgKmRldkF0dHI7CisKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZnRE1BLmxvY2spIDwgMCkgeworCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCX0KKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKworCWlmICgoY2hhbm5lbC0+ZmxhZ3MgJiBETUFfQ0hBTk5FTF9GTEFHX0lTX0RFRElDQVRFRCkgPT0gMCkgeworCQljaGFubmVsLT5sYXN0RGV2VHlwZSA9IGNoYW5uZWwtPmRldlR5cGU7CisJCWNoYW5uZWwtPmRldlR5cGUgPSBETUFfREVWSUNFX05PTkU7CisJfQorCWNoYW5uZWwtPmZsYWdzICY9IH5ETUFfQ0hBTk5FTF9GTEFHX0lOX1VTRTsKKwlkZXZBdHRyLT5mbGFncyAmPSB+RE1BX0RFVklDRV9GTEFHX0lOX1VTRTsKKworb3V0OgorCXVwKCZnRE1BLmxvY2spOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZnRE1BLmZyZWVDaGFubmVsUSk7CisKKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY2hhbm5lbCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGRldmljZSBoYXMgYmVlbiBjb25maWd1cmVkIGFzIHVzaW5nIGEgc2hhcmVkCisqICAgY2hhbm5lbC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgICAgIERldmljZSB1c2VzIGEgZGVkaWNhdGVkIGNoYW5uZWwKKyogICAgICAgPiB6ZXJvICAgICAgRGV2aWNlIHVzZXMgYSBzaGFyZWQgY2hhbm5lbAorKiAgICAgICA8IHplcm8gICAgICBFcnJvciBjb2RlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZGV2aWNlX2lzX2NoYW5uZWxfc2hhcmVkKERNQV9EZXZpY2VfdCBkZXZpY2UJLyogRGV2aWNlIHRvIGNoZWNrLiAqLworICAgICkgeworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKworCWlmICghSXNEZXZpY2VWYWxpZChkZXZpY2UpKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2RldmljZV07CisKKwlyZXR1cm4gKChkZXZBdHRyLT5mbGFncyAmIERNQV9ERVZJQ0VfRkxBR19JU19ERURJQ0FURUQpID09IDApOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9kZXZpY2VfaXNfY2hhbm5lbF9zaGFyZWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEFsbG9jYXRlcyBidWZmZXJzIGZvciB0aGUgZGVzY3JpcHRvcnMuIFRoaXMgaXMgbm9ybWFsbHkgZG9uZSBhdXRvbWF0aWNhbGx5CisqICAgYnV0IG5lZWRzIHRvIGJlIGRvbmUgZXhwbGljaXRseSB3aGVuIGluaXRpYXRpbmcgYSBkbWEgZnJvbSBpbnRlcnJ1cHQKKyogICBjb250ZXh0LgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICBEZXNjcmlwdG9ycyB3ZXJlIGFsbG9jYXRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9NRU1fVE9fREVWIGFuZCBub3QgX0RFVl9UT19NRU0pCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FsbG9jX2Rlc2NyaXB0b3JzKERNQV9IYW5kbGVfdCBoYW5kbGUsCS8qIERNQSBIYW5kbGUgKi8KKwkJCSAgZG1hY0h3X1RSQU5TRkVSX1RZUEVfZSB0cmFuc2ZlclR5cGUsCS8qIFR5cGUgb2YgdHJhbnNmZXIgYmVpbmcgcGVyZm9ybWVkICovCisJCQkgIGRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgdG8gd3JpdGUgdG8gZGV2aWNlICovCisJCQkgIGRtYV9hZGRyX3QgZHN0RGF0YSwJLyogUG9pbnRlciB0byBkZXZpY2UgZGF0YSBhZGRyZXNzICovCisJCQkgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCURNQV9DaGFubmVsX3QgKmNoYW5uZWw7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCWludCBudW1EZXNjcmlwdG9yczsKKwlzaXplX3QgcmluZ0J5dGVzUmVxdWlyZWQ7CisJaW50IHJjID0gMDsKKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbY2hhbm5lbC0+ZGV2VHlwZV07CisKKwlpZiAoZGV2QXR0ci0+Y29uZmlnLnRyYW5zZmVyVHlwZSAhPSB0cmFuc2ZlclR5cGUpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRmlndXJlIG91dCBob3cgbWFueSBkZXNjcmlwdG9ycyB3ZSBuZWVkLiAqLworCisJLyogcHJpbnRrKCJzcmNEYXRhOiAweCUwOHggZHN0RGF0YTogMHglMDh4LCBudW1CeXRlczogJWRcbiIsICovCisJLyogICAgICAgIHNyY0RhdGEsIGRzdERhdGEsIG51bUJ5dGVzKTsgKi8KKworCW51bURlc2NyaXB0b3JzID0gZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCgmZGV2QXR0ci0+Y29uZmlnLAorCQkJCQkJCSAgICAgICh2b2lkICopc3JjRGF0YSwKKwkJCQkJCQkgICAgICAodm9pZCAqKWRzdERhdGEsCisJCQkJCQkJICAgICAgbnVtQnl0ZXMpOworCWlmIChudW1EZXNjcmlwdG9ycyA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IgcmluZywgb3IgaWYgd2UgbmVlZCB0byBhbGxvY2F0ZSAqLworCS8qIGEgbmV3IG9uZS4gKi8KKworCXJpbmdCeXRlc1JlcXVpcmVkID0gZG1hY0h3X2Rlc2NyaXB0b3JMZW4obnVtRGVzY3JpcHRvcnMpOworCisJLyogcHJpbnRrKCJyaW5nQnl0ZXNSZXF1aXJlZDogJWRcbiIsIHJpbmdCeXRlc1JlcXVpcmVkKTsgKi8KKworCWlmIChyaW5nQnl0ZXNSZXF1aXJlZCA+IGRldkF0dHItPnJpbmcuYnl0ZXNBbGxvY2F0ZWQpIHsKKwkJLyogTWFrZSBzdXJlIHRoYXQgdGhpcyBjb2RlIHBhdGggaXMgbmV2ZXIgdGFrZW4gZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gKi8KKwkJLyogSXQncyBPSyBmb3IgYW4gaW50ZXJydXB0IHRvIGluaXRpYXRlIGEgRE1BIHRyYW5zZmVyLCBidXQgdGhlIGRlc2NyaXB0b3IgKi8KKwkJLyogYWxsb2NhdGlvbiBuZWVkcyB0byBoYXZlIGFscmVhZHkgYmVlbiBkb25lLiAqLworCisJCW1pZ2h0X3NsZWVwKCk7CisKKwkJLyogRnJlZSB0aGUgb2xkIGRlc2NyaXB0b3IgcmluZyBhbmQgYWxsb2NhdGUgYSBuZXcgb25lLiAqLworCisJCWRtYV9mcmVlX2Rlc2NyaXB0b3JfcmluZygmZGV2QXR0ci0+cmluZyk7CisKKwkJLyogQW5kIGFsbG9jYXRlIGEgbmV3IG9uZS4gKi8KKworCQlyYyA9CisJCSAgICAgZG1hX2FsbG9jX2Rlc2NyaXB0b3JfcmluZygmZGV2QXR0ci0+cmluZywKKwkJCQkJICAgICAgIG51bURlc2NyaXB0b3JzKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKCVkKSBmYWlsZWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG51bURlc2NyaXB0b3JzKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQkvKiBTZXR1cCB0aGUgZGVzY3JpcHRvciBmb3IgdGhpcyB0cmFuc2ZlciAqLworCisJCWlmIChkbWFjSHdfaW5pdERlc2NyaXB0b3IoZGV2QXR0ci0+cmluZy52aXJ0QWRkciwKKwkJCQkJICBkZXZBdHRyLT5yaW5nLnBoeXNBZGRyLAorCQkJCQkgIGRldkF0dHItPnJpbmcuYnl0ZXNBbGxvY2F0ZWQsCisJCQkJCSAgbnVtRGVzY3JpcHRvcnMpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hY0h3X2luaXREZXNjcmlwdG9yIGZhaWxlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlJ3ZlIGFscmVhZHkgZ290IGVub3VnaCByaW5nIGJ1ZmZlciBhbGxvY2F0ZWQuIEFsbCB3ZSBuZWVkIHRvIGRvIGlzIHJlc2V0ICovCisJCS8qIGFueSBjb250cm9sIGluZm9ybWF0aW9uLCBqdXN0IGluIGNhc2UgdGhlIHByZXZpb3VzIERNQSB3YXMgc3RvcHBlZC4gKi8KKworCQlkbWFjSHdfcmVzZXREZXNjcmlwdG9yQ29udHJvbChkZXZBdHRyLT5yaW5nLnZpcnRBZGRyKTsKKwl9CisKKwkvKiBkbWFfYWxsb2MvZnJlZSBib3RoIHNldCB0aGUgcHJldlNyYy9Ec3REYXRhIHRvIDAuIElmIHRoZXkgaGFwcGVuIHRvIGJlIHRoZSBzYW1lICovCisJLyogYXMgbGFzdCB0aW1lLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2FsbCBzZXREYXRhRGVzY3JpcHRvciBhZ2Fpbi4gKi8KKworCWlmIChkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IoJmRldkF0dHItPmNvbmZpZywKKwkJCQkgICAgIGRldkF0dHItPnJpbmcudmlydEFkZHIsCisJCQkJICAgICAodm9pZCAqKXNyY0RhdGEsCisJCQkJICAgICAodm9pZCAqKWRzdERhdGEsIG51bUJ5dGVzKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hY0h3X3NldERhdGFEZXNjcmlwdG9yIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogUmVtZW1iZXIgdGhlIGNyaXRpY2FsIGluZm9ybWF0aW9uIGZvciB0aGlzIHRyYW5zZmVyIHNvIHRoYXQgd2UgY2FuIGVsaW1pbmF0ZSAqLworCS8qIGFub3RoZXIgY2FsbCB0byBkbWFfYWxsb2NfZGVzY3JpcHRvcnMgaWYgdGhlIGNhbGxlciByZXVzZXMgdGhlIHNhbWUgYnVmZmVycyAqLworCisJZGV2QXR0ci0+cHJldlNyY0RhdGEgPSBzcmNEYXRhOworCWRldkF0dHItPnByZXZEc3REYXRhID0gZHN0RGF0YTsKKwlkZXZBdHRyLT5wcmV2TnVtQnl0ZXMgPSBudW1CeXRlczsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9hbGxvY19kZXNjcmlwdG9ycyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWxsb2NhdGVzIGFuZCBzZXRzIHVwIGRlc2NyaXB0b3JzIGZvciBhIGRvdWJsZSBidWZmZXJlZCBjaXJjdWxhciBidWZmZXIuCisqCisqICAgVGhpcyBpcyBwcmltYXJpbHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGhpbmdzIGxpa2UgdGhlIGluZ3Jlc3Mgc2FtcGxlcworKiAgIGZyb20gYSBtaWNyb3Bob25lLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgPiAwICAgICBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgYWN0dWFsbHkgYWxsb2NhdGVkLgorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyogICAgICAgLUVOT01FTSBNZW1vcnkgZXhoYXVzdGVkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfYWxsb2NfZG91YmxlX2RzdF9kZXNjcmlwdG9ycyhETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCQkJICAgICBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2Ygc291cmNlIGRhdGEgKi8KKwkJCQkgICAgIGRtYV9hZGRyX3QgZHN0RGF0YTEsCS8qIFBoeXNpY2FsIGFkZHJlc3Mgb2YgZmlyc3QgZGVzdGluYXRpb24gYnVmZmVyICovCisJCQkJICAgICBkbWFfYWRkcl90IGRzdERhdGEyLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHNlY29uZCBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKwkJCQkgICAgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBkZXN0aW5hdGlvbiBidWZmZXIgKi8KKyAgICApIHsKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlpbnQgbnVtRHN0MURlc2NyaXB0b3JzOworCWludCBudW1Ec3QyRGVzY3JpcHRvcnM7CisJaW50IG51bURlc2NyaXB0b3JzOworCXNpemVfdCByaW5nQnl0ZXNSZXF1aXJlZDsKKwlpbnQgcmMgPSAwOworCisJY2hhbm5lbCA9IEhhbmRsZVRvQ2hhbm5lbChoYW5kbGUpOworCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtjaGFubmVsLT5kZXZUeXBlXTsKKworCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgZGVzY3JpcHRvcnMgd2UgbmVlZC4gKi8KKworCS8qIHByaW50aygic3JjRGF0YTogMHglMDh4IGRzdERhdGE6IDB4JTA4eCwgbnVtQnl0ZXM6ICVkXG4iLCAqLworCS8qICAgICAgICBzcmNEYXRhLCBkc3REYXRhLCBudW1CeXRlcyk7ICovCisKKwludW1Ec3QxRGVzY3JpcHRvcnMgPQorCSAgICAgZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCgmZGV2QXR0ci0+Y29uZmlnLCAodm9pZCAqKXNyY0RhdGEsCisJCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMSwgbnVtQnl0ZXMpOworCWlmIChudW1Ec3QxRGVzY3JpcHRvcnMgPCAwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwludW1Ec3QyRGVzY3JpcHRvcnMgPQorCSAgICAgZG1hY0h3X2NhbGN1bGF0ZURlc2NyaXB0b3JDb3VudCgmZGV2QXR0ci0+Y29uZmlnLCAodm9pZCAqKXNyY0RhdGEsCisJCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMiwgbnVtQnl0ZXMpOworCWlmIChudW1Ec3QyRGVzY3JpcHRvcnMgPCAwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwludW1EZXNjcmlwdG9ycyA9IG51bURzdDFEZXNjcmlwdG9ycyArIG51bURzdDJEZXNjcmlwdG9yczsKKwkvKiBwcmludGsoIm51bURlc2NyaXB0b3JzOiAlZFxuIiwgbnVtRGVzY3JpcHRvcnMpOyAqLworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgZGVzY3JpcHRvciByaW5nLCBvciBpZiB3ZSBuZWVkIHRvIGFsbG9jYXRlICovCisJLyogYSBuZXcgb25lLiAqLworCisJcmluZ0J5dGVzUmVxdWlyZWQgPSBkbWFjSHdfZGVzY3JpcHRvckxlbihudW1EZXNjcmlwdG9ycyk7CisKKwkvKiBwcmludGsoInJpbmdCeXRlc1JlcXVpcmVkOiAlZFxuIiwgcmluZ0J5dGVzUmVxdWlyZWQpOyAqLworCisJaWYgKHJpbmdCeXRlc1JlcXVpcmVkID4gZGV2QXR0ci0+cmluZy5ieXRlc0FsbG9jYXRlZCkgeworCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBuZXZlciB0YWtlbiBmcm9tIGludGVycnVwdCBjb250ZXh0LiAqLworCQkvKiBJdCdzIE9LIGZvciBhbiBpbnRlcnJ1cHQgdG8gaW5pdGlhdGUgYSBETUEgdHJhbnNmZXIsIGJ1dCB0aGUgZGVzY3JpcHRvciAqLworCQkvKiBhbGxvY2F0aW9uIG5lZWRzIHRvIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuICovCisKKwkJbWlnaHRfc2xlZXAoKTsKKworCQkvKiBGcmVlIHRoZSBvbGQgZGVzY3JpcHRvciByaW5nIGFuZCBhbGxvY2F0ZSBhIG5ldyBvbmUuICovCisKKwkJZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nKTsKKworCQkvKiBBbmQgYWxsb2NhdGUgYSBuZXcgb25lLiAqLworCisJCXJjID0KKwkJICAgICBkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nLAorCQkJCQkgICAgICAgbnVtRGVzY3JpcHRvcnMpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IGRtYV9hbGxvY19kZXNjcmlwdG9yX3JpbmcoJWQpIGZhaWxlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgcmluZ0J5dGVzUmVxdWlyZWQpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJLyogU2V0dXAgdGhlIGRlc2NyaXB0b3IgZm9yIHRoaXMgdHJhbnNmZXIuIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aXRoICovCisJLyogQ09OVElOVU9VUyBETUEgb3BlcmF0aW9ucywgd2UgbmVlZCB0byByZWluaXRpYWxpemUgZXZlcnkgdGltZSwgb3RoZXJ3aXNlICovCisJLyogc2V0RGF0YURlc2NyaXB0b3Igd2lsbCBrZWVwIHRyeWluZyB0byBhcHBlbmQgb250byB0aGUgZW5kLiAqLworCisJaWYgKGRtYWNId19pbml0RGVzY3JpcHRvcihkZXZBdHRyLT5yaW5nLnZpcnRBZGRyLAorCQkJCSAgZGV2QXR0ci0+cmluZy5waHlzQWRkciwKKwkJCQkgIGRldkF0dHItPnJpbmcuYnl0ZXNBbGxvY2F0ZWQsCisJCQkJICBudW1EZXNjcmlwdG9ycykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRtYWNId19pbml0RGVzY3JpcHRvciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogZG1hX2FsbG9jL2ZyZWUgYm90aCBzZXQgdGhlIHByZXZTcmMvRHN0RGF0YSB0byAwLiBJZiB0aGV5IGhhcHBlbiB0byBiZSB0aGUgc2FtZSAqLworCS8qIGFzIGxhc3QgdGltZSwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNhbGwgc2V0RGF0YURlc2NyaXB0b3IgYWdhaW4uICovCisKKwlpZiAoZG1hY0h3X3NldERhdGFEZXNjcmlwdG9yKCZkZXZBdHRyLT5jb25maWcsCisJCQkJICAgICBkZXZBdHRyLT5yaW5nLnZpcnRBZGRyLAorCQkJCSAgICAgKHZvaWQgKilzcmNEYXRhLAorCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMSwgbnVtQnl0ZXMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IgMSBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZG1hY0h3X3NldERhdGFEZXNjcmlwdG9yKCZkZXZBdHRyLT5jb25maWcsCisJCQkJICAgICBkZXZBdHRyLT5yaW5nLnZpcnRBZGRyLAorCQkJCSAgICAgKHZvaWQgKilzcmNEYXRhLAorCQkJCSAgICAgKHZvaWQgKilkc3REYXRhMiwgbnVtQnl0ZXMpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IgMiBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFlvdSBzaG91bGQgdXNlIGRtYV9zdGFydF90cmFuc2ZlciByYXRoZXIgdGhhbiBkbWFfdHJhbnNmZXJfeHh4IHNvIHdlIGRvbid0ICovCisJLyogdHJ5IHRvIG1ha2UgdGhlICdwcmV2JyB2YXJpYWJsZXMgcmlnaHQuICovCisKKwlkZXZBdHRyLT5wcmV2U3JjRGF0YSA9IDA7CisJZGV2QXR0ci0+cHJldkRzdERhdGEgPSAwOworCWRldkF0dHItPnByZXZOdW1CeXRlcyA9IDA7CisKKwlyZXR1cm4gbnVtRGVzY3JpcHRvcnM7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX2FsbG9jX2RvdWJsZV9kc3RfZGVzY3JpcHRvcnMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEluaXRpYXRlcyBhIHRyYW5zZmVyIHdoZW4gdGhlIGRlc2NyaXB0b3JzIGhhdmUgYWxyZWFkeSBiZWVuIHNldHVwLgorKgorKiAgIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIGFuZCBub3JtYWxseSwgdGhlIGRtYV90cmFuc2Zlcl94eHggZnVuY3Rpb25zIHNob3VsZAorKiAgIGJlIHVzZWQuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRU5PREVWIEludmFsaWQgaGFuZGxlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc3RhcnRfdHJhbnNmZXIoRE1BX0hhbmRsZV90IGhhbmRsZSkKK3sKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPmRldlR5cGVdOworCisJZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIoY2hhbm5lbC0+ZG1hY0h3SGFuZGxlLCAmZGV2QXR0ci0+Y29uZmlnLAorCQkJCWRldkF0dHItPnJpbmcudmlydEFkZHIpOworCisJLyogU2luY2Ugd2UgZ290IHRoaXMgZmFyLCBldmVyeXRoaW5nIHdlbnQgc3VjY2Vzc2Z1bGx5ICovCisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfc3RhcnRfdHJhbnNmZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFN0b3BzIGEgcHJldmlvdXNseSBzdGFydGVkIERNQSB0cmFuc2Zlci4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0b3BwZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9ERVYgSW52YWxpZCBoYW5kbGUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9zdG9wX3RyYW5zZmVyKERNQV9IYW5kbGVfdCBoYW5kbGUpCit7CisJRE1BX0NoYW5uZWxfdCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSBIYW5kbGVUb0NoYW5uZWwoaGFuZGxlKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRtYWNId19zdG9wVHJhbnNmZXIoY2hhbm5lbC0+ZG1hY0h3SGFuZGxlKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9zdG9wX3RyYW5zZmVyKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBXYWl0cyBmb3IgYSBETUEgdG8gY29tcGxldGUgYnkgcG9sbGluZy4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkCisqICAgdG8gYmUgdXNlZCBmb3IgdGVzdGluZy4gSW50ZXJydXB0cyBzaG91bGQgYmUgdXNlZCBmb3IgbW9zdCBETUEgb3BlcmF0aW9ucy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV93YWl0X3RyYW5zZmVyX2RvbmUoRE1BX0hhbmRsZV90IGhhbmRsZSkKK3sKKwlETUFfQ2hhbm5lbF90ICpjaGFubmVsOworCWRtYWNId19UUkFOU0ZFUl9TVEFUVVNfZSBzdGF0dXM7CisKKwljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGhhbmRsZSk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl3aGlsZSAoKHN0YXR1cyA9CisJCWRtYWNId190cmFuc2ZlckNvbXBsZXRlZChjaGFubmVsLT5kbWFjSHdIYW5kbGUpKSA9PQorCSAgICAgICBkbWFjSHdfVFJBTlNGRVJfU1RBVFVTX0JVU1kpIHsKKwkJOworCX0KKworCWlmIChzdGF0dXMgPT0gZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19FUlJPUikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgdHJhbnNmZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfd2FpdF90cmFuc2Zlcl9kb25lKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWF0ZXMgYSBETUEsIGFsbG9jYXRpbmcgdGhlIGRlc2NyaXB0b3JzIGFzIHJlcXVpcmVkLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICBUcmFuc2ZlciB3YXMgc3RhcnRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9ERVZfVE9fTUVNIGFuZCBub3QgX01FTV9UT19ERVYpCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfdHJhbnNmZXIoRE1BX0hhbmRsZV90IGhhbmRsZSwJLyogRE1BIEhhbmRsZSAqLworCQkgZG1hY0h3X1RSQU5TRkVSX1RZUEVfZSB0cmFuc2ZlclR5cGUsCS8qIFR5cGUgb2YgdHJhbnNmZXIgYmVpbmcgcGVyZm9ybWVkICovCisJCSBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIHRvIHdyaXRlIHRvIGRldmljZSAqLworCQkgZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQb2ludGVyIHRvIGRldmljZSBkYXRhIGFkZHJlc3MgKi8KKwkJIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgdG8gdGhlIGRldmljZSAqLworICAgICkgeworCURNQV9DaGFubmVsX3QgKmNoYW5uZWw7CisJRE1BX0RldmljZUF0dHJpYnV0ZV90ICpkZXZBdHRyOworCWludCByYyA9IDA7CisKKwljaGFubmVsID0gSGFuZGxlVG9DaGFubmVsKGhhbmRsZSk7CisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXZBdHRyID0gJkRNQV9nRGV2aWNlQXR0cmlidXRlW2NoYW5uZWwtPmRldlR5cGVdOworCisJaWYgKGRldkF0dHItPmNvbmZpZy50cmFuc2ZlclR5cGUgIT0gdHJhbnNmZXJUeXBlKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFdlIGtlZXAgdHJhY2sgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmV2aW91cyByZXF1ZXN0IGZvciB0aGlzICovCisJLyogZGV2aWNlLCBhbmQgaWYgdGhlIGF0dHJpYnV0ZXMgbWF0Y2gsIHRoZW4gd2UgY2FuIHVzZSB0aGUgZGVzY3JpcHRvcnMgd2Ugc2V0dXAgKi8KKwkvKiB0aGUgbGFzdCB0aW1lLCBhbmQgbm90IGhhdmUgdG8gcmVpbml0aWFsaXplIGV2ZXJ5dGhpbmcuICovCisKKwl7CisJCXJjID0KKwkJICAgICBkbWFfYWxsb2NfZGVzY3JpcHRvcnMoaGFuZGxlLCB0cmFuc2ZlclR5cGUsIHNyY0RhdGEsCisJCQkJCSAgIGRzdERhdGEsIG51bUJ5dGVzKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXJldHVybiByYzsKKwkJfQorCX0KKworCS8qIEFuZCBraWNrIG9mZiB0aGUgdHJhbnNmZXIgKi8KKworCWRldkF0dHItPm51bUJ5dGVzID0gbnVtQnl0ZXM7CisJZGV2QXR0ci0+dHJhbnNmZXJTdGFydFRpbWUgPSB0aW1lcl9nZXRfdGlja19jb3VudCgpOworCisJZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIoY2hhbm5lbC0+ZG1hY0h3SGFuZGxlLCAmZGV2QXR0ci0+Y29uZmlnLAorCQkJCWRldkF0dHItPnJpbmcudmlydEFkZHIpOworCisJLyogU2luY2Ugd2UgZ290IHRoaXMgZmFyLCBldmVyeXRoaW5nIHdlbnQgc3VjY2Vzc2Z1bGx5ICovCisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfdHJhbnNmZXIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFNldCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHRyYW5zZmVyIGNvbXBsZXRlcy4KKyogICBJZiBhIE5VTEwgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc2V0LCB0aGVuIG5vIGNhbGxiYWNrIHdpbGwgb2NjdXIuCisqCisqICAgQG5vdGUgICBAYSBkZXZIYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIC0gU3VjY2VzcworKiAgICAgICAtRU5PREVWIC0gRGV2aWNlIGhhbmRlZCBpbiBpcyBpbnZhbGlkLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX3NldF9kZXZpY2VfaGFuZGxlcihETUFfRGV2aWNlX3QgZGV2LAkvKiBEZXZpY2UgdG8gc2V0IHRoZSBjYWxsYmFjayBmb3IuICovCisJCQkgICBETUFfRGV2aWNlSGFuZGxlcl90IGRldkhhbmRsZXIsCS8qIEZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgRE1BIGNvbXBsZXRlcyAqLworCQkJICAgdm9pZCAqdXNlckRhdGEJLyogUG9pbnRlciB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBkZXZIYW5kbGVyLiAqLworICAgICkgeworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFJc0RldmljZVZhbGlkKGRldikpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldkF0dHIgPSAmRE1BX2dEZXZpY2VBdHRyaWJ1dGVbZGV2XTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRldkF0dHItPnVzZXJEYXRhID0gdXNlckRhdGE7CisJZGV2QXR0ci0+ZGV2SGFuZGxlciA9IGRldkhhbmRsZXI7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfc2V0X2RldmljZV9oYW5kbGVyKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWFsaXplcyBhIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2luaXRfbWVtX21hcChETUFfTWVtTWFwX3QgKm1lbU1hcCkKK3sKKwltZW1zZXQobWVtTWFwLCAwLCBzaXplb2YoKm1lbU1hcCkpOworCisJaW5pdF9NVVRFWCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9pbml0X21lbV9tYXApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFJlbGVhc2VzIGFueSBtZW1vcnkgY3VycmVudGx5IGJlaW5nIGhlbGQgYnkgYSBtZW1vcnkgbWFwcGluZyBzdHJ1Y3R1cmUuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfdGVybV9tZW1fbWFwKERNQV9NZW1NYXBfdCAqbWVtTWFwKQoreworCWRvd24oJm1lbU1hcC0+bG9jayk7CS8qIEp1c3QgYmVpbmcgcGFyYW5vaWQgKi8KKworCS8qIEZyZWUgdXAgYW55IGFsbG9jYXRlZCBtZW1vcnkgKi8KKworCXVwKCZtZW1NYXAtPmxvY2spOworCW1lbXNldChtZW1NYXAsIDAsIHNpemVvZigqbWVtTWFwKSk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfdGVybV9tZW1fbWFwKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBMb29rcyBhdCBhIG1lbW9yeSBhZGRyZXNzIGFuZCBjYXRlZ29yaXplcyBpdC4KKyoKKyogICBAcmV0dXJuIE9uZSBvZiB0aGUgdmFsdWVzIGZyb20gdGhlIERNQV9NZW1UeXBlX3QgZW51bWVyYXRpb24uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0RNQV9NZW1UeXBlX3QgZG1hX21lbV90eXBlKHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyVmFsID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKworCWlmIChhZGRyVmFsID49IFZNQUxMT0NfRU5EKSB7CisJCS8qIE5PVEU6IERNQSB2aXJ0dWFsIG1lbW9yeSBzcGFjZSBzdGFydHMgYXQgMHhGRnh4eHh4eCAqLworCisJCS8qIGRtYV9hbGxvY194eHggcGFnZXMgYXJlIHBoeXNpY2FsbHkgYW5kIHZpcnR1YWxseSBjb250aWd1b3VzICovCisKKwkJcmV0dXJuIERNQV9NRU1fVFlQRV9ETUE7CisJfQorCisJLyogVGVjaG5pY2FsbHksIHdlIGNvdWxkIGFkZCBvbmUgbW9yZSBjbGFzc2lmaWNhdGlvbi4gQWRkcmVzc2VzIGJldHdlZW4gVk1BTExPQ19FTkQgKi8KKwkvKiBhbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRE1BIHZpcnR1YWwgYWRkcmVzcyBjb3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIEkvTyBzcGFjZS4gKi8KKwkvKiBSaWdodCBub3csIG5vYm9keSBjYXJlcyBhYm91dCB0aGlzIHBhcnRpY3VsYXIgY2xhc3NpZmljYXRpb24sIHNvIHdlIGlnbm9yZSBpdC4gKi8KKworCWlmIChpc192bWFsbG9jX2FkZHIoYWRkcikpIHsKKwkJLyogQWRkcmVzcyBjb21lcyBmcm9tIHRoZSB2bWFsbG9jJ2QgcmVnaW9uLiBQYWdlcyBhcmUgdmlydHVhbGx5ICovCisJCS8qIGNvbnRpZ3VvdXMgYnV0IE5PVCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgKi8KKworCQlyZXR1cm4gRE1BX01FTV9UWVBFX1ZNQUxMT0M7CisJfQorCisJaWYgKGFkZHJWYWwgPj0gUEFHRV9PRkZTRVQpIHsKKwkJLyogUEFHRV9PRkZTRVQgaXMgdHlwaWNhbGx5IDB4QzAwMDAwMDAgKi8KKworCQkvKiBrbWFsbG9jJ2QgcGFnZXMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cyAqLworCisJCXJldHVybiBETUFfTUVNX1RZUEVfS01BTExPQzsKKwl9CisKKwlyZXR1cm4gRE1BX01FTV9UWVBFX1VTRVI7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX21lbV90eXBlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBMb29rcyBhdCBhIG1lbW9yeSBhZGRyZXNzIGFuZCBkZXRlcm1pbmVzIGlmIHdlIHN1cHBvcnQgRE1BJ2luZyB0by9mcm9tCisqICAgdGhhdCB0eXBlIG9mIG1lbW9yeS4KKyoKKyogICBAcmV0dXJuIGJvb2xlYW4gLQorKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSAwIG1lYW5zIGRtYSBzdXBwb3J0ZWQKKyogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gMCBtZWFucyBkbWEgbm90IHN1cHBvcnRlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21lbV9zdXBwb3J0c19kbWEodm9pZCAqYWRkcikKK3sKKwlETUFfTWVtVHlwZV90IG1lbVR5cGUgPSBkbWFfbWVtX3R5cGUoYWRkcik7CisKKwlyZXR1cm4gKG1lbVR5cGUgPT0gRE1BX01FTV9UWVBFX0RNQSkKKyNpZiBBTExPV19NQVBfT0ZfS01BTExPQ19NRU1PUlkKKwkgICAgfHwgKG1lbVR5cGUgPT0gRE1BX01FTV9UWVBFX0tNQUxMT0MpCisjZW5kaWYKKwkgICAgfHwgKG1lbVR5cGUgPT0gRE1BX01FTV9UWVBFX1VTRVIpOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9tZW1fc3VwcG9ydHNfZG1hKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9zdGFydChETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIJLyogRGlyZWN0aW9uIHRoYXQgdGhlIG1hcHBpbmcgd2lsbCBiZSBnb2luZyAqLworICAgICkgeworCWludCByYzsKKworCWRvd24oJm1lbU1hcC0+bG9jayk7CisKKwlETUFfTUFQX1BSSU5UKCJtZW1NYXA6ICVwXG4iLCBtZW1NYXApOworCisJaWYgKG1lbU1hcC0+aW5Vc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbWVtb3J5IG1hcCAlcCBpcyBhbHJlYWR5IGJlaW5nIHVzZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgbWVtTWFwKTsKKwkJcmMgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCW1lbU1hcC0+aW5Vc2UgPSAxOworCW1lbU1hcC0+ZGlyID0gZGlyOworCW1lbU1hcC0+bnVtUmVnaW9uc1VzZWQgPSAwOworCisJcmMgPSAwOworCitvdXQ6CisKKwlETUFfTUFQX1BSSU5UKCJyZXR1cm5pbmcgJWQiLCByYyk7CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfbWFwX3N0YXJ0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBZGRzIGEgc2VnbWVudCBvZiBtZW1vcnkgdG8gYSBtZW1vcnkgbWFwLiBFYWNoIHNlZ21lbnQgaXMgYm90aAorKiAgIHBoeXNpY2FsbHkgYW5kIHZpcnR1YWxseSBjb250aWd1b3VzLgorKgorKiAgIEByZXR1cm4gICAgIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgZG1hX21hcF9hZGRfc2VnbWVudChETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJCSAgICAgICBETUFfUmVnaW9uX3QgKnJlZ2lvbiwJLyogUmVnaW9uIHRoYXQgdGhlIHNlZ21lbnQgYmVsb25ncyB0byAqLworCQkJICAgICAgIHZvaWQgKnZpcnRBZGRyLAkvKiBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHNlZ21lbnQgYmVpbmcgYWRkZWQgKi8KKwkJCSAgICAgICBkbWFfYWRkcl90IHBoeXNBZGRyLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBzZWdtZW50IGJlaW5nIGFkZGVkICovCisJCQkgICAgICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyBvZiB0aGUgc2VnbWVudCBiZWluZyBhZGRlZCAqLworICAgICkgeworCURNQV9TZWdtZW50X3QgKnNlZ21lbnQ7CisKKwlETUFfTUFQX1BSSU5UKCJtZW1NYXA6JXAgdmE6JXAgcGE6MHgleCAjOiVkXG4iLCBtZW1NYXAsIHZpcnRBZGRyLAorCQkgICAgICBwaHlzQWRkciwgbnVtQnl0ZXMpOworCisJLyogU2FuaXR5IGNoZWNrICovCisKKwlpZiAoKCh1bnNpZ25lZCBsb25nKXZpcnRBZGRyIDwgKHVuc2lnbmVkIGxvbmcpcmVnaW9uLT52aXJ0QWRkcikKKwkgICAgfHwgKCgodW5zaWduZWQgbG9uZyl2aXJ0QWRkciArIG51bUJ5dGVzKSkgPgorCSAgICAoKHVuc2lnbmVkIGxvbmcpcmVnaW9uLT52aXJ0QWRkciArIHJlZ2lvbi0+bnVtQnl0ZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiB2aXJ0QWRkciAlcCBpcyBvdXRzaWRlIHJlZ2lvbiBAICVwIGxlbjogJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmlydEFkZHIsIHJlZ2lvbi0+dmlydEFkZHIsIHJlZ2lvbi0+bnVtQnl0ZXMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocmVnaW9uLT5udW1TZWdtZW50c1VzZWQgPiAwKSB7CisJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIHNlZ21lbnQgaXMgcGh5c2ljYWxseSBjb250aWd1b3VzIHdpdGggdGhlIHByZXZpb3VzIG9uZSAqLworCisJCXNlZ21lbnQgPSAmcmVnaW9uLT5zZWdtZW50W3JlZ2lvbi0+bnVtU2VnbWVudHNVc2VkIC0gMV07CisKKwkJaWYgKChzZWdtZW50LT5waHlzQWRkciArIHNlZ21lbnQtPm51bUJ5dGVzKSA9PSBwaHlzQWRkcikgeworCQkJLyogSXQgaXMgLSBqdXN0IGFkZCBvbiB0byB0aGUgZW5kICovCisKKwkJCURNQV9NQVBfUFJJTlQoImFwcGVuZGluZyAlZCBieXRlcyB0byBsYXN0IHNlZ21lbnRcbiIsCisJCQkJICAgICAgbnVtQnl0ZXMpOworCisJCQlzZWdtZW50LT5udW1CeXRlcyArPSBudW1CeXRlczsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBSZWFsbG9jYXRlIHRvIGhvbGQgbW9yZSBzZWdtZW50cywgaWYgcmVxdWlyZWQuICovCisKKwlpZiAocmVnaW9uLT5udW1TZWdtZW50c1VzZWQgPj0gcmVnaW9uLT5udW1TZWdtZW50c0FsbG9jYXRlZCkgeworCQlETUFfU2VnbWVudF90ICpuZXdTZWdtZW50OworCQlzaXplX3Qgb2xkU2l6ZSA9CisJCSAgICByZWdpb24tPm51bVNlZ21lbnRzQWxsb2NhdGVkICogc2l6ZW9mKCpuZXdTZWdtZW50KTsKKwkJaW50IG5ld0FsbG9jID0gcmVnaW9uLT5udW1TZWdtZW50c0FsbG9jYXRlZCArIDQ7CisJCXNpemVfdCBuZXdTaXplID0gbmV3QWxsb2MgKiBzaXplb2YoKm5ld1NlZ21lbnQpOworCisJCW5ld1NlZ21lbnQgPSBrbWFsbG9jKG5ld1NpemUsIEdGUF9LRVJORUwpOworCQlpZiAobmV3U2VnbWVudCA9PSBOVUxMKSB7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1jcHkobmV3U2VnbWVudCwgcmVnaW9uLT5zZWdtZW50LCBvbGRTaXplKTsKKwkJbWVtc2V0KCYoKHVpbnQ4X3QgKikgbmV3U2VnbWVudClbb2xkU2l6ZV0sIDAsCisJCSAgICAgICBuZXdTaXplIC0gb2xkU2l6ZSk7CisJCWtmcmVlKHJlZ2lvbi0+c2VnbWVudCk7CisKKwkJcmVnaW9uLT5udW1TZWdtZW50c0FsbG9jYXRlZCA9IG5ld0FsbG9jOworCQlyZWdpb24tPnNlZ21lbnQgPSBuZXdTZWdtZW50OworCX0KKworCXNlZ21lbnQgPSAmcmVnaW9uLT5zZWdtZW50W3JlZ2lvbi0+bnVtU2VnbWVudHNVc2VkXTsKKwlyZWdpb24tPm51bVNlZ21lbnRzVXNlZCsrOworCisJc2VnbWVudC0+dmlydEFkZHIgPSB2aXJ0QWRkcjsKKwlzZWdtZW50LT5waHlzQWRkciA9IHBoeXNBZGRyOworCXNlZ21lbnQtPm51bUJ5dGVzID0gbnVtQnl0ZXM7CisKKwlETUFfTUFQX1BSSU5UKCJyZXR1cm5pbmcgc3VjY2Vzc1xuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBZGRzIGEgcmVnaW9uIG9mIG1lbW9yeSB0byBhIG1lbW9yeSBtYXAuIEVhY2ggcmVnaW9uIGlzIHZpcnR1YWxseQorKiAgIGNvbnRpZ3VvdXMsIGJ1dCBub3QgbmVjZXNzYXJpbHkgcGh5c2ljYWxseSBjb250aWd1b3VzLgorKgorKiAgIEByZXR1cm4gICAgIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfbWFwX2FkZF9yZWdpb24oRE1BX01lbU1hcF90ICptZW1NYXAsCS8qIFN0b3JlcyBzdGF0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFwICovCisJCSAgICAgICB2b2lkICptZW0sCS8qIFZpcnR1YWwgYWRkcmVzcyB0aGF0IHdlIHdhbnQgdG8gZ2V0IGEgbWFwIG9mICovCisJCSAgICAgICBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIGJlaW5nIG1hcHBlZCAqLworICAgICkgeworCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKW1lbTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCWludCByYyA9IDA7CisJRE1BX1JlZ2lvbl90ICpyZWdpb247CisJZG1hX2FkZHJfdCBwaHlzQWRkcjsKKworCWRvd24oJm1lbU1hcC0+bG9jayk7CisKKwlETUFfTUFQX1BSSU5UKCJtZW1NYXA6JXAgdmE6JXAgIzolZFxuIiwgbWVtTWFwLCBtZW0sIG51bUJ5dGVzKTsKKworCWlmICghbWVtTWFwLT5pblVzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBNYWtlIHN1cmUgeW91IGNhbGwgZG1hX21hcF9zdGFydCBmaXJzdFxuIiwKKwkJICAgICAgIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZWFsbG9jYXRlIHRvIGhvbGQgbW9yZSByZWdpb25zLiAqLworCisJaWYgKG1lbU1hcC0+bnVtUmVnaW9uc1VzZWQgPj0gbWVtTWFwLT5udW1SZWdpb25zQWxsb2NhdGVkKSB7CisJCURNQV9SZWdpb25fdCAqbmV3UmVnaW9uOworCQlzaXplX3Qgb2xkU2l6ZSA9CisJCSAgICBtZW1NYXAtPm51bVJlZ2lvbnNBbGxvY2F0ZWQgKiBzaXplb2YoKm5ld1JlZ2lvbik7CisJCWludCBuZXdBbGxvYyA9IG1lbU1hcC0+bnVtUmVnaW9uc0FsbG9jYXRlZCArIDQ7CisJCXNpemVfdCBuZXdTaXplID0gbmV3QWxsb2MgKiBzaXplb2YoKm5ld1JlZ2lvbik7CisKKwkJbmV3UmVnaW9uID0ga21hbGxvYyhuZXdTaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG5ld1JlZ2lvbiA9PSBOVUxMKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQltZW1jcHkobmV3UmVnaW9uLCBtZW1NYXAtPnJlZ2lvbiwgb2xkU2l6ZSk7CisJCW1lbXNldCgmKCh1aW50OF90ICopIG5ld1JlZ2lvbilbb2xkU2l6ZV0sIDAsIG5ld1NpemUgLSBvbGRTaXplKTsKKworCQlrZnJlZShtZW1NYXAtPnJlZ2lvbik7CisKKwkJbWVtTWFwLT5udW1SZWdpb25zQWxsb2NhdGVkID0gbmV3QWxsb2M7CisJCW1lbU1hcC0+cmVnaW9uID0gbmV3UmVnaW9uOworCX0KKworCXJlZ2lvbiA9ICZtZW1NYXAtPnJlZ2lvblttZW1NYXAtPm51bVJlZ2lvbnNVc2VkXTsKKwltZW1NYXAtPm51bVJlZ2lvbnNVc2VkKys7CisKKwlvZmZzZXQgPSBhZGRyICYgflBBR0VfTUFTSzsKKworCXJlZ2lvbi0+bWVtVHlwZSA9IGRtYV9tZW1fdHlwZShtZW0pOworCXJlZ2lvbi0+dmlydEFkZHIgPSBtZW07CisJcmVnaW9uLT5udW1CeXRlcyA9IG51bUJ5dGVzOworCXJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkID0gMDsKKwlyZWdpb24tPm51bUxvY2tlZFBhZ2VzID0gMDsKKwlyZWdpb24tPmxvY2tlZFBhZ2VzID0gTlVMTDsKKworCXN3aXRjaCAocmVnaW9uLT5tZW1UeXBlKSB7CisJY2FzZSBETUFfTUVNX1RZUEVfVk1BTExPQzoKKwkJeworCQkJYXRvbWljX2luYygmZ0RtYVN0YXRNZW1UeXBlVm1hbGxvYyk7CisKKwkJCS8qIHByaW50ayhLRVJOX0VSUiAiJXM6IHZtYWxsb2MnZCBwYWdlcyBhcmUgbm90IHN1cHBvcnRlZFxuIiwgX19mdW5jX18pOyAqLworCisJCQkvKiB2bWFsbG9jJ2QgcGFnZXMgYXJlIG5vdCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgKi8KKworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCWNhc2UgRE1BX01FTV9UWVBFX0tNQUxMT0M6CisJCXsKKwkJCWF0b21pY19pbmMoJmdEbWFTdGF0TWVtVHlwZUttYWxsb2MpOworCisJCQkvKiBrbWFsbG9jJ2QgcGFnZXMgYXJlIHBoeXNpY2FsbHkgY29udGlndW91cywgc28gdGhleSdsbCBoYXZlIGV4YWN0bHkgKi8KKwkJCS8qIG9uZSBzZWdtZW50ICovCisKKyNpZiBBTExPV19NQVBfT0ZfS01BTExPQ19NRU1PUlkKKwkJCXBoeXNBZGRyID0KKwkJCSAgICBkbWFfbWFwX3NpbmdsZShOVUxMLCBtZW0sIG51bUJ5dGVzLCBtZW1NYXAtPmRpcik7CisJCQlyYyA9IGRtYV9tYXBfYWRkX3NlZ21lbnQobWVtTWFwLCByZWdpb24sIG1lbSwgcGh5c0FkZHIsCisJCQkJCQkgbnVtQnl0ZXMpOworI2Vsc2UKKwkJCXJjID0gLUVJTlZBTDsKKyNlbmRpZgorCQkJYnJlYWs7CisJCX0KKworCWNhc2UgRE1BX01FTV9UWVBFX0RNQToKKwkJeworCQkJLyogZG1hX2FsbG9jX3h4eCBwYWdlcyBhcmUgcGh5c2ljYWxseSBjb250aWd1b3VzICovCisKKwkJCWF0b21pY19pbmMoJmdEbWFTdGF0TWVtVHlwZUNvaGVyZW50KTsKKworCQkJcGh5c0FkZHIgPSAodm1hbGxvY190b19wZm4obWVtKSA8PCBQQUdFX1NISUZUKSArIG9mZnNldDsKKworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgcGh5c0FkZHIsIG51bUJ5dGVzLAorCQkJCQkJbWVtTWFwLT5kaXIpOworCQkJcmMgPSBkbWFfbWFwX2FkZF9zZWdtZW50KG1lbU1hcCwgcmVnaW9uLCBtZW0sIHBoeXNBZGRyLAorCQkJCQkJIG51bUJ5dGVzKTsKKwkJCWJyZWFrOworCQl9CisKKwljYXNlIERNQV9NRU1fVFlQRV9VU0VSOgorCQl7CisJCQlzaXplX3QgZmlyc3RQYWdlT2Zmc2V0OworCQkJc2l6ZV90IGZpcnN0UGFnZVNpemU7CisJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCQkJc3RydWN0IHRhc2tfc3RydWN0ICp1c2VyVGFzazsKKworCQkJYXRvbWljX2luYygmZ0RtYVN0YXRNZW1UeXBlVXNlcik7CisKKyNpZiAxCisJCQkvKiBJZiB0aGUgcGFnZXMgYXJlIHVzZXIgcGFnZXMsIHRoZW4gdGhlIGRtYV9tZW1fbWFwX3NldF91c2VyX3Rhc2sgZnVuY3Rpb24gKi8KKwkJCS8qIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgY2FsbGVkLiAqLworCisJCQlpZiAobWVtTWFwLT51c2VyVGFzayA9PSBOVUxMKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogbXVzdCBjYWxsIGRtYV9tZW1fbWFwX3NldF91c2VyX3Rhc2sgd2hlbiB1c2luZyB1c2VyLW1vZGUgbWVtb3J5XG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCS8qIFVzZXIgcGFnZXMgbmVlZCB0byBiZSBsb2NrZWQuICovCisKKwkJCWZpcnN0UGFnZU9mZnNldCA9CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpcmVnaW9uLT52aXJ0QWRkciAmIChQQUdFX1NJWkUgLSAxKTsKKwkJCWZpcnN0UGFnZVNpemUgPSBQQUdFX1NJWkUgLSBmaXJzdFBhZ2VPZmZzZXQ7CisKKwkJCXJlZ2lvbi0+bnVtTG9ja2VkUGFnZXMgPSAoZmlyc3RQYWdlT2Zmc2V0CisJCQkJCQkgICsgcmVnaW9uLT5udW1CeXRlcyArCisJCQkJCQkgIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOworCQkJcGFnZXMgPQorCQkJICAgIGttYWxsb2MocmVnaW9uLT5udW1Mb2NrZWRQYWdlcyAqCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisKKwkJCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCQkJcmVnaW9uLT5udW1Mb2NrZWRQYWdlcyA9IDA7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCXVzZXJUYXNrID0gbWVtTWFwLT51c2VyVGFzazsKKworCQkJZG93bl9yZWFkKCZ1c2VyVGFzay0+bW0tPm1tYXBfc2VtKTsKKwkJCXJjID0gZ2V0X3VzZXJfcGFnZXModXNlclRhc2ssCS8qIHRhc2sgKi8KKwkJCQkJICAgIHVzZXJUYXNrLT5tbSwJLyogbW0gKi8KKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKXJlZ2lvbi0+dmlydEFkZHIsCS8qIHN0YXJ0ICovCisJCQkJCSAgICByZWdpb24tPm51bUxvY2tlZFBhZ2VzLAkvKiBsZW4gKi8KKwkJCQkJICAgIG1lbU1hcC0+ZGlyID09IERNQV9GUk9NX0RFVklDRSwJLyogd3JpdGUgKi8KKwkJCQkJICAgIDAsCS8qIGZvcmNlICovCisJCQkJCSAgICBwYWdlcywJLyogcGFnZXMgKGFycmF5IG9mIHBvaW50ZXJzIHRvIHBhZ2UpICovCisJCQkJCSAgICBOVUxMKTsJLyogdm1hcyAqLworCQkJdXBfcmVhZCgmdXNlclRhc2stPm1tLT5tbWFwX3NlbSk7CisKKwkJCWlmIChyYyAhPSByZWdpb24tPm51bUxvY2tlZFBhZ2VzKSB7CisJCQkJa2ZyZWUocGFnZXMpOworCQkJCXJlZ2lvbi0+bnVtTG9ja2VkUGFnZXMgPSAwOworCisJCQkJaWYgKHJjID49IDApIHsKKwkJCQkJcmMgPSAtRUlOVkFMOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdWludDhfdCAqdmlydEFkZHIgPSByZWdpb24tPnZpcnRBZGRyOworCQkJCXNpemVfdCBieXRlc1JlbWFpbmluZzsKKwkJCQlpbnQgcGFnZUlkeDsKKworCQkJCXJjID0gMDsJLyogU2luY2UgZ2V0X3VzZXJfcGFnZXMgcmV0dXJucyArdmUgbnVtYmVyICovCisKKwkJCQlyZWdpb24tPmxvY2tlZFBhZ2VzID0gcGFnZXM7CisKKwkJCQkvKiBXZSd2ZSBsb2NrZWQgdGhlIHVzZXIgcGFnZXMuIE5vdyB3ZSBuZWVkIHRvIHdhbGsgdGhlbSBhbmQgZmlndXJlICovCisJCQkJLyogb3V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzZXMuICovCisKKwkJCQkvKiBUaGUgZmlyc3QgcGFnZSBtYXkgYmUgcGFydGlhbCAqLworCisJCQkJZG1hX21hcF9hZGRfc2VnbWVudChtZW1NYXAsCisJCQkJCQkgICAgcmVnaW9uLAorCQkJCQkJICAgIHZpcnRBZGRyLAorCQkJCQkJICAgIFBGTl9QSFlTKHBhZ2VfdG9fcGZuCisJCQkJCQkJICAgICAocGFnZXNbMF0pKSArCisJCQkJCQkgICAgZmlyc3RQYWdlT2Zmc2V0LAorCQkJCQkJICAgIGZpcnN0UGFnZVNpemUpOworCisJCQkJdmlydEFkZHIgKz0gZmlyc3RQYWdlU2l6ZTsKKwkJCQlieXRlc1JlbWFpbmluZyA9CisJCQkJICAgIHJlZ2lvbi0+bnVtQnl0ZXMgLSBmaXJzdFBhZ2VTaXplOworCisJCQkJZm9yIChwYWdlSWR4ID0gMTsKKwkJCQkgICAgIHBhZ2VJZHggPCByZWdpb24tPm51bUxvY2tlZFBhZ2VzOworCQkJCSAgICAgcGFnZUlkeCsrKSB7CisJCQkJCXNpemVfdCBieXRlc1RoaXNQYWdlID0KKwkJCQkJICAgIChieXRlc1JlbWFpbmluZyA+CisJCQkJCSAgICAgUEFHRV9TSVpFID8gUEFHRV9TSVpFIDoKKwkJCQkJICAgICBieXRlc1JlbWFpbmluZyk7CisKKwkJCQkJRE1BX01BUF9QUklOVAorCQkJCQkgICAgKCJwYWdlSWR4OiVkIHBhZ2VzW3BhZ2VJZHhdPSVwIHBmbj0ldSBwaHlzPSV1XG4iLAorCQkJCQkgICAgIHBhZ2VJZHgsIHBhZ2VzW3BhZ2VJZHhdLAorCQkJCQkgICAgIHBhZ2VfdG9fcGZuKHBhZ2VzW3BhZ2VJZHhdKSwKKwkJCQkJICAgICBQRk5fUEhZUyhwYWdlX3RvX3BmbgorCQkJCQkJICAgICAgKHBhZ2VzW3BhZ2VJZHhdKSkpOworCisJCQkJCWRtYV9tYXBfYWRkX3NlZ21lbnQobWVtTWFwLAorCQkJCQkJCSAgICByZWdpb24sCisJCQkJCQkJICAgIHZpcnRBZGRyLAorCQkJCQkJCSAgICBQRk5fUEhZUyhwYWdlX3RvX3BmbgorCQkJCQkJCQkgICAgIChwYWdlcworCQkJCQkJCQkgICAgICBbcGFnZUlkeF0pKSwKKwkJCQkJCQkgICAgYnl0ZXNUaGlzUGFnZSk7CisKKwkJCQkJdmlydEFkZHIgKz0gYnl0ZXNUaGlzUGFnZTsKKwkJCQkJYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNUaGlzUGFnZTsKKwkJCQl9CisJCQl9CisjZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBVc2VyIG1vZGUgcGFnZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKworCQkJLyogdXNlciBwYWdlcyBhcmUgbm90IHBoeXNpY2FsbHkgY29udGlndW91cyAqLworCisJCQlyYyA9IC1FSU5WQUw7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQl7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbnN1cHBvcnRlZCBtZW1vcnkgdHlwZTogJWRcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHJlZ2lvbi0+bWVtVHlwZSk7CisKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJjICE9IDApIHsKKwkJbWVtTWFwLT5udW1SZWdpb25zVXNlZC0tOworCX0KKworb3V0OgorCisJRE1BX01BUF9QUklOVCgicmV0dXJuaW5nICVkXG4iLCByYyk7CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworRVhQT1JUX1NZTUJPTChkbWFfbWFwX2FkZF9zZWdtZW50KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybiAgICAgMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9tYXBfbWVtKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCQl2b2lkICptZW0sCS8qIFZpcnR1YWwgYWRkcmVzcyB0aGF0IHdlIHdhbnQgdG8gZ2V0IGEgbWFwIG9mICovCisJCXNpemVfdCBudW1CeXRlcywJLyogTnVtYmVyIG9mIGJ5dGVzIGJlaW5nIG1hcHBlZCAqLworCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIJLyogRGlyZWN0aW9uIHRoYXQgdGhlIG1hcHBpbmcgd2lsbCBiZSBnb2luZyAqLworICAgICkgeworCWludCByYzsKKworCXJjID0gZG1hX21hcF9zdGFydChtZW1NYXAsIGRpcik7CisJaWYgKHJjID09IDApIHsKKwkJcmMgPSBkbWFfbWFwX2FkZF9yZWdpb24obWVtTWFwLCBtZW0sIG51bUJ5dGVzKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJLyogU2luY2UgdGhlIGFkZCBmYWlscywgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwsIGFuZCB0aGUgY2FsbGVyIHdvbid0ICovCisJCQkvKiBjYWxsIHVubWFwLCBzbyB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUuICovCisKKwkJCWRtYV91bm1hcChtZW1NYXAsIDApOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV9tYXBfbWVtKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTZXR1cCBhIGRlc2NyaXB0b3IgcmluZyBmb3IgYSBnaXZlbiBtZW1vcnkgbWFwLgorKgorKiAgIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZGVzY3JpcHRvciByaW5nIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsIGFuZAorKiAgIHRoaXMgcm91dGluZSB3aWxsIG9ubHkgcmVhbGxvY2F0ZSBhIG5ldyBkZXNjcmlwdG9yIHJpbmcgaWYgdGhlIGV4aXN0aW5nCisqICAgb25lIGlzIHRvbyBzbWFsbC4KKyoKKyogICBAcmV0dXJuICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9jcmVhdGVfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXZpY2VfdCBkZXYsCS8qIERNQSBkZXZpY2UgKHdoZXJlIHRoZSByaW5nIGlzIHN0b3JlZCkgKi8KKwkJCQkgICBETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogTWVtb3J5IG1hcCB0aGF0IHdpbGwgYmUgdXNlZCAqLworCQkJCSAgIGRtYV9hZGRyX3QgZGV2UGh5c0FkZHIJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBkZXZpY2UgKi8KKyAgICApIHsKKwlpbnQgcmM7CisJaW50IG51bURlc2NyaXB0b3JzOworCURNQV9EZXZpY2VBdHRyaWJ1dGVfdCAqZGV2QXR0cjsKKwlETUFfUmVnaW9uX3QgKnJlZ2lvbjsKKwlETUFfU2VnbWVudF90ICpzZWdtZW50OworCWRtYV9hZGRyX3Qgc3JjUGh5c0FkZHI7CisJZG1hX2FkZHJfdCBkc3RQaHlzQWRkcjsKKwlpbnQgcmVnaW9uSWR4OworCWludCBzZWdtZW50SWR4OworCisJZGV2QXR0ciA9ICZETUFfZ0RldmljZUF0dHJpYnV0ZVtkZXZdOworCisJZG93bigmbWVtTWFwLT5sb2NrKTsKKworCS8qIEZpZ3VyZSBvdXQgaG93IG1hbnkgZGVzY3JpcHRvcnMgd2UgbmVlZCAqLworCisJbnVtRGVzY3JpcHRvcnMgPSAwOworCWZvciAocmVnaW9uSWR4ID0gMDsgcmVnaW9uSWR4IDwgbWVtTWFwLT5udW1SZWdpb25zVXNlZDsgcmVnaW9uSWR4KyspIHsKKwkJcmVnaW9uID0gJm1lbU1hcC0+cmVnaW9uW3JlZ2lvbklkeF07CisKKwkJZm9yIChzZWdtZW50SWR4ID0gMDsgc2VnbWVudElkeCA8IHJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkOworCQkgICAgIHNlZ21lbnRJZHgrKykgeworCQkJc2VnbWVudCA9ICZyZWdpb24tPnNlZ21lbnRbc2VnbWVudElkeF07CisKKwkJCWlmIChtZW1NYXAtPmRpciA9PSBETUFfVE9fREVWSUNFKSB7CisJCQkJc3JjUGh5c0FkZHIgPSBzZWdtZW50LT5waHlzQWRkcjsKKwkJCQlkc3RQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJfSBlbHNlIHsKKwkJCQlzcmNQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJCWRzdFBoeXNBZGRyID0gc2VnbWVudC0+cGh5c0FkZHI7CisJCQl9CisKKwkJCXJjID0KKwkJCSAgICAgZG1hX2NhbGN1bGF0ZV9kZXNjcmlwdG9yX2NvdW50KGRldiwgc3JjUGh5c0FkZHIsCisJCQkJCQkJICAgIGRzdFBoeXNBZGRyLAorCQkJCQkJCSAgICBzZWdtZW50LT4KKwkJCQkJCQkgICAgbnVtQnl0ZXMpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IGRtYV9jYWxjdWxhdGVfZGVzY3JpcHRvcl9jb3VudCBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJbnVtRGVzY3JpcHRvcnMgKz0gcmM7CisJCX0KKwl9CisKKwkvKiBBZGp1c3QgdGhlIHNpemUgb2YgdGhlIHJpbmcsIGlmIGl0IGlzbid0IGJpZyBlbm91Z2ggKi8KKworCWlmIChudW1EZXNjcmlwdG9ycyA+IGRldkF0dHItPnJpbmcuZGVzY3JpcHRvcnNBbGxvY2F0ZWQpIHsKKwkJZG1hX2ZyZWVfZGVzY3JpcHRvcl9yaW5nKCZkZXZBdHRyLT5yaW5nKTsKKwkJcmMgPQorCQkgICAgIGRtYV9hbGxvY19kZXNjcmlwdG9yX3JpbmcoJmRldkF0dHItPnJpbmcsCisJCQkJCSAgICAgICBudW1EZXNjcmlwdG9ycyk7CisJCWlmIChyYyA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogZG1hX2FsbG9jX2Rlc2NyaXB0b3JfcmluZyBmYWlsZWQ6ICVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCByYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCXJjID0KKwkJICAgICBkbWFfaW5pdF9kZXNjcmlwdG9yX3JpbmcoJmRldkF0dHItPnJpbmcsCisJCQkJCSAgICAgIG51bURlc2NyaXB0b3JzKTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBkbWFfaW5pdF9kZXNjcmlwdG9yX3JpbmcgZmFpbGVkOiAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgcmMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBQb3B1bGF0ZSB0aGUgZGVzY3JpcHRvcnMgKi8KKworCWZvciAocmVnaW9uSWR4ID0gMDsgcmVnaW9uSWR4IDwgbWVtTWFwLT5udW1SZWdpb25zVXNlZDsgcmVnaW9uSWR4KyspIHsKKwkJcmVnaW9uID0gJm1lbU1hcC0+cmVnaW9uW3JlZ2lvbklkeF07CisKKwkJZm9yIChzZWdtZW50SWR4ID0gMDsgc2VnbWVudElkeCA8IHJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkOworCQkgICAgIHNlZ21lbnRJZHgrKykgeworCQkJc2VnbWVudCA9ICZyZWdpb24tPnNlZ21lbnRbc2VnbWVudElkeF07CisKKwkJCWlmIChtZW1NYXAtPmRpciA9PSBETUFfVE9fREVWSUNFKSB7CisJCQkJc3JjUGh5c0FkZHIgPSBzZWdtZW50LT5waHlzQWRkcjsKKwkJCQlkc3RQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJfSBlbHNlIHsKKwkJCQlzcmNQaHlzQWRkciA9IGRldlBoeXNBZGRyOworCQkJCWRzdFBoeXNBZGRyID0gc2VnbWVudC0+cGh5c0FkZHI7CisJCQl9CisKKwkJCXJjID0KKwkJCSAgICAgZG1hX2FkZF9kZXNjcmlwdG9ycygmZGV2QXR0ci0+cmluZywgZGV2LAorCQkJCQkJIHNyY1BoeXNBZGRyLCBkc3RQaHlzQWRkciwKKwkJCQkJCSBzZWdtZW50LT5udW1CeXRlcyk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogZG1hX2FkZF9kZXNjcmlwdG9ycyBmYWlsZWQ6ICVkXG4iLAorCQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJcmMgPSAwOworCitvdXQ6CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0woZG1hX21hcF9jcmVhdGVfZGVzY3JpcHRvcl9yaW5nKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX3VubWFwKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCSAgICAgIGludCBkaXJ0aWVkCS8qIG5vbi16ZXJvIGlmIGFueSBvZiB0aGUgcGFnZXMgd2VyZSBtb2RpZmllZCAqLworICAgICkgeworCWludCByZWdpb25JZHg7CisJaW50IHNlZ21lbnRJZHg7CisJRE1BX1JlZ2lvbl90ICpyZWdpb247CisJRE1BX1NlZ21lbnRfdCAqc2VnbWVudDsKKworCWZvciAocmVnaW9uSWR4ID0gMDsgcmVnaW9uSWR4IDwgbWVtTWFwLT5udW1SZWdpb25zVXNlZDsgcmVnaW9uSWR4KyspIHsKKwkJcmVnaW9uID0gJm1lbU1hcC0+cmVnaW9uW3JlZ2lvbklkeF07CisKKwkJZm9yIChzZWdtZW50SWR4ID0gMDsgc2VnbWVudElkeCA8IHJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkOworCQkgICAgIHNlZ21lbnRJZHgrKykgeworCQkJc2VnbWVudCA9ICZyZWdpb24tPnNlZ21lbnRbc2VnbWVudElkeF07CisKKwkJCXN3aXRjaCAocmVnaW9uLT5tZW1UeXBlKSB7CisJCQljYXNlIERNQV9NRU1fVFlQRV9WTUFMTE9DOgorCQkJCXsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiJXM6IHZtYWxsb2MnZCBwYWdlcyBhcmUgbm90IHlldCBzdXBwb3J0ZWRcbiIsCisJCQkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKworCQkJY2FzZSBETUFfTUVNX1RZUEVfS01BTExPQzoKKwkJCQl7CisjaWYgQUxMT1dfTUFQX09GX0tNQUxMT0NfTUVNT1JZCisJCQkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwKKwkJCQkJCQkgc2VnbWVudC0+cGh5c0FkZHIsCisJCQkJCQkJIHNlZ21lbnQtPm51bUJ5dGVzLAorCQkJCQkJCSBtZW1NYXAtPmRpcik7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIERNQV9NRU1fVFlQRV9ETUE6CisJCQkJeworCQkJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShOVUxMLAorCQkJCQkJCQlzZWdtZW50LT4KKwkJCQkJCQkJcGh5c0FkZHIsCisJCQkJCQkJCXNlZ21lbnQtPgorCQkJCQkJCQludW1CeXRlcywKKwkJCQkJCQkJbWVtTWFwLT5kaXIpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRE1BX01FTV9UWVBFX1VTRVI6CisJCQkJeworCQkJCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovCisKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQlkZWZhdWx0OgorCQkJCXsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCSAgICAgICAiJXM6IFVuc3VwcG9ydGVkIG1lbW9yeSB0eXBlOiAlZFxuIiwKKwkJCQkJICAgICAgIF9fZnVuY19fLCByZWdpb24tPm1lbVR5cGUpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9CisKKwkJCXNlZ21lbnQtPnZpcnRBZGRyID0gTlVMTDsKKwkJCXNlZ21lbnQtPnBoeXNBZGRyID0gMDsKKwkJCXNlZ21lbnQtPm51bUJ5dGVzID0gMDsKKwkJfQorCisJCWlmIChyZWdpb24tPm51bUxvY2tlZFBhZ2VzID4gMCkgeworCQkJaW50IHBhZ2VJZHg7CisKKwkJCS8qIFNvbWUgdXNlciBwYWdlcyB3ZXJlIGxvY2tlZC4gV2UgbmVlZCB0byBnbyBhbmQgdW5sb2NrIHRoZW0gbm93LiAqLworCisJCQlmb3IgKHBhZ2VJZHggPSAwOyBwYWdlSWR4IDwgcmVnaW9uLT5udW1Mb2NrZWRQYWdlczsKKwkJCSAgICAgcGFnZUlkeCsrKSB7CisJCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPQorCQkJCSAgICByZWdpb24tPmxvY2tlZFBhZ2VzW3BhZ2VJZHhdOworCisJCQkJaWYgKG1lbU1hcC0+ZGlyID09IERNQV9GUk9NX0RFVklDRSkgeworCQkJCQlTZXRQYWdlRGlydHkocGFnZSk7CisJCQkJfQorCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCX0KKwkJCWtmcmVlKHJlZ2lvbi0+bG9ja2VkUGFnZXMpOworCQkJcmVnaW9uLT5udW1Mb2NrZWRQYWdlcyA9IDA7CisJCQlyZWdpb24tPmxvY2tlZFBhZ2VzID0gTlVMTDsKKwkJfQorCisJCXJlZ2lvbi0+bWVtVHlwZSA9IERNQV9NRU1fVFlQRV9OT05FOworCQlyZWdpb24tPnZpcnRBZGRyID0gTlVMTDsKKwkJcmVnaW9uLT5udW1CeXRlcyA9IDA7CisJCXJlZ2lvbi0+bnVtU2VnbWVudHNVc2VkID0gMDsKKwl9CisJbWVtTWFwLT51c2VyVGFzayA9IE5VTEw7CisJbWVtTWFwLT5udW1SZWdpb25zVXNlZCA9IDA7CisJbWVtTWFwLT5pblVzZSA9IDA7CisKKwl1cCgmbWVtTWFwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRtYV91bm1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvZG1hX2RldmljZS5jIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYV9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTBhZDczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2RtYV9kZXZpY2UuYwpAQCAtMCwwICsxLDU5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBAZmlsZSAgIGRtYV9kZXZpY2UuYworKgorKiAgIEBicmllZiAgcHJpdmF0ZSBhcnJheSBvZiBETUFfRGV2aWNlQXR0cmlidXRlX3QKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworRE1BX0RldmljZUF0dHJpYnV0ZV90IERNQV9nRGV2aWNlQXR0cmlidXRlW0RNQV9OVU1fREVWSUNFX0VOVFJJRVNdID0geworCVtETUFfREVWSUNFX01FTV9UT19NRU1dID0JLyogTUVNIDIgTUVNICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExLAorCSAubmFtZSA9ICJtZW0tdG8tbWVtIiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSwKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfVlBNX01FTV9UT19NRU1dID0JLyogVlBNICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVEIHwgRE1BX0RFVklDRV9GTEFHX05PX0lTUiwKKwkgLm5hbWUgPSAidnBtIiwKKwkgLmRlZGljYXRlZENvbnRyb2xsZXIgPSAwLAorCSAuZGVkaWNhdGVkQ2hhbm5lbCA9IDAsCisJIC8qIHJlc2VydmUgRE1BMDowIGZvciBWUE0gKi8KKwkgfSwKKwlbRE1BX0RFVklDRV9OQU5EX01FTV9UT19NRU1dID0JLyogTkFORCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgfCBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAibmFuZCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAorCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwKKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNiwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfUElGX01FTV9UT19ERVZdID0JLyogUElGIFRYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExCisJIHwgRE1BX0RFVklDRV9GTEFHX0FMTE9XX0xBUkdFX0ZJRk8KKwkgfCBETUFfREVWSUNFX0ZMQUdfQUxMT0NfRE1BMV9GSVJTVCB8IERNQV9ERVZJQ0VfRkxBR19QT1JUX1BFUl9ETUFDLAorCSAubmFtZSA9ICJwaWZfdHgiLAorCSAuZG1hY1BvcnQgPSB7MTQsIDV9LAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMCwJLyogU1JDOiBtZW1vcnkgKi8KKwkJICAgIC8qIGRzdFBlcmlwaGVyYWxQb3J0ICAgICAgICAgID0gNSBvciAxNCAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUwsCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF84LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzgsCisJCSAgICAubWF4RGF0YVBlckJsb2NrID0gMTYyNTYsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX1BJRl9ERVZfVE9fTUVNXSA9CS8qIFBJRiBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgfCBETUFfREVWSUNFX0ZMQUdfT05fRE1BMQorCSB8IERNQV9ERVZJQ0VfRkxBR19BTExPV19MQVJHRV9GSUZPCisJIC8qIERNQV9ERVZJQ0VfRkxBR19BTExPQ19ETUExX0ZJUlNUICovCisJIHwgRE1BX0RFVklDRV9GTEFHX1BPUlRfUEVSX0RNQUMsCisJIC5uYW1lID0gInBpZl9yeCIsCisJIC5kbWFjUG9ydCA9IHsxNCwgNX0sCisJIC5jb25maWcgPSB7CisJCSAgICAvKiBzcmNQZXJpcGhlcmFsUG9ydCAgICAgICAgICA9IDUgb3IgMTQgKi8KKwkJICAgIC5kc3RQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIERTVDogbWVtb3J5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzgsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5tYXhEYXRhUGVyQmxvY2sgPSAxNjI1NiwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfSTJTMF9ERVZfVE9fTUVNXSA9CS8qIEkyUyBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAsCisJIC5uYW1lID0gImkyczBfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMCwJLyogU1JDOiBJMlMwICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8xNiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0kyUzBfTUVNX1RPX0RFVl0gPQkvKiBJMlMgVFggKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJpMnMwX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAxLAkvKiBEU1Q6IEkyUzAgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUwsCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMTYsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfMCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9JMlMxX0RFVl9UT19NRU1dID0JLyogSTJTMSBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gImkyczFfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMiwJLyogU1JDOiBJMlMxICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8xNiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0kyUzFfTUVNX1RPX0RFVl0gPQkvKiBJMlMxIFRYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAiaTJzMV90eCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBTUkM6IG1lbW9yeSAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMywJLyogRFNUOiBJMlMxICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzE2LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfRVNXX01FTV9UT19ERVZdID0JLyogRVNXIFRYICovCisJeworCSAubmFtZSA9ICJlc3dfdHgiLAorCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVELAorCSAuZGVkaWNhdGVkQ29udHJvbGxlciA9IDEsCisJIC5kZWRpY2F0ZWRDaGFubmVsID0gMywKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAxLAkvKiBEU1Q6IEVTVyAoTVRQKSAqLworCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRElTQUJMRSwKKwkJICAgIC8qIERNQXhfQUhCX1NTVEFUQVJ5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC8qIERNQXhfQUhCX0RTVEFUQVJ5ICovCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgzMDQ5MDAxMCwKKwkJICAgIC8qIERNQXhfQUhCX0NGR3kgKi8KKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLyogRE1BeF9BSEJfQ1RMeSAqLworCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0VTV19ERVZfVE9fTUVNXSA9CS8qIEVTVyBSWCAqLworCXsKKwkgLm5hbWUgPSAiZXN3X3J4IiwKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCwKKwkgLmRlZGljYXRlZENvbnRyb2xsZXIgPSAxLAorCSAuZGVkaWNhdGVkQ2hhbm5lbCA9IDIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBTUkM6IEVTVyAoUFRNKSAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwJLyogRFNUOiBtZW1vcnkgKi8KKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAvKiBETUF4X0FIQl9TU1RBVEFSeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MzA0ODAwMTAsCisJCSAgICAvKiBETUF4X0FIQl9EU1RBVEFSeSAqLworCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAvKiBETUF4X0FIQl9DRkd5ICovCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC8qIERNQXhfQUhCX0NUTHkgKi8KKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF84LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9BUE1fQ09ERUNfQV9ERVZfVE9fTUVNXSA9CS8qIEFQTSBDb2RlYyBBIEluZ3Jlc3MgKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJhcG1fYV9yeCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAyLAkvKiBTUkM6IENvZGVjIEEgSW5ncmVzcyBGSUZPICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0sCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTLAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9BUE1fQ09ERUNfQV9NRU1fVE9fREVWXSA9CS8qIEFQTSBDb2RlYyBBIEVncmVzcyAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAsCisJIC5uYW1lID0gImFwbV9hX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAzLAkvKiBEU1Q6IENvZGVjIEEgRWdyZXNzIEZJRk8gKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfQVBNX0NPREVDX0JfREVWX1RPX01FTV0gPQkvKiBBUE0gQ29kZWMgQiBJbmdyZXNzICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCwKKwkgLm5hbWUgPSAiYXBtX2JfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gNCwJLyogU1JDOiBDb2RlYyBCIEluZ3Jlc3MgRklGTyAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwJLyogRFNUOiBtZW1vcnkgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF80LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfQ09OVElOVU9VUywKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfQVBNX0NPREVDX0JfTUVNX1RPX0RFVl0gPQkvKiBBUE0gQ29kZWMgQiBFZ3Jlc3MgKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJhcG1fYl90eCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBTUkM6IG1lbW9yeSAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gNSwJLyogRFNUOiBDb2RlYyBCIEVncmVzcyBGSUZPICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTCwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX1BFUlJFUVVFU1QsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0FQTV9DT0RFQ19DX0RFVl9UT19NRU1dID0JLyogQVBNIENvZGVjIEMgSW5ncmVzcyAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gImFwbV9jX3J4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDQsCS8qIFNSQzogQ29kZWMgQyBJbmdyZXNzIEZJRk8gKi8KKwkJICAgIC5kc3RQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIERTVDogbWVtb3J5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRElTQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0FQTV9QQ00wX0RFVl9UT19NRU1dID0JLyogUENNMCBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAsCisJIC5uYW1lID0gInBjbTBfcngiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMTIsCS8qIFNSQzogUENNMCAqLworCQkgICAgLmRzdFBlcmlwaGVyYWxQb3J0ID0gMCwJLyogRFNUOiBtZW1vcnkgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0sCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF80LAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTLAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9BUE1fUENNMF9NRU1fVE9fREVWXSA9CS8qIFBDTTAgVFggKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwLAorCSAubmFtZSA9ICJwY20wX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAxMywJLyogRFNUOiBQQ00wICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5ibG9ja1RyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9ESVNBQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIH0sCisJIH0sCisJW0RNQV9ERVZJQ0VfQVBNX1BDTTFfREVWX1RPX01FTV0gPQkvKiBQQ00xIFJYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAicGNtMV9yeCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSAxNCwJLyogU1JDOiBQQ00xICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMCwKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCwKKwkJICAgIC5zcmNNYXhCdXJzdFdpZHRoID0gZG1hY0h3X1NSQ19CVVJTVF9XSURUSF84LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzQsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX0NPTlRJTlVPVVMsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX0FQTV9QQ00xX01FTV9UT19ERVZdID0JLyogUENNMSBUWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gInBjbTFfdHgiLAorCSAuY29uZmlnID0geworCQkgICAgLnNyY1BlcmlwaGVyYWxQb3J0ID0gMCwJLyogU1JDOiBtZW1vcnkgKi8KKwkJICAgIC5kc3RQZXJpcGhlcmFsUG9ydCA9IDE1LAkvKiBEU1Q6IFBDTTEgKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDAsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX1BFUklQSEVSQUwsCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMzIsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfNCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF84LAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC50cmFuc2Zlck1vZGUgPSBkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9TUFVNX0RFVl9UT19NRU1dID0JLyogU1BVTSBSWCAqLworCXsKKwkgLmZsYWdzID0gRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgfCBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSwKKwkgLm5hbWUgPSAic3B1bV9yeCIsCisJIC5jb25maWcgPSB7CisJCSAgICAuc3JjUGVyaXBoZXJhbFBvcnQgPSA2LAkvKiBTUkM6IENvZGVjIEEgSW5ncmVzcyBGSUZPICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfUEVSSVBIRVJBTF9UT19NRU0sCisJCSAgICAuc3JjTWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzIsCisJCSAgICAuZHN0TWFzdGVySW50ZXJmYWNlID0gZG1hY0h3X0RTVF9NQVNURVJfSU5URVJGQUNFXzEsCisJCSAgICAuYmxvY2tUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRElTQUJMRSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzMyLAorCQkgICAgLyogQnVzcnQgc2l6ZSAqKk1VU1QqKiBiZSAxNiBmb3IgU1BVTSB0byB3b3JrICovCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfMTYsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfMTYsCisJCSAgICAudHJhbnNmZXJNb2RlID0gZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSUkVRVUVTVCwKKwkJICAgIC8qIG9uIHRoZSBSWCBzaWRlLCBTUFUgbmVlZHMgdG8gYmUgdGhlIGZsb3cgY29udHJvbGxlciAqLworCQkgICAgLmZsb3dDb250cm9sZXIgPSBkbWFjSHdfRkxPV19DT05UUk9MX1BFUklQSEVSQUwsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX1NQVU1fTUVNX1RPX0RFVl0gPQkvKiBTUFVNIFRYICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExLAorCSAubmFtZSA9ICJzcHVtX3R4IiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSA3LAkvKiBEU1Q6IFNQVU0gKi8KKwkJICAgIC5zcmNTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLmRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuc3JjVXBkYXRlID0gZG1hY0h3X1NSQ19BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC5kc3RVcGRhdGUgPSBkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLnRyYW5zZmVyVHlwZSA9IGRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmJsb2NrVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCisJCSAgICAuY29tcGxldGVUcmFuc2ZlckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmVycm9ySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuY2hhbm5lbFByaW9yaXR5ID0gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNywKKwkJICAgIC5zcmNNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC5kc3RNYXhUcmFuc2FjdGlvbldpZHRoID0gZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMiwKKwkJICAgIC8qIEJ1c3J0IHNpemUgKipNVVNUKiogYmUgMTYgZm9yIFNQVU0gdG8gd29yayAqLworCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzE2LAorCQkgICAgLmRzdE1heEJ1cnN0V2lkdGggPSBkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzE2LAorCQkgICAgLnRyYW5zZmVyTW9kZSA9IGRtYWNId19UUkFOU0ZFUl9NT0RFX1BFUlJFUVVFU1QsCisJCSAgICB9LAorCSB9LAorCVtETUFfREVWSUNFX01FTV9UT19WUkFNXSA9CS8qIE1FTSAyIFZSQU0gKi8KKwl7CisJIC5mbGFncyA9IERNQV9ERVZJQ0VfRkxBR19PTl9ETUEwIHwgRE1BX0RFVklDRV9GTEFHX09OX0RNQTEsCisJIC5uYW1lID0gIm1lbS10by12cmFtIiwKKwkgLmNvbmZpZyA9IHsKKwkJICAgIC5zcmNQZXJpcGhlcmFsUG9ydCA9IDAsCS8qIFNSQzogbWVtb3J5ICovCisJCSAgICAuc3JjU3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5kc3RTdGF0dXNSZWdpc3RlckFkZHJlc3MgPSAweDAwMDAwMDAwLAorCQkgICAgLnNyY1VwZGF0ZSA9IGRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAuZHN0VXBkYXRlID0gZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQywKKwkJICAgIC50cmFuc2ZlclR5cGUgPSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNLAorCQkgICAgLnNyY01hc3RlckludGVyZmFjZSA9IGRtYWNId19TUkNfTUFTVEVSX0lOVEVSRkFDRV8xLAorCQkgICAgLmRzdE1hc3RlckludGVyZmFjZSA9IGRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8yLAorCQkgICAgLmNvbXBsZXRlVHJhbnNmZXJJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5lcnJvckludGVycnVwdCA9IGRtYWNId19JTlRFUlJVUFRfRU5BQkxFLAorCQkgICAgLmNoYW5uZWxQcmlvcml0eSA9IGRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzcsCisJCSAgICAuc3JjTWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuZHN0TWF4VHJhbnNhY3Rpb25XaWR0aCA9IGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfNjQsCisJCSAgICAuc3JjTWF4QnVyc3RXaWR0aCA9IGRtYWNId19TUkNfQlVSU1RfV0lEVEhfOCwKKwkJICAgIC5kc3RNYXhCdXJzdFdpZHRoID0gZG1hY0h3X0RTVF9CVVJTVF9XSURUSF84LAorCQkgICAgfSwKKwkgfSwKKwlbRE1BX0RFVklDRV9WUkFNX1RPX01FTV0gPQkvKiBWUkFNIDIgTUVNICovCisJeworCSAuZmxhZ3MgPSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMCB8IERNQV9ERVZJQ0VfRkxBR19PTl9ETUExLAorCSAubmFtZSA9ICJ2cmFtLXRvLW1lbSIsCisJIC5jb25maWcgPSB7CisJCSAgICAuZHN0UGVyaXBoZXJhbFBvcnQgPSAwLAkvKiBEU1Q6IG1lbW9yeSAqLworCQkgICAgLnNyY1N0YXR1c1JlZ2lzdGVyQWRkcmVzcyA9IDB4MDAwMDAwMDAsCisJCSAgICAuZHN0U3RhdHVzUmVnaXN0ZXJBZGRyZXNzID0gMHgwMDAwMDAwMCwKKwkJICAgIC5zcmNVcGRhdGUgPSBkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DLAorCQkgICAgLmRzdFVwZGF0ZSA9IGRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9JTkMsCisJCSAgICAudHJhbnNmZXJUeXBlID0gZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSwKKwkJICAgIC5zcmNNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiwKKwkJICAgIC5kc3RNYXN0ZXJJbnRlcmZhY2UgPSBkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMSwKKwkJICAgIC5jb21wbGV0ZVRyYW5zZmVySW50ZXJydXB0ID0gZG1hY0h3X0lOVEVSUlVQVF9FTkFCTEUsCisJCSAgICAuZXJyb3JJbnRlcnJ1cHQgPSBkbWFjSHdfSU5URVJSVVBUX0VOQUJMRSwKKwkJICAgIC5jaGFubmVsUHJpb3JpdHkgPSBkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83LAorCQkgICAgLnNyY01heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLmRzdE1heFRyYW5zYWN0aW9uV2lkdGggPSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0LAorCQkgICAgLnNyY01heEJ1cnN0V2lkdGggPSBkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzgsCisJCSAgICAuZHN0TWF4QnVyc3RXaWR0aCA9IGRtYWNId19EU1RfQlVSU1RfV0lEVEhfOCwKKwkJICAgIH0sCisJIH0sCit9OworRVhQT1JUX1NZTUJPTChETUFfZ0RldmljZUF0dHJpYnV0ZSk7CS8qIHByaW1hcmlseSBmb3IgZG1hLXRlc3QuYyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY2ZnX2dsb2JhbC5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY2ZnX2dsb2JhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWRhODcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jZmdfZ2xvYmFsLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfQ0ZHX0dMT0JBTF9IXworI2RlZmluZSBfQ0ZHX0dMT0JBTF9IXworCisjaW5jbHVkZSA8Y2ZnX2dsb2JhbF9kZWZpbmVzLmg+CisKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9DSElQICAgICAgICAgICAgICAgICAgICAgICAgIEJDTTExMTA3CisjZGVmaW5lIENGR19HTE9CQUxfQ0hJUF9GQU1JTFkgICAgICAgICAgICAgICAgICBDRkdfR0xPQkFMX0NISVBfRkFNSUxZX0JDTVJJTkcKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9DSElQX1JFViAgICAgICAgICAgICAgICAgICAgIDB4QjAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9SQU1fU0laRSAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9SQU1fQkFTRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9SQU1fUkVTRVJWRURfU0laRSAgICAgICAgICAgIDB4MDAwMDAwCisKKyNlbmRpZiAvKiBfQ0ZHX0dMT0JBTF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY2ZnX2dsb2JhbF9kZWZpbmVzLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jZmdfZ2xvYmFsX2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWJlYjBiMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NmZ19nbG9iYWxfZGVmaW5lcy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNiAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ0ZHX0dMT0JBTF9ERUZJTkVTX0gKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9ERUZJTkVTX0gKKworLyogQ0hJUCAqLworI2RlZmluZSBCQ00xMTAzIDEKKworI2RlZmluZSBCQ00xMTkxIDQKKyNkZWZpbmUgQkNNMjE1MyA1CisjZGVmaW5lIEJDTTI4MjAgNgorCisjZGVmaW5lIEJDTTI4MjYgOAorI2RlZmluZSBGUEdBMTExMDcgOQorI2RlZmluZSBCQ00xMTEwNyAgIDEwCisjZGVmaW5lIEJDTTExMTA5ICAgMTEKKyNkZWZpbmUgQkNNMTExNzAgICAxMgorI2RlZmluZSBCQ00xMTExMCAgIDEzCisjZGVmaW5lIEJDTTExMjExICAgMTQKKworLyogQ0ZHX0dMT0JBTF9DSElQX0ZBTUlMWSB0eXBlcyAqLworI2RlZmluZSBDRkdfR0xPQkFMX0NISVBfRkFNSUxZX05PTkUgICAgICAgIDAKKyNkZWZpbmUgQ0ZHX0dMT0JBTF9DSElQX0ZBTUlMWV9CQ00xMTZYICAgICAyCisjZGVmaW5lIENGR19HTE9CQUxfQ0hJUF9GQU1JTFlfQkNNUklORyAgICAgNAorI2RlZmluZSBDRkdfR0xPQkFMX0NISVBfRkFNSUxZX0JDTTExMDMgICAgIDgKKworI2RlZmluZSBJTUFHRV9IRUFERVJfU0laRV9DSEVDS1NVTSAgICA0CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9jYWNoZS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FhMjBlNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9jYWNoZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ1NQX0NBQ0hFX0gKKyNkZWZpbmUgQ1NQX0NBQ0hFX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGNzcC9zdGRpbnQuaD4KKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgIWRlZmluZWQoU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorCisjZGVmaW5lIENTUF9DQUNIRV9GTFVTSF9BTEwgICAgICBmbHVzaF9jYWNoZV9hbGwoKQorCisjZWxzZQorCisjZGVmaW5lIENTUF9DQUNIRV9GTFVTSF9BTEwKKworI2VuZGlmCisKKyNlbmRpZiAvKiBDU1BfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RlbGF5LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjNkODAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2RlbGF5LmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIENTUF9ERUxBWV9ICisjZGVmaW5lIENTUF9ERUxBWV9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFNvbWUgQ1NQIHJvdXRpbmVzIHJlcXVpcmUgdXNlIG9mIHRoZSBmb2xsb3dpbmcgZGVsYXkgcm91dGluZXMuIFVzZSB0aGUgT1MgKi8KKy8qIHZlcnNpb24gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGEgQ1NQIHNwZWNpZmljIGRlZmluaXRpb24uICovCisvKiB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKTsgKi8KKy8qIHZvaWQgbWRlbGF5KHVuc2lnbmVkIGxvbmcgbXNlY3MpOyAqLworCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChTVEFOREFMT05FKQorICAgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjZWxzZQorICAgI2luY2x1ZGUgPG1hY2gvY3NwL2RlbGF5Lmg+CisjZW5kaWYKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogIENTUF9ERUxBWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZG1hY0h3LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZG1hY0h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1MTAxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9kbWFjSHcuaApAQCAtMCwwICsxLDU5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGRtYWNIdy5oCisqCisqICBAYnJpZWYgICBBUEkgZGVmaW5pdGlvbnMgZm9yIGxvdyBsZXZlbCBETUEgY29udHJvbGxlciBkcml2ZXIKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0RNQUNIV19ICisjZGVmaW5lIF9ETUFDSFdfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvZG1hY0h3X3JlZy5oPgorCisvKiBEZWZpbmUgRE1BIENoYW5uZWwgSUQgdXNpbmcgRE1BIGNvbnRyb2xsZXIgbnVtYmVyIChtKSBhbmQgY2hhbm5lbCBudW1iZXIgKGMpLgorCisgICBTeXN0ZW0gc3BlY2lmaWMgY2hhbm5lbCBJRCBzaG91bGQgYmUgZGVmaW5lZCBhcyBmb2xsb3dzCisKKyAgIEZvciBleGFtcGxlOgorCisgICAjaW5jbHVkZSA8ZG1hY0h3Lmg+CisgICAuLi4KKyAgICNkZWZpbmUgc3lzdGVtSHdfTENEX0NIQU5ORUxfSUQgICAgICAgICAgICAgICAgZG1hY0h3X01BS0VfQ0hBTk5FTF9JRCgwLDUpCisgICAjZGVmaW5lIHN5c3RlbUh3X1NXSVRDSF9SWF9DSEFOTkVMX0lEICAgICAgICAgIGRtYWNId19NQUtFX0NIQU5ORUxfSUQoMCwwKQorICAgI2RlZmluZSBzeXN0ZW1Id19TV0lUQ0hfVFhfQ0hBTk5FTF9JRCAgICAgICAgICBkbWFjSHdfTUFLRV9DSEFOTkVMX0lEKDAsMSkKKyAgICNkZWZpbmUgc3lzdGVtSHdfQVBNX1JYX0NIQU5ORUxfSUQgICAgICAgICAgICAgZG1hY0h3X01BS0VfQ0hBTk5FTF9JRCgwLDMpCisgICAjZGVmaW5lIHN5c3RlbUh3X0FQTV9UWF9DSEFOTkVMX0lEICAgICAgICAgICAgIGRtYWNId19NQUtFX0NIQU5ORUxfSUQoMCw0KQorICAgLi4uCisgICAjZGVmaW5lIHN5c3RlbUh3X1NIQVJFRDFfQ0hBTk5FTF9JRCAgICAgICAgICAgIGRtYWNId19NQUtFX0NIQU5ORUxfSUQoMSw0KQorICAgI2RlZmluZSBzeXN0ZW1Id19TSEFSRUQyX0NIQU5ORUxfSUQgICAgICAgICAgICBkbWFjSHdfTUFLRV9DSEFOTkVMX0lEKDEsNSkKKyAgICNkZWZpbmUgc3lzdGVtSHdfU0hBUkVEM19DSEFOTkVMX0lEICAgICAgICAgICAgZG1hY0h3X01BS0VfQ0hBTk5FTF9JRCgwLDYpCisgICAuLi4KKyovCisjZGVmaW5lIGRtYWNId19NQUtFX0NIQU5ORUxfSUQobSwgYykgICAgICAgICAobSA8PCA4IHwgYykKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV8wID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfMCwJLyogQ2hhbm5lbCBwcmlvcml0eSAwLiBMb3dlc3QgcHJpb3JpdHkgRE1BIGNoYW5uZWwgKi8KKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV8xID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfMSwJLyogQ2hhbm5lbCBwcmlvcml0eSAxICovCisJZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfMiA9IGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzIsCS8qIENoYW5uZWwgcHJpb3JpdHkgMiAqLworCWRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzMgPSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV8zLAkvKiBDaGFubmVsIHByaW9yaXR5IDMgKi8KKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV80ID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNCwJLyogQ2hhbm5lbCBwcmlvcml0eSA0ICovCisJZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfNSA9IGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzUsCS8qIENoYW5uZWwgcHJpb3JpdHkgNSAqLworCWRtYWNId19DSEFOTkVMX1BSSU9SSVRZXzYgPSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV82LAkvKiBDaGFubmVsIHByaW9yaXR5IDYgKi8KKwlkbWFjSHdfQ0hBTk5FTF9QUklPUklUWV83ID0gZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNwkvKiBDaGFubmVsIHByaW9yaXR5IDcuIEhpZ2hlc3QgcHJpb3JpdHkgRE1BIGNoYW5uZWwgKi8KK30gZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfZTsKKworLyogU291cmNlIGRlc3RpbmF0aW9uIG1hc3RlciBpbnRlcmZhY2UgKi8KK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X1NSQ19NQVNURVJfSU5URVJGQUNFXzEgPSBkbWFjSHdfUkVHX0NUTF9TTVNfMSwJLyogU291cmNlIERNQSBtYXN0ZXIgaW50ZXJmYWNlIDEgKi8KKwlkbWFjSHdfU1JDX01BU1RFUl9JTlRFUkZBQ0VfMiA9IGRtYWNId19SRUdfQ1RMX1NNU18yLAkvKiBTb3VyY2UgRE1BIG1hc3RlciBpbnRlcmZhY2UgMiAqLworCWRtYWNId19EU1RfTUFTVEVSX0lOVEVSRkFDRV8xID0gZG1hY0h3X1JFR19DVExfRE1TXzEsCS8qIERlc3RpbmF0aW9uIERNQSBtYXN0ZXIgaW50ZXJmYWNlIDEgKi8KKwlkbWFjSHdfRFNUX01BU1RFUl9JTlRFUkZBQ0VfMiA9IGRtYWNId19SRUdfQ1RMX0RNU18yCS8qIERlc3RpbmF0aW9uIERNQSBtYXN0ZXIgaW50ZXJmYWNlIDIgKi8KK30gZG1hY0h3X01BU1RFUl9JTlRFUkZBQ0VfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzggPSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfOCwJLyogU291cmNlIDggYml0ICAoMSBieXRlKSBwZXIgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzE2ID0gZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIXzE2LAkvKiBTb3VyY2UgMTYgYml0ICgyIGJ5dGUpIHBlciB0cmFuc2FjdGlvbiAqLworCWRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfMzIgPSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMzIsCS8qIFNvdXJjZSAzMiBiaXQgKDQgYnl0ZSkgcGVyIHRyYW5zYWN0aW9uICovCisJZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF82NCA9IGRtYWNId19SRUdfQ1RMX1NSQ19UUl9XSURUSF82NCwJLyogU291cmNlIDY0IGJpdCAoOCBieXRlKSBwZXIgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzggPSBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfOCwJLyogRGVzdGluYXRpb24gOCBiaXQgICgxIGJ5dGUpIHBlciB0cmFuc2FjdGlvbiAqLworCWRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMTYgPSBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfMTYsCS8qIERlc3RpbmF0aW9uIDE2IGJpdCAoMiBieXRlKSBwZXIgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzMyID0gZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIXzMyLAkvKiBEZXN0aW5hdGlvbiAzMiBiaXQgKDQgYnl0ZSkgcGVyIHRyYW5zYWN0aW9uICovCisJZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF82NCA9IGRtYWNId19SRUdfQ1RMX0RTVF9UUl9XSURUSF82NAkvKiBEZXN0aW5hdGlvbiA2NCBiaXQgKDggYnl0ZSkgcGVyIHRyYW5zYWN0aW9uICovCit9IGRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lOworCit0eXBlZGVmIGVudW0geworCWRtYWNId19TUkNfQlVSU1RfV0lEVEhfMCA9IGRtYWNId19SRUdfQ1RMX1NSQ19NU0laRV8wLAkvKiBTb3VyY2UgTm8gYnVyc3QgKi8KKwlkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzQgPSBkbWFjSHdfUkVHX0NUTF9TUkNfTVNJWkVfNCwJLyogU291cmNlIDQgIFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KKwlkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzggPSBkbWFjSHdfUkVHX0NUTF9TUkNfTVNJWkVfOCwJLyogU291cmNlIDggIFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KKwlkbWFjSHdfU1JDX0JVUlNUX1dJRFRIXzE2ID0gZG1hY0h3X1JFR19DVExfU1JDX01TSVpFXzE2LAkvKiBTb3VyY2UgMTYgWCBkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfeHh4IGJ5dGVzIHBlciBidXJzdCAqLworCWRtYWNId19EU1RfQlVSU1RfV0lEVEhfMCA9IGRtYWNId19SRUdfQ1RMX0RTVF9NU0laRV8wLAkvKiBEZXN0aW5hdGlvbiBObyBidXJzdCAqLworCWRtYWNId19EU1RfQlVSU1RfV0lEVEhfNCA9IGRtYWNId19SRUdfQ1RMX0RTVF9NU0laRV80LAkvKiBEZXN0aW5hdGlvbiA0ICBYIGRtYWNId19UUkFOU0FDVElPTl9XSURUSF94eHggYnl0ZXMgcGVyIGJ1cnN0ICovCisJZG1hY0h3X0RTVF9CVVJTVF9XSURUSF84ID0gZG1hY0h3X1JFR19DVExfRFNUX01TSVpFXzgsCS8qIERlc3RpbmF0aW9uIDggIFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KKwlkbWFjSHdfRFNUX0JVUlNUX1dJRFRIXzE2ID0gZG1hY0h3X1JFR19DVExfRFNUX01TSVpFXzE2CS8qIERlc3RpbmF0aW9uIDE2IFggZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX3h4eCBieXRlcyBwZXIgYnVyc3QgKi8KK30gZG1hY0h3X0JVUlNUX1dJRFRIX2U7CisKK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X1RSQU5TRkVSX1RZUEVfTUVNX1RPX01FTSA9IGRtYWNId19SRUdfQ1RMX1RURkNfTU1fRE1BQywJLyogTWVtb3J5IHRvIG1lbW9yeSB0cmFuc2ZlciAqLworCWRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNID0gZG1hY0h3X1JFR19DVExfVFRGQ19QTV9ETUFDLAkvKiBQZXJpcGhlcmFsIHRvIG1lbW9yeSB0cmFuc2ZlciAqLworCWRtYWNId19UUkFOU0ZFUl9UWVBFX01FTV9UT19QRVJJUEhFUkFMID0gZG1hY0h3X1JFR19DVExfVFRGQ19NUF9ETUFDLAkvKiBNZW1vcnkgdG8gcGVyaXBoZXJhbCB0cmFuc2ZlciAqLworCWRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fUEVSSVBIRVJBTCA9IGRtYWNId19SRUdfQ1RMX1RURkNfUFBfRE1BQwkvKiBQZXJpcGhlcmFsIHRvIHBlcmlwaGVyYWwgdHJhbnNmZXIgKi8KK30gZG1hY0h3X1RSQU5TRkVSX1RZUEVfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfVFJBTlNGRVJfTU9ERV9QRVJSRVFVRVNULAkvKiBCbG9jayB0cmFuc2ZlciBwZXIgRE1BIHJlcXVlc3QgKi8KKwlkbWFjSHdfVFJBTlNGRVJfTU9ERV9DT05USU5VT1VTLAkvKiBDb250aW51b3VzIHRyYW5zZmVyIG9mIHN0cmVhbWluZyBkYXRhICovCisJZG1hY0h3X1RSQU5TRkVSX01PREVfUEVSSU9ESUMJLyogUGVyaW9kaWMgdHJhbnNmZXIgb2Ygc3RyZWFtaW5nIGRhdGEgKi8KK30gZG1hY0h3X1RSQU5TRkVSX01PREVfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfSU5DID0gZG1hY0h3X1JFR19DVExfU0lOQ19JTkMsCS8qIEluY3JlbWVudCBzb3VyY2UgYWRkcmVzcyBhZnRlciBldmVyeSB0cmFuc2FjdGlvbiAqLworCWRtYWNId19TUkNfQUREUkVTU19VUERBVEVfTU9ERV9ERUMgPSBkbWFjSHdfUkVHX0NUTF9TSU5DX0RFQywJLyogRGVjcmVtZW50IHNvdXJjZSBhZGRyZXNzIGFmdGVyIGV2ZXJ5IHRyYW5zYWN0aW9uICovCisJZG1hY0h3X0RTVF9BRERSRVNTX1VQREFURV9NT0RFX0lOQyA9IGRtYWNId19SRUdfQ1RMX0RJTkNfSU5DLAkvKiBJbmNyZW1lbnQgZGVzdGluYXRpb24gYWRkcmVzcyBhZnRlciBldmVyeSB0cmFuc2FjdGlvbiAqLworCWRtYWNId19EU1RfQUREUkVTU19VUERBVEVfTU9ERV9ERUMgPSBkbWFjSHdfUkVHX0NUTF9ESU5DX0RFQywJLyogRGVjcmVtZW50IGRlc3RpbmF0aW9uIGFkZHJlc3MgYWZ0ZXIgZXZlcnkgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfU1JDX0FERFJFU1NfVVBEQVRFX01PREVfTkMgPSBkbWFjSHdfUkVHX0NUTF9TSU5DX05DLAkvKiBObyBjaGFuZ2UgaW4gc291cmNlIGFkZHJlc3MgYWZ0ZXIgZXZlcnkgdHJhbnNhY3Rpb24gKi8KKwlkbWFjSHdfRFNUX0FERFJFU1NfVVBEQVRFX01PREVfTkMgPSBkbWFjSHdfUkVHX0NUTF9ESU5DX05DCS8qIE5vIGNoYW5nZSBpbiBkZXN0aW5hdGlvbiBhZGRyZXNzIGFmdGVyIGV2ZXJ5IHRyYW5zYWN0aW9uICovCit9IGRtYWNId19BRERSRVNTX1VQREFURV9NT0RFX2U7CisKK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X0ZMT1dfQ09OVFJPTF9ETUEsCS8qIERNQSB3b3JraW5nIGFzIGZsb3cgY29udHJvbGxlciAoZGVmYXVsdCkgKi8KKwlkbWFjSHdfRkxPV19DT05UUk9MX1BFUklQSEVSQUwJLyogUGVyaXBoZXJhbCB3b3JraW5nIGFzIGZsb3cgY29udHJvbGxlciAqLworfSBkbWFjSHdfRkxPV19DT05UUk9MX2U7CisKK3R5cGVkZWYgZW51bSB7CisJZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19CVVNZLAkvKiBETUEgVHJhbnNmZXIgb25nb2luZyAqLworCWRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRE9ORSwJLyogRE1BIFRyYW5zZmVyIGNvbXBsZXRlZCAqLworCWRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRVJST1IJLyogRE1BIFRyYW5zZmVyIGVycm9yICovCit9IGRtYWNId19UUkFOU0ZFUl9TVEFUVVNfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlkbWFjSHdfSU5URVJSVVBUX0RJU0FCTEUsCS8qIEludGVycnVwdCBkaXNhYmxlICAqLworCWRtYWNId19JTlRFUlJVUFRfRU5BQkxFCS8qIEludGVycnVwdCBlbmFibGUgKi8KK30gZG1hY0h3X0lOVEVSUlVQVF9lOworCit0eXBlZGVmIGVudW0geworCWRtYWNId19JTlRFUlJVUFRfU1RBVFVTX05PTkUgPSAweDAsCS8qIE5vIERNQSBpbnRlcnJ1cHQgKi8KKwlkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19UUkFOUyA9IDB4MSwJLyogRW5kIG9mIERNQSB0cmFuc2ZlciBpbnRlcnJ1cHQgKi8KKwlkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19CTE9DSyA9IDB4MiwJLyogRW5kIG9mIGJsb2NrIHRyYW5zZmVyIGludGVycnVwdCAqLworCWRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0VSUk9SID0gMHg0CS8qIEVycm9yIGludGVycnVwdCAqLworfSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19lOworCit0eXBlZGVmIGVudW0geworCWRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9DSEFOTkVMX05VTSwJLyogTnVtYmVyIG9mIERNQSBjaGFubmVsICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX0NIQU5ORUxfTUFYX0JMT0NLX1NJWkUsCS8qIE1heGltdW0gY2hhbm5lbCBidXJzdCBzaXplICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX01BU1RFUl9JTlRGX05VTSwJLyogTnVtYmVyIG9mIERNQSBtYXN0ZXIgaW50ZXJmYWNlICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX0NIQU5ORUxfQlVTX1dJRFRILAkvKiBDaGFubmVsIERhdGEgYnVzIHdpZHRoICovCisJZG1hY0h3X0NPTlRST0xMRVJfQVRUUklCX0NIQU5ORUxfRklGT19TSVpFCS8qIENoYW5uZWwgRklGTyBzaXplICovCit9IGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9lOworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZG1hY0h3X0hBTkRMRV90OwkvKiBETUEgY2hhbm5lbCBoYW5kbGUgKi8KK3R5cGVkZWYgdWludDMyX3QgZG1hY0h3X0lEX3Q7CS8qIERNQSBjaGFubmVsIElkLiAgTXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJCQkJICAgImRtYWNId19NQUtFX0NIQU5ORUxfSUQiIG1hY3JvCisJCQkJICovCisvKiBETUEgY2hhbm5lbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBzcmNQZXJpcGhlcmFsUG9ydDsJLyogU291cmNlIHBlcmlwaGVyYWwgcG9ydCAqLworCXVpbnQzMl90IGRzdFBlcmlwaGVyYWxQb3J0OwkvKiBEZXN0aW5hdGlvbiBwZXJpcGhlcmFsIHBvcnQgKi8KKwl1aW50MzJfdCBzcmNTdGF0dXNSZWdpc3RlckFkZHJlc3M7CS8qIFNvdXJjZSBzdGF0dXMgcmVnaXN0ZXIgYWRkcmVzcyAqLworCXVpbnQzMl90IGRzdFN0YXR1c1JlZ2lzdGVyQWRkcmVzczsJLyogRGVzdGluYXRpb24gc3RhdHVzIHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdHlwZSAgKi8KKworCXVpbnQzMl90IHNyY0dhdGhlcldpZHRoOwkvKiBOdW1iZXIgb2YgYnl0ZXMgZ2F0aGVyZWQgYmVmb3JlIHN1Y2Nlc3NpdmUgZ2F0aGVyIG9wZWFyYXRpb24gKi8KKwl1aW50MzJfdCBzcmNHYXRoZXJKdW1wOwkvKiBOdW1iZXIgb2YgYnl0ZXMganVtcHBlZCBiZWZvcmUgc3VjY2Vzc2l2ZSBnYXRoZXIgb3BlYXJhdGlvbiAqLworCXVpbnQzMl90IGRzdFNjYXR0ZXJXaWR0aDsJLyogTnVtYmVyIG9mIGJ5dGVzIHNhY2F0dGVyZWQgYmVmb3JlIHN1Y2Nlc3NpdmUgc2NhdHRlciBvcGVhcmF0aW9uICovCisJdWludDMyX3QgZHN0U2NhdHRlckp1bXA7CS8qIE51bWJlciBvZiBieXRlcyBqdW1wcGVkICBiZWZvcmUgc3VjY2Vzc2l2ZSBzY2F0dGVyIG9wZWFyYXRpb24gKi8KKwl1aW50MzJfdCBtYXhEYXRhUGVyQmxvY2s7CS8qIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIHBlciBibG9jay9kZXNjcnB0b3IuCisJCQkJCSAgIDAgPSBNYXhpbXVtIHBvc3NpYmxlLgorCQkJCQkgKi8KKworCWRtYWNId19BRERSRVNTX1VQREFURV9NT0RFX2Ugc3JjVXBkYXRlOwkvKiBTb3VyY2UgYWRkcmVzcyB1cGRhdGUgbW9kZSAqLworCWRtYWNId19BRERSRVNTX1VQREFURV9NT0RFX2UgZHN0VXBkYXRlOwkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHVwZGF0ZSBtb2RlICovCisJZG1hY0h3X1RSQU5TRkVSX1RZUEVfZSB0cmFuc2ZlclR5cGU7CS8qIERNQSB0cmFuc2ZlciB0eXBlICAqLworCWRtYWNId19UUkFOU0ZFUl9NT0RFX2UgdHJhbnNmZXJNb2RlOwkvKiBETUEgdHJhbnNmZXIgbW9kZSAqLworCWRtYWNId19NQVNURVJfSU5URVJGQUNFX2Ugc3JjTWFzdGVySW50ZXJmYWNlOwkvKiBETUEgc291cmNlIGludGVyZmFjZSAgKi8KKwlkbWFjSHdfTUFTVEVSX0lOVEVSRkFDRV9lIGRzdE1hc3RlckludGVyZmFjZTsJLyogRE1BIGRlc3RpbmF0aW9uIGludGVyZmFjZSAqLworCWRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIHNyY01heFRyYW5zYWN0aW9uV2lkdGg7CS8qIFNvdXJjZSB0cmFuc2FjdGlvbiB3aWR0aCAgICovCisJZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIX2UgZHN0TWF4VHJhbnNhY3Rpb25XaWR0aDsJLyogRGVzdGluYXRpb24gdHJhbnNhY3Rpb24gd2lkdGggKi8KKwlkbWFjSHdfQlVSU1RfV0lEVEhfZSBzcmNNYXhCdXJzdFdpZHRoOwkvKiBTb3VyY2UgYnVyc3Qgd2lkdGggKi8KKwlkbWFjSHdfQlVSU1RfV0lEVEhfZSBkc3RNYXhCdXJzdFdpZHRoOwkvKiBEZXN0aW5hdGlvbiBidXJzdCB3aWR0aCAqLworCWRtYWNId19JTlRFUlJVUFRfZSBibG9ja1RyYW5zZmVySW50ZXJydXB0OwkvKiBCbG9jayB0cnNuYWZlciBpbnRlcnJ1cHQgKi8KKwlkbWFjSHdfSU5URVJSVVBUX2UgY29tcGxldGVUcmFuc2ZlckludGVycnVwdDsJLyogQ29tcGxldGUgRE1BIHRyc25hZmVyIGludGVycnVwdCAqLworCWRtYWNId19JTlRFUlJVUFRfZSBlcnJvckludGVycnVwdDsJLyogRXJyb3IgaW50ZXJydXB0ICovCisJZG1hY0h3X0NIQU5ORUxfUFJJT1JJVFlfZSBjaGFubmVsUHJpb3JpdHk7CS8qIENoYW5uZWwgcHJpb3JpdHkgKi8KKwlkbWFjSHdfRkxPV19DT05UUk9MX2UgZmxvd0NvbnRyb2xlcjsJLyogRGF0YSBmbG93IGNvbnRyb2xsZXIgKi8KK30gZG1hY0h3X0NPTkZJR190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5pdGlhbGl6ZXMgRE1BCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIERNQSBDU1AgZHJpdmVyCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIGFueSBETUEgY2hhbm5lbAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfaW5pdERtYSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEV4aXQgZnVuY3Rpb24gZm9yICBETUEKKyoKKyogIFRoaXMgZnVuY3Rpb24gaXNvbGF0ZXMgRE1BIGZyb20gdGhlIHN5c3RlbQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfZXhpdERtYSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldHMgYSBoYW5kbGUgdG8gYSBETUEgY2hhbm5lbAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgaGFuZGxlLCByZXByZXNlbnRpbmcgYSBjb250cm9sIGJsb2NrIG9mIGEgcGFydGljdWxhciBETUEgY2hhbm5lbAorKgorKiAgQHJldHVybiAgLTEgICAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgaGFuZGxlICAtIE9uIFN1Y2Nlc3MsIHJlcHJlc2VudGluZyBhIGNoYW5uZWwgY29udHJvbCBibG9jaworKgorKiAgQG5vdGUKKyogICAgIE5vbmUgIENoYW5uZWwgSUQgbXVzdCBiZSBjcmVhdGVkIHVzaW5nICJkbWFjSHdfTUFLRV9DSEFOTkVMX0lEIiBtYWNybworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X0hBTkRMRV90IGRtYWNId19nZXRDaGFubmVsSGFuZGxlKGRtYWNId19JRF90IGNoYW5uZWxJZAkvKiBbIElOIF0gRE1BIENoYW5uZWwgSWQgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5pdGlhbGl6ZXMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFuZCByZXNldHMgYSBETUEgY2hhbm5lbCBmb3IgdXNlCisqCisqICBAcmV0dXJuICAtMSAgICAgLSBPbiBGYWlsdXJlCisqICAgICAgICAgICAgMCAgICAgLSBPbiBTdWNjZXNzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19pbml0Q2hhbm5lbChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEVzdGltYXRlcyBudW1iZXIgb2YgZGVzY3JpcHRvciBuZWVkZWQgdG8gcGVyZm9ybSBjZXJ0YWluIERNQSB0cmFuc2ZlcgorKgorKgorKiAgQHJldHVybiAgT24gZmFpbHVyZSA6IC0xCisqICAgICAgICAgICBPbiBzdWNjZXNzIDogTnVtYmVyIG9mIGRlc2NyaXB0b3IgY291bnQKKyoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfY2FsY3VsYXRlRGVzY3JpcHRvckNvdW50KGRtYWNId19DT05GSUdfdCAqcENvbmZpZywJLyogICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJCSAgICB2b2lkICpwU3JjQWRkciwJLyogICBbIElOIF0gU291cmNlIChQZXJpcGhlcmFsL01lbW9yeSkgYWRkcmVzcyAqLworCQkJCSAgICB2b2lkICpwRHN0QWRkciwJLyogICBbIElOIF0gRGVzdGluYXRpb24gKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkJICAgIHNpemVfdCBkYXRhTGVuCS8qICAgWyBJTiBdIERhdGEgbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEluaXRpYWxpemVzIGRlc2NyaXB0b3IgcmluZworKgorKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGluaXRpYWxpemVzIHRoZSBkZXNjcmlwdG9yIHJpbmcgb2YgYSBETUEgY2hhbm5lbAorKgorKgorKiAgQHJldHVybiAgIC0xIC0gT24gZmFpbHVyZQorKiAgICAgICAgICAgICAwIC0gT24gc3VjY2VzcworKiAgQG5vdGUKKyogICAgIC0gImxlbiIgcGFyYW1ldGVyIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tICJkbWFjSHdfZGVzY3JpcHRvckxlbiIKKyogICAgIC0gRGVzY3JpcHRvciBidWZmZXIgTVVTVCBiZSAzMiBiaXQgYWxpZ25lZCBhbmQgdW5jYWNoZWQgYXMgaXQKKyogICAgICAgaXMgYWNjZXNzZWQgYnkgQVJNIGFuZCBETUEKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfaW5pdERlc2NyaXB0b3Iodm9pZCAqcERlc2NyaXB0b3JWaXJ0LAkvKiAgWyBJTiBdIFZpcnR1YWwgYWRkcmVzcyBvZiB1bmNhaGNlZCBidWZmZXIgYWxsb2NhdGVkIHRvIGZvcm0gZGVzY3JpcHRvciByaW5nICovCisJCQkgIHVpbnQzMl90IGRlc2NyaXB0b3JQaHlBZGRyLAkvKiAgWyBJTiBdIFBoeXNpY2FsIGFkZHJlc3Mgb2YgcERlc2NyaXB0b3JWaXJ0IChkZXNjcmlwdG9yIGJ1ZmZlcikgKi8KKwkJCSAgdWludDMyX3QgbGVuLAkvKiAgWyBJTiBdIFNpemUgb2YgdGhlIHBCdWYgKi8KKwkJCSAgdWludDMyX3QgbnVtCS8qICBbIElOIF0gTnVtYmVyIG9mIGRlc2NyaXB0b3IgaW4gdGhlIHJpbmcgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBGaW5kcyBhbW91bnQgb2YgbWVtb3J5IHJlcXVpcmVkIHRvIGZvcm0gYSBkZXNjcmlwdG9yIHJpbmcKKyoKKyoKKyogIEByZXR1cm4gICBOdW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgdG8gZm9ybSBhIGRlc2NyaXB0b3IgcmluZworKgorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IGRtYWNId19kZXNjcmlwdG9yTGVuKHVpbnQzMl90IGRlc2NDbnQJLyogIFsgSU4gXSBOdW1iZXIgb2YgZGVzY3JpcHRvciBpbiB0aGUgcmluZyAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmUgRE1BIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gIDAgIDogT24gc3VjY2VzcworKiAgICAgICAgICAgLTEgOiBPbiBmYWlsdXJlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2NvbmZpZ0NoYW5uZWwoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICovCisJCQkgZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IGRlc2NyaXB0b3JzIGZvciBrbm93biBkYXRhIGxlbmd0aAorKgorKiAgV2hlbiBETUEgaGFzIHRvIHdvcmsgYXMgYSBmbG93IGNvbnRyb2xsZXIsIHRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgdGhlCisqICBkZXNjcmlwdG9yIGNoYWluIHRvIHRyYW5zZmVyIGRhdGEKKyoKKyogIGZyb206CisqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CisqICAgICAgICAgIC0gTWVtb3J5IHRvIFBlcmlwaGVyYWwKKyogICAgICAgICAgLSBQZXJpcGhlcmFsIHRvIFBlcmlwaGVyYWwKKyoKKyogIEByZXR1cm4gICAtMSAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAgMCAtIE9uIHN1Y2Nlc3MKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBkbWFjSHdfc2V0RGF0YURlc2NyaXB0b3IoZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisJCQkgICAgIHZvaWQgKnBTcmNBZGRyLAkvKiAgWyBJTiBdIFNvdXJjZSAoUGVyaXBoZXJhbC9NZW1vcnkpIGFkZHJlc3MgKi8KKwkJCSAgICAgdm9pZCAqcERzdEFkZHIsCS8qICBbIElOIF0gRGVzdGluYXRpb24gKFBlcmlwaGVyYWwvTWVtb3J5KSBhZGRyZXNzICovCisJCQkgICAgIHNpemVfdCBkYXRhTGVuCS8qICBbIElOIF0gTGVuZ3RoIGluIGJ5dGVzICAgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgSW5kaWNhdGVzIHdoZXRoZXIgRE1BIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzIG9yIGNvbXBsZXRlZAorKgorKiAgQHJldHVybiAgIERNQSB0cmFuc2ZlciBzdGF0dXMKKyogICAgICAgICAgZG1hY0h3X1RSQU5TRkVSX1NUQVRVU19CVVNZOiAgICAgICAgIERNQSBUcmFuc2ZlciBvbmdvaW5nCisqICAgICAgICAgIGRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRE9ORTogICAgICAgICBETUEgVHJhbnNmZXIgY29tcGxldGVkCisqICAgICAgICAgIGRtYWNId19UUkFOU0ZFUl9TVEFUVVNfRVJST1I6ICAgICAgICBETUEgVHJhbnNmZXIgZXJyb3IKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYWNId19UUkFOU0ZFUl9TVEFUVVNfZSBkbWFjSHdfdHJhbnNmZXJDb21wbGV0ZWQoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBkZXNjcmlwdG9yIGNhcnJ5aW5nIGNvbnRyb2wgaW5mb3JtYXRpb24KKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIHNlbmQgc3BlY2lmaWMgY29udHJvbCBpbmZvcm1hdGlvbiB0byB0aGUgZGV2aWNlCisqICB1c2luZyB0aGUgRE1BIGNoYW5uZWwKKyoKKyoKKyogIEByZXR1cm4gIC0xIC0gT24gZmFpbHVyZQorKiAgICAgICAgICAgIDAgLSBPbiBzdWNjZXNzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGRtYWNId19zZXRDb250cm9sRGVzY3JpcHRvcihkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICBbIElOIF0gQ29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCQkJCXZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICAqLworCQkJCXVpbnQzMl90IGN0bEFkZHJlc3MsCS8qICBbIElOIF0gQWRkcmVzcyBvZiB0aGUgZGV2aWNlIGNvbnRyb2wgcmVnaXN0ZXIgICovCisJCQkJdWludDMyX3QgY29udHJvbAkvKiAgWyBJTiBdIERldmljZSBjb250cm9sIGluZm9ybWF0aW9uICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJlYWQgZGF0YSBETUEgdHJhbnNmZXJyZWQgdG8gbWVtb3J5CisqCisqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVhZCBkYXRhIHRoYXQgaGFzIGJlZW4gRE1BZWQgdG8gbWVtb3J5IHdoaWxlIHRyYW5zZmVyaW5nIGZyb206CisqICAgICAgICAgIC0gTWVtb3J5IHRvIG1lbW9yeQorKiAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5CisqCisqICBAcmV0dXJuICAwIC0gTm8gbW9yZSBkYXRhIGlzIGF2YWlsYWJsZSB0byByZWFkCisqICAgICAgICAgICAxIC0gTW9yZSBkYXRhIG1pZ2h0IGJlIGF2YWlsYWJsZSB0byByZWFkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3JlYWRUcmFuc2ZlcnJlZERhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICAgKi8KKwkJCSAgICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICBbIElOIF0gIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgICB2b2lkICpwRGVzY3JpcHRvciwJLyogIFsgSU4gXSBEZXNjcmlwdG9yIGJ1ZmZlciAgKi8KKwkJCSAgICAgICB2b2lkICoqcHBCYnVmLAkvKiAgWyBPVVQgXSBEYXRhIHJlY2VpdmVkICovCisJCQkgICAgICAgc2l6ZV90ICpwTGxlbgkvKiAgWyBPVVQgXSBMZW5ndGggb2YgdGhlIGRhdGEgcmVjZWl2ZWQgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJlcGFyZXMgZGVzY3JpcHRvciByaW5nLCB3aGVuIHNvdXJjZSBwZXJpcGhlcmFsIHdvcmtpbmcgYXMgYSBmbG93IGNvbnRyb2xsZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gd2lsbCBmb3JtIHRoZSBkZXNjcmlwdG9yIHJpbmcgYnkgYWxsb2NhdGluZyBidWZmZXJzLCB3aGVuIHNvdXJjZSBwZXJpcGhlcmFsCisqICBoYXMgdG8gd29yayBhcyBhIGZsb3cgY29udHJvbGxlciB0byB0cmFuc2ZlciBkYXRhIGZyb206CisqICAgICAgICAgICAtIFBlcmlwaGVyYWwgdG8gbWVtb3J5LgorKgorKiAgQHJldHVybiAgLTEgLSBPbiBmYWlsdXJlCisqICAgICAgICAgICAgMCAtIE9uIHN1Y2Nlc3MKKyoKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X3NldFZhcmlhYmxlRGF0YURlc2NyaXB0b3IoZG1hY0h3X0hBTkRMRV90IGhhbmRsZSwJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICAqLworCQkJCSAgICAgZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCQkgICAgIHZvaWQgKnBEZXNjcmlwdG9yLAkvKiAgWyBJTiBdIERlc2NyaXB0b3IgYnVmZmVyICAqLworCQkJCSAgICAgdWludDMyX3Qgc3JjQWRkciwJLyogIFsgSU4gXSBTb3VyY2UgcGVyaXBoZXJhbCBhZGRyZXNzICovCisJCQkJICAgICB2b2lkICooKmZwQWxsb2MpIChpbnQgbGVuKSwJLyogIFsgSU4gXSBGdW5jdGlvbiBwb2ludGVyICB0aGF0IHByb3ZpZGVzIGRlc3RpbmF0aW9uIG1lbW9yeSAqLworCQkJCSAgICAgaW50IGxlbiwJLyogIFsgSU4gXSBOdW1iZXIgb2YgYnl0ZXMgImZwQWxsb2MiIHdpbGwgYWxsb2NhdGUgZm9yIGRlc3RpbmF0aW9uICovCisJCQkJICAgICBpbnQgbnVtCS8qICBbIElOIF0gTnVtYmVyIG9mIGRlc2NyaXB0b3IgdG8gc2V0ICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFByb2dyYW0gY2hhbm5lbCByZWdpc3RlciB0byBpbml0aWF0ZSB0cmFuc2ZlcgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKgorKiAgQG5vdGUKKyogICAgIC0gRGVzY3JpcHRvciBidWZmZXIgTVVTVCBBTFdBWVMgYmUgZmx1c2hlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqICAgICAtIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsc28gYmUgY2FsbGVkIGZyb20gSVNSIHRvIHByb2dyYW0gdGhlIGNoYW5uZWwgd2l0aAorKiAgICAgICBwZW5kaW5nIGRlc2NyaXB0b3JzCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19pbml0aWF0ZVRyYW5zZmVyKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworCQkJICAgICBkbWFjSHdfQ09ORklHX3QgKnBDb25maWcsCS8qICAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJCSAgICAgdm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFJlc2V0cyBkZXNjcmlwdG9yIGNvbnRyb2wgaW5mb3JtYXRpb24KKyoKKyogIEByZXR1cm4gIHZvaWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X3Jlc2V0RGVzY3JpcHRvckNvbnRyb2wodm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFByb2dyYW0gY2hhbm5lbCByZWdpc3RlciB0byBzdG9wIHRyYW5zZmVyCisqCisqICBFbnN1cmVzIHRoZSBjaGFubmVsIGlzIG5vdCBkb2luZyBhbnkgdHJhbnNmZXIgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19zdG9wVHJhbnNmZXIoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2sgdGhlIGV4aXN0YW5jZSBvZiBwZW5kaW5nIGRlc2NyaXB0b3IKKyoKKyogIFRoaXMgZnVuY3Rpb24gY29uZmlybWVzIGlmIHRoZXJlIGlzIGFueSBwZW5kaW5nIGRlc2NyaXB0b3IgaW4gdGhlIGNoYWluCisqICB0byBwcm9ncmFtIHRoZSBjaGFubmVsCisqCisqICBAcmV0dXJuICAxIDogQ2hhbm5lbCBuZWVkIHRvIGJlIHByb2dyYW1tZWQgd2l0aCBwZW5kaW5nIGRlc2NyaXB0b3IKKyogICAgICAgICAgIDAgOiBObyBtb3JlIHBlbmRpbmcgZGVzY3JpcHRvciB0byBwcm9ncmFtZSB0aGUgY2hhbm5lbAorKgorKiAgQG5vdGUKKyogICAgIC0gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gSVNSIGluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcKKyogICAgICAgZGVzY3JpcHRvciB0byBwcm9ncmFtIHRoZSBjaGFubmVsLgorKgorKiAgICAgRXhhbXBsZToKKyoKKyogICAgIGRtYWNfaXNyICgpCisqICAgICB7CisqICAgICAgICAgLi4uCisqICAgICAgICAgaWYgKGRtYWNId19kZXNjcmlwdG9yUGVuZGluZyAoaGFuZGxlKSkKKyogICAgICAgICB7CisqICAgICAgICAgICAgZG1hY0h3X2luaXRpYXRlVHJhbnNmZXIgKGhhbmRsZSk7CisqICAgICAgICAgfQorKiAgICAgfQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordWludDMyX3QgZG1hY0h3X2Rlc2NyaXB0b3JQZW5kaW5nKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAqLworCQkJCSAgdm9pZCAqcERlc2NyaXB0b3IJLyogICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGVhbGxvY2F0ZXMgc291cmNlIG9yIGRlc3RpbmF0aW9uIG1lbW9yeSwgYWxsb2NhdGVkCisqCisqICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gZGVhbGxvY2F0ZSBkYXRhIG1lbW9yeSB0aGF0IHdhcyBETUFlZCBzdWNjZXNzZnVsbHkKKyoKKyogIEByZXR1cm4gIC0xICAtIE9uIGZhaWx1cmUKKyogICAgICAgICAgICAwICAtIE9uIHN1Y2Nlc3MKKyoKKyogIEBub3RlCisqICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIE9OTFksIHdoZW4gc291cmNlIE9SIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgcG9pbnRpbmcKKyogICAgIHRvIGR5bmFtaWMgbWVtb3J5CisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgZG1hY0h3X2ZyZWVNZW0oZG1hY0h3X0NPTkZJR190ICpwQ29uZmlnLAkvKiAgWyBJTiBdIENvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKi8KKwkJICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisJCSAgIHZvaWQgKCpmcEZyZWUpICh2b2lkICopCS8qICBbIElOIF0gRnVuY3Rpb24gcG9pbnRlciB0byBmcmVlIGRhdGEgbWVtb3J5ICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFycyB0aGUgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGNsZWFycyB0aGUgRE1BIGNoYW5uZWwgc3BlY2lmaWMgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICAgTi9BCisqCisqICBAbm90ZQorKiAgICAgTXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIGNvbnRleHQgb2YgSVNSCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGRtYWNId19jbGVhckludGVycnVwdChkbWFjSHdfSEFORExFX3QgaGFuZGxlCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBSZXR1cm5zIHRoZSBjYXVzZSBvZiBjaGFubmVsIHNwZWNpZmljIERNQSBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY2F1c2Ugb2YgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICBJbnRlcnJ1cHQgc3RhdHVzLCBlYWNoIGJpdCByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyB0eXBlIG9mIGludGVycnVwdAorKiAgICAgICAgICAgb2YgdHlwZSBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19lCisqICBAbm90ZQorKiAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHVuZGVyIHRoZSBjb250ZXh0IG9mIElTUgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfZSBkbWFjSHdfZ2V0SW50ZXJydXB0U3RhdHVzKGRtYWNId19IQU5ETEVfdCBoYW5kbGUJLyogIFsgSU4gXSBETUEgQ2hhbm5lbCBoYW5kbGUgICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEluZGVudGlmaWVzIGEgRE1BIGNoYW5uZWwgY2F1c2luZyBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgYSBjaGFubmVsIGNhdXNpbmcgaW50ZXJydXB0IG9mIHR5cGUgZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfZQorKgorKiAgQHJldHVybiAgTlVMTCAgIDogTm8gY2hhbm5lbCBjYXVzaW5nIERNQSBpbnRlcnJ1cHQKKyogICAgICAgICAgICEgTlVMTCA6IEhhbmRsZSB0byBhIGNoYW5uZWwgY2F1c2luZyBETUEgaW50ZXJydXB0CisqICBAbm90ZQorKiAgICAgZG1hY0h3X2NsZWFySW50ZXJydXB0KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHZhbGlkIGhhbmRsZSBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2RtYWNId19IQU5ETEVfdCBkbWFjSHdfZ2V0SW50ZXJydXB0U291cmNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0cyBjaGFubmVsIHNwZWNpZmljIHVzZXIgZGF0YQorKgorKiAgVGhpcyBmdW5jdGlvbiBhc3NvY2lhdGVzIHVzZXIgZGF0YSB0byBhIHNwZWNpZiBETUEgY2hhbm5lbAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBkbWFjSHdfc2V0Q2hhbm5lbFVzZXJEYXRhKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworCQkJICAgICAgIHZvaWQgKnVzZXJEYXRhCS8qICBbIElOIF0gVXNlciBkYXRhICAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGNoYW5uZWwgc3BlY2lmaWMgdXNlciBkYXRhCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdXNlciBkYXRhIHNwZWNpZmljIHRvIGEgRE1BIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gICB1c2VyIGRhdGEKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgKmRtYWNId19nZXRDaGFubmVsVXNlckRhdGEoZG1hY0h3X0hBTkRMRV90IGhhbmRsZQkvKiAgWyBJTiBdIERNQSBDaGFubmVsIGhhbmRsZSAgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzcGxheXMgY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgYW5kIG90aGVyIGNvbnRyb2wgcGFyYW1ldGVycworKgorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgZG1hY0h3X3ByaW50RGVidWdJbmZvKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gRE1BIENoYW5uZWwgaGFuZGxlICAqLworCQkJICAgdm9pZCAqcERlc2NyaXB0b3IsCS8qICBbIElOIF0gRGVzY3JpcHRvciBidWZmZXIgICovCisJCQkgICBpbnQgKCpmcFByaW50KSAoY29uc3QgY2hhciAqLCAuLi4pCS8qICBbIElOIF0gUHJpbnQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUHJvdmlkZXMgRE1BIGNvbnRyb2xsZXIgYXR0cmlidXRlcworKgorKgorKiAgQHJldHVybiAgRE1BIGNvbnRyb2xsZXIgYXR0cmlidXRlcworKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IGRtYWNId19nZXREbWFDb250cm9sbGVyQXR0cmlidXRlKGRtYWNId19IQU5ETEVfdCBoYW5kbGUsCS8qICBbIElOIF0gIERNQSBDaGFubmVsIGhhbmRsZSAgKi8KKwkJCQkJICBkbWFjSHdfQ09OVFJPTExFUl9BVFRSSUJfZSBhdHRyCS8qICBbIElOIF0gIERNQSBDb250cm9sZXIgYXR0cmlidXRlIG9mIHR5cGUgIGRtYWNId19DT05UUk9MTEVSX0FUVFJJQl9lICovCisgICAgKTsKKworI2VuZGlmIC8qIF9ETUFDSFdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2Vycm5vLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvZXJybm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTM1N2RkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2Vycm5vLmgKQEAgLTAsMCArMSwzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDU1BfRVJSTk9fSAorI2RlZmluZSBDU1BfRVJSTk9fSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgICBkZWZpbmVkKF9fS0VSTkVMX18pCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNlbGlmIGRlZmluZWQoQ1NQX1NJTVVMQVRJT04pCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8uaD4KKyNlbHNlCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBDU1BfRVJSTk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2ludGNIdy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL2ludGNIdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNjM5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvaW50Y0h3LmgKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgaW50Y0h3LmgKKyoKKyogIEBicmllZiAgIGdlbmVyaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgQVBJCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JTlRDSFdfSAorI2RlZmluZSBfSU5UQ0hXX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxtYWNoL2NzcC9pbnRjSHdfcmVnLmg+CisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRjSHdfaXJxX2Rpc2FibGUodm9pZCAqYmFzZXAsIHVpbnQzMl90IG1hc2spOworc3RhdGljIGlubGluZSB2b2lkIGludGNId19pcnFfZW5hYmxlKHZvaWQgKmJhc2VwLCB1aW50MzJfdCBtYXNrKTsKKworI2VuZGlmIC8qIF9JTlRDSFdfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvbW9kdWxlLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwZDJhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9tb2R1bGUuaApAQCAtMCwwICsxLDMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgQ1NQX01PRFVMRV9ICisjZGVmaW5lIENTUF9NT0RVTEVfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgX19LRVJORUxfXworICAgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNlbHNlCisgICAgI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bWJvbCkKKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2VuZGlmIC8qIENTUF9NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3JlZy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZjYwYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3AvcmVnLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICByZWcuaAorKgorKiAgQGJyaWVmICAgR2VuZXJpYyByZWdpc3RlciBkZWZpbnRpb25zIHVzZWQgaW4gQ1NQCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ1NQX1JFR19ICisjZGVmaW5lIENTUF9SRUdfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIF9fUkVHMzIoeCkgICAgICAoKigodm9sYXRpbGUgdWludDMyX3QgKikoeCkpKQorI2RlZmluZSBfX1JFRzE2KHgpICAgICAgKCooKHZvbGF0aWxlIHVpbnQxNl90ICopKHgpKSkKKyNkZWZpbmUgX19SRUc4KHgpICAgICAgICgqKCh2b2xhdGlsZSB1aW50OF90ICopICh4KSkpCisKKy8qIE1hY3JvcyB1c2VkIHRvIGRlZmluZSBhIHNlcXVlbmNlIG9mIHJlc2VydmVkIHJlZ2lzdGVycy4gVGhlIHN0YXJ0IC8gZW5kICovCisvKiBhcmUgYnl0ZSBvZmZzZXRzIGluIHRoZSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIGRlZmluaXRpb24sIHdpdGggdGhlICJlbmQiICovCisvKiBiZWluZyB0aGUgb2Zmc2V0IG9mIHRoZSBuZXh0IHVuLXJlc2VydmVkIHJlZ2lzdGVyLiBFLmcuIGlmIG9mZnNldHMgKi8KKy8qIDB4MTAgdGhyb3VnaCB0byAweDFmIGFyZSByZXNlcnZlZCwgdGhlbiB0aGlzIHJlc2VydmVkIGFyZWEgY291bGQgYmUgKi8KKy8qIHNwZWNpZmllZCBhcyBmb2xsb3dzLiAqLworLyogIHR5cGVkZWYgc3RydWN0ICovCisvKiAgeyAqLworLyogICAgICB1aW50MzJfdCByZWcxOyAgICAgICAgICAgb2Zmc2V0IDB4MDAgKi8KKy8qICAgICAgdWludDMyX3QgcmVnMjsgICAgICAgICAgIG9mZnNldCAweDA0ICovCisvKiAgICAgIHVpbnQzMl90IHJlZzM7ICAgICAgICAgICBvZmZzZXQgMHgwOCAqLworLyogICAgICB1aW50MzJfdCByZWc0OyAgICAgICAgICAgb2Zmc2V0IDB4MGMgKi8KKy8qICAgICAgUkVHMzJfUlNWRCgweDEwLCAweDIwKTsgKi8KKy8qICAgICAgdWludDMyX3QgcmVnNTsgICAgICAgICAgIG9mZnNldCAweDIwICovCisvKiAgICAgIC4uLiAqLworLyogIH0gRVhBTVBMRV9SRUdfdDsgKi8KKyNkZWZpbmUgUkVHOF9SU1ZEKHN0YXJ0LCBlbmQpICAgdWludDhfdCByc3ZkXyMjc3RhcnRbKGVuZCAtIHN0YXJ0KSAvIHNpemVvZih1aW50OF90KV0KKyNkZWZpbmUgUkVHMTZfUlNWRChzdGFydCwgZW5kKSAgdWludDE2X3QgcnN2ZF8jI3N0YXJ0WyhlbmQgLSBzdGFydCkgLyBzaXplb2YodWludDE2X3QpXQorI2RlZmluZSBSRUczMl9SU1ZEKHN0YXJ0LCBlbmQpICB1aW50MzJfdCByc3ZkXyMjc3RhcnRbKGVuZCAtIHN0YXJ0KSAvIHNpemVvZih1aW50MzJfdCldCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBOb3RlOiBXaGVuIHByb3RlY3RpbmcgbXVsdGlwbGUgc3RhdGVtZW50cywgdGhlIFJFR19MT0NBTF9JUlFfU0FWRSBhbmQgKi8KKy8qIFJFR19MT0NBTF9JUlFfUkVTVE9SRSBtdXN0IGJlIGVuY2xvc2VkIGluIHsgfSB0byBhbGxvdyB0aGUgICovCisvKiBmbGFncyB2YXJpYWJsZSB0byBiZSBkZWNsYXJlZCBsb2NhbGx5LiAqLworLyogZS5nLiAqLworLyogICAgc3RhdGVtZW50MTsgKi8KKy8qICAgIHsgKi8KKy8qICAgICAgIFJFR19MT0NBTF9JUlFfU0FWRTsgKi8KKy8qICAgICAgIDxtdWx0aXBsZSBzdGF0ZW1lbnRzIGhlcmU+ICovCisvKiAgICAgICBSRUdfTE9DQUxfSVJRX1JFU1RPUkU7ICovCisvKiAgICB9ICovCisvKiAgICBzdGF0ZW1lbnQyOyAqLworLyogICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKFNUQU5EQUxPTkUpCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjZGVmaW5lIFJFR19MT0NBTF9JUlFfU0FWRSAgICAgIEhXX0RFQ0xBUkVfU1BJTkxPQ0socmVnMzIpIFwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOyBIV19JUlFfU0FWRShyZWczMiwgZmxhZ3MpCisKKyNkZWZpbmUgUkVHX0xPQ0FMX0lSUV9SRVNUT1JFICAgSFdfSVJRX1JFU1RPUkUocmVnMzIsIGZsYWdzKQorCisjZWxzZQorCisjZGVmaW5lIFJFR19MT0NBTF9JUlFfU0FWRQorI2RlZmluZSBSRUdfTE9DQUxfSVJRX1JFU1RPUkUKKworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWczMl9tb2RpZnlfYW5kKHZvbGF0aWxlIHVpbnQzMl90ICpyZWcsIHVpbnQzMl90IHZhbHVlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkqcmVnICY9IHZhbHVlOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlZzMyX21vZGlmeV9vcih2b2xhdGlsZSB1aW50MzJfdCAqcmVnLCB1aW50MzJfdCB2YWx1ZSkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJKnJlZyB8PSB2YWx1ZTsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWczMl9tb2RpZnlfbWFzayh2b2xhdGlsZSB1aW50MzJfdCAqcmVnLCB1aW50MzJfdCBtYXNrLAorCQkJCSAgICAgdWludDMyX3QgdmFsdWUpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCSpyZWcgPSAoKnJlZyAmIG1hc2spIHwgdmFsdWU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVnMzJfd3JpdGUodm9sYXRpbGUgdWludDMyX3QgKnJlZywgdWludDMyX3QgdmFsdWUpCit7CisJKnJlZyA9IHZhbHVlOworfQorCisjZW5kaWYgLyogQ1NQX1JFR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc2VjSHcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9zZWNIdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDdlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc2VjSHcuaApAQCAtMCwwICsxLDY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgc2VjSHcuaAorKgorKiAgQGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIGFjY2Vzc2luZyBsb3cgbGV2ZWwgc2VjdXJpdHkgZmVhdHVyZXMKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgU0VDSFdfSAorI2RlZmluZSBTRUNIV19ICisKK3R5cGVkZWYgdm9pZCAoKnNlY0h3X0ZVTkNfdCkgKHZvaWQpOworCit0eXBlZGVmIGVudW0geworCXNlY0h3X01PREVfU0VDVVJFID0gMHgwLAkvKiBTd2l0Y2hlcyBwcm9jZXNzb3IgaW50byBzZWN1cmUgbW9kZSAqLworCXNlY0h3X01PREVfTk9OU0VDVVJFID0gMHgxCS8qIFN3aXRjaGVzIHByb2Nlc3NvciBpbnRvIG5vbi1zZWN1cmUgbW9kZSAqLworfSBzZWNId19NT0RFOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUmVxdWVzdGluZyB0byBleGVjdXRlIHRoZSBmdW5jdGlvbiBpbiBzZWN1cmUgbW9kZQorKgorKiAgVGhpcyBmdW5jdGlvbiByZXF1ZXN0cyB0aGUgZ2l2ZW4gZnVuY3Rpb24gdG8gcnVuIGluIHNlY3VyZSBtb2RlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHNlY0h3X1J1blNlY3VyZShzZWNId19GVU5DX3QJLyogRnVuY3Rpb24gdG8gcnVuIGluIHNlY3VyZSBtb2RlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldHMgdGhlICBtb2RlCisqCisqICBoaXMgZnVuY3Rpb24gc2V0cyB0aGUgcHJvY2Vzc29yIG1vZGUgKHNlY3VyZS9ub24tc2VjdXJlKQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBzZWNId19TZXRNb2RlKHNlY0h3X01PREUJLyogUHJvY2Vzc29yIG1vZGUgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IHRoZSBjdXJyZW50IG1vZGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0aWV2ZXMgdGhlIHByb2Nlc3NvciBtb2RlIChzZWN1cmUvbm9uLXNlY3VyZSkKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgc2VjSHdfR2V0TW9kZShzZWNId19NT0RFICopOworCisjZW5kaWYgLyogU0VDSFdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3N0ZGludC5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3N0ZGludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODcxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc3RkaW50LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBDU1BfU1RESU5UX0gKKyNkZWZpbmUgQ1NQX1NURElOVF9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogQ1NQX1NURElOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc3RyaW5nLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9jc3Avc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5ZTQwMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC9zdHJpbmcuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworI2lmbmRlZiBDU1BfU1RSSU5HX0gKKyNkZWZpbmUgQ1NQX1NUUklOR19ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBfX0tFUk5FTF9fCisgICAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjZWxzZQorICAgI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworCisjZW5kaWYgLyogQ1NQX1NUUklOR19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC90bXJIdy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvY3NwL3Rtckh3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyMzZkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL2NzcC90bXJIdy5oCkBAIC0wLDAgKzEsMjYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgdG1ySHcuaAorKgorKiAgQGJyaWVmICAgQVBJIGRlZmluaXRpb25zIGZvciBsb3cgbGV2ZWwgVGltZXIgZHJpdmVyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9UTVJIV19ICisjZGVmaW5lIF9UTVJIV19ICisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisKK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfSURfdDsJLyogVGltZXIgSUQgKi8KK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfQ09VTlRfdDsJLyogVGltZXIgY291bnQgKi8KK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfSU5URVJWQUxfdDsJLyogVGltZXIgaW50ZXJ2YWwgKi8KK3R5cGVkZWYgdWludDMyX3QgdG1ySHdfUkFURV90OwkvKiBUaW1lciBldmVudCAoY291bnQvaW50ZXJydXB0KSByYXRlICovCisKK3R5cGVkZWYgZW51bSB7CisJdG1ySHdfSU5URVJSVVBUX1NUQVRVU19TRVQsCS8qIEludGVycnVwdGVkICAqLworCXRtckh3X0lOVEVSUlVQVF9TVEFUVVNfVU5TRVQJLyogTm8gSW50ZXJydXB0ICovCit9IHRtckh3X0lOVEVSUlVQVF9TVEFUVVNfZTsKKwordHlwZWRlZiBlbnVtIHsKKwl0bXJId19DQVBBQklMSVRZX0NMT0NLLAkvKiBDbG9jayBzcGVlZCBpbiBISHogKi8KKwl0bXJId19DQVBBQklMSVRZX1JFU09MVVRJT04JLyogVGltZXIgcmVzb2x1dGlvbiBpbiBiaXRzICovCit9IHRtckh3X0NBUEFCSUxJVFlfZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCB0aW1lciBjYXBhYmlsaXR5CisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdmFyaW91cyBjYXBhYmlsaXRpZXMvYXR0cmlidXRlcyBvZiBhIHRpbWVyCisqCisqICBAcmV0dXJuICBOdW1lcmljIGNhcGFiaWxpdHkKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3VpbnQzMl90IHRtckh3X2dldFRpbWVyQ2FwYWJpbGl0eSh0bXJId19JRF90IHRpbWVySWQsCS8qICBbIElOIF0gVGltZXIgSWQgKi8KKwkJCQkgIHRtckh3X0NBUEFCSUxJVFlfZSBjYXBhYmlsaXR5CS8qICBbIElOIF0gVGltZXIgY2FwYWJpbGl0eSAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSBwZXJpb2RpYyB0aW1lciBpbiB0ZXJtcyBvZiB0aW1lciBpbnRlcnJ1cHQgcmF0ZQorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHNwZWNpZmljIG51bWJlciBvZgorKiAgdGltZXIgaW50ZXJydXB0IHBlciBzZWNvbmQKKyoKKyogIEByZXR1cm4gICBPbiBzdWNjZXNzOiBFZmZlY3RpdmUgdGltZXIgZnJlcXVlbmN5CisqICAgICAgICAgICAgT24gZmFpbHVyZTogMAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfUkFURV90IHRtckh3X3NldFBlcmlvZGljVGltZXJSYXRlKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCQl0bXJId19SQVRFX3QgcmF0ZQkvKiAgWyBJTiBdIE51bWJlciBvZiB0aW1lciBpbnRlcnJ1cHQgcGVyIHNlY29uZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSBwZXJpb2RpYyB0aW1lciB0byBnZW5lcmF0ZSB0aW1lciBpbnRlcnJ1cHQgYWZ0ZXIKKyogICAgICAgICAgIGNlcnRhaW4gdGltZSBpbnRlcnZhbAorKgorKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHBlcmlvZGljIHRpbWVyIHRvIGdlbmVyYXRlIHRpbWVyIGludGVycnVwdAorKiAgYWZ0ZXIgZXZlcnkgdGltZSBpbnRlcnZhbCBpbiBtaWxpc2Vjb25kCisqCisqICBAcmV0dXJuICAgT24gc3VjY2VzczogRWZmZWN0aXZlIGludGVydmFsIHNldCBpbiBtaWxpLXNlY29uZAorKiAgICAgICAgICAgIE9uIGZhaWx1cmU6IDAKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSVkFMX3QgdG1ySHdfc2V0UGVyaW9kaWNUaW1lckludGVydmFsKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCQkJdG1ySHdfSU5URVJWQUxfdCBtc2VjCS8qICBbIElOIF0gSW50ZXJ2YWwgaW4gbWlsaS1zZWNvbmQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmVzIGEgcGVyaW9kaWMgdGltZXIgdG8gZ2VuZXJhdGUgdGltZXIgaW50ZXJydXB0IGp1c3Qgb25jZQorKiAgICAgICAgICAgYWZ0ZXIgY2VydGFpbiB0aW1lIGludGVydmFsCisqCisqICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGEgcGVyaW9kaWMgdGltZXIgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgdGlja3MgYWZ0ZXIKKyogIGNlcnRhaW4gdGltZSBpbnRlcnZhbCBpbiBtaWxpc2Vjb25kCisqCisqICBAcmV0dXJuICAgT24gc3VjY2VzczogRWZmZWN0aXZlIGludGVydmFsIHNldCBpbiBtaWxpLXNlY29uZAorKiAgICAgICAgICAgIE9uIGZhaWx1cmU6IDAKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lOVEVSVkFMX3QgdG1ySHdfc2V0T25lc2hvdFRpbWVySW50ZXJ2YWwodG1ySHdfSURfdCB0aW1lcklkLAkvKiAgWyBJTiBdIFRpbWVyIElkICovCisJCQkJCSAgICAgICB0bXJId19JTlRFUlZBTF90IG1zZWMJLyogIFsgSU4gXSBJbnRlcnZhbCBpbiBtaWxpLXNlY29uZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENvbmZpZ3VyZXMgYSB0aW1lciB0byBydW4gYXMgYSBmcmVlIHJ1bm5pbmcgdGltZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSB0aW1lciB0byBydW4gYXMgYSBmcmVlIHJ1bm5pbmcgdGltZXIKKyoKKyogIEByZXR1cm4gICBUaW1lciByZXNvbHV0aW9uIChjb3VudCAvIHNlYykKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X1JBVEVfdCB0bXJId19zZXRGcmVlUnVubmluZ1RpbWVyKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBJZCAqLworCQkJCSAgICAgICB1aW50MzJfdCBkaXZpZGVyCS8qICBbIElOIF0gRGl2aWRpbmcgdGhlIGNsb2NrIGZyZXF1ZW5jeSAqLworKSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFN0YXJ0cyBhIHRpbWVyCisqCisqICBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBhIHByZWNvbmZpZ3VyZWQgdGltZXIKKyoKKyogIEByZXR1cm4gIC0xICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICAwICAgICAtIE9uIFN1Y2Nlc3MKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCB0bXJId19zdGFydFRpbWVyKHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU3RvcHMgYSB0aW1lcgorKgorKiAgVGhpcyBmdW5jdGlvbiBzdG9wcyBhIHJ1bm5pbmcgdGltZXIKKyoKKyogIEByZXR1cm4gIC0xICAgICAtIE9uIEZhaWx1cmUKKyogICAgICAgICAgICAwICAgICAtIE9uIFN1Y2Nlc3MKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCB0bXJId19zdG9wVGltZXIodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXRzIGN1cnJlbnQgdGltZXIgY291bnQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VycmVudCB0aW1lciB2YWx1ZQorKgorKiAgQHJldHVybiAgQ3VycmVudCBkb3duY291bnRpbmcgdGltZXIgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0NPVU5UX3QgdG1ySHdfR2V0Q3VycmVudENvdW50KHRtckh3X0lEX3QgdGltZXJJZAkvKiAgWyBJTiBdIFRpbWVyIGlkICovCispIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0cyB0aW1lciBjb3VudCByYXRlCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjb3VudHMgcGVyIHNlY29uZAorKgorKiAgQHJldHVybiAgQ291bnQgcmF0ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfUkFURV90IHRtckh3X2dldENvdW50UmF0ZSh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbigiLmFyYW10ZXh0IikpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdGltZXIgaW50ZXJydXB0CisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHRpbWVyIGludGVycnVwdAorKgorKiAgQHJldHVybiAgIE4vQQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19lbmFibGVJbnRlcnJ1cHQodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyB0aW1lciBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb24gZGlzYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0CisqCisqICBAcmV0dXJuICAgTi9BCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHRtckh3X2Rpc2FibGVJbnRlcnJ1cHQodG1ySHdfSURfdCB0aW1lcklkCS8qICBbIElOIF0gVGltZXIgaWQgKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDbGVhcnMgdGhlIGludGVycnVwdAorKgorKiAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIHRpbWVyIGludGVycnVwdAorKgorKiAgQHJldHVybiAgIE4vQQorKgorKiAgQG5vdGUKKyogICAgIE11c3QgYmUgY2FsbGVkIHVuZGVyIHRoZSBjb250ZXh0IG9mIElTUgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB0bXJId19jbGVhckludGVycnVwdCh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldHMgdGhlIGludGVycnVwdCBzdGF0dXMKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzCisqCisqICBAcmV0dXJuICAgSW50ZXJydXB0IHN0YXR1cworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordG1ySHdfSU5URVJSVVBUX1NUQVRVU19lIHRtckh3X2dldEludGVycnVwdFN0YXR1cyh0bXJId19JRF90IHRpbWVySWQJLyogIFsgSU4gXSBUaW1lciBpZCAqLworKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEluZGVudGlmaWVzIGEgdGltZXIgY2F1c2luZyBpbnRlcnJ1cHQKKyoKKyogIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgYSB0aW1lciBjYXVzaW5nIGludGVycnVwdAorKgorKiAgQHJldHVybiAgMHhGRkZGRkZGRiAgIDogTm8gdGltZXIgY2F1c2luZyBhbiBpbnRlcnJ1cHQKKyogICAgICAgICAgICEgMHhGRkZGRkZGRiA6IHRpbWVyIGNhdXNpbmcgYW4gaW50ZXJydXB0CisqICBAbm90ZQorKiAgICAgdG1ySHdfY2xlYXJJbnRycnVwdCgpIG11c3QgYmUgY2FsbGVkIHdpdGggYSB2YWxpZCB0aW1lciBpZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3Rtckh3X0lEX3QgdG1ySHdfZ2V0SW50ZXJydXB0U291cmNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzcGxheXMgc3BlY2lmaWMgdGltZXIgcmVnaXN0ZXJzCisqCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHRtckh3X3ByaW50RGVidWdJbmZvKHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBpZCAqLworCQkJICBpbnQgKCpmcFByaW50KSAoY29uc3QgY2hhciAqLCAuLi4pCS8qICBbIElOIF0gUHJpbnQgY2FsbGJhY2sgZnVuY3Rpb24gKi8KKyk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBVc2UgYSB0aW1lciB0byBwZXJmb3JtIGEgYnVzeSB3YWl0IGRlbGF5IGZvciBhIG51bWJlciBvZiB1c2Vjcy4KKyoKKyogIEByZXR1cm4gICBOL0EKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgdG1ySHdfdWRlbGF5KHRtckh3X0lEX3QgdGltZXJJZCwJLyogIFsgSU4gXSBUaW1lciBpZCAqLworCQkgIHVuc2lnbmVkIGxvbmcgdXNlY3MJLyogIFsgSU4gXSB1c2VjIHRvIGRlbGF5ICovCispIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisjZW5kaWYgLyogX1RNUkhXX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjM3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworI2RlZmluZSBfX2Nsa19nZXQoY2xrKSAoeyAxOyB9KQorI2RlZmluZSBfX2Nsa19wdXQoY2xrKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2FwLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGZhMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2FwLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENBUF9ICisjZGVmaW5lIENBUF9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordHlwZWRlZiBlbnVtIHsKKwlDQVBfTk9UX1BSRVNFTlQgPSAwLAorCUNBUF9QUkVTRU5UCit9IENBUF9SQ19UOworCit0eXBlZGVmIGVudW0geworCUNBUF9WUE0sCisJQ0FQX0VUSF9QSFksCisJQ0FQX0VUSF9HTUlJLAorCUNBUF9FVEhfU0dNSUksCisJQ0FQX1VTQiwKKwlDQVBfVFNDLAorCUNBUF9FSFNTLAorCUNBUF9TRElPLAorCUNBUF9VQVJUQiwKKwlDQVBfS0VZUEFELAorCUNBUF9DTENELAorCUNBUF9HRSwKKwlDQVBfTEVETSwKKwlDQVBfQkJMLAorCUNBUF9WREVDLAorCUNBUF9QSUYsCisJQ0FQX0FQTSwKKwlDQVBfU1BVLAorCUNBUF9QS0EsCisJQ0FQX1JORywKK30gQ0FQX0NBUEFCSUxJVFlfVDsKKwordHlwZWRlZiBlbnVtIHsKKwlDQVBfTENEX1dWR0EgPSAwLAorCUNBUF9MQ0RfVkdBID0gMHgxLAorCUNBUF9MQ0RfV1FWR0EgPSAweDIsCisJQ0FQX0xDRF9RVkdBID0gMHgzCit9IENBUF9MQ0RfUkVTX1Q7CisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIENBUF9SQ19UIGNhcF9pc1ByZXNlbnQoQ0FQX0NBUEFCSUxJVFlfVCBjYXBhYmlsaXR5LCBpbnQgaW5kZXgpOworc3RhdGljIGlubGluZSB1aW50MzJfdCBjYXBfZ2V0TWF4QXJtU3BlZWRIeih2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2FwX2dldE1heFZwbVNwZWVkSHoodm9pZCk7CitzdGF0aWMgaW5saW5lIENBUF9MQ0RfUkVTX1QgY2FwX2dldE1heExjZFJlcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jYXBfaW5saW5lLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jYXBfaW5saW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzY2U2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NhcF9pbmxpbmUuaApAQCAtMCwwICsxLDQwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIENBUF9JTkxJTkVfSAorI2RlZmluZSBDQVBfSU5MSU5FX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpbmNsdWRlIDxtYWNoL2NzcC9jYXAuaD4KKyNpbmNsdWRlIDxjZmdfZ2xvYmFsLmg+CisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIENBUF9DT05GSUcwX1ZQTV9ESVMgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBDQVBfQ09ORklHMF9FVEhfUEhZMF9ESVMgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfRVRIX1BIWTFfRElTICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENBUF9DT05GSUcwX0VUSF9HTUlJMF9ESVMgICAgMHgwMDAwMDAwOAorI2RlZmluZSBDQVBfQ09ORklHMF9FVEhfR01JSTFfRElTICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfRVRIX1NHTUlJMF9ESVMgICAweDAwMDAwMDIwCisjZGVmaW5lIENBUF9DT05GSUcwX0VUSF9TR01JSTFfRElTICAgMHgwMDAwMDA0MAorI2RlZmluZSBDQVBfQ09ORklHMF9VU0IwX0RJUyAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfVVNCMV9ESVMgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIENBUF9DT05GSUcwX1RTQ19ESVMgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDQVBfQ09ORklHMF9FSFNTMF9ESVMgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfRUhTUzFfRElTICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIENBUF9DT05GSUcwX1NESU8wX0RJUyAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9TRElPMV9ESVMgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfVUFSVEJfRElTICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENBUF9DT05GSUcwX0tFWVBBRF9ESVMgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9DTENEX0RJUyAgICAgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfR0VfRElTICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENBUF9DT05GSUcwX0xFRE1fRElTICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9CQkxfRElTICAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfVkRFQ19ESVMgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIENBUF9DT05GSUcwX1BJRl9ESVMgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBDQVBfQ09ORklHMF9SRVNFUlZFRDFfRElTICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ0FQX0NPTkZJRzBfUkVTRVJWRUQyX0RJUyAgICAweDAwODAwMDAwCisKKyNkZWZpbmUgQ0FQX0NPTkZJRzFfQVBNQV9ESVMgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIENBUF9DT05GSUcxX0FQTUJfRElTICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBDQVBfQ09ORklHMV9BUE1DX0RJUyAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfTUFTSyAgICAweDAwMDAwNjAwCisjZGVmaW5lIENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUICAgOQorI2RlZmluZSBDQVBfQ09ORklHMV9DTENEX1JFU19XVkdBICAgIChDQVBfTENEX1dWR0EgPDwgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfU0hJRlQpCisjZGVmaW5lIENBUF9DT05GSUcxX0NMQ0RfUkVTX1ZHQSAgICAgKENBUF9MQ0RfVkdBIDw8IENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUKQorI2RlZmluZSBDQVBfQ09ORklHMV9DTENEX1JFU19XUVZHQSAgIChDQVBfTENEX1dRVkdBIDw8IENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUKQorI2RlZmluZSBDQVBfQ09ORklHMV9DTENEX1JFU19RVkdBICAgIChDQVBfTENEX1FWR0EgPDwgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfU0hJRlQpCisKKyNkZWZpbmUgQ0FQX0NPTkZJRzJfU1BVX0RJUyAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIENBUF9DT05GSUcyX1BLQV9ESVMgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBDQVBfQ09ORklHMl9STkdfRElTICAgICAgICAgIDB4MDAwMDAwODAKKworI2lmICAgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwNykKKyNkZWZpbmUgY2FwQ29uZmlnMCAwCisjZGVmaW5lIGNhcENvbmZpZzEgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfV1ZHQQorI2RlZmluZSBjYXBDb25maWcyIDAKKyNkZWZpbmUgQ0FQX0FQTV9NQVhfTlVNX0NIQU5TIDMKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gRlBHQTExMTA3KQorI2RlZmluZSBjYXBDb25maWcwIDAKKyNkZWZpbmUgY2FwQ29uZmlnMSBDQVBfQ09ORklHMV9DTENEX1JFU19XVkdBCisjZGVmaW5lIGNhcENvbmZpZzIgMAorI2RlZmluZSBDQVBfQVBNX01BWF9OVU1fQ0hBTlMgMworI2VsaWYgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwOSkKKyNkZWZpbmUgY2FwQ29uZmlnMCAoQ0FQX0NPTkZJRzBfVVNCMV9ESVMgfCBDQVBfQ09ORklHMF9FSFNTMV9ESVMgfCBDQVBfQ09ORklHMF9TRElPMV9ESVMgfCBDQVBfQ09ORklHMF9HRV9ESVMgfCBDQVBfQ09ORklHMF9CQkxfRElTIHwgQ0FQX0NPTkZJRzBfVkRFQ19ESVMpCisjZGVmaW5lIGNhcENvbmZpZzEgKENBUF9DT05GSUcxX0FQTUNfRElTIHwgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfV1FWR0EpCisjZGVmaW5lIGNhcENvbmZpZzIgKENBUF9DT05GSUcyX1NQVV9ESVMgfCBDQVBfQ09ORklHMl9QS0FfRElTKQorI2RlZmluZSBDQVBfQVBNX01BWF9OVU1fQ0hBTlMgMgorI2VsaWYgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTE3MCkKKyNkZWZpbmUgY2FwQ29uZmlnMCAoQ0FQX0NPTkZJRzBfRVRIX0dNSUkwX0RJUyB8IENBUF9DT05GSUcwX0VUSF9HTUlJMV9ESVMgfCBDQVBfQ09ORklHMF9VU0IwX0RJUyB8IENBUF9DT05GSUcwX1VTQjFfRElTIHwgQ0FQX0NPTkZJRzBfVFNDX0RJUyB8IENBUF9DT05GSUcwX0VIU1MxX0RJUyB8IENBUF9DT05GSUcwX1NESU8wX0RJUyB8IENBUF9DT05GSUcwX1NESU8xX0RJUyB8IENBUF9DT05GSUcwX1VBUlRCX0RJUyB8IENBUF9DT05GSUcwX0NMQ0RfRElTIHwgQ0FQX0NPTkZJRzBfR0VfRElTIHwgQ0FQX0NPTkZJRzBfQkJMX0RJUyB8IENBUF9DT05GSUcwX1ZERUNfRElTKQorI2RlZmluZSBjYXBDb25maWcxIChDQVBfQ09ORklHMV9BUE1DX0RJUyB8IENBUF9DT05GSUcxX0NMQ0RfUkVTX1dRVkdBKQorI2RlZmluZSBjYXBDb25maWcyIChDQVBfQ09ORklHMl9TUFVfRElTIHwgQ0FQX0NPTkZJRzJfUEtBX0RJUykKKyNkZWZpbmUgQ0FQX0FQTV9NQVhfTlVNX0NIQU5TIDIKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMTApCisjZGVmaW5lIGNhcENvbmZpZzAgKENBUF9DT05GSUcwX1VTQjFfRElTIHwgQ0FQX0NPTkZJRzBfVFNDX0RJUyB8IENBUF9DT05GSUcwX0VIU1MxX0RJUyB8IENBUF9DT05GSUcwX1NESU8wX0RJUyB8IENBUF9DT05GSUcwX1NESU8xX0RJUyB8IENBUF9DT05GSUcwX1VBUlRCX0RJUyB8IENBUF9DT05GSUcwX0dFX0RJUyB8IENBUF9DT05GSUcwX0JCTF9ESVMgfCBDQVBfQ09ORklHMF9WREVDX0RJUykKKyNkZWZpbmUgY2FwQ29uZmlnMSBDQVBfQ09ORklHMV9BUE1DX0RJUworI2RlZmluZSBjYXBDb25maWcyIChDQVBfQ09ORklHMl9TUFVfRElTIHwgQ0FQX0NPTkZJRzJfUEtBX0RJUykKKyNkZWZpbmUgQ0FQX0FQTV9NQVhfTlVNX0NIQU5TIDIKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTEyMTEpCisjZGVmaW5lIGNhcENvbmZpZzAgKENBUF9DT05GSUcwX0VUSF9QSFkwX0RJUyB8IENBUF9DT05GSUcwX0VUSF9HTUlJMF9ESVMgfCBDQVBfQ09ORklHMF9FVEhfR01JSTFfRElTIHwgQ0FQX0NPTkZJRzBfRVRIX1NHTUlJMF9ESVMgfCBDQVBfQ09ORklHMF9FVEhfU0dNSUkxX0RJUyB8IENBUF9DT05GSUcwX0NMQ0RfRElTKQorI2RlZmluZSBjYXBDb25maWcxIENBUF9DT05GSUcxX0FQTUNfRElTCisjZGVmaW5lIGNhcENvbmZpZzIgMAorI2RlZmluZSBDQVBfQVBNX01BWF9OVU1fQ0hBTlMgMgorI2Vsc2UKKyNlcnJvciBDRkdfR0xPQkFMX0NISVAgdHlwZSBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQKKyNlbmRpZgorCisjaWYgICAoKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwNykgfHwgKENGR19HTE9CQUxfQ0hJUCA9PSBGUEdBMTExMDcpKQorI2RlZmluZSBDQVBfSFdfQ0ZHX0FSTV9DTEtfSFogNTAwMDAwMDAwCisjZWxpZiAoKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTEwOSkgfHwgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTE3MCkgfHwgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTExMCkpCisjZGVmaW5lIENBUF9IV19DRkdfQVJNX0NMS19IWiAzMDAwMDAwMDAKKyNlbGlmIChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTEyMTEpCisjZGVmaW5lIENBUF9IV19DRkdfQVJNX0NMS19IWiA2NjY2NjY2NjYKKyNlbHNlCisjZXJyb3IgQ0ZHX0dMT0JBTF9DSElQIHR5cGUgY2FwYWJpbGl0aWVzIG5vdCBkZWZpbmVkCisjZW5kaWYKKworI2lmICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA3KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMjExKSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEZQR0ExMTEwNykpCisjZGVmaW5lIENBUF9IV19DRkdfVlBNX0NMS19IWiAzMzMzMzMzMzMKKyNlbGlmICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA5KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTcwKSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTEwKSkKKyNkZWZpbmUgQ0FQX0hXX0NGR19WUE1fQ0xLX0haIDIwMDAwMDAwMAorI2Vsc2UKKyNlcnJvciBDRkdfR0xPQkFMX0NISVAgdHlwZSBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQKKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIGNhcF9pc1ByZXNlbnQgLQorKgorKiAgUFVSUE9TRToKKyogICAgIERldGVybWluZXMgaWYgdGhlIGNoaXAgaGFzIGEgY2VydGFpbiBjYXBhYmlsaXR5IHByZXNlbnQKKyoKKyogIFBBUkFNRVRFUlM6CisqICAgICBjYXBhYmlsaXR5IC0gdHlwZSBvZiBjYXBhYmlsaXR5IHRvIGRldGVybWluZSBpZiBwcmVzZW50CisqCisqICBSRVRVUk5TOgorKiAgICAgQ0FQX1BSRVNFTlQgb3IgQ0FQX05PVF9QUkVTRU5UCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBDQVBfUkNfVCBjYXBfaXNQcmVzZW50KENBUF9DQVBBQklMSVRZX1QgY2FwYWJpbGl0eSwgaW50IGluZGV4KQoreworCUNBUF9SQ19UIHJldHVyblZhbCA9IENBUF9OT1RfUFJFU0VOVDsKKworCXN3aXRjaCAoY2FwYWJpbGl0eSkgeworCWNhc2UgQ0FQX1ZQTToKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX1ZQTV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9FVEhfUEhZOgorCQl7CisJCQlpZiAoKGluZGV4ID09IDApCisJCQkgICAgJiYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX0VUSF9QSFkwX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCQlpZiAoKGluZGV4ID09IDEpCisJCQkgICAgJiYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX0VUSF9QSFkxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9FVEhfR01JSToKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FVEhfR01JSTBfRElTKSkpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJCWlmICgoaW5kZXggPT0gMSkKKwkJCSAgICAmJiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfRVRIX0dNSUkxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9FVEhfU0dNSUk6CisJCXsKKwkJCWlmICgoaW5kZXggPT0gMCkKKwkJCSAgICAmJiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfRVRIX1NHTUlJMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FVEhfU0dNSUkxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9VU0I6CisJCXsKKwkJCWlmICgoaW5kZXggPT0gMCkKKwkJCSAgICAmJiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfVVNCMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9VU0IxX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9UU0M6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9UU0NfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfRUhTUzoKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FSFNTMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9FSFNTMV9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfU0RJTzoKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9TRElPMF9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQkJaWYgKChpbmRleCA9PSAxKQorCQkJICAgICYmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9TRElPMV9ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfVUFSVEI6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9VQVJUQl9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9LRVlQQUQ6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9LRVlQQURfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfQ0xDRDoKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX0NMQ0RfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfR0U6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9HRV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9MRURNOgorCQl7CisJCQlpZiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfTEVETV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9CQkw6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzAgJiBDQVBfQ09ORklHMF9CQkxfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfVkRFQzoKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMCAmIENBUF9DT05GSUcwX1ZERUNfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfUElGOgorCQl7CisJCQlpZiAoIShjYXBDb25maWcwICYgQ0FQX0NPTkZJRzBfUElGX0RJUykpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgQ0FQX0FQTToKKwkJeworCQkJaWYgKChpbmRleCA9PSAwKQorCQkJICAgICYmICghKGNhcENvbmZpZzEgJiBDQVBfQ09ORklHMV9BUE1BX0RJUykpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCQlpZiAoKGluZGV4ID09IDEpCisJCQkgICAgJiYgKCEoY2FwQ29uZmlnMSAmIENBUF9DT05GSUcxX0FQTUJfRElTKSkpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJCWlmICgoaW5kZXggPT0gMikKKwkJCSAgICAmJiAoIShjYXBDb25maWcxICYgQ0FQX0NPTkZJRzFfQVBNQ19ESVMpKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBDQVBfU1BVOgorCQl7CisJCQlpZiAoIShjYXBDb25maWcyICYgQ0FQX0NPTkZJRzJfU1BVX0RJUykpIHsKKwkJCQlyZXR1cm5WYWwgPSBDQVBfUFJFU0VOVDsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgQ0FQX1BLQToKKwkJeworCQkJaWYgKCEoY2FwQ29uZmlnMiAmIENBUF9DT05GSUcyX1BLQV9ESVMpKSB7CisJCQkJcmV0dXJuVmFsID0gQ0FQX1BSRVNFTlQ7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIENBUF9STkc6CisJCXsKKwkJCWlmICghKGNhcENvbmZpZzIgJiBDQVBfQ09ORklHMl9STkdfRElTKSkgeworCQkJCXJldHVyblZhbCA9IENBUF9QUkVTRU5UOworCQkJfQorCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJeworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dXJuVmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgY2FwX2dldE1heEFybVNwZWVkSHogLQorKgorKiAgUFVSUE9TRToKKyogICAgIERldGVybWluZXMgdGhlIG1heGltdW0gc3BlZWQgb2YgdGhlIEFSTSBDUFUKKyoKKyogIFBBUkFNRVRFUlM6CisqICAgICBub25lCisqCisqICBSRVRVUk5TOgorKiAgICAgY2xvY2sgc3BlZWQgaW4gSHogdGhhdCB0aGUgQVJNIHByb2Nlc3NvciBpcyBhYmxlIHRvIHJ1biBhdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2FwX2dldE1heEFybVNwZWVkSHoodm9pZCkKK3sKKyNpZiAgICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA3KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEZQR0ExMTEwNykpCisJcmV0dXJuIDUwMDAwMDAwMDsKKyNlbGlmICgoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTA5KSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTcwKSB8fCAoQ0ZHX0dMT0JBTF9DSElQID09IEJDTTExMTEwKSkKKwlyZXR1cm4gMzAwMDAwMDAwOworI2VsaWYgKENGR19HTE9CQUxfQ0hJUCA9PSBCQ00xMTIxMSkKKwlyZXR1cm4gNjY2NjY2NjY2OworI2Vsc2UKKyNlcnJvciBDRkdfR0xPQkFMX0NISVAgdHlwZSBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgY2FwX2dldE1heFZwbVNwZWVkSHogLQorKgorKiAgUFVSUE9TRToKKyogICAgIERldGVybWluZXMgdGhlIG1heGltdW0gc3BlZWQgb2YgdGhlIFZQTQorKgorKiAgUEFSQU1FVEVSUzoKKyogICAgIG5vbmUKKyoKKyogIFJFVFVSTlM6CisqICAgICBjbG9jayBzcGVlZCBpbiBIeiB0aGF0IHRoZSBWUE0gaXMgYWJsZSB0byBydW4gYXQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNhcF9nZXRNYXhWcG1TcGVlZEh6KHZvaWQpCit7CisjaWYgKChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMDcpIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTEyMTEpIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gRlBHQTExMTA3KSkKKwlyZXR1cm4gMzMzMzMzMzMzOworI2VsaWYgKChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMDkpIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExNzApIHx8IChDRkdfR0xPQkFMX0NISVAgPT0gQkNNMTExMTApKQorCXJldHVybiAyMDAwMDAwMDA7CisjZWxzZQorI2Vycm9yIENGR19HTE9CQUxfQ0hJUCB0eXBlIGNhcGFiaWxpdGllcyBub3QgZGVmaW5lZAorI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBjYXBfZ2V0TWF4TGNkUmVzIC0KKyoKKyogIFBVUlBPU0U6CisqICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIExDRCByZXNvbHV0aW9uIGNhcGFiaWxpdGllcworKgorKiAgUEFSQU1FVEVSUzoKKyogICAgIG5vbmUKKyoKKyogIFJFVFVSTlM6CisqICAgQ0FQX0xDRF9XVkdBLCBDQVBfTENEX1ZHQSwgQ0FQX0xDRF9XUVZHQSBvciBDQVBfTENEX1FWR0EKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIENBUF9MQ0RfUkVTX1QgY2FwX2dldE1heExjZFJlcyh2b2lkKQoreworCXJldHVybiAoQ0FQX0xDRF9SRVNfVCkKKwkJKChjYXBDb25maWcxICYgQ0FQX0NPTkZJRzFfQ0xDRF9SRVNfTUFTSykgPj4KKwkJIENBUF9DT05GSUcxX0NMQ0RfUkVTX1NISUZUKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2RlZi5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGVhZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19kZWYuaApAQCAtMCwwICsxLDExMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ0hJUENfREVGX0gKKyNkZWZpbmUgQ0hJUENfREVGX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8Y3NwL2Vycm5vLmg+CisjaW5jbHVkZSA8Y3NwL3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL2NoaXBjSHdfcmVnLmg+CisKKy8qIC0tLS0gUHVibGljIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBTZXQgMSB0byBjb25maWd1cmUgRERSL1ZQTSBwaGFzZSBhbGlnbm1lbnQgYnkgSFcgKi8KKyNkZWZpbmUgY2hpcGNId19ERFJfSFdfUEhBU0VfQUxJR04gICAgMAorI2RlZmluZSBjaGlwY0h3X1ZQTV9IV19QSEFTRV9BTElHTiAgICAwCisKK3R5cGVkZWYgdWludDMyX3QgY2hpcGNId19mcmVxOworCisvKiBDb25maWd1cmFibGUgbWlzY2VsbGFuZW91cyBjbG9ja3MgKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19DTE9DS19ERFIsCS8qIEREUiBQSFkgQ2xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX0FSTSwJLyogQVJNIENsb2NrICovCisJY2hpcGNId19DTE9DS19FU1csCS8qIEV0aGVybmV0IFN3aXRjaCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfVlBNLAkvKiBWUE0gQ2xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX0VTVzEyNSwJLyogRXRoZXJuZXQgTUlJIENsb2NrICovCisJY2hpcGNId19DTE9DS19VQVJULAkvKiBVQVJUIENsb2NrICovCisJY2hpcGNId19DTE9DS19TRElPMCwJLyogU0RJTyAwIENsb2NrICovCisJY2hpcGNId19DTE9DS19TRElPMSwJLyogU0RJTyAxIENsb2NrICovCisJY2hpcGNId19DTE9DS19TUEksCS8qIFNQSSBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfRVRNLAkvKiBBUk0gRVRNIENsb2NrICovCisKKwljaGlwY0h3X0NMT0NLX0JVUywJLyogQlVTIENsb2NrICovCisJY2hpcGNId19DTE9DS19PVFAsCS8qIE9UUCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfSTJDLAkvKiBJMkMgSG9zdCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfSTJTMCwJLyogSTJTIDAgSG9zdCBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfUlRCVVMsCS8qIEREUiBQSFkgQ29uZmlndXJhdGlvbiBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfQVBNMTAwLAkvKiBBUE0xMDAgQ2xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX1RTQywJLyogVG91Y2ggc2NyZWVuIENsb2NrICovCisJY2hpcGNId19DTE9DS19MRUQsCS8qIExFRCBDbG9jayAqLworCisJY2hpcGNId19DTE9DS19VU0IsCS8qIFVTQiBDbG9jayAqLworCWNoaXBjSHdfQ0xPQ0tfTENELAkvKiBMQ0QgQ0xvY2sgKi8KKwljaGlwY0h3X0NMT0NLX0FQTSwJLyogQVBNIENsb2NrICovCisKKwljaGlwY0h3X0NMT0NLX0kyUzEsCS8qIEkyUyAxIEhvc3QgQ2xvY2sgKi8KK30gY2hpcGNId19DTE9DS19lOworCisvKiBTeXN0ZW0gYm9vdGluZyBzdHJhcCBvcHRpb25zICovCit0eXBlZGVmIGVudW0geworCWNoaXBjSHdfQk9PVF9ERVZJQ0VfVUFSVCA9IGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX1VBUlQsCisJY2hpcGNId19CT09UX0RFVklDRV9TRVJJQUxfRkxBU0ggPQorCSAgICBjaGlwY0h3X1NUUkFQU19CT09UX0RFVklDRV9TRVJJQUxfRkxBU0gsCisJY2hpcGNId19CT09UX0RFVklDRV9OT1JfRkxBU0hfMTYgPQorCSAgICBjaGlwY0h3X1NUUkFQU19CT09UX0RFVklDRV9OT1JfRkxBU0hfMTYsCisJY2hpcGNId19CT09UX0RFVklDRV9OQU5EX0ZMQVNIXzggPQorCSAgICBjaGlwY0h3X1NUUkFQU19CT09UX0RFVklDRV9OQU5EX0ZMQVNIXzgsCisJY2hpcGNId19CT09UX0RFVklDRV9OQU5EX0ZMQVNIXzE2ID0KKwkgICAgY2hpcGNId19TVFJBUFNfQk9PVF9ERVZJQ0VfTkFORF9GTEFTSF8xNgorfSBjaGlwY0h3X0JPT1RfREVWSUNFX2U7CisKKy8qIFN5c3RlbSBib290aW5nIG1vZGVzICovCit0eXBlZGVmIGVudW0geworCWNoaXBjSHdfQk9PVF9NT0RFX05PUk1BTCA9IGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9OT1JNQUwsCisJY2hpcGNId19CT09UX01PREVfREJHX1NXID0gY2hpcGNId19TVFJBUFNfQk9PVF9NT0RFX0RCR19TVywKKwljaGlwY0h3X0JPT1RfTU9ERV9EQkdfQk9PVCA9IGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9EQkdfQk9PVCwKKwljaGlwY0h3X0JPT1RfTU9ERV9OT1JNQUxfUVVJRVQgPSBjaGlwY0h3X1NUUkFQU19CT09UX01PREVfTk9STUFMX1FVSUVUCit9IGNoaXBjSHdfQk9PVF9NT0RFX2U7CisKKy8qIE5BTkQgRmxhc2ggcGFnZSBzaXplIHN0cmFwIG9wdGlvbnMgKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19OQU5EX1BBR0VTSVpFXzUxMiA9IGNoaXBjSHdfU1RSQVBTX05BTkRfUEFHRVNJWkVfNTEyLAorCWNoaXBjSHdfTkFORF9QQUdFU0laRV8yMDQ4ID0gY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV8yMDQ4LAorCWNoaXBjSHdfTkFORF9QQUdFU0laRV80MDk2ID0gY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV80MDk2LAorCWNoaXBjSHdfTkFORF9QQUdFU0laRV9FWFQgPSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFX0VYVAorfSBjaGlwY0h3X05BTkRfUEFHRVNJWkVfZTsKKworLyogR1BJTyBQaW4gZnVuY3Rpb24gKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0tFWVBBRCA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX0tFWVBBRCwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fSTJDSCA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX0kyQ0gsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX1NQSSA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX1NQSSwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fVUFSVCA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX1VBUlQsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0xFRE1UWFAgPSBjaGlwY0h3X1JFR19HUElPX01VWF9MRURNVFhQLAorCWNoaXBjSHdfR1BJT19GVU5DVElPTl9MRURNVFhTID0gY2hpcGNId19SRUdfR1BJT19NVVhfTEVETVRYUywKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fU0RJTzAgPSBjaGlwY0h3X1JFR19HUElPX01VWF9TRElPMCwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fU0RJTzEgPSBjaGlwY0h3X1JFR19HUElPX01VWF9TRElPMSwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fUENNID0gY2hpcGNId19SRUdfR1BJT19NVVhfUENNLAorCWNoaXBjSHdfR1BJT19GVU5DVElPTl9JMlMgPSBjaGlwY0h3X1JFR19HUElPX01VWF9JMlMsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0VUTSA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX0VUTSwKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fREVCVUcgPSBjaGlwY0h3X1JFR19HUElPX01VWF9ERUJVRywKKwljaGlwY0h3X0dQSU9fRlVOQ1RJT05fTUlTQyA9IGNoaXBjSHdfUkVHX0dQSU9fTVVYX01JU0MsCisJY2hpcGNId19HUElPX0ZVTkNUSU9OX0dQSU8gPSBjaGlwY0h3X1JFR19HUElPX01VWF9HUElPCit9IGNoaXBjSHdfR1BJT19GVU5DVElPTl9lOworCisvKiBQSU4gT3V0cHV0IHNsZXcgcmF0ZSAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1BJTl9TTEVXX1JBVEVfSElHSCA9IGNoaXBjSHdfUkVHX1NMRVdfUkFURV9ISUdILAorCWNoaXBjSHdfUElOX1NMRVdfUkFURV9OT1JNQUwgPSBjaGlwY0h3X1JFR19TTEVXX1JBVEVfTk9STUFMCit9IGNoaXBjSHdfUElOX1NMRVdfUkFURV9lOworCisvKiBQSU4gQ3VycmVudCBkcml2ZSBzdHJlbmd0aCAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIXzJtQSA9IGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfMm1BLAorCWNoaXBjSHdfUElOX0NVUlJFTlRfU1RSRU5HVEhfNG1BID0gY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF80bUEsCisJY2hpcGNId19QSU5fQ1VSUkVOVF9TVFJFTkdUSF82bUEgPSBjaGlwY0h3X1JFR19DVVJSRU5UX1NUUkVOR1RIXzZtQSwKKwljaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIXzhtQSA9IGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfOG1BLAorCWNoaXBjSHdfUElOX0NVUlJFTlRfU1RSRU5HVEhfMTBtQSA9IGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfMTBtQSwKKwljaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIXzEybUEgPSBjaGlwY0h3X1JFR19DVVJSRU5UX1NUUkVOR1RIXzEybUEKK30gY2hpcGNId19QSU5fQ1VSUkVOVF9TVFJFTkdUSF9lOworCisvKiBQSU4gUHVsbCB1cCByZWdpc3RlciBzZXR0aW5ncyAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1BJTl9QVUxMX05PTkUgPSBjaGlwY0h3X1JFR19QVUxMX05PTkUsCisJY2hpcGNId19QSU5fUFVMTF9VUCA9IGNoaXBjSHdfUkVHX1BVTExfVVAsCisJY2hpcGNId19QSU5fUFVMTF9ET1dOID0gY2hpcGNId19SRUdfUFVMTF9ET1dOCit9IGNoaXBjSHdfUElOX1BVTExfZTsKKworLyogUElOIGlucHV0IHR5cGUgc2V0dGluZ3MgKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19QSU5fSU5QVVRUWVBFX0NNT1MgPSBjaGlwY0h3X1JFR19JTlBVVFRZUEVfQ01PUywKKwljaGlwY0h3X1BJTl9JTlBVVFRZUEVfU1QgPSBjaGlwY0h3X1JFR19JTlBVVFRZUEVfU1QKK30gY2hpcGNId19QSU5fSU5QVVRUWVBFX2U7CisKKy8qIEFsbG93L0Rpc2Fsb3cgdGhlIHN1cHBvcnQgb2Ygc3ByZWFkIHNwZWN0cnVtICAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9ESVNBTExPVywJLyogU3ByZWFkIHNwZWN0cnVtIHN1cHBvcnQgaXMgbm90IGFsbG93ZWQgKi8KKwljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9BTExPVwkvKiBTcHJlYWQgc3BlY3RydW0gc3VwcG9ydCBpcyBhbGxvd2VkICovCit9IGNoaXBjSHdfU1BSRUFEX1NQRUNUUlVNX2U7CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9lIHNzU3VwcG9ydDsJLyogQWxsb3cvRGlzYWxvdyB0byBzdXBwb3J0IHNwcmVhZCBzcGVjdHJ1bS4KKwkJCQkJCSAgIElmIHN1cHBvcnRlZCwgY2FsbCBjaGlwY0h3X2VuYWJsZVNwcmVhZFNwZWN0cnVtICgpCisJCQkJCQkgICB0byBhY3RpdmF0ZSB0aGUgc3ByZWFkIHNwZWN0cnVtIHdpdGggZGVzaXJlZCBzcHJlYWQuICovCisJdWludDMyX3QgcGxsVmNvRnJlcUh6OwkvKiBQTEwgVkNPIGZyZXF1ZW5jeSBpbiBIeiAqLworCXVpbnQzMl90IHBsbDJWY29GcmVxSHo7CS8qIFBMTDIgVkNPIGZyZXF1ZW5jeSBpbiBIeiAqLworCXVpbnQzMl90IGJ1c0Nsb2NrRnJlcUh6OwkvKiBCdXMgY2xvY2sgZnJlcXVlbmN5IGluIEh6ICovCisJdWludDMyX3QgYXJtQnVzUmF0aW87CS8qIEFSTSBjbG9jayA6IEJ1cyBjbG9jayAqLworCXVpbnQzMl90IHZwbUJ1c1JhdGlvOwkvKiBWUE0gY2xvY2sgOiBCdXMgY2xvY2sgKi8KKwl1aW50MzJfdCBkZHJCdXNSYXRpbzsJLyogRERSIGNsb2NrIDogQnVzIGNsb2NrICovCit9IGNoaXBjSHdfSU5JVF9QQVJBTV90OworCisvKiBDSElQIHJldmlzaW9uIG51bWJlciAqLwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1JFVl9OVU1CRVJfQTAgPSBjaGlwY0h3X1JFR19SRVZfQTAsCisJY2hpcGNId19SRVZfTlVNQkVSX0IwID0gY2hpcGNId19SRUdfUkVWX0IwCit9IGNoaXBjSHdfUkVWX05VTUJFUl9lOworCit0eXBlZGVmIGVudW0geworCWNoaXBjSHdfVlBNX0hXX1BIQVNFX0lOVFJfRElTQUJMRSA9IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX0RJU0FCTEUsCisJY2hpcGNId19WUE1fSFdfUEhBU0VfSU5UUl9GQVNUID0gY2hpcGNId19SRUdfVlBNX0lOVFJfRkFTVCwKKwljaGlwY0h3X1ZQTV9IV19QSEFTRV9JTlRSX01FRElVTSA9IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX01FRElVTSwKKwljaGlwY0h3X1ZQTV9IV19QSEFTRV9JTlRSX1NMT1cgPSBjaGlwY0h3X1JFR19WUE1fSU5UUl9TTE9XCit9IGNoaXBjSHdfVlBNX0hXX1BIQVNFX0lOVFJfZTsKKwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fU1RSSUNULAkvKiAgU3RyaWN0IG1hcmdpbiBmb3IgRERSIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworCWNoaXBjSHdfRERSX0hXX1BIQVNFX01BUkdJTl9NRURJVU0sCS8qICBNZWRpdW0gbWFyZ2luIGZvciBERFIgcGhhc2UgYWxpZ24gY29uZGl0aW9uICovCisJY2hpcGNId19ERFJfSFdfUEhBU0VfTUFSR0lOX1dJREUJLyogIFdpZGVyIG1hcmdpbiBmb3IgRERSIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworfSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fZTsKKwordHlwZWRlZiBlbnVtIHsKKwljaGlwY0h3X1ZQTV9IV19QSEFTRV9NQVJHSU5fU1RSSUNULAkvKiAgU3RyaWN0IG1hcmdpbiBmb3IgVlBNIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworCWNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9NRURJVU0sCS8qICBNZWRpdW0gbWFyZ2luIGZvciBWUE0gcGhhc2UgYWxpZ24gY29uZGl0aW9uICovCisJY2hpcGNId19WUE1fSFdfUEhBU0VfTUFSR0lOX1dJREUJLyogIFdpZGVyIG1hcmdpbiBmb3IgVlBNIHBoYXNlIGFsaWduIGNvbmRpdGlvbiAqLworfSBjaGlwY0h3X1ZQTV9IV19QSEFTRV9NQVJHSU5fZTsKKworI2RlZmluZSBjaGlwY0h3X1hUQUxfRlJFUV9IeiAgICAgICAgICAgICAgICAgICAgMjUwMDAwMDAJLyogUmVmZXJlbmNlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiAqLworCisvKiBQcm9ncmFtYWJsZSBwaW4gZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9HUElPKG4pICAgICAgICAgICAgICAgICAgICAgKCgoKG4pID49IDApICYmICgobikgPCAoY2hpcGNId19HUElPX0NPVU5UKSkpID8gKG4pIDogMHhGRkZGRkZGRikKKwkJCQkJCQkJCSAgICAgLyogR1BJTyBwaW4gMCAtIDYwICovCisjZGVmaW5lIGNoaXBjSHdfUElOX1VBUlRUWEQgICAgICAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMCkJLyogVUFSVCBUcmFuc21pdCAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9OVklfQSAgICAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDEpCS8qIE5WSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fTlZJX0QgICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAyKQkvKiBOVkkgSW50ZXJmYWNlICovCisjZGVmaW5lIGNoaXBjSHdfUElOX05WSV9PRUIgICAgICAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMykJLyogTlZJIEludGVyZmFjZSAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9OVklfV0VCICAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDQpCS8qIE5WSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fTlZJX0NTICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyA1KQkvKiBOVkkgSW50ZXJmYWNlICovCisjZGVmaW5lIGNoaXBjSHdfUElOX05WSV9OQU5EX0NTQiAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgNikJLyogTlZJIEludGVyZmFjZSAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9OVklfRkxBU0hXUCAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDcpCS8qIE5WSSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fTlZJX05BTkRfUkRZQiAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyA4KQkvKiBOVkkgSW50ZXJmYWNlICovCisjZGVmaW5lIGNoaXBjSHdfUElOX0NMX0RBVEFfMF8xNyAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgOSkJLyogTENEIERhdGEgMCAtIDE3ICovCisjZGVmaW5lIGNoaXBjSHdfUElOX0NMX0RBVEFfMThfMjAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMTApCS8qIExDRCBEYXRhIDE4IC0gMjAgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fQ0xfREFUQV8yMV8yMyAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAxMSkJLyogTENEIERhdGEgMjEgLSAyMyAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9DTF9QT1dFUiAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDEyKQkvKiBMQ0QgUG93ZXIgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fQ0xfQUNLICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAxMykJLyogTENEIEFjayAqLworI2RlZmluZSBjaGlwY0h3X1BJTl9DTF9GUCAgICAgICAgICAgICAgICAgICAgICAgKGNoaXBjSHdfR1BJT19DT1VOVCArIDE0KQkvKiBMQ0QgRlAgKi8KKyNkZWZpbmUgY2hpcGNId19QSU5fQ0xfTFAgICAgICAgICAgICAgICAgICAgICAgIChjaGlwY0h3X0dQSU9fQ09VTlQgKyAxNSkJLyogTENEIExQICovCisjZGVmaW5lIGNoaXBjSHdfUElOX1VBUlRSWEQgICAgICAgICAgICAgICAgICAgICAoY2hpcGNId19HUElPX0NPVU5UICsgMTYpCS8qIFVBUlQgUmVjZWl2ZSAqLworCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgSW5pdGlhbGl6ZXMgdGhlIGNsb2NrIG1vZHVsZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjaGlwY0h3X0luaXQoY2hpcGNId19JTklUX1BBUkFNX3QgKmluaXRQYXJhbQkvKiAgWyBJTiBdIE1pc2MgY2hpcCBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIgKi8KKyAgICApIF9fYXR0cmlidXRlX18gKChzZWN0aW9uKCIuYXJhbXRleHQiKSkpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBFbmFibGVzIHRoZSBQTEwxCisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIFBMTDEKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY2hpcGNId19wbGwxRW5hYmxlKHVpbnQzMl90IHZjb0ZyZXFIeiwJLyogIFsgSU4gXSBWQ08gZnJlcXVlbmN5IGluIEh6ICovCisJCQljaGlwY0h3X1NQUkVBRF9TUEVDVFJVTV9lIHNzU3VwcG9ydAkvKiAgWyBJTiBdIFNTIHN0YXR1cyAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIEVuYWJsZXMgdGhlIFBMTDIKKyoKKyogIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyB0aGUgUExMMgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjaGlwY0h3X3BsbDJFbmFibGUodWludDMyX3QgdmNvRnJlcUh6CS8qICBbIElOIF0gVkNPIGZyZXF1ZW5jeSBpbiBIeiAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIERpc2FibGUgdGhlIFBMTDEKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbDFEaXNhYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBEaXNhYmxlIHRoZSBQTEwyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBjbG9jayBmZXF1ZW5jeSBmb3IgbWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgY2xvY2tzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgY2xvY2sgZnJlcXVlbmN5CisqCisqICBAcmV0dXJuICBDb25maWd1cmVkIGNsb2NrIGZyZXF1ZW5jeSBpbiBLSHoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NoaXBjSHdfZnJlcSBjaGlwY0h3X2dldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfZSBjbG9jawkvKiAgWyBJTiBdIENvbmZpZ3VyYWJsZSBjbG9jayAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgY2xvY2sgZmVxdWVuY3kgZm9yIG1pc2NlbGxhbmVvdXMgY29uZmlndXJhYmxlIGNsb2NrcworKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIGNsb2NrIGZyZXF1ZW5jeQorKgorKiAgQHJldHVybiAgQ29uZmlndXJlZCBjbG9jayBmcmVxdWVuY3kgaW4gSHoKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NoaXBjSHdfZnJlcSBjaGlwY0h3X3NldENsb2NrRnJlcXVlbmN5KGNoaXBjSHdfQ0xPQ0tfZSBjbG9jaywJLyogIFsgSU4gXSBDb25maWd1cmFibGUgY2xvY2sgKi8KKwkJCQkgICAgICAgdWludDMyX3QgZnJlcQkvKiAgWyBJTiBdIENsb2NrIGZyZXF1ZW5jeSBpbiBIeiAqLworICAgICkgX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24oIi5hcmFtdGV4dCIpKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIGNsb2NrIGluIHN5bmMgd2l0aCBCVVMgY2xvY2sKKyoKKyogIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgcGhhc2UgYWRqdXN0bWVudCBiZXR3ZWVuIFZQTSBhbmQgQlVTIGNsb2NrCisqCisqICBAcmV0dXJuID49IDAgOiBPbiBzdWNjZXNzICggIyBvZiBhZGp1c3RtZW50IHJlcXVpcmVkICkKKyogICAgICAgICAgICAtMSA6IE9uIGZhaWx1cmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBjaGlwY0h3X3ZwbVBoYXNlQWxpZ24odm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFbmFibGVzIGNvcmUgYSBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYSBjb3JlIGNsb2NrCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICBEb2Vzbm90IGFmZmVjdCB0aGUgYnVzIGludGVyZmFjZSBjbG9jaworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0Q2xvY2tFbmFibGUoY2hpcGNId19DTE9DS19lIGNsb2NrCS8qICBbIElOIF0gQ29uZmlndXJhYmxlIGNsb2NrICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVkIGEgY29yZSBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIGEgY29yZSBjbG9jaworKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgRG9lc25vdCBhZmZlY3QgdGhlIGJ1cyBpbnRlcmZhY2UgY2xvY2sKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldENsb2NrRGlzYWJsZShjaGlwY0h3X0NMT0NLX2UgY2xvY2sJLyogIFsgSU4gXSBDb25maWd1cmFibGUgY2xvY2sgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlcyBieXBhc3MgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIGJ5cGFzcyBjbG9jaworKgorKiAgQG5vdGUgICAgRG9lc25vdCBhZmZlY3QgdGhlIGJ1cyBpbnRlcmZhY2UgY2xvY2sKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2J5cGFzc0Nsb2NrRW5hYmxlKGNoaXBjSHdfQ0xPQ0tfZSBjbG9jawkvKiAgWyBJTiBdIENvbmZpZ3VyYWJsZSBjbG9jayAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlZCBieXBhc3MgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBieXBhc3MgY2xvY2sKKyoKKyogIEBub3RlICAgIERvZXNub3QgYWZmZWN0IHRoZSBidXMgaW50ZXJmYWNlIGNsb2NrCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19ieXBhc3NDbG9ja0Rpc2FibGUoY2hpcGNId19DTE9DS19lIGNsb2NrCS8qICBbIElOIF0gQ29uZmlndXJhYmxlIGNsb2NrICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBOdW1lcmljIENoaXAgSUQKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBDaGlwIElEIHRoYXQgaW5jbHVkZXMgdGhlIHJldmlzb24gbnVtYmVyCisqCisqICBAcmV0dXJuICBDb21wbGV0ZSBudW1lcmljIENoaXAgSUQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXRDaGlwSWQodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgQ2hpcCBQcm9kdWN0IElECisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgQ2hpcCBQcm9kdWN0IElECisqCisqICBAcmV0dXJuICBDaGlwIFByb2R1Y3QgSUQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXRDaGlwUHJvZHVjdElkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IHJldmlzaW9uIG51bWJlcgorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHJldmlzaW9uIG51bWJlciBvZiB0aGUgY2hpcAorKgorKiAgQHJldHVybiAgUmV2aXNpb24gbnVtYmVyCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGNoaXBjSHdfUkVWX05VTUJFUl9lIGNoaXBjSHdfZ2V0Q2hpcFJldmlzaW9uTnVtYmVyKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlcyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBFbmFibGVzICBidXMgaW50ZXJmYWNlIGNsb2NrIG9mIHZhcmlvdXMgZGV2aWNlCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQlVTX0NMT0NLX1hYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2J1c0ludGVyZmFjZUNsb2NrRW5hYmxlKHVpbnQzMl90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBEaXNhYmxlcyAgYnVzIGludGVyZmFjZSBjbG9jayBvZiB2YXJpb3VzIGRldmljZQorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgdXNlIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0Rpc2FibGUodWludDMyX3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSAgY2hpcGNId19SRUdfQlVTX0NMT0NLX1hYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdmFyaW91cyBhdWRpbyBjaGFubmVscworKgorKiAgRW5hYmxlcyBhdWRpbyBjaGFubmVsCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2F1ZGlvQ2hhbm5lbEVuYWJsZSh1aW50MzJfdCBtYXNrCS8qICBbIElOIF0gQml0IG1hcCBvZiB0eXBlICBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX1hYWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyB2YXJpb3VzIGF1ZGlvIGNoYW5uZWxzCisqCisqICBEaXNhYmxlcyBhdWRpbyBjaGFubmVsCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2F1ZGlvQ2hhbm5lbERpc2FibGUodWludDMyX3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSAgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFggKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNvZnQgcmVzZXRzIGRldmljZXMKKyoKKyogIFNvZnQgcmVzZXRzIHZhcmlvdXMgZGV2aWNlcworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggZGVmaW5lcworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdFJlc2V0KHVpbnQ2NF90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggKi8KKyAgICApOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0UmVzZXREaXNhYmxlKHVpbnQ2NF90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggKi8KKyAgICApOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0UmVzZXRFbmFibGUodWludDY0X3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1hYWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgQ29uZmlndXJlcyBtaXNjIENISVAgZnVuY3Rpb25hbGl0eQorKgorKiAgQ29uZmlndXJlcyBDSElQIGZ1bmN0aW9uYWxpdHkKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sKHVpbnQzMl90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfTUlTQ19DVFJMX1hYWFhYWCAqLworICAgICk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sRGlzYWJsZSh1aW50MzJfdCBtYXNrCS8qICBbIElOIF0gQml0IG1hcCBvZiB0eXBlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFggKi8KKyAgICApOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19taXNjQ29udHJvbEVuYWJsZSh1aW50MzJfdCBtYXNrCS8qICBbIElOIF0gQml0IG1hcCBvZiB0eXBlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFggKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNldCBPVFAgb3B0aW9ucworKgorKiAgU2V0IE9UUCBvcHRpb25zCisqCisqICBAcmV0dXJuICAgdm9pZAorKgorKiAgQG5vdGUgICAgIHVzZSBjaGlwY0h3X1JFR19PVFBfWFhYWFhYCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRPVFBPcHRpb24odWludDY0X3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSBjaGlwY0h3X1JFR19PVFBfWFhYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICBTdGlja3kgYml0IG9wdGlvbnMgb2YgdHlwZSBjaGlwY0h3X1JFR19TVElDS1lfWFhYWFhYCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0U3RpY2t5Qml0cyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBTZXQgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX1NUSUNLWV9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFN0aWNreUJpdHModWludDMyX3QgbWFzawkvKiAgWyBJTiBdIEJpdCBtYXAgb2YgdHlwZSBjaGlwY0h3X1JFR19TVElDS1lfWFhYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBDbGVhciBzdGlja3kgYml0cworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU1RJQ0tZX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfY2xlYXJTdGlja3lCaXRzKHVpbnQzMl90IG1hc2sJLyogIFsgSU4gXSBCaXQgbWFwIG9mIHR5cGUgY2hpcGNId19SRUdfU1RJQ0tZX1hYWFhYWCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgR2V0IHNvZnR3YXJlIG92ZXJyaWRlIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyBzb2Z0d2FyZSBvdmVycmlkZSBzdHJhcCBvcHRpb25zCisqCisqICBAcmV0dXJuICAgU29mdHdhcmUgb3ZlcnJpZGUgc3RyYXAgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXRTb2Z0U3RyYXBzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNldCBzb2Z0d2FyZSBvdmVycmlkZSBzdHJhcCBvcHRpb25zCisqCisqICBzZXQgc29mdHdhcmUgb3ZlcnJpZGUgc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIG5vdGhpbmcKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFNvZnRTdHJhcHModWludDMyX3Qgc3RyYXBPcHRpb25zKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgcGluIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyBwaW4gc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIFBpbiBzdHJhcCB2YWx1ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFBpblN0cmFwcyh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgdmFsaWQgcGluIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyB2YWxpZCBwaW4gc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIHZhbGlkIFBpbiBzdHJhcCB2YWx1ZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFZhbGlkU3RyYXBzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIEluaXRpYWxpemUgdmFsaWQgcGluIHN0cmFwIG9wdGlvbnMKKyoKKyogIFJldHJpZXZlcyB2YWxpZCBwaW4gc3RyYXAgb3B0aW9ucyBieSBjb3B5aW5nIEhXIHN0cmFwIG9wdGlvbnMgdG8gc29mdCByZWdpc3RlcgorKiAgKGlmIGNoaXBjSHdfU1RSQVBTX1NPRlRfT1ZFUlJJREUgbm90IHNldCkKKyoKKyogIEByZXR1cm4gICBub3RoaW5nCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19pbml0VmFsaWRTdHJhcHModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgc3RhdHVzIChlbmFibGVkL2Rpc2FibGVkKSBvZiBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0YXR1cyBvZiBkZXZpY2VzJyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBAcmV0dXJuICBCdXMgaW50ZXJmYWNlIGNsb2NrCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0QnVzSW50ZXJmYWNlQ2xvY2tTdGF0dXModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgYm9vdCBkZXZpY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZGV2aWNlIHR5cGUgdXNlZCBpbiBib290aW5nIHRoZSBzeXN0ZW0KKyoKKyogIEByZXR1cm4gIEJvb3QgZGV2aWNlIG9mIHR5cGUgY2hpcGNId19CT09UX0RFVklDRV9lCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGNoaXBjSHdfQk9PVF9ERVZJQ0VfZSBjaGlwY0h3X2dldEJvb3REZXZpY2Uodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgYm9vdCBtb2RlCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHdheSB0aGUgc3lzdGVtIHdhcyBib290ZWQKKyoKKyogIEByZXR1cm4gIEJvb3QgbW9kZSBvZiB0eXBlIGNoaXBjSHdfQk9PVF9NT0RFX2UKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19CT09UX01PREVfZSBjaGlwY0h3X2dldEJvb3RNb2RlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE5BTkQgZmxhc2ggcGFnZSBzaXplCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIE5BTkQgZGV2aWNlIHBhZ2Ugc2l6ZQorKgorKiAgQHJldHVybiAgQm9vdCBOQU5EIGRldmljZSBwYWdlIHNpemUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19OQU5EX1BBR0VTSVpFX2UgY2hpcGNId19nZXROYW5kUGFnZVNpemUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgTkFORCBmbGFzaCBhZGRyZXNzIGN5Y2xlIGNvbmZpZ3VyYXRpb24KKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgTkFORCBmbGFzaCBhZGRyZXNzIGN5Y2xlIGNvbmZpZ3VyYXRpb24KKyoKKyogIEByZXR1cm4gIDAgPSBEbyBub3QgZXh0cmEgYWRkcmVzcyBjeWNsZSwgMSA9IEFkZCBleHRyYSBjeWNsZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19nZXROYW5kRXh0cmFDeWNsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEFjdGl2YXRlcyBQSUYgaW50ZXJmYWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGFjdGl2YXRlcyBQSUYgaW50ZXJmYWNlIGJ5IHRha2luZyBjb250cm9sIG9mIExDRCBwaW5zCisqCisqICBAbm90ZQorKiAgICAgICBXaGVuIGFjdGl2YXRlZCwgTENEIHBpbnMgd2lsbCBiZSBkZWZpbmVkIGFzIGZvbGxvd3MgZm9yIFBJRiBvcGVyYXRpb24KKyoKKyogICAgICAgQ0xEWzE3OjBdICA9IHBpZl9kYXRhWzE3OjBdCisqICAgICAgIENMRFsyMzoxOF0gPSBwaWZfYWRkcmVzc1s1OjBdCisqICAgICAgIENMUE9XRVIgICAgPSBwaWZfd3Jfc3RyCisqICAgICAgIENMQ1AgICAgICAgPSBwaWZfcmRfc3RyCisqICAgICAgIENMQUMgICAgICAgPSBwaWZfaGF0MQorKiAgICAgICBDTEZQICAgICAgID0gcGlmX2hyZHkxCisqICAgICAgIENMTFAgICAgICAgPSBwaWZfaGF0MgorKiAgICAgICBHUElPWzQyXSAgID0gcGlmX2hyZHkyCisqCisqICAgICAgIEluIFBJRiBtb2RlLCAicGlmX2hyZHkyIiBvdmVycmlkZXMgb3RoZXIgc2hhcmVkIGZ1bmN0aW9uIGZvciBHUElPWzQyXSBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2FjdGl2YXRlUGlmSW50ZXJmYWNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gYWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIEBub3RlCisqICAgICAgIFdoZW4gYWN0aXZhdGVkLCBMQ0QgcGlucyB3aWxsIGJlIGRlZmluZWQgYXMgZm9sbG93cworKgorKiAgICAgICBDTERbMTc6MF0gID0gTENEIGRhdGEKKyogICAgICAgQ0xEWzIzOjE4XSA9IExDRCBkYXRhCisqICAgICAgIENMUE9XRVIgICAgPSBMQ0QgcG93ZXIKKyogICAgICAgQ0xDUCAgICAgICA9CisqICAgICAgIENMQUMgICAgICAgPSBMQ0QgYWNrCisqICAgICAgIENMRlAgICAgICAgPQorKiAgICAgICBDTExQICAgICAgID0KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2FjdGl2YXRlTGNkSW50ZXJmYWNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGVhY3RpdmF0ZXMgUElGL0xDRCBpbnRlcmZhY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gZGVhY3RpdmF0ZXMgUElGL0xDRCBpbnRlcmZhY2UKKyoKKyogIEBub3RlCisqICAgICAgIFdoZW4gZGVhY3RpdmF0ZWQgTENEIHBpbnMgd2lsbCBiZSBpbiBydGktc3RhdGVkCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZWFjdGl2YXRlUGlmTGNkSW50ZXJmYWNlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgR1BJTyBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19HUElPX0ZVTkNUSU9OX2UgY2hpcGNId19nZXRHcGlvUGluRnVuY3Rpb24oaW50IHBpbgkvKiBHUElPIFBpbiBudW1iZXIgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ29uZmlndXJlIEdQSU8gcGluIGZ1bmN0aW9uCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRHcGlvUGluRnVuY3Rpb24oaW50IHBpbiwJLyogR1BJTyBQaW4gbnVtYmVyICovCisJCQkJCSAgICAgIGNoaXBjSHdfR1BJT19GVU5DVElPTl9lIGZ1bmMJLyogQ29uZmlndXJhdGlvbiBmdW5jdGlvbiAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgUGluIHNsZXcgcmF0ZQorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBzbGV3IG9mIGluZGl2aWR1YWwgcGluCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRQaW5TbGV3UmF0ZSh1aW50MzJfdCBwaW4sCS8qIFBpbiBvZiB0eXBlIGNoaXBjSHdfUElOX1hYWFhYICovCisJCQkJCSAgY2hpcGNId19QSU5fU0xFV19SQVRFX2Ugc2xld1JhdGUJLyogUGluIHNsZXcgcmF0ZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgUGluIG91dHB1dCBkcml2ZSBjdXJyZW50CisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgb3V0cHV0IGRyaXZlIGN1cnJlbnQgb2YgaW5kaXZpZHVhbCBwaW4KKyoKKyogIE5vdGU6IEF2b2lkIHRoZSB1c2Ugb2YgdGhlIHdvcmQgJ2N1cnJlbnQnIHNpbmNlIGxpbnV4IGhlYWRlcnMgZGVmaW5lIHRoaXMKKyogICAgICAgIHRvIGJlIHRoZSBjdXJyZW50IHRhc2suCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRQaW5PdXRwdXRDdXJyZW50KHVpbnQzMl90IHBpbiwJLyogUGluIG9mIHR5cGUgY2hpcGNId19QSU5fWFhYWFggKi8KKwkJCQkJICAgICAgIGNoaXBjSHdfUElOX0NVUlJFTlRfU1RSRU5HVEhfZSBjdXJyCS8qIFBpbiBjdXJyZW50IHJhdGluZyAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgUGluIHB1bGx1cCByZWdpc3RlcgorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHB1bGx1cCByZWdpc3RlciBvZiBpbmRpdmlkdWFsICBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpblB1bGx1cCh1aW50MzJfdCBwaW4sCS8qIFBpbiBvZiB0eXBlIGNoaXBjSHdfUElOX1hYWFhYICovCisJCQkJCWNoaXBjSHdfUElOX1BVTExfZSBwdWxsdXAJLyogUHVsbHVwIHJlZ2lzdGVyIHNldHRpbmdzICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBQaW4gaW5wdXQgdHlwZQorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIGlucHV0IHR5cGUgb2YgaW5kaXZpZHVhbCBQaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpbklucHV0VHlwZSh1aW50MzJfdCBwaW4sCS8qIFBpbiBvZiB0eXBlIGNoaXBjSHdfUElOX1hYWFhYICovCisJCQkJCSAgIGNoaXBjSHdfUElOX0lOUFVUVFlQRV9lIGlucHV0VHlwZQkvKiBQaW4gaW5wdXQgdHlwZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBSZXRyaWV2ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG11eCBzZXR0aW5nIGZvciBhIHBpbi4KKyoKKyogIEByZXR1cm4gIFBvaW50ZXIgdG8gYSBjaGFyYWN0ZXIgc3RyaW5nLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitjb25zdCBjaGFyICpjaGlwY0h3X2dldEdwaW9QaW5GdW5jdGlvblN0cihpbnQgcGluKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBpc3N1ZSB3YXJtUmVzZXQKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNoaXBjSHdfcmVzZXQodWludDMyX3QgbWFzayk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgY2xvY2sgcmVjb25maWd1cmUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGNoaXBjSHdfY2xvY2tSZWNvbmZpZyh1aW50MzJfdCBidXNIeiwgdWludDMyX3QgYXJtUmF0aW8sIHVpbnQzMl90IHZwbVJhdGlvLAorCQkJICAgdWludDMyX3QgZGRyUmF0aW8pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIFNwcmVhZCBTcGVjdHJ1bQorKgorKiAgQG5vdGUgY2hpcGNId19Jbml0KCkgbXVzdCBiZSBjYWxsZWQgZWFybGllcgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZW5hYmxlU3ByZWFkU3BlY3RydW0odm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlIFNwcmVhZCBTcGVjdHJ1bQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGlzYWJsZVNwcmVhZFNwZWN0cnVtKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIENoZWNrcyBpZiBzb2Z0d2FyZSBzdHJhcCBpcyBlbmFibGVkCisgKgorICogICBAcmV0dXJuIDEgOiBXaGVuIGVuYWJsZQorICogICAgICAgICAgIDAgOiBXaGVuIGRpc2FibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGludCBjaGlwY0h3X2lzU29mdHdhcmVTdHJhcHNFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgRW5hYmxlIHNvZnR3YXJlIHN0cmFwCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdHdhcmVTdHJhcHNFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgRGlzYWJsZSBzb2Z0d2FyZSBzdHJhcAorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NvZnR3YXJlU3RyYXBzRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwgdGVzdCBlbmFibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGxUZXN0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTDIgdGVzdCBlbmFibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyVGVzdEVuYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwgdGVzdCBkaXNhYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsVGVzdERpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgUExMMiB0ZXN0IGRpc2FibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyVGVzdERpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgR2V0IFBMTCB0ZXN0IHN0YXR1cworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoaXBjSHdfaXNQbGxUZXN0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIEdldCBQTEwyIHRlc3Qgc3RhdHVzCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19pc1BsbDJUZXN0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTCB0ZXN0IHNlbGVjdAorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbFRlc3RTZWxlY3QodWludDMyX3QgdmFsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwyIHRlc3Qgc2VsZWN0CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsMlRlc3RTZWxlY3QodWludDMyX3QgdmFsKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBHZXQgUExMIHRlc3Qgc2VsZWN0ZWQgb3B0aW9uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50OF90IGNoaXBjSHdfZ2V0UGxsVGVzdFNlbGVjdGVkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIEdldCBQTEwyIHRlc3Qgc2VsZWN0ZWQgb3B0aW9uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50OF90IGNoaXBjSHdfZ2V0UGxsMlRlc3RTZWxlY3RlZCh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgRERSIFNXIHBoYXNlIGFsaWdubWVudCBpbnRlcnJ1cHQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RkclBoYXNlQWxpZ25JbnRlcnJ1cHRFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyBERFIgU1cgcGhhc2UgYWxpZ25tZW50IGludGVycnVwdAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyUGhhc2VBbGlnbkludGVycnVwdERpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIFNXIHBoYXNlIGFsaWdubWVudCBpbnRlcnJ1cHQgbW9kZQorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIFZQTSBwaGFzZSBhbGlnbm1lbnQgaW50ZXJydXB0CisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NoaXBjSHdfdnBtUGhhc2VBbGlnbkludGVycnVwdE1vZGUoY2hpcGNId19WUE1fSFdfUEhBU0VfSU5UUl9lIG1vZGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIEREUiBwaGFzZSBhbGlnbm1lbnQgaW4gc29mdHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RkclN3UGhhc2VBbGlnbkVuYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgRERSIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyU3dQaGFzZUFsaWduRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBERFIgcGhhc2UgYWxpZ25tZW50IGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25FbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlIEREUiBwaGFzZSBhbGlnbm1lbnQgaW4gaGFyZHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnbkRpc2FibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFbmFibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtU3dQaGFzZUFsaWduRW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZSBWUE0gcGhhc2UgYWxpZ25tZW50IGluIHNvZnR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Td1BoYXNlQWxpZ25EaXNhYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIFZQTSBwaGFzZSBhbGlnbm1lbnQgaW4gaGFyZHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnbkVuYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtSHdQaGFzZUFsaWduRGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBERFIgcGhhc2UgYWxpZ25tZW50IG1hcmdpbiBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0RGRySHdQaGFzZUFsaWduTWFyZ2luKGNoaXBjSHdfRERSX0hXX1BIQVNFX01BUkdJTl9lIG1hcmdpbgkvKiBNYXJnaW4gYWxpbmdpbmcgRERSICBwaGFzZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgVlBNIHBoYXNlIGFsaWdubWVudCBtYXJnaW4gaW4gaGFyZHdhcmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFZwbUh3UGhhc2VBbGlnbk1hcmdpbihjaGlwY0h3X1ZQTV9IV19QSEFTRV9NQVJHSU5fZSBtYXJnaW4JLyogTWFyZ2luIGFsaW5naW5nIFZQTSAgcGhhc2UgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2tzIEREUiBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqICBAcmV0dXJuICAxOiBXaGVuIGFsaWduZWQKKyogICAgICAgICAgIDA6IFdoZW4gbm90IGFsaWduZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19pc0Rkckh3UGhhc2VBbGlnbmVkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2tzIFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqICBAcmV0dXJuICAxOiBXaGVuIGFsaWduZWQKKyogICAgICAgICAgIDA6IFdoZW4gbm90IGFsaWduZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19pc1ZwbUh3UGhhc2VBbGlnbmVkKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IEREUiBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0RGRySHdQaGFzZUFsaWduU3RhdHVzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtSHdQaGFzZUFsaWduU3RhdHVzKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IEREUiBwaGFzZSBjb250cm9sIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0RGRyUGhhc2VDb250cm9sKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBjb250cm9sIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtUGhhc2VDb250cm9sKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGNvdW50CisqCisqICBAbm90ZSAgICBJZiBIVyBmYWlscyB0byBwZXJmb3JtIHRoZSBwaGFzZSBhbGlnbm1lbnQsIGl0IHdpbGwgdHJpZ2dlcgorKiAgICAgICAgICAgYSBERFIgcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgaW50ZXJydXB0LgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduVGltZW91dCh1aW50MzJfdCBidXNDeWNsZQkvKiBUaW1lb3V0IGluIGJ1cyBjeWNsZSAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBWUE0gcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgY291bnQKKyoKKyogIEBub3RlICAgIElmIEhXIGZhaWxzIHRvIHBlcmZvcm0gdGhlIHBoYXNlIGFsaWdubWVudCwgaXQgd2lsbCB0cmlnZ2VyCisqICAgICAgICAgICBhIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0KHVpbnQzMl90IGJ1c0N5Y2xlCS8qIFRpbWVvdXQgaW4gYnVzIGN5Y2xlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEREUiBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQgZW5hYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RW5hYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgVlBNIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBlbmFibGUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRFbmFibGUodm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBERFIgcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgaW50ZXJydXB0IGRpc2FibGUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHREaXNhYmxlKHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgVlBNIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBkaXNhYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RGlzYWJsZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFyIEREUiBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcih2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFyIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcih2b2lkKTsKKworLyogLS0tLSBQcml2YXRlIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2VuZGlmIC8qIENISVBDX0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X2lubGluZS5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzg4MzNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaApAQCAtMCwwICsxLDE2NzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgQ0hJUENfSU5MSU5FX0gKKyNkZWZpbmUgQ0hJUENfSU5MSU5FX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxjc3AvZXJybm8uaD4KKyNpbmNsdWRlIDxjc3AvcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19yZWcuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jaGlwY0h3X2RlZi5oPgorCisvKiAtLS0tIFByaXZhdGUgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3R5cGVkZWYgZW51bSB7CisJY2hpcGNId19PUFRZUEVfQllQQVNTLAkvKiBCeXBhc3Mgb3BlcmF0aW9uICovCisJY2hpcGNId19PUFRZUEVfT1VUUFVUCS8qIE91dHB1dCBvcGVyYXRpb24gKi8KK30gY2hpcGNId19PUFRZUEVfZTsKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQcml2YXRlIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRDbG9jayhjaGlwY0h3X0NMT0NLX2UgY2xvY2ssCisJCQkJICAgIGNoaXBjSHdfT1BUWVBFX2UgdHlwZSwgaW50IG1vZGUpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE51bWVyaWMgQ2hpcCBJRAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIENoaXAgSUQgdGhhdCBpbmNsdWRlcyB0aGUgcmV2aXNvbiBudW1iZXIKKyoKKyogIEByZXR1cm4gIENvbXBsZXRlIG51bWVyaWMgQ2hpcCBJRAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldENoaXBJZCh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+Q2hpcElkOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlIFNwcmVhZCBTcGVjdHJ1bQorKgorKiAgQG5vdGUgY2hpcGNId19Jbml0KCkgbXVzdCBiZSBjYWxsZWQgZWFybGllcgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZW5hYmxlU3ByZWFkU3BlY3RydW0odm9pZCkKK3sKKwlpZiAoKHBDaGlwY0h3LT4KKwkgICAgIFBMTFByZURpdmlkZXIgJiBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfTUFTSykgIT0KKwkgICAgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX0lOVEVHRVIpIHsKKwkJZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHUC0+c3NDZmcgPQorCQkgICAgKDB4RkZGRiA8PCBkZHJjUmVnX1BIWV9BRERSX1NTX0NGR19ORElWX0FNUExJVFVERV9TSElGVCkgfAorCQkgICAgKGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX01JTl9DWUNMRV9QRVJfVElDSyA8PAorCQkgICAgIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX0NZQ0xFX1BFUl9USUNLX1NISUZUKTsKKwkJZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHUC0+c3NDdGwgfD0KKwkJICAgIGRkcmNSZWdfUEhZX0FERFJfU1NfQ1RSTF9FTkFCTEU7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZSBTcHJlYWQgU3BlY3RydW0KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rpc2FibGVTcHJlYWRTcGVjdHJ1bSh2b2lkKQoreworCWRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFR1AtPnNzQ3RsICY9IH5kZHJjUmVnX1BIWV9BRERSX1NTX0NUUkxfRU5BQkxFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IENoaXAgUHJvZHVjdCBJRAorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIENoaXAgUHJvZHVjdCBJRAorKgorKiAgQHJldHVybiAgQ2hpcCBQcm9kdWN0IElECisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0Q2hpcFByb2R1Y3RJZCh2b2lkKQoreworCXJldHVybiAocENoaXBjSHctPgorCQkgQ2hpcElkICYgY2hpcGNId19SRUdfQ0hJUElEX0JBU0VfTUFTSykgPj4KKwkJY2hpcGNId19SRUdfQ0hJUElEX0JBU0VfU0hJRlQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgcmV2aXNpb24gbnVtYmVyCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjaGlwCisqCisqICBAcmV0dXJuICBSZXZpc2lvbiBudW1iZXIKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19SRVZfTlVNQkVSX2UgY2hpcGNId19nZXRDaGlwUmV2aXNpb25OdW1iZXIodm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPkNoaXBJZCAmIGNoaXBjSHdfUkVHX0NISVBJRF9SRVZfTUFTSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgYnVzIGludGVyZmFjZSBjbG9jaworKgorKiAgRW5hYmxlcyAgYnVzIGludGVyZmFjZSBjbG9jayBvZiB2YXJpb3VzIGRldmljZQorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgdXNlIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYIGZvciBtYXNrCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0VuYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPkJ1c0ludGZDbG9jaywgbWFzayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEaXNhYmxlcyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBEaXNhYmxlcyAgYnVzIGludGVyZmFjZSBjbG9jayBvZiB2YXJpb3VzIGRldmljZQorKgorKiAgQHJldHVybiAgdm9pZAorKgorKiAgQG5vdGUgICAgdXNlIGNoaXBjSHdfUkVHX0JVU19DTE9DS19YWFhYCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19idXNJbnRlcmZhY2VDbG9ja0Rpc2FibGUodWludDMyX3QgbWFzaykKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+QnVzSW50ZkNsb2NrLCB+bWFzayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgc3RhdHVzIChlbmFibGVkL2Rpc2FibGVkKSBvZiBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN0YXR1cyBvZiBkZXZpY2VzJyBidXMgaW50ZXJmYWNlIGNsb2NrCisqCisqICBAcmV0dXJuICBCdXMgaW50ZXJmYWNlIGNsb2NrCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0QnVzSW50ZXJmYWNlQ2xvY2tTdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPkJ1c0ludGZDbG9jazsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZXMgdmFyaW91cyBhdWRpbyBjaGFubmVscworKgorKiAgRW5hYmxlcyBhdWRpbyBjaGFubmVsCisqCisqICBAcmV0dXJuICB2b2lkCisqCisqICBAbm90ZSAgICB1c2UgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2F1ZGlvQ2hhbm5lbEVuYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPkF1ZGlvRW5hYmxlLCBtYXNrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVzIHZhcmlvdXMgYXVkaW8gY2hhbm5lbHMKKyoKKyogIERpc2FibGVzIGF1ZGlvIGNoYW5uZWwKKyoKKyogIEByZXR1cm4gIHZvaWQKKyoKKyogIEBub3RlICAgIHVzZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfYXVkaW9DaGFubmVsRGlzYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9hbmQoJnBDaGlwY0h3LT5BdWRpb0VuYWJsZSwgfm1hc2spOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNvZnQgcmVzZXRzIGRldmljZXMKKyoKKyogIFNvZnQgcmVzZXRzIHZhcmlvdXMgZGV2aWNlcworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU09GVF9SRVNFVF9YWFhYWFggZGVmaW5lcworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdFJlc2V0KHVpbnQ2NF90IG1hc2spCit7CisJY2hpcGNId19zb2Z0UmVzZXRFbmFibGUobWFzayk7CisJY2hpcGNId19zb2Z0UmVzZXREaXNhYmxlKG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0UmVzZXREaXNhYmxlKHVpbnQ2NF90IG1hc2spCit7CisJdWludDMyX3QgY3RybDEgPSAodWludDMyX3QpIG1hc2s7CisJdWludDMyX3QgY3RybDIgPSAodWludDMyX3QpIChtYXNrID4+IDMyKTsKKworCS8qIERlYXNzZXJ0IG1vZHVsZSBzb2Z0IHJlc2V0ICovCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5Tb2Z0UmVzZXQxIF49IGN0cmwxOworCXBDaGlwY0h3LT5Tb2Z0UmVzZXQyIF49IChjdHJsMiAmICh+Y2hpcGNId19SRUdfU09GVF9SRVNFVF9VTkhPTERfTUFTSykpOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc29mdFJlc2V0RW5hYmxlKHVpbnQ2NF90IG1hc2spCit7CisJdWludDMyX3QgY3RybDEgPSAodWludDMyX3QpIG1hc2s7CisJdWludDMyX3QgY3RybDIgPSAodWludDMyX3QpIChtYXNrID4+IDMyKTsKKwl1aW50MzJfdCB1bmhvbGQgPSAwOworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5Tb2Z0UmVzZXQxIHw9IGN0cmwxOworCS8qIE1hc2sgb3V0IHVuaG9sZCByZXF1ZXN0IGJpdHMgKi8KKwlwQ2hpcGNIdy0+U29mdFJlc2V0MiB8PSAoY3RybDIgJiAofmNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVU5IT0xEX01BU0spKTsKKworCS8qIFByb2Nlc3MgdW5ob2xkIHJlcXVlc3RzICovCisJaWYgKGN0cmwyICYgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE1fR0xPQkFMX1VOSE9MRCkgeworCQl1bmhvbGQgPSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1ZQTV9HTE9CQUxfSE9MRDsKKwl9CisKKwlpZiAoY3RybDIgJiBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1ZQTV9VTkhPTEQpIHsKKwkJdW5ob2xkIHw9IGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVlBNX0hPTEQ7CisJfQorCisJaWYgKGN0cmwyICYgY2hpcGNId19SRUdfU09GVF9SRVNFVF9BUk1fVU5IT0xEKSB7CisJCXVuaG9sZCB8PSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0FSTV9IT0xEOworCX0KKworCWlmICh1bmhvbGQpIHsKKwkJLyogTWFrZSBzdXJlIHVuaG9sZCByZXF1ZXN0IGlzIGVmZmVjdGl2ZSAqLworCQlwQ2hpcGNIdy0+U29mdFJlc2V0MSAmPSB+dW5ob2xkOworCX0KKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgQ29uZmlndXJlcyBtaXNjIENISVAgZnVuY3Rpb25hbGl0eQorKgorKiAgQ29uZmlndXJlcyBDSElQIGZ1bmN0aW9uYWxpdHkKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sKHVpbnQzMl90IG1hc2spCit7CisJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5NaXNjQ3RybCwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X21pc2NDb250cm9sRGlzYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9hbmQoJnBDaGlwY0h3LT5NaXNjQ3RybCwgfm1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19taXNjQ29udHJvbEVuYWJsZSh1aW50MzJfdCBtYXNrKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPk1pc2NDdHJsLCBtYXNrKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBTZXQgT1RQIG9wdGlvbnMKKyoKKyogIFNldCBPVFAgb3B0aW9ucworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfT1RQX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0T1RQT3B0aW9uKHVpbnQ2NF90IG1hc2spCit7CisJdWludDMyX3QgY3RybDEgPSAodWludDMyX3QpIG1hc2s7CisJdWludDMyX3QgY3RybDIgPSAodWludDMyX3QpIChtYXNrID4+IDMyKTsKKworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlNvZnRPVFAxLCBjdHJsMSk7CisJcmVnMzJfbW9kaWZ5X29yKCZwQ2hpcGNIdy0+U29mdE9UUDIsIGN0cmwyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICBTdGlja3kgYml0IG9wdGlvbnMgb2YgdHlwZSBjaGlwY0h3X1JFR19TVElDS1lfWFhYWFhYCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0U3RpY2t5Qml0cyh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+U3RpY2t5OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgIFNldCBzdGlja3kgYml0cworKgorKiAgQHJldHVybiAgIHZvaWQKKyoKKyogIEBub3RlICAgICB1c2UgY2hpcGNId19SRUdfU1RJQ0tZX1hYWFhYWAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0U3RpY2t5Qml0cyh1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IGJpdHMgPSAwOworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCWlmIChtYXNrICYgY2hpcGNId19SRUdfU1RJQ0tZX1BPUl9CUk9NKSB7CisJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX1BPUl9CUk9NOworCX0gZWxzZSB7CisJCXVpbnQzMl90IHN0aWNreTsKKwkJc3RpY2t5ID0gcENoaXBjSHctPlN0aWNreTsKKworCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfQk9PVF9ET05FKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0JPT1RfRE9ORTsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzEpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMTsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8yKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzIpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMjsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzMpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMzsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF80KQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNDsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF81KQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzUpID09IDApIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNTsKKwkJfQorCX0KKwlwQ2hpcGNIdy0+U3RpY2t5ID0gYml0czsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICAgQ2xlYXIgc3RpY2t5IGJpdHMKKyoKKyogIEByZXR1cm4gICB2b2lkCisqCisqICBAbm90ZSAgICAgdXNlIGNoaXBjSHdfUkVHX1NUSUNLWV9YWFhYWFgKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2NsZWFyU3RpY2t5Qml0cyh1aW50MzJfdCBtYXNrKQoreworCXVpbnQzMl90IGJpdHMgPSAwOworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCWlmIChtYXNrICYKKwkgICAgKGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUgfCBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xIHwKKwkgICAgIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzIgfCBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zIHwKKwkgICAgIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQgfCBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF81KSkgeworCQl1aW50MzJfdCBzdGlja3kgPSBwQ2hpcGNIdy0+U3RpY2t5OworCisJCWlmICgobWFzayAmIGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUpCisJCSAgICAmJiAoc3RpY2t5ICYgY2hpcGNId19SRUdfU1RJQ0tZX0JPT1RfRE9ORSkpIHsKKwkJCWJpdHMgPSBjaGlwY0h3X1JFR19TVElDS1lfQk9PVF9ET05FOworCQkJbWFzayAmPSB+Y2hpcGNId19SRUdfU1RJQ0tZX0JPT1RfRE9ORTsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xKQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzEpKSB7CisJCQliaXRzIHw9IGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzE7CisJCQltYXNrICY9IH5jaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8xOworCQl9CisJCWlmICgobWFzayAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzIpCisJCSAgICAmJiAoc3RpY2t5ICYgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMikpIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMjsKKwkJCW1hc2sgJj0gfmNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzI7CisJCX0KKwkJaWYgKChtYXNrICYgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMykKKwkJICAgICYmIChzdGlja3kgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zKSkgeworCQkJYml0cyB8PSBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF8zOworCQkJbWFzayAmPSB+Y2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMzsKKwkJfQorCQlpZiAoKG1hc2sgJiBjaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF80KQorCQkgICAgJiYgKHN0aWNreSAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQpKSB7CisJCQliaXRzIHw9IGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzQ7CisJCQltYXNrICY9IH5jaGlwY0h3X1JFR19TVElDS1lfR0VORVJBTF80OworCQl9CisJCWlmICgobWFzayAmIGNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzUpCisJCSAgICAmJiAoc3RpY2t5ICYgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNSkpIHsKKwkJCWJpdHMgfD0gY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNTsKKwkJCW1hc2sgJj0gfmNoaXBjSHdfUkVHX1NUSUNLWV9HRU5FUkFMXzU7CisJCX0KKwl9CisJcENoaXBjSHctPlN0aWNreSA9IGJpdHMgfCBtYXNrOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBHZXQgc29mdHdhcmUgc3RyYXAgdmFsdWUKKyoKKyogIFJldHJpZXZlcyBzb2Z0d2FyZSBzdHJhcCB2YWx1ZQorKgorKiAgQHJldHVybiAgIFNvZnR3YXJlIHN0cmFwIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0U29mdFN0cmFwcyh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+U29mdFN0cmFwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBTZXQgc29mdHdhcmUgb3ZlcnJpZGUgc3RyYXAgb3B0aW9ucworKgorKiAgc2V0IHNvZnR3YXJlIG92ZXJyaWRlIHN0cmFwIG9wdGlvbnMKKyoKKyogIEByZXR1cm4gICBub3RoaW5nCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRTb2Z0U3RyYXBzKHVpbnQzMl90IHN0cmFwT3B0aW9ucykKK3sKKwlyZWczMl93cml0ZSgmcENoaXBjSHctPlNvZnRTdHJhcHMsIHN0cmFwT3B0aW9ucyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgUGluIFN0cmFwIE9wdGlvbnMKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmF3IGJvb3Qgc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgc3RyYXAgb3B0aW9ucworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFBpblN0cmFwcyh2b2lkKQoreworCXJldHVybiBwQ2hpcGNIdy0+UGluU3RyYXBzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZhbGlkIFN0cmFwIE9wdGlvbnMKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsaWQgcmF3IGJvb3Qgc3RyYXAgb3B0aW9ucworKgorKiAgQHJldHVybiAgc3RyYXAgb3B0aW9ucworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldFZhbGlkU3RyYXBzKHZvaWQpCit7CisJdWludDMyX3Qgc29mdFN0cmFwczsKKworCS8qCisJICoqIEFsd2F5cyByZXR1cm4gdGhlIFNvZnRTdHJhcHMgLSBib290Uk9NIGNhbGxzIGNoaXBjSHdfaW5pdFZhbGlkU3RyYXBzCisJICoqIHdoaWNoIGNvcGllcyBIVyBzdHJhcHMgdG8gc29mdCBzdHJhcHMgaWYgdGhlcmUgaXMgbm8gb3ZlcnJpZGUKKwkgKi8KKwlzb2Z0U3RyYXBzID0gY2hpcGNId19nZXRTb2Z0U3RyYXBzKCk7CisKKwlyZXR1cm4gc29mdFN0cmFwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgICBJbml0aWFsaXplIHZhbGlkIHBpbiBzdHJhcCBvcHRpb25zCisqCisqICBSZXRyaWV2ZXMgdmFsaWQgcGluIHN0cmFwIG9wdGlvbnMgYnkgY29weWluZyBIVyBzdHJhcCBvcHRpb25zIHRvIHNvZnQgcmVnaXN0ZXIKKyogIChpZiBjaGlwY0h3X1NUUkFQU19TT0ZUX09WRVJSSURFIG5vdCBzZXQpCisqCisqICBAcmV0dXJuICAgbm90aGluZworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfaW5pdFZhbGlkU3RyYXBzKHZvaWQpCit7CisJdWludDMyX3Qgc29mdFN0cmFwczsKKworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlzb2Z0U3RyYXBzID0gY2hpcGNId19nZXRTb2Z0U3RyYXBzKCk7CisKKwlpZiAoKHNvZnRTdHJhcHMgJiBjaGlwY0h3X1NUUkFQU19TT0ZUX09WRVJSSURFKSA9PSAwKSB7CisJCS8qIENvcHkgSFcgc3RyYXBzIHRvIHNvZnR3YXJlIHN0cmFwcyAqLworCQljaGlwY0h3X3NldFNvZnRTdHJhcHMoY2hpcGNId19nZXRQaW5TdHJhcHMoKSk7CisJfQorCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBib290IGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBkZXZpY2UgdHlwZSB1c2VkIGluIGJvb3RpbmcgdGhlIHN5c3RlbQorKgorKiAgQHJldHVybiAgQm9vdCBkZXZpY2Ugb2YgdHlwZSBjaGlwY0h3X0JPT1RfREVWSUNFCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGNoaXBjSHdfQk9PVF9ERVZJQ0VfZSBjaGlwY0h3X2dldEJvb3REZXZpY2Uodm9pZCkKK3sKKwlyZXR1cm4gY2hpcGNId19nZXRWYWxpZFN0cmFwcygpICYgY2hpcGNId19TVFJBUFNfQk9PVF9ERVZJQ0VfTUFTSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBib290IG1vZGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgd2F5IHRoZSBzeXN0ZW0gd2FzIGJvb3RlZAorKgorKiAgQHJldHVybiAgQm9vdCBtb2RlIG9mIHR5cGUgY2hpcGNId19CT09UX01PREUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19CT09UX01PREVfZSBjaGlwY0h3X2dldEJvb3RNb2RlKHZvaWQpCit7CisJcmV0dXJuIGNoaXBjSHdfZ2V0VmFsaWRTdHJhcHMoKSAmIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9NQVNLOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE5BTkQgZmxhc2ggcGFnZSBzaXplCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIE5BTkQgZGV2aWNlIHBhZ2Ugc2l6ZQorKgorKiAgQHJldHVybiAgQm9vdCBOQU5EIGRldmljZSBwYWdlIHNpemUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgY2hpcGNId19OQU5EX1BBR0VTSVpFX2UgY2hpcGNId19nZXROYW5kUGFnZVNpemUodm9pZCkKK3sKKwlyZXR1cm4gY2hpcGNId19nZXRWYWxpZFN0cmFwcygpICYgY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV9NQVNLOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IE5BTkQgZmxhc2ggYWRkcmVzcyBjeWNsZSBjb25maWd1cmF0aW9uCisqCisqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIE5BTkQgZmxhc2ggYWRkcmVzcyBjeWNsZSBjb25maWd1cmF0aW9uCisqCisqICBAcmV0dXJuICAwID0gRG8gbm90IGV4dHJhIGFkZHJlc3MgY3ljbGUsIDEgPSBBZGQgZXh0cmEgY3ljbGUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNoaXBjSHdfZ2V0TmFuZEV4dHJhQ3ljbGUodm9pZCkKK3sKKwlpZiAoY2hpcGNId19nZXRWYWxpZFN0cmFwcygpICYgY2hpcGNId19TVFJBUFNfTkFORF9FWFRSQV9DWUNMRSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBBY3RpdmF0ZXMgUElGIGludGVyZmFjZQorKgorKiAgVGhpcyBmdW5jdGlvbiBhY3RpdmF0ZXMgUElGIGludGVyZmFjZSBieSB0YWtpbmcgY29udHJvbCBvZiBMQ0QgcGlucworKgorKiAgQG5vdGUKKyogICAgICAgV2hlbiBhY3RpdmF0ZWQsIExDRCBwaW5zIHdpbGwgYmUgZGVmaW5lZCBhcyBmb2xsb3dzIGZvciBQSUYgb3BlcmF0aW9uCisqCisqICAgICAgIENMRFsxNzowXSAgPSBwaWZfZGF0YVsxNzowXQorKiAgICAgICBDTERbMjM6MThdID0gcGlmX2FkZHJlc3NbNTowXQorKiAgICAgICBDTFBPV0VSICAgID0gcGlmX3dyX3N0cgorKiAgICAgICBDTENQICAgICAgID0gcGlmX3JkX3N0cgorKiAgICAgICBDTEFDICAgICAgID0gcGlmX2hhdDEKKyogICAgICAgQ0xGUCAgICAgICA9IHBpZl9ocmR5MQorKiAgICAgICBDTExQICAgICAgID0gcGlmX2hhdDIKKyogICAgICAgR1BJT1s0Ml0gICA9IHBpZl9ocmR5MgorKgorKiAgICAgICBJbiBQSUYgbW9kZSwgInBpZl9ocmR5MiIgb3ZlcnJpZGVzIG90aGVyIHNoYXJlZCBmdW5jdGlvbiBmb3IgR1BJT1s0Ml0gcGluCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19hY3RpdmF0ZVBpZkludGVyZmFjZSh2b2lkKQoreworCXJlZzMyX3dyaXRlKCZwQ2hpcGNIdy0+TGNkUGlmTW9kZSwgY2hpcGNId19SRUdfUElGX1BJTl9FTkFCTEUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gYWN0aXZhdGVzIExDRCBpbnRlcmZhY2UKKyoKKyogIEBub3RlCisqICAgICAgIFdoZW4gYWN0aXZhdGVkLCBMQ0QgcGlucyB3aWxsIGJlIGRlZmluZWQgYXMgZm9sbG93cworKgorKiAgICAgICBDTERbMTc6MF0gID0gTENEIGRhdGEKKyogICAgICAgQ0xEWzIzOjE4XSA9IExDRCBkYXRhCisqICAgICAgIENMUE9XRVIgICAgPSBMQ0QgcG93ZXIKKyogICAgICAgQ0xDUCAgICAgICA9CisqICAgICAgIENMQUMgICAgICAgPSBMQ0QgYWNrCisqICAgICAgIENMRlAgICAgICAgPQorKiAgICAgICBDTExQICAgICAgID0KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2FjdGl2YXRlTGNkSW50ZXJmYWNlKHZvaWQpCit7CisJcmVnMzJfd3JpdGUoJnBDaGlwY0h3LT5MY2RQaWZNb2RlLCBjaGlwY0h3X1JFR19MQ0RfUElOX0VOQUJMRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBEZWFjdGl2YXRlcyBQSUYvTENEIGludGVyZmFjZQorKgorKiAgVGhpcyBmdW5jdGlvbiBkZWFjdGl2YXRlcyBQSUYvTENEIGludGVyZmFjZQorKgorKiAgQG5vdGUKKyogICAgICAgV2hlbiBkZWFjdGl2YXRlZCBMQ0QgcGlucyB3aWxsIGJlIGluIHJ0aS1zdGF0ZWQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RlYWN0aXZhdGVQaWZMY2RJbnRlcmZhY2Uodm9pZCkKK3sKKwlyZWczMl93cml0ZSgmcENoaXBjSHctPkxjZFBpZk1vZGUsIDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2VsZWN0IEdFMgorKgorKiAgVGhpcyBmdW5jdGlvbiBzZWxlY3QgR0UyIGFzIHRoZSBncmFwaGljIGVuZ2luZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2VsZWN0R0UyKHZvaWQpCit7CisJcmVnMzJfbW9kaWZ5X2FuZCgmcENoaXBjSHctPk1pc2NDdHJsLCB+Y2hpcGNId19SRUdfTUlTQ19DVFJMX0dFX1NFTCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZWxlY3QgR0UzCisqCisqICBUaGlzIGZ1bmN0aW9uIHNlbGVjdCBHRTMgYXMgdGhlIGdyYXBoaWMgZW5naW5lCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZWxlY3RHRTModm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfb3IoJnBDaGlwY0h3LT5NaXNjQ3RybCwgY2hpcGNId19SRUdfTUlTQ19DVFJMX0dFX1NFTCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgdG8ga25vdyB0aGUgY29uZmlndXJhdGlvbiBvZiBHUElPIHBpbgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBjaGlwY0h3X0dQSU9fRlVOQ1RJT05fZSBjaGlwY0h3X2dldEdwaW9QaW5GdW5jdGlvbihpbnQgcGluKQoreworCXJldHVybiAoKigodWludDMyX3QgKikgY2hpcGNId19SRUdfR1BJT19NVVgocGluKSkgJgorCQkoY2hpcGNId19SRUdfR1BJT19NVVhfTUFTSyA8PAorCQkgY2hpcGNId19SRUdfR1BJT19NVVhfUE9TSVRJT04ocGluKSkpID4+CisJICAgIGNoaXBjSHdfUkVHX0dQSU9fTVVYX1BPU0lUSU9OKHBpbik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDb25maWd1cmUgR1BJTyBwaW4gZnVuY3Rpb24KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldEdwaW9QaW5GdW5jdGlvbihpbnQgcGluLAorCQkJCQkgICAgICBjaGlwY0h3X0dQSU9fRlVOQ1RJT05fZSBmdW5jKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19HUElPX01VWChwaW4pKSAmPQorCSAgICB+KGNoaXBjSHdfUkVHX0dQSU9fTVVYX01BU0sgPDwgY2hpcGNId19SRUdfR1BJT19NVVhfUE9TSVRJT04ocGluKSk7CisJKigodWludDMyX3QgKikgY2hpcGNId19SRUdfR1BJT19NVVgocGluKSkgfD0KKwkgICAgZnVuYyA8PCBjaGlwY0h3X1JFR19HUElPX01VWF9QT1NJVElPTihwaW4pOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBQaW4gc2xldyByYXRlCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHNsZXcgb2YgaW5kaXZpZHVhbCBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpblNsZXdSYXRlKHVpbnQzMl90IHBpbiwKKwkJCQkJICBjaGlwY0h3X1BJTl9TTEVXX1JBVEVfZSBzbGV3UmF0ZSkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJKigodWludDMyX3QgKikgY2hpcGNId19SRUdfU0xFV19SQVRFKHBpbikpICY9CisJICAgIH4oY2hpcGNId19SRUdfU0xFV19SQVRFX01BU0sgPDwKKwkgICAgICBjaGlwY0h3X1JFR19TTEVXX1JBVEVfUE9TSVRJT04ocGluKSk7CisJKigodWludDMyX3QgKikgY2hpcGNId19SRUdfU0xFV19SQVRFKHBpbikpIHw9CisJICAgICh1aW50MzJfdCkgc2xld1JhdGUgPDwgY2hpcGNId19SRUdfU0xFV19SQVRFX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFBpbiBvdXRwdXQgZHJpdmUgY3VycmVudAorKgorKiAgVGhpcyBmdW5jdGlvbiBzZXRzIG91dHB1dCBkcml2ZSBjdXJyZW50IG9mIGluZGl2aWR1YWwgcGluCisqCisqICBOb3RlOiBBdm9pZCB0aGUgdXNlIG9mIHRoZSB3b3JkICdjdXJyZW50JyBzaW5jZSBsaW51eCBoZWFkZXJzIGRlZmluZSB0aGlzCisqICAgICAgICB0byBiZSB0aGUgY3VycmVudCB0YXNrLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0UGluT3V0cHV0Q3VycmVudCh1aW50MzJfdCBwaW4sCisJCQkJCSAgICAgICBjaGlwY0h3X1BJTl9DVVJSRU5UX1NUUkVOR1RIX2UKKwkJCQkJICAgICAgIGN1cnIpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCSooKHVpbnQzMl90ICopIGNoaXBjSHdfUkVHX0NVUlJFTlQocGluKSkgJj0KKwkgICAgfihjaGlwY0h3X1JFR19DVVJSRU5UX01BU0sgPDwgY2hpcGNId19SRUdfQ1VSUkVOVF9QT1NJVElPTihwaW4pKTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19DVVJSRU5UKHBpbikpIHw9CisJICAgICh1aW50MzJfdCkgY3VyciA8PCBjaGlwY0h3X1JFR19DVVJSRU5UX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFBpbiBwdWxsdXAgcmVnaXN0ZXIKKyoKKyogIFRoaXMgZnVuY3Rpb24gc2V0cyBwdWxsdXAgcmVnaXN0ZXIgb2YgaW5kaXZpZHVhbCBwaW4KKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3NldFBpblB1bGx1cCh1aW50MzJfdCBwaW4sIGNoaXBjSHdfUElOX1BVTExfZSBwdWxsdXApCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCSooKHVpbnQzMl90ICopIGNoaXBjSHdfUkVHX1BVTExVUChwaW4pKSAmPQorCSAgICB+KGNoaXBjSHdfUkVHX1BVTExVUF9NQVNLIDw8IGNoaXBjSHdfUkVHX1BVTExVUF9QT1NJVElPTihwaW4pKTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19QVUxMVVAocGluKSkgfD0KKwkgICAgKHVpbnQzMl90KSBwdWxsdXAgPDwgY2hpcGNId19SRUdfUFVMTFVQX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFBpbiBpbnB1dCB0eXBlCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgaW5wdXQgdHlwZSBvZiBpbmRpdmlkdWFsIHBpbgorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0UGluSW5wdXRUeXBlKHVpbnQzMl90IHBpbiwKKwkJCQkJICAgY2hpcGNId19QSU5fSU5QVVRUWVBFX2UgaW5wdXRUeXBlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19JTlBVVFRZUEUocGluKSkgJj0KKwkgICAgfihjaGlwY0h3X1JFR19JTlBVVFRZUEVfTUFTSyA8PAorCSAgICAgIGNoaXBjSHdfUkVHX0lOUFVUVFlQRV9QT1NJVElPTihwaW4pKTsKKwkqKCh1aW50MzJfdCAqKSBjaGlwY0h3X1JFR19JTlBVVFRZUEUocGluKSkgfD0KKwkgICAgKHVpbnQzMl90KSBpbnB1dFR5cGUgPDwgY2hpcGNId19SRUdfSU5QVVRUWVBFX1BPU0lUSU9OKHBpbik7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgUG93ZXIgdXAgdGhlIFVTQiBQSFkKKyoKKyogIFRoaXMgZnVuY3Rpb24gcG93ZXJzIHVwIHRoZSBVU0IgUEhZCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wb3dlclVwVXNiUGh5KHZvaWQpCit7CisJcmVnMzJfbW9kaWZ5X2FuZCgmcENoaXBjSHctPk1pc2NDdHJsLAorCQkJIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPTik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBQb3dlciBkb3duIHRoZSBVU0IgUEhZCisqCisqICBUaGlzIGZ1bmN0aW9uIHBvd2VycyBkb3duIHRoZSBVU0IgUEhZCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wb3dlckRvd25Vc2JQaHkodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfb3IoJnBDaGlwY0h3LT5NaXNjQ3RybCwKKwkJCWNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPRkYpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IHRoZSAybmQgVVNCIGFzIGhvc3QKKyoKKyogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgMm5kIFVTQiBhcyBob3N0CisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRVc2JIb3N0KHZvaWQpCit7CisJcmVnMzJfbW9kaWZ5X29yKCZwQ2hpcGNIdy0+TWlzY0N0cmwsCisJCQljaGlwY0h3X1JFR19NSVNDX0NUUkxfVVNCX01PREVfSE9TVCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBTZXQgdGhlIDJuZCBVU0IgYXMgZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIDJuZCBVU0IgYXMgZGV2aWNlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRVc2JEZXZpY2Uodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+TWlzY0N0cmwsCisJCQkgY2hpcGNId19SRUdfTUlTQ19DVFJMX1VTQl9NT0RFX0RFVklDRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBMb3dlciBsYXllciBmdW50aW9uIHRvIGVuYWJsZS9kaXNhYmxlIGEgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIGEgY29yZSBjbG9jaworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfc2V0Q2xvY2soY2hpcGNId19DTE9DS19lIGNsb2NrLAorCQkJCSAgICBjaGlwY0h3X09QVFlQRV9lIHR5cGUsIGludCBtb2RlKQoreworCXZvbGF0aWxlIHVpbnQzMl90ICpwUExMUmVnID0gKHVpbnQzMl90ICopIDB4MDsKKwl2b2xhdGlsZSB1aW50MzJfdCAqcENsb2NrQ3RybCA9ICh1aW50MzJfdCAqKSAweDA7CisKKwlzd2l0Y2ggKGNsb2NrKSB7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0REUjoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+RERSQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19BUk06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkFSTUNsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfRVNXOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5FU1dDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1ZQTToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+VlBNQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FU1cxMjU6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVTVzEyNUNsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVUFSVDoKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+VUFSVENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfU0RJTzA6CisJCXBQTExSZWcgPSAmcENoaXBjSHctPlNESU8wQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19TRElPMToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U0RJTzFDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1NQSToKKwkJcFBMTFJlZyA9ICZwQ2hpcGNIdy0+U1BJQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19FVE06CisJCXBQTExSZWcgPSAmcENoaXBjSHctPkVUTUNsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfVVNCOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5VU0JDbG9jazsKKwkJaWYgKHR5cGUgPT0gY2hpcGNId19PUFRZUEVfT1VUUFVUKSB7CisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCSB+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BPV0VSX0RPV04pOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCWNoaXBjSHdfUkVHX1BMTF9DTE9DS19QT1dFUl9ET1dOKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfTENEOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5MQ0RDbG9jazsKKwkJaWYgKHR5cGUgPT0gY2hpcGNId19PUFRZUEVfT1VUUFVUKSB7CisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCSB+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BPV0VSX0RPV04pOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCWNoaXBjSHdfUkVHX1BMTF9DTE9DS19QT1dFUl9ET1dOKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQVBNOgorCQlwUExMUmVnID0gJnBDaGlwY0h3LT5BUE1DbG9jazsKKwkJaWYgKHR5cGUgPT0gY2hpcGNId19PUFRZUEVfT1VUUFVUKSB7CisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCSB+Y2hpcGNId19SRUdfUExMX0NMT0NLX1BPV0VSX0RPV04pOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCWNoaXBjSHdfUkVHX1BMTF9DTE9DS19QT1dFUl9ET1dOKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5BQ0xLQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19PVFA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPk9UUENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJDOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5JMkNDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX0kyUzA6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkkyUzBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1JUQlVTOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5SVEJVU0Nsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfQVBNMTAwOgorCQlwQ2xvY2tDdHJsID0gJnBDaGlwY0h3LT5BUE0xMDBDbG9jazsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0NMT0NLX1RTQzoKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+VFNDQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgY2hpcGNId19DTE9DS19MRUQ6CisJCXBDbG9ja0N0cmwgPSAmcENoaXBjSHctPkxFRENsb2NrOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfQ0xPQ0tfSTJTMToKKwkJcENsb2NrQ3RybCA9ICZwQ2hpcGNIdy0+STJTMUNsb2NrOworCQlicmVhazsKKwl9CisKKwlpZiAocFBMTFJlZykgeworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBjaGlwY0h3X09QVFlQRV9PVVRQVVQ6CisJCQkvKiBQTEwgY2xvY2sgb3V0cHV0IGVuYWJsZS9kaXNhYmxlICovCisJCQlpZiAobW9kZSkgeworCQkJCWlmIChjbG9jayA9PSBjaGlwY0h3X0NMT0NLX0REUikgeworCQkJCQkvKiBERFIgY2xvY2sgZW5hYmxlIGlzIGludmVydGVkICovCisJCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCQkgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19PVVRQVVRfRU5BQkxFKTsKKwkJCQl9IGVsc2UgeworCQkJCQlyZWczMl9tb2RpZnlfb3IocFBMTFJlZywKKwkJCQkJCQljaGlwY0h3X1JFR19QTExfQ0xPQ0tfT1VUUFVUX0VOQUJMRSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2xvY2sgPT0gY2hpcGNId19DTE9DS19ERFIpIHsKKwkJCQkJLyogRERSIGNsb2NrIGRpc2FibGUgaXMgaW52ZXJ0ZWQgKi8KKwkJCQkJcmVnMzJfbW9kaWZ5X29yKHBQTExSZWcsCisJCQkJCQkJY2hpcGNId19SRUdfUExMX0NMT0NLX09VVFBVVF9FTkFCTEUpOworCQkJCX0gZWxzZSB7CisJCQkJCXJlZzMyX21vZGlmeV9hbmQocFBMTFJlZywKKwkJCQkJCQkgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19PVVRQVVRfRU5BQkxFKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBjaGlwY0h3X09QVFlQRV9CWVBBU1M6CisJCQkvKiBQTEwgY2xvY2sgYnlwYXNzIGVuYWJsZS9kaXNhYmxlICovCisJCQlpZiAobW9kZSkgeworCQkJCXJlZzMyX21vZGlmeV9vcihwUExMUmVnLAorCQkJCQkJY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QpOworCQkJfSBlbHNlIHsKKwkJCQlyZWczMl9tb2RpZnlfYW5kKHBQTExSZWcsCisJCQkJCQkgfmNoaXBjSHdfUkVHX1BMTF9DTE9DS19CWVBBU1NfU0VMRUNUKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChwQ2xvY2tDdHJsKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIGNoaXBjSHdfT1BUWVBFX09VVFBVVDoKKwkJCWlmIChtb2RlKSB7CisJCQkJcmVnMzJfbW9kaWZ5X29yKHBDbG9ja0N0cmwsCisJCQkJCQljaGlwY0h3X1JFR19ESVZfQ0xPQ0tfT1VUUFVUX0VOQUJMRSk7CisJCQl9IGVsc2UgeworCQkJCXJlZzMyX21vZGlmeV9hbmQocENsb2NrQ3RybCwKKwkJCQkJCSB+Y2hpcGNId19SRUdfRElWX0NMT0NLX09VVFBVVF9FTkFCTEUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgY2hpcGNId19PUFRZUEVfQllQQVNTOgorCQkJaWYgKG1vZGUpIHsKKwkJCQlyZWczMl9tb2RpZnlfb3IocENsb2NrQ3RybCwKKwkJCQkJCWNoaXBjSHdfUkVHX0RJVl9DTE9DS19CWVBBU1NfU0VMRUNUKTsKKwkJCX0gZWxzZSB7CisJCQkJcmVnMzJfbW9kaWZ5X2FuZChwQ2xvY2tDdHJsLAorCQkJCQkJIH5jaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGVzIGEgY29yZSBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIGEgY29yZSBjbG9jaworKgorKiAgQG5vdGUgICAgbm8gY2hhbmdlIGluIHBvd2VyIGNvbnN1bXB0aW9uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRDbG9ja0Rpc2FibGUoY2hpcGNId19DTE9DS19lIGNsb2NrKQoreworCisJLyogRGlzYWJsZSBvdXRwdXQgb2YgdGhlIGNsb2NrICovCisJY2hpcGNId19zZXRDbG9jayhjbG9jaywgY2hpcGNId19PUFRZUEVfT1VUUFVULCAwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBhIGNvcmUgY2xvY2sgb2YgYSBjZXJ0YWluIGRldmljZQorKgorKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIGEgY29yZSBjbG9jaworKgorKiAgQG5vdGUgICAgbm8gY2hhbmdlIGluIHBvd2VyIGNvbnN1bXB0aW9uCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zZXRDbG9ja0VuYWJsZShjaGlwY0h3X0NMT0NLX2UgY2xvY2spCit7CisKKwkvKiBFbmFibGUgb3V0cHV0IG9mIHRoZSBjbG9jayAqLworCWNoaXBjSHdfc2V0Q2xvY2soY2xvY2ssIGNoaXBjSHdfT1BUWVBFX09VVFBVVCwgMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBFbmFibGVzIGJ5cGFzcyBjbG9jayBvZiBhIGNlcnRhaW4gZGV2aWNlCisqCisqICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYnlwYXNzIGNsb2NrCisqCisqICBAbm90ZSAgICBEb2Vzbm90IGFmZmVjdCB0aGUgYnVzIGludGVyZmFjZSBjbG9jaworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfYnlwYXNzQ2xvY2tFbmFibGUoY2hpcGNId19DTE9DS19lIGNsb2NrKQoreworCS8qIEVuYWJsZSBieXBhc3MgY2xvY2sgKi8KKwljaGlwY0h3X3NldENsb2NrKGNsb2NrLCBjaGlwY0h3X09QVFlQRV9CWVBBU1MsIDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZWQgYnlwYXNzIGNsb2NrIG9mIGEgY2VydGFpbiBkZXZpY2UKKyoKKyogIFRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgYnlwYXNzIGNsb2NrCisqCisqICBAbm90ZSAgICBEb2Vzbm90IGFmZmVjdCB0aGUgYnVzIGludGVyZmFjZSBjbG9jaworKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfYnlwYXNzQ2xvY2tEaXNhYmxlKGNoaXBjSHdfQ0xPQ0tfZSBjbG9jaykKK3sKKwkvKiBEaXNhYmxlIGJ5cGFzcyBjbG9jayAqLworCWNoaXBjSHdfc2V0Q2xvY2soY2xvY2ssIGNoaXBjSHdfT1BUWVBFX0JZUEFTUywgMCk7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBDaGVja3MgaWYgc29mdHdhcmUgc3RyYXAgaXMgZW5hYmxlZAorICoKKyAqICAgQHJldHVybiAxIDogV2hlbiBlbmFibGUKKyAqICAgICAgICAgICAwIDogV2hlbiBkaXNhYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19pc1NvZnR3YXJlU3RyYXBzRW5hYmxlKHZvaWQpCit7CisJcmV0dXJuIHBDaGlwY0h3LT5Tb2Z0U3RyYXBzICYgMHgwMDAwMDAwMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBFbmFibGUgc29mdHdhcmUgc3RyYXAKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0d2FyZVN0cmFwc0VuYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlNvZnRTdHJhcHMsIDB4MDAwMDAwMDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIERpc2FibGUgc29mdHdhcmUgc3RyYXAKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19zb2Z0d2FyZVN0cmFwc0Rpc2FibGUodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+U29mdFN0cmFwcywgKH4weDAwMDAwMDAxKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgUExMIHRlc3QgZW5hYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsVGVzdEVuYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlBMTENvbmZpZywKKwkJCWNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9FTkFCTEUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTDIgdGVzdCBlbmFibGUKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyVGVzdEVuYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9vcigmcENoaXBjSHctPlBMTENvbmZpZzIsCisJCQljaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwgdGVzdCBkaXNhYmxlCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsVGVzdERpc2FibGUodm9pZCkKK3sKKwlyZWczMl9tb2RpZnlfYW5kKCZwQ2hpcGNIdy0+UExMQ29uZmlnLAorCQkJIH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwyIHRlc3QgZGlzYWJsZQorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbDJUZXN0RGlzYWJsZSh2b2lkKQoreworCXJlZzMyX21vZGlmeV9hbmQoJnBDaGlwY0h3LT5QTExDb25maWcyLAorCQkJIH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBHZXQgUExMIHRlc3Qgc3RhdHVzCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgY2hpcGNId19pc1BsbFRlc3RFbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPlBMTENvbmZpZyAmIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9FTkFCTEU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgR2V0IFBMTDIgdGVzdCBzdGF0dXMKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGludCBjaGlwY0h3X2lzUGxsMlRlc3RFbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gcENoaXBjSHctPlBMTENvbmZpZzIgJiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfRU5BQkxFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIFBMTCB0ZXN0IHNlbGVjdAorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3BsbFRlc3RTZWxlY3QodWludDMyX3QgdmFsKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+UExMQ29uZmlnICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX01BU0s7CisJcENoaXBjSHctPlBMTENvbmZpZyB8PQorCSAgICAodmFsKSA8PCBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX1NISUZUOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogIEBicmllZiBQTEwyIHRlc3Qgc2VsZWN0CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsMlRlc3RTZWxlY3QodWludDMyX3QgdmFsKQoreworCisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5QTExDb25maWcyICY9IH5jaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX01BU0s7CisJcENoaXBjSHctPlBMTENvbmZpZzIgfD0KKwkgICAgKHZhbCkgPDwgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX1NFTEVDVF9TSElGVDsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYnJpZWYgR2V0IFBMTCB0ZXN0IHNlbGVjdGVkIG9wdGlvbgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBjaGlwY0h3X2dldFBsbFRlc3RTZWxlY3RlZCh2b2lkKQoreworCXJldHVybiAodWludDhfdCkgKChwQ2hpcGNIdy0+CisJCQkgICBQTExDb25maWcgJiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX01BU0spCisJCQkgID4+IGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9TRUxFQ1RfU0hJRlQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiAgQGJyaWVmIEdldCBQTEwyIHRlc3Qgc2VsZWN0ZWQgb3B0aW9uCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50OF90IGNoaXBjSHdfZ2V0UGxsMlRlc3RTZWxlY3RlZCh2b2lkKQoreworCXJldHVybiAodWludDhfdCkgKChwQ2hpcGNIdy0+CisJCQkgICBQTExDb25maWcyICYgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX1NFTEVDVF9NQVNLKQorCQkJICA+PiBjaGlwY0h3X1JFR19QTExfQ09ORklHX1RFU1RfU0VMRUNUX1NISUZUKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgRGlzYWJsZSB0aGUgUExMMQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfcGxsMURpc2FibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPlBMTENvbmZpZyB8PSBjaGlwY0h3X1JFR19QTExfQ09ORklHX1BPV0VSX0RPV047CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBEaXNhYmxlIHRoZSBQTEwyCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19wbGwyRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+UExMQ29uZmlnMiB8PSBjaGlwY0h3X1JFR19QTExfQ09ORklHX1BPV0VSX0RPV047CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRW5hYmxlcyBERFIgU1cgcGhhc2UgYWxpZ25tZW50IGludGVycnVwdAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyUGhhc2VBbGlnbkludGVycnVwdEVuYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+U3BhcmUxIHw9IGNoaXBjSHdfUkVHX1NQQVJFMV9ERFJfUEhBU0VfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRGlzYWJsZXMgRERSIFNXIHBoYXNlIGFsaWdubWVudCBpbnRlcnJ1cHQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2RkclBoYXNlQWxpZ25JbnRlcnJ1cHREaXNhYmxlKHZvaWQpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5TcGFyZTEgJj0gfmNoaXBjSHdfUkVHX1NQQVJFMV9ERFJfUEhBU0VfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFZQTSBTVyBwaGFzZSBhbGlnbm1lbnQgaW50ZXJydXB0IG1vZGUKKyoKKyogIFRoaXMgZnVuY3Rpb24gc2V0cyBWUE0gcGhhc2UgYWxpZ25tZW50IGludGVycnVwdAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkCitjaGlwY0h3X3ZwbVBoYXNlQWxpZ25JbnRlcnJ1cHRNb2RlKGNoaXBjSHdfVlBNX0hXX1BIQVNFX0lOVFJfZSBtb2RlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlpZiAobW9kZSA9PSBjaGlwY0h3X1ZQTV9IV19QSEFTRV9JTlRSX0RJU0FCTEUpIHsKKwkJcENoaXBjSHctPlNwYXJlMSAmPSB+Y2hpcGNId19SRUdfU1BBUkUxX1ZQTV9QSEFTRV9JTlRSX0VOQUJMRTsKKwl9IGVsc2UgeworCQlwQ2hpcGNIdy0+U3BhcmUxIHw9IGNoaXBjSHdfUkVHX1NQQVJFMV9WUE1fUEhBU0VfSU5UUl9FTkFCTEU7CisJfQorCXBDaGlwY0h3LT5WUE1QaGFzZUN0cmwyID0KKwkgICAgKHBDaGlwY0h3LT4KKwkgICAgIFZQTVBoYXNlQ3RybDIgJiB+KGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFTEVDVF9NQVNLIDw8CisJCQkgICAgICAgY2hpcGNId19SRUdfVlBNX0lOVFJfU0VMRUNUX1NISUZUKSkgfCBtb2RlOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBERFIgcGhhc2UgYWxpZ25tZW50IGluIHNvZnR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJTd1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPkREUlBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfRERSX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgRERSIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRyU3dQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfRERSX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBERFIgcGhhc2UgYWxpZ25tZW50IGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPkREUlBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfRERSX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgRERSIHBoYXNlIGFsaWdubWVudCBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfRERSX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBWUE0gcGhhc2UgYWxpZ25tZW50IGluIHNvZnR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Td1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfVlBNX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBzb2Z0d2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtU3dQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfVlBNX1NXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEVuYWJsZSBWUE0gcGhhc2UgYWxpZ25tZW50IGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25FbmFibGUodm9pZCkKK3sKKwlSRUdfTE9DQUxfSVJRX1NBVkU7CisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDEgfD0gY2hpcGNId19SRUdfVlBNX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIERpc2FibGUgVlBNIHBoYXNlIGFsaWdubWVudCBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfdnBtSHdQaGFzZUFsaWduRGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMSAmPSB+Y2hpcGNId19SRUdfVlBNX0hXX1BIQVNFX0NUUkxfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFNldCBERFIgcGhhc2UgYWxpZ25tZW50IG1hcmdpbiBpbiBoYXJkd2FyZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkCitjaGlwY0h3X3NldERkckh3UGhhc2VBbGlnbk1hcmdpbihjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fZSBtYXJnaW4pCit7CisJdWludDMyX3QgZ2UgPSAwOworCXVpbnQzMl90IGxlID0gMDsKKworCXN3aXRjaCAobWFyZ2luKSB7CisJY2FzZSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fU1RSSUNUOgorCQlnZSA9IDB4MEY7CisJCWxlID0gMHgwRjsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fTUVESVVNOgorCQlnZSA9IDB4MDM7CisJCWxlID0gMHgzRjsKKwkJYnJlYWs7CisJY2FzZSBjaGlwY0h3X0REUl9IV19QSEFTRV9NQVJHSU5fV0lERToKKwkJZ2UgPSAweDAxOworCQlsZSA9IDB4N0Y7CisJCWJyZWFrOworCX0KKworCXsKKwkJUkVHX0xPQ0FMX0lSUV9TQVZFOworCisJCXBDaGlwY0h3LT5ERFJQaGFzZUN0cmwxICY9CisJCSAgICB+KChjaGlwY0h3X1JFR19ERFJfUEhBU0VfVkFMVUVfR0VfTUFTSyA8PAorCQkgICAgICAgY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0dFX1NISUZUKQorCQkgICAgICB8fCAoY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0xFX01BU0sgPDwKKwkJCSAgY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0xFX1NISUZUKSk7CisKKwkJcENoaXBjSHctPkREUlBoYXNlQ3RybDEgfD0KKwkJICAgICgoZ2UgPDwgY2hpcGNId19SRUdfRERSX1BIQVNFX1ZBTFVFX0dFX1NISUZUKQorCQkgICAgIHx8IChsZSA8PCBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVkFMVUVfTEVfU0hJRlQpKTsKKworCQlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgU2V0IFZQTSBwaGFzZSBhbGlnbm1lbnQgbWFyZ2luIGluIGhhcmR3YXJlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQKK2NoaXBjSHdfc2V0VnBtSHdQaGFzZUFsaWduTWFyZ2luKGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9lIG1hcmdpbikKK3sKKwl1aW50MzJfdCBnZSA9IDA7CisJdWludDMyX3QgbGUgPSAwOworCisJc3dpdGNoIChtYXJnaW4pIHsKKwljYXNlIGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9TVFJJQ1Q6CisJCWdlID0gMHgwRjsKKwkJbGUgPSAweDBGOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9NRURJVU06CisJCWdlID0gMHgwMzsKKwkJbGUgPSAweDNGOworCQlicmVhazsKKwljYXNlIGNoaXBjSHdfVlBNX0hXX1BIQVNFX01BUkdJTl9XSURFOgorCQlnZSA9IDB4MDE7CisJCWxlID0gMHg3RjsKKwkJYnJlYWs7CisJfQorCisJeworCQlSRUdfTE9DQUxfSVJRX1NBVkU7CisKKwkJcENoaXBjSHctPlZQTVBoYXNlQ3RybDEgJj0KKwkJICAgIH4oKGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9WQUxVRV9HRV9NQVNLIDw8CisJCSAgICAgICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfR0VfU0hJRlQpCisJCSAgICAgIHx8IChjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfTEVfTUFTSyA8PAorCQkJICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfTEVfU0hJRlQpKTsKKworCQlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMSB8PQorCQkgICAgKChnZSA8PCBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVkFMVUVfR0VfU0hJRlQpCisJCSAgICAgfHwgKGxlIDw8IGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9WQUxVRV9MRV9TSElGVCkpOworCisJCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBDaGVja3MgRERSIHBoYXNlIGFsaWduZWQgc3RhdHVzIGRvbmUgYnkgSFcKKyoKKyogIEByZXR1cm4gIDE6IFdoZW4gYWxpZ25lZAorKiAgICAgICAgICAgMDogV2hlbiBub3QgYWxpZ25lZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2lzRGRySHdQaGFzZUFsaWduZWQodm9pZCkKK3sKKwlyZXR1cm4gKHBDaGlwY0h3LT4KKwkJUGhhc2VBbGlnblN0YXR1cyAmIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9BTElHTkVEKSA/IDEgOiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2hlY2tzIFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqICBAcmV0dXJuICAxOiBXaGVuIGFsaWduZWQKKyogICAgICAgICAgIDA6IFdoZW4gbm90IGFsaWduZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19pc1ZwbUh3UGhhc2VBbGlnbmVkKHZvaWQpCit7CisJcmV0dXJuIChwQ2hpcGNIdy0+CisJCVBoYXNlQWxpZ25TdGF0dXMgJiBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQUxJR05FRCkgPyAxIDogMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBERFIgcGhhc2UgYWxpZ25lZCBzdGF0dXMgZG9uZSBieSBIVworKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBjaGlwY0h3X2dldERkckh3UGhhc2VBbGlnblN0YXR1cyh2b2lkKQoreworCXJldHVybiAocENoaXBjSHctPgorCQlQaGFzZUFsaWduU3RhdHVzICYgY2hpcGNId19SRUdfRERSX1BIQVNFX1NUQVRVU19NQVNLKSA+PgorCSAgICBjaGlwY0h3X1JFR19ERFJfUEhBU0VfU1RBVFVTX1NISUZUOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBhbGlnbmVkIHN0YXR1cyBkb25lIGJ5IEhXCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtSHdQaGFzZUFsaWduU3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIChwQ2hpcGNIdy0+CisJCVBoYXNlQWxpZ25TdGF0dXMgJiBjaGlwY0h3X1JFR19WUE1fUEhBU0VfU1RBVFVTX01BU0spID4+CisJICAgIGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9TVEFUVVNfU0hJRlQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBHZXQgRERSIHBoYXNlIGNvbnRyb2wgdmFsdWUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2hpcGNId19nZXREZHJQaGFzZUNvbnRyb2wodm9pZCkKK3sKKwlyZXR1cm4gKHBDaGlwY0h3LT4KKwkJUGhhc2VBbGlnblN0YXR1cyAmIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9DVFJMX01BU0spID4+CisJICAgIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9DVFJMX1NISUZUOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IFZQTSBwaGFzZSBjb250cm9sIHZhbHVlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNoaXBjSHdfZ2V0VnBtUGhhc2VDb250cm9sKHZvaWQpCit7CisJcmV0dXJuIChwQ2hpcGNIdy0+CisJCVBoYXNlQWxpZ25TdGF0dXMgJiBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQ1RSTF9NQVNLKSA+PgorCSAgICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQ1RSTF9TSElGVDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEREUiBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBjb3VudAorKgorKiAgQG5vdGUgICAgSWYgSFcgZmFpbHMgdG8gcGVyZm9ybSB0aGUgcGhhc2UgYWxpZ25tZW50LCBpdCB3aWxsIHRyaWdnZXIKKyogICAgICAgICAgIGEgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXQodWludDMyX3QgYnVzQ3ljbGUpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCXBDaGlwY0h3LT5ERFJQaGFzZUN0cmwyICY9CisJICAgIH4oY2hpcGNId19SRUdfRERSX1BIQVNFX1RJTUVPVVRfQ09VTlRfTUFTSyA8PAorCSAgICAgIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9USU1FT1VUX0NPVU5UX1NISUZUKTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMiB8PQorCSAgICAoYnVzQ3ljbGUgJiBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVElNRU9VVF9DT1VOVF9NQVNLKSA8PAorCSAgICBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVElNRU9VVF9DT1VOVF9TSElGVDsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBWUE0gcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgY291bnQKKyoKKyogIEBub3RlICAgIElmIEhXIGZhaWxzIHRvIHBlcmZvcm0gdGhlIHBoYXNlIGFsaWdubWVudCwgaXQgd2lsbCB0cmlnZ2VyCisqICAgICAgICAgICBhIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0KHVpbnQzMl90IGJ1c0N5Y2xlKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMiAmPQorCSAgICB+KGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9USU1FT1VUX0NPVU5UX01BU0sgPDwKKwkgICAgICBjaGlwY0h3X1JFR19WUE1fUEhBU0VfVElNRU9VVF9DT1VOVF9TSElGVCk7CisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDIgfD0KKwkgICAgKGJ1c0N5Y2xlICYgY2hpcGNId19SRUdfVlBNX1BIQVNFX1RJTUVPVVRfQ09VTlRfTUFTSykgPDwKKwkgICAgY2hpcGNId19SRUdfVlBNX1BIQVNFX1RJTUVPVVRfQ09VTlRfU0hJRlQ7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgQ2xlYXIgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdAorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduVGltZW91dEludGVycnVwdENsZWFyKHZvaWQpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCS8qIENsZWFyIHRpbWVvdXQgaW50ZXJydXB0IHNlcnZpY2UgYml0ICovCisJcENoaXBjSHctPkREUlBoYXNlQ3RybDIgfD0gY2hpcGNId19SRUdfRERSX0lOVFJfU0VSVklDRUQ7CisJcENoaXBjSHctPkREUlBoYXNlQ3RybDIgJj0gfmNoaXBjSHdfUkVHX0REUl9JTlRSX1NFUlZJQ0VEOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIENsZWFyIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGlwY0h3X3ZwbUh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcih2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwkvKiBDbGVhciB0aW1lb3V0IGludGVycnVwdCBzZXJ2aWNlIGJpdCAqLworCXBDaGlwY0h3LT5WUE1QaGFzZUN0cmwyIHw9IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFUlZJQ0VEOworCXBDaGlwY0h3LT5WUE1QaGFzZUN0cmwyICY9IH5jaGlwY0h3X1JFR19WUE1fSU5UUl9TRVJWSUNFRDsKKwlSRUdfTE9DQUxfSVJRX1JFU1RPUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgICBERFIgcGhhc2UgYWxpZ25tZW50IHRpbWVvdXQgaW50ZXJydXB0IGVuYWJsZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIGNoaXBjSHdfZGRySHdQaGFzZUFsaWduVGltZW91dEludGVycnVwdEVuYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwljaGlwY0h3X2Rkckh3UGhhc2VBbGlnblRpbWVvdXRJbnRlcnJ1cHRDbGVhcigpOwkvKiBSZWNvbW1lbmRlZCAqLworCS8qIEVuYWJsZSB0aW1lb3V0IGludGVycnVwdCAqLworCXBDaGlwY0h3LT5ERFJQaGFzZUN0cmwyIHw9IGNoaXBjSHdfUkVHX0REUl9USU1FT1VUX0lOVFJfRU5BQkxFOworCVJFR19MT0NBTF9JUlFfUkVTVE9SRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIFZQTSBwaGFzZSBhbGlnbm1lbnQgdGltZW91dCBpbnRlcnJ1cHQgZW5hYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RW5hYmxlKHZvaWQpCit7CisJUkVHX0xPQ0FMX0lSUV9TQVZFOworCWNoaXBjSHdfdnBtSHdQaGFzZUFsaWduVGltZW91dEludGVycnVwdENsZWFyKCk7CS8qIFJlY29tbWVuZGVkICovCisJLyogRW5hYmxlIHRpbWVvdXQgaW50ZXJydXB0ICovCisJcENoaXBjSHctPlZQTVBoYXNlQ3RybDIgfD0gY2hpcGNId19SRUdfVlBNX1RJTUVPVVRfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgRERSIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBkaXNhYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId19kZHJId1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+RERSUGhhc2VDdHJsMiAmPSB+Y2hpcGNId19SRUdfRERSX1RJTUVPVVRfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgVlBNIHBoYXNlIGFsaWdubWVudCB0aW1lb3V0IGludGVycnVwdCBkaXNhYmxlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgY2hpcGNId192cG1Id1BoYXNlQWxpZ25UaW1lb3V0SW50ZXJydXB0RGlzYWJsZSh2b2lkKQoreworCVJFR19MT0NBTF9JUlFfU0FWRTsKKwlwQ2hpcGNIdy0+VlBNUGhhc2VDdHJsMiAmPSB+Y2hpcGNId19SRUdfVlBNX1RJTUVPVVRfSU5UUl9FTkFCTEU7CisJUkVHX0xPQ0FMX0lSUV9SRVNUT1JFOworfQorCisjZW5kaWYgLyogQ0hJUENfSU5MSU5FX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2NoaXBjSHdfcmVnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNjI0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9jaGlwY0h3X3JlZy5oCkBAIC0wLDAgKzEsNTMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgY2hpcGNId19yZWcuaAorKgorKiAgQGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIGxvdyBsZXZlbCBjaGlwIGNvbnRyb2wgcmVnaXN0ZXJzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENISVBDSFdfUkVHX0gKKyNkZWZpbmUgQ0hJUENIV19SRUdfSAorCisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKyNpbmNsdWRlIDxjc3AvcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvZGRyY1JlZy5oPgorCisjZGVmaW5lIGNoaXBjSHdfQkFTRV9BRERSRVNTICAgIE1NX0lPX0JBU0VfQ0hJUEMKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IENoaXBJZDsJLyogQ2hpcCBJRCAqLworCXVpbnQzMl90IEREUkNsb2NrOwkvKiBQTEwxIENoYW5uZWwgMSBmb3IgRERSIGNsb2NrICovCisJdWludDMyX3QgQVJNQ2xvY2s7CS8qIFBMTDEgQ2hhbm5lbCAyIGZvciBBUk0gY2xvY2sgKi8KKwl1aW50MzJfdCBFU1dDbG9jazsJLyogUExMMSBDaGFubmVsIDMgZm9yIEVTVyBzeXN0ZW0gY2xvY2sgKi8KKwl1aW50MzJfdCBWUE1DbG9jazsJLyogUExMMSBDaGFubmVsIDQgZm9yIFZQTSBjbG9jayAqLworCXVpbnQzMl90IEVTVzEyNUNsb2NrOwkvKiBQTEwxIENoYW5uZWwgNSBmb3IgRVNXIDEyNU1IeiBjbG9jayAqLworCXVpbnQzMl90IFVBUlRDbG9jazsJLyogUExMMSBDaGFubmVsIDYgZm9yIFVBUlQgY2xvY2sgKi8KKwl1aW50MzJfdCBTRElPMENsb2NrOwkvKiBQTEwxIENoYW5uZWwgNyBmb3IgU0RJTyAwIGNsb2NrICovCisJdWludDMyX3QgU0RJTzFDbG9jazsJLyogUExMMSBDaGFubmVsIDggZm9yIFNESU8gMSBjbG9jayAqLworCXVpbnQzMl90IFNQSUNsb2NrOwkvKiBQTEwxIENoYW5uZWwgOSBmb3IgU1BJIG1hc3RlciBDbG9jayAgKi8KKwl1aW50MzJfdCBFVE1DbG9jazsJLyogUExMMSBDaGFubmVsIDEwIGZvciBBUk0gRVRNIENsb2NrICAqLworCisJdWludDMyX3QgQUNMS0Nsb2NrOwkvKiBBQ0xLIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IE9UUENsb2NrOwkvKiBPVFAgQ2xvY2sgIChEaXZpZGVyKSAqLworCXVpbnQzMl90IEkyQ0Nsb2NrOwkvKiBJMkMgQ2xvY2sgKENLXzEzbSkgKERpdmlkZXIpICovCisJdWludDMyX3QgSTJTMENsb2NrOwkvKiBJMlMwIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IFJUQlVTQ2xvY2s7CS8qIFJUQlVTIChERFIgUEhZIENvbmZpZy4pIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IHBhZDE7CisJdWludDMyX3QgQVBNMTAwQ2xvY2s7CS8qIEFQTSAxMDBNSHogQ0xLIENsb2NrIChEaXZpZGVyKSAqLworCXVpbnQzMl90IFRTQ0Nsb2NrOwkvKiBUU0MgQ2xvY2sgKERpdmlkZXIpICovCisJdWludDMyX3QgTEVEQ2xvY2s7CS8qIExFRCBDbG9jayAoRGl2aWRlcikgKi8KKworCXVpbnQzMl90IFVTQkNsb2NrOwkvKiBQTEwyIENoYW5uZWwgMSBmb3IgVVNCIGNsb2NrICovCisJdWludDMyX3QgTENEQ2xvY2s7CS8qIFBMTDIgQ2hhbm5lbCAyIGZvciBMQ0QgY2xvY2sgKi8KKwl1aW50MzJfdCBBUE1DbG9jazsJLyogUExMMiBDaGFubmVsIDMgZm9yIEFQTSAyMDAgTUh6IGNsb2NrICovCisKKwl1aW50MzJfdCBCdXNJbnRmQ2xvY2s7CS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgKi8KKworCXVpbnQzMl90IFBMTFN0YXR1czsJLyogUExMIHN0YXR1cyByZWdpc3RlciAoUExMMSkgKi8KKwl1aW50MzJfdCBQTExDb25maWc7CS8qIFBMTCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICAoUExMMSkgKi8KKwl1aW50MzJfdCBQTExQcmVEaXZpZGVyOwkvKiBQTEwgcHJlLWRpdmlkZXIgY29udHJvbCByZWdpc3RlciAoUExMMSkgKi8KKwl1aW50MzJfdCBQTExEaXZpZGVyOwkvKiBQTEwgZGl2aWRlciBjb250cm9sIHJlZ2lzdGVyIChQTEwxKSAqLworCXVpbnQzMl90IFBMTENvbnRyb2wxOwkvKiBQTEwgYW5hbG9nIGNvbnRyb2wgcmVnaXN0ZXIgIzEgKFBMTDEpICovCisJdWludDMyX3QgUExMQ29udHJvbDI7CS8qIFBMTCBhbmFsb2cgY29udHJvbCByZWdpc3RlciAjMiAoUExMMSkgKi8KKworCXVpbnQzMl90IEkyUzFDbG9jazsJLyogSTJTMSBDbG9jayAgKi8KKwl1aW50MzJfdCBBdWRpb0VuYWJsZTsJLyogRW5hYmxlLyBkaXNhYmxlIGF1ZGlvIGNoYW5uZWwgKi8KKwl1aW50MzJfdCBTb2Z0UmVzZXQxOwkvKiBSZXNldCBibG9ja3MgKi8KKwl1aW50MzJfdCBTb2Z0UmVzZXQyOwkvKiBSZXNldCBibG9ja3MgKi8KKwl1aW50MzJfdCBTcGFyZTE7CS8qIFBoYXNlIGFsaWduIGludGVycnVwdHMgKi8KKwl1aW50MzJfdCBTdGlja3k7CS8qIFN0aWNreSBiaXRzICovCisJdWludDMyX3QgTWlzY0N0cmw7CS8qIE1pc2MuIGNvbnRyb2wgKi8KKwl1aW50MzJfdCBwYWQzWzNdOworCisJdWludDMyX3QgUExMU3RhdHVzMjsJLyogUExMIHN0YXR1cyByZWdpc3RlciAoUExMMikgKi8KKwl1aW50MzJfdCBQTExDb25maWcyOwkvKiBQTEwgY29uZmlndXJhdGlvbiByZWdpc3RlciAgKFBMTDIpICovCisJdWludDMyX3QgUExMUHJlRGl2aWRlcjI7CS8qIFBMTCBwcmUtZGl2aWRlciBjb250cm9sIHJlZ2lzdGVyIChQTEwyKSAqLworCXVpbnQzMl90IFBMTERpdmlkZXIyOwkvKiBQTEwgZGl2aWRlciBjb250cm9sIHJlZ2lzdGVyIChQTEwyKSAqLworCXVpbnQzMl90IFBMTENvbnRyb2wxMjsJLyogUExMIGFuYWxvZyBjb250cm9sIHJlZ2lzdGVyICMxIChQTEwyKSAqLworCXVpbnQzMl90IFBMTENvbnRyb2wyMjsJLyogUExMIGFuYWxvZyBjb250cm9sIHJlZ2lzdGVyICMyIChQTEwyKSAqLworCisJdWludDMyX3QgRERSUGhhc2VDdHJsMTsJLyogRERSIENsb2NrIFBoYXNlIEFsaWdubWVudCBjb250cm9sMSAqLworCXVpbnQzMl90IFZQTVBoYXNlQ3RybDE7CS8qIFZQTSBDbG9jayBQaGFzZSBBbGlnbm1lbnQgY29udHJvbDEgKi8KKwl1aW50MzJfdCBQaGFzZUFsaWduU3RhdHVzOwkvKiBERFIvVlBNIENsb2NrIFBoYXNlIEFsaWdubWVudCBTdGF0dXMgKi8KKwl1aW50MzJfdCBQaGFzZUN0cmxTdGF0dXM7CS8qIEREUi9WUE0gQ2xvY2sgSFcgRERSL1ZQTSBwaF9jdHJsIGFuZCBsb2FkX2NoIFN0YXR1cyAqLworCXVpbnQzMl90IEREUlBoYXNlQ3RybDI7CS8qIEREUiBDbG9jayBQaGFzZSBBbGlnbm1lbnQgY29udHJvbDIgKi8KKwl1aW50MzJfdCBWUE1QaGFzZUN0cmwyOwkvKiBWUE0gQ2xvY2sgUGhhc2UgQWxpZ25tZW50IGNvbnRyb2wyICovCisJdWludDMyX3QgcGFkNFs5XTsKKworCXVpbnQzMl90IFNvZnRPVFAxOwkvKiBTb2Z0d2FyZSBPVFAgY29udHJvbCAqLworCXVpbnQzMl90IFNvZnRPVFAyOwkvKiBTb2Z0d2FyZSBPVFAgY29udHJvbCAqLworCXVpbnQzMl90IFNvZnRTdHJhcHM7CS8qIFNvZnR3YXJlIHN0cmFwICovCisJdWludDMyX3QgUGluU3RyYXBzOwkvKiBQaW4gU3RyYXBzICovCisJdWludDMyX3QgRGlmZk9zY0N0cmw7CS8qIERpZmYgb3NjaWxsYXRvciBjb250cm9sICovCisJdWludDMyX3QgRGlhZ3NDdHJsOwkvKiBEaWFnbm9zdGljIGNvbnRyb2wgKi8KKwl1aW50MzJfdCBEaWFnc091dHB1dEN0cmw7CS8qIERpYWdub3N0aWMgb3V0cHV0IGVuYWJsZSAqLworCXVpbnQzMl90IERpYWdzUmVhZEJhY2tDdHJsOwkvKiBEaWFnbm9zdGljIHJlYWQgYmFjayBjb250cm9sICovCisKKwl1aW50MzJfdCBMY2RQaWZNb2RlOwkvKiBMQ0QvUElGIFBpbiBTaGFyaW5nIE1VWCBNb2RlICovCisKKwl1aW50MzJfdCBHcGlvTXV4XzBfNzsJLyogUGluIFNoYXJpbmcgTVVYMCBDb250cm9sICovCisJdWludDMyX3QgR3Bpb011eF84XzE1OwkvKiBQaW4gU2hhcmluZyBNVVgxIENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzE2XzIzOwkvKiBQaW4gU2hhcmluZyBNVVgyIENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzI0XzMxOwkvKiBQaW4gU2hhcmluZyBNVVgzIENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzMyXzM5OwkvKiBQaW4gU2hhcmluZyBNVVg0IENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzQwXzQ3OwkvKiBQaW4gU2hhcmluZyBNVVg1IENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzQ4XzU1OwkvKiBQaW4gU2hhcmluZyBNVVg2IENvbnRyb2wgKi8KKwl1aW50MzJfdCBHcGlvTXV4XzU2XzYzOwkvKiBQaW4gU2hhcmluZyBNVVg3IENvbnRyb2wgKi8KKworCXVpbnQzMl90IEdwaW9TUl8wXzc7CS8qIFNsZXcgcmF0ZSBmb3IgR1BJTyAwIC0gNyAqLworCXVpbnQzMl90IEdwaW9TUl84XzE1OwkvKiBTbGV3IHJhdGUgZm9yIEdQSU8gOCAtIDE1ICovCisJdWludDMyX3QgR3Bpb1NSXzE2XzIzOwkvKiBTbGV3IHJhdGUgZm9yIEdQSU8gMTYgLSAyMyAqLworCXVpbnQzMl90IEdwaW9TUl8yNF8zMTsJLyogU2xldyByYXRlIGZvciBHUElPIDI0IC0gMzEgKi8KKwl1aW50MzJfdCBHcGlvU1JfMzJfMzk7CS8qIFNsZXcgcmF0ZSBmb3IgR1BJTyAzMiAtIDM5ICovCisJdWludDMyX3QgR3Bpb1NSXzQwXzQ3OwkvKiBTbGV3IHJhdGUgZm9yIEdQSU8gNDAgLSA0NyAqLworCXVpbnQzMl90IEdwaW9TUl80OF81NTsJLyogU2xldyByYXRlIGZvciBHUElPIDQ4IC0gNTUgKi8KKwl1aW50MzJfdCBHcGlvU1JfNTZfNjM7CS8qIFNsZXcgcmF0ZSBmb3IgR1BJTyA1NiAtIDYzICovCisJdWludDMyX3QgTWlzY1NSXzBfNzsJLyogU2xldyByYXRlIGZvciBNSVNDIDAgLSA3ICovCisJdWludDMyX3QgTWlzY1NSXzhfMTU7CS8qIFNsZXcgcmF0ZSBmb3IgTUlTQyA4IC0gMTUgKi8KKworCXVpbnQzMl90IEdwaW9QdWxsXzBfMTU7CS8qIFB1bGwgdXAgcmVnaXN0ZXJzIGZvciBHUElPIDAgLSAxNSAqLworCXVpbnQzMl90IEdwaW9QdWxsXzE2XzMxOwkvKiBQdWxsIHVwIHJlZ2lzdGVycyBmb3IgR1BJTyAxNiAtIDMxICovCisJdWludDMyX3QgR3Bpb1B1bGxfMzJfNDc7CS8qIFB1bGwgdXAgcmVnaXN0ZXJzIGZvciBHUElPIDMyIC0gNDcgKi8KKwl1aW50MzJfdCBHcGlvUHVsbF80OF82MzsJLyogUHVsbCB1cCByZWdpc3RlcnMgZm9yIEdQSU8gNDggLSA2MyAqLworCXVpbnQzMl90IE1pc2NQdWxsXzBfMTU7CS8qIFB1bGwgdXAgcmVnaXN0ZXJzIGZvciBNSVNDIDAgLSAxNSAqLworCisJdWludDMyX3QgR3Bpb0lucHV0XzBfMzE7CS8qIElucHV0IHR5cGUgZm9yIEdQSU8gMCAtIDMxICovCisJdWludDMyX3QgR3Bpb0lucHV0XzMyXzYzOwkvKiBJbnB1dCB0eXBlIGZvciBHUElPIDMyIC0gNjMgKi8KKwl1aW50MzJfdCBNaXNjSW5wdXRfMF8xNTsJLyogSW5wdXQgdHlwZSBmb3IgTUlTQyAwIC0gMTYgKi8KK30gY2hpcGNId19SRUdfdDsKKworI2RlZmluZSBwQ2hpcGNIdyAgKCh2b2xhdGlsZSBjaGlwY0h3X1JFR190ICopIGNoaXBjSHdfQkFTRV9BRERSRVNTKQorI2RlZmluZSBwQ2hpcGNQaHlzaWNhbCAgKCh2b2xhdGlsZSBjaGlwY0h3X1JFR190ICopIE1NX0FERFJfSU9fQ0hJUEMpCisKKyNkZWZpbmUgY2hpcGNId19SRUdfQ0hJUElEX0JBU0VfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjAwMAorI2RlZmluZSBjaGlwY0h3X1JFR19DSElQSURfQkFTRV9TSElGVCAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBjaGlwY0h3X1JFR19DSElQSURfUkVWX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwRkZGCisjZGVmaW5lIGNoaXBjSHdfUkVHX1JFVl9BMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QTAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1JFVl9CMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIwCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1NUQVRVU19DT05UUk9MX0VOQUJMRSAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBBbGxvdyBjb250cm9sbGluZyBQTEwgcmVnaXN0ZXJzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9TVEFUVVNfTE9DS0VEICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUExMIGlzIHNldHRsZWQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19EX1JFU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBEaWdpdGFsIHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQV9SRVNFVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogQW5hbG9nIHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfQllQQVNTX0VOQUJMRSAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogQnlwYXNzIGVuYWJsZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ09ORklHX09VVFBVVF9FTkFCTEUgICAgICAgICAgICAweDAwMDAwMDEwCS8qIE91dHB1dCBlbmFibGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19QT1dFUl9ET1dOICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBQb3dlciBkb3duICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPX1NQTElUX0ZSRVEgICAgICAgICAgIDE2MDAwMDAwMDAJLyogMS42R0h6IFZDTyBzcGxpdCBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19WQ09fODAwXzE2MDAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBWQ08gcmFuZ2UgODAwLTE2MDAgTUh6ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVkNPXzE2MDFfMzIwMCAgICAgICAgICAgIDB4MDAwMDAwODAJLyogVkNPIHJhbmdlIDE2MDEtMzIwMCBNSHogKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX0VOQUJMRSAgICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBQTEwgdGVzdCBvdXRwdXQgZW5hYmxlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DT05GSUdfVEVTVF9TRUxFQ1RfTUFTSyAgICAgICAgIDB4MDAzRTAwMDAJLyogTWFzayB0byBzZXQgdGVzdCB2YWx1ZXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NPTkZJR19URVNUX1NFTEVDVF9TSElGVCAgICAgICAgMTcKKworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09NUCAgICAgICAgICAgICAgICAweDAwODAwMDAwCS8qIFBoYXNlIGNvbXBhcmF0b3Igb3V0cHV0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19UT19CVVNfUkFUSU9fTUFTSyAgICAgICAgIDB4MDAzMDAwMDAJLyogQ2xvY2sgdG8gYnVzIHJhdGlvIG1hc2sgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX1RPX0JVU19SQVRJT19TSElGVCAgICAgICAgMjAJLyogTnVtYmVyIG9mIGJpdHMgdG8gYmUgc2hpZnRlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUE9XRVJfRE9XTiAgICAgICAgICAgICAgICAweDAwMDgwMDAwCS8qIFBMTCBjaGFubmVsIHBvd2VyIGRvd24gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX1NPVVJDRV9HUElPICAgICAgICAgICAgICAgMHgwMDA0MDAwMAkvKiBVc2UgR1BJTyBhcyBzb3VyY2UgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX0JZUEFTU19TRUxFQ1QgICAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBTZWxlY3QgYnlwYXNzIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19PVVRQVVRfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMTAwMDAJLyogQ2xvY2sgZ2F0ZWQgT04gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0NMT0NLX1BIQVNFX1VQREFURV9FTkFCTEUgICAgICAgMHgwMDAwODAwMAkvKiBDbG9jayBwaGFzZSB1cGRhdGUgZW5hYmxlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9DTE9DS19QSEFTRV9DT05UUk9MX1NISUZUICAgICAgIDgJLyogTnVtYmVyIG9mIGJpdHMgdG8gYmUgc2hpZnRlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfUEhBU0VfQ09OVFJPTF9NQVNLICAgICAgICAweDAwMDAzRjAwCS8qIFBoYXNlIGNvbnRyb2wgbWFzayAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfQ0xPQ0tfTURJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCS8qIENsb2NrIHBvc3QgZGl2aWRlciBtYXNrCisKKwkJCQkJCQkJCSAgIDAwMDAwMDAwID0gZGl2aWRlLWJ5LTI1NgorCQkJCQkJCQkJICAgMDAwMDAwMDEgPSBkaXZpZGUtYnktMQorCQkJCQkJCQkJICAgMDAwMDAwMTAgPSBkaXZpZGUtYnktMgorCQkJCQkJCQkJICAgMDAwMDAwMTEgPSBkaXZpZGUtYnktMworCQkJCQkJCQkJICAgMDAwMDAxMDAgPSBkaXZpZGUtYnktNAorCQkJCQkJCQkJICAgMDAwMDAxMDEgPSBkaXZpZGUtYnktNQorCQkJCQkJCQkJICAgMDAwMDAxMTAgPSBkaXZpZGUtYnktNgorCQkJCQkJCQkJICAgLgorCQkJCQkJCQkJICAgLgorCQkJCQkJCQkJICAgMTExMTEwMTEgPSBkaXZpZGUtYnktMjUxCisJCQkJCQkJCQkgICAxMTExMTEwMCA9IGRpdmlkZS1ieS0yNTIKKwkJCQkJCQkJCSAgIDExMTExMTAxID0gZGl2aWRlLWJ5LTI1MworCQkJCQkJCQkJICAgMTExMTExMTAgPSBkaXZpZGUtYnktMjU0CisJCQkJCQkJCQkgKi8KKworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfU09VUkNFX09USEVSICAgICAgICAgICAgICAweDAwMDQwMDAwCS8qIE5PTi1QTEwgY2xvY2sgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfQllQQVNTX1NFTEVDVCAgICAgICAgICAgICAweDAwMDIwMDAwCS8qIE5PTi1QTEwgY2xvY2sgYnlwYXNzIGVuYWJsZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfT1VUUFVUX0VOQUJMRSAgICAgICAgICAgICAweDAwMDEwMDAwCS8qIE5PTi1QTEwgY2xvY2sgb3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfRElWX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCS8qIE5PTi1QTEwgY2xvY2sgcG9zdC1kaXZpZGUgbWFzayAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ESVZfQ0xPQ0tfRElWXzI1NiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5PTi1QTEwgY2xvY2sgcG9zdC1kaXZpZGUgYnkgMjU2ICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfUDFfU0hJRlQgICAgICAgICAgICAgMAorI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMl9TSElGVCAgICAgICAgICAgICA0CisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfU0hJRlQgICAgICAgICAgIDgKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NQVNLICAgICAgICAgICAgMHgwMDAxRkYwMAorI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QT1dFUl9ET1dOICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9NQVNLICAgICAgIDB4MDA3MDAwMDAJLyogRGl2aWRlciBtYXNrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9JTlRFR0VSICAgIDB4MDAwMDAwMDAJLyogSW50ZWdlci1OIE1vZGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX01BU0hfVU5JVCAgMHgwMDEwMDAwMAkvKiBNQVNIIFNpZ21hLURlbHRhIE1vZHVsYXRvciBVbml0IE1vZGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX1BSRURJVklERVJfTkRJVl9NT0RFX01GQl9VTklUICAgMHgwMDIwMDAwMAkvKiBNRkIgU2lnbWEtRGVsdGEgTW9kdWxhdG9yIFVuaXQgTW9kZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9ORElWX01PREVfTUFTSF8xXzggICAweDAwMzAwMDAwCS8qIE1BU0ggU2lnbWEtRGVsdGEgTW9kdWxhdG9yIDEvOCBNb2RlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfTU9ERV9NRkJfMV84ICAgIDB4MDA0MDAwMDAJLyogTUZCIFNpZ21hLURlbHRhIE1vZHVsYXRvciAxLzggTW9kZSAqLworCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX05ESVZfaSh2Y28pICAgICAgICAgICgodmNvKSAvIGNoaXBjSHdfWFRBTF9GUkVRX0h6KQorI2RlZmluZSBjaGlwY0h3X1JFR19QTExfUFJFRElWSURFUl9QMSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9QUkVESVZJREVSX1AyICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9NMURJViAgICAgICAgICAgICAgICAgICAweDAzMDAwMDAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX0ZSQUMgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYJLyogRnJhY3Rpb25hbCBkaXZpZGVyICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0RJVklERVJfTkRJVl9mX1NTICAgICAgICAgICAgICAgKDB4MDBGRkZGRkYpCS8qIFRvIGF0dGFpbiBzcHJlYWQgd2l0aCBtYXggZnJlcXVlbmN5ICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUExMX0RJVklERVJfTkRJVl9mICAgICAgICAgICAgICAgICAgMAkvKiBuZGl2X2ZyYWMgPSBjaGlwY0h3X1JFR19QTExfRElWSURFUl9ORElWX2YgLworCQkJCQkJCQkgICBjaGlwY0h3X1JFR19QTExfRElWSURFUl9GUkFDCisJCQkJCQkJCSAgID0gMCwgd2hlbiBTUyBpcyBkaXNhYmxlCisJCQkJCQkJCSAqLworCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BMTF9ESVZJREVSX01ESVYodmNvLCBIeikgICAgICAgICAgICgoY2hpcGNId19kaXZpZGUoKHZjbyksIChIeikpID4gMjU1KSA/IDAgOiBjaGlwY0h3X2RpdmlkZSgodmNvKSwgKEh6KSkpCisKKyNkZWZpbmUgY2hpcGNId19SRUdfQUNMS0Nsb2NrX0NMS19ESVZfTUFTSyAgICAgICAgICAgICAgMHgzCisKKy8qIFN5c3RlbSBib290aW5nIHN0cmFwIG9wdGlvbnMgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfU09GVF9PVkVSUklERSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBTb2Z0d2FyZSBTdHJhcCBPdmVycmlkZSAqLworCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX05BTkRfRkxBU0hfOCAgICAgICAgIDB4MDAwMDAwMDAJLyogOCBiaXQgTkFORCBGTEFTSCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX05PUl9GTEFTSF8xNiAgICAgICAgIDB4MDAwMDAwMDIJLyogMTYgYml0IE5PUiBGTEFTSCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX1NFUklBTF9GTEFTSCAgICAgICAgIDB4MDAwMDAwMDQJLyogU2VyaWFsIEZMQVNIIEJvb3QgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9ERVZJQ0VfTkFORF9GTEFTSF8xNiAgICAgICAgMHgwMDAwMDAwNgkvKiAxNiBiaXQgTkFORCBGTEFTSCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX1VBUlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogVUFSVCBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfREVWSUNFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUJLyogTWFzayAqLworCisvKiBTeXN0ZW0gYm9vdCBvcHRpb24gKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9PUFRJT05fQlJPTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBCb290IGZyb20gQm9vdCBST00gKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9PUFRJT05fQVJBTSAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBCb290IGZyb20gQVJBTSAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19CT09UX09QVElPTl9OT1IgICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCS8qIEJvb3QgZnJvbSBOT1IgZmxhc2ggKi8KKworLyogTkFORCBGbGFzaCBwYWdlIHNpemUgc3RyYXAgb3B0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFXzUxMiAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5BTkQgRkxBU0ggcGFnZSBzaXplIG9mIDUxMiBieXRlcyAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFXzIwNDggICAgICAgICAgICAgICAweDAwMDAwMDQwCS8qIE5BTkQgRkxBU0ggcGFnZSBzaXplIG9mIDIwNDggYnl0ZXMgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfTkFORF9QQUdFU0laRV80MDk2ICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBOQU5EIEZMQVNIIHBhZ2Ugc2l6ZSBvZiA0MDk2IGJ5dGVzICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX05BTkRfUEFHRVNJWkVfRVhUICAgICAgICAgICAgICAgIDB4MDAwMDAwQzAJLyogTkFORCBGTEFTSCBwYWdlIG9mIGV4dGVuZWQgc2l6ZSAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX1BBR0VTSVpFX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMEMwCS8qIE1hc2sgKi8KKworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19OQU5EX0VYVFJBX0NZQ0xFICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCS8qIE5BTkQgRkxBU0ggYWRkcmVzcyBjeWNsZSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX1JFQk9PVF9UT19VQVJUICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAJLyogUmVib290IHRvIFVBUlQgb24gZXJyb3IgKi8KKworLyogU2VjdXJlIGJvb3QgbW9kZSBzdHJhcCBvcHRpb25zICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAJLyogTm9ybWFsIEJvb3QgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfQk9PVF9NT0RFX0RCR19TVyAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBTb2Z0d2FyZSBkZWJ1Z2dpbmcgQm9vdCAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19CT09UX01PREVfREJHX0JPT1QgICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIEJvb3Qgcm9tIGRlYnVnZ2luZyBCb290ICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9OT1JNQUxfUVVJRVQgICAgICAgICAgIDB4MDAwMDAzMDAJLyogTm9ybWFsIEJvb3QgKFF1aWV0IEJvb3RSb20pICovCisjZGVmaW5lIGNoaXBjSHdfU1RSQVBTX0JPT1RfTU9ERV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzMDAJLyogTWFzayAqLworCisvKiBTbGF2ZSBNb2RlIHN0cmFwcyAqLworI2RlZmluZSBjaGlwY0h3X1NUUkFQU19JMkNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIEkyQyBTbGF2ZSAgKi8KKyNkZWZpbmUgY2hpcGNId19TVFJBUFNfU1BJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAkvKiBTUEkgU2xhdmUgICovCisKKy8qIFN0cmFwIHBpbiBvcHRpb25zICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NXX1NUUkFQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICgocENoaXBjSHctPlBpblN0cmFwcyAmIDB4MDAwMEZDMDApID4+IDEwKQorCisvKiBQSUYvTENEIHBpbiBzaGFyaW5nIGRlZmluZXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTENEX1BJTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBMQ0QgQ29udHJvbGxlciBpcyB1c2VkIGFuZCB0aGUgcGlucyBoYXZlIExDRCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUElGX1BJTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBMQ0QgcGlucyBhcmUgdXNlZCB0byBwZXJmb3JtIFBJRiBmdW5jdGlvbnMgICovCisKKyNkZWZpbmUgY2hpcGNId19HUElPX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjEJLyogTnVtYmVyIG9mIEdQSU8gcGluIGFjY2Vzc2libGUgdGhvcnVnaCBDSElQQyAqLworCisvKiBOT1RFOiBBbnkgY2hhbmdlcyB0byB0aGVzZSBjb25zdGFudHMgd2lsbCByZXF1aXJlIGEgY29ycmVzcG9uZGluZyBjaGFuZ2UgdG8gY2hpcGNId19zdHIuYyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9LRVlQQUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCS8qIEdQSU8gbXV4IGZvciBLZXlwYWQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfSTJDSCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBHUElPIG11eCBmb3IgSTJDSCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9TUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCS8qIEdQSU8gbXV4IGZvciBTUEkgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfVUFSVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBHUElPIG11eCBmb3IgVUFSVCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9MRURNVFhQICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CS8qIEdQSU8gbXV4IGZvciBMRURNVFhQICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0dQSU9fTVVYX0xFRE1UWFMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYJLyogR1BJTyBtdXggZm9yIExFRE1UWFMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfU0RJTzAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNwkvKiBHUElPIG11eCBmb3IgU0RJTzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfU0RJTzEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBHUElPIG11eCBmb3IgU0RJTzEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfUENNICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQkvKiBHUElPIG11eCBmb3IgUENNICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0dQSU9fTVVYX0kyUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEJLyogR1BJTyBtdXggZm9yIEkyUyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9FVE0gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCS8qIEdQSU8gbXV4IGZvciBFVE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfREVCVUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQwkvKiBHUElPIG11eCBmb3IgREVCVUcgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfTUlTQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAkvKiBHUElPIG11eCBmb3IgTUlTQyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9HUElPICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIEdQSU8gbXV4IGZvciBHUElPICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0dQSU9fTVVYKHBpbikgICAgICAgICAgICAgICAgICAgICAgICgmcENoaXBjSHctPkdwaW9NdXhfMF83ICsgKChwaW4pID4+IDMpKQorI2RlZmluZSBjaGlwY0h3X1JFR19HUElPX01VWF9QT1NJVElPTihwaW4pICAgICAgICAgICAgICAoKChwaW4pICYgMHgwMDAwMDAwNykgPDwgMikKKyNkZWZpbmUgY2hpcGNId19SRUdfR1BJT19NVVhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgkvKiBNYXNrICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfU0xFV19SQVRFX0hJR0ggICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBIaWdoIHNwZWVkIHNsZXcgcmF0ZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TTEVXX1JBVEVfTk9STUFMICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CS8qIE5vcm1hbCBzbGV3IHJhdGUgKi8KKwkJCQkJCQkvKiBQaW5zIGJleW9uZCA0MiBhcmUgZGVmaW5lZCBieSBza2lwcGluZyA4IGJpdHMgd2l0aGluIHRoZSByZWdpc3RlciAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TTEVXX1JBVEUocGluKSAgICAgICAgICAgICAgICAgICAgICAoKChwaW4pID4gNDIpID8gKCZwQ2hpcGNIdy0+R3Bpb1NSXzBfNyArICgoKHBpbikgKyAyKSA+PiAzKSkgOiAoJnBDaGlwY0h3LT5HcGlvU1JfMF83ICsgKChwaW4pID4+IDMpKSkKKyNkZWZpbmUgY2hpcGNId19SRUdfU0xFV19SQVRFX1BPU0lUSU9OKHBpbikgICAgICAgICAgICAgKCgocGluKSA+IDQyKSA/ICgoKChwaW4pICsgMikgJiAweDAwMDAwMDA3KSA8PCAyKSA6ICgoKHBpbikgJiAweDAwMDAwMDA3KSA8PCAyKSkKKyNkZWZpbmUgY2hpcGNId19SRUdfU0xFV19SQVRFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBNYXNrICovCisKKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF8ybUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggMiBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF80bUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggNCBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF82bUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggNiBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF84bUEgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggOCBtaWxsaSBhbXBlcmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVF9TVFJFTkdUSF8xMG1BICAgICAgICAgICAgICAgMHgwMDAwMDAwNgkvKiBDdXJyZW50IGRyaXZpbmcgc3RyZW5ndGggMTAgbWlsbGkgYW1wZXJlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0NVUlJFTlRfU1RSRU5HVEhfMTJtQSAgICAgICAgICAgICAgIDB4MDAwMDAwMDcJLyogQ3VycmVudCBkcml2aW5nIHN0cmVuZ3RoIDEyIG1pbGxpIGFtcGVyZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19DVVJSRU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CS8qIE1hc2sgKi8KKwkJCQkJCQkvKiBQaW5zIGJleW9uZCA0MiBhcmUgZGVmaW5lZCBieSBza2lwcGluZyA4IGJpdHMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQ1VSUkVOVChwaW4pICAgICAgICAgICAgICAgICAgICAgICAgKCgocGluKSA+IDQyKSA/ICgmcENoaXBjSHctPkdwaW9TUl8wXzcgKyAoKChwaW4pICsgMikgPj4gMykpIDogKCZwQ2hpcGNIdy0+R3Bpb1NSXzBfNyArICgocGluKSA+PiAzKSkpCisjZGVmaW5lIGNoaXBjSHdfUkVHX0NVUlJFTlRfUE9TSVRJT04ocGluKSAgICAgICAgICAgICAgICgoKHBpbikgPiA0MikgPyAoKCgocGluKSArIDIpICYgMHgwMDAwMDAwNykgPDwgMikgOiAoKChwaW4pICYgMHgwMDAwMDAwNykgPDwgMikpCisKKyNkZWZpbmUgY2hpcGNId19SRUdfUFVMTF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBObyBwdWxsIHVwIHJlZ2lzdGVyICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BVTExfVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUHVsbCB1cCByZWdpc3RlciBlbmFibGUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfUFVMTF9ET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgkvKiBQdWxsIGRvd24gcmVnaXN0ZXIgZW5hYmxlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1BVTExVUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMJLyogTWFzayAqLworCQkJCQkJCS8qIFBpbnMgYmV5b25kIDQyIGFyZSBkZWZpbmVkIGJ5IHNraXBwaW5nIDQgYml0cyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19QVUxMVVAocGluKSAgICAgICAgICAgICAgICAgICAgICAgICAoKChwaW4pID4gNDIpID8gKCZwQ2hpcGNIdy0+R3Bpb1B1bGxfMF8xNSArICgoKHBpbikgKyAyKSA+PiA0KSkgOiAoJnBDaGlwY0h3LT5HcGlvUHVsbF8wXzE1ICsgKChwaW4pID4+IDQpKSkKKyNkZWZpbmUgY2hpcGNId19SRUdfUFVMTFVQX1BPU0lUSU9OKHBpbikgICAgICAgICAgICAgICAgKCgocGluKSA+IDQyKSA/ICgoKChwaW4pICsgMikgJiAweDAwMDAwMDBGKSA8PCAxKSA6ICgoKHBpbikgJiAweDAwMDAwMDBGKSA8PCAxKSkKKworI2RlZmluZSBjaGlwY0h3X1JFR19JTlBVVFRZUEVfQ01PUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5vcm1hbCBDTU9TIGxvZ2ljICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0lOUFVUVFlQRV9TVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogSGlnaCBzcGVlZCBTY2htaXR0IFRyaWdnZXIgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfSU5QVVRUWVBFX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBNYXNrICovCisJCQkJCQkJLyogUGlucyBiZXlvbmQgNDIgYXJlIGRlZmluZWQgYnkgc2tpcHBpbmcgMiBiaXRzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0lOUFVUVFlQRShwaW4pICAgICAgICAgICAgICAgICAgICAgICgoKHBpbikgPiA0MikgPyAoJnBDaGlwY0h3LT5HcGlvSW5wdXRfMF8zMSArICgoKHBpbikgKyAyKSA+PiA1KSkgOiAoJnBDaGlwY0h3LT5HcGlvSW5wdXRfMF8zMSArICgocGluKSA+PiA1KSkpCisjZGVmaW5lIGNoaXBjSHdfUkVHX0lOUFVUVFlQRV9QT1NJVElPTihwaW4pICAgICAgICAgICAgICgoKHBpbikgPiA0MikgPyAoKCgocGluKSArIDIpICYgMHgwMDAwMDAxRikpIDogKCgocGluKSAmIDB4MDAwMDAwMUYpKSkKKworLyogRGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgYnVzIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19BUk0gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgQVJNICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19WREVDICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVkRFQyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfQVJBTSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEFSQU0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0hQTSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBIUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0REUkMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBERFJDICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19ETUFDMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgRE1BQzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0RNQUMxICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBETUFDMSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfTlZJICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIE5WSSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfRVNXICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEVTVyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfR0UgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEdFICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19JMkNIICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgSTJDSCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfSTJTMCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEkyUzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0kyUzEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBJMlMxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19WUkFNICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVlJBTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfQ0xDRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIENMQ0QgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0xESyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBMREsgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX0xFRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBMRUQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX09UUCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBPVFAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1BJRiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBQSUYgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1NQVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBTUFUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1NESU8wICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBTRElPMCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfU0RJTzEgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFNESU8xICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19TUElIICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgU1BJSCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfU1BJUyAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFNQSVMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQlVTX0NMT0NLX1VBUlQwICAgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMAkvKiBCdXMgaW50ZXJmYWNlIGNsb2NrIGZvciBVQVJUMCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfVUFSVDEgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFVBUlQxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19CQkwgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgQkJMICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19JMkNTICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgSTJDUyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfVVNCSCAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIFVTQiBIb3N0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19VU0JEICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVVNCIERldmljZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19CVVNfQ0xPQ0tfQlJPTSAgICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCS8qIEJ1cyBpbnRlcmZhY2UgY2xvY2sgZm9yIEJvb3QgUk9NICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0JVU19DTE9DS19UU0MgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogQnVzIGludGVyZmFjZSBjbG9jayBmb3IgVG91Y2ggc2NyZWVuICovCisKKy8qIFNvZnR3YXJlIHJlc2V0cyBkZWZpbmVzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVlBNX0dMT0JBTF9IT0xEICAgICAgICAgIDB4MDAwMDAwMDA4MDAwMDAwMFVMTAkvKiBSZXNldCBHbG9iYWwgVlBNIGFuZCBob2xkICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVlBNX0hPTEQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDA0MDAwMDAwMFVMTAkvKiBSZXNldCBWUE0gYW5kIGhvbGQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE1fR0xPQkFMICAgICAgICAgICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwVUxMCS8qIFJlc2V0IEdsb2JhbCBWUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE0gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwVUxMCS8qIFJlc2V0IFZQTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0tFWVBBRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDgwMDAwMDBVTEwJLyogUmVzZXQgS2V5IHBhZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0xFRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDQwMDAwMDBVTEwJLyogUmVzZXQgTEVEICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfU1BVICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMjAwMDAwMFVMTAkvKiBSZXNldCBTUFUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9STkcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAxMDAwMDAwVUxMCS8qIFJlc2V0IFJORyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1BLQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDA4MDAwMDBVTEwJLyogUmVzZXQgUEtBICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfTENEICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDQwMDAwMFVMTAkvKiBSZXNldCBMQ0QgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9QSUYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMjAwMDAwVUxMCS8qIFJlc2V0IFBJRiAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0kyQ1MgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAxMDAwMDBVTEwJLyogUmVzZXQgSTJDIFNsYXZlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfSTJDSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDA4MDAwMFVMTAkvKiBSZXNldCBJMkMgSG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1NESU8xICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwNDAwMDBVTEwJLyogUmVzZXQgU0RJTyAxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfU0RJTzAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAyMDAwMFVMTAkvKiBSZXNldCBTRElPIDAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9CQkwgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDEwMDAwVUxMCS8qIFJlc2V0IEJCTCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0kyUzEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDgwMDBVTEwJLyogUmVzZXQgSTJTMSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0kyUzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwJLyogUmVzZXQgSTJTMCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1NQSVMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDIwMDBVTEwJLyogUmVzZXQgU1BJIFNsYXZlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfU1BJSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMTAwMFVMTAkvKiBSZXNldCBTUEkgSG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0dQSU8xICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDA4MDBVTEwJLyogUmVzZXQgR1BJTyBibG9jayAxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfR1BJTzAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDQwMFVMTAkvKiBSZXNldCBHUElPIGJsb2NrIDAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9VQVJUMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMjAwVUxMCS8qIFJlc2V0IFVBUlQgMSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1VBUlQwICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAxMDBVTEwJLyogUmVzZXQgVUFSVCAwICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfTlZJICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDA4MFVMTAkvKiBSZXNldCBOVkkgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9XRE9HICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDQwVUxMCS8qIFJlc2V0IFdhdGNoIGRvZyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1RNUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMjBVTEwJLyogUmVzZXQgVGltZXIgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9FVE0gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDEwVUxMCS8qIFJlc2V0IEVUTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0FSTV9IT0xEICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDhVTEwJLyogUmVzZXQgQVJNIGFuZCBIT0xEICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfQVJNICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwNFVMTAkvKiBSZXNldCBBUk0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1dBUk0gICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMDAyVUxMCS8qIENoaXAgd2FybSByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0NISVBfU09GVCAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwJLyogQ2hpcCBzb2Z0IHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVkRFQyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAwMDAwMDAwMFVMTAkvKiBWaWRlbyBkZWNvZGVyICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfR0UgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAwMDAwMDAwMFVMTAkvKiBHcmFwaGljcyBlbmdpbmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9PVFAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMDAwMDAwMDAwVUxMCS8qIFJlc2V0IE9UUCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1VTQjIgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwMDAwMDAwMDBVTEwJLyogUmVzZXQgVVNCMiAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1VTQjEgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwMDAwMDAwMDBVTEwJLyogUmVzZXQgVVNCIDEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9VU0IgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MDAwMDAwMDAwVUxMCS8qIFJlc2V0IFVTQiAxIGFuZCBVU0IyIHNvZnQgcmVzZXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9FU1cgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MDAwMDAwMDAwVUxMCS8qIFJlc2V0IEV0aGVybmV0IHN3aXRjaCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX0VTV0NMSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwMDAwMDAwMDBVTEwJLyogUmVzZXQgRXRoZXJuZXQgc3dpdGNoIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfRERSUEhZICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAwMDAwMDAwMFVMTAkvKiBSZXNldCBERFIgUGh5c2ljYWwgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9ERFIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwODAwMDAwMDAwVUxMCS8qIFJlc2V0IEREUiBDb250cm9sbGVyICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVFNDICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQwMDAwMDAwMFVMTAkvKiBSZXNldCBUb3VjaCBzY3JlZW4gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9QQ00gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMjAwMDAwMDAwVUxMCS8qIFJlc2V0IFBDTSBkZXZpY2UgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9BUE0gICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMTAwMDAwMDAwVUxMCS8qIFJlc2V0IEFQTSBkZXZpY2UgKi8KKworI2RlZmluZSBjaGlwY0h3X1JFR19TT0ZUX1JFU0VUX1ZQTV9HTE9CQUxfVU5IT0xEICAgICAgICAweDgwMDAwMDAwMDAwMDAwMDBVTEwJLyogVW5ob2xkIEdsb2JhbCBWUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9WUE1fVU5IT0xEICAgICAgICAgICAgICAgMHg0MDAwMDAwMDAwMDAwMDAwVUxMCS8qIFVuaG9sZCBWUE0gKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU09GVF9SRVNFVF9BUk1fVU5IT0xEICAgICAgICAgICAgICAgMHgyMDAwMDAwMDAwMDAwMDAwVUxMCS8qIFVuaG9sZCBBUk0gcmVzZXQgICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfVU5IT0xEX01BU0sgICAgICAgICAgICAgIDB4RjAwMDAwMDAwMDAwMDAwMFVMTAkvKiBNYXNrIHRvIGhhbmRsZSB1bmhvbGQgcmVxdWVzdCAqLworCisvKiBBdWRpbyBjaGFubmVsIGNvbnRyb2wgZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9BTEwgICAgICAgICAgICAweDAwMDAwMDAxCS8qIEVuYWJsZSBhbGwgYXVkaW8gY2hhbm5lbCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9BICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIEVuYWJsZSBjaGFubmVsIEEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9FTkFCTEVfQiAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBFbmFibGUgY2hhbm5lbCBCICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0FVRElPX0NIQU5ORUxfRU5BQkxFX0MgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogRW5hYmxlIGNoYW5uZWwgQyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9OVFBfQ0xPQ0sgICAgICAweDAwMDAwMDEwCS8qIEVuYWJsZSBOVFAgY2xvY2sgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfQVVESU9fQ0hBTk5FTF9FTkFCTEVfUENNMF9DTE9DSyAgICAgMHgwMDAwMDAyMAkvKiBFbmFibGUgUENNMCBjbG9jayAqLworI2RlZmluZSBjaGlwY0h3X1JFR19BVURJT19DSEFOTkVMX0VOQUJMRV9QQ00xX0NMT0NLICAgICAweDAwMDAwMDQwCS8qIEVuYWJsZSBQQ00xIGNsb2NrICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0FVRElPX0NIQU5ORUxfRU5BQkxFX0FQTV9DTE9DSyAgICAgIDB4MDAwMDAwODAJLyogRW5hYmxlIEFQTSBjbG9jayAqLworCisvKiBNaXNjLiBjaGlwIGNvbnRyb2wgZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19NSVNDX0NUUkxfR0VfU0VMICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCS8qIFNlbGVjdCBHRTIvR0UzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9JMlMxX0NMT0NLX09OQ0hJUCAgICAgICAgIDB4MDAwMDAwMDAJLyogVXNlIG9uIGNoaXAgY2xvY2sgZm9yIEkyUzEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX0kyUzFfQ0xPQ0tfR1BJTyAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBVc2UgZXh0ZXJuYWwgY2xvY2sgdmlhIEdQSU8gcGluIDI2IGZvciBJMlMxICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9JMlMwX0NMT0NLX09OQ0hJUCAgICAgICAgIDB4MDAwMDAwMDAJLyogVXNlIG9uIGNoaXAgY2xvY2sgZm9yIEkyUzAgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX0kyUzBfQ0xPQ0tfR1BJTyAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBVc2UgZXh0ZXJuYWwgY2xvY2sgdmlhIEdQSU8gcGluIDQ1IGZvciBJMlMwICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9BUk1fQ1AxNV9ESVNBQkxFICAgICAgICAgIDB4MDAwMDgwMDAJLyogRGlzYWJsZSBBUk0gQ1AxNSBiaXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX1JUQ19ESVNBQkxFICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBEaXNhYmxlIFJUQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfTUlTQ19DVFJMX0JCUkFNX0RJU0FCTEUgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBEaXNhYmxlIEJhdHRlcnkgQmFja2VkIFJBTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19NSVNDX0NUUkxfVVNCX01PREVfSE9TVCAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFNldCBVU0IgYXMgaG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19NSVNDX0NUUkxfVVNCX01PREVfREVWSUNFICAgICAgICAgICAweEZGRkZGRkZECS8qIFNldCBVU0IgYXMgZGV2aWNlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPTiAgICAgICAgICAgICAgIDB4RkZGRkZGRkUJLyogUG93ZXIgdXAgVVNCICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX01JU0NfQ1RSTF9VU0JfUE9XRVJPRkYgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUG93ZXIgZG93biBVU0IgKi8KKworLyogT1RQIGNvbmZpZ3VyYXRpb24gZGVmaW5lcyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfU0VDVVJJVFlfT0ZGICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwMDAwMDAwMDBVTEwJLyogU2VjdXJpdHkgc3VwcG9ydCBpcyBPRkYgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX1NQVV9TTE9XICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMDAwMDAwMDAwVUxMCS8qIExpbWl0ZWQgU1BVIHRocm91Z2hwdXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX0xDRF9TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNjAwMDAwMDAwVUxMCS8qIFNldCBWUE0gc3BlZWQgb25lICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9WUE1fU1BFRURfMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEwMDAwMDAwMFVMTAkvKiBTZXQgVlBNIHNwZWVkIG9uZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfVlBNX1NQRUVEXzAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwODAwMDAwMDBVTEwJLyogU2V0IFZQTSBzcGVlZCB6ZXJvICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9BWElfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDA2MDAwMDAwMFVMTAkvKiBTZXQgbWF4aW11bSBBWEkgYnVzIHNwZWVkICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9BUE1fRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAxRjAwMDAwMFVMTAkvKiBEaXNhYmxlIEFQTSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfUElGX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAyMDAwMDBVTEwJLyogRGlzYWJsZSBQSUYgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX1ZERUNfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMTAwMDAwVUxMCS8qIERpc2FibGUgVmlkZW8gZGVjb2RlciAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfQkJMX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwODAwMDBVTEwJLyogRGlzYWJsZSBSVEMgYW5kIEJCUkFNICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9MRURfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDA0MDAwMFVMTAkvKiBEaXNhYmxlIExFRCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfR0VfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMjAwMDBVTEwJLyogRGlzYWJsZSBHcmFwaGljcyBFbmdpbmUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX0xDRF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDEwMDAwVUxMCS8qIERpc2FibGUgTENEICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9LRVlQQURfRElTQUJMRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwODAwMFVMTAkvKiBEaXNhYmxlIGtleXBhZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfVUFSVF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwJLyogRGlzYWJsZSBVQVJUICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9TRElPSF9ESVNBQkxFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMzAwMFVMTAkvKiBEaXNhYmxlIFNESU8gaG9zdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfSFNTX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDBDMDBVTEwJLyogRGlzYWJsZSBIU1MgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfT1RQX1RTQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMjAwVUxMCS8qIERpc2FibGUgdG91Y2ggc2NyZWVuICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9VU0JfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDE4MFVMTAkvKiBEaXNhYmxlIFVTQiAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfU0dNSUlfRElTQUJMRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwNjBVTEwJLyogRGlzYWJsZSBTR01JSSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfRVRIX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMThVTEwJLyogRGlzYWJsZSBnaWdhYml0IGV0aGVybmV0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX09UUF9FVEhfUEhZX0RJU0FCTEUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwNlVMTAkvKiBEaXNhYmxlIGV0aGVybmV0IFBIWSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19PVFBfVlBNX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwJLyogRGlzYWJsZSBWUE0gKi8KKworLyogU3RpY2t5IGJpdCBkZWZpbmVzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NUSUNLWV9CT09UX0RPTkUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogQm9vdCBkb25lICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NUSUNLWV9TT0ZUX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogQVJNIHNvZnQgcmVzZXQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDEgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDIgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfMyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX0dFTkVSQUxfNSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAkvKiBHZW5lcmFsIHB1cnBvc2UgYml0IDUgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1RJQ0tZX1BPUl9CUk9NICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBTcGVjaWFsIHN0aWNreSBiaXQgZm9yIHNlY3VyaXR5IC0gc2V0IGluIEJST00gdG8gYXZvaWQgb3RoZXIgbW9kZXMgYmVpbmcgZW50ZXJlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfQVJNX1JFU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCS8qIEFSTSByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfQ0hJUF9TT0ZUX1JFU0VUICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIENoaXAgc29mdCByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfQ0hJUF9XQVJNX1JFU0VUICAgICAgICAgICAgICAweDAwMDAwNDAwCS8qIENoaXAgd2FybSByZXNldCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TVElDS1lfV0RPR19SRVNFVCAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIFdhdGNoZG9nIHJlc2V0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NUSUNLWV9PVFBfUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAJLyogT1RQIHJlc2V0ICovCisKKwkJCQkJCQkvKiBIVyBwaGFzZSBhbGlnbm1lbnQgZGVmaW5lcyAqLy8qIFNwYXJlMSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19TUEFSRTFfRERSX1BIQVNFX0lOVFJfRU5BQkxFICAgICAgICAweDgwMDAwMDAwCS8qIEVuYWJsZSBERFIgcGhhc2UgYWxpZ24gcGFuaWMgaW50ZXJydXB0ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NQQVJFMV9WUE1fUEhBU0VfSU5UUl9FTkFCTEUgICAgICAgIDB4NDAwMDAwMDAJLyogRW5hYmxlIFZQTSBwaGFzZSBhbGlnbiBwYW5pYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfU1BBUkUxX1ZQTV9CVVNfQUNDRVNTX0VOQUJMRSAgICAgICAgMHgwMDAwMDAwMgkvKiBFbmFibGUgYWNjZXNzIHRvIFZQTSB1c2luZyBzeXN0ZW0gQlVTICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1NQQVJFMV9ERFJfQlVTX0FDQ0VTU19FTkFCTEUgICAgICAgIDB4MDAwMDAwMDEJLyogRW5hYmxlIGFjY2VzcyB0byBERFIgdXNpbmcgc3lzdGVtIEJVUyAqLworCQkJCQkJCS8qIEREUlBoYXNlQ3RybDEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfRERSX1NXX1BIQVNFX0NUUkxfRU5BQkxFICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBFbmFibGUgRERSIFNXIHBoYXNlIGFsaWdubWVudCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfSFdfUEhBU0VfQ1RSTF9FTkFCTEUgICAgICAgICAgICAweDQwMDAwMDAwCS8qIEVuYWJsZSBERFIgSFcgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9HRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwN0YJLyogRERSIGxvd2VyIHRocmVzaG9sZCBmb3IgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9HRV9TSElGVCAgICAgICAgICAgIDIzCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9MRV9NQVNLICAgICAgICAgICAgIDB4MDAwMDAwN0YJLyogRERSIHVwcGVyIHRocmVzaG9sZCBmb3IgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9WQUxVRV9MRV9TSElGVCAgICAgICAgICAgIDE2CisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9BTElHTl9XQUlUX0NZQ0xFX01BU0sgICAgIDB4MDAwMEZGRkYJLyogQlVTIEN5Y2xlIHRvIHdhaXQgdG8gcnVuIG5leHQgRERSIHBoYXNlIGFsaWdubWVudCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfQUxJR05fV0FJVF9DWUNMRV9TSElGVCAgICAwCisJCQkJCQkJLyogVlBNUGhhc2VDdHJsMSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fU1dfUEhBU0VfQ1RSTF9FTkFCTEUgICAgICAgICAgICAweDgwMDAwMDAwCS8qIEVuYWJsZSBWUE0gU1cgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9IV19QSEFTRV9DVFJMX0VOQUJMRSAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogRW5hYmxlIFZQTSBIVyBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0dFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA3RgkvKiBWUE0gbG93ZXIgdGhyZXNob2xkIGZvciBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0dFX1NISUZUICAgICAgICAgICAgMjMKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0xFX01BU0sgICAgICAgICAgICAgMHgwMDAwMDA3RgkvKiBWUE0gdXBwZXIgdGhyZXNob2xkIGZvciBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1ZBTFVFX0xFX1NISUZUICAgICAgICAgICAgMTYKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX0FMSUdOX1dBSVRfQ1lDTEVfTUFTSyAgICAgMHgwMDAwRkZGRgkvKiBCVVMgQ3ljbGUgdG8gd2FpdCB0byBjb21wbGV0ZSB0aGUgVlBNIHBoYXNlIGFsaWdubWVudCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQUxJR05fV0FJVF9DWUNMRV9TSElGVCAgICAwCisJCQkJCQkJLyogUGhhc2VBbGlnblN0YXR1cyByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfVElNRU9VVF9JTlRSX1NUQVRVUyAgICAgICAgICAgICAweDgwMDAwMDAwCS8qIEREUiB0aW1lIG91dCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9TVEFUVVNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwN0YJLyogRERSIHBoYXNlIHN0YXR1cyB2YWx1ZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfU1RBVFVTX1NISUZUICAgICAgICAgICAgICAyNAorI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfQUxJR05FRCAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCS8qIEREUiBQaGFzZSBhbGlnbmVkIHN0YXR1cyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfTE9BRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCS8qIExvYWQgRERSIHBoYXNlIHN0YXR1cyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfQ1RSTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDNGCS8qIEREUiBwaGFzZSBjb250cm9sIHZhbHVlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9DVFJMX1NISUZUICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9USU1FT1VUX0lOVFJfU1RBVFVTICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogVlBNIHRpbWUgb3V0IGludGVycnVwdCBzdGF0dXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1NUQVRVU19NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDA3RgkvKiBWUE0gcGhhc2Ugc3RhdHVzIHZhbHVlICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9TVEFUVVNfU0hJRlQgICAgICAgICAgICAgIDgKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX0FMSUdORUQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBWUE0gUGhhc2UgYWxpZ25lZCBzdGF0dXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX0xPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAkvKiBMb2FkIFZQTSBwaGFzZSBzdGF0dXMgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX0NUUkxfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgkvKiBWUE0gcGhhc2UgY29udHJvbCB2YWx1ZSAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fUEhBU0VfQ1RSTF9TSElGVCAgICAgICAgICAgICAgICAwCisJCQkJCQkJLyogRERSUGhhc2VDdHJsMiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfSU5UUl9TRVJWSUNFRCAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIEFja25vd2xlZGdlIHRoYXQgaW50ZXJydXB0IHdhcyBzZXJ2aWNlZCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfVElNRU9VVF9JTlRSX0VOQUJMRSAgICAgICAgICAgICAweDAxMDAwMDAwCS8qIEVuYWJsZSB0aW1lIG91dCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfRERSX0xPQURfQ09VTlRfUEhBU0VfQ1RSTF9NQVNLICAgICAgMHgwMDAwMDAwRgkvKiBXYWl0IGJlZm9yZSB0b2dnbGluZyBsb2FkX2NoICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9MT0FEX0NPVU5UX1BIQVNFX0NUUkxfU0hJRlQgICAgIDIwCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9UT1RBTF9MT0FEX0NPVU5UX0NUUkxfTUFTSyAgICAgIDB4MDAwMDAwMEYJLyogVG90YWwgd2FpdCB0byBzZXR0bGUgcGhfY3RybCBhbmQgbG9hZF9jaCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfVE9UQUxfTE9BRF9DT1VOVF9DVFJMX1NISUZUICAgICAxNgorI2RlZmluZSBjaGlwY0h3X1JFR19ERFJfUEhBU0VfVElNRU9VVF9DT1VOVF9NQVNLICAgICAgICAweDAwMDBGRkZGCS8qIFRpbWUgb3V0IHZhbHVlIGZvciBERFIgSFcgcGhhc2UgYWxpZ25tZW50ICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX0REUl9QSEFTRV9USU1FT1VUX0NPVU5UX1NISUZUICAgICAgIDAKKwkJCQkJCQkvKiBWUE1QaGFzZUN0cmwyIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFTEVDVF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMJLyogSW50ZXJydXB0IHNlbGVjdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fSU5UUl9TRUxFQ1RfU0hJRlQgICAgICAgICAgICAgICAyNgorI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fSU5UUl9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9JTlRSX0ZBU1QgICAgICAgICAgICAgICAgICAgICAgICgweDEgPDwgY2hpcGNId19SRUdfVlBNX0lOVFJfU0VMRUNUX1NISUZUKQorI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fSU5UUl9NRURJVU0gICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFTEVDVF9TSElGVCkKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX0lOVFJfU0xPVyAgICAgICAgICAgICAgICAgICAgICAgKDB4MyA8PCBjaGlwY0h3X1JFR19WUE1fSU5UUl9TRUxFQ1RfU0hJRlQpCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9JTlRSX1NFUlZJQ0VEICAgICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAJLyogQWNrbm93bGVkZ2UgdGhhdCBpbnRlcnJ1cHQgd2FzIHNlcnZpY2VkICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9USU1FT1VUX0lOVFJfRU5BQkxFICAgICAgICAgICAgIDB4MDEwMDAwMDAJLyogRW5hYmxlIHRpbWUgb3V0IGludGVycnVwdCAqLworI2RlZmluZSBjaGlwY0h3X1JFR19WUE1fTE9BRF9DT1VOVF9QSEFTRV9DVFJMX01BU0sgICAgICAweDAwMDAwMDBGCS8qIFdhaXQgYmVmb3JlIHRvZ2dsaW5nIGxvYWRfY2ggKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX0xPQURfQ09VTlRfUEhBU0VfQ1RSTF9TSElGVCAgICAgMjAKKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1RPVEFMX0xPQURfQ09VTlRfQ1RSTF9NQVNLICAgICAgMHgwMDAwMDAwRgkvKiBUb3RhbCB3YWl0IGN5Y2xlIHRvIHNldHRsZSBwaF9jdHJsIGFuZCBsb2FkX2NoICovCisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9UT1RBTF9MT0FEX0NPVU5UX0NUUkxfU0hJRlQgICAgIDE2CisjZGVmaW5lIGNoaXBjSHdfUkVHX1ZQTV9QSEFTRV9USU1FT1VUX0NPVU5UX01BU0sgICAgICAgIDB4MDAwMEZGRkYJLyogVGltZSBvdXQgdmFsdWUgZm9yIFZQTSBIVyBwaGFzZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgY2hpcGNId19SRUdfVlBNX1BIQVNFX1RJTUVPVVRfQ09VTlRfU0hJRlQgICAgICAgMAorCisjZW5kaWYgLyogQ0hJUENIV19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvZGRyY1JlZy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvZGRyY1JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjY4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kZHJjUmVnLmgKQEAgLTAsMCArMSw4NzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBkZHJjUmVnLmgKKyoKKyogIEBicmllZiAgIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBCQ01SSU5HIEREUjIgQ29udHJvbGxlciBhbmQgUEhZCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgRERSQ19SRUdfSAorI2RlZmluZSBERFJDX1JFR19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGNzcC9yZWcuaD4KKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2NzcC9tbV9pby5oPgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRERSMiBDb250cm9sbGVyIChBUk0gUEwzNDEpIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEFSTSBQTDM0MSBERFIyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBvZmZzZXQgMHgwMDAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJdHlwZWRlZiBzdHJ1Y3QgeworCQl1aW50MzJfdCBtZW1jU3RhdHVzOworCQl1aW50MzJfdCBtZW1jQ21kOworCQl1aW50MzJfdCBkaXJlY3RDbWQ7CisJCXVpbnQzMl90IG1lbW9yeUNmZzsKKwkJdWludDMyX3QgcmVmcmVzaFByZDsKKwkJdWludDMyX3QgY2FzTGF0ZW5jeTsKKwkJdWludDMyX3Qgd3JpdGVMYXRlbmN5OworCQl1aW50MzJfdCB0TXJkOworCQl1aW50MzJfdCB0UmFzOworCQl1aW50MzJfdCB0UmM7CisJCXVpbnQzMl90IHRSY2Q7CisJCXVpbnQzMl90IHRSZmM7CisJCXVpbnQzMl90IHRScDsKKwkJdWludDMyX3QgdFJyZDsKKwkJdWludDMyX3QgdFdyOworCQl1aW50MzJfdCB0V3RyOworCQl1aW50MzJfdCB0WHA7CisJCXVpbnQzMl90IHRYc3I7CisJCXVpbnQzMl90IHRFc3I7CisJCXVpbnQzMl90IG1lbW9yeUNmZzI7CisJCXVpbnQzMl90IG1lbW9yeUNmZzM7CisJCXVpbnQzMl90IHRGYXc7CisJfSBkZHJjUmVnX0NUTFJfTUVNQ19SRUdfdDsKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19SRUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfUkVHUCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX0NUTFJfTUVNQ19SRUdfdCAqKSAgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfQ1RMUl9NRU1DX1JFR19PRkZTRVQpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19CQU5LU19NQVNLICAgICAgICAgICAgICgweDMgPDwgMTIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19CQU5LU180ICAgICAgICAgICAgICAgICgweDAgPDwgMTIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19CQU5LU184ICAgICAgICAgICAgICAgICgweDMgPDwgMTIpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTX01BU0sgICAgICAgICAgKDB4MyA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzAgICAgICAgICAgICAgKDB4MCA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzEgICAgICAgICAgICAgKDB4MSA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzIgICAgICAgICAgICAgKDB4MiA8PCAxMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX01PTklUT1JTXzQgICAgICAgICAgICAgKDB4MyA8PCAxMCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfQ0hJUFNfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDcpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19DSElQU18xICAgICAgICAgICAgICAgICgweDAgPDwgNykKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX0NISVBTXzIgICAgICAgICAgICAgICAgKDB4MSA8PCA3KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfQ0hJUFNfMyAgICAgICAgICAgICAgICAoMHgyIDw8IDcpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19DSElQU180ICAgICAgICAgICAgICAgICgweDMgPDwgNykKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfVFlQRV9NQVNLICAgICAgICAgICAgICAoMHg3IDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19UWVBFX0REUjIgICAgICAgICAgICAgICgweDUgPDwgNCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfV0lEVEhfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19XSURUSF8xNiAgICAgICAgICAgICAgICgweDAgPDwgMikKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX1dJRFRIXzMyICAgICAgICAgICAgICAgKDB4MSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfV0lEVEhfNjQgICAgICAgICAgICAgICAoMHgyIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19XSURUSF8xMjggICAgICAgICAgICAgICgweDMgPDwgMikKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfU1RBVEVfTUFTSyAgICAgICAgICAgICAoMHgzIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19TVEFURV9DT05GSUcgICAgICAgICAgICgweDAgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfU1RBVFVTX1NUQVRFX1JFQURZICAgICAgICAgICAgKDB4MSA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19TVEFUVVNfU1RBVEVfUEFVU0VEICAgICAgICAgICAoMHgyIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX1NUQVRVU19TVEFURV9MT1dQV1IgICAgICAgICAgICgweDMgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19DTURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoMHg3IDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX0NNRF9HTyAgICAgICAgICAgICAgICAgICAgICAgICgweDAgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfQ01EX1NMRUVQICAgICAgICAgICAgICAgICAgICAgKDB4MSA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19DTURfV0FLRVVQICAgICAgICAgICAgICAgICAgICAoMHgyIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1DX0NNRF9QQVVTRSAgICAgICAgICAgICAgICAgICAgICgweDMgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTUNfQ01EX0NPTkZJR1VSRSAgICAgICAgICAgICAgICAgKDB4NCA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNQ19DTURfQUNUSVZFX1BBVVNFICAgICAgICAgICAgICAoMHg3IDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQ0hJUF9TSElGVCAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQ0hJUF9NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX0NUTFJfRElSRUNUX0NNRF9DSElQX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfUFJFQ0hBUkdFQUxMICAgICAgICgweDAgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfQVVUT1JFRlJFU0ggICAgICAgICgweDEgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfTU9ERVJFRyAgICAgICAgICAgICgweDIgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX1RZUEVfTk9QICAgICAgICAgICAgICAgICgweDMgPDwgMTgpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQkFOS19TSElGVCAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQkFOS19NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX0NUTFJfRElSRUNUX0NNRF9CQU5LX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9ESVJFQ1RfQ01EX0FERFJfU0hJRlQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQUREUl9NQVNLICAgICAgICAgICAgICAgKDB4MWZmZmYgPDwgZGRyY1JlZ19DVExSX0RJUkVDVF9DTURfQUREUl9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF9NQVNLICAgICAgICAgICAoMHgzIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF8xICAgICAgICAgICAgICAoMHgwIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF8yICAgICAgICAgICAgICAoMHgxIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF8zICAgICAgICAgICAgICAoMHgyIDw8IDIxKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19DSElQX0NOVF80ICAgICAgICAgICAgICAoMHgzIDw8IDIxKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEX01BU0sgICAgICAgICAgICgweDcgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzNfMCAgICAgICAgICAgICgweDAgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzRfMSAgICAgICAgICAgICgweDEgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzVfMiAgICAgICAgICAgICgweDIgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzZfMyAgICAgICAgICAgICgweDMgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzdfNCAgICAgICAgICAgICgweDQgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzhfNSAgICAgICAgICAgICgweDUgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzlfNiAgICAgICAgICAgICgweDYgPDwgMTgpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1FPU19BUklEXzEwXzcgICAgICAgICAgICgweDcgPDwgMTgpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQlVSU1RfTEVOX01BU0sgICAgICAgICAgKDB4NyA8PCAxNSkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQlVSU1RfTEVOXzQgICAgICAgICAgICAgKDB4MiA8PCAxNSkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQlVSU1RfTEVOXzggICAgICAgICAgICAgKDB4MyA8PCAxNSkJLyogQG5vdGUgTm90IHN1cHBvcnRlZCBpbiBQTDM0MSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX1BXUkRPV05fRU5BQkxFICAgICAgICAgICgweDEgPDwgMTMpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfUFdSRE9XTl9DWUNMRVNfU0hJRlQgICAgNworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19QV1JET1dOX0NZQ0xFU19NQVNLICAgICAoMHgzZiA8PCBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19QV1JET1dOX0NZQ0xFU19TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfUk9XX0JJVFNfTUFTSyAgICAgICAoMHg3IDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX0FYSV9ST1dfQklUU18xMSAgICAgICAgICgweDAgPDwgMykKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX1JPV19CSVRTXzEyICAgICAgICAgKDB4MSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfUk9XX0JJVFNfMTMgICAgICAgICAoMHgyIDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX0FYSV9ST1dfQklUU18xNCAgICAgICAgICgweDMgPDwgMykKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX1JPV19CSVRTXzE1ICAgICAgICAgKDB4NCA8PCAzKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfUk9XX0JJVFNfMTYgICAgICAgICAoMHg1IDw8IDMpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX0NPTF9CSVRTX01BU0sgICAgICAgKDB4NyA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGR19BWElfQ09MX0JJVFNfOSAgICAgICAgICAoMHgxIDw8IDApCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHX0FYSV9DT0xfQklUU18xMCAgICAgICAgICgweDIgPDwgMCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkdfQVhJX0NPTF9CSVRTXzExICAgICAgICAgKDB4MyA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9SRUZSRVNIX1BSRF9TSElGVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1JFRlJFU0hfUFJEX01BU0sgICAgICAgICAgICAgICAgICAgKDB4N2ZmZiA8PCBkZHJjUmVnX0NUTFJfUkVGUkVTSF9QUkRfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NBU19MQVRFTkNZX1NISUZUICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0FTX0xBVEVOQ1lfTUFTSyAgICAgICAgICAgICAgICAgICAoMHg3IDw8IGRkcmNSZWdfQ1RMUl9DQVNfTEFURU5DWV9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfV1JJVEVfTEFURU5DWV9TSElGVCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9XUklURV9MQVRFTkNZX01BU0sgICAgICAgICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19DVExSX1dSSVRFX0xBVEVOQ1lfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfTVJEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9NUkRfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfVF9NUkRfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkFTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SQVNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxZiA8PCBkZHJjUmVnX0NUTFJfVF9SQVNfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SQ19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxZiA8PCBkZHJjUmVnX0NUTFJfVF9SQ19TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SQ0RfU0NIRURVTEVfREVMQVlfU0hJRlQgICAgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JDRF9TQ0hFRFVMRV9ERUxBWV9NQVNLICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19DVExSX1RfUkNEX1NDSEVEVUxFX0RFTEFZX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JDRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkNEX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfVF9SQ0RfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkZDX1NDSEVEVUxFX0RFTEFZX1NISUZUICAgICAgICAgOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SRkNfU0NIRURVTEVfREVMQVlfTUFTSyAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfVF9SRkNfU0NIRURVTEVfREVMQVlfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUkZDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SRkNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfVF9SRkNfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUlBfU0NIRURVTEVfREVMQVlfU0hJRlQgICAgICAgICAgOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SUF9TQ0hFRFVMRV9ERUxBWV9NQVNLICAgICAgICAgICAoMHg3IDw8IGRkcmNSZWdfQ1RMUl9UX1JQX1NDSEVEVUxFX0RFTEFZX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfUlBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX0NUTFJfVF9SUF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9SUkRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1JSRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweGYgPDwgZGRyY1JlZ19DVExSX1RfUlJEX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1dSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfV1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfVF9XUl9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9XVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1dUUl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19DVExSX1RfV1RSX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX1hQX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfWFBfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1RfWFBfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfWFNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9YU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmZiA8PCBkZHJjUmVnX0NUTFJfVF9YU1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1RfRVNSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9FU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAoMHhmZiA8PCBkZHJjUmVnX0NUTFJfVF9FU1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX1dJRFRIX01BU0sgICAgICAgICAgICAgKDB4MyA8PCA2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfV0lEVEhfMTZCSVRTICAgICAgICAgICAoMCA8PCA2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfV0lEVEhfMzJCSVRTICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfV0lEVEhfNjRCSVRTICAgICAgICAgICAoMiA8PCA2KQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHMl9BWElfQkFOS19CSVRTX01BU0sgICAgICgweDMgPDwgNCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX0FYSV9CQU5LX0JJVFNfMiAgICAgICAgKDAgPDwgNCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX0FYSV9CQU5LX0JJVFNfMyAgICAgICAgKDMgPDwgNCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0tFX0lOSVRfU1RBVEVfTE9XICAgICAoMCA8PCAzKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0tFX0lOSVRfU1RBVEVfSElHSCAgICAoMSA8PCAzKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHMl9EUU1fSU5JVF9TVEFURV9MT1cgICAgICgwIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHMl9EUU1fSU5JVF9TVEFURV9ISUdIICAgICgxIDw8IDIpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkcyX0NMS19NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0xLX0FTWU5DICAgICAgICAgICAgICAoMCA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0xLX1NZTkNfQV9MRV9NICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzJfQ0xLX1NZTkNfQV9HVF9NICAgICAgICAoMyA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9NRU1PUllfQ0ZHM19SRUZSRVNIX1RPX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX01FTU9SWV9DRkczX1JFRlJFU0hfVE9fTUFTSyAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfTUVNT1JZX0NGRzNfUkVGUkVTSF9UT19TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9GQVdfU0NIRURVTEVfREVMQVlfU0hJRlQgICAgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX0ZBV19TQ0hFRFVMRV9ERUxBWV9NQVNLICAgICAgICAgICgweDFmIDw8IGRkcmNSZWdfQ1RMUl9UX0ZBV19TQ0hFRFVMRV9ERUxBWV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVF9GQVdfUEVSSU9EX1NISUZUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9UX0ZBV19QRVJJT0RfTUFTSyAgICAgICAgICAgICAgICAgICgweDFmIDw8IGRkcmNSZWdfQ1RMUl9UX0ZBV19QRVJJT0RfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQVJNIFBMMzQxIEFYSSBJRCBRT1MgY29uZmlndXJhdGlvbiByZWdpc3RlcnMsIG9mZnNldCAweDEwMCAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19DTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRkcmNSZWdfQ1RMUl9RT1NfQ05UIC0gMSkKKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgY2ZnW2RkcmNSZWdfQ1RMUl9RT1NfQ05UXTsKKwl9IGRkcmNSZWdfQ1RMUl9RT1NfUkVHX3Q7CisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19SRUdfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19SRUdQICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX0NUTFJfUU9TX1JFR190ICopIChNTV9JT19CQVNFX0REUkMgKyBkZHJjUmVnX0NUTFJfUU9TX1JFR19PRkZTRVQpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9RT1NfQ0ZHX01BWF9TSElGVCAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19DRkdfTUFYX01BU0sgICAgICAgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1FPU19DRkdfTUFYX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9RT1NfQ0ZHX01JTl9TSElGVCAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1FPU19DRkdfTUlOX01BU0sgICAgICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1FPU19DRkdfTUlOX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9RT1NfQ0ZHX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQVJNIFBMMzQxIE1lbW9yeSBjaGlwIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBvZmZzZXQgMHgyMDAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NOVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRkcmNSZWdfQ1RMUl9DSElQX0NOVCAtIDEpCisKKwl0eXBlZGVmIHN0cnVjdCB7CisJCXVpbnQzMl90IGNmZ1tkZHJjUmVnX0NUTFJfQ0hJUF9DTlRdOworCX0gZGRyY1JlZ19DVExSX0NISVBfUkVHX3Q7CisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfUkVHX09GRlNFVCAgICAgICAgICAgICAgICAgICAgMHgyMDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfUkVHUCAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX0NUTFJfQ0hJUF9SRUdfdCAqKSAoTU1fSU9fQkFTRV9ERFJDICsgZGRyY1JlZ19DVExSX0NISVBfUkVHX09GRlNFVCkpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX0NISVBfQ0ZHX01FTV9PUkdfTUFTSyAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NGR19NRU1fT1JHX1JPV19CQU5LX0NPTCAgICAgICgwIDw8IDE2KQorI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0hJUF9DRkdfTUVNX09SR19CQU5LX1JPV19DT0wgICAgICAoMSA8PCAxNikKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0hJUF9DRkdfQVhJX0FERFJfTUFUQ0hfU0hJRlQgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVRDSF9NQVNLICAgICAgICgweGZmIDw8IGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVRDSF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfQ0hJUF9DRkdfQVhJX0FERFJfTUFTS19TSElGVCAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVNLX01BU0sgICAgICAgICgweGZmIDw8IGRkcmNSZWdfQ1RMUl9DSElQX0NGR19BWElfQUREUl9NQVNLX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIEFSTSBQTDM0MSBVc2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBvZmZzZXQgMHgzMDAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF9DTlQgICAgICAgICAgICAgICAgICAgIDIKKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgaW5wdXQ7CisJCXVpbnQzMl90IG91dHB1dFtkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfQ05UXTsKKwkJdWludDMyX3QgZmVhdHVyZTsKKwl9IGRkcmNSZWdfQ1RMUl9VU0VSX1JFR190OworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX1JFR19PRkZTRVQgICAgICAgICAgICAgICAgICAgIDB4MzAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX1JFR1AgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgZGRyY1JlZ19DVExSX1VTRVJfUkVHX3QgKikgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfQ1RMUl9VU0VSX1JFR19PRkZTRVQpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX0lOUFVUX1NUQVRVU19TSElGVCAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1VTRVJfSU5QVVRfU1RBVFVTX01BU0sgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1VTRVJfSU5QVVRfU1RBVFVTX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF9DRkdfU0hJRlQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUX0NGR19NQVNLICAgICAgICAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUX0NGR19TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfMF9DRkdfU1lOQ19CUklER0VfU0hJRlQgICAgICAxCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9NQVNLICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUXzBfQ0ZHX1NZTkNfQlJJREdFX0JQMTM0ICAgICAgKDAgPDwgZGRyY1JlZ19DVExSX1VTRVJfT1VUUFVUXzBfQ0ZHX1NZTkNfQlJJREdFX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfMF9DRkdfU1lOQ19CUklER0VfUEwzMDEgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfVVNFUl9PVVRQVVRfMF9DRkdfU1lOQ19CUklER0VfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9SRUdJU1RFUkVEIGRkcmNSZWdfQ1RMUl9VU0VSX09VVFBVVF8wX0NGR19TWU5DX0JSSURHRV9QTDMwMQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9GRUFUVVJFX1dSSVRFX0JMT0NLX0RJU0FCTEUgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9GRUFUVVJFX0VBUkxZX0JVUlNUX1JTUF9ESVNBQkxFICAgICgxIDw8IDApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBCcm9hZGNvbSBERFIyMyBQSFkgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQnJvYWRjb20gRERSMjMgUEhZIEFkZHJlc3MgYW5kIENvbnRyb2wgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisJdHlwZWRlZiBzdHJ1Y3QgeworCQl1aW50MzJfdCByZXZpc2lvbjsKKwkJdWludDMyX3QgcG1DdGw7CisJCSBSRUczMl9SU1ZEKDB4MDAwOCwgMHgwMDEwKTsKKwkJdWludDMyX3QgcGxsU3RhdHVzOworCQl1aW50MzJfdCBwbGxDZmc7CisJCXVpbnQzMl90IHBsbFByZURpdjsKKwkJdWludDMyX3QgcGxsRGl2OworCQl1aW50MzJfdCBwbGxDdGwxOworCQl1aW50MzJfdCBwbGxDdGwyOworCQl1aW50MzJfdCBzc0N0bDsKKwkJdWludDMyX3Qgc3NDZmc7CisJCXVpbnQzMl90IHZkbFN0YXRpYzsKKwkJdWludDMyX3QgdmRsRHluYW1pYzsKKwkJdWludDMyX3QgcGFkSWRsZTsKKwkJdWludDMyX3QgcHZ0Q29tcDsKKwkJdWludDMyX3QgcGFkRHJpdmU7CisJCXVpbnQzMl90IGNsa1JnbHRyQ3RsOworCX0gZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHX3Q7CisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHX09GRlNFVCAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFR1AgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVHX3QgKikgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFR19PRkZTRVQpKQorCisvKiBAdG9kbyBUaGVzZSBTUyBkZWZpbml0aW9ucyBhcmUgZHVwbGljYXRlcyBvZiBvbmVzIGJlbG93ICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9TU19DVFJMX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX1NTX0NGR19DWUNMRV9QRVJfVElDS19NQVNLICAgICAweEZGRkYwMDAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX0NZQ0xFX1BFUl9USUNLX1NISUZUICAgIDE2CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX01JTl9DWUNMRV9QRVJfVElDSyAgICAgIDEwCS8qIEhpZ2hlciB0aGUgdmFsdWUsIGxvd2VyIHRoZSBTUyBtb2R1bGF0aW9uIGZyZXF1ZW5jeSAqLworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX1NTX0NGR19ORElWX0FNUExJVFVERV9NQVNLICAgICAweDAwMDBGRkZGCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfU1NfQ0ZHX05ESVZfQU1QTElUVURFX1NISUZUICAgIDAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9SRVZJU0lPTl9NQUpPUl9TSElGVCAgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFVklTSU9OX01BSk9SX01BU0sgICAgICAgICgweGZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFVklTSU9OX01BSk9SX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1JFVklTSU9OX01JTk9SX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVWSVNJT05fTUlOT1JfTUFTSyAgICAgICAgKDB4ZmYgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUkVWSVNJT05fTUlOT1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfQ0xLX1BNX0NUTF9ERFJfQ0xLX0RJU0FCTEUgKDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfU1RBVFVTX0xPQ0tFRCAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfRElWMl9DTEtfUkVTRVQgICAgICgxIDw8IDMxKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVEVTVF9TRUxfU0hJRlQgICAgIDE3CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVEVTVF9TRUxfTUFTSyAgICAgICgweDFmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVEVTVF9TRUxfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NGR19URVNUX0VOQUJMRSAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NGR19CR0FQX0FESl9TSElGVCAgICAgMTIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NGR19CR0FQX0FESl9NQVNLICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ0ZHX0JHQVBfQURKX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfVkNPX1JORyAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQ0gxX1BXUkRXTiAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQllQQVNTX0VOQUJMRSAgICAgICgxIDw8IDUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQ0xLT1VUX0VOQUJMRSAgICAgICgxIDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfRF9SRVNFVCAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfQV9SRVNFVCAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DRkdfUFdSRFdOICAgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfRElUSEVSX01GQiAgICAgKDEgPDwgMjYpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX1BXUkRXTiAgICAgICAgICgxIDw8IDI1KQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX01PREVfU0hJRlQgICAgIDIwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX01PREVfTUFTSyAgICAgICgweDcgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfTU9ERV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9JTlRfU0hJRlQgICAgICA4CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX0lOVF9NQVNLICAgICAgICgweDFmZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9JTlRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfUDJfU0hJRlQgICAgICAgNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9QMl9NQVNLICAgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX1AyX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9QUkVfRElWX1AxX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1BSRV9ESVZfUDFfTUFTSyAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfUFJFX0RJVl9QMV9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfRElWX00xX1NISUZUICAgICAgICAgICAyNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfRElWX00xX01BU0sgICAgICAgICAgICAoMHhmZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfRElWX00xX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9ESVZfRlJBQ19TSElGVCAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0RJVl9GUkFDX01BU0sgICAgICAgICAgKDB4ZmZmZmZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9ESVZfRlJBQ19TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9URVNUQV9TSElGVCAgICAgICAzMAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9URVNUQV9NQVNLICAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1RFU1RBX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0tWQ09fWFNfU0hJRlQgICAgIDI3CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0tWQ09fWFNfTUFTSyAgICAgICgweDcgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfS1ZDT19YU19TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9LVkNPX1hGX1NISUZUICAgICAyNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9LVkNPX1hGX01BU0sgICAgICAoMHg3IDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0tWQ09fWEZfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfTFBGX0JXX1NISUZUICAgICAgMjIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfTFBGX0JXX01BU0sgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9MUEZfQldfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfTEZfT1JERVIgICAgICAgICAgKDB4MSA8PCAyMSkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DTl9TSElGVCAgICAgICAgICAxOQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DTl9NQVNLICAgICAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0NOX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JOX1NISUZUICAgICAgICAgIDE3CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JOX01BU0sgICAgICAgICAgICgweDMgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfUk5fU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfQ1BfU0hJRlQgICAgICAgICAgMTUKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfQ1BfTUFTSyAgICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DUF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DWl9TSElGVCAgICAgICAgICAxMworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9DWl9NQVNLICAgICAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0NaX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JaX1NISUZUICAgICAgICAgIDEwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX1JaX01BU0sgICAgICAgICAgICgweDcgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfUlpfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfSUNQWF9TSElGVCAgICAgICAgNQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9JQ1BYX01BU0sgICAgICAgICAoMHgxZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMV9JQ1BYX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwxX0lDUF9PRkZfU0hJRlQgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfSUNQX09GRl9NQVNLICAgICAgKDB4MWYgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDFfSUNQX09GRl9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDJfUFRBUF9BREpfU0hJRlQgICAgNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMl9QVEFQX0FESl9NQVNLICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwyX1BUQVBfQURKX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwyX0NUQVBfQURKX1NISUZUICAgIDIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX0NUTDJfQ1RBUF9BREpfTUFTSyAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMl9DVEFQX0FESl9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfQ1RMMl9MT1dDVVJfRU5BQkxFICAgICAoMHgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9DVEwyX0JJQVNJTl9FTkFCTEUgICAgICgweDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QTExfU1NfRU5fRU5BQkxFICAgICAgICAgICAoMHgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUExMX1NTX0NGR19DWUNfUEVSX1RJQ0tfU0hJRlQgIDE2CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfQ1lDX1BFUl9USUNLX01BU0sgICAoMHhmZmZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfQ1lDX1BFUl9USUNLX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfTkRJVl9BTVBfU0hJRlQgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfTkRJVl9BTVBfTUFTSyAgICAgICAoMHhmZmZmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BMTF9TU19DRkdfTkRJVl9BTVBfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfRk9SQ0UgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfU1RBVElDX09WUl9FTkFCTEUgICAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfRkFMTF9TSElGVCAgICAgIDEyCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9TVEFUSUNfT1ZSX0ZBTExfTUFTSyAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9TVEFUSUNfT1ZSX0ZBTExfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfUklTRV9TSElGVCAgICAgIDgKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfUklTRV9NQVNLICAgICAgICgweDMgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfUklTRV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfU1RBVElDX09WUl9TVEVQX1NISUZUICAgICAgMAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfU1RBVElDX09WUl9TVEVQX01BU0sgICAgICAgKDB4M2YgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX1NUQVRJQ19PVlJfU1RFUF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfRFlOQU1JQ19PVlJfRU5BQkxFICAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfVkRMX0RZTkFNSUNfT1ZSX0ZBTExfU0hJRlQgICAgIDEyCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9GQUxMX01BU0sgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9GQUxMX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9SSVNFX1NISUZUICAgICA4CisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9SSVNFX01BU0sgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9SSVNFX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9TVEVQX1NISUZUICAgICAwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1ZETF9EWU5BTUlDX09WUl9TVEVQX01BU0sgICAgICAoMHgzZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9WRExfRFlOQU1JQ19PVlJfU1RFUF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfSURMRV9FTkFCTEUgICAgICAgICAgICAoMXUgPDwgMzEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX1JYRU5CX0RJU0FCTEUgICAgICgxIDw8IDgpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NUTF9JRERRX0RJU0FCTEUgICgxIDw8IDYpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NUTF9SRUJfRElTQUJMRSAgICgxIDw8IDUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NUTF9PRUJfRElTQUJMRSAgICgxIDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NLRV9JRERRX0RJU0FCTEUgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NLRV9SRUJfRElTQUJMRSAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BBRF9JRExFX0NLRV9PRUJfRElTQUJMRSAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfUERfRE9ORSAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX05EX0RPTkUgICAgICAgICAgICgxIDw8IDI5KQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9TQU1QTEVfRE9ORSAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfU0FNUExFX0FVVE9fRU5BQkxFICAgICgxIDw8IDI3KQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9TQU1QTEVfRU5BQkxFICAgICAoMSA8PCAyNikKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfQUREUl9PVlJfRU5BQkxFICAgKDEgPDwgMjUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0RRX09WUl9FTkFCTEUgICAgICgxIDw8IDI0KQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX1BEX1NISUZUICAgICAgICAgIDIwCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX1BEX01BU0sgICAgICAgICAgICgweGYgPDwgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfUERfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfTkRfU0hJRlQgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfTkRfTUFTSyAgICAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9ORF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9BRERSX1BEX1NISUZUICAgICAxMgorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9BRERSX1BEX01BU0sgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0FERFJfUERfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfQUREUl9ORF9TSElGVCAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9BRERSX05EX01BU0sgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0FERFJfTkRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfRFFfUERfU0hJRlQgICAgICAgNAorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9EUV9QRF9NQVNLICAgICAgICAoMHhmIDw8IGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0RRX1BEX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX1BWVF9DT01QX0RRX05EX1NISUZUICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQUREUl9DVExfUFZUX0NPTVBfRFFfTkRfTUFTSyAgICAgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9BRERSX0NUTF9QVlRfQ09NUF9EUV9ORF9TSElGVCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfUlQ2MEIgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0VMX1NTVEwxOCAgICAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0VMVFhEUlZfQ0kgICAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0VMUlhEUlYgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9BRERSX0NUTF9QQURfRFJJVkVfU0xFVyAgICAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX0NMS19SR0xUUl9DVExfUFdSX0hBTEYgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0FERFJfQ1RMX0NMS19SR0xUUl9DVExfUFdSX09GRiAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQnJvYWRjb20gRERSMjMgUEhZIEJ5dGUgTGFuZSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX0NOVCAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfTUFYICAgICAgICAgICAgICAgICAgICAgICAoZGRyY1JlZ19DVExSX0JZVEVfTEFORV9DTlQgLSAxKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0NOVCAgICAgICAgICAgICAgIDgKKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgcmV2aXNpb247CisJCXVpbnQzMl90IHZkbENhbGlicmF0ZTsKKwkJdWludDMyX3QgdmRsU3RhdHVzOworCQkgUkVHMzJfUlNWRCgweDAwMGMsIDB4MDAxMCk7CisJCXVpbnQzMl90IHZkbE92ZXJyaWRlW2RkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0NOVF07CisJCXVpbnQzMl90IHJlYWRDdGw7CisJCXVpbnQzMl90IHJlYWRTdGF0dXM7CisJCXVpbnQzMl90IHJlYWRDbGVhcjsKKwkJdWludDMyX3QgcGFkSWRsZUN0bDsKKwkJdWludDMyX3QgcGFkRHJpdmVDdGw7CisJCXVpbnQzMl90IHBhZENsa0N0bDsKKwkJdWludDMyX3Qgd3JpdGVDdGw7CisJCXVpbnQzMl90IGNsa1JlZ0N0bDsKKwl9IGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUdfdDsKKworLyogVGhlcmUgYXJlIDIgaW5zdGFuY2VzIG9mIHRoZSBieXRlIExhbmUgcmVnaXN0ZXJzLCBvbmUgZm9yIGVhY2ggYnl0ZSBsYW5lLiAqLworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfMV9SRUdfT0ZGU0VUICAgICAgICAgICAgICAweDA1MDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FXzJfUkVHX09GRlNFVCAgICAgICAgICAgICAgMHgwNjAwCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FXzFfUkVHUCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVHX3QgKikgKE1NX0lPX0JBU0VfRERSQyArIGRkcmNSZWdfUEhZX0JZVEVfTEFORV8xX1JFR19PRkZTRVQpKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfMl9SRUdQICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUdfdCAqKSAoTU1fSU9fQkFTRV9ERFJDICsgZGRyY1JlZ19QSFlfQllURV9MQU5FXzJfUkVHX09GRlNFVCkpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFVklTSU9OX01BSk9SX1NISUZUICAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUFKT1JfTUFTSyAgICAgICAoMHhmZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUFKT1JfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFVklTSU9OX01JTk9SX1NISUZUICAgICAgMAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUlOT1JfTUFTSyAgICAgICAoMHhmZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVWSVNJT05fTUlOT1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9DQUxJQl9DTEtfMkNZQ0xFICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9DQUxJQl9DTEtfMUNZQ0xFICAgICAgKDAgPDwgNCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX1RFU1QgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX0FMV0FZUyAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX09OQ0UgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX0NBTElCX0ZBU1QgICAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgYnl0ZSBsYW5lIFZETCBzdGF0dXMgY2FsaWJUb3RhbFs5OjBdIGlzIGNvbXByaXNlZCBvZiBbOTo0XSBzdGVwIHZhbHVlLCBbMzoyXSBmaW5lIGZhbGwgKi8KKy8qIGFuZCBbMTowXSBmaW5lIHJpc2UuIE5vdGUgdGhhdCBjYWxpYlRvdGFsWzk6MF0gaXMgbG9jYXRlZCBhdCBiaXQgNCBpbiB0aGUgVkRMIHN0YXR1cyAqLworLyogcmVnaXN0ZXIuIFRoZSBmaW5lIHJpc2UgYW5kIGZhbGwgYXJlIG5vIGxvbmdlciB1c2VkLCBzbyBhZGQgc29tZSBkZWZpbml0aW9ucyBmb3IganVzdCAqLworLyogdGhlIHN0ZXAgc2V0dGluZyB0byBzaW1wbGlmeSB0aGluZ3MuICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9TVEFUVVNfU1RFUF9TSElGVCAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX1NUQVRVU19TVEVQX01BU0sgICAgICAoMHgzZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX1NUQVRVU19TVEVQX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX1RPVEFMX1NISUZUICAgIDQKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9TVEFUVVNfVE9UQUxfTUFTSyAgICAgKDB4M2ZmIDw8IGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX1RPVEFMX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX0xPQ0sgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfU1RBVFVTX0lETEUgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfRU5BQkxFICAgICAgICAgICAgKDEgPDwgMTYpCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfRkFMTF9TSElGVCAgICAgICAgMTIKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfRkFMTF9NQVNLICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9GQUxMX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX1JJU0VfU0hJRlQgICAgICAgIDgKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfUklTRV9NQVNLICAgICAgICAgKDB4MyA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9SSVNFX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX1NURVBfU0hJRlQgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfU1RFUF9NQVNLICAgICAgICAgKDB4M2YgPDwgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfU1RFUF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9JRFhfU1RBVElDX1JFQURfRFFTX1AgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfSURYX1NUQVRJQ19SRUFEX0RRU19OICAgICAxCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0lEWF9TVEFUSUNfUkVBRF9FTiAgICAgICAgMgorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9JRFhfU1RBVElDX1dSSVRFX0RRX0RRTSAgIDMKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfSURYX0RZTkFNSUNfUkVBRF9EUVNfUCAgICA0CisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9WRExfT1ZSX0lEWF9EWU5BTUlDX1JFQURfRFFTX04gICAgNQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfVkRMX09WUl9JRFhfRFlOQU1JQ19SRUFEX0VOICAgICAgIDYKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1ZETF9PVlJfSURYX0RZTkFNSUNfV1JJVEVfRFFfRFFNICA3CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFQURfQ1RMX0RFTEFZX1NISUZUICAgICAgOAorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfREVMQVlfTUFTSyAgICAgICAoMHgzIDw8IGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUFEX0NUTF9ERUxBWV9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfRFFfT0RUX0VOQUJMRSAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfRFFfT0RUX0FESlVTVCAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfUkRfT0RUX0VOQUJMRSAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9DVExfUkRfT0RUX0FESlVTVCAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9SRUFEX1NUQVRVU19FUlJPUl9TSElGVCAgIDAKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFQURfU1RBVFVTX0VSUk9SX01BU0sgICAgKDB4ZiA8PCBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUkVBRF9TVEFUVVNfRVJST1JfU0hJRlQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1JFQURfQ0xFQVJfU1RBVFVTICAgICAgICAgKDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAoMXUgPDwgMzEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfRE1fUlhFTkJfRElTQUJMRSAgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RNX0lERFFfRElTQUJMRSAgICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9JRExFX0NUTF9ETV9SRUJfRElTQUJMRSAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfRE1fT0VCX0RJU0FCTEUgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRX1JYRU5CX0RJU0FCTEUgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9JRExFX0NUTF9EUV9JRERRX0RJU0FCTEUgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfRFFfUkVCX0RJU0FCTEUgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRX09FQl9ESVNBQkxFICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9JRExFX0NUTF9SRUFEX0VOQl9SWEVOQl9ESVNBQkxFICAgKDEgPDwgMTEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfSURMRV9DVExfUkVBRF9FTkJfSUREUV9ESVNBQkxFICAgICgxIDw8IDEwKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX1JFQURfRU5CX1JFQl9ESVNBQkxFICAgICAoMSA8PCA5KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX1JFQURfRU5CX09FQl9ESVNBQkxFICAgICAoMSA8PCA4KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19SWEVOQl9ESVNBQkxFICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19JRERRX0RJU0FCTEUgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19SRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0RRU19PRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19SWEVOQl9ESVNBQkxFICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19JRERRX0RJU0FCTEUgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19SRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfUEFEX0lETEVfQ1RMX0NMS19PRUJfRElTQUJMRSAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1JUNjBCX0REUl9SRUFEX0VOQiAgICAgICgxIDw8IDUpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1JUNjBCICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NFTF9TU1RMMTggICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NFTFRYRFJWX0NJICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NFTFJYRFJWICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9QQURfRFJJVkVfQ1RMX1NMRVcgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgZGRyY1JlZ19QSFlfQllURV9MQU5FX1BBRF9DTEtfQ1RMX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBkZHJjUmVnX1BIWV9CWVRFX0xBTkVfV1JJVEVfQ1RMX1BSRUFNQkxFX0REUjMgICAgICAgICAgICAgICAoMSA8PCAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9DTEtfUkVHX0NUTF9QV1JfSEFMRiAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIGRkcmNSZWdfUEhZX0JZVEVfTEFORV9DTEtfUkVHX0NUTF9QV1JfT0ZGICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBUk0gUEwzNDEgRERSQyB0byBCcm9hZGNvbSBERFIyMyBQSFkgZ2x1ZSByZWdpc3RlciBkZWZpbml0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXR5cGVkZWYgc3RydWN0IHsKKwkJdWludDMyX3QgY2ZnOworCQl1aW50MzJfdCBhY3RNb25DbnQ7CisJCXVpbnQzMl90IGN0bDsKKwkJdWludDMyX3QgbGJpc3RDdGw7CisJCXVpbnQzMl90IGxiaXN0U2VlZDsKKwkJdWludDMyX3QgbGJpc3RTdGF0dXM7CisJCXVpbnQzMl90IHRpZU9mZjsKKwkJdWludDMyX3QgYWN0TW9uQ2xlYXI7CisJCXVpbnQzMl90IHN0YXR1czsKKwkJdWludDMyX3QgdXNlcjsKKwl9IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9SRUdfdDsKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMAorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfUkVHUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX1JFR190ICopIChNTV9JT19CQVNFX0REUkMgKyBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfT0ZGU0VUKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogRERSMiAvIEFYSSBibG9jayBwaGFzZSBhbGlnbm1lbnQgaW50ZXJydXB0IGNvbnRyb2wgKi8KKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICgweDMgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09GRiAgICAgICAgICAgICAgICAgICAgICAgKDAgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09OX1RJR0hUICAgICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09OX01FRElVTSAgICAgICAgICAgICAgICAgKDIgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfSU5UX09OX0xPT1NFICAgICAgICAgICAgICAgICAgKDMgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19JTlRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QTExfUkVGQ0xLX1NISUZUICAgICAgICAgICAgICAxNworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1BMTF9SRUZDTEtfTUFTSyAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfUExMX1JFRkNMS19TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QTExfUkVGQ0xLX0RJRkZFUkVOVElBTCAgICAgICAoMCA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1BMTF9SRUZDTEtfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfUExMX1JFRkNMS19DTU9TICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QTExfUkVGQ0xLX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfRElWMkNMS19UUkVFX1NISUZUICAgICAgICAgICAgMTYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19ESVYyQ0xLX1RSRUVfTUFTSyAgICAgICAgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19ESVYyQ0xLX1RSRUVfREVFUCAgICAgICAgICAgICAoMCA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19ESVYyQ0xLX1RSRUVfU0hBTExPVyAgICAgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19IV19GSVhFRF9BTElHTk1FTlRfRElTQUJMRUQgICBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RJVjJDTEtfVFJFRV9TSEFMTE9XCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19TWU5DX0JSSURHRV9TSElGVCAgICAgICAgICAgICAxNQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1NZTkNfQlJJREdFX01BU0sgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfU1lOQ19CUklER0VfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfU1lOQ19CUklER0VfQlAxMzQgICAgICAgICAgICAgKDAgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19TWU5DX0JSSURHRV9TSElGVCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19TWU5DX0JSSURHRV9QTDMwMSAgICAgICAgICAgICAoMSA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1NZTkNfQlJJREdFX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX1NZTkNfQlJJREdFX1JFR0lTVEVSRUQgICAgICAgIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfU1lOQ19CUklER0VfUEwzMDEKKworLyogU29mdHdhcmUgY29udHJvbCBvZiBQSFkgVkRMIHVwZGF0ZXMgZnJvbSBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmdzLiBCaXQgMTMgZW5hYmxlcyB0aGUgdXNlIG9mIEJpdCAxNC4gKi8KKy8qIElmIHNvZnR3YXJlIGNvbnRyb2wgaXMgbm90IGVuYWJsZWQsIHRoZW4gdXBkYXRlcyBvY2N1ciB3aGVuIGEgcmVmcmVzaCBjb21tYW5kIGlzIGlzc3VlZCBieSB0aGUgaGFyZHdhcmUgKi8KKy8qIGNvbnRyb2xsZXIuIElmIDIgY2hpcHMgc2VsZWN0cyBhcmUgYmVpbmcgdXNlZCwgdGhlbiBzb2Z0d2FyZSBjb250cm9sIG11c3QgYmUgZW5hYmxlZC4gKi8KKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfVkRMX1VQREFURV9TV19DVExfTE9BRCAgICAoMSA8PCAxNCkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfVkRMX1VQREFURV9TV19DVExfRU5BQkxFICAoMSA8PCAxMykKKworLyogVXNlIHRoZXNlIHRvIGJ5cGFzcyBhIHBpcGVsaW5lIHN0YWdlLiBCeSBkZWZhdWx0IHRoZSBBRERSIGlzIG9mZiBidXQgdGhlIEJZVEUgTEFORSBpbiAvIG91dCBhcmUgb24uICovCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfUEhZX0FERFJfQ1RMX0lOX0JZUEFTU19QSVBFTElORV9TVEFHRSAoMSA8PCAxMikKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfQllURV9MQU5FX0lOX0JZUEFTU19QSVBFTElORV9TVEFHRSAoMSA8PCAxMSkKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19QSFlfQllURV9MQU5FX09VVF9CWVBBU1NfUElQRUxJTkVfU1RBR0UgKDEgPDwgMTApCisKKy8qIENoaXAgc2VsZWN0IGNvdW50ICovCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NTX0NOVF9NQVNLICAgICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NTX0NOVF8xICAgICAgICAgICAgICAgICAgICAgICgwIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NTX0NOVF8yICAgICAgICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ1NfQ05UX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0xLX1NISUZUICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NMS19BU1lOQyAgICAgICAgICAgICAgICAgICAgICgwIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0xLX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NMS19TWU5DICAgICAgICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0xLX1NISUZUKQorCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0tFX0lOSVRfU0hJRlQgICAgICAgICAgICAgICAgNworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NLRV9JTklUX0xPVyAgICAgICAgICAgICAgICAgICgwIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0tFX0lOSVRfU0hJRlQpCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0tFX0lOSVRfSElHSCAgICAgICAgICAgICAgICAgKDEgPDwgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19DS0VfSU5JVF9TSElGVCkKKworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RRTV9JTklUX1NISUZUICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19EUU1fSU5JVF9MT1cgICAgICAgICAgICAgICAgICAoMCA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RRTV9JTklUX1NISUZUKQorI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0RRTV9JTklUX0hJR0ggICAgICAgICAgICAgICAgICgxIDw8IGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfRFFNX0lOSVRfU0hJRlQpCisKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX0NGR19DQVNfTEFURU5DWV9TSElGVCAgICAgICAgICAgICAwCisjZGVmaW5lIGRkcmNSZWdfQ1RMUl9QSFlfR0xVRV9DRkdfQ0FTX0xBVEVOQ1lfTUFTSyAgICAgICAgICAgICAgKDB4NyA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfQ0ZHX0NBU19MQVRFTkNZX1NISUZUKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfU1RBVFVTX1BIQVNFX1NISUZUICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgZGRyY1JlZ19DVExSX1BIWV9HTFVFX1NUQVRVU19QSEFTRV9NQVNLICAgICAgICAgICAgICAgICAoMHg3ZiA8PCBkZHJjUmVnX0NUTFJfUEhZX0dMVUVfU1RBVFVTX1BIQVNFX1NISUZUKQorCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30JCQkJLyogZW5kIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorI2VuZGlmCQkJCS8qIEREUkNfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2RtYWNId19wcml2LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTA2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcHJpdi5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgZG1hY0h3X3ByaXYuaAorKgorKiAgQGJyaWVmICAgUHJpdmF0ZSBEZWZpbml0aW9ucyBmb3IgbG93IGxldmVsIERNQSBkcml2ZXIKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfRE1BQ0hXX1BSSVZfSAorI2RlZmluZSBfRE1BQ0hXX1BSSVZfSAorCisjaW5jbHVkZSA8Y3NwL3N0ZGludC5oPgorCisvKiBEYXRhIHR5cGUgZm9yIERNQSBMaW5rIExpc3QgSXRlbSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IHNhcjsJCS8qIFNvdXJjZSBBZHJlc3MgUmVnaXN0ZXIuCisJCQkJICAgQWRkcmVzcyBtdXN0IGJlIGFsaWduZWQgdG8gQ1RMeC5TUkNfVFJfV0lEVEguICAgICAgICAgICAgICovCisJdWludDMyX3QgZGFyOwkJLyogRGVzdGluYXRpb24gQWRkcmVzcyBSZWdpc3Rlci4KKwkJCQkgICBBZGRyZXNzIG11c3QgYmUgYWxpZ25lZCB0byBDVEx4LkRTVF9UUl9XSURUSC4gICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBsbHBQaHk7CS8qIExMUCBjb250YWlucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgbmV4dCBkZXNjcmlwdG9yIGZvciBibG9jayBjaGFpbmluZyB1c2luZyBsaW5rZWQgbGlzdHMuCisJCQkJICAgQWRkcmVzcyBNVVNUIGJlIGFsaWduZWQgdG8gYSAzMi1iaXQgYm91bmRhcnkuICAgICAgICAgICAgICovCisJZG1hY0h3X1JFRzY0X3QgY3RsOwkvKiBDb250cm9sIFJlZ2lzdGVyLiA2NCBiaXRzICovCisJdWludDMyX3Qgc3N0YXQ7CQkvKiBTb3VyY2UgU3RhdHVzIFJlZ2lzdGVyICovCisJdWludDMyX3QgZHN0YXQ7CQkvKiBEZXN0aW5hdGlvbiBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1aW50MzJfdCBkZXZDdGw7CS8qIERldmljZSBzcGVjaWZpYyBjb250cm9sIGluZm9ybWF0aW9uICovCisJdWludDMyX3QgbGxwOwkJLyogTExQIGNvbnRhaW5zIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIG5leHQgZGVzY3JpcHRvciBmb3IgYmxvY2sgY2hhaW5pbmcgdXNpbmcgbGlua2VkIGxpc3RzLiAqLworfSBkbWFjSHdfREVTQ190OworCisvKgorICogIERlc2NyaXB0b3IgcmluZyBwb2ludGVycworICovCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IG51bTsJCS8qIE51bWJlciBvZiBsaW5rIGl0ZW1zICovCisJZG1hY0h3X0RFU0NfdCAqcEhlYWQ7CS8qIEhlYWQgb2YgZGVzY3JpcHRvciByaW5nIChmb3Igd3JpdGluZykgKi8KKwlkbWFjSHdfREVTQ190ICpwVGFpbDsJLyogVGFpbCBvZiBkZXNjcmlwdG9yIHJpbmcgKGZvciByZWFkaW5nKSAqLworCWRtYWNId19ERVNDX3QgKnBQcm9nOwkvKiBEZXNjcmlwdG9yIHRvIHByb2dyYW0gdGhlIGNoYW5uZWwgKGZvciBwcm9ncmFtbWluZyB0aGUgY2hhbm5lbCByZWdpc3RlcikgKi8KKwlkbWFjSHdfREVTQ190ICpwRW5kOwkvKiBFbmQgb2YgY3VycmVudCBkZXNjcmlwdG9yIGNoYWluICovCisJZG1hY0h3X0RFU0NfdCAqcEZyZWU7CS8qIERlc2NyaXB0b3IgdG8gZnJlZSBtZW1vcnkgKGZyZWVpbmcgZHluYW1pYyBtZW1vcnkpICovCisJdWludDMyX3QgdmlydDJQaHlPZmZzZXQ7CS8qIFZpcnR1YWwgdG8gcGh5c2ljYWwgYWRkcmVzcyBvZmZzZXQgZm9yIHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KK30gZG1hY0h3X0RFU0NfUklOR190OworCisvKgorICogIERNQSBjaGFubmVsIGNvbnRyb2wgYmxvY2sKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IG1vZHVsZTsJLyogRE1BIGNvbnRyb2xsZXIgbW9kdWxlICgwLTEpICovCisJdWludDMyX3QgY2hhbm5lbDsJLyogRE1BIGNoYW5uZWwgKDAtNykgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCB2YXJEYXRhU3RhcnRlZDsJLyogRmxhZyBpbmRpY2F0aW5nIHZhcmlhYmxlIGRhdGEgY2hhbm5lbCBpcyBlbmFibGVkICovCisJdm9sYXRpbGUgdWludDMyX3QgZGVzY1VwZGF0ZWQ7CS8qIEZsYWcgdG8gaW5kaWNhdGUgZGVzY3JpcHRvciB1cGRhdGUgaXMgY29tcGxldGUgKi8KKwl2b2lkICp1c2VyRGF0YTsJCS8qIENoYW5uZWwgc3BlY2lmYyB1c2VyIGRhdGEgKi8KK30gZG1hY0h3X0NCTEtfdDsKKworI2RlZmluZSBkbWFjSHdfQVNTRVJUKGEpICAgICAgICAgICAgICAgICAgaWYgKCEoYSkpIHdoaWxlICgxKQorI2RlZmluZSBkbWFjSHdfTUFYX0NIQU5ORUxfQ09VTlQgICAgICAgICAgMTYKKyNkZWZpbmUgZG1hY0h3X0ZSRUVfVVNFUl9NRU1PUlkgICAgICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgZG1hY0h3X0RFU0NfRlJFRSAgICAgICAgICAgICAgICAgIGRtYWNId19SRUdfQ1RMX0RPTkUKKyNkZWZpbmUgZG1hY0h3X0RFU0NfSU5JVCAgICAgICAgICAgICAgICAgICgoZG1hY0h3X0RFU0NfdCAqKSAweEZGRkZGRkZGKQorI2RlZmluZSBkbWFjSHdfTUFYX0JMT0NLU0laRSAgICAgICAgICAgICAgNDA2NAorI2RlZmluZSBkbWFjSHdfR0VUX0RFU0NfUklORyhhZGRyKSAgICAgICAgKGRtYWNId19ERVNDX1JJTkdfdCAqKShhZGRyKQorI2RlZmluZSBkbWFjSHdfQUREUkVTU19NQVNLKGJ5dGUpICAgICAgICAgKChieXRlKSAtIDEpCisjZGVmaW5lIGRtYWNId19ORVhUX0RFU0MocnAsIGRwKSAgICAgICAgICAgKChycCktPmRwID0gKGRtYWNId19ERVNDX3QgKikocnApLT5kcC0+bGxwKQorI2RlZmluZSBkbWFjSHdfSEFORExFX1RPX0NCTEsoaGFuZGxlKSAgICAgKChkbWFjSHdfQ0JMS190ICopIChoYW5kbGUpKQorI2RlZmluZSBkbWFjSHdfQ0JMS19UT19IQU5ETEUoY2Jsa3ApICAgICAgKChkbWFjSHdfSEFORExFX3QpIChjYmxrcCkpCisjZGVmaW5lIGRtYWNId19EU1RfSVNfTUVNT1JZKHR0KSAgICAgICAgICAoKCh0dCkgPT0gIGRtYWNId19UUkFOU0ZFUl9UWVBFX1BFUklQSEVSQUxfVE9fTUVNKSB8fCAoKHR0KSA9PSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNKSkgPyAxIDogMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICAgR2V0IG5leHQgYXZhaWxhYmxlIHRyYW5zYWN0aW9uIHdpZHRoCisqCisqCisqICBAcmV0dXJuICBPbiBzdWNlc3MgIDogTmV4dCBhdmFpbCBhYmxlIHRyYW5zYWN0aW9uIHdpZHRoCisqICAgICAgICAgICBPbiBmYWlsdXJlIDogZG1hY0h3X1RSQU5TQUNUSU9OX1dJRFRIXzgKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIGRtYWNId19HZXROZXh0VHJXaWR0aChkbWFjSHdfVFJBTlNBQ1RJT05fV0lEVEhfZSB0dwkvKiAgIFsgSU4gXSBDdXJyZW50IHRyYW5zYWN0aW9uIHdpZHRoICovCisgICAgKSB7CisJaWYgKHR3ICYgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX01BU0spIHsKKwkJcmV0dXJuICgodHcgPj4gZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX1NISUZUKSAtCisJCQkgMSkgPDwgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIX1NISUZUOworCX0gZWxzZSBpZiAodHcgJiBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfTUFTSykgeworCQlyZXR1cm4gKCh0dyA+PiBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfU0hJRlQpIC0KKwkJCSAxKSA8PCBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfU0hJRlQ7CisJfQorCisJLyogRGVmYXVsdCByZXR1cm4gICovCisJcmV0dXJuIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfODsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgIEdldCBudW1iZXIgb2YgYnl0ZXMgcGVyIHRyYW5zYWN0aW9uCisqCisqICBAcmV0dXJuICBOdW1iZXIgb2YgYnl0ZXMgcGVyIHRyYW5zYWN0aW9uCisqCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSBpbnQgZG1hY0h3X0dldFRyV2lkdGhJbkJ5dGVzKGRtYWNId19UUkFOU0FDVElPTl9XSURUSF9lIHR3CS8qICAgWyBJTiBdICBUcmFuc2FjdGlvbiB3aWR0aCAqLworICAgICkgeworCWludCB3aWR0aCA9IDE7CisJc3dpdGNoICh0dykgeworCWNhc2UgZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF84OgorCQl3aWR0aCA9IDE7CisJCWJyZWFrOworCWNhc2UgZG1hY0h3X1NSQ19UUkFOU0FDVElPTl9XSURUSF8xNjoKKwljYXNlIGRtYWNId19EU1RfVFJBTlNBQ1RJT05fV0lEVEhfMTY6CisJCXdpZHRoID0gMjsKKwkJYnJlYWs7CisJY2FzZSBkbWFjSHdfU1JDX1RSQU5TQUNUSU9OX1dJRFRIXzMyOgorCWNhc2UgZG1hY0h3X0RTVF9UUkFOU0FDVElPTl9XSURUSF8zMjoKKwkJd2lkdGggPSA0OworCQlicmVhazsKKwljYXNlIGRtYWNId19TUkNfVFJBTlNBQ1RJT05fV0lEVEhfNjQ6CisJY2FzZSBkbWFjSHdfRFNUX1RSQU5TQUNUSU9OX1dJRFRIXzY0OgorCQl3aWR0aCA9IDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRtYWNId19BU1NFUlQoMCk7CisJfQorCisJLyogRGVmYXVsdCB0cmFuc2FjdGlvbiB3aWR0aCAqLworCXJldHVybiB3aWR0aDsKK30KKworI2VuZGlmIC8qIF9ETUFDSFdfUFJJVl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcmVnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9kbWFjSHdfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxY2VhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2RtYWNId19yZWcuaApAQCAtMCwwICsxLDQwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDA0IC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGRtYWNId19yZWcuaAorKgorKiAgQGJyaWVmICAgRGVmaW5pdGlvbnMgZm9yIGxvdyBsZXZlbCBETUEgcmVnaXN0ZXJzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0RNQUNIV19SRUdfSAorI2RlZmluZSBfRE1BQ0hXX1JFR19ICisKKyNpbmNsdWRlIDxjc3Avc3RkaW50Lmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworLyogRGF0YSB0eXBlIGZvciA2NCBiaXQgbGl0dGxlIGVuZGlhbiByZWdpc3RlciAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHVpbnQzMl90IGxvOwkvKiBMb3dlciAzMiBiaXQgaW4gbGl0dGxlIGVuZGlhbiBtb2RlICovCisJdm9sYXRpbGUgdWludDMyX3QgaGk7CS8qIFVwcGVyIDMyIGJpdCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KK30gZG1hY0h3X1JFRzY0X3Q7CisKKy8qIERhdGEgdHlwZSByZXByZXNlbnRpbmcgRE1BIGNoYW5uZWwgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgQ2hhbm5lbFNhcjsJLyogIFNvdXJjZSBBZHJlc3MgUmVnaXN0ZXIuIDY0IGJpdHMgKHVwcGVyIDMyIGJpdHMgYXJlIHJlc2VydmVkKQorCQkJCQkgICBBZGRyZXNzIG11c3QgYmUgYWxpZ25lZCB0byBDVEx4LlNSQ19UUl9XSURUSC4KKwkJCQkJICovCisJZG1hY0h3X1JFRzY0X3QgQ2hhbm5lbERhcjsJLyogIERlc3RpbmF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIuNjQgYml0cyAodXBwZXIgMzIgYml0cyBhcmUgcmVzZXJ2ZWQpCisJCQkJCSAgIEFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkIHRvIENUTHguRFNUX1RSX1dJRFRILgorCQkJCQkgKi8KKwlkbWFjSHdfUkVHNjRfdCBDaGFubmVsTGxwOwkvKiAgTGluayBMaXN0IFBvaW50ZXIuNjQgYml0cyAodXBwZXIgMzIgYml0cyBhcmUgcmVzZXJ2ZWQpCisJCQkJCSAgIExMUCBjb250YWlucyB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBMTEkgZm9yIGJsb2NrIGNoYWluaW5nIHVzaW5nIGxpbmtlZCBsaXN0cy4KKwkJCQkJICAgSWYgTExQaXMgc2V0IHRvIDB4MCwgdGhlbiB0cmFuc2ZlcnMgdXNpbmcgbGlua2VkIGxpc3RzIGFyZSBub3QgZW5hYmxlZC4KKwkJCQkJICAgQWRkcmVzcyBNVVNUIGJlIGFsaWduZWQgdG8gYSAzMi1iaXQgYm91bmRhcnkuCisJCQkJCSAqLworCWRtYWNId19SRUc2NF90IENoYW5uZWxDdGw7CS8qIENvbnRyb2wgUmVnaXN0ZXIuIDY0IGJpdHMgKi8KKwlkbWFjSHdfUkVHNjRfdCBDaGFubmVsU3N0YXQ7CS8qIFNvdXJjZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKwlkbWFjSHdfUkVHNjRfdCBDaGFubmVsRHN0YXQ7CS8qIERlc3RpbmF0aW9uIFN0YXR1cyBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IENoYW5uZWxTc3RhdEFkZHI7CS8qIFNvdXJjZSBTdGF0dXMgQWRkcmVzcyBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IENoYW5uZWxEc3RhdEFkZHI7CS8qIERlc3RpbmF0aW9uIFN0YXR1cyBBZGRyZXNzIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgQ2hhbm5lbENvbmZpZzsJLyogQ2hhbm5lbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgU3JjR2F0aGVyOwkvKiBTb3VyY2UgZ2F0aGVyIHJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgRHN0U2NhdHRlcjsJLyogRGVzdGluYXRpb24gc2NhdHRlciByZWdpc3RlciAqLworfSBkbWFjSHdfQ0hfUkVHX3Q7CisKKy8qIERhdGEgdHlwZSBmb3IgUkFXIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgUmF3VGZyOwkvKiBSYXcgU3RhdHVzIGZvciBJbnRUZnIgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgUmF3QmxvY2s7CS8qIFJhdyBTdGF0dXMgZm9yIEludEJsb2NrIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IFJhd1NyY1RyYW47CS8qIFJhdyBTdGF0dXMgZm9yIEludFNyY1RyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgUmF3RHN0VHJhbjsJLyogUmF3IFN0YXR1cyBmb3IgSW50RHN0VHJhbiBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBSYXdFcnI7CS8qIFJhdyBTdGF0dXMgZm9yIEludEVyciBJbnRlcnJ1cHQgKi8KK30gZG1hY0h3X0lOVF9SQVdfdDsKKworLyogRGF0YSB0eXBlIGZvciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWRtYWNId19SRUc2NF90IFN0YXR1c1RmcjsJLyogU3RhdHVzIGZvciBJbnRUZnIgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgU3RhdHVzQmxvY2s7CS8qIFN0YXR1cyBmb3IgSW50QmxvY2sgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgU3RhdHVzU3JjVHJhbjsJLyogU3RhdHVzIGZvciBJbnRTcmNUcmFuIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IFN0YXR1c0RzdFRyYW47CS8qIFN0YXR1cyBmb3IgSW50RHN0VHJhbiBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBTdGF0dXNFcnI7CS8qIFN0YXR1cyBmb3IgSW50RXJyIEludGVycnVwdCAqLworfSBkbWFjSHdfSU5UX1NUQVRVU190OworCisvKiBEYXRhIHR5cGUgZm9yIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycyovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgTWFza1RmcjsJLyogTWFzayBmb3IgSW50VGZyIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IE1hc2tCbG9jazsJLyogTWFzayBmb3IgSW50QmxvY2sgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgTWFza1NyY1RyYW47CS8qIE1hc2sgZm9yIEludFNyY1RyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgTWFza0RzdFRyYW47CS8qIE1hc2sgZm9yIEludERzdFRyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgTWFza0VycjsJLyogTWFzayBmb3IgSW50RXJyIEludGVycnVwdCAqLworfSBkbWFjSHdfSU5UX01BU0tfdDsKKworLyogRGF0YSB0eXBlIGZvciBpbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgQ2xlYXJUZnI7CS8qIENsZWFyIGZvciBJbnRUZnIgSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgQ2xlYXJCbG9jazsJLyogQ2xlYXIgZm9yIEludEJsb2NrIEludGVycnVwdCAqLworCWRtYWNId19SRUc2NF90IENsZWFyU3JjVHJhbjsJLyogQ2xlYXIgZm9yIEludFNyY1RyYW4gSW50ZXJydXB0ICovCisJZG1hY0h3X1JFRzY0X3QgQ2xlYXJEc3RUcmFuOwkvKiBDbGVhciBmb3IgSW50RHN0VHJhbiBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBDbGVhckVycjsJLyogQ2xlYXIgZm9yIEludEVyciBJbnRlcnJ1cHQgKi8KKwlkbWFjSHdfUkVHNjRfdCBTdGF0dXNJbnQ7CS8qIFN0YXR1cyBmb3IgZWFjaCBpbnRlcnJ1cHQgdHlwZSAqLworfSBkbWFjSHdfSU5UX0NMRUFSX3Q7CisKKy8qIERhdGEgdHlwZSBmb3Igc29mdHdhcmUgaGFuZHNoYWtpbmcgcmVnaXN0ZXJzICovCit0eXBlZGVmIHN0cnVjdCB7CisJZG1hY0h3X1JFRzY0X3QgUmVxU3JjUmVnOwkvKiBTb3VyY2UgU29mdHdhcmUgVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IFJlcURzdFJlZzsJLyogRGVzdGluYXRpb24gU29mdHdhcmUgVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IFNnbFJlcVNyY1JlZzsJLyogU2luZ2xlIFNvdXJjZSBUcmFuc2FjdGlvbiBSZXF1ZXN0IFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgU2dsUmVxRHN0UmVnOwkvKiBTaW5nbGUgRGVzdGluYXRpb24gVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IExzdFNyY1JlZzsJLyogTGFzdCBTb3VyY2UgVHJhbnNhY3Rpb24gUmVxdWVzdCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IExzdERzdFJlZzsJLyogTGFzdCBEZXN0aW5hdGlvbiBUcmFuc2FjdGlvbiBSZXF1ZXN0IFJlZ2lzdGVyICovCit9IGRtYWNId19TV19IQU5EU0hBS0VfdDsKKworLyogRGF0YSB0eXBlIGZvciBtaXNjLiByZWdpc3RlcnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlkbWFjSHdfUkVHNjRfdCBEbWFDZmdSZWc7CS8qIERNQSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgQ2hFblJlZzsJLyogRE1BIENoYW5uZWwgRW5hYmxlIFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgRG1hSWRSZWc7CS8qIERNQSBJRCBSZWdpc3RlciAqLworCWRtYWNId19SRUc2NF90IERtYVRlc3RSZWc7CS8qIERNQSBUZXN0IFJlZ2lzdGVyICovCisJZG1hY0h3X1JFRzY0X3QgUmVzZXJ2ZWQwOwkvKiBSZXNlcnZlZCAqLworCWRtYWNId19SRUc2NF90IFJlc2VydmVkMTsJLyogUmVzZXJ2ZWQgKi8KKwlkbWFjSHdfUkVHNjRfdCBDb21wUGFybTY7CS8qIENvbXBvbmVudCBQYXJhbWV0ZXIgNiAqLworCWRtYWNId19SRUc2NF90IENvbXBQYXJtNTsJLyogQ29tcG9uZW50IFBhcmFtZXRlciA1ICovCisJZG1hY0h3X1JFRzY0X3QgQ29tcFBhcm00OwkvKiBDb21wb25lbnQgUGFyYW1ldGVyIDQgKi8KKwlkbWFjSHdfUkVHNjRfdCBDb21wUGFybTM7CS8qIENvbXBvbmVudCBQYXJhbWV0ZXIgMyAqLworCWRtYWNId19SRUc2NF90IENvbXBQYXJtMjsJLyogQ29tcG9uZW50IFBhcmFtZXRlciAyICovCisJZG1hY0h3X1JFRzY0X3QgQ29tcFBhcm0xOwkvKiBDb21wb25lbnQgUGFyYW1ldGVyIDEgKi8KKwlkbWFjSHdfUkVHNjRfdCBDb21wSWQ7CS8qIENvbXBvZW50IElEICovCit9IGRtYWNId19NSVNDX3Q7CisKKy8qIEJhc2UgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId18wX01PRFVMRV9CQVNFX0FERFIgICAgICAgIChjaGFyICopIE1NX0lPX0JBU0VfRE1BMAkvKiBETUFDIDAgbW9kdWxlJ3MgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIGRtYWNId18xX01PRFVMRV9CQVNFX0FERFIgICAgICAgIChjaGFyICopIE1NX0lPX0JBU0VfRE1BMQkvKiBETUFDIDEgbW9kdWxlJ3MgYmFzZSBhZGRyZXNzICovCisKK2V4dGVybiB1aW50MzJfdCBkbWFDaGFubmVsQ291bnRfMDsKK2V4dGVybiB1aW50MzJfdCBkbWFDaGFubmVsQ291bnRfMTsKKworLyogRGVmaW5lIGNoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19DSEFOX0JBU0UobW9kdWxlLCBjaGFuKSAgICAgICAgICAoKGRtYWNId19DSF9SRUdfdCAqKSAoKGNoYXIgKikoKG1vZHVsZSkgPyBkbWFjSHdfMV9NT0RVTEVfQkFTRV9BRERSIDogZG1hY0h3XzBfTU9EVUxFX0JBU0VfQUREUikgKyAoKGNoYW4pICogc2l6ZW9mKGRtYWNId19DSF9SRUdfdCkpKSkKKworLyogUmF3IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKG1vZHVsZSkgICAgICAgICAoKGNoYXIgKilkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoKG1vZHVsZSkgPyBkbWFDaGFubmVsQ291bnRfMSA6IGRtYUNoYW5uZWxDb3VudF8wKSkpCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19UUkFOKG1vZHVsZSkgICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd1Rmci5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfUkFXX0JMT0NLKG1vZHVsZSkgICAgICAgICgoKGRtYWNId19JTlRfUkFXX3QgKikgZG1hY0h3X1JFR19JTlRfUkFXX0JBU0UoKG1vZHVsZSkpKS0+UmF3QmxvY2subG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19TVFJBTihtb2R1bGUpICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd1NyY1RyYW4ubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19EVFJBTihtb2R1bGUpICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd0RzdFRyYW4ubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1JBV19FUlJPUihtb2R1bGUpICAgICAgICAoKChkbWFjSHdfSU5UX1JBV190ICopIGRtYWNId19SRUdfSU5UX1JBV19CQVNFKChtb2R1bGUpKSktPlJhd0Vyci5sbykKKworLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfU1RBVF9CQVNFKG1vZHVsZSkgICAgICAgICgoY2hhciAqKShkbWFjSHdfUkVHX0lOVF9SQVdfQkFTRSgobW9kdWxlKSkgKyBzaXplb2YoZG1hY0h3X0lOVF9SQVdfdCkpKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9TVEFUX1RSQU4obW9kdWxlKSAgICAgICAgKCgoZG1hY0h3X0lOVF9TVEFUVVNfdCAqKSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpKS0+U3RhdHVzVGZyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JMT0NLKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9TVEFUVVNfdCAqKSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpKS0+U3RhdHVzQmxvY2subG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1NUQVRfU1RSQU4obW9kdWxlKSAgICAgICAoKChkbWFjSHdfSU5UX1NUQVRVU190ICopIGRtYWNId19SRUdfSU5UX1NUQVRfQkFTRSgobW9kdWxlKSkpLT5TdGF0dXNTcmNUcmFuLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9TVEFUX0RUUkFOKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9TVEFUVVNfdCAqKSBkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpKS0+U3RhdHVzRHN0VHJhbi5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfU1RBVF9FUlJPUihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfU1RBVFVTX3QgKikgZG1hY0h3X1JFR19JTlRfU1RBVF9CQVNFKChtb2R1bGUpKSktPlN0YXR1c0Vyci5sbykKKworLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19CQVNFKG1vZHVsZSkgICAgICAgICgoY2hhciAqKShkbWFjSHdfUkVHX0lOVF9TVEFUX0JBU0UoKG1vZHVsZSkpICsgc2l6ZW9mKGRtYWNId19JTlRfU1RBVFVTX3QpKSkKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19UUkFOKG1vZHVsZSkgICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrVGZyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9NQVNLX0JMT0NLKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9NQVNLX3QgKikgZG1hY0h3X1JFR19JTlRfTUFTS19CQVNFKChtb2R1bGUpKSktPk1hc2tCbG9jay5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19TVFJBTihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrU3JjVHJhbi5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19EVFJBTihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrRHN0VHJhbi5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19JTlRfTUFTS19FUlJPUihtb2R1bGUpICAgICAgICgoKGRtYWNId19JTlRfTUFTS190ICopIGRtYWNId19SRUdfSU5UX01BU0tfQkFTRSgobW9kdWxlKSkpLT5NYXNrRXJyLmxvKQorCisvKiBJbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UobW9kdWxlKSAgICAgICAoKGNoYXIgKikoZG1hY0h3X1JFR19JTlRfTUFTS19CQVNFKChtb2R1bGUpKSArIHNpemVvZihkbWFjSHdfSU5UX01BU0tfdCkpKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9UUkFOKG1vZHVsZSkgICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJUZnIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX0NMRUFSX0JMT0NLKG1vZHVsZSkgICAgICAoKChkbWFjSHdfSU5UX0NMRUFSX3QgKikgZG1hY0h3X1JFR19JTlRfQ0xFQVJfQkFTRSgobW9kdWxlKSkpLT5DbGVhckJsb2NrLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9TVFJBTihtb2R1bGUpICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJTcmNUcmFuLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9EVFJBTihtb2R1bGUpICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJEc3RUcmFuLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0lOVF9DTEVBUl9FUlJPUihtb2R1bGUpICAgICAgKCgoZG1hY0h3X0lOVF9DTEVBUl90ICopIGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpKS0+Q2xlYXJFcnIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfSU5UX1NUQVRVUyhtb2R1bGUpICAgICAgICAgICAoKChkbWFjSHdfSU5UX0NMRUFSX3QgKikgZG1hY0h3X1JFR19JTlRfQ0xFQVJfQkFTRSgobW9kdWxlKSkpLT5TdGF0dXNJbnQubG8pCisKKy8qIFNvZnR3YXJlIGhhbmRzaGFraW5nIHJlZ2lzdGVycyAqLworI2RlZmluZSBkbWFjSHdfUkVHX1NXX0hTX0JBU0UobW9kdWxlKSAgICAgICAgICAgKChjaGFyICopKGRtYWNId19SRUdfSU5UX0NMRUFSX0JBU0UoKG1vZHVsZSkpICsgc2l6ZW9mKGRtYWNId19JTlRfQ0xFQVJfdCkpKQorI2RlZmluZSBkbWFjSHdfUkVHX1NXX0hTX1NSQ19SRVEobW9kdWxlKSAgICAgICAgKCgoZG1hY0h3X1NXX0hBTkRTSEFLRV90ICopIGRtYWNId19SRUdfU1dfSFNfQkFTRSgobW9kdWxlKSkpLT5SZXFTcmNSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfU1dfSFNfRFNUX1JFUShtb2R1bGUpICAgICAgICAoKChkbWFjSHdfU1dfSEFORFNIQUtFX3QgKikgZG1hY0h3X1JFR19TV19IU19CQVNFKChtb2R1bGUpKSktPlJlcURzdFJlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19TV19IU19TUkNfU0dMX1JFUShtb2R1bGUpICAgICgoKGRtYWNId19TV19IQU5EU0hBS0VfdCAqKSBkbWFjSHdfUkVHX1NXX0hTX0JBU0UoKG1vZHVsZSkpKS0+U2dsUmVxU3JjUmVnLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX1NXX0hTX0RTVF9TR0xfUkVRKG1vZHVsZSkgICAgKCgoZG1hY0h3X1NXX0hBTkRTSEFLRV90ICopIGRtYWNId19SRUdfU1dfSFNfQkFTRSgobW9kdWxlKSkpLT5TZ2xSZXFEc3RSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfU1dfSFNfU1JDX0xTVF9SRVEobW9kdWxlKSAgICAoKChkbWFjSHdfU1dfSEFORFNIQUtFX3QgKikgZG1hY0h3X1JFR19TV19IU19CQVNFKChtb2R1bGUpKSktPkxzdFNyY1JlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19TV19IU19EU1RfTFNUX1JFUShtb2R1bGUpICAgICgoKGRtYWNId19TV19IQU5EU0hBS0VfdCAqKSBkbWFjSHdfUkVHX1NXX0hTX0JBU0UoKG1vZHVsZSkpKS0+THN0RHN0UmVnLmxvKQorCisvKiBNaXNjZWxsYW5lb3VzIHJlZ2lzdGVycyAqLworI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQkFTRShtb2R1bGUpICAgICAgICAgICAgKChjaGFyICopKGRtYWNId19SRUdfU1dfSFNfQkFTRSgobW9kdWxlKSkgKyBzaXplb2YoZG1hY0h3X1NXX0hBTkRTSEFLRV90KSkpCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DRkcobW9kdWxlKSAgICAgICAgICAgICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkRtYUNmZ1JlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRShtb2R1bGUpICAgICAgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q2hFblJlZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0lEKG1vZHVsZSkgICAgICAgICAgICAgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+RG1hSWRSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19URVNUKG1vZHVsZSkgICAgICAgICAgICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkRtYVRlc3RSZWcubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMV9MTyhtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtMS5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU0xX0hJKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm0xLmhpKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTJfTE8obW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMl9ISShtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtMi5oaSkKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU0zX0xPKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm0zLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTNfSEkobW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTMuaGkpCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNNF9MTyhtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtNC5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU00X0hJKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm00LmhpKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTVfTE8obW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTUubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNNV9ISShtb2R1bGUpICAoKChkbWFjSHdfTUlTQ190ICopIGRtYWNId19SRUdfTUlTQ19CQVNFKChtb2R1bGUpKSktPkNvbXBQYXJtNS5oaSkKKyNkZWZpbmUgZG1hY0h3X1JFR19NSVNDX0NPTVBfUEFSQU02X0xPKG1vZHVsZSkgICgoKGRtYWNId19NSVNDX3QgKikgZG1hY0h3X1JFR19NSVNDX0JBU0UoKG1vZHVsZSkpKS0+Q29tcFBhcm02LmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTZfSEkobW9kdWxlKSAgKCgoZG1hY0h3X01JU0NfdCAqKSBkbWFjSHdfUkVHX01JU0NfQkFTRSgobW9kdWxlKSkpLT5Db21wUGFybTYuaGkpCisKKy8qIENoYW5uZWwgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19TQVIobW9kdWxlLCBjaGFuKSAgICAgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsU2FyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX0RBUihtb2R1bGUsIGNoYW4pICAgICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkNoYW5uZWxEYXIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfTExQKG1vZHVsZSwgY2hhbikgICAgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbExscC5sbykKKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9MTyhtb2R1bGUsIGNoYW4pICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkNoYW5uZWxDdGwubG8pCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0hJKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbEN0bC5oaSkKKworI2RlZmluZSBkbWFjSHdfUkVHX1NTVEFUKG1vZHVsZSwgY2hhbikgICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkNoYW5uZWxTc3RhdC5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19EU1RBVChtb2R1bGUsIGNoYW4pICAgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsRHN0YXQubG8pCisjZGVmaW5lIGRtYWNId19SRUdfU1NUQVRBUihtb2R1bGUsIGNoYW4pICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbFNzdGF0QWRkci5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19EU1RBVEFSKG1vZHVsZSwgY2hhbikgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsRHN0YXRBZGRyLmxvKQorCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+Q2hhbm5lbENvbmZpZy5sbykKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSEkobW9kdWxlLCBjaGFuKSAgICAgICAgIChkbWFjSHdfQ0hBTl9CQVNFKChtb2R1bGUpLCAoY2hhbikpLT5DaGFubmVsQ29uZmlnLmhpKQorCisjZGVmaW5lIGRtYWNId19SRUdfU0dSX0xPKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+U3JjR2F0aGVyLmxvKQorI2RlZmluZSBkbWFjSHdfUkVHX1NHUl9ISShtb2R1bGUsIGNoYW4pICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPlNyY0dhdGhlci5oaSkKKworI2RlZmluZSBkbWFjSHdfUkVHX0RTUl9MTyhtb2R1bGUsIGNoYW4pICAgICAgICAgKGRtYWNId19DSEFOX0JBU0UoKG1vZHVsZSksIChjaGFuKSktPkRzdFNjYXR0ZXIubG8pCisjZGVmaW5lIGRtYWNId19SRUdfRFNSX0hJKG1vZHVsZSwgY2hhbikgICAgICAgICAoZG1hY0h3X0NIQU5fQkFTRSgobW9kdWxlKSwgKGNoYW4pKS0+RHN0U2NhdHRlci5oaSkKKworI2RlZmluZSBJTlRfU1RBVFVTX01BU0soY2hhbm5lbCkgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEgPDwgKGNoYW5uZWwpKQorI2RlZmluZSBDSEFOTkVMX0JVU1kobW9kLCBjaGFubmVsKSAgICAgICAgICAgICAgKGRtYWNId19SRUdfTUlTQ19DSF9FTkFCTEUoKG1vZCkpICYgKDB4MDAwMDAwMDEgPDwgKGNoYW5uZWwpKSkKKworLyogQml0IG1hc2sgZm9yIFJFR19ETUFDeF9DVExfTE8gKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogQ2hhbm5lbCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIX01BU0sgICAgICAgICAgICAweDAwMDAwMDBFCS8qIERlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIHdpZHRoIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIX1NISUZUICAgICAgICAgICAxCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTVF9UUl9XSURUSF84ICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBEZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiB3aWR0aCA4IGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9EU1RfVFJfV0lEVEhfMTYgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogRGVzdGluYXRpb24gdHJhbnNhY3Rpb24gd2lkdGggMTYgYml0ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTVF9UUl9XSURUSF8zMiAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBEZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiB3aWR0aCAzMiBiaXQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX1RSX1dJRFRIXzY0ICAgICAgICAgICAgICAweDAwMDAwMDA2CS8qIERlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIHdpZHRoIDY0IGJpdCAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1NSQ19UUl9XSURUSF9NQVNLICAgICAgICAgICAgMHgwMDAwMDA3MAkvKiBTb3VyY2UgdHJhbnNhY3Rpb24gd2lkdGggbWFzayAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfU0hJRlQgICAgICAgICAgIDQKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX1RSX1dJRFRIXzggICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIFNvdXJjZSB0cmFuc2FjdGlvbiB3aWR0aCA4IGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMTYgICAgICAgICAgICAgIDB4MDAwMDAwMTAJLyogU291cmNlIHRyYW5zYWN0aW9uIHdpZHRoIDE2IGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfMzIgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogU291cmNlIHRyYW5zYWN0aW9uIHdpZHRoIDMyIGJpdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfVFJfV0lEVEhfNjQgICAgICAgICAgICAgIDB4MDAwMDAwMzAJLyogU291cmNlIHRyYW5zYWN0aW9uIHdpZHRoIDY0IGJpdCAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMAkvKiBEZXN0aW5hdGlvbiBzY2F0dGVyIGVuYWJsZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TR19FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAJLyogU291cmNlIGdhdGhlciBlbmFibGUgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9ESU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxODAJLyogRGVzdGluYXRpb24gYWRkcmVzcyBpbmMvZGVjIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRElOQ19JTkMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgaW5jcmVtZW50ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RJTkNfREVDICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIGRlY3JlbWVudCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9ESU5DX05DICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAJLyogRGVzdGluYXRpb24gYWRkcmVzcyBubyBjaGFuZ2UgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TSU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2MDAJLyogU291cmNlIGFkZHJlc3MgaW5jL2RlYyBtYXNrICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1NJTkNfSU5DICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBTb3VyY2UgYWRkcmVzcyBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU0lOQ19ERUMgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIFNvdXJjZSBhZGRyZXNzIGRlY3JlbWVudCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TSU5DX05DICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogU291cmNlIGFkZHJlc3Mgbm8gY2hhbmdlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX01TSVpFX01BU0sgICAgICAgICAgICAgICAweDAwMDAzODAwCS8qIERlc3RpbmF0aW9uIGJ1cnN0IHRyYW5zYWN0aW9uIGxlbmd0aCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9EU1RfTVNJWkVfMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAJLyogTm8gRGVzdGluYXRpb24gYnVyc3QgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRFNUX01TSVpFXzQgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIERlc3RpbmF0aW9uIGJ1cnN0IHRyYW5zYWN0aW9uIGxlbmd0aCA0ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RTVF9NU0laRV84ICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAkvKiBEZXN0aW5hdGlvbiBidXJzdCB0cmFuc2FjdGlvbiBsZW5ndGggOCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9EU1RfTVNJWkVfMTYgICAgICAgICAgICAgICAgIDB4MDAwMDE4MDAJLyogRGVzdGluYXRpb24gYnVyc3QgdHJhbnNhY3Rpb24gbGVuZ3RoIDE2ICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX01TSVpFX01BU0sgICAgICAgICAgICAgICAweDAwMDFDMDAwCS8qIFNvdXJjZSBidXJzdCB0cmFuc2FjdGlvbiBsZW5ndGggKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX01TSVpFXzAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5vIFNvdXJjZSBidXJzdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TUkNfTVNJWkVfNCAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDAJLyogU291cmNlIGJ1cnN0IHRyYW5zYWN0aW9uIGxlbmd0aCA0ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1NSQ19NU0laRV84ICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAkvKiBTb3VyY2UgYnVyc3QgdHJhbnNhY3Rpb24gbGVuZ3RoIDggKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU1JDX01TSVpFXzE2ICAgICAgICAgICAgICAgICAweDAwMDBDMDAwCS8qIFNvdXJjZSBidXJzdCB0cmFuc2FjdGlvbiBsZW5ndGggMTYgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9UVEZDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAJLyogVHJhbnNmZXIgdHlwZSBhbmQgZmxvdyBjb250cm9sbGVyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1RURkNfTU1fRE1BQyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBNZW1vcnkgdG8gTWVtb3J5IHdpdGggRE1BQyBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19NUF9ETUFDICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCS8qIE1lbW9yeSB0byBQZXJpcGhlcmFsIHdpdGggRE1BQyBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19QTV9ETUFDICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCS8qIFBlcmlwaGVyYWwgdG8gTWVtb3J5IHdpdGggRE1BQyBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19QUF9ETUFDICAgICAgICAgICAgICAgICAweDAwMzAwMDAwCS8qIFBlcmlwaGVyYWwgdG8gUGVyaXBoZXJhbCB3aXRoIERNQUMgYXMgZmxvdyBjb250cm9sbGVyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1RURkNfUE1fUEVSSSAgICAgICAgICAgICAgICAgMHgwMDQwMDAwMAkvKiBQZXJpcGhlcmFsIHRvIE1lbW9yeSB3aXRoIFBlcmlwaGVyYWwgYXMgZmxvdyBjb250cm9sbGVyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX1RURkNfUFBfU1BFUkkgICAgICAgICAgICAgICAgMHgwMDUwMDAwMAkvKiBQZXJpcGhlcmFsIHRvIFBlcmlwaGVyYWwgd2l0aCBTb3VyY2UgUGVyaXBoZXJhbCBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19NUF9QRVJJICAgICAgICAgICAgICAgICAweDAwNjAwMDAwCS8qIE1lbW9yeSB0byBQZXJpcGhlcmFsIHdpdGggUGVyaXBoZXJhbCBhcyBmbG93IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfVFRGQ19QUF9EUEVSSSAgICAgICAgICAgICAgICAweDAwNzAwMDAwCS8qIFBlcmlwaGVyYWwgdG8gUGVyaXBoZXJhbCB3aXRoIERlc3RpbmF0aW9uIFBlcmlwaGVyYWwgYXMgZmxvdyBjb250cm9sbGVyICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfRE1TX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxODAwMDAwCS8qIERlc3RpbmF0aW9uIEFIQiBtYXN0ZXIgaW50ZXJmYWNlICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RNU18xICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBEZXN0aW5hdGlvbiBBSEIgbWFzdGVyIGludGVyZmFjZSAxICovCisjZGVmaW5lIGRtYWNId19SRUdfQ1RMX0RNU18yICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwMDAwMAkvKiBEZXN0aW5hdGlvbiBBSEIgbWFzdGVyIGludGVyZmFjZSAyICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU01TX01BU0sgICAgICAgICAgICAgICAgICAgICAweDA2MDAwMDAwCS8qIFNvdXJjZSBBSEIgbWFzdGVyIGludGVyZmFjZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9TTVNfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAJLyogU291cmNlIEFIQiBtYXN0ZXIgaW50ZXJmYWNlIDEgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfU01TXzIgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIFNvdXJjZSBBSEIgbWFzdGVyIGludGVyZmFjZSAyICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DVExfTExQX0RTVF9FTiAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCS8qIEJsb2NrIGNoYWluaW5nIGVuYWJsZSBmb3IgZGVzdGluYXRpb24gc2lkZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9MTFBfU1JDX0VOICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAJLyogQmxvY2sgY2hhaW5pbmcgZW5hYmxlIGZvciBzb3VyY2Ugc2lkZSAqLworCisvKiBCaXQgbWFzayBmb3IgUkVHX0RNQUN4X0NUTF9ISSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9CTE9DS19UU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDBGRkYJLyogQmxvY2sgdHJhbnNmZXIgc2l6ZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NUTF9ET05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDAJLyogQmxvY2sgdHJhc25mZXIgZG9uZSAqLworCisvKiBCaXQgbWFzayBmb3IgUkVHX0RNQUN4X0NGR19MTyAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV9TSElGVCAgICAgICAgICAgICAgICAgIDUJLyogQ2hhbm5lbCBwcmlvcml0eSBzaGlmdCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV9NQVNLICAgICAgICAgIDB4MDAwMDAwRTAJLyogQ2hhbm5lbCBwcmlvcml0eSBtYXNrICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzAgICAgICAgICAgICAgMHgwMDAwMDAwMAkvKiBDaGFubmVsIHByaW9yaXR5IDAgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfMSAgICAgICAgICAgICAweDAwMDAwMDIwCS8qIENoYW5uZWwgcHJpb3JpdHkgMSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV8yICAgICAgICAgICAgIDB4MDAwMDAwNDAJLyogQ2hhbm5lbCBwcmlvcml0eSAyICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzMgICAgICAgICAgICAgMHgwMDAwMDA2MAkvKiBDaGFubmVsIHByaW9yaXR5IDMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNCAgICAgICAgICAgICAweDAwMDAwMDgwCS8qIENoYW5uZWwgcHJpb3JpdHkgNCAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9QUklPUklUWV81ICAgICAgICAgICAgIDB4MDAwMDAwQTAJLyogQ2hhbm5lbCBwcmlvcml0eSA1ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1BSSU9SSVRZXzYgICAgICAgICAgICAgMHgwMDAwMDBDMAkvKiBDaGFubmVsIHByaW9yaXR5IDYgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfNyAgICAgICAgICAgICAweDAwMDAwMEUwCS8qIENoYW5uZWwgcHJpb3JpdHkgNyAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX1NVU1BFTkQgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBDaGFubmVsIHN1c3BlbmQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfRklGT19FTVBUWSAgICAgICAgICAgICAweDAwMDAwMjAwCS8qIENoYW5uZWwgRklGTyBlbXB0eSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19EU1RfQ0hfU1dfSFMgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogRGVzdGluYXRpb24gY2hhbm5lbCBTVyBoYW5kc2hha2luZyAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19TUkNfQ0hfU1dfSFMgICAgICAgICAgICAgIDB4MDAwMDA4MDAJLyogU291cmNlIGNoYW5uZWwgU1cgaGFuZHNoYWtpbmcgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9MT0NLX01BU0sgICAgICAgICAgICAgIDB4MDAwMDMwMDAJLyogQ2hhbm5lbCBsb2NraW5nIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQ0hfTE9DS19ETUEgICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIENoYW5uZWwgbG9jayBvdmVyIHRoZSBlbnRpcmUgRE1BIHRyYW5zZmVyIG9wZXJhdGlvbiAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9MT0NLX0JMT0NLICAgICAgICAgICAgIDB4MDAwMDEwMDAJLyogQ2hhbm5lbCBsb2NrIG92ZXIgdGhlIGJsb2NrIHRyYW5zZmVyIG9wZXJhdGlvbiAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19DSF9MT0NLX1RSQU5TICAgICAgICAgICAgIDB4MDAwMDIwMDAJLyogQ2hhbm5lbCBsb2NrIG92ZXIgdGhlIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0NIX0xPQ0tfRU5BQkxFICAgICAgICAgICAgMHgwMDAxMDAwMAkvKiBDaGFubmVsIGxvY2sgZW5hYmxlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQlVTX0xPQ0tfTUFTSyAgICAgICAgICAgICAweDAwMDBDMDAwCS8qIEJ1cyBsb2NraW5nIG1hc2sgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQlVTX0xPQ0tfRE1BICAgICAgICAgICAgICAweDAwMDAwMDAwCS8qIEJ1cyBsb2NrIG92ZXIgdGhlIGVudGlyZSBETUEgdHJhbnNmZXIgb3BlcmF0aW9uICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0JVU19MT0NLX0JMT0NLICAgICAgICAgICAgMHgwMDAwNDAwMAkvKiBCdXMgbG9jayBvdmVyIHRoZSBibG9jayB0cmFuc2ZlciBvcGVyYXRpb24gKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQlVTX0xPQ0tfVFJBTlMgICAgICAgICAgICAweDAwMDA4MDAwCS8qIEJ1cyBsb2NrIG92ZXIgdGhlIHRyYW5zYWN0aW9uICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX0JVU19MT0NLX0VOQUJMRSAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBCdXMgbG9jayBlbmFibGUgKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19EU1RfSFNfUE9MQVJJVFlfTE9XICAgICAgIDB4MDAwNDAwMDAJLyogRGVzdGluYXRpb24gY2hhbm5lbCBoYW5kc2hha2luZyBzaWduYWwgcG9sYXJpdHkgbG93ICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0xPX1NSQ19IU19QT0xBUklUWV9MT1cgICAgICAgMHgwMDA4MDAwMAkvKiBTb3VyY2UgY2hhbm5lbCBoYW5kc2hha2luZyBzaWduYWwgcG9sYXJpdHkgbG93ICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fTUFYX0FNQkFfQlVSU1RfTEVOX01BU0sgICAweDNGRjAwMDAwCS8qIE1heGltdW0gQU1CQSBidXJzdCBsZW5ndGggKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19MT19BVVRPX1JFTE9BRF9TUkMgICAgICAgICAgIDB4NDAwMDAwMDAJLyogU291cmNlIGFkZHJlc3MgYXV0byByZWxvYWQgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfTE9fQVVUT19SRUxPQURfRFNUICAgICAgICAgICAweDgwMDAwMDAwCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgYXV0byByZWxvYWQgKi8KKworLyogQml0IG1hc2sgZm9yIFJFR19ETUFDeF9DRkdfSEkgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSElfRkNfRFNUX1JFQURZICAgICAgICAgICAgICAweDAwMDAwMDAxCS8qIFNvdXJjZSB0cmFuc2FjdGlvbiByZXF1ZXN0IGlzIHNlcnZpY2VkIHdoZW4gZGVzdGluYXRpb24gaXMgcmVhZHkgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSElfRklGT19FTk9VR0ggICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIEluaXRpYXRlIGJ1cnN0IHRyYW5zYWN0aW9uIHdoZW4gZW5vdWdoIGRhdGEgaW4gYXZhaWxhYmxlIGluIEZJRk8gKi8KKworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMUMJLyogQUhCIHByb3RlY3Rpb24gbWFzayAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfMSAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogQUhCIHByb3RlY3Rpb24gMSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfMiAgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogQUhCIHByb3RlY3Rpb24gMiAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9BSEJfSFBST1RfMyAgICAgICAgICAgICAgIDB4MDAwMDAwMTAJLyogQUhCIHByb3RlY3Rpb24gMyAqLworCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0hJX1VQREFURV9EU1RfU1RBVCAgICAgICAgICAgMHgwMDAwMDAyMAkvKiBEZXN0aW5hdGlvbiBzdGF0dXMgdXBkYXRlIGVuYWJsZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NGR19ISV9VUERBVEVfU1JDX1NUQVQgICAgICAgICAgIDB4MDAwMDAwNDAJLyogU291cmNlIHN0YXR1cyB1cGRhdGUgZW5hYmxlICovCisKKyNkZWZpbmUgZG1hY0h3X1JFR19DRkdfSElfU1JDX1BFUklfSU5URl9NQVNLICAgICAgICAweDAwMDAwNzgwCS8qIFNvdXJjZSBwZXJpcGhlcmFsIGhhcmR3YXJlIGludGVyZmFjZSBtYXNrICovCisjZGVmaW5lIGRtYWNId19SRUdfQ0ZHX0hJX0RTVF9QRVJJX0lOVEZfTUFTSyAgICAgICAgMHgwMDAwNzgwMAkvKiBEZXN0aW5hdGlvbiBwZXJpcGhlcmFsIGhhcmR3YXJlIGludGVyZmFjZSBtYXNrICovCisKKy8qIERNQSBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DT01QX1BBUkFNX05VTV9DSEFOTkVMUyAgICAgICAgICAweDAwMDAwNzAwCS8qIE51bWJlciBvZiBjaGFubmVscyAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NPTVBfUEFSQU1fTlVNX0lOVEVSRkFDRSAgICAgICAgIDB4MDAwMDE4MDAJLyogTnVtYmVyIG9mIG1hc3RlciBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgZG1hY0h3X1JFR19DT01QX1BBUkFNX01BWF9CTEtfU0laRSAgICAgICAgICAweDAwMDAwMDBmCS8qIE1heGltdW0gYnJ1c3Qgc2l6ZSAqLworI2RlZmluZSBkbWFjSHdfUkVHX0NPTVBfUEFSQU1fREFUQV9XSURUSCAgICAgICAgICAgIDB4MDAwMDYwMDAJLyogRGF0YSB0cmFuc2ZlciB3aWR0aCAqLworCisvKiBEZWZpbmUgR0VUL1NFVCBtYWNyb3MgdG8gcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIGRtYWNId19TRVRfU0FSKG1vZHVsZSwgY2hhbm5lbCwgYWRkcikgICAgICAgICAgKGRtYWNId19SRUdfU0FSKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKHVpbnQzMl90KSAoYWRkcikpCisjZGVmaW5lIGRtYWNId19TRVRfREFSKG1vZHVsZSwgY2hhbm5lbCwgYWRkcikgICAgICAgICAgKGRtYWNId19SRUdfREFSKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKHVpbnQzMl90KSAoYWRkcikpCisjZGVmaW5lIGRtYWNId19TRVRfTExQKG1vZHVsZSwgY2hhbm5lbCwgcHRyKSAgICAgICAgICAgKGRtYWNId19SRUdfTExQKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKHVpbnQzMl90KSAocHRyKSkKKworI2RlZmluZSBkbWFjSHdfR0VUX1NTVEFUKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgICAgIChkbWFjSHdfUkVHX1NTVEFUKChtb2R1bGUpLCAoY2hhbm5lbCkpKQorI2RlZmluZSBkbWFjSHdfR0VUX0RTVEFUKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgICAgIChkbWFjSHdfUkVHX0RTVEFUKChtb2R1bGUpLCAoY2hhbm5lbCkpKQorCisjZGVmaW5lIGRtYWNId19TRVRfU1NUQVRBUihtb2R1bGUsIGNoYW5uZWwsIGFkZHIpICAgICAgKGRtYWNId19SRUdfU1NUQVRBUigobW9kdWxlKSwgKGNoYW5uZWwpKSA9ICh1aW50MzJfdCkgKGFkZHIpKQorI2RlZmluZSBkbWFjSHdfU0VUX0RTVEFUQVIobW9kdWxlLCBjaGFubmVsLCBhZGRyKSAgICAgIChkbWFjSHdfUkVHX0RTVEFUQVIoKG1vZHVsZSksIChjaGFubmVsKSkgPSAodWludDMyX3QpIChhZGRyKSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTlRST0xfTE8obW9kdWxlLCBjaGFubmVsLCBjdGwpICAgIChkbWFjSHdfUkVHX0NUTF9MTygobW9kdWxlKSwgKGNoYW5uZWwpKSB8PSAoY3RsKSkKKyNkZWZpbmUgZG1hY0h3X1JFU0VUX0NPTlRST0xfTE8obW9kdWxlLCBjaGFubmVsKSAgICAgICAoZG1hY0h3X1JFR19DVExfTE8oKG1vZHVsZSksIChjaGFubmVsKSkgPSAwKQorI2RlZmluZSBkbWFjSHdfR0VUX0NPTlRST0xfTE8obW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NUTF9MTygobW9kdWxlKSwgKGNoYW5uZWwpKSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTlRST0xfSEkobW9kdWxlLCBjaGFubmVsLCBjdGwpICAgIChkbWFjSHdfUkVHX0NUTF9ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSB8PSAoY3RsKSkKKyNkZWZpbmUgZG1hY0h3X1JFU0VUX0NPTlRST0xfSEkobW9kdWxlLCBjaGFubmVsKSAgICAgICAoZG1hY0h3X1JFR19DVExfSEkoKG1vZHVsZSksIChjaGFubmVsKSkgPSAwKQorI2RlZmluZSBkbWFjSHdfR0VUX0NPTlRST0xfSEkobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NUTF9ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSkKKworI2RlZmluZSBkbWFjSHdfR0VUX0JMT0NLX1NJWkUobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NUTF9ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSAmIGRtYWNId19SRUdfQ1RMX0JMT0NLX1RTX01BU0spCisjZGVmaW5lIGRtYWNId19ETUFfQ09NUExFVEUobW9kdWxlLCBjaGFubmVsKSAgICAgICAgICAgKGRtYWNId19SRUdfQ1RMX0hJKChtb2R1bGUpLCAoY2hhbm5lbCkpICYgZG1hY0h3X1JFR19DVExfRE9ORSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTkZJR19MTyhtb2R1bGUsIGNoYW5uZWwsIGNmZykgICAgIChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSB8PSAoY2ZnKSkKKyNkZWZpbmUgZG1hY0h3X1JFU0VUX0NPTkZJR19MTyhtb2R1bGUsIGNoYW5uZWwpICAgICAgICAoZG1hY0h3X1JFR19DRkdfTE8oKG1vZHVsZSksIChjaGFubmVsKSkgPSAwKQorI2RlZmluZSBkbWFjSHdfR0VUX0NPTkZJR19MTyhtb2R1bGUsIGNoYW5uZWwpICAgICAgICAgIChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSkKKyNkZWZpbmUgZG1hY0h3X1NFVF9BTUJBX0JVU1JUX0xFTihtb2R1bGUsIGNoYW5uZWwsIGxlbikgICAgKGRtYWNId19SRUdfQ0ZHX0xPKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKGRtYWNId19SRUdfQ0ZHX0xPKChtb2R1bGUpLCAoY2hhbm5lbCkpICYgfihkbWFjSHdfUkVHX0NGR19MT19NQVhfQU1CQV9CVVJTVF9MRU5fTUFTSykpIHwgKCgobGVuKSA8PCAyMCkgJiBkbWFjSHdfUkVHX0NGR19MT19NQVhfQU1CQV9CVVJTVF9MRU5fTUFTSykpCisjZGVmaW5lIGRtYWNId19TRVRfQ0hBTk5FTF9QUklPUklUWShtb2R1bGUsIGNoYW5uZWwsIHByaW8pIChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSA9IChkbWFjSHdfUkVHX0NGR19MTygobW9kdWxlKSwgKGNoYW5uZWwpKSAmIH4oZG1hY0h3X1JFR19DRkdfTE9fQ0hfUFJJT1JJVFlfTUFTSykpIHwgKHByaW8pKQorI2RlZmluZSBkbWFjSHdfU0VUX0FIQl9IUFJPVChtb2R1bGUsIGNoYW5uZWwsIHByb3RlY3QpICAoZG1hY0h3X1JFR19DRkdfSEkobW9kdWxlLCBjaGFubmVsKSA9IChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSAmIH4oZG1hY0h3X1JFR19DRkdfSElfQUhCX0hQUk9UX01BU0spKSB8IChwcm90ZWN0KSkKKworI2RlZmluZSBkbWFjSHdfU0VUX0NPTkZJR19ISShtb2R1bGUsIGNoYW5uZWwsIGNmZykgICAgICAoZG1hY0h3X1JFR19DRkdfSEkoKG1vZHVsZSksIChjaGFubmVsKSkgfD0gKGNmZykpCisjZGVmaW5lIGRtYWNId19SRVNFVF9DT05GSUdfSEkobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSA9IDApCisjZGVmaW5lIGRtYWNId19HRVRfQ09ORklHX0hJKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgIChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSkKKyNkZWZpbmUgZG1hY0h3X1NFVF9TUkNfUEVSSV9JTlRGKG1vZHVsZSwgY2hhbm5lbCwgaW50ZikgKGRtYWNId19SRUdfQ0ZHX0hJKChtb2R1bGUpLCAoY2hhbm5lbCkpID0gKGRtYWNId19SRUdfQ0ZHX0hJKChtb2R1bGUpLCAoY2hhbm5lbCkpICYgfihkbWFjSHdfUkVHX0NGR19ISV9TUkNfUEVSSV9JTlRGX01BU0spKSB8ICgoKGludGYpIDw8IDcpICYgZG1hY0h3X1JFR19DRkdfSElfU1JDX1BFUklfSU5URl9NQVNLKSkKKyNkZWZpbmUgZG1hY0h3X1NSQ19QRVJJX0lOVEYoaW50ZikgICAgICAgICAgICAgICAgICAgICAgKCgoaW50ZikgPDwgNykgJiBkbWFjSHdfUkVHX0NGR19ISV9TUkNfUEVSSV9JTlRGX01BU0spCisjZGVmaW5lIGRtYWNId19TRVRfRFNUX1BFUklfSU5URihtb2R1bGUsIGNoYW5uZWwsIGludGYpIChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSA9IChkbWFjSHdfUkVHX0NGR19ISSgobW9kdWxlKSwgKGNoYW5uZWwpKSAmIH4oZG1hY0h3X1JFR19DRkdfSElfRFNUX1BFUklfSU5URl9NQVNLKSkgfCAoKChpbnRmKSA8PCAxMSkgJiBkbWFjSHdfUkVHX0NGR19ISV9EU1RfUEVSSV9JTlRGX01BU0spKQorI2RlZmluZSBkbWFjSHdfRFNUX1BFUklfSU5URihpbnRmKSAgICAgICAgICAgICAgICAgICAgICAoKChpbnRmKSA8PCAxMSkgJiBkbWFjSHdfUkVHX0NGR19ISV9EU1RfUEVSSV9JTlRGX01BU0spCisKKyNkZWZpbmUgZG1hY0h3X0RNQV9TVEFSVChtb2R1bGUsIGNoYW5uZWwpICAgICAgICAgICAgICAoZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRSgobW9kdWxlKSkgPSAoMHgwMDAwMDAwMSA8PCAoKGNoYW5uZWwpICsgOCkpIHwgKDB4MDAwMDAwMDEgPDwgKGNoYW5uZWwpKSkKKyNkZWZpbmUgZG1hY0h3X0RNQV9TVE9QKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgICAgICAgICAoZG1hY0h3X1JFR19NSVNDX0NIX0VOQUJMRSgobW9kdWxlKSkgPSAoMHgwMDAwMDAwMSA8PCAoKGNoYW5uZWwpICsgOCkpKQorI2RlZmluZSBkbWFjSHdfRE1BX0VOQUJMRShtb2R1bGUpICAgICAgICAgICAgICAgICAgICAgIChkbWFjSHdfUkVHX01JU0NfQ0ZHKChtb2R1bGUpKSA9IDEpCisjZGVmaW5lIGRtYWNId19ETUFfRElTQUJMRShtb2R1bGUpICAgICAgICAgICAgICAgICAgICAgKGRtYWNId19SRUdfTUlTQ19DRkcoKG1vZHVsZSkpID0gMCkKKworI2RlZmluZSBkbWFjSHdfVFJBTl9JTlRfRU5BQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgIChkbWFjSHdfUkVHX0lOVF9NQVNLX1RSQU4oKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSB8ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19CTE9DS19JTlRfRU5BQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfQkxPQ0soKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSB8ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19FUlJPUl9JTlRfRU5BQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfRVJST1IoKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSB8ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisKKyNkZWZpbmUgZG1hY0h3X1RSQU5fSU5UX0RJU0FCTEUobW9kdWxlLCBjaGFubmVsKSAgICAgICAoZG1hY0h3X1JFR19JTlRfTUFTS19UUkFOKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8ICgoY2hhbm5lbCkgKyA4KSkpCisjZGVmaW5lIGRtYWNId19CTE9DS19JTlRfRElTQUJMRShtb2R1bGUsIGNoYW5uZWwpICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfQkxPQ0soKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSkKKyNkZWZpbmUgZG1hY0h3X0VSUk9SX0lOVF9ESVNBQkxFKG1vZHVsZSwgY2hhbm5lbCkgICAgICAoZG1hY0h3X1JFR19JTlRfTUFTS19FUlJPUigobW9kdWxlKSkgPSAoMHgwMDAwMDAwMSA8PCAoKGNoYW5uZWwpICsgOCkpKQorI2RlZmluZSBkbWFjSHdfU1RSQU5fSU5UX0RJU0FCTEUobW9kdWxlLCBjaGFubmVsKSAgICAgIChkbWFjSHdfUkVHX0lOVF9NQVNLX1NUUkFOKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8ICgoY2hhbm5lbCkgKyA4KSkpCisjZGVmaW5lIGRtYWNId19EVFJBTl9JTlRfRElTQUJMRShtb2R1bGUsIGNoYW5uZWwpICAgICAgKGRtYWNId19SRUdfSU5UX01BU0tfRFRSQU4oKG1vZHVsZSkpID0gKDB4MDAwMDAwMDEgPDwgKChjaGFubmVsKSArIDgpKSkKKworI2RlZmluZSBkbWFjSHdfVFJBTl9JTlRfQ0xFQVIobW9kdWxlLCBjaGFubmVsKSAgICAgICAgIChkbWFjSHdfUkVHX0lOVF9DTEVBUl9UUkFOKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19CTE9DS19JTlRfQ0xFQVIobW9kdWxlLCBjaGFubmVsKSAgICAgICAgKGRtYWNId19SRUdfSU5UX0NMRUFSX0JMT0NLKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisjZGVmaW5lIGRtYWNId19FUlJPUl9JTlRfQ0xFQVIobW9kdWxlLCBjaGFubmVsKSAgICAgICAgKGRtYWNId19SRUdfSU5UX0NMRUFSX0VSUk9SKChtb2R1bGUpKSA9ICgweDAwMDAwMDAxIDw8IChjaGFubmVsKSkpCisKKyNkZWZpbmUgZG1hY0h3X0dFVF9OVU1fQ0hBTk5FTChtb2R1bGUpICAgICAgICAgICAgICAgICAoKChkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTFfSEkoKG1vZHVsZSkpICYgZG1hY0h3X1JFR19DT01QX1BBUkFNX05VTV9DSEFOTkVMUykgPj4gOCkgKyAxKQorI2RlZmluZSBkbWFjSHdfR0VUX05VTV9JTlRFUkZBQ0UobW9kdWxlKSAgICAgICAgICAgICAgICgoKGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMV9ISSgobW9kdWxlKSkgJiBkbWFjSHdfUkVHX0NPTVBfUEFSQU1fTlVNX0lOVEVSRkFDRSkgPj4gMTEpICsgMSkKKyNkZWZpbmUgZG1hY0h3X0dFVF9NQVhfQkxPQ0tfU0laRShtb2R1bGUsIGNoYW5uZWwpICAgICAoKGRtYWNId19SRUdfTUlTQ19DT01QX1BBUkFNMV9MTygobW9kdWxlKSkgPj4gKDQgKiAoY2hhbm5lbCkpKSAmIGRtYWNId19SRUdfQ09NUF9QQVJBTV9NQVhfQkxLX1NJWkUpCisjZGVmaW5lIGRtYWNId19HRVRfQ0hBTk5FTF9EQVRBX1dJRFRIKG1vZHVsZSwgY2hhbm5lbCkgKChkbWFjSHdfUkVHX01JU0NfQ09NUF9QQVJBTTFfSEkoKG1vZHVsZSkpICYgZG1hY0h3X1JFR19DT01QX1BBUkFNX0RBVEFfV0lEVEgpID4+IDEzKQorCisjZW5kaWYgLyogX0RNQUNIV19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvaHdfY2ZnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9od19jZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmE5MWJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvaHdfY2ZnLmgKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIENTUF9IV19DRkdfSAorI2RlZmluZSBDU1BfSFdfQ0ZHX0gKKworLyogLS0tLSBJbmNsdWRlIEZpbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KKyNpbmNsdWRlIDxtYWNoL2NzcC9jYXBfaW5saW5lLmg+CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisjaW5jbHVkZSA8bWFjaC9tZW1vcnlfc2V0dGluZ3MuaD4KKyNlbHNlCisjaW5jbHVkZSA8aHdfY2ZnLmg+CisjZW5kaWYKKworLyogU29tZSBpdGVtcyB0aGF0IGNhbiBiZSBkZWZpbmVkIGV4dGVybmFsbHksIGJ1dCB3aWxsIGJlIHNldCB0byBkZWZhdWx0IHZhbHVlcyAqLworLyogaWYgdGhleSBhcmUgbm90IGRlZmluZWQuICovCisvKiAgICAgIEhXX0NGR19QTExfU1BSRUFEX1NQRUNUUlVNX0RJU0FCTEUgICBEZWZhdWx0IHVuZGVmaW5lZCBhbmQgU1MgaXMgZW5hYmxlZC4gKi8KKy8qICAgICAgSFdfQ0ZHX1NEUkFNX0NBU19MQVRFTkNZICAgICAgICA1ICAgIERlZmF1bHQgNSwgVmFsdWVzIFszLi42XSAqLworLyogICAgICBIV19DRkdfU0RSQU1fQ0hJUF9TRUxFQ1RfQ05UICAgIDEgICAgRGVmYXVsdCAxLCBWYXVsZXMgWzEuLjJdICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9TUEVFRF9HUkFERSAgICAgICAgNjY3ICBEZWZhdWx0IDY2NywgVmFsdWVzIFs0MDAsNTMzLDY2Nyw4MDBdICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9XSURUSF9CSVRTICAgICAgICAgMTYgICBEZWZhdWx0IDE2LCBWYXVsZXMgWzgsMTZdICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9BRERSX0JSQyAgICAgICAgICAgICAgICBEZWZhdWx0IHVuZGVmaW5lZCBhbmQgUm93LUJhbmstQ29sIChSQkMpIGFkZHJlc3NpbmcgdXNlZC4gRGVmaW5lIHRvIHVzZSBCYW5rLVJvdy1Db2wgKEJSQykuICovCisvKiAgICAgIEhXX0NGR19TRFJBTV9DTEtfQVNZTkMgICAgICAgICAgICAgICBEZWZhdWx0IHVuZGVmaW5lZCBhbmQgRERSIGNsb2NrIGlzIHN5bmNocm9ub3VzIHdpdGggQVhJIEJVUyBjbG9jay4gRGVmaW5lIGZvciBBU1lOQyBtb2RlLiAqLworCisjaWYgZGVmaW5lZChDRkdfR0xPQkFMX0NISVApCisgICNpZiAoQ0ZHX0dMT0JBTF9DSElQID09IEZQR0ExMTEwNykKKyAgICAgI2RlZmluZSBIV19DRkdfQlVTX0NMS19IWiAgICAgICAgICAgIDUwMDAwMDAKKyAgICAgI2RlZmluZSBIV19DRkdfRERSX0NUTFJfQ0xLX0haICAgICAgMTAwMDAwMDAKKyAgICAgI2RlZmluZSBIV19DRkdfRERSX1BIWV9PTUlUCisgICAgICNkZWZpbmUgSFdfQ0ZHX1VBUlRfQ0xLX0haICAgICAgICAgICA3NTAwMDAwCisgICNlbHNlCisgICAgICNkZWZpbmUgSFdfQ0ZHX1BMTF9WQ09fSFogICAgICAgICAgIDIwMDAwMDAwMDAKKyAgICAgI2RlZmluZSBIV19DRkdfUExMMl9WQ09fSFogICAgICAgICAgMTgwMDAwMDAwMAorICAgICAjZGVmaW5lIEhXX0NGR19BUk1fQ0xLX0haICAgICAgICAgICAgQ0FQX0hXX0NGR19BUk1fQ0xLX0haCisgICAgICNkZWZpbmUgSFdfQ0ZHX0JVU19DTEtfSFogICAgICAgICAgICAxNjY2NjY2NjYKKyAgICAgI2RlZmluZSBIV19DRkdfRERSX0NUTFJfQ0xLX0haICAgICAgIDMzMzMzMzMzMworICAgICAjZGVmaW5lIEhXX0NGR19ERFJfUEhZX0NMS19IWiAgICAgICAgKDIgKiBIV19DRkdfRERSX0NUTFJfQ0xLX0haKQorICAgICAjZGVmaW5lIEhXX0NGR19VQVJUX0NMS19IWiAgICAgICAgICAgMTQyODU3MTQyCisgICAgICNkZWZpbmUgSFdfQ0ZHX1ZQTV9DTEtfSFogICAgICAgICAgICBDQVBfSFdfQ0ZHX1ZQTV9DTEtfSFoKKyAgI2VuZGlmCisjZWxzZQorICAgI2RlZmluZSBIV19DRkdfUExMX1ZDT19IWiAgICAgICAgICAgMTgwMDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfUExMMl9WQ09fSFogICAgICAgICAgMTgwMDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfQVJNX0NMS19IWiAgICAgICAgICAgIDQ1MDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfQlVTX0NMS19IWiAgICAgICAgICAgIDE1MDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfRERSX0NUTFJfQ0xLX0haICAgICAgIDMwMDAwMDAwMAorICAgI2RlZmluZSBIV19DRkdfRERSX1BIWV9DTEtfSFogICAgICAgICgyICogSFdfQ0ZHX0REUl9DVExSX0NMS19IWikKKyAgICNkZWZpbmUgSFdfQ0ZHX1VBUlRfQ0xLX0haICAgICAgICAgICAxNTAwMDAwMDAKKyAgICNkZWZpbmUgSFdfQ0ZHX1ZQTV9DTEtfSFogICAgICAgICAgICAzMDAwMDAwMDAKKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLSBQdWJsaWMgVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gUHVibGljIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworI2VuZGlmIC8qIENTUF9IV19DRkdfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9pbnRjSHdfcmVnLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9pbnRjSHdfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxZmM0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL2ludGNId19yZWcuaApAQCAtMCwwICsxLDI0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIGludGNId19yZWcuaAorKgorKiAgQGJyaWVmICAgcGxhdGZvcm0gc3BlY2lmaWMgaW50ZXJydXB0IGNvbnRyb2xsZXIgYml0IGFzc2lnbm1lbnRzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JTlRDSFdfUkVHX0gKKyNkZWZpbmUgX0lOVENIV19SRUdfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2luY2x1ZGUgPGNzcC9zdGRpbnQuaD4KKyNpbmNsdWRlIDxjc3AvcmVnLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBJTlRDSFdfTlVNX0lSUV9QRVJfSU5UQyAgIDMyCS8qIE1heGltdW0gbnVtYmVyIG9mIGludGVycnVwdCBjb250cm9sbGVycyAqLworI2RlZmluZSBJTlRDSFdfTlVNX0lOVEMgICAgICAgICAgIDMKKworLyogRGVmaW5lcyBmb3IgaW50ZXJydXB0IGNvbnRyb2xsZXJzLiBUaGlzIHNpbXBsaWZpZXMgYW5kIGNsZWFucyB1cCB0aGUgZnVuY3Rpb24gY2FsbHMuICovCisjZGVmaW5lIElOVENIV19JTlRDMCAgICAoKHZvaWQgKilNTV9JT19CQVNFX0lOVEMwKQorI2RlZmluZSBJTlRDSFdfSU5UQzEgICAgKCh2b2lkICopTU1fSU9fQkFTRV9JTlRDMSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDICAgICgodm9pZCAqKU1NX0lPX0JBU0VfU0lOVEMpCisKKy8qIElOVEMwIC0gaW50ZXJydXB0IGNvbnRyb2xsZXIgMCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfUElGX0JJVE5VTSAgICAgICAgICAgMzEJLyogUGVyaXBoZXJhbCBpbnRlcmZhY2UgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9DTENEX0JJVE5VTSAgICAgICAgICAzMAkvKiBMQ0QgQ29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0dFX0JJVE5VTSAgICAgICAgICAgIDI5CS8qIEdyYXBoaWMgZW5naW5lIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfQVBNX0JJVE5VTSAgICAgICAgICAgMjgJLyogQXVkaW8gcHJvY2VzcyBtb2R1bGUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9FU1dfQklUTlVNICAgICAgICAgICAyNwkvKiBFdGhlcm5ldCBzd2l0Y2ggaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9TUElIX0JJVE5VTSAgICAgICAgICAyNgkvKiBTUEkgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSM19CSVROVU0gICAgICAgIDI1CS8qIFRpbWVyMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMl9CSVROVU0gICAgICAgIDI0CS8qIFRpbWVyMiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMV9CSVROVU0gICAgICAgIDIzCS8qIFRpbWVyMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMF9CSVROVU0gICAgICAgIDIyCS8qIFRpbWVyMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1NESU9IMV9CSVROVU0gICAgICAgIDIxCS8qIFNESU8xIGhvc3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9TRElPSDBfQklUTlVNICAgICAgICAyMAkvKiBTRElPMCBob3N0IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfVVNCRF9CSVROVU0gICAgICAgICAgMTkJLyogVVNCIGRldmljZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkgxX0JJVE5VTSAgICAgICAgIDE4CS8qIFVTQjEgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkhEMl9CSVROVU0gICAgICAgIDE3CS8qIFVTQiBob3N0Mi9kZXZpY2UyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfVlBNX0JJVE5VTSAgICAgICAgICAgMTYJLyogVm9pY2UgcHJvY2VzcyBtb2R1bGUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUExQzdfQklUTlVNICAgICAgICAxNQkvKiBETUExIGNoYW5uZWwgNyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNl9CSVROVU0gICAgICAgIDE0CS8qIERNQTEgY2hhbm5lbCA2IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMUM1X0JJVE5VTSAgICAgICAgMTMJLyogRE1BMSBjaGFubmVsIDUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUExQzRfQklUTlVNICAgICAgICAxMgkvKiBETUExIGNoYW5uZWwgNCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDM19CSVROVU0gICAgICAgIDExCS8qIERNQTEgY2hhbm5lbCAzIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMUMyX0JJVE5VTSAgICAgICAgMTAJLyogRE1BMSBjaGFubmVsIDIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUExQzFfQklUTlVNICAgICAgICAgOQkvKiBETUExIGNoYW5uZWwgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMF9CSVROVU0gICAgICAgICA4CS8qIERNQTEgY2hhbm5lbCAwIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMEM3X0JJVE5VTSAgICAgICAgIDcJLyogRE1BMCBjaGFubmVsIDcgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUEwQzZfQklUTlVNICAgICAgICAgNgkvKiBETUEwIGNoYW5uZWwgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNV9CSVROVU0gICAgICAgICA1CS8qIERNQTAgY2hhbm5lbCA1IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMEM0X0JJVE5VTSAgICAgICAgIDQJLyogRE1BMCBjaGFubmVsIDQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUEwQzNfQklUTlVNICAgICAgICAgMwkvKiBETUEwIGNoYW5uZWwgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMl9CSVROVU0gICAgICAgICAyCS8qIERNQTAgY2hhbm5lbCAyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzBfRE1BMEMxX0JJVE5VTSAgICAgICAgIDEJLyogRE1BMCBjaGFubmVsIDEgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMF9ETUEwQzBfQklUTlVNICAgICAgICAgMAkvKiBETUEwIGNoYW5uZWwgMCBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBJTlRDSFdfSU5UQzBfUElGICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9QSUZfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfQ0xDRCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9DTENEX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0dFICAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfR0VfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfQVBNICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9BUE1fQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfRVNXICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9FU1dfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzBfU1BJSCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMF9TUElIX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1RJTUVSMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVElNRVIwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1NESU9IMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfU0RJT0gxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1NESU9IMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfU0RJT0gwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkQgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVVNCRF9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMF9VU0JIMSAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMwX1VTQkgxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1VTQkhEMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVVNCSEQyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX1ZQTSAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfVlBNX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM3X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM2X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM1X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDNCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUM0X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTFDMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMUMwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM3X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM2X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM1X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDNCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEM0X0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMwX0RNQTBDMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzBfRE1BMEMwX0JJVE5VTSkKKworLyogSU5UQzEgLSBpbnRlcnJ1cHQgY29udHJvbGxlciAxICovCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJWUE1QX0JJVE5VTSAgICAgICAyNwkvKiBERFIgYW5kIFZQTSBQTEwgY2xvY2sgcGhhc2UgcmVsYXRpb25zaGlwIGludGVydXB0IChOb3QgZm9yIEEwKSAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfRERSVlBNVF9CSVROVU0gICAgICAgMjYJLyogRERSIGFuZCBWUE0gSFcgcGhhc2UgYWxpZ24gdGltZW91dCBpbnRlcnJ1cHQgKE5vdCBmb3IgQTApICovCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJQX0JJVE5VTSAgICAgICAgICAyNgkvKiBERFIgYW5kIFBMTCBjbG9jayBwaGFzZSByZWxhdGlvbnNoaXAgaW50ZXJ1cHQgKEZvciBBMCBvbmx5KSkgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1JUQzJfQklUTlVNICAgICAgICAgIDI1CS8qIFJlYWwgdGltZSBjbG9jayB0YW1wZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9WREVDX0JJVE5VTSAgICAgICAgICAyNAkvKiBIYW50cm8gVmlkZW8gRGVjb2RlciBpbnRlcnJ1cHQgKi8KKy8qIEJpdHMgMTMtMjMgYXJlIG5vbi1zZWN1cmUgdmVyc2lvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdXJlIGJpdHMgaW4gU0lOVEMgYml0cyAwLTEwLiAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfU1BVTV9CSVROVU0gICAgICAgICAgMjMJLyogU2VjdXJlIHByb2Nlc3MgbW9kdWxlIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfUlRDMV9CSVROVU0gICAgICAgICAgMjIJLyogUmVhbCB0aW1lIGNsb2NrIG9uZS1zaG90IGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfUlRDMF9CSVROVU0gICAgICAgICAgMjEJLyogUmVhbCB0aW1lIGNsb2NrIHBlcmlvZGljIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfUk5HX0JJVE5VTSAgICAgICAgICAgMjAJLyogUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9GTVBVX0JJVE5VTSAgICAgICAgICAxOQkvKiBGbGFzaCBtZW1vcnkgcGFyaXRpb24gdW5pdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1ZNUFVfQklUTlVNICAgICAgICAgIDE4CS8qIFZSQU0gbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0RNUFVfQklUTlVNICAgICAgICAgIDE3CS8qIEREUjIgbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0tFWUNfQklUTlVNICAgICAgICAgIDE2CS8qIEtleSBwYWQgY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1RTQ19CSVROVU0gICAgICAgICAgIDE1CS8qIFRvdWNoIHNjcmVlbiBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfVUFSVDBfQklUTlVNICAgICAgICAgMTQJLyogVUFSVCAwICovCisjZGVmaW5lIElOVENIV19JTlRDMV9XRE9HX0JJVE5VTSAgICAgICAgICAxMwkvKiBXYXRjaGRvZyB0aW1lciBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBJTlRDSFdfSU5UQzFfVUFSVDFfQklUTlVNICAgICAgICAgMTIJLyogVUFSVCAxICovCisjZGVmaW5lIElOVENIV19JTlRDMV9QTVVJUlFfQklUTlVNICAgICAgICAxMQkvKiBBUk0gcGVyZm9ybWFuY2UgbW9uaXRvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0NPTU1SWF9CSVROVU0gICAgICAgIDEwCS8qIEFSTSBEREMgcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0NPTU1UWF9CSVROVU0gICAgICAgICA5CS8qIEFSTSBEREMgdHJhbnNtaXQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9GTEFTSENfQklUTlVNICAgICAgICAgOAkvKiBGbGFzaCBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BIWV9CSVROVU0gICAgICAgICAgIDcJLyogR2lnYWJpdCBQaHkgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9TUElTX0JJVE5VTSAgICAgICAgICAgNgkvKiBTUEkgc2xhdmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9JMkNTX0JJVE5VTSAgICAgICAgICAgNQkvKiBJMkMgc2xhdmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9JMkNIX0JJVE5VTSAgICAgICAgICAgNAkvKiBJMkMgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0kyUzFfQklUTlVNICAgICAgICAgICAzCS8qIEkyUzEgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19JTlRDMV9JMlMwX0JJVE5VTSAgICAgICAgICAgMgkvKiBJMlMwIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BJTzFfQklUTlVNICAgICAgICAgIDEJLyogR1BJTyBiaXQgNjQvLzMyIGNvbWJpbmVkIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BJTzBfQklUTlVNICAgICAgICAgIDAJLyogR1BJTyBiaXQgMzEvLzAgY29tYmluZWQgaW50ZXJydXB0ICovCisKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0REUlZQTVQgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfRERSVlBNVF9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9ERFJWUE1QICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0REUlZQTVBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfRERSUCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9ERFJQX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1ZERUMgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVkRFQ19CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9TUFVNICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX1NQVU1fQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfUlRDMiAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9SVEMyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1JUQzEgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfUlRDMV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9SVEMwICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX1JUQzBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfUk5HICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9STkdfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfRk1QVSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9GTVBVX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0lNUFUgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfSU1QVV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9ETVBVICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0RNUFVfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfS0VZQyAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9LRVlDX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1RTQyAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVFNDX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1VBUlQwICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVUFSVDBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfV0RPRyAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9XRE9HX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1VBUlQxICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfVUFSVDFfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfUE1VSVJRICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9QTVVJUlFfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfQ09NTVJYICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9DT01NUlhfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfQ09NTVRYICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9DT01NVFhfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfRkxBU0hDICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9GTEFTSENfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BIWSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9HUEhZX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX1NQSVMgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfU1BJU19CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9JMkNTICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0kyQ1NfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfSTJDSCAgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9JMkNIX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX0lOVEMxX0kyUzEgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfSU5UQzFfSTJTMV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9JMlMwICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0kyUzBfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfSU5UQzFfR1BJTzEgICAgICAgICAgICAgICAgKDE8PElOVENIV19JTlRDMV9HUElPMV9CSVROVU0pCisjZGVmaW5lIElOVENIV19JTlRDMV9HUElPMCAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX0lOVEMxX0dQSU8wX0JJVE5VTSkKKworLyogU0lOVEMgc2VjdXJlIGludCBjb250cm9sbGVyICovCisjZGVmaW5lIElOVENIV19TSU5UQ19SVEMyX0JJVE5VTSAgICAgICAgICAxNQkvKiBSZWFsIHRpbWUgY2xvY2sgdGFtcGVyIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfVElNRVIzX0JJVE5VTSAgICAgICAgMTQJLyogU2VjdXJlIHRpbWVyMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMl9CSVROVU0gICAgICAgIDEzCS8qIFNlY3VyZSB0aW1lcjIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19USU1FUjFfQklUTlVNICAgICAgICAxMgkvKiBTZWN1cmUgdGltZXIxIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfVElNRVIwX0JJVE5VTSAgICAgICAgMTEJLyogU2VjdXJlIHRpbWVyMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1NQVU1fQklUTlVNICAgICAgICAgIDEwCS8qIFNlY3VyZSBwcm9jZXNzIG1vZHVsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JUQzFfQklUTlVNICAgICAgICAgICA5CS8qIFJlYWwgdGltZSBjbG9jayBvbmUtc2hvdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JUQzBfQklUTlVNICAgICAgICAgICA4CS8qIFJlYWwgdGltZSBjbG9jayBwZXJpb2RpYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JOR19CSVROVU0gICAgICAgICAgICA3CS8qIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfRk1QVV9CSVROVU0gICAgICAgICAgIDYJLyogRmxhc2ggbWVtb3J5IHBhcml0aW9uIHVuaXQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19WTVBVX0JJVE5VTSAgICAgICAgICAgNQkvKiBWUkFNIG1lbW9yeSBwYXJ0aXRpb24gaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19ETVBVX0JJVE5VTSAgICAgICAgICAgNAkvKiBERFIyIG1lbW9yeSBwYXJ0aXRpb24gaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19LRVlDX0JJVE5VTSAgICAgICAgICAgMwkvKiBLZXkgcGFkIGNvbnRyb2xsZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIElOVENIV19TSU5UQ19UU0NfQklUTlVNICAgICAgICAgICAgMgkvKiBUb3VjaCBzY3JlZW4gY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1VBUlQwX0JJVE5VTSAgICAgICAgICAxCS8qIFVBUlQwIGludGVycnVwdCAqLworI2RlZmluZSBJTlRDSFdfU0lOVENfV0RPR19CSVROVU0gICAgICAgICAgIDAJLyogV2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0ICovCisKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMyAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIzX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMiAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIyX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMSAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1RJTUVSMCAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfVElNRVIwX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1NQVU0gICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfU1BVTV9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19SVEMyICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX1JUQzJfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfUlRDMSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19SVEMxX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX1JUQzAgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfUlRDMF9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19STkcgICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX1JOR19CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19GTVBVICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX0ZNUFVfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfSU1QVSAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19JTVBVX0JJVE5VTSkKKyNkZWZpbmUgSU5UQ0hXX1NJTlRDX0RNUFUgICAgICAgICAgICAgICAgICgxPDxJTlRDSFdfU0lOVENfRE1QVV9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19LRVlDICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX0tFWUNfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfVFNDICAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19UU0NfQklUTlVNKQorI2RlZmluZSBJTlRDSFdfU0lOVENfVUFSVDAgICAgICAgICAgICAgICAgKDE8PElOVENIV19TSU5UQ19VQVJUMF9CSVROVU0pCisjZGVmaW5lIElOVENIV19TSU5UQ19XRE9HICAgICAgICAgICAgICAgICAoMTw8SU5UQ0hXX1NJTlRDX1dET0dfQklUTlVNKQorCisvKiBQTDE5MiBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoVklDKSBsYXlvdXQgKi8KKyNkZWZpbmUgSU5UQ0hXX0lSUVNUQVRVUyAgICAgIDB4MDAJLyogSVJRIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBJTlRDSFdfRklRU1RBVFVTICAgICAgMHgwNAkvKiBGSVEgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19SQVdJTlRSICAgICAgICAweDA4CS8qIFJhdyBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19JTlRTRUxFQ1QgICAgICAweDBjCS8qIEludGVycnVwdCBTZWxlY3QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UQ0hXX0lOVEVOQUJMRSAgICAgIDB4MTAJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBJTlRDSFdfSU5URU5DTEVBUiAgICAgMHgxNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19TT0ZUSU5UICAgICAgICAweDE4CS8qIFNvZnQgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19TT0ZUSU5UQ0xFQVIgICAweDFjCS8qIFNvZnQgSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19QUk9URUNUSU9OICAgICAweDIwCS8qIFByb3RlY3Rpb24gRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVENIV19TV1BSSU9NQVNLICAgICAweDI0CS8qIFNvZnR3YXJlIFByaW9yaXR5IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UQ0hXX1BSSU9EQUlTWSAgICAgIDB4MjgJLyogUHJpb3JpdHkgRGFpc3kgQ2hhaW4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UQ0hXX1ZFQ1RBRERSMCAgICAgIDB4MTAwCS8qIFZlY3RvciBBZGRyZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBJTlRDSFdfVkVDVFBSSU8wICAgICAgMHgyMDAJLyogVmVjdG9yIFByaW9yaXR5IFJlZ2lzdGVycyAwLTMxICovCisjZGVmaW5lIElOVENIV19BRERSRVNTICAgICAgICAweGYwMAkvKiBWZWN0b3IgQWRkcmVzcyBSZWdpc3RlciAwLTMxICovCisjZGVmaW5lIElOVENIV19QSUQgICAgICAgICAgICAweGZlMAkvKiBQZXJpcGhlcmFsIElEIFJlZ2lzdGVyIDAtMyAqLworI2RlZmluZSBJTlRDSFdfUENFTExJRCAgICAgICAgMHhmZjAJLyogUHJpbWVDZWxsIElEIFJlZ2lzdGVyIDAtMyAqLworCisvKiBFeGFtcGxlIFVzYWdlOiBpbnRjSHdfaXJxX2VuYWJsZShJTlRDSFdfSU5UQzAsIElOVENIV19JTlRDMF9USU1FUjApOyAqLworLyogICAgICAgICAgICAgICAgaW50Y0h3X2lycV9jbGVhcihJTlRDSFdfSU5UQzAsIElOVENIV19JTlRDMF9USU1FUjApOyAqLworLyogICAgICAgICAgICAgICAgdWludDMyX3QgYml0cyA9IGludGNId19pcnFfc3RhdHVzKElOVENIV19JTlRDMCk7ICovCisvKiAgICAgICAgICAgICAgICB1aW50MzJfdCBiaXRzID0gaW50Y0h3X2lycV9yYXdfc3RhdHVzKElOVENIV19JTlRDMCk7ICovCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ2xlYXIgb25lIG9yIG1vcmUgSVJRIGludGVycnVwdHMuICovCitzdGF0aWMgaW5saW5lIHZvaWQgaW50Y0h3X2lycV9kaXNhYmxlKHZvaWQgKmJhc2VwLCB1aW50MzJfdCBtYXNrKQoreworCV9fUkVHMzIoYmFzZXAgKyBJTlRDSFdfSU5URU5DTEVBUikgPSBtYXNrOworfQorCisvKiBFbmFibGVzIG9uZSBvciBtb3JlIElSUSBpbnRlcnJ1cHRzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGludGNId19pcnFfZW5hYmxlKHZvaWQgKmJhc2VwLCB1aW50MzJfdCBtYXNrKQoreworCV9fUkVHMzIoYmFzZXAgKyBJTlRDSFdfSU5URU5BQkxFKSA9IG1hc2s7Cit9CisKKyNlbmRpZiAvKiBfSU5UQ0hXX1JFR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9tbV9hZGRyLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9tbV9hZGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZiYjU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL21tX2FkZHIuaApAQCAtMCwwICsxLDEwMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIG1tX2FkZHIuaAorKgorKiAgQGJyaWVmICAgTWVtb3J5IE1hcCBhZGRyZXNzIGRlZmludGlvbnMKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX01NX0FERFJfSAorI2RlZmluZSBfTU1fQUREUl9ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhZGVmaW5lZChDU1BfU0lNVUxBVElPTikKKyNpbmNsdWRlIDxjZmdfZ2xvYmFsLmg+CisjZW5kaWYKKworLyogLS0tLSBQdWJsaWMgQ29uc3RhbnRzIGFuZCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIE1lbW9yeSBNYXAgYWRkcmVzcyBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIE1NX0FERFJfRERSICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSBNTV9BRERSX0lPX1ZQTV9FWFRNRU1fUlNWRCAweDBGMDAwMDAwCS8qIDE2IE1CIC0gUmVzZXJ2ZWQgZXh0ZXJuYWwgbWVtb3J5IGZvciBWUE0gdXNlICovCisKKyNkZWZpbmUgTU1fQUREUl9JT19GTEFTSEMgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0JST00gICAgICAgICAgICAweDMwMDAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fQVJBTSAgICAgICAgICAgIDB4MzAxMDAwMDAJLyogNjQgS0IgLSBleHRyYSBjeWNsZSBsYXRlbmN5IC0gV1Mgc3dpdGNoICovCisjZGVmaW5lIE1NX0FERFJfSU9fRE1BMCAgICAgICAgICAgIDB4MzAyMDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19ETUExICAgICAgICAgICAgMHgzMDMwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0VTVyAgICAgICAgICAgICAweDMwNDAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fQ0xDRCAgICAgICAgICAgIDB4MzA1MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19QSUYgICAgICAgICAgICAgMHgzMDU4MDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0FQTSAgICAgICAgICAgICAweDMwNjAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fU1BVTSAgICAgICAgICAgIDB4MzA3MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19WUE1fUFJPRyAgICAgICAgMHgzMDgwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1ZQTV9EQVRBICAgICAgICAweDMwQTAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVlJBTSAgICAgICAgICAgIDB4NDAwMDAwMDAJLyogNjQgS0IgIC0gc2VjdXJpdHkgYmxvY2sgaW4gZnJvbnQgb2YgaXQgKi8KKyNkZWZpbmUgTU1fQUREUl9JT19DSElQQyAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1VNSSAgICAgICAgICAgICAweDgwMDAxMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fTkFORCAgICAgICAgICAgIDB4ODAwMDE4MDAKKyNkZWZpbmUgTU1fQUREUl9JT19MRURNICAgICAgICAgICAgMHg4MDAwMjAwMAorI2RlZmluZSBNTV9BRERSX0lPX1BXTSAgICAgICAgICAgICAweDgwMDAyMDQwCisjZGVmaW5lIE1NX0FERFJfSU9fVklOVEMgICAgICAgICAgIDB4ODAwMDMwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19HUElPMCAgICAgICAgICAgMHg4MDAwNDAwMAorI2RlZmluZSBNTV9BRERSX0lPX0dQSU8xICAgICAgICAgICAweDgwMDA0ODAwCisjZGVmaW5lIE1NX0FERFJfSU9fSTJDUyAgICAgICAgICAgIDB4ODAwMDUwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19TUElTICAgICAgICAgICAgMHg4MDAwNjAwMAorI2RlZmluZSBNTV9BRERSX0lPX0hQTSAgICAgICAgICAgICAweDgwMDA3NDAwCisjZGVmaW5lIE1NX0FERFJfSU9fSFBNX1JFTUFQICAgICAgIDB4ODAwMDc4MDAKKyNkZWZpbmUgTU1fQUREUl9JT19UWlBDICAgICAgICAgICAgMHg4MDAwODAwMAorI2RlZmluZSBNTV9BRERSX0lPX01QVSAgICAgICAgICAgICAweDgwMDA5MDAwCisjZGVmaW5lIE1NX0FERFJfSU9fU1BVTVAgICAgICAgICAgIDB4ODAwMGEwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19QS0EgICAgICAgICAgICAgMHg4MDAwYjAwMAorI2RlZmluZSBNTV9BRERSX0lPX1JORyAgICAgICAgICAgICAweDgwMDBjMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fS0VZQyAgICAgICAgICAgIDB4ODAwMGQwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19CQkwgICAgICAgICAgICAgMHg4MDAwZTAwMAorI2RlZmluZSBNTV9BRERSX0lPX09UUCAgICAgICAgICAgICAweDgwMDBmMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fSTJTMCAgICAgICAgICAgIDB4ODAwMTAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19JMlMxICAgICAgICAgICAgMHg4MDAxMTAwMAorI2RlZmluZSBNTV9BRERSX0lPX1VBUlRBICAgICAgICAgICAweDgwMDEyMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVUFSVEIgICAgICAgICAgIDB4ODAwMTMwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19JMkNIICAgICAgICAgICAgMHg4MDAxNDAyMAorI2RlZmluZSBNTV9BRERSX0lPX1NQSUggICAgICAgICAgICAweDgwMDE1MDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVFNDICAgICAgICAgICAgIDB4ODAwMTYwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19UTVIgICAgICAgICAgICAgMHg4MDAxNzAwMAorI2RlZmluZSBNTV9BRERSX0lPX1dBVENIRE9HICAgICAgICAweDgwMDE3ODAwCisjZGVmaW5lIE1NX0FERFJfSU9fRVRNICAgICAgICAgICAgIDB4ODAwMTgwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19ERFJDICAgICAgICAgICAgMHg4MDAxOTAwMAorI2RlZmluZSBNTV9BRERSX0lPX1NJTlRDICAgICAgICAgICAweDgwMTAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fSU5UQzAgICAgICAgICAgIDB4ODAyMDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19JTlRDMSAgICAgICAgICAgMHg4MDIwMTAwMAorI2RlZmluZSBNTV9BRERSX0lPX0dFICAgICAgICAgICAgICAweDgwMzAwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fVVNCX0NUTFIwICAgICAgIDB4ODA0MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19VU0JfQ1RMUjEgICAgICAgMHg4MDQxMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1VTQl9QSFkgICAgICAgICAweDgwNDIwMDAwCisjZGVmaW5lIE1NX0FERFJfSU9fU0RJT0gwICAgICAgICAgIDB4ODA1MDAwMDAKKyNkZWZpbmUgTU1fQUREUl9JT19TRElPSDEgICAgICAgICAgMHg4MDYwMDAwMAorI2RlZmluZSBNTV9BRERSX0lPX1ZERUMgICAgICAgICAgICAweDgwNzAwMDAwCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogX01NX0FERFJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3AvbW1faW8uaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL21tX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5MmVjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL21tX2lvLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwMyAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAZmlsZSAgICBtbV9pby5oCisqCisqICBAYnJpZWYgICBNZW1vcnkgTWFwIEkvTyBkZWZpbml0aW9ucworKgorKiAgQG5vdGUKKyogICAgIE5vbmUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfTU1fSU9fSAorI2RlZmluZSBfTU1fSU9fSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2luY2x1ZGUgPG1hY2gvY3NwL21tX2FkZHIuaD4KKworI2lmICFkZWZpbmVkKENTUF9TSU1VTEFUSU9OKQorI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KKyNlbmRpZgorCisvKiAtLS0tIFB1YmxpYyBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfTU1VKQorCisvKiBUaGlzIG1hY3JvIGlzIHJlZmVyZW5jZWQgaW4gPG1hY2gvaW8uaD4KKyAqIFBoeXMgdG8gVmlydHVhbCAweE55eHh4eHh4ID0+IDB4Rk54eHh4eHgKKyAqIFRoaXMgbWFjcm8gaXMgcmVmZXJlbmNlZCBpbiA8YXNtL2FyY2gvaW8uaD4KKyAqCisgKiBBc3N1bWUgVlBNIGFkZHJlc3MgaXMgdGhlIGxhc3QgeCBNQiBvZiBtZW1vcnkuICBGb3IgVlBNLCBtYXAgdG8KKyAqIDB4ZjAwMDAwMDAgYW5kIHVwLgorICovCisKKyNpZm5kZWYgTU1fSU9fUEhZU19UT19WSVJUCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIE1NX0lPX1BIWVNfVE9fVklSVChwaHlzKSAgICAgICAoMHhGMDAwMDAwMCB8ICgoKHBoeXMpID4+IDQpICYgMHgwRjAwMDAwMCkgfCAoKHBoeXMpICYgMHhGRkZGRkYpKQorI2Vsc2UKKyNkZWZpbmUgTU1fSU9fUEhZU19UT19WSVJUKHBoeXMpICAgICAgICgoKHBoeXMpID09IE1NX0FERFJfSU9fVlBNX0VYVE1FTV9SU1ZEKSA/IDB4RjAwMDAwMDAgOiBcCisJCQkoMHhGMDAwMDAwMCB8ICgoKHBoeXMpID4+IDQpICYgMHgwRjAwMDAwMCkgfCAoKHBoeXMpICYgMHhGRkZGRkYpKSkKKyNlbmRpZgorI2VuZGlmCisKKy8qIFZpcnR1YWwgdG8gUGh5c2ljYWwgMHhGTnh4eHh4eCA9PiAweE4weHh4eHh4ICovCisKKyNpZm5kZWYgTU1fSU9fVklSVF9UT19QSFlTCisjaWZkZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIE1NX0lPX1ZJUlRfVE9fUEhZUyh2aXJ0KSAgICAgICAoKCgodmlydCkgJiAweDBGMDAwMDAwKSA8PCA0KSB8ICgodmlydCkgJiAweEZGRkZGRikpCisjZWxzZQorI2RlZmluZSBNTV9JT19WSVJUX1RPX1BIWVModmlydCkgICAgICAgKCgodmlydCkgPT0gMHhGMDAwMDAwMCkgPyBNTV9BRERSX0lPX1ZQTV9FWFRNRU1fUlNWRCA6IFwKKwkJCSgoKCh2aXJ0KSAmIDB4MEYwMDAwMDApIDw8IDQpIHwgKCh2aXJ0KSAmIDB4RkZGRkZGKSkpCisjZW5kaWYKKyNlbmRpZgorCisjZWxzZQorCisjaWZuZGVmIE1NX0lPX1BIWVNfVE9fVklSVAorI2RlZmluZSBNTV9JT19QSFlTX1RPX1ZJUlQocGh5cykgICAgICAgKHBoeXMpCisjZW5kaWYKKworI2lmbmRlZiBNTV9JT19WSVJUX1RPX1BIWVMKKyNkZWZpbmUgTU1fSU9fVklSVF9UT19QSFlTKHZpcnQpICAgICAgICh2aXJ0KQorI2VuZGlmCisKKyNlbmRpZgorCisvKiBSZWdpc3RlcnMgaW4gMHhFeHh4eHh4eCB0aGF0IHNob3VsZCBiZSBtb3ZlZCB0byAweEZ4eHh4eHh4ICovCisjZGVmaW5lIE1NX0lPX0JBU0VfRkxBU0hDICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19GTEFTSEMpCisjZGVmaW5lIE1NX0lPX0JBU0VfTkFORCAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19OQU5EKQorI2RlZmluZSBNTV9JT19CQVNFX1VNSSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVU1JKQorCisjZGVmaW5lIE1NX0lPX1NUQVJUIE1NX0FERFJfSU9fRkxBU0hDCS8qIFBoeXNpY2FsIGJlZ2lubmluZyBvZiBJTyBtYXBwZWQgbWVtb3J5ICovCisjZGVmaW5lIE1NX0lPX0JBU0UgIE1NX0lPX0JBU0VfRkxBU0hDCS8qIFZpcnR1YWwgYmVnaW5uaW5nIG9mIElPIG1hcHBlZCBtZW1vcnkgKi8KKworI2RlZmluZSBNTV9JT19CQVNFX0JST00gICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fQlJPTSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9BUkFNICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0FSQU0pCisjZGVmaW5lIE1NX0lPX0JBU0VfRE1BMCAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19ETUEwKQorI2RlZmluZSBNTV9JT19CQVNFX0RNQTEgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fRE1BMSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9FU1cgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0VTVykKKyNkZWZpbmUgTU1fSU9fQkFTRV9DTENEICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0NMQ0QpCisjZGVmaW5lIE1NX0lPX0JBU0VfUElGICAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19QSUYpCisjZGVmaW5lIE1NX0lPX0JBU0VfQVBNICAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19BUE0pCisjZGVmaW5lIE1NX0lPX0JBU0VfU1BVTSAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TUFVNKQorI2RlZmluZSBNTV9JT19CQVNFX1ZQTV9QUk9HICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVlBNX1BST0cpCisjZGVmaW5lIE1NX0lPX0JBU0VfVlBNX0RBVEEgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19WUE1fREFUQSkKKworI2RlZmluZSBNTV9JT19CQVNFX1ZSQU0gICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVlJBTSkKKworI2RlZmluZSBNTV9JT19CQVNFX0NISVBDICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fQ0hJUEMpCisjZGVmaW5lIE1NX0lPX0JBU0VfRERSQyAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19ERFJDKQorI2RlZmluZSBNTV9JT19CQVNFX0xFRE0gICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fTEVETSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9QV00gICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1BXTSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9WSU5UQyAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1ZJTlRDKQorI2RlZmluZSBNTV9JT19CQVNFX0dQSU8wICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fR1BJTzApCisjZGVmaW5lIE1NX0lPX0JBU0VfR1BJTzEgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19HUElPMSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9UTVIgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1RNUikKKyNkZWZpbmUgTU1fSU9fQkFTRV9XQVRDSERPRyAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1dBVENIRE9HKQorI2RlZmluZSBNTV9JT19CQVNFX0VUTSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fRVRNKQorI2RlZmluZSBNTV9JT19CQVNFX0hQTSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSFBNKQorI2RlZmluZSBNTV9JT19CQVNFX0hQTV9SRU1BUCAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSFBNX1JFTUFQKQorI2RlZmluZSBNTV9JT19CQVNFX1RaUEMgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVFpQQykKKyNkZWZpbmUgTU1fSU9fQkFTRV9NUFUgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX01QVSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9TUFVNUCAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1NQVU1QKQorI2RlZmluZSBNTV9JT19CQVNFX1BLQSAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fUEtBKQorI2RlZmluZSBNTV9JT19CQVNFX1JORyAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fUk5HKQorI2RlZmluZSBNTV9JT19CQVNFX0tFWUMgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fS0VZQykKKyNkZWZpbmUgTU1fSU9fQkFTRV9CQkwgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0JCTCkKKyNkZWZpbmUgTU1fSU9fQkFTRV9PVFAgICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX09UUCkKKyNkZWZpbmUgTU1fSU9fQkFTRV9JMlMwICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0kyUzApCisjZGVmaW5lIE1NX0lPX0JBU0VfSTJTMSAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19JMlMxKQorI2RlZmluZSBNTV9JT19CQVNFX1VBUlRBICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVUFSVEEpCisjZGVmaW5lIE1NX0lPX0JBU0VfVUFSVEIgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19VQVJUQikKKyNkZWZpbmUgTU1fSU9fQkFTRV9JMkNIICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0kyQ0gpCisjZGVmaW5lIE1NX0lPX0JBU0VfU1BJSCAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TUElIKQorI2RlZmluZSBNTV9JT19CQVNFX1RTQyAgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fVFNDKQorI2RlZmluZSBNTV9JT19CQVNFX0kyQ1MgICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSTJDUykKKyNkZWZpbmUgTU1fSU9fQkFTRV9TUElTICAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1NQSVMpCisjZGVmaW5lIE1NX0lPX0JBU0VfU0lOVEMgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TSU5UQykKKyNkZWZpbmUgTU1fSU9fQkFTRV9JTlRDMCAgICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX0lOVEMwKQorI2RlZmluZSBNTV9JT19CQVNFX0lOVEMxICAgICAgICAgICAgICAgTU1fSU9fUEhZU19UT19WSVJUKE1NX0FERFJfSU9fSU5UQzEpCisjZGVmaW5lIE1NX0lPX0JBU0VfR0UgICAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19HRSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9VU0JfQ1RMUjAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1VTQl9DVExSMCkKKyNkZWZpbmUgTU1fSU9fQkFTRV9VU0JfQ1RMUjEgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1VTQl9DVExSMSkKKyNkZWZpbmUgTU1fSU9fQkFTRV9VU0JfUEhZICAgICAgICAgICAgIE1NX0lPX1BIWVNfVE9fVklSVChNTV9BRERSX0lPX1VTQl9QSFkpCisjZGVmaW5lIE1NX0lPX0JBU0VfU0RJT0gwICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TRElPSDApCisjZGVmaW5lIE1NX0lPX0JBU0VfU0RJT0gxICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19TRElPSDEpCisjZGVmaW5lIE1NX0lPX0JBU0VfVkRFQyAgICAgICAgICAgICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19WREVDKQorCisjZGVmaW5lIE1NX0lPX0JBU0VfVlBNX0VYVE1FTV9SU1ZEICAgICBNTV9JT19QSFlTX1RPX1ZJUlQoTU1fQUREUl9JT19WUE1fRVhUTUVNX1JTVkQpCisKKy8qIC0tLS0gUHVibGljIFZhcmlhYmxlIEV4dGVybnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIFB1YmxpYyBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZW5kaWYgLyogX01NX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL3NlY0h3X2RlZi5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3Avc2VjSHdfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1ZjVmMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL3NlY0h3X2RlZi5oCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgc2VjSHdfZGVmLmgKKyoKKyogIEBicmllZiAgIERlZmluaXRpb25zIGZvciBjb25maWd1cmluZy90ZXN0aW5nIHNlY3VyZSBibG9ja3MKKyoKKyogIEBub3RlCisqICAgICBOb25lCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgU0VDSFdfREVGX0gKKyNkZWZpbmUgU0VDSFdfREVGX0gKKworI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisKKy8qIEJpdCBtYXNrIGZvciB2YXJpb3VzIHNlY3VyZSBkZXZpY2UgKi8KKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfQ0hJUF9DT05UUk9MICAgICAweDAwMDAwMDAxCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX0tFWV9TQ0FOICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBzZWNId19CTEtfTUFTS19UT1VDSF9TQ1JFRU4gICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfVUFSVDAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX1VBUlQxICAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19XQVRDSERPRyAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfU1BVTSAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX0REUjIgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBzZWNId19CTEtfTUFTS19FWFRfTUVNICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfRVNXICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX1NQVSAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19QS0EgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfUk5HICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX1JUQyAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19PVFAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfQk9PVCAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIHNlY0h3X0JMS19NQVNLX01QVSAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBzZWNId19CTEtfTUFTS19UWkNUUkwgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgc2VjSHdfQkxLX01BU0tfSU5UUiAgICAgICAgICAgICAweDAxMDAwMDAwCisKKy8qIFRydXN0em9uZSByZWdpc3RlciBzZXQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl2b2xhdGlsZSB1aW50MzJfdCBzdGF0dXM7CS8qIHJlYWQgb25seSAtIHJlZmxlY3RzIHN0YXR1cyBvZiB3cml0ZXMgb2YgMiB3cml0ZSByZWdpc3RlcnMgKi8KKwl2b2xhdGlsZSB1aW50MzJfdCBzZXRVbnNlY3VyZTsJLyogd3JpdGUgb25seS4gcmVhZHMgYmFjayBhcyAwICovCisJdm9sYXRpbGUgdWludDMyX3Qgc2V0U2VjdXJlOwkvKiB3cml0ZSBvbmx5LiByZWFkcyBiYWNrIGFzIDAgKi8KK30gc2VjSHdfVFpSRUdfdDsKKworLyogVGhlcmUgYXJlIDIgcmVnaXN0ZXIgc2V0cy4gVGhlIGZpcnN0IGlzIGZvciB0aGUgbG93ZXIgMTYgYml0cywgdGhlIDJuZCAqLworLyogaXMgZm9yIHRoZSBoaWdoZXIgMTYgYml0cy4gKi8KKwordHlwZWRlZiBlbnVtIHsKKwlzZWNId19JRFhfTFMgPSAwLAorCXNlY0h3X0lEWF9NUyA9IDEsCisJc2VjSHdfSURYX05VTQorfSBzZWNId19JRFhfZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXZvbGF0aWxlIHNlY0h3X1RaUkVHX3QgcmVnW3NlY0h3X0lEWF9OVU1dOworfSBzZWNId19SRUdTX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIENvbmZpZ3VyZXMgYSBkZXZpY2UgYXMgYSBzZWN1cmUgZGV2aWNlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjSHdfc2V0U2VjdXJlKHVpbnQzMl90IG1hc2sJLyogIG1hc2sgb2YgdHlwZSBzZWNId19CTEtfTUFTS19YWFhYWFggKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGJyaWVmICBDb25maWd1cmVzIGEgZGV2aWNlIGFzIGEgbm9uLXNlY3VyZSBkZXZpY2UKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWNId19zZXRVbnNlY3VyZSh1aW50MzJfdCBtYXNrCS8qICBtYXNrIG9mIHR5cGUgc2VjSHdfQkxLX01BU0tfWFhYWFhYICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgR2V0IHRoZSB0cnVzdHpvbmUgc3RhdHVzIGZvciBhbGwgY29tcG9uZW50cy4gMSA9IG5vbi1zZWN1cmUsIDAgPSBzZWN1cmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qgc2VjSHdfZ2V0U3RhdHVzKHZvaWQpOworCisjaW5jbHVkZSA8bWFjaC9jc3Avc2VjSHdfaW5saW5lLmg+CisKKyNlbmRpZiAvKiBTRUNIV19ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3Avc2VjSHdfaW5saW5lLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC9zZWNId19pbmxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Q2YTAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9jc3Avc2VjSHdfaW5saW5lLmgKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBmaWxlICAgIHNlY0h3X2lubGluZS5oCisqCisqICBAYnJpZWYgICBEZWZpbml0aW9ucyBmb3IgY29uZmlndXJpbmcvdGVzdGluZyBzZWN1cmUgYmxvY2tzCisqCisqICBAbm90ZQorKiAgICAgTm9uZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFNFQ0hXX0lOTElORV9ICisjZGVmaW5lIFNFQ0hXX0lOTElORV9ICisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIENvbmZpZ3VyZXMgYSBkZXZpY2UgYXMgYSBzZWN1cmUgZGV2aWNlCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgc2VjSHdfc2V0U2VjdXJlKHVpbnQzMl90IG1hc2sJLyogIG1hc2sgb2YgdHlwZSBzZWNId19CTEtfTUFTS19YWFhYWFggKi8KKyAgICApIHsKKwlzZWNId19SRUdTX3QgKnJlZ3AgPSAoc2VjSHdfUkVHU190ICopIE1NX0lPX0JBU0VfVFpQQzsKKworCWlmIChtYXNrICYgMHgwMDAwRkZGRikgeworCQlyZWdwLT5yZWdbc2VjSHdfSURYX0xTXS5zZXRTZWN1cmUgPSBtYXNrICYgMHgwMDAwRkZGRjsKKwl9CisKKwlpZiAobWFzayAmIDB4RkZGRjAwMDApIHsKKwkJcmVncC0+cmVnW3NlY0h3X0lEWF9NU10uc2V0U2VjdXJlID0gbWFzayA+PiAxNjsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICBAYnJpZWYgIENvbmZpZ3VyZXMgYSBkZXZpY2UgYXMgYSBub24tc2VjdXJlIGRldmljZQorKgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGlubGluZSB2b2lkIHNlY0h3X3NldFVuc2VjdXJlKHVpbnQzMl90IG1hc2sJLyogIG1hc2sgb2YgdHlwZSBzZWNId19CTEtfTUFTS19YWFhYWFggKi8KKyAgICApIHsKKwlzZWNId19SRUdTX3QgKnJlZ3AgPSAoc2VjSHdfUkVHU190ICopIE1NX0lPX0JBU0VfVFpQQzsKKworCWlmIChtYXNrICYgMHgwMDAwRkZGRikgeworCQlyZWdwLT5yZWdbc2VjSHdfSURYX0xTXS5zZXRVbnNlY3VyZSA9IG1hc2sgJiAweDAwMDBGRkZGOworCX0KKwlpZiAobWFzayAmIDB4RkZGRjAwMDApIHsKKwkJcmVncC0+cmVnW3NlY0h3X0lEWF9NU10uc2V0VW5zZWN1cmUgPSBtYXNrID4+IDE2OworCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogIEBicmllZiAgR2V0IHRoZSB0cnVzdHpvbmUgc3RhdHVzIGZvciBhbGwgY29tcG9uZW50cy4gMSA9IG5vbi1zZWN1cmUsIDAgPSBzZWN1cmUKKyoKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qgc2VjSHdfZ2V0U3RhdHVzKHZvaWQpCit7CisJc2VjSHdfUkVHU190ICpyZWdwID0gKHNlY0h3X1JFR1NfdCAqKSBNTV9JT19CQVNFX1RaUEM7CisKKwlyZXR1cm4gKHJlZ3AtPnJlZ1sxXS5zdGF0dXMgPDwgMTYpICsgcmVncC0+cmVnWzBdLnN0YXR1czsKK30KKworI2VuZGlmIC8qIFNFQ0hXX0lOTElORV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC90bXJId19yZWcuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvY3NwL3Rtckh3X3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODBhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2NzcC90bXJId19yZWcuaApAQCAtMCwwICsxLDgyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgQGZpbGUgICAgdG1ySHdfcmVnLmgKKyoKKyogIEBicmllZiAgIERlZmluaXRpb25zIGZvciBsb3cgbGV2ZWwgVGltZXIgcmVnaXN0ZXJzCisqCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9UTVJIV19SRUdfSAorI2RlZmluZSBfVE1SSFdfUkVHX0gKKworI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvaHdfY2ZnLmg+CisvKiBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgdG1ySHdfTU9EVUxFX0JBU0VfQUREUiAgICAgICAgICBNTV9JT19CQVNFX1RNUgorCisvKgorVGhpcyBwbGF0Zm9ybSBoYXMgZm91ciBkaWZmZXJlbnQgdGltZXJzIHJ1bm5pbmcgYXQgZGlmZmVyZW50IGNsb2NrIHNwZWVkCisKK1RpbWVyIG9uZSAgIChUaW1lciBJRCAwKSBydW5zIGF0ICAyNSBNSHoKK1RpbWVyIHR3byAgIChUaW1lciBJRCAxKSBydW5zIGF0ICAyNSBNSHoKK1RpbWVyIHRocmVlIChUaW1lciBJRCAyKSBydW5zIGF0IDE1MCBNSHoKK1RpbWVyIGZvdXIgIChUaW1lciBJRCAzKSBydW5zIGF0IDE1MCBNSHoKKyovCisjZGVmaW5lIHRtckh3X0xPV19GUkVRVUVOQ1lfTUhaICAgICAgICAgMjUJLyogQWx3YXlzIDI1TUh6IGZyb20gWFRBTCAqLworI2RlZmluZSB0bXJId19MT1dfRlJFUVVFTkNZX0haICAgICAgICAgIDI1MDAwMDAwCisKKyNpZiBkZWZpbmVkKENGR19HTE9CQUxfQ0hJUCkgJiYgKENGR19HTE9CQUxfQ0hJUCA9PSBGUEdBMTExMDcpCisjZGVmaW5lIHRtckh3X0hJR0hfRlJFUVVFTkNZX01IWiAgICAgICAgMTUwCS8qIEFsd2F5cyAxNTBNSHogZm9yIEZQR0EgKi8KKyNkZWZpbmUgdG1ySHdfSElHSF9GUkVRVUVOQ1lfSFogICAgICAgICAxNTAwMDAwMDAKKyNlbHNlCisjZGVmaW5lIHRtckh3X0hJR0hfRlJFUVVFTkNZX0haICAgICAgICAgSFdfQ0ZHX0JVU19DTEtfSFoKKyNkZWZpbmUgdG1ySHdfSElHSF9GUkVRVUVOQ1lfTUhaICAgICAgICAoSFdfQ0ZHX0JVU19DTEtfSFogLyAxMDAwMDAwKQorI2VuZGlmCisKKyNkZWZpbmUgdG1ySHdfTE9XX1JFU09MVVRJT05fQ0xPQ0sgICAgICB0bXJId19MT1dfRlJFUVVFTkNZX0haCisjZGVmaW5lIHRtckh3X0hJR0hfUkVTT0xVVElPTl9DTE9DSyAgICAgdG1ySHdfSElHSF9GUkVRVUVOQ1lfSFoKKyNkZWZpbmUgdG1ySHdfTUFYX0NPVU5UICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRikJLyogbWF4aW11bSBudW1iZXIgb2YgY291bnQgYSB0aW1lciBjYW4gY291bnQgKi8KKyNkZWZpbmUgdG1ySHdfVElNRVJfTlVNX0NPVU5UICAgICAgICAgICAoNCkJLyogTnVtYmVyIG9mIHRpbWVyIG1vZHVsZSBzdXBwb3J0ZWQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IExvYWRWYWx1ZTsJLyogTG9hZCB2YWx1ZSBmb3IgdGltZXIgKi8KKwl1aW50MzJfdCBDdXJyZW50VmFsdWU7CS8qIEN1cnJlbnQgdmFsdWUgZm9yIHRpbWVyICovCisJdWludDMyX3QgQ29udHJvbDsJLyogQ29udHJvbCByZWdpc3RlciAqLworCXVpbnQzMl90IEludGVycnVwdENsZWFyOwkvKiBJbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXIgKi8KKwl1aW50MzJfdCBSYXdJbnRlcnJ1cHRTdGF0dXM7CS8qIFJhdyBpbnRlcnJ1cHQgc3RhdHVzICovCisJdWludDMyX3QgSW50ZXJydXB0U3RhdHVzOwkvKiBNYXNrZWQgaW50ZXJydXB0IHN0YXR1cyAqLworCXVpbnQzMl90IEJhY2tncm91bmRMb2FkOwkvKiBCYWNrZ3JvdW5kIGxvYWQgdmFsdWUgKi8KKwl1aW50MzJfdCBwYWRkaW5nOwkvKiBQYWRkaW5nIHJlZ2lzdGVyICovCit9IHRtckh3X1JFR190OworCisvKiBDb250cm9sIGJvdCBtYXNrcyAqLworI2RlZmluZSB0bXJId19DT05UUk9MX1RJTUVSX0VOQUJMRSAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgdG1ySHdfQ09OVFJPTF9QRVJJT0RJQyAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIHRtckh3X0NPTlRST0xfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSB0bXJId19DT05UUk9MX1BSRVNDQUxFX01BU0sgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgdG1ySHdfQ09OVFJPTF9QUkVTQ0FMRV8xICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIHRtckh3X0NPTlRST0xfUFJFU0NBTEVfMTYgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSB0bXJId19DT05UUk9MX1BSRVNDQUxFXzI1NiAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgdG1ySHdfQ09OVFJPTF8zMkJJVCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIHRtckh3X0NPTlRST0xfT05FU0hPVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSB0bXJId19DT05UUk9MX0ZSRUVfUlVOTklORyAgICAgICAgICAgIDB4MDAwMDAwMDAKKworI2RlZmluZSB0bXJId19DT05UUk9MX01PREVfTUFTSyAgICAgICAgICAgICAgICh0bXJId19DT05UUk9MX1BFUklPRElDIHwgdG1ySHdfQ09OVFJPTF9PTkVTSE9UKQorCisjZGVmaW5lIHBUbXJIdyAoKHZvbGF0aWxlIHRtckh3X1JFR190ICopdG1ySHdfTU9EVUxFX0JBU0VfQUREUikKKworI2VuZGlmIC8qIF9UTVJIV19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3OTgwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTAsMCArMSw4MjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNCAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQGZpbGUgICBkbWEuaAorKgorKiAgIEBicmllZiAgQVBJIGRlZmluaXRpb25zIGZvciB0aGUgbGludXggRE1BIGludGVyZmFjZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKEFTTV9BUk1fQVJDSF9CQ01SSU5HX0RNQV9IKQorI2RlZmluZSBBU01fQVJNX0FSQ0hfQkNNUklOR19ETUFfSAorCisvKiAtLS0tIEluY2x1ZGUgRmlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGNzcC9kbWFjSHcuaD4KKyNpbmNsdWRlIDxtYWNoL3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKworLyogLS0tLSBDb25zdGFudHMgYW5kIFR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSWYgRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIHRoZSBmaWxlbmFtZSAqLworLyogYW5kIGxpbmUgbnVtYmVyIG9mIHRoZSByZXNlcnZhdGlvbiByZXF1ZXN0IHdpbGwgYmUgcmVjb3JkZWQgaW4gdGhlIGNoYW5uZWwgdGFibGUgKi8KKworI2RlZmluZSBETUFfREVCVUdfVFJBQ0tfUkVTRVJWQVRJT04gICAxCisKKyNkZWZpbmUgRE1BX05VTV9DT05UUk9MTEVSUyAgICAgMgorI2RlZmluZSBETUFfTlVNX0NIQU5ORUxTICAgICAgICA4CS8qIHBlciBjb250cm9sbGVyICovCisKK3R5cGVkZWYgZW51bSB7CisJRE1BX0RFVklDRV9NRU1fVE9fTUVNLAkvKiBGb3IgbWVtb3J5IHRvIG1lbW9yeSB0cmFuc2ZlcnMgKi8KKwlETUFfREVWSUNFX0kyUzBfREVWX1RPX01FTSwKKwlETUFfREVWSUNFX0kyUzBfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX0kyUzFfREVWX1RPX01FTSwKKwlETUFfREVWSUNFX0kyUzFfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX0FQTV9DT0RFQ19BX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9BUE1fQ09ERUNfQV9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfQVBNX0NPREVDX0JfREVWX1RPX01FTSwKKwlETUFfREVWSUNFX0FQTV9DT0RFQ19CX01FTV9UT19ERVYsCisJRE1BX0RFVklDRV9BUE1fQ09ERUNfQ19ERVZfVE9fTUVNLAkvKiBBZGRpdGlvbmFsIG1pYyBpbnB1dCBmb3IgYmVhbS1mb3JtaW5nICovCisJRE1BX0RFVklDRV9BUE1fUENNMF9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfQVBNX1BDTTBfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX0FQTV9QQ00xX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9BUE1fUENNMV9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfU1BVTV9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfU1BVTV9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfU1BJSF9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfU1BJSF9NRU1fVE9fREVWLAorCURNQV9ERVZJQ0VfVUFSVF9BX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9VQVJUX0FfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX1VBUlRfQl9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfVUFSVF9CX01FTV9UT19ERVYsCisJRE1BX0RFVklDRV9QSUZfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX1BJRl9ERVZfVE9fTUVNLAorCURNQV9ERVZJQ0VfRVNXX0RFVl9UT19NRU0sCisJRE1BX0RFVklDRV9FU1dfTUVNX1RPX0RFViwKKwlETUFfREVWSUNFX1ZQTV9NRU1fVE9fTUVNLAorCURNQV9ERVZJQ0VfQ0xDRF9NRU1fVE9fTUVNLAorCURNQV9ERVZJQ0VfTkFORF9NRU1fVE9fTUVNLAorCURNQV9ERVZJQ0VfTUVNX1RPX1ZSQU0sCisJRE1BX0RFVklDRV9WUkFNX1RPX01FTSwKKworCS8qIEFkZCBuZXcgZW50cmllcyBiZWZvcmUgdGhpcyBsaW5lLiAqLworCisJRE1BX05VTV9ERVZJQ0VfRU5UUklFUywKKwlETUFfREVWSUNFX05PTkUgPSAweGZmLAkvKiBTcGVjaWFsIHZhbHVlIHRvIGluZGljYXRlIHRoYXQgbm8gZGV2aWNlIGlzIGN1cnJlbnRseSBhc3NpZ25lZC4gKi8KKworfSBETUFfRGV2aWNlX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9IYW5kbGVfdCBpcyB0aGUgcHJpbWFyeSBvYmplY3QgdXNlZCBieSBjYWxsZXJzIG9mIHRoZSBBUEkuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBETUFfSU5WQUxJRF9IQU5ETEUgICgoRE1BX0hhbmRsZV90KSAtMSkKKwordHlwZWRlZiBpbnQgRE1BX0hhbmRsZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIFRoZSBETUFfRGVzY3JpcHRvclJpbmdfdCBjb250YWlucyBhIHJpbmcgb2YgZGVzY3JpcHRvcnMgd2hpY2ggaXMgdXNlZAorKiAgIHRvIHBvaW50IHRvIHJlZ2lvbnMgb2YgbWVtb3J5LgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl2b2lkICp2aXJ0QWRkcjsJCS8qIFZpcnR1YWwgQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBwaHlzQWRkcjsJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvciByaW5nICovCisJaW50IGRlc2NyaXB0b3JzQWxsb2NhdGVkOwkvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGluIHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwlzaXplX3QgYnl0ZXNBbGxvY2F0ZWQ7CS8qIE51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgaW4gdGhlIGRlc2NyaXB0b3IgcmluZyAqLworCit9IERNQV9EZXNjcmlwdG9yUmluZ190OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIFRoZSBETUFfTWVtVHlwZV90IGFuZCBETUFfTWVtTWFwX3QgYXJlIGhlbHBlciBzdHJ1Y3R1cmVzIHVzZWQgdG8gc2V0dXAKKyogICBETUEgY2hhaW5zIGZyb20gYSB2YXJpZXR5IG9mIG1lbW9yeSBzb3VyY2VzLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRE1BX01FTV9NQVBfTUlOX1NJWkUgICAgNDA5NgkvKiBQYWdlcyBsZXNzIHRoYW4gdGhpcyBzaXplIGFyZSBiZXR0ZXIgKi8KKwkJCQkJLyogb2ZmIG5vdCBiZWluZyBETUEnZC4gKi8KKwordHlwZWRlZiBlbnVtIHsKKwlETUFfTUVNX1RZUEVfTk9ORSwJLyogTm90IGEgdmFsaWQgc2V0dGluZyAqLworCURNQV9NRU1fVFlQRV9WTUFMTE9DLAkvKiBNZW1vcnkgY2FtZSBmcm9tIHZtYWxsb2MgY2FsbCAqLworCURNQV9NRU1fVFlQRV9LTUFMTE9DLAkvKiBNZW1vcnkgY2FtZSBmcm9tIGttYWxsb2MgY2FsbCAqLworCURNQV9NRU1fVFlQRV9ETUEsCS8qIE1lbW9yeSBjYW1lIGZyb20gZG1hX2FsbG9jX3h4eCBjYWxsICovCisJRE1BX01FTV9UWVBFX1VTRVIsCS8qIE1lbW9yeSBjYW1lIGZyb20gdXNlciBzcGFjZS4gKi8KKworfSBETUFfTWVtVHlwZV90OworCisvKiBBIHNlZ21lbnQgcmVwcmVzZW50cyBhIHBoeXNpY2FsbHkgYW5kIHZpcnR1YWxseSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeS4gKi8KKy8qIGkuZS4gZWFjaCBzZWdtZW50IGNhbiBiZSBETUEnZCAqLworLyogQSB1c2VyIG9mIHRoZSBETUEgY29kZSB3aWxsIGFkZCBtZW1vcnkgcmVnaW9ucy4gRWFjaCByZWdpb24gbWF5IG5lZWQgdG8gYmUgKi8KKy8qIHJlcHJlc2VudGVkIGJ5IG9uZSBvciBtb3JlIHNlZ21lbnRzLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdm9pZCAqdmlydEFkZHI7CQkvKiBWaXJ0dWFsIGFkZHJlc3MgdXNlZCBmb3IgdGhpcyBzZWdtZW50ICovCisJZG1hX2FkZHJfdCBwaHlzQWRkcjsJLyogUGh5c2ljYWwgYWRkcmVzcyB0aGlzIHNlZ21lbnQgbWFwcyB0byAqLworCXNpemVfdCBudW1CeXRlczsJLyogU2l6ZSBvZiB0aGUgc2VnbWVudCwgaW4gYnl0ZXMgKi8KKworfSBETUFfU2VnbWVudF90OworCisvKiBBIHJlZ2lvbiByZXByZXNlbnRzIGEgdmlydHVhbGx5IGNvbnRpZ3VvdXMgY2h1bmsgb2YgbWVtb3J5LCB3aGljaCBtYXkgYmUgKi8KKy8qIG1hZGUgdXAgb2YgbXVsdGlwbGUgc2VnbWVudHMuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlETUFfTWVtVHlwZV90IG1lbVR5cGU7CisJdm9pZCAqdmlydEFkZHI7CisJc2l6ZV90IG51bUJ5dGVzOworCisJLyogRWFjaCByZWdpb24gKHZpcnR1YWxseSBjb250aWd1b3VzKSBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBzZWdtZW50cy4gRWFjaCAqLworCS8qIHNlZ21lbnQgaXMgdmlydHVhbGx5IGFuZCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuICovCisKKwlpbnQgbnVtU2VnbWVudHNVc2VkOworCWludCBudW1TZWdtZW50c0FsbG9jYXRlZDsKKwlETUFfU2VnbWVudF90ICpzZWdtZW50OworCisJLyogV2hlbiBhIHJlZ2lvbiBjb3JyZXNwb25kcyB0byB1c2VyIG1lbW9yeSwgd2UgbmVlZCB0byBsb2NrIGFsbCBvZiB0aGUgcGFnZXMgKi8KKwkvKiBkb3duIGJlZm9yZSB3ZSBjYW4gZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzLiBUaGUgbG9ja2VkUGFnZSBhcnJheSBjb250YWlucyAqLworCS8qIHRoZSBwYWdlcyB0aGF0IHdlcmUgbG9ja2VkLCBhbmQgd2hpY2ggc3Vic2VxdWVudGx5IG5lZWQgdG8gYmUgdW5sb2NrZWQgb25jZSB0aGUgKi8KKwkvKiBtZW1vcnkgaXMgdW5tYXBwZWQuICovCisKKwl1bnNpZ25lZCBudW1Mb2NrZWRQYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKmxvY2tlZFBhZ2VzOworCit9IERNQV9SZWdpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWludCBpblVzZTsJCS8qIElzIHRoaXMgbWFwcGluZyBjdXJyZW50bHkgYmVpbmcgdXNlZD8gKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CS8qIEFjcXVpcmVkIHdoZW4gdXNpbmcgdGhpcyBzdHJ1Y3R1cmUgKi8KKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CS8qIERpcmVjdGlvbiB0aGlzIHRyYW5zZmVyIGlzIGludGVuZGVkIGZvciAqLworCisJLyogSW4gdGhlIGV2ZW50IHRoYXQgd2UncmUgbWFwcGluZyB1c2VyIG1lbW9yeSwgd2UgbmVlZCB0byBrbm93IHdoaWNoIHRhc2sgKi8KKwkvKiB0aGUgbWVtb3J5IGlzIGZvciwgc28gdGhhdCB3ZSBjYW4gb2J0YWluIHRoZSBjb3JyZWN0IG1tIGxvY2tzLiAqLworCisJc3RydWN0IHRhc2tfc3RydWN0ICp1c2VyVGFzazsKKworCWludCBudW1SZWdpb25zVXNlZDsKKwlpbnQgbnVtUmVnaW9uc0FsbG9jYXRlZDsKKwlETUFfUmVnaW9uX3QgKnJlZ2lvbjsKKworfSBETUFfTWVtTWFwX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9EZXZpY2VBdHRyaWJ1dGVfdCBjb250YWlucyBpbmZvcm1hdGlvbiB3aGljaCBkZXNjcmliZXMgYQorKiAgIHBhcnRpY3VsYXIgRE1BIGRldmljZSAob3IgcGVyaXBoZXJhbCkuCisqCisqICAgSXQgaXMgYW50aWNpcGF0ZWQgdGhhdCB0aGUgYXJyYXJ5IG9mIERNQV9EZXZpY2VBdHRyaWJ1dGVfdCdzIHdpbGwgYmUKKyogICBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBkZXZpY2UgaGFuZGxlciBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBETUEgb3BlcmF0aW9uIGNvbXBsZXRlcy4gVGhlIHJlYW9uICovCisvKiBmb3IgaXQgdG8gYmUgY2FsbGVkIHdpbGwgYmUgYSBiaXRtYXNrIHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBiaXRzICovCisvKiBzZXQuICovCisKKyNkZWZpbmUgRE1BX0hBTkRMRVJfUkVBU09OX0JMT0NLX0NPTVBMRVRFICAgICAgIGRtYWNId19JTlRFUlJVUFRfU1RBVFVTX0JMT0NLCisjZGVmaW5lIERNQV9IQU5ETEVSX1JFQVNPTl9UUkFOU0ZFUl9DT01QTEVURSAgICBkbWFjSHdfSU5URVJSVVBUX1NUQVRVU19UUkFOUworI2RlZmluZSBETUFfSEFORExFUl9SRUFTT05fRVJST1IgICAgICAgICAgICAgICAgZG1hY0h3X0lOVEVSUlVQVF9TVEFUVVNfRVJST1IKKwordHlwZWRlZiB2b2lkICgqRE1BX0RldmljZUhhbmRsZXJfdCkgKERNQV9EZXZpY2VfdCBkZXYsIGludCByZWFzb24sCisJCQkJICAgICB2b2lkICp1c2VyRGF0YSk7CisKKyNkZWZpbmUgRE1BX0RFVklDRV9GTEFHX09OX0RNQTAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfT05fRE1BMSAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIERNQV9ERVZJQ0VfRkxBR19QT1JUX1BFUl9ETUFDICAgICAgIDB4MDAwMDAwMDQJLyogSWYgc2V0LCBpdCBtZWFucyB0aGF0IHRoZSBwb3J0IHVzZWQgb24gRE1BQzAgaXMgZGlmZmVyZW50IGZyb20gdGhlIHBvcnQgdXNlZCBvbiBETUFDMSAqLworI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfQUxMT0NfRE1BMV9GSVJTVCAgICAweDAwMDAwMDA4CS8qIElmIHNldCwgYWxsb2NhdGUgZnJvbSBETUExIGJlZm9yZSBhbGxvY2F0aW5nIGZyb20gRE1BMCAqLworI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfSVNfREVESUNBVEVEICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIERNQV9ERVZJQ0VfRkxBR19OT19JU1IgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRE1BX0RFVklDRV9GTEFHX0FMTE9XX0xBUkdFX0ZJRk8gICAgMHgwMDAwMDQwMAorI2RlZmluZSBETUFfREVWSUNFX0ZMQUdfSU5fVVNFICAgICAgICAgICAgICAweDAwMDAwODAwCS8qIElmIHNldCwgZGV2aWNlIGlzIGluIHVzZSBvbiBhIGNoYW5uZWwgKi8KKworLyogTm90ZTogU29tZSBETUEgZGV2aWNlcyBjYW4gYmUgdXNlZCBmcm9tIG11bHRpcGxlIERNQSBDb250cm9sbGVycy4gVGhlIGJpdG1hc2sgaXMgdXNlZCB0byAqLworLyogICAgICAgZGV0ZXJtaW5lIHdoaWNoIERNQSBjb250cm9sbGVycyBhIGdpdmVuIGRldmljZSBjYW4gYmUgdXNlZCBmcm9tLCBhbmQgdGhlIGludGVyZmFjZSAqLworLyogICAgICAgYXJyYXkgZGV0ZXJtZWluZXMgdGhlIGFjdHVhbCBpbnRlcmZhY2UgbnVtYmVyIHRvIHVzZSBmb3IgYSBnaXZlbiBjb250cm9sbGVyLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdWludDMyX3QgZmxhZ3M7CQkvKiBCaXRtYXNrIG9mIERNQV9ERVZJQ0VfRkxBR194eHggY29uc3RhbnRzICovCisJdWludDhfdCBkZWRpY2F0ZWRDb250cm9sbGVyOwkvKiBDb250cm9sbGVyIG51bWJlciB0byB1c2UgaWYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCBpcyBzZXQuICovCisJdWludDhfdCBkZWRpY2F0ZWRDaGFubmVsOwkvKiBDaGFubmVsIG51bWJlciB0byB1c2UgaWYgRE1BX0RFVklDRV9GTEFHX0lTX0RFRElDQVRFRCBpcyBzZXQuICovCisJY29uc3QgY2hhciAqbmFtZTsJLyogV2lsbCBzaG93IHVwIGluIHRoZSAvcHJvYyBlbnRyeSAqLworCisJdWludDMyX3QgZG1hY1BvcnRbRE1BX05VTV9DT05UUk9MTEVSU107CS8qIFNwZWNpZmllcyB0aGUgcG9ydCBudW1iZXIgd2hlbiBETUFfREVWSUNFX0ZMQUdfUE9SVF9QRVJfRE1BQyBmbGFnIGlzIHNldCAqLworCisJZG1hY0h3X0NPTkZJR190IGNvbmZpZzsJLyogQ29uZmlndXJhdGlvbiB0byB1c2Ugd2hlbiBETUEnaW5nIHVzaW5nIHRoaXMgZGV2aWNlICovCisKKwl2b2lkICp1c2VyRGF0YTsJCS8qIFBhc3NlZCB0byB0aGUgZGV2SGFuZGxlciAqLworCURNQV9EZXZpY2VIYW5kbGVyX3QgZGV2SGFuZGxlcjsJLyogQ2FsbGVkIHdoZW4gRE1BIG9wZXJhdGlvbnMgZmluaXNoLiAqLworCisJdGltZXJfdGlja19jb3VudF90IHRyYW5zZmVyU3RhcnRUaW1lOwkvKiBUaW1lIHRoZSBjdXJyZW50IHRyYW5zZmVyIHdhcyBzdGFydGVkICovCisKKwkvKiBUaGUgZm9sbG93aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHdpbGwgYmUgY29sbGVjdGVkIGFuZCBwcmVzZW50ZWQgaW4gYSBwcm9jIGVudHJ5LiAqLworCS8qIE5vdGU6IFdpdGggYSBjb250aXVvdXMgYmFuZHdpZHRoIG9mIDEgR2Ivc2VjLCBpdCB3b3VsZCB0YWtlIDU4NCB5ZWFycyB0byBvdmVyZmxvdyAqLworCS8qICAgICAgIGEgNjQgYml0IGNvdW50ZXIuICovCisKKwl1aW50NjRfdCBudW1UcmFuc2ZlcnM7CS8qIE51bWJlciBvZiBETUEgdHJhbnNmZXJzIHBlcmZvcm1lZCAqLworCXVpbnQ2NF90IHRyYW5zZmVyVGlja3M7CS8qIFRvdGFsIHRpbWUgc3BlbnQgZG9pbmcgRE1BIHRyYW5zZmVycyAobWVhc3VyZWQgaW4gdGltZXJfdGlja19jb3VudF90J3MpICovCisJdWludDY0X3QgdHJhbnNmZXJCeXRlczsJLyogVG90YWwgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KKwl1aW50MzJfdCB0aW1lc0Jsb2NrZWQ7CS8qIE51bWJlciBvZiB0aW1lcyBhIGNoYW5uZWwgd2FzIHVuYXZhaWxhYmxlICovCisJdWludDMyX3QgbnVtQnl0ZXM7CS8qIExhc3QgdHJhbnNmZXIgc2l6ZSAqLworCisJLyogSXQncyBub3QgcG9zc2libGUgdG8gZnJlZSBtZW1vcnkgd2hpY2ggaXMgYWxsb2NhdGVkIGZvciB0aGUgZGVzY3JpcHRvcnMgZnJvbSB3aXRoaW4gKi8KKwkvKiB0aGUgSVNSLiBTbyBtYWtlIHRoZSBwcmVzdW1wdGlvbiB0aGF0IGEgZ2l2ZW4gZGV2aWNlIHdpbGwgdGVuZCB0byB1c2UgdGhlICovCisJLyogc2FtZSBzaXplZCBidWZmZXJzIG92ZXIgYW5kIG92ZXIgYWdhaW4sIGFuZCB3ZSBrZWVwIHRoZW0gYXJvdW5kLiAqLworCisJRE1BX0Rlc2NyaXB0b3JSaW5nX3QgcmluZzsJLyogUmluZyBvZiBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgZm9yIHRoaXMgZGV2aWNlICovCisKKwkvKiBXZSBzdGFzaCBhd2F5IHNvbWUgb2YgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIHByZXZpb3VzIHRyYW5zZmVyLiBJZiBiYWNrLXRvLWJhY2sgKi8KKwkvKiB0cmFuc2ZlcnMgYXJlIHBlcmZvcm1lZCBmcm9tIHRoZSBzYW1lIGJ1ZmZlciwgdGhlbiB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgcmUtaW5pdGlhbGl6aW5nICovCisJLyogdGhlIGRlc2NyaXB0b3IgYnVmZmVycy4gKi8KKworCXVpbnQzMl90IHByZXZOdW1CeXRlczsKKwlkbWFfYWRkcl90IHByZXZTcmNEYXRhOworCWRtYV9hZGRyX3QgcHJldkRzdERhdGE7CisKK30gRE1BX0RldmljZUF0dHJpYnV0ZV90OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIERNQV9DaGFubmVsX3QsIERNQV9Db250cm9sbGVyX3QsIGFuZCBETUFfU3RhdGVfdCBhcmUgcmVhbGx5IGludGVybmFsCisqICAgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBkb24ndCBiZWxvbmcgaW4gdGhpcyBoZWFkZXIgZmlsZSwgYnV0IGFyZSBpbmNsdWRlZAorKiAgIG1lcmVseSBmb3IgZGlzY3Vzc2lvbi4KKyoKKyogICBCeSB0aGUgdGltZSB0aGlzIGlzIGltcGxlbWVudGVkLCB0aGVzZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgbW92ZWQgb3V0IGludG8KKyogICB0aGUgYXBwcm9wcmlhdGUgQyBzb3VyY2UgZmlsZSBpbnN0ZWFkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9DaGFubmVsX3QgY29udGFpbnMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBETUEgY2hhbm5lbC4gU29tZQorKiAgIG9mIHRoZSBjaGFubmVscyBhcmUgZGVkaWNhdGVkLiBOb24tZGVkaWNhdGVkIGNoYW5uZWxzIGFyZSBzaGFyZWQKKyogICBhbW9uZ3N0IHRoZSBvdGhlciBkZXZpY2VzLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRE1BX0NIQU5ORUxfRkxBR19JTl9VU0UgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIERNQV9DSEFOTkVMX0ZMQUdfSVNfREVESUNBVEVEICAgMHgwMDAwMDAwMgorI2RlZmluZSBETUFfQ0hBTk5FTF9GTEFHX05PX0lTUiAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRE1BX0NIQU5ORUxfRkxBR19MQVJHRV9GSUZPICAgICAweDAwMDAwMDA4CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBmbGFnczsJCS8qIGJpdG1hc2sgb2YgRE1BX0NIQU5ORUxfRkxBR194eHggY29uc3RhbnRzICovCisJRE1BX0RldmljZV90IGRldlR5cGU7CS8qIERldmljZSB0aGlzIGNoYW5uZWwgaXMgY3VycmVudGx5IHJlc2VydmVkIGZvciAqLworCURNQV9EZXZpY2VfdCBsYXN0RGV2VHlwZTsJLyogRGV2aWNlIHR5cGUgdGhhdCB1c2VkIHRoaXMgcHJldmlvdXNseSAqLworCWNoYXIgbmFtZVsyMF07CQkvKiBOYW1lIHBhc3NlZCBvbnRvIHJlcXVlc3RfaXJxICovCisKKyNpZiAoRE1BX0RFQlVHX1RSQUNLX1JFU0VSVkFUSU9OKQorCWNvbnN0IGNoYXIgKmZpbGVOYW1lOwkvKiBQbGFjZSB3aGVyZSBjaGFubmVsIHJlc2VydmF0aW9uIHRvb2sgcGxhY2UgKi8KKwlpbnQgbGluZU51bTsJCS8qIFBsYWNlIHdoZXJlIGNoYW5uZWwgcmVzZXJ2YXRpb24gdG9vayBwbGFjZSAqLworI2VuZGlmCisJZG1hY0h3X0hBTkRMRV90IGRtYWNId0hhbmRsZTsJLyogbG93IGxldmVsIGNoYW5uZWwgaGFuZGxlLiAqLworCit9IERNQV9DaGFubmVsX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9Db250cm9sbGVyX3QgY29udGFpbnMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBETUEgY29udHJvbGxlci4KKyoKKyogICBUaGUgZnJlZUNoYW5uZWxRIGlzIHN0b3JlZCBpbiB0aGUgY29udHJvbGxlciBkYXRhIHN0cnVjdHVyZSByYXRoZXIgdGhhbgorKiAgIHRoZSBjaGFubmVsIGRhdGEgc3RydWN0dXJlIHNpbmNlIHNldmVyYWwgb2YgdGhlIGRldmljZXMgYXJlIGFjY2Vzc2libGUKKyogICBmcm9tIG11bHRpcGxlIGNvbnRyb2xsZXJzLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgd2hpY2ggY29udHJvbGxlcgorKiAgIHdpbGwgYmVjb21lIGF2YWlsYWJsZSBmaXJzdC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdCB7CisJRE1BX0NoYW5uZWxfdCBjaGFubmVsW0RNQV9OVU1fQ0hBTk5FTFNdOworCit9IERNQV9Db250cm9sbGVyX3Q7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgVGhlIERNQV9HbG9iYWxfdCBjb250YWlucyBhbGwgb2YgdGhlIGdsb2JhbCBzdGF0ZSBpbmZvcm1hdGlvbiB1c2VkIGJ5CisqICAgdGhlIERNQSBjb2RlLgorKgorKiAgIENhbGxlcnMgd2hpY2ggbmVlZCB0byBhbGxvY2F0ZSBhIHNoYXJlZCBjaGFubmVsIHdpbGwgYmUgcXVldWVkIHVwCisqICAgb24gdGhlIGZyZWVDaGFubmVsUSB1bnRpbCBhIGNoYW5uZWwgYmVjb21lcyBhdmFpbGFibGUuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXN0cnVjdCBzZW1hcGhvcmUgbG9jazsJLyogYWNxdWlyZWQgd2hlbiBtYW5pcHVsYXRpbmcgdGFibGUgZW50cmllcyAqLworCXdhaXRfcXVldWVfaGVhZF90IGZyZWVDaGFubmVsUTsKKworCURNQV9Db250cm9sbGVyX3QgY29udHJvbGxlcltETUFfTlVNX0NPTlRST0xMRVJTXTsKKworfSBETUFfR2xvYmFsX3Q7CisKKy8qIC0tLS0gVmFyaWFibGUgRXh0ZXJucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2V4dGVybiBETUFfRGV2aWNlQXR0cmlidXRlX3QgRE1BX2dEZXZpY2VBdHRyaWJ1dGVbRE1BX05VTV9ERVZJQ0VfRU5UUklFU107CisKKy8qIC0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhbGl6ZXMgdGhlIERNQSBtb2R1bGUuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIC0gU3VjY2VzcworKiAgICAgICA8IDAgICAgIC0gRXJyb3IKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9pbml0KHZvaWQpOworCisjaWYgKERNQV9ERUJVR19UUkFDS19SRVNFUlZBVElPTikKK0RNQV9IYW5kbGVfdCBkbWFfcmVxdWVzdF9jaGFubmVsX2RiZyhETUFfRGV2aWNlX3QgZGV2LCBjb25zdCBjaGFyICpmaWxlTmFtZSwKKwkJCQkgICAgIGludCBsaW5lTnVtKTsKKyNkZWZpbmUgZG1hX3JlcXVlc3RfY2hhbm5lbChkZXYpICBkbWFfcmVxdWVzdF9jaGFubmVsX2RiZyhkZXYsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbHNlCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgUmVzZXJ2ZXMgYSBjaGFubmVsIGZvciB1c2Ugd2l0aCBAYSBkZXYuIElmIHRoZSBkZXZpY2UgaXMgc2V0dXAgdG8gdXNlCisqICAgYSBzaGFyZWQgY2hhbm5lbCwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgYSBmcmVlIGNoYW5uZWwKKyogICBiZWNvbWVzIGF2YWlsYWJsZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgID49IDAgICAgLSBBIHZhbGlkIERNQSBIYW5kbGUuCisqICAgICAgIC1FQlVTWSAgLSBEZXZpY2UgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQuCisqICAgICAgIC1FTk9ERVYgLSBEZXZpY2UgaGFuZGVkIGluIGlzIGludmFsaWQuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0RNQV9IYW5kbGVfdCBkbWFfcmVxdWVzdF9jaGFubmVsKERNQV9EZXZpY2VfdCBkZXYJLyogRGV2aWNlIHRvIHVzZSB3aXRoIHRoZSBhbGxvY2F0ZWQgY2hhbm5lbC4gKi8KKyAgICApOworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgRnJlZXMgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBETUEgSGFuZGxlLgorKgorKiAgIEByZXR1cm4KKyogICAgICAgIDAgICAgICAtIERNQSBIYW5kbGUgd2FzIHJlbGVhc2VkIHN1Y2Nlc3NmdWxseS4KKyogICAgICAgLUVJTlZBTCAtIEludmFsaWQgRE1BIGhhbmRsZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2ZyZWVfY2hhbm5lbChETUFfSGFuZGxlX3QgY2hhbm5lbAkvKiBETUEgaGFuZGxlLiAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIGRldmljZSBoYXMgYmVlbiBjb25maWd1cmVkIGFzIHVzaW5nIGEgc2hhcmVkCisqICAgY2hhbm5lbC4KKyoKKyogICBAcmV0dXJuIGJvb2xlYW4KKyogICAgICAgMCAgICAgICAgICAgRGV2aWNlIHVzZXMgYSBkZWRpY2F0ZWQgY2hhbm5lbAorKiAgICAgICBub24temVybyAgICBEZXZpY2UgdXNlcyBhIHNoYXJlZCBjaGFubmVsCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZGV2aWNlX2lzX2NoYW5uZWxfc2hhcmVkKERNQV9EZXZpY2VfdCBkZXYJLyogRGV2aWNlIHRvIGNoZWNrLiAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWxsb2NhdGVzIG1lbW9yeSB0byBob2xkIGEgZGVzY3JpcHRvciByaW5nLiBUaGUgZGVzY3JpcHRvciByaW5nIHRoZW4KKyogICBuZWVkcyB0byBiZSBwb3B1bGF0ZWQgYnkgbWFraW5nIG9uZSBvciBtb3JlIGNhbGxzIHRvCisqICAgZG5hX2FkZF9kZXNjcmlwdG9ycy4KKyoKKyogICBUaGUgcmV0dXJuZWQgZGVzY3JpcHRvciByaW5nIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbml0aWFsaXplZC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgICAgIERlc2NyaXB0b3IgcmluZyB3YXMgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRU5PTUVNICAgICBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZGVzaXJlZCBudW1iZXIgb2YgZGVzY3JpcHRvcnMuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfYWxsb2NfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nLAkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gcG9wdWxhdGUgKi8KKwkJCSAgICAgIGludCBudW1EZXNjcmlwdG9ycwkvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgdGhhdCBuZWVkIHRvIGJlIGFsbG9jYXRlZC4gKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIFJlbGVhc2VzIHRoZSBtZW1vcnkgd2hpY2ggd2FzIHByZXZpb3VzbHkgYWxsb2NhdGVkIGZvciBhIGRlc2NyaXB0b3IgcmluZy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBkbWFfZnJlZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0Rlc2NyaXB0b3JSaW5nX3QgKnJpbmcJLyogRGVzY3JpcHRvciB0byByZWxlYXNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWFsaXplcyBhIGRlc2NyaXB0b3IgcmluZywgc28gdGhhdCBkZXNjcmlwdG9ycyBjYW4gYmUgYWRkZWQgdG8gaXQuCisqICAgT25jZSBhIGRlc2NyaXB0b3IgcmluZyBoYXMgYmVlbiBhbGxvY2F0ZWQsIGl0IG1heSBiZSByZWluaXRpYWxpemVkIGZvcgorKiAgIHVzZSB3aXRoIGFkZGl0aW9uYWwvZGlmZmVyZW50IHJlZ2lvbnMgb2YgbWVtb3J5LgorKgorKiAgIE5vdGUgdGhhdCBpZiA3IGRlc2NyaXB0b3JzIGFyZSBhbGxvY2F0ZWQsIGl0J3MgcGVyZmVjdGx5IGFjY2VwdGFibGUgdG8KKyogICBpbml0aWFsaXplIHRoZSByaW5nIHdpdGggYSBzbWFsbGVyIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gVGhlIGFtb3VudAorKiAgIG9mIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBkZXNjcmlwdG9yIHJpbmcgd2lsbCBub3QgYmUgcmVkdWNlZCwgYW5kCisqICAgdGhlIGRlc2NyaXB0b3IgcmluZyBtYXkgYmUgcmVpbml0aWFsaXplZCBsYXRlcgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICAgICAgRGVzY3JpcHRvciByaW5nIHdhcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVOT01FTSAgICAgVGhlIGRlc2NyaXB0b3Igd2hpY2ggd2FzIHBhc3NlZCBpbiBoYXMgaW5zdWZmaWNpZW50IHNwYWNlCisqICAgICAgICAgICAgICAgICAgIHRvIGhvbGQgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2luaXRfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nLAkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gaW5pdGlhbGl6ZSAqLworCQkJICAgICBpbnQgbnVtRGVzY3JpcHRvcnMJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIGluaXRpYWxpemUuICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgd2hpY2ggd291bGQgYmUgcmVxdWlyZWQgZm9yIGEKKyogICB0cmFuc2ZlciBvZiB0aGUgaW5kaWNhdGVkIG1lbW9yeSByZWdpb24uCisqCisqICAgVGhpcyBmdW5jdGlvbiBhbHNvIG5lZWRzIHRvIGtub3cgd2hpY2ggRE1BIGRldmljZSB0aGlzIHRyYW5zZmVyIHdpbGwKKyogICBiZSBkZXN0aW5lZCBmb3IsIHNvIHRoYXQgdGhlIGFwcHJvcHJpYXRlIERNQSBjb25maWd1cmF0aW9uIGNhbiBiZSByZXRyaWV2ZWQuCisqICAgRE1BIHBhcmFtZXRlcnMgc3VjaCBhcyB0cmFuc2ZlciB3aWR0aCwgYW5kIHdoZXRoZXIgdGhpcyBpcyBhIG1lbW9yeS10by1tZW1vcnkKKyogICBvciBtZW1vcnktdG8tcGVyaXBoZXJhbCwgZXRjIGNhbiBhbGwgYWZmZWN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIGRlc2NyaXB0b3JzCisqICAgcmVxdWlyZWQuCisqCisqICAgQHJldHVybgorKiAgICAgICA+IDAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZXF1aXJlZCBmb3IgdGhlIGluZGljYXRlZCB0cmFuc2ZlcgorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyogICAgICAgLUVOT01FTSBNZW1vcnkgZXhoYXVzdGVkCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfY2FsY3VsYXRlX2Rlc2NyaXB0b3JfY291bnQoRE1BX0RldmljZV90IGRldmljZSwJLyogRE1BIERldmljZSB0aGF0IHRoaXMgd2lsbCBiZSBhc3NvY2lhdGVkIHdpdGggKi8KKwkJCQkgICBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIHRvIHdyaXRlIHRvIGRldmljZSAqLworCQkJCSAgIGRtYV9hZGRyX3QgZHN0RGF0YSwJLyogUG9pbnRlciB0byBkZXZpY2UgZGF0YSBhZGRyZXNzICovCisJCQkJICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciB0byB0aGUgZGV2aWNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBZGRzIGEgcmVnaW9uIG9mIG1lbW9yeSB0byB0aGUgZGVzY3JpcHRvciByaW5nLiBOb3RlIHRoYXQgaXQgbWF5IHRha2UKKyogICBtdWx0aXBsZSBkZXNjcmlwdG9ycyBmb3IgZWFjaCByZWdpb24gb2YgbWVtb3J5LiBJdCBpcyB0aGUgY2FsbGVycworKiAgIHJlc3BvbnNpYmlsaXR5IHRvIGFsbG9jYXRlIGEgc3VmZmljaWVudGx5IGxhcmdlIGRlc2NyaXB0b3IgcmluZy4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhZGRlZCBzdWNjZXNzZnVsbHkKKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9NRU1fVE9fREVWIGFuZCBub3QgX0RFVl9UT19NRU0pCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FkZF9kZXNjcmlwdG9ycyhETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZywJLyogRGVzY3JpcHRvciByaW5nIHRvIGFkZCBkZXNjcmlwdG9ycyB0byAqLworCQkJRE1BX0RldmljZV90IGRldmljZSwJLyogRE1BIERldmljZSB0aGF0IGRlc2NyaXB0b3JzIGFyZSBmb3IgKi8KKwkJCWRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgKG1lbW9yeSBvciBkZXZpY2UpICovCisJCQlkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBsYWNlIHRvIHB1dCBkYXRhIChtZW1vcnkgb3IgZGV2aWNlKSAqLworCQkJc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciB0byB0aGUgZGV2aWNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTZXRzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXNzb2NpYXRlZCB3aXRoIGEgZGV2aWNlLgorKgorKiAgIE9uY2Ugc2V0LCB0aGUgZGVzY3JpcHRvciByaW5nIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UsIGV2ZW4KKyogICBhY3Jvc3MgY2hhbm5lbCByZXF1ZXN0L2ZyZWUgY2FsbHMuIFBhc3NpbmcgaW4gYSBOVUxMIGRlc2NyaXB0b3IgcmluZworKiAgIHdpbGwgcmVsZWFzZSBhbnkgZGVzY3JpcHRvciByaW5nIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS4KKyoKKyogICBOb3RlOiBJZiB5b3UgY2FsbCBkbWFfdHJhbnNmZXIsIG9yIG9uZSBvZiB0aGUgb3RoZXIgZG1hX2FsbG9jXyBmdW5jdGlvbnMKKyogICAgICAgICB0aGUgZGVzY3JpcHRvciByaW5nIG1heSBiZSByZWxlYXNlZCBhbmQgcmVhbGxvY2F0ZWQuCisqCisqICAgTm90ZTogVGhpcyBmdW5jdGlvbiB3aWxsIHJlbGVhc2UgdGhlIGRlc2NyaXB0b3IgbWVtb3J5IGZvciBhbnkgY3VycmVudAorKiAgICAgICAgIGRlc2NyaXB0b3IgcmluZyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHVwZGF0ZSB0aGUgZGVzY3JpcHRvciByaW5nIGZvci4gKi8KKwkJCQkgICBETUFfRGVzY3JpcHRvclJpbmdfdCAqcmluZwkvKiBEZXNjcmlwdG9yIHJpbmcgdG8gYWRkIGRlc2NyaXB0b3JzIHRvICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBSZXRyaWV2ZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhc3NvY2lhdGVkIHdpdGggYSBkZXZpY2UuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfZ2V0X2RldmljZV9kZXNjcmlwdG9yX3JpbmcoRE1BX0RldmljZV90IGRldmljZSwJLyogRGV2aWNlIHRvIHJldHJpZXZlIHRoZSBkZXNjcmlwdG9yIHJpbmcgZm9yLiAqLworCQkJCSAgIERNQV9EZXNjcmlwdG9yUmluZ190ICpyaW5nCS8qIFBsYWNlIHRvIHN0b3JlIHJldHJpZXZlZCByaW5nICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBBbGxvY2F0ZXMgYnVmZmVycyBmb3IgdGhlIGRlc2NyaXB0b3JzLiBUaGlzIGlzIG5vcm1hbGx5IGRvbmUgYXV0b21hdGljYWxseQorKiAgIGJ1dCBuZWVkcyB0byBiZSBkb25lIGV4cGxpY2l0bHkgd2hlbiBpbml0aWF0aW5nIGEgZG1hIGZyb20gaW50ZXJydXB0CisqICAgY29udGV4dC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgRGVzY3JpcHRvcnMgd2VyZSBhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBkZXZpY2UgdHlwZSBmb3IgdGhpcyBraW5kIG9mIHRyYW5zZmVyCisqICAgICAgICAgICAgICAgKGkuZS4gdGhlIGRldmljZSBpcyBfTUVNX1RPX0RFViBhbmQgbm90IF9ERVZfVE9fTUVNKQorKiAgICAgICAtRU5PTUVNIE1lbW9yeSBleGhhdXN0ZWQKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9hbGxvY19kZXNjcmlwdG9ycyhETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCQkgIGRtYWNId19UUkFOU0ZFUl9UWVBFX2UgdHJhbnNmZXJUeXBlLAkvKiBUeXBlIG9mIHRyYW5zZmVyIGJlaW5nIHBlcmZvcm1lZCAqLworCQkJICBkbWFfYWRkcl90IHNyY0RhdGEsCS8qIFBsYWNlIHRvIGdldCBkYXRhIHRvIHdyaXRlIHRvIGRldmljZSAqLworCQkJICBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBvaW50ZXIgdG8gZGV2aWNlIGRhdGEgYWRkcmVzcyAqLworCQkJICBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIHRvIHRoZSBkZXZpY2UgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIEFsbG9jYXRlcyBhbmQgc2V0cyB1cCBkZXNjcmlwdG9ycyBmb3IgYSBkb3VibGUgYnVmZmVyZWQgY2lyY3VsYXIgYnVmZmVyLgorKgorKiAgIFRoaXMgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHRoaW5ncyBsaWtlIHRoZSBpbmdyZXNzIHNhbXBsZXMKKyogICBmcm9tIGEgbWljcm9waG9uZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgID4gMCAgICAgTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGFjdHVhbGx5IGFsbG9jYXRlZC4KKyogICAgICAgLUVJTlZBTCBJbnZhbGlkIGRldmljZSB0eXBlIGZvciB0aGlzIGtpbmQgb2YgdHJhbnNmZXIKKyogICAgICAgICAgICAgICAoaS5lLiB0aGUgZGV2aWNlIGlzIF9NRU1fVE9fREVWIGFuZCBub3QgX0RFVl9UT19NRU0pCisqICAgICAgIC1FTk9NRU0gTWVtb3J5IGV4aGF1c3RlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2FsbG9jX2RvdWJsZV9kc3RfZGVzY3JpcHRvcnMoRE1BX0hhbmRsZV90IGhhbmRsZSwJLyogRE1BIEhhbmRsZSAqLworCQkJCSAgICAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHNvdXJjZSBkYXRhICovCisJCQkJICAgICBkbWFfYWRkcl90IGRzdERhdGExLAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIGZpcnN0IGRlc3RpbmF0aW9uIGJ1ZmZlciAqLworCQkJCSAgICAgZG1hX2FkZHJfdCBkc3REYXRhMiwJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBzZWNvbmQgZGVzdGluYXRpb24gYnVmZmVyICovCisJCQkJICAgICBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIGluIGVhY2ggZGVzdGluYXRpb24gYnVmZmVyICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWFsaXplcyBhIERNQV9NZW1NYXBfdCBkYXRhIHN0cnVjdHVyZQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX2luaXRfbWVtX21hcChETUFfTWVtTWFwX3QgKm1lbU1hcAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgUmVsZWFzZXMgYW55IG1lbW9yeSBjdXJyZW50bHkgYmVpbmcgaGVsZCBieSBhIG1lbW9yeSBtYXBwaW5nIHN0cnVjdHVyZS4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV90ZXJtX21lbV9tYXAoRE1BX01lbU1hcF90ICptZW1NYXAJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIExvb2tzIGF0IGEgbWVtb3J5IGFkZHJlc3MgYW5kIGNhdGVnb3JpemVzIGl0LgorKgorKiAgIEByZXR1cm4gT25lIG9mIHRoZSB2YWx1ZXMgZnJvbSB0aGUgRE1BX01lbVR5cGVfdCBlbnVtZXJhdGlvbi4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworRE1BX01lbVR5cGVfdCBkbWFfbWVtX3R5cGUodm9pZCAqYWRkcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgU2V0cyB0aGUgcHJvY2VzcyAoYWthIHVzZXJUYXNrKSBhc3NvY2lhdGVkIHdpdGggYSBtZW0gbWFwLiBUaGlzIGlzCisqICAgcmVxdWlyZWQgaWYgdXNlci1tb2RlIHNlZ21lbnRzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hcHBpbmcuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfbWVtX21hcF9zZXRfdXNlcl90YXNrKERNQV9NZW1NYXBfdCAqbWVtTWFwLAorCQkJCQkgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwltZW1NYXAtPnVzZXJUYXNrID0gdGFzazsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBMb29rcyBhdCBhIG1lbW9yeSBhZGRyZXNzIGFuZCBkZXRlcm1pbmVzIGlmIHdlIHN1cHBvcnQgRE1BJ2luZyB0by9mcm9tCisqICAgdGhhdCB0eXBlIG9mIG1lbW9yeS4KKyoKKyogICBAcmV0dXJuIGJvb2xlYW4gLQorKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPSAwIG1lYW5zIGRtYSBzdXBwb3J0ZWQKKyogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gMCBtZWFucyBkbWEgbm90IHN1cHBvcnRlZAorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21lbV9zdXBwb3J0c19kbWEodm9pZCAqYWRkcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhbGl6ZXMgYSBtZW1vcnkgbWFwIGZvciB1c2UuIFNpbmNlIHRoaXMgZnVuY3Rpb24gYWNxdWlyZXMgYQorKiAgIHNlbXBhcGhvcmUgd2l0aGluIHRoZSBtZW1vcnkgbWFwLCBpdCBpcyBWRVJZIGltcG9ydGFudCB0aGF0IGRtYV91bm1hcAorKiAgIGJlIGNhbGxlZCB3aGVuIHlvdSdyZSBmaW5pc2hlZCB1c2luZyB0aGUgbWFwLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9zdGFydChETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIJLyogRGlyZWN0aW9uIHRoYXQgdGhlIG1hcHBpbmcgd2lsbCBiZSBnb2luZyAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgQWRkcyBhIHNlZ21lbnQgb2YgbWVtb3J5IHRvIGEgbWVtb3J5IG1hcC4KKyoKKyogICBAcmV0dXJuICAgICAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9hZGRfcmVnaW9uKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCQkgICAgICAgdm9pZCAqbWVtLAkvKiBWaXJ0dWFsIGFkZHJlc3MgdGhhdCB3ZSB3YW50IHRvIGdldCBhIG1hcCBvZiAqLworCQkgICAgICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyBiZWluZyBtYXBwZWQgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIENyZWF0ZXMgYSBkZXNjcmlwdG9yIHJpbmcgZnJvbSBhIG1lbW9yeSBtYXBwaW5nLgorKgorKiAgIEByZXR1cm4gMCBvbiBzdWNlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX21hcF9jcmVhdGVfZGVzY3JpcHRvcl9yaW5nKERNQV9EZXZpY2VfdCBkZXYsCS8qIERNQSBkZXZpY2UgKHdoZXJlIHRoZSByaW5nIGlzIHN0b3JlZCkgKi8KKwkJCQkgICBETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogTWVtb3J5IG1hcCB0aGF0IHdpbGwgYmUgdXNlZCAqLworCQkJCSAgIGRtYV9hZGRyX3QgZGV2UGh5c0FkZHIJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBkZXZpY2UgKi8KKyAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiAgIE1hcHMgaW4gYSBtZW1vcnkgcmVnaW9uIHN1Y2ggdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgcGVyZm9ybWluZyBhIERNQS4KKyoKKyogICBAcmV0dXJuCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfbWFwX21lbShETUFfTWVtTWFwX3QgKm1lbU1hcCwJLyogU3RvcmVzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXAgKi8KKwkJdm9pZCAqYWRkciwJLyogVmlydHVhbCBhZGRyZXNzIHRoYXQgd2Ugd2FudCB0byBnZXQgYSBtYXAgb2YgKi8KKwkJc2l6ZV90IGNvdW50LAkvKiBOdW1iZXIgb2YgYnl0ZXMgYmVpbmcgbWFwcGVkICovCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcgkvKiBEaXJlY3Rpb24gdGhhdCB0aGUgbWFwcGluZyB3aWxsIGJlIGdvaW5nICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBNYXBzIGluIGEgbWVtb3J5IHJlZ2lvbiBzdWNoIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgYSBETUEuCisqCisqICAgQHJldHVybgorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG1hX3VubWFwKERNQV9NZW1NYXBfdCAqbWVtTWFwLAkvKiBTdG9yZXMgc3RhdGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcCAqLworCSAgICAgIGludCBkaXJ0aWVkCS8qIG5vbi16ZXJvIGlmIGFueSBvZiB0aGUgcGFnZXMgd2VyZSBtb2RpZmllZCAqLworICAgICk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgdHJhbnNmZXIgd2hlbiB0aGUgZGVzY3JpcHRvcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0dXAuCisqCisqICAgVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYW5kIG5vcm1hbGx5LCB0aGUgZG1hX3RyYW5zZmVyX3h4eCBmdW5jdGlvbnMgc2hvdWxkCisqICAgYmUgdXNlZC4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FTk9ERVYgSW52YWxpZCBoYW5kbGUKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9zdGFydF90cmFuc2ZlcihETUFfSGFuZGxlX3QgaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTdG9wcyBhIHByZXZpb3VzbHkgc3RhcnRlZCBETUEgdHJhbnNmZXIuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdG9wcGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRU5PREVWIEludmFsaWQgaGFuZGxlCisqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkbWFfc3RvcF90cmFuc2ZlcihETUFfSGFuZGxlX3QgaGFuZGxlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBXYWl0cyBmb3IgYSBETUEgdG8gY29tcGxldGUgYnkgcG9sbGluZy4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludGVuZGVkCisqICAgdG8gYmUgdXNlZCBmb3IgdGVzdGluZy4gSW50ZXJydXB0cyBzaG91bGQgYmUgdXNlZCBmb3IgbW9zdCBETUEgb3BlcmF0aW9ucy4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV93YWl0X3RyYW5zZmVyX2RvbmUoRE1BX0hhbmRsZV90IGhhbmRsZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgRE1BIHRyYW5zZmVyCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV90cmFuc2ZlcihETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCSBkbWFjSHdfVFJBTlNGRVJfVFlQRV9lIHRyYW5zZmVyVHlwZSwJLyogVHlwZSBvZiB0cmFuc2ZlciBiZWluZyBwZXJmb3JtZWQgKi8KKwkJIGRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgdG8gd3JpdGUgdG8gZGV2aWNlICovCisJCSBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBvaW50ZXIgdG8gZGV2aWNlIGRhdGEgYWRkcmVzcyAqLworCQkgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byB0cmFuc2ZlciB0byB0aGUgZGV2aWNlICovCisgICAgKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBJbml0aWF0ZXMgYSB0cmFuc2ZlciBmcm9tIG1lbW9yeSB0byBhIGRldmljZS4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBkZXZpY2UgdHlwZSBmb3IgdGhpcyBraW5kIG9mIHRyYW5zZmVyCisqICAgICAgICAgICAgICAgKGkuZS4gdGhlIGRldmljZSBpcyBfREVWX1RPX01FTSBhbmQgbm90IF9NRU1fVE9fREVWKQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIGludCBkbWFfdHJhbnNmZXJfdG9fZGV2aWNlKERNQV9IYW5kbGVfdCBoYW5kbGUsCS8qIERNQSBIYW5kbGUgKi8KKwkJCQkJIGRtYV9hZGRyX3Qgc3JjRGF0YSwJLyogUGxhY2UgdG8gZ2V0IGRhdGEgdG8gd3JpdGUgdG8gZGV2aWNlIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCQkJCQkgZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQb2ludGVyIHRvIGRldmljZSBkYXRhIGFkZHJlc3MgKHBoeXNpY2FsIGFkZHJlc3MpICovCisJCQkJCSBzaXplX3QgbnVtQnl0ZXMJLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIHRvIHRoZSBkZXZpY2UgKi8KKyAgICApIHsKKwlyZXR1cm4gZG1hX3RyYW5zZmVyKGhhbmRsZSwKKwkJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fUEVSSVBIRVJBTCwKKwkJCSAgICBzcmNEYXRhLCBkc3REYXRhLCBudW1CeXRlcyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgdHJhbnNmZXIgZnJvbSBhIGRldmljZSB0byBtZW1vcnkuCisqCisqICAgQHJldHVybgorKiAgICAgICAwICAgICAgIFRyYW5zZmVyIHdhcyBzdGFydGVkIHN1Y2Nlc3NmdWxseQorKiAgICAgICAtRUlOVkFMIEludmFsaWQgZGV2aWNlIHR5cGUgZm9yIHRoaXMga2luZCBvZiB0cmFuc2ZlcgorKiAgICAgICAgICAgICAgIChpLmUuIHRoZSBkZXZpY2UgaXMgX01FTV9UT19ERVYgYW5kIG5vdCBfREVWX1RPX01FTSkKKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSBpbnQgZG1hX3RyYW5zZmVyX2Zyb21fZGV2aWNlKERNQV9IYW5kbGVfdCBoYW5kbGUsCS8qIERNQSBIYW5kbGUgKi8KKwkJCQkJICAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgZGF0YSBhZGRyZXNzIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCQkJCQkgICBkbWFfYWRkcl90IGRzdERhdGEsCS8qIFBsYWNlIHRvIHN0b3JlIGRhdGEgcmV0cmlldmVkIGZyb20gdGhlIGRldmljZSAocGh5c2ljYWwgYWRkcmVzcykgKi8KKwkJCQkJICAgc2l6ZV90IG51bUJ5dGVzCS8qIE51bWJlciBvZiBieXRlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBkZXZpY2UgKi8KKyAgICApIHsKKwlyZXR1cm4gZG1hX3RyYW5zZmVyKGhhbmRsZSwKKwkJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9QRVJJUEhFUkFMX1RPX01FTSwKKwkJCSAgICBzcmNEYXRhLCBkc3REYXRhLCBudW1CeXRlcyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisqICAgSW5pdGlhdGVzIGEgbWVtb3J5IHRvIG1lbW9yeSB0cmFuc2Zlci4KKyoKKyogICBAcmV0dXJuCisqICAgICAgIDAgICAgICAgVHJhbnNmZXIgd2FzIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5CisqICAgICAgIC1FSU5WQUwgSW52YWxpZCBkZXZpY2UgdHlwZSBmb3IgdGhpcyBraW5kIG9mIHRyYW5zZmVyCisqICAgICAgICAgICAgICAgKGkuZS4gdGhlIGRldmljZSB3YXNuJ3QgRE1BX0RFVklDRV9NRU1fVE9fTUVNKQorKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIGludCBkbWFfdHJhbnNmZXJfbWVtX3RvX21lbShETUFfSGFuZGxlX3QgaGFuZGxlLAkvKiBETUEgSGFuZGxlICovCisJCQkJCSAgZG1hX2FkZHJfdCBzcmNEYXRhLAkvKiBQbGFjZSB0byB0cmFuc2ZlciBkYXRhIGZyb20gKHBoeXNpY2FsIGFkZHJlc3MpICovCisJCQkJCSAgZG1hX2FkZHJfdCBkc3REYXRhLAkvKiBQbGFjZSB0byB0cmFuc2ZlciBkYXRhIHRvIChwaHlzaWNhbCBhZGRyZXNzKSAqLworCQkJCQkgIHNpemVfdCBudW1CeXRlcwkvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKi8KKyAgICApIHsKKwlyZXR1cm4gZG1hX3RyYW5zZmVyKGhhbmRsZSwKKwkJCSAgICBkbWFjSHdfVFJBTlNGRVJfVFlQRV9NRU1fVE9fTUVNLAorCQkJICAgIHNyY0RhdGEsIGRzdERhdGEsIG51bUJ5dGVzKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogICBTZXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB0cmFuc2ZlciBjb21wbGV0ZXMuCisqICAgSWYgYSBOVUxMIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHNldCwgdGhlbiBubyBjYWxsYmFjayB3aWxsIG9jY3VyLgorKgorKiAgIEBub3RlICAgQGEgZGV2SGFuZGxlciB3aWxsIGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LgorKgorKiAgIEByZXR1cm4KKyogICAgICAgMCAgICAgICAtIFN1Y2Nlc3MKKyogICAgICAgLUVOT0RFViAtIERldmljZSBoYW5kZWQgaW4gaXMgaW52YWxpZC4KKyovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRtYV9zZXRfZGV2aWNlX2hhbmRsZXIoRE1BX0RldmljZV90IGRldiwJLyogRGV2aWNlIHRvIHNldCB0aGUgY2FsbGJhY2sgZm9yLiAqLworCQkJICAgRE1BX0RldmljZUhhbmRsZXJfdCBkZXZIYW5kbGVyLAkvKiBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIERNQSBjb21wbGV0ZXMgKi8KKwkJCSAgIHZvaWQgKnVzZXJEYXRhCS8qIFBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gZGV2SGFuZGxlci4gKi8KKyAgICApOworCisjZW5kaWYKKworI2VuZGlmIC8qIEFTTV9BUk1fQVJDSF9CQ01SSU5HX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzOTNjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDg2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDYgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgQkNNUmluZy1iYXNlZCBwbGF0Zm9ybXMKKyAqCisgKi8KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCWxkcglcYmFzZSwgPShNTV9JT19CQVNFX0lOVEMwKQorCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIGdldCBzdGF0dXMKKyAgICAgICAgICAgICAgICBsZHIgICAgIFxpcnFuciwgW1xiYXNlLCAjMHgxMF0gICAgICAgICAgQCBtYXNrIHdpdGggZW5hYmxlIHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgYW5kcyAgICBcaXJxc3RhdCwgXGlycXN0YXQsIFxpcnFucgorCQltb3YJXGlycW5yLCAjSVJRX0lOVEMwX1NUQVJUCisJCWNtcAlcaXJxc3RhdCwgIzAKKwkJYm5lCTEwMDFmCisKKwkJbGRyCVxiYXNlLCA9KE1NX0lPX0JBU0VfSU5UQzEpCisJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjMF0JCUAgZ2V0IHN0YXR1cworICAgICAgICAgICAgICAgIGxkciAgICAgXGlycW5yLCBbXGJhc2UsICMweDEwXSAgICAgICAgICBAIG1hc2sgd2l0aCBlbmFibGUgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICBhbmRzICAgIFxpcnFzdGF0LCBcaXJxc3RhdCwgXGlycW5yCisJCW1vdglcaXJxbnIsICNJUlFfSU5UQzFfU1RBUlQKKwkJY21wCVxpcnFzdGF0LCAjMAorCQlibmUJMTAwMWYKKworCQlsZHIJXGJhc2UsID0oTU1fSU9fQkFTRV9TSU5UQykKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBnZXQgc3RhdHVzCisgICAgICAgICAgICAgICAgbGRyICAgICBcaXJxbnIsIFtcYmFzZSwgIzB4MTBdICAgICAgICAgIEAgbWFzayB3aXRoIGVuYWJsZSByZWdpc3RlcgorICAgICAgICAgICAgICAgIGFuZHMgICAgXGlycXN0YXQsIFxpcnFzdGF0LCBcaXJxbnIKKwkJbW92CVxpcnFuciwgIzB4ZmZmZmZmZmYgICAgICAgICAgICAgQCBjb2RlIG1lYW5pbmcgbm8gaW50ZXJydXB0IGJpdHMgc2V0CisJCWNtcAlcaXJxc3RhdCwgIzAKKwkJYmVxCTEwMDJmCisKKwkJbW92CVxpcnFuciwgI0lSUV9TSU5UQ19TVEFSVCAgICAgICAgQCBzb21ldGhpbmcgaXMgc2V0LCBzbyBmaXh1cCByZXR1cm4gdmFsdWUKKworMTAwMToKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsICMxNgorCQltb3ZuZQlcaXJxc3RhdCwgXHRtcAorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzE2CisKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsICM4CisJCW1vdm5lCVxpcnFzdGF0LCBcdG1wCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjOAorCisJCW1vdnMJXHRtcCwgXGlycXN0YXQsIGxzbCAjNAorCQltb3ZuZQlcaXJxc3RhdCwgXHRtcAorCQlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzQKKworCQltb3ZzCVx0bXAsIFxpcnFzdGF0LCBsc2wgIzIKKwkJbW92bmUJXGlycXN0YXQsIFx0bXAKKwkJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMyCisKKwkJbW92cwlcdG1wLCBcaXJxc3RhdCwgbHNsICMxCisJCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMQorCQlvcnJzCVxiYXNlLCBcYmFzZSwgIzEKKworMTAwMjogICAgICAgICAgIEAgaXJxbnIgd2lsbCBiZSBzZXQgdG8gMHhmZmZmZmZmZiBpZiBubyBpcnEgYml0cyBhcmUgc2V0CisJCS5lbmRtCisKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQkuZW5kbQorCisJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCQkuZW5kbQorCisJCS5tYWNybwlpcnFfcHJpb190YWJsZQorCQkuZW5kbQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3ZWIzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDYwIEBACisvKgorICoKKyAqICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGhhcmR3YXJlIGRlZmluaXRpb25zIG9mIHRoZSBCQ01SaW5nLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CisjaW5jbHVkZSA8Y2ZnX2dsb2JhbC5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisKKy8qIEhhcmR3YXJlIGFkZHJlc3NlcyBvZiBtYWpvciBhcmVhcy4KKyAqICAqX1NUQVJUIGlzIHRoZSBwaHlzaWNhbCBhZGRyZXNzCisgKiAgKl9TSVpFICBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVnaW9uCisgKiAgKl9CQVNFICBpcyB0aGUgdmlydHVhbCBhZGRyZXNzCisgKi8KKyNkZWZpbmUgUkFNX1NUQVJUICAgICAgICAgICAgICAgUEhZU19PRkZTRVQKKworI2RlZmluZSBSQU1fU0laRSAgICAgICAgICAgICAgICAoQ0ZHX0dMT0JBTF9SQU1fU0laRS1DRkdfR0xPQkFMX1JBTV9TSVpFX1JFU0VSVkVEKQorI2RlZmluZSBSQU1fQkFTRSAgICAgICAgICAgICAgICBQQUdFX09GRlNFVAorCisjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCisKKy8qIE1hY3JvcyB0byBtYWtlIG1hbmFnaW5nIHNwaW5sb2NrcyBhIGJpdCBtb3JlIGNvbnRyb2xsZWQgaW4gdGVybXMgb2YgbmFtaW5nLiAqLworLyogU2VlIHJlZ19ncGlvLmgsIHJlZ19pcnEuaCwgYXJjaC5jLCBncGlvLmMgZm9yIGV4YW1wbGUgdXNhZ2UuICovCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2RlZmluZSBIV19ERUNMQVJFX1NQSU5MT0NLKG5hbWUpICBERUZJTkVfU1BJTkxPQ0soYmNtcmluZ18jI25hbWUjI19yZWdfbG9jayk7CisjZGVmaW5lIEhXX0VYVEVSTl9TUElOTE9DSyhuYW1lKSAgIGV4dGVybiBzcGlubG9ja190IGJjbXJpbmdfIyNuYW1lIyNfcmVnX2xvY2s7CisjZGVmaW5lIEhXX0lSUV9TQVZFKG5hbWUsIHZhbCkgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZiY21yaW5nXyMjbmFtZSMjX3JlZ19sb2NrLCAodmFsKSkKKyNkZWZpbmUgSFdfSVJRX1JFU1RPUkUobmFtZSwgdmFsKSAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtcmluZ18jI25hbWUjI19yZWdfbG9jaywgKHZhbCkpCisjZWxzZQorI2RlZmluZSBIV19ERUNMQVJFX1NQSU5MT0NLKG5hbWUpCisjZGVmaW5lIEhXX0VYVEVSTl9TUElOTE9DSyhuYW1lKQorI2RlZmluZSBIV19JUlFfU0FWRShuYW1lLCB2YWwpICAgICB7KHZvaWQpKG5hbWUpOyAodm9pZCkodmFsKTsgfQorI2RlZmluZSBIV19JUlFfUkVTVE9SRShuYW1lLCB2YWwpICB7KHZvaWQpKG5hbWUpOyAodm9pZCkodmFsKTsgfQorI2VuZGlmCisKKyNpZm5kZWYgSFdfSU9fUEhZU19UT19WSVJUCisjZGVmaW5lIEhXX0lPX1BIWVNfVE9fVklSVCBNTV9JT19QSFlTX1RPX1ZJUlQKKyNlbmRpZgorI2RlZmluZSBIV19JT19WSVJUX1RPX1BIWVMgTU1fSU9fVklSVF9UT19QSFlTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjBlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworI2RlZmluZSBfX2lvKGEpICAgICAgICAgKCh2b2lkIF9faW9tZW0gKilIV19JT19QSFlTX1RPX1ZJUlQoYSkpCisKKy8qIERvIG5vdCBlbmFibGUgbWVtX3BjaSBmb3IgYSBiaWcgZW5kaWFuIGFybSBhcmNoaXRlY3R1cmUgb3IgdW5leHBlY3RlZCBieXRlc3dhcHMgd2lsbCAqLworLyogaGFwcGVuIGluIHJlYWR3L3dyaXRldyBldGMuICovCisKKyNkZWZpbmUgcmVhZGIoYykgICAgICAgIF9fcmF3X3JlYWRiKGMpCisjZGVmaW5lIHJlYWR3KGMpICAgICAgICBfX3Jhd19yZWFkdyhjKQorI2RlZmluZSByZWFkbChjKSAgICAgICAgX19yYXdfcmVhZGwoYykKKyNkZWZpbmUgcmVhZGJfcmVsYXhlZChhZGRyKSByZWFkYihhZGRyKQorI2RlZmluZSByZWFkd19yZWxheGVkKGFkZHIpIHJlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsX3JlbGF4ZWQoYWRkcikgcmVhZGwoYWRkcikKKworI2RlZmluZSByZWFkc2IocCwgZCwgbCkgICBfX3Jhd19yZWFkc2IocCwgZCwgbCkKKyNkZWZpbmUgcmVhZHN3KHAsIGQsIGwpICAgX19yYXdfcmVhZHN3KHAsIGQsIGwpCisjZGVmaW5lIHJlYWRzbChwLCBkLCBsKSAgIF9fcmF3X3JlYWRzbChwLCBkLCBsKQorCisjZGVmaW5lIHdyaXRlYih2LCBjKSAgICAgX19yYXdfd3JpdGViKHYsIGMpCisjZGVmaW5lIHdyaXRldyh2LCBjKSAgICAgX19yYXdfd3JpdGV3KHYsIGMpCisjZGVmaW5lIHdyaXRlbCh2LCBjKSAgICAgX19yYXdfd3JpdGVsKHYsIGMpCisKKyNkZWZpbmUgd3JpdGVzYihwLCBkLCBsKSAgX19yYXdfd3JpdGVzYihwLCBkLCBsKQorI2RlZmluZSB3cml0ZXN3KHAsIGQsIGwpICBfX3Jhd193cml0ZXN3KHAsIGQsIGwpCisjZGVmaW5lIHdyaXRlc2wocCwgZCwgbCkgIF9fcmF3X3dyaXRlc2wocCwgZCwgbCkKKworI2RlZmluZSBtZW1zZXRfaW8oYywgdiwgbCkgICAgX21lbXNldF9pbygoYyksICh2KSwgKGwpKQorI2RlZmluZSBtZW1jcHlfZnJvbWlvKGEsIGMsIGwpICAgIF9tZW1jcHlfZnJvbWlvKChhKSwgKGMpLCAobCkpCisjZGVmaW5lIG1lbWNweV90b2lvKGMsIGEsIGwpICBfbWVtY3B5X3RvaW8oKGMpLCAoYSksIChsKSkKKworI2RlZmluZSBldGhfaW9fY29weV9hbmRfc3VtKHMsIGMsIGwsIGIpIGV0aF9jb3B5X2FuZF9zdW0oKHMpLCAoYyksIChsKSwgKGIpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3OWI4MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBCcm9hZGNvbQorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWYgIWRlZmluZWQoQVJDSF9CQ01SSU5HX0lSUVNfSCkKKyNkZWZpbmUgQVJDSF9CQ01SSU5HX0lSUVNfSAorCisvKiBJTlRDMCAtIGludGVycnVwdCBjb250cm9sbGVyIDAgKi8KKyNkZWZpbmUgSVJRX0lOVEMwX1NUQVJUICAgICAwCisjZGVmaW5lIElSUV9ETUEwQzAgICAgICAgICAgMAkvKiBETUEwIGNoYW5uZWwgMCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTBDMSAgICAgICAgICAxCS8qIERNQTAgY2hhbm5lbCAxIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMEMyICAgICAgICAgIDIJLyogRE1BMCBjaGFubmVsIDIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUEwQzMgICAgICAgICAgMwkvKiBETUEwIGNoYW5uZWwgMyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTBDNCAgICAgICAgICA0CS8qIERNQTAgY2hhbm5lbCA0IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMEM1ICAgICAgICAgIDUJLyogRE1BMCBjaGFubmVsIDUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUEwQzYgICAgICAgICAgNgkvKiBETUEwIGNoYW5uZWwgNiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTBDNyAgICAgICAgICA3CS8qIERNQTAgY2hhbm5lbCA3IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMUMwICAgICAgICAgIDgJLyogRE1BMSBjaGFubmVsIDAgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUExQzEgICAgICAgICAgOQkvKiBETUExIGNoYW5uZWwgMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTFDMiAgICAgICAgIDEwCS8qIERNQTEgY2hhbm5lbCAyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMUMzICAgICAgICAgMTEJLyogRE1BMSBjaGFubmVsIDMgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUExQzQgICAgICAgICAxMgkvKiBETUExIGNoYW5uZWwgNCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0RNQTFDNSAgICAgICAgIDEzCS8qIERNQTEgY2hhbm5lbCA1IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1BMUM2ICAgICAgICAgMTQJLyogRE1BMSBjaGFubmVsIDYgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9ETUExQzcgICAgICAgICAxNQkvKiBETUExIGNoYW5uZWwgNyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1ZQTSAgICAgICAgICAgIDE2CS8qIFZvaWNlIHByb2Nlc3MgbW9kdWxlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVVNCSEQyICAgICAgICAgMTcJLyogVVNCIGhvc3QyL2RldmljZTIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9VU0JIMSAgICAgICAgICAxOAkvKiBVU0IxIGhvc3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9VU0JEICAgICAgICAgICAxOQkvKiBVU0IgZGV2aWNlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0RJT0gwICAgICAgICAgMjAJLyogU0RJTzAgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NESU9IMSAgICAgICAgIDIxCS8qIFNESU8xIGhvc3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjAgICAgICAgICAyMgkvKiBUaW1lcjAgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjEgICAgICAgICAyMwkvKiBUaW1lcjEgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjIgICAgICAgICAyNAkvKiBUaW1lcjIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9USU1FUjMgICAgICAgICAyNQkvKiBUaW1lcjMgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TUElIICAgICAgICAgICAyNgkvKiBTUEkgaG9zdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0VTVyAgICAgICAgICAgIDI3CS8qIEV0aGVybmV0IHN3aXRjaCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0FQTSAgICAgICAgICAgIDI4CS8qIEF1ZGlvIHByb2Nlc3MgbW9kdWxlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfR0UgICAgICAgICAgICAgMjkJLyogR3JhcGhpYyBlbmdpbmUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9DTENEICAgICAgICAgICAzMAkvKiBMQ0QgQ29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1BJRiAgICAgICAgICAgIDMxCS8qIFBlcmlwaGVyYWwgaW50ZXJmYWNlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSU5UQzBfRU5EICAgICAgMzEKKworLyogSU5UQzEgLSBpbnRlcnJ1cHQgY29udHJvbGxlciAxICovCisjZGVmaW5lIElSUV9JTlRDMV9TVEFSVCAgICAzMgorI2RlZmluZSBJUlFfR1BJTzAgICAgICAgICAgMzIJLyogIDAgR1BJTyBiaXQgMzEvLzAgY29tYmluZWQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9HUElPMSAgICAgICAgICAzMwkvKiAgMSBHUElPIGJpdCA2NC8vMzIgY29tYmluZWQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9JMlMwICAgICAgICAgICAzNAkvKiAgMiBJMlMwIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSTJTMSAgICAgICAgICAgMzUJLyogIDMgSTJTMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0kyQ0ggICAgICAgICAgIDM2CS8qICA0IEkyQyBob3N0IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfSTJDUyAgICAgICAgICAgMzcJLyogIDUgSTJDIHNsYXZlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU1BJUyAgICAgICAgICAgMzgJLyogIDYgU1BJIHNsYXZlIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfR1BIWSAgICAgICAgICAgMzkJLyogIDcgR2lnYWJpdCBQaHkgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9GTEFTSEMgICAgICAgICA0MAkvKiAgOCBGbGFzaCBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfQ09NTVRYICAgICAgICAgNDEJLyogIDkgQVJNIEREQyB0cmFuc21pdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0NPTU1SWCAgICAgICAgIDQyCS8qIDEwIEFSTSBEREMgcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1BNVUlSUSAgICAgICAgIDQzCS8qIDExIEFSTSBwZXJmb3JtYW5jZSBtb25pdG9yIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVUFSVEIgICAgICAgICAgNDQJLyogMTIgVUFSVEIgKi8KKyNkZWZpbmUgSVJRX1dBVENIRE9HICAgICAgIDQ1CS8qIDEzIFdhdGNoZG9nIHRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVUFSVEEgICAgICAgICAgNDYJLyogMTQgVUFSVEEgKi8KKyNkZWZpbmUgSVJRX1RTQyAgICAgICAgICAgIDQ3CS8qIDE1IFRvdWNoIHNjcmVlbiBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfS0VZQyAgICAgICAgICAgNDgJLyogMTYgS2V5IHBhZCBjb250cm9sbGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRE1QVSAgICAgICAgICAgNDkJLyogMTcgRERSMiBtZW1vcnkgcGFydGl0aW9uIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfVk1QVSAgICAgICAgICAgNTAJLyogMTggVlJBTSBtZW1vcnkgcGFydGl0aW9uIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfRk1QVSAgICAgICAgICAgNTEJLyogMTkgRmxhc2ggbWVtb3J5IHBhcml0aW9uIHVuaXQgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9STkcgICAgICAgICAgICA1MgkvKiAyMCBSYW5kb20gbnVtYmVyIGdlbmVyYXRvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQzAgICAgICAgICAgIDUzCS8qIDIxIFJlYWwgdGltZSBjbG9jayBwZXJpb2RpYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1JUQzEgICAgICAgICAgIDU0CS8qIDIyIFJlYWwgdGltZSBjbG9jayBvbmUtc2hvdCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NQVU0gICAgICAgICAgIDU1CS8qIDIzIFNlY3VyZSBwcm9jZXNzIG1vZHVsZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1ZERUMgICAgICAgICAgIDU2CS8qIDI0IEhhbnRybyB2aWRlbyBkZWNvZGVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfUlRDMiAgICAgICAgICAgNTcJLyogMjUgUmVhbCB0aW1lIGNsb2NrIHRhbXBlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0REUlAgICAgICAgICAgIDU4CS8qIDI2IEREUiBQYW5pYyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX0lOVEMxX0VORCAgICAgIDU4CisKKy8qIFNJTlRDIHNlY3VyZSBpbnQgY29udHJvbGxlciAqLworI2RlZmluZSBJUlFfU0lOVENfU1RBUlQgICAgNTkKKyNkZWZpbmUgSVJRX1NFQ19XQVRDSERPRyAgIDU5CS8qICAwIFdhdGNoZG9nIHRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1VBUlRBICAgICAgNjAJLyogIDEgVUFSVEEgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfVFNDICAgICAgICA2MQkvKiAgMiBUb3VjaCBzY3JlZW4gY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19LRVlDICAgICAgIDYyCS8qICAzIEtleSBwYWQgY29udHJvbGxlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19ETVBVICAgICAgIDYzCS8qICA0IEREUjIgbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19WTVBVICAgICAgIDY0CS8qICA1IFZSQU0gbWVtb3J5IHBhcnRpdGlvbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19GTVBVICAgICAgIDY1CS8qICA2IEZsYXNoIG1lbW9yeSBwYXJpdGlvbiB1bml0IGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1JORyAgICAgICAgNjYJLyogIDcgUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfUlRDMCAgICAgICA2NwkvKiAgOCBSZWFsIHRpbWUgY2xvY2sgcGVyaW9kaWMgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfUlRDMSAgICAgICA2OAkvKiAgOSBSZWFsIHRpbWUgY2xvY2sgb25lLXNob3QgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfU1BVTSAgICAgICA2OQkvKiAxMCBTZWN1cmUgcHJvY2VzcyBtb2R1bGUgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfVElNRVIwICAgICA3MAkvKiAxMSBTZWN1cmUgdGltZXIwIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1RJTUVSMSAgICAgNzEJLyogMTIgU2VjdXJlIHRpbWVyMSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRX1NFQ19USU1FUjIgICAgIDcyCS8qIDEzIFNlY3VyZSB0aW1lcjIgaW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9TRUNfVElNRVIzICAgICA3MwkvKiAxNCBTZWN1cmUgdGltZXIzIGludGVycnVwdCAqLworI2RlZmluZSBJUlFfU0VDX1JUQzIgICAgICAgNzQJLyogMTUgUmVhbCB0aW1lIGNsb2NrIHRhbXBlciBpbnRlcnJ1cHQgKi8KKworI2RlZmluZSBJUlFfU0lOVENfRU5EICAgICAgNzQKKworLyogTm90ZTogdGhlcmUgYXJlIDMgSU5UQyByZWdpc3RlcnMgb2YgMzIgYml0cyBlYWNoLiBTbyBpbnRlcm5hbCBJUlFzIGNvdWxkIGdvIGZyb20gMC05NSAqLworLyogICAgICAgU2luY2UgSVJRcyBhcmUgdHlwaWNhbGx5IHZpZXdlZCBpbiBkZWNpbWFsLCB3ZSBzdGFydCB0aGUgZ3BpbyBiYXNlZCBJUlFzIG9mZiBhdCAxMDAgKi8KKy8qICAgICAgIHRvIG1ha2UgdGhlIG1hcHBpbmcgZWFzeSBmb3IgaHVtYW5zIHRvIGRlY2lwaGVyLiAqLworCisjZGVmaW5lIElSUV9HUElPXzAgICAgICAgICAgICAgICAgICAxMDAKKworI2RlZmluZSBOVU1fSU5URVJOQUxfSVJRUyAgICAgICAgICAoSVJRX1NJTlRDX0VORCsxKQorCisvKiBJIGNvdWxkbid0IGdldCB0aGUgZ3Bpb0h3X3JlZy5oIGZpbGUgdG8gYmUgaW5jbHVkZWQgY2xlYW5seSwgc28gSSBoYXJkY29kZWQgaXQgKi8KKy8qIGRlZmluZSBOVU1fR1BJT19JUlFTICAgICAgICAgICAgICAgR1BJT0hXX1RPVEFMX05VTV9QSU5TICovCisjZGVmaW5lIE5VTV9HUElPX0lSUVMgICAgICAgICAgICAgICA2MgorCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICAgICAgICAgICAgICAoSVJRX0dQSU9fMCArIE5VTV9HUElPX0lSUVMpCisKKyNkZWZpbmUgSVJRX1VOS05PV04gICAgICAgICAgICAgICAgIC0xCisKKy8qIFR1bmUgdGhlc2UgYml0cyB0byBwcmVjbHVkZSBub2lzeSBvciB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQgc291cmNlcyBhcyByZXF1aXJlZC4gKi8KKyNkZWZpbmUgSVJRX0lOVEMwX1ZBTElEX01BU0sgICAgICAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgSVJRX0lOVEMxX1ZBTElEX01BU0sgICAgICAgIDB4MDdmZmZmZmYKKyNkZWZpbmUgSVJRX1NJTlRDX1ZBTElEX01BU0sgICAgICAgIDB4MDAwMGZmZmYKKworI2VuZGlmIC8qIEFSQ0hfQkNNUklOR19JUlFTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNGY5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNSAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNpbmNsdWRlIDxjZmdfZ2xvYmFsLmg+CisKKy8qCisgKiBQaHlzaWNhbCB2cyB2aXJ0dWFsIFJBTSBhZGRyZXNzIHNwYWNlIGNvbnZlcnNpb24uICBUaGVzZSBhcmUKKyAqIHByaXZhdGUgZGVmaW5pdGlvbnMgd2hpY2ggc2hvdWxkIE5PVCBiZSB1c2VkIG91dHNpZGUgbWVtb3J5LmgKKyAqIGZpbGVzLiAgVXNlIHZpcnRfdG9fcGh5cy9waHlzX3RvX3ZpcnQvX19wYS9fX3ZhIGluc3RlYWQuCisgKi8KKworI2RlZmluZSBQSFlTX09GRlNFVCBDRkdfR0xPQkFMX1JBTV9CQVNFCisKKy8qCisgKiBNYXhpbXVtIERNQSBtZW1vcnkgYWxsb3dlZCBpcyAxNE0KKyAqLworI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFIChTWl8xNk0gLSBTWl8yTSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL21lbW9yeV9zZXR0aW5ncy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9tZW1vcnlfc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVjZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9tZW1vcnlfc2V0dGluZ3MuaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1FTU9SWV9TRVRUSU5HU19ICisjZGVmaW5lIE1FTU9SWV9TRVRUSU5HU19ICisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBNZW1vcnkgZGV2aWNlcyAqLworLyogTkFORCBGbGFzaCB0aW1pbmcgZm9yIDE2NiBNSHogc2V0dGluZyAqLworI2RlZmluZSBIV19DRkdfTkFORF90QlRBICAoNSA8PCAxNikJLyogQnVzIHR1cm5hcm91bmQgY3ljbGUgKG4pICAgICAgICAwLTcgICgzMCBucykgKi8KKyNkZWZpbmUgSFdfQ0ZHX05BTkRfdFdQICAgKDQgPDwgMTEpCS8qIFdyaXRlIHB1bHNlIHdpZHRoIGN5Y2xlIChuKzEpICAgMC0zMSAoMjUgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RXUiAgICgxIDw8IDkpCS8qIFdyaXRlIHJlY292ZXJ5IGN5Y2xlIChuKzEpICAgICAgMC0zICAoMTAgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RBUyAgICgwIDw8IDcpCS8qIFdyaXRlIGFkZHJlc3Mgc2V0dXAgY3ljbGUgKG4rMSkgMC0zICAoIDAgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RPRSAgICgzIDw8IDUpCS8qIE91dHB1dCBlbmFibGUgZGVsYXkgY3ljbGUgKG4pICAgMC0zICAoMTUgbnMpICovCisjZGVmaW5lIEhXX0NGR19OQU5EX3RSQyAgICg3IDw8IDApCS8qIFJlYWQgYWNjZXNzIGN5Y2xlIChuKzIpICAgICAgICAgMC0zMSAoNTAgbnMpICovCisKKyNkZWZpbmUgSFdfQ0ZHX05BTkRfVENSIChIV19DRkdfTkFORF90QlRBIFwKKwl8IEhXX0NGR19OQU5EX3RXUCAgXAorCXwgSFdfQ0ZHX05BTkRfdFdSICBcCisJfCBIV19DRkdfTkFORF90QVMgIFwKKwl8IEhXX0NGR19OQU5EX3RPRSAgXAorCXwgSFdfQ0ZHX05BTkRfdFJDKQorCisvKiBOT1IgRmxhc2ggdGltaW5nIGZvciAxNjYgTUh6IHNldHRpbmcgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UUFJDX1RXTEMgKDAgPDwgMTkpCS8qIFBhZ2UgcmVhZCBhY2Nlc3MgY3ljbGUgLyBCdXJzdCB3cml0ZSBsYXRlbmN5IChuKzIgLyBuKzEpIChtYXggMjVucykgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UQlRBICAgICAgKDAgPDwgMTYpCS8qIEJ1cyB0dXJuYXJvdW5kIGN5Y2xlIChuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChETkEpICAgICAgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UV1AgICAgICAgKDYgPDwgMTEpCS8qIFdyaXRlIHB1bHNlIHdpZHRoIGN5Y2xlIChuKzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzNW5zKSAgICAgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UV1IgICAgICAgKDAgPDwgOSkJLyogV3JpdGUgcmVjb3ZlcnkgY3ljbGUgKG4rMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDBucykgICAgICAqLworI2RlZmluZSBIV19DRkdfTk9SX1RBUyAgICAgICAoMCA8PCA3KQkvKiBXcml0ZSBhZGRyZXNzIHNldHVwIGN5Y2xlIChuKzEpICAgICAgICAgICAgICAgICAgICAgICAgICAoMG5zKSAgICAgICovCisjZGVmaW5lIEhXX0NGR19OT1JfVE9FICAgICAgICgwIDw8IDUpCS8qIE91dHB1dCBlbmFibGUgZGVsYXkgY3ljbGUgKG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXggMjVucykgKi8KKyNkZWZpbmUgSFdfQ0ZHX05PUl9UUkNfVExDICAgKDB4MTAgPDwgMCkJLyogUmVhZCBhY2Nlc3MgY3ljbGUgLyBCdXJzdCByZWFkIGxhdGVuY3kgKG4rMiAvIG4rMSkgICAgICAgKDEwMG5zKSAgICAqLworCisjZGVmaW5lIEhXX0NGR19GTEFTSDBfVENSIChIV19DRkdfTk9SX1RQUkNfVFdMQyBcCisJfCBIV19DRkdfTk9SX1RCVEEgICAgICBcCisJfCBIV19DRkdfTk9SX1RXUCAgICAgICBcCisJfCBIV19DRkdfTk9SX1RXUiAgICAgICBcCisJfCBIV19DRkdfTk9SX1RBUyAgICAgICBcCisJfCBIV19DRkdfTk9SX1RPRSAgICAgICBcCisJfCBIV19DRkdfTk9SX1RSQ19UTEMpCisKKyNkZWZpbmUgSFdfQ0ZHX0ZMQVNIMV9UQ1IgICAgSFdfQ0ZHX0ZMQVNIMF9UQ1IKKyNkZWZpbmUgSFdfQ0ZHX0ZMQVNIMl9UQ1IgICAgSFdfQ0ZHX0ZMQVNIMF9UQ1IKKworLyogU0RSQU0gU2V0dGluZ3MgKi8KKy8qICNkZWZpbmUgSFdfQ0ZHX1NEUkFNX0NBU19MQVRFTkNZICAgICAgICA1ICAgIERlZmF1bHQgNSwgVmFsdWVzIFszLi42XSAqLworLyogI2RlZmluZSBIV19DRkdfU0RSQU1fQ0hJUF9TRUxFQ1RfQ05UICAgIDEgICAgRGVmYXVsdCAxLCBWYXVsZXMgWzEuLjJdICovCisvKiAjZGVmaW5lIEhXX0NGR19TRFJBTV9TUEVFRF9HUkFERSAgICAgICAgNjY3ICBEZWZhdWx0IDY2NywgVmFsdWVzIFs0MDAsNTMzLDY2Nyw4MDBdICovCisvKiAjZGVmaW5lIEhXX0NGR19TRFJBTV9XSURUSF9CSVRTICAgICAgICAgMTYgICBEZWZhdWx0IDE2LCBWYXVsZXMgWzgsMTZdICovCisjZGVmaW5lIEhXX0NGR19TRFJBTV9TSVpFX0JZVEVTICAgICAgICAgMHgxMDAwMDAwMAkvKiBUb3RhbCBtZW1vcnksIG5vdCBwZXIgZGV2aWNlIHNpemUgKi8KKworLyogLS0tLSBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZiAvKiBNRU1PUllfU0VUVElOR1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiZjkzYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8bWFjaC9jc3AvY2hpcGNId19pbmxpbmUuaD4KKworZXh0ZXJuIGludCBiY21yaW5nX2FyY2hfd2FybV9yZWJvb3Q7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNoYXIgKmNtZCkKK3sKKwlwcmludGsoImFyY2hfcmVzZXQ6JWMgJXhcbiIsIG1vZGUsIGJjbXJpbmdfYXJjaF93YXJtX3JlYm9vdCk7CisKKwlpZiAobW9kZSA9PSAnaCcpIHsKKwkJLyogUmVib290IGNvbmZpZ3VyZWQgaW4gcHJvYyBlbnRyeSAqLworCQlpZiAoYmNtcmluZ19hcmNoX3dhcm1fcmVib290KSB7CisJCQlwcmludGsoIndhcm0gcmVzZXRcbiIpOworCQkJLyogSXNzdWUgV2FybSByZXNldCAoZG8gbm90IHJlc2V0IGV0aGVybmV0IHN3aXRjaCwga2VlcCBhbGl2ZSkgKi8KKwkJCWNoaXBjSHdfcmVzZXQoY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1dBUk0pOworCQl9IGVsc2UgeworCQkJLyogRm9yY2UgcmVzZXQgb2YgZXZlcnl0aGluZyAqLworCQkJcHJpbnRrKCJmb3JjZSByZXNldFxuIik7CisJCQljaGlwY0h3X3Jlc2V0KGNoaXBjSHdfUkVHX1NPRlRfUkVTRVRfQ0hJUF9TT0ZUKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZvcmNlIHJlc2V0IG9mIGV2ZXJ5dGhpbmcgKi8KKwkJcHJpbnRrKCJmb3JjZSByZXNldFxuIik7CisJCWNoaXBjSHdfcmVzZXQoY2hpcGNId19SRUdfU09GVF9SRVNFVF9DSElQX1NPRlQpOworCX0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWVyLmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5NGJiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdGltZXIuaApAQCAtMCwwICsxLDc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDQgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIHRpbWVyLmgKKyoKKyogIFBVUlBPU0U6CisqCisqCisqCisqICBOT1RFUzoKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoQkNNX0xJTlVYX1RJTUVSX0gpCisjZGVmaW5lIEJDTV9MSU5VWF9USU1FUl9ICisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCisKKy8qIC0tLS0gSW5jbHVkZSBGaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAtLS0tIENvbnN0YW50cyBhbmQgVHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0eXBlZGVmIHVuc2lnbmVkIGludCB0aW1lcl90aWNrX2NvdW50X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB0aW1lcl90aWNrX3JhdGVfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHRpbWVyX21zZWNfdDsKKworLyogLS0tLSBWYXJpYWJsZSBFeHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICB0aW1lcl9nZXRfdGlja19jb3VudAorKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordGltZXJfdGlja19jb3VudF90IHRpbWVyX2dldF90aWNrX2NvdW50KHZvaWQpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgdGltZXJfZ2V0X3RpY2tfcmF0ZQorKgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordGltZXJfdGlja19yYXRlX3QgdGltZXJfZ2V0X3RpY2tfcmF0ZSh2b2lkKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogIHRpbWVyX2dldF9tc2VjCisqCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0aW1lcl9tc2VjX3QgdGltZXJfZ2V0X21zZWModm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICB0aW1lcl90aWNrc190b19tc2VjCisqCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit0aW1lcl9tc2VjX3QgdGltZXJfdGlja3NfdG9fbXNlYyh0aW1lcl90aWNrX2NvdW50X3QgdGlja3MpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIEJDTV9MSU5VWF9USU1FUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBkMDMzZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDI1IEBACisvKgorICoKKyAqICBJbnRlZ3JhdG9yIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworLyoKKyAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpY2tzIHBlciBzZWNvbmQKKyAqLworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTEwMDAwMCAvKiBSRUdfU01UX1RJQ0tTX1BFUl9TRUMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM5ODIxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMjAwNSAtIDIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBVbmxlc3MgeW91IGFuZCBCcm9hZGNvbSBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhdmFpbGFibGUgYXQKKyogaHR0cDovL3d3dy5icm9hZGNvbS5jb20vbGljZW5zZXMvR1BMdjIucGhwICh0aGUgIkdQTCIpLgorKgorKiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIG1heSB5b3UgY29tYmluZSB0aGlzCisqIHNvZnR3YXJlIGluIGFueSB3YXkgd2l0aCBhbnkgb3RoZXIgQnJvYWRjb20gc29mdHdhcmUgcHJvdmlkZWQgdW5kZXIgYQorKiBsaWNlbnNlIG90aGVyIHRoYW4gdGhlIEdQTCwgd2l0aG91dCBCcm9hZGNvbSdzIGV4cHJlc3MgcHJpb3Igd3JpdHRlbgorKiBjb25zZW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bWFjaC9jc3AvbW1fYWRkci5oPgorCisjZGVmaW5lIEJDTVJJTkdfVUFSVF8wX0RSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKU1NX0FERFJfSU9fVUFSVEEpCisjZGVmaW5lIEJDTVJJTkdfVUFSVF8wX0ZSICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShNTV9BRERSX0lPX1VBUlRBICsgMHgxOCkpCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGludCBjKQoreworCS8qIFNlbmQgb3V0IFVBUlRBICovCisJd2hpbGUgKEJDTVJJTkdfVUFSVF8wX0ZSICYgKDEgPDwgNSkpCisJCTsKKworCUJDTVJJTkdfVUFSVF8wX0RSID0gYzsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKK3sKKwkvKiBXYWl0IGZvciB0aGUgdHggZmlmbyB0byBiZSBlbXB0eSAqLworCXdoaWxlICgoQkNNUklOR19VQVJUXzBfRlIgJiAoMSA8PCA3KSkgPT0gMCkKKwkJOworCisJLyogV2FpdCBmb3IgdGhlIGZpbmFsIGNoYXJhY3RlciB0byBiZSBzZW50IG9uIHRoZSB0eGQgbGluZSAqLworCXdoaWxlIChCQ01SSU5HX1VBUlRfMF9GUiAmICgxIDw8IDMpKQorCQk7Cit9CisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlMmVhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qCisgKiBNb3ZlIFZNQUxMT0NfRU5EIHRvIDB4ZjAwMDAwMDAgc28gdGhhdCB0aGUgdm0gc3BhY2UgY2FuIHJhbmdlIGZyb20KKyAqIDB4ZTAwMDAwMDAgdG8gMHhlZmZmZmZmZi4gVGhpcyBnaXZlcyB1cyAyNTYgTUIgb2Ygdm0gc3BhY2UgYW5kIGhhbmRsZXMKKyAqIGxhcmdlciBwaHlzaWNhbCBtZW1vcnkgZGVzaWducyBiZXR0ZXIuCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzFjNDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2lycS5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvaW50Y0h3X3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvY3NwL21tX2lvLmg+CisKK3N0YXRpYyB2b2lkIGJjbXJpbmdfbWFza19pcnEwKHVuc2lnbmVkIGludCBpcnEpCit7CisJd3JpdGVsKDEgPDwgKGlycSAtIElSUV9JTlRDMF9TVEFSVCksCisJICAgICAgIE1NX0lPX0JBU0VfSU5UQzAgKyBJTlRDSFdfSU5URU5DTEVBUik7Cit9CisKK3N0YXRpYyB2b2lkIGJjbXJpbmdfdW5tYXNrX2lycTAodW5zaWduZWQgaW50IGlycSkKK3sKKwl3cml0ZWwoMSA8PCAoaXJxIC0gSVJRX0lOVEMwX1NUQVJUKSwKKwkgICAgICAgTU1fSU9fQkFTRV9JTlRDMCArIElOVENIV19JTlRFTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBiY21yaW5nX21hc2tfaXJxMSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXdyaXRlbCgxIDw8IChpcnEgLSBJUlFfSU5UQzFfU1RBUlQpLAorCSAgICAgICBNTV9JT19CQVNFX0lOVEMxICsgSU5UQ0hXX0lOVEVOQ0xFQVIpOworfQorCitzdGF0aWMgdm9pZCBiY21yaW5nX3VubWFza19pcnExKHVuc2lnbmVkIGludCBpcnEpCit7CisJd3JpdGVsKDEgPDwgKGlycSAtIElSUV9JTlRDMV9TVEFSVCksCisJICAgICAgIE1NX0lPX0JBU0VfSU5UQzEgKyBJTlRDSFdfSU5URU5BQkxFKTsKK30KKworc3RhdGljIHZvaWQgYmNtcmluZ19tYXNrX2lycTIodW5zaWduZWQgaW50IGlycSkKK3sKKwl3cml0ZWwoMSA8PCAoaXJxIC0gSVJRX1NJTlRDX1NUQVJUKSwKKwkgICAgICAgTU1fSU9fQkFTRV9TSU5UQyArIElOVENIV19JTlRFTkNMRUFSKTsKK30KKworc3RhdGljIHZvaWQgYmNtcmluZ191bm1hc2tfaXJxMih1bnNpZ25lZCBpbnQgaXJxKQoreworCXdyaXRlbCgxIDw8IChpcnEgLSBJUlFfU0lOVENfU1RBUlQpLAorCSAgICAgICBNTV9JT19CQVNFX1NJTlRDICsgSU5UQ0hXX0lOVEVOQUJMRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmNtcmluZ19pcnEwX2NoaXAgPSB7CisJLnR5cGVuYW1lID0gIkFSTS1JTlRDMCIsCisJLmFjayA9IGJjbXJpbmdfbWFza19pcnEwLAorCS5tYXNrID0gYmNtcmluZ19tYXNrX2lycTAsCS8qIG1hc2sgYSBzcGVjaWZpYyBpbnRlcnJ1cHQsIGJsb2NraW5nIGl0cyBkZWxpdmVyeS4gKi8KKwkudW5tYXNrID0gYmNtcmluZ191bm1hc2tfaXJxMCwJLyogdW5tYWtzIGFuIGludGVycnVwdCAqLworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBiY21yaW5nX2lycTFfY2hpcCA9IHsKKwkudHlwZW5hbWUgPSAiQVJNLUlOVEMxIiwKKwkuYWNrID0gYmNtcmluZ19tYXNrX2lycTEsCisJLm1hc2sgPSBiY21yaW5nX21hc2tfaXJxMSwKKwkudW5tYXNrID0gYmNtcmluZ191bm1hc2tfaXJxMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmNtcmluZ19pcnEyX2NoaXAgPSB7CisJLnR5cGVuYW1lID0gIkFSTS1TSU5UQyIsCisJLmFjayA9IGJjbXJpbmdfbWFza19pcnEyLAorCS5tYXNrID0gYmNtcmluZ19tYXNrX2lycTIsCisJLnVubWFzayA9IGJjbXJpbmdfdW5tYXNrX2lycTIsCit9OworCitzdGF0aWMgdm9pZCB2aWNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2UsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwKKwkJICAgICB1bnNpZ25lZCBpbnQgaXJxX3N0YXJ0LCB1bnNpZ25lZCBpbnQgdmljX3NvdXJjZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGlycSA9IGlycV9zdGFydCArIGk7CisJCXNldF9pcnFfY2hpcChpcnEsIGNoaXApOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGJhc2UpOworCisJCWlmICh2aWNfc291cmNlcyAmICgxIDw8IGkpKSB7CisJCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KKwl9CisJd3JpdGVsKDAsIGJhc2UgKyBJTlRDSFdfSU5UU0VMRUNUKTsKKwl3cml0ZWwoMCwgYmFzZSArIElOVENIV19JTlRFTkFCTEUpOworCXdyaXRlbCh+MCwgYmFzZSArIElOVENIV19JTlRFTkNMRUFSKTsKKwl3cml0ZWwoMCwgYmFzZSArIElOVENIV19JUlFTVEFUVVMpOworCXdyaXRlbCh+MCwgYmFzZSArIElOVENIV19TT0ZUSU5UQ0xFQVIpOworfQorCit2b2lkIF9faW5pdCBiY21yaW5nX2luaXRfaXJxKHZvaWQpCit7CisJdmljX2luaXQoKHZvaWQgX19pb21lbSAqKU1NX0lPX0JBU0VfSU5UQzAsICZiY21yaW5nX2lycTBfY2hpcCwKKwkJIElSUV9JTlRDMF9TVEFSVCwgSVJRX0lOVEMwX1ZBTElEX01BU0spOworCXZpY19pbml0KCh2b2lkIF9faW9tZW0gKilNTV9JT19CQVNFX0lOVEMxLCAmYmNtcmluZ19pcnExX2NoaXAsCisJCSBJUlFfSU5UQzFfU1RBUlQsIElSUV9JTlRDMV9WQUxJRF9NQVNLKTsKKwl2aWNfaW5pdCgodm9pZCBfX2lvbWVtICopTU1fSU9fQkFTRV9TSU5UQywgJmJjbXJpbmdfaXJxMl9jaGlwLAorCQkgSVJRX1NJTlRDX1NUQVJULCBJUlFfU0lOVENfVkFMSURfTUFTSyk7CisKKwkvKiBzcGVjaWFsIGNhc2VzICovCisJaWYgKElOVENIV19JTlRDMV9HUElPMCAmIElSUV9JTlRDMV9WQUxJRF9NQVNLKSB7CisJCXNldF9pcnFfaGFuZGxlcihJUlFfR1BJTzAsIGhhbmRsZV9zaW1wbGVfaXJxKTsKKwl9CisJaWYgKElOVENIV19JTlRDMV9HUElPMSAmIElSUV9JTlRDMV9WQUxJRF9NQVNLKSB7CisJCXNldF9pcnFfaGFuZGxlcihJUlFfR1BJTzEsIGhhbmRsZV9zaW1wbGVfaXJxKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWJjbXJpbmcvbW0uYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMWMzN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvbW0uYwpAQCAtMCwwICsxLDU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weXJpZ2h0IDIwMDMgLSAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdQorKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXZhaWxhYmxlIGF0CisqIGh0dHA6Ly93d3cuYnJvYWRjb20uY29tL2xpY2Vuc2VzL0dQTHYyLnBocCAodGhlICJHUEwiKS4KKyoKKyogTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYXkgeW91IGNvbWJpbmUgdGhpcworKiBzb2Z0d2FyZSBpbiBhbnkgd2F5IHdpdGggYW55IG90aGVyIEJyb2FkY29tIHNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyIGEKKyogbGljZW5zZSBvdGhlciB0aGFuIHRoZSBHUEwsIHdpdGhvdXQgQnJvYWRjb20ncyBleHByZXNzIHByaW9yIHdyaXR0ZW4KKyogY29uc2VudC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jc3AvbW1faW8uaD4KKworI2RlZmluZSBJT19ERVNDKHZhLCBzeikgeyAudmlydHVhbCA9IHZhLCBcCisJLnBmbiA9IF9fcGh5c190b19wZm4oSFdfSU9fVklSVF9UT19QSFlTKHZhKSksIFwKKwkubGVuZ3RoID0gc3osIFwKKwkudHlwZSA9IE1UX0RFVklDRSB9CisKKyNkZWZpbmUgTUVNX0RFU0ModmEsIHN6KSB7IC52aXJ0dWFsID0gdmEsIFwKKwkucGZuID0gX19waHlzX3RvX3BmbihIV19JT19WSVJUX1RPX1BIWVModmEpKSwgXAorCS5sZW5ndGggPSBzeiwgXAorCS50eXBlID0gTVRfTUVNT1JZIH0KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBiY21yaW5nX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCUlPX0RFU0MoTU1fSU9fQkFTRV9OQU5ELCBTWl82NEspLAkvKiBwaHlzOjB4MjgwMDAwMDAtMHgyODAwMEZGRiAgdmlydDoweEU4MDAwMDAwLTB4RTgwMDBGRkYgIHNpemU6MHgwMDAxMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9VTUksIFNaXzY0SyksCS8qIHBoeXM6MHgyQzAwMDAwMC0weDJDMDAwRkZGICB2aXJ0OjB4RUMwMDAwMDAtMHhFQzAwMEZGRiAgc2l6ZToweDAwMDEwMDAwICovCisKKwlJT19ERVNDKE1NX0lPX0JBU0VfQlJPTSwgU1pfNjRLKSwJLyogcGh5czoweDMwMDAwMDAwLTB4MzAwMEZGRkYgIHZpcnQ6MHhGMzAwMDAwMC0weEYzMDBGRkZGICBzaXplOjB4MDAwMTAwMDAgKi8KKwlNRU1fREVTQyhNTV9JT19CQVNFX0FSQU0sIFNaXzFNKSwJLyogcGh5czoweDMxMDAwMDAwLTB4MzFGRkZGRkYgIHZpcnQ6MHhGMzEwMDAwMC0weEYzMUZGRkZGICBzaXplOjB4MDEwMDAwMDAgKi8KKwlJT19ERVNDKE1NX0lPX0JBU0VfRE1BMCwgU1pfMU0pLAkvKiBwaHlzOjB4MzIwMDAwMDAtMHgzMkZGRkZGRiAgdmlydDoweEYzMjAwMDAwLTB4RjMyRkZGRkYgIHNpemU6MHgwMTAwMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9ETUExLCBTWl8xTSksCS8qIHBoeXM6MHgzMzAwMDAwMC0weDMzRkZGRkZGICB2aXJ0OjB4RjMzMDAwMDAtMHhGMzNGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX0VTVywgU1pfMU0pLAkvKiBwaHlzOjB4MzQwMDAwMDAtMHgzNEZGRkZGRiAgdmlydDoweEYzNDAwMDAwLTB4RjM0RkZGRkYgIHNpemU6MHgwMTAwMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9DTENELCBTWl8xTSksCS8qIHBoeXM6MHgzNTAwMDAwMC0weDM1RkZGRkZGICB2aXJ0OjB4RjM1MDAwMDAtMHhGMzVGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX0FQTSwgU1pfMU0pLAkvKiBwaHlzOjB4MzYwMDAwMDAtMHgzNkZGRkZGRiAgdmlydDoweEYzNjAwMDAwLTB4RjM2RkZGRkYgIHNpemU6MHgwMTAwMDAwMCAqLworCUlPX0RFU0MoTU1fSU9fQkFTRV9TUFVNLCBTWl8xTSksCS8qIHBoeXM6MHgzNzAwMDAwMC0weDM3RkZGRkZGICB2aXJ0OjB4RjM3MDAwMDAtMHhGMzdGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX1ZQTV9QUk9HLCBTWl8xTSksCS8qIHBoeXM6MHgzODAwMDAwMC0weDM4RkZGRkZGICB2aXJ0OjB4RjM4MDAwMDAtMHhGMzhGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX1ZQTV9EQVRBLCBTWl8xTSksCS8qIHBoeXM6MHgzQTAwMDAwMC0weDNBRkZGRkZGICB2aXJ0OjB4RjNBMDAwMDAtMHhGM0FGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisKKwlJT19ERVNDKE1NX0lPX0JBU0VfVlJBTSwgU1pfNjRLKSwJLyogcGh5czoweDQwMDAwMDAwLTB4NDAwMEZGRkYgIHZpcnQ6MHhGNDAwMDAwMC0weEY0MDBGRkZGICBzaXplOjB4MDAwMTAwMDAgKi8KKwlJT19ERVNDKE1NX0lPX0JBU0VfQ0hJUEMsIFNaXzE2TSksCS8qIHBoeXM6MHg4MDAwMDAwMC0weDgwRkZGRkZGICB2aXJ0OjB4RjgwMDAwMDAtMHhGOEZGRkZGRiAgc2l6ZToweDAxMDAwMDAwICovCisJSU9fREVTQyhNTV9JT19CQVNFX1ZQTV9FWFRNRU1fUlNWRCwKKwkJU1pfMTZNKSwJLyogcGh5czoweDBGMDAwMDAwLTB4MEZGRkZGRkYgIHZpcnQ6MHhGMDAwMDAwMC0weEYwRkZGRkZGICBzaXplOjB4MDEwMDAwMDAgKi8KK307CisKK3ZvaWQgX19pbml0IGJjbXJpbmdfbWFwX2lvKHZvaWQpCit7CisKKwlpb3RhYmxlX2luaXQoYmNtcmluZ19pb19kZXNjLCBBUlJBWV9TSVpFKGJjbXJpbmdfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQxNWQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1iY21yaW5nL3RpbWVyLmMKQEAgLTAsMCArMSw2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIENvcHlyaWdodCAyMDAzIC0gMjAwOCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFVubGVzcyB5b3UgYW5kIEJyb2FkY29tIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKKyogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsIGF2YWlsYWJsZSBhdAorKiBodHRwOi8vd3d3LmJyb2FkY29tLmNvbS9saWNlbnNlcy9HUEx2Mi5waHAgKHRoZSAiR1BMIikuCisqCisqIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgbWF5IHlvdSBjb21iaW5lIHRoaXMKKyogc29mdHdhcmUgaW4gYW55IHdheSB3aXRoIGFueSBvdGhlciBCcm9hZGNvbSBzb2Z0d2FyZSBwcm92aWRlZCB1bmRlciBhCisqIGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGUgR1BMLCB3aXRob3V0IEJyb2FkY29tJ3MgZXhwcmVzcyBwcmlvciB3cml0dGVuCisqIGNvbnNlbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGNzcC90bXJIdy5oPgorCisjaW5jbHVkZSA8bWFjaC90aW1lci5oPgorLyogVGhlIGNvcmUuYyBmaWxlIGluaXRpYWxpemVzIHRpbWVycyAxIGFuZCAzIGFzIGEgbGludXggY2xvY2tzb3VyY2UuICovCisvKiBUaGUgcmVhbCB0aW1lIGNsb2NrIHNob3VsZCBwcm9iYWJseSBiZSB0aGUgcmVhbCBsaW51eCBjbG9ja3NvdXJjZS4gKi8KKy8qIEluIHRoZSBtZWFudGltZSwgdGhpcyBmaWxlIHNob3VsZCBhZ3JlZSB3aXRoIGNvcmUuYyBhcyB0byB0aGUgKi8KKy8qIHByb2ZpbGluZyB0aW1lci4gSWYgdGhlIGNsb2Nrc291cmNlIGlzIG1vdmVkIHRvIHJ0YyBsYXRlciwgdGhlbiAqLworLyogd2UgY2FuIGluaXQgdGhlIHByb2ZpbGluZyB0aW1lciBoZXJlIGluc3RlYWQuICovCisKKy8qIFRpbWVyIDEgcHJvdmlkZXMgMjVNSHogcmVzb2x1dGlvbiBzeW5jcmhvbml6ZWQgdG8gc2NoZWR1bGluZyBhbmQgQVBNIHRpbWluZyAqLworLyogVGltZXIgMyBwcm92aWRlcyBidXMgZnJlcWV1bmN5IHN5Y2hyb25pemVkIHRvIEFDTEssIGJ1dCBzcHJlYWQgc3BlY3RydW0gd2lsbCAqLworLyogYWZmZWN0IHN5bmNocm9uaXphdGlvbiB3aXRoIHNjaGVkdWxpbmcgYW5kIEFQTSB0aW1pbmcuICovCisKKyNkZWZpbmUgUFJPRl9USU1FUiAxCisKK3RpbWVyX3RpY2tfcmF0ZV90IHRpbWVyX2dldF90aWNrX3JhdGUodm9pZCkKK3sKKwlyZXR1cm4gdG1ySHdfZ2V0Q291bnRSYXRlKFBST0ZfVElNRVIpOworfQorCit0aW1lcl90aWNrX2NvdW50X3QgdGltZXJfZ2V0X3RpY2tfY291bnQodm9pZCkKK3sKKwlyZXR1cm4gdG1ySHdfR2V0Q3VycmVudENvdW50KFBST0ZfVElNRVIpOwkvKiBjaGFuZ2UgZG93bmNvdW50ZXIgdG8gdXBjb3VudGVyICovCit9CisKK3RpbWVyX21zZWNfdCB0aW1lcl90aWNrc190b19tc2VjKHRpbWVyX3RpY2tfY291bnRfdCB0aWNrcykKK3sKKwlzdGF0aWMgaW50IHRpY2tSYXRlTXNlYzsKKworCWlmICh0aWNrUmF0ZU1zZWMgPT0gMCkgeworCQl0aWNrUmF0ZU1zZWMgPSB0aW1lcl9nZXRfdGlja19yYXRlKCkgLyAxMDAwOworCX0KKworCXJldHVybiB0aWNrcyAvIHRpY2tSYXRlTXNlYzsKK30KKwordGltZXJfbXNlY190IHRpbWVyX2dldF9tc2VjKHZvaWQpCit7CisJcmV0dXJuIHRpbWVyX3RpY2tzX3RvX21zZWModGltZXJfZ2V0X3RpY2tfY291bnQoKSk7Cit9CisKK0VYUE9SVF9TWU1CT0wodGltZXJfZ2V0X3RpY2tfY291bnQpOworRVhQT1JUX1NZTUJPTCh0aW1lcl90aWNrc190b19tc2VjKTsKK0VYUE9SVF9TWU1CT0wodGltZXJfZ2V0X3RpY2tfcmF0ZSk7CitFWFBPUlRfU1lNQk9MKHRpbWVyX2dldF9tc2VjKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Fkc3NwaGVyZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKaW5kZXggM2ZiZDliMC4uY2FmNmQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvYWRzc3BoZXJlLmMKQEAgLTEyLDE4ICsxMiwxNSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKwogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCisKIHN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGFkc3NwaGVyZV9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSA0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IDZjNGMxNjMuLjNkZDBlMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtMjIsNDggKzIyLDM5IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAKLS8qCi0gKiBUaGUgRVA5M3h4IGhhcyB0d28gZXh0ZXJuYWwgY3J5c3RhbCBvc2NpbGxhdG9ycy4gIFRvIGdlbmVyYXRlIHRoZQotICogcmVxdWlyZWQgaGlnaC1mcmVxdWVuY3kgY2xvY2tzLCB0aGUgcHJvY2Vzc29yIHVzZXMgdHdvIHBoYXNlLWxvY2tlZC0KLSAqIGxvb3BzIChQTExzKSB0byBtdWx0aXBseSB0aGUgaW5jb21pbmcgZXh0ZXJuYWwgY2xvY2sgc2lnbmFsIHRvIG11Y2gKLSAqIGhpZ2hlciBmcmVxdWVuY2llcyB0aGF0IGFyZSB0aGVuIGRpdmlkZWQgZG93biBieSBwcm9ncmFtbWFibGUgZGl2aWRlcnMKLSAqIHRvIHByb2R1Y2UgdGhlIG5lZWRlZCBjbG9ja3MuICBUaGUgUExMcyBvcGVyYXRlIGluZGVwZW5kZW50bHkgb2Ygb25lCi0gKiBhbm90aGVyLgotICovCi0jZGVmaW5lIEVQOTNYWF9FWFRfQ0xLX1JBVEUJMTQ3NDU2MDAKLSNkZWZpbmUgRVA5M1hYX0VYVF9SVENfUkFURQkzMjc2OAotCi0KIHN0cnVjdCBjbGsgewogCXVuc2lnbmVkIGxvbmcJcmF0ZTsKIAlpbnQJCXVzZXJzOwogCWludAkJc3dfbG9ja2VkOwotCXUzMgkJZW5hYmxlX3JlZzsKKwl2b2lkIF9faW9tZW0JKmVuYWJsZV9yZWc7CiAJdTMyCQllbmFibGVfbWFzazsKIAogCXVuc2lnbmVkIGxvbmcJKCpnZXRfcmF0ZSkoc3RydWN0IGNsayAqY2xrKTsKKwlpbnQJCSgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIH07CiAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOwogCitzdGF0aWMgaW50IHNldF9rZXl0Y2hjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisKIAogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQxID0gewogCS5zd19sb2NrZWQJPSAxLAotCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHLAotCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19VMUVOLAorCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCisJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTFFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MiA9IHsKIAkuc3dfbG9ja2VkCT0gMSwKLQkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRywKLQkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfVTJFTiwKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAorCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UyRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDMgPSB7CiAJLnN3X2xvY2tlZAk9IDEsCi0JLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUcsCi0JLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHX1UzRU4sCisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKKwkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VM0VOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDE7CkBAIC03NSw2ICs2NiwxNSBAQAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfVVNIX0VOLAogfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19rZXlwYWQgPSB7CisJLnN3X2xvY2tlZAk9IDEsCisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJViwKKwkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4sCisJLnNldF9yYXRlCT0gc2V0X2tleXRjaGNsa19yYXRlLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wd20gPSB7CisJLnJhdGUJCT0gRVA5M1hYX0VYVF9DTEtfUkFURSwKK307CiAKIC8qIERNQSBDbG9ja3MgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0gewpAQCAtMTMwLDI3ICsxMzAsMjkgQEAKIAl7IC5kZXZfaWQgPSBkZXYsIC5jb25faWQgPSBjb24sIC5jbGsgPSBjayB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjbG9ja3NbXSA9IHsKLQlJTklUX0NLKCJhcGI6dWFydDEiLCBOVUxMLCAmY2xrX3VhcnQxKSwKLQlJTklUX0NLKCJhcGI6dWFydDIiLCBOVUxMLCAmY2xrX3VhcnQyKSwKLQlJTklUX0NLKCJhcGI6dWFydDMiLCBOVUxMLCAmY2xrX3VhcnQzKSwKLQlJTklUX0NLKE5VTEwsICJwbGwxIiwgJmNsa19wbGwxKSwKLQlJTklUX0NLKE5VTEwsICJmY2xrIiwgJmNsa19mKSwKLQlJTklUX0NLKE5VTEwsICJoY2xrIiwgJmNsa19oKSwKLQlJTklUX0NLKE5VTEwsICJwY2xrIiwgJmNsa19wKSwKLQlJTklUX0NLKE5VTEwsICJwbGwyIiwgJmNsa19wbGwyKSwKLQlJTklUX0NLKCJlcDkzeHgtb2hjaSIsIE5VTEwsICZjbGtfdXNiX2hvc3QpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDAiLCAmY2xrX20ycDApLAotCUlOSVRfQ0soTlVMTCwgIm0ycDEiLCAmY2xrX20ycDEpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDIiLCAmY2xrX20ycDIpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDMiLCAmY2xrX20ycDMpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDQiLCAmY2xrX20ycDQpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDUiLCAmY2xrX20ycDUpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDYiLCAmY2xrX20ycDYpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDciLCAmY2xrX20ycDcpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDgiLCAmY2xrX20ycDgpLAotCUlOSVRfQ0soTlVMTCwgIm0ycDkiLCAmY2xrX20ycDkpLAotCUlOSVRfQ0soTlVMTCwgIm0ybTAiLCAmY2xrX20ybTApLAotCUlOSVRfQ0soTlVMTCwgIm0ybTEiLCAmY2xrX20ybTEpLAorCUlOSVRfQ0soImFwYjp1YXJ0MSIsCQlOVUxMLAkJJmNsa191YXJ0MSksCisJSU5JVF9DSygiYXBiOnVhcnQyIiwJCU5VTEwsCQkmY2xrX3VhcnQyKSwKKwlJTklUX0NLKCJhcGI6dWFydDMiLAkJTlVMTCwJCSZjbGtfdWFydDMpLAorCUlOSVRfQ0soTlVMTCwJCQkicGxsMSIsCQkmY2xrX3BsbDEpLAorCUlOSVRfQ0soTlVMTCwJCQkiZmNsayIsCQkmY2xrX2YpLAorCUlOSVRfQ0soTlVMTCwJCQkiaGNsayIsCQkmY2xrX2gpLAorCUlOSVRfQ0soTlVMTCwJCQkicGNsayIsCQkmY2xrX3ApLAorCUlOSVRfQ0soTlVMTCwJCQkicGxsMiIsCQkmY2xrX3BsbDIpLAorCUlOSVRfQ0soImVwOTN4eC1vaGNpIiwJCU5VTEwsCQkmY2xrX3VzYl9ob3N0KSwKKwlJTklUX0NLKCJlcDkzeHgta2V5cGFkIiwJTlVMTCwJCSZjbGtfa2V5cGFkKSwKKwlJTklUX0NLKE5VTEwsCQkJInB3bV9jbGsiLAkmY2xrX3B3bSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAwIiwJCSZjbGtfbTJwMCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAxIiwJCSZjbGtfbTJwMSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAyIiwJCSZjbGtfbTJwMiksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnAzIiwJCSZjbGtfbTJwMyksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA0IiwJCSZjbGtfbTJwNCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA1IiwJCSZjbGtfbTJwNSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA2IiwJCSZjbGtfbTJwNiksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA3IiwJCSZjbGtfbTJwNyksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA4IiwJCSZjbGtfbTJwOCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMnA5IiwJCSZjbGtfbTJwOSksCisJSU5JVF9DSyhOVUxMLAkJCSJtMm0wIiwJCSZjbGtfbTJtMCksCisJSU5JVF9DSyhOVUxMLAkJCSJtMm0xIiwJCSZjbGtfbTJtMSksCiB9OwogCiAKQEAgLTE2MCw5ICsxNjIsMTEgQEAKIAkJdTMyIHZhbHVlOwogCiAJCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJdmFsdWUgfD0gY2xrLT5lbmFibGVfbWFzazsKIAkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKLQkJX19yYXdfd3JpdGVsKHZhbHVlIHwgY2xrLT5lbmFibGVfbWFzaywgY2xrLT5lbmFibGVfcmVnKTsKKwkJCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7CisJCWVsc2UKKwkJCV9fcmF3X3dyaXRlbCh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE3NSw5ICsxNzksMTEgQEAKIAkJdTMyIHZhbHVlOwogCiAJCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJdmFsdWUgJj0gfmNsay0+ZW5hYmxlX21hc2s7CiAJCWlmIChjbGstPnN3X2xvY2tlZCkKLQkJCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7Ci0JCV9fcmF3X3dyaXRlbCh2YWx1ZSAmIH5jbGstPmVuYWJsZV9tYXNrLCBjbGstPmVuYWJsZV9yZWcpOworCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKKwkJZWxzZQorCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOwpAQCAtMjAyLDYgKzIwOCw0MyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCitzdGF0aWMgaW50IHNldF9rZXl0Y2hjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgdmFsOworCXUzMiBkaXZfYml0OworCisJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKworCS8qCisJICogVGhlIEtleSBNYXRyaXggYW5kIEFEQyBjbG9ja3MgYXJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIHNhbWUKKwkgKiBTeXN0ZW0gQ29udHJvbGxlciByZWdpc3Rlci4gIFRoZSBjbG9jayB1c2VkIHdpbGwgYmUgZWl0aGVyCisJICogMS80IG9yIDEvMTYgdGhlIGV4dGVybmFsIGNsb2NrIHJhdGUgZGVwZW5kaW5nIG9uIHRoZQorCSAqIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0tESVYvRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfQURJVgorCSAqIGJpdCBiZWluZyBzZXQgb3IgY2xlYXJlZC4KKwkgKi8KKwlkaXZfYml0ID0gY2xrLT5lbmFibGVfbWFzayA+PiAxNTsKKworCWlmIChyYXRlID09IEVQOTNYWF9LRVlUQ0hDTEtfRElWNCkKKwkJdmFsIHw9IGRpdl9iaXQ7CisJZWxzZSBpZiAocmF0ZSA9PSBFUDkzWFhfS0VZVENIQ0xLX0RJVjE2KQorCQl2YWwgJj0gfmRpdl9iaXQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsLCBjbGstPmVuYWJsZV9yZWcpOworCWNsay0+cmF0ZSA9IHJhdGU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaWYgKGNsay0+c2V0X3JhdGUpCisJCXJldHVybiBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKKwogCiBzdGF0aWMgY2hhciBmY2xrX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDgsIDE2LCAxLCAxLCAxIH07CiBzdGF0aWMgY2hhciBoY2xrX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDUsIDYsIDgsIDE2LCAzMiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCmluZGV4IDIwNGRjNWMuLjE2YjkyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKQEAgLTE2LDQwICsxNiwyNCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKQEAgLTk4LDcgKzgyLDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBsYXN0X2ppZmZ5X3RpbWU7CiAKLSNkZWZpbmUgVElNRVI0X1RJQ0tTX1BFUl9KSUZGWQkJKChDTE9DS19USUNLX1JBVEUgKyAoSFovMikpIC8gSFopCisjZGVmaW5lIFRJTUVSNF9USUNLU19QRVJfSklGRlkJCURJVl9ST1VORF9DTE9TRVNUKENMT0NLX1RJQ0tfUkFURSwgSFopCiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBlcDkzeHhfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKQEAgLTM2Miw4ICszNDYsOCBAQAogewogCWludCBncGlvX2lycTsKIAotCXZpY19pbml0KCh2b2lkICopRVA5M1hYX1ZJQzFfQkFTRSwgMCwgRVA5M1hYX1ZJQzFfVkFMSURfSVJRX01BU0ssIDApOwotCXZpY19pbml0KCh2b2lkICopRVA5M1hYX1ZJQzJfQkFTRSwgMzIsIEVQOTNYWF9WSUMyX1ZBTElEX0lSUV9NQVNLLCAwKTsKKwl2aWNfaW5pdChFUDkzWFhfVklDMV9CQVNFLCAwLCBFUDkzWFhfVklDMV9WQUxJRF9JUlFfTUFTSywgMCk7CisJdmljX2luaXQoRVA5M1hYX1ZJQzJfQkFTRSwgMzIsIEVQOTNYWF9WSUMyX1ZBTElEX0lSUV9NQVNLLCAwKTsKIAogCWZvciAoZ3Bpb19pcnEgPSBncGlvX3RvX2lycSgwKTsKIAkgICAgIGdwaW9faXJxIDw9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSk7ICsrZ3Bpb19pcnEpIHsKQEAgLTM4NSw2ICszNjksNDcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRVA5M3h4IFN5c3RlbSBDb250cm9sbGVyIFNvZnR3YXJlIExvY2tlZCByZWdpc3RlciBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBzeXNjb25fc3dsb2NrIHByZXZlbnRzIGFueXRoaW5nIGVsc2UgZnJvbSB3cml0aW5nIHRvIHRoZSBzeXNjb24KKyAqIGJsb2NrIHdoaWxlIGEgc29mdHdhcmUgbG9ja2VkIHJlZ2lzdGVyIGlzIGJlaW5nIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3lzY29uX3N3bG9jayk7CisKK3ZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnN5c2Nvbl9zd2xvY2ssIGZsYWdzKTsKKworCV9fcmF3X3dyaXRlbCgweGFhLCBFUDkzWFhfU1lTQ09OX1NXTE9DSyk7CisJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2Nvbl9zd2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSk7CisKK3ZvaWQgZXA5M3h4X2RldmNmZ19zZXRfY2xlYXIodW5zaWduZWQgaW50IHNldF9iaXRzLCB1bnNpZ25lZCBpbnQgY2xlYXJfYml0cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzY29uX3N3bG9jaywgZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9ERVZDRkcpOworCXZhbCB8PSBzZXRfYml0czsKKwl2YWwgJj0gfmNsZWFyX2JpdHM7CisJX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKKwlfX3Jhd193cml0ZWwodmFsLCBFUDkzWFhfU1lTQ09OX0RFVkNGRyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeXNjb25fc3dsb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9kZXZjZmdfc2V0X2NsZWFyKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRVA5M3h4IHBlcmlwaGVyYWwgaGFuZGxpbmcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBFUDkzWFhfVUFSVF9NQ1JfT0ZGU0VUCQkoMHgwMTAwKQpAQCAtNTE3LDEwICs1NDIsOCBAQAogCiB2b2lkIF9faW5pdCBlcDkzeHhfcmVnaXN0ZXJfZXRoKHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGEsIGludCBjb3B5X2FkZHIpCiB7Ci0JaWYgKGNvcHlfYWRkcikgewotCQltZW1jcHkoZGF0YS0+ZGV2X2FkZHIsCi0JCQkodm9pZCAqKShFUDkzWFhfRVRIRVJORVRfQkFTRSArIDB4NTApLCA2KTsKLQl9CisJaWYgKGNvcHlfYWRkcikKKwkJbWVtY3B5X2Zyb21pbyhkYXRhLT5kZXZfYWRkciwgRVA5M1hYX0VUSEVSTkVUX0JBU0UgKyAweDUwLCA2KTsKIAogCWVwOTN4eF9ldGhfZGF0YSA9ICpkYXRhOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXA5M3h4X2V0aF9kZXZpY2UpOwpAQCAtNTQ2LDE5ICs1NjksMTI1IEBACiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfaTJjX2RldmljZSk7CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVQOTN4eCBMRURzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZXA5M3h4X2xlZF9waW5zW10gPSB7CisJeworCQkubmFtZQkJCT0gInBsYXRmb3JtOmdybGVkIiwKKwkJLmdwaW8JCQk9IEVQOTNYWF9HUElPX0xJTkVfR1JMRUQsCisJfSwgeworCQkubmFtZQkJCT0gInBsYXRmb3JtOnJkbGVkIiwKKwkJLmdwaW8JCQk9IEVQOTNYWF9HUElPX0xJTkVfUkRMRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBlcDkzeHhfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShlcDkzeHhfbGVkX3BpbnMpLAorCS5sZWRzCQk9IGVwOTN4eF9sZWRfcGlucywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9sZWRzID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZXA5M3h4X2xlZF9kYXRhLAorCX0sCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFUDkzeHggcHdtIHBlcmlwaGVyYWwgaGFuZGxpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlcDkzeHhfcHdtMF9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0CT0gRVA5M1hYX1BXTV9QSFlTX0JBU0UsCisJCS5lbmQJPSBFUDkzWFhfUFdNX1BIWVNfQkFTRSArIDB4MTAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXA5M3h4X3B3bTBfZGV2aWNlID0geworCS5uYW1lCQk9ICJlcDkzeHgtcHdtIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXA5M3h4X3B3bTBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGVwOTN4eF9wd20wX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlcDkzeHhfcHdtMV9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0CT0gRVA5M1hYX1BXTV9QSFlTX0JBU0UgKyAweDIwLAorCQkuZW5kCT0gRVA5M1hYX1BXTV9QSFlTX0JBU0UgKyAweDMwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9wd20xX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZXA5M3h4LXB3bSIsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGVwOTN4eF9wd20xX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBlcDkzeHhfcHdtMV9yZXNvdXJjZSwKK307CisKK3ZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9wd20oaW50IHB3bTAsIGludCBwd20xKQoreworCWlmIChwd20wKQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9wd20wX2RldmljZSk7CisKKwkvKiBOT1RFOiBFUDkzMDcgZG9lcyBub3QgaGF2ZSBQV01PVVQxIChwaW4gRUdQSU8xNCkgKi8KKwlpZiAocHdtMSkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfcHdtMV9kZXZpY2UpOworfQorCitpbnQgZXA5M3h4X3B3bV9hY3F1aXJlX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgZXJyOworCisJaWYgKHBkZXYtPmlkID09IDApIHsKKwkJZXJyID0gMDsKKwl9IGVsc2UgaWYgKHBkZXYtPmlkID09IDEpIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KEVQOTNYWF9HUElPX0xJTkVfRUdQSU8xNCwKKwkJCQkgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRVA5M1hYX0dQSU9fTElORV9FR1BJTzE0LCAwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDsKKworCQkvKiBQV00gMSBvdXRwdXQgb24gRUdQSU9bMTRdICovCisJCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfUE9ORyk7CisJfSBlbHNlIHsKKwkJZXJyID0gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gZXJyOworCitmYWlsOgorCWdwaW9fZnJlZShFUDkzWFhfR1BJT19MSU5FX0VHUElPMTQpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9wd21fYWNxdWlyZV9ncGlvKTsKKwordm9pZCBlcDkzeHhfcHdtX3JlbGVhc2VfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChwZGV2LT5pZCA9PSAxKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KEVQOTNYWF9HUElPX0xJTkVfRUdQSU8xNCk7CisJCWdwaW9fZnJlZShFUDkzWFhfR1BJT19MSU5FX0VHUElPMTQpOworCisJCS8qIEVHUElPWzE0XSB1c2VkIGZvciBHUElPICovCisJCWVwOTN4eF9kZXZjZmdfY2xlYXJfYml0cyhFUDkzWFhfU1lTQ09OX0RFVkNGR19QT05HKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGVwOTN4eF9wd21fcmVsZWFzZV9ncGlvKTsKKworCiBleHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbml0KHZvaWQpOwogCiB2b2lkIF9faW5pdCBlcDkzeHhfaW5pdF9kZXZpY2VzKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHY7Ci0KLQkvKgotCSAqIERpc2FsbG93IGFjY2VzcyB0byBNYXZlcmlja0NydW5jaCBpbml0aWFsbHkuCi0JICovCi0JdiA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7Ci0JdiAmPSB+RVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHX0NSVU5DSF9FTkFCTEU7Ci0JX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKLQlfX3Jhd193cml0ZWwodiwgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKKwkvKiBEaXNhbGxvdyBhY2Nlc3MgdG8gTWF2ZXJpY2tDcnVuY2ggaW5pdGlhbGx5ICovCisJZXA5M3h4X2RldmNmZ19jbGVhcl9iaXRzKEVQOTNYWF9TWVNDT05fREVWQ0ZHX0NQRU5BKTsKIAogCWVwOTN4eF9ncGlvX2luaXQoKTsKIApAQCAtNTY4LDQgKzY5Nyw1IEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9ydGNfZGV2aWNlKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9vaGNpX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfbGVkcyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKaW5kZXggZTllNDViOS4uNzMxNDVhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwpAQCAtMjYsMTggKzI2LDE2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKKwogc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZWRiOTN4eF9mbGFzaF9kYXRhOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkYjkzeHhfZmxhc2hfcmVzb3VyY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9nZXNiYzkzMTIuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCmluZGV4IDNiYWQ1MDAuLjNkYTdjYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dlc2JjOTMxMi5jCkBAIC0xMiwxOCArMTIsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIAorCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBnZXNiYzkzMTJfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGgJCT0gNCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKaW5kZXggNDgyY2YzZC4uMWVhODg3MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwpAQCAtMTcsMTUgKzE3LDE2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvZXA5M3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgewogCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKIAotCXVuc2lnbmVkIGludAkJZGF0YV9yZWc7Ci0JdW5zaWduZWQgaW50CQlkYXRhX2Rpcl9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9yZWc7CisJdm9pZCBfX2lvbWVtCQkqZGF0YV9kaXJfcmVnOwogfTsKIAogI2RlZmluZSB0b19lcDkzeHhfZ3Bpb19jaGlwKGMpIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCwgY2hpcCkKQEAgLTExMSwxNSArMTEyLDYxIEBACiB7CiAJc3RydWN0IGVwOTN4eF9ncGlvX2NoaXAgKmVwOTN4eF9jaGlwID0gdG9fZXA5M3h4X2dwaW9fY2hpcChjaGlwKTsKIAl1OCBkYXRhX3JlZywgZGF0YV9kaXJfcmVnOwotCWludCBpOworCWludCBncGlvLCBpOwogCiAJZGF0YV9yZWcgPSBfX3Jhd19yZWFkYihlcDkzeHhfY2hpcC0+ZGF0YV9yZWcpOwogCWRhdGFfZGlyX3JlZyA9IF9fcmF3X3JlYWRiKGVwOTN4eF9jaGlwLT5kYXRhX2Rpcl9yZWcpOwogCi0JZm9yIChpID0gMDsgaSA8IGNoaXAtPm5ncGlvOyBpKyspCi0JCXNlcV9wcmludGYocywgIkdQSU8gJXMlZDogJXMgJXNcbiIsIGNoaXAtPmxhYmVsLCBpLAotCQkJICAgKGRhdGFfcmVnICYgKDEgPDwgaSkpID8gInNldCIgOiAiY2xlYXIiLAotCQkJICAgKGRhdGFfZGlyX3JlZyAmICgxIDw8IGkpKSA/ICJvdXQiIDogImluIik7CisJZ3BpbyA9IGVwOTN4eF9jaGlwLT5jaGlwLmJhc2U7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5ncGlvOyBpKyssIGdwaW8rKykgeworCQlpbnQgaXNfb3V0ID0gZGF0YV9kaXJfcmVnICYgKDEgPDwgaSk7CisKKwkJc2VxX3ByaW50ZihzLCAiICVzJWQgZ3Bpby0lLTNkICglLTEycykgJXMgJXMiLAorCQkJCWNoaXAtPmxhYmVsLCBpLCBncGlvLAorCQkJCWdwaW9jaGlwX2lzX3JlcXVlc3RlZChjaGlwLCBpKSA/IDogIiIsCisJCQkJaXNfb3V0ID8gIm91dCIgOiAiaW4gIiwKKwkJCQkoZGF0YV9yZWcgJiAoMSA8PCBpKSkgPyAiaGkiIDogImxvIik7CisKKwkJaWYgKCFpc19vdXQpIHsKKwkJCWludCBpcnEgPSBncGlvX3RvX2lycShncGlvKTsKKwkJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOworCisJCQlpZiAoaXJxID49IDAgJiYgZGVzYy0+YWN0aW9uKSB7CisJCQkJY2hhciAqdHJpZ2dlcjsKKworCQkJCXN3aXRjaCAoZGVzYy0+c3RhdHVzICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgeworCQkJCWNhc2UgSVJRX1RZUEVfTk9ORToKKwkJCQkJdHJpZ2dlciA9ICIoZGVmYXVsdCkiOworCQkJCQlicmVhazsKKwkJCQljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJCQkJdHJpZ2dlciA9ICJlZGdlLWZhbGxpbmciOworCQkJCQlicmVhazsKKwkJCQljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCQkJCQl0cmlnZ2VyID0gImVkZ2UtcmlzaW5nIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCQkJCXRyaWdnZXIgPSAiZWRnZS1ib3RoIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQkJCQl0cmlnZ2VyID0gImxldmVsLWhpZ2giOworCQkJCQlicmVhazsKKwkJCQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJCQkJdHJpZ2dlciA9ICJsZXZlbC1sb3ciOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQl0cmlnZ2VyID0gIj90cmlnZ2VyPyI7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXNlcV9wcmludGYocywgIiBpcnEtJWQgJXMlcyIsCisJCQkJCQlpcnEsIHRyaWdnZXIsCisJCQkJCQkoZGVzYy0+c3RhdHVzICYgSVJRX1dBS0VVUCkKKwkJCQkJCQk/ICIgd2FrZXVwIiA6ICIiKTsKKwkJCX0KKwkJfQorCisJCXNlcV9wcmludGYocywgIlxuIik7CisJfQogfQogCiAjZGVmaW5lIEVQOTNYWF9HUElPX0JBTksobmFtZSwgZHIsIGRkciwgYmFzZV9ncGlvKQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmgKaW5kZXggOTY3YzA3OS4uZWE3OGU5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmgKQEAgLTUyLDQwICs1Miw0MyBAQAogI2RlZmluZSBFUDkzWFhfQUhCX1ZJUlRfQkFTRQkJMHhmZWYwMDAwMAogI2RlZmluZSBFUDkzWFhfQUhCX1NJWkUJCQkweDAwMTAwMDAwCiAKKyNkZWZpbmUgRVA5M1hYX0FIQl9JT01FTSh4KQkJSU9NRU0oRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAoeCkpCisKICNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTX0JBU0UJCTB4ODA4MDAwMDAKICNkZWZpbmUgRVA5M1hYX0FQQl9WSVJUX0JBU0UJCTB4ZmVkMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FQQl9TSVpFCQkJMHgwMDIwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BUEJfSU9NRU0oeCkJCUlPTUVNKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgKHgpKQorCiAKIC8qIEFIQiBwZXJpcGhlcmFscyAqLwotI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQkoKHZvaWQgX19pb21lbSAqKQkJXAotCQkJCQkgKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAwMDAwMCkpCisjZGVmaW5lIEVQOTNYWF9ETUFfQkFTRQkJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAwMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAxMDAwMCkKICNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9VU0JfQkFTRQkJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwMjAwMDApCiAjZGVmaW5lIEVQOTNYWF9VU0JfUEhZU19CQVNFCQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDIwMDAwKQorI2RlZmluZSBFUDkzWFhfVVNCX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMjAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1JBU1RFUl9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDMwMDAwKQorI2RlZmluZSBFUDkzWFhfUkFTVEVSX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAzMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDQwMDAwKQorI2RlZmluZSBFUDkzWFhfR1JBUEhJQ1NfQUNDRUxfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwNDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1NEUkFNX0NPTlRST0xMRVJfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDYwMDAwKQorI2RlZmluZSBFUDkzWFhfU0RSQU1fQ09OVFJPTExFUl9CQVNFCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDA2MDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUENNQ0lBX0NPTlRST0xMRVJfQkFTRQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDgwMDAwKQorI2RlZmluZSBFUDkzWFhfUENNQ0lBX0NPTlRST0xMRVJfQkFTRQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwODAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0JPT1RfUk9NX0JBU0UJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwOTAwMDApCisjZGVmaW5lIEVQOTNYWF9CT09UX1JPTV9CQVNFCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwOTAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0lERV9CQVNFCQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDBhMDAwMCkKKyNkZWZpbmUgRVA5M1hYX0lERV9CQVNFCQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMGEwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9WSUMxX0JBU0UJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwYjAwMDApCisjZGVmaW5lIEVQOTNYWF9WSUMxX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDBiMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVklDMl9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMGMwMDAwKQorI2RlZmluZSBFUDkzWFhfVklDMl9CQVNFCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwYzAwMDApCiAKIAogLyogQVBCIHBlcmlwaGVyYWxzICovCi0jZGVmaW5lIEVQOTNYWF9USU1FUl9CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfVElNRVJfQkFTRQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDEwMDAwKQogI2RlZmluZSBFUDkzWFhfVElNRVJfUkVHKHgpCQkoRVA5M1hYX1RJTUVSX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9USU1FUjFfTE9BRAkJRVA5M1hYX1RJTUVSX1JFRygweDAwKQogI2RlZmluZSBFUDkzWFhfVElNRVIxX1ZBTFVFCQlFUDkzWFhfVElNRVJfUkVHKDB4MDQpCkBAIC0xMDIsMTEgKzEwNSwxMSBAQAogI2RlZmluZSBFUDkzWFhfVElNRVIzX0NPTlRST0wJCUVQOTNYWF9USU1FUl9SRUcoMHg4OCkKICNkZWZpbmUgRVA5M1hYX1RJTUVSM19DTEVBUgkJRVA5M1hYX1RJTUVSX1JFRygweDhjKQogCi0jZGVmaW5lIEVQOTNYWF9JMlNfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwMjAwMDApCisjZGVmaW5lIEVQOTNYWF9JMlNfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAyMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfU0VDVVJJVFlfQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDAzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NFQ1VSSVRZX0JBU0UJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDAzMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfR1BJT19CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMDQwMDAwKQorI2RlZmluZSBFUDkzWFhfR1BJT19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwNDAwMDApCiAjZGVmaW5lIEVQOTNYWF9HUElPX1JFRyh4KQkJKEVQOTNYWF9HUElPX0JBU0UgKyAoeCkpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHg0YykKICNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweDUwKQpAQCAtMTI0LDMyICsxMjcsMzMgQEAKICNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweGI4KQogI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YmMpCiAKLSNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDA4MDAwMCkKKyNkZWZpbmUgRVA5M1hYX0FBQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMDgwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9TUElfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwYTAwMDApCisjZGVmaW5lIEVQOTNYWF9TUElfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDBhMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfSVJEQV9CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMGIwMDAwKQorI2RlZmluZSBFUDkzWFhfSVJEQV9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwYjAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQxX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwYzAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUMV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwYzAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUMV9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwYzAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQyX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwZDAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUMl9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwZDAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUMl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQzX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAwZTAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUM19QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAwZTAwMDApCisjZGVmaW5lIEVQOTNYWF9VQVJUM19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZTAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX0tFWV9NQVRSSVhfQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDBmMDAwMCkKKyNkZWZpbmUgRVA5M1hYX0tFWV9NQVRSSVhfQkFTRQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMGYwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9BRENfQkFTRQkJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAxMDAwMDApCi0jZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTAwMDAwKQorI2RlZmluZSBFUDkzWFhfQURDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCisjZGVmaW5lIEVQOTNYWF9UT1VDSFNDUkVFTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1BXTV9CQVNFCQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDExMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1BXTV9QSFlTX0JBU0UJCShFUDkzWFhfQVBCX1BIWVNfQkFTRSArIDB4MDAxMTAwMDApCisjZGVmaW5lIEVQOTNYWF9QV01fQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDExMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUlRDX0JBU0UJCQkoRVA5M1hYX0FQQl9WSVJUX0JBU0UgKyAweDAwMTIwMDAwKQogI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJKEVQOTNYWF9BUEJfUEhZU19CQVNFICsgMHgwMDEyMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JUQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTIwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fQkFTRQkJKEVQOTNYWF9BUEJfVklSVF9CQVNFICsgMHgwMDEzMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMzAwMDApCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fUkVHKHgpCQkoRVA5M1hYX1NZU0NPTl9CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX1BPV0VSX1NUQVRFCUVQOTNYWF9TWVNDT05fUkVHKDB4MDApCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fUFdSQ05UCQlFUDkzWFhfU1lTQ09OX1JFRygweDA0KQpAQCAtMTcyLDE0ICsxNzYsNDUgQEAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TVEFOREJZCQlFUDkzWFhfU1lTQ09OX1JFRygweDBjKQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDEJRVA5M1hYX1NZU0NPTl9SRUcoMHgyMCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQyCUVQOTNYWF9TWVNDT05fUkVHKDB4MjQpCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRwlFUDkzWFhfU1lTQ09OX1JFRygweDgwKQotI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfVTNFTgkJKDE8PDI0KQotI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVklDRV9DT05GSUdfQ1JVTkNIX0VOQUJMRQkoMTw8MjMpCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19VMkVOCQkoMTw8MjApCi0jZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJR19VMUVOCQkoMTw8MTgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHCQlFUDkzWFhfU1lTQ09OX1JFRygweDgwKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19TV1JTVAkoMTw8MzEpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0QxT05HCSgxPDwzMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfRDBPTkcJKDE8PDI5KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19JT05VMgkoMTw8MjgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTksJKDE8PDI3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19UT05HCSgxPDwyNikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfTU9ORwkoMTw8MjUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UzRU4JKDE8PDI0KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19DUEVOQQkoMTw8MjMpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0EyT05HCSgxPDwyMikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfQTFPTkcJKDE8PDIxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VMkVOCSgxPDwyMCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfRVhWQwkoMTw8MTkpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UxRU4JKDE8PDE4KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19USU4JKDE8PDE3KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IQzNJTgkoMTw8MTUpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0hDM0VOCSgxPDwxNCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfSEMxSU4JKDE8PDEzKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IQzFFTgkoMTw8MTIpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0hPTklERQkoMTw8MTEpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTklERQkoMTw8MTApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX1BPTkcJKDE8PDkpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0VPTklERQkoMTw8OCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfSTJTT05TU1AJKDE8PDcpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0kyU09OQUM5NwkoMTw8NikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfUkFTT05QMwkoMTw8NCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfUkFTCSgxPDwzKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0RFVkNGR19BRENQRAkoMTw8MikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfS0VZUwkoMTw8MSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9ERVZDRkdfU0hFTkEJKDE8PDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWCUVQOTNYWF9TWVNDT05fUkVHKDB4OTApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX1RTRU4JKDE8PDMxKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9BRElWCSgxPDwxNikKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfS0VOCSgxPDwxNSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfS0RJVgkoMTw8MCkKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TV0xPQ0sJCUVQOTNYWF9TWVNDT05fUkVHKDB4YzApCiAKLSNkZWZpbmUgRVA5M1hYX1dBVENIRE9HX0JBU0UJCShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArIDB4MDAxNDAwMDApCisjZGVmaW5lIEVQOTNYWF9XQVRDSERPR19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxNDAwMDApCiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDI4NjYyOTcuLjM0OWZhN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC00LDEyICs0LDIzIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgImVwOTN4eC1yZWdzLmgiCisjaW5jbHVkZSA8bWFjaC9lcDkzeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KIAogI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAogCi0jaW5jbHVkZSAicGxhdGZvcm0uaCIKKy8qCisgKiBUaGUgRVA5M3h4IGhhcyB0d28gZXh0ZXJuYWwgY3J5c3RhbCBvc2NpbGxhdG9ycy4gIFRvIGdlbmVyYXRlIHRoZQorICogcmVxdWlyZWQgaGlnaC1mcmVxdWVuY3kgY2xvY2tzLCB0aGUgcHJvY2Vzc29yIHVzZXMgdHdvIHBoYXNlLWxvY2tlZC0KKyAqIGxvb3BzIChQTExzKSB0byBtdWx0aXBseSB0aGUgaW5jb21pbmcgZXh0ZXJuYWwgY2xvY2sgc2lnbmFsIHRvIG11Y2gKKyAqIGhpZ2hlciBmcmVxdWVuY2llcyB0aGF0IGFyZSB0aGVuIGRpdmlkZWQgZG93biBieSBwcm9ncmFtbWFibGUgZGl2aWRlcnMKKyAqIHRvIHByb2R1Y2UgdGhlIG5lZWRlZCBjbG9ja3MuICBUaGUgUExMcyBvcGVyYXRlIGluZGVwZW5kZW50bHkgb2Ygb25lCisgKiBhbm90aGVyLgorICovCisjZGVmaW5lIEVQOTNYWF9FWFRfQ0xLX1JBVEUJMTQ3NDU2MDAKKyNkZWZpbmUgRVA5M1hYX0VYVF9SVENfUkFURQkzMjc2OAogCi0jaW5jbHVkZSAidHM3Mnh4LmgiCisjZGVmaW5lIEVQOTNYWF9LRVlUQ0hDTEtfRElWNAkoRVA5M1hYX0VYVF9DTEtfUkFURSAvIDQpCisjZGVmaW5lIEVQOTNYWF9LRVlUQ0hDTEtfRElWMTYJKEVQOTNYWF9FWFRfQ0xLX1JBVEUgLyAxNikKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGZkNWYwODEuLmNlYmNjMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9pby5oCkBAIC0xLDggKzEsMjEgQEAKIC8qCiAgKiBhcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvaW8uaAogICovCisjaWZuZGVmIF9fQVNNX01BQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9NQUNIX0lPX0gKIAogI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhmZmZmZmZmZgogCi0jZGVmaW5lIF9faW8ocCkJCV9fdHlwZXNhZmVfaW8ocCkKLSNkZWZpbmUgX19tZW1fcGNpKHApCShwKQorI2RlZmluZSBfX2lvKHApCQkJX190eXBlc2FmZV9pbyhwKQorI2RlZmluZSBfX21lbV9wY2kocCkJCShwKQorCisvKgorICogQSB0eXBlc2FmZSBfX2lvKCkgdmFyaWF0aW9uIGZvciB2YXJpYWJsZSBpbml0aWFsaXNlcnMKKyAqLworI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNkZWZpbmUgSU9NRU0ocCkJCXAKKyNlbHNlCisjZGVmaW5lIElPTUVNKHApCQkoKHZvaWQgX19pb21lbSBfX2ZvcmNlICopKHApKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggMDVmMGY0Zi4uNWY1ZmE2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTUsNiArNSw3IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm87CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogCiBzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhCiB7CkBAIC0xNSw4ICsxNiwyNyBAQAogdm9pZCBlcDkzeHhfbWFwX2lvKHZvaWQpOwogdm9pZCBlcDkzeHhfaW5pdF9pcnEodm9pZCk7CiB2b2lkIGVwOTN4eF9pbml0X3RpbWUodW5zaWduZWQgbG9uZyk7CisKKy8qIEVQOTN4eCBTeXN0ZW0gQ29udHJvbGxlciBzb2Z0d2FyZSBsb2NrZWQgcmVnaXN0ZXIgd3JpdGUgKi8KK3ZvaWQgZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh1bnNpZ25lZCBpbnQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZyk7Cit2b2lkIGVwOTN4eF9kZXZjZmdfc2V0X2NsZWFyKHVuc2lnbmVkIGludCBzZXRfYml0cywgdW5zaWduZWQgaW50IGNsZWFyX2JpdHMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X2RldmNmZ19zZXRfYml0cyh1bnNpZ25lZCBpbnQgYml0cykKK3sKKwllcDkzeHhfZGV2Y2ZnX3NldF9jbGVhcihiaXRzLCAweDAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVwOTN4eF9kZXZjZmdfY2xlYXJfYml0cyh1bnNpZ25lZCBpbnQgYml0cykKK3sKKwllcDkzeHhfZGV2Y2ZnX3NldF9jbGVhcigweDAwLCBiaXRzKTsKK30KKwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfZXRoKHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgKmRhdGEsIGludCBjb3B5X2FkZHIpOwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSk7Cit2b2lkIGVwOTN4eF9yZWdpc3Rlcl9wd20oaW50IHB3bTAsIGludCBwd20xKTsKK2ludCBlcDkzeHhfcHdtX2FjcXVpcmVfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3ZvaWQgZXA5M3h4X3B3bV9yZWxlYXNlX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKIHZvaWQgZXA5M3h4X2luaXRfZGV2aWNlcyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGVwOTN4eF90aW1lcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGVkOGYzNWUuLjZkNjYxZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTExLDE1ICsxMSwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQl1MzIgZGV2aWNlY2ZnOwotCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCWRldmljZWNmZyA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fREVWSUNFX0NPTkZJRyk7Ci0JX19yYXdfd3JpdGVsKDB4YWEsIEVQOTNYWF9TWVNDT05fU1dMT0NLKTsKLQlfX3Jhd193cml0ZWwoZGV2aWNlY2ZnIHwgMHg4MDAwMDAwMCwgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKLQlfX3Jhd193cml0ZWwoMHhhYSwgRVA5M1hYX1NZU0NPTl9TV0xPQ0spOwotCV9fcmF3X3dyaXRlbChkZXZpY2VjZmcgJiB+MHg4MDAwMDAwMCwgRVA5M1hYX1NZU0NPTl9ERVZJQ0VfQ09ORklHKTsKKwkvKgorCSAqIFNldCB0aGVuIGNsZWFyIHRoZSBTV1JTVCBiaXQgdG8gaW5pdGlhdGUgYSBzb2Z0d2FyZSByZXNldAorCSAqLworCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfU1dSU1QpOworCWVwOTN4eF9kZXZjZmdfY2xlYXJfYml0cyhFUDkzWFhfU1lTQ09OX0RFVkNGR19TV1JTVCk7CiAKIAl3aGlsZSAoMSkKIAkJOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3RzNzJ4eC5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3RzNzJ4eC5oCmluZGV4IDQxMTczNDQuLjNiZDkzNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC90czcyeHguaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdHM3Mnh4LmgKQEAgLTY3LDcgKzY3LDYgQEAKIAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJvYXJkX2lzX3RzNzIwMCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwppbmRleCAxNWQ2ODE1Li4wYTMxM2U4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9taWNybzkuYwpAQCAtOSwyMSArOSwxNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKwogCiBzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSBtaWNybzlfZXRoX2RhdGEgPSB7CiAJLnBoeV9pZAkJPSAweDFmLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvdHM3Mnh4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYwppbmRleCBhYWYxMzcxLi4yNTlmNzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYworKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYwpAQCAtMTIsMTkgKzEyLDE4IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbTQ4dDg2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tNDh0ODYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvdHM3Mnh4Lmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB0czcyeHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDEyNTEzMTkuLmQ3OTU2NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTM2LDggKzM2LDEyIEBACiAjZGVmaW5lIFBDSU9fQkFTRQkJUENJX0lPX1ZBRERSCiAjZGVmaW5lIFBDSU1FTV9CQVNFCQlQQ0lfTUVNT1JZX1ZBRERSCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAvKiBtYWNybyB0byBnZXQgYXQgSU8gc3BhY2Ugd2hlbiBydW5uaW5nIHZpcnR1YWxseSAqLwogI2RlZmluZSBJT19BRERSRVNTKHgpICgoKHgpID4+IDQpICsgSU9fQkFTRSkgCisjZWxzZQorI2RlZmluZSBJT19BRERSRVNTKHgpICh4KQorI2VuZGlmCiAKICNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggNGFjMDQwNTUuLjJhMzE4ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYwpAQCAtNDksMTQgKzQ5LDE0IEBACiAKICNkZWZpbmUgSU5UQ1BfUEFfQ0xDRF9CQVNFCQkweGMwMDAwMDAwCiAKLSNkZWZpbmUgSU5UQ1BfVkFfQ0lDX0JBU0UJCTB4ZjEwMDAwNDAKLSNkZWZpbmUgSU5UQ1BfVkFfUElDX0JBU0UJCTB4ZjE0MDAwMDAKLSNkZWZpbmUgSU5UQ1BfVkFfU0lDX0JBU0UJCTB4ZmNhMDAwMDAKKyNkZWZpbmUgSU5UQ1BfVkFfQ0lDX0JBU0UJCUlPX0FERFJFU1MoSU5URUdSQVRPUl9IRFJfQkFTRSkgKyAweDQwCisjZGVmaW5lIElOVENQX1ZBX1BJQ19CQVNFCQlJT19BRERSRVNTKElOVEVHUkFUT1JfSUNfQkFTRSkKKyNkZWZpbmUgSU5UQ1BfVkFfU0lDX0JBU0UJCUlPX0FERFJFU1MoMHhjYTAwMDAwMCkKIAogI2RlZmluZSBJTlRDUF9QQV9FVEhfQkFTRQkJMHhjODAwMDAwMAogI2RlZmluZSBJTlRDUF9FVEhfU0laRQkJCTB4MTAKIAotI2RlZmluZSBJTlRDUF9WQV9DVFJMX0JBU0UJCTB4ZmNiMDAwMDAKKyNkZWZpbmUgSU5UQ1BfVkFfQ1RSTF9CQVNFCQlJT19BRERSRVNTKDB4Y2IwMDAwMDApCiAjZGVmaW5lIElOVENQX0ZMQVNIUFJPRwkJCTB4MDQKICNkZWZpbmUgQ0lOVEVHUkFUT1JfRkxBU0hQUk9HX0ZMVlBQRU4JKDEgPDwgMCkKICNkZWZpbmUgQ0lOVEVHUkFUT1JfRkxBU0hQUk9HX0ZMV1JFTgkoMSA8PCAxKQpAQCAtMTIxLDEyICsxMjEsMTIgQEAKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewotCQkudmlydHVhbAk9IDB4ZmNhMDAwMDAsCisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUygweGNhMDAwMDAwKSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4Y2EwMDAwMDApLAogCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gMHhmY2IwMDAwMCwKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKDB4Y2IwMDAwMDApLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oMHhjYjAwMDAwMCksCiAJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQpAQCAtMzk0LDggKzM5NCw4IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbW1jX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgaW50IHN0YXR1cyA9IHJlYWRsKDB4ZmNhMDAwMDQpOwotCXdyaXRlbCg4LCAweGZjYjAwMDA4KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gcmVhZGwoSU9fQUREUkVTUygweGNhMDAwMDAwKSArIDQpOworCXdyaXRlbCg4LCBJT19BRERSRVNTKDB4Y2IwMDAwMDApICsgOCk7CiAKIAlyZXR1cm4gc3RhdHVzICYgODsKIH0KQEAgLTQwMyw2ICs0MDMsOCBAQAogc3RhdGljIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAorCS5ncGlvX3dwCT0gLTEsCisJLmdwaW9fY2QJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbW1jX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKaW5kZXggMWU5M2RmZS4uNTA4M2YwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLmMKQEAgLTQxNiw2ICs0MTYsNyBAQAogfTsKIAogdW5zaWduZWQgbG9uZyBpeHA0eHhfdGltZXJfZnJlcSA9IEZSRVE7CitFWFBPUlRfU1lNQk9MKGl4cDR4eF90aW1lcl9mcmVxKTsKIHN0YXRpYyBpbnQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CiAJY2xvY2tzb3VyY2VfaXhwNHh4Lm11bHQgPQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCmluZGV4IDI1MTAwZjcuLjBhY2E0NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKQEAgLTM4LDYgKzM4LDEyIEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIFFOQVAgVFMtMTE5IGFuZCBUUy0yMTkgVHVyYm8gTkFTIGRldmljZXMuCiAKK2NvbmZpZyBNQUNIX09QRU5SRF9CQVNFCisJYm9vbCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIE1hcnZlbGwgT3BlblJEIEJhc2UgQm9hcmQuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCmluZGV4IDlkZDY4MGUuLjgwYWIwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQpAQCAtNiw1ICs2LDYgQEAKIG9iai0kKENPTkZJR19NQUNIX01WODhGNjI4MUdUV19HRSkJKz0gbXY4OGY2MjgxZ3R3X2dlLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1NIRUVWQVBMVUcpCQkrPSBzaGVldmFwbHVnLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1RTMjE5KQkJKz0gdHMyMTktc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfT1BFTlJEX0JBU0UpCQkrPSBvcGVucmRfYmFzZS1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19DUFVfSURMRSkJCQkrPSBjcHVpZGxlLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDBmNjkxOTguLjBhY2I2MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtODM4LDcgKzgzOCw4IEBACiAJdTMyIGRldiwgcmV2OwogCiAJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKLQlpZiAoZGV2ID09IE1WODhGNjI4MV9ERVZfSUQgJiYgcmV2ID09IE1WODhGNjI4MV9SRVZfQTApCisJaWYgKGRldiA9PSBNVjg4RjYyODFfREVWX0lEICYmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMCB8fAorCQkJCQlyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMSkpCiAJCXJldHVybiAyMDAwMDAwMDA7CiAKIAlyZXR1cm4gMTY2NjY2NjY3OwpAQCAtODcyLDYgKzg3Myw4IEBACiAJCQlyZXR1cm4gIk1WODhGNjI4MS1aMCI7CiAJCWVsc2UgaWYgKHJldiA9PSBNVjg4RjYyODFfUkVWX0EwKQogCQkJcmV0dXJuICJNVjg4RjYyODEtQTAiOworCQllbHNlIGlmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMSkKKwkJCXJldHVybiAiTVY4OEY2MjgxLUExIjsKIAkJZWxzZQogCQkJcmV0dXJuICJNVjg4RjYyODEtUmV2LVVuc3VwcG9ydGVkIjsKIAl9IGVsc2UgaWYgKGRldiA9PSBNVjg4RjYxOTJfREVWX0lEKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaAppbmRleCAwN2FmODU4Li41NGMxMzI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKQEAgLTEwMSw2ICsxMDEsNyBAQAogI2RlZmluZSBNVjg4RjYyODFfREVWX0lECTB4NjI4MQogI2RlZmluZSBNVjg4RjYyODFfUkVWX1owCTAKICNkZWZpbmUgTVY4OEY2MjgxX1JFVl9BMAkyCisjZGVmaW5lIE1WODhGNjI4MV9SRVZfQTEJMwogCiAjZGVmaW5lIE1WODhGNjE5Ml9ERVZfSUQJMHg2MTkyCiAjZGVmaW5lIE1WODhGNjE5Ml9SRVZfWjAJMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2RmYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYworICoKKyAqIE1hcnZlbGwgT3BlblJEIEJhc2UgQm9hcmQgU2V0dXAKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9wZW5yZF9iYXNlX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lID0gInUtYm9vdCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSA9IFNaXzFNCisJfSwgeworCQkubmFtZSA9ICJ1SW1hZ2UiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZSA9IFNaXzRNCisJfSwgeworCQkubmFtZSA9ICJyb290IiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBvcGVucmRfYmFzZV9nZTAwX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCit9OworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBvcGVucmRfYmFzZV9zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSBvcGVucmRfYmFzZV9tdnNkaW9fZGF0YSA9IHsKKwkuZ3Bpb19jYXJkX2RldGVjdCA9IDI5LAkvKiBNUFAyOSB1c2VkIGFzIFNEIGNhcmQgZGV0ZWN0ICovCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG9wZW5yZF9iYXNlX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDI5X0dQSU8sCisJMAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9wZW5yZF9iYXNlX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIEJhc2ljIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJa2lya3dvb2RfaW5pdCgpOworCWtpcmt3b29kX21wcF9jb25mKG9wZW5yZF9iYXNlX21wcF9jb25maWcpOworCisJa2lya3dvb2RfdWFydDBfaW5pdCgpOworCWtpcmt3b29kX25hbmRfaW5pdChBUlJBWV9BTkRfU0laRShvcGVucmRfYmFzZV9uYW5kX3BhcnRzKSwgMjUpOworCisJa2lya3dvb2RfZWhjaV9pbml0KCk7CisKKwlraXJrd29vZF9nZTAwX2luaXQoJm9wZW5yZF9iYXNlX2dlMDBfZGF0YSk7CisJa2lya3dvb2Rfc2F0YV9pbml0KCZvcGVucmRfYmFzZV9zYXRhX2RhdGEpOworCWtpcmt3b29kX3NkaW9faW5pdCgmb3BlbnJkX2Jhc2VfbXZzZGlvX2RhdGEpOworfQorCitNQUNISU5FX1NUQVJUKE9QRU5SRF9CQVNFLCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLworCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IG9wZW5yZF9iYXNlX2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwppbmRleCAwZDBmMzA2Li5kMWI1ODg1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKQEAgLTE4LDExICsxOCwxNCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgpAQCAtOTQsNyArOTcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBjbGsxNm0gPSB7Ci0JLm5hbWUgPSAiQ0xLMTZNIiwKIAkuZ2V0X3JhdGUgPSBjbGsxNm1fZ2V0X3JhdGUsCiAJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAogCS5lbmFibGVfcmVnID0gQ0NNX0NTQ1IsCkBAIC0xMTEsNyArMTEzLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjbGsgY2xrMzIgPSB7Ci0JLm5hbWUgPSAiQ0xLMzIiLAogCS5nZXRfcmF0ZSA9IGNsazMyX2dldF9yYXRlLAogfTsKIApAQCAtMTIxLDcgKzEyMiw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsazMyX3ByZW11bHQgPSB7Ci0JLm5hbWUgPSAiQ0xLMzJfcHJlbXVsdGlwbGllciIsCiAJLnBhcmVudCA9ICZjbGszMiwKIAkuZ2V0X3JhdGUgPSBjbGszMl9wcmVtdWx0X2dldF9yYXRlLAogfTsKQEAgLTE1Niw3ICsxNTYsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBwcmVtX2NsayA9IHsKLQkubmFtZSA9ICJwcmVtX2NsayIsCiAJLnNldF9wYXJlbnQgPSBwcmVtX2Nsa19zZXRfcGFyZW50LAogfTsKIApAQCAtMTY3LDcgKzE2Niw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c3RlbV9jbGsgPSB7Ci0JLm5hbWUgPSAic3lzdGVtX2NsayIsCiAJLnBhcmVudCA9ICZwcmVtX2NsaywKIAkuZ2V0X3JhdGUgPSBzeXN0ZW1fY2xrX2dldF9yYXRlLAogfTsKQEAgLTE3OSw3ICsxNzcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBtY3VfY2xrID0gewotCS5uYW1lID0gIm1jdV9jbGsiLAogCS5wYXJlbnQgPSAmY2xrMzJfcHJlbXVsdCwKIAkuZ2V0X3JhdGUgPSBtY3VfY2xrX2dldF9yYXRlLAogfTsKQEAgLTE5NSw3ICsxOTIsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBmY2xrID0gewotCS5uYW1lID0gImZjbGsiLAogCS5wYXJlbnQgPSAmbWN1X2NsaywKIAkuZ2V0X3JhdGUgPSBmY2xrX2dldF9yYXRlLAogfTsKQEAgLTIzOCw3ICsyMzQsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBoY2xrID0gewotCS5uYW1lID0gImhjbGsiLAogCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKIAkuZ2V0X3JhdGUgPSBoY2xrX2dldF9yYXRlLAogCS5yb3VuZF9yYXRlID0gaGNsa19yb3VuZF9yYXRlLApAQCAtMjgwLDcgKzI3NSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsazQ4bSA9IHsKLQkubmFtZSA9ICJDTEs0OE0iLAogCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKIAkuZ2V0X3JhdGUgPSBjbGs0OG1fZ2V0X3JhdGUsCiAJLnJvdW5kX3JhdGUgPSBjbGs0OG1fcm91bmRfcmF0ZSwKQEAgLTQwMCwyMSArMzk0LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcmNsa1tdID0gewogCXsKLQkJLm5hbWUgPSAicGVyY2xrIiwKIAkJLmlkID0gMCwKIAkJLnBhcmVudCA9ICZzeXN0ZW1fY2xrLAogCQkuZ2V0X3JhdGUgPSBwZXJjbGsxX2dldF9yYXRlLAogCQkucm91bmRfcmF0ZSA9IHBlcmNsazFfcm91bmRfcmF0ZSwKIAkJLnNldF9yYXRlID0gcGVyY2xrMV9zZXRfcmF0ZSwKIAl9LCB7Ci0JCS5uYW1lID0gInBlcmNsayIsCiAJCS5pZCA9IDEsCiAJCS5wYXJlbnQgPSAmc3lzdGVtX2NsaywKIAkJLmdldF9yYXRlID0gcGVyY2xrMl9nZXRfcmF0ZSwKIAkJLnJvdW5kX3JhdGUgPSBwZXJjbGsyX3JvdW5kX3JhdGUsCiAJCS5zZXRfcmF0ZSA9IHBlcmNsazJfc2V0X3JhdGUsCiAJfSwgewotCQkubmFtZSA9ICJwZXJjbGsiLAogCQkuaWQgPSAyLAogCQkucGFyZW50ID0gJnN5c3RlbV9jbGssCiAJCS5nZXRfcmF0ZSA9IHBlcmNsazNfZ2V0X3JhdGUsCkBAIC00NTcsMTIgKzQ0OCwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsayBjbGtvX2NsayA9IHsKLQkubmFtZSA9ICJjbGtvX2NsayIsCiAJLnNldF9wYXJlbnQgPSBjbGtvX3NldF9wYXJlbnQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lID0gImRtYSIsCiAJLnBhcmVudCA9ICZoY2xrLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKQEAgLTQ3Myw3ICs0NjIsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgY3NpX2NsayA9IHsKLQkubmFtZSA9ICJjc2lfY2xrIiwKIAkucGFyZW50ID0gJmhjbGssCiAJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLApAQCAtNDg0LDcgKzQ3Miw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWFfY2xrID0gewotCS5uYW1lID0gIm1tYV9jbGsiLAogCS5wYXJlbnQgPSAmaGNsaywKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCkBAIC00OTUsNyArNDgyLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmRfY2xrID0gewotCS5uYW1lID0gInVzYmRfY2xrIiwKIAkucGFyZW50ID0gJmNsazQ4bSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCkBAIC01MDYsOTkgKzQ5Miw4NSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0X2NsayA9IHsKLQkubmFtZSA9ICJncHRfY2xrIiwKIAkucGFyZW50ID0gJnBlcmNsa1swXSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2NsayA9IHsKLQkubmFtZSA9ICJ1YXJ0IiwKIAkucGFyZW50ID0gJnBlcmNsa1swXSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmNfY2xrID0gewotCS5uYW1lID0gImkyY19jbGsiLAogCS5wYXJlbnQgPSAmaGNsaywKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzcGlfY2xrID0gewotCS5uYW1lID0gInNwaV9jbGsiLAogCS5wYXJlbnQgPSAmcGVyY2xrWzFdLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkaGNfY2xrID0gewotCS5uYW1lID0gInNkaGNfY2xrIiwKIAkucGFyZW50ID0gJnBlcmNsa1sxXSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBsY2RjX2NsayA9IHsKLQkubmFtZSA9ICJsY2RjX2NsayIsCiAJLnBhcmVudCA9ICZwZXJjbGtbMV0sCiAJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbXNoY19jbGsgPSB7Ci0JLm5hbWUgPSAibXNoY19jbGsiLAogCS5wYXJlbnQgPSAmaGNsaywKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfY2xrID0gewotCS5uYW1lID0gInNzaV9jbGsiLAogCS5wYXJlbnQgPSAmcGVyY2xrWzJdLAogCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJ0Y19jbGsgPSB7Ci0JLm5hbWUgPSAicnRjX2NsayIsCiAJLnBhcmVudCA9ICZjbGszMiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfY2xrc1tdID0gewotCSZjbGsxNm0sCi0JJmNsazMyLAotCSZjbGszMl9wcmVtdWx0LAotCSZwcmVtX2NsaywKLQkmc3lzdGVtX2NsaywKLQkmbWN1X2NsaywKLQkmZmNsaywKLQkmaGNsaywKLQkmY2xrNDhtLAotCSZwZXJjbGtbMF0sCi0JJnBlcmNsa1sxXSwKLQkmcGVyY2xrWzJdLAotCSZjbGtvX2NsaywKLQkmZG1hX2NsaywKLQkmY3NpX2NsaywKLQkmbW1hX2NsaywKLQkmdXNiZF9jbGssCi0JJmdwdF9jbGssCi0JJnVhcnRfY2xrLAotCSZpMmNfY2xrLAotCSZzcGlfY2xrLAotCSZzZGhjX2NsaywKLQkmbGNkY19jbGssCi0JJm1zaGNfY2xrLAotCSZzc2lfY2xrLAotCSZydGNfY2xrLAorI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykgXAorCXsgXAorCQkuZGV2X2lkID0gZCwgXAorCQkuY29uX2lkID0gbiwgXAorCQkuY2xrID0gJmMsIFwKKwl9LAorc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSBfX2luaXRkYXRhID0geworCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZG1hIiwgZG1hX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14MS1jYW1lcmEuMCIsIE5VTEwsIGNzaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtbWEiLCBtbWFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14X3VkYy4wIiwgTlVMTCwgdXNiZF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIHNwaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtbW1jLjAiLCBOVUxMLCBzZGhjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc2hjIiwgbXNoY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2lfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3J0Yy4wIiwgTlVMTCwgcnRjX2NsaykKIH07CiAKIGludCBfX2luaXQgbXgxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKLQlzdHJ1Y3QgY2xrICoqY2xrcDsKIAl1bnNpZ25lZCBpbnQgcmVnOworCWludCBpOwogCiAJLyogZGlzYWJsZSBjbG9ja3Mgd2UgYXJlIGFibGUgdG8gKi8KIAlfX3Jhd193cml0ZWwoMCwgU0NNX0dDQ1IpOwpAQCAtNjIwLDEzICs1OTIsMTMgQEAKIAlyZWcgPSAocmVnICYgQ0NNX0NTQ1JfQ0xLT19NQVNLKSA+PiBDQ01fQ1NDUl9DTEtPX09GRlNFVDsKIAljbGtvX2Nsay5wYXJlbnQgPSAoc3RydWN0IGNsayAqKWNsa29fY2xvY2tzW3JlZ107CiAKLQlmb3IgKGNsa3AgPSBteGNfY2xrczsgY2xrcCA8IG14Y19jbGtzICsgQVJSQVlfU0laRShteGNfY2xrcyk7IGNsa3ArKykKLQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKIAogCWNsa19lbmFibGUoJmhjbGspOwogCWNsa19lbmFibGUoJmZjbGspOwogCi0JbXhjX3RpbWVyX2luaXQoJmdwdF9jbGspOworCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBJT19BRERSRVNTKFRJTTFfQkFTRV9BRERSKSwgVElNMV9JTlQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKaW5kZXggNzZkMWZmYi4uYjZiZTI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYwpAQCAtMjksMTIgKzI5LDExIEBACiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9jc2lfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0ICA9IDB4MDAyMjQwMDAsCiAJCS5lbmQgICAgPSAweDAwMjI0MDEwLAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQgID0gQ1NJX0lOVCwKIAkJLmVuZCAgICA9IENTSV9JTlQsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKQEAgLTU1LDEyICs1NCwxMSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfaTJjX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydCAgPSAweDAwMjE3MDAwLAogCQkuZW5kICAgID0gMHgwMDIxNzAxMCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLnN0YXJ0ICA9IEkyQ19JTlQsCiAJCS5lbmQgICAgPSBJMkNfSU5ULAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC03NSwyMiArNzMsMTkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydAk9IFVBUlQxX0JBU0VfQUREUiwKIAkJLmVuZAk9IFVBUlQxX0JBU0VfQUREUiArIDB4RDAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVUFSVDFfTUlOVF9SWCwKIAkJLmVuZAk9IFVBUlQxX01JTlRfUlgsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVUFSVDFfTUlOVF9UWCwKIAkJLmVuZAk9IFVBUlQxX01JTlRfVFgsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVUFSVDFfTUlOVF9SVFMsCiAJCS5lbmQJPSBVQVJUMV9NSU5UX1JUUywKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCkBAIC0xMDUsMjIgKzEwMCwxOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfdWFydDJfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0CT0gVUFSVDJfQkFTRV9BRERSLAogCQkuZW5kCT0gVUFSVDJfQkFTRV9BRERSICsgMHhEMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1JYLAogCQkuZW5kCT0gVUFSVDJfTUlOVF9SWCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1RYLAogCQkuZW5kCT0gVUFSVDJfTUlOVF9UWCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVQVJUMl9NSU5UX1JUUywKIAkJLmVuZAk9IFVBUlQyX01JTlRfUlRTLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKQEAgLTEzNSwxNyArMTI3LDE1IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9ydGNfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0ICA9IDB4MDAyMDQwMDAsCiAJCS5lbmQgICAgPSAweDAwMjA0MDI0LAogCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQgID0gUlRDX0lOVCwKIAkJLmVuZCAgICA9IFJUQ19JTlQsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKKwl9LCB7CiAJCS5zdGFydCAgPSBSVENfU0FNSU5ULAogCQkuZW5kICAgID0gUlRDX1NBTUlOVCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMTYwLDEyICsxNTAsMTEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3dkdF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQgID0gMHgwMDIwMTAwMCwKIAkJLmVuZCAgICA9IDB4MDAyMDEwMDgsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKKwl9LCB7CiAJCS5zdGFydCAgPSBXRFRfSU5ULAogCQkuZW5kICAgID0gV0RUX0lOVCwKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMTgwLDQyICsxNjksMzUgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3VzYl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSAweDAwMjEyMDAwLAogCQkuZW5kCT0gMHgwMDIxMjE0OCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVU0JEX0lOVDAsCiAJCS5lbmQJPSBVU0JEX0lOVDAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVVNCRF9JTlQxLAogCQkuZW5kCT0gVVNCRF9JTlQxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKKwl9LCB7CiAJCS5zdGFydAk9IFVTQkRfSU5UMiwKIAkJLmVuZAk9IFVTQkRfSU5UMiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbNF0gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVU0JEX0lOVDMsCiAJCS5lbmQJPSBVU0JEX0lOVDMsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzVdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gVVNCRF9JTlQ0LAogCQkuZW5kCT0gVVNCRF9JTlQ0LAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVs2XSA9IHsKKwl9LCB7CiAJCS5zdGFydAk9IFVTQkRfSU5UNSwKIAkJLmVuZAk9IFVTQkRfSU5UNSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbN10gPSB7CisJfSwgewogCQkuc3RhcnQJPSBVU0JEX0lOVDYsCiAJCS5lbmQJPSBVU0JEX0lOVDYsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLApAQCAtMjMxLDI5ICsyMTMsMjYgQEAKIAogLyogR1BJTyBwb3J0IGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IG14Y19ncGlvX3BvcnQgaW14X2dwaW9fcG9ydHNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAogCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKIAkJLmlycSA9IEdQSU9fSU5UX1BPUlRBLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQKLQl9LAotCVsxXSA9IHsKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAorCX0sIHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKIAkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MTAwKSwKIAkJLmlycSA9IEdQSU9fSU5UX1BPUlRCLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMgotCX0sCi0JWzJdID0geworCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKKwl9LCB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCiAJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDIwMCksCiAJCS5pcnEgPSBHUElPX0lOVF9QT1JUQywKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQKLQl9LAotCVszXSA9IHsKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCisJfSwgewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAogCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHgzMDApLAogCQkuaXJxID0gR1BJT19JTlRfUE9SVEQsCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2CisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAogCX0KIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtbXgxL2dlbmVyaWMuYwppbmRleCA3NjIyYzliLi43ZjlmYzEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvZ2VuZXJpYy5jCkBAIC00MSw2ICs0MSwxMyBAQAogdm9pZCBfX2luaXQgbXgxX21hcF9pbyh2b2lkKQogewogCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDEpOworCW14Y19hcmNoX3Jlc2V0X2luaXQoSU9fQUREUkVTUyhXRFRfQkFTRV9BRERSKSk7CiAKIAlpb3RhYmxlX2luaXQoaW14X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW14X2lvX2Rlc2MpKTsKIH0KKwordm9pZCBfX2luaXQgbXgxX2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKElPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwppbmRleCBlNWIwYzBhLi4zMGYwNGU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYwpAQCAtMTA0LDEyICsxMDQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDFhZHNfaTJjX2RldmljZXNbXSA9IHsKIAl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTd4IiwgMHgyMiksCi0JCS50eXBlID0gInBjZjg1NzUiLAorCQlJMkNfQk9BUkRfSU5GTygicGNmODU3NSIsIDB4MjIpLAogCQkucGxhdGZvcm1fZGF0YSA9ICZwY2Y4NTd4X2RhdGFbMF0sCiAJfSwgewotCQlJMkNfQk9BUkRfSU5GTygicGNmODU3eCIsIDB4MjQpLAotCQkudHlwZSA9ICJwY2Y4NTc1IiwKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NzUiLCAweDI0KSwKIAkJLnBsYXRmb3JtX2RhdGEgPSAmcGNmODU3eF9kYXRhWzFdLAogCX0sCiB9OwpAQCAtMTUxLDcgKzE0OSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKElNWF9JT19CQVNFID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8JCT0gbXgxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteGNfaW5pdF9pcnEsCisJLmluaXRfaXJxCT0gbXgxX2luaXRfaXJxLAogCS50aW1lcgkJPSAmbXgxYWRzX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBteDFhZHNfaW5pdCwKIE1BQ0hJTkVfRU5ECkBAIC0xNjEsNyArMTU5LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoSU1YX0lPX0JBU0UgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBteDFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEJPSBteDFfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZteDFhZHNfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IG14MWFkc19pbml0LAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYyBiL2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYwppbmRleCAyMGUwYjViLi4zMjVkOThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvc2NiOTMyOC5jCkBAIC02OCwyMiArNjgsMjAgQEAKICAqIHRvIGdhaW4gYWNjZXNzIHRvIGFkZHJlc3MgbGF0Y2ggcmVnaXN0ZXJzIGFuZCB0aGUgZGF0YSBwYXRoLgogICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMHhfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLm5hbWUJPSAiYWRkcmVzcyBhcmVhIiwKIAkJLnN0YXJ0CT0gSU1YX0NTNV9QSFlTLAogCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0JLyogYWRkcmVzcyBhY2Nlc3MgKi8KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGFkZHJlc3MgYWNjZXNzICovCisJfSwgewogCQkubmFtZQk9ICJkYXRhIGFyZWEiLAogCQkuc3RhcnQJPSBJTVhfQ1M1X1BIWVMgKyA0LAogCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgNSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0JLyogZGF0YSBhY2Nlc3MgKi8KLQl9LAotCVsyXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGRhdGEgYWNjZXNzICovCisJfSwgewogCQkuc3RhcnQJPSBJUlFfR1BJT0MoMyksCiAJCS5lbmQJPSBJUlFfR1BJT0MoMyksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKIAl9LAogfTsKIApAQCAtMTU0LDcgKzE1Miw3IEBACiAJLmlvX3BnX29mZnN0CT0gKCgweGUwMjAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gMHgwODAwMDEwMCwKIAkubWFwX2lvCQk9IG14MV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKIAkudGltZXIJCT0gJnNjYjkzMjhfdGltZXIsCiAJLmluaXRfbWFjaGluZQk9IHNjYjkzMjhfaW5pdCwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZwppbmRleCBjNzdkYTU4Li5jOGEyZWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL0tjb25maWcKQEAgLTUzLDYgKzUzLDM0IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgTUFDSF9FVUtSRUFfQ1BVSU1YMjcKKwlib29sICJFdWtyZWEgQ1BVSU1YMjcgbW9kdWxlIgorCWRlcGVuZHMgb24gTUFDSF9NWDI3CisJaGVscAorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBFdWtyZWEgQ1BVSU1YMjcgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKKwkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKK2NvbmZpZyBNQUNIX0VVS1JFQV9DUFVJTVgyN19VU0VTREhDMgorCWJvb2wgIkNQVUlNWDI3IGludGVncmF0ZXMgU0RIQzIgbW9kdWxlIgorCWRlcGVuZHMgb24gTUFDSF9FVUtSRUFfQ1BVSU1YMjcKKwloZWxwCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGludGVybmFsIFNESEMyIHVzZWQgb24gQ1BVSU1YMjcgdXNlZAorCSAgZm9yIHdpZmkgb3IgZU1NQy4KKworY2hvaWNlCisJcHJvbXB0ICJCYXNlYm9hcmQiCisJZGVwZW5kcyBvbiBNQUNIX0VVS1JFQV9DUFVJTVgyNworCWRlZmF1bHQgTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQKKworY29uZmlnIE1BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJECisJcHJvbXB0ICJFdWtyZWEgTUJJTVgyNyBkZXZlbG9wbWVudCBib2FyZCIKKwlib29sCisJaGVscAorCSAgVGhpcyBhZGRzIGJvYXJkIHNwZWNpZmljIGRldmljZXMgdGhhdCBjYW4gYmUgZm91bmQgb24gRXVrcmVhJ3MKKwkgIE1CSU1YMjcgZXZhbHVhdGlvbiBib2FyZC4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBNQUNIX01YMjdfM0RTCiAJYm9vbCAiTVgyN1BESyBwbGF0Zm9ybSIKIAlkZXBlbmRzIG9uIE1BQ0hfTVgyNwpAQCAtNjcsNCArOTUsMTEgQEAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyNyBMSVRFS0lUIHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzIHNwZWNpZmljCiAJICBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCiAKK2NvbmZpZyBNQUNIX1BDQTEwMAorCWJvb2wgIlBoeXRlYyBwaHlDQVJELXMgKHBjYTEwMCkiCisJZGVwZW5kcyBvbiBNQUNIX01YMjcKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHBoeUNBUkQtcyAoYWthIHBjYTEwMCkgcGxhdGZvcm0uIFRoaXMKKwkgIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCmluZGV4IGI5YjFjY2EuLjE5NTYwZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCkBAIC0xNyw0ICsxNyw3IEBACiBvYmotJChDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJEKSArPSBwY205NzAtYmFzZWJvYXJkLm8KIG9iai0kKENPTkZJR19NQUNIX01YMjdfM0RTKSArPSBteDI3cGRrLm8KIG9iai0kKENPTkZJR19NQUNIX01YMjdMSVRFKSArPSBteDI3bGl0ZS5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjcpICs9IGV1a3JlYV9jcHVpbXgyNy5vCitvYmotJChDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQpICs9IGV1a3JlYV9tYmlteDI3LWJhc2Vib2FyZC5vCitvYmotJChDT05GSUdfTUFDSF9QQ0ExMDApICs9IHBjYTEwMC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jCmluZGV4IDA4NTBmYjguLmVlZGU3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwpAQCAtMTAwNCw2ICsxMDA0LDYgQEAKIAljbGtfZW5hYmxlKCZ1YXJ0X2Nsa1swXSk7CiAjZW5kaWYKIAotCW14Y190aW1lcl9pbml0KCZncHRfY2xrWzBdKTsKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2Nsa1swXSwgSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUiksIE1YQ19JTlRfR1BUMSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwppbmRleCAyYzk3MTQ0Li40MDg5OTUxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKQEAgLTY0Myw3ICs2NDMsMTQgQEAKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkzIiwgY3NwaTNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ1c2IiLCB1c2JfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiX2FoYiIsIHVzYl9jbGsxKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2JfYWhiIiwgdXNiX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYiIsIHVzYl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYl9haGIiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiIiwgdXNiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiX2FoYiIsIHVzYl9jbGsxKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpMSIsIHNzaTFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpMiIsIHNzaTJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjX25hbmQuMCIsIE5VTEwsIG5mY19jbGspCkBAIC03NDgsNyArNzU1LDcgQEAKIAljbGtfZW5hYmxlKCZ1YXJ0MV9jbGspOwogI2VuZGlmCiAKLQlteGNfdGltZXJfaW5pdCgmZ3B0MV9jbGspOworCW14Y190aW1lcl9pbml0KCZncHQxX2NsaywgSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUiksIE1YQ19JTlRfR1BUMSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYwppbmRleCBhMGYxYjM2Li41MDE5OWFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCkBAIC00MCw0NSArNDAsODcgQEAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qCi0gKiBSZXNvdXJjZSBkZWZpbml0aW9uIGZvciB0aGUgTVhDIElyREEKKyAqIFNQSSBtYXN0ZXIgY29udHJvbGxlcgorICoKKyAqIC0gaS5NWDE6IDIgY2hhbm5lbCAoc2xpZ2hseSBkaWZmZXJlbnQgcmVnaXN0ZXIgc2V0dGluZykKKyAqIC0gaS5NWDIxOiAyIGNoYW5uZWwKKyAqIC0gaS5NWDI3OiAzIGNoYW5uZWwKICAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaXJkYV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCAgID0gVUFSVDNfQkFTRV9BRERSLAotCQkuZW5kICAgICA9IFVBUlQzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ICAgPSBNWENfSU5UX1VBUlQzLAotCQkuZW5kICAgICA9IE1YQ19JTlRfVUFSVDMsCi0JCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfcmVzb3VyY2VzMFtdID0geworCXsKKwkgICAgICAgLnN0YXJ0ID0gQ1NQSTFfQkFTRV9BRERSLAorCSAgICAgICAuZW5kID0gQ1NQSTFfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJICAgICAgIC5zdGFydCA9IE1YQ19JTlRfQ1NQSTEsCisJICAgICAgIC5lbmQgPSBNWENfSU5UX0NTUEkxLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKIAotLyogUGxhdGZvcm0gRGF0YSBmb3IgTVhDIElyREEgKi8KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2lyZGFfZGV2aWNlID0gewotCS5uYW1lID0gIm14Y19pcmRhIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaXJkYV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y19pcmRhX3Jlc291cmNlcywKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV9yZXNvdXJjZXMxW10gPSB7CisJeworCQkuc3RhcnQgPSBDU1BJMl9CQVNFX0FERFIsCisJCS5lbmQgPSBDU1BJMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9DU1BJMiwKKwkJLmVuZCA9IE1YQ19JTlRfQ1NQSTIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCiB9OwogCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpX3Jlc291cmNlczJbXSA9IHsKKwl7CisJCS5zdGFydCA9IENTUEkzX0JBU0VfQUREUiwKKwkJLmVuZCA9IENTUEkzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX0NTUEkzLAorCQkuZW5kID0gTVhDX0lOVF9DU1BJMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisjZW5kaWYKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTAgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMwKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczAsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczEpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMSwKK307CisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczIpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMiwKK307CisjZW5kaWYKKwogLyoKICAqIEdlbmVyYWwgUHVycG9zZSBUaW1lcgotICogLSBpLk1YMTogMiB0aW1lciAoc2xpZ2hseSBkaWZmZXJlbnQgcmVnaXN0ZXIgaGFuZGxpbmcpCi0gKiAtIGkuTVgyMTogMyB0aW1lcgotICogLSBpLk1YMjc6IDYgdGltZXIKKyAqIC0gaS5NWDIxOiAzIHRpbWVycworICogLSBpLk1YMjc6IDYgdGltZXJzCiAgKi8KIAogLyogV2UgdXNlIGdwdDAgYXMgc3lzdGVtIHRpbWVyLCBzbyBkbyBub3QgYWRkIGEgZGV2aWNlIGZvciB0aGlzIG9uZSAqLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBHUFQyX0JBU0VfQUREUiwKIAkJLmVuZAk9IEdQVDJfQkFTRV9BRERSICsgMHgxNywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewogCQkuc3RhcnQgICA9IE1YQ19JTlRfR1BUMiwKIAkJLmVuZCAgICAgPSBNWENfSU5UX0dQVDIsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC04OSwxNiArMTMxLDE1IEBACiAJLm5hbWUgPSAiaW14X2dwdCIsCiAJLmlkID0gMSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXIxX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXIxX3Jlc291cmNlcworCS5yZXNvdXJjZSA9IHRpbWVyMV9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBHUFQzX0JBU0VfQUREUiwKIAkJLmVuZAk9IEdQVDNfQkFTRV9BRERSICsgMHgxNywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewogCQkuc3RhcnQgICA9IE1YQ19JTlRfR1BUMywKIAkJLmVuZCAgICAgPSBNWENfSU5UX0dQVDMsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0xMDksMTcgKzE1MCwxNiBAQAogCS5uYW1lID0gImlteF9ncHQiLAogCS5pZCA9IDIsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWVyMl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IHRpbWVyMl9yZXNvdXJjZXMKKwkucmVzb3VyY2UgPSB0aW1lcjJfcmVzb3VyY2VzLAogfTsKIAogI2lmZGVmIENPTkZJR19NQUNIX01YMjcKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGltZXIzX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydAk9IEdQVDRfQkFTRV9BRERSLAogCQkuZW5kCT0gR1BUNF9CQVNFX0FERFIgKyAweDE3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sCi0JWzFdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CiAJCS5zdGFydCAgID0gTVhDX0lOVF9HUFQ0LAogCQkuZW5kICAgICA9IE1YQ19JTlRfR1BUNCwKIAkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKQEAgLTEzMCwxNiArMTcwLDE1IEBACiAJLm5hbWUgPSAiaW14X2dwdCIsCiAJLmlkID0gMywKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXIzX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXIzX3Jlc291cmNlcworCS5yZXNvdXJjZSA9IHRpbWVyM19yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyNF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBHUFQ1X0JBU0VfQUREUiwKIAkJLmVuZAk9IEdQVDVfQkFTRV9BRERSICsgMHgxNywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KLQl9LAotCVsxXSA9IHsKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgewogCQkuc3RhcnQgICA9IE1YQ19JTlRfR1BUNSwKIAkJLmVuZCAgICAgPSBNWENfSU5UX0dQVDUsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0xNTAsMTYgKzE4OSwxNSBAQAogCS5uYW1lID0gImlteF9ncHQiLAogCS5pZCA9IDQsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHRpbWVyNF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IHRpbWVyNF9yZXNvdXJjZXMKKwkucmVzb3VyY2UgPSB0aW1lcjRfcmVzb3VyY2VzLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0aW1lcjVfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0CT0gR1BUNl9CQVNFX0FERFIsCiAJCS5lbmQJPSBHUFQ2X0JBU0VfQUREUiArIDB4MTcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlbMV0gPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKIAkJLnN0YXJ0ICAgPSBNWENfSU5UX0dQVDYsCiAJCS5lbmQgICAgID0gTVhDX0lOVF9HUFQ2LAogCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMTcwLDcgKzIwOCw3IEBACiAJLm5hbWUgPSAiaW14X2dwdCIsCiAJLmlkID0gNSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXI1X3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXI1X3Jlc291cmNlcworCS5yZXNvdXJjZSA9IHRpbWVyNV9yZXNvdXJjZXMsCiB9OwogI2VuZGlmCiAKQEAgLTIxNCwxMSArMjUyLDExIEBACiAJewogCQkuc3RhcnQJPSBORkNfQkFTRV9BRERSLAogCQkuZW5kCT0gTkZDX0JBU0VfQUREUiArIDB4ZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7CiAJCS5zdGFydAk9IE1YQ19JTlRfTkFOREZDLAogCQkuZW5kCT0gTVhDX0lOVF9OQU5ERkMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCkBAIC0yNDAsOCArMjc4LDcgQEAKIAkJLnN0YXJ0ID0gTENEQ19CQVNFX0FERFIsCiAJCS5lbmQgICA9IExDRENfQkFTRV9BRERSICsgMHhGRkYsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JeworCX0sIHsKIAkJLnN0YXJ0ID0gTVhDX0lOVF9MQ0RDLAogCQkuZW5kICAgPSBNWENfSU5UX0xDREMsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMjY0LDExICszMDEsMTEgQEAKIAl7CiAJCS5zdGFydAk9IEZFQ19CQVNFX0FERFIsCiAJCS5lbmQJPSBGRUNfQkFTRV9BRERSICsgMHhmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9GRUMsCiAJCS5lbmQJPSBNWENfSU5UX0ZFQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKQEAgLTI4MSwxNSArMzE4LDE0IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLnN0YXJ0CT0gSTJDX0JBU0VfQUREUiwKIAkJLmVuZAk9IEkyQ19CQVNFX0FERFIgKyAweDBmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi0JfSwKLQlbMV0gPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9JMkMsCiAJCS5lbmQJPSBNWENfSU5UX0kyQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKIApAQCAtMjk3LDIwICszMzMsMTkgQEAKIAkubmFtZSA9ICJpbXgtaTJjIiwKIAkuaWQgPSAwLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfaTJjXzFfcmVzb3VyY2VzCisJLnJlc291cmNlID0gbXhjX2kyY18xX3Jlc291cmNlcywKIH07CiAKICNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJPSBJMkMyX0JBU0VfQUREUiwKIAkJLmVuZAk9IEkyQzJfQkFTRV9BRERSICsgMHgwZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sCi0JWzFdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CiAJCS5zdGFydAk9IE1YQ19JTlRfSTJDMiwKIAkJLmVuZAk9IE1YQ19JTlRfSTJDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKIApAQCAtMzE4LDE3ICszNTMsMTYgQEAKIAkubmFtZSA9ICJpbXgtaTJjIiwKIAkuaWQgPSAxLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfaTJjXzJfcmVzb3VyY2VzCisJLnJlc291cmNlID0gbXhjX2kyY18yX3Jlc291cmNlcywKIH07CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfcHdtX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydAk9IFBXTV9CQVNFX0FERFIsCiAJCS5lbmQJPSBQV01fQkFTRV9BRERSICsgMHgwZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQotCX0sCi0JWzFdID0geworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CiAJCS5zdGFydCAgID0gTVhDX0lOVF9QV00sCiAJCS5lbmQgICAgID0gTVhDX0lOVF9QV00sCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0zMzksMjggKzM3MywyNiBAQAogCS5uYW1lID0gIm14Y19wd20iLAogCS5pZCA9IDAsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlcworCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzLAogfTsKIAogLyoKICAqIFJlc291cmNlIGRlZmluaXRpb24gZm9yIHRoZSBNWEMgU0RIQwogICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMV9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCQkuc3RhcnQgPSBTREhDMV9CQVNFX0FERFIsCi0JCQkuZW5kICAgPSBTREhDMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJCX0sCi0JWzFdID0gewotCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMSwKLQkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzEsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJCX0sCi0JWzJdID0gewotCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzEsCi0JCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMSwKLQkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQotCQl9LAorCXsKKwkJLnN0YXJ0ID0gU0RIQzFfQkFTRV9BRERSLAorCQkuZW5kICAgPSBTREhDMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMSwKKwkJLmVuZCAgID0gTVhDX0lOVF9TREhDMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgID0gRE1BX1JFUV9TREhDMSwKKwkJLmVuZCAgICA9IERNQV9SRVFfU0RIQzEsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAogfTsKIAogc3RhdGljIHU2NCBteGNfc2RoYzFfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKQEAgLTM3NywyMSArNDA5LDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMl9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCQkuc3RhcnQgPSBTREhDMl9CQVNFX0FERFIsCi0JCQkuZW5kICAgPSBTREhDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQkJCX0sCi0JWzFdID0gewotCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMiwKLQkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzIsCi0JCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQkJCX0sCi0JWzJdID0gewotCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzIsCi0JCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMiwKLQkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQotCQl9LAorCXsKKwkJLnN0YXJ0ID0gU0RIQzJfQkFTRV9BRERSLAorCQkuZW5kICAgPSBTREhDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMiwKKwkJLmVuZCAgID0gTVhDX0lOVF9TREhDMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgID0gRE1BX1JFUV9TREhDMiwKKwkJLmVuZCAgICA9IERNQV9SRVFfU0RIQzIsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAogfTsKIAogc3RhdGljIHU2NCBteGNfc2RoYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKQEAgLTQwNywzNSArNDM3LDEyMyBAQAogICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMl9yZXNvdXJjZXMsCiB9OwogCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvdGdfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBPVEdfQkFTRV9BRERSLAorCQkuZW5kCT0gT1RHX0JBU0VfQUREUiArIDB4MWZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IE1YQ19JTlRfVVNCMywKKwkJLmVuZAk9IE1YQ19JTlRfVVNCMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgb3RnX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKKy8qIE9URyBnYWRnZXQgZGV2aWNlICovCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZnNsLXVzYjItdWRjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzawkJPSAmb3RnX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmZVTCwKKwl9LAorCS5yZXNvdXJjZQk9IG90Z19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG90Z19yZXNvdXJjZXMpLAorfTsKKworLyogT1RHIGhvc3QgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX290Z19ob3N0ID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZvdGdfZG1hbWFzaywKKwl9LAorCS5yZXNvdXJjZSA9IG90Z19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG90Z19yZXNvdXJjZXMpLAorfTsKKworLyogVVNCIGhvc3QgMSAqLworCitzdGF0aWMgdTY0IHVzYmgxX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gT1RHX0JBU0VfQUREUiArIDB4MjAwLAorCQkuZW5kID0gT1RHX0JBU0VfQUREUiArIDB4M2ZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQ19JTlRfVVNCMSwKKwkJLmVuZCA9IE1YQ19JTlRfVVNCMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgxID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAxLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZ1c2JoMV9kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gbXhjX3VzYmgxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgxX3Jlc291cmNlcyksCit9OworCisvKiBVU0IgaG9zdCAyICovCitzdGF0aWMgdTY0IHVzYmgyX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gT1RHX0JBU0VfQUREUiArIDB4NDAwLAorCQkuZW5kID0gT1RHX0JBU0VfQUREUiArIDB4NWZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQ19JTlRfVVNCMiwKKwkJLmVuZCA9IE1YQ19JTlRfVVNCMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgyID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAyLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZ1c2JoMl9kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gbXhjX3VzYmgyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgyX3Jlc291cmNlcyksCit9OworI2VuZGlmCisKIC8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteF9ncGlvX3BvcnRzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTywKIAkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKIAkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHgxMDApLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKLQl9LAotCVsyXSA9IHsKKwl9LCB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCiAJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MjAwKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCi0JfSwKLQlbM10gPSB7CisJfSwgewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDMwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAotCX0sCi0JWzRdID0geworCX0sIHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby00IiwKIAkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHg0MDApLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAxMjgsCi0JfSwKLQlbNV0gPSB7CisJfSwgewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTUiLAogCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDUwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDE2MCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAppbmRleCAwNDkwMDViLi5kMzE1NDA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCkBAIC00LDcgKzQsNiBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0NTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193ZHQ7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaXJkYV9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTI7CkBAIC0yMCwzICsxOSwxMSBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UxOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX3VkY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX2hvc3Q7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTI7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2V1a3JlYV9jcHVpbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX2NwdWlteDI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxODc2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2V1a3JlYV9jcHVpbXgyNy5jCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogQmFzZWQgb24gcGNtMDM4LmMgd2hpY2ggaXMgOgorICogQ29weXJpZ2h0IDIwMDcgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2JvYXJkLWV1a3JlYV9jcHVpbXgyNy5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgZXVrcmVhX2NwdWlteDI3X3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFVBUlQ0ICovCisJUEIyNl9BRl9VQVJUNF9SVFMsCisJUEIyOF9BRl9VQVJUNF9UWEQsCisJUEIyOV9BRl9VQVJUNF9DVFMsCisJUEIzMV9BRl9VQVJUNF9SWEQsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorCS8qIEkyQzEgKi8KKwlQRDE3X1BGX0kyQ19EQVRBLAorCVBEMThfUEZfSTJDX0NMSywKKwkvKiBTREhDMiAqLworCVBCNF9QRl9TRDJfRDAsCisJUEI1X1BGX1NEMl9EMSwKKwlQQjZfUEZfU0QyX0QyLAorCVBCN19QRl9TRDJfRDMsCisJUEI4X1BGX1NEMl9DTUQsCisJUEI5X1BGX1NEMl9DTEssCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKKwkvKiBRdWFkIFVBUlQncyBJUlEgKi8KKwlHUElPX1BPUlREIHwgMjIgfCBHUElPX0dQSU8gfCBHUElPX0lOLAorCUdQSU9fUE9SVEQgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCisJR1BJT19QT1JURCB8IDI3IHwgR1BJT19HUElPIHwgR1BJT19JTiwKKwlHUElPX1BPUlREIHwgMzAgfCBHUElPX0dQSU8gfCBHUElPX0lOLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBldWtyZWFfY3B1aW14MjdfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldWtyZWFfY3B1aW14MjdfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gMHhjMDAwMDAwMCwKKwkuZW5kICAgPSAweGMzZmZmZmZmLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX2NwdWlteDI3X25vcl9tdGRfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXVrcmVhX2NwdWlteDI3X2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJmV1a3JlYV9jcHVpbXgyN19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGFbXSA9IHsKKwl7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwgeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgZXVrcmVhX2NwdWlteDI3X25hbmRfYm9hcmRfaW5mbyA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZldWtyZWFfY3B1aW14Mjdfbm9yX210ZF9kZXZpY2UsCisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBldWtyZWFfY3B1aW14MjdfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZXVrcmVhX2NwdWlteDI3X2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAorCX0sCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKENTM19CQVNFX0FERFIgKyAweDIwMDAwMCksCisJCS5pcnEgPSBJUlFfR1BJT0IoMjMpLAorCQkudWFydGNsayA9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQgPSAxLAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAorCX0sIHsKKwkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoQ1MzX0JBU0VfQUREUiArIDB4NDAwMDAwKSwKKwkJLmlycSA9IElSUV9HUElPQigyMiksCisJCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCisJCS5yZWdzaGlmdCA9IDEsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCisJfSwgeworCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShDUzNfQkFTRV9BRERSICsgMHg4MDAwMDApLAorCQkuaXJxID0gSVJRX0dQSU9CKDI3KSwKKwkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0ID0gMSwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKKwl9LCB7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKENTM19CQVNFX0FERFIgKyAweDEwMDAwMDApLAorCQkuaXJxID0gSVJRX0dQSU9CKDMwKSwKKwkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0ID0gMSwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKKwl9LCB7CisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZSA9ICJzZXJpYWw4MjUwIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyN19pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhldWtyZWFfY3B1aW14MjdfcGlucywKKwkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjdfcGlucyksICJDUFVJTVgyNyIpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmZXVrcmVhX2NwdWlteDI3X25hbmRfYm9hcmRfaW5mbyk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBldWtyZWFfY3B1aW14MjdfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShldWtyZWFfY3B1aW14MjdfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMCwgJmV1a3JlYV9jcHVpbXgyN19pMmNfMV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9FVUtSRUFfQ1BVSU1YMjdfVVNFU0RIQzIpCisJLyogU0RIQzIgY2FuIGJlIHVzZWQgZm9yIFdpZmkgKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCBOVUxMKTsKKwkvKiBpbiB3aGljaCBjYXNlIFVBUlQ0IGlzIGFsc28gdXNlZCBmb3IgQmx1ZXRvb3RoICovCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMywgJnVhcnRfcGRhdGFbMV0pOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQorCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAorCWV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgX19pbml0IGV1a3JlYV9jcHVpbXgyN190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGV1a3JlYV9jcHVpbXgyN190aW1lciA9IHsKKwkuaW5pdCA9IGV1a3JlYV9jcHVpbXgyN190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChDUFVJTVgyNywgIkVVS1JFQSBDUFVJTVgyNyIpCisJLnBoeXNfaW8gICAgICAgID0gQUlQSV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0ICAgID0gKChBSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IGV1a3JlYV9jcHVpbXgyN19pbml0LAorCS50aW1lciAgICAgICAgICA9ICZldWtyZWFfY3B1aW14MjdfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9ldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzgyYjZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpYyBCZW5hcmQgLSBlcmljQGV1a3JlYS5jb20KKyAqCisgKiBCYXNlZCBvbiBwY205NzAtYmFzZWJvYXJkLmMgd2hpY2ggaXMgOgorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgaW50IGV1a3JlYV9tYmlteDI3X3BpbnNbXSA9IHsKKwkvKiBVQVJUMiAqLworCVBFM19QRl9VQVJUMl9DVFMsCisJUEU0X1BGX1VBUlQyX1JUUywKKwlQRTZfUEZfVUFSVDJfVFhELAorCVBFN19QRl9VQVJUMl9SWEQsCisJLyogVUFSVDMgKi8KKwlQRThfUEZfVUFSVDNfVFhELAorCVBFOV9QRl9VQVJUM19SWEQsCisJUEUxMF9QRl9VQVJUM19DVFMsCisJUEUxMV9QRl9VQVJUM19SVFMsCisJLyogVUFSVDQgKi8KKwlQQjI2X0FGX1VBUlQ0X1JUUywKKwlQQjI4X0FGX1VBUlQ0X1RYRCwKKwlQQjI5X0FGX1VBUlQ0X0NUUywKKwlQQjMxX0FGX1VBUlQ0X1JYRCwKKwkvKiBTREhDMSovCisJUEUxOF9QRl9TRDFfRDAsCisJUEUxOV9QRl9TRDFfRDEsCisJUEUyMF9QRl9TRDFfRDIsCisJUEUyMV9QRl9TRDFfRDMsCisJUEUyMl9QRl9TRDFfQ01ELAorCVBFMjNfUEZfU0QxX0NMSywKKwkvKiBkaXNwbGF5ICovCisJUEE1X1BGX0xTQ0xLLAorCVBBNl9QRl9MRDAsCisJUEE3X1BGX0xEMSwKKwlQQThfUEZfTEQyLAorCVBBOV9QRl9MRDMsCisJUEExMF9QRl9MRDQsCisJUEExMV9QRl9MRDUsCisJUEExMl9QRl9MRDYsCisJUEExM19QRl9MRDcsCisJUEExNF9QRl9MRDgsCisJUEExNV9QRl9MRDksCisJUEExNl9QRl9MRDEwLAorCVBBMTdfUEZfTEQxMSwKKwlQQTE4X1BGX0xEMTIsCisJUEExOV9QRl9MRDEzLAorCVBBMjBfUEZfTEQxNCwKKwlQQTIxX1BGX0xEMTUsCisJUEEyMl9QRl9MRDE2LAorCVBBMjNfUEZfTEQxNywKKwlQQTI4X1BGX0hTWU5DLAorCVBBMjlfUEZfVlNZTkMsCisJUEEzMF9QRl9DT05UUkFTVCwKKwlQQTMxX1BGX09FX0FDRCwKKwkvKiBTUEkxICovCisJUEQyOF9QRl9DU1BJMV9TUzAsCisJUEQyOV9QRl9DU1BJMV9TQ0xLLAorCVBEMzBfUEZfQ1NQSTFfTUlTTywKKwlQRDMxX1BGX0NTUEkxX01PU0ksCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gR1BJT19QT1JURiB8IDE2LAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZDIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkuZ3BpbwkJCT0gR1BJT19QT1JURiB8IDE5LAorCX0sCisJeworCQkubmFtZQkJCT0gImJhY2tsaWdodCIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiYmFja2xpZ2h0IiwKKwkJLmFjdGl2ZV9sb3cJCT0gMCwKKwkJLmdwaW8JCQk9IEdQSU9fUE9SVEUgfCA1LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIGV1a3JlYV9tYmlteDI3X21vZGVzW10gPSB7CisJeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJDTU8tUUdWQSIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMzIwLAorCQkJLnlyZXMJCT0gMjQwLAorCQkJLnBpeGNsb2NrCT0gMTU2MDAwLAorCQkJLmhzeW5jX2xlbgk9IDMwLAorCQkJLmxlZnRfbWFyZ2luCT0gMzgsCisJCQkucmlnaHRfbWFyZ2luCT0gMjAsCisJCQkudnN5bmNfbGVuCT0gMywKKwkJCS51cHBlcl9tYXJnaW4JPSAxNSwKKwkJCS5sb3dlcl9tYXJnaW4JPSA0LAorCQl9LAorCQkucGNyCQk9IDB4RkFEMDhCODAsCisJCS5icHAJCT0gMTYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgZXVrcmVhX21iaW14MjdfZmJfZGF0YSA9IHsKKwkubW9kZSA9IGV1a3JlYV9tYmlteDI3X21vZGVzLAorCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X21vZGVzKSwKKworCS5wd21yCQk9IDB4MDBBOTAzRkYsCisJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCisJLmRtYWNyCQk9IDB4MDAwNDAwNjAsCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7CisJeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sCisJeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikKKwl8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKKworI2RlZmluZSBBRFM3ODQ2X1BFTkRPV04gKEdQSU9fUE9SVEQgfCAyNSkKKworc3RhdGljIHZvaWQgYWRzNzg0Nl9kZXZfaW5pdCh2b2lkKQoreworCWlmIChncGlvX3JlcXVlc3QoQURTNzg0Nl9QRU5ET1dOLCAiQURTNzg0NiBwZW5kb3duIikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGFkczc0NiBwZW4gZG93biBHUElPXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEFEUzc4NDZfUEVORE9XTik7Cit9CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoQURTNzg0Nl9QRU5ET1dOKTsKK30KKworc3RhdGljIHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgYWRzNzg0Nl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlLAorCS5rZWVwX3ZyZWZfb24JCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLm1vZGFsaWFzCT0gImFkczc4NDYiLAorCQkuYnVzX251bQk9IDAsCisJCS5jaGlwX3NlbGVjdAk9IDAsCisJCS5tYXhfc3BlZWRfaHoJPSAxNTAwMDAwLAorCQkuaXJxCQk9IElSUV9HUElPRCgyNSksCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkczc4NDZfY29uZmlnLAorCQkubW9kZSAgICAgICAgICAgPSBTUElfTU9ERV8yLAorCX0sCit9OworCitzdGF0aWMgaW50IGV1a3JlYV9tYmlteDI3X3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgfCAyOH07CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgZXVrcmVhX21iaW14Mjdfc3BpXzBfZGF0YSA9IHsKKwkuY2hpcHNlbGVjdAk9IGV1a3JlYV9tYmlteDI3X3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9jcyksCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbGVkc19ncGlvLAorfTsKKworLyoKKyAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IGNwdWlteDI3IGluaXQuCisgKgorICogQWRkIHBsYXRmb3JtIGRldmljZXMgcHJlc2VudCBvbiB0aGlzIGJhc2Vib2FyZCBhbmQgaW5pdAorICogdGhlbSBmcm9tIENQVSBzaWRlIGFzIGZhciBhcyByZXF1aXJlZCB0byB1c2UgdGhlbSBsYXRlciBvbgorICovCit2b2lkIF9faW5pdCBldWtyZWFfbWJpbXgyN19iYXNlYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoZXVrcmVhX21iaW14MjdfcGlucywKKwkJQVJSQVlfU0laRShldWtyZWFfbWJpbXgyN19waW5zKSwgIk1CSU1YMjciKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzBdKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsxXSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmZXVrcmVhX21iaW14MjdfZmJfZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMCwgTlVMTCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KQorCXx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQorCS8qIFNQSSBhbmQgQURTNzg0NiBUb3VjaHNjcmVlbiBjb250cm9sZXIgaW5pdCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI1IHwgR1BJT19HUElPIHwgR1BJT19JTik7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmZXVrcmVhX21iaW14Mjdfc3BpXzBfZGF0YSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZXVrcmVhX21iaW14Mjdfc3BpX2JvYXJkX2luZm8sCisJCQlBUlJBWV9TSVpFKGV1a3JlYV9tYmlteDI3X3NwaV9ib2FyZF9pbmZvKSk7CisJYWRzNzg0Nl9kZXZfaW5pdCgpOworI2VuZGlmCisKKwkvKiBMZWRzIGNvbmZpZ3VyYXRpb24gKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEYgfCAxNiB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEYgfCAxOSB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKKwkvKiBCYWNrbGlnaHQgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCA1IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMKaW5kZXggMTY5MzcyZi4uYWU4Zjc1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2dlbmVyaWMuYwpAQCAtNzIsNiArNzIsNyBAQAogdm9pZCBfX2luaXQgbXgyMV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyMSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKSk7CiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KQEAgLTc5LDcgKzgwLDE4IEBACiB2b2lkIF9faW5pdCBteDI3X21hcF9pbyh2b2lkKQogewogCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDI3KTsKKwlteGNfYXJjaF9yZXNldF9pbml0KElPX0FERFJFU1MoV0RPR19CQVNFX0FERFIpKTsKIAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQogCit2b2lkIF9faW5pdCBteDI3X2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKElPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpKTsKK30KKwordm9pZCBfX2luaXQgbXgyMV9pbml0X2lycSh2b2lkKQoreworCW14MjdfaW5pdF9pcnEoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyMWFkcy5jCmluZGV4IGE1ZWU0NjEuLmNmNWY3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teDIxYWRzLmMKQEAgLTE2NCwyNSArMTY0LDMzIEBACiAgKiBDb25uZWN0ZWQgaXMgYSBwb3J0cmFpdCBTaGFycC1RVkdBIGRpc3BsYXkKICAqIG9mIHR5cGU6IExRMDM1UTdEQjAyCiAgKi8KK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSBteDIxYWRzX21vZGVzW10gPSB7CisJeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJTaGFycC1MUTAzNVE3IiwKKwkJCS5yZWZyZXNoCT0gNjAsCisJCQkueHJlcwkJPSAyNDAsCisJCQkueXJlcwkJPSAzMjAsCisJCQkucGl4Y2xvY2sJPSAxODg2NzksIC8qIGluIHBzICg1LjNNSHopICovCisJCQkuaHN5bmNfbGVuCT0gMiwKKwkJCS5sZWZ0X21hcmdpbgk9IDYsCisJCQkucmlnaHRfbWFyZ2luCT0gMTYsCisJCQkudnN5bmNfbGVuCT0gMSwKKwkJCS51cHBlcl9tYXJnaW4JPSA4LAorCQkJLmxvd2VyX21hcmdpbgk9IDEwLAorCQl9LAorCQkucGNyCQk9IDB4ZmIxMDhiYzcsCisJCS5icHAJCT0gMTYsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXgyMWFkc19mYl9kYXRhID0gewotCS5waXhjbG9jayAgICAgICA9IDE4ODY3OSwgLyogaW4gcHMgKi8KLQkueHJlcyAgICAgICAgICAgPSAyNDAsCi0JLnlyZXMgICAgICAgICAgID0gMzIwLAorCS5tb2RlID0gbXgyMWFkc19tb2RlcywKKwkubnVtX21vZGVzID0gQVJSQVlfU0laRShteDIxYWRzX21vZGVzKSwKIAotCS5icHAgICAgICAgICAgICA9IDE2LAotCS5oc3luY19sZW4gICAgICA9IDIsCi0JLmxlZnRfbWFyZ2luICAgID0gNiwKLQkucmlnaHRfbWFyZ2luICAgPSAxNiwKLQotCS52c3luY19sZW4gICAgICA9IDEsCi0JLnVwcGVyX21hcmdpbiAgID0gOCwKLQkubG93ZXJfbWFyZ2luICAgPSAxMCwKLQkuZml4ZWRfc2NyZWVuX2NwdSA9IDAsCi0KLQkucGNyICAgICAgICAgICAgPSAweEZCMTA4QkM3LAotCS5wd21yICAgICAgICAgICA9IDB4MDBBOTAxZmYsCi0JLmxzY3IxICAgICAgICAgID0gMHgwMDEyMDMwMCwKLQkuZG1hY3IgICAgICAgICAgPSAweDAwMDIwMDA4LAorCS5wd21yCQk9IDB4MDBhOTAzZmYsCisJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCisJLmRtYWNyCQk9IDB4MDAwMjAwMDgsCiAKIAkuaW5pdCA9IG14MjFhZHNfZmJfaW5pdCwKIAkuZXhpdCA9IG14MjFhZHNfZmJfZXhpdCwKQEAgLTI4MCw3ICsyODgsNyBAQAogCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgyMWFkc19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MjFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXgyMWFkc19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDIxYWRzX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYwppbmRleCAwMmRhZGRhLi44M2U0MTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jCkBAIC0xODMsMjAgKzE4MywyOSBAQAogCQlfX3Jhd193cml0ZXcoUEJDX0JDVFJMMV9MQ0RPTiwgUEJDX0JDVFJMMV9DTEVBUl9SRUcpOwogfQogCitzdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXgyN2Fkc19tb2Rlc1tdID0geworCXsKKwkJLm1vZGUgPSB7CisJCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRNyIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMjQwLAorCQkJLnlyZXMJCT0gMzIwLAorCQkJLnBpeGNsb2NrCT0gMTg4Njc5LCAvKiBpbiBwcyAoNS4zTUh6KSAqLworCQkJLmhzeW5jX2xlbgk9IDEsCisJCQkubGVmdF9tYXJnaW4JPSA5LAorCQkJLnJpZ2h0X21hcmdpbgk9IDE2LAorCQkJLnZzeW5jX2xlbgk9IDEsCisJCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJCS5sb3dlcl9tYXJnaW4JPSA5LAorCQl9LAorCQkuYnBwCQk9IDE2LAorCQkucGNyCQk9IDB4RkIwMDhCQzAsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXgyN2Fkc19mYl9kYXRhID0gewotCS5waXhjbG9jawk9IDE4ODY3OSwKLQkueHJlcwkJPSAyNDAsCi0JLnlyZXMJCT0gMzIwLAotCi0JLmJwcAkJPSAxNiwKLQkuaHN5bmNfbGVuCT0gMSwKLQkubGVmdF9tYXJnaW4JPSA5LAotCS5yaWdodF9tYXJnaW4JPSAxNiwKLQotCS52c3luY19sZW4JPSAxLAotCS51cHBlcl9tYXJnaW4JPSA3LAotCS5sb3dlcl9tYXJnaW4JPSA5LAotCS5maXhlZF9zY3JlZW5fY3B1ID0gMCwKKwkubW9kZSA9IG14MjdhZHNfbW9kZXMsCisJLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgyN2Fkc19tb2RlcyksCiAKIAkvKgogCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKQEAgLTIwNyw3ICsyMTYsNiBAQAogCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQogCSAqIC0gZW5hYmxlIHNoYXJwIG1vZGUKIAkgKi8KLQkucGNyCQk9IDB4RkIwMDhCQzAsCiAJLnB3bXIJCT0gMHgwMEE5MDNGRiwKIAkubHNjcjEJCT0gMHgwMDEyMDMwMCwKIAkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKQEAgLTMzMCw3ICszMzgsNyBAQAogCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgyN2Fkc19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXgyN2Fkc19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDI3YWRzX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdsaXRlLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3bGl0ZS5jCmluZGV4IDNhZTExY2IuLjgyZWEyMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdsaXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2xpdGUuYwpAQCAtODksNyArODksNyBAQAogCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXgyN2xpdGVfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgyN2xpdGVfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN3Bkay5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN3Bkay5jCmluZGV4IDFkOTIzOGMuLjY3NjFkMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdwZGsuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3cGRrLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14MjdwZGtfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgyN3Bka190aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY2ExMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjYTEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNWIxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY2ExMDAuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2FzY2hhIEhhdWVyIChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZWVwcm9tLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgcGNhMTAwX3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFNESEMgKi8KKwlQQjRfUEZfU0QyX0QwLAorCVBCNV9QRl9TRDJfRDEsCisJUEI2X1BGX1NEMl9EMiwKKwlQQjdfUEZfU0QyX0QzLAorCVBCOF9QRl9TRDJfQ01ELAorCVBCOV9QRl9TRDJfQ0xLLAorCS8qIEZFQyAqLworCVBEMF9BSU5fRkVDX1RYRDAsCisJUEQxX0FJTl9GRUNfVFhEMSwKKwlQRDJfQUlOX0ZFQ19UWEQyLAorCVBEM19BSU5fRkVDX1RYRDMsCisJUEQ0X0FPVVRfRkVDX1JYX0VSLAorCVBENV9BT1VUX0ZFQ19SWEQxLAorCVBENl9BT1VUX0ZFQ19SWEQyLAorCVBEN19BT1VUX0ZFQ19SWEQzLAorCVBEOF9BRl9GRUNfTURJTywKKwlQRDlfQUlOX0ZFQ19NREMsCisJUEQxMF9BT1VUX0ZFQ19DUlMsCisJUEQxMV9BT1VUX0ZFQ19UWF9DTEssCisJUEQxMl9BT1VUX0ZFQ19SWEQwLAorCVBEMTNfQU9VVF9GRUNfUlhfRFYsCisJUEQxNF9BT1VUX0ZFQ19SWF9DTEssCisJUEQxNV9BT1VUX0ZFQ19DT0wsCisJUEQxNl9BSU5fRkVDX1RYX0VSLAorCVBGMjNfQUlOX0ZFQ19UWF9FTiwKKwkvKiBTU0kxICovCisJUEMyMF9QRl9TU0kxX0ZTLAorCVBDMjFfUEZfU1NJMV9SWEQsCisJUEMyMl9QRl9TU0kxX1RYRCwKKwlQQzIzX1BGX1NTSTFfQ0xLLAorCS8qIG9uYm9hcmQgSTJDICovCisJUEM1X1BGX0kyQzJfU0RBLAorCVBDNl9QRl9JMkMyX1NDTCwKKwkvKiBleHRlcm5hbCBJMkMgKi8KKwlQRDE3X1BGX0kyQ19EQVRBLAorCVBEMThfUEZfSTJDX0NMSywKKwkvKiBTUEkxICovCisJUEQyNV9QRl9DU1BJMV9SRFksCisJUEQyOV9QRl9DU1BJMV9TQ0xLLAorCVBEMzBfUEZfQ1NQSTFfTUlTTywKKwlQRDMxX1BGX0NTUEkxX01PU0ksCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgcGNhMTAwX25hbmRfYm9hcmRfaW5mbyA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZteGNfdzFfbWFzdGVyX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjYTEwMF9pMmNfMV9kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0geworCS5ieXRlX2xlbiA9IDQwOTYsCisJLnBhZ2Vfc2l6ZSA9IDMyLAorCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjYTEwMF9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygicnRjLXBjZjg1NjMiLCAweDUxKSwKKwkJLnR5cGUgPSAicGNmODU2MyIKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJsbTc1IiwgMHg0YSksCisJCS50eXBlID0gImxtNzUiCisJfQorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBzcGlfZWVwcm9tIGF0MjUzMjAgPSB7CisJLm5hbWUJCT0gImF0MjUzMjBhbiIsCisJLmJ5dGVfbGVuCT0gNDA5NiwKKwkucGFnZV9zaXplCT0gMzIsCisJLmZsYWdzCQk9IEVFX0FERFIyLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBwY2ExMDBfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gImF0MjUiLAorCQkubWF4X3NwZWVkX2h6ID0gMzAwMDAsCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXQyNTMyMCwKKwl9LAorfTsKKworc3RhdGljIGludCBwY2ExMDBfc3BpX2NzW10gPSB7R1BJT19QT1JURCArIDI4LCBHUElPX1BPUlREICsgMjd9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHBjYTEwMF9zcGlfMF9kYXRhID0geworCS5jaGlwc2VsZWN0CT0gcGNhMTAwX3NwaV9jcywKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHBjYTEwMF9zcGlfY3MpLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHBjYTEwMF9zZGhjMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAorCQl2b2lkICpkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShJUlFfR1BJT0MoMjkpLCBkZXRlY3RfaXJxLAorCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkgICJpbXgtbW1jLWRldGVjdCIsIGRhdGEpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUgorCQkJInBjYTEwMDogRmFpbGVkIHRvIHJldWVzdCBpcnEgZm9yIHNkL21tYyBkZXRlY3Rpb25cbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNhMTAwX3NkaGMyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElSUV9HUElPQygyOSksIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7CisJLmluaXQgPSBwY2ExMDBfc2RoYzJfaW5pdCwKKwkuZXhpdCA9IHBjYTEwMF9zZGhjMl9leGl0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBjYTEwMF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMocGNhMTAwX3BpbnMsCisJCQlBUlJBWV9TSVpFKHBjYTEwMF9waW5zKSwgIlBDQTEwMCIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAicGNhMTAwOiBGYWlsZWQgdG8gc2V0dXAgcGlucyAoJWQpXG4iLCByZXQpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjkgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZwY2ExMDBfbmFuZF9ib2FyZF9pbmZvKTsKKworCS8qIG9ubHkgdGhlIGkyYyBtYXN0ZXIgMSBpcyB1c2VkIG9uIHRoaXMgQ1BVIGNhcmQgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY2ExMDBfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShwY2ExMDBfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjYTEwMF9pMmNfMV9kYXRhKTsKKworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI3IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogR1BJTzBfSVJRICovCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMzEgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKwkvKiBHUElPMV9JUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyNSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCS8qIEdQSU8yX0lSUSAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDUgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjYTEwMF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjYTEwMF9zcGlfYm9hcmRfaW5mbykpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zcGlfZGV2aWNlMCwgJnBjYTEwMF9zcGlfMF9kYXRhKTsKKyNlbmRpZgorCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY2ExMDBfdGltZXJfaW5pdCh2b2lkKQoreworCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBwY2ExMDBfdGltZXIgPSB7CisJLmluaXQgPSBwY2ExMDBfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoUENBMTAwLCAicGh5Q0FSRC1pLk1YMjciKQorCS5waHlzX2lvICAgICAgICA9IEFJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IHBjYTEwMF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZwY2ExMDBfdGltZXIsCitNQUNISU5FX0VORAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCmluZGV4IGE0NjI4ZDAuLmVlNjVkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCkBAIC0xODYsMTcgKzE4NiwxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzhfaTJjX2RldmljZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCiAJCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKLQl9LAotCVsxXSA9IHsKLQkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCi0JCS50eXBlID0gInBjZjg1NjMiCi0JfSwKLQlbMl0gPSB7CisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAorCX0sIHsKIAkJSTJDX0JPQVJEX0lORk8oImxtNzUiLCAweDRhKSwKLQkJLnR5cGUgPSAibG03NSIKIAl9CiB9OwogCkBAIC0yMjAsNiArMjE2LDkgQEAKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjbTAzOF9pMmNfMV9kYXRhKTsKIAorCS8qIFBFMTggZm9yIHVzZXItTEVEIEQ0MCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDE4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECkBAIC0yNDEsNyArMjQwLDcgQEAKIAkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IHBjbTAzOF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZwY20wMzhfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCmluZGV4IDZhM2FjYWYuLmMyNjFmNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL3BsYXRmb3JtL3NqYTEwMDAuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KIApAQCAtMTI1LDQwICsxMjYsOTYgQEAKIAkuZXhpdCA9IHBjbTk3MF9zZGhjMl9leGl0LAogfTsKIAotLyoKLSAqIENvbm5lY3RlZCBpcyBhIHBvcnRyYWl0IFNoYXJwLVFWR0EgZGlzcGxheQotICogb2YgdHlwZTogTFEwMzVRN0RIMDYKLSAqLworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIHBjbTk3MF9tb2Rlc1tdID0geworCXsKKwkJLm1vZGUgPSB7CisJCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRNyIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gMjQwLAorCQkJLnlyZXMJCT0gMzIwLAorCQkJLnBpeGNsb2NrCT0gMTg4Njc5LCAvKiBpbiBwcyAoNS4zTUh6KSAqLworCQkJLmhzeW5jX2xlbgk9IDcsCisJCQkubGVmdF9tYXJnaW4JPSA1LAorCQkJLnJpZ2h0X21hcmdpbgk9IDE2LAorCQkJLnZzeW5jX2xlbgk9IDEsCisJCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJCS5sb3dlcl9tYXJnaW4JPSA5LAorCQl9LAorCQkvKgorCQkgKiAtIEhTWU5DIGFjdGl2ZSBoaWdoCisJCSAqIC0gVlNZTkMgYWN0aXZlIGhpZ2gKKwkJICogLSBjbGsgbm90ZW5hYmxlZCB3aGlsZSBpZGxlCisJCSAqIC0gY2xvY2sgbm90IGludmVydGVkCisJCSAqIC0gZGF0YSBub3QgaW52ZXJ0ZWQKKwkJICogLSBkYXRhIGVuYWJsZSBsb3cgYWN0aXZlCisJCSAqIC0gZW5hYmxlIHNoYXJwIG1vZGUKKwkJICovCisJCS5wY3IJCT0gMHhGMDAwODBDMCwKKwkJLmJwcAkJPSAxNiwKKwl9LCB7CisJCS5tb2RlID0geworCQkJLm5hbWUJCT0gIlRYMDkwIiwKKwkJCS5yZWZyZXNoCT0gNjAsCisJCQkueHJlcwkJPSAyNDAsCisJCQkueXJlcwkJPSAzMjAsCisJCQkucGl4Y2xvY2sJPSAzODI1NSwKKwkJCS5sZWZ0X21hcmdpbgk9IDE0NCwKKwkJCS5yaWdodF9tYXJnaW4JPSAwLAorCQkJLnVwcGVyX21hcmdpbgk9IDcsCisJCQkubG93ZXJfbWFyZ2luCT0gNDAsCisJCQkuaHN5bmNfbGVuCT0gOTYsCisJCQkudnN5bmNfbGVuCT0gMSwKKwkJfSwKKwkJLyoKKwkJICogLSBIU1lOQyBhY3RpdmUgbG93ICgxIDw8IDIyKQorCQkgKiAtIFZTWU5DIGFjdGl2ZSBsb3cgKDEgPDwgMjMpCisJCSAqIC0gY2xrIG5vdGVuYWJsZWQgd2hpbGUgaWRsZQorCQkgKiAtIGNsb2NrIG5vdCBpbnZlcnRlZAorCQkgKiAtIGRhdGEgbm90IGludmVydGVkCisJCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQorCQkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCisJCSAqLworCQkucGNyID0gMHhGMDAwODA4MCB8ICgxPDwyMikgfCAoMTw8MjMpIHwgKDE8PDE5KSwKKwkJLmJwcCA9IDMyLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIHBjbTAzOF9mYl9kYXRhID0gewotCS5waXhjbG9jawk9IDE4ODY3OSwgLyogaW4gcHMgKDUuM01IeikgKi8KLQkueHJlcwkJPSAyNDAsCi0JLnlyZXMJCT0gMzIwLAorCS5tb2RlID0gcGNtOTcwX21vZGVzLAorCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKHBjbTk3MF9tb2RlcyksCiAKLQkuYnBwCQk9IDE2LAotCS5oc3luY19sZW4JPSA3LAotCS5sZWZ0X21hcmdpbgk9IDUsCi0JLnJpZ2h0X21hcmdpbgk9IDE2LAotCi0JLnZzeW5jX2xlbgk9IDEsCi0JLnVwcGVyX21hcmdpbgk9IDcsCi0JLmxvd2VyX21hcmdpbgk9IDksCi0JLmZpeGVkX3NjcmVlbl9jcHUgPSAwLAotCi0JLyoKLQkgKiAtIEhTWU5DIGFjdGl2ZSBoaWdoCi0JICogLSBWU1lOQyBhY3RpdmUgaGlnaAotCSAqIC0gY2xrIG5vdGVuYWJsZWQgd2hpbGUgaWRsZQotCSAqIC0gY2xvY2sgbm90IGludmVydGVkCi0JICogLSBkYXRhIG5vdCBpbnZlcnRlZAotCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQotCSAqIC0gZW5hYmxlIHNoYXJwIG1vZGUKLQkgKi8KLQkucGNyCQk9IDB4RkEwMDgwQzAsCiAJLnB3bXIJCT0gMHgwMEE5MDNGRiwKIAkubHNjcjEJCT0gMHgwMDEyMDMwMCwKIAkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtOTcwX3NqYTEwMDBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgICA9IENTNF9CQVNFX0FERFIsCisJCS5lbmQgICAgID0gQ1M0X0JBU0VfQUREUiArIDB4MTAwIC0gMSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgID0gSVJRX0dQSU9FKDE5KSwKKwkJLmVuZCAgICAgPSBJUlFfR1BJT0UoMTkpLAorCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwl9LAorfTsKKworc3RydWN0IHNqYTEwMDBfcGxhdGZvcm1fZGF0YSBwY205NzBfc2phMTAwMF9wbGF0Zm9ybV9kYXRhID0geworCS5jbG9jawkJPSAxNjAwMDAwMCAvIDIsCisJLm9jcgkJPSAweDQwIHwgMHgxOCwKKwkuY2RyCQk9IDB4NDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY205NzBfc2phMTAwMCA9IHsKKwkubmFtZSA9ICJzamExMDAwX3BsYXRmb3JtIiwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwY205NzBfc2phMTAwMF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlID0gcGNtOTcwX3NqYTEwMDBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShwY205NzBfc2phMTAwMF9yZXNvdXJjZXMpLAorfTsKKwogLyoKICAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IHBjbTAzOCBpbml0LgogICoKQEAgLTE3Miw0ICsyMjksNSBAQAogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJnBjbTAzOF9mYl9kYXRhKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UxLCAmc2RoY19wZGF0YSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgyNS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjhmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2lmIEFSQ0hfTVgyNQorCitjb21tZW50ICJNWDI1IHBsYXRmb3JtczoiCisKK2NvbmZpZyBNQUNIX01YMjVfM0RTCisJc2VsZWN0IEFSQ0hfTVhDX0lPTVVYX1YzCisJYm9vbCAiU3VwcG9ydCBNWDI1UERLICgzRFMpIFBsYXRmb3JtIgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjM4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitvYmoteQkJCQk6PSBtbS5vIGRldmljZXMubworb2JqLSQoQ09ORklHX0FSQ0hfTVgyNSkJCSs9IGNsb2NrLm8KK29iai0kKENPTkZJR19NQUNIX01YMjVfM0RTKQkrPSBteDI1cGRrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkZDM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICAgenJlbGFkZHIteQk6PSAweDgwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4ODAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHg4MDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjI2OTUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CisKKyNkZWZpbmUgQ1JNX0JBU0UJTVgyNV9JT19BRERSRVNTKE1YMjVfQ1JNX0JBU0VfQUREUikKKworI2RlZmluZSBDQ01fTVBDVEwJMHgwMAorI2RlZmluZSBDQ01fVVBDVEwJMHgwNAorI2RlZmluZSBDQ01fQ0NUTAkweDA4CisjZGVmaW5lIENDTV9DR0NSMAkweDBDCisjZGVmaW5lIENDTV9DR0NSMQkweDEwCisjZGVmaW5lIENDTV9DR0NSMgkweDE0CisjZGVmaW5lIENDTV9QQ0RSMAkweDE4CisjZGVmaW5lIENDTV9QQ0RSMQkweDFDCisjZGVmaW5lIENDTV9QQ0RSMgkweDIwCisjZGVmaW5lIENDTV9QQ0RSMwkweDI0CisjZGVmaW5lIENDTV9SQ1NSCTB4MjgKKyNkZWZpbmUgQ0NNX0NSRFIJMHgyQworI2RlZmluZSBDQ01fRENWUjAJMHgzMAorI2RlZmluZSBDQ01fRENWUjEJMHgzNAorI2RlZmluZSBDQ01fRENWUjIJMHgzOAorI2RlZmluZSBDQ01fRENWUjMJMHgzYworI2RlZmluZSBDQ01fTFRSMAkweDQwCisjZGVmaW5lIENDTV9MVFIxCTB4NDQKKyNkZWZpbmUgQ0NNX0xUUjIJMHg0OAorI2RlZmluZSBDQ01fTFRSMwkweDRjCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21wbGwodm9pZCkKK3sKKwl1bG9uZyBtcGN0bCA9IF9fcmF3X3JlYWRsKENSTV9CQVNFICsgQ0NNX01QQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChtcGN0bCwgMjQwMDAwMDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV91cGxsKHZvaWQpCit7CisJdWxvbmcgbXBjdGwgPSBfX3Jhd19yZWFkbChDUk1fQkFTRSArIENDTV9VUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwobXBjdGwsIDI0MDAwMDAwKTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9hcm0oc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgY2N0bCA9IHJlYWRsKENSTV9CQVNFICsgQ0NNX0NDVEwpOworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGdldF9yYXRlX21wbGwoKTsKKworCWlmIChjY3RsICYgKDEgPDwgMTQpKQorCQlyYXRlID0gKHJhdGUgKiAzKSA+PiAxOworCisJcmV0dXJuIHJhdGUgLyAoKGNjdGwgPj4gMzApICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2FoYihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBjY3RsID0gcmVhZGwoQ1JNX0JBU0UgKyBDQ01fQ0NUTCk7CisKKwlyZXR1cm4gZ2V0X3JhdGVfYXJtKE5VTEwpIC8gKCgoY2N0bCA+PiAyOCkgJiAweDMpICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2lwZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX2FoYihOVUxMKSA+PiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9wZXIoaW50IHBlcikKK3sKKwl1bnNpZ25lZCBsb25nIG9mcyA9IChwZXIgJiAweDMpICogODsKKwl1bnNpZ25lZCBsb25nIHJlZyA9IHBlciAmIH4weDM7CisJdW5zaWduZWQgbG9uZyB2YWwgPSAocmVhZGwoQ1JNX0JBU0UgKyBDQ01fUENEUjAgKyByZWcpID4+IG9mcykgJiAweDNmOworCXVuc2lnbmVkIGxvbmcgZnJlZjsKKworCWlmIChyZWFkbChDUk1fQkFTRSArIDB4NjQpICYgKDEgPDwgcGVyKSkKKwkJZnJlZiA9IGdldF9yYXRlX3VwbGwoKTsKKwllbHNlCisJCWZyZWYgPSBnZXRfcmF0ZV9pcGcoTlVMTCk7CisKKwlyZXR1cm4gZnJlZiAvICh2YWwgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdWFydChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3BlcigxNSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2kyYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3Blcig2KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbmZjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDgpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9vdGcoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiA0ODAwMDAwMDsgLyogRklYTUUgKi8KK30KKworc3RhdGljIGludCBjbGtfY2djcl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyB8PSAxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrX2NnY3JfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgc3IpCQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQlcCisJCS5pZAkJPSBpLAkJCVwKKwkJLmVuYWJsZV9yZWcJPSBDUk1fQkFTRSArIGVyLAlcCisJCS5lbmFibGVfc2hpZnQJPSBlcywJCQlcCisJCS5nZXRfcmF0ZQk9IGdyLAkJCVwKKwkJLnNldF9yYXRlCT0gc3IsCQkJXAorCQkuZW5hYmxlCQk9IGNsa19jZ2NyX2VuYWJsZSwJXAorCQkuZGlzYWJsZQk9IGNsa19jZ2NyX2Rpc2FibGUsCVwKKwl9CisKK0RFRklORV9DTE9DSyhncHRfY2xrLCAgICAwLCBDQ01fQ0dDUjAsICA1LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgIDAsIENDTV9DR0NSMSwgIDUsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNiwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAwLCBDQ01fQ0dDUjEsICA3LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgIDAsIENDTV9DR0NSMiwgMTQsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgIDAsIENDTV9DR0NSMiwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQzX2NsaywgIDAsIENDTV9DR0NSMiwgMTYsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQ0X2NsaywgIDAsIENDTV9DR0NSMiwgMTcsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgIDAsIENDTV9DR0NSMiwgMTgsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKG5mY19jbGssICAgIDAsIENDTV9DR0NSMCwgIDgsIGdldF9yYXRlX25mYywgTlVMTCk7CitERUZJTkVfQ0xPQ0sodXNib3RnX2NsaywgMCwgQ0NNX0NHQ1IwLCAyOCwgZ2V0X3JhdGVfb3RnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhwd20xX2NsaywJIDAsIENDTV9DR0NSMSwgMzEsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0socHdtMl9jbGssCSAwLCBDQ01fQ0dDUjIsICAwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHB3bTNfY2xrLAkgMCwgQ0NNX0NHQ1IyLCAgMSwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhwd200X2NsaywJIDAsIENDTV9DR0NSMiwgIDIsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soa3BwX2NsaywJIDAsIENDTV9DR0NSMSwgMjgsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0sodHNjX2NsaywJIDAsIENDTV9DR0NSMiwgMTMsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soaTJjX2NsaywJIDAsIENDTV9DR0NSMCwgIDYsIGdldF9yYXRlX2kyYywgTlVMTCk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpCVwKKwl7CQkJCVwKKwkJLmRldl9pZCA9IGQsCQlcCisJCS5jb25faWQgPSBuLAkJXAorCQkuY2xrID0gJmMsCQlcCisJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JvdGdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYm90Z19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfbmFuZC4wIiwgTlVMTCwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGkxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMSIsIE5VTEwsIGNzcGkyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMCIsIE5VTEwsIHB3bTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3B3bS4xIiwgTlVMTCwgcHdtMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfcHdtLjIiLCBOVUxMLCBwd20zX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19wd20uMyIsIE5VTEwsIHB3bTRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWtleXBhZCIsIE5VTEwsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteDI1LWFkYyIsIE5VTEwsIHRzY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjAiLCBOVUxMLCBpMmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyY19jbGspCit9OworCitpbnQgX19pbml0IG14MjVfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKKwkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywgTVgyNV9JT19BRERSRVNTKE1YMjVfR1BUMV9CQVNFX0FERFIpLCA1NCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMTJkZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCkBAIC0wLDAgKzEsNDAyIEBACisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwW10gPSB7CisJeworCQkuc3RhcnQgPSAweDQzZjkwMDAwLAorCQkuZW5kID0gMHg0M2Y5M2ZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSA0NSwKKwkJLmVuZCA9IDQ1LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UwID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAwLAorCS5yZXNvdXJjZSA9IHVhcnQwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MCksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxW10gPSB7CisJeworCQkuc3RhcnQgPSAweDQzZjk0MDAwLAorCQkuZW5kID0gMHg0M2Y5N2ZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSAzMiwKKwkJLmVuZCA9IDMyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UxID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAxLAorCS5yZXNvdXJjZSA9IHVhcnQxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MSksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyW10gPSB7CisJeworCQkuc3RhcnQgPSAweDUwMDBjMDAwLAorCQkuZW5kID0gMHg1MDAwZmZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSAxOCwKKwkJLmVuZCA9IDE4LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAyLAorCS5yZXNvdXJjZSA9IHVhcnQyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MiksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzW10gPSB7CisJeworCQkuc3RhcnQgPSAweDUwMDA4MDAwLAorCQkuZW5kID0gMHg1MDAwYmZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSA1LAorCQkuZW5kID0gNSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMyA9IHsKKwkubmFtZSA9ICJpbXgtdWFydCIsCisJLmlkID0gMywKKwkucmVzb3VyY2UgPSB1YXJ0MywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0NFtdID0geworCXsKKwkJLnN0YXJ0ID0gMHg1MDAyYzAwMCwKKwkJLmVuZCA9IDB4NTAwMmZmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gNDAsCisJCS5lbmQgPSA0MCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNCA9IHsKKwkubmFtZSA9ICJpbXgtdWFydCIsCisJLmlkID0gNCwKKwkucmVzb3VyY2UgPSB1YXJ0NCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDQpLAorfTsKKworI2RlZmluZSBNWDI1X09UR19CQVNFX0FERFIgMHg1M0ZGNDAwMAorCitzdGF0aWMgdTY0IG90Z19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfb3RnX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVgyNV9PVEdfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyNV9PVEdfQkFTRV9BRERSICsgMHgxZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gMzcsCisJCS5lbmQgPSAzNywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX290ZyA9IHsKKwkubmFtZSA9ICJteGMtZWhjaSIsCisJLmlkID0gMCwKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCQkuZG1hX21hc2sgPSAmb3RnX2RtYW1hc2ssCisJfSwKKwkucmVzb3VyY2UgPSBteGNfb3RnX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX290Z19yZXNvdXJjZXMpLAorfTsKKworLyogT1RHIGdhZGdldCBkZXZpY2UgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3RnX3VkY19kZXZpY2UgPSB7CisJLm5hbWUgPSAiZnNsLXVzYjItdWRjIiwKKwkuaWQgICA9IC0xLAorCS5kZXYgID0geworCQkuZG1hX21hc2sgICAgICAgICAgPSAmb3RnX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKKwkucmVzb3VyY2UgPSBteGNfb3RnX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX290Z19yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHU2NCB1c2JoMl9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdXNiaDJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDI1X09UR19CQVNFX0FERFIgKyAweDQwMCwKKwkJLmVuZCA9IE1YMjVfT1RHX0JBU0VfQUREUiArIDB4NWZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IDM1LAorCQkuZW5kID0gMzUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMiA9IHsKKwkubmFtZSA9ICJteGMtZWhjaSIsCisJLmlkID0gMSwKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCQkuZG1hX21hc2sgPSAmdXNiaDJfZG1hbWFzaywKKwl9LAorCS5yZXNvdXJjZSA9IG14Y191c2JoMl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y191c2JoMl9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpX3Jlc291cmNlczBbXSA9IHsKKwl7CisJICAgICAgIC5zdGFydCA9IDB4NDNmYTQwMDAsCisJICAgICAgIC5lbmQgPSAweDQzZmE3ZmZmLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJICAgICAgIC5zdGFydCA9IDE0LAorCSAgICAgICAuZW5kID0gMTQsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczApLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV9yZXNvdXJjZXMxW10gPSB7CisJeworCSAgICAgICAuc3RhcnQgPSAweDUwMDEwMDAwLAorCSAgICAgICAuZW5kID0gMHg1MDAxM2ZmZiwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCSAgICAgICAuc3RhcnQgPSAxMywKKwkgICAgICAgLmVuZCA9IDEzLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTEgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMxKSwKKwkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfcmVzb3VyY2VzMltdID0geworCXsKKwkgICAgICAgLnN0YXJ0ID0gMHg1MDAwNDAwMCwKKwkgICAgICAgLmVuZCA9IDB4NTAwMDdmZmYsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkgICAgICAgLnN0YXJ0ID0gMCwKKwkgICAgICAgLmVuZCA9IDAsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczIpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3B3bV9yZXNvdXJjZXMwW10gPSB7CisJeworCQkuc3RhcnQJPSAweDUzZmUwMDAwLAorCQkuZW5kCT0gMHg1M2ZlM2ZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgICA9IDI2LAorCQkuZW5kICAgICA9IDI2LAorCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2UwID0geworCS5uYW1lID0gIm14Y19wd20iLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzMCksCisJLnJlc291cmNlID0gbXhjX3B3bV9yZXNvdXJjZXMwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfcHdtX3Jlc291cmNlczFbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NTNmYTAwMDAsCisJCS5lbmQJPSAweDUzZmEzZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgID0gMzYsCisJCS5lbmQgICAgID0gMzYsCisJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTEgPSB7CisJLm5hbWUgPSAibXhjX3B3bSIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMxKSwKKwkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlczEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19wd21fcmVzb3VyY2VzMltdID0geworCXsKKwkJLnN0YXJ0CT0gMHg1M2ZhODAwMCwKKwkJLmVuZAk9IDB4NTNmYWJmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ICAgPSA0MSwKKwkJLmVuZCAgICAgPSA0MSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMiA9IHsKKwkubmFtZSA9ICJteGNfcHdtIiwKKwkuaWQgPSAyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfcHdtX3Jlc291cmNlczIpLAorCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2tleXBhZF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NDNmYTgwMDAsCisJCS5lbmQJPSAweDQzZmFiZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgID0gMjQsCisJCS5lbmQgICAgID0gMjQsCisJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfa2V5cGFkX2RldmljZSA9IHsKKwkubmFtZSA9ICJteGMta2V5cGFkIiwKKwkuaWQgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2tleXBhZF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19rZXlwYWRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfcHdtX3Jlc291cmNlczNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NTNmYzgwMDAsCisJCS5lbmQJPSAweDUzZmNiZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgID0gNDIsCisJCS5lbmQgICAgID0gNDIsCisJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfcHdtX2RldmljZTMgPSB7CisJLm5hbWUgPSAibXhjX3B3bSIsCisJLmlkID0gMywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3B3bV9yZXNvdXJjZXMzKSwKKwkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlczMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4NDNmODAwMDAsCisJCS5lbmQJPSAweDQzZjgzZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IDMsCisJCS5lbmQJPSAzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJpbXgtaTJjIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjXzFfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSAweDQzZjk4MDAwLAorCQkuZW5kCT0gMHg0M2Y5YmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSA0LAorCQkuZW5kCT0gNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTEgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18yX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyY18yX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyY18zX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gMHg0M2Y4NDAwMCwKKwkJLmVuZAk9IDB4NDNmODdmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gMTAsCisJCS5lbmQJPSAxMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTIgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18zX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyY18zX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0geworCXsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKKwkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgyNV9HUElPMV9CQVNFX0FERFJfVklSVCwKKwkJLmlycSA9IDUyLAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQsCisJfSwgeworCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAorCQkuYmFzZSA9ICh2b2lkIF9faW9tZW0gKilNWDI1X0dQSU8yX0JBU0VfQUREUl9WSVJULAorCQkuaXJxID0gNTEsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyLAorCX0sIHsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0yIiwKKwkJLmJhc2UgPSAodm9pZCBfX2lvbWVtICopTVgyNV9HUElPM19CQVNFX0FERFJfVklSVCwKKwkJLmlycSA9IDE2LAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA2NCwKKwl9LCB7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMyIsCisJCS5iYXNlID0gKHZvaWQgX19pb21lbSAqKU1YMjVfR1BJTzRfQkFTRV9BRERSX1ZJUlQsCisJCS5pcnEgPSAyMywKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgOTYsCisJfQorfTsKKworaW50IF9faW5pdCBteGNfcmVnaXN0ZXJfZ3Bpb3Modm9pZCkKK3sKKwlyZXR1cm4gbXhjX2dwaW9faW5pdChpbXhfZ3Bpb19wb3J0cywgQVJSQVlfU0laRShpbXhfZ3Bpb19wb3J0cykpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTZiZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaApAQCAtMCwwICsxLDE5IEBACitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UzOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGc7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBvdGdfdWRjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlMzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19rZXlwYWRfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L21tLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2U1ODdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L21tLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBBcm0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDUtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgLSBhZGQgTVgzMSBzcGVjaWZpYyBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgorCisvKgorICogVGhpcyB0YWJsZSBkZWZpbmVzIHN0YXRpYyB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgZm9yIEkvTyByZWdpb25zLgorICogVGhlc2UgYXJlIHRoZSBtYXBwaW5ncyBjb21tb24gYWNyb3NzIGFsbCBNWDMgYm9hcmRzLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14Y19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gTVgyNV9BVklDX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVgyNV9BVklDX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVgyNV9BVklDX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVgyNV9BSVBTMV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YMjVfQUlQUzFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBNWDI1X0FJUFMxX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LCB7CisJCS52aXJ0dWFsCT0gTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YMjVfQUlQUzJfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBNWDI1X0FJUFMyX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSBtYXAuIEl0IGlzIGNhbGxlZCBkdXJpbmcgdGhlCisgKiBzeXN0ZW0gc3RhcnR1cCB0byBjcmVhdGUgc3RhdGljIHBoeXNpY2FsIHRvIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzCisgKiBmb3IgdGhlIElPIG1vZHVsZXMuCisgKi8KK3ZvaWQgX19pbml0IG14MjVfbWFwX2lvKHZvaWQpCit7CisJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YMjUpOworCW14Y19pb211eF92M19pbml0KE1YMjVfSU9fQUREUkVTUyhNWDI1X0lPTVVYQ19CQVNFX0FERFIpKTsKKwlteGNfYXJjaF9yZXNldF9pbml0KE1YMjVfSU9fQUREUkVTUyhNWDI1X1dET0dfQkFTRV9BRERSKSk7CisKKwlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKK30KKwordm9pZCBfX2luaXQgbXgyNV9pbml0X2lycSh2b2lkKQoreworCW14Y19pbml0X2lycSgodm9pZCBfX2lvbWVtICopTVgyNV9BVklDX0JBU0VfQUREUl9WSVJUKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhYTRmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKQEAgLTAsMCArMSw1OCBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBuYW5kX2JvYXJkX2luZm8gPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX2luaXQodm9pZCkKK3sKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCBOVUxMKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZuYW5kX2JvYXJkX2luZm8pOworfQorCisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDI1X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyNXBka190aW1lciA9IHsKKwkuaW5pdCAgID0gbXgyNXBka190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDI1XzNEUywgIkZyZWVzY2FsZSBNWDI1UERLICgzRFMpIikKKwkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLworCS5waHlzX2lvCT0gTVgyNV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKChNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI1X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI1X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14MjVwZGtfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgyNXBka190aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2FybWFkaWxsbzV4MC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvYXJtYWRpbGxvNXgwLmMKaW5kZXggZWUzMzFmZC4uNzc2YzBlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvYXJtYWRpbGxvNXgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvYXJtYWRpbGxvNXgwLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCiAJLm1hcF9pbwkJPSBteDMxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteGNfaW5pdF9pcnEsCisJLmluaXRfaXJxCT0gbXgzMV9pbml0X2lycSwKIAkudGltZXIJCT0gJmFybWFkaWxsbzV4MF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0gYXJtYWRpbGxvNXgwX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKaW5kZXggNTc3ZWU4My4uZmU1YzQyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCkBAIC0yNzMsNiArMjczLDE5IEBACiAJcmV0dXJuIHJhdGUgLyBnZXRfM18zX2RpdigocGRyMiA+PiAxNikgJiAweDNmKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfb3RnKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjQgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFI0KTsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisKKwlpZiAocGRyNCAmICgxIDw8IDkpKQorCQlyYXRlID0gZ2V0X3JhdGVfYXJtKCk7CisJZWxzZQorCQlyYXRlID0gZ2V0X3JhdGVfcHBsbCgpOworCisJcmV0dXJuIHJhdGUgLyBnZXRfM18zX2RpdigocGRyNCA+PiAyMikgJiAweDNmKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfaXBnX3BlcihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBwZHIwID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMCk7CkBAIC0zNjUsNyArMzc4LDcgQEAKIERFRklORV9DTE9DSyh1YXJ0MV9jbGssICAwLCBDQ01fQ0dSMiwgMTYsIGdldF9yYXRlX3VhcnQsIE5VTEwpOwogREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgIDEsIENDTV9DR1IyLCAxOCwgZ2V0X3JhdGVfdWFydCwgTlVMTCk7CiBERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAgMiwgQ0NNX0NHUjIsIDIwLCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKLURFRklORV9DTE9DSyh1c2JvdGdfY2xrLCAwLCBDQ01fQ0dSMiwgMjIsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHVzYm90Z19jbGssIDAsIENDTV9DR1IyLCAyMiwgZ2V0X3JhdGVfb3RnLCBOVUxMKTsKIERFRklORV9DTE9DSyh3ZG9nX2NsaywgICAwLCBDQ01fQ0dSMiwgMjQsIE5VTEwsIE5VTEwpOwogREVGSU5FX0NMT0NLKG1heF9jbGssICAgIDAsIENDTV9DR1IyLCAyNiwgTlVMTCwgTlVMTCk7CiBERUZJTkVfQ0xPQ0soYWRtdXhfY2xrLCAgMCwgQ0NNX0NHUjIsIDMwLCBOVUxMLCBOVUxMKTsKQEAgLTQyNiw3ICs0MzksMTAgQEAKIAlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVzYm90ZyIsIHVzYm90Z19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4wIiwgInVzYiIsIHVzYm90Z19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYiIsIHVzYm90Z19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYm90Z19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNib3RnX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14Y193ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWF4IiwgbWF4X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImFkbXV4IiwgYWRtdXhfY2xrKQpAQCAtNDU2LDcgKzQ3Miw3IEBACiAJX19yYXdfd3JpdGVsKCgzIDw8IDI2KSB8IGxsLCBDQ01fQkFTRSArIENDTV9DR1IyKTsKIAlfX3Jhd193cml0ZWwoMCwgQ0NNX0JBU0UgKyBDQ01fQ0dSMyk7CiAKLQlteGNfdGltZXJfaW5pdCgmZ3B0X2Nsayk7CisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGssIElPX0FERFJFU1MoR1BUMV9CQVNFX0FERFIpLCBNWENfSU5UX0dQVCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IDhiMTQyMzkuLjA2YmQ2MTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL214MzEuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCiAjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKQEAgLTQwMiw2ICs0MDMsMTEgQEAKIAlyZXR1cm4gY2tpaF9yYXRlOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY2tpbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIENLSUxfQ0xLX0ZSRVE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrID0gewogCS5nZXRfcmF0ZSA9IGNsa19ja2loX2dldF9yYXRlLAogfTsKQEAgLTUwOCw2ICs1MTQsNyBAQAogREVGSU5FX0NMT0NLKG5mY19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBuZmNfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKIERFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwogREVGSU5FX0NMT0NLKGlwZ19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBpcGdfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhja2lsX2NsaywgICAgMCwgTlVMTCwgICAgICAgICAgMCwgY2xrX2NraWxfZ2V0X3JhdGUsIE5VTEwsIE5VTEwpOwogCiAjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCiAJeyBcCkBAIC01MTgsOSArNTI1LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVtaSIsIGVtaV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpIiwgY3NwaTFfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaSIsIGNzcGkyX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkiLCBjc3BpM19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjEiLCBOVUxMLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKQEAgLTUzMSw2ICs1MzgsMTIgQEAKIAlfUkVHSVNURVJfQ0xPQ0soImlwdS1jb3JlIiwgTlVMTCwgaXB1X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soIm14M19zZGNfZmIiLCBOVUxMLCBpcHVfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAia3BwIiwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjAiLCAidXNiIiwgdXNiX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4wIiwgInVzYl9haGIiLCB1c2JfY2xrMikKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiIiwgdXNiX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYl9haGIiLCB1c2JfY2xrMikKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiIiwgdXNiX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYl9haGIiLCB1c2JfY2xrMikKIAlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2IiLCB1c2JfY2xrMSkKIAlfUkVHSVNURVJfQ0xPQ0soImZzbC11c2IyLXVkYyIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCiAJX1JFR0lTVEVSX0NMT0NLKCJteDMtY2FtZXJhLjAiLCBOVUxMLCBjc2lfY2xrKQpAQCAtNTU5LDYgKzU3Miw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXBlZzQiLCBtcGVnNF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtYngiLCBtYnhfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3J0YyIsIE5VTEwsIGNraWxfY2xrKQogfTsKIAogaW50IF9faW5pdCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKQEAgLTYwOSw3ICs2MjMsNyBAQAogCQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX1BNQ1IxKTsKIAl9CiAKLQlteGNfdGltZXJfaW5pdCgmaXBnX2Nsayk7CisJbXhjX3RpbWVyX2luaXQoJmlwZ19jbGssIElPX0FERFJFU1MoR1BUMV9CQVNFX0FERFIpLCBNWENfSU5UX0dQVCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYwppbmRleCA5ZTg3ZTA4Li44YTU3N2YzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCkBAIC0xMjksMTkgKzEyOSwxNyBAQAogCiAvKiBHUElPIHBvcnQgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMCIsCiAJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPMV9CQVNFX0FERFIpLAogCQkuaXJxID0gTVhDX0lOVF9HUElPMSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKIAkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU8yX0JBU0VfQUREUiksCiAJCS5pcnEgPSBNWENfSU5UX0dQSU8yLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKLQl9LAotCVsyXSA9IHsKKwl9LCB7CiAJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCiAJCS5iYXNlID0gSU9fQUREUkVTUyhHUElPM19CQVNFX0FERFIpLAogCQkuaXJxID0gTVhDX0lOVF9HUElPMywKQEAgLTE3MywxMSArMTcxLDExIEBACiAJewogCQkuc3RhcnQJPSAwLCAvKiBydW50aW1lIGRlcGVuZGVudCAqLwogCQkuZW5kCT0gMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewogCQkuc3RhcnQJPSBNWENfSU5UX05BTkRGQywKIAkJLmVuZAk9IE1YQ19JTlRfTkFOREZDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKIApAQCAtMTkzLDggKzE5MSw3IEBACiAJCS5zdGFydCA9IEkyQ19CQVNFX0FERFIsCiAJCS5lbmQgPSBJMkNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKKwl9LCB7CiAJCS5zdGFydCA9IE1YQ19JTlRfSTJDLAogCQkuZW5kID0gTVhDX0lOVF9JMkMsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLApAQCAtMjEzLDggKzIxMCw3IEBACiAJCS5zdGFydCA9IEkyQzJfQkFTRV9BRERSLAogCQkuZW5kID0gSTJDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JeworCX0sIHsKIAkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMyLAogCQkuZW5kID0gTVhDX0lOVF9JMkMyLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKQEAgLTIzMyw4ICsyMjksNyBAQAogCQkuc3RhcnQgPSBJMkMzX0JBU0VfQUREUiwKIAkJLmVuZCA9IEkyQzNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKKwl9LCB7CiAJCS5zdGFydCA9IE1YQ19JTlRfSTJDMywKIAkJLmVuZCA9IE1YQ19JTlRfSTJDMywKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCkBAIC0zNzEsOCArMzY2LDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvdGdfcmVzb3VyY2VzW10gPSB7CiAJewotCQkuc3RhcnQJPSBPVEdfQkFTRV9BRERSLAotCQkuZW5kCT0gT1RHX0JBU0VfQUREUiArIDB4MWZmLAorCQkuc3RhcnQJPSBNWDMxX09UR19CQVNFX0FERFIsCisJCS5lbmQJPSBNWDMxX09UR19CQVNFX0FERFIgKyAweDFmZiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewogCQkuc3RhcnQJPSBNWENfSU5UX1VTQjMsCkBAIC0zOTUsMTYgKzM5MCwxNDIgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUob3RnX3Jlc291cmNlcyksCiB9OwogCisvKiBPVEcgaG9zdCAqLworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX2hvc3QgPSB7CisJLm5hbWUgPSAibXhjLWVoY2kiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLmRtYV9tYXNrID0gJm90Z19kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gb3RnX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob3RnX3Jlc291cmNlcyksCit9OworCisvKiBVU0IgaG9zdCAxICovCisKK3N0YXRpYyB1NjQgdXNiaDFfZG1hbWFzayA9IH4odTMyKTA7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVgzMV9PVEdfQkFTRV9BRERSICsgMHgyMDAsCisJCS5lbmQgPSBNWDMxX09UR19CQVNFX0FERFIgKyAweDNmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX1VTQjEsCisJCS5lbmQgPSBNWENfSU5UX1VTQjEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMSA9IHsKKwkubmFtZSA9ICJteGMtZWhjaSIsCisJLmlkID0gMSwKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorCQkuZG1hX21hc2sgPSAmdXNiaDFfZG1hbWFzaywKKwl9LAorCS5yZXNvdXJjZSA9IG14Y191c2JoMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y191c2JoMV9yZXNvdXJjZXMpLAorfTsKKworLyogVVNCIGhvc3QgMiAqLworc3RhdGljIHU2NCB1c2JoMl9kbWFtYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfdXNiaDJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDMxX09UR19CQVNFX0FERFIgKyAweDQwMCwKKwkJLmVuZCA9IE1YMzFfT1RHX0JBU0VfQUREUiArIDB4NWZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQ19JTlRfVVNCMiwKKwkJLmVuZCA9IE1YQ19JTlRfVVNCMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VzYmgyID0geworCS5uYW1lID0gIm14Yy1laGNpIiwKKwkuaWQgPSAyLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5kbWFfbWFzayA9ICZ1c2JoMl9kbWFtYXNrLAorCX0sCisJLnJlc291cmNlID0gbXhjX3VzYmgyX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3VzYmgyX3Jlc291cmNlcyksCit9OworCisvKgorICogU1BJIG1hc3RlciBjb250cm9sbGVyCisgKiAzIGNoYW5uZWxzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8wX3Jlc291cmNlc1tdID0geworCXsKKwkgICAgICAgLnN0YXJ0ID0gQ1NQSTFfQkFTRV9BRERSLAorCSAgICAgICAuZW5kID0gQ1NQSTFfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJICAgICAgIC5zdGFydCA9IE1YQ19JTlRfQ1NQSTEsCisJICAgICAgIC5lbmQgPSBNWENfSU5UX0NTUEkxLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBDU1BJMl9CQVNFX0FERFIsCisJCS5lbmQgPSBDU1BJMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9DU1BJMiwKKwkJLmVuZCA9IE1YQ19JTlRfQ1NQSTIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCA9IENTUEkzX0JBU0VfQUREUiwKKwkJLmVuZCA9IENTUEkzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWENfSU5UX0NTUEkzLAorCQkuZW5kID0gTVhDX0lOVF9DU1BJMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NwaV9kZXZpY2UwID0geworCS5uYW1lID0gInNwaV9pbXgiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGlteF9zcGlfMF9yZXNvdXJjZXMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3BpXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBpbXhfc3BpXzFfcmVzb3VyY2VzLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3BpX2RldmljZTIgPSB7CisJLm5hbWUgPSAic3BpX2lteCIsCisJLmlkID0gMiwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NwaV8yX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gaW14X3NwaV8yX3Jlc291cmNlcywKK307CisKICNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSBNWENfRkVDX0JBU0VfQUREUiwKIAkJLmVuZAk9IE1YQ19GRUNfQkFTRV9BRERSICsgMHhmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9GRUMsCiAJCS5lbmQJPSBNWENfSU5UX0ZFQywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKQEAgLTQyNiw2ICs1NDcsMTQgQEAKIAlpZiAoY3B1X2lzX214MzUoKSkgewogCQlteGNfbmFuZF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBNWDM1X05GQ19CQVNFX0FERFI7CiAJCW14Y19uYW5kX3Jlc291cmNlc1swXS5lbmQgPSBNWDM1X05GQ19CQVNFX0FERFIgKyAweGZmZjsKKwkJb3RnX3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzVfT1RHX0JBU0VfQUREUjsKKwkJb3RnX3Jlc291cmNlc1swXS5lbmQgPSBNWDM1X09UR19CQVNFX0FERFIgKyAweDFmZjsKKwkJb3RnX3Jlc291cmNlc1sxXS5zdGFydCA9IE1YQ19JTlRfVVNCT1RHOworCQlvdGdfcmVzb3VyY2VzWzFdLmVuZCA9IE1YQ19JTlRfVVNCT1RHOworCQlteGNfdXNiaDFfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gTVgzNV9PVEdfQkFTRV9BRERSICsgMHg0MDA7CisJCW14Y191c2JoMV9yZXNvdXJjZXNbMF0uZW5kID0gTVgzNV9PVEdfQkFTRV9BRERSICsgMHg1ZmY7CisJCW14Y191c2JoMV9yZXNvdXJjZXNbMV0uc3RhcnQgPSBNWENfSU5UX1VTQkhTOworCQlteGNfdXNiaDFfcmVzb3VyY2VzWzFdLmVuZCA9IE1YQ19JTlRfVVNCSFM7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKaW5kZXggZmZkNDk0ZC4uNzlmMmJlNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaApAQCAtMTYsNSArMTYsMTEgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y3NkaGNfZGV2aWNlMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfdWRjX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19vdGdfaG9zdDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ybmdhX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggMWY1ZmRkNC4uYWQ1YTExMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYzLmg+CiAKIC8qIQogICogQGZpbGUgbW0uYwpAQCAtNzUsNiArNzYsNyBAQAogdm9pZCBfX2luaXQgbXgzMV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzMSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKSk7CiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KQEAgLTgyLDEwICs4NCwyMiBAQAogdm9pZCBfX2luaXQgbXgzNV9tYXBfaW8odm9pZCkKIHsKIAlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CisJbXhjX2lvbXV4X3YzX2luaXQoSU9fQUREUkVTUyhJT01VWENfQkFTRV9BRERSKSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKSk7CiAKIAlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKIH0KIAordm9pZCBfX2luaXQgbXgzMV9pbml0X2lycSh2b2lkKQoreworCW14Y19pbml0X2lycShJT19BRERSRVNTKEFWSUNfQkFTRV9BRERSKSk7Cit9CisKK3ZvaWQgX19pbml0IG14MzVfaW5pdF9pcnEodm9pZCkKK3sKKwlteDMxX2luaXRfaXJxKCk7Cit9CisKICNpZmRlZiBDT05GSUdfQ0FDSEVfTDJYMAogc3RhdGljIGludCBteGNfaW5pdF9sMngwKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKaW5kZXggMzBlMjc2Ny4uMDQ5N2MxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYwpAQCAtNTE3LDcgKzUxNyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDMxYWRzX2luaXRfaXJxKHZvaWQpCiB7Ci0JbXhjX2luaXRfaXJxKCk7CisJbXgzMV9pbml0X2lycSgpOwogCW14MzFhZHNfaW5pdF9leHBpbygpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGlsbHkuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaWxseS5jCmluZGV4IDZhYjJmMTYuLjQyMzAyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaWxseS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaWxseS5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvCQk9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEJPSBteDMxX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUJPSBteDMxbGlsbHlfYm9hcmRfaW5pdCwKIAkudGltZXIJCT0gJm14MzFsaWxseV90aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYwppbmRleCA4NmZlNzBmLi5hOGQ1N2RlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKQEAgLTcxLDEyICs3MSwxMSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7CisJewogCQkuc3RhcnQJCT0gQ1M0X0JBU0VfQUREUiwKIAkJLmVuZAkJPSBDUzRfQkFTRV9BRERSICsgMHgxMDAsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKKwl9LCB7CiAJCS5zdGFydAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fU0ZTNiksCiAJCS5lbmQJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX1NGUzYpLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCkBAIC0xNjIsNyArMTYxLDcgQEAKIAkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBteDMxbGl0ZV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJm14MzFsaXRlX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCmluZGV4IGI0ODU4MWUuLjU1OTJjZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwpAQCAtMTYsNyArMTYsNiBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC00MCwxOCArMzksNiBAQAogCU1YMzFfUElOX1BDX1JFQURZX19TRDJfREFUQTEsIE1YMzFfUElOX1BDX1dBSVRfQl9fU0QyX0RBVEEwLAogCU1YMzFfUElOX1BDX0NEMl9CX19TRDJfQ0xLLCBNWDMxX1BJTl9QQ19DRDFfQl9fU0QyX0NNRCwKIAlNWDMxX1BJTl9BVEFfRElPUl9fR1BJTzNfMjgsIE1YMzFfUElOX0FUQV9ESU9XX19HUElPM18yOSwKLQkvKiBVU0IgT1RHICovCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEExX19VU0JPVEdfREFUQTEsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEyX19VU0JPVEdfREFUQTIsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE0X19VU0JPVEdfREFUQTQsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE1X19VU0JPVEdfREFUQTUsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE3X19VU0JPVEdfREFUQTcsCi0JTVgzMV9QSU5fVVNCT1RHX0NMS19fVVNCT1RHX0NMSywgTVgzMV9QSU5fVVNCT1RHX0RJUl9fVVNCT1RHX0RJUiwKLQlNWDMxX1BJTl9VU0JPVEdfTlhUX19VU0JPVEdfTlhULCBNWDMxX1BJTl9VU0JPVEdfU1RQX19VU0JPVEdfU1RQLAotCU1YMzFfUElOX1VTQl9PQ19fR1BJTzFfMzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewpAQCAtMTExLDMzICs5OCw2IEBACiAJLmV4aXQJPSBkZXZib2FyZF9zZGhjMl9leGl0LAogfTsKIAotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKLQkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCi0JLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VMUEksCi19OwotCi0jZGVmaW5lIE9UR19QQURfQ0ZHIChQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUKQotI2RlZmluZSBPVEdfRU5fQiBJT01VWF9UT19HUElPKE1YMzFfUElOX1VTQl9PQykKLQotc3RhdGljIHZvaWQgZGV2Ym9hcmRfdXNib3RnX2luaXQodm9pZCkKLXsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTAsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTEsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTIsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTMsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTQsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTUsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTYsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTcsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfQ0xLLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RJUiwgT1RHX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19OWFQsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfU1RQLCBPVEdfUEFEX0NGRyk7Ci0KLQlncGlvX3JlcXVlc3QoT1RHX0VOX0IsICJ1c2ItdWRjLWVuIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9UR19FTl9CLCAwKTsKLX0KLQogLyoKICAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IG14MzFtb2JvYXJkIGluaXQuCiAgKi8KQEAgLTE1MSw3ICsxMTEsNCBAQAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKIAogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMSwgJnNkaGMyX3BkYXRhKTsKLQotCWRldmJvYXJkX3VzYm90Z19pbml0KCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmdXNiX3BkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwppbmRleCA5MDFmYjAxLi4yYmZhZmZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTQ4LDE4ICs0Nyw4IEBACiAJTVgzMV9QSU5fQ1NJX1BJWENMS19fQ1NJX1BJWENMSywgTVgzMV9QSU5fQ1NJX1ZTWU5DX19DU0lfVlNZTkMsCiAJTVgzMV9QSU5fR1BJTzNfMF9fR1BJTzNfMCwgTVgzMV9QSU5fR1BJTzNfMV9fR1BJTzNfMSwKIAlNWDMxX1BJTl9UWEQyX19HUElPMV8yOCwKLQkvKiBVU0IgT1RHICovCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEExX19VU0JPVEdfREFUQTEsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEyX19VU0JPVEdfREFUQTIsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE0X19VU0JPVEdfREFUQTQsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE1X19VU0JPVEdfREFUQTUsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE3X19VU0JPVEdfREFUQTcsCi0JTVgzMV9QSU5fVVNCT1RHX0NMS19fVVNCT1RHX0NMSywgTVgzMV9QSU5fVVNCT1RHX0RJUl9fVVNCT1RHX0RJUiwKLQlNWDMxX1BJTl9VU0JPVEdfTlhUX19VU0JPVEdfTlhULCBNWDMxX1BJTl9VU0JPVEdfU1RQX19VU0JPVEdfU1RQLAotCU1YMzFfUElOX1VTQl9PQ19fR1BJTzFfMzAsCisJLyogZHNQSUMgcmVzZXRzICovCisJTVgzMV9QSU5fU1RYRDVfX0dQSU8xXzIxLCBNWDMxX1BJTl9TUlhENV9fR1BJTzFfMjIsCiB9OwogCiAjZGVmaW5lIFNESEMyX0NEIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX0RJT1IpCkBAIC0xMTUsMzEgKzEwNCwyMCBAQAogCS5leGl0CT0gbWFyeGJvdF9zZGhjMl9leGl0LAogfTsKIAotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKLQkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCi0JLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VMUEksCi19OworI2RlZmluZSBUUlNMQVRfUlNUX0IJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TVFhENSkKKyNkZWZpbmUgRFNQSUNTX1JTVF9CCUlPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU1JYRDUpCiAKLSNkZWZpbmUgT1RHX1BBRF9DRkcgKFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QpCi0jZGVmaW5lIE9UR19FTl9CIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fVVNCX09DKQotCi1zdGF0aWMgdm9pZCBtYXJ4Ym90X3VzYm90Z19pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBkc3BpY3NfcmVzZXRzX2luaXQodm9pZCkKIHsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTAsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTEsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTIsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTMsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTQsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTUsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTYsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTcsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfQ0xLLCBPVEdfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RJUiwgT1RHX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19OWFQsIE9UR19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfU1RQLCBPVEdfUEFEX0NGRyk7CisJaWYgKCFncGlvX3JlcXVlc3QoVFJTTEFUX1JTVF9CLCAidHJhbnNsYXRvci1yc3QiKSkgeworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVFJTTEFUX1JTVF9CLCAxKTsKKwkJZ3Bpb19leHBvcnQoVFJTTEFUX1JTVF9CLCBmYWxzZSk7CisJfQogCi0JZ3Bpb19yZXF1ZXN0KE9UR19FTl9CLCAidXNiLXVkYy1lbiIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChPVEdfRU5fQiwgMCk7CisJaWYgKCFncGlvX3JlcXVlc3QoRFNQSUNTX1JTVF9CLCAiZHNwaWNzLXJzdCIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChEU1BJQ1NfUlNUX0IsIDEpOworCQlncGlvX2V4cG9ydChEU1BJQ1NfUlNUX0IsIGZhbHNlKTsKKwl9CiB9CiAKIC8qCkBAIC0xNTIsOCArMTMwLDcgQEAKIAlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhtYXJ4Ym90X3BpbnMsIEFSUkFZX1NJWkUobWFyeGJvdF9waW5zKSwKIAkJIm1hcnhib3QiKTsKIAotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMSwgJnNkaGMyX3BkYXRhKTsKKwlkc3BpY3NfcmVzZXRzX2luaXQoKTsKIAotCW1hcnhib3RfdXNib3RnX2luaXQoKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZ1c2JfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMSwgJnNkaGMyX3BkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCmluZGV4IDJhMmRhNDcuLjkyNDNkZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYwpAQCAtMTYsOSArMTYsMTIgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KQEAgLTM2LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL214MzEuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKIApAQCAtNTUsNiArNTksMjYgQEAKIAlNWDMxX1BJTl9TRDFfREFUQTFfX1NEMV9EQVRBMSwgTVgzMV9QSU5fU0QxX0RBVEEwX19TRDFfREFUQTAsCiAJTVgzMV9QSU5fU0QxX0NMS19fU0QxX0NMSywgTVgzMV9QSU5fU0QxX0NNRF9fU0QxX0NNRCwKIAlNWDMxX1BJTl9BVEFfQ1MwX19HUElPM18yNiwgTVgzMV9QSU5fQVRBX0NTMV9fR1BJTzNfMjcsCisJLyogVVNCIHJlc2V0ICovCisJTVgzMV9QSU5fR1BJTzFfMF9fR1BJTzFfMCwKKwkvKiBVU0IgT1RHICovCisJTVgzMV9QSU5fVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEExX19VU0JPVEdfREFUQTEsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEEyX19VU0JPVEdfREFUQTIsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE0X19VU0JPVEdfREFUQTQsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE1X19VU0JPVEdfREFUQTUsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE3X19VU0JPVEdfREFUQTcsCisJTVgzMV9QSU5fVVNCT1RHX0NMS19fVVNCT1RHX0NMSywgTVgzMV9QSU5fVVNCT1RHX0RJUl9fVVNCT1RHX0RJUiwKKwlNWDMxX1BJTl9VU0JPVEdfTlhUX19VU0JPVEdfTlhULCBNWDMxX1BJTl9VU0JPVEdfU1RQX19VU0JPVEdfU1RQLAorCU1YMzFfUElOX1VTQl9PQ19fR1BJTzFfMzAsCisJLyogTEVEcyAqLworCU1YMzFfUElOX1NWRU4wX19HUElPMl8wLCBNWDMxX1BJTl9TVFgwX19HUElPMl8xLAorCU1YMzFfUElOX1NSWDBfX0dQSU8yXzIsIE1YMzFfUElOX1NJTVBEMF9fR1BJTzJfMywKKwkvKiBTRUwgKi8KKwlNWDMxX1BJTl9EVFJfRENFMV9fR1BJTzJfOCwgTVgzMV9QSU5fRFNSX0RDRTFfX0dQSU8yXzksCisJTVgzMV9QSU5fUklfRENFMV9fR1BJTzJfMTAsIE1YMzFfUElOX0RDRF9EQ0UxX19HUElPMl8xMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG14MzFtb2JvYXJkX2ZsYXNoX2RhdGEgPSB7CkBAIC0xNDIsOCArMTY2LDEwOSBAQAogCS5leGl0CT0gbW9ib2FyZF9zZGhjMV9leGl0LAogfTsKIAorLyoKKyAqIHRoaXMgcGluIGlzIGRlZGljYXRlZCBmb3IgYWxsIG14MzFtb2JvYXJkIHN5c3RlbXMsIHNvIHdlIGRvIGl0IGhlcmUKKyAqLworI2RlZmluZSBVU0JfUkVTRVRfQglJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzApCisKK3N0YXRpYyB2b2lkIHVzYl94Y3ZyX3Jlc2V0KHZvaWQpCit7CisJZ3Bpb19yZXF1ZXN0KFVTQl9SRVNFVF9CLCAidXNiLXJlc2V0Iik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFVTQl9SRVNFVF9CLCAwKTsKKwltZGVsYXkoMSk7CisJZ3Bpb19zZXRfdmFsdWUoVVNCX1JFU0VUX0IsIDEpOworfQorCisjZGVmaW5lIFVTQl9QQURfQ0ZHIChQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9IWVNfQ01PUyB8IFwKKwkJCVBBRF9DVExfT0RFX0NNT1MgfCBQQURfQ1RMXzEwMEtfUFUpCisKKyNkZWZpbmUgT1RHX0VOX0IgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9VU0JfT0MpCisKK3N0YXRpYyB2b2lkIG1vYm9hcmRfdXNib3RnX2luaXQodm9pZCkKK3sKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTAsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTEsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTIsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTMsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTQsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTUsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTYsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTcsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfQ0xLLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RJUiwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19OWFQsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfU1RQLCBVU0JfUEFEX0NGRyk7CisKKwlncGlvX3JlcXVlc3QoT1RHX0VOX0IsICJ1c2ItdWRjLWVuIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9UR19FTl9CLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKKwkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCisJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VMUEksCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIG14MzFtb2JvYXJkX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lIAk9ICJjb3JlYm9hcmQtbGVkLTA6cmVkOnJ1bm5pbmciLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJCS5ncGlvIAk9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU1ZFTjApLAorCX0sIHsKKwkJLm5hbWUJPSAiY29yZWJvYXJkLWxlZC0xOnJlZCIsCisJCS5ncGlvCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TVFgwKSwKKwl9LCB7CisJCS5uYW1lCT0gImNvcmVib2FyZC1sZWQtMjpyZWQiLAorCQkuZ3Bpbwk9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU1JYMCksCisJfSwgeworCQkubmFtZQk9ICJjb3JlYm9hcmQtbGVkLTM6cmVkIiwKKwkJLmdwaW8JPSBJT01VWF9UT19HUElPKE1YMzFfUElOX1NJTVBEMCksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBteDMxbW9ib2FyZF9sZWRfcGRhdGEgPSB7CisJLm51bV9sZWRzIAk9IEFSUkFZX1NJWkUobXgzMW1vYm9hcmRfbGVkcyksCisJLmxlZHMJCT0gbXgzMW1vYm9hcmRfbGVkcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MzFtb2JvYXJkX2xlZHNfZGV2aWNlID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXgzMW1vYm9hcmRfbGVkX3BkYXRhLAorCX0sCit9OworCisjZGVmaW5lIFNFTDAgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EVFJfRENFMSkKKyNkZWZpbmUgU0VMMSBJT01VWF9UT19HUElPKE1YMzFfUElOX0RTUl9EQ0UxKQorI2RlZmluZSBTRUwyIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fUklfRENFMSkKKyNkZWZpbmUgU0VMMyBJT01VWF9UT19HUElPKE1YMzFfUElOX0RDRF9EQ0UxKQorCitzdGF0aWMgdm9pZCBteDMxbW9ib2FyZF9pbml0X3NlbF9ncGlvcyh2b2lkKQoreworCWlmICghZ3Bpb19yZXF1ZXN0KFNFTDAsICJzZWwwIikpIHsKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0VMMCk7CisJCWdwaW9fZXhwb3J0KFNFTDAsIHRydWUpOworCX0KKworCWlmICghZ3Bpb19yZXF1ZXN0KFNFTDEsICJzZWwxIikpIHsKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0VMMSk7CisJCWdwaW9fZXhwb3J0KFNFTDEsIHRydWUpOworCX0KKworCWlmICghZ3Bpb19yZXF1ZXN0KFNFTDIsICJzZWwyIikpIHsKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0VMMik7CisJCWdwaW9fZXhwb3J0KFNFTDIsIHRydWUpOworCX0KKworCWlmICghZ3Bpb19yZXF1ZXN0KFNFTDMsICJzZWwzIikpIHsKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0VMMyk7CisJCWdwaW9fZXhwb3J0KFNFTDMsIHRydWUpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZteDMxbW9ib2FyZF9mbGFzaCwKKwkmbXgzMW1vYm9hcmRfbGVkc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IG14MzFtb2JvYXJkX2Jhc2Vib2FyZDsKQEAgLTE2MiwxMSArMjg3LDE4IEBACiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTQsICZ1YXJ0X3BkYXRhKTsKIAorCW14MzFtb2JvYXJkX2luaXRfc2VsX2dwaW9zKCk7CisKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTAsICZtb2JvYXJkX2kyYzBfcGRhdGEpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJm1vYm9hcmRfaTJjMV9wZGF0YSk7CiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTAsICZzZGhjMV9wZGF0YSk7CiAKKwl1c2JfeGN2cl9yZXNldCgpOworCisJbW9ib2FyZF91c2JvdGdfaW5pdCgpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJnVzYl9wZGF0YSk7CisKIAlzd2l0Y2ggKG14MzFtb2JvYXJkX2Jhc2Vib2FyZCkgewogCWNhc2UgTVgzMU5PQk9BUkQ6CiAJCWJyZWFrOwpAQCAtMTk3LDcgKzMyOSw3IEBACiAJLmlvX3BnX29mZnN0CT0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgzMV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJm14MzFtb2JvYXJkX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYwppbmRleCBjMTk4MzhkLi4wZjdhMmYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvICAgICAgICAgPSBteDMxcGRrX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCisJLmluaXRfaXJxICAgICAgID0gbXgzMV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKIAkudGltZXIgICAgICAgICAgPSAmbXgzMXBka190aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDM1cGRrLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDM1cGRrLmMKaW5kZXggNmQxNTM3NC4uNmZmMTg2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzNXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzVwZGsuYwpAQCAtOTgsNyArOTgsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MzVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDM1X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDM1cGRrX3RpbWVyLAogTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKaW5kZXggODQwY2ZkYTMuLjZjYmFhYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL3BsYXRmb3JtL3NqYTEwMDAuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KIApAQCAtMTY5LDYgKzE3MCw4IEBACiAJTVgzMV9QSU5fQ1NJX01DTEtfX0NTSV9NQ0xLLAogCU1YMzFfUElOX0NTSV9QSVhDTEtfX0NTSV9QSVhDTEssCiAJTVgzMV9QSU5fQ1NJX1ZTWU5DX19DU0lfVlNZTkMsCisJLyogR1BJTyAqLworCUlPTVVYX01PREUoTVgzMV9QSU5fQVRBX0RNQUNLLCBJT01VWF9DT05GSUdfR1BJTyksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwY20wMzdfZmxhc2hfZGF0YSA9IHsKQEAgLTI0NCwxMiArMjQ3LDExIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MTF4X3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKKwl7CiAJCS5zdGFydAkJPSBDUzFfQkFTRV9BRERSICsgMHgzMDAsCiAJCS5lbmQJCT0gQ1MxX0JBU0VfQUREUiArIDB4MzAwICsgU1pfNjRLIC0gMSwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLnN0YXJ0CQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKIAkJLmVuZAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzNfMSksCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLApAQCAtMzM5LDggKzM0MSw3IEBACiAJCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KIAkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAogCX0sIHsKLQkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCi0JCS50eXBlID0gInBjZjg1NjMiLAorCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAogCX0KIH07CiAKQEAgLTUxNSw2ICs1MTYsMzMgQEAKIAkubnVtX21vZGVzCT0gQVJSQVlfU0laRShmYl9tb2RlZGIpLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY205NzBfc2phMTAwMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgID0gQ1M1X0JBU0VfQUREUiwKKwkJLmVuZCAgICAgPSBDUzVfQkFTRV9BRERSICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ICAgPSBJT01VWF9UT19JUlEoSU9NVVhfUElOKDQ4LCAxMDUpKSwKKwkJLmVuZCAgICAgPSBJT01VWF9UT19JUlEoSU9NVVhfUElOKDQ4LCAxMDUpKSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJfSwKK307CisKK3N0cnVjdCBzamExMDAwX3BsYXRmb3JtX2RhdGEgcGNtOTcwX3NqYTEwMDBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2xvY2sJCT0gMTYwMDAwMDAgLyAyLAorCS5vY3IJCT0gMHg0MCB8IDB4MTgsCisJLmNkcgkJPSAweDQwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtOTcwX3NqYTEwMDAgPSB7CisJLm5hbWUgPSAic2phMTAwMF9wbGF0Zm9ybSIsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtOTcwX3NqYTEwMDBfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9IHBjbTk3MF9zamExMDAwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUocGNtOTcwX3NqYTEwMDBfcmVzb3VyY2VzKSwKK307CisKIC8qCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwpAQCAtNTc1LDYgKzYwMyw4IEBACiAKIAlpZiAoIXBjbTAzN19jYW1lcmFfYWxsb2NfZG1hKDQgKiAxMDI0ICogMTAyNCkpCiAJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19jYW1lcmEsICZjYW1lcmFfcGRhdGEpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY205NzBfc2phMTAwMCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wMzdfdGltZXJfaW5pdCh2b2lkKQpAQCAtNTkyLDcgKzYyMiw3IEBACiAJLmlvX3BnX29mZnN0CT0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgzMV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJnBjbTAzN190aW1lciwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9wY20wNDMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL3BjbTA0My5jCmluZGV4IDhkMjdjMzIuLmUxOGEyMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTA0My5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL3BjbTA0My5jCkBAIC0xMzMsOCArMTMzLDcgQEAKIAkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLwogCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCiAJfSwgewotCQlJMkNfQk9BUkRfSU5GTygicnRjLXBjZjg1NjMiLCAweDUxKSwKLQkJLnR5cGUgPSAicGNmODU2MyIsCisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCiAJfQogfTsKICNlbmRpZgpAQCAtMjAzLDcgKzIwMiw4IEBACiAJTVgzNV9QQURfRDNfVlNZTkNfX0lQVV9ESVNQQl9EM19WU1lOQywKIAlNWDM1X1BBRF9EM19SRVZfX0lQVV9ESVNQQl9EM19SRVYsCiAJTVgzNV9QQURfRDNfQ0xTX19JUFVfRElTUEJfRDNfQ0xTLAotCU1YMzVfUEFEX0QzX1NQTF9fSVBVX0RJU1BCX0QzX1NQTAorCS8qIGdwaW8gKi8KKwlNWDM1X1BBRF9BVEFfQ1MwX19HUElPMl82LAogfTsKIAogLyoKQEAgLTI0NSw3ICsyNDUsNyBAQAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAogCS5tYXBfaW8gICAgICAgICA9IG14MzVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9pcnEgICAgICAgPSBteDM1X2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZwY20wNDNfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcW9uZy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvcW9uZy5jCmluZGV4IDgyYjMxYzQuLjA0NDUxMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9xb25nLmMKQEAgLTgxLDEzICs4MSwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRuZXRfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0geworCXsKIAkJLm5hbWUJPSAiZG5ldC1tZW1vcnkiLAogCQkuc3RhcnQJPSBRT05HX0RORVRfQkFTRUFERFIsCiAJCS5lbmQJPSBRT05HX0RORVRfQkFTRUFERFIgKyBRT05HX0RORVRfU0laRSAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0geworCX0sIHsKIAkJLnN0YXJ0CT0gUU9OR19GUEdBX0lSUSwKIAkJLmVuZAk9IFFPTkdfRlBHQV9JUlEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLApAQCAtMjgwLDcgKzI3OSw3IEBACiAJLmlvX3BnX29mZnN0ICAgID0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCiAJLm1hcF9pbyAgICAgICAgID0gbXgzMV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAorCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJnFvbmdfdGltZXIsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWZhMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAoraWYgQVJDSF9NWEM5MTIzMQorCitjb21tZW50ICJNWEM5MTIzMSBwbGF0Zm9ybXM6IgorCitjb25maWcgTUFDSF9NQUdYX1pONQorCWJvb2wgIlN1cHBvcnQgTW90b3JvbGEgWm41IEdTTSBwaG9uZSIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1vdG9yb2xhIFpuNSBHU00gcGhvbmUuCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFkNWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK29iai15CTo9IG1tLm8gY2xvY2subyBkZXZpY2VzLm8gc3lzdGVtLm8gaW9tdXgubworb2JqLSQoQ09ORklHX01BQ0hfTUFHWF9aTjUpICs9IG1hZ3gtem41Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTM5YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICAgenJlbGFkZHIteQk6PSAweDkwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4OTAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHg5MDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZmEzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2Nsb2NrLmMKQEAgLTAsMCArMSw2NDIgQEAKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKworI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlICJjcm1fcmVncy5oIgorCisjZGVmaW5lIENSTV9TTUFMTF9ESVZJREVSKGJhc2UsIG5hbWUpIFwKKwljcm1fc21hbGxfZGl2aWRlcihiYXNlLCBcCisJCQkgIGJhc2UgIyMgXyAjIyBuYW1lICMjIF9PRkZTRVQsIFwKKwkJCSAgYmFzZSAjIyBfICMjIG5hbWUgIyMgX01BU0spCisjZGVmaW5lIENSTV8xRElWSURFUihiYXNlLCBuYW1lKSBcCisJY3JtX2RpdmlkZXIoYmFzZSwgXAorCQkgICAgYmFzZSAjIyBfICMjIG5hbWUgIyMgX09GRlNFVCwgXAorCQkgICAgYmFzZSAjIyBfICMjIG5hbWUgIyMgX01BU0ssIDEpCisjZGVmaW5lIENSTV8xNkRJVklERVIoYmFzZSwgbmFtZSkgXAorCWNybV9kaXZpZGVyKGJhc2UsIFwKKwkJICAgIGJhc2UgIyMgXyAjIyBuYW1lICMjIF9PRkZTRVQsIFwKKwkJICAgIGJhc2UgIyMgXyAjIyBuYW1lICMjIF9NQVNLLCAxNikKKworc3RhdGljIHUzMiBjcm1fc21hbGxfZGl2aWRlcih2b2lkIF9faW9tZW0gKnJlZywgdTggb2Zmc2V0LCB1MzIgbWFzaykKK3sKKwlzdGF0aWMgY29uc3QgdTMyIGNybV9zbWFsbF9kaXZpZGVyc1tdID0geworCQkyLCAzLCA0LCA1LCA2LCA4LCAxMCwgMTIKKwl9OworCXU4IGlkeDsKKworCWlkeCA9IChfX3Jhd19yZWFkbChyZWcpICYgbWFzaykgPj4gb2Zmc2V0OworCWlmIChpZHggPiA3KQorCQlyZXR1cm4gMTsKKworCXJldHVybiBjcm1fc21hbGxfZGl2aWRlcnNbaWR4XTsKK30KKworc3RhdGljIHUzMiBjcm1fZGl2aWRlcih2b2lkIF9faW9tZW0gKnJlZywgdTggb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHopCit7CisJdTMyIGRpdjsKKwlkaXYgPSAoX19yYXdfcmVhZGwocmVnKSAmIG1hc2spID4+IG9mZnNldDsKKwlyZXR1cm4gZGl2ID8gZGl2IDogejsKK30KKworc3RhdGljIGludCBfY2xrXzFiaXRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgfD0gMSA8PCBjbGstPmVuYWJsZV9zaGlmdDsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9jbGtfMWJpdF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgJj0gfigxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworfQorCitzdGF0aWMgaW50IF9jbGtfM2JpdF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyB8PSAweDcgPDwgY2xrLT5lbmFibGVfc2hpZnQ7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfY2xrXzNiaXRfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnICY9IH4oMHg3IDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBja2loX3JhdGU7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19ja2loX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2tpaF9yYXRlOworfQorCitzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBjbGtfY2tpaF9nZXRfcmF0ZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19ja2loX3gyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMiAqIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfeDJfY2xrID0geworCS5wYXJlbnQgPSAmY2tpaF9jbGssCisJLmdldF9yYXRlID0gY2xrX2NraWhfeDJfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY2tpbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIENLSUxfQ0xLX0ZSRVE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNraWxfY2xrID0geworCS5nZXRfcmF0ZSA9IGNsa19ja2lsX2dldF9yYXRlLAorfTsKKworLyogcGxscyBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBjbGsgbWN1X3BsbF9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBkc3BfcGxsX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9wbGxfY2xrOworCitzdGF0aWMgc3RydWN0IGNsayAqcGxsX2Nsayh1OCBzZWwpCit7CisJc3dpdGNoIChzZWwpIHsKKwljYXNlIDA6CisJCXJldHVybiAmbWN1X3BsbF9jbGs7CisJY2FzZSAxOgorCQlyZXR1cm4gJmRzcF9wbGxfY2xrOworCWNhc2UgMjoKKwkJcmV0dXJuICZ1c2JfcGxsX2NsazsKKwl9CisJQlVHKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBsbF9iYXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrID09ICZtY3VfcGxsX2NsaykKKwkJcmV0dXJuIE1YQ19QTEwwX0JBU0U7CisJZWxzZSBpZiAoY2xrID09ICZkc3BfcGxsX2NsaykKKwkJcmV0dXJuIE1YQ19QTEwxX0JBU0U7CisJZWxzZSBpZiAoY2xrID09ICZ1c2JfcGxsX2NsaykKKwkJcmV0dXJuIE1YQ19QTEwyX0JBU0U7CisJQlVHKCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWNvbnN0IHZvaWQgX19pb21lbSAqcGxsYmFzZTsKKwl1bnNpZ25lZCBsb25nIGRwX29wLCBkcF9tZmQsIGRwX21mbiwgcGxsX2hmc20sIHJlZl9jbGssIG1maTsKKwlsb25nIG1mbiwgbWZuX2FicywgbWZkLCBwZGY7CisJczY0IHRlbXA7CisJcGxsYmFzZSA9IHBsbF9iYXNlKGNsayk7CisKKwlwbGxfaGZzbSA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCkgJiBNWENfUExMX0RQX0NUTF9IRlNNOworCWlmIChwbGxfaGZzbSA9PSAwKSB7CisJCWRwX29wID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfT1ApOworCQlkcF9tZmQgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9NRkQpOworCQlkcF9tZm4gPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9NRk4pOworCX0gZWxzZSB7CisJCWRwX29wID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfSEZTX09QKTsKKwkJZHBfbWZkID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfSEZTX01GRCk7CisJCWRwX21mbiA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19NRk4pOworCX0KKworCXBkZiA9IGRwX29wICYgTVhDX1BMTF9EUF9PUF9QREZfTUFTSzsKKwltZmkgPSAoZHBfb3AgPj4gTVhDX1BMTF9EUF9PUF9NRklfT0ZGU0VUKSAmIE1YQ19QTExfRFBfT1BfUERGX01BU0s7CisJbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7CisJbWZkID0gZHBfbWZkICYgTVhDX1BMTF9EUF9NRkRfTUFTSzsKKwltZm4gPSBkcF9tZm4gJiBNWENfUExMX0RQX01GTl9NQVNLOworCW1mbiA9IChtZm4gPD0gMHg0MDAwMDAwKSA/IG1mbiA6IChtZm4gLSAweDEwMDAwMDAwKTsKKworCWlmIChtZm4gPCAwKQorCQltZm5fYWJzID0gLW1mbjsKKwllbHNlCisJCW1mbl9hYnMgPSBtZm47CisKKy8qIFhYWDogYWN0dWFsbHkgdGhpcyBhc3VtZXMgdGhhdCBja2loIGlzIGZlZCB0byBwbGwsIGJ1dCBzcGVjIHNheXMKKyAqIHRoYXQgY2tpaF94MiBpcyBhbHNvIHBvc3NpYmxlLiBuZWVkIHRvIGNoZWNrIHRoaXMgb3V0LgorICovCisJcmVmX2NsayA9IGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspOworCisJcmVmX2NsayAqPSAyOworCXJlZl9jbGsgLz0gcGRmICsgMTsKKworCXRlbXAgPSAodTY0KSByZWZfY2xrICogbWZuX2FiczsKKwlkb19kaXYodGVtcCwgbWZkKTsKKwlpZiAobWZuIDwgMCkKKwkJdGVtcCA9IC10ZW1wOworCXRlbXAgKz0gcmVmX2NsayAqIG1maTsKKworCXJldHVybiB0ZW1wOworfQorCitzdGF0aWMgaW50IGNsa19wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl2b2lkIF9faW9tZW0gKmN0bDsKKwl1MzIgcmVnOworCisJY3RsID0gcGxsX2Jhc2UoY2xrKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChjdGwpOworCXJlZyB8PSAoTVhDX1BMTF9EUF9DVExfUlNUIHwgTVhDX1BMTF9EUF9DVExfVVBFTik7CisJX19yYXdfd3JpdGVsKHJlZywgY3RsKTsKKwlkbyB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKGN0bCk7CisJfSB3aGlsZSAoKHJlZyAmIE1YQ19QTExfRFBfQ1RMX0xSRikgIT0gTVhDX1BMTF9EUF9DVExfTFJGKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrX3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl2b2lkIF9faW9tZW0gKmN0bDsKKwl1MzIgcmVnOworCisJY3RsID0gcGxsX2Jhc2UoY2xrKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChjdGwpOworCXJlZyAmPSB+KE1YQ19QTExfRFBfQ1RMX1JTVCB8IE1YQ19QTExfRFBfQ1RMX1VQRU4pOworCV9fcmF3X3dyaXRlbChyZWcsIGN0bCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9wbGxfY2xrID0geworCS5wYXJlbnQgPSAmY2tpaF9jbGssCisJLmdldF9yYXRlID0gY2xrX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gY2xrX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfcGxsX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BfcGxsX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19wbGxfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IGNsa19wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gY2xrX3BsbF9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX3BsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfcGxsX2dldF9yYXRlLAorCS5lbmFibGUgPSBjbGtfcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGNsa19wbGxfZGlzYWJsZSwKK307CisvKiBwbGxzIHN0dWZmIGVuZCAqLworCisvKiBhcF9yZWZfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayBhcF9yZWZfY2xrOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfYXBfcmVmX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgYXNjc3IsIGFjc3I7CisJdTggYXBfcGF0X3JlZl9kaXZfMiwgYXBfaXNlbCwgYWNzLCBhZHM7CisKKwlhc2NzciA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BU0NTUik7CisJYWNzciA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BQ1NSKTsKKworCS8qIDAgZm9yIGNraWgsIDEgZm9yIGNraWgqMiAqLworCWFwX2lzZWwgPSBhc2NzciAmIE1YQ19DUk1BUF9BU0NTUl9BUElTRUw7CisJLyogcmVnIGRpdmlkZXIgKi8KKwlhcF9wYXRfcmVmX2Rpdl8yID0gKGFzY3NyID4+IE1YQ19DUk1BUF9BU0NTUl9BUF9QQVRESVYyX09GRlNFVCkgJiAweDE7CisJLyogdW5kb2N1bWVudGVkLCAxIGZvciBkaXNhYmxpbmcgZGl2aWRlciAqLworCWFkcyA9IChhY3NyID4+IE1YQ19DUk1BUF9BQ1NSX0FEU19PRkZTRVQpICYgMHgxOworCS8qIDAgZm9yIHBhdF9yZWYsIDEgZm9yIGRpdmlkZXIgb3V0ICovCisJYWNzID0gYWNzciAmIE1YQ19DUk1BUF9BQ1NSX0FDUzsKKworCWlmIChhY3MgJiAhYWRzKQorCQkvKiB1c2UgZGl2aWRlZCBjbG9jayAqLworCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChhcF9wYXRfcmVmX2Rpdl8yID8gMiA6IDEpOworCisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgKiAoYXBfaXNlbCA/IDIgOiAxKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgYXBfcmVmX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19hcF9yZWZfZ2V0X3JhdGUsCit9OworLyogYXBfcmVmX2NsayBzdHVmZiBlbmQgKi8KKworLyogYXBfcHJlX2Rmc19jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwX3ByZV9kZnNfY2xrOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfYXBfcHJlX2Rmc19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGFjc3IsIGFzY3NyOworCisJYWNzciA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BQ1NSKTsKKwlhc2NzciA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BU0NTUik7CisKKwlpZiAoYWNzciAmIE1YQ19DUk1BUF9BQ1NSX0FDUykgeworCQl1OCBzZWw7CisJCXNlbCA9IChhc2NzciAmIE1YQ19DUk1BUF9BU0NTUl9BUFNFTF9NQVNLKSA+PgorCQkJTVhDX0NSTUFQX0FTQ1NSX0FQU0VMX09GRlNFVDsKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZShwbGxfY2xrKHNlbCkpIC8KKwkJCUNSTV9TTUFMTF9ESVZJREVSKE1YQ19DUk1BUF9BQ0RSLCBBUk1ESVYpOworCX0KKwlyZXR1cm4gY2xrX2dldF9yYXRlKCZhcF9yZWZfY2xrKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgYXBfcHJlX2Rmc19jbGsgPSB7CisJLmdldF9yYXRlID0gY2xrX2FwX3ByZV9kZnNfZ2V0X3JhdGUsCit9OworLyogYXBfcHJlX2Rmc19jbGsgc3R1ZmYgZW5kICovCisKKy8qIHVzYl9jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGs7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfdXNiX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGFjc3IsIGFzY3NyOworCisJYWNzciA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BQ1NSKTsKKwlhc2NzciA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BU0NTUik7CisKKwlpZiAoYWNzciAmIE1YQ19DUk1BUF9BQ1NSX0FDUykgeworCQl1OCBzZWw7CisJCXNlbCA9IChhc2NzciAmIE1YQ19DUk1BUF9BU0NTUl9VU0JTRUxfTUFTSykgPj4KKwkJCU1YQ19DUk1BUF9BU0NTUl9VU0JTRUxfT0ZGU0VUOworCQlyZXR1cm4gcGxsX2NsayhzZWwpOworCX0KKwlyZXR1cm4gJmFwX3JlZl9jbGs7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa191c2JfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8KKwkJQ1JNX1NNQUxMX0RJVklERVIoTVhDX0NSTUFQX0FDREVSMiwgVVNCRElWKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2NsayA9IHsKKwkuZW5hYmxlX3JlZyA9IE1YQ19DUk1BUF9BQ0RFUjIsCisJLmVuYWJsZV9zaGlmdCA9IE1YQ19DUk1BUF9BQ0RFUjJfVVNCRU5fT0ZGU0VULAorCS5nZXRfcmF0ZSA9IGNsa191c2JfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfMWJpdF9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrXzFiaXRfZGlzYWJsZSwKK307CisvKiB1c2JfY2xrIHN0dWZmIGVuZCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfaXBnX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIENSTV8xNkRJVklERVIoTVhDX0NSTUFQX0FDRFIsIElQRElWKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2FoYl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLworCQlDUk1fMTZESVZJREVSKE1YQ19DUk1BUF9BQ0RSLCBBSEJESVYpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrID0geworCS5wYXJlbnQgPSAmYXBfcHJlX2Rmc19jbGssCisJLmdldF9yYXRlID0gY2xrX2lwZ19nZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7CisJLnBhcmVudCA9ICZhcF9wcmVfZGZzX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfYWhiX2dldF9yYXRlLAorfTsKKworLyogcGVyY2xrX2NsayBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBjbGsgcGVyY2xrX2NsazsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3BlcmNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGFjZGVyMjsKKworCWFjZGVyMiA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BQ0RFUjIpOworCWlmIChhY2RlcjIgJiBNWENfQ1JNQVBfQUNERVIyX0JBVURfSVNFTF9NQVNLKQorCQlyZXR1cm4gMiAqIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgcGVyY2xrX2NsayA9IHsKKwkucGFyZW50ID0gJmNraWhfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19wZXJjbGtfZ2V0X3JhdGUsCit9OworLyogcGVyY2xrX2NsayBzdHVmZiBlbmQgKi8KKworLyogdWFydF9jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrW107CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa191YXJ0X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgZGl2OworCisJc3dpdGNoIChjbGstPmlkKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJZGl2ID0gQ1JNX1NNQUxMX0RJVklERVIoTVhDX0NSTUFQX0FDREVSMiwgQkFVRERJVik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGl2ID0gQ1JNX1NNQUxMX0RJVklERVIoTVhDX0NSTUFQX0FQUkEsIFVBUlQzRElWKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworfQorCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZwZXJjbGtfY2xrLAorCQkuZW5hYmxlX3JlZyA9IE1YQ19DUk1BUF9BUFJBLAorCQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NSTUFQX0FQUkFfVUFSVDFFTl9PRkZTRVQsCisJCS5nZXRfcmF0ZSA9IGNsa191YXJ0X2dldF9yYXRlLAorCQkuZW5hYmxlID0gX2Nsa18xYml0X2VuYWJsZSwKKwkJLmRpc2FibGUgPSBfY2xrXzFiaXRfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmcGVyY2xrX2NsaywKKwkJLmVuYWJsZV9yZWcgPSBNWENfQ1JNQVBfQVBSQSwKKwkJLmVuYWJsZV9zaGlmdCA9IE1YQ19DUk1BUF9BUFJBX1VBUlQyRU5fT0ZGU0VULAorCQkuZ2V0X3JhdGUgPSBjbGtfdWFydF9nZXRfcmF0ZSwKKwkJLmVuYWJsZSA9IF9jbGtfMWJpdF9lbmFibGUsCisJCS5kaXNhYmxlID0gX2Nsa18xYml0X2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAyLAorCQkucGFyZW50ID0gJnBlcmNsa19jbGssCisJCS5lbmFibGVfcmVnID0gTVhDX0NSTUFQX0FQUkEsCisJCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQVBSQV9VQVJUM0VOX09GRlNFVCwKKwkJLmdldF9yYXRlID0gY2xrX3VhcnRfZ2V0X3JhdGUsCisJCS5lbmFibGUgPSBfY2xrXzFiaXRfZW5hYmxlLAorCQkuZGlzYWJsZSA9IF9jbGtfMWJpdF9kaXNhYmxlLAorCX0sCit9OworLyogdWFydF9jbGsgc3R1ZmYgZW5kICovCisKKy8qIHNkaGNfY2xrIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGNsayBuZmNfY2xrOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfbmZjX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvCisJCUNSTV8xRElWSURFUihNWENfQ1JNQVBfQUNERVIyLCBORkNESVYpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBuZmNfY2xrID0geworCS5wYXJlbnQgPSAmYWhiX2NsaywKKwkuZW5hYmxlX3JlZyA9IE1YQ19DUk1BUF9BQ0RFUjIsCisJLmVuYWJsZV9zaGlmdCA9IE1YQ19DUk1BUF9BQ0RFUjJfTkZDRU5fT0ZGU0VULAorCS5nZXRfcmF0ZSA9IGNsa19uZmNfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfMWJpdF9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrXzFiaXRfZGlzYWJsZSwKK307CisvKiBzZGhjX2NsayBzdHVmZiBlbmQgKi8KKworLyogc2RoY19jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkaGNfY2xrW107CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc2RoY19wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBhcHJiOworCXU4IHNlbDsKKwl1MzIgbWFzazsKKwlpbnQgb2Zmc2V0OworCisJYXByYiA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BUFJCKTsKKworCXN3aXRjaCAoY2xrLT5pZCkgeworCWNhc2UgMDoKKwkJbWFzayA9IE1YQ19DUk1BUF9BUFJCX1NESEMxX0lTRUxfTUFTSzsKKwkJb2Zmc2V0ID0gTVhDX0NSTUFQX0FQUkJfU0RIQzFfSVNFTF9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWFzayA9IE1YQ19DUk1BUF9BUFJCX1NESEMyX0lTRUxfTUFTSzsKKwkJb2Zmc2V0ID0gTVhDX0NSTUFQX0FQUkJfU0RIQzJfSVNFTF9PRkZTRVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlzZWwgPSAoYXByYiAmIG1hc2spID4+IG9mZnNldDsKKworCXN3aXRjaCAoc2VsKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gJmNraWhfY2xrOworCWNhc2UgMToKKwkJcmV0dXJuICZja2loX3gyX2NsazsKKwl9CisJcmV0dXJuICZ1c2JfY2xrOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfc2RoY19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGRpdjsKKworCXN3aXRjaCAoY2xrLT5pZCkgeworCWNhc2UgMDoKKwkJZGl2ID0gQ1JNX1NNQUxMX0RJVklERVIoTVhDX0NSTUFQX0FQUkIsIFNESEMxX0RJVik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGl2ID0gQ1JNX1NNQUxMX0RJVklERVIoTVhDX0NSTUFQX0FQUkIsIFNESEMyX0RJVik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2OworfQorCitzdGF0aWMgaW50IGNsa19zZGhjX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGFtbHBtcmUxLCBhcHJiOworCisJYW1scG1yZTEgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQU1MUE1SRTEpOworCWFwcmIgPSBfX3Jhd19yZWFkbChNWENfQ1JNQVBfQVBSQik7CisJc3dpdGNoIChjbGstPmlkKSB7CisJY2FzZSAwOgorCQlhbWxwbXJlMSB8PSAoMHg3IDw8IE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTRfT0ZGU0VUKTsKKwkJYXByYiB8PSAoMHgxIDw8IE1YQ19DUk1BUF9BUFJCX1NESEMxRU5fT0ZGU0VUKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhbWxwbXJlMSB8PSAoMHg3IDw8IE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTVfT0ZGU0VUKTsKKwkJYXByYiB8PSAoMHgxIDw8IE1YQ19DUk1BUF9BUFJCX1NESEMyRU5fT0ZGU0VUKTsKKwkJYnJlYWs7CisJfQorCV9fcmF3X3dyaXRlbChhbWxwbXJlMSwgTVhDX0NSTUFQX0FNTFBNUkUxKTsKKwlfX3Jhd193cml0ZWwoYXByYiwgTVhDX0NSTUFQX0FQUkIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGtfc2RoY19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgYW1scG1yZTEsIGFwcmI7CisKKwlhbWxwbXJlMSA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BTUxQTVJFMSk7CisJYXByYiA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BUFJCKTsKKwlzd2l0Y2ggKGNsay0+aWQpIHsKKwljYXNlIDA6CisJCWFtbHBtcmUxICY9IH4oMHg3IDw8IE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTRfT0ZGU0VUKTsKKwkJYXByYiAmPSB+KDB4MSA8PCBNWENfQ1JNQVBfQVBSQl9TREhDMUVOX09GRlNFVCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYW1scG1yZTEgJj0gfigweDcgPDwgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FNV9PRkZTRVQpOworCQlhcHJiICY9IH4oMHgxIDw8IE1YQ19DUk1BUF9BUFJCX1NESEMyRU5fT0ZGU0VUKTsKKwkJYnJlYWs7CisJfQorCV9fcmF3X3dyaXRlbChhbWxwbXJlMSwgTVhDX0NSTUFQX0FNTFBNUkUxKTsKKwlfX3Jhd193cml0ZWwoYXByYiwgTVhDX0NSTUFQX0FQUkIpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBzZGhjX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLmdldF9yYXRlID0gY2xrX3NkaGNfZ2V0X3JhdGUsCisJCS5lbmFibGUgPSBjbGtfc2RoY19lbmFibGUsCisJCS5kaXNhYmxlID0gY2xrX3NkaGNfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5nZXRfcmF0ZSA9IGNsa19zZGhjX2dldF9yYXRlLAorCQkuZW5hYmxlID0gY2xrX3NkaGNfZW5hYmxlLAorCQkuZGlzYWJsZSA9IGNsa19zZGhjX2Rpc2FibGUsCisJfSwKK307CisvKiBzZGhjX2NsayBzdHVmZiBlbmQgKi8KKworLyogd2RvZ19jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkb2dfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGVfcmVnID0gTVhDX0NSTUFQX0FNTFBNUkQsCisJCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDdfT0ZGU0VULAorCQkuZW5hYmxlID0gX2Nsa18zYml0X2VuYWJsZSwKKwkJLmRpc2FibGUgPSBfY2xrXzNiaXRfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZV9yZWcgPSBNWENfQ1JNQVBfQU1MUE1SRCwKKwkJLmVuYWJsZV9zaGlmdCA9IE1YQ19DUk1BUF9BTUxQTVJEX01MUE1EM19PRkZTRVQsCisJCS5lbmFibGUgPSBfY2xrXzNiaXRfZW5hYmxlLAorCQkuZGlzYWJsZSA9IF9jbGtfM2JpdF9kaXNhYmxlLAorCX0sCit9OworLyogd2RvZ19jbGsgc3R1ZmYgZW5kICovCisKKy8qIGdwdF9jbGsgc3R1ZmYgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdF9jbGsgPSB7CisJLnBhcmVudCA9ICZpcGdfY2xrLAorCS5lbmFibGVfcmVnID0gTVhDX0NSTUFQX0FNTFBNUkMsCisJLmVuYWJsZV9zaGlmdCA9IE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DNF9PRkZTRVQsCisJLmVuYWJsZSA9IF9jbGtfM2JpdF9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrXzNiaXRfZGlzYWJsZSwKK307CisvKiBncHRfY2xrIHN0dWZmIGVuZCAqLworCisvKiBjc3BpX2NsayBzdHVmZiAqLworc3RhdGljIHN0cnVjdCBjbGsgY3NwaV9jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZV9yZWcgPSBNWENfQ1JNQVBfQU1MUE1SRTIsCisJCS5lbmFibGVfc2hpZnQgPSBNWENfQ1JNQVBfQU1MUE1SRTJfTUxQTUUwX09GRlNFVCwKKwkJLmVuYWJsZSA9IF9jbGtfM2JpdF9lbmFibGUsCisJCS5kaXNhYmxlID0gX2Nsa18zYml0X2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGVfcmVnID0gTVhDX0NSTUFQX0FNTFBNUkUxLAorCQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FNl9PRkZTRVQsCisJCS5lbmFibGUgPSBfY2xrXzNiaXRfZW5hYmxlLAorCQkuZGlzYWJsZSA9IF9jbGtfM2JpdF9kaXNhYmxlLAorCX0sCit9OworLyogY3NwaV9jbGsgc3R1ZmYgZW5kICovCisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKwl7IFwKKwkJLmRldl9pZCA9IGQsIFwKKwkJLmNvbl9pZCA9IG4sIFwKKwkJLmNsayA9ICZjLCBcCisJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0X2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjEiLCBOVUxMLCB1YXJ0X2Nsa1sxXSkKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjIiLCBOVUxMLCB1YXJ0X2Nsa1syXSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGNfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4xIiwgTlVMTCwgc2RoY19jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKCJteGMtd2R0LjAiLCBOVUxMLCB3ZG9nX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMCIsIE5VTEwsIGNzcGlfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4xIiwgTlVMTCwgY3NwaV9jbGtbMV0pCit9OworCitpbnQgX19pbml0IG14YzkxMjMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK3sKKwl2b2lkIF9faW9tZW0gKmdwdF9iYXNlOworCWludCBpOworCisJY2tpaF9yYXRlID0gZnJlZjsKKworCXVzYl9jbGsucGFyZW50ID0gY2xrX3VzYl9wYXJlbnQoJnVzYl9jbGspOworCXNkaGNfY2xrWzBdLnBhcmVudCA9IGNsa19zZGhjX3BhcmVudCgmc2RoY19jbGtbMF0pOworCXNkaGNfY2xrWzFdLnBhcmVudCA9IGNsa19zZGhjX3BhcmVudCgmc2RoY19jbGtbMV0pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9va3Vwcyk7IGkrKykKKwkJY2xrZGV2X2FkZCgmbG9va3Vwc1tpXSk7CisKKwlncHRfYmFzZSA9IE1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfR1BUMV9CQVNFX0FERFIpOworCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBncHRfYmFzZSwgTVhDOTEyMzFfSU5UX0dQVCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY3JtX3JlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvY3JtX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTRmNTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9jcm1fcmVncy5oCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcgTW90b3JvbGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpZm5kZWYgX0FSQ0hfQVJNX01BQ0hfTVhDOTEyMzFfQ1JNX1JFR1NfSF8KKyNkZWZpbmUgX0FSQ0hfQVJNX01BQ0hfTVhDOTEyMzFfQ1JNX1JFR1NfSF8KKworI2RlZmluZSBDS0lMX0NMS19GUkVRCQkJMzI3NjgKKworI2RlZmluZSBNWENfQ1JNX0FQX0JBU0UJCQlNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0NSTV9BUF9CQVNFX0FERFIpCisjZGVmaW5lIE1YQ19DUk1fQ09NX0JBU0UJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfQ1JNX0NPTV9CQVNFX0FERFIpCisjZGVmaW5lIE1YQ19EU01fQkFTRQkJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfRFNNX0JBU0VfQUREUikKKyNkZWZpbmUgTVhDX1BMTDBfQkFTRQkJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfUExMMF9CQVNFX0FERFIpCisjZGVmaW5lIE1YQ19QTEwxX0JBU0UJCQlNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX1BMTDFfQkFTRV9BRERSKQorI2RlZmluZSBNWENfUExMMl9CQVNFCQkJTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9QTEwyX0JBU0VfQUREUikKKyNkZWZpbmUgTVhDX0NMS0NUTF9CQVNFCQkJTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9DTEtDVExfQkFTRV9BRERSKQorCisvKiBQTEwgUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZSBNWENfUExMX0RQX0NUTAkJCTB4MDAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DT05GSUcJCTB4MDQKKyNkZWZpbmUgTVhDX1BMTF9EUF9PUAkJCTB4MDgKKyNkZWZpbmUgTVhDX1BMTF9EUF9NRkQJCQkweDBDCisjZGVmaW5lIE1YQ19QTExfRFBfTUZOCQkJMHgxMAorI2RlZmluZSBNWENfUExMX0RQX0hGU19PUAkJMHgxQworI2RlZmluZSBNWENfUExMX0RQX0hGU19NRkQJCTB4MjAKKyNkZWZpbmUgTVhDX1BMTF9EUF9IRlNfTUZOCQkweDI0CisKKy8qIFBMTCBSZWdpc3RlciBCaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfRFBEQ0swXzJfRU4JMHgxMDAwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0FERQkJMHg4MDAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfUkVGX0NMS19ESVYJMHg0MDAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfSEZTTQkJMHg4MAorI2RlZmluZSBNWENfUExMX0RQX0NUTF9QUkUJCTB4NDAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfVVBFTgkJMHgyMAorI2RlZmluZSBNWENfUExMX0RQX0NUTF9SU1QJCTB4MTAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfUkNQCQkweDgKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfUExNCQkweDQKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfQlJNMAkJMHgyCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0xSRgkJMHgxCisKKyNkZWZpbmUgTVhDX1BMTF9EUF9PUF9NRklfT0ZGU0VUCTQKKyNkZWZpbmUgTVhDX1BMTF9EUF9PUF9NRklfTUFTSwkJMHhGCisjZGVmaW5lIE1YQ19QTExfRFBfT1BfUERGX09GRlNFVAkwCisjZGVmaW5lIE1YQ19QTExfRFBfT1BfUERGX01BU0sJCTB4RgorCisjZGVmaW5lIE1YQ19QTExfRFBfTUZEX09GRlNFVAkJMAorI2RlZmluZSBNWENfUExMX0RQX01GRF9NQVNLCQkweDdGRkZGRkYKKworI2RlZmluZSBNWENfUExMX0RQX01GTl9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX1BMTF9EUF9NRk5fTUFTSwkJMHg3RkZGRkZGCisKKy8qIENSTSBBUCBSZWdpc3RlciBPZmZzZXRzICovCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDAwKQorI2RlZmluZSBNWENfQ1JNQVBfQUNEUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDA0KQorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIxCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgwOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMgkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MEMpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDEwKQorI2RlZmluZSBNWENfQ1JNQVBfQUNDR0NSCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgxNCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkEJCShNWENfQ1JNX0FQX0JBU0UgKyAweDE4KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQgkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MUMpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgyMCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkQJCShNWENfQ1JNX0FQX0JBU0UgKyAweDI0KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTEJCShNWENfQ1JNX0FQX0JBU0UgKyAweDI4KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTIJCShNWENfQ1JNX0FQX0JBU0UgKyAweDJDKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRgkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MzApCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHCQkoTVhDX0NSTV9BUF9CQVNFICsgMHgzNCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQR0NSCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4MzgpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1NSCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4M0MpCisjZGVmaW5lIE1YQ19DUk1BUF9BRENSCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4NDApCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1IJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg0NCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNQ1IJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg0OCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQQ1IJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg0QykKKyNkZWZpbmUgTVhDX0NSTUFQX0FNT1JBCQkJKE1YQ19DUk1fQVBfQkFTRSArIDB4NTApCisjZGVmaW5lIE1YQ19DUk1BUF9BTU9SQgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDU0KQorI2RlZmluZSBNWENfQ1JNQVBfQUdQUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDU4KQorI2RlZmluZSBNWENfQ1JNQVBfQVBSQQkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDVDKQorI2RlZmluZSBNWENfQ1JNQVBfQVBSQgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDYwKQorI2RlZmluZSBNWENfQ1JNQVBfQVBPUgkJCShNWENfQ1JNX0FQX0JBU0UgKyAweDY0KQorI2RlZmluZSBNWENfQ1JNQVBfQURGTVIJCQkoTVhDX0NSTV9BUF9CQVNFICsgMHg2OCkKKworLyogQ1JNIEFQIFJlZ2lzdGVyIEJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfQ1JTCQkJMHgxMDAwMAorI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfQVBfUEFURElWMl9PRkZTRVQJMTUKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0FQX1BBVFJFRl9ESVYyCQkweDgwMDAKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX1VTQlNFTF9PRkZTRVQJCTEzCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9VU0JTRUxfTUFTSwkJKDB4MyA8PCAxMykKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0NTSVNFTF9PRkZTRVQJCTExCisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9DU0lTRUxfTUFTSwkJKDB4MyA8PCAxMSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX1NTSTJTRUxfT0ZGU0VUCQk3CisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9TU0kyU0VMX01BU0sJCSgweDMgPDwgNykKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX1NTSTFTRUxfT0ZGU0VUCQk1CisjZGVmaW5lIE1YQ19DUk1BUF9BU0NTUl9TU0kxU0VMX01BU0sJCSgweDMgPDwgNSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FTQ1NSX0FQU0VMX09GRlNFVAkJMworI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfQVBTRUxfTUFTSwkJKDB4MyA8PCAzKQorI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfQVBfUEFURElWMV9PRkZTRVQJMgorI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfQVBfUEFUUkVGX0RJVjEJCTB4NAorI2RlZmluZSBNWENfQ1JNQVBfQVNDU1JfQVBJU0VMCQkJMHgxCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FDRFJfQVJNRElWX09GRlNFVAkJOAorI2RlZmluZSBNWENfQ1JNQVBfQUNEUl9BUk1ESVZfTUFTSwkJKDB4RiA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQUNEUl9BSEJESVZfT0ZGU0VUCQk0CisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RSX0FIQkRJVl9NQVNLCQkoMHhGIDw8IDQpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RSX0lQRElWX09GRlNFVAkJMAorI2RlZmluZSBNWENfQ1JNQVBfQUNEUl9JUERJVl9NQVNLCQkweEYKKworI2RlZmluZSBNWENfQ1JNQVBfQUNERVIxX0NTSUVOX09GRlNFVAkJMzAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9DU0lESVZfT0ZGU0VUCQkyNAorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIxX0NTSURJVl9NQVNLCQkoMHgzRiA8PCAyNCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9TU0kyRU5fT0ZGU0VUCQkxNAorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIxX1NTSTJESVZfT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjFfU1NJMkRJVl9NQVNLCQkoMHgzRiA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIxX1NTSTFFTl9PRkZTRVQJCTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMV9TU0kxRElWX09GRlNFVAkJMAorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIxX1NTSTFESVZfTUFTSwkJMHgzRgorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjJfQ1JDVF9DTEtfRElWX09GRlNFVAkyNAorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX0NSQ1RfQ0xLX0RJVl9NQVNLCSgweDcgPDwgMjQpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjJfTkZDRU5fT0ZGU0VUCQkyMAorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX05GQ0RJVl9PRkZTRVQJCTE2CisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjJfTkZDRElWX01BU0sJCSgweEYgPDwgMTYpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjJfVVNCRU5fT0ZGU0VUCQkxMgorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX1VTQkRJVl9PRkZTRVQJCTgKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMl9VU0JESVZfTUFTSwkJKDB4RiA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX0JBVURfSVNFTF9PRkZTRVQJNQorI2RlZmluZSBNWENfQ1JNQVBfQUNERVIyX0JBVURfSVNFTF9NQVNLCQkoMHgzIDw8IDUpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0RFUjJfQkFVRERJVl9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FDREVSMl9CQVVERElWX01BU0sJCTB4RgorCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BN19PRkZTRVQJCTIyCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BN19NQVNLCQkoMHg3IDw8IDIyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTZfT0ZGU0VUCQkxOQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTZfTUFTSwkJKDB4NyA8PCAxOSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUE0X09GRlNFVAkJMTIKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUE0X01BU0sJCSgweDcgPDwgMTIpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BM19PRkZTRVQJCTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUEzX01BU0sJCSgweDcgPDwgOSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkFfTUxQTUEyX09GRlNFVAkJNgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTJfTUFTSwkJKDB4NyA8PCA2KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQV9NTFBNQTFfT0ZGU0VUCQkzCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJBX01MUE1BMV9NQVNLCQkoMHg3IDw8IDMpCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkJfTUxQTUIwX09GRlNFVAkJMAorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQl9NTFBNQjBfTUFTSwkJMHg3CisKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUM5X09GRlNFVAkJMjgKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUM5X01BU0sJCSgweDcgPDwgMjgpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DN19PRkZTRVQJCTIyCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DN19NQVNLCQkoMHg3IDw8IDIyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzVfT0ZGU0VUCQkxNgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzVfTUFTSwkJKDB4NyA8PCAxNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUM0X09GRlNFVAkJMTIKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUM0X01BU0sJCSgweDcgPDwgMTIpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DM19PRkZTRVQJCTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUMzX01BU0sJCSgweDcgPDwgOSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUMyX09GRlNFVAkJNgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzJfTUFTSwkJKDB4NyA8PCA2KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SQ19NTFBNQzFfT0ZGU0VUCQkzCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DMV9NQVNLCQkoMHg3IDw8IDMpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJDX01MUE1DMF9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkNfTUxQTUMwX01BU0sJCTB4NworCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJEX01MUE1EN19PRkZTRVQJCTIyCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJEX01MUE1EN19NQVNLCQkoMHg3IDw8IDIyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDRfT0ZGU0VUCQkxMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDRfTUFTSwkJKDB4NyA8PCAxMikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkRfTUxQTUQzX09GRlNFVAkJOQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDNfTUFTSwkJKDB4NyA8PCA5KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRF9NTFBNRDJfT0ZGU0VUCQk2CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJEX01MUE1EMl9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJEX01MUE1EMF9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkRfTUxQTUQwX01BU0sJCTB4NworCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTlfT0ZGU0VUCTI4CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTlfTUFTSwkJKDB4NyA8PCAyOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FOF9PRkZTRVQJMjUKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FOF9NQVNLCQkoMHg3IDw8IDI1KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU3X09GRlNFVAkyMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU3X01BU0sJCSgweDcgPDwgMjIpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTZfT0ZGU0VUCTE5CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTZfTUFTSwkJKDB4NyA8PCAxOSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FNV9PRkZTRVQJMTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FNV9NQVNLCQkoMHg3IDw8IDE2KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU0X09GRlNFVAkxMgorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTFfTUxQTUU0X01BU0sJCSgweDcgPDwgMTIpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTNfT0ZGU0VUCTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FM19NQVNLCQkoMHg3IDw8IDkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTJfT0ZGU0VUCTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FMl9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTFfT0ZGU0VUCTMKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FMV9NQVNLCQkoMHg3IDw8IDMpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMV9NTFBNRTBfT0ZGU0VUCTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkUxX01MUE1FMF9NQVNLCQkweDcKKworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRTJfTUxQTUUwX09GRlNFVAkwCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJFMl9NTFBNRTBfTUFTSwkJMHg3CisKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkZfTUxQTUY2X09GRlNFVAkJMTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkZfTUxQTUY2X01BU0sJCSgweDcgPDwgMTkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GNV9PRkZTRVQJCTE2CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GNV9NQVNLCQkoMHg3IDw8IDE2KQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjNfT0ZGU0VUCQk5CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GM19NQVNLCQkoMHg3IDw8IDkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GMl9PRkZTRVQJCTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkZfTUxQTUYyX01BU0sJCSgweDcgPDwgNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkZfTUxQTUYxX09GRlNFVAkJMworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjFfTUFTSwkJKDB4NyA8PCAzKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SRl9NTFBNRjBfT0ZGU0VUCQkwCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJGX01MUE1GMF9NQVNLCQkoMHg3IDw8IDApCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUc5X09GRlNFVAkJMjgKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUc5X01BU0sJCSgweDcgPDwgMjgpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HN19PRkZTRVQJCTIyCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HN19NQVNLCQkoMHg3IDw8IDIyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzZfT0ZGU0VUCQkxOQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzZfTUFTSwkJKDB4NyA8PCAxOSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUc1X09GRlNFVAkJMTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUc1X01BU0sJCSgweDcgPDwgMTYpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HNF9PRkZTRVQJCTEyCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HNF9NQVNLCQkoMHg3IDw8IDEyKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzNfT0ZGU0VUCQk5CisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HM19NQVNLCQkoMHg3IDw8IDkpCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HMl9PRkZTRVQJCTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUcyX01BU0sJCSgweDcgPDwgNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FNTFBNUkdfTUxQTUcxX09GRlNFVAkJMworI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzFfTUFTSwkJKDB4NyA8PCAzKQorI2RlZmluZSBNWENfQ1JNQVBfQU1MUE1SR19NTFBNRzBfT0ZGU0VUCQkwCisjZGVmaW5lIE1YQ19DUk1BUF9BTUxQTVJHX01MUE1HMF9NQVNLCQkweDcKKworI2RlZmluZSBNWENfQ1JNQVBfQUdQUl9JUFVQQURfT0ZGU0VUCQkyMAorI2RlZmluZSBNWENfQ1JNQVBfQUdQUl9JUFVQQURfTUFTSwkJKDB4NyA8PCAyMCkKKworI2RlZmluZSBNWENfQ1JNQVBfQVBSQV9FTDFURU5fT0ZGU0VUCQkyOQorI2RlZmluZSBNWENfQ1JNQVBfQVBSQV9TSU1FTl9PRkZTRVQJCTI0CisjZGVmaW5lIE1YQ19DUk1BUF9BUFJBX1VBUlQzRElWX09GRlNFVAkJMTcKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkFfVUFSVDNESVZfTUFTSwkJKDB4RiA8PCAxNykKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkFfVUFSVDNFTl9PRkZTRVQJCTE2CisjZGVmaW5lIE1YQ19DUk1BUF9BUFJBX1NBSEFSQV9ESVYyX0NMS0VOX09GRlNFVAkxNAorI2RlZmluZSBNWENfQ1JNQVBfQVBSQV9NUVNQSUVOX09GRlNFVAkJMTMKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkFfVUFSVDJFTl9PRkZTRVQJCTgKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkFfVUFSVDFFTl9PRkZTRVQJCTAKKworI2RlZmluZSBNWENfQ1JNQVBfQVBSQl9TREhDMl9JU0VMX09GRlNFVAkxMworI2RlZmluZSBNWENfQ1JNQVBfQVBSQl9TREhDMl9JU0VMX01BU0sJCSgweDcgPDwgMTMpCisjZGVmaW5lIE1YQ19DUk1BUF9BUFJCX1NESEMyX0RJVl9PRkZTRVQJCTkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzJfRElWX01BU0sJCSgweEYgPDwgOSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzJFTl9PRkZTRVQJCTgKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzFfSVNFTF9PRkZTRVQJNQorI2RlZmluZSBNWENfQ1JNQVBfQVBSQl9TREhDMV9JU0VMX01BU0sJCSgweDcgPDwgNSkKKyNkZWZpbmUgTVhDX0NSTUFQX0FQUkJfU0RIQzFfRElWX09GRlNFVAkJMQorI2RlZmluZSBNWENfQ1JNQVBfQVBSQl9TREhDMV9ESVZfTUFTSwkJKDB4RiA8PCAxKQorI2RlZmluZSBNWENfQ1JNQVBfQVBSQl9TREhDMUVOX09GRlNFVAkJMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1NSX0FEU19PRkZTRVQJCTgKKyNkZWZpbmUgTVhDX0NSTUFQX0FDU1JfQURTCQkJKDB4MSA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQUNTUl9BQ1MJCQkweDEKKworI2RlZmluZSBNWENfQ1JNQVBfQURDUl9MRkRGXzAJCQkoMHgwIDw8IDgpCisjZGVmaW5lIE1YQ19DUk1BUF9BRENSX0xGREZfMgkJCSgweDEgPDwgOCkKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfTEZERl80CQkJKDB4MiA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9MRkRGXzgJCQkoMHgzIDw8IDgpCisjZGVmaW5lIE1YQ19DUk1BUF9BRENSX0xGREZfT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1BUF9BRENSX0xGREZfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9BTFRfUExMCQkJMHg4MAorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9ERlNfRElWRU4JCTB4MjAKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfRElWX0JZUAkJCTB4MgorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9WU1RBVAkJCTB4OAorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9UU1RBVAkJCTB4MTAKKyNkZWZpbmUgTVhDX0NSTUFQX0FEQ1JfRFZGU19WQ1RSTAkJMHgxMAorI2RlZmluZSBNWENfQ1JNQVBfQURDUl9DTEtfT04JCQkweDQwCisKKyNkZWZpbmUgTVhDX0NSTUFQX0FERk1SX0ZDX09GRlNFVAkJMTYKKyNkZWZpbmUgTVhDX0NSTUFQX0FERk1SX0ZDX01BU0sJCQkoMHgxRiA8PCAxNikKKyNkZWZpbmUgTVhDX0NSTUFQX0FERk1SX01GX09GRlNFVAkJMQorI2RlZmluZSBNWENfQ1JNQVBfQURGTVJfTUZfTUFTSwkJCSgweDNGRiA8PCAxKQorI2RlZmluZSBNWENfQ1JNQVBfQURGTVJfREZNX0NMS19SRUFEWQkJMHgxCisjZGVmaW5lIE1YQ19DUk1BUF9BREZNUl9ERk1fUFdSX0RPV04JCTB4ODAwMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1JfQ0tPSFNfSElHSAkJKDEgPDwgMTgpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1JfQ0tPU19ISUdICQkJKDEgPDwgMTYpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1JfQ0tPSFNfTUFTSwkJKDB4NyA8PCAxMikKKyNkZWZpbmUgTVhDX0NSTUFQX0FDUl9DS09IRAkJCSgxIDw8IDExKQorI2RlZmluZSBNWENfQ1JNQVBfQUNSX0NLT0hESVZfTUFTSwkJKDB4RiA8PCA4KQorI2RlZmluZSBNWENfQ1JNQVBfQUNSX0NLT0hESVZfT0ZGU0VUCQk4CisjZGVmaW5lIE1YQ19DUk1BUF9BQ1JfQ0tPRAkJCSgxIDw8IDcpCisjZGVmaW5lIE1YQ19DUk1BUF9BQ1JfQ0tPU19NQVNLCQkJKDB4NyA8PCA0KQorCisvKiBBUCBXYXJtIHJlc2V0ICovCisjZGVmaW5lIE1YQ19DUk1BUF9BTUNSX1NXX0FQCQkJKDEgPDwgMTQpCisKKy8qIEJpdCBkZWZpbml0aW9ucyBvZiBBQ0dDUiBpbiBDUk1fQVAgZm9yIHRyZWUgbGV2ZWwgY2xvY2sgZ2F0aW5nICovCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0cwX1NUT1BfV0FJVAkJMHgwMDAwMDAwMQorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMF9TVE9QCQkweDAwMDAwMDAzCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0cwX1JVTgkJMHgwMDAwMDAwNworI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMF9ESVNBQkxFRAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0cxX1NUT1BfV0FJVAkJMHgwMDAwMDAwOAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMV9TVE9QCQkweDAwMDAwMDE4CisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0cxX1JVTgkJMHgwMDAwMDAzOAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMV9ESVNBQkxFRAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0cyX1NUT1BfV0FJVAkJMHgwMDAwMDA0MAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMl9TVE9QCQkweDAwMDAwMEMwCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0cyX1JVTgkJMHgwMDAwMDFDMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHMl9ESVNBQkxFRAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0czX1NUT1BfV0FJVAkJMHgwMDAwMDIwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHM19TVE9QCQkweDAwMDAwNjAwCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0czX1JVTgkJMHgwMDAwMEUwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHM19ESVNBQkxFRAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0c0X1NUT1BfV0FJVAkJMHgwMDAwMTAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNF9TVE9QCQkweDAwMDAzMDAwCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0c0X1JVTgkJMHgwMDAwNzAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNF9ESVNBQkxFRAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0c1X1NUT1BfV0FJVAkJMHgwMDAxMDAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNV9TVE9QCQkweDAwMDMwMDAwCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0c1X1JVTgkJMHgwMDA3MDAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNV9ESVNBQkxFRAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0c2X1NUT1BfV0FJVAkJMHgwMDA4MDAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNl9TVE9QCQkweDAwMTgwMDAwCisjZGVmaW5lIE1YQ19DUk1BUF9BQ0dDUl9BQ0c2X1JVTgkJMHgwMDM4MDAwMAorI2RlZmluZSBNWENfQ1JNQVBfQUNHQ1JfQUNHNl9ESVNBQkxFRAkJMHgwMDAwMDAwMAorCisjZGVmaW5lIE5VTV9HQVRFX0NUUkwJCQkJNgorCisvKiBDUk0gQ09NIFJlZ2lzdGVyIE9mZnNldHMgKi8KKyNkZWZpbmUgTVhDX0NSTUNPTV9DU0NSCQkJCShNWENfQ1JNX0NPTV9CQVNFICsgMHgwQykKKyNkZWZpbmUgTVhDX0NSTUNPTV9DQ0NSCQkJCShNWENfQ1JNX0NPTV9CQVNFICsgMHgxMCkKKworLyogQ1JNIENPTSBCaXQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVhDX0NSTUNPTV9DU0NSX1BQRDEJCQkweDA4MDAwMDAwCisjZGVmaW5lIE1YQ19DUk1DT01fQ1NDUl9DS09IU0VMCQkJKDEgPDwgMTgpCisjZGVmaW5lIE1YQ19DUk1DT01fQ1NDUl9DS09TRUwJCQkoMSA8PCAxNykKKyNkZWZpbmUgTVhDX0NSTUNPTV9DQ0NSX0NDX0RJVl9PRkZTRVQJCTgKKyNkZWZpbmUgTVhDX0NSTUNPTV9DQ0NSX0NDX0RJVl9NQVNLCQkoMHgxRiA8PCA4KQorI2RlZmluZSBNWENfQ1JNQ09NX0NDQ1JfQ0NfU0VMX09GRlNFVAkJMAorI2RlZmluZSBNWENfQ1JNQ09NX0NDQ1JfQ0NfU0VMX01BU0sJCTB4MworCisvKiBEU00gUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZSBNWENfRFNNX1NMRUVQX1RJTUUJCQkoTVhDX0RTTV9CQVNFICsgMHgwYykKKyNkZWZpbmUgTVhDX0RTTV9DT05UUk9MMAkJCShNWENfRFNNX0JBU0UgKyAweDIwKQorI2RlZmluZSBNWENfRFNNX0NPTlRST0wxCQkJKE1YQ19EU01fQkFTRSArIDB4MjQpCisjZGVmaW5lIE1YQ19EU01fQ1RSRU4JCQkJKE1YQ19EU01fQkFTRSArIDB4MjgpCisjZGVmaW5lIE1YQ19EU01fV0FSTV9QRVIJCQkoTVhDX0RTTV9CQVNFICsgMHg0MCkKKyNkZWZpbmUgTVhDX0RTTV9MT0NLX1BFUgkJCShNWENfRFNNX0JBU0UgKyAweDQ0KQorI2RlZmluZSBNWENfRFNNX01HUEVSCQkJCShNWENfRFNNX0JBU0UgKyAweDRjKQorI2RlZmluZSBNWENfRFNNX0NSTV9DT05UUk9MCQkJKE1YQ19EU01fQkFTRSArIDB4NTApCisKKy8qIEJpdCBkZWZpbml0aW9ucyBvZiB2YXJpb3VzIHJlZ2lzdGVycyBpbiBEU00gKi8KKyNkZWZpbmUgTVhDX0RTTV9DUk1fQ1RSTF9EVkZTX0JZUAkJMHgwMDAwMDAwOAorI2RlZmluZSBNWENfRFNNX0NSTV9DVFJMX0RWRlNfVkNUUkwJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTVhDX0RTTV9DUk1fQ1RSTF9MUE1EMQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTVhDX0RTTV9DUk1fQ1RSTF9MUE1EMAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgTVhDX0RTTV9DUk1fQ1RSTF9MUE1EX1NUT1BfTU9ERQkJMHgwMDAwMDAwMAorI2RlZmluZSBNWENfRFNNX0NSTV9DVFJMX0xQTURfV0FJVF9NT0RFCQkweDAwMDAwMDAxCisjZGVmaW5lIE1YQ19EU01fQ1JNX0NUUkxfTFBNRF9SVU5fTU9ERQkJMHgwMDAwMDAwMworI2RlZmluZSBNWENfRFNNX0NPTlRST0wwX1NUQllfQ09NTUlUX0VOCQkweDAwMDAwMjAwCisjZGVmaW5lIE1YQ19EU01fQ09OVFJPTDBfTVNUUl9FTgkJMHgwMDAwMDAwMQorI2RlZmluZSBNWENfRFNNX0NPTlRST0wwX1JFU1RBUlQJCTB4MDAwMDAwMTAKKy8qIENvdW50ZXIgQmxvY2sgcmVzZXQgKi8KKyNkZWZpbmUgTVhDX0RTTV9DT05UUk9MMV9DQl9SU1QJCQkweDAwMDAwMDAyCisvKiBTdGF0ZSBNYWNoaW5lIHJlc2V0ICovCisjZGVmaW5lIE1YQ19EU01fQ09OVFJPTDFfU01fUlNUCQkJMHgwMDAwMDAwNAorLyogQml0IG5lZWRlZCB0byByZXNldCBjb3VudGVyIGJsb2NrICovCisjZGVmaW5lIE1YQ19DT05UUk9MMV9SU1RfQ05UMzIJCQkweDAwMDAwMDA4CisjZGVmaW5lIE1YQ19EU01fQ09OVFJPTDFfUlNUX0NOVDMyX0VOCQkweDAwMDAwODAwCisjZGVmaW5lIE1YQ19EU01fQ09OVFJPTDFfU0xFRVAJCQkweDAwMDAwMTAwCisjZGVmaW5lIE1YQ19EU01fQ09OVFJPTDFfV0FLRVVQX0RJU0FCTEUJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTVhDX0RTTV9DVFJFTl9DTlQzMgkJCTB4MDAwMDAwMDEKKworLyogTWFnaWMgRml4IGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgTVhDX0RTTV9NR1BFUl9FTl9NR0ZYCQkJMHg4MDAwMDAwMAorI2RlZmluZSBNWENfRFNNX01HUEVSX1BFUl9NQVNLCQkJMHgwMDAwMDNGRgorI2RlZmluZSBNWENfRFNNX01HUEVSX1BFUihuKQkJCShNWENfRFNNX01HUEVSX1BFUl9NQVNLICYgbikKKworLyogQWRkcmVzcyBvZmZzZXRzIG9mIHRoZSBDTEtDVEwgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1YQ19DTEtDVExfR1BfQ1RSTAkoTVhDX0NMS0NUTF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgTVhDX0NMS0NUTF9HUF9TRVIJKE1YQ19DTEtDVExfQkFTRSArIDB4MDQpCisjZGVmaW5lIE1YQ19DTEtDVExfR1BfQ0VSCShNWENfQ0xLQ1RMX0JBU0UgKyAweDA4KQorCisjZW5kaWYgLyogX0FSQ0hfQVJNX01BQ0hfTVhDOTEyMzFfQ1JNX1JFR1NfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzYmQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvZGV2aWNlcy5jCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggU2FzY2hhIEhhdWVyLCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwW10gPSB7CisJeworCQkuc3RhcnQgPSBNWEM5MTIzMV9VQVJUMV9CQVNFX0FERFIsCisJCS5lbmQgPSBNWEM5MTIzMV9VQVJUMV9CQVNFX0FERFIgKyAweDBCNSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfVUFSVDFfUlgsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfVUFSVDFfUlgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfSU5UX1VBUlQxX1RYLAorCQkuZW5kID0gTVhDOTEyMzFfSU5UX1VBUlQxX1RYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9VQVJUMV9NSU5ULAorCQkuZW5kID0gTVhDOTEyMzFfSU5UX1VBUlQxX01JTlQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTAgPSB7CisJLm5hbWUgPSAiaW14LXVhcnQiLAorCS5pZCA9IDAsCisJLnJlc291cmNlID0gdWFydDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFbXSA9IHsKKwl7CisJCS5zdGFydCA9IE1YQzkxMjMxX1VBUlQyX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YQzkxMjMxX1VBUlQyX0JBU0VfQUREUiArIDB4MEI1LAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9VQVJUMl9SWCwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9VQVJUMl9SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfVUFSVDJfVFgsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfVUFSVDJfVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfSU5UX1VBUlQyX01JTlQsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfVUFSVDJfTUlOVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJpbXgtdWFydCIsCisJLmlkID0gMSwKKwkucmVzb3VyY2UgPSB1YXJ0MSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDEpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MltdID0geworCXsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfVUFSVDNfQkFTRV9BRERSLAorCQkuZW5kID0gTVhDOTEyMzFfVUFSVDNfQkFTRV9BRERSICsgMHgwQjUsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfSU5UX1VBUlQzX1JYLAorCQkuZW5kID0gTVhDOTEyMzFfSU5UX1VBUlQzX1JYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9VQVJUM19UWCwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9VQVJUM19UWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwgeworCQkuc3RhcnQgPSBNWEM5MTIzMV9JTlRfVUFSVDNfTUlOVCwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9VQVJUM19NSU5ULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKworCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTIgPSB7CisJLm5hbWUgPSAiaW14LXVhcnQiLAorCS5pZCA9IDIsCisJLnJlc291cmNlID0gdWFydDIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQyKSwKK307CisKKy8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLworc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IG14Y19ncGlvX3BvcnRzW10gPSB7CisJWzBdID0geworCQkuY2hpcC5sYWJlbCA9ICJncGlvLTAiLAorCQkuYmFzZSA9IE1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfR1BJTzFfQVBfQkFTRV9BRERSKSwKKwkJLmlycSA9IE1YQzkxMjMxX0lOVF9HUElPMSwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAorCX0sCisJWzFdID0geworCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAorCQkuYmFzZSA9IE1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfR1BJTzJfQVBfQkFTRV9BRERSKSwKKwkJLmlycSA9IE1YQzkxMjMxX0lOVF9HUElPMiwKKwkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgMzIsCisJfSwKKwlbMl0gPSB7CisJCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCisJCS5iYXNlID0gTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9HUElPM19BUF9CQVNFX0FERFIpLAorCQkuaXJxID0gTVhDOTEyMzFfSU5UX0dQSU8zLAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyA2NCwKKwl9LAorCVszXSA9IHsKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0zIiwKKwkJLmJhc2UgPSBNWEM5MTIzMV9JT19BRERSRVNTKE1YQzkxMjMxX0dQSU80X1NIX0JBU0VfQUREUiksCisJCS5pcnEgPSBNWEM5MTIzMV9JTlRfR1BJTzQsCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAorCX0sCit9OworCitpbnQgX19pbml0IG14Y19yZWdpc3Rlcl9ncGlvcyh2b2lkKQoreworCXJldHVybiBteGNfZ3Bpb19pbml0KG14Y19ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKG14Y19ncGlvX3BvcnRzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX25hbmRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWEM5MTIzMV9ORkNfQkFTRV9BRERSLAorCQkuZW5kCT0gTVhDOTEyMzFfTkZDX0JBU0VfQUREUiArIDB4ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gTVhDOTEyMzFfSU5UX05BTkRGQywKKwkJLmVuZAk9IE1YQzkxMjMxX0lOVF9OQU5ERkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlID0geworCS5uYW1lID0gIm14Y19uYW5kIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfbmFuZF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19uYW5kX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NkaGMwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfTU1DX1NESEMxX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YQzkxMjMxX01NQ19TREhDMV9CQVNFX0FERFIgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9NTUNfU0RIQzEsCisJCS5lbmQgPSBNWEM5MTIzMV9JTlRfTU1DX1NESEMxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc2RoYzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWEM5MTIzMV9NTUNfU0RIQzJfQkFTRV9BRERSLAorCQkuZW5kID0gTVhDOTEyMzFfTU1DX1NESEMyX0JBU0VfQUREUiArIFNaXzE2SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDOTEyMzFfSU5UX01NQ19TREhDMiwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9NTUNfU0RIQzIsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTAgPSB7CisJLm5hbWUgPSAibXhjLW1tYyIsCisJLmlkID0gMCwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NkaGMwX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX3NkaGMwX3Jlc291cmNlcywKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJteGMtbW1jIiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc2RoYzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfc2RoYzFfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfY3NwaTBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWEM5MTIzMV9DU1BJMV9CQVNFX0FERFIsCisJCS5lbmQgPSBNWEM5MTIzMV9DU1BJMV9CQVNFX0FERFIgKyAweDIwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9DU1BJMSwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9DU1BJMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2NzcGlfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfY3NwaTBfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfY3NwaTBfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfY3NwaTFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWEM5MTIzMV9DU1BJMl9CQVNFX0FERFIsCisJCS5lbmQgPSBNWEM5MTIzMV9DU1BJMl9CQVNFX0FERFIgKyAweDIwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQzkxMjMxX0lOVF9DU1BJMiwKKwkJLmVuZCA9IE1YQzkxMjMxX0lOVF9DU1BJMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2NzcGlfZGV2aWNlMSA9IHsKKwkubmFtZSA9ICJzcGlfaW14IiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfY3NwaTFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfY3NwaTFfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfd2RvZzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNWEM5MTIzMV9XRE9HMV9CQVNFX0FERFIsCisJCS5lbmQgPSBNWEM5MTIzMV9XRE9HMV9CQVNFX0FERFIgKyAweDEwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfd2RvZ19kZXZpY2UwID0geworCS5uYW1lID0gIm14Yy13ZHQiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y193ZG9nMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y193ZG9nMF9yZXNvdXJjZXMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL2RldmljZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmEyMTM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9kZXZpY2VzLmgKQEAgLTAsMCArMSwxMyBAQAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfbmFuZF9kZXZpY2U7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UxOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfY3NwaV9kZXZpY2UwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2NzcGlfZGV2aWNlMTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3dkb2dfZGV2aWNlMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvaW9tdXguYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvaW9tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDVkOWIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9pb211eC5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFZhbGVudGluIExvbmdjaGFtcCA8dmFsZW50aW4ubG9uZ2NoYW1wQGVwZmwuY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teGM5MTIzMS5oPgorCisvKgorICogSU9NVVggcmVnaXN0ZXIgKGJhc2UpIGFkZHJlc3NlcworICovCisjZGVmaW5lIElPTVVYX0FQX0JBU0UJCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfSU9NVVhfQVBfQkFTRV9BRERSKQorI2RlZmluZSBJT01VWF9DT01fQkFTRQkJTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9JT01VWF9DT01fQkFTRV9BRERSKQorI2RlZmluZSBJT01VWFNXX0FQX01VWF9DVEwJKElPTVVYX0FQX0JBU0UgKyAweDAwMCkKKyNkZWZpbmUgSU9NVVhTV19TUF9NVVhfQ1RMCShJT01VWF9DT01fQkFTRSArIDB4MDAwKQorI2RlZmluZSBJT01VWFNXX1BBRF9DVEwJCShJT01VWF9DT01fQkFTRSArIDB4MjAwKQorCisjZGVmaW5lIElPTVVYSU5UX09CUzEJCShJT01VWF9BUF9CQVNFICsgMHg2MDApCisjZGVmaW5lIElPTVVYSU5UX09CUzIJCShJT01VWF9BUF9CQVNFICsgMHgwMDQpCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Bpb19tdXhfbG9jayk7CisKKyNkZWZpbmUgTkJfUE9SVFMJCQkoKFBJTl9NQVggKyAzMikgLyAzMikKKyNkZWZpbmUgUElOX0dMT0JBTF9OVU0ocGluKSBcCisJKCgocGluICYgTVVYX1NJREVfTUFTSykgPj4gTVVYX1NJREVfU0hJRlQpKlBJTl9BUF9NQVggKwlcCisJICgocGluICYgTVVYX1JFR19NQVNLKSA+PiBNVVhfUkVHX1NISUZUKSo0ICsJCVwKKwkgKChwaW4gJiBNVVhfRklFTERfTUFTSykgPj4gTVVYX0ZJRUxEX1NISUZUKSkKKwordW5zaWduZWQgbG9uZyBteGNfcGluX2FsbG9jX21hcFtOQl9QT1JUUyAqIDMyIC8gQklUU19QRVJfTE9OR107CisvKgorICogc2V0IHRoZSBtb2RlIGZvciBhIElPTVVYIHBpbi4KKyAqLworaW50IG14Y19pb211eF9tb2RlKGNvbnN0IHVuc2lnbmVkIGludCBwaW5fbW9kZSkKK3sKKwl1MzIgc2lkZSwgZmllbGQsIGwsIG1vZGUsIHJldCA9IDA7CisJdm9pZCBfX2lvbWVtICpyZWc7CisKKwlzaWRlID0gKHBpbl9tb2RlICYgTVVYX1NJREVfTUFTSykgPj4gTVVYX1NJREVfU0hJRlQ7CisJc3dpdGNoIChzaWRlKSB7CisJY2FzZSBNVVhfU0lERV9BUDoKKwkJcmVnID0gSU9NVVhTV19BUF9NVVhfQ1RMOworCQlicmVhazsKKwljYXNlIE1VWF9TSURFX1NQOgorCQlyZWcgPSBJT01VWFNXX1NQX01VWF9DVEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZWcgKz0gKChwaW5fbW9kZSAmIE1VWF9SRUdfTUFTSykgPj4gTVVYX1JFR19TSElGVCkgKiA0OworCWZpZWxkID0gKHBpbl9tb2RlICYgTVVYX0ZJRUxEX01BU0spID4+IE1VWF9GSUVMRF9TSElGVDsKKwltb2RlID0gKHBpbl9tb2RlICYgTVVYX01PREVfTUFTSykgPj4gTVVYX01PREVfU0hJRlQ7CisKKwlzcGluX2xvY2soJmdwaW9fbXV4X2xvY2spOworCisJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJbCAmPSB+KDB4ZmYgPDwgKGZpZWxkICogOCkpOworCWwgfD0gbW9kZSA8PCAoZmllbGQgKiA4KTsKKwlfX3Jhd193cml0ZWwobCwgcmVnKTsKKworCXNwaW5fdW5sb2NrKCZncGlvX211eF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9tb2RlKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcGFkIHZhbHVlIGZvciBhIElPTVVYIHBpbi4KKyAqLwordm9pZCBteGNfaW9tdXhfc2V0X3BhZChlbnVtIGlvbXV4X3BpbnMgcGluLCB1MzIgY29uZmlnKQoreworCXUzMiBwYWRncnAsIGZpZWxkLCBsOworCXZvaWQgX19pb21lbSAqcmVnOworCisJcGFkZ3JwID0gKHBpbiAmIE1VWF9QQURHUlBfTUFTSykgPj4gTVVYX1BBREdSUF9TSElGVDsKKwlyZWcgPSBJT01VWFNXX1BBRF9DVEwgKyAocGluICsgMikgLyAzICogNDsKKwlmaWVsZCA9IChwaW4gKyAyKSAlIDM7CisKKwlwcl9kZWJ1ZygiJXM6IHJlZyBvZmZzZXQgPSAweCV4LCBmaWVsZCA9ICVkXG4iLAorCQkJX19mdW5jX18sIChwaW4gKyAyKSAvIDMsIGZpZWxkKTsKKworCXNwaW5fbG9jaygmZ3Bpb19tdXhfbG9jayk7CisKKwlsID0gX19yYXdfcmVhZGwocmVnKTsKKwlsICY9IH4oMHgxZmYgPDwgKGZpZWxkICogMTApKTsKKwlsIHw9IGNvbmZpZyA8PCAoZmllbGQgKiAxMCk7CisJX19yYXdfd3JpdGVsKGwsIHJlZyk7CisKKwlzcGluX3VubG9jaygmZ3Bpb19tdXhfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXRfcGFkKTsKKworLyoKKyAqIGFsbG9jcyBhIHNpbmdsZSBwaW46CisgKiAJLSByZXNlcnZlcyB0aGUgcGluIHNvIHRoYXQgaXQgaXMgbm90IGNsYWltZWQgYnkgYW5vdGhlciBkcml2ZXIKKyAqIAktIHNldHVwcyB0aGUgaW9tdXggYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uCisgKi8KK2ludCBteGNfaW9tdXhfYWxsb2NfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW5fbW9kZSwgY29uc3QgY2hhciAqbGFiZWwpCit7CisJdW5zaWduZWQgcGFkID0gUElOX0dMT0JBTF9OVU0ocGluX21vZGUpOworCWlmIChwYWQgPj0gKFBJTl9NQVggKyAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm14Y19pb211eDogQXR0ZW1wdCB0byByZXF1ZXN0IG5vbmV4aXN0YW50IHBpbiAldSBmb3IgXCIlc1wiXG4iLAorCQkJcGFkLCBsYWJlbCA/IGxhYmVsIDogIj8iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHRlc3RfYW5kX3NldF9iaXQocGFkLCBteGNfcGluX2FsbG9jX21hcCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteGNfaW9tdXg6IHBpbiAldSBhbHJlYWR5IHVzZWQuIEFsbG9jYXRpb24gZm9yIFwiJXNcIiBmYWlsZWRcbiIsCisJCQlwYWQsIGxhYmVsID8gbGFiZWwgOiAiPyIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlteGNfaW9tdXhfbW9kZShwaW5fbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X2FsbG9jX3Bpbik7CisKK2ludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwkJY29uc3QgY2hhciAqbGFiZWwpCit7CisJdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CisJaW50IGk7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlyZXQgPSBteGNfaW9tdXhfYWxsb2NfcGluKCpwLCBsYWJlbCk7CisJCWlmIChyZXQpCisJCQlnb3RvIHNldHVwX2Vycm9yOworCQlwKys7CisJfQorCXJldHVybiAwOworCitzZXR1cF9lcnJvcjoKKwlteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHBpbl9saXN0LCBpKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyk7CisKK3ZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW5fbW9kZSkKK3sKKwl1bnNpZ25lZCBwYWQgPSBQSU5fR0xPQkFMX05VTShwaW5fbW9kZSk7CisKKwlpZiAocGFkIDwgKFBJTl9NQVggKyAxKSkKKwkJY2xlYXJfYml0KHBhZCwgbXhjX3Bpbl9hbGxvY19tYXApOworfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfcmVsZWFzZV9waW4pOworCit2b2lkIG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCAqcCA9IHBpbl9saXN0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJbXhjX2lvbXV4X3JlbGVhc2VfcGluKCpwKTsKKwkJcCsrOworCX0KK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21hZ3gtem41LmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21hZ3gtem41LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiZTRjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbWFneC16bjUuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRG1pdHJpeSBUYXljaGVuYWNoZXYgPGRpbWljaHhwQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyIG9yIGxhdGVyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14YzkxMjMxLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7Cit9OworCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgem41X2luaXQodm9pZCkKK3sKKwlwbV9wb3dlcl9vZmYgPSBteGM5MTIzMV9wb3dlcl9vZmY7CisKKwlteGNfaW9tdXhfYWxsb2NfcGluKE1YQzkxMjMxX1BJTl9TUF9VU0JfREFUX1ZQX19SWEQyLCAidWFydDItcngiKTsKKwlteGNfaW9tdXhfYWxsb2NfcGluKE1YQzkxMjMxX1BJTl9TUF9VU0JfU0UwX1ZNX19UWEQyLCAidWFydDItdHgiKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmc2RoY19wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfd2RvZ19kZXZpY2UwLCBOVUxMKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHpuNV90aW1lcl9pbml0KHZvaWQpCit7CisJbXhjOTEyMzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOyAvKiAyNm1oeiBja2loICovCit9CisKK3N0cnVjdCBzeXNfdGltZXIgem41X3RpbWVyID0geworCS5pbml0ID0gem41X3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1BR1hfWk41LCAiTW90b3JvbGEgWm41IikKKwkucGh5c19pbwk9IE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QJPSAoKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvCQk9IG14YzkxMjMxX21hcF9pbywKKwkuaW5pdF9pcnEJPSBteGM5MTIzMV9pbml0X2lycSwKKwkudGltZXIJCT0gJnpuNV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gem41X2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tbS5jIGIvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZWNkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21tLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBBcm0gTGltaXRlZAorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDQtMjAwNSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogICAgLSBhZGQgTVhDIHNwZWNpZmljIGRlZmluaXRpb25zCisgKiAgQ29weXJpZ2h0IDIwMDYgTW90b3JvbGEsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgTVhDIG1lbW9yeSBtYXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXhjX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9MMkNDX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVhDOTEyMzFfTDJDQ19CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YQzkxMjMxX0wyQ0NfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSKSwKKwkJLmxlbmd0aAkJPSBNWEM5MTIzMV9YX01FTUNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVhDOTEyMzFfUk9NUF9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YQzkxMjMxX1JPTVBfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9BVklDX0JBU0VfQUREUl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTVhDOTEyMzFfQVZJQ19CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YQzkxMjMxX0FWSUNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVhDOTEyMzFfQUlQUzFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVhDOTEyMzFfU1BCQTBfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVhDOTEyMzFfU1BCQTFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVhDOTEyMzFfQUlQUzJfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCit9OworCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgbWVtb3J5IG1hcC4gSXQgaXMgY2FsbGVkIGR1cmluZyB0aGUKKyAqIHN5c3RlbSBzdGFydHVwIHRvIGNyZWF0ZSBzdGF0aWMgcGh5c2ljYWwgdG8gdmlydHVhbCBtZW1vcnkgbWFwIGZvcgorICogdGhlIElPIG1vZHVsZXMuCisgKi8KK3ZvaWQgX19pbml0IG14YzkxMjMxX21hcF9pbyh2b2lkKQoreworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWEM5MTIzMSk7CisKKwlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKK30KKwordm9pZCBfX2luaXQgbXhjOTEyMzFfaW5pdF9pcnEodm9pZCkKK3sKKwlteGNfaW5pdF9pcnEoTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9BVklDX0JBU0VfQUREUikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9zeXN0ZW0uYyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvc3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM2ZjdlZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvc3lzdGVtLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IERtaXRyaXkgVGF5Y2hlbmFjaGV2IDxkaW1pY2h4cEBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKworI2RlZmluZSBXRE9HX1dDUgkJTVhDOTEyMzFfSU9fQUREUkVTUyhNWEM5MTIzMV9XRE9HMV9CQVNFX0FERFIpCisjZGVmaW5lIFdET0dfV0NSX09VVF9FTkFCTEUJKDEgPDwgNikKKyNkZWZpbmUgV0RPR19XQ1JfQVNTRVJUCQkoMSA8PCA1KQorCit2b2lkIG14YzkxMjMxX3Bvd2VyX29mZih2b2lkKQoreworCXUxNiB3Y3I7CisKKwl3Y3IgPSBfX3Jhd19yZWFkdyhXRE9HX1dDUik7CisJd2NyIHw9IFdET0dfV0NSX09VVF9FTkFCTEU7CisJd2NyICY9IH5XRE9HX1dDUl9BU1NFUlQ7CisJX19yYXdfd3JpdGV3KHdjciwgV0RPR19XQ1IpOworfQorCit2b2lkIG14YzkxMjMxX2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJdTMyIGFtY3I7CisKKwkvKiBSZXNldCB0aGUgQVAgdXNpbmcgQ1JNICovCisJYW1jciA9IF9fcmF3X3JlYWRsKE1YQ19DUk1BUF9BTUNSKTsKKwlhbWNyICY9IH5NWENfQ1JNQVBfQU1DUl9TV19BUDsKKwlfX3Jhd193cml0ZWwoYW1jciwgTVhDX0NSTUFQX0FNQ1IpOworCisJbWRlbGF5KDEwKTsKKwljcHVfcmVzZXQoMCk7Cit9CisKK3ZvaWQgbXhjOTEyMzFfcHJlcGFyZV9pZGxlKHZvaWQpCit7CisJdTMyIGNybV9jdGw7CisKKwkvKiBHbyB0byBXQUlUIG1vZGUgYWZ0ZXIgV0ZJICovCisJY3JtX2N0bCA9IF9fcmF3X3JlYWRsKE1YQ19EU01fQ1JNX0NPTlRST0wpOworCWNybV9jdGwgJj0gfihNWENfRFNNX0NSTV9DVFJMX0xQTUQwIHwgTVhDX0RTTV9DUk1fQ1RSTF9MUE1EMSk7CisJY3JtX2N0bCB8PSAgTVhDX0RTTV9DUk1fQ1RSTF9MUE1EX1dBSVRfTU9ERTsKKwlfX3Jhd193cml0ZWwoY3JtX2N0bCwgTVhDX0RTTV9DUk1fQ09OVFJPTCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggYTE5NTJhMC4uODQ0ZjFmOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMjQsMTUgKzI0LDEzIEBACiAJCS5lbmRtCiAKIAkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCQlsZHIJXGJhc2UsID1pb19wMnYoMHgwMDFmZjAwMCkKIAkJLmVuZG0KIAogCQkubWFjcm8gIGFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKIAkJLmVuZG0KIAogCQkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQltb3YJXGJhc2UsICNpb19wMnYoMHgwMDEwMDAwMCkKLQkJYWRkCVxiYXNlLCBcYmFzZSwgIzB4MDAwZmYwMDAKLQogCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgIzBdCiAJCWNseglcaXJxbnIsIFxpcnFzdGF0CiAJCXJzYiAgICAgXGlycW5yLCBcaXJxbnIsICMzMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTAyYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL0tjb25maWcKQEAgLTAsMCArMSwyMSBAQAoraWYgQVJDSF9OT01BRElLCisKK21lbnUgIk5vbWFkaWsgYm9hcmRzIgorCitjb25maWcgTUFDSF9OT01BRElLXzg4MTVOSEsKKwlib29sICJTVCA4ODE1IE5vbWFkaWsgSGFyZHdhcmUgS2l0IChldmFsdWF0aW9uIGJvYXJkKSIKKwlzZWxlY3QgTk9NQURJS184ODE1CisKK2VuZG1lbnUKKworY29uZmlnIE5PTUFESUtfODgxNQorCWJvb2wKKworCitjb25maWcgSTJDX0JJVEJBTkdfODgxNU5ISworCXRyaXN0YXRlICJEcml2ZXIgZm9yIGJpdC1iYW5nIGJ1c3NlcyBmb3VuZCBvbiB0aGUgODgxNSBOSEsiCisJZGVwZW5kcyBvbiBJMkMgJiYgTUFDSF9OT01BRElLXzg4MTVOSEsKKwlzZWxlY3QgSTJDX0FMR09CSVQKKwlkZWZhdWx0IHkKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTIwNDA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL01ha2VmaWxlCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisjIE5vdGUhIERlcGVuZGVuY2llcyBhcmUgZG9uZSBhdXRvbWFnaWNhbGx5IGJ5ICdtYWtlIGRlcCcsIHdoaWNoIGFsc28KKyMgcmVtb3ZlcyBhbnkgb2xkIGRlcGVuZGVuY2llcy4gRE9OJ1QgcHV0IHlvdXIgb3duIGRlcGVuZGVuY2llcyBoZXJlCisjIHVubGVzcyBpdCdzIHNvbWV0aGluZyBzcGVjaWFsIChpZSBub3QgYSAuYyBmaWxlKS4KKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLXkJCQkrPSBjbG9jay5vIHRpbWVyLm8gZ3Bpby5vCisKKyMgQ3B1IHJldmlzaW9uCitvYmotJChDT05GSUdfTk9NQURJS184ODE1KSArPSBjcHUtODgxNS5vCisKKyMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfTk9NQURJS184ODE1TkhLKSArPSBib2FyZC1uaGs4ODE1Lm8KKworIyBOb21hZGlrIGV4dHJhIGRldmljZXMKK29iai0kKENPTkZJR19JMkNfQklUQkFOR184ODE1TkhLKSArPSBpMmMtODgxNW5oay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTc1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDQgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHgwMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweDAwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4MDA4MDAwMDAKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2JvYXJkLW5oazg4MTUuYyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliZGVhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2JvYXJkLTg4MTVuaGsuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBOSEsxNSBib2FyZCBzcGVjaWZjIGRyaXZlciBkZWZpbml0aW9uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL3NldHVwLmg+CisjaW5jbHVkZSAiY2xvY2suaCIKKworI2RlZmluZSBfX01FTV80S19SRVNPVVJDRSh4KSBcCisJLnJlcyA9IHsuc3RhcnQgPSAoeCksIC5lbmQgPSAoeCkgKyBTWl80SyAtIDEsIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNfQorCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIHVhcnQwX2RldmljZSA9IHsKKwkuZGV2ID0geyAuaW5pdF9uYW1lID0gInVhcnQwIiB9LAorCV9fTUVNXzRLX1JFU09VUkNFKE5PTUFESUtfVUFSVDBfQkFTRSksCisJLmlycSA9IHtJUlFfVUFSVDAsIE5PX0lSUX0sCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIHVhcnQxX2RldmljZSA9IHsKKwkuZGV2ID0geyAuaW5pdF9uYW1lID0gInVhcnQxIiB9LAorCV9fTUVNXzRLX1JFU09VUkNFKE5PTUFESUtfVUFSVDFfQkFTRSksCisJLmlycSA9IHtJUlFfVUFSVDEsIE5PX0lSUX0sCit9OworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0geworCSZ1YXJ0MF9kZXZpY2UsCisJJnVhcnQxX2RldmljZSwKK307CisKKy8qIFdlIGhhdmUgYSBmaXhlZCBjbG9jayBhbG9uZSwgYnkgbm93ICovCitzdGF0aWMgc3RydWN0IGNsayBuaGs4ODE1X2Nsa180OCA9IHsKKwkucmF0ZSA9IDQ4KjEwMDAqMTAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmhrODgxNV9ldGhfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZSA9ICJzbWM5MXgtcmVncyIsCisJCS5zdGFydCA9IDB4MzQwMDAwMDAgKyAweDMwMCwKKwkJLmVuZCA9IDB4MzQwMDAwMDAgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IE5PTUFESUtfR1BJT19UT19JUlEoMTE1KSwKKwkJLmVuZCA9IE5PTUFESUtfR1BJT19UT19JUlEoMTE1KSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5oazg4MTVfZXRoX2RldmljZSA9IHsKKwkubmFtZSA9ICJzbWM5MXgiLAorCS5yZXNvdXJjZSA9IG5oazg4MTVfZXRoX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobmhrODgxNV9ldGhfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5oazg4MTVfZXRoX2luaXQodm9pZCkKK3sKKwlpbnQgZ3Bpb19uciA9IDExNTsgLyogaGFyZHdpcmVkIGluIHRoZSBib2FyZCAqLworCWludCBlcnI7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19uciwgImV0aF9pcnEiKTsKKwlpZiAoIWVycikgZXJyID0gbm1rX2dwaW9fc2V0X21vZGUoZ3Bpb19uciwgTk1LX0dQSU9fQUxUX0dQSU8pOworCWlmICghZXJyKSBlcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX25yKTsKKwlpZiAoZXJyKQorCQlwcl9lcnIoIkVycm9yICVpIGluICVzXG4iLCBlcnIsIF9fZnVuY19fKTsKKwlyZXR1cm4gZXJyOworfQorZGV2aWNlX2luaXRjYWxsKG5oazg4MTVfZXRoX2luaXQpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbmhrODgxNV9wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbmhrODgxNV9ldGhfZGV2aWNlLAorCS8qIHdpbGwgYWRkIG1vcmUgZGV2aWNlcyAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IG5oazg4MTVfcGxhdGZvcm1faW5pdCh2b2lkKQoreworCWludCBpOworCisJY3B1ODgxNV9wbGF0Zm9ybV9pbml0KCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMobmhrODgxNV9wbGF0Zm9ybV9kZXZpY2VzLAorCQkJICAgICBBUlJBWV9TSVpFKG5oazg4MTVfcGxhdGZvcm1fZGV2aWNlcykpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CisJCW5tZGtfY2xrX2NyZWF0ZSgmbmhrODgxNV9jbGtfNDgsIGFtYmFfZGV2c1tpXS0+ZGV2LmluaXRfbmFtZSk7CisJCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKGFtYmFfZGV2c1tpXSwgJmlvbWVtX3Jlc291cmNlKTsKKwl9Cit9CisKK01BQ0hJTkVfU1RBUlQoTk9NQURJSywgIk5ISzg4MTUiKQorCS8qIE1haW50YWluZXI6IFNUIE1pY3JvRWxlY3Ryb25pY3MgKi8KKwkucGh5c19pbwk9IE5PTUFESUtfVUFSVDBfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoSU9fQUREUkVTUyhOT01BRElLX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDEwMCwKKwkubWFwX2lvCQk9IGNwdTg4MTVfbWFwX2lvLAorCS5pbml0X2lycQk9IGNwdTg4MTVfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZub21hZGlrX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBuaGs4ODE1X3BsYXRmb3JtX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjkyNTAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY2xvY2suYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qCisgKiBUaGUgbm9tYWRpayBib2FyZCB1c2VzIGdlbmVyaWMgY2xvY2tzLCBidXQgdGhlIHNlcmlhbCBwbDAxMSBmaWxlCisgKiBjYWxscyBjbGtfZW5hYmxlKCksIGNsa19kaXNhYmxlKCksIGNsa19nZXRfcmF0ZSgpLCBzbyB3ZSBwcm92aWRlIHRoZW0KKyAqLwordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKKy8qIGVuYWJsZSBhbmQgZGlzYWJsZSBkbyBub3RoaW5nICovCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCisvKiBDcmVhdGUgYSBjbG9jayBzdHJ1Y3R1cmUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSAqLworaW50IG5tZGtfY2xrX2NyZWF0ZShzdHJ1Y3QgY2xrICpjbGssIGNvbnN0IGNoYXIgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrZGV2OworCisJY2xrZGV2ID0gY2xrZGV2X2FsbG9jKGNsaywgTlVMTCwgZGV2X2lkKTsKKwlpZiAoIWNsa2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisJY2xrZGV2X2FkZChjbGtkZXYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzVmYWVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2Nsb2NrLmgKQEAgLTAsMCArMSwxNCBAQAorCisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbm9tYWRpay9jbG9jay5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBBbGVzc2FuZHJvIFJ1YmluaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KK3N0cnVjdCBjbGsgeworCXVuc2lnbmVkIGxvbmcJCXJhdGU7Cit9OworZXh0ZXJuIGludCBubWRrX2Nsa19jcmVhdGUoc3RydWN0IGNsayAqY2xrLCBjb25zdCBjaGFyICpkZXZfaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvY3B1LTg4MTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTNjNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2NwdS04ODE1LmMKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgU1RNaWNyb2VsZWN0cm9uaWNzLCAyMDA3LgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisKKy8qIFRoZSA4ODE1IGhhcyA0IEdQSU8gYmxvY2tzLCBsZXQncyByZWdpc3RlciB0aGVtIGltbWVkaWF0ZWx5ICovCitzdGF0aWMgc3RydWN0IG5ta19ncGlvX3BsYXRmb3JtX2RhdGEgY3B1ODgxNV9ncGlvW10gPSB7CisJeworCQkubmFtZSA9ICJHUElPLTAtMzEiLAorCQkuZmlyc3RfZ3BpbyA9IDAsCisJCS5maXJzdF9pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKDApLAorCQkucGFyZW50X2lycSA9IElSUV9HUElPMCwKKwl9LCB7CisJCS5uYW1lID0gIkdQSU8tMzItNjMiLAorCQkuZmlyc3RfZ3BpbyA9IDMyLAorCQkuZmlyc3RfaXJxID0gTk9NQURJS19HUElPX1RPX0lSUSgzMiksCisJCS5wYXJlbnRfaXJxID0gSVJRX0dQSU8xLAorCX0sIHsKKwkJLm5hbWUgPSAiR1BJTy02NC05NSIsCisJCS5maXJzdF9ncGlvID0gNjQsCisJCS5maXJzdF9pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKDY0KSwKKwkJLnBhcmVudF9pcnEgPSBJUlFfR1BJTzIsCisJfSwgeworCQkubmFtZSA9ICJHUElPLTk2LTEyNyIsIC8qIDEyNC4uMTI3IG5vdCByb3V0ZWQgdG8gcGluICovCisJCS5maXJzdF9ncGlvID0gOTYsCisJCS5maXJzdF9pcnEgPSBOT01BRElLX0dQSU9fVE9fSVJRKDk2KSwKKwkJLnBhcmVudF9pcnEgPSBJUlFfR1BJTzMsCisJfQorfTsKKworI2RlZmluZSBfX01FTV80S19SRVNPVVJDRSh4KSBcCisJLnJlcyA9IHsuc3RhcnQgPSAoeCksIC5lbmQgPSAoeCkgKyBTWl80SyAtIDEsIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNfQorCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlIGNwdTg4MTVfYW1iYV9ncGlvW10gPSB7CisJeworCQkuZGV2ID0geworCQkJLmluaXRfbmFtZSA9ICJncGlvMCIsCisJCQkucGxhdGZvcm1fZGF0YSA9IGNwdTg4MTVfZ3BpbyArIDAsCisJCX0sCisJCV9fTUVNXzRLX1JFU09VUkNFKE5PTUFESUtfR1BJTzBfQkFTRSksCisJfSwgeworCQkuZGV2ID0geworCQkJLmluaXRfbmFtZSA9ICJncGlvMSIsCisJCQkucGxhdGZvcm1fZGF0YSA9IGNwdTg4MTVfZ3BpbyArIDEsCisJCX0sCisJCV9fTUVNXzRLX1JFU09VUkNFKE5PTUFESUtfR1BJTzFfQkFTRSksCisJfSwgeworCQkuZGV2ID0geworCQkJLmluaXRfbmFtZSA9ICJncGlvMiIsCisJCQkucGxhdGZvcm1fZGF0YSA9IGNwdTg4MTVfZ3BpbyArIDIsCisJCX0sCisJCV9fTUVNXzRLX1JFU09VUkNFKE5PTUFESUtfR1BJTzJfQkFTRSksCisJfSwgeworCQkuZGV2ID0geworCQkJLmluaXRfbmFtZSA9ICJncGlvMyIsCisJCQkucGxhdGZvcm1fZGF0YSA9IGNwdTg4MTVfZ3BpbyArIDMsCisJCX0sCisJCV9fTUVNXzRLX1JFU09VUkNFKE5PTUFESUtfR1BJTzNfQkFTRSksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJY3B1ODgxNV9hbWJhX2dwaW8gKyAwLAorCWNwdTg4MTVfYW1iYV9ncGlvICsgMSwKKwljcHU4ODE1X2FtYmFfZ3BpbyArIDIsCisJY3B1ODgxNV9hbWJhX2dwaW8gKyAzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3B1ODgxNV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspCisJCWFtYmFfZGV2aWNlX3JlZ2lzdGVyKGFtYmFfZGV2c1tpXSwgJmlvbWVtX3Jlc291cmNlKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoY3B1ODgxNV9pbml0KTsKKworLyogQWxsIFNvQyBkZXZpY2VzIGxpdmUgaW4gdGhlIHNhbWUgYXJlYSAoc2VlIGhhcmR3YXJlLmgpICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5vbWFkaWtfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbCA9CU5PTUFESUtfSU9fVklSVFVBTCwKKwkJLnBmbiA9CQlfX3BoeXNfdG9fcGZuKE5PTUFESUtfSU9fUEhZU0lDQUwpLAorCQkubGVuZ3RoID0JTk9NQURJS19JT19TSVpFLAorCQkudHlwZSA9IAlNVF9ERVZJQ0UsCisJfQorCS8qIHN0YXRpYyByYW0gYW5kIHNlY3VyZWQgcmFtIG1heSBiZSBhZGRlZCBsYXRlciAqLworfTsKKwordm9pZCBfX2luaXQgY3B1ODgxNV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQobm9tYWRpa19pb19kZXNjLCBBUlJBWV9TSVpFKG5vbWFkaWtfaW9fZGVzYykpOworfQorCit2b2lkIF9faW5pdCBjcHU4ODE1X2luaXRfaXJxKHZvaWQpCit7CisJLyogVGhpcyBtb2RpZmllZCBWSUMgY2VsbCBoYXMgdHdvIHJlZ2lzdGVyIGJsb2NrcywgYXQgMCBhbmQgMHgyMCAqLworCXZpY19pbml0KGlvX3AydihOT01BRElLX0lDX0JBU0UgKyAweDAwKSwgSVJRX1ZJQ19TVEFSVCArICAwLCB+MCwgMCk7CisJdmljX2luaXQoaW9fcDJ2KE5PTUFESUtfSUNfQkFTRSArIDB4MjApLCBJUlFfVklDX1NUQVJUICsgMzIsIH4wLCAwKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGJvYXJkIGluaXQgKCJpbml0X21hY2hpbmUiKS4KKyAqLworIHZvaWQgX19pbml0IGNwdTg4MTVfcGxhdGZvcm1faW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCisJLyogQXQgZnVsbCBzcGVlZCBsYXRlbmN5IG11c3QgYmUgPj0yLCBzbyAweDI0OSBpbiBsb3cgYml0cyAqLworCWwyeDBfaW5pdChpb19wMnYoTk9NQURJS19MMkNDX0JBU0UpLCAweDAwNzMwMjQ5LCAweGZlMDAwZmZmKTsKKyNlbmRpZgorCSByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTA5YjI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2dwaW8uYwpAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqIEdlbmVyaWMgR1BJTyBkcml2ZXIgZm9yIGxvZ2ljIGNlbGxzIGZvdW5kIGluIHRoZSBOb21hZGlrIFNvQworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwyMDA5IFNUTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXNzYW5kcm8gUnViaW5pIDxydWJpbmlAdW5pcHYuaXQ+CisgKiAgIFJld3JpdHRlbiBiYXNlZCBvbiB3b3JrIGJ5IFByYWZ1bGxhIFdBREFTS0FSIDxwcmFmdWxsYS53YWRhc2thckBzdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisKKy8qCisgKiBUaGUgR1BJTyBtb2R1bGUgaW4gdGhlIE5vbWFkaWsgZmFtaWx5IG9mIFN5c3RlbXMtb24tQ2hpcCBpcyBhbgorICogQU1CQSBkZXZpY2UsIG1hbmFnaW5nIDMyIHBpbnMgYW5kIGFsdGVybmF0ZSBmdW5jdGlvbnMuICBUaGUgbG9naWMgYmxvY2sKKyAqIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gdGhlIE5vbWFkaWsuCisgKgorICogU3ltYm9scyBpbiB0aGlzIGZpbGUgYXJlIGNhbGxlZCAibm1rX2dwaW8iIGZvciAibm9tYWRpayBncGlvIgorICovCisKKyNkZWZpbmUgTk1LX0dQSU9fUEVSX0NISVAgMzIKK3N0cnVjdCBubWtfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXVuc2lnbmVkIGludCBwYXJlbnRfaXJxOworCXNwaW5sb2NrX3QgKmxvY2s7CisJLyogS2VlcCB0cmFjayBvZiBjb25maWd1cmVkIGVkZ2VzICovCisJdTMyIGVkZ2VfcmlzaW5nOworCXUzMiBlZGdlX2ZhbGxpbmc7Cit9OworCisvKiBNb2RlIGZ1bmN0aW9ucyAqLworaW50IG5ta19ncGlvX3NldF9tb2RlKGludCBncGlvLCBpbnQgZ3Bpb19tb2RlKQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBhZnVuYywgYmZ1bmMsIGJpdDsKKworCW5ta19jaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoTk9NQURJS19HUElPX1RPX0lSUShncGlvKSk7CisJaWYgKCFubWtfY2hpcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliaXQgPSAxIDw8IChncGlvIC0gbm1rX2NoaXAtPmNoaXAuYmFzZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKwlhZnVuYyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fQUZTTEEpICYgfmJpdDsKKwliZnVuYyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fQUZTTEIpICYgfmJpdDsKKwlpZiAoZ3Bpb19tb2RlICYgTk1LX0dQSU9fQUxUX0EpCisJCWFmdW5jIHw9IGJpdDsKKwlpZiAoZ3Bpb19tb2RlICYgTk1LX0dQSU9fQUxUX0IpCisJCWJmdW5jIHw9IGJpdDsKKwl3cml0ZWwoYWZ1bmMsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fQUZTTEEpOworCXdyaXRlbChiZnVuYywgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19BRlNMQik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChubWtfZ3Bpb19zZXRfbW9kZSk7CisKK2ludCBubWtfZ3Bpb19nZXRfbW9kZShpbnQgZ3BpbykKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CisJdTMyIGFmdW5jLCBiZnVuYywgYml0OworCisJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShOT01BRElLX0dQSU9fVE9fSVJRKGdwaW8pKTsKKwlpZiAoIW5ta19jaGlwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJpdCA9IDEgPDwgKGdwaW8gLSBubWtfY2hpcC0+Y2hpcC5iYXNlKTsKKworCWFmdW5jID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19BRlNMQSkgJiBiaXQ7CisJYmZ1bmMgPSByZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0FGU0xCKSAmIGJpdDsKKworCXJldHVybiAoYWZ1bmMgPyBOTUtfR1BJT19BTFRfQSA6IDApIHwgKGJmdW5jID8gTk1LX0dQSU9fQUxUX0IgOiAwKTsKK30KK0VYUE9SVF9TWU1CT0wobm1rX2dwaW9fZ2V0X21vZGUpOworCisKKy8qIElSUSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5ta19ncGlvX2dldF9iaXRtYXNrKGludCBncGlvKQoreworCXJldHVybiAxIDw8IChncGlvICUgMzIpOworfQorCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW87CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCisJZ3BpbyA9IE5PTUFESUtfSVJRX1RPX0dQSU8oaXJxKTsKKwlubWtfY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaWYgKCFubWtfY2hpcCkKKwkJcmV0dXJuOworCXdyaXRlbChubWtfZ3Bpb19nZXRfYml0bWFzayhncGlvKSwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19JQyk7Cit9CisKK3N0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW87CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJpdG1hc2ssIHJlZzsKKworCWdwaW8gPSBOT01BRElLX0lSUV9UT19HUElPKGlycSk7CisJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWJpdG1hc2sgPSBubWtfZ3Bpb19nZXRfYml0bWFzayhncGlvKTsKKwlpZiAoIW5ta19jaGlwKQorCQlyZXR1cm47CisKKwkvKiB3ZSBtdXN0IGluZGl2aWR1YWxseSBjbGVhciB0aGUgdHdvIGVkZ2VzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CisJaWYgKG5ta19jaGlwLT5lZGdlX3Jpc2luZyAmIGJpdG1hc2spIHsKKwkJcmVnID0gcmVhZGwobm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19SV0lNU0MpOworCQlyZWcgJj0gfmJpdG1hc2s7CisJCXdyaXRlbChyZWcsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fUldJTVNDKTsKKwl9CisJaWYgKG5ta19jaGlwLT5lZGdlX2ZhbGxpbmcgJiBiaXRtYXNrKSB7CisJCXJlZyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKKwkJcmVnICY9IH5iaXRtYXNrOworCQl3cml0ZWwocmVnLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0ZXSU1TQyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7Cit9OworCitzdGF0aWMgdm9pZCBubWtfZ3Bpb19pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IGdwaW87CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJpdG1hc2ssIHJlZzsKKworCWdwaW8gPSBOT01BRElLX0lSUV9UT19HUElPKGlycSk7CisJbm1rX2NoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCWJpdG1hc2sgPSBubWtfZ3Bpb19nZXRfYml0bWFzayhncGlvKTsKKwlpZiAoIW5ta19jaGlwKQorCQlyZXR1cm47CisKKwkvKiB3ZSBtdXN0IGluZGl2aWR1YWxseSBzZXQgdGhlIHR3byBlZGdlcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCWlmIChubWtfY2hpcC0+ZWRnZV9yaXNpbmcgJiBiaXRtYXNrKSB7CisJCXJlZyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fUldJTVNDKTsKKwkJcmVnIHw9IGJpdG1hc2s7CisJCXdyaXRlbChyZWcsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fUldJTVNDKTsKKwl9CisJaWYgKG5ta19jaGlwLT5lZGdlX2ZhbGxpbmcgJiBiaXRtYXNrKSB7CisJCXJlZyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKKwkJcmVnIHw9IGJpdG1hc2s7CisJCXdyaXRlbChyZWcsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbm1rX2NoaXAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBubWtfZ3Bpb19pcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJaW50IGdwaW87CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGJpdG1hc2s7CisKKwlncGlvID0gTk9NQURJS19JUlFfVE9fR1BJTyhpcnEpOworCW5ta19jaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwliaXRtYXNrID0gbm1rX2dwaW9fZ2V0X2JpdG1hc2soZ3Bpbyk7CisJaWYgKCFubWtfY2hpcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0xFVkVMX0hJR0gpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh0eXBlICYgSVJRX1RZUEVfTEVWRUxfTE9XKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZubWtfY2hpcC0+bG9jaywgZmxhZ3MpOworCisJbm1rX2NoaXAtPmVkZ2VfcmlzaW5nICY9IH5iaXRtYXNrOworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCW5ta19jaGlwLT5lZGdlX3Jpc2luZyB8PSBiaXRtYXNrOworCXdyaXRlbChubWtfY2hpcC0+ZWRnZV9yaXNpbmcsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fUklNU0MpOworCisJbm1rX2NoaXAtPmVkZ2VfZmFsbGluZyAmPSB+Yml0bWFzazsKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJbm1rX2NoaXAtPmVkZ2VfZmFsbGluZyB8PSBiaXRtYXNrOworCXdyaXRlbChubWtfY2hpcC0+ZWRnZV9mYWxsaW5nLCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0ZJTVNDKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ta19jaGlwLT5sb2NrLCBmbGFncyk7CisKKwlubWtfZ3Bpb19pcnFfdW5tYXNrKGlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBubWtfZ3Bpb19pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiTm9tYWRpay1HUElPIiwKKwkuYWNrCQk9IG5ta19ncGlvX2lycV9hY2ssCisJLm1hc2sJCT0gbm1rX2dwaW9faXJxX21hc2ssCisJLnVubWFzawkJPSBubWtfZ3Bpb19pcnFfdW5tYXNrLAorCS5zZXRfdHlwZQk9IG5ta19ncGlvX2lycV9zZXRfdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIG5ta19ncGlvX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCAqbm1rX2NoaXA7CisJc3RydWN0IGlycV9jaGlwICpob3N0X2NoaXA7CisJdW5zaWduZWQgaW50IGdwaW9faXJxOworCXUzMiBwZW5kaW5nOworCXVuc2lnbmVkIGludCBmaXJzdF9pcnE7CisKKwlubWtfY2hpcCA9IGdldF9pcnFfZGF0YShpcnEpOworCWZpcnN0X2lycSA9IE5PTUFESUtfR1BJT19UT19JUlEobm1rX2NoaXAtPmNoaXAuYmFzZSk7CisJd2hpbGUgKCAocGVuZGluZyA9IHJlYWRsKG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fSVMpKSApIHsKKwkJZ3Bpb19pcnEgPSBmaXJzdF9pcnEgKyBfX2ZmcyhwZW5kaW5nKTsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxKTsKKwl9CisJaWYgKDApIHsvKiBkb24ndCBhY2sgcGFyZW50IGlycSwgYXMgYWNrID09IGRpc2FibGUgKi8KKwkJaG9zdF9jaGlwID0gZ2V0X2lycV9jaGlwKGlycSk7CisJCWhvc3RfY2hpcC0+YWNrKGlycSk7CisJfQorfQorCitzdGF0aWMgaW50IG5ta19ncGlvX2luaXRfaXJxKHN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCkKK3sKKwl1bnNpZ25lZCBpbnQgZmlyc3RfaXJxOworCWludCBpOworCisJZmlyc3RfaXJxID0gTk9NQURJS19HUElPX1RPX0lSUShubWtfY2hpcC0+Y2hpcC5iYXNlKTsKKwlmb3IgKGkgPSBmaXJzdF9pcnE7IGkgPCBmaXJzdF9pcnEgKyBOTUtfR1BJT19QRVJfQ0hJUDsgaSsrKSB7CisJCXNldF9pcnFfY2hpcChpLCAmbm1rX2dwaW9faXJxX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaSwgbm1rX2NoaXApOworCX0KKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihubWtfY2hpcC0+cGFyZW50X2lycSwgbm1rX2dwaW9faXJxX2hhbmRsZXIpOworCXNldF9pcnFfZGF0YShubWtfY2hpcC0+cGFyZW50X2lycSwgbm1rX2NoaXApOworCXJldHVybiAwOworfQorCisvKiBJL08gRnVuY3Rpb25zICovCitzdGF0aWMgaW50IG5ta19ncGlvX21ha2VfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCwgY2hpcCk7CisKKwl3cml0ZWwoMSA8PCBvZmZzZXQsIG5ta19jaGlwLT5hZGRyICsgTk1LX0dQSU9fRElSQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm1rX2dwaW9fbWFrZV9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCWludCB2YWwpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0KKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBubWtfZ3Bpb19jaGlwLCBjaGlwKTsKKworCXdyaXRlbCgxIDw8IG9mZnNldCwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19ESVJTKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBubWtfZ3Bpb19nZXRfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBubWtfZ3Bpb19jaGlwICpubWtfY2hpcCA9CisJCWNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgbm1rX2dwaW9fY2hpcCwgY2hpcCk7CisJdTMyIGJpdCA9IDEgPDwgb2Zmc2V0OworCisJcmV0dXJuIChyZWFkbChubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0RBVCkgJiBiaXQpICE9IDA7Cit9CisKK3N0YXRpYyB2b2lkIG5ta19ncGlvX3NldF9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCWludCB2YWwpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwID0KKwkJY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBubWtfZ3Bpb19jaGlwLCBjaGlwKTsKKwl1MzIgYml0ID0gMSA8PCBvZmZzZXQ7CisKKwlpZiAodmFsKQorCQl3cml0ZWwoYml0LCBubWtfY2hpcC0+YWRkciArIE5NS19HUElPX0RBVFMpOworCWVsc2UKKwkJd3JpdGVsKGJpdCwgbm1rX2NoaXAtPmFkZHIgKyBOTUtfR1BJT19EQVRDKTsKK30KKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcmVwbGljYXRlZCBmb3IgZWFjaCBHUElPIGJsb2NrIGFsbG9jYXRlZCBhdCBwcm9iZSB0aW1lICovCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBubWtfZ3Bpb190ZW1wbGF0ZSA9IHsKKwkuZGlyZWN0aW9uX2lucHV0CT0gbm1rX2dwaW9fbWFrZV9pbnB1dCwKKwkuZ2V0CQkJPSBubWtfZ3Bpb19nZXRfaW5wdXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSBubWtfZ3Bpb19tYWtlX291dHB1dCwKKwkuc2V0CQkJPSBubWtfZ3Bpb19zZXRfb3V0cHV0LAorCS5uZ3BpbwkJCT0gTk1LX0dQSU9fUEVSX0NISVAsCisJLmNhbl9zbGVlcAkJPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm1rX2dwaW9fcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHN0cnVjdCBhbWJhX2lkICppZCkKK3sKKwlzdHJ1Y3Qgbm1rX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCXN0cnVjdCBncGlvX2NoaXAgKmNoaXA7CisJaW50IHJldDsKKworCXBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlyZXQgPSBhbWJhX3JlcXVlc3RfcmVnaW9ucyhkZXYsIHBkYXRhLT5uYW1lKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbm1rX2NoaXAgPSBremFsbG9jKHNpemVvZigqbm1rX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ta19jaGlwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2FtYmE7CisJfQorCS8qCisJICogVGhlIHZpcnQgYWRkcmVzcyBpbiBubWtfY2hpcC0+YWRkciBpcyBpbiB0aGUgbm9tYWRpayByZWdpc3RlciBzcGFjZSwKKwkgKiBzbyB3ZSBjYW4gc2ltcGx5IGNvbnZlcnQgdGhlIHJlc291cmNlIGFkZHJlc3MsIHdpdGhvdXQgcmVtYXBwaW5nCisJICovCisJbm1rX2NoaXAtPmFkZHIgPSBpb19wMnYoZGV2LT5yZXMuc3RhcnQpOworCW5ta19jaGlwLT5jaGlwID0gbm1rX2dwaW9fdGVtcGxhdGU7CisJbm1rX2NoaXAtPnBhcmVudF9pcnEgPSBwZGF0YS0+cGFyZW50X2lycTsKKworCWNoaXAgPSAmbm1rX2NoaXAtPmNoaXA7CisJY2hpcC0+YmFzZSA9IHBkYXRhLT5maXJzdF9ncGlvOworCWNoaXAtPmxhYmVsID0gcGRhdGEtPm5hbWU7CisJY2hpcC0+ZGV2ID0gJmRldi0+ZGV2OworCWNoaXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJm5ta19jaGlwLT5jaGlwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCisJYW1iYV9zZXRfZHJ2ZGF0YShkZXYsIG5ta19jaGlwKTsKKworCW5ta19ncGlvX2luaXRfaXJxKG5ta19jaGlwKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkJpdHMgJWktJWkgYXQgYWRkcmVzcyAlcFxuIiwKKwkJIG5ta19jaGlwLT5jaGlwLmJhc2UsIG5ta19jaGlwLT5jaGlwLmJhc2UrMzEsIG5ta19jaGlwLT5hZGRyKTsKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlOgorCWtmcmVlKG5ta19jaGlwKTsKKyBvdXRfYW1iYToKKwlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbHVyZSAlaSBmb3IgR1BJTyAlaS0laVxuIiwgcmV0LAorCQkgIHBkYXRhLT5maXJzdF9ncGlvLCBwZGF0YS0+Zmlyc3RfZ3BpbyszMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBubWtfZ3Bpb19yZW1vdmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwOworCisJbm1rX2NoaXAgPSBhbWJhX2dldF9kcnZkYXRhKGRldik7CisJZ3Bpb2NoaXBfcmVtb3ZlKCZubWtfY2hpcC0+Y2hpcCk7CisJa2ZyZWUobm1rX2NoaXApOworCWFtYmFfcmVsZWFzZV9yZWdpb25zKGRldik7CisJcmV0dXJuIDA7Cit9CisKKworLyogV2UgaGF2ZSAweDFmMDgwMDYwIGFuZCAweDFmMTgwMDYwLCBhY2NlcHQgYm90aCB1c2luZyB0aGUgbWFzayAqLworc3RhdGljIHN0cnVjdCBhbWJhX2lkIG5ta19ncGlvX2lkc1tdID0geworCXsKKwkJLmlkCT0gMHgxZjA4MDA2MCwKKwkJLm1hc2sJPSAweGZmZWZmZmZmLAorCX0sCisJezAsIDB9LAorfTsKKworc3RhdGljIHN0cnVjdCBhbWJhX2RyaXZlciBubWtfZ3Bpb19kcml2ZXIgPSB7CisJLmRydiA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gImdwaW8iLAorCQl9LAorCS5wcm9iZSA9IG5ta19ncGlvX3Byb2JlLAorCS5yZW1vdmUgPSBubWtfZ3Bpb19yZW1vdmUsCisJLnN1c3BlbmQgPSBOVUxMLCAvKiB0byBiZSBkb25lICovCisJLnJlc3VtZSA9IE5VTEwsCisJLmlkX3RhYmxlID0gbm1rX2dwaW9faWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm1rX2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBhbWJhX2RyaXZlcl9yZWdpc3Rlcigmbm1rX2dwaW9fZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChubWtfZ3Bpb19pbml0KTsKKworTU9EVUxFX0FVVEhPUigiUHJhZnVsbGEgV0FEQVNLQVIgYW5kIEFsZXNzYW5kcm8gUnViaW5pIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5vbWFkaWsgR1BJTyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaTJjLTg4MTVuaGsuYyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pMmMtODgxNW5oay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZmUyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaTJjLTg4MTVuaGsuYwpAQCAtMCwwICsxLDY1IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKgorICogVGhlcmUgYXJlIHR3byBidXNzZXMgaW4gdGhlIDg4MTVOSEsuCisgKiBUaGV5IGNvdWxkLCBpbiB0aGVvcnksIGJlIGRyaXZlbiBieSB0aGUgaGFyZHdhcmUgY29tcG9uZW50LCBidXQgd2UKKyAqIHVzZSBiaXQtYmFuZyB0aHJvdWdoIEdQSU8gYnkgbm93LCB0byBrZWVwIHRoaW5ncyBzaW1wbGUKKyAqLworCitzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgbmhrODgxNV9pMmNfZGF0YTAgPSB7CisJLyoga2VlcCBkZWZhdWx0cyBmb3IgdGltZW91dHM7IHBpbnMgYXJlIHB1c2gtcHVsbCBiaWRpcmVjdGlvbmFsICovCisJLnNjbF9waW4gPSA2MiwKKwkuc2RhX3BpbiA9IDYzLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIG5oazg4MTVfaTJjX2RhdGExID0geworCS8qIGtlZXAgZGVmYXVsdHMgZm9yIHRpbWVvdXRzOyBwaW5zIGFyZSBwdXNoLXB1bGwgYmlkaXJlY3Rpb25hbCAqLworCS5zY2xfcGluID0gNTMsCisJLnNkYV9waW4gPSA1NCwKK307CisKKy8qIGZpcnN0IGJ1czogR1BJTyBYWCBhbmQgWVkgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5oazg4MTVfaTJjX2RldjAgPSB7CisJLm5hbWUJPSAiaTJjLWdwaW8iLAorCS5pZAk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbmhrODgxNV9pMmNfZGF0YTAsCisJfSwKK307CisvKiBzZWNvbmQgYnVzOiBHUElPIFhYIGFuZCBZWSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbmhrODgxNV9pMmNfZGV2MSA9IHsKKwkubmFtZQk9ICJpMmMtZ3BpbyIsCisJLmlkCT0gMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZuaGs4ODE1X2kyY19kYXRhMSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmhrODgxNV9pMmNfaW5pdCh2b2lkKQoreworCW5ta19ncGlvX3NldF9tb2RlKG5oazg4MTVfaTJjX2RhdGEwLnNjbF9waW4sIE5NS19HUElPX0FMVF9HUElPKTsKKwlubWtfZ3Bpb19zZXRfbW9kZShuaGs4ODE1X2kyY19kYXRhMC5zZGFfcGluLCBOTUtfR1BJT19BTFRfR1BJTyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuaGs4ODE1X2kyY19kZXYwKTsKKworCW5ta19ncGlvX3NldF9tb2RlKG5oazg4MTVfaTJjX2RhdGExLnNjbF9waW4sIE5NS19HUElPX0FMVF9HUElPKTsKKwlubWtfZ3Bpb19zZXRfbW9kZShuaGs4ODE1X2kyY19kYXRhMS5zZGFfcGluLCBOTUtfR1BJT19BTFRfR1BJTyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuaGs4ODE1X2kyY19kZXYxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbmhrODgxNV9pMmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZuaGs4ODE1X2kyY19kZXYwKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmbmhrODgxNV9pMmNfZGV2MSk7CisJcmV0dXJuOworfQorCittb2R1bGVfaW5pdChuaGs4ODE1X2kyY19pbml0KTsKK21vZHVsZV9leGl0KG5oazg4MTVfaTJjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9jbGtkZXYuaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMzdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQ0xLREVWX0gKKyNkZWZpbmUgX19BU01fTUFDSF9DTEtERVZfSAorCisjZGVmaW5lIF9fY2xrX2dldChjbGspICh7IDE7IH0pCisjZGVmaW5lIF9fY2xrX3B1dChjbGspIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3Njk5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDIyIEBACisvKgorICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCisgKgorICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisqLworCisJCS5tYWNybwlhZGRydWFydCxyeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CisJCW1vdmVxCVxyeCwgIzB4MTAwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKKwkJbW92bmUJXHJ4LCAjMHhmMDAwMDAwMAlAIHZpcnR1YWwgYmFzZQorCQlhZGQJXHJ4LCBccngsICMweDAwMTAwMDAwCisJCWFkZAlccngsIFxyeCwgIzB4MDAwZmIwMDAKKwkJLmVuZG0KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy1wbDAxeC5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjFhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgTm9tYWRpayBwbGF0Zm9ybXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCWxkcglcYmFzZSwgPUlPX0FERFJFU1MoTk9NQURJS19JQ19CQVNFKQorCS5lbmRtCisKKwkubWFjcm8JYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwkvKiBUaGlzIHN0YW56YSBnZXRzIHRoZSBpcnEgbWFzayBmcm9tIG9uZSBvZiB0d28gc3RhdHVzIHJlZ2lzdGVycyAqLworCW1vdglcaXJxbnIsICMwCisJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNWSUNfUkVHX0lSUVNSMF0JQCBnZXQgbWFza2VkIHN0YXR1cworCWNtcAlcaXJxc3RhdCwgIzAKKwlibmUJMTAwMWYKKwlhZGQJXGlycW5yLCBcaXJxbnIsICMzMgorCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjVklDX1JFR19JUlFTUjFdCUAgZ2V0IG1hc2tlZCBzdGF0dXMKKworMTAwMToJdHN0CVxpcnFzdGF0LCAjMTUKKwlibmUJMTAwMmYKKwlhZGQJXGlycW5yLCBcaXJxbnIsICM0CisJbW92cwlcaXJxc3RhdCwgXGlycXN0YXQsIGxzciAjNAorCWJuZQkxMDAxYgorMTAwMjoJdHN0CVxpcnFzdGF0LCAjMQorCWJuZQkxMDAzZgorCWFkZAlcaXJxbnIsIFxpcnFuciwgIzEKKwltb3ZzCVxpcnFzdGF0LCBcaXJxc3RhdCwgbHNyICMxCisJYm5lCTEwMDJiCisxMDAzOgkvKiBFUSB3aWxsIGJlIHNldCBpZiBubyBpcnFzIHBlbmRpbmcgKi8KKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTU3N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIFN0cnVjdHVyZXMgYW5kIHJlZ2lzdGVycyBmb3IgR1BJTyBhY2Nlc3MgaW4gdGhlIE5vbWFkaWsgU29DCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNUTWljcm9lbGVjdHJvbmljcworICogICAgIEF1dGhvcjogUHJhZnVsbGEgV0FEQVNLQVIgPHByYWZ1bGxhLndhZGFza2FyQHN0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGVzc2FuZHJvIFJ1YmluaSA8cnViaW5pQHVuaXB2Lml0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9HUElPX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworLyoKKyAqIFRoZXNlIGN1cnJlbnRseSBjYXVzZSBhIGZ1bmN0aW9uIGNhbGwgdG8gaGFwcGVuLCB0aGV5IG1heSBiZSBvcHRpbWl6ZWQKKyAqIGlmIG5lZWRlZCBieSBhZGRpbmcgY3B1LXNwZWNpZmljIGRlZmluZXMgdG8gaWRlbnRpZnkgYmxvY2tzCisgKiAoc2VlIG1hY2gtcHhhL2luY2x1ZGUvbWFjaC9ncGlvLmggYXMgYW4gZXhhbXBsZSB1c2luZyBHUExSIGV0YykKKyAqLworI2RlZmluZSBncGlvX2dldF92YWx1ZSAgX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZSAgX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwICAgX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxICAgICBfX2dwaW9fdG9faXJxCisKKy8qCisgKiAibm1rX2dwaW8iIGFuZCAiTk1LX0dQSU8iIHN0YW5kIGZvciAiTm9tYWRpayBHUElPIiwgbGVhdmluZworICogdGhlICJncGlvIiBuYW1lc3BhY2UgZm9yIGdlbmVyaWMgYW5kIGNyb3NzLW1hY2hpbmUgZnVuY3Rpb25zCisgKi8KKworLyogUmVnaXN0ZXIgaW4gdGhlIGxvZ2ljIGJsb2NrICovCisjZGVmaW5lIE5NS19HUElPX0RBVAkweDAwCisjZGVmaW5lIE5NS19HUElPX0RBVFMJMHgwNAorI2RlZmluZSBOTUtfR1BJT19EQVRDCTB4MDgKKyNkZWZpbmUgTk1LX0dQSU9fUERJUwkweDBjCisjZGVmaW5lIE5NS19HUElPX0RJUgkweDEwCisjZGVmaW5lIE5NS19HUElPX0RJUlMJMHgxNAorI2RlZmluZSBOTUtfR1BJT19ESVJDCTB4MTgKKyNkZWZpbmUgTk1LX0dQSU9fU0xQQwkweDFjCisjZGVmaW5lIE5NS19HUElPX0FGU0xBCTB4MjAKKyNkZWZpbmUgTk1LX0dQSU9fQUZTTEIJMHgyNAorCisjZGVmaW5lIE5NS19HUElPX1JJTVNDCTB4NDAKKyNkZWZpbmUgTk1LX0dQSU9fRklNU0MJMHg0NAorI2RlZmluZSBOTUtfR1BJT19JUwkweDQ4CisjZGVmaW5lIE5NS19HUElPX0lDCTB4NGMKKyNkZWZpbmUgTk1LX0dQSU9fUldJTVNDCTB4NTAKKyNkZWZpbmUgTk1LX0dQSU9fRldJTVNDCTB4NTQKKyNkZWZpbmUgTk1LX0dQSU9fV0tTCTB4NTgKKworLyogQWx0ZXJuYXRlIGZ1bmN0aW9uczogZnVuY3Rpb24gQyBpcyBzZXQgaW4gaHcgYnkgc2V0dGluZyBib3RoIEEgYW5kIEIgKi8KKyNkZWZpbmUgTk1LX0dQSU9fQUxUX0dQSU8JMAorI2RlZmluZSBOTUtfR1BJT19BTFRfQQkxCisjZGVmaW5lIE5NS19HUElPX0FMVF9CCTIKKyNkZWZpbmUgTk1LX0dQSU9fQUxUX0MJKE5NS19HUElPX0FMVF9BIHwgTk1LX0dQSU9fQUxUX0IpCisKK2V4dGVybiBpbnQgbm1rX2dwaW9fc2V0X21vZGUoaW50IGdwaW8sIGludCBncGlvX21vZGUpOworZXh0ZXJuIGludCBubWtfZ3Bpb19nZXRfbW9kZShpbnQgZ3Bpbyk7CisKKy8qCisgKiBQbGF0Zm9ybSBkYXRhIHRvIHJlZ2lzdGVyIGEgYmxvY2s6IG9ubHkgdGhlIGluaXRpYWwgZ3Bpby9pcnEgbnVtYmVyLgorICovCitzdHJ1Y3Qgbm1rX2dwaW9fcGxhdGZvcm1fZGF0YSB7CisJY2hhciAqbmFtZTsKKwlpbnQgZmlyc3RfZ3BpbzsKKwlpbnQgZmlyc3RfaXJxOworCWludCBwYXJlbnRfaXJxOworfTsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxNmRiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9ucyBvZiB0aGUgTm9tYWRpay4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWU9VIHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKy8qIE5vbWFkaWsgcmVnaXN0ZXJzIGxpdmUgZnJvbSAweDEwMDAuMDAwMCB0byAweDEwMjMuMDAwMCAtLSBjdXJyZW50bHkgKi8KKyNkZWZpbmUgTk9NQURJS19JT19WSVJUVUFMCTB4RjAwMDAwMDAJLyogVkEgb2YgSU8gICovCisjZGVmaW5lIE5PTUFESUtfSU9fUEhZU0lDQUwJMHgxMDAwMDAwMAkvKiBQQSBvZiBJTyAqLworI2RlZmluZSBOT01BRElLX0lPX1NJWkUJCTB4MDAzMDAwMDAJLyogM01CIGZvciBhbGwgcmVncyAqLworCisvKiB1c2VkIGluIEMgY29kZSwgc28gY2FzdCB0byBwcm9wZXIgdHlwZSAqLworI2RlZmluZSBpb19wMnYoeCkgKCh2b2lkIF9faW9tZW0gKikoeCkgXAorCQkJLSBOT01BRElLX0lPX1BIWVNJQ0FMICsgTk9NQURJS19JT19WSVJUVUFMKQorI2RlZmluZSBpb192MnAoeCkgKCh1bnNpZ25lZCBsb25nKSh4KSBcCisJCQktIE5PTUFESUtfSU9fVklSVFVBTCArIE5PTUFESUtfSU9fUEhZU0lDQUwpCisKKy8qIHVzZWQgaW4gYXNtIGNvZGUsIHNvIG5vIGNhc3RzICovCisjZGVmaW5lIElPX0FERFJFU1MoeCkgKCh4KSAtIE5PTUFESUtfSU9fUEhZU0lDQUwgKyBOT01BRElLX0lPX1ZJUlRVQUwpCisKKy8qCisgKiAgIEJhc2UgYWRkcmVzcyBkZWZpbmF0aW9uIGZvciBOb21hZGlrIE9uY2hpcCBMb2dpYyBCbG9jaworICovCisjZGVmaW5lIE5PTUFESUtfRlNNQ19CQVNFCTB4MTAxMDAwMDAJLyogRlNNQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTk9NQURJS19TRFJBTUNfQkFTRQkweDEwMTEwMDAwCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTk9NQURJS19DTENEQ19CQVNFCTB4MTAxMjAwMDAJLyogQ0xDRCBDb250cm9sbGVyICovCisjZGVmaW5lIE5PTUFESUtfTURJRl9CQVNFCTB4MTAxMjAwMDAJLyogTURJRiAqLworI2RlZmluZSBOT01BRElLX0RNQTBfQkFTRQkweDEwMTMwMDAwCS8qIERNQTAgQ29udHJvbGxlciAqLworI2RlZmluZSBOT01BRElLX0lDX0JBU0UJCTB4MTAxNDAwMDAJLyogVmVjdG9yZWQgSXJxIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTk9NQURJS19ETUExX0JBU0UJMHgxMDE1MDAwMAkvKiBETUExIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgTk9NQURJS19VU0JfQkFTRQkweDEwMTcwMDAwCS8qIFVTQi1PVEcgY29uZiByZWcgYmFzZSAqLworI2RlZmluZSBOT01BRElLX0NSWVBfQkFTRQkweDEwMTgwMDAwCS8qIENyeXB0byBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgTk9NQURJS19TSEExX0JBU0UJMHgxMDE5MDAwMAkvKiBTSEEtMSBQcm9jZXNzb3IgKi8KKyNkZWZpbmUgTk9NQURJS19YVElfQkFTRQkweDEwMUEwMDAwCS8qIFhUSSAqLworI2RlZmluZSBOT01BRElLX1JOR19CQVNFCTB4MTAxQjAwMDAJLyogUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKyNkZWZpbmUgTk9NQURJS19TUkNfQkFTRQkweDEwMUUwMDAwCS8qIFNSQyBiYXNlICovCisjZGVmaW5lIE5PTUFESUtfV0RPR19CQVNFCTB4MTAxRTEwMDAJLyogV2F0Y2hkb2cgKi8KKyNkZWZpbmUgTk9NQURJS19NVFUwX0JBU0UJMHgxMDFFMjAwMAkvKiBNdWx0aXBsZSBUaW1lciAwICovCisjZGVmaW5lIE5PTUFESUtfTVRVMV9CQVNFCTB4MTAxRTMwMDAJLyogTXVsdGlwbGUgVGltZXIgMSAqLworI2RlZmluZSBOT01BRElLX0dQSU8wX0JBU0UJMHgxMDFFNDAwMAkvKiBHUElPMCAqLworI2RlZmluZSBOT01BRElLX0dQSU8xX0JBU0UJMHgxMDFFNTAwMAkvKiBHUElPMSAqLworI2RlZmluZSBOT01BRElLX0dQSU8yX0JBU0UJMHgxMDFFNjAwMAkvKiBHUElPMiAqLworI2RlZmluZSBOT01BRElLX0dQSU8zX0JBU0UJMHgxMDFFNzAwMAkvKiBHUElPMyAqLworI2RlZmluZSBOT01BRElLX1JUQ19CQVNFCTB4MTAxRTgwMDAJLyogUmVhbCBUaW1lIENsb2NrIGJhc2UgKi8KKyNkZWZpbmUgTk9NQURJS19QTVVfQkFTRQkweDEwMUU5MDAwCS8qIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCAqLworI2RlZmluZSBOT01BRElLX09XTV9CQVNFCTB4MTAxRUEwMDAJLyogT25lIHdpcmUgbWFzdGVyICovCisjZGVmaW5lIE5PTUFESUtfU0NSX0JBU0UJMHgxMDFFRjAwMAkvKiBTZWN1cmUgQ29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTk9NQURJS19NU1AyX0JBU0UJMHgxMDFGMDAwMAkvKiBNU1AgMiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTk9NQURJS19NU1AxX0JBU0UJMHgxMDFGMTAwMAkvKiBNU1AgMSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTk9NQURJS19VQVJUMl9CQVNFCTB4MTAxRjIwMDAJLyogVUFSVCAyIGludGVyZmFjZSAqLworI2RlZmluZSBOT01BRElLX1NTSVJ4X0JBU0UJMHgxMDFGMzAwMAkvKiBTU0kgOC1jaCByeCBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTk9NQURJS19TU0lUeF9CQVNFCTB4MTAxRjQwMDAJLyogU1NJIDgtY2ggdHggaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfTVNIQ19CQVNFCTB4MTAxRjUwMDAJLyogTWVtb3J5IFN0aWNrKFBybykgSG9zdCAqLworI2RlZmluZSBOT01BRElLX1NESV9CQVNFCTB4MTAxRjYwMDAJLyogU0QtY2FyZC9NTS1DYXJkICovCisjZGVmaW5lIE5PTUFESUtfSTJDMV9CQVNFCTB4MTAxRjcwMDAJLyogSTJDMSBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgTk9NQURJS19JMkMwX0JBU0UJMHgxMDFGODAwMAkvKiBJMkMwIGludGVyZmFjZSAqLworI2RlZmluZSBOT01BRElLX01TUDBfQkFTRQkweDEwMUY5MDAwCS8qIE1TUCAwIGludGVyZmFjZSAgKi8KKyNkZWZpbmUgTk9NQURJS19GSVJEQV9CQVNFCTB4MTAxRkEwMDAJLyogRklyREEgaW50ZXJmYWNlICAqLworI2RlZmluZSBOT01BRElLX1VBUlQxX0JBU0UJMHgxMDFGQjAwMAkvKiBVQVJUIDEgaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfU1NQX0JBU0UJMHgxMDFGQzAwMAkvKiBTU1AgaW50ZXJmYWNlICAqLworI2RlZmluZSBOT01BRElLX1VBUlQwX0JBU0UJMHgxMDFGRDAwMAkvKiBVQVJUIDAgaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfU0dBX0JBU0UJMHgxMDFGRTAwMAkvKiBTR0EgaW50ZXJmYWNlICovCisjZGVmaW5lIE5PTUFESUtfTDJDQ19CQVNFCTB4MTAyMTAwMDAJLyogTDIgQ2FjaGUgY29udHJvbGxlciAqLworCisvKiBPdGhlciByYW5nZXMsIG5vdCBmb3IgcDJ2L3YycCAqLworI2RlZmluZSBOT01BRElLX0JBQ0tVUF9SQU0JMHg4MDAxMDAwMAorI2RlZmluZSBOT01BRElLX0VCUk9NCQkweDgwMDAwMDAwCS8qIEVtYmVkZGVkIGJvb3QgUk9NICovCisjZGVmaW5lIE5PTUFESUtfSEFNQUNWX0RNRU1fQkFTRSAweEEwMTAwMDAwCS8qIEhBTUFDViBEYXRhIE1lbW9yeSBTdGFydCAqLworI2RlZmluZSBOT01BRElLX0hBTUFDVl9ETUVNX0VORAkweEEwMUZGRkZGCS8qIEhBTUFDViBEYXRhIE1lbW9yeSBFbmQgKi8KKyNkZWZpbmUgTk9NQURJS19IQU1BQ0FfRE1FTQkweEEwMjAwMDAwCS8qIEhBTUFDQSBEYXRhIE1lbW9yeSBTcGFjZSAqLworCisjZGVmaW5lIE5PTUFESUtfRlNNQ19WQQkJSU9fQUREUkVTUyhOT01BRElLX0ZTTUNfQkFTRSkKKyNkZWZpbmUgTk9NQURJS19NVFUwX1ZBCQlJT19BRERSRVNTKE5PTUFESUtfTVRVMF9CQVNFKQorI2RlZmluZSBOT01BRElLX01UVTFfVkEJCUlPX0FERFJFU1MoTk9NQURJS19NVFUxX0JBU0UpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFlY2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL2lvLmggICAoY29waWVkIGZyb20gbWFjaC1zYTExMDApCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgUnVzc2VsbCBLaW5nCisgKgorICogTW9kaWZpY2F0aW9uczoKKyAqICAwNi0xMi0xOTk3ICBSTUsgICAgIENyZWF0ZWQuCisgKiAgMDctMDQtMTk5OSAgUk1LICAgICBNYWpvciBjbGVhbnVwCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKgorICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSByZWFsIElTQSBub3IgUENJIGJ1c2VzLCBidXQgdGhlcmUgaXMgc28gbWFueQorICogZHJpdmVycyBvdXQgdGhlcmUgdGhhdCBtaWdodCBqdXN0IHdvcmsgaWYgd2UgZmFrZSB0aGVtLi4uCisgKi8KKyNkZWZpbmUgX19pbyhhKSAgICAgICAgIF9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpICAgIChhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhYWJjNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiAgbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgSVJRX1ZJQ19TVEFSVAkJMAkvKiBmaXJzdCBWSUMgaW50ZXJydXB0IGlzIDAgKi8KKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzIGdlbmVyaWMgZm9yIGFsbCBOb21hZGlrIENoaXAgY3V0cworICovCisjZGVmaW5lIElSUV9XQVRDSERPRwkJCTAKKyNkZWZpbmUgSVJRX1NPRlRJTlQJCQkxCisjZGVmaW5lIElSUV9DUllQVE8JCQkyCisjZGVmaW5lIElSUV9PV00JCQkJMworI2RlZmluZSBJUlFfTVRVMAkJCTQKKyNkZWZpbmUgSVJRX01UVTEJCQk1CisjZGVmaW5lIElSUV9HUElPMAkJCTYKKyNkZWZpbmUgSVJRX0dQSU8xCQkJNworI2RlZmluZSBJUlFfR1BJTzIJCQk4CisjZGVmaW5lIElSUV9HUElPMwkJCTkKKyNkZWZpbmUgSVJRX1JUQ19SVFQJCQkxMAorI2RlZmluZSBJUlFfU1NQCQkJCTExCisjZGVmaW5lIElSUV9VQVJUMAkJCTEyCisjZGVmaW5lIElSUV9ETUExCQkJMTMKKyNkZWZpbmUgSVJRX0NMQ0RfTURJRgkJCTE0CisjZGVmaW5lIElSUV9ETUEwCQkJMTUKKyNkZWZpbmUgSVJRX1BXUkZBSUwJCQkxNgorI2RlZmluZSBJUlFfVUFSVDEJCQkxNworI2RlZmluZSBJUlFfRklSREEJCQkxOAorI2RlZmluZSBJUlFfTVNQMAkJCTE5CisjZGVmaW5lIElSUV9JMkMwCQkJMjAKKyNkZWZpbmUgSVJRX0kyQzEJCQkyMQorI2RlZmluZSBJUlFfU0RNTUMJCQkyMgorI2RlZmluZSBJUlFfVVNCT1RHCQkJMjMKKyNkZWZpbmUgSVJRX1NWQV9JVDAJCQkyNAorI2RlZmluZSBJUlFfU1ZBX0lUMQkJCTI1CisjZGVmaW5lIElSUV9TQUFfSVQwCQkJMjYKKyNkZWZpbmUgSVJRX1NBQV9JVDEJCQkyNworI2RlZmluZSBJUlFfVUFSVDIJCQkyOAorI2RlZmluZSBJUlFfTVNQMgkJCTMxCisjZGVmaW5lIElSUV9MMkNDCQkJNDgKKyNkZWZpbmUgSVJRX0hQSQkJCQk0OQorI2RlZmluZSBJUlFfU0tFCQkJCTUwCisjZGVmaW5lIElSUV9LUAkJCQk1MQorI2RlZmluZSBJUlFfTUVNU1QJCQk1NAorI2RlZmluZSBJUlFfU0dBX0lUCQkJNTgKKyNkZWZpbmUgSVJRX1VTQk0JCQk2MAorI2RlZmluZSBJUlFfTVNQMQkJCTYyCisKKyNkZWZpbmUgTk9NQURJS19TT0NfTlJfSVJRUwkJNjQKKworLyogQWZ0ZXIgY2hpcC1zcGVjaWZpYyBJUlEgbnVtYmVycyB3ZSBoYXZlIHRoZSBHUElPIG9uZXMgKi8KKyNkZWZpbmUgTk9NQURJS19OUl9HUElPCQkJMTI4IC8qIGxhc3QgNCBub3Qgd2lyZWQgdG8gcGlucyAqLworI2RlZmluZSBOT01BRElLX0dQSU9fVE9fSVJRKGdwaW8pCSgoZ3BpbykgKyBOT01BRElLX1NPQ19OUl9JUlFTKQorI2RlZmluZSBOT01BRElLX0lSUV9UT19HUElPKGlycSkJKChpcnEpIC0gTk9NQURJS19TT0NfTlJfSVJRUykKKyNkZWZpbmUgTlJfSVJRUwkJCQlOT01BRElLX0dQSU9fVE9fSVJRKE5PTUFESUtfTlJfR1BJTykKKworLyogRm9sbG93aW5nIHR3byBhcmUgdXNlZCBieSBlbnRyeV9tYWNyby5TLCB0byBhY2Nlc3Mgb3VyIGR1YWwtdmljICovCisjZGVmaW5lIFZJQ19SRUdfSVJRU1IwCQkwCisjZGVmaW5lIFZJQ19SRUdfSVJRU1IxCQkweDIwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUVNfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTU2ODlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogIG1hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5IEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisvKgorICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL210dS5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9tdHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmRhN2YwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9tdHUuaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfTVRVX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NVFVfSAorCisvKgorICogVGhlIE1UVSBkZXZpY2UgaG9zdHMgZm91ciBkaWZmZXJlbnQgY291bnRlcnMsIHdpdGggNCBzZXQgb2YKKyAqIHJlZ2lzdGVycy4gVGhlc2UgYXJlIHJlZ2lzdGVyIG5hbWVzLgorICovCisKKyNkZWZpbmUgTVRVX0lNU0MJMHgwMAkvKiBJbnRlcnJ1cHQgbWFzayBzZXQvY2xlYXIgKi8KKyNkZWZpbmUgTVRVX1JJUwkJMHgwNAkvKiBSYXcgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSBNVFVfTUlTCQkweDA4CS8qIE1hc2tlZCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIE1UVV9JQ1IJCTB4MEMJLyogSW50ZXJydXB0IGNsZWFyIHJlZ2lzdGVyICovCisKKy8qIHBlci10aW1lciByZWdpc3RlcnMgdGFrZSAwLi4zIGFzIGFyZ3VtZW50ICovCisjZGVmaW5lIE1UVV9MUih4KQkoMHgxMCArIDB4MTAgKiAoeCkgKyAweDAwKQkvKiBMb2FkIHZhbHVlICovCisjZGVmaW5lIE1UVV9WQUwoeCkJKDB4MTAgKyAweDEwICogKHgpICsgMHgwNCkJLyogQ3VycmVudCB2YWx1ZSAqLworI2RlZmluZSBNVFVfQ1IoeCkJKDB4MTAgKyAweDEwICogKHgpICsgMHgwOCkJLyogQ29udHJvbCByZWcgKi8KKyNkZWZpbmUgTVRVX0JHTFIoeCkJKDB4MTAgKyAweDEwICogKHgpICsgMHgwYykJLyogQXQgbmV4dCBvdmVyZmxvdyAqLworCisvKiBiaXRzIGZvciB0aGUgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBNVFVfQ1JuX0VOQQkJMHg4MAorI2RlZmluZSBNVFVfQ1JuX1BFUklPRElDCTB4NDAJLyogaWYgMCA9IGZyZWUtcnVubmluZyAqLworI2RlZmluZSBNVFVfQ1JuX1BSRVNDQUxFX01BU0sJMHgwYworI2RlZmluZSBNVFVfQ1JuX1BSRVNDQUxFXzEJCTB4MDAKKyNkZWZpbmUgTVRVX0NSbl9QUkVTQ0FMRV8xNgkJMHgwNAorI2RlZmluZSBNVFVfQ1JuX1BSRVNDQUxFXzI1NgkJMHgwOAorI2RlZmluZSBNVFVfQ1JuXzMyQklUUwkJMHgwMgorI2RlZmluZSBNVFVfQ1JuX09ORVNIT1QJCTB4MDEJLyogaWYgMCA9IHdyYXBzIHJlbG9hZGluZyBmcm9tIEJHTFIqLworCisvKiBPdGhlciByZWdpc3RlcnMgYXJlIHVzdWFsIGFtYmEvcHJpbWVjZWxsIHJlZ2lzdGVycywgY3VycmVudGx5IG5vdCB1c2VkICovCisjZGVmaW5lIE1UVV9JVENSCTB4ZmYwCisjZGVmaW5lIE1UVV9JVE9QCTB4ZmY0CisKKyNkZWZpbmUgTVRVX1BFUklQSF9JRDAJMHhmZTAKKyNkZWZpbmUgTVRVX1BFUklQSF9JRDEJMHhmZTQKKyNkZWZpbmUgTVRVX1BFUklQSF9JRDIJMHhmZTgKKyNkZWZpbmUgTVRVX1BFUklQSF9JRDMJMHhmZUMKKworI2RlZmluZSBNVFVfUENFTEwwCTB4ZmYwCisjZGVmaW5lIE1UVV9QQ0VMTDEJMHhmZjQKKyNkZWZpbmUgTVRVX1BDRUxMMgkweGZmOAorI2RlZmluZSBNVFVfUENFTEwzCTB4ZmZDCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01UVV9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvc2V0dXAuaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvc2V0dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGU0NjhjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9zZXR1cC5oCkBAIC0wLDAgKzEsMjIgQEAKKworLyoKKyAqIFRoZXNlIHN5bWJvbHMgYXJlIG5lZWRlZCBmb3IgYm9hcmQtc3BlY2lmaWMgZmlsZXMgdG8gY2FsbCB0aGVpcgorICogb3duIGNwdS1zcGVjaWZpYyBmaWxlcworICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9TRVRVUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU0VUVVBfSAorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2lmZGVmIENPTkZJR19OT01BRElLXzg4MTUKKworZXh0ZXJuIHZvaWQgY3B1ODgxNV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBjcHU4ODE1X3BsYXRmb3JtX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBjcHU4ODE1X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbm9tYWRpa190aW1lcjsKKworI2VuZGlmIC8qIE5PTUFESUtfODgxNSAqLworCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfU0VUVVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExOWY2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqICBtYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCS8qCisJICogVGhpcyBzaG91bGQgZG8gYWxsIHRoZSBjbG9jayBzd2l0Y2hpbmcKKwkgKiBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHRyaWNrcworCSAqLworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCXZvaWQgX19pb21lbSAqc3JjX3JzdHNyID0gaW9fcDJ2KE5PTUFESUtfU1JDX0JBU0UgKyAweDE4KTsKKworCS8qIEZJWE1FOiB1c2UgZWdwaW8gd2hlbiBpbXBsZW1lbnRlZCAqLworCisJLyogV3JpdGUgYW55dGhpbmcgdG8gUmVzZXQgc3RhdHVzIHJlZ2lzdGVyICovCisJd3JpdGVsKDEsIHNyY19yc3Rzcik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOGI4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfVElNRVhfSAorI2RlZmluZSBfX0FTTV9BUkNIX1RJTUVYX0gKKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUgICAgICAgICAyNDAwMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzEwMDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggU1RNaWNyb2VsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyogd2UgbmVlZCB0aGUgY29uc3RhbnRzIGluIGFtYmEvc2VyaWFsLmgsIGJ1dCBpdCByZWZlcnMgdG8gYW1iYV9kZXZpY2UgKi8KK3N0cnVjdCBhbWJhX2RldmljZTsKKyNpbmNsdWRlIDxsaW51eC9hbWJhL3NlcmlhbC5oPgorCisjZGVmaW5lIE5PTUFESUtfVUFSVF9EUgkJMHgxMDFGQjAwMAorI2RlZmluZSBOT01BRElLX1VBUlRfTENSSAkweDEwMUZCMDJjCisjZGVmaW5lIE5PTUFESUtfVUFSVF9DUgkJMHgxMDFGQjAzMAorI2RlZmluZSBOT01BRElLX1VBUlRfRlIJCTB4MTAxRkIwMTgKKworc3RhdGljIHZvaWQgcHV0Yyhjb25zdCBjaGFyIGMpCit7CisJLyogRG8gbm90aGluZyBpZiB0aGUgVUFSVCBpcyBub3QgZW5hYmxlZC4gKi8KKwlpZiAoIShyZWFkYihOT01BRElLX1VBUlRfQ1IpICYgVUFSVDAxeF9DUl9VQVJURU4pKQorCQlyZXR1cm47CisKKwlpZiAoYyA9PSAnXG4nKQorCQlwdXRjKCdccicpOworCisJd2hpbGUgKHJlYWRiKE5PTUFESUtfVUFSVF9GUikgJiBVQVJUMDF4X0ZSX1RYRkYpCisJCWJhcnJpZXIoKTsKKwl3cml0ZWIoYywgTk9NQURJS19VQVJUX0RSKTsKK30KKworc3RhdGljIHZvaWQgZmx1c2godm9pZCkKK3sKKwlpZiAoIShyZWFkYihOT01BRElLX1VBUlRfQ1IpICYgVUFSVDAxeF9DUl9VQVJURU4pKQorCQlyZXR1cm47CisJd2hpbGUgKHJlYWRiKE5PTUFESUtfVUFSVF9GUikgJiBVQVJUMDF4X0ZSX0JVU1kpCisJCWJhcnJpZXIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7Cit9CisKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpIC8qIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCisjZW5kaWYgLyogX19BU01fQVJDSF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxMmUzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMiBAQAorCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIDB4ZTgwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3MzhlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbm9tYWRpay90aW1lci5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbm9tYWRpay90aW1lci5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNUTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXNzYW5kcm8gUnViaW5pLCBzb21ld2hhdCBiYXNlZCBvbiBhdDkxc2FtOTI2eAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8bWFjaC9tdHUuaD4KKworI2RlZmluZSBUSU1FUl9DVFJMCTB4ODAJLyogTm8gZGl2aXNvciAqLworI2RlZmluZSBUSU1FUl9QRVJJT0RJQwkweDQwCisjZGVmaW5lIFRJTUVSX1NaMzJCSVQJMHgwMgorCisvKiBJbml0aWFsIHZhbHVlIGZvciBTUkMgY29udHJvbCByZWdpc3RlcjogYWxsIHRpbWVycyB1c2UgTVhUQUwvOCBzb3VyY2UgKi8KKyNkZWZpbmUgU1JDX0NSX0lOSVRfTUFTSwkweDAwMDA3ZmZmCisjZGVmaW5lIFNSQ19DUl9JTklUX1ZBTAkJMHgyYWFhODAwMAorCitzdGF0aWMgdTMyCW5tZGtfY291bnQ7CQkvKiBhY2N1bXVsYXRlZCBjb3VudCAqLworc3RhdGljIHUzMglubWRrX2N5Y2xlOwkJLyogd3JpdGUtb25jZSAqLworc3RhdGljIF9faW9tZW0gdm9pZCAqbXR1X2Jhc2U7CisKKy8qCisgKiBjbG9ja3NvdXJjZTogdGhlIE1UVSBkZXZpY2UgaXMgYSBkZWNyZW1lbnRpbmcgY291bnRlcnMsIHNvIHdlIG5lZ2F0ZQorICogdGhlIHZhbHVlIGJlaW5nIHJlYWQuCisgKi8KK3N0YXRpYyBjeWNsZV90IG5tZGtfcmVhZF90aW1lcihzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCXUzMiBjb3VudCA9IHJlYWRsKG10dV9iYXNlICsgTVRVX1ZBTCgwKSk7CisJcmV0dXJuIG5tZGtfY291bnQgKyBubWRrX2N5Y2xlIC0gY291bnQ7CisKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBubWRrX2Nsa3NyYyA9IHsKKwkubmFtZQkJPSAibXR1XzAiLAorCS5yYXRpbmcJCT0gMTIwLAorCS5yZWFkCQk9IG5tZGtfcmVhZF90aW1lciwKKwkuc2hpZnQJCT0gMjAsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworLyoKKyAqIENsb2NrZXZlbnQgZGV2aWNlOiBjdXJyZW50bHkgb25seSBwZXJpb2RpYyBtb2RlIGlzIHN1cHBvcnRlZAorICovCitzdGF0aWMgdm9pZCBubWRrX2Nsa2V2dF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIC0tIGFuZCBjb3VudCBjdXJyZW50IHZhbHVlPyAqLworCQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQl3cml0ZWwocmVhZGwobXR1X2Jhc2UgKyBNVFVfSU1TQykgfCAxLCBtdHVfYmFzZSArIE1UVV9JTVNDKTsKKwkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlCVUcoKTsgLyogTm90IHN1cHBvcnRlZCwgeWV0ICovCisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwkJLyogZGlzYWJsZSBpcnEgKi8KKwkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJd3JpdGVsKHJlYWRsKG10dV9iYXNlICsgTVRVX0lNU0MpICYgfjEsIG10dV9iYXNlICsgTVRVX0lNU0MpOworCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBubWRrX2Nsa2V2dCA9IHsKKwkubmFtZQkJPSAibXR1XzAiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5zaGlmdAkJPSAzMiwKKwkucmF0aW5nCQk9IDEwMCwKKwkuc2V0X21vZGUJPSBubWRrX2Nsa2V2dF9tb2RlLAorfTsKKworLyoKKyAqIElSUSBIYW5kbGVyIGZvciB0aGUgdGltZXIgMCBvZiB0aGUgTVRVIGJsb2NrLiBUaGUgaXJxIGlzIG5vdCBzaGFyZWQKKyAqIGFzIHdlIGFyZSB0aGUgb25seSB1c2VycyBvZiBtdHUwIGJ5IG5vdy4KKyAqLworc3RhdGljIGlycXJldHVybl90IG5tZGtfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwkvKiBhY2s6ICJpbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXIiICovCisJd3JpdGVsKCAxIDw8IDAsIG10dV9iYXNlICsgTVRVX0lDUik7CisKKwkvKiB3ZSBjYW4ndCBjb3VudCBsb3N0IHRpY2tzLCB1bmZvcnR1bmF0ZWx5ICovCisJbm1ka19jb3VudCArPSBubWRrX2N5Y2xlOworCW5tZGtfY2xrZXZ0LmV2ZW50X2hhbmRsZXIoJm5tZGtfY2xrZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgorICovCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBubWRrX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiTm9tYWRpayBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmhhbmRsZXIJPSBubWRrX3RpbWVyX2ludGVycnVwdCwKK307CisKK3N0YXRpYyB2b2lkIG5tZGtfdGltZXJfcmVzZXQodm9pZCkKK3sKKwl1MzIgY3I7CisKKwl3cml0ZWwoMCwgbXR1X2Jhc2UgKyBNVFVfQ1IoMCkpOyAvKiBvZmYgKi8KKworCS8qIGNvbmZpZ3VyZSBsb2FkIGFuZCBiYWNrZ3JvdW5kLWxvYWQsIGFuZCBmaXJlIGl0IHVwICovCisJd3JpdGVsKG5tZGtfY3ljbGUsIG10dV9iYXNlICsgTVRVX0xSKDApKTsKKwl3cml0ZWwobm1ka19jeWNsZSwgbXR1X2Jhc2UgKyBNVFVfQkdMUigwKSk7CisJY3IgPSBNVFVfQ1JuX1BFUklPRElDIHwgTVRVX0NSbl9QUkVTQ0FMRV8xIHwgTVRVX0NSbl8zMkJJVFM7CisJd3JpdGVsKGNyLCBtdHVfYmFzZSArIE1UVV9DUigwKSk7CisJd3JpdGVsKGNyIHwgTVRVX0NSbl9FTkEsIG10dV9iYXNlICsgTVRVX0NSKDApKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG5tZGtfdGltZXJfaW5pdCh2b2lkKQoreworCXUzMiBzcmNfY3I7CisJdW5zaWduZWQgbG9uZyByYXRlOworCWludCBiaXRzOworCisJcmF0ZSA9IENMT0NLX1RJQ0tfUkFURTsgLyogMi40TUh6ICovCisJbm1ka19jeWNsZSA9IChyYXRlICsgSFovMikgLyBIWjsKKworCS8qIENvbmZpZ3VyZSB0aW1lciBzb3VyY2VzIGluICJzeXN0ZW0gcmVzZXQgY29udHJvbGxlciIgY3RybCByZWcgKi8KKwlzcmNfY3IgPSByZWFkbChpb19wMnYoTk9NQURJS19TUkNfQkFTRSkpOworCXNyY19jciAmPSBTUkNfQ1JfSU5JVF9NQVNLOworCXNyY19jciB8PSBTUkNfQ1JfSU5JVF9WQUw7CisJd3JpdGVsKHNyY19jciwgaW9fcDJ2KE5PTUFESUtfU1JDX0JBU0UpKTsKKworCS8qIFNhdmUgZ2xvYmFsIHBvaW50ZXIgdG8gbXR1LCB1c2VkIGJ5IGZ1bmN0aW9ucyBhYm92ZSAqLworCW10dV9iYXNlID0gaW9fcDJ2KE5PTUFESUtfTVRVMF9CQVNFKTsKKworCS8qIEluaXQgdGhlIHRpbWVyIGFuZCByZWdpc3RlciBjbG9ja3NvdXJjZSAqLworCW5tZGtfdGltZXJfcmVzZXQoKTsKKworCW5tZGtfY2xrc3JjLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHJhdGUsIG5tZGtfY2xrc3JjLnNoaWZ0KTsKKwliaXRzID0gIDgqc2l6ZW9mKG5tZGtfY291bnQpOworCW5tZGtfY2xrc3JjLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKGJpdHMpOworCisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJm5tZGtfY2xrc3JjKTsKKworCS8qIFJlZ2lzdGVyIGlycSBhbmQgY2xvY2tldmVudHMgKi8KKwlzZXR1cF9pcnEoSVJRX01UVTAsICZubWRrX3RpbWVyX2lycSk7CisJbm1ka19jbGtldnQubXVsdCA9IGRpdl9zYyhyYXRlLCBOU0VDX1BFUl9TRUMsIG5tZGtfY2xrZXZ0LnNoaWZ0KTsKKwlubWRrX2Nsa2V2dC5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJm5tZGtfY2xrZXZ0KTsKK30KKworc3RydWN0IHN5c190aW1lciBub21hZGlrX3RpbWVyID0geworCS5pbml0CQk9IG5tZGtfdGltZXJfaW5pdCwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IGIwYzc0MDIuLjFiMjIzMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC0zOSw3ICszOSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgc2RwNDQzMF91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0gewotCS5lbmFibGVkX3VhcnRzCT0gKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpLAorCS5lbmFibGVkX3VhcnRzCT0gKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBzZHA0NDMwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwppbmRleCAwNDQ3ZDI2Li5hODQ2YWExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCkBAIC0xNzMsNiArMTczLDQyIEBACiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1BEQVRBX1NaCQkwCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgb21hcDQ0eHhfbWNic3BfcGRhdGFbXSA9IHsKKwl7CisJCS5waHlzX2Jhc2UgICAgICA9IE9NQVA0NFhYX01DQlNQMV9CQVNFLAorCQkuZG1hX3J4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1AxX1JYLAorCQkuZG1hX3R4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1AxX1RYLAorCQkucnhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAorCQkudHhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYLAorCQkub3BzICAgICAgICAgICAgPSAmb21hcDJfbWNic3Bfb3BzLAorCX0sCisJeworCQkucGh5c19iYXNlICAgICAgPSBPTUFQNDRYWF9NQ0JTUDJfQkFTRSwKKwkJLmRtYV9yeF9zeW5jICAgID0gT01BUDQ0WFhfRE1BX01DQlNQMl9SWCwKKwkJLmRtYV90eF9zeW5jICAgID0gT01BUDQ0WFhfRE1BX01DQlNQMl9UWCwKKwkJLnJ4X2lycSAgICAgICAgID0gSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCwKKwkJLnR4X2lycSAgICAgICAgID0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKKwkJLm9wcyAgICAgICAgICAgID0gJm9tYXAyX21jYnNwX29wcywKKwl9LAorCXsKKwkJLnBoeXNfYmFzZSAgICAgID0gT01BUDQ0WFhfTUNCU1AzX0JBU0UsCisJCS5kbWFfcnhfc3luYyAgICA9IE9NQVA0NFhYX0RNQV9NQ0JTUDNfUlgsCisJCS5kbWFfdHhfc3luYyAgICA9IE9NQVA0NFhYX0RNQV9NQ0JTUDNfVFgsCisJCS5yeF9pcnEgICAgICAgICA9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCisJCS50eF9pcnEgICAgICAgICA9IElOVF8yNFhYX01DQlNQM19JUlFfVFgsCisJCS5vcHMgICAgICAgICAgICA9ICZvbWFwMl9tY2JzcF9vcHMsCisJfSwKKwl7CisJCS5waHlzX2Jhc2UgICAgICA9IE9NQVA0NFhYX01DQlNQNF9CQVNFLAorCQkuZG1hX3J4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1A0X1JYLAorCQkuZG1hX3R4X3N5bmMgICAgPSBPTUFQNDRYWF9ETUFfTUNCU1A0X1RYLAorCQkucnhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYLAorCQkudHhfaXJxICAgICAgICAgPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1RYLAorCQkub3BzICAgICAgICAgICAgPSAmb21hcDJfbWNic3Bfb3BzLAorCX0sCit9OworI2RlZmluZSBPTUFQNDRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcF9wZGF0YSkKKwogc3RhdGljIGludCBfX2luaXQgb21hcDJfbWNic3BfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfb21hcDI0MjAoKSkKQEAgLTE4MSw2ICsyMTcsOCBAQAogCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDI0MzBfTUNCU1BfUERBVEFfU1o7CiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDM0WFhfTUNCU1BfUERBVEFfU1o7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDQ0WFhfTUNCU1BfUERBVEFfU1o7CiAKIAltY2JzcF9wdHIgPSBremFsbG9jKG9tYXBfbWNic3BfY291bnQgKiBzaXplb2Yoc3RydWN0IG9tYXBfbWNic3AgKiksCiAJCQkJCQkJCUdGUF9LRVJORUwpOwpAQCAtMTk2LDYgKzIzNCw5IEBACiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhvbWFwMzR4eF9tY2JzcF9wZGF0YSwKIAkJCQkJCU9NQVAzNFhYX01DQlNQX1BEQVRBX1NaKTsKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKG9tYXA0NHh4X21jYnNwX3BkYXRhLAorCQkJCQkJT01BUDQ0WFhfTUNCU1BfUERBVEFfU1opOwogCiAJcmV0dXJuIG9tYXBfbWNic3BfaW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggYTc0MjFhNS4uY2UyMjM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0xMDksNiArMTA5LDE2IEBACiAJCS5yZWdzaGlmdAk9IDIsCiAJCS51YXJ0Y2xrCT0gT01BUDI0WFhfQkFTRV9CQVVEICogMTYsCiAJfSwgeworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisJCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAorCQkubWFwYmFzZQk9IE9NQVBfVUFSVDRfQkFTRSwKKwkJLmlycQkJPSA3MCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAorCX0sIHsKKyNlbmRpZgogCQkuZmxhZ3MJCT0gMAogCX0KIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCmluZGV4IDJjNzAzNWQuLmMzZDUxM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnCkBAIC04OSw2ICs4OSwyNyBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBMYUNpZSBFdGhlcm5ldCBEaXNrIG1pbmkgVjIuCiAKK2NvbmZpZyBNQUNIX0QyTkVUCisJYm9vbCAiTGFDaWUgZDIgTmV0d29yayIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgTGFDaWUgZDIgTmV0d29yayBOQVMuCisKK2NvbmZpZyBNQUNIX0JJR0RJU0sKKwlib29sICJMYUNpZSBCaWcgRGlzayBOZXR3b3JrIgorCXNlbGVjdCBJMkNfQk9BUkRJTkZPCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBMYUNpZSBCaWcgRGlzayBOZXR3b3JrIE5BUy4KKworY29uZmlnIE1BQ0hfTkVUMkJJRworCWJvb2wgIkxhQ2llIDJCaWcgTmV0d29yayIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgTGFDaWUgMkJpZyBOZXR3b3JrIE5BUy4KKwogY29uZmlnIE1BQ0hfTVNTMgogCWJvb2wgIk1heHRvciBTaGFyZWQgU3RvcmFnZSBJSSIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUKaW5kZXggZWRjMzhlMi4uODk3NzJmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9NYWtlZmlsZQpAQCAtMTIsNiArMTIsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfVFM3OFhYKQkrPSB0czc4eHgtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfTVYyMTIwKQkrPSBtdjIxMjAtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfRURNSU5JX1YyKQkrPSBlZG1pbmlfdjItc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfRDJORVQpCSs9IGQybmV0LXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX0JJR0RJU0spCSs9IGQybmV0LXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX05FVDJCSUcpCSs9IG5ldDJiaWctc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfTVNTMikJCSs9IG1zczItc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfV05SODU0VCkJKz0gd25yODU0dC1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9SRDg4RjUxODFMX0dFKQkrPSByZDg4ZjUxODFsLWdlLXNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9hZGRyLW1hcC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKaW5kZXggZDc4NzMxZS4uMWE1ZDZhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2FkZHItbWFwLmMKQEAgLTg0LDcgKzg0LDggQEAKIAlvcmlvbjV4X3BjaWVfaWQoJmRldiwgJnJldik7CiAJaWYgKChkZXYgPT0gTVY4OEY1MjgxX0RFVl9JRCAmJiB3aW4gPCA0KQogCSAgICB8fCAoZGV2ID09IE1WODhGNTE4Ml9ERVZfSUQgJiYgd2luIDwgMikKLQkgICAgfHwgKGRldiA9PSBNVjg4RjUxODFfREVWX0lEICYmIHdpbiA8IDIpKQorCSAgICB8fCAoZGV2ID09IE1WODhGNTE4MV9ERVZfSUQgJiYgd2luIDwgMikKKwkgICAgfHwgKGRldiA9PSBNVjg4RjYxODNfREVWX0lEICYmIHdpbiA8IDQpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDRiZjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvZDJuZXQtc2V0dXAuYworICoKKyAqIExhQ2llIGQyTmV0d29yayBhbmQgQmlnIERpc2sgTmV0d29yayBOQVMgc2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2ltb24gR3Vpbm90IDxzZ3Vpbm90QGxhY2llLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMYUNpZSBkMiBOZXR3b3JrIEluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogNTEyS0IgTk9SIGZsYXNoIERldmljZSBidXMgYm9vdCBjaGlwIHNlbGVjdAorICovCisKKyNkZWZpbmUgRDJORVRfTk9SX0JPT1RfQkFTRQkJMHhmZmY4MDAwMAorI2RlZmluZSBEMk5FVF9OT1JfQk9PVF9TSVpFCQlTWl81MTJLCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogNTEyS0IgTk9SIEZsYXNoIG9uIEJvb3QgRGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRPRE86IENoZWNrIHdyaXRlIHN1cHBvcnQgb24gZmxhc2ggTVgyOUxWNDAwQ0JUQy03MEcKKyAqLworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZDJuZXRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkZ1bGw1MTJrYiIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBkMm5ldF9ub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMSwKKwkucGFydHMJCT0gZDJuZXRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGQybmV0X3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkMm5ldF9ub3JfZmxhc2hfcmVzb3VyY2UgPSB7CisJLmZsYWdzCQkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCQk9IEQyTkVUX05PUl9CT09UX0JBU0UsCisJLmVuZAkJCT0gRDJORVRfTk9SX0JPT1RfQkFTRQorCQkJCQkrIEQyTkVUX05PUl9CT09UX1NJWkUgLSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZDJuZXRfbm9yX2ZsYXNoID0geworCS5uYW1lCQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkMm5ldF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZkMm5ldF9ub3JfZmxhc2hfcmVzb3VyY2UsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEV0aGVybmV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGQybmV0X2V0aF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJMkMgZGV2aWNlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBpMmMgYWRkciB8IGNoaXAgICAgICAgICB8IGRlc2NyaXB0aW9uCisgKiAweDMyICAgICB8IFJpY29oIDVDMzcyYiB8IFJUQworICogMHgzZSAgICAgfCBHTVQgRzc2MiAgICAgfCBQV00gZmFuIGNvbnRyb2xsZXIKKyAqIDB4NTAgICAgIHwgSFQyNExDMDggICAgIHwgZWVwcm9tICgxa0IpCisgKgorICogVE9ETzogQWRkIEc3NjIgc3VwcG9ydCB0byB0aGUgZzc2MGEgZHJpdmVyLgorICovCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZDJuZXRfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJyczVjMzcyYiIsIDB4MzIpLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oIjI0YzA4IiwgMHg1MCksCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0FUQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGQybmV0X3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCisjZGVmaW5lIEQyTkVUX0dQSU9fU0FUQTBfUE9XRVIJMworI2RlZmluZSBEMk5FVF9HUElPX1NBVEExX1BPV0VSCTEyCisKK3N0YXRpYyB2b2lkIF9faW5pdCBkMm5ldF9zYXRhX3Bvd2VyX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEQyTkVUX0dQSU9fU0FUQTBfUE9XRVIsICJTQVRBMCBwb3dlciIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRDJORVRfR1BJT19TQVRBMF9QT1dFUiwgMSk7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoRDJORVRfR1BJT19TQVRBMF9QT1dFUik7CisJfQorCWlmIChlcnIpCisJCXByX2VycigiZDJuZXQ6IGZhaWxlZCB0byBjb25maWd1cmUgU0FUQTAgcG93ZXIgR1BJT1xuIik7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoRDJORVRfR1BJT19TQVRBMV9QT1dFUiwgIlNBVEExIHBvd2VyIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChEMk5FVF9HUElPX1NBVEExX1BPV0VSLCAxKTsKKwkJaWYgKGVycikKKwkJCWdwaW9fZnJlZShEMk5FVF9HUElPX1NBVEExX1BPV0VSKTsKKwl9CisJaWYgKGVycikKKwkJcHJfZXJyKCJkMm5ldDogZmFpbGVkIHRvIGNvbmZpZ3VyZSBTQVRBMSBwb3dlciBHUElPXG4iKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIExFRCdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFRoZSBibHVlIGZyb250IExFRCBpcyB3aXJlZCB0byB0aGUgQ1BMRCBhbmQgY2FuIGJsaW5rIGluIHJlbGF0aW9uIHdpdGggdGhlCisgKiBTQVRBIGFjdGl2aXR5LiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgdG8gbWFrZSB0aGlzIExFRCBjb21wYXRpYmxlIHdpdGgKKyAqIHRoZSBsZWRzLWdwaW8gZHJpdmVyOiBNUFAxNCBhbmQgTVBQMTUgYXJlIGNvbmZpZ3VyZWQgdG8gYWN0IGxpa2Ugb3V0cHV0CisgKiBHUElPJ3MgYW5kIGhhdmUgdG8gc3RheSBpbiBhbiBhY3RpdmUgc3RhdGUuIFRoaXMgaXMgbmVlZGVkIHRvIHNldCB0aGUgYmx1ZQorICogTEVEIGluIGEgImZpeCBvbiIgc3RhdGUgcmVnYXJkbGVzcyBvZiB0aGUgU0FUQSBhY3Rpdml0eS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGFycmF5IGRldGFpbCB0aGUgZGlmZmVyZW50IExFRCByZWdpc3RlcnMgYW5kIHRoZSBjb21iaW5hdGlvbgorICogb2YgdGhlaXIgcG9zc2libGUgdmFsdWVzOgorICoKKyAqIGxlZF9vZmYgICB8IGJsaW5rX2N0cmwgfCBTQVRBIGFjdGl2ZSB8IExFRCBzdGF0ZQorICogICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAqICAgIDEgICAgICB8ICAgICB4ICAgICAgfCAgICAgIHggICAgICB8ICBvZmYKKyAqICAgIDAgICAgICB8ICAgICAwICAgICAgfCAgICAgIDAgICAgICB8ICBvZmYKKyAqICAgIDAgICAgICB8ICAgICAxICAgICAgfCAgICAgIDAgICAgICB8ICBibGluayAocmF0ZSAzMDBtcykKKyAqICAgIDAgICAgICB8ICAgICB4ICAgICAgfCAgICAgIDEgICAgICB8ICBvbgorICoKKyAqIE5vdGVzOiBUaGUgYmx1ZSBhbmQgdGhlIHJlZCBmcm9udCBMRUQncyBjYW4ndCBiZSBvbiBhdCB0aGUgc2FtZSB0aW1lLgorICogICAgICAgIFJlZCBMRUQgaGF2ZSBwcmlvcml0eS4KKyAqLworCisjZGVmaW5lIEQyTkVUX0dQSU9fUkVEX0xFRAkJNgorI2RlZmluZSBEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwJMTYKKyNkZWZpbmUgRDJORVRfR1BJT19CTFVFX0xFRF9PRkYJCTIzCisjZGVmaW5lIEQyTkVUX0dQSU9fU0FUQTBfQUNUCQkxNAorI2RlZmluZSBEMk5FVF9HUElPX1NBVEExX0FDVAkJMTUKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkMm5ldF9sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJkMm5ldDpibHVlOnBvd2VyIiwKKwkJLmdwaW8gPSBEMk5FVF9HUElPX0JMVUVfTEVEX09GRiwKKwkJLmFjdGl2ZV9sb3cgPSAxLAorCX0sCisJeworCQkubmFtZSA9ICJkMm5ldDpyZWQ6ZmFpbCIsCisJCS5ncGlvID0gRDJORVRfR1BJT19SRURfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZDJuZXRfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzID0gQVJSQVlfU0laRShkMm5ldF9sZWRzKSwKKwkubGVkcyA9IGQybmV0X2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkMm5ldF9ncGlvX2xlZHMgPSB7CisJLm5hbWUgICAgICAgICAgID0gImxlZHMtZ3BpbyIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmZDJuZXRfbGVkX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkMm5ldF9ncGlvX2xlZHNfaW5pdCh2b2lkKQoreworCS8qIENvbmZpZ3VyZSBHUElPIG92ZXIgTVBQIG1heCBudW1iZXIuICovCisJb3Jpb25fZ3Bpb19zZXRfdmFsaWQoRDJORVRfR1BJT19CTFVFX0xFRF9PRkYsIDEpOworCisJaWYgKGdwaW9fcmVxdWVzdChEMk5FVF9HUElPX1NBVEEwX0FDVCwgIkxFRCBTQVRBMCBhY3Rpdml0eSIpICE9IDApCisJCXJldHVybjsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEQyTkVUX0dQSU9fU0FUQTBfQUNULCAxKSAhPSAwKQorCQlnb3RvIGVycl9mcmVlXzE7CisJaWYgKGdwaW9fcmVxdWVzdChEMk5FVF9HUElPX1NBVEExX0FDVCwgIkxFRCBTQVRBMSBhY3Rpdml0eSIpICE9IDApCisJCWdvdG8gZXJyX2ZyZWVfMTsKKwlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEQyTkVUX0dQSU9fU0FUQTFfQUNULCAxKSAhPSAwKQorCQlnb3RvIGVycl9mcmVlXzI7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkMm5ldF9ncGlvX2xlZHMpOworCXJldHVybjsKKworZXJyX2ZyZWVfMjoKKwlncGlvX2ZyZWUoRDJORVRfR1BJT19TQVRBMV9BQ1QpOworZXJyX2ZyZWVfMToKKwlncGlvX2ZyZWUoRDJORVRfR1BJT19TQVRBMF9BQ1QpOworCXJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRDJORVRfR1BJT19QVVNIX0JVVFRPTgkJMTgKKyNkZWZpbmUgRDJORVRfR1BJT19QT1dFUl9TV0lUQ0hfT04JOAorI2RlZmluZSBEMk5FVF9HUElPX1BPV0VSX1NXSVRDSF9PRkYJOQorCisjZGVmaW5lIEQyTkVUX1NXSVRDSF9QT1dFUl9PTgkJMHgxCisjZGVmaW5lIEQyTkVUX1NXSVRDSF9QT1dFUl9PRkYJCTB4MgorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gZDJuZXRfYnV0dG9uc1tdID0geworCXsKKwkJLnR5cGUJCT0gRVZfU1csCisJCS5jb2RlCQk9IEQyTkVUX1NXSVRDSF9QT1dFUl9PRkYsCisJCS5ncGlvCQk9IEQyTkVUX0dQSU9fUE9XRVJfU1dJVENIX09GRiwKKwkJLmRlc2MJCT0gIlBvd2VyIHJvY2tlciBzd2l0Y2ggKGF1dG98b2ZmKSIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorCXsKKwkJLnR5cGUJCT0gRVZfU1csCisJCS5jb2RlCQk9IEQyTkVUX1NXSVRDSF9QT1dFUl9PTiwKKwkJLmdwaW8JCT0gRDJORVRfR1BJT19QT1dFUl9TV0lUQ0hfT04sCisJCS5kZXNjCQk9ICJQb3dlciByb2NrZXIgc3dpdGNoIChvbnxhdXRvKSIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorCXsKKwkJLnR5cGUJCT0gRVZfS0VZLAorCQkuY29kZQkJPSBLRVlfUE9XRVIsCisJCS5ncGlvCQk9IEQyTkVUX0dQSU9fUFVTSF9CVVRUT04sCisJCS5kZXNjCQk9ICJGcm9udCBQdXNoIEJ1dHRvbiIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBkMm5ldF9idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IGQybmV0X2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShkMm5ldF9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGQybmV0X2dwaW9fYnV0dG9ucyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmQybmV0X2J1dHRvbl9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfbXBwX21vZGUgZDJuZXRfbXBwX21vZGVzW10gX19pbml0ZGF0YSA9IHsKKwl7ICAwLCBNUFBfR1BJTyB9LAkvKiBCb2FyZCBJRCAoYml0IDApICovCisJeyAgMSwgTVBQX0dQSU8gfSwJLyogQm9hcmQgSUQgKGJpdCAxKSAqLworCXsgIDIsIE1QUF9HUElPIH0sCS8qIEJvYXJkIElEIChiaXQgMikgKi8KKwl7ICAzLCBNUFBfR1BJTyB9LAkvKiBTQVRBIDAgcG93ZXIgKi8KKwl7ICA0LCBNUFBfVU5VU0VEIH0sCisJeyAgNSwgTVBQX0dQSU8gfSwJLyogRmFuIGZhaWwgZGV0ZWN0aW9uICovCisJeyAgNiwgTVBQX0dQSU8gfSwJLyogUmVkIGZyb250IExFRCAqLworCXsgIDcsIE1QUF9VTlVTRUQgfSwKKwl7ICA4LCBNUFBfR1BJTyB9LAkvKiBSZWFyIHBvd2VyIHN3aXRjaCAob258YXV0bykgKi8KKwl7ICA5LCBNUFBfR1BJTyB9LAkvKiBSZWFyIHBvd2VyIHN3aXRjaCAoYXV0b3xvZmYpICovCisJeyAxMCwgTVBQX1VOVVNFRCB9LAorCXsgMTEsIE1QUF9VTlVTRUQgfSwKKwl7IDEyLCBNUFBfR1BJTyB9LAkvKiBTQVRBIDEgcG93ZXIgKi8KKwl7IDEzLCBNUFBfVU5VU0VEIH0sCisJeyAxNCwgTVBQX0dQSU8gfSwJLyogU0FUQSAwIGFjdGl2ZSAqLworCXsgMTUsIE1QUF9HUElPIH0sCS8qIFNBVEEgMSBhY3RpdmUgKi8KKwl7IDE2LCBNUFBfR1BJTyB9LAkvKiBCbHVlIGZyb250IExFRCBibGluayBjb250cm9sICovCisJeyAxNywgTVBQX1VOVVNFRCB9LAorCXsgMTgsIE1QUF9HUElPIH0sCS8qIEZyb250IGJ1dHRvbiAoMCA9IFJlbGVhc2VkLCAxID0gUHVzaGVkICkgKi8KKwl7IDE5LCBNUFBfVU5VU0VEIH0sCisJeyAtMSB9CisJLyogMjI6IFVTQiBwb3J0IDEgZnVzZSAoMCA9IEZhaWwsIDEgPSBPaykgKi8KKwkvKiAyMzogQmx1ZSBmcm9udCBMRUQgb2ZmICovCisJLyogMjQ6IEluaGliaXQgYm9hcmQgcG93ZXIgb2ZmICgwID0gRGlzYWJsZWQsIDEgPSBFbmFibGVkKSAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGQybmV0X2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFNldHVwIGJhc2ljIE9yaW9uIGZ1bmN0aW9ucy4gTmVlZCB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJb3Jpb241eF9pbml0KCk7CisKKwlvcmlvbjV4X21wcF9jb25mKGQybmV0X21wcF9tb2Rlcyk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSBwZXJpcGhlcmFscy4KKwkgKi8KKwlvcmlvbjV4X2VoY2kwX2luaXQoKTsKKwlvcmlvbjV4X2V0aF9pbml0KCZkMm5ldF9ldGhfZGF0YSk7CisJb3Jpb241eF9pMmNfaW5pdCgpOworCW9yaW9uNXhfdWFydDBfaW5pdCgpOworCisJZDJuZXRfc2F0YV9wb3dlcl9pbml0KCk7CisJb3Jpb241eF9zYXRhX2luaXQoJmQybmV0X3NhdGFfZGF0YSk7CisKKwlvcmlvbjV4X3NldHVwX2Rldl9ib290X3dpbihEMk5FVF9OT1JfQk9PVF9CQVNFLAorCQkJCUQyTkVUX05PUl9CT09UX1NJWkUpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfbm9yX2ZsYXNoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfZ3Bpb19idXR0b25zKTsKKworCWQybmV0X2dwaW9fbGVkc19pbml0KCk7CisKKwlwcl9ub3RpY2UoImQybmV0OiBGbGFzaCB3cml0ZSBhcmUgbm90IHlldCBzdXBwb3J0ZWQuXG4iKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGQybmV0X2kyY19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUoZDJuZXRfaTJjX2RldmljZXMpKTsKK30KKworLyogV2FybmluZzogTGFDaWUgdXNlIGEgd3JvbmcgbWFjaC10eXBlICgweDIwZT01MjYpIGluIHRoZWlyIGJvb3Rsb2FkZXIuICovCisKKyNpZmRlZiBDT05GSUdfTUFDSF9EMk5FVAorTUFDSElORV9TVEFSVChEMk5FVCwgIkxhQ2llIGQyIE5ldHdvcmsiKQorCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBkMm5ldF9pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JJR0RJU0sKK01BQ0hJTkVfU1RBUlQoQklHRElTSywgIkxhQ2llIEJpZyBEaXNrIE5ldHdvcmsiKQorCS5waHlzX2lvCT0gT1JJT041WF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE9SSU9ONVhfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4RkZGQywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBkMm5ldF9pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L25ldDJiaWctc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9uZXQyYmlnLXNldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkNjI4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9uZXQyYmlnLXNldHVwLmMKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9yaW9uNXgvbmV0MmJpZy1zZXR1cC5jCisgKgorICogTGFDaWUgMkJpZyBOZXR3b3JrIE5BUyBzZXR1cAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTaW1vbiBHdWlub3QgPHNndWlub3RAbGFjaWUuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9vcmlvbjV4Lmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTGFDaWUgMkJpZyBOZXR3b3JrIEluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogNTEyS0IgTk9SIGZsYXNoIERldmljZSBidXMgYm9vdCBjaGlwIHNlbGVjdAorICovCisKKyNkZWZpbmUgTkVUMkJJR19OT1JfQk9PVF9CQVNFCQkweGZmZjgwMDAwCisjZGVmaW5lIE5FVDJCSUdfTk9SX0JPT1RfU0laRQkJU1pfNTEySworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDUxMktCIE5PUiBGbGFzaCBvbiBCb290IERldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUT0RPOiBDaGVjayB3cml0ZSBzdXBwb3J0IG9uIGZsYXNoIE1YMjlMVjQwMENCVEMtNzBHCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5ldDJiaWdfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIkZ1bGw1MTJrYiIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBuZXQyYmlnX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAxLAorCS5wYXJ0cwkJPSBuZXQyYmlnX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShuZXQyYmlnX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuZXQyYmlnX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCQk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAkJCT0gTkVUMkJJR19OT1JfQk9PVF9CQVNFLAorCS5lbmQJCQk9IE5FVDJCSUdfTk9SX0JPT1RfQkFTRQorCQkJCQkrIE5FVDJCSUdfTk9SX0JPT1RfU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuZXQyYmlnX25vcl9mbGFzaCA9IHsKKwkubmFtZQkJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmV0MmJpZ19ub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZuZXQyYmlnX25vcl9mbGFzaF9yZXNvdXJjZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRXRoZXJuZXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgbmV0MmJpZ19ldGhfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGRldmljZXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogaTJjIGFkZHIgfCBjaGlwICAgICAgICAgfCBkZXNjcmlwdGlvbgorICogMHgzMiAgICAgfCBSaWNvaCA1QzM3MmIgfCBSVEMKKyAqIDB4NTAgICAgIHwgSFQyNExDMDggICAgIHwgZWVwcm9tICgxa0IpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBuZXQyYmlnX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicnM1YzM3MmIiLCAweDMyKSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCIyNGMwOCIsIDB4NTApLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNBVEEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBuZXQyYmlnX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCisjZGVmaW5lIE5FVDJCSUdfR1BJT19TQVRBX1BPV0VSX1JFUQkxOQorI2RlZmluZSBORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIJMjMKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEExX1BPV0VSCTI1CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuZXQyYmlnX3NhdGFfcG93ZXJfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwkvKiBDb25maWd1cmUgR1BJT3Mgb3ZlciBNUFAgbWF4IG51bWJlci4gKi8KKwlvcmlvbl9ncGlvX3NldF92YWxpZChORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIsIDEpOworCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKE5FVDJCSUdfR1BJT19TQVRBMV9QT1dFUiwgMSk7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoTkVUMkJJR19HUElPX1NBVEEwX1BPV0VSLCAiU0FUQTAgcG93ZXIgc3RhdHVzIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KE5FVDJCSUdfR1BJT19TQVRBMF9QT1dFUik7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoTkVUMkJJR19HUElPX1NBVEEwX1BPV0VSKTsKKwl9CisJaWYgKGVycikgeworCQlwcl9lcnIoIm5ldDJiaWc6IGZhaWxlZCB0byBzZXR1cCBTQVRBMCBwb3dlciBHUElPXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWVyciA9IGdwaW9fcmVxdWVzdChORVQyQklHX0dQSU9fU0FUQTFfUE9XRVIsICJTQVRBMSBwb3dlciBzdGF0dXMiKTsKKwlpZiAoZXJyID09IDApIHsKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoTkVUMkJJR19HUElPX1NBVEExX1BPV0VSKTsKKwkJaWYgKGVycikKKwkJCWdwaW9fZnJlZShORVQyQklHX0dQSU9fU0FUQTFfUE9XRVIpOworCX0KKwlpZiAoZXJyKSB7CisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEExIHBvd2VyIEdQSU9cbiIpOworCQlnb3RvIGVycl9mcmVlXzE7CisJfQorCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVDJCSUdfR1BJT19TQVRBX1BPV0VSX1JFUSwgIlNBVEEgcG93ZXIgcmVxdWVzdCIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUMkJJR19HUElPX1NBVEFfUE9XRVJfUkVRLCAwKTsKKwkJaWYgKGVycikKKwkJCWdwaW9fZnJlZShORVQyQklHX0dQSU9fU0FUQV9QT1dFUl9SRVEpOworCX0KKwlpZiAoZXJyKSB7CisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEEgcG93ZXIgcmVxdWVzdCBHUElPXG4iKTsKKwkJZ290byBlcnJfZnJlZV8yOworCX0KKworCWlmIChncGlvX2dldF92YWx1ZShORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIpICYmCisJCWdwaW9fZ2V0X3ZhbHVlKE5FVDJCSUdfR1BJT19TQVRBMV9QT1dFUikpIHsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU0FUQSBwb3dlciB1cCBvbiBib3RoIGRpc2sgaXMgZG9uZSBieSBwdWxsaW5nIGhpZ2ggdGhlIENQTEQgcG93ZXIKKwkgKiByZXF1ZXN0IGxpbmUuIFRoZSAzMDBtcyBkZWxheSBpcyByZWxhdGVkIHRvIHRoZSBDUExEIGNsb2NrIGFuZCBpcworCSAqIG5lZWRlZCB0byBiZSBzdXJlIHRoYXQgdGhlIENQTEQgaGFzIHRha2UgaW50byBhY2NvdW50IHRoZSBsb3cgbGluZQorCSAqIHN0YXR1cy4KKwkgKi8KKwltc2xlZXAoMzAwKTsKKwlncGlvX3NldF92YWx1ZShORVQyQklHX0dQSU9fU0FUQV9QT1dFUl9SRVEsIDEpOworCXByX2luZm8oIm5ldDJiaWc6IHBvd2VyIHVwIFNBVEEgaGFyZCBkaXNrc1xuIik7CisKKwlyZXR1cm47CisKK2Vycl9mcmVlXzI6CisJZ3Bpb19mcmVlKE5FVDJCSUdfR1BJT19TQVRBMV9QT1dFUik7CitlcnJfZnJlZV8xOgorCWdwaW9fZnJlZShORVQyQklHX0dQSU9fU0FUQTBfUE9XRVIpOworCisJcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8gTEVEcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGUgcG93ZXIgZnJvbnQgTEVEcyAoYmx1ZSBhbmQgcmVkKSBhbmQgU0FUQSByZWQgTEVEcyBhcmUgY29udHJvbGxlZCB2aWEgYQorICogc2luZ2xlIEdQSU8gbGluZSBhbmQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGUgbGVkcy1ncGlvIGRyaXZlci4KKyAqCisgKiBUaGUgU0FUQSBibHVlIExFRHMgaGF2ZSBzb21lIGhhcmR3YXJlIGJsaW5rIGNhcGFiaWxpdGllcyB3aGljaCBhcmUgZGV0YWlsbGVkCisgKiBpbiB0aGUgZm9sbG93aW5nIGFycmF5OgorICoKKyAqIFNBVEF4IGJsdWUgTEVEIHwgU0FUQXggYWN0aXZpdHkgfCBMRUQgc3RhdGUKKyAqICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICogICAgICAgMCAgICAgICAgfCAgICAgICAwICAgICAgICB8ICBibGluayAocmF0ZSAzMDBtcykKKyAqICAgICAgIDEgICAgICAgIHwgICAgICAgMCAgICAgICAgfCAgb2ZmCisgKiAgICAgICA/ICAgICAgICB8ICAgICAgIDEgICAgICAgIHwgIG9uCisgKgorICogTm90ZXM6IFRoZSBibHVlIGFuZCB0aGUgcmVkIGZyb250IExFRCdzIGNhbid0IGJlIG9uIGF0IHRoZSBzYW1lIHRpbWUuCisgKiAgICAgICAgQmx1ZSBMRUQgaGF2ZSBwcmlvcml0eS4KKyAqLworCisjZGVmaW5lIE5FVDJCSUdfR1BJT19QV1JfUkVEX0xFRAk2CisjZGVmaW5lIE5FVDJCSUdfR1BJT19QV1JfQkxVRV9MRUQJMTYKKyNkZWZpbmUgTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUAk3CisKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEEwX1JFRF9MRUQJMTEKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEExX1JFRF9MRUQJMTAKKworI2RlZmluZSBORVQyQklHX0dQSU9fU0FUQTBfQkxVRV9MRUQJMTcKKyNkZWZpbmUgTkVUMkJJR19HUElPX1NBVEExX0JMVUVfTEVECTEzCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgbmV0MmJpZ19sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJuZXQyYmlnOnJlZDpwb3dlciIsCisJCS5ncGlvID0gTkVUMkJJR19HUElPX1BXUl9SRURfTEVELAorCX0sCisJeworCQkubmFtZSA9ICJuZXQyYmlnOmJsdWU6cG93ZXIiLAorCQkuZ3BpbyA9IE5FVDJCSUdfR1BJT19QV1JfQkxVRV9MRUQsCisJfSwKKwl7CisJCS5uYW1lID0gIm5ldDJiaWc6cmVkOnNhdGEwIiwKKwkJLmdwaW8gPSBORVQyQklHX0dQSU9fU0FUQTBfUkVEX0xFRCwKKwl9LAorCXsKKwkJLm5hbWUgPSAibmV0MmJpZzpyZWQ6c2F0YTEiLAorCQkuZ3BpbyA9IE5FVDJCSUdfR1BJT19TQVRBMV9SRURfTEVELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbmV0MmJpZ19sZWRfZGF0YSA9IHsKKwkubnVtX2xlZHMgPSBBUlJBWV9TSVpFKG5ldDJiaWdfbGVkcyksCisJLmxlZHMgPSBuZXQyYmlnX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuZXQyYmlnX2dwaW9fbGVkcyA9IHsKKwkubmFtZSAgICAgICAgICAgPSAibGVkcy1ncGlvIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZuZXQyYmlnX2xlZF9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbmV0MmJpZ19ncGlvX2xlZHNfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwkvKiBTdG9wIGluaXRpYWwgQ1BMRCBzbG93IHJlZC9ibHVlIGJsaW5raW5nIG9uIHBvd2VyIExFRC4gKi8KKwllcnIgPSBncGlvX3JlcXVlc3QoTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUCwKKwkJCSAgICJQb3dlciBMRUQgYmxpbmsgc3RvcCIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUCwgMSk7CisJCWlmIChlcnIpCisJCQlncGlvX2ZyZWUoTkVUMkJJR19HUElPX1BXUl9MRURfQkxJTktfU1RPUCk7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIHBvd2VyIExFRCBibGluayBHUElPXG4iKTsKKworCS8qCisJICogQ29uZmlndXJlIFNBVEEwIGFuZCBTQVRBMSBibHVlIExFRHMgdG8gYmxpbmsgaW4gcmVsYXRpb24gd2l0aCB0aGUKKwkgKiBoYXJkIGRpc2sgYWN0aXZpdHkuCisJICovCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVDJCSUdfR1BJT19TQVRBMF9CTFVFX0xFRCwKKwkJCSAgICJTQVRBMCBibHVlIExFRCBjb250cm9sIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChORVQyQklHX0dQSU9fU0FUQTBfQkxVRV9MRUQsIDEpOworCQlpZiAoZXJyKQorCQkJZ3Bpb19mcmVlKE5FVDJCSUdfR1BJT19TQVRBMF9CTFVFX0xFRCk7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEEwIGJsdWUgTEVEIEdQSU9cbiIpOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE5FVDJCSUdfR1BJT19TQVRBMV9CTFVFX0xFRCwKKwkJCSAgICJTQVRBMSBibHVlIExFRCBjb250cm9sIik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChORVQyQklHX0dQSU9fU0FUQTFfQkxVRV9MRUQsIDEpOworCQlpZiAoZXJyKQorCQkJZ3Bpb19mcmVlKE5FVDJCSUdfR1BJT19TQVRBMV9CTFVFX0xFRCk7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0MmJpZzogZmFpbGVkIHRvIHNldHVwIFNBVEExIGJsdWUgTEVEIEdQSU9cbiIpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXQyYmlnX2dwaW9fbGVkcyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleXMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE5FVDJCSUdfR1BJT19QVVNIX0JVVFRPTgkxOAorI2RlZmluZSBORVQyQklHX0dQSU9fUE9XRVJfU1dJVENIX09OCTgKKyNkZWZpbmUgTkVUMkJJR19HUElPX1BPV0VSX1NXSVRDSF9PRkYJOQorCisjZGVmaW5lIE5FVDJCSUdfU1dJVENIX1BPV0VSX09OCQkweDEKKyNkZWZpbmUgTkVUMkJJR19TV0lUQ0hfUE9XRVJfT0ZGCTB4MgorCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gbmV0MmJpZ19idXR0b25zW10gPSB7CisJeworCQkudHlwZQkJPSBFVl9TVywKKwkJLmNvZGUJCT0gTkVUMkJJR19TV0lUQ0hfUE9XRVJfT0ZGLAorCQkuZ3BpbwkJPSBORVQyQklHX0dQSU9fUE9XRVJfU1dJVENIX09GRiwKKwkJLmRlc2MJCT0gIlBvd2VyIHJvY2tlciBzd2l0Y2ggKGF1dG98b2ZmKSIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorCXsKKwkJLnR5cGUJCT0gRVZfU1csCisJCS5jb2RlCQk9IE5FVDJCSUdfU1dJVENIX1BPV0VSX09OLAorCQkuZ3BpbwkJPSBORVQyQklHX0dQSU9fUE9XRVJfU1dJVENIX09OLAorCQkuZGVzYwkJPSAiUG93ZXIgcm9ja2VyIHN3aXRjaCAob258YXV0bykiLAorCQkuYWN0aXZlX2xvdwk9IDAsCisJfSwKKwl7CisJCS50eXBlCQk9IEVWX0tFWSwKKwkJLmNvZGUJCT0gS0VZX1BPV0VSLAorCQkuZ3BpbwkJPSBORVQyQklHX0dQSU9fUFVTSF9CVVRUT04sCisJCS5kZXNjCQk9ICJGcm9udCBQdXNoIEJ1dHRvbiIsCisJCS5hY3RpdmVfbG93CT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBuZXQyYmlnX2J1dHRvbl9kYXRhID0geworCS5idXR0b25zCT0gbmV0MmJpZ19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUobmV0MmJpZ19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5ldDJiaWdfZ3Bpb19idXR0b25zID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbmV0MmJpZ19idXR0b25fZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHZW5lcmFsIFNldHVwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBvcmlvbjV4X21wcF9tb2RlIG5ldDJiaWdfbXBwX21vZGVzW10gX19pbml0ZGF0YSA9IHsKKwl7ICAwLCBNUFBfR1BJTyB9LAkvKiBSYWlkIG1vZGUgKGJpdCAwKSAqLworCXsgIDEsIE1QUF9HUElPIH0sCS8qIFVTQiBwb3J0IDIgZnVzZSAoMCA9IEZhaWwsIDEgPSBPaykgKi8KKwl7ICAyLCBNUFBfR1BJTyB9LAkvKiBSYWlkIG1vZGUgKGJpdCAxKSAqLworCXsgIDMsIE1QUF9HUElPIH0sCS8qIEJvYXJkIElEIChiaXQgMCkgKi8KKwl7ICA0LCBNUFBfR1BJTyB9LAkvKiBGYW4gYWN0aXZpdHkgKDAgPSBPZmYsIDEgPSBPbikgKi8KKwl7ICA1LCBNUFBfR1BJTyB9LAkvKiBGYW4gZmFpbCBkZXRlY3Rpb24gKi8KKwl7ICA2LCBNUFBfR1BJTyB9LAkvKiBSZWQgZnJvbnQgTEVEICgwID0gT2ZmLCAxID0gT24pICovCisJeyAgNywgTVBQX0dQSU8gfSwJLyogRGlzYWJsZSBpbml0aWFsIGJsaW5raW5nIG9uIGZyb250IExFRCAqLworCXsgIDgsIE1QUF9HUElPIH0sCS8qIFJlYXIgcG93ZXIgc3dpdGNoIChvbnxhdXRvKSAqLworCXsgIDksIE1QUF9HUElPIH0sCS8qIFJlYXIgcG93ZXIgc3dpdGNoIChhdXRvfG9mZikgKi8KKwl7IDEwLCBNUFBfR1BJTyB9LAkvKiBTQVRBIDEgcmVkIExFRCAoMCA9IE9mZiwgMSA9IE9uKSAqLworCXsgMTEsIE1QUF9HUElPIH0sCS8qIFNBVEEgMCByZWQgTEVEICgwID0gT2ZmLCAxID0gT24pICovCisJeyAxMiwgTVBQX0dQSU8gfSwJLyogQm9hcmQgSUQgKGJpdCAxKSAqLworCXsgMTMsIE1QUF9HUElPIH0sCS8qIFNBVEEgMSBibHVlIExFRCBibGluayBjb250cm9sICovCisJeyAxNCwgTVBQX1NBVEFfTEVEIH0sCisJeyAxNSwgTVBQX1NBVEFfTEVEIH0sCisJeyAxNiwgTVBQX0dQSU8gfSwJLyogQmx1ZSBmcm9udCBMRUQgY29udHJvbCAqLworCXsgMTcsIE1QUF9HUElPIH0sCS8qIFNBVEEgMCBibHVlIExFRCBibGluayBjb250cm9sICovCisJeyAxOCwgTVBQX0dQSU8gfSwJLyogRnJvbnQgYnV0dG9uICgwID0gUmVsZWFzZWQsIDEgPSBQdXNoZWQgKSAqLworCXsgMTksIE1QUF9HUElPIH0sCS8qIFNBVEF7MCwxfSBwb3dlciBPbi9PZmYgcmVxdWVzdCAqLworCXsgLTEgfQorCS8qIDIyOiBVU0IgcG9ydCAxIGZ1c2UgKDAgPSBGYWlsLCAxID0gT2spICovCisJLyogMjM6IFNBVEEgMCBwb3dlciBzdGF0dXMgKi8KKwkvKiAyNDogQm9hcmQgcG93ZXIgb2ZmICovCisJLyogMjU6IFNBVEEgMSBwb3dlciBzdGF0dXMgKi8KK307CisKKyNkZWZpbmUgTkVUMkJJR19HUElPX1BPV0VSX09GRgkJMjQKKworc3RhdGljIHZvaWQgbmV0MmJpZ19wb3dlcl9vZmYodm9pZCkKK3sKKwlncGlvX3NldF92YWx1ZShORVQyQklHX0dQSU9fUE9XRVJfT0ZGLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG5ldDJiaWdfaW5pdCh2b2lkKQoreworCS8qCisJICogU2V0dXAgYmFzaWMgT3Jpb24gZnVuY3Rpb25zLiBOZWVkIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlvcmlvbjV4X2luaXQoKTsKKworCW9yaW9uNXhfbXBwX2NvbmYobmV0MmJpZ19tcHBfbW9kZXMpOworCisJLyoKKwkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCisJICovCisJb3Jpb241eF9laGNpMF9pbml0KCk7CisJb3Jpb241eF9laGNpMV9pbml0KCk7CisJb3Jpb241eF9ldGhfaW5pdCgmbmV0MmJpZ19ldGhfZGF0YSk7CisJb3Jpb241eF9pMmNfaW5pdCgpOworCW9yaW9uNXhfdWFydDBfaW5pdCgpOworCW9yaW9uNXhfeG9yX2luaXQoKTsKKworCW5ldDJiaWdfc2F0YV9wb3dlcl9pbml0KCk7CisJb3Jpb241eF9zYXRhX2luaXQoJm5ldDJiaWdfc2F0YV9kYXRhKTsKKworCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKE5FVDJCSUdfTk9SX0JPT1RfQkFTRSwKKwkJCQkgICBORVQyQklHX05PUl9CT09UX1NJWkUpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbmV0MmJpZ19ub3JfZmxhc2gpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZuZXQyYmlnX2dwaW9fYnV0dG9ucyk7CisJbmV0MmJpZ19ncGlvX2xlZHNfaW5pdCgpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbmV0MmJpZ19pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG5ldDJiaWdfaTJjX2RldmljZXMpKTsKKworCW9yaW9uX2dwaW9fc2V0X3ZhbGlkKE5FVDJCSUdfR1BJT19QT1dFUl9PRkYsIDEpOworCisJaWYgKGdwaW9fcmVxdWVzdChORVQyQklHX0dQSU9fUE9XRVJfT0ZGLCAicG93ZXItb2ZmIikgPT0gMCAmJgorCSAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQoTkVUMkJJR19HUElPX1BPV0VSX09GRiwgMCkgPT0gMCkKKwkJcG1fcG93ZXJfb2ZmID0gbmV0MmJpZ19wb3dlcl9vZmY7CisJZWxzZQorCQlwcl9lcnIoIm5ldDJiaWc6IGZhaWxlZCB0byBjb25maWd1cmUgcG93ZXItb2ZmIEdQSU9cbiIpOworCisJcHJfbm90aWNlKCJuZXQyYmlnOiBGbGFzaCB3cml0aW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLlxuIik7Cit9CisKKy8qIFdhcm5pbmc6IExhQ2llIHVzZSBhIHdyb25nIG1hY2gtdHlwZSAoMHgyMGU9NTI2KSBpbiB0aGVpciBib290bG9hZGVyLiAqLworTUFDSElORV9TVEFSVChORVQyQklHLCAiTGFDaWUgMkJpZyBOZXR3b3JrIikKKwkucGh5c19pbwk9IE9SSU9ONVhfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChPUklPTjVYX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweEZGRkMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gbmV0MmJpZ19pbml0LAorCS5tYXBfaW8JCT0gb3Jpb241eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gb3Jpb241eF9pbml0X2lycSwKKwkudGltZXIJCT0gJm9yaW9uNXhfdGltZXIsCisJLmZpeHVwCQk9IHRhZ19maXh1cF9tZW0zMiwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3hfa2V5cGFkLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4X2tleXBhZC5oCmluZGV4IGQ1YTQ4YTkuLjdiNGVhZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyN3hfa2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eF9rZXlwYWQuaApAQCAtMiw5ICsyLDEyIEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfUFhBMjd4X0tFWVBBRF9ICiAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KIAogI2RlZmluZSBNQVhfTUFUUklYX0tFWV9ST1dTCSg4KQogI2RlZmluZSBNQVhfTUFUUklYX0tFWV9DT0xTCSg4KQorI2RlZmluZSBNQVRSSVhfUk9XX1NISUZUCSgzKQorI2RlZmluZSBNQVhfRElSRUNUX0tFWV9OVU0JKDgpCiAKIC8qIHB4YTN4eCBrZXlwYWQgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwogICoKQEAgLTMzLDcgKzM2LDcgQEAKIAogCS8qIGRpcmVjdCBrZXlzICovCiAJaW50CQlkaXJlY3Rfa2V5X251bTsKLQl1bnNpZ25lZCBpbnQJZGlyZWN0X2tleV9tYXBbOF07CisJdW5zaWduZWQgaW50CWRpcmVjdF9rZXlfbWFwW01BWF9ESVJFQ1RfS0VZX05VTV07CiAKIAkvKiByb3RhcnkgZW5jb2RlcnMgMCAqLwogCWludAkJZW5hYmxlX3JvdGFyeTA7CkBAIC01MSw4ICs1NCw2IEBACiAJdW5zaWduZWQgaW50CWRlYm91bmNlX2ludGVydmFsOwogfTsKIAotI2RlZmluZSBLRVkocm93LCBjb2wsIHZhbCkJKCgocm93KSA8PCAyOCkgfCAoKGNvbCkgPDwgMjQpIHwgKHZhbCkpCi0KIGV4dGVybiB2b2lkIHB4YV9zZXRfa2V5cGFkX2luZm8oc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqaW5mbyk7CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1BYQTI3eF9LRVlQQURfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCmluZGV4IDI1NDZjMDYuLjYyOWUwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKQEAgLTY3OCw4ICs2NzgsOCBAQAogCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVXNlciB0cmlnZ2VyZWQgd2FrZXVwIGluIG9mZmxpbmUgY2hhcmdlci5cbiIpOwogCX0KIAotCWlmICgoIXNoYXJwc2xfcG0ubWFjaGluZm8tPnJlYWRfZGV2ZGF0YShTSEFSUFNMX1NUQVRVU19MT0NLKSkgfHwgKHNoYXJwc2xfZmF0YWxfY2hlY2soKSA8IDApICkKLQl7CisJaWYgKCghc2hhcnBzbF9wbS5tYWNoaW5mby0+cmVhZF9kZXZkYXRhKFNIQVJQU0xfU1RBVFVTX0xPQ0spKSB8fAorCSAgICAoIXNoYXJwc2xfcG0ubWFjaGluZm8tPnJlYWRfZGV2ZGF0YShTSEFSUFNMX1NUQVRVU19GQVRBTCkpKQl7CiAJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJGYXRhbCBjb25kaXRpb24uIFN1c3BlbmQuXG4iKTsKIAkJY29yZ2lfZ290b19zbGVlcChhbGFybV90aW1lLCBhbGFybV9lbmFibGUsIHN0YXRlKTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKaW5kZXggZDRjZmEyMS4uZGZjOWIwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwpAQCAtNzUsNyArNzUsNyBAQAogCiBjb25maWcgUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAogCWJvb2wgIkhpZ2ggcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGZvciB0aGUgUmVhbFZpZXcgcGxhdGZvcm0iCi0JZGVwZW5kcyBvbiAhTUFDSF9SRUFMVklFV19QQjExNzYKKwlkZXBlbmRzIG9uIE1NVSAmJiAhTUFDSF9SRUFMVklFV19QQjExNzYKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBSZWFsVmlldyBib2FyZHMgb3RoZXIgdGhhbiBQQjExNzYgaGF2ZSB0aGUgUkFNIGF2YWlsYWJsZSBhdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCBmYWNiZDQ5Li5kYzM1MTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMjIxLDYgKzIyMSw5IEBACiAKICNkZWZpbmUgUkVBTFZJRVdfU1lTTUNJCShfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsgUkVBTFZJRVdfU1lTX01DSV9PRkZTRVQpCiAKKy8qCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBpZiBHUElPTElCIHN1cHBvcnQgaXMgZGlzYWJsZWQKKyAqLwogc3RhdGljIHVuc2lnbmVkIGludCByZWFsdmlld19tbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYW1iYV9kZXZpY2UsIGRldik7CkBAIC0yMzcsMTEgKzI0MCwxNSBAQAogc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IHJlYWx2aWV3X21tY19zdGF0dXMsCisJLmdwaW9fd3AJPSAxNywKKwkuZ3Bpb19jZAk9IDE2LAogfTsKIAogc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IHJlYWx2aWV3X21tY19zdGF0dXMsCisJLmdwaW9fd3AJPSAxOSwKKwkuZ3Bpb19jZAk9IDE4LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZmMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKyNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggYjQyYzE0Zi4uOGE2MzhkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKIC8qIG1hY3JvIHRvIGdldCBhdCBJTyBzcGFjZSB3aGVuIHJ1bm5pbmcgdmlydHVhbGx5ICovCisjaWZkZWYgQ09ORklHX01NVQogLyoKICAqIFN0YXRpY2FsbHkgbWFwcGVkIGFkZHJlc3NlczoKICAqCkBAIC0zMyw2ICszNCw5IEBACiAgKiAxZnh4IHh4eHggLT4gZmV4eCB4eHh4CiAgKi8KICNkZWZpbmUgSU9fQUREUkVTUyh4KQkJKCgoeCkgJiAweDAzZmZmZmZmKSArIDB4ZmIwMDAwMDApCisjZWxzZQorI2RlZmluZSBJT19BRERSRVNTKHgpCQkoeCkKKyNlbmRpZgogI2RlZmluZSBfX2lvX2FkZHJlc3MobikJCV9faW8oSU9fQUREUkVTUyhuKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGFjMGU4M2YuLmE4ODQ1OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vdW5pZmllZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGIxMW1wLmg+CkBAIC0xMzcsMjYgKzEzOCwxOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcG9rZV9taWxvKHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgc2Vjb25kYXJ5X3N0YXJ0dXAodm9pZCk7Ci0KIAkvKiBub2JvZHkgaXMgdG8gYmUgcmVsZWFzZWQgZnJvbSB0aGUgcGVuIHlldCAqLwogCXBlbl9yZWxlYXNlID0gLTE7CiAKIAkvKgotCSAqIHdyaXRlIHRoZSBhZGRyZXNzIG9mIHNlY29uZGFyeSBzdGFydHVwIGludG8gdGhlIHN5c3RlbS13aWRlCi0JICogZmxhZ3MgcmVnaXN0ZXIsIHRoZW4gY2xlYXIgdGhlIGJvdHRvbSB0d28gYml0cywgd2hpY2ggaXMgd2hhdAotCSAqIEJvb3RNb25pdG9yIGlzIHdhaXRpbmcgZm9yCisJICogV3JpdGUgdGhlIGFkZHJlc3Mgb2Ygc2Vjb25kYXJ5IHN0YXJ0dXAgaW50byB0aGUgc3lzdGVtLXdpZGUgZmxhZ3MKKwkgKiByZWdpc3Rlci4gVGhlIEJvb3RNb25pdG9yIHdhaXRzIGZvciB0aGlzIHJlZ2lzdGVyIHRvIGJlY29tZQorCSAqIG5vbi16ZXJvLgogCSAqLwotI2lmIDEKICNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQgMHgzMAotCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMocmVhbHZpZXdfc2Vjb25kYXJ5X3N0YXJ0dXApLAorI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NDX09GRlNFVCAweDM0CisJX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSksCiAJCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCiAJCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQpOwotI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NDX09GRlNFVCAweDM0Ci0JX19yYXdfd3JpdGVsKDMsCi0JCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTQ19PRkZTRVQpOwotI2VuZGlmCiAKIAltYigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCmluZGV4IDhkZmE0NGUuLmFiZDEzYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTEzLDYgKzExNCwyMSBAQAogCQlpb3RhYmxlX2luaXQocmVhbHZpZXdfZWIxMW1wX2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfZWIxMW1wX2lvX2Rlc2MpKTsKIH0KIAorc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8wX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzJfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBFQiBBTUJBIGRldmljZXMKICAqLwpAQCAtMTg5LDkgKzIwNSw5IEBACiBBTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7CiBBTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7CiBBTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBFQl9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7CiBBTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBFQl9SVEMsICAgTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBFQl9VQVJUMCwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwppbmRleCAyNWVmZTcxLi4xN2ZiYjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMTA3LDYgKzEwOCwyMSBAQAogCWlvdGFibGVfaW5pdChyZWFsdmlld19wYjExNzZfaW9fZGVzYywgQVJSQVlfU0laRShyZWFsdmlld19wYjExNzZfaW9fZGVzYykpOwogfQogCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzBfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAwLAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8xX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gOCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMl9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDE2LAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKwogLyoKICAqIFJlYWxWaWV3IFBCMTE3NiBBTUJBIGRldmljZXMKICAqLwpAQCAtMTY0LDkgKzE4MCw5IEBACiBBTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQjExNzZfU01DLAlOVUxMKTsKIEFNQkFfREVWSUNFKHNjdGwsCSJkZXY6ZTAiLAlTQ1RMLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh3ZG9nLAkiZGV2OmUxIiwJUEIxMTc2X1dBVENIRE9HLAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEIxMTc2X0dQSU8wLAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEIxMTc2X0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKIEFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCMTE3Nl9SVEMsCU5VTEwpOwogQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwogQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQjExNzZfVUFSVDAsCU5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKaW5kZXggZGM0YjE2OS4uZmRkMDQyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTEwOCw2ICsxMDksMjEgQEAKIAlpb3RhYmxlX2luaXQocmVhbHZpZXdfcGIxMW1wX2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2lvX2Rlc2MpKTsKIH0KIAorc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8wX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzJfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQjExTVBDb3JlIEFNQkEgZGV2aWNlcwogICovCkBAIC0xNjYsOSArMTgyLDkgQEAKIEFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCMTFNUF9TTUMsCU5VTEwpOwogQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKIEFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCU5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwogQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEIxMU1QX1JUQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCmluZGV4IGQ2YWMxZWIuLjcwYmJhOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTk4LDYgKzk5LDIxIEBACiAJaW90YWJsZV9pbml0KHJlYWx2aWV3X3BiYThfaW9fZGVzYywgQVJSQVlfU0laRShyZWFsdmlld19wYmE4X2lvX2Rlc2MpKTsKIH0KIAorc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8wX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMV9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDgsCisJLmlycV9iYXNlCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzJfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKIC8qCiAgKiBSZWFsVmlldyBQQkE4Q29yZSBBTUJBIGRldmljZXMKICAqLwpAQCAtMTU2LDkgKzE3Miw5IEBACiBBTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQkE4X1NNQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwogQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCQThfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQkE4X0dQSU8wLAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEJBOF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CiBBTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQkE4X1JUQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCQThfVUFSVDAsCU5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKaW5kZXggZWRlMmE1Ny4uY2U2YzVkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTExOCw2ICsxMTksMjEgQEAKIAkJaW90YWJsZV9pbml0KHJlYWx2aWV3X2xvY2FsX2lvX2Rlc2MsIEFSUkFZX1NJWkUocmVhbHZpZXdfbG9jYWxfaW9fZGVzYykpOwogfQogCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzBfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAwLAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8xX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gOCwKKwkuaXJxX2Jhc2UJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMl9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDE2LAorCS5pcnFfYmFzZQk9IC0xLAorfTsKKwogLyoKICAqIFJlYWxWaWV3IFBCWENvcmUgQU1CQSBkZXZpY2VzCiAgKi8KQEAgLTE3Niw5ICsxOTIsOSBAQAogQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEJYX1NNQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwogQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCWF9XQVRDSERPRywgCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQlhfR1BJTzAsCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCU5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQlhfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwogQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEJYX1JUQywJTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCWF9VQVJUMCwJTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IDQxYmI2NWQuLmQ4YzAyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC0xMiw2ICsxMiw3IEBACiAJc2VsZWN0IFMzQzI0MTBfR1BJTwogCXNlbGVjdCBDUFVfTExTRVJJQUxfUzNDMjQxMAogCXNlbGVjdCBTM0MyNDEwX1BNIGlmIFBNCisJc2VsZWN0IFMzQzI0MTBfQ1BVRlJFUSBpZiBDUFVfRlJFUV9TM0MyNFhYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUzNDMjQxMCBhbmQgUzNDMjQxMEEgZmFtaWx5IGZyb20gdGhlIFMzQzI0WFggbGluZQogCSAgb2YgU2Ftc3VuZyBNb2JpbGUgQ1BVcy4KQEAgLTQ1LDYgKzQ2LDIyIEBACiAJICBJbnRlcm5hbCBub2RlIGZvciBtYWNoaW5lcyB3aXRoIGFuIEJBU1Qgc3R5bGUgSURFCiAJICBpbnRlcmZhY2UKIAorIyBjcHUgZnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydAorCitjb25maWcgUzNDMjQxMF9DUFVGUkVRCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiBDUFVfUzNDMjQxMAorCXNlbGVjdCBTM0MyNDEwX0NQVUZSRVFfVVRJTFMKKwloZWxwCisJICBDUFUgRnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydCBmb3IgUzNDMjQxMAorCitjb25maWcgUzNDMjQxMF9QTExUQUJMRQorCWJvb2wKKwlkZXBlbmRzIG9uIFMzQzI0MTBfQ1BVRlJFUSAmJiBDUFVfRlJFUV9TM0MyNFhYX1BMTAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNlbGVjdCB0aGUgUExMIHRhYmxlIGZvciB0aGUgUzNDMjQxMAorCiBtZW51ICJTM0MyNDEwIE1hY2hpbmVzIgogCiBjb25maWcgQVJDSF9TTURLMjQxMApAQCAtNzksNiArOTYsNyBAQAogY29uZmlnIEFSQ0hfQkFTVAogCWJvb2wgIlNpbXRlYyBFbGVjdHJvbmljcyBCQVNUIChFQjI0MTBJVFgpIgogCXNlbGVjdCBDUFVfUzNDMjQxMAorCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIFMzQzI0MTBfQ1BVRlJFUQogCXNlbGVjdCBQTV9TSU1URUMgaWYgUE0KIAlzZWxlY3QgU0lNVEVDX05PUgogCXNlbGVjdCBNQUNIX0JBU1RfSURFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggZmNhMDJmOC4uMmFiNWJhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMTUsNiArMTUsOCBAQAogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwX0RNQSkJKz0gZG1hLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX1BNKQkrPSBwbS5vIHNsZWVwLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX0dQSU8pCSs9IGdwaW8ubworb2JqLSQoQ09ORklHX1MzQzI0MTBfQ1BVRlJFUSkJKz0gY3B1LWZyZXEubworb2JqLSQoQ09ORklHX1MzQzI0MTBfUExMVEFCTEUpCSs9IHBsbC5vCiAKICMgTWFjaGluZSBzdXBwb3J0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUtZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS1mcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxMTg2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUtZnJlcS5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LWZyZXEuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIENQVSBGcmVxdWVuY3kgc2NhbGluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLWNvcmUuaD4KKworLyogTm90ZSwgMjQxMEEgaGFzIGFuIGV4dHJhIG1vZGUgZm9yIDE6NDo0IHJhdGlvLCBiaXQgMiBvZiBDTEtESVYgKi8KKworc3RhdGljIHZvaWQgczNjMjQxMF9jcHVmcmVxX3NldGRpdnMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXUzMiBjbGtkaXYgPSAwOworCisJaWYgKGNmZy0+ZGl2cy5oX2Rpdmlzb3IgPT0gMikKKwkJY2xrZGl2IHw9IFMzQzI0MTBfQ0xLRElWTl9IRElWTjsKKworCWlmIChjZmctPmRpdnMucF9kaXZpc29yICE9IGNmZy0+ZGl2cy5oX2Rpdmlzb3IpCisJCWNsa2RpdiB8PSBTM0MyNDEwX0NMS0RJVk5fUERJVk47CisKKwlfX3Jhd193cml0ZWwoY2xrZGl2LCBTM0MyNDEwX0NMS0RJVk4pOworfQorCitzdGF0aWMgaW50IHMzYzI0MTBfY3B1ZnJlcV9jYWxjZGl2cyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBwY2xrOworCXVuc2lnbmVkIGludCBoZGl2LCBwZGl2OworCXVuc2lnbmVkIGxvbmcgaGNsa19tYXg7CisKKwlmY2xrID0gY2ZnLT5mcmVxLmZjbGs7CisJaGNsa19tYXggPSBjZmctPm1heC5oY2xrOworCisJY2ZnLT5mcmVxLmFybWNsayA9IGZjbGs7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBmY2xrIGlzICVsdSwgbWF4IGhjbGsgJWx1XG4iLAorCQkgICAgICBfX2Z1bmNfXywgZmNsaywgaGNsa19tYXgpOworCisJaGRpdiA9IChmY2xrID4gY2ZnLT5tYXguaGNsaykgPyAyIDogMTsKKwloY2xrID0gZmNsayAvIGhkaXY7CisKKwlpZiAoaGNsayA+IGNmZy0+bWF4LmhjbGspIHsKKwkJczNjX2ZyZXFfZGJnKCIlczogaGNsayB0b28gYmlnXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBkaXYgPSAoaGNsayA+IGNmZy0+bWF4LnBjbGspID8gMiA6IDE7CisJcGNsayA9IGhjbGsgLyBwZGl2OworCisJaWYgKHBjbGsgPiBjZmctPm1heC5wY2xrKSB7CisJCXMzY19mcmVxX2RiZygiJXM6IHBjbGsgdG9vIGJpZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwZGl2ICo9IGhkaXY7CisKKwkvKiByZWNvcmQgdGhlIHJlc3VsdCAqLworCWNmZy0+ZGl2cy5wX2Rpdmlzb3IgPSBwZGl2OworCWNmZy0+ZGl2cy5oX2Rpdmlzb3IgPSBoZGl2OworCisJcmV0dXJuIDAgICAgICA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2NwdWZyZXFfaW5mbyBzM2MyNDEwX2NwdWZyZXFfaW5mbyA9IHsKKwkubWF4CQk9IHsKKwkJLmZjbGsJPSAyMDAwMDAwMDAsCisJCS5oY2xrCT0gMTAwMDAwMDAwLAorCQkucGNsawk9ICA1MDAwMDAwMCwKKwl9LAorCisJLyogdHJhbnNpdGlvbiBsYXRlbmN5IGlzIGFib3V0IDVtcyB3b3JzdC1jYXNlLCBzbworCSAqIHNldCAxMG1zIHRvIGJlIHN1cmUgKi8KKwkubGF0ZW5jeQk9IDEwMDAwMDAwLAorCisJLmxvY2t0aW1lX20JPSAxNTAsCisJLmxvY2t0aW1lX3UJPSAxNTAsCisJLmxvY2t0aW1lX2JpdHMJPSAxMiwKKworCS5uZWVkX3BsbAk9IDEsCisKKwkubmFtZQkJPSAiczNjMjQxMCIsCisJLmNhbGNfaW90aW1pbmcJPSBzM2MyNDEwX2lvdGltaW5nX2NhbGMsCisJLnNldF9pb3RpbWluZwk9IHMzYzI0MTBfaW90aW1pbmdfc2V0LAorCS5nZXRfaW90aW1pbmcJPSBzM2MyNDEwX2lvdGltaW5nX2dldCwKKwkucmVzdW1lX2Nsb2Nrcwk9IHMzYzI0MTBfc2V0dXBfY2xvY2tzLAorCisJLnNldF9mdmNvCT0gczNjMjQxMF9zZXRfZnZjbywKKwkuc2V0X3JlZnJlc2gJPSBzM2MyNDEwX2NwdWZyZXFfc2V0cmVmcmVzaCwKKwkuc2V0X2RpdnMJPSBzM2MyNDEwX2NwdWZyZXFfc2V0ZGl2cywKKwkuY2FsY19kaXZzCT0gczNjMjQxMF9jcHVmcmVxX2NhbGNkaXZzLAorCisJLmRlYnVnX2lvX3Nob3cJPSBzM2NfY3B1ZnJlcV9kZWJ1Z2ZzX2NhbGwoczNjMjQxMF9pb3RpbWluZ19kZWJ1Z2ZzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMF9jcHVmcmVxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXJldHVybiBzM2NfY3B1ZnJlcV9yZWdpc3RlcigmczNjMjQxMF9jcHVmcmVxX2luZm8pOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9jcHVmcmVxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0MTBfY3B1ZnJlcV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX2NwdWZyZXFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLAorCQkJCSAgICAgICZzM2MyNDEwX2NwdWZyZXFfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEwX2NwdWZyZXFfaW5pdCk7CisKK3N0YXRpYyBpbnQgczNjMjQxMGFfY3B1ZnJlcV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3sKKwkvKiBhbHRlciB0aGUgbWF4aW11bSBmcmVxIHNldHRpbmdzIGZvciBTM0MyNDEwQS4gSWYgYSBib2FyZCBrbm93cworCSAqIGl0IG9ubHkgaGFzIGEgbWF4aW11bSBvZiAyMDAsIHRoZW4gaXQgc2hvdWxkIHJlZ2lzdGVyIGl0cyBvd24KKwkgKiBsaW1pdHMuICovCisKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5tYXguZmNsayA9IDI2NjAwMDAwMDsKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5tYXguaGNsayA9IDEzMzAwMDAwMDsKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5tYXgucGNsayA9ICA2NjUwMDAwMDsKKwlzM2MyNDEwX2NwdWZyZXFfaW5mby5uYW1lID0gInMzYzI0MTBhIjsKKworCXJldHVybiBzM2MyNDEwX2NwdWZyZXFfYWRkKHN5c2Rldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9jcHVmcmVxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0MTBhX2NwdWZyZXFfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMGFfY3B1ZnJlcV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBhX3N5c2NsYXNzLAorCQkJCSAgICAgICZzM2MyNDEwYV9jcHVmcmVxX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfY3B1ZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCBkYmY5NmU2Li42M2I3NTNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0xNjQsNiArMTY0LDE3IEBACiB9CiAKIGFyY2hfaW5pdGNhbGwoczNjMjQxMF9kbWFfZHJ2aW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9kbWFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDEwX2RtYV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwYV9kbWFfZHJ2aW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwYV9zeXNjbGFzcywgJnMzYzI0MTBhX2RtYV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0MTBhX2RtYV9kcnZpbml0KTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDJhMjM4NGYuLjZjMTJjNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xNjQsNiArMTY0LDEyIEBACiAjZGVmaW5lIElSUV9TM0NVQVJUX1RYMwkJSVJRX1MzQzI0NDNfVFgzCiAjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjMJSVJRX1MzQzI0NDNfRVJSMwogCisjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCisjZGVmaW5lIElSUV9TM0MyNDR4X0FDOTcgSVJRX1MzQzI0NDBfQUM5NworI2Vsc2UKKyNkZWZpbmUgSVJRX1MzQzI0NHhfQUM5NyBJUlFfUzNDMjQ0M19BQzk3CisjZW5kaWYKKwogLyogT3VyIEZJUXMgYXJlIHJvdXRhYmxlIGZyb20gSVJRX0VJTlQwIHRvIElSUV9BRENQQVJFTlQgKi8KICNkZWZpbmUgRklRX1NUQVJUCQlJUlFfRUlOVDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggZTk5YjIxMi4uYjA0OWU2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC02Nyw2ICs2NywxMyBAQAogI2RlZmluZSBTM0MyNDQzX1BBX0hTTU1DICAgKDB4NEE4MDAwMDApCiAjZGVmaW5lIFMzQzI0NDNfU1pfSFNNTUMgICAoMjU2KQogCisvKiBTM0MyNDEyIG1lbW9yeSBhbmQgSU8gY29udHJvbHMgKi8KKyNkZWZpbmUgUzNDMjQxMl9QQV9TU01DCSgweDRGMDAwMDAwKQorI2RlZmluZSBTM0MyNDEyX1ZBX1NTTUMJUzNDX0FERFJfQ1BVKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgUzNDMjQxMl9QQV9FQkkJKDB4NDg4MDAwMDApCisjZGVmaW5lIFMzQzI0MTJfVkFfRUJJCVMzQ19BRERSX0NQVSgweDAwMDEwMDAwKQorCiAvKiBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgYWxsIHRoZSBjaGlwLXNlbGVjdCBhcmVhcyAqLwogCiAjZGVmaW5lIFMzQzI0MTBfQ1MwICgweDAwMDAwMDAwKQpAQCAtMTAzLDUgKzExMCw2IEBACiAjZGVmaW5lIFMzQ19QQV9VQVJUCSAgICBTM0MyNFhYX1BBX1VBUlQKICNkZWZpbmUgUzNDX1BBX1VTQkhPU1QJUzNDMjQxMF9QQV9VU0JIT1NUCiAjZGVmaW5lIFMzQ19QQV9IU01NQzAJICAgIFMzQzI0NDNfUEFfSFNNTUMKKyNkZWZpbmUgUzNDX1BBX05BTkQJICAgIFMzQzI0WFhfUEFfTkFORAogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKaW5kZXggYjI3OGQwYy4uZjZlOGVlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCkBAIC0zMjgsMTMgKzMyOCwxNSBAQAogCiAjZGVmaW5lIFMzQzI0MTBfR1BEOF9WRDE2CSgweDAyIDw8IDE2KQogI2RlZmluZSBTM0MyNDAwX0dQRDhfVE9VVDMJKDB4MDIgPDwgMTYpCisjZGVmaW5lIFMzQzI0NDBfR1BEOF9TUElNSVNPMQkoMHgwMyA8PCAxNikKIAogI2RlZmluZSBTM0MyNDEwX0dQRDlfVkQxNwkoMHgwMiA8PCAxOCkKICNkZWZpbmUgUzNDMjQwMF9HUEQ5X1RDTEswCSgweDAyIDw8IDE4KQotI2RlZmluZSBTM0MyNDEwX0dQRDlfTUFTSyAgICAgICAoMHgwMyA8PCAxOCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEQ5X1NQSU1PU0kxCSgweDAzIDw8IDE4KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BEMTBfVkQxOAkoMHgwMiA8PCAyMCkKICNkZWZpbmUgUzNDMjQwMF9HUEQxMF9uV0FJVAkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDMjQ0MF9HUEQxMF9TUElDTEsxCSgweDAzIDw8IDIwKQogCiAjZGVmaW5lIFMzQzI0MTBfR1BEMTFfVkQxOQkoMHgwMiA8PCAyMikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLW1lbS5oCmluZGV4IDU3NzU5ODAuLjdmN2M1MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1tZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtbWVtLmgKQEAgLTczLDYgKzczLDE2IEBACiAjZGVmaW5lIFMzQzI0MTBfQldTQ09OX1dTNwkJKDE8PDMwKQogI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9TVDcJCSgxPDwzMSkKIAorLyogYWNjZXNvciBmdW5jdGlvbnMgZm9yIGdldHRpbmcgQkFOSyhuKSBjb25maWd1cmF0aW9uLiAobiAhPSAwKSAqLworCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0dFVChfYndzY29uLCBfYmFuaykgKCgoX2J3c2NvbikgPj4gKChfYmFuaykgKiA0KSkgJiAweGYpCisKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFc4CQkoMCkKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fRFcxNgkJKDEpCisjZGVmaW5lIFMzQzI0MTBfQldTQ09OX0RXMzIJCSgyKQorI2RlZmluZSBTM0MyNDEwX0JXU0NPTl9XUwkJKDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMF9CV1NDT05fU1QJCSgxIDw8IDMpCisKIC8qIG1lbW9yeSBzZXQgKHJvbSwgcmFtKSAqLwogI2RlZmluZSBTM0MyNDEwX0JBTktDT04wCQlTM0MyNDEwX01FTVJFRygweDAwMDQpCiAjZGVmaW5lIFMzQzI0MTBfQkFOS0NPTjEJCVMzQzI0MTBfTUVNUkVHKDB4MDAwOCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1zM2MyNDEyLW1lbS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0MTItbWVtLmgKaW5kZXggYTRiZjI3MS4uZmI2MzUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0MTItbWVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0MTItbWVtLmgKQEAgLTE0LDkgKzE0LDExIEBACiAjaWZuZGVmIF9fQVNNX0FSTV9SRUdTX1MzQzI0MTJfTUVNCiAjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX1MzQzI0MTJfTUVNCiAKLSNpZm5kZWYgUzNDMjQxMl9NRU1SRUcKICNkZWZpbmUgUzNDMjQxMl9NRU1SRUcoeCkgKFMzQzI0WFhfVkFfTUVNQ1RSTCArICh4KSkKLSNlbmRpZgorI2RlZmluZSBTM0MyNDEyX0VCSVJFRyh4KSAoUzNDMjQxMl9WQV9FQkkgKyAoeCkpCisKKyNkZWZpbmUgUzNDMjQxMl9TU01DUkVHKHgpIChTM0MyNDEyX1ZBX1NTTUMgKyAoeCkpCisjZGVmaW5lIFMzQzI0MTJfU1NNQyh4LCBvKSAoUzNDMjQxMl9TU01DUkVHKCh4ICogMHgyMCkgKyAobykpKQogCiAjZGVmaW5lIFMzQzI0MTJfQkFOS0NGRwkJCVMzQzI0MTJfTUVNUkVHKDB4MDApCiAjZGVmaW5lIFMzQzI0MTJfQkFOS0NPTjEJCVMzQzI0MTJfTUVNUkVHKDB4MDQpCkBAIC0yNiw0ICsyOCwyMSBAQAogI2RlZmluZSBTM0MyNDEyX1JFRlJFU0gJCQlTM0MyNDEyX01FTVJFRygweDEwKQogI2RlZmluZSBTM0MyNDEyX1RJTUVPVVQJCQlTM0MyNDEyX01FTVJFRygweDE0KQogCisvKiBFQkkgY29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTM0MyNDEyX0VCSV9QUgkJCVMzQzI0MTJfRUJJUkVHKDB4MDApCisjZGVmaW5lIFMzQzI0MTJfRUJJX0JBTktDRkcJCVMzQzI0MTJfRUJJUkVHKDB4MDQpCisKKy8qIFNTTUMgY29udHJvbCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTM0MyNDEyX1NTTUNfQkFOSyh4KQkJUzNDMjQxMl9TU01DKHgsIDB4MDApCisjZGVmaW5lIFMzQzI0MTJfU01JRENZUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MDApCisjZGVmaW5lIFMzQzI0MTJfU01CV1NUUkQoeCkJCVMzQzI0MTJfU1NNQyh4LCAweDA0KQorI2RlZmluZSBTM0MyNDEyX1NNQldTVFdSUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MDgpCisjZGVmaW5lIFMzQzI0MTJfU01CV1NUT0VOUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MEMpCisjZGVmaW5lIFMzQzI0MTJfU01CV1NUV0VOUih4KQkJUzNDMjQxMl9TU01DKHgsIDB4MTApCisjZGVmaW5lIFMzQzI0MTJfU01CQ1IoeCkJCVMzQzI0MTJfU1NNQyh4LCAweDE0KQorI2RlZmluZSBTM0MyNDEyX1NNQlNSKHgpCQlTM0MyNDEyX1NTTUMoeCwgMHgxOCkKKyNkZWZpbmUgUzNDMjQxMl9TTUJXU1RCUkRSKHgpCQlTM0MyNDEyX1NTTUMoeCwgMHgxQykKKwogI2VuZGlmIC8qICBfX0FTTV9BUk1fUkVHU19TM0MyNDEyX01FTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLmgKaW5kZXggMWQzMDBmYi4uMTkzYjM5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGkuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS5oCkBAIC0zMCw0ICszMCw3IEBACiBleHRlcm4gdm9pZCBzM2MyNHh4X3NwaV9ncGlvY2ZnX2J1czFfZ3BnNV82Xzcoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKIAkJCQkJICAgICAgaW50IGVuYWJsZSk7CiAKK2V4dGVybiB2b2lkIHMzYzI0eHhfc3BpX2dwaW9jZmdfYnVzMV9ncGQ4XzlfMTAoc3RydWN0IHMzYzI0MTBfc3BpX2luZm8gKnNwaSwKKwkJCQkJICAgICAgIGludCBlbmFibGUpOworCiAjZW5kaWYgLyogX19BU01fQVJDSF9TUElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCmluZGV4IDkyMTUwMzkuLjVlMmYzNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKQEAgLTM5LDkgKzM5LDIyIEBACiAJLnJlc3VtZQkJPSBzM2MyNHh4X2lycV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IHMzYzI0MTBfaXJxX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfaXJxX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9zeXNjbGFzcywgJnMzYzI0MTBfaXJxX2RyaXZlcik7CiB9CiAKIGFyY2hfaW5pdGNhbGwoczNjMjQxMF9pcnFfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9pcnFfZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAorCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBhX2lycV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBhX3N5c2NsYXNzLCAmczNjMjQxMGFfaXJxX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfaXJxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IGNlM2JhYmEyLi42NDdjOWFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1sY2QuaD4KIAorI2luY2x1ZGUgPHBsYXQvaHdtb24uaD4KICNpbmNsdWRlIDxwbGF0L25hbmQuaD4KICNpbmNsdWRlIDxwbGF0L2lpYy5oPgogI2luY2x1ZGUgPG1hY2gvZmIuaD4KQEAgLTU5LDYgKzYwLDcgQEAKICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CiAKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAjaW5jbHVkZSAibm9yLXNpbXRlYy5oIgpAQCAtNTQ3LDcgKzU0OSwzNSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHMzY19od21vbl9wZGF0YSBiYXN0X2h3bW9uX2luZm8gPSB7CisJLyogTENEIGNvbnRyYXN0ICgwLTYuNlYpICovCisJLmluWzBdID0gJihzdHJ1Y3QgczNjX2h3bW9uX2NoY2ZnKSB7CisJCS5uYW1lCQk9ICJsY2QtY29udHJhc3QiLAorCQkubXVsdAkJPSAzMzAwLAorCQkuZGl2CQk9IDUxMiwKKwl9LAorCS8qIExFRCBjdXJyZW50IGZlZWRiYWNrICovCisJLmluWzFdID0gJihzdHJ1Y3QgczNjX2h3bW9uX2NoY2ZnKSB7CisJCS5uYW1lCQk9ICJsZWQtZmVlZGJhY2siLAorCQkubXVsdAkJPSAzMzAwLAorCQkuZGl2CQk9IDEwMjQsCisJfSwKKwkvKiBMQ0QgZmVlZGJhY2sgKDAtNi42VikgKi8KKwkuaW5bMl0gPSAmKHN0cnVjdCBzM2NfaHdtb25fY2hjZmcpIHsKKwkJLm5hbWUJCT0gImxjZC1mZWVkYmFjayIsCisJCS5tdWx0CQk9IDMzMDAsCisJCS5kaXYJCT0gNTEyLAorCX0sCisJLyogVmNvcmUgKDEuOC0yLjBWKSwgVnJlZiAzLjNWICAqLworCS5pblszXSA9ICYoc3RydWN0IHMzY19od21vbl9jaGNmZykgeworCQkubmFtZQkJPSAidmNvcmUiLAorCQkubXVsdAkJPSAzMzAwLAorCQkuZGl2CQk9IDEwMjQsCisJfSwKK307CisKIC8qIFN0YW5kYXJkIEJBU1QgZGV2aWNlcyAqLworLy8gY2F0IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9zM2MyNHh4LWFkYy9zM2MtaHdtb24vaW5fMAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYmFzdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmczNjX2RldmljZV91c2IsCkBAIC01NTYsNiArNTg2LDggQEAKIAkmczNjX2RldmljZV9pMmMwLAogIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2VfbmFuZCwKKwkmczNjX2RldmljZV9hZGMsCisJJnMzY19kZXZpY2VfaHdtb24sCiAJJmJhc3RfZGV2aWNlX2RtOWssCiAJJmJhc3RfZGV2aWNlX2FzaXgsCiAJJmJhc3RfZGV2aWNlX2F4cHAsCkBAIC01NzAsNiArNjAyLDEyIEBACiAJJnMzYzI0eHhfdWNsaywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgX19pbml0ZGF0YSBiYXN0X2NwdWZyZXEgPSB7CisJLnJlZnJlc2gJPSA3ODAwLCAvKiA3Ljh1c2VjICovCisJLmF1dG9faW8JPSAxLAorCS5uZWVkX2lvCT0gMSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBiYXN0X21hcF9pbyh2b2lkKQogewogCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyAqLwpAQCAtNTg4LDYgKzYyNiw3IEBACiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MoYmFzdF9jbG9ja3MsIEFSUkFZX1NJWkUoYmFzdF9jbG9ja3MpKTsKIAogCXMzY19kZXZpY2VfbmFuZC5kZXYucGxhdGZvcm1fZGF0YSA9ICZiYXN0X25hbmRfaW5mbzsKKwlzM2NfZGV2aWNlX2h3bW9uLmRldi5wbGF0Zm9ybV9kYXRhID0gJmJhc3RfaHdtb25faW5mbzsKIAogCXMzYzI0eHhfaW5pdF9pbyhiYXN0X2lvZGVzYywgQVJSQVlfU0laRShiYXN0X2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMCk7CkBAIC02MDgsNiArNjQ3LDggQEAKIAogCXVzYl9zaW10ZWNfaW5pdCgpOwogCW5vcl9zaW10ZWNfaW5pdCgpOworCisJczNjX2NwdWZyZXFfc2V0Ym9hcmQoJmJhc3RfY3B1ZnJlcSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoQkFTVCwgIlNpbXRlYy1CQVNUIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbGwuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc4YzJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BsbC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9wbGwuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCVZpbmNlbnQgU2FuZGVycyA8dmluY2VAYXJtLmxpbnV4Lm9yZy51az4KKyAqCisgKiBTM0MyNDEwIENQVSBQTEwgdGFibGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLWNvcmUuaD4KKworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBwbGxfdmFsc18xMk1IeltdID0geworICAgIHsgLmZyZXF1ZW5jeSA9IDM0MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDgyLCAyLCAzKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDQ1MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDgyLCAxLCAzKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDUxMDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDE2MSwgMywgMyksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDQ4MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDEyMCwgMiwgMyksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDU2MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDE0MiwgMiwgMyksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDY4MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDgyLCAyLCAyKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDc5MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDcxLCAxLCAyKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDg1MDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDEwNSwgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDkwMDAwMDAwLCAgLmluZGV4ID0gUExMVkFMKDExMiwgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDEwMTAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDEyNywgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDExMzAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDEwNSwgMSwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDExODAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDE1MCwgMiwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDEyNDAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDExNiwgMSwgMiksICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDEzNTAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDgyLCAyLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE0NzAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDkwLCAyLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE1MjAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDY4LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE1ODAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDcxLCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE3MDAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDc3LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE4MDAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDgyLCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE4NjAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDg1LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDE5MjAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDg4LCAxLCAxKSwgICB9LAorICAgIHsgLmZyZXF1ZW5jeSA9IDIwMzAwMDAwMCwgLmluZGV4ID0gUExMVkFMKDE2MSwgMywgMSksICB9LAorCisgICAgLyogMjQxMEEgZXh0cmFzICovCisKKyAgICB7IC5mcmVxdWVuY3kgPSAyMTAwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMzIsIDIsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyMjYwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMDUsIDEsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyNjYwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMjUsIDEsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyNjgwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMjYsIDEsIDEpLCAgfSwKKyAgICB7IC5mcmVxdWVuY3kgPSAyNzAwMDAwMDAsIC5pbmRleCA9IFBMTFZBTCgxMjcsIDEsIDEpLCAgfSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMF9wbGxzX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXJldHVybiBzM2NfcGxsdGFiX3JlZ2lzdGVyKHBsbF92YWxzXzEyTUh6LCBBUlJBWV9TSVpFKHBsbF92YWxzXzEyTUh6KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwX3BsbHNfZHJ2ID0geworCS5hZGQJPSBzM2MyNDEwX3BsbHNfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9wbGxfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLCAmczNjMjQxMF9wbGxzX2Rydik7CisKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEwX3BsbF9pbml0KTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTBhX3BsbHNfZHJ2ID0geworCS5hZGQJPSBzM2MyNDEwX3BsbHNfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMGFfcGxsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMGFfc3lzY2xhc3MsICZzM2MyNDEwYV9wbGxzX2Rydik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfcGxsX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwppbmRleCAxNDNlMDhhLi45NjYxMTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtMTE5LDYgKzExOSwxOCBAQAogfQogCiBhcmNoX2luaXRjYWxsKHMzYzI0MTBfcG1fZHJ2aW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMGFfcG1fZHJ2aW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwYV9zeXNjbGFzcywgJnMzYzI0MTBhX3BtX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMGFfcG1fZHJ2aW5pdCk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKaW5kZXggZmViMTQxYjEuLjkxYmE0MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwpAQCAtMTA1LDE3ICsxMDUsMzMgQEAKIAlzM2MyNHh4X3NldHVwX2Nsb2NrcyhmY2xrLCBoY2xrLCBwY2xrKTsKIH0KIAorLyogZmFrZSBBUk1DTEsgZm9yIHVzZSB3aXRoIGNwdWZyZXEsIGV0Yy4gKi8KKworc3RhdGljIHN0cnVjdCBjbGsgczNjMjQxMF9hcm1jbGsgPSB7CisJLm5hbWUJPSAiYXJtY2xrIiwKKwkucGFyZW50CT0gJmNsa19mLAorCS5pZAk9IC0xLAorfTsKKwogdm9pZCBfX2luaXQgczNjMjQxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKIHsKIAlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CiAJczNjMjQxMF9zZXR1cF9jbG9ja3MoKTsKIAlzM2MyNDEwX2Jhc2VjbGtfYWRkKCk7CisJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQxMF9hcm1jbGspOwogfQogCiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTBfc3lzY2xhc3MgPSB7CiAJLm5hbWUgPSAiczNjMjQxMC1jb3JlIiwKIH07CiAKKy8qIE5vdGUsIHdlIHdvdWxkIGhhdmUgbGlrZWQgdG8gbmFtZSB0aGlzIHMzYzI0MTAtY29yZSwgYnV0IHdlIGNhbm5vdAorICogcmVnaXN0ZXIgdHdvIHN5c2Rldl9jbGFzcyB3aXRoIHRoZSBzYW1lIG5hbWUuCisgKi8KK3N0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQxMGFfc3lzY2xhc3MgPSB7CisJLm5hbWUgPSAiczNjMjQxMGEtY29yZSIsCit9OworCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQxMF9zeXNkZXYgPSB7CiAJLmNscwkJPSAmczNjMjQxMF9zeXNjbGFzcywKIH07CkBAIC0xMzMsOSArMTQ5LDIyIEBACiAKIGNvcmVfaW5pdGNhbGwoczNjMjQxMF9jb3JlX2luaXQpOwogCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwYV9jb3JlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzM2MyNDEwYV9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczNjMjQxMGFfY29yZV9pbml0KTsKKwogaW50IF9faW5pdCBzM2MyNDEwX2luaXQodm9pZCkKIHsKIAlwcmludGsoIlMzQzI0MTA6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOwogCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQxMF9zeXNkZXYpOwogfQorCitpbnQgX19pbml0IHMzYzI0MTBhX2luaXQodm9pZCkKK3sKKwlzM2MyNDEwX3N5c2Rldi5jbHMgPSAmczNjMjQxMGFfc3lzY2xhc3M7CisJcmV0dXJuIHMzYzI0MTBfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwppbmRleCA2MzU4NmZmLi4zNWMxYmRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZwpAQCAtMzIsNiArMzIsMTUgQEAKIAloZWxwCiAJICBJbnRlcm5hbCBjb25maWcgbm9kZSB0byBhcHBseSBTM0MyNDEyIHBvd2VyIG1hbmFnZW1lbnQKIAorIyBOb3RlLCB0aGUgUzNDMjQxMiBJT3RpbWluZyBzdXBwb3J0IGlzIGluIHBsYXQtczNjMjR4eAorCitjb25maWcgUzNDMjQxMl9DUFVGUkVRCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiBDUFVfUzNDMjQxMgorCXNlbGVjdCBTM0MyNDEyX0lPVElNSU5HCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIHN1cHBvcnQgZm9yIFMzQzI0MTIgYW5kIFMzQzI0MTMgU29DIENQVXMuCiAKIG1lbnUgIlMzQzI0MTIgTWFjaGluZXMiCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9NYWtlZmlsZQppbmRleCAyMDkxOGQ1Li41MzBlYzQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBACiBvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IGdwaW8ubwogb2JqLSQoQ09ORklHX1MzQzI0MTJfRE1BKQkrPSBkbWEubwogb2JqLSQoQ09ORklHX1MzQzI0MTJfUE0pCSs9IHBtLm8gc2xlZXAubworb2JqLSQoQ09ORklHX1MzQzI0MTJfQ1BVRlJFUSkJKz0gY3B1LWZyZXEubwogCiAjIE1hY2hpbmUgc3VwcG9ydAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY3B1LWZyZXEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9jcHUtZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2VhMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY3B1LWZyZXEuYwpAQCAtMCwwICsxLDI1NyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2NwdS1mcmVxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMiBDUFUgRnJlcXVlbmN5IHNjYWxsaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDEyLW1lbS5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKKy8qIG91ciBjbG9jayByZXNvdXJjZXMuICovCitzdGF0aWMgc3RydWN0IGNsayAqeHRhbDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpmY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKmhjbGs7CitzdGF0aWMgc3RydWN0IGNsayAqYXJtY2xrOworCisvKiBIRElWOiAxLCAyLCAzLCA0LCA2LCA4ICovCisKK3N0YXRpYyBpbnQgczNjMjQxMl9jcHVmcmVxX2NhbGNkaXZzKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwl1bnNpZ25lZCBpbnQgaGRpdiwgcGRpdiwgYXJtZGl2LCBkdnM7CisJdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBhcm1jbGssIGFybWRpdl9jbGs7CisJdW5zaWduZWQgbG9uZyBoY2xrX21heDsKKworCWZjbGsgPSBjZmctPmZyZXEuZmNsazsKKwlhcm1jbGsgPSBjZmctPmZyZXEuYXJtY2xrOworCWhjbGtfbWF4ID0gY2ZnLT5tYXguaGNsazsKKworCS8qIFdlIGNhbid0IHJ1biBoY2xrIGFib3ZlIGFybWNsayBhcyBhdCB0aGUgYmVzdCB3ZSBoYXZlIHRvCisJICogaGF2ZSBhcm1jbGsgYW5kIGhjbGsgaW4gZHZzIG1vZGUuICovCisKKwlpZiAoaGNsa19tYXggPiBhcm1jbGspCisJCWhjbGtfbWF4ID0gYXJtY2xrOworCisJczNjX2ZyZXFfZGJnKCIlczogZmNsaz0lbHUsIGFybWNsaz0lbHUsIGhjbGtfbWF4PSVsdVxuIiwKKwkJICAgICBfX2Z1bmNfXywgZmNsaywgYXJtY2xrLCBoY2xrX21heCk7CisJczNjX2ZyZXFfZGJnKCIlczogd2FudCBmPSVsdSwgYXJtPSVsdSwgaD0lbHUsIHA9JWx1XG4iLAorCQkgICAgIF9fZnVuY19fLCBjZmctPmZyZXEuZmNsaywgY2ZnLT5mcmVxLmFybWNsaywKKwkJICAgICBjZmctPmZyZXEuaGNsaywgY2ZnLT5mcmVxLnBjbGspOworCisJYXJtZGl2ID0gZmNsayAvIGFybWNsazsKKworCWlmIChhcm1kaXYgPCAxKQorCQlhcm1kaXYgPSAxOworCWlmIChhcm1kaXYgPiAyKQorCQlhcm1kaXYgPSAyOworCisJY2ZnLT5kaXZzLmFybV9kaXZpc29yID0gYXJtZGl2OworCWFybWRpdl9jbGsgPSBmY2xrIC8gYXJtZGl2OworCisJaGRpdiA9IGFybWRpdl9jbGsgLyBoY2xrX21heDsKKwlpZiAoaGRpdiA8IDEpCisJCWhkaXYgPSAxOworCisJY2ZnLT5mcmVxLmhjbGsgPSBoY2xrID0gYXJtZGl2X2NsayAvIGhkaXY7CisKKwkvKiBzZXQgZHZzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHJlYWNoZWQgYXJtY2xrIG9yIG5vdC4gKi8KKwljZmctPmRpdnMuZHZzID0gZHZzID0gYXJtY2xrIDwgYXJtZGl2X2NsazsKKworCS8qIHVwZGF0ZSB0aGUgYWN0dWFsIGFybWNsayB3ZSBhY2hpZXZlZC4gKi8KKwljZmctPmZyZXEuYXJtY2xrID0gZHZzID8gaGNsayA6IGFybWRpdl9jbGs7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBhcm1jbGsgJWx1LCBoY2xrICVsdSwgYXJtZGl2ICVkLCBoZGl2ICVkLCBkdnMgJWRcbiIsCisJCSAgICAgX19mdW5jX18sIGFybWNsaywgaGNsaywgYXJtZGl2LCBoZGl2LCBjZmctPmRpdnMuZHZzKTsKKworCWlmIChoZGl2ID4gNCkKKwkJZ290byBpbnZhbGlkOworCisJcGRpdiA9IChoY2xrID4gY2ZnLT5tYXgucGNsaykgPyAyIDogMTsKKworCWlmICgoaGNsayAvIHBkaXYpID4gY2ZnLT5tYXgucGNsaykKKwkJcGRpdisrOworCisJY2ZnLT5mcmVxLnBjbGsgPSBoY2xrIC8gcGRpdjsKKworCXMzY19mcmVxX2RiZygiJXM6IHBkaXYgJWRcbiIsIF9fZnVuY19fLCBwZGl2KTsKKworCWlmIChwZGl2ID4gMikKKwkJZ290byBpbnZhbGlkOworCisJcGRpdiAqPSBoZGl2OworCisJLyogc3RvcmUgdGhlIHJlc3VsdCwgYW5kIHRoZW4gcmV0dXJuICovCisKKwljZmctPmRpdnMuaF9kaXZpc29yID0gaGRpdiAqIGFybWRpdjsKKwljZmctPmRpdnMucF9kaXZpc29yID0gcGRpdiAqIGFybWRpdjsKKworCXJldHVybiAwOworCisgaW52YWxpZDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgczNjMjQxMl9jcHVmcmVxX3NldGRpdnMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXVuc2lnbmVkIGxvbmcgY2xrZGl2OworCXVuc2lnbmVkIGxvbmcgb2xkZGl2OworCisJb2xkZGl2ID0gY2xrZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKKworCS8qIGNsZWFyIG9mZiBjdXJyZW50IGNsb2NrIGluZm8gKi8KKworCWNsa2RpdiAmPSB+UzNDMjQxMl9DTEtESVZOX0FSTURJVk47CisJY2xrZGl2ICY9IH5TM0MyNDEyX0NMS0RJVk5fSERJVk5fTUFTSzsKKwljbGtkaXYgJj0gflMzQzI0MTJfQ0xLRElWTl9QRElWTjsKKworCWlmIChjZmctPmRpdnMuYXJtX2Rpdmlzb3IgPT0gMikKKwkJY2xrZGl2IHw9IFMzQzI0MTJfQ0xLRElWTl9BUk1ESVZOOworCisJY2xrZGl2IHw9ICgoY2ZnLT5kaXZzLmhfZGl2aXNvciAvIGNmZy0+ZGl2cy5hcm1fZGl2aXNvcikgLSAxKTsKKworCWlmIChjZmctPmRpdnMucF9kaXZpc29yICE9IGNmZy0+ZGl2cy5oX2Rpdmlzb3IpCisJCWNsa2RpdiB8PSBTM0MyNDEyX0NMS0RJVk5fUERJVk47CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBkaXYgJTA4bHggPT4gJTA4bHhcbiIsIF9fZnVuY19fLCBvbGRkaXYsIGNsa2Rpdik7CisJX19yYXdfd3JpdGVsKGNsa2RpdiwgUzNDMjQxMF9DTEtESVZOKTsKKworCWNsa19zZXRfcGFyZW50KGFybWNsaywgY2ZnLT5kaXZzLmR2cyA/IGhjbGsgOiBmY2xrKTsKK30KKworc3RhdGljIHZvaWQgczNjMjQxMl9jcHVmcmVxX3NldHJlZnJlc2goc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAqYm9hcmQgPSBjZmctPmJvYXJkOworCXVuc2lnbmVkIGxvbmcgcmVmcmVzaDsKKworCXMzY19mcmVxX2RiZygiJXM6IHJlZnJlc2ggJXUgbnMsIGhjbGsgJWx1XG4iLCBfX2Z1bmNfXywKKwkJICAgICBib2FyZC0+cmVmcmVzaCwgY2ZnLT5mcmVxLmhjbGspOworCisJLyogUmVkdWNlIGJvdGggdGhlIHJlZnJlc2ggdGltZSAoaW4gbnMpIGFuZCB0aGUgZnJlcXVlbmN5IChpbiBNSHopCisJICogYnkgMTAgZWFjaCB0byBlbnN1cmUgdGhhdCB3ZSBkbyBub3Qgb3ZlcmZsb3cgMzIgYml0IG51bWJlcnMuIFRoaXMKKwkgKiBzaG91bGQgd29yayBmb3IgSENMSyB1cCB0byAxMzNNSHogYW5kIHJlZnJlc2ggcGVyaW9kIHVwIHRvIDMwdXNlYy4KKwkgKi8KKworCXJlZnJlc2ggPSAoYm9hcmQtPnJlZnJlc2ggLyAxMCk7CisJcmVmcmVzaCAqPSAoY2ZnLT5mcmVxLmhjbGsgLyAxMDApOworCXJlZnJlc2ggLz0gKDEgKiAxMDAwICogMTAwMCk7CS8qIDEwXjYgKi8KKworCXMzY19mcmVxX2RiZygiJXM6IHNldHRpbmcgcmVmcmVzaCAweCUwOGx4XG4iLCBfX2Z1bmNfXywgcmVmcmVzaCk7CisJX19yYXdfd3JpdGVsKHJlZnJlc2gsIFMzQzI0MTJfUkVGUkVTSCk7Cit9CisKKy8qIHNldCB0aGUgZGVmYXVsdCBjcHUgZnJlcXVlbmN5IGluZm9ybWF0aW9uLCBiYXNlZCBvbiBhbiAyMDBNSHogcGFydAorICogYXMgd2UgaGF2ZSBubyBvdGhlciB3YXkgb2YgZGV0ZWN0aW5nIHRoZSBzcGVlZCByYXRpbmcgaW4gc29mdHdhcmUuCisgKi8KKworc3RhdGljIHN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvIHMzYzI0MTJfY3B1ZnJlcV9pbmZvID0geworCS5tYXgJCT0geworCQkuZmNsawk9IDIwMDAwMDAwMCwKKwkJLmhjbGsJPSAxMDAwMDAwMDAsCisJCS5wY2xrCT0gIDUwMDAwMDAwLAorCX0sCisKKwkubGF0ZW5jeQk9IDUwMDAwMDAsIC8qIDVtcyAqLworCisJLmxvY2t0aW1lX20JPSAxNTAsCisJLmxvY2t0aW1lX3UJPSAxNTAsCisJLmxvY2t0aW1lX2JpdHMJPSAxNiwKKworCS5uYW1lCQk9ICJzM2MyNDEyIiwKKwkuc2V0X3JlZnJlc2gJPSBzM2MyNDEyX2NwdWZyZXFfc2V0cmVmcmVzaCwKKwkuc2V0X2RpdnMJPSBzM2MyNDEyX2NwdWZyZXFfc2V0ZGl2cywKKwkuY2FsY19kaXZzCT0gczNjMjQxMl9jcHVmcmVxX2NhbGNkaXZzLAorCisJLmNhbGNfaW90aW1pbmcJPSBzM2MyNDEyX2lvdGltaW5nX2NhbGMsCisJLnNldF9pb3RpbWluZwk9IHMzYzI0MTJfaW90aW1pbmdfc2V0LAorCS5nZXRfaW90aW1pbmcJPSBzM2MyNDEyX2lvdGltaW5nX2dldCwKKworCS5yZXN1bWVfY2xvY2tzCT0gczNjMjQxMl9zZXR1cF9jbG9ja3MsCisKKwkuZGVidWdfaW9fc2hvdyAgPSBzM2NfY3B1ZnJlcV9kZWJ1Z2ZzX2NhbGwoczNjMjQxMl9pb3RpbWluZ19kZWJ1Z2ZzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMl9jcHVmcmVxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmNsa19yYXRlOworCisJaGNsayA9IGNsa19nZXQoTlVMTCwgImhjbGsiKTsKKwlpZiAoSVNfRVJSKGhjbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBmaW5kIGhjbGsgY2xvY2tcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJZmNsayA9IGNsa19nZXQoTlVMTCwgImZjbGsiKTsKKwlpZiAoSVNfRVJSKGZjbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBmaW5kIGZjbGsgY2xvY2tcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfZmNsazsKKwl9CisKKwlmY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZmNsayk7CisJaWYgKGZjbGtfcmF0ZSA+IDIwMDAwMDAwMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiJXM6IGZjbGsgJWxkIE1IeiwgYXNzdW1pbmcgMjY2TUh6IGNhcGFibGUgcGFydFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBmY2xrX3JhdGUgLyAxMDAwMDAwKTsKKwkJczNjMjQxMl9jcHVmcmVxX2luZm8ubWF4LmZjbGsgPSAyNjYwMDAwMDA7CisJCXMzYzI0MTJfY3B1ZnJlcV9pbmZvLm1heC5oY2xrID0gMTMzMDAwMDAwOworCQlzM2MyNDEyX2NwdWZyZXFfaW5mby5tYXgucGNsayA9ICA2NjAwMDAwMDsKKwl9CisKKwlhcm1jbGsgPSBjbGtfZ2V0KE5VTEwsICJhcm1jbGsiKTsKKwlpZiAoSVNfRVJSKGFybWNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGZpbmQgYXJtIGNsb2NrXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2FybWNsazsKKwl9CisKKwl4dGFsID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCWlmIChJU19FUlIoeHRhbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGZpbmQgeHRhbCBjbG9ja1xuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl94dGFsOworCX0KKworCXJldHVybiBzM2NfY3B1ZnJlcV9yZWdpc3RlcigmczNjMjQxMl9jcHVmcmVxX2luZm8pOworCitlcnJfeHRhbDoKKwljbGtfcHV0KGFybWNsayk7CitlcnJfYXJtY2xrOgorCWNsa19wdXQoZmNsayk7CitlcnJfZmNsazoKKwljbGtfcHV0KGhjbGspOworCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEyX2NwdWZyZXFfZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQxMl9jcHVmcmVxX2FkZCwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMl9jcHVmcmVxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMl9zeXNjbGFzcywKKwkJCQkgICAgICAmczNjMjQxMl9jcHVmcmVxX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMl9jcHVmcmVxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKaW5kZXggNWI1YWJhNi4uYmVmMzlmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCkBAIC02OSw2ICs2OSwxOCBAQAogCUlPREVTQ19FTlQoQ0xLUFdSKSwKIAlJT0RFU0NfRU5UKFRJTUVSKSwKIAlJT0RFU0NfRU5UKFdBVENIRE9HKSwKKwl7CisJCS52aXJ0dWFsID0gKHVuc2lnbmVkIGxvbmcpUzNDMjQxMl9WQV9TU01DLAorCQkucGZuCSA9IF9fcGh5c190b19wZm4oUzNDMjQxMl9QQV9TU01DKSwKKwkJLmxlbmd0aAkgPSBTWl8xTSwKKwkJLnR5cGUJID0gTVRfREVWSUNFLAorCX0sCisJeworCQkudmlydHVhbCA9ICh1bnNpZ25lZCBsb25nKVMzQzI0MTJfVkFfRUJJLAorCQkucGZuCSA9IF9fcGh5c190b19wZm4oUzNDMjQxMl9QQV9FQkkpLAorCQkubGVuZ3RoCSA9IFNaXzFNLAorCQkudHlwZQkgPSBNVF9ERVZJQ0UsCisJfSwKIH07CiAKIC8qIHVhcnQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKaW5kZXggOGNmZWFlYy4uOGFlMWIyOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKQEAgLTMzLDYgKzMzLDcgQEAKIAlzZWxlY3QgUE1fU0lNVEVDIGlmIFBNCiAJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBTM0MyNFhYX0dQSU9fRVhUUkE2NAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIEVsZWN0cm9uaWNzIEFOVUJJUwpAQCAtNDQsNiArNDUsOCBAQAogCXNlbGVjdCBTM0MyNFhYX0RDTEsKIAlzZWxlY3QgUE1fU0lNVEVDIGlmIFBNCiAJc2VsZWN0IFMzQzI0WFhfR1BJT19FWFRSQTEyOAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKKwlzZWxlY3QgUzNDMjQxMF9JT1RJTUlORyBpZiBTM0MyNDQwX0NQVUZSRVEKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KQEAgLTUyLDYgKzU1LDcgQEAKIGNvbmZpZyBNQUNIX1JYMzcxNQogCWJvb2wgIkhQIGlQQVEgcngzNzE1IgogCXNlbGVjdCBDUFVfUzNDMjQ0MAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTY5MzQ0MDAKIAlzZWxlY3QgUE1fSDE5NDAgaWYgUE0KIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIGlQQVEgcngzNzE1LgpAQCAtNTksNiArNjMsNyBAQAogY29uZmlnIEFSQ0hfUzNDMjQ0MAogCWJvb2wgIlNNREsyNDQwIgogCXNlbGVjdCBDUFVfUzNDMjQ0MAorCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTY5MzQ0MDAKIAlzZWxlY3QgTUFDSF9TTURLCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCkBAIC02Nyw2ICs3Miw3IEBACiBjb25maWcgTUFDSF9ORVhDT0RFUl8yNDQwCiAgCWJvb2wgIk5leFZpc2lvbiBORVhDT0RFUiAyNDQwIExpZ2h0IEJvYXJkIgogIAlzZWxlY3QgQ1BVX1MzQzI0NDAKKwlzZWxlY3QgUzNDMjQ0MF9YVEFMXzEyMDAwMDAwCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQKQEAgLTc1LDYgKzgxLDcgQEAKIAlib29sICJTTURLMjQ0MCB3aXRoIFMzQzI0NDAgQ1BVIG1vZHVsZSIKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQ0MAogCWRlZmF1bHQgeSBpZiBBUkNIX1MzQzI0NDAKKwlzZWxlY3QgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCiAJc2VsZWN0IENQVV9TM0MyNDQwCiAKIGNvbmZpZyBNQUNIX0FUMjQ0MEVWQgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwppbmRleCBjYmEwNjRiLi4yMTA1YTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1vc2lyaXMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KQEAgLTM1MSw2ICszNTIsMTIgQEAKIAkmczNjMjR4eF91Y2xrLAogfTsKIAorc3RhdGljIHN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCBfX2luaXRkYXRhIG9zaXJpc19jcHVmcmVxID0geworCS5yZWZyZXNoCT0gNzgwMCwgLyogcmVmcmVzaCBwZXJpb2QgaXMgNy44dXNlYyAqLworCS5hdXRvX2lvCT0gMSwKKwkubmVlZF9pbwk9IDEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb3NpcmlzX21hcF9pbyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MDIsNiArNDA5LDggQEAKIAogCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKIAorCXMzY19jcHVmcmVxX3NldGJvYXJkKCZvc2lyaXNfY3B1ZnJlcSk7CisKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBvc2lyaXNfaTJjX2RldnMsCiAJCQkJQVJSQVlfU0laRShvc2lyaXNfaTJjX2RldnMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggYTAxMTMyNy4uNzllNGQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC04MSw1ICs4MSw2IEBACiAKICNkZWZpbmUgUzNDX1BBX1VBUlQJCVMzQzI0QTBfUEFfVUFSVAogI2RlZmluZSBTM0NfUEFfSUlDCQlTM0MyNEEwX1BBX0lJQworI2RlZmluZSBTM0NfUEFfTkFORAkJUzNDMjRYWF9QQV9OQU5ECiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIXzI0QTBfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDUwNTdkOTkuLmZjOGIyMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMzgsMTggKzM4LDIxIEBACiAjZGVmaW5lIFMzQ19WQV9VQVJUMgkJUzNDX1ZBX1VBUlR4KDIpCiAjZGVmaW5lIFMzQ19WQV9VQVJUMwkJUzNDX1ZBX1VBUlR4KDMpCiAKKyNkZWZpbmUgUzNDNjRYWF9QQV9OQU5ECQkoMHg3MDIwMDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9GQgkJKDB4NzcxMDAwMDApCiAjZGVmaW5lIFMzQzY0WFhfUEFfVVNCX0hTT1RHCSgweDdDMDAwMDAwKQogI2RlZmluZSBTM0M2NFhYX1BBX1dBVENIRE9HCSgweDdFMDA0MDAwKQogI2RlZmluZSBTM0M2NFhYX1BBX1NZU0NPTgkoMHg3RTAwRjAwMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9BQzk3CQkoMHg3RjAwMTAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSVMwCQkoMHg3RjAwMjAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSVMxCQkoMHg3RjAwMzAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9USU1FUgkoMHg3RjAwNjAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSUMwCQkoMHg3RjAwNDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9JSVNWNAkoMHg3RjAwRDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9JSUMxCQkoMHg3RjAwRjAwMCkKIAogI2RlZmluZSBTM0M2NFhYX1BBX0dQSU8JCSgweDdGMDA4MDAwKQotI2RlZmluZSBTM0M2NFhYX1ZBX0dQSU8JCVMzQ19BRERSKDB4MDA1MDAwMDApCisjZGVmaW5lIFMzQzY0WFhfVkFfR1BJTwkJUzNDX0FERFJfQ1BVKDB4MDAwMDAwMDApCiAjZGVmaW5lIFMzQzY0WFhfU1pfR1BJTwkJU1pfNEsKIAogI2RlZmluZSBTM0M2NFhYX1BBX1NEUkFNCSgweDUwMDAwMDAwKQpAQCAtNTcsNyArNjAsNyBAQAogI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzEJCSgweDcxMzAwMDAwKQogCiAjZGVmaW5lIFMzQzY0WFhfUEFfTU9ERU0JKDB4NzQxMDgwMDApCi0jZGVmaW5lIFMzQzY0WFhfVkFfTU9ERU0JUzNDX0FERFIoMHgwMDYwMDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9WQV9NT0RFTQlTM0NfQUREUl9DUFUoMHgwMDEwMDAwMCkKIAogI2RlZmluZSBTM0M2NFhYX1BBX1VTQkhPU1QJKDB4NzQzMDAwMDApCiAKQEAgLTcyLDYgKzc1LDcgQEAKICNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzNDNjRYWF9QQV9IU01NQzIKICNkZWZpbmUgUzNDX1BBX0lJQwkJUzNDNjRYWF9QQV9JSUMwCiAjZGVmaW5lIFMzQ19QQV9JSUMxCQlTM0M2NFhYX1BBX0lJQzEKKyNkZWZpbmUgUzNDX1BBX05BTkQJCVMzQzY0WFhfUEFfTkFORAogI2RlZmluZSBTM0NfUEFfRkIJCVMzQzY0WFhfUEFfRkIKICNkZWZpbmUgUzNDX1BBX1VTQkhPU1QJCVMzQzY0WFhfUEFfVVNCSE9TVAogI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVMzQzY0WFhfUEFfVVNCX0hTT1RHCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvczNjNjQwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL3MzYzY0MDAuYwppbmRleCAxZWNlODg3Li5iNDJiZGQwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL3MzYzY0MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvczNjNjQwMC5jCkBAIC00OCw2ICs0OCw4IEBACiAKIAkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCiAJczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKKworCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzY0MDAtbmFuZCI7CiB9CiAKIHZvaWQgX19pbml0IHMzYzY0MDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnCmluZGV4IGU2M2FhYzcuLmY5ZDBmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnCkBAIC05NywzICs5NywxMyBAQAogCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0kyQzEKIAloZWxwCiAgICAgICAgICAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBOQ1AKKworY29uZmlnIE1BQ0hfSE1UCisJYm9vbCAiQWlyZ29vIEhNVCIKKwlzZWxlY3QgQ1BVX1MzQzY0MTAKKwlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKKwlzZWxlY3QgSEFWRV9QV00KKwloZWxwCisJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBBaXJnb28gSE1UCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvTWFrZWZpbGUKaW5kZXggNmY5ZGVhYy4uM2U0OGMzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9NYWtlZmlsZQpAQCAtMjMsNSArMjMsNCBAQAogb2JqLSQoQ09ORklHX01BQ0hfQU5XNjQxMCkJKz0gbWFjaC1hbnc2NDEwLm8KIG9iai0kKENPTkZJR19NQUNIX1NNREs2NDEwKQkrPSBtYWNoLXNtZGs2NDEwLm8KIG9iai0kKENPTkZJR19NQUNIX05DUCkJCSs9IG1hY2gtbmNwLm8KLQotCitvYmotJChDT05GSUdfTUFDSF9ITVQpCQkrPSBtYWNoLWhtdC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvY3B1LmMKaW5kZXggYWRlOTA0ZC4uOWI2N2M2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9jcHUuYwpAQCAtNjIsNiArNjIsOCBAQAogCS8qIHRoZSBpMmMgZGV2aWNlcyBhcmUgZGlyZWN0bHkgY29tcGF0aWJsZSB3aXRoIHMzYzI0NDAgKi8KIAlzM2NfaTJjMF9zZXRuYW1lKCJzM2MyNDQwLWkyYyIpOwogCXMzY19pMmMxX3NldG5hbWUoInMzYzI0NDAtaTJjIik7CisKKwlzM2NfZGV2aWNlX25hbmQubmFtZSA9ICJzM2M2NDAwLW5hbmQiOwogfQogCiB2b2lkIF9faW5pdCBzM2M2NDEwX2luaXRfY2xvY2tzKGludCB4dGFsKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtaG10LmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1obXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTc0MTA1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtaG10LmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qIG1hY2gtaG10LmMgLSBQbGF0Zm9ybSBjb2RlIGZvciBBaXJnb28gSE1UCisgKgorICogQ29weXJpZ2h0IDIwMDkgUGV0ZXIgS29yc2dhYXJkIDxqYWNtZXRAc3Vuc2l0ZS5kaz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CisKKyNpbmNsdWRlIDxwbGF0L3MzYzY0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUCisjZGVmaW5lIFVMQ09OIChTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FKQorI2RlZmluZSBVRkNPTiAoUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgaG10X3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKK307CisKK3N0YXRpYyBpbnQgaG10X2JsX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEIoNCksICJsY2QgYmFja2xpZ2h0IGVuYWJsZSIpOworCWlmICghcmV0KQorCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEIoNCksIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBobXRfYmxfbm90aWZ5KGludCBicmlnaHRuZXNzKQoreworCS8qCisJICogdHJhbnNsYXRlIGZyb20gQ0lFTFVWL0NJRUxBQiBMKi0+YnJpZ2h0bmVzcywgRS5HLiBmcm9tCisJICogcGVyY2VpdmVkIGx1bWluYW5jZSB0byBsaWdodCBvdXRwdXQuIEFzc3VtZXMgcmFuZ2UgMC4uMjU2MDAKKwkgKi8KKwlpZiAoYnJpZ2h0bmVzcyA8IDB4ODAwKSB7CisJCS8qIFkgPSBZbiAqIEwgLyA5MDMuMyAqLworCQlicmlnaHRuZXNzID0gKDEwMCoyNTYgKiBicmlnaHRuZXNzICsgMjMxMjQ1LzIpIC8gMjMxMjQ1OworCX0gZWxzZSB7CisJCS8qIFkgPSBZbiAqICgoTCArIDE2KSAvIDExNiApXjMgKi8KKwkJaW50IHQgPSAoYnJpZ2h0bmVzcyo0ICsgMTYqMTAyNCArIDU4KS8xMTY7CisJCWJyaWdodG5lc3MgPSAyNSAqICgodCAqIHQgKiB0ICsgMHgxMDAwMDAvMikgLyAweDEwMDAwMCk7CisJfQorCisJZ3Bpb19zZXRfdmFsdWUoUzNDNjRYWF9HUEIoNCksIGJyaWdodG5lc3MpOworCisJcmV0dXJuIGJyaWdodG5lc3M7Cit9CisKK3N0YXRpYyB2b2lkIGhtdF9ibF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoUzNDNjRYWF9HUEIoNCkpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBobXRfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAxLAorCS5tYXhfYnJpZ2h0bmVzcwk9IDEwMCAqIDI1NiwKKwkuZGZ0X2JyaWdodG5lc3MJPSA0MCAqIDI1NiwKKwkucHdtX3BlcmlvZF9ucwk9IDEwMDAwMDAwMDAgLyAoMTAwICogMjU2ICogMjApLAorCS5pbml0CQk9IGhtdF9ibF9pbml0LAorCS5ub3RpZnkJCT0gaG10X2JsX25vdGlmeSwKKwkuZXhpdAkJPSBobXRfYmxfZXhpdCwKKworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaG10X2JhY2tsaWdodF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJCT0geworCQkucGFyZW50CT0gJnMzY19kZXZpY2VfdGltZXJbMV0uZGV2LAorCQkucGxhdGZvcm1fZGF0YSA9ICZobXRfYmFja2xpZ2h0X2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiBobXRfZmJfd2luMCA9IHsKKwkud2luX21vZGUJPSB7CisJCS5waXhjbG9jawk9IDQxMDk0LAorCQkubGVmdF9tYXJnaW4JPSA4LAorCQkucmlnaHRfbWFyZ2luCT0gMTMsCisJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkubG93ZXJfbWFyZ2luCT0gNSwKKwkJLmhzeW5jX2xlbgk9IDMsCisJCS52c3luY19sZW4JPSAxLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDQ4MCwKKwl9LAorCS5tYXhfYnBwCT0gMzIsCisJLmRlZmF1bHRfYnBwCT0gMTYsCit9OworCisvKiA0MDU1NjYgY2xvY2tzIHBlciBmcmFtZSA9PiA2MEh6IHJlZnJlc2ggcmVxdWlyZXMgMjQzMzM5NjBIeiBjbG9jayAqLworc3RhdGljIHN0cnVjdCBzM2NfZmJfcGxhdGRhdGEgaG10X2xjZF9wZGF0YSBfX2luaXRkYXRhID0geworCS5zZXR1cF9ncGlvCT0gczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwLAorCS53aW5bMF0JCT0gJmhtdF9mYl93aW4wLAorCS52aWRjb24wCT0gVklEQ09OMF9WSURPVVRfUkdCIHwgVklEQ09OMF9QTlJNT0RFX1JHQiwKKwkudmlkY29uMQk9IFZJRENPTjFfSU5WX0hTWU5DIHwgVklEQ09OMV9JTlZfVlNZTkMsCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaG10X25hbmRfcGFydFtdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAidWJvb3QiLAorCQkuc2l6ZQk9IFNaXzUxMkssCisJCS5vZmZzZXQJPSAwLAorCX0sCisJWzFdID0geworCQkubmFtZQk9ICJ1Ym9vdC1lbnYxIiwKKwkJLnNpemUJPSBTWl8yNTZLLAorCQkub2Zmc2V0CT0gU1pfNTEySywKKwl9LAorCVsyXSA9IHsKKwkJLm5hbWUJPSAidWJvb3QtZW52MiIsCisJCS5zaXplCT0gU1pfMjU2SywKKwkJLm9mZnNldAk9IFNaXzUxMksgKyBTWl8yNTZLLAorCX0sCisJWzNdID0geworCQkubmFtZQk9ICJrZXJuZWwiLAorCQkuc2l6ZQk9IFNaXzJNLAorCQkub2Zmc2V0CT0gU1pfMU0sCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lCT0gInJvb3RmcyIsCisJCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldAk9IFNaXzFNICsgU1pfMk0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCBobXRfbmFuZF9zZXRzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAibmFuZCIsCisJCS5ucl9jaGlwcwk9IDEsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShobXRfbmFuZF9wYXJ0KSwKKwkJLnBhcnRpdGlvbnMJPSBobXRfbmFuZF9wYXJ0LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCBobXRfbmFuZF9pbmZvID0geworCS50YWNscwkJPSAyNSwKKwkudHdycGgwCQk9IDU1LAorCS50d3JwaDEJCT0gNDAsCisJLm5yX3NldHMJPSBBUlJBWV9TSVpFKGhtdF9uYW5kX3NldHMpLAorCS5zZXRzCQk9IGhtdF9uYW5kX3NldHMsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGhtdF9sZWRzW10gPSB7CisJeyAvKiBsZWZ0IGZ1bmN0aW9uIGtleXMgKi8KKwkJLm5hbWUJCQk9ICJsZWZ0OmJsdWUiLAorCQkuZ3BpbwkJCT0gUzNDNjRYWF9HUE8oMTIpLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAorCX0sCisJeyAvKiByaWdodCBmdW5jdGlvbiBrZXlzIC0gcmVkICovCisJCS5uYW1lCQkJPSAicmlnaHQ6cmVkIiwKKwkJLmdwaW8JCQk9IFMzQzY0WFhfR1BPKDEzKSwKKwl9LAorCXsgLyogcmlnaHQgZnVuY3Rpb24ga2V5cyAtIGdyZWVuICovCisJCS5uYW1lCQkJPSAicmlnaHQ6Z3JlZW4iLAorCQkuZ3BpbwkJCT0gUzNDNjRYWF9HUE8oMTQpLAorCX0sCisJeyAvKiByaWdodCBmdW5jdGlvbiBrZXlzIC0gYmx1ZSAqLworCQkubmFtZQkJCT0gInJpZ2h0OmJsdWUiLAorCQkuZ3BpbwkJCT0gUzNDNjRYWF9HUE8oMTUpLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgaG10X2xlZF9kYXRhID0geworCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUoaG10X2xlZHMpLAorCS5sZWRzID0gaG10X2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBobXRfbGVkc19kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmhtdF9sZWRfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaG10X2lvZGVzY1tdID0ge307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpobXRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfaTJjMCwKKwkmczNjX2RldmljZV9uYW5kLAorCSZzM2NfZGV2aWNlX2ZiLAorCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV90aW1lclsxXSwKKwkmaG10X2JhY2tsaWdodF9kZXZpY2UsCisJJmhtdF9sZWRzX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBobXRfbWFwX2lvKHZvaWQpCit7CisJczNjNjR4eF9pbml0X2lvKGhtdF9pb2Rlc2MsIEFSUkFZX1NJWkUoaG10X2lvZGVzYykpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhobXRfdWFydGNmZ3MsIEFSUkFZX1NJWkUoaG10X3VhcnRjZmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBobXRfbWFjaGluZV9pbml0KHZvaWQpCit7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOworCXMzY19mYl9zZXRfcGxhdGRhdGEoJmhtdF9sY2RfcGRhdGEpOworCXMzY19kZXZpY2VfbmFuZC5kZXYucGxhdGZvcm1fZGF0YSA9ICZobXRfbmFuZF9pbmZvOworCisJZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BDKDcpLCAidXNiIHBvd2VyIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BDKDcpLCAwKTsKKwlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUE0oMCksICJ1c2IgcG93ZXIiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUE0oMCksIDEpOworCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQSyg3KSwgInVzYiBwb3dlciIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQSyg3KSwgMSk7CisJZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BGKDEzKSwgInVzYiBwb3dlciIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxMyksIDEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoaG10X2RldmljZXMsIEFSUkFZX1NJWkUoaG10X2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChITVQsICJBaXJnb28tSE1UIikKKwkvKiBNYWludGFpbmVyOiBQZXRlciBLb3JzZ2FhcmQgPGphY21ldEBzdW5zaXRlLmRrPiAqLworCS5waHlzX2lvCT0gUzNDX1BBX1VBUlQgJiAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0NfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFMzQzY0WFhfUEFfU0RSQU0gKyAweDEwMCwKKwkuaW5pdF9pcnEJPSBzM2M2NDEwX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gaG10X21hcF9pbywKKwkuaW5pdF9tYWNoaW5lCT0gaG10X21hY2hpbmVfaW5pdCwKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtbmNwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1uY3AuYwppbmRleCA2MDMwNjM2Li41NWU5YmJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1uY3AuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1uY3AuYwpAQCAtNzksNyArNzksNyBAQAogCSZzM2NfZGV2aWNlX2kyYzAsCiB9OwogCi1zdHJ1Y3QgbWFwX2Rlc2MgbmNwX2lvZGVzY1tdID0ge307CitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5jcF9pb2Rlc2NbXSBfX2luaXRkYXRhID0ge307CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuY3BfbWFwX2lvKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwppbmRleCBiYzlhN2RlLi5lYTUxZGJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKQEAgLTY1LDE2ICs2NSwzMCBAQAogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLAotCQkudWNvbgkgICAgID0gMHgzYzUsCi0JCS51bGNvbgkgICAgID0gMHgwMywKLQkJLnVmY29uCSAgICAgPSAweDUxLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKIAl9LAogCVsxXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMSwKIAkJLmZsYWdzCSAgICAgPSAwLAotCQkudWNvbgkgICAgID0gMHgzYzUsCi0JCS51bGNvbgkgICAgID0gMHgwMywKLQkJLnVmY29uCSAgICAgPSAweDUxLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9LAorCVszXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMywKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWE0YmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL0tjb25maWcKQEAgLTAsMCArMSwyMiBAQAorIyBhcmNoL2FybS9tYWNoLXM1cGMxMDAvS2NvbmZpZworIworIyBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorIwlCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgUzVQQzEwMCBDUFUKKworY29uZmlnIENQVV9TNVBDMTAwCisJYm9vbAorCXNlbGVjdCBDUFVfUzVQQzEwMF9JTklUCisJc2VsZWN0IENQVV9TNVBDMTAwX0NMT0NLCisJaGVscAorCSAgRW5hYmxlIFM1UEMxMDAgQ1BVIHN1cHBvcnQKKworY29uZmlnIE1BQ0hfU01ES0MxMDAKKwlib29sICJTTURLQzEwMCIKKwlzZWxlY3QgQ1BVX1M1UEMxMDAKKwlzZWxlY3QgUzVQQzFYWF9TRVRVUF9JMkMxCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTTURLQzEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzg5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIyBhcmNoL2FybS9tYWNoLXM1cGMxMDAvTWFrZWZpbGUKKyMKKyMgQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworb2JqLXkJCQkJOj0KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PQorb2JqLQkJCQk6PQorCisjIENvcmUgc3VwcG9ydCBmb3IgUzVQQzEwMCBzeXN0ZW0KKworb2JqLSQoQ09ORklHX0NQVV9TNVBDMTAwKQkrPSBjcHUubworCisjIG1hY2hpbmUgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfU01ES0MxMDApCSs9IG1hY2gtc21ka2MxMDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjkwYWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwyIEBACisgICB6cmVsYWRkci15CTo9IDB4MjAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgyMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzE4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvY3B1LmMKQEAgLTAsMCArMSw5NyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2NwdS5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MTAvY3B1LmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9paWMtY29yZS5oPgorI2luY2x1ZGUgPHBsYXQvczVwYzEwMC5oPgorCisvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczVwYzEwMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworfTsKKworLyogczVwYzEwMF9tYXBfaW8KKyAqCisgKiByZWdpc3RlciB0aGUgc3RhbmRhcmQgY3B1IElPIGFyZWFzCisqLworCit2b2lkIF9faW5pdCBzNXBjMTAwX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChzNXBjMTAwX2lvZGVzYywgQVJSQVlfU0laRShzNXBjMTAwX2lvZGVzYykpOworCisJLyogaW5pdGlhbGlzZSBkZXZpY2UgaW5mb3JtYXRpb24gZWFybHkgKi8KK30KKwordm9pZCBfX2luaXQgczVwYzEwMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluaXRpYWxpc2luZyBjbG9ja3NcbiIsIF9fZnVuY19fKTsKKwlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CisJczVwYzF4eF9yZWdpc3Rlcl9jbG9ja3MoKTsKKwlzNXBjMTAwX3JlZ2lzdGVyX2Nsb2NrcygpOworCXM1cGMxMDBfc2V0dXBfY2xvY2tzKCk7Cit9CisKK3ZvaWQgX19pbml0IHM1cGMxMDBfaW5pdF9pcnEodm9pZCkKK3sKKwl1MzIgdmljX3ZhbGlkW10gPSB7fjAsIH4wLCB+MH07CisKKwkvKiBWSUMwLCBWSUMxLCBhbmQgVklDMiBhcmUgZnVsbHkgcG9wdWxhdGVkLiAqLworCXM1cGMxeHhfaW5pdF9pcnEodmljX3ZhbGlkLCBBUlJBWV9TSVpFKHZpY192YWxpZCkpOworfQorCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHM1cGMxMDBfc3lzY2xhc3MgPSB7CisJLm5hbWUJPSAiczVwYzEwMC1jb3JlIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzNXBjMTAwX3N5c2RldiA9IHsKKwkuY2xzCT0gJnM1cGMxMDBfc3lzY2xhc3MsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzNXBjMTAwX2NvcmVfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnM1cGMxMDBfc3lzY2xhc3MpOworfQorCitjb3JlX2luaXRjYWxsKHM1cGMxMDBfY29yZV9pbml0KTsKKworaW50IF9faW5pdCBzNXBjMTAwX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUzVQQzEwMDogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7CisKKwlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzNXBjMTAwX3N5c2Rldik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxNDJjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDM4IEBACisvKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogcHVsbCBpbiB0aGUgcmVsZXZhbnQgcmVnaXN0ZXIgYW5kIG1hcCBmaWxlcy4gKi8KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisJLyogbm90ZSwgZm9yIHRoZSBib290IHByb2Nlc3MgdG8gd29yayB3ZSBoYXZlIHRvIGtlZXAgdGhlIFVBUlQKKwkgKiB2aXJ0dWFsIGFkZHJlc3MgYWxpZ25lZCB0byBhbiAxTWlCIGJvdW5kYXJ5IGZvciB0aGUgTDEKKwkgKiBtYXBwaW5nIHRoZSBoZWFkIGNvZGUgbWFrZXMuIFdlIGtlZXAgdGhlIFVBUlQgdmlydHVhbCBhZGRyZXNzCisJICogYWxpZ25lZCBhbmQgYWRkIGluIHRoZSBvZmZzZXQgd2hlbiB3ZSBsb2FkIHRoZSB2YWx1ZSBoZXJlLgorCSAqLworCisJLm1hY3JvIGFkZHJ1YXJ0LCByeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQorCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKKwkJbGRybmUJXHJ4LCA9IChTM0NfVkFfVUFSVCArIFMzQ19QQV9VQVJUICYgMHhmZmZmZikKKwkJYWRkCVxyeCwgXHJ4LCAjKDB4NDAwICogQ09ORklHX0RFQlVHX1MzQ19VQVJUKQorCS5lbmRtCisKKy8qIGluY2x1ZGUgdGhlIHJlc2V0IG9mIHRoZSBjb2RlIHdoaWNoIHdpbGwgZG8gdGhlIHdvcmssIHdlJ3JlIG9ubHkKKyAqIGNvbXBpbGluZyBmb3IgYSBzaW5nbGUgY3B1IHByb2Nlc3NvciB0eXBlIHNvIHRoZSBkZWZhdWx0IG9mIHMzYzI0NDAKKyAqIHdpbGwgYmUgZmluZSB3aXRoIHVzLgorICovCisKKyNpbmNsdWRlIDxwbGF0L2RlYnVnLW1hY3JvLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxMzE5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDUwIEBACisvKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgdGhlIFNhbXN1bmcgUzVQQzFYWCBzZXJpZXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2lycXMuaD4KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlsZHIJXGJhc2UsID1TM0NfVkFfVklDMAorCS5lbmRtCisKKwkubWFjcm8JYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwlAIGNoZWNrIHRoZSB2aWMwCisJbW92CVxpcnFuciwgIyBTM0NfSVJRX09GRlNFVCArIDMxCisJbGRyCVxpcnFzdGF0LCBbIFxiYXNlLCAjIFZJQ19JUlFfU1RBVFVTIF0KKwl0ZXEJXGlycXN0YXQsICMwCisKKwlAIG90aGVyd2lzZSB0cnkgdmljMQorCWFkZGVxCVx0bXAsIFxiYXNlLCAjKFMzQ19WQV9WSUMxIC0gUzNDX1ZBX1ZJQzApCisJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMzMgorCWxkcmVxCVxpcnFzdGF0LCBbIFx0bXAsICMgVklDX0lSUV9TVEFUVVMgXQorCXRlcWVxCVxpcnFzdGF0LCAjMAorCisJQCBvdGhlcndpc2UgdHJ5IHZpYzIKKwlhZGRlcQlcdG1wLCBcYmFzZSwgIyhTM0NfVkFfVklDMiAtIFMzQ19WQV9WSUMwKQorCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMzIKKwlsZHJlcQlcaXJxc3RhdCwgWyBcdG1wLCAjIFZJQ19JUlFfU1RBVFVTIF0KKwl0ZXFlcQlcaXJxc3RhdCwgIzAKKworCWNsem5lCVxpcnFzdGF0LCBcaXJxc3RhdAorCXN1Ym5lCVxpcnFuciwgXGlycW5yLCBcaXJxc3RhdAorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDI4ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaApAQCAtMCwwICsxLDIxIEBACisvKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgLSBHUElPIGNvcmUgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19DT1JFX0ggX19GSUxFX18KKworLyogY3VycmVudGx5IHdlIGp1c3QgaW5jbHVkZSB0aGUgcGxhdGZvcm0gc3VwcG9ydCAqLworI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NGZjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDE0NiBAQAorLyogYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgLSBHUElPIGxpYiBzdXBwb3J0CisgKgorICogQmFzZSBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8uaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAorI2RlZmluZSBncGlvX3RvX2lycQlfX2dwaW9fdG9faXJxCisKKy8qIEdQSU8gYmFuayBzaXplcyAqLworI2RlZmluZSBTNVBDMVhYX0dQSU9fQTBfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19BMV9OUgkoNSkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0JfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19DX05SCSg1KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fRF9OUgkoNykKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0UwX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fRTFfTlIJKDYpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19GMF9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0YxX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fRjJfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19GM19OUgkoNCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0cwX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fRzFfTlIJKDMpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19HMl9OUgkoNykKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0czX05SCSg3KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSDBfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19IMV9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0gyX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSDNfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19JX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSjBfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19KMV9OUgkoNSkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0oyX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSjNfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19KNF9OUgkoNCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0swX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fSzFfTlIJKDYpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19LMl9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX0szX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fTVAwMF9OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX01QMDFfTlIJKDgpCisjZGVmaW5lIFM1UEMxWFhfR1BJT19NUDAyX05SCSg4KQorI2RlZmluZSBTNVBDMVhYX0dQSU9fTVAwM19OUgkoOCkKKyNkZWZpbmUgUzVQQzFYWF9HUElPX01QMDRfTlIJKDUpCisKKy8qIEdQSU8gYmFuayBudW1iZXMgKi8KKworLyogQ09ORklHX1MzQ19HUElPX1NQQUNFIGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgZXh0cmEKKyAqIHNwYWNlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgc28gdGhhdCBhbnkgYWNjaWRlbnRhbAorICogY2hhbmdlIGZyb20gb25lIGdwaW8gYmFuayB0byBhbm90aGVyIGNhbiBiZSBjYXVnaHQuCisqLworCisjZGVmaW5lIFM1UEMxWFhfR1BJT19ORVhUKF9fZ3BpbykgXAorCSgoX19ncGlvIyNfU1RBUlQpICsgKF9fZ3BpbyMjX05SKSArIENPTkZJR19TM0NfR1BJT19TUEFDRSArIDEpCisKK2VudW0gczNjX2dwaW9fbnVtYmVyIHsKKwlTNVBDMVhYX0dQSU9fQTBfU1RBUlQgCT0gMCwKKwlTNVBDMVhYX0dQSU9fQTFfU1RBUlQgCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0EwKSwKKwlTNVBDMVhYX0dQSU9fQl9TVEFSVCAJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fQTEpLAorCVM1UEMxWFhfR1BJT19DX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0IpLAorCVM1UEMxWFhfR1BJT19EX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0MpLAorCVM1UEMxWFhfR1BJT19FMF9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19EKSwKKwlTNVBDMVhYX0dQSU9fRTFfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRTApLAorCVM1UEMxWFhfR1BJT19GMF9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19FMSksCisJUzVQQzFYWF9HUElPX0YxX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0YwKSwKKwlTNVBDMVhYX0dQSU9fRjJfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRjEpLAorCVM1UEMxWFhfR1BJT19GM19TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19GMiksCisJUzVQQzFYWF9HUElPX0cwX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0YzKSwKKwlTNVBDMVhYX0dQSU9fRzFfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRzApLAorCVM1UEMxWFhfR1BJT19HMl9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19HMSksCisJUzVQQzFYWF9HUElPX0czX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0cyKSwKKwlTNVBDMVhYX0dQSU9fSDBfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fRzMpLAorCVM1UEMxWFhfR1BJT19IMV9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19IMCksCisJUzVQQzFYWF9HUElPX0gyX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0gxKSwKKwlTNVBDMVhYX0dQSU9fSDNfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSDIpLAorCVM1UEMxWFhfR1BJT19JX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0gzKSwKKwlTNVBDMVhYX0dQSU9fSjBfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSSksCisJUzVQQzFYWF9HUElPX0oxX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0owKSwKKwlTNVBDMVhYX0dQSU9fSjJfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSjEpLAorCVM1UEMxWFhfR1BJT19KM19TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19KMiksCisJUzVQQzFYWF9HUElPX0o0X1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0ozKSwKKwlTNVBDMVhYX0dQSU9fSzBfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSjQpLAorCVM1UEMxWFhfR1BJT19LMV9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19LMCksCisJUzVQQzFYWF9HUElPX0syX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0sxKSwKKwlTNVBDMVhYX0dQSU9fSzNfU1RBUlQJPSBTNVBDMVhYX0dQSU9fTkVYVChTNVBDMVhYX0dQSU9fSzIpLAorCVM1UEMxWFhfR1BJT19NUDAwX1NUQVJUCT0gUzVQQzFYWF9HUElPX05FWFQoUzVQQzFYWF9HUElPX0szKSwKKwlTNVBDMVhYX0dQSU9fTVAwMV9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19NUDAwKSwKKwlTNVBDMVhYX0dQSU9fTVAwMl9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19NUDAxKSwKKwlTNVBDMVhYX0dQSU9fTVAwM19TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19NUDAyKSwKKwlTNVBDMVhYX0dQSU9fTVAwNF9TVEFSVAk9IFM1UEMxWFhfR1BJT19ORVhUKFM1UEMxWFhfR1BJT19NUDAzKSwKK307CisKKy8qIFM1UEMxWFggR1BJTyBudW1iZXIgZGVmaW5pdGlvbnMuICovCisjZGVmaW5lIFM1UEMxWFhfR1BBMChfbnIpCShTNVBDMVhYX0dQSU9fQTBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEExKF9ucikJKFM1UEMxWFhfR1BJT19BMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQQihfbnIpCShTNVBDMVhYX0dQSU9fQl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQQyhfbnIpCShTNVBDMVhYX0dQSU9fQ19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRChfbnIpCShTNVBDMVhYX0dQSU9fRF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRTAoX25yKQkoUzVQQzFYWF9HUElPX0UwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BFMShfbnIpCShTNVBDMVhYX0dQSU9fRTFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEYwKF9ucikJKFM1UEMxWFhfR1BJT19GMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRjEoX25yKQkoUzVQQzFYWF9HUElPX0YxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BGMihfbnIpCShTNVBDMVhYX0dQSU9fRjJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEYzKF9ucikJKFM1UEMxWFhfR1BJT19GM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRzAoX25yKQkoUzVQQzFYWF9HUElPX0cwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BHMShfbnIpCShTNVBDMVhYX0dQSU9fRzFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEcyKF9ucikJKFM1UEMxWFhfR1BJT19HMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQRzMoX25yKQkoUzVQQzFYWF9HUElPX0czX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BIMChfbnIpCShTNVBDMVhYX0dQSU9fSDBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEgxKF9ucikJKFM1UEMxWFhfR1BJT19IMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSDIoX25yKQkoUzVQQzFYWF9HUElPX0gyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BIMyhfbnIpCShTNVBDMVhYX0dQSU9fSDNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEkoX25yKQkoUzVQQzFYWF9HUElPX0lfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEowKF9ucikJKFM1UEMxWFhfR1BJT19KMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSjEoX25yKQkoUzVQQzFYWF9HUElPX0oxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BKMihfbnIpCShTNVBDMVhYX0dQSU9fSjJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEozKF9ucikJKFM1UEMxWFhfR1BJT19KM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSjQoX25yKQkoUzVQQzFYWF9HUElPX0o0X1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BLMChfbnIpCShTNVBDMVhYX0dQSU9fSzBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9HUEsxKF9ucikJKFM1UEMxWFhfR1BJT19LMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX0dQSzIoX25yKQkoUzVQQzFYWF9HUElPX0syX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfR1BLMyhfbnIpCShTNVBDMVhYX0dQSU9fSzNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9NUDAwKF9ucikJKFM1UEMxWFhfR1BJT19NUDAwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfTVAwMShfbnIpCShTNVBDMVhYX0dQSU9fTVAwMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBDMVhYX01QMDIoX25yKQkoUzVQQzFYWF9HUElPX01QMDJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQQzFYWF9NUDAzKF9ucikJKFM1UEMxWFhfR1BJT19NUDAzX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UEMxWFhfTVAwNChfbnIpCShTNVBDMVhYX0dQSU9fTVAwNF9TVEFSVCArIChfbnIpKQorCisvKiB0aGUgZW5kIG9mIHRoZSBTNVBDMVhYIHNwZWNpZmljIGdwaW9zICovCisjZGVmaW5lIFM1UEMxWFhfR1BJT19FTkQJKFM1UEMxWFhfTVAwNChTNVBDMVhYX0dQSU9fTVAwNF9OUikgKyAxKQorI2RlZmluZSBTM0NfR1BJT19FTkQJCVM1UEMxWFhfR1BJT19FTkQKKworLyogZGVmaW5lIHRoZSBudW1iZXIgb2YgZ3Bpb3Mgd2UgbmVlZCB0byB0aGUgb25lIGFmdGVyIHRoZSBNUDA0KCkgcmFuZ2UgKi8KKyNkZWZpbmUgQVJDSF9OUl9HUElPUwkoUzVQQzFYWF9NUDA0KFM1UEMxWFhfR1BJT19NUDA0X05SKSArIDEpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzODYxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDE0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICogICAgICBCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzEwMCAtIEhhcmR3YXJlIHN1cHBvcnQKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggX19GSUxFX18KKworLyogY3VycmVudGx5IG5vdGhpbmcgaGVyZSwgcGxhY2Vob2xkZXIgKi8KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjI3MjBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwxNCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICogICAgICBCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzEwMCAtIElSUSBkZWZpbml0aW9ucworICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0ggX19GSUxFX18KKworI2luY2x1ZGUgPHBsYXQvaXJxcy5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5ZjM5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTAsMCArMSw3NSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogQmFzZWQgb24gbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIFM1UEMxWFggLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NQVBfSAorI2RlZmluZSBfX0FTTV9BUkNIX01BUF9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CisKKworLyogQ2hpcCBJRCAqLworI2RlZmluZSBTNVBDMTAwX1BBX0NISVBJRAkoMHhFMDAwMDAwMCkKKyNkZWZpbmUgUzVQQzFYWF9QQV9DSElQSUQJUzVQQzEwMF9QQV9DSElQSUQKKyNkZWZpbmUgUzVQQzFYWF9WQV9DSElQSUQJUzNDX1ZBX1NZUworCisvKiBTeXN0ZW0gKi8KKyNkZWZpbmUgUzVQQzEwMF9QQV9TWVMJCSgweEUwMTAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX0NMSwkJKFM1UEMxMDBfUEFfU1lTICsgMHgwKQorI2RlZmluZSBTNVBDMTAwX1BBX1BXUgkJKFM1UEMxMDBfUEFfU1lTICsgMHg4MDAwKQorI2RlZmluZSBTNVBDMVhYX1BBX0NMSwkJUzVQQzEwMF9QQV9DTEsKKyNkZWZpbmUgUzVQQzFYWF9QQV9QV1IJCVM1UEMxMDBfUEFfUFdSCisjZGVmaW5lIFM1UEMxWFhfVkFfQ0xLCQkoUzNDX1ZBX1NZUyArIDB4MTAwMDApCisjZGVmaW5lIFM1UEMxWFhfVkFfUFdSCQkoUzNDX1ZBX1NZUyArIDB4MjAwMDApCisKKy8qIEludGVycnVwdCAqLworI2RlZmluZSBTNVBDMTAwX1BBX1ZJQwkJKDB4RTQwMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfVkFfVklDCQlTM0NfVkFfSVJRCisjZGVmaW5lIFM1UEMxMDBfUEFfVklDX09GRlNFVAkweDEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQ19PRkZTRVQJMHgxMDAwMAorI2RlZmluZSBTNVBDMVhYX1BBX1ZJQyh4KQkoUzVQQzEwMF9QQV9WSUMgKyAoKHgpICogUzVQQzEwMF9QQV9WSUNfT0ZGU0VUKSkKKyNkZWZpbmUgUzVQQzFYWF9WQV9WSUMoeCkJKFM1UEMxMDBfVkFfVklDICsgKCh4KSAqIFM1UEMxMDBfVkFfVklDX09GRlNFVCkpCisKKy8qIFRpbWVyICovCisjZGVmaW5lIFM1UEMxMDBfUEFfVElNRVIJKDB4RUEwMDAwMDApCisjZGVmaW5lIFM1UEMxWFhfUEFfVElNRVIJUzVQQzEwMF9QQV9USU1FUgorI2RlZmluZSBTNVBDMVhYX1ZBX1RJTUVSCVMzQ19WQV9USU1FUgorCisvKiBVQVJUICovCisjZGVmaW5lIFM1UEMxMDBfUEFfVUFSVAkJKDB4RUMwMDAwMDApCisjZGVmaW5lIFM1UEMxWFhfUEFfVUFSVAkJUzVQQzEwMF9QQV9VQVJUCisjZGVmaW5lIFM1UEMxWFhfVkFfVUFSVAkJUzNDX1ZBX1VBUlQKKworLyogSUlDICovCisjZGVmaW5lIFM1UEMxMDBfUEFfSUlDCQkoMHhFQzEwMDAwMCkKKworLyogRVRDICovCisjZGVmaW5lIFM1UEMxMDBfUEFfU0RSQU0JKDB4MjAwMDAwMDApCisKKy8qIGNvbXBhdGliaWxpdHkgZGVmaW5lcy4gKi8KKyNkZWZpbmUgUzNDX1BBX1VBUlQJCVM1UEMxMDBfUEFfVUFSVAorI2RlZmluZSBTM0NfUEFfVUFSVDAJCShTNVBDMTAwX1BBX1VBUlQgKyAweDApCisjZGVmaW5lIFMzQ19QQV9VQVJUMQkJKFM1UEMxMDBfUEFfVUFSVCArIDB4NDAwKQorI2RlZmluZSBTM0NfUEFfVUFSVDIJCShTNVBDMTAwX1BBX1VBUlQgKyAweDgwMCkKKyNkZWZpbmUgUzNDX1BBX1VBUlQzCQkoUzVQQzEwMF9QQV9VQVJUICsgMHhDMDApCisjZGVmaW5lIFMzQ19WQV9VQVJUMAkJKFMzQ19WQV9VQVJUICsgMHgwKQorI2RlZmluZSBTM0NfVkFfVUFSVDEJCShTM0NfVkFfVUFSVCArIDB4NDAwKQorI2RlZmluZSBTM0NfVkFfVUFSVDIJCShTM0NfVkFfVUFSVCArIDB4ODAwKQorI2RlZmluZSBTM0NfVkFfVUFSVDMJCShTM0NfVkFfVUFSVCArIDB4QzAwKQorI2RlZmluZSBTM0NfVUFSVF9PRkZTRVQJCTB4NDAwCisjZGVmaW5lIFMzQ19WQV9WSUMwCQkoUzNDX1ZBX0lSUSArIDB4MCkKKyNkZWZpbmUgUzNDX1ZBX1ZJQzEJCShTM0NfVkFfSVJRICsgMHgxMDAwMCkKKyNkZWZpbmUgUzNDX1ZBX1ZJQzIJCShTM0NfVkFfSVJRICsgMHgyMDAwMCkKKyNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQQzEwMF9QQV9JSUMKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQzEwMF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI2MGQxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwxOCBAQAorLyogYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKiAgICAgIEJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQgICAgIAlVTCgweDIwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNGQyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICogICAgICBCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzEwMCAtIHB3bSBjbG9jayBhbmQgdGltZXIgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKKyAqLworCisvKioKKyAqIHB3bV9jZmdfc3JjX2lzX3RjbGsoKSAtIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBtdXggY29uZmlnIGlzIGEgdGNsaworICogQHRjZmc6IFRoZSB0aW1lciBUQ0ZHMSByZWdpc3RlciBiaXRzIHNoaWZ0ZWQgZG93biB0byAwLgorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGZyb20gVENGRzEgaXMgYSBUQ0xLIGluc3RlYWQKKyAqIGFueSBvZiB0aGUgVERJViBjbG9ja3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB3bV9jZmdfc3JjX2lzX3RjbGsodW5zaWduZWQgbG9uZyB0Y2ZnKQoreworCXJldHVybiB0Y2ZnID49IFMzQzY0WFhfVENGRzFfTVVYX1RDTEs7Cit9CisKKy8qKgorICogdGNmZ190b19kaXZpc29yKCkgLSBjb252ZXJ0IHRjZmcxIHNldHRpbmcgdG8gYSBkaXZpc29yCisgKiBAdGNmZzE6IFRoZSB0Y2ZnMSBzZXR0aW5nLCBzaGlmdGVkIGRvd24uCisgKgorICogR2V0IHRoZSBkaXZpc29yIHZhbHVlIGZvciB0aGUgZ2l2ZW4gdGNmZzEgc2V0dGluZy4gV2UgYXNzdW1lIHRoZQorICogY2FsbGVyIGhhcyBhbHJlYWR5IGNoZWNrZWQgdG8gc2VlIGlmIHRoaXMgaXMgbm90IGEgVENMSyBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y2ZnX3RvX2Rpdmlzb3IodW5zaWduZWQgbG9uZyB0Y2ZnMSkKK3sKKwlyZXR1cm4gMSA8PCB0Y2ZnMTsKK30KKworLyoqCisgKiBwd21fdGRpdl9oYXNfZGl2MSgpIC0gZG9lcyB0aGUgdGRpdiBzZXR0aW5nIGhhdmUgYSAvMQorICoKKyAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgYSAvMSBpbiB0aGUgdGRpdiBzZXR0aW5nLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwd21fdGRpdl9oYXNfZGl2MSh2b2lkKQoreworCXJldHVybiAxOworfQorCisvKioKKyAqIHB3bV90ZGl2X2Rpdl9iaXRzKCkgLSBjYWxjdWxhdGUgVENGRzEgZGl2aXNvciB2YWx1ZS4KKyAqIEBkaXY6IFRoZSBkaXZpc29yIHRvIGNhbGN1bGF0ZSB0aGUgYml0IGluZm9ybWF0aW9uIGZvci4KKyAqCisgKiBUdXJuIGEgZGl2aXNvciBpbnRvIHRoZSBuZWNlc3NhcnkgYml0IGZpZWxkIGZvciBUQ0ZHMS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB3bV90ZGl2X2Rpdl9iaXRzKHVuc2lnbmVkIGludCBkaXYpCit7CisJcmV0dXJuIGlsb2cyKGRpdik7Cit9CisKKyNkZWZpbmUgUzNDX1RDRkcxX01VWF9UQ0xLIFMzQzY0WFhfVENGRzFfTVVYX1RDTEsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTFhYzE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzFYWCAtIElSUSByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19JUlFfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfSVJRX0ggX19GSUxFX18KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorCisvKiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworI2RlZmluZSBTNVBDMVhYX1ZJQzBSRUcoeCkgICAgICAgICAgCQkoKHgpICsgUzVQQzFYWF9WQV9WSUMoMCkpCisjZGVmaW5lIFM1UEMxWFhfVklDMVJFRyh4KSAgICAgICAgICAJCSgoeCkgKyBTNVBDMVhYX1ZBX1ZJQygxKSkKKyNkZWZpbmUgUzVQQzFYWF9WSUMyUkVHKHgpICAgICAgICAgCQkoKHgpICsgUzVQQzFYWF9WQV9WSUMoMikpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTAxNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICogICAgICBCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzFYWCAtIHN5c3RlbSBpbXBsZW1lbnRhdGlvbgorICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSCBfX0ZJTEVfXworCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKiBub3RoaW5nIGhlcmUgeWV0ICovCit9CisKK3N0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQorCisjZW5kaWYgLyogX19BU01fQVJDSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC90aWNrLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3RpY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2RlMGYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC90aWNrLmgKQEAgLTAsMCArMSwyOSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC90aWNrLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFMzQzY0WFggLSBUaW1lciB0aWNrIHN1cHBvcnQgZGVmaW5pdGlvbnMKKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3RpY2suaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVElDS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElDS19IIF9fRklMRV9fCisKKy8qIG5vdGUsIHRoZSB0aW1lciBpbnRlcnJ1dHBzIHR1cm4gdXAgaW4gMiBwbGFjZXMsIHRoZSB2aWMgYW5kIHRoZW4KKyAqIHRoZSB0aW1lciBibG9jay4gV2UgdGFrZSB0aGUgVklDIGFzIHRoZSBiYXNlIGF0IHRoZSBtb21lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHMzYzI0eHhfb3N0aW1lcl9wZW5kaW5nKHZvaWQpCit7CisJdTMyIHBlbmQgPSBfX3Jhd19yZWFkbChTM0NfVkFfVklDMCArIFZJQ19SQVdfU1RBVFVTKTsKKwlyZXR1cm4gcGVuZCAmIDEgPDwgKElSUV9USU1FUjQgLSBTNVBDMVhYX0lSUV9WSUMwKDApKTsKK30KKworI2RlZmluZSBUSUNLX01BWAkoMHhmZmZmZmZmZikKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVElDS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxY2NmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDI4IEBACisvKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKglCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+CisgKgorICogUzVQQzEwMCAtIHVuY29tcHJlc3MgY29kZQorICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC91bmNvbXByZXNzLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfZGV0ZWN0X2NwdSh2b2lkKQoreworCS8qIHdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueSBjcHUgZGV0ZWN0aW9uIGhlcmUgYXQgdGhlIG1vbWVudC4gKi8KKwlmaWZvX21hc2sgPSBTM0MyNDQwX1VGU1RBVF9UWE1BU0s7CisJZmlmb19tYXggPSA2MyA8PCBTM0MyNDQwX1VGU1RBVF9UWFNISUZUOworfQorCisjZW5kaWYgLyogX19BU01fQVJDSF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9tYWNoLXNtZGtjMTAwLmMgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDA5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jCkBAIC0wLDAgKzEsMTAzIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvbWFjaC1zbWRrYzEwMC5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqIEF1dGhvcjogQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zNXBjMTAwLmg+CisKKyNkZWZpbmUgVUNPTiAoUzNDMjQxMF9VQ09OX0RFRkFVTFQgfCBTM0MyNDEwX1VDT05fVUNMSykKKyNkZWZpbmUgVUxDT04gKFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIpCisjZGVmaW5lIFVGQ09OIChTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFKQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrYzEwMF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkuaHdwb3J0CSAgICAgPSAwLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0sCisJWzNdID0geworCQkuaHdwb3J0CSAgICAgPSAzLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgc21ka2MxMDBfaW9kZXNjW10gPSB7fTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGtjMTAwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNtZGtjMTAwX21hcF9pbyh2b2lkKQoreworCXM1cGMxeHhfaW5pdF9pbyhzbWRrYzEwMF9pb2Rlc2MsIEFSUkFZX1NJWkUoc21ka2MxMDBfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHNtZGtjMTAwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGtjMTAwX3VhcnRjZmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrYzEwMF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrYzEwMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNtZGtjMTAwX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChTTURLQzEwMCwgIlNNREtDMTAwIikKKwkvKiBNYWludGFpbmVyOiBCeXVuZ2hvIE1pbiA8YmhtaW5Ac2Ftc3VuZy5jb20+ICovCisJLnBoeXNfaW8JPSBTNVBDMVhYX1BBX1VBUlQgJiAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTNVBDMVhYX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTNVBDMTAwX1BBX1NEUkFNICsgMHgxMDAsCisKKwkuaW5pdF9pcnEJPSBzNXBjMTAwX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21ka2MxMDBfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrYzEwMF9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwppbmRleCAzMTM4ZDM5Li41ODVjYzAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCkBAIC0xNTYsNiArMTU2LDggQEAKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLm9jcl9tYXNrID0gTU1DX1ZERF8yOF8yOTsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLnRyYW5zbGF0ZV92ZGQgPSBtbWNfdHJhbnNsYXRlX3ZkZDsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLnN0YXR1cyA9IG1tY19zdGF0dXM7CisJbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5ncGlvX3dwID0gLTE7CisJbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YS5ncGlvX2NkID0gLTE7CiAKIAltbWNzZF9kZXZpY2UtPnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKSAmbW1jaV9jYXJkLT5tbWMwX3BsYXRfZGF0YTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCmluZGV4IDMxMDkzYWYuLjk3NWVhZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jbnQzMl90b182My5oPgpAQCAtMzcxLDYgKzM3Miw4IEBACiBzdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IG1tY19zdGF0dXMsCisJLmdwaW9fd3AJPSAtMSwKKwkuZ3Bpb19jZAk9IC0xLAogfTsKIAogLyoKQEAgLTcwNSw2ICs3MDgsMTYgQEAKIAkucmVtb3ZlCQk9IHZlcnNhdGlsZV9jbGNkX3JlbW92ZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGwwNjFfcGxhdGZvcm1fZGF0YSBncGlvMF9wbGF0X2RhdGEgPSB7CisJLmdwaW9fYmFzZQk9IDAsCisJLmlycV9iYXNlCT0gSVJRX0dQSU8wX1NUQVJULAorfTsKKworc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8xX3BsYXRfZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gOCwKKwkuaXJxX2Jhc2UJPSBJUlFfR1BJTzFfU1RBUlQsCit9OworCiAjZGVmaW5lIEFBQ0lfSVJRCXsgSVJRX0FBQ0ksIE5PX0lSUSB9CiAjZGVmaW5lIEFBQ0lfRE1BCXsgMHg4MCwgMHg4MSB9CiAjZGVmaW5lIE1NQ0kwX0lSUQl7IElSUV9NTUNJMEEsSVJRX1NJQ19NTUNJMEIgfQpAQCAtNzY3LDggKzc4MCw4IEBACiBBTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7CiBBTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7CiBBTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBXQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBHUElPMCwgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBHUElPMCwgICAgJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7CiBBTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBSVEMsICAgICAgTlVMTCk7CiBBTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7CiBBTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBVQVJUMCwgICAgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZmMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDliZmRiMzAuLmJmNDRjNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMTIyLDQgKzEyMiwxMyBAQAogI2RlZmluZSBJUlFfU0lDX1BDSTMJCShJUlFfU0lDX1NUQVJUICsgU0lDX0lOVF9QQ0kzKQogI2RlZmluZSBJUlFfU0lDX0VORAkJNjMKIAotI2RlZmluZSBOUl9JUlFTCQkJNjQKKyNkZWZpbmUgSVJRX0dQSU8wX1NUQVJUCQkoSVJRX1NJQ19FTkQgKyAxKQorI2RlZmluZSBJUlFfR1BJTzBfRU5ECQkoSVJRX0dQSU8wX1NUQVJUICsgMzEpCisjZGVmaW5lIElSUV9HUElPMV9TVEFSVAkJKElSUV9HUElPMF9FTkQgKyAxKQorI2RlZmluZSBJUlFfR1BJTzFfRU5ECQkoSVJRX0dQSU8xX1NUQVJUICsgMzEpCisjZGVmaW5lIElSUV9HUElPMl9TVEFSVAkJKElSUV9HUElPMV9FTkQgKyAxKQorI2RlZmluZSBJUlFfR1BJTzJfRU5ECQkoSVJRX0dQSU8yX1NUQVJUICsgMzEpCisjZGVmaW5lIElSUV9HUElPM19TVEFSVAkJKElSUV9HUElPMl9FTkQgKyAxKQorI2RlZmluZSBJUlFfR1BJTzNfRU5ECQkoSVJRX0dQSU8zX1NUQVJUICsgMzEpCisKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfR1BJTzNfRU5EICsgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKaW5kZXggYWEwNTFjMC4uOWFmOGQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlX3BiLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtNDMsNiArNDQsMTggQEAKIHN0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jMV9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKKwkuZ3Bpb193cAk9IC0xLAorCS5ncGlvX2NkCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzJfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAxNiwKKwkuaXJxX2Jhc2UJPSBJUlFfR1BJTzJfU1RBUlQsCit9OworCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzNfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSAyNCwKKwkuaXJxX2Jhc2UJPSBJUlFfR1BJTzNfU1RBUlQsCiB9OwogCiAjZGVmaW5lIFVBUlQzX0lSUQl7IElSUV9TSUNfVUFSVDMsIE5PX0lSUSB9CkBAIC03MCw4ICs4Myw4IEBACiBBTUJBX0RFVklDRShtbWMxLCAgImZwZ2E6MGIiLCBNTUNJMSwgICAgJm1tYzFfcGxhdF9kYXRhKTsKIAogLyogRGV2Q2hpcCBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMywgImRldjplNyIsICBHUElPMywgICAgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMywgImRldjplNyIsICBHUElPMywgICAgJmdwaW8zX3BsYXRfZGF0YSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJnVhcnQzX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL0tjb25maWcKaW5kZXggOGU0MTc4Zi4uNjliYWIzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL0tjb25maWcKQEAgLTUsNiArNSwxNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFc5MFA5MTAgb2YgTnV2b3RvbiBXOTBYOTAwIENQVXMuCiAKK2NvbmZpZyBDUFVfTlVDOTUwCisJYm9vbAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE5VQ1A5NTAgb2YgTnV2b3RvbiBOVUM5MDAgQ1BVcy4KKworY29uZmlnIENQVV9OVUM5NjAKKwlib29sCisJaGVscAorCSAgU3VwcG9ydCBmb3IgTlVDUDk2MCBvZiBOdXZvdG9uIE5VQzkwMCBDUFVzLgorCiBtZW51ICJXOTBQOTEwIE1hY2hpbmVzIgogCiBjb25maWcgTUFDSF9XOTBQOTEwRVZCCkBAIC0xNiw0ICsyNiwyNCBAQAogCiBlbmRtZW51CiAKK21lbnUgIk5VQzk1MCBNYWNoaW5lcyIKKworY29uZmlnIE1BQ0hfVzkwUDk1MEVWQgorCWJvb2wgIk51dm90b24gTlVDOTUwIEV2YWx1YXRpb24gQm9hcmQiCisJc2VsZWN0IENQVV9OVUM5NTAKKwloZWxwCisJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOdXZvdG9uIE5VQzk1MEVWQgorCitlbmRtZW51CisKK21lbnUgIk5VQzk2MCBNYWNoaW5lcyIKKworY29uZmlnIE1BQ0hfVzkwTjk2MEVWQgorCWJvb2wgIk51dm90b24gTlVDOTYwIEV2YWx1YXRpb24gQm9hcmQiCisJc2VsZWN0IENQVV9OVUM5NjAKKwloZWxwCisJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOdXZvdG9uIE5VQzk2MEVWQgorCitlbmRtZW51CisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvTWFrZWZpbGUKaW5kZXggZDUwYzk0Zi4uODI4YzAzMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9NYWtlZmlsZQpAQCAtNCwxMiArNCwxNiBAQAogCiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCi1vYmoteQkJCQk6PSBpcnEubyB0aW1lLm8gbWZwLXc5MHA5MTAubyBncGlvLm8gY2xvY2subwotCitvYmoteQkJCQk6PSBpcnEubyB0aW1lLm8gbWZwLm8gZ3Bpby5vIGNsb2NrLm8KK29iai15CQkJCSs9IGNsa3NlbC5vIGRldi5vIGNwdS5vCiAjIFc5MFg5MDAgQ1BVIHN1cHBvcnQgZmlsZXMKIAotb2JqLSQoQ09ORklHX0NQVV9XOTBQOTEwKQkrPSB3OTBwOTEwLm8KK29iai0kKENPTkZJR19DUFVfVzkwUDkxMCkJKz0gbnVjOTEwLm8KK29iai0kKENPTkZJR19DUFVfTlVDOTUwKQkrPSBudWM5NTAubworb2JqLSQoQ09ORklHX0NQVV9OVUM5NjApCSs9IG51Yzk2MC5vCiAKICMgbWFjaGluZSBzdXBwb3J0CiAKLW9iai0kKENPTkZJR19NQUNIX1c5MFA5MTBFVkIpCSs9IG1hY2gtdzkwcDkxMGV2Yi5vCitvYmotJChDT05GSUdfTUFDSF9XOTBQOTEwRVZCKQkrPSBtYWNoLW51YzkxMGV2Yi5vCitvYmotJChDT05GSUdfTUFDSF9XOTBQOTUwRVZCKQkrPSBtYWNoLW51Yzk1MGV2Yi5vCitvYmotJChDT05GSUdfTUFDSF9XOTBOOTYwRVZCKQkrPSBtYWNoLW51Yzk2MGV2Yi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xrc2VsLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xrc2VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlNGE1MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jbGtzZWwuYwpAQCAtMCwwICsxLDkxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsa3NlbC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNkZWZpbmUgUExMMAkJMHgwMAorI2RlZmluZSBQTEwxCQkweDAxCisjZGVmaW5lIE9USEVSCQkweDAyCisjZGVmaW5lIEVYVAkJMHgwMworI2RlZmluZSBNU09GRlNFVAkweDBDCisjZGVmaW5lIEFUQU9GRlNFVAkweDBhCisjZGVmaW5lIExDRE9GRlNFVAkweDA2CisjZGVmaW5lIEFVRE9GRlNFVAkweDA0CisjZGVmaW5lIENQVU9GRlNFVAkweDAwCisKK3N0YXRpYyBERUZJTkVfTVVURVgoY2xrc2VsX3NlbSk7CisKK3N0YXRpYyB2b2lkIGNsb2NrX3NvdXJjZV9zZWxlY3QoY29uc3QgY2hhciAqZGV2X2lkLCB1bnNpZ25lZCBpbnQgY2xrdmFsKQoreworCXVuc2lnbmVkIGludCBjbGtzZWwsIG9mZnNldDsKKworCWNsa3NlbCA9IF9fcmF3X3JlYWRsKFJFR19DTEtTRUwpOworCisJaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAtbXMiKSA9PSAwKQorCQlvZmZzZXQgPSBNU09GRlNFVDsKKwllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWF0YXBpIikgPT0gMCkKKwkJb2Zmc2V0ID0gQVRBT0ZGU0VUOworCWVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAtbGNkIikgPT0gMCkKKwkJb2Zmc2V0ID0gTENET0ZGU0VUOworCWVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAtYXVkaW8iKSA9PSAwKQorCQlvZmZzZXQgPSBBVURPRkZTRVQ7CisJZWxzZQorCQlvZmZzZXQgPSBDUFVPRkZTRVQ7CisKKwljbGtzZWwgJj0gfigweDAzIDw8IG9mZnNldCk7CisJY2xrc2VsIHw9IChjbGt2YWwgPDwgb2Zmc2V0KTsKKworCV9fcmF3X3dyaXRlbChjbGtzZWwsIFJFR19DTEtTRUwpOworfQorCit2b2lkIG51YzkwMF9jbG9ja19zb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyICpzcmMpCit7CisJdW5zaWduZWQgaW50IGNsa3ZhbDsKKwljb25zdCBjaGFyICpkZXZfaWQ7CisKKwlCVUdfT04oIXNyYyk7CisJY2xrdmFsID0gMDsKKworCW11dGV4X2xvY2soJmNsa3NlbF9zZW0pOworCisJaWYgKGRldikKKwkJZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKKwllbHNlCisJCWRldl9pZCA9ICJjcHVmcmVxIjsKKworCWlmIChzdHJjbXAoc3JjLCAicGxsMCIpID09IDApCisJCWNsa3ZhbCA9IFBMTDA7CisJZWxzZSBpZiAoc3RyY21wKHNyYywgInBsbDEiKSA9PSAwKQorCQljbGt2YWwgPSBQTEwxOworCWVsc2UgaWYgKHN0cmNtcChzcmMsICJleHQiKSA9PSAwKQorCQljbGt2YWwgPSBFWFQ7CisJZWxzZSBpZiAoc3RyY21wKHNyYywgIm90aCIpID09IDApCisJCWNsa3ZhbCA9IE9USEVSOworCisJY2xvY2tfc291cmNlX3NlbGVjdChkZXZfaWQsIGNsa3ZhbCk7CisKKwltdXRleF91bmxvY2soJmNsa3NlbF9zZW0pOworfQorRVhQT1JUX1NZTUJPTChudWM5MDBfY2xvY2tfc291cmNlKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suYwppbmRleCBmNDIwNjEzLi5iNzg1OTk0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmMKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImNsb2NrLmgiCiAKKyNkZWZpbmUgU1VCQ0xLIDB4MjQKKwogc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja3NfbG9jayk7CiAKIGludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTUzLDcgKzU1LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKIAotdm9pZCB3OTB4OTAwX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQordW5zaWduZWQgbG9uZyBjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAxNTAwMDAwMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKKwordm9pZCBudWM5MDBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNsb2NrcyA9IGNsay0+Y2tlbjsKIAl1bnNpZ25lZCBsb25nIGNsa2VuOwpAQCAtNjgsNiArNzYsMjIgQEAKIAlfX3Jhd193cml0ZWwoY2xrZW4sIFc5MFg5MDBfVkFfQ0xLUFdSKTsKIH0KIAordm9pZCBudWM5MDBfc3ViY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGNsb2NrcyA9IGNsay0+Y2tlbjsKKwl1bnNpZ25lZCBsb25nIGNsa2VuOworCisJY2xrZW4gPSBfX3Jhd19yZWFkbChXOTBYOTAwX1ZBX0NMS1BXUiArIFNVQkNMSyk7CisKKwlpZiAoZW5hYmxlKQorCQljbGtlbiB8PSBjbG9ja3M7CisJZWxzZQorCQljbGtlbiAmPSB+Y2xvY2tzOworCisJX19yYXdfd3JpdGVsKGNsa2VuLCBXOTBYOTAwX1ZBX0NMS1BXUiArIFNVQkNMSyk7Cit9CisKKwogdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suaAppbmRleCA0ZjI3YmRhLi5mNTgxNmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY2xvY2suaApAQCAtMTIsNyArMTIsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCi12b2lkIHc5MHg5MDBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwordm9pZCBudWM5MDBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwordm9pZCBudWM5MDBfc3ViY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwogdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICpjbGtzLCBzaXplX3QgbnVtKTsKIAogc3RydWN0IGNsayB7CkBAIC0yMywxMCArMjQsMTcgQEAKIAogI2RlZmluZSBERUZJTkVfQ0xLKF9uYW1lLCBfY3RybGJpdCkJCQlcCiBzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQlcCi0JCS5lbmFibGUJPSB3OTB4OTAwX2Nsa19lbmFibGUsCQlcCisJCS5lbmFibGUJPSBudWM5MDBfY2xrX2VuYWJsZSwJCVwKIAkJLmNrZW4JPSAoMSA8PCBfY3RybGJpdCksCQlcCiAJfQogCisjZGVmaW5lIERFRklORV9TVUJDTEsoX25hbWUsIF9jdHJsYml0KQkJCVwKK3N0cnVjdCBjbGsgY2xrXyMjX25hbWUgPSB7CQkJCVwKKwkJLmVuYWJsZQk9IG51YzkwMF9zdWJjbGtfZW5hYmxlLAlcCisJCS5ja2VuCT0gKDEgPDwgX2N0cmxiaXQpLAkJXAorCX0KKworCiAjZGVmaW5lIERFRl9DTEtMT09LKF9jbGssIF9kZXZuYW1lLCBfY29ubmFtZSkJCVwKIAl7CQkJCQkJXAogCQkuY2xrCQk9IF9jbGssCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMWNlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogTlVDOTAwIHNlcmllcyBjcHUgY29tbW9uIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZWJpLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiBJbml0aWFsIElPIG1hcHBpbmdzICovCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbnVjOTAwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJSU9ERVNDX0VOVChJUlEpLAorCUlPREVTQ19FTlQoR0NSKSwKKwlJT0RFU0NfRU5UKFVBUlQpLAorCUlPREVTQ19FTlQoVElNRVIpLAorCUlPREVTQ19FTlQoRUJJKSwKK307CisKKy8qIEluaXRpYWwgY2xvY2sgZGVjbGFyYXRpb25zLiAqLworc3RhdGljIERFRklORV9DTEsobGNkLCAwKTsKK3N0YXRpYyBERUZJTkVfQ0xLKGF1ZGlvLCAxKTsKK3N0YXRpYyBERUZJTkVfQ0xLKGZtaSwgNCk7CitzdGF0aWMgREVGSU5FX1NVQkNMSyhtcywgMCk7CitzdGF0aWMgREVGSU5FX1NVQkNMSyhzZCwgMSk7CitzdGF0aWMgREVGSU5FX0NMSyhkbWFjLCA1KTsKK3N0YXRpYyBERUZJTkVfQ0xLKGF0YXBpLCA2KTsKK3N0YXRpYyBERUZJTkVfQ0xLKGVtYywgNyk7CitzdGF0aWMgREVGSU5FX1NVQkNMSyhybWlpLCAyKTsKK3N0YXRpYyBERUZJTkVfQ0xLKHVzYmQsIDgpOworc3RhdGljIERFRklORV9DTEsodXNiaCwgOSk7CitzdGF0aWMgREVGSU5FX0NMSyhnMmQsIDEwKTs7CitzdGF0aWMgREVGSU5FX0NMSyhwd20sIDE4KTsKK3N0YXRpYyBERUZJTkVfQ0xLKHBzMiwgMjQpOworc3RhdGljIERFRklORV9DTEsoa3BpLCAyNSk7CitzdGF0aWMgREVGSU5FX0NMSyh3ZHQsIDI2KTsKK3N0YXRpYyBERUZJTkVfQ0xLKGdkbWEsIDI3KTsKK3N0YXRpYyBERUZJTkVfQ0xLKGFkYywgMjgpOworc3RhdGljIERFRklORV9DTEsodXNpLCAyOSk7CitzdGF0aWMgREVGSU5FX0NMSyhleHQsIDApOworCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbnVjOTAwX2Nsa3JlZ3NbXSA9IHsKKwlERUZfQ0xLTE9PSygmY2xrX2xjZCwgIm51YzkwMC1sY2QiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX2F1ZGlvLCAibnVjOTAwLWF1ZGlvIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19mbWksICJudWM5MDAtZm1pIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19tcywgIm51YzkwMC1mbWkiLCAiTVMiKSwKKwlERUZfQ0xLTE9PSygmY2xrX3NkLCAibnVjOTAwLWZtaSIsICJTRCIpLAorCURFRl9DTEtMT09LKCZjbGtfZG1hYywgIm51YzkwMC1kbWFjIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa19hdGFwaSwgIm51YzkwMC1hdGFwaSIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfZW1jLCAibnVjOTAwLWVtYyIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfcm1paSwgIm51YzkwMC1lbWMiLCAiUk1JSSIpLAorCURFRl9DTEtMT09LKCZjbGtfdXNiZCwgIm51YzkwMC11c2JkIiwgTlVMTCksCisJREVGX0NMS0xPT0soJmNsa191c2JoLCAibnVjOTAwLXVzYmgiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX2cyZCwgIm51YzkwMC1nMmQiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX3B3bSwgIm51YzkwMC1wd20iLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX3BzMiwgIm51YzkwMC1wczIiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX2twaSwgIm51YzkwMC1rcGkiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX3dkdCwgIm51YzkwMC13ZHQiLCBOVUxMKSwKKwlERUZfQ0xLTE9PSygmY2xrX2dkbWEsICJudWM5MDAtZ2RtYSIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfYWRjLCAibnVjOTAwLWFkYyIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfdXNpLCAibnVjOTAwLXNwaSIsIE5VTEwpLAorCURFRl9DTEtMT09LKCZjbGtfZXh0LCBOVUxMLCAiZXh0IiksCit9OworCisvKiBJbml0aWFsIHNlcmlhbCBwbGF0Zm9ybSBkYXRhICovCisKK3N0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBudWM5MDBfdWFydF9kYXRhW10gPSB7CisJTlVDOTAwXzgyNTBQT1JUKFVBUlQwKSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX3NlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gbnVjOTAwX3VhcnRfZGF0YSwKKwl9LAorfTsKKworLypTZXQgTlVDOTAwIHNlcmllcyBjcHUgZnJlcXVlbmNlKi8KK3N0YXRpYyBpbnQgX19pbml0IG51YzkwMF9zZXRfY2xrdmFsKHVuc2lnbmVkIGludCBjcHVmcmVxKQoreworCXVuc2lnbmVkIGludCBwbGxjbGssIGFoYmNsaywgYXBiY2xrLCB2YWw7CisKKwlwbGxjbGsgPSAwOworCWFoYmNsayA9IDA7CisJYXBiY2xrID0gMDsKKworCXN3aXRjaCAoY3B1ZnJlcSkgeworCWNhc2UgNjY6CisJCXBsbGNsayA9IFBMTF82Nk1IWjsKKwkJYWhiY2xrID0gQUhCX0NQVUNMS18xXzE7CisJCWFwYmNsayA9IEFQQl9BSEJfMV8yOworCQlicmVhazsKKworCWNhc2UgMTAwOgorCQlwbGxjbGsgPSBQTExfMTAwTUhaOworCQlhaGJjbGsgPSBBSEJfQ1BVQ0xLXzFfMTsKKwkJYXBiY2xrID0gQVBCX0FIQl8xXzI7CisJCWJyZWFrOworCisJY2FzZSAxMjA6CisJCXBsbGNsayA9IFBMTF8xMjBNSFo7CisJCWFoYmNsayA9IEFIQl9DUFVDTEtfMV8yOworCQlhcGJjbGsgPSBBUEJfQUhCXzFfMjsKKwkJYnJlYWs7CisKKwljYXNlIDE2NjoKKwkJcGxsY2xrID0gUExMXzE2Nk1IWjsKKwkJYWhiY2xrID0gQUhCX0NQVUNMS18xXzI7CisJCWFwYmNsayA9IEFQQl9BSEJfMV8yOworCQlicmVhazsKKworCWNhc2UgMjAwOgorCQlwbGxjbGsgPSBQTExfMjAwTUhaOworCQlhaGJjbGsgPSBBSEJfQ1BVQ0xLXzFfMjsKKwkJYXBiY2xrID0gQVBCX0FIQl8xXzI7CisJCWJyZWFrOworCX0KKworCV9fcmF3X3dyaXRlbChwbGxjbGssIFJFR19QTExDT04wKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFJFR19DTEtESVYpOworCXZhbCAmPSB+KDB4MDMgPDwgMjQgfCAweDAzIDw8IDI2KTsKKwl2YWwgfD0gKGFoYmNsayA8PCAyNCB8IGFwYmNsayA8PCAyNik7CisJX19yYXdfd3JpdGVsKHZhbCwgUkVHX0NMS0RJVik7CisKKwlyZXR1cm4gCTA7Cit9CitzdGF0aWMgaW50IF9faW5pdCBudWM5MDBfc2V0X2NwdWZyZXEoY2hhciAqc3RyKQoreworCXVuc2lnbmVkIGxvbmcgY3B1ZnJlcSwgdmFsOworCisJaWYgKCEqc3RyKQorCQlyZXR1cm4gMDsKKworCXN0cmljdF9zdHJ0b3VsKHN0ciwgMCwgJmNwdWZyZXEpOworCisJbnVjOTAwX2Nsb2NrX3NvdXJjZShOVUxMLCAiZXh0Iik7CisKKwludWM5MDBfc2V0X2Nsa3ZhbChjcHVmcmVxKTsKKworCW1kZWxheSgxKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFJFR19DS1NLRVcpOworCXZhbCAmPSB+MHhmZjsKKwl2YWwgfD0gREVGQVVMVFNLRVc7CisJX19yYXdfd3JpdGVsKHZhbCwgUkVHX0NLU0tFVyk7CisKKwludWM5MDBfY2xvY2tfc291cmNlKE5VTEwsICJwbGwwIik7CisKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgiY3B1ZnJlcT0iLCBudWM5MDBfc2V0X2NwdWZyZXEpOworCisvKkluaXQgTlVDOTAwIGV2YiBpbyovCisKK3ZvaWQgX19pbml0IG51YzkwMF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBtYWNoX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyBpZGNvZGUgPSAweDA7CisKKwlpb3RhYmxlX2luaXQobWFjaF9kZXNjLCBtYWNoX3NpemUpOworCWlvdGFibGVfaW5pdChudWM5MDBfaW9kZXNjLCBBUlJBWV9TSVpFKG51YzkwMF9pb2Rlc2MpKTsKKworCWlkY29kZSA9IF9fcmF3X3JlYWRsKE5VQzkwMFBESUQpOworCWlmIChpZGNvZGUgPT0gTlVDOTEwX0NQVUlEKQorCQlwcmludGsoS0VSTl9JTkZPICJDUFUgdHlwZSAweCUwOGx4IGlzIE5VQzkxMFxuIiwgaWRjb2RlKTsKKwllbHNlIGlmIChpZGNvZGUgPT0gTlVDOTIwX0NQVUlEKQorCQlwcmludGsoS0VSTl9JTkZPICJDUFUgdHlwZSAweCUwOGx4IGlzIE5VQzkyMFxuIiwgaWRjb2RlKTsKKwllbHNlIGlmIChpZGNvZGUgPT0gTlVDOTUwX0NQVUlEKQorCQlwcmludGsoS0VSTl9JTkZPICJDUFUgdHlwZSAweCUwOGx4IGlzIE5VQzk1MFxuIiwgaWRjb2RlKTsKKwllbHNlIGlmIChpZGNvZGUgPT0gTlVDOTYwX0NQVUlEKQorCQlwcmludGsoS0VSTl9JTkZPICJDUFUgdHlwZSAweCUwOGx4IGlzIE5VQzk2MFxuIiwgaWRjb2RlKTsKK30KKworLypJbml0IE5VQzkwMCBjbG9jayovCisKK3ZvaWQgX19pbml0IG51YzkwMF9pbml0X2Nsb2Nrcyh2b2lkKQoreworCWNsa3NfcmVnaXN0ZXIobnVjOTAwX2Nsa3JlZ3MsIEFSUkFZX1NJWkUobnVjOTAwX2Nsa3JlZ3MpKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oCmluZGV4IDU3YjVkYmEuLjRkNThiYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmgKQEAgLTYsNyArNiw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIEhlYWRlciBmaWxlIGZvciBXOTBYOTAwIENQVSBzdXBwb3J0CisgKiBIZWFkZXIgZmlsZSBmb3IgTlVDOTAwIENQVSBzdXBwb3J0CiAgKgogICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgogICoKQEAgLTI0LDI5ICsyNCw3IEBACiAgICAgICAgLnR5cGUgICAgPSBNVF9ERVZJQ0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi0vKkNwdSBpZGVudGlmaWVyIHJlZ2lzdGVyKi8KLQotI2RlZmluZSBXOTBYOTAwUERJRAlXOTBYOTAwX1ZBX0dDUgotI2RlZmluZSBXOTBQOTEwX0NQVUlECTB4MDI5MDA5MTAKLSNkZWZpbmUgVzkwUDkyMF9DUFVJRAkweDAyOTAwOTIwCi0jZGVmaW5lIFc5MFA5NTBfQ1BVSUQJMHgwMjkwMDk1MAotI2RlZmluZSBXOTBOOTYwX0NQVUlECTB4MDI5MDA5NjAKLQotc3RydWN0IHc5MHg5MDBfdWFydGNmZzsKLXN0cnVjdCBtYXBfZGVzYzsKLXN0cnVjdCBzeXNfdGltZXI7Ci0KLS8qIGNvcmUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCi0KLWV4dGVybiB2b2lkIHc5MHg5MDBfaW5pdF9pcnEodm9pZCk7Ci1leHRlcm4gdm9pZCB3OTBwOTEwX2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKLWV4dGVybiB2b2lkIHc5MHA5MTBfaW5pdF91YXJ0cyhzdHJ1Y3QgdzkweDkwMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7Ci1leHRlcm4gdm9pZCB3OTBwOTEwX2luaXRfY2xvY2tzKHZvaWQpOwotZXh0ZXJuIHZvaWQgdzkwcDkxMF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHA5MTBfc2VyaWFsX2RldmljZTsKLWV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHc5MHg5MDBfdGltZXI7Ci0KLSNkZWZpbmUgVzkwWDkwMF84MjUwUE9SVChuYW1lKQkJCQkJXAorI2RlZmluZSBOVUM5MDBfODI1MFBPUlQobmFtZSkJCQkJCVwKIHsJCQkJCQkJCVwKIAkubWVtYmFzZQk9IG5hbWUjI19CQSwJCQkJXAogCS5tYXBiYXNlCT0gbmFtZSMjX1BBLAkJCQlcCkBAIC01NiwzICszNCwyNiBAQAogCS5pb3R5cGUJCT0gVVBJT19NRU0sCQkJCVwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNULAlcCiB9CisKKy8qQ3B1IGlkZW50aWZpZXIgcmVnaXN0ZXIqLworCisjZGVmaW5lIE5VQzkwMFBESUQJVzkwWDkwMF9WQV9HQ1IKKyNkZWZpbmUgTlVDOTEwX0NQVUlECTB4MDI5MDA5MTAKKyNkZWZpbmUgTlVDOTIwX0NQVUlECTB4MDI5MDA5MjAKKyNkZWZpbmUgTlVDOTUwX0NQVUlECTB4MDI5MDA5NTAKKyNkZWZpbmUgTlVDOTYwX0NQVUlECTB4MDI5MDA5NjAKKworLyogZXh0ZXJuIGZpbGUgZnJvbSBjcHUuYyAqLworCitleHRlcm4gdm9pZCBudWM5MDBfY2xvY2tfc291cmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciAqc3JjKTsKK2V4dGVybiB2b2lkIG51YzkwMF9pbml0X2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIG51YzkwMF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBtYWNoX3NpemUpOworZXh0ZXJuIHZvaWQgbnVjOTAwX2JvYXJkX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKmRldmljZSwgaW50IHNpemUpOworCisvKiBmb3IgZWl0aGVyIHB1YmxpYyBiZXR3ZWVuIDkxMCBhbmQgOTIwLCBvciBiZXR3ZWVuIDkyMCBhbmQgOTUwICovCisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9zZXJpYWxfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9mbWk7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfZGV2aWNlX2twaTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfcnRjOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV90czsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTZmOThkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jCkBAIC0wLDAgKzEsMzg5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE51dm90b24gY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSAiY3B1LmgiCisKKy8qTlVDOTAwIGV2YiBub3JmbGFzaCBkcml2ZXIgZGF0YSAqLworCisjZGVmaW5lIE5VQzkwMF9GTEFTSF9CQVNFCTB4QTAwMDAwMDAKKyNkZWZpbmUgTlVDOTAwX0ZMQVNIX1NJWkUJMHg0MDAwMDAKKyNkZWZpbmUgU1BJT0ZGU0VUCQkweDIwMAorI2RlZmluZSBTUElPUkVHX1NJWkUJCTB4MTAwCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBudWM5MDBfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAxIGZvciBrZXJuZWwgKDk2MEspIiwKKwkJLnNpemUJPQkweEYwMDAwLAorCQkub2Zmc2V0CT0JMHgxMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAyIGZvciBpbWFnZSAoMU0pIiwKKwkJLnNpemUJPQkweDEwMDAwMCwKKwkJLm9mZnNldAk9CTB4MTAwMDAwLAorCX0sCisJeworCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDMgZm9yIHVzZXIgKDJNKSIsCisJCS5zaXplCT0JMHgyMDAwMDAsCisJCS5vZmZzZXQJPQkweDAwMjAwMDAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG51YzkwMF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPQkyLAorCS5wYXJ0cwkJPQludWM5MDBfZmxhc2hfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPQlBUlJBWV9TSVpFKG51YzkwMF9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX2ZsYXNoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0JTlVDOTAwX0ZMQVNIX0JBU0UsCisJCS5lbmQJPQlOVUM5MDBfRkxBU0hfQkFTRSArIE5VQzkwMF9GTEFTSF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0JSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPQkicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9CTAsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEgPSAmbnVjOTAwX2ZsYXNoX2RhdGEsCisJCQl9LAorCS5yZXNvdXJjZQk9CW51YzkwMF9mbGFzaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPQlBUlJBWV9TSVpFKG51YzkwMF9mbGFzaF9yZXNvdXJjZXMpLAorfTsKKworLyogVVNCIEVIQ0kgSG9zdCBDb250cm9sbGVyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX3VzYl9laGNpX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX1VTQkVIQ0lIT1NULAorCQkuZW5kICAgPSBXOTBYOTAwX1BBX1VTQkVIQ0lIT1NUICsgVzkwWDkwMF9TWl9VU0JFSENJSE9TVCAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVVNCSCwKKwkJLmVuZCAgID0gSVJRX1VTQkgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyB1NjQgbnVjOTAwX2RldmljZV91c2JfZWhjaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfZGV2aWNlX3VzYl9laGNpID0geworCS5uYW1lCQkgID0gIm51YzkwMC1laGNpIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShudWM5MDBfdXNiX2VoY2lfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gbnVjOTAwX3VzYl9laGNpX3Jlc291cmNlLAorCS5kZXYgICAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmbnVjOTAwX2RldmljZV91c2JfZWhjaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKKwl9Cit9OworCisvKiBVU0IgT0hDSSBIb3N0IENvbnRyb2xsZXIgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBudWM5MDBfdXNiX29oY2lfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFc5MFg5MDBfUEFfVVNCT0hDSUhPU1QsCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfVVNCT0hDSUhPU1QgKyBXOTBYOTAwX1NaX1VTQk9IQ0lIT1NUIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9VU0JILAorCQkuZW5kICAgPSBJUlFfVVNCSCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHU2NCBudWM5MDBfZGV2aWNlX3VzYl9vaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfZGV2aWNlX3VzYl9vaGNpID0geworCS5uYW1lCQkgID0gIm51YzkwMC1vaGNpIiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShudWM5MDBfdXNiX29oY2lfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gbnVjOTAwX3VzYl9vaGNpX3Jlc291cmNlLAorCS5kZXYgICAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgPSAmbnVjOTAwX2RldmljZV91c2Jfb2hjaV9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKKwl9Cit9OworCisvKiBVU0IgRGV2aWNlIChHYWRnZXQpKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBudWM5MDBfdXNiZ2FkZ2V0X3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX1VTQkRFViwKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9VU0JERVYgKyBXOTBYOTAwX1NaX1VTQkRFViAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVVNCRCwKKwkJLmVuZCAgID0gSVJRX1VTQkQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfdXNiZ2FkZ2V0ID0geworCS5uYW1lCQk9ICJudWM5MDAtdXNiZ2FkZ2V0IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG51YzkwMF91c2JnYWRnZXRfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IG51YzkwMF91c2JnYWRnZXRfcmVzb3VyY2UsCit9OworCisvKiBNQUMgZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX2VtY19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9FTUMsCisJCS5lbmQgICA9IFc5MFg5MDBfUEFfRU1DICsgVzkwWDkwMF9TWl9FTUMgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0VNQ1RYLAorCQkuZW5kICAgPSBJUlFfRU1DVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBJUlFfRU1DUlgsCisJCS5lbmQgICA9IElSUV9FTUNSWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHU2NCBudWM5MDBfZGV2aWNlX2VtY19kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9lbWMgPSB7CisJLm5hbWUJCT0gIm51YzkwMC1lbWMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX2VtY19yZXNvdXJjZSksCisJLnJlc291cmNlCT0gbnVjOTAwX2VtY19yZXNvdXJjZSwKKwkuZGV2ICAgICAgICAgICAgICA9IHsKKwkJLmRtYV9tYXNrID0gJm51YzkwMF9kZXZpY2VfZW1jX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAorCX0KK307CisKKy8qIFNQSSBkZXZpY2UgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBudWM5MDBfc3BpX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX0kyQyArIFNQSU9GRlNFVCwKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9JMkMgKyBTUElPRkZTRVQgKyBTUElPUkVHX1NJWkUgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1NTUCwKKwkJLmVuZCAgID0gSVJRX1NTUCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9zcGkgPSB7CisJLm5hbWUJCT0gIm51YzkwMC1zcGkiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX3NwaV9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gbnVjOTAwX3NwaV9yZXNvdXJjZSwKK307CisKKy8qIHNwaSBkZXZpY2UsIHNwaSBmbGFzaCBpbmZvICovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBudWM5MDBfc3BpX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0gImJvb3Rsb2FkZXIoc3BpKSIsCisJCS5zaXplID0gMHgwMTAwMDAwLAorCQkub2Zmc2V0ID0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG51YzkwMF9zcGlfZmxhc2hfZGF0YSA9IHsKKwkubmFtZSA9ICJtMjVwODAiLAorCS5wYXJ0cyA9ICBudWM5MDBfc3BpX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzID0gQVJSQVlfU0laRShudWM5MDBfc3BpX2ZsYXNoX3BhcnRpdGlvbnMpLAorCS50eXBlID0gIncyNXgxNiIsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG51YzkwMF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMgPSAibTI1cDgwIiwKKwkJLm1heF9zcGVlZF9oeiA9IDIwMDAwMDAwLAorCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJm51YzkwMF9zcGlfZmxhc2hfZGF0YSwKKwkJLm1vZGUgPSBTUElfTU9ERV8wLAorCX0sCit9OworCisvKiBXRFQgRGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX3dkdF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9USU1FUiwKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9USU1FUiArIFc5MFg5MDBfU1pfVElNRVIgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1dEVCwKKwkJLmVuZCAgID0gSVJRX1dEVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV93ZHQgPSB7CisJLm5hbWUJCT0gIm51YzkwMC13ZHQiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX3dkdF9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gbnVjOTAwX3dkdF9yZXNvdXJjZSwKK307CisKKy8qCisgKiBwdWJsaWMgZGV2aWNlIGRlZmluaXRpb24gYmV0d2VlbiA5MTAgYW5kIDkyMCwgb3IgOTEwCisgKiBhbmQgOTUwIG9yIDk1MCBhbmQgOTYwLi4uLHRoZWlyIGRldiBwbGF0Zm9ybSByZWdpc3RlcgorICogc2hvdWxkIGJlIGluIHNwZWNpZmljIGZpbGUgc3VjaCBhcyBudWM5NTAsIG51Yzk2MCBjCisgKiBmaWxlcyByYXRoZXIgdGhhbiB0aGUgcHVibGljIGRldi5jIGZpbGUgaGVyZS4gc28gdGhlCisgKiBjb3JyZXNwb25kaW5nIHBsYXRmb3JtX2RldmljZSBkZWZpbml0aW9uIHNob3VsZCBub3QgYmUKKyAqIHN0YXRpYy4KKyovCisKKy8qIFJUQyBjb250cm9sbGVyKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBudWM5MDBfcnRjX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX1JUQywKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9SVEMgKyAweGZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1JUQywKKwkJLmVuZCAgID0gSVJRX1JUQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9ydGMgPSB7CisJLm5hbWUJCT0gIm51YzkwMC1ydGMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX3J0Y19yZXNvdXJjZSksCisJLnJlc291cmNlCT0gbnVjOTAwX3J0Y19yZXNvdXJjZSwKK307CisKKy8qVG91Y2hTY3JlZW4gY29udHJvbGxlciovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnVjOTAwX3RzX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX0FEQywKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9BREMgKyBXOTBYOTAwX1NaX0FEQy0xLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX0FEQywKKwkJLmVuZCAgID0gSVJRX0FEQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV90cyA9IHsKKwkubmFtZQkJPSAibnVjOTAwLXRzIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gbnVjOTAwX3RzX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShudWM5MDBfdHNfcmVzb3VyY2UpLAorfTsKKworLyogRk1JIERldmljZSAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG51YzkwMF9mbWlfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFc5MFg5MDBfUEFfRk1JLAorCQkuZW5kICAgPSBXOTBYOTAwX1BBX0ZNSSArIFc5MFg5MDBfU1pfRk1JIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9GTUksCisJCS5lbmQgICA9IElSUV9GTUksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9mbWkgPSB7CisJLm5hbWUJCT0gIm51YzkwMC1mbWkiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX2ZtaV9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gbnVjOTAwX2ZtaV9yZXNvdXJjZSwKK307CisKKy8qIEtQSSBjb250cm9sbGVyKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBudWM5MDBfa3BpX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX0tQSSwKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9LUEkgKyBXOTBYOTAwX1NaX0tQSSAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfS1BJLAorCQkuZW5kICAgPSBJUlFfS1BJLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9CisKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9rcGkgPSB7CisJLm5hbWUJCT0gIm51YzkwMC1rcGkiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobnVjOTAwX2twaV9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gbnVjOTAwX2twaV9yZXNvdXJjZSwKK307CisKKy8qSGVyZSBzaG91bGQgYmUgeW91ciBldmIgcmVzb3Vyc2Usc3VjaCBhcyBMQ0QqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnVjOTAwX3B1YmxpY19kZXZbXSBfX2luaXRkYXRhID0geworCSZudWM5MDBfc2VyaWFsX2RldmljZSwKKwkmbnVjOTAwX2ZsYXNoX2RldmljZSwKKwkmbnVjOTAwX2RldmljZV91c2JfZWhjaSwKKwkmbnVjOTAwX2RldmljZV91c2Jfb2hjaSwKKwkmbnVjOTAwX2RldmljZV91c2JnYWRnZXQsCisJJm51YzkwMF9kZXZpY2VfZW1jLAorCSZudWM5MDBfZGV2aWNlX3NwaSwKKwkmbnVjOTAwX2RldmljZV93ZHQsCit9OworCisvKiBQcm92aWRlIGFkZGluZyBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlcyBBUEkgKi8KKwordm9pZCBfX2luaXQgbnVjOTAwX2JvYXJkX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKmRldmljZSwgaW50IHNpemUpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlLCBzaXplKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhudWM5MDBfcHVibGljX2RldiwgQVJSQVlfU0laRShudWM5MDBfcHVibGljX2RldikpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG51YzkwMF9zcGlfYm9hcmRfaW5mbywKKwkJCQkJQVJSQVlfU0laRShudWM5MDBfc3BpX2JvYXJkX2luZm8pKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9ncGlvLmMKaW5kZXggYzcyZTBkZi4uYmEwNWFlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZ3Bpby5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkwcDkxMC9ncGlvLmMKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9ncGlvLmMKICAqCi0gKiBHZW5lcmljIHc5MHA5MTAgR1BJTyBoYW5kbGluZworICogR2VuZXJpYyBudWM5MDAgR1BJTyBoYW5kbGluZwogICoKICAqICBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CiAgKgpAQCAtMzAsMzEgKzMwLDMxIEBACiAjZGVmaW5lIEdQSU9fSU4JCQkoMHgwQykKICNkZWZpbmUgR1JPVVBJTkVSVgkJKDB4MTApCiAjZGVmaW5lIEdQSU9fR1BJTyhOYikJCSgweDAwMDAwMDAxIDw8IChOYikpCi0jZGVmaW5lIHRvX3c5MHA5MTBfZ3Bpb19jaGlwKGMpIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgdzkwcDkxMF9ncGlvX2NoaXAsIGNoaXApCisjZGVmaW5lIHRvX251YzkwMF9ncGlvX2NoaXAoYykgY29udGFpbmVyX29mKGMsIHN0cnVjdCBudWM5MDBfZ3Bpb19jaGlwLCBjaGlwKQogCi0jZGVmaW5lIFc5MFA5MTBfR1BJT19DSElQKG5hbWUsIGJhc2VfZ3BpbywgbnJfZ3BpbykJCQlcCisjZGVmaW5lIE5VQzkwMF9HUElPX0NISVAobmFtZSwgYmFzZV9ncGlvLCBucl9ncGlvKQkJCVwKIAl7CQkJCQkJCQlcCiAJCS5jaGlwID0gewkJCQkJCVwKIAkJCS5sYWJlbAkJICA9IG5hbWUsCQkJXAotCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSB3OTBwOTEwX2Rpcl9pbnB1dCwJCVwKLQkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gdzkwcDkxMF9kaXJfb3V0cHV0LAkJXAotCQkJLmdldAkJICA9IHc5MHA5MTBfZ3Bpb19nZXQsCQlcCi0JCQkuc2V0CQkgID0gdzkwcDkxMF9ncGlvX3NldCwJCVwKKwkJCS5kaXJlY3Rpb25faW5wdXQgID0gbnVjOTAwX2Rpcl9pbnB1dCwJCVwKKwkJCS5kaXJlY3Rpb25fb3V0cHV0ID0gbnVjOTAwX2Rpcl9vdXRwdXQsCQlcCisJCQkuZ2V0CQkgID0gbnVjOTAwX2dwaW9fZ2V0LAkJXAorCQkJLnNldAkJICA9IG51YzkwMF9ncGlvX3NldCwJCVwKIAkJCS5iYXNlCQkgID0gYmFzZV9ncGlvLAkJCVwKIAkJCS5uZ3BpbwkJICA9IG5yX2dwaW8sCQkJXAogCQl9CQkJCQkJCVwKIAl9CiAKLXN0cnVjdCB3OTBwOTEwX2dwaW9fY2hpcCB7CitzdHJ1Y3QgbnVjOTAwX2dwaW9fY2hpcCB7CiAJc3RydWN0IGdwaW9fY2hpcAljaGlwOwogCXZvaWQgX19pb21lbQkJKnJlZ2Jhc2U7CS8qIEJhc2Ugb2YgZ3JvdXAgcmVnaXN0ZXIqLwogCXNwaW5sb2NrX3QgCQlncGlvX2xvY2s7CiB9OwogCi1zdGF0aWMgaW50IHc5MHA5MTBfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQorc3RhdGljIGludCBudWM5MDBfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCB3OTBwOTEwX2dwaW9fY2hpcCAqdzkwcDkxMF9ncGlvID0gdG9fdzkwcDkxMF9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSB3OTBwOTEwX2dwaW8tPnJlZ2Jhc2UgKyBHUElPX0lOOworCXN0cnVjdCBudWM5MDBfZ3Bpb19jaGlwICpudWM5MDBfZ3BpbyA9IHRvX251YzkwMF9ncGlvX2NoaXAoY2hpcCk7CisJdm9pZCBfX2lvbWVtICpwaW8gPSBudWM5MDBfZ3Bpby0+cmVnYmFzZSArIEdQSU9fSU47CiAJdW5zaWduZWQgaW50IHJlZ3ZhbDsKIAogCXJlZ3ZhbCA9IF9fcmF3X3JlYWRsKHBpbyk7CkBAIC02MywxNCArNjMsMTQgQEAKIAlyZXR1cm4gKHJlZ3ZhbCAhPSAwKTsKIH0KIAotc3RhdGljIHZvaWQgdzkwcDkxMF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCitzdGF0aWMgdm9pZCBudWM5MDBfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQogewotCXN0cnVjdCB3OTBwOTEwX2dwaW9fY2hpcCAqdzkwcDkxMF9ncGlvID0gdG9fdzkwcDkxMF9ncGlvX2NoaXAoY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpwaW8gPSB3OTBwOTEwX2dwaW8tPnJlZ2Jhc2UgKyBHUElPX09VVDsKKwlzdHJ1Y3QgbnVjOTAwX2dwaW9fY2hpcCAqbnVjOTAwX2dwaW8gPSB0b19udWM5MDBfZ3Bpb19jaGlwKGNoaXApOworCXZvaWQgX19pb21lbSAqcGlvID0gbnVjOTAwX2dwaW8tPnJlZ2Jhc2UgKyBHUElPX09VVDsKIAl1bnNpZ25lZCBpbnQgcmVndmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdzkwcDkxMF9ncGlvLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbnVjOTAwX2dwaW8tPmdwaW9fbG9jaywgZmxhZ3MpOwogCiAJcmVndmFsID0gX19yYXdfcmVhZGwocGlvKTsKIApAQCAtODEsMzYgKzgxLDM2IEBACiAKIAlfX3Jhd193cml0ZWwocmVndmFsLCBwaW8pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdzkwcDkxMF9ncGlvLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudWM5MDBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdzkwcDkxMF9kaXJfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQorc3RhdGljIGludCBudWM5MDBfZGlyX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlzdHJ1Y3QgdzkwcDkxMF9ncGlvX2NoaXAgKnc5MHA5MTBfZ3BpbyA9IHRvX3c5MHA5MTBfZ3Bpb19jaGlwKGNoaXApOwotCXZvaWQgX19pb21lbSAqcGlvID0gdzkwcDkxMF9ncGlvLT5yZWdiYXNlICsgR1BJT19ESVI7CisJc3RydWN0IG51YzkwMF9ncGlvX2NoaXAgKm51YzkwMF9ncGlvID0gdG9fbnVjOTAwX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IG51YzkwMF9ncGlvLT5yZWdiYXNlICsgR1BJT19ESVI7CiAJdW5zaWduZWQgaW50IHJlZ3ZhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnc5MHA5MTBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm51YzkwMF9ncGlvLT5ncGlvX2xvY2ssIGZsYWdzKTsKIAogCXJlZ3ZhbCA9IF9fcmF3X3JlYWRsKHBpbyk7CiAJcmVndmFsICY9IH5HUElPX0dQSU8ob2Zmc2V0KTsKIAlfX3Jhd193cml0ZWwocmVndmFsLCBwaW8pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdzkwcDkxMF9ncGlvLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudWM5MDBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3OTBwOTEwX2Rpcl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKQorc3RhdGljIGludCBudWM5MDBfZGlyX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCiB7Ci0Jc3RydWN0IHc5MHA5MTBfZ3Bpb19jaGlwICp3OTBwOTEwX2dwaW8gPSB0b193OTBwOTEwX2dwaW9fY2hpcChjaGlwKTsKLQl2b2lkIF9faW9tZW0gKm91dHJlZyA9IHc5MHA5MTBfZ3Bpby0+cmVnYmFzZSArIEdQSU9fT1VUOwotCXZvaWQgX19pb21lbSAqcGlvID0gdzkwcDkxMF9ncGlvLT5yZWdiYXNlICsgR1BJT19ESVI7CisJc3RydWN0IG51YzkwMF9ncGlvX2NoaXAgKm51YzkwMF9ncGlvID0gdG9fbnVjOTAwX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKm91dHJlZyA9IG51YzkwMF9ncGlvLT5yZWdiYXNlICsgR1BJT19PVVQ7CisJdm9pZCBfX2lvbWVtICpwaW8gPSBudWM5MDBfZ3Bpby0+cmVnYmFzZSArIEdQSU9fRElSOwogCXVuc2lnbmVkIGludCByZWd2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ3OTBwOTEwX2dwaW8tPmdwaW9fbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZudWM5MDBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CiAKIAlyZWd2YWwgPSBfX3Jhd19yZWFkbChwaW8pOwogCXJlZ3ZhbCB8PSBHUElPX0dQSU8ob2Zmc2V0KTsKQEAgLTEyNSwyOCArMTI1LDI4IEBACiAKIAlfX3Jhd193cml0ZWwocmVndmFsLCBvdXRyZWcpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdzkwcDkxMF9ncGlvLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZudWM5MDBfZ3Bpby0+Z3Bpb19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB3OTBwOTEwX2dwaW9fY2hpcCB3OTBwOTEwX2dwaW9bXSA9IHsKLQlXOTBQOTEwX0dQSU9fQ0hJUCgiR1JPVVBDIiwgMCwgMTYpLAotCVc5MFA5MTBfR1BJT19DSElQKCJHUk9VUEQiLCAxNiwgMTApLAotCVc5MFA5MTBfR1BJT19DSElQKCJHUk9VUEUiLCAyNiwgMTQpLAotCVc5MFA5MTBfR1BJT19DSElQKCJHUk9VUEYiLCA0MCwgMTApLAotCVc5MFA5MTBfR1BJT19DSElQKCJHUk9VUEciLCA1MCwgMTcpLAotCVc5MFA5MTBfR1BJT19DSElQKCJHUk9VUEgiLCA2NywgOCksCi0JVzkwUDkxMF9HUElPX0NISVAoIkdST1VQSSIsIDc1LCAxNyksCitzdGF0aWMgc3RydWN0IG51YzkwMF9ncGlvX2NoaXAgbnVjOTAwX2dwaW9bXSA9IHsKKwlOVUM5MDBfR1BJT19DSElQKCJHUk9VUEMiLCAwLCAxNiksCisJTlVDOTAwX0dQSU9fQ0hJUCgiR1JPVVBEIiwgMTYsIDEwKSwKKwlOVUM5MDBfR1BJT19DSElQKCJHUk9VUEUiLCAyNiwgMTQpLAorCU5VQzkwMF9HUElPX0NISVAoIkdST1VQRiIsIDQwLCAxMCksCisJTlVDOTAwX0dQSU9fQ0hJUCgiR1JPVVBHIiwgNTAsIDE3KSwKKwlOVUM5MDBfR1BJT19DSElQKCJHUk9VUEgiLCA2NywgOCksCisJTlVDOTAwX0dQSU9fQ0hJUCgiR1JPVVBJIiwgNzUsIDE3KSwKIH07CiAKLXZvaWQgX19pbml0IHc5MHA5MTBfaW5pdF9ncGlvKGludCBucl9ncm91cCkKK3ZvaWQgX19pbml0IG51YzkwMF9pbml0X2dwaW8oaW50IG5yX2dyb3VwKQogewogCXVuc2lnbmVkCWk7Ci0Jc3RydWN0IHc5MHA5MTBfZ3Bpb19jaGlwICpncGlvX2NoaXA7CisJc3RydWN0IG51YzkwMF9ncGlvX2NoaXAgKmdwaW9fY2hpcDsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9ncm91cDsgaSsrKSB7Ci0JCWdwaW9fY2hpcCA9ICZ3OTBwOTEwX2dwaW9baV07CisJCWdwaW9fY2hpcCA9ICZudWM5MDBfZ3Bpb1tpXTsKIAkJc3Bpbl9sb2NrX2luaXQoJmdwaW9fY2hpcC0+Z3Bpb19sb2NrKTsKIAkJZ3Bpb19jaGlwLT5yZWdiYXNlID0gR1BJT19CQVNFICsgaSAqIEdST1VQSU5FUlY7CiAJCWdwaW9jaGlwX2FkZCgmZ3Bpb19jaGlwLT5jaGlwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKaW5kZXggZjEwYjZhOC4uNTE2ZDZiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKQEAgLTI4LDQgKzI4LDI2IEBACiAjZGVmaW5lIFJFR19DTEtFTjEJKENMS19CQSArIDB4MjQpCiAjZGVmaW5lIFJFR19DTEtESVYxCShDTEtfQkEgKyAweDI4KQogCisvKiBEZWZpbmUgUExMIGZyZXEgc2V0dGluZyAqLworI2RlZmluZSBQTExfRElTQUJMRQkJMHgxMkI2MworI2RlZmluZQlQTExfNjZNSFoJCTB4MkI2MworI2RlZmluZQlQTExfMTAwTUhaCQkweDRGNjQKKyNkZWZpbmUgUExMXzEyME1IWgkJMHg0RjYzCisjZGVmaW5lCVBMTF8xNjZNSFoJCTB4NDEyNAorI2RlZmluZQlQTExfMjAwTUhaCQkweDRGMjQKKworLyogRGVmaW5lIEFIQjpDUFVGUkVRIHJhdGlvICovCisjZGVmaW5lCUFIQl9DUFVDTEtfMV8xCQkweDAwCisjZGVmaW5lCUFIQl9DUFVDTEtfMV8yCQkweDAxCisjZGVmaW5lCUFIQl9DUFVDTEtfMV80CQkweDAyCisjZGVmaW5lCUFIQl9DUFVDTEtfMV84CQkweDAzCisKKy8qIERlZmluZSBBUEI6QUhCIHJhdGlvICovCisjZGVmaW5lIEFQQl9BSEJfMV8yCQkweDAxCisjZGVmaW5lIEFQQl9BSEJfMV80CQkweDAyCisjZGVmaW5lIEFQQl9BSEJfMV84CQkweDAzCisKKy8qIERlZmluZSBjbG9jayBza2V3ICovCisjZGVmaW5lIERFRkFVTFRTS0VXCQkweDQ4CisKICNlbmRpZiAvKiAgX19BU01fQVJDSF9SRUdTX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1lYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjg0NTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9yZWdzLWViaS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtZWJpLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19FQklfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfRUJJX0gKKworLyogRUJJIENvbnRyb2wgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgRUJJX0JBCQlXOTBYOTAwX1ZBX0VCSQorI2RlZmluZSBSRUdfRUJJQ09OCShFQklfQkEgKyAweDAwKQorI2RlZmluZSBSRUdfUk9NQ09OCShFQklfQkEgKyAweDA0KQorI2RlZmluZSBSRUdfU0RDT05GMAkoRUJJX0JBICsgMHgwOCkKKyNkZWZpbmUgUkVHX1NEQ09ORjEJKEVCSV9CQSArIDB4MEMpCisjZGVmaW5lIFJFR19TRFRJTUUwCShFQklfQkEgKyAweDEwKQorI2RlZmluZSBSRUdfU0RUSU1FMQkoRUJJX0JBICsgMHgxNCkKKyNkZWZpbmUgUkVHX0VYVDBDT04JKEVCSV9CQSArIDB4MTgpCisjZGVmaW5lIFJFR19FWFQxQ09OCShFQklfQkEgKyAweDFDKQorI2RlZmluZSBSRUdfRVhUMkNPTgkoRUJJX0JBICsgMHgyMCkKKyNkZWZpbmUgUkVHX0VYVDNDT04JKEVCSV9CQSArIDB4MjQpCisjZGVmaW5lIFJFR19FWFQ0Q09OCShFQklfQkEgKyAweDI4KQorI2RlZmluZSBSRUdfQ0tTS0VXCShFQklfQkEgKyAweDJDKQorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfUkVHU19FQklfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC93OTBwOTEwX2tleXBhZC5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC93OTBwOTEwX2tleXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Njc3OGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3c5MHA5MTBfa2V5cGFkLmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfX0FTTV9BUkNIX1c5MFA5MTBfS0VZUEFEX0gKKyNkZWZpbmUgX19BU01fQVJDSF9XOTBQOTEwX0tFWVBBRF9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CisKK2V4dGVybiB2b2lkIG1mcF9zZXRfZ3JvdXBpKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK3N0cnVjdCB3OTBwOTEwX2tleXBhZF9wbGF0Zm9ybV9kYXRhIHsKKwljb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhICprZXltYXBfZGF0YTsKKworCXVuc2lnbmVkIGludAlwcmVzY2FsZTsKKwl1bnNpZ25lZCBpbnQJZGVib3VuY2U7Cit9OworCisjZW5kaWYgLyogX19BU01fQVJDSF9XOTBQOTEwX0tFWVBBRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaXJxLmMKaW5kZXggMGI0ZmMxOS4uMGNlOWQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pcnEuYwpAQCAtMTAsOCArMTAsNyBAQAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KICAqCiAgKi8KIApAQCAtMjksOSArMjgsMTE0IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KIAotc3RhdGljIHZvaWQgdzkweDkwMF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQorc3RydWN0IGdyb3VwX2lycSB7CisJdW5zaWduZWQgbG9uZwkJZ3BlbjsKKwl1bnNpZ25lZCBpbnQJCWVuYWJsZWQ7CisJdm9pZAkJCSgqZW5hYmxlKShzdHJ1Y3QgZ3JvdXBfaXJxICosIGludCBlbmFibGUpOworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhncm91cGlycV9sb2NrKTsKKworI2RlZmluZSBERUZJTkVfR1JPVVAoX25hbWUsIF9jdHJsYml0LCBfbnVtKQkJCQlcCitzdHJ1Y3QgZ3JvdXBfaXJxIGdyb3VwXyMjX25hbWUgPSB7CQkJCQlcCisJCS5lbmFibGUJCT0gbnVjOTAwX2dyb3VwX2VuYWJsZSwJCQlcCisJCS5ncGVuCQk9ICgoMSA8PCBfbnVtKSAtIDEpIDw8IF9jdHJsYml0LAlcCisJfQorCitzdGF0aWMgdm9pZCBudWM5MDBfZ3JvdXBfZW5hYmxlKHN0cnVjdCBncm91cF9pcnEgKmdwaXJxLCBpbnQgZW5hYmxlKTsKKworc3RhdGljIERFRklORV9HUk9VUChuaXJxMCwgMCwgNCk7CitzdGF0aWMgREVGSU5FX0dST1VQKG5pcnExLCA0LCA0KTsKK3N0YXRpYyBERUZJTkVfR1JPVVAodXNiaCwgOCwgMik7CitzdGF0aWMgREVGSU5FX0dST1VQKG90dGltZXIsIDE2LCAzKTsKK3N0YXRpYyBERUZJTkVfR1JPVVAoZ2RtYSwgMjAsIDIpOworc3RhdGljIERFRklORV9HUk9VUChzYywgMjQsIDIpOworc3RhdGljIERFRklORV9HUk9VUChpMmMsIDI2LCAyKTsKK3N0YXRpYyBERUZJTkVfR1JPVVAocHMyLCAyOCwgMik7CisKK3N0YXRpYyBpbnQgZ3JvdXBfaXJxX2VuYWJsZShzdHJ1Y3QgZ3JvdXBfaXJxICpncm91cF9pcnEpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncm91cGlycV9sb2NrLCBmbGFncyk7CisJaWYgKGdyb3VwX2lycS0+ZW5hYmxlZCsrID09IDApCisJCShncm91cF9pcnEtPmVuYWJsZSkoZ3JvdXBfaXJxLCAxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncm91cGlycV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ3JvdXBfaXJxX2Rpc2FibGUoc3RydWN0IGdyb3VwX2lycSAqZ3JvdXBfaXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlXQVJOX09OKGdyb3VwX2lycS0+ZW5hYmxlZCA9PSAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncm91cGlycV9sb2NrLCBmbGFncyk7CisJaWYgKC0tZ3JvdXBfaXJxLT5lbmFibGVkID09IDApCisJCShncm91cF9pcnEtPmVuYWJsZSkoZ3JvdXBfaXJxLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncm91cGlycV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG51YzkwMF9ncm91cF9lbmFibGUoc3RydWN0IGdyb3VwX2lycSAqZ3BpcnEsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGdyb3VwZW4gPSBncGlycS0+Z3BlbjsKKwl1bnNpZ25lZCBsb25nIHJlZ3ZhbDsKKworCXJlZ3ZhbCA9IF9fcmF3X3JlYWRsKFJFR19BSUNfR0VOKTsKKworCWlmIChlbmFibGUpCisJCXJlZ3ZhbCB8PSBncm91cGVuOworCWVsc2UKKwkJcmVndmFsICY9IH5ncm91cGVuOworCisJX19yYXdfd3JpdGVsKHJlZ3ZhbCwgUkVHX0FJQ19HRU4pOworfQorCitzdGF0aWMgdm9pZCBudWM5MDBfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgZ3JvdXBfaXJxICpncm91cF9pcnE7CisKKwlncm91cF9pcnEgPSBOVUxMOworCiAJX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBSRUdfQUlDX01EQ1IpOworCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIElSUV9HUk9VUDA6CisJCWdyb3VwX2lycSA9ICZncm91cF9uaXJxMDsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9HUk9VUDE6CisJCWdyb3VwX2lycSA9ICZncm91cF9uaXJxMTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9VU0JIOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfdXNiaDsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UX0lOVF9HUk9VUDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX290dGltZXI7CisJCWJyZWFrOworCisJY2FzZSBJUlFfR0RNQUdST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfZ2RtYTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9TQ0dST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfc2M7CisJCWJyZWFrOworCisJY2FzZSBJUlFfSTJDR1JPVVA6CisJCWdyb3VwX2lycSA9ICZncm91cF9pMmM7CisJCWJyZWFrOworCisJY2FzZSBJUlFfUDJTR1JPVVA6CisJCWdyb3VwX2lycSA9ICZncm91cF9wczI7CisJCWJyZWFrOworCX0KKworCWlmIChncm91cF9pcnEpCisJCWdyb3VwX2lycV9kaXNhYmxlKGdyb3VwX2lycSk7CiB9CiAKIC8qCkBAIC0zOSwzNyArMTQzLDcxIEBACiAgKiB0byBSRUdfQUlDX0VPU0NSIGZvciBBQ0sKICAqLwogCi1zdGF0aWMgdm9pZCB3OTB4OTAwX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG51YzkwMF9pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJX19yYXdfd3JpdGVsKDB4MDEsIFJFR19BSUNfRU9TQ1IpOwogfQogCi1zdGF0aWMgdm9pZCB3OTB4OTAwX2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG51YzkwMF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrOworCXN0cnVjdCBncm91cF9pcnEgKmdyb3VwX2lycTsKIAotCWlmIChpcnEgPT0gSVJRX1RfSU5UX0dST1VQKSB7Ci0JCW1hc2sgPSBfX3Jhd19yZWFkbChSRUdfQUlDX0dFTik7Ci0JCV9fcmF3X3dyaXRlbChUSU1FX0dST1VQX0lSUSB8IG1hc2ssIFJFR19BSUNfR0VOKTsKLQkJX19yYXdfd3JpdGVsKDEgPDwgSVJRX1RfSU5UX0dST1VQLCBSRUdfQUlDX01FQ1IpOwotCX0KKwlncm91cF9pcnEgPSBOVUxMOworCiAJX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBSRUdfQUlDX01FQ1IpOworCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIElSUV9HUk9VUDA6CisJCWdyb3VwX2lycSA9ICZncm91cF9uaXJxMDsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9HUk9VUDE6CisJCWdyb3VwX2lycSA9ICZncm91cF9uaXJxMTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9VU0JIOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfdXNiaDsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UX0lOVF9HUk9VUDoKKwkJZ3JvdXBfaXJxID0gJmdyb3VwX290dGltZXI7CisJCWJyZWFrOworCisJY2FzZSBJUlFfR0RNQUdST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfZ2RtYTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9TQ0dST1VQOgorCQlncm91cF9pcnEgPSAmZ3JvdXBfc2M7CisJCWJyZWFrOworCisJY2FzZSBJUlFfSTJDR1JPVVA6CisJCWdyb3VwX2lycSA9ICZncm91cF9pMmM7CisJCWJyZWFrOworCisJY2FzZSBJUlFfUDJTR1JPVVA6CisJCWdyb3VwX2lycSA9ICZncm91cF9wczI7CisJCWJyZWFrOworCX0KKworCWlmIChncm91cF9pcnEpCisJCWdyb3VwX2lycV9lbmFibGUoZ3JvdXBfaXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB3OTB4OTAwX2lycV9jaGlwID0gewotCS5hY2sJICAgPSB3OTB4OTAwX2lycV9hY2ssCi0JLm1hc2sJICAgPSB3OTB4OTAwX2lycV9tYXNrLAotCS51bm1hc2sJICAgPSB3OTB4OTAwX2lycV91bm1hc2ssCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG51YzkwMF9pcnFfY2hpcCA9IHsKKwkuYWNrCSAgID0gbnVjOTAwX2lycV9hY2ssCisJLm1hc2sJICAgPSBudWM5MDBfaXJxX21hc2ssCisJLnVubWFzawkgICA9IG51YzkwMF9pcnFfdW5tYXNrLAogfTsKIAotdm9pZCBfX2luaXQgdzkweDkwMF9pbml0X2lycSh2b2lkKQordm9pZCBfX2luaXQgbnVjOTAwX2luaXRfaXJxKHZvaWQpCiB7CiAJaW50IGlycW5vOwogCiAJX19yYXdfd3JpdGVsKDB4RkZGRkZGRkUsIFJFR19BSUNfTURDUik7CiAKIAlmb3IgKGlycW5vID0gSVJRX1dEVDsgaXJxbm8gPD0gSVJRX0FEQzsgaXJxbm8rKykgewotCQlzZXRfaXJxX2NoaXAoaXJxbm8sICZ3OTB4OTAwX2lycV9jaGlwKTsKKwkJc2V0X2lycV9jaGlwKGlycW5vLCAmbnVjOTAwX2lycV9jaGlwKTsKIAkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2V0X2lycV9mbGFncyhpcnFubywgSVJRRl9WQUxJRCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTEwZXZiLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5MTBldmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA1YmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTEwZXZiLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51YzkxMGV2Yi5jCisgKgorICogQmFzZWQgb24gbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYyBieSBKb25hcyBEaWV0c2NoZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCisgKgorICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSAibnVjOTEwLmgiCisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MTBldmJfbWFwX2lvKHZvaWQpCit7CisJbnVjOTEwX21hcF9pbygpOworCW51YzkxMF9pbml0X2Nsb2NrcygpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTEwZXZiX2luaXQodm9pZCkKK3sKKwludWM5MTBfYm9hcmRfaW5pdCgpOworfQorCitNQUNISU5FX1NUQVJUKFc5MFA5MTBFVkIsICJXOTBQOTEwRVZCIikKKwkvKiBNYWludGFpbmVyOiBXYW4gWm9uZ1NodW4gKi8KKwkucGh5c19pbwk9IFc5MFg5MDBfUEFfVUFSVCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpVzkwWDkwMF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMCwKKwkubWFwX2lvCQk9IG51YzkxMGV2Yl9tYXBfaW8sCisJLmluaXRfaXJxCT0gbnVjOTAwX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBudWM5MTBldmJfaW5pdCwKKwkudGltZXIJCT0gJm51YzkwMF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NTBldmIuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZjkwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NTBldmIuYwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTUwZXZiLmMKKyAqCisgKiBCYXNlZCBvbiBtYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jIGJ5IEpvbmFzIERpZXRzY2hlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlICJudWM5NTAuaCIKKworc3RhdGljIHZvaWQgX19pbml0IG51Yzk1MGV2Yl9tYXBfaW8odm9pZCkKK3sKKwludWM5NTBfbWFwX2lvKCk7CisJbnVjOTUwX2luaXRfY2xvY2tzKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5NTBldmJfaW5pdCh2b2lkKQoreworCW51Yzk1MF9ib2FyZF9pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoVzkwUDk1MEVWQiwgIlc5MFA5NTBFVkIiKQorCS8qIE1haW50YWluZXI6IFdhbiBab25nU2h1biAqLworCS5waHlzX2lvCT0gVzkwWDkwMF9QQV9VQVJULAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilXOTBYOTAwX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAwLAorCS5tYXBfaW8JCT0gbnVjOTUwZXZiX21hcF9pbywKKwkuaW5pdF9pcnEJPSBudWM5MDBfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG51Yzk1MGV2Yl9pbml0LAorCS50aW1lcgkJPSAmbnVjOTAwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk2MGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtbnVjOTYwZXZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhNDZmMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk2MGV2Yi5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NjBldmIuYworICoKKyAqIEJhc2VkIG9uIG1hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYnkgSm9uYXMgRGlldHNjaGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnV2b3RvbiB0ZWNobm9sb2d5IGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgIm51Yzk2MC5oIgorCitzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTYwZXZiX21hcF9pbyh2b2lkKQoreworCW51Yzk2MF9tYXBfaW8oKTsKKwludWM5NjBfaW5pdF9jbG9ja3MoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG51Yzk2MGV2Yl9pbml0KHZvaWQpCit7CisJbnVjOTYwX2JvYXJkX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChXOTBOOTYwRVZCLCAiVzkwTjk2MEVWQiIpCisJLyogTWFpbnRhaW5lcjogV2FuIFpvbmdTaHVuICovCisJLnBoeXNfaW8JPSBXOTBYOTAwX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVc5MFg5MDBfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDAsCisJLm1hcF9pbwkJPSBudWM5NjBldmJfbWFwX2lvLAorCS5pbml0X2lycQk9IG51YzkwMF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbnVjOTYwZXZiX2luaXQsCisJLnRpbWVyCQk9ICZudWM5MDBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTYyYmQzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jCi0gKgotICogQmFzZWQgb24gbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYyBieSBKb25hcyBEaWV0c2NoZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24uCi0gKgotICogV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgImNwdS5oIgotLyp3OTBwOTEwIGV2YiBub3JmbGFzaCBkcml2ZXIgZGF0YSAqLwotCi0jZGVmaW5lIFc5MFA5MTBfRkxBU0hfQkFTRQkweEEwMDAwMDAwCi0jZGVmaW5lIFc5MFA5MTBfRkxBU0hfU0laRQkweDQwMDAwMAotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gdzkwcDkxMF9mbGFzaF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDEgZm9yIGtlcm5lbCAoOTYwSykiLAotCQkuc2l6ZQk9CTB4RjAwMDAsCi0JCS5vZmZzZXQJPQkweDEwMDAwLAotCX0sCi0JewotCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDIgZm9yIGltYWdlICgxTSkiLAotCQkuc2l6ZQk9CTB4MTAwMDAwLAotCQkub2Zmc2V0CT0JMHgxMDAwMDAsCi0JfSwKLQl7Ci0JCS5uYW1lCT0JIk5PUiBQYXJ0aXRpb24gMyBmb3IgdXNlciAoMk0pIiwKLQkJLnNpemUJPQkweDIwMDAwMCwKLQkJLm9mZnNldAk9CTB4MDAyMDAwMDAsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdzkwcDkxMF9mbGFzaF9kYXRhID0gewotCS53aWR0aAkJPQkyLAotCS5wYXJ0cwkJPQl3OTBwOTEwX2ZsYXNoX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0JQVJSQVlfU0laRSh3OTBwOTEwX2ZsYXNoX3BhcnRpdGlvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTBwOTEwX2ZsYXNoX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0JVzkwUDkxMF9GTEFTSF9CQVNFLAotCQkuZW5kCT0JVzkwUDkxMF9GTEFTSF9CQVNFICsgVzkwUDkxMF9GTEFTSF9TSVpFIC0gMSwKLQkJLmZsYWdzCT0JSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkwcDkxMF9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0JInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPQkwLAotCS5kZXYJCT0gewotCQkJCS5wbGF0Zm9ybV9kYXRhID0gJnc5MHA5MTBfZmxhc2hfZGF0YSwKLQkJCX0sCi0JLnJlc291cmNlCT0JdzkwcDkxMF9mbGFzaF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMJPQlBUlJBWV9TSVpFKHc5MHA5MTBfZmxhc2hfcmVzb3VyY2VzKSwKLX07Ci0KLS8qIFVTQiBFSENJIEhvc3QgQ29udHJvbGxlciAqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHc5MHg5MDBfdXNiX2VoY2lfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFc5MFg5MDBfUEFfVVNCRUhDSUhPU1QsCi0JCS5lbmQgICA9IFc5MFg5MDBfUEFfVVNCRUhDSUhPU1QgKyBXOTBYOTAwX1NaX1VTQkVIQ0lIT1NUIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9VU0JILAotCQkuZW5kICAgPSBJUlFfVVNCSCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RhdGljIHU2NCB3OTB4OTAwX2RldmljZV91c2JfZWhjaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHg5MDBfZGV2aWNlX3VzYl9laGNpID0gewotCS5uYW1lCQkgID0gInc5MHg5MDAtZWhjaSIsCi0JLmlkCQkgID0gLTEsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUodzkweDkwMF91c2JfZWhjaV9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSB3OTB4OTAwX3VzYl9laGNpX3Jlc291cmNlLAotCS5kZXYgICAgICAgICAgICAgID0gewotCQkuZG1hX21hc2sgPSAmdzkweDkwMF9kZXZpY2VfdXNiX2VoY2lfZG1hbWFzaywKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZlVMCi0JfQotfTsKLUVYUE9SVF9TWU1CT0wodzkweDkwMF9kZXZpY2VfdXNiX2VoY2kpOwotCi0vKiBVU0IgT0hDSSBIb3N0IENvbnRyb2xsZXIgKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTB4OTAwX3VzYl9vaGNpX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBXOTBYOTAwX1BBX1VTQk9IQ0lIT1NULAotCQkuZW5kICAgPSBXOTBYOTAwX1BBX1VTQk9IQ0lIT1NUICsgVzkwWDkwMF9TWl9VU0JPSENJSE9TVCAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfVVNCSCwKLQkJLmVuZCAgID0gSVJRX1VTQkgsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyB1NjQgdzkweDkwMF9kZXZpY2VfdXNiX29oY2lfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkweDkwMF9kZXZpY2VfdXNiX29oY2kgPSB7Ci0JLm5hbWUJCSAgPSAidzkweDkwMC1vaGNpIiwKLQkuaWQJCSAgPSAtMSwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRSh3OTB4OTAwX3VzYl9vaGNpX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHc5MHg5MDBfdXNiX29oY2lfcmVzb3VyY2UsCi0JLmRldiAgICAgICAgICAgICAgPSB7Ci0JCS5kbWFfbWFzayA9ICZ3OTB4OTAwX2RldmljZV91c2Jfb2hjaV9kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKLQl9Ci19OwotRVhQT1JUX1NZTUJPTCh3OTB4OTAwX2RldmljZV91c2Jfb2hjaSk7Ci0KLS8qVG91Y2hTY3JlZW4gY29udHJvbGxlciovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdzkweDkwMF90c19yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9BREMsCi0JCS5lbmQgICA9IFc5MFg5MDBfUEFfQURDICsgVzkwWDkwMF9TWl9BREMtMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9BREMsCi0JCS5lbmQgICA9IElSUV9BREMsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHg5MDBfZGV2aWNlX3RzID0gewotCS5uYW1lCQk9ICJ3OTB4OTAwLXRzIiwKLQkuaWQJCT0gLTEsCi0JLnJlc291cmNlCT0gdzkweDkwMF90c19yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodzkweDkwMF90c19yZXNvdXJjZSksCi19OwotRVhQT1JUX1NZTUJPTCh3OTB4OTAwX2RldmljZV90cyk7Ci0KLS8qIFJUQyBjb250cm9sbGVyKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTB4OTAwX3J0Y19yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9SVEMsCi0JCS5lbmQgICA9IFc5MFg5MDBfUEFfUlRDICsgMHhmZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9SVEMsCi0JCS5lbmQgICA9IElSUV9SVEMsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHg5MDBfZGV2aWNlX3J0YyA9IHsKLQkubmFtZQkJPSAidzkweDkwMC1ydGMiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodzkweDkwMF9ydGNfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQk9IHc5MHg5MDBfcnRjX3Jlc291cmNlLAotfTsKLUVYUE9SVF9TWU1CT0wodzkweDkwMF9kZXZpY2VfcnRjKTsKLQotLyogS1BJIGNvbnRyb2xsZXIqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHc5MHg5MDBfa3BpX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBXOTBYOTAwX1BBX0tQSSwKLQkJLmVuZCAgID0gVzkwWDkwMF9QQV9LUEkgKyBXOTBYOTAwX1NaX0tQSSAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfS1BJLAotCQkuZW5kICAgPSBJUlFfS1BJLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkweDkwMF9kZXZpY2Vfa3BpID0gewotCS5uYW1lCQk9ICJ3OTB4OTAwLWtwaSIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3OTB4OTAwX2twaV9yZXNvdXJjZSksCi0JLnJlc291cmNlCT0gdzkweDkwMF9rcGlfcmVzb3VyY2UsCi19OwotRVhQT1JUX1NZTUJPTCh3OTB4OTAwX2RldmljZV9rcGkpOwotCi0vKiBVU0IgRGV2aWNlIChHYWRnZXQpKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTB4OTAwX3VzYmdhZGdldF9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gVzkwWDkwMF9QQV9VU0JERVYsCi0JCS5lbmQgICA9IFc5MFg5MDBfUEFfVVNCREVWICsgVzkwWDkwMF9TWl9VU0JERVYgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX1VTQkQsCi0JCS5lbmQgICA9IElSUV9VU0JELAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHg5MDBfZGV2aWNlX3VzYmdhZGdldCA9IHsKLQkubmFtZQkJPSAidzkweDkwMC11c2JnYWRnZXQiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodzkweDkwMF91c2JnYWRnZXRfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQk9IHc5MHg5MDBfdXNiZ2FkZ2V0X3Jlc291cmNlLAotfTsKLUVYUE9SVF9TWU1CT0wodzkweDkwMF9kZXZpY2VfdXNiZ2FkZ2V0KTsKLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB3OTBwOTEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci19OwotCi0vKkhlcmUgc2hvdWxkIGJlIHlvdXIgZXZiIHJlc291cnNlLHN1Y2ggYXMgTENEKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnc5MHA5MTBldmJfZGV2W10gX19pbml0ZGF0YSA9IHsKLQkmdzkwcDkxMF9zZXJpYWxfZGV2aWNlLAotCSZ3OTBwOTEwX2ZsYXNoX2RldmljZSwKLQkmdzkweDkwMF9kZXZpY2VfdXNiX2VoY2ksCi0JJnc5MHg5MDBfZGV2aWNlX3VzYl9vaGNpLAotCSZ3OTB4OTAwX2RldmljZV90cywKLQkmdzkweDkwMF9kZXZpY2VfcnRjLAotCSZ3OTB4OTAwX2RldmljZV9rcGksCi0JJnc5MHg5MDBfZGV2aWNlX3VzYmdhZGdldCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCB3OTBwOTEwZXZiX21hcF9pbyh2b2lkKQotewotCXc5MHA5MTBfbWFwX2lvKHc5MHA5MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHc5MHA5MTBfaW9kZXNjKSk7Ci0JdzkwcDkxMF9pbml0X2Nsb2NrcygpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9pbml0KHZvaWQpCi17Ci0JcGxhdGZvcm1fYWRkX2RldmljZXModzkwcDkxMGV2Yl9kZXYsIEFSUkFZX1NJWkUodzkwcDkxMGV2Yl9kZXYpKTsKLX0KLQotTUFDSElORV9TVEFSVChXOTBQOTEwRVZCLCAiVzkwUDkxMEVWQiIpCi0JLyogTWFpbnRhaW5lcjogV2FuIFpvbmdTaHVuICovCi0JLnBoeXNfaW8JPSBXOTBYOTAwX1BBX1VBUlQsCi0JLmlvX3BnX29mZnN0CT0gKCgodTMyKVc5MFg5MDBfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IDAsCi0JLm1hcF9pbwkJPSB3OTBwOTEwZXZiX21hcF9pbywKLQkuaW5pdF9pcnEJPSB3OTB4OTAwX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUJPSB3OTBwOTEwZXZiX2luaXQsCi0JLnRpbWVyCQk9ICZ3OTB4OTAwX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tZnAtdzkwcDkxMC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21mcC13OTBwOTEwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTIwZmUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21mcC13OTBwOTEwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9tZnAtdzkwcDkxMC5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgotICoKLSAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLSNkZWZpbmUgUkVHX01GU0VMCShXOTBYOTAwX1ZBX0dDUiArIDB4QykKLQotI2RlZmluZSBHUFNFTEYJCSgweDAxIDw8IDEpCi0KLSNkZWZpbmUgR1BTRUxDCQkoMHgwMyA8PCAyKQotI2RlZmluZSBFTktQSQkJKDB4MDIgPDwgMikKLSNkZWZpbmUgRU5OQU5ECQkoMHgwMSA8PCAyKQotCi0jZGVmaW5lIEdQU0VMRUkwCSgweDAxIDw8IDI2KQotI2RlZmluZSBHUFNFTEVJMQkoMHgwMSA8PCAyNykKLQotc3RhdGljIERFQ0xBUkVfTVVURVgobWZwX3NlbSk7Ci0KLXZvaWQgbWZwX3NldF9ncm91cGYoc3RydWN0IGRldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgbWZwZW47Ci0JY29uc3QgY2hhciAqZGV2X2lkOwotCi0JQlVHX09OKCFkZXYpOwotCi0JZG93bigmbWZwX3NlbSk7Ci0KLQlkZXZfaWQgPSBkZXZfbmFtZShkZXYpOwotCi0JbWZwZW4gPSBfX3Jhd19yZWFkbChSRUdfTUZTRUwpOwotCi0JaWYgKHN0cmNtcChkZXZfaWQsICJ3OTBwOTEwLWVtYyIpID09IDApCi0JCW1mcGVuIHw9IEdQU0VMRjsvKmVuYWJsZSBtYWMqLwotCWVsc2UKLQkJbWZwZW4gJj0gfkdQU0VMRjsvKkdQSU9GWzk6MF0qLwotCi0JX19yYXdfd3JpdGVsKG1mcGVuLCBSRUdfTUZTRUwpOwotCi0JdXAoJm1mcF9zZW0pOwotfQotRVhQT1JUX1NZTUJPTChtZnBfc2V0X2dyb3VwZik7Ci0KLXZvaWQgbWZwX3NldF9ncm91cGMoc3RydWN0IGRldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgbWZwZW47Ci0JY29uc3QgY2hhciAqZGV2X2lkOwotCi0JQlVHX09OKCFkZXYpOwotCi0JZG93bigmbWZwX3NlbSk7Ci0KLQlkZXZfaWQgPSBkZXZfbmFtZShkZXYpOwotCi0JbWZwZW4gPSBfX3Jhd19yZWFkbChSRUdfTUZTRUwpOwotCi0JaWYgKHN0cmNtcChkZXZfaWQsICJ3OTBwOTEwLWxjZCIpID09IDApCi0JCW1mcGVuIHw9IEdQU0VMQzsvKmVuYWJsZSBsY2QqLwotCWVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJ3OTBwOTEwLWtwaSIpID09IDApIHsKLQkJCW1mcGVuICY9ICh+R1BTRUxDKTsvKmVuYWJsZSBrcGkqLwotCQkJbWZwZW4gfD0gRU5LUEk7Ci0JCX0gZWxzZSBpZiAoc3RyY21wKGRldl9pZCwgInc5MHA5MTAtbmFuZCIpID09IDApIHsKLQkJCQltZnBlbiAmPSAofkdQU0VMQyk7LyplbmFibGUgbmFuZCovCi0JCQkJbWZwZW4gfD0gRU5OQU5EOwotCQkJfSBlbHNlCi0JCQkJbWZwZW4gJj0gKH5HUFNFTEMpOy8qR1BJT0NbMTQ6MF0qLwotCi0JX19yYXdfd3JpdGVsKG1mcGVuLCBSRUdfTUZTRUwpOwotCi0JdXAoJm1mcF9zZW0pOwotfQotRVhQT1JUX1NZTUJPTChtZnBfc2V0X2dyb3VwYyk7Ci0KLXZvaWQgbWZwX3NldF9ncm91cGkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZ3BpbykKLXsKLQl1bnNpZ25lZCBsb25nIG1mcGVuOwotCWNvbnN0IGNoYXIgKmRldl9pZDsKLQotCUJVR19PTighZGV2KTsKLQotCWRvd24oJm1mcF9zZW0pOwotCi0JZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKLQotCW1mcGVuID0gX19yYXdfcmVhZGwoUkVHX01GU0VMKTsKLQotCWlmIChzdHJjbXAoZGV2X2lkLCAidzkwcDkxMC13ZG9nIikgPT0gMCkKLQkJbWZwZW4gfD0gR1BTRUxFSTE7LyplbmFibGUgd2RvZyovCi0JCWVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJ3OTBwOTEwLWF0YXBpIikgPT0gMCkKLQkJCW1mcGVuIHw9IEdQU0VMRUkwOy8qZW5hYmxlIGF0YXBpKi8KLQotCV9fcmF3X3dyaXRlbChtZnBlbiwgUkVHX01GU0VMKTsKLQotCXVwKCZtZnBfc2VtKTsKLX0KLUVYUE9SVF9TWU1CT0wobWZwX3NldF9ncm91cGkpOwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWZwLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWZwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3ZGM5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tZnAuYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9tZnAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIFJFR19NRlNFTAkoVzkwWDkwMF9WQV9HQ1IgKyAweEMpCisKKyNkZWZpbmUgR1BTRUxGCQkoMHgwMSA8PCAxKQorCisjZGVmaW5lIEdQU0VMQwkJKDB4MDMgPDwgMikKKyNkZWZpbmUgRU5LUEkJCSgweDAyIDw8IDIpCisjZGVmaW5lIEVOTkFORAkJKDB4MDEgPDwgMikKKworI2RlZmluZSBHUFNFTEVJMAkoMHgwMSA8PCAyNikKKyNkZWZpbmUgR1BTRUxFSTEJKDB4MDEgPDwgMjcpCisKKyNkZWZpbmUgR1BJT0cwVE8xCSgweDAzIDw8IDE0KQorI2RlZmluZSBHUElPRzJUTzMJKDB4MDMgPDwgMTYpCisjZGVmaW5lIEVOU1BJCQkoMHgwYSA8PCAxNCkKKyNkZWZpbmUgRU5JMkMwCQkoMHgwMSA8PCAxNCkKKyNkZWZpbmUgRU5JMkMxCQkoMHgwMSA8PCAxNikKKworc3RhdGljIERFRklORV9NVVRFWChtZnBfbXV0ZXgpOworCit2b2lkIG1mcF9zZXRfZ3JvdXBmKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIG1mcGVuOworCWNvbnN0IGNoYXIgKmRldl9pZDsKKworCUJVR19PTighZGV2KTsKKworCW11dGV4X2xvY2soJm1mcF9tdXRleCk7CisKKwlkZXZfaWQgPSBkZXZfbmFtZShkZXYpOworCisJbWZwZW4gPSBfX3Jhd19yZWFkbChSRUdfTUZTRUwpOworCisJaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAtZW1jIikgPT0gMCkKKwkJbWZwZW4gfD0gR1BTRUxGOy8qZW5hYmxlIG1hYyovCisJZWxzZQorCQltZnBlbiAmPSB+R1BTRUxGOy8qR1BJT0ZbOTowXSovCisKKwlfX3Jhd193cml0ZWwobWZwZW4sIFJFR19NRlNFTCk7CisKKwltdXRleF91bmxvY2soJm1mcF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKG1mcF9zZXRfZ3JvdXBmKTsKKwordm9pZCBtZnBfc2V0X2dyb3VwYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBtZnBlbjsKKwljb25zdCBjaGFyICpkZXZfaWQ7CisKKwlCVUdfT04oIWRldik7CisKKwltdXRleF9sb2NrKCZtZnBfbXV0ZXgpOworCisJZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKKworCW1mcGVuID0gX19yYXdfcmVhZGwoUkVHX01GU0VMKTsKKworCWlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWxjZCIpID09IDApCisJCW1mcGVuIHw9IEdQU0VMQzsvKmVuYWJsZSBsY2QqLworCWVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAta3BpIikgPT0gMCkgeworCQltZnBlbiAmPSAofkdQU0VMQyk7LyplbmFibGUga3BpKi8KKwkJbWZwZW4gfD0gRU5LUEk7CisJfSBlbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLW5hbmQiKSA9PSAwKSB7CisJCW1mcGVuICY9ICh+R1BTRUxDKTsvKmVuYWJsZSBuYW5kKi8KKwkJbWZwZW4gfD0gRU5OQU5EOworCX0gZWxzZQorCQltZnBlbiAmPSAofkdQU0VMQyk7LypHUElPQ1sxNDowXSovCisKKwlfX3Jhd193cml0ZWwobWZwZW4sIFJFR19NRlNFTCk7CisKKwltdXRleF91bmxvY2soJm1mcF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKG1mcF9zZXRfZ3JvdXBjKTsKKwordm9pZCBtZnBfc2V0X2dyb3VwaShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBtZnBlbjsKKwljb25zdCBjaGFyICpkZXZfaWQ7CisKKwlCVUdfT04oIWRldik7CisKKwltdXRleF9sb2NrKCZtZnBfbXV0ZXgpOworCisJZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKKworCW1mcGVuID0gX19yYXdfcmVhZGwoUkVHX01GU0VMKTsKKworCW1mcGVuICY9IH5HUFNFTEVJMTsvKmRlZmF1bHQgZ3BpbzE2Ki8KKworCWlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLXdkb2ciKSA9PSAwKQorCQltZnBlbiB8PSBHUFNFTEVJMTsvKmVuYWJsZSB3ZG9nKi8KKwllbHNlIGlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLWF0YXBpIikgPT0gMCkKKwkJbWZwZW4gfD0gR1BTRUxFSTA7LyplbmFibGUgYXRhcGkqLworCWVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAta2V5cGFkIikgPT0gMCkKKwkJbWZwZW4gJj0gfkdQU0VMRUkwOy8qZW5hYmxlIGtleXBhZCovCisKKwlfX3Jhd193cml0ZWwobWZwZW4sIFJFR19NRlNFTCk7CisKKwltdXRleF91bmxvY2soJm1mcF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MKG1mcF9zZXRfZ3JvdXBpKTsKKwordm9pZCBtZnBfc2V0X2dyb3VwZyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBtZnBlbjsKKwljb25zdCBjaGFyICpkZXZfaWQ7CisKKwlCVUdfT04oIWRldik7CisKKwltdXRleF9sb2NrKCZtZnBfbXV0ZXgpOworCisJZGV2X2lkID0gZGV2X25hbWUoZGV2KTsKKworCW1mcGVuID0gX19yYXdfcmVhZGwoUkVHX01GU0VMKTsKKworCWlmIChzdHJjbXAoZGV2X2lkLCAibnVjOTAwLXNwaSIpID09IDApIHsKKwkJbWZwZW4gJj0gfihHUElPRzBUTzEgfCBHUElPRzJUTzMpOworCQltZnBlbiB8PSBFTlNQSTsvKmVuYWJsZSBzcGkqLworCX0gZWxzZSBpZiAoc3RyY21wKGRldl9pZCwgIm51YzkwMC1pMmMwIikgPT0gMCkgeworCQltZnBlbiAmPSB+KEdQSU9HMFRPMSk7CisJCW1mcGVuIHw9IEVOSTJDMDsvKmVuYWJsZSBpMmMwKi8KKwl9IGVsc2UgaWYgKHN0cmNtcChkZXZfaWQsICJudWM5MDAtaTJjMSIpID09IDApIHsKKwkJbWZwZW4gJj0gfihHUElPRzJUTzMpOworCQltZnBlbiB8PSBFTkkyQzE7LyplbmFibGUgaTJjMSovCisJfSBlbHNlIHsKKwkJbWZwZW4gJj0gfihHUElPRzBUTzEgfCBHUElPRzJUTzMpOy8qR1BJT0dbMzowXSovCisJfQorCisJX19yYXdfd3JpdGVsKG1mcGVuLCBSRUdfTUZTRUwpOworCisJbXV0ZXhfdW5sb2NrKCZtZnBfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTChtZnBfc2V0X2dyb3VwZyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5MTAuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZmMDNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251YzkxMC5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTEwLmMKKyAqCisgKiBCYXNlZCBvbiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jIGJ5IEJlbiBEb29rcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIGNvcnBvcmF0aW9uLgorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBOVUM5MTAgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKy8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpudWM5MTBfZGV2W10gX19pbml0ZGF0YSA9IHsKKwkmbnVjOTAwX2RldmljZV90cywKKwkmbnVjOTAwX2RldmljZV9ydGMsCit9OworCisvKiBkZWZpbmUgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGlvIG1hcCAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG51YzkxMGV2Yl9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCUlPREVTQ19FTlQoVVNCRUhDSUhPU1QpLAorCUlPREVTQ19FTlQoVVNCT0hDSUhPU1QpLAorCUlPREVTQ19FTlQoS1BJKSwKKwlJT0RFU0NfRU5UKFVTQkRFViksCisJSU9ERVNDX0VOVChBREMpLAorfTsKKworLypJbml0IE5VQzkxMCBldmIgaW8qLworCit2b2lkIF9faW5pdCBudWM5MTBfbWFwX2lvKHZvaWQpCit7CisJbnVjOTAwX21hcF9pbyhudWM5MTBldmJfaW9kZXNjLCBBUlJBWV9TSVpFKG51YzkxMGV2Yl9pb2Rlc2MpKTsKK30KKworLypJbml0IE5VQzkxMCBjbG9jayovCisKK3ZvaWQgX19pbml0IG51YzkxMF9pbml0X2Nsb2Nrcyh2b2lkKQoreworCW51YzkwMF9pbml0X2Nsb2NrcygpOworfQorCisvKkluaXQgTlVDOTEwIGJvYXJkIGluZm8qLworCit2b2lkIF9faW5pdCBudWM5MTBfYm9hcmRfaW5pdCh2b2lkKQoreworCW51YzkwMF9ib2FyZF9pbml0KG51YzkxMF9kZXYsIEFSUkFZX1NJWkUobnVjOTEwX2RldikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251YzkxMC5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251YzkxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTliYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTEwLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5MTAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIGNvcnBvcmF0aW9uCisgKgorICogSGVhZGVyIGZpbGUgZm9yIE5VQzkwMCBDUFUgc3VwcG9ydAorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCitzdHJ1Y3QgbWFwX2Rlc2M7CitzdHJ1Y3Qgc3lzX3RpbWVyOworCisvKiBjb3JlIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCBudWM5MDBfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBudWM5MDBfdGltZXI7CisKKy8qIGV4dGVybiBmaWxlIGZyb20gbnVjOTEwLmMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTEwX2JvYXJkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBudWM5MTBfaW5pdF9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBudWM5MTBfbWFwX2lvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OTUwODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTUwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuYworICoKKyAqIEJhc2VkIG9uIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMgYnkgQmVuIERvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogTlVDOTUwIGNwdSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJjcHUuaCIKKworLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBkZXZpY2UgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm51Yzk1MF9kZXZbXSBfX2luaXRkYXRhID0geworCSZudWM5MDBfZGV2aWNlX2twaSwKKwkmbnVjOTAwX2RldmljZV9mbWksCit9OworCisvKiBkZWZpbmUgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGlvIG1hcCAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG51Yzk1MGV2Yl9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworfTsKKworLypJbml0IE5VQzk1MCBldmIgaW8qLworCit2b2lkIF9faW5pdCBudWM5NTBfbWFwX2lvKHZvaWQpCit7CisJbnVjOTAwX21hcF9pbyhudWM5NTBldmJfaW9kZXNjLCBBUlJBWV9TSVpFKG51Yzk1MGV2Yl9pb2Rlc2MpKTsKK30KKworLypJbml0IE5VQzk1MCBjbG9jayovCisKK3ZvaWQgX19pbml0IG51Yzk1MF9pbml0X2Nsb2Nrcyh2b2lkKQoreworCW51YzkwMF9pbml0X2Nsb2NrcygpOworfQorCisvKkluaXQgTlVDOTUwIGJvYXJkIGluZm8qLworCit2b2lkIF9faW5pdCBudWM5NTBfYm9hcmRfaW5pdCh2b2lkKQoreworCW51YzkwMF9ib2FyZF9pbml0KG51Yzk1MF9kZXYsIEFSUkFZX1NJWkUobnVjOTUwX2RldikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YTExNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTUwLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIGNvcnBvcmF0aW9uCisgKgorICogSGVhZGVyIGZpbGUgZm9yIE5VQzkwMCBDUFUgc3VwcG9ydAorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCitzdHJ1Y3QgbWFwX2Rlc2M7CitzdHJ1Y3Qgc3lzX3RpbWVyOworCisvKiBjb3JlIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCBudWM5MDBfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBudWM5MDBfdGltZXI7CisKKy8qIGV4dGVybiBmaWxlIGZyb20gbnVjOTUwLmMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTUwX2JvYXJkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBudWM5NTBfaW5pdF9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBudWM5NTBfbWFwX2lvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk2MC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk2MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NTFhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTYwLmMKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NjAuYworICoKKyAqIEJhc2VkIG9uIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMgYnkgQmVuIERvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogTlVDOTYwIGNwdSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlICJjcHUuaCIKKworLyogZGVmaW5lIHNwZWNpZmljIENQVSBwbGF0Zm9ybSBkZXZpY2UgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm51Yzk2MF9kZXZbXSBfX2luaXRkYXRhID0geworCSZudWM5MDBfZGV2aWNlX2twaSwKKwkmbnVjOTAwX2RldmljZV9mbWksCit9OworCisvKiBkZWZpbmUgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGlvIG1hcCAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG51Yzk2MGV2Yl9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworfTsKKworLypJbml0IE5VQzk2MCBldmIgaW8qLworCit2b2lkIF9faW5pdCBudWM5NjBfbWFwX2lvKHZvaWQpCit7CisJbnVjOTAwX21hcF9pbyhudWM5NjBldmJfaW9kZXNjLCBBUlJBWV9TSVpFKG51Yzk2MGV2Yl9pb2Rlc2MpKTsKK30KKworLypJbml0IE5VQzk2MCBjbG9jayovCisKK3ZvaWQgX19pbml0IG51Yzk2MF9pbml0X2Nsb2Nrcyh2b2lkKQoreworCW51YzkwMF9pbml0X2Nsb2NrcygpOworfQorCisvKkluaXQgTlVDOTYwIGJvYXJkIGluZm8qLworCit2b2lkIF9faW5pdCBudWM5NjBfYm9hcmRfaW5pdCh2b2lkKQoreworCW51YzkwMF9ib2FyZF9pbml0KG51Yzk2MF9kZXYsIEFSUkFZX1NJWkUobnVjOTYwX2RldikpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk2MC5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYzA3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTYwLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NjAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIGNvcnBvcmF0aW9uCisgKgorICogSGVhZGVyIGZpbGUgZm9yIE5VQzkwMCBDUFUgc3VwcG9ydAorICoKKyAqIFdhbiBab25nU2h1biA8bWN1b3MuY29tQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCitzdHJ1Y3QgbWFwX2Rlc2M7CitzdHJ1Y3Qgc3lzX3RpbWVyOworCisvKiBjb3JlIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCBudWM5MDBfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBudWM5MDBfdGltZXI7CisKKy8qIGV4dGVybiBmaWxlIGZyb20gbnVjOTYwLmMgKi8KKworZXh0ZXJuIHZvaWQgbnVjOTYwX2JvYXJkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBudWM5NjBfaW5pdF9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBudWM5NjBfbWFwX2lvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC90aW1lLmMKaW5kZXggYmNjODM4Zi4uNDEyOGFmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdGltZS5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIEJhc2VkIG9uIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC90aW1lLmMgYnkgQmVuIERvb2tzCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA5IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpAQCAtMzEsNDkgKzMzLDE1MCBAQAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXRpbWVyLmg+CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHc5MHg5MDBfZ2V0dGltZW9mZnNldCh2b2lkKQorI2RlZmluZSBSRVNFVElOVAkweDFmCisjZGVmaW5lIFBFUklPRAkJKDB4MDEgPDwgMjcpCisjZGVmaW5lIE9ORVNIT1QJCSgweDAwIDw8IDI3KQorI2RlZmluZSBDT1VOVEVOCQkoMHgwMSA8PCAzMCkKKyNkZWZpbmUgSU5URU4JCSgweDAxIDw8IDI5KQorCisjZGVmaW5lIFRJQ0tTX1BFUl9TRUMJMTAwCisjZGVmaW5lIFBSRVNDQUxFCTB4NjMgLyogRGl2aWRlciA9IHByZXNjYWxlICsgMSAqLworCit1bnNpZ25lZCBpbnQgdGltZXIwX2xvYWQ7CisKK3N0YXRpYyB2b2lkIG51YzkwMF9jbG9ja2V2ZW50X3NldG1vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKIHsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gX19yYXdfcmVhZGwoUkVHX1RDU1IwKTsKKwl2YWwgJj0gfigweDAzIDw8IDI3KTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCV9fcmF3X3dyaXRlbCh0aW1lcjBfbG9hZCwgUkVHX1RJQ1IwKTsKKwkJdmFsIHw9IChQRVJJT0QgfCBDT1VOVEVOIHwgSU5URU4gfCBQUkVTQ0FMRSk7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQl2YWwgfD0gKE9ORVNIT1QgfCBDT1VOVEVOIHwgSU5URU4gfCBQUkVTQ0FMRSk7CisJCWJyZWFrOworCisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJYnJlYWs7CisJfQorCisJX19yYXdfd3JpdGVsKHZhbCwgUkVHX1RDU1IwKTsKK30KKworc3RhdGljIGludCBudWM5MDBfY2xvY2tldmVudF9zZXRuZXh0ZXZlbnQodW5zaWduZWQgbG9uZyBldnQsCisJCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsaykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJX19yYXdfd3JpdGVsKGV2dCwgUkVHX1RJQ1IwKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFJFR19UQ1NSMCk7CisJdmFsIHw9IChDT1VOVEVOIHwgSU5URU4gfCBQUkVTQ0FMRSk7CisJX19yYXdfd3JpdGVsKHZhbCwgUkVHX1RDU1IwKTsKKwogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBudWM5MDBfY2xvY2tldmVudF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm51YzkwMC10aW1lcjAiLAorCS5zaGlmdAkJPSAzMiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNldF9tb2RlCT0gbnVjOTAwX2Nsb2NrZXZlbnRfc2V0bW9kZSwKKwkuc2V0X25leHRfZXZlbnQJPSBudWM5MDBfY2xvY2tldmVudF9zZXRuZXh0ZXZlbnQsCisJLnJhdGluZwkJPSAzMDAsCit9OworCiAvKklSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIqLwogCi1zdGF0aWMgaXJxcmV0dXJuX3QKLXc5MHg5MDBfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBudWM5MDBfdGltZXIwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JdGltZXJfdGljaygpOworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCA9ICZudWM5MDBfY2xvY2tldmVudF9kZXZpY2U7CisKIAlfX3Jhd193cml0ZWwoMHgwMSwgUkVHX1RJU1IpOyAvKiBjbGVhciBUSUYwICovCisKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHc5MHg5MDBfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJ3OTB4OTAwIFRpbWVyIFRpY2siLAorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gbnVjOTAwX3RpbWVyMF9pcnEgPSB7CisJLm5hbWUJCT0gIm51YzkwMC10aW1lcjAiLAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiB8IElSUUZfSVJRUE9MTCwKLQkuaGFuZGxlcgk9IHc5MHg5MDBfdGltZXJfaW50ZXJydXB0LAorCS5oYW5kbGVyCT0gbnVjOTAwX3RpbWVyMF9pbnRlcnJ1cHQsCiB9OwogCi0vKlNldCB1cCB0aW1lciByZWcuKi8KLQotc3RhdGljIHZvaWQgdzkweDkwMF90aW1lcl9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG51YzkwMF9jbG9ja2V2ZW50c19pbml0KHVuc2lnbmVkIGludCByYXRlKQogewotCV9fcmF3X3dyaXRlbCgwLCBSRUdfVENTUjApOwotCV9fcmF3X3dyaXRlbCgwLCBSRUdfVENTUjEpOwotCV9fcmF3X3dyaXRlbCgwLCBSRUdfVENTUjIpOwotCV9fcmF3X3dyaXRlbCgwLCBSRUdfVENTUjMpOwotCV9fcmF3X3dyaXRlbCgwLCBSRUdfVENTUjQpOwotCV9fcmF3X3dyaXRlbCgweDFGLCBSRUdfVElTUik7Ci0JX19yYXdfd3JpdGVsKDE1MDAwMDAwLygxMDAgKiAxMDApLCBSRUdfVElDUjApOwotCV9fcmF3X3dyaXRlbCgweDY4MDAwMDYzLCBSRUdfVENTUjApOworCW51YzkwMF9jbG9ja2V2ZW50X2RldmljZS5tdWx0ID0gZGl2X3NjKHJhdGUsIE5TRUNfUEVSX1NFQywKKwkJCQkJbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlLnNoaWZ0KTsKKwludWM5MDBfY2xvY2tldmVudF9kZXZpY2UubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGZmZmZmZmZmLAorCQkJCQkmbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlKTsKKwludWM5MDBfY2xvY2tldmVudF9kZXZpY2UubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweGYsCisJCQkJCSZudWM5MDBfY2xvY2tldmVudF9kZXZpY2UpOworCW51YzkwMF9jbG9ja2V2ZW50X2RldmljZS5jcHVtYXNrID0gY3B1bWFza19vZigwKTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmbnVjOTAwX2Nsb2NrZXZlbnRfZGV2aWNlKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHc5MHg5MDBfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIGN5Y2xlX3QgbnVjOTAwX2dldF9jeWNsZXMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQl3OTB4OTAwX3RpbWVyX3NldHVwKCk7Ci0Jc2V0dXBfaXJxKElSUV9USU1FUjAsICZ3OTB4OTAwX3RpbWVyX2lycSk7CisJcmV0dXJuIH5fX3Jhd19yZWFkbChSRUdfVERSMSk7CiB9CiAKLXN0cnVjdCBzeXNfdGltZXIgdzkweDkwMF90aW1lciA9IHsKLQkuaW5pdAkJPSB3OTB4OTAwX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSB3OTB4OTAwX2dldHRpbWVvZmZzZXQsCi0JLnJlc3VtZQkJPSB3OTB4OTAwX3RpbWVyX3NldHVwCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX251YzkwMCA9IHsKKwkubmFtZQk9ICJudWM5MDAtdGltZXIxIiwKKwkucmF0aW5nCT0gMjAwLAorCS5yZWFkCT0gbnVjOTAwX2dldF9jeWNsZXMsCisJLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkuc2hpZnQJPSAyMCwKKwkuZmxhZ3MJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBudWM5MDBfY2xvY2tzb3VyY2VfaW5pdCh1bnNpZ25lZCBpbnQgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIFJFR19USUNSMSk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChSRUdfVENTUjEpOworCXZhbCB8PSAoQ09VTlRFTiB8IFBFUklPRCk7CisJX19yYXdfd3JpdGVsKHZhbCwgUkVHX1RDU1IxKTsKKworCWNsb2Nrc291cmNlX251YzkwMC5tdWx0ID0KKwkJY2xvY2tzb3VyY2Vfa2h6Mm11bHQoKHJhdGUgLyAxMDAwKSwgY2xvY2tzb3VyY2VfbnVjOTAwLnNoaWZ0KTsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbnVjOTAwKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG51YzkwMF90aW1lcl9pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2tfZXh0ID0gY2xrX2dldChOVUxMLCAiZXh0Iik7CisJdW5zaWduZWQgaW50CXJhdGU7CisKKwlCVUdfT04oSVNfRVJSKGNrX2V4dCkpOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShja19leHQpOworCWNsa19wdXQoY2tfZXh0KTsKKwlyYXRlID0gcmF0ZSAvIChQUkVTQ0FMRSArIDB4MDEpOworCisJIC8qIHNldCBhIGtub3duIHN0YXRlICovCisJX19yYXdfd3JpdGVsKDB4MDAsIFJFR19UQ1NSMCk7CisJX19yYXdfd3JpdGVsKDB4MDAsIFJFR19UQ1NSMSk7CisJX19yYXdfd3JpdGVsKFJFU0VUSU5ULCBSRUdfVElTUik7CisJdGltZXIwX2xvYWQgPSAocmF0ZSAvIFRJQ0tTX1BFUl9TRUMpOworCisJc2V0dXBfaXJxKElSUV9USU1FUjAsICZudWM5MDBfdGltZXIwX2lycSk7CisKKwludWM5MDBfY2xvY2tzb3VyY2VfaW5pdChyYXRlKTsKKwludWM5MDBfY2xvY2tldmVudHNfaW5pdChyYXRlKTsKK30KKworc3RydWN0IHN5c190aW1lciBudWM5MDBfdGltZXIgPSB7CisJLmluaXQJCT0gbnVjOTAwX3RpbWVyX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3c5MHA5MTAuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOTdlNDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3c5MHA5MTAuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3c5MHA5MTAuYwotICoKLSAqIEJhc2VkIG9uIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMgYnkgQmVuIERvb2tzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KLSAqCi0gKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+Ci0gKgotICogVzkwUDkxMCBjcHUgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjt2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1zZXJpYWwuaD4KLQotI2luY2x1ZGUgImNwdS5oIgotI2luY2x1ZGUgImNsb2NrLmgiCi0KLS8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB3OTBwOTEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JSU9ERVNDX0VOVChJUlEpLAotCUlPREVTQ19FTlQoR0NSKSwKLQlJT0RFU0NfRU5UKFVBUlQpLAotCUlPREVTQ19FTlQoVElNRVIpLAotCUlPREVTQ19FTlQoRUJJKSwKLQlJT0RFU0NfRU5UKFVTQkVIQ0lIT1NUKSwKLQlJT0RFU0NfRU5UKFVTQk9IQ0lIT1NUKSwKLQlJT0RFU0NfRU5UKEFEQyksCi0JSU9ERVNDX0VOVChSVEMpLAotCUlPREVTQ19FTlQoS1BJKSwKLQlJT0RFU0NfRU5UKFVTQkRFViksCi0JLypJT0RFU0NfRU5UKExDRCksKi8KLX07Ci0KLS8qIEluaXRpYWwgY2xvY2sgZGVjbGFyYXRpb25zLiAqLwotc3RhdGljIERFRklORV9DTEsobGNkLCAwKTsKLXN0YXRpYyBERUZJTkVfQ0xLKGF1ZGlvLCAxKTsKLXN0YXRpYyBERUZJTkVfQ0xLKGZtaSwgNCk7Ci1zdGF0aWMgREVGSU5FX0NMSyhkbWFjLCA1KTsKLXN0YXRpYyBERUZJTkVfQ0xLKGF0YXBpLCA2KTsKLXN0YXRpYyBERUZJTkVfQ0xLKGVtYywgNyk7Ci1zdGF0aWMgREVGSU5FX0NMSyh1c2JkLCA4KTsKLXN0YXRpYyBERUZJTkVfQ0xLKHVzYmgsIDkpOwotc3RhdGljIERFRklORV9DTEsoZzJkLCAxMCk7Owotc3RhdGljIERFRklORV9DTEsocHdtLCAxOCk7Ci1zdGF0aWMgREVGSU5FX0NMSyhwczIsIDI0KTsKLXN0YXRpYyBERUZJTkVfQ0xLKGtwaSwgMjUpOwotc3RhdGljIERFRklORV9DTEsod2R0LCAyNik7Ci1zdGF0aWMgREVGSU5FX0NMSyhnZG1hLCAyNyk7Ci1zdGF0aWMgREVGSU5FX0NMSyhhZGMsIDI4KTsKLXN0YXRpYyBERUZJTkVfQ0xLKHVzaSwgMjkpOwotCi1zdGF0aWMgc3RydWN0IGNsa19sb29rdXAgdzkwcDkxMF9jbGtyZWdzW10gPSB7Ci0JREVGX0NMS0xPT0soJmNsa19sY2QsICJ3OTBwOTEwLWxjZCIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfYXVkaW8sICJ3OTBwOTEwLWF1ZGlvIiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa19mbWksICJ3OTBwOTEwLWZtaSIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfZG1hYywgInc5MHA5MTAtZG1hYyIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfYXRhcGksICJ3OTBwOTEwLWF0YXBpIiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa19lbWMsICJ3OTBwOTEwLWVtYyIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfdXNiZCwgInc5MHA5MTAtdXNiZCIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfdXNiaCwgInc5MHA5MTAtdXNiaCIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfZzJkLCAidzkwcDkxMC1nMmQiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX3B3bSwgInc5MHA5MTAtcHdtIiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa19wczIsICJ3OTBwOTEwLXBzMiIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfa3BpLCAidzkwcDkxMC1rcGkiLCBOVUxMKSwKLQlERUZfQ0xLTE9PSygmY2xrX3dkdCwgInc5MHA5MTAtd2R0IiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa19nZG1hLCAidzkwcDkxMC1nZG1hIiwgTlVMTCksCi0JREVGX0NMS0xPT0soJmNsa19hZGMsICJ3OTBwOTEwLWFkYyIsIE5VTEwpLAotCURFRl9DTEtMT09LKCZjbGtfdXNpLCAidzkwcDkxMC11c2kiLCBOVUxMKSwKLX07Ci0KLS8qIEluaXRpYWwgc2VyaWFsIHBsYXRmb3JtIGRhdGEgKi8KLQotc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHc5MHA5MTBfdWFydF9kYXRhW10gPSB7Ci0JVzkwWDkwMF84MjUwUE9SVChVQVJUMCksCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHA5MTBfc2VyaWFsX2RldmljZSA9IHsKLQkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAotCS5pZAkJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAotCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSB3OTBwOTEwX3VhcnRfZGF0YSwKLQl9LAotfTsKLQotLypJbml0IFc5MFA5MTAgZXZiIGlvKi8KLQotdm9pZCBfX2luaXQgdzkwcDkxMF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBtYWNoX3NpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBpZGNvZGUgPSAweDA7Ci0KLQlpb3RhYmxlX2luaXQodzkwcDkxMF9pb2Rlc2MsIEFSUkFZX1NJWkUodzkwcDkxMF9pb2Rlc2MpKTsKLQotCWlkY29kZSA9IF9fcmF3X3JlYWRsKFc5MFg5MDBQRElEKTsKLQlpZiAoaWRjb2RlICE9IFc5MFA5MTBfQ1BVSUQpCi0JCXByaW50ayhLRVJOX0VSUiAiQ1BVIHR5cGUgMHglMDhseCBpcyBub3QgVzkwUDkxMFxuIiwgaWRjb2RlKTsKLX0KLQotLypJbml0IFc5MFA5MTAgY2xvY2sqLwotCi12b2lkIF9faW5pdCB3OTBwOTEwX2luaXRfY2xvY2tzKHZvaWQpCi17Ci0JY2xrc19yZWdpc3Rlcih3OTBwOTEwX2Nsa3JlZ3MsIEFSUkFZX1NJWkUodzkwcDkxMF9jbGtyZWdzKSk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHc5MHA5MTBfaW5pdF9jcHUodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgdzkweDkwMF9hcmNoX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gdzkwcDkxMF9pbml0X2NwdSgpOwotfQotYXJjaF9pbml0Y2FsbCh3OTB4OTAwX2FyY2hfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCA4M2MwMjVlLi41ZmU1OTVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTc1OCw3ICs3NTgsNyBAQAogY29uZmlnIENBQ0hFX0wyWDAKIAlib29sICJFbmFibGUgdGhlIEwyeDAgb3V0ZXIgY2FjaGUgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYgfHwgXAotCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEgfHwgTUFDSF9SRUFMVklFV19QQlgKKwkJICAgUkVBTFZJRVdfRUJfQTlNUCB8fCBBUkNIX01YMzUgfHwgQVJDSF9NWDMxIHx8IE1BQ0hfUkVBTFZJRVdfUEJYIHx8IEFSQ0hfTk9NQURJSwogCWRlZmF1bHQgeQogCXNlbGVjdCBPVVRFUl9DQUNIRQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKaW5kZXggMDNjZDI3ZC4uYjI3MGQ2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKKysrIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKQEAgLTE1OSw3ICsxNTksOSBAQAogCiAjZGVmaW5lIF9fZ2V0OF91bmFsaWduZWRfY2hlY2soaW5zLHZhbCxhZGRyLGVycikJXAogCV9fYXNtX18oCQkJCQlcCi0JIjE6CSJpbnMiCSUxLCBbJTJdLCAjMVxuIgkJCVwKKyBBUk0oCSIxOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJKQkJXAorIFRIVU1CKAkiMToJImlucyIJJTEsIFslMl1cbiIJKQkJXAorIFRIVU1CKAkiCWFkZAklMiwgJTIsICMxXG4iCSkJCVwKIAkiMjpcbiIJCQkJCQlcCiAJIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCQlcCiAJIgkuYWxpZ24JMlxuIgkJCQlcCkBAIC0yMTUsNyArMjE3LDkgQEAKIAlkbyB7CQkJCQkJCVwKIAkJdW5zaWduZWQgaW50IGVyciA9IDAsIHYgPSB2YWwsIGEgPSBhZGRyOwlcCiAJCV9fYXNtX18oIEZJUlNUX0JZVEVfMTYJCQkJXAotCQkiMToJImlucyIJJTEsIFslMl0sICMxXG4iCQkJXAorCSBBUk0oCSIxOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJKQkJXAorCSBUSFVNQigJIjE6CSJpbnMiCSUxLCBbJTJdXG4iCSkJCVwKKwkgVEhVTUIoCSIJYWRkCSUyLCAlMiwgIzFcbiIJKQkJXAogCQkiCW1vdgklMSwgJTEsICJORVhUX0JZVEUiXG4iCQlcCiAJCSIyOgkiaW5zIgklMSwgWyUyXVxuIgkJCVwKIAkJIjM6XG4iCQkJCQkJXApAQCAtMjQ1LDExICsyNDksMTcgQEAKIAlkbyB7CQkJCQkJCVwKIAkJdW5zaWduZWQgaW50IGVyciA9IDAsIHYgPSB2YWwsIGEgPSBhZGRyOwlcCiAJCV9fYXNtX18oIEZJUlNUX0JZVEVfMzIJCQkJXAotCQkiMToJImlucyIJJTEsIFslMl0sICMxXG4iCQkJXAorCSBBUk0oCSIxOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJKQkJXAorCSBUSFVNQigJIjE6CSJpbnMiCSUxLCBbJTJdXG4iCSkJCVwKKwkgVEhVTUIoCSIJYWRkCSUyLCAlMiwgIzFcbiIJKQkJXAogCQkiCW1vdgklMSwgJTEsICJORVhUX0JZVEUiXG4iCQlcCi0JCSIyOgkiaW5zIgklMSwgWyUyXSwgIzFcbiIJCQlcCisJIEFSTSgJIjI6CSJpbnMiCSUxLCBbJTJdLCAjMVxuIgkpCQlcCisJIFRIVU1CKAkiMjoJImlucyIJJTEsIFslMl1cbiIJKQkJXAorCSBUSFVNQigJIglhZGQJJTIsICUyLCAjMVxuIgkpCQlcCiAJCSIJbW92CSUxLCAlMSwgIk5FWFRfQllURSJcbiIJCVwKLQkJIjM6CSJpbnMiCSUxLCBbJTJdLCAjMVxuIgkJCVwKKwkgQVJNKAkiMzoJImlucyIJJTEsIFslMl0sICMxXG4iCSkJCVwKKwkgVEhVTUIoCSIzOgkiaW5zIgklMSwgWyUyXVxuIgkpCQlcCisJIFRIVU1CKAkiCWFkZAklMiwgJTIsICMxXG4iCSkJCVwKIAkJIgltb3YJJTEsICUxLCAiTkVYVF9CWVRFIlxuIgkJXAogCQkiNDoJImlucyIJJTEsIFslMl1cbiIJCQlcCiAJCSI1OlxuIgkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCmluZGV4IGJlOTNmZjAuLmJkYTBlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwpAQCAtMjEsNyArMjEsNyBAQAogICoKICAqCUZsdXNoIHRoZSB3aG9sZSBELWNhY2hlLgogICoKLSAqCUNvcnJ1cHRlZCByZWdpc3RlcnM6IHIwLXI1LCByNywgcjktcjExCisgKglDb3JydXB0ZWQgcmVnaXN0ZXJzOiByMC1yNywgcjktcjExIChyNiBvbmx5IGluIFRodW1iIG1vZGUpCiAgKgogICoJLSBtbSAgICAtIG1tX3N0cnVjdCBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKICAqLwpAQCAtNTEsOCArNTEsMTIgQEAKIGxvb3AyOgogCW1vdglyOSwgcjQJCQkJQCBjcmVhdGUgd29ya2luZyBjb3B5IG9mIG1heCB3YXkgc2l6ZQogbG9vcDM6Ci0Jb3JyCXIxMSwgcjEwLCByOSwgbHNsIHI1CQlAIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlciBpbnRvIHIxMQotCW9ycglyMTEsIHIxMSwgcjcsIGxzbCByMgkJQCBmYWN0b3IgaW5kZXggbnVtYmVyIGludG8gcjExCisgQVJNKAlvcnIJcjExLCByMTAsIHI5LCBsc2wgcjUJKQlAIGZhY3RvciB3YXkgYW5kIGNhY2hlIG51bWJlciBpbnRvIHIxMQorIFRIVU1CKAlsc2wJcjYsIHI5LCByNQkJKQorIFRIVU1CKAlvcnIJcjExLCByMTAsIHI2CQkpCUAgZmFjdG9yIHdheSBhbmQgY2FjaGUgbnVtYmVyIGludG8gcjExCisgQVJNKAlvcnIJcjExLCByMTEsIHI3LCBsc2wgcjIJKQlAIGZhY3RvciBpbmRleCBudW1iZXIgaW50byByMTEKKyBUSFVNQigJbHNsCXI2LCByNywgcjIJCSkKKyBUSFVNQigJb3JyCXIxMSwgcjExLCByNgkJKQlAIGZhY3RvciBpbmRleCBudW1iZXIgaW50byByMTEKIAltY3IJcDE1LCAwLCByMTEsIGM3LCBjMTQsIDIJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIGJ5IHNldC93YXkKIAlzdWJzCXI5LCByOSwgIzEJCQlAIGRlY3JlbWVudCB0aGUgd2F5CiAJYmdlCWxvb3AzCkBAIC04MiwxMSArODYsMTMgQEAKICAqCiAgKi8KIEVOVFJZKHY3X2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQotCXN0bWZkCXNwISwge3I0LXI1LCByNywgcjktcjExLCBscn0KKyBBUk0oCXN0bWZkCXNwISwge3I0LXI1LCByNywgcjktcjExLCBscn0JKQorIFRIVU1CKAlzdG1mZAlzcCEsIHtyNC1yNywgcjktcjExLCBscn0JKQogCWJsCXY3X2ZsdXNoX2RjYWNoZV9hbGwKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBJK0JUQiBjYWNoZSBpbnZhbGlkYXRlCi0JbGRtZmQJc3AhLCB7cjQtcjUsIHI3LCByOS1yMTEsIGxyfQorIEFSTSgJbGRtZmQJc3AhLCB7cjQtcjUsIHI3LCByOS1yMTEsIGxyfQkpCisgVEhVTUIoCWxkbWZkCXNwISwge3I0LXI3LCByOS1yMTEsIGxyfQkpCiAJbW92CXBjLCBscgogRU5EUFJPQyh2N19mbHVzaF9rZXJuX2NhY2hlX2FsbCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggNTEwYzE3OS4uYjMwOTI1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0zNiw3ICszNiwzNCBAQAogI2RlZmluZSBDT05TSVNURU5UX1BURV9JTkRFWCh4KSAoKCh1bnNpZ25lZCBsb25nKSh4KSAtIENPTlNJU1RFTlRfQkFTRSkgPj4gUEdESVJfU0hJRlQpCiAjZGVmaW5lIE5VTV9DT05TSVNURU5UX1BURVMgKENPTlNJU1RFTlRfRE1BX1NJWkUgPj4gUEdESVJfU0hJRlQpCiAKK3N0YXRpYyB1NjQgZ2V0X2NvaGVyZW50X2RtYV9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1NjQgbWFzayA9IElTQV9ETUFfVEhSRVNIT0xEOwogCisJaWYgKGRldikgeworCQltYXNrID0gZGV2LT5jb2hlcmVudF9kbWFfbWFzazsKKworCQkvKgorCQkgKiBTYW5pdHkgY2hlY2sgdGhlIERNQSBtYXNrIC0gaXQgbXVzdCBiZSBub24temVybywgYW5kCisJCSAqIG11c3QgYmUgYWJsZSB0byBiZSBzYXRpc2ZpZWQgYnkgYSBETUEgYWxsb2NhdGlvbi4KKwkJICovCisJCWlmIChtYXNrID09IDApIHsKKwkJCWRldl93YXJuKGRldiwgImNvaGVyZW50IERNQSBtYXNrIGlzIHVuc2V0XG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCh+bWFzaykgJiBJU0FfRE1BX1RIUkVTSE9MRCkgeworCQkJZGV2X3dhcm4oZGV2LCAiY29oZXJlbnQgRE1BIG1hc2sgJSNsbHggaXMgc21hbGxlciAiCisJCQkJICJ0aGFuIHN5c3RlbSBHRlBfRE1BIG1hc2sgJSNsbHhcbiIsCisJCQkJIG1hc2ssICh1bnNpZ25lZCBsb25nIGxvbmcpSVNBX0RNQV9USFJFU0hPTEQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworI2lmZGVmIENPTkZJR19NTVUKIC8qCiAgKiBUaGVzZSBhcmUgdGhlIHBhZ2UgdGFibGVzICgyTUIgZWFjaCkgY292ZXJpbmcgdW5jYWNoZWQsIERNQSBjb25zaXN0ZW50IGFsbG9jYXRpb25zCiAgKi8KQEAgLTE1Miw3ICsxNzksOCBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBhcm1fdm1fcmVnaW9uICpjOwogCXVuc2lnbmVkIGxvbmcgb3JkZXI7Ci0JdTY0IG1hc2sgPSBJU0FfRE1BX1RIUkVTSE9MRCwgbGltaXQ7CisJdTY0IG1hc2sgPSBnZXRfY29oZXJlbnRfZG1hX21hc2soZGV2KTsKKwl1NjQgbGltaXQ7CiAKIAlpZiAoIWNvbnNpc3RlbnRfcHRlWzBdKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vdCBpbml0aWFsaXNlZFxuIiwgX19mdW5jX18pOwpAQCAtMTYwLDI1ICsxODgsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoZGV2KSB7Ci0JCW1hc2sgPSBkZXYtPmNvaGVyZW50X2RtYV9tYXNrOwotCi0JCS8qCi0JCSAqIFNhbml0eSBjaGVjayB0aGUgRE1BIG1hc2sgLSBpdCBtdXN0IGJlIG5vbi16ZXJvLCBhbmQKLQkJICogbXVzdCBiZSBhYmxlIHRvIGJlIHNhdGlzZmllZCBieSBhIERNQSBhbGxvY2F0aW9uLgotCQkgKi8KLQkJaWYgKG1hc2sgPT0gMCkgewotCQkJZGV2X3dhcm4oZGV2LCAiY29oZXJlbnQgRE1BIG1hc2sgaXMgdW5zZXRcbiIpOwotCQkJZ290byBub19wYWdlOwotCQl9Ci0KLQkJaWYgKCh+bWFzaykgJiBJU0FfRE1BX1RIUkVTSE9MRCkgewotCQkJZGV2X3dhcm4oZGV2LCAiY29oZXJlbnQgRE1BIG1hc2sgJSNsbHggaXMgc21hbGxlciAiCi0JCQkJICJ0aGFuIHN5c3RlbSBHRlBfRE1BIG1hc2sgJSNsbHhcbiIsCi0JCQkJIG1hc2ssICh1bnNpZ25lZCBsb25nIGxvbmcpSVNBX0RNQV9USFJFU0hPTEQpOwotCQkJZ290byBub19wYWdlOwotCQl9Ci0JfQorCWlmICghbWFzaykKKwkJZ290byBub19wYWdlOwogCiAJLyoKIAkgKiBTYW5pdHkgY2hlY2sgdGhlIGFsbG9jYXRpb24gc2l6ZS4KQEAgLTI2Nyw2ICsyNzgsMzEgQEAKIAkqaGFuZGxlID0gfjA7CiAJcmV0dXJuIE5VTEw7CiB9CisjZWxzZQkvKiAhQ09ORklHX01NVSAqLworc3RhdGljIHZvaWQgKgorX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLCBnZnBfdCBnZnAsCisJICAgIHBncHJvdF90IHByb3QpCit7CisJdm9pZCAqdmlydDsKKwl1NjQgbWFzayA9IGdldF9jb2hlcmVudF9kbWFfbWFzayhkZXYpOworCisJaWYgKCFtYXNrKQorCQlnb3RvIGVycm9yOworCisJaWYgKG1hc2sgIT0gMHhmZmZmZmZmZikKKwkJZ2ZwIHw9IEdGUF9ETUE7CisJdmlydCA9IGttYWxsb2Moc2l6ZSwgZ2ZwKTsKKwlpZiAoIXZpcnQpCisJCWdvdG8gZXJyb3I7CisKKwkqaGFuZGxlID0gIHZpcnRfdG9fZG1hKGRldiwgdmlydCk7CisJcmV0dXJuIHZpcnQ7CisKK2Vycm9yOgorCSpoYW5kbGUgPSB+MDsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgkvKiBDT05GSUdfTU1VICovCiAKIC8qCiAgKiBBbGxvY2F0ZSBETUEtY29oZXJlbnQgbWVtb3J5IHNwYWNlIGFuZCByZXR1cm4gYm90aCB0aGUga2VybmVsIHJlbWFwcGVkCkBAIC0zMTEsOSArMzQ3LDEwIEBACiBzdGF0aWMgaW50IGRtYV9tbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCSAgICB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUpCiB7CisJaW50IHJldCA9IC1FTlhJTzsKKyNpZmRlZiBDT05GSUdfTU1VCiAJdW5zaWduZWQgbG9uZyBmbGFncywgdXNlcl9zaXplLCBrZXJuX3NpemU7CiAJc3RydWN0IGFybV92bV9yZWdpb24gKmM7Ci0JaW50IHJldCA9IC1FTlhJTzsKIAogCXVzZXJfc2l6ZSA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTMzNCw2ICszNzEsNyBAQAogCQkJCQkgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJCX0KIAl9CisjZW5kaWYJLyogQ09ORklHX01NVSAqLwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM1OCw2ICszOTYsNyBAQAogICogZnJlZSBhIHBhZ2UgYXMgZGVmaW5lZCBieSB0aGUgYWJvdmUgbWFwcGluZy4KICAqIE11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQuCiAgKi8KKyNpZmRlZiBDT05GSUdfTU1VCiB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGhhbmRsZSkKIHsKIAlzdHJ1Y3QgYXJtX3ZtX3JlZ2lvbiAqYzsKQEAgLTQ0NCw2ICs0ODMsMTQgQEAKIAkgICAgICAgX19mdW5jX18sIGNwdV9hZGRyKTsKIAlkdW1wX3N0YWNrKCk7CiB9CisjZWxzZQkvKiAhQ09ORklHX01NVSAqLwordm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwgZG1hX2FkZHJfdCBoYW5kbGUpCit7CisJaWYgKGRtYV9yZWxlYXNlX2Zyb21fY29oZXJlbnQoZGV2LCBnZXRfb3JkZXIoc2l6ZSksIGNwdV9hZGRyKSkKKwkJcmV0dXJuOworCWtmcmVlKGNwdV9hZGRyKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfTU1VICovCiBFWFBPUlRfU1lNQk9MKGRtYV9mcmVlX2NvaGVyZW50KTsKIAogLyoKQEAgLTQ1MSwxMCArNDk4LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGNvbnNpc3RlbnRfaW5pdCh2b2lkKQogeworCWludCByZXQgPSAwOworI2lmZGVmIENPTkZJR19NTVUKIAlwZ2RfdCAqcGdkOwogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZTsKLQlpbnQgcmV0ID0gMCwgaSA9IDA7CisJaW50IGkgPSAwOwogCXUzMiBiYXNlID0gQ09OU0lTVEVOVF9CQVNFOwogCiAJZG8gewpAQCAtNDc3LDYgKzUyNiw3IEBACiAJCWNvbnNpc3RlbnRfcHRlW2krK10gPSBwdGU7CiAJCWJhc2UgKz0gKDEgPDwgUEdESVJfU0hJRlQpOwogCX0gd2hpbGUgKGJhc2UgPCBDT05TSVNURU5UX0VORCk7CisjZW5kaWYJLyogIUNPTkZJR19NTVUgKi8KIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCA2ZmRjYmI3Li5jYzg4MjlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtMjMsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiZmF1bHQuaCIKIAorI2lmZGVmIENPTkZJR19NTVUKIAogI2lmZGVmIENPTkZJR19LUFJPQkVTCiBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGZzcikKQEAgLTk3LDYgKzEwMCwxMCBAQAogCiAJcHJpbnRrKCJcbiIpOwogfQorI2Vsc2UJCQkJCS8qIENPTkZJR19NTVUgKi8KK3ZvaWQgc2hvd19wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sgfQorI2VuZGlmCQkJCQkvKiBDT05GSUdfTU1VICovCiAKIC8qCiAgKiBPb3BzLiAgVGhlIGtlcm5lbCB0cmllZCB0byBhY2Nlc3Mgc29tZSBwYWdlIHRoYXQgd2Fzbid0IHByZXNlbnQuCkBAIC0xNzEsNiArMTc4LDcgQEAKIAkJX19kb19rZXJuZWxfZmF1bHQobW0sIGFkZHIsIGZzciwgcmVncyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIFZNX0ZBVUxUX0JBRE1BUAkJMHgwMTAwMDAKICNkZWZpbmUgVk1fRkFVTFRfQkFEQUNDRVNTCTB4MDIwMDAwCiAKQEAgLTMyMiw2ICszMzAsMTMgQEAKIAlfX2RvX2tlcm5lbF9mYXVsdChtbSwgYWRkciwgZnNyLCByZWdzKTsKIAlyZXR1cm4gMDsKIH0KKyNlbHNlCQkJCQkvKiBDT05GSUdfTU1VICovCitzdGF0aWMgaW50Citkb19wYWdlX2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYJCQkJCS8qIENPTkZJR19NTVUgKi8KIAogLyoKICAqIEZpcnN0IExldmVsIFRyYW5zbGF0aW9uIEZhdWx0IEhhbmRsZXIKQEAgLTM0MCw2ICszNTUsNyBAQAogICogaW50ZXJydXB0IG9yIGEgY3JpdGljYWwgcmVnaW9uLCBhbmQgc2hvdWxkIG9ubHkgY29weSB0aGUgaW5mb3JtYXRpb24KICAqIGZyb20gdGhlIG1hc3RlciBwYWdlIHRhYmxlLCBub3RoaW5nIG1vcmUuCiAgKi8KKyNpZmRlZiBDT05GSUdfTU1VCiBzdGF0aWMgaW50IF9fa3Byb2JlcwogZG9fdHJhbnNsYXRpb25fZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAogCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMzc4LDYgKzM5NCwxNCBAQAogCWRvX2JhZF9hcmVhKGFkZHIsIGZzciwgcmVncyk7CiAJcmV0dXJuIDA7CiB9CisjZWxzZQkJCQkJLyogQ09ORklHX01NVSAqLworc3RhdGljIGludAorZG9fdHJhbnNsYXRpb25fZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLAorCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiAwOworfQorI2VuZGlmCQkJCQkvKiBDT05GSUdfTU1VICovCiAKIC8qCiAgKiBTb21lIHNlY3Rpb24gcGVybWlzc2lvbiBmYXVsdHMgbmVlZCB0byBiZSBoYW5kbGVkIGdyYWNlZnVsbHkuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCBjMDcyMjJlLi41NzVmM2FkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTE0NCw3ICsxNDQsMTQgQEAKIAkgKiBwYWdlLiAgVGhpcyBlbnN1cmVzIHRoYXQgZGF0YSBpbiB0aGUgcGh5c2ljYWwgcGFnZSBpcyBtdXR1YWxseQogCSAqIGNvaGVyZW50IHdpdGggdGhlIGtlcm5lbHMgbWFwcGluZy4KIAkgKi8KLQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpKTsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCS8qCisJICoga21hcF9hdG9taWMoKSBkb2Vzbid0IHNldCB0aGUgcGFnZSB2aXJ0dWFsIGFkZHJlc3MsIGFuZAorCSAqIGt1bm1hcF9hdG9taWMoKSB0YWtlcyBjYXJlIG9mIGNhY2hlIGZsdXNoaW5nIGFscmVhZHkuCisJICovCisJaWYgKHBhZ2VfYWRkcmVzcyhwYWdlKSkKKyNlbmRpZgorCQlfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UocGFnZV9hZGRyZXNzKHBhZ2UpKTsKIAogCS8qCiAJICogSWYgdGhpcyBpcyBhIHBhZ2UgY2FjaGUgcGFnZSwgYW5kIHdlIGhhdmUgYW4gYWxpYXNpbmcgVklQVCBjYWNoZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwppbmRleCBhMzQ5NTRkLi43M2NhZTU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCkBAIC00MCwxMSArNDAsMTYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaWR4OwogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisJdm9pZCAqa21hcDsKIAogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKIAkJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAorCWttYXAgPSBrbWFwX2hpZ2hfZ2V0KHBhZ2UpOworCWlmIChrbWFwKQorCQlyZXR1cm4ga21hcDsKKwogCWlkeCA9IHR5cGUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KQEAgLTgwLDYgKzg1LDkgQEAKICNlbHNlCiAJCSh2b2lkKSBpZHg7ICAvKiB0byBraWxsIGEgd2FybmluZyAqLwogI2VuZGlmCisJfSBlbHNlIGlmICh2YWRkciA+PSBQS01BUF9BRERSKDApICYmIHZhZGRyIDwgUEtNQVBfQUREUihMQVNUX1BLTUFQKSkgeworCQkvKiB0aGlzIGFkZHJlc3Mgd2FzIG9idGFpbmVkIHRocm91Z2gga21hcF9oaWdoX2dldCgpICovCisJCWt1bm1hcF9oaWdoKHB0ZV9wYWdlKHBrbWFwX3BhZ2VfdGFibGVbUEtNQVBfTlIodmFkZHIpXSkpOwogCX0KIAlwYWdlZmF1bHRfZW5hYmxlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggM2E3Mjc5Yy4uZWEzNjE4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzQ5LDEyICszNTAsNDMgQEAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlKG5vZGUsIHpvbmVfc2l6ZSwgbWluLCB6aG9sZV9zaXplKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfU1BBUlNFTUVNCitpbnQgcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXN0cnVjdCBtZW1pbmZvICptaSA9ICZtZW1pbmZvOworCXVuc2lnbmVkIGludCBsZWZ0ID0gMCwgcmlnaHQgPSBtaS0+bnJfYmFua3M7CisKKwlkbyB7CisJCXVuc2lnbmVkIGludCBtaWQgPSAocmlnaHQgKyBsZWZ0KSAvIDI7CisJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW21pZF07CisKKwkJaWYgKHBmbiA8IGJhbmtfcGZuX3N0YXJ0KGJhbmspKQorCQkJcmlnaHQgPSBtaWQ7CisJCWVsc2UgaWYgKHBmbiA+PSBiYW5rX3Bmbl9lbmQoYmFuaykpCisJCQlsZWZ0ID0gbWlkICsgMTsKKwkJZWxzZQorCQkJcmV0dXJuIDE7CisJfSB3aGlsZSAobGVmdCA8IHJpZ2h0KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocGZuX3ZhbGlkKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBtZW1pbmZvX2NtcChjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJY29uc3Qgc3RydWN0IG1lbWJhbmsgKmEgPSBfYSwgKmIgPSBfYjsKKwlsb25nIGNtcCA9IGJhbmtfcGZuX3N0YXJ0KGEpIC0gYmFua19wZm5fc3RhcnQoYik7CisJcmV0dXJuIGNtcCA8IDAgPyAtMSA6IGNtcCA+IDAgPyAxIDogMDsKK30KKwogdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG1lbWluZm8gKm1pID0gJm1lbWluZm87CiAJdW5zaWduZWQgbG9uZyBtaW4sIG1heF9sb3csIG1heF9oaWdoOwogCWludCBub2RlLCBpbml0cmRfbm9kZTsKIAorCXNvcnQoJm1pLT5iYW5rLCBtaS0+bnJfYmFua3MsIHNpemVvZihtaS0+YmFua1swXSksIG1lbWluZm9fY21wLCBOVUxMKTsKKwogCS8qCiAJICogTG9jYXRlIHdoaWNoIG5vZGUgY29udGFpbnMgdGhlIHJhbWRpc2sgaW1hZ2UsIGlmIGFueS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL25vbW11LmMgYi9hcmNoL2FybS9tbS9ub21tdS5jCmluZGV4IGFkN2JhY2MuLjkwMDgxMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL25vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbm9tbXUuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKICNpbmNsdWRlICJtbS5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUyBiL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKaW5kZXggNTRiMWY3Mi4uN2Q2M2JlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCkBAIC03NywxOSArNzcsMTUgQEAKICAqIFNhbml0eSBjaGVjayB0aGUgUFRFIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb2RlIGJlbG93IC0gd2hpY2ggbWFrZXMKICAqIGNlcnRhaW4gYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZXNlIGJpdHMgYXJlIGxheWVkIG91dC4KICAqLworI2lmZGVmIENPTkZJR19NTVUKICNpZiBMX1BURV9TSEFSRUQgIT0gUFRFX0VYVF9TSEFSRUQKICNlcnJvciBQVEUgc2hhcmVkIGJpdCBtaXNtYXRjaAogI2VuZGlmCi0jaWYgTF9QVEVfQlVGRkVSQUJMRSAhPSBQVEVfQlVGRkVSQUJMRQotI2Vycm9yIFBURSBidWZmZXJhYmxlIGJpdCBtaXNtYXRjaAotI2VuZGlmCi0jaWYgTF9QVEVfQ0FDSEVBQkxFICE9IFBURV9DQUNIRUFCTEUKLSNlcnJvciBQVEUgY2FjaGVhYmxlIGJpdCBtaXNtYXRjaAotI2VuZGlmCiAjaWYgKExfUFRFX0VYRUMrTF9QVEVfVVNFUitMX1BURV9XUklURStMX1BURV9ESVJUWStMX1BURV9ZT1VORytcCiAgICAgIExfUFRFX0ZJTEUrTF9QVEVfUFJFU0VOVCkgPiBMX1BURV9TSEFSRUQKICNlcnJvciBJbnZhbGlkIExpbnV4IFBURSBiaXQgc2V0dGluZ3MKICNlbmRpZgorI2VuZGlmCS8qIENPTkZJR19NTVUgKi8KIAogLyoKICAqIFRoZSBBUk12NiBhbmQgQVJNdjcgc2V0X3B0ZV9leHQgdHJhbnNsYXRpb24gZnVuY3Rpb24uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKaW5kZXggMTgwYTA4ZC4uZjNmYTFjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtMTI3LDcgKzEyNyw5IEBACiAgKi8KIEVOVFJZKGNwdV92N19zZXRfcHRlX2V4dCkKICNpZmRlZiBDT05GSUdfTU1VCi0Jc3RyCXIxLCBbcjBdLCAjLTIwNDgJCUAgbGludXggdmVyc2lvbgorIEFSTSgJc3RyCXIxLCBbcjBdLCAjLTIwNDgJKQlAIGxpbnV4IHZlcnNpb24KKyBUSFVNQigJc3RyCXIxLCBbcjBdCQkpCUAgbGludXggdmVyc2lvbgorIFRIVU1CKAlzdWIJcjAsIHIwLCAjMjA0OAkJKQogCiAJYmljCXIzLCByMSwgIzB4MDAwMDAzZjAKIAliaWMJcjMsIHIzLCAjUFRFX1RZUEVfTUFTSwpAQCAtMjMyLDcgKzIzNCw2IEBACiAJbWNyCXAxNSwgMCwgcjQsIGMyLCBjMCwgMQkJQCBsb2FkIFRUQjEKIAltb3YJcjEwLCAjMHgxZgkJCUAgZG9tYWlucyAwLCAxID0gbWFuYWdlcgogCW1jcglwMTUsIDAsIHIxMCwgYzMsIGMwLCAwCQlAIGxvYWQgZG9tYWluIGFjY2VzcyByZWdpc3RlcgotI2VuZGlmCiAJLyoKIAkgKiBNZW1vcnkgcmVnaW9uIGF0dHJpYnV0ZXMgd2l0aCBTQ1RMUi5UUkU9MQogCSAqCkBAIC0yNjUsNiArMjY2LDcgQEAKIAlsZHIJcjYsID0weDQwZTA0MGUwCQkJQCBOTVJSCiAJbWNyCXAxNSwgMCwgcjUsIGMxMCwgYzIsIDAJCUAgd3JpdGUgUFJSUgogCW1jcglwMTUsIDAsIHI2LCBjMTAsIGMyLCAxCQlAIHdyaXRlIE5NUlIKKyNlbmRpZgogCWFkcglyNSwgdjdfY3J2YWwKIAlsZG1pYQlyNSwge3I1LCByNn0KICNpZmRlZiBDT05GSUdfQ1BVX0VORElBTl9CRTgKQEAgLTI3Myw2ICsyNzUsNyBAQAogICAgCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgcmVhZCBjb250cm9sIHJlZ2lzdGVyCiAJYmljCXIwLCByMCwgcjUJCQlAIGNsZWFyIGJpdHMgdGhlbQogCW9ycglyMCwgcjAsIHI2CQkJQCBzZXQgdGhlbQorIFRIVU1CKAlvcnIJcjAsIHIwLCAjMSA8PCAzMAkpCUAgVGh1bWIgZXhjZXB0aW9ucwogCW1vdglwYywgbHIJCQkJQCByZXR1cm4gdG8gaGVhZC5TOl9fcmV0CiBFTkRQUk9DKF9fdjdfc2V0dXApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCmluZGV4IDg5ODZiNzQuLmNhNWM3YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIGNvbmZpZyBBUkNIX01YMQogCWJvb2wgIk1YMS1iYXNlZCIKIAlzZWxlY3QgQ1BVX0FSTTkyMFQKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDEgZmFtaWx5CiAKQEAgLTE5LDYgKzIwLDEzIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBpLk1YMiBmYW1pbHkKIAorY29uZmlnIEFSQ0hfTVgyNQorCWJvb2wgIk1YMjUtYmFzZWQiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IENPTU1PTl9DTEtERVYKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgyNSBmYW1pbHkKKwogY29uZmlnIEFSQ0hfTVgzCiAJYm9vbCAiTVgzLWJhc2VkIgogCXNlbGVjdCBDUFVfVjYKQEAgLTI2LDExICszNCwyMCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDMgZmFtaWx5CiAKK2NvbmZpZyBBUkNIX01YQzkxMjMxCisJYm9vbCAiTVhDOTEyMzEtYmFzZWQiCisJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBDT01NT05fQ0xLREVWCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBNWEM5MTIzMSBmYW1pbHkKKwogZW5kY2hvaWNlCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDEvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1teDI1L0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbXhjOTEyMzEvS2NvbmZpZyIKIAogZW5kbWVudQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYwppbmRleCA5MmUxMzU2Li45ZThmYmQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tzX211dGV4KTsKQEAgLTQ3LDc2ICs0OCw2IEBACiAgKiBTdGFuZGFyZCBjbG9jayBmdW5jdGlvbnMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2Nsay5oCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKgotICogQWxsIHRoZSBjb2RlIGluc2lkZSAjaWZuZGVmIENPTkZJR19DT01NT05fQ0xLREVWIGNhbiBiZSByZW1vdmVkIG9uY2UgYWxsCi0gKiBNWEMgYXJjaGl0ZWN0dXJlcyBoYXZlIHN3aXRjaGVkIHRvIHVzaW5nIGNsa2Rldi4KLSAqLwotI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgotLyoKLSAqIFJldHJpZXZlIGEgY2xvY2sgYnkgbmFtZS4KLSAqCi0gKiBOb3RlIHRoYXQgd2UgZmlyc3QgdHJ5IHRvIHVzZSBkZXZpY2UgaWQgb24gdGhlIGJ1cwotICogYW5kIGNsb2NrIG5hbWUuIElmIHRoaXMgZmFpbHMsIHdlIHRyeSB0byB1c2UgIjxuYW1lPi48aWQ+Ii4gSWYgdGhpcyBmYWlscywKLSAqIHdlIHRyeSB0byB1c2UgY2xvY2sgbmFtZSBvbmx5LgotICogVGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgY2xvY2sncyBtb2R1bGUgb3duZXIgcmVmIGNvdW50IGlzIGluY3JlbWVudGVkLgotICovCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7Ci0JaW50IGlkbm87Ci0JY29uc3QgY2hhciAqc3RyOwotCi0JaWYgKGlkID09IE5VTEwpCi0JCXJldHVybiBjbGs7Ci0KLQlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQotCQlpZG5vID0gLTE7Ci0JZWxzZQotCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAocC0+aWQgPT0gaWRubyAmJgotCQkgICAgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewotCQkJY2xrID0gcDsKLQkJCWdvdG8gZm91bmQ7Ci0JCX0KLQl9Ci0KLQlzdHIgPSBzdHJyY2hyKGlkLCAnLicpOwotCWlmIChzdHIpIHsKLQkJaW50IGNudCA9IHN0ciAtIGlkOwotCQlzdHIrKzsKLQkJaWRubyA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAxMCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQkJaWYgKHAtPmlkID09IGlkbm8gJiYKLQkJCSAgICBzdHJsZW4ocC0+bmFtZSkgPT0gY250ICYmCi0JCQkgICAgc3RybmNtcChpZCwgcC0+bmFtZSwgY250KSA9PSAwICYmCi0JCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQkJY2xrID0gcDsKLQkJCQlnb3RvIGZvdW5kOwotCQkJfQotCQl9Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQljbGsgPSBwOwotCQkJZ290byBmb3VuZDsKLQkJfQotCX0KLQotCXByaW50ayhLRVJOX1dBUk5JTkcgImNsazogVW5hYmxlIHRvIGdldCByZXF1ZXN0ZWQgY2xvY2s6ICVzXG4iLCBpZCk7Ci0KLWZvdW5kOgotCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKLQotCXJldHVybiBjbGs7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXQpOwotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKQEAgLTE5MywxNiArMTI0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKIAotI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgotLyogRGVjcmVtZW50IHRoZSBjbG9jaydzIG1vZHVsZSByZWZlcmVuY2UgY291bnQgKi8KLXZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsayAmJiAhSVNfRVJSKGNsaykpCi0JCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19wdXQpOwotI2VuZGlmCi0KIC8qIFJvdW5kIHRoZSByZXF1ZXN0ZWQgY2xvY2sgcmF0ZSB0byB0aGUgbmVhcmVzdCBzdXBwb3J0ZWQKICAqIHJhdGUgdGhhdCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHJlcXVlc3RlZCByYXRlLgogICogVGhpcyBpcyBkZXBlbmRlbnQgb24gdGhlIGNsb2NrJ3MgY3VycmVudCBwYXJlbnQuCkBAIC0yNjUsODAgKzE4Niw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKIAotI2lmbmRlZiBDT05GSUdfQ09NTU9OX0NMS0RFVgotLyoKLSAqIEFkZCBhIG5ldyBjbG9jayB0byB0aGUgY2xvY2sgdHJlZS4KLSAqLwotaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2Nrcyk7Ci0JbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7Ci0KLS8qIFJlbW92ZSBhIGNsb2NrIGZyb20gdGhlIGNsb2NrIHRyZWUgKi8KLXZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKLQlsaXN0X2RlbCgmY2xrLT5ub2RlKTsKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKLQotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW50IG14Y19jbG9ja19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgY2xrICpjbGtwOwotCWNoYXIgKnAgPSBwYWdlOwotCWludCBsZW47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKLQkJcCArPSBzcHJpbnRmKHAsICIlcy0lZDpcdFx0JWx1LCAlZCIsIGNsa3AtPm5hbWUsIGNsa3AtPmlkLAotCQkJCWNsa19nZXRfcmF0ZShjbGtwKSwgY2xrcC0+dXNlY291bnQpOwotCQlpZiAoY2xrcC0+cGFyZW50KQotCQkJcCArPSBzcHJpbnRmKHAsICIsICVzLSVkXG4iLCBjbGtwLT5wYXJlbnQtPm5hbWUsCi0JCQkJICAgICBjbGtwLT5wYXJlbnQtPmlkKTsKLQkJZWxzZQotCQkJcCArPSBzcHJpbnRmKHAsICJcbiIpOwotCX0KLQotCWxlbiA9IChwIC0gcGFnZSkgLSBvZmY7Ci0JaWYgKGxlbiA8IDApCi0JCWxlbiA9IDA7Ci0KLQkqZW9mID0gKGxlbiA8PSBjb3VudCkgPyAxIDogMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbXhjX3NldHVwX3Byb2NfZW50cnkodm9pZCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJlczsKLQotCXJlcyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImNwdS9jbG9ja3MiLCAwLCBOVUxMLAotCQkJCSAgICAgbXhjX2Nsb2NrX3JlYWRfcHJvYywgTlVMTCk7Ci0JaWYgKCFyZXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gY3JlYXRlIHByb2MvY3B1L2Nsb2Nrc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChteGNfc2V0dXBfcHJvY19lbnRyeSk7Ci0jZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KLSNlbmRpZgotCiAvKgogICogR2V0IHRoZSByZXN1bHRpbmcgY2xvY2sgcmF0ZSBmcm9tIGEgUExMIHJlZ2lzdGVyIHZhbHVlIGFuZCB0aGUgaW5wdXQKICAqIGZyZXF1ZW5jeS4gUExMcyB3aXRoIHRoaXMgcmVnaXN0ZXIgbGF5b3V0IGNhbiBhdCBsZWFzdCBiZSBmb3VuZCBvbgpAQCAtMzYzLDEyICsyMTAsMTEgQEAKIAogCW1mbl9hYnMgPSBtZm47CiAKLSNpZiAhZGVmaW5lZCBDT05GSUdfQVJDSF9NWDEgJiYgIWRlZmluZWQgQ09ORklHX0FSQ0hfTVgyMQotCWlmIChtZm4gPj0gMHgyMDApIHsKLQkJbWZuIHw9IDB4RkZGRkZFMDA7Ci0JCW1mbl9hYnMgPSAtbWZuOwotCX0KLSNlbmRpZgorCS8qIE9uIGFsbCBpLk1YcyBleGNlcHQgaS5NWDEgYW5kIGkuTVgyMSBtZm4gaXMgYSAxMGJpdAorCSAqIDIncyBjb21wbGVtZW50cyBudW1iZXIKKwkgKi8KKwlpZiAoIWNwdV9pc19teDEoKSAmJiAhY3B1X2lzX214MjEoKSAmJiBtZm4gPj0gMHgyMDApCisJCW1mbl9hYnMgPSAweDQwMCAtIG1mbjsKIAogCWZyZXEgKj0gMjsKIAlmcmVxIC89IHBkICsgMTsKQEAgLTM3Niw4ICsyMjIsMTAgQEAKIAlsbCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpZnJlcSAqIG1mbl9hYnM7CiAKIAlkb19kaXYobGwsIG1mZCArIDEpOwotCWlmIChtZm4gPCAwKQorCisJaWYgKCFjcHVfaXNfbXgxKCkgJiYgIWNwdV9pc19teDIxKCkgJiYgbWZuID49IDB4MjAwKQogCQlsbCA9IC1sbDsKKwogCWxsID0gKGZyZXEgKiBtZmkpICsgbGw7CiAKIAlyZXR1cm4gbGw7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKaW5kZXggNzUwNmQ5Ni4uY2ZjNGE4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwpAQCAtMjksNiArMjksMjMgQEAKIHN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCAqbXhjX2dwaW9fcG9ydHM7CiBzdGF0aWMgaW50IGdwaW9fdGFibGVfc2l6ZTsKIAorI2RlZmluZSBjcHVfaXNfbXgxX214MigpCShjcHVfaXNfbXgxKCkgfHwgY3B1X2lzX214MigpKQorCisjZGVmaW5lIEdQSU9fRFIJCShjcHVfaXNfbXgxX214MigpID8gMHgxYyA6IDB4MDApCisjZGVmaW5lIEdQSU9fR0RJUgkoY3B1X2lzX214MV9teDIoKSA/IDB4MDAgOiAweDA0KQorI2RlZmluZSBHUElPX1BTUgkoY3B1X2lzX214MV9teDIoKSA/IDB4MjQgOiAweDA4KQorI2RlZmluZSBHUElPX0lDUjEJKGNwdV9pc19teDFfbXgyKCkgPyAweDI4IDogMHgwQykKKyNkZWZpbmUgR1BJT19JQ1IyCShjcHVfaXNfbXgxX214MigpID8gMHgyQyA6IDB4MTApCisjZGVmaW5lIEdQSU9fSU1SCShjcHVfaXNfbXgxX214MigpID8gMHgzMCA6IDB4MTQpCisjZGVmaW5lIEdQSU9fSVNSCShjcHVfaXNfbXgxX214MigpID8gMHgzNCA6IDB4MTgpCisjZGVmaW5lIEdQSU9fSVNSCShjcHVfaXNfbXgxX214MigpID8gMHgzNCA6IDB4MTgpCisKKyNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkoY3B1X2lzX214MV9teDIoKSA/IDB4MyA6IDB4MCkKKyNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJKGNwdV9pc19teDFfbXgyKCkgPyAweDIgOiAweDEpCisjZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRQkoY3B1X2lzX214MV9teDIoKSA/IDB4MCA6IDB4MikKKyNkZWZpbmUgR1BJT19JTlRfRkFMTF9FREdFCShjcHVfaXNfbXgxX214MigpID8gMHgxIDogMHgzKQorI2RlZmluZSBHUElPX0lOVF9OT05FCQkweDQKKwogLyogTm90ZTogVGhpcyBkcml2ZXIgYXNzdW1lcyAzMiBHUElPcyBhcmUgaGFuZGxlZCBpbiBvbmUgcmVnaXN0ZXIgKi8KIAogc3RhdGljIHZvaWQgX2NsZWFyX2dwaW9faXJxc3RhdHVzKHN0cnVjdCBteGNfZ3Bpb19wb3J0ICpwb3J0LCB1MzIgaW5kZXgpCkBAIC0xNjIsNyArMTc5LDYgQEAKIAl9CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX01YMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWDEpCiAvKiBNWDEgYW5kIE1YMyBoYXMgb25lIGludGVycnVwdCAqcGVyKiBncGlvIHBvcnQgKi8KIHN0YXRpYyB2b2lkIG14M19ncGlvX2lycV9oYW5kbGVyKHUzMiBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKQEAgLTE3NCw5ICsxOTAsNyBAQAogCiAJbXhjX2dwaW9faXJxX2hhbmRsZXIocG9ydCwgaXJxX3N0YXQpOwogfQotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDIKIC8qIE1YMiBoYXMgb25lIGludGVycnVwdCAqZm9yIGFsbCogZ3BpbyBwb3J0cyAqLwogc3RhdGljIHZvaWQgbXgyX2dwaW9faXJxX2hhbmRsZXIodTMyIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewpAQCAtMTk1LDcgKzIwOSw2IEBACiAJCQlteGNfZ3Bpb19pcnFfaGFuZGxlcigmcG9ydFtpXSwgaXJxX3N0YXQpOwogCX0KIH0KLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdwaW9faXJxX2NoaXAgPSB7CiAJLmFjayA9IGdwaW9fYWNrX2lycSwKQEAgLTI4NCwxNyArMjk3LDE4IEBACiAJCS8qIGl0cyBhIHNlcmlvdXMgY29uZmlndXJhdGlvbiBidWcgd2hlbiBpdCBmYWlscyAqLwogCQlCVUdfT04oIGdwaW9jaGlwX2FkZCgmcG9ydFtpXS5jaGlwKSA8IDAgKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YMSkKLQkJLyogc2V0dXAgb25lIGhhbmRsZXIgZm9yIGVhY2ggZW50cnkgKi8KLQkJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIocG9ydFtpXS5pcnEsIG14M19ncGlvX2lycV9oYW5kbGVyKTsKLQkJc2V0X2lycV9kYXRhKHBvcnRbaV0uaXJxLCAmcG9ydFtpXSk7Ci0jZW5kaWYKKwkJaWYgKGNwdV9pc19teDEoKSB8fCBjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkgeworCQkJLyogc2V0dXAgb25lIGhhbmRsZXIgZm9yIGVhY2ggZW50cnkgKi8KKwkJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBvcnRbaV0uaXJxLCBteDNfZ3Bpb19pcnFfaGFuZGxlcik7CisJCQlzZXRfaXJxX2RhdGEocG9ydFtpXS5pcnEsICZwb3J0W2ldKTsKKwkJfQogCX0KIAotI2lmZGVmIENPTkZJR19BUkNIX01YMgotCS8qIHNldHVwIG9uZSBoYW5kbGVyIGZvciBhbGwgR1BJTyBpbnRlcnJ1cHRzICovCi0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIocG9ydFswXS5pcnEsIG14Ml9ncGlvX2lycV9oYW5kbGVyKTsKLQlzZXRfaXJxX2RhdGEocG9ydFswXS5pcnEsIHBvcnQpOwotI2VuZGlmCisJaWYgKGNwdV9pc19teDIoKSkgeworCQkvKiBzZXR1cCBvbmUgaGFuZGxlciBmb3IgYWxsIEdQSU8gaW50ZXJydXB0cyAqLworCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihwb3J0WzBdLmlycSwgbXgyX2dwaW9faXJxX2hhbmRsZXIpOworCQlzZXRfaXJxX2RhdGEocG9ydFswXS5pcnEsIHBvcnQpOworCX0KKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWFybWFkaWxsbzV4MC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLWFybWFkaWxsbzV4MC5oCmluZGV4IDg3NjllOTEuLjAzNzZjMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1hcm1hZGlsbG81eDAuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtYXJtYWRpbGxvNXgwLmgKQEAgLTEyLDExICsxMiw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX0FSTUFESUxMTzVYMF9IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfQVJNQURJTExPNVgwX0hfXwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtZXVrcmVhX2NwdWlteDI3LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtZXVrcmVhX2NwdWlteDI3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmZDU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1ldWtyZWFfY3B1aW14MjcuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWMgQmVuYXJkIC0gZXJpY0BldWtyZWEuY29tCisgKgorICogQmFzZWQgb24gYm9hcmQtcGNtMDM4Lmggd2hpY2ggaXMgOgorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfRVVLUkVBX0NQVUlNWDI3X0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9FVUtSRUFfQ1BVSU1YMjdfSF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisvKgorICogVGhpcyBDUFUgbW9kdWxlIG5lZWRzIGEgYmFzZWJvYXJkIHRvIHdvcmsuIEFmdGVyIGJhc2ljIGluaXRpYWxpemluZworICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgorICogVE9ETzogQWRkIHlvdXIgb3duIGJhc2Vib2FyZCBpbml0IGZ1bmN0aW9uIGFuZCBjYWxsIGl0IGZyb20KKyAqIGluc2lkZSBldWtyZWFfY3B1aW14MjdfaW5pdCgpLgorICoKKyAqIFRoaXMgZXhhbXBsZSBoZXJlIGlzIGZvciB0aGUgZGV2ZWxvcG1lbnQgYm9hcmQuIFJlZmVyCisgKiBldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQuYworICovCisKK2V4dGVybiB2b2lkIGV1a3JlYV9tYmlteDI3X2Jhc2Vib2FyZF9pbml0KHZvaWQpOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX0VVS1JFQV9DUFVJTVgyN19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDIxYWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyMWFkcy5oCmluZGV4IDA2NzAxZGYuLjBjZjRmYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDIxYWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjFhZHMuaApAQCAtMTUsMTIgKzE1LDYgQEAKICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyMUFEU19IX18KIAogLyoKLSAqIE1YQyBVQVJUIEVWQiBib2FyZCBsZXZlbCBjb25maWd1cmF0aW9ucwotICovCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSICAgICAgIFVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUiAgICAgICBBSVBJX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCi0vKgogICogTWVtb3J5LW1hcHBlZCBJL08gb24gTVgyMUFEUyBiYXNlIGJvYXJkCiAgKi8KICNkZWZpbmUgTVgyMUFEU19NTUlPX0JBU0VfQUREUiAgIDB4RjUwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN2Fkcy5oCmluZGV4IGQ0MmY0ZTYuLjc3NzZkMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaApAQCAtMjYsMTIgKzI2LDYgQEAKIAkJCQlNWENfTUFYX1ZJUlRVQUxfSU5UUykKIAogLyoKLSAqIE1YQyBVQVJUIEVWQiBib2FyZCBsZXZlbCBjb25maWd1cmF0aW9ucwotICovCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSICAgICAgIFVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUiAgICAgICBBSVBJX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCi0vKgogICogQG5hbWUgTWVtb3J5IFNpemUgcGFyYW1ldGVycwogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3bGl0ZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKaW5kZXggYTg3MGY4ZS4uZWE4NzU1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdsaXRlLmgKQEAgLTExLDkgKzExLDQgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgyN0xJVEVfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdMSVRFX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdMSVRFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdwZGsuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3cGRrLmgKaW5kZXggNTUyYjU1ZC4uZmVjMWJjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdwZGsuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN3Bkay5oCkBAIC0xMSw5ICsxMSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdQREtfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMjdQREtfSF9fCiAKLS8qIG1hbmRhdG9yeSBmb3IgQ09ORklHX0RFQlVHX0xMICovCi0KLSNkZWZpbmUgTVhDX0xMX1VBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1ZBRERSCUFJUFMxX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgyN1BES19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oCmluZGV4IDA2ZTY4OTUuLjJjYmZhMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaApAQCAtMTE0LDkgKzExNCw0IEBACiAKICNkZWZpbmUgTVhDX01BWF9FWFBfSU9fTElORVMJMTYKIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxQURTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaWxseS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFsaWxseS5oCmluZGV4IDc4Y2YzMWUuLmViNWE1MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGlsbHkuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpbGx5LmgKQEAgLTIyLDExICsyMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFMSUxMWV9IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMUxJTExZX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUgkoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MEEwMDApCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIGVudW0gbXgzMWxpbGx5X2JvYXJkcyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWxpdGUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCmluZGV4IDUyZmJkZjIuLjhlNjQzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbGl0ZS5oCkBAIC0xMSw4ICsxMSw1IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFMSVRFX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxTElURV9IX18KIAotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19CT0FSRF9NWDMxTElURV9IX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFtb2JvYXJkLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaAppbmRleCAzMDNmZDI0Li5kNWJlNmI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaApAQCAtMTksMTEgKzE5LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMU1PQk9BUkRfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFNT0JPQVJEX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUgkoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MEEwMDApCi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIGVudW0gbXgzMW1vYm9hcmRfYm9hcmRzIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxcGRrLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMXBkay5oCmluZGV4IDUxOWJhYjMuLjJiYmQ2ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxcGRrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFwZGsuaApAQCAtMTEsMTEgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMVBES19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMVBES19IX18KIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KIC8qIERlZmluaXRpb25zIGZvciBjb21wb25lbnRzIG9uIHRoZSBEZWJ1ZyBib2FyZCAqLwogCiAvKiBCYXNlIGFkZHJlc3Mgb2YgQ1BMRCBjb250cm9sbGVyIG9uIHRoZSBEZWJ1ZyBib2FyZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzVwZGsuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDM1cGRrLmgKaW5kZXggMTExMTAzNy4uMzgzZjFjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzVwZGsuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzNXBkay5oCkBAIC0xOSw5ICsxOSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzVQREtfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzVQREtfSF9fCiAKLS8qIG1hbmRhdG9yeSBmb3IgQ09ORklHX0RFQlVHX0xMICovCi0KLSNkZWZpbmUgTVhDX0xMX1VBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1ZBRERSCUFJUFMxX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQotCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgzNVBES19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzcuaAppbmRleCBmMGExZmExLi4xMzQxMTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDM3LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTAzNy5oCkBAIC0xOSw5ICsxOSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTAzN19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDM3X0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTAzN19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzguaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wMzguaAppbmRleCA0ZmNkNzQ5Li40MTBmOTc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDM4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTAzOC5oCkBAIC0xOSwxMSArMTksNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19CT0FSRF9QQ00wMzhfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTAzOF9IX18KIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJKEFJUElfQkFTRV9BRERSX1ZJUlQgKyAweDBBMDAwKQotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKICAqIFRoaXMgQ1BVIG1vZHVsZSBuZWVkcyBhIGJhc2Vib2FyZCB0byB3b3JrLiBBZnRlciBiYXNpYyBpbml0aWFsaXppbmcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wNDMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1wY20wNDMuaAppbmRleCAxNWZiZGYxLi4xYWM0ZTE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcGNtMDQzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXBjbTA0My5oCkBAIC0xOSw5ICsxOSw0IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTA0M19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUENNMDQzX0hfXwogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLwotCi0jZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgotI2RlZmluZSBNWENfTExfVUFSVF9WQUREUglBSVBTMV9JT19BRERSRVNTKFVBUlQxX0JBU0VfQUREUikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1BDTTA0M19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1xb25nLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcW9uZy5oCmluZGV4IDA0MDMzZWMuLjZkODhjN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1xb25nLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaApAQCAtMTEsMTEgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KIAotLyogbWFuZGF0b3J5IGZvciBDT05GSUdfREVCVUdfTEwgKi8KLQotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KIC8qIE5PUiBGTEFTSCAqLwogI2RlZmluZSBRT05HX05PUl9TSVpFCQkoMTI4KjEwMjQqMTAyNCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IDAyYzNjZDAuLjI4NmNiOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKQEAgLTE2LDE4ICsxNiwzMyBAQAogCiBleHRlcm4gdm9pZCBteDFfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgyMV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBteDI1X21hcF9pbyh2b2lkKTsKIGV4dGVybiB2b2lkIG14MjdfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgzMV9tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBteDM1X21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIG14Y19pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsayk7CitleHRlcm4gdm9pZCBteGM5MTIzMV9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBteGNfaW5pdF9pcnEodm9pZCBfX2lvbWVtICopOworZXh0ZXJuIHZvaWQgbXgxX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbXgyMV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIG14MjVfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBteDI3X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbXgzMV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIG14MzVfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBteGM5MTIzMV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsaywgdm9pZCBfX2lvbWVtICosIGludCk7CiBleHRlcm4gaW50IG14MV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiBpbnQgbXgyNV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteDI3X2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CiBleHRlcm4gaW50IG14MzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKIGV4dGVybiBpbnQgbXgzNV9jbG9ja3NfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgbXhjOTEyMzFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKIGV4dGVybiBpbnQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpOwogZXh0ZXJuIGludCBteGNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEpOwogZXh0ZXJuIHZvaWQgbXhjX3NldF9jcHVfdHlwZSh1bnNpZ25lZCBpbnQgdHlwZSk7CitleHRlcm4gdm9pZCBteGNfYXJjaF9yZXNldF9pbml0KHZvaWQgX19pb21lbSAqKTsKK2V4dGVybiB2b2lkIG14YzkxMjMxX3Bvd2VyX29mZih2b2lkKTsKK2V4dGVybiB2b2lkIG14YzkxMjMxX2FyY2hfcmVzZXQoaW50LCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgbXhjOTEyMzFfcHJlcGFyZV9pZGxlKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggYmJjNWY2Ny4uMTViMmIxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDUyICsxMSw1MiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2lmZGVmIENPTkZJR19BUkNIX01YMQorI2luY2x1ZGUgPG1hY2gvbXgxLmg+CisjZGVmaW5lIFVBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCisjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NQUNIX01YMzFBRFMKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFhZHMuaD4KKyNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjaWZkZWYgVUFSVF9QQUREUgorI2Vycm9yICJDT05GSUdfREVCVUdfTEwgaXMgaW5jb21wYXRpYmxlIHdpdGggbXVsdGlwbGUgYXJjaHMiCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9QQ00wMzcKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXBjbTAzNy5oPgorI2luY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2RlZmluZSBVQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBVQVJUX1ZBRERSCU1YMjVfQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDMxTElURQotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWxpdGUuaD4KKworI2lmZGVmIENPTkZJR19BUkNIX01YMgorI2lmZGVmIFVBUlRfUEFERFIKKyNlcnJvciAiQ09ORklHX0RFQlVHX0xMIGlzIGluY29tcGF0aWJsZSB3aXRoIG11bHRpcGxlIGFyY2hzIgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyN0FEUwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN2Fkcy5oPgorI2luY2x1ZGUgPG1hY2gvbXgyeC5oPgorI2RlZmluZSBVQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBVQVJUX1ZBRERSCUFJUElfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDIxQURTCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDIxYWRzLmg+CisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDMKKyNpZmRlZiBVQVJUX1BBRERSCisjZXJyb3IgIkNPTkZJR19ERUJVR19MTCBpcyBpbmNvbXBhdGlibGUgd2l0aCBtdWx0aXBsZSBhcmNocyIKICNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1BDTTAzOAotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM4Lmg+CisjaW5jbHVkZSA8bWFjaC9teDN4Lmg+CisjZGVmaW5lIFVBUlRfUEFERFIJVUFSVDFfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDMxXzNEUwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMXBkay5oPgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVhDOTEyMzEKKyNpZmRlZiBVQVJUX1BBRERSCisjZXJyb3IgIkNPTkZJR19ERUJVR19MTCBpcyBpbmNvbXBhdGlibGUgd2l0aCBtdWx0aXBsZSBhcmNocyIKICNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1FPTkcKLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXFvbmcuaD4KLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1BDTTA0MwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDQzLmg+Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3XzNEUwotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN3Bkay5oPgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BQ0hfQVJNQURJTExPNVgwCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1hcm1hZGlsbG81eDAuaD4KLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX01YMzVfM0RTCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDM1cGRrLmg+Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3TElURQotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN2xpdGUuaD4KKyNpbmNsdWRlIDxtYWNoL214YzkxMjMxLmg+CisjZGVmaW5lIFVBUlRfUEFERFIJTVhDOTEyMzFfVUFSVDJfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJTVhDOTEyMzFfQUlQUzFfSU9fQUREUkVTUyhNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIpCiAjZW5kaWYKIAkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KLQkJbGRyZXEJXHJ4LCA9TVhDX0xMX1VBUlRfUEFERFIJQCBwaHlzaWNhbAotCQlsZHJuZQlccngsID1NWENfTExfVUFSVF9WQUREUglAIHZpcnR1YWwKKwkJbGRyZXEJXHJ4LCA9VUFSVF9QQUREUglAIHBoeXNpY2FsCisJCWxkcm5lCVxyeCwgPVVBUlRfVkFERFIJQCB2aXJ0dWFsCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCmluZGV4IDVmMDFkNjAuLjdjZjI5MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xOCw3ICsxOCw4IEBACiAJLmVuZG0KIAogCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKLQlsZHIJXGJhc2UsID1BVklDX0lPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpCisJbGRyCVxiYXNlLCA9YXZpY19iYXNlCisJbGRyCVxiYXNlLCBbXGJhc2VdCiAjaWZkZWYgQ09ORklHX01YQ19JUlFfUFJJT1IKIAlsZHIJcjQsIFtcYmFzZSwgI0FWSUNfTklNQVNLXQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDQyZTRlZTMuLjc4ZGI3NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC00Miw2ICs0MiwxNCBAQAogIyBpbmNsdWRlIDxtYWNoL214MS5oPgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjIGluY2x1ZGUgPG1hY2gvbXgyNS5oPgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWEM5MTIzMQorIyBpbmNsdWRlIDxtYWNoL214YzkxMjMxLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPG1hY2gvbXhjLmg+CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKaW5kZXggOWYwMTAxMS4uNTI2MzUwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lteGZiLmgKQEAgLTIsNiArMiw4IEBACiAgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgdGhlIG1hY2hpbmUgd2hpY2ggd2UgYXJlIHJ1bm5pbmcgb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisKICNkZWZpbmUgUENSX1RGVAkJKDEgPDwgMzEpCiAjZGVmaW5lIFBDUl9DT0xPUgkoMSA8PCAzMCkKICNkZWZpbmUgUENSX1BCU0laXzEJKDAgPDwgMjgpCkBAIC0xMyw3ICsxNSw4IEBACiAjZGVmaW5lIFBDUl9CUElYXzQJKDIgPDwgMjUpCiAjZGVmaW5lIFBDUl9CUElYXzgJKDMgPDwgMjUpCiAjZGVmaW5lIFBDUl9CUElYXzEyCSg0IDw8IDI1KQotI2RlZmluZSBQQ1JfQlBJWF8xNgkoNCA8PCAyNSkKKyNkZWZpbmUgUENSX0JQSVhfMTYJKDUgPDwgMjUpCisjZGVmaW5lIFBDUl9CUElYXzE4CSg2IDw8IDI1KQogI2RlZmluZSBQQ1JfUElYUE9MCSgxIDw8IDI0KQogI2RlZmluZSBQQ1JfRkxNUE9MCSgxIDw8IDIzKQogI2RlZmluZSBQQ1JfTFBQT0wJKDEgPDwgMjIpCkBAIC00NiwyOSArNDksMjEgQEAKICNkZWZpbmUgRE1BQ1JfSE0oeCkJKCgoeCkgJiAweGYpIDw8IDE2KQogI2RlZmluZSBETUFDUl9UTSh4KQkoKHgpICYgMHhmKQogCitzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSB7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOworCXUzMiBwY3I7CisJdW5zaWduZWQgY2hhcglicHA7Cit9OworCiBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgewotCXVfbG9uZwkJcGl4Y2xvY2s7Ci0KLQl1X3Nob3J0CQl4cmVzOwotCXVfc2hvcnQJCXlyZXM7Ci0KLQl1X2ludAkJbm9uc3RkOwotCXVfY2hhcgkJYnBwOwotCXVfY2hhcgkJaHN5bmNfbGVuOwotCXVfY2hhcgkJbGVmdF9tYXJnaW47Ci0JdV9jaGFyCQlyaWdodF9tYXJnaW47Ci0KLQl1X2NoYXIJCXZzeW5jX2xlbjsKLQl1X2NoYXIJCXVwcGVyX21hcmdpbjsKLQl1X2NoYXIJCWxvd2VyX21hcmdpbjsKLQl1X2NoYXIJCXN5bmM7CisJc3RydWN0IGlteF9mYl92aWRlb21vZGUgKm1vZGU7CisJaW50CQludW1fbW9kZXM7CiAKIAl1X2ludAkJY21hcF9ncmV5c2NhbGU6MSwKIAkJCWNtYXBfaW52ZXJzZToxLAogCQkJY21hcF9zdGF0aWM6MSwKIAkJCXVudXNlZDoyOTsKIAotCXVfaW50CQlwY3I7CiAJdV9pbnQJCXB3bXI7CiAJdV9pbnQJCWxzY3IxOwogCXVfaW50CQlkbWFjcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMGM0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCkBAIC0wLDAgKzEsNTE3IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBMb3RoYXIgV2Fzc21hbm4gPExXQEtBUk8tZWxlY3Ryb25pY3MuZGU+CisgKgorICogYmFzZWQgb24gYXJjaC9hcm0vbWFjaC1teDI1L214MjVfcGlucy5oCisgKiAgICBDb3B5cmlnaHQgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogYW5kCisgKiBhcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oCisgKiAgICBDb3B5cmlnaHQgKEMsIE5PX1BBRF9DVFJMKSAyMDA5IGJ5IEphbiBXZWl0emVsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJIIDxhcm1saW51eEBwaHl0ZWMuZGU+CisgKgorICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqLworI2lmbmRlZiBfX0lPTVVYX01YMjVfSF9fCisjZGVmaW5lIF9fSU9NVVhfTVgyNV9IX18KKworI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KKworI2lmbmRlZiBHUElPX1BPUlRBCisjZXJyb3IgUGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC5oCisjZW5kaWYKKworLyoKKyAqCisgKiBAYnJpZWYgTVgyNSBJL08gUGluIExpc3QKKyAqCisgKiBAaW5ncm91cCBHUElPX01YMjUKKyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogSU9NVVgvUEFEIEJpdCBmaWVsZCBkZWZpbml0aW9ucworICovCisKKyNkZWZpbmUgTVgyNV9QQURfQTEwX19BMTAJCUlPTVVYX1BBRCgweDAwMCwgMHgwMDgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMTBfX0dQSU9fNF8wCQlJT01VWF9QQUQoMHgwMDAsIDB4MDA4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMTNfX0ExMwkJSU9NVVhfUEFEKDB4MjJDLCAweDAwYywgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ExM19fR1BJT180XzEJCUlPTVVYX1BBRCgweDIyQywgMHgwMGMsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ExNF9fQTE0CQlJT01VWF9QQUQoMHgyMzAsIDB4MDEwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE0X19HUElPXzJfMAkJSU9NVVhfUEFEKDB4MjMwLCAweDAxMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTE1X19BMTUJCUlPTVVYX1BBRCgweDIzNCwgMHgwMTQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMTVfX0dQSU9fMl8xCQlJT01VWF9QQUQoMHgyMzQsIDB4MDE0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMTZfX0ExNgkJSU9NVVhfUEFEKDB4MDAwLCAweDAxOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ExNl9fR1BJT18yXzIJCUlPTVVYX1BBRCgweDAwMCwgMHgwMTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ExN19fQTE3CQlJT01VWF9QQUQoMHgyMzgsIDB4MDFjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE3X19HUElPXzJfMwkJSU9NVVhfUEFEKDB4MjM4LCAweDAxYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTE4X19BMTgJCUlPTVVYX1BBRCgweDIzYywgMHgwMjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMThfX0dQSU9fMl80CQlJT01VWF9QQUQoMHgyM2MsIDB4MDIwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE4X19GRUNfQ09MCQlJT01VWF9QQUQoMHgyM2MsIDB4MDIwLCAweDE3LCAweDUwNCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMTlfX0ExOQkJSU9NVVhfUEFEKDB4MjQwLCAweDAyNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ExOV9fRkVDX1JYX0VSCQlJT01VWF9QQUQoMHgyNDAsIDB4MDI0LCAweDE3LCAweDUxOCwgMCwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfQTE5X19HUElPXzJfNQkJSU9NVVhfUEFEKDB4MjQwLCAweDAyNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTIwX19BMjAJCUlPTVVYX1BBRCgweDI0NCwgMHgwMjgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMjBfX0dQSU9fMl82CQlJT01VWF9QQUQoMHgyNDQsIDB4MDI4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTIwX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDI0NCwgMHgwMjgsIDB4MTcsIDB4NTBjLCAwLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0EyMV9fQTIxCQlJT01VWF9QQUQoMHgyNDgsIDB4MDJjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTIxX19HUElPXzJfNwkJSU9NVVhfUEFEKDB4MjQ4LCAweDAyYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyMV9fRkVDX1JEQVRBMwlJT01VWF9QQUQoMHgyNDgsIDB4MDJjLCAweDE3LCAweDUxMCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMjJfX0EyMgkJSU9NVVhfUEFEKDB4MDAwLCAweDAzMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyMl9fR1BJT18yXzgJCUlPTVVYX1BBRCgweDAwMCwgMHgwMzAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0EyM19fQTIzCQlJT01VWF9QQUQoMHgyNGMsIDB4MDM0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTIzX19HUElPXzJfOQkJSU9NVVhfUEFEKDB4MjRjLCAweDAzNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQTI0X19BMjQJCUlPTVVYX1BBRCgweDI1MCwgMHgwMzgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9BMjRfX0dQSU9fMl8xMAkJSU9NVVhfUEFEKDB4MjUwLCAweDAzOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyNF9fRkVDX1JYX0NMSwlJT01VWF9QQUQoMHgyNTAsIDB4MDM4LCAweDE3LCAweDUxNCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9BMjVfX0EyNQkJSU9NVVhfUEFEKDB4MjU0LCAweDAzYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0EyNV9fR1BJT18yXzExCQlJT01VWF9QQUQoMHgyNTQsIDB4MDNjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQTI1X19GRUNfQ1JTCQlJT01VWF9QQUQoMHgyNTQsIDB4MDNjLCAweDE3LCAweDUwOCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9FQjBfX0VCMAkJSU9NVVhfUEFEKDB4MjU4LCAweDA0MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0VCMF9fQVVENF9UWEQJCUlPTVVYX1BBRCgweDI1OCwgMHgwNDAsIDB4MTQsIDB4NDY0LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRUIwX19HUElPXzJfMTIJCUlPTVVYX1BBRCgweDI1OCwgMHgwNDAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0VCMV9fRUIxCQlJT01VWF9QQUQoMHgyNWMsIDB4MDQ0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRUIxX19BVUQ0X1JYRAkJSU9NVVhfUEFEKDB4MjVjLCAweDA0NCwgMHgxNCwgMHg0NjAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9FQjFfX0dQSU9fMl8xMwkJSU9NVVhfUEFEKDB4MjVjLCAweDA0NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfT0VfX09FCQkJSU9NVVhfUEFEKDB4MjYwLCAweDA0OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX09FX19BVUQ0X1RYQwkJSU9NVVhfUEFEKDB4MjYwLCAweDA0OCwgMHgxNCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX09FX19HUElPXzJfMTQJCUlPTVVYX1BBRCgweDI2MCwgMHgwNDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTMF9fQ1MwCQlJT01VWF9QQUQoMHgwMDAsIDB4MDRjLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1MwX19HUElPXzRfMgkJSU9NVVhfUEFEKDB4MDAwLCAweDA0YywgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1MxX19DUzEJCUlPTVVYX1BBRCgweDAwMCwgMHgwNTAsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DUzFfX0dQSU9fNF8zCQlJT01VWF9QQUQoMHgwMDAsIDB4MDUwLCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DUzRfX0NTNAkJSU9NVVhfUEFEKDB4MjY0LCAweDA1NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTNF9fVUFSVDVfQ1RTCQlJT01VWF9QQUQoMHgyNjQsIDB4MDU0LCAweDEzLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1M0X19HUElPXzNfMjAJCUlPTVVYX1BBRCgweDI2NCwgMHgwNTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTNV9fQ1M1CQlJT01VWF9QQUQoMHgyNjgsIDB4MDU4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1M1X19VQVJUNV9SVFMJCUlPTVVYX1BBRCgweDI2OCwgMHgwNTgsIDB4MTMsIDB4NTc0LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1M1X19HUElPXzNfMjEJCUlPTVVYX1BBRCgweDI2OCwgMHgwNTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX05GX0NFMF9fTkZfQ0UwCQlJT01VWF9QQUQoMHgyNmMsIDB4MDVjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9ORl9DRTBfX0dQSU9fM18yMglJT01VWF9QQUQoMHgyNmMsIDB4MDVjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9FQ0JfX0VDQgkJSU9NVVhfUEFEKDB4MjcwLCAweDA2MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0VDQl9fVUFSVDVfVFhEX01VWAlJT01VWF9QQUQoMHgyNzAsIDB4MDYwLCAweDEzLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRUNCX19HUElPXzNfMjMJCUlPTVVYX1BBRCgweDI3MCwgMHgwNjAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xCQV9fTEJBCQlJT01VWF9QQUQoMHgyNzQsIDB4MDY0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEJBX19VQVJUNV9SWERfTVVYCUlPTVVYX1BBRCgweDI3NCwgMHgwNjQsIDB4MTMsIDB4NTc4LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEJBX19HUElPXzNfMjQJCUlPTVVYX1BBRCgweDI3NCwgMHgwNjQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0JDTEtfX0JDTEsJCUlPTVVYX1BBRCgweDAwMCwgMHgwNjgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9CQ0xLX19HUElPXzRfNAkJSU9NVVhfUEFEKDB4MDAwLCAweDA2OCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfUldfX1JXCQkJSU9NVVhfUEFEKDB4Mjc4LCAweDA2YywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1JXX19BVUQ0X1RYRlMJCUlPTVVYX1BBRCgweDI3OCwgMHgwNmMsIDB4MTQsIDB4NDc0LCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfUldfX0dQSU9fM18yNQkJSU9NVVhfUEFEKDB4Mjc4LCAweDA2YywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfTkZXRV9CX19ORldFX0IJCUlPTVVYX1BBRCgweDAwMCwgMHgwNzAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9ORldFX0JfX0dQSU9fM18yNglJT01VWF9QQUQoMHgwMDAsIDB4MDcwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9ORlJFX0JfX05GUkVfQgkJSU9NVVhfUEFEKDB4MDAwLCAweDA3NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX05GUkVfQl9fR1BJT18zXzI3CUlPTVVYX1BBRCgweDAwMCwgMHgwNzQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX05GQUxFX19ORkFMRQkJSU9NVVhfUEFEKDB4MDAwLCAweDA3OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX05GQUxFX19HUElPXzNfMjgJSU9NVVhfUEFEKDB4MDAwLCAweDA3OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfTkZDTEVfX05GQ0xFCQlJT01VWF9QQUQoMHgwMDAsIDB4MDdjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTkZDTEVfX0dQSU9fM18yOQlJT01VWF9QQUQoMHgwMDAsIDB4MDdjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9ORldQX0JfX05GV1BfQgkJSU9NVVhfUEFEKDB4MDAwLCAweDA4MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX05GV1BfQl9fR1BJT18zXzMwCUlPTVVYX1BBRCgweDAwMCwgMHgwODAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX05GUkJfX05GUkIJCUlPTVVYX1BBRCgweDI3YywgMHgwODQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQorI2RlZmluZSBNWDI1X1BBRF9ORlJCX19HUElPXzNfMzEJSU9NVVhfUEFEKDB4MjdjLCAweDA4NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDE1X19EMTUJCUlPTVVYX1BBRCgweDI4MCwgMHgwODgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTVfX0xEMTYJCUlPTVVYX1BBRCgweDI4MCwgMHgwODgsIDB4MDEsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTVfX0dQSU9fNF81CQlJT01VWF9QQUQoMHgyODAsIDB4MDg4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9EMTRfX0QxNAkJSU9NVVhfUEFEKDB4Mjg0LCAweDA4YywgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxNF9fTEQxNwkJSU9NVVhfUEFEKDB4Mjg0LCAweDA4YywgMHgwMSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxNF9fR1BJT180XzYJCUlPTVVYX1BBRCgweDI4NCwgMHgwOGMsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QxM19fRDEzCQlJT01VWF9QQUQoMHgyODgsIDB4MDkwLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDEzX19MRDE4CQlJT01VWF9QQUQoMHgyODgsIDB4MDkwLCAweDAxLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDEzX19HUElPXzRfNwkJSU9NVVhfUEFEKDB4Mjg4LCAweDA5MCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDEyX19EMTIJCUlPTVVYX1BBRCgweDI4YywgMHgwOTQsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTJfX0dQSU9fNF84CQlJT01VWF9QQUQoMHgyOGMsIDB4MDk0LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9EMTFfX0QxMQkJSU9NVVhfUEFEKDB4MjkwLCAweDA5OCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxMV9fR1BJT180XzkJCUlPTVVYX1BBRCgweDI5MCwgMHgwOTgsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QxMF9fRDEwCQlJT01VWF9QQUQoMHgyOTQsIDB4MDljLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDEwX19HUElPXzRfMTAJCUlPTVVYX1BBRCgweDI5NCwgMHgwOWMsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMTBfX1VTQk9UR19PQwkJSU9NVVhfUEFEKDB4Mjk0LCAweDA5YywgMHgwNiwgMHg1N2MsIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCisKKyNkZWZpbmUgTVgyNV9QQURfRDlfX0Q5CQkJSU9NVVhfUEFEKDB4Mjk4LCAweDBhMCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q5X19HUElPXzRfMTEJCUlPTVVYX1BBRCgweDI5OCwgMHgwYTAsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EOV9fVVNCSDJfUFdSCQlJT01VWF9QQUQoMHgyOTgsIDB4MGEwLCAweDA2LCAwLCAwLCBQQURfQ1RMX1BLRSkKKworI2RlZmluZSBNWDI1X1BBRF9EOF9fRDgJCQlJT01VWF9QQUQoMHgyOWMsIDB4MGE0LCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDhfX0dQSU9fNF8xMgkJSU9NVVhfUEFEKDB4MjljLCAweDBhNCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q4X19VU0JIMl9PQwkJSU9NVVhfUEFEKDB4MjljLCAweDBhNCwgMHgwNiwgMHg1ODAsIDAsIFBBRF9DVExfUFVTXzEwMEtfVVApCisKKyNkZWZpbmUgTVgyNV9QQURfRDdfX0Q3CQkJSU9NVVhfUEFEKDB4MmEwLCAweDBhOCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q3X19HUElPXzRfMTMJCUlPTVVYX1BBRCgweDJhMCwgMHgwYTgsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0Q2X19ENgkJCUlPTVVYX1BBRCgweDJhNCwgMHgwYWMsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9ENl9fR1BJT180XzE0CQlJT01VWF9QQUQoMHgyYTQsIDB4MGFjLCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9ENV9fRDUJCQlJT01VWF9QQUQoMHgyYTgsIDB4MGIwLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDVfX0dQSU9fNF8xNQkJSU9NVVhfUEFEKDB4MmE4LCAweDBiMCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDRfX0Q0CQkJSU9NVVhfUEFEKDB4MmFjLCAweDBiNCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0Q0X19HUElPXzRfMTYJCUlPTVVYX1BBRCgweDJhYywgMHgwYjQsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QzX19EMwkJCUlPTVVYX1BBRCgweDJiMCwgMHgwYjgsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EM19fR1BJT180XzE3CQlJT01VWF9QQUQoMHgyYjAsIDB4MGI4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9EMl9fRDIJCQlJT01VWF9QQUQoMHgyYjQsIDB4MGJjLCAweDAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRDJfX0dQSU9fNF8xOAkJSU9NVVhfUEFEKDB4MmI0LCAweDBiYywgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRDFfX0QxCQkJSU9NVVhfUEFEKDB4MmI4LCAweDBjMCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0QxX19HUElPXzRfMTkJCUlPTVVYX1BBRCgweDJiOCwgMHgwYzAsIDB4MDUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0QwX19EMAkJCUlPTVVYX1BBRCgweDJiYywgMHgwYzQsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9EMF9fR1BJT180XzIwCQlJT01VWF9QQUQoMHgyYmMsIDB4MGM0LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDBfX0xEMAkJSU9NVVhfUEFEKDB4MmMwLCAweDBjOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMF9fQ1NJX0QwCQlJT01VWF9QQUQoMHgyYzAsIDB4MGM4LCAweDEyLCAweDQ4OCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMF9fR1BJT18yXzE1CQlJT01VWF9QQUQoMHgyYzAsIDB4MGM4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDFfX0xEMQkJSU9NVVhfUEFEKDB4MmM0LCAweDBjYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMV9fQ1NJX0QxCQlJT01VWF9QQUQoMHgyYzQsIDB4MGNjLCAweDEyLCAweDQ4YywgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMV9fR1BJT18yXzE2CQlJT01VWF9QQUQoMHgyYzQsIDB4MGNjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDJfX0xEMgkJSU9NVVhfUEFEKDB4MmM4LCAweDBkMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMl9fR1BJT18yXzE3CQlJT01VWF9QQUQoMHgyYzgsIDB4MGQwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDNfX0xEMwkJSU9NVVhfUEFEKDB4MmNjLCAweDBkNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEM19fR1BJT18yXzE4CQlJT01VWF9QQUQoMHgyY2MsIDB4MGQ0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDRfX0xENAkJSU9NVVhfUEFEKDB4MmQwLCAweDBkOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xENF9fR1BJT18yXzE5CQlJT01VWF9QQUQoMHgyZDAsIDB4MGQ4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDVfX0xENQkJSU9NVVhfUEFEKDB4MmQ0LCAweDBkYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xENV9fR1BJT18xXzE5CQlJT01VWF9QQUQoMHgyZDQsIDB4MGRjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDZfX0xENgkJSU9NVVhfUEFEKDB4MmQ4LCAweDBlMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xENl9fR1BJT18xXzIwCQlJT01VWF9QQUQoMHgyZDgsIDB4MGUwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDdfX0xENwkJSU9NVVhfUEFEKDB4MmRjLCAweDBlNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEN19fR1BJT18xXzIxCQlJT01VWF9QQUQoMHgyZGMsIDB4MGU0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDhfX0xEOAkJSU9NVVhfUEFEKDB4MmUwLCAweDBlOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEOF9fRkVDX1RYX0VSUglJT01VWF9QQUQoMHgyZTAsIDB4MGU4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEOV9fTEQ5CQlJT01VWF9QQUQoMHgyZTQsIDB4MGVjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEQ5X19GRUNfQ09MCQlJT01VWF9QQUQoMHgyZTQsIDB4MGVjLCAweDE1LCAweDUwNCwgMSwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDEwX19MRDEwCQlJT01VWF9QQUQoMHgyZTgsIDB4MGYwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEQxMF9fRkVDX1JYX0VSCUlPTVVYX1BBRCgweDJlOCwgMHgwZjAsIDB4MTUsIDB4NTE4LCAxLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEMTFfX0xEMTEJCUlPTVVYX1BBRCgweDJlYywgMHgwZjQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9MRDExX19GRUNfUkRBVEEyCUlPTVVYX1BBRCgweDJlYywgMHgwZjQsIDB4MTUsIDB4NTBjLCAxLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEMTJfX0xEMTIJCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEyX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDJmMCwgMHgwZjgsIDB4MTUsIDB4NTEwLCAxLCBOT19QQURfQ1RMKQorCisjZGVmaW5lIE1YMjVfUEFEX0xEMTNfX0xEMTMJCUlPTVVYX1BBRCgweDJmNCwgMHgwZmMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9MRDEzX19GRUNfVERBVEEyCUlPTVVYX1BBRCgweDJmNCwgMHgwZmMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVEwpCisKKyNkZWZpbmUgTVgyNV9QQURfTEQxNF9fTEQxNAkJSU9NVVhfUEFEKDB4MmY4LCAweDEwMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0xEMTRfX0ZFQ19UREFUQTMJSU9NVVhfUEFEKDB4MmY4LCAweDEwMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9MRDE1X19MRDE1CQlJT01VWF9QQUQoMHgyZmMsIDB4MTA0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTEQxNV9fRkVDX1JYX0NMSwlJT01VWF9QQUQoMHgyZmMsIDB4MTA0LCAweDE1LCAweDUxNCwgMSwgTk9fUEFEX0NUTCkKKworI2RlZmluZSBNWDI1X1BBRF9IU1lOQ19fSFNZTkMJCUlPTVVYX1BBRCgweDMwMCwgMHgxMDgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9IU1lOQ19fR1BJT18xXzIyCUlPTVVYX1BBRCgweDMwMCwgMHgxMDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1ZTWU5DX19WU1lOQwkJSU9NVVhfUEFEKDB4MzA0LCAweDEwYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1ZTWU5DX19HUElPXzFfMjMJSU9NVVhfUEFEKDB4MzA0LCAweDEwYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfTFNDTEtfX0xTQ0xLCQlJT01VWF9QQUQoMHgzMDgsIDB4MTEwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfTFNDTEtfX0dQSU9fMV8yNAlJT01VWF9QQUQoMHgzMDgsIDB4MTEwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9PRV9BQ0RfX09FX0FDRAkJSU9NVVhfUEFEKDB4MzBjLCAweDExNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX09FX0FDRF9fR1BJT18xXzI1CUlPTVVYX1BBRCgweDMwYywgMHgxMTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NPTlRSQVNUX19DT05UUkFTVAlJT01VWF9QQUQoMHgzMTAsIDB4MTE4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ09OVFJBU1RfX0ZFQ19DUlMJSU9NVVhfUEFEKDB4MzEwLCAweDExOCwgMHgxNSwgMHg1MDgsIDEsIE5PX1BBRF9DVEwpCisKKyNkZWZpbmUgTVgyNV9QQURfUFdNX19QV00JCUlPTVVYX1BBRCgweDMxNCwgMHgxMWMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9QV01fX0dQSU9fMV8yNgkJSU9NVVhfUEFEKDB4MzE0LCAweDExYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1BXTV9fVVNCSDJfT0MJCUlPTVVYX1BBRCgweDMxNCwgMHgxMWMsIDB4MTYsIDB4NTgwLCAxLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9EMl9fQ1NJX0QyCQlJT01VWF9QQUQoMHgzMTgsIDB4MTIwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0QyX19VQVJUNV9SWERfTVVYCUlPTVVYX1BBRCgweDMxOCwgMHgxMjAsIDB4MTEsIDB4NTc4LCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0QyX19HUElPXzFfMjcJSU9NVVhfUEFEKDB4MzE4LCAweDEyMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0QzX19DU0lfRDMJCUlPTVVYX1BBRCgweDMxYywgMHgxMjQsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DU0lfRDNfX0dQSU9fMV8yOAlJT01VWF9QQUQoMHgzMWMsIDB4MTI0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfRDRfX0NTSV9ENAkJSU9NVVhfUEFEKDB4MzIwLCAweDEyOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9ENF9fVUFSVDVfUlRTCUlPTVVYX1BBRCgweDMyMCwgMHgxMjgsIDB4MTEsIDB4NTc0LCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q0X19HUElPXzFfMjkJSU9NVVhfUEFEKDB4MzIwLCAweDEyOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q1X19DU0lfRDUJCUlPTVVYX1BBRCgweDMyNCwgMHgxMmMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DU0lfRDVfX0dQSU9fMV8zMAlJT01VWF9QQUQoMHgzMjQsIDB4MTJjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfRDZfX0NTSV9ENgkJSU9NVVhfUEFEKDB4MzI4LCAweDEzMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9ENl9fR1BJT18xXzMxCUlPTVVYX1BBRCgweDMyOCwgMHgxMzAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9EN19fQ1NJX0Q3CQlJT01VWF9QQUQoMHgzMmMsIDB4MTM0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q3X19HUElPXzFfNglJT01VWF9QQUQoMHgzMmMsIDB4MTM0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfRDhfX0NTSV9EOAkJSU9NVVhfUEFEKDB4MzMwLCAweDEzOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9EOF9fR1BJT18xXzcJSU9NVVhfUEFEKDB4MzMwLCAweDEzOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0Q5X19DU0lfRDkJCUlPTVVYX1BBRCgweDMzNCwgMHgxM2MsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DU0lfRDlfX0dQSU9fNF8yMQlJT01VWF9QQUQoMHgzMzQsIDB4MTNjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfTUNMS19fQ1NJX01DTEsJSU9NVVhfUEFEKDB4MzM4LCAweDE0MCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTSV9NQ0xLX19HUElPXzFfOAlJT01VWF9QQUQoMHgzMzgsIDB4MTQwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfVlNZTkNfX0NTSV9WU1lOQwlJT01VWF9QQUQoMHgzM2MsIDB4MTQ0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX1ZTWU5DX19HUElPXzFfOQlJT01VWF9QQUQoMHgzM2MsIDB4MTQ0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU0lfSFNZTkNfX0NTSV9IU1lOQwlJT01VWF9QQUQoMHgzNDAsIDB4MTQ4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX0hTWU5DX19HUElPXzFfMTAJSU9NVVhfUEFEKDB4MzQwLCAweDE0OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX1BJWENMS19fQ1NJX1BJWENMSwlJT01VWF9QQUQoMHgzNDQsIDB4MTRjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NJX1BJWENMS19fR1BJT18xXzExCUlPTVVYX1BBRCgweDM0NCwgMHgxNGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0kyQzFfQ0xLX19JMkMxX0NMSwlJT01VWF9QQUQoMHgzNDgsIDB4MTUwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfSTJDMV9DTEtfX0dQSU9fMV8xMglJT01VWF9QQUQoMHgzNDgsIDB4MTUwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9JMkMxX0RBVF9fSTJDMV9EQVQJSU9NVVhfUEFEKDB4MzRjLCAweDE1NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0kyQzFfREFUX19HUElPXzFfMTMJSU9NVVhfUEFEKDB4MzRjLCAweDE1NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfTU9TSV9fQ1NQSTFfTU9TSQlJT01VWF9QQUQoMHgzNTAsIDB4MTU4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfTU9TSV9fR1BJT18xXzE0CUlPTVVYX1BBRCgweDM1MCwgMHgxNTgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX01JU09fX0NTUEkxX01JU08JSU9NVVhfUEFEKDB4MzU0LCAweDE1YywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX01JU09fX0dQSU9fMV8xNQlJT01VWF9QQUQoMHgzNTQsIDB4MTVjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU1BJMV9TUzBfX0NTUEkxX1NTMAlJT01VWF9QQUQoMHgzNTgsIDB4MTYwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfU1MwX19HUElPXzFfMTYJSU9NVVhfUEFEKDB4MzU4LCAweDE2MCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfU1MxX19DU1BJMV9TUzEJSU9NVVhfUEFEKDB4MzVjLCAweDE2NCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX1NTMV9fR1BJT18xXzE3CUlPTVVYX1BBRCgweDM1YywgMHgxNjQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX1NDTEtfX0NTUEkxX1NDTEsJSU9NVVhfUEFEKDB4MzYwLCAweDE2OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NTUEkxX1NDTEtfX0dQSU9fMV8xOAlJT01VWF9QQUQoMHgzNjAsIDB4MTY4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DU1BJMV9SRFlfX0NTUEkxX1JEWQlJT01VWF9QQUQoMHgzNjQsIDB4MTZjLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSkKKyNkZWZpbmUgTVgyNV9QQURfQ1NQSTFfUkRZX19HUElPXzJfMjIJSU9NVVhfUEFEKDB4MzY0LCAweDE2YywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfUlhEX19VQVJUMV9SWEQJSU9NVVhfUEFEKDB4MzY4LCAweDE3MCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9SWERfX0dQSU9fNF8yMglJT01VWF9QQUQoMHgzNjgsIDB4MTcwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRAlJT01VWF9QQUQoMHgzNmMsIDB4MTc0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfVFhEX19HUElPXzRfMjMJSU9NVVhfUEFEKDB4MzZjLCAweDE3NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMJSU9NVVhfUEFEKDB4MzcwLCAweDE3OCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19VUCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDFfUlRTX19DU0lfRDAJSU9NVVhfUEFEKDB4MzcwLCAweDE3OCwgMHgxMSwgMHg0ODgsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9SVFNfX0dQSU9fNF8yNAlJT01VWF9QQUQoMHgzNzAsIDB4MTc4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUwlJT01VWF9QQUQoMHgzNzQsIDB4MTdjLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMV9DVFNfX0NTSV9EMQlJT01VWF9QQUQoMHgzNzQsIDB4MTdjLCAweDExLCAweDQ4YywgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQxX0NUU19fR1BJT180XzI1CUlPTVVYX1BBRCgweDM3NCwgMHgxN2MsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhECUlPTVVYX1BBRCgweDM3OCwgMHgxODAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMl9SWERfX0dQSU9fNF8yNglJT01VWF9QQUQoMHgzNzgsIDB4MTgwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9VQVJUMl9UWERfX1VBUlQyX1RYRAlJT01VWF9QQUQoMHgzN2MsIDB4MTg0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfVFhEX19HUElPXzRfMjcJSU9NVVhfUEFEKDB4MzdjLCAweDE4NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19VQVJUMl9SVFMJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX1JUU19fRkVDX0NPTAlJT01VWF9QQUQoMHgzODAsIDB4MTg4LCAweDEyLCAweDUwNCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfUlRTX19HUElPXzRfMjgJSU9NVVhfUEFEKDB4MzgwLCAweDE4OCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVUFSVDJfQ1RTX19GRUNfUlhfRVIJSU9NVVhfUEFEKDB4Mzg0LCAweDE4YywgMHgxMiwgMHg1MTgsIDIsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX1VBUlQyX0NUU19fVUFSVDJfQ1RTCUlPTVVYX1BBRCgweDM4NCwgMHgxOGMsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9VQVJUMl9DVFNfX0dQSU9fNF8yOQlJT01VWF9QQUQoMHgzODQsIDB4MThjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9TRDFfQ01EX19TRDFfQ01ECUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzQ3S19VUCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0NNRF9fRkVDX1JEQVRBMglJT01VWF9QQUQoMHgzODgsIDB4MTkwLCAweDEyLCAweDUwYywgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0NNRF9fR1BJT18yXzIzCUlPTVVYX1BBRCgweDM4OCwgMHgxOTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9DTEtfX1NEMV9DTEsJSU9NVVhfUEFEKDB4MzhjLCAweDE5NCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19GRUNfUkRBVEEzCUlPTVVYX1BBRCgweDM4YywgMHgxOTQsIDB4MTIsIDB4NTEwLCAyLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfQ0xLX19HUElPXzJfMjQJSU9NVVhfUEFEKDB4MzhjLCAweDE5NCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEwX19TRDFfREFUQTAJSU9NVVhfUEFEKDB4MzkwLCAweDE5OCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTBfX0dQSU9fMl8yNQlJT01VWF9QQUQoMHgzOTAsIDB4MTk4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMQlJT01VWF9QQUQoMHgzOTQsIDB4MTljLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU180N0tfVVApCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMV9fQVVEN19SWEQJSU9NVVhfUEFEKDB4Mzk0LCAweDE5YywgMHgxMywgMHg0NzgsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTFfX0dQSU9fMl8yNglJT01VWF9QQUQoMHgzOTQsIDB4MTljLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMglJT01VWF9QQUQoMHgzOTgsIDB4MWEwLCAweDEwLCAwLCAwLCBQQURfQ1RMX1BVU180N0tfVVApCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBMl9fRkVDX1JYX0NMSwlJT01VWF9QQUQoMHgzOTgsIDB4MWEwLCAweDE1LCAweDUxNCwgMiwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEyX19HUElPXzJfMjcJSU9NVVhfUEFEKDB4Mzk4LCAweDFhMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfU0QxX0RBVEEzX19TRDFfREFUQTMJSU9NVVhfUEFEKDB4MzljLCAweDFhNCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfNDdLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9TRDFfREFUQTNfX0ZFQ19DUlMJSU9NVVhfUEFEKDB4MzljLCAweDFhNCwgMHgxMCwgMHg1MDgsIDIsIE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX1NEMV9EQVRBM19fR1BJT18yXzI4CUlPTVVYX1BBRCgweDM5YywgMHgxYTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cwX19LUFBfUk9XMAlJT01VWF9QQUQoMHgzYTAsIDB4MWE4LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzBfX0dQSU9fMl8yOQlJT01VWF9QQUQoMHgzYTAsIDB4MWE4LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XMV9fS1BQX1JPVzEJSU9NVVhfUEFEKDB4M2E0LCAweDFhYywgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1cxX19HUElPXzJfMzAJSU9NVVhfUEFEKDB4M2E0LCAweDFhYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzJfX0tQUF9ST1cyCUlPTVVYX1BBRCgweDNhOCwgMHgxYjAsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XMl9fQ1NJX0QwCUlPTVVYX1BBRCgweDNhOCwgMHgxYjAsIDB4MTMsIDB4NDg4LCAyLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzJfX0dQSU9fMl8zMQlJT01VWF9QQUQoMHgzYTgsIDB4MWIwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9LUFBfUk9XM19fS1BQX1JPVzMJSU9NVVhfUEFEKDB4M2FjLCAweDFiNCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9ST1czX19DU0lfTEQxCUlPTVVYX1BBRCgweDNhYywgMHgxYjQsIDB4MTMsIDB4NDhjLCAyLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX1JPVzNfX0dQSU9fM18wCUlPTVVYX1BBRCgweDNhYywgMHgxYjQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wwX19LUFBfQ09MMAlJT01VWF9QQUQoMHgzYjAsIDB4MWI4LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMF9fR1BJT18zXzEJSU9NVVhfUEFEKDB4M2IwLCAweDFiOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDFfX0tQUF9DT0wxCUlPTVVYX1BBRCgweDNiNCwgMHgxYmMsIDB4MTAsIDAsIDAsIFBBRF9DVExfUEtFIHwgUEFEX0NUTF9PREUpCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wxX19HUElPXzNfMglJT01VWF9QQUQoMHgzYjQsIDB4MWJjLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MMl9fS1BQX0NPTDIJSU9NVVhfUEFEKDB4M2I4LCAweDFjMCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QS0UgfCBQQURfQ1RMX09ERSkKKyNkZWZpbmUgTVgyNV9QQURfS1BQX0NPTDJfX0dQSU9fM18zCUlPTVVYX1BBRCgweDNiOCwgMHgxYzAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0tQUF9DT0wzX19LUFBfQ09MMwlJT01VWF9QQUQoMHgzYmMsIDB4MWM0LCAweDEwLCAwLCAwLCBQQURfQ1RMX1BLRSB8IFBBRF9DVExfT0RFKQorI2RlZmluZSBNWDI1X1BBRF9LUFBfQ09MM19fR1BJT18zXzQJSU9NVVhfUEFEKDB4M2JjLCAweDFjNCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRkVDX01EQ19fRkVDX01EQwlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfTURDX19BVUQ0X1RYRAlJT01VWF9QQUQoMHgzYzAsIDB4MWM4LCAweDEyLCAweDQ2NCwgMSwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19NRENfX0dQSU9fM181CUlPTVVYX1BBRCgweDNjMCwgMHgxYzgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTwlJT01VWF9QQUQoMHgzYzQsIDB4MWNjLCAweDEwLCAwLCAwLCBQQURfQ1RMX0hZUyB8IFBBRF9DVExfUFVTXzIyS19VUCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX01ESU9fX0FVRDRfUlhECUlPTVVYX1BBRCgweDNjNCwgMHgxY2MsIDB4MTIsIDB4NDYwLCAxLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX01ESU9fX0dQSU9fM182CUlPTVVYX1BBRCgweDNjNCwgMHgxY2MsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19UREFUQTBfX0ZFQ19UREFUQTAJSU9NVVhfUEFEKDB4M2M4LCAweDFkMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1REQVRBMF9fR1BJT18zXzcJSU9NVVhfUEFEKDB4M2M4LCAweDFkMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1REQVRBMV9fRkVDX1REQVRBMQlJT01VWF9QQUQoMHgzY2MsIDB4MWQ0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEExX19BVUQ0X1RYRlMJSU9NVVhfUEFEKDB4M2NjLCAweDFkNCwgMHgxMiwgMHg0NzQsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVERBVEExX19HUElPXzNfOAlJT01VWF9QQUQoMHgzY2MsIDB4MWQ0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTglJT01VWF9QQUQoMHgzZDAsIDB4MWQ4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RMKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfRU5fX0dQSU9fM185ICAgCUlPTVVYX1BBRCgweDNkMCwgMHgxZDgsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQTAJSU9NVVhfUEFEKDB4M2Q0LCAweDFkYywgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMF9fR1BJT18zXzEwCUlPTVVYX1BBRCgweDNkNCwgMHgxZGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQTEJSU9NVVhfUEFEKDB4M2Q4LCAweDFlMCwgMHgxMCwgMCwgMCwgUEFEX0NUTF9QVVNfMTAwS19ET1dOIHwgTk9fUEFEX0NUTCkKKyNkZWZpbmUgTVgyNV9QQURfRkVDX1JEQVRBMV9fR1BJT18zXzExCUlPTVVYX1BBRCgweDNkOCwgMHgxZTAsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWCUlPTVVYX1BBRCgweDNkYywgMHgxZTQsIDB4MTAsIDAsIDAsIFBBRF9DVExfUFVTXzEwMEtfRE9XTiB8IE5PX1BBRF9DVEwpCisjZGVmaW5lIE1YMjVfUEFEX0ZFQ19SWF9EVl9fQ0FOMl9SWAlJT01VWF9QQUQoMHgzZGMsIDB4MWU0LCAweDE0LCAweDQ4NCwgMCwgUEFEX0NUTF9QVVNfMjJLX1VQKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfUlhfRFZfX0dQSU9fM18xMglJT01VWF9QQUQoMHgzZGMsIDB4MWU0LCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLCUlPTVVYX1BBRCgweDNlMCwgMHgxZTgsIDB4MTAsIDAsIDAsIFBBRF9DVExfSFlTIHwgUEFEX0NUTF9QVVNfMTAwS19ET1dOKQorI2RlZmluZSBNWDI1X1BBRF9GRUNfVFhfQ0xLX19HUElPXzNfMTMJSU9NVVhfUEFEKDB4M2UwLCAweDFlOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfUlRDS19fUlRDSwkJSU9NVVhfUEFEKDB4M2U0LCAweDFlYywgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1JUQ0tfX09XSVJFCQlJT01VWF9QQUQoMHgzZTQsIDB4MWVjLCAweDExLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfUlRDS19fR1BJT18zXzE0CUlPTVVYX1BBRCgweDNlNCwgMHgxZWMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0RFX0JfX0RFX0IJCUlPTVVYX1BBRCgweDNlYywgMHgxZjAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9ERV9CX19HUElPXzJfMjAJSU9NVVhfUEFEKDB4M2VjLCAweDFmMCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfVERPX19URE8JCUlPTVVYX1BBRCgweDNlOCwgMHgwMDAsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQV9fR1BJT19BCQlJT01VWF9QQUQoMHgzZjAsIDB4MWY0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19BX19DQU4xX1RYCUlPTVVYX1BBRCgweDNmMCwgMHgxZjQsIDB4MTYsIDAsIDAsIFBBRF9DVExfUFVTXzIyS19VUCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19BX19VU0JPVEdfUFdSCUlPTVVYX1BBRCgweDNmMCwgMHgxZjQsIDB4MTIsIDAsIDAsIFBBRF9DVExfUEtFKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQl9fR1BJT19CCQlJT01VWF9QQUQoMHgzZjQsIDB4MWY4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19CX19DQU4xX1JYCUlPTVVYX1BBRCgweDNmNCwgMHgxZjgsIDB4MTYsIDB4NDgwLCAxLCBQQURfQ1RMX1BVU18yMkspCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQl9fVVNCT1RHX09DCUlPTVVYX1BBRCgweDNmNCwgMHgxZjgsIDB4MTIsIDB4NTdjLCAxLCBQQURfQ1RMX1BVU18xMDBLX1VQKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQ19fR1BJT19DCQlJT01VWF9QQUQoMHgzZjgsIDB4MWZjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19DX19DQU4yX1RYCUlPTVVYX1BBRCgweDNmOCwgMHgxZmMsIDB4MTYsIDAsIDAsIFBBRF9DVExfUFVTXzIyS19VUCkKKworI2RlZmluZSBNWDI1X1BBRF9HUElPX0RfX0dQSU9fRAkJSU9NVVhfUEFEKDB4M2ZjLCAweDIwMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRF9fQ0FOMl9SWAlJT01VWF9QQUQoMHgzZmMsIDB4MjAwLCAweDE2LCAweDQ4NCwgMSwgUEFEX0NUTF9QVVNfMjJLX1VQKQorCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRV9fR1BJT19FCQlJT01VWF9QQUQoMHg0MDAsIDB4MjA0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfR1BJT19FX19BVUQ3X1RYRAlJT01VWF9QQUQoMHg0MDAsIDB4MjA0LCAweDE0LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9HUElPX0ZfX0dQSU9fRgkJSU9NVVhfUEFEKDB4NDA0LCAweDIwOCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRl9fQVVEN19UWEMJSU9NVVhfUEFEKDB4NDA0LCAweDIwOCwgMHgxNCwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfRVhUX0FSTUNMS19fRVhUX0FSTUNMSwlJT01VWF9QQUQoMHgwMDAsIDB4MjBjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfRVhUX0FSTUNMS19fR1BJT18zXzE1CUlPTVVYX1BBRCgweDAwMCwgMHgyMGMsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YMjVfUEFEX1VQTExfQllQQ0xLX19VUExMX0JZUENMSyBJT01VWF9QQUQoMHgwMDAsIDB4MjEwLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVVBMTF9CWVBDTEtfX0dQSU9fM18xNglJT01VWF9QQUQoMHgwMDAsIDB4MjEwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9WU1RCWV9SRVFfX1ZTVEJZX1JFUQlJT01VWF9QQUQoMHg0MDgsIDB4MjE0LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVlNUQllfUkVRX19BVUQ3X1RYRlMJSU9NVVhfUEFEKDB4NDA4LCAweDIxNCwgMHgxNCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX1ZTVEJZX1JFUV9fR1BJT18zXzE3CUlPTVVYX1BBRCgweDQwOCwgMHgyMTQsIDB4MTUsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9WU1RCWV9BQ0tfX1ZTVEJZX0FDSwlJT01VWF9QQUQoMHg0MGMsIDB4MjE4LCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfVlNUQllfQUNLX19HUElPXzNfMTgJSU9NVVhfUEFEKDB4NDBjLCAweDIxOCwgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfUE9XRVJfRkFJTF9fUE9XRVJfRkFJTAlJT01VWF9QQUQoMHg0MTAsIDB4MjFjLCAweDEwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfUE9XRVJfRkFJTF9fQVVEN19SWEQJSU9NVVhfUEFEKDB4NDEwLCAweDIxYywgMHgxNCwgMHg0NzgsIDEsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9QT1dFUl9GQUlMX19HUElPXzNfMTkJSU9NVVhfUEFEKDB4NDEwLCAweDIxYywgMHgxNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVgyNV9QQURfQ0xLT19fQ0xLTwkJSU9NVVhfUEFEKDB4NDE0LCAweDIyMCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NMS09fX0dQSU9fMl8yMQlJT01VWF9QQUQoMHg0MTQsIDB4MjIwLCAweDE1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9CT09UX01PREUwX19CT09UX01PREUwCUlPTVVYX1BBRCgweDAwMCwgMHgyMjQsIDB4MDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9CT09UX01PREUwX19HUElPXzRfMzAJSU9NVVhfUEFEKDB4MDAwLCAweDIyNCwgMHgwNSwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0JPT1RfTU9ERTFfX0JPT1RfTU9ERTEJSU9NVVhfUEFEKDB4MDAwLCAweDIyOCwgMHgwMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0JPT1RfTU9ERTFfX0dQSU9fNF8zMQlJT01VWF9QQUQoMHgwMDAsIDB4MjI4LCAweDA1LCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RWU19NSVNDCUlPTVVYX1BBRCgweDQxOCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9GRUMJSU9NVVhfUEFEKDB4NDFjLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0pUQUcJSU9NVVhfUEFEKDB4NDIwLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFNFX05GQwlJT01VWF9QQUQoMHg0MjQsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfQ1NJCUlPTVVYX1BBRCgweDQyOCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9XRUlNCUlPTVVYX1BBRCgweDQyYywgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9ERFIJSU9NVVhfUEFEKDB4NDMwLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0NSTQlJT01VWF9QQUQoMHg0MzQsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfS1BQCUlPTVVYX1BBRCgweDQzOCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9TREhDMQlJT01VWF9QQUQoMHg0M2MsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfTENECUlPTVVYX1BBRCgweDQ0MCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RTRV9VQVJUCUlPTVVYX1BBRCgweDQ0NCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RWU19ORkMJSU9NVVhfUEFEKDB4NDQ4LCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0NTSQlJT01VWF9QQUQoMHg0NGMsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EU0VfQ1NQSTEJSU9NVVhfUEFEKDB4NDUwLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRERSVFlQRQlJT01VWF9QQUQoMHg0NTQsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVgyNV9QQURfQ1RMX0dSUF9EVlNfU0RIQzEJSU9NVVhfUEFEKDB4NDU4LCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX0xDRAlJT01VWF9QQUQoMHg0NWMsIDB4MDAwLCAwLCAwLCAwLCBOT19QQURfQ1RSTCkKKworI2VuZGlmIC8vIF9fQVNTRU1CTFlfXworI2VuZGlmIC8vIF9fSU9NVVhfTVgyNV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaAppbmRleCAyZWIxODJmLi40NDZmODY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oCkBAIC02MzUsNiArNjM1LDE5IEBACiAjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19ESVJfX1VTQk9UR19ESVIgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RJUiwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19OWFRfX1VTQk9UR19OWFQgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX05YVCwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19TVFBfX1VTQk9UR19TVFAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX1NUUCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX01PU0lfX1VTQkgxX1JYRE0gICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX01JU09fX1VTQkgxX1JYRFAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMF9fVVNCSDFfVFhETSAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MwLCAgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMV9fVVNCSDFfVFhEUCAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MxLCAgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMl9fVVNCSDFfUkNWICAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MyLCAgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NDTEtfX1VTQkgxX09FQiAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU0NMSywgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NQSV9SRFlfX1VTQkgxX0ZTICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1BJX1JEWSwgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX1VTQkgyX0RBVEEwX19VU0JIMl9EQVRBMCAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9EQVRBMV9fVVNCSDJfREFUQTEgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RBVEExLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVVNCSDJfQ0xLX19VU0JIMl9DTEsgICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9DTEssIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9ESVJfX1VTQkgyX0RJUiAgICAgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RJUiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQkgyX05YVF9fVVNCSDJfTlhUICAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfTlhULCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVVNCSDJfU1RQX19VU0JIMl9TVFAgICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9TVFAsIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9VU0JfT0NfX0dQSU8xXzMwCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCX09DLCBJT01VWF9DT05GSUdfR1BJTykKICNkZWZpbmUgTVgzMV9QSU5fSTJDX0RBVF9fSTJDMV9TREEJSU9NVVhfTU9ERShNWDMxX1BJTl9JMkNfREFULCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fSTJDX0NMS19fSTJDMV9TQ0wJSU9NVVhfTU9ERShNWDMxX1BJTl9JMkNfQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKQEAgLTY2OSw2ICs2ODIsMTggQEAKICNkZWZpbmUgTVgzMV9QSU5fR1BJTzNfMF9fR1BJTzNfMAlJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8zXzAsIElPTVVYX0NPTkZJR19HUElPKQogI2RlZmluZSBNWDMxX1BJTl9HUElPM18xX19HUElPM18xCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzNfMSwgSU9NVVhfQ09ORklHX0dQSU8pCiAjZGVmaW5lIE1YMzFfUElOX1RYRDJfX0dQSU8xXzI4CQlJT01VWF9NT0RFKE1YMzFfUElOX1RYRDIsIElPTVVYX0NPTkZJR19HUElPKQorI2RlZmluZSBNWDMxX1BJTl9HUElPMV8wX19HUElPMV8wCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfMCwgSU9NVVhfQ09ORklHX0dQSU8pCisjZGVmaW5lIE1YMzFfUElOX1NWRU4wX19HUElPMl8wCQlJT01VWF9NT0RFKE1YMzFfUElOX1NWRU4wLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU1RYMF9fR1BJTzJfMQkJSU9NVVhfTU9ERShNWDMxX1BJTl9TVFgwLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU1JYMF9fR1BJTzJfMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9TUlgwLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU0lNUEQwX19HUElPMl8zCUlPTVVYX01PREUoTVgzMV9QSU5fU0lNUEQwLCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fRFRSX0RDRTFfX0dQSU8yXzgJSU9NVVhfTU9ERShNWDMxX1BJTl9EVFJfRENFMSwgSU9NVVhfQ09ORklHX0dQSU8pCisjZGVmaW5lIE1YMzFfUElOX0RTUl9EQ0UxX19HUElPMl85CUlPTVVYX01PREUoTVgzMV9QSU5fRFNSX0RDRTEsIElPTVVYX0NPTkZJR19HUElPKQorI2RlZmluZSBNWDMxX1BJTl9SSV9EQ0UxX19HUElPMl8xMAlJT01VWF9NT0RFKE1YMzFfUElOX1JJX0RDRTEsIElPTVVYX0NPTkZJR19HUElPKQorI2RlZmluZSBNWDMxX1BJTl9EQ0RfRENFMV9fR1BJTzJfMTEJSU9NVVhfTU9ERShNWDMxX1BJTl9EQ0RfRENFMSwgSU9NVVhfQ09ORklHX0dQSU8pCisjZGVmaW5lIE1YMzFfUElOX1NUWEQ1X19HUElPMV8yMSAgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1NUWEQ1LCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU1JYRDVfX0dQSU8xXzIyICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fU1JYRDUsIElPTVVYX0NPTkZJR19HUElPKQorCiAKIC8qWFhYOiBUaGUgU1MwLCBTUzEsIFNTMiwgU1MzIGxpbmVzIG9mIHNwaTMgYXJlIG11bHRpcGxleGVkIGJ5IGNzcGkyX3NzMCwgY3NwaTJfc3MxLCBjc3BpMV9zczAKICAqIGNzcGkxX3NzMSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXhjOTEyMzEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teGM5MTIzMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTMwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXhjOTEyMzEuaApAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBEbWl0cml5IFRheWNoZW5hY2hldiA8ZGltaWNoeHBAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWEM5MTIzMV9IX18KKyNkZWZpbmUgX19NQUNIX0lPTVVYX01YQzkxMjMxX0hfXworCisvKgorICogdmFyaW91cyBJT01VWCBvdXRwdXQgZnVuY3Rpb25zCisgKi8KKworI2RlZmluZQlJT01VWF9PQ09ORklHX0dQSU8gKDAgPDwgNCkJLyogdXNlZCBhcyBHUElPICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfRlVOQyAoMSA8PCA0KQkvKiB1c2VkIGFzIGZ1bmN0aW9uICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUMSAoMiA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAxICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUMiAoMyA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAyICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUMyAoNCA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAzICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUNCAoNSA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiA0ICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUNSAoNiA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiA1ICovCisjZGVmaW5lCUlPTVVYX09DT05GSUdfQUxUNiAoNyA8PCA0KQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiA2ICovCisjZGVmaW5lCUlPTVVYX0lDT05GSUdfTk9ORSAgMAkgCS8qIG5vdCBjb25maWd1cmVkIGZvciBpbnB1dCAqLworI2RlZmluZQlJT01VWF9JQ09ORklHX0dQSU8gIDEJCS8qIHVzZWQgYXMgR1BJTyAqLworI2RlZmluZQlJT01VWF9JQ09ORklHX0ZVTkMgIDIJCS8qIHVzZWQgYXMgZnVuY3Rpb24gKi8KKyNkZWZpbmUJSU9NVVhfSUNPTkZJR19BTFQxICA0CQkvKiB1c2VkIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiAxICovCisjZGVmaW5lCUlPTVVYX0lDT05GSUdfQUxUMiAgOAkJLyogdXNlZCBhcyBhbHRlcm5hdGUgZnVuY3Rpb24gMiAqLworCisjZGVmaW5lIElPTVVYX0NPTkZJR19HUElPIChJT01VWF9PQ09ORklHX0dQSU8gfCBJT01VWF9JQ09ORklHX0dQSU8pCisjZGVmaW5lIElPTVVYX0NPTkZJR19GVU5DIChJT01VWF9PQ09ORklHX0ZVTkMgfCBJT01VWF9JQ09ORklHX0ZVTkMpCisjZGVmaW5lIElPTVVYX0NPTkZJR19BTFQxIChJT01VWF9PQ09ORklHX0FMVDEgfCBJT01VWF9JQ09ORklHX0FMVDEpCisjZGVmaW5lIElPTVVYX0NPTkZJR19BTFQyIChJT01VWF9PQ09ORklHX0FMVDIgfCBJT01VWF9JQ09ORklHX0FMVDIpCisKKy8qCisgKiBzZXR1cHMgYSBzaW5nbGUgcGluOgorICogCS0gcmVzZXJ2ZXMgdGhlIHBpbiBzbyB0aGF0IGl0IGlzIG5vdCBjbGFpbWVkIGJ5IGFub3RoZXIgZHJpdmVyCisgKiAJLSBzZXR1cHMgdGhlIGlvbXV4IGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbgorICogCS0gaWYgdGhlIHBpbiBpcyBjb25maWd1cmVkIGFzIGEgR1BJTywgd2UgY2xhaW0gaXQgdGhyb3VnIGtlcm5lbCBncGlvbGliCisgKi8KK2ludCBteGNfaW9tdXhfYWxsb2NfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW5fbW9kZSwgY29uc3QgY2hhciAqbGFiZWwpOworLyoKKyAqIHNldHVwcyBtdXRsaXBsZSBwaW5zCisgKiBjb252ZW5pZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCitpbnQgbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCisJCWNvbnN0IGNoYXIgKmxhYmVsKTsKKworLyoKKyAqIHJlbGVhc2VzIGEgc2luZ2xlIHBpbjoKKyAqIAktIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBhIGZ1dHVyZSB1c2UgYnkgYW5vdGhlciBkcml2ZXIKKyAqIAktIGZyZWVzIHRoZSBHUElPIGlmIHRoZSBwaW4gd2FzIGNvbmZpZ3VyZWQgYXMgR1BJTworICogCS0gRE9FUyBOT1QgcmVjb25maWd1cmUgdGhlIElPTVVYIGluIGl0cyByZXNldCBzdGF0ZQorICovCit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluX21vZGUpOworLyoKKyAqIHJlbGVhc2VzIG11bHRpcGxlIHBpbnMKKyAqIGNvbnZlbnZpZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCit2b2lkIG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKKworI2RlZmluZSBNVVhfU0lERV9BUAkJKDApCisjZGVmaW5lIE1VWF9TSURFX1NQCQkoMSkKKworI2RlZmluZSBNVVhfU0lERV9TSElGVAkJKDI2KQorI2RlZmluZSBNVVhfU0lERV9NQVNLCQkoMHgxIDw8IE1VWF9TSURFX1NISUZUKQorCisjZGVmaW5lIE1VWF9HUElPX1BPUlRfU0hJRlQJKDIzKQorI2RlZmluZSBNVVhfR1BJT19QT1JUX01BU0sJKDB4NyA8PCBNVVhfR1BJT19QT1JUX1NISUZUKQorCisjZGVmaW5lIE1VWF9HUElPX1BJTl9TSElGVAkoMjApCisjZGVmaW5lIE1VWF9HUElPX1BJTl9NQVNLCSgweDFmIDw8IE1VWF9HUElPX1BJTl9TSElGVCkKKworI2RlZmluZSBNVVhfUkVHX1NISUZUCQkoMTUpCisjZGVmaW5lIE1VWF9SRUdfTUFTSwkJKDB4MWYgPDwgTVVYX1JFR19TSElGVCkKKworI2RlZmluZSBNVVhfRklFTERfU0hJRlQJCSgxMykKKyNkZWZpbmUgTVVYX0ZJRUxEX01BU0sJCSgweDMgPDwgTVVYX0ZJRUxEX1NISUZUKQorCisjZGVmaW5lIE1VWF9QQURHUlBfU0hJRlQJKDgpCisjZGVmaW5lIE1VWF9QQURHUlBfTUFTSwkJKDB4MWYgPDwgTVVYX1BBREdSUF9TSElGVCkKKworI2RlZmluZSBNVVhfUElOX01BU0sJCSgweGZmZmZmZiA8PCA4KQorCisjZGVmaW5lIEdQSU9fUE9SVF9NQVgJCSgzKQorCisjZGVmaW5lIElPTVVYX1BJTihzaWRlLCBncG9ydCwgZ3BpbiwgY3RscmVnLCBjdGxmaWVsZCwgcGFkZ3JwKSBcCisJKCgoc2lkZSkgPDwgTVVYX1NJREVfU0hJRlQpIHwJCSAgXAorCSAoZ3BvcnQgPDwgTVVYX0dQSU9fUE9SVF9TSElGVCkgfAkJXAorCSAoKGdwaW4pIDw8IE1VWF9HUElPX1BJTl9TSElGVCkgfAkJXAorCSAoKGN0bHJlZykgPDwgTVVYX1JFR19TSElGVCkgfAkJXAorCSAoKGN0bGZpZWxkKSA8PCBNVVhfRklFTERfU0hJRlQpIHwJCVwKKwkgKChwYWRncnApIDw8IE1VWF9QQURHUlBfU0hJRlQpKQorCisjZGVmaW5lIE1VWF9NT0RFX09VVF9TSElGVAkoNCkKKyNkZWZpbmUgTVVYX01PREVfSU5fU0hJRlQJKDApCisjZGVmaW5lIE1VWF9NT0RFX1NISUZUCQkoMCkKKyNkZWZpbmUgTVVYX01PREVfTUFTSwkJKDB4ZmYgPDwgTVVYX01PREVfU0hJRlQpCisKKyNkZWZpbmUgSU9NVVhfTU9ERShwaW4sIG1vZGUpIFwKKwkocGluIHwgKG1vZGUgPDwgTVVYX01PREVfU0hJRlQpKQorCitlbnVtIGlvbXV4X3BpbnMgeworCS8qIEFQIFNpZGUgcGlucyAqLworCU1YQzkxMjMxX1BJTl9BUF9DTEUJCT0gSU9NVVhfUElOKDAsIDAsICAwLCAgMCwgMCwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9BTEUJCT0gSU9NVVhfUElOKDAsIDAsICAxLCAgMCwgMSwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9DRV9CCQk9IElPTVVYX1BJTigwLCAwLCAgMiwgIDAsIDIsIDI0KSwKKwlNWEM5MTIzMV9QSU5fQVBfUkVfQgkJPSBJT01VWF9QSU4oMCwgMCwgIDMsICAwLCAzLCAyNCksCisJTVhDOTEyMzFfUElOX0FQX1dFX0IJCT0gSU9NVVhfUElOKDAsIDAsICA0LCAgMSwgMCwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9XUF9CCQk9IElPTVVYX1BJTigwLCAwLCAgNSwgIDEsIDEsIDI0KSwKKwlNWEM5MTIzMV9QSU5fQVBfQlNZX0IJCT0gSU9NVVhfUElOKDAsIDAsICA2LCAgMSwgMiwgMjQpLAorCU1YQzkxMjMxX1BJTl9BUF9VMV9UWEQJCT0gSU9NVVhfUElOKDAsIDAsICA3LCAgMSwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9VMV9SWEQJCT0gSU9NVVhfUElOKDAsIDAsICA4LCAgMiwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9VMV9SVFNfQgk9IElPTVVYX1BJTigwLCAwLCAgOSwgIDIsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfVTFfQ1RTX0IJPSBJT01VWF9QSU4oMCwgMCwgMTAsICAyLCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0FEMV9UWEQJCT0gSU9NVVhfUElOKDAsIDAsIDExLCAgMiwgMywgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9BRDFfUlhECQk9IElPTVVYX1BJTigwLCAwLCAxMiwgIDMsIDAsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfQUQxX1RYQwkJPSBJT01VWF9QSU4oMCwgMCwgMTMsICAzLCAxLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0FEMV9UWEZTCT0gSU9NVVhfUElOKDAsIDAsIDE0LCAgMywgMiwgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9BRDJfVFhECQk9IElPTVVYX1BJTigwLCAwLCAxNSwgIDMsIDMsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfQUQyX1JYRAkJPSBJT01VWF9QSU4oMCwgMCwgMTYsICA0LCAwLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0FEMl9UWEMJCT0gSU9NVVhfUElOKDAsIDAsIDE3LCAgNCwgMSwgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9BRDJfVFhGUwk9IElPTVVYX1BJTigwLCAwLCAxOCwgIDQsIDIsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfT1dEQVQJCT0gSU9NVVhfUElOKDAsIDAsIDE5LCAgNCwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQxNwk9IElPTVVYX1BJTigwLCAwLCAyMCwgIDUsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0QzX1ZTWU5DCT0gSU9NVVhfUElOKDAsIDAsIDIxLCAgNSwgMSwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfRDNfSFNZTkMJPSBJT01VWF9QSU4oMCwgMCwgMjIsICA1LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EM19DTEsJPSBJT01VWF9QSU4oMCwgMCwgMjMsICA1LCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EM19EUkRZCT0gSU9NVVhfUElOKDAsIDAsIDI0LCAgNiwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfRDNfQ09OVFIJPSBJT01VWF9QSU4oMCwgMCwgMjUsICA2LCAxLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EMF9DUwk9IElPTVVYX1BJTigwLCAwLCAyNiwgIDYsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMTYJPSBJT01VWF9QSU4oMCwgMCwgMjcsICA2LCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9EMl9DUwk9IElPTVVYX1BJTigwLCAwLCAyOCwgIDcsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX1BBUl9SUwk9IElPTVVYX1BJTigwLCAwLCAyOSwgIDcsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0QzX1BTCT0gSU9NVVhfUElOKDAsIDAsIDMwLCAgNywgMiwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfRDNfQ0xTCT0gSU9NVVhfUElOKDAsIDAsIDMxLCAgNywgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfUkQJCT0gSU9NVVhfUElOKDAsIDEsICAwLCAgOCwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfV1IJCT0gSU9NVVhfUElOKDAsIDEsICAxLCAgOCwgMSwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQwCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgIDgsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMQkJPSBJT01VWF9QSU4oMCwgNywgIDAsICA4LCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDIJCT0gSU9NVVhfUElOKDAsIDcsICAwLCAgOSwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQzCQk9IElPTVVYX1BJTigwLCAxLCAgMiwgIDksIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xENAkJPSBJT01VWF9QSU4oMCwgMSwgIDMsICA5LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDUJCT0gSU9NVVhfUElOKDAsIDEsICA0LCAgOSwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQ2CQk9IElPTVVYX1BJTigwLCAxLCAgNSwgMTAsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xENwkJPSBJT01VWF9QSU4oMCwgMSwgIDYsIDEwLCAxLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDgJCT0gSU9NVVhfUElOKDAsIDEsICA3LCAxMCwgMiwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQ5CQk9IElPTVVYX1BJTigwLCAxLCAgOCwgMTAsIDMsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMTAJPSBJT01VWF9QSU4oMCwgMSwgIDksIDExLCAwLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDExCT0gSU9NVVhfUElOKDAsIDEsIDEwLCAxMSwgMSwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQxMgk9IElPTVVYX1BJTigwLCAxLCAxMSwgMTEsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfSVBVX0xEMTMJPSBJT01VWF9QSU4oMCwgMSwgMTIsIDExLCAzLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX0lQVV9MRDE0CT0gSU9NVVhfUElOKDAsIDEsIDEzLCAxMiwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9JUFVfTEQxNQk9IElPTVVYX1BJTigwLCAxLCAxNCwgMTIsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1c0CQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMTIsIDIsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1c1CQk9IElPTVVYX1BJTigwLCAxLCAxNiwgMTIsIDMsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9CMTcJPSBJT01VWF9QSU4oMCwgMSwgMTcsIDEzLCAwLCAxMCksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQjE4CT0gSU9NVVhfUElOKDAsIDEsIDE4LCAxMywgMSwgMTApLAorCU1YQzkxMjMxX1BJTl9BUF9LUENPTDMJCT0gSU9NVVhfUElOKDAsIDEsIDE5LCAxMywgMiwgMTEpLAorCU1YQzkxMjMxX1BJTl9BUF9LUENPTDQJCT0gSU9NVVhfUElOKDAsIDEsIDIwLCAxMywgMywgMTEpLAorCU1YQzkxMjMxX1BJTl9BUF9LUENPTDUJCT0gSU9NVVhfUElOKDAsIDEsIDIxLCAxNCwgMCwgMTEpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0IyMgk9IElPTVVYX1BJTigwLCAxLCAyMiwgMTQsIDEsIDExKSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9CMjMJPSBJT01VWF9QSU4oMCwgMSwgMjMsIDE0LCAyLCAxMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMAkJPSBJT01VWF9QSU4oMCwgMSwgMjQsIDE0LCAzLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMQkJPSBJT01VWF9QSU4oMCwgMSwgMjUsIDE1LCAwLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMgkJPSBJT01VWF9QSU4oMCwgMSwgMjYsIDE1LCAxLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EMwkJPSBJT01VWF9QSU4oMCwgMSwgMjcsIDE1LCAyLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENAkJPSBJT01VWF9QSU4oMCwgMSwgMjgsIDE1LCAzLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENQkJPSBJT01VWF9QSU4oMCwgMSwgMjksIDE2LCAwLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENgkJPSBJT01VWF9QSU4oMCwgMSwgMzAsIDE2LCAxLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9ENwkJPSBJT01VWF9QSU4oMCwgMSwgMzEsIDE2LCAyLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EOAkJPSBJT01VWF9QSU4oMCwgMiwgIDAsIDE2LCAzLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9EOQkJPSBJT01VWF9QSU4oMCwgMiwgIDEsIDE3LCAwLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9NQ0xLCT0gSU9NVVhfUElOKDAsIDIsICAyLCAxNywgMSwgMjEpLAorCU1YQzkxMjMxX1BJTl9BUF9DU0lfVlNZTkMJPSBJT01VWF9QSU4oMCwgMiwgIDMsIDE3LCAyLCAyMSksCisJTVhDOTEyMzFfUElOX0FQX0NTSV9IU1lOQwk9IElPTVVYX1BJTigwLCAyLCAgNCwgMTcsIDMsIDIxKSwKKwlNWEM5MTIzMV9QSU5fQVBfQ1NJX1BJWENMSwk9IElPTVVYX1BJTigwLCAyLCAgNSwgMTgsIDAsIDIxKSwKKwlNWEM5MTIzMV9QSU5fQVBfSTJDTEsJCT0gSU9NVVhfUElOKDAsIDIsICA2LCAxOCwgMSwgMTIpLAorCU1YQzkxMjMxX1BJTl9BUF9JMkRBVAkJPSBJT01VWF9QSU4oMCwgMiwgIDcsIDE4LCAyLCAxMiksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzgJPSBJT01VWF9QSU4oMCwgMiwgIDgsIDE4LCAzLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzkJPSBJT01VWF9QSU4oMCwgMiwgIDksIDE5LCAwLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzEwCT0gSU9NVVhfUElOKDAsIDIsIDEwLCAxOSwgMSwgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0MxMQk9IElPTVVYX1BJTigwLCAyLCAxMSwgMTksIDIsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9DMTIJPSBJT01VWF9QSU4oMCwgMiwgMTIsIDE5LCAzLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzEzCT0gSU9NVVhfUElOKDAsIDIsIDEzLCAyMCwgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0MxNAk9IElPTVVYX1BJTigwLCAyLCAxNCwgMjAsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfR1BJT19BUF9DMTUJPSBJT01VWF9QSU4oMCwgMiwgMTUsIDIwLCAyLCAgOSksCisJTVhDOTEyMzFfUElOX0FQX0dQSU9fQVBfQzE2CT0gSU9NVVhfUElOKDAsIDIsIDE2LCAyMCwgMywgIDkpLAorCU1YQzkxMjMxX1BJTl9BUF9HUElPX0FQX0MxNwk9IElPTVVYX1BJTigwLCAyLCAxNywgMjEsIDAsICA5KSwKKwlNWEM5MTIzMV9QSU5fQVBfRURfSU5UMAkJPSBJT01VWF9QSU4oMCwgMiwgMTgsIDIxLCAxLCAyMiksCisJTVhDOTEyMzFfUElOX0FQX0VEX0lOVDEJCT0gSU9NVVhfUElOKDAsIDIsIDE5LCAyMSwgMiwgMjIpLAorCU1YQzkxMjMxX1BJTl9BUF9FRF9JTlQyCQk9IElPTVVYX1BJTigwLCAyLCAyMCwgMjEsIDMsIDIyKSwKKwlNWEM5MTIzMV9QSU5fQVBfRURfSU5UMwkJPSBJT01VWF9QSU4oMCwgMiwgMjEsIDIyLCAwLCAyMiksCisJTVhDOTEyMzFfUElOX0FQX0VEX0lOVDQJCT0gSU9NVVhfUElOKDAsIDIsIDIyLCAyMiwgMSwgMjMpLAorCU1YQzkxMjMxX1BJTl9BUF9FRF9JTlQ1CQk9IElPTVVYX1BJTigwLCAyLCAyMywgMjIsIDIsIDIzKSwKKwlNWEM5MTIzMV9QSU5fQVBfRURfSU5UNgkJPSBJT01VWF9QSU4oMCwgMiwgMjQsIDIyLCAzLCAyMyksCisJTVhDOTEyMzFfUElOX0FQX0VEX0lOVDcJCT0gSU9NVVhfUElOKDAsIDIsIDI1LCAyMywgMCwgMjMpLAorCU1YQzkxMjMxX1BJTl9BUF9VMl9EU1JfQgk9IElPTVVYX1BJTigwLCAyLCAyNiwgMjMsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfVTJfUklfQgkJPSBJT01VWF9QSU4oMCwgMiwgMjcsIDIzLCAyLCAyOCksCisJTVhDOTEyMzFfUElOX0FQX1UyX0NUU19CCT0gSU9NVVhfUElOKDAsIDIsIDI4LCAyMywgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9BUF9VMl9EVFJfQgk9IElPTVVYX1BJTigwLCAyLCAyOSwgMjQsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1cwCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjQsIDEsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1cxCQk9IElPTVVYX1BJTigwLCAxLCAxNSwgMjQsIDIsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1cyCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjQsIDMsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BST1czCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDAsIDEwKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BDT0wwCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDEsIDExKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BDT0wxCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDIsIDExKSwKKwlNWEM5MTIzMV9QSU5fQVBfS1BDT0wyCQk9IElPTVVYX1BJTigwLCA3LCAgMCwgMjUsIDMsIDExKSwKKworCS8qIFNoYXJlZCBwaW5zICovCisJTVhDOTEyMzFfUElOX1NQX1UzX1RYRAkJPSBJT01VWF9QSU4oMSwgMywgIDAsICAwLCAwLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1UzX1JYRAkJPSBJT01VWF9QSU4oMSwgMywgIDEsICAwLCAxLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1UzX1JUU19CCT0gSU9NVVhfUElOKDEsIDMsICAyLCAgMCwgMiwgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9VM19DVFNfQgk9IElPTVVYX1BJTigxLCAzLCAgMywgIDAsIDMsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX1RYT0VfQgk9IElPTVVYX1BJTigxLCAzLCAgNCwgIDEsIDAsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX0RBVF9WUAk9IElPTVVYX1BJTigxLCAzLCAgNSwgIDEsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX1NFMF9WTQk9IElPTVVYX1BJTigxLCAzLCAgNiwgIDEsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVVNCX1JYRAkJPSBJT01VWF9QSU4oMSwgMywgIDcsICAxLCAzLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9UWE9FX0IJPSBJT01VWF9QSU4oMSwgMywgIDgsICAyLCAwLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9TUEVFRAk9IElPTVVYX1BJTigxLCAzLCAgOSwgIDIsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVUgyX1NVU1BFTgk9IElPTVVYX1BJTigxLCAzLCAxMCwgIDIsIDIsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVUgyX1RYRFAJPSBJT01VWF9QSU4oMSwgMywgMTEsICAyLCAzLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9SWERQCT0gSU9NVVhfUElOKDEsIDMsIDEyLCAgMywgMCwgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9VSDJfUlhETQk9IElPTVVYX1BJTigxLCAzLCAxMywgIDMsIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfVUgyX09WUgkJPSBJT01VWF9QSU4oMSwgMywgMTQsICAzLCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9QV1IJCT0gSU9NVVhfUElOKDEsIDMsIDE1LCAgMywgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDFfREFUMAk9IElPTVVYX1BJTigxLCAzLCAxNiwgIDQsIDAsIDI1KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QxX0RBVDEJPSBJT01VWF9QSU4oMSwgMywgMTcsICA0LCAxLCAyNSksCisJTVhDOTEyMzFfUElOX1NQX1NEMV9EQVQyCT0gSU9NVVhfUElOKDEsIDMsIDE4LCAgNCwgMiwgMjUpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDFfREFUMwk9IElPTVVYX1BJTigxLCAzLCAxOSwgIDQsIDMsIDI1KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QxX0NNRAkJPSBJT01VWF9QSU4oMSwgMywgMjAsICA1LCAwLCAyNSksCisJTVhDOTEyMzFfUElOX1NQX1NEMV9DTEsJCT0gSU9NVVhfUElOKDEsIDMsIDIxLCAgNSwgMSwgMjUpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDJfREFUMAk9IElPTVVYX1BJTigxLCAzLCAyMiwgIDUsIDIsIDI2KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QyX0RBVDEJPSBJT01VWF9QSU4oMSwgMywgMjMsICA1LCAzLCAyNiksCisJTVhDOTEyMzFfUElOX1NQX1NEMl9EQVQyCT0gSU9NVVhfUElOKDEsIDMsIDI0LCAgNiwgMCwgMjYpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDJfREFUMwk9IElPTVVYX1BJTigxLCAzLCAyNSwgIDYsIDEsIDI2KSwKKwlNWEM5MTIzMV9QSU5fU1BfR1BJT19TUF9BMjYJPSBJT01VWF9QSU4oMSwgMywgMjYsICA2LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1NQSTFfQ0xLCT0gSU9NVVhfUElOKDEsIDMsIDI3LCAgNiwgMywgMTMpLAorCU1YQzkxMjMxX1BJTl9TUF9TUEkxX01PU0kJPSBJT01VWF9QSU4oMSwgMywgMjgsICA3LCAwLCAxMyksCisJTVhDOTEyMzFfUElOX1NQX1NQSTFfTUlTTwk9IElPTVVYX1BJTigxLCAzLCAyOSwgIDcsIDEsIDEzKSwKKwlNWEM5MTIzMV9QSU5fU1BfU1BJMV9TUzAJPSBJT01VWF9QSU4oMSwgMywgMzAsICA3LCAyLCAxMyksCisJTVhDOTEyMzFfUElOX1NQX1NQSTFfU1MxCT0gSU9NVVhfUElOKDEsIDMsIDMxLCAgNywgMywgMTMpLAorCU1YQzkxMjMxX1BJTl9TUF9TRDJfQ01ECQk9IElPTVVYX1BJTigxLCA3LCAgMCwgIDgsIDAsIDI2KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0QyX0NMSwkJPSBJT01VWF9QSU4oMSwgNywgIDAsICA4LCAxLCAyNiksCisJTVhDOTEyMzFfUElOX1NQX1NJTTFfUlNUX0IJPSBJT01VWF9QSU4oMSwgMiwgMzAsICA4LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1NJTTFfU1ZFTgk9IElPTVVYX1BJTigxLCA3LCAgMCwgIDgsIDMsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0lNMV9DTEsJPSBJT01VWF9QSU4oMSwgNywgIDAsICA5LCAwLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1NJTTFfVFJYRAk9IElPTVVYX1BJTigxLCA3LCAgMCwgIDksIDEsIDI4KSwKKwlNWEM5MTIzMV9QSU5fU1BfU0lNMV9QRAkJPSBJT01VWF9QSU4oMSwgMiwgMzEsICA5LCAyLCAyOCksCisJTVhDOTEyMzFfUElOX1NQX1VIMl9UWERNCT0gSU9NVVhfUElOKDEsIDcsICAwLCAgOSwgMywgMjgpLAorCU1YQzkxMjMxX1BJTl9TUF9VSDJfUlhECQk9IElPTVVYX1BJTigxLCA3LCAgMCwgMTAsIDAsIDI4KSwKK307CisKKyNkZWZpbmUgUElOX0FQX01BWAkoMTA0KQorI2RlZmluZSBQSU5fU1BfTUFYCSg0MSkKKworI2RlZmluZSBQSU5fTUFYCQkoUElOX0FQX01BWCArIFBJTl9TUF9NQVgpCisKKy8qCisgKiBDb252ZW5pZW5jZSB2YWx1ZXMgZm9yIHVzZSB3aXRoIG14Y19pb211eF9tb2RlKCkKKyAqCisgKiBGb3JtYXQgaGVyZSBpcyBNWEM5MTIzMV9QSU5fKHBpbiBuYW1lKV9fKGZ1bmN0aW9uKQorICovCisKKyNkZWZpbmUgTVhDOTEyMzFfUElOX1NQX1VTQl9EQVRfVlBfX1VTQl9EQVRfVlAgXAorCUlPTVVYX01PREUoTVhDOTEyMzFfUElOX1NQX1VTQl9EQVRfVlAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWEM5MTIzMV9QSU5fU1BfVVNCX1NFMF9WTV9fVVNCX1NFMF9WTSBcCisJSU9NVVhfTU9ERShNWEM5MTIzMV9QSU5fU1BfVVNCX1NFMF9WTSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YQzkxMjMxX1BJTl9TUF9VU0JfREFUX1ZQX19SWEQyIFwKKwlJT01VWF9NT0RFKE1YQzkxMjMxX1BJTl9TUF9VU0JfREFUX1ZQLCBJT01VWF9DT05GSUdfQUxUMSkKKyNkZWZpbmUgTVhDOTEyMzFfUElOX1NQX1VTQl9TRTBfVk1fX1RYRDIgXAorCUlPTVVYX01PREUoTVhDOTEyMzFfUElOX1NQX1VTQl9TRTBfVk0sIElPTVVYX0NPTkZJR19BTFQxKQorCisKKyNlbmRpZiAvKiBfX01BQ0hfSU9NVVhfTVhDOTEyMzFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtdjMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oCmluZGV4IDdjZDg0NTQuLmEwZmE0MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oCkBAIC02OCwyOCArNjgsMjQgQEAKIC8qCiAgKiBVc2UgdG8gc2V0IFBBRCBjb250cm9sCiAgKi8KLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9WT0xUQUdFXzNfM19WCTAKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9WT0xUQUdFXzFfOF9WCTEKIAotI2RlZmluZSBQQURfQ1RMX05PX0hZU1RFUkVTSVMJCTAKLSNkZWZpbmUgUEFEX0NUTF9IWVNURVJFU0lTCQkxCisjZGVmaW5lIFBBRF9DVExfRFZTCQkJKDEgPDwgMTMpCisjZGVmaW5lIFBBRF9DVExfSFlTCQkJKDEgPDwgOCkKIAotI2RlZmluZSBQQURfQ1RMX1BVTExfRElTQUJMRUQJCTB4MAotI2RlZmluZSBQQURfQ1RMX1BVTExfS0VFUEVSCQkweGEKLSNkZWZpbmUgUEFEX0NUTF9QVUxMX0RPV05fMTAwSwkJMHhjCi0jZGVmaW5lIFBBRF9DVExfUFVMTF9VUF80N0sJCTB4ZAotI2RlZmluZSBQQURfQ1RMX1BVTExfVVBfMTAwSwkJMHhlCi0jZGVmaW5lIFBBRF9DVExfUFVMTF9VUF8yMksJCTB4ZgorI2RlZmluZSBQQURfQ1RMX1BLRQkJCSgxIDw8IDcpCisjZGVmaW5lIFBBRF9DVExfUFVFCQkJKDEgPDwgNikKKyNkZWZpbmUgUEFEX0NUTF9QVVNfMTAwS19ET1dOCQkoMCA8PCA0KQorI2RlZmluZSBQQURfQ1RMX1BVU180N0tfVVAJCSgxIDw8IDQpCisjZGVmaW5lIFBBRF9DVExfUFVTXzEwMEtfVVAJCSgyIDw8IDQpCisjZGVmaW5lIFBBRF9DVExfUFVTXzIyS19VUAkJKDMgPDwgNCkKIAotI2RlZmluZSBQQURfQ1RMX09VVFBVVF9DTU9TCQkwCi0jZGVmaW5lIFBBRF9DVExfT1VUUFVUX09QRU5fRFJBSU4JMQorI2RlZmluZSBQQURfQ1RMX09ERQkJCSgxIDw8IDMpCiAKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9TVFJFTkdUSF9OT1JNCTAKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9TVFJFTkdUSF9ISUdICTEKLSNkZWZpbmUgUEFEX0NUTF9EUklWRV9TVFJFTkdUSF9NQVgJMgorI2RlZmluZSBQQURfQ1RMX0RTRV9TVEFOREFSRAkJKDAgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfSElHSAkJKDEgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfTUFYCQkJKDIgPDwgMSkKIAotI2RlZmluZSBQQURfQ1RMX1NMRVdfUkFURV9TTE9XCQkwCi0jZGVmaW5lIFBBRF9DVExfU0xFV19SQVRFX0ZBU1QJCTEKKyNkZWZpbmUgUEFEX0NUTF9TUkVfRkFTVAkJKDEgPDwgMCkKIAogLyoKICAqIHNldHVwcyBhIHNpbmdsZSBwYWQ6CkBAIC0xMTcsNSArMTEzLDEwIEBACiAgKi8KIHZvaWQgbXhjX2lvbXV4X3YzX3JlbGVhc2VfbXVsdGlwbGVfcGFkcyhzdHJ1Y3QgcGFkX2Rlc2MgKnBhZF9saXN0LCBpbnQgY291bnQpOwogCisvKgorICogSW5pdGlhbGlzZSB0aGUgaW9tdXggY29udHJvbGxlcgorICovCit2b2lkIG14Y19pb211eF92M19pbml0KHZvaWQgX19pb21lbSAqaW9tdXhfdjNfYmFzZSk7CisKICNlbmRpZiAvKiBfX01BQ0hfSU9NVVhfVjNfSF9fKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaAppbmRleCAxNzFmOGFkLi42ZDQ5ZjhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaApAQCAtNDksNiArNDksOSBAQAogI2lmZGVmIENPTkZJR19BUkNIX01YMgogIyBkZWZpbmUgR1BJT19QT1JUX01BWCAgNQogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgyNQorIyBkZWZpbmUgR1BJT19QT1JUX01BWCAgMworI2VuZGlmCiAKICNpZm5kZWYgR1BJT19QT1JUX01BWAogIyBlcnJvciAiR1BJTyBjb25maWcgcG9ydCBjb3VudCB1bmtub3duISIKQEAgLTEwNyw2ICsxMTAsOSBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgogI2VuZGlmCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDI1CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+CisjZW5kaWYKIAogCiAvKiBkZWNvZGUgaXJxIG51bWJlciB0byB1c2Ugd2l0aCBJTVIoeCksIElTUih4KSBhbmQgZnJpZW5kcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggNTE4YTM2NS4uZWFkOWQ1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0yNCw2ICsyNCwxMCBAQAogI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA2KQogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKICNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogMykKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyNQorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWEM5MTIzMQorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggNjA2NWUwMC4uZDNhZmFmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjIsNiArMjIsMTAgQEAKICNlbmRpZgogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMjUKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YQzkxMjMxCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDkwMDAwMDAwKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NWDFfVklERU8pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmgKaW5kZXggMTAwMGJmMy4uMWIyODkwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaApAQCAtMTIsMTAgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgxX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDFfSF9fCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKLSNlbmRpZgotCiAjaW5jbHVkZSA8bWFjaC92bWFsbG9jLmg+CiAKIC8qCkBAIC0xMzgsMjAgKzEzNCw2IEBACiAjZGVmaW5lIEdQSU9fSU5UX1BPUlRECQk2MgogI2RlZmluZSBXRFRfSU5UCQkJNjMKIAotLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLSNkZWZpbmUgR1BJT19EUgkJIAkweDFDCi0jZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDAKLSNkZWZpbmUgR1BJT19QU1IJIAkweDI0Ci0jZGVmaW5lIEdQSU9fSUNSMQkgCTB4MjgKLSNkZWZpbmUgR1BJT19JQ1IyCSAJMHgyQwotI2RlZmluZSBHUElPX0lNUgkgCTB4MzAKLSNkZWZpbmUgR1BJT19JU1IJIAkweDM0Ci0jZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgzCi0jZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MgotI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UgCTB4MAotI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgxCi0jZGVmaW5lIEdQSU9fSU5UX05PTkUJCTB4NAotCiAvKiBETUEgKi8KICNkZWZpbmUgRE1BX1JFUV9VQVJUM19UCQkyCiAjZGVmaW5lIERNQV9SRVFfVUFSVDNfUgkJMwpAQCAtMTc5LDggKzE2MSw0IEBACiAjZGVmaW5lIERNQV9SRVFfVUFSVDFfVAkJMzAKICNkZWZpbmUgRE1BX1JFUV9VQVJUMV9SCQkzMQogCi0vKiBtYW5kYXRvcnkgZm9yIENPTkZJR19ERUJVR19MTCAqLwotI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKLSNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCi0KICNlbmRpZiAvKiAgX19BU01fQVJDSF9NWENfTVgxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLmgKaW5kZXggOGIwNzBhMC4uMjExMTJjNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oCkBAIC0yNSwxMSArMjUsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCi0jZW5kaWYKLQotCiAvKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MgKi8KICNkZWZpbmUgU0RSQU1fQkFTRV9BRERSICAgICAgICAgMHhDMDAwMDAwMAogI2RlZmluZSBDU0QxX0JBU0VfQUREUiAgICAgICAgICAweEM0MDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzY0YmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fTUFDSF9NWDI1X0hfXworI2RlZmluZSBfX01BQ0hfTVgyNV9IX18KKworI2RlZmluZSBNWDI1X0FJUFMxX0JBU0VfQUREUgkJMHg0M0YwMDAwMAorI2RlZmluZSBNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUCTB4RkMwMDAwMDAKKyNkZWZpbmUgTVgyNV9BSVBTMV9TSVpFCQkJU1pfMU0KKyNkZWZpbmUgTVgyNV9BSVBTMl9CQVNFX0FERFIJCTB4NTNGMDAwMDAKKyNkZWZpbmUgTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVAkweEZDMjAwMDAwCisjZGVmaW5lIE1YMjVfQUlQUzJfU0laRQkJCVNaXzFNCisjZGVmaW5lIE1YMjVfQVZJQ19CQVNFX0FERFIJCTB4NjgwMDAwMDAKKyNkZWZpbmUgTVgyNV9BVklDX0JBU0VfQUREUl9WSVJUCTB4RkM0MDAwMDAKKyNkZWZpbmUgTVgyNV9BVklDX1NJWkUJCQlTWl8xTQorCisjZGVmaW5lIE1YMjVfSU9NVVhDX0JBU0VfQUREUgkJKE1YMjVfQUlQUzFfQkFTRV9BRERSICsgMHhhYzAwMCkKKworI2RlZmluZSBNWDI1X0NSTV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4ODAwMDApCisjZGVmaW5lIE1YMjVfR1BUMV9CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4OTAwMDApCisjZGVmaW5lIE1YMjVfV0RPR19CQVNFX0FERFIJCShNWDI1X0FJUFMyX0JBU0VfQUREUiArIDB4ZGMwMDApCisKKyNkZWZpbmUgTVgyNV9HUElPMV9CQVNFX0FERFJfVklSVAkoTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVCArIDB4Y2MwMDApCisjZGVmaW5lIE1YMjVfR1BJTzJfQkFTRV9BRERSX1ZJUlQJKE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQgKyAweGQwMDAwKQorI2RlZmluZSBNWDI1X0dQSU8zX0JBU0VfQUREUl9WSVJUCShNWDI1X0FJUFMyX0JBU0VfQUREUl9WSVJUICsgMHhhNDAwMCkKKyNkZWZpbmUgTVgyNV9HUElPNF9CQVNFX0FERFJfVklSVAkoTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVCArIDB4OWMwMDApCisKKyNkZWZpbmUgTVgyNV9BSVBTMV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWDI1X0FJUFMxX0JBU0VfQUREUikgKyBNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKQorI2RlZmluZSBNWDI1X0FJUFMyX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIE1YMjVfQUlQUzJfQkFTRV9BRERSKSArIE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQpCisjZGVmaW5lIE1YMjVfQVZJQ19JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWDI1X0FWSUNfQkFTRV9BRERSKSArIE1YMjVfQVZJQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBfX2luX3JhbmdlKGFkZHIsIG5hbWUpCSgoYWRkcikgPj0gbmFtZSMjX0JBU0VfQUREUiAmJiAoYWRkcikgPCBuYW1lIyNfQkFTRV9BRERSICsgbmFtZSMjX1NJWkUpCisKKyNkZWZpbmUgTVgyNV9JT19BRERSRVNTKHgpCQkJCQlcCisJKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCQkJCVwKKwkoX19pbl9yYW5nZSh4LCBNWDI1X0FJUFMxKSA/IE1YMjVfQUlQUzFfSU9fQUREUkVTUyh4KSA6CVwKKwlfX2luX3JhbmdlKHgsIE1YMjVfQUlQUzIpID8gTVgyNV9BSVBTMl9JT19BRERSRVNTKHgpIDoJXAorCV9faW5fcmFuZ2UoeCwgTVgyNV9BVklDKSA/IE1YMjVfQVZJQ19JT19BRERSRVNTKHgpIDoJXAorCTB4REVBREJFRUYpCisKKyNkZWZpbmUgVUFSVDFfQkFTRV9BRERSCQkJMHg0M2Y5MDAwMAorI2RlZmluZSBVQVJUMl9CQVNFX0FERFIJCQkweDQzZjk0MDAwCisKKyNlbmRpZiAvKiBfX01BQ0hfTVgyNV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCmluZGV4IDZlOTNmMmMuLmRjM2FkOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaApAQCAtMjQsMTAgKzI0LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyN19IX18KICNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyN19IX18KIAotI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KLSNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgotI2VuZGlmCi0KIC8qIElSQU0gKi8KICNkZWZpbmUgSVJBTV9CQVNFX0FERFIgICAgICAgICAgMHhGRkZGNEMwMAkvKiBpbnRlcm5hbCByYW0gKi8KIApAQCAtMTIwLDcgKzExNiw0IEBACiAKIC8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KIAotLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gMTkyIEdQSU9zIChkb24ndCBmb3JnZXQgdGhlIGJhc2Vib2FyZCEpICovCi0jZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCSgxOTIgKyAxNikKLQogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX01YMjdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaAppbmRleCBmYzQwZDNhLi5kYjVkOTIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJ4LmgKQEAgLTIzLDEwICsyMyw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKLSNlbmRpZgotCiAvKiBUaGUgZm9sbG93aW5nIGFkZHJlc3NlcyBhcmUgY29tbW9uIGJldHdlZW4gaS5NWDIxIGFuZCBpLk1YMjcgKi8KIAogLyogUmVnaXN0ZXIgb2ZmZXN0cyAqLwpAQCAtMTU0LDIwICsxNTAsNiBAQAogI2RlZmluZSBNWENfSU5UX0dQSU8JCTgKICNkZWZpbmUgTVhDX0lOVF9DU1BJMwkJNgogCi0vKiBncGlvIGFuZCBncGlvIGJhc2VkIGludGVycnVwdCBoYW5kbGluZyAqLwotI2RlZmluZSBHUElPX0RSCQkgCTB4MUMKLSNkZWZpbmUgR1BJT19HRElSCSAJMHgwMAotI2RlZmluZSBHUElPX1BTUgkgCTB4MjQKLSNkZWZpbmUgR1BJT19JQ1IxCSAJMHgyOAotI2RlZmluZSBHUElPX0lDUjIJIAkweDJDCi0jZGVmaW5lIEdQSU9fSU1SCSAJMHgzMAotI2RlZmluZSBHUElPX0lTUgkgCTB4MzQKLSNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDMKLSNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgyCi0jZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRSAJMHgwCi0jZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDEKLSNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0Ci0KIC8qIGZpeGVkIERNQSByZXF1ZXN0IG51bWJlcnMgKi8KICNkZWZpbmUgRE1BX1JFUV9DU0lfUlggICAgICAgICAgMzEKICNkZWZpbmUgRE1BX1JFUV9DU0lfU1RBVCAgICAgICAgMzAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCmluZGV4IDBiMDY5NDFiLi4xNGFjMGRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmgKQEAgLTQsNyArNCw3IEBACiAjZGVmaW5lIE1YMzFfSVJBTV9CQVNFX0FERFIJCTB4MUZGQzAwMDAJLyogaW50ZXJuYWwgcmFtICovCiAjZGVmaW5lIE1YMzFfSVJBTV9TSVpFCQkJU1pfMTZLCiAKLSNkZWZpbmUgT1RHX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwODgwMDApCisjZGVmaW5lIE1YMzFfT1RHX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4ODAwMCkKICNkZWZpbmUgQVRBX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOEMwMDApCiAjZGVmaW5lIFVBUlQ0X0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQjAwMDApCiAjZGVmaW5lIFVBUlQ1X0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQjQwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzUuaAppbmRleCA2NDY1ZmVmLi5hYjRjZmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmgKQEAgLTUsNiArNSw3IEBACiAjZGVmaW5lIE1YMzVfSVJBTV9TSVpFCQlTWl8xMjhLCiAKICNkZWZpbmUgTVhDX0ZFQ19CQVNFX0FERFIJMHg1MDAzODAwMAorI2RlZmluZSBNWDM1X09UR19CQVNFX0FERFIJMHg1M2ZmNDAwMAogI2RlZmluZSBNWDM1X05GQ19CQVNFX0FERFIJMHhCQjAwMDAwMAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmgKaW5kZXggYjU1OWE0Yi4uMDA5ZjQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzeC5oCkBAIC0xMSwxMCArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0hBUkRXQVJFX0hfXwotI2Vycm9yICJEbyBub3QgaW5jbHVkZSBkaXJlY3RseS4iCi0jZW5kaWYKLQogLyoKICAqIE1YMzEgbWVtb3J5IG1hcDoKICAqCkBAIC0yNjMsMjUgKzI1OSw4IEBACiAjZGVmaW5lIFNZU1RFTV9SRVZfTUlOCQlDSElQX1JFVl8xXzAKICNkZWZpbmUgU1lTVEVNX1JFVl9OVU0JCTMKIAotLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLSNkZWZpbmUgR1BJT19EUgkJIAkweDAwCi0jZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDQKLSNkZWZpbmUgR1BJT19QU1IJIAkweDA4Ci0jZGVmaW5lIEdQSU9fSUNSMQkgCTB4MEMKLSNkZWZpbmUgR1BJT19JQ1IyCSAJMHgxMAotI2RlZmluZSBHUElPX0lNUgkgCTB4MTQKLSNkZWZpbmUgR1BJT19JU1IJIAkweDE4Ci0jZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgwCi0jZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MQotI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UJMHgyCi0jZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDMKLSNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0Ci0KIC8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KIAotLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gOTYgR1BJT3MgKi8KLSNkZWZpbmUgQVJDSF9OUl9HUElPUwkJOTYKLQogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgIWRlZmluZWQoX19NWENfQk9PVF9VTkNPTVBSRVNTKQogCiBleHRlcm4gdW5zaWduZWQgaW50IHN5c3RlbV9yZXY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKaW5kZXggNWZhMmEwNy4uNTE5OTA1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaApAQCAtMjYsOSArMjYsMTEgQEAKIAogI2RlZmluZSBNWENfQ1BVX01YMQkJMQogI2RlZmluZSBNWENfQ1BVX01YMjEJCTIxCisjZGVmaW5lIE1YQ19DUFVfTVgyNQkJMjUKICNkZWZpbmUgTVhDX0NQVV9NWDI3CQkyNwogI2RlZmluZSBNWENfQ1BVX01YMzEJCTMxCiAjZGVmaW5lIE1YQ19DUFVfTVgzNQkJMzUKKyNkZWZpbmUgTVhDX0NQVV9NWEM5MTIzMQk5MTIzMQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHVuc2lnbmVkIGludCBfX214Y19jcHVfdHlwZTsKQEAgLTU4LDYgKzYwLDE4IEBACiAjIGRlZmluZSBjcHVfaXNfbXgyMSgpCQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgyNQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVgyNQorIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214MjUoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YMjUpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214MjUoKQkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19NQUNIX01YMjcKICMgaWZkZWYgbXhjX2NwdV90eXBlCiAjICB1bmRlZiBteGNfY3B1X3R5cGUKQEAgLTk0LDEzICsxMDgsMjUgQEAKICMgZGVmaW5lIGNwdV9pc19teDM1KCkJCSgwKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWEM5MTIzMQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVhDOTEyMzEKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teGM5MTIzMSgpCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWEM5MTIzMSkKKyNlbHNlCisjIGRlZmluZSBjcHVfaXNfbXhjOTEyMzEoKQkoMCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVgyKQogI2RlZmluZSBDU0NSX1UobikgKElPX0FERFJFU1MoV0VJTV9CQVNFX0FERFIpICsgbiAqIDB4MTApCiAjZGVmaW5lIENTQ1JfTChuKSAoSU9fQUREUkVTUyhXRUlNX0JBU0VfQUREUikgKyBuICogMHgxMCArIDB4NCkKICNkZWZpbmUgQ1NDUl9BKG4pIChJT19BRERSRVNTKFdFSU1fQkFTRV9BRERSKSArIG4gKiAweDEwICsgMHg4KQogI2VuZGlmCiAKLSNkZWZpbmUgY3B1X2lzX214MygpCShjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpCisjZGVmaW5lIGNwdV9pc19teDMoKQkoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpIHx8IGNwdV9pc19teGM5MTIzMSgpKQogI2RlZmluZSBjcHVfaXNfbXgyKCkJKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkKIAogI2VuZGlmIC8qICBfX0FTTV9BUkNIX01YQ19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214YzkxMjMxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0ODRkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogIENvcHlyaWdodCAyMDA0LTIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICAgIC0gUGxhdGZvcm0gc3BlY2lmaWMgcmVnaXN0ZXIgbWVtb3J5IG1hcAorICoKKyAqICBDb3B5cmlnaHQgMjAwNS0yMDA3IE1vdG9yb2xhLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fTUFDSF9NWEM5MTIzMV9IX18KKyNkZWZpbmUgX19NQUNIX01YQzkxMjMxX0hfXworCisvKgorICogTDJDQworICovCisjZGVmaW5lIE1YQzkxMjMxX0wyQ0NfQkFTRV9BRERSCQkweDMwMDAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0wyQ0NfQkFTRV9BRERSX1ZJUlQJMHhGOTAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9MMkNDX1NJWkUJCVNaXzY0SworCisvKgorICogQUlQUyAxCisgKi8KKyNkZWZpbmUgTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSCTB4NDNGMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQJMHhGQzAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9BSVBTMV9TSVpFCQlTWl8xTQorCisjZGVmaW5lIE1YQzkxMjMxX0FJUFMxX0NUUkxfQkFTRV9BRERSCU1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUgorI2RlZmluZSBNWEM5MTIzMV9NQVhfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwNDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVZUTU9OX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ0xLQ1RMX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgwQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVRCX1NMT1Q0X0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgxMDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVRCX1NMT1Q1X0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHgxNDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRUNUX0NUSU9fQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIgKyAweDE4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9JMkNfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHg4MDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfTVVfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHg4ODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfVUFSVDFfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIgKyAweDkwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9VQVJUMl9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiArIDB4OTQwMDApCisjZGVmaW5lIE1YQzkxMjMxX0RTTV9CQVNFX0FERFIJCShNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIgKyAweDk4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9PV0lSRV9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiArIDB4OUMwMDApCisjZGVmaW5lIE1YQzkxMjMxX1NTSTFfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHhBMDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfS1BQX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUiArIDB4QTgwMDApCisjZGVmaW5lIE1YQzkxMjMxX0lPTVVYX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHhBQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1RJX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSICsgMHhCODAwMCkKKworLyoKKyAqIEFJUFMgMgorICovCisjZGVmaW5lIE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUgkweDUzRjAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUl9WSVJUCTB4RkMxMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQUlQUzJfU0laRQkJU1pfMU0KKworI2RlZmluZSBNWEM5MTIzMV9HRU1LX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4OEMwMDApCisjZGVmaW5lIE1YQzkxMjMxX0dQVDFfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHg5MDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRVBJVDFfQVBfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweDk0MDAwKQorI2RlZmluZSBNWEM5MTIzMV9TQ0NfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhBQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUk5HQV9CQVNFX0FERFIJCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweEIwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9JUFVfQ1RSTF9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4QzAwMDApCisjZGVmaW5lIE1YQzkxMjMxX0FVRE1VWF9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4QzQwMDApCisjZGVmaW5lIE1YQzkxMjMxX0VESU9fQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhDODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfR1BJTzFfQVBfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweENDMDAwKQorI2RlZmluZSBNWEM5MTIzMV9HUElPMl9BUF9CQVNFX0FERFIJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RDAwMDApCisjZGVmaW5lIE1YQzkxMjMxX1NETUFfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhENDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUlRDX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RDgwMDApCisjZGVmaW5lIE1YQzkxMjMxX1dET0cxX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhEQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUFdNX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RTAwMDApCisjZGVmaW5lIE1YQzkxMjMxX0dQSU8zX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhFNDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfV0RPRzJfQkFTRV9BRERSCShNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIgKyAweEU4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9SVElDX0JBU0VfQUREUgkJKE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUiArIDB4RUMwMDApCisjZGVmaW5lIE1YQzkxMjMxX0xQTUNfQkFTRV9BRERSCQkoTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSICsgMHhGMDAwMCkKKworLyoKKyAqIFNQQkEgZ2xvYmFsIG1vZHVsZSAwCisgKi8KKyNkZWZpbmUgTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSCTB4NTAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhGQzIwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBMF9TSVpFCQlTWl8xTQorCisjZGVmaW5lIE1YQzkxMjMxX01NQ19TREhDMV9CQVNFX0FERFIJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MDQwMDApCisjZGVmaW5lIE1YQzkxMjMxX01NQ19TREhDMl9CQVNFX0FERFIJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MDgwMDApCisjZGVmaW5lIE1YQzkxMjMxX1VBUlQzX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHgwQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1NQSTJfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDEwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9TU0kyX0JBU0VfQUREUgkJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MTQwMDApCisjZGVmaW5lIE1YQzkxMjMxX1NJTV9CQVNFX0FERFIJCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDE4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9JSU1fQkFTRV9BRERSCQkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHgxQzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1RJX1NETUFfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDIwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9VU0JPVEdfQ1RSTF9CQVNFX0FERFIJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4MjQwMDApCisjZGVmaW5lIE1YQzkxMjMxX1VTQk9UR19EQVRBX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHgyODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1NQSTFfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDMwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9TUEJBX0NUUkxfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDNDMDAwKQorI2RlZmluZSBNWEM5MTIzMV9JT01VWF9DT01fQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDQwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9DUk1fQ09NX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg0NDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfQ1JNX0FQX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg0ODAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUExMMF9CQVNFX0FERFIJCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDRDMDAwKQorI2RlZmluZSBNWEM5MTIzMV9QTEwxX0JBU0VfQUREUgkJKE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUiArIDB4NTAwMDApCisjZGVmaW5lIE1YQzkxMjMxX1BMTDJfQkFTRV9BRERSCQkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg1NDAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfR1BJTzRfU0hfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDU4MDAwKQorI2RlZmluZSBNWEM5MTIzMV9IQUNfQkFTRV9BRERSCQkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg1QzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfU0FIQVJBX0JBU0VfQUREUgkoTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSICsgMHg1QzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfUExMM19CQVNFX0FERFIJCShNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIgKyAweDYwMDAwKQorCisvKgorICogU1BCQSBnbG9iYWwgbW9kdWxlIDEKKyAqLworI2RlZmluZSBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFIJMHg1MjAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFJfVklSVAkweEZDMzAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX1NQQkExX1NJWkUJCVNaXzFNCisKKyNkZWZpbmUgTVhDOTEyMzFfTVFTUElfQkFTRV9BRERSCShNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFIgKyAweDM0MDAwKQorI2RlZmluZSBNWEM5MTIzMV9FTDFUX0JBU0VfQUREUgkJKE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUiArIDB4MzgwMDApCisKKy8qIQorICogRGVmaW5lcyBmb3IgU1BCQSBtb2R1bGVzCisgKi8KKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9TREhDMQkJMHgwNAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1NESEMyCQkweDA4CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfVUFSVDMJCTB4MEMKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9DU1BJMgkJMHgxMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1NTSTIJCTB4MTQKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9TSU0JCTB4MTgKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9JSU0JCTB4MUMKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9DVElfU0RNQQkJMHgyMAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1VTQk9UR19DVFJMX1JFR1MJMHgyNAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX1VTQk9UR19EQVRBX1JFR1MJMHgyOAorI2RlZmluZSBNWEM5MTIzMV9TUEJBX0NTUEkxCQkweDMwCisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfTVFTUEkJCTB4MzQKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9FTDFUCQkweDM4CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfSU9NVVgJCTB4NDAKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9DUk1fQ09NCQkweDQ0CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfQ1JNX0FQCQkweDQ4CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfUExMMAkJMHg0QworI2RlZmluZSBNWEM5MTIzMV9TUEJBX1BMTDEJCTB4NTAKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9QTEwyCQkweDU0CisjZGVmaW5lIE1YQzkxMjMxX1NQQkFfR1BJTzQJCTB4NTgKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQV9TQUhBUkEJCTB4NUMKKworLyoKKyAqIFJPTVAgYW5kIEFWSUMKKyAqLworI2RlZmluZSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUgkJMHg2MDAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUl9WSVJUCTB4RkM0MDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfUk9NUF9TSVpFCQlTWl82NEsKKworI2RlZmluZSBNWEM5MTIzMV9BVklDX0JBU0VfQUREUgkJMHg2ODAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9BVklDX0JBU0VfQUREUl9WSVJUCTB4RkM0MTAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQVZJQ19TSVpFCQlTWl82NEsKKworLyoKKyAqIE5BTkQsIFNEUkFNLCBXRUlNLCBNM0lGLCBFTUkgY29udHJvbGxlcnMKKyAqLworI2RlZmluZSBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSCTB4QjgwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUl9WSVJUCTB4RkM0MjAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfWF9NRU1DX1NJWkUJCVNaXzY0SworCisjZGVmaW5lIE1YQzkxMjMxX05GQ19CQVNFX0FERFIJCShNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSICsgMHgwMDAwKQorI2RlZmluZSBNWEM5MTIzMV9FU0RDVExfQkFTRV9BRERSCShNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQorI2RlZmluZSBNWEM5MTIzMV9XRUlNX0JBU0VfQUREUgkJKE1YQzkxMjMxX1hfTUVNQ19CQVNFX0FERFIgKyAweDIwMDApCisjZGVmaW5lIE1YQzkxMjMxX00zSUZfQkFTRV9BRERSCQkoTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUiArIDB4MzAwMCkKKyNkZWZpbmUgTVhDOTEyMzFfRU1JX0NUTF9CQVNFX0FERFIJKE1YQzkxMjMxX1hfTUVNQ19CQVNFX0FERFIgKyAweDQwMDApCisKKy8qCisgKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MKKyAqIENQTEQgaXMgY29ubmVjdGVkIG9uIENTNAorICogQ1M1IGlzIFRQMTAyMSBvciBpdCBpcyBub3QgY29ubmVjdGVkCisgKiAqLworI2RlZmluZSBNWEM5MTIzMV9GQl9SQU1fQkFTRV9BRERSCTB4NzgwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfRkJfUkFNX1NJWkUJCVNaXzI1NksKKyNkZWZpbmUgTVhDOTEyMzFfQ1NEMF9CQVNFX0FERFIJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQ1NEMV9CQVNFX0FERFIJCTB4OTAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQ1MwX0JBU0VfQUREUgkJMHhBMDAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9DUzFfQkFTRV9BRERSCQkweEE4MDAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0NTMl9CQVNFX0FERFIJCTB4QjAwMDAwMDAKKyNkZWZpbmUgTVhDOTEyMzFfQ1MzX0JBU0VfQUREUgkJMHhCMjAwMDAwMAorI2RlZmluZSBNWEM5MTIzMV9DUzRfQkFTRV9BRERSCQkweEI0MDAwMDAwCisjZGVmaW5lIE1YQzkxMjMxX0NTNV9CQVNFX0FERFIJCTB4QjYwMDAwMDAKKworLyogSXMgZ2l2ZW4gYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IHJlZ2lvbj8gKi8KKyNkZWZpbmUgQUREUkVTU19JTl9SRUdJT04oYWRkciwgc3RhcnQsIHNpemUpIFwKKwkoKChhZGRyKSA+PSAoc3RhcnQpKSAmJiAoKGFkZHIpIDwgKHN0YXJ0KSsoc2l6ZSkpKQorCisvKiBJcyBnaXZlbiBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIHNwZWNpZmllZCBuYW1lZCBgbW9kdWxlJz8gKi8KKyNkZWZpbmUgTVhDOTEyMzFfSVNfTU9EVUxFKGFkZHIsIG1vZHVsZSkgXAorCUFERFJFU1NfSU5fUkVHSU9OKGFkZHIsIE1YQzkxMjMxXyAjIyBtb2R1bGUgIyMgX0JBU0VfQUREUiwgXAorCSAgICAgICAgICAgICAgICAgICAgICAgIE1YQzkxMjMxXyAjIyBtb2R1bGUgIyMgX1NJWkUpCisvKgorICogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwaHlzaWNhbCB0byB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYWxsIHRoZQorICogcGVyaXBoZXJhbCBtb2R1bGVzLiBJdCBpcyB1c2VkIGJ5IHBhc3NpbmcgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXMgeAorICogYW5kIHJldHVybmluZyB0aGUgdmlydHVhbCBhZGRyZXNzLiBJZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBub3QgbWFwcGVkLAorICogaXQgcmV0dXJucyAweERFQURCRUVGCisgKi8KKworI2RlZmluZSBNWEM5MTIzMV9JT19BRERSRVNTKHgpIFwKKwkodm9pZCBfX2lvbWVtICopIFwKKwkoTVhDOTEyMzFfSVNfTU9EVUxFKHgsIEwyQ0MpID8gTVhDOTEyMzFfTDJDQ19JT19BRERSRVNTKHgpIDogXAorCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgQUlQUzEpID8gTVhDOTEyMzFfQUlQUzFfSU9fQUREUkVTUyh4KSA6IFwKKwkgTVhDOTEyMzFfSVNfTU9EVUxFKHgsIEFJUFMyKSA/IE1YQzkxMjMxX0FJUFMyX0lPX0FERFJFU1MoeCkgOiBcCisJIE1YQzkxMjMxX0lTX01PRFVMRSh4LCBTUEJBMCkgPyBNWEM5MTIzMV9TUEJBMF9JT19BRERSRVNTKHgpIDogXAorCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgU1BCQTEpID8gTVhDOTEyMzFfU1BCQTFfSU9fQUREUkVTUyh4KSA6IFwKKwkgTVhDOTEyMzFfSVNfTU9EVUxFKHgsIFJPTVApID8gTVhDOTEyMzFfUk9NUF9JT19BRERSRVNTKHgpIDogXAorCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgQVZJQykgPyBNWEM5MTIzMV9BVklDX0lPX0FERFJFU1MoeCkgOiBcCisJIE1YQzkxMjMxX0lTX01PRFVMRSh4LCBYX01FTUMpID8gTVhDOTEyMzFfWF9NRU1DX0lPX0FERFJFU1MoeCkgOiBcCisJIDB4REVBREJFRUYpCisKKworLyoKKyAqIGRlZmluZSB0aGUgYWRkcmVzcyBtYXBwaW5nIG1hY3JvczogaW4gcGh5c2ljYWwgYWRkcmVzcyBvcmRlcgorICovCisjZGVmaW5lIE1YQzkxMjMxX0wyQ0NfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfTDJDQ19CQVNFX0FERFIpICsgTVhDOTEyMzFfTDJDQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWEM5MTIzMV9BSVBTMV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIpICsgTVhDOTEyMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgTVhDOTEyMzFfU1BCQTBfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSKSArIE1YQzkxMjMxX1NQQkEwX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIE1YQzkxMjMxX1NQQkExX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUikgKyBNWEM5MTIzMV9TUEJBMV9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWEM5MTIzMV9BSVBTMl9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFIpICsgTVhDOTEyMzFfQUlQUzJfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgTVhDOTEyMzFfUk9NUF9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWEM5MTIzMV9ST01QX0JBU0VfQUREUikgKyBNWEM5MTIzMV9ST01QX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIE1YQzkxMjMxX0FWSUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfQVZJQ19CQVNFX0FERFIpICsgTVhDOTEyMzFfQVZJQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWEM5MTIzMV9YX01FTUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVhDOTEyMzFfWF9NRU1DX0JBU0VfQUREUikgKyBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycworICovCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9HUElPMwkJMAorI2RlZmluZSBNWEM5MTIzMV9JTlRfRUwxVF9DSQkJMQorI2RlZmluZSBNWEM5MTIzMV9JTlRfRUwxVF9SRkNJCQkyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FTDFUX1JGSQkJMworI2RlZmluZSBNWEM5MTIzMV9JTlRfRUwxVF9NQ1UJCTQKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0VMMVRfSVBJCQk1CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9NVV9HRU4JCTYKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0dQSU80CQk3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9NTUNfU0RIQzIJCTgKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX01NQ19TREhDMQkJOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfSTJDCQkxMAorI2RlZmluZSBNWEM5MTIzMV9JTlRfU1NJMgkJMTEKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NTSTEJCTEyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9DU1BJMgkJMTMKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0NTUEkxCQkxNAorI2RlZmluZSBNWEM5MTIzMV9JTlRfUlRJQwkJMTUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NBSEFSQQkJMTUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0hBQwkJMTUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VBUlQzX1JYCQkxNgorI2RlZmluZSBNWEM5MTIzMV9JTlRfVUFSVDNfVFgJCTE3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VQVJUM19NSU5UCQkxOAorI2RlZmluZSBNWEM5MTIzMV9JTlRfRUNUCQkxOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfU0lNX0lQQgkJMjAKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NJTV9EQVRBCQkyMQorI2RlZmluZSBNWEM5MTIzMV9JTlRfUk5HQQkJMjIKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0RTTV9BUAkJMjMKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0tQUAkJMjQKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1JUQwkJMjUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1BXTQkJMjYKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0dFTUtfQVAJCTI3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FUElUCQkyOAorI2RlZmluZSBNWEM5MTIzMV9JTlRfR1BUCQkyOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfVUFSVDJfUlgJCTMwCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VQVJUMl9UWAkJMzEKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VBUlQyX01JTlQJCTMyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9OQU5ERkMJCTMzCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9TRE1BCQkzNAorI2RlZmluZSBNWEM5MTIzMV9JTlRfVVNCX1dBS0VVUAkJMzUKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VTQl9TT0YJCTM2CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9QTVVfRVZUTU9OCQkzNworI2RlZmluZSBNWEM5MTIzMV9JTlRfVVNCX0ZVTkMJCTM4CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VU0JfRE1BCQkzOQorI2RlZmluZSBNWEM5MTIzMV9JTlRfVVNCX0NUUkwJCTQwCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9JUFVfRVJSCQk0MQorI2RlZmluZSBNWEM5MTIzMV9JTlRfSVBVX1NZTgkJNDIKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1VBUlQxX1JYCQk0MworI2RlZmluZSBNWEM5MTIzMV9JTlRfVUFSVDFfVFgJCTQ0CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9VQVJUMV9NSU5UCQk0NQorI2RlZmluZSBNWEM5MTIzMV9JTlRfSUlNCQk0NgorI2RlZmluZSBNWEM5MTIzMV9JTlRfTVVfUlhfT1IJCTQ3CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9NVV9UWF9PUgkJNDgKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1NDQ19TQ00JCTQ5CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9TQ0NfU01OCQk1MAorI2RlZmluZSBNWEM5MTIzMV9JTlRfR1BJTzIJCTUxCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9HUElPMQkJNTIKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX01RU1BJMQkJNTMKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX01RU1BJMgkJNTQKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX1dET0cyCQk1NQorI2RlZmluZSBNWEM5MTIzMV9JTlRfRVhUX0lOVDcJCTU2CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FWFRfSU5UNgkJNTcKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0VYVF9JTlQ1CQk1OAorI2RlZmluZSBNWEM5MTIzMV9JTlRfRVhUX0lOVDQJCTU5CisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FWFRfSU5UMwkJNjAKKyNkZWZpbmUgTVhDOTEyMzFfSU5UX0VYVF9JTlQyCQk2MQorI2RlZmluZSBNWEM5MTIzMV9JTlRfRVhUX0lOVDEJCTYyCisjZGVmaW5lIE1YQzkxMjMxX0lOVF9FWFRfSU5UMAkJNjMKKworI2RlZmluZSBNWEM5MTIzMV9NQVhfSU5UX0xJTkVTCQk2MworI2RlZmluZSBNWEM5MTIzMV9NQVhfRVhUX0xJTkVTCQk4CisKKyNlbmRpZiAvKiBfX01BQ0hfTVhDOTEyMzFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTU2MjQxYS4uZWYwMDE5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjEsOCArMjEsMTggQEAKICNpZm5kZWYgX19BU01fQVJDSF9NWENfU1lTVEVNX0hfXwogI2RlZmluZSBfX0FTTV9BUkNIX01YQ19TWVNURU1fSF9fCiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKwogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogeworI2lmZGVmIENPTkZJR19BUkNIX01YQzkxMjMxCisJaWYgKGNwdV9pc19teGM5MTIzMSgpKSB7CisJCS8qIE5lZWQgdGhpcyB0byBzZXQgRFNNIGxvdy1wb3dlciBtb2RlICovCisJCW14YzkxMjMxX3ByZXBhcmVfaWRsZSgpOworCX0KKyNlbmRpZgorCiAJY3B1X2RvX2lkbGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaAppbmRleCAwN2I0YTczLi41MjdhNmMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMjYsNiArMjYsMTAgQEAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMzMwMDAwMAogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxNjYyNTAwMAorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDI1CisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTYwMDAwMDAKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVhDOTEyMzEKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMzAwMDAwMAogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX0FTTV9BUkNIX01YQ19USU1FWF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IGRlNmZlMDMuLjA4MmEzOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMjYsOCArMjYsMTEgQEAKICNkZWZpbmUgX19NWENfQk9PVF9VTkNPTVBSRVNTCiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2RlZmluZSBVQVJUKHgpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikoc2VyaWFsX3BvcnQgKyAoeCkpKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdWFydF9iYXNlOworCisjZGVmaW5lIFVBUlQoeCkgKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSh1YXJ0X2Jhc2UgKyAoeCkpKQogCiAjZGVmaW5lIFVTUjIgMHg5OAogI2RlZmluZSBVU1IyX1RYRkUgKDE8PDE0KQpAQCAtNDYsMTkgKzQ5LDEwIEBACiAKIHN0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQogewotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlcmlhbF9wb3J0ID0gMDsKLQotCWlmICh1bmxpa2VseShzZXJpYWxfcG9ydCA9PSAwKSkgewotCQlkbyB7Ci0JCQlzZXJpYWxfcG9ydCA9IFVBUlQxX0JBU0VfQUREUjsKLQkJCWlmIChVQVJUKFVDUjEpICYgVUNSMV9VQVJURU4pCi0JCQkJYnJlYWs7Ci0JCQlzZXJpYWxfcG9ydCA9IFVBUlQyX0JBU0VfQUREUjsKLQkJCWlmIChVQVJUKFVDUjEpICYgVUNSMV9VQVJURU4pCi0JCQkJYnJlYWs7Ci0JCQlyZXR1cm47Ci0JCX0gd2hpbGUgKDApOwotCX0KKwlpZiAoIXVhcnRfYmFzZSkKKwkJcmV0dXJuOworCWlmICghKFVBUlQoVUNSMSkgJiBVQ1IxX1VBUlRFTikpCisJCXJldHVybjsKIAogCXdoaWxlICghKFVBUlQoVVNSMikgJiBVU1IyX1RYRkUpKQogCQliYXJyaWVyKCk7CkBAIC02OCwxMSArNjIsNDkgQEAKIAogI2RlZmluZSBmbHVzaCgpIGRvIHsgfSB3aGlsZSAoMCkKIAotLyoKLSAqIG5vdGhpbmcgdG8gZG8KLSAqLwotI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIE1YMV9VQVJUMV9CQVNFX0FERFIJMHgwMDIwNjAwMAorI2RlZmluZSBNWDI1X1VBUlQxX0JBU0VfQUREUgkweDQzZjkwMDAwCisjZGVmaW5lIE1YMlhfVUFSVDFfQkFTRV9BRERSCTB4MTAwMGEwMDAKKyNkZWZpbmUgTVgzWF9VQVJUMV9CQVNFX0FERFIJMHg0M0Y5MDAwMAorI2RlZmluZSBNWDNYX1VBUlQyX0JBU0VfQUREUgkweDQzRjk0MDAwCiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hcmNoX2RlY29tcF9zZXR1cCh1bnNpZ25lZCBsb25nIGFyY2hfaWQpCit7CisJc3dpdGNoIChhcmNoX2lkKSB7CisJY2FzZSBNQUNIX1RZUEVfTVgxQURTOgorCWNhc2UgTUFDSF9UWVBFX1NDQjkzMjg6CisJCXVhcnRfYmFzZSA9IE1YMV9VQVJUMV9CQVNFX0FERFI7CisJCWJyZWFrOworCWNhc2UgTUFDSF9UWVBFX01YMjVfM0RTOgorCQl1YXJ0X2Jhc2UgPSBNWDI1X1VBUlQxX0JBU0VfQUREUjsKKwkJYnJlYWs7CisJY2FzZSBNQUNIX1RZUEVfSU1YMjdMSVRFOgorCWNhc2UgTUFDSF9UWVBFX01YMjdfM0RTOgorCWNhc2UgTUFDSF9UWVBFX01YMjdBRFM6CisJY2FzZSBNQUNIX1RZUEVfUENNMDM4OgorCWNhc2UgTUFDSF9UWVBFX01YMjFBRFM6CisJCXVhcnRfYmFzZSA9IE1YMlhfVUFSVDFfQkFTRV9BRERSOworCQlicmVhazsKKwljYXNlIE1BQ0hfVFlQRV9NWDMxTElURToKKwljYXNlIE1BQ0hfVFlQRV9BUk1BRElMTE81WDA6CisJY2FzZSBNQUNIX1RZUEVfTVgzMU1PQk9BUkQ6CisJY2FzZSBNQUNIX1RZUEVfUU9ORzoKKwljYXNlIE1BQ0hfVFlQRV9NWDMxXzNEUzoKKwljYXNlIE1BQ0hfVFlQRV9QQ00wMzc6CisJY2FzZSBNQUNIX1RZUEVfTVgzMUFEUzoKKwljYXNlIE1BQ0hfVFlQRV9NWDM1XzNEUzoKKwljYXNlIE1BQ0hfVFlQRV9QQ00wNDM6CisJCXVhcnRfYmFzZSA9IE1YM1hfVUFSVDFfQkFTRV9BRERSOworCQlicmVhazsKKwljYXNlIE1BQ0hfVFlQRV9NQUdYX1pONToKKwkJdWFydF9iYXNlID0gTVgzWF9VQVJUMl9CQVNFX0FERFI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCV9fYXJjaF9kZWNvbXBfc2V0dXAoYXJjaF9pZCkKICNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCiAKICNlbmRpZgkJCQkvKiBfX0FTTV9BUkNIX01YQ19VTkNPTVBSRVNTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtdjMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LXYzLmMKaW5kZXggNzdhMDc4Zi4uODUxY2E5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtdjMuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC12My5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC12My5oPgogCi0jZGVmaW5lIElPTVVYX0JBU0UJSU9fQUREUkVTUyhJT01VWENfQkFTRV9BRERSKQorc3RhdGljIHZvaWQgX19pb21lbSAqYmFzZTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9tdXhfdjNfcGFkX2FsbG9jX21hcFsweDIwMCAvIEJJVFNfUEVSX0xPTkddOwogCkBAIC00NSwxNCArNDUsMTQgQEAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChwYWRfb2ZzID4+IDIsIGlvbXV4X3YzX3BhZF9hbGxvY19tYXApKQogCQlyZXR1cm4gLUVCVVNZOwogCWlmIChwYWQtPm11eF9jdHJsX29mcykKLQkJX19yYXdfd3JpdGVsKHBhZC0+bXV4X21vZGUsIElPTVVYX0JBU0UgKyBwYWQtPm11eF9jdHJsX29mcyk7CisJCV9fcmF3X3dyaXRlbChwYWQtPm11eF9tb2RlLCBiYXNlICsgcGFkLT5tdXhfY3RybF9vZnMpOwogCiAJaWYgKHBhZC0+c2VsZWN0X2lucHV0X29mcykKIAkJX19yYXdfd3JpdGVsKHBhZC0+c2VsZWN0X2lucHV0LAotCQkJCUlPTVVYX0JBU0UgKyBwYWQtPnNlbGVjdF9pbnB1dF9vZnMpOworCQkJCWJhc2UgKyBwYWQtPnNlbGVjdF9pbnB1dF9vZnMpOwogCi0JaWYgKCEocGFkLT5wYWRfY3RybCAmIE5PX1BBRF9DVFJMKSkKLQkJX19yYXdfd3JpdGVsKHBhZC0+cGFkX2N0cmwsIElPTVVYX0JBU0UgKyBwYWQtPnBhZF9jdHJsX29mcyk7CisJaWYgKCEocGFkLT5wYWRfY3RybCAmIE5PX1BBRF9DVFJMKSAmJiBwYWQtPnBhZF9jdHJsX29mcykKKwkJX19yYXdfd3JpdGVsKHBhZC0+cGFkX2N0cmwsIGJhc2UgKyBwYWQtPnBhZF9jdHJsX29mcyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKG14Y19pb211eF92M19zZXR1cF9wYWQpOwpAQCAtOTYsMyArOTYsOCBAQAogCX0KIH0KIEVYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3YzX3JlbGVhc2VfbXVsdGlwbGVfcGFkcyk7CisKK3ZvaWQgbXhjX2lvbXV4X3YzX2luaXQodm9pZCBfX2lvbWVtICppb211eF92M19iYXNlKQoreworCWJhc2UgPSBpb211eF92M19iYXNlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaXJxLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYwppbmRleCA4YWVlNzYzLi43NzhkZGZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pcnEuYwpAQCAtNDQsNyArNDQsNyBAQAogI2RlZmluZSBBVklDX0ZJUE5ESAkJMHg2MAkvKiBmYXN0IGludCBwZW5kaW5nIGhpZ2ggKi8KICNkZWZpbmUgQVZJQ19GSVBOREwJCTB4NjQJLyogZmFzdCBpbnQgcGVuZGluZyBsb3cgKi8KIAotc3RhdGljIHZvaWQgX19pb21lbSAqYXZpY19iYXNlOwordm9pZCBfX2lvbWVtICphdmljX2Jhc2U7CiAKIGludCBpbXhfaXJxX3NldF9wcmlvcml0eSh1bnNpZ25lZCBjaGFyIGlycSwgdW5zaWduZWQgY2hhciBwcmlvKQogewpAQCAtMTEzLDExICsxMTMsMTEgQEAKICAqIGludGVycnVwdHMuIEl0IHJlZ2lzdGVycyB0aGUgaW50ZXJydXB0IGVuYWJsZSBhbmQgZGlzYWJsZSBmdW5jdGlvbnMKICAqIHRvIHRoZSBrZXJuZWwgZm9yIGVhY2ggaW50ZXJydXB0IHNvdXJjZS4KICAqLwotdm9pZCBfX2luaXQgbXhjX2luaXRfaXJxKHZvaWQpCit2b2lkIF9faW5pdCBteGNfaW5pdF9pcnEodm9pZCBfX2lvbWVtICppcnFiYXNlKQogewogCWludCBpOwogCi0JYXZpY19iYXNlID0gSU9fQUREUkVTUyhBVklDX0JBU0VfQUREUik7CisJYXZpY19iYXNlID0gaXJxYmFzZTsKIAogCS8qIHB1dCB0aGUgQVZJQyBpbnRvIHRoZSByZXNldCB2YWx1ZSB3aXRoCiAJICogYWxsIGludGVycnVwdHMgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3B3bS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKaW5kZXggYWUzNDE5OC4uNWNkYmQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgTVgzX1BXTVBSICAgICAgICAgICAgICAgICAweDEwICAgIC8qIFBXTSBQZXJpb2QgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTVgzX1BXTUNSX1BSRVNDQUxFUih4KSAgICAoKCh4IC0gMSkgJiAweEZGRikgPDwgNCkKICNkZWZpbmUgTVgzX1BXTUNSX0NMS1NSQ19JUEdfSElHSCAoMiA8PCAxNikKKyNkZWZpbmUgTVgzX1BXTUNSX0NMS1NSQ19JUEcgICAgICAoMSA8PCAxNikKICNkZWZpbmUgTVgzX1BXTUNSX0VOICAgICAgICAgICAgICAoMSA8PCAwKQogCiAKQEAgLTU1LDkgKzU2LDExIEBACiAJaWYgKHB3bSA9PSBOVUxMIHx8IHBlcmlvZF9ucyA9PSAwIHx8IGR1dHlfbnMgPiBwZXJpb2RfbnMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MygpKSB7CisJaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpIHsKIAkJdW5zaWduZWQgbG9uZyBsb25nIGM7CiAJCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2N5Y2xlcywgZHV0eV9jeWNsZXMsIHByZXNjYWxlOworCQl1MzIgY3I7CisKIAkJYyA9IGNsa19nZXRfcmF0ZShwd20tPmNsayk7CiAJCWMgPSBjICogcGVyaW9kX25zOwogCQlkb19kaXYoYywgMTAwMDAwMDAwMCk7CkBAIC03Miw5ICs3NSwxNSBAQAogCiAJCXdyaXRlbChkdXR5X2N5Y2xlcywgcHdtLT5tbWlvX2Jhc2UgKyBNWDNfUFdNU0FSKTsKIAkJd3JpdGVsKHBlcmlvZF9jeWNsZXMsIHB3bS0+bW1pb19iYXNlICsgTVgzX1BXTVBSKTsKLQkJd3JpdGVsKE1YM19QV01DUl9QUkVTQ0FMRVIocHJlc2NhbGUgLSAxKSB8Ci0JCQlNWDNfUFdNQ1JfQ0xLU1JDX0lQR19ISUdIIHwgTVgzX1BXTUNSX0VOLAotCQkJcHdtLT5tbWlvX2Jhc2UgKyBNWDNfUFdNQ1IpOworCisJCWNyID0gTVgzX1BXTUNSX1BSRVNDQUxFUihwcmVzY2FsZSkgfCBNWDNfUFdNQ1JfRU47CisKKwkJaWYgKGNwdV9pc19teDI1KCkpCisJCQljciB8PSBNWDNfUFdNQ1JfQ0xLU1JDX0lQRzsKKwkJZWxzZQorCQkJY3IgfD0gTVgzX1BXTUNSX0NMS1NSQ19JUEdfSElHSDsKKworCQl3cml0ZWwoY3IsIHB3bS0+bW1pb19iYXNlICsgTVgzX1BXTUNSKTsKIAl9IGVsc2UgaWYgKGNwdV9pc19teDEoKSB8fCBjcHVfaXNfbXgyMSgpKSB7CiAJCS8qIFRoZSBQV00gc3Vic3lzdGVtIGFsbG93cyBmb3IgZXhhY3QgZnJlcXVlbmNpZXMuIEhvd2V2ZXIsCiAJCSAqIEkgY2Fubm90IGNvbm5lY3QgYSBzY29wZSBvbiBteSBkZXZpY2UgdG8gdGhlIFBXTSBsaW5lIGFuZApAQCAtMTE4LDYgKzEyNyw4IEBACiAKIHZvaWQgcHdtX2Rpc2FibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKIHsKKwl3cml0ZWwoMCwgcHdtLT5tbWlvX2Jhc2UgKyBNWDNfUFdNQ1IpOworCiAJaWYgKHB3bS0+Y2xrX2VuYWJsZWQpIHsKIAkJY2xrX2Rpc2FibGUocHdtLT5jbGspOwogCQlwd20tPmNsa19lbmFibGVkID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3N5c3RlbS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKaW5kZXggNzljMzc1Ny4uOTdmNDI3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKQEAgLTI3LDMyICsyNywzOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDEKLSNkZWZpbmUgV0RPR19XQ1JfUkVHCQlJT19BRERSRVNTKFdEVF9CQVNFX0FERFIpCi0jZGVmaW5lIFdET0dfV0NSX0VOQUJMRQkJKDEgPDwgMCkKLSNlbHNlCi0jZGVmaW5lIFdET0dfV0NSX1JFRwkJSU9fQUREUkVTUyhXRE9HX0JBU0VfQUREUikKLSNkZWZpbmUgV0RPR19XQ1JfRU5BQkxFCQkoMSA8PCAyKQotI2VuZGlmCitzdGF0aWMgdm9pZCBfX2lvbWVtICp3ZG9nX2Jhc2U7CiAKIC8qCiAgKiBSZXNldCB0aGUgc3lzdGVtLiBJdCBpcyBjYWxsZWQgYnkgbWFjaGluZV9yZXN0YXJ0KCkuCiAgKi8KIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQlpZiAoIWNwdV9pc19teDEoKSkgeworCXVuc2lnbmVkIGludCB3Y3JfZW5hYmxlOworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVhDOTEyMzEKKwlpZiAoY3B1X2lzX214YzkxMjMxKCkpIHsKKwkJbXhjOTEyMzFfYXJjaF9yZXNldChtb2RlLCBjbWQpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaWYgKGNwdV9pc19teDEoKSkgeworCQl3Y3JfZW5hYmxlID0gKDEgPDwgMCk7CisJfSBlbHNlIHsKIAkJc3RydWN0IGNsayAqY2xrOwogCiAJCWNsayA9IGNsa19nZXRfc3lzKCJpbXgtd2R0LjAiLCBOVUxMKTsKIAkJaWYgKCFJU19FUlIoY2xrKSkKIAkJCWNsa19lbmFibGUoY2xrKTsKKwkJd2NyX2VuYWJsZSA9ICgxIDw8IDIpOwogCX0KIAogCS8qIEFzc2VydCBTUlMgc2lnbmFsICovCi0JX19yYXdfd3JpdGV3KFdET0dfV0NSX0VOQUJMRSwgV0RPR19XQ1JfUkVHKTsKKwlfX3Jhd193cml0ZXcod2NyX2VuYWJsZSwgd2RvZ19iYXNlKTsKIAogCS8qIHdhaXQgZm9yIHJlc2V0IHRvIGFzc2VydC4uLiAqLwogCW1kZWxheSg1MDApOwpAQCAtNjUsMyArNzEsOCBAQAogCS8qIHdlJ2xsIHRha2UgYSBqdW1wIHRocm91Z2ggemVybyBhcyBhIHBvb3Igc2Vjb25kICovCiAJY3B1X3Jlc2V0KDApOwogfQorCit2b2lkIG14Y19hcmNoX3Jlc2V0X2luaXQodm9pZCBfX2lvbWVtICpiYXNlKQoreworCXdkb2dfYmFzZSA9IGJhc2U7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMgYi9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMKaW5kZXggODhmYjNhNS4uODQ0NTY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYwpAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBNWDJfVFNUQVRfQ0FQVAkJKDEgPDwgMSkKICNkZWZpbmUgTVgyX1RTVEFUX0NPTVAJCSgxIDw8IDApCiAKLS8qIE1YMzEsIE1YMzUgKi8KKy8qIE1YMzEsIE1YMzUsIE1YMjUsIE1YQzkxMjMxICovCiAjZGVmaW5lIE1YM19UQ1RMX1dBSVRFTgkJKDEgPDwgMykKICNkZWZpbmUgTVgzX1RDVExfQ0xLX0lQRwkoMSA8PCA2KQogI2RlZmluZSBNWDNfVENUTF9GUlIJCSgxIDw8IDkpCkBAIC02Niw3ICs2Niw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIAotCWlmIChjcHVfaXNfbXgzKCkpCisJaWYgKGNwdV9pc19teDMoKSB8fCBjcHVfaXNfbXgyNSgpKQogCQlfX3Jhd193cml0ZWwoMCwgdGltZXJfYmFzZSArIE1YM19JUik7CiAJZWxzZSB7CiAJCXRtcCA9IF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2UgKyBNWENfVENUTCk7CkBAIC03Niw3ICs3Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBncHRfaXJxX2VuYWJsZSh2b2lkKQogewotCWlmIChjcHVfaXNfbXgzKCkpCisJaWYgKGNwdV9pc19teDMoKSB8fCBjcHVfaXNfbXgyNSgpKQogCQlfX3Jhd193cml0ZWwoMTw8MCwgdGltZXJfYmFzZSArIE1YM19JUik7CiAJZWxzZSB7CiAJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbCh0aW1lcl9iYXNlICsgTVhDX1RDVEwpIHwgTVgxXzJfVENUTF9JUlFFTiwKQEAgLTkwLDcgKzkwLDcgQEAKIAkJX19yYXdfd3JpdGVsKDAsIHRpbWVyX2Jhc2UgKyBNWDFfMl9UU1RBVCk7CiAJaWYgKGNwdV9pc19teDIoKSkKIAkJX19yYXdfd3JpdGVsKE1YMl9UU1RBVF9DQVBUIHwgTVgyX1RTVEFUX0NPTVAsIHRpbWVyX2Jhc2UgKyBNWDFfMl9UU1RBVCk7Ci0JaWYgKGNwdV9pc19teDMoKSkKKwlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCiAJCV9fcmF3X3dyaXRlbChNWDNfVFNUQVRfT0YxLCB0aW1lcl9iYXNlICsgTVgzX1RTVEFUKTsKIH0KIApAQCAtMTE3LDcgKzExNyw3IEBACiB7CiAJdW5zaWduZWQgaW50IGMgPSBjbGtfZ2V0X3JhdGUodGltZXJfY2xrKTsKIAotCWlmIChjcHVfaXNfbXgzKCkpCisJaWYgKGNwdV9pc19teDMoKSB8fCBjcHVfaXNfbXgyNSgpKQogCQljbG9ja3NvdXJjZV9teGMucmVhZCA9IG14M19nZXRfY3ljbGVzOwogCiAJY2xvY2tzb3VyY2VfbXhjLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KGMsCkBAIC0xODAsNyArMTgwLDcgQEAKIAogCWlmIChtb2RlICE9IGNsb2NrZXZlbnRfbW9kZSkgewogCQkvKiBTZXQgZXZlbnQgdGltZSBpbnRvIGZhci1mYXIgZnV0dXJlICovCi0JCWlmIChjcHVfaXNfbXgzKCkpCisJCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKIAkJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbCh0aW1lcl9iYXNlICsgTVgzX1RDTikgLSAzLAogCQkJCQl0aW1lcl9iYXNlICsgTVgzX1RDTVApOwogCQllbHNlCkBAIC0yMzMsNyArMjMzLDcgQEAKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmY2xvY2tldmVudF9teGM7CiAJdWludDMyX3QgdHN0YXQ7CiAKLQlpZiAoY3B1X2lzX214MygpKQorCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKIAkJdHN0YXQgPSBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlICsgTVgzX1RTVEFUKTsKIAllbHNlCiAJCXRzdGF0ID0gX19yYXdfcmVhZGwodGltZXJfYmFzZSArIE1YMV8yX1RTVEFUKTsKQEAgLTI2NCw3ICsyNjQsNyBAQAogewogCXVuc2lnbmVkIGludCBjID0gY2xrX2dldF9yYXRlKHRpbWVyX2Nsayk7CiAKLQlpZiAoY3B1X2lzX214MygpKQorCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKIAkJY2xvY2tldmVudF9teGMuc2V0X25leHRfZXZlbnQgPSBteDNfc2V0X25leHRfZXZlbnQ7CiAKIAljbG9ja2V2ZW50X214Yy5tdWx0ID0gZGl2X3NjKGMsIE5TRUNfUEVSX1NFQywKQEAgLTI4MSwzMCArMjgxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19pbml0IG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2NsaykKK3ZvaWQgX19pbml0IG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsaywgdm9pZCBfX2lvbWVtICpiYXNlLCBpbnQgaXJxKQogewogCXVpbnQzMl90IHRjdGxfdmFsOwotCWludCBpcnE7CiAKIAljbGtfZW5hYmxlKHRpbWVyX2Nsayk7CiAKLQlpZiAoY3B1X2lzX214MSgpKSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfTVgxCi0JCXRpbWVyX2Jhc2UgPSBJT19BRERSRVNTKFRJTTFfQkFTRV9BRERSKTsKLQkJaXJxID0gVElNMV9JTlQ7Ci0jZW5kaWYKLQl9IGVsc2UgaWYgKGNwdV9pc19teDIoKSkgewotI2lmZGVmIENPTkZJR19BUkNIX01YMgotCQl0aW1lcl9iYXNlID0gSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUik7Ci0JCWlycSA9IE1YQ19JTlRfR1BUMTsKLSNlbmRpZgotCX0gZWxzZSBpZiAoY3B1X2lzX214MygpKSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfTVgzCi0JCXRpbWVyX2Jhc2UgPSBJT19BRERSRVNTKEdQVDFfQkFTRV9BRERSKTsKLQkJaXJxID0gTVhDX0lOVF9HUFQ7Ci0jZW5kaWYKLQl9IGVsc2UKLQkJQlVHKCk7CisJdGltZXJfYmFzZSA9IGJhc2U7CiAKIAkvKgogCSAqIEluaXRpYWxpc2UgdG8gYSBrbm93biBzdGF0ZSAoYWxsIHRpbWVycyBvZmYsIGFuZCB0aW1pbmcgcmVzZXQpCkBAIC0zMTMsNyArMjk2LDcgQEAKIAlfX3Jhd193cml0ZWwoMCwgdGltZXJfYmFzZSArIE1YQ19UQ1RMKTsKIAlfX3Jhd193cml0ZWwoMCwgdGltZXJfYmFzZSArIE1YQ19UUFJFUik7IC8qIHNlZSBkYXRhc2hlZXQgbm90ZSAqLwogCi0JaWYgKGNwdV9pc19teDMoKSkKKwlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCiAJCXRjdGxfdmFsID0gTVgzX1RDVExfQ0xLX0lQRyB8IE1YM19UQ1RMX0ZSUiB8IE1YM19UQ1RMX1dBSVRFTiB8IE1YQ19UQ1RMX1RFTjsKIAllbHNlCiAJCXRjdGxfdmFsID0gTVgxXzJfVENUTF9GUlIgfCBNWDFfMl9UQ1RMX0NMS19QQ0xLMSB8IE1YQ19UQ1RMX1RFTjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGVidWctbGVkcy5jCmluZGV4IGJlNGVlZmQuLjkzOTU4OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZWJ1Zy1sZWRzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RlYnVnLWxlZHMuYwpAQCAtMjgxLDI0ICsyODEsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmcGdhX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgZnBnYV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlfX3Jhd193cml0ZXcofjAsICZmcGdhLT5sZWRzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmcGdhX3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBmcGdhX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJX19yYXdfd3JpdGV3KH5od19sZWRfc3RhdGUsICZmcGdhLT5sZWRzKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGZwZ2FfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZF9ub2lycSA9IGZwZ2Ffc3VzcGVuZF9ub2lycSwKKwkucmVzdW1lX25vaXJxID0gZnBnYV9yZXN1bWVfbm9pcnEsCit9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsZWRfZHJpdmVyID0gewogCS5kcml2ZXIubmFtZQk9ICJvbWFwX2RiZ19sZWQiLAorCS5kcml2ZXIucG0JPSAmZnBnYV9kZXZfcG1fb3BzLAogCS5wcm9iZQkJPSBmcGdhX3Byb2JlLAotCS5zdXNwZW5kX2xhdGUJPSBmcGdhX3N1c3BlbmRfbGF0ZSwKLQkucmVzdW1lX2Vhcmx5CT0gZnBnYV9yZXN1bWVfZWFybHksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBmcGdhX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDkyOThiYzAuLjE3NmM4NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMTM4LDYgKzEzOCwzMiBAQAogI2RlZmluZSBPTUFQMjRYWF9HUElPX0NMRUFSREFUQU9VVAkweDAwOTAKICNkZWZpbmUgT01BUDI0WFhfR1BJT19TRVREQVRBT1VUCTB4MDA5NAogCisjZGVmaW5lIE9NQVA0X0dQSU9fUkVWSVNJT04JCTB4MDAwMAorI2RlZmluZSBPTUFQNF9HUElPX1NZU0NPTkZJRwkJMHgwMDEwCisjZGVmaW5lIE9NQVA0X0dQSU9fRU9JCQkJMHgwMDIwCisjZGVmaW5lIE9NQVA0X0dQSU9fSVJRU1RBVFVTUkFXMAkweDAwMjQKKyNkZWZpbmUgT01BUDRfR1BJT19JUlFTVEFUVVNSQVcxCTB4MDAyOAorI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVUzAJCTB4MDAyYworI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVUzEJCTB4MDAzMAorI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVU1NFVDAJMHgwMDM0CisjZGVmaW5lIE9NQVA0X0dQSU9fSVJRU1RBVFVTU0VUMQkweDAwMzgKKyNkZWZpbmUgT01BUDRfR1BJT19JUlFTVEFUVVNDTFIwCTB4MDAzYworI2RlZmluZSBPTUFQNF9HUElPX0lSUVNUQVRVU0NMUjEJMHgwMDQwCisjZGVmaW5lIE9NQVA0X0dQSU9fSVJRV0FLRU4wCQkweDAwNDQKKyNkZWZpbmUgT01BUDRfR1BJT19JUlFXQUtFTjEJCTB4MDA0OAorI2RlZmluZSBPTUFQNF9HUElPX1NZU1NUQVRVUwkJMHgwMTA0CisjZGVmaW5lIE9NQVA0X0dQSU9fQ1RSTAkJCTB4MDEzMAorI2RlZmluZSBPTUFQNF9HUElPX09FCQkJMHgwMTM0CisjZGVmaW5lIE9NQVA0X0dQSU9fREFUQUlOCQkweDAxMzgKKyNkZWZpbmUgT01BUDRfR1BJT19EQVRBT1VUCQkweDAxM2MKKyNkZWZpbmUgT01BUDRfR1BJT19MRVZFTERFVEVDVDAJCTB4MDE0MAorI2RlZmluZSBPTUFQNF9HUElPX0xFVkVMREVURUNUMQkJMHgwMTQ0CisjZGVmaW5lIE9NQVA0X0dQSU9fUklTSU5HREVURUNUCQkweDAxNDgKKyNkZWZpbmUgT01BUDRfR1BJT19GQUxMSU5HREVURUNUCTB4MDE0YworI2RlZmluZSBPTUFQNF9HUElPX0RFQk9VTkNFTkFCTEUJMHgwMTUwCisjZGVmaW5lIE9NQVA0X0dQSU9fREVCT1VOQ0lOR1RJTUUJMHgwMTU0CisjZGVmaW5lIE9NQVA0X0dQSU9fQ0xFQVJEQVRBT1VUCQkweDAxOTAKKyNkZWZpbmUgT01BUDRfR1BJT19TRVREQVRBT1VUCQkweDAxOTQKIC8qCiAgKiBvbWFwMzR4eCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycwogICovCkBAIC0zODYsMTIgKzQxMiwxNiBAQAogCQlyZWcgKz0gT01BUDg1MF9HUElPX0RJUl9DT05UUk9MOwogCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX09FOwogCQlicmVhazsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQlyZWcgKz0gT01BUDRfR1BJT19PRTsKKwkJYnJlYWs7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwogCQlyZXR1cm47CkBAIC00NTksOCArNDg5LDcgQEAKIAkJCWwgJj0gfigxIDw8IGdwaW8pOwogCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCWlmIChlbmFibGUpCiAJCQlyZWcgKz0gT01BUDI0WFhfR1BJT19TRVREQVRBT1VUOwpAQCAtNDY5LDYgKzQ5OCwxNSBAQAogCQlsID0gMSA8PCBncGlvOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQlpZiAoZW5hYmxlKQorCQkJcmVnICs9IE9NQVA0X0dQSU9fU0VUREFUQU9VVDsKKwkJZWxzZQorCQkJcmVnICs9IE9NQVA0X0dQSU9fQ0xFQVJEQVRBT1VUOworCQlsID0gMSA8PCBncGlvOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKQEAgLTUwOSwxMiArNTQ3LDE2IEBACiAJCXJlZyArPSBPTUFQODUwX0dQSU9fREFUQV9JTlBVVDsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19EQVRBSU47CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCXJlZyArPSBPTUFQNF9HUElPX0RBVEFJTjsKKwkJYnJlYWs7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01ODksNyArNjMxLDExIEBACiAKIAliYW5rID0gZ2V0X2dwaW9fYmFuayhncGlvKTsKIAlyZWcgPSBiYW5rLT5iYXNlOworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisJcmVnICs9IE9NQVA0X0dQSU9fREVCT1VOQ0VOQUJMRTsKKyNlbHNlCiAJcmVnICs9IE9NQVAyNFhYX0dQSU9fREVCT1VOQ0VfRU47CisjZW5kaWYKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJdmFsID0gX19yYXdfcmVhZGwocmVnKTsKQEAgLTYyNiw3ICs2NzIsMTEgQEAKIAlyZWcgPSBiYW5rLT5iYXNlOwogCiAJZW5jX3RpbWUgJj0gMHhmZjsKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCXJlZyArPSBPTUFQNF9HUElPX0RFQk9VTkNJTkdUSU1FOworI2Vsc2UKIAlyZWcgKz0gT01BUDI0WFhfR1BJT19ERUJPVU5DRV9WQUw7CisjZW5kaWYKIAlfX3Jhd193cml0ZWwoZW5jX3RpbWUsIHJlZyk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2dwaW9fZGVib3VuY2VfdGltZSk7CkBAIC02MzgsMjMgKzY4OCw0NiBAQAogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGJhbmstPmJhc2U7CiAJdTMyIGdwaW9fYml0ID0gMSA8PCBncGlvOworCXUzMiB2YWw7CiAKLQlNT0RfUkVHX0JJVChPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCwgZ3Bpb19iaXQsCi0JCXRyaWdnZXIgJiBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxLCBncGlvX2JpdCwKLQkJdHJpZ2dlciAmIElSUV9UWVBFX0xFVkVMX0hJR0gpOwotCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNULCBncGlvX2JpdCwKLQkJdHJpZ2dlciAmIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQlNT0RfUkVHX0JJVChPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QsIGdwaW9fYml0LAotCQl0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKLQorCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX0xFVkVMREVURUNUMCwgZ3Bpb19iaXQsCisJCQl0cmlnZ2VyICYgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwkJTU9EX1JFR19CSVQoT01BUDRfR1BJT19MRVZFTERFVEVDVDEsIGdwaW9fYml0LAorCQkJdHJpZ2dlciAmIElSUV9UWVBFX0xFVkVMX0hJR0gpOworCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX1JJU0lOR0RFVEVDVCwgZ3Bpb19iaXQsCisJCQl0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QsIGdwaW9fYml0LAorCQkJdHJpZ2dlciAmIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisJfSBlbHNlIHsKKwkJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDAsIGdwaW9fYml0LAorCQkJdHJpZ2dlciAmIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJCU1PRF9SRUdfQklUKE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxLCBncGlvX2JpdCwKKwkJCXRyaWdnZXIgJiBJUlFfVFlQRV9MRVZFTF9ISUdIKTsKKwkJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19SSVNJTkdERVRFQ1QsIGdwaW9fYml0LAorCQkJdHJpZ2dlciAmIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKwkJTU9EX1JFR19CSVQoT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNULCBncGlvX2JpdCwKKwkJCXRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOworCX0KIAlpZiAobGlrZWx5KCEoYmFuay0+bm9uX3dha2V1cF9ncGlvcyAmIGdwaW9fYml0KSkpIHsKLQkJaWYgKHRyaWdnZXIgIT0gMCkKLQkJCV9fcmF3X3dyaXRlbCgxIDw8IGdwaW8sIGJhbmstPmJhc2UKKwkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQlpZiAodHJpZ2dlciAhPSAwKQorCQkJCV9fcmF3X3dyaXRlbCgxIDw8IGdwaW8sIGJhbmstPmJhc2UrCisJCQkJCQlPTUFQNF9HUElPX0lSUVdBS0VOMCk7CisJCQllbHNlIHsKKwkJCQl2YWwgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJCQlPTUFQNF9HUElPX0lSUVdBS0VOMCk7CisJCQkJX19yYXdfd3JpdGVsKHZhbCAmICh+KDEgPDwgZ3BpbykpLCBiYW5rLT5iYXNlICsKKwkJCQkJCQkgT01BUDRfR1BJT19JUlFXQUtFTjApOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHRyaWdnZXIgIT0gMCkKKwkJCQlfX3Jhd193cml0ZWwoMSA8PCBncGlvLCBiYW5rLT5iYXNlCiAJCQkJCSsgT01BUDI0WFhfR1BJT19TRVRXS1VFTkEpOwotCQllbHNlCi0JCQlfX3Jhd193cml0ZWwoMSA8PCBncGlvLCBiYW5rLT5iYXNlCisJCQllbHNlCisJCQkJX19yYXdfd3JpdGVsKDEgPDwgZ3BpbywgYmFuay0+YmFzZQogCQkJCQkrIE9NQVAyNFhYX0dQSU9fQ0xFQVJXS1VFTkEpOworCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHRyaWdnZXIgIT0gMCkKIAkJCWJhbmstPmVuYWJsZWRfbm9uX3dha2V1cF9ncGlvcyB8PSBncGlvX2JpdDsKQEAgLTY2Miw5ICs3MzUsMTUgQEAKIAkJCWJhbmstPmVuYWJsZWRfbm9uX3dha2V1cF9ncGlvcyAmPSB+Z3Bpb19iaXQ7CiAJfQogCi0JYmFuay0+bGV2ZWxfbWFzayA9Ci0JCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCkgfAotCQlfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQliYW5rLT5sZXZlbF9tYXNrID0KKwkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0xFVkVMREVURUNUMCkgfAorCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fTEVWRUxERVRFQ1QxKTsKKwl9IGVsc2UgeworCQliYW5rLT5sZXZlbF9tYXNrID0KKwkJCV9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCkgfAorCQkJX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxKTsKKwl9CiB9CiAjZW5kaWYKIApAQCAtODI4LDEyICs5MDcsMTYgQEAKIAkJcmVnICs9IE9NQVA4NTBfR1BJT19JTlRfU1RBVFVTOwogCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxOwogCQlicmVhazsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQlyZWcgKz0gT01BUDRfR1BJT19JUlFTVEFUVVMwOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKQEAgLTg0MywxMiArOTI2LDE2IEBACiAJLyogV29ya2Fyb3VuZCBmb3IgY2xlYXJpbmcgRFNQIEdQSU8gaW50ZXJydXB0cyB0byBhbGxvdyByZXRlbnRpb24gKi8KICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCXJlZyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzI7Ci0JaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwlyZWcgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFTVEFUVVMxOworI2VuZGlmCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCV9fcmF3X3dyaXRlbChncGlvX21hc2ssIHJlZyk7CiAKIAkvKiBGbHVzaCBwb3N0ZWQgd3JpdGUgZm9yIHRoZSBpcnEgc3RhdHVzIHRvIGF2b2lkIHNwdXJpb3VzIGludGVycnVwdHMgKi8KIAlfX3Jhd19yZWFkbChyZWcpOwotI2VuZGlmCisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2NsZWFyX2dwaW9faXJxc3RhdHVzKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvKQpAQCAtODk4LDEzICs5ODUsMTggQEAKIAkJaW52ID0gMTsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMTsKIAkJbWFzayA9IDB4ZmZmZmZmZmY7CiAJCWJyZWFrOwogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCXJlZyArPSBPTUFQNF9HUElPX0lSUVNUQVRVU1NFVDA7CisJCW1hc2sgPSAweGZmZmZmZmZmOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybiAwOwpAQCAtOTcyLDggKzEwNjQsNyBAQAogCQkJbCB8PSBncGlvX21hc2s7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlpZiAoZW5hYmxlKQogCQkJcmVnICs9IE9NQVAyNFhYX0dQSU9fU0VUSVJRRU5BQkxFMTsKQEAgLTk4Miw2ICsxMDczLDE1IEBACiAJCWwgPSBncGlvX21hc2s7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJCWlmIChlbmFibGUpCisJCQlyZWcgKz0gT01BUDRfR1BJT19JUlFTVEFUVVNTRVQwOworCQllbHNlCisJCQlyZWcgKz0gT01BUDRfR1BJT19JUlFTVEFUVVNDTFIwOworCQlsID0gZ3Bpb19tYXNrOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKQEAgLTExNTcsMTEgKzEyNTcsMTQgQEAKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzg1MCkKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQODUwX0dQSU9fSU5UX1NUQVRVUzsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18yNFhYKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMTsKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18yNFhYKQorCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRU1RBVFVTMDsKKyNlbmRpZgogCXdoaWxlKDEpIHsKIAkJdTMyIGlzcl9zYXZlZCwgbGV2ZWxfbWFzayA9IDA7CiAJCXUzMiBlbmFibGVkOwpAQCAtMTMxNSw4ICsxNDE4LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi1zdGF0aWMgaW50IG9tYXBfbXB1aW9fc3VzcGVuZF9sYXRlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQorc3RhdGljIGludCBvbWFwX21wdWlvX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rCSpiYW5rID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJdm9pZCBfX2lvbWVtCQkqbWFza19yZWcgPSBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX01BU0tJVDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKQEAgLTEzMjksOCArMTQzMyw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF9tcHVpb19yZXN1bWVfZWFybHkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgb21hcF9tcHVpb19yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rCSpiYW5rID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJdm9pZCBfX2lvbWVtCQkqbWFza19yZWcgPSBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX01BU0tJVDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKQEAgLTEzNDIsMTQgKzE0NDcsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG9tYXBfbXB1aW9fZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZF9ub2lycSA9IG9tYXBfbXB1aW9fc3VzcGVuZF9ub2lycSwKKwkucmVzdW1lX25vaXJxID0gb21hcF9tcHVpb19yZXN1bWVfbm9pcnEsCit9OworCiAvKiB1c2UgcGxhdGZvcm1fZHJpdmVyIGZvciB0aGlzLCBub3cgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBhbnkKICAqIHBvaW50IHRvIHN5c19kZXZpY2UgKG90aGVyIHRoYW4gbm90IGRpc3R1cmJpbmcgb2xkIGNvZGUpLgogICovCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX21wdWlvX2RyaXZlciA9IHsKLQkuc3VzcGVuZF9sYXRlCT0gb21hcF9tcHVpb19zdXNwZW5kX2xhdGUsCi0JLnJlc3VtZV9lYXJseQk9IG9tYXBfbXB1aW9fcmVzdW1lX2Vhcmx5LAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJtcHVpbyIsCisJCS5wbQk9ICZvbWFwX21wdWlvX2Rldl9wbV9vcHMsCiAJfSwKIH07CiAKQEAgLTE2MzgsNyArMTc0Nyw3IEBACiAKIAkJZ3Bpb19iYW5rX2NvdW50ID0gT01BUDM0WFhfTlJfR1BJT1M7CiAJCWdwaW9fYmFuayA9IGdwaW9fYmFua180NHh4OwotCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVAyNFhYX0dQSU9fUkVWSVNJT04pOworCQlyZXYgPSBfX3Jhd19yZWFkbChncGlvX2JhbmtbMF0uYmFzZSArIE9NQVA0X0dQSU9fUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQNDR4eCBHUElPIGhhcmR3YXJlIHZlcnNpb24gJWQuJWRcbiIsCiAJCQkocmV2ID4+IDQpICYgMHgwZiwgcmV2ICYgMHgwZik7CiAJfQpAQCAtMTY3Miw3ICsxNzgxLDE2IEBACiAJCQlzdGF0aWMgY29uc3QgdTMyIG5vbl93YWtldXBfZ3Bpb3NbXSA9IHsKIAkJCQkweGUyMDNmZmMwLCAweDA4NzAwMDQwCiAJCQl9OwotCisJCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19JUlFTVEFUVVNDTFIwKTsKKwkJCV9fcmF3X3dyaXRldygweDAwMTUsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19TWVNDT05GSUcpOworCQkJX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGJhbmstPmJhc2UgKworCQkJCQkJIE9NQVA0X0dQSU9fREVCT1VOQ0VOQUJMRSk7CisJCQkvKiBJbml0aWFsaXplIGludGVyZmFjZSBjbG9jayB1bmdhdGVkLCBtb2R1bGUgZW5hYmxlZCAqLworCQkJX19yYXdfd3JpdGVsKDAsIGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0NUUkwpOworCQl9IGVsc2UgewogCQkJX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUUVOQUJMRTEpOwogCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzEpOwogCQkJX19yYXdfd3JpdGV3KDB4MDAxNSwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fU1lTQ09ORklHKTsKQEAgLTE2ODAsMTIgKzE3OTgsMTIgQEAKIAogCQkJLyogSW5pdGlhbGl6ZSBpbnRlcmZhY2UgY2xvY2sgdW5nYXRlZCwgbW9kdWxlIGVuYWJsZWQgKi8KIAkJCV9fcmF3X3dyaXRlbCgwLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DVFJMKTsKKwkJfQogCQkJaWYgKGkgPCBBUlJBWV9TSVpFKG5vbl93YWtldXBfZ3Bpb3MpKQogCQkJCWJhbmstPm5vbl93YWtldXBfZ3Bpb3MgPSBub25fd2FrZXVwX2dwaW9zW2ldOwogCQkJZ3Bpb19jb3VudCA9IDMyOwogCQl9CiAjZW5kaWYKLQogCQkvKiBSRVZJU0lUIGV2ZW50dWFsbHkgc3dpdGNoIGZyb20gT01BUC1zcGVjaWZpYyBncGlvIHN0cnVjdHMKIAkJICogb3ZlciB0byB0aGUgZ2VuZXJpYyBvbmVzCiAJCSAqLwpAQCAtMTc3MSwxNCArMTg4OSwyMCBAQAogCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TRVRfV0FLRVVQRU5BOwogCQkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCQl3YWtlX3N0YXR1cyA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1dBS0VfRU47CiAJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fQ0xFQVJXS1VFTkE7CiAJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1NFVFdLVUVOQTsKIAkJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwkJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQkJd2FrZV9zdGF0dXMgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFXQUtFTjA7CisJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRV0FLRU4wOworCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFXQUtFTjA7CisJCQlicmVhazsKKyNlbmRpZgogCQlkZWZhdWx0OgogCQkJY29udGludWU7CiAJCX0KQEAgLTE4MTMsMTMgKzE5MzcsMTggQEAKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU0VUX1dBS0VVUEVOQTsKIAkJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fQ0xFQVJXS1VFTkE7CiAJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1NFVFdLVUVOQTsKIAkJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwkJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQkJd2FrZV9jbGVhciA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVdBS0VOMDsKKwkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRV0FLRU4wOworCQkJYnJlYWs7CisjZW5kaWYKIAkJZGVmYXVsdDoKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xODYzLDIxICsxOTkyLDI5IEBACiAKIAkJaWYgKCEoYmFuay0+ZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zKSkKIAkJCWNvbnRpbnVlOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJCWJhbmstPnNhdmVkX2RhdGFpbiA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0RBVEFJTik7CiAJCWwxID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCk7CiAJCWwyID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CisJCWJhbmstPnNhdmVkX2RhdGFpbiA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQkJCU9NQVA0X0dQSU9fREFUQUlOKTsKKwkJbDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19GQUxMSU5HREVURUNUKTsKKwkJbDIgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19SSVNJTkdERVRFQ1QpOworI2VuZGlmCiAJCWJhbmstPnNhdmVkX2ZhbGxpbmdkZXRlY3QgPSBsMTsKIAkJYmFuay0+c2F2ZWRfcmlzaW5nZGV0ZWN0ID0gbDI7CiAJCWwxICY9IH5iYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3M7CiAJCWwyICY9IH5iYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3M7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCQlfX3Jhd193cml0ZWwobDEsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QpOwogCQlfX3Jhd193cml0ZWwobDIsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1JJU0lOR0RFVEVDVCk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCQlfX3Jhd193cml0ZWwobDEsIGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QpOworCQlfX3Jhd193cml0ZWwobDIsIGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX1JJU0lOR0RFVEVDVCk7CisjZW5kaWYKIAkJYysrOwogCX0KIAlpZiAoIWMpIHsKQEAgLTE4OTksMjcgKzIwMzYsMjkgQEAKIAogCQlpZiAoIShiYW5rLT5lbmFibGVkX25vbl93YWtldXBfZ3Bpb3MpKQogCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfZmFsbGluZ2RldGVjdCwKIAkJCQkgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCk7CiAJCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9yaXNpbmdkZXRlY3QsCiAJCQkJIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1JJU0lOR0RFVEVDVCk7CisJCWwgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19EQVRBSU4pOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX2ZhbGxpbmdkZXRlY3QsCisJCQkJIGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0ZBTExJTkdERVRFQ1QpOworCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfcmlzaW5nZGV0ZWN0LAorCQkJCSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19SSVNJTkdERVRFQ1QpOworCQlsID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fREFUQUlOKTsKICNlbmRpZgogCQkvKiBDaGVjayBpZiBhbnkgb2YgdGhlIG5vbi13YWtldXAgaW50ZXJydXB0IEdQSU9zIGhhdmUgY2hhbmdlZAogCQkgKiBzdGF0ZS4gIElmIHNvLCBnZW5lcmF0ZSBhbiBJUlEgYnkgc29mdHdhcmUuICBUaGlzIGlzCiAJCSAqIGhvcnJpYmx5IHJhY3ksIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkbyB0byB3b3JrIGFyb3VuZAogCQkgKiB0aGlzIHNpbGljb24gYnVnLiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JCWwgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19EQVRBSU4pOwotI2VuZGlmCiAJCWwgXj0gYmFuay0+c2F2ZWRfZGF0YWluOwogCQlsICY9IGJhbmstPm5vbl93YWtldXBfZ3Bpb3M7CiAJCWlmIChsKSB7CiAJCQl1MzIgb2xkMCwgb2xkMTsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJCQlvbGQwID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKTsKIAkJCW9sZDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOwogCQkJX19yYXdfd3JpdGVsKG9sZDAgfCBsLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApOwpAQCAtMTkyNyw2ICsyMDY2LDIwIEBACiAJCQlfX3Jhd193cml0ZWwob2xkMCwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKTsKIAkJCV9fcmF3X3dyaXRlbChvbGQxLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwkJCW9sZDAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwKTsKKwkJCW9sZDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QxKTsKKwkJCV9fcmF3X3dyaXRlbChvbGQwIHwgbCwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMCk7CisJCQlfX3Jhd193cml0ZWwob2xkMSB8IGwsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOworCQkJX19yYXdfd3JpdGVsKG9sZDAsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDApOworCQkJX19yYXdfd3JpdGVsKG9sZDEsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOworI2VuZGlmCiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2RtYS5oCmluZGV4IDdiOTM5Y2MuLjcyZjY4MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMTIyLDYgKzEyMiwxMSBAQAogI2RlZmluZSBPTUFQX0RNQTRfQ0NGTihuKQkJKDB4NjAgKiAobikgKyAweGMwKQogI2RlZmluZSBPTUFQX0RNQTRfQ09MT1IobikJCSgweDYwICogKG4pICsgMHhjNCkKIAorLyogQWRkaXRpb25hbCByZWdpc3RlcnMgYXZhaWxhYmxlIG9uIE9NQVA0ICovCisjZGVmaW5lIE9NQVBfRE1BNF9DRFAobikJCSgweDYwICogKG4pICsgMHhkMCkKKyNkZWZpbmUgT01BUF9ETUE0X0NORFAobikJCSgweDYwICogKG4pICsgMHhkNCkKKyNkZWZpbmUgT01BUF9ETUE0X0NDRE4obikJCSgweDYwICogKG4pICsgMHhkOCkKKwogLyogRHVtbXkgZGVmaW5lcyB0byBrZWVwIG11bHRpLW9tYXAgY29tcGlsZXMgaGFwcHkgKi8KICNkZWZpbmUgT01BUDFfRE1BX1JFVklTSU9OCQkwCiAjZGVmaW5lIE9NQVAxX0RNQV9JUlFTVEFUVVNfTDAJCTAKQEAgLTMxMSw2ICszMTYsODkgQEAKICNkZWZpbmUgT01BUDM0WFhfRE1BX1VTSU1fVFgJCTc5CS8qIFNfRE1BXzc4ICovCiAjZGVmaW5lIE9NQVAzNFhYX0RNQV9VU0lNX1JYCQk4MAkvKiBTX0RNQV83OSAqLwogCisvKiBETUEgcmVxdWVzdCBsaW5lcyBmb3IgNDR4eCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RJU1BDX1JFUQk2CS8qIFNfRE1BXzUgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NZU19SRVEyCQk3CS8qIFNfRE1BXzYgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVExCQk5CS8qIFNfRE1BXzggKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVEyCQkxMAkvKiBTX0RNQV85ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRMwkJMTIJLyogU19ETUFfMTEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVE0CQkxMwkvKiBTX0RNQV8xMiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX1JGQklfUkVRCTE0CS8qIFNfRE1BXzEzICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1RYMAkJMTUJLyogU19ETUFfMTQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTNfUlgwCQkxNgkvKiBTX0RNQV8xNSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AyX1RYCQkxNwkvKiBTX0RNQV8xNiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AyX1JYCQkxOAkvKiBTX0RNQV8xNyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AzX1RYCQkxOQkvKiBTX0RNQV8xOCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AzX1JYCQkyMAkvKiBTX0RNQV8xOSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19UWDEJCTIzCS8qIFNfRE1BXzIyICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1JYMQkJMjQJLyogU19ETUFfMjMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzNfVFgJCTI1CS8qIFNfRE1BXzI0ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMzX1JYCQkyNgkvKiBTX0RNQV8yNSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMV9UWAkJMjcJLyogU19ETUFfMjYgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzFfUlgJCTI4CS8qIFNfRE1BXzI3ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMyX1RYCQkyOQkvKiBTX0RNQV8yOCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMl9SWAkJMzAJLyogU19ETUFfMjkgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQNF9UWAkJMzEJLyogU19ETUFfMzAgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQNF9SWAkJMzIJLyogU19ETUFfMzEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMV9UWAkJMzMJLyogU19ETUFfMzIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMV9SWAkJMzQJLyogU19ETUFfMzMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgwCQkzNQkvKiBTX0RNQV8zNCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDAJCTM2CS8qIFNfRE1BXzM1ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1RYMQkJMzcJLyogU19ETUFfMzYgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgxCQkzOAkvKiBTX0RNQV8zNyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDIJCTM5CS8qIFNfRE1BXzM4ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1JYMgkJNDAJLyogU19ETUFfMzkgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgzCQk0MQkvKiBTX0RNQV80MCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDMJCTQyCS8qIFNfRE1BXzQxICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkyX1RYMAkJNDMJLyogU19ETUFfNDIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfUlgwCQk0NAkvKiBTX0RNQV80MyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9UWDEJCTQ1CS8qIFNfRE1BXzQ0ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkyX1JYMQkJNDYJLyogU19ETUFfNDUgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzJfVFgJCTQ3CS8qIFNfRE1BXzQ2ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMyX1JYCQk0OAkvKiBTX0RNQV80NyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDFfVFgJCTQ5CS8qIFNfRE1BXzQ4ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMV9SWAkJNTAJLyogU19ETUFfNDkgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQyX1RYCQk1MQkvKiBTX0RNQV81MCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDJfUlgJCTUyCS8qIFNfRE1BXzUxICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUM19UWAkJNTMJLyogU19ETUFfNTIgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQzX1JYCQk1NAkvKiBTX0RNQV81MyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDRfVFgJCTU1CS8qIFNfRE1BXzU0ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUNF9SWAkJNTYJLyogU19ETUFfNTUgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzRfVFgJCTU3CS8qIFNfRE1BXzU2ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM0X1JYCQk1OAkvKiBTX0RNQV81NyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DNV9UWAkJNTkJLyogU19ETUFfNTggKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzVfUlgJCTYwCS8qIFNfRE1BXzU5ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMxX1RYCQk2MQkvKiBTX0RNQV82MCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMV9SWAkJNjIJLyogU19ETUFfNjEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NZU19SRVEzCQk2NAkvKiBTX0RNQV82MyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNQRE1fVVAJCTY1CS8qIFNfRE1BXzY0ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ1BETV9ETAkJNjYJLyogU19ETUFfNjUgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTRfVFgwCQk3MAkvKiBTX0RNQV82OSAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJNF9SWDAJCTcxCS8qIFNfRE1BXzcwICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVEwCTcyCS8qIFNfRE1BXzcxICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVExCTczCS8qIFNfRE1BXzcyICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVEyCTc0CS8qIFNfRE1BXzczICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVEzCTc1CS8qIFNfRE1BXzc0ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfSERNSV9SRVEJNzYJLyogU19ETUFfNzUgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzNfVFgJCTc3CS8qIFNfRE1BXzc2ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMzX1JYCQk3OAkvKiBTX0RNQV83NyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfVVNJTV9UWAkJNzkJLyogU19ETUFfNzggKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1VTSU1fUlgJCTgwCS8qIFNfRE1BXzc5ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVEwCTgxCS8qIFNfRE1BXzgwICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVExCTgyCS8qIFNfRE1BXzgxICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVEyCTgzCS8qIFNfRE1BXzgyICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVEzCTg0CS8qIFNfRE1BXzgzICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRMAkJMTAxCS8qIFNfRE1BXzEwMCAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTEJCTEwMgkvKiBTX0RNQV8xMDEgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVEyCQkxMDMJLyogU19ETUFfMTAyICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRMwkJMTA0CS8qIFNfRE1BXzEwMyAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTQJCTEwNQkvKiBTX0RNQV8xMDQgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVE1CQkxMDYJLyogU19ETUFfMTA1ICovCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRNgkJMTA3CS8qIFNfRE1BXzEwNiAqLworI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTcJCTEwOAkvKiBTX0RNQV8xMDcgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzRfVFgJCTEyNAkvKiBTX0RNQV8xMjMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzRfUlgJCTEyNQkvKiBTX0RNQV8xMjQgKi8KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBMQ0QgRE1BICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKaW5kZXggNjNhM2YyNS4uZTBkNmVjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaApAQCAtNTMsNiArNTMsMTEgQEAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1A0X0JBU0UJMHg0OTAyNjAwMAogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDVfQkFTRQkweDQ4MDk2MDAwCiAKKyNkZWZpbmUgT01BUDQ0WFhfTUNCU1AxX0JBU0UJMHg0OTAyMjAwMAorI2RlZmluZSBPTUFQNDRYWF9NQ0JTUDJfQkFTRQkweDQ5MDI0MDAwCisjZGVmaW5lIE9NQVA0NFhYX01DQlNQM19CQVNFCTB4NDkwMjYwMDAKKyNkZWZpbmUgT01BUDQ0WFhfTUNCU1A0X0JBU0UJMHg0ODA3NDAwMAorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjIJMHgwMApAQCAtOTgsNyArMTAzLDggQEAKICNkZWZpbmUgQVVESU9fRE1BX1RYCQlPTUFQX0RNQV9NQ0JTUDFfVFgKICNkZWZpbmUgQVVESU9fRE1BX1JYCQlPTUFQX0RNQV9NQ0JTUDFfUlgKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX0RSUjIJMHgwMAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIxCTB4MDQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggOGRjNzkyNy4uODhhYzk3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgTUNSMiwgY29uZmlnLT5tY3IyKTsKIAlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIE1DUjEsIGNvbmZpZy0+bWNyMSk7CiAJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBQQ1IwLCBjb25maWctPnBjcjApOwotCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFhDQ1IsIGNvbmZpZy0+eGNjcik7CiAJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgY29uZmlnLT5yY2NyKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zM2MvS2NvbmZpZwppbmRleCA5MzVjNzU1Li44OTMxYzVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL0tjb25maWcKQEAgLTE5OCw0ICsxOTgsOSBAQAogCWhlbHAKIAkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb24gZm9yIFVTQiBoaWdoLXNwZWVkIE90RwogCitjb25maWcgUzNDX0RFVl9OQU5ECisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb24gZm9yIE5BTkQgY29udHJvbGxlcgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQppbmRleCAwNzYxNzY2Li4zYzA5MTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQpAQCAtMjgsMTMgKzI4LDE3IEBACiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS1ncGlvLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLKQkrPSBwbS1jaGVjay5vCiAKKyMgUFdNIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX0hBVkVfUFdNKQkJKz0gcHdtLm8KKwogIyBkZXZpY2VzCiAKIG9iai0kKENPTkZJR19TM0NfREVWX0hTTU1DKQkrPSBkZXYtaHNtbWMubwogb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMxKQkrPSBkZXYtaHNtbWMxLm8KIG9iai15CQkJCSs9IGRldi1pMmMwLm8KIG9iai0kKENPTkZJR19TM0NfREVWX0kyQzEpCSs9IGRldi1pMmMxLm8KLW9iai0kKENPTkZJR19TTkRfUzNDNjRYWF9TT0NfSTJTKQkrPSBkZXYtYXVkaW8ubwogb2JqLSQoQ09ORklHX1MzQ19ERVZfRkIpCSs9IGRldi1mYi5vCiBvYmotJChDT05GSUdfUzNDX0RFVl9VU0JfSE9TVCkJKz0gZGV2LXVzYi5vCiBvYmotJChDT05GSUdfUzNDX0RFVl9VU0JfSFNPVEcpCSs9IGRldi11c2ItaHNvdGcubworb2JqLSQoQ09ORklHX1MzQ19ERVZfTkFORCkJKz0gZGV2LW5hbmQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LW5hbmQuYyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1uYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1MzIzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1uYW5kLmMKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIFMzQyBzZXJpZXMgZGV2aWNlIGRlZmluaXRpb24gZm9yIG5hbmQgZGV2aWNlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX25hbmRfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9OQU5ELAorCQkuZW5kICAgPSBTM0NfUEFfTkFORCArIFNaXzFNLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbmFuZCA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLW5hbmQiLAorCS5pZAkJICA9IC0xLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY19uYW5kX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzY19uYW5kX3Jlc291cmNlLAorfTsKKworRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX25hbmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2FkYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2FkYy5oCmluZGV4IGQ4NDdiZDQuLjVmM2IxY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hZGMuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYWRjLmgKQEAgLTE5LDEwICsxOSwxNCBAQAogZXh0ZXJuIGludCBzM2NfYWRjX3N0YXJ0KHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAogCQkJIHVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgbnJfc2FtcGxlcyk7CiAKK2V4dGVybiBpbnQgczNjX2FkY19yZWFkKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY2gpOworCiBleHRlcm4gc3RydWN0IHMzY19hZGNfY2xpZW50ICoKIAlzM2NfYWRjX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkgdm9pZCAoKnNlbGVjdCkodW5zaWduZWQgc2VsZWN0ZWQpLAotCQkJIHZvaWQgKCpjb252KSh1bnNpZ25lZCBkMCwgdW5zaWduZWQgZDEsCisJCQkgdm9pZCAoKnNlbGVjdCkoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCisJCQkJCXVuc2lnbmVkIHNlbGVjdGVkKSwKKwkJCSB2b2lkICgqY29udikoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgICAgdW5zaWduZWQgZDAsIHVuc2lnbmVkIGQxLAogCQkJCSAgICAgIHVuc2lnbmVkICpzYW1wbGVzX2xlZnQpLAogCQkJIHVuc2lnbmVkIGludCBpc190cyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLmgKaW5kZXggYzg2YTEzMy4uN2I5ODJiNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLmgKQEAgLTE3LDYgKzE3LDIxIEBACiBzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQ7CiBzdHJ1Y3QgczNjX2lvdGltaW5nczsKIAorLyoqCisgKiBzdHJ1Y3QgczNjX2ZyZXEgLSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKG1haW5seSBmb3IgY29yZSBkcml2ZXJzKQorICogQGZjbGs6IFRoZSBGQ0xLIGZyZXF1ZW5jeSBpbiBIei4KKyAqIEBhcm1jbGs6IFRoZSBBUk1DTEsgZnJlcXVlbmN5IGluIEh6LgorICogQGhjbGtfdG5zOiBIQ0xLIGN5Y2xlIHRpbWUgaW4gMTB0aHMgb2YgbmFuby1zZWNvbmRzLgorICogQGhjbGs6IFRoZSBIQ0xLIGZyZXF1ZW5jeSBpbiBIei4KKyAqIEBwY2xrOiBUaGUgUENMSyBmcmVxdWVuY3kgaW4gSHouCisgKgorICogVGhpcyBjb250YWlucyB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKyAqIG1haW5seSBmb3IgdGhlIGNvcmUgZHJpdmVycyB0byBlbnN1cmUgd2UgZG8gbm90IGVuZCB1cCBwYXNzaW5nIGFib3V0CisgKiBhIGxhcmdlIG51bWJlciBvZiBwYXJhbWV0ZXJzLgorICoKKyAqIFRoZSBAaGNsa190bnMgZmllbGQgaXMgYSB1c2VmdWwgY2FjaGUgZm9yIHRoZSBwYXJ0cyBvZiB0aGUgZHJpdmVycyB0aGF0CisgKiBuZWVkIHRvIGNhbGN1bGF0ZSBJTyB0aW1pbmdzIGFuZCBzdWNobGlrZS4KKyAqLwogc3RydWN0IHMzY19mcmVxIHsKIAl1bnNpZ25lZCBsb25nCWZjbGs7CiAJdW5zaWduZWQgbG9uZwlhcm1jbGs7CkBAIC0yNSw0OCArNDAsODQgQEAKIAl1bnNpZ25lZCBsb25nCXBjbGs7CiB9OwogCi0vKiB3cmFwcGVyICdzdHJ1Y3QgY3B1ZnJlcV9mcmVxcycgc28gdGhhdCBhbnkgZHJpdmVycyByZWNlaXZpbmcgdGhlCisvKioKKyAqIHN0cnVjdCBzM2NfY3B1ZnJlcV9mcmVxcyAtIHMzYyBjcHVmcmVxIG5vdGlmaWNhdGlvbiBpbmZvcm1hdGlvbi4KKyAqIEBmcmVxczogVGhlIGNwdWZyZXEgc2V0dGluZyBpbmZvcm1hdGlvbi4KKyAqIEBvbGQ6IFRoZSBvbGQgY2xvY2sgc2V0dGluZ3MuCisgKiBAbmV3OiBUaGUgbmV3IGNsb2NrIHNldHRpbmdzLgorICogQHBsbF9jaGFuZ2luZzogU2V0IGlmIHRoZSBQTEwgaXMgY2hhbmdpbmcuCisgKgorICogV3JhcHBlciAnc3RydWN0IGNwdWZyZXFfZnJlcXMnIHNvIHRoYXQgYW55IGRyaXZlcnMgcmVjZWl2aW5nIHRoZQogICogbm90aWZpY2F0aW9uIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCBwcm92aWRlZCBieSBqdXN0CiAgKiBoYXZpbmcgdGhlIGNvcmUgZnJlcXVlbmN5IGFsb25lLgorICoKKyAqIFRoZSBwbGxfY2hhbmdpbmcgZmxhZyBpcyB1c2VkIHRvIGluZGljYXRlIGlmIHRoZSBQTEwgaXRzZWxmIGlzCisgKiBiZWluZyBzZXQgZHVyaW5nIHRoaXMgY2hhbmdlLiBUaGlzIGlzIGltcG9ydGFudCBhcyB0aGUgY2xvY2tzCisgKiB3aWxsIHRlbXBvcmFyaWx5IGJlIHNldCB0byB0aGUgWFRBTCBjbG9jayBkdXJpbmcgdGhpcyB0aW1lLCBzbworICogZHJpdmVycyBtYXkgd2FudCB0byBjbG9zZSBkb3duIHRoZWlyIG91dHB1dCBkdXJpbmcgdGhpcyB0aW1lLgorICoKKyAqIE5vdGUsIHRoaXMgaXMgbm90IGJlaW5nIHVzZWQgYnkgYW55IGN1cnJlbnQgZHJpdmVycyBhbmQgdGhlcmVmb3JlCisgKiBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLgogICovCi0KIHN0cnVjdCBzM2NfY3B1ZnJlcV9mcmVxcyB7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMJZnJlcXM7CiAJc3RydWN0IHMzY19mcmVxCQlvbGQ7CiAJc3RydWN0IHMzY19mcmVxCQluZXc7CisKKwl1bnNpZ25lZCBpbnQJCXBsbF9jaGFuZ2luZzoxOwogfTsKIAogI2RlZmluZSB0b19zM2NfY3B1ZnJlcShfY2YpIGNvbnRhaW5lcl9vZihfY2YsIHN0cnVjdCBzM2NfY3B1ZnJlcV9mcmVxcywgZnJlcXMpCiAKKy8qKgorICogc3RydWN0IHMzY19jbGtkaXZzIC0gY2xvY2sgZGl2aXNvciBpbmZvcm1hdGlvbgorICogQHBfZGl2aXNvcjogRGl2aXNvciBmcm9tIEZDTEsgdG8gUENMSy4KKyAqIEBoX2Rpdmlzb3I6IERpdmlzb3IgZnJvbSBGQ0xLIHRvIEhDTEsuCisgKiBAYXJtX2Rpdmlzb3I6IERpdmlzb3IgZnJvbSBGQ0xLIHRvIEFSTUNMSyAobm90IGFsbCBDUFVzKS4KKyAqIEBkdnM6IE5vbi16ZXJvIGlmIHVzaW5nIERWUyBtb2RlIGZvciBBUk1DTEsuCisgKgorICogRGl2aXNvciBzZXR0aW5ncyBmb3IgdGhlIGNvcmUgY2xvY2tzLgorICovCiBzdHJ1Y3QgczNjX2Nsa2RpdnMgewotCWludAkJcF9kaXZpc29yOwkvKiBmY2xrIC8gcGNsayAqLwotCWludAkJaF9kaXZpc29yOwkvKiBmY2xrIC8gaGNsayAqLwotCWludAkJYXJtX2Rpdmlzb3I7CS8qIG5vdCBhbGwgY3B1cyBoYXZlIHRoaXMuICovCi0JdW5zaWduZWQgY2hhcglkdnM7CQkvKiB1c2luZyBkdnMgbW9kZSB0byBhcm0uICovCisJaW50CQlwX2Rpdmlzb3I7CisJaW50CQloX2Rpdmlzb3I7CisJaW50CQlhcm1fZGl2aXNvcjsKKwl1bnNpZ25lZCBjaGFyCWR2czsKIH07CiAKICNkZWZpbmUgUExMVkFMKF9tLCBfcCwgX3MpICgoKF9tKSA8PCAxMikgfCAoKF9wKSA8PCA0KSB8IChfcykpCiAKKy8qKgorICogc3RydWN0IHMzY19wbGx2YWwgLSBQTEwgdmFsdWUgZW50cnkuCisgKiBAZnJlcTogVGhlIGZyZXF1ZW5jeSBmb3IgdGhpcyBlbnRyeSBpbiBIei4KKyAqIEBwbGxfcmVnOiBUaGUgUExMIHJlZ2lzdGVyIHNldHRpbmcgZm9yIHRoaXMgUExMIHZhbHVlLgorICovCiBzdHJ1Y3QgczNjX3BsbHZhbCB7CiAJdW5zaWduZWQgbG9uZwkJZnJlcTsKIAl1bnNpZ25lZCBsb25nCQlwbGxfcmVnOwogfTsKIAotc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyB7Ci0Jc3RydWN0IHMzY19mcmVxCQlmcmVxOwotCXN0cnVjdCBzM2NfcGxsdmFsCXBsbDsKLQlzdHJ1Y3QgczNjX2Nsa2RpdnMJZGl2czsKLQlzdHJ1Y3QgczNjX2NwdWZyZXFfaW5mbyAqaW5mbzsJLyogZm9yIGNvcmUsIG5vdCBkcml2ZXJzICovCi0Jc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkICpib2FyZDsKLX07Ci0KLS8qIHMzY19jcHVmcmVxX2JvYXJkCisvKioKKyAqIHN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAtIHBlci1ib2FyZCBjcHUgZnJlcXVlbmN5IGluZm9ybWF0aW4KKyAqIEByZWZyZXNoOiBUaGUgU0RSQU0gcmVmcmVzaCBwZXJpb2QgaW4gbmFub3NlY29uZHMuCisgKiBAYXV0b19pbzogU2V0IGlmIHRoZSBJTyB0aW1pbmcgc2V0dGluZ3Mgc2hvdWxkIGJlIGdlbmVyYXRlZCBmcm9tIHRoZQorICoJaW5pdGlhbGlzYXRpb24gdGltZSBoYXJkd2FyZSByZWdpc3RlcnMuCisgKiBAbmVlZF9pbzogU2V0IGlmIHRoZSBib2FyZCBoYXMgZXh0ZXJuYWwgSU8gb24gYW55IG9mIHRoZSBjaGlwc2VsZWN0CisgKglsaW5lcyB0aGF0IHdpbGwgcmVxdWlyZSB0aGUgaGFyZHdhcmUgdGltaW5nIHJlZ2lzdGVycyB0byBiZQorICoJdXBkYXRlZCBvbiBhIGNsb2NrIGNoYW5nZS4KKyAqIEBtYXg6IFRoZSBtYXhpdW0gZnJlcXVlbmN5IGxpbWl0cyBmb3IgdGhlIHN5c3RlbS4gQW55IGZpZWxkIHRoYXQKKyAqCWlzIGxlZnQgYXQgemVybyB3aWxsIHVzZSB0aGUgQ1BVJ3Mgc2V0dGluZ3MuCiAgKgotICogcGVyLWJvYXJkIGNvbmZpZ3VyYXRvbiBpbmZvcm1hdGlvbiwgc3VjaCBhcyBtZW1vcnkgcmVmcmVzaCBhbmQKLSAqIGhvdyB0byBpbml0aWFsaXNlIElPIHRpbWluZ3MuCisgKiBUaGlzIGNvbnRhaW5zIHRoZSBib2FyZCBzcGVjaWZpYyBzZXR0aW5ncyB0aGF0IGFmZmVjdCBob3cgdGhlIENQVQorICogZHJpdmVycyBjaG9zZSBzZXR0aW5ncy4gVGhlc2UgaW5jbHVkZSB0aGUgbWVtb3J5IHJlZnJlc2ggYW5kIElPCisgKiB0aW1pbmcgaW5mb3JtYXRpb24uCisgKgorICogUmVnaXN0cmF0aW9uIGRlcGVuZHMgb24gdGhlIGRyaXZlciBiZWluZyB1c2VkLCB0aGUgQVJNQ0xLIG9ubHkKKyAqIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGN1cnJlbnRseSBuZWVkIHRoaXMgYnV0IHRoZSBvbGRlciBzdHlsZQorICogZHJpdmVyIHJlcXVpcmVzIHRoaXMgdG8gYmUgYXZhaWxhYmxlLgogICovCiBzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgewotCXVuc2lnbmVkIGludAlyZWZyZXNoOwkvKiByZWZyZXNoIHBlcmlvZCBpbiBucyAqLworCXVuc2lnbmVkIGludAlyZWZyZXNoOwogCXVuc2lnbmVkIGludAlhdXRvX2lvOjE7CS8qIGF1dG9tYXRpY2FsbHkgaW5pdCBpbyB0aW1pbmdzLiAqLwogCXVuc2lnbmVkIGludAluZWVkX2lvOjE7CS8qIHNldCBpZiBuZWVkcyBpbyB0aW1pbmcgc3VwcG9ydC4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oCmluZGV4IGJlNTQxY2IuLmZiYzNkNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LmgKQEAgLTY1LDYgKzY1LDcgQEAKIC8qIHN5c3RlbSBkZXZpY2UgY2xhc3NlcyAqLwogCiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDEwX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQxMGFfc3lzY2xhc3M7CiBleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDEyX3N5c2NsYXNzOwogZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0MF9zeXNjbGFzczsKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDJfc3lzY2xhc3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaAppbmRleCAyZTE3MDgyLi4wZjU0MGVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZXZzLmgKQEAgLTQ2LDYgKzQ2LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc3BpMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc3BpMTsKIAorZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9od21vbjsKKwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9uYW5kOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYmdhZGdldDsKQEAgLTU2LDUgKzU4LDYgQEAKICNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9jYW1pZjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYWM5NzsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvaHdtb24uaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9od21vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYTg4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvaHdtb24uaApAQCAtMCwwICsxLDQxIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvaHdtb24uaAorICoKKyAqIENvcHlyaWdodCAyMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MgLSBIV01vbiBpbnRlcmZhY2UgZm9yIEFEQworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfQURDX0hXTU9OX0gKKyNkZWZpbmUgX19BU01fQVJDSF9BRENfSFdNT05fSCBfX0ZJTEVfXworCisvKioKKyAqIHMzY19od21vbl9jaGNmZyAtIGNoYW5uZWwgY29uZmlndXJhdGlvbgorICogQG5hbWU6IFRoZSBuYW1lIHRvIGdpdmUgdGhpcyBjaGFubmVsLgorICogQG11bHQ6IE11bHRpcGx5IHRoZSBBREMgdmFsdWUgcmVhZCBieSB0aGlzLgorICogQGRpdjogRGl2aWRlIHRoZSB2YWx1ZSBmcm9tIHRoZSBBREMgYnkgdGhpcy4KKyAqCisgKiBUaGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBBREMgaXMgY29udmVydGVkIHRvIGEgdmFsdWUgdGhhdAorICogaHdtb24gZXhwZWN0cyAobVYpIGJ5IHJlc3VsdCA9ICh2YWx1ZV9yZWFkICogQG11bHQpIC8gQGRpdi4KKyAqLworc3RydWN0IHMzY19od21vbl9jaGNmZyB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1bnNpZ25lZCBpbnQJbXVsdDsKKwl1bnNpZ25lZCBpbnQJZGl2OworfTsKKworLyoqCisgKiBzM2NfaHdtb25fcGRhdGEgLSBIV01PTiBwbGF0Zm9ybSBkYXRhCisgKiBAaW46IE9uZSBjb25maWd1cmF0aW9uIGZvciBlYWNoIHBvc3NpYmxlIGNoYW5uZWwgdXNlZC4KKyAqLworc3RydWN0IHMzY19od21vbl9wZGF0YSB7CisJc3RydWN0IHMzY19od21vbl9jaGNmZwkqaW5bOF07Cit9OworCisjZW5kaWYgLyogX19BU01fQVJDSF9BRENfSFdNT05fSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbWFwLWJhc2UuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9tYXAtYmFzZS5oCmluZGV4IGI4NDI4OWQuLjI1MGJlMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9tYXAtYmFzZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9tYXAtYmFzZS5oCkBAIC0zMiw5ICszMiwxNSBAQAogCiAjZGVmaW5lIFMzQ19WQV9JUlEJUzNDX0FERFIoMHgwMDAwMDAwMCkJLyogaXJxIGNvbnRyb2xsZXIocykgKi8KICNkZWZpbmUgUzNDX1ZBX1NZUwlTM0NfQUREUigweDAwMTAwMDAwKQkvKiBzeXN0ZW0gY29udHJvbCAqLwotI2RlZmluZSBTM0NfVkFfTUVNCVMzQ19BRERSKDB4MDAyMDAwMDApCS8qIHN5c3RlbSBjb250cm9sICovCisjZGVmaW5lIFMzQ19WQV9NRU0JUzNDX0FERFIoMHgwMDIwMDAwMCkJLyogbWVtb3J5IGNvbnRyb2wgKi8KICNkZWZpbmUgUzNDX1ZBX1RJTUVSCVMzQ19BRERSKDB4MDAzMDAwMDApCS8qIHRpbWVyIGJsb2NrICovCiAjZGVmaW5lIFMzQ19WQV9XQVRDSERPRwlTM0NfQUREUigweDAwNDAwMDAwKQkvKiB3YXRjaGRvZyAqLwogI2RlZmluZSBTM0NfVkFfVUFSVAlTM0NfQUREUigweDAxMDAwMDAwKQkvKiBVQVJUICovCiAKKy8qIFRoaXMgaXMgdXNlZCBmb3IgdGhlIENQVSBzcGVjaWZpYyBtYXBwaW5ncyB0aGF0IG1heSBiZSBuZWVkZWQsIHNvIHRoYXQKKyAqIHRoZXkgZG8gbm90IG5lZWQgdG8gZGlyZWN0bHkgdXNlZCBTM0NfQUREUigpIGFuZCB0aHVzIG1ha2UgaXQgZWFzaWVyIHRvCisgKiBtb2RpZnkgdGhlIHNwYWNlIGZvciBtYXBwaW5nLgorICovCisjZGVmaW5lIFMzQ19BRERSX0NQVSh4KQlTM0NfQUREUigweDAwNTAwMDAwICsgKHgpKQorCiAjZW5kaWYgLyogX19BU01fUExBVF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvcHdtLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3B3bS5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYy9wd20uYwppbmRleCA4MmE2ZDRkLi40ZmRjNWIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvcHdtLmMKQEAgLTEsMTAgKzEsMTAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20uYworLyogYXJjaC9hcm0vcGxhdC1zM2MvcHdtLmMKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQmVuIERvb2tzCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+LCA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KICAqCi0gKiBTM0MyNFhYIFBXTSBkZXZpY2UgY29yZQorICogUzNDIHNlcmllcyBQV00gZGV2aWNlIGNvcmUKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wd20uaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWcKaW5kZXggNWIwYmM5MS4uOWM3YWNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWcKQEAgLTEwLDYgKzEwLDcgQEAKIAlkZWZhdWx0IHkKIAlzZWxlY3QgTk9fSU9QT1JUCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IFMzQ19ERVZJQ0VfTkFORAogCWhlbHAKIAkgIEJhc2UgcGxhdGZvcm0gY29kZSBmb3IgYW55IFNhbXN1bmcgUzNDMjRYWCBkZXZpY2UKIApAQCAtMzQsNiArMzUsNDAgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBTM0MyNDQwIGFuZCBTM0MyNDQyIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgogCitjb25maWcgUzNDMjQ0MF9DUFVGUkVRCisJYm9vbCAiUzNDMjQ0MC9TM0MyNDQyIENQVSBGcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiAoQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCisJc2VsZWN0IFMzQzI0MTBfQ1BVRlJFUV9VVElMUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIENQVSBGcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0IGZvciBTM0MyNDQwIGFuZCBTM0MyNDQyIFNvQyBDUFVzLgorCitjb25maWcgUzNDMjQ0MF9YVEFMXzEyMDAwMDAwCisJYm9vbAorCWhlbHAKKwkgIEluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIG5lZWRzIHRvIHN1cHBvcnQgMTJNSHogc3lzdGVtCisJICBjcnlzdGFsLgorCitjb25maWcgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCisJYm9vbAorCWhlbHAKKwkgIEluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIG5lZWRzIHRvIHN1cHBvcnQgMTYuOTM0NE1IeiBzeXN0ZW0KKwkgIGNyeXN0YWwuCisKK2NvbmZpZyBTM0MyNDQwX1BMTF8xMjAwMDAwMAorCWJvb2wKKwlkZXBlbmRzIG9uIFMzQzI0NDBfQ1BVRlJFUSAmJiBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKKwlkZWZhdWx0IHkgaWYgQ1BVX0ZSRVFfUzNDMjRYWF9QTEwKKwloZWxwCisJICBQTEwgdGFibGVzIGZvciBTM0MyNDQwIG9yIFMzQzI0NDIgQ1BVcyB3aXRoIDEyTUh6IGNyeXN0YWxzLgorCitjb25maWcgUzNDMjQ0MF9QTExfMTY5MzQ0MDAKKwlib29sCisJZGVwZW5kcyBvbiBTM0MyNDQwX0NQVUZSRVEgJiYgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCisJZGVmYXVsdCB5IGlmIENQVV9GUkVRX1MzQzI0WFhfUExMCisJaGVscAorCSAgUExMIHRhYmxlcyBmb3IgUzNDMjQ0MCBvciBTM0MyNDQyIENQVXMgd2l0aCAxNi45MzRNSHogY3J5c3RhbHMuCisKIGNvbmZpZyBTM0MyNFhYX1BXTQogCWJvb2wgIlBXTSBkZXZpY2Ugc3VwcG9ydCIKIAlzZWxlY3QgSEFWRV9QV00KQEAgLTEwNSw4ICsxNDAsMzkgQEAKIAkgIFNQSSBHUElPIGNvbmZpZ3VyYXRpb24gY29kZSBmb3IgQlVTIDEgd2hlbiBjb25uZWN0ZWQgdG8KIAkgIEdQRzUsIEdQRzYgYW5kIEdQRzcuCiAKK2NvbmZpZyBTM0MyNFhYX1NQSV9CVVMxX0dQRDhfR1BEOV9HUEQxMAorCWJvb2wKKwloZWxwCisJICBTUEkgR1BJTyBjb25maWd1cmF0aW9uIGNvZGUgZm9yIEJVUyAxIHdoZW4gY29ubmVjdGVkIHRvCisJICBHUEQ4LCBHUEQ5IGFuZCBHUEQxMC4KKwogIyBjb21tb24gY29kZSBmb3IgczNjMjR4eCBiYXNlZCBtYWNoaW5lcywgc3VjaCBhcyB0aGUgU01ES3MuCiAKKyMgY3B1IGZyZXF1ZW5jeSBpdGVtcyBjb21tb24gYmV0d2VlbiBzM2MyNDEwIGFuZCBzM2MyNDQwL3MzYzI0NDIKKworY29uZmlnIFMzQzI0MTBfSU9USU1JTkcKKwlib29sCisJZGVwZW5kcyBvbiBDUFVfRlJFUV9TM0MyNFhYCisJaGVscAorCSAgSW50ZXJuYWwgbm9kZSB0byBzZWxlY3QgaW8gdGltaW5nIGNvZGUgdGhhdCBpcyBjb21tb24gdG8gdGhlIHMzYzI0MTAKKwkgIGFuZCBzM2MyNDQwL3MzYzI0NDIgY3B1IGZyZXF1ZW5jeSBzdXBwb3J0LgorCitjb25maWcgUzNDMjQxMF9DUFVGUkVRX1VUSUxTCisJYm9vbAorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWAorCWhlbHAKKwkgIEludGVybmFsIG5vZGUgdG8gc2VsZWN0IHRpbWluZyBjb2RlIHRoYXQgaXMgY29tbW9uIHRvIHRoZSBzM2MyNDEwCisJICBhbmQgczNjMjQ0MC9zM2MyNDQgY3B1IGZyZXF1ZW5jeSBzdXBwb3J0LgorCisjIGNwdSBmcmVxdWVuY3kgc3VwcG9ydCBjb21tb24gdG8gczNjMjQxMiwgczNjMjQxMyBhbmQgczNjMjQ0MgorCitjb25maWcgUzNDMjQxMl9JT1RJTUlORworCWJvb2wKKwlkZXBlbmRzIG9uIENQVV9GUkVRX1MzQzI0WFggJiYgKENQVV9TM0MyNDEyIHx8IENQVV9TM0MyNDQzKQorCWhlbHAKKwkgIEludGVsIG5vZGUgdG8gc2VsZWN0IGlvIHRpbWluZyBjb2RlIHRoYXQgaXMgY29tbW9uIHRvIHRoZSBzM2MyNDEyCisJICBhbmQgdGhlIHMzYzI0NDMuCisKIGNvbmZpZyBNQUNIX1NNREsKIAlib29sCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IDU3OWExNjUuLjc3ODBkMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKQEAgLTIwLDE5ICsyMCwyOCBAQAogb2JqLXkJCQkJKz0gY2xvY2subwogb2JqLSQoQ09ORklHX1MzQzI0WFhfRENMSykJKz0gY2xvY2stZGNsay5vCiAKK29iai0kKENPTkZJR19DUFVfRlJFUV9TM0MyNFhYKQkrPSBjcHUtZnJlcS5vCitvYmotJChDT05GSUdfQ1BVX0ZSRVFfUzNDMjRYWF9ERUJVR0ZTKSArPSBjcHUtZnJlcS1kZWJ1Z2ZzLm8KKwogIyBBcmNoaXRlY3R1cmUgZGVwZW5kYW50IGJ1aWxkcwogCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgubwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDRYKQkrPSBzM2MyNDR4LWlycS5vCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgtY2xvY2subworb2JqLSQoQ09ORklHX1MzQzI0NDBfQ1BVRlJFUSkJKz0gczNjMjQ0MC1jcHVmcmVxLm8KK29iai0kKENPTkZJR19TM0MyNDQwX1BMTF8xMjAwMDAwMCkgKz0gczNjMjQ0MC1wbGwtMTIwMDAwMDAubworb2JqLSQoQ09ORklHX1MzQzI0NDBfUExMXzE2OTM0NDAwKSArPSBzM2MyNDQwLXBsbC0xNjkzNDQwMC5vCisKIG9iai0kKENPTkZJR19QTV9TSU1URUMpCQkrPSBwbS1zaW10ZWMubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gaXJxLXBtLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHNsZWVwLm8KLW9iai0kKENPTkZJR19TM0MyNFhYX1BXTSkJKz0gcHdtLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX0NMT0NLKQkrPSBzM2MyNDEwLWNsb2NrLm8KIG9iai0kKENPTkZJR19TM0MyNDEwX0RNQSkJKz0gZG1hLm8KIG9iai0kKENPTkZJR19TM0MyNFhYX0FEQykJKz0gYWRjLm8KK29iai0kKENPTkZJR19TM0MyNDEwX0lPVElNSU5HKQkrPSBzM2MyNDEwLWlvdGltaW5nLm8KK29iai0kKENPTkZJR19TM0MyNDEyX0lPVElNSU5HKQkrPSBzM2MyNDEyLWlvdGltaW5nLm8KK29iai0kKENPTkZJR19TM0MyNDEwX0NQVUZSRVFfVVRJTFMpICs9IHMzYzI0MTAtY3B1ZnJlcS11dGlscy5vCiAKICMgZGV2aWNlIHNwZWNpZmljIHNldHVwIGFuZC9vciBpbml0aWFsaXNhdGlvbgogb2JqLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJKz0gc2V0dXAtaTJjLm8KQEAgLTQxLDYgKzUwLDcgQEAKIAogb2JqLSQoQ09ORklHX1MzQzI0WFhfU1BJX0JVUzBfR1BFMTFfR1BFMTJfR1BFMTMpICs9IHNwaS1idXMwLWdwZTExXzEyXzEzLm8KIG9iai0kKENPTkZJR19TM0MyNFhYX1NQSV9CVVMxX0dQRzVfR1BHNl9HUEc3KSAgICArPSBzcGktYnVzMS1ncGc1XzZfNy5vCitvYmotJChDT05GSUdfUzNDMjRYWF9TUElfQlVTMV9HUEQ4X0dQRDlfR1BEMTApCSArPSBzcGktYnVzMS1ncGQ4XzlfMTAubwogCiAjIG1hY2hpbmUgY29tbW9uIHN1cHBvcnQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCmluZGV4IGVlMWJhZjEuLjExMTE3YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKQEAgLTM5LDEzICszOSwxNiBAQAogc3RydWN0IHMzY19hZGNfY2xpZW50IHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQJIHBlbmQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJKndhaXQ7CiAKIAl1bnNpZ25lZCBpbnQJCSBucl9zYW1wbGVzOworCWludAkJCSByZXN1bHQ7CiAJdW5zaWduZWQgY2hhcgkJIGlzX3RzOwogCXVuc2lnbmVkIGNoYXIJCSBjaGFubmVsOwogCi0Jdm9pZAkoKnNlbGVjdF9jYikodW5zaWduZWQgc2VsZWN0ZWQpOwotCXZvaWQJKCpjb252ZXJ0X2NiKSh1bnNpZ25lZCB2YWwxLCB1bnNpZ25lZCB2YWwyLAorCXZvaWQJKCpzZWxlY3RfY2IpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqYywgdW5zaWduZWQgc2VsZWN0ZWQpOworCXZvaWQJKCpjb252ZXJ0X2NiKShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmMsCisJCQkgICAgICB1bnNpZ25lZCB2YWwxLCB1bnNpZ25lZCB2YWwyLAogCQkJICAgICAgdW5zaWduZWQgKnNhbXBsZXNfbGVmdCk7CiB9OwogCkBAIC04MSw3ICs4NCw3IEBACiB7CiAJdW5zaWduZWQgY29uID0gcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOwogCi0JY2xpZW50LT5zZWxlY3RfY2IoMSk7CisJY2xpZW50LT5zZWxlY3RfY2IoY2xpZW50LCAxKTsKIAogCWNvbiAmPSB+UzNDMjQxMF9BRENDT05fTVVYTUFTSzsKIAljb24gJj0gflMzQzI0MTBfQURDQ09OX1NUREJNOwpAQCAtMTUzLDI1ICsxNTYsNjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHMzY19hZGNfc3RhcnQpOwogCi1zdGF0aWMgdm9pZCBzM2NfYWRjX2RlZmF1bHRfc2VsZWN0KHVuc2lnbmVkIHNlbGVjdCkKK3N0YXRpYyB2b2lkIHMzY19jb252ZXJ0X2RvbmUoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgIHVuc2lnbmVkIHYsIHVuc2lnbmVkIHUsIHVuc2lnbmVkICpsZWZ0KQoreworCWNsaWVudC0+cmVzdWx0ID0gdjsKKwl3YWtlX3VwKGNsaWVudC0+d2FpdCk7Cit9CisKK2ludCBzM2NfYWRjX3JlYWQoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjaCkKK3sKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKHdha2UpOworCWludCByZXQ7CisKKwljbGllbnQtPmNvbnZlcnRfY2IgPSBzM2NfY29udmVydF9kb25lOworCWNsaWVudC0+d2FpdCA9ICZ3YWtlOworCWNsaWVudC0+cmVzdWx0ID0gLTE7CisKKwlyZXQgPSBzM2NfYWRjX3N0YXJ0KGNsaWVudCwgY2gsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dCh3YWtlLCBjbGllbnQtPnJlc3VsdCA+PSAwLCBIWiAvIDIpOworCWlmIChjbGllbnQtPnJlc3VsdCA8IDApIHsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBlcnI7CisJfQorCisJY2xpZW50LT5jb252ZXJ0X2NiID0gTlVMTDsKKwlyZXR1cm4gY2xpZW50LT5yZXN1bHQ7CisKK2VycjoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19jb252ZXJ0KTsKKworc3RhdGljIHZvaWQgczNjX2FkY19kZWZhdWx0X3NlbGVjdChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICB1bnNpZ25lZCBzZWxlY3QpCiB7CiB9CiAKIHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqczNjX2FkY19yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQl2b2lkICgqc2VsZWN0KSh1bnNpZ25lZCBpbnQgc2VsZWN0ZWQpLAotCQkJCQl2b2lkICgqY29udikodW5zaWduZWQgZDAsIHVuc2lnbmVkIGQxLAorCQkJCQl2b2lkICgqc2VsZWN0KShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2VsZWN0ZWQpLAorCQkJCQl2b2lkICgqY29udikoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCisJCQkJCQkgICAgIHVuc2lnbmVkIGQwLCB1bnNpZ25lZCBkMSwKIAkJCQkJCSAgICAgdW5zaWduZWQgKnNhbXBsZXNfbGVmdCksCiAJCQkJCXVuc2lnbmVkIGludCBpc190cykKIHsKIAlzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudDsKIAogCVdBUk5fT04oIXBkZXYpOwotCVdBUk5fT04oIWNvbnYpOwogCiAJaWYgKCFzZWxlY3QpCiAJCXNlbGVjdCA9IHMzY19hZGNfZGVmYXVsdF9zZWxlY3Q7CiAKLQlpZiAoIWNvbnYgfHwgIXBkZXYpCisJaWYgKCFwZGV2KQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2NfYWRjX2NsaWVudCksIEdGUF9LRVJORUwpOwpAQCAtMjMwLDE2ICsyNjksMTkgQEAKIAlhZGNfZGJnKGFkYywgInJlYWQgJWQ6IDB4JTA0eCwgMHglMDR4XG4iLCBjbGllbnQtPm5yX3NhbXBsZXMsIGRhdGEwLCBkYXRhMSk7CiAKIAljbGllbnQtPm5yX3NhbXBsZXMtLTsKLQkoY2xpZW50LT5jb252ZXJ0X2NiKShkYXRhMCAmIDB4M2ZmLCBkYXRhMSAmIDB4M2ZmLCAmY2xpZW50LT5ucl9zYW1wbGVzKTsKKworCWlmIChjbGllbnQtPmNvbnZlcnRfY2IpCisJCShjbGllbnQtPmNvbnZlcnRfY2IpKGNsaWVudCwgZGF0YTAgJiAweDNmZiwgZGF0YTEgJiAweDNmZiwKKwkJCQkgICAgICZjbGllbnQtPm5yX3NhbXBsZXMpOwogCiAJaWYgKGNsaWVudC0+bnJfc2FtcGxlcyA+IDApIHsKIAkJLyogZmlyZSBhbm90aGVyIGNvbnZlcnNpb24gZm9yIHRoaXMgKi8KIAotCQljbGllbnQtPnNlbGVjdF9jYigxKTsKKwkJY2xpZW50LT5zZWxlY3RfY2IoY2xpZW50LCAxKTsKIAkJczNjX2FkY19jb252ZXJ0KGFkYyk7CiAJfSBlbHNlIHsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkoY2xpZW50LT5zZWxlY3RfY2IpKDApOworCQkoY2xpZW50LT5zZWxlY3RfY2IpKGNsaWVudCwgMCk7CiAJCWFkYy0+Y3VyID0gTlVMTDsKIAogCQlzM2NfYWRjX3RyeShhZGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLWRlYnVnZnMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUtZnJlcS1kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyNzY2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUtZnJlcS1kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUtZnJlcS1kZWJ1Z2ZzLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFggQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIC0gZGVidWdmcyBzdGF0dXMgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqZGJnZnNfcm9vdDsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkYmdmc19maWxlX2lvOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRiZ2ZzX2ZpbGVfaW5mbzsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkYmdmc19maWxlX2JvYXJkOworCisjZGVmaW5lIHByaW50X25zKHgpICgoeCkgLyAxMCksICgoeCkgJSAxMCkKKworc3RhdGljIHZvaWQgc2hvd19tYXgoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBzM2NfZnJlcSAqZikKK3sKKwlzZXFfcHJpbnRmKHNlcSwgIk1BWDogRj0lbHUsIEg9JWx1LCBQPSVsdSwgQT0lbHVcbiIsCisJCSAgIGYtPmZjbGssIGYtPmhjbGssIGYtPnBjbGssIGYtPmFybWNsayk7Cit9CisKK3N0YXRpYyBpbnQgYm9hcmRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmc7CisJc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkICpicmQ7CisKKwljZmcgPSBzM2NfY3B1ZnJlcV9nZXRjb25maWcoKTsKKwlpZiAoIWNmZykgeworCQlzZXFfcHJpbnRmKHNlcSwgIm5vIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWJyZCA9IGNmZy0+Ym9hcmQ7CisJaWYgKCFicmQpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJubyBib2FyZCBkZWZpbml0aW9uIHNldD9cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZXFfcHJpbnRmKHNlcSwgIlNEUkFNIHJlZnJlc2ggJXUgbnNcbiIsIGJyZC0+cmVmcmVzaCk7CisJc2VxX3ByaW50ZihzZXEsICJhdXRvX2lvPSV1XG4iLCBicmQtPmF1dG9faW8pOworCXNlcV9wcmludGYoc2VxLCAibmVlZF9pbz0ldVxuIiwgYnJkLT5uZWVkX2lvKTsKKworCXNob3dfbWF4KHNlcSwgJmJyZC0+bWF4KTsKKworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZm9wc19ib2FyZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBib2FyZF9zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19ib2FyZCA9IHsKKwkub3BlbgkJPSBmb3BzX2JvYXJkX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IGluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmc7CisKKwljZmcgPSBzM2NfY3B1ZnJlcV9nZXRjb25maWcoKTsKKwlpZiAoIWNmZykgeworCQlzZXFfcHJpbnRmKHNlcSwgIm5vIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiICBGQ0xLICVsZCBIelxuIiwgY2ZnLT5mcmVxLmZjbGspOworCXNlcV9wcmludGYoc2VxLCAiICBIQ0xLICVsZCBIeiAoJWx1LiVsdSBucylcbiIsCisJCSAgIGNmZy0+ZnJlcS5oY2xrLCBwcmludF9ucyhjZmctPmZyZXEuaGNsa190bnMpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgUENMSyAlbGQgSHpcbiIsIGNmZy0+ZnJlcS5oY2xrKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkFSTUNMSyAlbGQgSHpcbiIsIGNmZy0+ZnJlcS5hcm1jbGspOworCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKworCXNob3dfbWF4KHNlcSwgJmNmZy0+bWF4KTsKKworCXNlcV9wcmludGYoc2VxLCAiRGl2aXNvcnM6IFA9JWQsIEg9JWQsIEE9JWQsIGR2cz0lc1xuIiwKKwkJICAgY2ZnLT5kaXZzLmhfZGl2aXNvciwgY2ZnLT5kaXZzLnBfZGl2aXNvciwKKwkJICAgY2ZnLT5kaXZzLmFybV9kaXZpc29yLCBjZmctPmRpdnMuZHZzID8gIm9uIiA6ICJvZmYiKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlxuIik7CisKKwlzZXFfcHJpbnRmKHNlcSwgImxvY2tfcGxsPSV1XG4iLCBjZmctPmxvY2tfcGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZvcHNfaW5mb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpbmZvX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2luZm8gPSB7CisJLm9wZW4JCT0gZm9wc19pbmZvX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IGlvX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnApCit7CisJdm9pZCAoKnNob3dfYmFuaykoc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKiwgdW5pb24gczNjX2lvYmFuayAqKTsKKwlzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmc7CisJc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdDsKKwl1bmlvbiBzM2NfaW9iYW5rICppb2I7CisJaW50IGJhbms7CisKKwljZmcgPSBzM2NfY3B1ZnJlcV9nZXRjb25maWcoKTsKKwlpZiAoIWNmZykgeworCQlzZXFfcHJpbnRmKHNlcSwgIm5vIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXNob3dfYmFuayA9IGNmZy0+aW5mby0+ZGVidWdfaW9fc2hvdzsKKwlpZiAoIXNob3dfYmFuaykgeworCQlzZXFfcHJpbnRmKHNlcSwgIm5vIGNvZGUgdG8gc2hvdyBiYW5rIHRpbWluZ1xuIik7CisJCXJldHVybiAwOworCX0KKworCWlvdCA9IHMzY19jcHVmcmVxX2dldGlvdGltaW5ncygpOworCWlmICghaW90KSB7CisJCXNlcV9wcmludGYoc2VxLCAibm8gaW8gdGltaW5ncyByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICJoY2xrIHBlcmlvZCBpcyAlbHUuJWx1IG5zXG4iLCBwcmludF9ucyhjZmctPmZyZXEuaGNsa190bnMpKTsKKworCWZvciAoYmFuayA9IDA7IGJhbmsgPCBNQVhfQkFOS1M7IGJhbmsrKykgeworCQlpb2IgPSAmaW90LT5iYW5rW2JhbmtdOworCisJCXNlcV9wcmludGYoc2VxLCAiYmFuayAlZDogIiwgYmFuayk7CisKKwkJaWYgKCFpb2ItPmlvXzI0MTApIHsKKwkJCXNlcV9wcmludGYoc2VxLCAibm90aGluZyBzZXRcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQlzaG93X2Jhbmsoc2VxLCBjZmcsIGlvYik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZm9wc19pb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpb19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19pbyA9IHsKKwkub3BlbgkJPSBmb3BzX2lvX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCisKK3N0YXRpYyBpbnQgX19pbml0IHMzY19mcmVxX2RlYnVnZnNfaW5pdCh2b2lkKQoreworCWRiZ2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInMzYy1jcHVmcmVxIiwgTlVMTCk7CisJaWYgKElTX0VSUihkYmdmc19yb290KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBjcmVhdGluZyBkZWJ1Z2ZzIHJvb3RcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGJnZnNfcm9vdCk7CisJfQorCisJZGJnZnNfZmlsZV9pbyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImlvLXRpbWluZyIsIFNfSVJVR08sIGRiZ2ZzX3Jvb3QsCisJCQkJCSAgICBOVUxMLCAmZm9wc19pbyk7CisKKwlkYmdmc19maWxlX2luZm8gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbmZvIiwgU19JUlVHTywgZGJnZnNfcm9vdCwKKwkJCQkJICAgICAgTlVMTCwgJmZvcHNfaW5mbyk7CisKKwlkYmdmc19maWxlX2JvYXJkID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYm9hcmQiLCBTX0lSVUdPLCBkYmdmc19yb290LAorCQkJCQkgICAgICAgTlVMTCwgJmZvcHNfYm9hcmQpOworCisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoczNjX2ZyZXFfZGVidWdmc19pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LWZyZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjFiNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS1mcmVxLmMKQEAgLTAsMCArMSw3MTYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUtZnJlcS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcsMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKy8qIG5vdGUsIGNwdWZyZXEgc3VwcG9ydCBkZWFscyBpbiBrSHosIG5vIEh6ICovCisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgczNjMjR4eF9kcml2ZXI7CitzdGF0aWMgc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyBjcHVfY3VyOworc3RhdGljIHN0cnVjdCBzM2NfaW90aW1pbmdzIHMzYzI0eHhfaW90aW1pbmc7CitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwbGxfcmVnOworc3RhdGljIHVuc2lnbmVkIGludCBsYXN0X3RhcmdldCA9IH4wOworc3RhdGljIHVuc2lnbmVkIGludCBmdGFiX3NpemU7CitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmdGFiOworCitzdGF0aWMgc3RydWN0IGNsayAqX2Nsa19tcGxsOworc3RhdGljIHN0cnVjdCBjbGsgKl9jbGtfeHRhbDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfZmNsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfaGNsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfcGNsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfYXJtOworCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRX1MzQzI0WFhfREVCVUdGUworc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqczNjX2NwdWZyZXFfZ2V0Y29uZmlnKHZvaWQpCit7CisJcmV0dXJuICZjcHVfY3VyOworfQorCitzdHJ1Y3QgczNjX2lvdGltaW5ncyAqczNjX2NwdWZyZXFfZ2V0aW90aW1pbmdzKHZvaWQpCit7CisJcmV0dXJuICZzM2MyNHh4X2lvdGltaW5nOworfQorI2VuZGlmIC8qIENPTkZJR19DUFVfRlJFUV9TM0MyNFhYX0RFQlVHRlMgKi8KKworc3RhdGljIHZvaWQgczNjX2NwdWZyZXFfZ2V0Y3VyKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwl1bnNpZ25lZCBsb25nIGZjbGssIHBjbGssIGhjbGssIGFybWNsazsKKworCWNmZy0+ZnJlcS5mY2xrID0gZmNsayA9IGNsa19nZXRfcmF0ZShjbGtfZmNsayk7CisJY2ZnLT5mcmVxLmhjbGsgPSBoY2xrID0gY2xrX2dldF9yYXRlKGNsa19oY2xrKTsKKwljZmctPmZyZXEucGNsayA9IHBjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrX3BjbGspOworCWNmZy0+ZnJlcS5hcm1jbGsgPSBhcm1jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrX2FybSk7CisKKwljZmctPnBsbC5pbmRleCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfTVBMTENPTik7CisJY2ZnLT5wbGwuZnJlcXVlbmN5ID0gZmNsazsKKworCWNmZy0+ZnJlcS5oY2xrX3RucyA9IDEwMDAwMDAwMDAgLyAoY2ZnLT5mcmVxLmhjbGsgLyAxMCk7CisKKwljZmctPmRpdnMuaF9kaXZpc29yID0gZmNsayAvIGhjbGs7CisJY2ZnLT5kaXZzLnBfZGl2aXNvciA9IGZjbGsgLyBwY2xrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2NwdWZyZXFfY2FsYyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJdW5zaWduZWQgbG9uZyBwbGwgPSBjZmctPnBsbC5mcmVxdWVuY3k7CisKKwljZmctPmZyZXEuZmNsayA9IHBsbDsKKwljZmctPmZyZXEuaGNsayA9IHBsbCAvIGNmZy0+ZGl2cy5oX2Rpdmlzb3I7CisJY2ZnLT5mcmVxLnBjbGsgPSBwbGwgLyBjZmctPmRpdnMucF9kaXZpc29yOworCisJLyogY29udmVydCBoY2xrIGludG8gMTB0aHMgb2YgbmFub3NlY29uZHMgZm9yIGlvIGNhbGNzICovCisJY2ZnLT5mcmVxLmhjbGtfdG5zID0gMTAwMDAwMDAwMCAvIChjZmctPmZyZXEuaGNsayAvIDEwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2xvc2VyKHVuc2lnbmVkIGludCB0YXJnZXQsIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgYykKK3sKKwlpbnQgZGlmZl9jdXIgPSBhYnModGFyZ2V0IC0gYyk7CisJaW50IGRpZmZfbmV3ID0gYWJzKHRhcmdldCAtIG4pOworCisJcmV0dXJuIChkaWZmX25ldyA8IGRpZmZfY3VyKTsKK30KKworc3RhdGljIHZvaWQgczNjX2NwdWZyZXFfc2hvdyhjb25zdCBjaGFyICpwZngsCisJCQkJIHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwlzM2NfZnJlcV9kYmcoIiVzOiBGdmNvPSV1LCBGPSVsdSwgQT0lbHUsIEg9JWx1ICgldSksIFA9JWx1ICgldSlcbiIsCisJCSAgICAgcGZ4LCBjZmctPnBsbC5mcmVxdWVuY3ksIGNmZy0+ZnJlcS5mY2xrLCBjZmctPmZyZXEuYXJtY2xrLAorCQkgICAgIGNmZy0+ZnJlcS5oY2xrLCBjZmctPmRpdnMuaF9kaXZpc29yLAorCQkgICAgIGNmZy0+ZnJlcS5wY2xrLCBjZmctPmRpdnMucF9kaXZpc29yKTsKK30KKworLyogZnVuY3Rpb25zIHRvIHdyYXBwZXIgdGhlIGRyaXZlciBpbmZvIGNhbGxzIHRvIGRvIHRoZSBjcHUgc3BlY2lmaWMgd29yayAqLworCitzdGF0aWMgdm9pZCBzM2NfY3B1ZnJlcV9zZXRpbyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJaWYgKGNmZy0+aW5mby0+c2V0X2lvdGltaW5nKQorCQkoY2ZnLT5pbmZvLT5zZXRfaW90aW1pbmcpKGNmZywgJnMzYzI0eHhfaW90aW1pbmcpOworfQorCitzdGF0aWMgaW50IHMzY19jcHVmcmVxX2NhbGNpbyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJaWYgKGNmZy0+aW5mby0+Y2FsY19pb3RpbWluZykKKwkJcmV0dXJuIChjZmctPmluZm8tPmNhbGNfaW90aW1pbmcpKGNmZywgJnMzYzI0eHhfaW90aW1pbmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19jcHVmcmVxX3NldHJlZnJlc2goc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCShjZmctPmluZm8tPnNldF9yZWZyZXNoKShjZmcpOworfQorCitzdGF0aWMgdm9pZCBzM2NfY3B1ZnJlcV9zZXRkaXZzKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwkoY2ZnLT5pbmZvLT5zZXRfZGl2cykoY2ZnKTsKK30KKworc3RhdGljIGludCBzM2NfY3B1ZnJlcV9jYWxjZGl2cyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJcmV0dXJuIChjZmctPmluZm8tPmNhbGNfZGl2cykoY2ZnKTsKK30KKworc3RhdGljIHZvaWQgczNjX2NwdWZyZXFfc2V0ZnZjbyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJKGNmZy0+aW5mby0+c2V0X2Z2Y28pKGNmZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfY3B1ZnJlcV9yZXN1bWVfY2xvY2tzKHZvaWQpCit7CisJY3B1X2N1ci5pbmZvLT5yZXN1bWVfY2xvY2tzKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfY3B1ZnJlcV91cGRhdGVjbGsoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgdW5zaWduZWQgaW50IGZyZXEpCit7CisJY2xrX3NldF9yYXRlKGNsaywgZnJlcSk7Cit9CisKK3N0YXRpYyBpbnQgczNjX2NwdWZyZXFfc2V0dGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQkJCSB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCisJCQkJIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcGxsKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9mcmVxcyBmcmVxczsKKwlzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnIGNwdV9uZXc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNwdV9uZXcgPSBjcHVfY3VyOyAgLyogY29weSBuZXcgZnJvbSBjdXJyZW50ICovCisKKwlzM2NfY3B1ZnJlcV9zaG93KCJjdXIiLCAmY3B1X2N1cik7CisKKwkvKiBUT0RPIC0gY2hlY2sgZm9yIERNQSBjdXJyZW50bHkgb3V0c3RhbmRpbmcgKi8KKworCWNwdV9uZXcucGxsID0gcGxsID8gKnBsbCA6IGNwdV9jdXIucGxsOworCisJaWYgKHBsbCkKKwkJZnJlcXMucGxsX2NoYW5naW5nID0gMTsKKworCS8qIHVwZGF0ZSBvdXIgZnJlcXVlbmNpZXMgKi8KKworCWNwdV9uZXcuZnJlcS5hcm1jbGsgPSB0YXJnZXRfZnJlcTsKKwljcHVfbmV3LmZyZXEuZmNsayA9IGNwdV9uZXcucGxsLmZyZXF1ZW5jeTsKKworCWlmIChzM2NfY3B1ZnJlcV9jYWxjZGl2cygmY3B1X25ldykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibm8gZGl2aXNvcnMgZm9yICVkXG4iLCB0YXJnZXRfZnJlcSk7CisJCWdvdG8gZXJyX25vdHBvc3NpYmxlOworCX0KKworCXMzY19mcmVxX2RiZygiJXM6IGdvdCBkaXZzXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2NfY3B1ZnJlcV9jYWxjKCZjcHVfbmV3KTsKKworCXMzY19mcmVxX2RiZygiJXM6IGNhbGN1bGF0ZWQgZnJlcXVlbmNpZXMgZm9yIG5ld1xuIiwgX19mdW5jX18pOworCisJaWYgKGNwdV9uZXcuZnJlcS5oY2xrICE9IGNwdV9jdXIuZnJlcS5oY2xrKSB7CisJCWlmIChzM2NfY3B1ZnJlcV9jYWxjaW8oJmNwdV9uZXcpIDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gSU8gdGltaW5nc1xuIiwgX19mdW5jX18pOworCQkJZ290byBlcnJfbm90cG9zc2libGU7CisJCX0KKwl9CisKKwlzM2NfY3B1ZnJlcV9zaG93KCJuZXciLCAmY3B1X25ldyk7CisKKwkvKiBzZXR1cCBvdXIgY3B1ZnJlcSBwYXJhbWV0ZXJzICovCisKKwlmcmVxcy5vbGQgPSBjcHVfY3VyLmZyZXE7CisJZnJlcXMubmV3ID0gY3B1X25ldy5mcmVxOworCisJZnJlcXMuZnJlcXMuY3B1ID0gMDsKKwlmcmVxcy5mcmVxcy5vbGQgPSBjcHVfY3VyLmZyZXEuYXJtY2xrIC8gMTAwMDsKKwlmcmVxcy5mcmVxcy5uZXcgPSBjcHVfbmV3LmZyZXEuYXJtY2xrIC8gMTAwMDsKKworCS8qIHVwZGF0ZSBmL2gvcCBjbG9jayBzZXR0aW5ncyBiZWZvcmUgd2UgaXNzdWUgdGhlIGNoYW5nZQorCSAqIG5vdGlmaWNhdGlvbiwgc28gdGhhdCBkcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nCisJICogc3BlY2lhbCBpZiB0aGV5IHdhbnQgdG8gcmVjYWxjdWxhdGUgb24gQ1BVRlJFUV9QUkVDSEFOR0UuICovCisKKwlzM2NfY3B1ZnJlcV91cGRhdGVjbGsoX2Nsa19tcGxsLCBjcHVfbmV3LnBsbC5mcmVxdWVuY3kpOworCXMzY19jcHVmcmVxX3VwZGF0ZWNsayhjbGtfZmNsaywgY3B1X25ldy5mcmVxLmZjbGspOworCXMzY19jcHVmcmVxX3VwZGF0ZWNsayhjbGtfaGNsaywgY3B1X25ldy5mcmVxLmhjbGspOworCXMzY19jcHVmcmVxX3VwZGF0ZWNsayhjbGtfcGNsaywgY3B1X25ldy5mcmVxLnBjbGspOworCisJLyogc3RhcnQgdGhlIGZyZXF1ZW5jeSBjaGFuZ2UgKi8KKworCWlmIChwb2xpY3kpCisJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CisKKwkvKiBJZiBoY2xrIGlzIHN0YXlpbmcgdGhlIHNhbWUsIHRoZW4gd2UgZG8gbm90IG5lZWQgdG8KKwkgKiByZS13cml0ZSB0aGUgSU8gb3IgdGhlIHJlZnJlc2ggdGltaW5ncyB3aGlsc3Qgd2UgYXJlIGNoYW5naW5nCisJICogc3BlZWQuICovCisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBpcyBvdXIgbWVtb3J5IGNsb2NrIHNsb3dpbmcgZG93bj8gKi8KKwlpZiAoY3B1X25ldy5mcmVxLmhjbGsgPCBjcHVfY3VyLmZyZXEuaGNsaykgeworCQlzM2NfY3B1ZnJlcV9zZXRyZWZyZXNoKCZjcHVfbmV3KTsKKwkJczNjX2NwdWZyZXFfc2V0aW8oJmNwdV9uZXcpOworCX0KKworCWlmIChjcHVfbmV3LmZyZXEuZmNsayA9PSBjcHVfY3VyLmZyZXEuZmNsaykgeworCQkvKiBub3QgY2hhbmdpbmcgUExMLCBqdXN0IHNldCB0aGUgZGl2aXNvcnMgKi8KKworCQlzM2NfY3B1ZnJlcV9zZXRkaXZzKCZjcHVfbmV3KTsKKwl9IGVsc2UgeworCQlpZiAoY3B1X25ldy5mcmVxLmZjbGsgPCBjcHVfY3VyLmZyZXEuZmNsaykgeworCQkJLyogc2xvdyB0aGUgY3B1IGRvd24sIHRoZW4gc2V0IGRpdmlzb3JzICovCisKKwkJCXMzY19jcHVmcmVxX3NldGZ2Y28oJmNwdV9uZXcpOworCQkJczNjX2NwdWZyZXFfc2V0ZGl2cygmY3B1X25ldyk7CisJCX0gZWxzZSB7CisJCQkvKiBzZXQgdGhlIGRpdmlzb3JzLCB0aGVuIHNwZWVkIHVwICovCisKKwkJCXMzY19jcHVmcmVxX3NldGRpdnMoJmNwdV9uZXcpOworCQkJczNjX2NwdWZyZXFfc2V0ZnZjbygmY3B1X25ldyk7CisJCX0KKwl9CisKKwkvKiBkaWQgb3VyIG1lbW9yeSBjbG9jayBzcGVlZCB1cCAqLworCWlmIChjcHVfbmV3LmZyZXEuaGNsayA+IGNwdV9jdXIuZnJlcS5oY2xrKSB7CisJCXMzY19jcHVmcmVxX3NldHJlZnJlc2goJmNwdV9uZXcpOworCQlzM2NfY3B1ZnJlcV9zZXRpbygmY3B1X25ldyk7CisJfQorCisJLyogdXBkYXRlIG91ciBjdXJyZW50IHNldHRpbmdzICovCisJY3B1X2N1ciA9IGNwdV9uZXc7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkvKiBub3RpZnkgZXZlcnlvbmUgd2UndmUgZG9uZSB0aGlzICovCisJaWYgKHBvbGljeSkKKwkJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMuZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBmaW5pc2hlZFxuIiwgX19mdW5jX18pOworCXJldHVybiAwOworCisgZXJyX25vdHBvc3NpYmxlOgorCXByaW50ayhLRVJOX0VSUiAibm8gY29tcGF0aWJsZSBzZXR0aW5ncyBmb3IgJWRcbiIsIHRhcmdldF9mcmVxKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogczNjX2NwdWZyZXFfdGFyZ2V0CisgKgorICogY2FsbGVkIGJ5IHRoZSBjcHVmcmVxIGNvcmUgdG8gYWRqdXN0IHRoZSBmcmVxdWVuY3kgdGhhdCB0aGUgQ1BVCisgKiBpcyBjdXJyZW50bHkgcnVubmluZyBhdC4KKyAqLworCitzdGF0aWMgaW50IHMzY19jcHVmcmVxX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBsbDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisKKwkvKiBhdm9pZCByZXBlYXRlZCBjYWxscyB3aGljaCBjYXVzZSBhIG5lZWRsZXNzIGFtb3V0IG9mIGR1cGxpY2F0ZWQKKwkgKiBsb2dnaW5nIG91dHB1dCAoYW5kIENQVSB0aW1lIGFzIHRoZSBjYWxjdWxhdGlvbiBwcm9jZXNzIGlzCisJICogZG9uZSkgKi8KKwlpZiAodGFyZ2V0X2ZyZXEgPT0gbGFzdF90YXJnZXQpCisJCXJldHVybiAwOworCisJbGFzdF90YXJnZXQgPSB0YXJnZXRfZnJlcTsKKworCXMzY19mcmVxX2RiZygiJXM6IHBvbGljeSAlcCwgdGFyZ2V0ICV1LCByZWxhdGlvbiAldVxuIiwKKwkJICAgICBfX2Z1bmNfXywgcG9saWN5LCB0YXJnZXRfZnJlcSwgcmVsYXRpb24pOworCisJaWYgKGZ0YWIpIHsKKwkJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIGZ0YWIsCisJCQkJCQkgICB0YXJnZXRfZnJlcSwgcmVsYXRpb24sCisJCQkJCQkgICAmaW5kZXgpKSB7CisJCQlzM2NfZnJlcV9kYmcoIiVzOiB0YWJsZSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJczNjX2ZyZXFfZGJnKCIlczogYWRqdXN0ICVkIHRvIGVudHJ5ICVkICgldSlcbiIsIF9fZnVuY19fLAorCQkJICAgICB0YXJnZXRfZnJlcSwgaW5kZXgsIGZ0YWJbaW5kZXhdLmZyZXF1ZW5jeSk7CisJCXRhcmdldF9mcmVxID0gZnRhYltpbmRleF0uZnJlcXVlbmN5OworCX0KKworCXRhcmdldF9mcmVxICo9IDEwMDA7ICAvKiBjb252ZXJ0IHRhcmdldCB0byBIeiAqLworCisJLyogZmluZCB0aGUgc2V0dGluZ3MgZm9yIG91ciBuZXcgZnJlcXVlbmN5ICovCisKKwlpZiAoIXBsbF9yZWcgfHwgY3B1X2N1ci5sb2NrX3BsbCkgeworCQkvKiBlaXRoZXIgd2UndmUgbm90IGdvdCBhbnkgUExMIHZhbHVlcywgb3Igd2UndmUgbG9ja2VkCisJCSAqIHRvIHRoZSBjdXJyZW50IG9uZS4gKi8KKwkJcGxsID0gTlVMTDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgdG1wX3BvbGljeTsKKwkJaW50IHJldDsKKworCQkvKiB3ZSBrZWVwIHRoZSBjcHUgcGxsIHRhYmxlIGluIEh6LCB0byBlbnN1cmUgd2UgZ2V0IGFuCisJCSAqIGFjY3VyYXRlIHZhbHVlIGZvciB0aGUgUExMIG91dHB1dC4gKi8KKworCQl0bXBfcG9saWN5Lm1pbiA9IHBvbGljeS0+bWluICogMTAwMDsKKwkJdG1wX3BvbGljeS5tYXggPSBwb2xpY3ktPm1heCAqIDEwMDA7CisJCXRtcF9wb2xpY3kuY3B1ID0gcG9saWN5LT5jcHU7CisKKwkJLyogY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0IHVzZXMgYSBwb2ludGVyIHRvICdpbmRleCcKKwkJICogd2hpY2ggaXMgdGhlIG51bWJlciBvZiB0aGUgdGFibGUgZW50cnksIG5vdCB0aGUgdmFsdWUgb2YKKwkJICogdGhlIHRhYmxlIGVudHJ5J3MgaW5kZXggZmllbGQuICovCisKKwkJcmV0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KCZ0bXBfcG9saWN5LCBwbGxfcmVnLAorCQkJCQkJICAgICB0YXJnZXRfZnJlcSwgcmVsYXRpb24sCisJCQkJCQkgICAgICZpbmRleCk7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIFBMTCBhdmFpbGFibGVcbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gZXJyX25vdHBvc3NpYmxlOworCQl9CisKKwkJcGxsID0gcGxsX3JlZyArIGluZGV4OworCisJCXMzY19mcmVxX2RiZygiJXM6IHRhcmdldCAldSA9PiAldVxuIiwKKwkJCSAgICAgX19mdW5jX18sIHRhcmdldF9mcmVxLCBwbGwtPmZyZXF1ZW5jeSk7CisKKwkJdGFyZ2V0X2ZyZXEgPSBwbGwtPmZyZXF1ZW5jeTsKKwl9CisKKwlyZXR1cm4gczNjX2NwdWZyZXFfc2V0dGFyZ2V0KHBvbGljeSwgdGFyZ2V0X2ZyZXEsIHBsbCk7CisKKyBlcnJfbm90cG9zc2libGU6CisJcHJpbnRrKEtFUk5fRVJSICJubyBjb21wYXRpYmxlIHNldHRpbmdzIGZvciAlZFxuIiwgdGFyZ2V0X2ZyZXEpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHMzY19jcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrX2FybSkgLyAxMDAwOworfQorCitzdHJ1Y3QgY2xrICpzM2NfY3B1ZnJlcV9jbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwljbGsgPSBjbGtfZ2V0KGRldiwgbmFtZSk7CisJaWYgKElTX0VSUihjbGspKQorCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGZhaWxlZCB0byBnZXQgY2xvY2sgJyVzJ1xuIiwgbmFtZSk7CisKKwlyZXR1cm4gY2xrOworfQorCitzdGF0aWMgaW50IHMzY19jcHVmcmVxX2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluaXRpYWxpc2luZyBwb2xpY3kgJXBcbiIsIF9fZnVuY19fLCBwb2xpY3kpOworCisJaWYgKHBvbGljeS0+Y3B1ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcG9saWN5LT5jdXIgPSBzM2NfY3B1ZnJlcV9nZXQoMCk7CisJcG9saWN5LT5taW4gPSBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXEgPSAwOworCXBvbGljeS0+bWF4ID0gcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxID0gY3B1X2N1ci5pbmZvLT5tYXguZmNsayAvIDEwMDA7CisJcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKKworCS8qIGZlZWQgdGhlIGxhdGVuY3kgaW5mb3JtYXRpb24gZnJvbSB0aGUgY3B1IGRyaXZlciAqLworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBjcHVfY3VyLmluZm8tPmxhdGVuY3k7CisKKwlpZiAoZnRhYikKKwkJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIGZ0YWIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IHMzY19jcHVmcmVxX2luaXRjbGtzKHZvaWQpCit7CisJX2Nsa19tcGxsID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAibXBsbCIpOworCV9jbGtfeHRhbCA9IHMzY19jcHVmcmVxX2Nsa19nZXQoTlVMTCwgInh0YWwiKTsKKwljbGtfZmNsayA9IHMzY19jcHVmcmVxX2Nsa19nZXQoTlVMTCwgImZjbGsiKTsKKwljbGtfaGNsayA9IHMzY19jcHVmcmVxX2Nsa19nZXQoTlVMTCwgImhjbGsiKTsKKwljbGtfcGNsayA9IHMzY19jcHVmcmVxX2Nsa19nZXQoTlVMTCwgInBjbGsiKTsKKwljbGtfYXJtID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAiYXJtY2xrIik7CisKKwlpZiAoSVNfRVJSKGNsa19mY2xrKSB8fCBJU19FUlIoY2xrX2hjbGspIHx8IElTX0VSUihjbGtfcGNsaykgfHwKKwkgICAgSVNfRVJSKF9jbGtfbXBsbCkgfHwgSVNfRVJSKGNsa19hcm0pIHx8IElTX0VSUihfY2xrX3h0YWwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBnZXQgY2xvY2socylcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNsb2NrcyBmPSVsdSxoPSVsdSxwPSVsdSxhPSVsdVxuIiwgX19mdW5jX18sCisJICAgICAgIGNsa19nZXRfcmF0ZShjbGtfZmNsaykgLyAxMDAwLAorCSAgICAgICBjbGtfZ2V0X3JhdGUoY2xrX2hjbGspIC8gMTAwMCwKKwkgICAgICAgY2xrX2dldF9yYXRlKGNsa19wY2xrKSAvIDEwMDAsCisJICAgICAgIGNsa19nZXRfcmF0ZShjbGtfYXJtKSAvIDEwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX2NwdWZyZXFfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCWlmIChwb2xpY3ktPmNwdSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHN1c3BlbmRfcGxsOworc3RhdGljIHVuc2lnbmVkIGludCBzdXNwZW5kX2ZyZXE7CisKK3N0YXRpYyBpbnQgczNjX2NwdWZyZXFfc3VzcGVuZChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgcG1fbWVzc2FnZV90IHBtc2cpCit7CisJc3VzcGVuZF9wbGwuZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKF9jbGtfbXBsbCk7CisJc3VzcGVuZF9wbGwuaW5kZXggPSBfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pOworCXN1c3BlbmRfZnJlcSA9IHMzY19jcHVmcmVxX2dldCgwKSAqIDEwMDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfY3B1ZnJlcV9yZXN1bWUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJaW50IHJldDsKKworCXMzY19mcmVxX2RiZygiJXM6IHJlc3VtaW5nIHdpdGggcG9saWN5ICVwXG4iLCBfX2Z1bmNfXywgcG9saWN5KTsKKworCWxhc3RfdGFyZ2V0ID0gfjA7CS8qIGludmFsaWRhdGUgbGFzdF90YXJnZXQgc2V0dGluZyAqLworCisJLyogZmlyc3QsIGZpbmQgb3V0IHdoYXQgc3BlZWQgd2UgcmVzdW1lZCBhdC4gKi8KKwlzM2NfY3B1ZnJlcV9yZXN1bWVfY2xvY2tzKCk7CisKKwkvKiB3aGlsc3Qgd2Ugd2lsbCBiZSBjYWxsZWQgbGF0ZXIgb24sIHdlIHRyeSBhbmQgcmUtc2V0IHRoZQorCSAqIGNwdSBmcmVxdWVuY2llcyBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHRoYXQgd2UgZG8gbm90IGVuZAorCSAqIHVwIHJlc3VtaW5nIGRldmljZXMgYW5kIHRoZW4gaW1tZWRpYXRsZXkgaGF2aW5nIHRvIHJlLXNldAorCSAqIGEgbnVtYmVyIG9mIHNldHRpbmdzIG9uY2UgdGhlc2UgZGV2aWNlcyBoYXZlIHJlc3RhcnRlZC4KKwkgKgorCSAqIGFzIGEgbm90ZSwgaXQgaXMgZXhwZWN0ZWQgZGV2aWNlcyBhcmUgbm90IHVzZWQgdW50aWwgdGhleQorCSAqIGhhdmUgYmVlbiB1bi1zdXNwZW5kZWQgYW5kIGF0IHRoYXQgdGltZSB0aGV5IHNob3VsZCBoYXZlCisJICogdXNlZCB0aGUgdXBkYXRlZCBjbG9jayBzZXR0aW5ncy4KKwkgKi8KKworCXJldCA9IHMzY19jcHVmcmVxX3NldHRhcmdldChOVUxMLCBzdXNwZW5kX2ZyZXEsICZzdXNwZW5kX3BsbCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVzZXQgcGxsL2ZyZXFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzY19jcHVmcmVxX3Jlc3VtZSBOVUxMCisjZGVmaW5lIHMzY19jcHVmcmVxX3N1c3BlbmQgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgczNjMjR4eF9kcml2ZXIgPSB7CisJLmZsYWdzCQk9IENQVUZSRVFfU1RJQ0tZLAorCS52ZXJpZnkJCT0gczNjX2NwdWZyZXFfdmVyaWZ5LAorCS50YXJnZXQJCT0gczNjX2NwdWZyZXFfdGFyZ2V0LAorCS5nZXQJCT0gczNjX2NwdWZyZXFfZ2V0LAorCS5pbml0CQk9IHMzY19jcHVmcmVxX2luaXQsCisJLnN1c3BlbmQJPSBzM2NfY3B1ZnJlcV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjX2NwdWZyZXFfcmVzdW1lLAorCS5uYW1lCQk9ICJzM2MyNHh4IiwKK307CisKKworaW50IF9faW5pdCBzM2NfY3B1ZnJlcV9yZWdpc3RlcihzdHJ1Y3QgczNjX2NwdWZyZXFfaW5mbyAqaW5mbykKK3sKKwlpZiAoIWluZm8gfHwgIWluZm8tPm5hbWUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHBhc3MgdmFsaWQgaW5mb3JtYXRpb25cbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIlMzQzI0WFggQ1BVIEZyZXF1ZW5jeSBkcml2ZXIsICVzIGNwdSBzdXBwb3J0XG4iLAorCSAgICAgICBpbmZvLT5uYW1lKTsKKworCS8qIGNoZWNrIG91ciBkcml2ZXIgaW5mbyBoYXMgdmFsaWQgZGF0YSAqLworCisJQlVHX09OKGluZm8tPnNldF9yZWZyZXNoID09IE5VTEwpOworCUJVR19PTihpbmZvLT5zZXRfZGl2cyA9PSBOVUxMKTsKKwlCVUdfT04oaW5mby0+Y2FsY19kaXZzID09IE5VTEwpOworCisJLyogaW5mby0+c2V0X2Z2Y28gaXMgb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXJlCisJICogaXMgYSBuZWVkIHRvIHNldCB0aGUgY2xvY2sgY29kZS4gKi8KKworCWNwdV9jdXIuaW5mbyA9IGluZm87CisKKwkvKiBOb3RlLCBkcml2ZXIgcmVnaXN0ZXJpbmcgc2hvdWxkIHByb2JhYmx5IHVwZGF0ZSBsb2NrdGltZSAqLworCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgczNjX2NwdWZyZXFfc2V0Ym9hcmQoc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkICpib2FyZCkKK3sKKwlzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKm91cnM7CisKKwlpZiAoIWJvYXJkKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBib2FyZCBkYXRhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENvcHkgdGhlIGJvYXJkIGluZm9ybWF0aW9uIHNvIHRoYXQgZWFjaCBib2FyZCBjYW4gbWFrZSB0aGlzCisJICogaW5pdGRhdGEuICovCisKKwlvdXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG91cnMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJKm91cnMgPSAqYm9hcmQ7CisJY3B1X2N1ci5ib2FyZCA9IG91cnM7CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBzM2NfY3B1ZnJlcV9hdXRvX2lvKHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghY3B1X2N1ci5pbmZvLT5nZXRfaW90aW1pbmcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZ2V0X2lvdGltaW5nIHVuZGVmaW5lZFxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogd29ya2luZyBvdXQgSU8gc2V0dGluZ3NcbiIsIF9fZnVuY19fKTsKKworCXJldCA9IChjcHVfY3VyLmluZm8tPmdldF9pb3RpbWluZykoJmNwdV9jdXIsICZzM2MyNHh4X2lvdGltaW5nKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZ2V0IHRpbWluZ3NcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGlmIG9uZSBvciBpcyB6ZXJvLCB0aGVuIHJldHVybiB0aGUgb3RoZXIsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1pbiAqLworI2RlZmluZSBkb19taW4oX2EsIF9iKSAoKF9hKSA9PSAwID8gKF9iKSA6IChfYikgPT0gMCA/IChfYSkgOiBtaW4oX2EsIF9iKSkKKworLyoqCisgKiBzM2NfY3B1ZnJlcV9mcmVxX21pbiAtIGZpbmQgdGhlIG1pbmltdW0gc2V0dGluZ3MgZm9yIHRoZSBnaXZlbiBmcmVxLgorICogQGRzdDogVGhlIGRlc3RpbmF0aW9uIHN0cnVjdHVyZQorICogQGE6IE9uZSBhcmd1bWVudC4KKyAqIEBiOiBUaGUgb3RoZXIgYXJndW1lbnQuCisgKgorICogQ3JlYXRlIGEgbWluaW11bSBvZiBlYWNoIGZyZXF1ZW5jeSBlbnRyeSBpbiB0aGUgJ3N0cnVjdCBzM2NfZnJlcScsCisgKiB1bmxlc3MgdGhlIGVudHJ5IGlzIHplcm8gd2hlbiBpdCBpcyBpZ25vcmVkIGFuZCB0aGUgbm9uLXplcm8gYXJndW1lbnQKKyAqIHVzZWQuCisgKi8KK3N0YXRpYyB2b2lkIHMzY19jcHVmcmVxX2ZyZXFfbWluKHN0cnVjdCBzM2NfZnJlcSAqZHN0LAorCQkJCSBzdHJ1Y3QgczNjX2ZyZXEgKmEsIHN0cnVjdCBzM2NfZnJlcSAqYikKK3sKKwlkc3QtPmZjbGsgPSBkb19taW4oYS0+ZmNsaywgYi0+ZmNsayk7CisJZHN0LT5oY2xrID0gZG9fbWluKGEtPmhjbGssIGItPmhjbGspOworCWRzdC0+cGNsayA9IGRvX21pbihhLT5wY2xrLCBiLT5wY2xrKTsKKwlkc3QtPmFybWNsayA9IGRvX21pbihhLT5hcm1jbGssIGItPmFybWNsayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNhbGNfbG9ja3RpbWUodTMyIGZyZXEsIHUzMiB0aW1lX3VzKQoreworCXUzMiByZXN1bHQ7CisKKwlyZXN1bHQgPSBmcmVxICogdGltZV91czsKKwlyZXN1bHQgPSBESVZfUk9VTkRfVVAocmVzdWx0LCAxMDAwICogMTAwMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzM2NfY3B1ZnJlcV91cGRhdGVfbG9jdGtpbWUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgYml0cyA9IGNwdV9jdXIuaW5mby0+bG9ja3RpbWVfYml0czsKKwl1MzIgcmF0ZSA9ICh1MzIpY2xrX2dldF9yYXRlKF9jbGtfeHRhbCk7CisJdTMyIHZhbDsKKworCWlmIChiaXRzID09IDApIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCXZhbCA9IGNhbGNfbG9ja3RpbWUocmF0ZSwgY3B1X2N1ci5pbmZvLT5sb2NrdGltZV91KSA8PCBiaXRzOworCXZhbCB8PSBjYWxjX2xvY2t0aW1lKHJhdGUsIGNwdV9jdXIuaW5mby0+bG9ja3RpbWVfbSk7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogbmV3IGxvY2t0aW1lIGlzIDB4JTA4eFxuIiwgX19mdW5jX18sIHZhbCk7CisJX19yYXdfd3JpdGVsKHZhbCwgUzNDMjQxMF9MT0NLVElNRSk7Cit9CisKK3N0YXRpYyBpbnQgczNjX2NwdWZyZXFfYnVpbGRfZnJlcSh2b2lkKQoreworCWludCBzaXplLCByZXQ7CisKKwlpZiAoIWNwdV9jdXIuaW5mby0+Y2FsY19mcmVxdGFibGUpCisJCXJldHVybiAtRUlOVkFMOworCisJa2ZyZWUoZnRhYik7CisJZnRhYiA9IE5VTEw7CisKKwlzaXplID0gY3B1X2N1ci5pbmZvLT5jYWxjX2ZyZXF0YWJsZSgmY3B1X2N1ciwgTlVMTCwgMCk7CisJc2l6ZSsrOworCisJZnRhYiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKiBzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZ0YWIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciB0YWJsZXNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZnRhYl9zaXplID0gc2l6ZTsKKworCXJldCA9IGNwdV9jdXIuaW5mby0+Y2FsY19mcmVxdGFibGUoJmNwdV9jdXIsIGZ0YWIsIHNpemUpOworCXMzY19jcHVmcmVxX2FkZGZyZXEoZnRhYiwgcmV0LCBzaXplLCBDUFVGUkVRX1RBQkxFX0VORCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgczNjX2NwdWZyZXFfaW5pdGNhbGwodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjcHVfY3VyLmluZm8gJiYgY3B1X2N1ci5ib2FyZCkgeworCQlyZXQgPSBzM2NfY3B1ZnJlcV9pbml0Y2xrcygpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKKwkJLyogZ2V0IGN1cnJlbnQgc2V0dGluZ3MgKi8KKwkJczNjX2NwdWZyZXFfZ2V0Y3VyKCZjcHVfY3VyKTsKKwkJczNjX2NwdWZyZXFfc2hvdygiY3VyIiwgJmNwdV9jdXIpOworCisJCWlmIChjcHVfY3VyLmJvYXJkLT5hdXRvX2lvKSB7CisJCQlyZXQgPSBzM2NfY3B1ZnJlcV9hdXRvX2lvKCk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGdldCBpbyB0aW1pbmdcbiIsCisJCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCWlmIChjcHVfY3VyLmJvYXJkLT5uZWVkX2lvICYmICFjcHVfY3VyLmluZm8tPnNldF9pb3RpbWluZykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gSU8gc3VwcG9ydCByZWdpc3RlcmVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmICghY3B1X2N1ci5pbmZvLT5uZWVkX3BsbCkKKwkJCWNwdV9jdXIubG9ja19wbGwgPSAxOworCisJCXMzY19jcHVmcmVxX3VwZGF0ZV9sb2N0a2ltZSgpOworCisJCXMzY19jcHVmcmVxX2ZyZXFfbWluKCZjcHVfY3VyLm1heCwgJmNwdV9jdXIuYm9hcmQtPm1heCwKKwkJCQkgICAgICZjcHVfY3VyLmluZm8tPm1heCk7CisKKwkJaWYgKGNwdV9jdXIuaW5mby0+Y2FsY19mcmVxdGFibGUpCisJCQlzM2NfY3B1ZnJlcV9idWlsZF9mcmVxKCk7CisKKwkJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnMzYzI0eHhfZHJpdmVyKTsKKwl9CisKKyBvdXQ6CisJcmV0dXJuIHJldDsKK30KKworbGF0ZV9pbml0Y2FsbChzM2NfY3B1ZnJlcV9pbml0Y2FsbCk7CisKKy8qKgorICogczNjX3BsbHRhYl9yZWdpc3RlciAtIHJlZ2lzdGVyIENQVSBQTEwgdGFibGUuCisgKiBAcGxsczogVGhlIGxpc3Qgb2YgUExMIGVudHJpZXMuCisgKiBAcGxsc19ubzogVGhlIHNpemUgb2YgdGhlIFBMTCBlbnRyaWVzIEBwbGxzLgorICoKKyAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBzZXQgb2YgUExMcyB3aXRoIHRoZSBzeXN0ZW0uCisgKi8KK2ludCBfX2luaXQgczNjX3BsbHRhYl9yZWdpc3RlcihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBsbHMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHBsbHNfbm8pCit7CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp2YWxzOworCXVuc2lnbmVkIGludCBzaXplOworCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpICogKHBsbHNfbm8gKyAxKTsKKworCXZhbHMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICh2YWxzKSB7CisJCW1lbWNweSh2YWxzLCBwbGxzLCBzaXplKTsKKwkJcGxsX3JlZyA9IHZhbHM7CisKKwkJLyogd3JpdGUgYSB0ZXJtaW5hdGluZyBlbnRyeSwgd2UgZG9uJ3Qgc3RvcmUgaXQgaW4gdGhlCisJCSAqIHRhYmxlIHRoYXQgaXMgc3RvcmVkIGluIHRoZSBrZXJuZWwgKi8KKwkJdmFscyArPSBwbGxzX25vOworCQl2YWxzLT5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKworCQlwcmludGsoS0VSTl9JTkZPICJjcHVmcmVxOiAlZCBQTEwgZW50cmllc1xuIiwgcGxsc19ubyk7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogbm8gbWVtb3J5IGZvciBQTEwgdGFibGVzXG4iKTsKKworCXJldHVybiB2YWxzID8gMCA6IC1FTk9NRU07Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKaW5kZXggMTkzMmI3ZS4uNTQ0N2U2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwpAQCAtODEsNyArODEsNyBAQAogCQkubWFwX2lvCQk9IHMzYzI0MTBfbWFwX2lvLAogCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDEwX2luaXRfY2xvY2tzLAogCQkuaW5pdF91YXJ0cwk9IHMzYzI0MTBfaW5pdF91YXJ0cywKLQkJLmluaXQJCT0gczNjMjQxMF9pbml0LAorCQkuaW5pdAkJPSBzM2MyNDEwYV9pbml0LAogCQkubmFtZQkJPSBuYW1lX3MzYzI0MTBhCiAJfSwKIAl7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYwppbmRleCA0ZWIzNzhjLi5mNTJhOTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgpAQCAtMTgwLDI1ICsxODIsNiBAQAogCX0KIH0KIAotLyogTkFORCBDb250cm9sbGVyICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX25hbmRfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0WFhfUEFfTkFORCwKLQkJLmVuZCAgID0gUzNDMjRYWF9QQV9OQU5EICsgUzNDMjRYWF9TWl9OQU5EIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfQotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX25hbmQgPSB7Ci0JLm5hbWUJCSAgPSAiczNjMjQxMC1uYW5kIiwKLQkuaWQJCSAgPSAtMSwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfbmFuZF9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSBzM2NfbmFuZF9yZXNvdXJjZSwKLX07Ci0KLUVYUE9SVF9TWU1CT0woczNjX2RldmljZV9uYW5kKTsKLQogLyogVVNCIERldmljZSAoR2FkZ2V0KSovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3VzYmdhZGdldF9yZXNvdXJjZVtdID0gewpAQCAtMzQ4LDcgKzMzMSw3IEBACiAvKiBIV01PTiAqLwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHdtb24gPSB7Ci0JLm5hbWUJCT0gInMzYzI0eHgtaHdtb24iLAorCS5uYW1lCQk9ICJzM2MtaHdtb24iLAogCS5pZAkJPSAtMSwKIAkuZGV2LnBhcmVudAk9ICZzM2NfZGV2aWNlX2FkYy5kZXYsCiB9OwpAQCAtNDczLDQgKzQ1Niw1MiBAQAogCiBFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfY2FtaWYpOwogCisvKiBBQzk3ICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX2FjOTdfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0NDBfUEFfQUM5NywKKwkJLmVuZCAgID0gUzNDMjQ0MF9QQV9BQzk3ICsgUzNDMjQ0MF9TWl9BQzk3IC0xLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1MzQzI0NHhfQUM5NywKKwkJLmVuZCAgID0gSVJRX1MzQzI0NHhfQUM5NywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lICA9ICJQQ00gb3V0IiwKKwkJLnN0YXJ0ID0gRE1BQ0hfUENNX09VVCwKKwkJLmVuZCAgID0gRE1BQ0hfUENNX09VVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5uYW1lICA9ICJQQ00gaW4iLAorCQkuc3RhcnQgPSBETUFDSF9QQ01fSU4sCisJCS5lbmQgICA9IERNQUNIX1BDTV9JTiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbNF0gPSB7CisJCS5uYW1lICA9ICJNaWMgaW4iLAorCQkuc3RhcnQgPSBETUFDSF9NSUNfSU4sCisJCS5lbmQgICA9IERNQUNIX01JQ19JTiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyB1NjQgczNjX2RldmljZV9hYzk3X2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9hYzk3ID0geworCS5uYW1lCQkgID0gInMzYy1hYzk3IiwKKwkuaWQJCSAgPSAtMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfYWM5N19yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfYWM5N19yZXNvdXJjZSwKKwkuZGV2ICAgICAgICAgICAgICA9IHsKKwkJLmRtYV9tYXNrID0gJnMzY19kZXZpY2VfYWM5N19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUwKKwl9Cit9OworCitFWFBPUlRfU1lNQk9MKHMzY19kZXZpY2VfYWM5Nyk7CisKICNlbmRpZiAvLyBDT05GSUdfQ1BVX1MzMjQ0MApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmViMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKQEAgLTAsMCArMSwyODIgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcsMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDIENQVSBmcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0IC0gY29yZSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisKK3N0cnVjdCBzZXFfZmlsZTsKKworI2RlZmluZSBNQVhfQkFOS1MgKDgpCisjZGVmaW5lIFMzQzI0MTJfTUFYX0lPCSg4KQorCisvKioKKyAqIHN0cnVjdCBzM2MyNDEwX2lvYmFua190aW1pbmcgLSBJTyBiYW5rIHRpbWluZ3MgZm9yIFMzQzI0MTAgc3R5bGUgdGltaW5ncworICogQGJhbmtjb246IFRoZSBjYWNoZWQgdmVyc2lvbiBvZiBzZXR0aW5ncyBpbiB0aGlzIHN0cnVjdHVyZS4KKyAqIEB0YWNwOgorICogQHRhY3M6IFRpbWUgZnJvbSBhZGRyZXNzIHZhbGlkIHRvIG5DUyBhc3NlcnRlZC4KKyAqIEB0Y29zOiBUaW1lIGZyb20gbkNTIGFzc2VydGVkIHRvIG5PRSBvciBuV0UgYXNzZXJ0ZWQuCisgKiBAdGFjYzogVGltZSB0aGF0IG5PRSBvciBuV0UgaXMgYXNzZXJ0ZWQuCisgKiBAdGNvaDogVGltZSBuQ1MgaXMgaGVsZCBhZnRlciBuT0Ugb3IgbldFIGFyZSByZWxlYXNlZC4KKyAqIEB0Y2FoOiBUaW1lIGFkZHJlc3MgaXMgaGVsZCBmb3IgYWZ0ZXIKKyAqIEBud2FpdF9lbjogV2hldGhlciBuV0FJVCBpcyBlbmFibGVkIGZvciB0aGlzIGJhbmsuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgSU8gdGltaW5ncyBmb3IgYSBTM0MyNDEwIHN0eWxlIElPIGJhbmsKKyAqIHVzZWQgYnkgdGhlIENQVSBmcmVxdWVuY3kgc3VwcG9ydCBpZiBpdCBuZWVkcyB0byBjaGFuZ2UgdGhlIHNldHRpbmdzCisgKiBvZiB0aGUgSU8uCisgKi8KK3N0cnVjdCBzM2MyNDEwX2lvYmFua190aW1pbmcgeworCXVuc2lnbmVkIGxvbmcJYmFua2NvbjsKKwl1bnNpZ25lZCBpbnQJdGFjcDsKKwl1bnNpZ25lZCBpbnQJdGFjczsKKwl1bnNpZ25lZCBpbnQJdGNvczsKKwl1bnNpZ25lZCBpbnQJdGFjYzsKKwl1bnNpZ25lZCBpbnQJdGNvaDsJCS8qIG5DUyBob2xkIGFmcmVyIG5PRS9uV0UgKi8KKwl1bnNpZ25lZCBpbnQJdGNhaDsJCS8qIEFkZHJlc3MgaG9sZCBhZnRlciBuQ1MgKi8KKwl1bnNpZ25lZCBjaGFyCW53YWl0X2VuOwkvKiBuV2FpdCBlbmFibGVkIGZvciBiYW5rLiAqLworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nIC0gaW8gdGltaW5ncyBmb3IgUEwwOTIgKFMzQzI0MTIpIHN0eWxlIElPCisgKiBAaWRjeTogVGhlIGlkbGUgY3ljbGUgdGltZSBiZXR3ZWVuIHRyYW5zYWN0aW9ucy4KKyAqIEB3c3RyZDogbkNTIHJlbGVhc2UgdG8gZW5kIG9mIHJlYWQgY3ljbGUuCisgKiBAd3N0d3I6IG5DUyByZWxlYXNlIHRvIGVuZCBvZiB3cml0ZSBjeWNsZS4KKyAqIEB3c3RvZW46IG5DUyBhc3NlcnRpb24gdG8gbk9FIGFzc2VydGlvbiB0aW1lLgorICogQHdzdHdlbjogbkNTIGFzc2VydGlvbiB0byBuV0UgYXNzZXJ0aW9uIHRpbWUuCisgKiBAd3N0YnJkOiBCdXJzdCByZWFkeSBkZWxheS4KKyAqIEBzbWJpZGN5cjogUmVnaXN0ZXIgY2FjaGUgZm9yIHNtYmlkY3lyIHZhbHVlLgorICogQHNtYndzdHJkOiBSZWdpc3RlciBjYWNoZSBmb3Igc21id3N0cmQgdmFsdWUuCisgKiBAc21id3N0d3I6IFJlZ2lzdGVyIGNhY2hlIGZvciBzbWJ3c3R3ciB2YWx1ZS4KKyAqIEBzbWJ3c3RvZW46IFJlZ2lzdGVyIGNhY2hlIGZvciBzbWJ3c3RvZW4gdmFsdWUuCisgKiBAc21id3N0d2VuOiBSZWdpc3RlciBjYWNoZSBmb3Igc21id3N0d2VuIHZhbHVlLgorICogQHNtYndzdGJyZDogUmVnaXN0ZXIgY2FjaGUgZm9yIHNtYndzdGJyZCB2YWx1ZS4KKyAqCisgKiBUaW1pbmcgaW5mb3JtYXRpb24gZm9yIGEgSU8gYmFuayBvbiBhbiBTM0MyNDEyIG9yIHNpbWlsYXIgc3lzdGVtIHdoaWNoCisgKiB1c2VzIGEgUEwwOTMgYmxvY2suCisgKi8KK3N0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcgeworCXVuc2lnbmVkIGludAlpZGN5OworCXVuc2lnbmVkIGludAl3c3RyZDsKKwl1bnNpZ25lZCBpbnQJd3N0d3I7CisJdW5zaWduZWQgaW50CXdzdG9lbjsKKwl1bnNpZ25lZCBpbnQJd3N0d2VuOworCXVuc2lnbmVkIGludAl3c3RicmQ7CisKKwkvKiByZWdpc3RlciBjYWNoZSAqLworCXVuc2lnbmVkIGNoYXIJc21iaWRjeXI7CisJdW5zaWduZWQgY2hhcglzbWJ3c3RyZDsKKwl1bnNpZ25lZCBjaGFyCXNtYndzdHdyOworCXVuc2lnbmVkIGNoYXIJc21id3N0b2VuOworCXVuc2lnbmVkIGNoYXIJc21id3N0d2VuOworCXVuc2lnbmVkIGNoYXIJc21id3N0YnJkOworfTsKKwordW5pb24gczNjX2lvYmFuayB7CisJc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZwkqaW9fMjQxMDsKKwlzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nCSppb18yNDEyOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2lvdGltaW5ncyAtIENoaXAgSU8gdGltaW5ncyBob2xkZXIKKyAqIEBiYW5rOiBUaGUgdGltaW5ncyBmb3IgZWFjaCBJTyBiYW5rLgorICovCitzdHJ1Y3QgczNjX2lvdGltaW5ncyB7CisJdW5pb24gczNjX2lvYmFuawliYW5rW01BWF9CQU5LU107Cit9OworCisvKioKKyAqIHN0cnVjdCBzM2NfcGxsdGFiIC0gUExMIHRhYmxlIGluZm9ybWF0aW9uLgorICogQHZhbHM6IExpc3Qgb2YgUExMIHZhbHVlcy4KKyAqIEBzaXplOiBTaXplIG9mIHRoZSBQTEwgdGFibGUgQHZhbHMuCisgKi8KK3N0cnVjdCBzM2NfcGxsdGFiIHsKKwlzdHJ1Y3QgczNjX3BsbHZhbAkqdmFsczsKKwlpbnQJCQkgc2l6ZTsKK307CisKKy8qKgorICogc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAtIGN1cnJlbnQgY3B1IGZyZXF1ZW5jeSBjb25maWd1cmF0aW9uCisgKiBAZnJlcTogVGhlIGN1cnJlbnQgc2V0dGluZ3MgZm9yIHRoZSBjb3JlIGNsb2Nrcy4KKyAqIEBtYXg6IE1heGl1bSBzZXR0aW5ncywgZGVyaXZlZCBmcm9tIGNvcmUsIGJvYXJkIGFuZCB1c2VyIHNldHRpbmdzLgorICogQHBsbDogVGhlIFBMTCB0YWJsZSBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgUExMIHNldHRpbmdzLgorICogQGRpdnM6IFRoZSBkaXZpc29yIHNldHRpbmdzIGZvciB0aGUgY29yZSBjbG9ja3MuCisgKiBAaW5mbzogVGhlIGN1cnJlbnQgY29yZSBkcml2ZXIgaW5mb3JtYXRpb24uCisgKiBAYm9hcmQ6IFRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJvYXJkIHdlIGFyZSBydW5uaW5nIG9uLgorICogQGxvY2tfcGxsOiBTZXQgaWYgdGhlIFBMTCBzZXR0aW5ncyBjYW5ub3QgYmUgY2hhbmdlZC4KKyAqCisgKiBUaGlzIGlzIGZvciB0aGUgY29yZSBkcml2ZXJzIHRoYXQgbmVlZCB0byBrbm93IGluZm9ybWF0aW9uIGFib3V0CisgKiB0aGUgY3VycmVudCBzZXR0aW5ncyBhbmQgdmFsdWVzLiBJdCBzaG91bGQgbm90IGJlIG5lZWRlZCBieSBhbnkKKyAqIGRldmljZSBkcml2ZXJzLgorKi8KK3N0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgeworCXN0cnVjdCBzM2NfZnJlcQkJZnJlcTsKKwlzdHJ1Y3QgczNjX2ZyZXEJCW1heDsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgcGxsOworCXN0cnVjdCBzM2NfY2xrZGl2cwlkaXZzOworCXN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvICppbmZvOwkvKiBmb3IgY29yZSwgbm90IGRyaXZlcnMgKi8KKwlzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkOworCisJdW5zaWduZWQgaW50CWxvY2tfcGxsOjE7Cit9OworCisvKioKKyAqIHN0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvIC0gSW5mb3JtYXRpb24gZm9yIHRoZSBDUFUgZnJlcXVlbmN5IGRyaXZlci4KKyAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGlzIGltcGxlbWVudGF0aW9uLgorICogQG1heDogVGhlIG1heGltdW0gZnJlcXVlbmNpZXMgZm9yIHRoZSBzeXN0ZW0uCisgKiBAbGF0ZW5jeTogVHJhbnNpdGlvbiBsYXRlbmN5IHRvIGdpdmUgdG8gY3B1ZnJlcS4KKyAqIEBsb2NrdGltZV9tOiBUaGUgbG9jay10aW1lIGluIHVTIGZvciB0aGUgTVBMTC4KKyAqIEBsb2NrdGltZV91OiBUaGUgbG9jay10aW1lIGluIHVTIGZvciB0aGUgVVBMTC4KKyAqIEBsb2N0dGltZV9iaXRzOiBUaGUgbnVtYmVyIG9mIGJpdHMgZWFjaCBMT0NLVElNRSBmaWVsZC4KKyAqIEBuZWVkX3BsbDogU2V0IGlmIHRoaXMgZHJpdmVyIG5lZWRzIHRvIGNoYW5nZSB0aGUgUExMIHZhbHVlcyB0byBhY2hlaXZlCisgKglhbnkgZnJlcXVlbmN5IGNoYW5nZXMuIFRoaXMgaXMgcmVhbGx5IG9ubHkgbmVlZCBieSBkZXZpY2VzIGxpa2UgdGhlCisgKglTM0MyNDEwIHdoZXJlIHRoZXJlIGlzIG5vIG9yIGxpbWl0ZWQgZGl2aWRlciBiZXR3ZWVuIHRoZSBQTEwgYW5kIHRoZQorICoJQVJNQ0xLLgorICogQHJlc3VtZV9jbG9ja3M6IFVwZGF0ZSB0aGUgY2xvY2tzIG9uIHJlc3VtZS4KKyAqIEBnZXRfaW90aW1pbmc6IEdldCB0aGUgY3VycmVudCBJTyB0aW1pbmcgZGF0YSwgbWFpbmx5IGZvciB1c2UgYXQgc3RhcnQuCisgKiBAc2V0X2lvdGltaW5nOiBVcGRhdGUgdGhlIElPIHRpbWluZ3MgZnJvbSB0aGUgY2FjaGVkIGNvcGllcyBjYWxjdWxhdGVkCisgKglmcm9tIHRoZSBAY2FsY19pb3RpbWluZyBlbnRyeSB3aGVuIGNoYW5naW5nIHRoZSBmcmVxdWVuY3kuCisgKiBAY2FsY19pb3RpbWluZzogQ2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIGNhY2hlZCBjb3BpZXMgb2YgdGhlIElPIHRpbWluZ3MKKyAqCWZyb20gdGhlIG5ld2x5IGNhbGN1bGF0ZWQgZnJlcXVlbmNpZXMuCisgKiBAY2FsY19mcmVxdGFibGU6IENhbGN1bGF0ZSAoZmlsbCBpbikgdGhlIGdpdmVuIGZyZXF1ZW5jeSB0YWJsZSBmcm9tIHRoZQorICoJY3VycmVudCBmcmVxdWVuY3kgY29uZmlndXJhdGlvbi4gSWYgdGhlIHRhYmxlIHBhc3NlZCBpbiBpcyBOVUxMLAorICoJdGhlbiB0aGUgcmV0dXJuIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYmUgZmlsbGVkIGZvciBhbGxvY2F0aW9uCisgKglvZiB0aGUgdGFibGUuCisgKiBAc2V0X3JlZnJlc2g6IFNldCB0aGUgbWVtb3J5IHJlZnJlc2ggY29uZmlndXJhdGlvbi4KKyAqIEBzZXRfZnZjbzogU2V0IHRoZSBQTEwgZnJlcXVlbmNpZXMuCisgKiBAc2V0X2RpdnM6IFVwZGF0ZSB0aGUgY2xvY2sgZGl2aXNvcnMuCisgKiBAY2FsY19kaXZzOiBDYWxjdWxhdGUgdGhlIGNsb2NrIGRpdmlzb3JzLgorICovCitzdHJ1Y3QgczNjX2NwdWZyZXFfaW5mbyB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJc3RydWN0IHMzY19mcmVxCQltYXg7CisKKwl1bnNpZ25lZCBpbnQJCWxhdGVuY3k7CisKKwl1bnNpZ25lZCBpbnQJCWxvY2t0aW1lX207CisJdW5zaWduZWQgaW50CQlsb2NrdGltZV91OworCXVuc2lnbmVkIGNoYXIJCWxvY2t0aW1lX2JpdHM7CisKKwl1bnNpZ25lZCBpbnQJCW5lZWRfcGxsOjE7CisKKwkvKiBkcml2ZXIgcm91dGluZXMgKi8KKworCXZvaWQJCSgqcmVzdW1lX2Nsb2Nrcykodm9pZCk7CisKKwlpbnQJCSgqZ2V0X2lvdGltaW5nKShzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJCXN0cnVjdCBzM2NfaW90aW1pbmdzICp0aW1pbmdzKTsKKworCXZvaWQJCSgqc2V0X2lvdGltaW5nKShzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJCXN0cnVjdCBzM2NfaW90aW1pbmdzICp0aW1pbmdzKTsKKworCWludAkJKCpjYWxjX2lvdGltaW5nKShzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqdGltaW5ncyk7CisKKwlpbnQJCSgqY2FsY19mcmVxdGFibGUpKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkJICBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnQsCisJCQkJCSAgc2l6ZV90IHRhYmxlX3NpemUpOworCisJdm9pZAkJKCpkZWJ1Z19pb19zaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCQkJIHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkJIHVuaW9uIHMzY19pb2JhbmsgKmlvYik7CisKKwl2b2lkCQkoKnNldF9yZWZyZXNoKShzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpOworCXZvaWQJCSgqc2V0X2Z2Y28pKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CisJdm9pZAkJKCpzZXRfZGl2cykoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKKwlpbnQJCSgqY2FsY19kaXZzKShzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpOworfTsKKworZXh0ZXJuIGludCBzM2NfY3B1ZnJlcV9yZWdpc3RlcihzdHJ1Y3QgczNjX2NwdWZyZXFfaW5mbyAqaW5mbyk7CisKK2V4dGVybiBpbnQgczNjX3BsbHRhYl9yZWdpc3RlcihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBsbHMsIHVuc2lnbmVkIGludCBwbGxzX25vKTsKKworLyogZXhwb3J0cyBhbmQgdXRpbGl0aWVzIGZvciBkZWJ1Z2ZzICovCitleHRlcm4gc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqczNjX2NwdWZyZXFfZ2V0Y29uZmlnKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBzM2NfaW90aW1pbmdzICpzM2NfY3B1ZnJlcV9nZXRpb3RpbWluZ3Modm9pZCk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfaW90aW1pbmdfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCQkgICAgIHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgICAgIHVuaW9uIHMzY19pb2JhbmsgKmlvYik7CisKK2V4dGVybiB2b2lkIHMzYzI0MTJfaW90aW1pbmdfZGVidWdmcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCQkgICAgIHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgICAgIHVuaW9uIHMzY19pb2JhbmsgKmlvYik7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfUzNDMjRYWF9ERUJVR0ZTCisjZGVmaW5lIHMzY19jcHVmcmVxX2RlYnVnZnNfY2FsbCh4KSB4CisjZWxzZQorI2RlZmluZSBzM2NfY3B1ZnJlcV9kZWJ1Z2ZzX2NhbGwoeCkgTlVMTAorI2VuZGlmCisKKy8qIFVzZWZ1bCB1dGlsaXR5IGZ1bmN0aW9ucy4gKi8KKworZXh0ZXJuIHN0cnVjdCBjbGsgKnMzY19jcHVmcmVxX2Nsa19nZXQoc3RydWN0IGRldmljZSAqLCBjb25zdCBjaGFyICopOworCisvKiBTM0MyNDEwIGFuZCBjb21wYXRpYmxlIGV4cG9ydGVkIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCBzM2MyNDEwX2NwdWZyZXFfc2V0cmVmcmVzaChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpOworCitleHRlcm4gaW50IHMzYzI0MTBfaW90aW1pbmdfY2FsYyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOworCitleHRlcm4gaW50IHMzYzI0MTBfaW90aW1pbmdfZ2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQlzdHJ1Y3QgczNjX2lvdGltaW5ncyAqdGltaW5ncyk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfaW90aW1pbmdfc2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfc2V0X2Z2Y28oc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKTsKKworLyogUzNDMjQxMiBjb21wYXRpYmxlIHJvdXRpbmVzICovCisKK2V4dGVybiBpbnQgczNjMjQxMl9pb3RpbWluZ19nZXQoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJCXN0cnVjdCBzM2NfaW90aW1pbmdzICp0aW1pbmdzKTsKKworZXh0ZXJuIGludCBzM2MyNDEyX2lvdGltaW5nX2dldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJc3RydWN0IHMzY19pb3RpbWluZ3MgKnRpbWluZ3MpOworCitleHRlcm4gaW50IHMzYzI0MTJfaW90aW1pbmdfY2FsYyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOworCitleHRlcm4gdm9pZCBzM2MyNDEyX2lvdGltaW5nX3NldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOworCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRX1MzQzI0WFhfREVCVUcKKyNkZWZpbmUgczNjX2ZyZXFfZGJnKHguLi4pIHByaW50ayhLRVJOX0lORk8geCkKKyNlbHNlCisjZGVmaW5lIHMzY19mcmVxX2RiZyh4Li4uKSBkbyB7IGlmICgwKSBwcmludGsoeCk7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRX1MzQzI0WFhfREVCVUcgKi8KKworI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TM0MyNFhYX0lPREVCVUcKKyNkZWZpbmUgczNjX2ZyZXFfaW9kYmcoeC4uLikgcHJpbnRrKEtFUk5fSU5GTyB4KQorI2Vsc2UKKyNkZWZpbmUgczNjX2ZyZXFfaW9kYmcoeC4uLikgZG8geyBpZiAoMCkgcHJpbnRrKHgpOyB9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19DUFVfRlJFUV9TM0MyNFhYX0lPREVCVUcgKi8KKworc3RhdGljIGlubGluZSBpbnQgczNjX2NwdWZyZXFfYWRkZnJlcShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlLAorCQkJCSAgICAgIGludCBpbmRleCwgc2l6ZV90IHRhYmxlX3NpemUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGZyZXEpCit7CisJaWYgKGluZGV4IDwgMCkKKwkJcmV0dXJuIGluZGV4OworCisJaWYgKHRhYmxlKSB7CisJCWlmIChpbmRleCA+PSB0YWJsZV9zaXplKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJczNjX2ZyZXFfZGJnKCIlczogeyAlZCA9ICV1IGtIeiB9XG4iLAorCQkJICAgICBfX2Z1bmNfXywgaW5kZXgsIGZyZXEpOworCisJCXRhYmxlW2luZGV4XS5pbmRleCA9IGluZGV4OworCQl0YWJsZVtpbmRleF0uZnJlcXVlbmN5ID0gZnJlcTsKKwl9CisKKwlyZXR1cm4gaW5kZXggKyAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9maXEuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZmlxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyMWI4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZmlxLmgKQEAgLTAsMCArMSwxMyBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9maXEuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgUzNDMjRYWCBDUFUgRklRIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworZXh0ZXJuIGludCBzM2MyNHh4X3NldF9maXEodW5zaWduZWQgaW50IGlycSwgYm9vbCBvbik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0MTAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCmluZGV4IGE5YWM5ZTIuLmI2ZGVlZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDEwCiAKIGV4dGVybiAgaW50IHMzYzI0MTBfaW5pdCh2b2lkKTsKK2V4dGVybiAgaW50IHMzYzI0MTBhX2luaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfbWFwX2lvKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKaW5kZXggOTU4NzM3Ny4uZDAyZjVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwpAQCAtNDkzLDYgKzQ5MywzOCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19GSVEKKy8qKgorICogczNjMjR4eF9zZXRfZmlxIC0gc2V0IHRoZSBGSVEgcm91dGluZworICogQGlycTogSVJRIG51bWJlciB0byByb3V0ZSB0byBGSVEgb24gcHJvY2Vzc29yLgorICogQG9uOiBXaGV0aGVyIHRvIHJvdXRlIEBpcnEgdG8gdGhlIEZJUSwgb3IgdG8gcmVtb3ZlIHRoZSBGSVEgcm91dGluZy4KKyAqCisgKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBJUlEgdG8gRklRIHJvdXRpbmcgZGVwZW5kaW5nIG9uIEBpcnEgYW5kIEBvbi4gSWYKKyAqIEBvbiBpcyB0cnVlLCB0aGUgQGlycSBpcyBjaGVja2VkIHRvIHNlZSBpZiBpdCBjYW4gYmUgcm91dGVkIGFuZCB0aGUKKyAqIGludGVycnVwdCBjb250cm9sbGVyIHVwZGF0ZWQgdG8gcm91dGUgdGhlIElSUS4gSWYgQG9uIGlzIGZhbHNlLCB0aGUgRklRCisgKiByb3V0aW5nIGlzIGNsZWFyZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggQGlycSBpcyBzcGVjaWZpZWQuCisgKi8KK2ludCBzM2MyNHh4X3NldF9maXEodW5zaWduZWQgaW50IGlycSwgYm9vbCBvbikKK3sKKwl1MzIgaW50bW9kOworCXVuc2lnbmVkIG9mZnM7CisKKwlpZiAob24pIHsKKwkJb2ZmcyA9IGlycSAtIEZJUV9TVEFSVDsKKwkJaWYgKG9mZnMgPiAzMSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWludG1vZCA9IDEgPDwgb2ZmczsKKwl9IGVsc2UgeworCQlpbnRtb2QgPSAwOworCX0KKworCV9fcmF3X3dyaXRlbChpbnRtb2QsIFMzQzI0MTBfSU5UTU9EKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKIC8qIHMzYzI0eHhfaW5pdF9pcnEKICAqCiAgKiBJbml0aWFsaXNlIFMzQzI0MTAgSVJRIHN5c3RlbQpAQCAtNTA1LDYgKzUzNywxMCBAQAogCWludCBpcnFubzsKIAlpbnQgaTsKIAorI2lmZGVmIENPTkZJR19GSVEKKwlpbml0X0ZJUSgpOworI2VuZGlmCisKIAlpcnFkYmYoInMzYzI0MTBfaW5pdF9pcnE6IGNsZWFyaW5nIGludGVycnVwdCBzdGF0dXMgZmxhZ3NcbiIpOwogCiAJLyogZmlyc3QsIGNsZWFyIGFsbCBpbnRlcnJ1cHRzIHBlbmRpbmcuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEwLWNwdWZyZXEtdXRpbHMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEwLWNwdWZyZXEtdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VhODAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAtY3B1ZnJlcS11dGlscy5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEwLWNwdWZyZXEtdXRpbHMuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBDUFUgRnJlcXVlbmN5IHNjYWxpbmcgLSB1dGlscyBmb3IgUzNDMjQxMC9TM0MyNDQwL1MzQzI0NDIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgorCisvKioKKyAqIHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoIC0gc2V0IFNEUkFNIHJlZnJlc2ggdmFsdWUKKyAqIEBjZmc6IFRoZSBmcmVxdWVuY3kgY29uZmlndXJhdGlvbgorICoKKyAqIFNldCB0aGUgU0RSQU0gcmVmcmVzaCB2YWx1ZSBhcHByb3ByaWF0ZWx5IGZvciB0aGUgY29uZmlndXJlZAorICogZnJlcXVlbmN5LgorICovCit2b2lkIHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkID0gY2ZnLT5ib2FyZDsKKwl1bnNpZ25lZCBsb25nIHJlZnJlc2g7CisJdW5zaWduZWQgbG9uZyByZWZ2YWw7CisKKwkvKiBSZWR1Y2UgYm90aCB0aGUgcmVmcmVzaCB0aW1lIChpbiBucykgYW5kIHRoZSBmcmVxdWVuY3kgKGluIE1IeikKKwkgKiBkb3duIHRvIGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBvdmVyZmxvdyAzMiBiaXQgbnVtYmVycy4KKwkgKgorCSAqIFRoaXMgc2hvdWxkIHdvcmsgZm9yIEhDTEsgdXAgdG8gMTMzTUh6IGFuZCByZWZyZXNoIHBlcmlvZCB1cAorCSAqIHRvIDMwdXNlYy4KKwkgKi8KKworCXJlZnJlc2ggPSAoY2ZnLT5mcmVxLmhjbGsgLyAxMDApICogKGJvYXJkLT5yZWZyZXNoIC8gMTApOworCXJlZnJlc2ggPSBESVZfUk9VTkRfVVAocmVmcmVzaCwgKDEwMDAgKiAxMDAwKSk7IC8qIGFwcGx5IHNjYWxlICAqLworCXJlZnJlc2ggPSAoMSA8PCAxMSkgKyAxIC0gcmVmcmVzaDsKKworCXMzY19mcmVxX2RiZygiJXM6IHJlZnJlc2ggdmFsdWUgJWx1XG4iLCBfX2Z1bmNfXywgcmVmcmVzaCk7CisKKwlyZWZ2YWwgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1JFRlJFU0gpOworCXJlZnZhbCAmPSB+KCgxIDw8IDEyKSAtIDEpOworCXJlZnZhbCB8PSByZWZyZXNoOworCV9fcmF3X3dyaXRlbChyZWZ2YWwsIFMzQzI0MTBfUkVGUkVTSCk7Cit9CisKKy8qKgorICogczNjMjQxMF9zZXRfZnZjbyAtIHNldCB0aGUgUExMIHZhbHVlCisgKiBAY2ZnOiBUaGUgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24KKyAqLwordm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwlfX3Jhd193cml0ZWwoY2ZnLT5wbGwuaW5kZXgsIFMzQzI0MTBfTVBMTENPTik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMC1pb3RpbWluZy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAtaW90aW1pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGEzYTE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAtaW90aW1pbmcuYwpAQCAtMCwwICsxLDQ3NyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTAtaW90aW1pbmcuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA4LDIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0WFggQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIC0gSU8gdGltaW5nIGZvciBTM0MyNDEwL1MzQzI0NDAvUzNDMjQ0MgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKKyNkZWZpbmUgcHJpbnRfbnMoeCkgKCh4KSAvIDEwKSwgKCh4KSAlIDEwKQorCisvKioKKyAqIHMzYzI0MTBfcHJpbnRfdGltaW5nIC0gcHJpbnQgYmFuayB0aW1pbmcgZGF0YSBmb3IgZGVidWcgcHVycG9zZXMKKyAqIEBwZng6IFRoZSBwcmVmaXggdG8gcHV0IG9uIHRoZSBvdXRwdXQKKyAqIEB0aW1pbmdzOiBUaGUgdGltaW5nIGluZm9yYW10aW9uIHRvIHByaW50LgorKi8KK3N0YXRpYyB2b2lkIHMzYzI0MTBfcHJpbnRfdGltaW5nKGNvbnN0IGNoYXIgKnBmeCwKKwkJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKnRpbWluZ3MpCit7CisJc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAqYnQ7CisJaW50IGJhbms7CisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTUFYX0JBTktTOyBiYW5rKyspIHsKKwkJYnQgPSB0aW1pbmdzLT5iYW5rW2JhbmtdLmlvXzI0MTA7CisJCWlmICghYnQpCisJCQljb250aW51ZTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgJWQ6IFRhY3M9JWQuJWQsIFRjb3M9JWQuJWQsIFRhY2M9JWQuJWQsICIKKwkJICAgICAgICJUY29oPSVkLiVkLCBUY2FoPSVkLiVkXG4iLCBwZngsIGJhbmssCisJCSAgICAgICBwcmludF9ucyhidC0+dGFjcyksCisJCSAgICAgICBwcmludF9ucyhidC0+dGNvcyksCisJCSAgICAgICBwcmludF9ucyhidC0+dGFjYyksCisJCSAgICAgICBwcmludF9ucyhidC0+dGNvaCksCisJCSAgICAgICBwcmludF9ucyhidC0+dGNhaCkpOworCX0KK30KKworLyoqCisgKiBiYW5rX3JlZyAtIGNvbnZlcnQgYmFuayBudW1iZXIgdG8gcG9pbnRlciB0byB0aGUgY29udHJvbCByZWdpc3Rlci4KKyAqIEBiYW5rOiBUaGUgSU8gYmFuayBudW1iZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpiYW5rX3JlZyh1bnNpZ25lZCBpbnQgYmFuaykKK3sKKwlyZXR1cm4gUzNDMjQxMF9CQU5LQ09OMCArIChiYW5rIDw8IDIpOworfQorCisvKioKKyAqIGJhbmtfaXNfaW8gLSB0ZXN0IHdoZXRoZXIgYmFuayBpcyB1c2VkIGZvciBJTworICogQGJhbmtjb246IFRoZSBiYW5rIGNvbnRyb2wgcmVnaXN0ZXIuCisgKgorICogVGhpcyBpcyBhIHNpbXBsaXN0aWMgdGVzdCB0byBzZWUgaWYgYW55IEJBTktDT05beF0gaXMgbm90IGFuIElPCisgKiBiYW5rLiBJdCBjdXJyZW50bHkgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgd2hldGhlciBCV1NDT04gaGFzCisgKiBhbiBpbGxlZ2FsIHdpZHRoLXNldHRpbmcgaW4gaXQsIG9yIGlmIHRoZSBwaW4gY29ubmVjdGVkIHRvIG5DU1t4XQorICogaXMgYWN0dWFsbHkgYmVpbmcgaGFuZGxlZCBhcyBhIGNoaXAtc2VsZWN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBiYW5rX2lzX2lvKHVuc2lnbmVkIGxvbmcgYmFua2NvbikKK3sKKwlyZXR1cm4gIShiYW5rY29uICYgUzNDMjQxMF9CQU5LQ09OX1NEUkFNKTsKK30KKworLyoqCisgKiB0b19kaXYgLSBjb252ZXJ0IGN5Y2xlIHRpbWUgdG8gZGl2aXNvcgorICogQGN5YzogVGhlIGN5Y2xlIHRpbWUsIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQGhjbGtfdG5zOiBUaGUgY3ljbGUgdGltZSBmb3IgSENMSywgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKgorICogQ29udmVydCB0aGUgZ2l2ZW4gY3ljbGUgdGltZSBpbnRvIHRoZSBkaXZpc29yIHRvIHVzZSB0byBvYnRhaW4gaXQgZnJvbQorICogSENMSy4KKyovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0b19kaXYodW5zaWduZWQgaW50IGN5YywgdW5zaWduZWQgaW50IGhjbGtfdG5zKQoreworCWlmIChjeWMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGN5YywgaGNsa190bnMpOworfQorCisvKioKKyAqIGNhbGNfMDEyNCAtIGNhbGN1bGF0ZSBkaXZpc29yIGNvbnRyb2wgZm9yIGRpdmlzb3JzIHRoYXQgZG8gLzAsIC8xLiAvMiBhbmQgLzQKKyAqIEBjeWM6IFRoZSBjeWNsZSB0aW1lLCBpbiAxMHRocyBvZiBuYW5vc2Vjb25kcy4KKyAqIEBoY2xrX3RuczogVGhlIGN5Y2xlIHRpbWUgZm9yIEhDTEssIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQHY6IFBvaW50ZXIgdG8gcmVnaXN0ZXIgdG8gYWx0ZXIuCisgKiBAc2hpZnQ6IFRoZSBzaGlmdCB0byBnZXQgdG8gdGhlIGNvbnRyb2wgYml0cy4KKyAqCisgKiBDYWxjdWxhdGUgdGhlIGRpdmlzb3IsIGFuZCB0dXJuIGl0IGludG8gdGhlIGNvcnJlY3QgY29udHJvbCBiaXRzIHRvCisgKiBzZXQgaW4gdGhlIHJlc3VsdCwgQHYuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY18wMTI0KHVuc2lnbmVkIGludCBjeWMsIHVuc2lnbmVkIGxvbmcgaGNsa190bnMsCisJCQkgICAgICB1bnNpZ25lZCBsb25nICp2LCBpbnQgc2hpZnQpCit7CisJdW5zaWduZWQgaW50IGRpdiA9IHRvX2RpdihjeWMsIGhjbGtfdG5zKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXMzY19mcmVxX2lvZGJnKCIlczogY3ljPSVkLCBoY2xrPSVsdSwgc2hpZnQ9JWQgPT4gZGl2ICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIGN5YywgaGNsa190bnMsIHNoaWZ0LCBkaXYpOworCisJc3dpdGNoIChkaXYpIHsKKwljYXNlIDA6CisJCXZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSAyOworCQlicmVhazsKKwljYXNlIDM6CisJY2FzZSA0OgorCQl2YWwgPSAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCisJKnYgfD0gdmFsIDw8IHNoaWZ0OworCXJldHVybiAwOworfQorCitpbnQgY2FsY190YWNwKHVuc2lnbmVkIGludCBjeWMsIHVuc2lnbmVkIGxvbmcgaGNsaywgdW5zaWduZWQgbG9uZyAqdikKK3sKKwkvKiBDdXJyZW50bHkgbm8gc3VwcG9ydCBmb3IgVGFjcCBjYWxjdWxhdGlvbnMuICovCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY2FsY190YWNjIC0gY2FsY3VsYXRlIGRpdmlzb3IgY29udHJvbCBmb3IgdGFjYy4KKyAqIEBjeWM6IFRoZSBjeWNsZSB0aW1lLCBpbiAxMHRocyBvZiBuYW5vc2Vjb25kcy4KKyAqIEBud2FpdF9lbjogSVMgbldBSVQgZW5hYmxlZCBmb3IgdGhpcyBiYW5rLgorICogQGhjbGtfdG5zOiBUaGUgY3ljbGUgdGltZSBmb3IgSENMSywgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKiBAdjogUG9pbnRlciB0byByZWdpc3RlciB0byBhbHRlci4KKyAqCisgKiBDYWxjdWxhdGUgdGhlIGRpdmlzb3IgY29udHJvbCBmb3IgdEFDQywgdGFraW5nIGludG8gYWNjb3VudCB3aGV0aGVyCisgKiB0aGUgYmFuayBoYXMgbldBSVQgZW5hYmxlZC4gVGhlIHJlc3VsdCBpcyB1c2VkIHRvIG1vZGlmeSB0aGUgdmFsdWUKKyAqIHBvaW50ZWQgdG8gYnkgQHYuCisqLworc3RhdGljIGludCBjYWxjX3RhY2ModW5zaWduZWQgaW50IGN5YywgaW50IG53YWl0X2VuLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgaGNsa190bnMsIHVuc2lnbmVkIGxvbmcgKnYpCit7CisJdW5zaWduZWQgaW50IGRpdiA9IHRvX2RpdihjeWMsIGhjbGtfdG5zKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXMzY19mcmVxX2lvZGJnKCIlczogY3ljPSV1LCBud2FpdD0lZCwgaGNsaz0lbHUgPT4gZGl2PSV1XG4iLAorCQkgICAgICAgX19mdW5jX18sIGN5YywgbndhaXRfZW4sIGhjbGtfdG5zLCBkaXYpOworCisJLyogaWYgbldhaXQgZW5hYmxlZCBvbiBhbiBiYW5rLCBUYWNjIG11c3QgYmUgYXQtbGVhc3QgNCBjeWNsZXMuICovCisJaWYgKG53YWl0X2VuICYmIGRpdiA8IDQpCisJCWRpdiA9IDQ7CisKKwlzd2l0Y2ggKGRpdikgeworCWNhc2UgMDoKKwkJdmFsID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgMzoKKwljYXNlIDQ6CisJCXZhbCA9IGRpdiAtIDE7CisJCWJyZWFrOworCisJY2FzZSA1OgorCWNhc2UgNjoKKwkJdmFsID0gNDsKKwkJYnJlYWs7CisKKwljYXNlIDc6CisJY2FzZSA4OgorCQl2YWwgPSA1OworCQlicmVhazsKKworCWNhc2UgOToKKwljYXNlIDEwOgorCQl2YWwgPSA2OworCQlicmVhazsKKworCWNhc2UgMTE6CisJY2FzZSAxMjoKKwljYXNlIDEzOgorCWNhc2UgMTQ6CisJCXZhbCA9IDc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKworCSp2IHw9IHZhbCA8PCA4OworCXJldHVybiAwOworfQorCisvKioKKyAqIHMzYzI0MTBfY2FsY19iYW5rIC0gY2FsY3VsYXRlIGJhbmsgdGltaW5nIGluZnJvbWF0aW9uCisgKiBAY2ZnOiBUaGUgY29uZmlndXJhdGlvbiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBmb3IuCisgKiBAYnQ6IFRoZSBiYW5rIHRpbWluZyBpbmZvcm1hdGlvbi4KKyAqCisgKiBHaXZlbiB0aGUgY3ljbGUgdGltaW5lIGZvciBhIGJhbmsgQGJ0LCBjYWxjdWxhdGUgdGhlIG5ldyBCQU5LQ09OCisgKiBzZXR0aW5nIGZvciB0aGUgQGNmZyB0aW1pbmcuIFRoaXMgdXBkYXRlcyB0aGUgdGltaW5nIGluZm9ybWF0aW9uCisgKiByZWFkeSBmb3IgdGhlIGNwdSBmcmVxdWVuY3kgY2hhbmdlLgorICovCitzdGF0aWMgaW50IHMzYzI0MTBfY2FsY19iYW5rKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSAgICAgc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAqYnQpCit7CisJdW5zaWduZWQgbG9uZyBoY2xrID0gY2ZnLT5mcmVxLmhjbGtfdG5zOworCXVuc2lnbmVkIGxvbmcgcmVzOworCWludCByZXQ7CisKKwlyZXMgID0gYnQtPmJhbmtjb247CisJcmVzICY9IChTM0MyNDEwX0JBTktDT05fU0RSQU0gfCBTM0MyNDEwX0JBTktDT05fUE1DMTYpOworCisJLyogdGFjcDogMiwzLDQsNSAqLworCS8qIHRjYWg6IDAsMSwyLDQgKi8KKwkvKiB0Y29oOiAwLDEsMiw0ICovCisJLyogdGFjYzogMSwyLDMsNCw2LDcsMTAsMTQgKD40IGZvciBud2FpdCkgKi8KKwkvKiB0Y29zOiAwLDEsMiw0ICovCisJLyogdGFjczogMCwxLDIsNCAqLworCisJcmV0ICA9IGNhbGNfMDEyNChidC0+dGFjcywgaGNsaywgJnJlcywgUzNDMjQxMF9CQU5LQ09OX1RhY3NfU0hJRlQpOworCXJldCB8PSBjYWxjXzAxMjQoYnQtPnRjb3MsIGhjbGssICZyZXMsIFMzQzI0MTBfQkFOS0NPTl9UY29zX1NISUZUKTsKKwlyZXQgfD0gY2FsY18wMTI0KGJ0LT50Y2FoLCBoY2xrLCAmcmVzLCBTM0MyNDEwX0JBTktDT05fVGNhaF9TSElGVCk7CisJcmV0IHw9IGNhbGNfMDEyNChidC0+dGNvaCwgaGNsaywgJnJlcywgUzNDMjQxMF9CQU5LQ09OX1Rjb2hfU0hJRlQpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgfD0gY2FsY190YWNwKGJ0LT50YWNwLCBoY2xrLCAmcmVzKTsKKwlyZXQgfD0gY2FsY190YWNjKGJ0LT50YWNjLCBidC0+bndhaXRfZW4sIGhjbGssICZyZXMpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidC0+YmFua2NvbiA9IHJlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB0YWNjX3RhYltdID0geworCVswXQk9IDEsCisJWzFdCT0gMiwKKwlbMl0JPSAzLAorCVszXQk9IDQsCisJWzRdCT0gNiwKKwlbNV0JPSA5LAorCVs2XQk9IDEwLAorCVs3XQk9IDE0LAorfTsKKworLyoqCisgKiBnZXRfdGFjYyAtIHR1cm4gdEFDQyB2YWx1ZSBpbnRvIGN5Y2xlIHRpbWUKKyAqIEBoY2xrX3RuczogVGhlIGN5Y2xlIHRpbWUgZm9yIEhDTEssIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQHZhbDogVGhlIGJhbmsgdGltaW5nIHJlZ2lzdGVyIHZhbHVlLCBzaGlmZWQgZG93bi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdGFjYyh1bnNpZ25lZCBsb25nIGhjbGtfdG5zLAorCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl2YWwgJj0gNzsKKwlyZXR1cm4gaGNsa190bnMgKiB0YWNjX3RhYlt2YWxdOworfQorCisvKioKKyAqIGdldF8wMTI0IC0gdHVybiAwLzEvMi80IGRpdmlkZXIgaW50byBjeWNsZSB0aW1lCisgKiBAaGNsa190bnM6IFRoZSBjeWNsZSB0aW1lIGZvciBIQ0xLLCBpbiAxMHRocyBvZiBuYW5vc2Vjb25kcy4KKyAqIEB2YWw6IFRoZSBiYW5rIHRpbWluZyByZWdpc3RlciB2YWx1ZSwgc2hpZmVkIGRvd24uCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0XzAxMjQodW5zaWduZWQgbG9uZyBoY2xrX3RucywKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdmFsICY9IDM7CisJcmV0dXJuIGhjbGtfdG5zICogKCh2YWwgPT0gMykgPyA0IDogdmFsKTsKK30KKworLyoqCisgKiBzM2MyNDEwX2lvdGltaW5nX2dldGJhbmsgLSB0dXJuIEJBTktDT04gaW50byBjeWNsZSB0aW1lIGluZm9ybWF0aW9uCisgKiBAY2ZnOiBUaGUgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24KKyAqIEBidDogVGhlIGJhbmsgdGltaW5nIHRvIGZpbGwgaW4gKHVzZXMgY2FjaGVkIEJBTktDT04pCisgKgorICogR2l2ZW4gdGhlIEJBTktDT04gc2V0dGluZyBpbiBAYnQgYW5kIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBzZXR0aW5ncworICogaW4gQGNmZywgdXBkYXRlIHRoZSBjeWNsZSB0aW1pbmcgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQgczNjMjQxMF9pb3RpbWluZ19nZXRiYW5rKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSAgICAgIHN0cnVjdCBzM2MyNDEwX2lvYmFua190aW1pbmcgKmJ0KQoreworCXVuc2lnbmVkIGxvbmcgYmFua2NvbiA9IGJ0LT5iYW5rY29uOworCXVuc2lnbmVkIGxvbmcgaGNsayA9IGNmZy0+ZnJlcS5oY2xrX3RuczsKKworCWJ0LT50Y2FoID0gZ2V0XzAxMjQoaGNsaywgYmFua2NvbiA+PiBTM0MyNDEwX0JBTktDT05fVGNhaF9TSElGVCk7CisJYnQtPnRjb2ggPSBnZXRfMDEyNChoY2xrLCBiYW5rY29uID4+IFMzQzI0MTBfQkFOS0NPTl9UY29oX1NISUZUKTsKKwlidC0+dGNvcyA9IGdldF8wMTI0KGhjbGssIGJhbmtjb24gPj4gUzNDMjQxMF9CQU5LQ09OX1Rjb3NfU0hJRlQpOworCWJ0LT50YWNzID0gZ2V0XzAxMjQoaGNsaywgYmFua2NvbiA+PiBTM0MyNDEwX0JBTktDT05fVGFjc19TSElGVCk7CisJYnQtPnRhY2MgPSBnZXRfdGFjYyhoY2xrLCBiYW5rY29uID4+IFMzQzI0MTBfQkFOS0NPTl9UYWNjX1NISUZUKTsKK30KKworLyoqCisgKiBzM2MyNDEwX2lvdGltaW5nX2RlYnVnZnMgLSBkZWJ1Z2ZzIHNob3cgaW8gYmFuayB0aW1pbmcgaW5mb3JtYXRpb24KKyAqIEBzZXE6IFRoZSBzZXFfZmlsZSB0byB3cml0ZSBvdXRwdXQgdG8gdXNpbmcgc2VxX3ByaW50ZigpLgorICogQGNmZzogVGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAqIEBpb2I6IFRoZSBJTyBiYW5rIGluZm9ybWF0aW9uIHRvIGRlY29kZS4KKyAqLwordm9pZCBzM2MyNDEwX2lvdGltaW5nX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkgICAgICBzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkgICAgICB1bmlvbiBzM2NfaW9iYW5rICppb2IpCit7CisJc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAqYnQgPSBpb2ItPmlvXzI0MTA7CisJdW5zaWduZWQgbG9uZyBiYW5rY29uID0gYnQtPmJhbmtjb247CisJdW5zaWduZWQgbG9uZyBoY2xrID0gY2ZnLT5mcmVxLmhjbGtfdG5zOworCXVuc2lnbmVkIGludCB0YWNzOworCXVuc2lnbmVkIGludCB0Y29zOworCXVuc2lnbmVkIGludCB0YWNjOworCXVuc2lnbmVkIGludCB0Y29oOworCXVuc2lnbmVkIGludCB0Y2FoOworCisJc2VxX3ByaW50ZihzZXEsICJCQU5LQ09OPTB4JTA4bHhcbiIsIGJhbmtjb24pOworCisJdGNhaCA9IGdldF8wMTI0KGhjbGssIGJhbmtjb24gPj4gUzNDMjQxMF9CQU5LQ09OX1RjYWhfU0hJRlQpOworCXRjb2ggPSBnZXRfMDEyNChoY2xrLCBiYW5rY29uID4+IFMzQzI0MTBfQkFOS0NPTl9UY29oX1NISUZUKTsKKwl0Y29zID0gZ2V0XzAxMjQoaGNsaywgYmFua2NvbiA+PiBTM0MyNDEwX0JBTktDT05fVGNvc19TSElGVCk7CisJdGFjcyA9IGdldF8wMTI0KGhjbGssIGJhbmtjb24gPj4gUzNDMjQxMF9CQU5LQ09OX1RhY3NfU0hJRlQpOworCXRhY2MgPSBnZXRfdGFjYyhoY2xrLCBiYW5rY29uID4+IFMzQzI0MTBfQkFOS0NPTl9UYWNjX1NISUZUKTsKKworCXNlcV9wcmludGYoc2VxLAorCQkgICAiXHRSZWFkOiBUYWNzPSVkLiVkLCBUY29zPSVkLiVkLCBUYWNjPSVkLiVkLCBUY29oPSVkLiVkLCBUY2FoPSVkLiVkXG4iLAorCQkgICBwcmludF9ucyhidC0+dGFjcyksCisJCSAgIHByaW50X25zKGJ0LT50Y29zKSwKKwkJICAgcHJpbnRfbnMoYnQtPnRhY2MpLAorCQkgICBwcmludF9ucyhidC0+dGNvaCksCisJCSAgIHByaW50X25zKGJ0LT50Y2FoKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwKKwkJICAgIlx0IFNldDogVGFjcz0lZC4lZCwgVGNvcz0lZC4lZCwgVGFjYz0lZC4lZCwgVGNvaD0lZC4lZCwgVGNhaD0lZC4lZFxuIiwKKwkJICAgcHJpbnRfbnModGFjcyksCisJCSAgIHByaW50X25zKHRjb3MpLAorCQkgICBwcmludF9ucyh0YWNjKSwKKwkJICAgcHJpbnRfbnModGNvaCksCisJCSAgIHByaW50X25zKHRjYWgpKTsKK30KKworLyoqCisgKiBzM2MyNDEwX2lvdGltaW5nX2NhbGMgLSBDYWxjdWxhdGUgYmFuayB0aW1pbmcgZm9yIGZyZXF1ZW5jeSBjaGFuZ2UuCisgKiBAY2ZnOiBUaGUgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24KKyAqIEBpb3Q6IFRoZSBJTyB0aW1pbmcgaW5mb3JtYXRpb24gdG8gZmlsbCBvdXQuCisgKgorICogQ2FsY3VsYXRlIHRoZSBuZXcgdmFsdWVzIGZvciB0aGUgYmFua3MgaW4gQGlvdCBiYXNlZCBvbiB0aGUgbmV3CisgKiBmcmVxdWVuY3kgaW5mb3JtYXRpb24gaW4gQGNmZy4gVGhpcyBpcyB0aGVuIHVzZWQgYnkgczNjMjQxMF9pb3RpbWluZ19zZXQoKQorICogdG8gdXBkYXRlIHRoZSB0aW1pbmcgd2hlbiBuZWNlc3NhcnkuCisgKi8KK2ludCBzM2MyNDEwX2lvdGltaW5nX2NhbGMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJICBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KQoreworCXN0cnVjdCBzM2MyNDEwX2lvYmFua190aW1pbmcgKmJ0OworCXVuc2lnbmVkIGxvbmcgYmFua2NvbjsKKwlpbnQgYmFuazsKKwlpbnQgcmV0OworCisJZm9yIChiYW5rID0gMDsgYmFuayA8IE1BWF9CQU5LUzsgYmFuaysrKSB7CisJCWJhbmtjb24gPSBfX3Jhd19yZWFkbChiYW5rX3JlZyhiYW5rKSk7CisJCWJ0ID0gaW90LT5iYW5rW2JhbmtdLmlvXzI0MTA7CisKKwkJaWYgKCFidCkKKwkJCWNvbnRpbnVlOworCisJCWJ0LT5iYW5rY29uID0gYmFua2NvbjsKKworCQlyZXQgPSBzM2MyNDEwX2NhbGNfYmFuayhjZmcsIGJ0KTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGNhbGN1bGF0ZSBiYW5rICVkIGlvXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBiYW5rKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJczNjX2ZyZXFfaW9kYmcoIiVzOiBiYW5rICVkOiBjb249JTA4bHhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGJhbmssIGJ0LT5iYW5rY29uKTsKKwl9CisKKwlyZXR1cm4gMDsKKyBlcnI6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzM2MyNDEwX2lvdGltaW5nX3NldCAtIHNldCB0aGUgSU8gdGltaW5ncyBmcm9tIHRoZSBnaXZlbiBzZXR1cC4KKyAqIEBjZmc6IFRoZSBmcmVxdWVuY3kgY29uZmlndXJhdGlvbgorICogQGlvdDogVGhlIElPIHRpbWluZyBpbmZvcm1hdGlvbiB0byB1c2UuCisgKgorICogU2V0IGFsbCB0aGUgY3VycmVudGx5IHVzZWQgSU8gYmFuayB0aW1pbmcgaW5mb3JtYXRpb24gZ2VuZXJhdGVkCisgKiBieSBzM2MyNDEwX2lvdGltaW5nX2NhbGMoKSBvbmNlIHRoZSBjb3JlIGhhcyB2YWxpZGF0ZWQgdGhhdCBhbGwKKyAqIHRoZSBuZXcgdmFsdWVzIGFyZSB3aXRoaW4gcGVybWl0dGVkIGJvdW5kcy4KKyAqLwordm9pZCBzM2MyNDEwX2lvdGltaW5nX3NldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkgIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpCit7CisJc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAqYnQ7CisJaW50IGJhbms7CisKKwkvKiBzZXQgdGhlIGlvIHRpbWluZ3MgZnJvbSB0aGUgc3BlY2lmaWVyICovCisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTUFYX0JBTktTOyBiYW5rKyspIHsKKwkJYnQgPSBpb3QtPmJhbmtbYmFua10uaW9fMjQxMDsKKwkJaWYgKCFidCkKKwkJCWNvbnRpbnVlOworCisJCV9fcmF3X3dyaXRlbChidC0+YmFua2NvbiwgYmFua19yZWcoYmFuaykpOworCX0KK30KKworLyoqCisgKiBzM2MyNDEwX2lvdGltaW5nX2dldCAtIEdldCB0aGUgdGltaW5nIGluZm9ybWF0aW9uIGZyb20gY3VycmVudCByZWdpc3RlcnMuCisgKiBAY2ZnOiBUaGUgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24KKyAqIEB0aW1pbmdzOiBUaGUgSU8gdGltaW5nIGluZm9ybWF0aW9uIHRvIGZpbGwgb3V0LgorICoKKyAqIENhbGN1bGF0ZSB0aGUgQHRpbWluZ3MgdGltaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGN1cnJlbnQgZnJlcXVlbmN5CisgKiBpbmZvcm1hdGlvbiBpbiBAY2ZnLCBhbmQgdGhlIG5ldyBmcmVxdWVuY3kgY29uZmlndXIKKyAqIHRocm91Z2ggYWxsIHRoZSBJTyBiYW5rcywgcmVhZGluZyB0aGUgc3RhdGUgYW5kIHRoZW4gdXBkYXRpbmcgQGlvdAorICogYXMgbmVjZXNzYXJ5LgorICoKKyAqIFRoaXMgaXMgdXNlZCBhdCB0aGUgbW9tZW50IG9uIGluaXRpYWxpc2F0aW9uIHRvIGdldCB0aGUgY3VycmVudAorICogY29uZmlndXJhdGlvbiBzbyB0aGF0IGJvYXJkcyBkbyBub3QgaGF2ZSB0byBjYXJyeSB0aGVpciBvd24gc2V0dXAKKyAqIGlmIHRoZSB0aW1pbmdzIGFyZSBjb3JyZWN0IG9uIGluaXRpYWxpc2F0aW9uLgorICovCisKK2ludCBzM2MyNDEwX2lvdGltaW5nX2dldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkgc3RydWN0IHMzY19pb3RpbWluZ3MgKnRpbWluZ3MpCit7CisJc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyAqYnQ7CisJdW5zaWduZWQgbG9uZyBiYW5rY29uOworCXVuc2lnbmVkIGxvbmcgYndzY29uOworCWludCBiYW5rOworCisJYndzY29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9CV1NDT04pOworCisJLyogbG9vayB0aHJvdWdoIGFsbCBiYW5rcyB0byBzZWUgd2hhdCBpcyBjdXJyZW50bHkgc2V0LiAqLworCisJZm9yIChiYW5rID0gMDsgYmFuayA8IE1BWF9CQU5LUzsgYmFuaysrKSB7CisJCWJhbmtjb24gPSBfX3Jhd19yZWFkbChiYW5rX3JlZyhiYW5rKSk7CisKKwkJaWYgKCFiYW5rX2lzX2lvKGJhbmtjb24pKQorCQkJY29udGludWU7CisKKwkJczNjX2ZyZXFfaW9kYmcoIiVzOiBiYW5rICVkOiBjb24gJTA4bHhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGJhbmssIGJhbmtjb24pOworCisJCWJ0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0MTBfaW9iYW5rX3RpbWluZyksIEdGUF9LRVJORUwpOworCQlpZiAoIWJ0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGJhbmtcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyogZmluZCBvdXQgaW4gbldhaXQgaXMgZW5hYmxlZCBmb3IgYmFuay4gKi8KKworCQlpZiAoYmFuayAhPSAwKSB7CisJCQl1bnNpZ25lZCBsb25nIHRtcCAgPSBTM0MyNDEwX0JXU0NPTl9HRVQoYndzY29uLCBiYW5rKTsKKwkJCWlmICh0bXAgJiBTM0MyNDEwX0JXU0NPTl9XUykKKwkJCQlidC0+bndhaXRfZW4gPSAxOworCQl9CisKKwkJdGltaW5ncy0+YmFua1tiYW5rXS5pb18yNDEwID0gYnQ7CisJCWJ0LT5iYW5rY29uID0gYmFua2NvbjsKKworCQlzM2MyNDEwX2lvdGltaW5nX2dldGJhbmsoY2ZnLCBidCk7CisJfQorCisJczNjMjQxMF9wcmludF90aW1pbmcoImdldCIsIHRpbWluZ3MpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0MTItaW90aW1pbmcuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDEyLWlvdGltaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NWU0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMi1pb3RpbWluZy5jCkBAIC0wLDAgKzEsMjg1IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQxMi1pb3RpbWluZy5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTIvUzNDMjQ0MyAoUEwwOTMgYmFzZWQpIElPIHRpbWluZyBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwOTMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDEyLW1lbS5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNkZWZpbmUgcHJpbnRfbnMoeCkgKCh4KSAvIDEwKSwgKCh4KSAlIDEwKQorCisvKioKKyAqIHMzYzI0MTJfcHJpbnRfdGltaW5nIC0gcHJpbnQgdGltaW5nIGluZnJvbWF0aW9uIHZpYSBwcmludGsuCisgKiBAcGZ4OiBUaGUgcHJlZml4IHRvIHByaW50IGVhY2ggbGluZSB3aXRoLgorICogQGlvdDogVGhlIElPIHRpbWluZyBpbmZvcm1hdGlvbgorICovCitzdGF0aWMgdm9pZCBzM2MyNDEyX3ByaW50X3RpbWluZyhjb25zdCBjaGFyICpwZngsIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpCit7CisJc3RydWN0IHMzYzI0MTJfaW9iYW5rX3RpbWluZyAqYnQ7CisJdW5zaWduZWQgaW50IGJhbms7CisKKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTUFYX0JBTktTOyBiYW5rKyspIHsKKwkJYnQgPSBpb3QtPmJhbmtbYmFua10uaW9fMjQxMjsKKwkJaWYgKCFidCkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogJWQ6IGlkY3k9JWQuJWQgd3N0cmQ9JWQuJWQgd3N0d3I9JWQsJWQiCisJCSAgICAgICAid3N0b2VuPSVkLiVkIHdzdHdlbj0lZC4lZCB3c3RicmQ9JWQuJWRcbiIsIHBmeCwgYmFuaywKKwkJICAgICAgIHByaW50X25zKGJ0LT5pZGN5KSwKKwkJICAgICAgIHByaW50X25zKGJ0LT53c3RyZCksCisJCSAgICAgICBwcmludF9ucyhidC0+d3N0d3IpLAorCQkgICAgICAgcHJpbnRfbnMoYnQtPndzdG9lbiksCisJCSAgICAgICBwcmludF9ucyhidC0+d3N0d2VuKSwKKwkJICAgICAgIHByaW50X25zKGJ0LT53c3RicmQpKTsKKwl9Cit9CisKKy8qKgorICogdG9fZGl2IC0gdHVybiBhIGN5Y2xlIGxlbmd0aCBpbnRvIGEgZGl2aXNvciBzZXR0aW5nLgorICogQGN5Y190bnM6IFRoZSBjeWNsZSB0aW1lIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQGNsa190bnM6IFRoZSBjbG9jayBwZXJpb2QgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRvX2Rpdih1bnNpZ25lZCBpbnQgY3ljX3RucywgdW5zaWduZWQgaW50IGNsa190bnMpCit7CisJcmV0dXJuIGN5Y190bnMgPyBESVZfUk9VTkRfVVAoY3ljX3RucywgY2xrX3RucykgOiAwOworfQorCisvKioKKyAqIGNhbGNfdGltaW5nIC0gY2FsY3VsYXRlIHRpbWluZyBkaXZpc29yIHZhbHVlIGFuZCBjaGVjayBpbiByYW5nZS4KKyAqIEBod3RtOiBUaGUgaGFyZHdhcmUgdGltaW5nIGluIDEwdGhzIG9mIG5hbm9zZWNvbmRzLgorICogQGNsa190bnM6IFRoZSBjbG9jayBwZXJpb2QgaW4gMTB0aHMgb2YgbmFub3NlY29uZHMuCisgKiBAZXJyOiBQb2ludGVyIHRvIGVyciB2YXJpYWJsZSB0byB1cGRhdGUgaW4gZXZlbnQgb2YgZmFpbHVyZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3RpbWluZyh1bnNpZ25lZCBpbnQgaHd0bSwgdW5zaWduZWQgaW50IGNsa190bnMsCisJCQkJdW5zaWduZWQgaW50ICplcnIpCit7CisJdW5zaWduZWQgaW50IHJldCA9IHRvX2Rpdihod3RtLCBjbGtfdG5zKTsKKworCWlmIChyZXQgPiAweGYpCisJCSplcnIgPSAtRUlOVkFMOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzM2MyNDEyX2NhbGNfYmFuayAtIGNhbGN1bGF0ZSB0aGUgYmFuayBkaXZpc29yIHNldHRpbmdzLgorICogQGNmZzogVGhlIGN1cnJlbnQgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24uCisgKiBAYnQ6IFRoZSBiYW5rIHRpbWluZy4KKyAqLworc3RhdGljIGludCBzM2MyNDEyX2NhbGNfYmFuayhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkgICAgIHN0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcgKmJ0KQoreworCXVuc2lnbmVkIGludCBoY2xrID0gY2ZnLT5mcmVxLmhjbGtfdG5zOworCWludCBlcnIgPSAwOworCisJYnQtPnNtYmlkY3lyID0gY2FsY190aW1pbmcoYnQtPmlkY3ksIGhjbGssICZlcnIpOworCWJ0LT5zbWJ3c3RyZCA9IGNhbGNfdGltaW5nKGJ0LT53c3RyZCwgaGNsaywgJmVycik7CisJYnQtPnNtYndzdHdyID0gY2FsY190aW1pbmcoYnQtPndzdHdyLCBoY2xrLCAmZXJyKTsKKwlidC0+c21id3N0b2VuID0gY2FsY190aW1pbmcoYnQtPndzdG9lbiwgaGNsaywgJmVycik7CisJYnQtPnNtYndzdHdlbiA9IGNhbGNfdGltaW5nKGJ0LT53c3R3ZW4sIGhjbGssICZlcnIpOworCWJ0LT5zbWJ3c3RicmQgPSBjYWxjX3RpbWluZyhidC0+d3N0YnJkLCBoY2xrLCAmZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogczNjMjQxMl9pb3RpbWluZ19kZWJ1Z2ZzIC0gZGVidWdmcyBzaG93IGlvIGJhbmsgdGltaW5nIGluZm9ybWF0aW9uCisgKiBAc2VxOiBUaGUgc2VxX2ZpbGUgdG8gd3JpdGUgb3V0cHV0IHRvIHVzaW5nIHNlcV9wcmludGYoKS4KKyAqIEBjZmc6IFRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgKiBAaW9iOiBUaGUgSU8gYmFuayBpbmZvcm1hdGlvbiB0byBkZWNvZGUuCisqLwordm9pZCBzM2MyNDEyX2lvdGltaW5nX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkgICAgICBzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkgICAgICB1bmlvbiBzM2NfaW9iYW5rICppb2IpCit7CisJc3RydWN0IHMzYzI0MTJfaW9iYW5rX3RpbWluZyAqYnQgPSBpb2ItPmlvXzI0MTI7CisKKwlzZXFfcHJpbnRmKHNlcSwKKwkJICAgIlx0UmVhZDogaWRjeT0lZC4lZCB3c3RyZD0lZC4lZCB3c3R3cj0lZCwlZCIKKwkJICAgIndzdG9lbj0lZC4lZCB3c3R3ZW49JWQuJWQgd3N0YnJkPSVkLiVkXG4iLAorCQkgICBwcmludF9ucyhidC0+aWRjeSksCisJCSAgIHByaW50X25zKGJ0LT53c3RyZCksCisJCSAgIHByaW50X25zKGJ0LT53c3R3ciksCisJCSAgIHByaW50X25zKGJ0LT53c3RvZW4pLAorCQkgICBwcmludF9ucyhidC0+d3N0d2VuKSwKKwkJICAgcHJpbnRfbnMoYnQtPndzdGJyZCkpOworfQorCisvKioKKyAqIHMzYzI0MTJfaW90aW1pbmdfY2FsYyAtIGNhbGN1bGF0ZSBhbGwgdGhlIGJhbmsgZGl2aXNvciBzZXR0aW5ncy4KKyAqIEBjZmc6IFRoZSBjdXJyZW50IGZyZXF1ZW5jeSBjb25maWd1cmF0aW9uLgorICogQGlvdDogVGhlIGJhbmsgdGltaW5nIGluZm9ybWF0aW9uLgorICoKKyAqIENhbGN1bGF0ZSB0aGUgdGltaW5nIGluZm9ybWF0aW9uIGZvciBhbGwgdGhlIGJhbmtzIHRoYXQgYXJlCisgKiBjb25maWd1cmVkIGFzIElPLCB1c2luZyBzM2MyNDEyX2NhbGNfYmFuaygpLgorICovCitpbnQgczNjMjQxMl9pb3RpbWluZ19jYWxjKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSAgc3RydWN0IHMzY19pb3RpbWluZ3MgKmlvdCkKK3sKKwlzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nICpidDsKKwlpbnQgYmFuazsKKwlpbnQgcmV0OworCisJZm9yIChiYW5rID0gMDsgYmFuayA8IE1BWF9CQU5LUzsgYmFuaysrKSB7CisJCWJ0ID0gaW90LT5iYW5rW2JhbmtdLmlvXzI0MTI7CisJCWlmICghYnQpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBzM2MyNDEyX2NhbGNfYmFuayhjZmcsIGJ0KTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGNhbGN1bGF0ZSBiYW5rICVkIGlvXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBiYW5rKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CisgZXJyOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogczNjMjQxMl9pb3RpbWluZ19zZXQgLSBzZXQgdGhlIHRpbWluZyBpbmZvcm1hdGlvbgorICogQGNmZzogVGhlIGN1cnJlbnQgZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24uCisgKiBAaW90OiBUaGUgYmFuayB0aW1pbmcgaW5mb3JtYXRpb24uCisgKgorICogU2V0IHRoZSBJTyBiYW5rIGluZm9ybWF0aW9uIGZyb20gdGhlIGRldGFpbHMgY2FsY3VsYXRlZCBlYXJsaWVyIGZyb20KKyAqIGNhbGxpbmcgczNjMjQxMl9pb3RpbWluZ19jYWxjKCkuCisgKi8KK3ZvaWQgczNjMjQxMl9pb3RpbWluZ19zZXQoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAorCQkJICBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KQoreworCXN0cnVjdCBzM2MyNDEyX2lvYmFua190aW1pbmcgKmJ0OworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgYmFuazsKKworCS8qIHNldCB0aGUgaW8gdGltaW5ncyBmcm9tIHRoZSBzcGVjaWZpZXIgKi8KKworCWZvciAoYmFuayA9IDA7IGJhbmsgPCBNQVhfQkFOS1M7IGJhbmsrKykgeworCQlidCA9IGlvdC0+YmFua1tiYW5rXS5pb18yNDEyOworCQlpZiAoIWJ0KQorCQkJY29udGludWU7CisKKwkJcmVncyA9IFMzQzI0MTJfU1NNQ19CQU5LKGJhbmspOworCisJCV9fcmF3X3dyaXRlbChidC0+c21iaWRjeXIsIHJlZ3MgKyBTTUJJRENZUik7CisJCV9fcmF3X3dyaXRlbChidC0+c21id3N0cmQsIHJlZ3MgKyBTTUJXU1RSRFIpOworCQlfX3Jhd193cml0ZWwoYnQtPnNtYndzdHdyLCByZWdzICsgU01CV1NUV1JSKTsKKwkJX19yYXdfd3JpdGVsKGJ0LT5zbWJ3c3RvZW4sIHJlZ3MgKyBTTUJXU1RPRU5SKTsKKwkJX19yYXdfd3JpdGVsKGJ0LT5zbWJ3c3R3ZW4sIHJlZ3MgKyBTTUJXU1RXRU5SKTsKKwkJX19yYXdfd3JpdGVsKGJ0LT5zbWJ3c3RicmQsIHJlZ3MgKyBTTUJXU1RCUkRSKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzYzI0MTJfZGVjb2RlX3RpbWluZyh1bnNpZ25lZCBpbnQgY2xvY2ssIHUzMiByZWcpCit7CisJcmV0dXJuIChyZWcgJiAweGYpICogY2xvY2s7Cit9CisKK3N0YXRpYyB2b2lkIHMzYzI0MTJfaW90aW1pbmdfZ2V0YmFuayhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCisJCQkJICAgICBzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nICpidCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBiYW5rKQoreworCXVuc2lnbmVkIGxvbmcgY2xrID0gY2ZnLT5mcmVxLmhjbGtfdG5zOyAgLyogc3NtYyBjbG9jaz8/PyAqLworCXZvaWQgX19pb21lbSAqcmVncyA9IFMzQzI0MTJfU1NNQ19CQU5LKGJhbmspOworCisJYnQtPmlkY3kgPSBzM2MyNDEyX2RlY29kZV90aW1pbmcoY2xrLCBfX3Jhd19yZWFkbChyZWdzICsgU01CSURDWVIpKTsKKwlidC0+d3N0cmQgPSBzM2MyNDEyX2RlY29kZV90aW1pbmcoY2xrLCBfX3Jhd19yZWFkbChyZWdzICsgU01CV1NUUkRSKSk7CisJYnQtPndzdG9lbiA9IHMzYzI0MTJfZGVjb2RlX3RpbWluZyhjbGssIF9fcmF3X3JlYWRsKHJlZ3MgKyBTTUJXU1RPRU5SKSk7CisJYnQtPndzdHdlbiA9IHMzYzI0MTJfZGVjb2RlX3RpbWluZyhjbGssIF9fcmF3X3JlYWRsKHJlZ3MgKyBTTUJXU1RXRU5SKSk7CisJYnQtPndzdGJyZCA9IHMzYzI0MTJfZGVjb2RlX3RpbWluZyhjbGssIF9fcmF3X3JlYWRsKHJlZ3MgKyBTTUJXU1RCUkRSKSk7Cit9CisKKy8qKgorICogYmFua19pc19pbyAtIHJldHVybiB0cnVlIGlmIGJhbmsgaXMgKHBvc3NpYmx5KSBJTy4KKyAqIEBiYW5rOiBUaGUgYmFuayBudW1iZXIuCisgKiBAYmFua2NmZzogVGhlIHZhbHVlIG9mIFMzQzI0MTJfRUJJX0JBTktDRkcuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBiYW5rX2lzX2lvKHVuc2lnbmVkIGludCBiYW5rLCB1MzIgYmFua2NmZykKK3sKKwlpZiAoYmFuayA8IDIpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuICEoYmFua2NmZyAmICgxIDw8IGJhbmspKTsKK30KKworaW50IHMzYzI0MTJfaW90aW1pbmdfZ2V0KHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqdGltaW5ncykKK3sKKwlzdHJ1Y3QgczNjMjQxMl9pb2JhbmtfdGltaW5nICpidDsKKwl1MzIgYmFua2NmZyA9IF9fcmF3X3JlYWRsKFMzQzI0MTJfRUJJX0JBTktDRkcpOworCXVuc2lnbmVkIGludCBiYW5rOworCisJLyogbG9vayB0aHJvdWdoIGFsbCBiYW5rcyB0byBzZWUgd2hhdCBpcyBjdXJyZW50bHkgc2V0LiAqLworCisJZm9yIChiYW5rID0gMDsgYmFuayA8IE1BWF9CQU5LUzsgYmFuaysrKSB7CisJCWlmICghYmFua19pc19pbyhiYW5rLCBiYW5rY2ZnKSkKKwkJCWNvbnRpbnVlOworCisJCWJ0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzYzI0MTJfaW9iYW5rX3RpbWluZyksIEdGUF9LRVJORUwpOworCQlpZiAoIWJ0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGJhbmtcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJdGltaW5ncy0+YmFua1tiYW5rXS5pb18yNDEyID0gYnQ7CisJCXMzYzI0MTJfaW90aW1pbmdfZ2V0YmFuayhjZmcsIGJ0LCBiYW5rKTsKKwl9CisKKwlzM2MyNDEyX3ByaW50X3RpbWluZygiZ2V0IiwgdGltaW5ncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoaXMgaXMgaW4gaGVyZSBhcyBpdCBpcyBzbyBzbWFsbCwgaXQgZG9lc24ndCBjdXJyZW50bHkgd2FycmFudCBhIGZpbGUKKyAqIHRvIGl0c2VsZi4gV2UgZXhwZWN0IHRoYXQgYW55IHMzYzI0eHggbmVlZGluZyB0aGlzIGlzIGdvaW5nIHRvIGFsc28KKyAqIG5lZWQgdGhlIGlvdGltaW5nIHN1cHBvcnQuCisgKi8KK3ZvaWQgczNjMjQxMl9jcHVmcmVxX3NldHJlZnJlc2goc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnKQoreworCXN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCAqYm9hcmQgPSBjZmctPmJvYXJkOworCXUzMiByZWZyZXNoOworCisJV0FSTl9PTihib2FyZCA9PSBOVUxMKTsKKworCS8qIFJlZHVjZSBib3RoIHRoZSByZWZyZXNoIHRpbWUgKGluIG5zKSBhbmQgdGhlIGZyZXF1ZW5jeSAoaW4gTUh6KQorCSAqIGRvd24gdG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90IG92ZXJmbG93IDMyIGJpdCBudW1iZXJzLgorCSAqCisJICogVGhpcyBzaG91bGQgd29yayBmb3IgSENMSyB1cCB0byAxMzNNSHogYW5kIHJlZnJlc2ggcGVyaW9kIHVwCisJICogdG8gMzB1c2VjLgorCSAqLworCisJcmVmcmVzaCA9IChjZmctPmZyZXEuaGNsayAvIDEwMCkgKiAoYm9hcmQtPnJlZnJlc2ggLyAxMCk7CisJcmVmcmVzaCA9IERJVl9ST1VORF9VUChyZWZyZXNoLCAoMTAwMCAqIDEwMDApKTsgLyogYXBwbHkgc2NhbGUgICovCisJcmVmcmVzaCAmPSAoKDEgPDwgMTYpIC0gMSk7CisKKwlzM2NfZnJlcV9kYmcoIiVzOiByZWZyZXNoIHZhbHVlICV1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGludClyZWZyZXNoKTsKKworCV9fcmF3X3dyaXRlbChyZWZyZXNoLCBTM0MyNDEyX1JFRlJFU0gpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtY3B1ZnJlcS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtY3B1ZnJlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMmU2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1jcHVmcmVxLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLWNwdWZyZXEuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwyMDA4LDIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQ0MC9TM0MyNDQyIENQVSBGcmVxdWVuY3kgc2NhbGluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorCitzdGF0aWMgc3RydWN0IGNsayAqeHRhbDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpmY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKmhjbGs7CitzdGF0aWMgc3RydWN0IGNsayAqYXJtY2xrOworCisvKiBIRElWOiAxLCAyLCAzLCA0LCA2LCA4ICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHdpdGhpbl9raHoodW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpCit7CisJbG9uZyBkaWZmID0gYSAtIGI7CisKKwlyZXR1cm4gKGRpZmYgPj0gLTEwMDAgJiYgZGlmZiA8PSAxMDAwKTsKK30KKworLyoqCisgKiBzM2MyNDQwX2NwdWZyZXFfY2FsY2RpdnMgLSBjYWxjdWxhdGUgZGl2aWRlciBzZXR0aW5ncworICogQGNmZzogVGhlIGNwdSBmcmVxdWVuY3kgc2V0dGluZ3MuCisgKgorICogQ2FsY3VhbHRlIHRoZSBkaXZpZGVyIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGZyZXF1ZW5jeSBzZXR0aW5ncworICogc3BlY2lmaWVkIGluIEBjZmcuIFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBAY2ZnIGZvciBsYXRlciB1c2UKKyAqIGJ5IHRoZSByZWxldmFudCBzZXQgcm91dGluZSBpZiB0aGUgcmVxdWVzdCBzZXR0aW5ncyBjYW4gYmUgcmVhY2hlZC4KKyAqLworaW50IHMzYzI0NDBfY3B1ZnJlcV9jYWxjZGl2cyhzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcpCit7CisJdW5zaWduZWQgaW50IGhkaXYsIHBkaXY7CisJdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBhcm1jbGs7CisJdW5zaWduZWQgbG9uZyBoY2xrX21heDsKKworCWZjbGsgPSBjZmctPmZyZXEuZmNsazsKKwlhcm1jbGsgPSBjZmctPmZyZXEuYXJtY2xrOworCWhjbGtfbWF4ID0gY2ZnLT5tYXguaGNsazsKKworCXMzY19mcmVxX2RiZygiJXM6IGZjbGsgaXMgJWx1LCBhcm1jbGsgJWx1LCBtYXggaGNsayAlbHVcbiIsCisJCSAgICAgX19mdW5jX18sIGZjbGssIGFybWNsaywgaGNsa19tYXgpOworCisJaWYgKGFybWNsayA+IGZjbGspIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGFybWNsayA+IGZjbGtcbiIsIF9fZnVuY19fKTsKKwkJYXJtY2xrID0gZmNsazsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW4gRFZTLCB3ZSBuZWVkIEhDTEsgdG8gYmUgPD0gQVJNQ0xLICovCisJaWYgKGFybWNsayA8IGZjbGsgJiYgYXJtY2xrIDwgaGNsa19tYXgpCisJCWhjbGtfbWF4ID0gYXJtY2xrOworCisJZm9yIChoZGl2ID0gMTsgaGRpdiA8IDk7IGhkaXYrKykgeworCQlpZiAoaGRpdiA9PSA1IHx8IGhkaXYgPT0gNykKKwkJCWhkaXYrKzsKKworCQloY2xrID0gKGZjbGsgLyBoZGl2KTsKKwkJaWYgKGhjbGsgPD0gaGNsa19tYXggfHwgd2l0aGluX2toeihoY2xrLCBoY2xrX21heCkpCisJCQlicmVhazsKKwl9CisKKwlzM2NfZnJlcV9kYmcoIiVzOiBoY2xrICVsdSwgZGl2ICVkXG4iLCBfX2Z1bmNfXywgaGNsaywgaGRpdik7CisKKwlpZiAoaGRpdiA+IDgpCisJCWdvdG8gaW52YWxpZDsKKworCXBkaXYgPSAoaGNsayA+IGNmZy0+bWF4LnBjbGspID8gMiA6IDE7CisKKwlpZiAoKGhjbGsgLyBwZGl2KSA+IGNmZy0+bWF4LnBjbGspCisJCXBkaXYrKzsKKworCXMzY19mcmVxX2RiZygiJXM6IHBkaXYgJWRcbiIsIF9fZnVuY19fLCBwZGl2KTsKKworCWlmIChwZGl2ID4gMikKKwkJZ290byBpbnZhbGlkOworCisJcGRpdiAqPSBoZGl2OworCisJLyogY2FsY3VsYXRlIGEgdmFsaWQgYXJtY2xrICovCisKKwlpZiAoYXJtY2xrIDwgaGNsaykKKwkJYXJtY2xrID0gaGNsazsKKworCS8qIGlmIHdlJ3JlIHJ1bm5pbmcgYXJtY2xrIGxvd2VyIHRoYW4gZmNsaywgdGhpcyByZWFsbHkgbWVhbnMKKwkgKiB0aGF0IHRoZSBzeXN0ZW0gc2hvdWxkIGdvIGludG8gZHZzIG1vZGUsIHdoaWNoIG1lYW5zIHRoYXQKKwkgKiBhcm1jbGsgaXMgY29ubmVjdGVkIHRvIGhjbGsuICovCisJaWYgKGFybWNsayA8IGZjbGspIHsKKwkJY2ZnLT5kaXZzLmR2cyA9IDE7CisJCWFybWNsayA9IGhjbGs7CisJfSBlbHNlCisJCWNmZy0+ZGl2cy5kdnMgPSAwOworCisJY2ZnLT5mcmVxLmFybWNsayA9IGFybWNsazsKKworCS8qIHN0b3JlIHRoZSByZXN1bHQsIGFuZCB0aGVuIHJldHVybiAqLworCisJY2ZnLT5kaXZzLmhfZGl2aXNvciA9IGhkaXY7CisJY2ZnLT5kaXZzLnBfZGl2aXNvciA9IHBkaXY7CisKKwlyZXR1cm4gMDsKKworIGludmFsaWQ6CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNkZWZpbmUgQ0FNRElWTl9IQ0xLX0hBTEYgKFMzQzI0NDBfQ0FNRElWTl9IQ0xLM19IQUxGIHwgXAorCQkJICAgUzNDMjQ0MF9DQU1ESVZOX0hDTEs0X0hBTEYpCisKKy8qKgorICogczNjMjQ0MF9jcHVmcmVxX3NldGRpdnMgLSBzZXQgdGhlIGNwdSBmcmVxdWVuY3kgZGl2aWRlciBzZXR0aW5ncworICogQGNmZzogVGhlIGNwdSBmcmVxdWVuY3kgc2V0dGluZ3MuCisgKgorICogU2V0IHRoZSBkaXZpc29ycyBmcm9tIHRoZSBzZXR0aW5ncyBpbiBAY2ZnLCB3aGljaCB3aGVyZSBnZW5lcmF0ZWQKKyAqIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gcGhhc2UgYnkgczNjMjQ0MF9jcHVmcmVxX2NhbGNkaXZzKCkuCisgKi8KK3N0YXRpYyB2b2lkIHMzYzI0NDBfY3B1ZnJlcV9zZXRkaXZzKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZykKK3sKKwl1bnNpZ25lZCBsb25nIGNsa2RpdiwgY2FtZGl2OworCisJczNjX2ZyZXFfZGJnKCIlczogZGl2c2lvcnM6IGg9JWQsIHA9JWRcbiIsIF9fZnVuY19fLAorCQkgICAgIGNmZy0+ZGl2cy5oX2Rpdmlzb3IsIGNmZy0+ZGl2cy5wX2Rpdmlzb3IpOworCisJY2xrZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKKwljYW1kaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQwX0NBTURJVk4pOworCisJY2xrZGl2ICY9IH4oUzNDMjQ0MF9DTEtESVZOX0hESVZOX01BU0sgfCBTM0MyNDQwX0NMS0RJVk5fUERJVk4pOworCWNhbWRpdiAmPSB+Q0FNRElWTl9IQ0xLX0hBTEY7CisKKwlzd2l0Y2ggKGNmZy0+ZGl2cy5oX2Rpdmlzb3IpIHsKKwljYXNlIDE6CisJCWNsa2RpdiB8PSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMTsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWNsa2RpdiB8PSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMjsKKwkJYnJlYWs7CisKKwljYXNlIDY6CisJCWNhbWRpdiB8PSBTM0MyNDQwX0NBTURJVk5fSENMSzNfSEFMRjsKKwljYXNlIDM6CisJCWNsa2RpdiB8PSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fM182OworCQlicmVhazsKKworCWNhc2UgODoKKwkJY2FtZGl2IHw9IFMzQzI0NDBfQ0FNRElWTl9IQ0xLNF9IQUxGOworCWNhc2UgNDoKKwkJY2xrZGl2IHw9IFMzQzI0NDBfQ0xLRElWTl9IRElWTl80Xzg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CS8qIHdlIGRvbid0IGV4cGVjdCB0byBnZXQgaGVyZS4gKi8KKwl9CisKKwlpZiAoY2ZnLT5kaXZzLnBfZGl2aXNvciAhPSBjZmctPmRpdnMuaF9kaXZpc29yKQorCQljbGtkaXYgfD0gUzNDMjQ0MF9DTEtESVZOX1BESVZOOworCisJLyogdG9kbyAtIHNldCBwY2xrLiAqLworCisJLyogV3JpdGUgdGhlIGRpdmlzb3JzIGZpcnN0IHdpdGggaGNsayBpbnRlbnRpb25hbGx5IGhhbHZlZCBzbyB0aGF0CisJICogd2hlbiB3ZSB3cml0ZSBjbGtkaXYgd2Ugd2lsbCB1bmRlci1mcmVxdWVuY3kgaW5zdGVhZCBvZiBvdmVyLiBXZQorCSAqIHRoZW4gbWFrZSBhIHNob3J0IGRlbGF5IGFuZCByZW1vdmUgdGhlIGhjbGsgaGFsdmluZyBpZiBuZWNlc3NhcnkuCisJICovCisKKwlfX3Jhd193cml0ZWwoY2FtZGl2IHwgQ0FNRElWTl9IQ0xLX0hBTEYsIFMzQzI0NDBfQ0FNRElWTik7CisJX19yYXdfd3JpdGVsKGNsa2RpdiwgUzNDMjQxMF9DTEtESVZOKTsKKworCW5kZWxheSgyMCk7CisJX19yYXdfd3JpdGVsKGNhbWRpdiwgUzNDMjQ0MF9DQU1ESVZOKTsKKworCWNsa19zZXRfcGFyZW50KGFybWNsaywgY2ZnLT5kaXZzLmR2cyA/IGhjbGsgOiBmY2xrKTsKK30KKworc3RhdGljIGludCBydW5fZnJlcV9mb3IodW5zaWduZWQgbG9uZyBtYXhfaGNsaywgdW5zaWduZWQgbG9uZyBmY2xrLAorCQkJaW50ICpkaXZzLAorCQkJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICp0YWJsZSwKKwkJCXNpemVfdCB0YWJsZV9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwlpbnQgaW5kZXggPSAwOworCWludCBkaXY7CisKKwlmb3IgKGRpdiA9ICpkaXZzOyBkaXYgPiAwOyBkaXYgPSAqZGl2cysrKSB7CisJCWZyZXEgPSBmY2xrIC8gZGl2OworCisJCWlmIChmcmVxID4gbWF4X2hjbGsgJiYgZGl2ICE9IDEpCisJCQljb250aW51ZTsKKworCQlmcmVxIC89IDEwMDA7IC8qIHRhYmxlIGlzIGluIGtIeiAqLworCQlpbmRleCA9IHMzY19jcHVmcmVxX2FkZGZyZXEodGFibGUsIGluZGV4LCB0YWJsZV9zaXplLCBmcmVxKTsKKwkJaWYgKGluZGV4IDwgMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIGludCBoY2xrX2RpdnNbXSA9IHsgMSwgMiwgMywgNCwgNiwgOCwgLTEgfTsKKworc3RhdGljIGludCBzM2MyNDQwX2NwdWZyZXFfY2FsY3RhYmxlKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZywKKwkJCQkgICAgIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUsCisJCQkJICAgICBzaXplX3QgdGFibGVfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJV0FSTl9PTihjZmctPmluZm8gPT0gTlVMTCk7CisJV0FSTl9PTihjZmctPmJvYXJkID09IE5VTEwpOworCisJcmV0ID0gcnVuX2ZyZXFfZm9yKGNmZy0+aW5mby0+bWF4LmhjbGssCisJCQkgICBjZmctPmluZm8tPm1heC5mY2xrLAorCQkJICAgaGNsa19kaXZzLAorCQkJICAgdGFibGUsIHRhYmxlX3NpemUpOworCisJczNjX2ZyZXFfZGJnKCIlczogcmV0dXJuaW5nICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBzM2NfY3B1ZnJlcV9pbmZvIHMzYzI0NDBfY3B1ZnJlcV9pbmZvID0geworCS5tYXgJCT0geworCQkuZmNsawk9IDQwMDAwMDAwMCwKKwkJLmhjbGsJPSAxMzMzMzMzMzMsCisJCS5wY2xrCT0gIDY2NjY2NjY2LAorCX0sCisKKwkubG9ja3RpbWVfbQk9IDMwMCwKKwkubG9ja3RpbWVfdQk9IDMwMCwKKwkubG9ja3RpbWVfYml0cwk9IDE2LAorCisJLm5hbWUJCT0gInMzYzI0NHgiLAorCS5jYWxjX2lvdGltaW5nCT0gczNjMjQxMF9pb3RpbWluZ19jYWxjLAorCS5zZXRfaW90aW1pbmcJPSBzM2MyNDEwX2lvdGltaW5nX3NldCwKKwkuZ2V0X2lvdGltaW5nCT0gczNjMjQxMF9pb3RpbWluZ19nZXQsCisJLnNldF9mdmNvCT0gczNjMjQxMF9zZXRfZnZjbywKKworCS5zZXRfcmVmcmVzaAk9IHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoLAorCS5zZXRfZGl2cwk9IHMzYzI0NDBfY3B1ZnJlcV9zZXRkaXZzLAorCS5jYWxjX2RpdnMJPSBzM2MyNDQwX2NwdWZyZXFfY2FsY2RpdnMsCisJLmNhbGNfZnJlcXRhYmxlCT0gczNjMjQ0MF9jcHVmcmVxX2NhbGN0YWJsZSwKKworCS5yZXN1bWVfY2xvY2tzCT0gczNjMjQ0eF9zZXR1cF9jbG9ja3MsCisKKwkuZGVidWdfaW9fc2hvdyAgPSBzM2NfY3B1ZnJlcV9kZWJ1Z2ZzX2NhbGwoczNjMjQxMF9pb3RpbWluZ19kZWJ1Z2ZzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9jcHVmcmVxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXh0YWwgPSBzM2NfY3B1ZnJlcV9jbGtfZ2V0KE5VTEwsICJ4dGFsIik7CisJaGNsayA9IHMzY19jcHVmcmVxX2Nsa19nZXQoTlVMTCwgImhjbGsiKTsKKwlmY2xrID0gczNjX2NwdWZyZXFfY2xrX2dldChOVUxMLCAiZmNsayIpOworCWFybWNsayA9IHMzY19jcHVmcmVxX2Nsa19nZXQoTlVMTCwgImFybWNsayIpOworCisJaWYgKElTX0VSUih4dGFsKSB8fCBJU19FUlIoaGNsaykgfHwgSVNfRVJSKGZjbGspIHx8IElTX0VSUihhcm1jbGspKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBnZXQgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJldHVybiBzM2NfY3B1ZnJlcV9yZWdpc3RlcigmczNjMjQ0MF9jcHVmcmVxX2luZm8pOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9jcHVmcmVxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0NDBfY3B1ZnJlcV9hZGQsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDBfY3B1ZnJlcV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsCisJCQkJICAgICAgJnMzYzI0NDBfY3B1ZnJlcV9kcml2ZXIpOworfQorCisvKiBhcmNoX2luaXRjYWxsIGFkZHMgdGhlIGNsb2NrcyB3ZSBuZWVkLCBzbyB1c2Ugc3Vic3lzX2luaXRjYWxsLiAqLworc3Vic3lzX2luaXRjYWxsKHMzYzI0NDBfY3B1ZnJlcV9pbml0KTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfY3B1ZnJlcV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDQwX2NwdWZyZXFfYWRkLAorfTsKKworc3RhdGljIGludCBzM2MyNDQyX2NwdWZyZXFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLAorCQkJCSAgICAgICZzM2MyNDQyX2NwdWZyZXFfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHMzYzI0NDJfY3B1ZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xMjAwMDAwMC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5NDQzYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xMjAwMDAwMC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xMjAwMDAwMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBhcm0ubGludXgub3JnLnVrPgorICoKKyAqIFMzQzI0NDAvUzNDMjQ0MiBDUFUgUExMIHRhYmxlcyAoMTJNSHogQ3J5c3RhbCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHMzYzI0NDBfcGxsc18xMltdIF9faW5pdGRhdGEgPSB7CisJeyAuZnJlcXVlbmN5ID0gNzUwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDc1LCAzLCAzKSwgIH0sIAkvKiBGVmNvIDYwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSA4MDAwMDAwMCwJLmluZGV4ID0gUExMVkFMKDB4OTgsIDQsIDMpLCAgfSwgCS8qIEZWY28gNjQwLjAwMDAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDkwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3MCwgMiwgMyksICB9LCAJLyogRlZjbyA3MjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTAwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg1YywgMSwgMyksICB9LCAJLyogRlZjbyA4MDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTEwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg2NiwgMSwgMyksICB9LCAJLyogRlZjbyA4ODAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTIwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3MCwgMSwgMyksICB9LCAJLyogRlZjbyA5NjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTUwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3NSwgMywgMiksICB9LCAJLyogRlZjbyA2MDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTYwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg5OCwgNCwgMiksICB9LCAJLyogRlZjbyA2NDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTcwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg0ZCwgMSwgMiksICB9LCAJLyogRlZjbyA2ODAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTgwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3MCwgMiwgMiksICB9LCAJLyogRlZjbyA3MjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMTkwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg1NywgMSwgMiksICB9LCAJLyogRlZjbyA3NjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjAwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg1YywgMSwgMiksICB9LCAJLyogRlZjbyA4MDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjEwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg4NCwgMiwgMiksICB9LCAJLyogRlZjbyA4NDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjIwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg2NiwgMSwgMiksICB9LCAJLyogRlZjbyA4ODAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjMwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg2YiwgMSwgMiksICB9LCAJLyogRlZjbyA5MjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjQwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3MCwgMSwgMiksICB9LCAJLyogRlZjbyA5NjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzAwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3NSwgMywgMSksICB9LCAJLyogRlZjbyA2MDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzEwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg5MywgNCwgMSksICB9LCAJLyogRlZjbyA2MjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzIwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg5OCwgNCwgMSksICB9LCAJLyogRlZjbyA2NDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzMwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg2NiwgMiwgMSksICB9LCAJLyogRlZjbyA2NjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzQwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg0ZCwgMSwgMSksICB9LCAJLyogRlZjbyA2ODAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzUwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHhhNywgNCwgMSksICB9LCAJLyogRlZjbyA3MDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzYwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3MCwgMiwgMSksICB9LCAJLyogRlZjbyA3MjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzcwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHhiMSwgNCwgMSksICB9LCAJLyogRlZjbyA3NDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzgwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg1NywgMSwgMSksICB9LCAJLyogRlZjbyA3NjAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzkwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg3YSwgMiwgMSksICB9LCAJLyogRlZjbyA3ODAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gNDAwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg1YywgMSwgMSksICB9LCAJLyogRlZjbyA4MDAuMDAwMDAwICovCit9OworCitzdGF0aWMgaW50IHMzYzI0NDBfcGxsczEyX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjbGsgKnh0YWxfY2xrOworCXVuc2lnbmVkIGxvbmcgeHRhbDsKKworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCWlmIChJU19FUlIoeHRhbF9jbGspKQorCQlyZXR1cm4gUFRSX0VSUih4dGFsX2Nsayk7CisKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKworCWlmICh4dGFsID09IDEyMDAwMDAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIFBMTCB0YWJsZSBmb3IgMTJNSHogY3J5c3RhbFxuIik7CisJCXJldHVybiBzM2NfcGxsdGFiX3JlZ2lzdGVyKHMzYzI0NDBfcGxsc18xMiwKKwkJCQkJICAgQVJSQVlfU0laRShzM2MyNDQwX3BsbHNfMTIpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfcGxsczEyX2RydiA9IHsKKwkuYWRkCT0gczNjMjQ0MF9wbGxzMTJfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQ0MF9wbGxfMTJtaHoodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywgJnMzYzI0NDBfcGxsczEyX2Rydik7CisKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDQwX3BsbF8xMm1oeik7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQyX3BsbHMxMl9kcnYgPSB7CisJLmFkZAk9IHMzYzI0NDBfcGxsczEyX2FkZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDJfcGxsXzEybWh6KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDQyX3BsbHMxMl9kcnYpOworCit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9wbGxfMTJtaHopOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTE2OTM0NDAwLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1wbGwtMTY5MzQ0MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njc5YWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTE2OTM0NDAwLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xNjkzNDQwMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBhcm0ubGludXgub3JnLnVrPgorICoKKyAqIFMzQzI0NDAvUzNDMjQ0MiBDUFUgUExMIHRhYmxlcyAoMTYuOTM0NDRNSHogQ3J5c3RhbCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHMzYzI0NDBfcGxsc18xNjkzNDRbXSBfX2luaXRkYXRhID0geworCXsgLmZyZXF1ZW5jeSA9IDc4MDE5MjAwLAkuaW5kZXggPSBQTExWQUwoMTIxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDYyNC4xNTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSA4NDA2NzIwMCwJLmluZGV4ID0gUExMVkFMKDEzMSwgNSwgMyksIAl9LCAJLyogRlZjbyA2NzIuNTM3NjAwICovCisJeyAuZnJlcXVlbmN5ID0gOTAxMTUyMDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDUsIDMpLCAJfSwgCS8qIEZWY28gNzIwLjkyMTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDk2MTYzMjAwLAkuaW5kZXggPSBQTExWQUwoMTUxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDc2OS4zMDU2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMDIxMzU2MDAsCS5pbmRleCA9IFBMTFZBTCgxODUsIDYsIDMpLCAJfSwgCS8qIEZWY28gODE3LjA4NDgwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDEwODI1OTIwMCwJLmluZGV4ID0gUExMVkFMKDE3MSwgNSwgMyksIAl9LCAJLyogRlZjbyA4NjYuMDczNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMTE0MzA3MjAwLAkuaW5kZXggPSBQTExWQUwoMTI3LCAzLCAzKSwgCX0sIAkvKiBGVmNvIDkxNC40NTc2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMjAyMzQyNDAsCS5pbmRleCA9IFBMTFZBTCgxMzQsIDMsIDMpLCAJfSwgCS8qIEZWY28gOTYxLjg3MzkyMCAqLworCXsgLmZyZXF1ZW5jeSA9IDEyNjE2MTI4MCwJLmluZGV4ID0gUExMVkFMKDE0MSwgMywgMyksIAl9LCAJLyogRlZjbyAxMDA5LjI5MDI0MCAqLworCXsgLmZyZXF1ZW5jeSA9IDEzMjA4ODMyMCwJLmluZGV4ID0gUExMVkFMKDE0OCwgMywgMyksIAl9LCAJLyogRlZjbyAxMDU2LjcwNjU2MCAqLworCXsgLmZyZXF1ZW5jeSA9IDEzODAxNTM2MCwJLmluZGV4ID0gUExMVkFMKDE1NSwgMywgMyksIAl9LCAJLyogRlZjbyAxMTA0LjEyMjg4MCAqLworCXsgLmZyZXF1ZW5jeSA9IDE0NDc4OTEyMCwJLmluZGV4ID0gUExMVkFMKDE2MywgMywgMyksIAl9LCAJLyogRlZjbyAxMTU4LjMxMjk2MCAqLworCXsgLmZyZXF1ZW5jeSA9IDE1MDEwMDM2MywJLmluZGV4ID0gUExMVkFMKDE4NywgOSwgMiksIAl9LCAJLyogRlZjbyA2MDAuNDAxNDU0ICovCisJeyAuZnJlcXVlbmN5ID0gMTU2MDM4NDAwLAkuaW5kZXggPSBQTExWQUwoMTIxLCA1LCAyKSwgCX0sIAkvKiBGVmNvIDYyNC4xNTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNjIwODY0MDAsCS5pbmRleCA9IFBMTFZBTCgxMjYsIDUsIDIpLCAJfSwgCS8qIEZWY28gNjQ4LjM0NTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE2ODEzNDQwMCwJLmluZGV4ID0gUExMVkFMKDEzMSwgNSwgMiksIAl9LCAJLyogRlZjbyA2NzIuNTM3NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMTc0MDQ4MDAwLAkuaW5kZXggPSBQTExWQUwoMTc3LCA3LCAyKSwgCX0sIAkvKiBGVmNvIDY5Ni4xOTIwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxODAyMzA0MDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDUsIDIpLCAJfSwgCS8qIEZWY28gNzIwLjkyMTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE4NjI3ODQwMCwJLmluZGV4ID0gUExMVkFMKDEyNCwgNCwgMiksIAl9LCAJLyogRlZjbyA3NDUuMTEzNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMTkyMzI2NDAwLAkuaW5kZXggPSBQTExWQUwoMTUxLCA1LCAyKSwgCX0sIAkvKiBGVmNvIDc2OS4zMDU2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxOTgxMzI0ODAsCS5pbmRleCA9IFBMTFZBTCgxMDksIDMsIDIpLCAJfSwgCS8qIEZWY28gNzkyLjUyOTkyMCAqLworCXsgLmZyZXF1ZW5jeSA9IDIwNDI3MTIwMCwJLmluZGV4ID0gUExMVkFMKDE4NSwgNiwgMiksIAl9LCAJLyogRlZjbyA4MTcuMDg0ODAwICovCisJeyAuZnJlcXVlbmN5ID0gMjEwMjY4ODAwLAkuaW5kZXggPSBQTExWQUwoMTQxLCA0LCAyKSwgCX0sIAkvKiBGVmNvIDg0MS4wNzUyMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMTY1MTg0MDAsCS5pbmRleCA9IFBMTFZBTCgxNzEsIDUsIDIpLCAJfSwgCS8qIEZWY28gODY2LjA3MzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDIyMjI2NDAwMCwJLmluZGV4ID0gUExMVkFMKDk3LCAyLCAyKSwgCX0sIAkvKiBGVmNvIDg4OS4wNTYwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMjg2MTQ0MDAsCS5pbmRleCA9IFBMTFZBTCgxMjcsIDMsIDIpLCAJfSwgCS8qIEZWY28gOTE0LjQ1NzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDIzNDI1OTIwMCwJLmluZGV4ID0gUExMVkFMKDE1OCwgNCwgMiksIAl9LCAJLyogRlZjbyA5MzcuMDM2ODAwICovCisJeyAuZnJlcXVlbmN5ID0gMjQwNDY4NDgwLAkuaW5kZXggPSBQTExWQUwoMTM0LCAzLCAyKSwgCX0sIAkvKiBGVmNvIDk2MS44NzM5MjAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyNDY5NjAwMDAsCS5pbmRleCA9IFBMTFZBTCgxNjcsIDQsIDIpLCAJfSwgCS8qIEZWY28gOTg3Ljg0MDAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDI1MjMyMjU2MCwJLmluZGV4ID0gUExMVkFMKDE0MSwgMywgMiksIAl9LCAJLyogRlZjbyAxMDA5LjI5MDI0MCAqLworCXsgLmZyZXF1ZW5jeSA9IDI1ODI0OTYwMCwJLmluZGV4ID0gUExMVkFMKDExNCwgMiwgMiksIAl9LCAJLyogRlZjbyAxMDMyLjk5ODQwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDI2NDE3NjY0MCwJLmluZGV4ID0gUExMVkFMKDE0OCwgMywgMiksIAl9LCAJLyogRlZjbyAxMDU2LjcwNjU2MCAqLworCXsgLmZyZXF1ZW5jeSA9IDI3MDk1MDQwMCwJLmluZGV4ID0gUExMVkFMKDEyMCwgMiwgMiksIAl9LCAJLyogRlZjbyAxMDgzLjgwMTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDI3NjAzMDcyMCwJLmluZGV4ID0gUExMVkFMKDE1NSwgMywgMiksIAl9LCAJLyogRlZjbyAxMTA0LjEyMjg4MCAqLworCXsgLmZyZXF1ZW5jeSA9IDI4MjI0MDAwMCwJLmluZGV4ID0gUExMVkFMKDkyLCAxLCAyKSwgCX0sIAkvKiBGVmNvIDExMjguOTYwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjg5NTc4MjQwLAkuaW5kZXggPSBQTExWQUwoMTYzLCAzLCAyKSwgCX0sIAkvKiBGVmNvIDExNTguMzEyOTYwICovCisJeyAuZnJlcXVlbmN5ID0gMjk0MjM1MjAwLAkuaW5kZXggPSBQTExWQUwoMTMxLCAyLCAyKSwgCX0sIAkvKiBGVmNvIDExNzYuOTQwODAwICovCisJeyAuZnJlcXVlbmN5ID0gMzAwMjAwNzI3LAkuaW5kZXggPSBQTExWQUwoMTg3LCA5LCAxKSwgCX0sIAkvKiBGVmNvIDYwMC40MDE0NTQgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMDYzNTg2OTAsCS5pbmRleCA9IFBMTFZBTCgxOTEsIDksIDEpLCAJfSwgCS8qIEZWY28gNjEyLjcxNzM4MCAqLworCXsgLmZyZXF1ZW5jeSA9IDMxMjA3NjgwMCwJLmluZGV4ID0gUExMVkFMKDEyMSwgNSwgMSksIAl9LCAJLyogRlZjbyA2MjQuMTUzNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMzE4MzY2NzIwLAkuaW5kZXggPSBQTExWQUwoODYsIDMsIDEpLCAJfSwgCS8qIEZWY28gNjM2LjczMzQ0MCAqLworCXsgLmZyZXF1ZW5jeSA9IDMyNDE3MjgwMCwJLmluZGV4ID0gUExMVkFMKDEyNiwgNSwgMSksIAl9LCAJLyogRlZjbyA2NDguMzQ1NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMzMwMjIwODAwLAkuaW5kZXggPSBQTExWQUwoMTA5LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDY2MC40NDE2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMzYyNjg4MDAsCS5pbmRleCA9IFBMTFZBTCgxMzEsIDUsIDEpLCAJfSwgCS8qIEZWY28gNjcyLjUzNzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM0MjA3NDg4MCwJLmluZGV4ID0gUExMVkFMKDkzLCAzLCAxKSwgCX0sIAkvKiBGVmNvIDY4NC4xNDk3NjAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNDgwOTYwMDAsCS5pbmRleCA9IFBMTFZBTCgxNzcsIDcsIDEpLCAJfSwgCS8qIEZWY28gNjk2LjE5MjAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM1NTYyMjQwMCwJLmluZGV4ID0gUExMVkFMKDExOCwgNCwgMSksIAl9LCAJLyogRlZjbyA3MTEuMjQ0ODAwICovCisJeyAuZnJlcXVlbmN5ID0gMzYwNDYwODAwLAkuaW5kZXggPSBQTExWQUwoMTQxLCA1LCAxKSwgCX0sIAkvKiBGVmNvIDcyMC45MjE2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNjYyMDY0MDAsCS5pbmRleCA9IFBMTFZBTCgxNjUsIDYsIDEpLCAJfSwgCS8qIEZWY28gNzMyLjQxMjgwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM3MjU1NjgwMCwJLmluZGV4ID0gUExMVkFMKDEyNCwgNCwgMSksIAl9LCAJLyogRlZjbyA3NDUuMTEzNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMzc4MjAxNjAwLAkuaW5kZXggPSBQTExWQUwoMTI2LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDc1Ni40MDMyMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzODQ2NTI4MDAsCS5pbmRleCA9IFBMTFZBTCgxNTEsIDUsIDEpLCAJfSwgCS8qIEZWY28gNzY5LjMwNTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM5MTYwODAwMCwJLmluZGV4ID0gUExMVkFMKDE3NywgNiwgMSksIAl9LCAJLyogRlZjbyA3ODMuMjE2MDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzk2MjY0OTYwLAkuaW5kZXggPSBQTExWQUwoMTA5LCAzLCAxKSwgCX0sIAkvKiBGVmNvIDc5Mi41Mjk5MjAgKi8KKwl7IC5mcmVxdWVuY3kgPSA0MDIxOTIwMDAsCS5pbmRleCA9IFBMTFZBTCg4NywgMiwgMSksIAl9LCAJLyogRlZjbyA4MDQuMzg0MDAwICovCit9OworCitzdGF0aWMgaW50IHMzYzI0NDBfcGxsczE2OTM0NF9hZGQoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKKwl1bnNpZ25lZCBsb25nIHh0YWw7CisKKwl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKKwlpZiAoSVNfRVJSKHh0YWxfY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoeHRhbF9jbGspOworCisJeHRhbCA9IGNsa19nZXRfcmF0ZSh4dGFsX2Nsayk7CisJY2xrX3B1dCh4dGFsX2Nsayk7CisKKwlpZiAoeHRhbCA9PSAxNjkzNDQwMDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgUExMIHRhYmxlIGZvciAxNi45MzQ0TUh6IGNyeXN0YWxcbiIpOworCQlyZXR1cm4gczNjX3BsbHRhYl9yZWdpc3RlcihzM2MyNDQwX3BsbHNfMTY5MzQ0LAorCQkJCQkgICBBUlJBWV9TSVpFKHMzYzI0NDBfcGxsc18xNjkzNDQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfcGxsczE2OTM0NF9kcnYgPSB7CisJLmFkZAk9IHMzYzI0NDBfcGxsczE2OTM0NF9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX3BsbF8xNjkzNDQwMCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzLAorCQkJCSAgICAgICZzM2MyNDQwX3BsbHMxNjkzNDRfZHJ2KTsKKworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDBfcGxsXzE2OTM0NDAwKTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfcGxsczE2OTM0NF9kcnYgPSB7CisJLmFkZAk9IHMzYzI0NDBfcGxsczE2OTM0NF9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQyX3BsbF8xNjkzNDQwMCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLAorCQkJCSAgICAgICZzM2MyNDQyX3BsbHMxNjkzNDRfZHJ2KTsKKworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDJfcGxsXzE2OTM0NDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zcGktYnVzMS1ncGQ4XzlfMTAuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zcGktYnVzMS1ncGQ4XzlfMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWZjZjUzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NwaS1idXMxLWdwZDhfOV8xMC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zcGktYnVzMC1ncGQ4XzlfMTAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBTUEkgLSBncGlvIGNvbmZpZ3VyYXRpb24gZm9yIGJ1cyAxIG9uIGdwZDgsOSwxMAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisKK3ZvaWQgczNjMjR4eF9zcGlfZ3Bpb2NmZ19idXMxX2dwZDhfOV8xMChzdHJ1Y3QgczNjMjQxMF9zcGlfaW5mbyAqc3BpLAorCQkJCQlpbnQgZW5hYmxlKQoreworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMoJWQpXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKKwlpZiAoZW5hYmxlKSB7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEQoMTApLCBTM0MyNDQwX0dQRDEwX1NQSUNMSzEpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BEKDkpLCBTM0MyNDQwX0dQRDlfU1BJTU9TSTEpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BEKDgpLCBTM0MyNDQwX0dQRDhfU1BJTUlTTzEpOworCQlzM2MyNDEwX2dwaW9fcHVsbHVwKFMzQzI0MTBfR1BEKDEwKSwgMCk7CisJCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEQoOSksIDApOworCX0gZWxzZSB7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEQoOCksIFMzQzI0MTBfR1BJT19JTlBVVCk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEQoOSksIFMzQzI0MTBfR1BJT19JTlBVVCk7CisJCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEQoMTApLCAxKTsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRCg5KSwgMSk7CisJCXMzYzI0MTBfZ3Bpb19wdWxsdXAoUzNDMjQxMF9HUEQoOCksIDEpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L0tjb25maWcKaW5kZXggNWViZDhiNC4uYmNmYTc3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L0tjb25maWcKQEAgLTE5LDYgKzE5LDcgQEAKIAlzZWxlY3QgUzNDX0dQSU9fUFVMTF9VUERPV04KIAlzZWxlY3QgUzNDX0dQSU9fQ0ZHX1MzQzI0WFgKIAlzZWxlY3QgUzNDX0dQSU9fQ0ZHX1MzQzY0WFgKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJc2VsZWN0IFVTQl9BUkNIX0hBU19PSENJCiAJaGVscAogCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBhbnkgU2Ftc3VuZyBTM0M2NFhYIGRldmljZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L01ha2VmaWxlCmluZGV4IDNjODg4MmMuLmI4NWI0MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvTWFrZWZpbGUKQEAgLTQwLDQgKzQwLDUgQEAKIG9iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0kyQzApICs9IHNldHVwLWkyYzAubwogb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfSTJDMSkgKz0gc2V0dXAtaTJjMS5vCiBvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9GQl8yNEJQUCkgKz0gc2V0dXAtZmItMjRicHAubwotb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfU0RIQ0lfR1BJTykgKz0gc2V0dXAtc2RoY2ktZ3Bpby5vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfU0RIQ0lfR1BJTykgKz0gc2V0dXAtc2RoY2ktZ3Bpby5vCitvYmotJChDT05GSUdfU05EX1MzQzI0WFhfU09DKSArPSBkZXYtYXVkaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWF1ZGlvLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LWF1ZGlvLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2Rldi1hdWRpby5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LWF1ZGlvLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhNzExYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9LY29uZmlnCkBAIC0wLDAgKzEsNTAgQEAKKyMgYXJjaC9hcm0vcGxhdC1zNXBjMXh4L0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyMJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitjb25maWcgUExBVF9TNVBDMVhYCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TNVBDMVhYCisJZGVmYXVsdCB5CisJc2VsZWN0IFBMQVRfUzNDCisJc2VsZWN0IEFSTV9WSUMKKwlzZWxlY3QgTk9fSU9QT1JUCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJc2VsZWN0IFMzQ19HUElPX1RSQUNLCisJc2VsZWN0IFMzQ19HUElPX1BVTExfVVBET1dOCisJaGVscAorCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBhbnkgU2Ftc3VuZyBTNVBDMVhYIGRldmljZQorCitpZiBQTEFUX1M1UEMxWFgKKworIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgc2hhcmVkIGJ5IGFsbCBTM0M2NFhYIGltcGxlbWVudGF0aW9ucworCitjb25maWcgQ1BVX1M1UEMxMDBfSU5JVAorCWJvb2wKKwloZWxwCisJICBDb21tb24gaW5pdGlhbGlzYXRpb24gY29kZSBmb3IgdGhlIFM1UEMxWFgKKworY29uZmlnIENQVV9TNVBDMTAwX0NMT0NLCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBjbG9jayBzdXBwb3J0IGNvZGUgZm9yIHRoZSBTNVBDMVhYCisKKyMgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIHNldHVwCisKK2NvbmZpZyBTNVBDMTAwX1NFVFVQX0kyQzAKKwlib29sCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMC4KKworCSAgTm90ZSwgY3VycmVudGx5IHNpbmNlIGkyYzAgaXMgYWx3YXlzIGNvbXBpbGVkLCB0aGlzIHNldHVwIGhlbHBlcgorCSAgaXMgYWx3YXlzIGNvbXBpbGVkIHdpdGggaXQuCisKK2NvbmZpZyBTNVBDMTAwX1NFVFVQX0kyQzEKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMS4KK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlY2IyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDI2IEBACisjIGFyY2gvYXJtL3BsYXQtczVwYzF4eC9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9IGR1bW15Lm8KK29iai0JCQkJOj0KKworIyBDb3JlIGZpbGVzCisKK29iai15CQkJCSs9IGRldi11YXJ0Lm8KK29iai15CQkJCSs9IGNwdS5vCitvYmoteQkJCQkrPSBpcnEubworCisjIENQVSBzdXBwb3J0CisKK29iai0kKENPTkZJR19DUFVfUzVQQzEwMF9JTklUKQkrPSBzNXBjMTAwLWluaXQubworb2JqLSQoQ09ORklHX0NQVV9TNVBDMTAwX0NMT0NLKQkrPSBzNXBjMTAwLWNsb2NrLm8KKworIyBEZXZpY2Ugc2V0dXAKKworb2JqLSQoQ09ORklHX1M1UEMxMDBfU0VUVVBfSTJDMCkgKz0gc2V0dXAtaTJjMC5vCitvYmotJChDT05GSUdfUzVQQzEwMF9TRVRVUF9JMkMxKSArPSBzZXR1cC1pMmMxLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTVhNzMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2NwdS5jCkBAIC0wLDAgKzEsMTEyIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cGMxeHgvY3B1LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxWFggQ1BVIFN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvY3B1LmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L3M1cGMxMDAuaD4KKworLyogdGFibGUgb2Ygc3VwcG9ydGVkIENQVXMgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zNXBjMTAwW10gPSAiUzVQQzEwMCI7CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X3RhYmxlIGNwdV9pZHNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLmlkY29kZQkJPSAweDQzMTAwMDAwLAorCQkuaWRtYXNrCQk9IDB4ZmZmZmYwMDAsCisJCS5tYXBfaW8JCT0gczVwYzEwMF9tYXBfaW8sCisJCS5pbml0X2Nsb2Nrcwk9IHM1cGMxMDBfaW5pdF9jbG9ja3MsCisJCS5pbml0X3VhcnRzCT0gczVwYzEwMF9pbml0X3VhcnRzLAorCQkuaW5pdAkJPSBzNXBjMTAwX2luaXQsCisJCS5uYW1lCQk9IG5hbWVfczVwYzEwMCwKKwl9LAorfTsKKy8qIG1pbmltYWwgSU8gbWFwcGluZyAqLworCisvKiBzZWUgbm90ZXMgb24gdWFydCBtYXAgaW4gYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TICovCisjZGVmaW5lIFVBUlRfT0ZGUyAoUzNDX1BBX1VBUlQgJiAweGZmZmYpCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczVwYzF4eF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBDMVhYX1ZBX0NISVBJRCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfQ0hJUElEKSwKKwkJLmxlbmd0aAkJPSBTWl8xNiwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBDMVhYX1ZBX0NMSywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfQ0xLKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBDMVhYX1ZBX1BXUiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfUFdSKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZykoUzVQQzFYWF9WQV9VQVJUKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfVUFSVCksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQQzFYWF9WQV9WSUMoMCksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBDMVhYX1BBX1ZJQygwKSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQQzFYWF9WQV9WSUMoMSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBDMVhYX1BBX1ZJQygxKSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQQzFYWF9WQV9WSUMoMiksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBDMVhYX1BBX1ZJQygyKSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQQzFYWF9WQV9USU1FUiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UEMxWFhfUEFfVElNRVIpLAorCQkubGVuZ3RoCQk9IFNaXzI1NiwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCit9OworCisvKiByZWFkIGNwdSBpZGVudGlmaWNhdGlvbiBjb2RlICovCisKK3ZvaWQgX19pbml0IHM1cGMxeHhfaW5pdF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCit7CisJdW5zaWduZWQgbG9uZyBpZGNvZGU7CisKKwkvKiBpbml0aWFsaXNlIHRoZSBpbyBkZXNjcmlwdG9ycyB3ZSBuZWVkIGZvciBpbml0aWFsaXNhdGlvbiAqLworCWlvdGFibGVfaW5pdChzNXBjMXh4X2lvZGVzYywgQVJSQVlfU0laRShzNXBjMXh4X2lvZGVzYykpOworCWlvdGFibGVfaW5pdChtYWNoX2Rlc2MsIHNpemUpOworCisJaWRjb2RlID0gX19yYXdfcmVhZGwoUzVQQzFYWF9WQV9DSElQSUQpOworCXMzY19pbml0X2NwdShpZGNvZGUsIGNwdV9pZHMsIEFSUkFZX1NJWkUoY3B1X2lkcykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2Rldi11YXJ0LmMgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvZGV2LXVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzQ5YmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2Rldi11YXJ0LmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwYzF4eC9kZXYtdWFydC5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvZGV2LXVhcnQuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKKy8qIFNlcmlhbCBwb3J0IHJlZ2lzdHJhdGlvbnMgKi8KKworLyogNjR4eCB1YXJ0cyBhcmUgY2xvc2VyIHRvZ2V0aGVyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwYzF4eF91YXJ0MF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzNDX1BBX1VBUlQwLAorCQkuZW5kCT0gUzNDX1BBX1VBUlQwICsgMHgxMDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9SWDAsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9SWDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9UWDAsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9UWDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX0VSUjAsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9FUlIwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cGMxeHhfdWFydDFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9VQVJUMSwKKwkJLmVuZCAgID0gUzNDX1BBX1VBUlQxICsgMHgxMDAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9SWDEsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9SWDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9UWDEsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9UWDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX0VSUjEsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9FUlIxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBjMXh4X3VhcnQyX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0NfUEFfVUFSVDIsCisJCS5lbmQgICA9IFMzQ19QQV9VQVJUMiArIDB4MTAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfUlgyLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfUlgyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfVFgyLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfVFgyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKworCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9FUlIyLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfRVJSMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwYzF4eF91YXJ0M19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDX1BBX1VBUlQzLAorCQkuZW5kICAgPSBTM0NfUEFfVUFSVDMgKyAweDEwMCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1JYMywKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1JYMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX1RYMywKKwkJLmVuZAk9IElSUV9TM0NVQVJUX1RYMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfRVJSMywKKwkJLmVuZAk9IElSUV9TM0NVQVJUX0VSUjMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisKK3N0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzIHM1cGMxeHhfdWFydF9yZXNvdXJjZXNbXSBfX2luaXRkYXRhID0geworCVswXSA9IHsKKwkJLnJlc291cmNlcwk9IHM1cGMxeHhfdWFydDBfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cGMxeHhfdWFydDBfcmVzb3VyY2UpLAorCX0sCisJWzFdID0geworCQkucmVzb3VyY2VzCT0gczVwYzF4eF91YXJ0MV9yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwYzF4eF91YXJ0MV9yZXNvdXJjZSksCisJfSwKKwlbMl0gPSB7CisJCS5yZXNvdXJjZXMJPSBzNXBjMXh4X3VhcnQyX3Jlc291cmNlLAorCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzNXBjMXh4X3VhcnQyX3Jlc291cmNlKSwKKwl9LAorCVszXSA9IHsKKwkJLnJlc291cmNlcwk9IHM1cGMxeHhfdWFydDNfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cGMxeHhfdWFydDNfcmVzb3VyY2UpLAorCX0sCit9OworCisvKiB1YXJ0IGRldmljZXMgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTAgPSB7CisJLmlkCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMSA9IHsKKwkuaWQJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UyID0geworCS5pZAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTMgPSB7CisJLmlkCQk9IDMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfc3JjWzRdID0geworCSZzM2MyNHh4X3VhcnRfZGV2aWNlMCwKKwkmczNjMjR4eF91YXJ0X2RldmljZTEsCisJJnMzYzI0eHhfdWFydF9kZXZpY2UyLAorCSZzM2MyNHh4X3VhcnRfZGV2aWNlMywKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzRdID0geworfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9pcnFzLmggYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDdkOGMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9pcnFzLmgKQEAgLTAsMCArMSwxODIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxWFggLSBDb21tb24gSVJRIHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaAorICovCisKKyNpZm5kZWYgX19BU01fUExBVF9TNVBDMVhYX0lSUVNfSAorI2RlZmluZSBfX0FTTV9QTEFUX1M1UEMxWFhfSVJRU19IIF9fRklMRV9fCisKKy8qIHdlIGtlZXAgdGhlIGZpcnN0IHNldCBvZiBDUFUgSVJRcyBvdXQgb2YgdGhlIHJhbmdlIG9mCisgKiB0aGUgSVNBIHNwYWNlLCBzbyB0aGF0IHRoZSBQQzEwNCBoYXMgdGhlbSB0byBpdHNlbGYKKyAqIGFuZCB3ZSBkb24ndCBlbmQgdXAgaGF2aW5nIHRvIGRvIGhvcnJpYmxlIHRoaW5ncyB0byB0aGUKKyAqIHN0YW5kYXJkIElTQSBkcml2ZXJzLi4uLgorICoKKyAqIG5vdGUsIHNpbmNlIHdlJ3JlIHVzaW5nIHRoZSBWSUNzLCBvdXIgc3RhcnQgbXVzdCBiZSBhCisgKiBtdWxpdHBsZSBvZiAzMiB0byBhbGxvdyB0aGUgY29tbW9uIGNvZGUgdG8gd29yaworICovCisKKyNkZWZpbmUgUzNDX0lSUV9PRkZTRVQJCSgzMikKKworI2RlZmluZSBTM0NfSVJRKHgpCQkoKHgpICsgUzNDX0lSUV9PRkZTRVQpCisKKyNkZWZpbmUgUzNDX1ZJQzBfQkFTRQkJUzNDX0lSUSgwKQorI2RlZmluZSBTM0NfVklDMV9CQVNFCQlTM0NfSVJRKDMyKQorI2RlZmluZSBTM0NfVklDMl9CQVNFCQlTM0NfSVJRKDY0KQorCisvKiBVQVJUIGludGVycnVwdHMsIGVhY2ggVUFSVCBoYXMgNCBpbnR0ZXJ1cHRzIHBlciBjaGFubmVsIHNvCisgKiB1c2UgdGhlIHNwYWNlIGJldHdlZW4gdGhlIElTQSBhbmQgUzNDIG1haW4gaW50ZXJydXB0cy4gTm90ZSwgdGhlc2UKKyAqIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFMzQzI0WFggc2VyaWVzISAqLworCisjZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UwCSgxNikKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfQkFTRTEJKDIwKQorI2RlZmluZSBJUlFfUzNDVUFSVF9CQVNFMgkoMjQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UzCSgyOCkKKworI2RlZmluZSBVQVJUX0lSUV9SWEQJCSgwKQorI2RlZmluZSBVQVJUX0lSUV9FUlIJCSgxKQorI2RlZmluZSBVQVJUX0lSUV9UWEQJCSgyKQorI2RlZmluZSBVQVJUX0lSUV9NT0RFTQkJKDMpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgwCQkoSVJRX1MzQ1VBUlRfQkFTRTAgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMAkJKElSUV9TM0NVQVJUX0JBU0UwICsgVUFSVF9JUlFfVFhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIwCShJUlFfUzNDVUFSVF9CQVNFMCArIFVBUlRfSVJRX0VSUikKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDEJCShJUlFfUzNDVUFSVF9CQVNFMSArIFVBUlRfSVJRX1JYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgxCQkoSVJRX1MzQ1VBUlRfQkFTRTEgKyBVQVJUX0lSUV9UWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjEJKElSUV9TM0NVQVJUX0JBU0UxICsgVUFSVF9JUlFfRVJSKQorCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMgkJKElSUV9TM0NVQVJUX0JBU0UyICsgVUFSVF9JUlFfUlhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9UWDIJCShJUlFfUzNDVUFSVF9CQVNFMiArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMgkoSVJRX1MzQ1VBUlRfQkFTRTIgKyBVQVJUX0lSUV9FUlIpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgzCQkoSVJRX1MzQ1VBUlRfQkFTRTMgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMwkJKElSUV9TM0NVQVJUX0JBU0UzICsgVUFSVF9JUlFfVFhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIzCShJUlFfUzNDVUFSVF9CQVNFMyArIFVBUlRfSVJRX0VSUikKKworLyogVklDIGJhc2VkIElSUXMgKi8KKworI2RlZmluZSBTNVBDMVhYX0lSUV9WSUMwKHgpCShTM0NfVklDMF9CQVNFICsgKHgpKQorI2RlZmluZSBTNVBDMVhYX0lSUV9WSUMxKHgpCShTM0NfVklDMV9CQVNFICsgKHgpKQorI2RlZmluZSBTNVBDMVhYX0lSUV9WSUMyKHgpCShTM0NfVklDMl9CQVNFICsgKHgpKQorCisvKgorICogVklDMDogc3lzdGVtLCBETUEsIHRpbWVyCisgKi8KKyNkZWZpbmUgSVJRX0VJTlQwCQlTNVBDMVhYX0lSUV9WSUMwKDApCisjZGVmaW5lIElSUV9FSU5UMQkJUzVQQzFYWF9JUlFfVklDMCgxKQorI2RlZmluZSBJUlFfRUlOVDIJCVM1UEMxWFhfSVJRX1ZJQzAoMikKKyNkZWZpbmUgSVJRX0VJTlQzCQlTNVBDMVhYX0lSUV9WSUMwKDMpCisjZGVmaW5lIElSUV9FSU5UNAkJUzVQQzFYWF9JUlFfVklDMCg0KQorI2RlZmluZSBJUlFfRUlOVDUJCVM1UEMxWFhfSVJRX1ZJQzAoNSkKKyNkZWZpbmUgSVJRX0VJTlQ2CQlTNVBDMVhYX0lSUV9WSUMwKDYpCisjZGVmaW5lIElSUV9FSU5UNwkJUzVQQzFYWF9JUlFfVklDMCg3KQorI2RlZmluZSBJUlFfRUlOVDgJCVM1UEMxWFhfSVJRX1ZJQzAoOCkKKyNkZWZpbmUgSVJRX0VJTlQ5CQlTNVBDMVhYX0lSUV9WSUMwKDkpCisjZGVmaW5lIElSUV9FSU5UMTAJCVM1UEMxWFhfSVJRX1ZJQzAoMTApCisjZGVmaW5lIElSUV9FSU5UMTEJCVM1UEMxWFhfSVJRX1ZJQzAoMTEpCisjZGVmaW5lIElSUV9FSU5UMTIJCVM1UEMxWFhfSVJRX1ZJQzAoMTIpCisjZGVmaW5lIElSUV9FSU5UMTMJCVM1UEMxWFhfSVJRX1ZJQzAoMTMpCisjZGVmaW5lIElSUV9FSU5UMTQJCVM1UEMxWFhfSVJRX1ZJQzAoMTQpCisjZGVmaW5lIElSUV9FSU5UMTUJCVM1UEMxWFhfSVJRX1ZJQzAoMTUpCisjZGVmaW5lIElSUV9FSU5UMTZfMzEJCVM1UEMxWFhfSVJRX1ZJQzAoMTYpCisjZGVmaW5lIElSUV9CQVRGCQlTNVBDMVhYX0lSUV9WSUMwKDE3KQorI2RlZmluZSBJUlFfTURNQQkJUzVQQzFYWF9JUlFfVklDMCgxOCkKKyNkZWZpbmUgSVJRX1BETUEwCQlTNVBDMVhYX0lSUV9WSUMwKDE5KQorI2RlZmluZSBJUlFfUERNQTEJCVM1UEMxWFhfSVJRX1ZJQzAoMjApCisjZGVmaW5lIElSUV9USU1FUjAJCVM1UEMxWFhfSVJRX1ZJQzAoMjEpCisjZGVmaW5lIElSUV9USU1FUjEJCVM1UEMxWFhfSVJRX1ZJQzAoMjIpCisjZGVmaW5lIElSUV9USU1FUjIJCVM1UEMxWFhfSVJRX1ZJQzAoMjMpCisjZGVmaW5lIElSUV9USU1FUjMJCVM1UEMxWFhfSVJRX1ZJQzAoMjQpCisjZGVmaW5lIElSUV9USU1FUjQJCVM1UEMxWFhfSVJRX1ZJQzAoMjUpCisjZGVmaW5lIElSUV9TWVNUSU1FUgkJUzVQQzFYWF9JUlFfVklDMCgyNikKKyNkZWZpbmUgSVJRX1dEVAkJCVM1UEMxWFhfSVJRX1ZJQzAoMjcpCisjZGVmaW5lIElSUV9SVENfQUxBUk0JCVM1UEMxWFhfSVJRX1ZJQzAoMjgpCisjZGVmaW5lIElSUV9SVENfVElDCQlTNVBDMVhYX0lSUV9WSUMwKDI5KQorI2RlZmluZSBJUlFfR1BJT0lOVAkJUzVQQzFYWF9JUlFfVklDMCgzMCkKKworLyoKKyAqIFZJQzE6IEFSTSwgcG93ZXIsIG1lbW9yeSwgY29ubmVjdGl2aXR5CisgKi8KKyNkZWZpbmUgSVJRX0NPUlRFWDAJCVM1UEMxWFhfSVJRX1ZJQzEoMCkKKyNkZWZpbmUgSVJRX0NPUlRFWDEJCVM1UEMxWFhfSVJRX1ZJQzEoMSkKKyNkZWZpbmUgSVJRX0NPUlRFWDIJCVM1UEMxWFhfSVJRX1ZJQzEoMikKKyNkZWZpbmUgSVJRX0NPUlRFWDMJCVM1UEMxWFhfSVJRX1ZJQzEoMykKKyNkZWZpbmUgSVJRX0NPUlRFWDQJCVM1UEMxWFhfSVJRX1ZJQzEoNCkKKyNkZWZpbmUgSVJRX0lFTUFQQwkJUzVQQzFYWF9JUlFfVklDMSg1KQorI2RlZmluZSBJUlFfSUVNSUVDCQlTNVBDMVhYX0lSUV9WSUMxKDYpCisjZGVmaW5lIElSUV9PTkVOQU5ECQlTNVBDMVhYX0lSUV9WSUMxKDcpCisjZGVmaW5lIElSUV9ORkMJCQlTNVBDMVhYX0lSUV9WSUMxKDgpCisjZGVmaW5lIElSUV9DRkMJCQlTNVBDMVhYX0lSUV9WSUMxKDkpCisjZGVmaW5lIElSUV9VQVJUMAkJUzVQQzFYWF9JUlFfVklDMSgxMCkKKyNkZWZpbmUgSVJRX1VBUlQxCQlTNVBDMVhYX0lSUV9WSUMxKDExKQorI2RlZmluZSBJUlFfVUFSVDIJCVM1UEMxWFhfSVJRX1ZJQzEoMTIpCisjZGVmaW5lIElSUV9VQVJUMwkJUzVQQzFYWF9JUlFfVklDMSgxMykKKyNkZWZpbmUgSVJRX0lJQwkJCVM1UEMxWFhfSVJRX1ZJQzEoMTQpCisjZGVmaW5lIElSUV9TUEkwCQlTNVBDMVhYX0lSUV9WSUMxKDE1KQorI2RlZmluZSBJUlFfU1BJMQkJUzVQQzFYWF9JUlFfVklDMSgxNikKKyNkZWZpbmUgSVJRX1NQSTIJCVM1UEMxWFhfSVJRX1ZJQzEoMTcpCisjZGVmaW5lIElSUV9JUkRBCQlTNVBDMVhYX0lSUV9WSUMxKDE4KQorI2RlZmluZSBJUlFfQ0FOMAkJUzVQQzFYWF9JUlFfVklDMSgxOSkKKyNkZWZpbmUgSVJRX0NBTjEJCVM1UEMxWFhfSVJRX1ZJQzEoMjApCisjZGVmaW5lIElSUV9IU0lSWAkJUzVQQzFYWF9JUlFfVklDMSgyMSkKKyNkZWZpbmUgSVJRX0hTSVRYCQlTNVBDMVhYX0lSUV9WSUMxKDIyKQorI2RlZmluZSBJUlFfVUhPU1QJCVM1UEMxWFhfSVJRX1ZJQzEoMjMpCisjZGVmaW5lIElSUV9PVEcJCQlTNVBDMVhYX0lSUV9WSUMxKDI0KQorI2RlZmluZSBJUlFfTVNNCQkJUzVQQzFYWF9JUlFfVklDMSgyNSkKKyNkZWZpbmUgSVJRX0hTTU1DMAkJUzVQQzFYWF9JUlFfVklDMSgyNikKKyNkZWZpbmUgSVJRX0hTTU1DMQkJUzVQQzFYWF9JUlFfVklDMSgyNykKKyNkZWZpbmUgSVJRX0hTTU1DMgkJUzVQQzFYWF9JUlFfVklDMSgyOCkKKyNkZWZpbmUgSVJRX01JUElDU0kJCVM1UEMxWFhfSVJRX1ZJQzEoMjkpCisjZGVmaW5lIElSUV9NSVBJRFNJCQlTNVBDMVhYX0lSUV9WSUMxKDMwKQorCisvKgorICogVklDMjogbXVsdGltZWRpYSwgYXVkaW8sIHNlY3VyaXR5CisgKi8KKyNkZWZpbmUgSVJRX0xDRDAJCVM1UEMxWFhfSVJRX1ZJQzIoMCkKKyNkZWZpbmUgSVJRX0xDRDEJCVM1UEMxWFhfSVJRX1ZJQzIoMSkKKyNkZWZpbmUgSVJRX0xDRDIJCVM1UEMxWFhfSVJRX1ZJQzIoMikKKyNkZWZpbmUgSVJRX0xDRDMJCVM1UEMxWFhfSVJRX1ZJQzIoMykKKyNkZWZpbmUgSVJRX1JPVEFUT1IJCVM1UEMxWFhfSVJRX1ZJQzIoNCkKKyNkZWZpbmUgSVJRX0ZJTUMwCQlTNVBDMVhYX0lSUV9WSUMyKDUpCisjZGVmaW5lIElSUV9GSU1DMQkJUzVQQzFYWF9JUlFfVklDMig2KQorI2RlZmluZSBJUlFfRklNQzIJCVM1UEMxWFhfSVJRX1ZJQzIoNykKKyNkZWZpbmUgSVJRX0pQRUcJCVM1UEMxWFhfSVJRX1ZJQzIoOCkKKyNkZWZpbmUgSVJRXzJECQkJUzVQQzFYWF9JUlFfVklDMig5KQorI2RlZmluZSBJUlFfM0QJCQlTNVBDMVhYX0lSUV9WSUMyKDEwKQorI2RlZmluZSBJUlFfTUlYRVIJCVM1UEMxWFhfSVJRX1ZJQzIoMTEpCisjZGVmaW5lIElSUV9IRE1JCQlTNVBDMVhYX0lSUV9WSUMyKDEyKQorI2RlZmluZSBJUlFfSUlDMQkJUzVQQzFYWF9JUlFfVklDMigxMykKKyNkZWZpbmUgSVJRX01GQwkJCVM1UEMxWFhfSVJRX1ZJQzIoMTQpCisjZGVmaW5lIElSUV9UVkVOQwkJUzVQQzFYWF9JUlFfVklDMigxNSkKKyNkZWZpbmUgSVJRX0kyUzAJCVM1UEMxWFhfSVJRX1ZJQzIoMTYpCisjZGVmaW5lIElSUV9JMlMxCQlTNVBDMVhYX0lSUV9WSUMyKDE3KQorI2RlZmluZSBJUlFfSTJTMgkJUzVQQzFYWF9JUlFfVklDMigxOCkKKyNkZWZpbmUgSVJRX0FDOTcJCVM1UEMxWFhfSVJRX1ZJQzIoMTkpCisjZGVmaW5lIElSUV9QQ00wCQlTNVBDMVhYX0lSUV9WSUMyKDIwKQorI2RlZmluZSBJUlFfUENNMQkJUzVQQzFYWF9JUlFfVklDMigyMSkKKyNkZWZpbmUgSVJRX1NQRElGCQlTNVBDMVhYX0lSUV9WSUMyKDIyKQorI2RlZmluZSBJUlFfQURDCQkJUzVQQzFYWF9JUlFfVklDMigyMykKKyNkZWZpbmUgSVJRX1BFTkROCQlTNVBDMVhYX0lSUV9WSUMyKDI0KQorI2RlZmluZSBJUlFfVEMJCQlJUlFfUEVORE4KKyNkZWZpbmUgSVJRX0tFWVBBRAkJUzVQQzFYWF9JUlFfVklDMigyNSkKKyNkZWZpbmUgSVJRX0NHCQkJUzVQQzFYWF9JUlFfVklDMigyNikKKyNkZWZpbmUgSVJRX1NFQwkJCVM1UEMxWFhfSVJRX1ZJQzIoMjcpCisjZGVmaW5lIElSUV9TRUNSWAkJUzVQQzFYWF9JUlFfVklDMigyOCkKKyNkZWZpbmUgSVJRX1NFQ1RYCQlTNVBDMVhYX0lSUV9WSUMyKDI5KQorI2RlZmluZSBJUlFfU0RNSVJRCQlTNVBDMVhYX0lSUV9WSUMyKDMwKQorI2RlZmluZSBJUlFfU0RNRklRCQlTNVBDMVhYX0lSUV9WSUMyKDMxKQorCisjZGVmaW5lIFMzQ19JUlFfRUlOVF9CQVNFCShJUlFfU0RNRklRICsgMSkKKworI2RlZmluZSBTM0NfRUlOVCh4KQkJKCh4KSArIFMzQ19JUlFfRUlOVF9CQVNFKQorI2RlZmluZSBJUlFfRUlOVCh4KQkJUzNDX0VJTlQoeCkKKworI2RlZmluZSBOUl9JUlFTIAkJKElSUV9FSU5UKDMxKSsxKQorCisjZW5kaWYgLyogX19BU01fUExBVF9TNVBDMVhYX0lSUVNfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3BsbC5oIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9wbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFmZWYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9wbGwuaApAQCAtMCwwICsxLDM4IEBACisvKiBhcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3BsbC5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBTNVBDMVhYIFBMTCBjb2RlCisgKgorICogQmFzZWQgb24gcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9wbGwuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFM1UF9QTExfTURJVl9NQVNLCSgoMSA8PCAoMjUtMTYrMSkpIC0gMSkKKyNkZWZpbmUgUzVQX1BMTF9QRElWX01BU0sJKCgxIDw8ICgxMy04KzEpKSAtIDEpCisjZGVmaW5lIFM1UF9QTExfU0RJVl9NQVNLCSgoMSA8PCAoMi0wKzEpKSAtIDEpCisjZGVmaW5lIFM1UF9QTExfTURJVl9TSElGVAkoMTYpCisjZGVmaW5lIFM1UF9QTExfUERJVl9TSElGVAkoOCkKKyNkZWZpbmUgUzVQX1BMTF9TRElWX1NISUZUCSgwKQorCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzNXBjMXh4X2dldF9wbGwodW5zaWduZWQgbG9uZyBiYXNlY2xrLAorCQkJCQkgICAgdTMyIHBsbGNvbikKK3sKKwl1MzIgbWRpdiwgcGRpdiwgc2RpdjsKKwl1NjQgZnZjbyA9IGJhc2VjbGs7CisKKwltZGl2ID0gKHBsbGNvbiA+PiBTNVBfUExMX01ESVZfU0hJRlQpICYgUzVQX1BMTF9NRElWX01BU0s7CisJcGRpdiA9IChwbGxjb24gPj4gUzVQX1BMTF9QRElWX1NISUZUKSAmIFM1UF9QTExfUERJVl9NQVNLOworCXNkaXYgPSAocGxsY29uID4+IFM1UF9QTExfU0RJVl9TSElGVCkgJiBTNVBfUExMX1NESVZfTUFTSzsKKworCWZ2Y28gKj0gbWRpdjsKKwlkb19kaXYoZnZjbywgKHBkaXYgPDwgc2RpdikpOworCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWZ2Y287Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YzgzOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaApAQCAtMCwwICsxLDQyMSBAQAorLyogYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxWFggY2xvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX1BMQVRfUkVHU19DTE9DS19ICisjZGVmaW5lIF9fUExBVF9SRUdTX0NMT0NLX0ggX19GSUxFX18KKworI2RlZmluZSBTNVBDMVhYX0NMS1JFRyh4KQkJKFM1UEMxWFhfVkFfQ0xLICsgKHgpKQorCisjZGVmaW5lIFM1UEMxWFhfQVBMTF9MT0NLCQlTNVBDMVhYX0NMS1JFRygweDAwKQorI2RlZmluZSBTNVBDMVhYX01QTExfTE9DSwkJUzVQQzFYWF9DTEtSRUcoMHgwNCkKKyNkZWZpbmUgUzVQQzFYWF9FUExMX0xPQ0sJCVM1UEMxWFhfQ0xLUkVHKDB4MDgpCisjZGVmaW5lIFM1UEMxMDBfSFBMTF9MT0NLCQlTNVBDMVhYX0NMS1JFRygweDBDKQorCisjZGVmaW5lIFM1UEMxWFhfQVBMTF9DT04JCVM1UEMxWFhfQ0xLUkVHKDB4MTAwKQorI2RlZmluZSBTNVBDMVhYX01QTExfQ09OCQlTNVBDMVhYX0NMS1JFRygweDEwNCkKKyNkZWZpbmUgUzVQQzFYWF9FUExMX0NPTgkJUzVQQzFYWF9DTEtSRUcoMHgxMDgpCisjZGVmaW5lIFM1UEMxMDBfSFBMTF9DT04JCVM1UEMxWFhfQ0xLUkVHKDB4MTBDKQorCisjZGVmaW5lIFM1UEMxWFhfQ0xLX1NSQzAJCVM1UEMxWFhfQ0xLUkVHKDB4MjAwKQorI2RlZmluZSBTNVBDMVhYX0NMS19TUkMxCQlTNVBDMVhYX0NMS1JFRygweDIwNCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtfU1JDMgkJUzVQQzFYWF9DTEtSRUcoMHgyMDgpCisjZGVmaW5lIFM1UEMxWFhfQ0xLX1NSQzMJCVM1UEMxWFhfQ0xLUkVHKDB4MjBDKQorCisjZGVmaW5lIFM1UEMxWFhfQ0xLX0RJVjAJCVM1UEMxWFhfQ0xLUkVHKDB4MzAwKQorI2RlZmluZSBTNVBDMVhYX0NMS19ESVYxCQlTNVBDMVhYX0NMS1JFRygweDMwNCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtfRElWMgkJUzVQQzFYWF9DTEtSRUcoMHgzMDgpCisjZGVmaW5lIFM1UEMxWFhfQ0xLX0RJVjMJCVM1UEMxWFhfQ0xLUkVHKDB4MzBDKQorI2RlZmluZSBTNVBDMVhYX0NMS19ESVY0CQlTNVBDMVhYX0NMS1JFRygweDMxMCkKKworI2RlZmluZSBTNVBDMTAwX0NMS19PVVQJCQlTNVBDMVhYX0NMS1JFRygweDQwMCkKKworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwCQlTNVBDMVhYX0NMS1JFRygweDUwMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMQkJUzVQQzFYWF9DTEtSRUcoMHg1MDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDIJCVM1UEMxWFhfQ0xLUkVHKDB4NTA4KQorCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTAJCVM1UEMxWFhfQ0xLUkVHKDB4NTIwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDExCQlTNVBDMVhYX0NMS1JFRygweDUyNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMgkJUzVQQzFYWF9DTEtSRUcoMHg1MjgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTMJCVM1UEMxWFhfQ0xLUkVHKDB4NTJDKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0CQlTNVBDMVhYX0NMS1JFRygweDUzMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNQkJUzVQQzFYWF9DTEtSRUcoMHg1MzQpCisKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QyMAkJUzVQQzFYWF9DTEtSRUcoMHg1NDApCisKKyNkZWZpbmUgUzVQQzEwMF9TQ0xLR0FURTAJCVM1UEMxWFhfQ0xLUkVHKDB4NTYwKQorI2RlZmluZSBTNVBDMTAwX1NDTEtHQVRFMQkJUzVQQzFYWF9DTEtSRUcoMHg1NjQpCisKKyNkZWZpbmUgUzVQQzEwMF9PVEhFUlMgICAgICAgICAgUzVQQzFYWF9DTEtSRUcoMHg4MjAwKQorCisjZGVmaW5lIFM1UEMxWFhfRVBMTF9FTiAgICAgKDE8PDMxKQorI2RlZmluZSBTNVBDMVhYX0VQTExfTUFTSyAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgUzVQQzFYWF9FUExMVkFMKF9tLCBfcCwgX3MpICAgKChfbSkgPDwgMTYgfCAoKF9wKSA8PCA4KSB8ICgoX3MpKSkKKworLyogQ0xLU1JDMCAqLworI2RlZmluZSBTNVBDMVhYX0NMS1NSQzBfQVBMTF9NQVNLCQkoMHgxPDwwKQorI2RlZmluZSBTNVBDMVhYX0NMS1NSQzBfQVBMTF9TSElGVAkJKDApCisjZGVmaW5lIFM1UEMxWFhfQ0xLU1JDMF9NUExMX01BU0sJCSgweDE8PDQpCisjZGVmaW5lIFM1UEMxWFhfQ0xLU1JDMF9NUExMX1NISUZUCQkoNCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtTUkMwX0VQTExfTUFTSwkJKDB4MTw8OCkKKyNkZWZpbmUgUzVQQzFYWF9DTEtTUkMwX0VQTExfU0hJRlQJCSg4KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfSFBMTF9NQVNLCQkoMHgxPDwxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX0hQTExfU0hJRlQJCSgxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX0FNTVVYX01BU0sJCSgweDE8PDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfQU1NVVhfU0hJRlQJCSgxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX0hSRUZfTUFTSwkJKDB4MTw8MjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMF9IUkVGX1NISUZUCQkoMjApCisjZGVmaW5lIFM1UEMxWFhfQ0xLU1JDMF9PTkVOQU5EX01BU0sJKDB4MTw8MjQpCisjZGVmaW5lIFM1UEMxWFhfQ0xLU1JDMF9PTkVOQU5EX1NISUZUCSgyNCkKKworCisvKiBDTEtTUkMxICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9VQVJUX01BU0sJCSgweDE8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9VQVJUX1NISUZUCQkoMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1NQSTBfTUFTSwkJKDB4Mzw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1NQSTBfU0hJRlQJCSg0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfU1BJMV9NQVNLCQkoMHgzPDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfU1BJMV9TSElGVAkJKDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9TUEkyX01BU0sJCSgweDM8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfU1BJMl9TSElGVAkJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfSVJEQV9NQVNLCQkoMHgzPDwxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX0lSREFfU0hJRlQJCSgxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1VIT1NUX01BU0sJCSgweDM8PDIwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfVUhPU1RfU0hJRlQJCSgyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX0NMSzQ4TV9NQVNLCQkoMHgxPDwyNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX0NMSzQ4TV9TSElGVAkoMjQpCisKKy8qIENMS1NSQzIgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01NQzBfTUFTSwkJKDB4Mzw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01NQzBfU0hJRlQJCSgwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTU1DMV9NQVNLCQkoMHgzPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTU1DMV9TSElGVAkJKDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NTUMyX01BU0sJCSgweDM8PDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NTUMyX1NISUZUCQkoOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0xDRF9NQVNLCQkoMHgzPDwxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0xDRF9TSElGVAkJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfRklNQzBfTUFTSwkJKDB4Mzw8MTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMF9TSElGVAkJKDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfRklNQzFfTUFTSwkJKDB4Mzw8MjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMV9TSElGVAkJKDIwKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfRklNQzJfTUFTSwkJKDB4Mzw8MjQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMl9TSElGVAkJKDI0KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTUlYRVJfTUFTSwkJKDB4Mzw8MjgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NSVhFUl9TSElGVAkJKDI4KQorCisvKiBDTEtTUkMzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19QV0lfTUFTSwkJKDB4Mzw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX1BXSV9TSElGVAkJKDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19IQ0xLRDJfTUFTSwkJKDB4MTw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0hDTEtEMl9TSElGVAkoNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0kyU0QyX01BU0sJCSgweDM8PDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19JMlNEMl9TSElGVAkJKDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19BVURJTzBfTUFTSwkJKDB4Nzw8MTIpCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19BVURJTzBfU0hJRlQJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfQVVESU8xX01BU0sJCSgweDc8PDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfQVVESU8xX1NISUZUCSgxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0FVRElPMl9NQVNLCQkoMHg3PDwyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0FVRElPMl9TSElGVAkoMjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19TUERJRl9NQVNLCQkoMHgzPDwyNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX1NQRElGX1NISUZUCQkoMjQpCisKKworLyogQ0xLRElWMCAqLworI2RlZmluZSBTNVBDMVhYX0NMS0RJVjBfQVBMTF9NQVNLCQkoMHgxPDwwKQorI2RlZmluZSBTNVBDMVhYX0NMS0RJVjBfQVBMTF9TSElGVAkJKDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMF9BUk1fTUFTSwkJKDB4Nzw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYwX0FSTV9TSElGVAkJKDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMF9EMF9NQVNLCQkoMHg3PDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfRDBfU0hJRlQJCSg4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfUENMS0QwX01BU0sJCSgweDc8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfUENMS0QwX1NISUZUCSgxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYwX1NFQ1NTX01BU0sJCSgweDc8PDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfU0VDU1NfU0hJRlQJCSgxNikKKworLyogQ0xLRElWMSAqLworI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfQU1fTUFTSwkJKDB4Nzw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX0FNX1NISUZUCQkoMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX01QTExfTUFTSwkJKDB4Mzw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX01QTExfU0hJRlQJCSg0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfTVBMTDJfTUFTSwkJKDB4MTw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX01QTEwyX1NISUZUCQkoOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX0QxX01BU0sJCSgweDc8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfRDFfU0hJRlQJCSgxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX1BDTEtEMV9NQVNLCQkoMHg3PDwxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX1BDTEtEMV9TSElGVAkoMTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9PTkVOQU5EX01BU0sJKDB4Mzw8MjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9PTkVOQU5EX1NISUZUCSgyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX0NBTV9NQVNLCQkoMHgxRjw8MjQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9DQU1fU0hJRlQJCSgyNCkKKworLyogQ0xLRElWMiAqLworI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfVUFSVF9NQVNLCQkoMHg3PDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfVUFSVF9TSElGVAkJKDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9TUEkwX01BU0sJCSgweGY8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9TUEkwX1NISUZUCQkoNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTFfTUFTSwkJKDB4Zjw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTFfU0hJRlQJCSg4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfU1BJMl9NQVNLCQkoMHhmPDwxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTJfU0hJRlQJCSgxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX0lSREFfTUFTSwkJKDB4Zjw8MTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9JUkRBX1NISUZUCQkoMTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9VSE9TVF9NQVNLCQkoMHhmPDwyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1VIT1NUX1NISUZUCQkoMjApCisKKy8qIENMS0RJVjMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX01NQzBfTUFTSwkJKDB4Zjw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX01NQzBfU0hJRlQJCSgwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTU1DMV9NQVNLCQkoMHhmPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTU1DMV9TSElGVAkJKDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19NTUMyX01BU0sJCSgweGY8PDgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19NTUMyX1NISUZUCQkoOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0xDRF9NQVNLCQkoMHhmPDwxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0xDRF9TSElGVAkJKDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfRklNQzBfTUFTSwkJKDB4Zjw8MTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMF9TSElGVAkJKDE2KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfRklNQzFfTUFTSwkJKDB4Zjw8MjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMV9TSElGVAkJKDIwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfRklNQzJfTUFTSwkJKDB4Zjw8MjQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMl9TSElGVAkJKDI0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfSERNSV9NQVNLCQkoMHhmPDwyOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0hETUlfU0hJRlQJCSgyOCkKKworLyogQ0xLRElWNCAqLworI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfUFdJX01BU0sJCSgweDc8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9QV0lfU0hJRlQJCSgwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfSENMS0QyX01BU0sJCSgweDc8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9IQ0xLRDJfU0hJRlQJKDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9JMlNEMl9NQVNLCQkoMHhmPDw4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfSTJTRDJfU0hJRlQJCSg4KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfQVVESU8wX01BU0sJCSgweGY8PDEyKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfQVVESU8wX1NISUZUCSgxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0FVRElPMV9NQVNLCQkoMHhmPDwxNikKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0FVRElPMV9TSElGVAkoMTYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9BVURJTzJfTUFTSwkJKDB4Zjw8MjApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9BVURJTzJfU0hJRlQJKDIwKQorCisKKy8qIEhDTEtEMC9QQ0xLRDAgQ2xvY2sgR2F0ZSAwIFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwX0lOVEMJCSgxPDwwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwX1RaSUMJCSgxPDwxKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwX0NGQ09OCQkoMTw8MikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMF9NRE1BCQkoMTw8MykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMF9HMkQJCSgxPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAwX1NFQ1NTCQkoMTw8NSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMF9DU1NZUwkJKDE8PDYpCisKKy8qIEhDTEtEMC9QQ0xLRDAgQ2xvY2sgR2F0ZSAxIFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAxX0RNQwkJKDE8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDFfU1JPTUMJCSgxPDwxKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAxX09ORU5BTkQJCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAxX05GQ09OCQkoMTw8MykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMV9JTlRNRU0JCSgxPDw0KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDAxX0VCSQkJKDE8PDUpCisKKy8qIFBDTEtEMCBDbG9jayBHYXRlIDIgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMDJfU0VDS0VZCQkoMTw8MSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMl9TRE0JCSgxPDwyKQorCisvKiBIQ0xLRDEvUENMS0QxIENsb2NrIEdhdGUgMCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMF9QRE1BMAkJKDE8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTBfUERNQTEJCSgxPDwxKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEwX1VTQkhPU1QJCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEwX1VTQk9URwkJKDE8PDMpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTBfTU9ERU1JRgkJKDE8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTBfSFNNTUMwCQkoMTw8NSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMF9IU01NQzEJCSgxPDw2KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEwX0hTTU1DMgkJKDE8PDcpCisKKy8qIEhDTEtEMS9QQ0xLRDEgQ2xvY2sgR2F0ZSAxIFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDExX0xDRAkJKDE8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTFfUk9UQVRPUgkJKDE8PDEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTFfRklNQzAJCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDExX0ZJTUMxCQkoMTw8MykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMV9GSU1DMgkJKDE8PDQpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTFfSlBFRwkJKDE8PDUpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTFfRFNJCQkoMTw8NikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMV9DU0kJCSgxPDw3KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDExX0czRAkJKDE8PDgpCisKKy8qIEhDTEtEMS9QQ0xLRDEgQ2xvY2sgR2F0ZSAyIFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEyX1RWCQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxMl9WUAkJKDE8PDEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTJfTUlYRVIJCSgxPDwyKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEyX0hETUkJCSgxPDwzKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEyX01GQwkJKDE8PDQpCisKKy8qIEhDTEtEMS9QQ0xLRDEgQ2xvY2sgR2F0ZSAzIFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEzX0NISVBJRAkJKDE8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTNfR1BJTwkJKDE8PDEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTNfQVBDCQkoMTw8MikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxM19JRUMJCSgxPDwzKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDEzX1BXTQkJKDE8PDYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTNfU1lTVElNRVIJKDE8PDcpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTNfV0RUCQkoMTw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxM19SVEMJCSgxPDw5KQorCisvKiBIQ0xLRDEvUENMS0QxIENsb2NrIEdhdGUgNCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9VQVJUMAkJKDE8PDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTRfVUFSVDEJCSgxPDwxKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X1VBUlQyCQkoMTw8MikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9VQVJUMwkJKDE8PDMpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTRfSUlDCQkoMTw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9IRE1JX0lJQwkoMTw8NSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9TUEkwCQkoMTw8NikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9TUEkxCQkoMTw8NykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9TUEkyCQkoMTw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9JUkRBCQkoMTw8OSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9DQ0FOMAkJKDE8PDEwKQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE0X0NDQU4xCQkoMTw8MTEpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTRfSFNJVFgJCSgxPDwxMikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNF9IU0lSWAkJKDE8PDEzKQorCisvKiBIQ0xLRDEvUENMS0QxIENsb2NrIEdhdGUgNSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9JSVMwCQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9JSVMxCQkoMTw8MSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9JSVMyCQkoMTw8MikKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9BQzk3CQkoMTw8MykKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9QQ00wCQkoMTw8NCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9QQ00xCQkoMTw8NSkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9TUERJRgkJKDE8PDYpCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMTVfVFNBREMJCSgxPDw3KQorI2RlZmluZSBTNVBDMTAwX0NMS0dBVEVfRDE1X0tFWUlGCQkoMTw8OCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QxNV9DRwkJKDE8PDkpCisKKy8qIEhDTEtEMiBDbG9jayBHYXRlIDAgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UEMxMDBfQ0xLR0FURV9EMjBfSENMS0QyCQkoMTw8MCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QyMF9JMlNEMgkJKDE8PDEpCisKKy8qIFNwZWNpYWwgQ2xvY2sgR2F0ZSAwIFJlZ2lzdGVycyAqLworI2RlZmluZQlTNVBDMVhYX0NMS0dBVEVfU0NMSzBfSFBNCQkoMTw8MCkKKyNkZWZpbmUJUzVQQzFYWF9DTEtHQVRFX1NDTEswX1BXSQkJKDE8PDEpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9PTkVOQU5ECSgxPDwyKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfVUFSVAkJKDE8PDMpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkwCQkoMTw8NCkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX1NQSTEJCSgxPDw1KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfU1BJMgkJKDE8PDYpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkwXzQ4CSgxPDw3KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfU1BJMV80OAkoMTw8OCkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX1NQSTJfNDgJKDE8PDkpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9JUkRBCQkoMTw8MTApCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9VU0JIT1NUCSgxPDwxMSkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzAJCSgxPDwxMikKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzEJCSgxPDwxMykKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzIJCSgxPDwxNCkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzBfNDgJKDE8PDE1KQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzBfTU1DMV80OAkoMTw8MTYpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9NTUMyXzQ4CSgxPDwxNykKKworLyogU3BlY2lhbCBDbG9jayBHYXRlIDEgUmVnaXN0ZXJzICovCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9MQ0QJCSgxPDwwKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfRklNQzAJCSgxPDwxKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfRklNQzEJCSgxPDwyKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfRklNQzIJCSgxPDwzKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfVFY1NAkJKDE8PDQpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9WREFDNTQJKDE8PDUpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9NSVhFUgkJKDE8PDYpCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9IRE1JCQkoMTw8NykKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0FVRElPMAkoMTw8OCkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0FVRElPMQkoMTw8OSkKKyNkZWZpbmUJUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0FVRElPMgkoMTw8MTApCisjZGVmaW5lCVM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9TUERJRgkJKDE8PDExKQorI2RlZmluZQlTNVBDMTAwX0NMS0dBVEVfU0NMSzFfQ0FNCQkoMTw8MTIpCisKKy8qIHJlZ2lzdGVyIGZvciBwb3dlciBtYW5hZ2VtZW50ICovCisjZGVmaW5lIFM1UEMxMDBfUFdSX0NGRyAJCVM1UEMxWFhfQ0xLUkVHKDB4ODAwMCkKKyNkZWZpbmUgUzVQQzEwMF9FSU5UX1dBS0VVUF9NQVNLIAlTNVBDMVhYX0NMS1JFRygweDgwMDQpCisjZGVmaW5lIFM1UEMxMDBfTk9STUFMX0NGRyAJCVM1UEMxWFhfQ0xLUkVHKDB4ODAxMCkKKyNkZWZpbmUgUzVQQzEwMF9TVE9QX0NGRyAJCVM1UEMxWFhfQ0xLUkVHKDB4ODAxNCkKKyNkZWZpbmUgUzVQQzEwMF9TTEVFUF9DRkcgCQlTNVBDMVhYX0NMS1JFRygweDgwMTgpCisjZGVmaW5lIFM1UEMxMDBfU1RPUF9NRU1fQ0ZHIAlTNVBDMVhYX0NMS1JFRygweDgwMUMpCisjZGVmaW5lIFM1UEMxMDBfT1NDX0ZSRVEgCQlTNVBDMVhYX0NMS1JFRygweDgxMDApCisjZGVmaW5lIFM1UEMxMDBfT1NDX1NUQUJMRSAJCVM1UEMxWFhfQ0xLUkVHKDB4ODEwNCkKKyNkZWZpbmUgUzVQQzEwMF9QV1JfU1RBQkxFIAkJUzVQQzFYWF9DTEtSRUcoMHg4MTA4KQorI2RlZmluZSBTNVBDMTAwX01UQ19TVEFCTEUgCQlTNVBDMVhYX0NMS1JFRygweDgxMTApCisjZGVmaW5lIFM1UEMxMDBfQ0xBTVBfU1RBQkxFIAlTNVBDMVhYX0NMS1JFRygweDgxMTQpCisjZGVmaW5lIFM1UEMxMDBfT1RIRVJTIAkJUzVQQzFYWF9DTEtSRUcoMHg4MjAwKQorI2RlZmluZSBTNVBDMTAwX1JTVF9TVEFUIAkJUzVQQzFYWF9DTEtSRUcoMHg4MzAwKQorI2RlZmluZSBTNVBDMTAwX1dBS0VVUF9TVEFUIAlTNVBDMVhYX0NMS1JFRygweDgzMDQpCisjZGVmaW5lIFM1UEMxMDBfQkxLX1BXUl9TVEFUIAlTNVBDMVhYX0NMS1JFRygweDgzMDgpCisjZGVmaW5lIFM1UEMxMDBfSU5GT1JNMCAJCVM1UEMxWFhfQ0xLUkVHKDB4ODQwMCkKKyNkZWZpbmUgUzVQQzEwMF9JTkZPUk0xIAkJUzVQQzFYWF9DTEtSRUcoMHg4NDA0KQorI2RlZmluZSBTNVBDMTAwX0lORk9STTIgCQlTNVBDMVhYX0NMS1JFRygweDg0MDgpCisjZGVmaW5lIFM1UEMxMDBfSU5GT1JNMyAJCVM1UEMxWFhfQ0xLUkVHKDB4ODQwQykKKyNkZWZpbmUgUzVQQzEwMF9JTkZPUk00IAkJUzVQQzFYWF9DTEtSRUcoMHg4NDEwKQorI2RlZmluZSBTNVBDMTAwX0lORk9STTUgCQlTNVBDMVhYX0NMS1JFRygweDg0MTQpCisjZGVmaW5lIFM1UEMxMDBfSU5GT1JNNiAJCVM1UEMxWFhfQ0xLUkVHKDB4ODQxOCkKKyNkZWZpbmUgUzVQQzEwMF9JTkZPUk03IAkJUzVQQzFYWF9DTEtSRUcoMHg4NDFDKQorI2RlZmluZSBTNVBDMTAwX0RDR0lEWF9NQVAwIAlTNVBDMVhYX0NMS1JFRygweDg1MDApCisjZGVmaW5lIFM1UEMxMDBfRENHSURYX01BUDEgCVM1UEMxWFhfQ0xLUkVHKDB4ODUwNCkKKyNkZWZpbmUgUzVQQzEwMF9EQ0dJRFhfTUFQMiAJUzVQQzFYWF9DTEtSRUcoMHg4NTA4KQorI2RlZmluZSBTNVBDMTAwX0RDR1BFUkZfTUFQMCAJUzVQQzFYWF9DTEtSRUcoMHg4NTBDKQorI2RlZmluZSBTNVBDMTAwX0RDR1BFUkZfTUFQMSAJUzVQQzFYWF9DTEtSRUcoMHg4NTEwKQorI2RlZmluZSBTNVBDMTAwX0RWQ0lEWF9NQVAgCQlTNVBDMVhYX0NMS1JFRygweDg1MTQpCisjZGVmaW5lIFM1UEMxMDBfRlJFUV9DUFUgCQlTNVBDMVhYX0NMS1JFRygweDg1MTgpCisjZGVmaW5lIFM1UEMxMDBfRlJFUV9EUE0gCQlTNVBDMVhYX0NMS1JFRygweDg1MUMpCisjZGVmaW5lIFM1UEMxMDBfRFZTRU1DTEtfRU4gCVM1UEMxWFhfQ0xLUkVHKDB4ODUyMCkKKyNkZWZpbmUgUzVQQzEwMF9BUExMX0NPTl9MOCAJUzVQQzFYWF9DTEtSRUcoMHg4NjAwKQorI2RlZmluZSBTNVBDMTAwX0FQTExfQ09OX0w3IAlTNVBDMVhYX0NMS1JFRygweDg2MDQpCisjZGVmaW5lIFM1UEMxMDBfQVBMTF9DT05fTDYgCVM1UEMxWFhfQ0xLUkVHKDB4ODYwOCkKKyNkZWZpbmUgUzVQQzEwMF9BUExMX0NPTl9MNSAJUzVQQzFYWF9DTEtSRUcoMHg4NjBDKQorI2RlZmluZSBTNVBDMTAwX0FQTExfQ09OX0w0IAlTNVBDMVhYX0NMS1JFRygweDg2MTApCisjZGVmaW5lIFM1UEMxMDBfQVBMTF9DT05fTDMgCVM1UEMxWFhfQ0xLUkVHKDB4ODYxNCkKKyNkZWZpbmUgUzVQQzEwMF9BUExMX0NPTl9MMiAJUzVQQzFYWF9DTEtSRUcoMHg4NjE4KQorI2RlZmluZSBTNVBDMTAwX0FQTExfQ09OX0wxIAlTNVBDMVhYX0NMS1JFRygweDg2MUMpCisjZGVmaW5lIFM1UEMxMDBfSUVNX0NPTlRST0wgCVM1UEMxWFhfQ0xLUkVHKDB4ODYyMCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVZfSUVNX0w4IAlTNVBDMVhYX0NMS1JFRygweDg3MDApCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWX0lFTV9MNyAJUzVQQzFYWF9DTEtSRUcoMHg4NzA0KQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVl9JRU1fTDYgCVM1UEMxWFhfQ0xLUkVHKDB4ODcwOCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVZfSUVNX0w1IAlTNVBDMVhYX0NMS1JFRygweDg3MEMpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWX0lFTV9MNCAJUzVQQzFYWF9DTEtSRUcoMHg4NzEwKQorI2RlZmluZSBTNVBDMTAwX0NMS0RJVl9JRU1fTDMgCVM1UEMxWFhfQ0xLUkVHKDB4ODcxNCkKKyNkZWZpbmUgUzVQQzEwMF9DTEtESVZfSUVNX0wyIAlTNVBDMVhYX0NMS1JFRygweDg3MTgpCisjZGVmaW5lIFM1UEMxMDBfQ0xLRElWX0lFTV9MMSAJUzVQQzFYWF9DTEtSRUcoMHg4NzFDKQorI2RlZmluZSBTNVBDMTAwX0lFTV9IUE1DTEtfRElWIAlTNVBDMVhYX0NMS1JFRygweDg3MjQpCisKKyNkZWZpbmUgUzVQQzEwMF9TV1JFU0VUCQlTNVBDMVhYX0NMS1JFRygweDEwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9PTkRfU1dSRVNFVAkJUzVQQzFYWF9DTEtSRUcoMHgxMDAwMDgpCisjZGVmaW5lIFM1UEMxMDBfR0VOX0NUUkwJCVM1UEMxWFhfQ0xLUkVHKDB4MTAwMTAwKQorI2RlZmluZSBTNVBDMTAwX0dFTl9TVEFUVVMJCVM1UEMxWFhfQ0xLUkVHKDB4MTAwMTA0KQorI2RlZmluZSBTNVBDMTAwX01FTV9TWVNfQ0ZHCQlTNVBDMVhYX0NMS1JFRygweDEwMDIwMCkKKyNkZWZpbmUgUzVQQzEwMF9DQU1fTVVYX1NFTAkJUzVQQzFYWF9DTEtSRUcoMHgxMDAzMDApCisjZGVmaW5lIFM1UEMxMDBfTUlYRVJfT1VUX1NFTAlTNVBDMVhYX0NMS1JFRygweDEwMDMwNCkKKyNkZWZpbmUgUzVQQzEwMF9MUE1QX01PREVfU0VMCVM1UEMxWFhfQ0xLUkVHKDB4MTAwMzA4KQorI2RlZmluZSBTNVBDMTAwX01JUElfUEhZX0NPTjAJUzVQQzFYWF9DTEtSRUcoMHgxMDA0MDApCisjZGVmaW5lIFM1UEMxMDBfTUlQSV9QSFlfQ09OMQlTNVBDMVhYX0NMS1JFRygweDEwMDQxNCkKKyNkZWZpbmUgUzVQQzEwMF9IRE1JX1BIWV9DT04wCVM1UEMxWFhfQ0xLUkVHKDB4MTAwNDIwKQorCisjZGVmaW5lIFM1UEMxMDBfQ0ZHX1dGSV9DTEVBTgkofigzPDw1KSkKKyNkZWZpbmUgUzVQQzEwMF9DRkdfV0ZJX0lETEUJKDE8PDUpCisjZGVmaW5lIFM1UEMxMDBfQ0ZHX1dGSV9TVE9QCSgyPDw1KQorI2RlZmluZSBTNVBDMTAwX0NGR19XRklfU0xFRVAJKDM8PDUpCisKKyNkZWZpbmUgUzVQQzEwMF9PVEhFUl9TWVNfSU5UCTI0CisjZGVmaW5lIFM1UEMxMDBfT1RIRVJfU1RBX1RZUEUJMjMKKyNkZWZpbmUgU1RBX1RZUEVfRVhQT04JCTAKKyNkZWZpbmUgU1RBX1RZUEVfU0ZSCQkxCisKKyNkZWZpbmUgUzVQQzEwMF9QV1JfU1RBX0VYUF9TQ0FMRQkwCisjZGVmaW5lIFM1UEMxMDBfUFdSX1NUQV9DTlQJCTQKKworI2RlZmluZSBTNVBDMTAwX1BXUl9TVEFCTEVfQ09VTlQJODU1MDAKKworI2RlZmluZSBTNVBDMTAwX1NMRUVQX0NGR19PU0NfRU4JMAorCisvKiBPVEhFUlMgUmVzZ2lzdGVyICovCisjZGVmaW5lIFM1UEMxMDBfT1RIRVJTX1VTQl9TSUdfTUFTSyAJKDEgPDwgMTYpCisjZGVmaW5lIFM1UEMxMDBfT1RIRVJTX01JUElfRFBIWV9FTgkJKDEgPDwgMjgpCisKKy8qIE1JUEkgRC1QSFkgQ29udHJvbCBSZWdpc3RlciAwICovCisjZGVmaW5lIFM1UEMxMDBfTUlQSV9QSFlfQ09OMF9NX1JFU0VUTgkoMSA8PCAxKQorI2RlZmluZSBTNVBDMTAwX01JUElfUEhZX0NPTjBfU19SRVNFVE4JKDEgPDwgMCkKKworI2VuZGlmIC8qIF9QTEFUX1JFR1NfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9zNXBjMTAwLmggYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3M1cGMxMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWUyNzUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9zNXBjMTAwLmgKQEAgLTAsMCArMSw2NSBAQAorLyogYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9zNXBjMTAwLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBzNXBjMTAwIGNwdSBzdXBwb3J0CisgKgorICogQmFzZWQgb24gcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9zM2M2NDAwLmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogQ29tbW9uIGluaXQgY29kZSBmb3IgUzVQQzEwMCByZWxhdGVkIFNvQ3MgKi8KK2V4dGVybiAgaW50IHM1cGMxMDBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cGMxMDBfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgczVwYzEwMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CitleHRlcm4gIGludCBzNXBjMTAwX3JlZ2lzdGVyX2Jhc2VjbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsKTsKK2V4dGVybiB2b2lkIHM1cGMxMDBfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBzNXBjMTAwX2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKK2V4dGVybiB2b2lkIHM1cGMxMDBfY29tbW9uX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pOworZXh0ZXJuIHZvaWQgczVwYzEwMF9yZWdpc3Rlcl9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBzNXBjMTAwX3NldHVwX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHM1cGMxMDBfc3lzY2xhc3M7CisKKyNkZWZpbmUgczVwYzEwMF9pbml0X3VhcnRzIHM1cGMxMDBfY29tbW9uX2luaXRfdWFydHMKKworLyogU29tZSBkYXksIGJlbG93cyB3aWxsIGJlIG1vdmVkIHRvIHBsYXQtczVwYy9pbmNsdWRlL3BsYXQvY3B1LmggKi8KK2V4dGVybiB2b2lkIHM1cGMxeHhfaW5pdF9pcnEodTMyICp2aWNfdmFsaWQsIGludCBudW0pOworZXh0ZXJuIHZvaWQgczVwYzF4eF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7CisKKy8qIFNvbWUgZGF5LCBiZWxvd3Mgd2lsbCBiZSBtb3ZlZCB0byBwbGF0LXM1cGMvaW5jbHVkZS9wbGF0L2Nsb2NrLmggKi8KK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19ocGxsOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2hkMDsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19wZDA7CitleHRlcm4gc3RydWN0IGNsayBjbGtfNTRtOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2RvdXRfbXBsbDI7CitleHRlcm4gdm9pZCBzNXBjMXh4X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiBpbnQgczVwYzF4eF9zY2xrMF9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSk7CitleHRlcm4gaW50IHM1cGMxeHhfc2NsazFfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOworCisvKiBTb21lIGRheSwgYmVsb3dzIHdpbGwgYmUgbW92ZWQgdG8gcGxhdC1zNXBjL2luY2x1ZGUvcGxhdC9kZXZzLmggKi8KK2V4dGVybiBzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyBzNXBjMXh4X3VhcnRfcmVzb3VyY2VzW107CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2cyZDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfZzNkOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV92cHA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3R2ZW5jOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90dnNjYWxlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfcm90YXRvcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfanBlZzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfb25lbmFuZDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiX290Z2hjZDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfa2V5cGFkOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90czsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfZzNkOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zbWM5MTF4OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9maW1jMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfZmltYzE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX21mYzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYWM5NzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfZmltYzA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2ZpbWMxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9maW1jMjsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2lycS5jIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDZkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaXJxLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczVwYzF4eC9pcnEuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKiAgICAgIEJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBTNVBDMVhYIC0gSW50ZXJydXB0IGhhbmRsaW5nCisgKgorICogQmFzZWQgb24gcGxhdC1zM2M2NHh4L2lycS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS92aWMuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogVGltZXIgaW50ZXJydXB0IGhhbmRsaW5nICovCisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIodW5zaWduZWQgaW50IGJhc2VfaXJxLCB1bnNpZ25lZCBpbnQgc3ViX2lycSkKK3sKKwlnZW5lcmljX2hhbmRsZV9pcnEoc3ViX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIwKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMik7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIzKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMyk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXI0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSNCk7Cit9CisKKy8qIFdlIGFzc3VtZSB0aGUgSVJRX1RJTUVSMC4uSVJRX1RJTUVSNCByYW5nZSBpcyBjb250aW51b3VzLiAqLworCitzdGF0aWMgdm9pZCBzM2NfaXJxX3RpbWVyX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgcmVnID0gX19yYXdfcmVhZGwoUzNDNjRYWF9USU5UX0NTVEFUKTsKKworCXJlZyAmPSAweDFmOyAgLyogbWFzayBvdXQgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJcmVnICY9IH4oMSA8PCAoaXJxIC0gSVJRX1RJTUVSMCkpOworCV9fcmF3X3dyaXRlbChyZWcsIFMzQzY0WFhfVElOVF9DU1RBVCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdGltZXJfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIHJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfVElOVF9DU1RBVCk7CisKKwlyZWcgJj0gMHgxZjsgIC8qIG1hc2sgb3V0IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCXJlZyB8PSAxIDw8IChpcnEgLSBJUlFfVElNRVIwKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX1RJTlRfQ1NUQVQpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3RpbWVyX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1RJTlRfQ1NUQVQpOworCisJcmVnICY9IDB4MWY7CisJcmVnIHw9ICgxIDw8IDUpIDw8IChpcnEgLSBJUlFfVElNRVIwKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX1RJTlRfQ1NUQVQpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHMzY19pcnFfdGltZXIgPSB7CisJLm5hbWUJCT0gInMzYy10aW1lciIsCisJLm1hc2sJCT0gczNjX2lycV90aW1lcl9tYXNrLAorCS51bm1hc2sJCT0gczNjX2lycV90aW1lcl91bm1hc2ssCisJLmFjawkJPSBzM2NfaXJxX3RpbWVyX2FjaywKK307CisKK3N0cnVjdCB1YXJ0X2lycSB7CisJdm9pZCBfX2lvbWVtCSpyZWdzOworCXVuc2lnbmVkIGludAkgYmFzZV9pcnE7CisJdW5zaWduZWQgaW50CSBwYXJlbnRfaXJxOworfTsKKworLyogTm90ZSwgd2UgbWFrZSB1c2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgcGFyZW50IElSUXMsIElSUV9VQVJUWzAuLjNdCisgKiBhcmUgY29uc2VjdXRpdmUgd2hlbiBsb29raW5nIHVwIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGRlbXV4IHJvdXRpbmVzLgorICovCitzdGF0aWMgc3RydWN0IHVhcnRfaXJxIHVhcnRfaXJxc1tdID0geworCVswXSA9IHsKKwkJLnJlZ3MJCT0gKHZvaWQgKilTM0NfVkFfVUFSVDAsCisJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UwLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMCwKKwl9LAorCVsxXSA9IHsKKwkJLnJlZ3MJCT0gKHZvaWQgKilTM0NfVkFfVUFSVDEsCisJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UxLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMSwKKwl9LAorCVsyXSA9IHsKKwkJLnJlZ3MJCT0gKHZvaWQgKilTM0NfVkFfVUFSVDIsCisJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UyLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMiwKKwl9LAorCVszXSA9IHsKKwkJLnJlZ3MJCT0gKHZvaWQgKilTM0NfVkFfVUFSVDMsCisJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UzLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMywKKwl9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnMzY19pcnFfdWFydF9iYXNlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHVhcnRfaXJxICp1aXJxID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlyZXR1cm4gdWlycS0+cmVnczsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjX2lycV91YXJ0X2JpdCh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiBpcnEgJiAzOworfQorCisvKiBVQVJUIGludGVycnVwdCByZWdpc3RlcnMsIG5vdCB3b3J0aCBhZGRpbmcgdG8gc2VwZXJhdGUgaW5jbHVkZSBoZWFkZXIgKi8KKyNkZWZpbmUgUzNDNjRYWF9VSU5UUAkweDMwCisjZGVmaW5lIFMzQzY0WFhfVUlOVFNQCTB4MzQKKyNkZWZpbmUgUzNDNjRYWF9VSU5UTQkweDM4CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdWFydF9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7CisJcmVnIHw9ICgxIDw8IGJpdCk7CisJX19yYXdfd3JpdGVsKHJlZywgcmVncyArIFMzQzY0WFhfVUlOVE0pOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3VhcnRfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7CisJdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwocmVncyArIFMzQzY0WFhfVUlOVE0pOworCXJlZyB8PSAoMSA8PCBiaXQpOworCV9fcmF3X3dyaXRlbChyZWcsIHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIHJlZ3MgKyBTM0M2NFhYX1VJTlRQKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7CisJdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwocmVncyArIFMzQzY0WFhfVUlOVE0pOworCXJlZyAmPSB+KDEgPDwgYml0KTsKKwlfX3Jhd193cml0ZWwocmVnLCByZWdzICsgUzNDNjRYWF9VSU5UTSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdWFydF9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzM2NfaXJxX3VhcnRfYmFzZShpcnEpOworCXVuc2lnbmVkIGludCBiaXQgPSBzM2NfaXJxX3VhcnRfYml0KGlycSk7CisKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIHJlZ3MgKyBTM0M2NFhYX1VJTlRQKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF91YXJ0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgdWFydF9pcnEgKnVpcnEgPSAmdWFydF9pcnFzW2lycSAtIElSUV9VQVJUMF07CisJdTMyIHBlbmQgPSBfX3Jhd19yZWFkbCh1aXJxLT5yZWdzICsgUzNDNjRYWF9VSU5UUCk7CisJaW50IGJhc2UgPSB1aXJxLT5iYXNlX2lycTsKKworCWlmIChwZW5kICYgKDEgPDwgMCkpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlKTsKKwlpZiAocGVuZCAmICgxIDw8IDEpKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoYmFzZSArIDEpOworCWlmIChwZW5kICYgKDEgPDwgMikpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlICsgMik7CisJaWYgKHBlbmQgJiAoMSA8PCAzKSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UgKyAzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3VhcnQgPSB7CisJLm5hbWUJCT0gInMzYy11YXJ0IiwKKwkubWFzawkJPSBzM2NfaXJxX3VhcnRfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfdWFydF91bm1hc2ssCisJLm1hc2tfYWNrCT0gczNjX2lycV91YXJ0X21hc2thY2ssCisJLmFjawkJPSBzM2NfaXJxX3VhcnRfYWNrLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHM1cGMxeHhfdWFydF9pcnEoc3RydWN0IHVhcnRfaXJxICp1aXJxKQoreworCXZvaWQgX19pb21lbSAqcmVnX2Jhc2UgPSB1aXJxLT5yZWdzOworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IG9mZnM7CisKKwkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIGF0IHRoZSBzdGFydC4gKi8KKwlfX3Jhd193cml0ZWwoMHhmLCByZWdfYmFzZSArIFMzQzY0WFhfVUlOVE0pOworCisJZm9yIChvZmZzID0gMDsgb2ZmcyA8IDM7IG9mZnMrKykgeworCQlpcnEgPSB1aXJxLT5iYXNlX2lycSArIG9mZnM7CisKKwkJc2V0X2lycV9jaGlwKGlycSwgJnMzY19pcnFfdWFydCk7CisJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgdWlycSk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIodWlycS0+cGFyZW50X2lycSwgczNjX2lycV9kZW11eF91YXJ0KTsKK30KKwordm9pZCBfX2luaXQgczVwYzF4eF9pbml0X2lycSh1MzIgKnZpY192YWxpZCwgaW50IG51bSkKK3sKKwlpbnQgaTsKKwlpbnQgdWFydCwgaXJxOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXNpbmcgaW50ZXJydXB0c1xuIiwgX19mdW5jX18pOworCisJLyogaW5pdGlhbGlzZSB0aGUgcGFpciBvZiBWSUNzICovCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQl2aWNfaW5pdCgodm9pZCAqKVM1UEMxWFhfVkFfVklDKGkpLCBTM0NfSVJRKGkgKiBTM0NfSVJRX09GRlNFVCksCisJCQkJdmljX3ZhbGlkW2ldLCAwKTsKKworCS8qIGFkZCB0aGUgdGltZXIgc3ViLWlycXMgKi8KKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjAsIHMzY19pcnFfZGVtdXhfdGltZXIwKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVIxLCBzM2NfaXJxX2RlbXV4X3RpbWVyMSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1RJTUVSMiwgczNjX2lycV9kZW11eF90aW1lcjIpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjMsIHMzY19pcnFfZGVtdXhfdGltZXIzKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVI0LCBzM2NfaXJxX2RlbXV4X3RpbWVyNCk7CisKKwlmb3IgKGlycSA9IElSUV9USU1FUjA7IGlycSA8PSBJUlFfVElNRVI0OyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmczNjX2lycV90aW1lcik7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisJfQorCisJZm9yICh1YXJ0ID0gMDsgdWFydCA8IEFSUkFZX1NJWkUodWFydF9pcnFzKTsgdWFydCsrKQorCQlzNXBjMXh4X3VhcnRfaXJxKCZ1YXJ0X2lycXNbdWFydF0pOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zNXBjMTAwLWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvczVwYzEwMC1jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMjQwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvczVwYzEwMC1jbG9jay5jCkBAIC0wLDAgKzEsMTEzOSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtY2xvY2suYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MsIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIFM1UEMxMDAgYmFzZWQgY29tbW9uIGNsb2NrIHN1cHBvcnQKKyAqCisgKiBCYXNlZCBvbiBwbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbGwuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cGMxMDAuaD4KKworLyogZmluX2FwbGwsIGZpbl9tcGxsIGFuZCBmaW5fZXBsbCBhcmUgYWxsIHRoZSBzYW1lIGNsb2NrLCB3aGljaCB3ZSBjYWxsCisgKiBleHRfeHRhbF9tdXggZm9yIHdhbnQgb2YgYW4gYWN0dWFsIG5hbWUgZnJvbSB0aGUgbWFudWFsLgorKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2V4dF94dGFsX211eCA9IHsKKwkubmFtZQkJPSAiZXh0X3h0YWwiLAorCS5pZAkJPSAtMSwKK307CisKKyNkZWZpbmUgY2xrX2Zpbl9hcGxsIGNsa19leHRfeHRhbF9tdXgKKyNkZWZpbmUgY2xrX2Zpbl9tcGxsIGNsa19leHRfeHRhbF9tdXgKKyNkZWZpbmUgY2xrX2Zpbl9lcGxsIGNsa19leHRfeHRhbF9tdXgKKyNkZWZpbmUgY2xrX2Zpbl9ocGxsIGNsa19leHRfeHRhbF9tdXgKKworI2RlZmluZSBjbGtfZm91dF9tcGxsCWNsa19tcGxsCisKK3N0cnVjdCBjbGtfc291cmNlcyB7CisJdW5zaWduZWQgaW50CW5yX3NvdXJjZXM7CisJc3RydWN0IGNsawkqKnNvdXJjZXM7Cit9OworCitzdHJ1Y3QgY2xrc3JjX2NsayB7CisJc3RydWN0IGNsawkJY2xrOworCXVuc2lnbmVkIGludAkJbWFzazsKKwl1bnNpZ25lZCBpbnQJCXNoaWZ0OworCisJc3RydWN0IGNsa19zb3VyY2VzCSpzb3VyY2VzOworCisJdW5zaWduZWQgaW50CQlkaXZpZGVyX3NoaWZ0OworCXZvaWQgX19pb21lbQkJKnJlZ19kaXZpZGVyOworCXZvaWQgX19pb21lbQkJKnJlZ19zb3VyY2U7Cit9OworCitzdGF0aWMgaW50IGNsa19kZWZhdWx0X3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJY2xrLT5yYXRlID0gcmF0ZTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IGNsayBjbGtfMjdtID0geworCS5uYW1lCQk9ICJjbGtfMjdtIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMjcwMDAwMDAsCit9OworCitzdGF0aWMgaW50IGNsa180OG1fY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJLyogY2FuJ3QgcmVseSBvbiBjbG9jayBsb2NrLCB0aGlzIHJlZ2lzdGVyIGhhcyBvdGhlciB1c2FnZXMgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChTNVBDMVhYX0NMS19TUkMxKTsKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gUzVQQzEwMF9DTEtTUkMxX0NMSzQ4TV9NQVNLOworCWVsc2UKKwkJdmFsICY9IH5TNVBDMTAwX0NMS1NSQzFfQ0xLNDhNX01BU0s7CisKKwlfX3Jhd193cml0ZWwodmFsLCBTNVBDMVhYX0NMS19TUkMxKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNsayBjbGtfNDhtID0geworCS5uYW1lCQk9ICJjbGtfNDhtIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmVuYWJsZQkJPSBjbGtfNDhtX2N0cmwsCit9OworCitzdHJ1Y3QgY2xrIGNsa181NG0gPSB7CisJLm5hbWUJCT0gImNsa181NG0iLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSA1NDAwMDAwMCwKK307CisKK3N0cnVjdCBjbGsgY2xrX2hwbGwgPSB7CisJLm5hbWUJCT0gImhwbGwiLAorCS5pZAkJPSAtMSwKK307CisKK3N0cnVjdCBjbGsgY2xrX2hkMCA9IHsKKwkubmFtZQkJPSAiaGNsa2QwIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gMCwKKwkucGFyZW50CQk9IE5VTEwsCisJLmN0cmxiaXQJPSAwLAorCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCit9OworCitzdHJ1Y3QgY2xrIGNsa19wZDAgPSB7CisJLm5hbWUJCT0gInBjbGtkMCIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCisJLnBhcmVudAkJPSBOVUxMLAorCS5jdHJsYml0CT0gMCwKKwkuc2V0X3JhdGUJPSBjbGtfZGVmYXVsdF9zZXRyYXRlLAorfTsKKworc3RhdGljIGludCBzNXBjMXh4X2Nsa19nYXRlKHZvaWQgX19pb21lbSAqcmVnLAorCQkJCXN0cnVjdCBjbGsgKmNsaywKKwkJCQlpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBjdHJsYml0ID0gY2xrLT5jdHJsYml0OworCXUzMiBjb247CisKKwljb24gPSBfX3Jhd19yZWFkbChyZWcpOworCisJaWYgKGVuYWJsZSkKKwkJY29uIHw9IGN0cmxiaXQ7CisJZWxzZQorCQljb24gJj0gfmN0cmxiaXQ7CisKKwlfX3Jhd193cml0ZWwoY29uLCByZWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2QwMF9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwYzF4eF9jbGtfZ2F0ZShTNVBDMTAwX0NMS0dBVEVfRDAwLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9jbGtfZDAxX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfQ0xLR0FURV9EMDEsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXBjMXh4X2Nsa19kMDJfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9DTEtHQVRFX0QwMiwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2QxMF9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwYzF4eF9jbGtfZ2F0ZShTNVBDMTAwX0NMS0dBVEVfRDEwLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9jbGtfZDExX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfQ0xLR0FURV9EMTEsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXBjMXh4X2Nsa19kMTJfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9DTEtHQVRFX0QxMiwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2QxM19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwYzF4eF9jbGtfZ2F0ZShTNVBDMTAwX0NMS0dBVEVfRDEzLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9jbGtfZDE0X2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfQ0xLR0FURV9EMTQsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXBjMXh4X2Nsa19kMTVfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cGMxeHhfY2xrX2dhdGUoUzVQQzEwMF9DTEtHQVRFX0QxNSwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfY2xrX2QyMF9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwYzF4eF9jbGtfZ2F0ZShTNVBDMTAwX0NMS0dBVEVfRDIwLCBjbGssIGVuYWJsZSk7Cit9CisKK2ludCBzNXBjMXh4X3NjbGswX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfU0NMS0dBVEUwLCBjbGssIGVuYWJsZSk7Cit9CisKK2ludCBzNXBjMXh4X3NjbGsxX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBjMXh4X2Nsa19nYXRlKFM1UEMxMDBfU0NMS0dBVEUxLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzX2Rpc2FibGVbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJkc2kiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTFfRFNJLAorCX0sIHsKKwkJLm5hbWUJCT0gImNzaSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDExX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMV9DU0ksCisJfSwgeworCQkubmFtZQkJPSAiY2NhbjAiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9DQ0FOMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJjY2FuMSIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X0NDQU4xLAorCX0sIHsKKwkJLm5hbWUJCT0gImtleXBhZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9LRVlJRiwKKwl9LCB7CisJCS5uYW1lCQk9ICJoY2xrZDIiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMjBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDIwX0hDTEtEMiwKKwl9LCB7CisJCS5uYW1lCQk9ICJpaXMtZDIiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMjBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDIwX0kyU0QyLAorCX0sIHsKKwkJLm5hbWUJCT0gIm90ZyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEwX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMF9VU0JPVEcsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzW10gPSB7CisJLyogU3lzdGVtMSAoRDBfMCkgZGV2aWNlcyAqLworCXsKKwkJLm5hbWUJCT0gImludGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAwX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMF9JTlRDLAorCX0sIHsKKwkJLm5hbWUJCT0gInR6aWMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAwX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMF9UWklDLAorCX0sIHsKKwkJLm5hbWUJCT0gImNmLWF0YSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAwX0NGQ09OLAorCX0sIHsKKwkJLm5hbWUJCT0gIm1kbWEiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAwX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMF9NRE1BLAorCX0sIHsKKwkJLm5hbWUJCT0gImcyZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAwX0cyRCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzZWNzcyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAwX1NFQ1NTLAorCX0sIHsKKwkJLm5hbWUJCT0gImNzc3lzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDBfQ1NTWVMsCisJfSwKKworCS8qIE1lbW9yeSAoRDBfMSkgZGV2aWNlcyAqLworCXsKKwkJLm5hbWUJCT0gImRtYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAxX0RNQywKKwl9LCB7CisJCS5uYW1lCQk9ICJzcm9tYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAxX1NST01DLAorCX0sIHsKKwkJLm5hbWUJCT0gIm9uZW5hbmQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAxX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMV9PTkVOQU5ELAorCX0sIHsKKwkJLm5hbWUJCT0gIm5hbmQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAxX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMV9ORkNPTiwKKwl9LCB7CisJCS5uYW1lCQk9ICJpbnRtZW0iLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oZDAsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDAxX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QwMV9JTlRNRU0sCisJfSwgeworCQkubmFtZQkJPSAiZWJpIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDFfRUJJLAorCX0sCisKKwkvKiBTeXN0ZW0yIChEMF8yKSBkZXZpY2VzICovCisJeworCQkubmFtZQkJPSAic2Vja2V5IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcGQwLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QwMl9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMDJfU0VDS0VZLAorCX0sIHsKKwkJLm5hbWUJCT0gInNkbSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hkMCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMDJfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDAyX1NETSwKKwl9LAorCisJLyogRmlsZSAoRDFfMCkgZGV2aWNlcyAqLworCXsKKwkJLm5hbWUJCT0gInBkbWEwIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEwX1BETUEwLAorCX0sIHsKKwkJLm5hbWUJCT0gInBkbWExIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEwX1BETUExLAorCX0sIHsKKwkJLm5hbWUJCT0gInVzYi1ob3N0IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEwX1VTQkhPU1QsCisJfSwgeworCQkubmFtZQkJPSAibW9kZW0iLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTBfTU9ERU1JRiwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEwX0hTTU1DMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEwX0hTTU1DMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAyLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEwX0hTTU1DMiwKKwl9LAorCisJLyogTXVsdGltZWRpYTEgKEQxXzEpIGRldmljZXMgKi8KKwl7CisJCS5uYW1lCQk9ICJsY2QiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTFfTENELAorCX0sIHsKKwkJLm5hbWUJCT0gInJvdGF0b3IiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTFfUk9UQVRPUiwKKwl9LCB7CisJCS5uYW1lCQk9ICJmaW1jIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxMV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTFfRklNQzAsCisJfSwgeworCQkubmFtZQkJPSAiZmltYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDExX0ZJTUMxLAorCX0sIHsKKwkJLm5hbWUJCT0gImZpbWMiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDExX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMV9GSU1DMiwKKwl9LCB7CisJCS5uYW1lCQk9ICJqcGVnIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDExX0pQRUcsCisJfSwgeworCQkubmFtZQkJPSAiZzNkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDExX0czRCwKKwl9LAorCisJLyogTXVsdGltZWRpYTIgKEQxXzIpIGRldmljZXMgKi8KKwl7CisJCS5uYW1lCQk9ICJ0diIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEyX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMl9UViwKKwl9LCB7CisJCS5uYW1lCQk9ICJ2cCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEyX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMl9WUCwKKwl9LCB7CisJCS5uYW1lCQk9ICJtaXhlciIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEyX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxMl9NSVhFUiwKKwl9LCB7CisJCS5uYW1lCQk9ICJoZG1pIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTJfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEyX0hETUksCisJfSwgeworCQkubmFtZQkJPSAibWZjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTJfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEyX01GQywKKwl9LAorCisJLyogU3lzdGVtIChEMV8zKSBkZXZpY2VzICovCisJeworCQkubmFtZQkJPSAiY2hpcGlkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTNfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEzX0NISVBJRCwKKwl9LCB7CisJCS5uYW1lCQk9ICJncGlvIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTNfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEzX0dQSU8sCisJfSwgeworCQkubmFtZQkJPSAiYXBjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTNfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDEzX0FQQywKKwl9LCB7CisJCS5uYW1lCQk9ICJpZWMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxM19jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTNfSUVDLAorCX0sIHsKKwkJLm5hbWUJCT0gInRpbWVycyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEzX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxM19QV00sCisJfSwgeworCQkubmFtZQkJPSAic3lzdGltZXIiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxM19jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTNfU1lTVElNRVIsCisJfSwgeworCQkubmFtZQkJPSAid2F0Y2hkb2ciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxM19jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTNfV0RULAorCX0sIHsKKwkJLm5hbWUJCT0gInJ0YyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDEzX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxM19SVEMsCisJfSwKKworCS8qIENvbm5lY3Rpdml0eSAoRDFfNCkgZGV2aWNlcyAqLworCXsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9VQVJUMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfVUFSVDEsCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAyLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X1VBUlQyLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMywKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9VQVJUMywKKwl9LCB7CisJCS5uYW1lCQk9ICJpMmMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfSUlDLAorCX0sIHsKKwkJLm5hbWUJCT0gImhkbWktaTJjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X0hETUlfSUlDLAorCX0sIHsKKwkJLm5hbWUJCT0gInNwaSIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTRfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE0X1NQSTAsCisJfSwgeworCQkubmFtZQkJPSAic3BpIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfU1BJMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9TUEkyLAorCX0sIHsKKwkJLm5hbWUJCT0gImlyZGEiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTRfSVJEQSwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc2l0eCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9IU0lUWCwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc2lyeCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE0X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNF9IU0lSWCwKKwl9LAorCisJLyogQXVkaW8gKEQxXzUpIGRldmljZXMgKi8KKwl7CisJCS5uYW1lCQk9ICJpaXMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9JSVMwLAorCX0sIHsKKwkJLm5hbWUJCT0gImlpcyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X0lJUzEsCisJfSwgeworCQkubmFtZQkJPSAiaWlzIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTVfSUlTMiwKKwl9LCB7CisJCS5uYW1lCQk9ICJhYzk3IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X0FDOTcsCisJfSwgeworCQkubmFtZQkJPSAicGNtIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfY2xrX2QxNV9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9EMTVfUENNMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJwY20iLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9QQ00xLAorCX0sIHsKKwkJLm5hbWUJCT0gInNwZGlmIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X2Nsa19kMTVfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfRDE1X1NQRElGLAorCX0sIHsKKwkJLm5hbWUJCT0gImFkYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9UU0FEQywKKwl9LCB7CisJCS5uYW1lCQk9ICJrZXlpZiIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9LRVlJRiwKKwl9LCB7CisJCS5uYW1lCQk9ICJjZyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczVwYzF4eF9jbGtfZDE1X2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX0QxNV9DRywKKwl9LAorCisJLyogQXVkaW8gKEQyXzApIGRldmljZXM6IGFsbCBkaXNhYmxlZCAqLworCisJLyogU3BlY2lhbCBDbG9ja3MgMSAqLworCXsKKwkJLm5hbWUJCT0gInNjbGtfaHBtIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9IE5VTEwsCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxWFhfQ0xLR0FURV9TQ0xLMF9IUE0sCisJfSwgeworCQkubmFtZQkJPSAic2Nsa19vbmVuYW5kIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9IE5VTEwsCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9PTkVOQU5ELAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfc3BpXzQ4IiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkwXzQ4LAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfc3BpXzQ4IiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkxXzQ4LAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfc3BpXzQ4IiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkyXzQ4LAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfbW1jXzQ4IiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9NTUMwXzQ4LAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfbW1jXzQ4IiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9NTUMxXzQ4LAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfbW1jXzQ4IiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9NTUMyXzQ4LAorCX0sCisKKwkvKiBTcGVjaWFsIENsb2NrcyAyICovCisJeworCQkubmFtZQkJPSAic2Nsa190dl81NCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrXzU0bSwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGsxX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEsxX1RWNTQsCisJfSwgeworCQkubmFtZQkJPSAic2Nsa192ZGFjXzU0IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfNTRtLAorCQkuZW5hYmxlCQk9IHM1cGMxeHhfc2NsazFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfVkRBQzU0LAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfc3BkaWYiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gTlVMTCwKKwkJLmVuYWJsZQkJPSBzNXBjMXh4X3NjbGsxX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEsxX1NQRElGLAorCX0sCit9OworCit2b2lkIF9faW5pdCBzNXBjMXh4X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsa3A7CisJaW50IHJldDsKKwlpbnQgcHRyOworCisJY2xrcCA9IGluaXRfY2xvY2tzOworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrcyk7IHB0cisrLCBjbGtwKyspIHsKKwkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrICVzICglZClcbiIsCisJCQkgICAgICAgY2xrcC0+bmFtZSwgcmV0KTsKKwkJfQorCX0KKworCWNsa3AgPSBpbml0X2Nsb2Nrc19kaXNhYmxlOworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2Nsb2Nrc19kaXNhYmxlKTsgcHRyKyssIGNsa3ArKykgeworCisJCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAorCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7CisJCX0KKworCQkoY2xrcC0+ZW5hYmxlKShjbGtwLCAwKTsKKwl9CisKKwlzM2NfcHdtY2xrX2luaXQoKTsKK30KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mb3V0X2FwbGwgPSB7CisJLm5hbWUJCT0gImZvdXRfYXBsbCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zcmNfYXBsbF9saXN0W10gPSB7CisJWzBdID0gJmNsa19maW5fYXBsbCwKKwlbMV0gPSAmY2xrX2ZvdXRfYXBsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrX3NyY19hcGxsID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19hcGxsX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfYXBsbF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9hcGxsID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2FwbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc2hpZnQJCT0gUzVQQzFYWF9DTEtTUkMwX0FQTExfU0hJRlQsCisJLm1hc2sJCT0gUzVQQzFYWF9DTEtTUkMwX0FQTExfTUFTSywKKwkuc291cmNlcwk9ICZjbGtfc3JjX2FwbGwsCisJLnJlZ19zb3VyY2UJPSBTNVBDMVhYX0NMS19TUkMwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2ZvdXRfZXBsbCA9IHsKKwkubmFtZQkJPSAiZm91dF9lcGxsIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19lcGxsX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX2Zpbl9lcGxsLAorCVsxXSA9ICZjbGtfZm91dF9lcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX2VwbGwgPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX2VwbGxfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19lcGxsX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2VwbGwgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gIm1vdXRfZXBsbCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zaGlmdAkJPSBTNVBDMVhYX0NMS1NSQzBfRVBMTF9TSElGVCwKKwkubWFzawkJPSBTNVBDMVhYX0NMS1NSQzBfRVBMTF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa19zcmNfZXBsbCwKKwkucmVnX3NvdXJjZQk9IFM1UEMxWFhfQ0xLX1NSQzAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19tcGxsX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX2Zpbl9tcGxsLAorCVsxXSA9ICZjbGtfZm91dF9tcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX21wbGwgPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX21wbGxfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19tcGxsX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X21wbGwgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gIm1vdXRfbXBsbCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zaGlmdAkJPSBTNVBDMVhYX0NMS1NSQzBfTVBMTF9TSElGVCwKKwkubWFzawkJPSBTNVBDMVhYX0NMS1NSQzBfTVBMTF9NQVNLLAorCS5zb3VyY2VzCT0gJmNsa19zcmNfbXBsbCwKKwkucmVnX3NvdXJjZQk9IFM1UEMxWFhfQ0xLX1NSQzAsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMXh4X2Nsa19kb3V0bXBsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGNsa2RpdjsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogcGFyZW50IGlzICVsZFxuIiwgX19mdW5jX18sIHJhdGUpOworCisJY2xrZGl2ID0gX19yYXdfcmVhZGwoUzVQQzFYWF9DTEtfRElWMSkgJiBTNVBDMTAwX0NMS0RJVjFfTVBMTF9NQVNLOworCXJhdGUgLz0gKGNsa2RpdiA+PiBTNVBDMTAwX0NMS0RJVjFfTVBMTF9TSElGVCkgKyAxOworCisJcmV0dXJuIHJhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19kb3V0X21wbGwgPSB7CisJLm5hbWUJCT0gImRvdXRfbXBsbCIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gJmNsa19tb3V0X21wbGwuY2xrLAorCS5nZXRfcmF0ZQk9IHM1cGMxeHhfY2xrX2RvdXRtcGxsX2dldF9yYXRlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwYzF4eF9jbGtfZG91dG1wbGwyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgY2xrZGl2OworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwYXJlbnQgaXMgJWxkXG4iLCBfX2Z1bmNfXywgcmF0ZSk7CisKKwljbGtkaXYgPSBfX3Jhd19yZWFkbChTNVBDMVhYX0NMS19ESVYxKSAmIFM1UEMxMDBfQ0xLRElWMV9NUExMMl9NQVNLOworCXJhdGUgLz0gKGNsa2RpdiA+PiBTNVBDMTAwX0NMS0RJVjFfTVBMTDJfU0hJRlQpICsgMTsKKworCXJldHVybiByYXRlOworfQorCitzdHJ1Y3QgY2xrIGNsa19kb3V0X21wbGwyID0geworCS5uYW1lCQk9ICJkb3V0X21wbGwyIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX21vdXRfbXBsbC5jbGssCisJLmdldF9yYXRlCT0gczVwYzF4eF9jbGtfZG91dG1wbGwyX2dldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF91YXJ0X2xpc3RbXSA9IHsKKwkmY2xrX21vdXRfZXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwsCisJTlVMTCwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa3NldF91YXJ0ID0geworCS5zb3VyY2VzCT0gY2xrc2V0X3VhcnRfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X3VhcnRfbGlzdCksCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGtzcmNfY2xrICp0b19jbGtzcmMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2xrLCBzdHJ1Y3QgY2xrc3JjX2NsaywgY2xrKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwYzF4eF9nZXRyYXRlX2Nsa3NyYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGNsa3NyY19jbGsgKnNjbGsgPSB0b19jbGtzcmMoY2xrKTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXUzMiBjbGtkaXYgPSBfX3Jhd19yZWFkbChzY2xrLT5yZWdfZGl2aWRlcik7CisKKwljbGtkaXYgPj49IHNjbGstPmRpdmlkZXJfc2hpZnQ7CisJY2xrZGl2ICY9IDB4ZjsKKwljbGtkaXYrKzsKKworCXJhdGUgLz0gY2xrZGl2OworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgaW50IHM1cGMxeHhfc2V0cmF0ZV9jbGtzcmMoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGNsa3NyY19jbGsgKnNjbGsgPSB0b19jbGtzcmMoY2xrKTsKKwl2b2lkIF9faW9tZW0gKnJlZyA9IHNjbGstPnJlZ19kaXZpZGVyOworCXVuc2lnbmVkIGludCBkaXY7CisJdTMyIHZhbDsKKworCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShjbGssIHJhdGUpOworCWRpdiA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyByYXRlOworCWlmIChkaXYgPiAxNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOworCXZhbCAmPSB+KDB4ZiA8PCBzY2xrLT5zaGlmdCk7CisJdmFsIHw9IChkaXYgLSAxKSA8PCBzY2xrLT5zaGlmdDsKKwlfX3Jhd193cml0ZWwodmFsLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwYzF4eF9zZXRwYXJlbnRfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7CisJc3RydWN0IGNsa19zb3VyY2VzICpzcmNzID0gc2Nsay0+c291cmNlczsKKwl1MzIgY2xrc3JjID0gX19yYXdfcmVhZGwoc2Nsay0+cmVnX3NvdXJjZSk7CisJaW50IHNyY19uciA9IC0xOworCWludCBwdHI7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IHNyY3MtPm5yX3NvdXJjZXM7IHB0cisrKQorCQlpZiAoc3Jjcy0+c291cmNlc1twdHJdID09IHBhcmVudCkgeworCQkJc3JjX25yID0gcHRyOworCQkJYnJlYWs7CisJCX0KKworCWlmIChzcmNfbnIgPj0gMCkgeworCQljbGtzcmMgJj0gfnNjbGstPm1hc2s7CisJCWNsa3NyYyB8PSBzcmNfbnIgPDwgc2Nsay0+c2hpZnQ7CisKKwkJX19yYXdfd3JpdGVsKGNsa3NyYywgc2Nsay0+cmVnX3NvdXJjZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMXh4X3JvdW5kcmF0ZV9jbGtzcmMoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJaW50IGRpdjsKKworCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCisJCXJhdGUgPSBwYXJlbnRfcmF0ZTsKKwllbHNlIHsKKwkJZGl2ID0gcmF0ZSAvIHBhcmVudF9yYXRlOworCisJCWlmIChkaXYgPT0gMCkKKwkJCWRpdiA9IDE7CisJCWlmIChkaXYgPiAxNikKKwkJCWRpdiA9IDE2OworCisJCXJhdGUgPSBwYXJlbnRfcmF0ZSAvIGRpdjsKKwl9CisKKwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa191YXJ0X3VjbGsxID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJ1Y2xrMSIsCisJCS5pZAkJPSAtMSwKKwkJLmN0cmxiaXQgICAgICAgID0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX1VBUlQsCisJCS5lbmFibGUJCT0gczVwYzF4eF9zY2xrMF9jdHJsLAorCQkuc2V0X3BhcmVudAk9IHM1cGMxeHhfc2V0cGFyZW50X2Nsa3NyYywKKwkJLmdldF9yYXRlCT0gczVwYzF4eF9nZXRyYXRlX2Nsa3NyYywKKwkJLnNldF9yYXRlCT0gczVwYzF4eF9zZXRyYXRlX2Nsa3NyYywKKwkJLnJvdW5kX3JhdGUJPSBzNXBjMXh4X3JvdW5kcmF0ZV9jbGtzcmMsCisJfSwKKwkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMxX1VBUlRfU0hJRlQsCisJLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMxX1VBUlRfTUFTSywKKwkuc291cmNlcwk9ICZjbGtzZXRfdWFydCwKKwkuZGl2aWRlcl9zaGlmdAk9IFM1UEMxMDBfQ0xLRElWMl9VQVJUX1NISUZULAorCS5yZWdfZGl2aWRlcgk9IFM1UEMxWFhfQ0xLX0RJVjIsCisJLnJlZ19zb3VyY2UJPSBTNVBDMVhYX0NMS19TUkMxLAorfTsKKworLyogQ2xvY2sgaW5pdGlhbGlzYXRpb24gY29kZSAqLworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgKmluaXRfcGFyZW50c1tdID0geworCSZjbGtfbW91dF9hcGxsLAorCSZjbGtfbW91dF9lcGxsLAorCSZjbGtfbW91dF9tcGxsLAorCSZjbGtfdWFydF91Y2xrMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdF9vcl9jcHVmcmVxIHM1cGMxeHhfc2V0X2Nsa3NyYyhzdHJ1Y3QgY2xrc3JjX2NsayAqY2xrKQoreworCXN0cnVjdCBjbGtfc291cmNlcyAqc3JjcyA9IGNsay0+c291cmNlczsKKwl1MzIgY2xrc3JjID0gX19yYXdfcmVhZGwoY2xrLT5yZWdfc291cmNlKTsKKworCWNsa3NyYyAmPSBjbGstPm1hc2s7CisJY2xrc3JjID4+PSBjbGstPnNoaWZ0OworCisJaWYgKGNsa3NyYyA+IHNyY3MtPm5yX3NvdXJjZXMgfHwgIXNyY3MtPnNvdXJjZXNbY2xrc3JjXSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBiYWQgc291cmNlICVkXG4iLAorCQkgICAgICAgY2xrLT5jbGsubmFtZSwgY2xrc3JjKTsKKwkJcmV0dXJuOworCX0KKworCWNsay0+Y2xrLnBhcmVudCA9IHNyY3MtPnNvdXJjZXNbY2xrc3JjXTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBzb3VyY2UgaXMgJXMgKCVkKSwgcmF0ZSBpcyAlbGRcbiIsCisJICAgICAgIGNsay0+Y2xrLm5hbWUsIGNsay0+Y2xrLnBhcmVudC0+bmFtZSwgY2xrc3JjLAorCSAgICAgICBjbGtfZ2V0X3JhdGUoJmNsay0+Y2xrKSk7Cit9CisKKyNkZWZpbmUgR0VUX0RJVihjbGssIGZpZWxkKSAoKCgoY2xrKSAmIGZpZWxkIyNfTUFTSykgPj4gZmllbGQjI19TSElGVCkgKyAxKQorCit2b2lkIF9faW5pdF9vcl9jcHVmcmVxIHM1cGMxMDBfc2V0dXBfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqeHRhbF9jbGs7CisJdW5zaWduZWQgbG9uZyB4dGFsOworCXVuc2lnbmVkIGxvbmcgYXJtY2xrOworCXVuc2lnbmVkIGxvbmcgaGNsa2QwOworCXVuc2lnbmVkIGxvbmcgaGNsazsKKwl1bnNpZ25lZCBsb25nIHBjbGtkMDsKKwl1bnNpZ25lZCBsb25nIHBjbGs7CisJdW5zaWduZWQgbG9uZyBhcGxsOworCXVuc2lnbmVkIGxvbmcgbXBsbDsKKwl1bnNpZ25lZCBsb25nIGhwbGw7CisJdW5zaWduZWQgbG9uZyBlcGxsOworCXVuc2lnbmVkIGludCBwdHI7CisJdTMyIGNsa2RpdjAsIGNsa2RpdjE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlZ2lzdGVyaW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOworCisJY2xrZGl2MCA9IF9fcmF3X3JlYWRsKFM1UEMxWFhfQ0xLX0RJVjApOworCWNsa2RpdjEgPSBfX3Jhd19yZWFkbChTNVBDMVhYX0NMS19ESVYxKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogY2xrZGl2MCA9ICUwOHgsIGNsa2RpdjEgPSAlMDh4XG4iLAorCQkJX19mdW5jX18sIGNsa2RpdjAsIGNsa2RpdjEpOworCisJeHRhbF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7CisJQlVHX09OKElTX0VSUih4dGFsX2NsaykpOworCisJeHRhbCA9IGNsa19nZXRfcmF0ZSh4dGFsX2Nsayk7CisJY2xrX3B1dCh4dGFsX2Nsayk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHh0YWwgaXMgJWxkXG4iLCBfX2Z1bmNfXywgeHRhbCk7CisKKwlhcGxsID0gczVwYzF4eF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFM1UEMxWFhfQVBMTF9DT04pKTsKKwltcGxsID0gczVwYzF4eF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFM1UEMxWFhfTVBMTF9DT04pKTsKKwllcGxsID0gczVwYzF4eF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFM1UEMxWFhfRVBMTF9DT04pKTsKKwlocGxsID0gczVwYzF4eF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFM1UEMxMDBfSFBMTF9DT04pKTsKKworCXByaW50ayhLRVJOX0lORk8gIlM1UEMxMDA6IFBMTCBzZXR0aW5ncywgQT0lbGQsIE09JWxkLCBFPSVsZCwgSD0lbGRcbiIsCisJICAgICAgIGFwbGwsIG1wbGwsIGVwbGwsIGhwbGwpOworCisJYXJtY2xrID0gYXBsbCAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQQzFYWF9DTEtESVYwX0FQTEwpOworCWFybWNsayA9IGFybWNsayAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQQzEwMF9DTEtESVYwX0FSTSk7CisJaGNsa2QwID0gYXJtY2xrIC8gR0VUX0RJVihjbGtkaXYwLCBTNVBDMTAwX0NMS0RJVjBfRDApOworCXBjbGtkMCA9IGhjbGtkMCAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQQzEwMF9DTEtESVYwX1BDTEtEMCk7CisJaGNsayA9IG1wbGwgLyBHRVRfRElWKGNsa2RpdjEsIFM1UEMxMDBfQ0xLRElWMV9EMSk7CisJcGNsayA9IGhjbGsgLyBHRVRfRElWKGNsa2RpdjEsIFM1UEMxMDBfQ0xLRElWMV9QQ0xLRDEpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUzVQQzEwMDogQVJNQ0xLPSVsZCwgSENMS0QwPSVsZCwgUENMS0QwPSVsZCwgSENMSz0lbGQsIFBDTEs9JWxkXG4iLAorCSAgICAgICBhcm1jbGssIGhjbGtkMCwgcGNsa2QwLCBoY2xrLCBwY2xrKTsKKworCWNsa19mb3V0X2FwbGwucmF0ZSA9IGFwbGw7CisJY2xrX2ZvdXRfbXBsbC5yYXRlID0gbXBsbDsKKwljbGtfZm91dF9lcGxsLnJhdGUgPSBlcGxsOworCWNsa19mb3V0X2FwbGwucmF0ZSA9IGFwbGw7CisKKwljbGtfaC5yYXRlID0gaGNsazsKKwljbGtfcC5yYXRlID0gcGNsazsKKworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X3BhcmVudHMpOyBwdHIrKykKKwkJczVwYzF4eF9zZXRfY2xrc3JjKGluaXRfcGFyZW50c1twdHJdKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0geworCSZjbGtfZXh0X3h0YWxfbXV4LAorCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX2ZvdXRfZXBsbCwKKwkmY2xrX21vdXRfbXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwsCisJJmNsa191YXJ0X3VjbGsxLmNsaywKKwkmY2xrX2V4dCwKKwkmY2xrX2VwbGwsCisJJmNsa18yN20sCisJJmNsa180OG0sCisJJmNsa181NG0sCit9OworCit2b2lkIF9faW5pdCBzNXBjMTAwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNsa3A7CisJaW50IHJldDsKKwlpbnQgcHRyOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGNsa3MpOyBwdHIrKykgeworCQljbGtwID0gY2xrc1twdHJdOworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisJfQorCisJY2xrX21wbGwucGFyZW50ID0gJmNsa19tb3V0X21wbGwuY2xrOworCWNsa19lcGxsLnBhcmVudCA9ICZjbGtfbW91dF9lcGxsLmNsazsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zNXBjMTAwLWluaXQuYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zNXBjMTAwLWluaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTg3MTA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtaW5pdC5jCkBAIC0wLDAgKzEsMjcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zNXBjMTAwLWluaXQuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uCisgKiAgICAgIEJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBTNVBDMTAwIC0gQ1BVIGluaXRpYWxpc2F0aW9uIChjb21tb24gd2l0aCBvdGhlciBTNVBDMVhYIGNoaXBzKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cGMxMDAuaD4KKworLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLworCit2b2lkIF9faW5pdCBzNXBjMTAwX2NvbW1vbl9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKQoreworCS8qIFRoZSBkcml2ZXIgbmFtZSBpcyBzM2M2NDAwLXVhcnQgdG8gcmV1c2UgczNjNjQwMF9zZXJpYWxfZHJ2ICAqLworCXMzYzI0eHhfaW5pdF91YXJ0ZGV2cygiczNjNjQwMC11YXJ0IiwgczVwYzF4eF91YXJ0X3Jlc291cmNlcywgY2ZnLCBubyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvc2V0dXAtaTJjMC5jIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3NldHVwLWkyYzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDAwYzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3NldHVwLWkyYzAuYwpAQCAtMCwwICsxLDI1IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cGMxeHgvc2V0dXAtaTJjMC5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KKyAqCUJ5dW5naG8gTWluIDxiaG1pbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBCYXNlIFM1UEMxWFggSTJDIGJ1cyAwIGdwaW8gY29uZmlndXJhdGlvbgorICoKKyAqIEJhc2VkIG9uIHBsYXQtczNjNjR4eC9zZXR1cC1pMmMwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7IC8qIGRvbid0IG5lZWQgdGhlIGNvbnRlbnRzICovCisKKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorCit2b2lkIHMzY19pMmMwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwkvKiBQaW4gY29uZmlndXJhdGlvbiB3b3VsZCBiZSBuZWVkZWQgKi8KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zZXR1cC1pMmMxLmMgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvc2V0dXAtaTJjMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZjNjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvc2V0dXAtaTJjMS5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1pMmMxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgorICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgorICoKKyAqIEJhc2UgUzVQQzFYWCBJMkMgYnVzIDEgZ3BpbyBjb25maWd1cmF0aW9uCisgKgorICogQmFzZWQgb24gcGxhdC1zM2M2NHh4L3NldHVwLWkyYzEuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsgLyogZG9uJ3QgbmVlZCB0aGUgY29udGVudHMgKi8KKworI2luY2x1ZGUgPHBsYXQvaWljLmg+CisKK3ZvaWQgczNjX2kyYzFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCS8qIFBpbiBjb25maWd1cmF0aW9uIHdvdWxkIGJlIG5lZWRlZCAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggMzMwMjZlZi4uYzhjNTViNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogU2F0IEp1biAyMCAyMjoyODozOSAyMDA5CisjIExhc3QgdXBkYXRlOiBTYXQgU2VwIDEyIDEyOjAwOjE2IDIwMDkKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTc2OSw3ICsxNzY5LDcgQEAKIG1pNDI0d3IJCQlNQUNIX01JNDI0V1IJCU1JNDI0V1IJCQkxNzc4CiBheHNfdWx0cmF4CQlNQUNIX0FYU19VTFRSQVgJCUFYU19VTFRSQVgJCTE3NzkKIGF0NTcyZDk0MGRlYgkJTUFDSF9BVDU3MkQ5NDBERUIJQVQ1NzJEOTQwREVCCQkxNzgwCi1kYXZpbmNpX2RhOHh4X2V2bQlNQUNIX0RBVklOQ0lfREE4WFhfRVZNCURBVklOQ0lfREE4WFhfRVZNCTE3ODEKK2RhdmluY2lfZGE4MzBfZXZtCU1BQ0hfREFWSU5DSV9EQTgzMF9FVk0JREFWSU5DSV9EQTgzMF9FVk0JMTc4MQogZXA5MzAyCQkJTUFDSF9FUDkzMDIJCUVQOTMwMgkJCTE3ODIKIGF0NTcyZDk0MGhmZWsJCU1BQ0hfQVQ1NzJEOTQwSEZFQglBVDU3MkQ5NDBIRkVCCQkxNzgzCiBjeWJvb2szCQkJTUFDSF9DWUJPT0szCQlDWUJPT0szCQkJMTc4NApAQCAtMTk2Miw3ICsxOTYyLDcgQEAKIGFybTExCQkJTUFDSF9BUk0xMQkJQVJNMTEJCQkxOTcyCiBjcHVhdDkyNjAJCU1BQ0hfQ1BVQVQ5MjYwCQlDUFVBVDkyNjAJCTE5NzMKIGNwdXB4YTI1NQkJTUFDSF9DUFVQWEEyNTUJCUNQVVBYQTI1NQkJMTk3NAotY3B1aW14MjcJCU1BQ0hfQ1BVSU1YMjcJCUNQVUlNWDI3CQkxOTc1CitldWtyZWFfY3B1aW14MjcJCU1BQ0hfQ1BVSU1YMjcJCUNQVUlNWDI3CQkxOTc1CiBjaGVmbHV4CQkJTUFDSF9DSEVGTFVYCQlDSEVGTFVYCQkJMTk3NgogZWJfY3B1eDlrMgkJTUFDSF9FQl9DUFVYOUsyCQlFQl9DUFVYOUsyCQkxOTc3CiBvcGNvdGVjCQkJTUFDSF9PUENPVEVDCQlPUENPVEVDCQkJMTk3OApAQCAtMjI0OSwxNCArMjI0OSwxNCBAQAogZGFyd2luCQkJTUFDSF9EQVJXSU4JCURBUldJTgkJCTIyNjIKIG9yYXRpc2NvbXUJCU1BQ0hfT1JBVElTQ09NVQkJT1JBVElTQ09NVQkJMjI2MwogcnRzYmMyMAkJCU1BQ0hfUlRTQkMyMAkJUlRTQkMyMAkJCTIyNjQKLWk3ODAJCQlNQUNIX0k3ODAJCUk3ODAJCQkyMjY1CitzZ2hfaTc4MAkJTUFDSF9JNzgwCQlJNzgwCQkJMjI2NQogZ2VtaW5pMzI0CQlNQUNIX0dFTUlOSTMyNAkJR0VNSU5JMzI0CQkyMjY2CiBvcmF0aXNsYW4JCU1BQ0hfT1JBVElTTEFOCQlPUkFUSVNMQU4JCTIyNjcKIG9yYXRpc2Fsb2cJCU1BQ0hfT1JBVElTQUxPRwkJT1JBVElTQUxPRwkJMjI2OAogb3JhdGlzbWFkaQkJTUFDSF9PUkFUSVNNQURJCQlPUkFUSVNNQURJCQkyMjY5CiBvcmF0aXNvdDE2CQlNQUNIX09SQVRJU09UMTYJCU9SQVRJU09UMTYJCTIyNzAKIG9yYXRpc2Rlc2sJCU1BQ0hfT1JBVElTREVTSwkJT1JBVElTREVTSwkJMjI3MQotdjJwX2NhOQkJCU1BQ0hfVjJQX0NBOQkJVjJQX0NBOQkJCTIyNzIKK3YyX2NhOQkJCU1BQ0hfVjJQX0NBOQkJVjJQX0NBOQkJCTIyNzIKIHNpbnRleG8JCQlNQUNIX1NJTlRFWE8JCVNJTlRFWE8JCQkyMjczCiBjbTMzODkJCQlNQUNIX0NNMzM4OQkJQ00zMzg5CQkJMjI3NAogb21hcDNfY2lvCQlNQUNIX09NQVAzX0NJTwkJT01BUDNfQ0lPCQkyMjc1CkBAIC0yMjgwLDMgKzIyODAsMTMyIEBACiBodGN0b3BhegkJTUFDSF9IVENUT1BBWgkJSFRDVE9QQVoJCTIyOTMKIG1hdHJpeDUwNAkJTUFDSF9NQVRSSVg1MDQJCU1BVFJJWDUwNAkJMjI5NAogbXJmc2EJCQlNQUNIX01SRlNBCQlNUkZTQQkJCTIyOTUKK3NjX3AyNzAJCQlNQUNIX1NDX1AyNzAJCVNDX1AyNzAJCQkyMjk2CithdGxhczVfZXZiCQlNQUNIX0FUTEFTNV9FVkIJCUFUTEFTNV9FVkIJCTIyOTcKK3BlbGNvX2xvYm94CQlNQUNIX1BFTENPX0xPQk9YCVBFTENPX0xPQk9YCQkyMjk4CitkaWxheF9wY3UyMDAJCU1BQ0hfRElMQVhfUENVMjAwCURJTEFYX1BDVTIwMAkJMjI5OQorbGVvbmFyZG8JCU1BQ0hfTEVPTkFSRE8JCUxFT05BUkRPCQkyMzAwCit6b3Jhbl9hcHByb2FjaDcJCU1BQ0hfWk9SQU5fQVBQUk9BQ0g3CVpPUkFOX0FQUFJPQUNINwkJMjMwMQorZHA2eHgJCQlNQUNIX0RQNlhYCQlEUDZYWAkJCTIzMDIKK2JjbTIxNTNfdmVzcGVyCQlNQUNIX0JDTTIxNTNfVkVTUEVSCUJDTTIxNTNfVkVTUEVSCQkyMzAzCittYWhpbWFoaQkJTUFDSF9NQUhJTUFISQkJTUFISU1BSEkJCTIzMDQKK2NsaWNrYwkJCU1BQ0hfQ0xJQ0tDCQlDTElDS0MJCQkyMzA1Cit6Yl9nYXRld2F5CQlNQUNIX1pCX0dBVEVXQVkJCVpCX0dBVEVXQVkJCTIzMDYKK3RhemNhcmQJCQlNQUNIX1RBWkNBUkQJCVRBWkNBUkQJCQkyMzA3Cit0YXpkZXYJCQlNQUNIX1RBWkRFVgkJVEFaREVWCQkJMjMwOAorYW5uYXhfY2JfYXJtCQlNQUNIX0FOTkFYX0NCX0FSTQlBTk5BWF9DQl9BUk0JCTIzMDkKK2FubmF4X2RtMwkJTUFDSF9BTk5BWF9ETTMJCUFOTkFYX0RNMwkJMjMxMAorY2VyZWJyaWMJCU1BQ0hfQ0VSRUJSSUMJCUNFUkVCUklDCQkyMzExCitvcmNhCQkJTUFDSF9PUkNBCQlPUkNBCQkJMjMxMgorcGM5MjYwCQkJTUFDSF9QQzkyNjAJCVBDOTI2MAkJCTIzMTMKK2VtczI4NWEJCQlNQUNIX0VNUzI4NUEJCUVNUzI4NUEJCQkyMzE0CitnZWMyNDEwCQkJTUFDSF9HRUMyNDEwCQlHRUMyNDEwCQkJMjMxNQorZ2VjMjQ0MAkJCU1BQ0hfR0VDMjQ0MAkJR0VDMjQ0MAkJCTIzMTYKK213OTAzCQkJTUFDSF9BUkNIX01XOTAzCQlBUkNIX01XOTAzCQkyMzE3CittdzI0NDAJCQlNQUNIX01XMjQ0MAkJTVcyNDQwCQkJMjMxOAorZWNhYzIzNzgJCU1BQ0hfRUNBQzIzNzgJCUVDQUMyMzc4CQkyMzE5Cit0YXpraW9zawkJTUFDSF9UQVpLSU9TSwkJVEFaS0lPU0sJCTIzMjAKK3doaXRlcmFiYml0X21jaAkJTUFDSF9XSElURVJBQkJJVF9NQ0gJV0hJVEVSQUJCSVRfTUNICQkyMzIxCitzYm94OTI2MwkJTUFDSF9TQk9YOTI2MwkJU0JPWDkyNjMJCTIzMjIKK29yZW8JCQlNQUNIX09SRU8JCU9SRU8JCQkyMzIzCitzbWRrNjQ0MgkJTUFDSF9TTURLNjQ0MgkJU01ESzY0NDIJCTIzMjQKK29wZW5yZF9iYXNlCQlNQUNIX09QRU5SRF9CQVNFCU9QRU5SRF9CQVNFCQkyMzI1CitpbmNyZWRpYmxlCQlNQUNIX0lOQ1JFRElCTEUJCUlOQ1JFRElCTEUJCTIzMjYKK2luY3JlZGlibGVjCQlNQUNIX0lOQ1JFRElCTEVDCUlOQ1JFRElCTEVDCQkyMzI3CitoZXJvY3QJCQlNQUNIX0hFUk9DVAkJSEVST0NUCQkJMjMyOAorbW1uZXQxMDAwCQlNQUNIX01NTkVUMTAwMAkJTU1ORVQxMDAwCQkyMzI5CitkZXZraXQ4MDAwCQlNQUNIX0RFVktJVDgwMDAJCURFVktJVDgwMDAJCTIzMzAKK2RldmtpdDkwMDAJCU1BQ0hfREVWS0lUOTAwMAkJREVWS0lUOTAwMAkJMjMzMQorbXgzMXR4dHIJCU1BQ0hfTVgzMVRYVFIJCU1YMzFUWFRSCQkyMzMyCit1MzgwCQkJTUFDSF9VMzgwCQlVMzgwCQkJMjMzMworb2FtcDNfaHVhbHUJCU1BQ0hfSFVBTFVfQk9BUkQJSFVBTFVfQk9BUkQJCTIzMzQKK25wY214NTAJCQlNQUNIX05QQ01YNTAJCU5QQ01YNTAJCQkyMzM1CitteDUxX2xhbmdlNTEJCU1BQ0hfTVg1MV9MQU5HRTUxCU1YNTFfTEFOR0U1MQkJMjMzNgorbXg1MV9sYW5nZTUyCQlNQUNIX01YNTFfTEFOR0U1MglNWDUxX0xBTkdFNTIJCTIzMzcKK3Jpb20JCQlNQUNIX1JJT00JCVJJT00JCQkyMzM4Citjb21jYXMJCQlNQUNIX0NPTUNBUwkJQ09NQ0FTCQkJMjMzOQord3NpX214MjcJCU1BQ0hfV1NJX01YMjcJCVdTSV9NWDI3CQkyMzQwCitjbV90MzUJCQlNQUNIX0NNX1QzNQkJQ01fVDM1CQkJMjM0MQorbmV0MmJpZwkJCU1BQ0hfTkVUMkJJRwkJTkVUMkJJRwkJCTIzNDIKK21vdG9yb2xhX2ExNjAwCQlNQUNIX01PVE9ST0xBX0ExNjAwCU1PVE9ST0xBX0ExNjAwCQkyMzQzCitpZ2VwMDAyMAkJTUFDSF9JR0VQMDAyMAkJSUdFUDAwMjAJCTIzNDQKK2lnZXAwMDEwCQlNQUNIX0lHRVAwMDEwCQlJR0VQMDAxMAkJMjM0NQorbXY2MjgxZ3R3Z2UyCQlNQUNIX01WNjI4MUdUV0dFMglNVjYyODFHVFdHRTIJCTIzNDYKK3NjYXQxMDAJCQlNQUNIX1NDQVQxMDAJCVNDQVQxMDAJCQkyMzQ3CitzYW5taW5hCQkJTUFDSF9TQU5NSU5BCQlTQU5NSU5BCQkJMjM0OAorbW9tZW50bwkJCU1BQ0hfTU9NRU5UTwkJTU9NRU5UTwkJCTIzNDkKK251Yzl4eAkJCU1BQ0hfTlVDOVhYCQlOVUM5WFgJCQkyMzUwCitudWM5MTBldmIJCU1BQ0hfTlVDOTEwRVZCCQlOVUM5MTBFVkIJCTIzNTEKK251YzkyMGV2YgkJTUFDSF9OVUM5MjBFVkIJCU5VQzkyMEVWQgkJMjM1MgorbnVjOTUwZXZiCQlNQUNIX05VQzk1MEVWQgkJTlVDOTUwRVZCCQkyMzUzCitudWM5NDVldmIJCU1BQ0hfTlVDOTQ1RVZCCQlOVUM5NDVFVkIJCTIzNTQKK251Yzk2MGV2YgkJTUFDSF9OVUM5NjBFVkIJCU5VQzk2MEVWQgkJMjM1NQorbnVjOTMyZXZiCQlNQUNIX05VQzkzMkVWQgkJTlVDOTMyRVZCCQkyMzU2CitudWM5MDAJCQlNQUNIX05VQzkwMAkJTlVDOTAwCQkJMjM1Nworc2Qxc29jCQkJTUFDSF9TRDFTT0MJCVNEMVNPQwkJCTIzNTgKK2xuMjQ0MGJjCQlNQUNIX0xOMjQ0MEJDCQlMTjI0NDBCQwkJMjM1OQorcnNiYwkJCU1BQ0hfUlNCQwkJUlNCQwkJCTIzNjAKK29wZW5yZF9jbGllbnQJCU1BQ0hfT1BFTlJEX0NMSUVOVAlPUEVOUkRfQ0xJRU5UCQkyMzYxCitocGlwYXExMXgJCU1BQ0hfSFBJUEFRMTFYCQlIUElQQVExMVgJCTIzNjIKK3dheWxhbmQJCQlNQUNIX1dBWUxBTkQJCVdBWUxBTkQJCQkyMzYzCithY25ic3gxMDIJCU1BQ0hfQUNOQlNYMTAyCQlBQ05CU1gxMDIJCTIzNjQKK2h3YXQ5MQkJCU1BQ0hfSFdBVDkxCQlIV0FUOTEJCQkyMzY1CithdDkxc2FtOTI2M2NzCQlNQUNIX0FUOTFTQU05MjYzQ1MJQVQ5MVNBTTkyNjNDUwkJMjM2NgorY3NiNzMyCQkJTUFDSF9DU0I3MzIJCUNTQjczMgkJCTIzNjcKK3U4NTAwCQkJTUFDSF9VODUwMAkJVTg1MDAJCQkyMzY4CitodXFpdQkJCU1BQ0hfSFVRSVUJCUhVUUlVCQkJMjM2OQorbXg1MV9rdW5sdW4JCU1BQ0hfTVg1MV9LVU5MVU4JTVg1MV9LVU5MVU4JCTIzNzAKK3BtdDFnCQkJTUFDSF9QTVQxRwkJUE1UMUcJCQkyMzcxCitodGNlbGYJCQlNQUNIX0hUQ0VMRgkJSFRDRUxGCQkJMjM3MgorYXJtYWRpbGxvNDIwCQlNQUNIX0FSTUFESUxMTzQyMAlBUk1BRElMTE80MjAJCTIzNzMKK2FybWFkaWxsbzQ0MAkJTUFDSF9BUk1BRElMTE80NDAJQVJNQURJTExPNDQwCQkyMzc0Cit1X2NoaXBfZHVhbF9hcm0JCU1BQ0hfVV9DSElQX0RVQUxfQVJNCVVfQ0hJUF9EVUFMX0FSTQkJMjM3NQorY3NyX2JkYjMJCU1BQ0hfQ1NSX0JEQjMJCUNTUl9CREIzCQkyMzc2Citkb2xieV9jYXQxMDE4CQlNQUNIX0RPTEJZX0NBVDEwMTgJRE9MQllfQ0FUMTAxOAkJMjM3NworaHk5MzA3CQkJTUFDSF9IWTkzMDcJCUhZOTMwNwkJCTIzNzgKK2FzcGlyZV9lYXN5c3RvcmUJTUFDSF9BX0VTCQlBX0VTCQkJMjM3OQorZGF2aW5jaV9pcmlmCQlNQUNIX0RBVklOQ0lfSVJJRglEQVZJTkNJX0lSSUYJCTIzODAKK2FnYW1hOTI2MwkJTUFDSF9BR0FNQTkyNjMJCUFHQU1BOTI2MwkJMjM4MQorbWFydmVsbF9qYXNwZXIJCU1BQ0hfTUFSVkVMTF9KQVNQRVIJTUFSVkVMTF9KQVNQRVIJCTIzODIKK2ZsaW50CQkJTUFDSF9GTElOVAkJRkxJTlQJCQkyMzgzCit0YXZvcmV2YjMJCU1BQ0hfVEFWT1JFVkIzCQlUQVZPUkVWQjMJCTIzODQKK3NjaF9tNDkwCQlNQUNIX1NDSF9NNDkwCQlTQ0hfTTQ5MAkJMjM4NgorcmJsMDEJCQlNQUNIX1JCTDAxCQlSQkwwMQkJCTIzODcKK29tbmlmaQkJCU1BQ0hfT01OSUZJCQlPTU5JRkkJCQkyMzg4CitvdGF2YWxvCQkJTUFDSF9PVEFWQUxPCQlPVEFWQUxPCQkJMjM4OQorc2llbm5hCQkJTUFDSF9TSUVOTkEJCVNJRU5OQQkJCTIzOTAKK2h0Y19leGNhbGlidXJfczYyMAlNQUNIX0hUQ19FWENBTElCVVJfUzYyMAlIVENfRVhDQUxJQlVSX1M2MjAJMjM5MQoraHRjX29wYWwJCU1BQ0hfSFRDX09QQUwJCUhUQ19PUEFMCQkyMzkyCit0b3VjaGJvb2sJCU1BQ0hfVE9VQ0hCT09LCQlUT1VDSEJPT0sJCTIzOTMKK2xhdHRlCQkJTUFDSF9MQVRURQkJTEFUVEUJCQkyMzk0Cit4YTIwMAkJCU1BQ0hfWEEyMDAJCVhBMjAwCQkJMjM5NQorbmltcm9kCQkJTUFDSF9OSU1ST0QJCU5JTVJPRAkJCTIzOTYKK2NjOXA5MjE1XzNnCQlNQUNIX0NDOVA5MjE1XzNHCUNDOVA5MjE1XzNHCQkyMzk3CitjYzlwOTIxNV8zZ2pzCQlNQUNIX0NDOVA5MjE1XzNHSlMJQ0M5UDkyMTVfM0dKUwkJMjM5OAordGs3MQkJCU1BQ0hfVEs3MQkJVEs3MQkJCTIzOTkKK2NvbWhhbTM1MjUJCU1BQ0hfQ09NSEFNMzUyNQkJQ09NSEFNMzUyNQkJMjQwMAorbXgzMWVyZWJ1cwkJTUFDSF9NWDMxRVJFQlVTCQlNWDMxRVJFQlVTCQkyNDAxCittY2FyZG14MjcJCU1BQ0hfTUNBUkRNWDI3CQlNQ0FSRE1YMjcJCTI0MDIKK3BhcmFkaXNlCQlNQUNIX1BBUkFESVNFCQlQQVJBRElTRQkJMjQwMwordGlkZQkJCU1BQ0hfVElERQkJVElERQkJCTI0MDQKK3d6bDI0NDAJCQlNQUNIX1daTDI0NDAJCVdaTDI0NDAJCQkyNDA1CitzZHJkZW1vCQkJTUFDSF9TRFJERU1PCQlTRFJERU1PCQkJMjQwNgorZXRoZXJjYW4yCQlNQUNIX0VUSEVSQ0FOMgkJRVRIRVJDQU4yCQkyNDA3CitlY21pbWcyMAkJTUFDSF9FQ01JTUcyMAkJRUNNSU1HMjAJCTI0MDgKK29tYXBfZHJhZ29uCQlNQUNIX09NQVBfRFJBR09OCU9NQVBfRFJBR09OCQkyNDA5CitoYWxvCQkJTUFDSF9IQUxPCQlIQUxPCQkJMjQxMAoraHVhbmdzaGFuCQlNQUNIX0hVQU5HU0hBTgkJSFVBTkdTSEFOCQkyNDExCit2bF9tYTJzYwkJTUFDSF9WTF9NQTJTQwkJVkxfTUEyU0MJCTI0MTIKK3JhdW1mZWxkX3JjCQlNQUNIX1JBVU1GRUxEX1JDCVJBVU1GRUxEX1JDCQkyNDEzCityYXVtZmVsZF9jb25uZWN0b3IJTUFDSF9SQVVNRkVMRF9DT05ORUNUT1IJUkFVTUZFTERfQ09OTkVDVE9SCTI0MTQKK3JhdW1mZWxkX3NwZWFrZXIJTUFDSF9SQVVNRkVMRF9TUEVBS0VSCVJBVU1GRUxEX1NQRUFLRVIJMjQxNQorbXVsdGlidXNfbWFzdGVyCQlNQUNIX01VTFRJQlVTX01BU1RFUglNVUxUSUJVU19NQVNURVIJCTI0MTYKK211bHRpYnVzX3BiawkJTUFDSF9NVUxUSUJVU19QQksJTVVMVElCVVNfUEJLCQkyNDE3Cit0bmV0djEwN3gJCU1BQ0hfVE5FVFYxMDdYCQlUTkVUVjEwN1gJCTI0MTgKK3NuYWtlCQkJTUFDSF9TTkFLRQkJU05BS0UJCQkyNDE5Citjd214MjcJCQlNQUNIX0NXTVgyNwkJQ1dNWDI3CQkJMjQyMAorc2NoX200ODAJCU1BQ0hfU0NIX000ODAJCVNDSF9NNDgwCQkyNDIxCitwbGF0eXB1cwkJTUFDSF9QTEFUWVBVUwkJUExBVFlQVVMJCTI0MjIKK3BzczIJCQlNQUNIX1BTUzIJCVBTUzIJCQkyNDIzCitkYXZpbmNpX2FwbTE1MAkJTUFDSF9EQVZJTkNJX0FQTTE1MAlEQVZJTkNJX0FQTTE1MAkJMjQyNAorc3RyOTEwMAkJCU1BQ0hfU1RSOTEwMAkJU1RSOTEwMAkJCTI0MjUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC9lbnRyeS5TIGIvYXJjaC9hcm0vdmZwL2VudHJ5LlMKaW5kZXggYTJiZWQ2Mi4uNGZhOTkwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL2VudHJ5LlMKKysrIGIvYXJjaC9hcm0vdmZwL2VudHJ5LlMKQEAgLTQyLDYgKzQyLDcgQEAKIAltb3YJcGMsIGxyCiBFTkRQUk9DKHZmcF9udWxsX2VudHJ5KQogCisJLmFsaWduCTIKIC5MQ3ZmcDoKIAkud29yZAl2ZnBfdmVjdG9yCiAKQEAgLTYxLDYgKzYyLDcgQEAKIAltb3YJcGMsIHI5CQkJQCB3ZSBoYXZlIGhhbmRsZWQgdGhlIGZhdWx0CiBFTkRQUk9DKHZmcF90ZXN0aW5nX2VudHJ5KQogCisJLmFsaWduCTIKIFZGUF9hcmNoX2FkZHJlc3M6CiAJLndvcmQJVkZQX2FyY2gKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwppbmRleCAxYWVhZTM4Li42NmRjMmQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwaHcuUworKysgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwpAQCAtMjA5LDQwICsyMDksNTUgQEAKIGxhc3RfVkZQX2NvbnRleHRfYWRkcmVzczoKIAkud29yZAlsYXN0X1ZGUF9jb250ZXh0CiAKLUVOVFJZKHZmcF9nZXRfZmxvYXQpCi0JYWRkCXBjLCBwYywgcjAsIGxzbCAjMworCS5tYWNybwl0YmxfYnJhbmNoLCBiYXNlLCB0bXAsIHNoaWZ0CisjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKKwlhZHIJXHRtcCwgMWYKKwlhZGQJXHRtcCwgXHRtcCwgXGJhc2UsIGxzbCBcc2hpZnQKKwltb3YJcGMsIFx0bXAKKyNlbHNlCisJYWRkCXBjLCBwYywgXGJhc2UsIGxzbCBcc2hpZnQKIAltb3YJcjAsIHIwCisjZW5kaWYKKzE6CisJLmVuZG0KKworRU5UUlkodmZwX2dldF9mbG9hdCkKKwl0YmxfYnJhbmNoIHIwLCByMywgIzMKIAkuaXJwCWRyLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUKLQltcmMJcDEwLCAwLCByMCwgY1xkciwgYzAsIDAJQCBmbXJzCXIwLCBzMAorMToJbXJjCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCAwCUAgZm1ycwlyMCwgczAKIAltb3YJcGMsIGxyCi0JbXJjCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCA0CUAgZm1ycwlyMCwgczEKKwkub3JnCTFiICsgOAorMToJbXJjCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCA0CUAgZm1ycwlyMCwgczEKIAltb3YJcGMsIGxyCisJLm9yZwkxYiArIDgKIAkuZW5kcgogRU5EUFJPQyh2ZnBfZ2V0X2Zsb2F0KQogCiBFTlRSWSh2ZnBfcHV0X2Zsb2F0KQotCWFkZAlwYywgcGMsIHIxLCBsc2wgIzMKLQltb3YJcjAsIHIwCisJdGJsX2JyYW5jaCByMSwgcjMsICMzCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JbWNyCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCAwCUAgZm1zcglyMCwgczAKKzE6CW1jcglwMTAsIDAsIHIwLCBjXGRyLCBjMCwgMAlAIGZtc3IJcjAsIHMwCiAJbW92CXBjLCBscgotCW1jcglwMTAsIDAsIHIwLCBjXGRyLCBjMCwgNAlAIGZtc3IJcjAsIHMxCisJLm9yZwkxYiArIDgKKzE6CW1jcglwMTAsIDAsIHIwLCBjXGRyLCBjMCwgNAlAIGZtc3IJcjAsIHMxCiAJbW92CXBjLCBscgorCS5vcmcJMWIgKyA4CiAJLmVuZHIKIEVORFBST0ModmZwX3B1dF9mbG9hdCkKIAogRU5UUlkodmZwX2dldF9kb3VibGUpCi0JYWRkCXBjLCBwYywgcjAsIGxzbCAjMwotCW1vdglyMCwgcjAKKwl0YmxfYnJhbmNoIHIwLCByMywgIzMKIAkuaXJwCWRyLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUKLQlmbXJyZAlyMCwgcjEsIGRcZHIKKzE6CWZtcnJkCXIwLCByMSwgZFxkcgogCW1vdglwYywgbHIKKwkub3JnCTFiICsgOAogCS5lbmRyCiAjaWZkZWYgQ09ORklHX1ZGUHYzCiAJQCBkMTYgLSBkMzEgcmVnaXN0ZXJzCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JbXJyYwlwMTEsIDMsIHIwLCByMSwgY1xkcglAIGZtcnJkCXIwLCByMSwgZFxkcgorMToJbXJyYwlwMTEsIDMsIHIwLCByMSwgY1xkcglAIGZtcnJkCXIwLCByMSwgZFxkcgogCW1vdglwYywgbHIKKwkub3JnCTFiICsgOAogCS5lbmRyCiAjZW5kaWYKIApAQCAtMjUzLDE3ICsyNjgsMTggQEAKIEVORFBST0ModmZwX2dldF9kb3VibGUpCiAKIEVOVFJZKHZmcF9wdXRfZG91YmxlKQotCWFkZAlwYywgcGMsIHIyLCBsc2wgIzMKLQltb3YJcjAsIHIwCisJdGJsX2JyYW5jaCByMiwgcjMsICMzCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JZm1kcnIJZFxkciwgcjAsIHIxCisxOglmbWRycglkXGRyLCByMCwgcjEKIAltb3YJcGMsIGxyCisJLm9yZwkxYiArIDgKIAkuZW5kcgogI2lmZGVmIENPTkZJR19WRlB2MwogCUAgZDE2IC0gZDMxIHJlZ2lzdGVycwogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCW1jcnIJcDExLCAzLCByMSwgcjIsIGNcZHIJQCBmbWRycglyMSwgcjIsIGRcZHIKKzE6CW1jcnIJcDExLCAzLCByMSwgcjIsIGNcZHIJQCBmbWRycglyMSwgcjIsIGRcZHIKIAltb3YJcGMsIGxyCisJLm9yZwkxYiArIDgKIAkuZW5kcgogI2VuZGlmCiBFTkRQUk9DKHZmcF9wdXRfZG91YmxlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggMDRjODYwNi4uZmU4NjNmOSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Nyw0ICs1Nyw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX19BU01fQVZSMzJfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjVlY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBib2FyZCBpbml0aWFsaXphdGlvbiBzaG91bGQgcHV0IG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGludG8gcGxhdGZvcm1fZGF0YQorICogYW5kIHBsYWNlIHRoZSBiZmluLXJvdGFyeSBvbnRvIHBsYXRmb3JtX2J1cyBuYW1lZCAiYmZpbi1yb3RhcnkiLgorICovCisKKyNpZm5kZWYgX0JGSU5fUk9UQVJZX0gKKyNkZWZpbmUgX0JGSU5fUk9UQVJZX0gKKworLyogbW9kZSBiaXRtYXNrcyAqLworI2RlZmluZSBST1RfUVVBRF9FTkMJQ05UTU9ERV9RVUFERU5DCS8qIHF1YWRyYXR1cmUvZ3JleSBjb2RlIGVuY29kZXIgbW9kZSAqLworI2RlZmluZSBST1RfQklOX0VOQwlDTlRNT0RFX0JJTkVOQwkvKiBiaW5hcnkgZW5jb2RlciBtb2RlICovCisjZGVmaW5lIFJPVF9VRF9DTlQJQ05UTU9ERV9VRENOVAkvKiByb3RhcnkgY291bnRlciBtb2RlICovCisjZGVmaW5lIFJPVF9ESVJfQ05UCUNOVE1PREVfRElSQ05UCS8qIGRpcmVjdGlvbiBjb3VudGVyIG1vZGUgKi8KKworI2RlZmluZSBST1RfREVCRQlERUJFCQkvKiBEZWJvdW5jZSBFbmFibGUgKi8KKworI2RlZmluZSBST1RfQ0RHSU5WCUNER0lOVgkJLyogQ0RHIFBpbiBQb2xhcml0eSBJbnZlcnQgKi8KKyNkZWZpbmUgUk9UX0NVRElOVglDVURJTlYJCS8qIENVRCBQaW4gUG9sYXJpdHkgSW52ZXJ0ICovCisjZGVmaW5lIFJPVF9DWk1JTlYJQ1pNSU5WCQkvKiBDWk0gUGluIFBvbGFyaXR5IEludmVydCAqLworCitzdHJ1Y3QgYmZpbl9yb3RhcnlfcGxhdGZvcm1fZGF0YSB7CisJLyogc2V0IHJvdGFyeSBVUCBLRVlfIyMjIG9yIEJUTl8jIyMgaW4gY2FzZSB5b3UgcHJlZmVyCisJICogYmZpbi1yb3RhcnkgdG8gc2VuZCBFVl9LRVkgb3RoZXJ3aXNlIHNldCAwCisJICovCisJdW5zaWduZWQgaW50IHJvdGFyeV91cF9rZXk7CisJLyogc2V0IHJvdGFyeSBET1dOIEtFWV8jIyMgb3IgQlROXyMjIyBpbiBjYXNlIHlvdSBwcmVmZXIKKwkgKiBiZmluLXJvdGFyeSB0byBzZW5kIEVWX0tFWSBvdGhlcndpc2Ugc2V0IDAKKwkgKi8KKwl1bnNpZ25lZCBpbnQgcm90YXJ5X2Rvd25fa2V5OworCS8qIHNldCByb3RhcnkgQlVUVE9OIEtFWV8jIyMgb3IgQlROXyMjIyAqLworCXVuc2lnbmVkIGludCByb3RhcnlfYnV0dG9uX2tleTsKKwkvKiBzZXQgcm90YXJ5IFJlbGF0aXZlIEF4aXMgUkVMXyMjIyBpbiBjYXNlIHlvdSBwcmVmZXIKKwkgKiBiZmluLXJvdGFyeSB0byBzZW5kIEVWX1JFTCBvdGhlcndpc2Ugc2V0IDAKKwkgKi8KKwl1bnNpZ25lZCBpbnQgcm90YXJ5X3JlbF9jb2RlOworCXVuc2lnbmVkIHNob3J0IGRlYm91bmNlOwkvKiAwLi4xNyAqLworCXVuc2lnbmVkIHNob3J0IG1vZGU7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZDVjZjc0MC4uNDVlYzQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTksNiArNTksOSBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KIAogCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDU3YzNkNDAuLjJkZWE3MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Nyw1ICs1Nyw4IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2MDI1MThhLi4xNTQ3ZjAxIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU3LDQgKzU3LDcgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwogI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwogCisjZGVmaW5lIFNPX1BST1RPQ09MCQkzOAorI2RlZmluZSBTT19ET01BSU4JCTM5CisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL3NpbWV0aC5jIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1ldGguYwppbmRleCBlNGQ4ZmRlLi43ZTgxOTY2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaHAvc2ltL3NpbWV0aC5jCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMKQEAgLTQxMiw3ICs0MTIsNyBAQAogCSAqLwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IDQxYWI4NWQuLmQ2NmQ0NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTE1LDQgKzE1LDcgQEAKICNlbmRpZgogfTsKIAorc3RydWN0IHBkZXZfYXJjaGRhdGEgeworfTsKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA1ZjQzNjk3Li5kOWI2MzI1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjM1LDcgKzIzNSw4IEBACiAjZGVmaW5lIEtWTV9SRVFfUFRDX0cJCTMyCiAjZGVmaW5lIEtWTV9SRVFfUkVTVU1FCQkzMwogCi0jZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UJMQorI2RlZmluZSBLVk1fTlJfUEFHRV9TSVpFUwkxCisjZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UoeCkJMQogCiBzdHJ1Y3Qga3ZtOwogc3RydWN0IGt2bV92Y3B1OwpAQCAtNDY1LDcgKzQ2Niw2IEBACiAJdW5zaWduZWQgbG9uZwltZXRhcGh5c2ljYWxfcnI0OwogCXVuc2lnbmVkIGxvbmcJdm1tX2luaXRfcnI7CiAKLQlpbnQJCW9ubGluZV92Y3B1czsKIAlpbnQJCWlzX3NuMjsKIAogCXN0cnVjdCBrdm1faW9hcGljICp2aW9hcGljOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAppbmRleCAwZDZkOGNhLi4xNTg4YWVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX3BhcmEuaApAQCAtMTksOSArMTksMTMgQEAKICAqCiAgKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga3ZtX2FyY2hfcGFyYV9mZWF0dXJlcyh2b2lkKQogewogCXJldHVybiAwOwogfQogCiAjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggNzQ1NDIxMi4uMGIwZDVmZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjYsNCArNjYsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwppbmRleCAyM2Y4NDZkLi5lNmM1YzNkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9tY2FfYXNtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlICJoZWFkLmgiCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKICNkZWZpbmUgU0FMX1BTUl9CSVRTX1RPX1NFVAkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuaCBiL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMmFjNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuaApAQCAtMCwwICsxIEBACitleHRlcm4gdm9pZCBjb25zb2xlX3ByaW50KGNvbnN0IGNoYXIgKnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCA4OTk2OWU5Li45YmNlYzk5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTYxLDYgKzE2MSwxMyBAQAogCQlzaG93X3N0YWNrKE5VTEwsIE5VTEwpOwogfQogCisvKiBsb2NhbCBzdXBwb3J0IGZvciBkZXByZWNhdGVkIGNvbnNvbGVfcHJpbnQgKi8KK3ZvaWQKK2NvbnNvbGVfcHJpbnQoY29uc3QgY2hhciAqcykKK3sKKwlwcmludGsoS0VSTl9FTUVSRyAiJXMiLCBzKTsKK30KKwogdm9pZAogZG9fbm90aWZ5X3Jlc3VtZV91c2VyKHNpZ3NldF90ICp1bnVzZWQsIHN0cnVjdCBzaWdzY3JhdGNoICpzY3IsIGxvbmcgaW5fc3lzY2FsbCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vS2NvbmZpZyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwppbmRleCA2NGQ1MjA5Li5lZjNlN2JlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL0tjb25maWcKKysrIGIvYXJjaC9pYTY0L2t2bS9LY29uZmlnCkBAIC0xLDEyICsxLDggQEAKICMKICMgS1ZNIGNvbmZpZ3VyYXRpb24KICMKLWNvbmZpZyBIQVZFX0tWTQotCWJvb2wKIAotY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKLSAgICAgICBib29sCi0gICAgICAgZGVmYXVsdCB5Citzb3VyY2UgInZpcnQva3ZtL0tjb25maWciCiAKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKQEAgLTI4LDYgKzI0LDggQEAKIAlkZXBlbmRzIG9uIFBDSQogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBBTk9OX0lOT0RFUworCXNlbGVjdCBIQVZFX0tWTV9JUlFDSElQCisJc2VsZWN0IEtWTV9BUElDX0FSQ0hJVEVDVFVSRQogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZQogCSAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50CkBAIC00OSw5ICs0Nyw2IEBACiAJICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gSXRhbml1bSAyIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgVlQKIAkgIGV4dGVuc2lvbnMuCiAKLWNvbmZpZyBLVk1fVFJBQ0UKLSAgICAgICBib29sCi0KIHNvdXJjZSBkcml2ZXJzL3ZpcnRpby9LY29uZmlnCiAKIGVuZGlmICMgVklSVFVBTElaQVRJT04KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwppbmRleCA4MGM1N2IwLi4wYWQwOWYwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCkBAIC0yMTAsMTYgKzIxMCw2IEBACiAKIH0KIAotc3RhdGljIHN0cnVjdCBrdm1faW9fZGV2aWNlICp2Y3B1X2ZpbmRfbW1pb19kZXYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCQlncGFfdCBhZGRyLCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCi17Ci0Jc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldjsKLQotCWRldiA9IGt2bV9pb19idXNfZmluZF9kZXYoJnZjcHUtPmt2bS0+bW1pb19idXMsIGFkZHIsIGxlbiwgaXNfd3JpdGUpOwotCi0JcmV0dXJuIGRldjsKLX0KLQogc3RhdGljIGludCBoYW5kbGVfdm1fZXJyb3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX1VOS05PV047CkBAIC0yMzEsNiArMjIxLDcgQEAKIHsKIAlzdHJ1Y3Qga3ZtX21taW9fcmVxICpwOwogCXN0cnVjdCBrdm1faW9fZGV2aWNlICptbWlvX2RldjsKKwlpbnQgcjsKIAogCXAgPSBrdm1fZ2V0X3ZjcHVfaW9yZXEodmNwdSk7CiAKQEAgLTI0NywxNiArMjM4LDEzIEBACiAJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9NTUlPOwogCXJldHVybiAwOwogbW1pbzoKLQltbWlvX2RldiA9IHZjcHVfZmluZF9tbWlvX2Rldih2Y3B1LCBwLT5hZGRyLCBwLT5zaXplLCAhcC0+ZGlyKTsKLQlpZiAobW1pb19kZXYpIHsKLQkJaWYgKCFwLT5kaXIpCi0JCQlrdm1faW9kZXZpY2Vfd3JpdGUobW1pb19kZXYsIHAtPmFkZHIsIHAtPnNpemUsCi0JCQkJCQkmcC0+ZGF0YSk7Ci0JCWVsc2UKLQkJCWt2bV9pb2RldmljZV9yZWFkKG1taW9fZGV2LCBwLT5hZGRyLCBwLT5zaXplLAotCQkJCQkJJnAtPmRhdGEpOwotCi0JfSBlbHNlCisJaWYgKHAtPmRpcikKKwkJciA9IGt2bV9pb19idXNfcmVhZCgmdmNwdS0+a3ZtLT5tbWlvX2J1cywgcC0+YWRkciwKKwkJCQkgICAgcC0+c2l6ZSwgJnAtPmRhdGEpOworCWVsc2UKKwkJciA9IGt2bV9pb19idXNfd3JpdGUoJnZjcHUtPmt2bS0+bW1pb19idXMsIHAtPmFkZHIsCisJCQkJICAgICBwLT5zaXplLCAmcC0+ZGF0YSk7CisJaWYgKHIpCiAJCXByaW50ayhLRVJOX0VSUiJrdm06IE5vIGlvZGV2aWNlIGZvdW5kISBhZGRyOiVseFxuIiwgcC0+YWRkcik7CiAJcC0+c3RhdGUgPSBTVEFURV9JT1JFU1BfUkVBRFk7CiAKQEAgLTMzNywxMyArMzI1LDEyIEBACiB7CiAJdW5pb24gaWE2NF9saWQgbGlkOwogCWludCBpOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAotCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKLQkJaWYgKGt2bS0+dmNwdXNbaV0pIHsKLQkJCWxpZC52YWwgPSBWQ1BVX0xJRChrdm0tPnZjcHVzW2ldKTsKLQkJCWlmIChsaWQuaWQgPT0gaWQgJiYgbGlkLmVpZCA9PSBlaWQpCi0JCQkJcmV0dXJuIGt2bS0+dmNwdXNbaV07Ci0JCX0KKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKKwkJbGlkLnZhbCA9IFZDUFVfTElEKHZjcHUpOworCQlpZiAobGlkLmlkID09IGlkICYmIGxpZC5laWQgPT0gZWlkKQorCQkJcmV0dXJuIHZjcHU7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC00MDksMjEgKzM5NiwyMSBAQAogCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKIAlzdHJ1Y3QgY2FsbF9kYXRhIGNhbGxfZGF0YTsKIAlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHVpOwogCiAJY2FsbF9kYXRhLnB0Y19nX2RhdGEgPSBwLT51LnB0Y19nX2RhdGE7CiAKLQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7Ci0JCWlmICgha3ZtLT52Y3B1c1tpXSB8fCBrdm0tPnZjcHVzW2ldLT5hcmNoLm1wX3N0YXRlID09Ci0JCQkJCQlLVk1fTVBfU1RBVEVfVU5JTklUSUFMSVpFRCB8fAotCQkJCQl2Y3B1ID09IGt2bS0+dmNwdXNbaV0pCisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdWksIGt2bSkgeworCQlpZiAodmNwdWktPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1VOSU5JVElBTElaRUQgfHwKKwkJCQl2Y3B1ID09IHZjcHVpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmt2bS0+dmNwdXNbaV0tPndxKSkKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgma3ZtLT52Y3B1c1tpXS0+d3EpOworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdmNwdWktPndxKSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdmNwdWktPndxKTsKIAotCQlpZiAoa3ZtLT52Y3B1c1tpXS0+Y3B1ICE9IC0xKSB7Ci0JCQljYWxsX2RhdGEudmNwdSA9IGt2bS0+dmNwdXNbaV07Ci0JCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoa3ZtLT52Y3B1c1tpXS0+Y3B1LAorCQlpZiAodmNwdWktPmNwdSAhPSAtMSkgeworCQkJY2FsbF9kYXRhLnZjcHUgPSB2Y3B1aTsKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSh2Y3B1aS0+Y3B1LAogCQkJCQl2Y3B1X2dsb2JhbF9wdXJnZSwgJmNhbGxfZGF0YSwgMSk7CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyJrdm06IFVuaW5pdCB2Y3B1IHJlY2VpdmVkIGlwaSFcbiIpOwpAQCAtODUyLDggKzgzOSw2IEBACiAKIAlrdm1faW5pdF92bShrdm0pOwogCi0Ja3ZtLT5hcmNoLm9ubGluZV92Y3B1cyA9IDA7Ci0KIAlyZXR1cm4ga3ZtOwogCiB9CkBAIC0xMDAwLDEwICs5ODUsMTAgQEAKIAkJCWdvdG8gb3V0OwogCQlpZiAoaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSkgewogCQkJX19zMzIgc3RhdHVzOwotCQkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwkJCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCQkJc3RhdHVzID0ga3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCiAJCQkJICAgIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7Ci0JCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CisJCQltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwogCQkJaWYgKGlvY3RsID09IEtWTV9JUlFfTElORV9TVEFUVVMpIHsKIAkJCQlpcnFfZXZlbnQuc3RhdHVzID0gc3RhdHVzOwogCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlycV9ldmVudCwKQEAgLTEyMTYsNyArMTIwMSw3IEBACiAJaWYgKElTX0VSUih2bW1fdmNwdSkpCiAJCXJldHVybiBQVFJfRVJSKHZtbV92Y3B1KTsKIAotCWlmICh2Y3B1LT52Y3B1X2lkID09IDApIHsKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpKSB7CiAJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CiAKIAkJLypTZXQgZW50cnkgYWRkcmVzcyBmb3IgZmlyc3QgcnVuLiovCkBAIC0xMjI0LDcgKzEyMDksNyBAQAogCiAJCS8qSW5pdGlhbGl6ZSBpdGMgb2Zmc2V0IGZvciB2Y3B1cyovCiAJCWl0Y19vZmZzZXQgPSAwVUwgLSBrdm1fZ2V0X2l0Yyh2Y3B1KTsKLQkJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CiAJCQl2ID0gKHN0cnVjdCBrdm1fdmNwdSAqKSgoY2hhciAqKXZjcHUgKwogCQkJCQlzaXplb2Yoc3RydWN0IGt2bV92Y3B1X2RhdGEpICogaSk7CiAJCQl2LT5hcmNoLml0Y19vZmZzZXQgPSBpdGNfb2Zmc2V0OwpAQCAtMTM1Niw4ICsxMzQxLDYgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWt2bS0+YXJjaC5vbmxpbmVfdmNwdXMrKzsKLQogCXJldHVybiB2Y3B1OwogZmFpbDoKIAlyZXR1cm4gRVJSX1BUUihyKTsKQEAgLTE5NTIsMTkgKzE5MzUsNiBAQAogICAgIHJldHVybiBmaW5kX2hpZ2hlc3RfYml0cygoaW50ICopJnZwZC0+aXJyWzBdKTsKIH0KIAotaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JaWYgKGt2bV9oaWdoZXN0X3BlbmRpbmdfaXJxKHZjcHUpICE9IC0xKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGt2bV9hcmNoX2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQkvKiBkbyByZWFsIGNoZWNrIGhlcmUgKi8KLQlyZXR1cm4gMTsKLX0KLQogaW50IGt2bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiB2Y3B1LT5hcmNoLnRpbWVyX2ZpcmVkOwpAQCAtMTk3Nyw3ICsxOTQ3LDggQEAKIAogaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKKwlyZXR1cm4gKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKSB8fAorCQkoa3ZtX2hpZ2hlc3RfcGVuZGluZ19pcnEodmNwdSkgIT0gLTEpOwogfQogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZjcHUuYyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5jCmluZGV4IGNjNDA2ZDAuLmRjZTc1YjcwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuYworKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuYwpAQCAtODMwLDggKzgzMCw4IEBACiAKIAlrdm0gPSAoc3RydWN0IGt2bSAqKUtWTV9WTV9CQVNFOwogCi0JaWYgKHZjcHUtPnZjcHVfaWQgPT0gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5hcmNoLm9ubGluZV92Y3B1czsgaSsrKSB7CisJaWYgKGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3ZjcHVzKTsgaSsrKSB7CiAJCQl2ID0gKHN0cnVjdCBrdm1fdmNwdSAqKSgoY2hhciAqKXZjcHUgKwogCQkJCQlzaXplb2Yoc3RydWN0IGt2bV92Y3B1X2RhdGEpICogaSk7CiAJCQlWTVgodiwgaXRjX29mZnNldCkgPSBpdGNfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGJlN2VkNTguLjMzOTBhODYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU3LDQgKzU3LDcgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwogI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwogCisjZGVmaW5lIFNPX1BST1RPQ09MCQkzOAorI2RlZmluZSBTT19ET01BSU4JCTM5CisKICNlbmRpZiAvKiBfQVNNX00zMlJfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBjYTg3ZjkzLi5lZWUwMWNjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Nyw0ICs1Nyw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IGMwNDI4MzAuLjMwMjg2ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTE2LDYgKzE2LDkgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKm9mX25vZGU7CiB9OwogCitzdHJ1Y3QgcGRldl9hcmNoZGF0YSB7Cit9OworCiAjZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX0RFVklDRV9IICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCmluZGV4IDJlY2FiNjEuLmNmNTBmYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHlfZml4ZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hcjcvYXI3Lmg+CkBAIC0yMDgsNiArMjEwLDEyIEBACiAJLndpZHRoID0gMiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyBmaXhlZF9waHlfc3RhdHVzIF9faW5pdGRhdGEgPSB7CisJLmxpbmsgPSAxLAorCS5zcGVlZCA9IDEwMCwKKwkuZHVwbGV4ID0gMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9jcG1hY19kYXRhIGNwbWFjX2xvd19kYXRhID0gewogCS5yZXNldF9iaXQgPSAxNywKIAkucG93ZXJfYml0ID0gMjAsCkBAIC01MzAsNiArNTM4LDkgQEAKIAl9CiAKIAlpZiAoYXI3X2hhc19oaWdoX2NwbWFjKCkpIHsKKwkJcmVzID0gZml4ZWRfcGh5X2FkZChQSFlfUE9MTCwgY3BtYWNfaGlnaC5pZCwgJmZpeGVkX3BoeV9zdGF0dXMpOworCQlpZiAocmVzICYmIHJlcyAhPSAtRU5PREVWKQorCQkJcmV0dXJuIHJlczsKIAkJY3BtYWNfZ2V0X21hYygxLCBjcG1hY19oaWdoX2RhdGEuZGV2X2FkZHIpOwogCQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNwbWFjX2hpZ2gpOwogCQlpZiAocmVzKQpAQCAtNTM4LDYgKzU0OSwxMCBAQAogCQljcG1hY19sb3dfZGF0YS5waHlfbWFzayA9IDB4ZmZmZmZmZmY7CiAJfQogCisJcmVzID0gZml4ZWRfcGh5X2FkZChQSFlfUE9MTCwgY3BtYWNfbG93LmlkLCAmZml4ZWRfcGh5X3N0YXR1cyk7CisJaWYgKHJlcyAmJiByZXMgIT0gLUVOT0RFVikKKwkJcmV0dXJuIHJlczsKKwogCWNwbWFjX2dldF9tYWMoMCwgY3BtYWNfbG93X2RhdGEuZGV2X2FkZHIpOwogCXJlcyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY3BtYWNfbG93KTsKIAlpZiAocmVzKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDJhYmNhMTcuLmFlMDVhY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTQyLDYgKzQyLDggQEAKICNkZWZpbmUgU09fU05EVElNRU8JMHgxMDA1CS8qIHNlbmQgdGltZW91dCAqLwogI2RlZmluZSBTT19SQ1ZUSU1FTyAJMHgxMDA2CS8qIHJlY2VpdmUgdGltZW91dCAqLwogI2RlZmluZSBTT19BQ0NFUFRDT05OCTB4MTAwOQorI2RlZmluZSBTT19QUk9UT0NPTAkweDEwMjgJLyogcHJvdG9jb2wgdHlwZSAqLworI2RlZmluZSBTT19ET01BSU4JMHgxMDI5CS8qIGRvbWFpbi9zb2NrZXQgZmFtaWx5ICovCiAKIC8qIGxpbnV4LXNwZWNpZmljLCBtaWdodCBhcyB3ZWxsIGJlIHRoZSBzYW1lIGFzIG9uIGkzODYgKi8KICNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCBlODU1YjExLi4xYTZhZTEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlQVFIJc3lzX2Nvbm5lY3QKIAlQVFIJc3lzX2FjY2VwdAogCVBUUglzeXNfc2VuZHRvCi0JUFRSCXN5c19yZWN2ZnJvbQorCVBUUgljb21wYXRfc3lzX3JlY3Zmcm9tCiAJUFRSCWNvbXBhdF9zeXNfc2VuZG1zZwkJLyogNjA0NSAqLwogCVBUUgljb21wYXRfc3lzX3JlY3Ztc2cKIAlQVFIJc3lzX3NodXRkb3duCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggMGM0OWYxYS4uY2QzMTA4NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMzc4LDggKzM3OCw4IEBACiAJUFRSCXN5c19nZXRzb2NrbmFtZQogCVBUUglzeXNfZ2V0c29ja29wdAogCVBUUglzeXNfbGlzdGVuCi0JUFRSCXN5c19yZWN2CQkJLyogNDE3NSAqLwotCVBUUglzeXNfcmVjdmZyb20KKwlQVFIJY29tcGF0X3N5c19yZWN2CQkJLyogNDE3NSAqLworCVBUUgljb21wYXRfc3lzX3JlY3Zmcm9tCiAJUFRSCWNvbXBhdF9zeXNfcmVjdm1zZwogCVBUUglzeXNfc2VuZAogCVBUUgljb21wYXRfc3lzX3NlbmRtc2cKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBmYjVkYWY0Li40ZGY3NWFmIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Nyw0ICs1Nyw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA4ODU0NzJiLi45NjBiMWU1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtMjQsNiArMjQsOCBAQAogI2RlZmluZSBTT19SQ1ZUSU1FTwkweDEwMDYKICNkZWZpbmUgU09fRVJST1IJMHgxMDA3CiAjZGVmaW5lIFNPX1RZUEUJCTB4MTAwOAorI2RlZmluZSBTT19QUk9UT0NPTAkweDEwMjgKKyNkZWZpbmUgU09fRE9NQUlOCTB4MTAyOQogI2RlZmluZSBTT19QRUVSTkFNRQkweDIwMDAKIAogI2RlZmluZSBTT19OT19DSEVDSwkweDQwMGIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCA3ZDIyNzdjLi5lM2UwNmUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0zMCw0ICszMCw3IEBACiAJcmV0dXJuIGFkLT5vZl9ub2RlOwogfQogCitzdHJ1Y3QgcGRldl9hcmNoZGF0YSB7Cit9OworCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGZkZGMzZWQuLmM5YzkzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0zNCw3ICszNCw4IEBACiAjZGVmaW5lIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVCAxCiAKIC8qIFdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGxhcmdlIHBhZ2VzLiAqLwotI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFICgxVUwgPDwgMzEpCisjZGVmaW5lIEtWTV9OUl9QQUdFX1NJWkVTCTEKKyNkZWZpbmUgS1ZNX1BBR0VTX1BFUl9IUEFHRSh4KQkoMVVMPDwzMSkKIAogc3RydWN0IGt2bTsKIHN0cnVjdCBrdm1fcnVuOwpAQCAtMTUzLDcgKzE1NCw2IEBACiAJdTMyIHBpZDsKIAl1MzIgc3dhcF9waWQ7CiAKLQl1MzIgcHZyOwogCXUzMiBjY3IwOwogCXUzMiBjY3IxOwogCXUzMiBkYmNyMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9xZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3FlLmgKaW5kZXggMTU3YzVjYS4uZjM4OGYwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3FlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3FlLmgKQEAgLTE1NCw2ICsxNTQsNyBAQAogdm9pZCBxZV9wdXRfc251bSh1OCBzbnVtKTsKIHVuc2lnbmVkIGludCBxZV9nZXRfbnVtX29mX3Jpc2Modm9pZCk7CiB1bnNpZ25lZCBpbnQgcWVfZ2V0X251bV9vZl9zbnVtcyh2b2lkKTsKK2ludCBxZV9hbGl2ZV9kdXJpbmdfc2xlZXAodm9pZCk7CiAKIC8qIHdlIGFjdHVhbGx5IHVzZSBjcG1fbXVyYW0gaW1wbGVtZW50YXRpb24sIGRlZmluZSB0aGlzIGZvciBjb252ZW5pZW5jZSAqLwogI2RlZmluZSBxZV9tdXJhbV9pbml0IGNwbV9tdXJhbV9pbml0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggMWU1Y2ZhZC4uM2FiOGIzZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjQsNCArNjQsNyBAQAogI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CiAjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCiAKKyNkZWZpbmUgU09fUFJPVE9DT0wJCTM4CisjZGVmaW5lIFNPX0RPTUFJTgkJMzkKKwogI2VuZGlmCS8qIF9BU01fUE9XRVJQQ19TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4LmMKaW5kZXggMGNlZjgwOS4uZjRkMWI1NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS80NHguYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eC5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoa3ZtX3ZjcHVfY2FjaGUsIHZjcHVfNDR4KTsKIH0KIAotc3RhdGljIGludCBrdm1wcGNfNDR4X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGt2bXBwY180NHhfaW5pdCh2b2lkKQogewogCWludCByOwogCkBAIC0xNDksNyArMTQ5LDcgQEAKIAlyZXR1cm4ga3ZtX2luaXQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBrdm1wcGNfdmNwdV80NHgpLCBUSElTX01PRFVMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGt2bXBwY180NHhfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGt2bXBwY180NHhfZXhpdCh2b2lkKQogewogCWt2bXBwY19ib29rZV9leGl0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCmluZGV4IDRhMTZmNDcuLmZmM2NiNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAidGltaW5nLmgiCiAKICNpbmNsdWRlICI0NHhfdGxiLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKIAogI2lmbmRlZiBQUEM0NHhfVExCRV9TSVpFCiAjZGVmaW5lIFBQQzQ0eF9UTEJFX1NJWkUJUFBDNDR4X1RMQl80SwpAQCAtMjYzLDcgKzI2NCw3IEBACiAKIAkvKiBYWFggc2V0IHRsYl80NHhfaW5kZXggdG8gc3RsYl9pbmRleD8gKi8KIAotCUtWTVRSQUNFXzFEKFNUTEJfSU5WQUwsICZ2Y3B1XzQ0eC0+dmNwdSwgc3RsYl9pbmRleCwgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX3N0bGJfaW52YWwoc3RsYl9pbmRleCk7CiB9CiAKIHZvaWQga3ZtcHBjX21tdV9kZXN0cm95KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTM2NSw4ICszNjYsOCBAQAogCS8qIEluc2VydCBzaGFkb3cgbWFwcGluZyBpbnRvIGhhcmR3YXJlIFRMQi4gKi8KIAlrdm1wcGNfNDR4X3RsYmVfc2V0X21vZGlmaWVkKHZjcHVfNDR4LCB2aWN0aW0pOwogCWt2bXBwY180NHhfdGxid2UodmljdGltLCAmc3RsYmUpOwotCUtWTVRSQUNFXzVEKFNUTEJfV1JJVEUsIHZjcHUsIHZpY3RpbSwgc3RsYmUudGlkLCBzdGxiZS53b3JkMCwgc3RsYmUud29yZDEsCi0JICAgICAgICAgICAgc3RsYmUud29yZDIsIGhhbmRsZXIpOworCXRyYWNlX2t2bV9zdGxiX3dyaXRlKHZpY3RpbSwgc3RsYmUudGlkLCBzdGxiZS53b3JkMCwgc3RsYmUud29yZDEsCisJCQkgICAgIHN0bGJlLndvcmQyKTsKIH0KIAogLyogRm9yIGEgcGFydGljdWxhciBndWVzdCBUTEIgZW50cnksIGludmFsaWRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgaG9zdCBUTEIKQEAgLTQ4NSw4ICs0ODYsOCBAQAogCQlrdm1wcGNfbW11X21hcCh2Y3B1LCBlYWRkciwgZ3BhZGRyLCBndGxiX2luZGV4KTsKIAl9CiAKLQlLVk1UUkFDRV81RChHVExCX1dSSVRFLCB2Y3B1LCBndGxiX2luZGV4LCB0bGJlLT50aWQsIHRsYmUtPndvcmQwLAotCSAgICAgICAgICAgIHRsYmUtPndvcmQxLCB0bGJlLT53b3JkMiwgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX2d0bGJfd3JpdGUoZ3RsYl9pbmRleCwgdGxiZS0+dGlkLCB0bGJlLT53b3JkMCwgdGxiZS0+d29yZDEsCisJCQkgICAgIHRsYmUtPndvcmQyKTsKIAogCWt2bXBwY19zZXRfZXhpdF90eXBlKHZjcHUsIEVNVUxBVEVEX1RMQldFX0VYSVRTKTsKIAlyZXR1cm4gRU1VTEFURV9ET05FOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCmluZGV4IDVhMTUyYTUuLmMyOTkyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKQEAgLTIsOCArMiw3IEBACiAjIEtWTSBjb25maWd1cmF0aW9uCiAjCiAKLWNvbmZpZyBIQVZFX0tWTV9JUlFDSElQCi0gICAgICAgYm9vbAorc291cmNlICJ2aXJ0L2t2bS9LY29uZmlnIgogCiBtZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OCiAJYm9vbCAiVmlydHVhbGl6YXRpb24iCkBAIC01OSwxNyArNTgsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCi1jb25maWcgS1ZNX1RSQUNFCi0JYm9vbCAiS1ZNIHRyYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBLVk0gJiYgTUFSS0VSUyAmJiBTWVNGUwotCXNlbGVjdCBSRUxBWQotCXNlbGVjdCBERUJVR19GUwotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGFsbG93cyByZWFkaW5nIGEgdHJhY2Ugb2Yga3ZtLXJlbGF0ZWQgZXZlbnRzIHRocm91Z2gKLQkgIHJlbGF5ZnMuICBOb3RlIHRoZSBBQkkgaXMgbm90IGNvbnNpZGVyZWQgc3RhYmxlIGFuZCB3aWxsIGJlCi0JICBtb2RpZmllZCBpbiBmdXR1cmUgdXBkYXRlcy4KLQogc291cmNlIGRyaXZlcnMvdmlydGlvL0tjb25maWcKIAogZW5kaWYgIyBWSVJUVUFMSVpBVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKaW5kZXggNDU5YzdlZS4uMzc2NTVmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCkBAIC04LDcgKzgsOSBAQAogCiBjb21tb24tb2Jqcy15ID0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fbWFpbi5vIGNvYWxlc2NlZF9tbWlvLm8pCiAKLWNvbW1vbi1vYmpzLSQoQ09ORklHX0tWTV9UUkFDRSkgICs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywga3ZtX3RyYWNlLm8pCitDRkxBR1NfNDR4X3RsYi5vICA6PSAtSS4KK0NGTEFHU19lNTAwX3RsYi5vIDo9IC1JLgorQ0ZMQUdTX2VtdWxhdGUubyAgOj0gLUkuCiAKIGt2bS1vYmpzIDo9ICQoY29tbW9uLW9ianMteSkgcG93ZXJwYy5vIGVtdWxhdGUubwogb2JqLSQoQ09ORklHX0tWTV9FWElUX1RJTUlORykgKz0gdGltaW5nLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYwppbmRleCA2NDJlNDIwLi5lN2JmNGQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAlyZXR1cm4ga3ZtcHBjX2NvcmVfdmNwdV90cmFuc2xhdGUodmNwdSwgdHIpOwogfQogCi1pbnQga3ZtcHBjX2Jvb2tlX2luaXQodm9pZCkKK2ludCBfX2luaXQga3ZtcHBjX2Jvb2tlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGl2b3JbMTZdOwogCXVuc2lnbmVkIGxvbmcgbWF4X2l2b3IgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDAuYwppbmRleCBkODA2N2ZkLi42NDk0OWVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDAuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDAuYwpAQCAtNjAsOSArNjAsNiBAQAogCiAJa3ZtcHBjX2U1MDBfdGxiX3NldHVwKHZjcHVfZTUwMCk7CiAKLQkvKiBVc2UgdGhlIHNhbWUgY29yZSB2ZXJ0aW9uIGFzIGhvc3QncyAqLwotCXZjcHUtPmFyY2gucHZyID0gbWZzcHIoU1BSTl9QVlIpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMiw3ICsxMjksNyBAQAogCWttZW1fY2FjaGVfZnJlZShrdm1fdmNwdV9jYWNoZSwgdmNwdV9lNTAwKTsKIH0KIAotc3RhdGljIGludCBrdm1wcGNfZTUwMF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBrdm1wcGNfZTUwMF9pbml0KHZvaWQpCiB7CiAJaW50IHIsIGk7CiAJdW5zaWduZWQgbG9uZyBpdm9yWzNdOwpAQCAtMTYwLDcgKzE1Nyw3IEBACiAJcmV0dXJuIGt2bV9pbml0KE5VTEwsIHNpemVvZihzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCksIFRISVNfTU9EVUxFKTsKIH0KIAotc3RhdGljIHZvaWQga3ZtcHBjX2U1MDBfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGt2bXBwY19lNTAwX2V4aXQodm9pZCkKIHsKIAlrdm1wcGNfYm9va2VfZXhpdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKaW5kZXggM2Y3NjA0MS4uYmU5NWI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jCkBAIC0xODAsNiArMTgwLDkgQEAKIAljYXNlIFNQUk5fTU1VQ1NSMDoKIAkJdmNwdS0+YXJjaC5ncHJbcnRdID0gMDsgYnJlYWs7CiAKKwljYXNlIFNQUk5fTU1VQ0ZHOgorCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX01NVUNGRyk7IGJyZWFrOworCiAJLyogZXh0cmEgZXhjZXB0aW9ucyAqLwogCWNhc2UgU1BSTl9JVk9SMzI6CiAJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYwppbmRleCAwZTc3M2ZjLi5mYjFlMWRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICIuLi9tbS9tbXVfZGVjbC5oIgogI2luY2x1ZGUgImU1MDBfdGxiLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKIAogI2RlZmluZSB0b19odGxiMV9lc2VsKGVzZWwpICh0bGIxX2VudHJ5X251bSAtIChlc2VsKSAtIDEpCiAKQEAgLTIyNCw5ICsyMjUsOCBAQAogCiAJa3ZtcHBjX2U1MDBfc2hhZG93X3JlbGVhc2UodmNwdV9lNTAwLCB0bGJzZWwsIGVzZWwpOwogCXN0bGJlLT5tYXMxID0gMDsKLQlLVk1UUkFDRV81RChTVExCX0lOVkFMLCAmdmNwdV9lNTAwLT52Y3B1LCBpbmRleF9vZih0bGJzZWwsIGVzZWwpLAotCQkJc3RsYmUtPm1hczEsIHN0bGJlLT5tYXMyLCBzdGxiZS0+bWFzMywgc3RsYmUtPm1hczcsCi0JCQloYW5kbGVyKTsKKwl0cmFjZV9rdm1fc3RsYl9pbnZhbChpbmRleF9vZih0bGJzZWwsIGVzZWwpLCBzdGxiZS0+bWFzMSwgc3RsYmUtPm1hczIsCisJCQkgICAgIHN0bGJlLT5tYXMzLCBzdGxiZS0+bWFzNyk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bXBwY19lNTAwX3RsYjFfaW52YWxpZGF0ZShzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwLApAQCAtMjY5LDcgKzI2OSw3IEBACiAJdGxic2VsID0gKHZjcHVfZTUwMC0+bWFzNCA+PiAyOCkgJiAweDE7CiAJdmljdGltID0gKHRsYnNlbCA9PSAwKSA/IHRsYjBfZ2V0X25leHRfdmljdGltKHZjcHVfZTUwMCkgOiAwOwogCXBpZHNlbCA9ICh2Y3B1X2U1MDAtPm1hczQgPj4gMTYpICYgMHhmOwotCXRzaXplZCA9ICh2Y3B1X2U1MDAtPm1hczQgPj4gOCkgJiAweGY7CisJdHNpemVkID0gKHZjcHVfZTUwMC0+bWFzNCA+PiA3KSAmIDB4MWY7CiAKIAl2Y3B1X2U1MDAtPm1hczAgPSBNQVMwX1RMQlNFTCh0bGJzZWwpIHwgTUFTMF9FU0VMKHZpY3RpbSkKIAkJfCBNQVMwX05WKHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX252W3RsYnNlbF0pOwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJdmNwdV9lNTAwLT5zaGFkb3dfcGFnZXNbdGxic2VsXVtlc2VsXSA9IG5ld19wYWdlOwogCiAJLyogRm9yY2UgVFM9MSBJUFJPVD0wIFRTSVpFPTRLQiBmb3IgYWxsIGd1ZXN0IG1hcHBpbmdzLiAqLwotCXN0bGJlLT5tYXMxID0gTUFTMV9UU0laRShCT09LRV9QQUdFU1pfNEspCisJc3RsYmUtPm1hczEgPSBNQVMxX1RTSVpFKEJPT0szRV9QQUdFU1pfNEspCiAJCXwgTUFTMV9USUQoZ2V0X3RsYl90aWQoZ3RsYmUpKSB8IE1BUzFfVFMgfCBNQVMxX1ZBTElEOwogCXN0bGJlLT5tYXMyID0gKGd2YWRkciAmIE1BUzJfRVBOKQogCQl8IGU1MDBfc2hhZG93X21hczJfYXR0cmliKGd0bGJlLT5tYXMyLApAQCAtMzE5LDkgKzMxOSw4IEBACiAJCQkJdmNwdV9lNTAwLT52Y3B1LmFyY2gubXNyICYgTVNSX1BSKTsKIAlzdGxiZS0+bWFzNyA9IChocGFkZHIgPj4gMzIpICYgTUFTN19SUE47CiAKLQlLVk1UUkFDRV81RChTVExCX1dSSVRFLCAmdmNwdV9lNTAwLT52Y3B1LCBpbmRleF9vZih0bGJzZWwsIGVzZWwpLAotCQkJc3RsYmUtPm1hczEsIHN0bGJlLT5tYXMyLCBzdGxiZS0+bWFzMywgc3RsYmUtPm1hczcsCi0JCQloYW5kbGVyKTsKKwl0cmFjZV9rdm1fc3RsYl93cml0ZShpbmRleF9vZih0bGJzZWwsIGVzZWwpLCBzdGxiZS0+bWFzMSwgc3RsYmUtPm1hczIsCisJCQkgICAgIHN0bGJlLT5tYXMzLCBzdGxiZS0+bWFzNyk7CiB9CiAKIC8qIFhYWCBvbmx5IG1hcCB0aGUgb25lLW9uZSBjYXNlLCBmb3Igbm93IHVzZSBUTEIwICovCkBAIC01MzUsOSArNTM0LDggQEAKIAlndGxiZS0+bWFzMyA9IHZjcHVfZTUwMC0+bWFzMzsKIAlndGxiZS0+bWFzNyA9IHZjcHVfZTUwMC0+bWFzNzsKIAotCUtWTVRSQUNFXzVEKEdUTEJfV1JJVEUsIHZjcHUsIHZjcHVfZTUwMC0+bWFzMCwKLQkJCWd0bGJlLT5tYXMxLCBndGxiZS0+bWFzMiwgZ3RsYmUtPm1hczMsIGd0bGJlLT5tYXM3LAotCQkJaGFuZGxlcik7CisJdHJhY2Vfa3ZtX2d0bGJfd3JpdGUodmNwdV9lNTAwLT5tYXMwLCBndGxiZS0+bWFzMSwgZ3RsYmUtPm1hczIsCisJCQkgICAgIGd0bGJlLT5tYXMzLCBndGxiZS0+bWFzNyk7CiAKIAkvKiBJbnZhbGlkYXRlIHNoYWRvdyBtYXBwaW5ncyBmb3IgdGhlIGFib3V0LXRvLWJlLWNsb2JiZXJlZCBUTEJFLiAqLwogCWlmICh0bGJlX2lzX2hvc3Rfc2FmZSh2Y3B1LCBndGxiZSkpIHsKQEAgLTU0NSw3ICs1NDMsNyBAQAogCQljYXNlIDA6CiAJCQkvKiBUTEIwICovCiAJCQlndGxiZS0+bWFzMSAmPSB+TUFTMV9UU0laRSh+MCk7Ci0JCQlndGxiZS0+bWFzMSB8PSBNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80Syk7CisJCQlndGxiZS0+bWFzMSB8PSBNQVMxX1RTSVpFKEJPT0szRV9QQUdFU1pfNEspOwogCiAJCQlzdGxic2VsID0gMDsKIAkJCXNlc2VsID0ga3ZtcHBjX2U1MDBfc3RsYmVfbWFwKHZjcHVfZTUwMCwgMCwgZXNlbCk7CkBAIC02NzksMTQgKzY3NywxNCBAQAogCiAJLyogSW5zZXJ0IGxhcmdlIGluaXRpYWwgbWFwcGluZyBmb3IgZ3Vlc3QuICovCiAJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVswXTsKLQl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzI1Nk0pOworCXRsYmUtPm1hczEgPSBNQVMxX1ZBTElEIHwgTUFTMV9UU0laRShCT09LM0VfUEFHRVNaXzI1Nk0pOwogCXRsYmUtPm1hczIgPSAwOwogCXRsYmUtPm1hczMgPSBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0s7CiAJdGxiZS0+bWFzNyA9IDA7CiAKIAkvKiA0SyBtYXAgZm9yIHNlcmlhbCBvdXRwdXQuIFVzZWQgYnkga2VybmVsIHdyYXBwZXIuICovCiAJdGxiZSA9ICZ2Y3B1X2U1MDAtPmd1ZXN0X3RsYlsxXVsxXTsKLQl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzRLKTsKKwl0bGJlLT5tYXMxID0gTUFTMV9WQUxJRCB8IE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl80Syk7CiAJdGxiZS0+bWFzMiA9ICgweGUwMDA0NTAwICYgMHhGRkZGRjAwMCkgfCBNQVMyX0kgfCBNQVMyX0c7CiAJdGxiZS0+bWFzMyA9ICgweGUwMDA0NTAwICYgMHhGRkZGRjAwMCkgfCBFNTAwX1RMQl9TVVBFUl9QRVJNX01BU0s7CiAJdGxiZS0+bWFzNyA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmggYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmgKaW5kZXggNDViMDY0Yi4uZDI4ZTMwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuaApAQCAtMTYsNyArMTYsNyBAQAogI2RlZmluZSBfX0tWTV9FNTAwX1RMQl9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+Ci0jaW5jbHVkZSA8YXNtL21tdS1mc2wtYm9va2UuaD4KKyNpbmNsdWRlIDxhc20vbW11LWJvb2szZS5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KICNpbmNsdWRlIDxhc20va3ZtX2U1MDAuaD4KIApAQCAtNTksNyArNTksNyBAQAogLyogVExCIGhlbHBlciBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF90bGJfc2l6ZShjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKIHsKLQlyZXR1cm4gKHRsYmUtPm1hczEgPj4gOCkgJiAweGY7CisJcmV0dXJuICh0bGJlLT5tYXMxID4+IDcpICYgMHgxZjsKIH0KIAogc3RhdGljIGlubGluZSBndmFfdCBnZXRfdGxiX2VhZGRyKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQpAQCAtNzAsNyArNzAsNyBAQAogc3RhdGljIGlubGluZSB1NjQgZ2V0X3RsYl9ieXRlcyhjb25zdCBzdHJ1Y3QgdGxiZSAqdGxiZSkKIHsKIAl1bnNpZ25lZCBpbnQgcGdzaXplID0gZ2V0X3RsYl9zaXplKHRsYmUpOwotCXJldHVybiAxVUxMIDw8IDEwIDw8IChwZ3NpemUgPDwgMSk7CisJcmV0dXJuIDFVTEwgPDwgMTAgPDwgcGdzaXplOwogfQogCiBzdGF0aWMgaW5saW5lIGd2YV90IGdldF90bGJfZW5kKGNvbnN0IHN0cnVjdCB0bGJlICp0bGJlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwppbmRleCBhNTYxZDZlLi43NzM3MTQ2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGFzbS9rdm1fcHBjLmg+CiAjaW5jbHVkZSA8YXNtL2Rpc2Fzc2VtYmxlLmg+CiAjaW5jbHVkZSAidGltaW5nLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKIAogI2RlZmluZSBPUF9UUkFQIDMKIApAQCAtMTg3LDcgKzE4OCw5IEBACiAJCQljYXNlIFNQUk5fU1JSMToKIAkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnNycjE7IGJyZWFrOwogCQkJY2FzZSBTUFJOX1BWUjoKLQkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnB2cjsgYnJlYWs7CisJCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gbWZzcHIoU1BSTl9QVlIpOyBicmVhazsKKwkJCWNhc2UgU1BSTl9QSVI6CisJCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gbWZzcHIoU1BSTl9QSVIpOyBicmVhazsKIAogCQkJLyogTm90ZTogbWZ0YiBhbmQgVEJSTC9UQldMIGFyZSB1c2VyLWFjY2Vzc2libGUsIHNvCiAJCQkgKiB0aGUgZ3Vlc3QgY2FuIGFsd2F5cyBhY2Nlc3MgdGhlIHJlYWwgVEIgYW55d2F5cy4KQEAgLTQxNyw3ICs0MjAsNyBAQAogCQl9CiAJfQogCi0JS1ZNVFJBQ0VfM0QoUFBDX0lOU1RSLCB2Y3B1LCBpbnN0LCAoaW50KXZjcHUtPmFyY2gucGMsIGVtdWxhdGVkLCBlbnRyeWV4aXQpOworCXRyYWNlX2t2bV9wcGNfaW5zdHIoaW5zdCwgdmNwdS0+YXJjaC5wYywgZW11bGF0ZWQpOwogCiAJaWYgKGFkdmFuY2UpCiAJCXZjcHUtPmFyY2gucGMgKz0gNDsgLyogQWR2YW5jZSBwYXN0IGVtdWxhdGVkIGluc3RydWN0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCAyY2Y5MTVlLi4yYTQ1NTFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtMzEsMjUgKzMxLDE3IEBACiAjaW5jbHVkZSAidGltaW5nLmgiCiAjaW5jbHVkZSAiLi4vbW0vbW11X2RlY2wuaCIKIAorI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSAidHJhY2UuaCIKKwogZ2ZuX3QgdW5hbGlhc19nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CiAJcmV0dXJuIGdmbjsKIH0KIAotaW50IGt2bV9jcHVfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpCi17Ci0JcmV0dXJuICEhKHYtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKTsKLX0KLQotaW50IGt2bV9hcmNoX2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQkvKiBkbyByZWFsIGNoZWNrIGhlcmUgKi8KLQlyZXR1cm4gMTsKLX0KLQogaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2KQogewotCXJldHVybiAhKHYtPmFyY2gubXNyICYgTVNSX1dFKTsKKwlyZXR1cm4gISh2LT5hcmNoLm1zciAmIE1TUl9XRSkgfHwgISEodi0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOwogfQogCiAKQEAgLTEyMiwxMyArMTE0LDE3IEBACiBzdGF0aWMgdm9pZCBrdm1wcGNfZnJlZV92Y3B1cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgewotCQlpZiAoa3ZtLT52Y3B1c1tpXSkgewotCQkJa3ZtX2FyY2hfdmNwdV9mcmVlKGt2bS0+dmNwdXNbaV0pOwotCQkJa3ZtLT52Y3B1c1tpXSA9IE5VTEw7Ci0JCX0KLQl9CisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQorCQlrdm1fYXJjaF92Y3B1X2ZyZWUodmNwdSk7CisKKwltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBhdG9taWNfcmVhZCgma3ZtLT5vbmxpbmVfdmNwdXMpOyBpKyspCisJCWt2bS0+dmNwdXNbaV0gPSBOVUxMOworCisJYXRvbWljX3NldCgma3ZtLT5vbmxpbmVfdmNwdXMsIDApOworCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIH0KIAogdm9pZCBrdm1fYXJjaF9zeW5jX2V2ZW50cyhzdHJ1Y3Qga3ZtICprdm0pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL3RyYWNlLmggYi9hcmNoL3Bvd2VycGMva3ZtL3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmMjE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vdHJhY2UuaApAQCAtMCwwICsxLDEwNCBAQAorI2lmICFkZWZpbmVkKF9UUkFDRV9LVk1fSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZpbmUgX1RSQUNFX0tWTV9ICisKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGt2bQorI2RlZmluZSBUUkFDRV9JTkNMVURFX1BBVEggLgorI2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgdHJhY2UKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGd1ZXN0IG1vZGUgZW50cnkuCisgKi8KK1RSQUNFX0VWRU5UKGt2bV9wcGNfaW5zdHIsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IGluc3QsIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGludCBlbXVsYXRlKSwKKwlUUF9BUkdTKGluc3QsIHBjLCBlbXVsYXRlKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJaW5zdAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlwYwkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWVtdWxhdGUJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmluc3QJCT0gaW5zdDsKKwkJX19lbnRyeS0+cGMJCT0gcGM7CisJCV9fZW50cnktPmVtdWxhdGUJPSBlbXVsYXRlOworCSksCisKKwlUUF9wcmludGsoImluc3QgJXUgcGMgMHglbHggZW11bGF0ZSAldVxuIiwKKwkJICBfX2VudHJ5LT5pbnN0LCBfX2VudHJ5LT5wYywgX19lbnRyeS0+ZW11bGF0ZSkKKyk7CisKK1RSQUNFX0VWRU5UKGt2bV9zdGxiX2ludmFsLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBzdGxiX2luZGV4KSwKKwlUUF9BUkdTKHN0bGJfaW5kZXgpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlzdGxiX2luZGV4CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnN0bGJfaW5kZXgJPSBzdGxiX2luZGV4OworCSksCisKKwlUUF9wcmludGsoInN0bGJfaW5kZXggJXUiLCBfX2VudHJ5LT5zdGxiX2luZGV4KQorKTsKKworVFJBQ0VfRVZFTlQoa3ZtX3N0bGJfd3JpdGUsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHZpY3RpbSwgdW5zaWduZWQgaW50IHRpZCwgdW5zaWduZWQgaW50IHdvcmQwLAorCQkgdW5zaWduZWQgaW50IHdvcmQxLCB1bnNpZ25lZCBpbnQgd29yZDIpLAorCVRQX0FSR1ModmljdGltLCB0aWQsIHdvcmQwLCB3b3JkMSwgd29yZDIpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl2aWN0aW0JCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl0aWQJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl3b3JkMAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXdvcmQxCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJd29yZDIJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnZpY3RpbQkJPSB2aWN0aW07CisJCV9fZW50cnktPnRpZAkJPSB0aWQ7CisJCV9fZW50cnktPndvcmQwCQk9IHdvcmQwOworCQlfX2VudHJ5LT53b3JkMQkJPSB3b3JkMTsKKwkJX19lbnRyeS0+d29yZDIJCT0gd29yZDI7CisJKSwKKworCVRQX3ByaW50aygidmljdGltICV1IHRpZCAldSB3MCAldSB3MSAldSB3MiAldSIsCisJCV9fZW50cnktPnZpY3RpbSwgX19lbnRyeS0+dGlkLCBfX2VudHJ5LT53b3JkMCwKKwkJX19lbnRyeS0+d29yZDEsIF9fZW50cnktPndvcmQyKQorKTsKKworVFJBQ0VfRVZFTlQoa3ZtX2d0bGJfd3JpdGUsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IGd0bGJfaW5kZXgsIHVuc2lnbmVkIGludCB0aWQsIHVuc2lnbmVkIGludCB3b3JkMCwKKwkJIHVuc2lnbmVkIGludCB3b3JkMSwgdW5zaWduZWQgaW50IHdvcmQyKSwKKwlUUF9BUkdTKGd0bGJfaW5kZXgsIHRpZCwgd29yZDAsIHdvcmQxLCB3b3JkMiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWd0bGJfaW5kZXgJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXRpZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXdvcmQwCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJd29yZDEJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl3b3JkMgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Z3RsYl9pbmRleAk9IGd0bGJfaW5kZXg7CisJCV9fZW50cnktPnRpZAkJPSB0aWQ7CisJCV9fZW50cnktPndvcmQwCQk9IHdvcmQwOworCQlfX2VudHJ5LT53b3JkMQkJPSB3b3JkMTsKKwkJX19lbnRyeS0+d29yZDIJCT0gd29yZDI7CisJKSwKKworCVRQX3ByaW50aygiZ3RsYl9pbmRleCAldSB0aWQgJXUgdzAgJXUgdzEgJXUgdzIgJXUiLAorCQlfX2VudHJ5LT5ndGxiX2luZGV4LCBfX2VudHJ5LT50aWQsIF9fZW50cnktPndvcmQwLAorCQlfX2VudHJ5LT53b3JkMSwgX19lbnRyeS0+d29yZDIpCispOworCisjZW5kaWYgLyogX1RSQUNFX0tWTV9IICovCisKKy8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLworI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKaW5kZXggMjM3ZTM2NS4uNDY0MjcxYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCkBAIC02NSw2ICs2NSwxOSBAQAogCiBzdGF0aWMgcGh5c19hZGRyX3QgcWViYXNlID0gLTE7CiAKK2ludCBxZV9hbGl2ZV9kdXJpbmdfc2xlZXAodm9pZCkKK3sKKwlzdGF0aWMgaW50IHJldCA9IC0xOworCisJaWYgKHJldCAhPSAtMSkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9ICFvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZnNsLG1wYzg1NjktcG1jIik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChxZV9hbGl2ZV9kdXJpbmdfc2xlZXApOworCiBwaHlzX2FkZHJfdCBnZXRfcWVfYmFzZSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcWU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggMGIyZjgyOS4uM2RmY2FlYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMTUsMTUgKzE1LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLS8qIGZvciBLVk1fR0VUX0lSUUNISVAgYW5kIEtWTV9TRVRfSVJRQ0hJUCAqLwotc3RydWN0IGt2bV9waWNfc3RhdGUgewotCS8qIG5vIFBJQyBmb3IgczM5MCAqLwotfTsKLQotc3RydWN0IGt2bV9pb2FwaWNfc3RhdGUgewotCS8qIG5vIElPQVBJQyBmb3IgczM5MCAqLwotfTsKLQogLyogZm9yIEtWTV9HRVRfUkVHUyBhbmQgS1ZNX1NFVF9SRUdTICovCiBzdHJ1Y3Qga3ZtX3JlZ3MgewogCS8qIGdlbmVyYWwgcHVycG9zZSByZWdzIGZvciBzMzkwICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDY5ODk4OGYuLjI3NjA1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGFzbS1zMzkwL2t2bV9ob3N0LmggLSBkZWZpbml0aW9uIGZvciBrZXJuZWwgdmlydHVhbCBtYWNoaW5lcyBvbiBzMzkwCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIgb25seSkKQEAgLTQwLDcgKzQwLDExIEBACiAJc3RydWN0IHNjYV9lbnRyeSBjcHVbNjRdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFIDI1NgorI2RlZmluZSBLVk1fTlJfUEFHRV9TSVpFUyAyCisjZGVmaW5lIEtWTV9IUEFHRV9TSElGVCh4KSAoUEFHRV9TSElGVCArICgoeCkgLSAxKSAqIDgpCisjZGVmaW5lIEtWTV9IUEFHRV9TSVpFKHgpICgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKHgpKQorI2RlZmluZSBLVk1fSFBBR0VfTUFTSyh4KQkofihLVk1fSFBBR0VfU0laRSh4KSAtIDEpKQorI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCShLVk1fSFBBR0VfU0laRSh4KSAvIFBBR0VfU0laRSkKIAogI2RlZmluZSBDUFVTVEFUX0hPU1QgICAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBDUFVTVEFUX1dBSVQgICAgICAgMHgxMDAwMDAwMApAQCAtMTgyLDggKzE4Niw5IEBACiB9OwogCiAvKiBmb3IgbG9jYWxfaW50ZXJydXB0LmFjdGlvbl9mbGFncyAqLwotI2RlZmluZSBBQ1RJT05fU1RPUkVfT05fU1RPUCAxCi0jZGVmaW5lIEFDVElPTl9TVE9QX09OX1NUT1AgIDIKKyNkZWZpbmUgQUNUSU9OX1NUT1JFX09OX1NUT1AJCSgxPDwwKQorI2RlZmluZSBBQ1RJT05fU1RPUF9PTl9TVE9QCQkoMTw8MSkKKyNkZWZpbmUgQUNUSU9OX1JFTE9BRFZDUFVfT05fU1RPUAkoMTw8MikKIAogc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCB7CiAJc3BpbmxvY2tfdCBsb2NrOwpAQCAtMjI3LDggKzIzMiw2IEBACiB9OwogCiBzdHJ1Y3Qga3ZtX2FyY2h7Ci0JdW5zaWduZWQgbG9uZyBndWVzdF9vcmlnaW47Ci0JdW5zaWduZWQgbG9uZyBndWVzdF9tZW1zaXplOwogCXN0cnVjdCBzY2FfYmxvY2sgKnNjYTsKIAlkZWJ1Z19pbmZvX3QgKmRiZjsKIAlzdHJ1Y3Qga3ZtX3MzOTBfZmxvYXRfaW50ZXJydXB0IGZsb2F0X2ludDsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKaW5kZXggMmM1MDM3OS4uNjk2NGRiMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKQEAgLTEzLDYgKzEzLDggQEAKICNpZm5kZWYgX19TMzkwX0tWTV9QQVJBX0gKICNkZWZpbmUgX19TMzkwX0tWTV9QQVJBX0gKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogLyoKICAqIEh5cGVyY2FsbHMgZm9yIEtWTSBvbiBzMzkwLiBUaGUgY2FsbGluZyBjb252ZW50aW9uIGlzIHNpbWlsYXIgdG8gdGhlCiAgKiBzMzkwIEFCSSwgc28gd2UgdXNlIFIyLVI2IGZvciBwYXJhbWV0ZXJzIDEtNS4gSW4gYWRkaXRpb24gd2UgdXNlIFIxCkBAIC0xNDcsNCArMTQ5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2VuZGlmCisKICNlbmRpZiAvKiBfX1MzOTBfS1ZNX1BBUkFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IDAyMzMwYzUuLmU0MmRmODkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTY1LDQgKzY1LDcgQEAKICNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNwogI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORwogCisjZGVmaW5lIFNPX1BST1RPQ09MCQkzOAorI2RlZmluZSBTT19ET01BSU4JCTM5CisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGltZXguaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aW1leC5oCmluZGV4IDI0YWExY2QuLjY4ZDlmZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aW1leC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90aW1leC5oCkBAIC04OCw2ICs4OCwxNCBAQAogdm9pZCBpbml0X2NwdV90aW1lcih2b2lkKTsKIHVuc2lnbmVkIGxvbmcgbG9uZyBtb25vdG9uaWNfY2xvY2sodm9pZCk7CiAKK3ZvaWQgdG9kX3RvX3RpbWV2YWwoX191NjQsIHN0cnVjdCB0aW1lc3BlYyAqKTsKKworc3RhdGljIGlubGluZQordm9pZCBzdGNrX3RvX3RpbWVzcGVjKHVuc2lnbmVkIGxvbmcgbG9uZyBzdGNrLCBzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXRvZF90b190aW1ldmFsKHN0Y2sgLSBUT0RfVU5JWF9FUE9DSCwgdHMpOworfQorCiBleHRlcm4gdTY0IHNjaGVkX2Nsb2NrX2Jhc2VfY2M7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IGJlOGJjZWEuLjRjNTEyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTYzLDggKzYzLDYgQEAKIH0gZGVidWdfc3ByaW50Zl9lbnRyeV90OwogCiAKLWV4dGVybiB2b2lkIHRvZF90b190aW1ldmFsKHVpbnQ2NF90IHRvZHZhbCwgc3RydWN0IHRpbWVzcGVjICp4dGltZSk7Ci0KIC8qIGludGVybmFsIGZ1bmN0aW9uIHByb3RvdHllcyAqLwogCiBzdGF0aWMgaW50IGRlYnVnX2luaXQodm9pZCk7CkBAIC0xNDUwLDE3ICsxNDQ4LDEzIEBACiAJCQkgaW50IGFyZWEsIGRlYnVnX2VudHJ5X3QgKiBlbnRyeSwgY2hhciAqb3V0X2J1ZikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdGltZV9zcGVjOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lOwogCWNoYXIgKmV4Y2VwdF9zdHI7CiAJdW5zaWduZWQgbG9uZyBjYWxsZXI7CiAJaW50IHJjID0gMDsKIAl1bnNpZ25lZCBpbnQgbGV2ZWw7CiAKIAlsZXZlbCA9IGVudHJ5LT5pZC5maWVsZHMubGV2ZWw7Ci0JdGltZSA9IGVudHJ5LT5pZC5zdGNrOwotCS8qIGFkanVzdCB0b2RjbG9jayB0byAxOTcwICovCi0JdGltZSAtPSAweDgxMjZkNjBlNDYwMDAwMDBMTCAtICgweDNjMjY3MDBMTCAqIDEwMDAwMDAgKiA0MDk2KTsKLQl0b2RfdG9fdGltZXZhbCh0aW1lLCAmdGltZV9zcGVjKTsKKwlzdGNrX3RvX3RpbWVzcGVjKGVudHJ5LT5pZC5zdGNrLCAmdGltZV9zcGVjKTsKIAogCWlmIChlbnRyeS0+aWQuZmllbGRzLmV4Y2VwdGlvbikKIAkJZXhjZXB0X3N0ciA9ICIqIjsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKaW5kZXggNTRlMzI3ZS4uZTNkYzI4YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMKQEAgLTkxLDYgKzkxLDcgQEAKIAl0b2R2YWwgLT0gKHNlYyAqIDEwMDAwMDApIDw8IDEyOwogCXh0aW1lLT50dl9uc2VjID0gKCh0b2R2YWwgKiAxMDAwKSA+PiAxMik7CiB9CitFWFBPUlRfU1lNQk9MKHRvZF90b190aW1ldmFsKTsKIAogdm9pZCBjbG9ja19jb21wYXJhdG9yX3dvcmsodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwppbmRleCAzZTI2MGI3Li5iZjE2NGZjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCkBAIC0xLDExICsxLDcgQEAKICMKICMgS1ZNIGNvbmZpZ3VyYXRpb24KICMKLWNvbmZpZyBIQVZFX0tWTQotICAgICAgIGJvb2wKLQotY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKLSAgICAgICBib29sCitzb3VyY2UgInZpcnQva3ZtL0tjb25maWciCiAKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKQEAgLTM4LDkgKzM0LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEtWTV9UUkFDRQotICAgICAgIGJvb2wKLQogIyBPSywgaXQncyBhIGxpdHRsZSBjb3VudGVyLWludHVpdGl2ZSB0byBkbyB0aGlzLCBidXQgaXQgcHV0cyBpdCBuZWF0bHkgdW5kZXIKICMgdGhlIHZpcnR1YWxpemF0aW9uIG1lbnUuCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9nYWNjZXNzLmggYi9hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaAppbmRleCBlZDYwZjNhLi4wM2M3MTZhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaAorKysgYi9hcmNoL3MzOTAva3ZtL2dhY2Nlc3MuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBnYWNjZXNzLmggLSAgYWNjZXNzIGd1ZXN0IG1lbW9yeQogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LDIwMDkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyIG9ubHkpCkBAIC0xNiwxMyArMTYsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJrdm0tczM5MC5oIgogCiBzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICpfX2d1ZXN0YWRkcl90b191c2VyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZ3Vlc3RhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgcHJlZml4ICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXg7Ci0JdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X29yaWdpbjsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3RfbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG9yaWdpbiAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3I7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplID0ga3ZtX3MzOTBfdmNwdV9nZXRfbWVtc2l6ZSh2Y3B1KTsKIAogCWlmIChndWVzdGFkZHIgPCAyICogUEFHRV9TSVpFKQogCQlndWVzdGFkZHIgKz0gcHJlZml4OwpAQCAtMTU4LDggKzE1OSw4IEBACiAJCQkJY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewogCXVuc2lnbmVkIGxvbmcgcHJlZml4ICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXg7Ci0JdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X29yaWdpbjsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3RfbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG9yaWdpbiAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3I7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplID0ga3ZtX3MzOTBfdmNwdV9nZXRfbWVtc2l6ZSh2Y3B1KTsKIAogCWlmICgoZ3Vlc3RkZXN0IDwgMiAqIFBBR0VfU0laRSkgJiYgKGd1ZXN0ZGVzdCArIG4gPiAyICogUEFHRV9TSVpFKSkKIAkJZ290byBzbG93cGF0aDsKQEAgLTIwOSw4ICsyMTAsOCBAQAogCQkJCSAgdW5zaWduZWQgbG9uZyBndWVzdHNyYywgdW5zaWduZWQgbG9uZyBuKQogewogCXVuc2lnbmVkIGxvbmcgcHJlZml4ICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXg7Ci0JdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X29yaWdpbjsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3RfbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG9yaWdpbiAgPSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3I7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplID0ga3ZtX3MzOTBfdmNwdV9nZXRfbWVtc2l6ZSh2Y3B1KTsKIAogCWlmICgoZ3Vlc3RzcmMgPCAyICogUEFHRV9TSVpFKSAmJiAoZ3Vlc3RzcmMgKyBuID4gMiAqIFBBR0VfU0laRSkpCiAJCWdvdG8gc2xvd3BhdGg7CkBAIC0yNDQsOCArMjQ1LDggQEAKIAkJCQkJIHVuc2lnbmVkIGxvbmcgZ3Vlc3RkZXN0LAogCQkJCQkgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewotCXVuc2lnbmVkIGxvbmcgb3JpZ2luICA9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW47Ci0JdW5zaWduZWQgbG9uZyBtZW1zaXplID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemU7CisJdW5zaWduZWQgbG9uZyBvcmlnaW4gID0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IGt2bV9zMzkwX3ZjcHVfZ2V0X21lbXNpemUodmNwdSk7CiAKIAlpZiAoZ3Vlc3RkZXN0ICsgbiA+IG1lbXNpemUpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMjYyLDggKzI2Myw4IEBACiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZ3Vlc3RzcmMsCiAJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbikKIHsKLQl1bnNpZ25lZCBsb25nIG9yaWdpbiAgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luOwotCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9tZW1zaXplOworCXVuc2lnbmVkIGxvbmcgb3JpZ2luICA9IHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNvcjsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemUgPSBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHZjcHUpOwogCiAJaWYgKGd1ZXN0c3JjICsgbiA+IG1lbXNpemUpCiAJCXJldHVybiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKaW5kZXggOTg5OTdjYy4uYmE5ZDhhNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGludGVyY2VwdC5jIC0gaW4ta2VybmVsIGhhbmRsaW5nIGZvciBzaWUgaW50ZXJjZXB0cwogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LDIwMDkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyIG9ubHkpCkBAIC0xMjgsNyArMTI4LDcgQEAKIAogc3RhdGljIGludCBoYW5kbGVfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JaW50IHJjOworCWludCByYyA9IDA7CiAKIAl2Y3B1LT5zdGF0LmV4aXRfc3RvcF9yZXF1ZXN0Kys7CiAJYXRvbWljX2NsZWFyX21hc2soQ1BVU1RBVF9SVU5OSU5HLCAmdmNwdS0+YXJjaC5zaWVfYmxvY2stPmNwdWZsYWdzKTsKQEAgLTE0MSwxMiArMTQxLDE4IEBACiAJCQlyYyA9IC1FTk9UU1VQUDsKIAl9CiAKKwlpZiAodmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJiBBQ1RJT05fUkVMT0FEVkNQVV9PTl9TVE9QKSB7CisJCXZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzICY9IH5BQ1RJT05fUkVMT0FEVkNQVV9PTl9TVE9QOworCQlyYyA9IFNJRV9JTlRFUkNFUFRfUkVSVU5WQ1BVOworCQl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5UUjsKKwl9CisKIAlpZiAodmNwdS0+YXJjaC5sb2NhbF9pbnQuYWN0aW9uX2JpdHMgJiBBQ1RJT05fU1RPUF9PTl9TVE9QKSB7CiAJCXZjcHUtPmFyY2gubG9jYWxfaW50LmFjdGlvbl9iaXRzICY9IH5BQ1RJT05fU1RPUF9PTl9TVE9QOwogCQlWQ1BVX0VWRU5UKHZjcHUsIDMsICIlcyIsICJjcHUgc3RvcHBlZCIpOwogCQlyYyA9IC1FTk9UU1VQUDsKLQl9IGVsc2UKLQkJcmMgPSAwOworCX0KKwogCXNwaW5fdW5sb2NrX2JoKCZ2Y3B1LT5hcmNoLmxvY2FsX2ludC5sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNTgsOSArMTY0LDkgQEAKIAogCXZjcHUtPnN0YXQuZXhpdF92YWxpZGl0eSsrOwogCWlmICgodml3aHkgPT0gMHgzNykgJiYgKHZjcHUtPmFyY2guc2llX2Jsb2NrLT5wcmVmaXgKLQkJPD0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemUgLSAyKlBBR0VfU0laRSkpeworCQk8PSBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHZjcHUpIC0gMipQQUdFX1NJWkUpKSB7CiAJCXJjID0gZmF1bHRfaW5fcGFnZXNfd3JpdGVhYmxlKChjaGFyIF9fdXNlciAqKQotCQkJIHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW4gKworCQkJIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNvciArCiAJCQkgdmNwdS0+YXJjaC5zaWVfYmxvY2stPnByZWZpeCwKIAkJCSAyKlBBR0VfU0laRSk7CiAJCWlmIChyYykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCmluZGV4IDRkNjEzNDEuLjJjMmY5ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLWludCBrdm1fY3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBrdm1fY3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpID0gJnZjcHUtPmFyY2gubG9jYWxfaW50OwogCXN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gdmNwdS0+YXJjaC5sb2NhbF9pbnQuZmxvYXRfaW50OwpAQCAtMzIwLDEyICszMjAsNiBAQAogCXJldHVybiByYzsKIH0KIAotaW50IGt2bV9hcmNoX2ludGVycnVwdF9hbGxvd2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQkvKiBkbyByZWFsIGNoZWNrIGhlcmUgKi8KLQlyZXR1cm4gMTsKLX0KLQogaW50IGt2bV9jcHVfaGFzX3BlbmRpbmdfdGltZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDkwZDlkMWIuLjA3Y2VkODkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYworKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogczM5MGhvc3QuYyAtLSAgaG9zdGluZyB6U2VyaWVzIGtlcm5lbCB2aXJ0dWFsIG1hY2hpbmVzCiAgKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4CisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICh2ZXJzaW9uIDIgb25seSkKQEAgLTEwLDYgKzEwLDcgQEAKICAqICAgIEF1dGhvcihzKTogQ2Fyc3RlbiBPdHRlIDxjb3R0ZUBkZS5pYm0uY29tPgogICogICAgICAgICAgICAgICBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGJvcm50cmFlZ2VyQGRlLmlibS5jb20+CiAgKiAgICAgICAgICAgICAgIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgorICogICAgICAgICAgICAgICBDaHJpc3RpYW4gRWhyaGFyZHQgPGVocmhhcmR0QGRlLmlibS5jb20+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC0yMTAsMTMgKzIxMSwxNyBAQAogc3RhdGljIHZvaWQga3ZtX2ZyZWVfdmNwdXMoc3RydWN0IGt2bSAqa3ZtKQogewogCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAotCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKLQkJaWYgKGt2bS0+dmNwdXNbaV0pIHsKLQkJCWt2bV9hcmNoX3ZjcHVfZGVzdHJveShrdm0tPnZjcHVzW2ldKTsKLQkJCWt2bS0+dmNwdXNbaV0gPSBOVUxMOwotCQl9Ci0JfQorCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKKwkJa3ZtX2FyY2hfdmNwdV9kZXN0cm95KHZjcHUpOworCisJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3ZjcHVzKTsgaSsrKQorCQlrdm0tPnZjcHVzW2ldID0gTlVMTDsKKworCWF0b21pY19zZXQoJmt2bS0+b25saW5lX3ZjcHVzLCAwKTsKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfc3luY19ldmVudHMoc3RydWN0IGt2bSAqa3ZtKQpAQCAtMjc4LDE2ICsyODMsMTAgQEAKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z2JlYSA9IDE7CiB9CiAKLS8qIFRoZSBjdXJyZW50IGNvZGUgY2FuIGhhdmUgdXAgdG8gMjU2IHBhZ2VzIGZvciB2aXJ0aW8gKi8KLSNkZWZpbmUgVklSVElPREVTQ1NQQUNFICgyNTZ1bCAqIDQwOTZ1bCkKLQogaW50IGt2bV9hcmNoX3ZjcHVfc2V0dXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWF0b21pY19zZXQoJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5jcHVmbGFncywgQ1BVU1RBVF9aQVJDSCk7Ci0JdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtID0gdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemUgKwotCQkJCSAgICAgIHZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW4gKwotCQkJCSAgICAgIFZJUlRJT0RFU0NTUEFDRSAtIDF1bDsKLQl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IgPSB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luOworCXNldF9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpOwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5lY2IgICA9IDI7CiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmVjYSAgID0gMHhDMTAwMjAwMVU7CiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmZhYyAgID0gKGludCkgKGxvbmcpIGZhY2lsaXRpZXM7CkBAIC0zMTksOCArMzE4LDYgQEAKIAlCVUdfT04oIWt2bS0+YXJjaC5zY2EpOwogCWlmICgha3ZtLT5hcmNoLnNjYS0+Y3B1W2lkXS5zZGEpCiAJCWt2bS0+YXJjaC5zY2EtPmNwdVtpZF0uc2RhID0gKF9fdTY0KSB2Y3B1LT5hcmNoLnNpZV9ibG9jazsKLQllbHNlCi0JCUJVR19PTigha3ZtLT52Y3B1c1tpZF0pOyAvKiB2Y3B1IGRvZXMgYWxyZWFkeSBleGlzdCAqLwogCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5zY2FvaCA9IChfX3UzMikoKChfX3U2NClrdm0tPmFyY2guc2NhKSA+PiAzMik7CiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPnNjYW9sID0gKF9fdTMyKShfX3U2NClrdm0tPmFyY2guc2NhOwogCkBAIC00OTAsOSArNDg3LDE1IEBACiAKIAl2Y3B1X2xvYWQodmNwdSk7CiAKK3JlcnVuX3ZjcHU6CisJaWYgKHZjcHUtPnJlcXVlc3RzKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTU1VX1JFTE9BRCwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJCWt2bV9zMzkwX3ZjcHVfc2V0X21lbSh2Y3B1KTsKKwogCS8qIHZlcmlmeSwgdGhhdCBtZW1vcnkgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwotCWlmICghdmNwdS0+a3ZtLT5hcmNoLmd1ZXN0X21lbXNpemUpIHsKKwlpZiAoIXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNsbSkgewogCQl2Y3B1X3B1dCh2Y3B1KTsKKwkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiJXMiLCAibm8gbWVtb3J5IHJlZ2lzdGVyZWQgdG8gcnVuIHZjcHUiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01MDksNiArNTEyLDcgQEAKIAkJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cuYWRkciA9IGt2bV9ydW4tPnMzOTBfc2llaWMuYWRkcjsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fRVhJVF9VTktOT1dOOgorCWNhc2UgS1ZNX0VYSVRfSU5UUjoKIAljYXNlIEtWTV9FWElUX1MzOTBfUkVTRVQ6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC01MjIsOCArNTI2LDEzIEBACiAJCXJjID0ga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0KHZjcHUpOwogCX0gd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiAhcmMpOwogCi0JaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmICFyYykKKwlpZiAocmMgPT0gU0lFX0lOVEVSQ0VQVF9SRVJVTlZDUFUpCisJCWdvdG8gcmVydW5fdmNwdTsKKworCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiAhcmMpIHsKKwkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRSOwogCQlyYyA9IC1FSU5UUjsKKwl9CiAKIAlpZiAocmMgPT0gLUVOT1RTVVBQKSB7CiAJCS8qIGludGVyY2VwdCBjYW5ub3QgYmUgaGFuZGxlZCBpbi1rZXJuZWwsIHByZXBhcmUga3ZtLXJ1biAqLwpAQCAtNjc2LDYgKzY4NSw3IEBACiAJCQkJaW50IHVzZXJfYWxsb2MpCiB7CiAJaW50IGk7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwogCiAJLyogQSBmZXcgc2FuaXR5IGNoZWNrcy4gV2UgY2FuIGhhdmUgZXhhY3RseSBvbmUgbWVtb3J5IHNsb3Qgd2hpY2ggaGFzCiAJICAgdG8gc3RhcnQgYXQgZ3Vlc3QgdmlydHVhbCB6ZXJvIGFuZCB3aGljaCBoYXMgdG8gYmUgbG9jYXRlZCBhdCBhCkBAIC02ODQsNyArNjk0LDcgQEAKIAkgICB2bWFzLiBJdCBpcyBva2F5IHRvIG1tYXAoKSBhbmQgbXVubWFwKCkgc3R1ZmYgaW4gdGhpcyBzbG90IGFmdGVyCiAJICAgZG9pbmcgdGhpcyBjYWxsIGF0IGFueSB0aW1lICovCiAKLQlpZiAobWVtLT5zbG90IHx8IGt2bS0+YXJjaC5ndWVzdF9tZW1zaXplKQorCWlmIChtZW0tPnNsb3QpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1lbS0+Z3Vlc3RfcGh5c19hZGRyKQpAQCAtNjk5LDM2ICs3MDksMTQgQEAKIAlpZiAoIXVzZXJfYWxsb2MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogbG9jayBhbGwgdmNwdXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCWlmICgha3ZtLT52Y3B1c1tpXSkKKwkvKiByZXF1ZXN0IHVwZGF0ZSBvZiBzaWUgY29udHJvbCBibG9jayBmb3IgYWxsIGF2YWlsYWJsZSB2Y3B1cyAqLworCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgeworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChLVk1fUkVRX01NVV9SRUxPQUQsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQljb250aW51ZTsKLQkJaWYgKCFtdXRleF90cnlsb2NrKCZrdm0tPnZjcHVzW2ldLT5tdXRleCkpCi0JCQlnb3RvIGZhaWxfb3V0OwotCX0KLQotCWt2bS0+YXJjaC5ndWVzdF9vcmlnaW4gPSBtZW0tPnVzZXJzcGFjZV9hZGRyOwotCWt2bS0+YXJjaC5ndWVzdF9tZW1zaXplID0gbWVtLT5tZW1vcnlfc2l6ZTsKLQotCS8qIHVwZGF0ZSBzaWUgY29udHJvbCBibG9ja3MsIGFuZCB1bmxvY2sgYWxsIHZjcHVzICovCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgewotCQlpZiAoa3ZtLT52Y3B1c1tpXSkgewotCQkJa3ZtLT52Y3B1c1tpXS0+YXJjaC5zaWVfYmxvY2stPmdtc29yID0KLQkJCQlrdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luOwotCQkJa3ZtLT52Y3B1c1tpXS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtID0KLQkJCQlrdm0tPmFyY2guZ3Vlc3RfbWVtc2l6ZSArCi0JCQkJa3ZtLT5hcmNoLmd1ZXN0X29yaWdpbiArCi0JCQkJVklSVElPREVTQ1NQQUNFIC0gMXVsOwotCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPnZjcHVzW2ldLT5tdXRleCk7Ci0JCX0KKwkJa3ZtX3MzOTBfaW5qZWN0X3NpZ3Bfc3RvcCh2Y3B1LCBBQ1RJT05fUkVMT0FEVkNQVV9PTl9TVE9QKTsKIAl9CiAKIAlyZXR1cm4gMDsKLQotZmFpbF9vdXQ6Ci0JZm9yICg7IGkgPj0gMDsgaS0tKQotCQltdXRleF91bmxvY2soJmt2bS0+dmNwdXNbaV0tPm11dGV4KTsKLQlyZXR1cm4gLUVJTlZBTDsKIH0KIAogdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3coc3RydWN0IGt2bSAqa3ZtKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IDc0OGZlZTguLmVjNWVlZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAorKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICoga3ZtX3MzOTAuaCAtICBkZWZpbml0aW9uIGZvciBrdm0gb24gczM5MAogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LDIwMDkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyIG9ubHkpCkBAIC05LDYgKzksNyBAQAogICoKICAqICAgIEF1dGhvcihzKTogQ2Fyc3RlbiBPdHRlIDxjb3R0ZUBkZS5pYm0uY29tPgogICogICAgICAgICAgICAgICBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGJvcm50cmFlZ2VyQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgICAgIENocmlzdGlhbiBFaHJoYXJkdCA8ZWhyaGFyZHRAZGUuaWJtLmNvbT4KICAqLwogCiAjaWZuZGVmIEFSQ0hfUzM5MF9LVk1fUzM5MF9ICkBAIC0xOCw4ICsxOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAKKy8qIFRoZSBjdXJyZW50IGNvZGUgY2FuIGhhdmUgdXAgdG8gMjU2IHBhZ2VzIGZvciB2aXJ0aW8gKi8KKyNkZWZpbmUgVklSVElPREVTQ1NQQUNFICgyNTZ1bCAqIDQwOTZ1bCkKKwogdHlwZWRlZiBpbnQgKCppbnRlcmNlcHRfaGFuZGxlcl90KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCisvKiBuZWdhdGl2IHZhbHVlcyBhcmUgZXJyb3IgY29kZXMsIHBvc2l0aXZlIHZhbHVlcyBmb3IgaW50ZXJuYWwgY29uZGl0aW9ucyAqLworI2RlZmluZSBTSUVfSU5URVJDRVBUX1JFUlVOVkNQVQkJKDE8PDApCiBpbnQga3ZtX2hhbmRsZV9zaWVfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKICNkZWZpbmUgVk1fRVZFTlQoZF9rdm0sIGRfbG9nbGV2ZWwsIGRfc3RyaW5nLCBkX2FyZ3MuLi4pXApAQCAtNTAsNiArNTYsMzAgQEAKIGludCBrdm1fczM5MF9pbmplY3RfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCXN0cnVjdCBrdm1fczM5MF9pbnRlcnJ1cHQgKnMzOTBpbnQpOwogaW50IGt2bV9zMzkwX2luamVjdF9wcm9ncmFtX2ludChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjb2RlKTsKK2ludCBrdm1fczM5MF9pbmplY3Rfc2lncF9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGFjdGlvbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9zMzkwX3ZjcHVfZ2V0X21lbXNpemUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zbG0KKwkJLSB2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zb3IKKwkJLSBWSVJUSU9ERVNDU1BBQ0UgKyAxdWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1fczM5MF92Y3B1X3NldF9tZW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbTsKKworCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwltZW0gPSAmdmNwdS0+a3ZtLT5tZW1zbG90c1swXTsKKworCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNvciA9IG1lbS0+dXNlcnNwYWNlX2FkZHI7CisJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtID0KKwkJbWVtLT51c2Vyc3BhY2VfYWRkciArCisJCShtZW0tPm5wYWdlcyA8PCBQQUdFX1NISUZUKSArCisJCVZJUlRJT0RFU0NTUEFDRSAtIDF1bDsKKworCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7Cit9CiAKIC8qIGltcGxlbWVudGVkIGluIHByaXYuYyAqLwogaW50IGt2bV9zMzkwX2hhbmRsZV9iMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwppbmRleCAwZWY4MWQ2Li40MGM4YzY3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYworKysgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBzaWdwLmMgLSBoYW5kbGluZ2UgaW50ZXJwcm9jZXNzb3IgY29tbXVuaWNhdGlvbgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LDIwMDkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAodmVyc2lvbiAyIG9ubHkpCkBAIC05LDYgKzksNyBAQAogICoKICAqICAgIEF1dGhvcihzKTogQ2Fyc3RlbiBPdHRlIDxjb3R0ZUBkZS5pYm0uY29tPgogICogICAgICAgICAgICAgICBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGJvcm50cmFlZ2VyQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgICAgIENocmlzdGlhbiBFaHJoYXJkdCA8ZWhyaGFyZHRAZGUuaWJtLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva3ZtLmg+CkBAIC0xMDcsNDYgKzEwOCw1NyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBfX3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBjcHVfYWRkciwgaW50IHN0b3JlKQorc3RhdGljIGludCBfX2luamVjdF9zaWdwX3N0b3Aoc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCAqbGksIGludCBhY3Rpb24pCit7CisJc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpOworCisJaW50aSA9IGt6YWxsb2Moc2l6ZW9mKCppbnRpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnRpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpbnRpLT50eXBlID0gS1ZNX1MzOTBfU0lHUF9TVE9QOworCisJc3Bpbl9sb2NrX2JoKCZsaS0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaW50aS0+bGlzdCwgJmxpLT5saXN0KTsKKwlhdG9taWNfc2V0KCZsaS0+YWN0aXZlLCAxKTsKKwlhdG9taWNfc2V0X21hc2soQ1BVU1RBVF9TVE9QX0lOVCwgbGktPmNwdWZsYWdzKTsKKwlsaS0+YWN0aW9uX2JpdHMgfD0gYWN0aW9uOworCWlmICh3YWl0cXVldWVfYWN0aXZlKCZsaS0+d3EpKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxpLT53cSk7CisJc3Bpbl91bmxvY2tfYmgoJmxpLT5sb2NrKTsKKworCXJldHVybiAwOyAvKiBvcmRlciBhY2NlcHRlZCAqLworfQorCitzdGF0aWMgaW50IF9fc2lncF9zdG9wKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGNwdV9hZGRyLCBpbnQgYWN0aW9uKQogewogCXN0cnVjdCBrdm1fczM5MF9mbG9hdF9pbnRlcnJ1cHQgKmZpID0gJnZjcHUtPmt2bS0+YXJjaC5mbG9hdF9pbnQ7CiAJc3RydWN0IGt2bV9zMzkwX2xvY2FsX2ludGVycnVwdCAqbGk7Ci0Jc3RydWN0IGt2bV9zMzkwX2ludGVycnVwdF9pbmZvICppbnRpOwogCWludCByYzsKIAogCWlmIChjcHVfYWRkciA+PSBLVk1fTUFYX1ZDUFVTKQogCQlyZXR1cm4gMzsgLyogbm90IG9wZXJhdGlvbmFsICovCiAKLQlpbnRpID0ga3phbGxvYyhzaXplb2YoKmludGkpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWludGkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaW50aS0+dHlwZSA9IEtWTV9TMzkwX1NJR1BfU1RPUDsKLQogCXNwaW5fbG9jaygmZmktPmxvY2spOwogCWxpID0gZmktPmxvY2FsX2ludFtjcHVfYWRkcl07CiAJaWYgKGxpID09IE5VTEwpIHsKIAkJcmMgPSAzOyAvKiBub3Qgb3BlcmF0aW9uYWwgKi8KLQkJa2ZyZWUoaW50aSk7CiAJCWdvdG8gdW5sb2NrOwogCX0KLQlzcGluX2xvY2tfYmgoJmxpLT5sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZpbnRpLT5saXN0LCAmbGktPmxpc3QpOwotCWF0b21pY19zZXQoJmxpLT5hY3RpdmUsIDEpOwotCWF0b21pY19zZXRfbWFzayhDUFVTVEFUX1NUT1BfSU5ULCBsaS0+Y3B1ZmxhZ3MpOwotCWlmIChzdG9yZSkKLQkJbGktPmFjdGlvbl9iaXRzIHw9IEFDVElPTl9TVE9SRV9PTl9TVE9QOwotCWxpLT5hY3Rpb25fYml0cyB8PSBBQ1RJT05fU1RPUF9PTl9TVE9QOwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZsaS0+d3EpKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxpLT53cSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxpLT5sb2NrKTsKLQlyYyA9IDA7IC8qIG9yZGVyIGFjY2VwdGVkICovCisKKwlyYyA9IF9faW5qZWN0X3NpZ3Bfc3RvcChsaSwgYWN0aW9uKTsKKwogdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZmaS0+bG9jayk7CiAJVkNQVV9FVkVOVCh2Y3B1LCA0LCAic2VudCBzaWdwIHN0b3AgdG8gY3B1ICV4IiwgY3B1X2FkZHIpOwogCXJldHVybiByYzsKIH0KIAoraW50IGt2bV9zMzkwX2luamVjdF9zaWdwX3N0b3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgYWN0aW9uKQoreworCXN0cnVjdCBrdm1fczM5MF9sb2NhbF9pbnRlcnJ1cHQgKmxpID0gJnZjcHUtPmFyY2gubG9jYWxfaW50OworCXJldHVybiBfX2luamVjdF9zaWdwX3N0b3AobGksIGFjdGlvbik7Cit9CisKIHN0YXRpYyBpbnQgX19zaWdwX3NldF9hcmNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHBhcmFtZXRlcikKIHsKIAlpbnQgcmM7CkBAIC0xNzcsOSArMTg5LDkgQEAKIAkvKiBtYWtlIHN1cmUgdGhhdCB0aGUgbmV3IHZhbHVlIGlzIHZhbGlkIG1lbW9yeSAqLwogCWFkZHJlc3MgPSBhZGRyZXNzICYgMHg3ZmZmZTAwMHU7CiAJaWYgKChjb3B5X2Zyb21fZ3Vlc3QodmNwdSwgJnRtcCwKLQkJKHU2NCkgKGFkZHJlc3MgKyB2Y3B1LT5rdm0tPmFyY2guZ3Vlc3Rfb3JpZ2luKSAsIDEpKSB8fAorCQkodTY0KSAoYWRkcmVzcyArIHZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNvcikgLCAxKSkgfHwKIAkgICAoY29weV9mcm9tX2d1ZXN0KHZjcHUsICZ0bXAsICh1NjQpIChhZGRyZXNzICsKLQkJCXZjcHUtPmt2bS0+YXJjaC5ndWVzdF9vcmlnaW4gKyBQQUdFX1NJWkUpLCAxKSkpIHsKKwkJCXZjcHUtPmFyY2guc2llX2Jsb2NrLT5nbXNvciArIFBBR0VfU0laRSksIDEpKSkgewogCQkqcmVnIHw9IFNJR1BfU1RBVF9JTlZBTElEX1BBUkFNRVRFUjsKIAkJcmV0dXJuIDE7IC8qIGludmFsaWQgcGFyYW1ldGVyICovCiAJfQpAQCAtMjYyLDExICsyNzQsMTEgQEAKIAkJYnJlYWs7CiAJY2FzZSBTSUdQX1NUT1A6CiAJCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fc2lncF9zdG9wKys7Ci0JCXJjID0gX19zaWdwX3N0b3AodmNwdSwgY3B1X2FkZHIsIDApOworCQlyYyA9IF9fc2lncF9zdG9wKHZjcHUsIGNwdV9hZGRyLCBBQ1RJT05fU1RPUF9PTl9TVE9QKTsKIAkJYnJlYWs7CiAJY2FzZSBTSUdQX1NUT1BfU1RPUkVfU1RBVFVTOgogCQl2Y3B1LT5zdGF0Lmluc3RydWN0aW9uX3NpZ3Bfc3RvcCsrOwotCQlyYyA9IF9fc2lncF9zdG9wKHZjcHUsIGNwdV9hZGRyLCAxKTsKKwkJcmMgPSBfX3NpZ3Bfc3RvcCh2Y3B1LCBjcHVfYWRkciwgQUNUSU9OX1NUT1JFX09OX1NUT1ApOwogCQlicmVhazsKIAljYXNlIFNJR1BfU0VUX0FSQ0g6CiAJCXZjcHUtPnN0YXQuaW5zdHJ1Y3Rpb25fc2lncF9hcmNoKys7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2V0aC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaF9ldGguaAppbmRleCBiYjgzMjU4Li5hY2Y5OTcwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NoX2V0aC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2hfZXRoLmgKQEAgLTYsNiArNiw5IEBACiBzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSB7CiAJaW50IHBoeTsKIAlpbnQgZWRtYWNfZW5kaWFuOworCisJdW5zaWduZWQgbm9fZXRoZXJfbGluazoxOworCXVuc2lnbmVkIGV0aGVyX2xpbmtfYWN0aXZlX2xvdzoxOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcgYi9hcmNoL3NwYXJjL0tjb25maWcKaW5kZXggMjMzY2ZmNS4uMmJkNWMyOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZwpAQCAtMjUsNiArMjUsNyBAQAogCXNlbGVjdCBBUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQgogCXNlbGVjdCBSVENfQ0xBU1MKIAlzZWxlY3QgUlRDX0RSVl9NNDhUNTkKKwlzZWxlY3QgSEFWRV9QRVJGX0NPVU5URVJTCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCkBAIC00Niw2ICs0Nyw3IEBACiAJc2VsZWN0IFJUQ19EUlZfQlE0ODAyCiAJc2VsZWN0IFJUQ19EUlZfU1VONFYKIAlzZWxlY3QgUlRDX0RSVl9TVEFSRklSRQorCXNlbGVjdCBIQVZFX1BFUkZfQ09VTlRFUlMKIAogY29uZmlnIEFSQ0hfREVGQ09ORklHCiAJc3RyaW5nCkBAIC00MzksNiArNDQxLDE3IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBTUEFSQ19MRU9OCisJYm9vbCAiU3BhcmMgTGVvbiBwcm9jZXNzb3IgZmFtaWx5IgorCWRlcGVuZHMgb24gU1BBUkMzMgorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBzYXkgWSBoZXJlIGlmIHlvdSBhcmUgcnVubmluZyBvbiBhIFNQQVJDLUxFT04gcHJvY2Vzc29yLgorCSAgVGhlIExFT04gcHJvY2Vzc29yIGlzIGEgc3ludGhlc2l6YWJsZSBWSERMIG1vZGVsIG9mIHRoZQorCSAgU1BBUkMtdjggc3RhbmRhcmQuIExFT04gaXMgIHBhcnQgb2YgdGhlIEdSTElCIGNvbGxlY3Rpb24gb2YKKwkgIElQIGNvcmVzIHRoYXQgYXJlIGRpc3RyaWJ1dGVkIHVuZGVyIEdQTC4gR1JMSUIgY2FuIGJlIGRvd25sb2FkZWQKKwkgIGZyb20gd3d3LmdhaXNsZXIuY29tLiBZb3UgY2FuIGRvd25sb2FkIGEgc3BhcmMtbGludXggY3Jvc3MtY29tcGlsYXRpb24KKwkgIHRvb2xjaGFpbiBhdCB3d3cuZ2Fpc2xlci5jb20uCisKIGVuZG1lbnUKIAogbWVudSAiQnVzIG9wdGlvbnMgKFBDSSBldGMuKSIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvTWFrZWZpbGUgYi9hcmNoL3NwYXJjL01ha2VmaWxlCmluZGV4IDIwMDNkZWQuLjQ2NzIyMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9NYWtlZmlsZQpAQCAtMzgsMTAgKzM4LDYgQEAKICMgIEFjdHVhbCBsaW5raW5nIGlzIGRvbmUgd2l0aCAibWFrZSBpbWFnZSIuCiBMREZMQUdTX3ZtbGludXggPSAtcgogCi0jIERlZmF1bHQgdGFyZ2V0Ci1hbGw6IHpJbWFnZQotCi0KIGVsc2UKICMjIyMjCiAjIHNwYXJjNjQKQEAgLTkxLDYgKzg3LDkgQEAKIAogYm9vdCA6PSBhcmNoL3NwYXJjL2Jvb3QKIAorIyBEZWZhdWx0IHRhcmdldAorYWxsOiB6SW1hZ2UKKwogaW1hZ2UgekltYWdlIHRmdHBib290LmltZyB2bWxpbnV4LmFvdXQ6IHZtbGludXgKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoYm9vdCkvJEAKIApAQCAtMTA5LDggKzEwOCw5IEBACiBlbmRlZgogZWxzZQogZGVmaW5lIGFyY2hoZWxwCi0gIGVjaG8gICcqIHZtbGludXggICAgICAgLSBTdGFuZGFyZCBzcGFyYzY0IGtlcm5lbCcKLSAgZWNobyAgJyAgdm1saW51eC5hb3V0ICAtIGEub3V0IGtlcm5lbCBmb3Igc3BhcmM2NCcKKyAgZWNobyAgJyogdm1saW51eCAgICAgIC0gc3RhbmRhcmQgc3BhcmM2NCBrZXJuZWwnCisgIGVjaG8gICcqIHpJbWFnZSAgICAgICAtIHN0cmlwcGVkIGFuZCBjb21wcmVzc2VkIHNwYXJjNjQga2VybmVsICgkKGJvb3QpL3pJbWFnZSknCisgIGVjaG8gICcgIHZtbGludXguYW91dCAtIGEub3V0IGtlcm5lbCBmb3Igc3BhcmM2NCcKICAgZWNobyAgJyAgdGZ0cGJvb3QuaW1nIC0gaW1hZ2UgcHJlcGFyZWQgZm9yIHRmdHAnCiBlbmRlZgogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc3BhcmMvYm9vdC9NYWtlZmlsZQppbmRleCAxZmYwZmQ5Li45N2UzZmViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9ib290L01ha2VmaWxlCkBAIC03OSw2ICs3OSw5IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsc3RyaXApCiAJQGVjaG8gJyAga2VybmVsOiAkQCBpcyByZWFkeScKIAorJChvYmopL3pJbWFnZTogJChvYmopL2ltYWdlCisJJChjYWxsIGlmX2NoYW5nZWQsZ3ppcCkKKwogJChvYmopL3RmdHBib290LmltZzogJChvYmopL2ltYWdlICQob2JqKS9waWdneWJhY2tfNjQgU3lzdGVtLm1hcCAkKFJPT1RfSU1HKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGVsZnRvYW91dCkKIAkkKGNhbGwgaWZfY2hhbmdlZCxwaWdneSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXNpLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2FzaS5oCmluZGV4IDc0NzAzYzUuLmIyZTNkYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vYXNpLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9hc2kuaApAQCAtNDAsNyArNDAsMTEgQEAKICNkZWZpbmUgQVNJX01fVU5BMDEgICAgICAgICAweDAxICAgLyogU2FtZSBoZXJlLi4uICovCiAjZGVmaW5lIEFTSV9NX01YQ0MgICAgICAgICAgMHgwMiAgIC8qIEFjY2VzcyB0byBUSSBWSUtJTkcgTVhDQyByZWdpc3RlcnMgKi8KICNkZWZpbmUgQVNJX01fRkxVU0hfUFJPQkUgICAweDAzICAgLyogUmVmZXJlbmNlIE1NVSBGbHVzaC9Qcm9iZTsgcncsIHNzICovCisjaWZuZGVmIENPTkZJR19TUEFSQ19MRU9OCiAjZGVmaW5lIEFTSV9NX01NVVJFR1MgICAgICAgMHgwNCAgIC8qIE1NVSBSZWdpc3RlcnM7IHJ3LCBzcyAqLworI2Vsc2UKKyNkZWZpbmUgQVNJX01fTU1VUkVHUyAgICAgICAweDE5CisjZW5kaWYgLyogQ09ORklHX1NQQVJDX0xFT04gKi8KICNkZWZpbmUgQVNJX01fVExCRElBRyAgICAgICAweDA1ICAgLyogTU1VIFRMQiBvbmx5IERpYWdub3N0aWNzICovCiAjZGVmaW5lIEFTSV9NX0RJQUdTICAgICAgICAgMHgwNiAgIC8qIFJlZmVyZW5jZSBNTVUgRGlhZ25vc3RpY3MgKi8KICNkZWZpbmUgQVNJX01fSU9ESUFHICAgICAgICAweDA3ICAgLyogTU1VIEkvTyBUTEIgb25seSBEaWFnbm9zdGljcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kZXZpY2UuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggMzcwMmUwOC4uZjNiODViNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RldmljZS5oCkBAIC0zMiw0ICszMiw3IEBACiAJcmV0dXJuIGFkLT5wcm9tX25vZGU7CiB9CiAKK3N0cnVjdCBwZGV2X2FyY2hkYXRhIHsKK307CisKICNlbmRpZiAvKiBfQVNNX1NQQVJDX0RFVklDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTQyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaApAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBLb25yYWQgRWlzZWxlIChlaXNlbGVrZEB3ZWIuZGUsa29ucmFkQGdhaXNsZXIuY29tKSBHYWlzbGVyIFJlc2VhcmNoCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgU3RlZmFuIEhvbHN0IChtYWlsQHMtaG9sc3QuZGUpIFVuaS1TdHV0dGdhcnQKKyAqIENvcHlyaWdodCAoQykgMjAwOSBEYW5pZWwgSGVsbHN0cm9tIChkYW5pZWxAZ2Fpc2xlci5jb20pIEFlcm9mbGV4IEdhaXNsZXIgQUIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLb25yYWQgRWlzZWxlIChrb25yYWRAZ2Fpc2xlci5jb20pIEFlcm9mbGV4IEdhaXNsZXIgQUIKKyAqLworCisjaWZuZGVmIExFT05fSF9JTkNMVURFCisjZGVmaW5lIExFT05fSF9JTkNMVURFCisKKyNpZmRlZiBDT05GSUdfU1BBUkNfTEVPTgorCisjZGVmaW5lIEFTSV9MRU9OX05PQ0FDSEUJMHgwMQorCisjZGVmaW5lIEFTSV9MRU9OX0RDQUNIRV9NSVNTCTB4MQorCisjZGVmaW5lIEFTSV9MRU9OX0NBQ0hFUkVHUwkweDAyCisjZGVmaW5lIEFTSV9MRU9OX0lGTFVTSAkJMHgxMAorI2RlZmluZSBBU0lfTEVPTl9ERkxVU0gJCTB4MTEKKworI2RlZmluZSBBU0lfTEVPTl9NTVVGTFVTSAkweDE4CisjZGVmaW5lIEFTSV9MRU9OX01NVVJFR1MJMHgxOQorI2RlZmluZSBBU0lfTEVPTl9CWVBBU1MJCTB4MWMKKyNkZWZpbmUgQVNJX0xFT05fRkxVU0hfUEFHRQkweDEwCisKKy8qIG1tdSByZWdpc3RlciBhY2Nlc3MsIEFTSV9MRU9OX01NVVJFR1MgKi8KKyNkZWZpbmUgTEVPTl9DTlJfQ1RSTAkJMHgwMDAKKyNkZWZpbmUgTEVPTl9DTlJfQ1RYUAkJMHgxMDAKKyNkZWZpbmUgTEVPTl9DTlJfQ1RYCQkweDIwMAorI2RlZmluZSBMRU9OX0NOUl9GCQkweDMwMAorI2RlZmluZSBMRU9OX0NOUl9GQUREUgkJMHg0MDAKKworI2RlZmluZSBMRU9OX0NOUl9DVFhfTkNUWAkyNTYJLypudW1iZXIgb2YgTU1VIGN0eCAqLworCisjZGVmaW5lIExFT05fQ05SX0NUUkxfVExCRElTCTB4ODAwMDAwMDAKKworI2RlZmluZSBMRU9OX01NVVRMQl9FTlRfTUFYCTY0CisKKy8qCisgKiBkaWFnbm9zdGljIGFjY2VzcyBmcm9tIG1tdXRsYi52aGQ6CisgKiAwOiBwdGUgYWRkcmVzcworICogNDogcHRlCisgKiA4OiBhZGRpdGlvbmFsIGZsYWdzCisgKi8KKyNkZWZpbmUgTEVPTl9ESUFHRl9MVkwJCTB4MworI2RlZmluZSBMRU9OX0RJQUdGX1dSCQkweDgKKyNkZWZpbmUgTEVPTl9ESUFHRl9XUl9TSElGVAkzCisjZGVmaW5lIExFT05fRElBR0ZfSElUCQkweDEwCisjZGVmaW5lIExFT05fRElBR0ZfSElUX1NISUZUCTQKKyNkZWZpbmUgTEVPTl9ESUFHRl9DVFgJCTB4MWZlMAorI2RlZmluZSBMRU9OX0RJQUdGX0NUWF9TSElGVAk1CisjZGVmaW5lIExFT05fRElBR0ZfVkFMSUQJMHgyMDAwCisjZGVmaW5lIExFT05fRElBR0ZfVkFMSURfU0hJRlQJMTMKKworLyoKKyAqICBJbnRlcnJ1cHQgU291cmNlcworICoKKyAqICBUaGUgaW50ZXJydXB0IHNvdXJjZSBudW1iZXJzIGRpcmVjdGx5IG1hcCB0byB0aGUgdHJhcCB0eXBlIGFuZCB0bworICogIHRoZSBiaXRzIHVzZWQgaW4gdGhlIEludGVycnVwdCBDbGVhciwgSW50ZXJydXB0IEZvcmNlLCBJbnRlcnJ1cHQgTWFzaywKKyAqICBhbmQgdGhlIEludGVycnVwdCBQZW5kaW5nIFJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9DT1JSRUNUQUJMRV9NRU1PUllfRVJST1IJMQorI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9VQVJUXzFfUlhfVFgJCTIKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfVUFSVF8wX1JYX1RYCQkzCisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VYVEVSTkFMXzAJCTQKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRVhURVJOQUxfMQkJNQorI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9FWFRFUk5BTF8yCQk2CisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VYVEVSTkFMXzMJCTcKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfVElNRVIxCQkJOAorI2RlZmluZSBMRU9OX0lOVEVSUlVQVF9USU1FUjIJCQk5CisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VNUFRZMQkJCTEwCisjZGVmaW5lIExFT05fSU5URVJSVVBUX0VNUFRZMgkJCTExCisjZGVmaW5lIExFT05fSU5URVJSVVBUX09QRU5fRVRICQkJMTIKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRU1QVFk0CQkJMTMKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRU1QVFk1CQkJMTQKKyNkZWZpbmUgTEVPTl9JTlRFUlJVUFRfRU1QVFk2CQkJMTUKKworLyogaXJxIG1hc2tzICovCisjZGVmaW5lIExFT05fSEFSRF9JTlQoeCkJKDEgPDwgKHgpKQkvKiBpcnEgMC0xNSAqLworI2RlZmluZSBMRU9OX0lSUU1BU0tfUgkJMHgwMDAwZmZmZQkvKiBiaXQgMTUtIDEgb2YgbHJlZ3MuaXJxbWFzayAqLworI2RlZmluZSBMRU9OX0lSUVBSSU9fUgkJMHhmZmZlMDAwMAkvKiBiaXQgMzEtMTcgb2YgbHJlZ3MuaXJxbWFzayAqLworCisvKiBsZW9uIHVhcnQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTEVPTl9PRkZfVURBVEEJMHgwCisjZGVmaW5lIExFT05fT0ZGX1VTVEFUCTB4NAorI2RlZmluZSBMRU9OX09GRl9VQ1RSTAkweDgKKyNkZWZpbmUgTEVPTl9PRkZfVVNDQUwJMHhjCisKKyNkZWZpbmUgTEVPTl9VQ1RSTF9SRQkweDAxCisjZGVmaW5lIExFT05fVUNUUkxfVEUJMHgwMgorI2RlZmluZSBMRU9OX1VDVFJMX1JJCTB4MDQKKyNkZWZpbmUgTEVPTl9VQ1RSTF9USQkweDA4CisjZGVmaW5lIExFT05fVUNUUkxfUFMJMHgxMAorI2RlZmluZSBMRU9OX1VDVFJMX1BFCTB4MjAKKyNkZWZpbmUgTEVPTl9VQ1RSTF9GTAkweDQwCisjZGVmaW5lIExFT05fVUNUUkxfTEIJMHg4MAorCisjZGVmaW5lIExFT05fVVNUQVRfRFIJMHgwMQorI2RlZmluZSBMRU9OX1VTVEFUX1RTCTB4MDIKKyNkZWZpbmUgTEVPTl9VU1RBVF9USAkweDA0CisjZGVmaW5lIExFT05fVVNUQVRfQlIJMHgwOAorI2RlZmluZSBMRU9OX1VTVEFUX09WCTB4MTAKKyNkZWZpbmUgTEVPTl9VU1RBVF9QRQkweDIwCisjZGVmaW5lIExFT05fVVNUQVRfRkUJMHg0MAorCisjZGVmaW5lIExFT05fTUNGRzJfU1JBTURJUwkJMHgwMDAwMjAwMAorI2RlZmluZSBMRU9OX01DRkcyX1NEUkFNRU4JCTB4MDAwMDQwMDAKKyNkZWZpbmUgTEVPTl9NQ0ZHMl9TUkFNQkFOS1NaCQkweDAwMDAxZTAwCS8qIFsxMi05XSAqLworI2RlZmluZSBMRU9OX01DRkcyX1NSQU1CQU5LU1pfU0hJRlQJOQorI2RlZmluZSBMRU9OX01DRkcyX1NEUkFNQkFOS1NaCQkweDAzODAwMDAwCS8qIFsyNS0yM10gKi8KKyNkZWZpbmUgTEVPTl9NQ0ZHMl9TRFJBTUJBTktTWl9TSElGVAkyMworCisjZGVmaW5lIExFT05fVENOVDBfTUFTSwkweDdmZmZmZgorCisjZGVmaW5lIExFT05fVVNUQVRfRVJST1IgKExFT05fVVNUQVRfT1YgfCBMRU9OX1VTVEFUX1BFIHwgTEVPTl9VU1RBVF9GRSkKKy8qIG5vIGJyZWFrIHlldCAqLworCisjZGVmaW5lIEFTSV9MRU9OM19TWVNDVFJMCQkweDAyCisjZGVmaW5lIEFTSV9MRU9OM19TWVNDVFJMX0lDRkcJCTB4MDgKKyNkZWZpbmUgQVNJX0xFT04zX1NZU0NUUkxfRENGRwkJMHgwYworI2RlZmluZSBBU0lfTEVPTjNfU1lTQ1RSTF9DRkdfU05PT1BJTkcgKDEgPDwgMjcpCisjZGVmaW5lIEFTSV9MRU9OM19TWVNDVFJMX0NGR19TU0laRShjKSAoMSA8PCAoKGMgPj4gMjApICYgMHhmKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworLyogZG8gYSB2aXJ0dWFsIGFkZHJlc3MgcmVhZCB3aXRob3V0IGNhY2hlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbGVvbl9yZWFkbm9idWZmZXJfcmVnKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIihyZXR2YWwpIDogInIiKHBhZGRyKSwgImkiKEFTSV9MRU9OX05PQ0FDSEUpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBkbyBhIHBoeXNpY2FsIGFkZHJlc3MgYnlwYXNzIHdyaXRlLCBpLmUuIGZvciAweDgwMDAwMDAwICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGVvbl9zdG9yZV9yZWcodW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJTFdICUyXG5cdCIgOiA6ICJyIih2YWx1ZSksICJyIihwYWRkciksCisJCQkgICAgICJpIihBU0lfTEVPTl9CWVBBU1MpIDogIm1lbW9yeSIpOworfQorCisvKiBkbyBhIHBoeXNpY2FsIGFkZHJlc3MgYnlwYXNzIGxvYWQsIGkuZS4gZm9yIDB4ODAwMDAwMDAgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsZW9uX2xvYWRfcmVnKHVuc2lnbmVkIGxvbmcgcGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyByZXR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIihyZXR2YWwpIDogInIiKHBhZGRyKSwgImkiKEFTSV9MRU9OX0JZUEFTUykpOworCXJldHVybiByZXR2YWw7Cit9CisKK2V4dGVybiBpbmxpbmUgdm9pZCBsZW9uX3NybW11X2Rpc2FibGV0bGIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUlZzBdICUyLCAlMFxuXHQiIDogIj1yIihyZXR2YWwpIDogInIiKDApLAorCQkJICAgICAiaSIoQVNJX0xFT05fTU1VUkVHUykpOworCXJldHZhbCB8PSBMRU9OX0NOUl9DVFJMX1RMQkRJUzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJSVnMF0gJTJcblx0IiA6IDogInIiKHJldHZhbCksICJyIigwKSwKKwkJCSAgICAgImkiKEFTSV9MRU9OX01NVVJFR1MpIDogIm1lbW9yeSIpOworfQorCitleHRlcm4gaW5saW5lIHZvaWQgbGVvbl9zcm1tdV9lbmFibGV0bGIodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUlZzBdICUyLCAlMFxuXHQiIDogIj1yIihyZXR2YWwpIDogInIiKDApLAorCQkJICAgICAiaSIoQVNJX0xFT05fTU1VUkVHUykpOworCXJldHZhbCA9IHJldHZhbCAmIH5MRU9OX0NOUl9DVFJMX1RMQkRJUzsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUwLCBbJSVnMF0gJTJcblx0IiA6IDogInIiKHJldHZhbCksICJyIigwKSwKKwkJCSAgICAgImkiKEFTSV9MRU9OX01NVVJFR1MpIDogIm1lbW9yeSIpOworfQorCisvKiBtYWNybyBhY2Nlc3MgZm9yIGxlb25fbG9hZF9yZWcoKSBhbmQgbGVvbl9zdG9yZV9yZWcoKSAqLworI2RlZmluZSBMRU9OM19CWVBBU1NfTE9BRF9QQSh4KQkgICAgKGxlb25fbG9hZF9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpKSkKKyNkZWZpbmUgTEVPTjNfQllQQVNTX1NUT1JFX1BBKHgsIHYpIChsZW9uX3N0b3JlX3JlZygodW5zaWduZWQgbG9uZykoeCksICh1bnNpZ25lZCBsb25nKSh2KSkpCisjZGVmaW5lIExFT04zX0JZUEFTU19BTkRJTl9QQSh4LCB2KSBMRU9OM19CWVBBU1NfU1RPUkVfUEEoeCwgTEVPTjNfQllQQVNTX0xPQURfUEEoeCkgJiB2KQorI2RlZmluZSBMRU9OM19CWVBBU1NfT1JJTl9QQSh4LCB2KSAgTEVPTjNfQllQQVNTX1NUT1JFX1BBKHgsIExFT04zX0JZUEFTU19MT0FEX1BBKHgpIHwgdikKKyNkZWZpbmUgTEVPTl9CWVBBU1NfTE9BRF9QQSh4KSAgICAgIGxlb25fbG9hZF9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBMRU9OX0JZUEFTU19TVE9SRV9QQSh4LCB2KSAgbGVvbl9zdG9yZV9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpLCAodW5zaWduZWQgbG9uZykodikpCisjZGVmaW5lIExFT05fUkVHTE9BRF9QQSh4KSAgICAgICAgICBsZW9uX2xvYWRfcmVnKCh1bnNpZ25lZCBsb25nKSh4KStMRU9OX1BSRUdTKQorI2RlZmluZSBMRU9OX1JFR1NUT1JFX1BBKHgsIHYpICAgICAgbGVvbl9zdG9yZV9yZWcoKHVuc2lnbmVkIGxvbmcpKHgpK0xFT05fUFJFR1MsICh1bnNpZ25lZCBsb25nKSh2KSkKKyNkZWZpbmUgTEVPTl9SRUdTVE9SRV9PUl9QQSh4LCB2KSAgIExFT05fUkVHU1RPUkVfUEEoeCwgTEVPTl9SRUdMT0FEX1BBKHgpIHwgKHVuc2lnbmVkIGxvbmcpKHYpKQorI2RlZmluZSBMRU9OX1JFR1NUT1JFX0FORF9QQSh4LCB2KSAgTEVPTl9SRUdTVE9SRV9QQSh4LCBMRU9OX1JFR0xPQURfUEEoeCkgJiAodW5zaWduZWQgbG9uZykodikpCisKKy8qIG1hY3JvIGFjY2VzcyBmb3IgbGVvbl9yZWFkbm9idWZmZXJfcmVnKCkgKi8KKyNkZWZpbmUgTEVPTl9CWVBBU1NDQUNIRV9MT0FEX1ZBKHgpIGxlb25fcmVhZG5vYnVmZmVyX3JlZygodW5zaWduZWQgbG9uZykoeCkpCisKK2V4dGVybiB2b2lkIHNwYXJjX2xlb25fZWlycV9yZWdpc3RlcihpbnQgZWlycSk7CitleHRlcm4gdm9pZCBsZW9uX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX3N3aXRjaF9tbSh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25faW5pdF9JUlEodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxhc3RfdmFsaWRfcGZuOworCitleHRlcm4gaW5saW5lIHVuc2lnbmVkIGxvbmcgc3BhcmNfbGVvbjNfZ2V0X2RjYWNoZWNmZyh2b2lkKQoreworCXVuc2lnbmVkIGludCByZXR2YWw7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oImxkYSBbJTFdICUyLCAlMFxuXHQiIDoKKwkJCSAgICAgIj1yIihyZXR2YWwpIDoKKwkJCSAgICAgInIiKEFTSV9MRU9OM19TWVNDVFJMX0RDRkcpLAorCQkJICAgICAiaSIoQVNJX0xFT04zX1NZU0NUUkwpKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBlbmFibGUgc25vb3BpbmcgKi8KK2V4dGVybiBpbmxpbmUgdm9pZCBzcGFyY19sZW9uM19lbmFibGVfc25vb3Bpbmcodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxkYSBbJSVnMF0gMiwgJSVsMVxuXHQiCisJCQkgICJzZXQgMHg4MDAwMDAsICUlbDJcblx0IgorCQkJICAib3IgICUlbDIsICUlbDEsICUlbDJcblx0IgorCQkJICAic3RhICUlbDIsIFslJWcwXSAyXG5cdCIgOiA6IDogImwxIiwgImwyIik7Cit9OworCitleHRlcm4gaW5saW5lIHZvaWQgc3BhcmNfbGVvbjNfZGlzYWJsZV9jYWNoZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fICgibGRhIFslJWcwXSAyLCAlJWwxXG5cdCIKKwkJCSAgInNldCAweDAwMDAwZiwgJSVsMlxuXHQiCisJCQkgICJhbmRuICAlJWwyLCAlJWwxLCAlJWwyXG5cdCIKKwkJCSAgInN0YSAlJWwyLCBbJSVnMF0gMlxuXHQiIDogOiA6ICJsMSIsICJsMiIpOworfTsKKworI2VuZGlmIC8qIV9fQVNTRU1CTFlfXyovCisKKyNpZmRlZiBDT05GSUdfU01QCisjIGRlZmluZSBMRU9OM19JUlFfUkVTQ0hFRFVMRQkJMTMKKyMgZGVmaW5lIExFT04zX0lSUV9USUNLRVIJCShsZW9uX3BlcmNwdV90aW1lcl9kZXZbMF0uaXJxKQorIyBkZWZpbmUgTEVPTjNfSVJRX0NST1NTX0NBTEwJCTE1CisjZW5kaWYKKworI2lmIGRlZmluZWQoUEFHRV9TSVpFX0xFT05fOEspCisjZGVmaW5lIExFT05fUEFHRV9TSVpFX0xFT04gMQorI2VsaWYgZGVmaW5lZChQQUdFX1NJWkVfTEVPTl8xNkspCisjZGVmaW5lIExFT05fUEFHRV9TSVpFX0xFT04gMikKKyNlbHNlCisjZGVmaW5lIExFT05fUEFHRV9TSVpFX0xFT04gMAorI2VuZGlmCisKKyNpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDAKKy8qIFsgOCwgNiwgNiBdICsgMTIgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjQKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHhmZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAxOAorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMikKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxMgorI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDEKKy8qIFsgNywgNiwgNiBdICsgMTMgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjUKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHg3ZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAxOQorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMSkKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxMworI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDIKKy8qIFsgNiwgNiwgNiBdICsgMTQgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjYKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAyMAorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMCkKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHgzZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxNAorI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxpZiBMRU9OX1BBR0VfU0laRV9MRU9OID09IDMKKy8qIFsgNCwgNywgNiBdICsgMTUgKi8KKyNkZWZpbmUgTEVPTl9QR0RfU0ggICAgMjgKKyNkZWZpbmUgTEVPTl9QR0RfTSAgICAgMHgwZgorI2RlZmluZSBMRU9OX1BNRF9TSCAgICAyMQorI2RlZmluZSBMRU9OX1BNRF9TSF9WICAoTEVPTl9QR0RfU0gtMCkKKyNkZWZpbmUgTEVPTl9QTURfTSAgICAgMHg3ZgorI2RlZmluZSBMRU9OX1BURV9TSCAgICAxNQorI2RlZmluZSBMRU9OX1BURV9NICAgICAweDNmCisjZWxzZQorI2Vycm9yIGNhbm5vdCBkZXRlcm1pbmUgTEVPTl9QQUdFX1NJWkVfTEVPTgorI2VuZGlmCisKKyNkZWZpbmUgUEFHRV9NSU5fU0hJRlQgICAoMTIpCisjZGVmaW5lIFBBR0VfTUlOX1NJWkUgICAgKDFVTCA8PCBQQUdFX01JTl9TSElGVCkKKworI2RlZmluZSBMRU9OM19YQ0NSX1NFVFNfTUFTSyAgMHgwNzAwMDAwMFVMCisjZGVmaW5lIExFT04zX1hDQ1JfU1NJWkVfTUFTSyAweDAwZjAwMDAwVUwKKworI2RlZmluZSBMRU9OMl9DQ1JfRFNFVFNfTUFTSyAweDAzMDAwMDAwVUwKKyNkZWZpbmUgTEVPTjJfQ0ZHX1NTSVpFX01BU0sgMHgwMDAwNzAwMFVMCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBzcm1tdV9zd3Byb2JlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBhZGRyKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfaWNhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfZGNhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfY2FjaGVfYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgbGVvbl9mbHVzaF90bGJfYWxsKHZvaWQpOworZXh0ZXJuIGludCBsZW9uX2ZsdXNoX2R1cmluZ19zd2l0Y2g7CitleHRlcm4gaW50IGxlb25fZmx1c2hfbmVlZGVkKHZvaWQpOworCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX2ljYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX2RjYWNoZV9hbGwodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX3BjYWNoZV9hbGwoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcGFnZSk7CitleHRlcm4gdm9pZCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfdGxiX2FsbCh2b2lkKTsKK2V4dGVybiBpbnQgbGVvbl9mbHVzaF9kdXJpbmdfc3dpdGNoOworZXh0ZXJuIGludCBsZW9uX2ZsdXNoX25lZWRlZCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fZmx1c2hfcGNhY2hlX2FsbChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKTsKKworLyogc3RydWN0IHRoYXQgaG9sZCBMRU9OMyBjYWNoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLworc3RydWN0IGxlb24zX2NhY2hlcmVncyB7CisJdW5zaWduZWQgbG9uZyBjY3I7CS8qIDB4MDAgLSBDYWNoZSBDb250cm9sIFJlZ2lzdGVyICAqLworCXVuc2lnbmVkIGxvbmcgaWNjcjsgICAgIC8qIDB4MDggLSBJbnN0cnVjdGlvbiBDYWNoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJdW5zaWduZWQgbG9uZyBkY2NyOwkvKiAweDBjIC0gRGF0YSBDYWNoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCit9OworCisvKiBzdHJ1Y3QgdGhhdCBob2xkIExFT04yIGNhY2hlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKyAqICYgY29uZmlndXJhdGlvbiByZWdpc3RlcgorICovCitzdHJ1Y3QgbGVvbjJfY2FjaGVyZWdzIHsKKwl1bnNpZ25lZCBsb25nIGNjciwgY2ZnOworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCitzdHJ1Y3QgZGV2aWNlX25vZGU7CitleHRlcm4gaW50IHNwYXJjX2xlb25fZWlycV9nZXQoaW50IGVpcnEsIGludCBjcHUpOworZXh0ZXJuIGlycXJldHVybl90IHNwYXJjX2xlb25fZWlycV9pc3IoaW50IGR1bW15LCB2b2lkICpkZXZfaWQpOworZXh0ZXJuIHZvaWQgc3BhcmNfbGVvbl9laXJxX3JlZ2lzdGVyKGludCBlaXJxKTsKK2V4dGVybiB2b2lkIGxlb25fY2xlYXJfY2xvY2tfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbGVvbl9sb2FkX3Byb2ZpbGVfaXJxKGludCBjcHUsIHVuc2lnbmVkIGludCBsaW1pdCk7CitleHRlcm4gdm9pZCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbik7CitleHRlcm4gdm9pZCBsZW9uX2NsZWFyX2Nsb2NrX2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fbG9hZF9wcm9maWxlX2lycShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbGltaXQpOworZXh0ZXJuIHZvaWQgbGVvbl90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApOworZXh0ZXJuIHZvaWQgbGVvbl9ub2RlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IGRldmljZV9ub2RlICoqKm5leHRwKTsKK2V4dGVybiB2b2lkIGxlb25faW5pdF9JUlEodm9pZCk7CitleHRlcm4gdm9pZCBsZW9uX2luaXQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcm1tdV9zd3Byb2JlKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgKnBhZGRyKTsKK2V4dGVybiB2b2lkIGluaXRfbGVvbih2b2lkKTsKK2V4dGVybiB2b2lkIHBva2VfbGVvbnNwYXJjKHZvaWQpOworZXh0ZXJuIHZvaWQgbGVvbjNfZ2V0Q2FjaGVSZWdzKHN0cnVjdCBsZW9uM19jYWNoZXJlZ3MgKnJlZ3MpOworZXh0ZXJuIGludCBsZW9uX2ZsdXNoX25lZWRlZCh2b2lkKTsKK2V4dGVybiB2b2lkIGxlb25fc3dpdGNoX21tKHZvaWQpOworZXh0ZXJuIGludCBzcm1tdV9zd3Byb2JlX3RyYWNlOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qIG1hY3JvcyB1c2VkIGluIGxlb25fbW0uYyAqLworI2RlZmluZSBQRk4oeCkgICAgICAgICAgICgoeCkgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgX3Bmbl92YWxpZChwZm4pCSAoKHBmbiA8IGxhc3RfdmFsaWRfcGZuKSAmJiAocGZuID49IFBGTihwaHlzX2Jhc2UpKSkKKyNkZWZpbmUgX1NSTU1VX1BURV9QTUFTS19MRU9OIDB4ZmZmZmZmZmYKKworI2Vsc2UgLyogZGVmaW5lZChDT05GSUdfU1BBUkNfTEVPTikgKi8KKworLyogbm9wIGRlZmluaXRpb25zIGZvciAhTEVPTiBjYXNlICovCisjZGVmaW5lIGxlb25faW5pdCgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsZW9uX3N3aXRjaF9tbSgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBsZW9uX2luaXRfSVJRKCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGluaXRfbGVvbigpIGRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NQQVJDX0xFT04pICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uX2FtYmEuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9hbWJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4ZTg4OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9hbWJhLmgKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisqQ29weXJpZ2h0IChDKSAyMDA0IEtvbnJhZCBFaXNlbGUgKGVpc2VsZWtkQHdlYi5kZSxrb25yYWRAZ2Fpc2xlci5jb20pLCBHYWlzbGVyIFJlc2VhcmNoCisqQ29weXJpZ2h0IChDKSAyMDA0IFN0ZWZhbiBIb2xzdCAobWFpbEBzLWhvbHN0LmRlKSwgVW5pLVN0dXR0Z2FydAorKkNvcHlyaWdodCAoQykgMjAwOSBEYW5pZWwgSGVsbHN0cm9tIChkYW5pZWxAZ2Fpc2xlci5jb20pLEtvbnJhZCBFaXNlbGUgKGtvbnJhZEBnYWlzbGVyLmNvbSkgQWVyb2ZsZXggR2Fpc2xlciBBQgorKi8KKworI2lmbmRlZiBMRU9OX0FNQkFfSF9JTkNMVURFCisjZGVmaW5lIExFT05fQU1CQV9IX0lOQ0xVREUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGFtYmFfcHJvbV9yZWdpc3RlcnMgeworCXVuc2lnbmVkIGludCBwaHlzX2FkZHI7CS8qIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgcmVnX3NpemU7CS8qIEhvdyBtYW55IGJ5dGVzIGRvZXMgdGhpcyByZWdpc3RlciB0YWtlIHVwPyAqLworfTsKKworI2VuZGlmCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIHRoZSBiaXRzIGluIHRoZSBMRU9OIFVBUlQgU3RhdHVzIFJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0RSICAgMHgwMDAwMDAwMQkvKiBEYXRhIFJlYWR5ICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX1RTRSAgMHgwMDAwMDAwMgkvKiBUWCBTZW5kIFJlZ2lzdGVyIEVtcHR5ICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX1RIRSAgMHgwMDAwMDAwNAkvKiBUWCBIb2xkIFJlZ2lzdGVyIEVtcHR5ICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0JSICAgMHgwMDAwMDAwOAkvKiBCcmVhayBFcnJvciAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX1NUQVRVU19PRSAgIDB4MDAwMDAwMTAJLyogUlggT3ZlcnJ1biBFcnJvciAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX1NUQVRVU19QRSAgIDB4MDAwMDAwMjAJLyogUlggUGFyaXR5IEVycm9yICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0ZFICAgMHgwMDAwMDA0MAkvKiBSWCBGcmFtaW5nIEVycm9yICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfU1RBVFVTX0VSUiAgMHgwMDAwMDA3OAkvKiBFcnJvciBNYXNrICovCisKKy8qCisgKiAgVGhlIGZvbGxvd2luZyBkZWZpbmVzIHRoZSBiaXRzIGluIHRoZSBMRU9OIFVBUlQgQ3RybCBSZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfUkUgICAgIDB4MDAwMDAwMDEJLyogUmVjZWl2ZXIgZW5hYmxlICovCisjZGVmaW5lIExFT05fUkVHX1VBUlRfQ1RSTF9URSAgICAgMHgwMDAwMDAwMgkvKiBUcmFuc21pdHRlciBlbmFibGUgKi8KKyNkZWZpbmUgTEVPTl9SRUdfVUFSVF9DVFJMX1JJICAgICAweDAwMDAwMDA0CS8qIFJlY2VpdmVyIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgTEVPTl9SRUdfVUFSVF9DVFJMX1RJICAgICAweDAwMDAwMDA4CS8qIFRyYW5zbWl0dGVyIGlycSAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfUFMgICAgIDB4MDAwMDAwMTAJLyogUGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfUEUgICAgIDB4MDAwMDAwMjAJLyogUGFyaXR5IGVuYWJsZSAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfRkwgICAgIDB4MDAwMDAwNDAJLyogRmxvdyBjb250cm9sIGVuYWJsZSAqLworI2RlZmluZSBMRU9OX1JFR19VQVJUX0NUUkxfTEIgICAgIDB4MDAwMDAwODAJLyogTG9vcCBCYWNrIGVuYWJsZSAqLworCisjZGVmaW5lIExFT04zX0dQVElNRVJfRU4gMQorI2RlZmluZSBMRU9OM19HUFRJTUVSX1JMIDIKKyNkZWZpbmUgTEVPTjNfR1BUSU1FUl9MRCA0CisjZGVmaW5lIExFT04zX0dQVElNRVJfSVJRRU4gOAorI2RlZmluZSBMRU9OM19HUFRJTUVSX1NFUElSUSA4CisKKyNkZWZpbmUgTEVPTjIzX1JFR19USU1FUl9DT05UUk9MX0VOICAgIDB4MDAwMDAwMDEgLyogMSA9IGVuYWJsZSBjb3VudGluZyAqLworLyogMCA9IGhvbGQgc2NhbGFyIGFuZCBjb3VudGVyICovCisjZGVmaW5lIExFT04yM19SRUdfVElNRVJfQ09OVFJPTF9STCAgICAweDAwMDAwMDAyIC8qIDEgPSByZWxvYWQgYXQgMCAqLworCQkJCQkJICAvKiAwID0gc3RvcCBhdCAwICovCisjZGVmaW5lIExFT04yM19SRUdfVElNRVJfQ09OVFJPTF9MRCAgICAweDAwMDAwMDA0IC8qIDEgPSBsb2FkIGNvdW50ZXIgKi8KKwkJCQkJCSAgLyogMCA9IG5vIGZ1bmN0aW9uICovCisjZGVmaW5lIExFT04yM19SRUdfVElNRVJfQ09OVFJPTF9JUSAgICAweDAwMDAwMDA4IC8qIDEgPSBpcnEgZW5hYmxlICovCisJCQkJCQkgIC8qIDAgPSBubyBmdW5jdGlvbiAqLworCisvKgorICogIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyB0aGUgYml0cyBpbiB0aGUgTEVPTiBQUy8yIFN0YXR1cyBSZWdpc3RlcnMuCisgKi8KKworI2RlZmluZSBMRU9OX1JFR19QUzJfU1RBVFVTX0RSICAgMHgwMDAwMDAwMQkvKiBEYXRhIFJlYWR5ICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9TVEFUVVNfUEUgICAweDAwMDAwMDAyCS8qIFBhcml0eSBlcnJvciAqLworI2RlZmluZSBMRU9OX1JFR19QUzJfU1RBVFVTX0ZFICAgMHgwMDAwMDAwNAkvKiBGcmFtaW5nIGVycm9yICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9TVEFUVVNfS0kgICAweDAwMDAwMDA4CS8qIEtleWJvYXJkIGluaGliaXQgKi8KKyNkZWZpbmUgTEVPTl9SRUdfUFMyX1NUQVRVU19SRiAgIDB4MDAwMDAwMTAJLyogUlggYnVmZmVyIGZ1bGwgKi8KKyNkZWZpbmUgTEVPTl9SRUdfUFMyX1NUQVRVU19URiAgIDB4MDAwMDAwMjAJLyogVFggYnVmZmVyIGZ1bGwgKi8KKworLyoKKyAqICBUaGUgZm9sbG93aW5nIGRlZmluZXMgdGhlIGJpdHMgaW4gdGhlIExFT04gUFMvMiBDdHJsIFJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1JFIDB4MDAwMDAwMDEJLyogUmVjZWl2ZXIgZW5hYmxlICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1RFIDB4MDAwMDAwMDIJLyogVHJhbnNtaXR0ZXIgZW5hYmxlICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1JJIDB4MDAwMDAwMDQJLyogS2V5Ym9hcmQgcmVjZWl2ZSBpcnEgICovCisjZGVmaW5lIExFT05fUkVHX1BTMl9DVFJMX1RJIDB4MDAwMDAwMDgJLyogS2V5Ym9hcmQgdHJhbnNtaXQgaXJxICovCisKKyNkZWZpbmUgTEVPTjNfSVJRTVBTVEFUVVNfQ1BVTlIgICAgIDI4CisjZGVmaW5lIExFT04zX0lSUU1QU1RBVFVTX0JST0FEQ0FTVCAyNworCisjZGVmaW5lIEdQVElNRVJfQ09ORklHX0lSUU5UKGEpICAgICAgICAgICgoKGEpID4+IDMpICYgMHgxZikKKyNkZWZpbmUgR1BUSU1FUl9DT05GSUdfSVNTRVAoYSkgICAgICAgICAgKChhKSAmICgxIDw8IDgpKQorI2RlZmluZSBHUFRJTUVSX0NPTkZJR19OVElNRVJTKGEpICAgICAgICAoKGEpICYgKDB4NykpCisjZGVmaW5lIExFT04zX0dQVElNRVJfQ1RSTF9QRU5ESU5HICAgICAgIDB4MTAKKyNkZWZpbmUgTEVPTjNfR1BUSU1FUl9DT05GSUdfTlJUSU1FUlMoYykgKChjKS0+Y29uZmlnICYgMHg3KQorI2RlZmluZSBMRU9OM19HUFRJTUVSX0NUUkxfSVNQRU5ESU5HKHIpICAoKChyKSZMRU9OM19HUFRJTUVSX0NUUkxfUEVORElORykgPyAxIDogMCkKKworI2lmZGVmIENPTkZJR19TUEFSQ19MRU9OCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBsZW9uM19pcnFjdHJsX3JlZ3NfbWFwIHsKKwl1MzIgaWxldmVsOworCXUzMiBpcGVuZDsKKwl1MzIgaWZvcmNlOworCXUzMiBpY2xlYXI7CisJdTMyIG1wc3RhdHVzOworCXUzMiBtcGJyb2FkY2FzdDsKKwl1MzIgbm90dXNlZDAyOworCXUzMiBub3R1c2VkMDM7CisJdTMyIG5vdHVzZWQxMDsKKwl1MzIgbm90dXNlZDExOworCXUzMiBub3R1c2VkMTI7CisJdTMyIG5vdHVzZWQxMzsKKwl1MzIgbm90dXNlZDIwOworCXUzMiBub3R1c2VkMjE7CisJdTMyIG5vdHVzZWQyMjsKKwl1MzIgbm90dXNlZDIzOworCXUzMiBtYXNrWzE2XTsKKwl1MzIgZm9yY2VbMTZdOworCS8qIEV4dGVuZGVkIElSUSByZWdpc3RlcnMgKi8KKwl1MzIgaW50aWRbMTZdOwkvKiAweGMwICovCit9OworCitzdHJ1Y3QgbGVvbjNfYXBidWFydF9yZWdzX21hcCB7CisJdTMyIGRhdGE7CisJdTMyIHN0YXR1czsKKwl1MzIgY3RybDsKKwl1MzIgc2NhbGVyOworfTsKKworc3RydWN0IGxlb24zX2dwdGltZXJlbGVtX3JlZ3NfbWFwIHsKKwl1MzIgdmFsOworCXUzMiBybGQ7CisJdTMyIGN0cmw7CisJdTMyIHVudXNlZDsKK307CisKK3N0cnVjdCBsZW9uM19ncHRpbWVyX3JlZ3NfbWFwIHsKKwl1MzIgc2NhbGFyOworCXUzMiBzY2FsYXJfcmVsb2FkOworCXUzMiBjb25maWc7CisJdTMyIHVudXNlZDsKKwlzdHJ1Y3QgbGVvbjNfZ3B0aW1lcmVsZW1fcmVnc19tYXAgZVs4XTsKK307CisKKy8qCisgKiAgVHlwZXMgYW5kIHN0cnVjdHVyZSB1c2VkIGZvciBBTUJBIFBsdWcgJiBQbGF5IGJ1cyBzY2FubmluZworICovCisKKyNkZWZpbmUgQU1CQV9NQVhBUEJfREVWUyA2NAorI2RlZmluZSBBTUJBX01BWEFQQl9ERVZTX1BFUkJVUyAxNgorCitzdHJ1Y3QgYW1iYV9kZXZpY2VfdGFibGUgeworCWludCBkZXZucjsJCSAgIC8qIG51bWJlciBvZiBkZXZpY2VzIG9uIEFIQiBvciBBUEIgYnVzICovCisJdW5zaWduZWQgaW50ICphZGRyWzE2XTsgICAgLyogYWRkcmVzc2VzIHRvIHRoZSBkZXZpY2VzIGNvbmZpZ3VyYXRpb24gdGFibGVzICovCisJdW5zaWduZWQgaW50IGFsbG9jYml0c1sxXTsgLyogMD11bmFsbG9jYXRlZCwgMT1hbGxvY2F0ZWQgZHJpdmVyICovCit9OworCitzdHJ1Y3QgYW1iYV9hcGJzbHZfZGV2aWNlX3RhYmxlIHsKKwlpbnQgZGV2bnI7CQkgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2YgZGV2aWNlcyBvbiBBSEIgb3IgQVBCIGJ1cyAqLworCXVuc2lnbmVkIGludCAqYWRkcltBTUJBX01BWEFQQl9ERVZTXTsgICAgIC8qIGFkZHJlc3NlcyB0byB0aGUgZGV2aWNlcyBjb25maWd1cmF0aW9uIHRhYmxlcyAqLworCXVuc2lnbmVkIGludCBhcGJtc3RbQU1CQV9NQVhBUEJfREVWU107ICAgIC8qIGFwYiBtYXN0ZXIgaWYgYSBlbnRyeSBpcyBhIGFwYiBzbGF2ZSAqLworCXVuc2lnbmVkIGludCBhcGJtc3RpZHhbQU1CQV9NQVhBUEJfREVWU107IC8qIGFwYiBtYXN0ZXIgaWR4IGlmIGEgZW50cnkgaXMgYSBhcGIgc2xhdmUgKi8KKwl1bnNpZ25lZCBpbnQgYWxsb2NiaXRzWzRdOyAgICAgICAgICAgICAgICAvKiAwPXVuYWxsb2NhdGVkLCAxPWFsbG9jYXRlZCBkcml2ZXIgKi8KK307CisKK3N0cnVjdCBhbWJhX2NvbmZhcmVhX3R5cGUgeworCXN0cnVjdCBhbWJhX2NvbmZhcmVhX3R5cGUgKm5leHQ7LyogbmV4dCBidXMgaW4gY2hhaW4gKi8KKwlzdHJ1Y3QgYW1iYV9kZXZpY2VfdGFibGUgYWhibXN0OworCXN0cnVjdCBhbWJhX2RldmljZV90YWJsZSBhaGJzbHY7CisJc3RydWN0IGFtYmFfYXBic2x2X2RldmljZV90YWJsZSBhcGJzbHY7CisJdW5zaWduZWQgaW50IGFwYm1zdDsKK307CisKKy8qIGNvbGxlY3QgYXBiIHNsYXZlcyAqLworc3RydWN0IGFtYmFfYXBiX2RldmljZSB7CisJdW5zaWduZWQgaW50IHN0YXJ0LCBpcnEsIGJ1c19pZDsKKwlzdHJ1Y3QgYW1iYV9jb25mYXJlYV90eXBlICpidXM7Cit9OworCisvKiBjb2xsZWN0IGFoYiBzbGF2ZXMgKi8KK3N0cnVjdCBhbWJhX2FoYl9kZXZpY2UgeworCXVuc2lnbmVkIGludCBzdGFydFs0XSwgaXJxLCBidXNfaWQ7CisJc3RydWN0IGFtYmFfY29uZmFyZWFfdHlwZSAqYnVzOworfTsKKworc3RydWN0IGRldmljZV9ub2RlOwordm9pZCBfYW1iYV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKipuZXh0cCk7CisKK2V4dGVybiBzdHJ1Y3QgbGVvbjNfaXJxY3RybF9yZWdzX21hcCAqbGVvbjNfaXJxY3RybF9yZWdzOworZXh0ZXJuIHN0cnVjdCBsZW9uM19ncHRpbWVyX3JlZ3NfbWFwICpsZW9uM19ncHRpbWVyX3JlZ3M7CitleHRlcm4gc3RydWN0IGFtYmFfYXBiX2RldmljZSBsZW9uX3BlcmNwdV90aW1lcl9kZXZbMTZdOworZXh0ZXJuIGludCBsZW9uZGVidWdfaXJxX2Rpc2FibGU7CitleHRlcm4gaW50IGxlb25fZGVidWdfaXJxb3V0OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbGVvbjNfZ3B0aW1lcl9pcnE7CitleHRlcm4gdW5zaWduZWQgaW50IHNwYXJjX2xlb25fZWlycTsKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZGVmaW5lIExFT04zX0lPX0FSRUEgMHhmZmYwMDAwMAorI2RlZmluZSBMRU9OM19DT05GX0FSRUEgMHhmZjAwMAorI2RlZmluZSBMRU9OM19BSEJfU0xBVkVfQ09ORl9BUkVBICgxIDw8IDExKQorCisjZGVmaW5lIExFT04zX0FIQl9DT05GX1dPUkRTIDgKKyNkZWZpbmUgTEVPTjNfQVBCX0NPTkZfV09SRFMgMgorI2RlZmluZSBMRU9OM19BSEJfTUFTVEVSUyAxNgorI2RlZmluZSBMRU9OM19BSEJfU0xBVkVTIDE2CisjZGVmaW5lIExFT04zX0FQQl9TTEFWRVMgMTYKKyNkZWZpbmUgTEVPTjNfQVBCVUFSVFMgOAorCisvKiBWZW5kb3IgY29kZXMgKi8KKyNkZWZpbmUgVkVORE9SX0dBSVNMRVIgICAxCisjZGVmaW5lIFZFTkRPUl9QRU5ERVIgICAgMgorI2RlZmluZSBWRU5ET1JfRVNBICAgICAgIDQKKyNkZWZpbmUgVkVORE9SX09QRU5DT1JFUyA4CisKKy8qIEdhaXNsZXIgUmVzZWFyY2ggZGV2aWNlIGlkJ3MgKi8KKyNkZWZpbmUgR0FJU0xFUl9MRU9OMyAgICAweDAwMworI2RlZmluZSBHQUlTTEVSX0xFT04zRFNVIDB4MDA0CisjZGVmaW5lIEdBSVNMRVJfRVRIQUhCICAgMHgwMDUKKyNkZWZpbmUgR0FJU0xFUl9BUEJNU1QgICAweDAwNgorI2RlZmluZSBHQUlTTEVSX0FIQlVBUlQgIDB4MDA3CisjZGVmaW5lIEdBSVNMRVJfU1JDVFJMICAgMHgwMDgKKyNkZWZpbmUgR0FJU0xFUl9TRENUUkwgICAweDAwOQorI2RlZmluZSBHQUlTTEVSX0FQQlVBUlQgIDB4MDBDCisjZGVmaW5lIEdBSVNMRVJfSVJRTVAgICAgMHgwMEQKKyNkZWZpbmUgR0FJU0xFUl9BSEJSQU0gICAweDAwRQorI2RlZmluZSBHQUlTTEVSX0dQVElNRVIgIDB4MDExCisjZGVmaW5lIEdBSVNMRVJfUENJVFJHICAgMHgwMTIKKyNkZWZpbmUgR0FJU0xFUl9QQ0lTQlJHICAweDAxMworI2RlZmluZSBHQUlTTEVSX1BDSUZCUkcgIDB4MDE0CisjZGVmaW5lIEdBSVNMRVJfUENJVFJBQ0UgMHgwMTUKKyNkZWZpbmUgR0FJU0xFUl9QQ0lETUEgICAweDAxNgorI2RlZmluZSBHQUlTTEVSX0FIQlRSQUNFIDB4MDE3CisjZGVmaW5lIEdBSVNMRVJfRVRIRFNVICAgMHgwMTgKKyNkZWZpbmUgR0FJU0xFUl9QSU9QT1JUICAweDAxQQorI2RlZmluZSBHQUlTTEVSX0dSR1BJTyAgIDB4MDFBCisjZGVmaW5lIEdBSVNMRVJfQUhCSlRBRyAgMHgwMWMKKyNkZWZpbmUgR0FJU0xFUl9FVEhNQUMgICAweDAxRAorI2RlZmluZSBHQUlTTEVSX0FIQjJBSEIgIDB4MDIwCisjZGVmaW5lIEdBSVNMRVJfVVNCREMgICAgMHgwMjEKKyNkZWZpbmUgR0FJU0xFUl9BVEFDVFJMICAweDAyNAorI2RlZmluZSBHQUlTTEVSX0REUlNQQSAgIDB4MDI1CisjZGVmaW5lIEdBSVNMRVJfVVNCRUhDICAgMHgwMjYKKyNkZWZpbmUgR0FJU0xFUl9VU0JVSEMgICAweDAyNworI2RlZmluZSBHQUlTTEVSX0kyQ01TVCAgIDB4MDI4CisjZGVmaW5lIEdBSVNMRVJfU1BJQ1RSTCAgMHgwMkQKKyNkZWZpbmUgR0FJU0xFUl9ERFIyU1BBICAweDAyRQorI2RlZmluZSBHQUlTTEVSX1NQSU1DVFJMIDB4MDQ1CisjZGVmaW5lIEdBSVNMRVJfTEVPTjQgICAgMHgwNDgKKyNkZWZpbmUgR0FJU0xFUl9MRU9ONERTVSAweDA0OQorI2RlZmluZSBHQUlTTEVSX0FIQlNUQVQgIDB4MDUyCisjZGVmaW5lIEdBSVNMRVJfRlRNQ1RSTCAgMHgwNTQKKyNkZWZpbmUgR0FJU0xFUl9LQkQgICAgICAweDA2MAorI2RlZmluZSBHQUlTTEVSX1ZHQSAgICAgIDB4MDYxCisjZGVmaW5lIEdBSVNMRVJfU1ZHQSAgICAgMHgwNjMKKyNkZWZpbmUgR0FJU0xFUl9HUlNZU01PTiAweDA2NgorI2RlZmluZSBHQUlTTEVSX0dSQUNFQ1RSTCAweDA2NworCisjZGVmaW5lIEdBSVNMRVJfTDJUSU1FICAgMHhmZmQJLyogaW50ZXJuYWwgZGV2aWNlOiBsZW9uMiB0aW1lciAqLworI2RlZmluZSBHQUlTTEVSX0wyQyAgICAgIDB4ZmZlCS8qIGludGVybmFsIGRldmljZTogbGVvbjJjb21wYXQgKi8KKyNkZWZpbmUgR0FJU0xFUl9QTFVHUExBWSAweGZmZgkvKiBpbnRlcm5hbCBkZXZpY2U6IHBsdWcgJiBwbGF5IGNvbmZpZ2FyZWEgKi8KKworI2RlZmluZSBhbWJhX3ZlbmRvcih4KSAoKCh4KSA+PiAyNCkgJiAweGZmKQorCisjZGVmaW5lIGFtYmFfZGV2aWNlKHgpICgoKHgpID4+IDEyKSAmIDB4ZmZmKQorCisjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX1NQQVJDX0xFT04pICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tYWNoaW5lcy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tYWNoaW5lcy5oCmluZGV4IGMyOGMyZjIuLmNkOWMwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbWFjaGluZXMuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21hY2hpbmVzLmgKQEAgLTE1LDcgKzE1LDcgQEAKIC8qIEN1cnJlbnQgbnVtYmVyIG9mIG1hY2hpbmVzIHdlIGtub3cgYWJvdXQgdGhhdCBoYXMgYW4gSURQUk9NCiAgKiBtYWNodHlwZSBlbnRyeSBpbmNsdWRpbmcgb25lIGVudHJ5IGZvciB0aGUgMHg4MCBPQlAgbWFjaGluZXMuCiAgKi8KLSNkZWZpbmUgTlVNX1NVTl9NQUNISU5FUyAgIDE1CisjZGVmaW5lIE5VTV9TVU5fTUFDSElORVMgICAxNgogCiAvKiBUaGUgbWFjaGluZSB0eXBlIGluIHRoZSBpZHByb20gYXJlYSBsb29rcyBsaWtlIHRoaXM6CiAgKgpAQCAtMzAsNiArMzAsNyBAQAogCiAjZGVmaW5lIFNNX0FSQ0hfTUFTSyAgMHhmMAogI2RlZmluZSBTTV9TVU40ICAgICAgIDB4MjAKKyNkZWZpbmUgIE1fTEVPTiAgICAgICAweDMwCiAjZGVmaW5lIFNNX1NVTjRDICAgICAgMHg1MAogI2RlZmluZSBTTV9TVU40TSAgICAgIDB4NzAKICNkZWZpbmUgU01fU1VONE1fT0JQICAweDgwCkBAIC00MSw2ICs0Miw5IEBACiAjZGVmaW5lIFNNXzRfMzMwICAgICAgMHgwMyAgICAvKiBTdW4gNC8zMDAgc2VyaWVzICovCiAjZGVmaW5lIFNNXzRfNDcwICAgICAgMHgwNCAgICAvKiBTdW4gNC80MDAgc2VyaWVzICovCiAKKy8qIExlb24gbWFjaGluZXMgKi8KKyNkZWZpbmUgTV9MRU9OM19TT0MgICAweDAyICAgIC8qIExlb24zIFNvQyAqLworCiAvKiBTdW40YyBtYWNoaW5lcyAgICAgICAgICAgICAgICBGdWxsIE5hbWUgICAgICAgICAgICAgIC0gUFJPTSBOQU1FICovCiAjZGVmaW5lIFNNXzRDX1NTMSAgICAgMHgwMSAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gMSAgIC0gU3VuIDQvNjAgICovCiAjZGVmaW5lIFNNXzRDX0lQQyAgICAgMHgwMiAgICAvKiBTdW40YyBTcGFyY1N0YXRpb24gSVBDIC0gU3VuIDQvNDAgICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9ubWkuaAppbmRleCBmYmQ1NDZkLi43MmU2NTAwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL25taS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTUsNiArNSw5IEBACiBleHRlcm4gdm9pZCBwZXJmY3RyX2lycShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBubWlfYWRqdXN0X2h6KHVuc2lnbmVkIGludCBuZXdfaHopOwogCi1leHRlcm4gaW50IG5taV91c2FibGU7CitleHRlcm4gYXRvbWljX3Qgbm1pX2FjdGl2ZTsKKworZXh0ZXJuIHZvaWQgc3RhcnRfbm1pX3dhdGNoZG9nKHZvaWQgKnVudXNlZCk7CitleHRlcm4gdm9pZCBzdG9wX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpOwogCiAjZW5kaWYgLyogX19OTUlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmX2NvdW50ZXIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3YThjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZl9jb3VudGVyLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfX0FTTV9TUEFSQ19QRVJGX0NPVU5URVJfSAorI2RlZmluZSBfX0FTTV9TUEFSQ19QRVJGX0NPVU5URVJfSAorCitleHRlcm4gdm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCk7CisKKyNkZWZpbmUJUEVSRl9DT1VOVEVSX0lOREVYX09GRlNFVAkwCisKKyNpZmRlZiBDT05GSUdfUEVSRl9DT1VOVEVSUworZXh0ZXJuIHZvaWQgaW5pdF9od19wZXJmX2NvdW50ZXJzKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2h3X3BlcmZfY291bnRlcnModm9pZCkJeyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndHNybW11LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndHNybW11LmgKaW5kZXggODA4NTU1Zi4uMTQwN2MwNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3Rzcm1tdS5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0c3JtbXUuaApAQCAtMjY3LDYgKzI2Nyw3IEBACiAKIH0KIAorI2lmbmRlZiBDT05GSUdfU1BBUkNfTEVPTgogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNybW11X2h3cHJvYmUodW5zaWduZWQgbG9uZyB2YWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHJldHZhbDsKQEAgLTI3OCw2ICsyNzksOSBAQAogCiAJcmV0dXJuIHJldHZhbDsKIH0KKyNlbHNlCisjZGVmaW5lIHNybW11X2h3cHJvYmUoYWRkcikgKHNybW11X3N3cHJvYmUoYWRkciwgMCkgJiBTUk1NVV9QVEVfUE1BU0spCisjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQKIHNybW11X2dldF9wdGUgKHVuc2lnbmVkIGxvbmcgYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcHJvbS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9tLmgKaW5kZXggYmU4ZDdhYS4uODJhMTkwZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9tLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wcm9tLmgKQEAgLTExOCw1ICsxMTgsOCBAQAogZXh0ZXJuIGNoYXIgKm9mX2NvbnNvbGVfcGF0aDsKIGV4dGVybiBjaGFyICpvZl9jb25zb2xlX29wdGlvbnM7CiAKK2V4dGVybiB2b2lkICgqcHJvbV9idWlsZF9tb3JlKShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqbmV4dHApOworZXh0ZXJuIGNoYXIgKmJ1aWxkX2Z1bGxfbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKTsKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfU1BBUkNfUFJPTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA5ODJhMTJmLi4zYTVhZTNkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTI5LDYgKzI5LDkgQEAKICNkZWZpbmUgU09fUkNWQlVGRk9SQ0UJMHgxMDBiCiAjZGVmaW5lIFNPX0VSUk9SCTB4MTAwNwogI2RlZmluZSBTT19UWVBFCQkweDEwMDgKKyNkZWZpbmUgU09fUFJPVE9DT0wJMHgxMDI4CisjZGVmaW5lIFNPX0RPTUFJTgkweDEwMjkKKwogCiAvKiBMaW51eCBzcGVjaWZpYywga2VlcCB0aGUgc2FtZS4gKi8KICNkZWZpbmUgU09fTk9fQ0hFQ0sJMHgwMDBiCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAppbmRleCA3NTFjOGMxLi44OTAwMzZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICAgc3VuNHUgICAgICAgPSAweDA1LCAvKiBWOCBwbG9vcyBwbG9vcyAqLwogICBzdW5fdW5rbm93biA9IDB4MDYsCiAgIGFwMTAwMCAgICAgID0gMHgwNywgLyogYWxtb3N0IGEgc3VuNG0gKi8KKyAgc3BhcmNfbGVvbiAgPSAweDA4LCAvKiBMZW9uIFNvQyAqLwogfTsKIAogLyogUmVhbGx5LCB1c2VybGFuZCBzaG91bGQgbm90IGJlIGxvb2tpbmcgYXQgYW55IG9mIHRoaXMuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCmluZGV4IDZjMDc3ODEuLjI1ZTg0OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApAQCAtMjksNiArMjksMTAgQEAKIC8qIFRoaXMgY2Fubm90IGV2ZXIgYmUgYSBzdW40YyA6KSBUaGF0J3MganVzdCBoaXN0b3J5LiAqLwogI2RlZmluZSBBUkNIX1NVTjRDIDAKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYXJjX2NwdV90eXBlOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYXJjX2ZwdV90eXBlOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYXJjX3BtdV90eXBlOworCiBleHRlcm4gY2hhciByZWJvb3RfY29tbWFuZFtdOwogCiAvKiBUaGVzZSBhcmUgaGVyZSBpbiBhbiBlZmZvcnQgdG8gbW9yZSBmdWxseSB3b3JrIGFyb3VuZCBTcGl0ZmlyZSBFcnJhdGEKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdHlwZXMuaAppbmRleCBkZTY3MWQ3Li4wOWM3OWE5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC04LDkgKzgsOCBAQAogICogbmVlZCB0byBiZSBjYXJlZnVsIHRvIGF2b2lkIGEgbmFtZSBjbGFzaGVzLgogICovCiAKLSNpZiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2lmIGRlZmluZWQoX19zcGFyY19fKQogCi0vKioqIFNQQVJDIDY0IGJpdCAqKiovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTI2LDMzICsyNSwyMSBAQAogLyogRG1hIGFkZHJlc3NlcyBjb21lIGluIGdlbmVyaWMgYW5kIDY0LWJpdCBmbGF2b3Vycy4gICovCiAKIHR5cGVkZWYgdTMyIGRtYV9hZGRyX3Q7CisKKyNpZiBkZWZpbmVkKF9fYXJjaDY0X18pCisKKy8qKiogU1BBUkMgNjQgYml0ICoqKi8KIHR5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2Vsc2UKLQogLyoqKiBTUEFSQyAzMiBiaXQgKioqLwotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi10eXBlZGVmIHUzMiBkbWFfYWRkcl90OwogdHlwZWRlZiB1MzIgZG1hNjRfYWRkcl90OwogCisjZW5kaWYgLyogZGVmaW5lZChfX2FyY2g2NF9fKSAqLworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKLSNlbmRpZiAvKiBkZWZpbmVkKF9fc3BhcmNfXykgJiYgZGVmaW5lZChfX2FyY2g2NF9fKSAqLworI2VuZGlmIC8qIGRlZmluZWQoX19zcGFyY19fKSAqLwogCiAjZW5kaWYgLyogZGVmaW5lZChfU1BBUkNfVFlQRVNfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdWFjY2Vzc182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKaW5kZXggYTM4YzAzMi4uOWVhMjcxZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91YWNjZXNzXzY0LmgKQEAgLTcsOCArNyw4IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vc3BpdGZpcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGIyYzQwNmQuLjcwNmRmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzk1LDggKzM5NSw5IEBACiAjZGVmaW5lIF9fTlJfcHJlYWR2CQkzMjQKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkzMjUKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkzMjYKKyNkZWZpbmUgX19OUl9wZXJmX2NvdW50ZXJfb3BlbgkzMjcKIAotI2RlZmluZSBOUl9TWVNDQUxMUwkJMzI3CisjZGVmaW5lIE5SX1NZU0NBTExTCQkzMjgKIAogI2lmZGVmIF9fMzJiaXRfc3lzY2FsbF9udW1iZXJzX18KIC8qIFNwYXJjIDMyLWJpdCBvbmx5IGhhcyB0aGUgInNldHJlc3VpZDMyIiwgImdldHJlc3VpZDMyIiB2YXJpYW50cywKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMjliODhhNS4uMjQ3Y2M2MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTQxLDYgKzQxLDggQEAKIG9iai15ICAgICAgICAgICAgICAgICAgICs9IG9mX2RldmljZV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHByb21faXJxdHJhbnMubwogCitvYmotJChDT05GSUdfU1BBUkNfTEVPTikrPSBsZW9uX2tlcm5lbC5vCisKIG9iai0kKENPTkZJR19TUEFSQzY0KSAgICs9IHJlYm9vdC5vCiBvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBzeXNmcy5vCiBvYmotJChDT05GSUdfU1BBUkM2NCkgICArPSBpb21tdS5vCkBAIC0xMDEsMyArMTAzLDYgQEAKIG9iai0kKENPTkZJR19BVURJVCkgICAgICs9IGF1ZGl0Lm8KIGF1ZGl0LS0kKENPTkZJR19BVURJVCkgIDo9IGNvbXBhdF9hdWRpdC5vCiBvYmotJChDT05GSUdfQ09NUEFUKSAgICArPSAkKGF1ZGl0LS15KQorCitwYy0tJChDT05GSUdfUEVSRl9DT1VOVEVSUykgOj0gcGVyZl9jb3VudGVyLm8KK29iai0kKENPTkZJR19TUEFSQzY0KQkrPSAkKHBjLS15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY3B1LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwppbmRleCBkODVjM2RjLi4xNDQ2ZGY5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jcHUuYwpAQCAtMzEyLDcgKzMxMiwxMiBAQAogCiAJcHNyID0gZ2V0X3BzcigpOwogCXB1dF9wc3IocHNyIHwgUFNSX0VGKTsKKyNpZmRlZiBDT05GSUdfU1BBUkNfTEVPTgorCWZwdV92ZXJzID0gNzsKKyNlbHNlCiAJZnB1X3ZlcnMgPSAoKGdldF9mc3IoKSA+PiAxNykgJiAweDcpOworI2VuZGlmCisKIAlwdXRfcHNyKHBzcik7CiAKIAlzZXRfY3B1X2FuZF9mcHUocHNyX2ltcGwsIHBzcl92ZXJzLCBmcHVfdmVycyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggNmI0ZDhhYy4uNDM5ZDgyYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfMzIuUwpAQCAtODA5LDYgKzgwOSwxMSBAQAogCQkgbm9wCiAKIGdvdF9wcm9wOgorI2lmZGVmIENPTkZJR19TUEFSQ19MRU9OCisJICAgICAgICAvKiBubyBjcHUtdHlwZSBjaGVjayBpcyBuZWVkZWQsIGl0IGlzIGEgU1BBUkMtTEVPTiAqLworCQliYSBzdW40Y19jb250aW51ZV9ib290CisJCSBub3AKKyNlbmRpZgogCQlzZXQJY3B1dHlwdmFsLCAlbzIKIAkJbGR1YglbJW8yICsgMHg0XSwgJWwxCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lkcHJvbS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaWRwcm9tLmMKaW5kZXggNTc5MjJmNi4uNTJhMTVmZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaWRwcm9tLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaWRwcm9tLmMKQEAgLTMxLDYgKzMxLDggQEAKIHsgLm5hbWUgPSAiU3VuIDQvMjAwIFNlcmllcyIsICAgICAgICAuaWRfbWFjaHR5cGUgPSAoU01fU1VONCB8IFNNXzRfMjYwKSB9LAogeyAubmFtZSA9ICJTdW4gNC8zMDAgU2VyaWVzIiwgICAgICAgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40IHwgU01fNF8zMzApIH0sCiB7IC5uYW1lID0gIlN1biA0LzQwMCBTZXJpZXMiLCAgICAgICAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjQgfCBTTV80XzQ3MCkgfSwKKy8qIE5vdyBMZW9uICovCit7IC5uYW1lID0gIkxlb24zIFN5c3RlbS1vbi1hLUNoaXAiLCAgLmlkX21hY2h0eXBlID0gKE1fTEVPTiB8IE1fTEVPTjNfU09DKSB9LAogLyogTm93LCBTdW40YydzICovCiB7IC5uYW1lID0gIlN1bjRjIFNwYXJjU3RhdGlvbiAxIiwgICAgLmlkX21hY2h0eXBlID0gKFNNX1NVTjRDIHwgU01fNENfU1MxKSB9LAogeyAubmFtZSA9ICJTdW40YyBTcGFyY1N0YXRpb24gSVBDIiwgIC5pZF9tYWNodHlwZSA9IChTTV9TVU40QyB8IFNNXzRDX0lQQykgfSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvcG9ydC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKaW5kZXggZWRiZWEyMy4uOWY2MWZkOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBzdHJ1Y3QgcGNpX2RldiAqLwogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAKQEAgLTY4MywyNiArNjg0LDMzIEBACiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCi1zdGF0aWMgaW50Ci1fc3BhcmNfaW9fZ2V0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IGZwb3MsIGludCBsZW5ndGgsIGludCAqZW9mLAotICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNwYXJjX2lvX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JY2hhciAqcCA9IGJ1ZiwgKmUgPSBidWYgKyBsZW5ndGg7Ci0Jc3RydWN0IHJlc291cmNlICpyOworCXN0cnVjdCByZXNvdXJjZSAqcm9vdCA9IG0tPnByaXZhdGUsICpyOwogCWNvbnN0IGNoYXIgKm5tOwogCi0JZm9yIChyID0gKChzdHJ1Y3QgcmVzb3VyY2UgKilkYXRhKS0+Y2hpbGQ7IHIgIT0gTlVMTDsgciA9IHItPnNpYmxpbmcpIHsKLQkJaWYgKHAgKyAzMiA+PSBlKQkvKiBCZXR0ZXIgdGhhbiBub3RoaW5nICovCi0JCQlicmVhazsKKwlmb3IgKHIgPSByb290LT5jaGlsZDsgciAhPSBOVUxMOyByID0gci0+c2libGluZykgewogCQlpZiAoKG5tID0gci0+bmFtZSkgPT0gMCkgbm0gPSAiPz8/IjsKLQkJcCArPSBzcHJpbnRmKHAsICIlMDE2bGx4LSUwMTZsbHg6ICVzXG4iLAorCQlzZXFfcHJpbnRmKG0sICIlMDE2bGx4LSUwMTZsbHg6ICVzXG4iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpci0+c3RhcnQsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyLT5lbmQsIG5tKTsKIAl9CiAKLQlyZXR1cm4gcC1idWY7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3BhcmNfaW9fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzcGFyY19pb19wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcGFyY19pb19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHNwYXJjX2lvX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAvKgpAQCAtNzI3LDcgKzczNSw3IEBACiBzdGF0aWMgdm9pZCByZWdpc3Rlcl9wcm9jX3NwYXJjX2lvcG9ydCh2b2lkKQogewogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiaW9fbWFwIiwwLE5VTEwsX3NwYXJjX2lvX2dldF9pbmZvLCZzcGFyY19pb21hcCk7Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiZHZtYV9tYXAiLDAsTlVMTCxfc3BhcmNfaW9fZ2V0X2luZm8sJl9zcGFyY19kdm1hKTsKKwlwcm9jX2NyZWF0ZV9kYXRhKCJpb19tYXAiLCAwLCBOVUxMLCAmc3BhcmNfaW9fcHJvY19mb3BzLCAmc3BhcmNfaW9tYXApOworCXByb2NfY3JlYXRlX2RhdGEoImR2bWFfbWFwIiwgMCwgTlVMTCwgJnNwYXJjX2lvX3Byb2NfZm9wcywgJl9zcGFyY19kdm1hKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwppbmRleCBhZDgwMGI4Li5lMWFmNDM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfMzIuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9wY2ljLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgogCiAjaW5jbHVkZSAia2VybmVsLmgiCiAjaW5jbHVkZSAiaXJxLmgiCkBAIC02NjEsNiArNjYyLDEwIEBACiAJCXN1bjRkX2luaXRfSVJRKCk7CiAJCWJyZWFrOwogCisJY2FzZSBzcGFyY19sZW9uOgorCQlsZW9uX2luaXRfSVJRKCk7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcHJvbV9wcmludGYoIkNhbm5vdCBpbml0aWFsaXplIElSUXMgb24gdGhpcyBTdW4gbWFjaGluZS4uLiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDhhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERhbmllbCBIZWxsc3Ryb20gKGRhbmllbEBnYWlzbGVyLmNvbSkgQWVyb2ZsZXggR2Fpc2xlciBBQgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtvbnJhZCBFaXNlbGUgKGtvbnJhZEBnYWlzbGVyLmNvbSkgQWVyb2ZsZXggR2Fpc2xlciBBQgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CisjaW5jbHVkZSA8YXNtL2xlb25fYW1iYS5oPgorCisjaW5jbHVkZSAicHJvbS5oIgorI2luY2x1ZGUgImlycS5oIgorCitzdHJ1Y3QgbGVvbjNfaXJxY3RybF9yZWdzX21hcCAqbGVvbjNfaXJxY3RybF9yZWdzOyAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciBiYXNlIGFkZHJlc3MsIGluaXRpYWxpemVkIGJ5IGFtYmFfaW5pdCgpICovCitzdHJ1Y3QgbGVvbjNfZ3B0aW1lcl9yZWdzX21hcCAqbGVvbjNfZ3B0aW1lcl9yZWdzOyAvKiB0aW1lciBjb250cm9sbGVyIGJhc2UgYWRkcmVzcywgaW5pdGlhbGl6ZWQgYnkgYW1iYV9pbml0KCkgKi8KK3N0cnVjdCBhbWJhX2FwYl9kZXZpY2UgbGVvbl9wZXJjcHVfdGltZXJfZGV2WzE2XTsKKworaW50IGxlb25kZWJ1Z19pcnFfZGlzYWJsZTsKK2ludCBsZW9uX2RlYnVnX2lycW91dDsKK3N0YXRpYyBpbnQgZHVtbXlfbWFzdGVyX2wxMF9jb3VudGVyOworCit1bnNpZ25lZCBsb25nIGxlb24zX2dwdGltZXJfaXJxOyAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciBpcnEgbnVtYmVyLCBpbml0aWFsaXplZCBieSBhbWJhX2luaXQoKSAqLwordW5zaWduZWQgaW50IHNwYXJjX2xlb25fZWlycTsKKyNkZWZpbmUgTEVPTl9JTUFTSyAoKCZsZW9uM19pcnFjdHJsX3JlZ3MtPm1hc2tbMF0pKQorCisvKiBSZXR1cm4gdGhlIElSUSBvZiB0aGUgcGVuZGluZyBJUlEgb24gdGhlIGV4dGVuZGVkIElSUSBjb250cm9sbGVyICovCitpbnQgc3BhcmNfbGVvbl9laXJxX2dldChpbnQgZWlycSwgaW50IGNwdSkKK3sKKwlyZXR1cm4gTEVPTjNfQllQQVNTX0xPQURfUEEoJmxlb24zX2lycWN0cmxfcmVncy0+aW50aWRbY3B1XSkgJiAweDFmOworfQorCitpcnFyZXR1cm5fdCBzcGFyY19sZW9uX2VpcnFfaXNyKGludCBkdW1teSwgdm9pZCAqZGV2X2lkKQoreworCXByaW50ayhLRVJOX0VSUiAic3BhcmNfbGVvbl9laXJxX2lzcjogRVJST1IgRVhURU5ERUQgSVJRXG4iKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIFRoZSBleHRlbmRlZCBJUlEgY29udHJvbGxlciBoYXMgYmVlbiBmb3VuZCwgdGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgaXQgKi8KK3ZvaWQgc3BhcmNfbGVvbl9laXJxX3JlZ2lzdGVyKGludCBlaXJxKQoreworCWludCBpcnE7CisKKwkvKiBSZWdpc3RlciBhICJCQUQiIGhhbmRsZXIgZm9yIHRoaXMgaW50ZXJydXB0LCBpdCBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJaXJxID0gcmVxdWVzdF9pcnEoZWlycSwgc3BhcmNfbGVvbl9laXJxX2lzciwKKwkJCSAgKElSUUZfRElTQUJMRUQgfCBTQV9TVEFUSUNfQUxMT0MpLCAiZXh0aXJxIiwgTlVMTCk7CisKKwlpZiAoaXJxKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInNwYXJjX2xlb25fZWlycV9yZWdpc3RlcjogdW5hYmxlIHRvIGF0dGFjaCBJUlElZFxuIiwKKwkJICAgICAgIGVpcnEpOworCX0gZWxzZSB7CisJCXNwYXJjX2xlb25fZWlycSA9IGVpcnE7CisJfQorCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfaXJxbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCWlmICghaXJxIHx8ICgoaXJxID4gMHhmKSAmJiAhc3BhcmNfbGVvbl9laXJxKQorCSAgICB8fCAoKGlycSA+IDB4MWYpICYmIHNwYXJjX2xlb25fZWlycSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAibGVvbl9nZXRfaXJxbWFzazogZmFsc2UgaXJxIG51bWJlcjogJWRcbiIsIGlycSk7CisJCW1hc2sgPSAwOworCX0gZWxzZSB7CisJCW1hc2sgPSBMRU9OX0hBUkRfSU5UKGlycSk7CisJfQorCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgdm9pZCBsZW9uX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2ssIGZsYWdzOworCW1hc2sgPSBnZXRfaXJxbWFzayhpcnFfbnIpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlMRU9OM19CWVBBU1NfU1RPUkVfUEEoTEVPTl9JTUFTSywKKwkJCSAgICAgIChMRU9OM19CWVBBU1NfTE9BRF9QQShMRU9OX0lNQVNLKSB8IChtYXNrKSkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbGVvbl9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQoreworCXVuc2lnbmVkIGxvbmcgbWFzaywgZmxhZ3M7CisJbWFzayA9IGdldF9pcnFtYXNrKGlycV9ucik7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCUxFT04zX0JZUEFTU19TVE9SRV9QQShMRU9OX0lNQVNLLAorCQkJICAgICAgKExFT04zX0JZUEFTU19MT0FEX1BBKExFT05fSU1BU0spICYgfihtYXNrKSkpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworfQorCit2b2lkIF9faW5pdCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbikKK3sKKwlpbnQgaXJxOworCisJbGVvbmRlYnVnX2lycV9kaXNhYmxlID0gMDsKKwlsZW9uX2RlYnVnX2lycW91dCA9IDA7CisJbWFzdGVyX2wxMF9jb3VudGVyID0gKHVuc2lnbmVkIGludCAqKSZkdW1teV9tYXN0ZXJfbDEwX2NvdW50ZXI7CisJZHVtbXlfbWFzdGVyX2wxMF9jb3VudGVyID0gMDsKKworCWlmIChsZW9uM19ncHRpbWVyX3JlZ3MgJiYgbGVvbjNfaXJxY3RybF9yZWdzKSB7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLnZhbCwgMCk7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLnJsZCwKKwkJCQkgICAgICAoKCgxMDAwMDAwIC8gMTAwKSAtIDEpKSk7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLmN0cmwsIDApOworCisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBUaW1lci9pcnFjdHJsIGZvdW5kXG4iKTsKKwkJQlVHKCk7CisJfQorCisJaXJxID0gcmVxdWVzdF9pcnEobGVvbjNfZ3B0aW1lcl9pcnEsCisJCQkgIGNvdW50ZXJfZm4sCisJCQkgIChJUlFGX0RJU0FCTEVEIHwgU0FfU1RBVElDX0FMTE9DKSwgInRpbWVyIiwgTlVMTCk7CisKKwlpZiAoaXJxKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGVvbl90aW1lX2luaXQ6IHVuYWJsZSB0byBhdHRhY2ggSVJRJWRcbiIsCisJCSAgICAgICBMRU9OX0lOVEVSUlVQVF9USU1FUjEpOworCQlwcm9tX2hhbHQoKTsKKwl9CisKKwlpZiAobGVvbjNfZ3B0aW1lcl9yZWdzKSB7CisJCUxFT04zX0JZUEFTU19TVE9SRV9QQSgmbGVvbjNfZ3B0aW1lcl9yZWdzLT5lWzBdLmN0cmwsCisJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9FTiB8CisJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9STCB8CisJCQkJICAgICAgTEVPTjNfR1BUSU1FUl9MRCB8IExFT04zX0dQVElNRVJfSVJRRU4pOworCX0KK30KKwordm9pZCBsZW9uX2NsZWFyX2Nsb2NrX2lycSh2b2lkKQoreworfQorCit2b2lkIGxlb25fbG9hZF9wcm9maWxlX2lycShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbGltaXQpCit7CisJQlVHKCk7Cit9CisKKworCisKK3ZvaWQgX19pbml0IGxlb25fdHJhbnNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQoreworCWlmIChzdHJjbXAoZHAtPnR5cGUsICJjcHUiKSA9PSAwICYmIHN0cmNtcChkcC0+bmFtZSwgIjxOVUxMPiIpID09IDApIHsKKwkJc3RydWN0IHByb3BlcnR5ICpwOworCQlwID0gb2ZfZmluZF9wcm9wZXJ0eShkcCwgIm1pZCIsICh2b2lkICopMCk7CisJCWlmIChwKSB7CisJCQlpbnQgbWlkOworCQkJZHAtPm5hbWUgPSBwcm9tX2Vhcmx5X2FsbG9jKDUgKyAxKTsKKwkJCW1lbWNweSgmbWlkLCBwLT52YWx1ZSwgcC0+bGVuZ3RoKTsKKwkJCXNwcmludGYoKGNoYXIgKilkcC0+bmFtZSwgImNwdSUuMmQiLCBtaWQpOworCQl9CisJfQorfQorCit2b2lkIF9faW5pdGRhdGEgKCpwcm9tX2FtYmFfaW5pdCkoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IGRldmljZV9ub2RlICoqKm5leHRwKSA9IDA7CisKK3ZvaWQgX19pbml0IGxlb25fbm9kZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKipuZXh0cCkKK3sKKwlpZiAocHJvbV9hbWJhX2luaXQgJiYKKwkgICAgc3RyY21wKGRwLT50eXBlLCAiYW1iYXBwIikgPT0gMCAmJgorCSAgICBzdHJjbXAoZHAtPm5hbWUsICJhbWJhcHAwIikgPT0gMCkgeworCQlwcm9tX2FtYmFfaW5pdChkcCwgbmV4dHApOworCX0KK30KKwordm9pZCBfX2luaXQgbGVvbl9pbml0X0lSUSh2b2lkKQoreworCXNwYXJjX2luaXRfdGltZXJzID0gbGVvbl9pbml0X3RpbWVyczsKKworCUJURklYVVBTRVRfQ0FMTChlbmFibGVfaXJxLCBsZW9uX2VuYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChkaXNhYmxlX2lycSwgbGVvbl9kaXNhYmxlX2lycSwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKGVuYWJsZV9waWxfaXJxLCBsZW9uX2VuYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChkaXNhYmxlX3BpbF9pcnEsIGxlb25fZGlzYWJsZV9pcnEsIEJURklYVVBDQUxMX05PUk0pOworCisJQlRGSVhVUFNFVF9DQUxMKGNsZWFyX2Nsb2NrX2lycSwgbGVvbl9jbGVhcl9jbG9ja19pcnEsCisJCQlCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwobG9hZF9wcm9maWxlX2lycSwgbGVvbl9sb2FkX3Byb2ZpbGVfaXJxLAorCQkJQlRGSVhVUENBTExfTk9QKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlCVEZJWFVQU0VUX0NBTEwoc2V0X2NwdV9pbnQsIGxlb25fc2V0X2NwdV9pbnQsIEJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChjbGVhcl9jcHVfaW50LCBsZW9uX2NsZWFyX2lwaSwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKHNldF9pcnFfdWR0LCBsZW9uX3NldF91ZHQsIEJURklYVVBDQUxMX05PUk0pOworI2VuZGlmCisKK30KKwordm9pZCBfX2luaXQgbGVvbl9pbml0KHZvaWQpCit7CisJcHJvbV9idWlsZF9tb3JlID0gJmxlb25fbm9kZV9pbml0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwppbmRleCBiNzViZjUwLi4zNzhlYjUzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9ubWkuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKKyNpbmNsdWRlIDxhc20vcGVyZl9jb3VudGVyLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KQEAgLTMxLDEzICszMiwxOSBAQAogICogbGV2ZWwgMTQgYXMgb3VyIElSUSBvZmYgbGV2ZWwuCiAgKi8KIAotc3RhdGljIGludCBubWlfd2F0Y2hkb2dfYWN0aXZlOwogc3RhdGljIGludCBwYW5pY19vbl90aW1lb3V0OwogCi1pbnQgbm1pX3VzYWJsZTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5taV91c2FibGUpOworLyogbm1pX2FjdGl2ZToKKyAqID4wOiB0aGUgTk1JIHdhdGNoZG9nIGlzIGFjdGl2ZSwgYnV0IGNhbiBiZSBkaXNhYmxlZAorICogPDA6IHRoZSBOTUkgd2F0Y2hkb2cgaGFzIG5vdCBiZWVuIHNldCB1cCwgYW5kIGNhbm5vdCBiZSBlbmFibGVkCisgKiAgMDogdGhlIE5NSSB3YXRjaGRvZyBpcyBkaXNhYmxlZCwgYnV0IGNhbiBiZSBlbmFibGVkCisgKi8KK2F0b21pY190IG5taV9hY3RpdmUgPSBBVE9NSUNfSU5JVCgwKTsJCS8qIG9wcm9maWxlIHVzZXMgdGhpcyAqLworRVhQT1JUX1NZTUJPTChubWlfYWN0aXZlKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBubWlfaHogPSBIWjsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzaG9ydCwgd2RfZW5hYmxlZCk7CitzdGF0aWMgaW50IGVuZGZsYWcgX19pbml0ZGF0YTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgbGFzdF9pcnFfc3VtKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShsb2NhbF90LCBhbGVydF9jb3VudGVyKTsKQEAgLTQ1LDcgKzUyLDcgQEAKIAogdm9pZCB0b3VjaF9ubWlfd2F0Y2hkb2codm9pZCkKIHsKLQlpZiAobm1pX3dhdGNoZG9nX2FjdGl2ZSkgeworCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkpIHsKIAkJaW50IGNwdTsKIAogCQlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKQEAgLTc4LDYgKzg1LDcgQEAKIAlpZiAoZG9fcGFuaWMgfHwgcGFuaWNfb25fb29wcykKIAkJcGFuaWMoIk5vbiBtYXNrYWJsZSBpbnRlcnJ1cHQiKTsKIAorCW5taV9leGl0KCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWRvX2V4aXQoU0lHQlVTKTsKIH0KQEAgLTkyLDYgKzEwMCw4IEBACiAKIAlsb2NhbF9jcHVfZGF0YSgpLl9fbm1pX2NvdW50Kys7CiAKKwlubWlfZW50ZXIoKTsKKwogCWlmIChub3RpZnlfZGllKERJRV9OTUksICJubWkiLCByZWdzLCAwLAogCQkgICAgICAgcHRfcmVnc190cmFwX3R5cGUocmVncyksIFNJR0lOVCkgPT0gTk9USUZZX1NUT1ApCiAJCXRvdWNoZWQgPSAxOwpAQCAtMTEwLDEwICsxMjAsMTIgQEAKIAkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOwogCQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIoYWxlcnRfY291bnRlciksIDApOwogCX0KLQlpZiAobm1pX3VzYWJsZSkgeworCWlmIChfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpKSB7CiAJCXdyaXRlX3BpYyhwaWNsX3ZhbHVlKG5taV9oeikpOwogCQlwY3Jfb3BzLT53cml0ZShwY3JfZW5hYmxlKTsKIAl9CisKKwlubWlfZXhpdCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfbm1pX2NvdW50KGludCBjcHUpCkBAIC0xMjEsOCArMTMzLDYgQEAKIAlyZXR1cm4gY3B1X2RhdGEoY3B1KS5fX25taV9jb3VudDsKIH0KIAotc3RhdGljIGludCBlbmRmbGFnIF9faW5pdGRhdGE7Ci0KIHN0YXRpYyBfX2luaXQgdm9pZCBubWlfY3B1X2J1c3kodm9pZCAqZGF0YSkKIHsKIAlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKQEAgLTE0MywxMiArMTUzLDE1IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORwogCQkiYW5kIGF0dGFjaCB0aGUgb3V0cHV0IG9mIHRoZSAnZG1lc2cnIGNvbW1hbmQuXG4iKTsKIAotCW5taV91c2FibGUgPSAwOworCXBlcl9jcHUod2RfZW5hYmxlZCwgY3B1KSA9IDA7CisJYXRvbWljX2RlYygmbm1pX2FjdGl2ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3Bfd2F0Y2hkb2codm9pZCAqdW51c2VkKQordm9pZCBzdG9wX25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCiB7CiAJcGNyX29wcy0+d3JpdGUoUENSX1BJQ19QUklWKTsKKwlfX2dldF9jcHVfdmFyKHdkX2VuYWJsZWQpID0gMDsKKwlhdG9taWNfZGVjKCZubWlfYWN0aXZlKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgY2hlY2tfbm1pX3dhdGNoZG9nKHZvaWQpCkBAIC0xNTYsNiArMTY5LDkgQEAKIAl1bnNpZ25lZCBpbnQgKnByZXZfbm1pX2NvdW50OwogCWludCBjcHUsIGVycjsKIAorCWlmICghYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpKQorCQlyZXR1cm4gMDsKKwogCXByZXZfbm1pX2NvdW50ID0ga21hbGxvYyhucl9jcHVfaWRzICogc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOwogCWlmICghcHJldl9ubWlfY291bnQpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTE3MiwxMiArMTg4LDE1IEBACiAJbWRlbGF5KCgyMCAqIDEwMDApIC8gbm1pX2h6KTsgLyogd2FpdCAyMCB0aWNrcyAqLwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKCFwZXJfY3B1KHdkX2VuYWJsZWQsIGNwdSkpCisJCQljb250aW51ZTsKIAkJaWYgKGdldF9ubWlfY291bnQoY3B1KSAtIHByZXZfbm1pX2NvdW50W2NwdV0gPD0gNSkKIAkJCXJlcG9ydF9icm9rZW5fbm1pKGNwdSwgcHJldl9ubWlfY291bnQpOwogCX0KIAllbmRmbGFnID0gMTsKLQlpZiAoIW5taV91c2FibGUpIHsKKwlpZiAoIWF0b21pY19yZWFkKCZubWlfYWN0aXZlKSkgewogCQlrZnJlZShwcmV2X25taV9jb3VudCk7CisJCWF0b21pY19zZXQoJm5taV9hY3RpdmUsIC0xKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xODgsMTIgKzIwNywyNiBAQAogCWtmcmVlKHByZXZfbm1pX2NvdW50KTsKIAlyZXR1cm4gMDsKIGVycm9yOgotCW9uX2VhY2hfY3B1KHN0b3Bfd2F0Y2hkb2csIE5VTEwsIDEpOworCW9uX2VhY2hfY3B1KHN0b3Bfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBzdGFydF93YXRjaGRvZyh2b2lkICp1bnVzZWQpCit2b2lkIHN0YXJ0X25taV93YXRjaGRvZyh2b2lkICp1bnVzZWQpCiB7CisJX19nZXRfY3B1X3Zhcih3ZF9lbmFibGVkKSA9IDE7CisJYXRvbWljX2luYygmbm1pX2FjdGl2ZSk7CisKKwlwY3Jfb3BzLT53cml0ZShQQ1JfUElDX1BSSVYpOworCXdyaXRlX3BpYyhwaWNsX3ZhbHVlKG5taV9oeikpOworCisJcGNyX29wcy0+d3JpdGUocGNyX2VuYWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9hZGp1c3RfaHpfb25lKHZvaWQgKnVudXNlZCkKK3sKKwlpZiAoIV9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkpCisJCXJldHVybjsKKwogCXBjcl9vcHMtPndyaXRlKFBDUl9QSUNfUFJJVik7CiAJd3JpdGVfcGljKHBpY2xfdmFsdWUobm1pX2h6KSk7CiAKQEAgLTIwMywxMyArMjM2LDEzIEBACiB2b2lkIG5taV9hZGp1c3RfaHoodW5zaWduZWQgaW50IG5ld19oeikKIHsKIAlubWlfaHogPSBuZXdfaHo7Ci0Jb25fZWFjaF9jcHUoc3RhcnRfd2F0Y2hkb2csIE5VTEwsIDEpOworCW9uX2VhY2hfY3B1KG5taV9hZGp1c3RfaHpfb25lLCBOVUxMLCAxKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5taV9hZGp1c3RfaHopOwogCiBzdGF0aWMgaW50IG5taV9zaHV0ZG93bihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqcCkKIHsKLQlvbl9lYWNoX2NwdShzdG9wX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwlvbl9lYWNoX2NwdShzdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyMSwxOCArMjU0LDE5IEBACiB7CiAJaW50IGVycjsKIAotCW5taV91c2FibGUgPSAxOwotCi0Jb25fZWFjaF9jcHUoc3RhcnRfd2F0Y2hkb2csIE5VTEwsIDEpOworCW9uX2VhY2hfY3B1KHN0YXJ0X25taV93YXRjaGRvZywgTlVMTCwgMSk7CiAKIAllcnIgPSBjaGVja19ubWlfd2F0Y2hkb2coKTsKIAlpZiAoIWVycikgewogCQllcnIgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJm5taV9yZWJvb3Rfbm90aWZpZXIpOwogCQlpZiAoZXJyKSB7Ci0JCQlubWlfdXNhYmxlID0gMDsKLQkJCW9uX2VhY2hfY3B1KHN0b3Bfd2F0Y2hkb2csIE5VTEwsIDEpOworCQkJb25fZWFjaF9jcHUoc3RvcF9ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOworCQkJYXRvbWljX3NldCgmbm1pX2FjdGl2ZSwgLTEpOwogCQl9CiAJfQorCWlmICghZXJyKQorCQlpbml0X2h3X3BlcmZfY291bnRlcnMoKTsKKwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKaW5kZXggOTAzOTY3MC4uNGMyNmViNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlXzMyLmMKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgorI2luY2x1ZGUgPGFzbS9sZW9uX2FtYmEuaD4KIAogI2luY2x1ZGUgIm9mX2RldmljZV9jb21tb24uaCIKIApAQCAtOTcsNiArOTksMzUgQEAKIAlyZXR1cm4gSU9SRVNPVVJDRV9NRU07CiB9CiAKKyAvKgorICogQU1CQVBQIGJ1cyBzcGVjaWZpYyB0cmFuc2xhdG9yCisgKi8KKworc3RhdGljIGludCBvZl9idXNfYW1iYXBwX21hdGNoKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJcmV0dXJuICFzdHJjbXAobnAtPm5hbWUsICJhbWJhcHAiKTsKK30KKworc3RhdGljIHZvaWQgb2ZfYnVzX2FtYmFwcF9jb3VudF9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLAorCQkJCSAgICAgIGludCAqYWRkcmMsIGludCAqc2l6ZWMpCit7CisJaWYgKGFkZHJjKQorCQkqYWRkcmMgPSAxOworCWlmIChzaXplYykKKwkJKnNpemVjID0gMTsKK30KKworc3RhdGljIGludCBvZl9idXNfYW1iYXBwX21hcCh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsCisJCQkgICAgIGludCBuYSwgaW50IG5zLCBpbnQgcG5hKQoreworCXJldHVybiBvZl9idXNfZGVmYXVsdF9tYXAoYWRkciwgcmFuZ2UsIG5hLCBucywgcG5hKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgb2ZfYnVzX2FtYmFwcF9nZXRfZmxhZ3MoY29uc3QgdTMyICphZGRyLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJuIElPUkVTT1VSQ0VfTUVNOworfQogCiAvKgogICogQXJyYXkgb2YgYnVzIHNwZWNpZmljIHRyYW5zbGF0b3JzCkBAIC0xMjEsNiArMTUyLDE1IEBACiAJCS5tYXAgPSBvZl9idXNfZGVmYXVsdF9tYXAsCiAJCS5nZXRfZmxhZ3MgPSBvZl9idXNfc2J1c19nZXRfZmxhZ3MsCiAJfSwKKwkvKiBBTUJBICovCisJeworCQkubmFtZSA9ICJhbWJhcHAiLAorCQkuYWRkcl9wcm9wX25hbWUgPSAicmVnIiwKKwkJLm1hdGNoID0gb2ZfYnVzX2FtYmFwcF9tYXRjaCwKKwkJLmNvdW50X2NlbGxzID0gb2ZfYnVzX2FtYmFwcF9jb3VudF9jZWxscywKKwkJLm1hcCA9IG9mX2J1c19hbWJhcHBfbWFwLAorCQkuZ2V0X2ZsYWdzID0gb2ZfYnVzX2FtYmFwcF9nZXRfZmxhZ3MsCisJfSwKIAkvKiBEZWZhdWx0ICovCiAJewogCQkubmFtZSA9ICJkZWZhdWx0IiwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKaW5kZXggMWFlOGNkZC4uNjhmZjAwMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNyLmMKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCisjaW5jbHVkZSA8bGludXgvcGVyZl9jb3VudGVyLmg+CisKICNpbmNsdWRlIDxhc20vcGlsLmg+CiAjaW5jbHVkZSA8YXNtL3Bjci5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KQEAgLTM0LDEwICszNiwyMCBAQAogICovCiB2b2lkIGRlZmVycmVkX3Bjcl93b3JrX2lycShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlzdHJ1Y3QgcHRfcmVncyAqb2xkX3JlZ3M7CisKIAljbGVhcl9zb2Z0aW50KDEgPDwgUElMX0RFRkVSUkVEX1BDUl9XT1JLKTsKKworCW9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOworCWlycV9lbnRlcigpOworI2lmZGVmIENPTkZJR19QRVJGX0NPVU5URVJTCisJcGVyZl9jb3VudGVyX2RvX3BlbmRpbmcoKTsKKyNlbmRpZgorCWlycV9leGl0KCk7CisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIH0KIAotdm9pZCBzY2hlZHVsZV9kZWZlcnJlZF9wY3Jfd29yayh2b2lkKQordm9pZCBzZXRfcGVyZl9jb3VudGVyX3BlbmRpbmcodm9pZCkKIHsKIAlzZXRfc29mdGludCgxIDw8IFBJTF9ERUZFUlJFRF9QQ1JfV09SSyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2NvdW50ZXIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfY291bnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZGU0MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9jb3VudGVyLmMKQEAgLTAsMCArMSw1NTcgQEAKKy8qIFBlcmZvcm1hbmNlIGNvdW50ZXIgc3VwcG9ydCBmb3Igc3BhcmM2NC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBhbG1vc3QgZW50aXJlbHkgdXBvbiB0aGUgeDg2IHBlcmYgY291bnRlcgorICogY29kZSwgd2hpY2ggaXM6CisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgorICogIENvcHlyaWdodCAoQykgMjAwOSBKYXN3aW5kZXIgU2luZ2ggUmFqcHV0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4sIFJvYmVydCBSaWNodGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BlcmZfY291bnRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL25taS5oPgorI2luY2x1ZGUgPGFzbS9wY3IuaD4KKworLyogU3BhcmM2NCBjaGlwcyBoYXZlIHR3byBwZXJmb3JtYW5jZSBjb3VudGVycywgMzItYml0cyBlYWNoLCB3aXRoCisgKiBvdmVyZmxvdyBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBvbiB0cmFuc2l0aW9uIGZyb20gMHhmZmZmZmZmZiB0byAwLgorICogVGhlIGNvdW50ZXJzIGFyZSBhY2Nlc3NlZCBpbiBvbmUgZ28gdXNpbmcgYSA2NC1iaXQgcmVnaXN0ZXIuCisgKgorICogQm90aCBjb3VudGVycyBhcmUgY29udHJvbGxlZCB1c2luZyBhIHNpbmdsZSBjb250cm9sIHJlZ2lzdGVyLiAgVGhlCisgKiBvbmx5IHdheSB0byBzdG9wIGFsbCBzYW1wbGluZyBpcyB0byBjbGVhciBhbGwgb2YgdGhlIGNvbnRleHQgKHVzZXIsCisgKiBzdXBlcnZpc29yLCBoeXBlcnZpc29yKSBzYW1wbGluZyBlbmFibGUgYml0cy4gIEJ1dCB0aGVzZSBiaXRzIGFwcGx5CisgKiB0byBib3RoIGNvdW50ZXJzLCB0aHVzIHRoZSB0d28gY291bnRlcnMgY2FuJ3QgYmUgZW5hYmxlZC9kaXNhYmxlZAorICogaW5kaXZpZHVhbGx5LgorICoKKyAqIFRoZSBjb250cm9sIHJlZ2lzdGVyIGhhcyB0d28gZXZlbnQgZmllbGRzLCBvbmUgZm9yIGVhY2ggb2YgdGhlIHR3bworICogY291bnRlcnMuICBJdCdzIHRodXMgbmVhcmx5IGltcG9zc2libGUgdG8gaGF2ZSBvbmUgY291bnRlciBnb2luZworICogd2hpbGUga2VlcGluZyB0aGUgb3RoZXIgb25lIHN0b3BwZWQuICBUaGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8KKyAqIGdldCBvdmVyZmxvdyBpbnRlcnJ1cHRzIGZvciBjb3VudGVycyBub3QgY3VycmVudGx5ICJpbiB1c2UiIGFuZAorICogdGhhdCBjb25kaXRpb24gbXVzdCBiZSBjaGVja2VkIGluIHRoZSBvdmVyZmxvdyBpbnRlcnJ1cHQgaGFuZGxlci4KKyAqCisgKiBTbyB3ZSB1c2UgYSBoYWNrLCBpbiB0aGF0IHdlIHByb2dyYW0gaW5hY3RpdmUgY291bnRlcnMgd2l0aCB0aGUKKyAqICJzd19jb3VudDAiIGFuZCAic3dfY291bnQxIiBldmVudHMuICBUaGVzZSBjb3VudCBob3cgbWFueSB0aW1lcworICogdGhlIGluc3RydWN0aW9uICJzZXRoaSAlaGkoMHhmYzAwMCksICVnMCIgaXMgZXhlY3V0ZWQuICBJdCdzIGFuCisgKiB1bnVzdWFsIHdheSB0byBlbmNvZGUgYSBOT1AgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdCB0cmlnZ2VyIGluCisgKiBub3JtYWwgY29kZS4KKyAqLworCisjZGVmaW5lIE1BWF9IV0NPVU5URVJTCQkJMgorI2RlZmluZSBNQVhfUEVSSU9ECQkJKCgxVUwgPDwgMzIpIC0gMSkKKworI2RlZmluZSBQSUNfVVBQRVJfSU5ERVgJCQkwCisjZGVmaW5lIFBJQ19MT1dFUl9JTkRFWAkJCTEKKworc3RydWN0IGNwdV9od19jb3VudGVycyB7CisJc3RydWN0IHBlcmZfY291bnRlcgkqY291bnRlcnNbTUFYX0hXQ09VTlRFUlNdOworCXVuc2lnbmVkIGxvbmcJCXVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKE1BWF9IV0NPVU5URVJTKV07CisJdW5zaWduZWQgbG9uZwkJYWN0aXZlX21hc2tbQklUU19UT19MT05HUyhNQVhfSFdDT1VOVEVSUyldOworCWludCBlbmFibGVkOworfTsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfaHdfY291bnRlcnMsIGNwdV9od19jb3VudGVycykgPSB7IC5lbmFibGVkID0gMSwgfTsKKworc3RydWN0IHBlcmZfZXZlbnRfbWFwIHsKKwl1MTYJZW5jb2Rpbmc7CisJdTgJcGljX21hc2s7CisjZGVmaW5lIFBJQ19OT05FCTB4MDAKKyNkZWZpbmUgUElDX1VQUEVSCTB4MDEKKyNkZWZpbmUgUElDX0xPV0VSCTB4MDIKK307CisKK3N0cnVjdCBzcGFyY19wbXUgeworCWNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcAkqKCpldmVudF9tYXApKGludCk7CisJaW50CQkJCW1heF9ldmVudHM7CisJaW50CQkJCXVwcGVyX3NoaWZ0OworCWludAkJCQlsb3dlcl9zaGlmdDsKKwlpbnQJCQkJZXZlbnRfbWFzazsKKwlpbnQJCQkJaHZfYml0OworCWludAkJCQlpcnFfYml0OworCWludAkJCQl1cHBlcl9ub3A7CisJaW50CQkJCWxvd2VyX25vcDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgdWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcFtdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAwMDAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDAwMSwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDB4MDAwOSwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMDA5LCBQSUNfVVBQRVIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnVsdHJhM2lfZXZlbnRfbWFwKGludCBldmVudCkKK3sKKwlyZXR1cm4gJnVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRdOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSB1bHRyYTNpX3BtdSA9IHsKKwkuZXZlbnRfbWFwCT0gdWx0cmEzaV9ldmVudF9tYXAsCisJLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKHVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXApLAorCS51cHBlcl9zaGlmdAk9IDExLAorCS5sb3dlcl9zaGlmdAk9IDQsCisJLmV2ZW50X21hc2sJPSAweDNmLAorCS51cHBlcl9ub3AJPSAweDFjLAorCS5sb3dlcl9ub3AJPSAweDE0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCBuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtdID0geworCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAyZmYsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDJmZiwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDB4MDIwOCwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMzAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMjAxLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXSA9IHsgMHgwMjAyLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKm5pYWdhcmEyX2V2ZW50X21hcChpbnQgZXZlbnQpCit7CisJcmV0dXJuICZuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcFtldmVudF07Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IG5pYWdhcmEyX3BtdSA9IHsKKwkuZXZlbnRfbWFwCT0gbmlhZ2FyYTJfZXZlbnRfbWFwLAorCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRShuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcCksCisJLnVwcGVyX3NoaWZ0CT0gMTksCisJLmxvd2VyX3NoaWZ0CT0gNiwKKwkuZXZlbnRfbWFzawk9IDB4ZmZmLAorCS5odl9iaXQJCT0gMHg4LAorCS5pcnFfYml0CT0gMHgwMywKKwkudXBwZXJfbm9wCT0gMHgyMjAsCisJLmxvd2VyX25vcAk9IDB4MjIwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgKnNwYXJjX3BtdSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgdTY0IGV2ZW50X2VuY29kaW5nKHU2NCBldmVudCwgaW50IGlkeCkKK3sKKwlpZiAoaWR4ID09IFBJQ19VUFBFUl9JTkRFWCkKKwkJZXZlbnQgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7CisJZWxzZQorCQlldmVudCA8PD0gc3BhcmNfcG11LT5sb3dlcl9zaGlmdDsKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3N0YXRpYyB1NjQgbWFza19mb3JfaW5kZXgoaW50IGlkeCkKK3sKKwlyZXR1cm4gZXZlbnRfZW5jb2Rpbmcoc3BhcmNfcG11LT5ldmVudF9tYXNrLCBpZHgpOworfQorCitzdGF0aWMgdTY0IG5vcF9mb3JfaW5kZXgoaW50IGlkeCkKK3sKKwlyZXR1cm4gZXZlbnRfZW5jb2RpbmcoaWR4ID09IFBJQ19VUFBFUl9JTkRFWCA/CisJCQkgICAgICBzcGFyY19wbXUtPnVwcGVyX25vcCA6CisJCQkgICAgICBzcGFyY19wbXUtPmxvd2VyX25vcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9lbmFibGVfY291bnRlcihzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MsCisJCQkJCSAgICBpbnQgaWR4KQoreworCXU2NCB2YWwsIG1hc2sgPSBtYXNrX2Zvcl9pbmRleChpZHgpOworCisJdmFsID0gcGNyX29wcy0+cmVhZCgpOworCXBjcl9vcHMtPndyaXRlKCh2YWwgJiB+bWFzaykgfCBod2MtPmNvbmZpZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKHN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YywKKwkJCQkJICAgICBpbnQgaWR4KQoreworCXU2NCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKKwl1NjQgbm9wID0gbm9wX2Zvcl9pbmRleChpZHgpOworCXU2NCB2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7CisKKwlwY3Jfb3BzLT53cml0ZSgodmFsICYgfm1hc2spIHwgbm9wKTsKK30KKwordm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXU2NCB2YWw7CisJaW50IGk7CisKKwlpZiAoY3B1Yy0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCisJY3B1Yy0+ZW5hYmxlZCA9IDE7CisJYmFycmllcigpOworCisJdmFsID0gcGNyX29wcy0+cmVhZCgpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9IV0NPVU5URVJTOyBpKyspIHsKKwkJc3RydWN0IHBlcmZfY291bnRlciAqY3AgPSBjcHVjLT5jb3VudGVyc1tpXTsKKwkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOworCisJCWlmICghY3ApCisJCQljb250aW51ZTsKKwkJaHdjID0gJmNwLT5odzsKKwkJdmFsIHw9IGh3Yy0+Y29uZmlnX2Jhc2U7CisJfQorCisJcGNyX29wcy0+d3JpdGUodmFsKTsKK30KKwordm9pZCBod19wZXJmX2Rpc2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwl1NjQgdmFsOworCisJaWYgKCFjcHVjLT5lbmFibGVkKQorCQlyZXR1cm47CisKKwljcHVjLT5lbmFibGVkID0gMDsKKworCXZhbCA9IHBjcl9vcHMtPnJlYWQoKTsKKwl2YWwgJj0gfihQQ1JfVVRSQUNFIHwgUENSX1NUUkFDRSB8CisJCSBzcGFyY19wbXUtPmh2X2JpdCB8IHNwYXJjX3BtdS0+aXJxX2JpdCk7CisJcGNyX29wcy0+d3JpdGUodmFsKTsKK30KKworc3RhdGljIHUzMiByZWFkX3BtYyhpbnQgaWR4KQoreworCXU2NCB2YWw7CisKKwlyZWFkX3BpYyh2YWwpOworCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQorCQl2YWwgPj49IDMyOworCisJcmV0dXJuIHZhbCAmIDB4ZmZmZmZmZmY7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BtYyhpbnQgaWR4LCB1NjQgdmFsKQoreworCXU2NCBzaGlmdCwgbWFzaywgcGljOworCisJc2hpZnQgPSAwOworCWlmIChpZHggPT0gUElDX1VQUEVSX0lOREVYKQorCQlzaGlmdCA9IDMyOworCisJbWFzayA9ICgodTY0KSAweGZmZmZmZmZmKSA8PCBzaGlmdDsKKwl2YWwgPDw9IHNoaWZ0OworCisJcmVhZF9waWMocGljKTsKKwlwaWMgJj0gfm1hc2s7CisJcGljIHw9IHZhbDsKKwl3cml0ZV9waWMocGljKTsKK30KKworc3RhdGljIGludCBzcGFyY19wZXJmX2NvdW50ZXJfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAorCQkJCQkgc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQoreworCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CisJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseShsZWZ0IDw9IC1wZXJpb2QpKSB7CisJCWxlZnQgPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCisJaWYgKHVubGlrZWx5KGxlZnQgPD0gMCkpIHsKKwkJbGVmdCArPSBwZXJpb2Q7CisJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgbGVmdCk7CisJCWh3Yy0+bGFzdF9wZXJpb2QgPSBwZXJpb2Q7CisJCXJldCA9IDE7CisJfQorCWlmIChsZWZ0ID4gTUFYX1BFUklPRCkKKwkJbGVmdCA9IE1BWF9QRVJJT0Q7CisKKwlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgKHU2NCktbGVmdCk7CisKKwl3cml0ZV9wbWMoaWR4LCAodTY0KSgtbGVmdCkgJiAweGZmZmZmZmZmKTsKKworCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNwYXJjX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJaW50IGlkeCA9IGh3Yy0+aWR4OworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXNwYXJjX3BtdV9kaXNhYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCisJY3B1Yy0+Y291bnRlcnNbaWR4XSA9IGNvdW50ZXI7CisJc2V0X2JpdChpZHgsIGNwdWMtPmFjdGl2ZV9tYXNrKTsKKworCXNwYXJjX3BlcmZfY291bnRlcl9zZXRfcGVyaW9kKGNvdW50ZXIsIGh3YywgaWR4KTsKKwlzcGFyY19wbXVfZW5hYmxlX2NvdW50ZXIoaHdjLCBpZHgpOworCXBlcmZfY291bnRlcl91cGRhdGVfdXNlcnBhZ2UoY291bnRlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgc3BhcmNfcGVyZl9jb3VudGVyX3VwZGF0ZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyLAorCQkJCSAgICAgc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjLCBpbnQgaWR4KQoreworCWludCBzaGlmdCA9IDY0IC0gMzI7CisJdTY0IHByZXZfcmF3X2NvdW50LCBuZXdfcmF3X2NvdW50OworCXM2NCBkZWx0YTsKKworYWdhaW46CisJcHJldl9yYXdfY291bnQgPSBhdG9taWM2NF9yZWFkKCZod2MtPnByZXZfY291bnQpOworCW5ld19yYXdfY291bnQgPSByZWFkX3BtYyhpZHgpOworCisJaWYgKGF0b21pYzY0X2NtcHhjaGcoJmh3Yy0+cHJldl9jb3VudCwgcHJldl9yYXdfY291bnQsCisJCQkgICAgIG5ld19yYXdfY291bnQpICE9IHByZXZfcmF3X2NvdW50KQorCQlnb3RvIGFnYWluOworCisJZGVsdGEgPSAobmV3X3Jhd19jb3VudCA8PCBzaGlmdCkgLSAocHJldl9yYXdfY291bnQgPDwgc2hpZnQpOworCWRlbHRhID4+PSBzaGlmdDsKKworCWF0b21pYzY0X2FkZChkZWx0YSwgJmNvdW50ZXItPmNvdW50KTsKKwlhdG9taWM2NF9zdWIoZGVsdGEsICZod2MtPnBlcmlvZF9sZWZ0KTsKKworCXJldHVybiBuZXdfcmF3X2NvdW50OworfQorCitzdGF0aWMgdm9pZCBzcGFyY19wbXVfZGlzYWJsZShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQoreworCXN0cnVjdCBjcHVfaHdfY291bnRlcnMgKmNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfY291bnRlcnMpOworCXN0cnVjdCBod19wZXJmX2NvdW50ZXIgKmh3YyA9ICZjb3VudGVyLT5odzsKKwlpbnQgaWR4ID0gaHdjLT5pZHg7CisKKwljbGVhcl9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CisJc3BhcmNfcG11X2Rpc2FibGVfY291bnRlcihod2MsIGlkeCk7CisKKwliYXJyaWVyKCk7CisKKwlzcGFyY19wZXJmX2NvdW50ZXJfdXBkYXRlKGNvdW50ZXIsIGh3YywgaWR4KTsKKwljcHVjLT5jb3VudGVyc1tpZHhdID0gTlVMTDsKKwljbGVhcl9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spOworCisJcGVyZl9jb3VudGVyX3VwZGF0ZV91c2VycGFnZShjb3VudGVyKTsKK30KKworc3RhdGljIHZvaWQgc3BhcmNfcG11X3JlYWQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJc3BhcmNfcGVyZl9jb3VudGVyX3VwZGF0ZShjb3VudGVyLCBod2MsIGh3Yy0+aWR4KTsKK30KKworc3RhdGljIHZvaWQgc3BhcmNfcG11X3VudGhyb3R0bGUoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJc3BhcmNfcG11X2VuYWJsZV9jb3VudGVyKGh3YywgaHdjLT5pZHgpOworfQorCitzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2NvdW50ZXJzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBtY19ncmFiX211dGV4KTsKKwordm9pZCBwZXJmX2NvdW50ZXJfZ3JhYl9wbWModm9pZCkKK3sKKwlpZiAoYXRvbWljX2luY19ub3RfemVybygmYWN0aXZlX2NvdW50ZXJzKSkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcG1jX2dyYWJfbXV0ZXgpOworCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlX2NvdW50ZXJzKSA9PSAwKSB7CisJCWlmIChhdG9taWNfcmVhZCgmbm1pX2FjdGl2ZSkgPiAwKSB7CisJCQlvbl9lYWNoX2NwdShzdG9wX25taV93YXRjaGRvZywgTlVMTCwgMSk7CisJCQlCVUdfT04oYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpICE9IDApOworCQl9CisJCWF0b21pY19pbmMoJmFjdGl2ZV9jb3VudGVycyk7CisJfQorCW11dGV4X3VubG9jaygmcG1jX2dyYWJfbXV0ZXgpOworfQorCit2b2lkIHBlcmZfY291bnRlcl9yZWxlYXNlX3BtYyh2b2lkKQoreworCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZhY3RpdmVfY291bnRlcnMsICZwbWNfZ3JhYl9tdXRleCkpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA9PSAwKQorCQkJb25fZWFjaF9jcHUoc3RhcnRfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbWNfZ3JhYl9tdXRleCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBod19wZXJmX2NvdW50ZXJfZGVzdHJveShzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyKQoreworCXBlcmZfY291bnRlcl9yZWxlYXNlX3BtYygpOworfQorCitzdGF0aWMgaW50IF9faHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlzdHJ1Y3QgcGVyZl9jb3VudGVyX2F0dHIgKmF0dHIgPSAmY291bnRlci0+YXR0cjsKKwlzdHJ1Y3QgaHdfcGVyZl9jb3VudGVyICpod2MgPSAmY291bnRlci0+aHc7CisJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwOworCXU2NCBlbmM7CisKKwlpZiAoYXRvbWljX3JlYWQoJm5taV9hY3RpdmUpIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoYXR0ci0+dHlwZSAhPSBQRVJGX1RZUEVfSEFSRFdBUkUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChhdHRyLT5jb25maWcgPj0gc3BhcmNfcG11LT5tYXhfZXZlbnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBlcmZfY291bnRlcl9ncmFiX3BtYygpOworCWNvdW50ZXItPmRlc3Ryb3kgPSBod19wZXJmX2NvdW50ZXJfZGVzdHJveTsKKworCS8qIFdlIHNhdmUgdGhlIGVuYWJsZSBiaXRzIGluIHRoZSBjb25maWdfYmFzZS4gIFNvIHRvCisJICogdHVybiBvZmYgc2FtcGxpbmcganVzdCB3cml0ZSAnY29uZmlnJywgYW5kIHRvIGVuYWJsZQorCSAqIHRoaW5ncyB3cml0ZSAnY29uZmlnIHwgY29uZmlnX2Jhc2UnLgorCSAqLworCWh3Yy0+Y29uZmlnX2Jhc2UgPSBzcGFyY19wbXUtPmlycV9iaXQ7CisJaWYgKCFhdHRyLT5leGNsdWRlX3VzZXIpCisJCWh3Yy0+Y29uZmlnX2Jhc2UgfD0gUENSX1VUUkFDRTsKKwlpZiAoIWF0dHItPmV4Y2x1ZGVfa2VybmVsKQorCQlod2MtPmNvbmZpZ19iYXNlIHw9IFBDUl9TVFJBQ0U7CisJaWYgKCFhdHRyLT5leGNsdWRlX2h2KQorCQlod2MtPmNvbmZpZ19iYXNlIHw9IHNwYXJjX3BtdS0+aHZfYml0OworCisJaWYgKCFod2MtPnNhbXBsZV9wZXJpb2QpIHsKKwkJaHdjLT5zYW1wbGVfcGVyaW9kID0gTUFYX1BFUklPRDsKKwkJaHdjLT5sYXN0X3BlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKKwkJYXRvbWljNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2QpOworCX0KKworCXBtYXAgPSBzcGFyY19wbXUtPmV2ZW50X21hcChhdHRyLT5jb25maWcpOworCisJZW5jID0gcG1hcC0+ZW5jb2Rpbmc7CisJaWYgKHBtYXAtPnBpY19tYXNrICYgUElDX1VQUEVSKSB7CisJCWh3Yy0+aWR4ID0gUElDX1VQUEVSX0lOREVYOworCQllbmMgPDw9IHNwYXJjX3BtdS0+dXBwZXJfc2hpZnQ7CisJfSBlbHNlIHsKKwkJaHdjLT5pZHggPSBQSUNfTE9XRVJfSU5ERVg7CisJCWVuYyA8PD0gc3BhcmNfcG11LT5sb3dlcl9zaGlmdDsKKwl9CisKKwlod2MtPmNvbmZpZyB8PSBlbmM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11IHBtdSA9IHsKKwkuZW5hYmxlCQk9IHNwYXJjX3BtdV9lbmFibGUsCisJLmRpc2FibGUJPSBzcGFyY19wbXVfZGlzYWJsZSwKKwkucmVhZAkJPSBzcGFyY19wbXVfcmVhZCwKKwkudW50aHJvdHRsZQk9IHNwYXJjX3BtdV91bnRocm90dGxlLAorfTsKKworY29uc3Qgc3RydWN0IHBtdSAqaHdfcGVyZl9jb3VudGVyX2luaXQoc3RydWN0IHBlcmZfY291bnRlciAqY291bnRlcikKK3sKKwlpbnQgZXJyID0gX19od19wZXJmX2NvdW50ZXJfaW5pdChjb3VudGVyKTsKKworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CisJcmV0dXJuICZwbXU7Cit9CisKK3ZvaWQgcGVyZl9jb3VudGVyX3ByaW50X2RlYnVnKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgcGNyLCBwaWM7CisJaW50IGNwdTsKKworCWlmICghc3BhcmNfcG11KQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlwY3IgPSBwY3Jfb3BzLT5yZWFkKCk7CisJcmVhZF9waWMocGljKTsKKworCXByX2luZm8oIlxuIik7CisJcHJfaW5mbygiQ1BVIyVkOiBQQ1JbJTAxNmxseF0gUElDWyUwMTZsbHhdXG4iLAorCQljcHUsIHBjciwgcGljKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMgcGVyZl9jb3VudGVyX25taV9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKl9fYXJncykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBfX2FyZ3M7CisJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgY3B1X2h3X2NvdW50ZXJzICpjcHVjOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWludCBpZHg7CisKKwlpZiAoIWF0b21pY19yZWFkKCZhY3RpdmVfY291bnRlcnMpKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRElFX05NSToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJfQorCisJcmVncyA9IGFyZ3MtPnJlZ3M7CisKKwlkYXRhLnJlZ3MgPSByZWdzOworCWRhdGEuYWRkciA9IDA7CisKKwljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2NvdW50ZXJzKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE1BWF9IV0NPVU5URVJTOyBpZHgrKykgeworCQlzdHJ1Y3QgcGVyZl9jb3VudGVyICpjb3VudGVyID0gY3B1Yy0+Y291bnRlcnNbaWR4XTsKKwkJc3RydWN0IGh3X3BlcmZfY291bnRlciAqaHdjOworCQl1NjQgdmFsOworCisJCWlmICghdGVzdF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaHdjID0gJmNvdW50ZXItPmh3OworCQl2YWwgPSBzcGFyY19wZXJmX2NvdW50ZXJfdXBkYXRlKGNvdW50ZXIsIGh3YywgaWR4KTsKKwkJaWYgKHZhbCAmICgxVUxMIDw8IDMxKSkKKwkJCWNvbnRpbnVlOworCisJCWRhdGEucGVyaW9kID0gY291bnRlci0+aHcubGFzdF9wZXJpb2Q7CisJCWlmICghc3BhcmNfcGVyZl9jb3VudGVyX3NldF9wZXJpb2QoY291bnRlciwgaHdjLCBpZHgpKQorCQkJY29udGludWU7CisKKwkJaWYgKHBlcmZfY291bnRlcl9vdmVyZmxvdyhjb3VudGVyLCAxLCAmZGF0YSkpCisJCQlzcGFyY19wbXVfZGlzYWJsZV9jb3VudGVyKGh3YywgaWR4KTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7Cit9CisKK3N0YXRpYyBfX3JlYWRfbW9zdGx5IHN0cnVjdCBub3RpZmllcl9ibG9jayBwZXJmX2NvdW50ZXJfbm1pX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsCQk9IHBlcmZfY291bnRlcl9ubWlfaGFuZGxlciwKK307CisKK3N0YXRpYyBib29sIF9faW5pdCBzdXBwb3J0ZWRfcG11KHZvaWQpCit7CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTNpIikpIHsKKwkJc3BhcmNfcG11ID0gJnVsdHJhM2lfcG11OworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJuaWFnYXJhMiIpKSB7CisJCXNwYXJjX3BtdSA9ICZuaWFnYXJhMl9wbXU7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgX19pbml0IGluaXRfaHdfcGVyZl9jb3VudGVycyh2b2lkKQoreworCXByX2luZm8oIlBlcmZvcm1hbmNlIGNvdW50ZXJzOiAiKTsKKworCWlmICghc3VwcG9ydGVkX3BtdSgpKSB7CisJCXByX2NvbnQoIk5vIHN1cHBvcnQgZm9yIFBNVSB0eXBlICclcydcbiIsIHNwYXJjX3BtdV90eXBlKTsKKwkJcmV0dXJuOworCX0KKworCXByX2NvbnQoIlN1cHBvcnRlZCBQTVUgdHlwZSBpcyAnJXMnXG4iLCBzcGFyY19wbXVfdHlwZSk7CisKKwkvKiBBbGwgc3BhcmM2NCBQTVVzIGN1cnJlbnRseSBoYXZlIDIgY291bnRlcnMuICBCdXQgdGhpcyBzaW1wbGUKKwkgKiBkcml2ZXIgb25seSBzdXBwb3J0cyBvbmUgYWN0aXZlIGNvdW50ZXIgYXQgYSB0aW1lLgorCSAqLworCXBlcmZfbWF4X2NvdW50ZXJzID0gMTsKKworCXJlZ2lzdGVyX2RpZV9ub3RpZmllcigmcGVyZl9jb3VudGVyX25taV9ub3RpZmllcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tXzMyLmMKaW5kZXggZmU0M2U4MC4uMGEzN2U4YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21fMzIuYwpAQCAtMjQsNiArMjQsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vb3BsaWIuaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgorI2luY2x1ZGUgPGFzbS9sZW9uX2FtYmEuaD4KIAogI2luY2x1ZGUgInByb20uaCIKIApAQCAtMTMxLDYgKzEzMywzNSBAQAogCQlyZWdzLT53aGljaF9pbywgcmVncy0+cGh5c19hZGRyKTsKIH0KIAorLyogIm5hbWU6dmVuZG9yOmRldmljZUBpcnEsYWRkcmxvIiAqLworc3RhdGljIHZvaWQgX19pbml0IGFtYmFwcF9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQoreworCXN0cnVjdCBhbWJhX3Byb21fcmVnaXN0ZXJzICpyZWdzOyB1bnNpZ25lZCBpbnQgKmludHI7CisJdW5zaWduZWQgaW50ICpkZXZpY2UsICp2ZW5kb3I7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKwlyZWdzID0gcHJvcC0+dmFsdWU7CisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJpbnRlcnJ1cHRzIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJaW50ciA9IHByb3AtPnZhbHVlOworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRwLCAidmVuZG9yIiwgTlVMTCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisJdmVuZG9yID0gcHJvcC0+dmFsdWU7CisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZHAsICJkZXZpY2UiLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKwlkZXZpY2UgPSBwcm9wLT52YWx1ZTsKKworCXNwcmludGYodG1wX2J1ZiwgIiVzOiVkOiVkQCV4LCV4IiwKKwkJZHAtPm5hbWUsICp2ZW5kb3IsICpkZXZpY2UsCisJCSppbnRyLCByZWdzLT5waHlzX2FkZHIpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgX19idWlsZF9wYXRoX2NvbXBvbmVudChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwLCBjaGFyICp0bXBfYnVmKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gZHAtPnBhcmVudDsKQEAgLTE0Myw2ICsxNzQsOCBAQAogCQkJcmV0dXJuIHNidXNfcGF0aF9jb21wb25lbnQoZHAsIHRtcF9idWYpOwogCQlpZiAoIXN0cmNtcChwYXJlbnQtPnR5cGUsICJlYnVzIikpCiAJCQlyZXR1cm4gZWJ1c19wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7CisJCWlmICghc3RyY21wKHBhcmVudC0+dHlwZSwgImFtYmFwcCIpKQorCQkJcmV0dXJuIGFtYmFwcF9wYXRoX2NvbXBvbmVudChkcCwgdG1wX2J1Zik7CiAKIAkJLyogImlzYSIgaXMgaGFuZGxlZCB3aXRoIHBsYXRmb3JtIG5hbWluZyAqLwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCmluZGV4IDBmYjU3ODkuLjEzODkxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwpAQCAtMjIsOSArMjIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL29wbGliLmg+CisjaW5jbHVkZSA8YXNtL2xlb24uaD4KIAogI2luY2x1ZGUgInByb20uaCIKIAordm9pZCAoKnByb21fYnVpbGRfbW9yZSkoc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IGRldmljZV9ub2RlICoqKm5leHRwKTsKKwogc3RydWN0IGRldmljZV9ub2RlICpvZl9jb25zb2xlX2RldmljZTsKIEVYUE9SVF9TWU1CT0wob2ZfY29uc29sZV9kZXZpY2UpOwogCkBAIC0xNjEsNyArMTY0LDcgQEAKIAkJCW5hbWUgPSBwcm9tX25leHRwcm9wKG5vZGUsIHByZXYsIHAtPm5hbWUpOwogCQl9CiAKLQkJaWYgKHN0cmxlbihuYW1lKSA9PSAwKSB7CisJCWlmICghbmFtZSB8fCBzdHJsZW4obmFtZSkgPT0gMCkgewogCQkJdG1wID0gcDsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yNDIsNyArMjQ1LDcgQEAKIAlyZXR1cm4gZHA7CiB9CiAKLXN0YXRpYyBjaGFyICogX19pbml0IGJ1aWxkX2Z1bGxfbmFtZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQorY2hhciAqIF9faW5pdCBidWlsZF9mdWxsX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKIAlpbnQgbGVuLCBvdXJsZW4sIHBsZW47CiAJY2hhciAqbjsKQEAgLTI4OSw2ICsyOTIsOSBAQAogCiAJCWRwLT5jaGlsZCA9IHByb21fYnVpbGRfdHJlZShkcCwgcHJvbV9nZXRjaGlsZChub2RlKSwgbmV4dHApOwogCisJCWlmIChwcm9tX2J1aWxkX21vcmUpCisJCQlwcm9tX2J1aWxkX21vcmUoZHAsIG5leHRwKTsKKwogCQlub2RlID0gcHJvbV9nZXRzaWJsaW5nKG5vZGUpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggOTk4Y2FkYi4uMTZhNDdmZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0yMzUsNiArMjM1LDggQEAKIAkJc3BhcmNfY3B1X21vZGVsID0gc3VuNGU7CiAJaWYgKCFzdHJjbXAoJmNwdXR5cHZhbCwic3VuNHUiKSkKIAkJc3BhcmNfY3B1X21vZGVsID0gc3VuNHU7CisJaWYgKCFzdHJuY21wKCZjcHV0eXB2YWwsICJsZW9uIiAsIDQpKQorCQlzcGFyY19jcHVfbW9kZWwgPSBzcGFyY19sZW9uOwogCiAJcHJpbnRrKCJBUkNIOiAiKTsKIAlzd2l0Y2goc3BhcmNfY3B1X21vZGVsKSB7CkBAIC0yNTYsNiArMjU4LDkgQEAKIAljYXNlIHN1bjR1OgogCQlwcmludGsoIlNVTjRVXG4iKTsKIAkJYnJlYWs7CisJY2FzZSBzcGFyY19sZW9uOgorCQlwcmludGsoIkxFT05cbiIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoIlVOS05PV04hXG4iKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXMzMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzMzIuUwppbmRleCBhZWQ5NDg2Li5lNzA2MTEzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXMzMi5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5czMyLlMKQEAgLTEyMSw3ICsxMjEsNyBAQAogU0lHTjEoc3lzMzJfdW1hc2ssIHN5c191bWFzaywgJW8wKQogU0lHTjMoc3lzMzJfdGdraWxsLCBzeXNfdGdraWxsLCAlbzAsICVvMSwgJW8yKQogU0lHTjEoc3lzMzJfc2VuZHRvLCBzeXNfc2VuZHRvLCAlbzApCi1TSUdOMShzeXMzMl9yZWN2ZnJvbSwgc3lzX3JlY3Zmcm9tLCAlbzApCitTSUdOMShzeXMzMl9yZWN2ZnJvbSwgY29tcGF0X3N5c19yZWN2ZnJvbSwgJW8wKQogU0lHTjMoc3lzMzJfc29ja2V0LCBzeXNfc29ja2V0LCAlbzAsICVvMSwgJW8yKQogU0lHTjIoc3lzMzJfY29ubmVjdCwgc3lzX2Nvbm5lY3QsICVvMCwgJW8yKQogU0lHTjIoc3lzMzJfYmluZCwgc3lzX2JpbmQsICVvMCwgJW8yKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c2ZzLmMKaW5kZXggZDI4ZjQ5Ni4uY2EzOWM2MCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNmcy5jCkBAIC0yLDYgKzIsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNyBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CiAgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc18zMi5TCmluZGV4IDY5MDkwMTYuLjA0MTgxNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzMyLlMKQEAgLTgyLDUgKzgyLDUgQEAKIC8qMzEwKi8JLmxvbmcgc3lzX3V0aW1lbnNhdCwgc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBzeXNfZmFsbG9jYXRlCiAvKjMxNSovCS5sb25nIHN5c190aW1lcmZkX3NldHRpbWUsIHN5c190aW1lcmZkX2dldHRpbWUsIHN5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLmxvbmcgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBzeXNfcHJlYWR2Ci0vKjMyNSovCS5sb25nIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KKy8qMzI1Ki8JLmxvbmcgc3lzX3B3cml0ZXYsIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfY291bnRlcl9vcGVuCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwppbmRleCAyZWU3MjUwLi45MWIwNmI3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCkBAIC04Myw3ICs4Myw3IEBACiAvKjMxMCovCS53b3JkIGNvbXBhdF9zeXNfdXRpbWVuc2F0LCBjb21wYXRfc3lzX3NpZ25hbGZkLCBzeXNfdGltZXJmZF9jcmVhdGUsIHN5c19ldmVudGZkLCBjb21wYXRfc3lzX2ZhbGxvY2F0ZQogCS53b3JkIGNvbXBhdF9zeXNfdGltZXJmZF9zZXR0aW1lLCBjb21wYXRfc3lzX3RpbWVyZmRfZ2V0dGltZSwgY29tcGF0X3N5c19zaWduYWxmZDQsIHN5c19ldmVudGZkMiwgc3lzX2Vwb2xsX2NyZWF0ZTEKIC8qMzIwKi8JLndvcmQgc3lzX2R1cDMsIHN5c19waXBlMiwgc3lzX2lub3RpZnlfaW5pdDEsIHN5c19hY2NlcHQ0LCBjb21wYXRfc3lzX3ByZWFkdgotCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbworCS53b3JkIGNvbXBhdF9zeXNfcHdyaXRldiwgY29tcGF0X3N5c19ydF90Z3NpZ3F1ZXVlaW5mbywgc3lzX3BlcmZfY291bnRlcl9vcGVuCiAKICNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCiAKQEAgLTE1OCw0ICsxNTgsNCBAQAogLyozMTAqLwkud29yZCBzeXNfdXRpbWVuc2F0LCBzeXNfc2lnbmFsZmQsIHN5c190aW1lcmZkX2NyZWF0ZSwgc3lzX2V2ZW50ZmQsIHN5c19mYWxsb2NhdGUKIAkud29yZCBzeXNfdGltZXJmZF9zZXR0aW1lLCBzeXNfdGltZXJmZF9nZXR0aW1lLCBzeXNfc2lnbmFsZmQ0LCBzeXNfZXZlbnRmZDIsIHN5c19lcG9sbF9jcmVhdGUxCiAvKjMyMCovCS53b3JkIHN5c19kdXAzLCBzeXNfcGlwZTIsIHN5c19pbm90aWZ5X2luaXQxLCBzeXNfYWNjZXB0NCwgc3lzX3ByZWFkdgotCS53b3JkIHN5c19wd3JpdGV2LCBzeXNfcnRfdGdzaWdxdWV1ZWluZm8KKwkud29yZCBzeXNfcHdyaXRldiwgc3lzX3J0X3Rnc2lncXVldWVpbmZvLCBzeXNfcGVyZl9jb3VudGVyX29wZW4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vTWFrZWZpbGUgYi9hcmNoL3NwYXJjL21tL01ha2VmaWxlCmluZGV4IDY4MWFiZTAuLjc5ODM2YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9tbS9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogb2JqLXkgICAgICAgICAgICAgICAgICAgKz0gZ2VuZXJpY18kKEJJVFMpLm8KIG9iai0kKENPTkZJR19TUEFSQzMyKSAgICs9IGV4dGFibGUubyBidGZpeHVwLm8gc3JtbXUubyBpb21tdS5vIGlvLXVuaXQubwogb2JqLSQoQ09ORklHX1NQQVJDMzIpICAgKz0gaHlwZXJzcGFyYy5vIHZpa2luZy5vIHRzdW5hbWkubyBzd2lmdC5vCitvYmotJChDT05GSUdfU1BBUkNfTEVPTikrPSBsZW9uX21tLm8KIAogIyBPbmx5IHVzZWQgYnkgc3BhcmM2NAogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkgKz0gaHVnZXRsYnBhZ2UubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMgYi9hcmNoL3NwYXJjL21tL2luaXRfMzIuYwppbmRleCAyNmJiMzkxLi41NDExNGFkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfMzIuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CS8qIGJ1ZyBpbiBhc20tZ2VuZXJpYy90bGIuaDogY2hlY2tfcGd0X2NhY2hlICovCiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL2xlb24uaD4KIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIApAQCAtMzI2LDYgKzMyNyw5IEBACiAJCXNwYXJjX3VubWFwcGVkX2Jhc2UgPSAweGUwMDAwMDAwOwogCQlCVEZJWFVQU0VUX1NFVEhJKHNwYXJjX3VubWFwcGVkX2Jhc2UsIDB4ZTAwMDAwMDApOwogCQlicmVhazsKKwljYXNlIHNwYXJjX2xlb246CisJCWxlb25faW5pdCgpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIHN1bjRtOgogCWNhc2Ugc3VuNGQ6CiAJCXNybW11X3BhZ2luZ19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2xlb25fbW0uYyBiL2FyY2gvc3BhcmMvbW0vbGVvbl9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZTAxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NwYXJjL21tL2xlb25fbW0uYwpAQCAtMCwwICsxLDI2MCBAQAorLyoKKyAqICBsaW51eC9hcmNoL3NwYXJjL21tL2xlb25fbS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEtvbnJhZCBFaXNlbGUgKGVpc2VsZWtkQHdlYi5kZSwga29ucmFkQGdhaXNsZXIuY29tKSBHYWlzbGVyIFJlc2VhcmNoCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGFuaWVsIEhlbGxzdHJvbSAoZGFuaWVsQGdhaXNsZXIuY29tKSBBZXJvZmxleCBHYWlzbGVyIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS29ucmFkIEVpc2VsZSAoa29ucmFkQGdhaXNsZXIuY29tKSBBZXJvZmxleCBHYWlzbGVyIEFCCisgKgorICogZG8gc3JtbXUgcHJvYmUgaW4gc29mdHdhcmUKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKK2ludCBsZW9uX2ZsdXNoX2R1cmluZ19zd2l0Y2ggPSAxOworaW50IHNybW11X3N3cHJvYmVfdHJhY2U7CisKK3Vuc2lnbmVkIGxvbmcgc3JtbXVfc3dwcm9iZSh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nICpwYWRkcikKK3sKKworCXVuc2lnbmVkIGludCBjdHh0Ymw7CisJdW5zaWduZWQgaW50IHBnZCwgcG1kLCBwZWQ7CisJdW5zaWduZWQgaW50IHB0cjsKKwl1bnNpZ25lZCBpbnQgbHZsLCBwdGUsIHBhZGRyYmFzZTsKKwl1bnNpZ25lZCBpbnQgY3R4OworCXVuc2lnbmVkIGludCBwYWRkcl9jYWxjOworCisJcGFkZHJiYXNlID0gMDsKKworCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiB0cmFjZSBvblxuIik7CisKKwljdHh0YmwgPSBzcm1tdV9nZXRfY3RhYmxlX3B0cigpOworCWlmICghKGN0eHRibCkpIHsKKwkJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiBzcm1tdV9nZXRfY3RhYmxlX3B0ciByZXR1cm5lZCAwPT4wXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghX3Bmbl92YWxpZChQRk4oY3R4dGJsKSkpIHsKKwkJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgInN3cHJvYmU6ICFfcGZuX3ZhbGlkKCV4KT0+MFxuIiwKKwkJCSAgICAgICBQRk4oY3R4dGJsKSk7CisJCXJldHVybiAwOworCX0KKworCWN0eCA9IHNybW11X2dldF9jb250ZXh0KCk7CisJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6ICAtLS0gY3R4ICgleCkgLS0tXG4iLCBjdHgpOworCisJcGdkID0gTEVPTl9CWVBBU1NfTE9BRF9QQShjdHh0YmwgKyAoY3R4ICogNCkpOworCisJaWYgKCgocGdkICYgU1JNTVVfRVRfTUFTSykgPT0gU1JNTVVfRVRfUFRFKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHBnZCBpcyBlbnRyeSBsZXZlbCAzXG4iKTsKKwkJbHZsID0gMzsKKwkJcHRlID0gcGdkOworCQlwYWRkcmJhc2UgPSBwZ2QgJiBfU1JNTVVfUFRFX1BNQVNLX0xFT047CisJCWdvdG8gcmVhZHk7CisJfQorCWlmICgoKHBnZCAmIFNSTU1VX0VUX01BU0spICE9IFNSTU1VX0VUX1BURCkpIHsKKwkJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiBwZ2QgaXMgaW52YWxpZCA9PiAwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6ICAtLS0gcGdkICgleCkgLS0tXG4iLCBwZ2QpOworCisJcHRyID0gKHBnZCAmIFNSTU1VX1BURF9QTUFTSykgPDwgNDsKKwlwdHIgKz0gKCgoKHZhZGRyKSA+PiBMRU9OX1BHRF9TSCkgJiBMRU9OX1BHRF9NKSAqIDQpOworCWlmICghX3Bmbl92YWxpZChQRk4ocHRyKSkpCisJCXJldHVybiAwOworCisJcG1kID0gTEVPTl9CWVBBU1NfTE9BRF9QQShwdHIpOworCWlmICgoKHBtZCAmIFNSTU1VX0VUX01BU0spID09IFNSTU1VX0VUX1BURSkpIHsKKwkJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiBwbWQgaXMgZW50cnkgbGV2ZWwgMlxuIik7CisJCWx2bCA9IDI7CisJCXB0ZSA9IHBtZDsKKwkJcGFkZHJiYXNlID0gcG1kICYgX1NSTU1VX1BURV9QTUFTS19MRU9OOworCQlnb3RvIHJlYWR5OworCX0KKwlpZiAoKChwbWQgJiBTUk1NVV9FVF9NQVNLKSAhPSBTUk1NVV9FVF9QVEQpKSB7CisJCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogcG1kIGlzIGludmFsaWQgPT4gMFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiAgLS0tIHBtZCAoJXgpIC0tLVxuIiwgcG1kKTsKKworCXB0ciA9IChwbWQgJiBTUk1NVV9QVERfUE1BU0spIDw8IDQ7CisJcHRyICs9ICgoKHZhZGRyID4+IExFT05fUE1EX1NIKSAmIExFT05fUE1EX00pICogNCk7CisJaWYgKCFfcGZuX3ZhbGlkKFBGTihwdHIpKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6ICFfcGZuX3ZhbGlkKCV4KT0+MFxuIiwKKwkJCSAgICAgICBQRk4ocHRyKSk7CisJCXJldHVybiAwOworCX0KKworCXBlZCA9IExFT05fQllQQVNTX0xPQURfUEEocHRyKTsKKworCWlmICgoKHBlZCAmIFNSTU1VX0VUX01BU0spID09IFNSTU1VX0VUX1BURSkpIHsKKwkJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiBwZWQgaXMgZW50cnkgbGV2ZWwgMVxuIik7CisJCWx2bCA9IDE7CisJCXB0ZSA9IHBlZDsKKwkJcGFkZHJiYXNlID0gcGVkICYgX1NSTU1VX1BURV9QTUFTS19MRU9OOworCQlnb3RvIHJlYWR5OworCX0KKwlpZiAoKChwZWQgJiBTUk1NVV9FVF9NQVNLKSAhPSBTUk1NVV9FVF9QVEQpKSB7CisJCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAic3dwcm9iZTogcGVkIGlzIGludmFsaWQgPT4gMFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiAgLS0tIHBlZCAoJXgpIC0tLVxuIiwgcGVkKTsKKworCXB0ciA9IChwZWQgJiBTUk1NVV9QVERfUE1BU0spIDw8IDQ7CisJcHRyICs9ICgoKHZhZGRyID4+IExFT05fUFRFX1NIKSAmIExFT05fUFRFX00pICogNCk7CisJaWYgKCFfcGZuX3ZhbGlkKFBGTihwdHIpKSkKKwkJcmV0dXJuIDA7CisKKwlwdHIgPSBMRU9OX0JZUEFTU19MT0FEX1BBKHB0cik7CisJaWYgKCgocHRyICYgU1JNTVVfRVRfTUFTSykgPT0gU1JNTVVfRVRfUFRFKSkgeworCQlpZiAoc3JtbXVfc3dwcm9iZV90cmFjZSkKKwkJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHB0ciBpcyBlbnRyeSBsZXZlbCAwXG4iKTsKKwkJbHZsID0gMDsKKwkJcHRlID0gcHRyOworCQlwYWRkcmJhc2UgPSBwdHIgJiBfU1JNTVVfUFRFX1BNQVNLX0xFT047CisJCWdvdG8gcmVhZHk7CisJfQorCWlmIChzcm1tdV9zd3Byb2JlX3RyYWNlKQorCQlwcmludGsoS0VSTl9JTkZPICJzd3Byb2JlOiBwdHIgaXMgaW52YWxpZCA9PiAwXG4iKTsKKwlyZXR1cm4gMDsKKworcmVhZHk6CisJc3dpdGNoIChsdmwpIHsKKwljYXNlIDA6CisJCXBhZGRyX2NhbGMgPQorCQkgICAgKHZhZGRyICYgfigtMSA8PCBMRU9OX1BURV9TSCkpIHwgKChwdGUgJiB+MHhmZikgPDwgNCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcGFkZHJfY2FsYyA9CisJCSAgICAodmFkZHIgJiB+KC0xIDw8IExFT05fUE1EX1NIKSkgfCAoKHB0ZSAmIH4weGZmKSA8PCA0KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwYWRkcl9jYWxjID0KKwkJICAgICh2YWRkciAmIH4oLTEgPDwgTEVPTl9QR0RfU0gpKSB8ICgocHRlICYgfjB4ZmYpIDw8IDQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgMzoKKwkJcGFkZHJfY2FsYyA9IHZhZGRyOworCQlicmVhazsKKwl9CisJaWYgKHNybW11X3N3cHJvYmVfdHJhY2UpCisJCXByaW50ayhLRVJOX0lORk8gInN3cHJvYmU6IHBhZGRlICV4XG4iLCBwYWRkcl9jYWxjKTsKKwlpZiAocGFkZHIpCisJCSpwYWRkciA9IHBhZGRyX2NhbGM7CisJcmV0dXJuIHBhZGRyYmFzZTsKK30KKwordm9pZCBsZW9uX2ZsdXNoX2ljYWNoZV9hbGwodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIGZsdXNoICIpOwkvKmlmbHVzaCovCit9CisKK3ZvaWQgbGVvbl9mbHVzaF9kY2FjaGVfYWxsKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YSAlJWcwLCBbJSVnMF0gJTBcblx0IiA6IDoKKwkJCSAgICAgImkiKEFTSV9MRU9OX0RGTFVTSCkgOiAibWVtb3J5Iik7Cit9CisKK3ZvaWQgbGVvbl9mbHVzaF9wY2FjaGVfYWxsKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpCit7CisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQorCQlsZW9uX2ZsdXNoX2ljYWNoZV9hbGwoKTsKKwlsZW9uX2ZsdXNoX2RjYWNoZV9hbGwoKTsKK30KKwordm9pZCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKCIgZmx1c2ggIik7CS8qaWZsdXNoKi8KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RhICUlZzAsIFslJWcwXSAlMFxuXHQiIDogOgorCQkJICAgICAiaSIoQVNJX0xFT05fREZMVVNIKSA6ICJtZW1vcnkiKTsKK30KKwordm9pZCBsZW9uX2ZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKwlsZW9uX2ZsdXNoX2NhY2hlX2FsbCgpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGEgJSVnMCwgWyUwXSAlMVxuXHQiIDogOiAiciIoMHg0MDApLAorCQkJICAgICAiaSIoQVNJX0xFT05fTU1VRkxVU0gpIDogIm1lbW9yeSIpOworfQorCisvKiBnZXQgYWxsIGNhY2hlIHJlZ3MgKi8KK3ZvaWQgbGVvbjNfZ2V0Q2FjaGVSZWdzKHN0cnVjdCBsZW9uM19jYWNoZXJlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBjY3IsIGljY3IsIGRjY3I7CisKKwlpZiAoIXJlZ3MpCisJCXJldHVybjsKKwkvKiBHZXQgQ2FjaGUgcmVncyBmcm9tICJDYWNoZSBBU0kiIGFkZHJlc3MgMHgwLCAweDggYW5kIDB4QyAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZGEgWyUlZzBdICUzLCAlMFxuXHQiCisJCQkgICAgICJtb3YgMHgwOCwgJSVnMVxuXHQiCisJCQkgICAgICJsZGEgWyUlZzFdICUzLCAlMVxuXHQiCisJCQkgICAgICJtb3YgMHgwYywgJSVnMVxuXHQiCisJCQkgICAgICJsZGEgWyUlZzFdICUzLCAlMlxuXHQiCisJCQkgICAgIDogIj1yIihjY3IpLCAiPXIiKGljY3IpLCAiPXIiKGRjY3IpCisJCQkgICAgICAgLyogb3V0cHV0ICovCisJCQkgICAgIDogImkiKEFTSV9MRU9OX0NBQ0hFUkVHUykJLyogaW5wdXQgKi8KKwkJCSAgICAgOiAiZzEiCS8qIGNsb2JiZXIgbGlzdCAqLworCSAgICApOworCXJlZ3MtPmNjciA9IGNjcjsKKwlyZWdzLT5pY2NyID0gaWNjcjsKKwlyZWdzLT5kY2NyID0gZGNjcjsKK30KKworLyogRHVlIHRvIHZpcnR1YWwgY2FjaGUgd2UgbmVlZCB0byBjaGVjayBjYWNoZSBjb25maWd1cmF0aW9uIGlmCisgKiBpdCBpcyBwb3NzaWJsZSB0byBza2lwIGZsdXNoaW5nIGluIHNvbWUgY2FzZXMuCisgKgorICogTGVvbjIgYW5kIExlb24zIGRpZmZlciBpbiB0aGVpciB3YXkgb2YgdGVsbGluZyBjYWNoZSBpbmZvcm1hdGlvbgorICoKKyAqLworaW50IGxlb25fZmx1c2hfbmVlZGVkKHZvaWQpCit7CisJaW50IGZsdXNoX25lZWRlZCA9IC0xOworCXVuc2lnbmVkIGludCBzc2l6ZSwgc2V0czsKKwljaGFyICpzZXRTdHJbNF0gPQorCSAgICB7ICJkaXJlY3QgbWFwcGVkIiwgIjItd2F5IGFzc29jaWF0aXZlIiwgIjMtd2F5IGFzc29jaWF0aXZlIiwKKwkJIjQtd2F5IGFzc29jaWF0aXZlIgorCX07CisJLyogbGVvbiAzICovCisJc3RydWN0IGxlb24zX2NhY2hlcmVncyBjcmVnczsKKwlsZW9uM19nZXRDYWNoZVJlZ3MoJmNyZWdzKTsKKwlzZXRzID0gKGNyZWdzLmRjY3IgJiBMRU9OM19YQ0NSX1NFVFNfTUFTSykgPj4gMjQ7CisJLyogKHNzaXplPT5yZWFsc2l6ZSkgMD0+MWssIDE9PjJrLCAyPT40aywgMz0+OGsgLi4uICovCisJc3NpemUgPSAxIDw8ICgoY3JlZ3MuZGNjciAmIExFT04zX1hDQ1JfU1NJWkVfTUFTSykgPj4gMjApOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ0FDSEU6ICVzIGNhY2hlLCBzZXQgc2l6ZSAlZGtcbiIsCisJICAgICAgIHNldHMgPiAzID8gInVua25vd24iIDogc2V0U3RyW3NldHNdLCBzc2l6ZSk7CisJaWYgKChzc2l6ZSA8PSAoUEFHRV9TSVpFIC8gMTAyNCkpICYmIChzZXRzID09IDApKSB7CisJCS8qIFNldCBTaXplIDw9IFBhZ2Ugc2l6ZSAgPT0+CisJCSAgIGZsdXNoIG9uIGV2ZXJ5IGNvbnRleHQgc3dpdGNoIG5vdCBuZWVkZWQuICovCisJCWZsdXNoX25lZWRlZCA9IDA7CisJCXByaW50ayhLRVJOX0lORk8gIkNBQ0hFOiBub3QgZmx1c2hpbmcgb24gZXZlcnkgY29udGV4dCBzd2l0Y2hcbiIpOworCX0KKwlyZXR1cm4gZmx1c2hfbmVlZGVkOworfQorCit2b2lkIGxlb25fc3dpdGNoX21tKHZvaWQpCit7CisJZmx1c2hfdGxiX21tKCh2b2lkICopMCk7CisJaWYgKGxlb25fZmx1c2hfZHVyaW5nX3N3aXRjaCkKKwkJbGVvbl9mbHVzaF9jYWNoZV9hbGwoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vbG9hZG1tdS5jIGIvYXJjaC9zcGFyYy9tbS9sb2FkbW11LmMKaW5kZXggNjUyYmUwNS4uODJlYzhmNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9sb2FkbW11LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9sb2FkbW11LmMKQEAgLTMzLDYgKzMzLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBzdW40bToKIAljYXNlIHN1bjRkOgorCWNhc2Ugc3BhcmNfbGVvbjoKIAkJbGRfbW11X3NybW11KCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggYWRlNGViMy4uNTA5YjFmZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS90c3VuYW1pLmg+CiAjaW5jbHVkZSA8YXNtL3N3aWZ0Lmg+CiAjaW5jbHVkZSA8YXNtL3R1cmJvc3BhcmMuaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgogCiAjaW5jbHVkZSA8YXNtL2J0Zml4dXAuaD4KIApAQCAtNTY5LDYgKzU3MCw5IEBACiAJCXNybW11X2N0eGRfc2V0KCZzcm1tdV9jb250ZXh0X3RhYmxlW21tLT5jb250ZXh0XSwgbW0tPnBnZCk7CiAJfQogCisJaWYgKHNwYXJjX2NwdV9tb2RlbCA9PSBzcGFyY19sZW9uKQorCQlsZW9uX3N3aXRjaF9tbSgpOworCiAJaWYgKGlzX2h5cGVyc3BhcmMpCiAJCWh5cGVyX2ZsdXNoX3dob2xlX2ljYWNoZSgpOwogCkBAIC0xOTc3LDYgKzE5ODEsNDUgQEAKIAlwb2tlX3NybW11ID0gcG9rZV92aWtpbmc7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1BBUkNfTEVPTgorCit2b2lkIF9faW5pdCBwb2tlX2xlb25zcGFyYyh2b2lkKQoreworfQorCit2b2lkIF9faW5pdCBpbml0X2xlb24odm9pZCkKK3sKKworCXNybW11X25hbWUgPSAiTGVvbiI7CisKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfY2FjaGVfYWxsLCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCwKKwkJCUJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChmbHVzaF9jYWNoZV9tbSwgbGVvbl9mbHVzaF9jYWNoZV9hbGwsCisJCQlCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfY2FjaGVfcGFnZSwgbGVvbl9mbHVzaF9wY2FjaGVfYWxsLAorCQkJQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX2NhY2hlX3JhbmdlLCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCwKKwkJCUJURklYVVBDQUxMX05PUk0pOworCUJURklYVVBTRVRfQ0FMTChmbHVzaF9wYWdlX2Zvcl9kbWEsIGxlb25fZmx1c2hfZGNhY2hlX2FsbCwKKwkJCUJURklYVVBDQUxMX05PUk0pOworCisJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX3RsYl9hbGwsIGxlb25fZmx1c2hfdGxiX2FsbCwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX3RsYl9tbSwgbGVvbl9mbHVzaF90bGJfYWxsLCBCVEZJWFVQQ0FMTF9OT1JNKTsKKwlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfdGxiX3BhZ2UsIGxlb25fZmx1c2hfdGxiX2FsbCwgQlRGSVhVUENBTExfTk9STSk7CisJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX3RsYl9yYW5nZSwgbGVvbl9mbHVzaF90bGJfYWxsLCBCVEZJWFVQQ0FMTF9OT1JNKTsKKworCUJURklYVVBTRVRfQ0FMTChfX2ZsdXNoX3BhZ2VfdG9fcmFtLCBsZW9uX2ZsdXNoX2NhY2hlX2FsbCwKKwkJCUJURklYVVBDQUxMX05PUCk7CisJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX3NpZ19pbnNucywgbGVvbl9mbHVzaF9jYWNoZV9hbGwsIEJURklYVVBDQUxMX05PUCk7CisKKwlwb2tlX3NybW11ID0gcG9rZV9sZW9uc3BhcmM7CisKKwlzcm1tdV9jYWNoZV9wYWdldGFibGVzID0gMDsKKworCWxlb25fZmx1c2hfZHVyaW5nX3N3aXRjaCA9IGxlb25fZmx1c2hfbmVlZGVkKCk7Cit9CisjZW5kaWYKKwogLyogUHJvYmUgZm9yIHRoZSBzcm1tdSBjaGlwIHZlcnNpb24uICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2V0X3NybW11X3R5cGUodm9pZCkKIHsKQEAgLTE5OTIsNyArMjAzNSwxNSBAQAogCXBzcl90eXAgPSAocHNyID4+IDI4KSAmIDB4ZjsKIAlwc3JfdmVycyA9IChwc3IgPj4gMjQpICYgMHhmOwogCi0JLyogRmlyc3QsIGNoZWNrIGZvciBIeXBlclNwYXJjIG9yIEN5cHJlc3MuICovCisJLyogRmlyc3QsIGNoZWNrIGZvciBzcGFyYy1sZW9uLiAqLworCWlmIChzcGFyY19jcHVfbW9kZWwgPT0gc3BhcmNfbGVvbikgeworCQlwc3JfdHlwID0gMHhmOwkvKiBoYXJkY29kZWQgaWRzIGZvciBvbGRlciBtb2RlbHMvc2ltdWxhdG9ycyAqLworCQlwc3JfdmVycyA9IDI7CisJCWluaXRfbGVvbigpOworCQlyZXR1cm47CisJfQorCisJLyogU2Vjb25kLCBjaGVjayBmb3IgSHlwZXJTcGFyYyBvciBDeXByZXNzLiAqLwogCWlmKG1vZF90eXAgPT0gMSkgewogCQlzd2l0Y2gobW9kX3JldikgewogCQljYXNlIDc6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL29wcm9maWxlL2luaXQuYyBiL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCmluZGV4IGQxNzJmODYuLmY5N2NiOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCisrKyBiL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCkBAIC0yMSw3ICsyMSw3IEBACiBzdGF0aWMgaW50IHByb2ZpbGVfdGltZXJfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSAoc3RydWN0IGRpZV9hcmdzICopZGF0YTsKKwlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBkYXRhOwogCWludCByZXQgPSBOT1RJRllfRE9ORTsKIAogCXN3aXRjaCAodmFsKSB7CkBAIC01Nyw3ICs1Nyw3IEBACiAKIHN0YXRpYyBpbnQgb3Bfbm1pX3RpbWVyX2luaXQoc3RydWN0IG9wcm9maWxlX29wZXJhdGlvbnMgKm9wcykKIHsKLQlpZiAoIW5taV91c2FibGUpCisJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW9wcy0+c3RhcnQgPSB0aW1lcl9zdGFydDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggM2I0NGI0Ny4uZjExNDgxMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgdW1sX25ldF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI4NSw3ICsyODUsNyBAQAogCXN0cmNweShpbmZvLT52ZXJzaW9uLCAiNDIiKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB1bWxfbmV0X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB1bWxfbmV0X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwk9IHVtbF9uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IDgxMzAzMzQuLjUyNzUxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0yNjIsNiArMjYyLDE1IEBACiAJICBmYW1pbHkgaW4gL3Byb2MvY3B1aW5mby4gTmV3ZXIgb25lcyBoYXZlIDYgYW5kIG9sZGVyIG9uZXMgMTUKIAkgIChub3QgYSB0eXBvKQogCitjb25maWcgTUFUT00KKwlib29sICJJbnRlbCBBdG9tIgorCS0tLWhlbHAtLS0KKworCSAgU2VsZWN0IHRoaXMgZm9yIHRoZSBJbnRlbCBBdG9tIHBsYXRmb3JtLiBJbnRlbCBBdG9tIENQVXMgaGF2ZSBhbgorCSAgaW4tb3JkZXIgcGlwZWxpbmluZyBhcmNoaXRlY3R1cmUgYW5kIHRodXMgY2FuIGJlbmVmaXQgZnJvbQorCSAgYWNjb3JkaW5nbHkgb3B0aW1pemVkIGNvZGUuIFVzZSBhIHJlY2VudCBHQ0Mgd2l0aCBzcGVjaWZpYyBBdG9tCisJICBzdXBwb3J0IGluIG9yZGVyIHRvIGZ1bGx5IGJlbmVmaXQgZnJvbSBzZWxlY3RpbmcgdGhpcyBvcHRpb24uCisKIGNvbmZpZyBHRU5FUklDX0NQVQogCWJvb2wgIkdlbmVyaWMteDg2LTY0IgogCWRlcGVuZHMgb24gWDg2XzY0CkBAIC0yOTUsNyArMzA0LDcgQEAKIGNvbmZpZyBYODZfTDFfQ0FDSEVfQllURVMKIAlpbnQKIAlkZWZhdWx0ICIxMjgiIGlmIE1QU0MKLQlkZWZhdWx0ICI2NCIgaWYgR0VORVJJQ19DUFUgfHwgTUs4IHx8IE1DT1JFMiB8fCBYODZfMzIKKwlkZWZhdWx0ICI2NCIgaWYgR0VORVJJQ19DUFUgfHwgTUs4IHx8IE1DT1JFMiB8fCBNQVRPTSB8fCBYODZfMzIKIAogY29uZmlnIFg4Nl9JTlRFUk5PREVfQ0FDSEVfQllURVMKIAlpbnQKQEAgLTMxMCw3ICszMTksNyBAQAogCWRlZmF1bHQgIjciIGlmIE1QRU5USVVNNCB8fCBNUFNDCiAJZGVmYXVsdCAiNCIgaWYgWDg2X0VMQU4gfHwgTTQ4NiB8fCBNMzg2IHx8IE1HRU9ERUdYMQogCWRlZmF1bHQgIjUiIGlmIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1JVU09FIHx8IE1FRkZJQ0VPTiB8fCBNQ1lSSVhJSUkgfHwgTUs2IHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNNTg2TU1YIHx8IE01ODZUU0MgfHwgTTU4NiB8fCBNVklBQzNfMiB8fCBNR0VPREVfTFgKLQlkZWZhdWx0ICI2IiBpZiBNSzcgfHwgTUs4IHx8IE1QRU5USVVNTSB8fCBNQ09SRTIgfHwgTVZJQUM3IHx8IFg4Nl9HRU5FUklDIHx8IEdFTkVSSUNfQ1BVCisJZGVmYXVsdCAiNiIgaWYgTUs3IHx8IE1LOCB8fCBNUEVOVElVTU0gfHwgTUNPUkUyIHx8IE1BVE9NIHx8IE1WSUFDNyB8fCBYODZfR0VORVJJQyB8fCBHRU5FUklDX0NQVQogCiBjb25maWcgWDg2X1hBREQKIAlkZWZfYm9vbCB5CkBAIC0zNTksNyArMzY4LDcgQEAKIAogY29uZmlnIFg4Nl9VU0VfUFBST19DSEVDS1NVTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTUVGRklDRU9OIHx8IE1HRU9ERV9MWCB8fCBNQ09SRTIKKwlkZXBlbmRzIG9uIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1lSSVhJSUkgfHwgTUs3IHx8IE1LNiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTUVGRklDRU9OIHx8IE1HRU9ERV9MWCB8fCBNQ09SRTIgfHwgTUFUT00KIAogY29uZmlnIFg4Nl9VU0VfM0ROT1cKIAlkZWZfYm9vbCB5CkBAIC0zODcsNyArMzk2LDcgQEAKIAogY29uZmlnIFg4Nl9UU0MKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAoKE1XSU5DSElQM0QgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNyB8fCBNSzYgfHwgTVBFTlRJVU00IHx8IE1QRU5USVVNTSB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE1LOCB8fCBNVklBQzNfMiB8fCBNVklBQzcgfHwgTUdFT0RFR1gxIHx8IE1HRU9ERV9MWCB8fCBNQ09SRTIpICYmICFYODZfTlVNQVEpIHx8IFg4Nl82NAorCWRlcGVuZHMgb24gKChNV0lOQ0hJUDNEIHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IE1DWVJJWElJSSB8fCBNSzcgfHwgTUs2IHx8IE1QRU5USVVNNCB8fCBNUEVOVElVTU0gfHwgTVBFTlRJVU1JSUkgfHwgTVBFTlRJVU1JSSB8fCBNNjg2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNSzggfHwgTVZJQUMzXzIgfHwgTVZJQUM3IHx8IE1HRU9ERUdYMSB8fCBNR0VPREVfTFggfHwgTUNPUkUyIHx8IE1BVE9NKSAmJiAhWDg2X05VTUFRKSB8fCBYODZfNjQKIAogY29uZmlnIFg4Nl9DTVBYQ0hHNjQKIAlkZWZfYm9vbCB5CkBAIC0zOTcsNyArNDA2LDcgQEAKICMgZ2VuZXJhdGVzIGNtb3YuCiBjb25maWcgWDg2X0NNT1YKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiAoTUs4IHx8IE1LNyB8fCBNQ09SRTIgfHwgTVBFTlRJVU00IHx8IE1QRU5USVVNTSB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTVZJQUMzXzIgfHwgTVZJQUM3IHx8IE1DUlVTT0UgfHwgTUVGRklDRU9OIHx8IFg4Nl82NCkKKwlkZXBlbmRzIG9uIChNSzggfHwgTUs3IHx8IE1DT1JFMiB8fCBNUEVOVElVTTQgfHwgTVBFTlRJVU1NIHx8IE1QRU5USVVNSUlJIHx8IE1QRU5USVVNSUkgfHwgTTY4NiB8fCBNVklBQzNfMiB8fCBNVklBQzcgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgWDg2XzY0IHx8IE1BVE9NKQogCiBjb25maWcgWDg2X01JTklNVU1fQ1BVX0ZBTUlMWQogCWludApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9NYWtlZmlsZQppbmRleCAxYjY4NjU5Li43OTgzYzQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9NYWtlZmlsZQpAQCAtMzIsOCArMzIsOCBAQAogCiAgICAgICAgICMgRGlzYWJsZSB1bml0LWF0LWEtdGltZSBtb2RlIG9uIHByZS1nY2MtNC4wIGNvbXBpbGVycywgaXQgbWFrZXMgZ2NjIHVzZQogICAgICAgICAjIGEgbG90IG1vcmUgc3RhY2sgZHVlIHRvIHRoZSBsYWNrIG9mIHNoYXJpbmcgb2Ygc3RhY2tsb3RzOgotICAgICAgICBLQlVJTERfQ0ZMQUdTICs9ICQoc2hlbGwgaWYgWyAkKGNhbGwgY2MtdmVyc2lvbikgLWx0IDA0MDAgXSA7IHRoZW4gXAotICAgICAgICAgICAgICAgIGVjaG8gJChjYWxsIGNjLW9wdGlvbiwtZm5vLXVuaXQtYXQtYS10aW1lKTsgZmkgOykKKyAgICAgICAgS0JVSUxEX0NGTEFHUyArPSAkKGNhbGwgY2MtaWZ2ZXJzaW9uLCAtbHQsIDA0MDAsIFwKKwkJCQkkKGNhbGwgY2Mtb3B0aW9uLC1mbm8tdW5pdC1hdC1hLXRpbWUpKQogCiAgICAgICAgICMgQ1BVLXNwZWNpZmljIHR1bmluZy4gQW55dGhpbmcgd2hpY2ggY2FuIGJlIHNoYXJlZCB3aXRoIFVNTCBzaG91bGQgZ28gaGVyZS4KICAgICAgICAgaW5jbHVkZSAkKHNyY3RyZWUpL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdQpAQCAtNTUsNiArNTUsOCBAQAogCiAgICAgICAgIGNmbGFncy0kKENPTkZJR19NQ09SRTIpICs9IFwKICAgICAgICAgICAgICAgICAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1jb3JlMiwkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1nZW5lcmljKSkKKwljZmxhZ3MtJChDT05GSUdfTUFUT00pICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWF0b20pIFwKKwkJJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9YXRvbSwkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1nZW5lcmljKSkKICAgICAgICAgY2ZsYWdzLSQoQ09ORklHX0dFTkVSSUNfQ1BVKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tdHVuZT1nZW5lcmljKQogICAgICAgICBLQlVJTERfQ0ZMQUdTICs9ICQoY2ZsYWdzLXkpCiAKQEAgLTcyLDcgKzc0LDcgQEAKIAogaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCiAJY2NfaGFzX3NwIDo9ICQoc3JjdHJlZSkvc2NyaXB0cy9nY2MteDg2XyQoQklUUyktaGFzLXN0YWNrLXByb3RlY3Rvci5zaAotICAgICAgICBpZmVxICgkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNjX2hhc19zcCkgJChDQykpLHkpCisgICAgICAgIGlmZXEgKCQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2NfaGFzX3NwKSAkKENDKSAkKGJpYXJjaCkpLHkpCiAgICAgICAgICAgICAgICAgc3RhY2twLXkgOj0gLWZzdGFjay1wcm90ZWN0b3IKICAgICAgICAgICAgICAgICBzdGFja3AtJChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfQUxMKSArPSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKICAgICAgICAgICAgICAgICBLQlVJTERfQ0ZMQUdTICs9ICQoc3RhY2twLXkpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUgYi9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUKaW5kZXggODAxNzdlYy4uMzBlOWEyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvTWFrZWZpbGVfMzIuY3B1CisrKyBiL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdQpAQCAtMzMsNiArMzMsOCBAQAogY2ZsYWdzLSQoQ09ORklHX01WSUFDM18yKQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1jMy0yLC1tYXJjaD1pNjg2KQogY2ZsYWdzLSQoQ09ORklHX01WSUFDNykJCSs9IC1tYXJjaD1pNjg2CiBjZmxhZ3MtJChDT05GSUdfTUNPUkUyKQkJKz0gLW1hcmNoPWk2ODYgJChjYWxsIHR1bmUsY29yZTIpCitjZmxhZ3MtJChDT05GSUdfTUFUT00pCQkrPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1hdG9tLCQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWNvcmUyLC1tYXJjaD1pNjg2KSkgXAorCSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWF0b20sJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9Z2VuZXJpYykpCiAKICMgQU1EIEVsYW4gc3VwcG9ydAogY2ZsYWdzLSQoQ09ORklHX1g4Nl9FTEFOKQkrPSAtbWFyY2g9aTQ4NgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby12ZXNhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwppbmRleCAyNzVkZDE3Li4xMWU4YzZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZlc2EuYwpAQCAtMzEsNyArMzEsNiBAQAogCiBzdGF0aWMgaW50IHZlc2FfcHJvYmUodm9pZCkKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WRVNBKSB8fCBkZWZpbmVkKENPTkZJR19GSVJNV0FSRV9FRElEKQogCXN0cnVjdCBiaW9zcmVncyBpcmVnLCBvcmVnOwogCXUxNiBtb2RlOwogCWFkZHJfdCBtb2RlX3B0cjsKQEAgLTQ5LDggKzQ4LDcgQEAKIAkgICAgdmdpbmZvLnNpZ25hdHVyZSAhPSBWRVNBX01BR0lDIHx8CiAJICAgIHZnaW5mby52ZXJzaW9uIDwgMHgwMTAyKQogCQlyZXR1cm4gMDsJLyogTm90IHByZXNlbnQgKi8KLSNlbmRpZiAvKiBDT05GSUdfVklERU9fVkVTQSB8fCBDT05GSUdfRklSTVdBUkVfRURJRCAqLwotI2lmZGVmIENPTkZJR19WSURFT19WRVNBCisKIAlzZXRfZnModmdpbmZvLnZpZGVvX21vZGVfcHRyLnNlZyk7CiAJbW9kZV9wdHIgPSB2Z2luZm8udmlkZW9fbW9kZV9wdHIub2ZmOwogCkBAIC0xMDIsOSArMTAwLDYgQEAKIAl9CiAKIAlyZXR1cm4gbm1vZGVzOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZiAvKiBDT05GSUdfVklERU9fVkVTQSAqLwogfQogCiBzdGF0aWMgaW50IHZlc2Ffc2V0X21vZGUoc3RydWN0IG1vZGVfaW5mbyAqbW9kZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCmluZGV4IDhmOGQ4MjcuLjgxOWNhYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKKysrIGIvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYwpAQCAtNDcsMTQgKzQ3LDYgQEAKIAogCWluaXRyZWdzKCZpcmVnKTsKIAotI2lmZGVmIENPTkZJR19WSURFT180MDBfSEFDSwotCWlmIChhZGFwdGVyID49IEFEQVBURVJfVkdBKSB7Ci0JCWlyZWcuYXggPSAweDEyMDI7Ci0JCWlyZWcuYnggPSAweDAwMzA7Ci0JCWludGNhbGwoMHgxMCwgJmlyZWcsIE5VTEwpOwotCX0KLSNlbmRpZgotCiAJYXggPSAweDBmMDA7CiAJaW50Y2FsbCgweDEwLCAmaXJlZywgJm9yZWcpOwogCW1vZGUgPSBvcmVnLmFsOwpAQCAtNjIsMTEgKzU0LDkgQEAKIAlzZXRfZnMoMCk7CiAJcm93cyA9IHJkZnM4KDB4NDg0KTsJLyogcm93cyBtaW51cyBvbmUgKi8KIAotI2lmbmRlZiBDT05GSUdfVklERU9fNDAwX0hBQ0sKIAlpZiAoKG9yZWcuYXggPT0gMHg1MDAzIHx8IG9yZWcuYXggPT0gMHg1MDA3KSAmJgogCSAgICAocm93cyA9PSAwIHx8IHJvd3MgPT0gMjQpKQogCQlyZXR1cm4gbW9kZTsKLSNlbmRpZgogCiAJaWYgKG1vZGUgIT0gMyAmJiBtb2RlICE9IDcpCiAJCW1vZGUgPSAzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby5jIGIvYXJjaC94ODYvYm9vdC92aWRlby5jCmluZGV4IGJhZDcyOGIuLmQ0MmRhMzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvdmlkZW8uYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmMKQEAgLTIyMSw3ICsyMjEsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19WSURFT19SRVRBSU4KIC8qIFNhdmUgc2NyZWVuIGNvbnRlbnQgdG8gdGhlIGhlYXAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2F2ZWRfc2NyZWVuIHsKIAlpbnQgeCwgeTsKQEAgLTI5OSwxMCArMjk4LDYgQEAKIAlpcmVnLmRsID0gc2F2ZWQuY3VyeDsKIAlpbnRjYWxsKDB4MTAsICZpcmVnLCBOVUxMKTsKIH0KLSNlbHNlCi0jZGVmaW5lIHNhdmVfc2NyZWVuKCkJCSgodm9pZCkwKQotI2RlZmluZSByZXN0b3JlX3NjcmVlbigpCSgodm9pZCkwKQotI2VuZGlmCiAKIHZvaWQgc2V0X3ZpZGVvKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ZpZGVvLmggYi9hcmNoL3g4Ni9ib290L3ZpZGVvLmgKaW5kZXggNWJiMTc0YS4uZmYzMzljNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby5oCisrKyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8uaApAQCAtMTcsMTkgKzE3LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLS8qIEVuYWJsZSBhdXRvZGV0ZWN0aW9uIG9mIFNWR0EgYWRhcHRlcnMgYW5kIG1vZGVzLiAqLwotI3VuZGVmIENPTkZJR19WSURFT19TVkdBCi0KLS8qIEVuYWJsZSBhdXRvZGV0ZWN0aW9uIG9mIFZFU0EgbW9kZXMgKi8KLSNkZWZpbmUgQ09ORklHX1ZJREVPX1ZFU0EKLQotLyogUmV0YWluIHNjcmVlbiBjb250ZW50cyB3aGVuIHN3aXRjaGluZyBtb2RlcyAqLwotI2RlZmluZSBDT05GSUdfVklERU9fUkVUQUlOCi0KLS8qIEZvcmNlIDQwMCBzY2FuIGxpbmVzIGZvciBzdGFuZGFyZCBtb2RlcyAoaGFjayB0byBmaXggYmFkIEJJT1MgYmVoYXZpb3VyICovCi0jdW5kZWYgQ09ORklHX1ZJREVPXzQwMF9IQUNLCi0KLS8qIFRoaXMgY29kZSB1c2VzIGFuIGV4dGVuZGVkIHNldCBvZiB2aWRlbyBtb2RlIG51bWJlcnMuIFRoZXNlIGluY2x1ZGU6CisvKgorICogVGhpcyBjb2RlIHVzZXMgYW4gZXh0ZW5kZWQgc2V0IG9mIHZpZGVvIG1vZGUgbnVtYmVycy4gVGhlc2UgaW5jbHVkZToKICAqIEFsaWFzZXMgZm9yIHN0YW5kYXJkIG1vZGVzCiAgKiAgICAgIE5PUk1BTF9WR0EgKC0xKQogICogICAgICBFWFRFTkRFRF9WR0EgKC0yKQpAQCAtNjcsMTMgKzU2LDggQEAKIC8qIFRoZSAicmVjYWxjdWxhdGUgdGltaW5ncyIgZmxhZyAqLwogI2RlZmluZSBWSURFT19SRUNBTEMgMHg4MDAwCiAKLS8qIERlZmluZSBET19TVE9SRSBhY2NvcmRpbmcgdG8gQ09ORklHX1ZJREVPX1JFVEFJTiAqLwotI2lmZGVmIENPTkZJR19WSURFT19SRVRBSU4KIHZvaWQgc3RvcmVfc2NyZWVuKHZvaWQpOwogI2RlZmluZSBET19TVE9SRSgpIHN0b3JlX3NjcmVlbigpCi0jZWxzZQotI2RlZmluZSBET19TVE9SRSgpICgodm9pZCkwKQotI2VuZGlmIC8qIENPTkZJR19WSURFT19SRVRBSU4gKi8KIAogLyoKICAqIE1vZGUgdGFibGUgc3RydWN0dXJlcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKaW5kZXggZDNlYzhkNS4uNTg1ZWRlYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCkBAIC01OSwxMyArNTksNiBAQAogYXNtbGlua2FnZSB2b2lkIGFlc25pX2NiY19kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCiAJCQkgICAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBsZW4sIHU4ICppdik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGtlcm5lbF9mcHVfdXNpbmcodm9pZCkKLXsKLQlpZiAoaW5faW50ZXJydXB0KCkgJiYgIShyZWFkX2NyMCgpICYgWDg2X0NSMF9UUykpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqYWVzX2N0eCh2b2lkICpyYXdfY3R4KQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXJhd19jdHg7CkBAIC04OSw3ICs4Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJaWYgKGlycV9mcHVfdXNhYmxlKCkpCiAJCWVyciA9IGNyeXB0b19hZXNfZXhwYW5kX2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTExMCw3ICsxMDMsNyBAQAogewogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKIAotCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJaWYgKGlycV9mcHVfdXNhYmxlKCkpCiAJCWNyeXB0b19hZXNfZW5jcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTEyMyw3ICsxMTYsNyBAQAogewogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKIAotCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJaWYgKGlycV9mcHVfdXNhYmxlKCkpCiAJCWNyeXB0b19hZXNfZGVjcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTM0OSw3ICszNDIsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CiAJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOwogCi0JaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkgeworCWlmIChpcnFfZnB1X3VzYWJsZSgpKSB7CiAJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQogCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOwpAQCAtMzcwLDcgKzM2Myw3IEBACiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CiAKLQlpZiAoa2VybmVsX2ZwdV91c2luZygpKSB7CisJaWYgKGlycV9mcHVfdXNhYmxlKCkpIHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CiAJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwppbmRleCBlNTkwMjYxLi5iYTMzMWJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTUzNyw3ICs1MzcsNyBAQAogCS5xdWFkIHN5c19ta2RpcgogCS5xdWFkIHN5c19ybWRpcgkJLyogNDAgKi8KIAkucXVhZCBzeXNfZHVwCi0JLnF1YWQgc3lzMzJfcGlwZQorCS5xdWFkIHN5c19waXBlCiAJLnF1YWQgY29tcGF0X3N5c190aW1lcwogCS5xdWFkIHF1aWV0X25pX3N5c2NhbGwJCQkvKiBvbGQgcHJvZiBzeXNjYWxsIGhvbGRlciAqLwogCS5xdWFkIHN5c19icmsJCS8qIDQ1ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKaW5kZXggMDg1YThjMy4uOWY1NTI3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYwpAQCAtMTg5LDIwICsxODksNiBAQAogCXJldHVybiBzeXNfbXByb3RlY3Qoc3RhcnQsIGxlbiwgcHJvdCk7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBzeXMzMl9waXBlKGludCBfX3VzZXIgKmZkKQotewotCWludCByZXR2YWw7Ci0JaW50IGZkc1syXTsKLQotCXJldHZhbCA9IGRvX3BpcGVfZmxhZ3MoZmRzLCAwKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKLQlpZiAoY29weV90b191c2VyKGZkLCBmZHMsIHNpemVvZihmZHMpKSkKLQkJcmV0dmFsID0gLUVGQVVMVDsKLW91dDoKLQlyZXR1cm4gcmV0dmFsOwotfQotCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfcnRfc2lnYWN0aW9uKGludCBzaWcsIHN0cnVjdCBzaWdhY3Rpb24zMiBfX3VzZXIgKmFjdCwKIAkJCQkgICBzdHJ1Y3Qgc2lnYWN0aW9uMzIgX191c2VyICpvYWN0LAogCQkJCSAgIHVuc2lnbmVkIGludCBzaWdzZXRzaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKaW5kZXggMWEzN2JjZC4uYzI0MGVmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCkBAIC03Myw4ICs3Myw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goaW50IHNtcCkge30KICNlbmRpZgkvKiBDT05GSUdfU01QICovCiAKLWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0ICpmaW5kX25vcF90YWJsZSh2b2lkKTsKLQogLyogYWx0ZXJuYXRpdmUgYXNzZW1ibHkgcHJpbWl0aXZlOiAqLwogI2RlZmluZSBBTFRFUk5BVElWRShvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUpCQkJXAogCQkJCQkJCQkJXApAQCAtMTQ0LDggKzE0Miw2IEBACiAjZGVmaW5lIF9fcGFyYWluc3RydWN0aW9uc19lbmQJTlVMTAogI2VuZGlmCiAKLWV4dGVybiB2b2lkIGFkZF9ub3BzKHZvaWQgKmluc25zLCB1bnNpZ25lZCBpbnQgbGVuKTsKLQogLyoKICAqIENsZWFyIGFuZCByZXN0b3JlIHRoZSBrZXJuZWwgd3JpdGUtcHJvdGVjdGlvbiBmbGFnIG9uIHRoZSBsb2NhbCBDUFUuCiAgKiBBbGxvd3MgdGhlIGtlcm5lbCB0byBlZGl0IHJlYWQtb25seSBwYWdlcy4KQEAgLTE2MSwxMCArMTU3LDcgQEAKICAqIEludGVsJ3MgZXJyYXRhLgogICogT24gdGhlIGxvY2FsIENQVSB5b3UgbmVlZCB0byBiZSBwcm90ZWN0ZWQgYWdhaW4gTk1JIG9yIE1DRSBoYW5kbGVycyBzZWVpbmcgYW4KICAqIGluY29uc2lzdGVudCBpbnN0cnVjdGlvbiB3aGlsZSB5b3UgcGF0Y2guCi0gKiBUaGUgX2Vhcmx5IHZlcnNpb24gZXhwZWN0cyB0aGUgbWVtb3J5IHRvIGFscmVhZHkgYmUgUlcuCiAgKi8KLQogZXh0ZXJuIHZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwogCiAjZW5kaWYgLyogX0FTTV9YODZfQUxURVJOQVRJVkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCmluZGV4IGJiN2Q0NzkuLjU4NmI3YWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKQEAgLTE4Myw2ICsxODMsMTAgQEAKIH0KIAogI2RlZmluZSB4MmFwaWNfc3VwcG9ydGVkKCkJKGNwdV9oYXNfeDJhcGljKQorc3RhdGljIGlubGluZSB2b2lkIHgyYXBpY19mb3JjZV9waHlzKHZvaWQpCit7CisJeDJhcGljX3BoeXMgPSAxOworfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja194MmFwaWModm9pZCkKIHsKQEAgLTE5NCw2ICsxOTgsOSBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSB2b2lkIHgyYXBpY19mb3JjZV9waHlzKHZvaWQpCit7Cit9CiAKICNkZWZpbmUJeDJhcGljX3ByZWVuYWJsZWQgMAogI2RlZmluZQl4MmFwaWNfc3VwcG9ydGVkKCkJMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCmluZGV4IDdkZGIzNmEuLjNiNjJkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKQEAgLTgsMTIgKzgsMTQgQEAKICAqIEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPiwgMTk5OSwgMjAwMAogICovCiAKLSNkZWZpbmUJQVBJQ19ERUZBVUxUX1BIWVNfQkFTRQkweGZlZTAwMDAwCisjZGVmaW5lIElPX0FQSUNfREVGQVVMVF9QSFlTX0JBU0UJMHhmZWMwMDAwMAorI2RlZmluZQlBUElDX0RFRkFVTFRfUEhZU19CQVNFCQkweGZlZTAwMDAwCiAKICNkZWZpbmUJQVBJQ19JRAkJMHgyMAogCiAjZGVmaW5lCUFQSUNfTFZSCTB4MzAKICNkZWZpbmUJCUFQSUNfTFZSX01BU0sJCTB4RkYwMEZGCisjZGVmaW5lCQlBUElDX0xWUl9ESVJFQ1RFRF9FT0kJKDEgPDwgMjQpCiAjZGVmaW5lCQlHRVRfQVBJQ19WRVJTSU9OKHgpCSgoeCkgJiAweEZGdSkKICNkZWZpbmUJCUdFVF9BUElDX01BWExWVCh4KQkoKCh4KSA+PiAxNikgJiAweEZGdSkKICNpZmRlZiBDT05GSUdfWDg2XzMyCkBAIC00MCw2ICs0Miw3IEBACiAjZGVmaW5lCQlBUElDX0RGUl9DTFVTVEVSCQkweDBGRkZGRkZGdWwKICNkZWZpbmUJCUFQSUNfREZSX0ZMQVQJCQkweEZGRkZGRkZGdWwKICNkZWZpbmUJQVBJQ19TUElWCTB4RjAKKyNkZWZpbmUJCUFQSUNfU1BJVl9ESVJFQ1RFRF9FT0kJCSgxIDw8IDEyKQogI2RlZmluZQkJQVBJQ19TUElWX0ZPQ1VTX0RJU0FCTEVECSgxIDw8IDkpCiAjZGVmaW5lCQlBUElDX1NQSVZfQVBJQ19FTkFCTEVECQkoMSA8PCA4KQogI2RlZmluZQlBUElDX0lTUgkweDEwMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXNtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20uaAppbmRleCA1NmJlNzhmLi5iM2VkMWUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hc20uaApAQCAtMyw3ICszLDcgQEAKIAogI2lmZGVmIF9fQVNTRU1CTFlfXwogIyBkZWZpbmUgX19BU01fRk9STSh4KQl4Ci0jIGRlZmluZSBfX0FTTV9FWF9TRUMJLnNlY3Rpb24gX19leF90YWJsZQorIyBkZWZpbmUgX19BU01fRVhfU0VDCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgogI2Vsc2UKICMgZGVmaW5lIF9fQVNNX0ZPUk0oeCkJIiAiICN4ICIgIgogIyBkZWZpbmUgX19BU01fRVhfU0VDCSIgLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgpAQCAtMzgsMTAgKzM4LDE4IEBACiAjZGVmaW5lIF9BU01fREkJCV9fQVNNX1JFRyhkaSkKIAogLyogRXhjZXB0aW9uIHRhYmxlIGVudHJ5ICovCisjaWZkZWYgX19BU1NFTUJMWV9fCisjIGRlZmluZSBfQVNNX0VYVEFCTEUoZnJvbSx0bykJICAgIFwKKwlfX0FTTV9FWF9TRUMgOwkJICAgIFwKKwlfQVNNX0FMSUdOIDsJCSAgICBcCisJX0FTTV9QVFIgZnJvbSAsIHRvIDsJICAgIFwKKwkucHJldmlvdXMKKyNlbHNlCiAjIGRlZmluZSBfQVNNX0VYVEFCTEUoZnJvbSx0bykgXAogCV9fQVNNX0VYX1NFQwlcCiAJX0FTTV9BTElHTiAiXG4iIFwKIAlfQVNNX1BUUiAjZnJvbSAiLCIgI3RvICJcbiIgXAogCSIgLnByZXZpb3VzXG4iCisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X0FTTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKaW5kZXggNGEyOGQyMi4uODQ3ZmVlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtOTUsNiArOTUsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9OT05TVE9QX1RTQwkoMyozMisyNCkgLyogVFNDIGRvZXMgbm90IHN0b3AgaW4gQyBzdGF0ZXMgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xGTFVTSF9NT05JVE9SICgzKjMyKzI1KSAvKiAiIiBjbGZsdXNoIHJlcWQgd2l0aCBtb25pdG9yICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0VYVERfQVBJQ0lECSgzKjMyKzI2KSAvKiBoYXMgZXh0ZW5kZWQgQVBJQ0lEICg4IGJpdHMpICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FNRF9EQ00gICAgICgzKjMyKzI3KSAvKiBtdWx0aS1ub2RlIHByb2Nlc3NvciAqLwogCiAvKiBJbnRlbC1kZWZpbmVkIENQVSBmZWF0dXJlcywgQ1BVSUQgbGV2ZWwgMHgwMDAwMDAwMSAoZWN4KSwgd29yZCA0ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTTMJKDQqMzIrIDApIC8qICJwbmkiIFNTRS0zICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jdXJyZW50LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jdXJyZW50LmgKaW5kZXggYzY4YzM2MS4uNGQ0NDdiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3VycmVudC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2N1cnJlbnQuaApAQCAtMTEsNyArMTEsNyBAQAogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKIHsKLQlyZXR1cm4gcGVyY3B1X3JlYWQoY3VycmVudF90YXNrKTsKKwlyZXR1cm4gcGVyY3B1X3JlYWRfc3RhYmxlKGN1cnJlbnRfdGFzayk7CiB9CiAKICNkZWZpbmUgY3VycmVudCBnZXRfY3VycmVudCgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKaW5kZXggYzk5M2U5ZS4uZThkZTJmNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaApAQCAtMjkxLDExICsyOTEsMjQgQEAKIAlyZXR1cm4gZGVzYy0+YmFzZTAgfCAoKGRlc2MtPmJhc2UxKSA8PCAxNikgfCAoKGRlc2MtPmJhc2UyKSA8PCAyNCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZGVzY19iYXNlKHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYywgdW5zaWduZWQgbG9uZyBiYXNlKQoreworCWRlc2MtPmJhc2UwID0gYmFzZSAmIDB4ZmZmZjsKKwlkZXNjLT5iYXNlMSA9IChiYXNlID4+IDE2KSAmIDB4ZmY7CisJZGVzYy0+YmFzZTIgPSAoYmFzZSA+PiAyNCkgJiAweGZmOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2Rlc2NfbGltaXQoY29uc3Qgc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjKQogewogCXJldHVybiBkZXNjLT5saW1pdDAgfCAoZGVzYy0+bGltaXQgPDwgMTYpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2Rlc2NfbGltaXQoc3RydWN0IGRlc2Nfc3RydWN0ICpkZXNjLCB1bnNpZ25lZCBsb25nIGxpbWl0KQoreworCWRlc2MtPmxpbWl0MCA9IGxpbWl0ICYgMHhmZmZmOworCWRlc2MtPmxpbWl0ID0gKGxpbWl0ID4+IDE2KSAmIDB4ZjsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIF9zZXRfZ2F0ZShpbnQgZ2F0ZSwgdW5zaWduZWQgdHlwZSwgdm9pZCAqYWRkciwKIAkJCSAgICAgdW5zaWduZWQgZHBsLCB1bnNpZ25lZCBpc3QsIHVuc2lnbmVkIHNlZykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2NfZGVmcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzY19kZWZzLmgKaW5kZXggYTZhZGVmYS4uOWQ2Njg0OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzY19kZWZzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzY19kZWZzLmgKQEAgLTM0LDYgKzM0LDEyIEBACiAJfTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKKyNkZWZpbmUgR0RUX0VOVFJZX0lOSVQoZmxhZ3MsIGJhc2UsIGxpbWl0KSB7IHsgeyBcCisJCS5hID0gKChsaW1pdCkgJiAweGZmZmYpIHwgKCgoYmFzZSkgJiAweGZmZmYpIDw8IDE2KSwgXAorCQkuYiA9ICgoKGJhc2UpICYgMHhmZjAwMDApID4+IDE2KSB8ICgoKGZsYWdzKSAmIDB4ZjBmZikgPDwgOCkgfCBcCisJCQkoKGxpbWl0KSAmIDB4ZjAwMDApIHwgKChiYXNlKSAmIDB4ZmYwMDAwMDApLCBcCisJfSB9IH0KKwogZW51bSB7CiAJR0FURV9JTlRFUlJVUFQgPSAweEUsCiAJR0FURV9UUkFQID0gMHhGLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGV2aWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAppbmRleCA0OTk0YTIwLi5jZWUzNGU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXZpY2UuaApAQCAtMTMsNCArMTMsNyBAQAogI2VuZGlmCiB9OwogCitzdHJ1Y3QgcGRldl9hcmNoZGF0YSB7Cit9OworCiAjZW5kaWYgLyogX0FTTV9YODZfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2R3YXJmMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZHdhcmYyLmgKaW5kZXggM2FmYzVlOC4uYWU2MjUzYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZHdhcmYyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZHdhcmYyLmgKQEAgLTg3LDkgKzg3LDI1IEBACiAJQ0ZJX1JFU1RPUkUgXHJlZwogCS5lbmRtCiAjZWxzZSAvKiFDT05GSUdfWDg2XzY0Ki8KKwkubWFjcm8gcHVzaGxfY2ZpIHJlZworCXB1c2hsIFxyZWcKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgNAorCS5lbmRtCiAKLQkvKiAzMmJpdCBkZWZlbml0aW9ucyBhcmUgbWlzc2VkIHlldCAqLworCS5tYWNybyBwb3BsX2NmaSByZWcKKwlwb3BsIFxyZWcKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKKwkuZW5kbQogCisJLm1hY3JvIG1vdmxfY2ZpIHJlZyBvZmZzZXQ9MAorCW1vdmwgJVxyZWcsIFxvZmZzZXQoJWVzcCkKKwlDRklfUkVMX09GRlNFVCBccmVnLCBcb2Zmc2V0CisJLmVuZG0KKworCS5tYWNybyBtb3ZsX2NmaV9yZXN0b3JlIG9mZnNldCByZWcKKwltb3ZsIFxvZmZzZXQoJWVzcCksICVccmVnCisJQ0ZJX1JFU1RPUkUgXHJlZworCS5lbmRtCiAjZW5kaWYgLyohQ09ORklHX1g4Nl82NCovCiAjZW5kaWYgLypfX0FTU0VNQkxZX18qLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggMTc1YWRmNS4uMGIyMGJiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTM4Ny5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaApAQCAtMjYsNiArMjYsNyBAQAogZXh0ZXJuIHZvaWQgbXhjc3JfZmVhdHVyZV9tYXNrX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGluaXRfZnB1KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpOwogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBtYXRoX3N0YXRlX3Jlc3RvcmUodm9pZCk7CitleHRlcm4gdm9pZCBfX21hdGhfc3RhdGVfcmVzdG9yZSh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfdGhyZWFkX3hzdGF0ZSh2b2lkKTsKIGV4dGVybiBpbnQgZHVtcF9mcHUoc3RydWN0IHB0X3JlZ3MgKiwgc3RydWN0IHVzZXJfaTM4N19zdHJ1Y3QgKik7CiAKQEAgLTMwMSw2ICszMDIsMTQgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXJxX2ZwdV91c2FibGUodm9pZCkKK3sKKwlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKKworCXJldHVybiAhaW5faW50ZXJydXB0KCkgfHwgIShyZWdzID0gZ2V0X2lycV9yZWdzKCkpIHx8IFwKKwkJdXNlcl9tb2RlKHJlZ3MpIHx8IChyZWFkX2NyMCgpICYgWDg2X0NSMF9UUyk7Cit9CisKIC8qCiAgKiBTb21lIGluc3RydWN0aW9ucyBsaWtlIFZJQSdzIHBhZGxvY2sgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlIGEgc3B1cmlvdXMKICAqIEROQSBmYXVsdCBidXQgZG9uJ3QgbW9kaWZ5IFNTRSByZWdpc3RlcnMuIEFuZCB0aGVzZSBpbnN0cnVjdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAppbmRleCAzMzBlZTgwLi44NTIzMmQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCkBAIC0xNTAsMTEgKzE1MCwxMCBAQAogI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyBcCiAJKG1wX2lycV9lbnRyaWVzICYmICFza2lwX2lvYXBpY19zZXR1cCAmJiBpb19hcGljX2lycXMpCiAKLSNpZmRlZiBDT05GSUdfQUNQSQorZXh0ZXJuIHU4IGlvX2FwaWNfdW5pcXVlX2lkKHU4IGlkKTsKIGV4dGVybiBpbnQgaW9fYXBpY19nZXRfdW5pcXVlX2lkKGludCBpb2FwaWMsIGludCBhcGljX2lkKTsKIGV4dGVybiBpbnQgaW9fYXBpY19nZXRfdmVyc2lvbihpbnQgaW9hcGljKTsKIGV4dGVybiBpbnQgaW9fYXBpY19nZXRfcmVkaXJfZW50cmllcyhpbnQgaW9hcGljKTsKLSNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLwogCiBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0cjsKIGV4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLApAQCAtMTc3LDYgKzE3NiwxNiBAQAogCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yLCBpbnQgcGluKTsKIGV4dGVybiB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwKIAkJCSAgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKTsKKworc3RydWN0IG1wX2lvYXBpY19nc2l7CisJaW50IGdzaV9iYXNlOworCWludCBnc2lfZW5kOworfTsKK2V4dGVybiBzdHJ1Y3QgbXBfaW9hcGljX2dzaSAgbXBfZ3NpX3JvdXRpbmdbXTsKK2ludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKTsKK2ludCBtcF9maW5kX2lvYXBpY19waW4oaW50IGlvYXBpYywgaW50IGdzaSk7Cit2b2lkIF9faW5pdCBtcF9yZWdpc3Rlcl9pb2FwaWMoaW50IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKTsKKwogI2Vsc2UgIC8qICFDT05GSUdfWDg2X0lPX0FQSUMgKi8KICNkZWZpbmUgaW9fYXBpY19hc3NpZ25fcGNpX2lycXMgMAogc3RhdGljIGNvbnN0IGludCB0aW1lcl90aHJvdWdoXzgyNTkgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9jdGxzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb2N0bHMuaAppbmRleCAwZDViMjNiLi5lYzM0Yzc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb2N0bHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb2N0bHMuaApAQCAtMSw5NCArMSBAQAotI2lmbmRlZiBfQVNNX1g4Nl9JT0NUTFNfSAotI2RlZmluZSBfQVNNX1g4Nl9JT0NUTFNfSAotCi0jaW5jbHVkZSA8YXNtL2lvY3RsLmg+Ci0KLS8qIDB4NTQgaXMganVzdCBhIG1hZ2ljIG51bWJlciB0byBtYWtlIHRoZXNlIHJlbGF0aXZlbHkgdW5pcXVlICgnVCcpICovCi0KLSNkZWZpbmUgVENHRVRTCQkweDU0MDEKLSNkZWZpbmUgVENTRVRTCQkweDU0MDIgLyogQ2xhc2hlcyB3aXRoIFNORENUTF9UTVJfU1RBUlQgc291bmQgaW9jdGwgKi8KLSNkZWZpbmUgVENTRVRTVwkJMHg1NDAzCi0jZGVmaW5lIFRDU0VUU0YJCTB4NTQwNAotI2RlZmluZSBUQ0dFVEEJCTB4NTQwNQotI2RlZmluZSBUQ1NFVEEJCTB4NTQwNgotI2RlZmluZSBUQ1NFVEFXCQkweDU0MDcKLSNkZWZpbmUgVENTRVRBRgkJMHg1NDA4Ci0jZGVmaW5lIFRDU0JSSwkJMHg1NDA5Ci0jZGVmaW5lIFRDWE9OQwkJMHg1NDBBCi0jZGVmaW5lIFRDRkxTSAkJMHg1NDBCCi0jZGVmaW5lIFRJT0NFWENMCTB4NTQwQwotI2RlZmluZSBUSU9DTlhDTAkweDU0MEQKLSNkZWZpbmUgVElPQ1NDVFRZCTB4NTQwRQotI2RlZmluZSBUSU9DR1BHUlAJMHg1NDBGCi0jZGVmaW5lIFRJT0NTUEdSUAkweDU0MTAKLSNkZWZpbmUgVElPQ09VVFEJMHg1NDExCi0jZGVmaW5lIFRJT0NTVEkJCTB4NTQxMgotI2RlZmluZSBUSU9DR1dJTlNaCTB4NTQxMwotI2RlZmluZSBUSU9DU1dJTlNaCTB4NTQxNAotI2RlZmluZSBUSU9DTUdFVAkweDU0MTUKLSNkZWZpbmUgVElPQ01CSVMJMHg1NDE2Ci0jZGVmaW5lIFRJT0NNQklDCTB4NTQxNwotI2RlZmluZSBUSU9DTVNFVAkweDU0MTgKLSNkZWZpbmUgVElPQ0dTT0ZUQ0FSCTB4NTQxOQotI2RlZmluZSBUSU9DU1NPRlRDQVIJMHg1NDFBCi0jZGVmaW5lIEZJT05SRUFECTB4NTQxQgotI2RlZmluZSBUSU9DSU5RCQlGSU9OUkVBRAotI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCi0jZGVmaW5lIFRJT0NDT05TCTB4NTQxRAotI2RlZmluZSBUSU9DR1NFUklBTAkweDU0MUUKLSNkZWZpbmUgVElPQ1NTRVJJQUwJMHg1NDFGCi0jZGVmaW5lIFRJT0NQS1QJCTB4NTQyMAotI2RlZmluZSBGSU9OQklPCQkweDU0MjEKLSNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgotI2RlZmluZSBUSU9DU0VURAkweDU0MjMKLSNkZWZpbmUgVElPQ0dFVEQJMHg1NDI0Ci0jZGVmaW5lIFRDU0JSS1AJCTB4NTQyNQkvKiBOZWVkZWQgZm9yIFBPU0lYIHRjc2VuZGJyZWFrKCkgKi8KLS8qICNkZWZpbmUgVElPQ1RUWUdTVFJVQ1QgMHg1NDI2IC0gRm9ybWVyIGRlYnVnZ2luZy1vbmx5IGlvY3RsICovCi0jZGVmaW5lIFRJT0NTQlJLCTB4NTQyNyAgLyogQlNEIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgVElPQ0NCUksJMHg1NDI4ICAvKiBCU0QgY29tcGF0aWJpbGl0eSAqLwotI2RlZmluZSBUSU9DR1NJRAkweDU0MjkgIC8qIFJldHVybiB0aGUgc2Vzc2lvbiBJRCBvZiBGRCAqLwotI2RlZmluZSBUQ0dFVFMyCQlfSU9SKCdUJywgMHgyQSwgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUQ1NFVFMyCQlfSU9XKCdUJywgMHgyQiwgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUQ1NFVFNXMglfSU9XKCdUJywgMHgyQywgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywgMHgyRCwgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUSU9DR1JTNDg1CTB4NTQyRQotI2RlZmluZSBUSU9DU1JTNDg1CTB4NTQyRgotI2RlZmluZSBUSU9DR1BUTglfSU9SKCdUJywgMHgzMCwgdW5zaWduZWQgaW50KQotCQkJCS8qIEdldCBQdHkgTnVtYmVyIChvZiBwdHktbXV4IGRldmljZSkgKi8KLSNkZWZpbmUgVElPQ1NQVExDSwlfSU9XKCdUJywgMHgzMSwgaW50KSAgLyogTG9jay91bmxvY2sgUHR5ICovCi0jZGVmaW5lIFRDR0VUWAkJMHg1NDMyIC8qIFNZUzUgVENHRVRYIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgVENTRVRYCQkweDU0MzMKLSNkZWZpbmUgVENTRVRYRgkJMHg1NDM0Ci0jZGVmaW5lIFRDU0VUWFcJCTB4NTQzNQotCi0jZGVmaW5lIEZJT05DTEVYCTB4NTQ1MAotI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKLSNkZWZpbmUgRklPQVNZTkMJMHg1NDUyCi0jZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCi0jZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0NTQKLSNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQotI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkweDU0NTYKLSNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3Ci0jZGVmaW5lIFRJT0NTRVJHU1RSVUNUCTB4NTQ1OCAvKiBGb3IgZGVidWdnaW5nIG9ubHkgKi8KLSNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1OSAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAvKiBHZXQgbXVsdGlwb3J0IGNvbmZpZyAgKi8KLSNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAvKiBTZXQgbXVsdGlwb3J0IGNvbmZpZyAqLwotCi0jZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCS8qIHdhaXQgZm9yIGEgY2hhbmdlIG9uIHNlcmlhbCBpbnB1dCBsaW5lKHMpICovCi0jZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAkvKiByZWFkIHNlcmlhbCBwb3J0IGlubGluZSBpbnRlcnJ1cHQgY291bnRzICovCi0jZGVmaW5lIFRJT0NHSEFZRVNFU1AgICAweDU0NUUgIC8qIEdldCBIYXllcyBFU1AgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBUSU9DU0hBWUVTRVNQICAgMHg1NDVGICAvKiBTZXQgSGF5ZXMgRVNQIGNvbmZpZ3VyYXRpb24gKi8KLSNkZWZpbmUgRklPUVNJWkUJMHg1NDYwCi0KLS8qIFVzZWQgZm9yIHBhY2tldCBtb2RlICovCi0jZGVmaW5lIFRJT0NQS1RfREFUQQkJIDAKLSNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQJIDEKLSNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFCSAyCi0jZGVmaW5lIFRJT0NQS1RfU1RPUAkJIDQKLSNkZWZpbmUgVElPQ1BLVF9TVEFSVAkJIDgKLSNkZWZpbmUgVElPQ1BLVF9OT1NUT1AJCTE2Ci0jZGVmaW5lIFRJT0NQS1RfRE9TVE9QCQkzMgotCi0jZGVmaW5lIFRJT0NTRVJfVEVNVCAgICAweDAxCS8qIFRyYW5zbWl0dGVyIHBoeXNpY2FsbHkgZW1wdHkgKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X0lPQ1RMU19IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9jdGxzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcGNidWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwY2J1Zi5oCmluZGV4IGVlNjc4ZmQuLjg0YzdlNTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwY2J1Zi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lwY2J1Zi5oCkBAIC0xLDI4ICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X0lQQ0JVRl9ICi0jZGVmaW5lIF9BU01fWDg2X0lQQ0JVRl9ICi0KLS8qCi0gKiBUaGUgaXBjNjRfcGVybSBzdHJ1Y3R1cmUgZm9yIHg4NiBhcmNoaXRlY3R1cmUuCi0gKiBOb3RlIGV4dHJhIHBhZGRpbmcgYmVjYXVzZSB0aGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgYmFjayBhbmQgZm9ydGgKLSAqIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlLgotICoKLSAqIFBhZCBzcGFjZSBpcyBsZWZ0IGZvcjoKLSAqIC0gMzItYml0IG1vZGVfdCBhbmQgc2VxCi0gKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCi0gKi8KLQotc3RydWN0IGlwYzY0X3Blcm0gewotCV9fa2VybmVsX2tleV90CQlrZXk7Ci0JX19rZXJuZWxfdWlkMzJfdAl1aWQ7Ci0JX19rZXJuZWxfZ2lkMzJfdAlnaWQ7Ci0JX19rZXJuZWxfdWlkMzJfdAljdWlkOwotCV9fa2VybmVsX2dpZDMyX3QJY2dpZDsKLQlfX2tlcm5lbF9tb2RlX3QJCW1vZGU7Ci0JdW5zaWduZWQgc2hvcnQJCV9fcGFkMTsKLQl1bnNpZ25lZCBzaG9ydAkJc2VxOwotCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7Ci0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOwotCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKLX07Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9JUENCVUZfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lwY2J1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggYzZjY2JlNy4uOWUyYjk1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxZmxhZ3MuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFmbGFncy5oCkBAIC0xMywxNCArMTMsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKLQkgKiBOb3RlOiB0aGlzIG5lZWRzIHRvIGJlICI9ciIgbm90ICI9cm0iLCBiZWNhdXNlIHdlIGhhdmUgdGhlCi0JICogc3RhY2sgb2Zmc2V0IGZyb20gd2hhdCBnY2MgZXhwZWN0cyBhdCB0aGUgdGltZSB0aGUgInBvcCIgaXMKLQkgKiBleGVjdXRlZCwgYW5kIHNvIGEgbWVtb3J5IHJlZmVyZW5jZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHN0YWNrCi0JICogd291bGQgZW5kIHVwIHVzaW5nIHRoZSB3cm9uZyBhZGRyZXNzLgorCSAqICI9cm0iIGlzIHNhZmUgaGVyZSwgYmVjYXVzZSAicG9wIiBhZGp1c3RzIHRoZSBzdGFjayBiZWZvcmUKKwkgKiBpdCBldmFsdWF0ZXMgaXRzIGVmZmVjdGl2ZSBhZGRyZXNzIC0tIHRoaXMgaXMgcGFydCBvZiB0aGUKKwkgKiBkb2N1bWVudGVkIGJlaGF2aW9yIG9mIHRoZSAicG9wIiBpbnN0cnVjdGlvbi4KIAkgKi8KIAlhc20gdm9sYXRpbGUoIiMgX19yYXdfc2F2ZV9mbGFnc1xuXHQiCiAJCSAgICAgInB1c2hmIDsgcG9wICUwIgotCQkgICAgIDogIj1yIiAoZmxhZ3MpCisJCSAgICAgOiAiPXJtIiAoZmxhZ3MpCiAJCSAgICAgOiAvKiBubyBpbnB1dCAqLwogCQkgICAgIDogIm1lbW9yeSIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IDEyNWJlOGIuLjRhNWZlOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oCkBAIC0xNyw2ICsxNyw4IEBACiAjZGVmaW5lIF9fS1ZNX0hBVkVfVVNFUl9OTUkKICNkZWZpbmUgX19LVk1fSEFWRV9HVUVTVF9ERUJVRwogI2RlZmluZSBfX0tWTV9IQVZFX01TSVgKKyNkZWZpbmUgX19LVk1fSEFWRV9NQ0UKKyNkZWZpbmUgX19LVk1fSEFWRV9QSVRfU1RBVEUyCiAKIC8qIEFyY2hpdGVjdHVyYWwgaW50ZXJydXB0IGxpbmUgY291bnQuICovCiAjZGVmaW5lIEtWTV9OUl9JTlRFUlJVUFRTIDI1NgpAQCAtMjM2LDYgKzIzOCwxNCBAQAogCXN0cnVjdCBrdm1fcGl0X2NoYW5uZWxfc3RhdGUgY2hhbm5lbHNbM107CiB9OwogCisjZGVmaW5lIEtWTV9QSVRfRkxBR1NfSFBFVF9MRUdBQ1kgIDB4MDAwMDAwMDEKKworc3RydWN0IGt2bV9waXRfc3RhdGUyIHsKKwlzdHJ1Y3Qga3ZtX3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOworCV9fdTMyIGZsYWdzOworCV9fdTMyIHJlc2VydmVkWzldOworfTsKKwogc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sIHsKIAlfX3U4IHBpdF9yZWluamVjdDsKIAlfX3U4IHJlc2VydmVkWzMxXTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV94ODZfZW11bGF0ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3g4Nl9lbXVsYXRlLmgKcmVuYW1lIHRvIGFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IGVhYmRjMWMuLjNiZTAwMDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbXVfbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9rdm0uaD4KICNpbmNsdWRlIDxsaW51eC9rdm1fcGFyYS5oPgpAQCAtMzcsMTIgKzM4LDE0IEBACiAjZGVmaW5lIENSM19MX01PREVfUkVTRVJWRURfQklUUyAoQ1IzX05PTlBBRV9SRVNFUlZFRF9CSVRTIHwJXAogCQkJCSAgMHhGRkZGRkYwMDAwMDAwMDAwVUxMKQogCi0jZGVmaW5lIEtWTV9HVUVTVF9DUjBfTUFTSwkJCQkgICBcCi0JKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFIHwgWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgXAotCSB8IFg4Nl9DUjBfTlcgfCBYODZfQ1IwX0NEKQorI2RlZmluZSBLVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUCQkJCVwKKwkoWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgfCBYODZfQ1IwX05XIHwgWDg2X0NSMF9DRCkKKyNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLCQkJCQkJXAorCShLVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUIHwgWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpCisjZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OX1VOUkVTVFJJQ1RFRF9HVUVTVAkJCQlcCisJKFg4Nl9DUjBfV1AgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9UUyB8IFg4Nl9DUjBfTVApCiAjZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OCQkJCQkJXAotCShYODZfQ1IwX1BHIHwgWDg2X0NSMF9QRSB8IFg4Nl9DUjBfV1AgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9UUyBcCi0JIHwgWDg2X0NSMF9NUCkKKwkoS1ZNX1ZNX0NSMF9BTFdBWVNfT05fVU5SRVNUUklDVEVEX0dVRVNUIHwgWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpCiAjZGVmaW5lIEtWTV9HVUVTVF9DUjRfTUFTSwkJCQkJCVwKIAkoWDg2X0NSNF9WTUUgfCBYODZfQ1I0X1BTRSB8IFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9QR0UgfCBYODZfQ1I0X1ZNWEUpCiAjZGVmaW5lIEtWTV9QTU9ERV9WTV9DUjRfQUxXQVlTX09OIChYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfVk1YRSkKQEAgLTUxLDEyICs1NCwxMiBAQAogI2RlZmluZSBJTlZBTElEX1BBR0UgKH4oaHBhX3QpMCkKICNkZWZpbmUgVU5NQVBQRURfR1ZBICh+KGdwYV90KTApCiAKLS8qIHNoYWRvdyB0YWJsZXMgYXJlIFBBRSBldmVuIG9uIG5vbi1QQUUgaG9zdHMgKi8KLSNkZWZpbmUgS1ZNX0hQQUdFX1NISUZUIDIxCi0jZGVmaW5lIEtWTV9IUEFHRV9TSVpFICgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKQotI2RlZmluZSBLVk1fSFBBR0VfTUFTSyAofihLVk1fSFBBR0VfU0laRSAtIDEpKQotCi0jZGVmaW5lIEtWTV9QQUdFU19QRVJfSFBBR0UgKEtWTV9IUEFHRV9TSVpFIC8gUEFHRV9TSVpFKQorLyogS1ZNIEh1Z2VwYWdlIGRlZmluaXRpb25zIGZvciB4ODYgKi8KKyNkZWZpbmUgS1ZNX05SX1BBR0VfU0laRVMJMworI2RlZmluZSBLVk1fSFBBR0VfU0hJRlQoeCkJKFBBR0VfU0hJRlQgKyAoKCh4KSAtIDEpICogOSkpCisjZGVmaW5lIEtWTV9IUEFHRV9TSVpFKHgpCSgxVUwgPDwgS1ZNX0hQQUdFX1NISUZUKHgpKQorI2RlZmluZSBLVk1fSFBBR0VfTUFTSyh4KQkofihLVk1fSFBBR0VfU0laRSh4KSAtIDEpKQorI2RlZmluZSBLVk1fUEFHRVNfUEVSX0hQQUdFKHgpCShLVk1fSFBBR0VfU0laRSh4KSAvIFBBR0VfU0laRSkKIAogI2RlZmluZSBERV9WRUNUT1IgMAogI2RlZmluZSBEQl9WRUNUT1IgMQpAQCAtMTIwLDYgKzEyMywxMCBAQAogCU5SX1ZDUFVfUkVHUwogfTsKIAorZW51bSBrdm1fcmVnX2V4IHsKKwlWQ1BVX0VYUkVHX1BEUFRSID0gTlJfVkNQVV9SRUdTLAorfTsKKwogZW51bSB7CiAJVkNQVV9TUkVHX0VTLAogCVZDUFVfU1JFR19DUywKQEAgLTEzMSw3ICsxMzgsNyBAQAogCVZDUFVfU1JFR19MRFRSLAogfTsKIAotI2luY2x1ZGUgPGFzbS9rdm1feDg2X2VtdWxhdGUuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2VtdWxhdGUuaD4KIAogI2RlZmluZSBLVk1fTlJfTUVNX09CSlMgNDAKIApAQCAtMzA4LDcgKzMxNSw2IEBACiAJc3RydWN0IHsKIAkJZ2ZuX3QgZ2ZuOwkvKiBwcmVzdW1lZCBnZm4gZHVyaW5nIGd1ZXN0IHB0ZSB1cGRhdGUgKi8KIAkJcGZuX3QgcGZuOwkvKiBwZm4gY29ycmVzcG9uZGluZyB0byB0aGF0IGdmbiAqLwotCQlpbnQgbGFyZ2VwYWdlOwogCQl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiAJfSB1cGRhdGVfcHRlOwogCkBAIC0zMzQsMTYgKzM0MCw2IEBACiAJCXU4IG5yOwogCX0gaW50ZXJydXB0OwogCi0Jc3RydWN0IHsKLQkJaW50IHZtODZfYWN0aXZlOwotCQl1OCBzYXZlX2lvcGw7Ci0JCXN0cnVjdCBrdm1fc2F2ZV9zZWdtZW50IHsKLQkJCXUxNiBzZWxlY3RvcjsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQkJCXUzMiBsaW1pdDsKLQkJCXUzMiBhcjsKLQkJfSB0ciwgZXMsIGRzLCBmcywgZ3M7Ci0JfSBybW9kZTsKIAlpbnQgaGFsdF9yZXF1ZXN0OyAvKiByZWFsIG1vZGUgb24gSW50ZWwgb25seSAqLwogCiAJaW50IGNwdWlkX25lbnQ7CkBAIC0zNjYsMTMgKzM2MiwxNSBAQAogCXUzMiBwYXQ7CiAKIAlpbnQgc3dpdGNoX2RiX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBob3N0X2RiW0tWTV9OUl9EQl9SRUdTXTsKLQl1bnNpZ25lZCBsb25nIGhvc3RfZHI2OwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjc7CiAJdW5zaWduZWQgbG9uZyBkYltLVk1fTlJfREJfUkVHU107CiAJdW5zaWduZWQgbG9uZyBkcjY7CiAJdW5zaWduZWQgbG9uZyBkcjc7CiAJdW5zaWduZWQgbG9uZyBlZmZfZGJbS1ZNX05SX0RCX1JFR1NdOworCisJdTY0IG1jZ19jYXA7CisJdTY0IG1jZ19zdGF0dXM7CisJdTY0IG1jZ19jdGw7CisJdTY0ICptY2VfYmFua3M7CiB9OwogCiBzdHJ1Y3Qga3ZtX21lbV9hbGlhcyB7CkBAIC00MDksNiArNDA3LDcgQEAKIAogCXN0cnVjdCBwYWdlICplcHRfaWRlbnRpdHlfcGFnZXRhYmxlOwogCWJvb2wgZXB0X2lkZW50aXR5X3BhZ2V0YWJsZV9kb25lOworCWdwYV90IGVwdF9pZGVudGl0eV9tYXBfYWRkcjsKIAogCXVuc2lnbmVkIGxvbmcgaXJxX3NvdXJjZXNfYml0bWFwOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRlc1tLVk1fSU9BUElDX05VTV9QSU5TXTsKQEAgLTUyNiw2ICs1MjUsOSBAQAogCWludCAoKnNldF90c3NfYWRkcikoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcik7CiAJaW50ICgqZ2V0X3RkcF9sZXZlbCkodm9pZCk7CiAJdTY0ICgqZ2V0X210X21hc2spKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBib29sIGlzX21taW8pOworCWJvb2wgKCpnYl9wYWdlX2VuYWJsZSkodm9pZCk7CisKKwljb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgKmV4aXRfcmVhc29uc19zdHI7CiB9OwogCiBleHRlcm4gc3RydWN0IGt2bV94ODZfb3BzICprdm1feDg2X29wczsKQEAgLTYxOCw2ICs2MjAsNyBAQAogdm9pZCBrdm1fcXVldWVfZXhjZXB0aW9uX2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBuciwgdTMyIGVycm9yX2NvZGUpOwogdm9pZCBrdm1faW5qZWN0X3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMiwKIAkJCSAgIHUzMiBlcnJvcl9jb2RlKTsKK2Jvb2wga3ZtX3JlcXVpcmVfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHJlcXVpcmVkX2NwbCk7CiAKIGludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogCkBAIC03NTIsOCArNzU1LDYgQEAKIAlrdm1fcXVldWVfZXhjZXB0aW9uX2UodmNwdSwgR1BfVkVDVE9SLCBlcnJvcl9jb2RlKTsKIH0KIAotI2RlZmluZSBNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIJCTB4MDEwCi0KICNkZWZpbmUgVFNTX0lPUEJfQkFTRV9PRkZTRVQgMHg2NgogI2RlZmluZSBUU1NfQkFTRV9TSVpFIDB4NjgKICNkZWZpbmUgVFNTX0lPUEJfU0laRSAoNjU1MzYgLyA4KQpAQCAtNzk2LDUgKzc5Nyw4IEBACiBpbnQga3ZtX3VubWFwX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKIGludCBrdm1fYWdlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKIGludCBjcHVpZF9tYXhwaHlhZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQga3ZtX2NwdV9oYXNfaW50ZXJydXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQga3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2ludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KTsKIAogI2VuZGlmIC8qIF9BU01fWDg2X0tWTV9IT1NUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCmluZGV4IGI4YTMzMDUuLmM1ODQwNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfS1ZNX1BBUkFfSAogI2RlZmluZSBfQVNNX1g4Nl9LVk1fUEFSQV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBUaGlzIENQVUlEIHJldHVybnMgdGhlIHNpZ25hdHVyZSAnS1ZNS1ZNS1ZNJyBpbiBlYngsIGVjeCwgYW5kIGVkeC4gIEl0CiAgKiBzaG91bGQgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhhdCBhIFZNIGlzIHJ1bm5pbmcgdW5kZXIgS1ZNLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sZ3Vlc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xndWVzdC5oCmluZGV4IDUxMzZkYWQuLjBkOTdkZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xndWVzdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xndWVzdC5oCkBAIC05MCw4ICs5MCw5IEBACiB9CiAKIC8qIEZ1bGwgNEcgc2VnbWVudCBkZXNjcmlwdG9ycywgc3VpdGFibGUgZm9yIENTIGFuZCBEUy4gKi8KLSNkZWZpbmUgRlVMTF9FWEVDX1NFR01FTlQgKChzdHJ1Y3QgZGVzY19zdHJ1Y3QpeyB7IHsweDAwMDBmZmZmLCAweDAwY2Y5YjAwfSB9IH0pCi0jZGVmaW5lIEZVTExfU0VHTUVOVCAoKHN0cnVjdCBkZXNjX3N0cnVjdCl7IHsgezB4MDAwMGZmZmYsIDB4MDBjZjkzMDB9IH0gfSkKKyNkZWZpbmUgRlVMTF9FWEVDX1NFR01FTlQgXAorCSgoc3RydWN0IGRlc2Nfc3RydWN0KUdEVF9FTlRSWV9JTklUKDB4YzA5YiwgMCwgMHhmZmZmZikpCisjZGVmaW5lIEZVTExfU0VHTUVOVCAoKHN0cnVjdCBkZXNjX3N0cnVjdClHRFRfRU5UUllfSU5JVCgweGMwOTMsIDAsIDB4ZmZmZmYpKQogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tYW4uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tYW4uaAppbmRleCA3NTFhZjI1Li41OTNlNTFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbWFuLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW1hbi5oCkBAIC0xLDIwICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfTU1BTl9ICiAjZGVmaW5lIF9BU01fWDg2X01NQU5fSAogCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1hbi1jb21tb24uaD4KLQogI2RlZmluZSBNQVBfMzJCSVQJMHg0MAkJLyogb25seSBnaXZlIG91dCAzMmJpdCBhZGRyZXNzZXMgKi8KIAotI2RlZmluZSBNQVBfR1JPV1NET1dOCTB4MDEwMAkJLyogc3RhY2stbGlrZSBzZWdtZW50ICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUJMHgwODAwCQkvKiBFVFhUQlNZICovCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFCTB4MTAwMAkJLyogbWFyayBpdCBhcyBhbiBleGVjdXRhYmxlICovCi0jZGVmaW5lIE1BUF9MT0NLRUQJMHgyMDAwCQkvKiBwYWdlcyBhcmUgbG9ja2VkICovCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUJMHg0MDAwCQkvKiBkb24ndCBjaGVjayBmb3IgcmVzZXJ2YXRpb25zICovCi0jZGVmaW5lIE1BUF9QT1BVTEFURQkweDgwMDAJCS8qIHBvcHVsYXRlIChwcmVmYXVsdCkgcGFnZXRhYmxlcyAqLwotI2RlZmluZSBNQVBfTk9OQkxPQ0sJMHgxMDAwMAkJLyogZG8gbm90IGJsb2NrIG9uIElPICovCi0jZGVmaW5lIE1BUF9TVEFDSwkweDIwMDAwCQkvKiBnaXZlIG91dCBhbiBhZGRyZXNzIHRoYXQgaXMgYmVzdCBzdWl0ZWQgZm9yIHByb2Nlc3MvdGhyZWFkIHN0YWNrcyAqLwotCi0jZGVmaW5lIE1DTF9DVVJSRU5UCTEJCS8qIGxvY2sgYWxsIGN1cnJlbnQgbWFwcGluZ3MgKi8KLSNkZWZpbmUgTUNMX0ZVVFVSRQkyCQkvKiBsb2NrIGFsbCBmdXR1cmUgbWFwcGluZ3MgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+CiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9NTUFOX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggNDdkNjI3NC4uM2UyY2U1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsMTggKzEsNyBAQAogI2lmbmRlZiBfQVNNX1g4Nl9NT0RVTEVfSAogI2RlZmluZSBfQVNNX1g4Nl9NT0RVTEVfSAogCi0vKiB4ODZfMzIvNjQgYXJlIHNpbXBsZSAqLwotc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHt9OwotCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgotIyBkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KLSMgZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKLSNlbHNlCi0jIGRlZmluZSBFbGZfU2hkciBFbGY2NF9TaGRyCi0jIGRlZmluZSBFbGZfU3ltIEVsZjY0X1N5bQotIyBkZWZpbmUgRWxmX0VoZHIgRWxmNjRfRWhkcgotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW9kdWxlLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAvKiBYODZfNjQgZG9lcyBub3QgZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAqLwpAQCAtMjgsNiArMTcsOCBAQAogI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjU4Nk1NWCAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NQ09SRTIKICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJDT1JFMiAiCisjZWxpZiBkZWZpbmVkIENPTkZJR19NQVRPTQorI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIkFUT00gIgogI2VsaWYgZGVmaW5lZCBDT05GSUdfTTY4NgogI2RlZmluZSBNT0RVTEVfUFJPQ19GQU1JTFkgIjY4NiAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NUEVOVElVTUlJCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2didWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zZ2J1Zi5oCmluZGV4IDdlNGU5NDguLjgwOTEzNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zZ2J1Zi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zZ2J1Zi5oCkBAIC0xLDM5ICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X01TR0JVRl9ICi0jZGVmaW5lIF9BU01fWDg2X01TR0JVRl9ICi0KLS8qCi0gKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIGkzODYgYXJjaGl0ZWN0dXJlLgotICogTm90ZSBleHRyYSBwYWRkaW5nIGJlY2F1c2UgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIGJhY2sgYW5kIGZvcnRoCi0gKiBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZS4KLSAqCi0gKiBQYWQgc3BhY2Ugb24gaTM4NiBpcyBsZWZ0IGZvcjoKLSAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCi0gKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCi0gKgotICogUGFkIHNwYWNlIG9uIHg4NjY0IGlzIGxlZnQgZm9yOgotICogLSAyIG1pc2NlbGxhbmVvdXMgNjQtYml0IHZhbHVlcwotICovCi1zdHJ1Y3QgbXNxaWQ2NF9kcyB7Ci0Jc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07Ci0JX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsJLyogbGFzdCBtc2dzbmQgdGltZSAqLwotI2lmZGVmIF9faTM4Nl9fCi0JdW5zaWduZWQgbG9uZwlfX3VudXNlZDE7Ci0jZW5kaWYKLQlfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCi0jaWZkZWYgX19pMzg2X18KLQl1bnNpZ25lZCBsb25nCV9fdW51c2VkMjsKLSNlbmRpZgotCV9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CS8qIGxhc3QgY2hhbmdlIHRpbWUgKi8KLSNpZmRlZiBfX2kzODZfXwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZyAgbXNnX2NieXRlczsJLyogY3VycmVudCBudW1iZXIgb2YgYnl0ZXMgb24gcXVldWUgKi8KLQl1bnNpZ25lZCBsb25nICBtc2dfcW51bTsJLyogbnVtYmVyIG9mIG1lc3NhZ2VzIGluIHF1ZXVlICovCi0JdW5zaWduZWQgbG9uZyAgbXNnX3FieXRlczsJLyogbWF4IG51bWJlciBvZiBieXRlcyBvbiBxdWV1ZSAqLwotCV9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsJLyogcGlkIG9mIGxhc3QgbXNnc25kICovCi0JX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwkvKiBsYXN0IHJlY2VpdmUgcGlkICovCi0JdW5zaWduZWQgbG9uZyAgX191bnVzZWQ0OwotCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNTsKLX07Ci0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9NU0dCVUZfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21zZ2J1Zi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCA2YmU3ZmMyLi5iZDU1NDkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtMzc0LDYgKzM3NCw3IEBACiAvKiBBTUQtViBNU1JzICovCiAKICNkZWZpbmUgTVNSX1ZNX0NSICAgICAgICAgICAgICAgICAgICAgICAweGMwMDEwMTE0CisjZGVmaW5lIE1TUl9WTV9JR05ORSAgICAgICAgICAgICAgICAgICAgMHhjMDAxMDExNQogI2RlZmluZSBNU1JfVk1fSFNBVkVfUEEgICAgICAgICAgICAgICAgIDB4YzAwMTAxMTcKIAogI2VuZGlmIC8qIF9BU01fWDg2X01TUl9JTkRFWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCmluZGV4IDQ4YWQ5ZDIuLjdlMmI2YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci5oCkBAIC0zLDEwICszLDE2IEBACiAKICNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIFg4Nl9JT0NfUkRNU1JfUkVHUwlfSU9XUignYycsIDB4QTAsIF9fdTMyWzhdKQorI2RlZmluZSBYODZfSU9DX1dSTVNSX1JFR1MJX0lPV1IoJ2MnLCAweEExLCBfX3UzMls4XSkKKworI2lmZGVmIF9fS0VSTkVMX18KKwogI2luY2x1ZGUgPGFzbS9hc20uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgpAQCAtNjcsMjMgKzczLDcgQEAKIAkJICAgICAiLnByZXZpb3VzXG5cdCIKIAkJICAgICBfQVNNX0VYVEFCTEUoMmIsIDNiKQogCQkgICAgIDogW2Vycl0gIj1yIiAoKmVyciksIEVBWF9FRFhfUkVUKHZhbCwgbG93LCBoaWdoKQotCQkgICAgIDogImMiIChtc3IpLCBbZmF1bHRdICJpIiAoLUVGQVVMVCkpOwotCXJldHVybiBFQVhfRURYX1ZBTCh2YWwsIGxvdywgaGlnaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG5hdGl2ZV9yZWFkX21zcl9hbWRfc2FmZSh1bnNpZ25lZCBpbnQgbXNyLAotCQkJCQkJICAgICAgaW50ICplcnIpCi17Ci0JREVDTEFSRV9BUkdTKHZhbCwgbG93LCBoaWdoKTsKLQotCWFzbSB2b2xhdGlsZSgiMjogcmRtc3IgOyB4b3IgJTAsJTBcbiIKLQkJICAgICAiMTpcblx0IgotCQkgICAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cdCIKLQkJICAgICAiMzogIG1vdiAlMywlMCA7IGptcCAxYlxuXHQiCi0JCSAgICAgIi5wcmV2aW91c1xuXHQiCi0JCSAgICAgX0FTTV9FWFRBQkxFKDJiLCAzYikKLQkJICAgICA6ICI9ciIgKCplcnIpLCBFQVhfRURYX1JFVCh2YWwsIGxvdywgaGlnaCkKLQkJICAgICA6ICJjIiAobXNyKSwgIkQiICgweDljNWEyMDNhKSwgImkiICgtRUZBVUxUKSk7CisJCSAgICAgOiAiYyIgKG1zciksIFtmYXVsdF0gImkiICgtRUlPKSk7CiAJcmV0dXJuIEVBWF9FRFhfVkFMKHZhbCwgbG93LCBoaWdoKTsKIH0KIApAQCAtMTA2LDEzICs5NiwxNiBAQAogCQkgICAgIF9BU01fRVhUQUJMRSgyYiwgM2IpCiAJCSAgICAgOiBbZXJyXSAiPWEiIChlcnIpCiAJCSAgICAgOiAiYyIgKG1zciksICIwIiAobG93KSwgImQiIChoaWdoKSwKLQkJICAgICAgIFtmYXVsdF0gImkiICgtRUZBVUxUKQorCQkgICAgICAgW2ZhdWx0XSAiaSIgKC1FSU8pCiAJCSAgICAgOiAibWVtb3J5Iik7CiAJcmV0dXJuIGVycjsKIH0KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBuYXRpdmVfcmVhZF90c2Modm9pZCk7CiAKK2V4dGVybiBpbnQgbmF0aXZlX3JkbXNyX3NhZmVfcmVncyh1MzIgcmVnc1s4XSk7CitleHRlcm4gaW50IG5hdGl2ZV93cm1zcl9zYWZlX3JlZ3ModTMyIHJlZ3NbOF0pOworCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBfX25hdGl2ZV9yZWFkX3RzYyh2b2lkKQogewogCURFQ0xBUkVfQVJHUyh2YWwsIGxvdywgaGlnaCk7CkBAIC0xODEsMTQgKzE3NCw0NCBAQAogCSpwID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUobXNyLCAmZXJyKTsKIAlyZXR1cm4gZXJyOwogfQorCiBzdGF0aWMgaW5saW5lIGludCByZG1zcmxfYW1kX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCiB7CisJdTMyIGdwcnNbOF0gPSB7IDAgfTsKIAlpbnQgZXJyOwogCi0JKnAgPSBuYXRpdmVfcmVhZF9tc3JfYW1kX3NhZmUobXNyLCAmZXJyKTsKKwlncHJzWzFdID0gbXNyOworCWdwcnNbN10gPSAweDljNWEyMDNhOworCisJZXJyID0gbmF0aXZlX3JkbXNyX3NhZmVfcmVncyhncHJzKTsKKworCSpwID0gZ3Byc1swXSB8ICgodTY0KWdwcnNbMl0gPDwgMzIpOworCiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgd3Jtc3JsX2FtZF9zYWZlKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKwl1MzIgZ3Byc1s4XSA9IHsgMCB9OworCisJZ3Byc1swXSA9ICh1MzIpdmFsOworCWdwcnNbMV0gPSBtc3I7CisJZ3Byc1syXSA9IHZhbCA+PiAzMjsKKwlncHJzWzddID0gMHg5YzVhMjAzYTsKKworCXJldHVybiBuYXRpdmVfd3Jtc3Jfc2FmZV9yZWdzKGdwcnMpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZG1zcl9zYWZlX3JlZ3ModTMyIHJlZ3NbOF0pCit7CisJcmV0dXJuIG5hdGl2ZV9yZG1zcl9zYWZlX3JlZ3MocmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdybXNyX3NhZmVfcmVncyh1MzIgcmVnc1s4XSkKK3sKKwlyZXR1cm4gbmF0aXZlX3dybXNyX3NhZmVfcmVncyhyZWdzKTsKK30KKwogI2RlZmluZSByZHRzY2wobG93KQkJCQkJCVwKIAkoKGxvdykgPSAodTMyKV9fbmF0aXZlX3JlYWRfdHNjKCkpCiAKQEAgLTIyOCw2ICsyNTEsOCBAQAogdm9pZCB3cm1zcl9vbl9jcHVzKGNvbnN0IGNwdW1hc2tfdCAqbWFzaywgdTMyIG1zcl9ubywgc3RydWN0IG1zciAqbXNycyk7CiBpbnQgcmRtc3Jfc2FmZV9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpOwogaW50IHdybXNyX3NhZmVfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiBtc3Jfbm8sIHUzMiBsLCB1MzIgaCk7CitpbnQgcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgcmVnc1s4XSk7CitpbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgcmVnc1s4XSk7CiAjZWxzZSAgLyogIENPTkZJR19TTVAgICovCiBzdGF0aWMgaW5saW5lIGludCByZG1zcl9vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIG1zcl9ubywgdTMyICpsLCB1MzIgKmgpCiB7CkBAIC0yNTgsNyArMjgzLDE1IEBACiB7CiAJcmV0dXJuIHdybXNyX3NhZmUobXNyX25vLCBsLCBoKTsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHJkbXNyX3NhZmVfcmVnc19vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIHJlZ3NbOF0pCit7CisJcmV0dXJuIHJkbXNyX3NhZmVfcmVncyhyZWdzKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHdybXNyX3NhZmVfcmVnc19vbl9jcHUodW5zaWduZWQgaW50IGNwdSwgdTMyIHJlZ3NbOF0pCit7CisJcmV0dXJuIHdybXNyX3NhZmVfcmVncyhyZWdzKTsKK30KICNlbmRpZiAgLyogQ09ORklHX1NNUCAqLwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9NU1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggNmYwZDA0Mi4uOTY1ZDQ1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhbS5oCkBAIC0xLDIyICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X1BBUkFNX0gKLSNkZWZpbmUgX0FTTV9YODZfUEFSQU1fSAotCi0jaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCi0jIGRlZmluZSBVU0VSX0haCTEwMAkJLyogc29tZSB1c2VyIGludGVyZmFjZXMgYXJlICovCi0jIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikgICAgICAgLyogaW4gInRpY2tzIiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2Ci0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9QQVJBTV9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDRmYjM3YzguLjQwZDY1ODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtNyw2ODkgKzcsMTEgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hc20uaD4KIAotLyogQml0bWFzayBvZiB3aGF0IGNhbiBiZSBjbG9iYmVyZWQ6IHVzdWFsbHkgYXQgbGVhc3QgZWF4LiAqLwotI2RlZmluZSBDTEJSX05PTkUgMAotI2RlZmluZSBDTEJSX0VBWCAgKDEgPDwgMCkKLSNkZWZpbmUgQ0xCUl9FQ1ggICgxIDw8IDEpCi0jZGVmaW5lIENMQlJfRURYICAoMSA8PCAyKQotI2RlZmluZSBDTEJSX0VESSAgKDEgPDwgMykKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qIENMQlJfQU5ZIHNob3VsZCBtYXRjaCBhbGwgcmVncyBwbGF0Zm9ybSBoYXMuIEZvciBpMzg2LCB0aGF0J3MganVzdCBpdCAqLwotI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDQpIC0gMSkKLQotI2RlZmluZSBDTEJSX0FSR19SRUdTCShDTEJSX0VBWCB8IENMQlJfRURYIHwgQ0xCUl9FQ1gpCi0jZGVmaW5lIENMQlJfUkVUX1JFRwkoQ0xCUl9FQVggfCBDTEJSX0VEWCkKLSNkZWZpbmUgQ0xCUl9TQ1JBVENICSgwKQotI2Vsc2UKLSNkZWZpbmUgQ0xCUl9SQVggIENMQlJfRUFYCi0jZGVmaW5lIENMQlJfUkNYICBDTEJSX0VDWAotI2RlZmluZSBDTEJSX1JEWCAgQ0xCUl9FRFgKLSNkZWZpbmUgQ0xCUl9SREkgIENMQlJfRURJCi0jZGVmaW5lIENMQlJfUlNJICAoMSA8PCA0KQotI2RlZmluZSBDTEJSX1I4ICAgKDEgPDwgNSkKLSNkZWZpbmUgQ0xCUl9SOSAgICgxIDw8IDYpCi0jZGVmaW5lIENMQlJfUjEwICAoMSA8PCA3KQotI2RlZmluZSBDTEJSX1IxMSAgKDEgPDwgOCkKLQotI2RlZmluZSBDTEJSX0FOWSAgKCgxIDw8IDkpIC0gMSkKLQotI2RlZmluZSBDTEJSX0FSR19SRUdTCShDTEJSX1JESSB8IENMQlJfUlNJIHwgQ0xCUl9SRFggfCBcCi0JCQkgQ0xCUl9SQ1ggfCBDTEJSX1I4IHwgQ0xCUl9SOSkKLSNkZWZpbmUgQ0xCUl9SRVRfUkVHCShDTEJSX1JBWCkKLSNkZWZpbmUgQ0xCUl9TQ1JBVENICShDTEJSX1IxMCB8IENMQlJfUjExKQotCi0jaW5jbHVkZSA8YXNtL2Rlc2NfZGVmcy5oPgotI2VuZGlmIC8qIFg4Nl82NCAqLwotCi0jZGVmaW5lIENMQlJfQ0FMTEVFX1NBVkUgKChDTEJSX0FSR19SRUdTIHwgQ0xCUl9TQ1JBVENIKSAmIH5DTEJSX1JFVF9SRUcpCisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0X3R5cGVzLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vZGVzY19kZWZzLmg+Ci0KLXN0cnVjdCBwYWdlOwotc3RydWN0IHRocmVhZF9zdHJ1Y3Q7Ci1zdHJ1Y3QgZGVzY19wdHI7Ci1zdHJ1Y3QgdHNzX3N0cnVjdDsKLXN0cnVjdCBtbV9zdHJ1Y3Q7Ci1zdHJ1Y3QgZGVzY19zdHJ1Y3Q7Ci1zdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KLS8qCi0gKiBXcmFwcGVyIHR5cGUgZm9yIHBvaW50ZXJzIHRvIGNvZGUgd2hpY2ggdXNlcyB0aGUgbm9uLXN0YW5kYXJkCi0gKiBjYWxsaW5nIGNvbnZlbnRpb24uICBTZWUgUFZfQ0FMTF9TQVZFX1JFR1NfVEhVTksgYmVsb3cuCi0gKi8KLXN0cnVjdCBwYXJhdmlydF9jYWxsZWVfc2F2ZSB7Ci0Jdm9pZCAqZnVuYzsKLX07Ci0KLS8qIGdlbmVyYWwgaW5mbyAqLwotc3RydWN0IHB2X2luZm8gewotCXVuc2lnbmVkIGludCBrZXJuZWxfcnBsOwotCWludCBzaGFyZWRfa2VybmVsX3BtZDsKLQlpbnQgcGFyYXZpcnRfZW5hYmxlZDsKLQljb25zdCBjaGFyICpuYW1lOwotfTsKLQotc3RydWN0IHB2X2luaXRfb3BzIHsKLQkvKgotCSAqIFBhdGNoIG1heSByZXBsYWNlIG9uZSBvZiB0aGUgZGVmaW5lZCBjb2RlIHNlcXVlbmNlcyB3aXRoCi0JICogYXJiaXRyYXJ5IGNvZGUsIHN1YmplY3QgdG8gdGhlIHNhbWUgcmVnaXN0ZXIgY29uc3RyYWludHMuCi0JICogVGhpcyBnZW5lcmFsbHkgbWVhbnMgdGhlIGNvZGUgaXMgbm90IGZyZWUgdG8gY2xvYmJlciBhbnkKLQkgKiByZWdpc3RlcnMgb3RoZXIgdGhhbiBFQVguICBUaGUgcGF0Y2ggZnVuY3Rpb24gc2hvdWxkIHJldHVybgotCSAqIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgY29kZSBnZW5lcmF0ZWQsIGFzIHdlIG5vcCBwYWQgdGhlCi0JICogcmVzdCBpbiBnZW5lcmljIGNvZGUuCi0JICovCi0JdW5zaWduZWQgKCpwYXRjaCkodTggdHlwZSwgdTE2IGNsb2JiZXIsIHZvaWQgKmluc25idWYsCi0JCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbGVuKTsKLQotCS8qIEJhc2ljIGFyY2gtc3BlY2lmaWMgc2V0dXAgKi8KLQl2b2lkICgqYXJjaF9zZXR1cCkodm9pZCk7Ci0JY2hhciAqKCptZW1vcnlfc2V0dXApKHZvaWQpOwotCXZvaWQgKCpwb3N0X2FsbG9jYXRvcl9pbml0KSh2b2lkKTsKLQotCS8qIFByaW50IGEgYmFubmVyIHRvIGlkZW50aWZ5IHRoZSBlbnZpcm9ubWVudCAqLwotCXZvaWQgKCpiYW5uZXIpKHZvaWQpOwotfTsKLQotCi1zdHJ1Y3QgcHZfbGF6eV9vcHMgewotCS8qIFNldCBkZWZlcnJlZCB1cGRhdGUgbW9kZSwgdXNlZCBmb3IgYmF0Y2hpbmcgb3BlcmF0aW9ucy4gKi8KLQl2b2lkICgqZW50ZXIpKHZvaWQpOwotCXZvaWQgKCpsZWF2ZSkodm9pZCk7Ci19OwotCi1zdHJ1Y3QgcHZfdGltZV9vcHMgewotCXZvaWQgKCp0aW1lX2luaXQpKHZvaWQpOwotCi0JLyogU2V0IGFuZCBzZXQgdGltZSBvZiBkYXkgKi8KLQl1bnNpZ25lZCBsb25nICgqZ2V0X3dhbGxjbG9jaykodm9pZCk7Ci0JaW50ICgqc2V0X3dhbGxjbG9jaykodW5zaWduZWQgbG9uZyk7Ci0KLQl1bnNpZ25lZCBsb25nIGxvbmcgKCpzY2hlZF9jbG9jaykodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyAoKmdldF90c2Nfa2h6KSh2b2lkKTsKLX07Ci0KLXN0cnVjdCBwdl9jcHVfb3BzIHsKLQkvKiBob29rcyBmb3IgdmFyaW91cyBwcml2aWxlZ2VkIGluc3RydWN0aW9ucyAqLwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfZGVidWdyZWcpKGludCByZWdubyk7Ci0Jdm9pZCAoKnNldF9kZWJ1Z3JlZykoaW50IHJlZ25vLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKLQotCXZvaWQgKCpjbHRzKSh2b2lkKTsKLQotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMCkodm9pZCk7Ci0Jdm9pZCAoKndyaXRlX2NyMCkodW5zaWduZWQgbG9uZyk7Ci0KLQl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjRfc2FmZSkodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyAoKnJlYWRfY3I0KSh2b2lkKTsKLQl2b2lkICgqd3JpdGVfY3I0KSh1bnNpZ25lZCBsb25nKTsKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjgpKHZvaWQpOwotCXZvaWQgKCp3cml0ZV9jcjgpKHVuc2lnbmVkIGxvbmcpOwotI2VuZGlmCi0KLQkvKiBTZWdtZW50IGRlc2NyaXB0b3IgaGFuZGxpbmcgKi8KLQl2b2lkICgqbG9hZF90cl9kZXNjKSh2b2lkKTsKLQl2b2lkICgqbG9hZF9nZHQpKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKTsKLQl2b2lkICgqbG9hZF9pZHQpKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKTsKLQl2b2lkICgqc3RvcmVfZ2R0KShzdHJ1Y3QgZGVzY19wdHIgKik7Ci0Jdm9pZCAoKnN0b3JlX2lkdCkoc3RydWN0IGRlc2NfcHRyICopOwotCXZvaWQgKCpzZXRfbGR0KShjb25zdCB2b2lkICpkZXNjLCB1bnNpZ25lZCBlbnRyaWVzKTsKLQl1bnNpZ25lZCBsb25nICgqc3RvcmVfdHIpKHZvaWQpOwotCXZvaWQgKCpsb2FkX3Rscykoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsIHVuc2lnbmVkIGludCBjcHUpOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQl2b2lkICgqbG9hZF9nc19pbmRleCkodW5zaWduZWQgaW50IGlkeCk7Ci0jZW5kaWYKLQl2b2lkICgqd3JpdGVfbGR0X2VudHJ5KShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgaW50IGVudHJ5bnVtLAotCQkJCWNvbnN0IHZvaWQgKmRlc2MpOwotCXZvaWQgKCp3cml0ZV9nZHRfZW50cnkpKHN0cnVjdCBkZXNjX3N0cnVjdCAqLAotCQkJCWludCBlbnRyeW51bSwgY29uc3Qgdm9pZCAqZGVzYywgaW50IHNpemUpOwotCXZvaWQgKCp3cml0ZV9pZHRfZW50cnkpKGdhdGVfZGVzYyAqLAotCQkJCWludCBlbnRyeW51bSwgY29uc3QgZ2F0ZV9kZXNjICpnYXRlKTsKLQl2b2lkICgqYWxsb2NfbGR0KShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgdW5zaWduZWQgZW50cmllcyk7Ci0Jdm9pZCAoKmZyZWVfbGR0KShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmxkdCwgdW5zaWduZWQgZW50cmllcyk7Ci0KLQl2b2lkICgqbG9hZF9zcDApKHN0cnVjdCB0c3Nfc3RydWN0ICp0c3MsIHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0KTsKLQotCXZvaWQgKCpzZXRfaW9wbF9tYXNrKSh1bnNpZ25lZCBtYXNrKTsKLQotCXZvaWQgKCp3YmludmQpKHZvaWQpOwotCXZvaWQgKCppb19kZWxheSkodm9pZCk7Ci0KLQkvKiBjcHVpZCBlbXVsYXRpb24sIG1vc3RseSBzbyB0aGF0IGNhcHMgYml0cyBjYW4gYmUgZGlzYWJsZWQgKi8KLQl2b2lkICgqY3B1aWQpKHVuc2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKLQkJICAgICAgdW5zaWduZWQgaW50ICplY3gsIHVuc2lnbmVkIGludCAqZWR4KTsKLQotCS8qIE1TUiwgUE1DIGFuZCBUU1Igb3BlcmF0aW9ucy4KLQkgICBlcnIgPSAwLy1FRkFVTFQuICB3cm1zciByZXR1cm5zIDAvLUVGQVVMVC4gKi8KLQl1NjQgKCpyZWFkX21zcl9hbWQpKHVuc2lnbmVkIGludCBtc3IsIGludCAqZXJyKTsKLQl1NjQgKCpyZWFkX21zcikodW5zaWduZWQgaW50IG1zciwgaW50ICplcnIpOwotCWludCAoKndyaXRlX21zcikodW5zaWduZWQgaW50IG1zciwgdW5zaWduZWQgbG93LCB1bnNpZ25lZCBoaWdoKTsKLQotCXU2NCAoKnJlYWRfdHNjKSh2b2lkKTsKLQl1NjQgKCpyZWFkX3BtYykoaW50IGNvdW50ZXIpOwotCXVuc2lnbmVkIGxvbmcgbG9uZyAoKnJlYWRfdHNjcCkodW5zaWduZWQgaW50ICphdXgpOwotCi0JLyoKLQkgKiBBdG9taWNhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZXR1cm4gdG8gdXNlcnNwYWNlLiAgVGhpcwotCSAqIGlzIG9ubHkgZXZlciB1c2VkIHRvIHJldHVybiB0byAzMi1iaXQgcHJvY2Vzc2VzOyBpbiBhCi0JICogNjQtYml0IGtlcm5lbCwgaXQncyB1c2VkIGZvciAzMi1vbi02NCBjb21wYXQgcHJvY2Vzc2VzLCBidXQKLQkgKiBuZXZlciBuYXRpdmUgNjQtYml0IHByb2Nlc3Nlcy4gIChKdW1wLCBub3QgY2FsbC4pCi0JICovCi0Jdm9pZCAoKmlycV9lbmFibGVfc3lzZXhpdCkodm9pZCk7Ci0KLQkvKgotCSAqIFN3aXRjaCB0byB1c2VybW9kZSBncyBhbmQgcmV0dXJuIHRvIDY0LWJpdCB1c2VybW9kZSB1c2luZwotCSAqIHN5c3JldC4gIE9ubHkgdXNlZCBpbiA2NC1iaXQga2VybmVscyB0byByZXR1cm4gdG8gNjQtYml0Ci0JICogcHJvY2Vzc2VzLiAgVXNlcm1vZGUgcmVnaXN0ZXIgc3RhdGUsIGluY2x1ZGluZyAlcnNwLCBtdXN0Ci0JICogYWxyZWFkeSBiZSByZXN0b3JlZC4KLQkgKi8KLQl2b2lkICgqdXNlcmdzX3N5c3JldDY0KSh2b2lkKTsKLQotCS8qCi0JICogU3dpdGNoIHRvIHVzZXJtb2RlIGdzIGFuZCByZXR1cm4gdG8gMzItYml0IHVzZXJtb2RlIHVzaW5nCi0JICogc3lzcmV0LiAgVXNlZCB0byByZXR1cm4gdG8gMzItb24tNjQgY29tcGF0IHByb2Nlc3Nlcy4KLQkgKiBPdGhlciB1c2VybW9kZSByZWdpc3RlciBzdGF0ZSwgaW5jbHVkaW5nICVlc3AsIG11c3QgYWxyZWFkeQotCSAqIGJlIHJlc3RvcmVkLgotCSAqLwotCXZvaWQgKCp1c2VyZ3Nfc3lzcmV0MzIpKHZvaWQpOwotCi0JLyogTm9ybWFsIGlyZXQuICBKdW1wIHRvIHRoaXMgd2l0aCB0aGUgc3RhbmRhcmQgaXJldCBzdGFjawotCSAgIGZyYW1lIHNldCB1cC4gKi8KLQl2b2lkICgqaXJldCkodm9pZCk7Ci0KLQl2b2lkICgqc3dhcGdzKSh2b2lkKTsKLQotCXZvaWQgKCpzdGFydF9jb250ZXh0X3N3aXRjaCkoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KTsKLQl2b2lkICgqZW5kX2NvbnRleHRfc3dpdGNoKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpOwotfTsKLQotc3RydWN0IHB2X2lycV9vcHMgewotCXZvaWQgKCppbml0X0lSUSkodm9pZCk7Ci0KLQkvKgotCSAqIEdldC9zZXQgaW50ZXJydXB0IHN0YXRlLiAgc2F2ZV9mbCBhbmQgcmVzdG9yZV9mbCBhcmUgb25seQotCSAqIGV4cGVjdGVkIHRvIHVzZSBYODZfRUZMQUdTX0lGOyBhbGwgb3RoZXIgYml0cwotCSAqIHJldHVybmVkIGZyb20gc2F2ZV9mbCBhcmUgdW5kZWZpbmVkLCBhbmQgbWF5IGJlIGlnbm9yZWQgYnkKLQkgKiByZXN0b3JlX2ZsLgotCSAqCi0JICogTk9URTogVGhlc2UgZnVuY3Rpb25zIGNhbGxlcnMgZXhwZWN0IHRoZSBjYWxsZWUgdG8gcHJlc2VydmUKLQkgKiBtb3JlIHJlZ2lzdGVycyB0aGFuIHRoZSBzdGFuZGFyZCBDIGNhbGxpbmcgY29udmVudGlvbi4KLQkgKi8KLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgc2F2ZV9mbDsKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcmVzdG9yZV9mbDsKLQlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgaXJxX2Rpc2FibGU7Ci0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIGlycV9lbmFibGU7Ci0KLQl2b2lkICgqc2FmZV9oYWx0KSh2b2lkKTsKLQl2b2lkICgqaGFsdCkodm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0Jdm9pZCAoKmFkanVzdF9leGNlcHRpb25fZnJhbWUpKHZvaWQpOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgcHZfYXBpY19vcHMgewotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXZvaWQgKCpzZXR1cF9ib290X2Nsb2NrKSh2b2lkKTsKLQl2b2lkICgqc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKSh2b2lkKTsKLQotCXZvaWQgKCpzdGFydHVwX2lwaV9ob29rKShpbnQgcGh5c19hcGljaWQsCi0JCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwLAotCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X2VzcCk7Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBwdl9tbXVfb3BzIHsKLQkvKgotCSAqIENhbGxlZCBiZWZvcmUvYWZ0ZXIgaW5pdF9tbSBwYWdldGFibGUgc2V0dXAuIHNldHVwX3N0YXJ0Ci0JICogbWF5IHJlc2V0ICVjcjMsIGFuZCBtYXkgcHJlLWluc3RhbGwgcGFydHMgb2YgdGhlIHBhZ2V0YWJsZTsKLQkgKiBwYWdldGFibGUgc2V0dXAgaXMgZXhwZWN0ZWQgdG8gcHJlc2VydmUgYW55IGV4aXN0aW5nCi0JICogbWFwcGluZy4KLQkgKi8KLQl2b2lkICgqcGFnZXRhYmxlX3NldHVwX3N0YXJ0KShwZ2RfdCAqcGdkX2Jhc2UpOwotCXZvaWQgKCpwYWdldGFibGVfc2V0dXBfZG9uZSkocGdkX3QgKnBnZF9iYXNlKTsKLQotCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMikodm9pZCk7Ci0Jdm9pZCAoKndyaXRlX2NyMikodW5zaWduZWQgbG9uZyk7Ci0KLQl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjMpKHZvaWQpOwotCXZvaWQgKCp3cml0ZV9jcjMpKHVuc2lnbmVkIGxvbmcpOwotCi0JLyoKLQkgKiBIb29rcyBmb3IgaW50ZXJjZXB0aW5nIHRoZSBjcmVhdGlvbi91c2UvZGVzdHJ1Y3Rpb24gb2YgYW4KLQkgKiBtbV9zdHJ1Y3QuCi0JICovCi0Jdm9pZCAoKmFjdGl2YXRlX21tKShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAotCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpOwotCXZvaWQgKCpkdXBfbW1hcCkoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sCi0JCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCXZvaWQgKCpleGl0X21tYXApKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLQotCi0JLyogVExCIG9wZXJhdGlvbnMgKi8KLQl2b2lkICgqZmx1c2hfdGxiX3VzZXIpKHZvaWQpOwotCXZvaWQgKCpmbHVzaF90bGJfa2VybmVsKSh2b2lkKTsKLQl2b2lkICgqZmx1c2hfdGxiX3NpbmdsZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKLQl2b2lkICgqZmx1c2hfdGxiX290aGVycykoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsCi0JCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSB1bnNpZ25lZCBsb25nIHZhKTsKLQotCS8qIEhvb2tzIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcGFnZXRhYmxlIHRvcC1sZXZlbCAqLwotCWludCAgKCpwZ2RfYWxsb2MpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLQl2b2lkICgqcGdkX2ZyZWUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKLQotCS8qCi0JICogSG9va3MgZm9yIGFsbG9jYXRpbmcvcmVsZWFzaW5nIHBhZ2V0YWJsZSBwYWdlcyB3aGVuIHRoZXkncmUKLQkgKiBhdHRhY2hlZCB0byBhIHBhZ2V0YWJsZQotCSAqLwotCXZvaWQgKCphbGxvY19wdGUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbik7Ci0Jdm9pZCAoKmFsbG9jX3BtZCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqYWxsb2NfcG1kX2Nsb25lKSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBjbG9uZXBmbiwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0Jdm9pZCAoKmFsbG9jX3B1ZCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqcmVsZWFzZV9wdGUpKHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqcmVsZWFzZV9wbWQpKHVuc2lnbmVkIGxvbmcgcGZuKTsKLQl2b2lkICgqcmVsZWFzZV9wdWQpKHVuc2lnbmVkIGxvbmcgcGZuKTsKLQotCS8qIFBhZ2V0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICovCi0Jdm9pZCAoKnNldF9wdGUpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKCpzZXRfcHRlX2F0KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7Ci0Jdm9pZCAoKnNldF9wbWQpKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpOwotCXZvaWQgKCpwdGVfdXBkYXRlKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgcHRlX3QgKnB0ZXApOwotCXZvaWQgKCpwdGVfdXBkYXRlX2RlZmVyKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7Ci0KLQlwdGVfdCAoKnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCXB0ZV90ICpwdGVwKTsKLQl2b2lkICgqcHRlcF9tb2RpZnlfcHJvdF9jb21taXQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOwotCi0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHB0ZV92YWw7Ci0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcHRlOwotCi0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHBnZF92YWw7Ci0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcGdkOwotCi0jaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCi0jaWZkZWYgQ09ORklHX1g4Nl9QQUUKLQl2b2lkICgqc2V0X3B0ZV9hdG9taWMpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOwotCXZvaWQgKCpwdGVfY2xlYXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgIHB0ZV90ICpwdGVwKTsKLQl2b2lkICgqcG1kX2NsZWFyKShwbWRfdCAqcG1kcCk7Ci0KLSNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLwotCi0Jdm9pZCAoKnNldF9wdWQpKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWR2YWwpOwotCi0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHBtZF92YWw7Ci0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcG1kOwotCi0jaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0Ci0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHB1ZF92YWw7Ci0Jc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcHVkOwotCi0Jdm9pZCAoKnNldF9wZ2QpKHBnZF90ICpwdWRwLCBwZ2RfdCBwZ2R2YWwpOwotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLwotI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPj0gMyAqLwotCi0jaWZkZWYgQ09ORklHX0hJR0hQVEUKLQl2b2lkICooKmttYXBfYXRvbWljX3B0ZSkoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKLSNlbmRpZgotCi0Jc3RydWN0IHB2X2xhenlfb3BzIGxhenlfbW9kZTsKLQotCS8qIGRvbTAgb3BzICovCi0KLQkvKiBTb21ldGltZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgYSBwZm4sIGFuZCBzb21ldGltZXMgaXRzCi0JICAgYW4gbWZuLiAgV2UgY2FuIHRlbGwgd2hpY2ggaXMgd2hpY2ggZnJvbSB0aGUgaW5kZXguICovCi0Jdm9pZCAoKnNldF9maXhtYXApKHVuc2lnbmVkIC8qIGVudW0gZml4ZWRfYWRkcmVzc2VzICovIGlkeCwKLQkJCSAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IGZsYWdzKTsKLX07Ci0KLXN0cnVjdCByYXdfc3BpbmxvY2s7Ci1zdHJ1Y3QgcHZfbG9ja19vcHMgewotCWludCAoKnNwaW5faXNfbG9ja2VkKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKLQlpbnQgKCpzcGluX2lzX2NvbnRlbmRlZCkoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7Ci0Jdm9pZCAoKnNwaW5fbG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7Ci0Jdm9pZCAoKnNwaW5fbG9ja19mbGFncykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0JaW50ICgqc3Bpbl90cnlsb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKLQl2b2lkICgqc3Bpbl91bmxvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOwotfTsKLQotLyogVGhpcyBjb250YWlucyBhbGwgdGhlIHBhcmF2aXJ0IHN0cnVjdHVyZXM6IHdlIGdldCBhIGNvbnZlbmllbnQKLSAqIG51bWJlciBmb3IgZWFjaCBmdW5jdGlvbiB1c2luZyB0aGUgb2Zmc2V0IHdoaWNoIHdlIHVzZSB0byBpbmRpY2F0ZQotICogd2hhdCB0byBwYXRjaC4gKi8KLXN0cnVjdCBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSB7Ci0Jc3RydWN0IHB2X2luaXRfb3BzIHB2X2luaXRfb3BzOwotCXN0cnVjdCBwdl90aW1lX29wcyBwdl90aW1lX29wczsKLQlzdHJ1Y3QgcHZfY3B1X29wcyBwdl9jcHVfb3BzOwotCXN0cnVjdCBwdl9pcnFfb3BzIHB2X2lycV9vcHM7Ci0Jc3RydWN0IHB2X2FwaWNfb3BzIHB2X2FwaWNfb3BzOwotCXN0cnVjdCBwdl9tbXVfb3BzIHB2X21tdV9vcHM7Ci0Jc3RydWN0IHB2X2xvY2tfb3BzIHB2X2xvY2tfb3BzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBwdl9pbmZvIHB2X2luZm87Ci1leHRlcm4gc3RydWN0IHB2X2luaXRfb3BzIHB2X2luaXRfb3BzOwotZXh0ZXJuIHN0cnVjdCBwdl90aW1lX29wcyBwdl90aW1lX29wczsKLWV4dGVybiBzdHJ1Y3QgcHZfY3B1X29wcyBwdl9jcHVfb3BzOwotZXh0ZXJuIHN0cnVjdCBwdl9pcnFfb3BzIHB2X2lycV9vcHM7Ci1leHRlcm4gc3RydWN0IHB2X2FwaWNfb3BzIHB2X2FwaWNfb3BzOwotZXh0ZXJuIHN0cnVjdCBwdl9tbXVfb3BzIHB2X21tdV9vcHM7Ci1leHRlcm4gc3RydWN0IHB2X2xvY2tfb3BzIHB2X2xvY2tfb3BzOwotCi0jZGVmaW5lIFBBUkFWSVJUX1BBVENIKHgpCQkJCQlcCi0JKG9mZnNldG9mKHN0cnVjdCBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSwgeCkgLyBzaXplb2Yodm9pZCAqKSkKLQotI2RlZmluZSBwYXJhdmlydF90eXBlKG9wKQkJCQlcCi0JW3BhcmF2aXJ0X3R5cGVudW1dICJpIiAoUEFSQVZJUlRfUEFUQ0gob3ApKSwJXAotCVtwYXJhdmlydF9vcHB0cl0gImkiICgmKG9wKSkKLSNkZWZpbmUgcGFyYXZpcnRfY2xvYmJlcihjbG9iYmVyKQkJXAotCVtwYXJhdmlydF9jbG9iYmVyXSAiaSIgKGNsb2JiZXIpCi0KLS8qCi0gKiBHZW5lcmF0ZSBzb21lIGNvZGUsIGFuZCBtYXJrIGl0IGFzIHBhdGNoYWJsZSBieSB0aGUKLSAqIGFwcGx5X3BhcmF2aXJ0KCkgYWx0ZXJuYXRlIGluc3RydWN0aW9uIHBhdGNoZXIuCi0gKi8KLSNkZWZpbmUgX3BhcmF2aXJ0X2FsdChpbnNuX3N0cmluZywgdHlwZSwgY2xvYmJlcikJXAotCSI3NzE6XG5cdCIgaW5zbl9zdHJpbmcgIlxuIiAiNzcyOlxuIgkJXAotCSIucHVzaHNlY3Rpb24gLnBhcmFpbnN0cnVjdGlvbnMsXCJhXCJcbiIJXAotCV9BU01fQUxJR04gIlxuIgkJCQkJXAotCV9BU01fUFRSICIgNzcxYlxuIgkJCQlcCi0JIiAgLmJ5dGUgIiB0eXBlICJcbiIJCQkJXAotCSIgIC5ieXRlIDc3MmItNzcxYlxuIgkJCQlcCi0JIiAgLnNob3J0ICIgY2xvYmJlciAiXG4iCQkJXAotCSIucG9wc2VjdGlvblxuIgotCi0vKiBHZW5lcmF0ZSBwYXRjaGFibGUgY29kZSwgd2l0aCB0aGUgZGVmYXVsdCBhc20gcGFyYW1ldGVycy4gKi8KLSNkZWZpbmUgcGFyYXZpcnRfYWx0KGluc25fc3RyaW5nKQkJCQkJXAotCV9wYXJhdmlydF9hbHQoaW5zbl9zdHJpbmcsICIlY1twYXJhdmlydF90eXBlbnVtXSIsICIlY1twYXJhdmlydF9jbG9iYmVyXSIpCi0KLS8qIFNpbXBsZSBpbnN0cnVjdGlvbiBwYXRjaGluZyBjb2RlLiAqLwotI2RlZmluZSBERUZfTkFUSVZFKG9wcywgbmFtZSwgY29kZSkgCQkJCQlcCi0JZXh0ZXJuIGNvbnN0IGNoYXIgc3RhcnRfIyNvcHMjI18jI25hbWVbXSwgZW5kXyMjb3BzIyNfIyNuYW1lW107CVwKLQlhc20oInN0YXJ0XyIgI29wcyAiXyIgI25hbWUgIjogIiBjb2RlICI7IGVuZF8iICNvcHMgIl8iICNuYW1lICI6IikKLQotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfbm9wKHZvaWQpOwotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfMzIodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKTsKLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lkZW50XzY0KHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbik7Ci11bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZ25vcmUodW5zaWduZWQgbGVuKTsKLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2NhbGwodm9pZCAqaW5zbmJ1ZiwKLQkJCSAgICAgY29uc3Qgdm9pZCAqdGFyZ2V0LCB1MTYgdGd0X2Nsb2JiZXJzLAotCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBzaXRlX2Nsb2JiZXJzLAotCQkJICAgICB1bnNpZ25lZCBsZW4pOwotdW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfam1wKHZvaWQgKmluc25idWYsIGNvbnN0IHZvaWQgKnRhcmdldCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7Ci11bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9kZWZhdWx0KHU4IHR5cGUsIHUxNiBjbG9iYmVycywgdm9pZCAqaW5zbmJ1ZiwKLQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7Ci0KLXVuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2luc25zKHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbiwKLQkJCSAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpOwotCi11bnNpZ25lZCBuYXRpdmVfcGF0Y2godTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppYnVmLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7Ci0KLWludCBwYXJhdmlydF9kaXNhYmxlX2lvc3BhY2Uodm9pZCk7Ci0KLS8qCi0gKiBUaGlzIGdlbmVyYXRlcyBhbiBpbmRpcmVjdCBjYWxsIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24gdHlwZSBudW1iZXIuCi0gKiBUaGUgdHlwZSBudW1iZXIsIGNvbXB1dGVkIGluIFBBUkFWSVJUX1BBVENILCBpcyBkZXJpdmVkIGZyb20gdGhlCi0gKiBvZmZzZXQgaW50byB0aGUgcGFyYXZpcnRfcGF0Y2hfdGVtcGxhdGUgc3RydWN0dXJlLCBhbmQgY2FuIHRoZXJlZm9yZSBiZQotICogZnJlZWx5IGNvbnZlcnRlZCBiYWNrIGludG8gYSBzdHJ1Y3R1cmUgb2Zmc2V0LgotICovCi0jZGVmaW5lIFBBUkFWSVJUX0NBTEwJImNhbGwgKiVjW3BhcmF2aXJ0X29wcHRyXTsiCi0KLS8qCi0gKiBUaGVzZSBtYWNyb3MgYXJlIGludGVuZGVkIHRvIHdyYXAgY2FsbHMgdGhyb3VnaCBvbmUgb2YgdGhlIHBhcmF2aXJ0Ci0gKiBvcHMgc3RydWN0cywgc28gdGhhdCB0aGV5IGNhbiBiZSBsYXRlciBpZGVudGlmaWVkIGFuZCBwYXRjaGVkIGF0Ci0gKiBydW50aW1lLgotICoKLSAqIE5vcm1hbGx5LCBhIGNhbGwgdG8gYSBwdl9vcCBmdW5jdGlvbiBpcyBhIHNpbXBsZSBpbmRpcmVjdCBjYWxsOgotICogKHB2X29wX3N0cnVjdC5vcGVyYXRpb25zKShhcmdzLi4uKS4KLSAqCi0gKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzbG93IG9wZXJhdGlvbiBmb3IgbW9kZXJuIENQVXMsCi0gKiBiZWNhdXNlIGl0IGNhbm5vdCBuZWNlc3NhcmlseSBkZXRlcm1pbmUgd2hhdCB0aGUgZGVzdGluYXRpb24KLSAqIGFkZHJlc3MgaXMuICBJbiB0aGlzIGNhc2UsIHRoZSBhZGRyZXNzIGlzIGEgcnVudGltZSBjb25zdGFudCwgc28gYXQKLSAqIHRoZSB2ZXJ5IGxlYXN0IHdlIGNhbiBwYXRjaCB0aGUgY2FsbCB0byBlIGEgc2ltcGxlIGRpcmVjdCBjYWxsLCBvcgotICogaWRlYWxseSwgcGF0Y2ggYW4gaW5saW5lIGltcGxlbWVudGF0aW9uIGludG8gdGhlIGNhbGxzaXRlLiAgKERpcmVjdAotICogY2FsbHMgYXJlIGVzc2VudGlhbGx5IGZyZWUsIGJlY2F1c2UgdGhlIGNhbGwgYW5kIHJldHVybiBhZGRyZXNzZXMKLSAqIGFyZSBjb21wbGV0ZWx5IHByZWRpY3RhYmxlLikKLSAqCi0gKiBGb3IgaTM4NiwgdGhlc2UgbWFjcm9zIHJlbHkgb24gdGhlIHN0YW5kYXJkIGdjYyAicmVncGFybSgzKSIgY2FsbGluZwotICogY29udmVudGlvbiwgaW4gd2hpY2ggdGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluICVlYXgsCi0gKiAlZWR4LCAlZWN4IChpbiB0aGF0IG9yZGVyKSwgYW5kIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBwbGFjZWQKLSAqIG9uIHRoZSBzdGFjay4gIEFsbCBjYWxsZXItc2F2ZSByZWdpc3RlcnMgKGVheCxlZHgsZWN4KSBhcmUgZXhwZWN0ZWQKLSAqIHRvIGJlIG1vZGlmaWVkIChlaXRoZXIgY2xvYmJlcmVkIG9yIHVzZWQgZm9yIHJldHVybiB2YWx1ZXMpLgotICogWDg2XzY0LCBvbiB0aGUgb3RoZXIgaGFuZCwgYWxyZWFkeSBzcGVjaWZpZXMgYSByZWdpc3Rlci1iYXNlZCBjYWxsaW5nCi0gKiBjb252ZW50aW9ucywgcmV0dXJuaW5nIGF0ICVyYXgsIHdpdGggcGFyYW1ldGVyZXMgZ29pbmcgb24gJXJkaSwgJXJzaSwKLSAqICVyZHgsIGFuZCAlcmN4LiBOb3RlIHRoYXQgZm9yIHRoaXMgcmVhc29uLCB4ODZfNjQgZG9lcyBub3QgbmVlZCBhbnkKLSAqIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGRlYWxpbmcgd2l0aCA0IGFyZ3VtZW50cywgdW5saWtlIGkzODYuCi0gKiBIb3dldmVyLCB4ODZfNjQgYWxzbyBoYXZlIHRvIGNsb2JiZXIgYWxsIGNhbGxlciBzYXZlZCByZWdpc3RlcnMsIHdoaWNoCi0gKiB1bmZvcnR1bmF0ZWx5LCBhcmUgcXVpdGUgYSBiaXQgKHI4IC0gcjExKQotICoKLSAqIFRoZSBjYWxsIGluc3RydWN0aW9uIGl0c2VsZiBpcyBtYXJrZWQgYnkgcGxhY2luZyBpdHMgc3RhcnQgYWRkcmVzcwotICogYW5kIHNpemUgaW50byB0aGUgLnBhcmFpbnN0cnVjdGlvbnMgc2VjdGlvbiwgc28gdGhhdAotICogYXBwbHlfcGFyYXZpcnQoKSBpbiBhcmNoL2kzODYva2VybmVsL2FsdGVybmF0aXZlLmMgY2FuIGRvIHRoZQotICogYXBwcm9wcmlhdGUgcGF0Y2hpbmcgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIGJhY2tlbmQgcHZfaW5pdF9vcHMKLSAqIGltcGxlbWVudGF0aW9uLgotICoKLSAqIFVuZm9ydHVuYXRlbHkgdGhlcmUncyBubyB3YXkgdG8gZ2V0IGdjYyB0byBnZW5lcmF0ZSB0aGUgYXJncyBzZXR1cAotICogZm9yIHRoZSBjYWxsLCBhbmQgdGhlbiBhbGxvdyB0aGUgY2FsbCBpdHNlbGYgdG8gYmUgZ2VuZXJhdGVkIGJ5IGFuCi0gKiBpbmxpbmUgYXNtLiAgQmVjYXVzZSBvZiB0aGlzLCB3ZSBtdXN0IGRvIHRoZSBjb21wbGV0ZSBhcmcgc2V0dXAgYW5kCi0gKiByZXR1cm4gdmFsdWUgaGFuZGxpbmcgZnJvbSB3aXRoaW4gdGhlc2UgbWFjcm9zLiAgVGhpcyBpcyBmYWlybHkKLSAqIGN1bWJlcnNvbWUuCi0gKgotICogVGhlcmUgYXJlIDUgc2V0cyBvZiBQVk9QXyogbWFjcm9zIGZvciBkZWFsaW5nIHdpdGggMC00IGFyZ3VtZW50cy4KLSAqIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIG1vcmUgYXJndW1lbnRzLCBidXQgdGhlcmUgd291bGQgYmUgbGl0dGxlCi0gKiB0byBiZSBnYWluZWQgZnJvbSB0aGF0LiAgRm9yIGVhY2ggbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlcmUgYXJlCi0gKiB0aGUgdHdvIFZDQUxMIGFuZCBDQUxMIHZhcmlhbnRzIGZvciB2b2lkIGFuZCBub24tdm9pZCBmdW5jdGlvbnMuCi0gKgotICogV2hlbiB0aGVyZSBpcyBhIHJldHVybiB2YWx1ZSwgdGhlIGludm9rZXIgb2YgdGhlIG1hY3JvIG11c3Qgc3BlY2lmeQotICogdGhlIHJldHVybiB0eXBlLiAgVGhlIG1hY3JvIHRoZW4gdXNlcyBzaXplb2YoKSBvbiB0aGF0IHR5cGUgdG8KLSAqIGRldGVybWluZSB3aGV0aGVyIGl0cyBhIDMyIG9yIDY0IGJpdCB2YWx1ZSwgYW5kIHBsYWNlcyB0aGUgcmV0dXJuCi0gKiBpbiB0aGUgcmlnaHQgcmVnaXN0ZXIocykgKGp1c3QgJWVheCBmb3IgMzItYml0LCBhbmQgJWVkeDolZWF4IGZvcgotICogNjQtYml0KS4gRm9yIHg4Nl82NCBtYWNoaW5lcywgaXQganVzdCByZXR1cm5zIGF0ICVyYXggcmVnYXJkbGVzcyBvZgotICogdGhlIHJldHVybiB2YWx1ZSBzaXplLgotICoKLSAqIDY0LWJpdCBhcmd1bWVudHMgYXJlIHBhc3NlZCBhcyBhIHBhaXIgb2YgYWRqYWNlbnQgMzItYml0IGFyZ3VtZW50cwotICogaTM4NiBhbHNvIHBhc3NlcyA2NC1iaXQgYXJndW1lbnRzIGFzIGEgcGFpciBvZiBhZGphY2VudCAzMi1iaXQgYXJndW1lbnRzCi0gKiBpbiBsb3csaGlnaCBvcmRlcgotICoKLSAqIFNtYWxsIHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBhbmQgcmV0dXJuZWQgaW4gcmVnaXN0ZXJzLiAgVGhlIG1hY3JvCi0gKiBjYWxsaW5nIGNvbnZlbnRpb24gY2FuJ3QgZGlyZWN0bHkgZGVhbCB3aXRoIHRoaXMsIHNvIHRoZSB3cmFwcGVyCi0gKiBmdW5jdGlvbnMgbXVzdCBkbyB0aGlzLgotICoKLSAqIFRoZXNlIFBWT1BfKiBtYWNyb3MgYXJlIG9ubHkgZGVmaW5lZCB3aXRoaW4gdGhpcyBoZWFkZXIuICBUaGlzCi0gKiBtZWFucyB0aGF0IGFsbCB1c2VzIG11c3QgYmUgd3JhcHBlZCBpbiBpbmxpbmUgZnVuY3Rpb25zLiAgVGhpcyBhbHNvCi0gKiBtYWtlcyBzdXJlIHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcgdHlwZXMgYXJlIGFsd2F5cyBjb3JyZWN0LgotICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJXAotCXVuc2lnbmVkIGxvbmcgX19lYXggPSBfX2VheCwgX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAotI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJCVBWT1BfVkNBTExfQVJHUwotCi0jZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiYSIgKCh1bnNpZ25lZCBsb25nKSh4KSkKLSNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJkIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQotI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImMiICgodW5zaWduZWQgbG9uZykoeCkpCi0KLSNkZWZpbmUgUFZPUF9WQ0FMTF9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCksCVwKLQkJCQkJIj1jIiAoX19lY3gpCi0jZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwkJUFZPUF9WQ0FMTF9DTE9CQkVSUwotCi0jZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCkKLSNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJCVBWT1BfVkNBTExFRV9DTE9CQkVSUwotCi0jZGVmaW5lIEVYVFJBX0NMT0JCRVJTCi0jZGVmaW5lIFZFWFRSQV9DTE9CQkVSUwotI2Vsc2UgIC8qIENPTkZJR19YODZfNjQgKi8KLSNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX2VkaSA9IF9fZWRpLCBfX2VzaSA9IF9fZXNpLAlcCi0JCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gKLSNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUywgX19lYXgKLQotI2RlZmluZSBQVk9QX0NBTExfQVJHMSh4KQkJIkQiICgodW5zaWduZWQgbG9uZykoeCkpCi0jZGVmaW5lIFBWT1BfQ0FMTF9BUkcyKHgpCQkiUyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKLSNkZWZpbmUgUFZPUF9DQUxMX0FSRzMoeCkJCSJkIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQotI2RlZmluZSBQVk9QX0NBTExfQVJHNCh4KQkJImMiICgodW5zaWduZWQgbG9uZykoeCkpCi0KLSNkZWZpbmUgUFZPUF9WQ0FMTF9DTE9CQkVSUwkiPUQiIChfX2VkaSksCQkJCVwKLQkJCQkiPVMiIChfX2VzaSksICI9ZCIgKF9fZWR4KSwJCVwKLQkJCQkiPWMiIChfX2VjeCkKLSNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCVBWT1BfVkNBTExfQ0xPQkJFUlMsICI9YSIgKF9fZWF4KQotCi0jZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkiPWEiIChfX2VheCkKLSNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCi0KLSNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMJICwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiCi0jZGVmaW5lIFZFWFRSQV9DTE9CQkVSUwkgLCAicmF4IiwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiCi0jZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLwotCi0jaWZkZWYgQ09ORklHX1BBUkFWSVJUX0RFQlVHCi0jZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQlCVUdfT04ob3AgPT0gTlVMTCkKLSNlbHNlCi0jZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQkoKHZvaWQpb3ApCi0jZW5kaWYKLQotI2RlZmluZSBfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBjbGJyLCBjYWxsX2NsYnIsIGV4dHJhX2NsYnIsCQlcCi0JCSAgICAgIHByZSwgcG9zdCwgLi4uKQkJCQkJXAotCSh7CQkJCQkJCQlcCi0JCXJldHR5cGUgX19yZXQ7CQkJCQkJXAotCQlQVk9QX0NBTExfQVJHUzsJCQkJCQlcCi0JCVBWT1BfVEVTVF9OVUxMKG9wKTsJCQkJCVwKLQkJLyogVGhpcyBpcyAzMi1iaXQgc3BlY2lmaWMsIGJ1dCBpcyBva2F5IGluIDY0LWJpdCAqLwlcCi0JCS8qIHNpbmNlIHRoaXMgY29uZGl0aW9uIHdpbGwgbmV2ZXIgaG9sZCAqLwkJXAotCQlpZiAoc2l6ZW9mKHJldHR5cGUpID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CQlcCi0JCQlhc20gdm9sYXRpbGUocHJlCQkJCVwKLQkJCQkgICAgIHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQlcCi0JCQkJICAgICBwb3N0CQkJCVwKLQkJCQkgICAgIDogY2FsbF9jbGJyCQkJXAotCQkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCVwKLQkJCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihjbGJyKSwJCVwKLQkJCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCVwKLQkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKLQkJCV9fcmV0ID0gKHJldHR5cGUpKCgoKHU2NClfX2VkeCkgPDwgMzIpIHwgX19lYXgpOyBcCi0JCX0gZWxzZSB7CQkJCQkJXAotCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCi0JCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAotCQkJCSAgICAgcG9zdAkJCQlcCi0JCQkJICAgICA6IGNhbGxfY2xicgkJCVwKLQkJCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQlcCi0JCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoY2xiciksCQlcCi0JCQkJICAgICAgICMjX19WQV9BUkdTX18JCQlcCi0JCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIGV4dHJhX2NsYnIpOwlcCi0JCQlfX3JldCA9IChyZXR0eXBlKV9fZWF4OwkJCQlcCi0JCX0JCQkJCQkJXAotCQlfX3JldDsJCQkJCQkJXAotCX0pCi0KLSNkZWZpbmUgX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKLQlfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBDTEJSX0FOWSwgUFZPUF9DQUxMX0NMT0JCRVJTLAlcCi0JCSAgICAgIEVYVFJBX0NMT0JCRVJTLCBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgX19QVk9QX0NBTExFRVNBVkUocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKLQlfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLmZ1bmMsIENMQlJfUkVUX1JFRywJCQlcCi0JCSAgICAgIFBWT1BfQ0FMTEVFX0NMT0JCRVJTLCAsCQkJCVwKLQkJICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQotCi0KLSNkZWZpbmUgX19fX1BWT1BfVkNBTEwob3AsIGNsYnIsIGNhbGxfY2xiciwgZXh0cmFfY2xiciwgcHJlLCBwb3N0LCAuLi4pCVwKLQkoewkJCQkJCQkJXAotCQlQVk9QX1ZDQUxMX0FSR1M7CQkJCQlcCi0JCVBWT1BfVEVTVF9OVUxMKG9wKTsJCQkJCVwKLQkJYXNtIHZvbGF0aWxlKHByZQkJCQkJXAotCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJCVwKLQkJCSAgICAgcG9zdAkJCQkJXAotCQkJICAgICA6IGNhbGxfY2xicgkJCQlcCi0JCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQkJXAotCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoY2xiciksCQkJXAotCQkJICAgICAgICMjX19WQV9BUkdTX18JCQkJXAotCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIGV4dHJhX2NsYnIpOwkJXAotCX0pCi0KLSNkZWZpbmUgX19QVk9QX1ZDQUxMKG9wLCBwcmUsIHBvc3QsIC4uLikJCQkJXAotCV9fX19QVk9QX1ZDQUxMKG9wLCBDTEJSX0FOWSwgUFZPUF9WQ0FMTF9DTE9CQkVSUywJCVwKLQkJICAgICAgIFZFWFRSQV9DTE9CQkVSUywJCQkJCVwKLQkJICAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKLQotI2RlZmluZSBfX1BWT1BfVkNBTExFRVNBVkUocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKLQlfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLmZ1bmMsIENMQlJfUkVUX1JFRywJCQlcCi0JCSAgICAgIFBWT1BfVkNBTExFRV9DTE9CQkVSUywgLAkJCQlcCi0JCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKLQotCi0KLSNkZWZpbmUgUFZPUF9DQUxMMChyZXR0eXBlLCBvcCkJCQkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIikKLSNkZWZpbmUgUFZPUF9WQ0FMTDAob3ApCQkJCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIikKLQotI2RlZmluZSBQVk9QX0NBTExFRTAocmV0dHlwZSwgb3ApCQkJCQlcCi0JX19QVk9QX0NBTExFRVNBVkUocmV0dHlwZSwgb3AsICIiLCAiIikKLSNkZWZpbmUgUFZPUF9WQ0FMTEVFMChvcCkJCQkJCQlcCi0JX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCAiIiwgIiIpCi0KLQotI2RlZmluZSBQVk9QX0NBTEwxKHJldHR5cGUsIG9wLCBhcmcxKQkJCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQotI2RlZmluZSBQVk9QX1ZDQUxMMShvcCwgYXJnMSkJCQkJCQlcCi0JX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQotCi0jZGVmaW5lIFBWT1BfQ0FMTEVFMShyZXR0eXBlLCBvcCwgYXJnMSkJCQkJCVwKLQlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTEVFMShvcCwgYXJnMSkJCQkJCQlcCi0JX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQotCi0KLSNkZWZpbmUgUFZPUF9DQUxMMihyZXR0eXBlLCBvcCwgYXJnMSwgYXJnMikJCQkJXAotCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJXAotCQkgICAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCi0jZGVmaW5lIFBWT1BfVkNBTEwyKG9wLCBhcmcxLCBhcmcyKQkJCQkJXAotCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCQlcCi0JCSAgICAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCi0KLSNkZWZpbmUgUFZPUF9DQUxMRUUyKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyKQkJCQlcCi0JX19QVk9QX0NBTExFRVNBVkUocmV0dHlwZSwgb3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCVwKLQkJCSAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCi0jZGVmaW5lIFBWT1BfVkNBTExFRTIob3AsIGFyZzEsIGFyZzIpCQkJCQlcCi0JX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJXAotCQkJICAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCi0KLQotI2RlZmluZSBQVk9QX0NBTEwzKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczKQkJCVwKLQlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCVwKLQkJICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTDMob3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQkJXAotCQkgICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKLQotLyogVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGluIHg4Nl82NC4gV2UgY2FuIG1ha2UgaXQgbXVjaCBzaW1wbGVyICovCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotI2RlZmluZSBQVk9QX0NBTEw0KHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKLQlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwJCQkJCVwKLQkJICAgICJwdXNoICVbX2FyZzRdOyIsICJsZWEgNCglJWVzcCksJSVlc3A7IiwJCVwKLQkJICAgIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLCBQVk9QX0NBTExfQVJHMihhcmcyKSwJCVwKLQkJICAgIFBWT1BfQ0FMTF9BUkczKGFyZzMpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKLSNkZWZpbmUgUFZPUF9WQ0FMTDQob3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJCVwKLQlfX1BWT1BfVkNBTEwob3AsCQkJCQkJXAotCQkgICAgInB1c2ggJVtfYXJnNF07IiwgImxlYSA0KCUlZXNwKSwlJWVzcDsiLAkJXAotCQkgICAgIjAiICgodTMyKShhcmcxKSksICIxIiAoKHUzMikoYXJnMikpLAkJXAotCQkgICAgIjIiICgodTMyKShhcmczKSksIFtfYXJnNF0gIm1yIiAoKHUzMikoYXJnNCkpKQotI2Vsc2UKLSNkZWZpbmUgUFZPUF9DQUxMNChyZXR0eXBlLCBvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQlcCi0JX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwJCQkJXAotCQkgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAkJXAotCQkgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFBWT1BfQ0FMTF9BUkc0KGFyZzQpKQotI2RlZmluZSBQVk9QX1ZDQUxMNChvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQkJXAotCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLAkJCQkJXAotCQkgICAgIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLCBQVk9QX0NBTExfQVJHMihhcmcyKSwJXAotCQkgICAgIFBWT1BfQ0FMTF9BUkczKGFyZzMpLCBQVk9QX0NBTExfQVJHNChhcmc0KSkKLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGludCBwYXJhdmlydF9lbmFibGVkKHZvaWQpCiB7CkBAIC04MjAsMTUgKzE0MiwyMiBAQAogewogCXJldHVybiBQVk9QX0NBTEwyKHU2NCwgcHZfY3B1X29wcy5yZWFkX21zciwgbXNyLCBlcnIpOwogfQotc3RhdGljIGlubGluZSB1NjQgcGFyYXZpcnRfcmVhZF9tc3JfYW1kKHVuc2lnbmVkIG1zciwgaW50ICplcnIpCisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X3JkbXNyX3JlZ3ModTMyICpyZWdzKQogewotCXJldHVybiBQVk9QX0NBTEwyKHU2NCwgcHZfY3B1X29wcy5yZWFkX21zcl9hbWQsIG1zciwgZXJyKTsKKwlyZXR1cm4gUFZPUF9DQUxMMShpbnQsIHB2X2NwdV9vcHMucmRtc3JfcmVncywgcmVncyk7CiB9CisKIHN0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X3dyaXRlX21zcih1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGxvdywgdW5zaWduZWQgaGlnaCkKIHsKIAlyZXR1cm4gUFZPUF9DQUxMMyhpbnQsIHB2X2NwdV9vcHMud3JpdGVfbXNyLCBtc3IsIGxvdywgaGlnaCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBhcmF2aXJ0X3dybXNyX3JlZ3ModTMyICpyZWdzKQoreworCXJldHVybiBQVk9QX0NBTEwxKGludCwgcHZfY3B1X29wcy53cm1zcl9yZWdzLCByZWdzKTsKK30KKwogLyogVGhlc2Ugc2hvdWxkIGFsbCBkbyBCVUdfT04oX2VyciksIGJ1dCBvdXIgaGVhZGVycyBhcmUgdG9vIHRhbmdsZWQuICovCiAjZGVmaW5lIHJkbXNyKG1zciwgdmFsMSwgdmFsMikJCQlcCiBkbyB7CQkJCQkJXApAQCAtODYyLDYgKzE5MSw5IEBACiAJX2VycjsJCQkJCVwKIH0pCiAKKyNkZWZpbmUgcmRtc3Jfc2FmZV9yZWdzKHJlZ3MpCXBhcmF2aXJ0X3JkbXNyX3JlZ3MocmVncykKKyNkZWZpbmUgd3Jtc3Jfc2FmZV9yZWdzKHJlZ3MpCXBhcmF2aXJ0X3dybXNyX3JlZ3MocmVncykKKwogc3RhdGljIGlubGluZSBpbnQgcmRtc3JsX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCiB7CiAJaW50IGVycjsKQEAgLTg3MSwxMiArMjAzLDMxIEBACiB9CiBzdGF0aWMgaW5saW5lIGludCByZG1zcmxfYW1kX3NhZmUodW5zaWduZWQgbXNyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnApCiB7CisJdTMyIGdwcnNbOF0gPSB7IDAgfTsKIAlpbnQgZXJyOwogCi0JKnAgPSBwYXJhdmlydF9yZWFkX21zcl9hbWQobXNyLCAmZXJyKTsKKwlncHJzWzFdID0gbXNyOworCWdwcnNbN10gPSAweDljNWEyMDNhOworCisJZXJyID0gcGFyYXZpcnRfcmRtc3JfcmVncyhncHJzKTsKKworCSpwID0gZ3Byc1swXSB8ICgodTY0KWdwcnNbMl0gPDwgMzIpOworCiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgd3Jtc3JsX2FtZF9zYWZlKHVuc2lnbmVkIG1zciwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKwl1MzIgZ3Byc1s4XSA9IHsgMCB9OworCisJZ3Byc1swXSA9ICh1MzIpdmFsOworCWdwcnNbMV0gPSBtc3I7CisJZ3Byc1syXSA9IHZhbCA+PiAzMjsKKwlncHJzWzddID0gMHg5YzVhMjAzYTsKKworCXJldHVybiBwYXJhdmlydF93cm1zcl9yZWdzKGdwcnMpOworfQorCiBzdGF0aWMgaW5saW5lIHU2NCBwYXJhdmlydF9yZWFkX3RzYyh2b2lkKQogewogCXJldHVybiBQVk9QX0NBTEwwKHU2NCwgcHZfY3B1X29wcy5yZWFkX3RzYyk7CkBAIC0xMzkzLDIwICs3NDQsNiBAQAogfQogI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCiAKLS8qIExhenkgbW9kZSBmb3IgYmF0Y2hpbmcgdXBkYXRlcyAvIGNvbnRleHQgc3dpdGNoICovCi1lbnVtIHBhcmF2aXJ0X2xhenlfbW9kZSB7Ci0JUEFSQVZJUlRfTEFaWV9OT05FLAotCVBBUkFWSVJUX0xBWllfTU1VLAotCVBBUkFWSVJUX0xBWllfQ1BVLAotfTsKLQotZW51bSBwYXJhdmlydF9sYXp5X21vZGUgcGFyYXZpcnRfZ2V0X2xhenlfbW9kZSh2b2lkKTsKLXZvaWQgcGFyYXZpcnRfc3RhcnRfY29udGV4dF9zd2l0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KTsKLXZvaWQgcGFyYXZpcnRfZW5kX2NvbnRleHRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7Ci0KLXZvaWQgcGFyYXZpcnRfZW50ZXJfbGF6eV9tbXUodm9pZCk7Ci12b2lkIHBhcmF2aXJ0X2xlYXZlX2xhenlfbW11KHZvaWQpOwotCiAjZGVmaW5lICBfX0hBVkVfQVJDSF9TVEFSVF9DT05URVhUX1NXSVRDSAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc3RhcnRfY29udGV4dF9zd2l0Y2goc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogewpAQCAtMTQzNywxMiArNzc0LDYgQEAKIAlwdl9tbXVfb3BzLnNldF9maXhtYXAoaWR4LCBwaHlzLCBmbGFncyk7CiB9CiAKLXZvaWQgX3BhcmF2aXJ0X25vcCh2b2lkKTsKLXUzMiBfcGFyYXZpcnRfaWRlbnRfMzIodTMyKTsKLXU2NCBfcGFyYXZpcnRfaWRlbnRfNjQodTY0KTsKLQotI2RlZmluZSBwYXJhdmlydF9ub3AJKCh2b2lkICopX3BhcmF2aXJ0X25vcCkKLQogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlRfU1BJTkxPQ0tTKQogCiBzdGF0aWMgaW5saW5lIGludCBfX3Jhd19zcGluX2lzX2xvY2tlZChzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKQpAQCAtMTQ3OSwxNyArODEwLDYgQEAKIAogI2VuZGlmCiAKLS8qIFRoZXNlIGFsbCBzaXQgaW4gdGhlIC5wYXJhaW5zdHJ1Y3Rpb25zIHNlY3Rpb24gdG8gdGVsbCB1cyB3aGF0IHRvIHBhdGNoLiAqLwotc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgewotCXU4ICppbnN0cjsgCQkvKiBvcmlnaW5hbCBpbnN0cnVjdGlvbnMgKi8KLQl1OCBpbnN0cnR5cGU7CQkvKiB0eXBlIG9mIHRoaXMgaW5zdHJ1Y3Rpb24gKi8KLQl1OCBsZW47CQkJLyogbGVuZ3RoIG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCi0JdTE2IGNsb2JiZXJzOwkJLyogd2hhdCByZWdpc3RlcnMgeW91IG1heSBjbG9iYmVyICovCi19OwotCi1leHRlcm4gc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgX19wYXJhaW5zdHJ1Y3Rpb25zW10sCi0JX19wYXJhaW5zdHJ1Y3Rpb25zX2VuZFtdOwotCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBQVl9TQVZFX1JFR1MgInB1c2hsICVlY3g7IHB1c2hsICVlZHg7IgogI2RlZmluZSBQVl9SRVNUT1JFX1JFR1MgInBvcGwgJWVkeDsgcG9wbCAlZWN4OyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NDAyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCkBAIC0wLDAgKzEsNzIxIEBACisjaWZuZGVmIF9BU01fWDg2X1BBUkFWSVJUX1RZUEVTX0gKKyNkZWZpbmUgX0FTTV9YODZfUEFSQVZJUlRfVFlQRVNfSAorCisvKiBCaXRtYXNrIG9mIHdoYXQgY2FuIGJlIGNsb2JiZXJlZDogdXN1YWxseSBhdCBsZWFzdCBlYXguICovCisjZGVmaW5lIENMQlJfTk9ORSAwCisjZGVmaW5lIENMQlJfRUFYICAoMSA8PCAwKQorI2RlZmluZSBDTEJSX0VDWCAgKDEgPDwgMSkKKyNkZWZpbmUgQ0xCUl9FRFggICgxIDw8IDIpCisjZGVmaW5lIENMQlJfRURJICAoMSA8PCAzKQorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorLyogQ0xCUl9BTlkgc2hvdWxkIG1hdGNoIGFsbCByZWdzIHBsYXRmb3JtIGhhcy4gRm9yIGkzODYsIHRoYXQncyBqdXN0IGl0ICovCisjZGVmaW5lIENMQlJfQU5ZICAoKDEgPDwgNCkgLSAxKQorCisjZGVmaW5lIENMQlJfQVJHX1JFR1MJKENMQlJfRUFYIHwgQ0xCUl9FRFggfCBDTEJSX0VDWCkKKyNkZWZpbmUgQ0xCUl9SRVRfUkVHCShDTEJSX0VBWCB8IENMQlJfRURYKQorI2RlZmluZSBDTEJSX1NDUkFUQ0gJKDApCisjZWxzZQorI2RlZmluZSBDTEJSX1JBWCAgQ0xCUl9FQVgKKyNkZWZpbmUgQ0xCUl9SQ1ggIENMQlJfRUNYCisjZGVmaW5lIENMQlJfUkRYICBDTEJSX0VEWAorI2RlZmluZSBDTEJSX1JESSAgQ0xCUl9FREkKKyNkZWZpbmUgQ0xCUl9SU0kgICgxIDw8IDQpCisjZGVmaW5lIENMQlJfUjggICAoMSA8PCA1KQorI2RlZmluZSBDTEJSX1I5ICAgKDEgPDwgNikKKyNkZWZpbmUgQ0xCUl9SMTAgICgxIDw8IDcpCisjZGVmaW5lIENMQlJfUjExICAoMSA8PCA4KQorCisjZGVmaW5lIENMQlJfQU5ZICAoKDEgPDwgOSkgLSAxKQorCisjZGVmaW5lIENMQlJfQVJHX1JFR1MJKENMQlJfUkRJIHwgQ0xCUl9SU0kgfCBDTEJSX1JEWCB8IFwKKwkJCSBDTEJSX1JDWCB8IENMQlJfUjggfCBDTEJSX1I5KQorI2RlZmluZSBDTEJSX1JFVF9SRUcJKENMQlJfUkFYKQorI2RlZmluZSBDTEJSX1NDUkFUQ0gJKENMQlJfUjEwIHwgQ0xCUl9SMTEpCisKKyNlbmRpZiAvKiBYODZfNjQgKi8KKworI2RlZmluZSBDTEJSX0NBTExFRV9TQVZFICgoQ0xCUl9BUkdfUkVHUyB8IENMQlJfU0NSQVRDSCkgJiB+Q0xCUl9SRVRfUkVHKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8YXNtL2Rlc2NfZGVmcy5oPgorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisKK3N0cnVjdCBwYWdlOworc3RydWN0IHRocmVhZF9zdHJ1Y3Q7CitzdHJ1Y3QgZGVzY19wdHI7CitzdHJ1Y3QgdHNzX3N0cnVjdDsKK3N0cnVjdCBtbV9zdHJ1Y3Q7CitzdHJ1Y3QgZGVzY19zdHJ1Y3Q7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CitzdHJ1Y3QgY3B1bWFzazsKKworLyoKKyAqIFdyYXBwZXIgdHlwZSBmb3IgcG9pbnRlcnMgdG8gY29kZSB3aGljaCB1c2VzIHRoZSBub24tc3RhbmRhcmQKKyAqIGNhbGxpbmcgY29udmVudGlvbi4gIFNlZSBQVl9DQUxMX1NBVkVfUkVHU19USFVOSyBiZWxvdy4KKyAqLworc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHsKKwl2b2lkICpmdW5jOworfTsKKworLyogZ2VuZXJhbCBpbmZvICovCitzdHJ1Y3QgcHZfaW5mbyB7CisJdW5zaWduZWQgaW50IGtlcm5lbF9ycGw7CisJaW50IHNoYXJlZF9rZXJuZWxfcG1kOworCWludCBwYXJhdmlydF9lbmFibGVkOworCWNvbnN0IGNoYXIgKm5hbWU7Cit9OworCitzdHJ1Y3QgcHZfaW5pdF9vcHMgeworCS8qCisJICogUGF0Y2ggbWF5IHJlcGxhY2Ugb25lIG9mIHRoZSBkZWZpbmVkIGNvZGUgc2VxdWVuY2VzIHdpdGgKKwkgKiBhcmJpdHJhcnkgY29kZSwgc3ViamVjdCB0byB0aGUgc2FtZSByZWdpc3RlciBjb25zdHJhaW50cy4KKwkgKiBUaGlzIGdlbmVyYWxseSBtZWFucyB0aGUgY29kZSBpcyBub3QgZnJlZSB0byBjbG9iYmVyIGFueQorCSAqIHJlZ2lzdGVycyBvdGhlciB0aGFuIEVBWC4gIFRoZSBwYXRjaCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuCisJICogdGhlIG51bWJlciBvZiBieXRlcyBvZiBjb2RlIGdlbmVyYXRlZCwgYXMgd2Ugbm9wIHBhZCB0aGUKKwkgKiByZXN0IGluIGdlbmVyaWMgY29kZS4KKwkgKi8KKwl1bnNpZ25lZCAoKnBhdGNoKSh1OCB0eXBlLCB1MTYgY2xvYmJlciwgdm9pZCAqaW5zbmJ1ZiwKKwkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsZW4pOworCisJLyogQmFzaWMgYXJjaC1zcGVjaWZpYyBzZXR1cCAqLworCXZvaWQgKCphcmNoX3NldHVwKSh2b2lkKTsKKwljaGFyICooKm1lbW9yeV9zZXR1cCkodm9pZCk7CisJdm9pZCAoKnBvc3RfYWxsb2NhdG9yX2luaXQpKHZvaWQpOworCisJLyogUHJpbnQgYSBiYW5uZXIgdG8gaWRlbnRpZnkgdGhlIGVudmlyb25tZW50ICovCisJdm9pZCAoKmJhbm5lcikodm9pZCk7Cit9OworCisKK3N0cnVjdCBwdl9sYXp5X29wcyB7CisJLyogU2V0IGRlZmVycmVkIHVwZGF0ZSBtb2RlLCB1c2VkIGZvciBiYXRjaGluZyBvcGVyYXRpb25zLiAqLworCXZvaWQgKCplbnRlcikodm9pZCk7CisJdm9pZCAoKmxlYXZlKSh2b2lkKTsKK307CisKK3N0cnVjdCBwdl90aW1lX29wcyB7CisJdm9pZCAoKnRpbWVfaW5pdCkodm9pZCk7CisKKwkvKiBTZXQgYW5kIHNldCB0aW1lIG9mIGRheSAqLworCXVuc2lnbmVkIGxvbmcgKCpnZXRfd2FsbGNsb2NrKSh2b2lkKTsKKwlpbnQgKCpzZXRfd2FsbGNsb2NrKSh1bnNpZ25lZCBsb25nKTsKKworCXVuc2lnbmVkIGxvbmcgbG9uZyAoKnNjaGVkX2Nsb2NrKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3RzY19raHopKHZvaWQpOworfTsKKworc3RydWN0IHB2X2NwdV9vcHMgeworCS8qIGhvb2tzIGZvciB2YXJpb3VzIHByaXZpbGVnZWQgaW5zdHJ1Y3Rpb25zICovCisJdW5zaWduZWQgbG9uZyAoKmdldF9kZWJ1Z3JlZykoaW50IHJlZ25vKTsKKwl2b2lkICgqc2V0X2RlYnVncmVnKShpbnQgcmVnbm8sIHVuc2lnbmVkIGxvbmcgdmFsdWUpOworCisJdm9pZCAoKmNsdHMpKHZvaWQpOworCisJdW5zaWduZWQgbG9uZyAoKnJlYWRfY3IwKSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfY3IwKSh1bnNpZ25lZCBsb25nKTsKKworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyNF9zYWZlKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjQpKHZvaWQpOworCXZvaWQgKCp3cml0ZV9jcjQpKHVuc2lnbmVkIGxvbmcpOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyOCkodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyOCkodW5zaWduZWQgbG9uZyk7CisjZW5kaWYKKworCS8qIFNlZ21lbnQgZGVzY3JpcHRvciBoYW5kbGluZyAqLworCXZvaWQgKCpsb2FkX3RyX2Rlc2MpKHZvaWQpOworCXZvaWQgKCpsb2FkX2dkdCkoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopOworCXZvaWQgKCpsb2FkX2lkdCkoY29uc3Qgc3RydWN0IGRlc2NfcHRyICopOworCXZvaWQgKCpzdG9yZV9nZHQpKHN0cnVjdCBkZXNjX3B0ciAqKTsKKwl2b2lkICgqc3RvcmVfaWR0KShzdHJ1Y3QgZGVzY19wdHIgKik7CisJdm9pZCAoKnNldF9sZHQpKGNvbnN0IHZvaWQgKmRlc2MsIHVuc2lnbmVkIGVudHJpZXMpOworCXVuc2lnbmVkIGxvbmcgKCpzdG9yZV90cikodm9pZCk7CisJdm9pZCAoKmxvYWRfdGxzKShzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCwgdW5zaWduZWQgaW50IGNwdSk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXZvaWQgKCpsb2FkX2dzX2luZGV4KSh1bnNpZ25lZCBpbnQgaWR4KTsKKyNlbmRpZgorCXZvaWQgKCp3cml0ZV9sZHRfZW50cnkpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCBpbnQgZW50cnludW0sCisJCQkJY29uc3Qgdm9pZCAqZGVzYyk7CisJdm9pZCAoKndyaXRlX2dkdF9lbnRyeSkoc3RydWN0IGRlc2Nfc3RydWN0ICosCisJCQkJaW50IGVudHJ5bnVtLCBjb25zdCB2b2lkICpkZXNjLCBpbnQgc2l6ZSk7CisJdm9pZCAoKndyaXRlX2lkdF9lbnRyeSkoZ2F0ZV9kZXNjICosCisJCQkJaW50IGVudHJ5bnVtLCBjb25zdCBnYXRlX2Rlc2MgKmdhdGUpOworCXZvaWQgKCphbGxvY19sZHQpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKTsKKwl2b2lkICgqZnJlZV9sZHQpKHN0cnVjdCBkZXNjX3N0cnVjdCAqbGR0LCB1bnNpZ25lZCBlbnRyaWVzKTsKKworCXZvaWQgKCpsb2FkX3NwMCkoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQpOworCisJdm9pZCAoKnNldF9pb3BsX21hc2spKHVuc2lnbmVkIG1hc2spOworCisJdm9pZCAoKndiaW52ZCkodm9pZCk7CisJdm9pZCAoKmlvX2RlbGF5KSh2b2lkKTsKKworCS8qIGNwdWlkIGVtdWxhdGlvbiwgbW9zdGx5IHNvIHRoYXQgY2FwcyBiaXRzIGNhbiBiZSBkaXNhYmxlZCAqLworCXZvaWQgKCpjcHVpZCkodW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAorCQkgICAgICB1bnNpZ25lZCBpbnQgKmVjeCwgdW5zaWduZWQgaW50ICplZHgpOworCisJLyogTVNSLCBQTUMgYW5kIFRTUiBvcGVyYXRpb25zLgorCSAgIGVyciA9IDAvLUVGQVVMVC4gIHdybXNyIHJldHVybnMgMC8tRUZBVUxULiAqLworCXU2NCAoKnJlYWRfbXNyKSh1bnNpZ25lZCBpbnQgbXNyLCBpbnQgKmVycik7CisJaW50ICgqcmRtc3JfcmVncykodTMyICpyZWdzKTsKKwlpbnQgKCp3cml0ZV9tc3IpKHVuc2lnbmVkIGludCBtc3IsIHVuc2lnbmVkIGxvdywgdW5zaWduZWQgaGlnaCk7CisJaW50ICgqd3Jtc3JfcmVncykodTMyICpyZWdzKTsKKworCXU2NCAoKnJlYWRfdHNjKSh2b2lkKTsKKwl1NjQgKCpyZWFkX3BtYykoaW50IGNvdW50ZXIpOworCXVuc2lnbmVkIGxvbmcgbG9uZyAoKnJlYWRfdHNjcCkodW5zaWduZWQgaW50ICphdXgpOworCisJLyoKKwkgKiBBdG9taWNhbGx5IGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCByZXR1cm4gdG8gdXNlcnNwYWNlLiAgVGhpcworCSAqIGlzIG9ubHkgZXZlciB1c2VkIHRvIHJldHVybiB0byAzMi1iaXQgcHJvY2Vzc2VzOyBpbiBhCisJICogNjQtYml0IGtlcm5lbCwgaXQncyB1c2VkIGZvciAzMi1vbi02NCBjb21wYXQgcHJvY2Vzc2VzLCBidXQKKwkgKiBuZXZlciBuYXRpdmUgNjQtYml0IHByb2Nlc3Nlcy4gIChKdW1wLCBub3QgY2FsbC4pCisJICovCisJdm9pZCAoKmlycV9lbmFibGVfc3lzZXhpdCkodm9pZCk7CisKKwkvKgorCSAqIFN3aXRjaCB0byB1c2VybW9kZSBncyBhbmQgcmV0dXJuIHRvIDY0LWJpdCB1c2VybW9kZSB1c2luZworCSAqIHN5c3JldC4gIE9ubHkgdXNlZCBpbiA2NC1iaXQga2VybmVscyB0byByZXR1cm4gdG8gNjQtYml0CisJICogcHJvY2Vzc2VzLiAgVXNlcm1vZGUgcmVnaXN0ZXIgc3RhdGUsIGluY2x1ZGluZyAlcnNwLCBtdXN0CisJICogYWxyZWFkeSBiZSByZXN0b3JlZC4KKwkgKi8KKwl2b2lkICgqdXNlcmdzX3N5c3JldDY0KSh2b2lkKTsKKworCS8qCisJICogU3dpdGNoIHRvIHVzZXJtb2RlIGdzIGFuZCByZXR1cm4gdG8gMzItYml0IHVzZXJtb2RlIHVzaW5nCisJICogc3lzcmV0LiAgVXNlZCB0byByZXR1cm4gdG8gMzItb24tNjQgY29tcGF0IHByb2Nlc3Nlcy4KKwkgKiBPdGhlciB1c2VybW9kZSByZWdpc3RlciBzdGF0ZSwgaW5jbHVkaW5nICVlc3AsIG11c3QgYWxyZWFkeQorCSAqIGJlIHJlc3RvcmVkLgorCSAqLworCXZvaWQgKCp1c2VyZ3Nfc3lzcmV0MzIpKHZvaWQpOworCisJLyogTm9ybWFsIGlyZXQuICBKdW1wIHRvIHRoaXMgd2l0aCB0aGUgc3RhbmRhcmQgaXJldCBzdGFjaworCSAgIGZyYW1lIHNldCB1cC4gKi8KKwl2b2lkICgqaXJldCkodm9pZCk7CisKKwl2b2lkICgqc3dhcGdzKSh2b2lkKTsKKworCXZvaWQgKCpzdGFydF9jb250ZXh0X3N3aXRjaCkoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KTsKKwl2b2lkICgqZW5kX2NvbnRleHRfc3dpdGNoKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpOworfTsKKworc3RydWN0IHB2X2lycV9vcHMgeworCXZvaWQgKCppbml0X0lSUSkodm9pZCk7CisKKwkvKgorCSAqIEdldC9zZXQgaW50ZXJydXB0IHN0YXRlLiAgc2F2ZV9mbCBhbmQgcmVzdG9yZV9mbCBhcmUgb25seQorCSAqIGV4cGVjdGVkIHRvIHVzZSBYODZfRUZMQUdTX0lGOyBhbGwgb3RoZXIgYml0cworCSAqIHJldHVybmVkIGZyb20gc2F2ZV9mbCBhcmUgdW5kZWZpbmVkLCBhbmQgbWF5IGJlIGlnbm9yZWQgYnkKKwkgKiByZXN0b3JlX2ZsLgorCSAqCisJICogTk9URTogVGhlc2UgZnVuY3Rpb25zIGNhbGxlcnMgZXhwZWN0IHRoZSBjYWxsZWUgdG8gcHJlc2VydmUKKwkgKiBtb3JlIHJlZ2lzdGVycyB0aGFuIHRoZSBzdGFuZGFyZCBDIGNhbGxpbmcgY29udmVudGlvbi4KKwkgKi8KKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgc2F2ZV9mbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgcmVzdG9yZV9mbDsKKwlzdHJ1Y3QgcGFyYXZpcnRfY2FsbGVlX3NhdmUgaXJxX2Rpc2FibGU7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIGlycV9lbmFibGU7CisKKwl2b2lkICgqc2FmZV9oYWx0KSh2b2lkKTsKKwl2b2lkICgqaGFsdCkodm9pZCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJdm9pZCAoKmFkanVzdF9leGNlcHRpb25fZnJhbWUpKHZvaWQpOworI2VuZGlmCit9OworCitzdHJ1Y3QgcHZfYXBpY19vcHMgeworI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQworCXZvaWQgKCpzZXR1cF9ib290X2Nsb2NrKSh2b2lkKTsKKwl2b2lkICgqc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKSh2b2lkKTsKKworCXZvaWQgKCpzdGFydHVwX2lwaV9ob29rKShpbnQgcGh5c19hcGljaWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X2VzcCk7CisjZW5kaWYKK307CisKK3N0cnVjdCBwdl9tbXVfb3BzIHsKKwkvKgorCSAqIENhbGxlZCBiZWZvcmUvYWZ0ZXIgaW5pdF9tbSBwYWdldGFibGUgc2V0dXAuIHNldHVwX3N0YXJ0CisJICogbWF5IHJlc2V0ICVjcjMsIGFuZCBtYXkgcHJlLWluc3RhbGwgcGFydHMgb2YgdGhlIHBhZ2V0YWJsZTsKKwkgKiBwYWdldGFibGUgc2V0dXAgaXMgZXhwZWN0ZWQgdG8gcHJlc2VydmUgYW55IGV4aXN0aW5nCisJICogbWFwcGluZy4KKwkgKi8KKwl2b2lkICgqcGFnZXRhYmxlX3NldHVwX3N0YXJ0KShwZ2RfdCAqcGdkX2Jhc2UpOworCXZvaWQgKCpwYWdldGFibGVfc2V0dXBfZG9uZSkocGdkX3QgKnBnZF9iYXNlKTsKKworCXVuc2lnbmVkIGxvbmcgKCpyZWFkX2NyMikodm9pZCk7CisJdm9pZCAoKndyaXRlX2NyMikodW5zaWduZWQgbG9uZyk7CisKKwl1bnNpZ25lZCBsb25nICgqcmVhZF9jcjMpKHZvaWQpOworCXZvaWQgKCp3cml0ZV9jcjMpKHVuc2lnbmVkIGxvbmcpOworCisJLyoKKwkgKiBIb29rcyBmb3IgaW50ZXJjZXB0aW5nIHRoZSBjcmVhdGlvbi91c2UvZGVzdHJ1Y3Rpb24gb2YgYW4KKwkgKiBtbV9zdHJ1Y3QuCisJICovCisJdm9pZCAoKmFjdGl2YXRlX21tKShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LAorCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpOworCXZvaWQgKCpkdXBfbW1hcCkoc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0sCisJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworCXZvaWQgKCpleGl0X21tYXApKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKworCisJLyogVExCIG9wZXJhdGlvbnMgKi8KKwl2b2lkICgqZmx1c2hfdGxiX3VzZXIpKHZvaWQpOworCXZvaWQgKCpmbHVzaF90bGJfa2VybmVsKSh2b2lkKTsKKwl2b2lkICgqZmx1c2hfdGxiX3NpbmdsZSkodW5zaWduZWQgbG9uZyBhZGRyKTsKKwl2b2lkICgqZmx1c2hfdGxiX290aGVycykoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdXMsCisJCQkJIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSB1bnNpZ25lZCBsb25nIHZhKTsKKworCS8qIEhvb2tzIGZvciBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcGFnZXRhYmxlIHRvcC1sZXZlbCAqLworCWludCAgKCpwZ2RfYWxsb2MpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKwl2b2lkICgqcGdkX2ZyZWUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKTsKKworCS8qCisJICogSG9va3MgZm9yIGFsbG9jYXRpbmcvcmVsZWFzaW5nIHBhZ2V0YWJsZSBwYWdlcyB3aGVuIHRoZXkncmUKKwkgKiBhdHRhY2hlZCB0byBhIHBhZ2V0YWJsZQorCSAqLworCXZvaWQgKCphbGxvY19wdGUpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbik7CisJdm9pZCAoKmFsbG9jX3BtZCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKKwl2b2lkICgqYWxsb2NfcG1kX2Nsb25lKSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBjbG9uZXBmbiwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CisJdm9pZCAoKmFsbG9jX3B1ZCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKTsKKwl2b2lkICgqcmVsZWFzZV9wdGUpKHVuc2lnbmVkIGxvbmcgcGZuKTsKKwl2b2lkICgqcmVsZWFzZV9wbWQpKHVuc2lnbmVkIGxvbmcgcGZuKTsKKwl2b2lkICgqcmVsZWFzZV9wdWQpKHVuc2lnbmVkIGxvbmcgcGZuKTsKKworCS8qIFBhZ2V0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICovCisJdm9pZCAoKnNldF9wdGUpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOworCXZvaWQgKCpzZXRfcHRlX2F0KShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7CisJdm9pZCAoKnNldF9wbWQpKHBtZF90ICpwbWRwLCBwbWRfdCBwbWR2YWwpOworCXZvaWQgKCpwdGVfdXBkYXRlKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgcHRlX3QgKnB0ZXApOworCXZvaWQgKCpwdGVfdXBkYXRlX2RlZmVyKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCk7CisKKwlwdGVfdCAoKnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCXB0ZV90ICpwdGVwKTsKKwl2b2lkICgqcHRlcF9tb2RpZnlfcHJvdF9jb21taXQpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCXB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpOworCisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHB0ZV92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcHRlOworCisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHBnZF92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcGdkOworCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCisjaWZkZWYgQ09ORklHX1g4Nl9QQUUKKwl2b2lkICgqc2V0X3B0ZV9hdG9taWMpKHB0ZV90ICpwdGVwLCBwdGVfdCBwdGV2YWwpOworCXZvaWQgKCpwdGVfY2xlYXIpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgIHB0ZV90ICpwdGVwKTsKKwl2b2lkICgqcG1kX2NsZWFyKShwbWRfdCAqcG1kcCk7CisKKyNlbmRpZgkvKiBDT05GSUdfWDg2X1BBRSAqLworCisJdm9pZCAoKnNldF9wdWQpKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWR2YWwpOworCisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHBtZF92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcG1kOworCisjaWYgUEFHRVRBQkxFX0xFVkVMUyA9PSA0CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIHB1ZF92YWw7CisJc3RydWN0IHBhcmF2aXJ0X2NhbGxlZV9zYXZlIG1ha2VfcHVkOworCisJdm9pZCAoKnNldF9wZ2QpKHBnZF90ICpwdWRwLCBwZ2RfdCBwZ2R2YWwpOworI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPT0gNCAqLworI2VuZGlmCS8qIFBBR0VUQUJMRV9MRVZFTFMgPj0gMyAqLworCisjaWZkZWYgQ09ORklHX0hJR0hQVEUKKwl2b2lkICooKmttYXBfYXRvbWljX3B0ZSkoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKTsKKyNlbmRpZgorCisJc3RydWN0IHB2X2xhenlfb3BzIGxhenlfbW9kZTsKKworCS8qIGRvbTAgb3BzICovCisKKwkvKiBTb21ldGltZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgYSBwZm4sIGFuZCBzb21ldGltZXMgaXRzCisJICAgYW4gbWZuLiAgV2UgY2FuIHRlbGwgd2hpY2ggaXMgd2hpY2ggZnJvbSB0aGUgaW5kZXguICovCisJdm9pZCAoKnNldF9maXhtYXApKHVuc2lnbmVkIC8qIGVudW0gZml4ZWRfYWRkcmVzc2VzICovIGlkeCwKKwkJCSAgIHBoeXNfYWRkcl90IHBoeXMsIHBncHJvdF90IGZsYWdzKTsKK307CisKK3N0cnVjdCByYXdfc3BpbmxvY2s7CitzdHJ1Y3QgcHZfbG9ja19vcHMgeworCWludCAoKnNwaW5faXNfbG9ja2VkKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwlpbnQgKCpzcGluX2lzX2NvbnRlbmRlZCkoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7CisJdm9pZCAoKnNwaW5fbG9jaykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jayk7CisJdm9pZCAoKnNwaW5fbG9ja19mbGFncykoc3RydWN0IHJhd19zcGlubG9jayAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJaW50ICgqc3Bpbl90cnlsb2NrKShzdHJ1Y3QgcmF3X3NwaW5sb2NrICpsb2NrKTsKKwl2b2lkICgqc3Bpbl91bmxvY2spKHN0cnVjdCByYXdfc3BpbmxvY2sgKmxvY2spOworfTsKKworLyogVGhpcyBjb250YWlucyBhbGwgdGhlIHBhcmF2aXJ0IHN0cnVjdHVyZXM6IHdlIGdldCBhIGNvbnZlbmllbnQKKyAqIG51bWJlciBmb3IgZWFjaCBmdW5jdGlvbiB1c2luZyB0aGUgb2Zmc2V0IHdoaWNoIHdlIHVzZSB0byBpbmRpY2F0ZQorICogd2hhdCB0byBwYXRjaC4gKi8KK3N0cnVjdCBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSB7CisJc3RydWN0IHB2X2luaXRfb3BzIHB2X2luaXRfb3BzOworCXN0cnVjdCBwdl90aW1lX29wcyBwdl90aW1lX29wczsKKwlzdHJ1Y3QgcHZfY3B1X29wcyBwdl9jcHVfb3BzOworCXN0cnVjdCBwdl9pcnFfb3BzIHB2X2lycV9vcHM7CisJc3RydWN0IHB2X2FwaWNfb3BzIHB2X2FwaWNfb3BzOworCXN0cnVjdCBwdl9tbXVfb3BzIHB2X21tdV9vcHM7CisJc3RydWN0IHB2X2xvY2tfb3BzIHB2X2xvY2tfb3BzOworfTsKKworZXh0ZXJuIHN0cnVjdCBwdl9pbmZvIHB2X2luZm87CitleHRlcm4gc3RydWN0IHB2X2luaXRfb3BzIHB2X2luaXRfb3BzOworZXh0ZXJuIHN0cnVjdCBwdl90aW1lX29wcyBwdl90aW1lX29wczsKK2V4dGVybiBzdHJ1Y3QgcHZfY3B1X29wcyBwdl9jcHVfb3BzOworZXh0ZXJuIHN0cnVjdCBwdl9pcnFfb3BzIHB2X2lycV9vcHM7CitleHRlcm4gc3RydWN0IHB2X2FwaWNfb3BzIHB2X2FwaWNfb3BzOworZXh0ZXJuIHN0cnVjdCBwdl9tbXVfb3BzIHB2X21tdV9vcHM7CitleHRlcm4gc3RydWN0IHB2X2xvY2tfb3BzIHB2X2xvY2tfb3BzOworCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIKHgpCQkJCQlcCisJKG9mZnNldG9mKHN0cnVjdCBwYXJhdmlydF9wYXRjaF90ZW1wbGF0ZSwgeCkgLyBzaXplb2Yodm9pZCAqKSkKKworI2RlZmluZSBwYXJhdmlydF90eXBlKG9wKQkJCQlcCisJW3BhcmF2aXJ0X3R5cGVudW1dICJpIiAoUEFSQVZJUlRfUEFUQ0gob3ApKSwJXAorCVtwYXJhdmlydF9vcHB0cl0gImkiICgmKG9wKSkKKyNkZWZpbmUgcGFyYXZpcnRfY2xvYmJlcihjbG9iYmVyKQkJXAorCVtwYXJhdmlydF9jbG9iYmVyXSAiaSIgKGNsb2JiZXIpCisKKy8qCisgKiBHZW5lcmF0ZSBzb21lIGNvZGUsIGFuZCBtYXJrIGl0IGFzIHBhdGNoYWJsZSBieSB0aGUKKyAqIGFwcGx5X3BhcmF2aXJ0KCkgYWx0ZXJuYXRlIGluc3RydWN0aW9uIHBhdGNoZXIuCisgKi8KKyNkZWZpbmUgX3BhcmF2aXJ0X2FsdChpbnNuX3N0cmluZywgdHlwZSwgY2xvYmJlcikJXAorCSI3NzE6XG5cdCIgaW5zbl9zdHJpbmcgIlxuIiAiNzcyOlxuIgkJXAorCSIucHVzaHNlY3Rpb24gLnBhcmFpbnN0cnVjdGlvbnMsXCJhXCJcbiIJXAorCV9BU01fQUxJR04gIlxuIgkJCQkJXAorCV9BU01fUFRSICIgNzcxYlxuIgkJCQlcCisJIiAgLmJ5dGUgIiB0eXBlICJcbiIJCQkJXAorCSIgIC5ieXRlIDc3MmItNzcxYlxuIgkJCQlcCisJIiAgLnNob3J0ICIgY2xvYmJlciAiXG4iCQkJXAorCSIucG9wc2VjdGlvblxuIgorCisvKiBHZW5lcmF0ZSBwYXRjaGFibGUgY29kZSwgd2l0aCB0aGUgZGVmYXVsdCBhc20gcGFyYW1ldGVycy4gKi8KKyNkZWZpbmUgcGFyYXZpcnRfYWx0KGluc25fc3RyaW5nKQkJCQkJXAorCV9wYXJhdmlydF9hbHQoaW5zbl9zdHJpbmcsICIlY1twYXJhdmlydF90eXBlbnVtXSIsICIlY1twYXJhdmlydF9jbG9iYmVyXSIpCisKKy8qIFNpbXBsZSBpbnN0cnVjdGlvbiBwYXRjaGluZyBjb2RlLiAqLworI2RlZmluZSBERUZfTkFUSVZFKG9wcywgbmFtZSwgY29kZSkgCQkJCQlcCisJZXh0ZXJuIGNvbnN0IGNoYXIgc3RhcnRfIyNvcHMjI18jI25hbWVbXSwgZW5kXyMjb3BzIyNfIyNuYW1lW107CVwKKwlhc20oInN0YXJ0XyIgI29wcyAiXyIgI25hbWUgIjogIiBjb2RlICI7IGVuZF8iICNvcHMgIl8iICNuYW1lICI6IikKKwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfbm9wKHZvaWQpOwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfaWRlbnRfMzIodm9pZCAqaW5zbmJ1ZiwgdW5zaWduZWQgbGVuKTsKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2lkZW50XzY0KHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbik7Cit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9pZ25vcmUodW5zaWduZWQgbGVuKTsKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2NhbGwodm9pZCAqaW5zbmJ1ZiwKKwkJCSAgICAgY29uc3Qgdm9pZCAqdGFyZ2V0LCB1MTYgdGd0X2Nsb2JiZXJzLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBzaXRlX2Nsb2JiZXJzLAorCQkJICAgICB1bnNpZ25lZCBsZW4pOwordW5zaWduZWQgcGFyYXZpcnRfcGF0Y2hfam1wKHZvaWQgKmluc25idWYsIGNvbnN0IHZvaWQgKnRhcmdldCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7Cit1bnNpZ25lZCBwYXJhdmlydF9wYXRjaF9kZWZhdWx0KHU4IHR5cGUsIHUxNiBjbG9iYmVycywgdm9pZCAqaW5zbmJ1ZiwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7CisKK3Vuc2lnbmVkIHBhcmF2aXJ0X3BhdGNoX2luc25zKHZvaWQgKmluc25idWYsIHVuc2lnbmVkIGxlbiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpOworCit1bnNpZ25lZCBuYXRpdmVfcGF0Y2godTggdHlwZSwgdTE2IGNsb2JiZXJzLCB2b2lkICppYnVmLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxlbik7CisKK2ludCBwYXJhdmlydF9kaXNhYmxlX2lvc3BhY2Uodm9pZCk7CisKKy8qCisgKiBUaGlzIGdlbmVyYXRlcyBhbiBpbmRpcmVjdCBjYWxsIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24gdHlwZSBudW1iZXIuCisgKiBUaGUgdHlwZSBudW1iZXIsIGNvbXB1dGVkIGluIFBBUkFWSVJUX1BBVENILCBpcyBkZXJpdmVkIGZyb20gdGhlCisgKiBvZmZzZXQgaW50byB0aGUgcGFyYXZpcnRfcGF0Y2hfdGVtcGxhdGUgc3RydWN0dXJlLCBhbmQgY2FuIHRoZXJlZm9yZSBiZQorICogZnJlZWx5IGNvbnZlcnRlZCBiYWNrIGludG8gYSBzdHJ1Y3R1cmUgb2Zmc2V0LgorICovCisjZGVmaW5lIFBBUkFWSVJUX0NBTEwJImNhbGwgKiVjW3BhcmF2aXJ0X29wcHRyXTsiCisKKy8qCisgKiBUaGVzZSBtYWNyb3MgYXJlIGludGVuZGVkIHRvIHdyYXAgY2FsbHMgdGhyb3VnaCBvbmUgb2YgdGhlIHBhcmF2aXJ0CisgKiBvcHMgc3RydWN0cywgc28gdGhhdCB0aGV5IGNhbiBiZSBsYXRlciBpZGVudGlmaWVkIGFuZCBwYXRjaGVkIGF0CisgKiBydW50aW1lLgorICoKKyAqIE5vcm1hbGx5LCBhIGNhbGwgdG8gYSBwdl9vcCBmdW5jdGlvbiBpcyBhIHNpbXBsZSBpbmRpcmVjdCBjYWxsOgorICogKHB2X29wX3N0cnVjdC5vcGVyYXRpb25zKShhcmdzLi4uKS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzbG93IG9wZXJhdGlvbiBmb3IgbW9kZXJuIENQVXMsCisgKiBiZWNhdXNlIGl0IGNhbm5vdCBuZWNlc3NhcmlseSBkZXRlcm1pbmUgd2hhdCB0aGUgZGVzdGluYXRpb24KKyAqIGFkZHJlc3MgaXMuICBJbiB0aGlzIGNhc2UsIHRoZSBhZGRyZXNzIGlzIGEgcnVudGltZSBjb25zdGFudCwgc28gYXQKKyAqIHRoZSB2ZXJ5IGxlYXN0IHdlIGNhbiBwYXRjaCB0aGUgY2FsbCB0byBlIGEgc2ltcGxlIGRpcmVjdCBjYWxsLCBvcgorICogaWRlYWxseSwgcGF0Y2ggYW4gaW5saW5lIGltcGxlbWVudGF0aW9uIGludG8gdGhlIGNhbGxzaXRlLiAgKERpcmVjdAorICogY2FsbHMgYXJlIGVzc2VudGlhbGx5IGZyZWUsIGJlY2F1c2UgdGhlIGNhbGwgYW5kIHJldHVybiBhZGRyZXNzZXMKKyAqIGFyZSBjb21wbGV0ZWx5IHByZWRpY3RhYmxlLikKKyAqCisgKiBGb3IgaTM4NiwgdGhlc2UgbWFjcm9zIHJlbHkgb24gdGhlIHN0YW5kYXJkIGdjYyAicmVncGFybSgzKSIgY2FsbGluZworICogY29udmVudGlvbiwgaW4gd2hpY2ggdGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50cyBhcmUgcGxhY2VkIGluICVlYXgsCisgKiAlZWR4LCAlZWN4IChpbiB0aGF0IG9yZGVyKSwgYW5kIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBwbGFjZWQKKyAqIG9uIHRoZSBzdGFjay4gIEFsbCBjYWxsZXItc2F2ZSByZWdpc3RlcnMgKGVheCxlZHgsZWN4KSBhcmUgZXhwZWN0ZWQKKyAqIHRvIGJlIG1vZGlmaWVkIChlaXRoZXIgY2xvYmJlcmVkIG9yIHVzZWQgZm9yIHJldHVybiB2YWx1ZXMpLgorICogWDg2XzY0LCBvbiB0aGUgb3RoZXIgaGFuZCwgYWxyZWFkeSBzcGVjaWZpZXMgYSByZWdpc3Rlci1iYXNlZCBjYWxsaW5nCisgKiBjb252ZW50aW9ucywgcmV0dXJuaW5nIGF0ICVyYXgsIHdpdGggcGFyYW1ldGVyZXMgZ29pbmcgb24gJXJkaSwgJXJzaSwKKyAqICVyZHgsIGFuZCAlcmN4LiBOb3RlIHRoYXQgZm9yIHRoaXMgcmVhc29uLCB4ODZfNjQgZG9lcyBub3QgbmVlZCBhbnkKKyAqIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGRlYWxpbmcgd2l0aCA0IGFyZ3VtZW50cywgdW5saWtlIGkzODYuCisgKiBIb3dldmVyLCB4ODZfNjQgYWxzbyBoYXZlIHRvIGNsb2JiZXIgYWxsIGNhbGxlciBzYXZlZCByZWdpc3RlcnMsIHdoaWNoCisgKiB1bmZvcnR1bmF0ZWx5LCBhcmUgcXVpdGUgYSBiaXQgKHI4IC0gcjExKQorICoKKyAqIFRoZSBjYWxsIGluc3RydWN0aW9uIGl0c2VsZiBpcyBtYXJrZWQgYnkgcGxhY2luZyBpdHMgc3RhcnQgYWRkcmVzcworICogYW5kIHNpemUgaW50byB0aGUgLnBhcmFpbnN0cnVjdGlvbnMgc2VjdGlvbiwgc28gdGhhdAorICogYXBwbHlfcGFyYXZpcnQoKSBpbiBhcmNoL2kzODYva2VybmVsL2FsdGVybmF0aXZlLmMgY2FuIGRvIHRoZQorICogYXBwcm9wcmlhdGUgcGF0Y2hpbmcgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIGJhY2tlbmQgcHZfaW5pdF9vcHMKKyAqIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFVuZm9ydHVuYXRlbHkgdGhlcmUncyBubyB3YXkgdG8gZ2V0IGdjYyB0byBnZW5lcmF0ZSB0aGUgYXJncyBzZXR1cAorICogZm9yIHRoZSBjYWxsLCBhbmQgdGhlbiBhbGxvdyB0aGUgY2FsbCBpdHNlbGYgdG8gYmUgZ2VuZXJhdGVkIGJ5IGFuCisgKiBpbmxpbmUgYXNtLiAgQmVjYXVzZSBvZiB0aGlzLCB3ZSBtdXN0IGRvIHRoZSBjb21wbGV0ZSBhcmcgc2V0dXAgYW5kCisgKiByZXR1cm4gdmFsdWUgaGFuZGxpbmcgZnJvbSB3aXRoaW4gdGhlc2UgbWFjcm9zLiAgVGhpcyBpcyBmYWlybHkKKyAqIGN1bWJlcnNvbWUuCisgKgorICogVGhlcmUgYXJlIDUgc2V0cyBvZiBQVk9QXyogbWFjcm9zIGZvciBkZWFsaW5nIHdpdGggMC00IGFyZ3VtZW50cy4KKyAqIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIG1vcmUgYXJndW1lbnRzLCBidXQgdGhlcmUgd291bGQgYmUgbGl0dGxlCisgKiB0byBiZSBnYWluZWQgZnJvbSB0aGF0LiAgRm9yIGVhY2ggbnVtYmVyIG9mIGFyZ3VtZW50cywgdGhlcmUgYXJlCisgKiB0aGUgdHdvIFZDQUxMIGFuZCBDQUxMIHZhcmlhbnRzIGZvciB2b2lkIGFuZCBub24tdm9pZCBmdW5jdGlvbnMuCisgKgorICogV2hlbiB0aGVyZSBpcyBhIHJldHVybiB2YWx1ZSwgdGhlIGludm9rZXIgb2YgdGhlIG1hY3JvIG11c3Qgc3BlY2lmeQorICogdGhlIHJldHVybiB0eXBlLiAgVGhlIG1hY3JvIHRoZW4gdXNlcyBzaXplb2YoKSBvbiB0aGF0IHR5cGUgdG8KKyAqIGRldGVybWluZSB3aGV0aGVyIGl0cyBhIDMyIG9yIDY0IGJpdCB2YWx1ZSwgYW5kIHBsYWNlcyB0aGUgcmV0dXJuCisgKiBpbiB0aGUgcmlnaHQgcmVnaXN0ZXIocykgKGp1c3QgJWVheCBmb3IgMzItYml0LCBhbmQgJWVkeDolZWF4IGZvcgorICogNjQtYml0KS4gRm9yIHg4Nl82NCBtYWNoaW5lcywgaXQganVzdCByZXR1cm5zIGF0ICVyYXggcmVnYXJkbGVzcyBvZgorICogdGhlIHJldHVybiB2YWx1ZSBzaXplLgorICoKKyAqIDY0LWJpdCBhcmd1bWVudHMgYXJlIHBhc3NlZCBhcyBhIHBhaXIgb2YgYWRqYWNlbnQgMzItYml0IGFyZ3VtZW50cworICogaTM4NiBhbHNvIHBhc3NlcyA2NC1iaXQgYXJndW1lbnRzIGFzIGEgcGFpciBvZiBhZGphY2VudCAzMi1iaXQgYXJndW1lbnRzCisgKiBpbiBsb3csaGlnaCBvcmRlcgorICoKKyAqIFNtYWxsIHN0cnVjdHVyZXMgYXJlIHBhc3NlZCBhbmQgcmV0dXJuZWQgaW4gcmVnaXN0ZXJzLiAgVGhlIG1hY3JvCisgKiBjYWxsaW5nIGNvbnZlbnRpb24gY2FuJ3QgZGlyZWN0bHkgZGVhbCB3aXRoIHRoaXMsIHNvIHRoZSB3cmFwcGVyCisgKiBmdW5jdGlvbnMgbXVzdCBkbyB0aGlzLgorICoKKyAqIFRoZXNlIFBWT1BfKiBtYWNyb3MgYXJlIG9ubHkgZGVmaW5lZCB3aXRoaW4gdGhpcyBoZWFkZXIuICBUaGlzCisgKiBtZWFucyB0aGF0IGFsbCB1c2VzIG11c3QgYmUgd3JhcHBlZCBpbiBpbmxpbmUgZnVuY3Rpb25zLiAgVGhpcyBhbHNvCisgKiBtYWtlcyBzdXJlIHRoZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcgdHlwZXMgYXJlIGFsd2F5cyBjb3JyZWN0LgorICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBQVk9QX1ZDQUxMX0FSR1MJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19lYXggPSBfX2VheCwgX19lZHggPSBfX2VkeCwgX19lY3ggPSBfX2VjeAorI2RlZmluZSBQVk9QX0NBTExfQVJHUwkJCVBWT1BfVkNBTExfQVJHUworCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiYSIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJkIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHMyh4KQkJImMiICgodW5zaWduZWQgbG9uZykoeCkpCisKKyNkZWZpbmUgUFZPUF9WQ0FMTF9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCksCVwKKwkJCQkJIj1jIiAoX19lY3gpCisjZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwkJUFZPUF9WQ0FMTF9DTE9CQkVSUworCisjZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkJIj1hIiAoX19lYXgpLCAiPWQiIChfX2VkeCkKKyNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJCVBWT1BfVkNBTExFRV9DTE9CQkVSUworCisjZGVmaW5lIEVYVFJBX0NMT0JCRVJTCisjZGVmaW5lIFZFWFRSQV9DTE9CQkVSUworI2Vsc2UgIC8qIENPTkZJR19YODZfNjQgKi8KKyNkZWZpbmUgUFZPUF9WQ0FMTF9BUkdTCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX2VkaSA9IF9fZWRpLCBfX2VzaSA9IF9fZXNpLAlcCisJCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gKKyNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUywgX19lYXgKKworI2RlZmluZSBQVk9QX0NBTExfQVJHMSh4KQkJIkQiICgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIFBWT1BfQ0FMTF9BUkcyKHgpCQkiUyIgKCh1bnNpZ25lZCBsb25nKSh4KSkKKyNkZWZpbmUgUFZPUF9DQUxMX0FSRzMoeCkJCSJkIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQorI2RlZmluZSBQVk9QX0NBTExfQVJHNCh4KQkJImMiICgodW5zaWduZWQgbG9uZykoeCkpCisKKyNkZWZpbmUgUFZPUF9WQ0FMTF9DTE9CQkVSUwkiPUQiIChfX2VkaSksCQkJCVwKKwkJCQkiPVMiIChfX2VzaSksICI9ZCIgKF9fZWR4KSwJCVwKKwkJCQkiPWMiIChfX2VjeCkKKyNkZWZpbmUgUFZPUF9DQUxMX0NMT0JCRVJTCVBWT1BfVkNBTExfQ0xPQkJFUlMsICI9YSIgKF9fZWF4KQorCisjZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkiPWEiIChfX2VheCkKKyNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCisKKyNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMJICwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiCisjZGVmaW5lIFZFWFRSQV9DTE9CQkVSUwkgLCAicmF4IiwgInI4IiwgInI5IiwgInIxMCIsICJyMTEiCisjZW5kaWYJLyogQ09ORklHX1g4Nl8zMiAqLworCisjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0RFQlVHCisjZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQlCVUdfT04ob3AgPT0gTlVMTCkKKyNlbHNlCisjZGVmaW5lIFBWT1BfVEVTVF9OVUxMKG9wKQkoKHZvaWQpb3ApCisjZW5kaWYKKworI2RlZmluZSBfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBjbGJyLCBjYWxsX2NsYnIsIGV4dHJhX2NsYnIsCQlcCisJCSAgICAgIHByZSwgcG9zdCwgLi4uKQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXJldHR5cGUgX19yZXQ7CQkJCQkJXAorCQlQVk9QX0NBTExfQVJHUzsJCQkJCQlcCisJCVBWT1BfVEVTVF9OVUxMKG9wKTsJCQkJCVwKKwkJLyogVGhpcyBpcyAzMi1iaXQgc3BlY2lmaWMsIGJ1dCBpcyBva2F5IGluIDY0LWJpdCAqLwlcCisJCS8qIHNpbmNlIHRoaXMgY29uZGl0aW9uIHdpbGwgbmV2ZXIgaG9sZCAqLwkJXAorCQlpZiAoc2l6ZW9mKHJldHR5cGUpID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7CQlcCisJCQlhc20gdm9sYXRpbGUocHJlCQkJCVwKKwkJCQkgICAgIHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQlcCisJCQkJICAgICBwb3N0CQkJCVwKKwkJCQkgICAgIDogY2FsbF9jbGJyCQkJXAorCQkJCSAgICAgOiBwYXJhdmlydF90eXBlKG9wKSwJCVwKKwkJCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihjbGJyKSwJCVwKKwkJCQkgICAgICAgIyNfX1ZBX0FSR1NfXwkJCVwKKwkJCQkgICAgIDogIm1lbW9yeSIsICJjYyIgZXh0cmFfY2xicik7CVwKKwkJCV9fcmV0ID0gKHJldHR5cGUpKCgoKHU2NClfX2VkeCkgPDwgMzIpIHwgX19lYXgpOyBcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkJYXNtIHZvbGF0aWxlKHByZQkJCQlcCisJCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJXAorCQkJCSAgICAgcG9zdAkJCQlcCisJCQkJICAgICA6IGNhbGxfY2xicgkJCVwKKwkJCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQlcCisJCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoY2xiciksCQlcCisJCQkJICAgICAgICMjX19WQV9BUkdTX18JCQlcCisJCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIGV4dHJhX2NsYnIpOwlcCisJCQlfX3JldCA9IChyZXR0eXBlKV9fZWF4OwkJCQlcCisJCX0JCQkJCQkJXAorCQlfX3JldDsJCQkJCQkJXAorCX0pCisKKyNkZWZpbmUgX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKKwlfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCBDTEJSX0FOWSwgUFZPUF9DQUxMX0NMT0JCRVJTLAlcCisJCSAgICAgIEVYVFJBX0NMT0JCRVJTLCBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgX19QVk9QX0NBTExFRVNBVkUocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKKwlfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLmZ1bmMsIENMQlJfUkVUX1JFRywJCQlcCisJCSAgICAgIFBWT1BfQ0FMTEVFX0NMT0JCRVJTLCAsCQkJCVwKKwkJICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQorCisKKyNkZWZpbmUgX19fX1BWT1BfVkNBTEwob3AsIGNsYnIsIGNhbGxfY2xiciwgZXh0cmFfY2xiciwgcHJlLCBwb3N0LCAuLi4pCVwKKwkoewkJCQkJCQkJXAorCQlQVk9QX1ZDQUxMX0FSR1M7CQkJCQlcCisJCVBWT1BfVEVTVF9OVUxMKG9wKTsJCQkJCVwKKwkJYXNtIHZvbGF0aWxlKHByZQkJCQkJXAorCQkJICAgICBwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkJCVwKKwkJCSAgICAgcG9zdAkJCQkJXAorCQkJICAgICA6IGNhbGxfY2xicgkJCQlcCisJCQkgICAgIDogcGFyYXZpcnRfdHlwZShvcCksCQkJXAorCQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoY2xiciksCQkJXAorCQkJICAgICAgICMjX19WQV9BUkdTX18JCQkJXAorCQkJICAgICA6ICJtZW1vcnkiLCAiY2MiIGV4dHJhX2NsYnIpOwkJXAorCX0pCisKKyNkZWZpbmUgX19QVk9QX1ZDQUxMKG9wLCBwcmUsIHBvc3QsIC4uLikJCQkJXAorCV9fX19QVk9QX1ZDQUxMKG9wLCBDTEJSX0FOWSwgUFZPUF9WQ0FMTF9DTE9CQkVSUywJCVwKKwkJICAgICAgIFZFWFRSQV9DTE9CQkVSUywJCQkJCVwKKwkJICAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKKworI2RlZmluZSBfX1BWT1BfVkNBTExFRVNBVkUocmV0dHlwZSwgb3AsIHByZSwgcG9zdCwgLi4uKQkJCVwKKwlfX19fUFZPUF9DQUxMKHJldHR5cGUsIG9wLmZ1bmMsIENMQlJfUkVUX1JFRywJCQlcCisJCSAgICAgIFBWT1BfVkNBTExFRV9DTE9CQkVSUywgLAkJCQlcCisJCSAgICAgIHByZSwgcG9zdCwgIyNfX1ZBX0FSR1NfXykKKworCisKKyNkZWZpbmUgUFZPUF9DQUxMMChyZXR0eXBlLCBvcCkJCQkJCQlcCisJX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIikKKyNkZWZpbmUgUFZPUF9WQ0FMTDAob3ApCQkJCQkJCVwKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIikKKworI2RlZmluZSBQVk9QX0NBTExFRTAocmV0dHlwZSwgb3ApCQkJCQlcCisJX19QVk9QX0NBTExFRVNBVkUocmV0dHlwZSwgb3AsICIiLCAiIikKKyNkZWZpbmUgUFZPUF9WQ0FMTEVFMChvcCkJCQkJCQlcCisJX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCAiIiwgIiIpCisKKworI2RlZmluZSBQVk9QX0NBTEwxKHJldHR5cGUsIG9wLCBhcmcxKQkJCQkJXAorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQorI2RlZmluZSBQVk9QX1ZDQUxMMShvcCwgYXJnMSkJCQkJCQlcCisJX19QVk9QX1ZDQUxMKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQorCisjZGVmaW5lIFBWT1BfQ0FMTEVFMShyZXR0eXBlLCBvcCwgYXJnMSkJCQkJCVwKKwlfX1BWT1BfQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTEVFMShvcCwgYXJnMSkJCQkJCQlcCisJX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpKQorCisKKyNkZWZpbmUgUFZPUF9DQUxMMihyZXR0eXBlLCBvcCwgYXJnMSwgYXJnMikJCQkJXAorCV9fUFZPUF9DQUxMKHJldHR5cGUsIG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJXAorCQkgICAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCisjZGVmaW5lIFBWT1BfVkNBTEwyKG9wLCBhcmcxLCBhcmcyKQkJCQkJXAorCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCQlcCisJCSAgICAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCisKKyNkZWZpbmUgUFZPUF9DQUxMRUUyKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyKQkJCQlcCisJX19QVk9QX0NBTExFRVNBVkUocmV0dHlwZSwgb3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCVwKKwkJCSAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCisjZGVmaW5lIFBWT1BfVkNBTExFRTIob3AsIGFyZzEsIGFyZzIpCQkJCQlcCisJX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCAiIiwgIiIsIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLAkJXAorCQkJICAgUFZPUF9DQUxMX0FSRzIoYXJnMikpCisKKworI2RlZmluZSBQVk9QX0NBTEwzKHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczKQkJCVwKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwgIiIsICIiLCBQVk9QX0NBTExfQVJHMShhcmcxKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTDMob3AsIGFyZzEsIGFyZzIsIGFyZzMpCQkJCVwKKwlfX1BWT1BfVkNBTEwob3AsICIiLCAiIiwgUFZPUF9DQUxMX0FSRzEoYXJnMSksCQkJXAorCQkgICAgIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLCBQVk9QX0NBTExfQVJHMyhhcmczKSkKKworLyogVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGluIHg4Nl82NC4gV2UgY2FuIG1ha2UgaXQgbXVjaCBzaW1wbGVyICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBQVk9QX0NBTEw0KHJldHR5cGUsIG9wLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KQkJCVwKKwlfX1BWT1BfQ0FMTChyZXR0eXBlLCBvcCwJCQkJCVwKKwkJICAgICJwdXNoICVbX2FyZzRdOyIsICJsZWEgNCglJWVzcCksJSVlc3A7IiwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLCBQVk9QX0NBTExfQVJHMihhcmcyKSwJCVwKKwkJICAgIFBWT1BfQ0FMTF9BUkczKGFyZzMpLCBbX2FyZzRdICJtciIgKCh1MzIpKGFyZzQpKSkKKyNkZWZpbmUgUFZPUF9WQ0FMTDQob3AsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpCQkJCVwKKwlfX1BWT1BfVkNBTEwob3AsCQkJCQkJXAorCQkgICAgInB1c2ggJVtfYXJnNF07IiwgImxlYSA0KCUlZXNwKSwlJWVzcDsiLAkJXAorCQkgICAgIjAiICgodTMyKShhcmcxKSksICIxIiAoKHUzMikoYXJnMikpLAkJXAorCQkgICAgIjIiICgodTMyKShhcmczKSksIFtfYXJnNF0gIm1yIiAoKHUzMikoYXJnNCkpKQorI2Vsc2UKKyNkZWZpbmUgUFZPUF9DQUxMNChyZXR0eXBlLCBvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQlcCisJX19QVk9QX0NBTEwocmV0dHlwZSwgb3AsICIiLCAiIiwJCQkJXAorCQkgICAgUFZPUF9DQUxMX0FSRzEoYXJnMSksIFBWT1BfQ0FMTF9BUkcyKGFyZzIpLAkJXAorCQkgICAgUFZPUF9DQUxMX0FSRzMoYXJnMyksIFBWT1BfQ0FMTF9BUkc0KGFyZzQpKQorI2RlZmluZSBQVk9QX1ZDQUxMNChvcCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkJCQkJXAorCV9fUFZPUF9WQ0FMTChvcCwgIiIsICIiLAkJCQkJXAorCQkgICAgIFBWT1BfQ0FMTF9BUkcxKGFyZzEpLCBQVk9QX0NBTExfQVJHMihhcmcyKSwJXAorCQkgICAgIFBWT1BfQ0FMTF9BUkczKGFyZzMpLCBQVk9QX0NBTExfQVJHNChhcmc0KSkKKyNlbmRpZgorCisvKiBMYXp5IG1vZGUgZm9yIGJhdGNoaW5nIHVwZGF0ZXMgLyBjb250ZXh0IHN3aXRjaCAqLworZW51bSBwYXJhdmlydF9sYXp5X21vZGUgeworCVBBUkFWSVJUX0xBWllfTk9ORSwKKwlQQVJBVklSVF9MQVpZX01NVSwKKwlQQVJBVklSVF9MQVpZX0NQVSwKK307CisKK2VudW0gcGFyYXZpcnRfbGF6eV9tb2RlIHBhcmF2aXJ0X2dldF9sYXp5X21vZGUodm9pZCk7Cit2b2lkIHBhcmF2aXJ0X3N0YXJ0X2NvbnRleHRfc3dpdGNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldik7Cit2b2lkIHBhcmF2aXJ0X2VuZF9jb250ZXh0X3N3aXRjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpOworCit2b2lkIHBhcmF2aXJ0X2VudGVyX2xhenlfbW11KHZvaWQpOwordm9pZCBwYXJhdmlydF9sZWF2ZV9sYXp5X21tdSh2b2lkKTsKKwordm9pZCBfcGFyYXZpcnRfbm9wKHZvaWQpOwordTMyIF9wYXJhdmlydF9pZGVudF8zMih1MzIpOwordTY0IF9wYXJhdmlydF9pZGVudF82NCh1NjQpOworCisjZGVmaW5lIHBhcmF2aXJ0X25vcAkoKHZvaWQgKilfcGFyYXZpcnRfbm9wKQorCisvKiBUaGVzZSBhbGwgc2l0IGluIHRoZSAucGFyYWluc3RydWN0aW9ucyBzZWN0aW9uIHRvIHRlbGwgdXMgd2hhdCB0byBwYXRjaC4gKi8KK3N0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlIHsKKwl1OCAqaW5zdHI7IAkJLyogb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zICovCisJdTggaW5zdHJ0eXBlOwkJLyogdHlwZSBvZiB0aGlzIGluc3RydWN0aW9uICovCisJdTggbGVuOwkJCS8qIGxlbmd0aCBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiAqLworCXUxNiBjbG9iYmVyczsJCS8qIHdoYXQgcmVnaXN0ZXJzIHlvdSBtYXkgY2xvYmJlciAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlIF9fcGFyYWluc3RydWN0aW9uc1tdLAorCV9fcGFyYWluc3RydWN0aW9uc19lbmRbXTsKKworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYJLyogX0FTTV9YODZfUEFSQVZJUlRfVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAppbmRleCAxMDNmMWRkLi4wNGVhY2VmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtNDksNyArNDksNyBAQAogI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCSIlJSJfX3N0cmluZ2lmeShfX3BlcmNwdV9zZWcpIjolUCIgI3gKICNkZWZpbmUgX19teV9jcHVfb2Zmc2V0CQlwZXJjcHVfcmVhZCh0aGlzX2NwdV9vZmYpCiAjZWxzZQotI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCSIlIiAjeAorI2RlZmluZSBfX3BlcmNwdV9hcmcoeCkJCSIlUCIgI3gKICNlbmRpZgogCiAvKgpAQCAtMTA0LDM2ICsxMDQsNDggQEAKIAl9CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBwZXJjcHVfZnJvbV9vcChvcCwgdmFyKQkJCQlcCisjZGVmaW5lIHBlcmNwdV9mcm9tX29wKG9wLCB2YXIsIGNvbnN0cmFpbnQpCQlcCiAoewkJCQkJCQlcCiAJdHlwZW9mKHZhcikgcmV0X187CQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCVwKIAljYXNlIDE6CQkJCQkJXAogCQlhc20ob3AgImIgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9cSIgKHJldF9fKQkJCVwKLQkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCiAJY2FzZSAyOgkJCQkJCVwKIAkJYXNtKG9wICJ3ICJfX3BlcmNwdV9hcmcoMSkiLCUwIgkJXAogCQkgICAgOiAiPXIiIChyZXRfXykJCQlcCi0JCSAgICA6ICJtIiAodmFyKSk7CQkJXAorCQkgICAgOiBjb25zdHJhaW50KTsJCQlcCiAJCWJyZWFrOwkJCQkJXAogCWNhc2UgNDoJCQkJCQlcCiAJCWFzbShvcCAibCAiX19wZXJjcHVfYXJnKDEpIiwlMCIJCVwKIAkJICAgIDogIj1yIiAocmV0X18pCQkJXAotCQkgICAgOiAibSIgKHZhcikpOwkJCVwKKwkJICAgIDogY29uc3RyYWludCk7CQkJXAogCQlicmVhazsJCQkJCVwKIAljYXNlIDg6CQkJCQkJXAogCQlhc20ob3AgInEgIl9fcGVyY3B1X2FyZygxKSIsJTAiCQlcCiAJCSAgICA6ICI9ciIgKHJldF9fKQkJCVwKLQkJICAgIDogIm0iICh2YXIpKTsJCQlcCisJCSAgICA6IGNvbnN0cmFpbnQpOwkJCVwKIAkJYnJlYWs7CQkJCQlcCiAJZGVmYXVsdDogX19iYWRfcGVyY3B1X3NpemUoKTsJCQlcCiAJfQkJCQkJCVwKIAlyZXRfXzsJCQkJCQlcCiB9KQogCi0jZGVmaW5lIHBlcmNwdV9yZWFkKHZhcikJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyKQorLyoKKyAqIHBlcmNwdV9yZWFkKCkgbWFrZXMgZ2NjIGxvYWQgdGhlIHBlcmNwdSB2YXJpYWJsZSBldmVyeSB0aW1lIGl0IGlzCisgKiBhY2Nlc3NlZCB3aGlsZSBwZXJjcHVfcmVhZF9zdGFibGUoKSBhbGxvd3MgdGhlIHZhbHVlIHRvIGJlIGNhY2hlZC4KKyAqIHBlcmNwdV9yZWFkX3N0YWJsZSgpIGlzIG1vcmUgZWZmaWNpZW50IGFuZCBjYW4gYmUgdXNlZCBpZiBpdHMgdmFsdWUKKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgYWNyb3NzIGNwdXMuICBUaGUgY3VycmVudCB1c2VycyBpbmNsdWRlCisgKiBnZXRfY3VycmVudCgpIGFuZCBnZXRfdGhyZWFkX2luZm8oKSBib3RoIG9mIHdoaWNoIGFyZSBhY3R1YWxseQorICogcGVyLXRocmVhZCB2YXJpYWJsZXMgaW1wbGVtZW50ZWQgYXMgcGVyLWNwdSB2YXJpYWJsZXMgYW5kIHRodXMKKyAqIHN0YWJsZSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHRhc2suCisgKi8KKyNkZWZpbmUgcGVyY3B1X3JlYWQodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGVyX2NwdV9fIyN2YXIsCVwKKwkJCQkJICAgICAgICJtIiAocGVyX2NwdV9fIyN2YXIpKQorI2RlZmluZSBwZXJjcHVfcmVhZF9zdGFibGUodmFyKQlwZXJjcHVfZnJvbV9vcCgibW92IiwgcGVyX2NwdV9fIyN2YXIsCVwKKwkJCQkJICAgICAgICJwIiAoJnBlcl9jcHVfXyMjdmFyKSkKICNkZWZpbmUgcGVyY3B1X3dyaXRlKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCiAjZGVmaW5lIHBlcmNwdV9hZGQodmFyLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKICNkZWZpbmUgcGVyY3B1X3N1Yih2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJzdWIiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDE2NzQ4MDcuLjRjNWI1MWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTEzNSw2ICsxMzUsMTEgQEAKIAlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIFBURV9QRk5fTUFTSykgPj4gUEFHRV9TSElGVDsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wZm4ocG1kX3QgcG1kKQoreworCXJldHVybiAocG1kX3ZhbChwbWQpICYgUFRFX1BGTl9NQVNLKSA+PiBQQUdFX1NISUZUOworfQorCiAjZGVmaW5lIHB0ZV9wYWdlKHB0ZSkJcGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKQogCiBzdGF0aWMgaW5saW5lIGludCBwbWRfbGFyZ2UocG1kX3QgcHRlKQpAQCAtMzU5LDcgKzM2NCw3IEBACiAgKiB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSBpbiB0aGUgcG1kIHBhZ2Ugd2hpY2ggd291bGQKICAqIGNvbnRyb2wgdGhlIGdpdmVuIHZpcnR1YWwgYWRkcmVzcwogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBtZF9pbmRleCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gKGFkZHJlc3MgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQgLSAxKTsKIH0KQEAgLTM3OSw3ICszODQsNyBAQAogICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHB0ZSBwYWdlIHdoaWNoIHdvdWxkCiAgKiBjb250cm9sIHRoZSBnaXZlbiB2aXJ0dWFsIGFkZHJlc3MKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBwdGVfaW5kZXgodW5zaWduZWQgbG9uZyBhZGRyZXNzKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9pbmRleCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CiAJcmV0dXJuIChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpOwogfQpAQCAtNDMwLDExICs0MzUsNiBAQAogCXJldHVybiAocG1kX3QgKilwdWRfcGFnZV92YWRkcigqcHVkKSArIHBtZF9pbmRleChhZGRyZXNzKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wZm4ocG1kX3QgcG1kKQotewotCXJldHVybiAocG1kX3ZhbChwbWQpICYgUFRFX1BGTl9NQVNLKSA+PiBQQUdFX1NISUZUOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBwdWRfbGFyZ2UocHVkX3QgcHVkKQogewogCXJldHVybiAocHVkX3ZhbChwdWQpICYgKF9QQUdFX1BTRSB8IF9QQUdFX1BSRVNFTlQpKSA9PQpAQCAtNDcwLDcgKzQ3MCw3IEBACiAjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCXBmbl90b19wYWdlKHBnZF92YWwocGdkKSA+PiBQQUdFX1NISUZUKQogCiAvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkuICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHB1ZF9pbmRleCh1bnNpZ25lZCBsb25nIGFkZHJlc3MpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHVkX2luZGV4KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlyZXR1cm4gKGFkZHJlc3MgPj4gUFVEX1NISUZUKSAmIChQVFJTX1BFUl9QVUQgLSAxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggYzc3NjgyNi4uZTA4ZWEwNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTQwMyw3ICs0MDMsMTcgQEAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgaWdub3JlX3N5c3JldCh2b2lkKTsKICNlbHNlCS8qIFg4Nl82NCAqLwogI2lmZGVmIENPTkZJR19DQ19TVEFDS1BST1RFQ1RPUgotREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHN0YWNrX2NhbmFyeSk7CisvKgorICogTWFrZSBzdXJlIHN0YWNrIGNhbmFyeSBzZWdtZW50IGJhc2UgaXMgY2FjaGVkLWFsaWduZWQ6CisgKiAgICJGb3IgSW50ZWwgQXRvbSBwcm9jZXNzb3JzLCBhdm9pZCBub24gemVybyBzZWdtZW50IGJhc2UgYWRkcmVzcworICogICAgdGhhdCBpcyBub3QgYWxpZ25lZCB0byBjYWNoZSBsaW5lIGJvdW5kYXJ5IGF0IGFsbCBjb3N0LiIKKyAqIChPcHRpbSBSZWYgTWFudWFsIEFzc2VtYmx5L0NvbXBpbGVyIENvZGluZyBSdWxlIDE1LikKKyAqLworc3RydWN0IHN0YWNrX2NhbmFyeSB7CisJY2hhciBfX3BhZFsyMF07CQkvKiBjYW5hcnkgYXQgJWdzOjIwICovCisJdW5zaWduZWQgbG9uZyBjYW5hcnk7Cit9OworREVDTEFSRV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHN0YWNrX2NhbmFyeSwgc3RhY2tfY2FuYXJ5KTsKICNlbmRpZgogI2VuZGlmCS8qIFg4Nl82NCAqLwogCkBAIC03MDMsMTMgKzcxMywyMyBAQAogCXJlcF9ub3AoKTsKIH0KIAotLyogU3RvcCBzcGVjdWxhdGl2ZSBleGVjdXRpb246ICovCisvKiBTdG9wIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBhbmQgcHJlZmV0Y2hpbmcgb2YgbW9kaWZpZWQgY29kZS4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jX2NvcmUodm9pZCkKIHsKIAlpbnQgdG1wOwogCi0JYXNtIHZvbGF0aWxlKCJjcHVpZCIgOiAiPWEiICh0bXApIDogIjAiICgxKQotCQkgICAgIDogImVieCIsICJlY3giLCAiZWR4IiwgIm1lbW9yeSIpOworI2lmIGRlZmluZWQoQ09ORklHX00zODYpIHx8IGRlZmluZWQoQ09ORklHX000ODYpCisJaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgNSkKKwkJLyogVGhlcmUgaXMgbm8gc3BlY3VsYXRpdmUgZXhlY3V0aW9uLgorCQkgKiBqbXAgaXMgYSBiYXJyaWVyIHRvIHByZWZldGNoaW5nLiAqLworCQlhc20gdm9sYXRpbGUoImptcCAxZlxuMTpcbiIgOjo6ICJtZW1vcnkiKTsKKwllbHNlCisjZW5kaWYKKwkJLyogY3B1aWQgaXMgYSBiYXJyaWVyIHRvIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbi4KKwkJICogUHJlZmV0Y2hlZCBpbnN0cnVjdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkKKwkJICogaW52YWxpZGF0ZWQgd2hlbiBtb2RpZmllZC4gKi8KKwkJYXNtIHZvbGF0aWxlKCJjcHVpZCIgOiAiPWEiICh0bXApIDogIjAiICgxKQorCQkJICAgICA6ICJlYngiLCAiZWN4IiwgImVkeCIsICJtZW1vcnkiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fbW9uaXRvcihjb25zdCB2b2lkICplYXgsIHVuc2lnbmVkIGxvbmcgZWN4LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggMjYzZDM5Ny4uNzVhZjU5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0xLDMzICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfU0NBVFRFUkxJU1RfSAogI2RlZmluZSBfQVNNX1g4Nl9TQ0FUVEVSTElTVF9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotc3RydWN0IHNjYXR0ZXJsaXN0IHsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0cKLQl1bnNpZ25lZCBsb25nCXNnX21hZ2ljOwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZwlwYWdlX2xpbms7Ci0JdW5zaWduZWQgaW50CW9mZnNldDsKLQl1bnNpZ25lZCBpbnQJbGVuZ3RoOwotCWRtYV9hZGRyX3QJZG1hX2FkZHJlc3M7Ci0JdW5zaWduZWQgaW50CWRtYV9sZW5ndGg7Ci19OwotCi0jZGVmaW5lIEFSQ0hfSEFTX1NHX0NIQUlOCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDAwZmZmZmZmKQogCi0vKgotICogVGhlc2UgbWFjcm9zIHNob3VsZCBiZSB1c2VkIGFmdGVyIGEgcGNpX21hcF9zZyBjYWxsIGhhcyBiZWVuIGRvbmUKLSAqIHRvIGdldCBidXMgYWRkcmVzc2VzIG9mIGVhY2ggb2YgdGhlIFNHIGVudHJpZXMgYW5kIHRoZWlyIGxlbmd0aHMuCi0gKiBZb3Ugc2hvdWxkIG9ubHkgd29yayB3aXRoIHRoZSBudW1iZXIgb2Ygc2cgZW50cmllcyBwY2lfbWFwX3NnCi0gKiByZXR1cm5zLgotICovCi0jZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgotIyBkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCi0jZWxzZQotIyBkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5kbWFfbGVuZ3RoKQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2NhdHRlcmxpc3QuaD4KIAogI2VuZGlmIC8qIF9BU01fWDg2X1NDQVRURVJMSVNUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NobWJ1Zi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2htYnVmLmgKaW5kZXggYjUxNDEzYi4uODNjMDVmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2htYnVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2htYnVmLmgKQEAgLTEsNTEgKzEgQEAKLSNpZm5kZWYgX0FTTV9YODZfU0hNQlVGX0gKLSNkZWZpbmUgX0FTTV9YODZfU0hNQlVGX0gKLQotLyoKLSAqIFRoZSBzaG1pZDY0X2RzIHN0cnVjdHVyZSBmb3IgeDg2IGFyY2hpdGVjdHVyZS4KLSAqIE5vdGUgZXh0cmEgcGFkZGluZyBiZWNhdXNlIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBiYWNrIGFuZCBmb3J0aAotICogYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgc3BhY2UuCi0gKgotICogUGFkIHNwYWNlIG9uIDMyIGJpdCBpcyBsZWZ0IGZvcjoKLSAqIC0gNjQtYml0IHRpbWVfdCB0byBzb2x2ZSB5MjAzOCBwcm9ibGVtCi0gKiAtIDIgbWlzY2VsbGFuZW91cyAzMi1iaXQgdmFsdWVzCi0gKgotICogUGFkIHNwYWNlIG9uIDY0IGJpdCBpcyBsZWZ0IGZvcjoKLSAqIC0gMiBtaXNjZWxsYW5lb3VzIDY0LWJpdCB2YWx1ZXMKLSAqLwotCi1zdHJ1Y3Qgc2htaWQ2NF9kcyB7Ci0Jc3RydWN0IGlwYzY0X3Blcm0Jc2htX3Blcm07CS8qIG9wZXJhdGlvbiBwZXJtcyAqLwotCXNpemVfdAkJCXNobV9zZWdzejsJLyogc2l6ZSBvZiBzZWdtZW50IChieXRlcykgKi8KLQlfX2tlcm5lbF90aW1lX3QJCXNobV9hdGltZTsJLyogbGFzdCBhdHRhY2ggdGltZSAqLwotI2lmZGVmIF9faTM4Nl9fCi0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQxOwotI2VuZGlmCi0JX19rZXJuZWxfdGltZV90CQlzaG1fZHRpbWU7CS8qIGxhc3QgZGV0YWNoIHRpbWUgKi8KLSNpZmRlZiBfX2kzODZfXwotCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkMjsKLSNlbmRpZgotCV9fa2VybmVsX3RpbWVfdAkJc2htX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCi0jaWZkZWYgX19pMzg2X18KLQl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDM7Ci0jZW5kaWYKLQlfX2tlcm5lbF9waWRfdAkJc2htX2NwaWQ7CS8qIHBpZCBvZiBjcmVhdG9yICovCi0JX19rZXJuZWxfcGlkX3QJCXNobV9scGlkOwkvKiBwaWQgb2YgbGFzdCBvcGVyYXRvciAqLwotCXVuc2lnbmVkIGxvbmcJCXNobV9uYXR0Y2g7CS8qIG5vLiBvZiBjdXJyZW50IGF0dGFjaGVzICovCi0JdW5zaWduZWQgbG9uZwkJX191bnVzZWQ0OwotCXVuc2lnbmVkIGxvbmcJCV9fdW51c2VkNTsKLX07Ci0KLXN0cnVjdCBzaG1pbmZvNjQgewotCXVuc2lnbmVkIGxvbmcJc2htbWF4OwotCXVuc2lnbmVkIGxvbmcJc2htbWluOwotCXVuc2lnbmVkIGxvbmcJc2htbW5pOwotCXVuc2lnbmVkIGxvbmcJc2htc2VnOwotCXVuc2lnbmVkIGxvbmcJc2htYWxsOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQzOwotCXVuc2lnbmVkIGxvbmcJX191bnVzZWQ0OwotfTsKLQotI2VuZGlmIC8qIF9BU01fWDg2X1NITUJVRl9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2htYnVmLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGNhOGJmMmMuLjZiNzEzODQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC0xLDYwICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X1NPQ0tFVF9ICi0jZGVmaW5lIF9BU01fWDg2X1NPQ0tFVF9ICi0KLSNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgotCi0vKiBGb3Igc2V0c29ja29wdCgyKSAqLwotI2RlZmluZSBTT0xfU09DS0VUCTEKLQotI2RlZmluZSBTT19ERUJVRwkxCi0jZGVmaW5lIFNPX1JFVVNFQUREUgkyCi0jZGVmaW5lIFNPX1RZUEUJCTMKLSNkZWZpbmUgU09fRVJST1IJNAotI2RlZmluZSBTT19ET05UUk9VVEUJNQotI2RlZmluZSBTT19CUk9BRENBU1QJNgotI2RlZmluZSBTT19TTkRCVUYJNwotI2RlZmluZSBTT19SQ1ZCVUYJOAotI2RlZmluZSBTT19TTkRCVUZGT1JDRQkzMgotI2RlZmluZSBTT19SQ1ZCVUZGT1JDRQkzMwotI2RlZmluZSBTT19LRUVQQUxJVkUJOQotI2RlZmluZSBTT19PT0JJTkxJTkUJMTAKLSNkZWZpbmUgU09fTk9fQ0hFQ0sJMTEKLSNkZWZpbmUgU09fUFJJT1JJVFkJMTIKLSNkZWZpbmUgU09fTElOR0VSCTEzCi0jZGVmaW5lIFNPX0JTRENPTVBBVAkxNAotLyogVG8gYWRkIDojZGVmaW5lIFNPX1JFVVNFUE9SVCAxNSAqLwotI2RlZmluZSBTT19QQVNTQ1JFRAkxNgotI2RlZmluZSBTT19QRUVSQ1JFRAkxNwotI2RlZmluZSBTT19SQ1ZMT1dBVAkxOAotI2RlZmluZSBTT19TTkRMT1dBVAkxOQotI2RlZmluZSBTT19SQ1ZUSU1FTwkyMAotI2RlZmluZSBTT19TTkRUSU1FTwkyMQotCi0vKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLwotI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMjIKLSNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQJMjMKLSNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCQkyNAotCi0jZGVmaW5lIFNPX0JJTkRUT0RFVklDRQkyNQotCi0vKiBTb2NrZXQgZmlsdGVyaW5nICovCi0jZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgICAgICAgIDI2Ci0jZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgICAgICAgIDI3Ci0KLSNkZWZpbmUgU09fUEVFUk5BTUUJCTI4Ci0jZGVmaW5lIFNPX1RJTUVTVEFNUAkJMjkKLSNkZWZpbmUgU0NNX1RJTUVTVEFNUAkJU09fVElNRVNUQU1QCi0KLSNkZWZpbmUgU09fQUNDRVBUQ09OTgkJMzAKLQotI2RlZmluZSBTT19QRUVSU0VDCQkzMQotI2RlZmluZSBTT19QQVNTU0VDCQkzNAotI2RlZmluZSBTT19USU1FU1RBTVBOUwkJMzUKLSNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TCQlTT19USU1FU1RBTVBOUwotCi0jZGVmaW5lIFNPX01BUksJCQkzNgotCi0jZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKLSNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKLQotI2VuZGlmIC8qIF9BU01fWDg2X1NPQ0tFVF9IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc29ja2V0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NraW9zLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NraW9zLmgKaW5kZXggNDljYzcyYi4uZGVmNmQ0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2lvcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NvY2tpb3MuaApAQCAtMSwxMyArMSBAQAotI2lmbmRlZiBfQVNNX1g4Nl9TT0NLSU9TX0gKLSNkZWZpbmUgX0FTTV9YODZfU09DS0lPU19ICi0KLS8qIFNvY2tldC1sZXZlbCBJL08gY29udHJvbCBjYWxscy4gKi8KLSNkZWZpbmUgRklPU0VUT1dOCTB4ODkwMQotI2RlZmluZSBTSU9DU1BHUlAJMHg4OTAyCi0jZGVmaW5lIEZJT0dFVE9XTgkweDg5MDMKLSNkZWZpbmUgU0lPQ0dQR1JQCTB4ODkwNAotI2RlZmluZSBTSU9DQVRNQVJLCTB4ODkwNQotI2RlZmluZSBTSU9DR1NUQU1QCTB4ODkwNgkJLyogR2V0IHN0YW1wICh0aW1ldmFsKSAqLwotI2RlZmluZSBTSU9DR1NUQU1QTlMJMHg4OTA3CQkvKiBHZXQgc3RhbXAgKHRpbWVzcGVjKSAqLwotCi0jZW5kaWYgLyogX0FTTV9YODZfU09DS0lPU19IICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc29ja2lvcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrcHJvdGVjdG9yLmgKaW5kZXggYzJkNzQyYy4uMTU3NTE3NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2twcm90ZWN0b3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3Byb3RlY3Rvci5oCkBAIC00OCw3ICs0OCw3IEBACiAgKiBoZWFkXzMyIGZvciBib290IENQVSBhbmQgc2V0dXBfcGVyX2NwdV9hcmVhcygpIGZvciBvdGhlcnMuCiAgKi8KICNkZWZpbmUgR0RUX1NUQUNLX0NBTkFSWV9JTklUCQkJCQkJXAotCVtHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZXSA9IHsgeyB7IDB4MDAwMDAwMTgsIDB4MDA0MDkwMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9TVEFDS19DQU5BUlldID0gR0RUX0VOVFJZX0lOSVQoMHg0MDkwLCAwLCAweDE4KSwKIAogLyoKICAqIEluaXRpYWxpemUgdGhlIHN0YWNrcHJvdGVjdG9yIGNhbmFyeSB2YWx1ZS4KQEAgLTc4LDIxICs3OCwxOSBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIAlwZXJjcHVfd3JpdGUoaXJxX3N0YWNrX3VuaW9uLnN0YWNrX2NhbmFyeSwgY2FuYXJ5KTsKICNlbHNlCi0JcGVyY3B1X3dyaXRlKHN0YWNrX2NhbmFyeSwgY2FuYXJ5KTsKKwlwZXJjcHVfd3JpdGUoc3RhY2tfY2FuYXJ5LmNhbmFyeSwgY2FuYXJ5KTsKICNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfc3RhY2tfY2FuYXJ5X3NlZ21lbnQoaW50IGNwdSkKIHsKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JdW5zaWduZWQgbG9uZyBjYW5hcnkgPSAodW5zaWduZWQgbG9uZykmcGVyX2NwdShzdGFja19jYW5hcnksIGNwdSkgLSAyMDsKKwl1bnNpZ25lZCBsb25nIGNhbmFyeSA9ICh1bnNpZ25lZCBsb25nKSZwZXJfY3B1KHN0YWNrX2NhbmFyeSwgY3B1KTsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdF90YWJsZSA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7CiAJc3RydWN0IGRlc2Nfc3RydWN0IGRlc2M7CiAKIAlkZXNjID0gZ2R0X3RhYmxlW0dEVF9FTlRSWV9TVEFDS19DQU5BUlldOwotCWRlc2MuYmFzZTAgPSBjYW5hcnkgJiAweGZmZmY7Ci0JZGVzYy5iYXNlMSA9IChjYW5hcnkgPj4gMTYpICYgMHhmZjsKLQlkZXNjLmJhc2UyID0gKGNhbmFyeSA+PiAyNCkgJiAweGZmOworCXNldF9kZXNjX2Jhc2UoJmRlc2MsIGNhbmFyeSk7CiAJd3JpdGVfZ2R0X2VudHJ5KGdkdF90YWJsZSwgR0RUX0VOVFJZX1NUQUNLX0NBTkFSWSwgJmRlc2MsIERFU0NUWVBFX1MpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDY0M2M1OWIuLmYwOGY5NzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0zMSw3ICszMSw3IEBACiAJIm1vdmwgJVBbdGFza19jYW5hcnldKCVbbmV4dF0pLCAlJWVieFxuXHQiCQkJXAogCSJtb3ZsICUlZWJ4LCAiX19wZXJjcHVfYXJnKFtzdGFja19jYW5hcnldKSJcblx0IgogI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfb3BhcmFtCQkJCQkJXAotCSwgW3N0YWNrX2NhbmFyeV0gIj1tIiAocGVyX2NwdV92YXIoc3RhY2tfY2FuYXJ5KSkKKwksIFtzdGFja19jYW5hcnldICI9bSIgKHBlcl9jcHVfdmFyKHN0YWNrX2NhbmFyeS5jYW5hcnkpKQogI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCQkJCQkJXAogCSwgW3Rhc2tfY2FuYXJ5XSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2tfY2FuYXJ5KSkKICNlbHNlCS8qIENDX1NUQUNLUFJPVEVDVE9SICovCkBAIC0xNTAsMzMgKzE1MCw2IEBACiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgX3NldF9iYXNlKGFkZHIsIGJhc2UpIGRvIHsgdW5zaWduZWQgbG9uZyBfX3ByOyBcCi1fX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdncgJSVkeCwlMVxuXHQiIFwKLQkicm9ybCAkMTYsJSVlZHhcblx0IiBcCi0JIm1vdmIgJSVkbCwlMlxuXHQiIFwKLQkibW92YiAlJWRoLCUzIiBcCi0JOiI9JmQiIChfX3ByKSBcCi0JOiJtIiAoKigoYWRkcikrMikpLCBcCi0JICJtIiAoKigoYWRkcikrNCkpLCBcCi0JICJtIiAoKigoYWRkcikrNykpLCBcCi0JICIwIiAoYmFzZSkgXAotCSk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgX3NldF9saW1pdChhZGRyLCBsaW1pdCkgZG8geyB1bnNpZ25lZCBsb25nIF9fbHI7IFwKLV9fYXNtX18gX192b2xhdGlsZV9fICgibW92dyAlJWR4LCUxXG5cdCIgXAotCSJyb3JsICQxNiwlJWVkeFxuXHQiIFwKLQkibW92YiAlMiwlJWRoXG5cdCIgXAotCSJhbmRiICQweGYwLCUlZGhcblx0IiBcCi0JIm9yYiAlJWRoLCUlZGxcblx0IiBcCi0JIm1vdmIgJSVkbCwlMiIgXAotCToiPSZkIiAoX19scikgXAotCToibSIgKCooYWRkcikpLCBcCi0JICJtIiAoKigoYWRkcikrNikpLCBcCi0JICIwIiAobGltaXQpIFwKLQkpOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIHNldF9iYXNlKGxkdCwgYmFzZSkgX3NldF9iYXNlKCgoY2hhciAqKSYobGR0KSkgLCAoYmFzZSkpCi0jZGVmaW5lIHNldF9saW1pdChsZHQsIGxpbWl0KSBfc2V0X2xpbWl0KCgoY2hhciAqKSYobGR0KSkgLCAoKGxpbWl0KS0xKSkKIAogZXh0ZXJuIHZvaWQgbmF0aXZlX2xvYWRfZ3NfaW5kZXgodW5zaWduZWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXJtYml0cy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGVybWJpdHMuaAppbmRleCBhZjFiNzBlLi4zOTM1YjEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXJtYml0cy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgKQEAgLTEsMTk4ICsxIEBACi0jaWZuZGVmIF9BU01fWDg2X1RFUk1CSVRTX0gKLSNkZWZpbmUgX0FTTV9YODZfVEVSTUJJVFNfSAotCi0jaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyCWNjX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAlzcGVlZF90OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQJdGNmbGFnX3Q7Ci0KLSNkZWZpbmUgTkNDUyAxOQotc3RydWN0IHRlcm1pb3MgewotCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCi0JY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCi0JY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCi19OwotCi1zdHJ1Y3QgdGVybWlvczIgewotCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCi0JdGNmbGFnX3QgY19jZmxhZzsJCS8qIGNvbnRyb2wgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfbGZsYWc7CQkvKiBsb2NhbCBtb2RlIGZsYWdzICovCi0JY2NfdCBjX2xpbmU7CQkJLyogbGluZSBkaXNjaXBsaW5lICovCi0JY2NfdCBjX2NjW05DQ1NdOwkJLyogY29udHJvbCBjaGFyYWN0ZXJzICovCi0Jc3BlZWRfdCBjX2lzcGVlZDsJCS8qIGlucHV0IHNwZWVkICovCi0Jc3BlZWRfdCBjX29zcGVlZDsJCS8qIG91dHB1dCBzcGVlZCAqLwotfTsKLQotc3RydWN0IGt0ZXJtaW9zIHsKLQl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLwotCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KLQl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLwotCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLwotCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLwotCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLwotCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KLX07Ci0KLS8qIGNfY2MgY2hhcmFjdGVycyAqLwotI2RlZmluZSBWSU5UUiAwCi0jZGVmaW5lIFZRVUlUIDEKLSNkZWZpbmUgVkVSQVNFIDIKLSNkZWZpbmUgVktJTEwgMwotI2RlZmluZSBWRU9GIDQKLSNkZWZpbmUgVlRJTUUgNQotI2RlZmluZSBWTUlOIDYKLSNkZWZpbmUgVlNXVEMgNwotI2RlZmluZSBWU1RBUlQgOAotI2RlZmluZSBWU1RPUCA5Ci0jZGVmaW5lIFZTVVNQIDEwCi0jZGVmaW5lIFZFT0wgMTEKLSNkZWZpbmUgVlJFUFJJTlQgMTIKLSNkZWZpbmUgVkRJU0NBUkQgMTMKLSNkZWZpbmUgVldFUkFTRSAxNAotI2RlZmluZSBWTE5FWFQgMTUKLSNkZWZpbmUgVkVPTDIgMTYKLQotLyogY19pZmxhZyBiaXRzICovCi0jZGVmaW5lIElHTkJSSwkwMDAwMDAxCi0jZGVmaW5lIEJSS0lOVAkwMDAwMDAyCi0jZGVmaW5lIElHTlBBUgkwMDAwMDA0Ci0jZGVmaW5lIFBBUk1SSwkwMDAwMDEwCi0jZGVmaW5lIElOUENLCTAwMDAwMjAKLSNkZWZpbmUgSVNUUklQCTAwMDAwNDAKLSNkZWZpbmUgSU5MQ1IJMDAwMDEwMAotI2RlZmluZSBJR05DUgkwMDAwMjAwCi0jZGVmaW5lIElDUk5MCTAwMDA0MDAKLSNkZWZpbmUgSVVDTEMJMDAwMTAwMAotI2RlZmluZSBJWE9OCTAwMDIwMDAKLSNkZWZpbmUgSVhBTlkJMDAwNDAwMAotI2RlZmluZSBJWE9GRgkwMDEwMDAwCi0jZGVmaW5lIElNQVhCRUwJMDAyMDAwMAotI2RlZmluZSBJVVRGOAkwMDQwMDAwCi0KLS8qIGNfb2ZsYWcgYml0cyAqLwotI2RlZmluZSBPUE9TVAkwMDAwMDAxCi0jZGVmaW5lIE9MQ1VDCTAwMDAwMDIKLSNkZWZpbmUgT05MQ1IJMDAwMDAwNAotI2RlZmluZSBPQ1JOTAkwMDAwMDEwCi0jZGVmaW5lIE9OT0NSCTAwMDAwMjAKLSNkZWZpbmUgT05MUkVUCTAwMDAwNDAKLSNkZWZpbmUgT0ZJTEwJMDAwMDEwMAotI2RlZmluZSBPRkRFTAkwMDAwMjAwCi0jZGVmaW5lIE5MRExZCTAwMDA0MDAKLSNkZWZpbmUgICBOTDAJMDAwMDAwMAotI2RlZmluZSAgIE5MMQkwMDAwNDAwCi0jZGVmaW5lIENSRExZCTAwMDMwMDAKLSNkZWZpbmUgICBDUjAJMDAwMDAwMAotI2RlZmluZSAgIENSMQkwMDAxMDAwCi0jZGVmaW5lICAgQ1IyCTAwMDIwMDAKLSNkZWZpbmUgICBDUjMJMDAwMzAwMAotI2RlZmluZSBUQUJETFkJMDAxNDAwMAotI2RlZmluZSAgIFRBQjAJMDAwMDAwMAotI2RlZmluZSAgIFRBQjEJMDAwNDAwMAotI2RlZmluZSAgIFRBQjIJMDAxMDAwMAotI2RlZmluZSAgIFRBQjMJMDAxNDAwMAotI2RlZmluZSAgIFhUQUJTCTAwMTQwMDAKLSNkZWZpbmUgQlNETFkJMDAyMDAwMAotI2RlZmluZSAgIEJTMAkwMDAwMDAwCi0jZGVmaW5lICAgQlMxCTAwMjAwMDAKLSNkZWZpbmUgVlRETFkJMDA0MDAwMAotI2RlZmluZSAgIFZUMAkwMDAwMDAwCi0jZGVmaW5lICAgVlQxCTAwNDAwMDAKLSNkZWZpbmUgRkZETFkJMDEwMDAwMAotI2RlZmluZSAgIEZGMAkwMDAwMDAwCi0jZGVmaW5lICAgRkYxCTAxMDAwMDAKLQotLyogY19jZmxhZyBiaXQgbWVhbmluZyAqLwotI2RlZmluZSBDQkFVRAkwMDEwMDE3Ci0jZGVmaW5lICBCMAkwMDAwMDAwCQkvKiBoYW5nIHVwICovCi0jZGVmaW5lICBCNTAJMDAwMDAwMQotI2RlZmluZSAgQjc1CTAwMDAwMDIKLSNkZWZpbmUgIEIxMTAJMDAwMDAwMwotI2RlZmluZSAgQjEzNAkwMDAwMDA0Ci0jZGVmaW5lICBCMTUwCTAwMDAwMDUKLSNkZWZpbmUgIEIyMDAJMDAwMDAwNgotI2RlZmluZSAgQjMwMAkwMDAwMDA3Ci0jZGVmaW5lICBCNjAwCTAwMDAwMTAKLSNkZWZpbmUgIEIxMjAwCTAwMDAwMTEKLSNkZWZpbmUgIEIxODAwCTAwMDAwMTIKLSNkZWZpbmUgIEIyNDAwCTAwMDAwMTMKLSNkZWZpbmUgIEI0ODAwCTAwMDAwMTQKLSNkZWZpbmUgIEI5NjAwCTAwMDAwMTUKLSNkZWZpbmUgIEIxOTIwMAkwMDAwMDE2Ci0jZGVmaW5lICBCMzg0MDAJMDAwMDAxNwotI2RlZmluZSBFWFRBIEIxOTIwMAotI2RlZmluZSBFWFRCIEIzODQwMAotI2RlZmluZSBDU0laRQkwMDAwMDYwCi0jZGVmaW5lICAgQ1M1CTAwMDAwMDAKLSNkZWZpbmUgICBDUzYJMDAwMDAyMAotI2RlZmluZSAgIENTNwkwMDAwMDQwCi0jZGVmaW5lICAgQ1M4CTAwMDAwNjAKLSNkZWZpbmUgQ1NUT1BCCTAwMDAxMDAKLSNkZWZpbmUgQ1JFQUQJMDAwMDIwMAotI2RlZmluZSBQQVJFTkIJMDAwMDQwMAotI2RlZmluZSBQQVJPREQJMDAwMTAwMAotI2RlZmluZSBIVVBDTAkwMDAyMDAwCi0jZGVmaW5lIENMT0NBTAkwMDA0MDAwCi0jZGVmaW5lIENCQVVERVggMDAxMDAwMAotI2RlZmluZQkgICBCT1RIRVIgMDAxMDAwMAkJLyogbm9uIHN0YW5kYXJkIHJhdGUgKi8KLSNkZWZpbmUgICAgQjU3NjAwIDAwMTAwMDEKLSNkZWZpbmUgICBCMTE1MjAwIDAwMTAwMDIKLSNkZWZpbmUgICBCMjMwNDAwIDAwMTAwMDMKLSNkZWZpbmUgICBCNDYwODAwIDAwMTAwMDQKLSNkZWZpbmUgICBCNTAwMDAwIDAwMTAwMDUKLSNkZWZpbmUgICBCNTc2MDAwIDAwMTAwMDYKLSNkZWZpbmUgICBCOTIxNjAwIDAwMTAwMDcKLSNkZWZpbmUgIEIxMDAwMDAwIDAwMTAwMTAKLSNkZWZpbmUgIEIxMTUyMDAwIDAwMTAwMTEKLSNkZWZpbmUgIEIxNTAwMDAwIDAwMTAwMTIKLSNkZWZpbmUgIEIyMDAwMDAwIDAwMTAwMTMKLSNkZWZpbmUgIEIyNTAwMDAwIDAwMTAwMTQKLSNkZWZpbmUgIEIzMDAwMDAwIDAwMTAwMTUKLSNkZWZpbmUgIEIzNTAwMDAwIDAwMTAwMTYKLSNkZWZpbmUgIEI0MDAwMDAwIDAwMTAwMTcKLSNkZWZpbmUgQ0lCQVVECSAgMDAyMDAzNjAwMDAwCS8qIGlucHV0IGJhdWQgcmF0ZSAqLwotI2RlZmluZSBDTVNQQVIJICAwMTAwMDAwMDAwMDAJLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLwotI2RlZmluZSBDUlRTQ1RTCSAgMDIwMDAwMDAwMDAwCS8qIGZsb3cgY29udHJvbCAqLwotCi0jZGVmaW5lIElCU0hJRlQJICAxNgkJLyogU2hpZnQgZnJvbSBDQkFVRCB0byBDSUJBVUQgKi8KLQotLyogY19sZmxhZyBiaXRzICovCi0jZGVmaW5lIElTSUcJMDAwMDAwMQotI2RlZmluZSBJQ0FOT04JMDAwMDAwMgotI2RlZmluZSBYQ0FTRQkwMDAwMDA0Ci0jZGVmaW5lIEVDSE8JMDAwMDAxMAotI2RlZmluZSBFQ0hPRQkwMDAwMDIwCi0jZGVmaW5lIEVDSE9LCTAwMDAwNDAKLSNkZWZpbmUgRUNIT05MCTAwMDAxMDAKLSNkZWZpbmUgTk9GTFNICTAwMDAyMDAKLSNkZWZpbmUgVE9TVE9QCTAwMDA0MDAKLSNkZWZpbmUgRUNIT0NUTAkwMDAxMDAwCi0jZGVmaW5lIEVDSE9QUlQJMDAwMjAwMAotI2RlZmluZSBFQ0hPS0UJMDAwNDAwMAotI2RlZmluZSBGTFVTSE8JMDAxMDAwMAotI2RlZmluZSBQRU5ESU4JMDA0MDAwMAotI2RlZmluZSBJRVhURU4JMDEwMDAwMAotCi0vKiB0Y2Zsb3coKSBhbmQgVENYT05DIHVzZSB0aGVzZSAqLwotI2RlZmluZQlUQ09PRkYJCTAKLSNkZWZpbmUJVENPT04JCTEKLSNkZWZpbmUJVENJT0ZGCQkyCi0jZGVmaW5lCVRDSU9OCQkzCi0KLS8qIHRjZmx1c2goKSBhbmQgVENGTFNIIHVzZSB0aGVzZSAqLwotI2RlZmluZQlUQ0lGTFVTSAkwCi0jZGVmaW5lCVRDT0ZMVVNICTEKLSNkZWZpbmUJVENJT0ZMVVNICTIKLQotLyogdGNzZXRhdHRyIHVzZXMgdGhlc2UgKi8KLSNkZWZpbmUJVENTQU5PVwkJMAotI2RlZmluZQlUQ1NBRFJBSU4JMQotI2RlZmluZQlUQ1NBRkxVU0gJMgotCi0jZW5kaWYgLyogX0FTTV9YODZfVEVSTUJJVFNfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Rlcm1iaXRzLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXJtaW9zLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZXJtaW9zLmgKaW5kZXggYzRlZTgwNS4uMjgwZDc4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGVybWlvcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Rlcm1pb3MuaApAQCAtMSwxMTQgKzEgQEAKLSNpZm5kZWYgX0FTTV9YODZfVEVSTUlPU19ICi0jZGVmaW5lIF9BU01fWDg2X1RFUk1JT1NfSAotCi0jaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotCi1zdHJ1Y3Qgd2luc2l6ZSB7Ci0JdW5zaWduZWQgc2hvcnQgd3Nfcm93OwotCXVuc2lnbmVkIHNob3J0IHdzX2NvbDsKLQl1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7Ci0JdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOwotfTsKLQotI2RlZmluZSBOQ0MgOAotc3RydWN0IHRlcm1pbyB7Ci0JdW5zaWduZWQgc2hvcnQgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCi0JdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KLQl1bnNpZ25lZCBjaGFyIGNfbGluZTsJCS8qIGxpbmUgZGlzY2lwbGluZSAqLwotCXVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KLX07Ci0KLS8qIG1vZGVtIGxpbmVzICovCi0jZGVmaW5lIFRJT0NNX0xFCTB4MDAxCi0jZGVmaW5lIFRJT0NNX0RUUgkweDAwMgotI2RlZmluZSBUSU9DTV9SVFMJMHgwMDQKLSNkZWZpbmUgVElPQ01fU1QJMHgwMDgKLSNkZWZpbmUgVElPQ01fU1IJMHgwMTAKLSNkZWZpbmUgVElPQ01fQ1RTCTB4MDIwCi0jZGVmaW5lIFRJT0NNX0NBUgkweDA0MAotI2RlZmluZSBUSU9DTV9STkcJMHgwODAKLSNkZWZpbmUgVElPQ01fRFNSCTB4MTAwCi0jZGVmaW5lIFRJT0NNX0NECVRJT0NNX0NBUgotI2RlZmluZSBUSU9DTV9SSQlUSU9DTV9STkcKLSNkZWZpbmUgVElPQ01fT1VUMQkweDIwMDAKLSNkZWZpbmUgVElPQ01fT1VUMgkweDQwMDAKLSNkZWZpbmUgVElPQ01fTE9PUAkweDgwMDAKLQotLyogaW9jdGwgKGZkLCBUSU9DU0VSR0VUTFNSLCAmcmVzdWx0KSB3aGVyZSByZXN1bHQgbWF5IGJlIGFzIGJlbG93ICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0vKglpbnRyPV5DCQlxdWl0PV5cCQllcmFzZT1kZWwJa2lsbD1eVQotCWVvZj1eRAkJdnRpbWU9XDAJdm1pbj1cMQkJc3h0Yz1cMAotCXN0YXJ0PV5RCXN0b3A9XlMJCXN1c3A9XloJCWVvbD1cMAotCXJlcHJpbnQ9XlIJZGlzY2FyZD1eVQl3ZXJhc2U9XlcJbG5leHQ9XlYKLQllb2wyPVwwCi0qLwotI2RlZmluZSBJTklUX0NfQ0MgIlwwMDNcMDM0XDE3N1wwMjVcMDA0XDBcMVwwXDAyMVwwMjNcMDMyXDBcMDIyXDAxN1wwMjdcMDI2XDAiCi0KLS8qCi0gKiBUcmFuc2xhdGUgYSAidGVybWlvIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW9zIi4gVWdoLgotICovCi0jZGVmaW5lIFNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgeCkgeyBcCi0JdW5zaWduZWQgc2hvcnQgX190bXA7IFwKLQlnZXRfdXNlcihfX3RtcCwmKHRlcm1pbyktPngpOyBcCi0JKih1bnNpZ25lZCBzaG9ydCAqKSAmKHRlcm1pb3MpLT54ID0gX190bXA7IFwKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdXNlcl90ZXJtaW9fdG9fa2VybmVsX3Rlcm1pb3Moc3RydWN0IGt0ZXJtaW9zICp0ZXJtaW9zLAotCQkJCQkJc3RydWN0IHRlcm1pbyBfX3VzZXIgKnRlcm1pbykKLXsKLQlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOwotCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19vZmxhZyk7Ci0JU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX2NmbGFnKTsKLQlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOwotCWdldF91c2VyKHRlcm1pb3MtPmNfbGluZSwgJnRlcm1pby0+Y19saW5lKTsKLQlyZXR1cm4gY29weV9mcm9tX3VzZXIodGVybWlvcy0+Y19jYywgdGVybWlvLT5jX2NjLCBOQ0MpOwotfQotCi0vKgotICogVHJhbnNsYXRlIGEgInRlcm1pb3MiIHN0cnVjdHVyZSBpbnRvIGEgInRlcm1pbyIuIFVnaC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8oc3RydWN0IHRlcm1pbyBfX3VzZXIgKnRlcm1pbywKLQkJCQkJICAgIHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcykKLXsKLQlwdXRfdXNlcigodGVybWlvcyktPmNfaWZsYWcsICYodGVybWlvKS0+Y19pZmxhZyk7Ci0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOwotCXB1dF91c2VyKCh0ZXJtaW9zKS0+Y19jZmxhZywgJih0ZXJtaW8pLT5jX2NmbGFnKTsKLQlwdXRfdXNlcigodGVybWlvcyktPmNfbGZsYWcsICYodGVybWlvKS0+Y19sZmxhZyk7Ci0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcigodGVybWlvKS0+Y19jYywgKHRlcm1pb3MpLT5jX2NjLCBOQ0MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3Moc3RydWN0IGt0ZXJtaW9zICprLAotCQkJCQkJIHN0cnVjdCB0ZXJtaW9zMiBfX3VzZXIgKnUpCi17Ci0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvczIpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHN0cnVjdCB0ZXJtaW9zMiBfX3VzZXIgKnUsCi0JCQkJCQkgc3RydWN0IGt0ZXJtaW9zICprKQotewotCXJldHVybiBjb3B5X3RvX3VzZXIodSwgaywgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zMikpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3NfMShzdHJ1Y3Qga3Rlcm1pb3MgKmssCi0JCQkJCQkgICBzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKnUpCi17Ci0JcmV0dXJuIGNvcHlfZnJvbV91c2VyKGssIHUsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3NfMShzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKnUsCi0JCQkJCQkgICBzdHJ1Y3Qga3Rlcm1pb3MgKmspCi17Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKTsKLX0KLQotI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9BU01fWDg2X1RFUk1JT1NfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Rlcm1pb3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDZmNzc4NmEuLmQyN2QwYTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMjE0LDcgKzIxNCw3IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7Ci0JdGkgPSAodm9pZCAqKShwZXJjcHVfcmVhZChrZXJuZWxfc3RhY2spICsKKwl0aSA9ICh2b2lkICopKHBlcmNwdV9yZWFkX3N0YWJsZShrZXJuZWxfc3RhY2spICsKIAkJICAgICAgS0VSTkVMX1NUQUNLX09GRlNFVCAtIFRIUkVBRF9TSVpFKTsKIAlyZXR1cm4gdGk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaAppbmRleCBiZmQ3NGMwLi40ZGE5MWFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTgxLDkgKzgxLDcgQEAKIAogdm9pZCBtYXRoX2Vycm9yKHZvaWQgX191c2VyICopOwogdm9pZCBtYXRoX2VtdWxhdGUoc3RydWN0IG1hdGhfZW11X2luZm8gKik7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotdW5zaWduZWQgbG9uZyBwYXRjaF9lc3BmaXhfZGVzYyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLSNlbHNlCisjaWZuZGVmIENPTkZJR19YODZfMzIKIGFzbWxpbmthZ2Ugdm9pZCBzbXBfdGhlcm1hbF9pbnRlcnJ1cHQodm9pZCk7CiBhc21saW5rYWdlIHZvaWQgbWNlX3RocmVzaG9sZF9pbnRlcnJ1cHQodm9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IDA5Yjk3NzQuLmRmMWRhMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtMSwxOSArMSwxMSBAQAogI2lmbmRlZiBfQVNNX1g4Nl9UWVBFU19ICiAjZGVmaW5lIF9BU01fWDg2X1RZUEVTX0gKIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisjZGVmaW5lIGRtYV9hZGRyX3QJZG1hX2FkZHJfdAogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3R5cGVzLmg+CiAKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0vKgotICogVGhlc2UgYXJlbid0IGV4cG9ydGVkIG91dHNpZGUgdGhlIGtlcm5lbCB0byBhdm9pZCBuYW1lIHNwYWNlIGNsYXNoZXMKLSAqLwogI2lmZGVmIF9fS0VSTkVMX18KLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogdHlwZWRlZiB1NjQgZG1hNjRfYWRkcl90OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWNvbnRleHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggODczMjRjZi4uYjdjMjljOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91Y29udGV4dC5oCkBAIC03LDEyICs3LDYgQEAKIAkJCQkgKiBzaWdjb250ZXh0IHN0cnVjdCAodWNfbWNvbnRleHQpLgogCQkJCSAqLwogCi1zdHJ1Y3QgdWNvbnRleHQgewotCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKLQlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOwotCXN0YWNrX3QJCSAgdWNfc3RhY2s7Ci0Jc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7Ci0Jc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KLX07CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdWNvbnRleHQuaD4KIAogI2VuZGlmIC8qIF9BU01fWDg2X1VDT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKaW5kZXggMTFiZTVhZC4uMjcyNTE0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdm14LmgKQEAgLTU1LDYgKzU1LDcgQEAKICNkZWZpbmUgU0VDT05EQVJZX0VYRUNfRU5BQkxFX0VQVCAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgU0VDT05EQVJZX0VYRUNfRU5BQkxFX1ZQSUQgICAgICAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgU0VDT05EQVJZX0VYRUNfV0JJTlZEX0VYSVRJTkcJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU0VDT05EQVJZX0VYRUNfVU5SRVNUUklDVEVEX0dVRVNUCTB4MDAwMDAwODAKIAogCiAjZGVmaW5lIFBJTl9CQVNFRF9FWFRfSU5UUl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCkBAIC0zNTEsOSArMzUyLDE2IEBACiAjZGVmaW5lIFZNWF9FUFRfRVhURU5UX0lORElWSURVQUxfQUREUgkJMAogI2RlZmluZSBWTVhfRVBUX0VYVEVOVF9DT05URVhUCQkJMQogI2RlZmluZSBWTVhfRVBUX0VYVEVOVF9HTE9CQUwJCQkyCisKKyNkZWZpbmUgVk1YX0VQVF9FWEVDVVRFX09OTFlfQklUCQkoMXVsbCkKKyNkZWZpbmUgVk1YX0VQVF9QQUdFX1dBTEtfNF9CSVQJCQkoMXVsbCA8PCA2KQorI2RlZmluZSBWTVhfRVBUUF9VQ19CSVQJCQkJKDF1bGwgPDwgOCkKKyNkZWZpbmUgVk1YX0VQVFBfV0JfQklUCQkJCSgxdWxsIDw8IDE0KQorI2RlZmluZSBWTVhfRVBUXzJNQl9QQUdFX0JJVAkJCSgxdWxsIDw8IDE2KQogI2RlZmluZSBWTVhfRVBUX0VYVEVOVF9JTkRJVklEVUFMX0JJVAkJKDF1bGwgPDwgMjQpCiAjZGVmaW5lIFZNWF9FUFRfRVhURU5UX0NPTlRFWFRfQklUCQkoMXVsbCA8PCAyNSkKICNkZWZpbmUgVk1YX0VQVF9FWFRFTlRfR0xPQkFMX0JJVAkJKDF1bGwgPDwgMjYpCisKICNkZWZpbmUgVk1YX0VQVF9ERUZBVUxUX0dBVwkJCTMKICNkZWZpbmUgVk1YX0VQVF9NQVhfR0FXCQkJCTB4NAogI2RlZmluZSBWTVhfRVBUX01UX0VQVEVfU0hJRlQJCQkzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggNmI4Y2EzYS4uNjdlOTI5YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtODMzLDEwNiArODMzLDYgQEAKIGV4dGVybiBpbnQgZXM3MDAwX3BsYXQ7CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCB7Ci0JaW50IGdzaV9iYXNlOwotCWludCBnc2lfZW5kOwotfSBtcF9pb2FwaWNfcm91dGluZ1tNQVhfSU9fQVBJQ1NdOwotCi1pbnQgbXBfZmluZF9pb2FwaWMoaW50IGdzaSkKLXsKLQlpbnQgaSA9IDA7Ci0KLQkvKiBGaW5kIHRoZSBJT0FQSUMgdGhhdCBtYW5hZ2VzIHRoaXMgR1NJLiAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKLQkJaWYgKChnc2kgPj0gbXBfaW9hcGljX3JvdXRpbmdbaV0uZ3NpX2Jhc2UpCi0JCSAgICAmJiAoZ3NpIDw9IG1wX2lvYXBpY19yb3V0aW5nW2ldLmdzaV9lbmQpKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogVW5hYmxlIHRvIGxvY2F0ZSBJT0FQSUMgZm9yIEdTSSAlZFxuIiwgZ3NpKTsKLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBtcF9maW5kX2lvYXBpY19waW4oaW50IGlvYXBpYywgaW50IGdzaSkKLXsKLQlpZiAoV0FSTl9PTihpb2FwaWMgPT0gLTEpKQotCQlyZXR1cm4gLTE7Ci0JaWYgKFdBUk5fT04oZ3NpID4gbXBfaW9hcGljX3JvdXRpbmdbaW9hcGljXS5nc2lfZW5kKSkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIGdzaSAtIG1wX2lvYXBpY19yb3V0aW5nW2lvYXBpY10uZ3NpX2Jhc2U7Ci19Ci0KLXN0YXRpYyB1OCBfX2luaXQgdW5pcV9pb2FwaWNfaWQodTggaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWlmICgoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpICYmCi0JICAgICFBUElDX1hBUElDKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkKLQkJcmV0dXJuIGlvX2FwaWNfZ2V0X3VuaXF1ZV9pZChucl9pb2FwaWNzLCBpZCk7Ci0JZWxzZQotCQlyZXR1cm4gaWQ7Ci0jZWxzZQotCWludCBpOwotCURFQ0xBUkVfQklUTUFQKHVzZWQsIDI1Nik7Ci0JYml0bWFwX3plcm8odXNlZCwgMjU2KTsKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCXN0cnVjdCBtcGNfaW9hcGljICppYSA9ICZtcF9pb2FwaWNzW2ldOwotCQlfX3NldF9iaXQoaWEtPmFwaWNpZCwgdXNlZCk7Ci0JfQotCWlmICghdGVzdF9iaXQoaWQsIHVzZWQpKQotCQlyZXR1cm4gaWQ7Ci0JcmV0dXJuIGZpbmRfZmlyc3RfemVyb19iaXQodXNlZCwgMjU2KTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJhZF9pb2FwaWModW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCWlmIChucl9pb2FwaWNzID49IE1BWF9JT19BUElDUykgewotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAiCi0JCSAgICAgICAiKGZvdW5kICVkKVxuIiwgTUFYX0lPX0FQSUNTLCBucl9pb2FwaWNzKTsKLQkJcGFuaWMoIlJlY29tcGlsZSBrZXJuZWwgd2l0aCBiaWdnZXIgTUFYX0lPX0FQSUNTIVxuIik7Ci0JfQotCWlmICghYWRkcmVzcykgewotCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IEJvZ3VzICh6ZXJvKSBJL08gQVBJQyBhZGRyZXNzIgotCQkgICAgICAgIiBmb3VuZCBpbiB0YWJsZSwgc2tpcHBpbmchXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIF9faW5pdCBtcF9yZWdpc3Rlcl9pb2FwaWMoaW50IGlkLCB1MzIgYWRkcmVzcywgdTMyIGdzaV9iYXNlKQotewotCWludCBpZHggPSAwOwotCi0JaWYgKGJhZF9pb2FwaWMoYWRkcmVzcykpCi0JCXJldHVybjsKLQotCWlkeCA9IG5yX2lvYXBpY3M7Ci0KLQltcF9pb2FwaWNzW2lkeF0udHlwZSA9IE1QX0lPQVBJQzsKLQltcF9pb2FwaWNzW2lkeF0uZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7Ci0JbXBfaW9hcGljc1tpZHhdLmFwaWNhZGRyID0gYWRkcmVzczsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfSU9fQVBJQ19CQVNFXzAgKyBpZHgsIGFkZHJlc3MpOwotCW1wX2lvYXBpY3NbaWR4XS5hcGljaWQgPSB1bmlxX2lvYXBpY19pZChpZCk7Ci0JbXBfaW9hcGljc1tpZHhdLmFwaWN2ZXIgPSBpb19hcGljX2dldF92ZXJzaW9uKGlkeCk7Ci0KLQkvKgotCSAqIEJ1aWxkIGJhc2ljIEdTSSBsb29rdXAgdGFibGUgdG8gZmFjaWxpdGF0ZSBnc2ktPmlvX2FwaWMgbG9va3VwcwotCSAqIGFuZCB0byBwcmV2ZW50IHJlcHJvZ3JhbW1pbmcgb2YgSU9BUElDIHBpbnMgKFBDSSBHU0lzKS4KLQkgKi8KLQltcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9iYXNlID0gZ3NpX2Jhc2U7Ci0JbXBfaW9hcGljX3JvdXRpbmdbaWR4XS5nc2lfZW5kID0gZ3NpX2Jhc2UgKwotCSAgICBpb19hcGljX2dldF9yZWRpcl9lbnRyaWVzKGlkeCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJT0FQSUNbJWRdOiBhcGljX2lkICVkLCB2ZXJzaW9uICVkLCBhZGRyZXNzIDB4JXgsICIKLQkgICAgICAgIkdTSSAlZC0lZFxuIiwgaWR4LCBtcF9pb2FwaWNzW2lkeF0uYXBpY2lkLAotCSAgICAgICBtcF9pb2FwaWNzW2lkeF0uYXBpY3ZlciwgbXBfaW9hcGljc1tpZHhdLmFwaWNhZGRyLAotCSAgICAgICBtcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9iYXNlLCBtcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9lbmQpOwotCi0JbnJfaW9hcGljcysrOwotfQotCiBpbnQgX19pbml0IGFjcGlfcHJvYmVfZ3NpKHZvaWQpCiB7CiAJaW50IGlkeDsKQEAgLTk0Nyw3ICs4NDcsNyBAQAogCiAJbWF4X2dzaSA9IDA7CiAJZm9yIChpZHggPSAwOyBpZHggPCBucl9pb2FwaWNzOyBpZHgrKykgewotCQlnc2kgPSBtcF9pb2FwaWNfcm91dGluZ1tpZHhdLmdzaV9lbmQ7CisJCWdzaSA9IG1wX2dzaV9yb3V0aW5nW2lkeF0uZ3NpX2VuZDsKIAogCQlpZiAoZ3NpID4gbWF4X2dzaSkKIAkJCW1heF9nc2kgPSBnc2k7CkBAIC0xMTc5LDkgKzEwNzksOCBAQAogCSAqIElmIE1QUyBpcyBwcmVzZW50LCBpdCB3aWxsIGhhbmRsZSB0aGVtLAogCSAqIG90aGVyd2lzZSB0aGUgc3lzdGVtIHdpbGwgc3RheSBpbiBQSUMgbW9kZQogCSAqLwotCWlmIChhY3BpX2Rpc2FibGVkIHx8IGFjcGlfbm9pcnEpIHsKKwlpZiAoYWNwaV9kaXNhYmxlZCB8fCBhY3BpX25vaXJxKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAlpZiAoIWNwdV9oYXNfYXBpYykKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IGY1NzY1ODcuLmRlNzM1M2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0yLDYgKzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMzIsNyArMzMsNyBAQAogI2RlZmluZSBzbXBfYWx0X29uY2UgMQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZGVidWdfYWx0ZXJuYXRpdmU7CitzdGF0aWMgaW50IF9faW5pdGRhdGFfb3JfbW9kdWxlIGRlYnVnX2FsdGVybmF0aXZlOwogCiBzdGF0aWMgaW50IF9faW5pdCBkZWJ1Z19hbHQoY2hhciAqc3RyKQogewpAQCAtNTEsNyArNTIsNyBAQAogX19zZXR1cCgibm9yZXBsYWNlLXNtcCIsIHNldHVwX25vcmVwbGFjZV9zbXApOwogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCi1zdGF0aWMgaW50IG5vcmVwbGFjZV9wYXJhdmlydCA9IDA7CitzdGF0aWMgaW50IF9faW5pdGRhdGFfb3JfbW9kdWxlIG5vcmVwbGFjZV9wYXJhdmlydCA9IDA7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX25vcmVwbGFjZV9wYXJhdmlydChjaGFyICpzdHIpCiB7CkBAIC02NCwxNiArNjUsMTcgQEAKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIGlmIChkZWJ1Z19hbHRlcm5hdGl2ZSkgXAogCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgYXJncykKIAotI2lmZGVmIEdFTkVSSUNfTk9QMQorI2lmIGRlZmluZWQoR0VORVJJQ19OT1AxKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2XzY0KQogLyogVXNlIGlubGluZSBhc3NlbWJseSB0byBkZWZpbmUgdGhpcyBiZWNhdXNlIHRoZSBub3BzIGFyZSBkZWZpbmVkCiAgICBhcyBpbmxpbmUgYXNzZW1ibHkgc3RyaW5ncyBpbiB0aGUgaW5jbHVkZSBmaWxlcyBhbmQgd2UgY2Fubm90CiAgICBnZXQgdGhlbSBlYXNpbHkgaW50byBzdHJpbmdzLiAqLwotYXNtKCJcdC5zZWN0aW9uIC5yb2RhdGEsIFwiYVwiXG5pbnRlbG5vcHM6ICIKK2FzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbmludGVsbm9wczogIgogCUdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDIgR0VORVJJQ19OT1AzIEdFTkVSSUNfTk9QNCBHRU5FUklDX05PUDUgR0VORVJJQ19OT1A2CiAJR0VORVJJQ19OT1A3IEdFTkVSSUNfTk9QOAogICAgICJcdC5wcmV2aW91cyIpOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW50ZWxub3BzW107Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgaW50ZWxfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKK2ludGVsX25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CiAJTlVMTCwKIAlpbnRlbG5vcHMsCiAJaW50ZWxub3BzICsgMSwKQEAgLTg3LDEyICs4OSwxMyBAQAogI2VuZGlmCiAKICNpZmRlZiBLOF9OT1AxCi1hc20oIlx0LnNlY3Rpb24gLnJvZGF0YSwgXCJhXCJcbms4bm9wczogIgorYXNtKCJcdCIgX19zdHJpbmdpZnkoX19JTklUUk9EQVRBX09SX01PRFVMRSkgIlxuazhub3BzOiAiCiAJSzhfTk9QMSBLOF9OT1AyIEs4X05PUDMgSzhfTk9QNCBLOF9OT1A1IEs4X05PUDYKIAlLOF9OT1A3IEs4X05PUDgKICAgICAiXHQucHJldmlvdXMiKTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGs4bm9wc1tdOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGs4X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgX19pbml0Y29uc3Rfb3JfbW9kdWxlCitrOF9ub3BzW0FTTV9OT1BfTUFYKzFdID0gewogCU5VTEwsCiAJazhub3BzLAogCWs4bm9wcyArIDEsCkBAIC0xMDUsMTMgKzEwOCwxNCBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgSzdfTk9QMQotYXNtKCJcdC5zZWN0aW9uIC5yb2RhdGEsIFwiYVwiXG5rN25vcHM6ICIKKyNpZiBkZWZpbmVkKEs3X05PUDEpICYmICFkZWZpbmVkKENPTkZJR19YODZfNjQpCithc20oIlx0IiBfX3N0cmluZ2lmeShfX0lOSVRST0RBVEFfT1JfTU9EVUxFKSAiXG5rN25vcHM6ICIKIAlLN19OT1AxIEs3X05PUDIgSzdfTk9QMyBLN19OT1A0IEs3X05PUDUgSzdfTk9QNgogCUs3X05PUDcgSzdfTk9QOAogICAgICJcdC5wcmV2aW91cyIpOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgazdub3BzW107Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3Qgazdfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKK2s3X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CiAJTlVMTCwKIAlrN25vcHMsCiAJazdub3BzICsgMSwKQEAgLTEyNSwxMiArMTI5LDEzIEBACiAjZW5kaWYKIAogI2lmZGVmIFA2X05PUDEKLWFzbSgiXHQuc2VjdGlvbiAucm9kYXRhLCBcImFcIlxucDZub3BzOiAiCithc20oIlx0IiBfX3N0cmluZ2lmeShfX0lOSVRST0RBVEFfT1JfTU9EVUxFKSAiXG5wNm5vcHM6ICIKIAlQNl9OT1AxIFA2X05PUDIgUDZfTk9QMyBQNl9OT1A0IFA2X05PUDUgUDZfTk9QNgogCVA2X05PUDcgUDZfTk9QOAogICAgICJcdC5wcmV2aW91cyIpOwogZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgcDZub3BzW107Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgcDZfbm9wc1tBU01fTk9QX01BWCsxXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKK3A2X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CiAJTlVMTCwKIAlwNm5vcHMsCiAJcDZub3BzICsgMSwKQEAgLTE0Niw3ICsxNTEsNyBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIAogZXh0ZXJuIGNoYXIgX192c3lzY2FsbF8wOwotY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKmZpbmRfbm9wX3RhYmxlKHZvaWQpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKl9faW5pdF9vcl9tb2R1bGUgZmluZF9ub3BfdGFibGUodm9pZCkKIHsKIAlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKIAkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PUEwpKQpAQCAtMTU3LDcgKzE2Miw3IEBACiAKICNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KIAotY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKmZpbmRfbm9wX3RhYmxlKHZvaWQpCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKl9faW5pdF9vcl9tb2R1bGUgZmluZF9ub3BfdGFibGUodm9pZCkKIHsKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0s4KSkKIAkJcmV0dXJuIGs4X25vcHM7CkBAIC0xNzIsNyArMTc3LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAKIC8qIFVzZSB0aGlzIHRvIGFkZCBub3BzIHRvIGEgYnVmZmVyLCB0aGVuIHRleHRfcG9rZSB0aGUgd2hvbGUgYnVmZmVyLiAqLwotdm9pZCBhZGRfbm9wcyh2b2lkICppbnNucywgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIF9faW5pdF9vcl9tb2R1bGUgYWRkX25vcHModm9pZCAqaW5zbnMsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgKm5vcHRhYmxlID0gZmluZF9ub3BfdGFibGUoKTsKIApAQCAtMTg1LDEwICsxOTAsMTAgQEAKIAkJbGVuIC09IG5vcGxlbjsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChhZGRfbm9wcyk7CiAKIGV4dGVybiBzdHJ1Y3QgYWx0X2luc3RyIF9fYWx0X2luc3RydWN0aW9uc1tdLCBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kW107CiBleHRlcm4gdTggKl9fc21wX2xvY2tzW10sICpfX3NtcF9sb2Nrc19lbmRbXTsKK3N0YXRpYyB2b2lkICp0ZXh0X3Bva2VfZWFybHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTsKIAogLyogUmVwbGFjZSBpbnN0cnVjdGlvbnMgd2l0aCBiZXR0ZXIgYWx0ZXJuYXRpdmVzIGZvciB0aGlzIENQVSB0eXBlLgogICAgVGhpcyBydW5zIGJlZm9yZSBTTVAgaXMgaW5pdGlhbGl6ZWQgdG8gYXZvaWQgU01QIHByb2JsZW1zIHdpdGgKQEAgLTE5Niw3ICsyMDEsOCBAQAogICAgQVBzIGhhdmUgbGVzcyBjYXBhYmlsaXRpZXMgdGhhbiB0aGUgYm9vdCBwcm9jZXNzb3IgYXJlIG5vdCBoYW5kbGVkLgogICAgVG91Z2guIE1ha2Ugc3VyZSB5b3UgZGlzYWJsZSBzdWNoIGZlYXR1cmVzIGJ5IGhhbmQuICovCiAKLXZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzKHN0cnVjdCBhbHRfaW5zdHIgKnN0YXJ0LCBzdHJ1Y3QgYWx0X2luc3RyICplbmQpCit2b2lkIF9faW5pdF9vcl9tb2R1bGUgYXBwbHlfYWx0ZXJuYXRpdmVzKHN0cnVjdCBhbHRfaW5zdHIgKnN0YXJ0LAorCQkJCQkgc3RydWN0IGFsdF9pbnN0ciAqZW5kKQogewogCXN0cnVjdCBhbHRfaW5zdHIgKmE7CiAJY2hhciBpbnNuYnVmW01BWF9QQVRDSF9MRU5dOwpAQCAtMjc5LDkgKzI4NSwxMCBAQAogc3RhdGljIERFRklORV9NVVRFWChzbXBfYWx0KTsKIHN0YXRpYyBpbnQgc21wX21vZGUgPSAxOwkvKiBwcm90ZWN0ZWQgYnkgc21wX2FsdCAqLwogCi12b2lkIGFsdGVybmF0aXZlc19zbXBfbW9kdWxlX2FkZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNoYXIgKm5hbWUsCi0JCQkJIHZvaWQgKmxvY2tzLCB2b2lkICpsb2Nrc19lbmQsCi0JCQkJIHZvaWQgKnRleHQsICB2b2lkICp0ZXh0X2VuZCkKK3ZvaWQgX19pbml0X29yX21vZHVsZSBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9hZGQoc3RydWN0IG1vZHVsZSAqbW9kLAorCQkJCQkJICBjaGFyICpuYW1lLAorCQkJCQkJICB2b2lkICpsb2Nrcywgdm9pZCAqbG9ja3NfZW5kLAorCQkJCQkJICB2b2lkICp0ZXh0LCAgdm9pZCAqdGV4dF9lbmQpCiB7CiAJc3RydWN0IHNtcF9hbHRfbW9kdWxlICpzbXA7CiAKQEAgLTMxNyw3ICszMjQsNyBAQAogCW11dGV4X3VubG9jaygmc21wX2FsdCk7CiB9CiAKLXZvaWQgYWx0ZXJuYXRpdmVzX3NtcF9tb2R1bGVfZGVsKHN0cnVjdCBtb2R1bGUgKm1vZCkKK3ZvaWQgX19pbml0X29yX21vZHVsZSBhbHRlcm5hdGl2ZXNfc21wX21vZHVsZV9kZWwoc3RydWN0IG1vZHVsZSAqbW9kKQogewogCXN0cnVjdCBzbXBfYWx0X21vZHVsZSAqaXRlbTsKIApAQCAtMzg2LDggKzM5Myw4IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAotdm9pZCBhcHBseV9wYXJhdmlydChzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSAqc3RhcnQsCi0JCSAgICBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZSAqZW5kKQordm9pZCBfX2luaXRfb3JfbW9kdWxlIGFwcGx5X3BhcmF2aXJ0KHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICpzdGFydCwKKwkJCQkgICAgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlICplbmQpCiB7CiAJc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGUgKnA7CiAJY2hhciBpbnNuYnVmW01BWF9QQVRDSF9MRU5dOwpAQCAtNDg1LDEzICs0OTIsMTQgQEAKICAqIGluc3RydWN0aW9ucy4gQW5kIG9uIHRoZSBsb2NhbCBDUFUgeW91IG5lZWQgdG8gYmUgcHJvdGVjdGVkIGFnYWluIE5NSSBvciBNQ0UKICAqIGhhbmRsZXJzIHNlZWluZyBhbiBpbmNvbnNpc3RlbnQgaW5zdHJ1Y3Rpb24gd2hpbGUgeW91IHBhdGNoLgogICovCi12b2lkICp0ZXh0X3Bva2VfZWFybHkodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKQorc3RhdGljIHZvaWQgKl9faW5pdF9vcl9tb2R1bGUgdGV4dF9wb2tlX2Vhcmx5KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKm9wY29kZSwKKwkJCQkJICAgICAgc2l6ZV90IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAltZW1jcHkoYWRkciwgb3Bjb2RlLCBsZW4pOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlzeW5jX2NvcmUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJLyogQ291bGQgYWxzbyBkbyBhIENMRkxVU0ggaGVyZSB0byBzcGVlZCB1cCBDUFUgcmVjb3Zlcnk7IGJ1dAogCSAgIHRoYXQgY2F1c2VzIGhhbmdzIG9uIHNvbWUgVklBIENQVXMuICovCiAJcmV0dXJuIGFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggMGExYzI4My4uMTU5NzQwZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KIAogdW5zaWduZWQgaW50IG51bV9wcm9jZXNzb3JzOwogCkBAIC0xMzYxLDUyICsxMzYyLDgwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1g4Nl9YMkFQSUMgKi8KIAotdm9pZCBfX2luaXQgZW5hYmxlX0lSX3gyYXBpYyh2b2lkKQoraW50IF9faW5pdCBlbmFibGVfSVIodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmlvYXBpY19lbnRyaWVzID0gTlVMTDsKLQotCXJldCA9IGRtYXJfdGFibGVfaW5pdCgpOwotCWlmIChyZXQpIHsKLQkJcHJfZGVidWcoImRtYXJfdGFibGVfaW5pdCgpIGZhaWxlZCB3aXRoICVkOlxuIiwgcmV0KTsKLQkJZ290byBpcl9mYWlsZWQ7Ci0JfQotCiAJaWYgKCFpbnRyX3JlbWFwcGluZ19zdXBwb3J0ZWQoKSkgewogCQlwcl9kZWJ1ZygiaW50ci1yZW1hcHBpbmcgbm90IHN1cHBvcnRlZFxuIik7Ci0JCWdvdG8gaXJfZmFpbGVkOworCQlyZXR1cm4gMDsKIAl9CiAKLQogCWlmICgheDJhcGljX3ByZWVuYWJsZWQgJiYgc2tpcF9pb2FwaWNfc2V0dXApIHsKIAkJcHJfaW5mbygiU2tpcHBlZCBlbmFibGluZyBpbnRyLXJlbWFwIGJlY2F1c2Ugb2Ygc2tpcHBpbmcgIgogCQkJImlvLWFwaWMgc2V0dXBcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAorCWlmIChlbmFibGVfaW50cl9yZW1hcHBpbmcoeDJhcGljX3N1cHBvcnRlZCgpKSkKKwkJcmV0dXJuIDA7CisKKwlwcl9pbmZvKCJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOworCisJcmV0dXJuIDE7CisKKyNlbmRpZgorCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBlbmFibGVfSVJfeDJhcGljKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKmlvYXBpY19lbnRyaWVzID0gTlVMTDsKKwlpbnQgcmV0LCB4MmFwaWNfZW5hYmxlZCA9IDA7CisJaW50IGRtYXJfdGFibGVfaW5pdF9yZXQgPSAwOworCisjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKKwlkbWFyX3RhYmxlX2luaXRfcmV0ID0gZG1hcl90YWJsZV9pbml0KCk7CisJaWYgKGRtYXJfdGFibGVfaW5pdF9yZXQpCisJCXByX2RlYnVnKCJkbWFyX3RhYmxlX2luaXQoKSBmYWlsZWQgd2l0aCAlZDpcbiIsCisJCQkJZG1hcl90YWJsZV9pbml0X3JldCk7CisjZW5kaWYKKwogCWlvYXBpY19lbnRyaWVzID0gYWxsb2NfaW9hcGljX2VudHJpZXMoKTsKIAlpZiAoIWlvYXBpY19lbnRyaWVzKSB7Ci0JCXByX2luZm8oIkFsbG9jYXRlIGlvYXBpY19lbnRyaWVzIGZhaWxlZDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gZW5kOworCQlwcl9lcnIoIkFsbG9jYXRlIGlvYXBpY19lbnRyaWVzIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OwogCX0KIAogCXJldCA9IHNhdmVfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJTYXZpbmcgSU8tQVBJQyBzdGF0ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVuZDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2tfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7CiAJbWFza184MjU5QSgpOworCW1hc2tfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7CiAKLQlyZXQgPSBlbmFibGVfaW50cl9yZW1hcHBpbmcoeDJhcGljX3N1cHBvcnRlZCgpKTsKLQlpZiAocmV0KQotCQlnb3RvIGVuZF9yZXN0b3JlOworCWlmIChkbWFyX3RhYmxlX2luaXRfcmV0KQorCQlyZXQgPSAwOworCWVsc2UKKwkJcmV0ID0gZW5hYmxlX0lSKCk7CiAKLQlwcl9pbmZvKCJFbmFibGVkIEludGVycnVwdC1yZW1hcHBpbmdcbiIpOworCWlmICghcmV0KSB7CisJCS8qIElSIGlzIHJlcXVpcmVkIGlmIHRoZXJlIGlzIEFQSUMgSUQgPiAyNTUgZXZlbiB3aGVuIHJ1bm5pbmcKKwkJICogdW5kZXIgS1ZNCisJCSAqLworCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+IDI1NSB8fCAha3ZtX3BhcmFfYXZhaWxhYmxlKCkpCisJCQlnb3RvIG5veDJhcGljOworCQkvKgorCQkgKiB3aXRob3V0IElSIGFsbCBDUFVzIGNhbiBiZSBhZGRyZXNzZWQgYnkgSU9BUElDL01TSQorCQkgKiBvbmx5IGluIHBoeXNpY2FsIG1vZGUKKwkJICovCisJCXgyYXBpY19mb3JjZV9waHlzKCk7CisJfQorCisJeDJhcGljX2VuYWJsZWQgPSAxOwogCiAJaWYgKHgyYXBpY19zdXBwb3J0ZWQoKSAmJiAheDJhcGljX21vZGUpIHsKIAkJeDJhcGljX21vZGUgPSAxOwpAQCAtMTQxNCw0MSArMTQ0MywyNSBAQAogCQlwcl9pbmZvKCJFbmFibGVkIHgyYXBpY1xuIik7CiAJfQogCi1lbmRfcmVzdG9yZToKLQlpZiAocmV0KQotCQkvKgotCQkgKiBJUiBlbmFibGluZyBmYWlsZWQKLQkJICovCitub3gyYXBpYzoKKwlpZiAoIXJldCkgLyogSVIgZW5hYmxpbmcgZmFpbGVkICovCiAJCXJlc3RvcmVfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7Ci0KIAl1bm1hc2tfODI1OUEoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLWVuZDoKK291dDoKIAlpZiAoaW9hcGljX2VudHJpZXMpCiAJCWZyZWVfaW9hcGljX2VudHJpZXMoaW9hcGljX2VudHJpZXMpOwogCi0JaWYgKCFyZXQpCisJaWYgKHgyYXBpY19lbmFibGVkKQogCQlyZXR1cm47CiAKLWlyX2ZhaWxlZDoKIAlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCXBhbmljKCJ4MmFwaWMgZW5hYmxlZCBieSBiaW9zLiBCdXQgSVIgZW5hYmxpbmcgZmFpbGVkIik7CisJCXBhbmljKCJ4MmFwaWM6IGVuYWJsZWQgYnkgQklPUyBidXQga2VybmVsIGluaXQgZmFpbGVkLiIpOwogCWVsc2UgaWYgKGNwdV9oYXNfeDJhcGljKQotCQlwcl9pbmZvKCJOb3QgZW5hYmxpbmcgeDJhcGljLEludHItcmVtYXBwaW5nXG4iKTsKLSNlbHNlCi0JaWYgKCFjcHVfaGFzX3gyYXBpYykKLQkJcmV0dXJuOwotCi0JaWYgKHgyYXBpY19wcmVlbmFibGVkKQotCQlwYW5pYygieDJhcGljIGVuYWJsZWQgcHJpb3IgT1MgaGFuZG92ZXIsIgotCQkgICAgICAiIGVuYWJsZSBDT05GSUdfWDg2X1gyQVBJQywgQ09ORklHX0lOVFJfUkVNQVAiKTsKLSNlbmRpZgotCi0JcmV0dXJuOworCQlwcl9pbmZvKCJOb3QgZW5hYmxpbmcgeDJhcGljLCBJbnRyLXJlbWFwcGluZyBpbml0IGZhaWxlZC5cbiIpOwogfQogCi0KICNpZmRlZiBDT05GSUdfWDg2XzY0CiAvKgogICogRGV0ZWN0IGFuZCBlbmFibGUgbG9jYWwgQVBJQ3Mgb24gbm9uLVNNUCBib2FyZHMuCkBAIC0xNTQ5LDggKzE1NjIsNiBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIHZvaWQgX19pbml0IGVhcmx5X2luaXRfbGFwaWNfbWFwcGluZyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwotCiAJLyoKIAkgKiBJZiBubyBsb2NhbCBBUElDIGNhbiBiZSBmb3VuZCB0aGVuIGdvIG91dAogCSAqIDogaXQgbWVhbnMgdGhlcmUgaXMgbm8gbXBhdGFibGUgYW5kIE1BRFQKQEAgLTE1NTgsMTEgKzE1NjksOSBAQAogCWlmICghc21wX2ZvdW5kX2NvbmZpZykKIAkJcmV0dXJuOwogCi0JcGh5c19hZGRyID0gbXBfbGFwaWNfYWRkcjsKLQotCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCXNldF9maXhtYXBfbm9jYWNoZShGSVhfQVBJQ19CQVNFLCBtcF9sYXBpY19hZGRyKTsKIAlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJtYXBwZWQgQVBJQyB0byAlMTZseCAoJTE2bHgpXG4iLAotCQkgICAgQVBJQ19CQVNFLCBwaHlzX2FkZHIpOworCQkgICAgQVBJQ19CQVNFLCBtcF9sYXBpY19hZGRyKTsKIAogCS8qCiAJICogRmV0Y2ggdGhlIEFQSUMgSUQgb2YgdGhlIEJTUCBpbiBjYXNlIHdlIGhhdmUgYQpAQCAtMTY1MSw3ICsxNjYwLDYgQEAKIAkgICAgQVBJQ19JTlRFR1JBVEVEKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkgewogCQlwcl9lcnIoIkJJT1MgYnVnLCBsb2NhbCBBUElDIDB4JXggbm90IGRldGVjdGVkIS4uLlxuIiwKIAkJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7Ci0JCWNsZWFyX2NwdV9jYXAoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FQSUMpOwogCQlyZXR1cm4gLTE7CiAJfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9lczcwMDBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCmluZGV4IDg5NTJhNTguLjg5MTc0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIHsKIAkvKiBNUEVOVElVTUlJSSAqLwogCWlmIChib290X2NwdV9kYXRhLng4NiA9PSA2ICYmCi0JICAgIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA+PSA3IHx8IGJvb3RfY3B1X2RhdGEueDg2X21vZGVsIDw9IDExKSkKKwkgICAgKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID49IDcgJiYgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPD0gMTEpKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IGQyZWQ2YzUuLjNjOGY5ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTY2LDYgKzY2LDggQEAKICNpbmNsdWRlIDxhc20vYXBpYy5oPgogCiAjZGVmaW5lIF9fYXBpY2RlYnVnaW5pdCh0eXBlKSBzdGF0aWMgdHlwZSBfX2luaXQKKyNkZWZpbmUgZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgaGVhZCkgXAorCWZvciAoZW50cnkgPSBoZWFkOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkKIAogLyoKICAqICAgICAgSXMgdGhlIFNpUyBBUElDIHJtdyBidWcgcHJlc2VudCA/CkBAIC04NSw2ICs4Nyw5IEBACiBzdHJ1Y3QgbXBjX2lvYXBpYyBtcF9pb2FwaWNzW01BWF9JT19BUElDU107CiBpbnQgbnJfaW9hcGljczsKIAorLyogSU8gQVBJQyBnc2kgcm91dGluZyBpbmZvICovCitzdHJ1Y3QgbXBfaW9hcGljX2dzaSAgbXBfZ3NpX3JvdXRpbmdbTUFYX0lPX0FQSUNTXTsKKwogLyogTVAgSVJRIHNvdXJjZSBlbnRyaWVzICovCiBzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnFzW01BWF9JUlFfU09VUkNFU107CiAKQEAgLTExNiwxNSArMTIxLDYgQEAKIH0KIGVhcmx5X3BhcmFtKCJub2FwaWMiLCBwYXJzZV9ub2FwaWMpOwogCi1zdHJ1Y3QgaXJxX3Bpbl9saXN0OwotCi0vKgotICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCi0gKgotICogdGhlIGluZGV4aW5nIG9yZGVyIG9mIHRoaXMgYXJyYXkgZmF2b3JzIDE6MSBtYXBwaW5ncwotICogYmV0d2VlbiBwaW5zIGFuZCBJUlFzLgotICovCi0KIHN0cnVjdCBpcnFfcGluX2xpc3QgewogCWludCBhcGljLCBwaW47CiAJc3RydWN0IGlycV9waW5fbGlzdCAqbmV4dDsKQEAgLTEzOSw2ICsxMzUsMTEgQEAKIAlyZXR1cm4gcGluOwogfQogCisvKgorICogVGhpcyBpcyBwZXJmb3JtYW5jZS1jcml0aWNhbCwgd2Ugd2FudCB0byBkbyBpdCBPKDEpCisgKgorICogTW9zdCBpcnFzIGFyZSBtYXBwZWQgMToxIHdpdGggcGlucy4KKyAqLwogc3RydWN0IGlycV9jZmcgewogCXN0cnVjdCBpcnFfcGluX2xpc3QgKmlycV8yX3BpbjsKIAljcHVtYXNrX3Zhcl90IGRvbWFpbjsKQEAgLTQxNCwxMyArNDE1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47Ci0JZm9yICg7OykgeworCWZvcl9lYWNoX2lycV9waW4oZW50cnksIGNmZy0+aXJxXzJfcGluKSB7CiAJCXVuc2lnbmVkIGludCByZWc7CiAJCWludCBwaW47CiAKLQkJaWYgKCFlbnRyeSkKLQkJCWJyZWFrOwogCQlwaW4gPSBlbnRyeS0+cGluOwogCQlyZWcgPSBpb19hcGljX3JlYWQoZW50cnktPmFwaWMsIDB4MTAgKyBwaW4qMik7CiAJCS8qIElzIHRoZSByZW1vdGUgSVJSIGJpdCBzZXQ/ICovCkBAIC00MjgsOSArNDI2LDYgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKQEAgLTQ5OCw3MiArNDkzLDY4IEBACiAgKiBzaGFyZWQgSVNBLXNwYWNlIElSUXMsIHNvIHdlIGhhdmUgdG8gc3VwcG9ydCB0aGVtLiBXZSBhcmUgc3VwZXIKICAqIGZhc3QgaW4gdGhlIGNvbW1vbiBjYXNlLCBhbmQgZmFzdCBmb3Igc2hhcmVkIElTQS1zcGFjZSBJUlFzLgogICovCi1zdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycV9ub2RlKHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBub2RlLCBpbnQgYXBpYywgaW50IHBpbikKK3N0YXRpYyBpbnQKK2FkZF9waW5fdG9faXJxX25vZGVfbm9wYW5pYyhzdHJ1Y3QgaXJxX2NmZyAqY2ZnLCBpbnQgbm9kZSwgaW50IGFwaWMsIGludCBwaW4pCiB7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisJc3RydWN0IGlycV9waW5fbGlzdCAqKmxhc3QsICplbnRyeTsKIAotCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47Ci0JaWYgKCFlbnRyeSkgewotCQllbnRyeSA9IGdldF9vbmVfZnJlZV9pcnFfMl9waW4obm9kZSk7Ci0JCWlmICghZW50cnkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfMl9waW4gdG8gYWRkICVkIC0gJWRcbiIsCi0JCQkJCWFwaWMsIHBpbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY2ZnLT5pcnFfMl9waW4gPSBlbnRyeTsKLQkJZW50cnktPmFwaWMgPSBhcGljOwotCQllbnRyeS0+cGluID0gcGluOwotCQlyZXR1cm47Ci0JfQotCi0Jd2hpbGUgKGVudHJ5LT5uZXh0KSB7Ci0JCS8qIG5vdCBhZ2FpbiwgcGxlYXNlICovCisJLyogZG9uJ3QgYWxsb3cgZHVwbGljYXRlcyAqLworCWxhc3QgPSAmY2ZnLT5pcnFfMl9waW47CisJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pIHsKIAkJaWYgKGVudHJ5LT5hcGljID09IGFwaWMgJiYgZW50cnktPnBpbiA9PSBwaW4pCi0JCQlyZXR1cm47Ci0KLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKKwkJCXJldHVybiAwOworCQlsYXN0ID0gJmVudHJ5LT5uZXh0OwogCX0KIAotCWVudHJ5LT5uZXh0ID0gZ2V0X29uZV9mcmVlX2lycV8yX3Bpbihub2RlKTsKLQllbnRyeSA9IGVudHJ5LT5uZXh0OworCWVudHJ5ID0gZ2V0X29uZV9mcmVlX2lycV8yX3Bpbihub2RlKTsKKwlpZiAoIWVudHJ5KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvYyBpcnFfcGluX2xpc3QgKCVkLCVkLCVkKVxuIiwKKwkJCQlub2RlLCBhcGljLCBwaW4pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZW50cnktPmFwaWMgPSBhcGljOwogCWVudHJ5LT5waW4gPSBwaW47CisKKwkqbGFzdCA9IGVudHJ5OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGluX3RvX2lycV9ub2RlKHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBub2RlLCBpbnQgYXBpYywgaW50IHBpbikKK3sKKwlpZiAoYWRkX3Bpbl90b19pcnFfbm9kZV9ub3BhbmljKGNmZywgbm9kZSwgYXBpYywgcGluKSkKKwkJcGFuaWMoIklPLUFQSUM6IGZhaWxlZCB0byBhZGQgaXJxLXBpbi4gQ2FuIG5vdCBwcm9jZWVkXG4iKTsKIH0KIAogLyoKICAqIFJlcm91dGUgYW4gSVJRIHRvIGEgZGlmZmVyZW50IHBpbi4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHJlcGxhY2VfcGluX2F0X2lycV9ub2RlKHN0cnVjdCBpcnFfY2ZnICpjZmcsIGludCBub2RlLAotCQkJCSAgICAgIGludCBvbGRhcGljLCBpbnQgb2xkcGluLAotCQkJCSAgICAgIGludCBuZXdhcGljLCBpbnQgbmV3cGluKQorCQkJCQkgICBpbnQgb2xkYXBpYywgaW50IG9sZHBpbiwKKwkJCQkJICAgaW50IG5ld2FwaWMsIGludCBuZXdwaW4pCiB7Ci0Jc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnkgPSBjZmctPmlycV8yX3BpbjsKLQlpbnQgcmVwbGFjZWQgPSAwOworCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCi0Jd2hpbGUgKGVudHJ5KSB7CisJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pIHsKIAkJaWYgKGVudHJ5LT5hcGljID09IG9sZGFwaWMgJiYgZW50cnktPnBpbiA9PSBvbGRwaW4pIHsKIAkJCWVudHJ5LT5hcGljID0gbmV3YXBpYzsKIAkJCWVudHJ5LT5waW4gPSBuZXdwaW47Ci0JCQlyZXBsYWNlZCA9IDE7CiAJCQkvKiBldmVyeSBvbmUgaXMgZGlmZmVyZW50LCByaWdodD8gKi8KLQkJCWJyZWFrOworCQkJcmV0dXJuOwogCQl9Ci0JCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQogCi0JLyogd2h5PyBjYWxsIHJlcGxhY2UgYmVmb3JlIGFkZD8gKi8KLQlpZiAoIXJlcGxhY2VkKQotCQlhZGRfcGluX3RvX2lycV9ub2RlKGNmZywgbm9kZSwgbmV3YXBpYywgbmV3cGluKTsKKwkvKiBvbGQgYXBpYy9waW4gZGlkbid0IGV4aXN0LCBzbyBqdXN0IGFkZCBuZXcgb25lcyAqLworCWFkZF9waW5fdG9faXJxX25vZGUoY2ZnLCBub2RlLCBuZXdhcGljLCBuZXdwaW4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19tb2RpZnlfaXJxKHN0cnVjdCBpcnFfY2ZnICpjZmcsCi0JCQkJaW50IG1hc2tfYW5kLCBpbnQgbWFza19vciwKLQkJCQl2b2lkICgqZmluYWwpKHN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5KSkKK3N0YXRpYyB2b2lkIGlvX2FwaWNfbW9kaWZ5X2lycShzdHJ1Y3QgaXJxX2NmZyAqY2ZnLAorCQkJICAgICAgIGludCBtYXNrX2FuZCwgaW50IG1hc2tfb3IsCisJCQkgICAgICAgdm9pZCAoKmZpbmFsKShzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSkpCiB7CiAJaW50IHBpbjsKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKIAotCWZvciAoZW50cnkgPSBjZmctPmlycV8yX3BpbjsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkgeworCWZvcl9lYWNoX2lycV9waW4oZW50cnksIGNmZy0+aXJxXzJfcGluKSB7CiAJCXVuc2lnbmVkIGludCByZWc7CiAJCXBpbiA9IGVudHJ5LT5waW47CiAJCXJlZyA9IGlvX2FwaWNfcmVhZChlbnRyeS0+YXBpYywgMHgxMCArIHBpbiAqIDIpOwpAQCAtNTgwLDcgKzU3MSw2IEBACiAJaW9fYXBpY19tb2RpZnlfaXJxKGNmZywgfklPX0FQSUNfUkVESVJfTUFTS0VELCAwLCBOVUxMKTsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfNjQKIHN0YXRpYyB2b2lkIGlvX2FwaWNfc3luYyhzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeSkKIHsKIAkvKgpAQCAtNTk2LDExICs1ODYsNiBAQAogewogCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH4wLCBJT19BUElDX1JFRElSX01BU0tFRCwgJmlvX2FwaWNfc3luYyk7CiB9Ci0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi1zdGF0aWMgdm9pZCBfX21hc2tfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKLXsKLQlpb19hcGljX21vZGlmeV9pcnEoY2ZnLCB+MCwgSU9fQVBJQ19SRURJUl9NQVNLRUQsIE5VTEwpOwotfQogCiBzdGF0aWMgdm9pZCBfX21hc2tfYW5kX2VkZ2VfSU9fQVBJQ19pcnEoc3RydWN0IGlycV9jZmcgKmNmZykKIHsKQEAgLTYxMyw3ICs1OTgsNiBAQAogCWlvX2FwaWNfbW9kaWZ5X2lycShjZmcsIH5JT19BUElDX1JFRElSX01BU0tFRCwKIAkJCUlPX0FQSUNfUkVESVJfTEVWRUxfVFJJR0dFUiwgTlVMTCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiBzdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjKQogewpAQCAtMTcwMiwxMiArMTY4Niw4IEBACiAJCWlmICghZW50cnkpCiAJCQljb250aW51ZTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIklSUSVkICIsIGlycSk7Ci0JCWZvciAoOzspIHsKKwkJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pCiAJCQlwcmludGsoIi0+ICVkOiVkIiwgZW50cnktPmFwaWMsIGVudHJ5LT5waW4pOwotCQkJaWYgKCFlbnRyeS0+bmV4dCkKLQkJCQlicmVhazsKLQkJCWVudHJ5ID0gZW50cnktPm5leHQ7Ci0JCX0KIAkJcHJpbnRrKCJcbiIpOwogCX0KIApAQCAtMjIxMSw3ICsyMTkxLDYgQEAKIAlyZXR1cm4gd2FzX3BlbmRpbmc7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiBzdGF0aWMgaW50IGlvYXBpY19yZXRyaWdnZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAKQEAgLTIyMjQsMTQgKzIyMDMsNiBAQAogCiAJcmV0dXJuIDE7CiB9Ci0jZWxzZQotc3RhdGljIGludCBpb2FwaWNfcmV0cmlnZ2VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWFwaWMtPnNlbmRfSVBJX3NlbGYoaXJxX2NmZyhpcnEpLT52ZWN0b3IpOwotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKIAogLyoKICAqIExldmVsIGFuZCBlZGdlIHRyaWdnZXJlZCBJTy1BUElDIGludGVycnVwdHMgbmVlZCBkaWZmZXJlbnQgaGFuZGxpbmcsCkBAIC0yMjY5LDEzICsyMjQwLDkgQEAKIAlzdHJ1Y3QgaXJxX3Bpbl9saXN0ICplbnRyeTsKIAl1OCB2ZWN0b3IgPSBjZmctPnZlY3RvcjsKIAotCWVudHJ5ID0gY2ZnLT5pcnFfMl9waW47Ci0JZm9yICg7OykgeworCWZvcl9lYWNoX2lycV9waW4oZW50cnksIGNmZy0+aXJxXzJfcGluKSB7CiAJCXVuc2lnbmVkIGludCByZWc7CiAKLQkJaWYgKCFlbnRyeSkKLQkJCWJyZWFrOwotCiAJCWFwaWMgPSBlbnRyeS0+YXBpYzsKIAkJcGluID0gZW50cnktPnBpbjsKIAkJLyoKQEAgLTIyODgsOSArMjI1NSw2IEBACiAJCXJlZyAmPSB+SU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSzsKIAkJcmVnIHw9IHZlY3RvcjsKIAkJaW9fYXBpY19tb2RpZnkoYXBpYywgMHgxMCArIHBpbioyLCByZWcpOwotCQlpZiAoIWVudHJ5LT5uZXh0KQotCQkJYnJlYWs7Ci0JCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJfQogfQogCkBAIC0yNTE1LDExICsyNDc5LDggQEAKIHN0YXRpYyB2b2lkIGFja19hcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKLQotI2lmZGVmIENPTkZJR19YODZfMzIKIAl1bnNpZ25lZCBsb25nIHY7CiAJaW50IGk7Ci0jZW5kaWYKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCWludCBkb191bm1hc2tfaXJxID0gMDsKIApAQCAtMjUzMiwzMSArMjQ5MywyOCBAQAogCX0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1g4Nl8zMgogCS8qCi0JKiBJdCBhcHBlYXJzIHRoZXJlIGlzIGFuIGVycmF0dW0gd2hpY2ggYWZmZWN0cyBhdCBsZWFzdCB2ZXJzaW9uIDB4MTEKLQkqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCi0JKiBjaGlwc2V0cykuICBVbmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgYSBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0IGlzCi0JKiBlcnJvbmVvdXNseSBkZWxpdmVyZWQgYXMgZWRnZS10cmlnZ2VyZWQgb25lIGJ1dCB0aGUgcmVzcGVjdGl2ZSBJUlIKLQkqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKLQkqIG1lc3NhZ2UgYnV0IGl0IHdpbGwgbmV2ZXIgYXJyaXZlIGFuZCBmdXJ0aGVyIGludGVycnVwdHMgYXJlIGJsb2NrZWQKLQkqIGZyb20gdGhlIHNvdXJjZS4gIFRoZSBleGFjdCByZWFzb24gaXMgc28gZmFyIHVua25vd24sIGJ1dCB0aGUKLQkqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cwotCSogZnJvbSBhIGdpdmVuIHNvdXJjZSBnZXQgZGVsaXZlcmVkIHRvIHRoZSBzYW1lIENQVSBhbmQgdGhlIHNvdXJjZSBpcwotCSogdGVtcG9yYXJpbHkgZGlzYWJsZWQgaW4gYmV0d2Vlbi4KLQkqCi0JKiBBIHdvcmthcm91bmQgaXMgdG8gc2ltdWxhdGUgYW4gRU9JIG1lc3NhZ2UgbWFudWFsbHkuICBXZSBhY2hpZXZlIGl0Ci0JKiBieSBzZXR0aW5nIHRoZSB0cmlnZ2VyIG1vZGUgdG8gZWRnZSBhbmQgdGhlbiB0byBsZXZlbCB3aGVuIHRoZSBlZGdlCi0JKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQotCSogbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdC4gIFdlIG1hc2sgdGhlIHNvdXJjZSBmb3IgdGhlIHRpbWUgb2YgdGhlCi0JKiBvcGVyYXRpb24gdG8gcHJldmVudCBhbiBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHQgZXNjYXBpbmcgbWVhbndoaWxlLgotCSogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KLQkqLworCSAqIEl0IGFwcGVhcnMgdGhlcmUgaXMgYW4gZXJyYXR1bSB3aGljaCBhZmZlY3RzIGF0IGxlYXN0IHZlcnNpb24gMHgxMQorCSAqIG9mIEkvTyBBUElDICh0aGF0J3MgdGhlIDgyMDkzQUEgYW5kIGNvcmVzIGludGVncmF0ZWQgaW50byB2YXJpb3VzCisJICogY2hpcHNldHMpLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIGEgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdCBpcworCSAqIGVycm9uZW91c2x5IGRlbGl2ZXJlZCBhcyBlZGdlLXRyaWdnZXJlZCBvbmUgYnV0IHRoZSByZXNwZWN0aXZlIElSUgorCSAqIGJpdCBnZXRzIHNldCBuZXZlcnRoZWxlc3MuICBBcyBhIHJlc3VsdCB0aGUgSS9PIHVuaXQgZXhwZWN0cyBhbiBFT0kKKwkgKiBtZXNzYWdlIGJ1dCBpdCB3aWxsIG5ldmVyIGFycml2ZSBhbmQgZnVydGhlciBpbnRlcnJ1cHRzIGFyZSBibG9ja2VkCisJICogZnJvbSB0aGUgc291cmNlLiAgVGhlIGV4YWN0IHJlYXNvbiBpcyBzbyBmYXIgdW5rbm93biwgYnV0IHRoZQorCSAqIHBoZW5vbWVub24gd2FzIG9ic2VydmVkIHdoZW4gdHdvIGNvbnNlY3V0aXZlIGludGVycnVwdCByZXF1ZXN0cworCSAqIGZyb20gYSBnaXZlbiBzb3VyY2UgZ2V0IGRlbGl2ZXJlZCB0byB0aGUgc2FtZSBDUFUgYW5kIHRoZSBzb3VyY2UgaXMKKwkgKiB0ZW1wb3JhcmlseSBkaXNhYmxlZCBpbiBiZXR3ZWVuLgorCSAqCisJICogQSB3b3JrYXJvdW5kIGlzIHRvIHNpbXVsYXRlIGFuIEVPSSBtZXNzYWdlIG1hbnVhbGx5LiAgV2UgYWNoaWV2ZSBpdAorCSAqIGJ5IHNldHRpbmcgdGhlIHRyaWdnZXIgbW9kZSB0byBlZGdlIGFuZCB0aGVuIHRvIGxldmVsIHdoZW4gdGhlIGVkZ2UKKwkgKiB0cmlnZ2VyIG1vZGUgZ2V0cyBkZXRlY3RlZCBpbiB0aGUgVE1SIG9mIGEgbG9jYWwgQVBJQyBmb3IgYQorCSAqIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQuICBXZSBtYXNrIHRoZSBzb3VyY2UgZm9yIHRoZSB0aW1lIG9mIHRoZQorCSAqIG9wZXJhdGlvbiB0byBwcmV2ZW50IGFuIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdCBlc2NhcGluZyBtZWFud2hpbGUuCisJICogVGhlIGlkZWEgaXMgZnJvbSBNYW5mcmVkIFNwcmF1bC4gIC0tbWFjcm8KKwkgKi8KIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAJaSA9IGNmZy0+dmVjdG9yOwotCiAJdiA9IGFwaWNfcmVhZChBUElDX1RNUiArICgoaSAmIH4weDFmKSA+PiAxKSk7Ci0jZW5kaWYKIAogCS8qCiAJICogV2UgbXVzdCBhY2tub3dsZWRnZSB0aGUgaXJxIGJlZm9yZSB3ZSBtb3ZlIGl0IG9yIHRoZSBhY2tub3dsZWRnZSB3aWxsCkBAIC0yNTk4LDcgKzI1NTYsNyBAQAogCQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCisJLyogVGFpbCBlbmQgb2YgdmVyc2lvbiAweDExIEkvTyBBUElDIGJ1ZyB3b3JrYXJvdW5kICovCiAJaWYgKCEodiAmICgxIDw8IChpICYgMHgxZikpKSkgewogCQlhdG9taWNfaW5jKCZpcnFfbWlzX2NvdW50KTsKIAkJc3Bpbl9sb2NrKCZpb2FwaWNfbG9jayk7CkBAIC0yNjA2LDI2ICsyNTY0LDE1IEBACiAJCV9fdW5tYXNrX2FuZF9sZXZlbF9JT19BUElDX2lycShjZmcpOwogCQlzcGluX3VubG9jaygmaW9hcGljX2xvY2spOwogCX0KLSNlbmRpZgogfQogCiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIHN0YXRpYyB2b2lkIF9fZW9pX2lvYXBpY19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9jZmcgKmNmZykKIHsKLQlpbnQgYXBpYywgcGluOwogCXN0cnVjdCBpcnFfcGluX2xpc3QgKmVudHJ5OwogCi0JZW50cnkgPSBjZmctPmlycV8yX3BpbjsKLQlmb3IgKDs7KSB7Ci0KLQkJaWYgKCFlbnRyeSkKLQkJCWJyZWFrOwotCi0JCWFwaWMgPSBlbnRyeS0+YXBpYzsKLQkJcGluID0gZW50cnktPnBpbjsKLQkJaW9fYXBpY19lb2koYXBpYywgcGluKTsKLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQl9CisJZm9yX2VhY2hfaXJxX3BpbihlbnRyeSwgY2ZnLT5pcnFfMl9waW4pCisJCWlvX2FwaWNfZW9pKGVudHJ5LT5hcGljLCBlbnRyeS0+cGluKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTMyNDEsOCArMzE4OCw3IEBACiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCWR5bmFtaWNfaXJxX2NsZWFudXAoaXJxKTsKIAkvKiBjb25uZWN0IGJhY2sgaXJxX2NmZyAqLwotCWlmIChkZXNjKQotCQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CisJZGVzYy0+Y2hpcF9kYXRhID0gY2ZnOwogCiAJZnJlZV9pcnRlKGlycSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CkBAIC0zOTEyLDcgKzM4NTgsMTEgQEAKIAkgKi8KIAlpZiAoaXJxID49IE5SX0lSUVNfTEVHQUNZKSB7CiAJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQkJYWRkX3Bpbl90b19pcnFfbm9kZShjZmcsIG5vZGUsIGlvYXBpYywgcGluKTsKKwkJaWYgKGFkZF9waW5fdG9faXJxX25vZGVfbm9wYW5pYyhjZmcsIG5vZGUsIGlvYXBpYywgcGluKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBhZGQgcGluICVkIGZvciBpcnEgJWRcbiIsCisJCQkJcGluLCBpcnEpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlzZXR1cF9JT19BUElDX2lycShpb2FwaWMsIHBpbiwgaXJxLCBkZXNjLCB0cmlnZ2VyLCBwb2xhcml0eSk7CkBAIC0zOTQxLDExICszODkxLDI4IEBACiAJcmV0dXJuIF9faW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoZGV2LCBpcnEsIGlycV9hdHRyKTsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSS1iYXNlZCBJT0FQSUMgQ29uZmlndXJhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3U4IF9faW5pdCBpb19hcGljX3VuaXF1ZV9pZCh1OCBpZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKKwkgICAgIUFQSUNfWEFQSUMoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKQorCQlyZXR1cm4gaW9fYXBpY19nZXRfdW5pcXVlX2lkKG5yX2lvYXBpY3MsIGlkKTsKKwllbHNlCisJCXJldHVybiBpZDsKKyNlbHNlCisJaW50IGk7CisJREVDTEFSRV9CSVRNQVAodXNlZCwgMjU2KTsKIAotI2lmZGVmIENPTkZJR19BQ1BJCisJYml0bWFwX3plcm8odXNlZCwgMjU2KTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CisJCXN0cnVjdCBtcGNfaW9hcGljICppYSA9ICZtcF9pb2FwaWNzW2ldOworCQlfX3NldF9iaXQoaWEtPmFwaWNpZCwgdXNlZCk7CisJfQorCWlmICghdGVzdF9iaXQoaWQsIHVzZWQpKQorCQlyZXR1cm4gaWQ7CisJcmV0dXJuIGZpbmRfZmlyc3RfemVyb19iaXQodXNlZCwgMjU2KTsKKyNlbmRpZgorfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogaW50IF9faW5pdCBpb19hcGljX2dldF91bmlxdWVfaWQoaW50IGlvYXBpYywgaW50IGFwaWNfaWQpCkBAIC00MDU0LDggKzQwMjEsNiBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KLQogLyoKICAqIFRoaXMgZnVuY3Rpb24gY3VycmVudGx5IGlzIG9ubHkgYSBoZWxwZXIgZm9yIHRoZSBpMzg2IHNtcCBib290IHByb2Nlc3Mgd2hlcmUKICAqIHdlIG5lZWQgdG8gcmVwcm9ncmFtIHRoZSBpb3JlZHRibHMgdG8gY2F0ZXIgZm9yIHRoZSBjcHVzIHdoaWNoIGhhdmUgY29tZSBvbmxpbmUKQEAgLTQxMDksNyArNDA3NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmlvYXBpY19yZXNvdXJjZXM7CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKiBfX2luaXQgaW9hcGljX3NldHVwX3Jlc291cmNlcyh2b2lkKQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqIF9faW5pdCBpb2FwaWNfc2V0dXBfcmVzb3VyY2VzKGludCBucl9pb2FwaWNzKQogewogCXVuc2lnbmVkIGxvbmcgbjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTQxMjUsMTUgKzQwOTAsMTMgQEAKIAltZW0gPSBhbGxvY19ib290bWVtKG4pOwogCXJlcyA9ICh2b2lkICopbWVtOwogCi0JaWYgKG1lbSAhPSBOVUxMKSB7Ci0JCW1lbSArPSBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIG5yX2lvYXBpY3M7CisJbWVtICs9IHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogbnJfaW9hcGljczsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7Ci0JCQlyZXNbaV0ubmFtZSA9IG1lbTsKLQkJCXJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwotCQkJc3ByaW50ZihtZW0sICAiSU9BUElDICV1IiwgaSk7Ci0JCQltZW0gKz0gSU9BUElDX1JFU09VUkNFX05BTUVfU0laRTsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKKwkJcmVzW2ldLm5hbWUgPSBtZW07CisJCXJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCQlzcHJpbnRmKG1lbSwgICJJT0FQSUMgJXUiLCBpKTsKKwkJbWVtICs9IElPQVBJQ19SRVNPVVJDRV9OQU1FX1NJWkU7CiAJfQogCiAJaW9hcGljX3Jlc291cmNlcyA9IHJlczsKQEAgLTQxNDcsNyArNDExMCw3IEBACiAJc3RydWN0IHJlc291cmNlICppb2FwaWNfcmVzOwogCWludCBpOwogCi0JaW9hcGljX3JlcyA9IGlvYXBpY19zZXR1cF9yZXNvdXJjZXMoKTsKKwlpb2FwaWNfcmVzID0gaW9hcGljX3NldHVwX3Jlc291cmNlcyhucl9pb2FwaWNzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfaW9hcGljczsgaSsrKSB7CiAJCWlmIChzbXBfZm91bmRfY29uZmlnKSB7CiAJCQlpb2FwaWNfcGh5cyA9IG1wX2lvYXBpY3NbaV0uYXBpY2FkZHI7CkBAIC00MTc2LDExICs0MTM5LDkgQEAKIAkJCSAgICBfX2ZpeF90b192aXJ0KGlkeCksIGlvYXBpY19waHlzKTsKIAkJaWR4Kys7CiAKLQkJaWYgKGlvYXBpY19yZXMgIT0gTlVMTCkgewotCQkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKLQkJCWlvYXBpY19yZXMtPmVuZCA9IGlvYXBpY19waHlzICsgKDQgKiAxMDI0KSAtIDE7Ci0JCQlpb2FwaWNfcmVzKys7Ci0JCX0KKwkJaW9hcGljX3Jlcy0+c3RhcnQgPSBpb2FwaWNfcGh5czsKKwkJaW9hcGljX3Jlcy0+ZW5kID0gaW9hcGljX3BoeXMgKyAoNCAqIDEwMjQpIC0gMTsKKwkJaW9hcGljX3JlcysrOwogCX0KIH0KIApAQCAtNDIwMSwzICs0MTYyLDc2IEBACiAJCXIrKzsKIAl9CiB9CisKK2ludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKQoreworCWludCBpID0gMDsKKworCS8qIEZpbmQgdGhlIElPQVBJQyB0aGF0IG1hbmFnZXMgdGhpcyBHU0kuICovCisJZm9yIChpID0gMDsgaSA8IG5yX2lvYXBpY3M7IGkrKykgeworCQlpZiAoKGdzaSA+PSBtcF9nc2lfcm91dGluZ1tpXS5nc2lfYmFzZSkKKwkJICAgICYmIChnc2kgPD0gbXBfZ3NpX3JvdXRpbmdbaV0uZ3NpX2VuZCkpCisJCQlyZXR1cm4gaTsKKwl9CisKKwlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBVbmFibGUgdG8gbG9jYXRlIElPQVBJQyBmb3IgR1NJICVkXG4iLCBnc2kpOworCXJldHVybiAtMTsKK30KKworaW50IG1wX2ZpbmRfaW9hcGljX3BpbihpbnQgaW9hcGljLCBpbnQgZ3NpKQoreworCWlmIChXQVJOX09OKGlvYXBpYyA9PSAtMSkpCisJCXJldHVybiAtMTsKKwlpZiAoV0FSTl9PTihnc2kgPiBtcF9nc2lfcm91dGluZ1tpb2FwaWNdLmdzaV9lbmQpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ3NpIC0gbXBfZ3NpX3JvdXRpbmdbaW9hcGljXS5nc2lfYmFzZTsKK30KKworc3RhdGljIGludCBiYWRfaW9hcGljKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlpZiAobnJfaW9hcGljcyA+PSBNQVhfSU9fQVBJQ1MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSSU5HOiBNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAiCisJCSAgICAgICAiKGZvdW5kICVkKSwgc2tpcHBpbmdcbiIsIE1BWF9JT19BUElDUywgbnJfaW9hcGljcyk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWFkZHJlc3MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogQm9ndXMgKHplcm8pIEkvTyBBUElDIGFkZHJlc3MiCisJCSAgICAgICAiIGZvdW5kIGluIHRhYmxlLCBza2lwcGluZyFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19pbml0IG1wX3JlZ2lzdGVyX2lvYXBpYyhpbnQgaWQsIHUzMiBhZGRyZXNzLCB1MzIgZ3NpX2Jhc2UpCit7CisJaW50IGlkeCA9IDA7CisKKwlpZiAoYmFkX2lvYXBpYyhhZGRyZXNzKSkKKwkJcmV0dXJuOworCisJaWR4ID0gbnJfaW9hcGljczsKKworCW1wX2lvYXBpY3NbaWR4XS50eXBlID0gTVBfSU9BUElDOworCW1wX2lvYXBpY3NbaWR4XS5mbGFncyA9IE1QQ19BUElDX1VTQUJMRTsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIgPSBhZGRyZXNzOworCisJc2V0X2ZpeG1hcF9ub2NhY2hlKEZJWF9JT19BUElDX0JBU0VfMCArIGlkeCwgYWRkcmVzcyk7CisJbXBfaW9hcGljc1tpZHhdLmFwaWNpZCA9IGlvX2FwaWNfdW5pcXVlX2lkKGlkKTsKKwltcF9pb2FwaWNzW2lkeF0uYXBpY3ZlciA9IGlvX2FwaWNfZ2V0X3ZlcnNpb24oaWR4KTsKKworCS8qCisJICogQnVpbGQgYmFzaWMgR1NJIGxvb2t1cCB0YWJsZSB0byBmYWNpbGl0YXRlIGdzaS0+aW9fYXBpYyBsb29rdXBzCisJICogYW5kIHRvIHByZXZlbnQgcmVwcm9ncmFtbWluZyBvZiBJT0FQSUMgcGlucyAoUENJIEdTSXMpLgorCSAqLworCW1wX2dzaV9yb3V0aW5nW2lkeF0uZ3NpX2Jhc2UgPSBnc2lfYmFzZTsKKwltcF9nc2lfcm91dGluZ1tpZHhdLmdzaV9lbmQgPSBnc2lfYmFzZSArCisJICAgIGlvX2FwaWNfZ2V0X3JlZGlyX2VudHJpZXMoaWR4KTsKKworCXByaW50ayhLRVJOX0lORk8gIklPQVBJQ1slZF06IGFwaWNfaWQgJWQsIHZlcnNpb24gJWQsIGFkZHJlc3MgMHgleCwgIgorCSAgICAgICAiR1NJICVkLSVkXG4iLCBpZHgsIG1wX2lvYXBpY3NbaWR4XS5hcGljaWQsCisJICAgICAgIG1wX2lvYXBpY3NbaWR4XS5hcGljdmVyLCBtcF9pb2FwaWNzW2lkeF0uYXBpY2FkZHIsCisJICAgICAgIG1wX2dzaV9yb3V0aW5nW2lkeF0uZ3NpX2Jhc2UsIG1wX2dzaV9yb3V0aW5nW2lkeF0uZ3NpX2VuZCk7CisKKwlucl9pb2FwaWNzKys7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pcGkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCmluZGV4IDZlZjAwYmEuLjA4Mzg1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lwaS5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIHsKIAlpbnQgYXBpY2lkLCBjcHVpZDsKIAotCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FQSUMpKQorCWlmICghY3B1X2hhc19hcGljKQogCQlyZXR1cm4gMDsKIAogCWFwaWNpZCA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKaW5kZXggZmNlYzJmMS4uNjVlZGMxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCkBAIC01NSwxMSArNTUsMTEgQEAKIHZvaWQgX19pbml0IGRlZmF1bHRfc2V0dXBfYXBpY19yb3V0aW5nKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKLQlpZiAoeDJhcGljX21vZGUgJiYgKGFwaWMgIT0gJmFwaWNfeDJhcGljX3BoeXMgJiYKKwlpZiAoeDJhcGljX21vZGUKICNpZmRlZiBDT05GSUdfWDg2X1VWCi0JCSAgICAgICBhcGljICE9ICZhcGljX3gyYXBpY191dl94ICYmCisJCSAgICAgICAmJiBhcGljICE9ICZhcGljX3gyYXBpY191dl94CiAjZW5kaWYKLQkJICAgICAgIGFwaWMgIT0gJmFwaWNfeDJhcGljX2NsdXN0ZXIpKSB7CisJCSAgICAgICApIHsKIAkJaWYgKHgyYXBpY19waHlzKQogCQkJYXBpYyA9ICZhcGljX3gyYXBpY19waHlzOwogCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggNDQyYjU1MC4uMTUxYWNlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtNDAzLDcgKzQwMywxNSBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGFwbV9zdXNwZW5kX3dhaXRxdWV1ZSk7CiBzdGF0aWMgc3RydWN0IGFwbV91c2VyICp1c2VyX2xpc3Q7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVzZXJfbGlzdF9sb2NrKTsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVzY19zdHJ1Y3QJYmFkX2Jpb3NfZGVzYyA9IHsgeyB7IDAsIDB4MDA0MDkyMDAgfSB9IH07CisKKy8qCisgKiBTZXQgdXAgYSBzZWdtZW50IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVhbCBtb2RlIHNlZ21lbnQgMHg0MAorICogdGhhdCBleHRlbmRzIHVwIHRvIHRoZSBlbmQgb2YgcGFnZSB6ZXJvICh0aGF0IHdlIGhhdmUgcmVzZXJ2ZWQpLgorICogVGhpcyBpcyBmb3IgYnVnZ3kgQklPUydzIHRoYXQgcmVmZXIgdG8gKHJlYWwgbW9kZSkgc2VnbWVudCAweDQwCisgKiBldmVuIHRob3VnaCB0aGV5IGFyZSBjYWxsZWQgaW4gcHJvdGVjdGVkIG1vZGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVzY19zdHJ1Y3QgYmFkX2Jpb3NfZGVzYyA9IEdEVF9FTlRSWV9JTklUKDB4NDA5MiwKKwkJCSh1bnNpZ25lZCBsb25nKV9fdmEoMHg0MDBVTCksIFBBR0VfU0laRSAtIDB4NDAwIC0gMSk7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl92ZXJzaW9uW10gPSAiMS4xNmFjIjsJLyogbm8gc3BhY2VzICovCiAKQEAgLTIzMzIsMTUgKzIzNDAsNiBAQAogCXBtX2ZsYWdzIHw9IFBNX0FQTTsKIAogCS8qCi0JICogU2V0IHVwIGEgc2VnbWVudCB0aGF0IHJlZmVyZW5jZXMgdGhlIHJlYWwgbW9kZSBzZWdtZW50IDB4NDAKLQkgKiB0aGF0IGV4dGVuZHMgdXAgdG8gdGhlIGVuZCBvZiBwYWdlIHplcm8gKHRoYXQgd2UgaGF2ZSByZXNlcnZlZCkuCi0JICogVGhpcyBpcyBmb3IgYnVnZ3kgQklPUydzIHRoYXQgcmVmZXIgdG8gKHJlYWwgbW9kZSkgc2VnbWVudCAweDQwCi0JICogZXZlbiB0aG91Z2ggdGhleSBhcmUgY2FsbGVkIGluIHByb3RlY3RlZCBtb2RlLgotCSAqLwotCXNldF9iYXNlKGJhZF9iaW9zX2Rlc2MsIF9fdmEoKHVuc2lnbmVkIGxvbmcpMHg0MCA8PCA0KSk7Ci0JX3NldF9saW1pdCgoY2hhciAqKSZiYWRfYmlvc19kZXNjLCA0MDk1IC0gKDB4NDAgPDwgNCkpOwotCi0JLyoKIAkgKiBTZXQgdXAgdGhlIGxvbmcganVtcCBlbnRyeSBwb2ludCB0byB0aGUgQVBNIEJJT1MsIHdoaWNoIGlzIGNhbGxlZAogCSAqIGZyb20gaW5saW5lIGFzc2VtYmx5LgogCSAqLwpAQCAtMjM1OCwxMiArMjM1NywxMiBAQAogCSAqIGNvZGUgdG8gdGhhdCBDUFUuCiAJICovCiAJZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoMCk7Ci0Jc2V0X2Jhc2UoZ2R0W0FQTV9DUyA+PiAzXSwKLQkJIF9fdmEoKHVuc2lnbmVkIGxvbmcpYXBtX2luZm8uYmlvcy5jc2VnIDw8IDQpKTsKLQlzZXRfYmFzZShnZHRbQVBNX0NTXzE2ID4+IDNdLAotCQkgX192YSgodW5zaWduZWQgbG9uZylhcG1faW5mby5iaW9zLmNzZWdfMTYgPDwgNCkpOwotCXNldF9iYXNlKGdkdFtBUE1fRFMgPj4gM10sCi0JCSBfX3ZhKCh1bnNpZ25lZCBsb25nKWFwbV9pbmZvLmJpb3MuZHNlZyA8PCA0KSk7CisJc2V0X2Rlc2NfYmFzZSgmZ2R0W0FQTV9DUyA+PiAzXSwKKwkJICh1bnNpZ25lZCBsb25nKV9fdmEoKHVuc2lnbmVkIGxvbmcpYXBtX2luZm8uYmlvcy5jc2VnIDw8IDQpKTsKKwlzZXRfZGVzY19iYXNlKCZnZHRbQVBNX0NTXzE2ID4+IDNdLAorCQkgKHVuc2lnbmVkIGxvbmcpX192YSgodW5zaWduZWQgbG9uZylhcG1faW5mby5iaW9zLmNzZWdfMTYgPDwgNCkpOworCXNldF9kZXNjX2Jhc2UoJmdkdFtBUE1fRFMgPj4gM10sCisJCSAodW5zaWduZWQgbG9uZylfX3ZhKCh1bnNpZ25lZCBsb25nKWFwbV9pbmZvLmJpb3MuZHNlZyA8PCA0KSk7CiAKIAlwcm9jX2NyZWF0ZSgiYXBtIiwgMCwgTlVMTCwgJmFwbV9maWxlX29wcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDYzZmRkY2QwLi4yMmE0N2M4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTIsNyArMiw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgpAQCAtNDUsOCArNDUsOCBAQAogI2RlZmluZSBDQkFSX0VOQgkoMHg4MDAwMDAwMCkKICNkZWZpbmUgQ0JBUl9LRVkJKDBYMDAwMDAwQ0IpCiAJaWYgKGMtPng4Nl9tb2RlbCA9PSA5IHx8IGMtPng4Nl9tb2RlbCA9PSAxMCkgewotCQlpZiAoaW5sIChDQkFSKSAmIENCQVJfRU5CKQotCQkJb3V0bCAoMCB8IENCQVJfS0VZLCBDQkFSKTsKKwkJaWYgKGlubChDQkFSKSAmIENCQVJfRU5CKQorCQkJb3V0bCgwIHwgQ0JBUl9LRVksIENCQVIpOwogCX0KIH0KIApAQCAtODcsOSArODcsMTAgQEAKIAkJZCA9IGQyLWQ7CiAKIAkJaWYgKGQgPiAyMCpLNl9CVUdfTE9PUCkKLQkJCXByaW50aygic3lzdGVtIHN0YWJpbGl0eSBtYXkgYmUgaW1wYWlyZWQgd2hlbiBtb3JlIHRoYW4gMzIgTUIgYXJlIHVzZWQuXG4iKTsKKwkJCXByaW50ayhLRVJOX0NPTlQKKwkJCQkic3lzdGVtIHN0YWJpbGl0eSBtYXkgYmUgaW1wYWlyZWQgd2hlbiBtb3JlIHRoYW4gMzIgTUIgYXJlIHVzZWQuXG4iKTsKIAkJZWxzZQotCQkJcHJpbnRrKCJwcm9iYWJseSBPSyAoYWZ0ZXIgQjk3MzB4eHh4KS5cbiIpOworCQkJcHJpbnRrKEtFUk5fQ09OVCAicHJvYmFibHkgT0sgKGFmdGVyIEI5NzMweHh4eCkuXG4iKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUGxlYXNlIHNlZSBodHRwOi8vbWVtYnJlcy5seWNvcy5mci9wb3Vsb3QvazZidWcuaHRtbFxuIik7CiAJfQogCkBAIC0yMTksOCArMjIwLDkgQEAKIAlpZiAoKGMtPng4Nl9tb2RlbCA9PSA4ICYmIGMtPng4Nl9tYXNrID49IDEpIHx8IChjLT54ODZfbW9kZWwgPiA4KSkgewogCQlyZG1zcihNU1JfSzdfQ0xLX0NUTCwgbCwgaCk7CiAJCWlmICgobCAmIDB4ZmZmMDAwMDApICE9IDB4MjAwMDAwMDApIHsKLQkJCXByaW50ayAoIkNQVTogQ0xLX0NUTCBNU1Igd2FzICV4LiBSZXByb2dyYW1taW5nIHRvICV4XG4iLCBsLAotCQkJCSgobCAmIDB4MDAwZmZmZmYpfDB4MjAwMDAwMDApKTsKKwkJCXByaW50ayhLRVJOX0lORk8KKwkJCSAgICAiQ1BVOiBDTEtfQ1RMIE1TUiB3YXMgJXguIFJlcHJvZ3JhbW1pbmcgdG8gJXhcbiIsCisJCQkJCWwsICgobCAmIDB4MDAwZmZmZmYpfDB4MjAwMDAwMDApKTsKIAkJCXdybXNyKE1TUl9LN19DTEtfQ1RMLCAobCAmIDB4MDAwZmZmZmYpfDB4MjAwMDAwMDAsIGgpOwogCQl9CiAJfQpAQCAtMjUxLDYgKzI1Myw2NCBAQAogI2VuZGlmCiAKIC8qCisgKiBGaXh1cCBjb3JlIHRvcG9sb2d5IGluZm9ybWF0aW9uIGZvciBBTUQgbXVsdGktbm9kZSBwcm9jZXNzb3JzLgorICogQXNzdW1wdGlvbiAxOiBOdW1iZXIgb2YgY29yZXMgaW4gZWFjaCBpbnRlcm5hbCBub2RlIGlzIHRoZSBzYW1lLgorICogQXNzdW1wdGlvbiAyOiBNaXhlZCBzeXN0ZW1zIHdpdGggYm90aCBzaW5nbGUtbm9kZSBhbmQgZHVhbC1ub2RlCisgKiAgICAgICAgICAgICAgIHByb2Nlc3NvcnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgKi8KKyNpZmRlZiBDT05GSUdfWDg2X0hUCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgYW1kX2ZpeHVwX2RjbShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCXUzMiB0LCBjcG47CisJdTggbiwgbl9pZDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJLyogZml4dXAgdG9wb2xvZ3kgaW5mb3JtYXRpb24gb25seSBvbmNlIGZvciBhIGNvcmUgKi8KKwlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BTURfRENNKSkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgZm9yIG11bHRpLW5vZGUgcHJvY2Vzc29yIG9uIGJvb3QgY3B1ICovCisJdCA9IHJlYWRfcGNpX2NvbmZpZygwLCAyNCwgMywgMHhlOCk7CisJaWYgKCEodCAmICgxIDw8IDI5KSkpCisJCXJldHVybjsKKworCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0FNRF9EQ00pOworCisJLyogY29yZXMgcGVyIG5vZGU6IGVhY2ggaW50ZXJuYWwgbm9kZSBoYXMgaGFsZiB0aGUgbnVtYmVyIG9mIGNvcmVzICovCisJY3BuID0gYy0+eDg2X21heF9jb3JlcyA+PiAxOworCisJLyogZXZlbi1udW1iZXJlZCBOQl9pZCBvZiB0aGlzIGR1YWwtbm9kZSBwcm9jZXNzb3IgKi8KKwluID0gYy0+cGh5c19wcm9jX2lkIDw8IDE7CisKKwkvKgorCSAqIGRldGVybWluZSBpbnRlcm5hbCBub2RlIGlkIGFuZCBhc3NpZ24gY29yZXMgZmlmdHktZmlmdHkgdG8KKwkgKiBlYWNoIG5vZGUgb2YgdGhlIGR1YWwtbm9kZSBwcm9jZXNzb3IKKwkgKi8KKwl0ID0gcmVhZF9wY2lfY29uZmlnKDAsIDI0ICsgbiwgMywgMHhlOCk7CisJbiA9ICh0Pj4zMCkgJiAweDM7CisJaWYgKG4gPT0gMCkgeworCQlpZiAoYy0+Y3B1X2NvcmVfaWQgPCBjcG4pCisJCQluX2lkID0gMDsKKwkJZWxzZQorCQkJbl9pZCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKGMtPmNwdV9jb3JlX2lkIDwgY3BuKQorCQkJbl9pZCA9IDE7CisJCWVsc2UKKwkJCW5faWQgPSAwOworCX0KKworCS8qIGNvbXB1dGUgZW50aXJlIE5vZGVJRCwgdXNlIGxsY19zaGFyZWRfbWFwIHRvIHN0b3JlIHNpYmxpbmcgaW5mbyAqLworCXBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9IChjLT5waHlzX3Byb2NfaWQgPDwgMSkgKyBuX2lkOworCisJLyogZml4dXAgY29yZSBpZCB0byBiZSBpbiByYW5nZSBmcm9tIDAgdG8gY3BuICovCisJYy0+Y3B1X2NvcmVfaWQgPSBjLT5jcHVfY29yZV9pZCAlIGNwbjsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qCiAgKiBPbiBhIEFNRCBkdWFsIGNvcmUgc2V0dXAgdGhlIGxvd2VyIGJpdHMgb2YgdGhlIEFQSUMgaWQgZGlzdGluZ3VzaCB0aGUgY29yZXMuCiAgKiBBc3N1bWVzIG51bWJlciBvZiBjb3JlcyBpcyBhIHBvd2VyIG9mIHR3by4KICAqLwpAQCAtMjY3LDYgKzMyNyw5IEBACiAJYy0+cGh5c19wcm9jX2lkID0gYy0+aW5pdGlhbF9hcGljaWQgPj4gYml0czsKIAkvKiB1c2Ugc29ja2V0IElEIGFsc28gZm9yIGxhc3QgbGV2ZWwgY2FjaGUgKi8KIAlwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPSBjLT5waHlzX3Byb2NfaWQ7CisJLyogZml4dXAgdG9wb2xvZ3kgaW5mb3JtYXRpb24gb24gbXVsdGktbm9kZSBwcm9jZXNzb3JzICovCisJaWYgKChjLT54ODYgPT0gMHgxMCkgJiYgKGMtPng4Nl9tb2RlbCA9PSA5KSkKKwkJYW1kX2ZpeHVwX2RjbShjKTsKICNlbmRpZgogfQogCkBAIC0yNzUsOSArMzM4LDEwIEBACiAjaWYgZGVmaW5lZChDT05GSUdfTlVNQSkgJiYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IG5vZGU7Ci0JdW5zaWduZWQgYXBpY2lkID0gY3B1X2hhc19hcGljID8gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgOiBjLT5hcGljaWQ7CisJdW5zaWduZWQgYXBpY2lkID0gYy0+YXBpY2lkOwogCi0Jbm9kZSA9IGMtPnBoeXNfcHJvY19pZDsKKwlub2RlID0gcGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpOworCiAJaWYgKGFwaWNpZF90b19ub2RlW2FwaWNpZF0gIT0gTlVNQV9OT19OT0RFKQogCQlub2RlID0gYXBpY2lkX3RvX25vZGVbYXBpY2lkXTsKIAlpZiAoIW5vZGVfb25saW5lKG5vZGUpKSB7CkBAIC0zOTgsMTggKzQ2MiwzMCBAQAogCQl1MzIgbGV2ZWw7CiAKIAkJbGV2ZWwgPSBjcHVpZF9lYXgoMSk7Ci0JCWlmKChsZXZlbCA+PSAweDBmNDggJiYgbGV2ZWwgPCAweDBmNTApIHx8IGxldmVsID49IDB4MGY1OCkKKwkJaWYgKChsZXZlbCA+PSAweDBmNDggJiYgbGV2ZWwgPCAweDBmNTApIHx8IGxldmVsID49IDB4MGY1OCkKIAkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1JFUF9HT09EKTsKIAogCQkvKgogCQkgKiBTb21lIEJJT1NlcyBpbmNvcnJlY3RseSBmb3JjZSB0aGlzIGZlYXR1cmUsIGJ1dCBvbmx5IEs4CiAJCSAqIHJldmlzaW9uIEQgKG1vZGVsID0gMHgxNCkgYW5kIGxhdGVyIGFjdHVhbGx5IHN1cHBvcnQgaXQuCisJCSAqIChBTUQgRXJyYXR1bSAjMTEwLCBkb2NJZDogMjU3NTkpLgogCQkgKi8KLQkJaWYgKGMtPng4Nl9tb2RlbCA8IDB4MTQpCisJCWlmIChjLT54ODZfbW9kZWwgPCAweDE0ICYmIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfTEFIRl9MTSkpIHsKKwkJCXU2NCB2YWw7CisKIAkJCWNsZWFyX2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTEFIRl9MTSk7CisJCQlpZiAoIXJkbXNybF9hbWRfc2FmZSgweGMwMDExMDBkLCAmdmFsKSkgeworCQkJCXZhbCAmPSB+KDFVTEwgPDwgMzIpOworCQkJCXdybXNybF9hbWRfc2FmZSgweGMwMDExMDBkLCB2YWwpOworCQkJfQorCQl9CisKIAl9CiAJaWYgKGMtPng4NiA9PSAweDEwIHx8IGMtPng4NiA9PSAweDExKQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9SRVBfR09PRCk7CisKKwkvKiBnZXQgYXBpY2lkIGluc3RlYWQgb2YgaW5pdGlhbCBhcGljIGlkIGZyb20gY3B1aWQgKi8KKwljLT5hcGljaWQgPSBoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKTsKICNlbHNlCiAKIAkvKgpAQCAtNDk0LDI3ICs1NzAsMzAgQEAKIAkJICogYmVuZWZpdCBpbiBkb2luZyBzby4KIAkJICovCiAJCWlmICghcmRtc3JsX3NhZmUoTVNSX0s4X1RTRUdfQUREUiwgJnRzZWcpKSB7Ci0JCSAgICBwcmludGsoS0VSTl9ERUJVRyAidHNlZzogJTAxMGxseFxuIiwgdHNlZyk7Ci0JCSAgICBpZiAoKHRzZWc+PlBNRF9TSElGVCkgPAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInRzZWc6ICUwMTBsbHhcbiIsIHRzZWcpOworCQkJaWYgKCh0c2VnPj5QTURfU0hJRlQpIDwKIAkJCQkobWF4X2xvd19wZm5fbWFwcGVkPj4oUE1EX1NISUZULVBBR0VfU0hJRlQpKSB8fAotCQkJKCh0c2VnPj5QTURfU0hJRlQpIDwKKwkJCQkoKHRzZWc+PlBNRF9TSElGVCkgPAogCQkJCShtYXhfcGZuX21hcHBlZD4+KFBNRF9TSElGVC1QQUdFX1NISUZUKSkgJiYKLQkJCSAodHNlZz4+UE1EX1NISUZUKSA+PSAoMVVMTDw8KDMyIC0gUE1EX1NISUZUKSkpKQotCQkJc2V0X21lbW9yeV80aygodW5zaWduZWQgbG9uZylfX3ZhKHRzZWcpLCAxKTsKKwkJCQkodHNlZz4+UE1EX1NISUZUKSA+PSAoMVVMTDw8KDMyIC0gUE1EX1NISUZUKSkpKQorCQkJCXNldF9tZW1vcnlfNGsoKHVuc2lnbmVkIGxvbmcpX192YSh0c2VnKSwgMSk7CiAJCX0KIAl9CiAjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVpbml0IGFtZF9zaXplX2NhY2hlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYywgdW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgdW5zaWduZWQgaW50IF9fY3B1aW5pdCBhbWRfc2l6ZV9jYWNoZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMsCisJCQkJCQkJdW5zaWduZWQgaW50IHNpemUpCiB7CiAJLyogQU1EIGVycmF0YSBUMTMgKG9yZGVyICMyMTkyMikgKi8KIAlpZiAoKGMtPng4NiA9PSA2KSkgewotCQlpZiAoYy0+eDg2X21vZGVsID09IDMgJiYgYy0+eDg2X21hc2sgPT0gMCkJLyogRHVyb24gUmV2IEEwICovCisJCS8qIER1cm9uIFJldiBBMCAqLworCQlpZiAoYy0+eDg2X21vZGVsID09IDMgJiYgYy0+eDg2X21hc2sgPT0gMCkKIAkJCXNpemUgPSA2NDsKKwkJLyogVGJpcmQgcmV2IEExL0EyICovCiAJCWlmIChjLT54ODZfbW9kZWwgPT0gNCAmJgotCQkgICAgKGMtPng4Nl9tYXNrID09IDAgfHwgYy0+eDg2X21hc2sgPT0gMSkpCS8qIFRiaXJkIHJldiBBMS9BMiAqLworCQkJKGMtPng4Nl9tYXNrID09IDAgfHwgYy0+eDg2X21hc2sgPT0gMSkpCiAJCQlzaXplID0gMjU2OwogCX0KIAlyZXR1cm4gc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKaW5kZXggYzhlMzE1Zi4uMDFhMjY1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCWJvb3RfY3B1X2RhdGEuZmRpdl9idWcgPSBmZGl2X2J1ZzsKIAlpZiAoYm9vdF9jcHVfZGF0YS5mZGl2X2J1ZykKLQkJcHJpbnRrKCJIbW0sIEZQVSB3aXRoIEZESVYgYnVnLlxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkhtbSwgRlBVIHdpdGggRkRJViBidWcuXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNoZWNrX2hsdCh2b2lkKQpAQCAtOTgsNyArOTgsNyBAQAogCWhhbHQoKTsKIAloYWx0KCk7CiAJaGFsdCgpOwotCXByaW50aygiT0suXG4iKTsKKwlwcmludGsoS0VSTl9DT05UICJPSy5cbiIpOwogfQogCiAvKgpAQCAtMTIyLDkgKzEyMiw5IEBACiAJICogQ1BVIGhhcmQuIFRvbyBiYWQuCiAJICovCiAJaWYgKHJlcyAhPSAxMjM0NTY3OCkKLQkJcHJpbnRrKCJCdWdneS5cbiIpOworCQlwcmludGsoS0VSTl9DT05UICJCdWdneS5cbiIpOwogCWVsc2UKLQkJcHJpbnRrKCJPSy5cbiIpOworCQlwcmludGsoS0VSTl9DT05UICJPSy5cbiIpOwogI2VuZGlmCiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQAogewogCWlkZW50aWZ5X2Jvb3RfY3B1KCk7CiAjaWZuZGVmIENPTkZJR19TTVAKLQlwcmludGsoIkNQVTogIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVOiAiKTsKIAlwcmludF9jcHVfaW5mbygmYm9vdF9jcHVfZGF0YSk7CiAjZW5kaWYKIAljaGVja19jb25maWcoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVnc182NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzXzY0LmMKaW5kZXggOWEzZWQwNi4uMDRmMGZlNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzXzY0LmMKQEAgLTE1LDcgKzE1LDcgQEAKIHsKIAlpZGVudGlmeV9ib290X2NwdSgpOwogI2lmICFkZWZpbmVkKENPTkZJR19TTVApCi0JcHJpbnRrKCJDUFU6ICIpOworCXByaW50ayhLRVJOX0lORk8gIkNQVTogIik7CiAJcHJpbnRfY3B1X2luZm8oJmJvb3RfY3B1X2RhdGEpOwogI2VuZGlmCiAJYWx0ZXJuYXRpdmVfaW5zdHJ1Y3Rpb25zKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCA1Y2U2MGE4Li4yMDU1ZmMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KLSNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgpAQCAtMjgsMTMgKzI4LDEzIEBACiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+Ci0jaW5jbHVkZSA8YXNtL251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KLSNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKICNpbmNsdWRlIDxhc20vdXYvdXYuaD4KQEAgLTk0LDQ1ICs5NCw0NSBAQAogCSAqIFRMUyBkZXNjcmlwdG9ycyBhcmUgY3VycmVudGx5IGF0IGEgZGlmZmVyZW50IHBsYWNlIGNvbXBhcmVkIHRvIGkzODYuCiAJICogSG9wZWZ1bGx5IG5vYm9keSBleHBlY3RzIHRoZW0gYXQgYSBmaXhlZCBwbGFjZSAoV2luZT8pCiAJICovCi0JW0dEVF9FTlRSWV9LRVJORUwzMl9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmOWIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9EU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTMwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZiMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjMwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWZmYjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMMzJfQ1NdCQk9IEdEVF9FTlRSWV9JTklUKDB4YzA5YiwgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9LRVJORUxfQ1NdCQk9IEdEVF9FTlRSWV9JTklUKDB4YTA5YiwgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9LRVJORUxfRFNdCQk9IEdEVF9FTlRSWV9JTklUKDB4YzA5MywgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVIzMl9DU10JPSBHRFRfRU5UUllfSU5JVCgweGMwZmIsIDAsIDB4ZmZmZmYpLAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0RTXQk9IEdEVF9FTlRSWV9JTklUKDB4YzBmMywgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdCT0gR0RUX0VOVFJZX0lOSVQoMHhhMGZiLCAwLCAweGZmZmZmKSwKICNlbHNlCi0JW0dEVF9FTlRSWV9LRVJORUxfQ1NdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjlhMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9LRVJORUxfRFNdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmEwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0NTXQkJPSBHRFRfRU5UUllfSU5JVCgweGMwOWEsIDAsIDB4ZmZmZmYpLAorCVtHRFRfRU5UUllfS0VSTkVMX0RTXQkJPSBHRFRfRU5UUllfSU5JVCgweGMwOTIsIDAsIDB4ZmZmZmYpLAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXQk9IEdEVF9FTlRSWV9JTklUKDB4YzBmYSwgMCwgMHhmZmZmZiksCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0gR0RUX0VOVFJZX0lOSVQoMHhjMGYyLCAwLCAweGZmZmZmKSwKIAkvKgogCSAqIFNlZ21lbnRzIHVzZWQgZm9yIGNhbGxpbmcgUG5QIEJJT1MgaGF2ZSBieXRlIGdyYW51bGFyaXR5LgogCSAqIFRoZXkgY29kZSBzZWdtZW50cyBhbmQgZGF0YSBzZWdtZW50cyBoYXZlIGZpeGVkIDY0ayBsaW1pdHMsCiAJICogdGhlIHRyYW5zZmVyIHNlZ21lbnQgc2l6ZXMgYXJlIHNldCBhdCBydW4gdGltZS4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19DUzMyXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0NTMzJdCT0gR0RUX0VOVFJZX0lOSVQoMHg0MDlhLCAwLCAweGZmZmYpLAogCS8qIDE2LWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX0NTMTZdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfQ1MxNl0JPSBHRFRfRU5UUllfSU5JVCgweDAwOWEsIDAsIDB4ZmZmZiksCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfRFNdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0RTXQkJPSBHRFRfRU5UUllfSU5JVCgweDAwOTIsIDAsIDB4ZmZmZiksCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfVFMxXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19UUzFdCQk9IEdEVF9FTlRSWV9JTklUKDB4MDA5MiwgMCwgMCksCiAJLyogMTYtYml0IGRhdGEgKi8KLQlbR0RUX0VOVFJZX1BOUEJJT1NfVFMyXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19UUzJdCQk9IEdEVF9FTlRSWV9JTklUKDB4MDA5MiwgMCwgMCksCiAJLyoKIAkgKiBUaGUgQVBNIHNlZ21lbnRzIGhhdmUgYnl0ZSBncmFudWxhcml0eSBhbmQgdGhlaXIgYmFzZXMKIAkgKiBhcmUgc2V0IGF0IHJ1biB0aW1lLiAgQWxsIGhhdmUgNjRrIGxpbWl0cy4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0VdCT0gR0RUX0VOVFJZX0lOSVQoMHg0MDlhLCAwLCAweGZmZmYpLAogCS8qIDE2LWJpdCBjb2RlICovCi0JW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMV0JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzFdCT0gR0RUX0VOVFJZX0lOSVQoMHgwMDlhLCAwLCAweGZmZmYpLAogCS8qIGRhdGEgKi8KLQlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsyXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0UrMl0JPSBHRFRfRU5UUllfSU5JVCgweDQwOTIsIDAsIDB4ZmZmZiksCiAKLQlbR0RUX0VOVFJZX0VTUEZJWF9TU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX1BFUkNQVV0JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0VTUEZJWF9TU10JCT0gR0RUX0VOVFJZX0lOSVQoMHhjMDkyLCAwLCAweGZmZmZmKSwKKwlbR0RUX0VOVFJZX1BFUkNQVV0JCT0gR0RUX0VOVFJZX0lOSVQoMHhjMDkyLCAwLCAweGZmZmZmKSwKIAlHRFRfU1RBQ0tfQ0FOQVJZX0lOSVQKICNlbmRpZgogfSB9OwpAQCAtOTgyLDE4ICs5ODIsMjYgQEAKIF9fc2V0dXAoImNsZWFyY3B1aWQ9Iiwgc2V0dXBfZGlzYWJsZWNwdWlkKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLXN0cnVjdCBkZXNjX3B0ciBpZHRfZGVzY3IgPSB7IDI1NiAqIDE2IC0gMSwgKHVuc2lnbmVkIGxvbmcpIGlkdF90YWJsZSB9Oworc3RydWN0IGRlc2NfcHRyIGlkdF9kZXNjciA9IHsgTlJfVkVDVE9SUyAqIDE2IC0gMSwgKHVuc2lnbmVkIGxvbmcpIGlkdF90YWJsZSB9OwogCiBERUZJTkVfUEVSX0NQVV9GSVJTVCh1bmlvbiBpcnFfc3RhY2tfdW5pb24sCiAJCSAgICAgaXJxX3N0YWNrX3VuaW9uKSBfX2FsaWduZWQoUEFHRV9TSVpFKTsKIAotREVGSU5FX1BFUl9DUFUoY2hhciAqLCBpcnFfc3RhY2tfcHRyKSA9Ci0JaW5pdF9wZXJfY3B1X3ZhcihpcnFfc3RhY2tfdW5pb24uaXJxX3N0YWNrKSArIElSUV9TVEFDS19TSVpFIC0gNjQ7CisvKgorICogVGhlIGZvbGxvd2luZyBmb3VyIHBlcmNwdSB2YXJpYWJsZXMgYXJlIGhvdC4gIEFsaWduIGN1cnJlbnRfdGFzayB0bworICogY2FjaGVsaW5lIHNpemUgc3VjaCB0aGF0IGFsbCBmb3VyIGZhbGwgaW4gdGhlIHNhbWUgY2FjaGVsaW5lLgorICovCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3VycmVudF90YXNrKSBfX19fY2FjaGVsaW5lX2FsaWduZWQgPQorCSZpbml0X3Rhc2s7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woY3VycmVudF90YXNrKTsKIAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywga2VybmVsX3N0YWNrKSA9CiAJKHVuc2lnbmVkIGxvbmcpJmluaXRfdGhyZWFkX3VuaW9uIC0gS0VSTkVMX1NUQUNLX09GRlNFVCArIFRIUkVBRF9TSVpFOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGtlcm5lbF9zdGFjayk7CiAKK0RFRklORV9QRVJfQ1BVKGNoYXIgKiwgaXJxX3N0YWNrX3B0cikgPQorCWluaXRfcGVyX2NwdV92YXIoaXJxX3N0YWNrX3VuaW9uLmlycV9zdGFjaykgKyBJUlFfU1RBQ0tfU0laRSAtIDY0OworCiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBpbnQsIGlycV9jb3VudCkgPSAtMTsKIAogLyoKQEAgLTEwMDgsOCArMTAxNiw3IEBACiB9OwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKGNoYXIsIGV4Y2VwdGlvbl9zdGFja3MKLQlbKE5fRVhDRVBUSU9OX1NUQUNLUyAtIDEpICogRVhDRVBUSU9OX1NUS1NaICsgREVCVUdfU1RLU1pdKQotCV9fYWxpZ25lZChQQUdFX1NJWkUpOworCVsoTl9FWENFUFRJT05fU1RBQ0tTIC0gMSkgKiBFWENFUFRJT05fU1RLU1ogKyBERUJVR19TVEtTWl0pOwogCiAvKiBNYXkgbm90IGJlIG1hcmtlZCBfX2luaXQ6IHVzZWQgYnkgc29mdHdhcmUgc3VzcGVuZCAqLwogdm9pZCBzeXNjYWxsX2luaXQodm9pZCkKQEAgLTEwNDIsOCArMTA0OSwxMSBAQAogCiAjZWxzZQkvKiBDT05GSUdfWDg2XzY0ICovCiAKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjdXJyZW50X3Rhc2spID0gJmluaXRfdGFzazsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChjdXJyZW50X3Rhc2spOworCiAjaWZkZWYgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzdGFja19jYW5hcnkpOworREVGSU5FX1BFUl9DUFVfQUxJR05FRChzdHJ1Y3Qgc3RhY2tfY2FuYXJ5LCBzdGFja19jYW5hcnkpOwogI2VuZGlmCiAKIC8qIE1ha2Ugc3VyZSAlZnMgYW5kICVncyBhcmUgaW5pdGlhbGl6ZWQgcHJvcGVybHkgaW4gaWRsZSB0aHJlYWRzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKaW5kZXggNTkzMTcxZS4uMTk4MDdiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYwpAQCAtMywxMCArMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1jeXJpeC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLSNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+CiAjaW5jbHVkZSA8YXNtL3RzYy5oPgogCkBAIC0yODIsNyArMjgyLDggQEAKIAkJICogIFRoZSA1NTEwLzU1MjAgY29tcGFuaW9uIGNoaXBzIGhhdmUgYSBmdW5reSBQSVQuCiAJCSAqLwogCQlpZiAodmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ1lSSVggJiYKLQkgKGRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAgfHwgZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCkpCisJCQkoZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCB8fAorCQkJCQlkZXZpY2UgPT0gUENJX0RFVklDRV9JRF9DWVJJWF81NTIwKSkKIAkJCW1hcmtfdHNjX3Vuc3RhYmxlKCJjeXJpeCA1NTEwLzU1MjAgZGV0ZWN0ZWQiKTsKIAl9CiAjZW5kaWYKQEAgLTI5OSw3ICszMDAsOCBAQAogCQkJICogID8gIDogMHg3eAogCQkJICogR1gxIDogMHg4eCAgICAgICAgICBHWDEgIGRhdGFzaGVldCA1NgogCQkJICovCi0JCQlpZiAoKDB4MzAgPD0gZGlyMSAmJiBkaXIxIDw9IDB4NmYpIHx8ICgweDgwIDw9IGRpcjEgJiYgZGlyMSA8PSAweDhmKSkKKwkJCWlmICgoMHgzMCA8PSBkaXIxICYmIGRpcjEgPD0gMHg2ZikgfHwKKwkJCQkJKDB4ODAgPD0gZGlyMSAmJiBkaXIxIDw9IDB4OGYpKQogCQkJCWdlb2RlX2NvbmZpZ3VyZSgpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgeyAvKiBNZWRpYUdYICovCkBAIC00MjcsOSArNDI5LDEyIEBACiAJCQlwcmludGsoS0VSTl9JTkZPICJFbmFibGluZyBDUFVJRCBvbiBDeXJpeCBwcm9jZXNzb3IuXG4iKTsKIAkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJCWNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7Ci0JCQlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOyAgICAgICAvKiBlbmFibGUgTUFQRU4gICovCi0JCQlzZXRDeDg2X29sZChDWDg2X0NDUjQsIGdldEN4ODZfb2xkKENYODZfQ0NSNCkgfCAweDgwKTsgIC8qIGVuYWJsZSBjcHVpZCAgKi8KLQkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCBjY3IzKTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2FibGUgTUFQRU4gKi8KKwkJCS8qIGVuYWJsZSBNQVBFTiAgKi8KKwkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY2NyMyAmIDB4MGYpIHwgMHgxMCk7CisJCQkvKiBlbmFibGUgY3B1aWQgICovCisJCQlzZXRDeDg2X29sZChDWDg2X0NDUjQsIGdldEN4ODZfb2xkKENYODZfQ0NSNCkgfCAweDgwKTsKKwkJCS8qIGRpc2FibGUgTUFQRU4gKi8KKwkJCXNldEN4ODYoQ1g4Nl9DQ1IzLCBjY3IzKTsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaHlwZXJ2aXNvci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKaW5kZXggZmI1Yjg2YS4uOTNiYThlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9oeXBlcnZpc29yLmMKQEAgLTI4LDExICsyOCwxMCBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fY3B1aW5pdAogZGV0ZWN0X2h5cGVydmlzb3JfdmVuZG9yKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQlpZiAodm13YXJlX3BsYXRmb3JtKCkpIHsKKwlpZiAodm13YXJlX3BsYXRmb3JtKCkpCiAJCWMtPng4Nl9oeXBlcl92ZW5kb3IgPSBYODZfSFlQRVJfVkVORE9SX1ZNV0FSRTsKLQl9IGVsc2UgeworCWVsc2UKIAkJYy0+eDg2X2h5cGVyX3ZlbmRvciA9IFg4Nl9IWVBFUl9WRU5ET1JfTk9ORTsKLQl9CiB9CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X2h5cGVydmlzb3JfdHNjX2ZyZXEodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwppbmRleCAzMjYwYWIwLi44MGE3MjJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCkBAIC03LDE3ICs3LDE3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kcy5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8YXNtL251bWFfNjQuaD4KICNlbmRpZgogCkBAIC0xNzQsNyArMTc0LDggQEAKICNpZmRlZiBDT05GSUdfWDg2X0YwMEZfQlVHCiAJLyoKIAkgKiBBbGwgY3VycmVudCBtb2RlbHMgb2YgUGVudGl1bSBhbmQgUGVudGl1bSB3aXRoIE1NWCB0ZWNobm9sb2d5IENQVXMKLQkgKiBoYXZlIHRoZSBGMCAwRiBidWcsIHdoaWNoIGxldHMgbm9ucHJpdmlsZWdlZCB1c2VycyBsb2NrIHVwIHRoZSBzeXN0ZW0uCisJICogaGF2ZSB0aGUgRjAgMEYgYnVnLCB3aGljaCBsZXRzIG5vbnByaXZpbGVnZWQgdXNlcnMgbG9jayB1cCB0aGUKKwkgKiBzeXN0ZW0uCiAJICogTm90ZSB0aGF0IHRoZSB3b3JrYXJvdW5kIG9ubHkgc2hvdWxkIGJlIGluaXRpYWxpemVkIG9uY2UuLi4KIAkgKi8KIAljLT5mMDBmX2J1ZyA9IDA7CkBAIC0yMDcsNyArMjA4LDcgQEAKIAkJCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IEMwIHN0ZXBwaW5nIFA0IFhlb24gZGV0ZWN0ZWQuXG4iKTsKIAkJCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IERpc2FibGluZyBoYXJkd2FyZSBwcmVmZXRjaGluZyAoRXJyYXRhIDAzNylcbiIpOwogCQkJbG8gfD0gTVNSX0lBMzJfTUlTQ19FTkFCTEVfUFJFRkVUQ0hfRElTQUJMRTsKLQkJCXdybXNyIChNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbG8sIGhpKTsKKwkJCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsbywgaGkpOwogCQl9CiAJfQogCkBAIC0yODMsNyArMjg0LDcgQEAKIAkvKiBJbnRlbCBoYXMgYSBub24tc3RhbmRhcmQgZGVwZW5kZW5jeSBvbiAlZWN4IGZvciB0aGlzIENQVUlEIGxldmVsLiAqLwogCWNwdWlkX2NvdW50KDQsIDAsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwogCWlmIChlYXggJiAweDFmKQotCQlyZXR1cm4gKChlYXggPj4gMjYpICsgMSk7CisJCXJldHVybiAoZWF4ID4+IDI2KSArIDE7CiAJZWxzZQogCQlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDc4OWVmZTIuLjgwNGM0MGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKglDaGFuZ2VzOgogICoJVmVua2F0ZXNoIFBhbGxpcGFkaQk6IEFkZGluZyBjYWNoZSBpZGVudGlmaWNhdGlvbiB0aHJvdWdoIGNwdWlkKDQpCi0gKgkJQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPjogV29yayB3aXRoIENQVSBob3RwbHVnIGluZnJhc3RydWN0dXJlLgorICoJQXNob2sgUmFqIDxhc2hvay5yYWpAaW50ZWwuY29tPjogV29yayB3aXRoIENQVSBob3RwbHVnIGluZnJhc3RydWN0dXJlLgogICoJQW5kaSBLbGVlbiAvIEFuZHJlYXMgSGVycm1hbm4JOiBDUFVJRDQgZW11bGF0aW9uIG9uIEFNRC4KICAqLwogCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9rOC5oPgogCiAjZGVmaW5lIExWTF8xX0lOU1QJMQpAQCAtMjUsMTQgKzI1LDE1IEBACiAjZGVmaW5lIExWTF8zCQk0CiAjZGVmaW5lIExWTF9UUkFDRQk1CiAKLXN0cnVjdCBfY2FjaGVfdGFibGUKLXsKK3N0cnVjdCBfY2FjaGVfdGFibGUgewogCXVuc2lnbmVkIGNoYXIgZGVzY3JpcHRvcjsKIAljaGFyIGNhY2hlX3R5cGU7CiAJc2hvcnQgc2l6ZTsKIH07CiAKLS8qIGFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IgdHJhY2UgY2FjaGUgZW50cmllcykgKi8KKy8qIEFsbCB0aGUgY2FjaGUgZGVzY3JpcHRvciB0eXBlcyB3ZSBjYXJlIGFib3V0IChubyBUTEIgb3IKKyAgIHRyYWNlIGNhY2hlIGVudHJpZXMpICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgX2NhY2hlX3RhYmxlIF9fY3B1aW5pdGNvbnN0IGNhY2hlX3RhYmxlW10gPQogewogCXsgMHgwNiwgTFZMXzFfSU5TVCwgOCB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCkBAIC0xMDUsOCArMTA2LDcgQEAKIH07CiAKIAotZW51bSBfY2FjaGVfdHlwZQoteworZW51bSBfY2FjaGVfdHlwZSB7CiAJQ0FDSEVfVFlQRV9OVUxMCT0gMCwKIAlDQUNIRV9UWVBFX0RBVEEgPSAxLAogCUNBQ0hFX1RZUEVfSU5TVCA9IDIsCkBAIC0xNzAsMzEgKzE3MCwzMSBAQAogICAgTWF5YmUgbGF0ZXIgKi8KIHVuaW9uIGwxX2NhY2hlIHsKIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsaW5lX3NpemUgOiA4OwotCQl1bnNpZ25lZCBsaW5lc19wZXJfdGFnIDogODsKLQkJdW5zaWduZWQgYXNzb2MgOiA4OwotCQl1bnNpZ25lZCBzaXplX2luX2tiIDogODsKKwkJdW5zaWduZWQgbGluZV9zaXplOjg7CisJCXVuc2lnbmVkIGxpbmVzX3Blcl90YWc6ODsKKwkJdW5zaWduZWQgYXNzb2M6ODsKKwkJdW5zaWduZWQgc2l6ZV9pbl9rYjo4OwogCX07CiAJdW5zaWduZWQgdmFsOwogfTsKIAogdW5pb24gbDJfY2FjaGUgewogCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGxpbmVfc2l6ZSA6IDg7Ci0JCXVuc2lnbmVkIGxpbmVzX3Blcl90YWcgOiA0OwotCQl1bnNpZ25lZCBhc3NvYyA6IDQ7Ci0JCXVuc2lnbmVkIHNpemVfaW5fa2IgOiAxNjsKKwkJdW5zaWduZWQgbGluZV9zaXplOjg7CisJCXVuc2lnbmVkIGxpbmVzX3Blcl90YWc6NDsKKwkJdW5zaWduZWQgYXNzb2M6NDsKKwkJdW5zaWduZWQgc2l6ZV9pbl9rYjoxNjsKIAl9OwogCXVuc2lnbmVkIHZhbDsKIH07CiAKIHVuaW9uIGwzX2NhY2hlIHsKIAlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsaW5lX3NpemUgOiA4OwotCQl1bnNpZ25lZCBsaW5lc19wZXJfdGFnIDogNDsKLQkJdW5zaWduZWQgYXNzb2MgOiA0OwotCQl1bnNpZ25lZCByZXMgOiAyOwotCQl1bnNpZ25lZCBzaXplX2VuY29kZWQgOiAxNDsKKwkJdW5zaWduZWQgbGluZV9zaXplOjg7CisJCXVuc2lnbmVkIGxpbmVzX3Blcl90YWc6NDsKKwkJdW5zaWduZWQgYXNzb2M6NDsKKwkJdW5zaWduZWQgcmVzOjI7CisJCXVuc2lnbmVkIHNpemVfZW5jb2RlZDoxNDsKIAl9OwogCXVuc2lnbmVkIHZhbDsKIH07CkBAIC0yNDEsNyArMjQxLDcgQEAKIAljYXNlIDA6CiAJCWlmICghbDEtPnZhbCkKIAkJCXJldHVybjsKLQkJYXNzb2MgPSBsMS0+YXNzb2M7CisJCWFzc29jID0gYXNzb2NzW2wxLT5hc3NvY107CiAJCWxpbmVfc2l6ZSA9IGwxLT5saW5lX3NpemU7CiAJCWxpbmVzX3Blcl90YWcgPSBsMS0+bGluZXNfcGVyX3RhZzsKIAkJc2l6ZV9pbl9rYiA9IGwxLT5zaXplX2luX2tiOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJY2FzZSAyOgogCQlpZiAoIWwyLnZhbCkKIAkJCXJldHVybjsKLQkJYXNzb2MgPSBsMi5hc3NvYzsKKwkJYXNzb2MgPSBhc3NvY3NbbDIuYXNzb2NdOwogCQlsaW5lX3NpemUgPSBsMi5saW5lX3NpemU7CiAJCWxpbmVzX3Blcl90YWcgPSBsMi5saW5lc19wZXJfdGFnOwogCQkvKiBjcHVfZGF0YSBoYXMgZXJyYXRhIGNvcnJlY3Rpb25zIGZvciBLNyBhcHBsaWVkICovCkBAIC0yNTgsMTAgKzI1OCwxNCBAQAogCWNhc2UgMzoKIAkJaWYgKCFsMy52YWwpCiAJCQlyZXR1cm47Ci0JCWFzc29jID0gbDMuYXNzb2M7CisJCWFzc29jID0gYXNzb2NzW2wzLmFzc29jXTsKIAkJbGluZV9zaXplID0gbDMubGluZV9zaXplOwogCQlsaW5lc19wZXJfdGFnID0gbDMubGluZXNfcGVyX3RhZzsKIAkJc2l6ZV9pbl9rYiA9IGwzLnNpemVfZW5jb2RlZCAqIDUxMjsKKwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BTURfRENNKSkgeworCQkJc2l6ZV9pbl9rYiA9IHNpemVfaW5fa2IgPj4gMTsKKwkJCWFzc29jID0gYXNzb2MgPj4gMTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm47CkBAIC0yNzAsMTggKzI3NCwxNCBAQAogCWVheC0+c3BsaXQuaXNfc2VsZl9pbml0aWFsaXppbmcgPSAxOwogCWVheC0+c3BsaXQudHlwZSA9IHR5cGVzW2xlYWZdOwogCWVheC0+c3BsaXQubGV2ZWwgPSBsZXZlbHNbbGVhZl07Ci0JaWYgKGxlYWYgPT0gMykKLQkJZWF4LT5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nID0KLQkJCWN1cnJlbnRfY3B1X2RhdGEueDg2X21heF9jb3JlcyAtIDE7Ci0JZWxzZQotCQllYXgtPnNwbGl0Lm51bV90aHJlYWRzX3NoYXJpbmcgPSAwOworCWVheC0+c3BsaXQubnVtX3RocmVhZHNfc2hhcmluZyA9IDA7CiAJZWF4LT5zcGxpdC5udW1fY29yZXNfb25fZGllID0gY3VycmVudF9jcHVfZGF0YS54ODZfbWF4X2NvcmVzIC0gMTsKIAogCi0JaWYgKGFzc29jID09IDB4ZikKKwlpZiAoYXNzb2MgPT0gMHhmZmZmKQogCQllYXgtPnNwbGl0LmlzX2Z1bGx5X2Fzc29jaWF0aXZlID0gMTsKIAllYngtPnNwbGl0LmNvaGVyZW5jeV9saW5lX3NpemUgPSBsaW5lX3NpemUgLSAxOwotCWVieC0+c3BsaXQud2F5c19vZl9hc3NvY2lhdGl2aXR5ID0gYXNzb2NzW2Fzc29jXSAtIDE7CisJZWJ4LT5zcGxpdC53YXlzX29mX2Fzc29jaWF0aXZpdHkgPSBhc3NvYyAtIDE7CiAJZWJ4LT5zcGxpdC5waHlzaWNhbF9saW5lX3BhcnRpdGlvbiA9IGxpbmVzX3Blcl90YWcgLSAxOwogCWVjeC0+c3BsaXQubnVtYmVyX29mX3NldHMgPSAoc2l6ZV9pbl9rYiAqIDEwMjQpIC8gbGluZV9zaXplIC8KIAkJKGVieC0+c3BsaXQud2F5c19vZl9hc3NvY2lhdGl2aXR5ICsgMSkgLSAxOwpAQCAtMzUwLDcgKzM1MCw4IEBACiAKIHVuc2lnbmVkIGludCBfX2NwdWluaXQgaW5pdF9pbnRlbF9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCXVuc2lnbmVkIGludCB0cmFjZSA9IDAsIGwxaSA9IDAsIGwxZCA9IDAsIGwyID0gMCwgbDMgPSAwOyAvKiBDYWNoZSBzaXplcyAqLworCS8qIENhY2hlIHNpemVzICovCisJdW5zaWduZWQgaW50IHRyYWNlID0gMCwgbDFpID0gMCwgbDFkID0gMCwgbDIgPSAwLCBsMyA9IDA7CiAJdW5zaWduZWQgaW50IG5ld19sMWQgPSAwLCBuZXdfbDFpID0gMDsgLyogQ2FjaGUgc2l6ZXMgZnJvbSBjcHVpZCg0KSAqLwogCXVuc2lnbmVkIGludCBuZXdfbDIgPSAwLCBuZXdfbDMgPSAwLCBpOyAvKiBDYWNoZSBzaXplcyBmcm9tIGNwdWlkKDQpICovCiAJdW5zaWduZWQgaW50IGwyX2lkID0gMCwgbDNfaWQgPSAwLCBudW1fdGhyZWFkc19zaGFyaW5nLCBpbmRleF9tc2I7CkBAIC0zNzcsOCArMzc4LDggQEAKIAogCQkJcmV0dmFsID0gY3B1aWQ0X2NhY2hlX2xvb2t1cF9yZWdzKGksICZ0aGlzX2xlYWYpOwogCQkJaWYgKHJldHZhbCA+PSAwKSB7Ci0JCQkJc3dpdGNoKHRoaXNfbGVhZi5lYXguc3BsaXQubGV2ZWwpIHsKLQkJCQkgICAgY2FzZSAxOgorCQkJCXN3aXRjaCAodGhpc19sZWFmLmVheC5zcGxpdC5sZXZlbCkgeworCQkJCWNhc2UgMToKIAkJCQkJaWYgKHRoaXNfbGVhZi5lYXguc3BsaXQudHlwZSA9PQogCQkJCQkJCUNBQ0hFX1RZUEVfREFUQSkKIAkJCQkJCW5ld19sMWQgPSB0aGlzX2xlYWYuc2l6ZS8xMDI0OwpAQCAtMzg2LDE5ICszODcsMjAgQEAKIAkJCQkJCQlDQUNIRV9UWVBFX0lOU1QpCiAJCQkJCQluZXdfbDFpID0gdGhpc19sZWFmLnNpemUvMTAyNDsKIAkJCQkJYnJlYWs7Ci0JCQkJICAgIGNhc2UgMjoKKwkJCQljYXNlIDI6CiAJCQkJCW5ld19sMiA9IHRoaXNfbGVhZi5zaXplLzEwMjQ7CiAJCQkJCW51bV90aHJlYWRzX3NoYXJpbmcgPSAxICsgdGhpc19sZWFmLmVheC5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nOwogCQkJCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIobnVtX3RocmVhZHNfc2hhcmluZyk7CiAJCQkJCWwyX2lkID0gYy0+YXBpY2lkID4+IGluZGV4X21zYjsKIAkJCQkJYnJlYWs7Ci0JCQkJICAgIGNhc2UgMzoKKwkJCQljYXNlIDM6CiAJCQkJCW5ld19sMyA9IHRoaXNfbGVhZi5zaXplLzEwMjQ7CiAJCQkJCW51bV90aHJlYWRzX3NoYXJpbmcgPSAxICsgdGhpc19sZWFmLmVheC5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nOwotCQkJCQlpbmRleF9tc2IgPSBnZXRfY291bnRfb3JkZXIobnVtX3RocmVhZHNfc2hhcmluZyk7CisJCQkJCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcigKKwkJCQkJCQludW1fdGhyZWFkc19zaGFyaW5nKTsKIAkJCQkJbDNfaWQgPSBjLT5hcGljaWQgPj4gaW5kZXhfbXNiOwogCQkJCQlicmVhazsKLQkJCQkgICAgZGVmYXVsdDoKKwkJCQlkZWZhdWx0OgogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC00MjEsMjIgKzQyMywyMSBAQAogCQkvKiBOdW1iZXIgb2YgdGltZXMgdG8gaXRlcmF0ZSAqLwogCQluID0gY3B1aWRfZWF4KDIpICYgMHhGRjsKIAotCQlmb3IgKCBpID0gMCA7IGkgPCBuIDsgaSsrICkgeworCQlmb3IgKGkgPSAwIDsgaSA8IG4gOyBpKyspIHsKIAkJCWNwdWlkKDIsICZyZWdzWzBdLCAmcmVnc1sxXSwgJnJlZ3NbMl0sICZyZWdzWzNdKTsKIAogCQkJLyogSWYgYml0IDMxIGlzIHNldCwgdGhpcyBpcyBhbiB1bmtub3duIGZvcm1hdCAqLwotCQkJZm9yICggaiA9IDAgOyBqIDwgMyA7IGorKyApIHsKLQkJCQlpZiAocmVnc1tqXSAmICgxIDw8IDMxKSkgcmVnc1tqXSA9IDA7Ci0JCQl9CisJCQlmb3IgKGogPSAwIDsgaiA8IDMgOyBqKyspCisJCQkJaWYgKHJlZ3Nbal0gJiAoMSA8PCAzMSkpCisJCQkJCXJlZ3Nbal0gPSAwOwogCiAJCQkvKiBCeXRlIDAgaXMgbGV2ZWwgY291bnQsIG5vdCBhIGRlc2NyaXB0b3IgKi8KLQkJCWZvciAoIGogPSAxIDsgaiA8IDE2IDsgaisrICkgeworCQkJZm9yIChqID0gMSA7IGogPCAxNiA7IGorKykgewogCQkJCXVuc2lnbmVkIGNoYXIgZGVzID0gZHBbal07CiAJCQkJdW5zaWduZWQgY2hhciBrID0gMDsKIAogCQkJCS8qIGxvb2sgdXAgdGhpcyBkZXNjcmlwdG9yIGluIHRoZSB0YWJsZSAqLwotCQkJCXdoaWxlIChjYWNoZV90YWJsZVtrXS5kZXNjcmlwdG9yICE9IDApCi0JCQkJeworCQkJCXdoaWxlIChjYWNoZV90YWJsZVtrXS5kZXNjcmlwdG9yICE9IDApIHsKIAkJCQkJaWYgKGNhY2hlX3RhYmxlW2tdLmRlc2NyaXB0b3IgPT0gZGVzKSB7CiAJCQkJCQlpZiAob25seV90cmFjZSAmJiBjYWNoZV90YWJsZVtrXS5jYWNoZV90eXBlICE9IExWTF9UUkFDRSkKIAkJCQkJCQlicmVhazsKQEAgLTQ4OCwxNCArNDg5LDE0IEBACiAJfQogCiAJaWYgKHRyYWNlKQotCQlwcmludGsgKEtFUk5fSU5GTyAiQ1BVOiBUcmFjZSBjYWNoZTogJWRLIHVvcHMiLCB0cmFjZSk7Ci0JZWxzZSBpZiAoIGwxaSApCi0JCXByaW50ayAoS0VSTl9JTkZPICJDUFU6IEwxIEkgY2FjaGU6ICVkSyIsIGwxaSk7CisJCXByaW50ayhLRVJOX0lORk8gIkNQVTogVHJhY2UgY2FjaGU6ICVkSyB1b3BzIiwgdHJhY2UpOworCWVsc2UgaWYgKGwxaSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVOiBMMSBJIGNhY2hlOiAlZEsiLCBsMWkpOwogCiAJaWYgKGwxZCkKLQkJcHJpbnRrKCIsIEwxIEQgY2FjaGU6ICVkS1xuIiwgbDFkKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiLCBMMSBEIGNhY2hlOiAlZEtcbiIsIGwxZCk7CiAJZWxzZQotCQlwcmludGsoIlxuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAKIAlpZiAobDIpCiAJCXByaW50ayhLRVJOX0lORk8gIkNQVTogTDIgY2FjaGU6ICVkS1xuIiwgbDIpOwpAQCAtNTIyLDYgKzUyMywxOCBAQAogCWludCBpbmRleF9tc2IsIGk7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAKKwlpZiAoKGluZGV4ID09IDMpICYmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSkgeworCQlzdHJ1Y3QgY3B1aW5mb194ODYgKmQ7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQkJaWYgKCFwZXJfY3B1KGNwdWlkNF9pbmZvLCBpKSkKKwkJCQljb250aW51ZTsKKwkJCWQgPSAmY3B1X2RhdGEoaSk7CisJCQl0aGlzX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoaSwgaW5kZXgpOworCQkJY3B1bWFza19jb3B5KHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCksCisJCQkJICAgICBkLT5sbGNfc2hhcmVkX21hcCk7CisJCX0KKwkJcmV0dXJuOworCX0KIAl0aGlzX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoY3B1LCBpbmRleCk7CiAJbnVtX3RocmVhZHNfc2hhcmluZyA9IDEgKyB0aGlzX2xlYWYtPmVheC5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nOwogCkBAIC01NTgsOCArNTcxLDEzIEBACiAJfQogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBjYWNoZV9zaGFyZWRfY3B1X21hcF9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgaW5kZXgpIHt9Ci1zdGF0aWMgdm9pZCBfX2NwdWluaXQgY2FjaGVfcmVtb3ZlX3NoYXJlZF9jcHVfbWFwKHVuc2lnbmVkIGludCBjcHUsIGludCBpbmRleCkge30KK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjYWNoZV9zaGFyZWRfY3B1X21hcF9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgaW5kZXgpCit7Cit9CisKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjYWNoZV9yZW1vdmVfc2hhcmVkX2NwdV9tYXAodW5zaWduZWQgaW50IGNwdSwgaW50IGluZGV4KQoreworfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBmcmVlX2NhY2hlX2F0dHJpYnV0ZXModW5zaWduZWQgaW50IGNwdSkKQEAgLTY0NSw3ICs2NjMsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd18jI2ZpbGVfbmFtZQkJCQkJCVwKIAkJCShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWx1XG4iLCAodW5zaWduZWQgbG9uZyl0aGlzX2xlYWYtPm9iamVjdCArIHZhbCk7IFwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsICh1bnNpZ25lZCBsb25nKXRoaXNfbGVhZi0+b2JqZWN0ICsgdmFsKTsgXAogfQogCiBzaG93X29uZV9wbHVzKGxldmVsLCBlYXguc3BsaXQubGV2ZWwsIDApOwpAQCAtNjU2LDcgKzY3NCw3IEBACiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2l6ZShzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJWx1S1xuIiwgdGhpc19sZWFmLT5zaXplIC8gMTAyNCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1S1xuIiwgdGhpc19sZWFmLT5zaXplIC8gMTAyNCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2hhcmVkX2NwdV9tYXBfZnVuYyhzdHJ1Y3QgX2NwdWlkNF9pbmZvICp0aGlzX2xlYWYsCkBAIC02NjksNyArNjg3LDcgQEAKIAkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2s7CiAKIAkJbWFzayA9IHRvX2NwdW1hc2sodGhpc19sZWFmLT5zaGFyZWRfY3B1X21hcCk7Ci0JCW4gPSB0eXBlPworCQluID0gdHlwZSA/CiAJCQljcHVsaXN0X3NjbnByaW50ZihidWYsIGxlbi0yLCBtYXNrKSA6CiAJCQljcHVtYXNrX3NjbnByaW50ZihidWYsIGxlbi0yLCBtYXNrKTsKIAkJYnVmW24rK10gPSAnXG4nOwpAQCAtODAwLDcgKzgxOCw3IEBACiBzdGF0aWMgc3RydWN0IF9jYWNoZV9hdHRyIGNhY2hlX2Rpc2FibGVfMSA9IF9fQVRUUihjYWNoZV9kaXNhYmxlXzEsIDA2NDQsCiAJCXNob3dfY2FjaGVfZGlzYWJsZV8xLCBzdG9yZV9jYWNoZV9kaXNhYmxlXzEpOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRlZmF1bHRfYXR0cnNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJnR5cGUuYXR0ciwKIAkmbGV2ZWwuYXR0ciwKIAkmY29oZXJlbmN5X2xpbmVfc2l6ZS5hdHRyLApAQCAtODE1LDcgKzgzMyw3IEBACiAJTlVMTAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvdyhzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyLCBjaGFyICogYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBfY2FjaGVfYXR0ciAqZmF0dHIgPSB0b19hdHRyKGF0dHIpOwogCXN0cnVjdCBfaW5kZXhfa29iamVjdCAqdGhpc19sZWFmID0gdG9fb2JqZWN0KGtvYmopOwpAQCAtODI4LDggKzg0Niw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3RvcmUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwKLQkJICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgX2NhY2hlX2F0dHIgKmZhdHRyID0gdG9fYXR0cihhdHRyKTsKIAlzdHJ1Y3QgX2luZGV4X2tvYmplY3QgKnRoaXNfbGVhZiA9IHRvX29iamVjdChrb2JqKTsKQEAgLTg4Myw3ICs5MDEsNyBAQAogCQlnb3RvIGVycl9vdXQ7CiAKIAlwZXJfY3B1KGluZGV4X2tvYmplY3QsIGNwdSkgPSBremFsbG9jKAotCSAgICBzaXplb2Yoc3RydWN0IF9pbmRleF9rb2JqZWN0ICkgKiBudW1fY2FjaGVfbGVhdmVzLCBHRlBfS0VSTkVMKTsKKwkgICAgc2l6ZW9mKHN0cnVjdCBfaW5kZXhfa29iamVjdCkgKiBudW1fY2FjaGVfbGVhdmVzLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkocGVyX2NwdShpbmRleF9rb2JqZWN0LCBjcHUpID09IE5VTEwpKQogCQlnb3RvIGVycl9vdXQ7CiAKQEAgLTkxNyw3ICs5MzUsNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBudW1fY2FjaGVfbGVhdmVzOyBpKyspIHsKLQkJdGhpc19vYmplY3QgPSBJTkRFWF9LT0JKRUNUX1BUUihjcHUsaSk7CisJCXRoaXNfb2JqZWN0ID0gSU5ERVhfS09CSkVDVF9QVFIoY3B1LCBpKTsKIAkJdGhpc19vYmplY3QtPmNwdSA9IGNwdTsKIAkJdGhpc19vYmplY3QtPmluZGV4ID0gaTsKIAkJcmV0dmFsID0ga29iamVjdF9pbml0X2FuZF9hZGQoJih0aGlzX29iamVjdC0+a29iaiksCkBAIC05MjUsOSArOTQzLDggQEAKIAkJCQkJICAgICAgcGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpLAogCQkJCQkgICAgICAiaW5kZXglMWx1IiwgaSk7CiAJCWlmICh1bmxpa2VseShyZXR2YWwpKSB7Ci0JCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCQkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsaiktPmtvYmopKTsKLQkJCX0KKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsIGopLT5rb2JqKSk7CiAJCQlrb2JqZWN0X3B1dChwZXJfY3B1KGNhY2hlX2tvYmplY3QsIGNwdSkpOwogCQkJY3B1aWQ0X2NhY2hlX3N5c2ZzX2V4aXQoY3B1KTsKIAkJCXJldHVybiByZXR2YWw7CkBAIC05NTIsNyArOTY5LDcgQEAKIAljcHVtYXNrX2NsZWFyX2NwdShjcHUsIHRvX2NwdW1hc2soY2FjaGVfZGV2X21hcCkpOwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9jYWNoZV9sZWF2ZXM7IGkrKykKLQkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsaSktPmtvYmopKTsKKwkJa29iamVjdF9wdXQoJihJTkRFWF9LT0JKRUNUX1BUUihjcHUsIGkpLT5rb2JqKSk7CiAJa29iamVjdF9wdXQocGVyX2NwdShjYWNoZV9rb2JqZWN0LCBjcHUpKTsKIAljcHVpZDRfY2FjaGVfc3lzZnNfZXhpdChjcHUpOwogfQpAQCAtOTc3LDggKzk5NCw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGNhY2hlaW5mb19jcHVfbm90aWZpZXIgPQoteworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGNhY2hlaW5mb19jcHVfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBjYWNoZWluZm9fY3B1X2NhbGxiYWNrLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCAwMTIxMzA0Li45YmZlOWQyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtMTgzLDYgKzE4MywxMSBAQAogCXNldF9iaXQoMCwgJm1jZV9uZWVkX25vdGlmeSk7CiB9CiAKK3ZvaWQgX193ZWFrIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKK3sKKwlyZXR1cm47Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X21jZShzdHJ1Y3QgbWNlICptKQogewogCXByaW50ayhLRVJOX0VNRVJHCkBAIC0yMDUsNiArMjEwLDggQEAKIAlwcmludGsoS0VSTl9FTUVSRyAiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKIAkJCW0tPmNwdXZlbmRvciwgbS0+Y3B1aWQsIG0tPnRpbWUsIG0tPnNvY2tldGlkLAogCQkJbS0+YXBpY2lkKTsKKworCWRlY29kZV9tY2UobSk7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X21jZV9oZWFkKHZvaWQpCkBAIC0yMTUsNyArMjIyLDEwIEBACiBzdGF0aWMgdm9pZCBwcmludF9tY2VfdGFpbCh2b2lkKQogewogCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iCi0JICAgICAgICJSdW4gdGhyb3VnaCBtY2Vsb2cgLS1hc2NpaSB0byBkZWNvZGUgYW5kIGNvbnRhY3QgeW91ciBoYXJkd2FyZSB2ZW5kb3JcbiIpOworI2lmICghZGVmaW5lZChDT05GSUdfRURBQykgfHwgIWRlZmluZWQoQ09ORklHX0NQVV9TVVBfQU1EKSkKKwkgICAgICAgIlJ1biB0aHJvdWdoIG1jZWxvZyAtLWFzY2lpIHRvIGRlY29kZSBhbmQgY29udGFjdCB5b3VyIGhhcmR3YXJlIHZlbmRvclxuIgorI2VuZGlmCisJICAgICAgICk7CiB9CiAKICNkZWZpbmUgUEFOSUNfVElNRU9VVCA1IC8qIDUgc2Vjb25kcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCmluZGV4IGRkYWUyMTYuLjFmZWNiYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKQEAgLTQ4OSwxMiArNDg5LDE0IEBACiAJaW50IGksIGVyciA9IDA7CiAJc3RydWN0IHRocmVzaG9sZF9iYW5rICpiID0gTlVMTDsKIAljaGFyIG5hbWVbMzJdOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOworCiAKIAlzcHJpbnRmKG5hbWUsICJ0aHJlc2hvbGRfYmFuayVpIiwgYmFuayk7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKGNwdV9kYXRhKGNwdSkuY3B1X2NvcmVfaWQgJiYgc2hhcmVkX2JhbmtbYmFua10pIHsJLyogc3ltbGluayAqLwotCQlpID0gY3B1bWFza19maXJzdChjcHVfY29yZV9tYXNrKGNwdSkpOworCQlpID0gY3B1bWFza19maXJzdChjLT5sbGNfc2hhcmVkX21hcCk7CiAKIAkJLyogZmlyc3QgY29yZSBub3QgdXAgeWV0ICovCiAJCWlmIChjcHVfZGF0YShpKS5jcHVfY29yZV9pZCkKQEAgLTUxNCw3ICs1MTYsNyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJY3B1bWFza19jb3B5KGItPmNwdXMsIGNwdV9jb3JlX21hc2soY3B1KSk7CisJCWNwdW1hc2tfY29weShiLT5jcHVzLCBjLT5sbGNfc2hhcmVkX21hcCk7CiAJCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKIAogCQlnb3RvIG91dDsKQEAgLTUzOSw3ICs1NDEsNyBAQAogI2lmbmRlZiBDT05GSUdfU01QCiAJY3B1bWFza19zZXRhbGwoYi0+Y3B1cyk7CiAjZWxzZQotCWNwdW1hc2tfY29weShiLT5jcHVzLCBjcHVfY29yZV9tYXNrKGNwdSkpOworCWNwdW1hc2tfY29weShiLT5jcHVzLCBjLT5sbGNfc2hhcmVkX21hcCk7CiAjZW5kaWYKIAogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9hbWQuYwppbmRleCBlZTIzMzFiLi4zM2FmMTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2FtZC5jCkBAIC03LDE1ICs3LDE1IEBACiAKIHN0YXRpYyB2b2lkCiBhbWRfZ2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyAqYmFzZSwKLQkgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUsIG10cnJfdHlwZSAqIHR5cGUpCisJICAgICB1bnNpZ25lZCBsb25nICpzaXplLCBtdHJyX3R5cGUgKnR5cGUpCiB7CiAJdW5zaWduZWQgbG9uZyBsb3csIGhpZ2g7CiAKIAlyZG1zcihNU1JfSzZfVVdDQ1IsIGxvdywgaGlnaCk7Ci0JLyogIFVwcGVyIGR3b3JkIGlzIHJlZ2lvbiAxLCBsb3dlciBpcyByZWdpb24gMCAgKi8KKwkvKiBVcHBlciBkd29yZCBpcyByZWdpb24gMSwgbG93ZXIgaXMgcmVnaW9uIDAgKi8KIAlpZiAocmVnID09IDEpCiAJCWxvdyA9IGhpZ2g7Ci0JLyogIFRoZSBiYXNlIG1hc2tzIG9mZiBvbiB0aGUgcmlnaHQgYWxpZ25tZW50ICAqLworCS8qIFRoZSBiYXNlIG1hc2tzIG9mZiBvbiB0aGUgcmlnaHQgYWxpZ25tZW50ICovCiAJKmJhc2UgPSAobG93ICYgMHhGRkZFMDAwMCkgPj4gUEFHRV9TSElGVDsKIAkqdHlwZSA9IDA7CiAJaWYgKGxvdyAmIDEpCkBAIC0yNyw3NCArMjcsODEgQEAKIAkJcmV0dXJuOwogCX0KIAkvKgotCSAqICBUaGlzIG5lZWRzIGEgbGl0dGxlIGV4cGxhaW5pbmcuIFRoZSBzaXplIGlzIHN0b3JlZCBhcyBhbgotCSAqICBpbnZlcnRlZCBtYXNrIG9mIGJpdHMgb2YgMTI4SyBncmFudWxhcml0eSAxNSBiaXRzIGxvbmcgb2Zmc2V0Ci0JICogIDIgYml0cworCSAqIFRoaXMgbmVlZHMgYSBsaXR0bGUgZXhwbGFpbmluZy4gVGhlIHNpemUgaXMgc3RvcmVkIGFzIGFuCisJICogaW52ZXJ0ZWQgbWFzayBvZiBiaXRzIG9mIDEyOEsgZ3JhbnVsYXJpdHkgMTUgYml0cyBsb25nIG9mZnNldAorCSAqIDIgYml0cy4KIAkgKgotCSAqICBTbyB0byBnZXQgYSBzaXplIHdlIGRvIGludmVydCB0aGUgbWFzayBhbmQgYWRkIDEgdG8gdGhlIGxvd2VzdAotCSAqICBtYXNrIGJpdCAoNCBhcyBpdHMgMiBiaXRzIGluKS4gVGhpcyBnaXZlcyB1cyBhIHNpemUgd2UgdGhlbiBzaGlmdAotCSAqICB0byB0dXJuIGludG8gMTI4SyBibG9ja3MKKwkgKiBTbyB0byBnZXQgYSBzaXplIHdlIGRvIGludmVydCB0aGUgbWFzayBhbmQgYWRkIDEgdG8gdGhlIGxvd2VzdAorCSAqIG1hc2sgYml0ICg0IGFzIGl0cyAyIGJpdHMgaW4pLiBUaGlzIGdpdmVzIHVzIGEgc2l6ZSB3ZSB0aGVuIHNoaWZ0CisJICogdG8gdHVybiBpbnRvIDEyOEsgYmxvY2tzLgogCSAqCi0JICogIGVnICAgICAgICAgICAgICAxMTEgMTExMSAxMTExIDExMDAgICAgICBpcyA1MTJLCisJICogZWcgICAgICAgICAgICAgIDExMSAxMTExIDExMTEgMTEwMCAgICAgIGlzIDUxMksKIAkgKgotCSAqICBpbnZlcnQgICAgICAgICAgMDAwIDAwMDAgMDAwMCAwMDExCi0JICogICsxICAgICAgICAgICAgICAwMDAgMDAwMCAwMDAwIDAxMDAKLQkgKiAgKjEyOEsgICAuLi4KKwkgKiBpbnZlcnQgICAgICAgICAgMDAwIDAwMDAgMDAwMCAwMDExCisJICogKzEgICAgICAgICAgICAgIDAwMCAwMDAwIDAwMDAgMDEwMAorCSAqICoxMjhLICAgLi4uCiAJICovCiAJbG93ID0gKH5sb3cpICYgMHgxRkZGQzsKIAkqc2l6ZSA9IChsb3cgKyA0KSA8PCAoMTUgLSBQQUdFX1NISUZUKTsKLQlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGFtZF9zZXRfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCi0JCQkgdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSkKLS8qICBbU1VNTUFSWV0gU2V0IHZhcmlhYmxlIE1UUlIgcmVnaXN0ZXIgb24gdGhlIGxvY2FsIENQVS4KLSAgICA8cmVnPiBUaGUgcmVnaXN0ZXIgdG8gc2V0LgotICAgIDxiYXNlPiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb24uCi0gICAgPHNpemU+IFRoZSBzaXplIG9mIHRoZSByZWdpb24uIElmIHRoaXMgaXMgMCB0aGUgcmVnaW9uIGlzIGRpc2FibGVkLgotICAgIDx0eXBlPiBUaGUgdHlwZSBvZiB0aGUgcmVnaW9uLgotICAgIFtSRVRVUk5TXSBOb3RoaW5nLgotKi8KKy8qKgorICogYW1kX3NldF9tdHJyIC0gU2V0IHZhcmlhYmxlIE1UUlIgcmVnaXN0ZXIgb24gdGhlIGxvY2FsIENQVS4KKyAqCisgKiBAcmVnIFRoZSByZWdpc3RlciB0byBzZXQuCisgKiBAYmFzZSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb24uCisgKiBAc2l6ZSBUaGUgc2l6ZSBvZiB0aGUgcmVnaW9uLiBJZiB0aGlzIGlzIDAgdGhlIHJlZ2lvbiBpcyBkaXNhYmxlZC4KKyAqIEB0eXBlIFRoZSB0eXBlIG9mIHRoZSByZWdpb24uCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZAorYW1kX3NldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSkKIHsKIAl1MzIgcmVnc1syXTsKIAogCS8qCi0JICogIExvdyBpcyBNVFJSMCAsIEhpZ2ggTVRSUiAxCisJICogTG93IGlzIE1UUlIwLCBIaWdoIE1UUlIgMQogCSAqLwogCXJkbXNyKE1TUl9LNl9VV0NDUiwgcmVnc1swXSwgcmVnc1sxXSk7CiAJLyoKLQkgKiAgQmxhbmsgdG8gZGlzYWJsZQorCSAqIEJsYW5rIHRvIGRpc2FibGUKIAkgKi8KLQlpZiAoc2l6ZSA9PSAwKQorCWlmIChzaXplID09IDApIHsKIAkJcmVnc1tyZWddID0gMDsKLQllbHNlCi0JCS8qIFNldCB0aGUgcmVnaXN0ZXIgdG8gdGhlIGJhc2UsIHRoZSB0eXBlIChvZmYgYnkgb25lKSBhbmQgYW4KLQkJICAgaW52ZXJ0ZWQgYml0bWFzayBvZiB0aGUgc2l6ZSBUaGUgc2l6ZSBpcyB0aGUgb25seSBvZGQKLQkJICAgYml0LiBXZSBhcmUgZmVkIHNheSA1MTJLIFdlIGludmVydCB0aGlzIGFuZCB3ZSBnZXQgMTExIDExMTEKLQkJICAgMTExMSAxMDExIGJ1dCBpZiB5b3Ugc3VidHJhY3Qgb25lIGFuZCBpbnZlcnQgeW91IGdldCB0aGUgICAKLQkJICAgZGVzaXJlZCAxMTEgMTExMSAxMTExIDExMDAgbWFzawotCi0JCSAgIEJ1dCB+KHggLSAxKSA9PSB+eCArIDEgPT0gLXguIFR3bydzIGNvbXBsZW1lbnQgcm9ja3MhICAqLworCX0gZWxzZSB7CisJCS8qCisJCSAqIFNldCB0aGUgcmVnaXN0ZXIgdG8gdGhlIGJhc2UsIHRoZSB0eXBlIChvZmYgYnkgb25lKSBhbmQgYW4KKwkJICogaW52ZXJ0ZWQgYml0bWFzayBvZiB0aGUgc2l6ZSBUaGUgc2l6ZSBpcyB0aGUgb25seSBvZGQKKwkJICogYml0LiBXZSBhcmUgZmVkIHNheSA1MTJLIFdlIGludmVydCB0aGlzIGFuZCB3ZSBnZXQgMTExIDExMTEKKwkJICogMTExMSAxMDExIGJ1dCBpZiB5b3Ugc3VidHJhY3Qgb25lIGFuZCBpbnZlcnQgeW91IGdldCB0aGUKKwkJICogZGVzaXJlZCAxMTEgMTExMSAxMTExIDExMDAgbWFzaworCQkgKgorCQkgKiAgQnV0IH4oeCAtIDEpID09IH54ICsgMSA9PSAteC4gVHdvJ3MgY29tcGxlbWVudCByb2NrcyEKKwkJICovCiAJCXJlZ3NbcmVnXSA9ICgtc2l6ZSA+PiAoMTUgLSBQQUdFX1NISUZUKSAmIDB4MDAwMUZGRkMpCiAJCSAgICB8IChiYXNlIDw8IFBBR0VfU0hJRlQpIHwgKHR5cGUgKyAxKTsKKwl9CiAKIAkvKgotCSAqICBUaGUgd3JpdGViYWNrIHJ1bGUgaXMgcXVpdGUgc3BlY2lmaWMuIFNlZSB0aGUgbWFudWFsLiBJdHMKLQkgKiAgZGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzLCB3cml0ZSBiYWNrIHRoZSBjYWNoZSwgc2V0IHRoZSBtdHJyCisJICogVGhlIHdyaXRlYmFjayBydWxlIGlzIHF1aXRlIHNwZWNpZmljLiBTZWUgdGhlIG1hbnVhbC4gSXRzCisJICogZGlzYWJsZSBsb2NhbCBpbnRlcnJ1cHRzLCB3cml0ZSBiYWNrIHRoZSBjYWNoZSwgc2V0IHRoZSBtdHJyCiAJICovCiAJd2JpbnZkKCk7CiAJd3Jtc3IoTVNSX0s2X1VXQ0NSLCByZWdzWzBdLCByZWdzWzFdKTsKIH0KIAotc3RhdGljIGludCBhbWRfdmFsaWRhdGVfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCB0eXBlKQorc3RhdGljIGludAorYW1kX3ZhbGlkYXRlX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQkvKiBBcHBseSB0aGUgSzYgYmxvY2sgYWxpZ25tZW50IGFuZCBzaXplIHJ1bGVzCi0JICAgSW4gb3JkZXIKLQkgICBvIFVuY2FjaGVkIG9yIGdhdGhlcmluZyBvbmx5Ci0JICAgbyAxMjhLIG9yIGJpZ2dlciBibG9jawotCSAgIG8gUG93ZXIgb2YgMiBibG9jawotCSAgIG8gYmFzZSBzdWl0YWJseSBhbGlnbmVkIHRvIHRoZSBwb3dlcgotCSovCisJLyoKKwkgKiBBcHBseSB0aGUgSzYgYmxvY2sgYWxpZ25tZW50IGFuZCBzaXplIHJ1bGVzCisJICogSW4gb3JkZXIKKwkgKiBvIFVuY2FjaGVkIG9yIGdhdGhlcmluZyBvbmx5CisJICogbyAxMjhLIG9yIGJpZ2dlciBibG9jaworCSAqIG8gUG93ZXIgb2YgMiBibG9jaworCSAqIG8gYmFzZSBzdWl0YWJseSBhbGlnbmVkIHRvIHRoZSBwb3dlcgorCSAqLwogCWlmICh0eXBlID4gTVRSUl9UWVBFX1dSQ09NQiB8fCBzaXplIDwgKDEgPDwgKDE3IC0gUEFHRV9TSElGVCkpCiAJICAgIHx8IChzaXplICYgfihzaXplIC0gMSkpIC0gc2l6ZSB8fCAoYmFzZSAmIChzaXplIC0gMSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNSw1ICsxMjIsMyBAQAogCXNldF9tdHJyX29wcygmYW1kX210cnJfb3BzKTsKIAlyZXR1cm4gMDsKIH0KLQotLy9hcmNoX2luaXRjYWxsKGFtZF9tdHJyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jZW50YXVyLmMKaW5kZXggY2I5YWEzYS4uZGU4OWYxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NlbnRhdXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2VudGF1ci5jCkBAIC0xLDcgKzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorCiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CisKICNpbmNsdWRlICJtdHJyLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgewpAQCAtMTIsMjUgKzE0LDI1IEBACiBzdGF0aWMgdTggY2VudGF1cl9tY3JfcmVzZXJ2ZWQ7CiBzdGF0aWMgdTggY2VudGF1cl9tY3JfdHlwZTsJLyogMCBmb3Igd2luY2hpcCwgMSBmb3Igd2luY2hpcDIgKi8KIAotLyoKLSAqCVJlcG9ydCBib290IHRpbWUgTUNSIHNldHVwcyAKKy8qKgorICogY2VudGF1cl9nZXRfZnJlZV9yZWdpb24gLSBHZXQgYSBmcmVlIE1UUlIuCisgKgorICogQGJhc2U6IFRoZSBzdGFydGluZyAoYmFzZSkgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLgorICogQHNpemU6IFRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIHJlZ2lvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgaW5kZXggb2YgdGhlIHJlZ2lvbiBvbiBzdWNjZXNzLCBlbHNlIC0xIG9uIGVycm9yLgogICovCi0KIHN0YXRpYyBpbnQKIGNlbnRhdXJfZ2V0X2ZyZWVfcmVnaW9uKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgcmVwbGFjZV9yZWcpCi0vKiAgW1NVTU1BUlldIEdldCBhIGZyZWUgTVRSUi4KLSAgICA8YmFzZT4gVGhlIHN0YXJ0aW5nIChiYXNlKSBhZGRyZXNzIG9mIHRoZSByZWdpb24uCi0gICAgPHNpemU+IFRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIHJlZ2lvbi4KLSAgICBbUkVUVVJOU10gVGhlIGluZGV4IG9mIHRoZSByZWdpb24gb24gc3VjY2VzcywgZWxzZSAtMSBvbiBlcnJvci4KLSovCiB7Ci0JaW50IGksIG1heDsKLQltdHJyX3R5cGUgbHR5cGU7CiAJdW5zaWduZWQgbG9uZyBsYmFzZSwgbHNpemU7CisJbXRycl90eXBlIGx0eXBlOworCWludCBpLCBtYXg7CiAKIAltYXggPSBudW1fdmFyX3JhbmdlczsKIAlpZiAocmVwbGFjZV9yZWcgPj0gMCAmJiByZXBsYWNlX3JlZyA8IG1heCkKIAkJcmV0dXJuIHJlcGxhY2VfcmVnOworCiAJZm9yIChpID0gMDsgaSA8IG1heDsgKytpKSB7CiAJCWlmIChjZW50YXVyX21jcl9yZXNlcnZlZCAmICgxIDw8IGkpKQogCQkJY29udGludWU7CkBAIC0zOCwxMSArNDAsMTQgQEAKIAkJaWYgKGxzaXplID09IDApCiAJCQlyZXR1cm4gaTsKIAl9CisKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIAotdm9pZAotbXRycl9jZW50YXVyX3JlcG9ydF9tY3IoaW50IG1jciwgdTMyIGxvLCB1MzIgaGkpCisvKgorICogUmVwb3J0IGJvb3QgdGltZSBNQ1Igc2V0dXBzCisgKi8KK3ZvaWQgbXRycl9jZW50YXVyX3JlcG9ydF9tY3IoaW50IG1jciwgdTMyIGxvLCB1MzIgaGkpCiB7CiAJY2VudGF1cl9tY3JbbWNyXS5sb3cgPSBsbzsKIAljZW50YXVyX21jclttY3JdLmhpZ2ggPSBoaTsKQEAgLTU0LDMzICs1OSwzNSBAQAogewogCSpiYXNlID0gY2VudGF1cl9tY3JbcmVnXS5oaWdoID4+IFBBR0VfU0hJRlQ7CiAJKnNpemUgPSAtKGNlbnRhdXJfbWNyW3JlZ10ubG93ICYgMHhmZmZmZjAwMCkgPj4gUEFHRV9TSElGVDsKLQkqdHlwZSA9IE1UUlJfVFlQRV9XUkNPTUI7CS8qICBJZiBpdCBpcyB0aGVyZSwgaXQgaXMgd3JpdGUtY29tYmluaW5nICAqLworCSp0eXBlID0gTVRSUl9UWVBFX1dSQ09NQjsJCS8qIHdyaXRlLWNvbWJpbmluZyAgKi8KKwogCWlmIChjZW50YXVyX21jcl90eXBlID09IDEgJiYgKChjZW50YXVyX21jcltyZWddLmxvdyAmIDMxKSAmIDIpKQogCQkqdHlwZSA9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFOwogCWlmIChjZW50YXVyX21jcl90eXBlID09IDEgJiYgKGNlbnRhdXJfbWNyW3JlZ10ubG93ICYgMzEpID09IDI1KQogCQkqdHlwZSA9IE1UUlJfVFlQRV9XUkJBQ0s7CiAJaWYgKGNlbnRhdXJfbWNyX3R5cGUgPT0gMCAmJiAoY2VudGF1cl9tY3JbcmVnXS5sb3cgJiAzMSkgPT0gMzEpCiAJCSp0eXBlID0gTVRSUl9UWVBFX1dSQkFDSzsKLQogfQogCi1zdGF0aWMgdm9pZCBjZW50YXVyX3NldF9tY3IodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpCitzdGF0aWMgdm9pZAorY2VudGF1cl9zZXRfbWNyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKKwkJdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvdywgaGlnaDsKIAogCWlmIChzaXplID09IDApIHsKLQkJLyogIERpc2FibGUgICovCisJCS8qIERpc2FibGUgKi8KIAkJaGlnaCA9IGxvdyA9IDA7CiAJfSBlbHNlIHsKIAkJaGlnaCA9IGJhc2UgPDwgUEFHRV9TSElGVDsKLQkJaWYgKGNlbnRhdXJfbWNyX3R5cGUgPT0gMCkKLQkJCWxvdyA9IC1zaXplIDw8IFBBR0VfU0hJRlQgfCAweDFmOwkvKiBvbmx5IHN1cHBvcnQgd3JpdGUtY29tYmluaW5nLi4uICovCi0JCWVsc2UgeworCQlpZiAoY2VudGF1cl9tY3JfdHlwZSA9PSAwKSB7CisJCQkvKiBPbmx5IHN1cHBvcnQgd3JpdGUtY29tYmluaW5nLi4uICovCisJCQlsb3cgPSAtc2l6ZSA8PCBQQUdFX1NISUZUIHwgMHgxZjsKKwkJfSBlbHNlIHsKIAkJCWlmICh0eXBlID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKQotCQkJCWxvdyA9IC1zaXplIDw8IFBBR0VfU0hJRlQgfCAweDAyOwkvKiBOQyAqLworCQkJCWxvdyA9IC1zaXplIDw8IFBBR0VfU0hJRlQgfCAweDAyOyAvKiBOQyAqLwogCQkJZWxzZQotCQkJCWxvdyA9IC1zaXplIDw8IFBBR0VfU0hJRlQgfCAweDA5OwkvKiBXV08sV0MgKi8KKwkJCQlsb3cgPSAtc2l6ZSA8PCBQQUdFX1NISUZUIHwgMHgwOTsgLyogV1dPLCBXQyAqLwogCQl9CiAJfQogCWNlbnRhdXJfbWNyW3JlZ10uaGlnaCA9IGhpZ2g7CkBAIC04OCwxMTggKzk1LDE2IEBACiAJd3Jtc3IoTVNSX0lEVF9NQ1IwICsgcmVnLCBsb3csIGhpZ2gpOwogfQogCi0jaWYgMAotLyoKLSAqCUluaXRpYWxpc2UgdGhlIGxhdGVyIChzYW5lcikgV2luY2hpcCBNQ1IgdmFyaWFudC4gSW4gdGhpcyB2ZXJzaW9uCi0gKgl0aGUgQklPUyBjYW4gcGFzcyB1cyB0aGUgcmVnaXN0ZXJzIGl0IGhhcyB1c2VkIChidXQgbm90IHRoZWlyIHZhbHVlcykKLSAqCWFuZCB0aGUgY29udHJvbCByZWdpc3RlciBpcyByZWFkL3dyaXRlCi0gKi8KLQotc3RhdGljIHZvaWQgX19pbml0Ci1jZW50YXVyX21jcjFfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGk7Ci0JdTMyIGxvLCBoaTsKLQotCS8qIFVuZm9ydHVuYXRlbHksIE1DUidzIGFyZSByZWFkLW9ubHksIHNvIHRoZXJlIGlzIG5vIHdheSB0bwotCSAqIGZpbmQgb3V0IHdoYXQgdGhlIGJpb3MgbWlnaHQgaGF2ZSBkb25lLgotCSAqLwotCi0JcmRtc3IoTVNSX0lEVF9NQ1JfQ1RSTCwgbG8sIGhpKTsKLQlpZiAoKChsbyA+PiAxNykgJiA3KSA9PSAxKSB7CS8qIFR5cGUgMSBXaW5jaGlwMiBNQ1IgKi8KLQkJbG8gJj0gfjB4MUMwOwkvKiBjbGVhciBrZXkgKi8KLQkJbG8gfD0gMHgwNDA7CS8qIHNldCBrZXkgdG8gMSAqLwotCQl3cm1zcihNU1JfSURUX01DUl9DVFJMLCBsbywgaGkpOwkvKiB1bmxvY2sgTUNSICovCi0JfQotCi0JY2VudGF1cl9tY3JfdHlwZSA9IDE7Ci0KLQkvKgotCSAqICBDbGVhciBhbnkgdW5jb25maWd1cmVkIE1DUidzLgotCSAqLwotCi0JZm9yIChpID0gMDsgaSA8IDg7ICsraSkgewotCQlpZiAoY2VudGF1cl9tY3JbaV0uaGlnaCA9PSAwICYmIGNlbnRhdXJfbWNyW2ldLmxvdyA9PSAwKSB7Ci0JCQlpZiAoIShsbyAmICgxIDw8ICg5ICsgaSkpKSkKLQkJCQl3cm1zcihNU1JfSURUX01DUjAgKyBpLCAwLCAwKTsKLQkJCWVsc2UKLQkJCQkvKgotCQkJCSAqICAgICAgSWYgdGhlIEJJT1Mgc2V0IHVwIGFuIE1DUiB3ZSBjYW5ub3Qgc2VlIGl0Ci0JCQkJICogICAgICBidXQgd2UgZG9uJ3Qgd2lzaCB0byBvYmxpdGVyYXRlIGl0Ci0JCQkJICovCi0JCQkJY2VudGF1cl9tY3JfcmVzZXJ2ZWQgfD0gKDEgPDwgaSk7Ci0JCX0KLQl9Ci0JLyogIAotCSAqICBUaHJvdyB0aGUgbWFpbiB3cml0ZS1jb21iaW5pbmcgc3dpdGNoLi4uIAotCSAqICBIb3dldmVyIGlmIE9PU1RPUkUgaXMgZW5hYmxlZCB0aGVuIHBlb3BsZSBoYXZlIGFscmVhZHkgZG9uZSBmYXIKLQkgKiAgY2xldmVyZXIgdGhpbmdzIGFuZCB3ZSBzaG91bGQgYmVoYXZlLiAKLQkgKi8KLQotCWxvIHw9IDE1OwkJLyogV3JpdGUgY29tYmluZSBlbmFibGVzICovCi0Jd3Jtc3IoTVNSX0lEVF9NQ1JfQ1RSTCwgbG8sIGhpKTsKLX0KLQotLyoKLSAqCUluaXRpYWxpc2UgdGhlIG9yaWdpbmFsIHdpbmNoaXAgd2l0aCByZWFkIG9ubHkgTUNSIHJlZ2lzdGVycwotICoJbm8gdXNlZCBiaXRtYXNrIGZvciB0aGUgQklPUyB0byBwYXNzIG9uIGFuZCB3cml0ZSBvbmx5IGNvbnRyb2wKLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQKLWNlbnRhdXJfbWNyMF9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgaTsKLQotCS8qIFVuZm9ydHVuYXRlbHksIE1DUidzIGFyZSByZWFkLW9ubHksIHNvIHRoZXJlIGlzIG5vIHdheSB0bwotCSAqIGZpbmQgb3V0IHdoYXQgdGhlIGJpb3MgbWlnaHQgaGF2ZSBkb25lLgotCSAqLwotCi0JLyogQ2xlYXIgYW55IHVuY29uZmlndXJlZCBNQ1Incy4KLQkgKiBUaGlzIHdheSB3ZSBhcmUgc3VyZSB0aGF0IHRoZSBjZW50YXVyX21jciBhcnJheSBjb250YWlucyB0aGUgYWN0dWFsCi0JICogdmFsdWVzLiBUaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQgYW55IEJJT1MgdHdlYWtzIGFyZSB0aHVzIHVuZG9uZS4KLQkgKgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKLQkJaWYgKGNlbnRhdXJfbWNyW2ldLmhpZ2ggPT0gMCAmJiBjZW50YXVyX21jcltpXS5sb3cgPT0gMCkKLQkJCXdybXNyKE1TUl9JRFRfTUNSMCArIGksIDAsIDApOwotCX0KLQotCXdybXNyKE1TUl9JRFRfTUNSX0NUUkwsIDB4MDFGMDAwMUYsIDApOwkvKiBXcml0ZSBvbmx5ICovCi19Ci0KLS8qCi0gKglJbml0aWFsaXNlIFdpbmNoaXAgc2VyaWVzIE1DUiByZWdpc3RlcnMKLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQKLWNlbnRhdXJfbWNyX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCBjdHh0OwotCi0Jc2V0X210cnJfcHJlcGFyZV9zYXZlKCZjdHh0KTsKLQlzZXRfbXRycl9jYWNoZV9kaXNhYmxlKCZjdHh0KTsKLQotCWlmIChib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSA0KQotCQljZW50YXVyX21jcjBfaW5pdCgpOwotCWVsc2UgaWYgKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID09IDggfHwgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gOSkKLQkJY2VudGF1cl9tY3IxX2luaXQoKTsKLQotCXNldF9tdHJyX2RvbmUoJmN0eHQpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgY2VudGF1cl92YWxpZGF0ZV9hZGRfcGFnZSh1bnNpZ25lZCBsb25nIGJhc2UsIAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3N0YXRpYyBpbnQKK2NlbnRhdXJfdmFsaWRhdGVfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCB0eXBlKQogewogCS8qCi0JICogIEZJWE1FOiBXaW5jaGlwMiBzdXBwb3J0cyB1bmNhY2hlZAorCSAqIEZJWE1FOiBXaW5jaGlwMiBzdXBwb3J0cyB1bmNhY2hlZAogCSAqLwotCWlmICh0eXBlICE9IE1UUlJfVFlQRV9XUkNPTUIgJiYgCisJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQ09NQiAmJgogCSAgICAoY2VudGF1cl9tY3JfdHlwZSA9PSAwIHx8IHR5cGUgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJtdHJyOiBvbmx5IHdyaXRlLWNvbWJpbmluZyVzIHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIGNlbnRhdXJfbWNyX3R5cGUgPyAiIGFuZCB1bmNhY2hlYWJsZSBhcmUiCi0JCSAgICAgICA6ICIgaXMiKTsKKwkJcHJfd2FybmluZygibXRycjogb25seSB3cml0ZS1jb21iaW5pbmclcyBzdXBwb3J0ZWRcbiIsCisJCQkgICBjZW50YXVyX21jcl90eXBlID8gIiBhbmQgdW5jYWNoZWFibGUgYXJlIiA6ICIgaXMiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMjA3LDcgKzExMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbXRycl9vcHMgY2VudGF1cl9tdHJyX29wcyA9IHsKIAkudmVuZG9yICAgICAgICAgICAgPSBYODZfVkVORE9SX0NFTlRBVVIsCi0vLwkuaW5pdCAgICAgICAgICAgICAgPSBjZW50YXVyX21jcl9pbml0LAogCS5zZXQgICAgICAgICAgICAgICA9IGNlbnRhdXJfc2V0X21jciwKIAkuZ2V0ICAgICAgICAgICAgICAgPSBjZW50YXVyX2dldF9tY3IsCiAJLmdldF9mcmVlX3JlZ2lvbiAgID0gY2VudGF1cl9nZXRfZnJlZV9yZWdpb24sCkBAIC0yMjAsNSArMTI0LDMgQEAKIAlzZXRfbXRycl9vcHMoJmNlbnRhdXJfbXRycl9vcHMpOwogCXJldHVybiAwOwogfQotCi0vL2FyY2hfaW5pdGNhbGwoY2VudGF1cl9pbml0X210cnIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKaW5kZXggMWQ1ODRhMS4uMzE1NzM4YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC0xLDUxICsxLDc1IEBACi0vKiAgTVRSUiAoTWVtb3J5IFR5cGUgUmFuZ2UgUmVnaXN0ZXIpIGNsZWFudXAKLQotICAgIENvcHlyaWdodCAoQykgMjAwOSBZaW5naGFpIEx1Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0KKy8qCisgKiBNVFJSIChNZW1vcnkgVHlwZSBSYW5nZSBSZWdpc3RlcikgY2xlYW51cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgWWluZ2hhaSBMdQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9wYXJhLmg+CiAKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KKwogI2luY2x1ZGUgIm10cnIuaCIKIAotLyogc2hvdWxkIGJlIHJlbGF0ZWQgdG8gTVRSUl9WQVJfUkFOR0VTIG51bXMgKi8KLSNkZWZpbmUgUkFOR0VfTlVNIDI1NgotCiBzdHJ1Y3QgcmVzX3JhbmdlIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZW5kOworCXVuc2lnbmVkIGxvbmcJc3RhcnQ7CisJdW5zaWduZWQgbG9uZwllbmQ7CiB9OwogCitzdHJ1Y3QgdmFyX210cnJfcmFuZ2Vfc3RhdGUgeworCXVuc2lnbmVkIGxvbmcJYmFzZV9wZm47CisJdW5zaWduZWQgbG9uZwlzaXplX3BmbjsKKwltdHJyX3R5cGUJdHlwZTsKK307CisKK3N0cnVjdCB2YXJfbXRycl9zdGF0ZSB7CisJdW5zaWduZWQgbG9uZwlyYW5nZV9zdGFydGs7CisJdW5zaWduZWQgbG9uZwlyYW5nZV9zaXplazsKKwl1bnNpZ25lZCBsb25nCWNodW5rX3NpemVrOworCXVuc2lnbmVkIGxvbmcJZ3Jhbl9zaXplazsKKwl1bnNpZ25lZCBpbnQJcmVnOworfTsKKworLyogU2hvdWxkIGJlIHJlbGF0ZWQgdG8gTVRSUl9WQVJfUkFOR0VTIG51bXMgKi8KKyNkZWZpbmUgUkFOR0VfTlVNCQkJCTI1NgorCitzdGF0aWMgc3RydWN0IHJlc19yYW5nZSBfX2luaXRkYXRhCQlyYW5nZVtSQU5HRV9OVU1dOworc3RhdGljIGludCBfX2luaXRkYXRhCQkJCW5yX3JhbmdlOworCitzdGF0aWMgc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIF9faW5pdGRhdGEJcmFuZ2Vfc3RhdGVbUkFOR0VfTlVNXTsKKworc3RhdGljIGludCBfX2luaXRkYXRhIGRlYnVnX3ByaW50OworI2RlZmluZSBEcHJpbnRrKHguLi4pIGRvIHsgaWYgKGRlYnVnX3ByaW50KSBwcmludGsoS0VSTl9ERUJVRyB4KTsgfSB3aGlsZSAoMCkKKworCiBzdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK2FkZF9yYW5nZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAorCSAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JLyogb3V0IG9mIHNsb3RzICovCisJLyogT3V0IG9mIHNsb3RzOiAqLwogCWlmIChucl9yYW5nZSA+PSBSQU5HRV9OVU0pCiAJCXJldHVybiBucl9yYW5nZTsKIApAQCAtNTgsMTIgKzgyLDEyIEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0Ci1hZGRfcmFuZ2Vfd2l0aF9tZXJnZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCithZGRfcmFuZ2Vfd2l0aF9tZXJnZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWludCBpOwogCi0JLyogdHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZSAqLworCS8qIFRyeSB0byBtZXJnZSBpdCB3aXRoIG9sZCBvbmU6ICovCiAJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBmaW5hbF9zdGFydCwgZmluYWxfZW5kOwogCQl1bnNpZ25lZCBsb25nIGNvbW1vbl9zdGFydCwgY29tbW9uX2VuZDsKQEAgLTg0LDcgKzEwOCw3IEBACiAJCXJldHVybiBucl9yYW5nZTsKIAl9CiAKLQkvKiBuZWVkIHRvIGFkZCB0aGF0ICovCisJLyogTmVlZCB0byBhZGQgaXQ6ICovCiAJcmV0dXJuIGFkZF9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIHN0YXJ0LCBlbmQpOwogfQogCkBAIC0xMTcsNyArMTQxLDcgQEAKIAkJfQogCiAJCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA8IHJhbmdlW2pdLmVuZCkgewotCQkJLyogZmluZCB0aGUgbmV3IHNwYXJlICovCisJCQkvKiBGaW5kIHRoZSBuZXcgc3BhcmU6ICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgUkFOR0VfTlVNOyBpKyspIHsKIAkJCQlpZiAocmFuZ2VbaV0uZW5kID09IDApCiAJCQkJCWJyZWFrOwpAQCAtMTQ2LDE0ICsxNzAsOCBAQAogCXJldHVybiBzdGFydDEgLSBzdGFydDI7CiB9CiAKLXN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSB7Ci0JdW5zaWduZWQgbG9uZyBiYXNlX3BmbjsKLQl1bnNpZ25lZCBsb25nIHNpemVfcGZuOwotCW10cnJfdHlwZSB0eXBlOwotfTsKLQotc3RhdGljIHN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSBfX2luaXRkYXRhIHJhbmdlX3N0YXRlW1JBTkdFX05VTV07Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgZGVidWdfcHJpbnQ7CisjZGVmaW5lIEJJT1NfQlVHX01TRyBLRVJOX1dBUk5JTkcgXAorCSJXQVJOSU5HOiBCSU9TIGJ1ZzogVkFSIE1UUlIgJWQgY29udGFpbnMgc3RyYW5nZSBVQyBlbnRyeSB1bmRlciAxTSwgY2hlY2sgd2l0aCB5b3VyIHN5c3RlbSB2ZW5kb3IhXG4iCiAKIHN0YXRpYyBpbnQgX19pbml0CiB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCkBAIC0xODAsNyArMTk4LDcgQEAKIAkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOwogCX0KIAotCS8qIHRha2Ugb3V0IFVDIHJhbmdlcyAqLworCS8qIFRha2Ugb3V0IFVDIHJhbmdlczogKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewogCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKIAkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgJiYKQEAgLTE5Myw5ICsyMTEsNyBAQAogCQlpZiAoYmFzZSA8ICgxPDwoMjAtUEFHRV9TSElGVCkpICYmIG10cnJfc3RhdGUuaGF2ZV9maXhlZCAmJgogCQkgICAgKG10cnJfc3RhdGUuZW5hYmxlZCAmIDEpKSB7CiAJCQkvKiBWYXIgTVRSUiBjb250YWlucyBVQyBlbnRyeSBiZWxvdyAxTT8gU2tpcCBpdDogKi8KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IEJJT1MgYnVnOiBWQVIgTVRSUiAlZCAiCi0JCQkJImNvbnRhaW5zIHN0cmFuZ2UgVUMgZW50cnkgdW5kZXIgMU0sIGNoZWNrICIKLQkJCQkid2l0aCB5b3VyIHN5c3RlbSB2ZW5kb3IhXG4iLCBpKTsKKwkJCXByaW50ayhCSU9TX0JVR19NU0csIGkpOwogCQkJaWYgKGJhc2UgKyBzaXplIDw9ICgxPDwoMjAtUEFHRV9TSElGVCkpKQogCQkJCWNvbnRpbnVlOwogCQkJc2l6ZSAtPSAoMTw8KDIwLVBBR0VfU0hJRlQpKSAtIGJhc2U7CkBAIC0yMzcsMTcgKzI1MywxMyBAQAogCXJldHVybiBucl9yYW5nZTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXNfcmFuZ2UgX19pbml0ZGF0YSByYW5nZVtSQU5HRV9OVU1dOwotc3RhdGljIGludCBfX2luaXRkYXRhIG5yX3JhbmdlOwotCiAjaWZkZWYgQ09ORklHX01UUlJfU0FOSVRJWkVSCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBzdW1fcmFuZ2VzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBzdW07CisJdW5zaWduZWQgbG9uZyBzdW0gPSAwOwogCWludCBpOwogCi0Jc3VtID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKIAkJc3VtICs9IHJhbmdlW2ldLmVuZCArIDEgLSByYW5nZVtpXS5zdGFydDsKIApAQCAtMjc4LDE3ICsyOTAsOSBAQAogfQogZWFybHlfcGFyYW0oIm10cnJfY2xlYW51cF9kZWJ1ZyIsIG10cnJfY2xlYW51cF9kZWJ1Z19zZXR1cCk7CiAKLXN0cnVjdCB2YXJfbXRycl9zdGF0ZSB7Ci0JdW5zaWduZWQgbG9uZwlyYW5nZV9zdGFydGs7Ci0JdW5zaWduZWQgbG9uZwlyYW5nZV9zaXplazsKLQl1bnNpZ25lZCBsb25nCWNodW5rX3NpemVrOwotCXVuc2lnbmVkIGxvbmcJZ3Jhbl9zaXplazsKLQl1bnNpZ25lZCBpbnQJcmVnOwotfTsKLQogc3RhdGljIHZvaWQgX19pbml0CiBzZXRfdmFyX210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlaywgdW5zaWduZWQgbG9uZyBzaXplaywKLQkJdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQorCSAgICAgdW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQogewogCXUzMiBiYXNlX2xvLCBiYXNlX2hpLCBtYXNrX2xvLCBtYXNrX2hpOwogCXU2NCBiYXNlLCBtYXNrOwpAQCAtMzAxLDcgKzMwNSw3IEBACiAJbWFzayA9ICgxVUxMIDw8IGFkZHJlc3NfYml0cykgLSAxOwogCW1hc2sgJj0gfigoKCh1NjQpc2l6ZWspIDw8IDEwKSAtIDEpOwogCi0JYmFzZSAgPSAoKHU2NCliYXNlaykgPDwgMTA7CisJYmFzZSA9ICgodTY0KWJhc2VrKSA8PCAxMDsKIAogCWJhc2UgfD0gdHlwZTsKIAltYXNrIHw9IDB4ODAwOwpAQCAtMzE3LDE1ICszMjEsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0CiBzYXZlX3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCi0JCXVuc2lnbmVkIGNoYXIgdHlwZSkKKwkgICAgICB1bnNpZ25lZCBjaGFyIHR5cGUpCiB7CiAJcmFuZ2Vfc3RhdGVbcmVnXS5iYXNlX3BmbiA9IGJhc2VrID4+IChQQUdFX1NISUZUIC0gMTApOwogCXJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPSBzaXplayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKIAlyYW5nZV9zdGF0ZVtyZWddLnR5cGUgPSB0eXBlOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNldF92YXJfbXRycl9hbGwodW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfdmFyX210cnJfYWxsKHVuc2lnbmVkIGludCBhZGRyZXNzX2JpdHMpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlaywgc2l6ZWs7CiAJdW5zaWduZWQgY2hhciB0eXBlOwpAQCAtMzQyLDExICszNDUsMTEgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdG9fc2l6ZV9mYWN0b3IodW5zaWduZWQgbG9uZyBzaXplaywgY2hhciAqZmFjdG9ycCkKIHsKLQljaGFyIGZhY3RvcjsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSBzaXplazsKKwljaGFyIGZhY3RvcjsKIAogCWlmIChiYXNlICYgKCgxPDwxMCkgLSAxKSkgewotCQkvKiBub3QgTUIgYWxpZ25tZW50ICovCisJCS8qIE5vdCBNQi1hbGlnbmVkOiAqLwogCQlmYWN0b3IgPSAnSyc7CiAJfSBlbHNlIGlmIChiYXNlICYgKCgxPDwyMCkgLSAxKSkgewogCQlmYWN0b3IgPSAnTSc7CkBAIC0zNzIsMTEgKzM3NSwxMiBAQAogCQl1bnNpZ25lZCBsb25nIG1heF9hbGlnbiwgYWxpZ247CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZWs7CiAKLQkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBzaXplIEkgY2FuIG1ha2UgYSByYW5nZSAqLworCQkvKiBDb21wdXRlIHRoZSBtYXhpbXVtIHNpemUgd2l0aCB3aGljaCB3ZSBjYW4gbWFrZSBhIHJhbmdlOiAqLwogCQlpZiAocmFuZ2Vfc3RhcnRrKQogCQkJbWF4X2FsaWduID0gZmZzKHJhbmdlX3N0YXJ0aykgLSAxOwogCQllbHNlCiAJCQltYXhfYWxpZ24gPSAzMjsKKwogCQlhbGlnbiA9IGZscyhyYW5nZV9zaXplaykgLSAxOwogCQlpZiAoYWxpZ24gPiBtYXhfYWxpZ24pCiAJCQlhbGlnbiA9IG1heF9hbGlnbjsKQEAgLTM4NiwxMSArMzkwLDEwIEBACiAJCQljaGFyIHN0YXJ0X2ZhY3RvciA9ICdLJywgc2l6ZV9mYWN0b3IgPSAnSyc7CiAJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2Jhc2UsIHNpemVfYmFzZTsKIAotCQkJc3RhcnRfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJhbmdlX3N0YXJ0aywKLQkJCQkJCQkgJnN0YXJ0X2ZhY3RvciksCi0JCQlzaXplX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihzaXplaywgJnNpemVfZmFjdG9yKSwKKwkJCXN0YXJ0X2Jhc2UgPSB0b19zaXplX2ZhY3RvcihyYW5nZV9zdGFydGssICZzdGFydF9mYWN0b3IpOworCQkJc2l6ZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3Ioc2l6ZWssICZzaXplX2ZhY3Rvcik7CiAKLQkJCXByaW50ayhLRVJOX0RFQlVHICJTZXR0aW5nIHZhcmlhYmxlIE1UUlIgJWQsICIKKwkJCURwcmludGsoIlNldHRpbmcgdmFyaWFibGUgTVRSUiAlZCwgIgogCQkJCSJiYXNlOiAlbGQlY0IsIHJhbmdlOiAlbGQlY0IsIHR5cGUgJXNcbiIsCiAJCQkJcmVnLCBzdGFydF9iYXNlLCBzdGFydF9mYWN0b3IsCiAJCQkJc2l6ZV9iYXNlLCBzaXplX2ZhY3RvciwKQEAgLTQyNSwxMCArNDI4LDExIEBACiAJY2h1bmtfc2l6ZWsgPSBzdGF0ZS0+Y2h1bmtfc2l6ZWs7CiAJZ3Jhbl9zaXplayA9IHN0YXRlLT5ncmFuX3NpemVrOwogCi0JLyogYWxpZ24gd2l0aCBncmFuIHNpemUsIHByZXZlbnQgc21hbGwgYmxvY2sgdXNlZCB1cCBNVFJScyAqLworCS8qIEFsaWduIHdpdGggZ3JhbiBzaXplLCBwcmV2ZW50IHNtYWxsIGJsb2NrIHVzZWQgdXAgTVRSUnM6ICovCiAJcmFuZ2VfYmFzZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc3RhcnRrLCBncmFuX3NpemVrKTsKIAlpZiAoKHJhbmdlX2Jhc2VrID4gYmFzZWspICYmIGJhc2VrKQogCQlyZXR1cm4gc2Vjb25kX3NpemVrOworCiAJc3RhdGUtPnJhbmdlX3NpemVrIC09IChyYW5nZV9iYXNlayAtIHN0YXRlLT5yYW5nZV9zdGFydGspOwogCXJhbmdlX3NpemVrID0gQUxJR04oc3RhdGUtPnJhbmdlX3NpemVrLCBncmFuX3NpemVrKTsKIApAQCAtNDM5LDIyICs0NDMsMjEgQEAKIAl9CiAJc3RhdGUtPnJhbmdlX3NpemVrID0gcmFuZ2Vfc2l6ZWs7CiAKLQkvKiB0cnkgdG8gYXBwZW5kIHNvbWUgc21hbGwgaG9sZSAqLworCS8qIFRyeSB0byBhcHBlbmQgc29tZSBzbWFsbCBob2xlOiAqLwogCXJhbmdlMF9iYXNlayA9IHN0YXRlLT5yYW5nZV9zdGFydGs7CiAJcmFuZ2UwX3NpemVrID0gQUxJR04oc3RhdGUtPnJhbmdlX3NpemVrLCBjaHVua19zaXplayk7CiAKLQkvKiBubyBpbmNyZWFzZSAqLworCS8qIE5vIGluY3JlYXNlOiAqLwogCWlmIChyYW5nZTBfc2l6ZWsgPT0gc3RhdGUtPnJhbmdlX3NpemVrKSB7Ci0JCWlmIChkZWJ1Z19wcmludCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJyYW5nZVg6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQlyYW5nZTBfYmFzZWs8PDEwLAotCQkJCShyYW5nZTBfYmFzZWsgKyBzdGF0ZS0+cmFuZ2Vfc2l6ZWspPDwxMCk7CisJCURwcmludGsoInJhbmdlWDogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKKwkJCShyYW5nZTBfYmFzZWsgKyBzdGF0ZS0+cmFuZ2Vfc2l6ZWspPDwxMCk7CiAJCXN0YXRlLT5yZWcgPSByYW5nZV90b19tdHJyKHN0YXRlLT5yZWcsIHJhbmdlMF9iYXNlaywKIAkJCQlzdGF0ZS0+cmFuZ2Vfc2l6ZWssIE1UUlJfVFlQRV9XUkJBQ0spOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBvbmx5IGN1dCBiYWNrLCB3aGVuIGl0IGlzIG5vdCB0aGUgbGFzdCAqLworCS8qIE9ubHkgY3V0IGJhY2sgd2hlbiBpdCBpcyBub3QgdGhlIGxhc3Q6ICovCiAJaWYgKHNpemVrKSB7CiAJCXdoaWxlIChyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWsgPiAoYmFzZWsgKyBzaXplaykpIHsKIAkJCWlmIChyYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspCkBAIC00NzAsMTYgKzQ3MywxNiBAQAogc2Vjb25kX3RyeToKIAlyYW5nZV9iYXNlayA9IHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplazsKIAotCS8qIG9uZSBob2xlIGluIHRoZSBtaWRkbGUgKi8KKwkvKiBPbmUgaG9sZSBpbiB0aGUgbWlkZGxlOiAqLwogCWlmIChyYW5nZV9iYXNlayA+IGJhc2VrICYmIHJhbmdlX2Jhc2VrIDw9IChiYXNlayArIHNpemVrKSkKIAkJc2Vjb25kX3NpemVrID0gcmFuZ2VfYmFzZWsgLSBiYXNlazsKIAogCWlmIChyYW5nZTBfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKIAotCQkvKiBvbmUgaG9sZSBpbiBtaWRkbGUgb3IgYXQgZW5kICovCisJCS8qIE9uZSBob2xlIGluIG1pZGRsZSBvciBhdCB0aGUgZW5kOiAqLwogCQlob2xlX3NpemVrID0gcmFuZ2UwX3NpemVrIC0gc3RhdGUtPnJhbmdlX3NpemVrIC0gc2Vjb25kX3NpemVrOwogCi0JCS8qIGhvbGUgc2l6ZSBzaG91bGQgYmUgbGVzcyB0aGFuIGhhbGYgb2YgcmFuZ2UwIHNpemUgKi8KKwkJLyogSG9sZSBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gaGFsZiBvZiByYW5nZTAgc2l6ZTogKi8KIAkJaWYgKGhvbGVfc2l6ZWsgPj0gKHJhbmdlMF9zaXplayA+PiAxKSAmJgogCQkgICAgcmFuZ2UwX3NpemVrID49IGNodW5rX3NpemVrKSB7CiAJCQlyYW5nZTBfc2l6ZWsgLT0gY2h1bmtfc2l6ZWs7CkBAIC00OTEsMzIgKzQ5NCwzMCBAQAogCX0KIAogCWlmIChyYW5nZTBfc2l6ZWspIHsKLQkJaWYgKGRlYnVnX3ByaW50KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlMDogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCXJhbmdlMF9iYXNlazw8MTAsCi0JCQkJKHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplayk8PDEwKTsKKwkJRHByaW50aygicmFuZ2UwOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQlyYW5nZTBfYmFzZWs8PDEwLAorCQkJKHJhbmdlMF9iYXNlayArIHJhbmdlMF9zaXplayk8PDEwKTsKIAkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2UwX2Jhc2VrLAogCQkJCXJhbmdlMF9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7CiAJfQogCiAJaWYgKHJhbmdlMF9zaXplayA8IHN0YXRlLT5yYW5nZV9zaXplaykgewotCQkvKiBuZWVkIHRvIGhhbmRsZSBsZWZ0IG92ZXIgKi8KKwkJLyogTmVlZCB0byBoYW5kbGUgbGVmdCBvdmVyIHJhbmdlOiAqLwogCQlyYW5nZV9zaXplayA9IHN0YXRlLT5yYW5nZV9zaXplayAtIHJhbmdlMF9zaXplazsKIAotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2U6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgcmFuZ2VfYmFzZWs8PDEwLAotCQkJCSAocmFuZ2VfYmFzZWsgKyByYW5nZV9zaXplayk8PDEwKTsKKwkJRHByaW50aygicmFuZ2U6ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCSByYW5nZV9iYXNlazw8MTAsCisJCQkgKHJhbmdlX2Jhc2VrICsgcmFuZ2Vfc2l6ZWspPDwxMCk7CisKIAkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2VfYmFzZWssCiAJCQkJIHJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKIAl9CiAKIAlpZiAoaG9sZV9zaXplaykgewogCQlob2xlX2Jhc2VrID0gcmFuZ2VfYmFzZWsgLSBob2xlX3NpemVrIC0gc2Vjb25kX3NpemVrOwotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiaG9sZTogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSBob2xlX2Jhc2VrPDwxMCwKLQkJCQkgKGhvbGVfYmFzZWsgKyBob2xlX3NpemVrKTw8MTApOworCQlEcHJpbnRrKCJob2xlOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkgaG9sZV9iYXNlazw8MTAsCisJCQkgKGhvbGVfYmFzZWsgKyBob2xlX3NpemVrKTw8MTApOwogCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCBob2xlX2Jhc2VrLAogCQkJCSBob2xlX3NpemVrLCBNVFJSX1RZUEVfVU5DQUNIQUJMRSk7CiAJfQpAQCAtNTM3LDIzICs1MzgsMjMgQEAKIAliYXNlayA9IGJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwogCXNpemVrID0gc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CiAKLQkvKiBTZWUgaWYgSSBjYW4gbWVyZ2Ugd2l0aCB0aGUgbGFzdCByYW5nZSAqLworCS8qIFNlZSBpZiBJIGNhbiBtZXJnZSB3aXRoIHRoZSBsYXN0IHJhbmdlOiAqLwogCWlmICgoYmFzZWsgPD0gMTAyNCkgfHwKIAkgICAgKHN0YXRlLT5yYW5nZV9zdGFydGsgKyBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPT0gYmFzZWspKSB7CiAJCXVuc2lnbmVkIGxvbmcgZW5kayA9IGJhc2VrICsgc2l6ZWs7CiAJCXN0YXRlLT5yYW5nZV9zaXplayA9IGVuZGsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrOwogCQlyZXR1cm47CiAJfQotCS8qIFdyaXRlIHRoZSByYW5nZSBtdHJycyAqLworCS8qIFdyaXRlIHRoZSByYW5nZSBtdHJyczogKi8KIAlpZiAoc3RhdGUtPnJhbmdlX3NpemVrICE9IDApCiAJCXNlY29uZF9zaXplayA9IHJhbmdlX3RvX210cnJfd2l0aF9ob2xlKHN0YXRlLCBiYXNlaywgc2l6ZWspOwogCi0JLyogQWxsb2NhdGUgYW4gbXNyICovCisJLyogQWxsb2NhdGUgYW4gbXNyOiAqLwogCXN0YXRlLT5yYW5nZV9zdGFydGsgPSBiYXNlayArIHNlY29uZF9zaXplazsKIAlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgID0gc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7CiB9CiAKLS8qIG1pbmludW0gc2l6ZSBvZiBtdHJyIGJsb2NrIHRoYXQgY2FuIHRha2UgaG9sZSAqLworLyogTWluaW51bSBzaXplIG9mIG10cnIgYmxvY2sgdGhhdCBjYW4gdGFrZSBob2xlOiAqLwogc3RhdGljIHU2NCBtdHJyX2NodW5rX3NpemUgX19pbml0ZGF0YSA9ICgyNTZVTEw8PDIwKTsKIAogc3RhdGljIGludCBfX2luaXQgcGFyc2VfbXRycl9jaHVua19zaXplX29wdChjaGFyICpwKQpAQCAtNTY1LDcgKzU2Niw3IEBACiB9CiBlYXJseV9wYXJhbSgibXRycl9jaHVua19zaXplIiwgcGFyc2VfbXRycl9jaHVua19zaXplX29wdCk7CiAKLS8qIGdyYW5pdHkgb2YgbXRyciBvZiBibG9jayAqLworLyogR3JhbnVsYXJpdHkgb2YgbXRyciBvZiBibG9jazogKi8KIHN0YXRpYyB1NjQgbXRycl9ncmFuX3NpemUgX19pbml0ZGF0YTsKIAogc3RhdGljIGludCBfX2luaXQgcGFyc2VfbXRycl9ncmFuX3NpemVfb3B0KGNoYXIgKnApCkBAIC01NzcsNyArNTc4LDcgQEAKIH0KIGVhcmx5X3BhcmFtKCJtdHJyX2dyYW5fc2l6ZSIsIHBhcnNlX210cnJfZ3Jhbl9zaXplX29wdCk7CiAKLXN0YXRpYyBpbnQgbnJfbXRycl9zcGFyZV9yZWcgX19pbml0ZGF0YSA9CitzdGF0aWMgdW5zaWduZWQgbG9uZyBucl9tdHJyX3NwYXJlX3JlZyBfX2luaXRkYXRhID0KIAkJCQkgQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUOwogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX3NwYXJlX3JlZyhjaGFyICphcmcpCkBAIC01ODYsNyArNTg3LDYgQEAKIAkJbnJfbXRycl9zcGFyZV9yZWcgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOwogCXJldHVybiAwOwogfQotCiBlYXJseV9wYXJhbSgibXRycl9zcGFyZV9yZWdfbnIiLCBwYXJzZV9tdHJyX3NwYXJlX3JlZyk7CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC01OTQsOCArNTk0LDggQEAKIAkJICAgIHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplKQogewogCXN0cnVjdCB2YXJfbXRycl9zdGF0ZSB2YXJfc3RhdGU7Ci0JaW50IGk7CiAJaW50IG51bV9yZWc7CisJaW50IGk7CiAKIAl2YXJfc3RhdGUucmFuZ2Vfc3RhcnRrCT0gMDsKIAl2YXJfc3RhdGUucmFuZ2Vfc2l6ZWsJPSAwOwpAQCAtNjA1LDE3ICs2MDUsMTggQEAKIAogCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7CiAKLQkvKiBXcml0ZSB0aGUgcmFuZ2UgZXRjICovCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJLyogV3JpdGUgdGhlIHJhbmdlOiAqLworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKSB7CiAJCXNldF92YXJfbXRycl9yYW5nZSgmdmFyX3N0YXRlLCByYW5nZVtpXS5zdGFydCwKIAkJCQkgICByYW5nZVtpXS5lbmQgLSByYW5nZVtpXS5zdGFydCArIDEpOworCX0KIAotCS8qIFdyaXRlIHRoZSBsYXN0IHJhbmdlICovCisJLyogV3JpdGUgdGhlIGxhc3QgcmFuZ2U6ICovCiAJaWYgKHZhcl9zdGF0ZS5yYW5nZV9zaXplayAhPSAwKQogCQlyYW5nZV90b19tdHJyX3dpdGhfaG9sZSgmdmFyX3N0YXRlLCAwLCAwKTsKIAogCW51bV9yZWcgPSB2YXJfc3RhdGUucmVnOwotCS8qIENsZWFyIG91dCB0aGUgZXh0cmEgTVRSUidzICovCisJLyogQ2xlYXIgb3V0IHRoZSBleHRyYSBNVFJSJ3M6ICovCiAJd2hpbGUgKHZhcl9zdGF0ZS5yZWcgPCBudW1fdmFyX3JhbmdlcykgewogCQlzYXZlX3Zhcl9tdHJyKHZhcl9zdGF0ZS5yZWcsIDAsIDAsIDApOwogCQl2YXJfc3RhdGUucmVnKys7CkBAIC02MjUsMTEgKzYyNiwxMSBAQAogfQogCiBzdHJ1Y3QgbXRycl9jbGVhbnVwX3Jlc3VsdCB7Ci0JdW5zaWduZWQgbG9uZyBncmFuX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyBsb3NlX2NvdmVyX3NpemVrOwotCXVuc2lnbmVkIGludCBudW1fcmVnOwotCWludCBiYWQ7CisJdW5zaWduZWQgbG9uZwlncmFuX3NpemVrOworCXVuc2lnbmVkIGxvbmcJY2h1bmtfc2l6ZWs7CisJdW5zaWduZWQgbG9uZwlsb3NlX2NvdmVyX3NpemVrOworCXVuc2lnbmVkIGludAludW1fcmVnOworCWludAkJYmFkOwogfTsKIAogLyoKQEAgLTY0NSwxMCArNjQ2LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSh2b2lkKQogewotCWludCBpOwogCWNoYXIgc3RhcnRfZmFjdG9yID0gJ0snLCBzaXplX2ZhY3RvciA9ICdLJzsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X2Jhc2UsIHNpemVfYmFzZTsKIAltdHJyX3R5cGUgdHlwZTsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAKQEAgLTY3NiwxMCArNjc3LDEwIEBACiAJaW50IGk7CiAJbXRycl90eXBlIHR5cGU7CiAJdW5zaWduZWQgbG9uZyBzaXplOwotCS8qIGV4dHJhIG9uZSBmb3IgYWxsIDAgKi8KKwkvKiBFeHRyYSBvbmUgZm9yIGFsbCAwOiAqLwogCWludCBudW1bTVRSUl9OVU1fVFlQRVMgKyAxXTsKIAotCS8qIGNoZWNrIGVudHJpZXMgbnVtYmVyICovCisJLyogQ2hlY2sgZW50cmllcyBudW1iZXI6ICovCiAJbWVtc2V0KG51bSwgMCwgc2l6ZW9mKG51bSkpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOwpAQCAtNjkzLDg4ICs2OTQsODYgQEAKIAkJbnVtW3R5cGVdKys7CiAJfQogCi0JLyogY2hlY2sgaWYgd2UgZ290IFVDIGVudHJpZXMgKi8KKwkvKiBDaGVjayBpZiB3ZSBnb3QgVUMgZW50cmllczogKi8KIAlpZiAoIW51bVtNVFJSX1RZUEVfVU5DQUNIQUJMRV0pCiAJCXJldHVybiAwOwogCi0JLyogY2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDICovCisJLyogQ2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDICovCiAJaWYgKG51bVtNVFJSX1RZUEVfV1JCQUNLXSArIG51bVtNVFJSX1RZUEVfVU5DQUNIQUJMRV0gIT0KLQkJbnVtX3Zhcl9yYW5nZXMgLSBudW1bTVRSUl9OVU1fVFlQRVNdKQorCSAgICBudW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcmFuZ2Vfc3VtczsKLXN0YXRpYyB2b2lkIF9faW5pdCBtdHJyX2NhbGNfcmFuZ2Vfc3RhdGUodTY0IGNodW5rX3NpemUsIHU2NCBncmFuX3NpemUsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSwKLQkJCQkJIGludCBpKQorCitzdGF0aWMgdm9pZCBfX2luaXQKK210cnJfY2FsY19yYW5nZV9zdGF0ZSh1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyB4X3JlbW92ZV9iYXNlLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHhfcmVtb3ZlX3NpemUsIGludCBpKQogewotCWludCBudW1fcmVnOwogCXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIHJhbmdlX25ld1tSQU5HRV9OVU1dOwotCXN0YXRpYyBpbnQgbnJfcmFuZ2VfbmV3OwogCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3Vtc19uZXc7CisJc3RhdGljIGludCBucl9yYW5nZV9uZXc7CisJaW50IG51bV9yZWc7CiAKLQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCi0JbnVtX3JlZyA9IHg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLAotCQkJCQkJY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplKTsKKwkvKiBDb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlOiAqLworCW51bV9yZWcgPSB4ODZfc2V0dXBfdmFyX210cnJzKHJhbmdlLCBucl9yYW5nZSwgY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplKTsKIAotCS8qIHdlIGdvdCBuZXcgc2V0dGluZyBpbiByYW5nZV9zdGF0ZSwgY2hlY2sgaXQgKi8KKwkvKiBXZSBnb3QgbmV3IHNldHRpbmcgaW4gcmFuZ2Vfc3RhdGUsIGNoZWNrIGl0OiAqLwogCW1lbXNldChyYW5nZV9uZXcsIDAsIHNpemVvZihyYW5nZV9uZXcpKTsKIAlucl9yYW5nZV9uZXcgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlX25ldywgMCwKLQkJCQlleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUpOworCQkJCXhfcmVtb3ZlX2Jhc2UsIHhfcmVtb3ZlX3NpemUpOwogCXJhbmdlX3N1bXNfbmV3ID0gc3VtX3JhbmdlcyhyYW5nZV9uZXcsIG5yX3JhbmdlX25ldyk7CiAKIAlyZXN1bHRbaV0uY2h1bmtfc2l6ZWsgPSBjaHVua19zaXplID4+IDEwOwogCXJlc3VsdFtpXS5ncmFuX3NpemVrID0gZ3Jhbl9zaXplID4+IDEwOwogCXJlc3VsdFtpXS5udW1fcmVnID0gbnVtX3JlZzsKKwogCWlmIChyYW5nZV9zdW1zIDwgcmFuZ2Vfc3Vtc19uZXcpIHsKLQkJcmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWsgPQotCQkJKHJhbmdlX3N1bXNfbmV3IC0gcmFuZ2Vfc3VtcykgPDwgUFNISUZUOworCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9IChyYW5nZV9zdW1zX25ldyAtIHJhbmdlX3N1bXMpIDw8IFBTSElGVDsKIAkJcmVzdWx0W2ldLmJhZCA9IDE7Ci0JfSBlbHNlCi0JCXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrID0KLQkJCShyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcpIDw8IFBTSElGVDsKKwl9IGVsc2UgeworCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9IChyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcpIDw8IFBTSElGVDsKKwl9CiAKLQkvKiBkb3VibGUgY2hlY2sgaXQgKi8KKwkvKiBEb3VibGUgY2hlY2sgaXQ6ICovCiAJaWYgKCFyZXN1bHRbaV0uYmFkICYmICFyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplaykgewotCQlpZiAobnJfcmFuZ2VfbmV3ICE9IG5yX3JhbmdlIHx8Ci0JCQltZW1jbXAocmFuZ2UsIHJhbmdlX25ldywgc2l6ZW9mKHJhbmdlKSkpCi0JCQkJcmVzdWx0W2ldLmJhZCA9IDE7CisJCWlmIChucl9yYW5nZV9uZXcgIT0gbnJfcmFuZ2UgfHwgbWVtY21wKHJhbmdlLCByYW5nZV9uZXcsIHNpemVvZihyYW5nZSkpKQorCQkJcmVzdWx0W2ldLmJhZCA9IDE7CiAJfQogCi0JaWYgKCFyZXN1bHRbaV0uYmFkICYmIChyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcgPAotCQkJCW1pbl9sb3NzX3BmbltudW1fcmVnXSkpIHsKLQkJbWluX2xvc3NfcGZuW251bV9yZWddID0KLQkJCXJhbmdlX3N1bXMgLSByYW5nZV9zdW1zX25ldzsKLQl9CisJaWYgKCFyZXN1bHRbaV0uYmFkICYmIChyYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXcgPCBtaW5fbG9zc19wZm5bbnVtX3JlZ10pKQorCQltaW5fbG9zc19wZm5bbnVtX3JlZ10gPSByYW5nZV9zdW1zIC0gcmFuZ2Vfc3Vtc19uZXc7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGludCBpKQogewotCWNoYXIgZ3Jhbl9mYWN0b3IsIGNodW5rX2ZhY3RvciwgbG9zZV9mYWN0b3I7CiAJdW5zaWduZWQgbG9uZyBncmFuX2Jhc2UsIGNodW5rX2Jhc2UsIGxvc2VfYmFzZTsKKwljaGFyIGdyYW5fZmFjdG9yLCBjaHVua19mYWN0b3IsIGxvc2VfZmFjdG9yOwogCiAJZ3Jhbl9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmdyYW5fc2l6ZWssICZncmFuX2ZhY3RvciksCiAJY2h1bmtfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5jaHVua19zaXplaywgJmNodW5rX2ZhY3RvciksCiAJbG9zZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWssICZsb3NlX2ZhY3RvciksCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXNncmFuX3NpemU6ICVsZCVjIFx0Y2h1bmtfc2l6ZTogJWxkJWMgXHQiLAotCQkJcmVzdWx0W2ldLmJhZCA/ICIqQkFEKiIgOiAiICIsCi0JCQlncmFuX2Jhc2UsIGdyYW5fZmFjdG9yLCBjaHVua19iYXNlLCBjaHVua19mYWN0b3IpOwotCXByaW50ayhLRVJOX0NPTlQgIm51bV9yZWc6ICVkICBcdGxvc2UgY292ZXIgUkFNOiAlcyVsZCVjXG4iLAotCQkJcmVzdWx0W2ldLm51bV9yZWcsIHJlc3VsdFtpXS5iYWQgPyAiLSIgOiAiIiwKLQkJCWxvc2VfYmFzZSwgbG9zZV9mYWN0b3IpOworCisJcHJfaW5mbygiJXNncmFuX3NpemU6ICVsZCVjIFx0Y2h1bmtfc2l6ZTogJWxkJWMgXHQiLAorCQlyZXN1bHRbaV0uYmFkID8gIipCQUQqIiA6ICIgIiwKKwkJZ3Jhbl9iYXNlLCBncmFuX2ZhY3RvciwgY2h1bmtfYmFzZSwgY2h1bmtfZmFjdG9yKTsKKwlwcl9jb250KCJudW1fcmVnOiAlZCAgXHRsb3NlIGNvdmVyIFJBTTogJXMlbGQlY1xuIiwKKwkJcmVzdWx0W2ldLm51bV9yZWcsIHJlc3VsdFtpXS5iYWQgPyAiLSIgOiAiIiwKKwkJbG9zZV9iYXNlLCBsb3NlX2ZhY3Rvcik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG10cnJfc2VhcmNoX29wdGltYWxfaW5kZXgodm9pZCkKIHsKLQlpbnQgaTsKIAlpbnQgbnVtX3JlZ19nb29kOwogCWludCBpbmRleF9nb29kOworCWludCBpOwogCiAJaWYgKG5yX210cnJfc3BhcmVfcmVnID49IG51bV92YXJfcmFuZ2VzKQogCQlucl9tdHJyX3NwYXJlX3JlZyA9IG51bV92YXJfcmFuZ2VzIC0gMTsKKwogCW51bV9yZWdfZ29vZCA9IC0xOwogCWZvciAoaSA9IG51bV92YXJfcmFuZ2VzIC0gbnJfbXRycl9zcGFyZV9yZWc7IGkgPiAwOyBpLS0pIHsKIAkJaWYgKCFtaW5fbG9zc19wZm5baV0pCkBAIC03OTYsMjQgKzc5NSwyNCBAQAogCXJldHVybiBpbmRleF9nb29kOwogfQogCi0KIGludCBfX2luaXQgbXRycl9jbGVhbnVwKHVuc2lnbmVkIGFkZHJlc3NfYml0cykKIHsKLQl1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHhfcmVtb3ZlX2Jhc2UsIHhfcmVtb3ZlX3NpemU7CiAJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplLCBkZWYsIGR1bW15OwotCW10cnJfdHlwZSB0eXBlOwogCXU2NCBjaHVua19zaXplLCBncmFuX3NpemU7CisJbXRycl90eXBlIHR5cGU7CiAJaW50IGluZGV4X2dvb2Q7CiAJaW50IGk7CiAKIAlpZiAoIWlzX2NwdShJTlRFTCkgfHwgZW5hYmxlX210cnJfY2xlYW51cCA8IDEpCiAJCXJldHVybiAwOworCiAJcmRtc3IoTVNSX01UUlJkZWZUeXBlLCBkZWYsIGR1bW15KTsKIAlkZWYgJj0gMHhmZjsKIAlpZiAoZGVmICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKQogCQlyZXR1cm4gMDsKIAotCS8qIGdldCBpdCBhbmQgc3RvcmUgaXQgYXNpZGUgKi8KKwkvKiBHZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlOiAqLwogCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7CiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKIAkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOwpAQCAtODIyLDI5ICs4MjEsMjggQEAKIAkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7CiAJfQogCi0JLyogY2hlY2sgaWYgd2UgbmVlZCBoYW5kbGUgaXQgYW5kIGNhbiBoYW5kbGUgaXQgKi8KKwkvKiBDaGVjayBpZiB3ZSBuZWVkIGhhbmRsZSBpdCBhbmQgY2FuIGhhbmRsZSBpdDogKi8KIAlpZiAoIW10cnJfbmVlZF9jbGVhbnVwKCkpCiAJCXJldHVybiAwOwogCi0JLyogcHJpbnQgb3JpZ2luYWwgdmFyIE1UUlJzIGF0IGZpcnN0LCBmb3IgZGVidWdnaW5nOiAqLworCS8qIFByaW50IG9yaWdpbmFsIHZhciBNVFJScyBhdCBmaXJzdCwgZm9yIGRlYnVnZ2luZzogKi8KIAlwcmludGsoS0VSTl9ERUJVRyAib3JpZ2luYWwgdmFyaWFibGUgTVRSUnNcbiIpOwogCXByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKCk7CiAKIAltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOwotCWV4dHJhX3JlbW92ZV9zaXplID0gMDsKLQlleHRyYV9yZW1vdmVfYmFzZSA9IDEgPDwgKDMyIC0gUEFHRV9TSElGVCk7CisJeF9yZW1vdmVfc2l6ZSA9IDA7CisJeF9yZW1vdmVfYmFzZSA9IDEgPDwgKDMyIC0gUEFHRV9TSElGVCk7CiAJaWYgKG10cnJfdG9tMikKLQkJZXh0cmFfcmVtb3ZlX3NpemUgPQotCQkJKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIGV4dHJhX3JlbW92ZV9iYXNlOwotCW5yX3JhbmdlID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZSwgMCwgZXh0cmFfcmVtb3ZlX2Jhc2UsCi0JCQkJCSAgZXh0cmFfcmVtb3ZlX3NpemUpOworCQl4X3JlbW92ZV9zaXplID0gKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIHhfcmVtb3ZlX2Jhc2U7CisKKwlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIDAsIHhfcmVtb3ZlX2Jhc2UsIHhfcmVtb3ZlX3NpemUpOwogCS8qCi0JICogWzAsIDFNKSBzaG91bGQgYWx3YXlzIGJlIGNvdmVycmVkIGJ5IHZhciBtdHJyIHdpdGggV0IKLQkgKiBhbmQgZml4ZWQgbXRycnMgc2hvdWxkIHRha2UgZWZmZWN0aXZlIGJlZm9yZSB2YXIgbXRyciBmb3IgaXQKKwkgKiBbMCwgMU0pIHNob3VsZCBhbHdheXMgYmUgY292ZXJlZCBieSB2YXIgbXRyciB3aXRoIFdCCisJICogYW5kIGZpeGVkIG10cnJzIHNob3VsZCB0YWtlIGVmZmVjdCBiZWZvcmUgdmFyIG10cnIgZm9yIGl0OgogCSAqLwogCW5yX3JhbmdlID0gYWRkX3JhbmdlX3dpdGhfbWVyZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLAogCQkJCQkoMVVMTDw8KDIwIC0gUEFHRV9TSElGVCkpIC0gMSk7Ci0JLyogc29ydCB0aGUgcmFuZ2VzICovCisJLyogU29ydCB0aGUgcmFuZ2VzOiAqLwogCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CiAKIAlyYW5nZV9zdW1zID0gc3VtX3JhbmdlcyhyYW5nZSwgbnJfcmFuZ2UpOwpAQCAtODU0LDcgKzg1Miw3IEBACiAJaWYgKG10cnJfY2h1bmtfc2l6ZSAmJiBtdHJyX2dyYW5fc2l6ZSkgewogCQlpID0gMDsKIAkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKG10cnJfY2h1bmtfc2l6ZSwgbXRycl9ncmFuX3NpemUsCi0JCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKKwkJCQkgICAgICB4X3JlbW92ZV9iYXNlLCB4X3JlbW92ZV9zaXplLCBpKTsKIAogCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOwogCkBAIC04ODAsNyArODc4LDcgQEAKIAkJCQljb250aW51ZTsKIAogCQkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKGNodW5rX3NpemUsIGdyYW5fc2l6ZSwKLQkJCQkgICAgICBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUsIGkpOworCQkJCSAgICAgIHhfcmVtb3ZlX2Jhc2UsIHhfcmVtb3ZlX3NpemUsIGkpOwogCQkJaWYgKGRlYnVnX3ByaW50KSB7CiAJCQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOwpAQCAtODkwLDcgKzg4OCw3IEBACiAJCX0KIAl9CiAKLQkvKiB0cnkgdG8gZmluZCB0aGUgb3B0aW1hbCBpbmRleCAqLworCS8qIFRyeSB0byBmaW5kIHRoZSBvcHRpbWFsIGluZGV4OiAqLwogCWluZGV4X2dvb2QgPSBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KCk7CiAKIAlpZiAoaW5kZXhfZ29vZCAhPSAtMSkgewpAQCAtODk4LDcgKzg5Niw3IEBACiAJCWkgPSBpbmRleF9nb29kOwogCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOwogCi0JCS8qIGNvbnZlcnQgcmFuZ2VzIHRvIHZhciByYW5nZXMgc3RhdGUgKi8KKwkJLyogQ29udmVydCByYW5nZXMgdG8gdmFyIHJhbmdlcyBzdGF0ZTogKi8KIAkJY2h1bmtfc2l6ZSA9IHJlc3VsdFtpXS5jaHVua19zaXplazsKIAkJY2h1bmtfc2l6ZSA8PD0gMTA7CiAJCWdyYW5fc2l6ZSA9IHJlc3VsdFtpXS5ncmFuX3NpemVrOwpAQCAtOTQxLDggKzkzOSw4IEBACiAgKiBOb3RlIHRoaXMgd29uJ3QgY2hlY2sgaWYgdGhlIE1UUlJzIDwgNEdCIHdoZXJlIHRoZSBtYWdpYyBiaXQgZG9lc24ndAogICogYXBwbHkgdG8gYXJlIHdyb25nLCBidXQgc28gZmFyIHdlIGRvbid0IGtub3cgb2YgYW55IHN1Y2ggY2FzZSBpbiB0aGUgd2lsZC4KICAqLwotI2RlZmluZSBUb20yRW5hYmxlZCAoMVUgPDwgMjEpCi0jZGVmaW5lIFRvbTJGb3JjZU1lbVR5cGVXQiAoMVUgPDwgMjIpCisjZGVmaW5lIFRvbTJFbmFibGVkCQkoMVUgPDwgMjEpCisjZGVmaW5lIFRvbTJGb3JjZU1lbVR5cGVXQgkoMVUgPDwgMjIpCiAKIGludCBfX2luaXQgYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKHZvaWQpCiB7CkBAIC05NTIsNyArOTUwLDcgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgMHhmIHx8IGJvb3RfY3B1X2RhdGEueDg2ID4gMHgxMSkKIAkJcmV0dXJuIDA7Ci0JLyogSW4gY2FzZSBzb21lIGh5cGVydmlzb3IgZG9lc24ndCBwYXNzIFNZU0NGRyB0aHJvdWdoICovCisJLyogSW4gY2FzZSBzb21lIGh5cGVydmlzb3IgZG9lc24ndCBwYXNzIFNZU0NGRyB0aHJvdWdoOiAqLwogCWlmIChyZG1zcl9zYWZlKE1TUl9LOF9TWVNDRkcsICZsLCAmaCkgPCAwKQogCQlyZXR1cm4gMDsKIAkvKgpAQCAtOTY1LDE5ICs5NjMsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHU2NCBfX2luaXQgcmVhbF90cmltX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGxpbWl0X3BmbikKK3N0YXRpYyB1NjQgX19pbml0CityZWFsX3RyaW1fbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGxpbWl0X3BmbikKIHsKIAl1NjQgdHJpbV9zdGFydCwgdHJpbV9zaXplOworCiAJdHJpbV9zdGFydCA9IHN0YXJ0X3BmbjsKIAl0cmltX3N0YXJ0IDw8PSBQQUdFX1NISUZUOworCiAJdHJpbV9zaXplID0gbGltaXRfcGZuOwogCXRyaW1fc2l6ZSA8PD0gUEFHRV9TSElGVDsKIAl0cmltX3NpemUgLT0gdHJpbV9zdGFydDsKIAotCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZSh0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkFNLAotCQkJCUU4MjBfUkVTRVJWRUQpOworCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZSh0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKIH0KKwogLyoqCiAgKiBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5IC0gdHJpbSBSQU0gbm90IGNvdmVyZWQgYnkgTVRSUnMKICAqIEBlbmRfcGZuOiBlbmRpbmcgcGFnZSBmcmFtZSBudW1iZXIKQEAgLTk4NSw3ICs5ODUsNyBAQAogICogU29tZSBidWdneSBCSU9TZXMgZG9uJ3Qgc2V0dXAgdGhlIE1UUlJzIHByb3Blcmx5IGZvciBzeXN0ZW1zIHdpdGggY2VydGFpbgogICogbWVtb3J5IGNvbmZpZ3VyYXRpb25zLiAgVGhpcyByb3V0aW5lIGNoZWNrcyB0aGF0IHRoZSBoaWdoZXN0IE1UUlIgbWF0Y2hlcwogICogdGhlIGVuZCBvZiBtZW1vcnksIHRvIG1ha2Ugc3VyZSB0aGUgTVRSUnMgaGF2aW5nIGEgd3JpdGUgYmFjayB0eXBlIGNvdmVyCi0gKiBhbGwgb2YgdGhlIG1lbW9yeSB0aGUga2VybmVsIGlzIGludGVuZGluZyB0byB1c2UuIElmIG5vdCwgaXQnbGwgdHJpbSBhbnkKKyAqIGFsbCBvZiB0aGUgbWVtb3J5IHRoZSBrZXJuZWwgaXMgaW50ZW5kaW5nIHRvIHVzZS4gIElmIG5vdCwgaXQnbGwgdHJpbSBhbnkKICAqIG1lbW9yeSBvZmYgdGhlIGVuZCBieSBhZGp1c3RpbmcgZW5kX3BmbiwgcmVtb3ZpbmcgaXQgZnJvbSB0aGUga2VybmVsJ3MKICAqIGFsbG9jYXRpb24gcG9vbHMsIHdhcm5pbmcgdGhlIHVzZXIgd2l0aCBhbiBvYm5veGlvdXMgbWVzc2FnZS4KICAqLwpAQCAtOTk0LDIxICs5OTQsMjIgQEAKIAl1bnNpZ25lZCBsb25nIGksIGJhc2UsIHNpemUsIGhpZ2hlc3RfcGZuID0gMCwgZGVmLCBkdW1teTsKIAltdHJyX3R5cGUgdHlwZTsKIAl1NjQgdG90YWxfdHJpbV9zaXplOwotCiAJLyogZXh0cmEgb25lIGZvciBhbGwgMCAqLwogCWludCBudW1bTVRSUl9OVU1fVFlQRVMgKyAxXTsKKwogCS8qCiAJICogTWFrZSBzdXJlIHdlIG9ubHkgdHJpbSB1bmNhY2hhYmxlIG1lbW9yeSBvbiBtYWNoaW5lcyB0aGF0CiAJICogc3VwcG9ydCB0aGUgSW50ZWwgTVRSUiBhcmNoaXRlY3R1cmU6CiAJICovCiAJaWYgKCFpc19jcHUoSU5URUwpIHx8IGRpc2FibGVfbXRycl90cmltKQogCQlyZXR1cm4gMDsKKwogCXJkbXNyKE1TUl9NVFJSZGVmVHlwZSwgZGVmLCBkdW1teSk7CiAJZGVmICY9IDB4ZmY7CiAJaWYgKGRlZiAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKIAkJcmV0dXJuIDA7CiAKLQkvKiBnZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlICovCisJLyogR2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZTogKi8KIAltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCW10cnJfaWYtPmdldChpLCAmYmFzZSwgJnNpemUsICZ0eXBlKTsKQEAgLTEwMTcsNyArMTAxOCw3IEBACiAJCXJhbmdlX3N0YXRlW2ldLnR5cGUgPSB0eXBlOwogCX0KIAotCS8qIEZpbmQgaGlnaGVzdCBjYWNoZWQgcGZuICovCisJLyogRmluZCBoaWdoZXN0IGNhY2hlZCBwZm46ICovCiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKIAkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CiAJCWlmICh0eXBlICE9IE1UUlJfVFlQRV9XUkJBQ0spCkBAIC0xMDI4LDEzICsxMDI5LDEzIEBACiAJCQloaWdoZXN0X3BmbiA9IGJhc2UgKyBzaXplOwogCX0KIAotCS8qIGt2bS9xZW11IGRvZXNuJ3QgaGF2ZSBtdHJyIHNldCByaWdodCwgZG9uJ3QgdHJpbSB0aGVtIGFsbCAqLworCS8qIGt2bS9xZW11IGRvZXNuJ3QgaGF2ZSBtdHJyIHNldCByaWdodCwgZG9uJ3QgdHJpbSB0aGVtIGFsbDogKi8KIAlpZiAoIWhpZ2hlc3RfcGZuKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIkNQVSBNVFJScyBhbGwgYmxhbmsgLSB2aXJ0dWFsaXplZCBzeXN0ZW0uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KKwkvKiBDaGVjayBlbnRyaWVzIG51bWJlcjogKi8KIAltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7CiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKIAkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CkBAIC0xMDQ2LDExICsxMDQ3LDExIEBACiAJCW51bVt0eXBlXSsrOwogCX0KIAotCS8qIG5vIGVudHJ5IGZvciBXQj8gKi8KKwkvKiBObyBlbnRyeSBmb3IgV0I/ICovCiAJaWYgKCFudW1bTVRSUl9UWVBFX1dSQkFDS10pCiAJCXJldHVybiAwOwogCi0JLyogY2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDICovCisJLyogQ2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDOiAqLwogCWlmIChudW1bTVRSUl9UWVBFX1dSQkFDS10gKyBudW1bTVRSUl9UWVBFX1VOQ0FDSEFCTEVdICE9CiAJCW51bV92YXJfcmFuZ2VzIC0gbnVtW01UUlJfTlVNX1RZUEVTXSkKIAkJcmV0dXJuIDA7CkBAIC0xMDY2LDMxICsxMDY3LDMxIEBACiAJfQogCW5yX3JhbmdlID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIDAsIDApOwogCisJLyogQ2hlY2sgdGhlIGhlYWQ6ICovCiAJdG90YWxfdHJpbV9zaXplID0gMDsKLQkvKiBjaGVjayB0aGUgaGVhZCAqLwogCWlmIChyYW5nZVswXS5zdGFydCkKIAkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkoMCwgcmFuZ2VbMF0uc3RhcnQpOwotCS8qIGNoZWNrIHRoZSBob2xlcyAqLworCisJLyogQ2hlY2sgdGhlIGhvbGVzOiAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewogCQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IHJhbmdlW2krMV0uc3RhcnQpCiAJCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAogCQkJCQkJCSAgICByYW5nZVtpKzFdLnN0YXJ0KTsKIAl9Ci0JLyogY2hlY2sgdGhlIHRvcCAqLworCisJLyogQ2hlY2sgdGhlIHRvcDogKi8KIAlpID0gbnJfcmFuZ2UgLSAxOwogCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgZW5kX3BmbikKIAkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kICsgMSwKIAkJCQkJCQkgZW5kX3Bmbik7CiAKIAlpZiAodG90YWxfdHJpbV9zaXplKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IEJJT1MgYnVnOiBDUFUgTVRSUnMgZG9uJ3QgY292ZXIiCi0JCQkiIGFsbCBvZiBtZW1vcnksIGxvc2luZyAlbGx1TUIgb2YgUkFNLlxuIiwKLQkJCXRvdGFsX3RyaW1fc2l6ZSA+PiAyMCk7CisJCXByX3dhcm5pbmcoIldBUk5JTkc6IEJJT1MgYnVnOiBDUFUgTVRSUnMgZG9uJ3QgY292ZXIgYWxsIG9mIG1lbW9yeSwgbG9zaW5nICVsbHVNQiBvZiBSQU0uXG4iLCB0b3RhbF90cmltX3NpemUgPj4gMjApOwogCiAJCWlmICghY2hhbmdlZF9ieV9tdHJyX2NsZWFudXApCiAJCQlXQVJOX09OKDEpOwogCi0JCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBtdHJyXG4iKTsKKwkJcHJfaW5mbygidXBkYXRlIGU4MjAgZm9yIG10cnJcbiIpOwogCQl1cGRhdGVfZTgyMCgpOwogCiAJCXJldHVybiAxOwpAQCAtMTA5OCw0ICsxMDk5LDMgQEAKIAogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCmluZGV4IGZmMTRjMzIuLjIyOGQ5ODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jeXJpeC5jCkBAIC0xLDM4ICsxLDQwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItY3lyaXguaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisKICNpbmNsdWRlICJtdHJyLmgiCiAKIHN0YXRpYyB2b2lkCiBjeXJpeF9nZXRfYXJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgKmJhc2UsCiAJICAgICAgdW5zaWduZWQgbG9uZyAqc2l6ZSwgbXRycl90eXBlICogdHlwZSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgYXJyLCBjY3IzLCByY3IsIHNoaWZ0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlhcnIgPSBDWDg2X0FSUl9CQVNFICsgKHJlZyA8PCAxKSArIHJlZzsJLyogYXZvaWQgbXVsdGlwbGljYXRpb24gYnkgMyAqLwogCi0JLyogU2F2ZSBmbGFncyBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJY2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKIAlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOwkvKiBlbmFibGUgTUFQRU4gKi8KLQkoKHVuc2lnbmVkIGNoYXIgKikgYmFzZSlbM10gPSBnZXRDeDg2KGFycik7Ci0JKCh1bnNpZ25lZCBjaGFyICopIGJhc2UpWzJdID0gZ2V0Q3g4NihhcnIgKyAxKTsKLQkoKHVuc2lnbmVkIGNoYXIgKikgYmFzZSlbMV0gPSBnZXRDeDg2KGFyciArIDIpOworCSgodW5zaWduZWQgY2hhciAqKWJhc2UpWzNdID0gZ2V0Q3g4NihhcnIpOworCSgodW5zaWduZWQgY2hhciAqKWJhc2UpWzJdID0gZ2V0Q3g4NihhcnIgKyAxKTsKKwkoKHVuc2lnbmVkIGNoYXIgKiliYXNlKVsxXSA9IGdldEN4ODYoYXJyICsgMik7CiAJcmNyID0gZ2V0Q3g4NihDWDg2X1JDUl9CQVNFICsgcmVnKTsKLQlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7CS8qIGRpc2FibGUgTUFQRU4gKi8KKwlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7CQkJLyogZGlzYWJsZSBNQVBFTiAqLwogCi0JLyogRW5hYmxlIGludGVycnVwdHMgaWYgaXQgd2FzIGVuYWJsZWQgcHJldmlvdXNseSAqLwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogCXNoaWZ0ID0gKCh1bnNpZ25lZCBjaGFyICopIGJhc2UpWzFdICYgMHgwZjsKIAkqYmFzZSA+Pj0gUEFHRV9TSElGVDsKIAotCS8qIFBvd2VyIG9mIHR3bywgYXQgbGVhc3QgNEsgb24gQVJSMC1BUlI2LCAyNTZLIG9uIEFSUjcKKwkvKgorCSAqIFBvd2VyIG9mIHR3bywgYXQgbGVhc3QgNEsgb24gQVJSMC1BUlI2LCAyNTZLIG9uIEFSUjcKIAkgKiBOb3RlOiBzaGlmdD09MHhmIG1lYW5zIDRHLCB0aGlzIGlzIHVuc3VwcG9ydGVkLgogCSAqLwogCWlmIChzaGlmdCkKQEAgLTc2LDE3ICs3OCwyMCBAQAogCX0KIH0KIAorLyoKKyAqIGN5cml4X2dldF9mcmVlX3JlZ2lvbiAtIGdldCBhIGZyZWUgQVJSLgorICoKKyAqIEBiYXNlOiB0aGUgc3RhcnRpbmcgKGJhc2UpIGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi4KKyAqIEBzaXplOiB0aGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSByZWdpb24uCisgKgorICogUmV0dXJuczogdGhlIGluZGV4IG9mIHRoZSByZWdpb24gb24gc3VjY2VzcywgZWxzZSAtMSBvbiBlcnJvci4KKyovCiBzdGF0aWMgaW50CiBjeXJpeF9nZXRfZnJlZV9yZWdpb24odW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCByZXBsYWNlX3JlZykKLS8qICBbU1VNTUFSWV0gR2V0IGEgZnJlZSBBUlIuCi0gICAgPGJhc2U+IFRoZSBzdGFydGluZyAoYmFzZSkgYWRkcmVzcyBvZiB0aGUgcmVnaW9uLgotICAgIDxzaXplPiBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSByZWdpb24uCi0gICAgW1JFVFVSTlNdIFRoZSBpbmRleCBvZiB0aGUgcmVnaW9uIG9uIHN1Y2Nlc3MsIGVsc2UgLTEgb24gZXJyb3IuCi0qLwogewotCWludCBpOwotCW10cnJfdHlwZSBsdHlwZTsKIAl1bnNpZ25lZCBsb25nIGxiYXNlLCBsc2l6ZTsKKwltdHJyX3R5cGUgbHR5cGU7CisJaW50IGk7CiAKIAlzd2l0Y2ggKHJlcGxhY2VfcmVnKSB7CiAJY2FzZSA3OgpAQCAtMTA3LDE0ICsxMTIsMTcgQEAKIAkJY3lyaXhfZ2V0X2Fycig3LCAmbGJhc2UsICZsc2l6ZSwgJmx0eXBlKTsKIAkJaWYgKGxzaXplID09IDApCiAJCQlyZXR1cm4gNzsKLQkJLyogIEVsc2UgdHJ5IEFSUjAtQVJSNiBmaXJzdCAgKi8KKwkJLyogRWxzZSB0cnkgQVJSMC1BUlI2IGZpcnN0ICAqLwogCX0gZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKIAkJCWN5cml4X2dldF9hcnIoaSwgJmxiYXNlLCAmbHNpemUsICZsdHlwZSk7CiAJCQlpZiAobHNpemUgPT0gMCkKIAkJCQlyZXR1cm4gaTsKIAkJfQotCQkvKiBBUlIwLUFSUjYgaXNuJ3QgZnJlZSwgdHJ5IEFSUjcgYnV0IGl0cyBzaXplIG11c3QgYmUgYXQgbGVhc3QgMjU2SyAqLworCQkvKgorCQkgKiBBUlIwLUFSUjYgaXNuJ3QgZnJlZQorCQkgKiB0cnkgQVJSNyBidXQgaXRzIHNpemUgbXVzdCBiZSBhdCBsZWFzdCAyNTZLCisJCSAqLwogCQljeXJpeF9nZXRfYXJyKGksICZsYmFzZSwgJmxzaXplLCAmbHR5cGUpOwogCQlpZiAoKGxzaXplID09IDApICYmIChzaXplID49IDB4NDApKQogCQkJcmV0dXJuIGk7CkBAIC0xMjIsMjEgKzEzMCwyMiBAQAogCXJldHVybiAtRU5PU1BDOwogfQogCi1zdGF0aWMgdTMyIGNyNCA9IDA7Ci1zdGF0aWMgdTMyIGNjcjM7CitzdGF0aWMgdTMyIGNyNCwgY2NyMzsKIAogc3RhdGljIHZvaWQgcHJlcGFyZV9zZXQodm9pZCkKIHsKIAl1MzIgY3IwOwogCiAJLyogIFNhdmUgdmFsdWUgb2YgQ1I0IGFuZCBjbGVhciBQYWdlIEdsb2JhbCBFbmFibGUgKGJpdCA3KSAgKi8KLQlpZiAoIGNwdV9oYXNfcGdlICkgeworCWlmIChjcHVfaGFzX3BnZSkgewogCQljcjQgPSByZWFkX2NyNCgpOwogCQl3cml0ZV9jcjQoY3I0ICYgflg4Nl9DUjRfUEdFKTsKIAl9CiAKLQkvKiAgRGlzYWJsZSBhbmQgZmx1c2ggY2FjaGVzLiBOb3RlIHRoYXQgd2JpbnZkIGZsdXNoZXMgdGhlIFRMQnMgYXMKLQkgICAgYSBzaWRlLWVmZmVjdCAgKi8KKwkvKgorCSAqIERpc2FibGUgYW5kIGZsdXNoIGNhY2hlcy4KKwkgKiBOb3RlIHRoYXQgd2JpbnZkIGZsdXNoZXMgdGhlIFRMQnMgYXMgYSBzaWRlLWVmZmVjdAorCSAqLwogCWNyMCA9IHJlYWRfY3IwKCkgfCBYODZfQ1IwX0NEOwogCXdiaW52ZCgpOwogCXdyaXRlX2NyMChjcjApOwpAQCAtMTQ3LDIyICsxNTYsMjEgQEAKIAogCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2FzIGV4Y2x1ZGVkIGF0IHRoZSB0b3AgKi8KIAlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOwotCiB9CiAKIHN0YXRpYyB2b2lkIHBvc3Rfc2V0KHZvaWQpCiB7Ci0JLyogIEZsdXNoIGNhY2hlcyBhbmQgVExCcyAgKi8KKwkvKiBGbHVzaCBjYWNoZXMgYW5kIFRMQnMgKi8KIAl3YmludmQoKTsKIAogCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2FzIGV4Y2x1ZGVkIGF0IHRoZSB0b3AgKi8KIAlzZXRDeDg2KENYODZfQ0NSMywgY2NyMyk7Ci0JCQotCS8qICBFbmFibGUgY2FjaGVzICAqLworCisJLyogRW5hYmxlIGNhY2hlcyAqLwogCXdyaXRlX2NyMChyZWFkX2NyMCgpICYgMHhiZmZmZmZmZik7CiAKLQkvKiAgUmVzdG9yZSB2YWx1ZSBvZiBDUjQgICovCi0JaWYgKCBjcHVfaGFzX3BnZSApCisJLyogUmVzdG9yZSB2YWx1ZSBvZiBDUjQgKi8KKwlpZiAoY3B1X2hhc19wZ2UpCiAJCXdyaXRlX2NyNChjcjQpOwogfQogCkBAIC0xNzgsNyArMTg2LDggQEAKIAkJc2l6ZSA+Pj0gNjsKIAogCXNpemUgJj0gMHg3ZmZmOwkJLyogbWFrZSBzdXJlIGFycl9zaXplIDw9IDE0ICovCi0JZm9yIChhcnJfc2l6ZSA9IDA7IHNpemU7IGFycl9zaXplKyssIHNpemUgPj49IDEpIDsKKwlmb3IgKGFycl9zaXplID0gMDsgc2l6ZTsgYXJyX3NpemUrKywgc2l6ZSA+Pj0gMSkKKwkJOwogCiAJaWYgKHJlZyA8IDcpIHsKIAkJc3dpdGNoICh0eXBlKSB7CkBAIC0yMTUsMTggKzIyNCwxOCBAQAogCXByZXBhcmVfc2V0KCk7CiAKIAliYXNlIDw8PSBQQUdFX1NISUZUOwotCXNldEN4ODYoYXJyLCAoKHVuc2lnbmVkIGNoYXIgKikgJmJhc2UpWzNdKTsKLQlzZXRDeDg2KGFyciArIDEsICgodW5zaWduZWQgY2hhciAqKSAmYmFzZSlbMl0pOwotCXNldEN4ODYoYXJyICsgMiwgKCgodW5zaWduZWQgY2hhciAqKSAmYmFzZSlbMV0pIHwgYXJyX3NpemUpOworCXNldEN4ODYoYXJyICsgMCwgICgodW5zaWduZWQgY2hhciAqKSZiYXNlKVszXSk7CisJc2V0Q3g4NihhcnIgKyAxLCAgKCh1bnNpZ25lZCBjaGFyICopJmJhc2UpWzJdKTsKKwlzZXRDeDg2KGFyciArIDIsICgoKHVuc2lnbmVkIGNoYXIgKikmYmFzZSlbMV0pIHwgYXJyX3NpemUpOwogCXNldEN4ODYoQ1g4Nl9SQ1JfQkFTRSArIHJlZywgYXJyX3R5cGUpOwogCiAJcG9zdF9zZXQoKTsKIH0KIAogdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgYmFzZTsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JbXRycl90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZwliYXNlOworCXVuc2lnbmVkIGxvbmcJc2l6ZTsKKwltdHJyX3R5cGUJdHlwZTsKIH0gYXJyX3N0YXRlX3Q7CiAKIHN0YXRpYyBhcnJfc3RhdGVfdCBhcnJfc3RhdGVbOF0gPSB7CkBAIC0yNDcsMTYgKzI1NiwxNyBAQAogCQlzZXRDeDg2KENYODZfQ0NSMCArIGksIGNjcl9zdGF0ZVtpXSk7CiAJZm9yICg7IGkgPCA3OyBpKyspCiAJCXNldEN4ODYoQ1g4Nl9DQ1I0ICsgaSwgY2NyX3N0YXRlW2ldKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQljeXJpeF9zZXRfYXJyKGksIGFycl9zdGF0ZVtpXS5iYXNlLCAKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJY3lyaXhfc2V0X2FycihpLCBhcnJfc3RhdGVbaV0uYmFzZSwKIAkJCSAgICAgIGFycl9zdGF0ZVtpXS5zaXplLCBhcnJfc3RhdGVbaV0udHlwZSk7CisJfQogCiAJcG9zdF9zZXQoKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtdHJyX29wcyBjeXJpeF9tdHJyX29wcyA9IHsKIAkudmVuZG9yICAgICAgICAgICAgPSBYODZfVkVORE9SX0NZUklYLAotLy8JLmluaXQgICAgICAgICAgICAgID0gY3lyaXhfYXJyX2luaXQsCiAJLnNldF9hbGwJICAgPSBjeXJpeF9zZXRfYWxsLAogCS5zZXQgICAgICAgICAgICAgICA9IGN5cml4X3NldF9hcnIsCiAJLmdldCAgICAgICAgICAgICAgID0gY3lyaXhfZ2V0X2FyciwKQEAgLTI3MCw1ICsyODAsMyBAQAogCXNldF9tdHJyX29wcygmY3lyaXhfbXRycl9vcHMpOwogCXJldHVybiAwOwogfQotCi0vL2FyY2hfaW5pdGNhbGwoY3lyaXhfaW5pdF9tdHJyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCmluZGV4IDA1NDNmNjkuLjU1ZGEwYzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwpAQCAtMSwyOCArMSwzNCBAQAotLyogVGhpcyBvbmx5IGhhbmRsZXMgMzJiaXQgTVRSUiBvbiAzMmJpdCBob3N0cy4gVGhpcyBpcyBzdHJpY3RseSB3cm9uZwotICAgYmVjYXVzZSBNVFJScyBjYW4gc3BhbiB1cHRvIDQwIGJpdHMgKDM2Yml0cyBvbiBtb3N0IG1vZGVybiB4ODYpICovIAorLyoKKyAqIFRoaXMgb25seSBoYW5kbGVzIDMyYml0IE1UUlIgb24gMzJiaXQgaG9zdHMuIFRoaXMgaXMgc3RyaWN0bHkgd3JvbmcKKyAqIGJlY2F1c2UgTVRSUnMgY2FuIHNwYW4gdXB0byA0MCBiaXRzICgzNmJpdHMgb24gbW9zdCBtb2Rlcm4geDg2KQorICovCisjZGVmaW5lIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWZsYWdzLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhdC5oPgorCiAjaW5jbHVkZSAibXRyci5oIgogCiBzdHJ1Y3QgZml4ZWRfcmFuZ2VfYmxvY2sgewotCWludCBiYXNlX21zcjsgLyogc3RhcnQgYWRkcmVzcyBvZiBhbiBNVFJSIGJsb2NrICovCi0JaW50IHJhbmdlczsgICAvKiBudW1iZXIgb2YgTVRSUnMgaW4gdGhpcyBibG9jayAgKi8KKwlpbnQgYmFzZV9tc3I7CQkvKiBzdGFydCBhZGRyZXNzIG9mIGFuIE1UUlIgYmxvY2sgKi8KKwlpbnQgcmFuZ2VzOwkJLyogbnVtYmVyIG9mIE1UUlJzIGluIHRoaXMgYmxvY2sgICovCiB9OwogCiBzdGF0aWMgc3RydWN0IGZpeGVkX3JhbmdlX2Jsb2NrIGZpeGVkX3JhbmdlX2Jsb2Nrc1tdID0gewotCXsgTVNSX01UUlJmaXg2NEtfMDAwMDAsIDEgfSwgLyogb25lICA2NGsgTVRSUiAgKi8KLQl7IE1TUl9NVFJSZml4MTZLXzgwMDAwLCAyIH0sIC8qIHR3byAgMTZrIE1UUlJzICovCi0JeyBNU1JfTVRSUmZpeDRLX0MwMDAwLCAgOCB9LCAvKiBlaWdodCA0ayBNVFJScyAqLworCXsgTVNSX01UUlJmaXg2NEtfMDAwMDAsIDEgfSwgLyogb25lICAgNjRrIE1UUlIgICovCisJeyBNU1JfTVRSUmZpeDE2S184MDAwMCwgMiB9LCAvKiB0d28gICAxNmsgTVRSUnMgKi8KKwl7IE1TUl9NVFJSZml4NEtfQzAwMDAsICA4IH0sIC8qIGVpZ2h0ICA0ayBNVFJScyAqLwogCXt9CiB9OwogCkBAIC0zMCwxMCArMzYsMTAgQEAKIHN0YXRpYyBpbnQgbXRycl9zdGF0ZV9zZXQ7CiB1NjQgbXRycl90b20yOwogCi1zdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGUgPSB7fTsKK3N0cnVjdCBtdHJyX3N0YXRlX3R5cGUgbXRycl9zdGF0ZTsKIEVYUE9SVF9TWU1CT0xfR1BMKG10cnJfc3RhdGUpOwogCi0vKioKKy8qCiAgKiBCSU9TIGlzIGV4cGVjdGVkIHRvIGNsZWFyIE10cnJGaXhEcmFtTW9kRW4gYml0LCBzZWUgZm9yIGV4YW1wbGUKICAqICJCSU9TIGFuZCBLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgZm9yIHRoZSBBTUQgQXRobG9uIDY0IGFuZCBBTUQKICAqIE9wdGVyb24gUHJvY2Vzc29ycyIgKDI2MDk0IFJldi4gMy4zMCBGZWJydWFyeSAyMDA2KSwgc2VjdGlvbgpAQCAtMTA0LDkgKzExMCw4IEBACiAJICogTG9vayBvZiBtdWx0aXBsZSByYW5nZXMgbWF0Y2hpbmcgdGhpcyBhZGRyZXNzIGFuZCBwaWNrIHR5cGUKIAkgKiBhcyBwZXIgTVRSUiBwcmVjZWRlbmNlCiAJICovCi0JaWYgKCEobXRycl9zdGF0ZS5lbmFibGVkICYgMikpIHsKKwlpZiAoIShtdHJyX3N0YXRlLmVuYWJsZWQgJiAyKSkKIAkJcmV0dXJuIG10cnJfc3RhdGUuZGVmX3R5cGU7Ci0JfQogCiAJcHJldl9tYXRjaCA9IDB4RkY7CiAJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyArK2kpIHsKQEAgLTEyNSw5ICsxMzAsOCBAQAogCQlpZiAoc3RhcnRfc3RhdGUgIT0gZW5kX3N0YXRlKQogCQkJcmV0dXJuIDB4RkU7CiAKLQkJaWYgKChzdGFydCAmIG1hc2spICE9IChiYXNlICYgbWFzaykpIHsKKwkJaWYgKChzdGFydCAmIG1hc2spICE9IChiYXNlICYgbWFzaykpCiAJCQljb250aW51ZTsKLQkJfQogCiAJCWN1cnJfbWF0Y2ggPSBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9sbyAmIDB4ZmY7CiAJCWlmIChwcmV2X21hdGNoID09IDB4RkYpIHsKQEAgLTE0OCw5ICsxNTIsOCBAQAogCQkJY3Vycl9tYXRjaCA9IE1UUlJfVFlQRV9XUlRIUk9VR0g7CiAJCX0KIAotCQlpZiAocHJldl9tYXRjaCAhPSBjdXJyX21hdGNoKSB7CisJCWlmIChwcmV2X21hdGNoICE9IGN1cnJfbWF0Y2gpCiAJCQlyZXR1cm4gTVRSUl9UWVBFX1VOQ0FDSEFCTEU7Ci0JCX0KIAl9CiAKIAlpZiAobXRycl90b20yKSB7CkBAIC0xNjQsNyArMTY3LDcgQEAKIAlyZXR1cm4gbXRycl9zdGF0ZS5kZWZfdHlwZTsKIH0KIAotLyogIEdldCB0aGUgTVNSIHBhaXIgcmVsYXRpbmcgdG8gYSB2YXIgcmFuZ2UgICovCisvKiBHZXQgdGhlIE1TUiBwYWlyIHJlbGF0aW5nIHRvIGEgdmFyIHJhbmdlICovCiBzdGF0aWMgdm9pZAogZ2V0X210cnJfdmFyX3JhbmdlKHVuc2lnbmVkIGludCBpbmRleCwgc3RydWN0IG10cnJfdmFyX3JhbmdlICp2cikKIHsKQEAgLTE3Miw3ICsxNzUsNyBAQAogCXJkbXNyKE1UUlJwaHlzTWFza19NU1IoaW5kZXgpLCB2ci0+bWFza19sbywgdnItPm1hc2tfaGkpOwogfQogCi0vKiAgZmlsbCB0aGUgTVNSIHBhaXIgcmVsYXRpbmcgdG8gYSB2YXIgcmFuZ2UgICovCisvKiBGaWxsIHRoZSBNU1IgcGFpciByZWxhdGluZyB0byBhIHZhciByYW5nZSAqLwogdm9pZCBmaWxsX210cnJfdmFyX3JhbmdlKHVuc2lnbmVkIGludCBpbmRleCwKIAkJdTMyIGJhc2VfbG8sIHUzMiBiYXNlX2hpLCB1MzIgbWFza19sbywgdTMyIG1hc2tfaGkpCiB7CkBAIC0xODYsMTAgKzE4OSw5IEBACiAJdnJbaW5kZXhdLm1hc2tfaGkgPSBtYXNrX2hpOwogfQogCi1zdGF0aWMgdm9pZAotZ2V0X2ZpeGVkX3JhbmdlcyhtdHJyX3R5cGUgKiBmcnMpCitzdGF0aWMgdm9pZCBnZXRfZml4ZWRfcmFuZ2VzKG10cnJfdHlwZSAqZnJzKQogewotCXVuc2lnbmVkIGludCAqcCA9ICh1bnNpZ25lZCBpbnQgKikgZnJzOworCXVuc2lnbmVkIGludCAqcCA9ICh1bnNpZ25lZCBpbnQgKilmcnM7CiAJaW50IGk7CiAKIAlrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4oKTsKQEAgLTIxNywyMiArMjE5LDIyIEBACiAJaWYgKCFsYXN0X2ZpeGVkX2VuZCkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiAgJTA1WC0lMDVYICVzXG4iLCBsYXN0X2ZpeGVkX3N0YXJ0LAotCQlsYXN0X2ZpeGVkX2VuZCAtIDEsIG10cnJfYXR0cmliX3RvX3N0cihsYXN0X2ZpeGVkX3R5cGUpKTsKKwlwcl9kZWJ1ZygiICAlMDVYLSUwNVggJXNcbiIsIGxhc3RfZml4ZWRfc3RhcnQsCisJCSBsYXN0X2ZpeGVkX2VuZCAtIDEsIG10cnJfYXR0cmliX3RvX3N0cihsYXN0X2ZpeGVkX3R5cGUpKTsKIAogCWxhc3RfZml4ZWRfZW5kID0gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHVwZGF0ZV9maXhlZF9sYXN0KHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIGVuZCwKLQkJCQkgICAgICAgbXRycl90eXBlIHR5cGUpCisJCQkJICAgICBtdHJyX3R5cGUgdHlwZSkKIHsKIAlsYXN0X2ZpeGVkX3N0YXJ0ID0gYmFzZTsKIAlsYXN0X2ZpeGVkX2VuZCA9IGVuZDsKIAlsYXN0X2ZpeGVkX3R5cGUgPSB0eXBlOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfZml4ZWQodW5zaWduZWQgYmFzZSwgdW5zaWduZWQgc3RlcCwKLQkJCSAgICAgICBjb25zdCBtdHJyX3R5cGUgKnR5cGVzKQorc3RhdGljIHZvaWQgX19pbml0CitwcmludF9maXhlZCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBzdGVwLCBjb25zdCBtdHJyX3R5cGUgKnR5cGVzKQogewogCXVuc2lnbmVkIGk7CiAKQEAgLTI1OSw1NCArMjYxLDU1IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGhpZ2hfd2lkdGg7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBkZWZhdWx0IHR5cGU6ICVzXG4iLAotCQkJIG10cnJfYXR0cmliX3RvX3N0cihtdHJyX3N0YXRlLmRlZl90eXBlKSk7CisJcHJfZGVidWcoIk1UUlIgZGVmYXVsdCB0eXBlOiAlc1xuIiwKKwkJIG10cnJfYXR0cmliX3RvX3N0cihtdHJyX3N0YXRlLmRlZl90eXBlKSk7CiAJaWYgKG10cnJfc3RhdGUuaGF2ZV9maXhlZCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBmaXhlZCByYW5nZXMgJXNhYmxlZDpcbiIsCi0JCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAxID8gImVuIiA6ICJkaXMiKTsKKwkJcHJfZGVidWcoIk1UUlIgZml4ZWQgcmFuZ2VzICVzYWJsZWQ6XG4iLAorCQkJIG10cnJfc3RhdGUuZW5hYmxlZCAmIDEgPyAiZW4iIDogImRpcyIpOwogCQlwcmludF9maXhlZCgweDAwMDAwLCAweDEwMDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIDApOwogCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQotCQkJcHJpbnRfZml4ZWQoMHg4MDAwMCArIGkgKiAweDIwMDAwLCAweDA0MDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMSkgKiA4KTsKKwkJCXByaW50X2ZpeGVkKDB4ODAwMDAgKyBpICogMHgyMDAwMCwgMHgwNDAwMCwKKwkJCQkgICAgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDEpICogOCk7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCi0JCQlwcmludF9maXhlZCgweEMwMDAwICsgaSAqIDB4MDgwMDAsIDB4MDEwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgKGkgKyAzKSAqIDgpOworCQkJcHJpbnRfZml4ZWQoMHhDMDAwMCArIGkgKiAweDA4MDAwLCAweDAxMDAwLAorCQkJCSAgICBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMykgKiA4KTsKIAogCQkvKiB0YWlsICovCiAJCXByaW50X2ZpeGVkX2xhc3QoKTsKIAl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgdmFyaWFibGUgcmFuZ2VzICVzYWJsZWQ6XG4iLAotCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAyID8gImVuIiA6ICJkaXMiKTsKKwlwcl9kZWJ1ZygiTVRSUiB2YXJpYWJsZSByYW5nZXMgJXNhYmxlZDpcbiIsCisJCSBtdHJyX3N0YXRlLmVuYWJsZWQgJiAyID8gImVuIiA6ICJkaXMiKTsKIAlpZiAoc2l6ZV9vcl9tYXNrICYgMHhmZmZmZmZmZlVMKQogCQloaWdoX3dpZHRoID0gZmZzKHNpemVfb3JfbWFzayAmIDB4ZmZmZmZmZmZVTCkgLSAxOwogCWVsc2UKIAkJaGlnaF93aWR0aCA9IGZmcyhzaXplX29yX21hc2s+PjMyKSArIDMyIC0gMTsKIAloaWdoX3dpZHRoID0gKGhpZ2hfd2lkdGggLSAoMzIgLSBQQUdFX1NISUZUKSArIDMpIC8gNDsKKwogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgKytpKSB7CiAJCWlmIChtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyAmICgxIDw8IDExKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgICV1IGJhc2UgJTAqWCUwNVgwMDAgbWFzayAlMCpYJTA1WDAwMCAlc1xuIiwKLQkJCSAgICAgICBpLAotCQkJICAgICAgIGhpZ2hfd2lkdGgsCi0JCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfaGksCi0JCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gPj4gMTIsCi0JCQkgICAgICAgaGlnaF93aWR0aCwKLQkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19oaSwKLQkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0ubWFza19sbyA+PiAxMiwKLQkJCSAgICAgICBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gJiAweGZmKSk7CisJCQlwcl9kZWJ1ZygiICAldSBiYXNlICUwKlglMDVYMDAwIG1hc2sgJTAqWCUwNVgwMDAgJXNcbiIsCisJCQkJIGksCisJCQkJIGhpZ2hfd2lkdGgsCisJCQkJIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2hpLAorCQkJCSBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9sbyA+PiAxMiwKKwkJCQkgaGlnaF93aWR0aCwKKwkJCQkgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfaGksCisJCQkJIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2xvID4+IDEyLAorCQkJCSBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gJiAweGZmKSk7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgICV1IGRpc2FibGVkXG4iLCBpKTsKKwkJCXByX2RlYnVnKCIgICV1IGRpc2FibGVkXG4iLCBpKTsKIAl9Ci0JaWYgKG10cnJfdG9tMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiVE9NMjogJTAxNmxseCBha2EgJWxsZE1cbiIsCi0JCQkJICBtdHJyX3RvbTIsIG10cnJfdG9tMj4+MjApOwotCX0KKwlpZiAobXRycl90b20yKQorCQlwcl9kZWJ1ZygiVE9NMjogJTAxNmxseCBha2EgJWxsZE1cbiIsIG10cnJfdG9tMiwgbXRycl90b20yPj4yMCk7CiB9CiAKLS8qICBHcmFiIGFsbCBvZiB0aGUgTVRSUiBzdGF0ZSBmb3IgdGhpcyBDUFUgaW50byAqc3RhdGUgICovCisvKiBHcmFiIGFsbCBvZiB0aGUgTVRSUiBzdGF0ZSBmb3IgdGhpcyBDUFUgaW50byAqc3RhdGUgKi8KIHZvaWQgX19pbml0IGdldF9tdHJyX3N0YXRlKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IG10cnJfdmFyX3JhbmdlICp2cnM7Ci0JdW5zaWduZWQgbG8sIGR1bW15OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG8sIGR1bW15OworCXVuc2lnbmVkIGludCBpOwogCiAJdnJzID0gbXRycl9zdGF0ZS52YXJfcmFuZ2VzOwogCkBAIC0zMjQsNiArMzI3LDcgQEAKIAogCWlmIChhbWRfc3BlY2lhbF9kZWZhdWx0X210cnIoKSkgewogCQl1bnNpZ25lZCBsb3csIGhpZ2g7CisKIAkJLyogVE9QX01FTTIgKi8KIAkJcmRtc3IoTVNSX0s4X1RPUF9NRU0yLCBsb3csIGhpZ2gpOwogCQltdHJyX3RvbTIgPSBoaWdoOwpAQCAtMzQ0LDEwICszNDgsOSBAQAogCiAJcG9zdF9zZXQoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KIH0KIAotLyogIFNvbWUgQklPUydzIGFyZSBmdWNrZWQgYW5kIGRvbid0IHNldCBhbGwgTVRSUnMgdGhlIHNhbWUhICAqLworLyogU29tZSBCSU9TJ3MgYXJlIG1lc3NlZCB1cCBhbmQgZG9uJ3Qgc2V0IGFsbCBNVFJScyB0aGUgc2FtZSEgKi8KIHZvaWQgX19pbml0IG10cnJfc3RhdGVfd2Fybih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IHNtcF9jaGFuZ2VzX21hc2s7CkBAIC0zNTUsMjggKzM1OCwzMyBAQAogCWlmICghbWFzaykKIAkJcmV0dXJuOwogCWlmIChtYXNrICYgTVRSUl9DSEFOR0VfTUFTS19GSVhFRCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogeW91ciBDUFVzIGhhZCBpbmNvbnNpc3RlbnQgZml4ZWQgTVRSUiBzZXR0aW5nc1xuIik7CisJCXByX3dhcm5pbmcoIm10cnI6IHlvdXIgQ1BVcyBoYWQgaW5jb25zaXN0ZW50IGZpeGVkIE1UUlIgc2V0dGluZ3NcbiIpOwogCWlmIChtYXNrICYgTVRSUl9DSEFOR0VfTUFTS19WQVJJQUJMRSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogeW91ciBDUFVzIGhhZCBpbmNvbnNpc3RlbnQgdmFyaWFibGUgTVRSUiBzZXR0aW5nc1xuIik7CisJCXByX3dhcm5pbmcoIm10cnI6IHlvdXIgQ1BVcyBoYWQgaW5jb25zaXN0ZW50IHZhcmlhYmxlIE1UUlIgc2V0dGluZ3NcbiIpOwogCWlmIChtYXNrICYgTVRSUl9DSEFOR0VfTUFTS19ERUZUWVBFKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiB5b3VyIENQVXMgaGFkIGluY29uc2lzdGVudCBNVFJSZGVmVHlwZSBzZXR0aW5nc1xuIik7CisJCXByX3dhcm5pbmcoIm10cnI6IHlvdXIgQ1BVcyBoYWQgaW5jb25zaXN0ZW50IE1UUlJkZWZUeXBlIHNldHRpbmdzXG4iKTsKKwogCXByaW50ayhLRVJOX0lORk8gIm10cnI6IHByb2JhYmx5IHlvdXIgQklPUyBkb2VzIG5vdCBzZXR1cCBhbGwgQ1BVcy5cbiIpOwogCXByaW50ayhLRVJOX0lORk8gIm10cnI6IGNvcnJlY3RlZCBjb25maWd1cmF0aW9uLlxuIik7CiB9CiAKLS8qIERvZXNuJ3QgYXR0ZW1wdCB0byBwYXNzIGFuIGVycm9yIG91dCB0byBNVFJSIHVzZXJzCi0gICBiZWNhdXNlIGl0J3MgcXVpdGUgY29tcGxpY2F0ZWQgaW4gc29tZSBjYXNlcyBhbmQgcHJvYmFibHkgbm90Ci0gICB3b3J0aCBpdCBiZWNhdXNlIHRoZSBiZXN0IGVycm9yIGhhbmRsaW5nIGlzIHRvIGlnbm9yZSBpdC4gKi8KKy8qCisgKiBEb2Vzbid0IGF0dGVtcHQgdG8gcGFzcyBhbiBlcnJvciBvdXQgdG8gTVRSUiB1c2VycworICogYmVjYXVzZSBpdCdzIHF1aXRlIGNvbXBsaWNhdGVkIGluIHNvbWUgY2FzZXMgYW5kIHByb2JhYmx5IG5vdAorICogd29ydGggaXQgYmVjYXVzZSB0aGUgYmVzdCBlcnJvciBoYW5kbGluZyBpcyB0byBpZ25vcmUgaXQuCisgKi8KIHZvaWQgbXRycl93cm1zcih1bnNpZ25lZCBtc3IsIHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIpCiB7Ci0JaWYgKHdybXNyX3NhZmUobXNyLCBhLCBiKSA8IDApCisJaWYgKHdybXNyX3NhZmUobXNyLCBhLCBiKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCQkiTVRSUjogQ1BVICV1OiBXcml0aW5nIE1TUiAleCB0byAleDoleCBmYWlsZWRcbiIsCiAJCQlzbXBfcHJvY2Vzc29yX2lkKCksIG1zciwgYSwgYik7CisJfQogfQogCiAvKioKLSAqIHNldF9maXhlZF9yYW5nZSAtIGNoZWNrcyAmIHVwZGF0ZXMgYSBmaXhlZC1yYW5nZSBNVFJSIGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgdmFsdWUgaXQgc2hvdWxkIGhhdmUKKyAqIHNldF9maXhlZF9yYW5nZSAtIGNoZWNrcyAmIHVwZGF0ZXMgYSBmaXhlZC1yYW5nZSBNVFJSIGlmIGl0CisgKgkJICAgICBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGl0IHNob3VsZCBoYXZlCiAgKiBAbXNyOiBNU1IgYWRkcmVzcyBvZiB0aGUgTVRUUiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhbmQgdXBkYXRlZAogICogQGNoYW5nZWQ6IHBvaW50ZXIgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIE1UUlIgbmVlZGVkIHRvIGJlIGNoYW5nZWQKICAqIEBtc3J3b3JkczogcG9pbnRlciB0byB0aGUgTVNSIHZhbHVlcyB3aGljaCB0aGUgTVNSIHNob3VsZCBoYXZlCkBAIC00MDEsMjAgKzQwOSwyMyBAQAogICoKICAqIFJldHVybnM6IFRoZSBpbmRleCBvZiB0aGUgcmVnaW9uIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgb24gZXJyb3IuCiAgKi8KLWludCBnZW5lcmljX2dldF9mcmVlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IHJlcGxhY2VfcmVnKQoraW50CitnZW5lcmljX2dldF9mcmVlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IHJlcGxhY2VfcmVnKQogewotCWludCBpLCBtYXg7Ci0JbXRycl90eXBlIGx0eXBlOwogCXVuc2lnbmVkIGxvbmcgbGJhc2UsIGxzaXplOworCW10cnJfdHlwZSBsdHlwZTsKKwlpbnQgaSwgbWF4OwogCiAJbWF4ID0gbnVtX3Zhcl9yYW5nZXM7CiAJaWYgKHJlcGxhY2VfcmVnID49IDAgJiYgcmVwbGFjZV9yZWcgPCBtYXgpCiAJCXJldHVybiByZXBsYWNlX3JlZzsKKwogCWZvciAoaSA9IDA7IGkgPCBtYXg7ICsraSkgewogCQltdHJyX2lmLT5nZXQoaSwgJmxiYXNlLCAmbHNpemUsICZsdHlwZSk7CiAJCWlmIChsc2l6ZSA9PSAwKQogCQkJcmV0dXJuIGk7CiAJfQorCiAJcmV0dXJuIC1FTk9TUEM7CiB9CiAKQEAgLTQzNCw3ICs0NDUsNyBAQAogCXJkbXNyKE1UUlJwaHlzTWFza19NU1IocmVnKSwgbWFza19sbywgbWFza19oaSk7CiAKIAlpZiAoKG1hc2tfbG8gJiAweDgwMCkgPT0gMCkgewotCQkvKiAgSW52YWxpZCAoaS5lLiBmcmVlKSByYW5nZSAgKi8KKwkJLyogIEludmFsaWQgKGkuZS4gZnJlZSkgcmFuZ2UgKi8KIAkJKmJhc2UgPSAwOwogCQkqc2l6ZSA9IDA7CiAJCSp0eXBlID0gMDsKQEAgLTQ3MSwyNyArNDgyLDMxIEBACiB9CiAKIC8qKgotICogc2V0X2ZpeGVkX3JhbmdlcyAtIGNoZWNrcyAmIHVwZGF0ZXMgdGhlIGZpeGVkLXJhbmdlIE1UUlJzIGlmIHRoZXkgZGlmZmVyIGZyb20gdGhlIHNhdmVkIHNldAorICogc2V0X2ZpeGVkX3JhbmdlcyAtIGNoZWNrcyAmIHVwZGF0ZXMgdGhlIGZpeGVkLXJhbmdlIE1UUlJzIGlmIHRoZXkKKyAqCQkgICAgICBkaWZmZXIgZnJvbSB0aGUgc2F2ZWQgc2V0CiAgKiBAZnJzOiBwb2ludGVyIHRvIGZpeGVkLXJhbmdlIE1UUlIgdmFsdWVzLCBzYXZlZCBieSBnZXRfZml4ZWRfcmFuZ2VzKCkKICAqLwotc3RhdGljIGludCBzZXRfZml4ZWRfcmFuZ2VzKG10cnJfdHlwZSAqIGZycykKK3N0YXRpYyBpbnQgc2V0X2ZpeGVkX3JhbmdlcyhtdHJyX3R5cGUgKmZycykKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgKnNhdmVkID0gKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBmcnM7CisJdW5zaWduZWQgbG9uZyBsb25nICpzYXZlZCA9ICh1bnNpZ25lZCBsb25nIGxvbmcgKilmcnM7CiAJYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JaW50IGJsb2NrPS0xLCByYW5nZTsKKwlpbnQgYmxvY2sgPSAtMSwgcmFuZ2U7CiAKIAlrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4oKTsKIAotCXdoaWxlIChmaXhlZF9yYW5nZV9ibG9ja3NbKytibG9ja10ucmFuZ2VzKQotCSAgICBmb3IgKHJhbmdlPTA7IHJhbmdlIDwgZml4ZWRfcmFuZ2VfYmxvY2tzW2Jsb2NrXS5yYW5nZXM7IHJhbmdlKyspCi0JCXNldF9maXhlZF9yYW5nZShmaXhlZF9yYW5nZV9ibG9ja3NbYmxvY2tdLmJhc2VfbXNyICsgcmFuZ2UsCi0JCSAgICAmY2hhbmdlZCwgKHVuc2lnbmVkIGludCAqKSBzYXZlZCsrKTsKKwl3aGlsZSAoZml4ZWRfcmFuZ2VfYmxvY2tzWysrYmxvY2tdLnJhbmdlcykgeworCQlmb3IgKHJhbmdlID0gMDsgcmFuZ2UgPCBmaXhlZF9yYW5nZV9ibG9ja3NbYmxvY2tdLnJhbmdlczsgcmFuZ2UrKykKKwkJCXNldF9maXhlZF9yYW5nZShmaXhlZF9yYW5nZV9ibG9ja3NbYmxvY2tdLmJhc2VfbXNyICsgcmFuZ2UsCisJCQkJCSZjaGFuZ2VkLCAodW5zaWduZWQgaW50ICopc2F2ZWQrKyk7CisJfQogCiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLS8qICBTZXQgdGhlIE1TUiBwYWlyIHJlbGF0aW5nIHRvIGEgdmFyIHJhbmdlLiBSZXR1cm5zIFRSVUUgaWYKLSAgICBjaGFuZ2VzIGFyZSBtYWRlICAqLworLyoKKyAqIFNldCB0aGUgTVNSIHBhaXIgcmVsYXRpbmcgdG8gYSB2YXIgcmFuZ2UuCisgKiBSZXR1cm5zIHRydWUgaWYgY2hhbmdlcyBhcmUgbWFkZS4KKyAqLwogc3RhdGljIGJvb2wgc2V0X210cnJfdmFyX3Jhbmdlcyh1bnNpZ25lZCBpbnQgaW5kZXgsIHN0cnVjdCBtdHJyX3Zhcl9yYW5nZSAqdnIpCiB7CiAJdW5zaWduZWQgaW50IGxvLCBoaTsKQEAgLTUwMSw2ICs1MTYsNyBAQAogCWlmICgodnItPmJhc2VfbG8gJiAweGZmZmZmMGZmVUwpICE9IChsbyAmIDB4ZmZmZmYwZmZVTCkKIAkgICAgfHwgKHZyLT5iYXNlX2hpICYgKHNpemVfYW5kX21hc2sgPj4gKDMyIC0gUEFHRV9TSElGVCkpKSAhPQogCQkoaGkgJiAoc2l6ZV9hbmRfbWFzayA+PiAoMzIgLSBQQUdFX1NISUZUKSkpKSB7CisKIAkJbXRycl93cm1zcihNVFJScGh5c0Jhc2VfTVNSKGluZGV4KSwgdnItPmJhc2VfbG8sIHZyLT5iYXNlX2hpKTsKIAkJY2hhbmdlZCA9IHRydWU7CiAJfQpAQCAtNTI2LDIxICs1NDIsMjYgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2V0X210cnJfc3RhdGUodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGNoYW5nZV9tYXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCWlmIChzZXRfbXRycl92YXJfcmFuZ2VzKGksICZtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0pKQogCQkJY2hhbmdlX21hc2sgfD0gTVRSUl9DSEFOR0VfTUFTS19WQVJJQUJMRTsKKwl9CiAKIAlpZiAobXRycl9zdGF0ZS5oYXZlX2ZpeGVkICYmIHNldF9maXhlZF9yYW5nZXMobXRycl9zdGF0ZS5maXhlZF9yYW5nZXMpKQogCQljaGFuZ2VfbWFzayB8PSBNVFJSX0NIQU5HRV9NQVNLX0ZJWEVEOwogCi0JLyogIFNldF9tdHJyX3Jlc3RvcmUgcmVzdG9yZXMgdGhlIG9sZCB2YWx1ZSBvZiBNVFJSZGVmVHlwZSwKLQkgICBzbyB0byBzZXQgaXQgd2UgZmlkZGxlIHdpdGggdGhlIHNhdmVkIHZhbHVlICAqLworCS8qCisJICogU2V0X210cnJfcmVzdG9yZSByZXN0b3JlcyB0aGUgb2xkIHZhbHVlIG9mIE1UUlJkZWZUeXBlLAorCSAqIHNvIHRvIHNldCBpdCB3ZSBmaWRkbGUgd2l0aCB0aGUgc2F2ZWQgdmFsdWU6CisJICovCiAJaWYgKChkZWZ0eXBlX2xvICYgMHhmZikgIT0gbXRycl9zdGF0ZS5kZWZfdHlwZQogCSAgICB8fCAoKGRlZnR5cGVfbG8gJiAweGMwMCkgPj4gMTApICE9IG10cnJfc3RhdGUuZW5hYmxlZCkgewotCQlkZWZ0eXBlX2xvID0gKGRlZnR5cGVfbG8gJiB+MHhjZmYpIHwgbXRycl9zdGF0ZS5kZWZfdHlwZSB8IChtdHJyX3N0YXRlLmVuYWJsZWQgPDwgMTApOworCisJCWRlZnR5cGVfbG8gPSAoZGVmdHlwZV9sbyAmIH4weGNmZikgfCBtdHJyX3N0YXRlLmRlZl90eXBlIHwKKwkJCSAgICAgKG10cnJfc3RhdGUuZW5hYmxlZCA8PCAxMCk7CiAJCWNoYW5nZV9tYXNrIHw9IE1UUlJfQ0hBTkdFX01BU0tfREVGVFlQRTsKIAl9CiAKQEAgLTU0OCwzMyArNTY5LDM2IEBACiB9CiAKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3I0ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNyNDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2V0X2F0b21pY2l0eV9sb2NrKTsKIAogLyoKLSAqIFNpbmNlIHdlIGFyZSBkaXNhYmxpbmcgdGhlIGNhY2hlIGRvbid0IGFsbG93IGFueSBpbnRlcnJ1cHRzIC0gdGhleQotICogd291bGQgcnVuIGV4dHJlbWVseSBzbG93IGFuZCB3b3VsZCBvbmx5IGluY3JlYXNlIHRoZSBwYWluLiAgVGhlIGNhbGxlciBtdXN0Ci0gKiBlbnN1cmUgdGhhdCBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhbmQgYXJlIHJlZW5hYmxlZCBhZnRlciBwb3N0X3NldCgpCi0gKiBoYXMgYmVlbiBjYWxsZWQuCisgKiBTaW5jZSB3ZSBhcmUgZGlzYWJsaW5nIHRoZSBjYWNoZSBkb24ndCBhbGxvdyBhbnkgaW50ZXJydXB0cywKKyAqIHRoZXkgd291bGQgcnVuIGV4dHJlbWVseSBzbG93IGFuZCB3b3VsZCBvbmx5IGluY3JlYXNlIHRoZSBwYWluLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBhbmQKKyAqIGFyZSByZWVuYWJsZWQgYWZ0ZXIgcG9zdF9zZXQoKSBoYXMgYmVlbiBjYWxsZWQuCiAgKi8KLQogc3RhdGljIHZvaWQgcHJlcGFyZV9zZXQodm9pZCkgX19hY3F1aXJlcyhzZXRfYXRvbWljaXR5X2xvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBjcjA7CiAKLQkvKiAgTm90ZSB0aGF0IHRoaXMgaXMgbm90IGlkZWFsLCBzaW5jZSB0aGUgY2FjaGUgaXMgb25seSBmbHVzaGVkL2Rpc2FibGVkCi0JICAgZm9yIHRoaXMgQ1BVIHdoaWxlIHRoZSBNVFJScyBhcmUgY2hhbmdlZCwgYnV0IGNoYW5naW5nIHRoaXMgcmVxdWlyZXMKLQkgICBtb3JlIGludmFzaXZlIGNoYW5nZXMgdG8gdGhlIHdheSB0aGUga2VybmVsIGJvb3RzICAqLworCS8qCisJICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGlkZWFsCisJICogc2luY2UgdGhlIGNhY2hlIGlzIG9ubHkgZmx1c2hlZC9kaXNhYmxlZCBmb3IgdGhpcyBDUFUgd2hpbGUgdGhlCisJICogTVRSUnMgYXJlIGNoYW5nZWQsIGJ1dCBjaGFuZ2luZyB0aGlzIHJlcXVpcmVzIG1vcmUgaW52YXNpdmUKKwkgKiBjaGFuZ2VzIHRvIHRoZSB3YXkgdGhlIGtlcm5lbCBib290cworCSAqLwogCiAJc3Bpbl9sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOwogCi0JLyogIEVudGVyIHRoZSBuby1maWxsIChDRD0xLCBOVz0wKSBjYWNoZSBtb2RlIGFuZCBmbHVzaCBjYWNoZXMuICovCisJLyogRW50ZXIgdGhlIG5vLWZpbGwgKENEPTEsIE5XPTApIGNhY2hlIG1vZGUgYW5kIGZsdXNoIGNhY2hlcy4gKi8KIAljcjAgPSByZWFkX2NyMCgpIHwgWDg2X0NSMF9DRDsKIAl3cml0ZV9jcjAoY3IwKTsKIAl3YmludmQoKTsKIAotCS8qICBTYXZlIHZhbHVlIG9mIENSNCBhbmQgY2xlYXIgUGFnZSBHbG9iYWwgRW5hYmxlIChiaXQgNykgICovCi0JaWYgKCBjcHVfaGFzX3BnZSApIHsKKwkvKiBTYXZlIHZhbHVlIG9mIENSNCBhbmQgY2xlYXIgUGFnZSBHbG9iYWwgRW5hYmxlIChiaXQgNykgKi8KKwlpZiAoY3B1X2hhc19wZ2UpIHsKIAkJY3I0ID0gcmVhZF9jcjQoKTsKIAkJd3JpdGVfY3I0KGNyNCAmIH5YODZfQ1I0X1BHRSk7CiAJfQpAQCAtNTgyLDI2ICs2MDYsMjYgQEAKIAkvKiBGbHVzaCBhbGwgVExCcyB2aWEgYSBtb3YgJWNyMywgJXJlZzsgbW92ICVyZWcsICVjcjMgKi8KIAlfX2ZsdXNoX3RsYigpOwogCi0JLyogIFNhdmUgTVRSUiBzdGF0ZSAqLworCS8qIFNhdmUgTVRSUiBzdGF0ZSAqLwogCXJkbXNyKE1TUl9NVFJSZGVmVHlwZSwgZGVmdHlwZV9sbywgZGVmdHlwZV9oaSk7CiAKLQkvKiAgRGlzYWJsZSBNVFJScywgYW5kIHNldCB0aGUgZGVmYXVsdCB0eXBlIHRvIHVuY2FjaGVkICAqLworCS8qIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAqLwogCW10cnJfd3Jtc3IoTVNSX01UUlJkZWZUeXBlLCBkZWZ0eXBlX2xvICYgfjB4Y2ZmLCBkZWZ0eXBlX2hpKTsKIH0KIAogc3RhdGljIHZvaWQgcG9zdF9zZXQodm9pZCkgX19yZWxlYXNlcyhzZXRfYXRvbWljaXR5X2xvY2spCiB7Ci0JLyogIEZsdXNoIFRMQnMgKG5vIG5lZWQgdG8gZmx1c2ggY2FjaGVzIC0gdGhleSBhcmUgZGlzYWJsZWQpICAqLworCS8qIEZsdXNoIFRMQnMgKG5vIG5lZWQgdG8gZmx1c2ggY2FjaGVzIC0gdGhleSBhcmUgZGlzYWJsZWQpICovCiAJX19mbHVzaF90bGIoKTsKIAogCS8qIEludGVsIChQNikgc3RhbmRhcmQgTVRSUnMgKi8KIAltdHJyX3dybXNyKE1TUl9NVFJSZGVmVHlwZSwgZGVmdHlwZV9sbywgZGVmdHlwZV9oaSk7Ci0JCQotCS8qICBFbmFibGUgY2FjaGVzICAqLworCisJLyogRW5hYmxlIGNhY2hlcyAqLwogCXdyaXRlX2NyMChyZWFkX2NyMCgpICYgMHhiZmZmZmZmZik7CiAKLQkvKiAgUmVzdG9yZSB2YWx1ZSBvZiBDUjQgICovCi0JaWYgKCBjcHVfaGFzX3BnZSApCisJLyogUmVzdG9yZSB2YWx1ZSBvZiBDUjQgKi8KKwlpZiAoY3B1X2hhc19wZ2UpCiAJCXdyaXRlX2NyNChjcjQpOwogCXNwaW5fdW5sb2NrKCZzZXRfYXRvbWljaXR5X2xvY2spOwogfQpAQCAtNjIzLDI0ICs2NDcsMjcgQEAKIAlwb3N0X3NldCgpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCS8qICBVc2UgdGhlIGF0b21pYyBiaXRvcHMgdG8gdXBkYXRlIHRoZSBnbG9iYWwgbWFzayAgKi8KKwkvKiBVc2UgdGhlIGF0b21pYyBiaXRvcHMgdG8gdXBkYXRlIHRoZSBnbG9iYWwgbWFzayAqLwogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IHNpemVvZiBtYXNrICogODsgKytjb3VudCkgewogCQlpZiAobWFzayAmIDB4MDEpCiAJCQlzZXRfYml0KGNvdW50LCAmc21wX2NoYW5nZXNfbWFzayk7CiAJCW1hc2sgPj49IDE7CiAJfQotCQorCiB9CiAKKy8qKgorICogZ2VuZXJpY19zZXRfbXRyciAtIHNldCB2YXJpYWJsZSBNVFJSIHJlZ2lzdGVyIG9uIHRoZSBsb2NhbCBDUFUuCisgKgorICogQHJlZzogVGhlIHJlZ2lzdGVyIHRvIHNldC4KKyAqIEBiYXNlOiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpb24uCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIHJlZ2lvbi4gSWYgdGhpcyBpcyAwIHRoZSByZWdpb24gaXMgZGlzYWJsZWQuCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIHJlZ2lvbi4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KIHN0YXRpYyB2b2lkIGdlbmVyaWNfc2V0X210cnIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIG10cnJfdHlwZSB0eXBlKQotLyogIFtTVU1NQVJZXSBTZXQgdmFyaWFibGUgTVRSUiByZWdpc3RlciBvbiB0aGUgbG9jYWwgQ1BVLgotICAgIDxyZWc+IFRoZSByZWdpc3RlciB0byBzZXQuCi0gICAgPGJhc2U+IFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlZ2lvbi4KLSAgICA8c2l6ZT4gVGhlIHNpemUgb2YgdGhlIHJlZ2lvbi4gSWYgdGhpcyBpcyAwIHRoZSByZWdpb24gaXMgZGlzYWJsZWQuCi0gICAgPHR5cGU+IFRoZSB0eXBlIG9mIHRoZSByZWdpb24uCi0gICAgW1JFVFVSTlNdIE5vdGhpbmcuCi0qLwogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG10cnJfdmFyX3JhbmdlICp2cjsKQEAgLTY1MSw4ICs2NzgsMTAgQEAKIAlwcmVwYXJlX3NldCgpOwogCiAJaWYgKHNpemUgPT0gMCkgewotCQkvKiBUaGUgaW52YWxpZCBiaXQgaXMga2VwdCBpbiB0aGUgbWFzaywgc28gd2Ugc2ltcGx5IGNsZWFyIHRoZQotCQkgICByZWxldmFudCBtYXNrIHJlZ2lzdGVyIHRvIGRpc2FibGUgYSByYW5nZS4gKi8KKwkJLyoKKwkJICogVGhlIGludmFsaWQgYml0IGlzIGtlcHQgaW4gdGhlIG1hc2ssIHNvIHdlIHNpbXBseQorCQkgKiBjbGVhciB0aGUgcmVsZXZhbnQgbWFzayByZWdpc3RlciB0byBkaXNhYmxlIGEgcmFuZ2UuCisJCSAqLwogCQltdHJyX3dybXNyKE1UUlJwaHlzTWFza19NU1IocmVnKSwgMCwgMCk7CiAJCW1lbXNldCh2ciwgMCwgc2l6ZW9mKHN0cnVjdCBtdHJyX3Zhcl9yYW5nZSkpOwogCX0gZWxzZSB7CkBAIC02NjksNDYgKzY5OCw1MCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotaW50IGdlbmVyaWNfdmFsaWRhdGVfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCB0eXBlKQoraW50IGdlbmVyaWNfdmFsaWRhdGVfYWRkX3BhZ2UodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKIAl1bnNpZ25lZCBsb25nIGxiYXNlLCBsYXN0OwogCi0JLyogIEZvciBJbnRlbCBQUHJvIHN0ZXBwaW5nIDw9IDcsIG11c3QgYmUgNCBNaUIgYWxpZ25lZCAKLQkgICAgYW5kIG5vdCB0b3VjaCAweDcwMDAwMDAwLT4weDcwMDNGRkZGICovCisJLyoKKwkgKiBGb3IgSW50ZWwgUFBybyBzdGVwcGluZyA8PSA3CisJICogbXVzdCBiZSA0IE1pQiBhbGlnbmVkIGFuZCBub3QgdG91Y2ggMHg3MDAwMDAwMCAtPiAweDcwMDNGRkZGCisJICovCiAJaWYgKGlzX2NwdShJTlRFTCkgJiYgYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJgogCSAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxICYmCiAJICAgIGJvb3RfY3B1X2RhdGEueDg2X21hc2sgPD0gNykgewogCQlpZiAoYmFzZSAmICgoMSA8PCAoMjIgLSBQQUdFX1NISUZUKSkgLSAxKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogYmFzZSgweCVseDAwMCkgaXMgbm90IDQgTWlCIGFsaWduZWRcbiIsIGJhc2UpOworCQkJcHJfd2FybmluZygibXRycjogYmFzZSgweCVseDAwMCkgaXMgbm90IDQgTWlCIGFsaWduZWRcbiIsIGJhc2UpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKCEoYmFzZSArIHNpemUgPCAweDcwMDAwIHx8IGJhc2UgPiAweDcwMDNGKSAmJgogCQkgICAgKHR5cGUgPT0gTVRSUl9UWVBFX1dSQ09NQgogCQkgICAgIHx8IHR5cGUgPT0gTVRSUl9UWVBFX1dSQkFDSykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10cnI6IHdyaXRhYmxlIG10cnIgYmV0d2VlbiAweDcwMDAwMDAwIGFuZCAweDcwMDNGRkZGIG1heSBoYW5nIHRoZSBDUFUuXG4iKTsKKwkJCXByX3dhcm5pbmcoIm10cnI6IHdyaXRhYmxlIG10cnIgYmV0d2VlbiAweDcwMDAwMDAwIGFuZCAweDcwMDNGRkZGIG1heSBoYW5nIHRoZSBDUFUuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi0JLyogIENoZWNrIHVwcGVyIGJpdHMgb2YgYmFzZSBhbmQgbGFzdCBhcmUgZXF1YWwgYW5kIGxvd2VyIGJpdHMgYXJlIDAKLQkgICAgZm9yIGJhc2UgYW5kIDEgZm9yIGxhc3QgICovCisJLyoKKwkgKiBDaGVjayB1cHBlciBiaXRzIG9mIGJhc2UgYW5kIGxhc3QgYXJlIGVxdWFsIGFuZCBsb3dlciBiaXRzIGFyZSAwCisJICogZm9yIGJhc2UgYW5kIDEgZm9yIGxhc3QKKwkgKi8KIAlsYXN0ID0gYmFzZSArIHNpemUgLSAxOwogCWZvciAobGJhc2UgPSBiYXNlOyAhKGxiYXNlICYgMSkgJiYgKGxhc3QgJiAxKTsKLQkgICAgIGxiYXNlID0gbGJhc2UgPj4gMSwgbGFzdCA9IGxhc3QgPj4gMSkgOworCSAgICAgbGJhc2UgPSBsYmFzZSA+PiAxLCBsYXN0ID0gbGFzdCA+PiAxKQorCQk7CiAJaWYgKGxiYXNlICE9IGxhc3QpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogYmFzZSgweCVseDAwMCkgaXMgbm90IGFsaWduZWQgb24gYSBzaXplKDB4JWx4MDAwKSBib3VuZGFyeVxuIiwKLQkJICAgICAgIGJhc2UsIHNpemUpOworCQlwcl93YXJuaW5nKCJtdHJyOiBiYXNlKDB4JWx4MDAwKSBpcyBub3QgYWxpZ25lZCBvbiBhIHNpemUoMHglbHgwMDApIGJvdW5kYXJ5XG4iLCBiYXNlLCBzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgZ2VuZXJpY19oYXZlX3dyY29tYih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY29uZmlnLCBkdW1teTsKIAlyZG1zcihNU1JfTVRSUmNhcCwgY29uZmlnLCBkdW1teSk7Ci0JcmV0dXJuIChjb25maWcgJiAoMSA8PCAxMCkpOworCXJldHVybiBjb25maWcgJiAoMSA8PCAxMCk7CiB9CiAKIGludCBwb3NpdGl2ZV9oYXZlX3dyY29tYih2b2lkKQpAQCAtNzE2LDE0ICs3NDksMTUgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogZ2VuZXJpYyBzdHJ1Y3R1cmUuLi4KKy8qCisgKiBHZW5lcmljIHN0cnVjdHVyZS4uLgogICovCiBzdHJ1Y3QgbXRycl9vcHMgZ2VuZXJpY19tdHJyX29wcyA9IHsKLQkudXNlX2ludGVsX2lmICAgICAgPSAxLAotCS5zZXRfYWxsCSAgID0gZ2VuZXJpY19zZXRfYWxsLAotCS5nZXQgICAgICAgICAgICAgICA9IGdlbmVyaWNfZ2V0X210cnIsCi0JLmdldF9mcmVlX3JlZ2lvbiAgID0gZ2VuZXJpY19nZXRfZnJlZV9yZWdpb24sCi0JLnNldCAgICAgICAgICAgICAgID0gZ2VuZXJpY19zZXRfbXRyciwKLQkudmFsaWRhdGVfYWRkX3BhZ2UgPSBnZW5lcmljX3ZhbGlkYXRlX2FkZF9wYWdlLAotCS5oYXZlX3dyY29tYiAgICAgICA9IGdlbmVyaWNfaGF2ZV93cmNvbWIsCisJLnVzZV9pbnRlbF9pZgkJPSAxLAorCS5zZXRfYWxsCQk9IGdlbmVyaWNfc2V0X2FsbCwKKwkuZ2V0CQkJPSBnZW5lcmljX2dldF9tdHJyLAorCS5nZXRfZnJlZV9yZWdpb24JPSBnZW5lcmljX2dldF9mcmVlX3JlZ2lvbiwKKwkuc2V0CQkJPSBnZW5lcmljX3NldF9tdHJyLAorCS52YWxpZGF0ZV9hZGRfcGFnZQk9IGdlbmVyaWNfdmFsaWRhdGVfYWRkX3BhZ2UsCisJLmhhdmVfd3Jjb21iCQk9IGdlbmVyaWNfaGF2ZV93cmNvbWIsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2lmLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYwppbmRleCBmYjczYTUyLi4wOGI2ZWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYwpAQCAtMSwyNyArMSwyOCBAQAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNkZWZpbmUgTElORV9TSVpFIDgwCiAKICNpbmNsdWRlIDxhc20vbXRyci5oPgorCiAjaW5jbHVkZSAibXRyci5oIgogCiAjZGVmaW5lIEZJTEVfRkNPVU5UKGYpICgoKHN0cnVjdCBzZXFfZmlsZSAqKSgoZiktPnByaXZhdGVfZGF0YSkpLT5wcml2YXRlKQogCiBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbXRycl9zdHJpbmdzW01UUlJfTlVNX1RZUEVTXSA9CiB7Ci0gICAgInVuY2FjaGFibGUiLCAgICAgICAgICAgICAgIC8qIDAgKi8KLSAgICAid3JpdGUtY29tYmluaW5nIiwgICAgICAgICAgLyogMSAqLwotICAgICI/IiwgICAgICAgICAgICAgICAgICAgICAgICAvKiAyICovCi0gICAgIj8iLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMgKi8KLSAgICAid3JpdGUtdGhyb3VnaCIsICAgICAgICAgICAgLyogNCAqLwotICAgICJ3cml0ZS1wcm90ZWN0IiwgICAgICAgICAgICAvKiA1ICovCi0gICAgIndyaXRlLWJhY2siLCAgICAgICAgICAgICAgIC8qIDYgKi8KKwkidW5jYWNoYWJsZSIsCQkvKiAwICovCisJIndyaXRlLWNvbWJpbmluZyIsCS8qIDEgKi8KKwkiPyIsCQkJLyogMiAqLworCSI/IiwJCQkvKiAzICovCisJIndyaXRlLXRocm91Z2giLAkvKiA0ICovCisJIndyaXRlLXByb3RlY3QiLAkvKiA1ICovCisJIndyaXRlLWJhY2siLAkJLyogNiAqLwogfTsKIAogY29uc3QgY2hhciAqbXRycl9hdHRyaWJfdG9fc3RyKGludCB4KQpAQCAtMzUsOCArMzYsOCBAQAogbXRycl9maWxlX2FkZCh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkgICAgICB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBpbmNyZW1lbnQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgcGFnZSkKIHsKKwl1bnNpZ25lZCBpbnQgKmZjb3VudCA9IEZJTEVfRkNPVU5UKGZpbGUpOwogCWludCByZWcsIG1heDsKLQl1bnNpZ25lZCBpbnQgKmZjb3VudCA9IEZJTEVfRkNPVU5UKGZpbGUpOyAKIAogCW1heCA9IG51bV92YXJfcmFuZ2VzOwogCWlmIChmY291bnQgPT0gTlVMTCkgewpAQCAtNjEsOCArNjIsOCBAQAogbXRycl9maWxlX2RlbCh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IHBhZ2UpCiB7Ci0JaW50IHJlZzsKIAl1bnNpZ25lZCBpbnQgKmZjb3VudCA9IEZJTEVfRkNPVU5UKGZpbGUpOworCWludCByZWc7CiAKIAlpZiAoIXBhZ2UpIHsKIAkJaWYgKChiYXNlICYgKFBBR0VfU0laRSAtIDEpKSB8fCAoc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSkpCkBAIC04MSwxMyArODIsMTQgQEAKIAlyZXR1cm4gcmVnOwogfQogCi0vKiBSRUQtUEVOOiBzZXFfZmlsZSBjYW4gc2VlayBub3cuIHRoaXMgaXMgaWdub3JlZC4gKi8KKy8qCisgKiBzZXFfZmlsZSBjYW4gc2VlayBidXQgd2UgaWdub3JlIGl0LgorICoKKyAqIEZvcm1hdCBvZiBjb250cm9sIGxpbmU6CisgKiAgICAiYmFzZT0lTHggc2l6ZT0lTHggdHlwZT0lcyIgb3IgImRpc2FibGU9JWQiCisgKi8KIHN0YXRpYyBzc2l6ZV90CiBtdHJyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKiBwcG9zKQotLyogIEZvcm1hdCBvZiBjb250cm9sIGxpbmU6Ci0gICAgImJhc2U9JUx4IHNpemU9JUx4IHR5cGU9JXMiICAgICBPUjoKLSAgICAiZGlzYWJsZT0lZCIKLSovCiB7CiAJaW50IGksIGVycjsKIAl1bnNpZ25lZCBsb25nIHJlZzsKQEAgLTEwMCwxNSArMTAyLDE4IEBACiAJCXJldHVybiAtRVBFUk07CiAJaWYgKCFsZW4pCiAJCXJldHVybiAtRUlOVkFMOworCiAJbWVtc2V0KGxpbmUsIDAsIExJTkVfU0laRSk7CiAJaWYgKGxlbiA+IExJTkVfU0laRSkKIAkJbGVuID0gTElORV9TSVpFOwogCWlmIChjb3B5X2Zyb21fdXNlcihsaW5lLCBidWYsIGxlbiAtIDEpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwogCWxpbmVsZW4gPSBzdHJsZW4obGluZSk7CiAJcHRyID0gbGluZSArIGxpbmVsZW4gLSAxOwogCWlmIChsaW5lbGVuICYmICpwdHIgPT0gJ1xuJykKIAkJKnB0ciA9ICdcMCc7CisKIAlpZiAoIXN0cm5jbXAobGluZSwgImRpc2FibGU9IiwgOCkpIHsKIAkJcmVnID0gc2ltcGxlX3N0cnRvdWwobGluZSArIDgsICZwdHIsIDApOwogCQllcnIgPSBtdHJyX2RlbF9wYWdlKHJlZywgMCwgMCk7CkBAIC0xMTYsMjggKzEyMSwzNSBAQAogCQkJcmV0dXJuIGVycjsKIAkJcmV0dXJuIGxlbjsKIAl9CisKIAlpZiAoc3RybmNtcChsaW5lLCAiYmFzZT0iLCA1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKIAliYXNlID0gc2ltcGxlX3N0cnRvdWxsKGxpbmUgKyA1LCAmcHRyLCAwKTsKLQlmb3IgKDsgaXNzcGFjZSgqcHRyKTsgKytwdHIpIDsKKwlmb3IgKDsgaXNzcGFjZSgqcHRyKTsgKytwdHIpCisJCTsKKwogCWlmIChzdHJuY21wKHB0ciwgInNpemU9IiwgNSkpCiAJCXJldHVybiAtRUlOVkFMOworCiAJc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsbChwdHIgKyA1LCAmcHRyLCAwKTsKIAlpZiAoKGJhc2UgJiAweGZmZikgfHwgKHNpemUgJiAweGZmZikpCiAJCXJldHVybiAtRUlOVkFMOwotCWZvciAoOyBpc3NwYWNlKCpwdHIpOyArK3B0cikgOworCWZvciAoOyBpc3NwYWNlKCpwdHIpOyArK3B0cikKKwkJOworCiAJaWYgKHN0cm5jbXAocHRyLCAidHlwZT0iLCA1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcHRyICs9IDU7Ci0JZm9yICg7IGlzc3BhY2UoKnB0cik7ICsrcHRyKSA7CisJZm9yICg7IGlzc3BhY2UoKnB0cik7ICsrcHRyKQorCQk7CisKIAlmb3IgKGkgPSAwOyBpIDwgTVRSUl9OVU1fVFlQRVM7ICsraSkgewogCQlpZiAoc3RyY21wKHB0ciwgbXRycl9zdHJpbmdzW2ldKSkKIAkJCWNvbnRpbnVlOwogCQliYXNlID4+PSBQQUdFX1NISUZUOwogCQlzaXplID4+PSBQQUdFX1NISUZUOwotCQllcnIgPQotCQkgICAgbXRycl9hZGRfcGFnZSgodW5zaWduZWQgbG9uZykgYmFzZSwgKHVuc2lnbmVkIGxvbmcpIHNpemUsIGksCi0JCQkJICB0cnVlKTsKKwkJZXJyID0gbXRycl9hZGRfcGFnZSgodW5zaWduZWQgbG9uZyliYXNlLCAodW5zaWduZWQgbG9uZylzaXplLCBpLCB0cnVlKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCQlyZXR1cm4gbGVuOwpAQCAtMTgxLDcgKzE5Myw5IEBACiAJY2FzZSBNVFJSSU9DMzJfU0VUX1BBR0VfRU5UUlk6CiAJY2FzZSBNVFJSSU9DMzJfREVMX1BBR0VfRU5UUlk6CiAJY2FzZSBNVFJSSU9DMzJfS0lMTF9QQUdFX0VOVFJZOiB7Ci0JCXN0cnVjdCBtdHJyX3NlbnRyeTMyIF9fdXNlciAqczMyID0gKHN0cnVjdCBtdHJyX3NlbnRyeTMyIF9fdXNlciAqKV9fYXJnOworCQlzdHJ1Y3QgbXRycl9zZW50cnkzMiBfX3VzZXIgKnMzMjsKKworCQlzMzIgPSAoc3RydWN0IG10cnJfc2VudHJ5MzIgX191c2VyICopX19hcmc7CiAJCWVyciA9IGdldF91c2VyKHNlbnRyeS5iYXNlLCAmczMyLT5iYXNlKTsKIAkJZXJyIHw9IGdldF91c2VyKHNlbnRyeS5zaXplLCAmczMyLT5zaXplKTsKIAkJZXJyIHw9IGdldF91c2VyKHNlbnRyeS50eXBlLCAmczMyLT50eXBlKTsKQEAgLTE5MSw3ICsyMDUsOSBAQAogCX0KIAljYXNlIE1UUlJJT0MzMl9HRVRfRU5UUlk6CiAJY2FzZSBNVFJSSU9DMzJfR0VUX1BBR0VfRU5UUlk6IHsKLQkJc3RydWN0IG10cnJfZ2VudHJ5MzIgX191c2VyICpnMzIgPSAoc3RydWN0IG10cnJfZ2VudHJ5MzIgX191c2VyICopX19hcmc7CisJCXN0cnVjdCBtdHJyX2dlbnRyeTMyIF9fdXNlciAqZzMyOworCisJCWczMiA9IChzdHJ1Y3QgbXRycl9nZW50cnkzMiBfX3VzZXIgKilfX2FyZzsKIAkJZXJyID0gZ2V0X3VzZXIoZ2VudHJ5LnJlZ251bSwgJmczMi0+cmVnbnVtKTsKIAkJZXJyIHw9IGdldF91c2VyKGdlbnRyeS5iYXNlLCAmZzMyLT5iYXNlKTsKIAkJZXJyIHw9IGdldF91c2VyKGdlbnRyeS5zaXplLCAmZzMyLT5zaXplKTsKQEAgLTMxNCw3ICszMzAsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlzd2l0Y2goY21kKSB7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIE1UUlJJT0NfR0VUX0VOVFJZOgogCWNhc2UgTVRSUklPQ19HRVRfUEFHRV9FTlRSWToKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZnZW50cnksIHNpemVvZiBnZW50cnkpKQpAQCAtMzIzLDcgKzMzOSw5IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCWNhc2UgTVRSUklPQzMyX0dFVF9FTlRSWToKIAljYXNlIE1UUlJJT0MzMl9HRVRfUEFHRV9FTlRSWTogewotCQlzdHJ1Y3QgbXRycl9nZW50cnkzMiBfX3VzZXIgKmczMiA9IChzdHJ1Y3QgbXRycl9nZW50cnkzMiBfX3VzZXIgKilfX2FyZzsKKwkJc3RydWN0IG10cnJfZ2VudHJ5MzIgX191c2VyICpnMzI7CisKKwkJZzMyID0gKHN0cnVjdCBtdHJyX2dlbnRyeTMyIF9fdXNlciAqKV9fYXJnOwogCQllcnIgPSBwdXRfdXNlcihnZW50cnkuYmFzZSwgJmczMi0+YmFzZSk7CiAJCWVyciB8PSBwdXRfdXNlcihnZW50cnkuc2l6ZSwgJmczMi0+c2l6ZSk7CiAJCWVyciB8PSBwdXRfdXNlcihnZW50cnkucmVnbnVtLCAmZzMyLT5yZWdudW0pOwpAQCAtMzM1LDExICszNTMsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50Ci1tdHJyX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgbXRycl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGksIG1heDsKIAl1bnNpZ25lZCBpbnQgKmZjb3VudCA9IEZJTEVfRkNPVU5UKGZpbGUpOworCWludCBpLCBtYXg7CiAKIAlpZiAoZmNvdW50ICE9IE5VTEwpIHsKIAkJbWF4ID0gbnVtX3Zhcl9yYW5nZXM7CkBAIC0zNTksMjIgKzM3NiwyMiBAQAogCiBzdGF0aWMgaW50IG10cnJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZiAoIW10cnJfaWYpIAorCWlmICghbXRycl9pZikKIAkJcmV0dXJuIC1FSU87Ci0JaWYgKCFtdHJyX2lmLT5nZXQpIAotCQlyZXR1cm4gLUVOWElPOyAKKwlpZiAoIW10cnJfaWYtPmdldCkKKwkJcmV0dXJuIC1FTlhJTzsKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbXRycl9zZXFfc2hvdywgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG10cnJfZm9wcyA9IHsKLQkub3duZXIgICA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IG10cnJfb3BlbiwgCi0JLnJlYWQgICAgPSBzZXFfcmVhZCwKLQkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkud3JpdGUgICA9IG10cnJfd3JpdGUsCi0JLnVubG9ja2VkX2lvY3RsID0gbXRycl9pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gbXRycl9pb2N0bCwKLQkucmVsZWFzZSA9IG10cnJfY2xvc2UsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJCT0gbXRycl9vcGVuLAorCS5yZWFkCQkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQkJPSBzZXFfbHNlZWssCisJLndyaXRlCQkJPSBtdHJyX3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAkJPSBtdHJyX2lvY3RsLAorCS5jb21wYXRfaW9jdGwJCT0gbXRycl9pb2N0bCwKKwkucmVsZWFzZQkJPSBtdHJyX2Nsb3NlLAogfTsKIAogc3RhdGljIGludCBtdHJyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCkBAIC0zODgsMjMgKzQwNSwyNCBAQAogCW1heCA9IG51bV92YXJfcmFuZ2VzOwogCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgewogCQltdHJyX2lmLT5nZXQoaSwgJmJhc2UsICZzaXplLCAmdHlwZSk7Ci0JCWlmIChzaXplID09IDApCisJCWlmIChzaXplID09IDApIHsKIAkJCW10cnJfdXNhZ2VfdGFibGVbaV0gPSAwOwotCQllbHNlIHsKLQkJCWlmIChzaXplIDwgKDB4MTAwMDAwID4+IFBBR0VfU0hJRlQpKSB7Ci0JCQkJLyogbGVzcyB0aGFuIDFNQiAqLwotCQkJCWZhY3RvciA9ICdLJzsKLQkJCQlzaXplIDw8PSBQQUdFX1NISUZUIC0gMTA7Ci0JCQl9IGVsc2UgewotCQkJCWZhY3RvciA9ICdNJzsKLQkJCQlzaXplID4+PSAyMCAtIFBBR0VfU0hJRlQ7Ci0JCQl9Ci0JCQkvKiBSRUQtUEVOOiBiYXNlIGNhbiBiZSA+IDMyYml0ICovIAotCQkJbGVuICs9IHNlcV9wcmludGYoc2VxLCAKLQkJCQkgICAicmVnJTAyaTogYmFzZT0weCUwNmx4MDAwICglNWx1TUIpLCBzaXplPSU1bHUlY0IsIGNvdW50PSVkOiAlc1xuIiwKLQkJCSAgICAgaSwgYmFzZSwgYmFzZSA+PiAoMjAgLSBQQUdFX1NISUZUKSwgc2l6ZSwgZmFjdG9yLAotCQkJICAgICBtdHJyX3VzYWdlX3RhYmxlW2ldLCBtdHJyX2F0dHJpYl90b19zdHIodHlwZSkpOworCQkJY29udGludWU7CiAJCX0KKwkJaWYgKHNpemUgPCAoMHgxMDAwMDAgPj4gUEFHRV9TSElGVCkpIHsKKwkJCS8qIGxlc3MgdGhhbiAxTUIgKi8KKwkJCWZhY3RvciA9ICdLJzsKKwkJCXNpemUgPDw9IFBBR0VfU0hJRlQgLSAxMDsKKwkJfSBlbHNlIHsKKwkJCWZhY3RvciA9ICdNJzsKKwkJCXNpemUgPj49IDIwIC0gUEFHRV9TSElGVDsKKwkJfQorCQkvKiBCYXNlIGNhbiBiZSA+IDMyYml0ICovCisJCWxlbiArPSBzZXFfcHJpbnRmKHNlcSwgInJlZyUwMmk6IGJhc2U9MHglMDZseDAwMCAiCisJCQkiKCU1bHVNQiksIHNpemU9JTVsdSVjQiwgY291bnQ9JWQ6ICVzXG4iLAorCQkJaSwgYmFzZSwgYmFzZSA+PiAoMjAgLSBQQUdFX1NISUZUKSwgc2l6ZSwKKwkJCWZhY3RvciwgbXRycl91c2FnZV90YWJsZVtpXSwKKwkJCW10cnJfYXR0cmliX3RvX3N0cih0eXBlKSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDIyLDYgKzQ0MCw1IEBACiAJcHJvY19jcmVhdGUoIm10cnIiLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwgJm10cnJfZm9wcyk7CiAJcmV0dXJuIDA7CiB9Ci0KIGFyY2hfaW5pdGNhbGwobXRycl9pZl9pbml0KTsKICNlbmRpZgkJCS8qICBDT05GSUdfUFJPQ19GUyAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDhmYzI0OGIuLjdhZjBmODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtMjUsNDMgKzI1LDQ4IEBACiAgICAgT3BlcmF0aW5nIFN5c3RlbSBXcml0ZXIncyBHdWlkZSIgKEludGVsIGRvY3VtZW50IG51bWJlciAyNDI2OTIpLAogICAgIHNlY3Rpb24gMTEuMTEuNwogCi0gICAgVGhpcyB3YXMgY2xlYW5lZCBhbmQgbWFkZSByZWFkYWJsZSBieSBQYXRyaWNrIE1vY2hlbCA8bW9jaGVsQG9zZGwub3JnPiAKLSAgICBvbiA2LTcgTWFyY2ggMjAwMi4gCi0gICAgU291cmNlOiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgRGV2ZWxvcGVycyBNYW51YWwsIFZvbHVtZSAzOiAKKyAgICBUaGlzIHdhcyBjbGVhbmVkIGFuZCBtYWRlIHJlYWRhYmxlIGJ5IFBhdHJpY2sgTW9jaGVsIDxtb2NoZWxAb3NkbC5vcmc+CisgICAgb24gNi03IE1hcmNoIDIwMDIuCisgICAgU291cmNlOiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUgRGV2ZWxvcGVycyBNYW51YWwsIFZvbHVtZSAzOgogICAgIFN5c3RlbSBQcm9ncmFtbWluZyBHdWlkZTsgU2VjdGlvbiA5LjExLiAoMTk5NyBlZGl0aW9uIC0gUFBybykuCiAqLwogCisjZGVmaW5lIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiAvKiBGSVhNRToga3ZtX3BhcmEuaCBuZWVkcyB0aGlzICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1fcGFyYS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KKwogI2luY2x1ZGUgIm10cnIuaCIKIAotdTMyIG51bV92YXJfcmFuZ2VzID0gMDsKK3UzMiBudW1fdmFyX3JhbmdlczsKIAogdW5zaWduZWQgaW50IG10cnJfdXNhZ2VfdGFibGVbTVRSUl9NQVhfVkFSX1JBTkdFU107CiBzdGF0aWMgREVGSU5FX01VVEVYKG10cnJfbXV0ZXgpOwogCiB1NjQgc2l6ZV9vcl9tYXNrLCBzaXplX2FuZF9tYXNrOwogCi1zdGF0aWMgc3RydWN0IG10cnJfb3BzICogbXRycl9vcHNbWDg2X1ZFTkRPUl9OVU1dID0ge307CitzdGF0aWMgc3RydWN0IG10cnJfb3BzICptdHJyX29wc1tYODZfVkVORE9SX05VTV07CiAKLXN0cnVjdCBtdHJyX29wcyAqIG10cnJfaWYgPSBOVUxMOworc3RydWN0IG10cnJfb3BzICptdHJyX2lmOwogCiBzdGF0aWMgdm9pZCBzZXRfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2UsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSk7CiAKLXZvaWQgc2V0X210cnJfb3BzKHN0cnVjdCBtdHJyX29wcyAqIG9wcykKK3ZvaWQgc2V0X210cnJfb3BzKHN0cnVjdCBtdHJyX29wcyAqb3BzKQogewogCWlmIChvcHMtPnZlbmRvciAmJiBvcHMtPnZlbmRvciA8IFg4Nl9WRU5ET1JfTlVNKQogCQltdHJyX29wc1tvcHMtPnZlbmRvcl0gPSBvcHM7CkBAIC03MiwzMCArNzcsMzYgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCXU4IHJldjsKLQkKLQlpZiAoKGRldiA9IHBjaV9nZXRfY2xhc3MoUENJX0NMQVNTX0JSSURHRV9IT1NUIDw8IDgsIE5VTEwpKSAhPSBOVUxMKSB7Ci0JCS8qIFNlcnZlcldvcmtzIExFIGNoaXBzZXRzIDwgcmV2IDYgaGF2ZSBwcm9ibGVtcyB3aXRoIHdyaXRlLWNvbWJpbmluZwotCQkgICBEb24ndCBhbGxvdyBpdCBhbmQgbGVhdmUgcm9vbSBmb3Igb3RoZXIgY2hpcHNldHMgdG8gYmUgdGFnZ2VkICovCisKKwlkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19CUklER0VfSE9TVCA8PCA4LCBOVUxMKTsKKwlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJLyoKKwkJICogU2VydmVyV29ya3MgTEUgY2hpcHNldHMgPCByZXYgNiBoYXZlIHByb2JsZW1zIHdpdGgKKwkJICogd3JpdGUtY29tYmluaW5nLiBEb24ndCBhbGxvdyBpdCBhbmQgbGVhdmUgcm9vbSBmb3Igb3RoZXIKKwkJICogY2hpcHNldHMgdG8gYmUgdGFnZ2VkCisJCSAqLwogCQlpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUyAmJgogCQkgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19MRSkgewogCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZyZXYpOwogCQkJaWYgKHJldiA8PSA1KSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAibXRycjogU2VydmVyd29ya3MgTEUgcmV2IDwgNiBkZXRlY3RlZC4gV3JpdGUtY29tYmluaW5nIGRpc2FibGVkLlxuIik7CisJCQkJcHJfaW5mbygibXRycjogU2VydmVyd29ya3MgTEUgcmV2IDwgNiBkZXRlY3RlZC4gV3JpdGUtY29tYmluaW5nIGRpc2FibGVkLlxuIik7CiAJCQkJcGNpX2Rldl9wdXQoZGV2KTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQotCQkvKiBJbnRlbCA0NTBOWCBlcnJhdGEgIyAyMy4gTm9uIGFzY2VuZGluZyBjYWNoZWxpbmUgZXZpY3Rpb25zIHRvCi0JCSAgIHdyaXRlIGNvbWJpbmluZyBtZW1vcnkgbWF5IHJlc3VsdGluZyBpbiBkYXRhIGNvcnJ1cHRpb24gKi8KKwkJLyoKKwkJICogSW50ZWwgNDUwTlggZXJyYXRhICMgMjMuIE5vbiBhc2NlbmRpbmcgY2FjaGVsaW5lIGV2aWN0aW9ucyB0bworCQkgKiB3cml0ZSBjb21iaW5pbmcgbWVtb3J5IG1heSByZXN1bHRpbmcgaW4gZGF0YSBjb3JydXB0aW9uCisJCSAqLwogCQlpZiAoZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCAmJgogCQkgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1MU5YKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJtdHJyOiBJbnRlbCA0NTBOWCBNTUMgZGV0ZWN0ZWQuIFdyaXRlLWNvbWJpbmluZyBkaXNhYmxlZC5cbiIpOworCQkJcHJfaW5mbygibXRycjogSW50ZWwgNDUwTlggTU1DIGRldGVjdGVkLiBXcml0ZS1jb21iaW5pbmcgZGlzYWJsZWQuXG4iKTsKIAkJCXBjaV9kZXZfcHV0KGRldik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlwY2lfZGV2X3B1dChkZXYpOwotCX0JCQotCXJldHVybiAobXRycl9pZi0+aGF2ZV93cmNvbWIgPyBtdHJyX2lmLT5oYXZlX3dyY29tYigpIDogMCk7CisJfQorCXJldHVybiBtdHJyX2lmLT5oYXZlX3dyY29tYiA/IG10cnJfaWYtPmhhdmVfd3Jjb21iKCkgOiAwOwogfQogCiAvKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFyaWFibGUgTVRSUnMgICovCkBAIC0xMDMsMTIgKzExNCwxMyBAQAogewogCXVuc2lnbmVkIGxvbmcgY29uZmlnID0gMCwgZHVtbXk7CiAKLQlpZiAodXNlX2ludGVsKCkpIHsKKwlpZiAodXNlX2ludGVsKCkpCiAJCXJkbXNyKE1TUl9NVFJSY2FwLCBjb25maWcsIGR1bW15KTsKLQl9IGVsc2UgaWYgKGlzX2NwdShBTUQpKQorCWVsc2UgaWYgKGlzX2NwdShBTUQpKQogCQljb25maWcgPSAyOwogCWVsc2UgaWYgKGlzX2NwdShDWVJJWCkgfHwgaXNfY3B1KENFTlRBVVIpKQogCQljb25maWcgPSA4OworCiAJbnVtX3Zhcl9yYW5nZXMgPSBjb25maWcgJiAweGZmOwogfQogCkBAIC0xMzAsMTAgKzE0MiwxMiBAQAogCW10cnJfdHlwZQlzbXBfdHlwZTsKIH07CiAKKy8qKgorICogaXBpX2hhbmRsZXIgLSBTeW5jaHJvbmlzYXRpb24gaGFuZGxlci4gRXhlY3V0ZWQgYnkgIm90aGVyIiBDUFVzLgorICoKKyAqIFJldHVybnMgbm90aGluZy4KKyAqLwogc3RhdGljIHZvaWQgaXBpX2hhbmRsZXIodm9pZCAqaW5mbykKLS8qICBbU1VNTUFSWV0gU3luY2hyb25pc2F0aW9uIGhhbmRsZXIuIEV4ZWN1dGVkIGJ5ICJvdGhlciIgQ1BVcy4KLSAgICBbUkVUVVJOU10gTm90aGluZy4KLSovCiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCXN0cnVjdCBzZXRfbXRycl9kYXRhICpkYXRhID0gaW5mbzsKQEAgLTE0MiwxOCArMTU2LDE5IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+Y291bnQpOwotCXdoaWxlKCFhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCisJd2hpbGUgKCFhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCiAJCWNwdV9yZWxheCgpOwogCiAJLyogIFRoZSBtYXN0ZXIgaGFzIGNsZWFyZWQgbWUgdG8gZXhlY3V0ZSAgKi8KLQlpZiAoZGF0YS0+c21wX3JlZyAhPSB+MFUpIAotCQltdHJyX2lmLT5zZXQoZGF0YS0+c21wX3JlZywgZGF0YS0+c21wX2Jhc2UsIAorCWlmIChkYXRhLT5zbXBfcmVnICE9IH4wVSkgeworCQltdHJyX2lmLT5zZXQoZGF0YS0+c21wX3JlZywgZGF0YS0+c21wX2Jhc2UsCiAJCQkgICAgIGRhdGEtPnNtcF9zaXplLCBkYXRhLT5zbXBfdHlwZSk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCW10cnJfaWYtPnNldF9hbGwoKTsKKwl9CiAKIAlhdG9taWNfZGVjKCZkYXRhLT5jb3VudCk7Ci0Jd2hpbGUoYXRvbWljX3JlYWQoJmRhdGEtPmdhdGUpKQorCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS0+Z2F0ZSkpCiAJCWNwdV9yZWxheCgpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+Y291bnQpOwpAQCAtMTYxLDcgKzE3Niw4IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdHlwZXNfY29tcGF0aWJsZShtdHJyX3R5cGUgdHlwZTEsIG10cnJfdHlwZSB0eXBlMikgeworc3RhdGljIGlubGluZSBpbnQgdHlwZXNfY29tcGF0aWJsZShtdHJyX3R5cGUgdHlwZTEsIG10cnJfdHlwZSB0eXBlMikKK3sKIAlyZXR1cm4gdHlwZTEgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgfHwKIAkgICAgICAgdHlwZTIgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgfHwKIAkgICAgICAgKHR5cGUxID09IE1UUlJfVFlQRV9XUlRIUk9VR0ggJiYgdHlwZTIgPT0gTVRSUl9UWVBFX1dSQkFDSykgfHwKQEAgLTE3NiwxMCArMTkyLDEwIEBACiAgKiBAdHlwZToJbXRyciB0eXBlCiAgKgogICogVGhpcyBpcyBraW5kYSB0cmlja3ksIGJ1dCBmb3J0dW5hdGVseSwgSW50ZWwgc3BlbGxlZCBpdCBvdXQgZm9yIHVzIGNsZWFubHk6Ci0gKiAKKyAqCiAgKiAxLiBTZW5kIElQSSB0byBkbyB0aGUgZm9sbG93aW5nOgogICogMi4gRGlzYWJsZSBJbnRlcnJ1cHRzCi0gKiAzLiBXYWl0IGZvciBhbGwgcHJvY3MgdG8gZG8gc28gCisgKiAzLiBXYWl0IGZvciBhbGwgcHJvY3MgdG8gZG8gc28KICAqIDQuIEVudGVyIG5vLWZpbGwgY2FjaGUgbW9kZQogICogNS4gRmx1c2ggY2FjaGVzCiAgKiA2LiBDbGVhciBQR0UgYml0CkBAIC0xODksMjYgKzIwNSwyNyBAQAogICogMTAuIEVuYWJsZSBhbGwgcmFuZ2UgcmVnaXN0ZXJzCiAgKiAxMS4gRmx1c2ggYWxsIFRMQnMgYW5kIGNhY2hlcyBhZ2FpbgogICogMTIuIEVudGVyIG5vcm1hbCBjYWNoZSBtb2RlIGFuZCByZWVuYWJsZSBjYWNoaW5nCi0gKiAxMy4gU2V0IFBHRSAKKyAqIDEzLiBTZXQgUEdFCiAgKiAxNC4gV2FpdCBmb3IgYnVkZGllcyB0byBjYXRjaCB1cAogICogMTUuIEVuYWJsZSBpbnRlcnJ1cHRzLgotICogCisgKgogICogV2hhdCBkb2VzIHRoYXQgbWVhbiBmb3IgdXM/IFdlbGwsIGZpcnN0IHdlIHNldCBkYXRhLmNvdW50IHRvIHRoZSBudW1iZXIKICAqIG9mIENQVXMuIEFzIGVhY2ggQ1BVIGRpc2FibGVzIGludGVycnVwdHMsIGl0J2xsIGRlY3JlbWVudCBpdCBvbmNlLiBXZSB3YWl0CiAgKiB1bnRpbCBpdCBoaXRzIDAgYW5kIHByb2NlZWQuIFdlIHNldCB0aGUgZGF0YS5nYXRlIGZsYWcgYW5kIHJlc2V0IGRhdGEuY291bnQuCi0gKiBNZWFud2hpbGUsIHRoZXkgYXJlIHdhaXRpbmcgZm9yIHRoYXQgZmxhZyB0byBiZSBzZXQuIE9uY2UgaXQncyBzZXQsIGVhY2ggCi0gKiBDUFUgZ29lcyB0aHJvdWdoIHRoZSB0cmFuc2l0aW9uIG9mIHVwZGF0aW5nIE1UUlJzLiBUaGUgQ1BVIHZlbmRvcnMgbWF5IGVhY2ggZG8gaXQgCi0gKiBkaWZmZXJlbnRseSwgc28gd2UgY2FsbCBtdHJyX2lmLT5zZXQoKSBjYWxsYmFjayBhbmQgbGV0IHRoZW0gdGFrZSBjYXJlIG9mIGl0LgotICogV2hlbiB0aGV5J3JlIGRvbmUsIHRoZXkgYWdhaW4gZGVjcmVtZW50IGRhdGEtPmNvdW50IGFuZCB3YWl0IGZvciBkYXRhLmdhdGUgdG8gCi0gKiBiZSByZXNldC4gCi0gKiBXaGVuIHdlIGZpbmlzaCwgd2Ugd2FpdCBmb3IgZGF0YS5jb3VudCB0byBoaXQgMCBhbmQgdG9nZ2xlIHRoZSBkYXRhLmdhdGUgZmxhZy4KKyAqIE1lYW53aGlsZSwgdGhleSBhcmUgd2FpdGluZyBmb3IgdGhhdCBmbGFnIHRvIGJlIHNldC4gT25jZSBpdCdzIHNldCwgZWFjaAorICogQ1BVIGdvZXMgdGhyb3VnaCB0aGUgdHJhbnNpdGlvbiBvZiB1cGRhdGluZyBNVFJScy4KKyAqIFRoZSBDUFUgdmVuZG9ycyBtYXkgZWFjaCBkbyBpdCBkaWZmZXJlbnRseSwKKyAqIHNvIHdlIGNhbGwgbXRycl9pZi0+c2V0KCkgY2FsbGJhY2sgYW5kIGxldCB0aGVtIHRha2UgY2FyZSBvZiBpdC4KKyAqIFdoZW4gdGhleSdyZSBkb25lLCB0aGV5IGFnYWluIGRlY3JlbWVudCBkYXRhLT5jb3VudCBhbmQgd2FpdCBmb3IgZGF0YS5nYXRlCisgKiB0byBiZSByZXNldC4KKyAqIFdoZW4gd2UgZmluaXNoLCB3ZSB3YWl0IGZvciBkYXRhLmNvdW50IHRvIGhpdCAwIGFuZCB0b2dnbGUgdGhlIGRhdGEuZ2F0ZSBmbGFnCiAgKiBFdmVyeW9uZSB0aGVuIGVuYWJsZXMgaW50ZXJydXB0cyBhbmQgd2UgYWxsIGNvbnRpbnVlIG9uLgogICoKICAqIE5vdGUgdGhhdCB0aGUgbWVjaGFuaXNtIGlzIHRoZSBzYW1lIGZvciBVUCBzeXN0ZW1zLCB0b287IGFsbCB0aGUgU01QIHN0dWZmCiAgKiBiZWNvbWVzIG5vcHMuCiAgKi8KLXN0YXRpYyB2b2lkIHNldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIG10cnJfdHlwZSB0eXBlKQorc3RhdGljIHZvaWQKK3NldF9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCBtdHJyX3R5cGUgdHlwZSkKIHsKIAlzdHJ1Y3Qgc2V0X210cnJfZGF0YSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMTgsMTIxICsyMzUsMTIyIEBACiAJZGF0YS5zbXBfc2l6ZSA9IHNpemU7CiAJZGF0YS5zbXBfdHlwZSA9IHR5cGU7CiAJYXRvbWljX3NldCgmZGF0YS5jb3VudCwgbnVtX2Jvb3RpbmdfY3B1cygpIC0gMSk7Ci0JLyogbWFrZSBzdXJlIGRhdGEuY291bnQgaXMgdmlzaWJsZSBiZWZvcmUgdW5sZWFzaGluZyBvdGhlciBDUFVzICovCi0Jc21wX3dtYigpOwotCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwwKTsKIAotCS8qICBTdGFydCB0aGUgYmFsbCByb2xsaW5nIG9uIG90aGVyIENQVXMgICovCisJLyogTWFrZSBzdXJlIGRhdGEuY291bnQgaXMgdmlzaWJsZSBiZWZvcmUgdW5sZWFzaGluZyBvdGhlciBDUFVzICovCisJc21wX3dtYigpOworCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwgMCk7CisKKwkvKiBTdGFydCB0aGUgYmFsbCByb2xsaW5nIG9uIG90aGVyIENQVXMgKi8KIAlpZiAoc21wX2NhbGxfZnVuY3Rpb24oaXBpX2hhbmRsZXIsICZkYXRhLCAwKSAhPSAwKQogCQlwYW5pYygibXRycjogdGltZWQgb3V0IHdhaXRpbmcgZm9yIG90aGVyIENQVXNcbiIpOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0Jd2hpbGUoYXRvbWljX3JlYWQoJmRhdGEuY291bnQpKQorCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5jb3VudCkpCiAJCWNwdV9yZWxheCgpOwogCi0JLyogb2ssIHJlc2V0IGNvdW50IGFuZCB0b2dnbGUgZ2F0ZSAqLworCS8qIE9rLCByZXNldCBjb3VudCBhbmQgdG9nZ2xlIGdhdGUgKi8KIAlhdG9taWNfc2V0KCZkYXRhLmNvdW50LCBudW1fYm9vdGluZ19jcHVzKCkgLSAxKTsKIAlzbXBfd21iKCk7Ci0JYXRvbWljX3NldCgmZGF0YS5nYXRlLDEpOworCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwgMSk7CiAKLQkvKiBkbyBvdXIgTVRSUiBidXNpbmVzcyAqLworCS8qIERvIG91ciBNVFJSIGJ1c2luZXNzICovCiAKLQkvKiBIQUNLIQorCS8qCisJICogSEFDSyEKIAkgKiBXZSB1c2UgdGhpcyBzYW1lIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIG10cnJzIG9uIGJvb3QuCiAJICogVGhlIHN0YXRlIG9mIHRoZSBib290IGNwdSdzIG10cnJzIGhhcyBiZWVuIHNhdmVkLCBhbmQgd2Ugd2FudAotCSAqIHRvIHJlcGxpY2F0ZSBhY3Jvc3MgYWxsIHRoZSBBUHMuIAorCSAqIHRvIHJlcGxpY2F0ZSBhY3Jvc3MgYWxsIHRoZSBBUHMuCiAJICogSWYgd2UncmUgZG9pbmcgdGhhdCBAcmVnIGlzIHNldCB0byBzb21ldGhpbmcgc3BlY2lhbC4uLgogCSAqLwotCWlmIChyZWcgIT0gfjBVKSAKLQkJbXRycl9pZi0+c2V0KHJlZyxiYXNlLHNpemUsdHlwZSk7CisJaWYgKHJlZyAhPSB+MFUpCisJCW10cnJfaWYtPnNldChyZWcsIGJhc2UsIHNpemUsIHR5cGUpOwogCi0JLyogd2FpdCBmb3IgdGhlIG90aGVycyAqLwotCXdoaWxlKGF0b21pY19yZWFkKCZkYXRhLmNvdW50KSkKKwkvKiBXYWl0IGZvciB0aGUgb3RoZXJzICovCisJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmNvdW50KSkKIAkJY3B1X3JlbGF4KCk7CiAKIAlhdG9taWNfc2V0KCZkYXRhLmNvdW50LCBudW1fYm9vdGluZ19jcHVzKCkgLSAxKTsKIAlzbXBfd21iKCk7Ci0JYXRvbWljX3NldCgmZGF0YS5nYXRlLDApOworCWF0b21pY19zZXQoJmRhdGEuZ2F0ZSwgMCk7CiAKIAkvKgogCSAqIFdhaXQgaGVyZSBmb3IgZXZlcnlvbmUgdG8gaGF2ZSBzZWVuIHRoZSBnYXRlIGNoYW5nZQogCSAqIFNvIHdlJ3JlIHRoZSBsYXN0IG9uZXMgdG8gdG91Y2ggJ2RhdGEnCiAJICovCi0Jd2hpbGUoYXRvbWljX3JlYWQoJmRhdGEuY291bnQpKQorCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5jb3VudCkpCiAJCWNwdV9yZWxheCgpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKioKLSAqCW10cnJfYWRkX3BhZ2UgLSBBZGQgYSBtZW1vcnkgdHlwZSByZWdpb24KLSAqCUBiYXNlOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgcmVnaW9uIGluIHBhZ2VzIChpbiB1bml0cyBvZiA0IGtCISkKLSAqCUBzaXplOiBQaHlzaWNhbCBzaXplIG9mIHJlZ2lvbiBpbiBwYWdlcyAoNCBrQikKLSAqCUB0eXBlOiBUeXBlIG9mIE1UUlIgZGVzaXJlZAotICoJQGluY3JlbWVudDogSWYgdGhpcyBpcyB0cnVlIGRvIHVzYWdlIGNvdW50aW5nIG9uIHRoZSByZWdpb24KKyAqIG10cnJfYWRkX3BhZ2UgLSBBZGQgYSBtZW1vcnkgdHlwZSByZWdpb24KKyAqIEBiYXNlOiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgcmVnaW9uIGluIHBhZ2VzIChpbiB1bml0cyBvZiA0IGtCISkKKyAqIEBzaXplOiBQaHlzaWNhbCBzaXplIG9mIHJlZ2lvbiBpbiBwYWdlcyAoNCBrQikKKyAqIEB0eXBlOiBUeXBlIG9mIE1UUlIgZGVzaXJlZAorICogQGluY3JlbWVudDogSWYgdGhpcyBpcyB0cnVlIGRvIHVzYWdlIGNvdW50aW5nIG9uIHRoZSByZWdpb24KICAqCi0gKglNZW1vcnkgdHlwZSByZWdpb24gcmVnaXN0ZXJzIGNvbnRyb2wgdGhlIGNhY2hpbmcgb24gbmV3ZXIgSW50ZWwgYW5kCi0gKglub24gSW50ZWwgcHJvY2Vzc29ycy4gVGhpcyBmdW5jdGlvbiBhbGxvd3MgZHJpdmVycyB0byByZXF1ZXN0IGFuCi0gKglNVFJSIGlzIGFkZGVkLiBUaGUgZGV0YWlscyBhbmQgaGFyZHdhcmUgc3BlY2lmaWNzIG9mIGVhY2ggcHJvY2Vzc29yJ3MKLSAqCWltcGxlbWVudGF0aW9uIGFyZSBoaWRkZW4gZnJvbSB0aGUgY2FsbGVyLCBidXQgbmV2ZXJ0aGVsZXNzIHRoZSAKLSAqCWNhbGxlciBzaG91bGQgZXhwZWN0IHRvIG5lZWQgdG8gcHJvdmlkZSBhIHBvd2VyIG9mIHR3byBzaXplIG9uIGFuCi0gKgllcXVpdmFsZW50IHBvd2VyIG9mIHR3byBib3VuZGFyeS4KKyAqIE1lbW9yeSB0eXBlIHJlZ2lvbiByZWdpc3RlcnMgY29udHJvbCB0aGUgY2FjaGluZyBvbiBuZXdlciBJbnRlbCBhbmQKKyAqIG5vbiBJbnRlbCBwcm9jZXNzb3JzLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBkcml2ZXJzIHRvIHJlcXVlc3QgYW4KKyAqIE1UUlIgaXMgYWRkZWQuIFRoZSBkZXRhaWxzIGFuZCBoYXJkd2FyZSBzcGVjaWZpY3Mgb2YgZWFjaCBwcm9jZXNzb3IncworICogaW1wbGVtZW50YXRpb24gYXJlIGhpZGRlbiBmcm9tIHRoZSBjYWxsZXIsIGJ1dCBuZXZlcnRoZWxlc3MgdGhlCisgKiBjYWxsZXIgc2hvdWxkIGV4cGVjdCB0byBuZWVkIHRvIHByb3ZpZGUgYSBwb3dlciBvZiB0d28gc2l6ZSBvbiBhbgorICogZXF1aXZhbGVudCBwb3dlciBvZiB0d28gYm91bmRhcnkuCiAgKgotICoJSWYgdGhlIHJlZ2lvbiBjYW5ub3QgYmUgYWRkZWQgZWl0aGVyIGJlY2F1c2UgYWxsIHJlZ2lvbnMgYXJlIGluIHVzZQotICoJb3IgdGhlIENQVSBjYW5ub3Qgc3VwcG9ydCBpdCBhIG5lZ2F0aXZlIHZhbHVlIGlzIHJldHVybmVkLiBPbiBzdWNjZXNzCi0gKgl0aGUgcmVnaXN0ZXIgbnVtYmVyIGZvciB0aGlzIGVudHJ5IGlzIHJldHVybmVkLCBidXQgc2hvdWxkIGJlIHRyZWF0ZWQKLSAqCWFzIGEgY29va2llIG9ubHkuCisgKiBJZiB0aGUgcmVnaW9uIGNhbm5vdCBiZSBhZGRlZCBlaXRoZXIgYmVjYXVzZSBhbGwgcmVnaW9ucyBhcmUgaW4gdXNlCisgKiBvciB0aGUgQ1BVIGNhbm5vdCBzdXBwb3J0IGl0IGEgbmVnYXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQuIE9uIHN1Y2Nlc3MKKyAqIHRoZSByZWdpc3RlciBudW1iZXIgZm9yIHRoaXMgZW50cnkgaXMgcmV0dXJuZWQsIGJ1dCBzaG91bGQgYmUgdHJlYXRlZAorICogYXMgYSBjb29raWUgb25seS4KICAqCi0gKglPbiBhIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUgdGhlIGNoYW5nZXMgYXJlIG1hZGUgdG8gYWxsIHByb2Nlc3NvcnMuCi0gKglUaGlzIGlzIHJlcXVpcmVkIG9uIHg4NiBieSB0aGUgSW50ZWwgcHJvY2Vzc29ycy4KKyAqIE9uIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZSB0aGUgY2hhbmdlcyBhcmUgbWFkZSB0byBhbGwgcHJvY2Vzc29ycy4KKyAqIFRoaXMgaXMgcmVxdWlyZWQgb24geDg2IGJ5IHRoZSBJbnRlbCBwcm9jZXNzb3JzLgogICoKLSAqCVRoZSBhdmFpbGFibGUgdHlwZXMgYXJlCisgKiBUaGUgYXZhaWxhYmxlIHR5cGVzIGFyZQogICoKLSAqCSVNVFJSX1RZUEVfVU5DQUNIQUJMRQktCU5vIGNhY2hpbmcKKyAqICVNVFJSX1RZUEVfVU5DQUNIQUJMRSAtIE5vIGNhY2hpbmcKICAqCi0gKgklTVRSUl9UWVBFX1dSQkFDSwktCVdyaXRlIGRhdGEgYmFjayBpbiBidXJzdHMgd2hlbmV2ZXIKKyAqICVNVFJSX1RZUEVfV1JCQUNLIC0gV3JpdGUgZGF0YSBiYWNrIGluIGJ1cnN0cyB3aGVuZXZlcgogICoKLSAqCSVNVFJSX1RZUEVfV1JDT01CCS0JV3JpdGUgZGF0YSBiYWNrIHNvb24gYnV0IGFsbG93IGJ1cnN0cworICogJU1UUlJfVFlQRV9XUkNPTUIgLSBXcml0ZSBkYXRhIGJhY2sgc29vbiBidXQgYWxsb3cgYnVyc3RzCiAgKgotICoJJU1UUlJfVFlQRV9XUlRIUk9VR0gJLQlDYWNoZSByZWFkcyBidXQgbm90IHdyaXRlcworICogJU1UUlJfVFlQRV9XUlRIUk9VR0ggLSBDYWNoZSByZWFkcyBidXQgbm90IHdyaXRlcwogICoKLSAqCUJVR1M6IE5lZWRzIGEgcXVpZXQgZmxhZyBmb3IgdGhlIGNhc2VzIHdoZXJlIGRyaXZlcnMgZG8gbm90IG1pbmQKLSAqCWZhaWx1cmVzIGFuZCBkbyBub3Qgd2lzaCBzeXN0ZW0gbG9nIG1lc3NhZ2VzIHRvIGJlIHNlbnQuCisgKiBCVUdTOiBOZWVkcyBhIHF1aWV0IGZsYWcgZm9yIHRoZSBjYXNlcyB3aGVyZSBkcml2ZXJzIGRvIG5vdCBtaW5kCisgKiBmYWlsdXJlcyBhbmQgZG8gbm90IHdpc2ggc3lzdGVtIGxvZyBtZXNzYWdlcyB0byBiZSBzZW50LgogICovCi0KLWludCBtdHJyX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCAKK2ludCBtdHJyX2FkZF9wYWdlKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkgIHVuc2lnbmVkIGludCB0eXBlLCBib29sIGluY3JlbWVudCkKIHsKKwl1bnNpZ25lZCBsb25nIGxiYXNlLCBsc2l6ZTsKIAlpbnQgaSwgcmVwbGFjZSwgZXJyb3I7CiAJbXRycl90eXBlIGx0eXBlOwotCXVuc2lnbmVkIGxvbmcgbGJhc2UsIGxzaXplOwogCiAJaWYgKCFtdHJyX2lmKQogCQlyZXR1cm4gLUVOWElPOwotCQkKLQlpZiAoKGVycm9yID0gbXRycl9pZi0+dmFsaWRhdGVfYWRkX3BhZ2UoYmFzZSxzaXplLHR5cGUpKSkKKworCWVycm9yID0gbXRycl9pZi0+dmFsaWRhdGVfYWRkX3BhZ2UoYmFzZSwgc2l6ZSwgdHlwZSk7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAodHlwZSA+PSBNVFJSX05VTV9UWVBFUykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiB0eXBlOiAldSBpbnZhbGlkXG4iLCB0eXBlKTsKKwkJcHJfd2FybmluZygibXRycjogdHlwZTogJXUgaW52YWxpZFxuIiwgdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qICBJZiB0aGUgdHlwZSBpcyBXQywgY2hlY2sgdGhhdCB0aGlzIHByb2Nlc3NvciBzdXBwb3J0cyBpdCAgKi8KKwkvKiBJZiB0aGUgdHlwZSBpcyBXQywgY2hlY2sgdGhhdCB0aGlzIHByb2Nlc3NvciBzdXBwb3J0cyBpdCAqLwogCWlmICgodHlwZSA9PSBNVFJSX1RZUEVfV1JDT01CKSAmJiAhaGF2ZV93cmNvbWIoKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAibXRycjogeW91ciBwcm9jZXNzb3IgZG9lc24ndCBzdXBwb3J0IHdyaXRlLWNvbWJpbmluZ1xuIik7CisJCXByX3dhcm5pbmcoIm10cnI6IHlvdXIgcHJvY2Vzc29yIGRvZXNuJ3Qgc3VwcG9ydCB3cml0ZS1jb21iaW5pbmdcbiIpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKIAlpZiAoIXNpemUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogemVybyBzaXplZCByZXF1ZXN0XG4iKTsKKwkJcHJfd2FybmluZygibXRycjogemVybyBzaXplZCByZXF1ZXN0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGJhc2UgJiBzaXplX29yX21hc2sgfHwgc2l6ZSAmIHNpemVfb3JfbWFzaykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiBiYXNlIG9yIHNpemUgZXhjZWVkcyB0aGUgTVRSUiB3aWR0aFxuIik7CisJCXByX3dhcm5pbmcoIm10cnI6IGJhc2Ugb3Igc2l6ZSBleGNlZWRzIHRoZSBNVFJSIHdpZHRoXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0zNDEsMzYgKzM1OSw0MCBAQAogCiAJLyogTm8gQ1BVIGhvdHBsdWcgd2hlbiB3ZSBjaGFuZ2UgTVRSUiBlbnRyaWVzICovCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0JLyogIFNlYXJjaCBmb3IgZXhpc3RpbmcgTVRSUiAgKi8KKworCS8qIFNlYXJjaCBmb3IgZXhpc3RpbmcgTVRSUiAgKi8KIAltdXRleF9sb2NrKCZtdHJyX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7ICsraSkgewogCQltdHJyX2lmLT5nZXQoaSwgJmxiYXNlLCAmbHNpemUsICZsdHlwZSk7Ci0JCWlmICghbHNpemUgfHwgYmFzZSA+IGxiYXNlICsgbHNpemUgLSAxIHx8IGJhc2UgKyBzaXplIC0gMSA8IGxiYXNlKQorCQlpZiAoIWxzaXplIHx8IGJhc2UgPiBsYmFzZSArIGxzaXplIC0gMSB8fAorCQkgICAgYmFzZSArIHNpemUgLSAxIDwgbGJhc2UpCiAJCQljb250aW51ZTsKLQkJLyogIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGVyZSBpcyBzb21lIGtpbmQgb2Ygb3ZlcmxhcC9lbmNsb3N1cmUgICovCisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGVyZSBpcyBzb21lIGtpbmQgb2YKKwkJICogb3ZlcmxhcC9lbmNsb3N1cmUKKwkJICovCiAJCWlmIChiYXNlIDwgbGJhc2UgfHwgYmFzZSArIHNpemUgLSAxID4gbGJhc2UgKyBsc2l6ZSAtIDEpIHsKLQkJCWlmIChiYXNlIDw9IGxiYXNlICYmIGJhc2UgKyBzaXplIC0gMSA+PSBsYmFzZSArIGxzaXplIC0gMSkgeworCQkJaWYgKGJhc2UgPD0gbGJhc2UgJiYKKwkJCSAgICBiYXNlICsgc2l6ZSAtIDEgPj0gbGJhc2UgKyBsc2l6ZSAtIDEpIHsKIAkJCQkvKiAgTmV3IHJlZ2lvbiBlbmNsb3NlcyBhbiBleGlzdGluZyByZWdpb24gICovCiAJCQkJaWYgKHR5cGUgPT0gbHR5cGUpIHsKIAkJCQkJcmVwbGFjZSA9IHJlcGxhY2UgPT0gLTEgPyBpIDogLTI7CiAJCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQllbHNlIGlmICh0eXBlc19jb21wYXRpYmxlKHR5cGUsIGx0eXBlKSkKKwkJCQl9IGVsc2UgaWYgKHR5cGVzX2NvbXBhdGlibGUodHlwZSwgbHR5cGUpKQogCQkJCQljb250aW51ZTsKIAkJCX0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAibXRycjogMHglbHgwMDAsMHglbHgwMDAgb3ZlcmxhcHMgZXhpc3RpbmciCi0JCQkgICAgICAgIiAweCVseDAwMCwweCVseDAwMFxuIiwgYmFzZSwgc2l6ZSwgbGJhc2UsCi0JCQkgICAgICAgbHNpemUpOworCQkJcHJfd2FybmluZygibXRycjogMHglbHgwMDAsMHglbHgwMDAgb3ZlcmxhcHMgZXhpc3RpbmciCisJCQkJIiAweCVseDAwMCwweCVseDAwMFxuIiwgYmFzZSwgc2l6ZSwgbGJhc2UsCisJCQkJbHNpemUpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJLyogIE5ldyByZWdpb24gaXMgZW5jbG9zZWQgYnkgYW4gZXhpc3RpbmcgcmVnaW9uICAqLworCQkvKiBOZXcgcmVnaW9uIGlzIGVuY2xvc2VkIGJ5IGFuIGV4aXN0aW5nIHJlZ2lvbiAqLwogCQlpZiAobHR5cGUgIT0gdHlwZSkgewogCQkJaWYgKHR5cGVzX2NvbXBhdGlibGUodHlwZSwgbHR5cGUpKQogCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm10cnI6IHR5cGUgbWlzbWF0Y2ggZm9yICVseDAwMCwlbHgwMDAgb2xkOiAlcyBuZXc6ICVzXG4iLAotCQkJICAgICBiYXNlLCBzaXplLCBtdHJyX2F0dHJpYl90b19zdHIobHR5cGUpLAotCQkJICAgICBtdHJyX2F0dHJpYl90b19zdHIodHlwZSkpOworCQkJcHJfd2FybmluZygibXRycjogdHlwZSBtaXNtYXRjaCBmb3IgJWx4MDAwLCVseDAwMCBvbGQ6ICVzIG5ldzogJXNcbiIsCisJCQkJYmFzZSwgc2l6ZSwgbXRycl9hdHRyaWJfdG9fc3RyKGx0eXBlKSwKKwkJCQltdHJyX2F0dHJpYl90b19zdHIodHlwZSkpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKGluY3JlbWVudCkKQEAgLTM3OCw3ICs0MDAsNyBAQAogCQllcnJvciA9IGk7CiAJCWdvdG8gb3V0OwogCX0KLQkvKiAgU2VhcmNoIGZvciBhbiBlbXB0eSBNVFJSICAqLworCS8qIFNlYXJjaCBmb3IgYW4gZW1wdHkgTVRSUiAqLwogCWkgPSBtdHJyX2lmLT5nZXRfZnJlZV9yZWdpb24oYmFzZSwgc2l6ZSwgcmVwbGFjZSk7CiAJaWYgKGkgPj0gMCkgewogCQlzZXRfbXRycihpLCBiYXNlLCBzaXplLCB0eXBlKTsKQEAgLTM5Myw4ICs0MTUsOSBAQAogCQkJCW10cnJfdXNhZ2VfdGFibGVbcmVwbGFjZV0gPSAwOwogCQkJfQogCQl9Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8gIm10cnI6IG5vIG1vcmUgTVRSUnMgYXZhaWxhYmxlXG4iKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJtdHJyOiBubyBtb3JlIE1UUlJzIGF2YWlsYWJsZVxuIik7CisJfQogCWVycm9yID0gaTsKICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZtdHJyX211dGV4KTsKQEAgLTQwNSwxMCArNDI4LDggQEAKIHN0YXRpYyBpbnQgbXRycl9jaGVjayh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAoKGJhc2UgJiAoUEFHRV9TSVpFIC0gMSkpIHx8IChzaXplICYgKFBBR0VfU0laRSAtIDEpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkibXRycjogc2l6ZSBhbmQgYmFzZSBtdXN0IGJlIG11bHRpcGxlcyBvZiA0IGtpQlxuIik7Ci0JCXByaW50ayhLRVJOX0RFQlVHCi0JCQkibXRycjogc2l6ZTogMHglbHggIGJhc2U6IDB4JWx4XG4iLCBzaXplLCBiYXNlKTsKKwkJcHJfd2FybmluZygibXRycjogc2l6ZSBhbmQgYmFzZSBtdXN0IGJlIG11bHRpcGxlcyBvZiA0IGtpQlxuIik7CisJCXByX2RlYnVnKCJtdHJyOiBzaXplOiAweCVseCAgYmFzZTogMHglbHhcbiIsIHNpemUsIGJhc2UpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MTYsNjYgKzQzNyw2NCBAQAogfQogCiAvKioKLSAqCW10cnJfYWRkIC0gQWRkIGEgbWVtb3J5IHR5cGUgcmVnaW9uCi0gKglAYmFzZTogUGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHJlZ2lvbgotICoJQHNpemU6IFBoeXNpY2FsIHNpemUgb2YgcmVnaW9uCi0gKglAdHlwZTogVHlwZSBvZiBNVFJSIGRlc2lyZWQKLSAqCUBpbmNyZW1lbnQ6IElmIHRoaXMgaXMgdHJ1ZSBkbyB1c2FnZSBjb3VudGluZyBvbiB0aGUgcmVnaW9uCisgKiBtdHJyX2FkZCAtIEFkZCBhIG1lbW9yeSB0eXBlIHJlZ2lvbgorICogQGJhc2U6IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiByZWdpb24KKyAqIEBzaXplOiBQaHlzaWNhbCBzaXplIG9mIHJlZ2lvbgorICogQHR5cGU6IFR5cGUgb2YgTVRSUiBkZXNpcmVkCisgKiBAaW5jcmVtZW50OiBJZiB0aGlzIGlzIHRydWUgZG8gdXNhZ2UgY291bnRpbmcgb24gdGhlIHJlZ2lvbgogICoKLSAqCU1lbW9yeSB0eXBlIHJlZ2lvbiByZWdpc3RlcnMgY29udHJvbCB0aGUgY2FjaGluZyBvbiBuZXdlciBJbnRlbCBhbmQKLSAqCW5vbiBJbnRlbCBwcm9jZXNzb3JzLiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBkcml2ZXJzIHRvIHJlcXVlc3QgYW4KLSAqCU1UUlIgaXMgYWRkZWQuIFRoZSBkZXRhaWxzIGFuZCBoYXJkd2FyZSBzcGVjaWZpY3Mgb2YgZWFjaCBwcm9jZXNzb3IncwotICoJaW1wbGVtZW50YXRpb24gYXJlIGhpZGRlbiBmcm9tIHRoZSBjYWxsZXIsIGJ1dCBuZXZlcnRoZWxlc3MgdGhlIAotICoJY2FsbGVyIHNob3VsZCBleHBlY3QgdG8gbmVlZCB0byBwcm92aWRlIGEgcG93ZXIgb2YgdHdvIHNpemUgb24gYW4KLSAqCWVxdWl2YWxlbnQgcG93ZXIgb2YgdHdvIGJvdW5kYXJ5LgorICogTWVtb3J5IHR5cGUgcmVnaW9uIHJlZ2lzdGVycyBjb250cm9sIHRoZSBjYWNoaW5nIG9uIG5ld2VyIEludGVsIGFuZAorICogbm9uIEludGVsIHByb2Nlc3NvcnMuIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGRyaXZlcnMgdG8gcmVxdWVzdCBhbgorICogTVRSUiBpcyBhZGRlZC4gVGhlIGRldGFpbHMgYW5kIGhhcmR3YXJlIHNwZWNpZmljcyBvZiBlYWNoIHByb2Nlc3NvcidzCisgKiBpbXBsZW1lbnRhdGlvbiBhcmUgaGlkZGVuIGZyb20gdGhlIGNhbGxlciwgYnV0IG5ldmVydGhlbGVzcyB0aGUKKyAqIGNhbGxlciBzaG91bGQgZXhwZWN0IHRvIG5lZWQgdG8gcHJvdmlkZSBhIHBvd2VyIG9mIHR3byBzaXplIG9uIGFuCisgKiBlcXVpdmFsZW50IHBvd2VyIG9mIHR3byBib3VuZGFyeS4KICAqCi0gKglJZiB0aGUgcmVnaW9uIGNhbm5vdCBiZSBhZGRlZCBlaXRoZXIgYmVjYXVzZSBhbGwgcmVnaW9ucyBhcmUgaW4gdXNlCi0gKglvciB0aGUgQ1BVIGNhbm5vdCBzdXBwb3J0IGl0IGEgbmVnYXRpdmUgdmFsdWUgaXMgcmV0dXJuZWQuIE9uIHN1Y2Nlc3MKLSAqCXRoZSByZWdpc3RlciBudW1iZXIgZm9yIHRoaXMgZW50cnkgaXMgcmV0dXJuZWQsIGJ1dCBzaG91bGQgYmUgdHJlYXRlZAotICoJYXMgYSBjb29raWUgb25seS4KKyAqIElmIHRoZSByZWdpb24gY2Fubm90IGJlIGFkZGVkIGVpdGhlciBiZWNhdXNlIGFsbCByZWdpb25zIGFyZSBpbiB1c2UKKyAqIG9yIHRoZSBDUFUgY2Fubm90IHN1cHBvcnQgaXQgYSBuZWdhdGl2ZSB2YWx1ZSBpcyByZXR1cm5lZC4gT24gc3VjY2VzcworICogdGhlIHJlZ2lzdGVyIG51bWJlciBmb3IgdGhpcyBlbnRyeSBpcyByZXR1cm5lZCwgYnV0IHNob3VsZCBiZSB0cmVhdGVkCisgKiBhcyBhIGNvb2tpZSBvbmx5LgogICoKLSAqCU9uIGEgbXVsdGlwcm9jZXNzb3IgbWFjaGluZSB0aGUgY2hhbmdlcyBhcmUgbWFkZSB0byBhbGwgcHJvY2Vzc29ycy4KLSAqCVRoaXMgaXMgcmVxdWlyZWQgb24geDg2IGJ5IHRoZSBJbnRlbCBwcm9jZXNzb3JzLgorICogT24gYSBtdWx0aXByb2Nlc3NvciBtYWNoaW5lIHRoZSBjaGFuZ2VzIGFyZSBtYWRlIHRvIGFsbCBwcm9jZXNzb3JzLgorICogVGhpcyBpcyByZXF1aXJlZCBvbiB4ODYgYnkgdGhlIEludGVsIHByb2Nlc3NvcnMuCiAgKgotICoJVGhlIGF2YWlsYWJsZSB0eXBlcyBhcmUKKyAqIFRoZSBhdmFpbGFibGUgdHlwZXMgYXJlCiAgKgotICoJJU1UUlJfVFlQRV9VTkNBQ0hBQkxFCS0JTm8gY2FjaGluZworICogJU1UUlJfVFlQRV9VTkNBQ0hBQkxFIC0gTm8gY2FjaGluZwogICoKLSAqCSVNVFJSX1RZUEVfV1JCQUNLCS0JV3JpdGUgZGF0YSBiYWNrIGluIGJ1cnN0cyB3aGVuZXZlcgorICogJU1UUlJfVFlQRV9XUkJBQ0sgLSBXcml0ZSBkYXRhIGJhY2sgaW4gYnVyc3RzIHdoZW5ldmVyCiAgKgotICoJJU1UUlJfVFlQRV9XUkNPTUIJLQlXcml0ZSBkYXRhIGJhY2sgc29vbiBidXQgYWxsb3cgYnVyc3RzCisgKiAlTVRSUl9UWVBFX1dSQ09NQiAtIFdyaXRlIGRhdGEgYmFjayBzb29uIGJ1dCBhbGxvdyBidXJzdHMKICAqCi0gKgklTVRSUl9UWVBFX1dSVEhST1VHSAktCUNhY2hlIHJlYWRzIGJ1dCBub3Qgd3JpdGVzCisgKiAlTVRSUl9UWVBFX1dSVEhST1VHSCAtIENhY2hlIHJlYWRzIGJ1dCBub3Qgd3JpdGVzCiAgKgotICoJQlVHUzogTmVlZHMgYSBxdWlldCBmbGFnIGZvciB0aGUgY2FzZXMgd2hlcmUgZHJpdmVycyBkbyBub3QgbWluZAotICoJZmFpbHVyZXMgYW5kIGRvIG5vdCB3aXNoIHN5c3RlbSBsb2cgbWVzc2FnZXMgdG8gYmUgc2VudC4KKyAqIEJVR1M6IE5lZWRzIGEgcXVpZXQgZmxhZyBmb3IgdGhlIGNhc2VzIHdoZXJlIGRyaXZlcnMgZG8gbm90IG1pbmQKKyAqIGZhaWx1cmVzIGFuZCBkbyBub3Qgd2lzaCBzeXN0ZW0gbG9nIG1lc3NhZ2VzIHRvIGJlIHNlbnQuCiAgKi8KLQotaW50Ci1tdHJyX2FkZCh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHR5cGUsCi0JIGJvb2wgaW5jcmVtZW50KQoraW50IG10cnJfYWRkKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkgICAgIGJvb2wgaW5jcmVtZW50KQogewogCWlmIChtdHJyX2NoZWNrKGJhc2UsIHNpemUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gbXRycl9hZGRfcGFnZShiYXNlID4+IFBBR0VfU0hJRlQsIHNpemUgPj4gUEFHRV9TSElGVCwgdHlwZSwKIAkJCSAgICAgaW5jcmVtZW50KTsKIH0KK0VYUE9SVF9TWU1CT0wobXRycl9hZGQpOwogCiAvKioKLSAqCW10cnJfZGVsX3BhZ2UgLSBkZWxldGUgYSBtZW1vcnkgdHlwZSByZWdpb24KLSAqCUByZWc6IFJlZ2lzdGVyIHJldHVybmVkIGJ5IG10cnJfYWRkCi0gKglAYmFzZTogUGh5c2ljYWwgYmFzZSBhZGRyZXNzCi0gKglAc2l6ZTogU2l6ZSBvZiByZWdpb24KKyAqIG10cnJfZGVsX3BhZ2UgLSBkZWxldGUgYSBtZW1vcnkgdHlwZSByZWdpb24KKyAqIEByZWc6IFJlZ2lzdGVyIHJldHVybmVkIGJ5IG10cnJfYWRkCisgKiBAYmFzZTogUGh5c2ljYWwgYmFzZSBhZGRyZXNzCisgKiBAc2l6ZTogU2l6ZSBvZiByZWdpb24KICAqCi0gKglJZiByZWdpc3RlciBpcyBzdXBwbGllZCB0aGVuIGJhc2UgYW5kIHNpemUgYXJlIGlnbm9yZWQuIFRoaXMgaXMKLSAqCWhvdyBkcml2ZXJzIHNob3VsZCBjYWxsIGl0LgorICogSWYgcmVnaXN0ZXIgaXMgc3VwcGxpZWQgdGhlbiBiYXNlIGFuZCBzaXplIGFyZSBpZ25vcmVkLiBUaGlzIGlzCisgKiBob3cgZHJpdmVycyBzaG91bGQgY2FsbCBpdC4KICAqCi0gKglSZWxlYXNlcyBhbiBNVFJSIHJlZ2lvbi4gSWYgdGhlIHVzYWdlIGNvdW50IGRyb3BzIHRvIHplcm8gdGhlIAotICoJcmVnaXN0ZXIgaXMgZnJlZWQgYW5kIHRoZSByZWdpb24gcmV0dXJucyB0byBkZWZhdWx0IHN0YXRlLgotICoJT24gc3VjY2VzcyB0aGUgcmVnaXN0ZXIgaXMgcmV0dXJuZWQsIG9uIGZhaWx1cmUgYSBuZWdhdGl2ZSBlcnJvcgotICoJY29kZS4KKyAqIFJlbGVhc2VzIGFuIE1UUlIgcmVnaW9uLiBJZiB0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gemVybyB0aGUKKyAqIHJlZ2lzdGVyIGlzIGZyZWVkIGFuZCB0aGUgcmVnaW9uIHJldHVybnMgdG8gZGVmYXVsdCBzdGF0ZS4KKyAqIE9uIHN1Y2Nlc3MgdGhlIHJlZ2lzdGVyIGlzIHJldHVybmVkLCBvbiBmYWlsdXJlIGEgbmVnYXRpdmUgZXJyb3IKKyAqIGNvZGUuCiAgKi8KLQogaW50IG10cnJfZGVsX3BhZ2UoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaW50IGksIG1heDsKQEAgLTUwMCwyMiArNTE5LDIyIEBACiAJCQl9CiAJCX0KIAkJaWYgKHJlZyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJtdHJyOiBubyBNVFJSIGZvciAlbHgwMDAsJWx4MDAwIGZvdW5kXG4iLCBiYXNlLAotCQkJICAgICAgIHNpemUpOworCQkJcHJfZGVidWcoIm10cnI6IG5vIE1UUlIgZm9yICVseDAwMCwlbHgwMDAgZm91bmRcbiIsCisJCQkJIGJhc2UsIHNpemUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAJaWYgKHJlZyA+PSBtYXgpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogcmVnaXN0ZXI6ICVkIHRvbyBiaWdcbiIsIHJlZyk7CisJCXByX3dhcm5pbmcoIm10cnI6IHJlZ2lzdGVyOiAlZCB0b28gYmlnXG4iLCByZWcpOwogCQlnb3RvIG91dDsKIAl9CiAJbXRycl9pZi0+Z2V0KHJlZywgJmxiYXNlLCAmbHNpemUsICZsdHlwZSk7CiAJaWYgKGxzaXplIDwgMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtdHJyOiBNVFJSICVkIG5vdCB1c2VkXG4iLCByZWcpOworCQlwcl93YXJuaW5nKCJtdHJyOiBNVFJSICVkIG5vdCB1c2VkXG4iLCByZWcpOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKG10cnJfdXNhZ2VfdGFibGVbcmVnXSA8IDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRycjogcmVnOiAlZCBoYXMgY291bnQ9MFxuIiwgcmVnKTsKKwkJcHJfd2FybmluZygibXRycjogcmVnOiAlZCBoYXMgY291bnQ9MFxuIiwgcmVnKTsKIAkJZ290byBvdXQ7CiAJfQogCWlmICgtLW10cnJfdXNhZ2VfdGFibGVbcmVnXSA8IDEpCkBAIC01MjYsMzMgKzU0NSwzMSBAQAogCXB1dF9vbmxpbmVfY3B1cygpOwogCXJldHVybiBlcnJvcjsKIH0KLS8qKgotICoJbXRycl9kZWwgLSBkZWxldGUgYSBtZW1vcnkgdHlwZSByZWdpb24KLSAqCUByZWc6IFJlZ2lzdGVyIHJldHVybmVkIGJ5IG10cnJfYWRkCi0gKglAYmFzZTogUGh5c2ljYWwgYmFzZSBhZGRyZXNzCi0gKglAc2l6ZTogU2l6ZSBvZiByZWdpb24KLSAqCi0gKglJZiByZWdpc3RlciBpcyBzdXBwbGllZCB0aGVuIGJhc2UgYW5kIHNpemUgYXJlIGlnbm9yZWQuIFRoaXMgaXMKLSAqCWhvdyBkcml2ZXJzIHNob3VsZCBjYWxsIGl0LgotICoKLSAqCVJlbGVhc2VzIGFuIE1UUlIgcmVnaW9uLiBJZiB0aGUgdXNhZ2UgY291bnQgZHJvcHMgdG8gemVybyB0aGUgCi0gKglyZWdpc3RlciBpcyBmcmVlZCBhbmQgdGhlIHJlZ2lvbiByZXR1cm5zIHRvIGRlZmF1bHQgc3RhdGUuCi0gKglPbiBzdWNjZXNzIHRoZSByZWdpc3RlciBpcyByZXR1cm5lZCwgb24gZmFpbHVyZSBhIG5lZ2F0aXZlIGVycm9yCi0gKgljb2RlLgotICovCiAKLWludAotbXRycl9kZWwoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCisvKioKKyAqIG10cnJfZGVsIC0gZGVsZXRlIGEgbWVtb3J5IHR5cGUgcmVnaW9uCisgKiBAcmVnOiBSZWdpc3RlciByZXR1cm5lZCBieSBtdHJyX2FkZAorICogQGJhc2U6IFBoeXNpY2FsIGJhc2UgYWRkcmVzcworICogQHNpemU6IFNpemUgb2YgcmVnaW9uCisgKgorICogSWYgcmVnaXN0ZXIgaXMgc3VwcGxpZWQgdGhlbiBiYXNlIGFuZCBzaXplIGFyZSBpZ25vcmVkLiBUaGlzIGlzCisgKiBob3cgZHJpdmVycyBzaG91bGQgY2FsbCBpdC4KKyAqCisgKiBSZWxlYXNlcyBhbiBNVFJSIHJlZ2lvbi4gSWYgdGhlIHVzYWdlIGNvdW50IGRyb3BzIHRvIHplcm8gdGhlCisgKiByZWdpc3RlciBpcyBmcmVlZCBhbmQgdGhlIHJlZ2lvbiByZXR1cm5zIHRvIGRlZmF1bHQgc3RhdGUuCisgKiBPbiBzdWNjZXNzIHRoZSByZWdpc3RlciBpcyByZXR1cm5lZCwgb24gZmFpbHVyZSBhIG5lZ2F0aXZlIGVycm9yCisgKiBjb2RlLgorICovCitpbnQgbXRycl9kZWwoaW50IHJlZywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKG10cnJfY2hlY2soYmFzZSwgc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiBtdHJyX2RlbF9wYWdlKHJlZywgYmFzZSA+PiBQQUdFX1NISUZULCBzaXplID4+IFBBR0VfU0hJRlQpOwogfQotCi1FWFBPUlRfU1lNQk9MKG10cnJfYWRkKTsKIEVYUE9SVF9TWU1CT0wobXRycl9kZWwpOwogCi0vKiBIQUNLIEFMRVJUIQorLyoKKyAqIEhBQ0sgQUxFUlQhCiAgKiBUaGVzZSBzaG91bGQgYmUgY2FsbGVkIGltcGxpY2l0bHksIGJ1dCB3ZSBjYW4ndCB5ZXQgdW50aWwgYWxsIHRoZSBpbml0Y2FsbAogICogc3R1ZmYgaXMgZG9uZS4uLgogICovCkBAIC01NzYsMjkgKzU5MywyOCBAQAogCiBzdGF0aWMgc3RydWN0IG10cnJfdmFsdWUgbXRycl92YWx1ZVtNVFJSX01BWF9WQVJfUkFOR0VTXTsKIAotc3RhdGljIGludCBtdHJyX3NhdmUoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbXRycl9zYXZlKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCW10cnJfaWYtPmdldChpLAotCQkJICAgICAmbXRycl92YWx1ZVtpXS5sYmFzZSwKLQkJCSAgICAgJm10cnJfdmFsdWVbaV0ubHNpemUsCi0JCQkgICAgICZtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKKwkJbXRycl9pZi0+Z2V0KGksICZtdHJyX3ZhbHVlW2ldLmxiYXNlLAorCQkJCSZtdHJyX3ZhbHVlW2ldLmxzaXplLAorCQkJCSZtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXRycl9yZXN0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2KQorc3RhdGljIGludCBtdHJyX3Jlc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCWlmIChtdHJyX3ZhbHVlW2ldLmxzaXplKQotCQkJc2V0X210cnIoaSwKLQkJCQkgbXRycl92YWx1ZVtpXS5sYmFzZSwKLQkJCQkgbXRycl92YWx1ZVtpXS5sc2l6ZSwKLQkJCQkgbXRycl92YWx1ZVtpXS5sdHlwZSk7CisJCWlmIChtdHJyX3ZhbHVlW2ldLmxzaXplKSB7CisJCQlzZXRfbXRycihpLCBtdHJyX3ZhbHVlW2ldLmxiYXNlLAorCQkJCSAgICBtdHJyX3ZhbHVlW2ldLmxzaXplLAorCQkJCSAgICBtdHJyX3ZhbHVlW2ldLmx0eXBlKTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYxNSwyNiArNjMxLDI5IEBACiAvKioKICAqIG10cnJfYnBfaW5pdCAtIGluaXRpYWxpemUgbXRycnMgb24gdGhlIGJvb3QgQ1BVCiAgKgotICogVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZWFybHk7IGJlZm9yZSBhbnkgb2YgdGhlIG90aGVyIENQVXMgYXJlIAorICogVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgZWFybHk7IGJlZm9yZSBhbnkgb2YgdGhlIG90aGVyIENQVXMgYXJlCiAgKiBpbml0aWFsaXplZCAoaS5lLiBiZWZvcmUgc21wX2luaXQoKSkuCi0gKiAKKyAqCiAgKi8KIHZvaWQgX19pbml0IG10cnJfYnBfaW5pdCh2b2lkKQogewogCXUzMiBwaHlzX2FkZHI7CisKIAlpbml0X2lmcygpOwogCiAJcGh5c19hZGRyID0gMzI7CiAKIAlpZiAoY3B1X2hhc19tdHJyKSB7CiAJCW10cnJfaWYgPSAmZ2VuZXJpY19tdHJyX29wczsKLQkJc2l6ZV9vcl9tYXNrID0gMHhmZjAwMDAwMDsJLyogMzYgYml0cyAqLworCQlzaXplX29yX21hc2sgPSAweGZmMDAwMDAwOwkJCS8qIDM2IGJpdHMgKi8KIAkJc2l6ZV9hbmRfbWFzayA9IDB4MDBmMDAwMDA7CiAJCXBoeXNfYWRkciA9IDM2OwogCi0JCS8qIFRoaXMgaXMgYW4gQU1EIHNwZWNpZmljIE1TUiwgYnV0IHdlIGFzc3VtZShob3BlPykgdGhhdAotCQkgICBJbnRlbCB3aWxsIGltcGxlbWVudCBpdCB0byB3aGVuIHRoZXkgZXh0ZW5kIHRoZSBhZGRyZXNzCi0JCSAgIGJ1cyBvZiB0aGUgWGVvbi4gKi8KKwkJLyoKKwkJICogVGhpcyBpcyBhbiBBTUQgc3BlY2lmaWMgTVNSLCBidXQgd2UgYXNzdW1lKGhvcGU/KSB0aGF0CisJCSAqIEludGVsIHdpbGwgaW1wbGVtZW50IGl0IHRvIHdoZW4gdGhleSBleHRlbmQgdGhlIGFkZHJlc3MKKwkJICogYnVzIG9mIHRoZSBYZW9uLgorCQkgKi8KIAkJaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA4KSB7CiAJCQlwaHlzX2FkZHIgPSBjcHVpZF9lYXgoMHg4MDAwMDAwOCkgJiAweGZmOwogCQkJLyogQ1BVSUQgd29ya2Fyb3VuZCBmb3IgSW50ZWwgMEYzMy8wRjM0IENQVSAqLwpAQCAtNjQ5LDkgKzY2OCwxMSBAQAogCQkJc2l6ZV9hbmRfbWFzayA9IH5zaXplX29yX21hc2sgJiAweGZmZmZmMDAwMDBVTEw7CiAJCX0gZWxzZSBpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQ0VOVEFVUiAmJgogCQkJICAgYm9vdF9jcHVfZGF0YS54ODYgPT0gNikgewotCQkJLyogVklBIEMqIGZhbWlseSBoYXZlIEludGVsIHN0eWxlIE1UUlJzLCBidXQKLQkJCSAgIGRvbid0IHN1cHBvcnQgUEFFICovCi0JCQlzaXplX29yX21hc2sgPSAweGZmZjAwMDAwOwkvKiAzMiBiaXRzICovCisJCQkvKgorCQkJICogVklBIEMqIGZhbWlseSBoYXZlIEludGVsIHN0eWxlIE1UUlJzLAorCQkJICogYnV0IGRvbid0IHN1cHBvcnQgUEFFCisJCQkgKi8KKwkJCXNpemVfb3JfbWFzayA9IDB4ZmZmMDAwMDA7CQkvKiAzMiBiaXRzICovCiAJCQlzaXplX2FuZF9tYXNrID0gMDsKIAkJCXBoeXNfYWRkciA9IDMyOwogCQl9CkBAIC02OTQsNyArNzE1LDYgQEAKIAkJCQljaGFuZ2VkX2J5X210cnJfY2xlYW51cCA9IDE7CiAJCQkJbXRycl9pZi0+c2V0X2FsbCgpOwogCQkJfQotCiAJCX0KIAl9CiB9CkBAIC03MDYsMTIgKzcyNiwxNyBAQAogCWlmICghbXRycl9pZiB8fCAhdXNlX2ludGVsKCkpCiAJCXJldHVybjsKIAkvKgotCSAqIElkZWFsbHkgd2Ugc2hvdWxkIGhvbGQgbXRycl9tdXRleCBoZXJlIHRvIGF2b2lkIG10cnIgZW50cmllcyBjaGFuZ2VkLAotCSAqIGJ1dCB0aGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgaW4gY3B1IGJvb3QgdGltZSwgaG9sZGluZyB0aGUgbG9jawotCSAqIGJyZWFrcyBpdC4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBpbiB0d28gY2FzZXM6IDEudmVyeSBlYXJpbHkgdGltZQotCSAqIG9mIHNvZnR3YXJlIHJlc3VtZSwgd2hlbiB0aGVyZSBhYnNvbHV0ZWx5IGlzbid0IG10cnIgZW50cnkgY2hhbmdlczsKLQkgKiAyLmNwdSBob3RhZGQgdGltZS4gV2UgbGV0IG10cnJfYWRkL2RlbF9wYWdlIGhvbGQgY3B1aG90cGx1ZyBsb2NrIHRvCi0JICogcHJldmVudCBtdHJyIGVudHJ5IGNoYW5nZXMKKwkgKiBJZGVhbGx5IHdlIHNob3VsZCBob2xkIG10cnJfbXV0ZXggaGVyZSB0byBhdm9pZCBtdHJyIGVudHJpZXMKKwkgKiBjaGFuZ2VkLCBidXQgdGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGluIGNwdSBib290IHRpbWUsCisJICogaG9sZGluZyB0aGUgbG9jayBicmVha3MgaXQuCisJICoKKwkgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGluIHR3byBjYXNlczoKKwkgKgorCSAqICAgMS4gdmVyeSBlYXJpbHkgdGltZSBvZiBzb2Z0d2FyZSByZXN1bWUsIHdoZW4gdGhlcmUgYWJzb2x1dGVseQorCSAqICAgICAgaXNuJ3QgbXRyciBlbnRyeSBjaGFuZ2VzOworCSAqCisJICogICAyLiBjcHUgaG90YWRkIHRpbWUuIFdlIGxldCBtdHJyX2FkZC9kZWxfcGFnZSBob2xkIGNwdWhvdHBsdWcKKwkgKiAgICAgIGxvY2sgdG8gcHJldmVudCBtdHJyIGVudHJ5IGNoYW5nZXMKIAkgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTczMiwxOSArNzU3LDIzIEBACiB7CiAJaWYgKCFtdHJyX2lmKQogCQlyZXR1cm4gMDsKKwogCWlmICh1c2VfaW50ZWwoKSkgewogCQlpZiAoIWNoYW5nZWRfYnlfbXRycl9jbGVhbnVwKQogCQkJbXRycl9zdGF0ZV93YXJuKCk7Ci0JfSBlbHNlIHsKLQkJLyogVGhlIENQVXMgaGF2ZW4ndCBNVFJSIGFuZCBzZWVtIHRvIG5vdCBzdXBwb3J0IFNNUC4gVGhleSBoYXZlCi0JCSAqIHNwZWNpZmljIGRyaXZlcnMsIHdlIHVzZSBhIHRyaWNreSBtZXRob2QgdG8gc3VwcG9ydAotCQkgKiBzdXNwZW5kL3Jlc3VtZSBmb3IgdGhlbS4KLQkJICogVEJEOiBpcyB0aGVyZSBhbnkgc3lzdGVtIHdpdGggc3VjaCBDUFUgd2hpY2ggc3VwcG9ydHMKLQkJICogc3VzcGVuZC9yZXN1bWU/ICBpZiBubywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZS4KLQkJICovCi0JCXN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsCi0JCQkmbXRycl9zeXNkZXZfZHJpdmVyKTsKKwkJcmV0dXJuIDA7CiAJfQorCisJLyoKKwkgKiBUaGUgQ1BVIGhhcyBubyBNVFJSIGFuZCBzZWVtcyB0byBub3Qgc3VwcG9ydCBTTVAuIFRoZXkgaGF2ZQorCSAqIHNwZWNpZmljIGRyaXZlcnMsIHdlIHVzZSBhIHRyaWNreSBtZXRob2QgdG8gc3VwcG9ydAorCSAqIHN1c3BlbmQvcmVzdW1lIGZvciB0aGVtLgorCSAqCisJICogVEJEOiBpcyB0aGVyZSBhbnkgc3lzdGVtIHdpdGggc3VjaCBDUFUgd2hpY2ggc3VwcG9ydHMKKwkgKiBzdXNwZW5kL3Jlc3VtZT8gSWYgbm8sIHdlIHNob3VsZCByZW1vdmUgdGhlIGNvZGUuCisJICovCisJc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJm10cnJfc3lzZGV2X2RyaXZlcik7CisKIAlyZXR1cm4gMDsKIH0KIHN1YnN5c19pbml0Y2FsbChtdHJyX2luaXRfZmluaWFsaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCmluZGV4IDc1MzhiNzYuLmE1MDFkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsb2NhbCBtdHJyIGRlZmluZXMuCisgKiBsb2NhbCBNVFJSIGRlZmluZXMuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xNCwxMyArMTQsMTIgQEAKIHN0cnVjdCBtdHJyX29wcyB7CiAJdTMyCXZlbmRvcjsKIAl1MzIJdXNlX2ludGVsX2lmOwotLy8Jdm9pZAkoKmluaXQpKHZvaWQpOwogCXZvaWQJKCpzZXQpKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZSwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgbXRycl90eXBlIHR5cGUpOwogCXZvaWQJKCpzZXRfYWxsKSh2b2lkKTsKIAogCXZvaWQJKCpnZXQpKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgKmJhc2UsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nICpzaXplLCBtdHJyX3R5cGUgKiB0eXBlKTsKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNpemUsIG10cnJfdHlwZSAqdHlwZSk7CiAJaW50CSgqZ2V0X2ZyZWVfcmVnaW9uKSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgICBpbnQgcmVwbGFjZV9yZWcpOwogCWludAkoKnZhbGlkYXRlX2FkZF9wYWdlKSh1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKQEAgLTM5LDExICszOCwxMSBAQAogCiAvKiBsaWJyYXJ5IGZ1bmN0aW9ucyBmb3IgcHJvY2Vzc29yLXNwZWNpZmljIHJvdXRpbmVzICovCiBzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGNyNHZhbDsKLQl1MzIgZGVmdHlwZV9sbzsKLQl1MzIgZGVmdHlwZV9oaTsKLQl1MzIgY2NyMzsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCXVuc2lnbmVkIGxvbmcJY3I0dmFsOworCXUzMgkJZGVmdHlwZV9sbzsKKwl1MzIJCWRlZnR5cGVfaGk7CisJdTMyCQljY3IzOwogfTsKIAogdm9pZCBzZXRfbXRycl9kb25lKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KTsKQEAgLTU0LDEwICs1MywxMCBAQAogCQl1MzIgYmFzZV9sbywgdTMyIGJhc2VfaGksIHUzMiBtYXNrX2xvLCB1MzIgbWFza19oaSk7CiB2b2lkIGdldF9tdHJyX3N0YXRlKHZvaWQpOwogCi1leHRlcm4gdm9pZCBzZXRfbXRycl9vcHMoc3RydWN0IG10cnJfb3BzICogb3BzKTsKK2V4dGVybiB2b2lkIHNldF9tdHJyX29wcyhzdHJ1Y3QgbXRycl9vcHMgKm9wcyk7CiAKIGV4dGVybiB1NjQgc2l6ZV9vcl9tYXNrLCBzaXplX2FuZF9tYXNrOwotZXh0ZXJuIHN0cnVjdCBtdHJyX29wcyAqIG10cnJfaWY7CitleHRlcm4gc3RydWN0IG10cnJfb3BzICptdHJyX2lmOwogCiAjZGVmaW5lIGlzX2NwdSh2bmQpCShtdHJyX2lmICYmIG10cnJfaWYtPnZlbmRvciA9PSBYODZfVkVORE9SXyMjdm5kKQogI2RlZmluZSB1c2VfaW50ZWwoKQkobXRycl9pZiAmJiBtdHJyX2lmLT51c2VfaW50ZWxfaWYgPT0gMSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9zdGF0ZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKaW5kZXggMWY1ZmIxNS4uZGZjODBiNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL3N0YXRlLmMKQEAgLTEsMjQgKzEsMjUgQEAKLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLWN5cml4Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorCiAjaW5jbHVkZSAibXRyci5oIgogCi0KLS8qICBQdXQgdGhlIHByb2Nlc3NvciBpbnRvIGEgc3RhdGUgd2hlcmUgTVRSUnMgY2FuIGJlIHNhZmVseSBzZXQgICovCisvKiBQdXQgdGhlIHByb2Nlc3NvciBpbnRvIGEgc3RhdGUgd2hlcmUgTVRSUnMgY2FuIGJlIHNhZmVseSBzZXQgKi8KIHZvaWQgc2V0X210cnJfcHJlcGFyZV9zYXZlKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KQogewogCXVuc2lnbmVkIGludCBjcjA7CiAKLQkvKiAgRGlzYWJsZSBpbnRlcnJ1cHRzIGxvY2FsbHkgICovCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGxvY2FsbHkgKi8KIAlsb2NhbF9pcnFfc2F2ZShjdHh0LT5mbGFncyk7CiAKIAlpZiAodXNlX2ludGVsKCkgfHwgaXNfY3B1KENZUklYKSkgewogCi0JCS8qICBTYXZlIHZhbHVlIG9mIENSNCBhbmQgY2xlYXIgUGFnZSBHbG9iYWwgRW5hYmxlIChiaXQgNykgICovCisJCS8qIFNhdmUgdmFsdWUgb2YgQ1I0IGFuZCBjbGVhciBQYWdlIEdsb2JhbCBFbmFibGUgKGJpdCA3KSAqLwogCQlpZiAoY3B1X2hhc19wZ2UpIHsKIAkJCWN0eHQtPmNyNHZhbCA9IHJlYWRfY3I0KCk7CiAJCQl3cml0ZV9jcjQoY3R4dC0+Y3I0dmFsICYgflg4Nl9DUjRfUEdFKTsKQEAgLTMzLDUwICszNCw2MSBAQAogCQl3cml0ZV9jcjAoY3IwKTsKIAkJd2JpbnZkKCk7CiAKLQkJaWYgKHVzZV9pbnRlbCgpKQotCQkJLyogIFNhdmUgTVRSUiBzdGF0ZSAqLworCQlpZiAodXNlX2ludGVsKCkpIHsKKwkJCS8qIFNhdmUgTVRSUiBzdGF0ZSAqLwogCQkJcmRtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvLCBjdHh0LT5kZWZ0eXBlX2hpKTsKLQkJZWxzZQotCQkJLyogQ3lyaXggQVJScyAtIGV2ZXJ5dGhpbmcgZWxzZSB3ZXJlIGV4Y2x1ZGVkIGF0IHRoZSB0b3AgKi8KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBDeXJpeCBBUlJzIC0KKwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSB3ZXJlIGV4Y2x1ZGVkIGF0IHRoZSB0b3AKKwkJCSAqLwogCQkJY3R4dC0+Y2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKKwkJfQogCX0KIH0KIAogdm9pZCBzZXRfbXRycl9jYWNoZV9kaXNhYmxlKHN0cnVjdCBzZXRfbXRycl9jb250ZXh0ICpjdHh0KQogewotCWlmICh1c2VfaW50ZWwoKSkKLQkJLyogIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAgKi8KKwlpZiAodXNlX2ludGVsKCkpIHsKKwkJLyogRGlzYWJsZSBNVFJScywgYW5kIHNldCB0aGUgZGVmYXVsdCB0eXBlIHRvIHVuY2FjaGVkICovCiAJCW10cnJfd3Jtc3IoTVNSX01UUlJkZWZUeXBlLCBjdHh0LT5kZWZ0eXBlX2xvICYgMHhmMzAwVUwsCiAJCSAgICAgIGN0eHQtPmRlZnR5cGVfaGkpOwotCWVsc2UgaWYgKGlzX2NwdShDWVJJWCkpCi0JCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wICovCi0JCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY3R4dC0+Y2NyMyAmIDB4MGYpIHwgMHgxMCk7CisJfSBlbHNlIHsKKwkJaWYgKGlzX2NwdShDWVJJWCkpIHsKKwkJCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wICovCisJCQlzZXRDeDg2KENYODZfQ0NSMywgKGN0eHQtPmNjcjMgJiAweDBmKSB8IDB4MTApOworCQl9CisJfQogfQogCi0vKiAgUmVzdG9yZSB0aGUgcHJvY2Vzc29yIGFmdGVyIGEgc2V0X210cnJfcHJlcGFyZSAgKi8KKy8qIFJlc3RvcmUgdGhlIHByb2Nlc3NvciBhZnRlciBhIHNldF9tdHJyX3ByZXBhcmUgKi8KIHZvaWQgc2V0X210cnJfZG9uZShzdHJ1Y3Qgc2V0X210cnJfY29udGV4dCAqY3R4dCkKIHsKIAlpZiAodXNlX2ludGVsKCkgfHwgaXNfY3B1KENZUklYKSkgewogCi0JCS8qICBGbHVzaCBjYWNoZXMgYW5kIFRMQnMgICovCisJCS8qIEZsdXNoIGNhY2hlcyBhbmQgVExCcyAqLwogCQl3YmludmQoKTsKIAotCQkvKiAgUmVzdG9yZSBNVFJSZGVmVHlwZSAgKi8KLQkJaWYgKHVzZV9pbnRlbCgpKQorCQkvKiBSZXN0b3JlIE1UUlJkZWZUeXBlICovCisJCWlmICh1c2VfaW50ZWwoKSkgewogCQkJLyogSW50ZWwgKFA2KSBzdGFuZGFyZCBNVFJScyAqLwotCQkJbXRycl93cm1zcihNU1JfTVRSUmRlZlR5cGUsIGN0eHQtPmRlZnR5cGVfbG8sIGN0eHQtPmRlZnR5cGVfaGkpOwotCQllbHNlCi0JCQkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdhcyBleGNsdWRlZCBhdCB0aGUgdG9wICovCisJCQltdHJyX3dybXNyKE1TUl9NVFJSZGVmVHlwZSwgY3R4dC0+ZGVmdHlwZV9sbywKKwkJCQkgICBjdHh0LT5kZWZ0eXBlX2hpKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBDeXJpeCBBUlJzIC0KKwkJCSAqIGV2ZXJ5dGhpbmcgZWxzZSB3YXMgZXhjbHVkZWQgYXQgdGhlIHRvcAorCQkJICovCiAJCQlzZXRDeDg2KENYODZfQ0NSMywgY3R4dC0+Y2NyMyk7CisJCX0KIAotCQkvKiAgRW5hYmxlIGNhY2hlcyAgKi8KKwkJLyogRW5hYmxlIGNhY2hlcyAqLwogCQl3cml0ZV9jcjAocmVhZF9jcjAoKSAmIDB4YmZmZmZmZmYpOwogCi0JCS8qICBSZXN0b3JlIHZhbHVlIG9mIENSNCAgKi8KKwkJLyogUmVzdG9yZSB2YWx1ZSBvZiBDUjQgKi8KIAkJaWYgKGNwdV9oYXNfcGdlKQogCQkJd3JpdGVfY3I0KGN0eHQtPmNyNHZhbCk7CiAJfQotCS8qICBSZS1lbmFibGUgaW50ZXJydXB0cyBsb2NhbGx5IChpZiBlbmFibGVkIHByZXZpb3VzbHkpICAqLworCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzIGxvY2FsbHkgKGlmIGVuYWJsZWQgcHJldmlvdXNseSkgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShjdHh0LT5mbGFncyk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZmN0ci13YXRjaGRvZy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKaW5kZXggZTYwZWQ3NC4uMzkyYmVhNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMKQEAgLTY4LDE2ICs2OCwxNiBAQAogCS8qIHJldHVybnMgdGhlIGJpdCBvZmZzZXQgb2YgdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgcmVnaXN0ZXIgKi8KIAlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvcikgewogCWNhc2UgWDg2X1ZFTkRPUl9BTUQ6Ci0JCXJldHVybiAobXNyIC0gTVNSX0s3X1BFUkZDVFIwKTsKKwkJcmV0dXJuIG1zciAtIE1TUl9LN19QRVJGQ1RSMDsKIAljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CiAJCWlmIChjcHVfaGFzKCZib290X2NwdV9kYXRhLCBYODZfRkVBVFVSRV9BUkNIX1BFUkZNT04pKQotCQkJcmV0dXJuIChtc3IgLSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwKTsKKwkJCXJldHVybiBtc3IgLSBNU1JfQVJDSF9QRVJGTU9OX1BFUkZDVFIwOwogCiAJCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODYpIHsKIAkJY2FzZSA2OgotCQkJcmV0dXJuIChtc3IgLSBNU1JfUDZfUEVSRkNUUjApOworCQkJcmV0dXJuIG1zciAtIE1TUl9QNl9QRVJGQ1RSMDsKIAkJY2FzZSAxNToKLQkJCXJldHVybiAobXNyIC0gTVNSX1A0X0JQVV9QRVJGQ1RSMCk7CisJCQlyZXR1cm4gbXNyIC0gTVNSX1A0X0JQVV9QRVJGQ1RSMDsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTkyLDE2ICs5MiwxNiBAQAogCS8qIHJldHVybnMgdGhlIGJpdCBvZmZzZXQgb2YgdGhlIGV2ZW50IHNlbGVjdGlvbiByZWdpc3RlciAqLwogCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CiAJY2FzZSBYODZfVkVORE9SX0FNRDoKLQkJcmV0dXJuIChtc3IgLSBNU1JfSzdfRVZOVFNFTDApOworCQlyZXR1cm4gbXNyIC0gTVNSX0s3X0VWTlRTRUwwOwogCWNhc2UgWDg2X1ZFTkRPUl9JTlRFTDoKIAkJaWYgKGNwdV9oYXMoJmJvb3RfY3B1X2RhdGEsIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTikpCi0JCQlyZXR1cm4gKG1zciAtIE1TUl9BUkNIX1BFUkZNT05fRVZFTlRTRUwwKTsKKwkJCXJldHVybiBtc3IgLSBNU1JfQVJDSF9QRVJGTU9OX0VWRU5UU0VMMDsKIAogCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2KSB7CiAJCWNhc2UgNjoKLQkJCXJldHVybiAobXNyIC0gTVNSX1A2X0VWTlRTRUwwKTsKKwkJCXJldHVybiBtc3IgLSBNU1JfUDZfRVZOVFNFTDA7CiAJCWNhc2UgMTU6Ci0JCQlyZXR1cm4gKG1zciAtIE1TUl9QNF9CU1VfRVNDUjApOworCQkJcmV0dXJuIG1zciAtIE1TUl9QNF9CU1VfRVNDUjA7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0xMTMsNyArMTEzLDcgQEAKIHsKIAlCVUdfT04oY291bnRlciA+IE5NSV9NQVhfQ09VTlRFUl9CSVRTKTsKIAotCXJldHVybiAoIXRlc3RfYml0KGNvdW50ZXIsIHBlcmZjdHJfbm1pX293bmVyKSk7CisJcmV0dXJuICF0ZXN0X2JpdChjb3VudGVyLCBwZXJmY3RyX25taV9vd25lcik7CiB9CiAKIC8qIGNoZWNrcyB0aGUgYW4gbXNyIGZvciBhdmFpbGFiaWxpdHkgKi8KQEAgLTEyNCw3ICsxMjQsNyBAQAogCWNvdW50ZXIgPSBubWlfcGVyZmN0cl9tc3JfdG9fYml0KG1zcik7CiAJQlVHX09OKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUyk7CiAKLQlyZXR1cm4gKCF0ZXN0X2JpdChjb3VudGVyLCBwZXJmY3RyX25taV9vd25lcikpOworCXJldHVybiAhdGVzdF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpOwogfQogRVhQT1JUX1NZTUJPTChhdmFpbF90b19yZXNydl9wZXJmY3RyX25taV9iaXQpOwogCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkgKi8KIAljb3VudGVyX3ZhbCA9ICh1NjQpY3B1X2toeiAqIDEwMDA7CiAJZG9fZGl2KGNvdW50ZXJfdmFsLCByZXR2YWwpOwotIAlpZiAoY291bnRlcl92YWwgPiAweDdmZmZmZmZmVUxMKSB7CisJaWYgKGNvdW50ZXJfdmFsID4gMHg3ZmZmZmZmZlVMTCkgewogCQl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOwogCQlkb19kaXYoY291bnQsIDB4N2ZmZmZmZmZVTCk7CiAJCXJldHZhbCA9IGNvdW50ICsgMTsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCXU2NCBjb3VudCA9ICh1NjQpY3B1X2toeiAqIDEwMDA7CiAKIAlkb19kaXYoY291bnQsIG5taV9oeik7Ci0JaWYoZGVzY3IpCisJaWYgKGRlc2NyKQogCQlwcl9kZWJ1Zygic2V0dGluZyAlcyB0byAtMHglMDhMeFxuIiwgZGVzY3IsIGNvdW50KTsKIAl3cm1zcmwocGVyZmN0cl9tc3IsIDAgLSBjb3VudCk7CiB9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAl1NjQgY291bnQgPSAodTY0KWNwdV9raHogKiAxMDAwOwogCiAJZG9fZGl2KGNvdW50LCBubWlfaHopOwotCWlmKGRlc2NyKQorCWlmIChkZXNjcikKIAkJcHJfZGVidWcoInNldHRpbmcgJXMgdG8gLTB4JTA4THhcbiIsIGRlc2NyLCBjb3VudCk7CiAJd3Jtc3IocGVyZmN0cl9tc3IsICh1MzIpKC1jb3VudCksIDApOwogfQpAQCAtMjk2LDcgKzI5Niw3IEBACiAKIAkvKiBzZXR1cCB0aGUgdGltZXIgKi8KIAl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7Ci0Jd3JpdGVfd2F0Y2hkb2dfY291bnRlcihwZXJmY3RyX21zciwgIks3X1BFUkZDVFIwIixubWlfaHopOworCXdyaXRlX3dhdGNoZG9nX2NvdW50ZXIocGVyZmN0cl9tc3IsICJLN19QRVJGQ1RSMCIsIG5taV9oeik7CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3ZCBzdHJ1Y3QgYmVmb3JlIGVuYWJsaW5nICovCiAJd2QtPnBlcmZjdHJfbXNyID0gcGVyZmN0cl9tc3I7CkBAIC0zODcsNyArMzg3LDcgQEAKIAkvKiBzZXR1cCB0aGUgdGltZXIgKi8KIAl3cm1zcihldm50c2VsX21zciwgZXZudHNlbCwgMCk7CiAJbm1pX2h6ID0gYWRqdXN0X2Zvcl8zMmJpdF9jdHIobm1pX2h6KTsKLQl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIocGVyZmN0cl9tc3IsICJQNl9QRVJGQ1RSMCIsbm1pX2h6KTsKKwl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIocGVyZmN0cl9tc3IsICJQNl9QRVJGQ1RSMCIsIG5taV9oeik7CiAKIAkvKiBpbml0aWFsaXplIHRoZSB3ZCBzdHJ1Y3QgYmVmb3JlIGVuYWJsaW5nICovCiAJd2QtPnBlcmZjdHJfbXNyID0gcGVyZmN0cl9tc3I7CkBAIC00MTUsNyArNDE1LDcgQEAKIAlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKIAogCS8qIFA2L0FSQ0hfUEVSRk1PTiBoYXMgMzIgYml0IGNvdW50ZXIgd3JpdGUgKi8KLQl3cml0ZV93YXRjaGRvZ19jb3VudGVyMzIod2QtPnBlcmZjdHJfbXNyLCBOVUxMLG5taV9oeik7CisJd3JpdGVfd2F0Y2hkb2dfY291bnRlcjMyKHdkLT5wZXJmY3RyX21zciwgTlVMTCwgbm1pX2h6KTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB3ZF9vcHMgcDZfd2Rfb3BzID0gewpAQCAtNDkwLDkgKzQ5MCw5IEBACiAJaWYgKHNtcF9udW1fc2libGluZ3MgPT0gMikgewogCQl1bnNpZ25lZCBpbnQgZWJ4LCBhcGljaWQ7CiAKLSAgICAgICAgCWVieCA9IGNwdWlkX2VieCgxKTsKLQkgICAgICAgIGFwaWNpZCA9IChlYnggPj4gMjQpICYgMHhmZjsKLSAgICAgICAgCWh0X251bSA9IGFwaWNpZCAmIDE7CisJCWVieCA9IGNwdWlkX2VieCgxKTsKKwkJYXBpY2lkID0gKGVieCA+PiAyNCkgJiAweGZmOworCQlodF9udW0gPSBhcGljaWQgJiAxOwogCX0gZWxzZQogI2VuZGlmCiAJCWh0X251bSA9IDA7CkBAIC01NDQsNyArNTQ0LDcgQEAKIAl9CiAKIAlldm50c2VsID0gUDRfRVNDUl9FVkVOVF9TRUxFQ1QoMHgzRikKLQkgCXwgUDRfRVNDUl9PUworCQl8IFA0X0VTQ1JfT1MKIAkJfCBQNF9FU0NSX1VTUjsKIAogCWNjY3JfdmFsIHw9IFA0X0NDQ1JfVEhSRVNIT0xEKDE1KQpAQCAtNjEyLDcgKzYxMiw3IEBACiB7CiAJdW5zaWduZWQgZHVtbXk7CiAJLyoKLSAJICogUDQgcXVpcmtzOgorCSAqIFA0IHF1aXJrczoKIAkgKiAtIEFuIG92ZXJmbG93biBwZXJmY3RyIHdpbGwgYXNzZXJ0IGl0cyBpbnRlcnJ1cHQKIAkgKiAgIHVudGlsIHRoZSBPVkYgZmxhZyBpbiBpdHMgQ0NDUiBpcyBjbGVhcmVkLgogCSAqIC0gTFZUUEMgaXMgbWFza2VkIG9uIGludGVycnVwdCBhbmQgbXVzdCBiZQpAQCAtNjYyLDcgKzY2Miw4IEBACiAJICogTk9URTogQ29ycmVzcG9uZGluZyBiaXQgPSAwIGluIGVieCBpbmRpY2F0ZXMgZXZlbnQgcHJlc2VudC4KIAkgKi8KIAljcHVpZCgxMCwgJihlYXguZnVsbCksICZlYngsICZ1bnVzZWQsICZ1bnVzZWQpOwotCWlmICgoZWF4LnNwbGl0Lm1hc2tfbGVuZ3RoIDwgKEFSQ0hfUEVSRk1PTl9VTkhBTFRFRF9DT1JFX0NZQ0xFU19JTkRFWCsxKSkgfHwKKwlpZiAoKGVheC5zcGxpdC5tYXNrX2xlbmd0aCA8CisJCQkoQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX0lOREVYKzEpKSB8fAogCSAgICAoZWJ4ICYgQVJDSF9QRVJGTU9OX1VOSEFMVEVEX0NPUkVfQ1lDTEVTX1BSRVNFTlQpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwppbmRleCBkNWUzMDM5Li42MmFjOGNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Byb2MuYwpAQCAtMTE2LDExICsxMTYsOSBAQAogCQlzZXFfcHJpbnRmKG0sICJUTEIgc2l6ZVx0OiAlZCA0SyBwYWdlc1xuIiwgYy0+eDg2X3RsYnNpemUpOwogI2VuZGlmCiAJc2VxX3ByaW50ZihtLCAiY2xmbHVzaCBzaXplXHQ6ICV1XG4iLCBjLT54ODZfY2xmbHVzaF9zaXplKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0CiAJc2VxX3ByaW50ZihtLCAiY2FjaGVfYWxpZ25tZW50XHQ6ICVkXG4iLCBjLT54ODZfY2FjaGVfYWxpZ25tZW50KTsKIAlzZXFfcHJpbnRmKG0sICJhZGRyZXNzIHNpemVzXHQ6ICV1IGJpdHMgcGh5c2ljYWwsICV1IGJpdHMgdmlydHVhbFxuIiwKIAkJICAgYy0+eDg2X3BoeXNfYml0cywgYy0+eDg2X3ZpcnRfYml0cyk7Ci0jZW5kaWYKIAogCXNlcV9wcmludGYobSwgInBvd2VyIG1hbmFnZW1lbnQ6Iik7CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKQEAgLTEyOCw3ICsxMjYsNyBAQAogCQkJaWYgKGkgPCBBUlJBWV9TSVpFKHg4Nl9wb3dlcl9mbGFncykgJiYKIAkJCSAgICB4ODZfcG93ZXJfZmxhZ3NbaV0pCiAJCQkJc2VxX3ByaW50ZihtLCAiJXMlcyIsCi0JCQkJCSAgIHg4Nl9wb3dlcl9mbGFnc1tpXVswXT8iICI6IiIsCisJCQkJCSAgIHg4Nl9wb3dlcl9mbGFnc1tpXVswXSA/ICIgIiA6ICIiLAogCQkJCQkgICB4ODZfcG93ZXJfZmxhZ3NbaV0pOwogCQkJZWxzZQogCQkJCXNlcV9wcmludGYobSwgIiBbJWRdIiwgaSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS92bXdhcmUuYwppbmRleCAyODRjMzk5Li5iYzI0ZjUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Ztd2FyZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdm13YXJlLmMKQEAgLTQ5LDE3ICs0OSwxNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX3Ztd2FyZV9nZXRfdHNjX2toeih2b2lkKQogewotICAgICAgICB1aW50NjRfdCB0c2NfaHo7Ci0gICAgICAgIHVpbnQzMl90IGVheCwgZWJ4LCBlY3gsIGVkeDsKKwl1aW50NjRfdCB0c2NfaHo7CisJdWludDMyX3QgZWF4LCBlYngsIGVjeCwgZWR4OwogCi0gICAgICAgIFZNV0FSRV9QT1JUKEdFVEhaLCBlYXgsIGVieCwgZWN4LCBlZHgpOworCVZNV0FSRV9QT1JUKEdFVEhaLCBlYXgsIGVieCwgZWN4LCBlZHgpOwogCi0gICAgICAgIGlmIChlYnggPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRzY19oeiA9IGVheCB8ICgoKHVpbnQ2NF90KWVieCkgPDwgMzIpOwotICAgICAgICBkb19kaXYodHNjX2h6LCAxMDAwKTsKLSAgICAgICAgQlVHX09OKHRzY19oeiA+PiAzMik7Ci0gICAgICAgIHJldHVybiB0c2NfaHo7CisJaWYgKGVieCA9PSBVSU5UX01BWCkKKwkJcmV0dXJuIDA7CisJdHNjX2h6ID0gZWF4IHwgKCgodWludDY0X3QpZWJ4KSA8PCAzMik7CisJZG9fZGl2KHRzY19oeiwgMTAwMCk7CisJQlVHX09OKHRzY19oeiA+PiAzMik7CisJcmV0dXJuIHRzY19oejsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kb3VibGVmYXVsdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2RvdWJsZWZhdWx0XzMyLmMKaW5kZXggYjRmMTRjNi4uMzcyNTBmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2RvdWJsZWZhdWx0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2RvdWJsZWZhdWx0XzMyLmMKQEAgLTI3LDkgKzI3LDcgQEAKIAogCWlmIChwdHJfb2soZ2R0KSkgewogCQlnZHQgKz0gR0RUX0VOVFJZX1RTUyA8PCAzOwotCQl0c3MgPSAqKHUxNiAqKShnZHQrMik7Ci0JCXRzcyArPSAqKHU4ICopKGdkdCs0KSA8PCAxNjsKLQkJdHNzICs9ICoodTggKikoZ2R0KzcpIDw8IDI0OworCQl0c3MgPSBnZXRfZGVzY19iYXNlKChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilnZHQpOwogCQlwcmludGsoS0VSTl9FTUVSRyAiZG91YmxlIGZhdWx0LCB0c3MgYXQgJTA4bHhcbiIsIHRzcyk7CiAKIAkJaWYgKHB0cl9vayh0c3MpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHMuYyBiL2FyY2gveDg2L2tlcm5lbC9kcy5jCmluZGV4IDQ4YmZlMTMuLmVmNDJhMDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kcy5jCkBAIC01MDksMTUgKzUwOSwxNSBAQAogCWJ0c19lc2NhcGUJCT0gKCh1bnNpZ25lZCBsb25nKS0xICYgfmJ0c19xdWFsX21hc2spCiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnRzX2dldChjb25zdCBjaGFyICpiYXNlLCBlbnVtIGJ0c19maWVsZCBmaWVsZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBidHNfZ2V0KGNvbnN0IGNoYXIgKmJhc2UsIHVuc2lnbmVkIGxvbmcgZmllbGQpCiB7CiAJYmFzZSArPSAoZHNfY2ZnLnNpemVvZl9wdHJfZmllbGQgKiBmaWVsZCk7CiAJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKWJhc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBidHNfc2V0KGNoYXIgKmJhc2UsIGVudW0gYnRzX2ZpZWxkIGZpZWxkLCB1bnNpZ25lZCBsb25nIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBidHNfc2V0KGNoYXIgKmJhc2UsIHVuc2lnbmVkIGxvbmcgZmllbGQsIHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWJhc2UgKz0gKGRzX2NmZy5zaXplb2ZfcHRyX2ZpZWxkICogZmllbGQpOzsKKwliYXNlICs9IChkc19jZmcuc2l6ZW9mX3B0cl9maWVsZCAqIGZpZWxkKTsKIAkoKih1bnNpZ25lZCBsb25nICopYmFzZSkgPSB2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCBjODQwNTcxOC4uMmQ4YTM3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwppbmRleCA1Y2I1NzI1Li4xNDcwMDVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogewogCWludCB4ID0gZTgyMHgtPm5yX21hcDsKIAotCWlmICh4ID09IEFSUkFZX1NJWkUoZTgyMHgtPm1hcCkpIHsKKwlpZiAoeCA+PSBBUlJBWV9TSVpFKGU4MjB4LT5tYXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiT29vcHMhIFRvbyBtYW55IGVudHJpZXMgaW4gdGhlIG1lbW9yeSBtYXAhXG4iKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGNjODI3YWMuLjdmZmVjNmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtNDM5LDcgKzQzOSw2IEBACiAJam5lIDFmCiAJbW92bCAkcGVyX2NwdV9fZ2R0X3BhZ2UsJWVheAogCW1vdmwgJHBlcl9jcHVfX3N0YWNrX2NhbmFyeSwlZWN4Ci0Jc3VibCAkMjAsICVlY3gKIAltb3Z3ICVjeCwgOCAqIEdEVF9FTlRSWV9TVEFDS19DQU5BUlkgKyAyKCVlYXgpCiAJc2hybCAkMTYsICVlY3gKIAltb3ZiICVjbCwgOCAqIEdEVF9FTlRSWV9TVEFDS19DQU5BUlkgKyA0KCVlYXgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKaW5kZXggM2IwOTYzNC4uN2QzNWQwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwpAQCAtMjE4LDcgKzIxOCw2IEBACiB2b2lkIGZpeHVwX2lycXModm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaXJxOwotCXN0YXRpYyBpbnQgd2FybmVkOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAogCWZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykgewpAQCAtMjM2LDggKzIzNSw4IEBACiAJCX0KIAkJaWYgKGRlc2MtPmNoaXAtPnNldF9hZmZpbml0eSkKIAkJCWRlc2MtPmNoaXAtPnNldF9hZmZpbml0eShpcnEsIGFmZmluaXR5KTsKLQkJZWxzZSBpZiAoZGVzYy0+YWN0aW9uICYmICEod2FybmVkKyspKQotCQkJcHJpbnRrKCJDYW5ub3Qgc2V0IGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CisJCWVsc2UgaWYgKGRlc2MtPmFjdGlvbikKKwkJCXByaW50a19vbmNlKCJDYW5ub3Qgc2V0IGFmZmluaXR5IGZvciBpcnEgJWlcbiIsIGlycSk7CiAJfQogCiAjaWYgMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2t2bS5jIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCmluZGV4IGM2NjRkNTEuLjYzYjBlYzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKQEAgLTM0LDcgKzM0LDYgQEAKIHN0cnVjdCBrdm1fcGFyYV9zdGF0ZSB7CiAJdTggbW11X3F1ZXVlW01NVV9RVUVVRV9TSVpFXTsKIAlpbnQgbW11X3F1ZXVlX2xlbjsKLQllbnVtIHBhcmF2aXJ0X2xhenlfbW9kZSBtb2RlOwogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrdm1fcGFyYV9zdGF0ZSwgcGFyYV9zdGF0ZSk7CkBAIC03Nyw3ICs3Niw3IEBACiB7CiAJc3RydWN0IGt2bV9wYXJhX3N0YXRlICpzdGF0ZSA9IGt2bV9wYXJhX3N0YXRlKCk7CiAKLQlpZiAoc3RhdGUtPm1vZGUgIT0gUEFSQVZJUlRfTEFaWV9NTVUpIHsKKwlpZiAocGFyYXZpcnRfZ2V0X2xhenlfbW9kZSgpICE9IFBBUkFWSVJUX0xBWllfTU1VKSB7CiAJCWt2bV9tbXVfb3AoYnVmZmVyLCBsZW4pOwogCQlyZXR1cm47CiAJfQpAQCAtMTg1LDEwICsxODQsNyBAQAogCiBzdGF0aWMgdm9pZCBrdm1fZW50ZXJfbGF6eV9tbXUodm9pZCkKIHsKLQlzdHJ1Y3Qga3ZtX3BhcmFfc3RhdGUgKnN0YXRlID0ga3ZtX3BhcmFfc3RhdGUoKTsKLQogCXBhcmF2aXJ0X2VudGVyX2xhenlfbW11KCk7Ci0Jc3RhdGUtPm1vZGUgPSBwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9sZWF2ZV9sYXp5X21tdSh2b2lkKQpAQCAtMTk3LDcgKzE5Myw2IEBACiAKIAltbXVfcXVldWVfZmx1c2goc3RhdGUpOwogCXBhcmF2aXJ0X2xlYXZlX2xhenlfbW11KCk7Ci0Jc3RhdGUtPm1vZGUgPSBwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwYXJhdmlydF9vcHNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKaW5kZXggMjIzYWY0My4uZTVlZmNkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKQEAgLTUwLDggKzUwLDggQEAKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAJaW50IGxvdywgaGlnaDsKIAotCWxvdyA9IChpbnQpX19wYSgmd2FsbF9jbG9jayk7Ci0JaGlnaCA9ICgodTY0KV9fcGEoJndhbGxfY2xvY2spID4+IDMyKTsKKwlsb3cgPSAoaW50KV9fcGFfc3ltYm9sKCZ3YWxsX2Nsb2NrKTsKKwloaWdoID0gKCh1NjQpX19wYV9zeW1ib2woJndhbGxfY2xvY2spID4+IDMyKTsKIAluYXRpdmVfd3JpdGVfbXNyKE1TUl9LVk1fV0FMTF9DTE9DSywgbG93LCBoaWdoKTsKIAogCXZjcHVfdGltZSA9ICZnZXRfY3B1X3Zhcihodl9jbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwppbmRleCA2NTFjOTNiLi5mY2Q1MTNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKQEAgLTQ4MiwxMSArNDgyLDExIEBACiAJCU1QX2J1c19pbmZvKCZidXMpOwogCX0KIAotCWlvYXBpYy50eXBlID0gTVBfSU9BUElDOwotCWlvYXBpYy5hcGljaWQgPSAyOwotCWlvYXBpYy5hcGljdmVyID0gbXBjX2RlZmF1bHRfdHlwZSA+IDQgPyAweDEwIDogMHgwMTsKLQlpb2FwaWMuZmxhZ3MgPSBNUENfQVBJQ19VU0FCTEU7Ci0JaW9hcGljLmFwaWNhZGRyID0gMHhGRUMwMDAwMDsKKwlpb2FwaWMudHlwZQk9IE1QX0lPQVBJQzsKKwlpb2FwaWMuYXBpY2lkCT0gMjsKKwlpb2FwaWMuYXBpY3Zlcgk9IG1wY19kZWZhdWx0X3R5cGUgPiA0ID8gMHgxMCA6IDB4MDE7CisJaW9hcGljLmZsYWdzCT0gTVBDX0FQSUNfVVNBQkxFOworCWlvYXBpYy5hcGljYWRkcgk9IElPX0FQSUNfREVGQVVMVF9QSFlTX0JBU0U7CiAJTVBfaW9hcGljX2luZm8oJmlvYXBpYyk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21zci5jIGIvYXJjaC94ODYva2VybmVsL21zci5jCmluZGV4IDk4ZmQ2Y2QuLjdkZDk1MDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKQEAgLTEsNiArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCiAgKgogICogICBDb3B5cmlnaHQgMjAwMC0yMDA4IEguIFBldGVyIEFudmluIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICogICBDb3B5cmlnaHQgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbjsgYXV0aG9yOiBILiBQZXRlciBBbnZpbgogICoKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTgwLDExICs4MSw4IEBACiAKIAlmb3IgKDsgY291bnQ7IGNvdW50IC09IDgpIHsKIAkJZXJyID0gcmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCByZWcsICZkYXRhWzBdLCAmZGF0YVsxXSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlmIChlcnIgPT0gLUVGQVVMVCkgLyogRml4IGlkaW90aWMgZXJyb3IgY29kZSAqLwotCQkJCWVyciA9IC1FSU87CisJCWlmIChlcnIpCiAJCQlicmVhazsKLQkJfQogCQlpZiAoY29weV90b191c2VyKHRtcCwgJmRhdGEsIDgpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJYnJlYWs7CkBAIC0xMTUsMTEgKzExMyw4IEBACiAJCQlicmVhazsKIAkJfQogCQllcnIgPSB3cm1zcl9zYWZlX29uX2NwdShjcHUsIHJlZywgZGF0YVswXSwgZGF0YVsxXSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlmIChlcnIgPT0gLUVGQVVMVCkgLyogRml4IGlkaW90aWMgZXJyb3IgY29kZSAqLwotCQkJCWVyciA9IC1FSU87CisJCWlmIChlcnIpCiAJCQlicmVhazsKLQkJfQogCQl0bXAgKz0gMjsKIAkJYnl0ZXMgKz0gODsKIAl9CkBAIC0xMjcsNiArMTIyLDU0IEBACiAJcmV0dXJuIGJ5dGVzID8gYnl0ZXMgOiBlcnI7CiB9CiAKK3N0YXRpYyBsb25nIG1zcl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGlvYywgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdTMyIF9fdXNlciAqdXJlZ3MgPSAodTMyIF9fdXNlciAqKWFyZzsKKwl1MzIgcmVnc1s4XTsKKwlpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCWludCBlcnI7CisKKwlzd2l0Y2ggKGlvYykgeworCWNhc2UgWDg2X0lPQ19SRE1TUl9SRUdTOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkgeworCQkJZXJyID0gLUVCQURGOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZWdzLCB1cmVncywgc2l6ZW9mIHJlZ3MpKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJZXJyID0gcmRtc3Jfc2FmZV9yZWdzX29uX2NwdShjcHUsIHJlZ3MpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCWlmIChjb3B5X3RvX3VzZXIodXJlZ3MsICZyZWdzLCBzaXplb2YgcmVncykpCisJCQllcnIgPSAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgWDg2X0lPQ19XUk1TUl9SRUdTOgorCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpIHsKKwkJCWVyciA9IC1FQkFERjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVncywgdXJlZ3MsIHNpemVvZiByZWdzKSkgeworCQkJZXJyID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCWVyciA9IHdybXNyX3NhZmVfcmVnc19vbl9jcHUoY3B1LCByZWdzKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQlpZiAoY29weV90b191c2VyKHVyZWdzLCAmcmVncywgc2l6ZW9mIHJlZ3MpKQorCQkJZXJyID0gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PVFRZOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IG1zcl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CkBAIC0xNTcsNiArMjAwLDggQEAKIAkucmVhZCA9IG1zcl9yZWFkLAogCS53cml0ZSA9IG1zcl93cml0ZSwKIAkub3BlbiA9IG1zcl9vcGVuLAorCS51bmxvY2tlZF9pb2N0bCA9IG1zcl9pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gbXNyX2lvY3RsLAogfTsKIAogc3RhdGljIGludCBfX2NwdWluaXQgbXNyX2RldmljZV9jcmVhdGUoaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggNzBlYzliOS4uZjViMGI0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMKQEAgLTM2Miw4ICszNjIsOSBAQAogI2VuZGlmCiAJLndiaW52ZCA9IG5hdGl2ZV93YmludmQsCiAJLnJlYWRfbXNyID0gbmF0aXZlX3JlYWRfbXNyX3NhZmUsCi0JLnJlYWRfbXNyX2FtZCA9IG5hdGl2ZV9yZWFkX21zcl9hbWRfc2FmZSwKKwkucmRtc3JfcmVncyA9IG5hdGl2ZV9yZG1zcl9zYWZlX3JlZ3MsCiAJLndyaXRlX21zciA9IG5hdGl2ZV93cml0ZV9tc3Jfc2FmZSwKKwkud3Jtc3JfcmVncyA9IG5hdGl2ZV93cm1zcl9zYWZlX3JlZ3MsCiAJLnJlYWRfdHNjID0gbmF0aXZlX3JlYWRfdHNjLAogCS5yZWFkX3BtYyA9IG5hdGl2ZV9yZWFkX3BtYywKIAkucmVhZF90c2NwID0gbmF0aXZlX3JlYWRfdHNjcCwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IDU5ZjQ1MjQuLjRjZjc5NTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYwpAQCAtNjEsOSArNjEsNiBAQAogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKSBfX2FzbV9fKCJyZXRfZnJvbV9mb3JrIik7CiAKLURFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjdXJyZW50X3Rhc2spID0gJmluaXRfdGFzazsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjdXJyZW50X3Rhc2spOwotCiAvKgogICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuCiAgKi8KQEAgLTM1MCwxNCArMzQ3LDIxIEBACiAJCQkJICpuZXh0ID0gJm5leHRfcC0+dGhyZWFkOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRzc19zdHJ1Y3QgKnRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOworCWJvb2wgcHJlbG9hZF9mcHU7CiAKIAkvKiBuZXZlciBwdXQgYSBwcmludGsgaW4gX19zd2l0Y2hfdG8uLi4gcHJpbnRrKCkgY2FsbHMgd2FrZV91cCooKSBpbmRpcmVjdGx5ICovCiAKKwkvKgorCSAqIElmIHRoZSB0YXNrIGhhcyB1c2VkIGZwdSB0aGUgbGFzdCA1IHRpbWVzbGljZXMsIGp1c3QgZG8gYSBmdWxsCisJICogcmVzdG9yZSBvZiB0aGUgbWF0aCBzdGF0ZSBpbW1lZGlhdGVseSB0byBhdm9pZCB0aGUgdHJhcDsgdGhlCisJICogY2hhbmNlcyBvZiBuZWVkaW5nIEZQVSBzb29uIGFyZSBvYnZpb3VzbHkgaGlnaCBub3cKKwkgKi8KKwlwcmVsb2FkX2ZwdSA9IHRza191c2VkX21hdGgobmV4dF9wKSAmJiBuZXh0X3AtPmZwdV9jb3VudGVyID4gNTsKKwogCV9fdW5sYXp5X2ZwdShwcmV2X3ApOwogCi0KIAkvKiB3ZSdyZSBnb2luZyB0byB1c2UgdGhpcyBzb29uLCBhZnRlciBhIGZldyBleHBlbnNpdmUgdGhpbmdzICovCi0JaWYgKG5leHRfcC0+ZnB1X2NvdW50ZXIgPiA1KQorCWlmIChwcmVsb2FkX2ZwdSkKIAkJcHJlZmV0Y2gobmV4dC0+eHN0YXRlKTsKIAogCS8qCkBAIC0zOTgsNiArNDAyLDExIEBACiAJCSAgICAgdGFza190aHJlYWRfaW5mbyhuZXh0X3ApLT5mbGFncyAmIF9USUZfV09SS19DVFhTV19ORVhUKSkKIAkJX19zd2l0Y2hfdG9feHRyYShwcmV2X3AsIG5leHRfcCwgdHNzKTsKIAorCS8qIElmIHdlJ3JlIGdvaW5nIHRvIHByZWxvYWQgdGhlIGZwdSBjb250ZXh0LCBtYWtlIHN1cmUgY2x0cworCSAgIGlzIHJ1biB3aGlsZSB3ZSdyZSBiYXRjaGluZyB0aGUgY3B1IHN0YXRlIHVwZGF0ZXMuICovCisJaWYgKHByZWxvYWRfZnB1KQorCQljbHRzKCk7CisKIAkvKgogCSAqIExlYXZlIGxhenkgbW9kZSwgZmx1c2hpbmcgYW55IGh5cGVyY2FsbHMgbWFkZSBoZXJlLgogCSAqIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSByZXN0b3JpbmcgVExTIHNlZ21lbnRzIHNvCkBAIC00MDcsMTUgKzQxNiw4IEBACiAJICovCiAJYXJjaF9lbmRfY29udGV4dF9zd2l0Y2gobmV4dF9wKTsKIAotCS8qIElmIHRoZSB0YXNrIGhhcyB1c2VkIGZwdSB0aGUgbGFzdCA1IHRpbWVzbGljZXMsIGp1c3QgZG8gYSBmdWxsCi0JICogcmVzdG9yZSBvZiB0aGUgbWF0aCBzdGF0ZSBpbW1lZGlhdGVseSB0byBhdm9pZCB0aGUgdHJhcDsgdGhlCi0JICogY2hhbmNlcyBvZiBuZWVkaW5nIEZQVSBzb29uIGFyZSBvYnZpb3VzbHkgaGlnaCBub3cKLQkgKgotCSAqIHRza191c2VkX21hdGgoKSBjaGVja3MgcHJldmVudCBjYWxsaW5nIG1hdGhfc3RhdGVfcmVzdG9yZSgpLAotCSAqIHdoaWNoIGNhbiBzbGVlcCBpbiB0aGUgY2FzZSBvZiAhdHNrX3VzZWRfbWF0aCgpCi0JICovCi0JaWYgKHRza191c2VkX21hdGgobmV4dF9wKSAmJiBuZXh0X3AtPmZwdV9jb3VudGVyID4gNSkKLQkJbWF0aF9zdGF0ZV9yZXN0b3JlKCk7CisJaWYgKHByZWxvYWRfZnB1KQorCQlfX21hdGhfc3RhdGVfcmVzdG9yZSgpOwogCiAJLyoKIAkgKiBSZXN0b3JlICVncyBpZiBuZWVkZWQgKHdoaWNoIGlzIGNvbW1vbikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGViZWZiNTQuLmFkNTM1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtNTUsOSArNTUsNiBAQAogCiBhc21saW5rYWdlIGV4dGVybiB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKLURFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjdXJyZW50X3Rhc2spID0gJmluaXRfdGFzazsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChjdXJyZW50X3Rhc2spOwotCiBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBvbGRfcnNwKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBjaGFyLCBpc19pZGxlKTsKIApAQCAtMzg2LDkgKzM4MywxNyBAQAogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRzc19zdHJ1Y3QgKnRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOwogCXVuc2lnbmVkIGZzaW5kZXgsIGdzaW5kZXg7CisJYm9vbCBwcmVsb2FkX2ZwdTsKKworCS8qCisJICogSWYgdGhlIHRhc2sgaGFzIHVzZWQgZnB1IHRoZSBsYXN0IDUgdGltZXNsaWNlcywganVzdCBkbyBhIGZ1bGwKKwkgKiByZXN0b3JlIG9mIHRoZSBtYXRoIHN0YXRlIGltbWVkaWF0ZWx5IHRvIGF2b2lkIHRoZSB0cmFwOyB0aGUKKwkgKiBjaGFuY2VzIG9mIG5lZWRpbmcgRlBVIHNvb24gYXJlIG9idmlvdXNseSBoaWdoIG5vdworCSAqLworCXByZWxvYWRfZnB1ID0gdHNrX3VzZWRfbWF0aChuZXh0X3ApICYmIG5leHRfcC0+ZnB1X2NvdW50ZXIgPiA1OwogCiAJLyogd2UncmUgZ29pbmcgdG8gdXNlIHRoaXMgc29vbiwgYWZ0ZXIgYSBmZXcgZXhwZW5zaXZlIHRoaW5ncyAqLwotCWlmIChuZXh0X3AtPmZwdV9jb3VudGVyID4gNSkKKwlpZiAocHJlbG9hZF9mcHUpCiAJCXByZWZldGNoKG5leHQtPnhzdGF0ZSk7CiAKIAkvKgpAQCAtNDE5LDYgKzQyNCwxMyBAQAogCiAJbG9hZF9UTFMobmV4dCwgY3B1KTsKIAorCS8qIE11c3QgYmUgYWZ0ZXIgRFMgcmVsb2FkICovCisJdW5sYXp5X2ZwdShwcmV2X3ApOworCisJLyogTWFrZSBzdXJlIGNwdSBpcyByZWFkeSBmb3IgbmV3IGNvbnRleHQgKi8KKwlpZiAocHJlbG9hZF9mcHUpCisJCWNsdHMoKTsKKwogCS8qCiAJICogTGVhdmUgbGF6eSBtb2RlLCBmbHVzaGluZyBhbnkgaHlwZXJjYWxscyBtYWRlIGhlcmUuCiAJICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHJlc3RvcmluZyBUTFMgc2VnbWVudHMgc28KQEAgLTQ1OSw5ICs0NzEsNiBAQAogCQl3cm1zcmwoTVNSX0tFUk5FTF9HU19CQVNFLCBuZXh0LT5ncyk7CiAJcHJldi0+Z3NpbmRleCA9IGdzaW5kZXg7CiAKLQkvKiBNdXN0IGJlIGFmdGVyIERTIHJlbG9hZCAqLwotCXVubGF6eV9mcHUocHJldl9wKTsKLQogCS8qCiAJICogU3dpdGNoIHRoZSBQREEgYW5kIEZQVSBjb250ZXh0cy4KIAkgKi8KQEAgLTQ4MCwxNSArNDg5LDEyIEBACiAJCSAgICAgdGFza190aHJlYWRfaW5mbyhwcmV2X3ApLT5mbGFncyAmIF9USUZfV09SS19DVFhTV19QUkVWKSkKIAkJX19zd2l0Y2hfdG9feHRyYShwcmV2X3AsIG5leHRfcCwgdHNzKTsKIAotCS8qIElmIHRoZSB0YXNrIGhhcyB1c2VkIGZwdSB0aGUgbGFzdCA1IHRpbWVzbGljZXMsIGp1c3QgZG8gYSBmdWxsCi0JICogcmVzdG9yZSBvZiB0aGUgbWF0aCBzdGF0ZSBpbW1lZGlhdGVseSB0byBhdm9pZCB0aGUgdHJhcDsgdGhlCi0JICogY2hhbmNlcyBvZiBuZWVkaW5nIEZQVSBzb29uIGFyZSBvYnZpb3VzbHkgaGlnaCBub3cKLQkgKgotCSAqIHRza191c2VkX21hdGgoKSBjaGVja3MgcHJldmVudCBjYWxsaW5nIG1hdGhfc3RhdGVfcmVzdG9yZSgpLAotCSAqIHdoaWNoIGNhbiBzbGVlcCBpbiB0aGUgY2FzZSBvZiAhdHNrX3VzZWRfbWF0aCgpCisJLyoKKwkgKiBQcmVsb2FkIHRoZSBGUFUgY29udGV4dCwgbm93IHRoYXQgd2UndmUgZGV0ZXJtaW5lZCB0aGF0IHRoZQorCSAqIHRhc2sgaXMgbGlrZWx5IHRvIGJlIHVzaW5nIGl0LiAKIAkgKi8KLQlpZiAodHNrX3VzZWRfbWF0aChuZXh0X3ApICYmIG5leHRfcC0+ZnB1X2NvdW50ZXIgPiA1KQotCQltYXRoX3N0YXRlX3Jlc3RvcmUoKTsKKwlpZiAocHJlbG9hZF9mcHUpCisJCV9fbWF0aF9zdGF0ZV9yZXN0b3JlKCk7CiAJcmV0dXJuIHByZXZfcDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggMmZlY2RhNi4uYzM2Y2MxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC00MzQsNyArNDM0LDggQEAKIAkgKiBGb3IgcGVyZiwgd2UgcmV0dXJuIGxhc3QgbGV2ZWwgY2FjaGUgc2hhcmVkIG1hcC4KIAkgKiBBbmQgZm9yIHBvd2VyIHNhdmluZ3MsIHdlIHJldHVybiBjcHVfY29yZV9tYXAKIAkgKi8KLQlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKKwlpZiAoKHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgfHwgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpICYmCisJICAgICEoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BTURfRENNKSkpCiAJCXJldHVybiBjcHVfY29yZV9tYXNrKGNwdSk7CiAJZWxzZQogCQlyZXR1cm4gYy0+bGxjX3NoYXJlZF9tYXA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jIGIvYXJjaC94ODYva2VybmVsL3N0ZXAuYwppbmRleCBlOGI5ODYzLi4zMTQ5MDMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3RlcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdGVwLmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAKIHVuc2lnbmVkIGxvbmcgY29udmVydF9pcF90b19saW5lYXIoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0yMyw3ICsyNCw3IEBACiAJICogYW5kIEFQTSBiaW9zIG9uZXMgd2UganVzdCBpZ25vcmUgaGVyZS4KIAkgKi8KIAlpZiAoKHNlZyAmIFNFR01FTlRfVElfTUFTSykgPT0gU0VHTUVOVF9MRFQpIHsKLQkJdTMyICpkZXNjOworCQlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2M7CiAJCXVuc2lnbmVkIGxvbmcgYmFzZTsKIAogCQlzZWcgJj0gfjdVTDsKQEAgLTMzLDEyICszNCwxMCBAQAogCQkJYWRkciA9IC0xTDsgLyogYm9ndXMgc2VsZWN0b3IsIGFjY2VzcyB3b3VsZCBmYXVsdCAqLwogCQllbHNlIHsKIAkJCWRlc2MgPSBjaGlsZC0+bW0tPmNvbnRleHQubGR0ICsgc2VnOwotCQkJYmFzZSA9ICgoZGVzY1swXSA+PiAxNikgfAotCQkJCSgoZGVzY1sxXSAmIDB4ZmYpIDw8IDE2KSB8Ci0JCQkJKGRlc2NbMV0gJiAweGZmMDAwMDAwKSk7CisJCQliYXNlID0gZ2V0X2Rlc2NfYmFzZShkZXNjKTsKIAogCQkJLyogMTYtYml0IGNvZGUgc2VnbWVudD8gKi8KLQkJCWlmICghKChkZXNjWzFdID4+IDIyKSAmIDEpKQorCQkJaWYgKCFkZXNjLT5kKQogCQkJCWFkZHIgJj0gMHhmZmZmOwogCQkJYWRkciArPSBiYXNlOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKaW5kZXggNzdiOTY4OS4uNTAzYzFmMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwpAQCAtNjQwLDEzICs2NDAsMTMgQEAKIAlpZiAoIWlzX3V2X3N5c3RlbSgpKQogCQlyZXR1cm4gMDsKIAotCXByb2NfdXZfcHRjID0gY3JlYXRlX3Byb2NfZW50cnkoVVZfUFRDX0JBU0VOQU1FLCAwNDQ0LCBOVUxMKTsKKwlwcm9jX3V2X3B0YyA9IHByb2NfY3JlYXRlKFVWX1BUQ19CQVNFTkFNRSwgMDQ0NCwgTlVMTCwKKwkJCQkgICZwcm9jX3V2X3B0Y19vcGVyYXRpb25zKTsKIAlpZiAoIXByb2NfdXZfcHRjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGNyZWF0ZSAlcyBwcm9jIGVudHJ5XG4iLAogCQkgICAgICAgVVZfUFRDX0JBU0VOQU1FKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXByb2NfdXZfcHRjLT5wcm9jX2ZvcHMgPSAmcHJvY191dl9wdGNfb3BlcmF0aW9uczsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCA1MjA0MzMyLi44MzI2NDkyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNzYsNyArNzYsNyBAQAogICogRjAgMEYgYnVnIHdvcmthcm91bmQuLiBXZSBoYXZlIGEgc3BlY2lhbCBsaW5rIHNlZ21lbnQKICAqIGZvciB0aGlzLgogICovCi1nYXRlX2Rlc2MgaWR0X3RhYmxlWzI1Nl0KK2dhdGVfZGVzYyBpZHRfdGFibGVbTlJfVkVDVE9SU10KIAlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaWR0IikpKSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKICNlbmRpZgogCkBAIC03ODYsMjcgKzc4Niw2IEBACiAjZW5kaWYKIH0KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLXVuc2lnbmVkIGxvbmcgcGF0Y2hfZXNwZml4X2Rlc2ModW5zaWduZWQgbG9uZyB1ZXNwLCB1bnNpZ25lZCBsb25nIGtlc3ApCi17Ci0Jc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IChrZXNwIC0gdWVzcCkgJiAtVEhSRUFEX1NJWkU7Ci0JdW5zaWduZWQgbG9uZyBuZXdfa2VzcCA9IGtlc3AgLSBiYXNlOwotCXVuc2lnbmVkIGxvbmcgbGltX3BhZ2VzID0gKG5ld19rZXNwIHwgKFRIUkVBRF9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7Ci0JX191NjQgZGVzYyA9ICooX191NjQgKikmZ2R0W0dEVF9FTlRSWV9FU1BGSVhfU1NdOwotCi0JLyogU2V0IHVwIGJhc2UgZm9yIGVzcGZpeCBzZWdtZW50ICovCi0JZGVzYyAmPSAweDAwZjBmZjAwMDAwMDAwMDBVTEw7Ci0JZGVzYyB8PQkoKCgoX191NjQpYmFzZSkgPDwgMTYpICYgMHgwMDAwMDBmZmZmZmYwMDAwVUxMKSB8Ci0JCSgoKChfX3U2NCliYXNlKSA8PCAzMikgJiAweGZmMDAwMDAwMDAwMDAwMDBVTEwpIHwKLQkJKCgoKF9fdTY0KWxpbV9wYWdlcykgPDwgMzIpICYgMHgwMDBmMDAwMDAwMDAwMDAwVUxMKSB8Ci0JCShsaW1fcGFnZXMgJiAweGZmZmYpOwotCSooX191NjQgKikmZ2R0W0dEVF9FTlRSWV9FU1BGSVhfU1NdID0gZGVzYzsKLQotCXJldHVybiBuZXdfa2VzcDsKLX0KLSNlbmRpZgotCiBhc21saW5rYWdlIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIHNtcF90aGVybWFsX2ludGVycnVwdCh2b2lkKQogewogfQpAQCAtODE2LDYgKzc5NSwyOCBAQAogfQogCiAvKgorICogX19tYXRoX3N0YXRlX3Jlc3RvcmUgYXNzdW1lcyB0aGF0IGNyMC5UUyBpcyBhbHJlYWR5IGNsZWFyIGFuZCB0aGUKKyAqIGZwdSBzdGF0ZSBpcyBhbGwgcmVhZHkgZm9yIHVzZS4gIFVzZWQgZHVyaW5nIGNvbnRleHQgc3dpdGNoLgorICovCit2b2lkIF9fbWF0aF9zdGF0ZV9yZXN0b3JlKHZvaWQpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSB0aHJlYWQtPnRhc2s7CisKKwkvKgorCSAqIFBhcmFub2lkIHJlc3RvcmUuIHNlbmQgYSBTSUdTRUdWIGlmIHdlIGZhaWwgdG8gcmVzdG9yZSB0aGUgc3RhdGUuCisJICovCisJaWYgKHVubGlrZWx5KHJlc3RvcmVfZnB1X2NoZWNraW5nKHRzaykpKSB7CisJCXN0dHMoKTsKKwkJZm9yY2Vfc2lnKFNJR1NFR1YsIHRzayk7CisJCXJldHVybjsKKwl9CisKKwl0aHJlYWQtPnN0YXR1cyB8PSBUU19VU0VERlBVOwkvKiBTbyB3ZSBmbnNhdmUgb24gc3dpdGNoX3RvKCkgKi8KKwl0c2stPmZwdV9jb3VudGVyKys7Cit9CisKKy8qCiAgKiAnbWF0aF9zdGF0ZV9yZXN0b3JlKCknIHNhdmVzIHRoZSBjdXJyZW50IG1hdGggaW5mb3JtYXRpb24gaW4gdGhlCiAgKiBvbGQgbWF0aCBzdGF0ZSBhcnJheSwgYW5kIGdldHMgdGhlIG5ldyBvbmVzIGZyb20gdGhlIGN1cnJlbnQgdGFzawogICoKQEAgLTg0NiwxNyArODQ3LDggQEAKIAl9CiAKIAljbHRzKCk7CQkJCS8qIEFsbG93IG1hdGhzIG9wcyAob3Igd2UgcmVjdXJzZSkgKi8KLQkvKgotCSAqIFBhcmFub2lkIHJlc3RvcmUuIHNlbmQgYSBTSUdTRUdWIGlmIHdlIGZhaWwgdG8gcmVzdG9yZSB0aGUgc3RhdGUuCi0JICovCi0JaWYgKHVubGlrZWx5KHJlc3RvcmVfZnB1X2NoZWNraW5nKHRzaykpKSB7Ci0JCXN0dHMoKTsKLQkJZm9yY2Vfc2lnKFNJR1NFR1YsIHRzayk7Ci0JCXJldHVybjsKLQl9CiAKLQl0aHJlYWQtPnN0YXR1cyB8PSBUU19VU0VERlBVOwkvKiBTbyB3ZSBmbnNhdmUgb24gc3dpdGNoX3RvKCkgKi8KLQl0c2stPmZwdV9jb3VudGVyKys7CisJX19tYXRoX3N0YXRlX3Jlc3RvcmUoKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1hdGhfc3RhdGVfcmVzdG9yZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9LY29uZmlnIGIvYXJjaC94ODYva3ZtL0tjb25maWcKaW5kZXggODYwMGEwOS4uYjg0ZTU3MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL0tjb25maWcKKysrIGIvYXJjaC94ODYva3ZtL0tjb25maWcKQEAgLTEsMTIgKzEsOCBAQAogIwogIyBLVk0gY29uZmlndXJhdGlvbgogIwotY29uZmlnIEhBVkVfS1ZNCi0gICAgICAgYm9vbAogCi1jb25maWcgSEFWRV9LVk1fSVJRQ0hJUAotICAgICAgIGJvb2wKLSAgICAgICBkZWZhdWx0IHkKK3NvdXJjZSAidmlydC9rdm0vS2NvbmZpZyIKIAogbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTgogCWJvb2wgIlZpcnR1YWxpemF0aW9uIgpAQCAtMjksNiArMjUsOSBAQAogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBNTVVfTk9USUZJRVIKIAlzZWxlY3QgQU5PTl9JTk9ERVMKKwlzZWxlY3QgSEFWRV9LVk1fSVJRQ0hJUAorCXNlbGVjdCBIQVZFX0tWTV9FVkVOVEZECisJc2VsZWN0IEtWTV9BUElDX0FSQ0hJVEVDVFVSRQogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZQogCSAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50CkBAIC02MywxOCArNjIsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBrdm0tYW1kLgogCi1jb25maWcgS1ZNX1RSQUNFCi0JYm9vbCAiS1ZNIHRyYWNlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBLVk0gJiYgU1lTRlMKLQlzZWxlY3QgTUFSS0VSUwotCXNlbGVjdCBSRUxBWQotCXNlbGVjdCBERUJVR19GUwotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGFsbG93cyByZWFkaW5nIGEgdHJhY2Ugb2Yga3ZtLXJlbGF0ZWQgZXZlbnRzIHRocm91Z2gKLQkgIHJlbGF5ZnMuICBOb3RlIHRoZSBBQkkgaXMgbm90IGNvbnNpZGVyZWQgc3RhYmxlIGFuZCB3aWxsIGJlCi0JICBtb2RpZmllZCBpbiBmdXR1cmUgdXBkYXRlcy4KLQogIyBPSywgaXQncyBhIGxpdHRsZSBjb3VudGVyLWludHVpdGl2ZSB0byBkbyB0aGlzLCBidXQgaXQgcHV0cyBpdCBuZWF0bHkgdW5kZXIKICMgdGhlIHZpcnR1YWxpemF0aW9uIG1lbnUuCiBzb3VyY2UgZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL01ha2VmaWxlIGIvYXJjaC94ODYva3ZtL01ha2VmaWxlCmluZGV4IGI0M2M0ZWYuLjBlN2ZlNzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTEsMjIgKzEsMTkgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlCi0jCi0KLWNvbW1vbi1vYmpzID0gJChhZGRwcmVmaXggLi4vLi4vLi4vdmlydC9rdm0vLCBrdm1fbWFpbi5vIGlvYXBpYy5vIFwKLSAgICAgICAgICAgICAgICBjb2FsZXNjZWRfbW1pby5vIGlycV9jb21tLm8pCi1pZmVxICgkKENPTkZJR19LVk1fVFJBQ0UpLHkpCi1jb21tb24tb2JqcyArPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV90cmFjZS5vKQotZW5kaWYKLWlmZXEgKCQoQ09ORklHX0lPTU1VX0FQSSkseSkKLWNvbW1vbi1vYmpzICs9ICQoYWRkcHJlZml4IC4uLy4uLy4uL3ZpcnQva3ZtLywgaW9tbXUubykKLWVuZGlmCiAKIEVYVFJBX0NGTEFHUyArPSAtSXZpcnQva3ZtIC1JYXJjaC94ODYva3ZtCiAKLWt2bS1vYmpzIDo9ICQoY29tbW9uLW9ianMpIHg4Ni5vIG1tdS5vIHg4Nl9lbXVsYXRlLm8gaTgyNTkubyBpcnEubyBsYXBpYy5vIFwKLQlpODI1NC5vIHRpbWVyLm8KLW9iai0kKENPTkZJR19LVk0pICs9IGt2bS5vCi1rdm0taW50ZWwtb2JqcyA9IHZteC5vCi1vYmotJChDT05GSUdfS1ZNX0lOVEVMKSArPSBrdm0taW50ZWwubwota3ZtLWFtZC1vYmpzID0gc3ZtLm8KLW9iai0kKENPTkZJR19LVk1fQU1EKSArPSBrdm0tYW1kLm8KK0NGTEFHU194ODYubyA6PSAtSS4KK0NGTEFHU19zdm0ubyA6PSAtSS4KK0NGTEFHU192bXgubyA6PSAtSS4KKwora3ZtLXkJCQkrPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGt2bV9tYWluLm8gaW9hcGljLm8gXAorCQkJCWNvYWxlc2NlZF9tbWlvLm8gaXJxX2NvbW0ubyBldmVudGZkLm8pCitrdm0tJChDT05GSUdfSU9NTVVfQVBJKQkrPSAkKGFkZHByZWZpeCAuLi8uLi8uLi92aXJ0L2t2bS8sIGlvbW11Lm8pCisKK2t2bS15CQkJKz0geDg2Lm8gbW11Lm8gZW11bGF0ZS5vIGk4MjU5Lm8gaXJxLm8gbGFwaWMubyBcCisJCQkgICBpODI1NC5vIHRpbWVyLm8KK2t2bS1pbnRlbC15CQkrPSB2bXgubwora3ZtLWFtZC15CQkrPSBzdm0ubworCitvYmotJChDT05GSUdfS1ZNKQkrPSBrdm0ubworb2JqLSQoQ09ORklHX0tWTV9JTlRFTCkJKz0ga3ZtLWludGVsLm8KK29iai0kKENPTkZJR19LVk1fQU1EKQkrPSBrdm0tYW1kLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYwpyZW5hbWUgdG8gYXJjaC94ODYva3ZtL2VtdWxhdGUuYwppbmRleCA2MTZkZTQ2Li4xYmU1Y2Q2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0veDg2X2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogeDg2X2VtdWxhdGUuYworICogZW11bGF0ZS5jCiAgKgogICogR2VuZXJpYyB4ODYgKDMyLWJpdCBhbmQgNjQtYml0KSBpbnN0cnVjdGlvbiBkZWNvZGVyIGFuZCBlbXVsYXRvci4KICAqCkBAIC0zMCw3ICszMCw5IEBACiAjZGVmaW5lIERQUklOVEYoeC4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20va3ZtX3g4Nl9lbXVsYXRlLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9lbXVsYXRlLmg+CisKKyNpbmNsdWRlICJtbXUuaCIJCS8qIGZvciBpc19sb25nX21vZGUoKSAqLwogCiAvKgogICogT3Bjb2RlIGVmZmVjdGl2ZS1hZGRyZXNzIGRlY29kZSB0YWJsZXMuCkBAIC02MCw2ICs2Miw3IEBACiAjZGVmaW5lIFNyY0ltbUJ5dGUgICg2PDw0KQkvKiA4LWJpdCBzaWduLWV4dGVuZGVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwogI2RlZmluZSBTcmNPbmUgICAgICAoNzw8NCkJLyogSW1wbGllZCAnMScgKi8KICNkZWZpbmUgU3JjSW1tVUJ5dGUgKDg8PDQpICAgICAgLyogOC1iaXQgdW5zaWduZWQgaW1tZWRpYXRlIG9wZXJhbmQuICovCisjZGVmaW5lIFNyY0ltbVUgICAgICg5PDw0KSAgICAgIC8qIEltbWVkaWF0ZSBvcGVyYW5kLCB1bnNpZ25lZCAqLwogI2RlZmluZSBTcmNNYXNrICAgICAoMHhmPDw0KQogLyogR2VuZXJpYyBNb2RSTSBkZWNvZGUuICovCiAjZGVmaW5lIE1vZFJNICAgICAgICgxPDw4KQpAQCAtOTcsMTEgKzEwMCwxMSBAQAogCS8qIDB4MTAgLSAweDE3ICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKLQkwLCAwLCAwLCAwLAorCUJ5dGVPcCB8IERzdEFjYyB8IFNyY0ltbSwgRHN0QWNjIHwgU3JjSW1tLCAwLCAwLAogCS8qIDB4MTggLSAweDFGICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKLQkwLCAwLCAwLCAwLAorCUJ5dGVPcCB8IERzdEFjYyB8IFNyY0ltbSwgRHN0QWNjIHwgU3JjSW1tLCAwLCAwLAogCS8qIDB4MjAgLSAweDI3ICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKQEAgLTE5NSw3ICsxOTgsNyBAQAogCUJ5dGVPcCB8IFNyY0ltbVVCeXRlLCBTcmNJbW1VQnl0ZSwKIAkvKiAweEU4IC0gMHhFRiAqLwogCVNyY0ltbSB8IFN0YWNrLCBTcmNJbW0gfCBJbXBsaWNpdE9wcywKLQlTcmNJbW0gfCBTcmMySW1tMTYsIFNyY0ltbUJ5dGUgfCBJbXBsaWNpdE9wcywKKwlTcmNJbW1VIHwgU3JjMkltbTE2LCBTcmNJbW1CeXRlIHwgSW1wbGljaXRPcHMsCiAJU3JjTm9uZSB8IEJ5dGVPcCB8IEltcGxpY2l0T3BzLCBTcmNOb25lIHwgSW1wbGljaXRPcHMsCiAJU3JjTm9uZSB8IEJ5dGVPcCB8IEltcGxpY2l0T3BzLCBTcmNOb25lIHwgSW1wbGljaXRPcHMsCiAJLyogMHhGMCAtIDB4RjcgKi8KQEAgLTIwOCw3ICsyMTEsNyBAQAogCiBzdGF0aWMgdTMyIHR3b2J5dGVfdGFibGVbMjU2XSA9IHsKIAkvKiAweDAwIC0gMHgwRiAqLwotCTAsIEdyb3VwIHwgR3JvdXBEdWFsIHwgR3JvdXA3LCAwLCAwLCAwLCAwLCBJbXBsaWNpdE9wcywgMCwKKwkwLCBHcm91cCB8IEdyb3VwRHVhbCB8IEdyb3VwNywgMCwgMCwgMCwgSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCAwLAogCUltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcywgMCwgMCwgMCwgSW1wbGljaXRPcHMgfCBNb2RSTSwgMCwgMCwKIAkvKiAweDEwIC0gMHgxRiAqLwogCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIEltcGxpY2l0T3BzIHwgTW9kUk0sIDAsIDAsIDAsIDAsIDAsIDAsIDAsCkBAIC0yMTYsNyArMjE5LDkgQEAKIAlNb2RSTSB8IEltcGxpY2l0T3BzLCBNb2RSTSwgTW9kUk0gfCBJbXBsaWNpdE9wcywgTW9kUk0sIDAsIDAsIDAsIDAsCiAJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKIAkvKiAweDMwIC0gMHgzRiAqLwotCUltcGxpY2l0T3BzLCAwLCBJbXBsaWNpdE9wcywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwlJbXBsaWNpdE9wcywgMCwgSW1wbGljaXRPcHMsIDAsCisJSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJLyogMHg0MCAtIDB4NDcgKi8KIAlEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCiAJRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LApAQCAtMzE5LDggKzMyNCwxMSBAQAogfTsKIAogLyogRUZMQUdTIGJpdCBkZWZpbml0aW9ucy4gKi8KKyNkZWZpbmUgRUZMR19WTSAoMTw8MTcpCisjZGVmaW5lIEVGTEdfUkYgKDE8PDE2KQogI2RlZmluZSBFRkxHX09GICgxPDwxMSkKICNkZWZpbmUgRUZMR19ERiAoMTw8MTApCisjZGVmaW5lIEVGTEdfSUYgKDE8PDkpCiAjZGVmaW5lIEVGTEdfU0YgKDE8PDcpCiAjZGVmaW5lIEVGTEdfWkYgKDE8PDYpCiAjZGVmaW5lIEVGTEdfQUYgKDE8PDQpCkBAIC0xMDI3LDYgKzEwMzUsNyBAQAogCQljLT5zcmMudHlwZSA9IE9QX01FTTsKIAkJYnJlYWs7CiAJY2FzZSBTcmNJbW06CisJY2FzZSBTcmNJbW1VOgogCQljLT5zcmMudHlwZSA9IE9QX0lNTTsKIAkJYy0+c3JjLnB0ciA9ICh1bnNpZ25lZCBsb25nICopYy0+ZWlwOwogCQljLT5zcmMuYnl0ZXMgPSAoYy0+ZCAmIEJ5dGVPcCkgPyAxIDogYy0+b3BfYnl0ZXM7CkBAIC0xMDQ0LDYgKzEwNTMsMTkgQEAKIAkJCWMtPnNyYy52YWwgPSBpbnNuX2ZldGNoKHMzMiwgNCwgYy0+ZWlwKTsKIAkJCWJyZWFrOwogCQl9CisJCWlmICgoYy0+ZCAmIFNyY01hc2spID09IFNyY0ltbVUpIHsKKwkJCXN3aXRjaCAoYy0+c3JjLmJ5dGVzKSB7CisJCQljYXNlIDE6CisJCQkJYy0+c3JjLnZhbCAmPSAweGZmOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCWMtPnNyYy52YWwgJj0gMHhmZmZmOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCWMtPnNyYy52YWwgJj0gMHhmZmZmZmZmZjsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCQlicmVhazsKIAljYXNlIFNyY0ltbUJ5dGU6CiAJY2FzZSBTcmNJbW1VQnl0ZToKQEAgLTEzNzUsNiArMTM5NywyMTcgQEAKIAkJY3R4dC0+aW50ZXJydXB0aWJpbGl0eSA9IG1hc2s7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAorc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJc3RydWN0IGt2bV9zZWdtZW50ICpjcywgc3RydWN0IGt2bV9zZWdtZW50ICpzcykKK3sKKwltZW1zZXQoY3MsIDAsIHNpemVvZihzdHJ1Y3Qga3ZtX3NlZ21lbnQpKTsKKwlrdm1feDg2X29wcy0+Z2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgY3MsIFZDUFVfU1JFR19DUyk7CisJbWVtc2V0KHNzLCAwLCBzaXplb2Yoc3RydWN0IGt2bV9zZWdtZW50KSk7CisKKwljcy0+bCA9IDA7CQkvKiB3aWxsIGJlIGFkanVzdGVkIGxhdGVyICovCisJY3MtPmJhc2UgPSAwOwkJLyogZmxhdCBzZWdtZW50ICovCisJY3MtPmcgPSAxOwkJLyogNGtiIGdyYW51bGFyaXR5ICovCisJY3MtPmxpbWl0ID0gMHhmZmZmZmZmZjsJLyogNEdCIGxpbWl0ICovCisJY3MtPnR5cGUgPSAweDBiOwkvKiBSZWFkLCBFeGVjdXRlLCBBY2Nlc3NlZCAqLworCWNzLT5zID0gMTsKKwljcy0+ZHBsID0gMDsJCS8qIHdpbGwgYmUgYWRqdXN0ZWQgbGF0ZXIgKi8KKwljcy0+cHJlc2VudCA9IDE7CisJY3MtPmRiID0gMTsKKworCXNzLT51bnVzYWJsZSA9IDA7CisJc3MtPmJhc2UgPSAwOwkJLyogZmxhdCBzZWdtZW50ICovCisJc3MtPmxpbWl0ID0gMHhmZmZmZmZmZjsJLyogNEdCIGxpbWl0ICovCisJc3MtPmcgPSAxOwkJLyogNGtiIGdyYW51bGFyaXR5ICovCisJc3MtPnMgPSAxOworCXNzLT50eXBlID0gMHgwMzsJLyogUmVhZC9Xcml0ZSwgQWNjZXNzZWQgKi8KKwlzcy0+ZGIgPSAxOwkJLyogMzJiaXQgc3RhY2sgc2VnbWVudCAqLworCXNzLT5kcGwgPSAwOworCXNzLT5wcmVzZW50ID0gMTsKK30KKworc3RhdGljIGludAorZW11bGF0ZV9zeXNjYWxsKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisJdTY0IG1zcl9kYXRhOworCisJLyogc3lzY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHJlYWwgbW9kZSAqLworCWlmIChjLT5sb2NrX3ByZWZpeCB8fCBjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMCisJCXx8ICEoY3R4dC0+dmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKKwkJcmV0dXJuIC0xOworCisJc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoY3R4dCwgJmNzLCAmc3MpOworCisJa3ZtX3g4Nl9vcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwgTVNSX1NUQVIsICZtc3JfZGF0YSk7CisJbXNyX2RhdGEgPj49IDMyOworCWNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgJiAweGZmZmMpOworCXNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgKyA4KTsKKworCWlmIChpc19sb25nX21vZGUoY3R4dC0+dmNwdSkpIHsKKwkJY3MuZGIgPSAwOworCQljcy5sID0gMTsKKwl9CisJa3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KGN0eHQtPnZjcHUsICZjcywgVkNQVV9TUkVHX0NTKTsKKwlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJnNzLCBWQ1BVX1NSRUdfU1MpOworCisJYy0+cmVnc1tWQ1BVX1JFR1NfUkNYXSA9IGMtPmVpcDsKKwlpZiAoaXNfbG9uZ19tb2RlKGN0eHQtPnZjcHUpKSB7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQljLT5yZWdzW1ZDUFVfUkVHU19SMTFdID0gY3R4dC0+ZWZsYWdzICYgfkVGTEdfUkY7CisKKwkJa3ZtX3g4Nl9vcHMtPmdldF9tc3IoY3R4dC0+dmNwdSwKKwkJCWN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCA/CisJCQlNU1JfTFNUQVIgOiBNU1JfQ1NUQVIsICZtc3JfZGF0YSk7CisJCWMtPmVpcCA9IG1zcl9kYXRhOworCisJCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9TWVNDQUxMX01BU0ssICZtc3JfZGF0YSk7CisJCWN0eHQtPmVmbGFncyAmPSB+KG1zcl9kYXRhIHwgRUZMR19SRik7CisjZW5kaWYKKwl9IGVsc2UgeworCQkvKiBsZWdhY3kgbW9kZSAqLworCQlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfU1RBUiwgJm1zcl9kYXRhKTsKKwkJYy0+ZWlwID0gKHUzMiltc3JfZGF0YTsKKworCQljdHh0LT5lZmxhZ3MgJj0gfihFRkxHX1ZNIHwgRUZMR19JRiB8IEVGTEdfUkYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbXVsYXRlX3N5c2VudGVyKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisJdTY0IG1zcl9kYXRhOworCisJLyogaW5qZWN0ICNVRCBpZiBMT0NLIHByZWZpeCBpcyB1c2VkICovCisJaWYgKGMtPmxvY2tfcHJlZml4KQorCQlyZXR1cm4gLTE7CisKKwkvKiBpbmplY3QgI0dQIGlmIGluIHJlYWwgbW9kZSBvciBwYWdpbmcgaXMgZGlzYWJsZWQgKi8KKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUkVBTCB8fAorCQkhKGN0eHQtPnZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpIHsKKwkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFhYWCBzeXNlbnRlci9zeXNleGl0IGhhdmUgbm90IGJlZW4gdGVzdGVkIGluIDY0Yml0IG1vZGUuCisJKiBUaGVyZWZvcmUsIHdlIGluamVjdCBhbiAjVUQuCisJKi8KKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KQorCQlyZXR1cm4gLTE7CisKKwlzZXR1cF9zeXNjYWxsc19zZWdtZW50cyhjdHh0LCAmY3MsICZzcyk7CisKKwlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKKwlzd2l0Y2ggKGN0eHQtPm1vZGUpIHsKKwljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMzI6CisJCWlmICgobXNyX2RhdGEgJiAweGZmZmMpID09IDB4MCkgeworCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIFg4NkVNVUxfTU9ERV9QUk9UNjQ6CisJCWlmIChtc3JfZGF0YSA9PSAweDApIHsKKwkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY3R4dC0+ZWZsYWdzICY9IH4oRUZMR19WTSB8IEVGTEdfSUYgfCBFRkxHX1JGKTsKKwljcy5zZWxlY3RvciA9ICh1MTYpbXNyX2RhdGE7CisJY3Muc2VsZWN0b3IgJj0gflNFTEVDVE9SX1JQTF9NQVNLOworCXNzLnNlbGVjdG9yID0gY3Muc2VsZWN0b3IgKyA4OworCXNzLnNlbGVjdG9yICY9IH5TRUxFQ1RPUl9SUExfTUFTSzsKKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0CisJCXx8IGlzX2xvbmdfbW9kZShjdHh0LT52Y3B1KSkgeworCQljcy5kYiA9IDA7CisJCWNzLmwgPSAxOworCX0KKworCWt2bV94ODZfb3BzLT5zZXRfc2VnbWVudChjdHh0LT52Y3B1LCAmY3MsIFZDUFVfU1JFR19DUyk7CisJa3ZtX3g4Nl9vcHMtPnNldF9zZWdtZW50KGN0eHQtPnZjcHUsICZzcywgVkNQVV9TUkVHX1NTKTsKKworCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0VJUCwgJm1zcl9kYXRhKTsKKwljLT5laXAgPSBtc3JfZGF0YTsKKworCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgJm1zcl9kYXRhKTsKKwljLT5yZWdzW1ZDUFVfUkVHU19SU1BdID0gbXNyX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW11bGF0ZV9zeXNleGl0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOworCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CisJdTY0IG1zcl9kYXRhOworCWludCB1c2VybW9kZTsKKworCS8qIGluamVjdCAjVUQgaWYgTE9DSyBwcmVmaXggaXMgdXNlZCAqLworCWlmIChjLT5sb2NrX3ByZWZpeCkKKwkJcmV0dXJuIC0xOworCisJLyogaW5qZWN0ICNHUCBpZiBpbiByZWFsIG1vZGUgb3IgcGFnaW5nIGlzIGRpc2FibGVkICovCisJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1JFQUwKKwkJfHwgIShjdHh0LT52Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfUEUpKSB7CisJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBzeXNleGl0IG11c3QgYmUgY2FsbGVkIGZyb20gQ1BMIDAgKi8KKwlpZiAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwoY3R4dC0+dmNwdSkgIT0gMCkgeworCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQlyZXR1cm4gLTE7CisJfQorCisJc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoY3R4dCwgJmNzLCAmc3MpOworCisJaWYgKChjLT5yZXhfcHJlZml4ICYgMHg4KSAhPSAweDApCisJCXVzZXJtb2RlID0gWDg2RU1VTF9NT0RFX1BST1Q2NDsKKwllbHNlCisJCXVzZXJtb2RlID0gWDg2RU1VTF9NT0RFX1BST1QzMjsKKworCWNzLmRwbCA9IDM7CisJc3MuZHBsID0gMzsKKwlrdm1feDg2X29wcy0+Z2V0X21zcihjdHh0LT52Y3B1LCBNU1JfSUEzMl9TWVNFTlRFUl9DUywgJm1zcl9kYXRhKTsKKwlzd2l0Y2ggKHVzZXJtb2RlKSB7CisJY2FzZSBYODZFTVVMX01PREVfUFJPVDMyOgorCQljcy5zZWxlY3RvciA9ICh1MTYpKG1zcl9kYXRhICsgMTYpOworCQlpZiAoKG1zcl9kYXRhICYgMHhmZmZjKSA9PSAweDApIHsKKwkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc3Muc2VsZWN0b3IgPSAodTE2KShtc3JfZGF0YSArIDI0KTsKKwkJYnJlYWs7CisJY2FzZSBYODZFTVVMX01PREVfUFJPVDY0OgorCQljcy5zZWxlY3RvciA9ICh1MTYpKG1zcl9kYXRhICsgMzIpOworCQlpZiAobXNyX2RhdGEgPT0gMHgwKSB7CisJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJcmV0dXJuIC0xOworCQl9CisJCXNzLnNlbGVjdG9yID0gY3Muc2VsZWN0b3IgKyA4OworCQljcy5kYiA9IDA7CisJCWNzLmwgPSAxOworCQlicmVhazsKKwl9CisJY3Muc2VsZWN0b3IgfD0gU0VMRUNUT1JfUlBMX01BU0s7CisJc3Muc2VsZWN0b3IgfD0gU0VMRUNUT1JfUlBMX01BU0s7CisKKwlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQoY3R4dC0+dmNwdSwgJmNzLCBWQ1BVX1NSRUdfQ1MpOworCWt2bV94ODZfb3BzLT5zZXRfc2VnbWVudChjdHh0LT52Y3B1LCAmc3MsIFZDUFVfU1JFR19TUyk7CisKKwljLT5laXAgPSBjdHh0LT52Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSA9IGN0eHQtPnZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKKworCXJldHVybiAwOworfQorCiBpbnQKIHg4Nl9lbXVsYXRlX2luc24oc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKIHsKQEAgLTE5NzAsNiArMjIwMywxMiBAQAogCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKIAkJfQogCQlicmVhazsKKwljYXNlIDB4MDU6IAkJLyogc3lzY2FsbCAqLworCQlpZiAoZW11bGF0ZV9zeXNjYWxsKGN0eHQpID09IC0xKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJZWxzZQorCQkJZ290byB3cml0ZWJhY2s7CisJCWJyZWFrOwogCWNhc2UgMHgwNjoKIAkJZW11bGF0ZV9jbHRzKGN0eHQtPnZjcHUpOwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CkBAIC0yMDM2LDYgKzIyNzUsMTggQEAKIAkJcmMgPSBYODZFTVVMX0NPTlRJTlVFOwogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CiAJCWJyZWFrOworCWNhc2UgMHgzNDoJCS8qIHN5c2VudGVyICovCisJCWlmIChlbXVsYXRlX3N5c2VudGVyKGN0eHQpID09IC0xKQorCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJZWxzZQorCQkJZ290byB3cml0ZWJhY2s7CisJCWJyZWFrOworCWNhc2UgMHgzNToJCS8qIHN5c2V4aXQgKi8KKwkJaWYgKGVtdWxhdGVfc3lzZXhpdChjdHh0KSA9PSAtMSkKKwkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCWVsc2UKKwkJCWdvdG8gd3JpdGViYWNrOworCQlicmVhazsKIAljYXNlIDB4NDAgLi4uIDB4NGY6CS8qIGNtb3YgKi8KIAkJYy0+ZHN0LnZhbCA9IGMtPmRzdC5vcmlnX3ZhbCA9IGMtPnNyYy52YWw7CiAJCWlmICghdGVzdF9jYyhjLT5iLCBjdHh0LT5lZmxhZ3MpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCAyMWY2OGUwLi44MmFkNTIzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiB7CiAJc3RydWN0IGt2bV9waXQgKnBpdCA9IHZjcHUtPmt2bS0+YXJjaC52cGl0OwogCi0JaWYgKHBpdCAmJiB2Y3B1LT52Y3B1X2lkID09IDAgJiYgcGl0LT5waXRfc3RhdGUuaXJxX2FjaykKKwlpZiAocGl0ICYmIGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSAmJiBwaXQtPnBpdF9zdGF0ZS5pcnFfYWNrKQogCQlyZXR1cm4gYXRvbWljX3JlYWQoJnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5wZW5kaW5nKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI1Miw3ICsyNTIsNyBAQAogCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSB2Y3B1LT5rdm0tPmFyY2gudnBpdDsKIAlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7CiAKLQlpZiAodmNwdS0+dmNwdV9pZCAhPSAwIHx8ICFwaXQpCisJaWYgKCFrdm1fdmNwdV9pc19ic3AodmNwdSkgfHwgIXBpdCkKIAkJcmV0dXJuOwogCiAJdGltZXIgPSAmcGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnRpbWVyOwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJcHQtPnRpbWVyLmZ1bmN0aW9uID0ga3ZtX3RpbWVyX2ZuOwogCXB0LT50X29wcyA9ICZrcGl0X29wczsKIAlwdC0+a3ZtID0gcHMtPnBpdC0+a3ZtOwotCXB0LT52Y3B1X2lkID0gMDsKKwlwdC0+dmNwdSA9IHB0LT5rdm0tPmJzcF92Y3B1OwogCiAJYXRvbWljX3NldCgmcHQtPnBlbmRpbmcsIDApOwogCXBzLT5pcnFfYWNrID0gMTsKQEAgLTMzMiwzMyArMzMyLDYyIEBACiAJY2FzZSAxOgogICAgICAgICAvKiBGSVhNRTogZW5oYW5jZSBtb2RlIDQgcHJlY2lzaW9uICovCiAJY2FzZSA0OgotCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDApOworCQlpZiAoIShwcy0+ZmxhZ3MgJiBLVk1fUElUX0ZMQUdTX0hQRVRfTEVHQUNZKSkgeworCQkJY3JlYXRlX3BpdF90aW1lcihwcywgdmFsLCAwKTsKKwkJfQogCQlicmVhazsKIAljYXNlIDI6CiAJY2FzZSAzOgotCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDEpOworCQlpZiAoIShwcy0+ZmxhZ3MgJiBLVk1fUElUX0ZMQUdTX0hQRVRfTEVHQUNZKSl7CisJCQljcmVhdGVfcGl0X3RpbWVyKHBzLCB2YWwsIDEpOworCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRlc3Ryb3lfcGl0X3RpbWVyKCZwcy0+cGl0X3RpbWVyKTsKIAl9CiB9CiAKLXZvaWQga3ZtX3BpdF9sb2FkX2NvdW50KHN0cnVjdCBrdm0gKmt2bSwgaW50IGNoYW5uZWwsIHUzMiB2YWwpCit2b2lkIGt2bV9waXRfbG9hZF9jb3VudChzdHJ1Y3Qga3ZtICprdm0sIGludCBjaGFubmVsLCB1MzIgdmFsLCBpbnQgaHBldF9sZWdhY3lfc3RhcnQpCiB7Ci0JbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKLQlwaXRfbG9hZF9jb3VudChrdm0sIGNoYW5uZWwsIHZhbCk7Ci0JbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOworCXU4IHNhdmVkX21vZGU7CisJaWYgKGhwZXRfbGVnYWN5X3N0YXJ0KSB7CisJCS8qIHNhdmUgZXhpc3RpbmcgbW9kZSBmb3IgbGF0ZXIgcmVlbmFibGVtZW50ICovCisJCXNhdmVkX21vZGUgPSBrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzWzBdLm1vZGU7CisJCWt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuY2hhbm5lbHNbMF0ubW9kZSA9IDB4ZmY7IC8qIGRpc2FibGUgdGltZXIgKi8KKwkJcGl0X2xvYWRfY291bnQoa3ZtLCBjaGFubmVsLCB2YWwpOworCQlrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzWzBdLm1vZGUgPSBzYXZlZF9tb2RlOworCX0gZWxzZSB7CisJCXBpdF9sb2FkX2NvdW50KGt2bSwgY2hhbm5lbCwgdmFsKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHBpdF9pb3BvcnRfd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCi0JCQkgICAgIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fcGl0ICpkZXZfdG9fcGl0KHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGt2bV9waXQgKnBpdCA9IChzdHJ1Y3Qga3ZtX3BpdCAqKXRoaXMtPnByaXZhdGU7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBrdm1fcGl0LCBkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fcGl0ICpzcGVha2VyX3RvX3BpdChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qga3ZtX3BpdCwgc3BlYWtlcl9kZXYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwaXRfaW5fcmFuZ2UoZ3BhX3QgYWRkcikKK3sKKwlyZXR1cm4gKChhZGRyID49IEtWTV9QSVRfQkFTRV9BRERSRVNTKSAmJgorCQkoYWRkciA8IEtWTV9QSVRfQkFTRV9BRERSRVNTICsgS1ZNX1BJVF9NRU1fTEVOR1RIKSk7Cit9CisKK3N0YXRpYyBpbnQgcGl0X2lvcG9ydF93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKKwkJCSAgICBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zdCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSBkZXZfdG9fcGl0KHRoaXMpOwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcGl0X3N0YXRlID0gJnBpdC0+cGl0X3N0YXRlOwogCXN0cnVjdCBrdm0gKmt2bSA9IHBpdC0+a3ZtOwogCWludCBjaGFubmVsLCBhY2Nlc3M7CiAJc3RydWN0IGt2bV9rcGl0X2NoYW5uZWxfc3RhdGUgKnM7CiAJdTMyIHZhbCA9ICoodTMyICopIGRhdGE7CisJaWYgKCFwaXRfaW5fcmFuZ2UoYWRkcikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXZhbCAgJj0gMHhmZjsKIAlhZGRyICY9IEtWTV9QSVRfQ0hBTk5FTF9NQVNLOwpAQCAtNDIxLDE2ICs0NTAsMTkgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJnBpdF9zdGF0ZS0+bG9jayk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBpdF9pb3BvcnRfcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKLQkJCSAgICBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBwaXRfaW9wb3J0X3JlYWQoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkgICBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSAoc3RydWN0IGt2bV9waXQgKil0aGlzLT5wcml2YXRlOworCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSBkZXZfdG9fcGl0KHRoaXMpOwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcGl0X3N0YXRlID0gJnBpdC0+cGl0X3N0YXRlOwogCXN0cnVjdCBrdm0gKmt2bSA9IHBpdC0+a3ZtOwogCWludCByZXQsIGNvdW50OwogCXN0cnVjdCBrdm1fa3BpdF9jaGFubmVsX3N0YXRlICpzOworCWlmICghcGl0X2luX3JhbmdlKGFkZHIpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlhZGRyICY9IEtWTV9QSVRfQ0hBTk5FTF9NQVNLOwogCXMgPSAmcGl0X3N0YXRlLT5jaGFubmVsc1thZGRyXTsKQEAgLTQ4NSwzNyArNTE3LDM2IEBACiAJbWVtY3B5KGRhdGEsIChjaGFyICopJnJldCwgbGVuKTsKIAogCW11dGV4X3VubG9jaygmcGl0X3N0YXRlLT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwaXRfaW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsCi0JCQlpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCitzdGF0aWMgaW50IHNwZWFrZXJfaW9wb3J0X3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAorCQkJCWdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuICgoYWRkciA+PSBLVk1fUElUX0JBU0VfQUREUkVTUykgJiYKLQkJKGFkZHIgPCBLVk1fUElUX0JBU0VfQUREUkVTUyArIEtWTV9QSVRfTUVNX0xFTkdUSCkpOwotfQotCi1zdGF0aWMgdm9pZCBzcGVha2VyX2lvcG9ydF93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKLQkJCQkgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gKHN0cnVjdCBrdm1fcGl0ICopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gc3BlYWtlcl90b19waXQodGhpcyk7CiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwaXRfc3RhdGUgPSAmcGl0LT5waXRfc3RhdGU7CiAJc3RydWN0IGt2bSAqa3ZtID0gcGl0LT5rdm07CiAJdTMyIHZhbCA9ICoodTMyICopIGRhdGE7CisJaWYgKGFkZHIgIT0gS1ZNX1NQRUFLRVJfQkFTRV9BRERSRVNTKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAltdXRleF9sb2NrKCZwaXRfc3RhdGUtPmxvY2spOwogCXBpdF9zdGF0ZS0+c3BlYWtlcl9kYXRhX29uID0gKHZhbCA+PiAxKSAmIDE7CiAJcGl0X3NldF9nYXRlKGt2bSwgMiwgdmFsICYgMSk7CiAJbXV0ZXhfdW5sb2NrKCZwaXRfc3RhdGUtPmxvY2spOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzcGVha2VyX2lvcG9ydF9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAotCQkJCWdwYV90IGFkZHIsIGludCBsZW4sIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNwZWFrZXJfaW9wb3J0X3JlYWQoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkgICAgICAgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gKHN0cnVjdCBrdm1fcGl0ICopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX3BpdCAqcGl0ID0gc3BlYWtlcl90b19waXQodGhpcyk7CiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwaXRfc3RhdGUgPSAmcGl0LT5waXRfc3RhdGU7CiAJc3RydWN0IGt2bSAqa3ZtID0gcGl0LT5rdm07CiAJdW5zaWduZWQgaW50IHJlZnJlc2hfY2xvY2s7CiAJaW50IHJldDsKKwlpZiAoYWRkciAhPSBLVk1fU1BFQUtFUl9CQVNFX0FERFJFU1MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCS8qIFJlZnJlc2ggY2xvY2sgdG9nZ2xlcyBhdCBhYm91dCAxNXVzLiBXZSBhcHByb3hpbWF0ZSBhcyAyXjE0bnMuICovCiAJcmVmcmVzaF9jbG9jayA9ICgodW5zaWduZWQgaW50KWt0aW1lX3RvX25zKGt0aW1lX2dldCgpKSA+PiAxNCkgJiAxOwpAQCAtNTI3LDEyICs1NTgsNyBAQAogCQlsZW4gPSBzaXplb2YocmV0KTsKIAltZW1jcHkoZGF0YSwgKGNoYXIgKikmcmV0LCBsZW4pOwogCW11dGV4X3VubG9jaygmcGl0X3N0YXRlLT5sb2NrKTsKLX0KLQotc3RhdGljIGludCBzcGVha2VyX2luX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLAotCQkJICAgIGludCBsZW4sIGludCBpc193cml0ZSkKLXsKLQlyZXR1cm4gKGFkZHIgPT0gS1ZNX1NQRUFLRVJfQkFTRV9BRERSRVNTKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBrdm1fcGl0X3Jlc2V0KHN0cnVjdCBrdm1fcGl0ICpwaXQpCkBAIC01NDEsNiArNTY3LDcgQEAKIAlzdHJ1Y3Qga3ZtX2twaXRfY2hhbm5lbF9zdGF0ZSAqYzsKIAogCW11dGV4X2xvY2soJnBpdC0+cGl0X3N0YXRlLmxvY2spOworCXBpdC0+cGl0X3N0YXRlLmZsYWdzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCWMgPSAmcGl0LT5waXRfc3RhdGUuY2hhbm5lbHNbaV07CiAJCWMtPm1vZGUgPSAweGZmOwpAQCAtNTYzLDEwICs1OTAsMjIgQEAKIAl9CiB9CiAKLXN0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0pCitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIHBpdF9kZXZfb3BzID0geworCS5yZWFkICAgICA9IHBpdF9pb3BvcnRfcmVhZCwKKwkud3JpdGUgICAgPSBwaXRfaW9wb3J0X3dyaXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBzcGVha2VyX2Rldl9vcHMgPSB7CisJLnJlYWQgICAgID0gc3BlYWtlcl9pb3BvcnRfcmVhZCwKKwkud3JpdGUgICAgPSBzcGVha2VyX2lvcG9ydF93cml0ZSwKK307CisKKy8qIENhbGxlciBtdXN0IGhhdmUgd3JpdGVycyBsb2NrIG9uIHNsb3RzX2xvY2sgKi8KK3N0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3Qga3ZtX3BpdCAqcGl0OwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcGl0X3N0YXRlOworCWludCByZXQ7CiAKIAlwaXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX3BpdCksIEdGUF9LRVJORUwpOwogCWlmICghcGl0KQpAQCAtNTgyLDE5ICs2MjEsNiBAQAogCW11dGV4X2xvY2soJnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZwaXQtPnBpdF9zdGF0ZS5pbmplY3RfbG9jayk7CiAKLQkvKiBJbml0aWFsaXplIFBJTyBkZXZpY2UgKi8KLQlwaXQtPmRldi5yZWFkID0gcGl0X2lvcG9ydF9yZWFkOwotCXBpdC0+ZGV2LndyaXRlID0gcGl0X2lvcG9ydF93cml0ZTsKLQlwaXQtPmRldi5pbl9yYW5nZSA9IHBpdF9pbl9yYW5nZTsKLQlwaXQtPmRldi5wcml2YXRlID0gcGl0OwotCWt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KCZrdm0tPnBpb19idXMsICZwaXQtPmRldik7Ci0KLQlwaXQtPnNwZWFrZXJfZGV2LnJlYWQgPSBzcGVha2VyX2lvcG9ydF9yZWFkOwotCXBpdC0+c3BlYWtlcl9kZXYud3JpdGUgPSBzcGVha2VyX2lvcG9ydF93cml0ZTsKLQlwaXQtPnNwZWFrZXJfZGV2LmluX3JhbmdlID0gc3BlYWtlcl9pbl9yYW5nZTsKLQlwaXQtPnNwZWFrZXJfZGV2LnByaXZhdGUgPSBwaXQ7Ci0Ja3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoJmt2bS0+cGlvX2J1cywgJnBpdC0+c3BlYWtlcl9kZXYpOwotCiAJa3ZtLT5hcmNoLnZwaXQgPSBwaXQ7CiAJcGl0LT5rdm0gPSBrdm07CiAKQEAgLTYxMyw3ICs2MzksMzAgQEAKIAlwaXQtPm1hc2tfbm90aWZpZXIuZnVuYyA9IHBpdF9tYXNrX25vdGlmZXI7CiAJa3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKGt2bSwgMCwgJnBpdC0+bWFza19ub3RpZmllcik7CiAKKwlrdm1faW9kZXZpY2VfaW5pdCgmcGl0LT5kZXYsICZwaXRfZGV2X29wcyk7CisJcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5waW9fYnVzLCAmcGl0LT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoZmxhZ3MgJiBLVk1fUElUX1NQRUFLRVJfRFVNTVkpIHsKKwkJa3ZtX2lvZGV2aWNlX2luaXQoJnBpdC0+c3BlYWtlcl9kZXYsICZzcGVha2VyX2Rldl9vcHMpOworCQlyZXQgPSBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KCZrdm0tPnBpb19idXMsCisJCQkJCQkmcGl0LT5zcGVha2VyX2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsX3VucmVnaXN0ZXI7CisJfQorCiAJcmV0dXJuIHBpdDsKKworZmFpbF91bnJlZ2lzdGVyOgorCV9fa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldigma3ZtLT5waW9fYnVzLCAmcGl0LT5kZXYpOworCitmYWlsOgorCWlmIChwaXQtPmlycV9zb3VyY2VfaWQgPj0gMCkKKwkJa3ZtX2ZyZWVfaXJxX3NvdXJjZV9pZChrdm0sIHBpdC0+aXJxX3NvdXJjZV9pZCk7CisKKwlrZnJlZShwaXQpOworCXJldHVybiBOVUxMOwogfQogCiB2b2lkIGt2bV9mcmVlX3BpdChzdHJ1Y3Qga3ZtICprdm0pCkBAIC02MjMsNiArNjcyLDggQEAKIAlpZiAoa3ZtLT5hcmNoLnZwaXQpIHsKIAkJa3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLAogCQkJCQkgICAgICAgJmt2bS0+YXJjaC52cGl0LT5tYXNrX25vdGlmaWVyKTsKKwkJa3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihrdm0sCisJCQkJJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuaXJxX2Fja19ub3RpZmllcik7CiAJCW11dGV4X2xvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CiAJCXRpbWVyID0gJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnRpbWVyOwogCQlocnRpbWVyX2NhbmNlbCh0aW1lcik7CkBAIC02MzcsMTAgKzY4OCwxMCBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlpbnQgaTsKIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJa3ZtX3NldF9pcnEoa3ZtLCBrdm0tPmFyY2gudnBpdC0+aXJxX3NvdXJjZV9pZCwgMCwgMSk7CiAJa3ZtX3NldF9pcnEoa3ZtLCBrdm0tPmFyY2gudnBpdC0+aXJxX3NvdXJjZV9pZCwgMCwgMCk7Ci0JbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiAKIAkvKgogCSAqIFByb3ZpZGVzIE5NSSB3YXRjaGRvZyBzdXBwb3J0IHZpYSBWaXJ0dWFsIFdpcmUgbW9kZS4KQEAgLTY1MiwxMSArNzAzLDggQEAKIAkgKiBWQ1BVMCwgYW5kIG9ubHkgaWYgaXRzIExWVDAgaXMgaW4gRVhUSU5UIG1vZGUuCiAJICovCiAJaWYgKGt2bS0+YXJjaC52YXBpY3NfaW5fbm1pX21vZGUgPiAwKQotCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCQl2Y3B1ID0ga3ZtLT52Y3B1c1tpXTsKLQkJCWlmICh2Y3B1KQotCQkJCWt2bV9hcGljX25taV93ZF9kZWxpdmVyKHZjcHUpOwotCQl9CisJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKKwkJCWt2bV9hcGljX25taV93ZF9kZWxpdmVyKHZjcHUpOwogfQogCiB2b2lkIGt2bV9pbmplY3RfcGl0X3RpbWVyX2lycXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNjY1LDcgKzcxMyw3IEBACiAJc3RydWN0IGt2bSAqa3ZtID0gdmNwdS0+a3ZtOwogCXN0cnVjdCBrdm1fa3BpdF9zdGF0ZSAqcHM7CiAKLQlpZiAodmNwdSAmJiBwaXQpIHsKKwlpZiAocGl0KSB7CiAJCWludCBpbmplY3QgPSAwOwogCQlwcyA9ICZwaXQtPnBpdF9zdGF0ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmggYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaAppbmRleCBiYmQ4NjNmLi5kNGMxYzdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaAorKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaApAQCAtMjEsNiArMjEsNyBAQAogCiBzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgewogCXN0cnVjdCBrdm1fa3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOworCXUzMiBmbGFnczsKIAlzdHJ1Y3Qga3ZtX3RpbWVyIHBpdF90aW1lcjsKIAlib29sIGlzX3BlcmlvZGljOwogCXUzMiAgICBzcGVha2VyX2RhdGFfb247CkBAIC00OSw4ICs1MCw4IEBACiAjZGVmaW5lIEtWTV9QSVRfQ0hBTk5FTF9NQVNLCSAgICAweDMKIAogdm9pZCBrdm1faW5qZWN0X3BpdF90aW1lcl9pcnFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci12b2lkIGt2bV9waXRfbG9hZF9jb3VudChzdHJ1Y3Qga3ZtICprdm0sIGludCBjaGFubmVsLCB1MzIgdmFsKTsKLXN0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0pOwordm9pZCBrdm1fcGl0X2xvYWRfY291bnQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY2hhbm5lbCwgdTMyIHZhbCwgaW50IGhwZXRfbGVnYWN5X3N0YXJ0KTsKK3N0cnVjdCBrdm1fcGl0ICprdm1fY3JlYXRlX3BpdChzdHJ1Y3Qga3ZtICprdm0sIHUzMiBmbGFncyk7CiB2b2lkIGt2bV9mcmVlX3BpdChzdHJ1Y3Qga3ZtICprdm0pOwogdm9pZCBrdm1fcGl0X3Jlc2V0KHN0cnVjdCBrdm1fcGl0ICpwaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCmluZGV4IDFjY2I1MGMuLjAxZjE1MTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1OS5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1OS5jCkBAIC0zMCw1MCArMzAsMjQgQEAKICNpbmNsdWRlICJpcnEuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+Ci0KLXN0YXRpYyB2b2lkIHBpY19sb2NrKHN0cnVjdCBrdm1fcGljICpzKQotCV9fYWNxdWlyZXMoJnMtPmxvY2spCi17Ci0Jc3Bpbl9sb2NrKCZzLT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcGljX3VubG9jayhzdHJ1Y3Qga3ZtX3BpYyAqcykKLQlfX3JlbGVhc2VzKCZzLT5sb2NrKQotewotCXN0cnVjdCBrdm0gKmt2bSA9IHMtPmt2bTsKLQl1bnNpZ25lZCBhY2tzID0gcy0+cGVuZGluZ19hY2tzOwotCWJvb2wgd2FrZXVwID0gcy0+d2FrZXVwX25lZWRlZDsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0KLQlzLT5wZW5kaW5nX2Fja3MgPSAwOwotCXMtPndha2V1cF9uZWVkZWQgPSBmYWxzZTsKLQotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKLQotCXdoaWxlIChhY2tzKSB7Ci0JCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgU0VMRUNUX1BJQyhfX2ZmcyhhY2tzKSksCi0JCQkJICAgICBfX2ZmcyhhY2tzKSk7Ci0JCWFja3MgJj0gYWNrcyAtIDE7Ci0JfQotCi0JaWYgKHdha2V1cCkgewotCQl2Y3B1ID0gcy0+a3ZtLT52Y3B1c1swXTsKLQkJaWYgKHZjcHUpCi0JCQlrdm1fdmNwdV9raWNrKHZjcHUpOwotCX0KLX0KKyNpbmNsdWRlICJ0cmFjZS5oIgogCiBzdGF0aWMgdm9pZCBwaWNfY2xlYXJfaXNyKHN0cnVjdCBrdm1fa3BpY19zdGF0ZSAqcywgaW50IGlycSkKIHsKIAlzLT5pc3IgJj0gfigxIDw8IGlycSk7CiAJcy0+aXNyX2FjayB8PSAoMSA8PCBpcnEpOworCWlmIChzICE9ICZzLT5waWNzX3N0YXRlLT5waWNzWzBdKQorCQlpcnEgKz0gODsKKwlrdm1fbm90aWZ5X2Fja2VkX2lycShzLT5waWNzX3N0YXRlLT5rdm0sIFNFTEVDVF9QSUMoaXJxKSwgaXJxKTsKIH0KIAogdm9pZCBrdm1fcGljX2NsZWFyX2lzcl9hY2soc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKKwlzcGluX2xvY2soJnMtPmxvY2spOwogCXMtPnBpY3NbMF0uaXNyX2FjayA9IDB4ZmY7CiAJcy0+cGljc1sxXS5pc3JfYWNrID0gMHhmZjsKKwlzcGluX3VubG9jaygmcy0+bG9jayk7CiB9CiAKIC8qCkBAIC0xNzQsOSArMTQ4LDkgQEAKIAogdm9pZCBrdm1fcGljX3VwZGF0ZV9pcnEoc3RydWN0IGt2bV9waWMgKnMpCiB7Ci0JcGljX2xvY2socyk7CisJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIAlwaWNfdXBkYXRlX2lycShzKTsKLQlwaWNfdW5sb2NrKHMpOworCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIH0KIAogaW50IGt2bV9waWNfc2V0X2lycSh2b2lkICpvcGFxdWUsIGludCBpcnEsIGludCBsZXZlbCkKQEAgLTE4NCwxMiArMTU4LDE0IEBACiAJc3RydWN0IGt2bV9waWMgKnMgPSBvcGFxdWU7CiAJaW50IHJldCA9IC0xOwogCi0JcGljX2xvY2socyk7CisJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIAlpZiAoaXJxID49IDAgJiYgaXJxIDwgUElDX05VTV9QSU5TKSB7CiAJCXJldCA9IHBpY19zZXRfaXJxMSgmcy0+cGljc1tpcnEgPj4gM10sIGlycSAmIDcsIGxldmVsKTsKIAkJcGljX3VwZGF0ZV9pcnEocyk7CisJCXRyYWNlX2t2bV9waWNfc2V0X2lycShpcnEgPj4gMywgaXJxICYgNywgcy0+cGljc1tpcnEgPj4gM10uZWxjciwKKwkJCQkgICAgICBzLT5waWNzW2lycSA+PiAzXS5pbXIsIHJldCA9PSAwKTsKIAl9Ci0JcGljX3VubG9jayhzKTsKKwlzcGluX3VubG9jaygmcy0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjE3LDcgKzE5Myw3IEBACiAJaW50IGlycSwgaXJxMiwgaW50bm87CiAJc3RydWN0IGt2bV9waWMgKnMgPSBwaWNfaXJxY2hpcChrdm0pOwogCi0JcGljX2xvY2socyk7CisJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIAlpcnEgPSBwaWNfZ2V0X2lycSgmcy0+cGljc1swXSk7CiAJaWYgKGlycSA+PSAwKSB7CiAJCXBpY19pbnRhY2soJnMtPnBpY3NbMF0sIGlycSk7CkBAIC0yNDIsOCArMjE4LDcgQEAKIAkJaW50bm8gPSBzLT5waWNzWzBdLmlycV9iYXNlICsgaXJxOwogCX0KIAlwaWNfdXBkYXRlX2lycShzKTsKLQlwaWNfdW5sb2NrKHMpOwotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgU0VMRUNUX1BJQyhpcnEpLCBpcnEpOworCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIAogCXJldHVybiBpbnRubzsKIH0KQEAgLTI1Miw3ICsyMjcsNyBAQAogewogCWludCBpcnEsIGlycWJhc2UsIG47CiAJc3RydWN0IGt2bSAqa3ZtID0gcy0+cGljc19zdGF0ZS0+aXJxX3JlcXVlc3Rfb3BhcXVlOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTAgPSBrdm0tPnZjcHVzWzBdOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTAgPSBrdm0tPmJzcF92Y3B1OwogCiAJaWYgKHMgPT0gJnMtPnBpY3Nfc3RhdGUtPnBpY3NbMF0pCiAJCWlycWJhc2UgPSAwOwpAQCAtMjYzLDcgKzIzOCw3IEBACiAJCWlmICh2Y3B1MCAmJiBrdm1fYXBpY19hY2NlcHRfcGljX2ludHIodmNwdTApKQogCQkJaWYgKHMtPmlyciAmICgxIDw8IGlycSkgfHwgcy0+aXNyICYgKDEgPDwgaXJxKSkgewogCQkJCW4gPSBpcnEgKyBpcnFiYXNlOwotCQkJCXMtPnBpY3Nfc3RhdGUtPnBlbmRpbmdfYWNrcyB8PSAxIDw8IG47CisJCQkJa3ZtX25vdGlmeV9hY2tlZF9pcnEoa3ZtLCBTRUxFQ1RfUElDKG4pLCBuKTsKIAkJCX0KIAl9CiAJcy0+bGFzdF9pcnIgPSAwOwpAQCAtNDI4LDggKzQwMyw3IEBACiAJcmV0dXJuIHMtPmVsY3I7CiB9CiAKLXN0YXRpYyBpbnQgcGljZGV2X2luX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLAotCQkJICAgaW50IGxlbiwgaW50IGlzX3dyaXRlKQorc3RhdGljIGludCBwaWNkZXZfaW5fcmFuZ2UoZ3BhX3QgYWRkcikKIHsKIAlzd2l0Y2ggKGFkZHIpIHsKIAljYXNlIDB4MjA6CkBAIC00NDQsMTggKzQxOCwyNSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcGljZGV2X3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX3BpYyAqdG9fcGljKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBrdm1fcGljLCBkZXYpOworfQorCitzdGF0aWMgaW50IHBpY2Rldl93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKIAkJCSBncGFfdCBhZGRyLCBpbnQgbGVuLCBjb25zdCB2b2lkICp2YWwpCiB7Ci0Jc3RydWN0IGt2bV9waWMgKnMgPSB0aGlzLT5wcml2YXRlOworCXN0cnVjdCBrdm1fcGljICpzID0gdG9fcGljKHRoaXMpOwogCXVuc2lnbmVkIGNoYXIgZGF0YSA9ICoodW5zaWduZWQgY2hhciAqKXZhbDsKKwlpZiAoIXBpY2Rldl9pbl9yYW5nZShhZGRyKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGxlbiAhPSAxKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIlBJQzogbm9uIGJ5dGUgd3JpdGVcbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KLQlwaWNfbG9jayhzKTsKKwlzcGluX2xvY2soJnMtPmxvY2spOwogCXN3aXRjaCAoYWRkcikgewogCWNhc2UgMHgyMDoKIAljYXNlIDB4MjE6CkBAIC00NjgsMjEgKzQ0OSwyNCBAQAogCQllbGNyX2lvcG9ydF93cml0ZSgmcy0+cGljc1thZGRyICYgMV0sIGFkZHIsIGRhdGEpOwogCQlicmVhazsKIAl9Ci0JcGljX3VubG9jayhzKTsKKwlzcGluX3VubG9jaygmcy0+bG9jayk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBpY2Rldl9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAotCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZCAqdmFsKQorc3RhdGljIGludCBwaWNkZXZfcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKKwkJICAgICAgIGdwYV90IGFkZHIsIGludCBsZW4sIHZvaWQgKnZhbCkKIHsKLQlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHRoaXMtPnByaXZhdGU7CisJc3RydWN0IGt2bV9waWMgKnMgPSB0b19waWModGhpcyk7CiAJdW5zaWduZWQgY2hhciBkYXRhID0gMDsKKwlpZiAoIXBpY2Rldl9pbl9yYW5nZShhZGRyKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGxlbiAhPSAxKSB7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIlBJQzogbm9uIGJ5dGUgcmVhZFxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAJfQotCXBpY19sb2NrKHMpOworCXNwaW5fbG9jaygmcy0+bG9jayk7CiAJc3dpdGNoIChhZGRyKSB7CiAJY2FzZSAweDIwOgogCWNhc2UgMHgyMToKQEAgLTQ5Niw3ICs0ODAsOCBAQAogCQlicmVhazsKIAl9CiAJKih1bnNpZ25lZCBjaGFyICopdmFsID0gZGF0YTsKLQlwaWNfdW5sb2NrKHMpOworCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTUwNSwyMCArNDkwLDI3IEBACiBzdGF0aWMgdm9pZCBwaWNfaXJxX3JlcXVlc3Qodm9pZCAqb3BhcXVlLCBpbnQgbGV2ZWwpCiB7CiAJc3RydWN0IGt2bSAqa3ZtID0gb3BhcXVlOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bS0+dmNwdXNbMF07CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtLT5ic3BfdmNwdTsKIAlzdHJ1Y3Qga3ZtX3BpYyAqcyA9IHBpY19pcnFjaGlwKGt2bSk7CiAJaW50IGlycSA9IHBpY19nZXRfaXJxKCZzLT5waWNzWzBdKTsKIAogCXMtPm91dHB1dCA9IGxldmVsOwogCWlmICh2Y3B1ICYmIGxldmVsICYmIChzLT5waWNzWzBdLmlzcl9hY2sgJiAoMSA8PCBpcnEpKSkgewogCQlzLT5waWNzWzBdLmlzcl9hY2sgJj0gfigxIDw8IGlycSk7Ci0JCXMtPndha2V1cF9uZWVkZWQgPSB0cnVlOworCQlrdm1fdmNwdV9raWNrKHZjcHUpOwogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBwaWNkZXZfb3BzID0geworCS5yZWFkICAgICA9IHBpY2Rldl9yZWFkLAorCS53cml0ZSAgICA9IHBpY2Rldl93cml0ZSwKK307CisKIHN0cnVjdCBrdm1fcGljICprdm1fY3JlYXRlX3BpYyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9waWMgKnM7CisJaW50IHJldDsKKwogCXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX3BpYyksIEdGUF9LRVJORUwpOwogCWlmICghcykKIAkJcmV0dXJuIE5VTEw7CkBAIC01MzQsMTAgKzUyNiwxMiBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBQSU8gZGV2aWNlCiAJICovCi0Jcy0+ZGV2LnJlYWQgPSBwaWNkZXZfcmVhZDsKLQlzLT5kZXYud3JpdGUgPSBwaWNkZXZfd3JpdGU7Ci0Jcy0+ZGV2LmluX3JhbmdlID0gcGljZGV2X2luX3JhbmdlOwotCXMtPmRldi5wcml2YXRlID0gczsKLQlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5waW9fYnVzLCAmcy0+ZGV2KTsKKwlrdm1faW9kZXZpY2VfaW5pdCgmcy0+ZGV2LCAmcGljZGV2X29wcyk7CisJcmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCAma3ZtLT5waW9fYnVzLCAmcy0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZShzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJcmV0dXJuIHM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaXJxLmggYi9hcmNoL3g4Ni9rdm0vaXJxLmgKaW5kZXggOWY1OTMxOC4uN2Q2MDU4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2lycS5oCisrKyBiL2FyY2gveDg2L2t2bS9pcnEuaApAQCAtNjMsNyArNjMsNiBAQAogCiBzdHJ1Y3Qga3ZtX3BpYyB7CiAJc3BpbmxvY2tfdCBsb2NrOwotCWJvb2wgd2FrZXVwX25lZWRlZDsKIAl1bnNpZ25lZCBwZW5kaW5nX2Fja3M7CiAJc3RydWN0IGt2bSAqa3ZtOwogCXN0cnVjdCBrdm1fa3BpY19zdGF0ZSBwaWNzWzJdOyAvKiAwIGlzIG1hc3RlciBwaWMsIDEgaXMgc2xhdmUgcGljICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCmluZGV4IDFmZjgxOWQuLjdiY2M1YjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCisrKyBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCkBAIC0yOSw0ICsyOSwxMyBAQAogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUklQLCB2YWwpOwogfQogCitzdGF0aWMgaW5saW5lIHU2NCBrdm1fcGRwdHJfcmVhZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpbmRleCkKK3sKKwlpZiAoIXRlc3RfYml0KFZDUFVfRVhSRUdfUERQVFIsCisJCSAgICAgICh1bnNpZ25lZCBsb25nICopJnZjcHUtPmFyY2gucmVnc19hdmFpbCkpCisJCWt2bV94ODZfb3BzLT5jYWNoZV9yZWcodmNwdSwgVkNQVV9FWFJFR19QRFBUUik7CisKKwlyZXR1cm4gdmNwdS0+YXJjaC5wZHB0cnNbaW5kZXhdOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmggYi9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDY2ZTRjLi4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jaWZuZGVmIF9fS1ZNX1NWTV9ICi0jZGVmaW5lIF9fS1ZNX1NWTV9ICi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLQotI2luY2x1ZGUgPGFzbS9zdm0uaD4KLQotc3RhdGljIGNvbnN0IHUzMiBob3N0X3NhdmVfdXNlcl9tc3JzW10gPSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCU1TUl9TVEFSLCBNU1JfTFNUQVIsIE1TUl9DU1RBUiwgTVNSX1NZU0NBTExfTUFTSywgTVNSX0tFUk5FTF9HU19CQVNFLAotCU1TUl9GU19CQVNFLAotI2VuZGlmCi0JTVNSX0lBMzJfU1lTRU5URVJfQ1MsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLAotfTsKLQotI2RlZmluZSBOUl9IT1NUX1NBVkVfVVNFUl9NU1JTIEFSUkFZX1NJWkUoaG9zdF9zYXZlX3VzZXJfbXNycykKLQotc3RydWN0IGt2bV92Y3B1OwotCi1zdHJ1Y3QgdmNwdV9zdm0gewotCXN0cnVjdCBrdm1fdmNwdSB2Y3B1OwotCXN0cnVjdCB2bWNiICp2bWNiOwotCXVuc2lnbmVkIGxvbmcgdm1jYl9wYTsKLQlzdHJ1Y3Qgc3ZtX2NwdV9kYXRhICpzdm1fZGF0YTsKLQl1aW50NjRfdCBhc2lkX2dlbmVyYXRpb247Ci0KLQl1NjQgbmV4dF9yaXA7Ci0KLQl1NjQgaG9zdF91c2VyX21zcnNbTlJfSE9TVF9TQVZFX1VTRVJfTVNSU107Ci0JdTY0IGhvc3RfZ3NfYmFzZTsKLQl1bnNpZ25lZCBsb25nIGhvc3RfY3IyOwotCi0JdTMyICptc3JwbTsKLQlzdHJ1Y3Qgdm1jYiAqaHNhdmU7Ci0JdTY0IGhzYXZlX21zcjsKLQotCXU2NCBuZXN0ZWRfdm1jYjsKLQotCS8qIFRoZXNlIGFyZSB0aGUgbWVyZ2VkIHZlY3RvcnMgKi8KLQl1MzIgKm5lc3RlZF9tc3JwbTsKLQotCS8qIGdwYSBwb2ludGVycyB0byB0aGUgcmVhbCB2ZWN0b3JzICovCi0JdTY0IG5lc3RlZF92bWNiX21zcnBtOwotfTsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fdGltZXIuaCBiL2FyY2gveDg2L2t2bS9rdm1fdGltZXIuaAppbmRleCAyNmJkNmJhLi41NWM3NTI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0va3ZtX3RpbWVyLmgKKysrIGIvYXJjaC94ODYva3ZtL2t2bV90aW1lci5oCkBAIC02LDcgKzYsNyBAQAogCWJvb2wgcmVpbmplY3Q7CiAJc3RydWN0IGt2bV90aW1lcl9vcHMgKnRfb3BzOwogCXN0cnVjdCBrdm0gKmt2bTsKLQlpbnQgdmNwdV9pZDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiB9OwogCiBzdHJ1Y3Qga3ZtX3RpbWVyX29wcyB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbGFwaWMuYyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCmluZGV4IGFlOTlkODMuLjFhZTVjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9sYXBpYy5jCisrKyBiL2FyY2gveDg2L2t2bS9sYXBpYy5jCkBAIC0zMiw4ICszMiwxMSBAQAogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogI2luY2x1ZGUgImlycS5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAieDg2LmgiCiAKICNpZm5kZWYgQ09ORklHX1g4Nl82NAogI2RlZmluZSBtb2RfNjQoeCwgeSkgKCh4KSAtICh5KSAqIGRpdjY0X3U2NCh4LCB5KSkKQEAgLTE0MSw2ICsxNDQsMjYgQEAKIAlyZXR1cm4gKGx2dF92YWwgJiAoQVBJQ19NT0RFX01BU0sgfCBBUElDX0xWVF9NQVNLRUQpKSA9PSBBUElDX0RNX05NSTsKIH0KIAordm9pZCBrdm1fYXBpY19zZXRfdmVyc2lvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHZjcHUtPmFyY2guYXBpYzsKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZmVhdDsKKwl1MzIgdiA9IEFQSUNfVkVSU0lPTjsKKworCWlmICghaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKKwkJcmV0dXJuOworCisJZmVhdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KGFwaWMtPnZjcHUsIDB4MSwgMCk7CisJaWYgKGZlYXQgJiYgKGZlYXQtPmVjeCAmICgxIDw8IChYODZfRkVBVFVSRV9YMkFQSUMgJiAzMSkpKSkKKwkJdiB8PSBBUElDX0xWUl9ESVJFQ1RFRF9FT0k7CisJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfTFZSLCB2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXBpY194MmFwaWNfbW9kZShzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQoreworCXJldHVybiBhcGljLT52Y3B1LT5hcmNoLmFwaWNfYmFzZSAmIFgyQVBJQ19FTkFCTEU7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXBpY19sdnRfbWFza1tBUElDX0xWVF9OVU1dID0gewogCUxWVF9NQVNLIHwgQVBJQ19MVlRfVElNRVJfUEVSSU9ESUMsCS8qIExWVFQgKi8KIAlMVlRfTUFTSyB8IEFQSUNfTU9ERV9NQVNLLAkvKiBMVlRUSE1SICovCkBAIC0xNjUsMzYgKzE4OCw1MiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhcGljX3Rlc3RfYW5kX3NldF9pcnIoaW50IHZlYywgc3RydWN0IGt2bV9sYXBpYyAqYXBpYykKIHsKKwlhcGljLT5pcnJfcGVuZGluZyA9IHRydWU7CiAJcmV0dXJuIGFwaWNfdGVzdF9hbmRfc2V0X3ZlY3Rvcih2ZWMsIGFwaWMtPnJlZ3MgKyBBUElDX0lSUik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2NsZWFyX2lycihpbnQgdmVjLCBzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQorc3RhdGljIGlubGluZSBpbnQgYXBpY19zZWFyY2hfaXJyKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCiB7Ci0JYXBpY19jbGVhcl92ZWN0b3IodmVjLCBhcGljLT5yZWdzICsgQVBJQ19JUlIpOworCXJldHVybiBmaW5kX2hpZ2hlc3RfdmVjdG9yKGFwaWMtPnJlZ3MgKyBBUElDX0lSUik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFwaWNfZmluZF9oaWdoZXN0X2lycihzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQogewogCWludCByZXN1bHQ7CiAKLQlyZXN1bHQgPSBmaW5kX2hpZ2hlc3RfdmVjdG9yKGFwaWMtPnJlZ3MgKyBBUElDX0lSUik7CisJaWYgKCFhcGljLT5pcnJfcGVuZGluZykKKwkJcmV0dXJuIC0xOworCisJcmVzdWx0ID0gYXBpY19zZWFyY2hfaXJyKGFwaWMpOwogCUFTU0VSVChyZXN1bHQgPT0gLTEgfHwgcmVzdWx0ID49IDE2KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGljX2NsZWFyX2lycihpbnQgdmVjLCBzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQoreworCWFwaWMtPmlycl9wZW5kaW5nID0gZmFsc2U7CisJYXBpY19jbGVhcl92ZWN0b3IodmVjLCBhcGljLT5yZWdzICsgQVBJQ19JUlIpOworCWlmIChhcGljX3NlYXJjaF9pcnIoYXBpYykgIT0gLTEpCisJCWFwaWMtPmlycl9wZW5kaW5nID0gdHJ1ZTsKK30KKwogaW50IGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdmNwdS0+YXJjaC5hcGljOwogCWludCBoaWdoZXN0X2lycjsKIAorCS8qIFRoaXMgbWF5IHJhY2Ugd2l0aCBzZXR0aW5nIG9mIGlyciBpbiBfX2FwaWNfYWNjZXB0X2lycSgpIGFuZAorCSAqIHZhbHVlIHJldHVybmVkIG1heSBiZSB3cm9uZywgYnV0IGt2bV92Y3B1X2tpY2soKSBpbiBfX2FwaWNfYWNjZXB0X2lycQorCSAqIHdpbGwgY2F1c2Ugdm1leGl0IGltbWVkaWF0ZWx5IGFuZCB0aGUgdmFsdWUgd2lsbCBiZSByZWNhbGN1bGF0ZWQKKwkgKiBvbiB0aGUgbmV4dCB2bWVudHJ5LgorCSAqLwogCWlmICghYXBpYykKIAkJcmV0dXJuIDA7CiAJaGlnaGVzdF9pcnIgPSBhcGljX2ZpbmRfaGlnaGVzdF9pcnIoYXBpYyk7CiAKIAlyZXR1cm4gaGlnaGVzdF9pcnI7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbGFwaWNfZmluZF9oaWdoZXN0X2lycik7CiAKIHN0YXRpYyBpbnQgX19hcGljX2FjY2VwdF9pcnEoc3RydWN0IGt2bV9sYXBpYyAqYXBpYywgaW50IGRlbGl2ZXJ5X21vZGUsCiAJCQkgICAgIGludCB2ZWN0b3IsIGludCBsZXZlbCwgaW50IHRyaWdfbW9kZSk7CkBAIC0yNTEsNyArMjkwLDEyIEBACiBpbnQga3ZtX2FwaWNfbWF0Y2hfbG9naWNhbF9hZGRyKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHU4IG1kYSkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQl1OCBsb2dpY2FsX2lkOworCXUzMiBsb2dpY2FsX2lkOworCisJaWYgKGFwaWNfeDJhcGljX21vZGUoYXBpYykpIHsKKwkJbG9naWNhbF9pZCA9IGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX0xEUik7CisJCXJldHVybiBsb2dpY2FsX2lkICYgbWRhOworCX0KIAogCWxvZ2ljYWxfaWQgPSBHRVRfQVBJQ19MT0dJQ0FMX0lEKGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX0xEUikpOwogCkBAIC0zMzEsNiArMzc1LDggQEAKIAkJCWJyZWFrOwogCiAJCXJlc3VsdCA9ICFhcGljX3Rlc3RfYW5kX3NldF9pcnIodmVjdG9yLCBhcGljKTsKKwkJdHJhY2Vfa3ZtX2FwaWNfYWNjZXB0X2lycSh2Y3B1LT52Y3B1X2lkLCBkZWxpdmVyeV9tb2RlLAorCQkJCQkgIHRyaWdfbW9kZSwgdmVjdG9yLCAhcmVzdWx0KTsKIAkJaWYgKCFyZXN1bHQpIHsKIAkJCWlmICh0cmlnX21vZGUpCiAJCQkJYXBpY19kZWJ1ZygibGV2ZWwgdHJpZyBtb2RlIHJlcGVhdGVkbHkgZm9yICIKQEAgLTQyNSw3ICs0NzEsMTEgQEAKIAkJdHJpZ2dlcl9tb2RlID0gSU9BUElDX0xFVkVMX1RSSUc7CiAJZWxzZQogCQl0cmlnZ2VyX21vZGUgPSBJT0FQSUNfRURHRV9UUklHOwotCWt2bV9pb2FwaWNfdXBkYXRlX2VvaShhcGljLT52Y3B1LT5rdm0sIHZlY3RvciwgdHJpZ2dlcl9tb2RlKTsKKwlpZiAoIShhcGljX2dldF9yZWcoYXBpYywgQVBJQ19TUElWKSAmIEFQSUNfU1BJVl9ESVJFQ1RFRF9FT0kpKSB7CisJCW11dGV4X2xvY2soJmFwaWMtPnZjcHUtPmt2bS0+aXJxX2xvY2spOworCQlrdm1faW9hcGljX3VwZGF0ZV9lb2koYXBpYy0+dmNwdS0+a3ZtLCB2ZWN0b3IsIHRyaWdnZXJfbW9kZSk7CisJCW11dGV4X3VubG9jaygmYXBpYy0+dmNwdS0+a3ZtLT5pcnFfbG9jayk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhcGljX3NlbmRfaXBpKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMpCkBAIC00NDAsNyArNDkwLDEyIEBACiAJaXJxLmxldmVsID0gaWNyX2xvdyAmIEFQSUNfSU5UX0FTU0VSVDsKIAlpcnEudHJpZ19tb2RlID0gaWNyX2xvdyAmIEFQSUNfSU5UX0xFVkVMVFJJRzsKIAlpcnEuc2hvcnRoYW5kID0gaWNyX2xvdyAmIEFQSUNfU0hPUlRfTUFTSzsKLQlpcnEuZGVzdF9pZCA9IEdFVF9BUElDX0RFU1RfRklFTEQoaWNyX2hpZ2gpOworCWlmIChhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQlpcnEuZGVzdF9pZCA9IGljcl9oaWdoOworCWVsc2UKKwkJaXJxLmRlc3RfaWQgPSBHRVRfQVBJQ19ERVNUX0ZJRUxEKGljcl9oaWdoKTsKKworCXRyYWNlX2t2bV9hcGljX2lwaShpY3JfbG93LCBpcnEuZGVzdF9pZCk7CiAKIAlhcGljX2RlYnVnKCJpY3JfaGlnaCAweCV4LCBpY3JfbG93IDB4JXgsICIKIAkJICAgInNob3J0X2hhbmQgMHgleCwgZGVzdCAweCV4LCB0cmlnX21vZGUgMHgleCwgbGV2ZWwgMHgleCwgIgpAQCAtNDQ5LDcgKzUwNCw5IEBACiAJCSAgIGlycS50cmlnX21vZGUsIGlycS5sZXZlbCwgaXJxLmRlc3RfbW9kZSwgaXJxLmRlbGl2ZXJ5X21vZGUsCiAJCSAgIGlycS52ZWN0b3IpOwogCisJbXV0ZXhfbG9jaygmYXBpYy0+dmNwdS0+a3ZtLT5pcnFfbG9jayk7CiAJa3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGFwaWMtPnZjcHUtPmt2bSwgYXBpYywgJmlycSk7CisJbXV0ZXhfdW5sb2NrKCZhcGljLT52Y3B1LT5rdm0tPmlycV9sb2NrKTsKIH0KIAogc3RhdGljIHUzMiBhcGljX2dldF90bWNjdChzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQpAQCAtNDk1LDEyICs1NTIsMTYgQEAKIHsKIAl1MzIgdmFsID0gMDsKIAotCUtWTVRSQUNFXzFEKEFQSUNfQUNDRVNTLCBhcGljLT52Y3B1LCAodTMyKW9mZnNldCwgaGFuZGxlcik7Ci0KIAlpZiAob2Zmc2V0ID49IExBUElDX01NSU9fTEVOR1RIKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAob2Zmc2V0KSB7CisJY2FzZSBBUElDX0lEOgorCQlpZiAoYXBpY194MmFwaWNfbW9kZShhcGljKSkKKwkJCXZhbCA9IGt2bV9hcGljX2lkKGFwaWMpOworCQllbHNlCisJCQl2YWwgPSBrdm1fYXBpY19pZChhcGljKSA8PCAyNDsKKwkJYnJlYWs7CiAJY2FzZSBBUElDX0FSQlBSSToKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQWNjZXNzIEFQSUMgQVJCUFJJIHJlZ2lzdGVyICIKIAkJICAgICAgICJ3aGljaCBpcyBmb3IgUDZcbiIpOwpAQCAtNTIyLDIxICs1ODMsMzUgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgdm9pZCBhcGljX21taW9fcmVhZChzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKLQkJCSAgIGdwYV90IGFkZHJlc3MsIGludCBsZW4sIHZvaWQgKmRhdGEpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fbGFwaWMgKnRvX2xhcGljKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IChzdHJ1Y3Qga3ZtX2xhcGljICopdGhpcy0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYWRkcmVzcyAtIGFwaWMtPmJhc2VfYWRkcmVzczsKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGt2bV9sYXBpYywgZGV2KTsKK30KKworc3RhdGljIGludCBhcGljX3JlZ19yZWFkKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHUzMiBvZmZzZXQsIGludCBsZW4sCisJCXZvaWQgKmRhdGEpCit7CiAJdW5zaWduZWQgY2hhciBhbGlnbm1lbnQgPSBvZmZzZXQgJiAweGY7CiAJdTMyIHJlc3VsdDsKKwkvKiB0aGlzIGJpdG1hc2sgaGFzIGEgYml0IGNsZWFyZWQgZm9yIGVhY2ggcmVzZXJ2ZXIgcmVnaXN0ZXIgKi8KKwlzdGF0aWMgY29uc3QgdTY0IHJtYXNrID0gMHg0M2ZmMDFmZmZmZmZlNzBjVUxMOwogCiAJaWYgKChhbGlnbm1lbnQgKyBsZW4pID4gNCkgewotCQlwcmludGsoS0VSTl9FUlIgIktWTV9BUElDX1JFQUQ6IGFsaWdubWVudCBlcnJvciAlbHggJWQiLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywgbGVuKTsKLQkJcmV0dXJuOworCQlhcGljX2RlYnVnKCJLVk1fQVBJQ19SRUFEOiBhbGlnbm1lbnQgZXJyb3IgJXggJWRcbiIsCisJCQkgICBvZmZzZXQsIGxlbik7CisJCXJldHVybiAxOwogCX0KKworCWlmIChvZmZzZXQgPiAweDNmMCB8fCAhKHJtYXNrICYgKDFVTEwgPDwgKG9mZnNldCA+PiA0KSkpKSB7CisJCWFwaWNfZGVidWcoIktWTV9BUElDX1JFQUQ6IHJlYWQgcmVzZXJ2ZWQgcmVnaXN0ZXIgJXhcbiIsCisJCQkgICBvZmZzZXQpOworCQlyZXR1cm4gMTsKKwl9CisKIAlyZXN1bHQgPSBfX2FwaWNfcmVhZChhcGljLCBvZmZzZXQgJiB+MHhmKTsKIAorCXRyYWNlX2t2bV9hcGljX3JlYWQob2Zmc2V0LCByZXN1bHQpOworCiAJc3dpdGNoIChsZW4pIHsKIAljYXNlIDE6CiAJY2FzZSAyOgpAQCAtNTQ4LDYgKzYyMywyOCBAQAogCQkgICAgICAgInNob3VsZCBiZSAxLDIsIG9yIDQgaW5zdGVhZFxuIiwgbGVuKTsKIAkJYnJlYWs7CiAJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFwaWNfbW1pb19pbl9yYW5nZShzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCBncGFfdCBhZGRyKQoreworCXJldHVybiBhcGljX2h3X2VuYWJsZWQoYXBpYykgJiYKKwkgICAgYWRkciA+PSBhcGljLT5iYXNlX2FkZHJlc3MgJiYKKwkgICAgYWRkciA8IGFwaWMtPmJhc2VfYWRkcmVzcyArIExBUElDX01NSU9fTEVOR1RIOworfQorCitzdGF0aWMgaW50IGFwaWNfbW1pb19yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAorCQkJICAgZ3BhX3QgYWRkcmVzcywgaW50IGxlbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdG9fbGFwaWModGhpcyk7CisJdTMyIG9mZnNldCA9IGFkZHJlc3MgLSBhcGljLT5iYXNlX2FkZHJlc3M7CisKKwlpZiAoIWFwaWNfbW1pb19pbl9yYW5nZShhcGljLCBhZGRyZXNzKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJYXBpY19yZWdfcmVhZChhcGljLCBvZmZzZXQsIGxlbiwgZGF0YSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX2RpdmlkZV9jb3VudChzdHJ1Y3Qga3ZtX2xhcGljICphcGljKQpAQCAtNTczLDYgKzY3MCwxNSBAQAogCiAJaWYgKCFhcGljLT5sYXBpY190aW1lci5wZXJpb2QpCiAJCXJldHVybjsKKwkvKgorCSAqIERvIG5vdCBhbGxvdyB0aGUgZ3Vlc3QgdG8gcHJvZ3JhbSBwZXJpb2RpYyB0aW1lcnMgd2l0aCBzbWFsbAorCSAqIGludGVydmFsLCBzaW5jZSB0aGUgaHJ0aW1lcnMgYXJlIG5vdCB0aHJvdHRsZWQgYnkgdGhlIGhvc3QKKwkgKiBzY2hlZHVsZXIuCisJICovCisJaWYgKGFwaWNfbHZ0dF9wZXJpb2QoYXBpYykpIHsKKwkJaWYgKGFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA8IE5TRUNfUEVSX01TRUMvMikKKwkJCWFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA9IE5TRUNfUEVSX01TRUMvMjsKKwl9CiAKIAlocnRpbWVyX3N0YXJ0KCZhcGljLT5sYXBpY190aW1lci50aW1lciwKIAkJICAgICAga3RpbWVfYWRkX25zKG5vdywgYXBpYy0+bGFwaWNfdGltZXIucGVyaW9kKSwKQEAgLTYwMyw0MCArNzA5LDE4IEBACiAJCWFwaWMtPnZjcHUtPmt2bS0+YXJjaC52YXBpY3NfaW5fbm1pX21vZGUtLTsKIH0KIAotc3RhdGljIHZvaWQgYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAotCQkJICAgIGdwYV90IGFkZHJlc3MsIGludCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGFwaWNfcmVnX3dyaXRlKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHUzMiByZWcsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IChzdHJ1Y3Qga3ZtX2xhcGljICopdGhpcy0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gYWRkcmVzcyAtIGFwaWMtPmJhc2VfYWRkcmVzczsKLQl1bnNpZ25lZCBjaGFyIGFsaWdubWVudCA9IG9mZnNldCAmIDB4ZjsKLQl1MzIgdmFsOworCWludCByZXQgPSAwOwogCi0JLyoKLQkgKiBBUElDIHJlZ2lzdGVyIG11c3QgYmUgYWxpZ25lZCBvbiAxMjgtYml0cyBib3VuZGFyeS4KLQkgKiAzMi82NC8xMjggYml0cyByZWdpc3RlcnMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJ1IDMyIGJpdHMuCi0JICogUmVmZXIgU0RNIDguNC4xCi0JICovCi0JaWYgKGxlbiAhPSA0IHx8IGFsaWdubWVudCkgewotCQkvKiBEb24ndCBzaG91dCBsb3VkLCAkaW5mYW1vdXNfb3Mgd291bGQgY2F1c2Ugb25seSBub2lzZS4gKi8KLQkJYXBpY19kZWJ1ZygiYXBpYyB3cml0ZTogYmFkIHNpemU9JWQgJWx4XG4iLAotCQkJICAgbGVuLCAobG9uZylhZGRyZXNzKTsKLQkJcmV0dXJuOwotCX0KKwl0cmFjZV9rdm1fYXBpY193cml0ZShyZWcsIHZhbCk7CiAKLQl2YWwgPSAqKHUzMiAqKSBkYXRhOwotCi0JLyogdG9vIGNvbW1vbiBwcmludGluZyAqLwotCWlmIChvZmZzZXQgIT0gQVBJQ19FT0kpCi0JCWFwaWNfZGVidWcoIiVzOiBvZmZzZXQgMHgleCB3aXRoIGxlbmd0aCAweCV4LCBhbmQgdmFsdWUgaXMgIgotCQkJICAgIjB4JXhcbiIsIF9fZnVuY19fLCBvZmZzZXQsIGxlbiwgdmFsKTsKLQotCW9mZnNldCAmPSAweGZmMDsKLQotCUtWTVRSQUNFXzFEKEFQSUNfQUNDRVNTLCBhcGljLT52Y3B1LCAodTMyKW9mZnNldCwgaGFuZGxlcik7Ci0KLQlzd2l0Y2ggKG9mZnNldCkgeworCXN3aXRjaCAocmVnKSB7CiAJY2FzZSBBUElDX0lEOgkJLyogTG9jYWwgQVBJQyBJRCAqLwotCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19JRCwgdmFsKTsKKwkJaWYgKCFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfSUQsIHZhbCk7CisJCWVsc2UKKwkJCXJldCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBBUElDX1RBU0tQUkk6CkBAIC02NDksMTUgKzczMywyNCBAQAogCQlicmVhazsKIAogCWNhc2UgQVBJQ19MRFI6Ci0JCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0xEUiwgdmFsICYgQVBJQ19MRFJfTUFTSyk7CisJCWlmICghYXBpY194MmFwaWNfbW9kZShhcGljKSkKKwkJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0xEUiwgdmFsICYgQVBJQ19MRFJfTUFTSyk7CisJCWVsc2UKKwkJCXJldCA9IDE7CiAJCWJyZWFrOwogCiAJY2FzZSBBUElDX0RGUjoKLQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfREZSLCB2YWwgfCAweDBGRkZGRkZGKTsKKwkJaWYgKCFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfREZSLCB2YWwgfCAweDBGRkZGRkZGKTsKKwkJZWxzZQorCQkJcmV0ID0gMTsKIAkJYnJlYWs7CiAKLQljYXNlIEFQSUNfU1BJVjoKLQkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfU1BJViwgdmFsICYgMHgzZmYpOworCWNhc2UgQVBJQ19TUElWOiB7CisJCXUzMiBtYXNrID0gMHgzZmY7CisJCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19MVlIpICYgQVBJQ19MVlJfRElSRUNURURfRU9JKQorCQkJbWFzayB8PSBBUElDX1NQSVZfRElSRUNURURfRU9JOworCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19TUElWLCB2YWwgJiBtYXNrKTsKIAkJaWYgKCEodmFsICYgQVBJQ19TUElWX0FQSUNfRU5BQkxFRCkpIHsKIAkJCWludCBpOwogCQkJdTMyIGx2dF92YWw7CkBAIC02NzIsNyArNzY1LDcgQEAKIAogCQl9CiAJCWJyZWFrOwotCisJfQogCWNhc2UgQVBJQ19JQ1I6CiAJCS8qIE5vIGRlbGF5IGhlcmUsIHNvIHdlIGFsd2F5cyBjbGVhciB0aGUgcGVuZGluZyBiaXQgKi8KIAkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfSUNSLCB2YWwgJiB+KDEgPDwgMTIpKTsKQEAgLTY4MCw3ICs3NzMsOSBAQAogCQlicmVhazsKIAogCWNhc2UgQVBJQ19JQ1IyOgotCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19JQ1IyLCB2YWwgJiAweGZmMDAwMDAwKTsKKwkJaWYgKCFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQkJdmFsICY9IDB4ZmYwMDAwMDA7CisJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0lDUjIsIHZhbCk7CiAJCWJyZWFrOwogCiAJY2FzZSBBUElDX0xWVDA6CkBAIC02OTQsOCArNzg5LDggQEAKIAkJaWYgKCFhcGljX3N3X2VuYWJsZWQoYXBpYykpCiAJCQl2YWwgfD0gQVBJQ19MVlRfTUFTS0VEOwogCi0JCXZhbCAmPSBhcGljX2x2dF9tYXNrWyhvZmZzZXQgLSBBUElDX0xWVFQpID4+IDRdOwotCQlhcGljX3NldF9yZWcoYXBpYywgb2Zmc2V0LCB2YWwpOworCQl2YWwgJj0gYXBpY19sdnRfbWFza1socmVnIC0gQVBJQ19MVlRUKSA+PiA0XTsKKwkJYXBpY19zZXRfcmVnKGFwaWMsIHJlZywgdmFsKTsKIAogCQlicmVhazsKIApAQCAtNzAzLDcgKzc5OCw3IEBACiAJCWhydGltZXJfY2FuY2VsKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX1RNSUNULCB2YWwpOwogCQlzdGFydF9hcGljX3RpbWVyKGFwaWMpOwotCQlyZXR1cm47CisJCWJyZWFrOwogCiAJY2FzZSBBUElDX1REQ1I6CiAJCWlmICh2YWwgJiA0KQpAQCAtNzEyLDI3ICs4MDcsNTkgQEAKIAkJdXBkYXRlX2RpdmlkZV9jb3VudChhcGljKTsKIAkJYnJlYWs7CiAKKwljYXNlIEFQSUNfRVNSOgorCQlpZiAoYXBpY194MmFwaWNfbW9kZShhcGljKSAmJiB2YWwgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJLVk1fV1JJVEU6RVNSIG5vdCB6ZXJvICV4XG4iLCB2YWwpOworCQkJcmV0ID0gMTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQVBJQ19TRUxGX0lQSToKKwkJaWYgKGFwaWNfeDJhcGljX21vZGUoYXBpYykpIHsKKwkJCWFwaWNfcmVnX3dyaXRlKGFwaWMsIEFQSUNfSUNSLCAweDQwMDAwIHwgKHZhbCAmIDB4ZmYpKTsKKwkJfSBlbHNlCisJCQlyZXQgPSAxOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlhcGljX2RlYnVnKCJMb2NhbCBBUElDIFdyaXRlIHRvIHJlYWQtb25seSByZWdpc3RlciAleFxuIiwKLQkJCSAgIG9mZnNldCk7CisJCXJldCA9IDE7CiAJCWJyZWFrOwogCX0KLQorCWlmIChyZXQpCisJCWFwaWNfZGVidWcoIkxvY2FsIEFQSUMgV3JpdGUgdG8gcmVhZC1vbmx5IHJlZ2lzdGVyICV4XG4iLCByZWcpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXBpY19tbWlvX3JhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLAotCQkJICAgaW50IGxlbiwgaW50IHNpemUpCitzdGF0aWMgaW50IGFwaWNfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKKwkJCSAgICBncGFfdCBhZGRyZXNzLCBpbnQgbGVuLCBjb25zdCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBrdm1fbGFwaWMgKmFwaWMgPSAoc3RydWN0IGt2bV9sYXBpYyAqKXRoaXMtPnByaXZhdGU7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHRvX2xhcGljKHRoaXMpOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBhZGRyZXNzIC0gYXBpYy0+YmFzZV9hZGRyZXNzOworCXUzMiB2YWw7CiAKKwlpZiAoIWFwaWNfbW1pb19pbl9yYW5nZShhcGljLCBhZGRyZXNzKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKGFwaWNfaHdfZW5hYmxlZChhcGljKSAmJgotCSAgICAoYWRkciA+PSBhcGljLT5iYXNlX2FkZHJlc3MpICYmCi0JICAgIChhZGRyIDwgKGFwaWMtPmJhc2VfYWRkcmVzcyArIExBUElDX01NSU9fTEVOR1RIKSkpCi0JCXJldCA9IDE7CisJLyoKKwkgKiBBUElDIHJlZ2lzdGVyIG11c3QgYmUgYWxpZ25lZCBvbiAxMjgtYml0cyBib3VuZGFyeS4KKwkgKiAzMi82NC8xMjggYml0cyByZWdpc3RlcnMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJ1IDMyIGJpdHMuCisJICogUmVmZXIgU0RNIDguNC4xCisJICovCisJaWYgKGxlbiAhPSA0IHx8IChvZmZzZXQgJiAweGYpKSB7CisJCS8qIERvbid0IHNob3V0IGxvdWQsICRpbmZhbW91c19vcyB3b3VsZCBjYXVzZSBvbmx5IG5vaXNlLiAqLworCQlhcGljX2RlYnVnKCJhcGljIHdyaXRlOiBiYWQgc2l6ZT0lZCAlbHhcbiIsIGxlbiwgKGxvbmcpYWRkcmVzcyk7CisJCXJldHVybiAwOworCX0KIAotCXJldHVybiByZXQ7CisJdmFsID0gKih1MzIqKWRhdGE7CisKKwkvKiB0b28gY29tbW9uIHByaW50aW5nICovCisJaWYgKG9mZnNldCAhPSBBUElDX0VPSSkKKwkJYXBpY19kZWJ1ZygiJXM6IG9mZnNldCAweCV4IHdpdGggbGVuZ3RoIDB4JXgsIGFuZCB2YWx1ZSBpcyAiCisJCQkgICAiMHgleFxuIiwgX19mdW5jX18sIG9mZnNldCwgbGVuLCB2YWwpOworCisJYXBpY19yZWdfd3JpdGUoYXBpYywgb2Zmc2V0ICYgMHhmZjAsIHZhbCk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBrdm1fZnJlZV9sYXBpYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC03NjMsNyArODkwLDYgQEAKIAlhcGljX3NldF90cHIoYXBpYywgKChjcjggJiAweDBmKSA8PCA0KQogCQkgICAgIHwgKGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RBU0tQUkkpICYgNCkpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xhcGljX3NldF90cHIpOwogCiB1NjQga3ZtX2xhcGljX2dldF9jcjgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewpAQCAtNzc2LDcgKzkwMiw2IEBACiAKIAlyZXR1cm4gKHRwciAmIDB4ZjApID4+IDQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbGFwaWNfZ2V0X2NyOCk7CiAKIHZvaWQga3ZtX2xhcGljX3NldF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbHVlKQogewpAQCAtNzg3LDEwICs5MTIsMTYgQEAKIAkJdmNwdS0+YXJjaC5hcGljX2Jhc2UgPSB2YWx1ZTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoYXBpYy0+dmNwdS0+dmNwdV9pZCkKKworCWlmICgha3ZtX3ZjcHVfaXNfYnNwKGFwaWMtPnZjcHUpKQogCQl2YWx1ZSAmPSB+TVNSX0lBMzJfQVBJQ0JBU0VfQlNQOwogCiAJdmNwdS0+YXJjaC5hcGljX2Jhc2UgPSB2YWx1ZTsKKwlpZiAoYXBpY194MmFwaWNfbW9kZShhcGljKSkgeworCQl1MzIgaWQgPSBrdm1fYXBpY19pZChhcGljKTsKKwkJdTMyIGxkciA9ICgoaWQgJiB+MHhmKSA8PCAxNikgfCAoMSA8PCAoaWQgJiAweGYpKTsKKwkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfTERSLCBsZHIpOworCX0KIAlhcGljLT5iYXNlX2FkZHJlc3MgPSBhcGljLT52Y3B1LT5hcmNoLmFwaWNfYmFzZSAmCiAJCQkgICAgIE1TUl9JQTMyX0FQSUNCQVNFX0JBU0U7CiAKQEAgLTgwMCwxMiArOTMxLDYgQEAKIAogfQogCi11NjQga3ZtX2xhcGljX2dldF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKLXsKLQlyZXR1cm4gdmNwdS0+YXJjaC5hcGljX2Jhc2U7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbGFwaWNfZ2V0X2Jhc2UpOwotCiB2b2lkIGt2bV9sYXBpY19yZXNldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGt2bV9sYXBpYyAqYXBpYzsKQEAgLTgyMSw3ICs5NDYsNyBAQAogCWhydGltZXJfY2FuY2VsKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAKIAlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19JRCwgdmNwdS0+dmNwdV9pZCA8PCAyNCk7Ci0JYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfTFZSLCBBUElDX1ZFUlNJT04pOworCWt2bV9hcGljX3NldF92ZXJzaW9uKGFwaWMtPnZjcHUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFQSUNfTFZUX05VTTsgaSsrKQogCQlhcGljX3NldF9yZWcoYXBpYywgQVBJQ19MVlRUICsgMHgxMCAqIGksIEFQSUNfTFZUX01BU0tFRCk7CkBAIC04NDIsOSArOTY3LDEwIEBACiAJCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0lTUiArIDB4MTAgKiBpLCAwKTsKIAkJYXBpY19zZXRfcmVnKGFwaWMsIEFQSUNfVE1SICsgMHgxMCAqIGksIDApOwogCX0KKwlhcGljLT5pcnJfcGVuZGluZyA9IGZhbHNlOwogCXVwZGF0ZV9kaXZpZGVfY291bnQoYXBpYyk7CiAJYXRvbWljX3NldCgmYXBpYy0+bGFwaWNfdGltZXIucGVuZGluZywgMCk7Ci0JaWYgKHZjcHUtPnZjcHVfaWQgPT0gMCkKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpKQogCQl2Y3B1LT5hcmNoLmFwaWNfYmFzZSB8PSBNU1JfSUEzMl9BUElDQkFTRV9CU1A7CiAJYXBpY191cGRhdGVfcHByKGFwaWMpOwogCkBAIC04NTUsNyArOTgxLDYgQEAKIAkJICAgdmNwdSwga3ZtX2FwaWNfaWQoYXBpYyksCiAJCSAgIHZjcHUtPmFyY2guYXBpY19iYXNlLCBhcGljLT5iYXNlX2FkZHJlc3MpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xhcGljX3Jlc2V0KTsKIAogYm9vbCBrdm1fYXBpY19wcmVzZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKQEAgLTg2Niw3ICs5OTEsNiBAQAogewogCXJldHVybiBrdm1fYXBpY19wcmVzZW50KHZjcHUpICYmIGFwaWNfc3dfZW5hYmxlZCh2Y3B1LT5hcmNoLmFwaWMpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xhcGljX2VuYWJsZWQpOwogCiAvKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MTcsNiArMTA0MSwxMSBAQAogCS5pc19wZXJpb2RpYyA9IGxhcGljX2lzX3BlcmlvZGljLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBhcGljX21taW9fb3BzID0geworCS5yZWFkICAgICA9IGFwaWNfbW1pb19yZWFkLAorCS53cml0ZSAgICA9IGFwaWNfbW1pb193cml0ZSwKK307CisKIGludCBrdm1fY3JlYXRlX2xhcGljKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljOwpAQCAtOTQ1LDE2ICsxMDc0LDEzIEBACiAJYXBpYy0+bGFwaWNfdGltZXIudGltZXIuZnVuY3Rpb24gPSBrdm1fdGltZXJfZm47CiAJYXBpYy0+bGFwaWNfdGltZXIudF9vcHMgPSAmbGFwaWNfdGltZXJfb3BzOwogCWFwaWMtPmxhcGljX3RpbWVyLmt2bSA9IHZjcHUtPmt2bTsKLQlhcGljLT5sYXBpY190aW1lci52Y3B1X2lkID0gdmNwdS0+dmNwdV9pZDsKKwlhcGljLT5sYXBpY190aW1lci52Y3B1ID0gdmNwdTsKIAogCWFwaWMtPmJhc2VfYWRkcmVzcyA9IEFQSUNfREVGQVVMVF9QSFlTX0JBU0U7CiAJdmNwdS0+YXJjaC5hcGljX2Jhc2UgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwogCiAJa3ZtX2xhcGljX3Jlc2V0KHZjcHUpOwotCWFwaWMtPmRldi5yZWFkID0gYXBpY19tbWlvX3JlYWQ7Ci0JYXBpYy0+ZGV2LndyaXRlID0gYXBpY19tbWlvX3dyaXRlOwotCWFwaWMtPmRldi5pbl9yYW5nZSA9IGFwaWNfbW1pb19yYW5nZTsKLQlhcGljLT5kZXYucHJpdmF0ZSA9IGFwaWM7CisJa3ZtX2lvZGV2aWNlX2luaXQoJmFwaWMtPmRldiwgJmFwaWNfbW1pb19vcHMpOwogCiAJcmV0dXJuIDA7CiBub21lbV9mcmVlX2FwaWM6CkBAIC05NjIsNyArMTA4OCw2IEBACiBub21lbToKIAlyZXR1cm4gLUVOT01FTTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGt2bV9jcmVhdGVfbGFwaWMpOwogCiBpbnQga3ZtX2FwaWNfaGFzX2ludGVycnVwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CkBAIC05ODUsNyArMTExMCw3IEBACiAJdTMyIGx2dDAgPSBhcGljX2dldF9yZWcodmNwdS0+YXJjaC5hcGljLCBBUElDX0xWVDApOwogCWludCByID0gMDsKIAotCWlmICh2Y3B1LT52Y3B1X2lkID09IDApIHsKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKHZjcHUpKSB7CiAJCWlmICghYXBpY19od19lbmFibGVkKHZjcHUtPmFyY2guYXBpYykpCiAJCQlyID0gMTsKIAkJaWYgKChsdnQwICYgQVBJQ19MVlRfTUFTS0VEKSA9PSAwICYmCkBAIC0xMDI1LDcgKzExNTAsOCBAQAogCiAJYXBpYy0+YmFzZV9hZGRyZXNzID0gdmNwdS0+YXJjaC5hcGljX2Jhc2UgJgogCQkJICAgICBNU1JfSUEzMl9BUElDQkFTRV9CQVNFOwotCWFwaWNfc2V0X3JlZyhhcGljLCBBUElDX0xWUiwgQVBJQ19WRVJTSU9OKTsKKwlrdm1fYXBpY19zZXRfdmVyc2lvbih2Y3B1KTsKKwogCWFwaWNfdXBkYXRlX3BwcihhcGljKTsKIAlocnRpbWVyX2NhbmNlbCgmYXBpYy0+bGFwaWNfdGltZXIudGltZXIpOwogCXVwZGF0ZV9kaXZpZGVfY291bnQoYXBpYyk7CkBAIC0xMDkyLDMgKzEyMTgsMzUgQEAKIAogCXZjcHUtPmFyY2guYXBpYy0+dmFwaWNfYWRkciA9IHZhcGljX2FkZHI7CiB9CisKK2ludCBrdm1feDJhcGljX21zcl93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKQoreworCXN0cnVjdCBrdm1fbGFwaWMgKmFwaWMgPSB2Y3B1LT5hcmNoLmFwaWM7CisJdTMyIHJlZyA9IChtc3IgLSBBUElDX0JBU0VfTVNSKSA8PCA0OworCisJaWYgKCFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pIHx8ICFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQlyZXR1cm4gMTsKKworCS8qIGlmIHRoaXMgaXMgSUNSIHdyaXRlIHZlY3RvciBiZWZvcmUgY29tbWFuZCAqLworCWlmIChtc3IgPT0gMHg4MzApCisJCWFwaWNfcmVnX3dyaXRlKGFwaWMsIEFQSUNfSUNSMiwgKHUzMikoZGF0YSA+PiAzMikpOworCXJldHVybiBhcGljX3JlZ193cml0ZShhcGljLCByZWcsICh1MzIpZGF0YSk7Cit9CisKK2ludCBrdm1feDJhcGljX21zcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpkYXRhKQoreworCXN0cnVjdCBrdm1fbGFwaWMgKmFwaWMgPSB2Y3B1LT5hcmNoLmFwaWM7CisJdTMyIHJlZyA9IChtc3IgLSBBUElDX0JBU0VfTVNSKSA8PCA0LCBsb3csIGhpZ2ggPSAwOworCisJaWYgKCFpcnFjaGlwX2luX2tlcm5lbCh2Y3B1LT5rdm0pIHx8ICFhcGljX3gyYXBpY19tb2RlKGFwaWMpKQorCQlyZXR1cm4gMTsKKworCWlmIChhcGljX3JlZ19yZWFkKGFwaWMsIHJlZywgNCwgJmxvdykpCisJCXJldHVybiAxOworCWlmIChtc3IgPT0gMHg4MzApCisJCWFwaWNfcmVnX3JlYWQoYXBpYywgQVBJQ19JQ1IyLCA0LCAmaGlnaCk7CisKKwkqZGF0YSA9ICgoKHU2NCloaWdoKSA8PCAzMikgfCBsb3c7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5oIGIvYXJjaC94ODYva3ZtL2xhcGljLmgKaW5kZXggYTU4N2Y4My4uNDAwMTBiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmgKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAlzdHJ1Y3Qga3ZtX3RpbWVyIGxhcGljX3RpbWVyOwogCXUzMiBkaXZpZGVfY291bnQ7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCWJvb2wgaXJyX3BlbmRpbmc7CiAJc3RydWN0IHBhZ2UgKnJlZ3NfcGFnZTsKIAl2b2lkICpyZWdzOwogCWdwYV90IHZhcGljX2FkZHI7CkBAIC0yOCw2ICsyOSw3IEBACiB2b2lkIGt2bV9sYXBpY19zZXRfdHByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjgpOwogdm9pZCBrdm1fbGFwaWNfc2V0X2Jhc2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsdWUpOwogdTY0IGt2bV9sYXBpY19nZXRfYmFzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwordm9pZCBrdm1fYXBpY19zZXRfdmVyc2lvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX2FwaWNfbWF0Y2hfcGh5c2ljYWxfYWRkcihzdHJ1Y3Qga3ZtX2xhcGljICphcGljLCB1MTYgZGVzdCk7CiBpbnQga3ZtX2FwaWNfbWF0Y2hfbG9naWNhbF9hZGRyKHN0cnVjdCBrdm1fbGFwaWMgKmFwaWMsIHU4IG1kYSk7CkBAIC00NCw0ICs0Niw2IEBACiB2b2lkIGt2bV9sYXBpY19zeW5jX2Zyb21fdmFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIHZvaWQga3ZtX2xhcGljX3N5bmNfdG9fdmFwaWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAoraW50IGt2bV94MmFwaWNfbXNyX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpOworaW50IGt2bV94MmFwaWNfbXNyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKmRhdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11LmMKaW5kZXggMGVmNWJiMi4uZWNhNDFhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL21tdS5jCisrKyBiL2FyY2gveDg2L2t2bS9tbXUuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlICJtbXUuaCIKKyNpbmNsdWRlICJrdm1fY2FjaGVfcmVncy5oIgogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTA3LDYgKzEwOCw5IEBACiAKICNkZWZpbmUgUFQzMl9MRVZFTF9NQVNLKGxldmVsKSBcCiAJCSgoKDFVTEwgPDwgUFQzMl9MRVZFTF9CSVRTKSAtIDEpIDw8IFBUMzJfTEVWRUxfU0hJRlQobGV2ZWwpKQorI2RlZmluZSBQVDMyX0xWTF9PRkZTRVRfTUFTSyhsZXZlbCkgXAorCShQVDMyX0JBU0VfQUREUl9NQVNLICYgKCgxVUxMIDw8IChQQUdFX1NISUZUICsgKCgobGV2ZWwpIC0gMSkgXAorCQkJCQkJKiBQVDMyX0xFVkVMX0JJVFMpKSkgLSAxKSkKIAogI2RlZmluZSBQVDMyX0lOREVYKGFkZHJlc3MsIGxldmVsKVwKIAkoKChhZGRyZXNzKSA+PiBQVDMyX0xFVkVMX1NISUZUKGxldmVsKSkgJiAoKDEgPDwgUFQzMl9MRVZFTF9CSVRTKSAtIDEpKQpAQCAtMTE1LDEwICsxMTksMTkgQEAKICNkZWZpbmUgUFQ2NF9CQVNFX0FERFJfTUFTSyAoKCgxVUxMIDw8IDUyKSAtIDEpICYgfih1NjQpKFBBR0VfU0laRS0xKSkKICNkZWZpbmUgUFQ2NF9ESVJfQkFTRV9BRERSX01BU0sgXAogCShQVDY0X0JBU0VfQUREUl9NQVNLICYgfigoMVVMTCA8PCAoUEFHRV9TSElGVCArIFBUNjRfTEVWRUxfQklUUykpIC0gMSkpCisjZGVmaW5lIFBUNjRfTFZMX0FERFJfTUFTSyhsZXZlbCkgXAorCShQVDY0X0JBU0VfQUREUl9NQVNLICYgfigoMVVMTCA8PCAoUEFHRV9TSElGVCArICgoKGxldmVsKSAtIDEpIFwKKwkJCQkJCSogUFQ2NF9MRVZFTF9CSVRTKSkpIC0gMSkpCisjZGVmaW5lIFBUNjRfTFZMX09GRlNFVF9NQVNLKGxldmVsKSBcCisJKFBUNjRfQkFTRV9BRERSX01BU0sgJiAoKDFVTEwgPDwgKFBBR0VfU0hJRlQgKyAoKChsZXZlbCkgLSAxKSBcCisJCQkJCQkqIFBUNjRfTEVWRUxfQklUUykpKSAtIDEpKQogCiAjZGVmaW5lIFBUMzJfQkFTRV9BRERSX01BU0sgUEFHRV9NQVNLCiAjZGVmaW5lIFBUMzJfRElSX0JBU0VfQUREUl9NQVNLIFwKIAkoUEFHRV9NQVNLICYgfigoMVVMTCA8PCAoUEFHRV9TSElGVCArIFBUMzJfTEVWRUxfQklUUykpIC0gMSkpCisjZGVmaW5lIFBUMzJfTFZMX0FERFJfTUFTSyhsZXZlbCkgXAorCShQQUdFX01BU0sgJiB+KCgxVUxMIDw8IChQQUdFX1NISUZUICsgKCgobGV2ZWwpIC0gMSkgXAorCQkJCQkgICAgKiBQVDMyX0xFVkVMX0JJVFMpKSkgLSAxKSkKIAogI2RlZmluZSBQVDY0X1BFUk1fTUFTSyAoUFRfUFJFU0VOVF9NQVNLIHwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSyBcCiAJCQl8IFBUNjRfTlhfTUFTSykKQEAgLTEyOSw2ICsxNDIsNyBAQAogI2RlZmluZSBQRkVSUl9SU1ZEX01BU0sgKDFVIDw8IDMpCiAjZGVmaW5lIFBGRVJSX0ZFVENIX01BU0sgKDFVIDw8IDQpCiAKKyNkZWZpbmUgUFRfUERQRV9MRVZFTCAzCiAjZGVmaW5lIFBUX0RJUkVDVE9SWV9MRVZFTCAyCiAjZGVmaW5lIFBUX1BBR0VfVEFCTEVfTEVWRUwgMQogCkBAIC0xMzksMTAgKzE1MywxMyBAQAogI2RlZmluZSBBQ0NfVVNFUl9NQVNLICAgIFBUX1VTRVJfTUFTSwogI2RlZmluZSBBQ0NfQUxMICAgICAgICAgIChBQ0NfRVhFQ19NQVNLIHwgQUNDX1dSSVRFX01BU0sgfCBBQ0NfVVNFUl9NQVNLKQogCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJtbXV0cmFjZS5oIgorCiAjZGVmaW5lIFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKIAogc3RydWN0IGt2bV9ybWFwX2Rlc2MgewotCXU2NCAqc2hhZG93X3B0ZXNbUk1BUF9FWFRdOworCXU2NCAqc3B0ZXNbUk1BUF9FWFRdOwogCXN0cnVjdCBrdm1fcm1hcF9kZXNjICptb3JlOwogfTsKIApAQCAtMjM5LDE2ICsyNTYsMjUgQEAKIAlyZXR1cm4gcHRlICYgUFRfV1JJVEFCTEVfTUFTSzsKIH0KIAotc3RhdGljIGludCBpc19kaXJ0eV9wdGUodW5zaWduZWQgbG9uZyBwdGUpCitzdGF0aWMgaW50IGlzX2RpcnR5X2dwdGUodW5zaWduZWQgbG9uZyBwdGUpCiB7Ci0JcmV0dXJuIHB0ZSAmIHNoYWRvd19kaXJ0eV9tYXNrOworCXJldHVybiBwdGUgJiBQVF9ESVJUWV9NQVNLOwogfQogCi1zdGF0aWMgaW50IGlzX3JtYXBfcHRlKHU2NCBwdGUpCitzdGF0aWMgaW50IGlzX3JtYXBfc3B0ZSh1NjQgcHRlKQogewogCXJldHVybiBpc19zaGFkb3dfcHJlc2VudF9wdGUocHRlKTsKIH0KIAorc3RhdGljIGludCBpc19sYXN0X3NwdGUodTY0IHB0ZSwgaW50IGxldmVsKQoreworCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQlyZXR1cm4gMTsKKwlpZiAoaXNfbGFyZ2VfcHRlKHB0ZSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgcGZuX3Qgc3B0ZV90b19wZm4odTY0IHB0ZSkKIHsKIAlyZXR1cm4gKHB0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CkBAIC0yNjEsNyArMjg3LDcgQEAKIAlyZXR1cm4gKGdwdGUgJiBQVDMyX0RJUl9QU0UzNl9NQVNLKSA8PCBzaGlmdDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3NoYWRvd19wdGUodTY0ICpzcHRlcCwgdTY0IHNwdGUpCitzdGF0aWMgdm9pZCBfX3NldF9zcHRlKHU2NCAqc3B0ZXAsIHU2NCBzcHRlKQogewogI2lmZGVmIENPTkZJR19YODZfNjQKIAlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilzcHRlcCwgc3B0ZSk7CkBAIC0zODAsMzcgKzQwNiw1MiBAQAogICogUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBsYXJnZXBhZ2Ugd3JpdGUgY291bnQgZm9yIGEgZ2l2ZW4KICAqIGdmbiwgaGFuZGxpbmcgc2xvdHMgdGhhdCBhcmUgbm90IGxhcmdlIHBhZ2UgYWxpZ25lZC4KICAqLwotc3RhdGljIGludCAqc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbl90IGdmbiwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKK3N0YXRpYyBpbnQgKnNsb3RfbGFyZ2VwYWdlX2lkeChnZm5fdCBnZm4sCisJCQkgICAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwKKwkJCSAgICAgICBpbnQgbGV2ZWwpCiB7CiAJdW5zaWduZWQgbG9uZyBpZHg7CiAKLQlpZHggPSAoZ2ZuIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRSkgLQotCSAgICAgIChzbG90LT5iYXNlX2dmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UpOwotCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tpZHhdLndyaXRlX2NvdW50OworCWlkeCA9IChnZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSkgLQorCSAgICAgIChzbG90LT5iYXNlX2dmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTsKKwlyZXR1cm4gJnNsb3QtPmxwYWdlX2luZm9bbGV2ZWwgLSAyXVtpZHhdLndyaXRlX2NvdW50OwogfQogCiBzdGF0aWMgdm9pZCBhY2NvdW50X3NoYWRvd2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogeworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJaW50ICp3cml0ZV9jb3VudDsKKwlpbnQgaTsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKLQl3cml0ZV9jb3VudCA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sCi0JCQkJCSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pKTsKLQkqd3JpdGVfY291bnQgKz0gMTsKKworCXNsb3QgPSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pOworCWZvciAoaSA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKwkgICAgIGkgPCBQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVM7ICsraSkgeworCQl3cml0ZV9jb3VudCAgID0gc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbiwgc2xvdCwgaSk7CisJCSp3cml0ZV9jb3VudCArPSAxOworCX0KIH0KIAogc3RhdGljIHZvaWQgdW5hY2NvdW50X3NoYWRvd2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogeworCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJaW50ICp3cml0ZV9jb3VudDsKKwlpbnQgaTsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKLQl3cml0ZV9jb3VudCA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sCi0JCQkJCSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoa3ZtLCBnZm4pKTsKLQkqd3JpdGVfY291bnQgLT0gMTsKLQlXQVJOX09OKCp3cml0ZV9jb3VudCA8IDApOworCWZvciAoaSA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKwkgICAgIGkgPCBQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVM7ICsraSkgeworCQlzbG90ICAgICAgICAgID0gZ2ZuX3RvX21lbXNsb3RfdW5hbGlhc2VkKGt2bSwgZ2ZuKTsKKwkJd3JpdGVfY291bnQgICA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sIHNsb3QsIGkpOworCQkqd3JpdGVfY291bnQgLT0gMTsKKwkJV0FSTl9PTigqd3JpdGVfY291bnQgPCAwKTsKKwl9CiB9CiAKLXN0YXRpYyBpbnQgaGFzX3dycHJvdGVjdGVkX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCitzdGF0aWMgaW50IGhhc193cnByb3RlY3RlZF9wYWdlKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQlnZm5fdCBnZm4sCisJCQkJaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJaW50ICpsYXJnZXBhZ2VfaWR4OwpAQCAtNDE4LDQ3ICs0NTksNjcgQEAKIAlnZm4gPSB1bmFsaWFzX2dmbihrdm0sIGdmbik7CiAJc2xvdCA9IGdmbl90b19tZW1zbG90X3VuYWxpYXNlZChrdm0sIGdmbik7CiAJaWYgKHNsb3QpIHsKLQkJbGFyZ2VwYWdlX2lkeCA9IHNsb3RfbGFyZ2VwYWdlX2lkeChnZm4sIHNsb3QpOworCQlsYXJnZXBhZ2VfaWR4ID0gc2xvdF9sYXJnZXBhZ2VfaWR4KGdmbiwgc2xvdCwgbGV2ZWwpOwogCQlyZXR1cm4gKmxhcmdlcGFnZV9pZHg7CiAJfQogCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaG9zdF9sYXJnZXBhZ2VfYmFja2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQorc3RhdGljIGludCBob3N0X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CisJdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBQQUdFX1NJWkU7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCWludCByZXQgPSAwOworCWludCBpLCByZXQgPSAwOwogCiAJYWRkciA9IGdmbl90b19odmEoa3ZtLCBnZm4pOwogCWlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gcGFnZV9zaXplOwogCiAJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCXZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCBhZGRyKTsKLQlpZiAodm1hICYmIGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQotCQlyZXQgPSAxOworCWlmICghdm1hKQorCQlnb3RvIG91dDsKKworCXBhZ2Vfc2l6ZSA9IHZtYV9rZXJuZWxfcGFnZXNpemUodm1hKTsKKworb3V0OgogCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKKwlmb3IgKGkgPSBQVF9QQUdFX1RBQkxFX0xFVkVMOworCSAgICAgaSA8IChQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVMpOyArK2kpIHsKKwkJaWYgKHBhZ2Vfc2l6ZSA+PSBLVk1fSFBBR0VfU0laRShpKSkKKwkJCXJldCA9IGk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaXNfbGFyZ2VwYWdlX2JhY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKK3N0YXRpYyBpbnQgbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwotCi0JaWYgKGhhc193cnByb3RlY3RlZF9wYWdlKHZjcHUtPmt2bSwgbGFyZ2VfZ2ZuKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIWhvc3RfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LT5rdm0sIGxhcmdlX2dmbikpCi0JCXJldHVybiAwOworCWludCBob3N0X2xldmVsOworCWludCBsZXZlbCA9IFBUX1BBR0VfVEFCTEVfTEVWRUw7CiAKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0+a3ZtLCBsYXJnZV9nZm4pOwogCWlmIChzbG90ICYmIHNsb3QtPmRpcnR5X2JpdG1hcCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBQVF9QQUdFX1RBQkxFX0xFVkVMOwogCi0JcmV0dXJuIDE7CisJaG9zdF9sZXZlbCA9IGhvc3RfbWFwcGluZ19sZXZlbCh2Y3B1LT5rdm0sIGxhcmdlX2dmbik7CisKKwlpZiAoaG9zdF9sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQorCQlyZXR1cm4gaG9zdF9sZXZlbDsKKworCWZvciAobGV2ZWwgPSBQVF9ESVJFQ1RPUllfTEVWRUw7IGxldmVsIDw9IGhvc3RfbGV2ZWw7ICsrbGV2ZWwpIHsKKworCQlpZiAoaGFzX3dycHJvdGVjdGVkX3BhZ2UodmNwdS0+a3ZtLCBsYXJnZV9nZm4sIGxldmVsKSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBsZXZlbCAtIDE7CiB9CiAKIC8qCkBAIC00NjYsMTkgKzUyNywxOSBAQAogICogTm90ZTogZ2ZuIG11c3QgYmUgdW5hbGlhc2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGdldCBjYWxsZWQKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqZ2ZuX3RvX3JtYXAoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGludCBscGFnZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpnZm5fdG9fcm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3Q7CiAJdW5zaWduZWQgbG9uZyBpZHg7CiAKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3Qoa3ZtLCBnZm4pOwotCWlmICghbHBhZ2UpCisJaWYgKGxpa2VseShsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSkKIAkJcmV0dXJuICZzbG90LT5ybWFwW2dmbiAtIHNsb3QtPmJhc2VfZ2ZuXTsKIAotCWlkeCA9IChnZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFKSAtCi0JICAgICAgKHNsb3QtPmJhc2VfZ2ZuIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRSk7CisJaWR4ID0gKGdmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKSAtCisJCShzbG90LT5iYXNlX2dmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKTsKIAotCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tpZHhdLnJtYXBfcGRlOworCXJldHVybiAmc2xvdC0+bHBhZ2VfaW5mb1tsZXZlbCAtIDJdW2lkeF0ucm1hcF9wZGU7CiB9CiAKIC8qCkBAIC00OTQsNDIgKzU1NSw0MiBAQAogICogdGhlIHNwdGUgd2FzIG5vdCBhZGRlZC4KICAqCiAgKi8KLXN0YXRpYyBpbnQgcm1hcF9hZGQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKnNwdGUsIGdmbl90IGdmbiwgaW50IGxwYWdlKQorc3RhdGljIGludCBybWFwX2FkZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZSwgZ2ZuX3QgZ2ZuKQogewogCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOwogCXN0cnVjdCBrdm1fcm1hcF9kZXNjICpkZXNjOwogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOwogCWludCBpLCBjb3VudCA9IDA7CiAKLQlpZiAoIWlzX3JtYXBfcHRlKCpzcHRlKSkKKwlpZiAoIWlzX3JtYXBfc3B0ZSgqc3B0ZSkpCiAJCXJldHVybiBjb3VudDsKIAlnZm4gPSB1bmFsaWFzX2dmbih2Y3B1LT5rdm0sIGdmbik7CiAJc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKIAlzcC0+Z2Zuc1tzcHRlIC0gc3AtPnNwdF0gPSBnZm47Ci0Jcm1hcHAgPSBnZm5fdG9fcm1hcCh2Y3B1LT5rdm0sIGdmbiwgbHBhZ2UpOworCXJtYXBwID0gZ2ZuX3RvX3JtYXAodmNwdS0+a3ZtLCBnZm4sIHNwLT5yb2xlLmxldmVsKTsKIAlpZiAoISpybWFwcCkgewogCQlybWFwX3ByaW50aygicm1hcF9hZGQ6ICVwICVsbHggMC0+MVxuIiwgc3B0ZSwgKnNwdGUpOwogCQkqcm1hcHAgPSAodW5zaWduZWQgbG9uZylzcHRlOwogCX0gZWxzZSBpZiAoISgqcm1hcHAgJiAxKSkgewogCQlybWFwX3ByaW50aygicm1hcF9hZGQ6ICVwICVsbHggMS0+bWFueVxuIiwgc3B0ZSwgKnNwdGUpOwogCQlkZXNjID0gbW11X2FsbG9jX3JtYXBfZGVzYyh2Y3B1KTsKLQkJZGVzYy0+c2hhZG93X3B0ZXNbMF0gPSAodTY0ICopKnJtYXBwOwotCQlkZXNjLT5zaGFkb3dfcHRlc1sxXSA9IHNwdGU7CisJCWRlc2MtPnNwdGVzWzBdID0gKHU2NCAqKSpybWFwcDsKKwkJZGVzYy0+c3B0ZXNbMV0gPSBzcHRlOwogCQkqcm1hcHAgPSAodW5zaWduZWQgbG9uZylkZXNjIHwgMTsKIAl9IGVsc2UgewogCQlybWFwX3ByaW50aygicm1hcF9hZGQ6ICVwICVsbHggbWFueS0+bWFueVxuIiwgc3B0ZSwgKnNwdGUpOwogCQlkZXNjID0gKHN0cnVjdCBrdm1fcm1hcF9kZXNjICopKCpybWFwcCAmIH4xdWwpOwotCQl3aGlsZSAoZGVzYy0+c2hhZG93X3B0ZXNbUk1BUF9FWFQtMV0gJiYgZGVzYy0+bW9yZSkgeworCQl3aGlsZSAoZGVzYy0+c3B0ZXNbUk1BUF9FWFQtMV0gJiYgZGVzYy0+bW9yZSkgewogCQkJZGVzYyA9IGRlc2MtPm1vcmU7CiAJCQljb3VudCArPSBSTUFQX0VYVDsKIAkJfQotCQlpZiAoZGVzYy0+c2hhZG93X3B0ZXNbUk1BUF9FWFQtMV0pIHsKKwkJaWYgKGRlc2MtPnNwdGVzW1JNQVBfRVhULTFdKSB7CiAJCQlkZXNjLT5tb3JlID0gbW11X2FsbG9jX3JtYXBfZGVzYyh2Y3B1KTsKIAkJCWRlc2MgPSBkZXNjLT5tb3JlOwogCQl9Ci0JCWZvciAoaSA9IDA7IGRlc2MtPnNoYWRvd19wdGVzW2ldOyArK2kpCisJCWZvciAoaSA9IDA7IGRlc2MtPnNwdGVzW2ldOyArK2kpCiAJCQk7Ci0JCWRlc2MtPnNoYWRvd19wdGVzW2ldID0gc3B0ZTsKKwkJZGVzYy0+c3B0ZXNbaV0gPSBzcHRlOwogCX0KIAlyZXR1cm4gY291bnQ7CiB9CkBAIC01NDEsMTQgKzYwMiwxNCBAQAogewogCWludCBqOwogCi0JZm9yIChqID0gUk1BUF9FWFQgLSAxOyAhZGVzYy0+c2hhZG93X3B0ZXNbal0gJiYgaiA+IGk7IC0taikKKwlmb3IgKGogPSBSTUFQX0VYVCAtIDE7ICFkZXNjLT5zcHRlc1tqXSAmJiBqID4gaTsgLS1qKQogCQk7Ci0JZGVzYy0+c2hhZG93X3B0ZXNbaV0gPSBkZXNjLT5zaGFkb3dfcHRlc1tqXTsKLQlkZXNjLT5zaGFkb3dfcHRlc1tqXSA9IE5VTEw7CisJZGVzYy0+c3B0ZXNbaV0gPSBkZXNjLT5zcHRlc1tqXTsKKwlkZXNjLT5zcHRlc1tqXSA9IE5VTEw7CiAJaWYgKGogIT0gMCkKIAkJcmV0dXJuOwogCWlmICghcHJldl9kZXNjICYmICFkZXNjLT5tb3JlKQotCQkqcm1hcHAgPSAodW5zaWduZWQgbG9uZylkZXNjLT5zaGFkb3dfcHRlc1swXTsKKwkJKnJtYXBwID0gKHVuc2lnbmVkIGxvbmcpZGVzYy0+c3B0ZXNbMF07CiAJZWxzZQogCQlpZiAocHJldl9kZXNjKQogCQkJcHJldl9kZXNjLT5tb3JlID0gZGVzYy0+bW9yZTsKQEAgLTU2Niw3ICs2MjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOwogCWludCBpOwogCi0JaWYgKCFpc19ybWFwX3B0ZSgqc3B0ZSkpCisJaWYgKCFpc19ybWFwX3NwdGUoKnNwdGUpKQogCQlyZXR1cm47CiAJc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKIAlwZm4gPSBzcHRlX3RvX3Bmbigqc3B0ZSk7CkBAIC01NzYsNyArNjM3LDcgQEAKIAkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHBmbik7CiAJZWxzZQogCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKLQlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgc3AtPmdmbnNbc3B0ZSAtIHNwLT5zcHRdLCBpc19sYXJnZV9wdGUoKnNwdGUpKTsKKwlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgc3AtPmdmbnNbc3B0ZSAtIHNwLT5zcHRdLCBzcC0+cm9sZS5sZXZlbCk7CiAJaWYgKCEqcm1hcHApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJybWFwX3JlbW92ZTogJXAgJWxseCAwLT5CVUdcbiIsIHNwdGUsICpzcHRlKTsKIAkJQlVHKCk7CkBAIC01OTMsOCArNjU0LDggQEAKIAkJZGVzYyA9IChzdHJ1Y3Qga3ZtX3JtYXBfZGVzYyAqKSgqcm1hcHAgJiB+MXVsKTsKIAkJcHJldl9kZXNjID0gTlVMTDsKIAkJd2hpbGUgKGRlc2MpIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBSTUFQX0VYVCAmJiBkZXNjLT5zaGFkb3dfcHRlc1tpXTsgKytpKQotCQkJCWlmIChkZXNjLT5zaGFkb3dfcHRlc1tpXSA9PSBzcHRlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgUk1BUF9FWFQgJiYgZGVzYy0+c3B0ZXNbaV07ICsraSkKKwkJCQlpZiAoZGVzYy0+c3B0ZXNbaV0gPT0gc3B0ZSkgewogCQkJCQlybWFwX2Rlc2NfcmVtb3ZlX2VudHJ5KHJtYXBwLAogCQkJCQkJCSAgICAgICBkZXNjLCBpLAogCQkJCQkJCSAgICAgICBwcmV2X2Rlc2MpOwpAQCAtNjI1LDEwICs2ODYsMTAgQEAKIAlwcmV2X2Rlc2MgPSBOVUxMOwogCXByZXZfc3B0ZSA9IE5VTEw7CiAJd2hpbGUgKGRlc2MpIHsKLQkJZm9yIChpID0gMDsgaSA8IFJNQVBfRVhUICYmIGRlc2MtPnNoYWRvd19wdGVzW2ldOyArK2kpIHsKKwkJZm9yIChpID0gMDsgaSA8IFJNQVBfRVhUICYmIGRlc2MtPnNwdGVzW2ldOyArK2kpIHsKIAkJCWlmIChwcmV2X3NwdGUgPT0gc3B0ZSkKLQkJCQlyZXR1cm4gZGVzYy0+c2hhZG93X3B0ZXNbaV07Ci0JCQlwcmV2X3NwdGUgPSBkZXNjLT5zaGFkb3dfcHRlc1tpXTsKKwkJCQlyZXR1cm4gZGVzYy0+c3B0ZXNbaV07CisJCQlwcmV2X3NwdGUgPSBkZXNjLT5zcHRlc1tpXTsKIAkJfQogCQlkZXNjID0gZGVzYy0+bW9yZTsKIAl9CkBAIC02MzksMTAgKzcwMCwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOwogCXU2NCAqc3B0ZTsKLQlpbnQgd3JpdGVfcHJvdGVjdGVkID0gMDsKKwlpbnQgaSwgd3JpdGVfcHJvdGVjdGVkID0gMDsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKLQlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgZ2ZuLCAwKTsKKwlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgZ2ZuLCBQVF9QQUdFX1RBQkxFX0xFVkVMKTsKIAogCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgTlVMTCk7CiAJd2hpbGUgKHNwdGUpIHsKQEAgLTY1MCw3ICs3MTEsNyBAQAogCQlCVUdfT04oISgqc3B0ZSAmIFBUX1BSRVNFTlRfTUFTSykpOwogCQlybWFwX3ByaW50aygicm1hcF93cml0ZV9wcm90ZWN0OiBzcHRlICVwICVsbHhcbiIsIHNwdGUsICpzcHRlKTsKIAkJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpIHsKLQkJCXNldF9zaGFkb3dfcHRlKHNwdGUsICpzcHRlICYgflBUX1dSSVRBQkxFX01BU0spOworCQkJX19zZXRfc3B0ZShzcHRlLCAqc3B0ZSAmIH5QVF9XUklUQUJMRV9NQVNLKTsKIAkJCXdyaXRlX3Byb3RlY3RlZCA9IDE7CiAJCX0KIAkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBzcHRlKTsKQEAgLTY2NCwyMSArNzI1LDI0IEBACiAJfQogCiAJLyogY2hlY2sgZm9yIGh1Z2UgcGFnZSBtYXBwaW5ncyAqLwotCXJtYXBwID0gZ2ZuX3RvX3JtYXAoa3ZtLCBnZm4sIDEpOwotCXNwdGUgPSBybWFwX25leHQoa3ZtLCBybWFwcCwgTlVMTCk7Ci0Jd2hpbGUgKHNwdGUpIHsKLQkJQlVHX09OKCFzcHRlKTsKLQkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKLQkJQlVHX09OKCgqc3B0ZSAmIChQVF9QQUdFX1NJWkVfTUFTS3xQVF9QUkVTRU5UX01BU0spKSAhPSAoUFRfUEFHRV9TSVpFX01BU0t8UFRfUFJFU0VOVF9NQVNLKSk7Ci0JCXBncHJpbnRrKCJybWFwX3dyaXRlX3Byb3RlY3QobGFyZ2UpOiBzcHRlICVwICVsbHggJWxsZFxuIiwgc3B0ZSwgKnNwdGUsIGdmbik7Ci0JCWlmIChpc193cml0ZWJsZV9wdGUoKnNwdGUpKSB7Ci0JCQlybWFwX3JlbW92ZShrdm0sIHNwdGUpOwotCQkJLS1rdm0tPnN0YXQubHBhZ2VzOwotCQkJc2V0X3NoYWRvd19wdGUoc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwotCQkJc3B0ZSA9IE5VTEw7Ci0JCQl3cml0ZV9wcm90ZWN0ZWQgPSAxOworCWZvciAoaSA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKwkgICAgIGkgPCBQVF9QQUdFX1RBQkxFX0xFVkVMICsgS1ZNX05SX1BBR0VfU0laRVM7ICsraSkgeworCQlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgZ2ZuLCBpKTsKKwkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKKwkJd2hpbGUgKHNwdGUpIHsKKwkJCUJVR19PTighc3B0ZSk7CisJCQlCVUdfT04oISgqc3B0ZSAmIFBUX1BSRVNFTlRfTUFTSykpOworCQkJQlVHX09OKCgqc3B0ZSAmIChQVF9QQUdFX1NJWkVfTUFTS3xQVF9QUkVTRU5UX01BU0spKSAhPSAoUFRfUEFHRV9TSVpFX01BU0t8UFRfUFJFU0VOVF9NQVNLKSk7CisJCQlwZ3ByaW50aygicm1hcF93cml0ZV9wcm90ZWN0KGxhcmdlKTogc3B0ZSAlcCAlbGx4ICVsbGRcbiIsIHNwdGUsICpzcHRlLCBnZm4pOworCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpIHsKKwkJCQlybWFwX3JlbW92ZShrdm0sIHNwdGUpOworCQkJCS0ta3ZtLT5zdGF0LmxwYWdlczsKKwkJCQlfX3NldF9zcHRlKHNwdGUsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCQlzcHRlID0gTlVMTDsKKwkJCQl3cml0ZV9wcm90ZWN0ZWQgPSAxOworCQkJfQorCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBzcHRlKTsKIAkJfQotCQlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIHNwdGUpOwogCX0KIAogCXJldHVybiB3cml0ZV9wcm90ZWN0ZWQ7CkBAIC02OTMsNyArNzU3LDcgQEAKIAkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKIAkJcm1hcF9wcmludGsoImt2bV9ybWFwX3VubWFwX2h2YTogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7CiAJCXJtYXBfcmVtb3ZlKGt2bSwgc3B0ZSk7Ci0JCXNldF9zaGFkb3dfcHRlKHNwdGUsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJX19zZXRfc3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJCW5lZWRfdGxiX2ZsdXNoID0gMTsKIAl9CiAJcmV0dXJuIG5lZWRfdGxiX2ZsdXNoOwpAQCAtNzAyLDcgKzc2Niw3IEBACiBzdGF0aWMgaW50IGt2bV9oYW5kbGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsCiAJCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApKQogewotCWludCBpOworCWludCBpLCBqOwogCWludCByZXR2YWwgPSAwOwogCiAJLyoKQEAgLTcyMSwxMSArNzg1LDE1IEBACiAJCWVuZCA9IHN0YXJ0ICsgKG1lbXNsb3QtPm5wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAkJaWYgKGh2YSA+PSBzdGFydCAmJiBodmEgPCBlbmQpIHsKIAkJCWdmbl90IGdmbl9vZmZzZXQgPSAoaHZhIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisKIAkJCXJldHZhbCB8PSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0pOwotCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLAotCQkJCQkgICZtZW1zbG90LT5scGFnZV9pbmZvWwotCQkJCQkJICBnZm5fb2Zmc2V0IC8KLQkJCQkJCSAgS1ZNX1BBR0VTX1BFUl9IUEFHRV0ucm1hcF9wZGUpOworCisJCQlmb3IgKGogPSAwOyBqIDwgS1ZNX05SX1BBR0VfU0laRVMgLSAxOyArK2opIHsKKwkJCQlpbnQgaWR4ID0gZ2ZuX29mZnNldDsKKwkJCQlpZHggLz0gS1ZNX1BBR0VTX1BFUl9IUEFHRShQVF9ESVJFQ1RPUllfTEVWRUwgKyBqKTsKKwkJCQlyZXR2YWwgfD0gaGFuZGxlcihrdm0sCisJCQkJCSZtZW1zbG90LT5scGFnZV9pbmZvW2pdW2lkeF0ucm1hcF9wZGUpOworCQkJfQogCQl9CiAJfQogCkBAIC03NjMsMTIgKzgzMSwxNSBAQAogCiAjZGVmaW5lIFJNQVBfUkVDWUNMRV9USFJFU0hPTEQgMTAwMAogCi1zdGF0aWMgdm9pZCBybWFwX3JlY3ljbGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sIGludCBscGFnZSkKK3N0YXRpYyB2b2lkIHJtYXBfcmVjeWNsZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZSwgZ2ZuX3QgZ2ZuKQogewogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOworCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwOworCisJc3AgPSBwYWdlX2hlYWRlcihfX3BhKHNwdGUpKTsKIAogCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgZ2ZuKTsKLQlybWFwcCA9IGdmbl90b19ybWFwKHZjcHUtPmt2bSwgZ2ZuLCBscGFnZSk7CisJcm1hcHAgPSBnZm5fdG9fcm1hcCh2Y3B1LT5rdm0sIGdmbiwgc3AtPnJvbGUubGV2ZWwpOwogCiAJa3ZtX3VubWFwX3JtYXBwKHZjcHUtPmt2bSwgcm1hcHApOwogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwpAQCAtMTEwOSw2ICsxMTgwLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCisJdHJhY2Vfa3ZtX21tdV9zeW5jX3BhZ2Uoc3ApOwogCWlmIChybWFwX3dyaXRlX3Byb3RlY3QodmNwdS0+a3ZtLCBzcC0+Z2ZuKSkKIAkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJa3ZtX3VubGlua191bnN5bmNfcGFnZSh2Y3B1LT5rdm0sIHNwKTsKQEAgLTEyMzEsOCArMTMwMyw2IEBACiAJCXF1YWRyYW50ICY9ICgxIDw8ICgoUFQzMl9QVF9CSVRTIC0gUFQ2NF9QVF9CSVRTKSAqIGxldmVsKSkgLSAxOwogCQlyb2xlLnF1YWRyYW50ID0gcXVhZHJhbnQ7CiAJfQotCXBncHJpbnRrKCIlczogbG9va2luZyBnZm4gJWx4IHJvbGUgJXhcbiIsIF9fZnVuY19fLAotCQkgZ2ZuLCByb2xlLndvcmQpOwogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKGdmbik7CiAJYnVja2V0ID0gJnZjcHUtPmt2bS0+YXJjaC5tbXVfcGFnZV9oYXNoW2luZGV4XTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNwLCBub2RlLCB0bXAsIGJ1Y2tldCwgaGFzaF9saW5rKQpAQCAtMTI0OSwxNCArMTMxOSwxMyBAQAogCQkJCXNldF9iaXQoS1ZNX1JFUV9NTVVfU1lOQywgJnZjcHUtPnJlcXVlc3RzKTsKIAkJCQlrdm1fbW11X21hcmtfcGFyZW50c191bnN5bmModmNwdSwgc3ApOwogCQkJfQotCQkJcGdwcmludGsoIiVzOiBmb3VuZFxuIiwgX19mdW5jX18pOworCQkJdHJhY2Vfa3ZtX21tdV9nZXRfcGFnZShzcCwgZmFsc2UpOwogCQkJcmV0dXJuIHNwOwogCQl9CiAJKyt2Y3B1LT5rdm0tPnN0YXQubW11X2NhY2hlX21pc3M7CiAJc3AgPSBrdm1fbW11X2FsbG9jX3BhZ2UodmNwdSwgcGFyZW50X3B0ZSk7CiAJaWYgKCFzcCkKIAkJcmV0dXJuIHNwOwotCXBncHJpbnRrKCIlczogYWRkaW5nIGdmbiAlbHggcm9sZSAleFxuIiwgX19mdW5jX18sIGdmbiwgcm9sZS53b3JkKTsKIAlzcC0+Z2ZuID0gZ2ZuOwogCXNwLT5yb2xlID0gcm9sZTsKIAlobGlzdF9hZGRfaGVhZCgmc3AtPmhhc2hfbGluaywgYnVja2V0KTsKQEAgLTEyNjksNiArMTMzOCw3IEBACiAJCXZjcHUtPmFyY2gubW11LnByZWZldGNoX3BhZ2UodmNwdSwgc3ApOwogCWVsc2UKIAkJbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2UodmNwdSwgc3ApOworCXRyYWNlX2t2bV9tbXVfZ2V0X3BhZ2Uoc3AsIHRydWUpOwogCXJldHVybiBzcDsKIH0KIApAQCAtMTI5Miw2ICsxMzYyLDExIEBACiB7CiAJaWYgKGl0ZXJhdG9yLT5sZXZlbCA8IFBUX1BBR0VfVEFCTEVfTEVWRUwpCiAJCXJldHVybiBmYWxzZTsKKworCWlmIChpdGVyYXRvci0+bGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkKKwkJaWYgKGlzX2xhcmdlX3B0ZSgqaXRlcmF0b3ItPnNwdGVwKSkKKwkJCXJldHVybiBmYWxzZTsKKwogCWl0ZXJhdG9yLT5pbmRleCA9IFNIQURPV19QVF9JTkRFWChpdGVyYXRvci0+YWRkciwgaXRlcmF0b3ItPmxldmVsKTsKIAlpdGVyYXRvci0+c3B0ZXAJPSAoKHU2NCAqKV9fdmEoaXRlcmF0b3ItPnNoYWRvd19hZGRyKSkgKyBpdGVyYXRvci0+aW5kZXg7CiAJcmV0dXJuIHRydWU7CkBAIC0xMzEyLDI1ICsxMzg3LDE3IEBACiAKIAlwdCA9IHNwLT5zcHQ7CiAKLQlpZiAoc3AtPnJvbGUubGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgUFQ2NF9FTlRfUEVSX1BBR0U7ICsraSkgewotCQkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShwdFtpXSkpCi0JCQkJcm1hcF9yZW1vdmUoa3ZtLCAmcHRbaV0pOwotCQkJcHRbaV0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKLQkJfQotCQlyZXR1cm47Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IFBUNjRfRU5UX1BFUl9QQUdFOyArK2kpIHsKIAkJZW50ID0gcHRbaV07CiAKIAkJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShlbnQpKSB7Ci0JCQlpZiAoIWlzX2xhcmdlX3B0ZShlbnQpKSB7CisJCQlpZiAoIWlzX2xhc3Rfc3B0ZShlbnQsIHNwLT5yb2xlLmxldmVsKSkgewogCQkJCWVudCAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOwogCQkJCW1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKHBhZ2VfaGVhZGVyKGVudCksCiAJCQkJCQkJICAgJnB0W2ldKTsKIAkJCX0gZWxzZSB7Ci0JCQkJLS1rdm0tPnN0YXQubHBhZ2VzOworCQkJCWlmIChpc19sYXJnZV9wdGUoZW50KSkKKwkJCQkJLS1rdm0tPnN0YXQubHBhZ2VzOwogCQkJCXJtYXBfcmVtb3ZlKGt2bSwgJnB0W2ldKTsKIAkJCX0KIAkJfQpAQCAtMTM0NiwxMCArMTQxMywxMCBAQAogc3RhdGljIHZvaWQga3ZtX21tdV9yZXNldF9sYXN0X3B0ZV91cGRhdGVkKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKQotCQlpZiAoa3ZtLT52Y3B1c1tpXSkKLQkJCWt2bS0+dmNwdXNbaV0tPmFyY2gubGFzdF9wdGVfdXBkYXRlZCA9IE5VTEw7CisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQorCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBrdm1fbW11X3VubGlua19wYXJlbnRzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCkBAIC0xMzY4LDcgKzE0MzUsNyBAQAogCQl9CiAJCUJVR19PTighcGFyZW50X3B0ZSk7CiAJCWt2bV9tbXVfcHV0X3BhZ2Uoc3AsIHBhcmVudF9wdGUpOwotCQlzZXRfc2hhZG93X3B0ZShwYXJlbnRfcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCV9fc2V0X3NwdGUocGFyZW50X3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCX0KIH0KIApAQCAtMTQwMCw2ICsxNDY3LDggQEAKIHN0YXRpYyBpbnQga3ZtX21tdV96YXBfcGFnZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCWludCByZXQ7CisKKwl0cmFjZV9rdm1fbW11X3phcF9wYWdlKHNwKTsKIAkrK2t2bS0+c3RhdC5tbXVfc2hhZG93X3phcHBlZDsKIAlyZXQgPSBtbXVfemFwX3Vuc3luY19jaGlsZHJlbihrdm0sIHNwKTsKIAlrdm1fbW11X3BhZ2VfdW5saW5rX2NoaWxkcmVuKGt2bSwgc3ApOwpAQCAtMTUxNiw3ICsxNTg1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CiAJCWlmIChwdFtpXSA9PSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlKQotCQkJc2V0X3NoYWRvd19wdGUoJnB0W2ldLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCQlfX3NldF9zcHRlKCZwdFtpXSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCX0KIH0KIApAQCAtMTY0Niw2ICsxNzE1LDcgQEAKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbjsKIAorCXRyYWNlX2t2bV9tbXVfdW5zeW5jX3BhZ2Uoc3ApOwogCWluZGV4ID0ga3ZtX3BhZ2VfdGFibGVfaGFzaGZuKHNwLT5nZm4pOwogCWJ1Y2tldCA9ICZ2Y3B1LT5rdm0tPmFyY2gubW11X3BhZ2VfaGFzaFtpbmRleF07CiAJLyogZG9uJ3QgdW5zeW5jIGlmIHBhZ2V0YWJsZSBpcyBzaGFkb3dlZCB3aXRoIG11bHRpcGxlIHJvbGVzICovCkBAIC0xNjgyLDkgKzE3NTIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF9zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpzaGFkb3dfcHRlLAorc3RhdGljIGludCBzZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZXAsCiAJCSAgICB1bnNpZ25lZCBwdGVfYWNjZXNzLCBpbnQgdXNlcl9mYXVsdCwKLQkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LCBpbnQgbGFyZ2VwYWdlLAorCQkgICAgaW50IHdyaXRlX2ZhdWx0LCBpbnQgZGlydHksIGludCBsZXZlbCwKIAkJICAgIGdmbl90IGdmbiwgcGZuX3QgcGZuLCBib29sIHNwZWN1bGF0aXZlLAogCQkgICAgYm9vbCBjYW5fdW5zeW5jKQogewpAQCAtMTcwNyw3ICsxNzc3LDcgQEAKIAkJc3B0ZSB8PSBzaGFkb3dfbnhfbWFzazsKIAlpZiAocHRlX2FjY2VzcyAmIEFDQ19VU0VSX01BU0spCiAJCXNwdGUgfD0gc2hhZG93X3VzZXJfbWFzazsKLQlpZiAobGFyZ2VwYWdlKQorCWlmIChsZXZlbCA+IFBUX1BBR0VfVEFCTEVfTEVWRUwpCiAJCXNwdGUgfD0gUFRfUEFHRV9TSVpFX01BU0s7CiAJaWYgKHRkcF9lbmFibGVkKQogCQlzcHRlIHw9IGt2bV94ODZfb3BzLT5nZXRfbXRfbWFzayh2Y3B1LCBnZm4sCkBAIC0xNzE4LDcgKzE3ODgsOCBAQAogCWlmICgocHRlX2FjY2VzcyAmIEFDQ19XUklURV9NQVNLKQogCSAgICB8fCAod3JpdGVfZmF1bHQgJiYgIWlzX3dyaXRlX3Byb3RlY3Rpb24odmNwdSkgJiYgIXVzZXJfZmF1bHQpKSB7CiAKLQkJaWYgKGxhcmdlcGFnZSAmJiBoYXNfd3Jwcm90ZWN0ZWRfcGFnZSh2Y3B1LT5rdm0sIGdmbikpIHsKKwkJaWYgKGxldmVsID4gUFRfUEFHRV9UQUJMRV9MRVZFTCAmJgorCQkgICAgaGFzX3dycHJvdGVjdGVkX3BhZ2UodmNwdS0+a3ZtLCBnZm4sIGxldmVsKSkgewogCQkJcmV0ID0gMTsKIAkJCXNwdGUgPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAkJCWdvdG8gc2V0X3B0ZTsKQEAgLTE3MzIsNyArMTgwMyw3IEBACiAJCSAqIGlzIHJlc3BvbnNpYmlsaXR5IG9mIG1tdV9nZXRfcGFnZSAvIGt2bV9zeW5jX3BhZ2UuCiAJCSAqIFNhbWUgcmVhc29uaW5nIGNhbiBiZSBhcHBsaWVkIHRvIGRpcnR5IHBhZ2UgYWNjb3VudGluZy4KIAkJICovCi0JCWlmICghY2FuX3Vuc3luYyAmJiBpc193cml0ZWJsZV9wdGUoKnNoYWRvd19wdGUpKQorCQlpZiAoIWNhbl91bnN5bmMgJiYgaXNfd3JpdGVibGVfcHRlKCpzcHRlcCkpCiAJCQlnb3RvIHNldF9wdGU7CiAKIAkJaWYgKG1tdV9uZWVkX3dyaXRlX3Byb3RlY3QodmNwdSwgZ2ZuLCBjYW5fdW5zeW5jKSkgewpAQCAtMTc0OSw2NSArMTgyMCw2NyBAQAogCQltYXJrX3BhZ2VfZGlydHkodmNwdS0+a3ZtLCBnZm4pOwogCiBzZXRfcHRlOgotCXNldF9zaGFkb3dfcHRlKHNoYWRvd19wdGUsIHNwdGUpOworCV9fc2V0X3NwdGUoc3B0ZXAsIHNwdGUpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1tdV9zZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc2hhZG93X3B0ZSwKK3N0YXRpYyB2b2lkIG1tdV9zZXRfc3B0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqc3B0ZXAsCiAJCQkgdW5zaWduZWQgcHRfYWNjZXNzLCB1bnNpZ25lZCBwdGVfYWNjZXNzLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwKLQkJCSBpbnQgKnB0d3JpdGUsIGludCBsYXJnZXBhZ2UsIGdmbl90IGdmbiwKKwkJCSBpbnQgKnB0d3JpdGUsIGludCBsZXZlbCwgZ2ZuX3QgZ2ZuLAogCQkJIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSkKIHsKIAlpbnQgd2FzX3JtYXBwZWQgPSAwOwotCWludCB3YXNfd3JpdGVibGUgPSBpc193cml0ZWJsZV9wdGUoKnNoYWRvd19wdGUpOworCWludCB3YXNfd3JpdGVibGUgPSBpc193cml0ZWJsZV9wdGUoKnNwdGVwKTsKIAlpbnQgcm1hcF9jb3VudDsKIAogCXBncHJpbnRrKCIlczogc3B0ZSAlbGx4IGFjY2VzcyAleCB3cml0ZV9mYXVsdCAlZCIKIAkJICIgdXNlcl9mYXVsdCAlZCBnZm4gJWx4XG4iLAotCQkgX19mdW5jX18sICpzaGFkb3dfcHRlLCBwdF9hY2Nlc3MsCisJCSBfX2Z1bmNfXywgKnNwdGVwLCBwdF9hY2Nlc3MsCiAJCSB3cml0ZV9mYXVsdCwgdXNlcl9mYXVsdCwgZ2ZuKTsKIAotCWlmIChpc19ybWFwX3B0ZSgqc2hhZG93X3B0ZSkpIHsKKwlpZiAoaXNfcm1hcF9zcHRlKCpzcHRlcCkpIHsKIAkJLyoKIAkJICogSWYgd2Ugb3ZlcndyaXRlIGEgUFRFIHBhZ2UgcG9pbnRlciB3aXRoIGEgMk1CIFBNRCwgdW5saW5rCiAJCSAqIHRoZSBwYXJlbnQgb2YgdGhlIG5vdyB1bnJlYWNoYWJsZSBQVEUuCiAJCSAqLwotCQlpZiAobGFyZ2VwYWdlICYmICFpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpKSB7CisJCWlmIChsZXZlbCA+IFBUX1BBR0VfVEFCTEVfTEVWRUwgJiYKKwkJICAgICFpc19sYXJnZV9wdGUoKnNwdGVwKSkgewogCQkJc3RydWN0IGt2bV9tbXVfcGFnZSAqY2hpbGQ7Ci0JCQl1NjQgcHRlID0gKnNoYWRvd19wdGU7CisJCQl1NjQgcHRlID0gKnNwdGVwOwogCiAJCQljaGlsZCA9IHBhZ2VfaGVhZGVyKHB0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spOwotCQkJbW11X3BhZ2VfcmVtb3ZlX3BhcmVudF9wdGUoY2hpbGQsIHNoYWRvd19wdGUpOwotCQl9IGVsc2UgaWYgKHBmbiAhPSBzcHRlX3RvX3Bmbigqc2hhZG93X3B0ZSkpIHsKKwkJCW1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKGNoaWxkLCBzcHRlcCk7CisJCX0gZWxzZSBpZiAocGZuICE9IHNwdGVfdG9fcGZuKCpzcHRlcCkpIHsKIAkJCXBncHJpbnRrKCJoZm4gb2xkICVseCBuZXcgJWx4XG4iLAotCQkJCSBzcHRlX3RvX3Bmbigqc2hhZG93X3B0ZSksIHBmbik7Ci0JCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNoYWRvd19wdGUpOworCQkJCSBzcHRlX3RvX3Bmbigqc3B0ZXApLCBwZm4pOworCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7CiAJCX0gZWxzZQogCQkJd2FzX3JtYXBwZWQgPSAxOwogCX0KLQlpZiAoc2V0X3NwdGUodmNwdSwgc2hhZG93X3B0ZSwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCi0JCSAgICAgIGRpcnR5LCBsYXJnZXBhZ2UsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSkpIHsKKworCWlmIChzZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCisJCSAgICAgIGRpcnR5LCBsZXZlbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlKSkgewogCQlpZiAod3JpdGVfZmF1bHQpCiAJCQkqcHR3cml0ZSA9IDE7CiAJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7CiAJfQogCi0JcGdwcmludGsoIiVzOiBzZXR0aW5nIHNwdGUgJWxseFxuIiwgX19mdW5jX18sICpzaGFkb3dfcHRlKTsKKwlwZ3ByaW50aygiJXM6IHNldHRpbmcgc3B0ZSAlbGx4XG4iLCBfX2Z1bmNfXywgKnNwdGVwKTsKIAlwZ3ByaW50aygiaW5zdGFudGlhdGluZyAlcyBQVEUgKCVzKSBhdCAlbGQgKCVsbHgpIGFkZHIgJXBcbiIsCi0JCSBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpPyAiMk1CIiA6ICI0a0IiLAotCQkgaXNfcHJlc2VudF9wdGUoKnNoYWRvd19wdGUpPyJSVyI6IlIiLCBnZm4sCi0JCSAqc2hhZG93X3B0ZSwgc2hhZG93X3B0ZSk7Ci0JaWYgKCF3YXNfcm1hcHBlZCAmJiBpc19sYXJnZV9wdGUoKnNoYWRvd19wdGUpKQorCQkgaXNfbGFyZ2VfcHRlKCpzcHRlcCk/ICIyTUIiIDogIjRrQiIsCisJCSAqc3B0ZXAgJiBQVF9QUkVTRU5UX01BU0sgPyJSVyI6IlIiLCBnZm4sCisJCSAqc3B0ZXAsIHNwdGVwKTsKKwlpZiAoIXdhc19ybWFwcGVkICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKQogCQkrK3ZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CiAKLQlwYWdlX2hlYWRlcl91cGRhdGVfc2xvdCh2Y3B1LT5rdm0sIHNoYWRvd19wdGUsIGdmbik7CisJcGFnZV9oZWFkZXJfdXBkYXRlX3Nsb3QodmNwdS0+a3ZtLCBzcHRlcCwgZ2ZuKTsKIAlpZiAoIXdhc19ybWFwcGVkKSB7Ci0JCXJtYXBfY291bnQgPSBybWFwX2FkZCh2Y3B1LCBzaGFkb3dfcHRlLCBnZm4sIGxhcmdlcGFnZSk7Ci0JCWlmICghaXNfcm1hcF9wdGUoKnNoYWRvd19wdGUpKQorCQlybWFwX2NvdW50ID0gcm1hcF9hZGQodmNwdSwgc3B0ZXAsIGdmbik7CisJCWlmICghaXNfcm1hcF9zcHRlKCpzcHRlcCkpCiAJCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKIAkJaWYgKHJtYXBfY291bnQgPiBSTUFQX1JFQ1lDTEVfVEhSRVNIT0xEKQotCQkJcm1hcF9yZWN5Y2xlKHZjcHUsIGdmbiwgbGFyZ2VwYWdlKTsKKwkJCXJtYXBfcmVjeWNsZSh2Y3B1LCBzcHRlcCwgZ2ZuKTsKIAl9IGVsc2UgewogCQlpZiAod2FzX3dyaXRlYmxlKQogCQkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHBmbik7CkBAIC0xODE1LDcgKzE4ODgsNyBAQAogCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CiAJfQogCWlmIChzcGVjdWxhdGl2ZSkgewotCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBzaGFkb3dfcHRlOworCQl2Y3B1LT5hcmNoLmxhc3RfcHRlX3VwZGF0ZWQgPSBzcHRlcDsKIAkJdmNwdS0+YXJjaC5sYXN0X3B0ZV9nZm4gPSBnZm47CiAJfQogfQpAQCAtMTgyNSw3ICsxODk4LDcgQEAKIH0KIAogc3RhdGljIGludCBfX2RpcmVjdF9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCB2LCBpbnQgd3JpdGUsCi0JCQlpbnQgbGFyZ2VwYWdlLCBnZm5fdCBnZm4sIHBmbl90IHBmbikKKwkJCWludCBsZXZlbCwgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4pCiB7CiAJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKQEAgLTE4MzMsMTEgKzE5MDYsMTAgQEAKIAlnZm5fdCBwc2V1ZG9fZ2ZuOwogCiAJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsICh1NjQpZ2ZuIDw8IFBBR0VfU0hJRlQsIGl0ZXJhdG9yKSB7Ci0JCWlmIChpdGVyYXRvci5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JCSAgICB8fCAobGFyZ2VwYWdlICYmIGl0ZXJhdG9yLmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJaWYgKGl0ZXJhdG9yLmxldmVsID09IGxldmVsKSB7CiAJCQltbXVfc2V0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCiAJCQkJICAgICAwLCB3cml0ZSwgMSwgJnB0X3dyaXRlLAotCQkJCSAgICAgbGFyZ2VwYWdlLCBnZm4sIHBmbiwgZmFsc2UpOworCQkJCSAgICAgbGV2ZWwsIGdmbiwgcGZuLCBmYWxzZSk7CiAJCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CiAJCQlicmVhazsKIAkJfQpAQCAtMTg1MywxMCArMTkyNSwxMCBAQAogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCi0JCQlzZXRfc2hhZG93X3B0ZShpdGVyYXRvci5zcHRlcCwKLQkJCQkgICAgICAgX19wYShzcC0+c3B0KQotCQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKLQkJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7CisJCQlfX3NldF9zcHRlKGl0ZXJhdG9yLnNwdGVwLAorCQkJCSAgIF9fcGEoc3AtPnNwdCkKKwkJCQkgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKKwkJCQkgICB8IHNoYWRvd191c2VyX21hc2sgfCBzaGFkb3dfeF9tYXNrKTsKIAkJfQogCX0KIAlyZXR1cm4gcHRfd3JpdGU7CkBAIC0xODY1LDE0ICsxOTM3LDIwIEBACiBzdGF0aWMgaW50IG5vbnBhZ2luZ19tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2LCBpbnQgd3JpdGUsIGdmbl90IGdmbikKIHsKIAlpbnQgcjsKLQlpbnQgbGFyZ2VwYWdlID0gMDsKKwlpbnQgbGV2ZWw7CiAJcGZuX3QgcGZuOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIAotCWlmIChpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKSkpIHsKLQkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKLQkJbGFyZ2VwYWdlID0gMTsKLQl9CisJbGV2ZWwgPSBtYXBwaW5nX2xldmVsKHZjcHUsIGdmbik7CisKKwkvKgorCSAqIFRoaXMgcGF0aCBidWlsZHMgYSBQQUUgcGFnZXRhYmxlIC0gc28gd2UgY2FuIG1hcCAybWIgcGFnZXMgYXQKKwkgKiBtYXhpbXVtLiBUaGVyZWZvcmUgY2hlY2sgaWYgdGhlIGxldmVsIGlzIGxhcmdlciB0aGFuIHRoYXQuCisJICovCisJaWYgKGxldmVsID4gUFRfRElSRUNUT1JZX0xFVkVMKQorCQlsZXZlbCA9IFBUX0RJUkVDVE9SWV9MRVZFTDsKKworCWdmbiAmPSB+KEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpIC0gMSk7CiAKIAltbXVfc2VxID0gdmNwdS0+a3ZtLT5tbXVfbm90aWZpZXJfc2VxOwogCXNtcF9ybWIoKTsKQEAgLTE4ODgsNyArMTk2Niw3IEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCBtbXVfc2VxKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwotCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIGxhcmdlcGFnZSwgZ2ZuLCBwZm4pOworCXIgPSBfX2RpcmVjdF9tYXAodmNwdSwgdiwgd3JpdGUsIGxldmVsLCBnZm4sIHBmbik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCiAKQEAgLTE5NTQsNiArMjAzMiw3IEBACiAJZ2ZuX3Qgcm9vdF9nZm47CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAJaW50IGRpcmVjdCA9IDA7CisJdTY0IHBkcHRyOwogCiAJcm9vdF9nZm4gPSB2Y3B1LT5hcmNoLmNyMyA+PiBQQUdFX1NISUZUOwogCkBAIC0xOTgxLDExICsyMDYwLDEyIEBACiAKIAkJQVNTRVJUKCFWQUxJRF9QQUdFKHJvb3QpKTsKIAkJaWYgKHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWwgPT0gUFQzMkVfUk9PVF9MRVZFTCkgewotCQkJaWYgKCFpc19wcmVzZW50X3B0ZSh2Y3B1LT5hcmNoLnBkcHRyc1tpXSkpIHsKKwkJCXBkcHRyID0ga3ZtX3BkcHRyX3JlYWQodmNwdSwgaSk7CisJCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShwZHB0cikpIHsKIAkJCQl2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFtpXSA9IDA7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlyb290X2dmbiA9IHZjcHUtPmFyY2gucGRwdHJzW2ldID4+IFBBR0VfU0hJRlQ7CisJCQlyb290X2dmbiA9IHBkcHRyID4+IFBBR0VfU0hJRlQ7CiAJCX0gZWxzZSBpZiAodmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCA9PSAwKQogCQkJcm9vdF9nZm4gPSAwOwogCQlpZiAobW11X2NoZWNrX3Jvb3QodmNwdSwgcm9vdF9nZm4pKQpAQCAtMjA2Miw3ICsyMTQyLDcgQEAKIHsKIAlwZm5fdCBwZm47CiAJaW50IHI7Ci0JaW50IGxhcmdlcGFnZSA9IDA7CisJaW50IGxldmVsOwogCWdmbl90IGdmbiA9IGdwYSA+PiBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgbW11X3NlcTsKIApAQCAtMjA3MywxMCArMjE1MywxMCBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCWlmIChpc19sYXJnZXBhZ2VfYmFja2VkKHZjcHUsIGdmbiAmIH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKSkpIHsKLQkJZ2ZuICY9IH4oS1ZNX1BBR0VTX1BFUl9IUEFHRS0xKTsKLQkJbGFyZ2VwYWdlID0gMTsKLQl9CisJbGV2ZWwgPSBtYXBwaW5nX2xldmVsKHZjcHUsIGdmbik7CisKKwlnZm4gJj0gfihLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSAtIDEpOworCiAJbW11X3NlcSA9IHZjcHUtPmt2bS0+bW11X25vdGlmaWVyX3NlcTsKIAlzbXBfcm1iKCk7CiAJcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7CkBAIC0yMDg5LDcgKzIxNjksNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJa3ZtX21tdV9mcmVlX3NvbWVfcGFnZXModmNwdSk7CiAJciA9IF9fZGlyZWN0X21hcCh2Y3B1LCBncGEsIGVycm9yX2NvZGUgJiBQRkVSUl9XUklURV9NQVNLLAotCQkJIGxhcmdlcGFnZSwgZ2ZuLCBwZm4pOworCQkJIGxldmVsLCBnZm4sIHBmbik7CiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogCiAJcmV0dXJuIHI7CkBAIC0yMjA2LDcgKzIyODYsOSBAQAogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1swXVswXSA9IGV4Yl9iaXRfcnN2ZCB8CiAJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVszXSA9IGNvbnRleHQtPnJzdmRfYml0c19tYXNrWzBdWzNdOwotCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsyXSA9IGNvbnRleHQtPnJzdmRfYml0c19tYXNrWzBdWzJdOworCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsyXSA9IGV4Yl9iaXRfcnN2ZCB8CisJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwKKwkJCXJzdmRfYml0cygxMywgMjkpOwogCQljb250ZXh0LT5yc3ZkX2JpdHNfbWFza1sxXVsxXSA9IGV4Yl9iaXRfcnN2ZCB8CiAJCQlyc3ZkX2JpdHMobWF4cGh5YWRkciwgNTEpIHwKIAkJCXJzdmRfYml0cygxMywgMjApOwkJLyogbGFyZ2UgcGFnZSAqLwpAQCAtMjM1Nyw4ICsyNDM5LDggQEAKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OworCS8qIHNldF9jcjMoKSBzaG91bGQgZW5zdXJlIFRMQiBoYXMgYmVlbiBmbHVzaGVkICovCiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjModmNwdSwgdmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpOwotCWt2bV9tbXVfZmx1c2hfdGxiKHZjcHUpOwogb3V0OgogCXJldHVybiByOwogfQpAQCAtMjM3OCwxNSArMjQ2MCwxNCBAQAogCiAJcHRlID0gKnNwdGU7CiAJaWYgKGlzX3NoYWRvd19wcmVzZW50X3B0ZShwdGUpKSB7Ci0JCWlmIChzcC0+cm9sZS5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMIHx8Ci0JCSAgICBpc19sYXJnZV9wdGUocHRlKSkKKwkJaWYgKGlzX2xhc3Rfc3B0ZShwdGUsIHNwLT5yb2xlLmxldmVsKSkKIAkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZSk7CiAJCWVsc2UgewogCQkJY2hpbGQgPSBwYWdlX2hlYWRlcihwdGUgJiBQVDY0X0JBU0VfQUREUl9NQVNLKTsKIAkJCW1tdV9wYWdlX3JlbW92ZV9wYXJlbnRfcHRlKGNoaWxkLCBzcHRlKTsKIAkJfQogCX0KLQlzZXRfc2hhZG93X3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJX19zZXRfc3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJaWYgKGlzX2xhcmdlX3B0ZShwdGUpKQogCQktLXZjcHUtPmt2bS0+c3RhdC5scGFnZXM7CiB9CkBAIC0yMzk3LDExICsyNDc4LDggQEAKIAkJCQkgIGNvbnN0IHZvaWQgKm5ldykKIHsKIAlpZiAoc3AtPnJvbGUubGV2ZWwgIT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgewotCQlpZiAoIXZjcHUtPmFyY2gudXBkYXRlX3B0ZS5sYXJnZXBhZ2UgfHwKLQkJICAgIHNwLT5yb2xlLmdsZXZlbHMgPT0gUFQzMl9ST09UX0xFVkVMKSB7Ci0JCQkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcGRlX3phcHBlZDsKLQkJCXJldHVybjsKLQkJfQorCQkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcGRlX3phcHBlZDsKKwkJcmV0dXJuOwogICAgICAgICB9CiAKIAkrK3ZjcHUtPmt2bS0+c3RhdC5tbXVfcHRlX3VwZGF0ZWQ7CkBAIC0yNDQ3LDggKzI1MjUsNiBAQAogCXU2NCBncHRlID0gMDsKIAlwZm5fdCBwZm47CiAKLQl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubGFyZ2VwYWdlID0gMDsKLQogCWlmIChieXRlcyAhPSA0ICYmIGJ5dGVzICE9IDgpCiAJCXJldHVybjsKIApAQCAtMjQ3MiwxNCArMjU0OCwxMCBAQAogCQlpZiAoKGJ5dGVzID09IDQpICYmIChncGEgJSA0ID09IDApKQogCQkJbWVtY3B5KCh2b2lkICopJmdwdGUsIG5ldywgNCk7CiAJfQotCWlmICghaXNfcHJlc2VudF9wdGUoZ3B0ZSkpCisJaWYgKCFpc19wcmVzZW50X2dwdGUoZ3B0ZSkpCiAJCXJldHVybjsKIAlnZm4gPSAoZ3B0ZSAmIFBUNjRfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CiAKLQlpZiAoaXNfbGFyZ2VfcHRlKGdwdGUpICYmIGlzX2xhcmdlcGFnZV9iYWNrZWQodmNwdSwgZ2ZuKSkgewotCQlnZm4gJj0gfihLVk1fUEFHRVNfUEVSX0hQQUdFLTEpOwotCQl2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubGFyZ2VwYWdlID0gMTsKLQl9CiAJdmNwdS0+YXJjaC51cGRhdGVfcHRlLm1tdV9zZXEgPSB2Y3B1LT5rdm0tPm1tdV9ub3RpZmllcl9zZXE7CiAJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCBnZm4pOwpAQCAtMjYyMiw2ICsyNjk0LDkgQEAKIAlncGFfdCBncGE7CiAJaW50IHI7CiAKKwlpZiAodGRwX2VuYWJsZWQpCisJCXJldHVybiAwOworCiAJZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBndmEpOwogCiAJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKQEAgLTI2MzMsNyArMjcwOCw4IEBACiAKIHZvaWQgX19rdm1fbW11X2ZyZWVfc29tZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jd2hpbGUgKHZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzIDwgS1ZNX1JFRklMTF9QQUdFUykgeworCXdoaWxlICh2Y3B1LT5rdm0tPmFyY2gubl9mcmVlX21tdV9wYWdlcyA8IEtWTV9SRUZJTExfUEFHRVMgJiYKKwkgICAgICAgIWxpc3RfZW1wdHkoJnZjcHUtPmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKSkgewogCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAogCQlzcCA9IGNvbnRhaW5lcl9vZih2Y3B1LT5rdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcy5wcmV2LApAQCAtMjY3MCw4ICsyNzQ2LDkgQEAKIAkJKyt2Y3B1LT5zdGF0Lm1taW9fZXhpdHM7CiAJCXJldHVybiAwOwogCWNhc2UgRU1VTEFURV9GQUlMOgotCQlrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKHZjcHUsICJwYWdldGFibGUiKTsKLQkJcmV0dXJuIDE7CisJCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUjsKKwkJdmNwdS0+cnVuLT5pbnRlcm5hbC5zdWJlcnJvciA9IEtWTV9JTlRFUk5BTF9FUlJPUl9FTVVMQVRJT047CisJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTI3MTIsMTIgKzI3ODksNiBAQAogCiAJQVNTRVJUKHZjcHUpOwogCi0JaWYgKHZjcHUtPmt2bS0+YXJjaC5uX3JlcXVlc3RlZF9tbXVfcGFnZXMpCi0JCXZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzID0KLQkJCQkJdmNwdS0+a3ZtLT5hcmNoLm5fcmVxdWVzdGVkX21tdV9wYWdlczsKLQllbHNlCi0JCXZjcHUtPmt2bS0+YXJjaC5uX2ZyZWVfbW11X3BhZ2VzID0KLQkJCQkJdmNwdS0+a3ZtLT5hcmNoLm5fYWxsb2NfbW11X3BhZ2VzOwogCS8qCiAJICogV2hlbiBlbXVsYXRpbmcgMzItYml0IG1vZGUsIGNyMyBpcyBvbmx5IDMyIGJpdHMgZXZlbiBvbiB4ODZfNjQuCiAJICogVGhlcmVmb3JlIHdlIG5lZWQgdG8gYWxsb2NhdGUgc2hhZG93IHBhZ2UgdGFibGVzIGluIHRoZSBmaXJzdApAQCAtMzAyOSw2ICszMTAwLDI0IEBACiAJcmV0dXJuIHI7CiB9CiAKK2ludCBrdm1fbW11X2dldF9zcHRlX2hpZXJhcmNoeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLCB1NjQgc3B0ZXNbNF0pCit7CisJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKKwlpbnQgbnJfc3B0ZXMgPSAwOworCisJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKKwlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgYWRkciwgaXRlcmF0b3IpIHsKKwkJc3B0ZXNbaXRlcmF0b3IubGV2ZWwtMV0gPSAqaXRlcmF0b3Iuc3B0ZXA7CisJCW5yX3NwdGVzKys7CisJCWlmICghaXNfc2hhZG93X3ByZXNlbnRfcHRlKCppdGVyYXRvci5zcHRlcCkpCisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOworCisJcmV0dXJuIG5yX3NwdGVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX21tdV9nZXRfc3B0ZV9oaWVyYXJjaHkpOworCiAjaWZkZWYgQVVESVQKIAogc3RhdGljIGNvbnN0IGNoYXIgKmF1ZGl0X21zZzsKQEAgLTMwNDEsNiArMzEzMCw1NCBAQAogCXJldHVybiBndmE7CiB9CiAKKwordHlwZWRlZiB2b2lkICgqaW5zcGVjdF9zcHRlX2ZuKSAoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCwKKwkJCQkgdTY0ICpzcHRlcCk7CisKK3N0YXRpYyB2b2lkIF9fbW11X3NwdGVfd2FsayhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLAorCQkJICAgIGluc3BlY3Rfc3B0ZV9mbiBmbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQVDY0X0VOVF9QRVJfUEFHRTsgKytpKSB7CisJCXU2NCBlbnQgPSBzcC0+c3B0W2ldOworCisJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoZW50KSkgeworCQkJaWYgKCFpc19sYXN0X3NwdGUoZW50LCBzcC0+cm9sZS5sZXZlbCkpIHsKKwkJCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpjaGlsZDsKKwkJCQljaGlsZCA9IHBhZ2VfaGVhZGVyKGVudCAmIFBUNjRfQkFTRV9BRERSX01BU0spOworCQkJCV9fbW11X3NwdGVfd2Fsayhrdm0sIGNoaWxkLCBmbik7CisJCQl9IGVsc2UKKwkJCQlmbihrdm0sIHNwLCAmc3AtPnNwdFtpXSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1tdV9zcHRlX3dhbGsoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnNwZWN0X3NwdGVfZm4gZm4pCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CisKKwlpZiAoIVZBTElEX1BBR0UodmNwdS0+YXJjaC5tbXUucm9vdF9ocGEpKQorCQlyZXR1cm47CisJaWYgKHZjcHUtPmFyY2gubW11LnNoYWRvd19yb290X2xldmVsID09IFBUNjRfUk9PVF9MRVZFTCkgeworCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucm9vdF9ocGE7CisJCXNwID0gcGFnZV9oZWFkZXIocm9vdCk7CisJCV9fbW11X3NwdGVfd2Fsayh2Y3B1LT5rdm0sIHNwLCBmbik7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbaV07CisKKwkJaWYgKHJvb3QgJiYgVkFMSURfUEFHRShyb290KSkgeworCQkJcm9vdCAmPSBQVDY0X0JBU0VfQUREUl9NQVNLOworCQkJc3AgPSBwYWdlX2hlYWRlcihyb290KTsKKwkJCV9fbW11X3NwdGVfd2Fsayh2Y3B1LT5rdm0sIHNwLCBmbik7CisJCX0KKwl9CisJcmV0dXJuOworfQorCiBzdGF0aWMgdm9pZCBhdWRpdF9tYXBwaW5nc19wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhZ2VfcHRlLAogCQkJCWd2YV90IHZhLCBpbnQgbGV2ZWwpCiB7CkBAIC0zMDU1LDIwICszMTkyLDE5IEBACiAJCQljb250aW51ZTsKIAogCQl2YSA9IGNhbm9uaWNhbGl6ZSh2YSk7Ci0JCWlmIChsZXZlbCA+IDEpIHsKLQkJCWlmIChlbnQgPT0gc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZSkKLQkJCQlwcmludGsoS0VSTl9FUlIgImF1ZGl0OiAoJXMpIG5vbnRyYXBwaW5nIHB0ZSIKLQkJCQkgICAgICAgIiBpbiBub25sZWFmIGxldmVsOiBsZXZlbHMgJWQgZ3ZhICVseCIKLQkJCQkgICAgICAgIiBsZXZlbCAlZCBwdGUgJWxseFxuIiwgYXVkaXRfbXNnLAotCQkJCSAgICAgICB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsLCB2YSwgbGV2ZWwsIGVudCk7Ci0JCQllbHNlCi0JCQkJYXVkaXRfbWFwcGluZ3NfcGFnZSh2Y3B1LCBlbnQsIHZhLCBsZXZlbCAtIDEpOwotCQl9IGVsc2UgeworCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGVudCkgJiYgIWlzX2xhc3Rfc3B0ZShlbnQsIGxldmVsKSkKKwkJCWF1ZGl0X21hcHBpbmdzX3BhZ2UodmNwdSwgZW50LCB2YSwgbGV2ZWwgLSAxKTsKKwkJZWxzZSB7CiAJCQlncGFfdCBncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIHZhKTsKIAkJCWdmbl90IGdmbiA9IGdwYSA+PiBQQUdFX1NISUZUOwogCQkJcGZuX3QgcGZuID0gZ2ZuX3RvX3Bmbih2Y3B1LT5rdm0sIGdmbik7CiAJCQlocGFfdCBocGEgPSAoaHBhX3QpcGZuIDw8IFBBR0VfU0hJRlQ7CiAKKwkJCWlmIChpc19lcnJvcl9wZm4ocGZuKSkgeworCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKGVudCkKIAkJCSAgICAmJiAoZW50ICYgUFQ2NF9CQVNFX0FERFJfTUFTSykgIT0gaHBhKQogCQkJCXByaW50ayhLRVJOX0VSUiAieHggYXVkaXQgZXJyb3I6ICglcykgbGV2ZWxzICVkIgpAQCAtMzEyMiw3ICszMjU4LDcgQEAKIAkJCWQgPSAoc3RydWN0IGt2bV9ybWFwX2Rlc2MgKikoKnJtYXBwICYgfjF1bCk7CiAJCQl3aGlsZSAoZCkgewogCQkJCWZvciAoayA9IDA7IGsgPCBSTUFQX0VYVDsgKytrKQotCQkJCQlpZiAoZC0+c2hhZG93X3B0ZXNba10pCisJCQkJCWlmIChkLT5zcHRlc1trXSkKIAkJCQkJCSsrbm1hcHM7CiAJCQkJCWVsc2UKIAkJCQkJCWJyZWFrOwpAQCAtMzEzMyw5ICszMjY5LDQ4IEBACiAJcmV0dXJuIG5tYXBzOwogfQogCi1zdGF0aWMgaW50IGNvdW50X3dyaXRhYmxlX21hcHBpbmdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3ZvaWQgaW5zcGVjdF9zcHRlX2hhc19ybWFwKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHU2NCAqc3B0ZXApCiB7Ci0JaW50IG5tYXBzID0gMDsKKwl1bnNpZ25lZCBsb25nICpybWFwcDsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpyZXZfc3A7CisJZ2ZuX3QgZ2ZuOworCisJaWYgKCpzcHRlcCAmIFBUX1dSSVRBQkxFX01BU0spIHsKKwkJcmV2X3NwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOworCQlnZm4gPSByZXZfc3AtPmdmbnNbc3B0ZXAgLSByZXZfc3AtPnNwdF07CisKKwkJaWYgKCFnZm5fdG9fbWVtc2xvdChrdm0sIGdmbikpIHsKKwkJCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXJldHVybjsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbXNsb3QgZm9yIGdmbiAlbGRcbiIsCisJCQkJCSBhdWRpdF9tc2csIGdmbik7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbmRleCAlbGQgb2Ygc3AgKGdmbj0lbHgpXG4iLAorCQkJCQlhdWRpdF9tc2csIHNwdGVwIC0gcmV2X3NwLT5zcHQsCisJCQkJCXJldl9zcC0+Z2ZuKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXJtYXBwID0gZ2ZuX3RvX3JtYXAoa3ZtLCByZXZfc3AtPmdmbnNbc3B0ZXAgLSByZXZfc3AtPnNwdF0sCisJCQkJICAgIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKTsKKwkJaWYgKCEqcm1hcHApIHsKKwkJCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCXJldHVybjsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHJtYXAgZm9yIHdyaXRhYmxlIHNwdGUgJWxseFxuIiwKKwkJCQkJIGF1ZGl0X21zZywgKnNwdGVwKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJfQorCX0KKworfQorCit2b2lkIGF1ZGl0X3dyaXRhYmxlX3NwdGVzX2hhdmVfcm1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCW1tdV9zcHRlX3dhbGsodmNwdSwgaW5zcGVjdF9zcHRlX2hhc19ybWFwKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfd3JpdGFibGVfbWFwcGluZ3Nfcm1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7CiAJaW50IGk7CiAKQEAgLTMxNTIsMjAgKzMzMjcsMTYgQEAKIAkJCQljb250aW51ZTsKIAkJCWlmICghKGVudCAmIFBUX1dSSVRBQkxFX01BU0spKQogCQkJCWNvbnRpbnVlOwotCQkJKytubWFwczsKKwkJCWluc3BlY3Rfc3B0ZV9oYXNfcm1hcCh2Y3B1LT5rdm0sIHNwLCAmcHRbaV0pOwogCQl9CiAJfQotCXJldHVybiBubWFwczsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGF1ZGl0X3JtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWludCBuX3JtYXAgPSBjb3VudF9ybWFwcyh2Y3B1KTsKLQlpbnQgbl9hY3R1YWwgPSBjb3VudF93cml0YWJsZV9tYXBwaW5ncyh2Y3B1KTsKLQotCWlmIChuX3JtYXAgIT0gbl9hY3R1YWwpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICglcykgcm1hcCAlZCBhY3R1YWwgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgYXVkaXRfbXNnLCBuX3JtYXAsIG5fYWN0dWFsKTsKKwljaGVja193cml0YWJsZV9tYXBwaW5nc19ybWFwKHZjcHUpOworCWNvdW50X3JtYXBzKHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCBhdWRpdF93cml0ZV9wcm90ZWN0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTMxNzMsMjAgKzMzNDQsMjggQEAKIAlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwogCXVuc2lnbmVkIGxvbmcgKnJtYXBwOworCXU2NCAqc3B0ZTsKIAlnZm5fdCBnZm47CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCAmdmNwdS0+a3ZtLT5hcmNoLmFjdGl2ZV9tbXVfcGFnZXMsIGxpbmspIHsKIAkJaWYgKHNwLT5yb2xlLmRpcmVjdCkKIAkJCWNvbnRpbnVlOworCQlpZiAoc3AtPnVuc3luYykKKwkJCWNvbnRpbnVlOwogCiAJCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgc3AtPmdmbik7CiAJCXNsb3QgPSBnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQodmNwdS0+a3ZtLCBzcC0+Z2ZuKTsKIAkJcm1hcHAgPSAmc2xvdC0+cm1hcFtnZm4gLSBzbG90LT5iYXNlX2dmbl07Ci0JCWlmICgqcm1hcHApCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiAoJXMpIHNoYWRvdyBwYWdlIGhhcyB3cml0YWJsZSIKLQkJCSAgICAgICAiIG1hcHBpbmdzOiBnZm4gJWx4IHJvbGUgJXhcbiIsCisKKwkJc3B0ZSA9IHJtYXBfbmV4dCh2Y3B1LT5rdm0sIHJtYXBwLCBOVUxMKTsKKwkJd2hpbGUgKHNwdGUpIHsKKwkJCWlmICgqc3B0ZSAmIFBUX1dSSVRBQkxFX01BU0spCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogKCVzKSBzaGFkb3cgcGFnZSBoYXMgIgorCQkJCSJ3cml0YWJsZSBtYXBwaW5nczogZ2ZuICVseCByb2xlICV4XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBhdWRpdF9tc2csIHNwLT5nZm4sCiAJCQkgICAgICAgc3AtPnJvbGUud29yZCk7CisJCQlzcHRlID0gcm1hcF9uZXh0KHZjcHUtPmt2bSwgcm1hcHAsIHNwdGUpOworCQl9CiAJfQogfQogCkBAIC0zMTk4LDcgKzMzNzcsOSBAQAogCWF1ZGl0X21zZyA9IG1zZzsKIAlhdWRpdF9ybWFwKHZjcHUpOwogCWF1ZGl0X3dyaXRlX3Byb3RlY3Rpb24odmNwdSk7Ci0JYXVkaXRfbWFwcGluZ3ModmNwdSk7CisJaWYgKHN0cmNtcCgicHJlIHB0ZSB3cml0ZSIsIGF1ZGl0X21zZykgIT0gMCkKKwkJYXVkaXRfbWFwcGluZ3ModmNwdSk7CisJYXVkaXRfd3JpdGFibGVfc3B0ZXNfaGF2ZV9ybWFwcyh2Y3B1KTsKIAlkYmcgPSBvbGRkYmc7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaAppbmRleCAzNDk0YTJmLi42MWExYjM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKKysrIGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC0zNyw2ICszNyw4IEBACiAjZGVmaW5lIFBUMzJfUk9PVF9MRVZFTCAyCiAjZGVmaW5lIFBUMzJFX1JPT1RfTEVWRUwgMwogCitpbnQga3ZtX21tdV9nZXRfc3B0ZV9oaWVyYXJjaHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwgdTY0IHNwdGVzWzRdKTsKKwogc3RhdGljIGlubGluZSB2b2lkIGt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAodW5saWtlbHkodmNwdS0+a3ZtLT5hcmNoLm5fZnJlZV9tbXVfcGFnZXMgPCBLVk1fTUlOX0ZSRUVfTU1VX1BBR0VTKSkKQEAgLTc1LDcgKzc3LDcgQEAKIAlyZXR1cm4gdmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BHOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19wcmVzZW50X3B0ZSh1bnNpZ25lZCBsb25nIHB0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3ByZXNlbnRfZ3B0ZSh1bnNpZ25lZCBsb25nIHB0ZSkKIHsKIAlyZXR1cm4gcHRlICYgUFRfUFJFU0VOVF9NQVNLOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdXRyYWNlLmggYi9hcmNoL3g4Ni9rdm0vbW11dHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRhNWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva3ZtL21tdXRyYWNlLmgKQEAgLTAsMCArMSwyMjAgQEAKKyNpZiAhZGVmaW5lZChfVFJBQ0VfS1ZNTU1VX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9LVk1NTVVfSAorCisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZV9ldmVudC5oPgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBrdm1tbXUKKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4KKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIG1tdXRyYWNlCisKKyNkZWZpbmUgS1ZNX01NVV9QQUdFX0ZJRUxEUyBcCisJX19maWVsZChfX3U2NCwgZ2ZuKSBcCisJX19maWVsZChfX3UzMiwgcm9sZSkgXAorCV9fZmllbGQoX191MzIsIHJvb3RfY291bnQpIFwKKwlfX2ZpZWxkKF9fdTMyLCB1bnN5bmMpCisKKyNkZWZpbmUgS1ZNX01NVV9QQUdFX0FTU0lHTihzcCkJCQkgICAgIFwKKwlfX2VudHJ5LT5nZm4gPSBzcC0+Z2ZuOwkJCSAgICAgXAorCV9fZW50cnktPnJvbGUgPSBzcC0+cm9sZS53b3JkOwkJICAgICBcCisJX19lbnRyeS0+cm9vdF9jb3VudCA9IHNwLT5yb290X2NvdW50OyAgICAgICAgXAorCV9fZW50cnktPnVuc3luYyA9IHNwLT51bnN5bmM7CisKKyNkZWZpbmUgS1ZNX01NVV9QQUdFX1BSSU5USygpICh7CQkJCSAgICAgICAgXAorCWNvbnN0IGNoYXIgKnJldCA9IHAtPmJ1ZmZlciArIHAtPmxlbjsJCQkJXAorCXN0YXRpYyBjb25zdCBjaGFyICphY2Nlc3Nfc3RyW10gPSB7CQkJICAgICAgICBcCisJCSItLS0iLCAiLS14IiwgInctLSIsICJ3LXgiLCAiLXUtIiwgIi11eCIsICJ3dS0iLCAid3V4IiAgXAorCX07CQkJCQkJCSAgICAgICAgXAorCXVuaW9uIGt2bV9tbXVfcGFnZV9yb2xlIHJvbGU7CQkJCSAgICAgICAgXAorCQkJCQkJCQkgICAgICAgIFwKKwlyb2xlLndvcmQgPSBfX2VudHJ5LT5yb2xlOwkJCQkJXAorCQkJCQkJCQkJXAorCXRyYWNlX3NlcV9wcmludGYocCwgInNwIGdmbiAlbGx4ICV1LyV1IHEldSVzICVzJXMgJXNwZ2UiCVwKKwkJCSAiICVzbnhlIHJvb3QgJXUgJXMlYyIsCQkJCVwKKwkJCSBfX2VudHJ5LT5nZm4sIHJvbGUubGV2ZWwsIHJvbGUuZ2xldmVscywJXAorCQkJIHJvbGUucXVhZHJhbnQsCQkJCQlcCisJCQkgcm9sZS5kaXJlY3QgPyAiIGRpcmVjdCIgOiAiIiwJCQlcCisJCQkgYWNjZXNzX3N0cltyb2xlLmFjY2Vzc10sCQkJXAorCQkJIHJvbGUuaW52YWxpZCA/ICIgaW52YWxpZCIgOiAiIiwJCVwKKwkJCSByb2xlLmNyNF9wZ2UgPyAiIiA6ICIhIiwJCQlcCisJCQkgcm9sZS5ueGUgPyAiIiA6ICIhIiwJCQkJXAorCQkJIF9fZW50cnktPnJvb3RfY291bnQsCQkJCVwKKwkJCSBfX2VudHJ5LT51bnN5bmMgPyAidW5zeW5jIiA6ICJzeW5jIiwgMCk7CVwKKwlyZXQ7CQkJCQkJCQlcCisJCX0pCisKKyNkZWZpbmUga3ZtX21tdV90cmFjZV9wZmVycl9mbGFncyAgICAgICBcCisJeyBQRkVSUl9QUkVTRU5UX01BU0ssICJQIiB9LAlcCisJeyBQRkVSUl9XUklURV9NQVNLLCAiVyIgfSwJXAorCXsgUEZFUlJfVVNFUl9NQVNLLCAiVSIgfSwJXAorCXsgUEZFUlJfUlNWRF9NQVNLLCAiUlNWRCIgfSwJXAorCXsgUEZFUlJfRkVUQ0hfTUFTSywgIkYiIH0KKworLyoKKyAqIEEgcGFnZXRhYmxlIHdhbGsgaGFzIHN0YXJ0ZWQKKyAqLworVFJBQ0VfRVZFTlQoCisJa3ZtX21tdV9wYWdldGFibGVfd2FsaywKKwlUUF9QUk9UTyh1NjQgYWRkciwgaW50IHdyaXRlX2ZhdWx0LCBpbnQgdXNlcl9mYXVsdCwgaW50IGZldGNoX2ZhdWx0KSwKKwlUUF9BUkdTKGFkZHIsIHdyaXRlX2ZhdWx0LCB1c2VyX2ZhdWx0LCBmZXRjaF9mYXVsdCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTY0LCBhZGRyKQorCQlfX2ZpZWxkKF9fdTMyLCBwZmVycikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmFkZHIgPSBhZGRyOworCQlfX2VudHJ5LT5wZmVyciA9ICghIXdyaXRlX2ZhdWx0IDw8IDEpIHwgKCEhdXNlcl9mYXVsdCA8PCAyKQorCQkgICAgICAgICAgICAgICAgIHwgKCEhZmV0Y2hfZmF1bHQgPDwgNCk7CisJKSwKKworCVRQX3ByaW50aygiYWRkciAlbGx4IHBmZXJyICV4ICVzIiwgX19lbnRyeS0+YWRkciwgX19lbnRyeS0+cGZlcnIsCisJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5wZmVyciwgInwiLCBrdm1fbW11X3RyYWNlX3BmZXJyX2ZsYWdzKSkKKyk7CisKKworLyogV2UganVzdCB3YWxrZWQgYSBwYWdpbmcgZWxlbWVudCAqLworVFJBQ0VfRVZFTlQoCisJa3ZtX21tdV9wYWdpbmdfZWxlbWVudCwKKwlUUF9QUk9UTyh1NjQgcHRlLCBpbnQgbGV2ZWwpLAorCVRQX0FSR1MocHRlLCBsZXZlbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTY0LCBwdGUpCisJCV9fZmllbGQoX191MzIsIGxldmVsKQorCQkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnB0ZSA9IHB0ZTsKKwkJX19lbnRyeS0+bGV2ZWwgPSBsZXZlbDsKKwkJKSwKKworCVRQX3ByaW50aygicHRlICVsbHggbGV2ZWwgJXUiLCBfX2VudHJ5LT5wdGUsIF9fZW50cnktPmxldmVsKQorKTsKKworLyogV2Ugc2V0IGEgcHRlIGFjY2Vzc2VkIGJpdCAqLworVFJBQ0VfRVZFTlQoCisJa3ZtX21tdV9zZXRfYWNjZXNzZWRfYml0LAorCVRQX1BST1RPKHVuc2lnbmVkIGxvbmcgdGFibGVfZ2ZuLCB1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgc2l6ZSksCisJVFBfQVJHUyh0YWJsZV9nZm4sIGluZGV4LCBzaXplKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoX191NjQsIGdwYSkKKwkJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ncGEgPSAoKHU2NCl0YWJsZV9nZm4gPDwgUEFHRV9TSElGVCkKKwkJCQkrIGluZGV4ICogc2l6ZTsKKwkJKSwKKworCVRQX3ByaW50aygiZ3BhICVsbHgiLCBfX2VudHJ5LT5ncGEpCispOworCisvKiBXZSBzZXQgYSBwdGUgZGlydHkgYml0ICovCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X3NldF9kaXJ0eV9iaXQsCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyB0YWJsZV9nZm4sIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzaXplKSwKKwlUUF9BUkdTKHRhYmxlX2dmbiwgaW5kZXgsIHNpemUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChfX3U2NCwgZ3BhKQorCQkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmdwYSA9ICgodTY0KXRhYmxlX2dmbiA8PCBQQUdFX1NISUZUKQorCQkJCSsgaW5kZXggKiBzaXplOworCQkpLAorCisJVFBfcHJpbnRrKCJncGEgJWxseCIsIF9fZW50cnktPmdwYSkKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bV9tbXVfd2Fsa2VyX2Vycm9yLAorCVRQX1BST1RPKHUzMiBwZmVyciksCisJVFBfQVJHUyhwZmVyciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKF9fdTMyLCBwZmVycikKKwkJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5wZmVyciA9IHBmZXJyOworCQkpLAorCisJVFBfcHJpbnRrKCJwZmVyciAleCAlcyIsIF9fZW50cnktPnBmZXJyLAorCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+cGZlcnIsICJ8Iiwga3ZtX21tdV90cmFjZV9wZmVycl9mbGFncykpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X2dldF9wYWdlLAorCVRQX1BST1RPKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwLCBib29sIGNyZWF0ZWQpLAorCVRQX0FSR1Moc3AsIGNyZWF0ZWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJS1ZNX01NVV9QQUdFX0ZJRUxEUworCQlfX2ZpZWxkKGJvb2wsIGNyZWF0ZWQpCisJCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJS1ZNX01NVV9QQUdFX0FTU0lHTihzcCkKKwkJX19lbnRyeS0+Y3JlYXRlZCA9IGNyZWF0ZWQ7CisJCSksCisKKwlUUF9wcmludGsoIiVzICVzIiwgS1ZNX01NVV9QQUdFX1BSSU5USygpLAorCQkgIF9fZW50cnktPmNyZWF0ZWQgPyAibmV3IiA6ICJleGlzdGluZyIpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X3N5bmNfcGFnZSwKKwlUUF9QUk9UTyhzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCksCisJVFBfQVJHUyhzcCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlLVk1fTU1VX1BBR0VfRklFTERTCisJCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJS1ZNX01NVV9QQUdFX0FTU0lHTihzcCkKKwkJKSwKKworCVRQX3ByaW50aygiJXMiLCBLVk1fTU1VX1BBR0VfUFJJTlRLKCkpCispOworCitUUkFDRV9FVkVOVCgKKwlrdm1fbW11X3Vuc3luY19wYWdlLAorCVRQX1BST1RPKHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKSwKKwlUUF9BUkdTKHNwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUtWTV9NTVVfUEFHRV9GSUVMRFMKKwkJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlLVk1fTU1VX1BBR0VfQVNTSUdOKHNwKQorCQkpLAorCisJVFBfcHJpbnRrKCIlcyIsIEtWTV9NTVVfUEFHRV9QUklOVEsoKSkKKyk7CisKK1RSQUNFX0VWRU5UKAorCWt2bV9tbXVfemFwX3BhZ2UsCisJVFBfUFJPVE8oc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApLAorCVRQX0FSR1Moc3ApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJS1ZNX01NVV9QQUdFX0ZJRUxEUworCQkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUtWTV9NTVVfUEFHRV9BU1NJR04oc3ApCisJCSksCisKKwlUUF9wcmludGsoIiVzIiwgS1ZNX01NVV9QQUdFX1BSSU5USygpKQorKTsKKworI2VuZGlmIC8qIF9UUkFDRV9LVk1NTVVfSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKaW5kZXggNjc3ODVmNi4uZDJmZWM5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKKysrIGIvYXJjaC94ODYva3ZtL3BhZ2luZ190bXBsLmgKQEAgLTI3LDcgKzI3LDggQEAKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXI2NAogCSNkZWZpbmUgRk5BTUUobmFtZSkgcGFnaW5nIyM2NF8jI25hbWUKIAkjZGVmaW5lIFBUX0JBU0VfQUREUl9NQVNLIFBUNjRfQkFTRV9BRERSX01BU0sKLQkjZGVmaW5lIFBUX0RJUl9CQVNFX0FERFJfTUFTSyBQVDY0X0RJUl9CQVNFX0FERFJfTUFTSworCSNkZWZpbmUgUFRfTFZMX0FERFJfTUFTSyhsdmwpIFBUNjRfTFZMX0FERFJfTUFTSyhsdmwpCisJI2RlZmluZSBQVF9MVkxfT0ZGU0VUX01BU0sobHZsKSBQVDY0X0xWTF9PRkZTRVRfTUFTSyhsdmwpCiAJI2RlZmluZSBQVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKIAkjZGVmaW5lIFBUX0xFVkVMX01BU0sobGV2ZWwpIFBUNjRfTEVWRUxfTUFTSyhsZXZlbCkKIAkjZGVmaW5lIFBUX0xFVkVMX0JJVFMgUFQ2NF9MRVZFTF9CSVRTCkBAIC00Myw3ICs0NCw4IEBACiAJI2RlZmluZSBndWVzdF93YWxrZXIgZ3Vlc3Rfd2Fsa2VyMzIKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjMzJfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDMyX0JBU0VfQUREUl9NQVNLCi0JI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQzMl9ESVJfQkFTRV9BRERSX01BU0sKKwkjZGVmaW5lIFBUX0xWTF9BRERSX01BU0sobHZsKSBQVDMyX0xWTF9BRERSX01BU0sobHZsKQorCSNkZWZpbmUgUFRfTFZMX09GRlNFVF9NQVNLKGx2bCkgUFQzMl9MVkxfT0ZGU0VUX01BU0sobHZsKQogCSNkZWZpbmUgUFRfSU5ERVgoYWRkciwgbGV2ZWwpIFBUMzJfSU5ERVgoYWRkciwgbGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9NQVNLKGxldmVsKSBQVDMyX0xFVkVMX01BU0sobGV2ZWwpCiAJI2RlZmluZSBQVF9MRVZFTF9CSVRTIFBUMzJfTEVWRUxfQklUUwpAQCAtNTMsOCArNTUsOCBAQAogCSNlcnJvciBJbnZhbGlkIFBUVFlQRSB2YWx1ZQogI2VuZGlmCiAKLSNkZWZpbmUgZ3B0ZV90b19nZm4gRk5BTUUoZ3B0ZV90b19nZm4pCi0jZGVmaW5lIGdwdGVfdG9fZ2ZuX3BkZSBGTkFNRShncHRlX3RvX2dmbl9wZGUpCisjZGVmaW5lIGdwdGVfdG9fZ2ZuX2x2bCBGTkFNRShncHRlX3RvX2dmbl9sdmwpCisjZGVmaW5lIGdwdGVfdG9fZ2ZuKHB0ZSkgZ3B0ZV90b19nZm5fbHZsKChwdGUpLCBQVF9QQUdFX1RBQkxFX0xFVkVMKQogCiAvKgogICogVGhlIGd1ZXN0X3dhbGtlciBzdHJ1Y3R1cmUgZW11bGF0ZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBoYXJkd2FyZSBwYWdlCkBAIC03MSwxNCArNzMsOSBAQAogCXUzMiBlcnJvcl9jb2RlOwogfTsKIAotc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuKHB0X2VsZW1lbnRfdCBncHRlKQorc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuX2x2bChwdF9lbGVtZW50X3QgZ3B0ZSwgaW50IGx2bCkKIHsKLQlyZXR1cm4gKGdwdGUgJiBQVF9CQVNFX0FERFJfTUFTSykgPj4gUEFHRV9TSElGVDsKLX0KLQotc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuX3BkZShwdF9lbGVtZW50X3QgZ3B0ZSkKLXsKLQlyZXR1cm4gKGdwdGUgJiBQVF9ESVJfQkFTRV9BRERSX01BU0spID4+IFBBR0VfU0hJRlQ7CisJcmV0dXJuIChncHRlICYgUFRfTFZMX0FERFJfTUFTSyhsdmwpKSA+PiBQQUdFX1NISUZUOwogfQogCiBzdGF0aWMgYm9vbCBGTkFNRShjbXB4Y2hnX2dwdGUpKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTEyNSwxNCArMTIyLDE2IEBACiAJZ3BhX3QgcHRlX2dwYTsKIAlpbnQgcnN2ZF9mYXVsdCA9IDA7CiAKLQlwZ3ByaW50aygiJXM6IGFkZHIgJWx4XG4iLCBfX2Z1bmNfXywgYWRkcik7CisJdHJhY2Vfa3ZtX21tdV9wYWdldGFibGVfd2FsayhhZGRyLCB3cml0ZV9mYXVsdCwgdXNlcl9mYXVsdCwKKwkJCQkgICAgIGZldGNoX2ZhdWx0KTsKIHdhbGs6CiAJd2Fsa2VyLT5sZXZlbCA9IHZjcHUtPmFyY2gubW11LnJvb3RfbGV2ZWw7CiAJcHRlID0gdmNwdS0+YXJjaC5jcjM7CiAjaWYgUFRUWVBFID09IDY0CiAJaWYgKCFpc19sb25nX21vZGUodmNwdSkpIHsKLQkJcHRlID0gdmNwdS0+YXJjaC5wZHB0cnNbKGFkZHIgPj4gMzApICYgM107Ci0JCWlmICghaXNfcHJlc2VudF9wdGUocHRlKSkKKwkJcHRlID0ga3ZtX3BkcHRyX3JlYWQodmNwdSwgKGFkZHIgPj4gMzApICYgMyk7CisJCXRyYWNlX2t2bV9tbXVfcGFnaW5nX2VsZW1lbnQocHRlLCB3YWxrZXItPmxldmVsKTsKKwkJaWYgKCFpc19wcmVzZW50X2dwdGUocHRlKSkKIAkJCWdvdG8gbm90X3ByZXNlbnQ7CiAJCS0td2Fsa2VyLT5sZXZlbDsKIAl9CkBAIC0xNTAsMTIgKzE0OSwxMSBAQAogCQlwdGVfZ3BhICs9IGluZGV4ICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7CiAJCXdhbGtlci0+dGFibGVfZ2ZuW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHRhYmxlX2dmbjsKIAkJd2Fsa2VyLT5wdGVfZ3BhW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHB0ZV9ncGE7Ci0JCXBncHJpbnRrKCIlczogdGFibGVfZ2ZuWyVkXSAlbHhcbiIsIF9fZnVuY19fLAotCQkJIHdhbGtlci0+bGV2ZWwgLSAxLCB0YWJsZV9nZm4pOwogCiAJCWt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgcHRlX2dwYSwgJnB0ZSwgc2l6ZW9mKHB0ZSkpOworCQl0cmFjZV9rdm1fbW11X3BhZ2luZ19lbGVtZW50KHB0ZSwgd2Fsa2VyLT5sZXZlbCk7CiAKLQkJaWYgKCFpc19wcmVzZW50X3B0ZShwdGUpKQorCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShwdGUpKQogCQkJZ290byBub3RfcHJlc2VudDsKIAogCQlyc3ZkX2ZhdWx0ID0gaXNfcnN2ZF9iaXRzX3NldCh2Y3B1LCBwdGUsIHdhbGtlci0+bGV2ZWwpOwpAQCAtMTc1LDYgKzE3Myw4IEBACiAjZW5kaWYKIAogCQlpZiAoIShwdGUgJiBQVF9BQ0NFU1NFRF9NQVNLKSkgeworCQkJdHJhY2Vfa3ZtX21tdV9zZXRfYWNjZXNzZWRfYml0KHRhYmxlX2dmbiwgaW5kZXgsCisJCQkJCQkgICAgICAgc2l6ZW9mKHB0ZSkpOwogCQkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgdGFibGVfZ2ZuKTsKIAkJCWlmIChGTkFNRShjbXB4Y2hnX2dwdGUpKHZjcHUtPmt2bSwgdGFibGVfZ2ZuLAogCQkJICAgIGluZGV4LCBwdGUsIHB0ZXxQVF9BQ0NFU1NFRF9NQVNLKSkKQEAgLTE4NiwxOCArMTg2LDI0IEBACiAKIAkJd2Fsa2VyLT5wdGVzW3dhbGtlci0+bGV2ZWwgLSAxXSA9IHB0ZTsKIAotCQlpZiAod2Fsa2VyLT5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKSB7Ci0JCQl3YWxrZXItPmdmbiA9IGdwdGVfdG9fZ2ZuKHB0ZSk7Ci0JCQlicmVhazsKLQkJfQorCQlpZiAoKHdhbGtlci0+bGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTCkgfHwKKwkJICAgICgod2Fsa2VyLT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpICYmCisJCQkJKHB0ZSAmIFBUX1BBR0VfU0laRV9NQVNLKSAgJiYKKwkJCQkoUFRUWVBFID09IDY0IHx8IGlzX3BzZSh2Y3B1KSkpIHx8CisJCSAgICAoKHdhbGtlci0+bGV2ZWwgPT0gUFRfUERQRV9MRVZFTCkgJiYKKwkJCQkocHRlICYgUFRfUEFHRV9TSVpFX01BU0spICAmJgorCQkJCWlzX2xvbmdfbW9kZSh2Y3B1KSkpIHsKKwkJCWludCBsdmwgPSB3YWxrZXItPmxldmVsOwogCi0JCWlmICh3YWxrZXItPmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTAotCQkgICAgJiYgKHB0ZSAmIFBUX1BBR0VfU0laRV9NQVNLKQotCQkgICAgJiYgKFBUVFlQRSA9PSA2NCB8fCBpc19wc2UodmNwdSkpKSB7Ci0JCQl3YWxrZXItPmdmbiA9IGdwdGVfdG9fZ2ZuX3BkZShwdGUpOwotCQkJd2Fsa2VyLT5nZm4gKz0gUFRfSU5ERVgoYWRkciwgUFRfUEFHRV9UQUJMRV9MRVZFTCk7Ci0JCQlpZiAoUFRUWVBFID09IDMyICYmIGlzX2NwdWlkX1BTRTM2KCkpCisJCQl3YWxrZXItPmdmbiA9IGdwdGVfdG9fZ2ZuX2x2bChwdGUsIGx2bCk7CisJCQl3YWxrZXItPmdmbiArPSAoYWRkciAmIFBUX0xWTF9PRkZTRVRfTUFTSyhsdmwpKQorCQkJCQk+PiBQQUdFX1NISUZUOworCisJCQlpZiAoUFRUWVBFID09IDMyICYmCisJCQkgICAgd2Fsa2VyLT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwgJiYKKwkJCSAgICBpc19jcHVpZF9QU0UzNigpKQogCQkJCXdhbGtlci0+Z2ZuICs9IHBzZTM2X2dmbl9kZWx0YShwdGUpOworCiAJCQlicmVhazsKIAkJfQogCkBAIC0yMDUsOSArMjExLDEwIEBACiAJCS0td2Fsa2VyLT5sZXZlbDsKIAl9CiAKLQlpZiAod3JpdGVfZmF1bHQgJiYgIWlzX2RpcnR5X3B0ZShwdGUpKSB7CisJaWYgKHdyaXRlX2ZhdWx0ICYmICFpc19kaXJ0eV9ncHRlKHB0ZSkpIHsKIAkJYm9vbCByZXQ7CiAKKwkJdHJhY2Vfa3ZtX21tdV9zZXRfZGlydHlfYml0KHRhYmxlX2dmbiwgaW5kZXgsIHNpemVvZihwdGUpKTsKIAkJbWFya19wYWdlX2RpcnR5KHZjcHUtPmt2bSwgdGFibGVfZ2ZuKTsKIAkJcmV0ID0gRk5BTUUoY21weGNoZ19ncHRlKSh2Y3B1LT5rdm0sIHRhYmxlX2dmbiwgaW5kZXgsIHB0ZSwKIAkJCSAgICBwdGV8UFRfRElSVFlfTUFTSyk7CkBAIC0yMzksNiArMjQ2LDcgQEAKIAkJd2Fsa2VyLT5lcnJvcl9jb2RlIHw9IFBGRVJSX0ZFVENIX01BU0s7CiAJaWYgKHJzdmRfZmF1bHQpCiAJCXdhbGtlci0+ZXJyb3JfY29kZSB8PSBQRkVSUl9SU1ZEX01BU0s7CisJdHJhY2Vfa3ZtX21tdV93YWxrZXJfZXJyb3Iod2Fsa2VyLT5lcnJvcl9jb2RlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ4LDEyICsyNTYsMTEgQEAKIAlwdF9lbGVtZW50X3QgZ3B0ZTsKIAl1bnNpZ25lZCBwdGVfYWNjZXNzOwogCXBmbl90IHBmbjsKLQlpbnQgbGFyZ2VwYWdlID0gdmNwdS0+YXJjaC51cGRhdGVfcHRlLmxhcmdlcGFnZTsKIAogCWdwdGUgPSAqKGNvbnN0IHB0X2VsZW1lbnRfdCAqKXB0ZTsKIAlpZiAofmdwdGUgJiAoUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSykpIHsKLQkJaWYgKCFpc19wcmVzZW50X3B0ZShncHRlKSkKLQkJCXNldF9zaGFkb3dfcHRlKHNwdGUsIHNoYWRvd19ub3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQlpZiAoIWlzX3ByZXNlbnRfZ3B0ZShncHRlKSkKKwkJCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZSk7CiAJCXJldHVybjsKIAl9CiAJcGdwcmludGsoIiVzOiBncHRlICVsbHggc3B0ZSAlcFxuIiwgX19mdW5jX18sICh1NjQpZ3B0ZSwgc3B0ZSk7CkBAIC0yNjcsNyArMjc0LDcgQEAKIAkJcmV0dXJuOwogCWt2bV9nZXRfcGZuKHBmbik7CiAJbW11X3NldF9zcHRlKHZjcHUsIHNwdGUsIHBhZ2UtPnJvbGUuYWNjZXNzLCBwdGVfYWNjZXNzLCAwLCAwLAotCQkgICAgIGdwdGUgJiBQVF9ESVJUWV9NQVNLLCBOVUxMLCBsYXJnZXBhZ2UsCisJCSAgICAgZ3B0ZSAmIFBUX0RJUlRZX01BU0ssIE5VTEwsIFBUX1BBR0VfVEFCTEVfTEVWRUwsCiAJCSAgICAgZ3B0ZV90b19nZm4oZ3B0ZSksIHBmbiwgdHJ1ZSk7CiB9CiAKQEAgLTI3Niw3ICsyODMsNyBAQAogICovCiBzdGF0aWMgdTY0ICpGTkFNRShmZXRjaCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBhZGRyLAogCQkJIHN0cnVjdCBndWVzdF93YWxrZXIgKmd3LAotCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBsYXJnZXBhZ2UsCisJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGhsZXZlbCwKIAkJCSBpbnQgKnB0d3JpdGUsIHBmbl90IHBmbikKIHsKIAl1bnNpZ25lZCBhY2Nlc3MgPSBndy0+cHRfYWNjZXNzOwpAQCAtMjg5LDE5ICsyOTYsMTggQEAKIAlwdF9lbGVtZW50X3QgY3Vycl9wdGU7CiAJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKIAotCWlmICghaXNfcHJlc2VudF9wdGUoZ3ctPnB0ZXNbZ3ctPmxldmVsIC0gMV0pKQorCWlmICghaXNfcHJlc2VudF9ncHRlKGd3LT5wdGVzW2d3LT5sZXZlbCAtIDFdKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlmb3JfZWFjaF9zaGFkb3dfZW50cnkodmNwdSwgYWRkciwgaXRlcmF0b3IpIHsKIAkJbGV2ZWwgPSBpdGVyYXRvci5sZXZlbDsKIAkJc3B0ZXAgPSBpdGVyYXRvci5zcHRlcDsKLQkJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwKLQkJICAgIHx8IChsYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgeworCQlpZiAoaXRlcmF0b3IubGV2ZWwgPT0gaGxldmVsKSB7CiAJCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIGFjY2VzcywKIAkJCQkgICAgIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAogCQkJCSAgICAgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCiAJCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAotCQkJCSAgICAgcHR3cml0ZSwgbGFyZ2VwYWdlLAorCQkJCSAgICAgcHR3cml0ZSwgbGV2ZWwsCiAJCQkJICAgICBndy0+Z2ZuLCBwZm4sIGZhbHNlKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMTEsMTYgKzMxNywxOSBAQAogCiAJCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkgewogCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7Ci0JCQlzZXRfc2hhZG93X3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJX19zZXRfc3B0ZShzcHRlcCwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOwogCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzKHZjcHUtPmt2bSk7CiAJCX0KIAotCQlpZiAobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMCi0JCSAgICAmJiBndy0+bGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSB7CisJCWlmIChsZXZlbCA8PSBndy0+bGV2ZWwpIHsKKwkJCWludCBkZWx0YSA9IGxldmVsIC0gZ3ctPmxldmVsICsgMTsKIAkJCWRpcmVjdCA9IDE7Ci0JCQlpZiAoIWlzX2RpcnR5X3B0ZShndy0+cHRlc1tsZXZlbCAtIDFdKSkKKwkJCWlmICghaXNfZGlydHlfZ3B0ZShndy0+cHRlc1tsZXZlbCAtIGRlbHRhXSkpCiAJCQkJYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKLQkJCXRhYmxlX2dmbiA9IGdwdGVfdG9fZ2ZuKGd3LT5wdGVzW2xldmVsIC0gMV0pOworCQkJdGFibGVfZ2ZuID0gZ3B0ZV90b19nZm4oZ3ctPnB0ZXNbbGV2ZWwgLSBkZWx0YV0pOworCQkJLyogYWR2YW5jZSB0YWJsZV9nZm4gd2hlbiBlbXVsYXRpbmcgMWdiIHBhZ2VzIHdpdGggNGsgKi8KKwkJCWlmIChkZWx0YSA9PSAwKQorCQkJCXRhYmxlX2dmbiArPSBQVF9JTkRFWChhZGRyLCBsZXZlbCk7CiAJCX0gZWxzZSB7CiAJCQlkaXJlY3QgPSAwOwogCQkJdGFibGVfZ2ZuID0gZ3ctPnRhYmxlX2dmbltsZXZlbCAtIDJdOwpAQCAtMzY5LDExICszNzgsMTEgQEAKIAlpbnQgdXNlcl9mYXVsdCA9IGVycm9yX2NvZGUgJiBQRkVSUl9VU0VSX01BU0s7CiAJaW50IGZldGNoX2ZhdWx0ID0gZXJyb3JfY29kZSAmIFBGRVJSX0ZFVENIX01BU0s7CiAJc3RydWN0IGd1ZXN0X3dhbGtlciB3YWxrZXI7Ci0JdTY0ICpzaGFkb3dfcHRlOworCXU2NCAqc3B0ZXA7CiAJaW50IHdyaXRlX3B0ID0gMDsKIAlpbnQgcjsKIAlwZm5fdCBwZm47Ci0JaW50IGxhcmdlcGFnZSA9IDA7CisJaW50IGxldmVsID0gUFRfUEFHRV9UQUJMRV9MRVZFTDsKIAl1bnNpZ25lZCBsb25nIG1tdV9zZXE7CiAKIAlwZ3ByaW50aygiJXM6IGFkZHIgJWx4IGVyciAleFxuIiwgX19mdW5jX18sIGFkZHIsIGVycm9yX2NvZGUpOwpAQCAtMzk5LDE0ICs0MDgsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHdhbGtlci5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKLQkJZ2ZuX3QgbGFyZ2VfZ2ZuOwotCQlsYXJnZV9nZm4gPSB3YWxrZXIuZ2ZuICYgfihLVk1fUEFHRVNfUEVSX0hQQUdFLTEpOwotCQlpZiAoaXNfbGFyZ2VwYWdlX2JhY2tlZCh2Y3B1LCBsYXJnZV9nZm4pKSB7Ci0JCQl3YWxrZXIuZ2ZuID0gbGFyZ2VfZ2ZuOwotCQkJbGFyZ2VwYWdlID0gMTsKLQkJfQorCWlmICh3YWxrZXIubGV2ZWwgPj0gUFRfRElSRUNUT1JZX0xFVkVMKSB7CisJCWxldmVsID0gbWluKHdhbGtlci5sZXZlbCwgbWFwcGluZ19sZXZlbCh2Y3B1LCB3YWxrZXIuZ2ZuKSk7CisJCXdhbGtlci5nZm4gPSB3YWxrZXIuZ2ZuICYgfihLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKSAtIDEpOwogCX0KKwogCW1tdV9zZXEgPSB2Y3B1LT5rdm0tPm1tdV9ub3RpZmllcl9zZXE7CiAJc21wX3JtYigpOwogCXBmbiA9IGdmbl90b19wZm4odmNwdS0+a3ZtLCB3YWxrZXIuZ2ZuKTsKQEAgLTQyMiwxMSArNDI4LDEwIEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCBtbXVfc2VxKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCWt2bV9tbXVfZnJlZV9zb21lX3BhZ2VzKHZjcHUpOwotCXNoYWRvd19wdGUgPSBGTkFNRShmZXRjaCkodmNwdSwgYWRkciwgJndhbGtlciwgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCi0JCQkJICBsYXJnZXBhZ2UsICZ3cml0ZV9wdCwgcGZuKTsKLQorCXNwdGVwID0gRk5BTUUoZmV0Y2gpKHZjcHUsIGFkZHIsICZ3YWxrZXIsIHVzZXJfZmF1bHQsIHdyaXRlX2ZhdWx0LAorCQkJICAgICBsZXZlbCwgJndyaXRlX3B0LCBwZm4pOwogCXBncHJpbnRrKCIlczogc2hhZG93IHB0ZSAlcCAlbGx4IHB0d3JpdGUgJWRcbiIsIF9fZnVuY19fLAotCQkgc2hhZG93X3B0ZSwgKnNoYWRvd19wdGUsIHdyaXRlX3B0KTsKKwkJIHNwdGVwLCAqc3B0ZXAsIHdyaXRlX3B0KTsKIAogCWlmICghd3JpdGVfcHQpCiAJCXZjcHUtPmFyY2gubGFzdF9wdF93cml0ZV9jb3VudCA9IDA7IC8qIHJlc2V0IGZvcmsgZGV0ZWN0b3IgKi8KQEAgLTQ1OSw4ICs0NjQsOSBAQAogCQlzcHRlcCA9IGl0ZXJhdG9yLnNwdGVwOwogCiAJCS8qIEZJWE1FOiBwcm9wZXJseSBoYW5kbGUgaW52bHBnIG9uIGxhcmdlIGd1ZXN0IHBhZ2VzICovCi0JCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMIHx8Ci0JCSAgICAoKGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSB7CisJCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMICB8fAorCQkgICAgKChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwgJiYgaXNfbGFyZ2VfcHRlKCpzcHRlcCkpKSB8fAorCQkgICAgKChsZXZlbCA9PSBQVF9QRFBFX0xFVkVMICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSkpIHsKIAkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOwogCiAJCQlwdGVfZ3BhID0gKHNwLT5nZm4gPDwgUEFHRV9TSElGVCk7CkBAIC00NzIsNyArNDc4LDcgQEAKIAkJCQkJLS12Y3B1LT5rdm0tPnN0YXQubHBhZ2VzOwogCQkJCW5lZWRfZmx1c2ggPSAxOwogCQkJfQotCQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCV9fc2V0X3NwdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ4OSw3ICs0OTUsNyBAQAogCWlmIChrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBwdGVfZ3BhLCAmZ3B0ZSwKIAkJCQkgIHNpemVvZihwdF9lbGVtZW50X3QpKSkKIAkJcmV0dXJuOwotCWlmIChpc19wcmVzZW50X3B0ZShncHRlKSAmJiAoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CisJaWYgKGlzX3ByZXNlbnRfZ3B0ZShncHRlKSAmJiAoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CiAJCWlmIChtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KSkKIAkJCXJldHVybjsKIAkJa3ZtX21tdV9wdGVfd3JpdGUodmNwdSwgcHRlX2dwYSwgKGNvbnN0IHU4ICopJmdwdGUsCkBAIC01MzYsNyArNTQyLDcgQEAKIAkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sIHB0ZV9ncGEsIHB0LCBzaXplb2YgcHQpOwogCQlwdGVfZ3BhICs9IEFSUkFZX1NJWkUocHQpICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7CiAJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHB0KTsgKytqKQotCQkJaWYgKHIgfHwgaXNfcHJlc2VudF9wdGUocHRbal0pKQorCQkJaWYgKHIgfHwgaXNfcHJlc2VudF9ncHRlKHB0W2pdKSkKIAkJCQlzcC0+c3B0W2kral0gPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAkJCWVsc2UKIAkJCQlzcC0+c3B0W2kral0gPSBzaGFkb3dfbm90cmFwX25vbnByZXNlbnRfcHRlOwpAQCAtNTc0LDIzICs1ODAsMjMgQEAKIAkJCQkJICBzaXplb2YocHRfZWxlbWVudF90KSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoZ3B0ZV90b19nZm4oZ3B0ZSkgIT0gZ2ZuIHx8ICFpc19wcmVzZW50X3B0ZShncHRlKSB8fAorCQlpZiAoZ3B0ZV90b19nZm4oZ3B0ZSkgIT0gZ2ZuIHx8ICFpc19wcmVzZW50X2dwdGUoZ3B0ZSkgfHwKIAkJICAgICEoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CiAJCQl1NjQgbm9ucHJlc2VudDsKIAogCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCAmc3AtPnNwdFtpXSk7Ci0JCQlpZiAoaXNfcHJlc2VudF9wdGUoZ3B0ZSkpCisJCQlpZiAoaXNfcHJlc2VudF9ncHRlKGdwdGUpKQogCQkJCW5vbnByZXNlbnQgPSBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZTsKIAkJCWVsc2UKIAkJCQlub25wcmVzZW50ID0gc2hhZG93X25vdHJhcF9ub25wcmVzZW50X3B0ZTsKLQkJCXNldF9zaGFkb3dfcHRlKCZzcC0+c3B0W2ldLCBub25wcmVzZW50KTsKKwkJCV9fc2V0X3NwdGUoJnNwLT5zcHRbaV0sIG5vbnByZXNlbnQpOwogCQkJY29udGludWU7CiAJCX0KIAogCQlucl9wcmVzZW50Kys7CiAJCXB0ZV9hY2Nlc3MgPSBzcC0+cm9sZS5hY2Nlc3MgJiBGTkFNRShncHRlX2FjY2VzcykodmNwdSwgZ3B0ZSk7CiAJCXNldF9zcHRlKHZjcHUsICZzcC0+c3B0W2ldLCBwdGVfYWNjZXNzLCAwLCAwLAotCQkJIGlzX2RpcnR5X3B0ZShncHRlKSwgMCwgZ2ZuLAorCQkJIGlzX2RpcnR5X2dwdGUoZ3B0ZSksIFBUX1BBR0VfVEFCTEVfTEVWRUwsIGdmbiwKIAkJCSBzcHRlX3RvX3BmbihzcC0+c3B0W2ldKSwgdHJ1ZSwgZmFsc2UpOwogCX0KIApAQCAtNjAzLDkgKzYwOSwxMCBAQAogI3VuZGVmIFBUX0JBU0VfQUREUl9NQVNLCiAjdW5kZWYgUFRfSU5ERVgKICN1bmRlZiBQVF9MRVZFTF9NQVNLCi0jdW5kZWYgUFRfRElSX0JBU0VfQUREUl9NQVNLCisjdW5kZWYgUFRfTFZMX0FERFJfTUFTSworI3VuZGVmIFBUX0xWTF9PRkZTRVRfTUFTSwogI3VuZGVmIFBUX0xFVkVMX0JJVFMKICN1bmRlZiBQVF9NQVhfRlVMTF9MRVZFTFMKICN1bmRlZiBncHRlX3RvX2dmbgotI3VuZGVmIGdwdGVfdG9fZ2ZuX3BkZQorI3VuZGVmIGdwdGVfdG9fZ2ZuX2x2bAogI3VuZGVmIENNUFhDSEcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCBiMWY2NThhLi45NDRjYzljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgogCi0jaW5jbHVkZSAia3ZtX3N2bS5oIgogI2luY2x1ZGUgImlycS5oIgogI2luY2x1ZGUgIm1tdS5oIgogI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCkBAIC0yNiwxMCArMjUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAKICNpbmNsdWRlIDxhc20vZGVzYy5oPgogCiAjaW5jbHVkZSA8YXNtL3ZpcnRleHQuaD4KKyNpbmNsdWRlICJ0cmFjZS5oIgogCiAjZGVmaW5lIF9fZXgoeCkgX19rdm1faGFuZGxlX2ZhdWx0X29uX3JlYm9vdCh4KQogCkBAIC00Niw2ICs0NywxMCBAQAogI2RlZmluZSBTVk1fRkVBVFVSRV9MQlJWICgxIDw8IDEpCiAjZGVmaW5lIFNWTV9GRUFUVVJFX1NWTUwgKDEgPDwgMikKIAorI2RlZmluZSBORVNURURfRVhJVF9IT1NUCTAJLyogRXhpdCBoYW5kbGVkIG9uIGhvc3QgbGV2ZWwgKi8KKyNkZWZpbmUgTkVTVEVEX0VYSVRfRE9ORQkxCS8qIEV4aXQgY2F1c2VkIG5lc3RlZCB2bWV4aXQgICovCisjZGVmaW5lIE5FU1RFRF9FWElUX0NPTlRJTlVFCTIJLyogRnVydGhlciBjaGVja3MgbmVlZGVkICAgICAgKi8KKwogI2RlZmluZSBERUJVR0NUTF9SRVNFUlZFRF9CSVRTICh+KDB4M2ZVTEwpKQogCiAvKiBUdXJuIG9uIHRvIGdldCBkZWJ1Z2dpbmcgb3V0cHV0Ki8KQEAgLTU3LDYgKzYyLDU4IEBACiAjZGVmaW5lIG5zdm1fcHJpbnRrKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUoMCkKICNlbmRpZgogCitzdGF0aWMgY29uc3QgdTMyIGhvc3Rfc2F2ZV91c2VyX21zcnNbXSA9IHsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJTVNSX1NUQVIsIE1TUl9MU1RBUiwgTVNSX0NTVEFSLCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfS0VSTkVMX0dTX0JBU0UsCisJTVNSX0ZTX0JBU0UsCisjZW5kaWYKKwlNU1JfSUEzMl9TWVNFTlRFUl9DUywgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCBNU1JfSUEzMl9TWVNFTlRFUl9FSVAsCit9OworCisjZGVmaW5lIE5SX0hPU1RfU0FWRV9VU0VSX01TUlMgQVJSQVlfU0laRShob3N0X3NhdmVfdXNlcl9tc3JzKQorCitzdHJ1Y3Qga3ZtX3ZjcHU7CisKK3N0cnVjdCBuZXN0ZWRfc3RhdGUgeworCXN0cnVjdCB2bWNiICpoc2F2ZTsKKwl1NjQgaHNhdmVfbXNyOworCXU2NCB2bWNiOworCisJLyogVGhlc2UgYXJlIHRoZSBtZXJnZWQgdmVjdG9ycyAqLworCXUzMiAqbXNycG07CisKKwkvKiBncGEgcG9pbnRlcnMgdG8gdGhlIHJlYWwgdmVjdG9ycyAqLworCXU2NCB2bWNiX21zcnBtOworCisJLyogY2FjaGUgZm9yIGludGVyY2VwdHMgb2YgdGhlIGd1ZXN0ICovCisJdTE2IGludGVyY2VwdF9jcl9yZWFkOworCXUxNiBpbnRlcmNlcHRfY3Jfd3JpdGU7CisJdTE2IGludGVyY2VwdF9kcl9yZWFkOworCXUxNiBpbnRlcmNlcHRfZHJfd3JpdGU7CisJdTMyIGludGVyY2VwdF9leGNlcHRpb25zOworCXU2NCBpbnRlcmNlcHQ7CisKK307CisKK3N0cnVjdCB2Y3B1X3N2bSB7CisJc3RydWN0IGt2bV92Y3B1IHZjcHU7CisJc3RydWN0IHZtY2IgKnZtY2I7CisJdW5zaWduZWQgbG9uZyB2bWNiX3BhOworCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOworCXVpbnQ2NF90IGFzaWRfZ2VuZXJhdGlvbjsKKwl1aW50NjRfdCBzeXNlbnRlcl9lc3A7CisJdWludDY0X3Qgc3lzZW50ZXJfZWlwOworCisJdTY0IG5leHRfcmlwOworCisJdTY0IGhvc3RfdXNlcl9tc3JzW05SX0hPU1RfU0FWRV9VU0VSX01TUlNdOworCXU2NCBob3N0X2dzX2Jhc2U7CisKKwl1MzIgKm1zcnBtOworCisJc3RydWN0IG5lc3RlZF9zdGF0ZSBuZXN0ZWQ7Cit9OworCiAvKiBlbmFibGUgTlBUIGZvciBBTUQ2NCBhbmQgWDg2IHdpdGggUEFFICovCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQogc3RhdGljIGJvb2wgbnB0X2VuYWJsZWQgPSB0cnVlOwpAQCAtNjcsMTUgKzEyNCwxNCBAQAogCiBtb2R1bGVfcGFyYW0obnB0LCBpbnQsIFNfSVJVR08pOwogCi1zdGF0aWMgaW50IG5lc3RlZCA9IDA7CitzdGF0aWMgaW50IG5lc3RlZCA9IDE7CiBtb2R1bGVfcGFyYW0obmVzdGVkLCBpbnQsIFNfSVJVR08pOwogCiBzdGF0aWMgdm9pZCBzdm1fZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitzdGF0aWMgdm9pZCBzdm1fY29tcGxldGVfaW50ZXJydXB0cyhzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKTsKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pOwogc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7Ci1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKLQkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKTsKIHN0YXRpYyBpbnQgbmVzdGVkX3N2bV9jaGVja19leGNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHVuc2lnbmVkIG5yLAogCQkJCSAgICAgIGJvb2wgaGFzX2Vycm9yX2NvZGUsIHUzMiBlcnJvcl9jb2RlKTsKIApAQCAtODYsNyArMTQyLDIyIEBACiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19uZXN0ZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0JcmV0dXJuIHN2bS0+bmVzdGVkX3ZtY2I7CisJcmV0dXJuIHN2bS0+bmVzdGVkLnZtY2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfZ2lmKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9HSUZfTUFTSzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfZ2lmKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyAmPSB+SEZfR0lGX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBnaWZfc2V0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXJldHVybiAhIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlvcG1fYmFzZTsKQEAgLTE0NywxOSArMjE4LDYgQEAKIAlhc20gdm9sYXRpbGUgKF9fZXgoU1ZNX0lOVkxQR0EpIDo6ICJhIihhZGRyKSwgImMiKGFzaWQpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yZWFkX2NyMih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3IyOwotCi0JYXNtIHZvbGF0aWxlICgibW92ICUlY3IyLCAlMCIgOiAiPXIiIChjcjIpKTsKLQlyZXR1cm4gY3IyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQga3ZtX3dyaXRlX2NyMih1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlY3IyIiA6OiAiciIgKHZhbCkpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9yY2VfbmV3X2FzaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXRvX3N2bSh2Y3B1KS0+YXNpZF9nZW5lcmF0aW9uLS07CkBAIC0yNjMsNyArMzIxLDcgQEAKIAogCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOwogCXVpbnQ2NF90IGVmZXI7Ci0Jc3RydWN0IGRlc2NfcHRyIGdkdF9kZXNjcjsKKwlzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSBnZHRfZGVzY3I7CiAJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQ7CiAJaW50IG1lID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtMjgzLDggKzM0MSw4IEBACiAJc3ZtX2RhdGEtPm1heF9hc2lkID0gY3B1aWRfZWJ4KFNWTV9DUFVJRF9GVU5DKSAtIDE7CiAJc3ZtX2RhdGEtPm5leHRfYXNpZCA9IHN2bV9kYXRhLT5tYXhfYXNpZCArIDE7CiAKLQlhc20gdm9sYXRpbGUgKCJzZ2R0ICUwIiA6ICI9bSIoZ2R0X2Rlc2NyKSk7Ci0JZ2R0ID0gKHN0cnVjdCBkZXNjX3N0cnVjdCAqKWdkdF9kZXNjci5hZGRyZXNzOworCWt2bV9nZXRfZ2R0KCZnZHRfZGVzY3IpOworCWdkdCA9IChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKilnZHRfZGVzY3IuYmFzZTsKIAlzdm1fZGF0YS0+dHNzX2Rlc2MgPSAoc3RydWN0IGt2bV9sZHR0c3NfZGVzYyAqKShnZHQgKyBHRFRfRU5UUllfVFNTKTsKIAogCXJkbXNybChNU1JfRUZFUiwgZWZlcik7CkBAIC0zNjcsOCArNDI1LDYgQEAKICNlbmRpZgogCXNldF9tc3JfaW50ZXJjZXB0aW9uKG1zcnBtLCBNU1JfSzZfU1RBUiwgMSwgMSk7CiAJc2V0X21zcl9pbnRlcmNlcHRpb24obXNycG0sIE1TUl9JQTMyX1NZU0VOVEVSX0NTLCAxLCAxKTsKLQlzZXRfbXNyX2ludGVyY2VwdGlvbihtc3JwbSwgTVNSX0lBMzJfU1lTRU5URVJfRVNQLCAxLCAxKTsKLQlzZXRfbXNyX2ludGVyY2VwdGlvbihtc3JwbSwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLCAxLCAxKTsKIH0KIAogc3RhdGljIHZvaWQgc3ZtX2VuYWJsZV9sYnJ2KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQpAQCAtNTk1LDggKzY1MSwxMCBAQAogCX0KIAlmb3JjZV9uZXdfYXNpZCgmc3ZtLT52Y3B1KTsKIAotCXN2bS0+bmVzdGVkX3ZtY2IgPSAwOwotCXN2bS0+dmNwdS5hcmNoLmhmbGFncyA9IEhGX0dJRl9NQVNLOworCXN2bS0+bmVzdGVkLnZtY2IgPSAwOworCXN2bS0+dmNwdS5hcmNoLmhmbGFncyA9IDA7CisKKwllbmFibGVfZ2lmKHN2bSk7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNjA1LDcgKzY2Myw3IEBACiAKIAlpbml0X3ZtY2Ioc3ZtKTsKIAotCWlmICh2Y3B1LT52Y3B1X2lkICE9IDApIHsKKwlpZiAoIWt2bV92Y3B1X2lzX2JzcCh2Y3B1KSkgewogCQlrdm1fcmlwX3dyaXRlKHZjcHUsIDApOwogCQlzdm0tPnZtY2ItPnNhdmUuY3MuYmFzZSA9IHN2bS0+dmNwdS5hcmNoLnNpcGlfdmVjdG9yIDw8IDEyOwogCQlzdm0tPnZtY2ItPnNhdmUuY3Muc2VsZWN0b3IgPSBzdm0tPnZjcHUuYXJjaC5zaXBpX3ZlY3RvciA8PCA4OwpAQCAtNjU2LDkgKzcxNCw5IEBACiAJaHNhdmVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFoc2F2ZV9wYWdlKQogCQlnb3RvIHVuaW5pdDsKLQlzdm0tPmhzYXZlID0gcGFnZV9hZGRyZXNzKGhzYXZlX3BhZ2UpOworCXN2bS0+bmVzdGVkLmhzYXZlID0gcGFnZV9hZGRyZXNzKGhzYXZlX3BhZ2UpOwogCi0Jc3ZtLT5uZXN0ZWRfbXNycG0gPSBwYWdlX2FkZHJlc3MobmVzdGVkX21zcnBtX3BhZ2VzKTsKKwlzdm0tPm5lc3RlZC5tc3JwbSA9IHBhZ2VfYWRkcmVzcyhuZXN0ZWRfbXNycG1fcGFnZXMpOwogCiAJc3ZtLT52bWNiID0gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWNsZWFyX3BhZ2Uoc3ZtLT52bWNiKTsKQEAgLTY2OSw3ICs3MjcsNyBAQAogCWZ4X2luaXQoJnN2bS0+dmNwdSk7CiAJc3ZtLT52Y3B1LmZwdV9hY3RpdmUgPSAxOwogCXN2bS0+dmNwdS5hcmNoLmFwaWNfYmFzZSA9IDB4ZmVlMDAwMDAgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7Ci0JaWYgKHN2bS0+dmNwdS52Y3B1X2lkID09IDApCisJaWYgKGt2bV92Y3B1X2lzX2JzcCgmc3ZtLT52Y3B1KSkKIAkJc3ZtLT52Y3B1LmFyY2guYXBpY19iYXNlIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0JTUDsKIAogCXJldHVybiAmc3ZtLT52Y3B1OwpAQCAtNjg4LDggKzc0Niw4IEBACiAKIAlfX2ZyZWVfcGFnZShwZm5fdG9fcGFnZShzdm0tPnZtY2JfcGEgPj4gUEFHRV9TSElGVCkpOwogCV9fZnJlZV9wYWdlcyh2aXJ0X3RvX3BhZ2Uoc3ZtLT5tc3JwbSksIE1TUlBNX0FMTE9DX09SREVSKTsKLQlfX2ZyZWVfcGFnZSh2aXJ0X3RvX3BhZ2Uoc3ZtLT5oc2F2ZSkpOwotCV9fZnJlZV9wYWdlcyh2aXJ0X3RvX3BhZ2Uoc3ZtLT5uZXN0ZWRfbXNycG0pLCBNU1JQTV9BTExPQ19PUkRFUik7CisJX19mcmVlX3BhZ2UodmlydF90b19wYWdlKHN2bS0+bmVzdGVkLmhzYXZlKSk7CisJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShzdm0tPm5lc3RlZC5tc3JwbSksIE1TUlBNX0FMTE9DX09SREVSKTsKIAlrdm1fdmNwdV91bmluaXQodmNwdSk7CiAJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCBzdm0pOwogfQpAQCAtNzQwLDYgKzc5OCwxOCBAQAogCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5yZmxhZ3MgPSByZmxhZ3M7CiB9CiAKK3N0YXRpYyB2b2lkIHN2bV9jYWNoZV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIGt2bV9yZWcgcmVnKQoreworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBWQ1BVX0VYUkVHX1BEUFRSOgorCQlCVUdfT04oIW5wdF9lbmFibGVkKTsKKwkJbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC5jcjMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHN2bV9zZXRfdmludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSAxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUjsKQEAgLTEwNjEsNyArMTEzMSw2IEBACiAJCXZhbCA9IDA7CiAJfQogCi0JS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCXJldHVybiB2YWw7CiB9CiAKQEAgLTEwNzAsOCArMTEzOSw2IEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQlLVk1UUkFDRV8yRChEUl9XUklURSwgdmNwdSwgKHUzMilkciwgKHUzMil2YWx1ZSwgaGFuZGxlcik7Ci0KIAkqZXhjZXB0aW9uID0gMDsKIAogCXN3aXRjaCAoZHIpIHsKQEAgLTExMTksMjUgKzExODYsOSBAQAogCWZhdWx0X2FkZHJlc3MgID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yOwogCWVycm9yX2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzE7CiAKLQlpZiAoIW5wdF9lbmFibGVkKQotCQlLVk1UUkFDRV8zRChQQUdFX0ZBVUxULCAmc3ZtLT52Y3B1LCBlcnJvcl9jb2RlLAotCQkJICAgICh1MzIpZmF1bHRfYWRkcmVzcywgKHUzMikoZmF1bHRfYWRkcmVzcyA+PiAzMiksCi0JCQkgICAgaGFuZGxlcik7Ci0JZWxzZQotCQlLVk1UUkFDRV8zRChURFBfRkFVTFQsICZzdm0tPnZjcHUsIGVycm9yX2NvZGUsCi0JCQkgICAgKHUzMilmYXVsdF9hZGRyZXNzLCAodTMyKShmYXVsdF9hZGRyZXNzID4+IDMyKSwKLQkJCSAgICBoYW5kbGVyKTsKLQkvKgotCSAqIEZJWE1FOiBUaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBoZXJlLCBidXQgdGhlcmUgaXMgYSBmbHVzaAotCSAqIG1pc3NpbmcgaW4gdGhlIE1NVSBjb2RlLiBVbnRpbCB3ZSBmaW5kIHRoaXMgYnVnLCBmbHVzaCB0aGUKLQkgKiBjb21wbGV0ZSBUTEIgaGVyZSBvbiBhbiBOUEYKLQkgKi8KLQlpZiAobnB0X2VuYWJsZWQpCi0JCXN2bV9mbHVzaF90bGIoJnN2bS0+dmNwdSk7Ci0JZWxzZSB7Ci0JCWlmIChrdm1fZXZlbnRfbmVlZHNfcmVpbmplY3Rpb24oJnN2bS0+dmNwdSkpCi0JCQlrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcyk7Ci0JfQorCXRyYWNlX2t2bV9wYWdlX2ZhdWx0KGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpOworCWlmICghbnB0X2VuYWJsZWQgJiYga3ZtX2V2ZW50X25lZWRzX3JlaW5qZWN0aW9uKCZzdm0tPnZjcHUpKQorCQlrdm1fbW11X3VucHJvdGVjdF9wYWdlX3ZpcnQoJnN2bS0+dmNwdSwgZmF1bHRfYWRkcmVzcyk7CiAJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCgmc3ZtLT52Y3B1LCBmYXVsdF9hZGRyZXNzLCBlcnJvcl9jb2RlKTsKIH0KIApAQCAtMTI1MywxNCArMTMwNCwxMiBAQAogCiBzdGF0aWMgaW50IG5taV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewotCUtWTVRSQUNFXzBEKE5NSSwgJnN2bS0+dmNwdSwgaGFuZGxlcik7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgaW50cl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCSsrc3ZtLT52Y3B1LnN0YXQuaXJxX2V4aXRzOwotCUtWTVRSQUNFXzBEKElOVFIsICZzdm0tPnZjcHUsIGhhbmRsZXIpOwogCXJldHVybiAxOwogfQogCkBAIC0xMzAzLDQ0ICsxMzUyLDM5IEBACiBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBuciwKIAkJCQkgICAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKIHsKLQlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSA9IFNWTV9FWElUX0VYQ1BfQkFTRSArIG5yOwotCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlX2hpID0gMDsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xID0gZXJyb3JfY29kZTsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18yID0gc3ZtLT52Y3B1LmFyY2guY3IyOwotCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtLCBmYWxzZSkpIHsKLQkJCW5zdm1fcHJpbnRrKCJWTWV4aXQgLT4gRVhDUCAweCV4XG4iLCBucik7CisJaWYgKCFpc19uZXN0ZWQoc3ZtKSkKKwkJcmV0dXJuIDA7CiAKLQkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlID0gU1ZNX0VYSVRfRVhDUF9CQVNFICsgbnI7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZV9oaSA9IDA7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xID0gZXJyb3JfY29kZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzIgPSBzdm0tPnZjcHUuYXJjaC5jcjI7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbmVzdGVkX3N2bV9pbnRyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCWlmIChpc19uZXN0ZWQoc3ZtKSkgewotCQlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKLQkJCXJldHVybiAwOworCWlmICghaXNfbmVzdGVkKHN2bSkpCisJCXJldHVybiAwOwogCi0JCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0hJRl9NQVNLKSkKLQkJCXJldHVybiAwOworCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX1ZJTlRSX01BU0spKQorCQlyZXR1cm4gMDsKIAotCQlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlID0gU1ZNX0VYSVRfSU5UUjsKKwlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9ISUZfTUFTSykpCisJCXJldHVybiAwOwogCi0JCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIGZhbHNlKSkgewotCQkJbnN2bV9wcmludGsoIlZNZXhpdCAtPiBJTlRSXG4iKTsKLQkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQorCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9JTlRSOworCisJaWYgKG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSkpIHsKKwkJbnN2bV9wcmludGsoIlZNZXhpdCAtPiBJTlRSXG4iKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqbmVzdGVkX3N2bV9nZXRfcGFnZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGdwYSkKK3N0YXRpYyB2b2lkICpuZXN0ZWRfc3ZtX21hcChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdTY0IGdwYSwgZW51bSBrbV90eXBlIGlkeCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTM0OCwxNDMgKzEzOTIsNDggQEAKIAlwYWdlID0gZ2ZuX3RvX3BhZ2Uoc3ZtLT52Y3B1Lmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOwogCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLQlpZiAoaXNfZXJyb3JfcGFnZShwYWdlKSkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogY291bGQgbm90IGZpbmQgcGFnZSBhdCAweCVsbHhcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZ3BhKTsKLQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihwYWdlKTsKLQkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBwYWdlOworCWlmIChpc19lcnJvcl9wYWdlKHBhZ2UpKQorCQlnb3RvIGVycm9yOworCisJcmV0dXJuIGttYXBfYXRvbWljKHBhZ2UsIGlkeCk7CisKK2Vycm9yOgorCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CisJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKKworCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IG5lc3RlZF9zdm1fZG8oc3RydWN0IHZjcHVfc3ZtICpzdm0sCi0JCQkgdTY0IGFyZzFfZ3BhLCB1NjQgYXJnMl9ncGEsIHZvaWQgKm9wYXF1ZSwKLQkJCSBpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKLQkJCQkJdm9pZCAqYXJnMSwKLQkJCQkJdm9pZCAqYXJnMiwKLQkJCQkJdm9pZCAqb3BhcXVlKSkKK3N0YXRpYyB2b2lkIG5lc3RlZF9zdm1fdW5tYXAodm9pZCAqYWRkciwgZW51bSBrbV90eXBlIGlkeCkKIHsKLQlzdHJ1Y3QgcGFnZSAqYXJnMV9wYWdlOwotCXN0cnVjdCBwYWdlICphcmcyX3BhZ2UgPSBOVUxMOwotCXZvaWQgKmFyZzE7Ci0Jdm9pZCAqYXJnMiA9IE5VTEw7Ci0JaW50IHJldHZhbDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWFyZzFfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcxX2dwYSk7Ci0JaWYoYXJnMV9wYWdlID09IE5VTEwpCi0JCXJldHVybiAxOworCWlmICghYWRkcikKKwkJcmV0dXJuOwogCi0JaWYgKGFyZzJfZ3BhKSB7Ci0JCWFyZzJfcGFnZSA9IG5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3ZtLCBhcmcyX2dwYSk7Ci0JCWlmKGFyZzJfcGFnZSA9PSBOVUxMKSB7Ci0JCQlrdm1fcmVsZWFzZV9wYWdlX2NsZWFuKGFyZzFfcGFnZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KKwlwYWdlID0ga21hcF9hdG9taWNfdG9fcGFnZShhZGRyKTsKIAotCWFyZzEgPSBrbWFwX2F0b21pYyhhcmcxX3BhZ2UsIEtNX1VTRVIwKTsKLQlpZiAoYXJnMl9ncGEpCi0JCWFyZzIgPSBrbWFwX2F0b21pYyhhcmcyX3BhZ2UsIEtNX1VTRVIxKTsKLQotCXJldHZhbCA9IGhhbmRsZXIoc3ZtLCBhcmcxLCBhcmcyLCBvcGFxdWUpOwotCi0Ja3VubWFwX2F0b21pYyhhcmcxLCBLTV9VU0VSMCk7Ci0JaWYgKGFyZzJfZ3BhKQotCQlrdW5tYXBfYXRvbWljKGFyZzIsIEtNX1VTRVIxKTsKLQotCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMV9wYWdlKTsKLQlpZiAoYXJnMl9ncGEpCi0JCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkoYXJnMl9wYWdlKTsKLQotCXJldHVybiByZXR2YWw7CisJa3VubWFwX2F0b21pYyhhZGRyLCBpZHgpOworCWt2bV9yZWxlYXNlX3BhZ2VfZGlydHkocGFnZSk7CiB9CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfcmVhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKLQkJCQkJdm9pZCAqYXJnMSwKLQkJCQkJdm9pZCAqYXJnMiwKLQkJCQkJdm9pZCAqb3BhcXVlKQorc3RhdGljIGJvb2wgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfbXNyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7Ci0JYm9vbCBrdm1fb3ZlcnJpZGVzID0gKihib29sICopb3BhcXVlOwotCXUzMiBleGl0X2NvZGUgPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlOwotCi0JaWYgKGt2bV9vdmVycmlkZXMpIHsKLQkJc3dpdGNoIChleGl0X2NvZGUpIHsKLQkJY2FzZSBTVk1fRVhJVF9JTlRSOgotCQljYXNlIFNWTV9FWElUX05NSToKLQkJCXJldHVybiAwOwotCQkvKiBGb3Igbm93IHdlIGFyZSBhbHdheXMgaGFuZGxpbmcgTlBGcyB3aGVuIHVzaW5nIHRoZW0gKi8KLQkJY2FzZSBTVk1fRVhJVF9OUEY6Ci0JCQlpZiAobnB0X2VuYWJsZWQpCi0JCQkJcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJLyogV2hlbiB3ZSdyZSBzaGFkb3dpbmcsIHRyYXAgUEZzICovCi0JCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFICsgUEZfVkVDVE9SOgotCQkJaWYgKCFucHRfZW5hYmxlZCkKLQkJCQlyZXR1cm4gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKGV4aXRfY29kZSkgewotCWNhc2UgU1ZNX0VYSVRfUkVBRF9DUjAgLi4uIFNWTV9FWElUX1JFQURfQ1I4OiB7Ci0JCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9DUjApOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgJiBjcl9iaXRzKQotCQkJcmV0dXJuIDE7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNWTV9FWElUX1dSSVRFX0NSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfQ1I4OiB7Ci0JCXUzMiBjcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfQ1IwKTsKLQkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmIGNyX2JpdHMpCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU1ZNX0VYSVRfUkVBRF9EUjAgLi4uIFNWTV9FWElUX1JFQURfRFI3OiB7Ci0JCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9EUjApOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgJiBkcl9iaXRzKQotCQkJcmV0dXJuIDE7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNWTV9FWElUX1dSSVRFX0RSMCAuLi4gU1ZNX0VYSVRfV1JJVEVfRFI3OiB7Ci0JCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfV1JJVEVfRFIwKTsKLQkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSAmIGRyX2JpdHMpCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU1ZNX0VYSVRfRVhDUF9CQVNFIC4uLiBTVk1fRVhJVF9FWENQX0JBU0UgKyAweDFmOiB7Ci0JCXUzMiBleGNwX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9FWENQX0JBU0UpOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJiBleGNwX2JpdHMpCi0JCQlyZXR1cm4gMTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6IHsKLQkJdTY0IGV4aXRfYml0cyA9IDFVTEwgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX0lOVFIpOwotCQluc3ZtX3ByaW50aygiZXhpdCBjb2RlOiAweCV4XG4iLCBleGl0X2NvZGUpOwotCQlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0ICYgZXhpdF9iaXRzKQotCQkJcmV0dXJuIDE7Ci0JfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX21zcihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKLQkJCQkgICAgICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiwKLQkJCQkgICAgICAgdm9pZCAqb3BhcXVlKQotewotCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7Ci0JdTggKm1zcnBtID0gKHU4ICopYXJnMjsKLSAgICAgICAgdTMyIHQwLCB0MTsKLQl1MzIgbXNyID0gc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkNYXTsKIAl1MzIgcGFyYW0gPSBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzEgJiAxOworCXUzMiBtc3IgPSBzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQ1hdOworCWJvb2wgcmV0ID0gZmFsc2U7CisJdTMyIHQwLCB0MTsKKwl1OCAqbXNycG07CiAKLQlpZiAoIShuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgJiAoMVVMTCA8PCBJTlRFUkNFUFRfTVNSX1BST1QpKSkKLQkJcmV0dXJuIDA7CisJaWYgKCEoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0ICYgKDFVTEwgPDwgSU5URVJDRVBUX01TUl9QUk9UKSkpCisJCXJldHVybiBmYWxzZTsKIAotCXN3aXRjaChtc3IpIHsKKwltc3JwbSA9IG5lc3RlZF9zdm1fbWFwKHN2bSwgc3ZtLT5uZXN0ZWQudm1jYl9tc3JwbSwgS01fVVNFUjApOworCisJaWYgKCFtc3JwbSkKKwkJZ290byBvdXQ7CisKKwlzd2l0Y2ggKG1zcikgewogCWNhc2UgMCAuLi4gMHgxZmZmOgogCQl0MCA9IChtc3IgKiAyKSAlIDg7CiAJCXQxID0gbXNyIC8gODsKQEAgLTE1MDAsODQgKzE0NDksMTg5IEBACiAJCXQwICU9IDg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAxOworCQlyZXQgPSB0cnVlOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBtc3JwbVt0MV0gJiAoKDEgPDwgcGFyYW0pIDw8IHQwKTsKKworb3V0OgorCW5lc3RlZF9zdm1fdW5tYXAobXNycG0sIEtNX1VTRVIwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X3NwZWNpYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJdTMyIGV4aXRfY29kZSA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGU7CisKKwlzd2l0Y2ggKGV4aXRfY29kZSkgeworCWNhc2UgU1ZNX0VYSVRfSU5UUjoKKwljYXNlIFNWTV9FWElUX05NSToKKwkJcmV0dXJuIE5FU1RFRF9FWElUX0hPU1Q7CisJCS8qIEZvciBub3cgd2UgYXJlIGFsd2F5cyBoYW5kbGluZyBOUEZzIHdoZW4gdXNpbmcgdGhlbSAqLworCWNhc2UgU1ZNX0VYSVRfTlBGOgorCQlpZiAobnB0X2VuYWJsZWQpCisJCQlyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDsKKwkJYnJlYWs7CisJLyogV2hlbiB3ZSdyZSBzaGFkb3dpbmcsIHRyYXAgUEZzICovCisJY2FzZSBTVk1fRVhJVF9FWENQX0JBU0UgKyBQRl9WRUNUT1I6CisJCWlmICghbnB0X2VuYWJsZWQpCisJCQlyZXR1cm4gTkVTVEVEX0VYSVRfSE9TVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCWlmIChtc3JwbVt0MV0gJiAoKDEgPDwgcGFyYW0pIDw8IHQwKSkKLQkJcmV0dXJuIDE7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVTVEVEX0VYSVRfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKQorLyoKKyAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGlzICN2bWV4aXQgd2FzIGFscmVhZHkgaGFuZGxlZAorICovCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCWJvb2wgayA9IGt2bV9vdmVycmlkZTsKKwl1MzIgZXhpdF9jb2RlID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZTsKKwlpbnQgdm1leGl0ID0gTkVTVEVEX0VYSVRfSE9TVDsKIAotCXN3aXRjaCAoc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSkgeworCXN3aXRjaCAoZXhpdF9jb2RlKSB7CiAJY2FzZSBTVk1fRVhJVF9NU1I6Ci0JCXJldHVybiBuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYiwKLQkJCQkgICAgIHN2bS0+bmVzdGVkX3ZtY2JfbXNycG0sIE5VTEwsCi0JCQkJICAgICBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3IpOwotCWRlZmF1bHQ6IGJyZWFrOworCQl2bWV4aXQgPSBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3Ioc3ZtKTsKKwkJYnJlYWs7CisJY2FzZSBTVk1fRVhJVF9SRUFEX0NSMCAuLi4gU1ZNX0VYSVRfUkVBRF9DUjg6IHsKKwkJdTMyIGNyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9SRUFEX0NSMCk7CisJCWlmIChzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3JfcmVhZCAmIGNyX2JpdHMpCisJCQl2bWV4aXQgPSBORVNURURfRVhJVF9ET05FOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9XUklURV9DUjAgLi4uIFNWTV9FWElUX1dSSVRFX0NSODogeworCQl1MzIgY3JfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1dSSVRFX0NSMCk7CisJCWlmIChzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3Jfd3JpdGUgJiBjcl9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfUkVBRF9EUjAgLi4uIFNWTV9FWElUX1JFQURfRFI3OiB7CisJCXUzMiBkcl9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfUkVBRF9EUjApOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2RyX3JlYWQgJiBkcl9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU1ZNX0VYSVRfV1JJVEVfRFIwIC4uLiBTVk1fRVhJVF9XUklURV9EUjc6IHsKKwkJdTMyIGRyX2JpdHMgPSAxIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9XUklURV9EUjApOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2RyX3dyaXRlICYgZHJfYml0cykKKwkJCXZtZXhpdCA9IE5FU1RFRF9FWElUX0RPTkU7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX0VYQ1BfQkFTRSAuLi4gU1ZNX0VYSVRfRVhDUF9CQVNFICsgMHgxZjogeworCQl1MzIgZXhjcF9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfRVhDUF9CQVNFKTsKKwkJaWYgKHN2bS0+bmVzdGVkLmludGVyY2VwdF9leGNlcHRpb25zICYgZXhjcF9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6IHsKKwkJdTY0IGV4aXRfYml0cyA9IDFVTEwgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX0lOVFIpOworCQluc3ZtX3ByaW50aygiZXhpdCBjb2RlOiAweCV4XG4iLCBleGl0X2NvZGUpOworCQlpZiAoc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0ICYgZXhpdF9iaXRzKQorCQkJdm1leGl0ID0gTkVTVEVEX0VYSVRfRE9ORTsKKwl9CiAJfQogCi0JcmV0dXJuIG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLCAwLCAmaywKLQkJCSAgICAgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfcmVhbCk7CisJaWYgKHZtZXhpdCA9PSBORVNURURfRVhJVF9ET05FKSB7CisJCW5zdm1fcHJpbnRrKCIjVk1FWElUIHJlYXNvbj0lMDR4XG4iLCBleGl0X2NvZGUpOworCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOworCX0KKworCXJldHVybiB2bWV4aXQ7CiB9CiAKLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXRfcmVhbChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqYXJnMSwKLQkJCQkgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3ZtY2JfY29udHJvbF9hcmVhKHN0cnVjdCB2bWNiICpkc3Rfdm1jYiwgc3RydWN0IHZtY2IgKmZyb21fdm1jYikKIHsKLQlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOwotCXN0cnVjdCB2bWNiICpoc2F2ZSA9IHN2bS0+aHNhdmU7Ci0JdTY0IG5lc3RlZF9zYXZlW10gPSB7IG5lc3RlZF92bWNiLT5zYXZlLmNyMCwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmNyMywKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmNyNCwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5zYXZlLmVmZXIsCi0JCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSwKLQkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMsCi0JCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQsCi0JCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW9wbV9iYXNlX3BhLAotCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wudHNjX29mZnNldCB9OworCXN0cnVjdCB2bWNiX2NvbnRyb2xfYXJlYSAqZHN0ICA9ICZkc3Rfdm1jYi0+Y29udHJvbDsKKwlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmZyb20gPSAmZnJvbV92bWNiLT5jb250cm9sOworCisJZHN0LT5pbnRlcmNlcHRfY3JfcmVhZCAgICA9IGZyb20tPmludGVyY2VwdF9jcl9yZWFkOworCWRzdC0+aW50ZXJjZXB0X2NyX3dyaXRlICAgPSBmcm9tLT5pbnRlcmNlcHRfY3Jfd3JpdGU7CisJZHN0LT5pbnRlcmNlcHRfZHJfcmVhZCAgICA9IGZyb20tPmludGVyY2VwdF9kcl9yZWFkOworCWRzdC0+aW50ZXJjZXB0X2RyX3dyaXRlICAgPSBmcm9tLT5pbnRlcmNlcHRfZHJfd3JpdGU7CisJZHN0LT5pbnRlcmNlcHRfZXhjZXB0aW9ucyA9IGZyb20tPmludGVyY2VwdF9leGNlcHRpb25zOworCWRzdC0+aW50ZXJjZXB0ICAgICAgICAgICAgPSBmcm9tLT5pbnRlcmNlcHQ7CisJZHN0LT5pb3BtX2Jhc2VfcGEgICAgICAgICA9IGZyb20tPmlvcG1fYmFzZV9wYTsKKwlkc3QtPm1zcnBtX2Jhc2VfcGEgICAgICAgID0gZnJvbS0+bXNycG1fYmFzZV9wYTsKKwlkc3QtPnRzY19vZmZzZXQgICAgICAgICAgID0gZnJvbS0+dHNjX29mZnNldDsKKwlkc3QtPmFzaWQgICAgICAgICAgICAgICAgID0gZnJvbS0+YXNpZDsKKwlkc3QtPnRsYl9jdGwgICAgICAgICAgICAgID0gZnJvbS0+dGxiX2N0bDsKKwlkc3QtPmludF9jdGwgICAgICAgICAgICAgID0gZnJvbS0+aW50X2N0bDsKKwlkc3QtPmludF92ZWN0b3IgICAgICAgICAgID0gZnJvbS0+aW50X3ZlY3RvcjsKKwlkc3QtPmludF9zdGF0ZSAgICAgICAgICAgID0gZnJvbS0+aW50X3N0YXRlOworCWRzdC0+ZXhpdF9jb2RlICAgICAgICAgICAgPSBmcm9tLT5leGl0X2NvZGU7CisJZHN0LT5leGl0X2NvZGVfaGkgICAgICAgICA9IGZyb20tPmV4aXRfY29kZV9oaTsKKwlkc3QtPmV4aXRfaW5mb18xICAgICAgICAgID0gZnJvbS0+ZXhpdF9pbmZvXzE7CisJZHN0LT5leGl0X2luZm9fMiAgICAgICAgICA9IGZyb20tPmV4aXRfaW5mb18yOworCWRzdC0+ZXhpdF9pbnRfaW5mbyAgICAgICAgPSBmcm9tLT5leGl0X2ludF9pbmZvOworCWRzdC0+ZXhpdF9pbnRfaW5mb19lcnIgICAgPSBmcm9tLT5leGl0X2ludF9pbmZvX2VycjsKKwlkc3QtPm5lc3RlZF9jdGwgICAgICAgICAgID0gZnJvbS0+bmVzdGVkX2N0bDsKKwlkc3QtPmV2ZW50X2luaiAgICAgICAgICAgID0gZnJvbS0+ZXZlbnRfaW5qOworCWRzdC0+ZXZlbnRfaW5qX2VyciAgICAgICAgPSBmcm9tLT5ldmVudF9pbmpfZXJyOworCWRzdC0+bmVzdGVkX2NyMyAgICAgICAgICAgPSBmcm9tLT5uZXN0ZWRfY3IzOworCWRzdC0+bGJyX2N0bCAgICAgICAgICAgICAgPSBmcm9tLT5sYnJfY3RsOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1leGl0KHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYjsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPm5lc3RlZC5oc2F2ZTsKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS0+dm1jYjsKKworCW5lc3RlZF92bWNiID0gbmVzdGVkX3N2bV9tYXAoc3ZtLCBzdm0tPm5lc3RlZC52bWNiLCBLTV9VU0VSMCk7CisJaWYgKCFuZXN0ZWRfdm1jYikKKwkJcmV0dXJuIDE7CiAKIAkvKiBHaXZlIHRoZSBjdXJyZW50IHZtY2IgdG8gdGhlIGd1ZXN0ICovCi0JbWVtY3B5KG5lc3RlZF92bWNiLCBzdm0tPnZtY2IsIHNpemVvZihzdHJ1Y3Qgdm1jYikpOwotCW5lc3RlZF92bWNiLT5zYXZlLmNyMCA9IG5lc3RlZF9zYXZlWzBdOwotCWlmICghbnB0X2VuYWJsZWQpCi0JCW5lc3RlZF92bWNiLT5zYXZlLmNyMyA9IG5lc3RlZF9zYXZlWzFdOwotCW5lc3RlZF92bWNiLT5zYXZlLmNyNCA9IG5lc3RlZF9zYXZlWzJdOwotCW5lc3RlZF92bWNiLT5zYXZlLmVmZXIgPSBuZXN0ZWRfc2F2ZVszXTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCA9IG5lc3RlZF9zYXZlWzRdOwotCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSA9IG5lc3RlZF9zYXZlWzVdOwotCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkID0gbmVzdGVkX3NhdmVbNl07Ci0JbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlID0gbmVzdGVkX3NhdmVbN107Ci0JbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBuZXN0ZWRfc2F2ZVs4XTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgPSBuZXN0ZWRfc2F2ZVs5XTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gbmVzdGVkX3NhdmVbMTBdOwotCW5lc3RlZF92bWNiLT5jb250cm9sLmlvcG1fYmFzZV9wYSA9IG5lc3RlZF9zYXZlWzExXTsKLQluZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gbmVzdGVkX3NhdmVbMTJdOworCWRpc2FibGVfZ2lmKHN2bSk7CisKKwluZXN0ZWRfdm1jYi0+c2F2ZS5lcyAgICAgPSB2bWNiLT5zYXZlLmVzOworCW5lc3RlZF92bWNiLT5zYXZlLmNzICAgICA9IHZtY2ItPnNhdmUuY3M7CisJbmVzdGVkX3ZtY2ItPnNhdmUuc3MgICAgID0gdm1jYi0+c2F2ZS5zczsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5kcyAgICAgPSB2bWNiLT5zYXZlLmRzOworCW5lc3RlZF92bWNiLT5zYXZlLmdkdHIgICA9IHZtY2ItPnNhdmUuZ2R0cjsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5pZHRyICAgPSB2bWNiLT5zYXZlLmlkdHI7CisJaWYgKG5wdF9lbmFibGVkKQorCQluZXN0ZWRfdm1jYi0+c2F2ZS5jcjMgICAgPSB2bWNiLT5zYXZlLmNyMzsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5jcjIgICAgPSB2bWNiLT5zYXZlLmNyMjsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yZmxhZ3MgPSB2bWNiLT5zYXZlLnJmbGFnczsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yaXAgICAgPSB2bWNiLT5zYXZlLnJpcDsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yc3AgICAgPSB2bWNiLT5zYXZlLnJzcDsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5yYXggICAgPSB2bWNiLT5zYXZlLnJheDsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5kcjcgICAgPSB2bWNiLT5zYXZlLmRyNzsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5kcjYgICAgPSB2bWNiLT5zYXZlLmRyNjsKKwluZXN0ZWRfdm1jYi0+c2F2ZS5jcGwgICAgPSB2bWNiLT5zYXZlLmNwbDsKKworCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgICAgICAgICAgID0gdm1jYi0+Y29udHJvbC5pbnRfY3RsOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IgICAgICAgID0gdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9zdGF0ZSAgICAgICAgID0gdm1jYi0+Y29udHJvbC5pbnRfc3RhdGU7CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlICAgICAgICAgPSB2bWNiLT5jb250cm9sLmV4aXRfY29kZTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2NvZGVfaGkgICAgICA9IHZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlX2hpOworCW5lc3RlZF92bWNiLT5jb250cm9sLmV4aXRfaW5mb18xICAgICAgID0gdm1jYi0+Y29udHJvbC5leGl0X2luZm9fMTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiAgICAgICA9IHZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzI7CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbyAgICAgPSB2bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm87CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIgPSB2bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm9fZXJyOworCW5lc3RlZF92bWNiLT5jb250cm9sLnRsYl9jdGwgICAgICAgICAgID0gMDsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmogICAgICAgICA9IDA7CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VyciAgICAgPSAwOwogCiAJLyogV2UgYWx3YXlzIHNldCBWX0lOVFJfTUFTS0lORyBhbmQgcmVtZW1iZXIgdGhlIG9sZCB2YWx1ZSBpbiBoZmxhZ3MgKi8KIAlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKIAkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JTlRSX01BU0tJTkdfTUFTSzsKIAotCWlmICgobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmIFZfSVJRX01BU0spICYmCi0JICAgIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yKSkgewotCQluc3ZtX3ByaW50aygiV0FSTklORzogSVJRIDB4JXggc3RpbGwgZW5hYmxlZCBvbiAjVk1FWElUXG4iLAotCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IpOwotCX0KLQogCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGNvbnRyb2wgZW50cmllcyAqLwotCXN2bS0+dm1jYi0+Y29udHJvbCA9IGhzYXZlLT5jb250cm9sOworCWNvcHlfdm1jYl9jb250cm9sX2FyZWEodm1jYiwgaHNhdmUpOwogCiAJLyogS2lsbCBhbnkgcGVuZGluZyBleGNlcHRpb25zICovCiAJaWYgKHN2bS0+dmNwdS5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID09IHRydWUpCiAJCW5zdm1fcHJpbnRrKCJXQVJOSU5HOiBQZW5kaW5nIEV4Y2VwdGlvblxuIik7Ci0Jc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKKworCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUoJnN2bS0+dmNwdSk7CisJa3ZtX2NsZWFyX2ludGVycnVwdF9xdWV1ZSgmc3ZtLT52Y3B1KTsKIAogCS8qIFJlc3RvcmUgc2VsZWN0ZWQgc2F2ZSBlbnRyaWVzICovCiAJc3ZtLT52bWNiLT5zYXZlLmVzID0gaHNhdmUtPnNhdmUuZXM7CkBAIC0xNjAzLDE5ICsxNjU3LDEwIEBACiAJc3ZtLT52bWNiLT5zYXZlLmNwbCA9IDA7CiAJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8gPSAwOwogCi0Jc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKIAkvKiBFeGl0IG5lc3RlZCBTVk0gbW9kZSAqLwotCXN2bS0+bmVzdGVkX3ZtY2IgPSAwOworCXN2bS0+bmVzdGVkLnZtY2IgPSAwOwogCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCi17Ci0JbnN2bV9wcmludGsoIlZNZXhpdFxuIik7Ci0JaWYgKG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLCAwLAotCQkJICBOVUxMLCBuZXN0ZWRfc3ZtX3ZtZXhpdF9yZWFsKSkKLQkJcmV0dXJuIDE7CisJbmVzdGVkX3N2bV91bm1hcChuZXN0ZWRfdm1jYiwgS01fVVNFUjApOwogCiAJa3ZtX21tdV9yZXNldF9jb250ZXh0KCZzdm0tPnZjcHUpOwogCWt2bV9tbXVfbG9hZCgmc3ZtLT52Y3B1KTsKQEAgLTE2MjMsMzggKzE2NjgsNjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuX21zcnBtKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAotCQkJCSAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQorc3RhdGljIGJvb2wgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKIHsKKwl1MzIgKm5lc3RlZF9tc3JwbTsKIAlpbnQgaTsKLQl1MzIgKm5lc3RlZF9tc3JwbSA9ICh1MzIqKWFyZzE7Ci0JZm9yIChpPTA7IGk8IFBBR0VfU0laRSAqICgxIDw8IE1TUlBNX0FMTE9DX09SREVSKSAvIDQ7IGkrKykKLQkJc3ZtLT5uZXN0ZWRfbXNycG1baV0gPSBzdm0tPm1zcnBtW2ldIHwgbmVzdGVkX21zcnBtW2ldOwotCXN2bS0+dm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gX19wYShzdm0tPm5lc3RlZF9tc3JwbSk7CiAKLQlyZXR1cm4gMDsKKwluZXN0ZWRfbXNycG0gPSBuZXN0ZWRfc3ZtX21hcChzdm0sIHN2bS0+bmVzdGVkLnZtY2JfbXNycG0sIEtNX1VTRVIwKTsKKwlpZiAoIW5lc3RlZF9tc3JwbSkKKwkJcmV0dXJuIGZhbHNlOworCisJZm9yIChpPTA7IGk8IFBBR0VfU0laRSAqICgxIDw8IE1TUlBNX0FMTE9DX09SREVSKSAvIDQ7IGkrKykKKwkJc3ZtLT5uZXN0ZWQubXNycG1baV0gPSBzdm0tPm1zcnBtW2ldIHwgbmVzdGVkX21zcnBtW2ldOworCisJc3ZtLT52bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEgPSBfX3BhKHN2bS0+bmVzdGVkLm1zcnBtKTsKKworCW5lc3RlZF9zdm1fdW5tYXAobmVzdGVkX21zcnBtLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAotCQkJICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3N0YXRpYyBib29sIG5lc3RlZF9zdm1fdm1ydW4oc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0Jc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiID0gKHN0cnVjdCB2bWNiICopYXJnMTsKLQlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPmhzYXZlOworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYjsKKwlzdHJ1Y3Qgdm1jYiAqaHNhdmUgPSBzdm0tPm5lc3RlZC5oc2F2ZTsKKwlzdHJ1Y3Qgdm1jYiAqdm1jYiA9IHN2bS0+dm1jYjsKKworCW5lc3RlZF92bWNiID0gbmVzdGVkX3N2bV9tYXAoc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCBLTV9VU0VSMCk7CisJaWYgKCFuZXN0ZWRfdm1jYikKKwkJcmV0dXJuIGZhbHNlOwogCiAJLyogbmVzdGVkX3ZtY2IgaXMgb3VyIGluZGljYXRvciBpZiBuZXN0ZWQgU1ZNIGlzIGFjdGl2YXRlZCAqLwotCXN2bS0+bmVzdGVkX3ZtY2IgPSBzdm0tPnZtY2ItPnNhdmUucmF4OworCXN2bS0+bmVzdGVkLnZtY2IgPSBzdm0tPnZtY2ItPnNhdmUucmF4OwogCiAJLyogQ2xlYXIgaW50ZXJuYWwgc3RhdHVzICovCi0Jc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKKwlrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKCZzdm0tPnZjcHUpOworCWt2bV9jbGVhcl9pbnRlcnJ1cHRfcXVldWUoJnN2bS0+dmNwdSk7CiAKIAkvKiBTYXZlIHRoZSBvbGQgdm1jYiwgc28gd2UgZG9uJ3QgbmVlZCB0byBwaWNrIHdoYXQgd2Ugc2F2ZSwgYnV0CiAJICAgY2FuIHJlc3RvcmUgZXZlcnl0aGluZyB3aGVuIGEgVk1FWElUIG9jY3VycyAqLwotCW1lbWNweShoc2F2ZSwgc3ZtLT52bWNiLCBzaXplb2Yoc3RydWN0IHZtY2IpKTsKLQkvKiBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBDUjMgaW4gdGhlIFNQVCBjYXNlICovCi0JaWYgKCFucHRfZW5hYmxlZCkKLQkJaHNhdmUtPnNhdmUuY3IzID0gc3ZtLT52Y3B1LmFyY2guY3IzOwotCWhzYXZlLT5zYXZlLmNyNCA9IHN2bS0+dmNwdS5hcmNoLmNyNDsKLQloc2F2ZS0+c2F2ZS5yaXAgPSBzdm0tPm5leHRfcmlwOworCWhzYXZlLT5zYXZlLmVzICAgICA9IHZtY2ItPnNhdmUuZXM7CisJaHNhdmUtPnNhdmUuY3MgICAgID0gdm1jYi0+c2F2ZS5jczsKKwloc2F2ZS0+c2F2ZS5zcyAgICAgPSB2bWNiLT5zYXZlLnNzOworCWhzYXZlLT5zYXZlLmRzICAgICA9IHZtY2ItPnNhdmUuZHM7CisJaHNhdmUtPnNhdmUuZ2R0ciAgID0gdm1jYi0+c2F2ZS5nZHRyOworCWhzYXZlLT5zYXZlLmlkdHIgICA9IHZtY2ItPnNhdmUuaWR0cjsKKwloc2F2ZS0+c2F2ZS5lZmVyICAgPSBzdm0tPnZjcHUuYXJjaC5zaGFkb3dfZWZlcjsKKwloc2F2ZS0+c2F2ZS5jcjAgICAgPSBzdm0tPnZjcHUuYXJjaC5jcjA7CisJaHNhdmUtPnNhdmUuY3I0ICAgID0gc3ZtLT52Y3B1LmFyY2guY3I0OworCWhzYXZlLT5zYXZlLnJmbGFncyA9IHZtY2ItPnNhdmUucmZsYWdzOworCWhzYXZlLT5zYXZlLnJpcCAgICA9IHN2bS0+bmV4dF9yaXA7CisJaHNhdmUtPnNhdmUucnNwICAgID0gdm1jYi0+c2F2ZS5yc3A7CisJaHNhdmUtPnNhdmUucmF4ICAgID0gdm1jYi0+c2F2ZS5yYXg7CisJaWYgKG5wdF9lbmFibGVkKQorCQloc2F2ZS0+c2F2ZS5jcjMgICAgPSB2bWNiLT5zYXZlLmNyMzsKKwllbHNlCisJCWhzYXZlLT5zYXZlLmNyMyAgICA9IHN2bS0+dmNwdS5hcmNoLmNyMzsKKworCWNvcHlfdm1jYl9jb250cm9sX2FyZWEoaHNhdmUsIHZtY2IpOwogCiAJaWYgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQogCQlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfSElGX01BU0s7CkBAIC0xNjc5LDcgKzE3NDksNyBAQAogCQlrdm1fc2V0X2NyMygmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjMpOwogCQlrdm1fbW11X3Jlc2V0X2NvbnRleHQoJnN2bS0+dmNwdSk7CiAJfQotCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjI7CisJc3ZtLT52bWNiLT5zYXZlLmNyMiA9IHN2bS0+dmNwdS5hcmNoLmNyMiA9IG5lc3RlZF92bWNiLT5zYXZlLmNyMjsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JBWCwgbmVzdGVkX3ZtY2ItPnNhdmUucmF4KTsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JTUCwgbmVzdGVkX3ZtY2ItPnNhdmUucnNwKTsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUoJnN2bS0+dmNwdSwgVkNQVV9SRUdTX1JJUCwgbmVzdGVkX3ZtY2ItPnNhdmUucmlwKTsKQEAgLTE3MDYsNyArMTc3NiwxNSBAQAogCiAJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQ7CiAKLQlzdm0tPm5lc3RlZF92bWNiX21zcnBtID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYTsKKwlzdm0tPm5lc3RlZC52bWNiX21zcnBtID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYTsKKworCS8qIGNhY2hlIGludGVyY2VwdHMgKi8KKwlzdm0tPm5lc3RlZC5pbnRlcmNlcHRfY3JfcmVhZCAgICA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkOworCXN2bS0+bmVzdGVkLmludGVyY2VwdF9jcl93cml0ZSAgID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlOworCXN2bS0+bmVzdGVkLmludGVyY2VwdF9kcl9yZWFkICAgID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQ7CisJc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2RyX3dyaXRlICAgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGU7CisJc3ZtLT5uZXN0ZWQuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9uczsKKwlzdm0tPm5lc3RlZC5pbnRlcmNlcHQgICAgICAgICAgICA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdDsKIAogCWZvcmNlX25ld19hc2lkKCZzdm0tPnZjcHUpOwogCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbzsKQEAgLTE3MzQsMTIgKzE4MTIsMTQgQEAKIAlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qOwogCXN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmpfZXJyID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qX2VycjsKIAotCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9HSUZfTUFTSzsKKwluZXN0ZWRfc3ZtX3VubWFwKG5lc3RlZF92bWNiLCBLTV9VU0VSMCk7CiAKLQlyZXR1cm4gMDsKKwllbmFibGVfZ2lmKHN2bSk7CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3RydWN0IHZtY2IgKmZyb21fdm1jYiwgc3RydWN0IHZtY2IgKnRvX3ZtY2IpCitzdGF0aWMgdm9pZCBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3RydWN0IHZtY2IgKmZyb21fdm1jYiwgc3RydWN0IHZtY2IgKnRvX3ZtY2IpCiB7CiAJdG9fdm1jYi0+c2F2ZS5mcyA9IGZyb21fdm1jYi0+c2F2ZS5mczsKIAl0b192bWNiLT5zYXZlLmdzID0gZnJvbV92bWNiLT5zYXZlLmdzOwpAQCAtMTc1Myw0NCArMTgzMyw0NCBAQAogCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3MgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfY3M7CiAJdG9fdm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3AgPSBmcm9tX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwOwogCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2VpcDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1sb2FkKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKLQkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQotewotCXJldHVybiBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoKHN0cnVjdCB2bWNiICopbmVzdGVkX3ZtY2IsIHN2bS0+dm1jYik7Ci19Ci0KLXN0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXNhdmUoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHZvaWQgKm5lc3RlZF92bWNiLAotCQkJICAgICB2b2lkICphcmcyLCB2b2lkICpvcGFxdWUpCi17Ci0JcmV0dXJuIG5lc3RlZF9zdm1fdm1sb2Fkc2F2ZShzdm0tPnZtY2IsIChzdHJ1Y3Qgdm1jYiAqKW5lc3RlZF92bWNiKTsKIH0KIAogc3RhdGljIGludCB2bWxvYWRfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2I7CisKIAlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQogCQlyZXR1cm4gMTsKIAogCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAKLQluZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgMCwgTlVMTCwgbmVzdGVkX3N2bV92bWxvYWQpOworCW5lc3RlZF92bWNiID0gbmVzdGVkX3N2bV9tYXAoc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCBLTV9VU0VSMCk7CisJaWYgKCFuZXN0ZWRfdm1jYikKKwkJcmV0dXJuIDE7CisKKwluZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUobmVzdGVkX3ZtY2IsIHN2bS0+dm1jYik7CisJbmVzdGVkX3N2bV91bm1hcChuZXN0ZWRfdm1jYiwgS01fVVNFUjApOwogCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgdm1zYXZlX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CisJc3RydWN0IHZtY2IgKm5lc3RlZF92bWNiOworCiAJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKIAkJcmV0dXJuIDE7CiAKIAlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCi0JbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsIE5VTEwsIG5lc3RlZF9zdm1fdm1zYXZlKTsKKwluZXN0ZWRfdm1jYiA9IG5lc3RlZF9zdm1fbWFwKHN2bSwgc3ZtLT52bWNiLT5zYXZlLnJheCwgS01fVVNFUjApOworCWlmICghbmVzdGVkX3ZtY2IpCisJCXJldHVybiAxOworCisJbmVzdGVkX3N2bV92bWxvYWRzYXZlKHN2bS0+dm1jYiwgbmVzdGVkX3ZtY2IpOworCW5lc3RlZF9zdm1fdW5tYXAobmVzdGVkX3ZtY2IsIEtNX1VTRVIwKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTc5OCwxOSArMTg3OCwyOSBAQAogc3RhdGljIGludCB2bXJ1bl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCW5zdm1fcHJpbnRrKCJWTXJ1blxuIik7CisKIAlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQogCQlyZXR1cm4gMTsKIAogCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CiAKLQlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsCi0JCQkgIE5VTEwsIG5lc3RlZF9zdm1fdm1ydW4pKQorCWlmICghbmVzdGVkX3N2bV92bXJ1bihzdm0pKQogCQlyZXR1cm4gMTsKIAotCWlmIChuZXN0ZWRfc3ZtX2RvKHN2bSwgc3ZtLT5uZXN0ZWRfdm1jYl9tc3JwbSwgMCwKLQkJICAgICAgTlVMTCwgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbSkpCi0JCXJldHVybiAxOworCWlmICghbmVzdGVkX3N2bV92bXJ1bl9tc3JwbShzdm0pKQorCQlnb3RvIGZhaWxlZDsKKworCXJldHVybiAxOworCitmYWlsZWQ6CisKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9jb2RlICAgID0gU1ZNX0VYSVRfRVJSOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGVfaGkgPSAwOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSAgPSAwOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiAgPSAwOworCisJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTgyMyw3ICsxOTEzLDcgQEAKIAlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCi0Jc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0dJRl9NQVNLOworCWVuYWJsZV9naWYoc3ZtKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTgzNiw3ICsxOTI2LDcgQEAKIAlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCi0Jc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKKwlkaXNhYmxlX2dpZihzdm0pOwogCiAJLyogQWZ0ZXIgYSBDTEdJIG5vIGludGVycnVwdHMgc2hvdWxkIGNvbWUgKi8KIAlzdm1fY2xlYXJfdmludHIoc3ZtKTsKQEAgLTE4NDUsNiArMTkzNSwxOSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGludmxwZ2FfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSAmc3ZtLT52Y3B1OworCW5zdm1fcHJpbnRrKCJJTlZMUEdBXG4iKTsKKworCS8qIExldCdzIHRyZWF0IElOVkxQR0EgdGhlIHNhbWUgYXMgSU5WTFBHIChjYW4gYmUgb3B0aW1pemVkISkgKi8KKwlrdm1fbW11X2ludmxwZyh2Y3B1LCB2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0pOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBpbnZhbGlkX29wX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKQEAgLTE5NTMsNyArMjA1Niw3IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKIAlzd2l0Y2ggKGVjeCkgewotCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOiB7CisJY2FzZSBNU1JfSUEzMl9UU0M6IHsKIAkJdTY0IHRzYzsKIAogCQlyZHRzY2xsKHRzYyk7CkBAIC0xOTgxLDEwICsyMDg0LDEwIEBACiAJCSpkYXRhID0gc3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2NzOwogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VJUDoKLQkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZWlwOworCQkqZGF0YSA9IHN2bS0+c3lzZW50ZXJfZWlwOwogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX1NZU0VOVEVSX0VTUDoKLQkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwOworCQkqZGF0YSA9IHN2bS0+c3lzZW50ZXJfZXNwOwogCQlicmVhazsKIAkvKiBOb2JvZHkgd2lsbCBjaGFuZ2UgdGhlIGZvbGxvd2luZyA1IHZhbHVlcyBpbiB0aGUgVk1DQiBzbwogCSAgIHdlIGNhbiBzYWZlbHkgcmV0dXJuIHRoZW0gb24gcmRtc3IuIFRoZXkgd2lsbCBhbHdheXMgYmUgMApAQCAtMjAwNSw3ICsyMTA4LDcgQEAKIAkJKmRhdGEgPSBzdm0tPnZtY2ItPnNhdmUubGFzdF9leGNwX3RvOwogCQlicmVhazsKIAljYXNlIE1TUl9WTV9IU0FWRV9QQToKLQkJKmRhdGEgPSBzdm0tPmhzYXZlX21zcjsKKwkJKmRhdGEgPSBzdm0tPm5lc3RlZC5oc2F2ZV9tc3I7CiAJCWJyZWFrOwogCWNhc2UgTVNSX1ZNX0NSOgogCQkqZGF0YSA9IDA7CkBAIC0yMDI3LDggKzIxMzAsNyBAQAogCWlmIChzdm1fZ2V0X21zcigmc3ZtLT52Y3B1LCBlY3gsICZkYXRhKSkKIAkJa3ZtX2luamVjdF9ncCgmc3ZtLT52Y3B1LCAwKTsKIAllbHNlIHsKLQkJS1ZNVFJBQ0VfM0QoTVNSX1JFQUQsICZzdm0tPnZjcHUsIGVjeCwgKHUzMilkYXRhLAotCQkJICAgICh1MzIpKGRhdGEgPj4gMzIpLCBoYW5kbGVyKTsKKwkJdHJhY2Vfa3ZtX21zcl9yZWFkKGVjeCwgZGF0YSk7CiAKIAkJc3ZtLT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IGRhdGEgJiAweGZmZmZmZmZmOwogCQlzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdID0gZGF0YSA+PiAzMjsKQEAgLTIwNDMsNyArMjE0NSw3IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKIAlzd2l0Y2ggKGVjeCkgewotCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOiB7CisJY2FzZSBNU1JfSUEzMl9UU0M6IHsKIAkJdTY0IHRzYzsKIAogCQlyZHRzY2xsKHRzYyk7CkBAIC0yMDcxLDkgKzIxNzMsMTEgQEAKIAkJc3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2NzID0gZGF0YTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9FSVA6CisJCXN2bS0+c3lzZW50ZXJfZWlwID0gZGF0YTsKIAkJc3ZtLT52bWNiLT5zYXZlLnN5c2VudGVyX2VpcCA9IGRhdGE7CiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgorCQlzdm0tPnN5c2VudGVyX2VzcCA9IGRhdGE7CiAJCXN2bS0+dm1jYi0+c2F2ZS5zeXNlbnRlcl9lc3AgPSBkYXRhOwogCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX0RFQlVHQ1RMTVNSOgpAQCAtMjA5MSwyNCArMjE5NSwxMiBAQAogCQllbHNlCiAJCQlzdm1fZGlzYWJsZV9sYnJ2KHN2bSk7CiAJCWJyZWFrOwotCWNhc2UgTVNSX0s3X0VWTlRTRUwwOgotCWNhc2UgTVNSX0s3X0VWTlRTRUwxOgotCWNhc2UgTVNSX0s3X0VWTlRTRUwyOgotCWNhc2UgTVNSX0s3X0VWTlRTRUwzOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIwOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIxOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIyOgotCWNhc2UgTVNSX0s3X1BFUkZDVFIzOgotCQkvKgotCQkgKiBKdXN0IGRpc2NhcmQgYWxsIHdyaXRlcyB0byB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnM7IHRoaXMKLQkJICogc2hvdWxkIGtlZXAgYm90aCBvbGRlciBsaW51eCBhbmQgd2luZG93cyA2NC1iaXQgZ3Vlc3RzCi0JCSAqIGhhcHB5Ci0JCSAqLwotCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgcGVyZmN0ciB3cm1zcjogMHgleCBkYXRhIDB4JWxseFxuIiwgZWN4LCBkYXRhKTsKLQotCQlicmVhazsKIAljYXNlIE1TUl9WTV9IU0FWRV9QQToKLQkJc3ZtLT5oc2F2ZV9tc3IgPSBkYXRhOworCQlzdm0tPm5lc3RlZC5oc2F2ZV9tc3IgPSBkYXRhOworCQlicmVhazsKKwljYXNlIE1TUl9WTV9DUjoKKwljYXNlIE1TUl9WTV9JR05ORToKKwkJcHJfdW5pbXBsKHZjcHUsICJ1bmltcGxlbWVudGVkIHdybXNyOiAweCV4IGRhdGEgMHglbGx4XG4iLCBlY3gsIGRhdGEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CkBAIC0yMTIyLDggKzIyMTQsNyBAQAogCXU2NCBkYXRhID0gKHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gJiAtMXUpCiAJCXwgKCh1NjQpKHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gJiAtMXUpIDw8IDMyKTsKIAotCUtWTVRSQUNFXzNEKE1TUl9XUklURSwgJnN2bS0+dmNwdSwgZWN4LCAodTMyKWRhdGEsICh1MzIpKGRhdGEgPj4gMzIpLAotCQkgICAgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX21zcl93cml0ZShlY3gsIGRhdGEpOwogCiAJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDI7CiAJaWYgKHN2bV9zZXRfbXNyKCZzdm0tPnZjcHUsIGVjeCwgZGF0YSkpCkBAIC0yMTQ0LDggKzIyMzUsNiBAQAogc3RhdGljIGludCBpbnRlcnJ1cHRfd2luZG93X2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKLQlLVk1UUkFDRV8wRChQRU5EX0lOVFIsICZzdm0tPnZjcHUsIGhhbmRsZXIpOwotCiAJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CiAJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSVJRX01BU0s7CiAJLyoKQEAgLTIyMDEsNyArMjI5MCw3IEBACiAJW1NWTV9FWElUX0lOVkRdICAgICAgICAgICAgICAgICAgICAgICAgID0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0hMVF0JCQkJPSBoYWx0X2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfSU5WTFBHXQkJCT0gaW52bHBnX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfSU5WTFBHQV0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9JTlZMUEdBXQkJCT0gaW52bHBnYV9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0lPSU9dIAkJICAJPSBpb19pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX01TUl0JCQkJPSBtc3JfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9UQVNLX1NXSVRDSF0JCQk9IHRhc2tfc3dpdGNoX2ludGVyY2VwdGlvbiwKQEAgLTIyMjQsMjAgKzIzMTMsMjYgQEAKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAl1MzIgZXhpdF9jb2RlID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZTsKIAotCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9jb2RlLCAodTMyKXN2bS0+dm1jYi0+c2F2ZS5yaXAsCi0JCSAgICAodTMyKSgodTY0KXN2bS0+dm1jYi0+c2F2ZS5yaXAgPj4gMzIpLCBlbnRyeWV4aXQpOworCXRyYWNlX2t2bV9leGl0KGV4aXRfY29kZSwgc3ZtLT52bWNiLT5zYXZlLnJpcCk7CiAKIAlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJaW50IHZtZXhpdDsKKwogCQluc3ZtX3ByaW50aygibmVzdGVkIGhhbmRsZV9leGl0OiAweCV4IHwgMHglbHggfCAweCVseCB8IDB4JWx4XG4iLAogCQkJICAgIGV4aXRfY29kZSwgc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xLAogCQkJICAgIHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiwgc3ZtLT52bWNiLT5zYXZlLnJpcCk7Ci0JCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIHRydWUpKSB7Ci0JCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOwotCQkJbnN2bV9wcmludGsoIi0+ICNWTUVYSVRcbiIpOworCisJCXZtZXhpdCA9IG5lc3RlZF9zdm1fZXhpdF9zcGVjaWFsKHN2bSk7CisKKwkJaWYgKHZtZXhpdCA9PSBORVNURURfRVhJVF9DT05USU5VRSkKKwkJCXZtZXhpdCA9IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSk7CisKKwkJaWYgKHZtZXhpdCA9PSBORVNURURfRVhJVF9ET05FKQogCQkJcmV0dXJuIDE7Ci0JCX0KIAl9CiAKKwlzdm1fY29tcGxldGVfaW50ZXJydXB0cyhzdm0pOworCiAJaWYgKG5wdF9lbmFibGVkKSB7CiAJCWludCBtbXVfcmVsb2FkID0gMDsKIAkJaWYgKCh2Y3B1LT5hcmNoLmNyMCBeIHN2bS0+dm1jYi0+c2F2ZS5jcjApICYgWDg2X0NSMF9QRykgewpAQCAtMjI0NiwxMiArMjM0MSw2IEBACiAJCX0KIAkJdmNwdS0+YXJjaC5jcjAgPSBzdm0tPnZtY2ItPnNhdmUuY3IwOwogCQl2Y3B1LT5hcmNoLmNyMyA9IHN2bS0+dm1jYi0+c2F2ZS5jcjM7Ci0JCWlmIChpc19wYWdpbmcodmNwdSkgJiYgaXNfcGFlKHZjcHUpICYmICFpc19sb25nX21vZGUodmNwdSkpIHsKLQkJCWlmICghbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC5jcjMpKSB7Ci0JCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KLQkJfQogCQlpZiAobW11X3JlbG9hZCkgewogCQkJa3ZtX21tdV9yZXNldF9jb250ZXh0KHZjcHUpOwogCQkJa3ZtX21tdV9sb2FkKHZjcHUpOwpAQCAtMjMxOSw3ICsyNDA4LDcgQEAKIHsKIAlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2w7CiAKLQlLVk1UUkFDRV8xRChJTkpfVklSUSwgJnN2bS0+dmNwdSwgKHUzMilpcnEsIGhhbmRsZXIpOworCXRyYWNlX2t2bV9pbmpfdmlycShpcnEpOwogCiAJKytzdm0tPnZjcHUuc3RhdC5pcnFfaW5qZWN0aW9uczsKIAljb250cm9sID0gJnN2bS0+dm1jYi0+Y29udHJvbDsKQEAgLTIzMjksMjEgKzI0MTgsMTQgQEAKIAkJKCgvKmNvbnRyb2wtPmludF92ZWN0b3IgPj4gNCovIDB4ZikgPDwgVl9JTlRSX1BSSU9fU0hJRlQpOwogfQogCi1zdGF0aWMgdm9pZCBzdm1fcXVldWVfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbnIpCi17Ci0Jc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7Ci0KLQlzdm0tPnZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qID0gbnIgfAotCQlTVk1fRVZUSU5KX1ZBTElEIHwgU1ZNX0VWVElOSl9UWVBFX0lOVFI7Ci19Ci0KIHN0YXRpYyB2b2lkIHN2bV9zZXRfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAotCW5lc3RlZF9zdm1faW50cihzdm0pOworCUJVR19PTighKGdpZl9zZXQoc3ZtKSkpOwogCi0Jc3ZtX3F1ZXVlX2lycSh2Y3B1LCB2Y3B1LT5hcmNoLmludGVycnVwdC5ucik7CisJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2luaiA9IHZjcHUtPmFyY2guaW50ZXJydXB0Lm5yIHwKKwkJU1ZNX0VWVElOSl9WQUxJRCB8IFNWTV9FVlRJTkpfVFlQRV9JTlRSOwogfQogCiBzdGF0aWMgdm9pZCB1cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0cHIsIGludCBpcnIpCkBAIC0yMzcxLDEzICsyNDUzLDI1IEBACiAJc3RydWN0IHZtY2IgKnZtY2IgPSBzdm0tPnZtY2I7CiAJcmV0dXJuICh2bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpICYmCiAJCSEodm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgJiBTVk1fSU5URVJSVVBUX1NIQURPV19NQVNLKSAmJgotCQkoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spOworCQlnaWZfc2V0KHN2bSkgJiYKKwkJIShpc19uZXN0ZWQoc3ZtKSAmJiAoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfVklOVFJfTUFTSykpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfaXJxX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3ZtX3NldF92aW50cih0b19zdm0odmNwdSkpOwotCXN2bV9pbmplY3RfaXJxKHRvX3N2bSh2Y3B1KSwgMHgwKTsKKwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKKwluc3ZtX3ByaW50aygiVHJ5aW5nIHRvIG9wZW4gSVJRIHdpbmRvd1xuIik7CisKKwluZXN0ZWRfc3ZtX2ludHIoc3ZtKTsKKworCS8qIEluIGNhc2UgR0lGPTAgd2UgY2FuJ3QgcmVseSBvbiB0aGUgQ1BVIHRvIHRlbGwgdXMgd2hlbgorCSAqIEdJRiBiZWNvbWVzIDEsIGJlY2F1c2UgdGhhdCdzIGEgc2VwYXJhdGUgU1RHSS9WTVJVTiBpbnRlcmNlcHQuCisJICogVGhlIG5leHQgdGltZSB3ZSBnZXQgdGhhdCBpbnRlcmNlcHQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZQorCSAqIGNhbGxlZCBhZ2FpbiB0aG91Z2ggYW5kIHdlJ2xsIGdldCB0aGUgdmludHIgaW50ZXJjZXB0LiAqLworCWlmIChnaWZfc2V0KHN2bSkpIHsKKwkJc3ZtX3NldF92aW50cihzdm0pOworCQlzdm1faW5qZWN0X2lycShzdm0sIDB4MCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNDU2LDYgKzI1NTAsOCBAQAogCWNhc2UgU1ZNX0VYSVRJTlRJTkZPX1RZUEVfRVhFUFQ6CiAJCS8qIEluIGNhc2Ugb2Ygc29mdHdhcmUgZXhjZXB0aW9uIGRvIG5vdCByZWluamVjdCBhbiBleGNlcHRpb24KIAkJICAgdmVjdG9yLCBidXQgcmUtZXhlY3V0ZSBhbmQgaW5zdHJ1Y3Rpb24gaW5zdGVhZCAqLworCQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJCQlicmVhazsKIAkJaWYgKGt2bV9leGNlcHRpb25faXNfc29mdCh2ZWN0b3IpKQogCQkJYnJlYWs7CiAJCWlmIChleGl0aW50aW5mbyAmIFNWTV9FWElUSU5USU5GT19WQUxJRF9FUlIpIHsKQEAgLTI0OTgsOSArMjU5NCw3IEBACiAJZnNfc2VsZWN0b3IgPSBrdm1fcmVhZF9mcygpOwogCWdzX3NlbGVjdG9yID0ga3ZtX3JlYWRfZ3MoKTsKIAlsZHRfc2VsZWN0b3IgPSBrdm1fcmVhZF9sZHQoKTsKLQlzdm0tPmhvc3RfY3IyID0ga3ZtX3JlYWRfY3IyKCk7Ci0JaWYgKCFpc19uZXN0ZWQoc3ZtKSkKLQkJc3ZtLT52bWNiLT5zYXZlLmNyMiA9IHZjcHUtPmFyY2guY3IyOworCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSB2Y3B1LT5hcmNoLmNyMjsKIAkvKiByZXF1aXJlZCBmb3IgbGl2ZSBtaWdyYXRpb24gd2l0aCBOUFQgKi8KIAlpZiAobnB0X2VuYWJsZWQpCiAJCXN2bS0+dm1jYi0+c2F2ZS5jcjMgPSB2Y3B1LT5hcmNoLmNyMzsKQEAgLTI1ODUsOCArMjY3OSw2IEBACiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gc3ZtLT52bWNiLT5zYXZlLnJzcDsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSBzdm0tPnZtY2ItPnNhdmUucmlwOwogCi0Ja3ZtX3dyaXRlX2NyMihzdm0tPmhvc3RfY3IyKTsKLQogCWt2bV9sb2FkX2ZzKGZzX3NlbGVjdG9yKTsKIAlrdm1fbG9hZF9ncyhnc19zZWxlY3Rvcik7CiAJa3ZtX2xvYWRfbGR0KGxkdF9zZWxlY3Rvcik7CkBAIC0yNjAyLDcgKzI2OTQsMTAgQEAKIAogCXN2bS0+bmV4dF9yaXAgPSAwOwogCi0Jc3ZtX2NvbXBsZXRlX2ludGVycnVwdHMoc3ZtKTsKKwlpZiAobnB0X2VuYWJsZWQpIHsKKwkJdmNwdS0+YXJjaC5yZWdzX2F2YWlsICY9IH4oMSA8PCBWQ1BVX0VYUkVHX1BEUFRSKTsKKwkJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ICY9IH4oMSA8PCBWQ1BVX0VYUkVHX1BEUFRSKTsKKwl9CiB9CiAKICN1bmRlZiBSCkBAIC0yNjczLDYgKzI3NjgsNjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyBzdm1fZXhpdF9yZWFzb25zX3N0cltdID0geworCXsgU1ZNX0VYSVRfUkVBRF9DUjAsICAgICAgICAgICAJCSJyZWFkX2NyMCIgfSwKKwl7IFNWTV9FWElUX1JFQURfQ1IzLAkgICAgICAJCSJyZWFkX2NyMyIgfSwKKwl7IFNWTV9FWElUX1JFQURfQ1I0LAkgICAgICAJCSJyZWFkX2NyNCIgfSwKKwl7IFNWTV9FWElUX1JFQURfQ1I4LCAgCSAgICAgIAkJInJlYWRfY3I4IiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfQ1IwLCAgICAgICAgICAJCSJ3cml0ZV9jcjAiIH0sCisJeyBTVk1fRVhJVF9XUklURV9DUjMsCSAgICAgIAkJIndyaXRlX2NyMyIgfSwKKwl7IFNWTV9FWElUX1dSSVRFX0NSNCwgICAgICAgICAgCQkid3JpdGVfY3I0IiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfQ1I4LCAJICAgICAgCQkid3JpdGVfY3I4IiB9LAorCXsgU1ZNX0VYSVRfUkVBRF9EUjAsIAkgICAgICAJCSJyZWFkX2RyMCIgfSwKKwl7IFNWTV9FWElUX1JFQURfRFIxLAkgICAgICAJCSJyZWFkX2RyMSIgfSwKKwl7IFNWTV9FWElUX1JFQURfRFIyLAkgICAgICAJCSJyZWFkX2RyMiIgfSwKKwl7IFNWTV9FWElUX1JFQURfRFIzLAkgICAgICAJCSJyZWFkX2RyMyIgfSwKKwl7IFNWTV9FWElUX1dSSVRFX0RSMCwJICAgICAgCQkid3JpdGVfZHIwIiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfRFIxLAkgICAgICAJCSJ3cml0ZV9kcjEiIH0sCisJeyBTVk1fRVhJVF9XUklURV9EUjIsCSAgICAgIAkJIndyaXRlX2RyMiIgfSwKKwl7IFNWTV9FWElUX1dSSVRFX0RSMywJICAgICAgCQkid3JpdGVfZHIzIiB9LAorCXsgU1ZNX0VYSVRfV1JJVEVfRFI1LAkgICAgICAJCSJ3cml0ZV9kcjUiIH0sCisJeyBTVk1fRVhJVF9XUklURV9EUjcsCSAgICAgIAkJIndyaXRlX2RyNyIgfSwKKwl7IFNWTV9FWElUX0VYQ1BfQkFTRSArIERCX1ZFQ1RPUiwJIkRCIGV4Y3AiIH0sCisJeyBTVk1fRVhJVF9FWENQX0JBU0UgKyBCUF9WRUNUT1IsCSJCUCBleGNwIiB9LAorCXsgU1ZNX0VYSVRfRVhDUF9CQVNFICsgVURfVkVDVE9SLAkiVUQgZXhjcCIgfSwKKwl7IFNWTV9FWElUX0VYQ1BfQkFTRSArIFBGX1ZFQ1RPUiwJIlBGIGV4Y3AiIH0sCisJeyBTVk1fRVhJVF9FWENQX0JBU0UgKyBOTV9WRUNUT1IsCSJOTSBleGNwIiB9LAorCXsgU1ZNX0VYSVRfRVhDUF9CQVNFICsgTUNfVkVDVE9SLAkiTUMgZXhjcCIgfSwKKwl7IFNWTV9FWElUX0lOVFIsCQkJImludGVycnVwdCIgfSwKKwl7IFNWTV9FWElUX05NSSwJCQkJIm5taSIgfSwKKwl7IFNWTV9FWElUX1NNSSwJCQkJInNtaSIgfSwKKwl7IFNWTV9FWElUX0lOSVQsCQkJImluaXQiIH0sCisJeyBTVk1fRVhJVF9WSU5UUiwJCQkidmludHIiIH0sCisJeyBTVk1fRVhJVF9DUFVJRCwJCQkiY3B1aWQiIH0sCisJeyBTVk1fRVhJVF9JTlZELAkJCSJpbnZkIiB9LAorCXsgU1ZNX0VYSVRfSExULAkJCQkiaGx0IiB9LAorCXsgU1ZNX0VYSVRfSU5WTFBHLAkJCSJpbnZscGciIH0sCisJeyBTVk1fRVhJVF9JTlZMUEdBLAkJCSJpbnZscGdhIiB9LAorCXsgU1ZNX0VYSVRfSU9JTywJCQkiaW8iIH0sCisJeyBTVk1fRVhJVF9NU1IsCQkJCSJtc3IiIH0sCisJeyBTVk1fRVhJVF9UQVNLX1NXSVRDSCwJCQkidGFza19zd2l0Y2giIH0sCisJeyBTVk1fRVhJVF9TSFVURE9XTiwJCQkic2h1dGRvd24iIH0sCisJeyBTVk1fRVhJVF9WTVJVTiwJCQkidm1ydW4iIH0sCisJeyBTVk1fRVhJVF9WTU1DQUxMLAkJCSJoeXBlcmNhbGwiIH0sCisJeyBTVk1fRVhJVF9WTUxPQUQsCQkJInZtbG9hZCIgfSwKKwl7IFNWTV9FWElUX1ZNU0FWRSwJCQkidm1zYXZlIiB9LAorCXsgU1ZNX0VYSVRfU1RHSSwJCQkic3RnaSIgfSwKKwl7IFNWTV9FWElUX0NMR0ksCQkJImNsZ2kiIH0sCisJeyBTVk1fRVhJVF9TS0lOSVQsCQkJInNraW5pdCIgfSwKKwl7IFNWTV9FWElUX1dCSU5WRCwJCQkid2JpbnZkIiB9LAorCXsgU1ZNX0VYSVRfTU9OSVRPUiwJCQkibW9uaXRvciIgfSwKKwl7IFNWTV9FWElUX01XQUlULAkJCSJtd2FpdCIgfSwKKwl7IFNWTV9FWElUX05QRiwJCQkJIm5wZiIgfSwKKwl7IC0xLCBOVUxMIH0KK307CisKK3N0YXRpYyBib29sIHN2bV9nYl9wYWdlX2VuYWJsZSh2b2lkKQoreworCXJldHVybiB0cnVlOworfQorCiBzdGF0aWMgc3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzID0gewogCS5jcHVfaGFzX2t2bV9zdXBwb3J0ID0gaGFzX3N2bSwKIAkuZGlzYWJsZWRfYnlfYmlvcyA9IGlzX2Rpc2FibGVkLApAQCAtMjcxMCw2ICsyODYzLDcgQEAKIAkuc2V0X2dkdCA9IHN2bV9zZXRfZ2R0LAogCS5nZXRfZHIgPSBzdm1fZ2V0X2RyLAogCS5zZXRfZHIgPSBzdm1fc2V0X2RyLAorCS5jYWNoZV9yZWcgPSBzdm1fY2FjaGVfcmVnLAogCS5nZXRfcmZsYWdzID0gc3ZtX2dldF9yZmxhZ3MsCiAJLnNldF9yZmxhZ3MgPSBzdm1fc2V0X3JmbGFncywKIApAQCAtMjczMyw2ICsyODg3LDkgQEAKIAkuc2V0X3Rzc19hZGRyID0gc3ZtX3NldF90c3NfYWRkciwKIAkuZ2V0X3RkcF9sZXZlbCA9IGdldF9ucHRfbGV2ZWwsCiAJLmdldF9tdF9tYXNrID0gc3ZtX2dldF9tdF9tYXNrLAorCisJLmV4aXRfcmVhc29uc19zdHIgPSBzdm1fZXhpdF9yZWFzb25zX3N0ciwKKwkuZ2JfcGFnZV9lbmFibGUgPSBzdm1fZ2JfcGFnZV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzdm1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3RpbWVyLmMgYi9hcmNoL3g4Ni9rdm0vdGltZXIuYwppbmRleCA4NmRiYWMwLi5lZWE0MDQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vdGltZXIuYworKysgYi9hcmNoL3g4Ni9rdm0vdGltZXIuYwpAQCAtOSwxMiArOSwxNiBAQAogCWludCByZXN0YXJ0X3RpbWVyID0gMDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAqcSA9ICZ2Y3B1LT53cTsKIAotCS8qIEZJWE1FOiB0aGlzIGNvZGUgc2hvdWxkIG5vdCBrbm93IGFueXRoaW5nIGFib3V0IHZjcHVzICovCi0JaWYgKCFhdG9taWNfaW5jX2FuZF90ZXN0KCZrdGltZXItPnBlbmRpbmcpKQorCS8qCisJICogVGhlcmUgaXMgYSByYWNlIHdpbmRvdyBiZXR3ZWVuIHJlYWRpbmcgYW5kIGluY3JlbWVudGluZywgYnV0IHdlIGRvCisJICogbm90IGNhcmUgYWJvdXQgcG90ZW50aWFsbHkgbG9vc2luZyB0aW1lciBldmVudHMgaW4gdGhlICFyZWluamVjdAorCSAqIGNhc2UgYW55d2F5LgorCSAqLworCWlmIChrdGltZXItPnJlaW5qZWN0IHx8ICFhdG9taWNfcmVhZCgma3RpbWVyLT5wZW5kaW5nKSkgeworCQlhdG9taWNfaW5jKCZrdGltZXItPnBlbmRpbmcpOworCQkvKiBGSVhNRTogdGhpcyBjb2RlIHNob3VsZCBub3Qga25vdyBhbnl0aGluZyBhYm91dCB2Y3B1cyAqLwogCQlzZXRfYml0KEtWTV9SRVFfUEVORElOR19USU1FUiwgJnZjcHUtPnJlcXVlc3RzKTsKLQotCWlmICgha3RpbWVyLT5yZWluamVjdCkKLQkJYXRvbWljX3NldCgma3RpbWVyLT5wZW5kaW5nLCAxKTsKKwl9CiAKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZShxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKHEpOwpAQCAtMzMsNyArMzcsNyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3RpbWVyICprdGltZXIgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGt2bV90aW1lciwgdGltZXIpOwogCi0JdmNwdSA9IGt0aW1lci0+a3ZtLT52Y3B1c1trdGltZXItPnZjcHVfaWRdOworCXZjcHUgPSBrdGltZXItPnZjcHU7CiAJaWYgKCF2Y3B1KQogCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS90cmFjZS5oIGIvYXJjaC94ODYva3ZtL3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0ODBlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2t2bS90cmFjZS5oCkBAIC0wLDAgKzEsMzU1IEBACisjaWYgIWRlZmluZWQoX1RSQUNFX0tWTV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfVFJBQ0VfS1ZNX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0ga3ZtCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCBhcmNoL3g4Ni9rdm0KKyNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRyYWNlCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBndWVzdCBtb2RlIGVudHJ5LgorICovCitUUkFDRV9FVkVOVChrdm1fZW50cnksCisJVFBfUFJPVE8odW5zaWduZWQgaW50IHZjcHVfaWQpLAorCVRQX0FSR1ModmNwdV9pZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXZjcHVfaWQJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnZjcHVfaWQJPSB2Y3B1X2lkOworCSksCisKKwlUUF9wcmludGsoInZjcHUgJXUiLCBfX2VudHJ5LT52Y3B1X2lkKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGh5cGVyY2FsbC4KKyAqLworVFJBQ0VfRVZFTlQoa3ZtX2h5cGVyY2FsbCwKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIGEwLCB1bnNpZ25lZCBsb25nIGExLAorCQkgdW5zaWduZWQgbG9uZyBhMiwgdW5zaWduZWQgbG9uZyBhMyksCisJVFBfQVJHUyhuciwgYTAsIGExLCBhMiwgYTMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywgCW5yCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWEwCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWExCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWEyCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWEzCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ucgkJPSBucjsKKwkJX19lbnRyeS0+YTAJCT0gYTA7CisJCV9fZW50cnktPmExCQk9IGExOworCQlfX2VudHJ5LT5hMgkJPSBhMjsKKwkJX19lbnRyeS0+YTMJCT0gYTM7CisJKSwKKworCVRQX3ByaW50aygibnIgMHglbHggYTAgMHglbHggYTEgMHglbHggYTIgMHglbHggYTMgMHglbHgiLAorCQkgX19lbnRyeS0+bnIsIF9fZW50cnktPmEwLCBfX2VudHJ5LT5hMSwgIF9fZW50cnktPmEyLAorCQkgX19lbnRyeS0+YTMpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgUElPLgorICovCitUUkFDRV9FVkVOVChrdm1fcGlvLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBydywgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBzaXplLAorCQkgdW5zaWduZWQgaW50IGNvdW50KSwKKwlUUF9BUkdTKHJ3LCBwb3J0LCBzaXplLCBjb3VudCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIAlydwkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsIAlwb3J0CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwgCXNpemUJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAljb3VudAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cncJCT0gcnc7CisJCV9fZW50cnktPnBvcnQJCT0gcG9ydDsKKwkJX19lbnRyeS0+c2l6ZQkJPSBzaXplOworCQlfX2VudHJ5LT5jb3VudAkJPSBjb3VudDsKKwkpLAorCisJVFBfcHJpbnRrKCJwaW9fJXMgYXQgMHgleCBzaXplICVkIGNvdW50ICVkIiwKKwkJICBfX2VudHJ5LT5ydyA/ICJ3cml0ZSIgOiAicmVhZCIsCisJCSAgX19lbnRyeS0+cG9ydCwgX19lbnRyeS0+c2l6ZSwgX19lbnRyeS0+Y291bnQpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgY3B1aWQuCisgKi8KK1RSQUNFX0VWRU5UKGt2bV9jcHVpZCwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHVuc2lnbmVkIGxvbmcgcmF4LCB1bnNpZ25lZCBsb25nIHJieCwKKwkJIHVuc2lnbmVkIGxvbmcgcmN4LCB1bnNpZ25lZCBsb25nIHJkeCksCisJVFBfQVJHUyhmdW5jdGlvbiwgcmF4LCByYngsIHJjeCwgcmR4KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZnVuY3Rpb24JKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlyYXgJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJcmJ4CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXJjeAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlyZHgJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmZ1bmN0aW9uCT0gZnVuY3Rpb247CisJCV9fZW50cnktPnJheAkJPSByYXg7CisJCV9fZW50cnktPnJieAkJPSByYng7CisJCV9fZW50cnktPnJjeAkJPSByY3g7CisJCV9fZW50cnktPnJkeAkJPSByZHg7CisJKSwKKworCVRQX3ByaW50aygiZnVuYyAleCByYXggJWx4IHJieCAlbHggcmN4ICVseCByZHggJWx4IiwKKwkJICBfX2VudHJ5LT5mdW5jdGlvbiwgX19lbnRyeS0+cmF4LAorCQkgIF9fZW50cnktPnJieCwgX19lbnRyeS0+cmN4LCBfX2VudHJ5LT5yZHgpCispOworCisjZGVmaW5lIEFSRUcoeCkgeyBBUElDXyMjeCwgIkFQSUNfIiAjeCB9CisKKyNkZWZpbmUga3ZtX3RyYWNlX3N5bWJvbF9hcGljCQkJCQkJICAgIFwKKwlBUkVHKElEKSwgQVJFRyhMVlIpLCBBUkVHKFRBU0tQUkkpLCBBUkVHKEFSQlBSSSksIEFSRUcoUFJPQ1BSSSksICAgIFwKKwlBUkVHKEVPSSksIEFSRUcoUlJSKSwgQVJFRyhMRFIpLCBBUkVHKERGUiksIEFSRUcoU1BJViksIEFSRUcoSVNSKSwgIFwKKwlBUkVHKFRNUiksIEFSRUcoSVJSKSwgQVJFRyhFU1IpLCBBUkVHKElDUiksIEFSRUcoSUNSMiksIEFSRUcoTFZUVCksIFwKKwlBUkVHKExWVFRITVIpLCBBUkVHKExWVFBDKSwgQVJFRyhMVlQwKSwgQVJFRyhMVlQxKSwgQVJFRyhMVlRFUlIpLCAgIFwKKwlBUkVHKFRNSUNUKSwgQVJFRyhUTUNDVCksIEFSRUcoVERDUiksIEFSRUcoU0VMRl9JUEkpLCBBUkVHKEVGRUFUKSwgIFwKKwlBUkVHKEVDVFJMKQorLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGFwaWMgYWNjZXNzLgorICovCitUUkFDRV9FVkVOVChrdm1fYXBpYywKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgcncsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpLAorCVRQX0FSR1MocncsIHJlZywgdmFsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJcncJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlyZWcJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAl2YWwJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnJ3CQk9IHJ3OworCQlfX2VudHJ5LT5yZWcJCT0gcmVnOworCQlfX2VudHJ5LT52YWwJCT0gdmFsOworCSksCisKKwlUUF9wcmludGsoImFwaWNfJXMgJXMgPSAweCV4IiwKKwkJICBfX2VudHJ5LT5ydyA/ICJ3cml0ZSIgOiAicmVhZCIsCisJCSAgX19wcmludF9zeW1ib2xpYyhfX2VudHJ5LT5yZWcsIGt2bV90cmFjZV9zeW1ib2xfYXBpYyksCisJCSAgX19lbnRyeS0+dmFsKQorKTsKKworI2RlZmluZSB0cmFjZV9rdm1fYXBpY19yZWFkKHJlZywgdmFsKQkJdHJhY2Vfa3ZtX2FwaWMoMCwgcmVnLCB2YWwpCisjZGVmaW5lIHRyYWNlX2t2bV9hcGljX3dyaXRlKHJlZywgdmFsKQkJdHJhY2Vfa3ZtX2FwaWMoMSwgcmVnLCB2YWwpCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBrdm0gZ3Vlc3QgZXhpdDoKKyAqLworVFJBQ0VfRVZFTlQoa3ZtX2V4aXQsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IGV4aXRfcmVhc29uLCB1bnNpZ25lZCBsb25nIGd1ZXN0X3JpcCksCisJVFBfQVJHUyhleGl0X3JlYXNvbiwgZ3Vlc3RfcmlwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZXhpdF9yZWFzb24JKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlndWVzdF9yaXAJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZXhpdF9yZWFzb24JPSBleGl0X3JlYXNvbjsKKwkJX19lbnRyeS0+Z3Vlc3RfcmlwCT0gZ3Vlc3RfcmlwOworCSksCisKKwlUUF9wcmludGsoInJlYXNvbiAlcyByaXAgMHglbHgiLAorCQkgZnRyYWNlX3ByaW50X3N5bWJvbHNfc2VxKHAsIF9fZW50cnktPmV4aXRfcmVhc29uLAorCQkJCQkgIGt2bV94ODZfb3BzLT5leGl0X3JlYXNvbnNfc3RyKSwKKwkJIF9fZW50cnktPmd1ZXN0X3JpcCkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBrdm0gaW50ZXJydXB0IGluamVjdGlvbjoKKyAqLworVFJBQ0VfRVZFTlQoa3ZtX2lual92aXJxLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBpcnEpLAorCVRQX0FSR1MoaXJxKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJaXJxCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5pcnEJCT0gaXJxOworCSksCisKKwlUUF9wcmludGsoImlycSAldSIsIF9fZW50cnktPmlycSkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBwYWdlIGZhdWx0LgorICovCitUUkFDRV9FVkVOVChrdm1fcGFnZV9mYXVsdCwKKwlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3MsIHVuc2lnbmVkIGludCBlcnJvcl9jb2RlKSwKKwlUUF9BUkdTKGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJZmF1bHRfYWRkcmVzcwkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZXJyb3JfY29kZQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5mYXVsdF9hZGRyZXNzCT0gZmF1bHRfYWRkcmVzczsKKwkJX19lbnRyeS0+ZXJyb3JfY29kZQk9IGVycm9yX2NvZGU7CisJKSwKKworCVRQX3ByaW50aygiYWRkcmVzcyAlbHggZXJyb3JfY29kZSAleCIsCisJCSAgX19lbnRyeS0+ZmF1bHRfYWRkcmVzcywgX19lbnRyeS0+ZXJyb3JfY29kZSkKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBndWVzdCBNU1IgYWNjZXNzLgorICovCitUUkFDRV9FVkVOVChrdm1fbXNyLAorCVRQX1BST1RPKHVuc2lnbmVkIGludCBydywgdW5zaWduZWQgaW50IGVjeCwgdW5zaWduZWQgbG9uZyBkYXRhKSwKKwlUUF9BUkdTKHJ3LCBlY3gsIGRhdGEpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlydwkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWVjeAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlkYXRhCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5ydwkJPSBydzsKKwkJX19lbnRyeS0+ZWN4CQk9IGVjeDsKKwkJX19lbnRyeS0+ZGF0YQkJPSBkYXRhOworCSksCisKKwlUUF9wcmludGsoIm1zcl8lcyAleCA9IDB4JWx4IiwKKwkJICBfX2VudHJ5LT5ydyA/ICJ3cml0ZSIgOiAicmVhZCIsCisJCSAgX19lbnRyeS0+ZWN4LCBfX2VudHJ5LT5kYXRhKQorKTsKKworI2RlZmluZSB0cmFjZV9rdm1fbXNyX3JlYWQoZWN4LCBkYXRhKQkJdHJhY2Vfa3ZtX21zcigwLCBlY3gsIGRhdGEpCisjZGVmaW5lIHRyYWNlX2t2bV9tc3Jfd3JpdGUoZWN4LCBkYXRhKQkJdHJhY2Vfa3ZtX21zcigxLCBlY3gsIGRhdGEpCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBndWVzdCBDUiBhY2Nlc3MuCisgKi8KK1RSQUNFX0VWRU5UKGt2bV9jciwKKwlUUF9QUk9UTyh1bnNpZ25lZCBpbnQgcncsIHVuc2lnbmVkIGludCBjciwgdW5zaWduZWQgbG9uZyB2YWwpLAorCVRQX0FSR1MocncsIGNyLCB2YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdW5zaWduZWQgaW50LAlydwkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWNyCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXZhbAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+cncJCT0gcnc7CisJCV9fZW50cnktPmNyCQk9IGNyOworCQlfX2VudHJ5LT52YWwJCT0gdmFsOworCSksCisKKwlUUF9wcmludGsoImNyXyVzICV4ID0gMHglbHgiLAorCQkgIF9fZW50cnktPnJ3ID8gIndyaXRlIiA6ICJyZWFkIiwKKwkJICBfX2VudHJ5LT5jciwgX19lbnRyeS0+dmFsKQorKTsKKworI2RlZmluZSB0cmFjZV9rdm1fY3JfcmVhZChjciwgdmFsKQkJdHJhY2Vfa3ZtX2NyKDAsIGNyLCB2YWwpCisjZGVmaW5lIHRyYWNlX2t2bV9jcl93cml0ZShjciwgdmFsKQkJdHJhY2Vfa3ZtX2NyKDEsIGNyLCB2YWwpCisKK1RSQUNFX0VWRU5UKGt2bV9waWNfc2V0X2lycSwKKwkgICAgVFBfUFJPVE8oX191OCBjaGlwLCBfX3U4IHBpbiwgX191OCBlbGNyLCBfX3U4IGltciwgYm9vbCBjb2FsZXNjZWQpLAorCSAgICBUUF9BUkdTKGNoaXAsIHBpbiwgZWxjciwgaW1yLCBjb2FsZXNjZWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJX191OCwJCWNoaXAJCSkKKwkJX19maWVsZCgJX191OCwJCXBpbgkJKQorCQlfX2ZpZWxkKAlfX3U4LAkJZWxjcgkJKQorCQlfX2ZpZWxkKAlfX3U4LAkJaW1yCQkpCisJCV9fZmllbGQoCWJvb2wsCQljb2FsZXNjZWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2hpcAkJPSBjaGlwOworCQlfX2VudHJ5LT5waW4JCT0gcGluOworCQlfX2VudHJ5LT5lbGNyCQk9IGVsY3I7CisJCV9fZW50cnktPmltcgkJPSBpbXI7CisJCV9fZW50cnktPmNvYWxlc2NlZAk9IGNvYWxlc2NlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJjaGlwICV1IHBpbiAldSAoJXMlcyklcyIsCisJCSAgX19lbnRyeS0+Y2hpcCwgX19lbnRyeS0+cGluLAorCQkgIChfX2VudHJ5LT5lbGNyICYgKDEgPDwgX19lbnRyeS0+cGluKSkgPyAibGV2ZWwiOiJlZGdlIiwKKwkJICAoX19lbnRyeS0+aW1yICYgKDEgPDwgX19lbnRyeS0+cGluKSkgPyAifG1hc2tlZCI6IiIsCisJCSAgX19lbnRyeS0+Y29hbGVzY2VkID8gIiAoY29hbGVzY2VkKSIgOiAiIikKKyk7CisKKyNkZWZpbmUga3ZtX2FwaWNfZHN0X3Nob3J0aGFuZAkJXAorCXsweDAsICJkc3QifSwJCQlcCisJezB4MSwgInNlbGYifSwJCQlcCisJezB4MiwgImFsbCJ9LAkJCVwKKwl7MHgzLCAiYWxsLWJ1dC1zZWxmIn0KKworVFJBQ0VfRVZFTlQoa3ZtX2FwaWNfaXBpLAorCSAgICBUUF9QUk9UTyhfX3UzMiBpY3JfbG93LCBfX3UzMiBkZXN0X2lkKSwKKwkgICAgVFBfQVJHUyhpY3JfbG93LCBkZXN0X2lkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCV9fdTMyLAkJaWNyX2xvdwkJKQorCQlfX2ZpZWxkKAlfX3UzMiwJCWRlc3RfaWQJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmljcl9sb3cJPSBpY3JfbG93OworCQlfX2VudHJ5LT5kZXN0X2lkCT0gZGVzdF9pZDsKKwkpLAorCisJVFBfcHJpbnRrKCJkc3QgJXggdmVjICV1ICglc3wlc3wlc3wlc3wlcykiLAorCQkgIF9fZW50cnktPmRlc3RfaWQsICh1OClfX2VudHJ5LT5pY3JfbG93LAorCQkgIF9fcHJpbnRfc3ltYm9saWMoKF9fZW50cnktPmljcl9sb3cgPj4gOCAmIDB4NyksCisJCQkJICAga3ZtX2RlbGl2ZXJfbW9kZSksCisJCSAgKF9fZW50cnktPmljcl9sb3cgJiAoMTw8MTEpKSA/ICJsb2dpY2FsIiA6ICJwaHlzaWNhbCIsCisJCSAgKF9fZW50cnktPmljcl9sb3cgJiAoMTw8MTQpKSA/ICJhc3NlcnQiIDogImRlLWFzc2VydCIsCisJCSAgKF9fZW50cnktPmljcl9sb3cgJiAoMTw8MTUpKSA/ICJsZXZlbCIgOiAiZWRnZSIsCisJCSAgX19wcmludF9zeW1ib2xpYygoX19lbnRyeS0+aWNyX2xvdyA+PiAxOCAmIDB4MyksCisJCQkJICAga3ZtX2FwaWNfZHN0X3Nob3J0aGFuZCkpCispOworCitUUkFDRV9FVkVOVChrdm1fYXBpY19hY2NlcHRfaXJxLAorCSAgICBUUF9QUk9UTyhfX3UzMiBhcGljaWQsIF9fdTE2IGRtLCBfX3U4IHRtLCBfX3U4IHZlYywgYm9vbCBjb2FsZXNjZWQpLAorCSAgICBUUF9BUkdTKGFwaWNpZCwgZG0sIHRtLCB2ZWMsIGNvYWxlc2NlZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlfX3UzMiwJCWFwaWNpZAkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJCWRtCQkpCisJCV9fZmllbGQoCV9fdTgsCQl0bQkJKQorCQlfX2ZpZWxkKAlfX3U4LAkJdmVjCQkpCisJCV9fZmllbGQoCWJvb2wsCQljb2FsZXNjZWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+YXBpY2lkCQk9IGFwaWNpZDsKKwkJX19lbnRyeS0+ZG0JCT0gZG07CisJCV9fZW50cnktPnRtCQk9IHRtOworCQlfX2VudHJ5LT52ZWMJCT0gdmVjOworCQlfX2VudHJ5LT5jb2FsZXNjZWQJPSBjb2FsZXNjZWQ7CisJKSwKKworCVRQX3ByaW50aygiYXBpY2lkICV4IHZlYyAldSAoJXN8JXMpJXMiLAorCQkgIF9fZW50cnktPmFwaWNpZCwgX19lbnRyeS0+dmVjLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoKF9fZW50cnktPmRtID4+IDggJiAweDcpLCBrdm1fZGVsaXZlcl9tb2RlKSwKKwkJICBfX2VudHJ5LT50bSA/ICJsZXZlbCIgOiAiZWRnZSIsCisJCSAgX19lbnRyeS0+Y29hbGVzY2VkID8gIiAoY29hbGVzY2VkKSIgOiAiIikKKyk7CisKKyNlbmRpZiAvKiBfVFJBQ0VfS1ZNX0ggKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14LmMKaW5kZXggMjlmOTEyOS4uZjM4MTIwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5jCisrKyBiL2FyY2gveDg2L2t2bS92bXguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAjaW5jbHVkZSAia3ZtX2NhY2hlX3JlZ3MuaCIKICNpbmNsdWRlICJ4ODYuaCIKIApAQCAtMzQsNiArMzUsOCBAQAogI2luY2x1ZGUgPGFzbS92aXJ0ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogCisjaW5jbHVkZSAidHJhY2UuaCIKKwogI2RlZmluZSBfX2V4KHgpIF9fa3ZtX2hhbmRsZV9mYXVsdF9vbl9yZWJvb3QoeCkKIAogTU9EVUxFX0FVVEhPUigiUXVtcmFuZXQiKTsKQEAgLTUxLDYgKzU0LDEwIEBACiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgZW5hYmxlX2VwdCA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZXB0LCBlbmFibGVfZXB0LCBib29sLCBTX0lSVUdPKTsKIAorc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IGVuYWJsZV91bnJlc3RyaWN0ZWRfZ3Vlc3QgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKHVucmVzdHJpY3RlZF9ndWVzdCwKKwkJCWVuYWJsZV91bnJlc3RyaWN0ZWRfZ3Vlc3QsIGJvb2wsIFNfSVJVR08pOworCiBzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlID0gMDsKIG1vZHVsZV9wYXJhbShlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUsIGJvb2wsIFNfSVJVR08pOwogCkBAIC04NCw2ICs5MSwxNCBAQAogCQlpbnQgICAgICAgICAgIGd1ZXN0X2VmZXJfbG9hZGVkOwogCX0gaG9zdF9zdGF0ZTsKIAlzdHJ1Y3QgeworCQlpbnQgdm04Nl9hY3RpdmU7CisJCXU4IHNhdmVfaW9wbDsKKwkJc3RydWN0IGt2bV9zYXZlX3NlZ21lbnQgeworCQkJdTE2IHNlbGVjdG9yOworCQkJdW5zaWduZWQgbG9uZyBiYXNlOworCQkJdTMyIGxpbWl0OworCQkJdTMyIGFyOworCQl9IHRyLCBlcywgZHMsIGZzLCBnczsKIAkJc3RydWN0IHsKIAkJCWJvb2wgcGVuZGluZzsKIAkJCXU4IHZlY3RvcjsKQEAgLTE2MSw2ICsxNzYsOCBAQAogCVZNWF9TRUdNRU5UX0ZJRUxEKExEVFIpLAogfTsKIAorc3RhdGljIHZvaWQgZXB0X3NhdmVfcGRwdHJzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CisKIC8qCiAgKiBLZWVwIE1TUl9LNl9TVEFSIGF0IHRoZSBlbmQsIGFzIHNldHVwX21zcnMoKSB3aWxsIHRyeSB0byBvcHRpbWl6ZSBpdAogICogYXdheSBieSBkZWNyZW1lbnRpbmcgdGhlIGFycmF5IHNpemUuCkBAIC0yNTYsNiArMjczLDI2IEBACiAJCWNwdV9oYXNfdm14X3ZpcnR1YWxpemVfYXBpY19hY2Nlc3NlcygpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0X2V4ZWN1dGVfb25seSh2b2lkKQoreworCXJldHVybiAhISh2bXhfY2FwYWJpbGl0eS5lcHQgJiBWTVhfRVBUX0VYRUNVVEVfT05MWV9CSVQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0cF91bmNhY2hlYWJsZSh2b2lkKQoreworCXJldHVybiAhISh2bXhfY2FwYWJpbGl0eS5lcHQgJiBWTVhfRVBUUF9VQ19CSVQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0cF93cml0ZWJhY2sodm9pZCkKK3sKKwlyZXR1cm4gISEodm14X2NhcGFiaWxpdHkuZXB0ICYgVk1YX0VQVFBfV0JfQklUKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNwdV9oYXNfdm14X2VwdF8ybV9wYWdlKHZvaWQpCit7CisJcmV0dXJuICEhKHZteF9jYXBhYmlsaXR5LmVwdCAmIFZNWF9FUFRfMk1CX1BBR0VfQklUKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY3B1X2hhc192bXhfaW52ZXB0X2luZGl2aWR1YWxfYWRkcih2b2lkKQogewogCXJldHVybiAhISh2bXhfY2FwYWJpbGl0eS5lcHQgJiBWTVhfRVBUX0VYVEVOVF9JTkRJVklEVUFMX0JJVCk7CkBAIC0yNzcsNiArMzE0LDEyIEBACiAJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9oYXNfdm14X3VucmVzdHJpY3RlZF9ndWVzdCh2b2lkKQoreworCXJldHVybiB2bWNzX2NvbmZpZy5jcHVfYmFzZWRfMm5kX2V4ZWNfY3RybCAmCisJCVNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgdm1fbmVlZF92aXJ0dWFsaXplX2FwaWNfYWNjZXNzZXMoc3RydWN0IGt2bSAqa3ZtKQogewogCXJldHVybiBmbGV4cHJpb3JpdHlfZW5hYmxlZCAmJgpAQCAtNDk3LDE0ICs1NDAsMTYgQEAKIAllYiA9ICgxdSA8PCBQRl9WRUNUT1IpIHwgKDF1IDw8IFVEX1ZFQ1RPUikgfCAoMXUgPDwgTUNfVkVDVE9SKTsKIAlpZiAoIXZjcHUtPmZwdV9hY3RpdmUpCiAJCWViIHw9IDF1IDw8IE5NX1ZFQ1RPUjsKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBpbnRlcmNlcHQgI0RCIHNvIHdlIGNhbiBtYWludGFpbiBkcjYgd2l0aG91dAorCSAqIHJlYWRpbmcgaXQgZXZlcnkgZXhpdC4KKwkgKi8KKwllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CiAJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgewotCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJgotCQkgICAgKEtWTV9HVUVTVERCR19TSU5HTEVTVEVQIHwgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpCi0JCQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7CiAJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfU1dfQlApCiAJCQllYiB8PSAxdSA8PCBCUF9WRUNUT1I7CiAJfQotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlKQorCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKQogCQllYiA9IH4wOwogCWlmIChlbmFibGVfZXB0KQogCQllYiAmPSB+KDF1IDw8IFBGX1ZFQ1RPUik7IC8qIGJ5cGFzc19ndWVzdF9wZiA9IDAgKi8KQEAgLTUyOCwxMiArNTczLDE1IEBACiBzdGF0aWMgdm9pZCBsb2FkX3RyYW5zaXRpb25fZWZlcihzdHJ1Y3QgdmNwdV92bXggKnZteCkKIHsKIAlpbnQgZWZlcl9vZmZzZXQgPSB2bXgtPm1zcl9vZmZzZXRfZWZlcjsKLQl1NjQgaG9zdF9lZmVyID0gdm14LT5ob3N0X21zcnNbZWZlcl9vZmZzZXRdLmRhdGE7Ci0JdTY0IGd1ZXN0X2VmZXIgPSB2bXgtPmd1ZXN0X21zcnNbZWZlcl9vZmZzZXRdLmRhdGE7CisJdTY0IGhvc3RfZWZlcjsKKwl1NjQgZ3Vlc3RfZWZlcjsKIAl1NjQgaWdub3JlX2JpdHM7CiAKIAlpZiAoZWZlcl9vZmZzZXQgPCAwKQogCQlyZXR1cm47CisJaG9zdF9lZmVyID0gdm14LT5ob3N0X21zcnNbZWZlcl9vZmZzZXRdLmRhdGE7CisJZ3Vlc3RfZWZlciA9IHZteC0+Z3Vlc3RfbXNyc1tlZmVyX29mZnNldF0uZGF0YTsKKwogCS8qCiAJICogTlggaXMgZW11bGF0ZWQ7IExNQSBhbmQgTE1FIGhhbmRsZWQgYnkgaGFyZHdhcmU7IFNDRSBtZWFuaW5sZXNzCiAJICogb3V0c2lkZSBsb25nIG1vZGUKQEAgLTczNSwxMiArNzgzLDE3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZteF9nZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCXVuc2lnbmVkIGxvbmcgcmZsYWdzOworCisJcmZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOworCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKQorCQlyZmxhZ3MgJj0gfih1bnNpZ25lZCBsb25nKShYODZfRUZMQUdTX0lPUEwgfCBYODZfRUZMQUdTX1ZNKTsKKwlyZXR1cm4gcmZsYWdzOwogfQogCiBzdGF0aWMgdm9pZCB2bXhfc2V0X3JmbGFncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmZsYWdzKQogewotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlKQorCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKQogCQlyZmxhZ3MgfD0gWDg2X0VGTEFHU19JT1BMIHwgWDg2X0VGTEFHU19WTTsKIAl2bWNzX3dyaXRlbChHVUVTVF9SRkxBR1MsIHJmbGFncyk7CiB9CkBAIC03OTcsMTIgKzg1MCwxMyBAQAogCQlpbnRyX2luZm8gfD0gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLOwogCX0KIAotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlKSB7CisJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUpIHsKIAkJdm14LT5ybW9kZS5pcnEucGVuZGluZyA9IHRydWU7CiAJCXZteC0+cm1vZGUuaXJxLnZlY3RvciA9IG5yOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7Ci0JCWlmIChuciA9PSBCUF9WRUNUT1IgfHwgbnIgPT0gT0ZfVkVDVE9SKQotCQkJdm14LT5ybW9kZS5pcnEucmlwKys7CisJCWlmIChrdm1fZXhjZXB0aW9uX2lzX3NvZnQobnIpKQorCQkJdm14LT5ybW9kZS5pcnEucmlwICs9CisJCQkJdm14LT52Y3B1LmFyY2guZXZlbnRfZXhpdF9pbnN0X2xlbjsKIAkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9TT0ZUX0lOVFI7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsIGludHJfaW5mbyk7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlNUUlVDVElPTl9MRU4sIDEpOwpAQCAtOTQwLDcgKzk5NCw3IEBACiAJY2FzZSBNU1JfRUZFUjoKIAkJcmV0dXJuIGt2bV9nZXRfbXNyX2NvbW1vbih2Y3B1LCBtc3JfaW5kZXgsIHBkYXRhKTsKICNlbmRpZgotCWNhc2UgTVNSX0lBMzJfVElNRV9TVEFNUF9DT1VOVEVSOgorCWNhc2UgTVNSX0lBMzJfVFNDOgogCQlkYXRhID0gZ3Vlc3RfcmVhZF90c2MoKTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9TWVNFTlRFUl9DUzoKQEAgLTk1Myw5ICsxMDA3LDkgQEAKIAkJZGF0YSA9IHZtY3NfcmVhZGwoR1VFU1RfU1lTRU5URVJfRVNQKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdm14X2xvYWRfaG9zdF9zdGF0ZSh0b192bXgodmNwdSkpOwogCQltc3IgPSBmaW5kX21zcl9lbnRyeSh0b192bXgodmNwdSksIG1zcl9pbmRleCk7CiAJCWlmIChtc3IpIHsKKwkJCXZteF9sb2FkX2hvc3Rfc3RhdGUodG9fdm14KHZjcHUpKTsKIAkJCWRhdGEgPSBtc3ItPmRhdGE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTAwMCwyMiArMTA1NCwxMCBAQAogCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgogCQl2bWNzX3dyaXRlbChHVUVTVF9TWVNFTlRFUl9FU1AsIGRhdGEpOwogCQlicmVhazsKLQljYXNlIE1TUl9JQTMyX1RJTUVfU1RBTVBfQ09VTlRFUjoKKwljYXNlIE1TUl9JQTMyX1RTQzoKIAkJcmR0c2NsbChob3N0X3RzYyk7CiAJCWd1ZXN0X3dyaXRlX3RzYyhkYXRhLCBob3N0X3RzYyk7CiAJCWJyZWFrOwotCWNhc2UgTVNSX1A2X1BFUkZDVFIwOgotCWNhc2UgTVNSX1A2X1BFUkZDVFIxOgotCWNhc2UgTVNSX1A2X0VWTlRTRUwwOgotCWNhc2UgTVNSX1A2X0VWTlRTRUwxOgotCQkvKgotCQkgKiBKdXN0IGRpc2NhcmQgYWxsIHdyaXRlcyB0byB0aGUgcGVyZm9ybWFuY2UgY291bnRlcnM7IHRoaXMKLQkJICogc2hvdWxkIGtlZXAgYm90aCBvbGRlciBsaW51eCBhbmQgd2luZG93cyA2NC1iaXQgZ3Vlc3RzCi0JCSAqIGhhcHB5Ci0JCSAqLwotCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgcGVyZmN0ciB3cm1zcjogMHgleCBkYXRhIDB4JWxseFxuIiwgbXNyX2luZGV4LCBkYXRhKTsKLQotCQlicmVhazsKIAljYXNlIE1TUl9JQTMyX0NSX1BBVDoKIAkJaWYgKHZtY3NfY29uZmlnLnZtZW50cnlfY3RybCAmIFZNX0VOVFJZX0xPQURfSUEzMl9QQVQpIHsKIAkJCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX1BBVCwgZGF0YSk7CkBAIC0xMDI0LDkgKzEwNjYsOSBAQAogCQl9CiAJCS8qIE90aGVyd2lzZSBmYWxscyB0aHJvdWdoIHRvIGt2bV9zZXRfbXNyX2NvbW1vbiAqLwogCWRlZmF1bHQ6Ci0JCXZteF9sb2FkX2hvc3Rfc3RhdGUodm14KTsKIAkJbXNyID0gZmluZF9tc3JfZW50cnkodm14LCBtc3JfaW5kZXgpOwogCQlpZiAobXNyKSB7CisJCQl2bXhfbG9hZF9ob3N0X3N0YXRlKHZteCk7CiAJCQltc3ItPmRhdGEgPSBkYXRhOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEwNDYsNiArMTA4OCwxMCBAQAogCWNhc2UgVkNQVV9SRUdTX1JJUDoKIAkJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SSVBdID0gdm1jc19yZWFkbChHVUVTVF9SSVApOwogCQlicmVhazsKKwljYXNlIFZDUFVfRVhSRUdfUERQVFI6CisJCWlmIChlbmFibGVfZXB0KQorCQkJZXB0X3NhdmVfcGRwdHJzKHZjcHUpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMjAzLDcgKzEyNDksOCBAQAogCQlvcHQyID0gU0VDT05EQVJZX0VYRUNfVklSVFVBTElaRV9BUElDX0FDQ0VTU0VTIHwKIAkJCVNFQ09OREFSWV9FWEVDX1dCSU5WRF9FWElUSU5HIHwKIAkJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9WUElEIHwKLQkJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQ7CisJCQlTRUNPTkRBUllfRVhFQ19FTkFCTEVfRVBUIHwKKwkJCVNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVDsKIAkJaWYgKGFkanVzdF92bXhfY29udHJvbHMobWluMiwgb3B0MiwKIAkJCQkJTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMiwKIAkJCQkJJl9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCkgPCAwKQpAQCAtMTIxNywxMiArMTI2NCw5IEBACiAJaWYgKF9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCAmIFNFQ09OREFSWV9FWEVDX0VOQUJMRV9FUFQpIHsKIAkJLyogQ1IzIGFjY2Vzc2VzIGFuZCBpbnZscGcgZG9uJ3QgbmVlZCB0byBjYXVzZSBWTSBFeGl0cyB3aGVuIEVQVAogCQkgICBlbmFibGVkICovCi0JCW1pbiAmPSB+KENQVV9CQVNFRF9DUjNfTE9BRF9FWElUSU5HIHwKLQkJCSBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcgfAotCQkJIENQVV9CQVNFRF9JTlZMUEdfRVhJVElORyk7Ci0JCWlmIChhZGp1c3Rfdm14X2NvbnRyb2xzKG1pbiwgb3B0LCBNU1JfSUEzMl9WTVhfUFJPQ0JBU0VEX0NUTFMsCi0JCQkJCSZfY3B1X2Jhc2VkX2V4ZWNfY29udHJvbCkgPCAwKQotCQkJcmV0dXJuIC1FSU87CisJCV9jcHVfYmFzZWRfZXhlY19jb250cm9sICY9IH4oQ1BVX0JBU0VEX0NSM19MT0FEX0VYSVRJTkcgfAorCQkJCQkgICAgIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORyB8CisJCQkJCSAgICAgQ1BVX0JBU0VEX0lOVkxQR19FWElUSU5HKTsKIAkJcmRtc3IoTVNSX0lBMzJfVk1YX0VQVF9WUElEX0NBUCwKIAkJICAgICAgdm14X2NhcGFiaWxpdHkuZXB0LCB2bXhfY2FwYWJpbGl0eS52cGlkKTsKIAl9CkBAIC0xMzMzLDggKzEzNzcsMTMgQEAKIAlpZiAoIWNwdV9oYXNfdm14X3ZwaWQoKSkKIAkJZW5hYmxlX3ZwaWQgPSAwOwogCi0JaWYgKCFjcHVfaGFzX3ZteF9lcHQoKSkKKwlpZiAoIWNwdV9oYXNfdm14X2VwdCgpKSB7CiAJCWVuYWJsZV9lcHQgPSAwOworCQllbmFibGVfdW5yZXN0cmljdGVkX2d1ZXN0ID0gMDsKKwl9CisKKwlpZiAoIWNwdV9oYXNfdm14X3VucmVzdHJpY3RlZF9ndWVzdCgpKQorCQllbmFibGVfdW5yZXN0cmljdGVkX2d1ZXN0ID0gMDsKIAogCWlmICghY3B1X2hhc192bXhfZmxleHByaW9yaXR5KCkpCiAJCWZsZXhwcmlvcml0eV9lbmFibGVkID0gMDsKQEAgLTEzNDIsNiArMTM5MSw5IEBACiAJaWYgKCFjcHVfaGFzX3ZteF90cHJfc2hhZG93KCkpCiAJCWt2bV94ODZfb3BzLT51cGRhdGVfY3I4X2ludGVyY2VwdCA9IE5VTEw7CiAKKwlpZiAoZW5hYmxlX2VwdCAmJiAhY3B1X2hhc192bXhfZXB0XzJtX3BhZ2UoKSkKKwkJa3ZtX2Rpc2FibGVfbGFyZ2VwYWdlcygpOworCiAJcmV0dXJuIGFsbG9jX2t2bV9hcmVhKCk7CiB9CiAKQEAgLTEzNzIsMTUgKzE0MjQsMTUgQEAKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAogCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMTsKLQl2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlID0gMDsKKwl2bXgtPnJtb2RlLnZtODZfYWN0aXZlID0gMDsKIAotCXZtY3Nfd3JpdGVsKEdVRVNUX1RSX0JBU0UsIHZjcHUtPmFyY2gucm1vZGUudHIuYmFzZSk7Ci0Jdm1jc193cml0ZTMyKEdVRVNUX1RSX0xJTUlULCB2Y3B1LT5hcmNoLnJtb2RlLnRyLmxpbWl0KTsKLQl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfQVJfQllURVMsIHZjcHUtPmFyY2gucm1vZGUudHIuYXIpOworCXZtY3Nfd3JpdGVsKEdVRVNUX1RSX0JBU0UsIHZteC0+cm1vZGUudHIuYmFzZSk7CisJdm1jc193cml0ZTMyKEdVRVNUX1RSX0xJTUlULCB2bXgtPnJtb2RlLnRyLmxpbWl0KTsKKwl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfQVJfQllURVMsIHZteC0+cm1vZGUudHIuYXIpOwogCiAJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CiAJZmxhZ3MgJj0gfihYODZfRUZMQUdTX0lPUEwgfCBYODZfRUZMQUdTX1ZNKTsKLQlmbGFncyB8PSAodmNwdS0+YXJjaC5ybW9kZS5zYXZlX2lvcGwgPDwgSU9QTF9TSElGVCk7CisJZmxhZ3MgfD0gKHZteC0+cm1vZGUuc2F2ZV9pb3BsIDw8IElPUExfU0hJRlQpOwogCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwogCiAJdm1jc193cml0ZWwoR1VFU1RfQ1I0LCAodm1jc19yZWFkbChHVUVTVF9DUjQpICYgflg4Nl9DUjRfVk1FKSB8CkBAIC0xMzkxLDEwICsxNDQzLDEwIEBACiAJaWYgKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKIAkJcmV0dXJuOwogCi0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0VTLCAmdmNwdS0+YXJjaC5ybW9kZS5lcyk7Ci0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0RTLCAmdmNwdS0+YXJjaC5ybW9kZS5kcyk7Ci0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0dTLCAmdmNwdS0+YXJjaC5ybW9kZS5ncyk7Ci0JZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0ZTLCAmdmNwdS0+YXJjaC5ybW9kZS5mcyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0VTLCAmdm14LT5ybW9kZS5lcyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0RTLCAmdm14LT5ybW9kZS5kcyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0dTLCAmdm14LT5ybW9kZS5ncyk7CisJZml4X3Btb2RlX2RhdGFzZWcoVkNQVV9TUkVHX0ZTLCAmdm14LT5ybW9kZS5mcyk7CiAKIAl2bWNzX3dyaXRlMTYoR1VFU1RfU1NfU0VMRUNUT1IsIDApOwogCXZtY3Nfd3JpdGUzMihHVUVTVF9TU19BUl9CWVRFUywgMHg5Myk7CkBAIC0xNDMzLDIwICsxNDg1LDIzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAotCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMTsKLQl2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlID0gMTsKKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCkKKwkJcmV0dXJuOwogCi0JdmNwdS0+YXJjaC5ybW9kZS50ci5iYXNlID0gdm1jc19yZWFkbChHVUVTVF9UUl9CQVNFKTsKKwl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDE7CisJdm14LT5ybW9kZS52bTg2X2FjdGl2ZSA9IDE7CisKKwl2bXgtPnJtb2RlLnRyLmJhc2UgPSB2bWNzX3JlYWRsKEdVRVNUX1RSX0JBU0UpOwogCXZtY3Nfd3JpdGVsKEdVRVNUX1RSX0JBU0UsIHJtb2RlX3Rzc19iYXNlKHZjcHUtPmt2bSkpOwogCi0JdmNwdS0+YXJjaC5ybW9kZS50ci5saW1pdCA9IHZtY3NfcmVhZDMyKEdVRVNUX1RSX0xJTUlUKTsKKwl2bXgtPnJtb2RlLnRyLmxpbWl0ID0gdm1jc19yZWFkMzIoR1VFU1RfVFJfTElNSVQpOwogCXZtY3Nfd3JpdGUzMihHVUVTVF9UUl9MSU1JVCwgUk1PREVfVFNTX1NJWkUgLSAxKTsKIAotCXZjcHUtPmFyY2gucm1vZGUudHIuYXIgPSB2bWNzX3JlYWQzMihHVUVTVF9UUl9BUl9CWVRFUyk7CisJdm14LT5ybW9kZS50ci5hciA9IHZtY3NfcmVhZDMyKEdVRVNUX1RSX0FSX0JZVEVTKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfVFJfQVJfQllURVMsIDB4MDA4Yik7CiAKIAlmbGFncyA9IHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKTsKLQl2Y3B1LT5hcmNoLnJtb2RlLnNhdmVfaW9wbAorCXZteC0+cm1vZGUuc2F2ZV9pb3BsCiAJCT0gKGZsYWdzICYgWDg2X0VGTEFHU19JT1BMKSA+PiBJT1BMX1NISUZUOwogCiAJZmxhZ3MgfD0gWDg2X0VGTEFHU19JT1BMIHwgWDg2X0VGTEFHU19WTTsKQEAgLTE0NjgsMTAgKzE1MjMsMTAgQEAKIAkJdm1jc193cml0ZWwoR1VFU1RfQ1NfQkFTRSwgMHhmMDAwMCk7CiAJdm1jc193cml0ZTE2KEdVRVNUX0NTX1NFTEVDVE9SLCB2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpID4+IDQpOwogCi0JZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfRVMsICZ2Y3B1LT5hcmNoLnJtb2RlLmVzKTsKLQlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19EUywgJnZjcHUtPmFyY2gucm1vZGUuZHMpOwotCWZpeF9ybW9kZV9zZWcoVkNQVV9TUkVHX0dTLCAmdmNwdS0+YXJjaC5ybW9kZS5ncyk7Ci0JZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfRlMsICZ2Y3B1LT5hcmNoLnJtb2RlLmZzKTsKKwlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19FUywgJnZteC0+cm1vZGUuZXMpOworCWZpeF9ybW9kZV9zZWcoVkNQVV9TUkVHX0RTLCAmdm14LT5ybW9kZS5kcyk7CisJZml4X3Jtb2RlX3NlZyhWQ1BVX1NSRUdfR1MsICZ2bXgtPnJtb2RlLmdzKTsKKwlmaXhfcm1vZGVfc2VnKFZDUFVfU1JFR19GUywgJnZteC0+cm1vZGUuZnMpOwogCiBjb250aW51ZV9ybW9kZToKIAlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CkBAIC0xNTQ1LDExICsxNjAwLDExIEBACiAKIHN0YXRpYyB2b2lkIGVwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaWYgKCF0ZXN0X2JpdChWQ1BVX0VYUkVHX1BEUFRSLAorCQkgICAgICAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpKQorCQlyZXR1cm47CisKIAlpZiAoaXNfcGFnaW5nKHZjcHUpICYmIGlzX3BhZSh2Y3B1KSAmJiAhaXNfbG9uZ19tb2RlKHZjcHUpKSB7Ci0JCWlmICghbG9hZF9wZHB0cnModmNwdSwgdmNwdS0+YXJjaC5jcjMpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVQVDogRmFpbCB0byBsb2FkIHBkcHRycyFcbiIpOwotCQkJcmV0dXJuOwotCQl9CiAJCXZtY3Nfd3JpdGU2NChHVUVTVF9QRFBUUjAsIHZjcHUtPmFyY2gucGRwdHJzWzBdKTsKIAkJdm1jc193cml0ZTY0KEdVRVNUX1BEUFRSMSwgdmNwdS0+YXJjaC5wZHB0cnNbMV0pOwogCQl2bWNzX3dyaXRlNjQoR1VFU1RfUERQVFIyLCB2Y3B1LT5hcmNoLnBkcHRyc1syXSk7CkBAIC0xNTU3LDYgKzE2MTIsMjEgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGVwdF9zYXZlX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKGlzX3BhZ2luZyh2Y3B1KSAmJiBpc19wYWUodmNwdSkgJiYgIWlzX2xvbmdfbW9kZSh2Y3B1KSkgeworCQl2Y3B1LT5hcmNoLnBkcHRyc1swXSA9IHZtY3NfcmVhZDY0KEdVRVNUX1BEUFRSMCk7CisJCXZjcHUtPmFyY2gucGRwdHJzWzFdID0gdm1jc19yZWFkNjQoR1VFU1RfUERQVFIxKTsKKwkJdmNwdS0+YXJjaC5wZHB0cnNbMl0gPSB2bWNzX3JlYWQ2NChHVUVTVF9QRFBUUjIpOworCQl2Y3B1LT5hcmNoLnBkcHRyc1szXSA9IHZtY3NfcmVhZDY0KEdVRVNUX1BEUFRSMyk7CisJfQorCisJX19zZXRfYml0KFZDUFVfRVhSRUdfUERQVFIsCisJCSAgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKKwlfX3NldF9iaXQoVkNQVV9FWFJFR19QRFBUUiwKKwkJICAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpOworfQorCiBzdGF0aWMgdm9pZCB2bXhfc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KTsKIAogc3RhdGljIHZvaWQgZXB0X3VwZGF0ZV9wYWdpbmdfbW9kZV9jcjAodW5zaWduZWQgbG9uZyAqaHdfY3IwLApAQCAtMTU3MSw4ICsxNjQxLDYgQEAKIAkJCSAgICAgIENQVV9CQVNFRF9DUjNfU1RPUkVfRVhJVElORykpOwogCQl2Y3B1LT5hcmNoLmNyMCA9IGNyMDsKIAkJdm14X3NldF9jcjQodmNwdSwgdmNwdS0+YXJjaC5jcjQpOwotCQkqaHdfY3IwIHw9IFg4Nl9DUjBfUEUgfCBYODZfQ1IwX1BHOwotCQkqaHdfY3IwICY9IH5YODZfQ1IwX1dQOwogCX0gZWxzZSBpZiAoIWlzX3BhZ2luZyh2Y3B1KSkgewogCQkvKiBGcm9tIG5vbnBhZ2luZyB0byBwYWdpbmcgKi8KIAkJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsCkBAIC0xNTgxLDkgKzE2NDksMTAgQEAKIAkJCSAgICAgICBDUFVfQkFTRURfQ1IzX1NUT1JFX0VYSVRJTkcpKTsKIAkJdmNwdS0+YXJjaC5jcjAgPSBjcjA7CiAJCXZteF9zZXRfY3I0KHZjcHUsIHZjcHUtPmFyY2guY3I0KTsKLQkJaWYgKCEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1dQKSkKLQkJCSpod19jcjAgJj0gflg4Nl9DUjBfV1A7CiAJfQorCisJaWYgKCEoY3IwICYgWDg2X0NSMF9XUCkpCisJCSpod19jcjAgJj0gflg4Nl9DUjBfV1A7CiB9CiAKIHN0YXRpYyB2b2lkIGVwdF91cGRhdGVfcGFnaW5nX21vZGVfY3I0KHVuc2lnbmVkIGxvbmcgKmh3X2NyNCwKQEAgLTE1OTgsMTUgKzE2NjcsMjEgQEAKIAogc3RhdGljIHZvaWQgdm14X3NldF9jcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMCkKIHsKLQl1bnNpZ25lZCBsb25nIGh3X2NyMCA9IChjcjAgJiB+S1ZNX0dVRVNUX0NSMF9NQVNLKSB8Ci0JCQkJS1ZNX1ZNX0NSMF9BTFdBWVNfT047CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CisJdW5zaWduZWQgbG9uZyBod19jcjA7CisKKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCkKKwkJaHdfY3IwID0gKGNyMCAmIH5LVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUKQorCQkJfCBLVk1fVk1fQ1IwX0FMV0FZU19PTl9VTlJFU1RSSUNURURfR1VFU1Q7CisJZWxzZQorCQlod19jcjAgPSAoY3IwICYgfktWTV9HVUVTVF9DUjBfTUFTSykgfCBLVk1fVk1fQ1IwX0FMV0FZU19PTjsKIAogCXZteF9mcHVfZGVhY3RpdmF0ZSh2Y3B1KTsKIAotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlICYmIChjcjAgJiBYODZfQ1IwX1BFKSkKKwlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSAmJiAoY3IwICYgWDg2X0NSMF9QRSkpCiAJCWVudGVyX3Btb2RlKHZjcHUpOwogCi0JaWYgKCF2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlICYmICEoY3IwICYgWDg2X0NSMF9QRSkpCisJaWYgKCF2bXgtPnJtb2RlLnZtODZfYWN0aXZlICYmICEoY3IwICYgWDg2X0NSMF9QRSkpCiAJCWVudGVyX3Jtb2RlKHZjcHUpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NApAQCAtMTY1MCwxMCArMTcyNSw4IEBACiAJaWYgKGVuYWJsZV9lcHQpIHsKIAkJZXB0cCA9IGNvbnN0cnVjdF9lcHRwKGNyMyk7CiAJCXZtY3Nfd3JpdGU2NChFUFRfUE9JTlRFUiwgZXB0cCk7Ci0JCWVwdF9zeW5jX2NvbnRleHQoZXB0cCk7Ci0JCWVwdF9sb2FkX3BkcHRycyh2Y3B1KTsKIAkJZ3Vlc3RfY3IzID0gaXNfcGFnaW5nKHZjcHUpID8gdmNwdS0+YXJjaC5jcjMgOgotCQkJVk1YX0VQVF9JREVOVElUWV9QQUdFVEFCTEVfQUREUjsKKwkJCXZjcHUtPmt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHI7CiAJfQogCiAJdm14X2ZsdXNoX3RsYih2Y3B1KTsKQEAgLTE2NjQsNyArMTczNyw3IEBACiAKIHN0YXRpYyB2b2lkIHZteF9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCiB7Ci0JdW5zaWduZWQgbG9uZyBod19jcjQgPSBjcjQgfCAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSA/CisJdW5zaWduZWQgbG9uZyBod19jcjQgPSBjcjQgfCAodG9fdm14KHZjcHUpLT5ybW9kZS52bTg2X2FjdGl2ZSA/CiAJCSAgICBLVk1fUk1PREVfVk1fQ1I0X0FMV0FZU19PTiA6IEtWTV9QTU9ERV9WTV9DUjRfQUxXQVlTX09OKTsKIAogCXZjcHUtPmFyY2guY3I0ID0gY3I0OwpAQCAtMTcwNywxNiArMTc4MCwxMyBAQAogCiBzdGF0aWMgaW50IHZteF9nZXRfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlzdHJ1Y3Qga3ZtX3NlZ21lbnQga3ZtX3NlZzsKLQogCWlmICghKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpIC8qIGlmIHJlYWwgbW9kZSAqLwogCQlyZXR1cm4gMDsKIAogCWlmICh2bXhfZ2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfVk0pIC8qIGlmIHZpcnR1YWwgODA4NiAqLwogCQlyZXR1cm4gMzsKIAotCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAma3ZtX3NlZywgVkNQVV9TUkVHX0NTKTsKLQlyZXR1cm4ga3ZtX3NlZy5zZWxlY3RvciAmIDM7CisJcmV0dXJuIHZtY3NfcmVhZDE2KEdVRVNUX0NTX1NFTEVDVE9SKSAmIDM7CiB9CiAKIHN0YXRpYyB1MzIgdm14X3NlZ21lbnRfYWNjZXNzX3JpZ2h0cyhzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhcikKQEAgLTE3NDQsMjAgKzE4MTQsMjEgQEAKIHN0YXRpYyB2b2lkIHZteF9zZXRfc2VnbWVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgc3RydWN0IGt2bV9zZWdtZW50ICp2YXIsIGludCBzZWcpCiB7CisJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJc3RydWN0IGt2bV92bXhfc2VnbWVudF9maWVsZCAqc2YgPSAma3ZtX3ZteF9zZWdtZW50X2ZpZWxkc1tzZWddOwogCXUzMiBhcjsKIAotCWlmICh2Y3B1LT5hcmNoLnJtb2RlLnZtODZfYWN0aXZlICYmIHNlZyA9PSBWQ1BVX1NSRUdfVFIpIHsKLQkJdmNwdS0+YXJjaC5ybW9kZS50ci5zZWxlY3RvciA9IHZhci0+c2VsZWN0b3I7Ci0JCXZjcHUtPmFyY2gucm1vZGUudHIuYmFzZSA9IHZhci0+YmFzZTsKLQkJdmNwdS0+YXJjaC5ybW9kZS50ci5saW1pdCA9IHZhci0+bGltaXQ7Ci0JCXZjcHUtPmFyY2gucm1vZGUudHIuYXIgPSB2bXhfc2VnbWVudF9hY2Nlc3NfcmlnaHRzKHZhcik7CisJaWYgKHZteC0+cm1vZGUudm04Nl9hY3RpdmUgJiYgc2VnID09IFZDUFVfU1JFR19UUikgeworCQl2bXgtPnJtb2RlLnRyLnNlbGVjdG9yID0gdmFyLT5zZWxlY3RvcjsKKwkJdm14LT5ybW9kZS50ci5iYXNlID0gdmFyLT5iYXNlOworCQl2bXgtPnJtb2RlLnRyLmxpbWl0ID0gdmFyLT5saW1pdDsKKwkJdm14LT5ybW9kZS50ci5hciA9IHZteF9zZWdtZW50X2FjY2Vzc19yaWdodHModmFyKTsKIAkJcmV0dXJuOwogCX0KIAl2bWNzX3dyaXRlbChzZi0+YmFzZSwgdmFyLT5iYXNlKTsKIAl2bWNzX3dyaXRlMzIoc2YtPmxpbWl0LCB2YXItPmxpbWl0KTsKIAl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCB2YXItPnNlbGVjdG9yKTsKLQlpZiAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSAmJiB2YXItPnMpIHsKKwlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSAmJiB2YXItPnMpIHsKIAkJLyoKIAkJICogSGFjayByZWFsLW1vZGUgc2VnbWVudHMgaW50byB2bTg2IGNvbXBhdGliaWxpdHkuCiAJCSAqLwpAQCAtMTc2Niw2ICsxODM3LDIxIEBACiAJCWFyID0gMHhmMzsKIAl9IGVsc2UKIAkJYXIgPSB2bXhfc2VnbWVudF9hY2Nlc3NfcmlnaHRzKHZhcik7CisKKwkvKgorCSAqICAgRml4IHRoZSAiQWNjZXNzZWQiIGJpdCBpbiBBUiBmaWVsZCBvZiBzZWdtZW50IHJlZ2lzdGVycyBmb3Igb2xkZXIKKwkgKiBxZW11IGJpbmFyaWVzLgorCSAqICAgSUEzMiBhcmNoIHNwZWNpZmllcyB0aGF0IGF0IHRoZSB0aW1lIG9mIHByb2Nlc3NvciByZXNldCB0aGUKKwkgKiAiQWNjZXNzZWQiIGJpdCBpbiB0aGUgQVIgZmllbGQgb2Ygc2VnbWVudCByZWdpc3RlcnMgaXMgMS4gQW5kIHFlbXUKKwkgKiBpcyBzZXR0aW5nIGl0IHRvIDAgaW4gdGhlIHVzZWRsYW5kIGNvZGUuIFRoaXMgY2F1c2VzIGludmFsaWQgZ3Vlc3QKKwkgKiBzdGF0ZSB2bWV4aXQgd2hlbiAidW5yZXN0cmljdGVkIGd1ZXN0IiBtb2RlIGlzIHR1cm5lZCBvbi4KKwkgKiAgICBGaXggZm9yIHRoaXMgc2V0dXAgaXNzdWUgaW4gY3B1X3Jlc2V0IGlzIGJlaW5nIHB1c2hlZCBpbiB0aGUgcWVtdQorCSAqIHRyZWUuIE5ld2VyIHFlbXUgYmluYXJpZXMgd2l0aCB0aGF0IHFlbXUgZml4IHdvdWxkIG5vdCBuZWVkIHRoaXMKKwkgKiBrdm0gaGFjay4KKwkgKi8KKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCAmJiAoc2VnICE9IFZDUFVfU1JFR19MRFRSKSkKKwkJYXIgfD0gMHgxOyAvKiBBY2Nlc3NlZCAqLworCiAJdm1jc193cml0ZTMyKHNmLT5hcl9ieXRlcywgYXIpOwogfQogCkBAIC0yMDQwLDcgKzIxMjYsNyBAQAogCWlmIChsaWtlbHkoa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9wYWdldGFibGVfZG9uZSkpCiAJCXJldHVybiAxOwogCXJldCA9IDA7Ci0JaWRlbnRpdHlfbWFwX3BmbiA9IFZNWF9FUFRfSURFTlRJVFlfUEFHRVRBQkxFX0FERFIgPj4gUEFHRV9TSElGVDsKKwlpZGVudGl0eV9tYXBfcGZuID0ga3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkciA+PiBQQUdFX1NISUZUOwogCXIgPSBrdm1fY2xlYXJfZ3Vlc3RfcGFnZShrdm0sIGlkZW50aXR5X21hcF9wZm4sIDAsIFBBR0VfU0laRSk7CiAJaWYgKHIgPCAwKQogCQlnb3RvIG91dDsKQEAgLTIwNjIsMTEgKzIxNDgsMTkgQEAKIHN0YXRpYyB2b2lkIHNlZ19zZXR1cChpbnQgc2VnKQogewogCXN0cnVjdCBrdm1fdm14X3NlZ21lbnRfZmllbGQgKnNmID0gJmt2bV92bXhfc2VnbWVudF9maWVsZHNbc2VnXTsKKwl1bnNpZ25lZCBpbnQgYXI7CiAKIAl2bWNzX3dyaXRlMTYoc2YtPnNlbGVjdG9yLCAwKTsKIAl2bWNzX3dyaXRlbChzZi0+YmFzZSwgMCk7CiAJdm1jc193cml0ZTMyKHNmLT5saW1pdCwgMHhmZmZmKTsKLQl2bWNzX3dyaXRlMzIoc2YtPmFyX2J5dGVzLCAweGYzKTsKKwlpZiAoZW5hYmxlX3VucmVzdHJpY3RlZF9ndWVzdCkgeworCQlhciA9IDB4OTM7CisJCWlmIChzZWcgPT0gVkNQVV9TUkVHX0NTKQorCQkJYXIgfD0gMHgwODsgLyogY29kZSBzZWdtZW50ICovCisJfSBlbHNlCisJCWFyID0gMHhmMzsKKworCXZtY3Nfd3JpdGUzMihzZi0+YXJfYnl0ZXMsIGFyKTsKIH0KIAogc3RhdGljIGludCBhbGxvY19hcGljX2FjY2Vzc19wYWdlKHN0cnVjdCBrdm0gKmt2bSkKQEAgLTIxMDEsMTQgKzIxOTUsMTUgQEAKIAkJZ290byBvdXQ7CiAJa3ZtX3VzZXJzcGFjZV9tZW0uc2xvdCA9IElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1Q7CiAJa3ZtX3VzZXJzcGFjZV9tZW0uZmxhZ3MgPSAwOwotCWt2bV91c2Vyc3BhY2VfbWVtLmd1ZXN0X3BoeXNfYWRkciA9IFZNWF9FUFRfSURFTlRJVFlfUEFHRVRBQkxFX0FERFI7CisJa3ZtX3VzZXJzcGFjZV9tZW0uZ3Vlc3RfcGh5c19hZGRyID0KKwkJa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkcjsKIAlrdm1fdXNlcnNwYWNlX21lbS5tZW1vcnlfc2l6ZSA9IFBBR0VfU0laRTsKIAlyID0gX19rdm1fc2V0X21lbW9yeV9yZWdpb24oa3ZtLCAma3ZtX3VzZXJzcGFjZV9tZW0sIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfcGFnZXRhYmxlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLAotCQkJVk1YX0VQVF9JREVOVElUWV9QQUdFVEFCTEVfQUREUiA+PiBQQUdFX1NISUZUKTsKKwkJCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHIgPj4gUEFHRV9TSElGVCk7CiBvdXQ6CiAJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHI7CkBAIC0yMjA5LDYgKzIzMDQsOCBAQAogCQkJZXhlY19jb250cm9sICY9IH5TRUNPTkRBUllfRVhFQ19FTkFCTEVfVlBJRDsKIAkJaWYgKCFlbmFibGVfZXB0KQogCQkJZXhlY19jb250cm9sICY9IH5TRUNPTkRBUllfRVhFQ19FTkFCTEVfRVBUOworCQlpZiAoIWVuYWJsZV91bnJlc3RyaWN0ZWRfZ3Vlc3QpCisJCQlleGVjX2NvbnRyb2wgJj0gflNFQ09OREFSWV9FWEVDX1VOUkVTVFJJQ1RFRF9HVUVTVDsKIAkJdm1jc193cml0ZTMyKFNFQ09OREFSWV9WTV9FWEVDX0NPTlRST0wsIGV4ZWNfY29udHJvbCk7CiAJfQogCkBAIC0yMzI2LDE0ICsyNDIzLDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXZteC0+dmNwdS5hcmNoLnJtb2RlLnZtODZfYWN0aXZlID0gMDsKKwl2bXgtPnJtb2RlLnZtODZfYWN0aXZlID0gMDsKIAogCXZteC0+c29mdF92bm1pX2Jsb2NrZWQgPSAwOwogCiAJdm14LT52Y3B1LmFyY2gucmVnc1tWQ1BVX1JFR1NfUkRYXSA9IGdldF9yZHhfaW5pdF92YWwoKTsKIAlrdm1fc2V0X2NyOCgmdm14LT52Y3B1LCAwKTsKIAltc3IgPSAweGZlZTAwMDAwIHwgTVNSX0lBMzJfQVBJQ0JBU0VfRU5BQkxFOwotCWlmICh2bXgtPnZjcHUudmNwdV9pZCA9PSAwKQorCWlmIChrdm1fdmNwdV9pc19ic3AoJnZteC0+dmNwdSkpCiAJCW1zciB8PSBNU1JfSUEzMl9BUElDQkFTRV9CU1A7CiAJa3ZtX3NldF9hcGljX2Jhc2UoJnZteC0+dmNwdSwgbXNyKTsKIApAQCAtMjM0NCw3ICsyNDQxLDcgQEAKIAkgKiBHVUVTVF9DU19CQVNFIHNob3VsZCByZWFsbHkgYmUgMHhmZmZmMDAwMCwgYnV0IFZUIHZtODYgbW9kZQogCSAqIGluc2lzdHMgb24gaGF2aW5nIEdVRVNUX0NTX0JBU0UgPT0gR1VFU1RfQ1NfU0VMRUNUT1IgPDwgNC4gIFNpZ2guCiAJICovCi0JaWYgKHZteC0+dmNwdS52Y3B1X2lkID09IDApIHsKKwlpZiAoa3ZtX3ZjcHVfaXNfYnNwKCZ2bXgtPnZjcHUpKSB7CiAJCXZtY3Nfd3JpdGUxNihHVUVTVF9DU19TRUxFQ1RPUiwgMHhmMDAwKTsKIAkJdm1jc193cml0ZWwoR1VFU1RfQ1NfQkFTRSwgMHgwMDBmMDAwMCk7CiAJfSBlbHNlIHsKQEAgLTIzNzMsNyArMjQ3MCw3IEBACiAJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRUlQLCAwKTsKIAogCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgMHgwMik7Ci0JaWYgKHZteC0+dmNwdS52Y3B1X2lkID09IDApCisJaWYgKGt2bV92Y3B1X2lzX2JzcCgmdm14LT52Y3B1KSkKIAkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAweGZmZjApOwogCWVsc2UKIAkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAwKTsKQEAgLTI0NjEsMTMgKzI1NTgsMTYgQEAKIAl1aW50MzJfdCBpbnRyOwogCWludCBpcnEgPSB2Y3B1LT5hcmNoLmludGVycnVwdC5ucjsKIAotCUtWTVRSQUNFXzFEKElOSl9WSVJRLCB2Y3B1LCAodTMyKWlycSwgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX2lual92aXJxKGlycSk7CiAKIAkrK3ZjcHUtPnN0YXQuaXJxX2luamVjdGlvbnM7Ci0JaWYgKHZjcHUtPmFyY2gucm1vZGUudm04Nl9hY3RpdmUpIHsKKwlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSkgewogCQl2bXgtPnJtb2RlLmlycS5wZW5kaW5nID0gdHJ1ZTsKIAkJdm14LT5ybW9kZS5pcnEudmVjdG9yID0gaXJxOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CisJCWlmICh2Y3B1LT5hcmNoLmludGVycnVwdC5zb2Z0KQorCQkJdm14LT5ybW9kZS5pcnEucmlwICs9CisJCQkJdm14LT52Y3B1LmFyY2guZXZlbnRfZXhpdF9pbnN0X2xlbjsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwKIAkJCSAgICAgaXJxIHwgSU5UUl9UWVBFX1NPRlRfSU5UUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7CkBAIC0yNTAyLDcgKzI2MDIsNyBAQAogCX0KIAogCSsrdmNwdS0+c3RhdC5ubWlfaW5qZWN0aW9uczsKLQlpZiAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSkgeworCWlmICh2bXgtPnJtb2RlLnZtODZfYWN0aXZlKSB7CiAJCXZteC0+cm1vZGUuaXJxLnBlbmRpbmcgPSB0cnVlOwogCQl2bXgtPnJtb2RlLmlycS52ZWN0b3IgPSBOTUlfVkVDVE9SOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7CkBAIC0yNjU5LDE0ICsyNzU5LDE0IEBACiAJCWlmIChlbmFibGVfZXB0KQogCQkJQlVHKCk7CiAJCWNyMiA9IHZtY3NfcmVhZGwoRVhJVF9RVUFMSUZJQ0FUSU9OKTsKLQkJS1ZNVFJBQ0VfM0QoUEFHRV9GQVVMVCwgdmNwdSwgZXJyb3JfY29kZSwgKHUzMiljcjIsCi0JCQkgICAgKHUzMikoKHU2NCljcjIgPj4gMzIpLCBoYW5kbGVyKTsKKwkJdHJhY2Vfa3ZtX3BhZ2VfZmF1bHQoY3IyLCBlcnJvcl9jb2RlKTsKKwogCQlpZiAoa3ZtX2V2ZW50X25lZWRzX3JlaW5qZWN0aW9uKHZjcHUpKQogCQkJa3ZtX21tdV91bnByb3RlY3RfcGFnZV92aXJ0KHZjcHUsIGNyMik7CiAJCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgY3IyLCBlcnJvcl9jb2RlKTsKIAl9CiAKLQlpZiAodmNwdS0+YXJjaC5ybW9kZS52bTg2X2FjdGl2ZSAmJgorCWlmICh2bXgtPnJtb2RlLnZtODZfYWN0aXZlICYmCiAJICAgIGhhbmRsZV9ybW9kZV9leGNlcHRpb24odmNwdSwgaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLLAogCQkJCQkJCQllcnJvcl9jb2RlKSkgewogCQlpZiAodmNwdS0+YXJjaC5oYWx0X3JlcXVlc3QpIHsKQEAgLTI3MDcsNyArMjgwNyw2IEBACiAJCQkJICAgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAkrK3ZjcHUtPnN0YXQuaXJxX2V4aXRzOwotCUtWTVRSQUNFXzFEKElOVFIsIHZjcHUsIHZtY3NfcmVhZDMyKFZNX0VYSVRfSU5UUl9JTkZPKSwgaGFuZGxlcik7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI3NTUsNyArMjg1NCw3IEBACiAKIHN0YXRpYyBpbnQgaGFuZGxlX2NyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb247CisJdW5zaWduZWQgbG9uZyBleGl0X3F1YWxpZmljYXRpb24sIHZhbDsKIAlpbnQgY3I7CiAJaW50IHJlZzsKIApAQCAtMjc2NCwyMSArMjg2MywxOSBAQAogCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKIAlzd2l0Y2ggKChleGl0X3F1YWxpZmljYXRpb24gPj4gNCkgJiAzKSB7CiAJY2FzZSAwOiAvKiBtb3YgdG8gY3IgKi8KLQkJS1ZNVFJBQ0VfM0QoQ1JfV1JJVEUsIHZjcHUsICh1MzIpY3IsCi0JCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLAotCQkJICAgICh1MzIpKCh1NjQpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSA+PiAzMiksCi0JCQkgICAgaGFuZGxlcik7CisJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZyk7CisJCXRyYWNlX2t2bV9jcl93cml0ZShjciwgdmFsKTsKIAkJc3dpdGNoIChjcikgewogCQljYXNlIDA6Ci0JCQlrdm1fc2V0X2NyMCh2Y3B1LCBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpKTsKKwkJCWt2bV9zZXRfY3IwKHZjcHUsIHZhbCk7CiAJCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCQkJcmV0dXJuIDE7CiAJCWNhc2UgMzoKLQkJCWt2bV9zZXRfY3IzKHZjcHUsIGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZykpOworCQkJa3ZtX3NldF9jcjModmNwdSwgdmFsKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA0OgotCQkJa3ZtX3NldF9jcjQodmNwdSwga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSk7CisJCQlrdm1fc2V0X2NyNCh2Y3B1LCB2YWwpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQljYXNlIDg6IHsKQEAgLTI4MDAsMjMgKzI4OTcsMTkgQEAKIAkJdmNwdS0+YXJjaC5jcjAgJj0gflg4Nl9DUjBfVFM7CiAJCXZtY3Nfd3JpdGVsKENSMF9SRUFEX1NIQURPVywgdmNwdS0+YXJjaC5jcjApOwogCQl2bXhfZnB1X2FjdGl2YXRlKHZjcHUpOwotCQlLVk1UUkFDRV8wRChDTFRTLCB2Y3B1LCBoYW5kbGVyKTsKIAkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJcmV0dXJuIDE7CiAJY2FzZSAxOiAvKm1vdiBmcm9tIGNyKi8KIAkJc3dpdGNoIChjcikgewogCQljYXNlIDM6CiAJCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2Y3B1LT5hcmNoLmNyMyk7Ci0JCQlLVk1UUkFDRV8zRChDUl9SRUFELCB2Y3B1LCAodTMyKWNyLAotCQkJCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIHJlZyksCi0JCQkJICAgICh1MzIpKCh1NjQpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgcmVnKSA+PiAzMiksCi0JCQkJICAgIGhhbmRsZXIpOworCQkJdHJhY2Vfa3ZtX2NyX3JlYWQoY3IsIHZjcHUtPmFyY2guY3IzKTsKIAkJCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSA4OgotCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywga3ZtX2dldF9jcjgodmNwdSkpOwotCQkJS1ZNVFJBQ0VfMkQoQ1JfUkVBRCwgdmNwdSwgKHUzMiljciwKLQkJCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCByZWcpLCBoYW5kbGVyKTsKKwkJCXZhbCA9IGt2bV9nZXRfY3I4KHZjcHUpOworCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKKwkJCXRyYWNlX2t2bV9jcl9yZWFkKGNyLCB2YWwpOwogCQkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAkJCXJldHVybiAxOwogCQl9CkBAIC0yODQxLDYgKzI5MzQsOCBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBkciwgcmVnOwogCisJaWYgKCFrdm1fcmVxdWlyZV9jcGwodmNwdSwgMCkpCisJCXJldHVybiAxOwogCWRyID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOwogCWlmIChkciAmIERSN19HRCkgewogCQkvKgpAQCAtMjg4NCw3ICsyOTc5LDYgQEAKIAkJCXZhbCA9IDA7CiAJCX0KIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIHJlZywgdmFsKTsKLQkJS1ZNVFJBQ0VfMkQoRFJfUkVBRCwgdmNwdSwgKHUzMilkciwgKHUzMil2YWwsIGhhbmRsZXIpOwogCX0gZWxzZSB7CiAJCXZhbCA9IHZjcHUtPmFyY2gucmVnc1tyZWddOwogCQlzd2l0Y2ggKGRyKSB7CkBAIC0yOTE3LDcgKzMwMTEsNiBAQAogCQkJfQogCQkJYnJlYWs7CiAJCX0KLQkJS1ZNVFJBQ0VfMkQoRFJfV1JJVEUsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsLCBoYW5kbGVyKTsKIAl9CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAlyZXR1cm4gMTsKQEAgLTI5MzksOCArMzAzMiw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCUtWTVRSQUNFXzNEKE1TUl9SRUFELCB2Y3B1LCBlY3gsICh1MzIpZGF0YSwgKHUzMikoZGF0YSA+PiAzMiksCi0JCSAgICBoYW5kbGVyKTsKKwl0cmFjZV9rdm1fbXNyX3JlYWQoZWN4LCBkYXRhKTsKIAogCS8qIEZJWE1FOiBoYW5kbGluZyBvZiBiaXRzIDMyOjYzIG9mIHJheCwgcmR4ICovCiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdID0gZGF0YSAmIC0xdTsKQEAgLTI5NTUsOCArMzA0Nyw3IEBACiAJdTY0IGRhdGEgPSAodmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdICYgLTF1KQogCQl8ICgodTY0KSh2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JEWF0gJiAtMXUpIDw8IDMyKTsKIAotCUtWTVRSQUNFXzNEKE1TUl9XUklURSwgdmNwdSwgZWN4LCAodTMyKWRhdGEsICh1MzIpKGRhdGEgPj4gMzIpLAotCQkgICAgaGFuZGxlcik7CisJdHJhY2Vfa3ZtX21zcl93cml0ZShlY3gsIGRhdGEpOwogCiAJaWYgKHZteF9zZXRfbXNyKHZjcHUsIGVjeCwgZGF0YSkgIT0gMCkgewogCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwpAQCAtMjk4Myw3ICszMDc0LDYgQEAKIAljcHVfYmFzZWRfdm1fZXhlY19jb250cm9sICY9IH5DUFVfQkFTRURfVklSVFVBTF9JTlRSX1BFTkRJTkc7CiAJdm1jc193cml0ZTMyKENQVV9CQVNFRF9WTV9FWEVDX0NPTlRST0wsIGNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2wpOwogCi0JS1ZNVFJBQ0VfMEQoUEVORF9JTlRSLCB2Y3B1LCBoYW5kbGVyKTsKIAkrK3ZjcHUtPnN0YXQuaXJxX3dpbmRvd19leGl0czsKIAogCS8qCkBAIC0zMDQ5LDcgKzMxMzksNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJGYWlsIHRvIGhhbmRsZSBhcGljIGFjY2VzcyB2bWV4aXQhIE9mZnNldCBpcyAweCVseFxuIiwKIAkJICAgICAgIG9mZnNldCk7Ci0JCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAtRU5PRVhFQzsKIAl9CiAJcmV0dXJuIDE7CiB9CkBAIC0zMTE4LDcgKzMyMDgsNyBAQAogCiAJaWYgKGV4aXRfcXVhbGlmaWNhdGlvbiAmICgxIDw8IDYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRVBUOiBHUEEgZXhjZWVkcyBHQVchXG4iKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZ2xhX3ZhbGlkaXR5ID0gKGV4aXRfcXVhbGlmaWNhdGlvbiA+PiA3KSAmIDB4MzsKQEAgLTMxMzAsMTQgKzMyMjAsOTggQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEV4aXQgcXVhbGlmaWNhdGlvbiBpcyAweCVseFxuIiwKIAkJCShsb25nIHVuc2lnbmVkIGludClleGl0X3F1YWxpZmljYXRpb24pOwogCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX1VOS05PV047Ci0JCWt2bV9ydW4tPmh3LmhhcmR3YXJlX2V4aXRfcmVhc29uID0gMDsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKKwkJa3ZtX3J1bi0+aHcuaGFyZHdhcmVfZXhpdF9yZWFzb24gPSBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OOworCQlyZXR1cm4gMDsKIAl9CiAKIAlncGEgPSB2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKTsKKwl0cmFjZV9rdm1fcGFnZV9mYXVsdChncGEsIGV4aXRfcXVhbGlmaWNhdGlvbik7CiAJcmV0dXJuIGt2bV9tbXVfcGFnZV9mYXVsdCh2Y3B1LCBncGEgJiBQQUdFX01BU0ssIDApOwogfQogCitzdGF0aWMgdTY0IGVwdF9yc3ZkX21hc2sodTY0IHNwdGUsIGludCBsZXZlbCkKK3sKKwlpbnQgaTsKKwl1NjQgbWFzayA9IDA7CisKKwlmb3IgKGkgPSA1MTsgaSA+IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0czsgaS0tKQorCQltYXNrIHw9ICgxVUxMIDw8IGkpOworCisJaWYgKGxldmVsID4gMikKKwkJLyogYml0cyA3OjMgcmVzZXJ2ZWQgKi8KKwkJbWFzayB8PSAweGY4OworCWVsc2UgaWYgKGxldmVsID09IDIpIHsKKwkJaWYgKHNwdGUgJiAoMVVMTCA8PCA3KSkKKwkJCS8qIDJNQiByZWYsIGJpdHMgMjA6MTIgcmVzZXJ2ZWQgKi8KKwkJCW1hc2sgfD0gMHgxZmYwMDA7CisJCWVsc2UKKwkJCS8qIGJpdHMgNjozIHJlc2VydmVkICovCisJCQltYXNrIHw9IDB4Nzg7CisJfQorCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIGVwdF9taXNjb25maWdfaW5zcGVjdF9zcHRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNwdGUsCisJCQkJICAgICAgIGludCBsZXZlbCkKK3sKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBzcHRlIDB4JWxseCBsZXZlbCAlZFxuIiwgX19mdW5jX18sIHNwdGUsIGxldmVsKTsKKworCS8qIDAxMGIgKHdyaXRlLW9ubHkpICovCisJV0FSTl9PTigoc3B0ZSAmIDB4NykgPT0gMHgyKTsKKworCS8qIDExMGIgKHdyaXRlL2V4ZWN1dGUpICovCisJV0FSTl9PTigoc3B0ZSAmIDB4NykgPT0gMHg2KTsKKworCS8qIDEwMGIgKGV4ZWN1dGUtb25seSkgYW5kIHZhbHVlIG5vdCBzdXBwb3J0ZWQgYnkgbG9naWNhbCBwcm9jZXNzb3IgKi8KKwlpZiAoIWNwdV9oYXNfdm14X2VwdF9leGVjdXRlX29ubHkoKSkKKwkJV0FSTl9PTigoc3B0ZSAmIDB4NykgPT0gMHg0KTsKKworCS8qIG5vdCAwMDBiICovCisJaWYgKChzcHRlICYgMHg3KSkgeworCQl1NjQgcnN2ZF9iaXRzID0gc3B0ZSAmIGVwdF9yc3ZkX21hc2soc3B0ZSwgbGV2ZWwpOworCisJCWlmIChyc3ZkX2JpdHMgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcnN2ZF9iaXRzID0gMHglbGx4XG4iLAorCQkJCQkgX19mdW5jX18sIHJzdmRfYml0cyk7CisJCQlXQVJOX09OKDEpOworCQl9CisKKwkJaWYgKGxldmVsID09IDEgfHwgKGxldmVsID09IDIgJiYgKHNwdGUgJiAoMVVMTCA8PCA3KSkpKSB7CisJCQl1NjQgZXB0X21lbV90eXBlID0gKHNwdGUgJiAweDM4KSA+PiAzOworCisJCQlpZiAoZXB0X21lbV90eXBlID09IDIgfHwgZXB0X21lbV90eXBlID09IDMgfHwKKwkJCSAgICBlcHRfbWVtX3R5cGUgPT0gNykgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVwdF9tZW1fdHlwZT0weCVsbHhcbiIsCisJCQkJCQlfX2Z1bmNfXywgZXB0X21lbV90eXBlKTsKKwkJCQlXQVJOX09OKDEpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRsZV9lcHRfbWlzY29uZmlnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJdTY0IHNwdGVzWzRdOworCWludCBucl9zcHRlcywgaTsKKwlncGFfdCBncGE7CisKKwlncGEgPSB2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKTsKKworCXByaW50ayhLRVJOX0VSUiAiRVBUOiBNaXNjb25maWd1cmF0aW9uLlxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEdQQTogMHglbGx4XG4iLCBncGEpOworCisJbnJfc3B0ZXMgPSBrdm1fbW11X2dldF9zcHRlX2hpZXJhcmNoeSh2Y3B1LCBncGEsIHNwdGVzKTsKKworCWZvciAoaSA9IFBUNjRfUk9PVF9MRVZFTDsgaSA+IFBUNjRfUk9PVF9MRVZFTCAtIG5yX3NwdGVzOyAtLWkpCisJCWVwdF9taXNjb25maWdfaW5zcGVjdF9zcHRlKHZjcHUsIHNwdGVzW2ktMV0sIGkpOworCisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9VTktOT1dOOworCWt2bV9ydW4tPmh3LmhhcmR3YXJlX2V4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fRVBUX01JU0NPTkZJRzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGhhbmRsZV9ubWlfd2luZG93KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdTMyIGNwdV9iYXNlZF92bV9leGVjX2NvbnRyb2w7CkBAIC0zMjE3LDggKzMzOTEsOSBAQAogCVtFWElUX1JFQVNPTl9BUElDX0FDQ0VTU10gICAgICAgICAgICAgPSBoYW5kbGVfYXBpY19hY2Nlc3MsCiAJW0VYSVRfUkVBU09OX1dCSU5WRF0gICAgICAgICAgICAgICAgICA9IGhhbmRsZV93YmludmQsCiAJW0VYSVRfUkVBU09OX1RBU0tfU1dJVENIXSAgICAgICAgICAgICA9IGhhbmRsZV90YXNrX3N3aXRjaCwKLQlbRVhJVF9SRUFTT05fRVBUX1ZJT0xBVElPTl0JICAgICAgPSBoYW5kbGVfZXB0X3Zpb2xhdGlvbiwKIAlbRVhJVF9SRUFTT05fTUNFX0RVUklOR19WTUVOVFJZXSAgICAgID0gaGFuZGxlX21hY2hpbmVfY2hlY2ssCisJW0VYSVRfUkVBU09OX0VQVF9WSU9MQVRJT05dCSAgICAgID0gaGFuZGxlX2VwdF92aW9sYXRpb24sCisJW0VYSVRfUkVBU09OX0VQVF9NSVNDT05GSUddICAgICAgICAgICA9IGhhbmRsZV9lcHRfbWlzY29uZmlnLAogfTsKIAogc3RhdGljIGNvbnN0IGludCBrdm1fdm14X21heF9leGl0X2hhbmRsZXJzID0KQEAgLTMyMzQsOCArMzQwOSw3IEBACiAJdTMyIGV4aXRfcmVhc29uID0gdm14LT5leGl0X3JlYXNvbjsKIAl1MzIgdmVjdG9yaW5nX2luZm8gPSB2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbzsKIAotCUtWTVRSQUNFXzNEKFZNRVhJVCwgdmNwdSwgZXhpdF9yZWFzb24sICh1MzIpa3ZtX3JpcF9yZWFkKHZjcHUpLAotCQkgICAgKHUzMikoKHU2NClrdm1fcmlwX3JlYWQodmNwdSkgPj4gMzIpLCBlbnRyeWV4aXQpOworCXRyYWNlX2t2bV9leGl0KGV4aXRfcmVhc29uLCBrdm1fcmlwX3JlYWQodmNwdSkpOwogCiAJLyogSWYgd2UgbmVlZCB0byBlbXVsYXRlIGFuIE1NSU8gZnJvbSBoYW5kbGVfaW52YWxpZF9ndWVzdF9zdGF0ZQogCSAqIHdlIGp1c3QgcmV0dXJuIDAgKi8KQEAgLTMyNDcsMTAgKzM0MjEsOCBAQAogCiAJLyogQWNjZXNzIENSMyBkb24ndCBjYXVzZSBWTUV4aXQgaW4gcGFnaW5nIG1vZGUsIHNvIHdlIG5lZWQKIAkgKiB0byBzeW5jIHdpdGggZ3Vlc3QgcmVhbCBDUjMuICovCi0JaWYgKGVuYWJsZV9lcHQgJiYgaXNfcGFnaW5nKHZjcHUpKSB7CisJaWYgKGVuYWJsZV9lcHQgJiYgaXNfcGFnaW5nKHZjcHUpKQogCQl2Y3B1LT5hcmNoLmNyMyA9IHZtY3NfcmVhZGwoR1VFU1RfQ1IzKTsKLQkJZXB0X2xvYWRfcGRwdHJzKHZjcHUpOwotCX0KIAogCWlmICh1bmxpa2VseSh2bXgtPmZhaWwpKSB7CiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRkFJTF9FTlRSWTsKQEAgLTMzMjYsMTAgKzM0OTgsOCBAQAogCiAJLyogV2UgbmVlZCB0byBoYW5kbGUgTk1JcyBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLwogCWlmICgoZXhpdF9pbnRyX2luZm8gJiBJTlRSX0lORk9fSU5UUl9UWVBFX01BU0spID09IElOVFJfVFlQRV9OTUlfSU5UUiAmJgotCSAgICAoZXhpdF9pbnRyX2luZm8gJiBJTlRSX0lORk9fVkFMSURfTUFTSykpIHsKLQkJS1ZNVFJBQ0VfMEQoTk1JLCAmdm14LT52Y3B1LCBoYW5kbGVyKTsKKwkgICAgKGV4aXRfaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZBTElEX01BU0spKQogCQlhc20oImludCAkMiIpOwotCX0KIAogCWlkdHZfaW5mb192YWxpZCA9IGlkdF92ZWN0b3JpbmdfaW5mbyAmIFZFQ1RPUklOR19JTkZPX1ZBTElEX01BU0s7CiAKQEAgLTM0MzQsNiArMzYwNCwxMCBAQAogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwogCisJaWYgKGVuYWJsZV9lcHQgJiYgaXNfcGFnaW5nKHZjcHUpKSB7CisJCXZtY3Nfd3JpdGVsKEdVRVNUX0NSMywgdmNwdS0+YXJjaC5jcjMpOworCQllcHRfbG9hZF9wZHB0cnModmNwdSk7CisJfQogCS8qIFJlY29yZCB0aGUgZ3Vlc3QncyBuZXQgdmNwdSB0aW1lIGZvciBlbmZvcmNlZCBOTUkgaW5qZWN0aW9ucy4gKi8KIAlpZiAodW5saWtlbHkoIWNwdV9oYXNfdmlydHVhbF9ubWlzKCkgJiYgdm14LT5zb2Z0X3ZubWlfYmxvY2tlZCkpCiAJCXZteC0+ZW50cnlfdGltZSA9IGt0aW1lX2dldCgpOwpAQCAtMzQ0OSwxMiArMzYyMywyMSBAQAogCWlmICh0ZXN0X2JpdChWQ1BVX1JFR1NfUklQLCAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpKQogCQl2bWNzX3dyaXRlbChHVUVTVF9SSVAsIHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUklQXSk7CiAKKwkvKiBXaGVuIHNpbmdsZS1zdGVwcGluZyBvdmVyIFNUSSBhbmQgTU9WIFNTLCB3ZSBtdXN0IGNsZWFyIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0aWJpbGl0eSBiaXRzIGluIHRoZSBndWVzdCBzdGF0ZS4gT3RoZXJ3aXNlCisJICogdm1lbnRyeSBmYWlscyBhcyBpdCB0aGVuIGV4cGVjdHMgYml0IDE0IChCUykgaW4gcGVuZGluZyBkZWJ1ZworCSAqIGV4Y2VwdGlvbnMgYmVpbmcgc2V0LCBidXQgdGhhdCdzIG5vdCBjb3JyZWN0IGZvciB0aGUgZ3Vlc3QgZGVidWdnaW5nCisJICogY2FzZS4gKi8KKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKKwkJdm14X3NldF9pbnRlcnJ1cHRfc2hhZG93KHZjcHUsIDApOworCiAJLyoKIAkgKiBMb2FkaW5nIGd1ZXN0IGZwdSBtYXkgaGF2ZSBjbGVhcmVkIGhvc3QgY3IwLnRzCiAJICovCiAJdm1jc193cml0ZWwoSE9TVF9DUjAsIHJlYWRfY3IwKCkpOwogCi0Jc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwlpZiAodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKIAogCWFzbSgKIAkJLyogU3RvcmUgaG9zdCByZWdpc3RlcnMgKi8KQEAgLTM0NjUsMTEgKzM2NDgsMTYgQEAKIAkJIm1vdiAlJSJSInNwLCAlY1tob3N0X3JzcF0oJTApIFxuXHQiCiAJCV9fZXgoQVNNX1ZNWF9WTVdSSVRFX1JTUF9SRFgpICJcblx0IgogCQkiMTogXG5cdCIKKwkJLyogUmVsb2FkIGNyMiBpZiBjaGFuZ2VkICovCisJCSJtb3YgJWNbY3IyXSglMCksICUlIlIiYXggXG5cdCIKKwkJIm1vdiAlJWNyMiwgJSUiUiJkeCBcblx0IgorCQkiY21wICUlIlIiYXgsICUlIlIiZHggXG5cdCIKKwkJImplIDJmIFxuXHQiCisJCSJtb3YgJSUiUiJheCwgJSVjcjIgXG5cdCIKKwkJIjI6IFxuXHQiCiAJCS8qIENoZWNrIGlmIHZtbGF1bmNoIG9mIHZtcmVzdW1lIGlzIG5lZWRlZCAqLwogCQkiY21wbCAkMCwgJWNbbGF1bmNoZWRdKCUwKSBcblx0IgogCQkvKiBMb2FkIGd1ZXN0IHJlZ2lzdGVycy4gIERvbid0IGNsb2JiZXIgZmxhZ3MuICovCi0JCSJtb3YgJWNbY3IyXSglMCksICUlIlIiYXggXG5cdCIKLQkJIm1vdiAlJSJSImF4LCAlJWNyMiBcblx0IgogCQkibW92ICVjW3JheF0oJTApLCAlJSJSImF4IFxuXHQiCiAJCSJtb3YgJWNbcmJ4XSglMCksICUlIlIiYnggXG5cdCIKIAkJIm1vdiAlY1tyZHhdKCUwKSwgJSUiUiJkeCBcblx0IgpAQCAtMzU0NywxMCArMzczNSwxMiBAQAogI2VuZGlmCiAJICAgICAgKTsKIAotCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKSk7CisJdmNwdS0+YXJjaC5yZWdzX2F2YWlsID0gfigoMSA8PCBWQ1BVX1JFR1NfUklQKSB8ICgxIDw8IFZDUFVfUkVHU19SU1ApCisJCQkJICB8ICgxIDw8IFZDUFVfRVhSRUdfUERQVFIpKTsKIAl2Y3B1LT5hcmNoLnJlZ3NfZGlydHkgPSAwOwogCi0JZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKKwlpZiAodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKIAogCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTsKIAlpZiAodm14LT5ybW9kZS5pcnEucGVuZGluZykKQEAgLTM2MzMsOSArMzgyMywxMyBAQAogCQlpZiAoYWxsb2NfYXBpY19hY2Nlc3NfcGFnZShrdm0pICE9IDApCiAJCQlnb3RvIGZyZWVfdm1jczsKIAotCWlmIChlbmFibGVfZXB0KQorCWlmIChlbmFibGVfZXB0KSB7CisJCWlmICgha3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkcikKKwkJCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHIgPQorCQkJCVZNWF9FUFRfSURFTlRJVFlfUEFHRVRBQkxFX0FERFI7CiAJCWlmIChhbGxvY19pZGVudGl0eV9wYWdldGFibGUoa3ZtKSAhPSAwKQogCQkJZ290byBmcmVlX3ZtY3M7CisJfQogCiAJcmV0dXJuICZ2bXgtPnZjcHU7CiAKQEAgLTM2OTksNiArMzg5MywzNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3Mgdm14X2V4aXRfcmVhc29uc19zdHJbXSA9IHsKKwl7IEVYSVRfUkVBU09OX0VYQ0VQVElPTl9OTUksICAgICAgICAgICAiZXhjZXB0aW9uIiB9LAorCXsgRVhJVF9SRUFTT05fRVhURVJOQUxfSU5URVJSVVBULCAgICAgICJleHRfaXJxIiB9LAorCXsgRVhJVF9SRUFTT05fVFJJUExFX0ZBVUxULCAgICAgICAgICAgICJ0cmlwbGVfZmF1bHQiIH0sCisJeyBFWElUX1JFQVNPTl9OTUlfV0lORE9XLCAgICAgICAgICAgICAgIm5taV93aW5kb3ciIH0sCisJeyBFWElUX1JFQVNPTl9JT19JTlNUUlVDVElPTiwgICAgICAgICAgImlvX2luc3RydWN0aW9uIiB9LAorCXsgRVhJVF9SRUFTT05fQ1JfQUNDRVNTLCAgICAgICAgICAgICAgICJjcl9hY2Nlc3MiIH0sCisJeyBFWElUX1JFQVNPTl9EUl9BQ0NFU1MsICAgICAgICAgICAgICAgImRyX2FjY2VzcyIgfSwKKwl7IEVYSVRfUkVBU09OX0NQVUlELCAgICAgICAgICAgICAgICAgICAiY3B1aWQiIH0sCisJeyBFWElUX1JFQVNPTl9NU1JfUkVBRCwgICAgICAgICAgICAgICAgInJkbXNyIiB9LAorCXsgRVhJVF9SRUFTT05fTVNSX1dSSVRFLCAgICAgICAgICAgICAgICJ3cm1zciIgfSwKKwl7IEVYSVRfUkVBU09OX1BFTkRJTkdfSU5URVJSVVBULCAgICAgICAiaW50ZXJydXB0X3dpbmRvdyIgfSwKKwl7IEVYSVRfUkVBU09OX0hMVCwgICAgICAgICAgICAgICAgICAgICAiaGFsdCIgfSwKKwl7IEVYSVRfUkVBU09OX0lOVkxQRywgICAgICAgICAgICAgICAgICAiaW52bHBnIiB9LAorCXsgRVhJVF9SRUFTT05fVk1DQUxMLCAgICAgICAgICAgICAgICAgICJoeXBlcmNhbGwiIH0sCisJeyBFWElUX1JFQVNPTl9UUFJfQkVMT1dfVEhSRVNIT0xELCAgICAgInRwcl9iZWxvd190aHJlcyIgfSwKKwl7IEVYSVRfUkVBU09OX0FQSUNfQUNDRVNTLCAgICAgICAgICAgICAiYXBpY19hY2Nlc3MiIH0sCisJeyBFWElUX1JFQVNPTl9XQklOVkQsICAgICAgICAgICAgICAgICAgIndiaW52ZCIgfSwKKwl7IEVYSVRfUkVBU09OX1RBU0tfU1dJVENILCAgICAgICAgICAgICAidGFza19zd2l0Y2giIH0sCisJeyBFWElUX1JFQVNPTl9FUFRfVklPTEFUSU9OLCAgICAgICAgICAgImVwdF92aW9sYXRpb24iIH0sCisJeyAtMSwgTlVMTCB9Cit9OworCitzdGF0aWMgYm9vbCB2bXhfZ2JfcGFnZV9lbmFibGUodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdm14X3g4Nl9vcHMgPSB7CiAJLmNwdV9oYXNfa3ZtX3N1cHBvcnQgPSBjcHVfaGFzX2t2bV9zdXBwb3J0LAogCS5kaXNhYmxlZF9ieV9iaW9zID0gdm14X2Rpc2FibGVkX2J5X2Jpb3MsCkBAIC0zNzU4LDYgKzM5ODAsOSBAQAogCS5zZXRfdHNzX2FkZHIgPSB2bXhfc2V0X3Rzc19hZGRyLAogCS5nZXRfdGRwX2xldmVsID0gZ2V0X2VwdF9sZXZlbCwKIAkuZ2V0X210X21hc2sgPSB2bXhfZ2V0X210X21hc2ssCisKKwkuZXhpdF9yZWFzb25zX3N0ciA9IHZteF9leGl0X3JlYXNvbnNfc3RyLAorCS5nYl9wYWdlX2VuYWJsZSA9IHZteF9nYl9wYWdlX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHZteF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggM2Q0NTI5MC4uYmU0NTFlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMzcsMTEgKzM3LDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva3ZtLmg+CisjdW5kZWYgVFJBQ0VfSU5DTFVERV9GSUxFCisjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKKyNpbmNsdWRlICJ0cmFjZS5oIgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9tY2UuaD4KIAogI2RlZmluZSBNQVhfSU9fTVNSUyAyNTYKICNkZWZpbmUgQ1IwX1JFU0VSVkVEX0JJVFMJCQkJCQlcCkBAIC01NSw2ICs2MCwxMCBAQAogCQkJICB8IFg4Nl9DUjRfT1NYTU1FWENQVCB8IFg4Nl9DUjRfVk1YRSkpCiAKICNkZWZpbmUgQ1I4X1JFU0VSVkVEX0JJVFMgKH4odW5zaWduZWQgbG9uZylYODZfQ1I4X1RQUikKKworI2RlZmluZSBLVk1fTUFYX01DRV9CQU5LUyAzMgorI2RlZmluZSBLVk1fTUNFX0NBUF9TVVBQT1JURUQgTUNHX0NUTF9QCisKIC8qIEVGRVIgZGVmYXVsdHM6CiAgKiAtIGVuYWJsZSBzeXNjYWxsIHBlciBkZWZhdWx0IGJlY2F1c2UgaXRzIGVtdWxhdGVkIGJ5IEtWTQogICogLSBlbmFibGUgTE1FIGFuZCBMTUEgcGVyIGRlZmF1bHQgb24gNjQgYml0IEtWTQpAQCAtNjgsMTQgKzc3LDE2IEBACiAjZGVmaW5lIFZNX1NUQVQoeCkgb2Zmc2V0b2Yoc3RydWN0IGt2bSwgc3RhdC54KSwgS1ZNX1NUQVRfVk0KICNkZWZpbmUgVkNQVV9TVEFUKHgpIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgc3RhdC54KSwgS1ZNX1NUQVRfVkNQVQogCitzdGF0aWMgdm9pZCB1cGRhdGVfY3I4X2ludGVyY2VwdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogc3RhdGljIGludCBrdm1fZGV2X2lvY3RsX2dldF9zdXBwb3J0ZWRfY3B1aWQoc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAogCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpOwotc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmt2bV9maW5kX2NwdWlkX2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJICAgICAgdTMyIGZ1bmN0aW9uLCB1MzIgaW5kZXgpOwogCiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgKmt2bV94ODZfb3BzOwogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3g4Nl9vcHMpOwogCitpbnQgaWdub3JlX21zcnMgPSAwOworbW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZV9tc3JzLCBpZ25vcmVfbXNycywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworCiBzdHJ1Y3Qga3ZtX3N0YXRzX2RlYnVnZnNfaXRlbSBkZWJ1Z2ZzX2VudHJpZXNbXSA9IHsKIAl7ICJwZl9maXhlZCIsIFZDUFVfU1RBVChwZl9maXhlZCkgfSwKIAl7ICJwZl9ndWVzdCIsIFZDUFVfU1RBVChwZl9ndWVzdCkgfSwKQEAgLTEyMiwxOCArMTMzLDE2IEBACiAJaWYgKHNlbGVjdG9yID09IDApCiAJCXJldHVybiAwOwogCi0JYXNtKCJzZ2R0ICUwIiA6ICI9bSIoZ2R0KSk7CisJa3ZtX2dldF9nZHQoJmdkdCk7CiAJdGFibGVfYmFzZSA9IGdkdC5iYXNlOwogCiAJaWYgKHNlbGVjdG9yICYgNCkgeyAgICAgICAgICAgLyogZnJvbSBsZHQgKi8KLQkJdTE2IGxkdF9zZWxlY3RvcjsKKwkJdTE2IGxkdF9zZWxlY3RvciA9IGt2bV9yZWFkX2xkdCgpOwogCi0JCWFzbSgic2xkdCAlMCIgOiAiPWciKGxkdF9zZWxlY3RvcikpOwogCQl0YWJsZV9iYXNlID0gc2VnbWVudF9iYXNlKGxkdF9zZWxlY3Rvcik7CiAJfQogCWQgPSAoc3RydWN0IGRlc2Nfc3RydWN0ICopKHRhYmxlX2Jhc2UgKyAoc2VsZWN0b3IgJiB+NykpOwotCXYgPSBkLT5iYXNlMCB8ICgodW5zaWduZWQgbG9uZylkLT5iYXNlMSA8PCAxNikgfAotCQkoKHVuc2lnbmVkIGxvbmcpZC0+YmFzZTIgPDwgMjQpOworCXYgPSBnZXRfZGVzY19iYXNlKGQpOwogI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoZC0+cyA9PSAwICYmIChkLT50eXBlID09IDIgfHwgZC0+dHlwZSA9PSA5IHx8IGQtPnR5cGUgPT0gMTEpKQogCQl2IHw9ICgodW5zaWduZWQgbG9uZykoKHN0cnVjdCBsZHR0c3NfZGVzYzY0ICopZCktPmJhc2UzKSA8PCAzMjsKQEAgLTE3NiwxNiArMTg1LDIyIEBACiAJKyt2Y3B1LT5zdGF0LnBmX2d1ZXN0OwogCiAJaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpIHsKLQkJaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLm5yID09IFBGX1ZFQ1RPUikgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgImt2bTogaW5qZWN0X3BhZ2VfZmF1bHQ6IgotCQkJCQkiIGRvdWJsZSBmYXVsdCAweCVseFxuIiwgYWRkcik7Ci0JCQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciA9IERGX1ZFQ1RPUjsKLQkJCXZjcHUtPmFyY2guZXhjZXB0aW9uLmVycm9yX2NvZGUgPSAwOwotCQl9IGVsc2UgaWYgKHZjcHUtPmFyY2guZXhjZXB0aW9uLm5yID09IERGX1ZFQ1RPUikgeworCQlzd2l0Y2godmNwdS0+YXJjaC5leGNlcHRpb24ubnIpIHsKKwkJY2FzZSBERl9WRUNUT1I6CiAJCQkvKiB0cmlwbGUgZmF1bHQgLT4gc2h1dGRvd24gKi8KIAkJCXNldF9iaXQoS1ZNX1JFUV9UUklQTEVfRkFVTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7CisJCQlyZXR1cm47CisJCWNhc2UgUEZfVkVDVE9SOgorCQkJdmNwdS0+YXJjaC5leGNlcHRpb24ubnIgPSBERl9WRUNUT1I7CisJCQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5lcnJvcl9jb2RlID0gMDsKKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKKwkJCS8qIHJlcGxhY2UgcHJldmlvdXMgZXhjZXB0aW9uIHdpdGggYSBuZXcgb25lIGluIGEgaG9wZQorCQkJICAgdGhhdCBpbnN0cnVjdGlvbiByZS1leGVjdXRpb24gd2lsbCByZWdlbmVyYXRlIGxvc3QKKwkJCSAgIGV4Y2VwdGlvbiAqLworCQkJdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOworCQkJYnJlYWs7CiAJCX0KLQkJcmV0dXJuOwogCX0KIAl2Y3B1LT5hcmNoLmNyMiA9IGFkZHI7CiAJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIFBGX1ZFQ1RPUiwgZXJyb3JfY29kZSk7CkBAIC0yMDcsMTIgKzIyMiwxOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKTsKIAotc3RhdGljIHZvaWQgX19xdWV1ZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorLyoKKyAqIENoZWNrcyBpZiBjcGwgPD0gcmVxdWlyZWRfY3BsOyBpZiB0cnVlLCByZXR1cm4gdHJ1ZS4gIE90aGVyd2lzZSBxdWV1ZQorICogYSAjR1AgYW5kIHJldHVybiBmYWxzZS4KKyAqLworYm9vbCBrdm1fcmVxdWlyZV9jcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgcmVxdWlyZWRfY3BsKQogewotCWt2bV94ODZfb3BzLT5xdWV1ZV9leGNlcHRpb24odmNwdSwgdmNwdS0+YXJjaC5leGNlcHRpb24ubnIsCi0JCQkJICAgICB2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5oYXNfZXJyb3JfY29kZSwKLQkJCQkgICAgIHZjcHUtPmFyY2guZXhjZXB0aW9uLmVycm9yX2NvZGUpOworCWlmIChrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KSA8PSByZXF1aXJlZF9jcGwpCisJCXJldHVybiB0cnVlOworCWt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBHUF9WRUNUT1IsIDApOworCXJldHVybiBmYWxzZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bV9yZXF1aXJlX2NwbCk7CiAKIC8qCiAgKiBMb2FkIHRoZSBwYWUgcGRwdHJzLiAgUmV0dXJuIHRydWUgaXMgdGhleSBhcmUgYWxsIHZhbGlkLgpAQCAtMjMyLDcgKzI1Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZHB0ZSk7ICsraSkgewotCQlpZiAoaXNfcHJlc2VudF9wdGUocGRwdGVbaV0pICYmCisJCWlmIChpc19wcmVzZW50X2dwdGUocGRwdGVbaV0pICYmCiAJCSAgICAocGRwdGVbaV0gJiB2Y3B1LT5hcmNoLm1tdS5yc3ZkX2JpdHNfbWFza1swXVsyXSkpIHsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIG91dDsKQEAgLTI0MSw2ICsyNjIsMTAgQEAKIAlyZXQgPSAxOwogCiAJbWVtY3B5KHZjcHUtPmFyY2gucGRwdHJzLCBwZHB0ZSwgc2l6ZW9mKHZjcHUtPmFyY2gucGRwdHJzKSk7CisJX19zZXRfYml0KFZDUFVfRVhSRUdfUERQVFIsCisJCSAgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKTsKKwlfX3NldF9iaXQoVkNQVV9FWFJFR19QRFBUUiwKKwkJICAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1LT5hcmNoLnJlZ3NfZGlydHkpOwogb3V0OgogCiAJcmV0dXJuIHJldDsKQEAgLTI1Niw2ICsyODEsMTAgQEAKIAlpZiAoaXNfbG9uZ19tb2RlKHZjcHUpIHx8ICFpc19wYWUodmNwdSkpCiAJCXJldHVybiBmYWxzZTsKIAorCWlmICghdGVzdF9iaXQoVkNQVV9FWFJFR19QRFBUUiwKKwkJICAgICAgKHVuc2lnbmVkIGxvbmcgKikmdmNwdS0+YXJjaC5yZWdzX2F2YWlsKSkKKwkJcmV0dXJuIHRydWU7CisKIAlyID0ga3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCB2Y3B1LT5hcmNoLmNyMyAmIH4zMXUsIHBkcHRlLCBzaXplb2YocGRwdGUpKTsKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMzI4LDkgKzM1Nyw2IEBACiB2b2lkIGt2bV9sbXN3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBtc3cpCiB7CiAJa3ZtX3NldF9jcjAodmNwdSwgKHZjcHUtPmFyY2guY3IwICYgfjB4MGZ1bCkgfCAobXN3ICYgMHgwZikpOwotCUtWTVRSQUNFXzFEKExNU1csIHZjcHUsCi0JCSAgICAodTMyKSgodmNwdS0+YXJjaC5jcjAgJiB+MHgwZnVsKSB8IChtc3cgJiAweDBmKSksCi0JCSAgICBoYW5kbGVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9sbXN3KTsKIApAQCAtNDY2LDcgKzQ5Miw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCU1TUl9DU1RBUiwgTVNSX0tFUk5FTF9HU19CQVNFLCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfTFNUQVIsCiAjZW5kaWYKLQlNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIsIE1TUl9LVk1fU1lTVEVNX1RJTUUsIE1TUl9LVk1fV0FMTF9DTE9DSywKKwlNU1JfSUEzMl9UU0MsIE1TUl9LVk1fU1lTVEVNX1RJTUUsIE1TUl9LVk1fV0FMTF9DTE9DSywKIAlNU1JfSUEzMl9QRVJGX1NUQVRVUywgTVNSX0lBMzJfQ1JfUEFULCBNU1JfVk1fSFNBVkVfUEEKIH07CiAKQEAgLTY0NCw4ICs2NzAsNyBAQAogCiAJLyogS2VlcCBpcnEgZGlzYWJsZWQgdG8gcHJldmVudCBjaGFuZ2VzIHRvIHRoZSBjbG9jayAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlrdm1fZ2V0X21zcih2LCBNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIsCi0JCQkgICZ2Y3B1LT5odl9jbG9jay50c2NfdGltZXN0YW1wKTsKKwlrdm1fZ2V0X21zcih2LCBNU1JfSUEzMl9UU0MsICZ2Y3B1LT5odl9jbG9jay50c2NfdGltZXN0YW1wKTsKIAlrdGltZV9nZXRfdHMoJnRzKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKQEAgLTc3OCwyMyArODAzLDYwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X21zcl9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSkKK3sKKwl1NjQgbWNnX2NhcCA9IHZjcHUtPmFyY2gubWNnX2NhcDsKKwl1bnNpZ25lZCBiYW5rX251bSA9IG1jZ19jYXAgJiAweGZmOworCisJc3dpdGNoIChtc3IpIHsKKwljYXNlIE1TUl9JQTMyX01DR19TVEFUVVM6CisJCXZjcHUtPmFyY2gubWNnX3N0YXR1cyA9IGRhdGE7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfTUNHX0NUTDoKKwkJaWYgKCEobWNnX2NhcCAmIE1DR19DVExfUCkpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGRhdGEgIT0gMCAmJiBkYXRhICE9IH4odTY0KTApCisJCQlyZXR1cm4gLTE7CisJCXZjcHUtPmFyY2gubWNnX2N0bCA9IGRhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChtc3IgPj0gTVNSX0lBMzJfTUMwX0NUTCAmJgorCQkgICAgbXNyIDwgTVNSX0lBMzJfTUMwX0NUTCArIDQgKiBiYW5rX251bSkgeworCQkJdTMyIG9mZnNldCA9IG1zciAtIE1TUl9JQTMyX01DMF9DVEw7CisJCQkvKiBvbmx5IDAgb3IgYWxsIDFzIGNhbiBiZSB3cml0dGVuIHRvIElBMzJfTUNpX0NUTCAqLworCQkJaWYgKChvZmZzZXQgJiAweDMpID09IDAgJiYKKwkJCSAgICBkYXRhICE9IDAgJiYgZGF0YSAhPSB+KHU2NCkwKQorCQkJCXJldHVybiAtMTsKKwkJCXZjcHUtPmFyY2gubWNlX2JhbmtzW29mZnNldF0gPSBkYXRhOworCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBpbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpCiB7CiAJc3dpdGNoIChtc3IpIHsKIAljYXNlIE1TUl9FRkVSOgogCQlzZXRfZWZlcih2Y3B1LCBkYXRhKTsKIAkJYnJlYWs7Ci0JY2FzZSBNU1JfSUEzMl9NQzBfU1RBVFVTOgotCQlwcl91bmltcGwodmNwdSwgIiVzOiBNU1JfSUEzMl9NQzBfU1RBVFVTIDB4JWxseCwgbm9wXG4iLAotCQkgICAgICAgX19mdW5jX18sIGRhdGEpOworCWNhc2UgTVNSX0s3X0hXQ1I6CisJCWRhdGEgJj0gfih1NjQpMHg0MDsJLyogaWdub3JlIGZsdXNoIGZpbHRlciBkaXNhYmxlICovCisJCWlmIChkYXRhICE9IDApIHsKKwkJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBIV0NSIHdybXNyOiAweCVsbHhcbiIsCisJCQkJZGF0YSk7CisJCQlyZXR1cm4gMTsKKwkJfQogCQlicmVhazsKLQljYXNlIE1TUl9JQTMyX01DR19TVEFUVVM6Ci0JCXByX3VuaW1wbCh2Y3B1LCAiJXM6IE1TUl9JQTMyX01DR19TVEFUVVMgMHglbGx4LCBub3BcbiIsCi0JCQlfX2Z1bmNfXywgZGF0YSk7CisJY2FzZSBNU1JfRkFNMTBIX01NSU9fQ09ORl9CQVNFOgorCQlpZiAoZGF0YSAhPSAwKSB7CisJCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgTU1JT19DT05GX0JBU0Ugd3Jtc3I6ICIKKwkJCQkiMHglbGx4XG4iLCBkYXRhKTsKKwkJCXJldHVybiAxOworCQl9CiAJCWJyZWFrOwotCWNhc2UgTVNSX0lBMzJfTUNHX0NUTDoKLQkJcHJfdW5pbXBsKHZjcHUsICIlczogTVNSX0lBMzJfTUNHX0NUTCAweCVsbHgsIG5vcFxuIiwKLQkJCV9fZnVuY19fLCBkYXRhKTsKKwljYXNlIE1TUl9BTUQ2NF9OQl9DRkc6CiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfREVCVUdDVExNU1I6CiAJCWlmICghZGF0YSkgewpAQCAtODExLDEyICs4NzMsMTUgQEAKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKIAljYXNlIE1TUl9JQTMyX1VDT0RFX1dSSVRFOgogCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgorCWNhc2UgTVNSX0FNRDY0X1BBVENIX0xPQURFUjoKIAkJYnJlYWs7CiAJY2FzZSAweDIwMCAuLi4gMHgyZmY6CiAJCXJldHVybiBzZXRfbXNyX210cnIodmNwdSwgbXNyLCBkYXRhKTsKIAljYXNlIE1TUl9JQTMyX0FQSUNCQVNFOgogCQlrdm1fc2V0X2FwaWNfYmFzZSh2Y3B1LCBkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBBUElDX0JBU0VfTVNSIC4uLiBBUElDX0JBU0VfTVNSICsgMHgzZmY6CisJCXJldHVybiBrdm1feDJhcGljX21zcl93cml0ZSh2Y3B1LCBtc3IsIGRhdGEpOwogCWNhc2UgTVNSX0lBMzJfTUlTQ19FTkFCTEU6CiAJCXZjcHUtPmFyY2guaWEzMl9taXNjX2VuYWJsZV9tc3IgPSBkYXRhOwogCQlicmVhazsKQEAgLTg1MCw5ICs5MTUsNTAgQEAKIAkJa3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUodmNwdSk7CiAJCWJyZWFrOwogCX0KKwljYXNlIE1TUl9JQTMyX01DR19DVEw6CisJY2FzZSBNU1JfSUEzMl9NQ0dfU1RBVFVTOgorCWNhc2UgTVNSX0lBMzJfTUMwX0NUTCAuLi4gTVNSX0lBMzJfTUMwX0NUTCArIDQgKiBLVk1fTUFYX01DRV9CQU5LUyAtIDE6CisJCXJldHVybiBzZXRfbXNyX21jZSh2Y3B1LCBtc3IsIGRhdGEpOworCisJLyogUGVyZm9ybWFuY2UgY291bnRlcnMgYXJlIG5vdCBwcm90ZWN0ZWQgYnkgYSBDUFVJRCBiaXQsCisJICogc28gd2Ugc2hvdWxkIGNoZWNrIGFsbCBvZiB0aGVtIGluIHRoZSBnZW5lcmljIHBhdGggZm9yIHRoZSBzYWtlIG9mCisJICogY3Jvc3MgdmVuZG9yIG1pZ3JhdGlvbi4KKwkgKiBXcml0aW5nIGEgemVybyBpbnRvIHRoZSBldmVudCBzZWxlY3QgTVNScyBkaXNhYmxlcyB0aGVtLAorCSAqIHdoaWNoIHdlIHBlcmZlY3RseSBlbXVsYXRlIDstKS4gQW55IG90aGVyIHZhbHVlIHNob3VsZCBiZSBhdCBsZWFzdAorCSAqIHJlcG9ydGVkLCBzb21lIGd1ZXN0cyBkZXBlbmQgb24gdGhlbS4KKwkgKi8KKwljYXNlIE1TUl9QNl9FVk5UU0VMMDoKKwljYXNlIE1TUl9QNl9FVk5UU0VMMToKKwljYXNlIE1TUl9LN19FVk5UU0VMMDoKKwljYXNlIE1TUl9LN19FVk5UU0VMMToKKwljYXNlIE1TUl9LN19FVk5UU0VMMjoKKwljYXNlIE1TUl9LN19FVk5UU0VMMzoKKwkJaWYgKGRhdGEgIT0gMCkKKwkJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBwZXJmY3RyIHdybXNyOiAiCisJCQkJIjB4JXggZGF0YSAweCVsbHhcbiIsIG1zciwgZGF0YSk7CisJCWJyZWFrOworCS8qIGF0IGxlYXN0IFJIRUwgNCB1bmNvbmRpdGlvbmFsbHkgd3JpdGVzIHRvIHRoZSBwZXJmY3RyIHJlZ2lzdGVycywKKwkgKiBzbyB3ZSBpZ25vcmUgd3JpdGVzIHRvIG1ha2UgaXQgaGFwcHkuCisJICovCisJY2FzZSBNU1JfUDZfUEVSRkNUUjA6CisJY2FzZSBNU1JfUDZfUEVSRkNUUjE6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjA6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjE6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjI6CisJY2FzZSBNU1JfSzdfUEVSRkNUUjM6CisJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBwZXJmY3RyIHdybXNyOiAiCisJCQkiMHgleCBkYXRhIDB4JWxseFxuIiwgbXNyLCBkYXRhKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJfdW5pbXBsKHZjcHUsICJ1bmhhbmRsZWQgd3Jtc3I6IDB4JXggZGF0YSAlbGx4XG4iLCBtc3IsIGRhdGEpOwotCQlyZXR1cm4gMTsKKwkJaWYgKCFpZ25vcmVfbXNycykgeworCQkJcHJfdW5pbXBsKHZjcHUsICJ1bmhhbmRsZWQgd3Jtc3I6IDB4JXggZGF0YSAlbGx4XG4iLAorCQkJCW1zciwgZGF0YSk7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIHsKKwkJCXByX3VuaW1wbCh2Y3B1LCAiaWdub3JlZCB3cm1zcjogMHgleCBkYXRhICVsbHhcbiIsCisJCQkJbXNyLCBkYXRhKTsKKwkJCWJyZWFrOworCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtOTA1LDI2ICsxMDExLDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X21zcl9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhKQoreworCXU2NCBkYXRhOworCXU2NCBtY2dfY2FwID0gdmNwdS0+YXJjaC5tY2dfY2FwOworCXVuc2lnbmVkIGJhbmtfbnVtID0gbWNnX2NhcCAmIDB4ZmY7CisKKwlzd2l0Y2ggKG1zcikgeworCWNhc2UgTVNSX0lBMzJfUDVfTUNfQUREUjoKKwljYXNlIE1TUl9JQTMyX1A1X01DX1RZUEU6CisJCWRhdGEgPSAwOworCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX01DR19DQVA6CisJCWRhdGEgPSB2Y3B1LT5hcmNoLm1jZ19jYXA7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfTUNHX0NUTDoKKwkJaWYgKCEobWNnX2NhcCAmIE1DR19DVExfUCkpCisJCQlyZXR1cm4gMTsKKwkJZGF0YSA9IHZjcHUtPmFyY2gubWNnX2N0bDsKKwkJYnJlYWs7CisJY2FzZSBNU1JfSUEzMl9NQ0dfU1RBVFVTOgorCQlkYXRhID0gdmNwdS0+YXJjaC5tY2dfc3RhdHVzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAobXNyID49IE1TUl9JQTMyX01DMF9DVEwgJiYKKwkJICAgIG1zciA8IE1TUl9JQTMyX01DMF9DVEwgKyA0ICogYmFua19udW0pIHsKKwkJCXUzMiBvZmZzZXQgPSBtc3IgLSBNU1JfSUEzMl9NQzBfQ1RMOworCQkJZGF0YSA9IHZjcHUtPmFyY2gubWNlX2JhbmtzW29mZnNldF07CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJKnBkYXRhID0gZGF0YTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGt2bV9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEpCiB7CiAJdTY0IGRhdGE7CiAKIAlzd2l0Y2ggKG1zcikgewotCWNhc2UgMHhjMDAxMDAxMDogLyogU1lTQ0ZHICovCi0JY2FzZSAweGMwMDEwMDE1OiAvKiBIV0NSICovCiAJY2FzZSBNU1JfSUEzMl9QTEFURk9STV9JRDoKLQljYXNlIE1TUl9JQTMyX1A1X01DX0FERFI6Ci0JY2FzZSBNU1JfSUEzMl9QNV9NQ19UWVBFOgotCWNhc2UgTVNSX0lBMzJfTUMwX0NUTDoKLQljYXNlIE1TUl9JQTMyX01DR19TVEFUVVM6Ci0JY2FzZSBNU1JfSUEzMl9NQ0dfQ0FQOgotCWNhc2UgTVNSX0lBMzJfTUNHX0NUTDoKLQljYXNlIE1TUl9JQTMyX01DMF9NSVNDOgotCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrNDoKLQljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzg6Ci0JY2FzZSBNU1JfSUEzMl9NQzBfTUlTQysxMjoKLQljYXNlIE1TUl9JQTMyX01DMF9NSVNDKzE2OgotCWNhc2UgTVNSX0lBMzJfTUMwX01JU0MrMjA6CiAJY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CiAJY2FzZSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjoKIAljYXNlIE1TUl9JQTMyX0RFQlVHQ1RMTVNSOgpAQCAtOTMyLDEwICsxMDU5LDE4IEBACiAJY2FzZSBNU1JfSUEzMl9MQVNUQlJBTkNIVE9JUDoKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRGUk9NSVA6CiAJY2FzZSBNU1JfSUEzMl9MQVNUSU5UVE9JUDoKKwljYXNlIE1TUl9LOF9TWVNDRkc6CisJY2FzZSBNU1JfSzdfSFdDUjoKIAljYXNlIE1TUl9WTV9IU0FWRV9QQToKKwljYXNlIE1TUl9QNl9QRVJGQ1RSMDoKKwljYXNlIE1TUl9QNl9QRVJGQ1RSMToKIAljYXNlIE1TUl9QNl9FVk5UU0VMMDoKIAljYXNlIE1TUl9QNl9FVk5UU0VMMToKIAljYXNlIE1TUl9LN19FVk5UU0VMMDoKKwljYXNlIE1TUl9LN19QRVJGQ1RSMDoKKwljYXNlIE1TUl9LOF9JTlRfUEVORElOR19NU0c6CisJY2FzZSBNU1JfQU1ENjRfTkJfQ0ZHOgorCWNhc2UgTVNSX0ZBTTEwSF9NTUlPX0NPTkZfQkFTRToKIAkJZGF0YSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgTVNSX01UUlJjYXA6CkBAIC05NDksNiArMTA4NCw5IEBACiAJY2FzZSBNU1JfSUEzMl9BUElDQkFTRToKIAkJZGF0YSA9IGt2bV9nZXRfYXBpY19iYXNlKHZjcHUpOwogCQlicmVhazsKKwljYXNlIEFQSUNfQkFTRV9NU1IgLi4uIEFQSUNfQkFTRV9NU1IgKyAweDNmZjoKKwkJcmV0dXJuIGt2bV94MmFwaWNfbXNyX3JlYWQodmNwdSwgbXNyLCBwZGF0YSk7CisJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfTUlTQ19FTkFCTEU6CiAJCWRhdGEgPSB2Y3B1LT5hcmNoLmlhMzJfbWlzY19lbmFibGVfbXNyOwogCQlicmVhazsKQEAgLTk2Nyw5ICsxMTA1LDIyIEBACiAJY2FzZSBNU1JfS1ZNX1NZU1RFTV9USU1FOgogCQlkYXRhID0gdmNwdS0+YXJjaC50aW1lOwogCQlicmVhazsKKwljYXNlIE1TUl9JQTMyX1A1X01DX0FERFI6CisJY2FzZSBNU1JfSUEzMl9QNV9NQ19UWVBFOgorCWNhc2UgTVNSX0lBMzJfTUNHX0NBUDoKKwljYXNlIE1TUl9JQTMyX01DR19DVEw6CisJY2FzZSBNU1JfSUEzMl9NQ0dfU1RBVFVTOgorCWNhc2UgTVNSX0lBMzJfTUMwX0NUTCAuLi4gTVNSX0lBMzJfTUMwX0NUTCArIDQgKiBLVk1fTUFYX01DRV9CQU5LUyAtIDE6CisJCXJldHVybiBnZXRfbXNyX21jZSh2Y3B1LCBtc3IsIHBkYXRhKTsKIAlkZWZhdWx0OgotCQlwcl91bmltcGwodmNwdSwgInVuaGFuZGxlZCByZG1zcjogMHgleFxuIiwgbXNyKTsKLQkJcmV0dXJuIDE7CisJCWlmICghaWdub3JlX21zcnMpIHsKKwkJCXByX3VuaW1wbCh2Y3B1LCAidW5oYW5kbGVkIHJkbXNyOiAweCV4XG4iLCBtc3IpOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQlwcl91bmltcGwodmNwdSwgImlnbm9yZWQgcmRtc3I6IDB4JXhcbiIsIG1zcik7CisJCQlkYXRhID0gMDsKKwkJfQorCQlicmVhazsKIAl9CiAJKnBkYXRhID0gZGF0YTsKIAlyZXR1cm4gMDsKQEAgLTEwNjgsNiArMTIxOSwxMSBAQAogCWNhc2UgS1ZNX0NBUF9SRUlOSkVDVF9DT05UUk9MOgogCWNhc2UgS1ZNX0NBUF9JUlFfSU5KRUNUX1NUQVRVUzoKIAljYXNlIEtWTV9DQVBfQVNTSUdOX0RFVl9JUlE6CisJY2FzZSBLVk1fQ0FQX0lSUUZEOgorCWNhc2UgS1ZNX0NBUF9JT0VWRU5URkQ6CisJY2FzZSBLVk1fQ0FQX1BJVDI6CisJY2FzZSBLVk1fQ0FQX1BJVF9TVEFURTI6CisJY2FzZSBLVk1fQ0FQX1NFVF9JREVOVElUWV9NQVBfQUREUjoKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9DT0FMRVNDRURfTU1JTzoKQEAgLTEwODgsNiArMTI0NCw5IEBACiAJY2FzZSBLVk1fQ0FQX0lPTU1VOgogCQlyID0gaW9tbXVfZm91bmQoKTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fQ0FQX01DRToKKwkJciA9IEtWTV9NQVhfTUNFX0JBTktTOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyID0gMDsKIAkJYnJlYWs7CkBAIC0xMTQ3LDYgKzEzMDYsMTYgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9YODZfR0VUX01DRV9DQVBfU1VQUE9SVEVEOiB7CisJCXU2NCBtY2VfY2FwOworCisJCW1jZV9jYXAgPSBLVk1fTUNFX0NBUF9TVVBQT1JURUQ7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZtY2VfY2FwLCBzaXplb2YgbWNlX2NhcCkpCisJCQlnb3RvIG91dDsKKwkJciA9IDA7CisJCWJyZWFrOworCX0KIAlkZWZhdWx0OgogCQlyID0gLUVJTlZBTDsKIAl9CkBAIC0xMjI3LDYgKzEzOTYsNyBAQAogCXZjcHUtPmFyY2guY3B1aWRfbmVudCA9IGNwdWlkLT5uZW50OwogCWNwdWlkX2ZpeF9ueF9jYXAodmNwdSk7CiAJciA9IDA7CisJa3ZtX2FwaWNfc2V0X3ZlcnNpb24odmNwdSk7CiAKIG91dF9mcmVlOgogCXZmcmVlKGNwdWlkX2VudHJpZXMpOwpAQCAtMTI0OCw2ICsxNDE4LDcgQEAKIAkJCSAgIGNwdWlkLT5uZW50ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSkpCiAJCWdvdG8gb3V0OwogCXZjcHUtPmFyY2guY3B1aWRfbmVudCA9IGNwdWlkLT5uZW50OworCWt2bV9hcGljX3NldF92ZXJzaW9uKHZjcHUpOwogCXJldHVybiAwOwogCiBvdXQ6CkBAIC0xMjkwLDYgKzE0NjEsNyBAQAogCQkJIHUzMiBpbmRleCwgaW50ICpuZW50LCBpbnQgbWF4bmVudCkKIHsKIAl1bnNpZ25lZCBmX254ID0gaXNfZWZlcl9ueCgpID8gRihOWCkgOiAwOworCXVuc2lnbmVkIGZfZ2JwYWdlcyA9IGt2bV94ODZfb3BzLT5nYl9wYWdlX2VuYWJsZSgpID8gRihHQlBBR0VTKSA6IDA7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCXVuc2lnbmVkIGZfbG0gPSBGKExNKTsKICNlbHNlCkBAIC0xMzE0LDcgKzE0ODYsNyBAQAogCQlGKE1UUlIpIHwgRihQR0UpIHwgRihNQ0EpIHwgRihDTU9WKSB8CiAJCUYoUEFUKSB8IEYoUFNFMzYpIHwgMCAvKiBSZXNlcnZlZCAqLyB8CiAJCWZfbnggfCAwIC8qIFJlc2VydmVkICovIHwgRihNTVhFWFQpIHwgRihNTVgpIHwKLQkJRihGWFNSKSB8IEYoRlhTUl9PUFQpIHwgMCAvKiBHQlBBR0VTICovIHwgMCAvKiBSRFRTQ1AgKi8gfAorCQlGKEZYU1IpIHwgRihGWFNSX09QVCkgfCBmX2dicGFnZXMgfCAwIC8qIFJEVFNDUCAqLyB8CiAJCTAgLyogUmVzZXJ2ZWQgKi8gfCBmX2xtIHwgRigzRE5PV0VYVCkgfCBGKDNETk9XKTsKIAkvKiBjcHVpZCAxLmVjeCAqLwogCWNvbnN0IHUzMiBrdm1fc3VwcG9ydGVkX3dvcmQ0X3g4Nl9mZWF0dXJlcyA9CkBAIC0xMzIzLDcgKzE0OTUsNyBAQAogCQkwIC8qIFRNMiAqLyB8IEYoU1NTRTMpIHwgMCAvKiBDTlhULUlEICovIHwgMCAvKiBSZXNlcnZlZCAqLyB8CiAJCTAgLyogUmVzZXJ2ZWQgKi8gfCBGKENYMTYpIHwgMCAvKiB4VFBSIFVwZGF0ZSwgUERDTSAqLyB8CiAJCTAgLyogUmVzZXJ2ZWQsIERDQSAqLyB8IEYoWE1NNF8xKSB8Ci0JCUYoWE1NNF8yKSB8IDAgLyogeDJBUElDICovIHwgRihNT1ZCRSkgfCBGKFBPUENOVCkgfAorCQlGKFhNTTRfMikgfCBGKFgyQVBJQykgfCBGKE1PVkJFKSB8IEYoUE9QQ05UKSB8CiAJCTAgLyogUmVzZXJ2ZWQsIFhTQVZFLCBPU1hTQVZFICovOwogCS8qIGNwdWlkIDB4ODAwMDAwMDEuZWN4ICovCiAJY29uc3QgdTMyIGt2bV9zdXBwb3J0ZWRfd29yZDZfeDg2X2ZlYXR1cmVzID0KQEAgLTEzNDQsNiArMTUxNiw5IEBACiAJY2FzZSAxOgogCQllbnRyeS0+ZWR4ICY9IGt2bV9zdXBwb3J0ZWRfd29yZDBfeDg2X2ZlYXR1cmVzOwogCQllbnRyeS0+ZWN4ICY9IGt2bV9zdXBwb3J0ZWRfd29yZDRfeDg2X2ZlYXR1cmVzOworCQkvKiB3ZSBzdXBwb3J0IHgyYXBpYyBlbXVsYXRpb24gZXZlbiBpZiBob3N0IGRvZXMgbm90IHN1cHBvcnQKKwkJICogaXQgc2luY2Ugd2UgZW11bGF0ZSB4MmFwaWMgaW4gc29mdHdhcmUgKi8KKwkJZW50cnktPmVjeCB8PSBGKFgyQVBJQyk7CiAJCWJyZWFrOwogCS8qIGZ1bmN0aW9uIDIgZW50cmllcyBhcmUgU1RBVEVGVUwuIFRoYXQgaXMsIHJlcGVhdGVkIGNwdWlkIGNvbW1hbmRzCiAJICogbWF5IHJldHVybiBkaWZmZXJlbnQgdmFsdWVzLiBUaGlzIGZvcmNlcyB1cyB0byBnZXRfY3B1KCkgYmVmb3JlCkBAIC0xNDM1LDYgKzE2MTAsMTAgQEAKIAlmb3IgKGZ1bmMgPSAweDgwMDAwMDAxOyBmdW5jIDw9IGxpbWl0ICYmIG5lbnQgPCBjcHVpZC0+bmVudDsgKytmdW5jKQogCQlkb19jcHVpZF9lbnQoJmNwdWlkX2VudHJpZXNbbmVudF0sIGZ1bmMsIDAsCiAJCQkgICAgICZuZW50LCBjcHVpZC0+bmVudCk7CisJciA9IC1FMkJJRzsKKwlpZiAobmVudCA+PSBjcHVpZC0+bmVudCkKKwkJZ290byBvdXRfZnJlZTsKKwogCXIgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIoZW50cmllcywgY3B1aWRfZW50cmllcywKIAkJCSBuZW50ICogc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSkpCkBAIC0xNDY0LDYgKzE2NDMsNyBAQAogCXZjcHVfbG9hZCh2Y3B1KTsKIAltZW1jcHkodmNwdS0+YXJjaC5hcGljLT5yZWdzLCBzLT5yZWdzLCBzaXplb2YgKnMpOwogCWt2bV9hcGljX3Bvc3Rfc3RhdGVfcmVzdG9yZSh2Y3B1KTsKKwl1cGRhdGVfY3I4X2ludGVyY2VwdCh2Y3B1KTsKIAl2Y3B1X3B1dCh2Y3B1KTsKIAogCXJldHVybiAwOwpAQCAtMTUwMyw2ICsxNjgzLDgwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldHVwX21jZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCXU2NCBtY2dfY2FwKQoreworCWludCByOworCXVuc2lnbmVkIGJhbmtfbnVtID0gbWNnX2NhcCAmIDB4ZmYsIGJhbms7CisKKwlyID0gLUVJTlZBTDsKKwlpZiAoIWJhbmtfbnVtKQorCQlnb3RvIG91dDsKKwlpZiAobWNnX2NhcCAmIH4oS1ZNX01DRV9DQVBfU1VQUE9SVEVEIHwgMHhmZiB8IDB4ZmYwMDAwKSkKKwkJZ290byBvdXQ7CisJciA9IDA7CisJdmNwdS0+YXJjaC5tY2dfY2FwID0gbWNnX2NhcDsKKwkvKiBJbml0IElBMzJfTUNHX0NUTCB0byBhbGwgMXMgKi8KKwlpZiAobWNnX2NhcCAmIE1DR19DVExfUCkKKwkJdmNwdS0+YXJjaC5tY2dfY3RsID0gfih1NjQpMDsKKwkvKiBJbml0IElBMzJfTUNpX0NUTCB0byBhbGwgMXMgKi8KKwlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgYmFua19udW07IGJhbmsrKykKKwkJdmNwdS0+YXJjaC5tY2VfYmFua3NbYmFuayo0XSA9IH4odTY0KTA7CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfeDg2X3NldF9tY2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgICAgIHN0cnVjdCBrdm1feDg2X21jZSAqbWNlKQoreworCXU2NCBtY2dfY2FwID0gdmNwdS0+YXJjaC5tY2dfY2FwOworCXVuc2lnbmVkIGJhbmtfbnVtID0gbWNnX2NhcCAmIDB4ZmY7CisJdTY0ICpiYW5rcyA9IHZjcHUtPmFyY2gubWNlX2JhbmtzOworCisJaWYgKG1jZS0+YmFuayA+PSBiYW5rX251bSB8fCAhKG1jZS0+c3RhdHVzICYgTUNJX1NUQVRVU19WQUwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIGlmIElBMzJfTUNHX0NUTCBpcyBub3QgYWxsIDFzLCB0aGUgdW5jb3JyZWN0ZWQgZXJyb3IKKwkgKiByZXBvcnRpbmcgaXMgZGlzYWJsZWQKKwkgKi8KKwlpZiAoKG1jZS0+c3RhdHVzICYgTUNJX1NUQVRVU19VQykgJiYgKG1jZ19jYXAgJiBNQ0dfQ1RMX1ApICYmCisJICAgIHZjcHUtPmFyY2gubWNnX2N0bCAhPSB+KHU2NCkwKQorCQlyZXR1cm4gMDsKKwliYW5rcyArPSA0ICogbWNlLT5iYW5rOworCS8qCisJICogaWYgSUEzMl9NQ2lfQ1RMIGlzIG5vdCBhbGwgMXMsIHRoZSB1bmNvcnJlY3RlZCBlcnJvcgorCSAqIHJlcG9ydGluZyBpcyBkaXNhYmxlZCBmb3IgdGhlIGJhbmsKKwkgKi8KKwlpZiAoKG1jZS0+c3RhdHVzICYgTUNJX1NUQVRVU19VQykgJiYgYmFua3NbMF0gIT0gfih1NjQpMCkKKwkJcmV0dXJuIDA7CisJaWYgKG1jZS0+c3RhdHVzICYgTUNJX1NUQVRVU19VQykgeworCQlpZiAoKHZjcHUtPmFyY2gubWNnX3N0YXR1cyAmIE1DR19TVEFUVVNfTUNJUCkgfHwKKwkJICAgICEodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X01DRSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJrdm06IHNldF9tY2U6ICIKKwkJCSAgICAgICAiaW5qZWN0cyBtY2UgZXhjZXB0aW9uIHdoaWxlICIKKwkJCSAgICAgICAicHJldmlvdXMgb25lIGlzIGluIHByb2dyZXNzIVxuIik7CisJCQlzZXRfYml0KEtWTV9SRVFfVFJJUExFX0ZBVUxULCAmdmNwdS0+cmVxdWVzdHMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKGJhbmtzWzFdICYgTUNJX1NUQVRVU19WQUwpCisJCQltY2UtPnN0YXR1cyB8PSBNQ0lfU1RBVFVTX09WRVI7CisJCWJhbmtzWzJdID0gbWNlLT5hZGRyOworCQliYW5rc1szXSA9IG1jZS0+bWlzYzsKKwkJdmNwdS0+YXJjaC5tY2dfc3RhdHVzID0gbWNlLT5tY2dfc3RhdHVzOworCQliYW5rc1sxXSA9IG1jZS0+c3RhdHVzOworCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIE1DX1ZFQ1RPUik7CisJfSBlbHNlIGlmICghKGJhbmtzWzFdICYgTUNJX1NUQVRVU19WQUwpCisJCSAgIHx8ICEoYmFua3NbMV0gJiBNQ0lfU1RBVFVTX1VDKSkgeworCQlpZiAoYmFua3NbMV0gJiBNQ0lfU1RBVFVTX1ZBTCkKKwkJCW1jZS0+c3RhdHVzIHw9IE1DSV9TVEFUVVNfT1ZFUjsKKwkJYmFua3NbMl0gPSBtY2UtPmFkZHI7CisJCWJhbmtzWzNdID0gbWNlLT5taXNjOworCQliYW5rc1sxXSA9IG1jZS0+c3RhdHVzOworCX0gZWxzZQorCQliYW5rc1sxXSB8PSBNQ0lfU1RBVFVTX09WRVI7CisJcmV0dXJuIDA7Cit9CisKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMTYzNiw2ICsxODkwLDI0IEBACiAJCWt2bV9sYXBpY19zZXRfdmFwaWNfYWRkcih2Y3B1LCB2YS52YXBpY19hZGRyKTsKIAkJYnJlYWs7CiAJfQorCWNhc2UgS1ZNX1g4Nl9TRVRVUF9NQ0U6IHsKKwkJdTY0IG1jZ19jYXA7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbWNnX2NhcCwgYXJncCwgc2l6ZW9mIG1jZ19jYXApKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fdmNwdV9pb2N0bF94ODZfc2V0dXBfbWNlKHZjcHUsIG1jZ19jYXApOworCQlicmVhazsKKwl9CisJY2FzZSBLVk1fWDg2X1NFVF9NQ0U6IHsKKwkJc3RydWN0IGt2bV94ODZfbWNlIG1jZTsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtY2UsIGFyZ3AsIHNpemVvZiBtY2UpKQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fdmNwdV9pb2N0bF94ODZfc2V0X21jZSh2Y3B1LCAmbWNlKTsKKwkJYnJlYWs7CisJfQogCWRlZmF1bHQ6CiAJCXIgPSAtRUlOVkFMOwogCX0KQEAgLTE2NTQsNiArMTkyNiwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3NldF9pZGVudGl0eV9tYXBfYWRkcihzdHJ1Y3Qga3ZtICprdm0sCisJCQkJCSAgICAgIHU2NCBpZGVudF9hZGRyKQoreworCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfbWFwX2FkZHIgPSBpZGVudF9hZGRyOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfbnJfbW11X3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkJICB1MzIga3ZtX25yX21tdV9wYWdlcykKIHsKQEAgLTE3NzUsMTkgKzIwNTQsMjUgQEAKIAlyID0gMDsKIAlzd2l0Y2ggKGNoaXAtPmNoaXBfaWQpIHsKIAljYXNlIEtWTV9JUlFDSElQX1BJQ19NQVNURVI6CisJCXNwaW5fbG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CiAJCW1lbWNweSgmcGljX2lycWNoaXAoa3ZtKS0+cGljc1swXSwKIAkJCSZjaGlwLT5jaGlwLnBpYywKIAkJCXNpemVvZihzdHJ1Y3Qga3ZtX3BpY19zdGF0ZSkpOworCQlzcGluX3VubG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0lSUUNISVBfUElDX1NMQVZFOgorCQlzcGluX2xvY2soJnBpY19pcnFjaGlwKGt2bSktPmxvY2spOwogCQltZW1jcHkoJnBpY19pcnFjaGlwKGt2bSktPnBpY3NbMV0sCiAJCQkmY2hpcC0+Y2hpcC5waWMsCiAJCQlzaXplb2Yoc3RydWN0IGt2bV9waWNfc3RhdGUpKTsKKwkJc3Bpbl91bmxvY2soJnBpY19pcnFjaGlwKGt2bSktPmxvY2spOwogCQlicmVhazsKIAljYXNlIEtWTV9JUlFDSElQX0lPQVBJQzoKKwkJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJCW1lbWNweShpb2FwaWNfaXJxY2hpcChrdm0pLAogCQkJJmNoaXAtPmNoaXAuaW9hcGljLAogCQkJc2l6ZW9mKHN0cnVjdCBrdm1faW9hcGljX3N0YXRlKSk7CisJCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAtRUlOVkFMOwpAQCAtMTgwMSw3ICsyMDg2LDkgQEAKIHsKIAlpbnQgciA9IDA7CiAKKwltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCW1lbWNweShwcywgJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUsIHNpemVvZihzdHJ1Y3Qga3ZtX3BpdF9zdGF0ZSkpOworCW11dGV4X3VubG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMTgwOSw4ICsyMDk2LDM5IEBACiB7CiAJaW50IHIgPSAwOwogCisJbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAltZW1jcHkoJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUsIHBzLCBzaXplb2Yoc3RydWN0IGt2bV9waXRfc3RhdGUpKTsKLQlrdm1fcGl0X2xvYWRfY291bnQoa3ZtLCAwLCBwcy0+Y2hhbm5lbHNbMF0uY291bnQpOworCWt2bV9waXRfbG9hZF9jb3VudChrdm0sIDAsIHBzLT5jaGFubmVsc1swXS5jb3VudCwgMCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfcGl0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcGl0X3N0YXRlMiAqcHMpCit7CisJaW50IHIgPSAwOworCisJbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKKwltZW1jcHkocHMtPmNoYW5uZWxzLCAma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5jaGFubmVscywKKwkJc2l6ZW9mKHBzLT5jaGFubmVscykpOworCXBzLT5mbGFncyA9IGt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuZmxhZ3M7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9zZXRfcGl0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcGl0X3N0YXRlMiAqcHMpCit7CisJaW50IHIgPSAwLCBzdGFydCA9IDA7CisJdTMyIHByZXZfbGVnYWN5LCBjdXJfbGVnYWN5OworCW11dGV4X2xvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CisJcHJldl9sZWdhY3kgPSBrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmZsYWdzICYgS1ZNX1BJVF9GTEFHU19IUEVUX0xFR0FDWTsKKwljdXJfbGVnYWN5ID0gcHMtPmZsYWdzICYgS1ZNX1BJVF9GTEFHU19IUEVUX0xFR0FDWTsKKwlpZiAoIXByZXZfbGVnYWN5ICYmIGN1cl9sZWdhY3kpCisJCXN0YXJ0ID0gMTsKKwltZW1jcHkoJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUuY2hhbm5lbHMsICZwcy0+Y2hhbm5lbHMsCisJICAgICAgIHNpemVvZihrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzKSk7CisJa3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5mbGFncyA9IHBzLT5mbGFnczsKKwlrdm1fcGl0X2xvYWRfY291bnQoa3ZtLCAwLCBrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmNoYW5uZWxzWzBdLmNvdW50LCBzdGFydCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCXJldHVybiByOwogfQogCkBAIC0xODE5LDcgKzIxMzcsOSBAQAogewogCWlmICgha3ZtLT5hcmNoLnZwaXQpCiAJCXJldHVybiAtRU5YSU87CisJbXV0ZXhfbG9jaygma3ZtLT5hcmNoLnZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAlrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5yZWluamVjdCA9IGNvbnRyb2wtPnBpdF9yZWluamVjdDsKKwltdXRleF91bmxvY2soJmt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUubG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4NDUsNyArMjE2NSw2IEBACiAJCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CiAJCWt2bV9tbXVfc2xvdF9yZW1vdmVfd3JpdGVfYWNjZXNzKGt2bSwgbG9nLT5zbG90KTsKIAkJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwotCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKIAkJbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzW2xvZy0+c2xvdF07CiAJCW4gPSBBTElHTihtZW1zbG90LT5ucGFnZXMsIEJJVFNfUEVSX0xPTkcpIC8gODsKIAkJbWVtc2V0KG1lbXNsb3QtPmRpcnR5X2JpdG1hcCwgMCwgbik7CkBAIC0xODY5LDcgKzIxODgsOSBAQAogCSAqLwogCXVuaW9uIHsKIAkJc3RydWN0IGt2bV9waXRfc3RhdGUgcHM7CisJCXN0cnVjdCBrdm1fcGl0X3N0YXRlMiBwczI7CiAJCXN0cnVjdCBrdm1fbWVtb3J5X2FsaWFzIGFsaWFzOworCQlzdHJ1Y3Qga3ZtX3BpdF9jb25maWcgcGl0X2NvbmZpZzsKIAl9IHU7CiAKIAlzd2l0Y2ggKGlvY3RsKSB7CkBAIC0xODc4LDYgKzIxOTksMTcgQEAKIAkJaWYgKHIgPCAwKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOworCWNhc2UgS1ZNX1NFVF9JREVOVElUWV9NQVBfQUREUjogeworCQl1NjQgaWRlbnRfYWRkcjsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZGVudF9hZGRyLCBhcmdwLCBzaXplb2YgaWRlbnRfYWRkcikpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV92bV9pb2N0bF9zZXRfaWRlbnRpdHlfbWFwX2FkZHIoa3ZtLCBpZGVudF9hZGRyKTsKKwkJaWYgKHIgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KIAljYXNlIEtWTV9TRVRfTUVNT1JZX1JFR0lPTjogewogCQlzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24ga3ZtX21lbTsKIAkJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiBrdm1fdXNlcnNwYWNlX21lbTsKQEAgLTE5MzAsMTYgKzIyNjIsMjQgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIEtWTV9DUkVBVEVfUElUOgotCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCQl1LnBpdF9jb25maWcuZmxhZ3MgPSBLVk1fUElUX1NQRUFLRVJfRFVNTVk7CisJCWdvdG8gY3JlYXRlX3BpdDsKKwljYXNlIEtWTV9DUkVBVEVfUElUMjoKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdS5waXRfY29uZmlnLCBhcmdwLAorCQkJCSAgIHNpemVvZihzdHJ1Y3Qga3ZtX3BpdF9jb25maWcpKSkKKwkJCWdvdG8gb3V0OworCWNyZWF0ZV9waXQ6CisJCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAJCXIgPSAtRUVYSVNUOwogCQlpZiAoa3ZtLT5hcmNoLnZwaXQpCiAJCQlnb3RvIGNyZWF0ZV9waXRfdW5sb2NrOwogCQlyID0gLUVOT01FTTsKLQkJa3ZtLT5hcmNoLnZwaXQgPSBrdm1fY3JlYXRlX3BpdChrdm0pOworCQlrdm0tPmFyY2gudnBpdCA9IGt2bV9jcmVhdGVfcGl0KGt2bSwgdS5waXRfY29uZmlnLmZsYWdzKTsKIAkJaWYgKGt2bS0+YXJjaC52cGl0KQogCQkJciA9IDA7CiAJY3JlYXRlX3BpdF91bmxvY2s6Ci0JCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0lSUV9MSU5FX1NUQVRVUzoKIAljYXNlIEtWTV9JUlFfTElORTogewpAQCAtMTk1MCwxMCArMjI5MCwxMCBAQAogCQkJZ290byBvdXQ7CiAJCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pKSB7CiAJCQlfX3MzMiBzdGF0dXM7Ci0JCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCQkJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJCQlzdGF0dXMgPSBrdm1fc2V0X2lycShrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwKIAkJCQkJaXJxX2V2ZW50LmlycSwgaXJxX2V2ZW50LmxldmVsKTsKLQkJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiAJCQlpZiAoaW9jdGwgPT0gS1ZNX0lSUV9MSU5FX1NUQVRVUykgewogCQkJCWlycV9ldmVudC5zdGF0dXMgPSBzdGF0dXM7CiAJCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaXJxX2V2ZW50LApAQCAtMjA0Miw2ICsyMzgyLDMyIEBACiAJCXIgPSAwOwogCQlicmVhazsKIAl9CisJY2FzZSBLVk1fR0VUX1BJVDI6IHsKKwkJciA9IC1FTlhJTzsKKwkJaWYgKCFrdm0tPmFyY2gudnBpdCkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX2dldF9waXQyKGt2bSwgJnUucHMyKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnUucHMyLCBzaXplb2YodS5wczIpKSkKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX1NFVF9QSVQyOiB7CisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnUucHMyLCBhcmdwLCBzaXplb2YodS5wczIpKSkKKwkJCWdvdG8gb3V0OworCQlyID0gLUVOWElPOworCQlpZiAoIWt2bS0+YXJjaC52cGl0KQorCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fdm1faW9jdGxfc2V0X3BpdDIoa3ZtLCAmdS5wczIpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQogCWNhc2UgS1ZNX1JFSU5KRUNUX0NPTlRST0w6IHsKIAkJc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sIGNvbnRyb2w7CiAJCXIgPSAgLUVGQVVMVDsKQEAgLTIwNzUsMzUgKzI0NDEsMjMgQEAKIAludW1fbXNyc190b19zYXZlID0gajsKIH0KIAotLyoKLSAqIE9ubHkgYXBpYyBuZWVkIGFuIE1NSU8gZGV2aWNlIGhvb2ssIHNvIHNob3J0Y3V0IG5vdy4uCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdmNwdV9maW5kX3BlcnZjcHVfZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJCWdwYV90IGFkZHIsIGludCBsZW4sCi0JCQkJCQlpbnQgaXNfd3JpdGUpCitzdGF0aWMgaW50IHZjcHVfbW1pb193cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGFkZHIsIGludCBsZW4sCisJCQkgICBjb25zdCB2b2lkICp2KQogewotCXN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXY7CisJaWYgKHZjcHUtPmFyY2guYXBpYyAmJgorCSAgICAha3ZtX2lvZGV2aWNlX3dyaXRlKCZ2Y3B1LT5hcmNoLmFwaWMtPmRldiwgYWRkciwgbGVuLCB2KSkKKwkJcmV0dXJuIDA7CiAKLQlpZiAodmNwdS0+YXJjaC5hcGljKSB7Ci0JCWRldiA9ICZ2Y3B1LT5hcmNoLmFwaWMtPmRldjsKLQkJaWYgKGRldi0+aW5fcmFuZ2UoZGV2LCBhZGRyLCBsZW4sIGlzX3dyaXRlKSkKLQkJCXJldHVybiBkZXY7Ci0JfQotCXJldHVybiBOVUxMOworCXJldHVybiBrdm1faW9fYnVzX3dyaXRlKCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBhZGRyLCBsZW4sIHYpOwogfQogCi0KLXN0YXRpYyBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdmNwdV9maW5kX21taW9fZGV2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkJCWdwYV90IGFkZHIsIGludCBsZW4sCi0JCQkJCQlpbnQgaXNfd3JpdGUpCitzdGF0aWMgaW50IHZjcHVfbW1pb19yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZCAqdikKIHsKLQlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2OworCWlmICh2Y3B1LT5hcmNoLmFwaWMgJiYKKwkgICAgIWt2bV9pb2RldmljZV9yZWFkKCZ2Y3B1LT5hcmNoLmFwaWMtPmRldiwgYWRkciwgbGVuLCB2KSkKKwkJcmV0dXJuIDA7CiAKLQlkZXYgPSB2Y3B1X2ZpbmRfcGVydmNwdV9kZXYodmNwdSwgYWRkciwgbGVuLCBpc193cml0ZSk7Ci0JaWYgKGRldiA9PSBOVUxMKQotCQlkZXYgPSBrdm1faW9fYnVzX2ZpbmRfZGV2KCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBhZGRyLCBsZW4sCi0JCQkJCSAgaXNfd3JpdGUpOwotCXJldHVybiBkZXY7CisJcmV0dXJuIGt2bV9pb19idXNfcmVhZCgmdmNwdS0+a3ZtLT5tbWlvX2J1cywgYWRkciwgbGVuLCB2KTsKIH0KIAogc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLApAQCAtMjE3MiwxMSArMjUyNiwxMiBAQAogCQkJCSAgdW5zaWduZWQgaW50IGJ5dGVzLAogCQkJCSAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXN0cnVjdCBrdm1faW9fZGV2aWNlICptbWlvX2RldjsKIAlncGFfdCAgICAgICAgICAgICAgICAgZ3BhOwogCiAJaWYgKHZjcHUtPm1taW9fcmVhZF9jb21wbGV0ZWQpIHsKIAkJbWVtY3B5KHZhbCwgdmNwdS0+bW1pb19kYXRhLCBieXRlcyk7CisJCXRyYWNlX2t2bV9tbWlvKEtWTV9UUkFDRV9NTUlPX1JFQUQsIGJ5dGVzLAorCQkJICAgICAgIHZjcHUtPm1taW9fcGh5c19hZGRyLCAqKHU2NCAqKXZhbCk7CiAJCXZjcHUtPm1taW9fcmVhZF9jb21wbGV0ZWQgPSAwOwogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAl9CkBAIC0yMTk3LDE0ICsyNTUyLDEyIEBACiAJLyoKIAkgKiBJcyB0aGlzIE1NSU8gaGFuZGxlZCBsb2NhbGx5PwogCSAqLwotCW11dGV4X2xvY2soJnZjcHUtPmt2bS0+bG9jayk7Ci0JbW1pb19kZXYgPSB2Y3B1X2ZpbmRfbW1pb19kZXYodmNwdSwgZ3BhLCBieXRlcywgMCk7Ci0JaWYgKG1taW9fZGV2KSB7Ci0JCWt2bV9pb2RldmljZV9yZWFkKG1taW9fZGV2LCBncGEsIGJ5dGVzLCB2YWwpOwotCQltdXRleF91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJaWYgKCF2Y3B1X21taW9fcmVhZCh2Y3B1LCBncGEsIGJ5dGVzLCB2YWwpKSB7CisJCXRyYWNlX2t2bV9tbWlvKEtWTV9UUkFDRV9NTUlPX1JFQUQsIGJ5dGVzLCBncGEsICoodTY0ICopdmFsKTsKIAkJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiAJfQotCW11dGV4X3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKworCXRyYWNlX2t2bV9tbWlvKEtWTV9UUkFDRV9NTUlPX1JFQURfVU5TQVRJU0ZJRUQsIGJ5dGVzLCBncGEsIDApOwogCiAJdmNwdS0+bW1pb19uZWVkZWQgPSAxOwogCXZjcHUtPm1taW9fcGh5c19hZGRyID0gZ3BhOwpAQCAtMjIzMSw3ICsyNTg0LDYgQEAKIAkJCQkJICAgdW5zaWduZWQgaW50IGJ5dGVzLAogCQkJCQkgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RydWN0IGt2bV9pb19kZXZpY2UgKm1taW9fZGV2OwogCWdwYV90ICAgICAgICAgICAgICAgICBncGE7CiAKIAlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIpOwpAQCAtMjI0OSwxNyArMjYwMSwxMiBAQAogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAogbW1pbzoKKwl0cmFjZV9rdm1fbW1pbyhLVk1fVFJBQ0VfTU1JT19XUklURSwgYnl0ZXMsIGdwYSwgKih1NjQgKil2YWwpOwogCS8qCiAJICogSXMgdGhpcyBNTUlPIGhhbmRsZWQgbG9jYWxseT8KIAkgKi8KLQltdXRleF9sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOwotCW1taW9fZGV2ID0gdmNwdV9maW5kX21taW9fZGV2KHZjcHUsIGdwYSwgYnl0ZXMsIDEpOwotCWlmIChtbWlvX2RldikgewotCQlrdm1faW9kZXZpY2Vfd3JpdGUobW1pb19kZXYsIGdwYSwgYnl0ZXMsIHZhbCk7Ci0JCW11dGV4X3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKwlpZiAoIXZjcHVfbW1pb193cml0ZSh2Y3B1LCBncGEsIGJ5dGVzLCB2YWwpKQogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOwogCiAJdmNwdS0+bW1pb19uZWVkZWQgPSAxOwogCXZjcHUtPm1taW9fcGh5c19hZGRyID0gZ3BhOwpAQCAtMjI5NywxMiArMjY0NCw3IEBACiAJCQkJICAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCiAJCQkJICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Jc3RhdGljIGludCByZXBvcnRlZDsKLQotCWlmICghcmVwb3J0ZWQpIHsKLQkJcmVwb3J0ZWQgPSAxOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJrdm06IGVtdWxhdGluZyBleGNoYW5nZSBhcyB3cml0ZVxuIik7Ci0JfQorCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAia3ZtOiBlbXVsYXRpbmcgZXhjaGFuZ2UgYXMgd3JpdGVcbiIpOwogI2lmbmRlZiBDT05GSUdfWDg2XzY0CiAJLyogZ3Vlc3RzIGNtcHhjaGc4YiBoYXZlIHRvIGJlIGVtdWxhdGVkIGF0b21pY2FsbHkgKi8KIAlpZiAoYnl0ZXMgPT0gOCkgewpAQCAtMjM0OCw3ICsyNjkwLDYgQEAKIAogaW50IGVtdWxhdGVfY2x0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JS1ZNVFJBQ0VfMEQoQ0xUUywgdmNwdSwgaGFuZGxlcik7CiAJa3ZtX3g4Nl9vcHMtPnNldF9jcjAodmNwdSwgdmNwdS0+YXJjaC5jcjAgJiB+WDg2X0NSMF9UUyk7CiAJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CiB9CkBAIC0yNDI1LDcgKzI3NjYsNyBAQAogCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUodmNwdSk7CiAJdmNwdS0+YXJjaC5tbWlvX2ZhdWx0X2NyMiA9IGNyMjsKIAkvKgotCSAqIFRPRE86IGZpeCB4ODZfZW11bGF0ZS5jIHRvIHVzZSBndWVzdF9yZWFkL3dyaXRlX3JlZ2lzdGVyCisJICogVE9ETzogZml4IGVtdWxhdGUuYyB0byB1c2UgZ3Vlc3RfcmVhZC93cml0ZV9yZWdpc3RlcgogCSAqIGluc3RlYWQgb2YgZGlyZWN0IC0+cmVncyBhY2Nlc3NlcywgY2FuIHNhdmUgaHVuZHJlZCBjeWNsZXMKIAkgKiBvbiBJbnRlbCBmb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgZG9uJ3QgcmVhZC9jaGFuZ2UgUlNQLCBmb3IKIAkgKiBmb3IgZXhhbXBsZS4KQEAgLTI0NDksMTQgKzI3OTAsMzMgQEAKIAogCQlyID0geDg2X2RlY29kZV9pbnNuKCZ2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dCwgJmVtdWxhdGVfb3BzKTsKIAotCQkvKiBSZWplY3QgdGhlIGluc3RydWN0aW9ucyBvdGhlciB0aGFuIFZNQ0FMTC9WTU1DQUxMIHdoZW4KLQkJICogdHJ5IHRvIGVtdWxhdGUgaW52YWxpZCBvcGNvZGUgKi8KKwkJLyogT25seSBhbGxvdyBlbXVsYXRpb24gb2Ygc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIG9uICNVRAorCQkgKiAobmFtZWx5IFZNTUNBTEwsIHN5c2VudGVyLCBzeXNleGl0LCBzeXNjYWxsKSovCiAJCWMgPSAmdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQuZGVjb2RlOwotCQlpZiAoKGVtdWxhdGlvbl90eXBlICYgRU1VTFRZUEVfVFJBUF9VRCkgJiYKLQkJICAgICghKGMtPnR3b2J5dGUgJiYgYy0+YiA9PSAweDAxICYmCi0JCSAgICAgIChjLT5tb2RybV9yZWcgPT0gMCB8fCBjLT5tb2RybV9yZWcgPT0gMykgJiYKLQkJICAgICAgIGMtPm1vZHJtX21vZCA9PSAzICYmIGMtPm1vZHJtX3JtID09IDEpKSkKLQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCWlmIChlbXVsYXRpb25fdHlwZSAmIEVNVUxUWVBFX1RSQVBfVUQpIHsKKwkJCWlmICghYy0+dHdvYnl0ZSkKKwkJCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQkJc3dpdGNoIChjLT5iKSB7CisJCQljYXNlIDB4MDE6IC8qIFZNTUNBTEwgKi8KKwkJCQlpZiAoYy0+bW9kcm1fbW9kICE9IDMgfHwgYy0+bW9kcm1fcm0gIT0gMSkKKwkJCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgzNDogLyogc3lzZW50ZXIgKi8KKwkJCWNhc2UgMHgzNTogLyogc3lzZXhpdCAqLworCQkJCWlmIChjLT5tb2RybV9tb2QgIT0gMCB8fCBjLT5tb2RybV9ybSAhPSAwKQorCQkJCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQkJCWJyZWFrOworCQkJY2FzZSAweDA1OiAvKiBzeXNjYWxsICovCisJCQkJaWYgKGMtPm1vZHJtX21vZCAhPSAwIHx8IGMtPm1vZHJtX3JtICE9IDApCisJCQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiBFTVVMQVRFX0ZBSUw7CisJCQl9CisKKwkJCWlmICghKGMtPm1vZHJtX3JlZyA9PSAwIHx8IGMtPm1vZHJtX3JlZyA9PSAzKSkKKwkJCQlyZXR1cm4gRU1VTEFURV9GQUlMOworCQl9CiAKIAkJKyt2Y3B1LT5zdGF0Lmluc25fZW11bGF0aW9uOwogCQlpZiAocikgIHsKQEAgLTI1NzYsNTIgKzI5MzYsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQga2VybmVsX3BpbyhzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqcGlvX2RldiwKLQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJICAgICAgIHZvaWQgKnBkKQorc3RhdGljIGludCBrZXJuZWxfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqcGQpCiB7CiAJLyogVE9ETzogU3RyaW5nIEkvTyBmb3IgaW4ga2VybmVsIGRldmljZSAqLworCWludCByOwogCi0JbXV0ZXhfbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKIAlpZiAodmNwdS0+YXJjaC5waW8uaW4pCi0JCWt2bV9pb2RldmljZV9yZWFkKHBpb19kZXYsIHZjcHUtPmFyY2gucGlvLnBvcnQsCi0JCQkJICB2Y3B1LT5hcmNoLnBpby5zaXplLAotCQkJCSAgcGQpOworCQlyID0ga3ZtX2lvX2J1c19yZWFkKCZ2Y3B1LT5rdm0tPnBpb19idXMsIHZjcHUtPmFyY2gucGlvLnBvcnQsCisJCQkJICAgIHZjcHUtPmFyY2gucGlvLnNpemUsIHBkKTsKIAllbHNlCi0JCWt2bV9pb2RldmljZV93cml0ZShwaW9fZGV2LCB2Y3B1LT5hcmNoLnBpby5wb3J0LAotCQkJCSAgIHZjcHUtPmFyY2gucGlvLnNpemUsCi0JCQkJICAgcGQpOwotCW11dGV4X3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKKwkJciA9IGt2bV9pb19idXNfd3JpdGUoJnZjcHUtPmt2bS0+cGlvX2J1cywgdmNwdS0+YXJjaC5waW8ucG9ydCwKKwkJCQkgICAgIHZjcHUtPmFyY2gucGlvLnNpemUsIHBkKTsKKwlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgcGlvX3N0cmluZ193cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqcGlvX2RldiwKLQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBwaW9fc3RyaW5nX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0ICppbyA9ICZ2Y3B1LT5hcmNoLnBpbzsKIAl2b2lkICpwZCA9IHZjcHUtPmFyY2gucGlvX2RhdGE7Ci0JaW50IGk7CisJaW50IGksIHIgPSAwOwogCi0JbXV0ZXhfbG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgaW8tPmN1cl9jb3VudDsgaSsrKSB7Ci0JCWt2bV9pb2RldmljZV93cml0ZShwaW9fZGV2LCBpby0+cG9ydCwKLQkJCQkgICBpby0+c2l6ZSwKLQkJCQkgICBwZCk7CisJCWlmIChrdm1faW9fYnVzX3dyaXRlKCZ2Y3B1LT5rdm0tPnBpb19idXMsCisJCQkJICAgICBpby0+cG9ydCwgaW8tPnNpemUsIHBkKSkgeworCQkJciA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCX0KIAkJcGQgKz0gaW8tPnNpemU7CiAJfQotCW11dGV4X3VubG9jaygmdmNwdS0+a3ZtLT5sb2NrKTsKLX0KLQotc3RhdGljIHN0cnVjdCBrdm1faW9fZGV2aWNlICp2Y3B1X2ZpbmRfcGlvX2RldihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJCSAgICAgICBncGFfdCBhZGRyLCBpbnQgbGVuLAotCQkJCQkgICAgICAgaW50IGlzX3dyaXRlKQotewotCXJldHVybiBrdm1faW9fYnVzX2ZpbmRfZGV2KCZ2Y3B1LT5rdm0tPnBpb19idXMsIGFkZHIsIGxlbiwgaXNfd3JpdGUpOworCXJldHVybiByOwogfQogCiBpbnQga3ZtX2VtdWxhdGVfcGlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKnJ1biwgaW50IGluLAogCQkgIGludCBzaXplLCB1bnNpZ25lZCBwb3J0KQogewotCXN0cnVjdCBrdm1faW9fZGV2aWNlICpwaW9fZGV2OwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJdmNwdS0+cnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0lPOwpAQCAtMjYzNSwxOSArMjk4MywxMyBAQAogCXZjcHUtPmFyY2gucGlvLmRvd24gPSAwOwogCXZjcHUtPmFyY2gucGlvLnJlcCA9IDA7CiAKLQlpZiAodmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fSU4pCi0JCUtWTVRSQUNFXzJEKElPX1JFQUQsIHZjcHUsIHZjcHUtPnJ1bi0+aW8ucG9ydCwgKHUzMilzaXplLAotCQkJICAgIGhhbmRsZXIpOwotCWVsc2UKLQkJS1ZNVFJBQ0VfMkQoSU9fV1JJVEUsIHZjcHUsIHZjcHUtPnJ1bi0+aW8ucG9ydCwgKHUzMilzaXplLAotCQkJICAgIGhhbmRsZXIpOworCXRyYWNlX2t2bV9waW8odmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fT1VULCBwb3J0LAorCQkgICAgICBzaXplLCAxKTsKIAogCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOwogCW1lbWNweSh2Y3B1LT5hcmNoLnBpb19kYXRhLCAmdmFsLCA0KTsKIAotCXBpb19kZXYgPSB2Y3B1X2ZpbmRfcGlvX2Rldih2Y3B1LCBwb3J0LCBzaXplLCAhaW4pOwotCWlmIChwaW9fZGV2KSB7Ci0JCWtlcm5lbF9waW8ocGlvX2RldiwgdmNwdSwgdmNwdS0+YXJjaC5waW9fZGF0YSk7CisJaWYgKCFrZXJuZWxfcGlvKHZjcHUsIHZjcHUtPmFyY2gucGlvX2RhdGEpKSB7CiAJCWNvbXBsZXRlX3Bpbyh2Y3B1KTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMjY2MSw3ICszMDAzLDYgQEAKIHsKIAl1bnNpZ25lZCBub3csIGluX3BhZ2U7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGt2bV9pb19kZXZpY2UgKnBpb19kZXY7CiAKIAl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU87CiAJdmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPSBpbiA/IEtWTV9FWElUX0lPX0lOIDogS1ZNX0VYSVRfSU9fT1VUOwpAQCAtMjY3NCwxMiArMzAxNSw4IEBACiAJdmNwdS0+YXJjaC5waW8uZG93biA9IGRvd247CiAJdmNwdS0+YXJjaC5waW8ucmVwID0gcmVwOwogCi0JaWYgKHZjcHUtPnJ1bi0+aW8uZGlyZWN0aW9uID09IEtWTV9FWElUX0lPX0lOKQotCQlLVk1UUkFDRV8yRChJT19SRUFELCB2Y3B1LCB2Y3B1LT5ydW4tPmlvLnBvcnQsICh1MzIpc2l6ZSwKLQkJCSAgICBoYW5kbGVyKTsKLQllbHNlCi0JCUtWTVRSQUNFXzJEKElPX1dSSVRFLCB2Y3B1LCB2Y3B1LT5ydW4tPmlvLnBvcnQsICh1MzIpc2l6ZSwKLQkJCSAgICBoYW5kbGVyKTsKKwl0cmFjZV9rdm1fcGlvKHZjcHUtPnJ1bi0+aW8uZGlyZWN0aW9uID09IEtWTV9FWElUX0lPX09VVCwgcG9ydCwKKwkJICAgICAgc2l6ZSwgY291bnQpOwogCiAJaWYgKCFjb3VudCkgewogCQlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKQEAgLTI3MDksOSArMzA0Niw2IEBACiAKIAl2Y3B1LT5hcmNoLnBpby5ndWVzdF9ndmEgPSBhZGRyZXNzOwogCi0JcGlvX2RldiA9IHZjcHVfZmluZF9waW9fZGV2KHZjcHUsIHBvcnQsCi0JCQkJICAgIHZjcHUtPmFyY2gucGlvLmN1cl9jb3VudCwKLQkJCQkgICAgIXZjcHUtPmFyY2gucGlvLmluKTsKIAlpZiAoIXZjcHUtPmFyY2gucGlvLmluKSB7CiAJCS8qIHN0cmluZyBQSU8gd3JpdGUgKi8KIAkJcmV0ID0gcGlvX2NvcHlfZGF0YSh2Y3B1KTsKQEAgLTI3MTksMTYgKzMwNTMsMTMgQEAKIAkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQlpZiAocmV0ID09IDAgJiYgcGlvX2RldikgewotCQkJcGlvX3N0cmluZ193cml0ZShwaW9fZGV2LCB2Y3B1KTsKKwkJaWYgKHJldCA9PSAwICYmICFwaW9fc3RyaW5nX3dyaXRlKHZjcHUpKSB7CiAJCQljb21wbGV0ZV9waW8odmNwdSk7CiAJCQlpZiAodmNwdS0+YXJjaC5waW8uY291bnQgPT0gMCkKIAkJCQlyZXQgPSAxOwogCQl9Ci0JfSBlbHNlIGlmIChwaW9fZGV2KQotCQlwcl91bmltcGwodmNwdSwgIm5vIHN0cmluZyBwaW8gcmVhZCBzdXBwb3J0IHlldCwgIgotCQkgICAgICAgInBvcnQgJXggc2l6ZSAlZCBjb3VudCAlbGRcbiIsCi0JCQlwb3J0LCBzaXplLCBjb3VudCk7CisJfQorCS8qIG5vIHN0cmluZyBQSU8gcmVhZCBzdXBwb3J0IHlldCAqLwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI3NjEsMTAgKzMwOTIsNyBAQAogCiAJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShrdm0sICZ2bV9saXN0LCB2bV9saXN0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKLQkJCXZjcHUgPSBrdm0tPnZjcHVzW2ldOwotCQkJaWYgKCF2Y3B1KQotCQkJCWNvbnRpbnVlOworCQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKIAkJCWlmICh2Y3B1LT5jcHUgIT0gZnJlcS0+Y3B1KQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCFrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZSh2Y3B1KSkKQEAgLTI4NTcsNyArMzE4NSw2IEBACiBpbnQga3ZtX2VtdWxhdGVfaGFsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJKyt2Y3B1LT5zdGF0LmhhbHRfZXhpdHM7Ci0JS1ZNVFJBQ0VfMEQoSExULCB2Y3B1LCBoYW5kbGVyKTsKIAlpZiAoaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkgewogCQl2Y3B1LT5hcmNoLm1wX3N0YXRlID0gS1ZNX01QX1NUQVRFX0hBTFRFRDsKIAkJcmV0dXJuIDE7CkBAIC0yODg4LDcgKzMyMTUsNyBAQAogCWEyID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JEWCk7CiAJYTMgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUlNJKTsKIAotCUtWTVRSQUNFXzFEKFZNTUNBTEwsIHZjcHUsICh1MzIpbnIsIGhhbmRsZXIpOworCXRyYWNlX2t2bV9oeXBlcmNhbGwobnIsIGEwLCBhMSwgYTIsIGEzKTsKIAogCWlmICghaXNfbG9uZ19tb2RlKHZjcHUpKSB7CiAJCW5yICY9IDB4RkZGRkZGRkY7CkBAIC0yODk4LDYgKzMyMjUsMTEgQEAKIAkJYTMgJj0gMHhGRkZGRkZGRjsKIAl9CiAKKwlpZiAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwodmNwdSkgIT0gMCkgeworCQlyZXQgPSAtS1ZNX0VQRVJNOworCQlnb3RvIG91dDsKKwl9CisKIAlzd2l0Y2ggKG5yKSB7CiAJY2FzZSBLVk1fSENfVkFQSUNfUE9MTF9JUlE6CiAJCXJldCA9IDA7CkBAIC0yOTA5LDYgKzMyNDEsNyBAQAogCQlyZXQgPSAtS1ZNX0VOT1NZUzsKIAkJYnJlYWs7CiAJfQorb3V0OgogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkFYLCByZXQpOwogCSsrdmNwdS0+c3RhdC5oeXBlcmNhbGxzOwogCXJldHVybiByOwpAQCAtMjk4OCw4ICszMzIxLDYgQEAKIAkJdmNwdV9wcmludGYodmNwdSwgIiVzOiB1bmV4cGVjdGVkIGNyICV1XG4iLCBfX2Z1bmNfXywgY3IpOwogCQlyZXR1cm4gMDsKIAl9Ci0JS1ZNVFJBQ0VfM0QoQ1JfUkVBRCwgdmNwdSwgKHUzMiljciwgKHUzMil2YWx1ZSwKLQkJICAgICh1MzIpKCh1NjQpdmFsdWUgPj4gMzIpLCBoYW5kbGVyKTsKIAogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTI5OTcsOSArMzMyOCw2IEBACiB2b2lkIHJlYWxtb2RlX3NldF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjciwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCSAgICAgdW5zaWduZWQgbG9uZyAqcmZsYWdzKQogewotCUtWTVRSQUNFXzNEKENSX1dSSVRFLCB2Y3B1LCAodTMyKWNyLCAodTMyKXZhbCwKLQkJICAgICh1MzIpKCh1NjQpdmFsID4+IDMyKSwgaGFuZGxlcik7Ci0KIAlzd2l0Y2ggKGNyKSB7CiAJY2FzZSAwOgogCQlrdm1fc2V0X2NyMCh2Y3B1LCBta19jcl82NCh2Y3B1LT5hcmNoLmNyMCwgdmFsKSk7CkBAIC0zMTA5LDExICszNDM3LDExIEBACiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRYLCBiZXN0LT5lZHgpOwogCX0KIAlrdm1feDg2X29wcy0+c2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKLQlLVk1UUkFDRV81RChDUFVJRCwgdmNwdSwgZnVuY3Rpb24sCi0JCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpLAotCQkgICAgKHUzMilrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKSwKLQkJICAgICh1MzIpa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCksCi0JCSAgICAodTMyKWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpLCBoYW5kbGVyKTsKKwl0cmFjZV9rdm1fY3B1aWQoZnVuY3Rpb24sCisJCQlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkFYKSwKKwkJCWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQlgpLAorCQkJa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCksCisJCQlrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkRYKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZW11bGF0ZV9jcHVpZCk7CiAKQEAgLTMxNzksNiArMzUwNyw5IEBACiAJaWYgKCFrdm1feDg2X29wcy0+dXBkYXRlX2NyOF9pbnRlcmNlcHQpCiAJCXJldHVybjsKIAorCWlmICghdmNwdS0+YXJjaC5hcGljKQorCQlyZXR1cm47CisKIAlpZiAoIXZjcHUtPmFyY2guYXBpYy0+dmFwaWNfYWRkcikKIAkJbWF4X2lyciA9IGt2bV9sYXBpY19maW5kX2hpZ2hlc3RfaXJyKHZjcHUpOwogCWVsc2UKQEAgLTMxOTIsMTIgKzM1MjMsMTYgQEAKIAlrdm1feDg2X29wcy0+dXBkYXRlX2NyOF9pbnRlcmNlcHQodmNwdSwgdHByLCBtYXhfaXJyKTsKIH0KIAotc3RhdGljIHZvaWQgaW5qZWN0X3BlbmRpbmdfaXJxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCitzdGF0aWMgdm9pZCBpbmplY3RfcGVuZGluZ19ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewotCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQotCQlrdm1feDg2X29wcy0+c2V0X2ludGVycnVwdF9zaGFkb3codmNwdSwgMCk7Ci0KIAkvKiB0cnkgdG8gcmVpbmplY3QgcHJldmlvdXMgZXZlbnRzIGlmIGFueSAqLworCWlmICh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nKSB7CisJCWt2bV94ODZfb3BzLT5xdWV1ZV9leGNlcHRpb24odmNwdSwgdmNwdS0+YXJjaC5leGNlcHRpb24ubnIsCisJCQkJCSAgdmNwdS0+YXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUsCisJCQkJCSAgdmNwdS0+YXJjaC5leGNlcHRpb24uZXJyb3JfY29kZSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAodmNwdS0+YXJjaC5ubWlfaW5qZWN0ZWQpIHsKIAkJa3ZtX3g4Nl9vcHMtPnNldF9ubWkodmNwdSk7CiAJCXJldHVybjsKQEAgLTMyNzEsMTYgKzM2MDYsMTQgQEAKIAlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCiAJaWYgKHZjcHUtPnJlcXVlc3RzIHx8IG5lZWRfcmVzY2hlZCgpIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCXNldF9iaXQoS1ZNX1JFUV9LSUNLLCAmdmNwdS0+cmVxdWVzdHMpOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJCXByZWVtcHRfZW5hYmxlKCk7CiAJCXIgPSAxOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykKLQkJX19xdWV1ZV9leGNlcHRpb24odmNwdSk7Ci0JZWxzZQotCQlpbmplY3RfcGVuZGluZ19pcnEodmNwdSwga3ZtX3J1bik7CisJaW5qZWN0X3BlbmRpbmdfZXZlbnQodmNwdSwga3ZtX3J1bik7CiAKIAkvKiBlbmFibGUgTk1JL0lSUSB3aW5kb3cgb3BlbiBleGl0cyBpZiBuZWVkZWQgKi8KIAlpZiAodmNwdS0+YXJjaC5ubWlfcGVuZGluZykKQEAgLTMyOTcsMTQgKzM2MzAsNyBAQAogCiAJa3ZtX2d1ZXN0X2VudGVyKCk7CiAKLQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNiwgNik7Ci0JZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjcsIDcpOwogCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzKSkgewotCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzBdLCAwKTsKLQkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsxXSwgMSk7Ci0JCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMl0sIDIpOwotCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzNdLCAzKTsKLQogCQlzZXRfZGVidWdyZWcoMCwgNyk7CiAJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlswXSwgMCk7CiAJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlsxXSwgMSk7CkBAIC0zMzEyLDE4ICszNjM4LDE3IEBACiAJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlszXSwgMyk7CiAJfQogCi0JS1ZNVFJBQ0VfMEQoVk1FTlRSWSwgdmNwdSwgZW50cnlleGl0KTsKKwl0cmFjZV9rdm1fZW50cnkodmNwdS0+dmNwdV9pZCk7CiAJa3ZtX3g4Nl9vcHMtPnJ1bih2Y3B1LCBrdm1fcnVuKTsKIAotCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzKSkgewotCQlzZXRfZGVidWdyZWcoMCwgNyk7Ci0JCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMF0sIDApOwotCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzFdLCAxKTsKLQkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsyXSwgMik7Ci0JCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbM10sIDMpOworCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGX0RFQlVHKSkpIHsKKwkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzAsIDApOworCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnMSwgMSk7CisJCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWcyLCAyKTsKKwkJc2V0X2RlYnVncmVnKGN1cnJlbnQtPnRocmVhZC5kZWJ1Z3JlZzMsIDMpOworCQlzZXRfZGVidWdyZWcoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnNiwgNik7CisJCXNldF9kZWJ1Z3JlZyhjdXJyZW50LT50aHJlYWQuZGVidWdyZWc3LCA3KTsKIAl9Ci0Jc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjYsIDYpOwotCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI3LCA3KTsKIAogCXNldF9iaXQoS1ZNX1JFUV9LSUNLLCAmdmNwdS0+cmVxdWVzdHMpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTM2NTMsMTEgKzM5NzgsOCBAQAogc3RhdGljIHZvaWQgc2VnX2Rlc2N0X3RvX2t2bV9kZXNjdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKnNlZ19kZXNjLCB1MTYgc2VsZWN0b3IsCiAJCQkJICAgc3RydWN0IGt2bV9zZWdtZW50ICprdm1fZGVzY3QpCiB7Ci0Ja3ZtX2Rlc2N0LT5iYXNlID0gc2VnX2Rlc2MtPmJhc2UwOwotCWt2bV9kZXNjdC0+YmFzZSB8PSBzZWdfZGVzYy0+YmFzZTEgPDwgMTY7Ci0Ja3ZtX2Rlc2N0LT5iYXNlIHw9IHNlZ19kZXNjLT5iYXNlMiA8PCAyNDsKLQlrdm1fZGVzY3QtPmxpbWl0ID0gc2VnX2Rlc2MtPmxpbWl0MDsKLQlrdm1fZGVzY3QtPmxpbWl0IHw9IHNlZ19kZXNjLT5saW1pdCA8PCAxNjsKKwlrdm1fZGVzY3QtPmJhc2UgPSBnZXRfZGVzY19iYXNlKHNlZ19kZXNjKTsKKwlrdm1fZGVzY3QtPmxpbWl0ID0gZ2V0X2Rlc2NfbGltaXQoc2VnX2Rlc2MpOwogCWlmIChzZWdfZGVzYy0+ZykgewogCQlrdm1fZGVzY3QtPmxpbWl0IDw8PSAxMjsKIAkJa3ZtX2Rlc2N0LT5saW1pdCB8PSAweGZmZjsKQEAgLTM3MDEsNyArNDAyMyw2IEBACiBzdGF0aWMgaW50IGxvYWRfZ3Vlc3Rfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLAogCQkJCQkgc3RydWN0IGRlc2Nfc3RydWN0ICpzZWdfZGVzYykKIHsKLQlncGFfdCBncGE7CiAJc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgZHRhYmxlOwogCXUxNiBpbmRleCA9IHNlbGVjdG9yID4+IDM7CiAKQEAgLTM3MTEsMTYgKzQwMzIsMTMgQEAKIAkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIEdQX1ZFQ1RPUiwgc2VsZWN0b3IgJiAweGZmZmMpOwogCQlyZXR1cm4gMTsKIAl9Ci0JZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBkdGFibGUuYmFzZSk7Ci0JZ3BhICs9IGluZGV4ICogODsKLQlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIHNlZ19kZXNjLCA4KTsKKwlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydChkdGFibGUuYmFzZSArIGluZGV4KjgsIHNlZ19kZXNjLCBzaXplb2YoKnNlZ19kZXNjKSwgdmNwdSk7CiB9CiAKIC8qIGFsbG93ZWQganVzdCBmb3IgOCBieXRlcyBzZWdtZW50cyAqLwogc3RhdGljIGludCBzYXZlX2d1ZXN0X3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwKIAkJCQkJIHN0cnVjdCBkZXNjX3N0cnVjdCAqc2VnX2Rlc2MpCiB7Ci0JZ3BhX3QgZ3BhOwogCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGR0YWJsZTsKIAl1MTYgaW5kZXggPSBzZWxlY3RvciA+PiAzOwogCkBAIC0zNzI4LDE5ICs0MDQ2LDEzIEBACiAKIAlpZiAoZHRhYmxlLmxpbWl0IDwgaW5kZXggKiA4ICsgNykKIAkJcmV0dXJuIDE7Ci0JZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBkdGFibGUuYmFzZSk7Ci0JZ3BhICs9IGluZGV4ICogODsKLQlyZXR1cm4ga3ZtX3dyaXRlX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBzZWdfZGVzYywgOCk7CisJcmV0dXJuIGt2bV93cml0ZV9ndWVzdF92aXJ0KGR0YWJsZS5iYXNlICsgaW5kZXgqOCwgc2VnX2Rlc2MsIHNpemVvZigqc2VnX2Rlc2MpLCB2Y3B1KTsKIH0KIAogc3RhdGljIHUzMiBnZXRfdHNzX2Jhc2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqc2VnX2Rlc2MpCiB7Ci0JdTMyIGJhc2VfYWRkcjsKLQotCWJhc2VfYWRkciA9IHNlZ19kZXNjLT5iYXNlMDsKLQliYXNlX2FkZHIgfD0gKHNlZ19kZXNjLT5iYXNlMSA8PCAxNik7Ci0JYmFzZV9hZGRyIHw9IChzZWdfZGVzYy0+YmFzZTIgPDwgMjQpOworCXUzMiBiYXNlX2FkZHIgPSBnZXRfZGVzY19iYXNlKHNlZ19kZXNjKTsKIAogCXJldHVybiB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGJhc2VfYWRkcik7CiB9CkBAIC0zNzg1LDEyICs0MDk3LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXNfdm04Nl9zZWdtZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKK3sKKwlyZXR1cm4gKHNlZyAhPSBWQ1BVX1NSRUdfTERUUikgJiYKKwkJKHNlZyAhPSBWQ1BVX1NSRUdfVFIpICYmCisJCShrdm1feDg2X29wcy0+Z2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfVk0pOworfQorCiBpbnQga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLAogCQkJCWludCB0eXBlX2JpdHMsIGludCBzZWcpCiB7CiAJc3RydWN0IGt2bV9zZWdtZW50IGt2bV9zZWc7CiAKLQlpZiAoISh2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfUEUpKQorCWlmIChpc192bTg2X3NlZ21lbnQodmNwdSwgc2VnKSB8fCAhKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpCiAJCXJldHVybiBrdm1fbG9hZF9yZWFsbW9kZV9zZWdtZW50KHZjcHUsIHNlbGVjdG9yLCBzZWcpOwogCWlmIChsb2FkX3NlZ21lbnRfZGVzY3JpcHRvcl90b19rdm1fZGVzY3QodmNwdSwgc2VsZWN0b3IsICZrdm1fc2VnKSkKIAkJcmV0dXJuIDE7CkBAIC00MDI5LDcgKzQzNDgsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFuc2VnX2Rlc2MucCB8fCAobnNlZ19kZXNjLmxpbWl0MCB8IG5zZWdfZGVzYy5saW1pdCA8PCAxNikgPCAweDY3KSB7CisJaWYgKCFuc2VnX2Rlc2MucCB8fCBnZXRfZGVzY19saW1pdCgmbnNlZ19kZXNjKSA8IDB4NjcpIHsKIAkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIFRTX1ZFQ1RPUiwgdHNzX3NlbGVjdG9yICYgMHhmZmZjKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDA5OSwxMyArNDQxOCw3IEBACiAKIAl2Y3B1LT5hcmNoLmNyMiA9IHNyZWdzLT5jcjI7CiAJbW11X3Jlc2V0X25lZWRlZCB8PSB2Y3B1LT5hcmNoLmNyMyAhPSBzcmVncy0+Y3IzOwotCi0JZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwotCWlmIChnZm5fdG9fbWVtc2xvdCh2Y3B1LT5rdm0sIHNyZWdzLT5jcjMgPj4gUEFHRV9TSElGVCkpCi0JCXZjcHUtPmFyY2guY3IzID0gc3JlZ3MtPmNyMzsKLQllbHNlCi0JCXNldF9iaXQoS1ZNX1JFUV9UUklQTEVfRkFVTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7Ci0JdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwl2Y3B1LT5hcmNoLmNyMyA9IHNyZWdzLT5jcjM7CiAKIAlrdm1fc2V0X2NyOCh2Y3B1LCBzcmVncy0+Y3I4KTsKIApAQCAtNDE0Nyw4ICs0NDYwLDEwIEBACiAJa3ZtX3NldF9zZWdtZW50KHZjcHUsICZzcmVncy0+dHIsIFZDUFVfU1JFR19UUik7CiAJa3ZtX3NldF9zZWdtZW50KHZjcHUsICZzcmVncy0+bGR0LCBWQ1BVX1NSRUdfTERUUik7CiAKKwl1cGRhdGVfY3I4X2ludGVyY2VwdCh2Y3B1KTsKKwogCS8qIE9sZGVyIHVzZXJzcGFjZSB3b24ndCB1bmhhbHQgdGhlIHZjcHUgb24gcmVzZXQuICovCi0JaWYgKHZjcHUtPnZjcHVfaWQgPT0gMCAmJiBrdm1fcmlwX3JlYWQodmNwdSkgPT0gMHhmZmYwICYmCisJaWYgKGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSAmJiBrdm1fcmlwX3JlYWQodmNwdSkgPT0gMHhmZmYwICYmCiAJICAgIHNyZWdzLT5jcy5zZWxlY3RvciA9PSAweGYwMDAgJiYgc3JlZ3MtPmNzLmJhc2UgPT0gMHhmZmZmMDAwMCAmJgogCSAgICAhKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpCiAJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfUlVOTkFCTEU7CkBAIC00NDE5LDcgKzQ3MzQsNyBAQAogCWt2bSA9IHZjcHUtPmt2bTsKIAogCXZjcHUtPmFyY2gubW11LnJvb3RfaHBhID0gSU5WQUxJRF9QQUdFOwotCWlmICghaXJxY2hpcF9pbl9rZXJuZWwoa3ZtKSB8fCB2Y3B1LT52Y3B1X2lkID09IDApCisJaWYgKCFpcnFjaGlwX2luX2tlcm5lbChrdm0pIHx8IGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSkKIAkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKIAllbHNlCiAJCXZjcHUtPmFyY2gubXBfc3RhdGUgPSBLVk1fTVBfU1RBVEVfVU5JTklUSUFMSVpFRDsKQEAgLTQ0NDEsNiArNDc1NiwxNCBAQAogCQkJZ290byBmYWlsX21tdV9kZXN0cm95OwogCX0KIAorCXZjcHUtPmFyY2gubWNlX2JhbmtzID0ga3phbGxvYyhLVk1fTUFYX01DRV9CQU5LUyAqIHNpemVvZih1NjQpICogNCwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCF2Y3B1LT5hcmNoLm1jZV9iYW5rcykgeworCQlyID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21tdV9kZXN0cm95OworCX0KKwl2Y3B1LT5hcmNoLm1jZ19jYXAgPSBLVk1fTUFYX01DRV9CQU5LUzsKKwogCXJldHVybiAwOwogCiBmYWlsX21tdV9kZXN0cm95OgpAQCAtNDQ4OCwyMCArNDgxMSwyMiBAQAogc3RhdGljIHZvaWQga3ZtX2ZyZWVfdmNwdXMoc3RydWN0IGt2bSAqa3ZtKQogewogCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAogCS8qCiAJICogVW5waW4gYW55IG1tdSBwYWdlcyBmaXJzdC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKQotCQlpZiAoa3ZtLT52Y3B1c1tpXSkKLQkJCWt2bV91bmxvYWRfdmNwdV9tbXUoa3ZtLT52Y3B1c1tpXSk7Ci0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgewotCQlpZiAoa3ZtLT52Y3B1c1tpXSkgewotCQkJa3ZtX2FyY2hfdmNwdV9mcmVlKGt2bS0+dmNwdXNbaV0pOwotCQkJa3ZtLT52Y3B1c1tpXSA9IE5VTEw7Ci0JCX0KLQl9CisJa3ZtX2Zvcl9lYWNoX3ZjcHUoaSwgdmNwdSwga3ZtKQorCQlrdm1fdW5sb2FkX3ZjcHVfbW11KHZjcHUpOworCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKKwkJa3ZtX2FyY2hfdmNwdV9mcmVlKHZjcHUpOwogCisJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3ZjcHVzKTsgaSsrKQorCQlrdm0tPnZjcHVzW2ldID0gTlVMTDsKKworCWF0b21pY19zZXQoJmt2bS0+b25saW5lX3ZjcHVzLCAwKTsKKwltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiB9CiAKIHZvaWQga3ZtX2FyY2hfc3luY19ldmVudHMoc3RydWN0IGt2bSAqa3ZtKQpAQCAtNDU3OCw3ICs0OTAzLDYgQEAKIAogCWt2bV9tbXVfc2xvdF9yZW1vdmVfd3JpdGVfYWNjZXNzKGt2bSwgbWVtLT5zbG90KTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7Ci0Ja3ZtX2ZsdXNoX3JlbW90ZV90bGJzKGt2bSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OTIsOCArNDkxNiwxMCBAQAogaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiB2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9SVU5OQUJMRQotCSAgICAgICB8fCB2Y3B1LT5hcmNoLm1wX3N0YXRlID09IEtWTV9NUF9TVEFURV9TSVBJX1JFQ0VJVkVECi0JICAgICAgIHx8IHZjcHUtPmFyY2gubm1pX3BlbmRpbmc7CisJCXx8IHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1NJUElfUkVDRUlWRUQKKwkJfHwgdmNwdS0+YXJjaC5ubWlfcGVuZGluZyB8fAorCQkoa3ZtX2FyY2hfaW50ZXJydXB0X2FsbG93ZWQodmNwdSkgJiYKKwkJIGt2bV9jcHVfaGFzX2ludGVycnVwdCh2Y3B1KSk7CiB9CiAKIHZvaWQga3ZtX3ZjcHVfa2ljayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC00NjE3LDMgKzQ5NDMsOSBAQAogewogCXJldHVybiBrdm1feDg2X29wcy0+aW50ZXJydXB0X2FsbG93ZWQodmNwdSk7CiB9CisKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoa3ZtX2V4aXQpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChrdm1faW5qX3ZpcnEpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChrdm1fcGFnZV9mYXVsdCk7CitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGt2bV9tc3IpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChrdm1fY3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5oIGIvYXJjaC94ODYva3ZtL3g4Ni5oCmluZGV4IDRjOGUxMGEuLjVlYWRlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuaAorKysgYi9hcmNoL3g4Ni9rdm0veDg2LmgKQEAgLTMxLDQgKzMxLDggQEAKIHsKIAlyZXR1cm4gKG5yID09IEJQX1ZFQ1RPUikgfHwgKG5yID09IE9GX1ZFQ1RPUik7CiB9CisKK3N0cnVjdCBrdm1fY3B1aWRfZW50cnkyICprdm1fZmluZF9jcHVpZF9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZnVuY3Rpb24sIHUzMiBpbmRleCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDA3YzMxODkuLjllNjA5MjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKQEAgLTksNiArOSw4IEBACiBsaWIteSArPSB1c2VyY29weV8kKEJJVFMpLm8gZ2V0dXNlci5vIHB1dHVzZXIubwogbGliLXkgKz0gbWVtY3B5XyQoQklUUykubwogCitvYmoteSArPSBtc3ItcmVnLm8gbXNyLXJlZy1leHBvcnQubworCiBpZmVxICgkKENPTkZJR19YODZfMzIpLHkpCiAgICAgICAgIG9iai15ICs9IGF0b21pYzY0XzMyLm8KICAgICAgICAgbGliLXkgKz0gY2hlY2tzdW1fMzIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21zci1yZWctZXhwb3J0LmMgYi9hcmNoL3g4Ni9saWIvbXNyLXJlZy1leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzExY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL21zci1yZWctZXhwb3J0LmMKQEAgLTAsMCArMSw1IEBACisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgorCitFWFBPUlRfU1lNQk9MKG5hdGl2ZV9yZG1zcl9zYWZlX3JlZ3MpOworRVhQT1JUX1NZTUJPTChuYXRpdmVfd3Jtc3Jfc2FmZV9yZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tc3ItcmVnLlMgYi9hcmNoL3g4Ni9saWIvbXNyLXJlZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZmExMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9saWIvbXNyLXJlZy5TCkBAIC0wLDAgKzEsMTAyIEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisvKgorICogaW50IG5hdGl2ZV97cmRtc3Isd3Jtc3J9X3NhZmVfcmVncyh1MzIgZ3Byc1s4XSk7CisgKgorICogcmVnIGxheW91dDogdTMyIGdwcnNbZWF4LCBlY3gsIGVkeCwgZWJ4LCBlc3AsIGVicCwgZXNpLCBlZGldCisgKgorICovCisubWFjcm8gb3Bfc2FmZV9yZWdzIG9wCitFTlRSWShuYXRpdmVfXG9wXCgpX3NhZmVfcmVncykKKwlDRklfU1RBUlRQUk9DCisJcHVzaHFfY2ZpICVyYngKKwlwdXNocV9jZmkgJXJicAorCW1vdnEJJXJkaSwgJXIxMAkvKiBTYXZlIHBvaW50ZXIgKi8KKwl4b3JsCSVyMTFkLCAlcjExZAkvKiBSZXR1cm4gdmFsdWUgKi8KKwltb3ZsICAgICglcmRpKSwgJWVheAorCW1vdmwgICAgNCglcmRpKSwgJWVjeAorCW1vdmwgICAgOCglcmRpKSwgJWVkeAorCW1vdmwgICAgMTIoJXJkaSksICVlYngKKwltb3ZsICAgIDIwKCVyZGkpLCAlZWJwCisJbW92bCAgICAyNCglcmRpKSwgJWVzaQorCW1vdmwgICAgMjgoJXJkaSksICVlZGkKKwlDRklfUkVNRU1CRVJfU1RBVEUKKzE6CVxvcAorMjoJbW92bCAgICAlZWF4LCAoJXIxMCkKKwltb3ZsCSVyMTFkLCAlZWF4CS8qIFJldHVybiB2YWx1ZSAqLworCW1vdmwgICAgJWVjeCwgNCglcjEwKQorCW1vdmwgICAgJWVkeCwgOCglcjEwKQorCW1vdmwgICAgJWVieCwgMTIoJXIxMCkKKwltb3ZsICAgICVlYnAsIDIwKCVyMTApCisJbW92bCAgICAlZXNpLCAyNCglcjEwKQorCW1vdmwgICAgJWVkaSwgMjgoJXIxMCkKKwlwb3BxX2NmaSAlcmJwCisJcG9wcV9jZmkgJXJieAorCXJldAorMzoKKwlDRklfUkVTVE9SRV9TVEFURQorCW1vdmwgICAgJC1FSU8sICVyMTFkCisJam1wICAgICAyYgorCisJX0FTTV9FWFRBQkxFKDFiLCAzYikKKwlDRklfRU5EUFJPQworRU5EUFJPQyhuYXRpdmVfXG9wXCgpX3NhZmVfcmVncykKKy5lbmRtCisKKyNlbHNlIC8qIFg4Nl8zMiAqLworCisubWFjcm8gb3Bfc2FmZV9yZWdzIG9wCitFTlRSWShuYXRpdmVfXG9wXCgpX3NhZmVfcmVncykKKwlDRklfU1RBUlRQUk9DCisJcHVzaGxfY2ZpICVlYngKKwlwdXNobF9jZmkgJWVicAorCXB1c2hsX2NmaSAlZXNpCisJcHVzaGxfY2ZpICVlZGkKKwlwdXNobF9jZmkgJDAgICAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSAqLworCXB1c2hsX2NmaSAlZWF4CisJbW92bCAgICA0KCVlYXgpLCAlZWN4CisJbW92bCAgICA4KCVlYXgpLCAlZWR4CisJbW92bCAgICAxMiglZWF4KSwgJWVieAorCW1vdmwgICAgMjAoJWVheCksICVlYnAKKwltb3ZsICAgIDI0KCVlYXgpLCAlZXNpCisJbW92bCAgICAyOCglZWF4KSwgJWVkaQorCW1vdmwgICAgKCVlYXgpLCAlZWF4CisJQ0ZJX1JFTUVNQkVSX1NUQVRFCisxOglcb3AKKzI6CXB1c2hsX2NmaSAlZWF4CisJbW92bCAgICA0KCVlc3ApLCAlZWF4CisJcG9wbF9jZmkgKCVlYXgpCisJYWRkbCAgICAkNCwgJWVzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAorCW1vdmwgICAgJWVjeCwgNCglZWF4KQorCW1vdmwgICAgJWVkeCwgOCglZWF4KQorCW1vdmwgICAgJWVieCwgMTIoJWVheCkKKwltb3ZsICAgICVlYnAsIDIwKCVlYXgpCisJbW92bCAgICAlZXNpLCAyNCglZWF4KQorCW1vdmwgICAgJWVkaSwgMjgoJWVheCkKKwlwb3BsX2NmaSAlZWF4CisJcG9wbF9jZmkgJWVkaQorCXBvcGxfY2ZpICVlc2kKKwlwb3BsX2NmaSAlZWJwCisJcG9wbF9jZmkgJWVieAorCXJldAorMzoKKwlDRklfUkVTVE9SRV9TVEFURQorCW1vdmwgICAgJC1FSU8sIDQoJWVzcCkKKwlqbXAgICAgIDJiCisKKwlfQVNNX0VYVEFCTEUoMWIsIDNiKQorCUNGSV9FTkRQUk9DCitFTkRQUk9DKG5hdGl2ZV9cb3BcKClfc2FmZV9yZWdzKQorLmVuZG0KKworI2VuZGlmCisKK29wX3NhZmVfcmVncyByZG1zcgorb3Bfc2FmZV9yZWdzIHdybXNyCisKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tc3IuYyBiL2FyY2gveDg2L2xpYi9tc3IuYwppbmRleCBjYWEyNGFjLi4zM2ExZTNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbXNyLmMKKysrIGIvYXJjaC94ODYvbGliL21zci5jCkBAIC0xNzUsMyArMTc1LDUyIEBACiAJcmV0dXJuIGVyciA/IGVyciA6IHJ2LmVycjsKIH0KIEVYUE9SVF9TWU1CT0wod3Jtc3Jfc2FmZV9vbl9jcHUpOworCisvKgorICogVGhlc2UgdmFyaWFudHMgYXJlIHNpZ25pZmljYW50bHkgc2xvd2VyLCBidXQgYWxsb3dzIGNvbnRyb2wgb3ZlcgorICogdGhlIGVudGlyZSAzMi1iaXQgR1BSIHNldC4KKyAqLworc3RydWN0IG1zcl9yZWdzX2luZm8geworCXUzMiAqcmVnczsKKwlpbnQgZXJyOworfTsKKworc3RhdGljIHZvaWQgX19yZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHZvaWQgKmluZm8pCit7CisJc3RydWN0IG1zcl9yZWdzX2luZm8gKnJ2ID0gaW5mbzsKKworCXJ2LT5lcnIgPSByZG1zcl9zYWZlX3JlZ3MocnYtPnJlZ3MpOworfQorCitzdGF0aWMgdm9pZCBfX3dybXNyX3NhZmVfcmVnc19vbl9jcHUodm9pZCAqaW5mbykKK3sKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyAqcnYgPSBpbmZvOworCisJcnYtPmVyciA9IHdybXNyX3NhZmVfcmVncyhydi0+cmVncyk7Cit9CisKK2ludCByZG1zcl9zYWZlX3JlZ3Nfb25fY3B1KHVuc2lnbmVkIGludCBjcHUsIHUzMiAqcmVncykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtc3JfcmVnc19pbmZvIHJ2OworCisJcnYucmVncyAgID0gcmVnczsKKwlydi5lcnIgICAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fcmRtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHJkbXNyX3NhZmVfcmVnc19vbl9jcHUpOworCitpbnQgd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCB1MzIgKnJlZ3MpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNyX3JlZ3NfaW5mbyBydjsKKworCXJ2LnJlZ3MgPSByZWdzOworCXJ2LmVyciAgPSAtRUlPOworCWVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIF9fd3Jtc3Jfc2FmZV9yZWdzX29uX2NwdSwgJnJ2LCAxKTsKKworCXJldHVybiBlcnIgPyBlcnIgOiBydi5lcnI7Cit9CitFWFBPUlRfU1lNQk9MKHdybXNyX3NhZmVfcmVnc19vbl9jcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCBlZWZkZWVlLi45YjVhOWY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMSw1ICsxLDkgQEAKIG9iai15CTo9ICBpbml0Lm8gaW5pdF8kKEJJVFMpLm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8gbW1hcC5vIFwKLQkgICAgcGF0Lm8gcGd0YWJsZS5vIGd1cC5vCisJICAgIHBhdC5vIHBndGFibGUubyBwaHlzYWRkci5vIGd1cC5vCisKKyMgTWFrZSBzdXJlIF9fcGh5c19hZGRyIGhhcyBubyBzdGFja3Byb3RlY3Rvcgorbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCitDRkxBR1NfcGh5c2FkZHIubwkJOj0gJChub3N0YWNrcCkKIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHRsYi5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2ZhdWx0LmMgYi9hcmNoL3g4Ni9tbS9mYXVsdC5jCmluZGV4IGJmYWUxMzkuLjc3NWEwMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2ZhdWx0LmMKKysrIGIvYXJjaC94ODYvbW0vZmF1bHQuYwpAQCAtMjg1LDI2ICsyODUsMjUgQEAKIAkJdHNrLT50aHJlYWQuc2NyZWVuX2JpdG1hcCB8PSAxIDw8IGJpdDsKIH0KIAorc3RhdGljIGJvb2wgbG93X3Bmbih1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlyZXR1cm4gcGZuIDwgbWF4X2xvd19wZm47Cit9CisKIHN0YXRpYyB2b2lkIGR1bXBfcGFnZXRhYmxlKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlfX3R5cGVvZl9fKHB0ZV92YWwoX19wdGUoMCkpKSBwYWdlOwotCi0JcGFnZSA9IHJlYWRfY3IzKCk7Ci0JcGFnZSA9ICgoX190eXBlb2ZfXyhwYWdlKSAqKSBfX3ZhKHBhZ2UpKVthZGRyZXNzID4+IFBHRElSX1NISUZUXTsKKwlwZ2RfdCAqYmFzZSA9IF9fdmEocmVhZF9jcjMoKSk7CisJcGdkX3QgKnBnZCA9ICZiYXNlW3BnZF9pbmRleChhZGRyZXNzKV07CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKLQlwcmludGsoIipwZHB0ID0gJTAxNkx4ICIsIHBhZ2UpOwotCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCi0JICAgICYmIHBhZ2UgJiBfUEFHRV9QUkVTRU5UKSB7Ci0JCXBhZ2UgJj0gUEFHRV9NQVNLOwotCQlwYWdlID0gKChfX3R5cGVvZl9fKHBhZ2UpICopIF9fdmEocGFnZSkpWyhhZGRyZXNzID4+IFBNRF9TSElGVCkKLQkJCQkJCQkmIChQVFJTX1BFUl9QTUQgLSAxKV07Ci0JCXByaW50ayhLRVJOX0NPTlQgIipwZGUgPSAlMDE2THggIiwgcGFnZSk7Ci0JCXBhZ2UgJj0gfl9QQUdFX05YOwotCX0KLSNlbHNlCi0JcHJpbnRrKCIqcGRlID0gJTA4bHggIiwgcGFnZSk7CisJcHJpbnRrKCIqcGRwdCA9ICUwMTZMeCAiLCBwZ2RfdmFsKCpwZ2QpKTsKKwlpZiAoIWxvd19wZm4ocGdkX3ZhbCgqcGdkKSA+PiBQQUdFX1NISUZUKSB8fCAhcGdkX3ByZXNlbnQoKnBnZCkpCisJCWdvdG8gb3V0OwogI2VuZGlmCisJcG1kID0gcG1kX29mZnNldChwdWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyksIGFkZHJlc3MpOworCXByaW50ayhLRVJOX0NPTlQgIipwZGUgPSAlMCpMeCAiLCBzaXplb2YoKnBtZCkgKiAyLCAodTY0KXBtZF92YWwoKnBtZCkpOwogCiAJLyoKIAkgKiBXZSBtdXN0IG5vdCBkaXJlY3RseSBhY2Nlc3MgdGhlIHB0ZSBpbiB0aGUgaGlnaHB0ZQpAQCAtMzEyLDE2ICszMTEsMTIgQEAKIAkgKiBBbmQgbGV0J3MgcmF0aGVyIG5vdCBrbWFwLWF0b21pYyB0aGUgcHRlLCBqdXN0IGluIGNhc2UKIAkgKiBpdCdzIGFsbG9jYXRlZCBhbHJlYWR5OgogCSAqLwotCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCi0JICAgICYmIChwYWdlICYgX1BBR0VfUFJFU0VOVCkKLQkgICAgJiYgIShwYWdlICYgX1BBR0VfUFNFKSkgeworCWlmICghbG93X3BmbihwbWRfcGZuKCpwbWQpKSB8fCAhcG1kX3ByZXNlbnQoKnBtZCkgfHwgcG1kX2xhcmdlKCpwbWQpKQorCQlnb3RvIG91dDsKIAotCQlwYWdlICY9IFBBR0VfTUFTSzsKLQkJcGFnZSA9ICgoX190eXBlb2ZfXyhwYWdlKSAqKSBfX3ZhKHBhZ2UpKVsoYWRkcmVzcyA+PiBQQUdFX1NISUZUKQotCQkJCQkJCSYgKFBUUlNfUEVSX1BURSAtIDEpXTsKLQkJcHJpbnRrKCIqcHRlID0gJTAqTHggIiwgc2l6ZW9mKHBhZ2UpKjIsICh1NjQpcGFnZSk7Ci0JfQotCisJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKKwlwcmludGsoIipwdGUgPSAlMCpMeCAiLCBzaXplb2YoKnB0ZSkgKiAyLCAodTY0KXB0ZV92YWwoKnB0ZSkpOworb3V0OgogCXByaW50aygiXG4iKTsKIH0KIApAQCAtNDUwLDE2ICs0NDUsMTIgQEAKIAogc3RhdGljIHZvaWQgZHVtcF9wYWdldGFibGUodW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXBnZF90ICpwZ2Q7CisJcGdkX3QgKmJhc2UgPSBfX3ZhKHJlYWRfY3IzKCkgJiBQSFlTSUNBTF9QQUdFX01BU0spOworCXBnZF90ICpwZ2QgPSBiYXNlICsgcGdkX2luZGV4KGFkZHJlc3MpOwogCXB1ZF90ICpwdWQ7CiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCi0JcGdkID0gKHBnZF90ICopcmVhZF9jcjMoKTsKLQotCXBnZCA9IF9fdmEoKHVuc2lnbmVkIGxvbmcpcGdkICYgUEhZU0lDQUxfUEFHRV9NQVNLKTsKLQotCXBnZCArPSBwZ2RfaW5kZXgoYWRkcmVzcyk7CiAJaWYgKGJhZF9hZGRyZXNzKHBnZCkpCiAJCWdvdG8gYmFkOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggMjExMmVkNS4uNjNhNmJhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMjQsNyArMjQsNyBAQAogICogbm8gZ2xvYmFsIGxvY2sgaXMgbmVlZGVkIGFuZCBiZWNhdXNlIHRoZSBrbWFwIGNvZGUgbXVzdCBwZXJmb3JtIGEgZ2xvYmFsIFRMQgogICogaW52YWxpZGF0aW9uIHdoZW4gdGhlIGttYXAgcG9vbCB3cmFwcy4KICAqCi0gKiBIb3dldmVyIHdoZW4gaG9sZGluZyBhbiBhdG9taWMga21hcCBpcyBpcyBub3QgbGVnYWwgdG8gc2xlZXAsIHNvIGF0b21pYworICogSG93ZXZlciB3aGVuIGhvbGRpbmcgYW4gYXRvbWljIGttYXAgaXQgaXMgbm90IGxlZ2FsIHRvIHNsZWVwLCBzbyBhdG9taWMKICAqIGttYXBzIGFyZSBhcHByb3ByaWF0ZSBmb3Igc2hvcnQsIHRpZ2h0IGNvZGUgcGF0aHMgb25seS4KICAqLwogdm9pZCAqa21hcF9hdG9taWNfcHJvdChzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCkBAIC0xMDQsNiArMTA0LDcgQEAKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWMpOwogRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWNfcHJvdCk7CitFWFBPUlRfU1lNQk9MKGttYXBfYXRvbWljX3RvX3BhZ2UpOwogCiB2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKaW5kZXggOGE0NTA5My4uMDRlMWFkNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwpAQCAtMjIsNzcgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KIAotc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHJlc291cmNlX3NpemVfdCBhZGRyKQotewotI2lmZGVmIENPTkZJR19QSFlTX0FERFJfVF82NEJJVAotCXJldHVybiAhKGFkZHIgPj4gYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzKTsKLSNlbHNlCi0JcmV0dXJuIDE7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIENPTkZJR19YODZfNjQKLQotdW5zaWduZWQgbG9uZyBfX3BoeXNfYWRkcih1bnNpZ25lZCBsb25nIHgpCi17Ci0JaWYgKHggPj0gX19TVEFSVF9LRVJORUxfbWFwKSB7Ci0JCXggLT0gX19TVEFSVF9LRVJORUxfbWFwOwotCQlWSVJUVUFMX0JVR19PTih4ID49IEtFUk5FTF9JTUFHRV9TSVpFKTsKLQkJeCArPSBwaHlzX2Jhc2U7Ci0JfSBlbHNlIHsKLQkJVklSVFVBTF9CVUdfT04oeCA8IFBBR0VfT0ZGU0VUKTsKLQkJeCAtPSBQQUdFX09GRlNFVDsKLQkJVklSVFVBTF9CVUdfT04oIXBoeXNfYWRkcl92YWxpZCh4KSk7Ci0JfQotCXJldHVybiB4OwotfQotRVhQT1JUX1NZTUJPTChfX3BoeXNfYWRkcik7Ci0KLWJvb2wgX192aXJ0X2FkZHJfdmFsaWQodW5zaWduZWQgbG9uZyB4KQotewotCWlmICh4ID49IF9fU1RBUlRfS0VSTkVMX21hcCkgewotCQl4IC09IF9fU1RBUlRfS0VSTkVMX21hcDsKLQkJaWYgKHggPj0gS0VSTkVMX0lNQUdFX1NJWkUpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCXggKz0gcGh5c19iYXNlOwotCX0gZWxzZSB7Ci0JCWlmICh4IDwgUEFHRV9PRkZTRVQpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCXggLT0gUEFHRV9PRkZTRVQ7Ci0JCWlmICghcGh5c19hZGRyX3ZhbGlkKHgpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiBwZm5fdmFsaWQoeCA+PiBQQUdFX1NISUZUKTsKLX0KLUVYUE9SVF9TWU1CT0woX192aXJ0X2FkZHJfdmFsaWQpOwotCi0jZWxzZQotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1ZJUlRVQUwKLXVuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyB4KQotewotCS8qIFZNQUxMT0NfKiBhcmVuJ3QgY29uc3RhbnRzICAqLwotCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCk7Ci0JVklSVFVBTF9CVUdfT04oX192bWFsbG9jX3N0YXJ0X3NldCAmJiBpc192bWFsbG9jX2FkZHIoKHZvaWQgKikgeCkpOwotCXJldHVybiB4IC0gUEFHRV9PRkZTRVQ7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fcGh5c19hZGRyKTsKLSNlbmRpZgotCi1ib29sIF9fdmlydF9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgeCkKLXsKLQlpZiAoeCA8IFBBR0VfT0ZGU0VUKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKF9fdm1hbGxvY19zdGFydF9zZXQgJiYgaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHggPj0gRklYQUREUl9TVEFSVCkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiBwZm5fdmFsaWQoKHggLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCk7Ci19Ci1FWFBPUlRfU1lNQk9MKF9fdmlydF9hZGRyX3ZhbGlkKTsKLQotI2VuZGlmCisjaW5jbHVkZSAicGh5c2FkZHIuaCIKIAogaW50IHBhZ2VfaXNfcmFtKHVuc2lnbmVkIGxvbmcgcGFnZW5yKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCAzNTJhYTllLi5iMmY3ZDNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtODI3LDcgKzgyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbWVtdHlwZV9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBtZW10eXBlX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gbWVtdHlwZV9zZXFfc3RhcnQsCiAJLm5leHQgID0gbWVtdHlwZV9zZXFfbmV4dCwKIAkuc3RvcCAgPSBtZW10eXBlX3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGh5c2FkZHIuYyBiL2FyY2gveDg2L21tL3BoeXNhZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJlMjczNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L21tL3BoeXNhZGRyLmMKQEAgLTAsMCArMSw3MCBAQAorI2luY2x1ZGUgPGxpbnV4L21tZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworI2luY2x1ZGUgInBoeXNhZGRyLmgiCisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKK3Vuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyB4KQoreworCWlmICh4ID49IF9fU1RBUlRfS0VSTkVMX21hcCkgeworCQl4IC09IF9fU1RBUlRfS0VSTkVMX21hcDsKKwkJVklSVFVBTF9CVUdfT04oeCA+PSBLRVJORUxfSU1BR0VfU0laRSk7CisJCXggKz0gcGh5c19iYXNlOworCX0gZWxzZSB7CisJCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCk7CisJCXggLT0gUEFHRV9PRkZTRVQ7CisJCVZJUlRVQUxfQlVHX09OKCFwaHlzX2FkZHJfdmFsaWQoeCkpOworCX0KKwlyZXR1cm4geDsKK30KK0VYUE9SVF9TWU1CT0woX19waHlzX2FkZHIpOworCitib29sIF9fdmlydF9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwlpZiAoeCA+PSBfX1NUQVJUX0tFUk5FTF9tYXApIHsKKwkJeCAtPSBfX1NUQVJUX0tFUk5FTF9tYXA7CisJCWlmICh4ID49IEtFUk5FTF9JTUFHRV9TSVpFKQorCQkJcmV0dXJuIGZhbHNlOworCQl4ICs9IHBoeXNfYmFzZTsKKwl9IGVsc2UgeworCQlpZiAoeCA8IFBBR0VfT0ZGU0VUKQorCQkJcmV0dXJuIGZhbHNlOworCQl4IC09IFBBR0VfT0ZGU0VUOworCQlpZiAoIXBoeXNfYWRkcl92YWxpZCh4KSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gcGZuX3ZhbGlkKHggPj4gUEFHRV9TSElGVCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fdmlydF9hZGRyX3ZhbGlkKTsKKworI2Vsc2UKKworI2lmZGVmIENPTkZJR19ERUJVR19WSVJUVUFMCit1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwkvKiBWTUFMTE9DXyogYXJlbid0IGNvbnN0YW50cyAgKi8KKwlWSVJUVUFMX0JVR19PTih4IDwgUEFHRV9PRkZTRVQpOworCVZJUlRVQUxfQlVHX09OKF9fdm1hbGxvY19zdGFydF9zZXQgJiYgaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKTsKKwlyZXR1cm4geCAtIFBBR0VfT0ZGU0VUOworfQorRVhQT1JUX1NZTUJPTChfX3BoeXNfYWRkcik7CisjZW5kaWYKKworYm9vbCBfX3ZpcnRfYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIHgpCit7CisJaWYgKHggPCBQQUdFX09GRlNFVCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChfX3ZtYWxsb2Nfc3RhcnRfc2V0ICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh4ID49IEZJWEFERFJfU1RBUlQpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gcGZuX3ZhbGlkKCh4IC0gUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQpOworfQorRVhQT1JUX1NZTUJPTChfX3ZpcnRfYWRkcl92YWxpZCk7CisKKyNlbmRpZgkvKiBDT05GSUdfWDg2XzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9waHlzYWRkci5oIGIvYXJjaC94ODYvbW0vcGh5c2FkZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vcGh5c2FkZHIuaApAQCAtMCwwICsxLDEwIEBACisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCitzdGF0aWMgaW5saW5lIGludCBwaHlzX2FkZHJfdmFsaWQocmVzb3VyY2Vfc2l6ZV90IGFkZHIpCit7CisjaWZkZWYgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUCisJcmV0dXJuICEoYWRkciA+PiBib290X2NwdV9kYXRhLng4Nl9waHlzX2JpdHMpOworI2Vsc2UKKwlyZXR1cm4gMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vc3JhdF8zMi5jIGIvYXJjaC94ODYvbW0vc3JhdF8zMi5jCmluZGV4IDI5YTBlMzcuLjZmOGFhMzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3NyYXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9zcmF0XzMyLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCQlnb3RvIG91dF9mYWlsOwogCiAJaWYgKG51bV9tZW1vcnlfY2h1bmtzID09IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORworCQlwcmludGsoS0VSTl9ERUJVRwogCQkJICJjb3VsZCBub3QgZmluZCBhbnkgQUNQSSBTUkFUIG1lbW9yeSBhcmVhcy5cbiIpOwogCQlnb3RvIG91dF9mYWlsOwogCX0KQEAgLTI3Nyw3ICsyNzcsNyBAQAogCX0KIAlyZXR1cm4gMTsKIG91dF9mYWlsOgotCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBOVU1BIG1lbW9yeSBpbmZvcm1hdGlvbiBmcm9tIFNSQVQiCisJcHJpbnRrKEtFUk5fREVCVUcgImZhaWxlZCB0byBnZXQgTlVNQSBtZW1vcnkgaW5mb3JtYXRpb24gZnJvbSBTUkFUIgogCQkJIiB0YWJsZVxuIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUgYi9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKaW5kZXggNzQxMDY0MC4uM2JiNGZjMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L3hlbi9NYWtlZmlsZQpAQCAtOCw2ICs4LDcgQEAKICMgTWFrZSBzdXJlIGVhcmx5IGJvb3QgaGFzIG5vIHN0YWNrcHJvdGVjdG9yCiBub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKIENGTEFHU19lbmxpZ2h0ZW4ubwkJOj0gJChub3N0YWNrcCkKK0NGTEFHU19tbXUubwkJCTo9ICQobm9zdGFja3ApCiAKIG9iai15CQk6PSBlbmxpZ2h0ZW4ubyBzZXR1cC5vIG11bHRpY2FsbHMubyBtbXUubyBpcnEubyBcCiAJCQl0aW1lLm8geGVuLWFzbS5vIHhlbi1hc21fJChCSVRTKS5vIFwKQEAgLTE2LDMgKzE3LDQgQEAKIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubwogb2JqLSQoQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUykrPSBzcGlubG9jay5vCiBvYmotJChDT05GSUdfWEVOX0RFQlVHX0ZTKQkrPSBkZWJ1Z2ZzLm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGViMzNhYWEuLjBkZDBjMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KIAogI2luY2x1ZGUgInhlbi1vcHMuaCIKICNpbmNsdWRlICJtbXUuaCIKQEAgLTMzMCwxOCArMzMxLDI4IEBACiAJdW5zaWduZWQgbG9uZyBmcmFtZXNbcGFnZXNdOwogCWludCBmOwogCi0JLyogQSBHRFQgY2FuIGJlIHVwIHRvIDY0ayBpbiBzaXplLCB3aGljaCBjb3JyZXNwb25kcyB0byA4MTkyCi0JICAgOC1ieXRlIGVudHJpZXMsIG9yIDE2IDRrIHBhZ2VzLi4gKi8KKwkvKgorCSAqIEEgR0RUIGNhbiBiZSB1cCB0byA2NGsgaW4gc2l6ZSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gODE5MgorCSAqIDgtYnl0ZSBlbnRyaWVzLCBvciAxNiA0ayBwYWdlcy4uCisJICovCiAKIAlCVUdfT04oc2l6ZSA+IDY1NTM2KTsKIAlCVUdfT04odmEgJiB+UEFHRV9NQVNLKTsKIAogCWZvciAoZiA9IDA7IHZhIDwgZHRyLT5hZGRyZXNzICsgc2l6ZTsgdmEgKz0gUEFHRV9TSVpFLCBmKyspIHsKIAkJaW50IGxldmVsOwotCQlwdGVfdCAqcHRlcCA9IGxvb2t1cF9hZGRyZXNzKHZhLCAmbGV2ZWwpOworCQlwdGVfdCAqcHRlcDsKIAkJdW5zaWduZWQgbG9uZyBwZm4sIG1mbjsKIAkJdm9pZCAqdmlydDsKIAorCQkvKgorCQkgKiBUaGUgR0RUIGlzIHBlci1jcHUgYW5kIGlzIGluIHRoZSBwZXJjcHUgZGF0YSBhcmVhLgorCQkgKiBUaGF0IGNhbiBiZSB2aXJ0dWFsbHkgbWFwcGVkLCBzbyB3ZSBuZWVkIHRvIGRvIGEKKwkJICogcGFnZS13YWxrIHRvIGdldCB0aGUgdW5kZXJseWluZyBNRk4gZm9yIHRoZQorCQkgKiBoeXBlcmNhbGwuICBUaGUgcGFnZSBjYW4gYWxzbyBiZSBpbiB0aGUga2VybmVsJ3MKKwkJICogbGluZWFyIHJhbmdlLCBzbyB3ZSBuZWVkIHRvIFJPIHRoYXQgbWFwcGluZyB0b28uCisJCSAqLworCQlwdGVwID0gbG9va3VwX2FkZHJlc3ModmEsICZsZXZlbCk7CiAJCUJVR19PTihwdGVwID09IE5VTEwpOwogCiAJCXBmbiA9IHB0ZV9wZm4oKnB0ZXApOwpAQCAtMzU4LDYgKzM2OSw0NCBAQAogCQlCVUcoKTsKIH0KIAorLyoKKyAqIGxvYWRfZ2R0IGZvciBlYXJseSBib290LCB3aGVuIHRoZSBnZHQgaXMgb25seSBtYXBwZWQgb25jZQorICovCitzdGF0aWMgX19pbml0IHZvaWQgeGVuX2xvYWRfZ2R0X2Jvb3QoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpkdHIpCit7CisJdW5zaWduZWQgbG9uZyB2YSA9IGR0ci0+YWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGR0ci0+c2l6ZSArIDE7CisJdW5zaWduZWQgcGFnZXMgPSAoc2l6ZSArIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFOworCXVuc2lnbmVkIGxvbmcgZnJhbWVzW3BhZ2VzXTsKKwlpbnQgZjsKKworCS8qCisJICogQSBHRFQgY2FuIGJlIHVwIHRvIDY0ayBpbiBzaXplLCB3aGljaCBjb3JyZXNwb25kcyB0byA4MTkyCisJICogOC1ieXRlIGVudHJpZXMsIG9yIDE2IDRrIHBhZ2VzLi4KKwkgKi8KKworCUJVR19PTihzaXplID4gNjU1MzYpOworCUJVR19PTih2YSAmIH5QQUdFX01BU0spOworCisJZm9yIChmID0gMDsgdmEgPCBkdHItPmFkZHJlc3MgKyBzaXplOyB2YSArPSBQQUdFX1NJWkUsIGYrKykgeworCQlwdGVfdCBwdGU7CisJCXVuc2lnbmVkIGxvbmcgcGZuLCBtZm47CisKKwkJcGZuID0gdmlydF90b19wZm4odmEpOworCQltZm4gPSBwZm5fdG9fbWZuKHBmbik7CisKKwkJcHRlID0gcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMX1JPKTsKKworCQlpZiAoSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZygodW5zaWduZWQgbG9uZyl2YSwgcHRlLCAwKSkKKwkJCUJVRygpOworCisJCWZyYW1lc1tmXSA9IG1mbjsKKwl9CisKKwlpZiAoSFlQRVJWSVNPUl9zZXRfZ2R0KGZyYW1lcywgc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZGVzY19zdHJ1Y3QpKSkKKwkJQlVHKCk7Cit9CisKIHN0YXRpYyB2b2lkIGxvYWRfVExTX2Rlc2NyaXB0b3Ioc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQsCiAJCQkJdW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGkpCiB7CkBAIC01ODEsNiArNjMwLDI5IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorLyoKKyAqIFZlcnNpb24gb2Ygd3JpdGVfZ2R0X2VudHJ5IGZvciB1c2UgYXQgZWFybHkgYm9vdC10aW1lIG5lZWRlZCB0bworICogdXBkYXRlIGFuIGVudHJ5IGFzIHNpbXBseSBhcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIF9faW5pdCB2b2lkIHhlbl93cml0ZV9nZHRfZW50cnlfYm9vdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmR0LCBpbnQgZW50cnksCisJCQkJCSAgICBjb25zdCB2b2lkICpkZXNjLCBpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIERFU0NfTERUOgorCWNhc2UgREVTQ19UU1M6CisJCS8qIGlnbm9yZSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6IHsKKwkJeG1hZGRyX3QgbWFkZHIgPSB2aXJ0X3RvX21hY2hpbmUoJmR0W2VudHJ5XSk7CisKKwkJaWYgKEhZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3IobWFkZHIubWFkZHIsICoodTY0ICopZGVzYykpCisJCQlkdFtlbnRyeV0gPSAqKHN0cnVjdCBkZXNjX3N0cnVjdCAqKWRlc2M7CisJfQorCisJfQorfQorCiBzdGF0aWMgdm9pZCB4ZW5fbG9hZF9zcDAoc3RydWN0IHRzc19zdHJ1Y3QgKnRzcywKIAkJCSBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkKQogewpAQCAtNzE0LDcgKzc4Niw3IEBACiAJc2V0OgogCQliYXNlID0gKCh1NjQpaGlnaCA8PCAzMikgfCBsb3c7CiAJCWlmIChIWVBFUlZJU09SX3NldF9zZWdtZW50X2Jhc2Uod2hpY2gsIGJhc2UpICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOworCQkJcmV0ID0gLUVJTzsKIAkJYnJlYWs7CiAjZW5kaWYKIApAQCAtOTY1LDYgKzEwMzcsMjMgQEAKIAkuZW1lcmdlbmN5X3Jlc3RhcnQgPSB4ZW5fZW1lcmdlbmN5X3Jlc3RhcnQsCiB9OwogCisvKgorICogU2V0IHVwIHRoZSBHRFQgYW5kIHNlZ21lbnQgcmVnaXN0ZXJzIGZvciAtZnN0YWNrLXByb3RlY3Rvci4gIFVudGlsCisgKiB3ZSBkbyB0aGlzLCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGNhbGwgYW55IHN0YWNrLXByb3RlY3RlZAorICogZnVuY3Rpb24sIHdoaWNoIGlzIG1vc3Qgb2YgdGhlIGtlcm5lbC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IHhlbl9zZXR1cF9zdGFja3Byb3RlY3Rvcih2b2lkKQoreworCXB2X2NwdV9vcHMud3JpdGVfZ2R0X2VudHJ5ID0geGVuX3dyaXRlX2dkdF9lbnRyeV9ib290OworCXB2X2NwdV9vcHMubG9hZF9nZHQgPSB4ZW5fbG9hZF9nZHRfYm9vdDsKKworCXNldHVwX3N0YWNrX2NhbmFyeV9zZWdtZW50KDApOworCXN3aXRjaF90b19uZXdfZ2R0KDApOworCisJcHZfY3B1X29wcy53cml0ZV9nZHRfZW50cnkgPSB4ZW5fd3JpdGVfZ2R0X2VudHJ5OworCXB2X2NwdV9vcHMubG9hZF9nZHQgPSB4ZW5fbG9hZF9nZHQ7Cit9CisKIC8qIEZpcnN0IEMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIFhlbiBib290ICovCiBhc21saW5rYWdlIHZvaWQgX19pbml0IHhlbl9zdGFydF9rZXJuZWwodm9pZCkKIHsKQEAgLTk4MywxMyArMTA3MiwyOCBAQAogCXB2X2FwaWNfb3BzID0geGVuX2FwaWNfb3BzOwogCXB2X21tdV9vcHMgPSB4ZW5fbW11X29wczsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKIAkvKgotCSAqIFNldHVwIHBlcmNwdSBzdGF0ZS4gIFdlIG9ubHkgbmVlZCB0byBkbyB0aGlzIGZvciA2NC1iaXQKLQkgKiBiZWNhdXNlIDMyLWJpdCBhbHJlYWR5IGhhcyAlZnMgc2V0IHByb3Blcmx5LgorCSAqIFNldCB1cCBzb21lIHBhZ2V0YWJsZSBzdGF0ZSBiZWZvcmUgc3RhcnRpbmcgdG8gc2V0IGFueSBwdGVzLgogCSAqLwotCWxvYWRfcGVyY3B1X3NlZ21lbnQoMCk7Ci0jZW5kaWYKKworCS8qIFByZXZlbnQgdW53YW50ZWQgYml0cyBmcm9tIGJlaW5nIHNldCBpbiBQVEVzLiAqLworCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9HTE9CQUw7CisJaWYgKCF4ZW5faW5pdGlhbF9kb21haW4oKSkKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfihfUEFHRV9QV1QgfCBfUEFHRV9QQ0QpOworCisJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfSU9NQVA7CisKKwl4ZW5fc2V0dXBfZmVhdHVyZXMoKTsKKworCS8qIEdldCBtZm4gbGlzdCAqLworCWlmICgheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCisJCXhlbl9idWlsZF9keW5hbWljX3BoeXNfdG9fbWFjaGluZSgpOworCisJLyoKKwkgKiBTZXQgdXAga2VybmVsIEdEVCBhbmQgc2VnbWVudCByZWdpc3RlcnMsIG1haW5seSBzbyB0aGF0CisJICogLWZzdGFjay1wcm90ZWN0b3IgY29kZSBjYW4gYmUgZXhlY3V0ZWQuCisJICovCisJeGVuX3NldHVwX3N0YWNrcHJvdGVjdG9yKCk7CiAKIAl4ZW5faW5pdF9pcnFfb3BzKCk7CiAJeGVuX2luaXRfY3B1aWRfbWFzaygpOwpAQCAtMTAwMSw4ICsxMTA1LDYgQEAKIAlzZXRfeGVuX2Jhc2ljX2FwaWNfb3BzKCk7CiAjZW5kaWYKIAotCXhlbl9zZXR1cF9mZWF0dXJlcygpOwotCiAJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfbW11X3B0X3VwZGF0ZV9wcmVzZXJ2ZV9hZCkpIHsKIAkJcHZfbW11X29wcy5wdGVwX21vZGlmeV9wcm90X3N0YXJ0ID0geGVuX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQ7CiAJCXB2X21tdV9vcHMucHRlcF9tb2RpZnlfcHJvdF9jb21taXQgPSB4ZW5fcHRlcF9tb2RpZnlfcHJvdF9jb21taXQ7CkBAIC0xMDE5LDE3ICsxMTIxLDggQEAKIAogCXhlbl9zbXBfaW5pdCgpOwogCi0JLyogR2V0IG1mbiBsaXN0ICovCi0JaWYgKCF4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkKLQkJeGVuX2J1aWxkX2R5bmFtaWNfcGh5c190b19tYWNoaW5lKCk7Ci0KIAlwZ2QgPSAocGdkX3QgKil4ZW5fc3RhcnRfaW5mby0+cHRfYmFzZTsKIAotCS8qIFByZXZlbnQgdW53YW50ZWQgYml0cyBmcm9tIGJlaW5nIHNldCBpbiBQVEVzLiAqLwotCV9fc3VwcG9ydGVkX3B0ZV9tYXNrICY9IH5fUEFHRV9HTE9CQUw7Ci0JaWYgKCF4ZW5faW5pdGlhbF9kb21haW4oKSkKLQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfihfUEFHRV9QV1QgfCBfUEFHRV9QQ0QpOwotCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCS8qIFdvcmsgb3V0IGlmIHdlIHN1cHBvcnQgTlggKi8KIAljaGVja19lZmVyKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc21wLmMgYi9hcmNoL3g4Ni94ZW4vc21wLmMKaW5kZXggNDI5ODM0ZS4uZmUwM2VlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NtcC5jCisrKyBiL2FyY2gveDg2L3hlbi9zbXAuYwpAQCAtMjM2LDYgKzIzNiw3IEBACiAJY3R4dC0+dXNlcl9yZWdzLnNzID0gX19LRVJORUxfRFM7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWN0eHQtPnVzZXJfcmVncy5mcyA9IF9fS0VSTkVMX1BFUkNQVTsKKwljdHh0LT51c2VyX3JlZ3MuZ3MgPSBfX0tFUk5FTF9TVEFDS19DQU5BUlk7CiAjZWxzZQogCWN0eHQtPmdzX2Jhc2Vfa2VybmVsID0gcGVyX2NwdV9vZmZzZXQoY3B1KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NwaW5sb2NrLmMgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwppbmRleCA1NjAxNTA2Li4zNmE1MTQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYworKysgYi9hcmNoL3g4Ni94ZW4vc3BpbmxvY2suYwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAJc3RydWN0IHhlbl9zcGlubG9jayAqcHJldjsKIAlpbnQgaXJxID0gX19nZXRfY3B1X3Zhcihsb2NrX2tpY2tlcl9pcnEpOwogCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgc3RhcnQ7CiAKIAkvKiBJZiBraWNrZXIgaW50ZXJydXB0cyBub3QgaW5pdGlhbGl6ZWQgeWV0LCBqdXN0IHNwaW4gKi8KQEAgLTE5OSwxNiArMTk4LDEyIEBACiAJLyogYW5ub3VuY2Ugd2UncmUgc3Bpbm5pbmcgKi8KIAlwcmV2ID0gc3Bpbm5pbmdfbG9jayh4bCk7CiAKLQlmbGFncyA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsKLQlpZiAoaXJxX2VuYWJsZSkgewotCQlBRERfU1RBVFModGFrZW5fc2xvd19pcnFlbmFibGUsIDEpOwotCQlyYXdfbG9jYWxfaXJxX2VuYWJsZSgpOwotCX0KLQogCUFERF9TVEFUUyh0YWtlbl9zbG93LCAxKTsKIAlBRERfU1RBVFModGFrZW5fc2xvd19uZXN0ZWQsIHByZXYgIT0gTlVMTCk7CiAKIAlkbyB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAkJLyogY2xlYXIgcGVuZGluZyAqLwogCQl4ZW5fY2xlYXJfaXJxX3BlbmRpbmcoaXJxKTsKIApAQCAtMjI4LDYgKzIyMywxMiBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAorCQlmbGFncyA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsKKwkJaWYgKGlycV9lbmFibGUpIHsKKwkJCUFERF9TVEFUUyh0YWtlbl9zbG93X2lycWVuYWJsZSwgMSk7CisJCQlyYXdfbG9jYWxfaXJxX2VuYWJsZSgpOworCQl9CisKIAkJLyoKIAkJICogQmxvY2sgdW50aWwgaXJxIGJlY29tZXMgcGVuZGluZy4gIElmIHdlJ3JlCiAJCSAqIGludGVycnVwdGVkIGF0IHRoaXMgcG9pbnQgKGFmdGVyIHRoZSB0cnlsb2NrIGJ1dApAQCAtMjM4LDEzICsyMzksMTUgQEAKIAkJICogcGVuZGluZy4KIAkJICovCiAJCXhlbl9wb2xsX2lycShpcnEpOworCisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAkJQUREX1NUQVRTKHRha2VuX3Nsb3dfc3B1cmlvdXMsICF4ZW5fdGVzdF9pcnFfcGVuZGluZyhpcnEpKTsKIAl9IHdoaWxlICgheGVuX3Rlc3RfaXJxX3BlbmRpbmcoaXJxKSk7IC8qIGNoZWNrIGZvciBzcHVyaW91cyB3YWtldXBzICovCiAKIAlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKIAogb3V0OgotCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJdW5zcGlubmluZ19sb2NrKHhsLCBwcmV2KTsKIAlzcGluX3RpbWVfYWNjdW1fYmxvY2tlZChzdGFydCk7CiAKQEAgLTMyMyw4ICszMjYsMTMgQEAKIAlzbXBfd21iKCk7CQkvKiBtYWtlIHN1cmUgbm8gd3JpdGVzIGdldCBtb3ZlZCBhZnRlciB1bmxvY2sgKi8KIAl4bC0+bG9jayA9IDA7CQkvKiByZWxlYXNlIGxvY2sgKi8KIAotCS8qIG1ha2Ugc3VyZSB1bmxvY2sgaGFwcGVucyBiZWZvcmUga2ljayAqLwotCWJhcnJpZXIoKTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB1bmxvY2sgaGFwcGVucyBiZWZvcmUgY2hlY2tpbmcgZm9yIHdhaXRpbmcKKwkgKiBzcGlubmVycy4gIFdlIG5lZWQgYSBzdHJvbmcgYmFycmllciB0byBlbmZvcmNlIHRoZQorCSAqIHdyaXRlLXJlYWQgb3JkZXJpbmcgdG8gZGlmZmVyZW50IG1lbW9yeSBsb2NhdGlvbnMsIGFzIHRoZQorCSAqIENQVSBtYWtlcyBubyBpbXBsaWVkIGd1YXJhbnRlZXMgYWJvdXQgdGhlaXIgb3JkZXJpbmcuCisJICovCisJbWIoKTsKIAogCWlmICh1bmxpa2VseSh4bC0+c3Bpbm5lcnMpKQogCQl4ZW5fc3Bpbl91bmxvY2tfc2xvdyh4bCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGRkMWE3YTQuLmJlYjNhNmIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02OCw0ICs2OCw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYJLyogX1hURU5TQV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYwppbmRleCBlZGFkNDE1Li4yZjBiODZiIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYworKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2Jsb2NrL01ha2VmaWxlIGIvYmxvY2svTWFrZWZpbGUKaW5kZXggNmM1NGVkMC4uYmE3NGNhNiAxMDA2NDQKLS0tIGEvYmxvY2svTWFrZWZpbGUKKysrIGIvYmxvY2svTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiBvYmotJChDT05GSUdfQkxPQ0spIDo9IGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstdGFnLm8gYmxrLXN5c2ZzLm8gXAogCQkJYmxrLWJhcnJpZXIubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFwKIAkJCWJsay1leGVjLm8gYmxrLW1lcmdlLm8gYmxrLXNvZnRpcnEubyBibGstdGltZW91dC5vIFwKLQkJCWlvY3RsLm8gZ2VuaGQubyBzY3NpX2lvY3RsLm8KKwkJCWJsay1pb3BvbGwubyBpb2N0bC5vIGdlbmhkLm8gc2NzaV9pb2N0bC5vCiAKIG9iai0kKENPTkZJR19CTEtfREVWX0JTRykJKz0gYnNnLm8KIG9iai0kKENPTkZJR19JT1NDSEVEX05PT1ApCSs9IG5vb3AtaW9zY2hlZC5vCmRpZmYgLS1naXQgYS9ibG9jay9ibGstYmFycmllci5jIGIvYmxvY2svYmxrLWJhcnJpZXIuYwppbmRleCAzMDAyMmI0Li42NTkzYWIzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstYmFycmllci5jCisrKyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKQEAgLTM0OCw2ICszNDgsOSBAQAogCQljbGVhcl9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CiAJfQogCisJaWYgKGJpby0+YmlfcHJpdmF0ZSkKKwkJY29tcGxldGUoYmlvLT5iaV9wcml2YXRlKTsKKwogCWJpb19wdXQoYmlvKTsKIH0KIApAQCAtMzU3LDIxICszNjAsMjAgQEAKICAqIEBzZWN0b3I6CXN0YXJ0IHNlY3RvcgogICogQG5yX3NlY3RzOgludW1iZXIgb2Ygc2VjdG9ycyB0byBkaXNjYXJkCiAgKiBAZ2ZwX21hc2s6CW1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIChmb3IgYmlvX2FsbG9jKQorICogQGZsYWdzOglESVNDQVJEX0ZMXyogZmxhZ3MgdG8gY29udHJvbCBiZWhhdmlvdXIKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqICAgIElzc3VlIGEgZGlzY2FyZCByZXF1ZXN0IGZvciB0aGUgc2VjdG9ycyBpbiBxdWVzdGlvbi4gRG9lcyBub3Qgd2FpdC4KKyAqICAgIElzc3VlIGEgZGlzY2FyZCByZXF1ZXN0IGZvciB0aGUgc2VjdG9ycyBpbiBxdWVzdGlvbi4KICAqLwotaW50IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCi0JCQkgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0cywgZ2ZwX3QgZ2ZwX21hc2spCitpbnQgYmxrZGV2X2lzc3VlX2Rpc2NhcmQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLAorCQlzZWN0b3JfdCBucl9zZWN0cywgZ2ZwX3QgZ2ZwX21hc2ssIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKLQlzdHJ1Y3QgYmlvICpiaW87CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKwlpbnQgdHlwZSA9IGZsYWdzICYgRElTQ0FSRF9GTF9CQVJSSUVSID8KKwkJRElTQ0FSRF9CQVJSSUVSIDogRElTQ0FSRF9OT0JBUlJJRVI7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoYmRldi0+YmRfZGlzayA9PSBOVUxMKQotCQlyZXR1cm4gLUVOWElPOwotCi0JcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOwogCWlmICghcSkKIAkJcmV0dXJuIC1FTlhJTzsKIApAQCAtMzc5LDEyICszODEsMTQgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJd2hpbGUgKG5yX3NlY3RzICYmICFyZXQpIHsKLQkJYmlvID0gYmlvX2FsbG9jKGdmcF9tYXNrLCAwKTsKKwkJc3RydWN0IGJpbyAqYmlvID0gYmlvX2FsbG9jKGdmcF9tYXNrLCAwKTsKIAkJaWYgKCFiaW8pCiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQliaW8tPmJpX2VuZF9pbyA9IGJsa2Rldl9kaXNjYXJkX2VuZF9pbzsKIAkJYmlvLT5iaV9iZGV2ID0gYmRldjsKKwkJaWYgKGZsYWdzICYgRElTQ0FSRF9GTF9XQUlUKQorCQkJYmlvLT5iaV9wcml2YXRlID0gJndhaXQ7CiAKIAkJYmlvLT5iaV9zZWN0b3IgPSBzZWN0b3I7CiAKQEAgLTM5NiwxMCArNDAwLDEzIEBACiAJCQliaW8tPmJpX3NpemUgPSBucl9zZWN0cyA8PCA5OwogCQkJbnJfc2VjdHMgPSAwOwogCQl9Ci0JCWJpb19nZXQoYmlvKTsKLQkJc3VibWl0X2JpbyhESVNDQVJEX0JBUlJJRVIsIGJpbyk7CiAKLQkJLyogQ2hlY2sgaWYgaXQgZmFpbGVkIGltbWVkaWF0ZWx5ICovCisJCWJpb19nZXQoYmlvKTsKKwkJc3VibWl0X2Jpbyh0eXBlLCBiaW8pOworCisJCWlmIChmbGFncyAmIERJU0NBUkRfRkxfV0FJVCkKKwkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOworCiAJCWlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19FT1BOT1RTVVBQKSkKIAkJCXJldCA9IC1FT1BOT1RTVVBQOwogCQllbHNlIGlmICghYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpKQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggZTY5NTYzNC4uODEzNTIyOCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC02OSw3ICs2OSw3IEBACiAJCXBhcnRfc3RhdF9pbmMoY3B1LCBwYXJ0LCBtZXJnZXNbcnddKTsKIAllbHNlIHsKIAkJcGFydF9yb3VuZF9zdGF0cyhjcHUsIHBhcnQpOwotCQlwYXJ0X2luY19pbl9mbGlnaHQocGFydCk7CisJCXBhcnRfaW5jX2luX2ZsaWdodChwYXJ0LCBydyk7CiAJfQogCiAJcGFydF9zdGF0X3VubG9jaygpOwpAQCAtMTAzMSw3ICsxMDMxLDcgQEAKIAogCWlmIChwYXJ0LT5pbl9mbGlnaHQpIHsKIAkJX19wYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgdGltZV9pbl9xdWV1ZSwKLQkJCQlwYXJ0LT5pbl9mbGlnaHQgKiAobm93IC0gcGFydC0+c3RhbXApKTsKKwkJCQlwYXJ0X2luX2ZsaWdodChwYXJ0KSAqIChub3cgLSBwYXJ0LT5zdGFtcCkpOwogCQlfX3BhcnRfc3RhdF9hZGQoY3B1LCBwYXJ0LCBpb190aWNrcywgKG5vdyAtIHBhcnQtPnN0YW1wKSk7CiAJfQogCXBhcnQtPnN0YW1wID0gbm93OwpAQCAtMTExMiwzMSArMTExMiwyNyBAQAogCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9GUzsKIAogCS8qCi0JICogaW5oZXJpdCBGQUlMRkFTVCBmcm9tIGJpbyAoZm9yIHJlYWQtYWhlYWQsIGFuZCBleHBsaWNpdCBGQUlMRkFTVCkKKwkgKiBJbmhlcml0IEZBSUxGQVNUIGZyb20gYmlvIChmb3IgcmVhZC1haGVhZCwgYW5kIGV4cGxpY2l0CisJICogRkFJTEZBU1QpLiAgRkFJTEZBU1QgZmxhZ3MgYXJlIGlkZW50aWNhbCBmb3IgcmVxIGFuZCBiaW8uCiAJICovCi0JaWYgKGJpb19yd19haGVhZChiaW8pKQotCQlyZXEtPmNtZF9mbGFncyB8PSAoUkVRX0ZBSUxGQVNUX0RFViB8IFJFUV9GQUlMRkFTVF9UUkFOU1BPUlQgfAotCQkJCSAgIFJFUV9GQUlMRkFTVF9EUklWRVIpOwotCWlmIChiaW9fZmFpbGZhc3RfZGV2KGJpbykpCi0JCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9ERVY7Ci0JaWYgKGJpb19mYWlsZmFzdF90cmFuc3BvcnQoYmlvKSkKLQkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVDsKLQlpZiAoYmlvX2ZhaWxmYXN0X2RyaXZlcihiaW8pKQotCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1RfRFJJVkVSOworCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19BSEVBRCkpCisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRkFTVF9NQVNLOworCWVsc2UKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLOwogCi0JaWYgKHVubGlrZWx5KGJpb19kaXNjYXJkKGJpbykpKSB7CisJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpKSkgewogCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRElTQ0FSRDsKLQkJaWYgKGJpb19iYXJyaWVyKGJpbykpCisJCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkKIAkJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKIAkJcmVxLT5xLT5wcmVwYXJlX2Rpc2NhcmRfZm4ocmVxLT5xLCByZXEpOwotCX0gZWxzZSBpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkpCisJfSBlbHNlIGlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpCiAJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9IQVJEQkFSUklFUjsKIAotCWlmIChiaW9fc3luYyhiaW8pKQorCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pKQogCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfUldfU1lOQzsKLQlpZiAoYmlvX3J3X21ldGEoYmlvKSkKKwlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfTUVUQSkpCiAJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9SV19NRVRBOwotCWlmIChiaW9fbm9pZGxlKGJpbykpCisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX05PSURMRSkpCiAJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9OT0lETEU7CiAKIAlyZXEtPmVycm9ycyA9IDA7CkBAIC0xMTUxLDcgKzExNDcsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGJvb2wgcXVldWVfc2hvdWxkX3BsdWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7Ci0JcmV0dXJuICEoYmxrX3F1ZXVlX25vbnJvdChxKSAmJiBibGtfcXVldWVfdGFnZ2VkKHEpKTsKKwlyZXR1cm4gIShibGtfcXVldWVfbm9ucm90KHEpICYmIGJsa19xdWV1ZV9xdWV1aW5nKHEpKTsKIH0KIAogc3RhdGljIGludCBfX21ha2VfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQpAQCAtMTE2MCwxMSArMTE1NiwxMiBAQAogCWludCBlbF9yZXQ7CiAJdW5zaWduZWQgaW50IGJ5dGVzID0gYmlvLT5iaV9zaXplOwogCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByaW8gPSBiaW9fcHJpbyhiaW8pOwotCWNvbnN0IGludCBzeW5jID0gYmlvX3N5bmMoYmlvKTsKLQljb25zdCBpbnQgdW5wbHVnID0gYmlvX3VucGx1ZyhiaW8pOworCWNvbnN0IGJvb2wgc3luYyA9IGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTyk7CisJY29uc3QgYm9vbCB1bnBsdWcgPSBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19VTlBMVUcpOworCWNvbnN0IHVuc2lnbmVkIGludCBmZiA9IGJpby0+YmlfcncgJiBSRVFfRkFJTEZBU1RfTUFTSzsKIAlpbnQgcndfZmxhZ3M7CiAKLQlpZiAoYmlvX2JhcnJpZXIoYmlvKSAmJiBiaW9faGFzX2RhdGEoYmlvKSAmJgorCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJiBiaW9faGFzX2RhdGEoYmlvKSAmJgogCSAgICAocS0+bmV4dF9vcmRlcmVkID09IFFVRVVFX09SREVSRURfTk9ORSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKQEAgLTExNzgsNyArMTE3NSw3IEBACiAKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCi0JaWYgKHVubGlrZWx5KGJpb19iYXJyaWVyKGJpbykpIHx8IGVsdl9xdWV1ZV9lbXB0eShxKSkKKwlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpIHx8IGVsdl9xdWV1ZV9lbXB0eShxKSkKIAkJZ290byBnZXRfcnE7CiAKIAllbF9yZXQgPSBlbHZfbWVyZ2UocSwgJnJlcSwgYmlvKTsKQEAgLTExOTEsNiArMTE4OCw5IEBACiAKIAkJdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShxLCBiaW8pOwogCisJCWlmICgocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfTUFTSykgIT0gZmYpCisJCQlibGtfcnFfc2V0X21peGVkX21lcmdlKHJlcSk7CisKIAkJcmVxLT5iaW90YWlsLT5iaV9uZXh0ID0gYmlvOwogCQlyZXEtPmJpb3RhaWwgPSBiaW87CiAJCXJlcS0+X19kYXRhX2xlbiArPSBieXRlczsKQEAgLTEyMTAsNiArMTIxMCwxMiBAQAogCiAJCXRyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKHEsIGJpbyk7CiAKKwkJaWYgKChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVF9NQVNLKSAhPSBmZikgeworCQkJYmxrX3JxX3NldF9taXhlZF9tZXJnZShyZXEpOworCQkJcmVxLT5jbWRfZmxhZ3MgJj0gflJFUV9GQUlMRkFTVF9NQVNLOworCQkJcmVxLT5jbWRfZmxhZ3MgfD0gZmY7CisJCX0KKwogCQliaW8tPmJpX25leHQgPSByZXEtPmJpbzsKIAkJcmVxLT5iaW8gPSBiaW87CiAKQEAgLTE0NTcsMTkgKzE0NjMsMjAgQEAKIAkJaWYgKG9sZF9zZWN0b3IgIT0gLTEpCiAJCQl0cmFjZV9ibG9ja19yZW1hcChxLCBiaW8sIG9sZF9kZXYsIG9sZF9zZWN0b3IpOwogCi0JCXRyYWNlX2Jsb2NrX2Jpb19xdWV1ZShxLCBiaW8pOwotCiAJCW9sZF9zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAkJb2xkX2RldiA9IGJpby0+YmlfYmRldi0+YmRfZGV2OwogCiAJCWlmIChiaW9fY2hlY2tfZW9kKGJpbywgbnJfc2VjdG9ycykpCiAJCQlnb3RvIGVuZF9pbzsKIAotCQlpZiAoYmlvX2Rpc2NhcmQoYmlvKSAmJiAhcS0+cHJlcGFyZV9kaXNjYXJkX2ZuKSB7CisJCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSAmJgorCQkgICAgIXEtPnByZXBhcmVfZGlzY2FyZF9mbikgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIGVuZF9pbzsKIAkJfQogCisJCXRyYWNlX2Jsb2NrX2Jpb19xdWV1ZShxLCBiaW8pOworCiAJCXJldCA9IHEtPm1ha2VfcmVxdWVzdF9mbihxLCBiaW8pOwogCX0gd2hpbGUgKHJldCk7CiAKQEAgLTE2NTQsNiArMTY2MSw1MCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmxrX2luc2VydF9jbG9uZWRfcmVxdWVzdCk7CiAKKy8qKgorICogYmxrX3JxX2Vycl9ieXRlcyAtIGRldGVybWluZSBudW1iZXIgb2YgYnl0ZXMgdGlsbCB0aGUgbmV4dCBmYWlsdXJlIGJvdW5kYXJ5CisgKiBAcnE6IHJlcXVlc3QgdG8gZXhhbWluZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIEEgcmVxdWVzdCBjb3VsZCBiZSBtZXJnZSBvZiBJT3Mgd2hpY2ggcmVxdWlyZSBkaWZmZXJlbnQgZmFpbHVyZQorICogICAgIGhhbmRsaW5nLiAgVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2hpY2gKKyAqICAgICBjYW4gYmUgZmFpbGVkIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVxdWVzdCB3aXRob3V0CisgKiAgICAgY3Jvc3NpbmcgaW50byBhcmVhIHdoaWNoIG5lZWQgdG8gYmUgcmV0cmllZCBmdXJ0aGVyLgorICoKKyAqIFJldHVybjoKKyAqICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGZhaWwuCisgKgorICogQ29udGV4dDoKKyAqICAgICBxdWV1ZV9sb2NrIG11c3QgYmUgaGVsZC4KKyAqLwordW5zaWduZWQgaW50IGJsa19ycV9lcnJfYnl0ZXMoY29uc3Qgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXVuc2lnbmVkIGludCBmZiA9IHJxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfTUFTSzsKKwl1bnNpZ25lZCBpbnQgYnl0ZXMgPSAwOworCXN0cnVjdCBiaW8gKmJpbzsKKworCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfTUlYRURfTUVSR0UpKQorCQlyZXR1cm4gYmxrX3JxX2J5dGVzKHJxKTsKKworCS8qCisJICogQ3VycmVudGx5IHRoZSBvbmx5ICdtaXhpbmcnIHdoaWNoIGNhbiBoYXBwZW4gaXMgYmV0d2VlbgorCSAqIGRpZmZlcmVudCBmYXN0ZmFpbCB0eXBlcy4gIFdlIGNhbiBzYWZlbHkgZmFpbCBwb3J0aW9ucworCSAqIHdoaWNoIGhhdmUgYWxsIHRoZSBmYWlsZmFzdCBiaXRzIHRoYXQgdGhlIGZpcnN0IG9uZSBoYXMgLQorCSAqIHRoZSBvbmVzIHdoaWNoIGFyZSBhdCBsZWFzdCBhcyBlYWdlciB0byBmYWlsIGFzIHRoZSBmaXJzdAorCSAqIG9uZS4KKwkgKi8KKwlmb3IgKGJpbyA9IHJxLT5iaW87IGJpbzsgYmlvID0gYmlvLT5iaV9uZXh0KSB7CisJCWlmICgoYmlvLT5iaV9ydyAmIGZmKSAhPSBmZikKKwkJCWJyZWFrOworCQlieXRlcyArPSBiaW8tPmJpX3NpemU7CisJfQorCisJLyogdGhpcyBjb3VsZCBsZWFkIHRvIGluZmluaXRlIGxvb3AgKi8KKwlCVUdfT04oYmxrX3JxX2J5dGVzKHJxKSAmJiAhYnl0ZXMpOworCXJldHVybiBieXRlczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19ycV9lcnJfYnl0ZXMpOworCiBzdGF0aWMgdm9pZCBibGtfYWNjb3VudF9pb19jb21wbGV0aW9uKHN0cnVjdCByZXF1ZXN0ICpyZXEsIHVuc2lnbmVkIGludCBieXRlcykKIHsKIAlpZiAoYmxrX2RvX2lvX3N0YXQocmVxKSkgewpAQCAtMTY4Nyw3ICsxNzM4LDcgQEAKIAkJcGFydF9zdGF0X2luYyhjcHUsIHBhcnQsIGlvc1tyd10pOwogCQlwYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgdGlja3NbcnddLCBkdXJhdGlvbik7CiAJCXBhcnRfcm91bmRfc3RhdHMoY3B1LCBwYXJ0KTsKLQkJcGFydF9kZWNfaW5fZmxpZ2h0KHBhcnQpOworCQlwYXJ0X2RlY19pbl9mbGlnaHQocGFydCwgcncpOwogCiAJCXBhcnRfc3RhdF91bmxvY2soKTsKIAl9CkBAIC0xODA3LDggKzE4NTgsMTUgQEAKIAkgKiBhbmQgdG8gaXQgaXMgZnJlZWQgaXMgYWNjb3VudGVkIGFzIGlvIHRoYXQgaXMgaW4gcHJvZ3Jlc3MgYXQKIAkgKiB0aGUgZHJpdmVyIHNpZGUuCiAJICovCi0JaWYgKGJsa19hY2NvdW50X3JxKHJxKSkKKwlpZiAoYmxrX2FjY291bnRfcnEocnEpKSB7CiAJCXEtPmluX2ZsaWdodFtycV9pc19zeW5jKHJxKV0rKzsKKwkJLyoKKwkJICogTWFyayB0aGlzIGRldmljZSBhcyBzdXBwb3J0aW5nIGhhcmR3YXJlIHF1ZXVpbmcsIGlmCisJCSAqIHdlIGhhdmUgbW9yZSBJT3MgaW4gZmxpZ2h0IHRoYW4gNC4KKwkJICovCisJCWlmICghYmxrX3F1ZXVlX3F1ZXVpbmcocSkgJiYgcXVldWVfaW5fZmxpZ2h0KHEpID4gNCkKKwkJCXNldF9iaXQoUVVFVUVfRkxBR19DUSwgJnEtPnF1ZXVlX2ZsYWdzKTsKKwl9CiB9CiAKIC8qKgpAQCAtMjAwMCw2ICsyMDU4LDEyIEBACiAJaWYgKGJsa19mc19yZXF1ZXN0KHJlcSkgfHwgYmxrX2Rpc2NhcmRfcnEocmVxKSkKIAkJcmVxLT5fX3NlY3RvciArPSB0b3RhbF9ieXRlcyA+PiA5OwogCisJLyogbWl4ZWQgYXR0cmlidXRlcyBhbHdheXMgZm9sbG93IHRoZSBmaXJzdCBiaW8gKi8KKwlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfTUlYRURfTUVSR0UpIHsKKwkJcmVxLT5jbWRfZmxhZ3MgJj0gflJFUV9GQUlMRkFTVF9NQVNLOworCQlyZXEtPmNtZF9mbGFncyB8PSByZXEtPmJpby0+YmlfcncgJiBSRVFfRkFJTEZBU1RfTUFTSzsKKwl9CisKIAkvKgogCSAqIElmIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzIGlzIGxlc3MgdGhhbiB0aGUgZmlyc3Qgc2VnbWVudAogCSAqIHNpemUsIHNvbWV0aGluZyBoYXMgZ29uZSB0ZXJyaWJseSB3cm9uZy4KQEAgLTIxNzksNiArMjI0MywyNSBAQAogRVhQT1JUX1NZTUJPTChibGtfZW5kX3JlcXVlc3RfY3VyKTsKIAogLyoqCisgKiBibGtfZW5kX3JlcXVlc3RfZXJyIC0gRmluaXNoIGEgcmVxdWVzdCB0aWxsIHRoZSBuZXh0IGZhaWx1cmUgYm91bmRhcnkuCisgKiBAcnE6IHRoZSByZXF1ZXN0IHRvIGZpbmlzaCB0aWxsIHRoZSBuZXh0IGZhaWx1cmUgYm91bmRhcnkgZm9yCisgKiBAZXJyb3I6IG11c3QgYmUgbmVnYXRpdmUgZXJybm8KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBDb21wbGV0ZSBAcnEgdGlsbCB0aGUgbmV4dCBmYWlsdXJlIGJvdW5kYXJ5LgorICoKKyAqIFJldHVybjoKKyAqICAgICAlZmFsc2UgLSB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgcmVxdWVzdAorICogICAgICV0cnVlICAtIHN0aWxsIGJ1ZmZlcnMgcGVuZGluZyBmb3IgdGhpcyByZXF1ZXN0CisgKi8KK2Jvb2wgYmxrX2VuZF9yZXF1ZXN0X2VycihzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcikKK3sKKwlXQVJOX09OKGVycm9yID49IDApOworCXJldHVybiBibGtfZW5kX3JlcXVlc3QocnEsIGVycm9yLCBibGtfcnFfZXJyX2J5dGVzKHJxKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtfZW5kX3JlcXVlc3RfZXJyKTsKKworLyoqCiAgKiBfX2Jsa19lbmRfcmVxdWVzdCAtIEhlbHBlciBmdW5jdGlvbiBmb3IgZHJpdmVycyB0byBjb21wbGV0ZSB0aGUgcmVxdWVzdC4KICAqIEBycTogICAgICAgdGhlIHJlcXVlc3QgYmVpbmcgcHJvY2Vzc2VkCiAgKiBAZXJyb3I6ICAgICUwIGZvciBzdWNjZXNzLCA8ICUwIGZvciBlcnJvcgpAQCAtMjIzNywxMiArMjMyMCwzMSBAQAogfQogRVhQT1JUX1NZTUJPTChfX2Jsa19lbmRfcmVxdWVzdF9jdXIpOwogCisvKioKKyAqIF9fYmxrX2VuZF9yZXF1ZXN0X2VyciAtIEZpbmlzaCBhIHJlcXVlc3QgdGlsbCB0aGUgbmV4dCBmYWlsdXJlIGJvdW5kYXJ5LgorICogQHJxOiB0aGUgcmVxdWVzdCB0byBmaW5pc2ggdGlsbCB0aGUgbmV4dCBmYWlsdXJlIGJvdW5kYXJ5IGZvcgorICogQGVycm9yOiBtdXN0IGJlIG5lZ2F0aXZlIGVycm5vCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgQ29tcGxldGUgQHJxIHRpbGwgdGhlIG5leHQgZmFpbHVyZSBib3VuZGFyeS4gIE11c3QgYmUgY2FsbGVkCisgKiAgICAgd2l0aCBxdWV1ZSBsb2NrIGhlbGQuCisgKgorICogUmV0dXJuOgorICogICAgICVmYWxzZSAtIHdlIGFyZSBkb25lIHdpdGggdGhpcyByZXF1ZXN0CisgKiAgICAgJXRydWUgIC0gc3RpbGwgYnVmZmVycyBwZW5kaW5nIGZvciB0aGlzIHJlcXVlc3QKKyAqLworYm9vbCBfX2Jsa19lbmRfcmVxdWVzdF9lcnIoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpCit7CisJV0FSTl9PTihlcnJvciA+PSAwKTsKKwlyZXR1cm4gX19ibGtfZW5kX3JlcXVlc3QocnEsIGVycm9yLCBibGtfcnFfZXJyX2J5dGVzKHJxKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Jsa19lbmRfcmVxdWVzdF9lcnIpOworCiB2b2lkIGJsa19ycV9iaW9fcHJlcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkgICAgIHN0cnVjdCBiaW8gKmJpbykKIHsKLQkvKiBCaXQgMCAoUi9XKSBpcyBpZGVudGljYWwgaW4gcnEtPmNtZF9mbGFncyBhbmQgYmlvLT5iaV9ydywgYW5kCi0JICAgd2Ugd2FudCBCSU9fUldfQUhFQUQgKGJpdCAxKSB0byBpbXBseSBSRVFfRkFJTEZBU1QgKGJpdCAxKS4gKi8KLQlycS0+Y21kX2ZsYWdzIHw9IChiaW8tPmJpX3J3ICYgMyk7CisJLyogQml0IDAgKFIvVykgaXMgaWRlbnRpY2FsIGluIHJxLT5jbWRfZmxhZ3MgYW5kIGJpby0+YmlfcncgKi8KKwlycS0+Y21kX2ZsYWdzIHw9IGJpby0+YmlfcncgJiBSRVFfUlc7CiAKIAlpZiAoYmlvX2hhc19kYXRhKGJpbykpIHsKIAkJcnEtPm5yX3BoeXNfc2VnbWVudHMgPSBiaW9fcGh5c19zZWdtZW50cyhxLCBiaW8pOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWlvcG9sbC5jIGIvYmxvY2svYmxrLWlvcG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNTY0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9jay9ibGstaW9wb2xsLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHQtcG9sbCBoYW5kbGluZyBpbiB0aGUgYmxvY2sgbGF5ZXIuIFRoaXMKKyAqIGlzIHNpbWlsYXIgdG8gTkFQSSBmb3IgbmV0d29yayBkZXZpY2VzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsay1pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiYmxrLmgiCisKK2ludCBibGtfaW9wb2xsX2VuYWJsZWQgPSAxOworRVhQT1JUX1NZTUJPTChibGtfaW9wb2xsX2VuYWJsZWQpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGJsa19pb3BvbGxfYnVkZ2V0IF9fcmVhZF9tb3N0bHkgPSAyNTY7CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkLCBibGtfY3B1X2lvcG9sbCk7CisKKy8qKgorICogYmxrX2lvcG9sbF9zY2hlZCAtIFNjaGVkdWxlIGEgcnVuIG9mIHRoZSBpb3BvbGwgaGFuZGxlcgorICogQGlvcDogICAgICBUaGUgcGFyZW50IGlvcG9sbCBzdHJ1Y3R1cmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBBZGQgdGhpcyBibGtfaW9wb2xsIHN0cnVjdHVyZSB0byB0aGUgcGVuZGluZyBwb2xsIGxpc3QgYW5kIHRyaWdnZXIgdGhlCisgKiAgICAgcmFpc2Ugb2YgdGhlIGJsayBpb3BvbGwgc29mdGlycS4gVGhlIGRyaXZlciBtdXN0IGFscmVhZHkgaGF2ZSBnb3R0ZW4gYQorICogICAgIHN1Y2Nlc2Z1bCByZXR1cm4gZnJvbSBibGtfaW9wb2xsX3NjaGVkX3ByZXAoKSBiZWZvcmUgY2FsbGluZyB0aGlzLgorICoqLwordm9pZCBibGtfaW9wb2xsX3NjaGVkKHN0cnVjdCBibGtfaW9wb2xsICppb3ApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZpb3AtPmxpc3QsICZfX2dldF9jcHVfdmFyKGJsa19jcHVfaW9wb2xsKSk7CisJX19yYWlzZV9zb2Z0aXJxX2lycW9mZihCTE9DS19JT1BPTExfU09GVElSUSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChibGtfaW9wb2xsX3NjaGVkKTsKKworLyoqCisgKiBfX2Jsa19pb3BvbGxfY29tcGxldGUgLSBNYXJrIHRoaXMgQGlvcCBhcyB1bi1wb2xsZWQgYWdhaW4KKyAqIEBpb3A6ICAgICAgVGhlIHBhcmVudCBpb3BvbGwgc3RydWN0dXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgU2VlIGJsa19pb3BvbGxfY29tcGxldGUoKS4gVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMKKyAqICAgICBkaXNhYmxlZC4KKyAqKi8KK3ZvaWQgX19ibGtfaW9wb2xsX2NvbXBsZXRlKHN0cnVjdCBibGtfaW9wb2xsICppb3ApCit7CisJbGlzdF9kZWwoJmlvcC0+bGlzdCk7CisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJY2xlYXJfYml0X3VubG9jayhJT1BPTExfRl9TQ0hFRCwgJmlvcC0+c3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChfX2Jsa19pb3BvbGxfY29tcGxldGUpOworCisvKioKKyAqIGJsa19pb3BvbGxfY29tcGxldGUgLSBNYXJrIHRoaXMgQGlvcCBhcyB1bi1wb2xsZWQgYWdhaW4KKyAqIEBpb3A6ICAgICAgVGhlIHBhcmVudCBpb3BvbGwgc3RydWN0dXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgSWYgYSBkcml2ZXIgY29uc3VtZXMgbGVzcyB0aGFuIHRoZSBhc3NpZ25lZCBidWRnZXQgaW4gaXRzIHJ1biBvZiB0aGUKKyAqICAgICBpb3BvbGwgaGFuZGxlciwgaXQnbGwgZW5kIHRoZSBwb2xsZWQgbW9kZSBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoZQorICogICAgIGlvcG9sbCBoYW5kbGVyIHdpbGwgbm90IGJlIGludm9rZWQgYWdhaW4gYmVmb3JlIGJsa19pb3BvbGxfc2NoZWRfcHJlcCgpCisgKiAgICAgaXMgY2FsbGVkLgorICoqLwordm9pZCBibGtfaW9wb2xsX2NvbXBsZXRlKHN0cnVjdCBibGtfaW9wb2xsICppb3BvbGwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlfX2Jsa19pb3BvbGxfY29tcGxldGUoaW9wb2xsKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19pb3BvbGxfY29tcGxldGUpOworCitzdGF0aWMgdm9pZCBibGtfaW9wb2xsX3NvZnRpcnEoc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QgPSAmX19nZXRfY3B1X3ZhcihibGtfY3B1X2lvcG9sbCk7CisJaW50IHJlYXJtID0gMCwgYnVkZ2V0ID0gYmxrX2lvcG9sbF9idWRnZXQ7CisJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lID0gamlmZmllczsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkobGlzdCkpIHsKKwkJc3RydWN0IGJsa19pb3BvbGwgKmlvcDsKKwkJaW50IHdvcmssIHdlaWdodDsKKworCQkvKgorCQkgKiBJZiBzb2Z0aXJxIHdpbmRvdyBpcyBleGhhdXN0ZWQgdGhlbiBwdW50LgorCQkgKi8KKwkJaWYgKGJ1ZGdldCA8PSAwIHx8IHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnRfdGltZSkpIHsKKwkJCXJlYXJtID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJCS8qIEV2ZW4gdGhvdWdoIGludGVycnVwdHMgaGF2ZSBiZWVuIHJlLWVuYWJsZWQsIHRoaXMKKwkJICogYWNjZXNzIGlzIHNhZmUgYmVjYXVzZSBpbnRlcnJ1cHRzIGNhbiBvbmx5IGFkZCBuZXcKKwkJICogZW50cmllcyB0byB0aGUgdGFpbCBvZiB0aGlzIGxpc3QsIGFuZCBvbmx5IC0+cG9sbCgpCisJCSAqIGNhbGxzIGNhbiByZW1vdmUgdGhpcyBoZWFkIGVudHJ5IGZyb20gdGhlIGxpc3QuCisJCSAqLworCQlpb3AgPSBsaXN0X2VudHJ5KGxpc3QtPm5leHQsIHN0cnVjdCBibGtfaW9wb2xsLCBsaXN0KTsKKworCQl3ZWlnaHQgPSBpb3AtPndlaWdodDsKKwkJd29yayA9IDA7CisJCWlmICh0ZXN0X2JpdChJT1BPTExfRl9TQ0hFRCwgJmlvcC0+c3RhdGUpKQorCQkJd29yayA9IGlvcC0+cG9sbChpb3AsIHdlaWdodCk7CisKKwkJYnVkZ2V0IC09IHdvcms7CisKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCQkvKgorCQkgKiBEcml2ZXJzIG11c3Qgbm90IG1vZGlmeSB0aGUgaW9wb2xsIHN0YXRlLCBpZiB0aGV5CisJCSAqIGNvbnN1bWUgdGhlaXIgYXNzaWduZWQgd2VpZ2h0IChvciBtb3JlLCBzb21lIGRyaXZlcnMgY2FuJ3QKKwkJICogZWFzaWx5IGp1c3Qgc3RvcCBwcm9jZXNzaW5nLCB0aGV5IGhhdmUgdG8gY29tcGxldGUgYW4KKwkJICogZW50aXJlIG1hc2sgb2YgY29tbWFuZHMpLkluIHN1Y2ggY2FzZXMgdGhpcyBjb2RlCisJCSAqIHN0aWxsICJvd25zIiB0aGUgaW9wb2xsIGluc3RhbmNlIGFuZCB0aGVyZWZvcmUgY2FuCisJCSAqIG1vdmUgdGhlIGluc3RhbmNlIGFyb3VuZCBvbiB0aGUgbGlzdCBhdC13aWxsLgorCQkgKi8KKwkJaWYgKHdvcmsgPj0gd2VpZ2h0KSB7CisJCQlpZiAoYmxrX2lvcG9sbF9kaXNhYmxlX3BlbmRpbmcoaW9wKSkKKwkJCQlfX2Jsa19pb3BvbGxfY29tcGxldGUoaW9wKTsKKwkJCWVsc2UKKwkJCQlsaXN0X21vdmVfdGFpbCgmaW9wLT5saXN0LCBsaXN0KTsKKwkJfQorCX0KKworCWlmIChyZWFybSkKKwkJX19yYWlzZV9zb2Z0aXJxX2lycW9mZihCTE9DS19JT1BPTExfU09GVElSUSk7CisKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKKy8qKgorICogYmxrX2lvcG9sbF9kaXNhYmxlIC0gRGlzYWJsZSBpb3BvbGwgb24gdGhpcyBAaW9wCisgKiBAaW9wOiAgICAgIFRoZSBwYXJlbnQgaW9wb2xsIHN0cnVjdHVyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIERpc2FibGUgaW8gcG9sbGluZyBhbmQgd2FpdCBmb3IgYW55IHBlbmRpbmcgY2FsbGJhY2tzIHRvIGhhdmUgY29tcGxldGVkLgorICoqLwordm9pZCBibGtfaW9wb2xsX2Rpc2FibGUoc3RydWN0IGJsa19pb3BvbGwgKmlvcCkKK3sKKwlzZXRfYml0KElPUE9MTF9GX0RJU0FCTEUsICZpb3AtPnN0YXRlKTsKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChJT1BPTExfRl9TQ0hFRCwgJmlvcC0+c3RhdGUpKQorCQltc2xlZXAoMSk7CisJY2xlYXJfYml0KElPUE9MTF9GX0RJU0FCTEUsICZpb3AtPnN0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrX2lvcG9sbF9kaXNhYmxlKTsKKworLyoqCisgKiBibGtfaW9wb2xsX2VuYWJsZSAtIEVuYWJsZSBpb3BvbGwgb24gdGhpcyBAaW9wCisgKiBAaW9wOiAgICAgIFRoZSBwYXJlbnQgaW9wb2xsIHN0cnVjdHVyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIEVuYWJsZSBpb3BvbGwgb24gdGhpcyBAaW9wLiBOb3RlIHRoYXQgdGhlIGhhbmRsZXIgcnVuIHdpbGwgbm90IGJlCisgKiAgICAgc2NoZWR1bGVkLCBpdCB3aWxsIG9ubHkgbWFyayBpdCBhcyBhY3RpdmUuCisgKiovCit2b2lkIGJsa19pb3BvbGxfZW5hYmxlKHN0cnVjdCBibGtfaW9wb2xsICppb3ApCit7CisJQlVHX09OKCF0ZXN0X2JpdChJT1BPTExfRl9TQ0hFRCwgJmlvcC0+c3RhdGUpKTsKKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXRfdW5sb2NrKElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19pb3BvbGxfZW5hYmxlKTsKKworLyoqCisgKiBibGtfaW9wb2xsX2luaXQgLSBJbml0aWFsaXplIHRoaXMgQGlvcAorICogQGlvcDogICAgICBUaGUgcGFyZW50IGlvcG9sbCBzdHJ1Y3R1cmUKKyAqIEB3ZWlnaHQ6ICAgVGhlIGRlZmF1bHQgd2VpZ2h0IChvciBjb21tYW5kIGNvbXBsZXRpb24gYnVkZ2V0KQorICogQHBvbGxfZm46ICBUaGUgaGFuZGxlciB0byBpbnZva2UKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBJbml0aWFsaXplIHRoaXMgYmxrX2lvcG9sbCBzdHJ1Y3R1cmUuIEJlZm9yZSBiZWluZyBhY3RpdmVseSB1c2VkLCB0aGUKKyAqICAgICBkcml2ZXIgbXVzdCBjYWxsIGJsa19pb3BvbGxfZW5hYmxlKCkuCisgKiovCit2b2lkIGJsa19pb3BvbGxfaW5pdChzdHJ1Y3QgYmxrX2lvcG9sbCAqaW9wLCBpbnQgd2VpZ2h0LCBibGtfaW9wb2xsX2ZuICpwb2xsX2ZuKQoreworCW1lbXNldChpb3AsIDAsIHNpemVvZigqaW9wKSk7CisJSU5JVF9MSVNUX0hFQUQoJmlvcC0+bGlzdCk7CisJaW9wLT53ZWlnaHQgPSB3ZWlnaHQ7CisJaW9wLT5wb2xsID0gcG9sbF9mbjsKKwlzZXRfYml0KElPUE9MTF9GX1NDSEVELCAmaW9wLT5zdGF0ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGJsa19pb3BvbGxfaW5pdCk7CisKK3N0YXRpYyBpbnQgX19jcHVpbml0IGJsa19pb3BvbGxfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCit7CisJLyoKKwkgKiBJZiBhIENQVSBnb2VzIGF3YXksIHNwbGljZSBpdHMgZW50cmllcyB0byB0aGUgY3VycmVudCBDUFUKKwkgKiBhbmQgdHJpZ2dlciBhIHJ1biBvZiB0aGUgc29mdGlycQorCSAqLworCWlmIChhY3Rpb24gPT0gQ1BVX0RFQUQgfHwgYWN0aW9uID09IENQVV9ERUFEX0ZST1pFTikgeworCQlpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpIGhjcHU7CisKKwkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmcGVyX2NwdShibGtfY3B1X2lvcG9sbCwgY3B1KSwKKwkJCQkgJl9fZ2V0X2NwdV92YXIoYmxrX2NwdV9pb3BvbGwpKTsKKwkJX19yYWlzZV9zb2Z0aXJxX2lycW9mZihCTE9DS19JT1BPTExfU09GVElSUSk7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgYmxrX2lvcG9sbF9jcHVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwJPSBibGtfaW9wb2xsX2NwdV9ub3RpZnksCit9OworCitzdGF0aWMgX19pbml0IGludCBibGtfaW9wb2xsX3NldHVwKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKKwkJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUoYmxrX2NwdV9pb3BvbGwsIGkpKTsKKworCW9wZW5fc29mdGlycShCTE9DS19JT1BPTExfU09GVElSUSwgYmxrX2lvcG9sbF9zb2Z0aXJxKTsKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmJsa19pb3BvbGxfY3B1X25vdGlmaWVyKTsKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChibGtfaW9wb2xsX3NldHVwKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tZXJnZS5jIGIvYmxvY2svYmxrLW1lcmdlLmMKaW5kZXggZTE5OTk2Ny4uOTljYjVjZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1lcmdlLmMKKysrIGIvYmxvY2svYmxrLW1lcmdlLmMKQEAgLTMxMSw2ICszMTEsMzYgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoqCisgKiBibGtfcnFfc2V0X21peGVkX21lcmdlIC0gbWFyayBhIHJlcXVlc3QgYXMgbWl4ZWQgbWVyZ2UKKyAqIEBycTogcmVxdWVzdCB0byBtYXJrIGFzIG1peGVkIG1lcmdlCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgQHJxIGlzIGFib3V0IHRvIGJlIG1peGVkIG1lcmdlZC4gIE1ha2Ugc3VyZSB0aGUgYXR0cmlidXRlcworICogICAgIHdoaWNoIGNhbiBiZSBtaXhlZCBhcmUgc2V0IGluIGVhY2ggYmlvIGFuZCBtYXJrIEBycSBhcyBtaXhlZAorICogICAgIG1lcmdlZC4KKyAqLwordm9pZCBibGtfcnFfc2V0X21peGVkX21lcmdlKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwl1bnNpZ25lZCBpbnQgZmYgPSBycS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX01BU0s7CisJc3RydWN0IGJpbyAqYmlvOworCisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfTUlYRURfTUVSR0UpCisJCXJldHVybjsKKworCS8qCisJICogQHJxIHdpbGwgbm8gbG9uZ2VyIHJlcHJlc2VudCBtaXhhYmxlIGF0dHJpYnV0ZXMgZm9yIGFsbCB0aGUKKwkgKiBjb250YWluZWQgYmlvcy4gIEl0IHdpbGwganVzdCB0cmFjayB0aG9zZSBvZiB0aGUgZmlyc3Qgb25lLgorCSAqIERpc3RyaWJ1dGVzIHRoZSBhdHRyaWJ1dHMgdG8gZWFjaCBiaW8uCisJICovCisJZm9yIChiaW8gPSBycS0+YmlvOyBiaW87IGJpbyA9IGJpby0+YmlfbmV4dCkgeworCQlXQVJOX09OX09OQ0UoKGJpby0+YmlfcncgJiBSRVFfRkFJTEZBU1RfTUFTSykgJiYKKwkJCSAgICAgKGJpby0+YmlfcncgJiBSRVFfRkFJTEZBU1RfTUFTSykgIT0gZmYpOworCQliaW8tPmJpX3J3IHw9IGZmOworCX0KKwlycS0+Y21kX2ZsYWdzIHw9IFJFUV9NSVhFRF9NRVJHRTsKK30KKwogc3RhdGljIHZvaWQgYmxrX2FjY291bnRfaW9fbWVyZ2Uoc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlpZiAoYmxrX2RvX2lvX3N0YXQocmVxKSkgewpAQCAtMzIxLDcgKzM1MSw3IEBACiAJCXBhcnQgPSBkaXNrX21hcF9zZWN0b3JfcmN1KHJlcS0+cnFfZGlzaywgYmxrX3JxX3BvcyhyZXEpKTsKIAogCQlwYXJ0X3JvdW5kX3N0YXRzKGNwdSwgcGFydCk7Ci0JCXBhcnRfZGVjX2luX2ZsaWdodChwYXJ0KTsKKwkJcGFydF9kZWNfaW5fZmxpZ2h0KHBhcnQsIHJxX2RhdGFfZGlyKHJlcSkpOwogCiAJCXBhcnRfc3RhdF91bmxvY2soKTsKIAl9CkBAIC0zNTAsMTIgKzM4MCw2IEBACiAJaWYgKGJsa19pbnRlZ3JpdHlfcnEocmVxKSAhPSBibGtfaW50ZWdyaXR5X3JxKG5leHQpKQogCQlyZXR1cm4gMDsKIAotCS8qIGRvbid0IG1lcmdlIHJlcXVlc3RzIG9mIGRpZmZlcmVudCBmYWlsZmFzdCBzZXR0aW5ncyAqLwotCWlmIChibGtfZmFpbGZhc3RfZGV2KHJlcSkJIT0gYmxrX2ZhaWxmYXN0X2RldihuZXh0KQl8fAotCSAgICBibGtfZmFpbGZhc3RfdHJhbnNwb3J0KHJlcSkJIT0gYmxrX2ZhaWxmYXN0X3RyYW5zcG9ydChuZXh0KQl8fAotCSAgICBibGtfZmFpbGZhc3RfZHJpdmVyKHJlcSkJIT0gYmxrX2ZhaWxmYXN0X2RyaXZlcihuZXh0KSkKLQkJcmV0dXJuIDA7Ci0KIAkvKgogCSAqIElmIHdlIGFyZSBhbGxvd2VkIHRvIG1lcmdlLCB0aGVuIGFwcGVuZCBiaW8gbGlzdAogCSAqIGZyb20gbmV4dCB0byBycSBhbmQgcmVsZWFzZSBuZXh0LiBtZXJnZV9yZXF1ZXN0c19mbgpAQCAtMzY2LDYgKzM5MCwxOSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCisJICogSWYgZmFpbGZhc3Qgc2V0dGluZ3MgZGlzYWdyZWUgb3IgYW55IG9mIHRoZSB0d28gaXMgYWxyZWFkeQorCSAqIGEgbWl4ZWQgbWVyZ2UsIG1hcmsgYm90aCBhcyBtaXhlZCBiZWZvcmUgcHJvY2VlZGluZy4gIFRoaXMKKwkgKiBtYWtlcyBzdXJlIHRoYXQgYWxsIGludm9sdmVkIGJpb3MgaGF2ZSBtaXhhYmxlIGF0dHJpYnV0ZXMKKwkgKiBzZXQgcHJvcGVybHkuCisJICovCisJaWYgKChyZXEtPmNtZF9mbGFncyB8IG5leHQtPmNtZF9mbGFncykgJiBSRVFfTUlYRURfTUVSR0UgfHwKKwkgICAgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUX01BU0spICE9CisJICAgIChuZXh0LT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1RfTUFTSykpIHsKKwkJYmxrX3JxX3NldF9taXhlZF9tZXJnZShyZXEpOworCQlibGtfcnFfc2V0X21peGVkX21lcmdlKG5leHQpOworCX0KKworCS8qCiAJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGVpdGhlciBkb25lIGEgYmFjayBtZXJnZQogCSAqIG9yIGZyb250IG1lcmdlLiBXZSBuZWVkIHRoZSBzbWFsbGVyIHN0YXJ0X3RpbWUgb2YKIAkgKiB0aGUgbWVyZ2VkIHJlcXVlc3RzIHRvIGJlIHRoZSBjdXJyZW50IHJlcXVlc3QKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zZXR0aW5ncy5jIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKaW5kZXggNDc2ZDg3MC4uODM0MTNmZiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNldHRpbmdzLmMKKysrIGIvYmxvY2svYmxrLXNldHRpbmdzLmMKQEAgLTQyOCw2ICs0MjgsMjUgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX2lvX21pbik7CiAKIC8qKgorICogYmxrX2xpbWl0c19pb19vcHQgLSBzZXQgb3B0aW1hbCByZXF1ZXN0IHNpemUgZm9yIGEgZGV2aWNlCisgKiBAbGltaXRzOiB0aGUgcXVldWUgbGltaXRzCisgKiBAb3B0OiAgc21hbGxlc3QgSS9PIHNpemUgaW4gYnl0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgU3RvcmFnZSBkZXZpY2VzIG1heSByZXBvcnQgYW4gb3B0aW1hbCBJL08gc2l6ZSwgd2hpY2ggaXMgdGhlCisgKiAgIGRldmljZSdzIHByZWZlcnJlZCB1bml0IGZvciBzdXN0YWluZWQgSS9PLiAgVGhpcyBpcyByYXJlbHkgcmVwb3J0ZWQKKyAqICAgZm9yIGRpc2sgZHJpdmVzLiAgRm9yIFJBSUQgYXJyYXlzIGl0IGlzIHVzdWFsbHkgdGhlIHN0cmlwZSB3aWR0aCBvcgorICogICB0aGUgaW50ZXJuYWwgdHJhY2sgc2l6ZS4gIEEgcHJvcGVybHkgYWxpZ25lZCBtdWx0aXBsZSBvZgorICogICBvcHRpbWFsX2lvX3NpemUgaXMgdGhlIHByZWZlcnJlZCByZXF1ZXN0IHNpemUgZm9yIHdvcmtsb2FkcyB3aGVyZQorICogICBzdXN0YWluZWQgdGhyb3VnaHB1dCBpcyBkZXNpcmVkLgorICovCit2b2lkIGJsa19saW1pdHNfaW9fb3B0KHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cywgdW5zaWduZWQgaW50IG9wdCkKK3sKKwlsaW1pdHMtPmlvX29wdCA9IG9wdDsKK30KK0VYUE9SVF9TWU1CT0woYmxrX2xpbWl0c19pb19vcHQpOworCisvKioKICAqIGJsa19xdWV1ZV9pb19vcHQgLSBzZXQgb3B0aW1hbCByZXF1ZXN0IHNpemUgZm9yIHRoZSBxdWV1ZQogICogQHE6CXRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCiAgKiBAb3B0OiAgb3B0aW1hbCByZXF1ZXN0IHNpemUgaW4gYnl0ZXMKQEAgLTQ0Miw3ICs0NjEsNyBAQAogICovCiB2b2lkIGJsa19xdWV1ZV9pb19vcHQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBvcHQpCiB7Ci0JcS0+bGltaXRzLmlvX29wdCA9IG9wdDsKKwlibGtfbGltaXRzX2lvX29wdCgmcS0+bGltaXRzLCBvcHQpOwogfQogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfaW9fb3B0KTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN5c2ZzLmMgYi9ibG9jay9ibGstc3lzZnMuYwppbmRleCBkM2FhMmFhLi5iNzhjOWMzIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3lzZnMuYworKysgYi9ibG9jay9ibGstc3lzZnMuYwpAQCAtNDAsNyArNDAsMTIgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybCA9ICZxLT5ycTsKIAl1bnNpZ25lZCBsb25nIG5yOwotCWludCByZXQgPSBxdWV1ZV92YXJfc3RvcmUoJm5yLCBwYWdlLCBjb3VudCk7CisJaW50IHJldDsKKworCWlmICghcS0+cmVxdWVzdF9mbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBxdWV1ZV92YXJfc3RvcmUoJm5yLCBwYWdlLCBjb3VudCk7CiAJaWYgKG5yIDwgQkxLREVWX01JTl9SUSkKIAkJbnIgPSBCTEtERVZfTUlOX1JROwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDNmYWU2YWQuLjVlZTNkN2UgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCisrKyBiL2Jsb2NrL2Jsay5oCkBAIC0xMDQsNiArMTA0LDcgQEAKIGludCBhdHRlbXB0X2JhY2tfbWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSk7CiBpbnQgYXR0ZW1wdF9mcm9udF9tZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKTsKIHZvaWQgYmxrX3JlY2FsY19ycV9zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdCAqcnEpOwordm9pZCBibGtfcnFfc2V0X21peGVkX21lcmdlKHN0cnVjdCByZXF1ZXN0ICpycSk7CiAKIHZvaWQgYmxrX3F1ZXVlX2Nvbmdlc3Rpb25fdGhyZXNob2xkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggZmQ3MDgwZS4uMGUzODE0YiAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC0xMzQsMTMgKzEzNCw4IEBACiAJc3RydWN0IHJiX3Jvb3QgcHJpb190cmVlc1tDRlFfUFJJT19MSVNUU107CiAKIAl1bnNpZ25lZCBpbnQgYnVzeV9xdWV1ZXM7Ci0JLyoKLQkgKiBVc2VkIHRvIHRyYWNrIGFueSBwZW5kaW5nIHJ0IHJlcXVlc3RzIHNvIHdlIGNhbiBwcmUtZW1wdCBjdXJyZW50Ci0JICogbm9uLVJUIGNmcXEgaW4gc2VydmljZSB3aGVuIHRoaXMgdmFsdWUgaXMgbm9uLXplcm8uCi0JICovCi0JdW5zaWduZWQgaW50IGJ1c3lfcnRfcXVldWVzOwogCi0JaW50IHJxX2luX2RyaXZlcjsKKwlpbnQgcnFfaW5fZHJpdmVyWzJdOwogCWludCBzeW5jX2ZsaWdodDsKIAogCS8qCkBAIC0xOTEsNyArMTg2LDYgQEAKIAlDRlFfQ0ZRUV9GTEFHX29uX3JyID0gMCwJLyogb24gcm91bmQtcm9iaW4gYnVzeSBsaXN0ICovCiAJQ0ZRX0NGUVFfRkxBR193YWl0X3JlcXVlc3QsCS8qIHdhaXRpbmcgZm9yIGEgcmVxdWVzdCAqLwogCUNGUV9DRlFRX0ZMQUdfbXVzdF9kaXNwYXRjaCwJLyogbXVzdCBiZSBhbGxvd2VkIGEgZGlzcGF0Y2ggKi8KLQlDRlFfQ0ZRUV9GTEFHX211c3RfYWxsb2MsCS8qIG11c3QgYmUgYWxsb3dlZCBycSBhbGxvYyAqLwogCUNGUV9DRlFRX0ZMQUdfbXVzdF9hbGxvY19zbGljZSwJLyogcGVyLXNsaWNlIG11c3RfYWxsb2MgZmxhZyAqLwogCUNGUV9DRlFRX0ZMQUdfZmlmb19leHBpcmUsCS8qIEZJRk8gY2hlY2tlZCBpbiB0aGlzIHNsaWNlICovCiAJQ0ZRX0NGUVFfRkxBR19pZGxlX3dpbmRvdywJLyogc2xpY2UgaWRsaW5nIGVuYWJsZWQgKi8KQEAgLTIxOCw3ICsyMTIsNiBAQAogQ0ZRX0NGUVFfRk5TKG9uX3JyKTsKIENGUV9DRlFRX0ZOUyh3YWl0X3JlcXVlc3QpOwogQ0ZRX0NGUVFfRk5TKG11c3RfZGlzcGF0Y2gpOwotQ0ZRX0NGUVFfRk5TKG11c3RfYWxsb2MpOwogQ0ZRX0NGUVFfRk5TKG11c3RfYWxsb2Nfc2xpY2UpOwogQ0ZRX0NGUVFfRk5TKGZpZm9fZXhwaXJlKTsKIENGUV9DRlFRX0ZOUyhpZGxlX3dpbmRvdyk7CkBAIC0yMzksNiArMjMyLDExIEBACiBzdGF0aWMgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjZnFfY2ljX2xvb2t1cChzdHJ1Y3QgY2ZxX2RhdGEgKiwKIAkJCQkJCXN0cnVjdCBpb19jb250ZXh0ICopOwogCitzdGF0aWMgaW5saW5lIGludCBycV9pbl9kcml2ZXIoc3RydWN0IGNmcV9kYXRhICpjZnFkKQoreworCXJldHVybiBjZnFkLT5ycV9pbl9kcml2ZXJbMF0gKyBjZnFkLT5ycV9pbl9kcml2ZXJbMV07Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmcV9xdWV1ZSAqY2ljX3RvX2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCiAJCQkJCSAgICBpbnQgaXNfc3luYykKIHsKQEAgLTI1Nyw3ICsyNTUsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBjZnFfYmlvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQogewotCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEIHx8IGJpb19zeW5jKGJpbykpCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQgfHwgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKQEAgLTY0OCw4ICs2NDYsNiBAQAogCUJVR19PTihjZnFfY2ZxcV9vbl9ycihjZnFxKSk7CiAJY2ZxX21hcmtfY2ZxcV9vbl9ycihjZnFxKTsKIAljZnFkLT5idXN5X3F1ZXVlcysrOwotCWlmIChjZnFfY2xhc3NfcnQoY2ZxcSkpCi0JCWNmcWQtPmJ1c3lfcnRfcXVldWVzKys7CiAKIAljZnFfcmVzb3J0X3JyX2xpc3QoY2ZxZCwgY2ZxcSk7CiB9CkBAIC02NzMsOCArNjY5LDYgQEAKIAogCUJVR19PTighY2ZxZC0+YnVzeV9xdWV1ZXMpOwogCWNmcWQtPmJ1c3lfcXVldWVzLS07Ci0JaWYgKGNmcV9jbGFzc19ydChjZnFxKSkKLQkJY2ZxZC0+YnVzeV9ydF9xdWV1ZXMtLTsKIH0KIAogLyoKQEAgLTc2MCw5ICs3NTQsOSBAQAogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCi0JY2ZxZC0+cnFfaW5fZHJpdmVyKys7CisJY2ZxZC0+cnFfaW5fZHJpdmVyW3JxX2lzX3N5bmMocnEpXSsrOwogCWNmcV9sb2dfY2ZxcShjZnFkLCBSUV9DRlFRKHJxKSwgImFjdGl2YXRlIHJxLCBkcnY9JWQiLAotCQkJCQkJY2ZxZC0+cnFfaW5fZHJpdmVyKTsKKwkJCQkJCXJxX2luX2RyaXZlcihjZnFkKSk7CiAKIAljZnFkLT5sYXN0X3Bvc2l0aW9uID0gYmxrX3JxX3BvcyhycSkgKyBibGtfcnFfc2VjdG9ycyhycSk7CiB9CkBAIC03NzAsMTEgKzc2NCwxMiBAQAogc3RhdGljIHZvaWQgY2ZxX2RlYWN0aXZhdGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOworCWNvbnN0IGludCBzeW5jID0gcnFfaXNfc3luYyhycSk7CiAKLQlXQVJOX09OKCFjZnFkLT5ycV9pbl9kcml2ZXIpOwotCWNmcWQtPnJxX2luX2RyaXZlci0tOworCVdBUk5fT04oIWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXSk7CisJY2ZxZC0+cnFfaW5fZHJpdmVyW3N5bmNdLS07CiAJY2ZxX2xvZ19jZnFxKGNmcWQsIFJRX0NGUVEocnEpLCAiZGVhY3RpdmF0ZSBycSwgZHJ2PSVkIiwKLQkJCQkJCWNmcWQtPnJxX2luX2RyaXZlcik7CisJCQkJCQlycV9pbl9kcml2ZXIoY2ZxZCkpOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfcmVtb3ZlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJxKQpAQCAtMTA4MCw3ICsxMDc1LDcgQEAKIAkvKgogCSAqIHN0aWxsIHJlcXVlc3RzIHdpdGggdGhlIGRyaXZlciwgZG9uJ3QgaWRsZQogCSAqLwotCWlmIChjZnFkLT5ycV9pbl9kcml2ZXIpCisJaWYgKHJxX2luX2RyaXZlcihjZnFkKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTExMTUsNiArMTExMCw3IEBACiAKIAljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgImRpc3BhdGNoX2luc2VydCIpOwogCisJY2ZxcS0+bmV4dF9ycSA9IGNmcV9maW5kX25leHRfcnEoY2ZxZCwgY2ZxcSwgcnEpOwogCWNmcV9yZW1vdmVfcmVxdWVzdChycSk7CiAJY2ZxcS0+ZGlzcGF0Y2hlZCsrOwogCWVsdl9kaXNwYXRjaF9zb3J0KHEsIHJxKTsKQEAgLTExNzksMjAgKzExNzUsNiBAQAogCQlnb3RvIGV4cGlyZTsKIAogCS8qCi0JICogSWYgd2UgaGF2ZSBhIFJUIGNmcXEgd2FpdGluZywgdGhlbiB3ZSBwcmUtZW1wdCB0aGUgY3VycmVudCBub24tcnQKLQkgKiBjZnFxLgotCSAqLwotCWlmICghY2ZxX2NsYXNzX3J0KGNmcXEpICYmIGNmcWQtPmJ1c3lfcnRfcXVldWVzKSB7Ci0JCS8qCi0JCSAqIFdlIHNpbXVsYXRlIHRoaXMgYXMgY2ZxcSB0aW1lZCBvdXQgc28gdGhhdCBpdCBnZXRzIHRvIGJhbmsKLQkJICogdGhlIHJlbWFpbmluZyBvZiBpdHMgdGltZSBzbGljZS4KLQkJICovCi0JCWNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCAicHJlZW1wdCIpOwotCQljZnFfc2xpY2VfZXhwaXJlZChjZnFkLCAxKTsKLQkJZ290byBuZXdfcXVldWU7Ci0JfQotCi0JLyoKIAkgKiBUaGUgYWN0aXZlIHF1ZXVlIGhhcyByZXF1ZXN0cyBhbmQgaXNuJ3QgZXhwaXJlZCwgYWxsb3cgaXQgdG8KIAkgKiBkaXNwYXRjaC4KIAkgKi8KQEAgLTEzMTIsNiArMTI5NCwxMiBAQAogCQlyZXR1cm4gMDsKIAogCS8qCisJICogRHJhaW4gYXN5bmMgcmVxdWVzdHMgYmVmb3JlIHdlIHN0YXJ0IHN5bmMgSU8KKwkgKi8KKwlpZiAoY2ZxX2NmcXFfaWRsZV93aW5kb3coY2ZxcSkgJiYgY2ZxZC0+cnFfaW5fZHJpdmVyW0JMS19SV19BU1lOQ10pCisJCXJldHVybiAwOworCisJLyoKIAkgKiBJZiB0aGlzIGlzIGFuIGFzeW5jIHF1ZXVlIGFuZCB3ZSBoYXZlIHN5bmMgSU8gaW4gZmxpZ2h0LCBsZXQgaXQgd2FpdAogCSAqLwogCWlmIChjZnFkLT5zeW5jX2ZsaWdodCAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKQEAgLTEzNjIsNyArMTM1MCw3IEBACiAJCWNmcV9zbGljZV9leHBpcmVkKGNmcWQsIDApOwogCX0KIAotCWNmcV9sb2coY2ZxZCwgImRpc3BhdGNoZWQgYSByZXF1ZXN0Iik7CisJY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJkaXNwYXRjaGVkIGEgcmVxdWVzdCIpOwogCXJldHVybiAxOwogfQogCkBAIC0yMTMwLDExICsyMTE4LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIGNmcV91cGRhdGVfaHdfdGFnKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCkKIHsKLQlpZiAoY2ZxZC0+cnFfaW5fZHJpdmVyID4gY2ZxZC0+cnFfaW5fZHJpdmVyX3BlYWspCi0JCWNmcWQtPnJxX2luX2RyaXZlcl9wZWFrID0gY2ZxZC0+cnFfaW5fZHJpdmVyOworCWlmIChycV9pbl9kcml2ZXIoY2ZxZCkgPiBjZnFkLT5ycV9pbl9kcml2ZXJfcGVhaykKKwkJY2ZxZC0+cnFfaW5fZHJpdmVyX3BlYWsgPSBycV9pbl9kcml2ZXIoY2ZxZCk7CiAKIAlpZiAoY2ZxZC0+cnFfcXVldWVkIDw9IENGUV9IV19RVUVVRV9NSU4gJiYKLQkgICAgY2ZxZC0+cnFfaW5fZHJpdmVyIDw9IENGUV9IV19RVUVVRV9NSU4pCisJICAgIHJxX2luX2RyaXZlcihjZnFkKSA8PSBDRlFfSFdfUVVFVUVfTUlOKQogCQlyZXR1cm47CiAKIAlpZiAoY2ZxZC0+aHdfdGFnX3NhbXBsZXMrKyA8IDUwKQpAQCAtMjE2MSw5ICsyMTQ5LDkgQEAKIAogCWNmcV91cGRhdGVfaHdfdGFnKGNmcWQpOwogCi0JV0FSTl9PTighY2ZxZC0+cnFfaW5fZHJpdmVyKTsKKwlXQVJOX09OKCFjZnFkLT5ycV9pbl9kcml2ZXJbc3luY10pOwogCVdBUk5fT04oIWNmcXEtPmRpc3BhdGNoZWQpOwotCWNmcWQtPnJxX2luX2RyaXZlci0tOworCWNmcWQtPnJxX2luX2RyaXZlcltzeW5jXS0tOwogCWNmcXEtPmRpc3BhdGNoZWQtLTsKIAogCWlmIChjZnFfY2ZxcV9zeW5jKGNmcXEpKQpAQCAtMjE5Nyw3ICsyMTg1LDcgQEAKIAkJCWNmcV9hcm1fc2xpY2VfdGltZXIoY2ZxZCk7CiAJfQogCi0JaWYgKCFjZnFkLT5ycV9pbl9kcml2ZXIpCisJaWYgKCFycV9pbl9kcml2ZXIoY2ZxZCkpCiAJCWNmcV9zY2hlZHVsZV9kaXNwYXRjaChjZnFkKTsKIH0KIApAQCAtMjIyOSw4ICsyMjE3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgX19jZnFfbWF5X3F1ZXVlKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7Ci0JaWYgKChjZnFfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSkgfHwgY2ZxX2NmcXFfbXVzdF9hbGxvYyhjZnFxKSkgJiYKLQkgICAgIWNmcV9jZnFxX211c3RfYWxsb2Nfc2xpY2UoY2ZxcSkpIHsKKwlpZiAoY2ZxX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpICYmICFjZnFfY2ZxcV9tdXN0X2FsbG9jX3NsaWNlKGNmcXEpKSB7CiAJCWNmcV9tYXJrX2NmcXFfbXVzdF9hbGxvY19zbGljZShjZnFxKTsKIAkJcmV0dXJuIEVMVl9NUVVFVUVfTVVTVDsKIAl9CkBAIC0yMzE3LDcgKzIzMDQsNiBAQAogCX0KIAogCWNmcXEtPmFsbG9jYXRlZFtyd10rKzsKLQljZnFfY2xlYXJfY2ZxcV9tdXN0X2FsbG9jKGNmcXEpOwogCWF0b21pY19pbmMoJmNmcXEtPnJlZik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDJkNTExZjkuLjE5NzViNjEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNzksNyArNzksOCBAQAogCS8qCiAJICogRG9uJ3QgbWVyZ2UgZmlsZSBzeXN0ZW0gcmVxdWVzdHMgYW5kIGRpc2NhcmQgcmVxdWVzdHMKIAkgKi8KLQlpZiAoYmlvX2Rpc2NhcmQoYmlvKSAhPSBiaW9fZGlzY2FyZChycS0+YmlvKSkKKwlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgIT0KKwkgICAgYmlvX3J3X2ZsYWdnZWQocnEtPmJpbywgQklPX1JXX0RJU0NBUkQpKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0xMDAsMTkgKzEwMSw2IEBACiAJaWYgKGJpb19pbnRlZ3JpdHkoYmlvKSAhPSBibGtfaW50ZWdyaXR5X3JxKHJxKSkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIERvbid0IG1lcmdlIGlmIGZhaWxmYXN0IHNldHRpbmdzIGRvbid0IG1hdGNoLgotCSAqCi0JICogRklYTUU6IFRoZSBuZWdhdGlvbiBpbiBmcm9udCBvZiBlYWNoIGNvbmRpdGlvbiBpcyBuZWNlc3NhcnkKLQkgKiBiZWNhdXNlIGJpbyBhbmQgcmVxdWVzdCBmbGFncyB1c2UgZGlmZmVyZW50IGJpdCBwb3NpdGlvbnMKLQkgKiBhbmQgdGhlIGFjY2Vzc29ycyByZXR1cm4gdGhvc2UgYml0cyBkaXJlY3RseS4gIFRoaXMKLQkgKiB1Z2xpbmVzcyB3aWxsIHNvb24gZ28gYXdheS4KLQkgKi8KLQlpZiAoIWJpb19mYWlsZmFzdF9kZXYoYmlvKQkgIT0gIWJsa19mYWlsZmFzdF9kZXYocnEpCXx8Ci0JICAgICFiaW9fZmFpbGZhc3RfdHJhbnNwb3J0KGJpbykgIT0gIWJsa19mYWlsZmFzdF90cmFuc3BvcnQocnEpCXx8Ci0JICAgICFiaW9fZmFpbGZhc3RfZHJpdmVyKGJpbykJICE9ICFibGtfZmFpbGZhc3RfZHJpdmVyKHJxKSkKLQkJcmV0dXJuIDA7Ci0KIAlpZiAoIWVsdl9pb3NjaGVkX2FsbG93X21lcmdlKHJxLCBiaW8pKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZjRjNjRjMi4uNWI3NmJmNSAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC04NjksNiArODY5LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGlnbm1lbnRfb2Zmc2V0LCBTX0lSVUdPLCBkaXNrX2FsaWdubWVudF9vZmZzZXRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoY2FwYWJpbGl0eSwgU19JUlVHTywgZGlza19jYXBhYmlsaXR5X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIFNfSVJVR08sIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgU19JUlVHTywgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTsKICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1QKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9mYWlsID0KIAlfX0FUVFIobWFrZS1pdC1mYWlsLCBTX0lSVUdPfFNfSVdVU1IsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpOwpAQCAtODg4LDYgKzg4OSw3IEBACiAJJmRldl9hdHRyX2FsaWdubWVudF9vZmZzZXQuYXR0ciwKIAkmZGV2X2F0dHJfY2FwYWJpbGl0eS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0LmF0dHIsCisJJmRldl9hdHRyX2luZmxpZ2h0LmF0dHIsCiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCiAJJmRldl9hdHRyX2ZhaWwuYXR0ciwKICNlbmRpZgpAQCAtMTA1Myw3ICsxMDU1LDcgQEAKIAkJCSAgIHBhcnRfc3RhdF9yZWFkKGhkLCBtZXJnZXNbMV0pLAogCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJ0X3N0YXRfcmVhZChoZCwgc2VjdG9yc1sxXSksCiAJCQkgICBqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKGhkLCB0aWNrc1sxXSkpLAotCQkJICAgaGQtPmluX2ZsaWdodCwKKwkJCSAgIHBhcnRfaW5fZmxpZ2h0KGhkKSwKIAkJCSAgIGppZmZpZXNfdG9fbXNlY3MocGFydF9zdGF0X3JlYWQoaGQsIGlvX3RpY2tzKSksCiAJCQkgICBqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKGhkLCB0aW1lX2luX3F1ZXVlKSkKIAkJCSk7CkBAIC0xMjE1LDYgKzEyMTcsMTYgQEAKIAogRVhQT1JUX1NZTUJPTChwdXRfZGlzayk7CiAKK3N0YXRpYyB2b2lkIHNldF9kaXNrX3JvX3VldmVudChzdHJ1Y3QgZ2VuZGlzayAqZ2QsIGludCBybykKK3sKKwljaGFyIGV2ZW50W10gPSAiRElTS19STz0xIjsKKwljaGFyICplbnZwW10gPSB7IGV2ZW50LCBOVUxMIH07CisKKwlpZiAoIXJvKQorCQlldmVudFs4XSA9ICcwJzsKKwlrb2JqZWN0X3VldmVudF9lbnYoJmRpc2tfdG9fZGV2KGdkKS0+a29iaiwgS09CSl9DSEFOR0UsIGVudnApOworfQorCiB2b2lkIHNldF9kZXZpY2Vfcm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IGZsYWcpCiB7CiAJYmRldi0+YmRfcGFydC0+cG9saWN5ID0gZmxhZzsKQEAgLTEyMjcsOCArMTIzOSwxMiBAQAogCXN0cnVjdCBkaXNrX3BhcnRfaXRlciBwaXRlcjsKIAlzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0OwogCi0JZGlza19wYXJ0X2l0ZXJfaW5pdCgmcGl0ZXIsIGRpc2ssCi0JCQkgICAgRElTS19QSVRFUl9JTkNMX0VNUFRZIHwgRElTS19QSVRFUl9JTkNMX1BBUlQwKTsKKwlpZiAoZGlzay0+cGFydDAucG9saWN5ICE9IGZsYWcpIHsKKwkJc2V0X2Rpc2tfcm9fdWV2ZW50KGRpc2ssIGZsYWcpOworCQlkaXNrLT5wYXJ0MC5wb2xpY3kgPSBmbGFnOworCX0KKworCWRpc2tfcGFydF9pdGVyX2luaXQoJnBpdGVyLCBkaXNrLCBESVNLX1BJVEVSX0lOQ0xfRU1QVFkpOwogCXdoaWxlICgocGFydCA9IGRpc2tfcGFydF9pdGVyX25leHQoJnBpdGVyKSkpCiAJCXBhcnQtPnBvbGljeSA9IGZsYWc7CiAJZGlza19wYXJ0X2l0ZXJfZXhpdCgmcGl0ZXIpOwpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggNTAwZTRjNy4uZDNlNmI1OCAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYworKysgYi9ibG9jay9pb2N0bC5jCkBAIC0xMTIsMjIgKzExMiw5IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIHZvaWQgYmxrX2lvY19kaXNjYXJkX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKLXsKLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgPT0gLUVPUE5PVFNVUFApCi0JCQlzZXRfYml0KEJJT19FT1BOT1RTVVBQLCAmYmlvLT5iaV9mbGFncyk7Ci0JCWNsZWFyX2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKLQl9Ci0JY29tcGxldGUoYmlvLT5iaV9wcml2YXRlKTsKLX0KLQogc3RhdGljIGludCBibGtfaW9jdGxfZGlzY2FyZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1aW50NjRfdCBzdGFydCwKIAkJCSAgICAgdWludDY0X3QgbGVuKQogewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoYmRldik7Ci0JaW50IHJldCA9IDA7Ci0KIAlpZiAoc3RhcnQgJiA1MTEpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChsZW4gJiA1MTEpCkBAIC0xMzcsNDAgKzEyNCw4IEBACiAKIAlpZiAoc3RhcnQgKyBsZW4gPiAoYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXEtPnByZXBhcmVfZGlzY2FyZF9mbikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0Jd2hpbGUgKGxlbiAmJiAhcmV0KSB7Ci0JCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwotCQlzdHJ1Y3QgYmlvICpiaW87Ci0KLQkJYmlvID0gYmlvX2FsbG9jKEdGUF9LRVJORUwsIDApOwotCi0JCWJpby0+YmlfZW5kX2lvID0gYmxrX2lvY19kaXNjYXJkX2VuZGlvOwotCQliaW8tPmJpX2JkZXYgPSBiZGV2OwotCQliaW8tPmJpX3ByaXZhdGUgPSAmd2FpdDsKLQkJYmlvLT5iaV9zZWN0b3IgPSBzdGFydDsKLQotCQlpZiAobGVuID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpIHsKLQkJCWJpby0+Ymlfc2l6ZSA9IHF1ZXVlX21heF9od19zZWN0b3JzKHEpIDw8IDk7Ci0JCQlsZW4gLT0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSk7Ci0JCQlzdGFydCArPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKLQkJfSBlbHNlIHsKLQkJCWJpby0+Ymlfc2l6ZSA9IGxlbiA8PCA5OwotCQkJbGVuID0gMDsKLQkJfQotCQlzdWJtaXRfYmlvKERJU0NBUkRfTk9CQVJSSUVSLCBiaW8pOwotCi0JCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOwotCi0JCWlmIChiaW9fZmxhZ2dlZChiaW8sIEJJT19FT1BOT1RTVVBQKSkKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQllbHNlIGlmICghYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpKQotCQkJcmV0ID0gLUVJTzsKLQkJYmlvX3B1dChiaW8pOwotCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCwgbGVuLCBHRlBfS0VSTkVMLAorCQkJCSAgICBESVNDQVJEX0ZMX1dBSVQpOwogfQogCiBzdGF0aWMgaW50IHB1dF91c2hvcnQodW5zaWduZWQgbG9uZyBhcmcsIHVuc2lnbmVkIHNob3J0IHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW1iYS9idXMuYyBiL2RyaXZlcnMvYW1iYS9idXMuYwppbmRleCAyNDY2NTA2Li5mNjBiMmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FtYmEvYnVzLmMKKysrIGIvZHJpdmVycy9hbWJhL2J1cy5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIGludCBhbWJhX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiwgc3RydWN0IHJlc291cmNlICpwYXJlbnQpCiB7CiAJdTMyIHBpZCwgY2lkOworCXUzMiBzaXplOwogCXZvaWQgX19pb21lbSAqdG1wOwogCWludCBpLCByZXQ7CiAKQEAgLTIyOSwxNiArMjMwLDI1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfb3V0OwogCi0JdG1wID0gaW9yZW1hcChkZXYtPnJlcy5zdGFydCwgU1pfNEspOworCS8qCisJICogRHluYW1pY2FsbHkgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSByZXNvdXJjZQorCSAqIGFuZCB1c2UgdGhpcyBmb3IgaW9tYXAKKwkgKi8KKwlzaXplID0gcmVzb3VyY2Vfc2l6ZSgmZGV2LT5yZXMpOworCXRtcCA9IGlvcmVtYXAoZGV2LT5yZXMuc3RhcnQsIHNpemUpOwogCWlmICghdG1wKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCisJLyoKKwkgKiBSZWFkIHBpZCBhbmQgY2lkIGJhc2VkIG9uIHNpemUgb2YgcmVzb3VyY2UKKwkgKiB0aGV5IGFyZSBsb2NhdGVkIGF0IGVuZCBvZiByZWdpb24KKwkgKi8KIAlmb3IgKHBpZCA9IDAsIGkgPSAwOyBpIDwgNDsgaSsrKQotCQlwaWQgfD0gKHJlYWRsKHRtcCArIDB4ZmUwICsgNCAqIGkpICYgMjU1KSA8PCAoaSAqIDgpOworCQlwaWQgfD0gKHJlYWRsKHRtcCArIHNpemUgLSAweDIwICsgNCAqIGkpICYgMjU1KSA8PCAoaSAqIDgpOwogCWZvciAoY2lkID0gMCwgaSA9IDA7IGkgPCA0OyBpKyspCi0JCWNpZCB8PSAocmVhZGwodG1wICsgMHhmZjAgKyA0ICogaSkgJiAyNTUpIDw8IChpICogOCk7CisJCWNpZCB8PSAocmVhZGwodG1wICsgc2l6ZSAtIDB4MTAgKyA0ICogaSkgJiAyNTUpIDw8IChpICogOCk7CiAKIAlpb3VubWFwKHRtcCk7CiAKQEAgLTM1MywxMSArMzYzLDE0IEBACiBpbnQgYW1iYV9yZXF1ZXN0X3JlZ2lvbnMoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IHJldCA9IDA7CisJdTMyIHNpemU7CiAKIAlpZiAoIW5hbWUpCiAJCW5hbWUgPSBkZXYtPmRldi5kcml2ZXItPm5hbWU7CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlcy5zdGFydCwgU1pfNEssIG5hbWUpKQorCXNpemUgPSByZXNvdXJjZV9zaXplKCZkZXYtPnJlcyk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihkZXYtPnJlcy5zdGFydCwgc2l6ZSwgbmFtZSkpCiAJCXJldCA9IC1FQlVTWTsKIAogCXJldHVybiByZXQ7CkBAIC0zNzEsNyArMzg0LDEwIEBACiAgKi8KIHZvaWQgYW1iYV9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCiB7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+cmVzLnN0YXJ0LCBTWl80Syk7CisJdTMyIHNpemU7CisKKwlzaXplID0gcmVzb3VyY2Vfc2l6ZSgmZGV2LT5yZXMpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPnJlcy5zdGFydCwgc2l6ZSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woYW1iYV9kcml2ZXJfcmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDZiOTY5ZjguLjAxY2UyNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCQkJCQlwcmUgPSAxOwogCQkJCWJyZWFrOwogCQkJY2FzZSByb3VuZF9uZWFyZXN0OgotCQkJCXByZSA9IChicisoYzw8ZGl2KS8yKS8oYzw8ZGl2KTsKKwkJCQlwcmUgPSBESVZfUk9VTkRfQ0xPU0VTVChiciwgYzw8ZGl2KTsKIAkJCQkvLyBidXQgcCBtdXN0IGJlIG5vbi16ZXJvCiAJCQkJaWYgKCFwcmUpCiAJCQkJCXByZSA9IDE7CkBAIC02NzEsNyArNjcxLDcgQEAKIAkJCQkJcHJlID0gRElWX1JPVU5EX1VQKGJyLCBjPDxkaXYpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIHJvdW5kX25lYXJlc3Q6Ci0JCQkJCXByZSA9IChicisoYzw8ZGl2KS8yKS8oYzw8ZGl2KTsKKwkJCQkJcHJlID0gRElWX1JPVU5EX0NMT1NFU1QoYnIsIGM8PGRpdik7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6IC8qIHJvdW5kX3VwICovCiAJCQkJCXByZSA9IGJyLyhjPDxkaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwppbmRleCA5MzU5NjEzLi4zMDczMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYworKysgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiAJfQogCiAJc25yID0gbmV4dF9zdHJpbmcoc2tiKTsKLQlpZiAoIXN0cikKKwlpZiAoIXNucikKIAkJcmV0dXJuIC1FSU87CiAJYXR0biA9IG5leHRfc3RyaW5nKHNrYik7CiAJaWYgKCFhdHRuKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2RkLmMgYi9kcml2ZXJzL2Jhc2UvZGQuYwppbmRleCBmMDEwNjg3Li43YjM0YjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZGQuYworKysgYi9kcml2ZXJzL2Jhc2UvZGQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlICJiYXNlLmgiCiAjaW5jbHVkZSAicG93ZXIvcG93ZXIuaCIKQEAgLTIwMiw3ICsyMDMsMTAgQEAKIAlwcl9kZWJ1ZygiYnVzOiAnJXMnOiAlczogbWF0Y2hlZCBkZXZpY2UgJXMgd2l0aCBkcml2ZXIgJXNcbiIsCiAJCSBkcnYtPmJ1cy0+bmFtZSwgX19mdW5jX18sIGRldl9uYW1lKGRldiksIGRydi0+bmFtZSk7CiAKKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOworCXBtX3J1bnRpbWVfYmFycmllcihkZXYpOwogCXJldCA9IHJlYWxseV9wcm9iZShkZXYsIGRydik7CisJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0NSw3ICsyNDksOSBAQAogCQkJcmV0ID0gMDsKIAkJfQogCX0gZWxzZSB7CisJCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7CiAJCXJldCA9IGJ1c19mb3JfZWFjaF9kcnYoZGV2LT5idXMsIE5VTEwsIGRldiwgX19kZXZpY2VfYXR0YWNoKTsKKwkJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwogCX0KIAl1cCgmZGV2LT5zZW0pOwogCXJldHVybiByZXQ7CkBAIC0zMDYsNiArMzEyLDkgQEAKIAogCWRydiA9IGRldi0+ZHJpdmVyOwogCWlmIChkcnYpIHsKKwkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoZGV2KTsKKwkJcG1fcnVudGltZV9iYXJyaWVyKGRldik7CisKIAkJZHJpdmVyX3N5c2ZzX3JlbW92ZShkZXYpOwogCiAJCWlmIChkZXYtPmJ1cykKQEAgLTMyNCw2ICszMzMsOCBAQAogCQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZGV2LT5idXMtPnAtPmJ1c19ub3RpZmllciwKIAkJCQkJCSAgICAgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUiwKIAkJCQkJCSAgICAgZGV2KTsKKworCQlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDQ1NjU5NGIuLjBmN2Q0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlICJiYXNlLmgiCiAKQEAgLTYyNSwzMCArNjI2LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBsYXRmb3JtX2xlZ2FjeV9zdXNwZW5kX2xhdGUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoZGV2LT5kcml2ZXIgJiYgcGRydi0+c3VzcGVuZF9sYXRlKQotCQlyZXQgPSBwZHJ2LT5zdXNwZW5kX2xhdGUocGRldiwgbWVzZyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBsYXRmb3JtX2xlZ2FjeV9yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChkZXYtPmRyaXZlciAmJiBwZHJ2LT5yZXN1bWVfZWFybHkpCi0JCXJldCA9IHBkcnYtPnJlc3VtZV9lYXJseShwZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgcGxhdGZvcm1fbGVnYWN5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CkBAIC02ODAsNiArNjU3LDEzIEBACiAJCWRydi0+cG0tPmNvbXBsZXRlKGRldik7CiB9CiAKKyNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKworI2RlZmluZSBwbGF0Zm9ybV9wbV9wcmVwYXJlCQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX2NvbXBsZXRlCQlOVUxMCisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCisKICNpZmRlZiBDT05GSUdfU1VTUEVORAogCiBzdGF0aWMgaW50IHBsYXRmb3JtX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNzExLDggKzY5NSw2IEBACiAJaWYgKGRydi0+cG0pIHsKIAkJaWYgKGRydi0+cG0tPnN1c3BlbmRfbm9pcnEpCiAJCQlyZXQgPSBkcnYtPnBtLT5zdXNwZW5kX25vaXJxKGRldik7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmRfbGF0ZShkZXYsIFBNU0dfU1VTUEVORCk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTc0Nyw4ICs3MjksNiBAQAogCWlmIChkcnYtPnBtKSB7CiAJCWlmIChkcnYtPnBtLT5yZXN1bWVfbm9pcnEpCiAJCQlyZXQgPSBkcnYtPnBtLT5yZXN1bWVfbm9pcnEoZGV2KTsKLQl9IGVsc2UgewotCQlyZXQgPSBwbGF0Zm9ybV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTc5NCw4ICs3NzQsNiBAQAogCWlmIChkcnYtPnBtKSB7CiAJCWlmIChkcnYtPnBtLT5mcmVlemVfbm9pcnEpCiAJCQlyZXQgPSBkcnYtPnBtLT5mcmVlemVfbm9pcnEoZGV2KTsKLQl9IGVsc2UgewotCQlyZXQgPSBwbGF0Zm9ybV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19GUkVFWkUpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC04MzAsOCArODA4LDYgQEAKIAlpZiAoZHJ2LT5wbSkgewogCQlpZiAoZHJ2LT5wbS0+dGhhd19ub2lycSkKIAkJCXJldCA9IGRydi0+cG0tPnRoYXdfbm9pcnEoZGV2KTsKLQl9IGVsc2UgewotCQlyZXQgPSBwbGF0Zm9ybV9sZWdhY3lfcmVzdW1lX2Vhcmx5KGRldik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTg2Niw4ICs4NDIsNiBAQAogCWlmIChkcnYtPnBtKSB7CiAJCWlmIChkcnYtPnBtLT5wb3dlcm9mZl9ub2lycSkKIAkJCXJldCA9IGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxKGRldik7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcGxhdGZvcm1fbGVnYWN5X3N1c3BlbmRfbGF0ZShkZXYsIFBNU0dfSElCRVJOQVRFKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTAyLDggKzg3Niw2IEBACiAJaWYgKGRydi0+cG0pIHsKIAkJaWYgKGRydi0+cG0tPnJlc3RvcmVfbm9pcnEpCiAJCQlyZXQgPSBkcnYtPnBtLT5yZXN0b3JlX25vaXJxKGRldik7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcGxhdGZvcm1fbGVnYWN5X3Jlc3VtZV9lYXJseShkZXYpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05MjIsNyArODk0LDMyIEBACiAKICNlbmRpZiAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBwbGF0Zm9ybV9kZXZfcG1fb3BzID0geworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisKK2ludCBfX3dlYWsgcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK307CisKK2ludCBfX3dlYWsgcGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAtRU5PU1lTOworfTsKKworaW50IF9fd2VhayBwbGF0Zm9ybV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAtRU5PU1lTOworfTsKKworI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUgTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV9ydW50aW1lX2lkbGUgTlVMTAorCisjZW5kaWYgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwbGF0Zm9ybV9kZXZfcG1fb3BzID0gewogCS5wcmVwYXJlID0gcGxhdGZvcm1fcG1fcHJlcGFyZSwKIAkuY29tcGxldGUgPSBwbGF0Zm9ybV9wbV9jb21wbGV0ZSwKIAkuc3VzcGVuZCA9IHBsYXRmb3JtX3BtX3N1c3BlbmQsCkBAIC05MzcsMjIgKzkzNCwxNyBAQAogCS50aGF3X25vaXJxID0gcGxhdGZvcm1fcG1fdGhhd19ub2lycSwKIAkucG93ZXJvZmZfbm9pcnEgPSBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycSwKIAkucmVzdG9yZV9ub2lycSA9IHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEsCisJLnJ1bnRpbWVfc3VzcGVuZCA9IHBsYXRmb3JtX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBwbGF0Zm9ybV9wbV9ydW50aW1lX3Jlc3VtZSwKKwkucnVudGltZV9pZGxlID0gcGxhdGZvcm1fcG1fcnVudGltZV9pZGxlLAogfTsKIAotI2RlZmluZSBQTEFURk9STV9QTV9PUFNfUFRSCSgmcGxhdGZvcm1fZGV2X3BtX29wcykKLQotI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwotCi0jZGVmaW5lIFBMQVRGT1JNX1BNX09QU19QVFIJTlVMTAotCi0jZW5kaWYgLyogIUNPTkZJR19QTV9TTEVFUCAqLwotCiBzdHJ1Y3QgYnVzX3R5cGUgcGxhdGZvcm1fYnVzX3R5cGUgPSB7CiAJLm5hbWUJCT0gInBsYXRmb3JtIiwKIAkuZGV2X2F0dHJzCT0gcGxhdGZvcm1fZGV2X2F0dHJzLAogCS5tYXRjaAkJPSBwbGF0Zm9ybV9tYXRjaCwKIAkudWV2ZW50CQk9IHBsYXRmb3JtX3VldmVudCwKLQkucG0JCT0gUExBVEZPUk1fUE1fT1BTX1BUUiwKKwkucG0JCT0gJnBsYXRmb3JtX2Rldl9wbV9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fYnVzX3R5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUKaW5kZXggOTExMjA4Yi4uM2NlMzUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZQpAQCAtMSw1ICsxLDYgQEAKIG9iai0kKENPTkZJR19QTSkJKz0gc3lzZnMubwogb2JqLSQoQ09ORklHX1BNX1NMRUVQKQkrPSBtYWluLm8KK29iai0kKENPTkZJR19QTV9SVU5USU1FKQkrPSBydW50aW1lLm8KIG9iai0kKENPTkZJR19QTV9UUkFDRV9SVEMpCSs9IHRyYWNlLm8KIAogY2NmbGFncy0kKENPTkZJR19ERUJVR19EUklWRVIpIDo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IDU4YTNlNTcuLmUwZGM0MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9yZXN1bWUtdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNDksNyArNTAsMTcgQEAKIHN0YXRpYyBib29sIHRyYW5zaXRpb25fc3RhcnRlZDsKIAogLyoqCi0gKglkZXZpY2VfcG1fbG9jayAtIGxvY2sgdGhlIGxpc3Qgb2YgYWN0aXZlIGRldmljZXMgdXNlZCBieSB0aGUgUE0gY29yZQorICogZGV2aWNlX3BtX2luaXQgLSBJbml0aWFsaXplIHRoZSBQTS1yZWxhdGVkIHBhcnQgb2YgYSBkZXZpY2Ugb2JqZWN0LgorICogQGRldjogRGV2aWNlIG9iamVjdCBiZWluZyBpbml0aWFsaXplZC4KKyAqLwordm9pZCBkZXZpY2VfcG1faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZGV2LT5wb3dlci5zdGF0dXMgPSBEUE1fT047CisJcG1fcnVudGltZV9pbml0KGRldik7Cit9CisKKy8qKgorICogZGV2aWNlX3BtX2xvY2sgLSBMb2NrIHRoZSBsaXN0IG9mIGFjdGl2ZSBkZXZpY2VzIHVzZWQgYnkgdGhlIFBNIGNvcmUuCiAgKi8KIHZvaWQgZGV2aWNlX3BtX2xvY2sodm9pZCkKIHsKQEAgLTU3LDcgKzY4LDcgQEAKIH0KIAogLyoqCi0gKglkZXZpY2VfcG1fdW5sb2NrIC0gdW5sb2NrIHRoZSBsaXN0IG9mIGFjdGl2ZSBkZXZpY2VzIHVzZWQgYnkgdGhlIFBNIGNvcmUKKyAqIGRldmljZV9wbV91bmxvY2sgLSBVbmxvY2sgdGhlIGxpc3Qgb2YgYWN0aXZlIGRldmljZXMgdXNlZCBieSB0aGUgUE0gY29yZS4KICAqLwogdm9pZCBkZXZpY2VfcG1fdW5sb2NrKHZvaWQpCiB7CkBAIC02NSw4ICs3Niw4IEBACiB9CiAKIC8qKgotICoJZGV2aWNlX3BtX2FkZCAtIGFkZCBhIGRldmljZSB0byB0aGUgbGlzdCBvZiBhY3RpdmUgZGV2aWNlcwotICoJQGRldjoJRGV2aWNlIHRvIGJlIGFkZGVkIHRvIHRoZSBsaXN0CisgKiBkZXZpY2VfcG1fYWRkIC0gQWRkIGEgZGV2aWNlIHRvIHRoZSBQTSBjb3JlJ3MgbGlzdCBvZiBhY3RpdmUgZGV2aWNlcy4KKyAqIEBkZXY6IERldmljZSB0byBhZGQgdG8gdGhlIGxpc3QuCiAgKi8KIHZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC05MiwxMCArMTAzLDggQEAKIH0KIAogLyoqCi0gKglkZXZpY2VfcG1fcmVtb3ZlIC0gcmVtb3ZlIGEgZGV2aWNlIGZyb20gdGhlIGxpc3Qgb2YgYWN0aXZlIGRldmljZXMKLSAqCUBkZXY6CURldmljZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QKLSAqCi0gKglUaGlzIGZ1bmN0aW9uIGFsc28gcmVtb3ZlcyB0aGUgZGV2aWNlJ3MgUE0tcmVsYXRlZCBzeXNmcyBhdHRyaWJ1dGVzLgorICogZGV2aWNlX3BtX3JlbW92ZSAtIFJlbW92ZSBhIGRldmljZSBmcm9tIHRoZSBQTSBjb3JlJ3MgbGlzdCBvZiBhY3RpdmUgZGV2aWNlcy4KKyAqIEBkZXY6IERldmljZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QuCiAgKi8KIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0xMDUsMTIgKzExNCwxMyBAQAogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5wb3dlci5lbnRyeSk7CiAJbXV0ZXhfdW5sb2NrKCZkcG1fbGlzdF9tdHgpOworCXBtX3J1bnRpbWVfcmVtb3ZlKGRldik7CiB9CiAKIC8qKgotICoJZGV2aWNlX3BtX21vdmVfYmVmb3JlIC0gbW92ZSBkZXZpY2UgaW4gZHBtX2xpc3QKLSAqCUBkZXZhOiAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKLSAqCUBkZXZiOiAgRGV2aWNlIEBkZXZhIHNob3VsZCBjb21lIGJlZm9yZQorICogZGV2aWNlX3BtX21vdmVfYmVmb3JlIC0gTW92ZSBkZXZpY2UgaW4gdGhlIFBNIGNvcmUncyBsaXN0IG9mIGFjdGl2ZSBkZXZpY2VzLgorICogQGRldmE6IERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0LgorICogQGRldmI6IERldmljZSBAZGV2YSBzaG91bGQgY29tZSBiZWZvcmUuCiAgKi8KIHZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKmRldmEsIHN0cnVjdCBkZXZpY2UgKmRldmIpCiB7CkBAIC0xMjQsOSArMTM0LDkgQEAKIH0KIAogLyoqCi0gKglkZXZpY2VfcG1fbW92ZV9hZnRlciAtIG1vdmUgZGV2aWNlIGluIGRwbV9saXN0Ci0gKglAZGV2YTogIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0Ci0gKglAZGV2YjogIERldmljZSBAZGV2YSBzaG91bGQgY29tZSBhZnRlcgorICogZGV2aWNlX3BtX21vdmVfYWZ0ZXIgLSBNb3ZlIGRldmljZSBpbiB0aGUgUE0gY29yZSdzIGxpc3Qgb2YgYWN0aXZlIGRldmljZXMuCisgKiBAZGV2YTogRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QuCisgKiBAZGV2YjogRGV2aWNlIEBkZXZhIHNob3VsZCBjb21lIGFmdGVyLgogICovCiB2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKmRldmEsIHN0cnVjdCBkZXZpY2UgKmRldmIpCiB7CkBAIC0xNDAsOCArMTUwLDggQEAKIH0KIAogLyoqCi0gKiAJZGV2aWNlX3BtX21vdmVfbGFzdCAtIG1vdmUgZGV2aWNlIHRvIGVuZCBvZiBkcG1fbGlzdAotICogCUBkZXY6ICAgRGV2aWNlIHRvIG1vdmUgaW4gZHBtX2xpc3QKKyAqIGRldmljZV9wbV9tb3ZlX2xhc3QgLSBNb3ZlIGRldmljZSB0byBlbmQgb2YgdGhlIFBNIGNvcmUncyBsaXN0IG9mIGRldmljZXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdC4KICAqLwogdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE1MiwxMyArMTYyLDE0IEBACiB9CiAKIC8qKgotICoJcG1fb3AgLSBleGVjdXRlIHRoZSBQTSBvcGVyYXRpb24gYXBwcm9waWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQKLSAqCUBkZXY6CURldmljZS4KLSAqCUBvcHM6CVBNIG9wZXJhdGlvbnMgdG8gY2hvb3NlIGZyb20uCi0gKglAc3RhdGU6CVBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIHBtX29wIC0gRXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcHJpYXRlIGZvciBnaXZlbiBQTSBldmVudC4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAb3BzOiBQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKi8KLXN0YXRpYyBpbnQgcG1fb3Aoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BtX29wcyAqb3BzLAotCQkJcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBwbV9vcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCSBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqb3BzLAorCQkgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBlcnJvciA9IDA7CiAKQEAgLTIxMiwxNSArMjIzLDE2IEBACiB9CiAKIC8qKgotICoJcG1fbm9pcnFfb3AgLSBleGVjdXRlIHRoZSBQTSBvcGVyYXRpb24gYXBwcm9waWF0ZSBmb3IgZ2l2ZW4gUE0gZXZlbnQKLSAqCUBkZXY6CURldmljZS4KLSAqCUBvcHM6CVBNIG9wZXJhdGlvbnMgdG8gY2hvb3NlIGZyb20uCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIHBtX25vaXJxX29wIC0gRXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcHJpYXRlIGZvciBnaXZlbiBQTSBldmVudC4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAb3BzOiBQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKgotICoJVGhlIG9wZXJhdGlvbiBpcyBleGVjdXRlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYnkgdGhlIG9ubHkgcmVtYWluaW5nCi0gKglmdW5jdGlvbmFsIENQVSBpbiB0aGUgc3lzdGVtLgorICogVGhlIGRyaXZlciBvZiBAZGV2IHdpbGwgbm90IHJlY2VpdmUgaW50ZXJydXB0cyB3aGlsZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nCisgKiBleGVjdXRlZC4KICAqLwotc3RhdGljIGludCBwbV9ub2lycV9vcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsCitzdGF0aWMgaW50IHBtX25vaXJxX29wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpvcHMsCiAJCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGVycm9yID0gMDsKQEAgLTMxNSwxMSArMzI3LDEyIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVzdW1lIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKioKLSAqCWRldmljZV9yZXN1bWVfbm9pcnEgLSBQb3dlciBvbiBvbmUgZGV2aWNlIChlYXJseSByZXN1bWUpLgotICoJQGRldjoJRGV2aWNlLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkZXZpY2VfcmVzdW1lX25vaXJxIC0gRXhlY3V0ZSBhbiAiZWFybHkgcmVzdW1lIiBjYWxsYmFjayBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCU11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqIFRoZSBkcml2ZXIgb2YgQGRldiB3aWxsIG5vdCByZWNlaXZlIGludGVycnVwdHMgd2hpbGUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZworICogZXhlY3V0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgZGV2aWNlX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTM0MSwyMCArMzU0LDE4IEBACiB9CiAKIC8qKgotICoJZHBtX3Jlc3VtZV9ub2lycSAtIFBvd2VyIG9uIGFsbCByZWd1bGFyIChub24tc3lzZGV2KSBkZXZpY2VzLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkcG1fcmVzdW1lX25vaXJxIC0gRXhlY3V0ZSAiZWFybHkgcmVzdW1lIiBjYWxsYmFja3MgZm9yIG5vbi1zeXNkZXYgZGV2aWNlcy4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCUNhbGwgdGhlICJub2lycSIgcmVzdW1lIGhhbmRsZXJzIGZvciBhbGwgZGV2aWNlcyBtYXJrZWQgYXMKLSAqCURQTV9PRkZfSVJRIGFuZCBlbmFibGUgZGV2aWNlIGRyaXZlcnMgdG8gcmVjZWl2ZSBpbnRlcnJ1cHRzLgotICoKLSAqCU11c3QgYmUgY2FsbGVkIHVuZGVyIGRwbV9saXN0X210eC4gIERldmljZSBkcml2ZXJzIHNob3VsZCBub3QgcmVjZWl2ZQotICoJaW50ZXJydXB0cyB3aGlsZSBpdCdzIGJlaW5nIGV4ZWN1dGVkLgorICogQ2FsbCB0aGUgIm5vaXJxIiByZXN1bWUgaGFuZGxlcnMgZm9yIGFsbCBkZXZpY2VzIG1hcmtlZCBhcyBEUE1fT0ZGX0lSUSBhbmQKKyAqIGVuYWJsZSBkZXZpY2UgZHJpdmVycyB0byByZWNlaXZlIGludGVycnVwdHMuCiAgKi8KIHZvaWQgZHBtX3Jlc3VtZV9ub2lycShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKKwl0cmFuc2l0aW9uX3N0YXJ0ZWQgPSBmYWxzZTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmRwbV9saXN0LCBwb3dlci5lbnRyeSkKIAkJaWYgKGRldi0+cG93ZXIuc3RhdHVzID4gRFBNX09GRikgewogCQkJaW50IGVycm9yOwpAQCAtMzcwLDkgKzM4MSw5IEBACiBFWFBPUlRfU1lNQk9MX0dQTChkcG1fcmVzdW1lX25vaXJxKTsKIAogLyoqCi0gKglkZXZpY2VfcmVzdW1lIC0gUmVzdG9yZSBzdGF0ZSBmb3Igb25lIGRldmljZS4KLSAqCUBkZXY6CURldmljZS4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZGV2aWNlX3Jlc3VtZSAtIEV4ZWN1dGUgInJlc3VtZSIgY2FsbGJhY2tzIGZvciBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKi8KIHN0YXRpYyBpbnQgZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTQyMSwxMSArNDMyLDExIEBACiB9CiAKIC8qKgotICoJZHBtX3Jlc3VtZSAtIFJlc3VtZSBldmVyeSBkZXZpY2UuCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRwbV9yZXN1bWUgLSBFeGVjdXRlICJyZXN1bWUiIGNhbGxiYWNrcyBmb3Igbm9uLXN5c2RldiBkZXZpY2VzLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKgotICoJRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgInJlc3VtZSIgY2FsbGJhY2sgZm9yIGFsbCBkZXZpY2VzIHRoZSBzdGF0dXMgb2YKLSAqCXdoaWNoIGluZGljYXRlcyB0aGF0IHRoZXkgYXJlIGluYWN0aXZlLgorICogRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgInJlc3VtZSIgY2FsbGJhY2sgZm9yIGFsbCBkZXZpY2VzIHdob3NlIHN0YXR1cworICogaW5kaWNhdGVzIHRoYXQgdGhleSBhcmUgc3VzcGVuZGVkLgogICovCiBzdGF0aWMgdm9pZCBkcG1fcmVzdW1lKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTQzMyw3ICs0NDQsNiBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7Ci0JdHJhbnNpdGlvbl9zdGFydGVkID0gZmFsc2U7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcG1fbGlzdCkpIHsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKGRwbV9saXN0Lm5leHQpOwogCkBAIC00NjIsOSArNDcyLDkgQEAKIH0KIAogLyoqCi0gKglkZXZpY2VfY29tcGxldGUgLSBDb21wbGV0ZSBhIFBNIHRyYW5zaXRpb24gZm9yIGdpdmVuIGRldmljZQotICoJQGRldjoJRGV2aWNlLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkZXZpY2VfY29tcGxldGUgLSBDb21wbGV0ZSBhIFBNIHRyYW5zaXRpb24gZm9yIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqLwogc3RhdGljIHZvaWQgZGV2aWNlX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNDg5LDExICs0OTksMTEgQEAKIH0KIAogLyoqCi0gKglkcG1fY29tcGxldGUgLSBDb21wbGV0ZSBhIFBNIHRyYW5zaXRpb24gZm9yIGFsbCBkZXZpY2VzLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkcG1fY29tcGxldGUgLSBDb21wbGV0ZSBhIFBNIHRyYW5zaXRpb24gZm9yIGFsbCBub24tc3lzZGV2IGRldmljZXMuCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglFeGVjdXRlIHRoZSAtPmNvbXBsZXRlKCkgY2FsbGJhY2tzIGZvciBhbGwgZGV2aWNlcyB0aGF0IGFyZSBub3QgbWFya2VkCi0gKglhcyBEUE1fT04uCisgKiBFeGVjdXRlIHRoZSAtPmNvbXBsZXRlKCkgY2FsbGJhY2tzIGZvciBhbGwgZGV2aWNlcyB3aG9zZSBQTSBzdGF0dXMgaXMgbm90CisgKiBEUE1fT04gKHRoaXMgYWxsb3dzIG5ldyBkZXZpY2VzIHRvIGJlIHJlZ2lzdGVyZWQpLgogICovCiBzdGF0aWMgdm9pZCBkcG1fY29tcGxldGUocG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNTEwLDYgKzUyMCw3IEBACiAJCQltdXRleF91bmxvY2soJmRwbV9saXN0X210eCk7CiAKIAkJCWRldmljZV9jb21wbGV0ZShkZXYsIHN0YXRlKTsKKwkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOwogCiAJCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQl9CkBAIC01MjIsMTEgKzUzMywxMSBAQAogfQogCiAvKioKLSAqCWRwbV9yZXN1bWVfZW5kIC0gUmVzdG9yZSBzdGF0ZSBvZiBlYWNoIGRldmljZSBpbiBzeXN0ZW0uCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRwbV9yZXN1bWVfZW5kIC0gRXhlY3V0ZSAicmVzdW1lIiBjYWxsYmFja3MgYW5kIGNvbXBsZXRlIHN5c3RlbSB0cmFuc2l0aW9uLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKgotICoJUmVzdW1lIGFsbCB0aGUgZGV2aWNlcywgdW5sb2NrIHRoZW0gYWxsLCBhbmQgYWxsb3cgbmV3Ci0gKglkZXZpY2VzIHRvIGJlIHJlZ2lzdGVyZWQgb25jZSBhZ2Fpbi4KKyAqIEV4ZWN1dGUgInJlc3VtZSIgY2FsbGJhY2tzIGZvciBhbGwgZGV2aWNlcyBhbmQgY29tcGxldGUgdGhlIFBNIHRyYW5zaXRpb24gb2YKKyAqIHRoZSBzeXN0ZW0uCiAgKi8KIHZvaWQgZHBtX3Jlc3VtZV9lbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNTQwLDkgKzU1MSwxMSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN1c3BlbmQgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKgotICoJcmVzdW1lX2V2ZW50IC0gcmV0dXJuIGEgUE0gbWVzc2FnZSByZXByZXNlbnRpbmcgdGhlIHJlc3VtZSBldmVudAotICoJICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byBnaXZlbiBzbGVlcCBzdGF0ZS4KLSAqCUBzbGVlcF9zdGF0ZTogUE0gbWVzc2FnZSByZXByZXNlbnRpbmcgYSBzbGVlcCBzdGF0ZS4KKyAqIHJlc3VtZV9ldmVudCAtIFJldHVybiBhICJyZXN1bWUiIG1lc3NhZ2UgZm9yIGdpdmVuICJzdXNwZW5kIiBzbGVlcCBzdGF0ZS4KKyAqIEBzbGVlcF9zdGF0ZTogUE0gbWVzc2FnZSByZXByZXNlbnRpbmcgYSBzbGVlcCBzdGF0ZS4KKyAqCisgKiBSZXR1cm4gYSBQTSBtZXNzYWdlIHJlcHJlc2VudGluZyB0aGUgcmVzdW1lIGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4KKyAqIHNsZWVwIHN0YXRlLgogICovCiBzdGF0aWMgcG1fbWVzc2FnZV90IHJlc3VtZV9ldmVudChwbV9tZXNzYWdlX3Qgc2xlZXBfc3RhdGUpCiB7CkBAIC01NTksMTEgKzU3MiwxMiBAQAogfQogCiAvKioKLSAqCWRldmljZV9zdXNwZW5kX25vaXJxIC0gU2h1dCBkb3duIG9uZSBkZXZpY2UgKGxhdGUgc3VzcGVuZCkuCi0gKglAZGV2OglEZXZpY2UuCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqIGRldmljZV9zdXNwZW5kX25vaXJxIC0gRXhlY3V0ZSBhICJsYXRlIHN1c3BlbmQiIGNhbGxiYWNrIGZvciBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKgotICoJVGhpcyBpcyBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIG9mZiBhbmQgb25seSBhIHNpbmdsZSBDUFUgcnVubmluZy4KKyAqIFRoZSBkcml2ZXIgb2YgQGRldiB3aWxsIG5vdCByZWNlaXZlIGludGVycnVwdHMgd2hpbGUgdGhpcyBmdW5jdGlvbiBpcyBiZWluZworICogZXhlY3V0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgZGV2aWNlX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC01ODAsMTMgKzU5NCwxMSBAQAogfQogCiAvKioKLSAqCWRwbV9zdXNwZW5kX25vaXJxIC0gUG93ZXIgZG93biBhbGwgcmVndWxhciAobm9uLXN5c2RldikgZGV2aWNlcy4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZHBtX3N1c3BlbmRfbm9pcnEgLSBFeGVjdXRlICJsYXRlIHN1c3BlbmQiIGNhbGxiYWNrcyBmb3Igbm9uLXN5c2RldiBkZXZpY2VzLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKgotICoJUHJldmVudCBkZXZpY2UgZHJpdmVycyBmcm9tIHJlY2VpdmluZyBpbnRlcnJ1cHRzIGFuZCBjYWxsIHRoZSAibm9pcnEiCi0gKglzdXNwZW5kIGhhbmRsZXJzLgotICoKLSAqCU11c3QgYmUgY2FsbGVkIHVuZGVyIGRwbV9saXN0X210eC4KKyAqIFByZXZlbnQgZGV2aWNlIGRyaXZlcnMgZnJvbSByZWNlaXZpbmcgaW50ZXJydXB0cyBhbmQgY2FsbCB0aGUgIm5vaXJxIiBzdXNwZW5kCisgKiBoYW5kbGVycyBmb3IgYWxsIG5vbi1zeXNkZXYgZGV2aWNlcy4KICAqLwogaW50IGRwbV9zdXNwZW5kX25vaXJxKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTYxMSw5ICs2MjMsOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZHBtX3N1c3BlbmRfbm9pcnEpOwogCiAvKioKLSAqCWRldmljZV9zdXNwZW5kIC0gU2F2ZSBzdGF0ZSBvZiBvbmUgZGV2aWNlLgotICoJQGRldjoJRGV2aWNlLgotICoJQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCisgKiBkZXZpY2Vfc3VzcGVuZCAtIEV4ZWN1dGUgInN1c3BlbmQiIGNhbGxiYWNrcyBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICovCiBzdGF0aWMgaW50IGRldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNjYwLDEwICs2NzIsOCBAQAogfQogCiAvKioKLSAqCWRwbV9zdXNwZW5kIC0gU3VzcGVuZCBldmVyeSBkZXZpY2UuCi0gKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KLSAqCi0gKglFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSAic3VzcGVuZCIgY2FsbGJhY2tzIGZvciBhbGwgZGV2aWNlcy4KKyAqIGRwbV9zdXNwZW5kIC0gRXhlY3V0ZSAic3VzcGVuZCIgY2FsbGJhY2tzIGZvciBhbGwgbm9uLXN5c2RldiBkZXZpY2VzLgorICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKi8KIHN0YXRpYyBpbnQgZHBtX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNjk3LDkgKzcwNywxMiBAQAogfQogCiAvKioKLSAqCWRldmljZV9wcmVwYXJlIC0gRXhlY3V0ZSB0aGUgLT5wcmVwYXJlKCkgY2FsbGJhY2socykgZm9yIGdpdmVuIGRldmljZS4KLSAqCUBkZXY6CURldmljZS4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZGV2aWNlX3ByZXBhcmUgLSBQcmVwYXJlIGEgZGV2aWNlIGZvciBzeXN0ZW0gcG93ZXIgdHJhbnNpdGlvbi4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KKyAqCisgKiBFeGVjdXRlIHRoZSAtPnByZXBhcmUoKSBjYWxsYmFjayhzKSBmb3IgZ2l2ZW4gZGV2aWNlLiAgTm8gbmV3IGNoaWxkcmVuIG9mIHRoZQorICogZGV2aWNlIG1heSBiZSByZWdpc3RlcmVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gaGFzIHJldHVybmVkLgogICovCiBzdGF0aWMgaW50IGRldmljZV9wcmVwYXJlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNzM1LDEwICs3NDgsMTAgQEAKIH0KIAogLyoqCi0gKglkcG1fcHJlcGFyZSAtIFByZXBhcmUgYWxsIGRldmljZXMgZm9yIGEgUE0gdHJhbnNpdGlvbi4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZHBtX3ByZXBhcmUgLSBQcmVwYXJlIGFsbCBub24tc3lzZGV2IGRldmljZXMgZm9yIGEgc3lzdGVtIFBNIHRyYW5zaXRpb24uCisgKiBAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglFeGVjdXRlIHRoZSAtPnByZXBhcmUoKSBjYWxsYmFjayBmb3IgYWxsIGRldmljZXMuCisgKiBFeGVjdXRlIHRoZSAtPnByZXBhcmUoKSBjYWxsYmFjayhzKSBmb3IgYWxsIGRldmljZXMuCiAgKi8KIHN0YXRpYyBpbnQgZHBtX3ByZXBhcmUocG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtNzU1LDcgKzc2OCwxNCBAQAogCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9QUkVQQVJJTkc7CiAJCW11dGV4X3VubG9jaygmZHBtX2xpc3RfbXR4KTsKIAotCQllcnJvciA9IGRldmljZV9wcmVwYXJlKGRldiwgc3RhdGUpOworCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOworCQlpZiAocG1fcnVudGltZV9iYXJyaWVyKGRldikgJiYgZGV2aWNlX21heV93YWtldXAoZGV2KSkgeworCQkJLyogV2FrZS11cCByZXF1ZXN0ZWQgZHVyaW5nIHN5c3RlbSBzbGVlcCB0cmFuc2l0aW9uLiAqLworCQkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7CisJCQllcnJvciA9IC1FQlVTWTsKKwkJfSBlbHNlIHsKKwkJCWVycm9yID0gZGV2aWNlX3ByZXBhcmUoZGV2LCBzdGF0ZSk7CisJCX0KIAogCQltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTc4MiwxMCArODAyLDExIEBACiB9CiAKIC8qKgotICoJZHBtX3N1c3BlbmRfc3RhcnQgLSBTYXZlIHN0YXRlIGFuZCBzdG9wIGFsbCBkZXZpY2VzIGluIHN5c3RlbS4KLSAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgorICogZHBtX3N1c3BlbmRfc3RhcnQgLSBQcmVwYXJlIGRldmljZXMgZm9yIFBNIHRyYW5zaXRpb24gYW5kIHN1c3BlbmQgdGhlbS4KKyAqIEBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVByZXBhcmUgYW5kIHN1c3BlbmQgYWxsIGRldmljZXMuCisgKiBQcmVwYXJlIGFsbCBub24tc3lzZGV2IGRldmljZXMgZm9yIHN5c3RlbSBQTSB0cmFuc2l0aW9uIGFuZCBleGVjdXRlICJzdXNwZW5kIgorICogY2FsbGJhY2tzIGZvciB0aGVtLgogICovCiBpbnQgZHBtX3N1c3BlbmRfc3RhcnQocG1fbWVzc2FnZV90IHN0YXRlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAppbmRleCBjN2NiNGZjLi5iOGZhMWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaApAQCAtMSw3ICsxLDE0IEBACi1zdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQotewotCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX09OOwotfQorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisKK2V4dGVybiB2b2lkIHBtX3J1bnRpbWVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKKworI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2luaXQoc3RydWN0IGRldmljZSAqZGV2KSB7fQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikge30KKworI2VuZGlmIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLwogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAKQEAgLTE2LDIzICsyMywzMyBAQAogCXJldHVybiBjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBkZXZpY2UsIHBvd2VyLmVudHJ5KTsKIH0KIAorZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX2luaXQoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKik7CiAKLSNlbHNlIC8qIENPTkZJR19QTV9TTEVFUCAqLworI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBtX3J1bnRpbWVfaW5pdChkZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcG1fcnVudGltZV9yZW1vdmUoZGV2KTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqZGV2KSB7fQotc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KSB7fQogc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICpkZXZhLAogCQkJCQkgc3RydWN0IGRldmljZSAqZGV2Yikge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICpkZXZhLAogCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXZiKSB7fQogc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9tb3ZlX2xhc3Qoc3RydWN0IGRldmljZSAqZGV2KSB7fQogCi0jZW5kaWYKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKICNpZmRlZiBDT05GSUdfUE0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg1NTZmNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTAsMCArMSwxMDExIEBACisvKgorICogZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyAtIEhlbHBlciBmdW5jdGlvbnMgZm9yIGRldmljZSBydW4tdGltZSBQTQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBOb3ZlbGwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKworc3RhdGljIGludCBfX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBmcm9tX3dxKTsKK3N0YXRpYyBpbnQgX19wbV9yZXF1ZXN0X2lkbGUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgX19wbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKioKKyAqIHBtX3J1bnRpbWVfZGVhY3RpdmF0ZV90aW1lciAtIERlYWN0aXZhdGUgZ2l2ZW4gZGV2aWNlJ3Mgc3VzcGVuZCB0aW1lci4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKi8KK3N0YXRpYyB2b2lkIHBtX3J1bnRpbWVfZGVhY3RpdmF0ZV90aW1lcihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+cG93ZXIudGltZXJfZXhwaXJlcyA+IDApIHsKKwkJZGVsX3RpbWVyKCZkZXYtPnBvd2VyLnN1c3BlbmRfdGltZXIpOworCQlkZXYtPnBvd2VyLnRpbWVyX2V4cGlyZXMgPSAwOworCX0KK30KKworLyoqCisgKiBwbV9ydW50aW1lX2NhbmNlbF9wZW5kaW5nIC0gRGVhY3RpdmF0ZSBzdXNwZW5kIHRpbWVyIGFuZCBjYW5jZWwgcmVxdWVzdHMuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICovCitzdGF0aWMgdm9pZCBwbV9ydW50aW1lX2NhbmNlbF9wZW5kaW5nKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoZGV2KTsKKwkvKgorCSAqIEluIGNhc2UgdGhlcmUncyBhIHJlcXVlc3QgcGVuZGluZywgbWFrZSBzdXJlIGl0cyB3b3JrIGZ1bmN0aW9uIHdpbGwKKwkgKiByZXR1cm4gd2l0aG91dCBkb2luZyBhbnl0aGluZy4KKwkgKi8KKwlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7Cit9CisKKy8qKgorICogX19wbV9ydW50aW1lX2lkbGUgLSBOb3RpZnkgZGV2aWNlIGJ1cyB0eXBlIGlmIHRoZSBkZXZpY2UgY2FuIGJlIHN1c3BlbmRlZC4KKyAqIEBkZXY6IERldmljZSB0byBub3RpZnkgdGhlIGJ1cyB0eXBlIGFib3V0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW5kZXIgZGV2LT5wb3dlci5sb2NrIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworc3RhdGljIGludCBfX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCisJX19yZWxlYXNlcygmZGV2LT5wb3dlci5sb2NrKSBfX2FjcXVpcmVzKCZkZXYtPnBvd2VyLmxvY2spCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlkZXZfZGJnKGRldiwgIl9fcG1fcnVudGltZV9pZGxlKCkhXG4iKTsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpCisJCXJldHZhbCA9IC1FSU5WQUw7CisJZWxzZSBpZiAoZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbikKKwkJcmV0dmFsID0gLUVJTlBST0dSRVNTOworCWVsc2UgaWYgKGF0b21pY19yZWFkKCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSA+IDAKKwkgICAgfHwgZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoID4gMAorCSAgICB8fCBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9BQ1RJVkUpCisJCXJldHZhbCA9IC1FQUdBSU47CisJZWxzZSBpZiAoIXBtX2NoaWxkcmVuX3N1c3BlbmRlZChkZXYpKQorCQlyZXR2YWwgPSAtRUJVU1k7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcpIHsKKwkJLyoKKwkJICogSWYgYW4gaWRsZSBub3RpZmljYXRpb24gcmVxdWVzdCBpcyBwZW5kaW5nLCBjYW5jZWwgaXQuICBBbnkKKwkJICogb3RoZXIgcGVuZGluZyByZXF1ZXN0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB1cy4KKwkJICovCisJCWlmIChkZXYtPnBvd2VyLnJlcXVlc3QgPT0gUlBNX1JFUV9JRExFKSB7CisJCQlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX05PTkU7CisJCX0gZWxzZSBpZiAoZGV2LT5wb3dlci5yZXF1ZXN0ICE9IFJQTV9SRVFfTk9ORSkgeworCQkJcmV0dmFsID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbiA9IHRydWU7CisKKwlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnBtICYmIGRldi0+YnVzLT5wbS0+cnVudGltZV9pZGxlKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfaWRsZShkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJfQorCisJZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbiA9IGZhbHNlOworCXdha2VfdXBfYWxsKCZkZXYtPnBvd2VyLndhaXRfcXVldWUpOworCisgb3V0OgorCWRldl9kYmcoZGV2LCAiX19wbV9ydW50aW1lX2lkbGUoKSByZXR1cm5zICVkIVxuIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9pZGxlIC0gTm90aWZ5IGRldmljZSBidXMgdHlwZSBpZiB0aGUgZGV2aWNlIGNhbiBiZSBzdXNwZW5kZWQuCisgKiBAZGV2OiBEZXZpY2UgdG8gbm90aWZ5IHRoZSBidXMgdHlwZSBhYm91dC4KKyAqLworaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJcmV0dmFsID0gX19wbV9ydW50aW1lX2lkbGUoZGV2KTsKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fcnVudGltZV9pZGxlKTsKKworLyoqCisgKiBfX3BtX3J1bnRpbWVfc3VzcGVuZCAtIENhcnJ5IG91dCBydW4tdGltZSBzdXNwZW5kIG9mIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBzdXNwZW5kLgorICogQGZyb21fd3E6IElmIHNldCwgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCB2aWEgcG1fd3EuCisgKgorICogQ2hlY2sgaWYgdGhlIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkIGFuZCBydW4gdGhlIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sKKyAqIHByb3ZpZGVkIGJ5IGl0cyBidXMgdHlwZS4gIElmIGFub3RoZXIgc3VzcGVuZCBoYXMgYmVlbiBzdGFydGVkIGVhcmxpZXIsIHdhaXQKKyAqIGZvciBpdCB0byBmaW5pc2guICBJZiBhbiBpZGxlIG5vdGlmaWNhdGlvbiBvciBzdXNwZW5kIHJlcXVlc3QgaXMgcGVuZGluZyBvcgorICogc2NoZWR1bGVkLCBjYW5jZWwgaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkZXYtPnBvd2VyLmxvY2sgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCitpbnQgX19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGZyb21fd3EpCisJX19yZWxlYXNlcygmZGV2LT5wb3dlci5sb2NrKSBfX2FjcXVpcmVzKCZkZXYtPnBvd2VyLmxvY2spCit7CisJc3RydWN0IGRldmljZSAqcGFyZW50ID0gTlVMTDsKKwlib29sIG5vdGlmeSA9IGZhbHNlOworCWludCByZXR2YWwgPSAwOworCisJZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfc3VzcGVuZCgpJXMhXG4iLAorCQlmcm9tX3dxID8gIiBmcm9tIHdvcmtxdWV1ZSIgOiAiIik7CisKKyByZXBlYXQ6CisJaWYgKGRldi0+cG93ZXIucnVudGltZV9lcnJvcikgeworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBQZW5kaW5nIHJlc3VtZSByZXF1ZXN0cyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB1cy4gKi8KKwlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcKKwkgICAgJiYgZGV2LT5wb3dlci5yZXF1ZXN0ID09IFJQTV9SRVFfUkVTVU1FKSB7CisJCXJldHZhbCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCS8qIE90aGVyIHNjaGVkdWxlZCBvciBwZW5kaW5nIHJlcXVlc3RzIG5lZWQgdG8gYmUgY2FuY2VsZWQuICovCisJcG1fcnVudGltZV9jYW5jZWxfcGVuZGluZyhkZXYpOworCisJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRFRCkKKwkJcmV0dmFsID0gMTsKKwllbHNlIGlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9SRVNVTUlORworCSAgICB8fCBkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGggPiAwCisJICAgIHx8IGF0b21pY19yZWFkKCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSA+IDApCisJCXJldHZhbCA9IC1FQUdBSU47CisJZWxzZSBpZiAoIXBtX2NoaWxkcmVuX3N1c3BlbmRlZChkZXYpKQorCQlyZXR2YWwgPSAtRUJVU1k7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORykgeworCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQlpZiAoZnJvbV93cSkgeworCQkJcmV0dmFsID0gLUVJTlBST0dSRVNTOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBXYWl0IGZvciB0aGUgb3RoZXIgc3VzcGVuZCBydW5uaW5nIGluIHBhcmFsbGVsIHdpdGggdXMuICovCisJCWZvciAoOzspIHsKKwkJCXByZXBhcmVfdG9fd2FpdCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlLCAmd2FpdCwKKwkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgIT0gUlBNX1NVU1BFTkRJTkcpCisJCQkJYnJlYWs7CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQkJc2NoZWR1bGUoKTsKKworCQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJfQorCQlmaW5pc2hfd2FpdCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlLCAmd2FpdCk7CisJCWdvdG8gcmVwZWF0OworCX0KKworCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBSUE1fU1VTUEVORElORzsKKworCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3N1c3BlbmQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXJldHZhbCA9IGRldi0+YnVzLT5wbS0+cnVudGltZV9zdXNwZW5kKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gcmV0dmFsOworCX0gZWxzZSB7CisJCXJldHZhbCA9IC1FTk9TWVM7CisJfQorCisJaWYgKHJldHZhbCkgeworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gUlBNX0FDVElWRTsKKwkJcG1fcnVudGltZV9jYW5jZWxfcGVuZGluZyhkZXYpOworCQlkZXYtPnBvd2VyLmRlZmVycmVkX3Jlc3VtZSA9IGZhbHNlOworCisJCWlmIChyZXR2YWwgPT0gLUVBR0FJTiB8fCByZXR2YWwgPT0gLUVCVVNZKSB7CisJCQlub3RpZnkgPSB0cnVlOworCQkJZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBSUE1fU1VTUEVOREVEOworCisJCWlmIChkZXYtPnBhcmVudCkgeworCQkJcGFyZW50ID0gZGV2LT5wYXJlbnQ7CisJCQlhdG9taWNfYWRkX3VubGVzcygmcGFyZW50LT5wb3dlci5jaGlsZF9jb3VudCwgLTEsIDApOworCQl9CisJfQorCXdha2VfdXBfYWxsKCZkZXYtPnBvd2VyLndhaXRfcXVldWUpOworCisJaWYgKGRldi0+cG93ZXIuZGVmZXJyZWRfcmVzdW1lKSB7CisJCWRldi0+cG93ZXIuZGVmZXJyZWRfcmVzdW1lID0gZmFsc2U7CisJCV9fcG1fcnVudGltZV9yZXN1bWUoZGV2LCBmYWxzZSk7CisJCXJldHZhbCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCWlmIChub3RpZnkpCisJCV9fcG1fcnVudGltZV9pZGxlKGRldik7CisKKwlpZiAocGFyZW50ICYmICFwYXJlbnQtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbikgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJcG1fcmVxdWVzdF9pZGxlKHBhcmVudCk7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwl9CisKKyBvdXQ6CisJZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfc3VzcGVuZCgpIHJldHVybnMgJWQhXG4iLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBwbV9ydW50aW1lX3N1c3BlbmQgLSBDYXJyeSBvdXQgcnVuLXRpbWUgc3VzcGVuZCBvZiBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqLworaW50IHBtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJcmV0dmFsID0gX19wbV9ydW50aW1lX3N1c3BlbmQoZGV2LCBmYWxzZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfc3VzcGVuZCk7CisKKy8qKgorICogX19wbV9ydW50aW1lX3Jlc3VtZSAtIENhcnJ5IG91dCBydW4tdGltZSByZXN1bWUgb2YgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqIEBmcm9tX3dxOiBJZiBzZXQsIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQgdmlhIHBtX3dxLgorICoKKyAqIENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIGJlIHdva2VuIHVwIGFuZCBydW4gdGhlIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjaworICogcHJvdmlkZWQgYnkgaXRzIGJ1cyB0eXBlLiAgSWYgYW5vdGhlciByZXN1bWUgaGFzIGJlZW4gc3RhcnRlZCBlYXJsaWVyLCB3YWl0CisgKiBmb3IgaXQgdG8gZmluaXNoLiAgSWYgdGhlcmUncyBhIHN1c3BlbmQgcnVubmluZyBpbiBwYXJhbGxlbCB3aXRoIHRoaXMKKyAqIGZ1bmN0aW9uLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggYW5kIHJlc3VtZSB0aGUgZGV2aWNlLiAgQ2FuY2VsIGFueSBzY2hlZHVsZWQKKyAqIG9yIHBlbmRpbmcgcmVxdWVzdHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkZXYtPnBvd2VyLmxvY2sgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCitpbnQgX19wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZnJvbV93cSkKKwlfX3JlbGVhc2VzKCZkZXYtPnBvd2VyLmxvY2spIF9fYWNxdWlyZXMoJmRldi0+cG93ZXIubG9jaykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBOVUxMOworCWludCByZXR2YWwgPSAwOworCisJZGV2X2RiZyhkZXYsICJfX3BtX3J1bnRpbWVfcmVzdW1lKCklcyFcbiIsCisJCWZyb21fd3EgPyAiIGZyb20gd29ya3F1ZXVlIiA6ICIiKTsKKworIHJlcGVhdDoKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX2Vycm9yKSB7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXBtX3J1bnRpbWVfY2FuY2VsX3BlbmRpbmcoZGV2KTsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9BQ1RJVkUpCisJCXJldHZhbCA9IDE7CisJZWxzZSBpZiAoZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoID4gMCkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9SRVNVTUlORworCSAgICB8fCBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ESU5HKSB7CisJCURFRklORV9XQUlUKHdhaXQpOworCisJCWlmIChmcm9tX3dxKSB7CisJCQlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORykKKwkJCQlkZXYtPnBvd2VyLmRlZmVycmVkX3Jlc3VtZSA9IHRydWU7CisJCQlyZXR2YWwgPSAtRUlOUFJPR1JFU1M7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIFdhaXQgZm9yIHRoZSBvcGVyYXRpb24gY2FycmllZCBvdXQgaW4gcGFyYWxsZWwgd2l0aCB1cy4gKi8KKwkJZm9yICg7OykgeworCQkJcHJlcGFyZV90b193YWl0KCZkZXYtPnBvd2VyLndhaXRfcXVldWUsICZ3YWl0LAorCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyAhPSBSUE1fUkVTVU1JTkcKKwkJCSAgICAmJiBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9TVVNQRU5ESU5HKQorCQkJCWJyZWFrOworCisJCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJCXNjaGVkdWxlKCk7CisKKwkJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCX0KKwkJZmluaXNoX3dhaXQoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSwgJndhaXQpOworCQlnb3RvIHJlcGVhdDsKKwl9CisKKwlpZiAoIXBhcmVudCAmJiBkZXYtPnBhcmVudCkgeworCQkvKgorCQkgKiBJbmNyZW1lbnQgdGhlIHBhcmVudCdzIHJlc3VtZSBjb3VudGVyIGFuZCByZXN1bWUgaXQgaWYKKwkJICogbmVjZXNzYXJ5LgorCQkgKi8KKwkJcGFyZW50ID0gZGV2LT5wYXJlbnQ7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShwYXJlbnQpOworCisJCXNwaW5fbG9ja19pcnEoJnBhcmVudC0+cG93ZXIubG9jayk7CisJCS8qCisJCSAqIFdlIGNhbiByZXN1bWUgaWYgdGhlIHBhcmVudCdzIHJ1bi10aW1lIFBNIGlzIGRpc2FibGVkIG9yIGl0CisJCSAqIGlzIHNldCB0byBpZ25vcmUgY2hpbGRyZW4uCisJCSAqLworCQlpZiAoIXBhcmVudC0+cG93ZXIuZGlzYWJsZV9kZXB0aAorCQkgICAgJiYgIXBhcmVudC0+cG93ZXIuaWdub3JlX2NoaWxkcmVuKSB7CisJCQlfX3BtX3J1bnRpbWVfcmVzdW1lKHBhcmVudCwgZmFsc2UpOworCQkJaWYgKHBhcmVudC0+cG93ZXIucnVudGltZV9zdGF0dXMgIT0gUlBNX0FDVElWRSkKKwkJCQlyZXR2YWwgPSAtRUJVU1k7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIG91dDsKKwkJZ290byByZXBlYXQ7CisJfQorCisJZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9IFJQTV9SRVNVTUlORzsKKworCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3Jlc3VtZSkgeworCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwkJcmV0dmFsID0gZGV2LT5idXMtPnBtLT5ydW50aW1lX3Jlc3VtZShkZXYpOworCisJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCWRldi0+cG93ZXIucnVudGltZV9lcnJvciA9IHJldHZhbDsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSAtRU5PU1lTOworCX0KKworCWlmIChyZXR2YWwpIHsKKwkJZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9IFJQTV9TVVNQRU5ERUQ7CisJCXBtX3J1bnRpbWVfY2FuY2VsX3BlbmRpbmcoZGV2KTsKKwl9IGVsc2UgeworCQlkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID0gUlBNX0FDVElWRTsKKwkJaWYgKHBhcmVudCkKKwkJCWF0b21pY19pbmMoJnBhcmVudC0+cG93ZXIuY2hpbGRfY291bnQpOworCX0KKwl3YWtlX3VwX2FsbCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlKTsKKworCWlmICghcmV0dmFsKQorCQlfX3BtX3JlcXVlc3RfaWRsZShkZXYpOworCisgb3V0OgorCWlmIChwYXJlbnQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCXBtX3J1bnRpbWVfcHV0KHBhcmVudCk7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwl9CisKKwlkZXZfZGJnKGRldiwgIl9fcG1fcnVudGltZV9yZXN1bWUoKSByZXR1cm5zICVkIVxuIiwgcmV0dmFsKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9yZXN1bWUgLSBDYXJyeSBvdXQgcnVuLXRpbWUgcmVzdW1lIG9mIGdpdmVuIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBzdXNwZW5kLgorICovCitpbnQgcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXR2YWw7CisKKwlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCXJldHZhbCA9IF9fcG1fcnVudGltZV9yZXN1bWUoZGV2LCBmYWxzZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfcmVzdW1lKTsKKworLyoqCisgKiBwbV9ydW50aW1lX3dvcmsgLSBVbml2ZXJzYWwgcnVuLXRpbWUgUE0gd29yayBmdW5jdGlvbi4KKyAqIEB3b3JrOiBXb3JrIHN0cnVjdHVyZSB1c2VkIGZvciBzY2hlZHVsaW5nIHRoZSBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBVc2UgQHdvcmsgdG8gZ2V0IHRoZSBkZXZpY2Ugb2JqZWN0IHRoZSB3b3JrIGlzIHRvIGJlIGRvbmUgZm9yLCBkZXRlcm1pbmUgd2hhdAorICogaXMgdG8gYmUgZG9uZSBhbmQgZXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgcnVuLXRpbWUgUE0gZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkIHBtX3J1bnRpbWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZpY2UsIHBvd2VyLndvcmspOworCWVudW0gcnBtX3JlcXVlc3QgcmVxOworCisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCWlmICghZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcpCisJCWdvdG8gb3V0OworCisJcmVxID0gZGV2LT5wb3dlci5yZXF1ZXN0OworCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfTk9ORTsKKwlkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZyA9IGZhbHNlOworCisJc3dpdGNoIChyZXEpIHsKKwljYXNlIFJQTV9SRVFfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBSUE1fUkVRX0lETEU6CisJCV9fcG1fcnVudGltZV9pZGxlKGRldik7CisJCWJyZWFrOworCWNhc2UgUlBNX1JFUV9TVVNQRU5EOgorCQlfX3BtX3J1bnRpbWVfc3VzcGVuZChkZXYsIHRydWUpOworCQlicmVhazsKKwljYXNlIFJQTV9SRVFfUkVTVU1FOgorCQlfX3BtX3J1bnRpbWVfcmVzdW1lKGRldiwgdHJ1ZSk7CisJCWJyZWFrOworCX0KKworIG91dDoKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Cit9CisKKy8qKgorICogX19wbV9yZXF1ZXN0X2lkbGUgLSBTdWJtaXQgYW4gaWRsZSBub3RpZmljYXRpb24gcmVxdWVzdCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqCisgKiBDaGVjayBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIGlzIGNvcnJlY3QgZm9yIHN1c3BlbmRpbmcgdGhlIGRldmljZQorICogYW5kIHF1ZXVlIHVwIGEgcmVxdWVzdCB0byBydW4gX19wbV9ydW50aW1lX2lkbGUoKSBmb3IgaXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkZXYtPnBvd2VyLmxvY2sgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCitzdGF0aWMgaW50IF9fcG1fcmVxdWVzdF9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpCisJCXJldHZhbCA9IC1FSU5WQUw7CisJZWxzZSBpZiAoYXRvbWljX3JlYWQoJmRldi0+cG93ZXIudXNhZ2VfY291bnQpID4gMAorCSAgICB8fCBkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGggPiAwCisJICAgIHx8IGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRFRAorCSAgICB8fCBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ESU5HKQorCQlyZXR2YWwgPSAtRUFHQUlOOworCWVsc2UgaWYgKCFwbV9jaGlsZHJlbl9zdXNwZW5kZWQoZGV2KSkKKwkJcmV0dmFsID0gLUVCVVNZOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcpIHsKKwkJLyogQW55IHJlcXVlc3RzIG90aGVyIHRoZW4gUlBNX1JFUV9JRExFIHRha2UgcHJlY2VkZW5jZS4gKi8KKwkJaWYgKGRldi0+cG93ZXIucmVxdWVzdCA9PSBSUE1fUkVRX05PTkUpCisJCQlkZXYtPnBvd2VyLnJlcXVlc3QgPSBSUE1fUkVRX0lETEU7CisJCWVsc2UgaWYgKGRldi0+cG93ZXIucmVxdWVzdCAhPSBSUE1fUkVRX0lETEUpCisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfSURMRTsKKwlkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZyA9IHRydWU7CisJcXVldWVfd29yayhwbV93cSwgJmRldi0+cG93ZXIud29yayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioKKyAqIHBtX3JlcXVlc3RfaWRsZSAtIFN1Ym1pdCBhbiBpZGxlIG5vdGlmaWNhdGlvbiByZXF1ZXN0IGZvciBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICovCitpbnQgcG1fcmVxdWVzdF9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gX19wbV9yZXF1ZXN0X2lkbGUoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9yZXF1ZXN0X2lkbGUpOworCisvKioKKyAqIF9fcG1fcmVxdWVzdF9zdXNwZW5kIC0gU3VibWl0IGEgc3VzcGVuZCByZXF1ZXN0IGZvciBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRldi0+cG93ZXIubG9jayB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3N0YXRpYyBpbnQgX19wbV9yZXF1ZXN0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXR2YWwgPSAwOworCisJaWYgKGRldi0+cG93ZXIucnVudGltZV9lcnJvcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVOREVEKQorCQlyZXR2YWwgPSAxOworCWVsc2UgaWYgKGF0b21pY19yZWFkKCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSA+IDAKKwkgICAgfHwgZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoID4gMCkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwllbHNlIGlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ESU5HKQorCQlyZXR2YWwgPSAtRUlOUFJPR1JFU1M7CisJZWxzZSBpZiAoIXBtX2NoaWxkcmVuX3N1c3BlbmRlZChkZXYpKQorCQlyZXR2YWwgPSAtRUJVU1k7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoZGV2KTsKKworCWlmIChkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZykgeworCQkvKgorCQkgKiBQZW5kaW5nIHJlc3VtZSByZXF1ZXN0cyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB1cywgYnV0IHdlIGNhbgorCQkgKiBvdmVydGFrZSBhbnkgb3RoZXIgcGVuZGluZyByZXF1ZXN0LgorCQkgKi8KKwkJaWYgKGRldi0+cG93ZXIucmVxdWVzdCA9PSBSUE1fUkVRX1JFU1VNRSkKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCWVsc2UgaWYgKGRldi0+cG93ZXIucmVxdWVzdCAhPSBSUE1fUkVRX1NVU1BFTkQpCisJCQlkZXYtPnBvd2VyLnJlcXVlc3QgPSByZXR2YWwgPworCQkJCQkJUlBNX1JFUV9OT05FIDogUlBNX1JFUV9TVVNQRU5EOworCQlyZXR1cm4gcmV0dmFsOworCX0gZWxzZSBpZiAocmV0dmFsKSB7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJZGV2LT5wb3dlci5yZXF1ZXN0ID0gUlBNX1JFUV9TVVNQRU5EOworCWRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nID0gdHJ1ZTsKKwlxdWV1ZV93b3JrKHBtX3dxLCAmZGV2LT5wb3dlci53b3JrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtX3N1c3BlbmRfdGltZXJfZm4gLSBUaW1lciBmdW5jdGlvbiBmb3IgcG1fc2NoZWR1bGVfc3VzcGVuZCgpLgorICogQGRhdGE6IERldmljZSBwb2ludGVyIHBhc3NlZCBieSBwbV9zY2hlZHVsZV9zdXNwZW5kKCkuCisgKgorICogQ2hlY2sgaWYgdGhlIHRpbWUgaXMgcmlnaHQgYW5kIGV4ZWN1dGUgX19wbV9yZXF1ZXN0X3N1c3BlbmQoKSBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIHBtX3N1c3BlbmRfdGltZXJfZm4odW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKKworCWV4cGlyZXMgPSBkZXYtPnBvd2VyLnRpbWVyX2V4cGlyZXM7CisJLyogSWYgJ2V4cGlyZScgaXMgYWZ0ZXIgJ2ppZmZpZXMnIHdlJ3ZlIGJlZW4gY2FsbGVkIHRvbyBlYXJseS4gKi8KKwlpZiAoZXhwaXJlcyA+IDAgJiYgIXRpbWVfYWZ0ZXIoZXhwaXJlcywgamlmZmllcykpIHsKKwkJZGV2LT5wb3dlci50aW1lcl9leHBpcmVzID0gMDsKKwkJX19wbV9yZXF1ZXN0X3N1c3BlbmQoZGV2KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBwbV9zY2hlZHVsZV9zdXNwZW5kIC0gU2V0IHVwIGEgdGltZXIgdG8gc3VibWl0IGEgc3VzcGVuZCByZXF1ZXN0IGluIGZ1dHVyZS4KKyAqIEBkZXY6IERldmljZSB0byBzdXNwZW5kLgorICogQGRlbGF5OiBUaW1lIHRvIHdhaXQgYmVmb3JlIHN1Ym1pdHRpbmcgYSBzdXNwZW5kIHJlcXVlc3QsIGluIG1pbGxpc2Vjb25kcy4KKyAqLworaW50IHBtX3NjaGVkdWxlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpIHsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFkZWxheSkgeworCQlyZXR2YWwgPSBfX3BtX3JlcXVlc3Rfc3VzcGVuZChkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoZGV2KTsKKworCWlmIChkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZykgeworCQkvKgorCQkgKiBQZW5kaW5nIHJlc3VtZSByZXF1ZXN0cyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB1cywgYnV0IGFueQorCQkgKiBvdGhlciBwZW5kaW5nIHJlcXVlc3RzIGhhdmUgdG8gYmUgY2FuY2VsZWQuCisJCSAqLworCQlpZiAoZGV2LT5wb3dlci5yZXF1ZXN0ID09IFJQTV9SRVFfUkVTVU1FKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KKwkJZGV2LT5wb3dlci5yZXF1ZXN0ID0gUlBNX1JFUV9OT05FOworCX0KKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ERUQpCisJCXJldHZhbCA9IDE7CisJZWxzZSBpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORykKKwkJcmV0dmFsID0gLUVJTlBST0dSRVNTOworCWVsc2UgaWYgKGF0b21pY19yZWFkKCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSA+IDAKKwkgICAgfHwgZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoID4gMCkKKwkJcmV0dmFsID0gLUVBR0FJTjsKKwllbHNlIGlmICghcG1fY2hpbGRyZW5fc3VzcGVuZGVkKGRldikpCisJCXJldHZhbCA9IC1FQlVTWTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIG91dDsKKworCWRldi0+cG93ZXIudGltZXJfZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRlbGF5KTsKKwltb2RfdGltZXIoJmRldi0+cG93ZXIuc3VzcGVuZF90aW1lciwgZGV2LT5wb3dlci50aW1lcl9leHBpcmVzKTsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9zY2hlZHVsZV9zdXNwZW5kKTsKKworLyoqCisgKiBwbV9yZXF1ZXN0X3Jlc3VtZSAtIFN1Ym1pdCBhIHJlc3VtZSByZXF1ZXN0IGZvciBnaXZlbiBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gcmVzdW1lLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW5kZXIgZGV2LT5wb3dlci5sb2NrIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworc3RhdGljIGludCBfX3BtX3JlcXVlc3RfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX0FDVElWRSkKKwkJcmV0dmFsID0gMTsKKwllbHNlIGlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9SRVNVTUlORykKKwkJcmV0dmFsID0gLUVJTlBST0dSRVNTOworCWVsc2UgaWYgKGRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA+IDApCisJCXJldHZhbCA9IC1FQUdBSU47CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoZGV2KTsKKworCWlmIChkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZykgeworCQkvKiBJZiBub24tcmVzdW1lIHJlcXVlc3QgaXMgcGVuZGluZywgd2UgY2FuIG92ZXJ0YWtlIGl0LiAqLworCQlkZXYtPnBvd2VyLnJlcXVlc3QgPSByZXR2YWwgPyBSUE1fUkVRX05PTkUgOiBSUE1fUkVRX1JFU1VNRTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9IGVsc2UgaWYgKHJldHZhbCkgeworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfUkVTVU1FOworCWRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nID0gdHJ1ZTsKKwlxdWV1ZV93b3JrKHBtX3dxLCAmZGV2LT5wb3dlci53b3JrKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogcG1fcmVxdWVzdF9yZXN1bWUgLSBTdWJtaXQgYSByZXN1bWUgcmVxdWVzdCBmb3IgZ2l2ZW4gZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqLworaW50IHBtX3JlcXVlc3RfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXR2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisJcmV0dmFsID0gX19wbV9yZXF1ZXN0X3Jlc3VtZShkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cG93ZXIubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3JlcXVlc3RfcmVzdW1lKTsKKworLyoqCisgKiBfX3BtX3J1bnRpbWVfZ2V0IC0gUmVmZXJlbmNlIGNvdW50IGEgZGV2aWNlIGFuZCB3YWtlIGl0IHVwLCBpZiBuZWNlc3NhcnkuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQHN5bmM6IElmIHNldCBhbmQgdGhlIGRldmljZSBpcyBzdXNwZW5kZWQsIHJlc3VtZSBpdCBzeW5jaHJvbm91c2x5LgorICoKKyAqIEluY3JlbWVudCB0aGUgdXNhZ2UgY291bnQgb2YgdGhlIGRldmljZSBhbmQgaWYgaXQgd2FzIHplcm8gcHJldmlvdXNseSwKKyAqIHJlc3VtZSBpdCBvciBzdWJtaXQgYSByZXN1bWUgcmVxdWVzdCBmb3IgaXQsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgQHN5bmMuCisgKi8KK2ludCBfX3BtX3J1bnRpbWVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBzeW5jKQoreworCWludCByZXR2YWwgPSAxOworCisJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZkZXYtPnBvd2VyLnVzYWdlX2NvdW50KSA9PSAxKQorCQlyZXR2YWwgPSBzeW5jID8gcG1fcnVudGltZV9yZXN1bWUoZGV2KSA6IHBtX3JlcXVlc3RfcmVzdW1lKGRldik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19wbV9ydW50aW1lX2dldCk7CisKKy8qKgorICogX19wbV9ydW50aW1lX3B1dCAtIERlY3JlbWVudCB0aGUgZGV2aWNlJ3MgdXNhZ2UgY291bnRlciBhbmQgbm90aWZ5IGl0cyBidXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQHN5bmM6IElmIHRoZSBkZXZpY2UncyBidXMgdHlwZSBpcyB0byBiZSBub3RpZmllZCwgZG8gdGhhdCBzeW5jaHJvbm91c2x5LgorICoKKyAqIERlY3JlbWVudCB0aGUgdXNhZ2UgY291bnQgb2YgdGhlIGRldmljZSBhbmQgaWYgaXQgcmVhY2hlcyB6ZXJvLCBjYXJyeSBvdXQgYQorICogc3luY2hyb25vdXMgaWRsZSBub3RpZmljYXRpb24gb3Igc3VibWl0IGFuIGlkbGUgbm90aWZpY2F0aW9uIHJlcXVlc3QgZm9yIGl0LAorICogZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBAc3luYy4KKyAqLworaW50IF9fcG1fcnVudGltZV9wdXQoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHN5bmMpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5wb3dlci51c2FnZV9jb3VudCkpCisJCXJldHZhbCA9IHN5bmMgPyBwbV9ydW50aW1lX2lkbGUoZGV2KSA6IHBtX3JlcXVlc3RfaWRsZShkZXYpOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcG1fcnVudGltZV9wdXQpOworCisvKioKKyAqIF9fcG1fcnVudGltZV9zZXRfc3RhdHVzIC0gU2V0IHJ1bi10aW1lIFBNIHN0YXR1cyBvZiBhIGRldmljZS4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKiBAc3RhdHVzOiBOZXcgcnVuLXRpbWUgUE0gc3RhdHVzIG9mIHRoZSBkZXZpY2UuCisgKgorICogSWYgcnVuLXRpbWUgUE0gb2YgdGhlIGRldmljZSBpcyBkaXNhYmxlZCBvciBpdHMgcG93ZXIucnVudGltZV9lcnJvciBmaWVsZCBpcworICogZGlmZmVyZW50IGZyb20gemVybywgdGhlIHN0YXR1cyBtYXkgYmUgY2hhbmdlZCBlaXRoZXIgdG8gUlBNX0FDVElWRSwgb3IgdG8KKyAqIFJQTV9TVVNQRU5ERUQsIGFzIGxvbmcgYXMgdGhhdCByZWZsZWN0cyB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBkZXZpY2UuCisgKiBIb3dldmVyLCBpZiB0aGUgZGV2aWNlIGhhcyBhIHBhcmVudCBhbmQgdGhlIHBhcmVudCBpcyBub3QgYWN0aXZlLCBhbmQgdGhlCisgKiBwYXJlbnQncyBwb3dlci5pZ25vcmVfY2hpbGRyZW4gZmxhZyBpcyB1bnNldCwgdGhlIGRldmljZSdzIHN0YXR1cyBjYW5ub3QgYmUKKyAqIHNldCB0byBSUE1fQUNUSVZFLCBzbyAtRUJVU1kgaXMgcmV0dXJuZWQgaW4gdGhhdCBjYXNlLgorICoKKyAqIElmIHN1Y2Nlc3NmdWwsIF9fcG1fcnVudGltZV9zZXRfc3RhdHVzKCkgY2xlYXJzIHRoZSBwb3dlci5ydW50aW1lX2Vycm9yIGZpZWxkCisgKiBhbmQgdGhlIGRldmljZSBwYXJlbnQncyBjb3VudGVyIG9mIHVuc3VzcGVuZGVkIGNoaWxkcmVuIGlzIG1vZGlmaWVkIHRvCisgKiByZWZsZWN0IHRoZSBuZXcgc3RhdHVzLiAgSWYgdGhlIG5ldyBzdGF0dXMgaXMgUlBNX1NVU1BFTkRFRCwgYW4gaWRsZQorICogbm90aWZpY2F0aW9uIHJlcXVlc3QgZm9yIHRoZSBwYXJlbnQgaXMgc3VibWl0dGVkLgorICovCitpbnQgX19wbV9ydW50aW1lX3NldF9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGRldi0+cGFyZW50OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBub3RpZnlfcGFyZW50ID0gZmFsc2U7CisJaW50IGVycm9yID0gMDsKKworCWlmIChzdGF0dXMgIT0gUlBNX0FDVElWRSAmJiBzdGF0dXMgIT0gUlBNX1NVU1BFTkRFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWRldi0+cG93ZXIucnVudGltZV9lcnJvciAmJiAhZGV2LT5wb3dlci5kaXNhYmxlX2RlcHRoKSB7CisJCWVycm9yID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gc3RhdHVzKQorCQlnb3RvIG91dF9zZXQ7CisKKwlpZiAoc3RhdHVzID09IFJQTV9TVVNQRU5ERUQpIHsKKwkJLyogSXQgYWx3YXlzIGlzIHBvc3NpYmxlIHRvIHNldCB0aGUgc3RhdHVzIHRvICdzdXNwZW5kZWQnLiAqLworCQlpZiAocGFyZW50KSB7CisJCQlhdG9taWNfYWRkX3VubGVzcygmcGFyZW50LT5wb3dlci5jaGlsZF9jb3VudCwgLTEsIDApOworCQkJbm90aWZ5X3BhcmVudCA9ICFwYXJlbnQtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbjsKKwkJfQorCQlnb3RvIG91dF9zZXQ7CisJfQorCisJaWYgKHBhcmVudCkgeworCQlzcGluX2xvY2tfaXJxKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCisJCS8qCisJCSAqIEl0IGlzIGludmFsaWQgdG8gcHV0IGFuIGFjdGl2ZSBjaGlsZCB1bmRlciBhIHBhcmVudCB0aGF0IGlzCisJCSAqIG5vdCBhY3RpdmUsIGhhcyBydW4tdGltZSBQTSBlbmFibGVkIGFuZCB0aGUKKwkJICogJ3Bvd2VyLmlnbm9yZV9jaGlsZHJlbicgZmxhZyB1bnNldC4KKwkJICovCisJCWlmICghcGFyZW50LT5wb3dlci5kaXNhYmxlX2RlcHRoCisJCSAgICAmJiAhcGFyZW50LT5wb3dlci5pZ25vcmVfY2hpbGRyZW4KKwkJICAgICYmIHBhcmVudC0+cG93ZXIucnVudGltZV9zdGF0dXMgIT0gUlBNX0FDVElWRSkgeworCQkJZXJyb3IgPSAtRUJVU1k7CisJCX0gZWxzZSB7CisJCQlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVOREVEKQorCQkJCWF0b21pY19pbmMoJnBhcmVudC0+cG93ZXIuY2hpbGRfY291bnQpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZwYXJlbnQtPnBvd2VyLmxvY2spOworCisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0OworCX0KKworIG91dF9zZXQ6CisJZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9IHN0YXR1czsKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSAwOworIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKKworCWlmIChub3RpZnlfcGFyZW50KQorCQlwbV9yZXF1ZXN0X2lkbGUocGFyZW50KTsKKworCXJldHVybiBlcnJvcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcG1fcnVudGltZV9zZXRfc3RhdHVzKTsKKworLyoqCisgKiBfX3BtX3J1bnRpbWVfYmFycmllciAtIENhbmNlbCBwZW5kaW5nIHJlcXVlc3RzIGFuZCB3YWl0IGZvciBjb21wbGV0aW9ucy4KKyAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCisgKgorICogRmx1c2ggYWxsIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHRoZSBkZXZpY2UgZnJvbSBwbV93cSBhbmQgd2FpdCBmb3IgYWxsCisgKiBydW4tdGltZSBQTSBvcGVyYXRpb25zIGludm9sdmluZyB0aGUgZGV2aWNlIGluIHByb2dyZXNzIHRvIGNvbXBsZXRlLgorICoKKyAqIFNob3VsZCBiZSBjYWxsZWQgdW5kZXIgZGV2LT5wb3dlci5sb2NrIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQgX19wbV9ydW50aW1lX2JhcnJpZXIoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBtX3J1bnRpbWVfZGVhY3RpdmF0ZV90aW1lcihkZXYpOworCisJaWYgKGRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nKSB7CisJCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfTk9ORTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCWNhbmNlbF93b3JrX3N5bmMoJmRldi0+cG93ZXIud29yayk7CisKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJZGV2LT5wb3dlci5yZXF1ZXN0X3BlbmRpbmcgPSBmYWxzZTsKKwl9CisKKwlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORworCSAgICB8fCBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9SRVNVTUlORworCSAgICB8fCBkZXYtPnBvd2VyLmlkbGVfbm90aWZpY2F0aW9uKSB7CisJCURFRklORV9XQUlUKHdhaXQpOworCisJCS8qIFN1c3BlbmQsIHdha2UtdXAgb3IgaWRsZSBub3RpZmljYXRpb24gaW4gcHJvZ3Jlc3MuICovCisJCWZvciAoOzspIHsKKwkJCXByZXBhcmVfdG9fd2FpdCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlLCAmd2FpdCwKKwkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJaWYgKGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgIT0gUlBNX1NVU1BFTkRJTkcKKwkJCSAgICAmJiBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzICE9IFJQTV9SRVNVTUlORworCQkJICAgICYmICFkZXYtPnBvd2VyLmlkbGVfbm90aWZpY2F0aW9uKQorCQkJCWJyZWFrOworCQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCisJCQlzY2hlZHVsZSgpOworCisJCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCQl9CisJCWZpbmlzaF93YWl0KCZkZXYtPnBvd2VyLndhaXRfcXVldWUsICZ3YWl0KTsKKwl9Cit9CisKKy8qKgorICogcG1fcnVudGltZV9iYXJyaWVyIC0gRmx1c2ggcGVuZGluZyByZXF1ZXN0cyBhbmQgd2FpdCBmb3IgY29tcGxldGlvbnMuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIFByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHN1c3BlbmRlZCBieSBpbmNyZW1lbnRpbmcgaXRzIHVzYWdlIGNvdW50ZXIgYW5kCisgKiBpZiB0aGVyZSdzIGEgcGVuZGluZyByZXN1bWUgcmVxdWVzdCBmb3IgdGhlIGRldmljZSwgd2FrZSB0aGUgZGV2aWNlIHVwLgorICogTmV4dCwgbWFrZSBzdXJlIHRoYXQgYWxsIHBlbmRpbmcgcmVxdWVzdHMgZm9yIHRoZSBkZXZpY2UgaGF2ZSBiZWVuIGZsdXNoZWQKKyAqIGZyb20gcG1fd3EgYW5kIHdhaXQgZm9yIGFsbCBydW4tdGltZSBQTSBvcGVyYXRpb25zIGludm9sdmluZyB0aGUgZGV2aWNlIGluCisgKiBwcm9ncmVzcyB0byBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAxLCBpZiB0aGVyZSB3YXMgYSByZXN1bWUgcmVxdWVzdCBwZW5kaW5nIGFuZCB0aGUgZGV2aWNlIGhhZCB0byBiZSB3b2tlbiB1cCwKKyAqIDAsIG90aGVyd2lzZQorICovCitpbnQgcG1fcnVudGltZV9iYXJyaWVyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0dmFsID0gMDsKKworCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKGRldik7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCWlmIChkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZworCSAgICAmJiBkZXYtPnBvd2VyLnJlcXVlc3QgPT0gUlBNX1JFUV9SRVNVTUUpIHsKKwkJX19wbV9ydW50aW1lX3Jlc3VtZShkZXYsIGZhbHNlKTsKKwkJcmV0dmFsID0gMTsKKwl9CisKKwlfX3BtX3J1bnRpbWVfYmFycmllcihkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX3J1bnRpbWVfYmFycmllcik7CisKKy8qKgorICogX19wbV9ydW50aW1lX2Rpc2FibGUgLSBEaXNhYmxlIHJ1bi10aW1lIFBNIG9mIGEgZGV2aWNlLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBjaGVja19yZXN1bWU6IElmIHNldCwgY2hlY2sgaWYgdGhlcmUncyBhIHJlc3VtZSByZXF1ZXN0IGZvciB0aGUgZGV2aWNlLgorICoKKyAqIEluY3JlbWVudCBwb3dlci5kaXNhYmxlX2RlcHRoIGZvciB0aGUgZGV2aWNlIGFuZCBpZiB3YXMgemVybyBwcmV2aW91c2x5LAorICogY2FuY2VsIGFsbCBwZW5kaW5nIHJ1bi10aW1lIFBNIHJlcXVlc3RzIGZvciB0aGUgZGV2aWNlIGFuZCB3YWl0IGZvciBhbGwKKyAqIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgdG8gY29tcGxldGUuICBUaGUgZGV2aWNlIGNhbiBiZSBlaXRoZXIgYWN0aXZlIG9yCisgKiBzdXNwZW5kZWQgYWZ0ZXIgaXRzIHJ1bi10aW1lIFBNIGhhcyBiZWVuIGRpc2FibGVkLgorICoKKyAqIElmIEBjaGVja19yZXN1bWUgaXMgc2V0IGFuZCB0aGVyZSdzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZyB3aGVuCisgKiBfX3BtX3J1bnRpbWVfZGlzYWJsZSgpIGlzIGNhbGxlZCBhbmQgcG93ZXIuZGlzYWJsZV9kZXB0aCBpcyB6ZXJvLCB0aGUKKyAqIGZ1bmN0aW9uIHdpbGwgd2FrZSB1cCB0aGUgZGV2aWNlIGJlZm9yZSBkaXNhYmxpbmcgaXRzIHJ1bi10aW1lIFBNLgorICovCit2b2lkIF9fcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBjaGVja19yZXN1bWUpCit7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCWlmIChkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGggPiAwKSB7CisJCWRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCsrOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFdha2UgdXAgdGhlIGRldmljZSBpZiB0aGVyZSdzIGEgcmVzdW1lIHJlcXVlc3QgcGVuZGluZywgYmVjYXVzZSB0aGF0CisJICogbWVhbnMgdGhlcmUgcHJvYmFibHkgaXMgc29tZSBJL08gdG8gcHJvY2VzcyBhbmQgZGlzYWJsaW5nIHJ1bi10aW1lIFBNCisJICogc2hvdWxkbid0IHByZXZlbnQgdGhlIGRldmljZSBmcm9tIHByb2Nlc3NpbmcgdGhlIEkvTy4KKwkgKi8KKwlpZiAoY2hlY2tfcmVzdW1lICYmIGRldi0+cG93ZXIucmVxdWVzdF9wZW5kaW5nCisJICAgICYmIGRldi0+cG93ZXIucmVxdWVzdCA9PSBSUE1fUkVRX1JFU1VNRSkgeworCQkvKgorCQkgKiBQcmV2ZW50IHN1c3BlbmRzIGFuZCBpZGxlIG5vdGlmaWNhdGlvbnMgZnJvbSBiZWluZyBjYXJyaWVkCisJCSAqIG91dCBhZnRlciB3ZSBoYXZlIHdva2VuIHVwIHRoZSBkZXZpY2UuCisJCSAqLworCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOworCisJCV9fcG1fcnVudGltZV9yZXN1bWUoZGV2LCBmYWxzZSk7CisKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGRldik7CisJfQorCisJaWYgKCFkZXYtPnBvd2VyLmRpc2FibGVfZGVwdGgrKykKKwkJX19wbV9ydW50aW1lX2JhcnJpZXIoZGV2KTsKKworIG91dDoKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3BtX3J1bnRpbWVfZGlzYWJsZSk7CisKKy8qKgorICogcG1fcnVudGltZV9lbmFibGUgLSBFbmFibGUgcnVuLXRpbWUgUE0gb2YgYSBkZXZpY2UuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICovCit2b2lkIHBtX3J1bnRpbWVfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cG93ZXIubG9jaywgZmxhZ3MpOworCisJaWYgKGRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA+IDApCisJCWRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aC0tOworCWVsc2UKKwkJZGV2X3dhcm4oZGV2LCAiVW5iYWxhbmNlZCAlcyFcbiIsIF9fZnVuY19fKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cG93ZXIubG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fcnVudGltZV9lbmFibGUpOworCisvKioKKyAqIHBtX3J1bnRpbWVfaW5pdCAtIEluaXRpYWxpemUgcnVuLXRpbWUgUE0gZmllbGRzIGluIGdpdmVuIGRldmljZSBvYmplY3QuCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IHRvIGluaXRpYWxpemUuCisgKi8KK3ZvaWQgcG1fcnVudGltZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5wb3dlci5sb2NrKTsKKworCWRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPSBSUE1fU1VTUEVOREVEOworCWRldi0+cG93ZXIuaWRsZV9ub3RpZmljYXRpb24gPSBmYWxzZTsKKworCWRldi0+cG93ZXIuZGlzYWJsZV9kZXB0aCA9IDE7CisJYXRvbWljX3NldCgmZGV2LT5wb3dlci51c2FnZV9jb3VudCwgMCk7CisKKwlkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IgPSAwOworCisJYXRvbWljX3NldCgmZGV2LT5wb3dlci5jaGlsZF9jb3VudCwgMCk7CisJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oZGV2LCBmYWxzZSk7CisKKwlkZXYtPnBvd2VyLnJlcXVlc3RfcGVuZGluZyA9IGZhbHNlOworCWRldi0+cG93ZXIucmVxdWVzdCA9IFJQTV9SRVFfTk9ORTsKKwlkZXYtPnBvd2VyLmRlZmVycmVkX3Jlc3VtZSA9IGZhbHNlOworCUlOSVRfV09SSygmZGV2LT5wb3dlci53b3JrLCBwbV9ydW50aW1lX3dvcmspOworCisJZGV2LT5wb3dlci50aW1lcl9leHBpcmVzID0gMDsKKwlzZXR1cF90aW1lcigmZGV2LT5wb3dlci5zdXNwZW5kX3RpbWVyLCBwbV9zdXNwZW5kX3RpbWVyX2ZuLAorCQkJKHVuc2lnbmVkIGxvbmcpZGV2KTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+cG93ZXIud2FpdF9xdWV1ZSk7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9yZW1vdmUgLSBQcmVwYXJlIGZvciByZW1vdmluZyBhIGRldmljZSBmcm9tIGRldmljZSBoaWVyYXJjaHkuCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGJlaW5nIHJlbW92ZWQgZnJvbSBkZXZpY2UgaGllcmFyY2h5LgorICovCit2b2lkIHBtX3J1bnRpbWVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlfX3BtX3J1bnRpbWVfZGlzYWJsZShkZXYsIGZhbHNlKTsKKworCS8qIENoYW5nZSB0aGUgc3RhdHVzIGJhY2sgdG8gJ3N1c3BlbmRlZCcgdG8gbWF0Y2ggdGhlIGluaXRpYWwgc3RhdHVzLiAqLworCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9BQ1RJVkUpCisJCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwppbmRleCA5NWQzNDQ5Li5iNmNkNTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VibGsuYwpAQCAtMTcyLDYgKzE3Miw5IEBACiAJCUJVRygpOwogCQliaW9fZW5kaW8oYmlvLCAtRU5YSU8pOwogCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSB7CisJCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKKwkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChiaW8tPmJpX2lvX3ZlYyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYW9lOiBiaV9pb192ZWMgaXMgTlVMTFxuIik7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IGE1MmNjN2YuLjA1ODlkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTM4ODksNyArMzg4OSw3IEBACiAJaW50IGogPSAwOwogCWludCByYzsKIAlpbnQgZGFjLCByZXR1cm5fY29kZTsKLQlJbnF1aXJ5RGF0YV9zdHJ1Y3QgKmlucV9idWZmID0gTlVMTDsKKwlJbnF1aXJ5RGF0YV9zdHJ1Y3QgKmlucV9idWZmOwogCiAJaWYgKHJlc2V0X2RldmljZXMpIHsKIAkJLyogUmVzZXQgdGhlIGNvbnRyb2xsZXIgd2l0aCBhIFBDSSBwb3dlci1jeWNsZSAqLwpAQCAtNDAyOSw2ICs0MDI5LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IHVuYWJsZSB0byBkZXRlcm1pbmUgZmlybXdhcmUiCiAJCQkiIHZlcnNpb24gb2YgY29udHJvbGxlclxuIik7CiAJfQorCWtmcmVlKGlucV9idWZmKTsKIAogCWNjaXNzX3Byb2Npbml0KGkpOwogCkBAIC00MDQ1LDcgKzQwNDYsNiBAQAogCXJldHVybiAxOwogCiBjbGVhbjQ6Ci0Ja2ZyZWUoaW5xX2J1ZmYpOwogCWtmcmVlKGhiYVtpXS0+Y21kX3Bvb2xfYml0cyk7CiAJaWYgKGhiYVtpXS0+Y21kX3Bvb2wpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5wZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggOTFiNzUzMC4uMmIzODdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC00MTUxLDcgKzQxNTEsNyBAQAogewogfQogCi1zdGF0aWMgaW50IGZsb3BweV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBmbG9wcHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpbnQgZmRjOwogCkBAIC00MTYyLDEwICs0MTYyLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZsb3BweV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZmxvcHB5X3BtX29wcyA9IHsKIAkucmVzdW1lID0gZmxvcHB5X3Jlc3VtZSwKKwkucmVzdG9yZSA9IGZsb3BweV9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbG9wcHlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gImZsb3BweSIsCisJCS5wbSA9ICZmbG9wcHlfcG1fb3BzLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDU3NTcxODguLmJiYjc5NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC00NzUsNyArNDc1LDcgQEAKIAlwb3MgPSAoKGxvZmZfdCkgYmlvLT5iaV9zZWN0b3IgPDwgOSkgKyBsby0+bG9fb2Zmc2V0OwogCiAJaWYgKGJpb19ydyhiaW8pID09IFdSSVRFKSB7Ci0JCWludCBiYXJyaWVyID0gYmlvX2JhcnJpZXIoYmlvKTsKKwkJYm9vbCBiYXJyaWVyID0gYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUik7CiAJCXN0cnVjdCBmaWxlICpmaWxlID0gbG8tPmxvX2JhY2tpbmdfZmlsZTsKIAogCQlpZiAoYmFycmllcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwppbmRleCA5MTFkZmQ5Li45ZjM1MThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwpAQCAtMjE5LDggKzIxOSw2IEBACiBzdGF0aWMgaW50IHBjZF9jb3VudDsJCS8qIG51bWJlciBvZiBibG9ja3Mgc3RpbGwgdG8gZG8gKi8KIHN0YXRpYyBjaGFyICpwY2RfYnVmOwkJLyogYnVmZmVyIGZvciByZXF1ZXN0IGluIHByb2dyZXNzICovCiAKLXN0YXRpYyBpbnQgcGNkX3dhcm5lZDsJCS8qIEhhdmUgd2UgbG9nZ2VkIGEgcGhhc2Ugd2FybmluZyA/ICovCi0KIC8qIGtlcm5lbCBnbHVlIHN0cnVjdHVyZXMgKi8KIAogc3RhdGljIGludCBwY2RfYmxvY2tfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUpCkBAIC00MTcsMTIgKzQxNSwxMCBAQAogCQkJCQlwcmludGsKIAkJCQkJICAgICgiJXM6ICVzOiBVbmV4cGVjdGVkIHBoYXNlICVkLCBkPSVkLCBrPSVkXG4iLAogCQkJCQkgICAgIGNkLT5uYW1lLCBmdW4sIHAsIGQsIGspOwotCQkJCWlmICgodmVyYm9zZSA8IDIpICYmICFwY2Rfd2FybmVkKSB7Ci0JCQkJCXBjZF93YXJuZWQgPSAxOwotCQkJCQlwcmludGsKLQkJCQkJICAgICgiJXM6IFdBUk5JTkc6IEFUQVBJIHBoYXNlIGVycm9yc1xuIiwKLQkJCQkJICAgICBjZC0+bmFtZSk7Ci0JCQkJfQorCQkJCWlmICh2ZXJib3NlIDwgMikKKwkJCQkJcHJpbnRrX29uY2UoCisJCQkJCSAgICAiJXM6IFdBUk5JTkc6IEFUQVBJIHBoYXNlIGVycm9yc1xuIiwKKwkJCQkJICAgIGNkLT5uYW1lKTsKIAkJCQltZGVsYXkoMSk7CiAJCQl9CiAJCQlpZiAoaysrID4gUENEX1RNTykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zeDguYyBiL2RyaXZlcnMvYmxvY2svc3g4LmMKaW5kZXggZGE0MDNiNi4uZjVjZDJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zeDguYworKysgYi9kcml2ZXJzL2Jsb2NrL3N4OC5jCkBAIC0xNTY0LDE1ICsxNTY0LDEzIEBACiAKIHN0YXRpYyBpbnQgY2FybV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RydWN0IGNhcm1faG9zdCAqaG9zdDsKIAl1bnNpZ25lZCBpbnQgcGNpX2RhYzsKIAlpbnQgcmM7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoIXByaW50ZWRfdmVyc2lvbisrKQotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiXG4iKTsKKwlwcmludGtfb25jZShLRVJOX0RFQlVHIERSVl9OQU1FICIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOwogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3Zpb2Rhc2QuYyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCmluZGV4IDM5MGQ2OWIuLmI0NDFjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svdmlvZGFzZC5jCkBAIC00MTYsMTUgKzQxNiw5IEBACiAJCWdvdG8gcmV0cnk7CiAJfQogCWlmICh3ZS5tYXhfZGlzayA+IChNQVhfRElTS05PIC0gMSkpIHsKLQkJc3RhdGljIGludCB3YXJuZWQ7Ci0KLQkJaWYgKHdhcm5lZCA9PSAwKSB7Ci0JCQl3YXJuZWQrKzsKLQkJCXByaW50ayhWSU9EX0tFUk5fSU5GTwotCQkJCSJPbmx5IGV4YW1pbmluZyB0aGUgZmlyc3QgJWQgIgotCQkJCSJvZiAlZCBkaXNrcyBjb25uZWN0ZWRcbiIsCi0JCQkJTUFYX0RJU0tOTywgd2UubWF4X2Rpc2sgKyAxKTsKLQkJfQorCQlwcmludGtfb25jZShWSU9EX0tFUk5fSU5GTworCQkJIk9ubHkgZXhhbWluaW5nIHRoZSBmaXJzdCAlZCBvZiAlZCBkaXNrcyBjb25uZWN0ZWRcbiIsCisJCQlNQVhfRElTS05PLCB3ZS5tYXhfZGlzayArIDEpOwogCX0KIAogCS8qIFNlbmQgdGhlIGNsb3NlIGV2ZW50IHRvIE9TLzQwMC4gIFdlIERPTidUIGV4cGVjdCBhIHJlc3BvbnNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZwppbmRleCAxMTY0ODM3Li42NTIzNjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTE3MCw1ICsxNzAsMzAgQEAKIAkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciB2aXJ0dWFsIEhDSSBkZXZpY2VzIGludG8gdGhlCiAJICBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUgKGhjaV92aGNpKS4KIAorY29uZmlnIEJUX01SVkwKKwl0cmlzdGF0ZSAiTWFydmVsbCBCbHVldG9vdGggZHJpdmVyIHN1cHBvcnQiCisJaGVscAorCSAgVGhlIGNvcmUgZHJpdmVyIHRvIHN1cHBvcnQgTWFydmVsbCBCbHVldG9vdGggZGV2aWNlcy4KKworCSAgVGhpcyBkcml2ZXIgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc3VwcG9ydAorCSAgTWFydmVsbCBCbHVldG9vdGggZGV2aWNlcywgc3VjaCBhcyA4Njg4LgorCisJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTWFydmVsbCBCbHVldG9vdGggZHJpdmVyCisJICBpbnRvIHRoZSBrZXJuZWwgb3Igc2F5IE0gdG8gY29tcGlsZSBpdCBhcyBtb2R1bGUuCisKK2NvbmZpZyBCVF9NUlZMX1NESU8KKwl0cmlzdGF0ZSAiTWFydmVsbCBCVC1vdmVyLVNESU8gZHJpdmVyIgorCWRlcGVuZHMgb24gQlRfTVJWTCAmJiBNTUMKKwlzZWxlY3QgRldfTE9BREVSCisJaGVscAorCSAgVGhlIGRyaXZlciBmb3IgTWFydmVsbCBCbHVldG9vdGggY2hpcHNldHMgd2l0aCBTRElPIGludGVyZmFjZS4KKworCSAgVGhpcyBkcml2ZXIgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gdXNlIE1hcnZlbGwgQmx1ZXRvb3RoCisJICBkZXZpY2VzIHdpdGggU0RJTyBpbnRlcmZhY2UuIEN1cnJlbnRseSBvbmx5IFNEODY4OCBjaGlwc2V0IGlzCisJICBzdXBwb3J0ZWQuCisKKwkgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBNYXJ2ZWxsIEJULW92ZXItU0RJTyBkcml2ZXIKKwkgIGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0byBjb21waWxlIGl0IGFzIG1vZHVsZS4KKwogZW5kbWVudQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCmluZGV4IDE2OTMwZjkuLmIzZjU3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlCkBAIC0xNSw2ICsxNSwxMiBAQAogb2JqLSQoQ09ORklHX0JUX0hDSUJUVVNCKQkrPSBidHVzYi5vCiBvYmotJChDT05GSUdfQlRfSENJQlRTRElPKQkrPSBidHNkaW8ubwogCitvYmotJChDT05GSUdfQlRfTVJWTCkJCSs9IGJ0bXJ2bC5vCitvYmotJChDT05GSUdfQlRfTVJWTF9TRElPKQkrPSBidG1ydmxfc2Rpby5vCisKK2J0bXJ2bC15CQkJOj0gYnRtcnZsX21haW4ubworYnRtcnZsLSQoQ09ORklHX0RFQlVHX0ZTKQkrPSBidG1ydmxfZGVidWdmcy5vCisKIGhjaV91YXJ0LXkJCQkJOj0gaGNpX2xkaXNjLm8KIGhjaV91YXJ0LSQoQ09ORklHX0JUX0hDSVVBUlRfSDQpCSs9IGhjaV9oNC5vCiBoY2lfdWFydC0kKENPTkZJR19CVF9IQ0lVQVJUX0JDU1ApCSs9IGhjaV9iY3NwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MTdiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jCkBAIC0wLDAgKzEsNDMyIEBACisvKioKKyAqIE1hcnZlbGwgQmx1ZXRvb3RoIGRyaXZlcjogZGVidWdmcyByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKiovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisKKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgorI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KKworI2luY2x1ZGUgImJ0bXJ2bF9kcnYuaCIKKworc3RydWN0IGJ0bXJ2bF9kZWJ1Z2ZzX2RhdGEgeworCXN0cnVjdCBkZW50cnkgKnJvb3RfZGlyLCAqY29uZmlnX2RpciwgKnN0YXR1c19kaXI7CisKKwkvKiBjb25maWcgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpkcnZkYmc7CisJc3RydWN0IGRlbnRyeSAqcHNtb2RlOworCXN0cnVjdCBkZW50cnkgKnBzY21kOworCXN0cnVjdCBkZW50cnkgKmhzbW9kZTsKKwlzdHJ1Y3QgZGVudHJ5ICpoc2NtZDsKKwlzdHJ1Y3QgZGVudHJ5ICpncGlvZ2FwOworCXN0cnVjdCBkZW50cnkgKmhzY2ZnY21kOworCisJLyogc3RhdHVzICovCisJc3RydWN0IGRlbnRyeSAqY3VycHNtb2RlOworCXN0cnVjdCBkZW50cnkgKmhzc3RhdGU7CisJc3RydWN0IGRlbnRyeSAqcHNzdGF0ZTsKKwlzdHJ1Y3QgZGVudHJ5ICp0eGRubGRyZWFkeTsKK307CisKK3N0YXRpYyBpbnQgYnRtcnZsX29wZW5fZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBidG1ydmxfaHNjZmdjbWRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQljb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlsb25nIHJlc3VsdCwgcmV0OworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlc3VsdCk7CisKKwlwcml2LT5idG1ydmxfZGV2LmhzY2ZnY21kID0gcmVzdWx0OworCisJaWYgKHByaXYtPmJ0bXJ2bF9kZXYuaHNjZmdjbWQpIHsKKwkJYnRtcnZsX3ByZXBhcmVfY29tbWFuZChwcml2KTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5tYWluX3RocmVhZC53YWl0X3EpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYnRtcnZsX2hzY2ZnY21kX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIlZFxuIiwKKwkJCQkJCXByaXYtPmJ0bXJ2bF9kZXYuaHNjZmdjbWQpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0bXJ2bF9oc2NmZ2NtZF9mb3BzID0geworCS5yZWFkCT0gYnRtcnZsX2hzY2ZnY21kX3JlYWQsCisJLndyaXRlCT0gYnRtcnZsX2hzY2ZnY21kX3dyaXRlLAorCS5vcGVuCT0gYnRtcnZsX29wZW5fZ2VuZXJpYywKK307CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9wc21vZGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlsb25nIHJlc3VsdCwgcmV0OworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlc3VsdCk7CisKKwlwcml2LT5idG1ydmxfZGV2LnBzbW9kZSA9IHJlc3VsdDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYnRtcnZsX3BzbW9kZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJaW50IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAiJWRcbiIsCisJCQkJCQlwcml2LT5idG1ydmxfZGV2LnBzbW9kZSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX3BzbW9kZV9mb3BzID0geworCS5yZWFkCT0gYnRtcnZsX3BzbW9kZV9yZWFkLAorCS53cml0ZQk9IGJ0bXJ2bF9wc21vZGVfd3JpdGUsCisJLm9wZW4JPSBidG1ydmxfb3Blbl9nZW5lcmljLAorfTsKKworc3RhdGljIHNzaXplX3QgYnRtcnZsX3BzY21kX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJbG9uZyByZXN1bHQsIHJldDsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291bnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXN1bHQpOworCisJcHJpdi0+YnRtcnZsX2Rldi5wc2NtZCA9IHJlc3VsdDsKKworCWlmIChwcml2LT5idG1ydmxfZGV2LnBzY21kKSB7CisJCWJ0bXJ2bF9wcmVwYXJlX2NvbW1hbmQocHJpdik7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7CisKK30KKworc3RhdGljIHNzaXplX3QgYnRtcnZsX3BzY21kX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIlZFxuIiwgcHJpdi0+YnRtcnZsX2Rldi5wc2NtZCk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX3BzY21kX2ZvcHMgPSB7CisJLnJlYWQgPSBidG1ydmxfcHNjbWRfcmVhZCwKKwkud3JpdGUgPSBidG1ydmxfcHNjbWRfd3JpdGUsCisJLm9wZW4gPSBidG1ydmxfb3Blbl9nZW5lcmljLAorfTsKKworc3RhdGljIHNzaXplX3QgYnRtcnZsX2dwaW9nYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlsb25nIHJlc3VsdCwgcmV0OworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIG1pbl90KHNpemVfdCwgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldCA9IHN0cmljdF9zdHJ0b2woYnVmLCAxNiwgJnJlc3VsdCk7CisKKwlwcml2LT5idG1ydmxfZGV2LmdwaW9fZ2FwID0gcmVzdWx0OworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBidG1ydmxfZ3Bpb2dhcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJaW50IHJldDsKKworCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAiMHgleFxuIiwKKwkJCQkJCXByaXYtPmJ0bXJ2bF9kZXYuZ3Bpb19nYXApOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0bXJ2bF9ncGlvZ2FwX2ZvcHMgPSB7CisJLnJlYWQJPSBidG1ydmxfZ3Bpb2dhcF9yZWFkLAorCS53cml0ZQk9IGJ0bXJ2bF9ncGlvZ2FwX3dyaXRlLAorCS5vcGVuCT0gYnRtcnZsX29wZW5fZ2VuZXJpYywKK307CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9oc2NtZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICopIGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJbG9uZyByZXN1bHQsIHJldDsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291bnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXN1bHQpOworCisJcHJpdi0+YnRtcnZsX2Rldi5oc2NtZCA9IHJlc3VsdDsKKwlpZiAocHJpdi0+YnRtcnZsX2Rldi5oc2NtZCkgeworCQlidG1ydmxfcHJlcGFyZV9jb21tYW5kKHByaXYpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPm1haW5fdGhyZWFkLndhaXRfcSk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBidG1ydmxfaHNjbWRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLCBwcml2LT5idG1ydmxfZGV2LmhzY21kKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidG1ydmxfaHNjbWRfZm9wcyA9IHsKKwkucmVhZAk9IGJ0bXJ2bF9oc2NtZF9yZWFkLAorCS53cml0ZQk9IGJ0bXJ2bF9oc2NtZF93cml0ZSwKKwkub3Blbgk9IGJ0bXJ2bF9vcGVuX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3NpemVfdCBidG1ydmxfaHNtb2RlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxNl07CisJbG9uZyByZXN1bHQsIHJldDsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBtaW5fdChzaXplX3QsIHNpemVvZihidWYpIC0gMSwgY291bnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXN1bHQpOworCisJcHJpdi0+YnRtcnZsX2Rldi5oc21vZGUgPSByZXN1bHQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9oc21vZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiB1c2VyYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIlZFxuIiwgcHJpdi0+YnRtcnZsX2Rldi5oc21vZGUpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0bXJ2bF9oc21vZGVfZm9wcyA9IHsKKwkucmVhZAk9IGJ0bXJ2bF9oc21vZGVfcmVhZCwKKwkud3JpdGUJPSBidG1ydmxfaHNtb2RlX3dyaXRlLAorCS5vcGVuCT0gYnRtcnZsX29wZW5fZ2VuZXJpYywKK307CisKK3N0YXRpYyBzc2l6ZV90IGJ0bXJ2bF9jdXJwc21vZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLCBwcml2LT5hZGFwdGVyLT5wc21vZGUpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHJldCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0bXJ2bF9jdXJwc21vZGVfZm9wcyA9IHsKKwkucmVhZAk9IGJ0bXJ2bF9jdXJwc21vZGVfcmVhZCwKKwkub3Blbgk9IGJ0bXJ2bF9vcGVuX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3NpemVfdCBidG1ydmxfcHNzdGF0ZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIHVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLCBwcml2LT5hZGFwdGVyLT5wc19zdGF0ZSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX3Bzc3RhdGVfZm9wcyA9IHsKKwkucmVhZAk9IGJ0bXJ2bF9wc3N0YXRlX3JlYWQsCisJLm9wZW4JPSBidG1ydmxfb3Blbl9nZW5lcmljLAorfTsKKworc3RhdGljIHNzaXplX3QgYnRtcnZsX2hzc3RhdGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCWludCByZXQ7CisKKwlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gMSwgIiVkXG4iLCBwcml2LT5hZGFwdGVyLT5oc19zdGF0ZSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX2hzc3RhdGVfZm9wcyA9IHsKKwkucmVhZAk9IGJ0bXJ2bF9oc3N0YXRlX3JlYWQsCisJLm9wZW4JPSBidG1ydmxfb3Blbl9nZW5lcmljLAorfTsKKworc3RhdGljIHNzaXplX3QgYnRtcnZsX3R4ZG5sZHJlYWR5X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzE2XTsKKwlpbnQgcmV0OworCisJcmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsICIlZFxuIiwKKwkJCQkJcHJpdi0+YnRtcnZsX2Rldi50eF9kbmxkX3JkeSk7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmV0KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRtcnZsX3R4ZG5sZHJlYWR5X2ZvcHMgPSB7CisJLnJlYWQJPSBidG1ydmxfdHhkbmxkcmVhZHlfcmVhZCwKKwkub3Blbgk9IGJ0bXJ2bF9vcGVuX2dlbmVyaWMsCit9OworCit2b2lkIGJ0bXJ2bF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gaGRldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGJ0bXJ2bF9kZWJ1Z2ZzX2RhdGEgKmRiZzsKKworCWRiZyA9IGt6YWxsb2Moc2l6ZW9mKCpkYmcpLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5kZWJ1Z2ZzX2RhdGEgPSBkYmc7CisKKwlpZiAoIWRiZykgeworCQlCVF9FUlIoIkNhbiBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBidG1ydmxfZGVidWdmc19kYXRhLiIpOworCQlyZXR1cm47CisJfQorCisJZGJnLT5yb290X2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYnRtcnZsIiwgTlVMTCk7CisKKwlkYmctPmNvbmZpZ19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNvbmZpZyIsIGRiZy0+cm9vdF9kaXIpOworCisJZGJnLT5wc21vZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwc21vZGUiLCAwNjQ0LCBkYmctPmNvbmZpZ19kaXIsCisJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfcHNtb2RlX2ZvcHMpOworCWRiZy0+cHNjbWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwc2NtZCIsIDA2NDQsIGRiZy0+Y29uZmlnX2RpciwKKwkJCQloZGV2LT5kcml2ZXJfZGF0YSwgJmJ0bXJ2bF9wc2NtZF9mb3BzKTsKKwlkYmctPmdwaW9nYXAgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJncGlvZ2FwIiwgMDY0NCwgZGJnLT5jb25maWdfZGlyLAorCQkJCWhkZXYtPmRyaXZlcl9kYXRhLCAmYnRtcnZsX2dwaW9nYXBfZm9wcyk7CisJZGJnLT5oc21vZGUgPSAgZGVidWdmc19jcmVhdGVfZmlsZSgiaHNtb2RlIiwgMDY0NCwgZGJnLT5jb25maWdfZGlyLAorCQkJCWhkZXYtPmRyaXZlcl9kYXRhLCAmYnRtcnZsX2hzbW9kZV9mb3BzKTsKKwlkYmctPmhzY21kID0gZGVidWdmc19jcmVhdGVfZmlsZSgiaHNjbWQiLCAwNjQ0LCBkYmctPmNvbmZpZ19kaXIsCisJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfaHNjbWRfZm9wcyk7CisJZGJnLT5oc2NmZ2NtZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImhzY2ZnY21kIiwgMDY0NCwgZGJnLT5jb25maWdfZGlyLAorCQkJCWhkZXYtPmRyaXZlcl9kYXRhLCAmYnRtcnZsX2hzY2ZnY21kX2ZvcHMpOworCisJZGJnLT5zdGF0dXNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdGF0dXMiLCBkYmctPnJvb3RfZGlyKTsKKwlkYmctPmN1cnBzbW9kZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImN1cnBzbW9kZSIsIDA0NDQsCisJCQkJCQlkYmctPnN0YXR1c19kaXIsCisJCQkJCQloZGV2LT5kcml2ZXJfZGF0YSwKKwkJCQkJCSZidG1ydmxfY3VycHNtb2RlX2ZvcHMpOworCWRiZy0+cHNzdGF0ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInBzc3RhdGUiLCAwNDQ0LCBkYmctPnN0YXR1c19kaXIsCisJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfcHNzdGF0ZV9mb3BzKTsKKwlkYmctPmhzc3RhdGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJoc3N0YXRlIiwgMDQ0NCwgZGJnLT5zdGF0dXNfZGlyLAorCQkJCWhkZXYtPmRyaXZlcl9kYXRhLCAmYnRtcnZsX2hzc3RhdGVfZm9wcyk7CisJZGJnLT50eGRubGRyZWFkeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInR4ZG5sZHJlYWR5IiwgMDQ0NCwKKwkJCQkJCWRiZy0+c3RhdHVzX2RpciwKKwkJCQkJCWhkZXYtPmRyaXZlcl9kYXRhLAorCQkJCQkJJmJ0bXJ2bF90eGRubGRyZWFkeV9mb3BzKTsKK30KKwordm9pZCBidG1ydmxfZGVidWdmc19yZW1vdmUoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gaGRldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGJ0bXJ2bF9kZWJ1Z2ZzX2RhdGEgKmRiZyA9IHByaXYtPmRlYnVnZnNfZGF0YTsKKworCWlmICghZGJnKQorCQlyZXR1cm47CisKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPnBzbW9kZSk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5wc2NtZCk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5ncGlvZ2FwKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPmhzbW9kZSk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5oc2NtZCk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5oc2NmZ2NtZCk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5jb25maWdfZGlyKTsKKworCWRlYnVnZnNfcmVtb3ZlKGRiZy0+Y3VycHNtb2RlKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkYmctPnBzc3RhdGUpOworCWRlYnVnZnNfcmVtb3ZlKGRiZy0+aHNzdGF0ZSk7CisJZGVidWdmc19yZW1vdmUoZGJnLT50eGRubGRyZWFkeSk7CisJZGVidWdmc19yZW1vdmUoZGJnLT5zdGF0dXNfZGlyKTsKKworCWRlYnVnZnNfcmVtb3ZlKGRiZy0+cm9vdF9kaXIpOworCisJa2ZyZWUoZGJnKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kcnYuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTFjN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2Rydi5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogTWFydmVsbCBCbHVldG9vdGggZHJpdmVyOiBnbG9iYWwgZGVmaW5pdGlvbnMgJiBkZWNsYXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisKKyNkZWZpbmUgQlRNX0hFQURFUl9MRU4JCQk0CisjZGVmaW5lIEJUTV9VUExEX1NJWkUJCQkyMzEyCisKKy8qIFRpbWUgdG8gd2FpdCB1bnRpbCBIb3N0IFNsZWVwIHN0YXRlIGNoYW5nZSBpbiBtaWxsaXNlY29uZCAqLworI2RlZmluZSBXQUlUX1VOVElMX0hTX1NUQVRFX0NIQU5HRUQJNTAwMAorLyogVGltZSB0byB3YWl0IGZvciBjb21tYW5kIHJlc3BvbnNlIGluIG1pbGxpc2Vjb25kICovCisjZGVmaW5lIFdBSVRfVU5USUxfQ01EX1JFU1AJCTUwMDAKKworc3RydWN0IGJ0bXJ2bF90aHJlYWQgeworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisJdm9pZCAqcHJpdjsKK307CisKK3N0cnVjdCBidG1ydmxfZGV2aWNlIHsKKwl2b2lkICpjYXJkOworCXN0cnVjdCBoY2lfZGV2ICpoY2lkZXY7CisKKwl1OCB0eF9kbmxkX3JkeTsKKworCXU4IHBzbW9kZTsKKwl1OCBwc2NtZDsKKwl1OCBoc21vZGU7CisJdTggaHNjbWQ7CisKKwkvKiBMb3cgYnl0ZSBpcyBnYXAsIGhpZ2ggYnl0ZSBpcyBHUElPICovCisJdTE2IGdwaW9fZ2FwOworCisJdTggaHNjZmdjbWQ7CisJdTggc2VuZGNtZGZsYWc7Cit9OworCitzdHJ1Y3QgYnRtcnZsX2FkYXB0ZXIgeworCXUzMiBpbnRfY291bnQ7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKKwl1OCBwc21vZGU7CisJdTggcHNfc3RhdGU7CisJdTggaHNfc3RhdGU7CisJdTggd2FrZXVwX3RyaWVzOworCXdhaXRfcXVldWVfaGVhZF90IGNtZF93YWl0X3E7CisJdTggY21kX2NvbXBsZXRlOworfTsKKworc3RydWN0IGJ0bXJ2bF9wcml2YXRlIHsKKwlzdHJ1Y3QgYnRtcnZsX2RldmljZSBidG1ydmxfZGV2OworCXN0cnVjdCBidG1ydmxfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgYnRtcnZsX3RocmVhZCBtYWluX3RocmVhZDsKKwlpbnQgKCpod19ob3N0X3RvX2NhcmQpIChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYsCisJCQkJdTggKnBheWxvYWQsIHUxNiBuYik7CisJaW50ICgqaHdfd2FrZXVwX2Zpcm13YXJlKSAoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KTsKKwlzcGlubG9ja190IGRyaXZlcl9sb2NrOwkJLyogc3BpbmxvY2sgdXNlZCBieSBkcml2ZXIgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwl2b2lkICpkZWJ1Z2ZzX2RhdGE7CisjZW5kaWYKK307CisKKyNkZWZpbmUgTVJWTF9WRU5ET1JfUEtUCQkJMHhGRQorCisvKiBCbHVldG9vdGggY29tbWFuZHMgICovCisjZGVmaW5lIEJUX0NNRF9BVVRPX1NMRUVQX01PREUJCTB4MjMKKyNkZWZpbmUgQlRfQ01EX0hPU1RfU0xFRVBfQ09ORklHCTB4NTkKKyNkZWZpbmUgQlRfQ01EX0hPU1RfU0xFRVBfRU5BQkxFCTB4NUEKKyNkZWZpbmUgQlRfQ01EX01PRFVMRV9DRkdfUkVRCQkweDVCCisKKy8qIFN1Yi1jb21tYW5kczogTW9kdWxlIEJyaW5ndXAvU2h1dGRvd24gUmVxdWVzdCAqLworI2RlZmluZSBNT0RVTEVfQlJJTkdVUF9SRVEJCTB4RjEKKyNkZWZpbmUgTU9EVUxFX1NIVVRET1dOX1JFUQkJMHhGMgorCisjZGVmaW5lIEJUX0VWRU5UX1BPV0VSX1NUQVRFCQkweDIwCisKKy8qIEJsdWV0b290aCBQb3dlciBTdGF0ZXMgKi8KKyNkZWZpbmUgQlRfUFNfRU5BQkxFCQkJMHgwMgorI2RlZmluZSBCVF9QU19ESVNBQkxFCQkJMHgwMworI2RlZmluZSBCVF9QU19TTEVFUAkJCTB4MDEKKworI2RlZmluZSBPR0YJCQkJMHgzRgorCisvKiBIb3N0IFNsZWVwIHN0YXRlcyAqLworI2RlZmluZSBIU19BQ1RJVkFURUQJCQkweDAxCisjZGVmaW5lIEhTX0RFQUNUSVZBVEVECQkJMHgwMAorCisvKiBQb3dlciBTYXZlIG1vZGVzICovCisjZGVmaW5lIFBTX1NMRUVQCQkJMHgwMQorI2RlZmluZSBQU19BV0FLRQkJCTB4MDAKKworc3RydWN0IGJ0bXJ2bF9jbWQgeworCV9fbGUxNiBvY2Zfb2dmOworCXU4IGxlbmd0aDsKKwl1OCBkYXRhWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBidG1ydmxfZXZlbnQgeworCXU4IGVjOwkJLyogZXZlbnQgY291bnRlciAqLworCXU4IGxlbmd0aDsKKwl1OCBkYXRhWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIFByb3RvdHlwZSBvZiBnbG9iYWwgZnVuY3Rpb24gKi8KKworc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpidG1ydmxfYWRkX2NhcmQodm9pZCAqY2FyZCk7CitpbnQgYnRtcnZsX3JlbW92ZV9jYXJkKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdik7CisKK3ZvaWQgYnRtcnZsX2ludGVycnVwdChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpOworCit2b2lkIGJ0bXJ2bF9jaGVja19ldnRwa3Qoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBidG1ydmxfcHJvY2Vzc19ldmVudChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOworCitpbnQgYnRtcnZsX3NlbmRfbW9kdWxlX2NmZ19jbWQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LCBpbnQgc3ViY21kKTsKK2ludCBidG1ydmxfcHJlcGFyZV9jb21tYW5kKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdik7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3ZvaWQgYnRtcnZsX2RlYnVnZnNfaW5pdChzdHJ1Y3QgaGNpX2RldiAqaGRldik7Cit2b2lkIGJ0bXJ2bF9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgaGNpX2RldiAqaGRldik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9tYWluLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MDU1NjNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYwpAQCAtMCwwICsxLDYyNCBAQAorLyoqCisgKiBNYXJ2ZWxsIEJsdWV0b290aCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBmaWxlICh0aGUgIkZpbGUiKSBpcyBkaXN0cmlidXRlZCBieSBNYXJ2ZWxsIEludGVybmF0aW9uYWwKKyAqIEx0ZC4gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIsIEp1bmUgMTk5MQorICogKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSB1c2UsIHJlZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgRmlsZSBpbgorICogYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5zZSwgYSBjb3B5IG9mIHdoaWNoCisgKiBpcyBhdmFpbGFibGUgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQSBvciBvbiB0aGUKKyAqIHdvcmxkd2lkZSB3ZWIgYXQgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dC4KKyAqCisgKgorICogVEhFIEZJTEUgSVMgRElTVFJJQlVURUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEFORCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFRoZSBMaWNlbnNlIHByb3ZpZGVzIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dAorICogdGhpcyB3YXJyYW50eSBkaXNjbGFpbWVyLgorICoqLworCisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CisKKyNpbmNsdWRlICJidG1ydmxfZHJ2LmgiCisKKyNkZWZpbmUgVkVSU0lPTiAiMS4wIgorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaW50ZXJmYWNlIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLgorICogSXQgdXBkYXRlcyBQb3dlciBTYXZlICYgSG9zdCBTbGVlcCBzdGF0ZXMsIGFuZCB3YWtlcyB1cCB0aGUgbWFpbgorICogdGhyZWFkLgorICovCit2b2lkIGJ0bXJ2bF9pbnRlcnJ1cHQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KQoreworCXByaXYtPmFkYXB0ZXItPnBzX3N0YXRlID0gUFNfQVdBS0U7CisKKwlwcml2LT5hZGFwdGVyLT53YWtldXBfdHJpZXMgPSAwOworCisJcHJpdi0+YWRhcHRlci0+aW50X2NvdW50Kys7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPm1haW5fdGhyZWFkLndhaXRfcSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidG1ydmxfaW50ZXJydXB0KTsKKwordm9pZCBidG1ydmxfY2hlY2tfZXZ0cGt0KHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRyID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBoY2lfZXZfY21kX2NvbXBsZXRlICplYzsKKwl1MTYgb3Bjb2RlLCBvY2Y7CisKKwlpZiAoaGRyLT5ldnQgPT0gSENJX0VWX0NNRF9DT01QTEVURSkgeworCQllYyA9ICh2b2lkICopIChza2ItPmRhdGEgKyBIQ0lfRVZFTlRfSERSX1NJWkUpOworCQlvcGNvZGUgPSBfX2xlMTZfdG9fY3B1KGVjLT5vcGNvZGUpOworCQlvY2YgPSBoY2lfb3Bjb2RlX29jZihvcGNvZGUpOworCQlpZiAob2NmID09IEJUX0NNRF9NT0RVTEVfQ0ZHX1JFUSAmJgorCQkJCQlwcml2LT5idG1ydmxfZGV2LnNlbmRjbWRmbGFnKSB7CisJCQlwcml2LT5idG1ydmxfZGV2LnNlbmRjbWRmbGFnID0gZmFsc2U7CisJCQlwcml2LT5hZGFwdGVyLT5jbWRfY29tcGxldGUgPSB0cnVlOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xKTsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0bXJ2bF9jaGVja19ldnRwa3QpOworCitpbnQgYnRtcnZsX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBidG1ydmxfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGJ0bXJ2bF9ldmVudCAqZXZlbnQ7CisJdTggcmV0ID0gMDsKKworCWV2ZW50ID0gKHN0cnVjdCBidG1ydmxfZXZlbnQgKikgc2tiLT5kYXRhOworCWlmIChldmVudC0+ZWMgIT0gMHhmZikgeworCQlCVF9EQkcoIk5vdCBNYXJ2ZWxsIEV2ZW50PSV4IiwgZXZlbnQtPmVjKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCXN3aXRjaCAoZXZlbnQtPmRhdGFbMF0pIHsKKwljYXNlIEJUX0NNRF9BVVRPX1NMRUVQX01PREU6CisJCWlmICghZXZlbnQtPmRhdGFbMl0pIHsKKwkJCWlmIChldmVudC0+ZGF0YVsxXSA9PSBCVF9QU19FTkFCTEUpCisJCQkJYWRhcHRlci0+cHNtb2RlID0gMTsKKwkJCWVsc2UKKwkJCQlhZGFwdGVyLT5wc21vZGUgPSAwOworCQkJQlRfREJHKCJQUyBNb2RlOiVzIiwKKwkJCQkoYWRhcHRlci0+cHNtb2RlKSA/ICJFbmFibGUiIDogIkRpc2FibGUiKTsKKwkJfSBlbHNlIHsKKwkJCUJUX0RCRygiUFMgTW9kZSBjb21tYW5kIGZhaWxlZCIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCVF9DTURfSE9TVF9TTEVFUF9DT05GSUc6CisJCWlmICghZXZlbnQtPmRhdGFbM10pCisJCQlCVF9EQkcoImdwaW89JXgsIGdhcD0leCIsIGV2ZW50LT5kYXRhWzFdLAorCQkJCQkJCWV2ZW50LT5kYXRhWzJdKTsKKwkJZWxzZQorCQkJQlRfREJHKCJIU0NGRyBjb21tYW5kIGZhaWxlZCIpOworCQlicmVhazsKKworCWNhc2UgQlRfQ01EX0hPU1RfU0xFRVBfRU5BQkxFOgorCQlpZiAoIWV2ZW50LT5kYXRhWzFdKSB7CisJCQlhZGFwdGVyLT5oc19zdGF0ZSA9IEhTX0FDVElWQVRFRDsKKwkJCWlmIChhZGFwdGVyLT5wc21vZGUpCisJCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TTEVFUDsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWRhcHRlci0+Y21kX3dhaXRfcSk7CisJCQlCVF9EQkcoIkhTIEFDVElWQVRFRCEiKTsKKwkJfSBlbHNlIHsKKwkJCUJUX0RCRygiSFMgRW5hYmxlIGZhaWxlZCIpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCVF9DTURfTU9EVUxFX0NGR19SRVE6CisJCWlmIChwcml2LT5idG1ydmxfZGV2LnNlbmRjbWRmbGFnICYmCisJCQkJZXZlbnQtPmRhdGFbMV0gPT0gTU9EVUxFX0JSSU5HVVBfUkVRKSB7CisJCQlCVF9EQkcoIkVWRU5UOiVzIiwgKGV2ZW50LT5kYXRhWzJdKSA/CisJCQkJIkJyaW5nLXVwIGZhaWxlZCIgOiAiQnJpbmctdXAgc3VjY2VlZCIpOworCQl9IGVsc2UgaWYgKHByaXYtPmJ0bXJ2bF9kZXYuc2VuZGNtZGZsYWcgJiYKKwkJCQlldmVudC0+ZGF0YVsxXSA9PSBNT0RVTEVfU0hVVERPV05fUkVRKSB7CisJCQlCVF9EQkcoIkVWRU5UOiVzIiwgKGV2ZW50LT5kYXRhWzJdKSA/CisJCQkJIlNodXRkb3duIGZhaWxlZCIgOiAiU2h1dGRvd24gc3VjY2VlZCIpOworCQl9IGVsc2UgeworCQkJQlRfREJHKCJCVF9DTURfTU9EVUxFX0NGR19SRVEgcmVzcCBmb3IgQVBQIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCVF9FVkVOVF9QT1dFUl9TVEFURToKKwkJaWYgKGV2ZW50LT5kYXRhWzFdID09IEJUX1BTX1NMRUVQKQorCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TTEVFUDsKKwkJQlRfREJHKCJFVkVOVDolcyIsCisJCQkoYWRhcHRlci0+cHNfc3RhdGUpID8gIlBTX1NMRUVQIiA6ICJQU19BV0FLRSIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJUX0RCRygiVW5rbm93biBFdmVudD0lZCIsIGV2ZW50LT5kYXRhWzBdKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCitleGl0OgorCWlmICghcmV0KQorCQlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidG1ydmxfcHJvY2Vzc19ldmVudCk7CisKK2ludCBidG1ydmxfc2VuZF9tb2R1bGVfY2ZnX2NtZChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYsIGludCBzdWJjbWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgYnRtcnZsX2NtZCAqY21kOworCWludCByZXQgPSAwOworCisJc2tiID0gYnRfc2tiX2FsbG9jKHNpemVvZigqY21kKSwgR0ZQX0FUT01JQyk7CisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCUJUX0VSUigiTm8gZnJlZSBza2IiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY21kID0gKHN0cnVjdCBidG1ydmxfY21kICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmNtZCkpOworCWNtZC0+b2NmX29nZiA9IGNwdV90b19sZTE2KGhjaV9vcGNvZGVfcGFjayhPR0YsIEJUX0NNRF9NT0RVTEVfQ0ZHX1JFUSkpOworCWNtZC0+bGVuZ3RoID0gMTsKKwljbWQtPmRhdGFbMF0gPSBzdWJjbWQ7CisKKwlidF9jYihza2IpLT5wa3RfdHlwZSA9IE1SVkxfVkVORE9SX1BLVDsKKworCXNrYi0+ZGV2ID0gKHZvaWQgKikgcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXY7CisJc2tiX3F1ZXVlX2hlYWQoJnByaXYtPmFkYXB0ZXItPnR4X3F1ZXVlLCBza2IpOworCisJcHJpdi0+YnRtcnZsX2Rldi5zZW5kY21kZmxhZyA9IHRydWU7CisKKwlwcml2LT5hZGFwdGVyLT5jbWRfY29tcGxldGUgPSBmYWxzZTsKKworCUJUX0RCRygiUXVldWUgbW9kdWxlIGNmZyBDb21tYW5kIik7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPm1haW5fdGhyZWFkLndhaXRfcSk7CisKKwlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPmFkYXB0ZXItPmNtZF93YWl0X3EsCisJCQkJcHJpdi0+YWRhcHRlci0+Y21kX2NvbXBsZXRlLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoV0FJVF9VTlRJTF9DTURfUkVTUCkpKSB7CisJCXJldCA9IC1FVElNRURPVVQ7CisJCUJUX0VSUigibW9kdWxlX2NmZ19jbWQoJXgpOiB0aW1lb3V0OiAlZCIsCisJCQkJCXN1YmNtZCwgcHJpdi0+YnRtcnZsX2Rldi5zZW5kY21kZmxhZyk7CisJfQorCisJQlRfREJHKCJtb2R1bGUgY2ZnIENvbW1hbmQgZG9uZSIpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0bXJ2bF9zZW5kX21vZHVsZV9jZmdfY21kKTsKKworc3RhdGljIGludCBidG1ydmxfZW5hYmxlX2hzKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBidG1ydmxfY21kICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwlza2IgPSBidF9za2JfYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfQVRPTUlDKTsKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJQlRfRVJSKCJObyBmcmVlIHNrYiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwljbWQgPSAoc3RydWN0IGJ0bXJ2bF9jbWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqY21kKSk7CisJY21kLT5vY2Zfb2dmID0gY3B1X3RvX2xlMTYoaGNpX29wY29kZV9wYWNrKE9HRiwgQlRfQ01EX0hPU1RfU0xFRVBfRU5BQkxFKSk7CisJY21kLT5sZW5ndGggPSAwOworCisJYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPSBNUlZMX1ZFTkRPUl9QS1Q7CisKKwlza2ItPmRldiA9ICh2b2lkICopIHByaXYtPmJ0bXJ2bF9kZXYuaGNpZGV2OworCXNrYl9xdWV1ZV9oZWFkKCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSwgc2tiKTsKKworCUJUX0RCRygiUXVldWUgaHMgZW5hYmxlIENvbW1hbmQiKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKKworCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+YWRhcHRlci0+Y21kX3dhaXRfcSwKKwkJCXByaXYtPmFkYXB0ZXItPmhzX3N0YXRlLAorCQkJbXNlY3NfdG9famlmZmllcyhXQUlUX1VOVElMX0hTX1NUQVRFX0NIQU5HRUQpKSkgeworCQlyZXQgPSAtRVRJTUVET1VUOworCQlCVF9FUlIoInRpbWVvdXQ6ICVkLCAlZCwlZCIsIHByaXYtPmFkYXB0ZXItPmhzX3N0YXRlLAorCQkJCQkJcHJpdi0+YWRhcHRlci0+cHNfc3RhdGUsCisJCQkJCQlwcml2LT5hZGFwdGVyLT53YWtldXBfdHJpZXMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBidG1ydmxfcHJlcGFyZV9jb21tYW5kKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3QgYnRtcnZsX2NtZCAqY21kOworCWludCByZXQgPSAwOworCisJaWYgKHByaXYtPmJ0bXJ2bF9kZXYuaHNjZmdjbWQpIHsKKwkJcHJpdi0+YnRtcnZsX2Rldi5oc2NmZ2NtZCA9IDA7CisKKwkJc2tiID0gYnRfc2tiX2FsbG9jKHNpemVvZigqY21kKSwgR0ZQX0FUT01JQyk7CisJCWlmIChza2IgPT0gTlVMTCkgeworCQkJQlRfRVJSKCJObyBmcmVlIHNrYiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljbWQgPSAoc3RydWN0IGJ0bXJ2bF9jbWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqY21kKSk7CisJCWNtZC0+b2NmX29nZiA9IGNwdV90b19sZTE2KGhjaV9vcGNvZGVfcGFjayhPR0YsIEJUX0NNRF9IT1NUX1NMRUVQX0NPTkZJRykpOworCQljbWQtPmxlbmd0aCA9IDI7CisJCWNtZC0+ZGF0YVswXSA9IChwcml2LT5idG1ydmxfZGV2LmdwaW9fZ2FwICYgMHhmZjAwKSA+PiA4OworCQljbWQtPmRhdGFbMV0gPSAodTgpIChwcml2LT5idG1ydmxfZGV2LmdwaW9fZ2FwICYgMHgwMGZmKTsKKworCQlidF9jYihza2IpLT5wa3RfdHlwZSA9IE1SVkxfVkVORE9SX1BLVDsKKworCQlza2ItPmRldiA9ICh2b2lkICopIHByaXYtPmJ0bXJ2bF9kZXYuaGNpZGV2OworCQlza2JfcXVldWVfaGVhZCgmcHJpdi0+YWRhcHRlci0+dHhfcXVldWUsIHNrYik7CisKKwkJQlRfREJHKCJRdWV1ZSBIU0NGRyBDb21tYW5kLCBncGlvPTB4JXgsIGdhcD0weCV4IiwKKwkJCQkJCWNtZC0+ZGF0YVswXSwgY21kLT5kYXRhWzFdKTsKKwl9CisKKwlpZiAocHJpdi0+YnRtcnZsX2Rldi5wc2NtZCkgeworCQlwcml2LT5idG1ydmxfZGV2LnBzY21kID0gMDsKKworCQlza2IgPSBidF9za2JfYWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQlCVF9FUlIoIk5vIGZyZWUgc2tiIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWNtZCA9IChzdHJ1Y3QgYnRtcnZsX2NtZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpjbWQpKTsKKwkJY21kLT5vY2Zfb2dmID0gY3B1X3RvX2xlMTYoaGNpX29wY29kZV9wYWNrKE9HRiwgQlRfQ01EX0FVVE9fU0xFRVBfTU9ERSkpOworCQljbWQtPmxlbmd0aCA9IDE7CisKKwkJaWYgKHByaXYtPmJ0bXJ2bF9kZXYucHNtb2RlKQorCQkJY21kLT5kYXRhWzBdID0gQlRfUFNfRU5BQkxFOworCQllbHNlCisJCQljbWQtPmRhdGFbMF0gPSBCVF9QU19ESVNBQkxFOworCisJCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gTVJWTF9WRU5ET1JfUEtUOworCisJCXNrYi0+ZGV2ID0gKHZvaWQgKikgcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXY7CisJCXNrYl9xdWV1ZV9oZWFkKCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSwgc2tiKTsKKworCQlCVF9EQkcoIlF1ZXVlIFBTTU9ERSBDb21tYW5kOiVkIiwgY21kLT5kYXRhWzBdKTsKKwl9CisKKwlpZiAocHJpdi0+YnRtcnZsX2Rldi5oc2NtZCkgeworCQlwcml2LT5idG1ydmxfZGV2LmhzY21kID0gMDsKKworCQlpZiAocHJpdi0+YnRtcnZsX2Rldi5oc21vZGUpIHsKKwkJCXJldCA9IGJ0bXJ2bF9lbmFibGVfaHMocHJpdik7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBwcml2LT5od193YWtldXBfZmlybXdhcmUocHJpdik7CisJCQlwcml2LT5hZGFwdGVyLT5oc19zdGF0ZSA9IEhTX0RFQUNUSVZBVEVEOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfdHhfcGt0KHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghc2tiIHx8ICFza2ItPmRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFza2ItPmxlbiB8fCAoKHNrYi0+bGVuICsgQlRNX0hFQURFUl9MRU4pID4gQlRNX1VQTERfU0laRSkpIHsKKwkJQlRfRVJSKCJUeCBFcnJvcjogQmFkIHNrYiBsZW5ndGggJWQgOiAlZCIsCisJCQkJCQlza2ItPmxlbiwgQlRNX1VQTERfU0laRSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IEJUTV9IRUFERVJfTEVOKSB7CisJCXN0cnVjdCBza19idWZmICp0bXAgPSBza2I7CisKKwkJc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBCVE1fSEVBREVSX0xFTik7CisJCWlmICghc2tiKSB7CisJCQlCVF9FUlIoIlR4IEVycm9yOiByZWFsbG9jX2hlYWRyb29tIGZhaWxlZCAlZCIsCisJCQkJQlRNX0hFQURFUl9MRU4pOworCQkJc2tiID0gdG1wOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlrZnJlZV9za2IodG1wKTsKKwl9CisKKwlza2JfcHVzaChza2IsIEJUTV9IRUFERVJfTEVOKTsKKworCS8qIGhlYWRlciB0eXBlOiBieXRlWzNdCisJICogSENJX0NPTU1BTkQgPSAxLCBBQ0xfREFUQSA9IDIsIFNDT19EQVRBID0gMywgMHhGRSA9IFZlbmRvcgorCSAqIGhlYWRlciBsZW5ndGg6IGJ5dGVbMl1bMV1bMF0KKwkgKi8KKworCXNrYi0+ZGF0YVswXSA9IChza2ItPmxlbiAmIDB4MDAwMGZmKTsKKwlza2ItPmRhdGFbMV0gPSAoc2tiLT5sZW4gJiAweDAwZmYwMCkgPj4gODsKKwlza2ItPmRhdGFbMl0gPSAoc2tiLT5sZW4gJiAweGZmMDAwMCkgPj4gMTY7CisJc2tiLT5kYXRhWzNdID0gYnRfY2Ioc2tiKS0+cGt0X3R5cGU7CisKKwlpZiAocHJpdi0+aHdfaG9zdF90b19jYXJkKQorCQlyZXQgPSBwcml2LT5od19ob3N0X3RvX2NhcmQocHJpdiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBidG1ydmxfaW5pdF9hZGFwdGVyKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdikKK3sKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSk7CisKKwlwcml2LT5hZGFwdGVyLT5wc19zdGF0ZSA9IFBTX0FXQUtFOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+YWRhcHRlci0+Y21kX3dhaXRfcSk7Cit9CisKK3N0YXRpYyB2b2lkIGJ0bXJ2bF9mcmVlX2FkYXB0ZXIoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KQoreworCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+YWRhcHRlci0+dHhfcXVldWUpOworCisJa2ZyZWUocHJpdi0+YWRhcHRlcik7CisKKwlwcml2LT5hZGFwdGVyID0gTlVMTDsKK30KKworc3RhdGljIGludCBidG1ydmxfaW9jdGwoc3RydWN0IGhjaV9kZXYgKmhkZXYsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIHZvaWQgYnRtcnZsX2Rlc3RydWN0KHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZW5kX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gTlVMTDsKKworCUJUX0RCRygidHlwZT0lZCwgbGVuPSVkIiwgc2tiLT5wa3RfdHlwZSwgc2tiLT5sZW4pOworCisJaWYgKCFoZGV2IHx8ICFoZGV2LT5kcml2ZXJfZGF0YSkgeworCQlCVF9FUlIoIkZyYW1lIGZvciB1bmtub3duIEhDSSBkZXZpY2UiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpdiA9IChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKikgaGRldi0+ZHJpdmVyX2RhdGE7CisJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkgeworCQlCVF9FUlIoIkZhaWxlZCB0ZXN0aW5nIEhDSV9SVU5JTkcsIGZsYWdzPSVseCIsIGhkZXYtPmZsYWdzKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImRhdGE6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCQkJCQlza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzd2l0Y2ggKGJ0X2NiKHNrYiktPnBrdF90eXBlKSB7CisJY2FzZSBIQ0lfQ09NTUFORF9QS1Q6CisJCWhkZXYtPnN0YXQuY21kX3R4Kys7CisJCWJyZWFrOworCisJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6CisJCWhkZXYtPnN0YXQuYWNsX3R4Kys7CisJCWJyZWFrOworCisJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6CisJCWhkZXYtPnN0YXQuc2NvX3R4Kys7CisJCWJyZWFrOworCX0KKworCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSwgc2tiKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBoZGV2LT5kcml2ZXJfZGF0YTsKKworCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+YWRhcHRlci0+dHhfcXVldWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX2Nsb3NlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IGhkZXYtPmRyaXZlcl9kYXRhOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncykpCisJCXJldHVybiAwOworCisJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5hZGFwdGVyLT50eF9xdWV1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidG1ydmxfb3BlbihzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwlzZXRfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGV2ZW50IGdlbmVyYXRlZCBieSBmaXJtd2FyZSwgcnggZGF0YQorICogcmVjZWl2ZWQgZnJvbSBmaXJtd2FyZSwgYW5kIHR4IGRhdGEgc2VudCBmcm9tIGtlcm5lbC4KKyAqLworc3RhdGljIGludCBidG1ydmxfc2VydmljZV9tYWluX3RocmVhZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBidG1ydmxfdGhyZWFkICp0aHJlYWQgPSBkYXRhOworCXN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiA9IHRocmVhZC0+cHJpdjsKKwlzdHJ1Y3QgYnRtcnZsX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCXdhaXRfcXVldWVfdCB3YWl0OworCXN0cnVjdCBza19idWZmICpza2I7CisJdWxvbmcgZmxhZ3M7CisKKwlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CisKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKworCWZvciAoOzspIHsKKwkJYWRkX3dhaXRfcXVldWUoJnRocmVhZC0+d2FpdF9xLCAmd2FpdCk7CisKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQlpZiAoYWRhcHRlci0+d2FrZXVwX3RyaWVzIHx8CisJCQkJKCghYWRhcHRlci0+aW50X2NvdW50KSAmJgorCQkJCSghcHJpdi0+YnRtcnZsX2Rldi50eF9kbmxkX3JkeSB8fAorCQkJCXNrYl9xdWV1ZV9lbXB0eSgmYWRhcHRlci0+dHhfcXVldWUpKSkpIHsKKwkJCUJUX0RCRygibWFpbl90aHJlYWQgaXMgc2xlZXBpbmcuLi4iKTsKKwkJCXNjaGVkdWxlKCk7CisJCX0KKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJCXJlbW92ZV93YWl0X3F1ZXVlKCZ0aHJlYWQtPndhaXRfcSwgJndhaXQpOworCisJCUJUX0RCRygibWFpbl90aHJlYWQgd29rZSB1cCIpOworCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJCUJUX0RCRygibWFpbl90aHJlYWQ6IGJyZWFrIGZyb20gbWFpbiB0aHJlYWQiKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisJCWlmIChhZGFwdGVyLT5pbnRfY291bnQpIHsKKwkJCWFkYXB0ZXItPmludF9jb3VudCA9IDA7CisJCX0gZWxzZSBpZiAoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU0xFRVAgJiYKKwkJCQkJIXNrYl9xdWV1ZV9lbXB0eSgmYWRhcHRlci0+dHhfcXVldWUpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJYWRhcHRlci0+d2FrZXVwX3RyaWVzKys7CisJCQlwcml2LT5od193YWtldXBfZmlybXdhcmUocHJpdik7CisJCQljb250aW51ZTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCisJCWlmIChhZGFwdGVyLT5wc19zdGF0ZSA9PSBQU19TTEVFUCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghcHJpdi0+YnRtcnZsX2Rldi50eF9kbmxkX3JkeSkKKwkJCWNvbnRpbnVlOworCisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZhZGFwdGVyLT50eF9xdWV1ZSk7CisJCWlmIChza2IpIHsKKwkJCWlmIChidG1ydmxfdHhfcGt0KHByaXYsIHNrYikpCisJCQkJcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXYtPnN0YXQuZXJyX3R4Kys7CisJCQllbHNlCisJCQkJcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXYtPnN0YXQuYnl0ZV90eCArPSBza2ItPmxlbjsKKworCQkJa2ZyZWVfc2tiKHNrYik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpidG1ydmxfYWRkX2NhcmQodm9pZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IE5VTEw7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2OworCWludCByZXQ7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpIHsKKwkJQlRfRVJSKCJDYW4gbm90IGFsbG9jYXRlIHByaXYiKTsKKwkJZ290byBlcnJfcHJpdjsKKwl9CisKKwlwcml2LT5hZGFwdGVyID0ga3phbGxvYyhzaXplb2YoKnByaXYtPmFkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmFkYXB0ZXIpIHsKKwkJQlRfRVJSKCJBbGxvY2F0ZSBidWZmZXIgZm9yIGJ0bXJ2bF9hZGFwdGVyIGZhaWxlZCEiKTsKKwkJZ290byBlcnJfYWRhcHRlcjsKKwl9CisKKwlidG1ydmxfaW5pdF9hZGFwdGVyKHByaXYpOworCisJaGRldiA9IGhjaV9hbGxvY19kZXYoKTsKKwlpZiAoIWhkZXYpIHsKKwkJQlRfRVJSKCJDYW4gbm90IGFsbG9jYXRlIEhDSSBkZXZpY2UiKTsKKwkJZ290byBlcnJfaGRldjsKKwl9CisKKwlCVF9EQkcoIlN0YXJ0aW5nIGt0aHJlYWQuLi4iKTsKKwlwcml2LT5tYWluX3RocmVhZC5wcml2ID0gcHJpdjsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+ZHJpdmVyX2xvY2spOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKKwlwcml2LT5tYWluX3RocmVhZC50YXNrID0ga3RocmVhZF9ydW4oYnRtcnZsX3NlcnZpY2VfbWFpbl90aHJlYWQsCisJCQkJJnByaXYtPm1haW5fdGhyZWFkLCAiYnRtcnZsX21haW5fc2VydmljZSIpOworCisJcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXYgPSBoZGV2OworCXByaXYtPmJ0bXJ2bF9kZXYuY2FyZCA9IGNhcmQ7CisKKwloZGV2LT5kcml2ZXJfZGF0YSA9IHByaXY7CisKKwlwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5ID0gdHJ1ZTsKKworCWhkZXYtPnR5cGUgPSBIQ0lfU0RJTzsKKwloZGV2LT5vcGVuID0gYnRtcnZsX29wZW47CisJaGRldi0+Y2xvc2UgPSBidG1ydmxfY2xvc2U7CisJaGRldi0+Zmx1c2ggPSBidG1ydmxfZmx1c2g7CisJaGRldi0+c2VuZCA9IGJ0bXJ2bF9zZW5kX2ZyYW1lOworCWhkZXYtPmRlc3RydWN0ID0gYnRtcnZsX2Rlc3RydWN0OworCWhkZXYtPmlvY3RsID0gYnRtcnZsX2lvY3RsOworCWhkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlyZXQgPSBoY2lfcmVnaXN0ZXJfZGV2KGhkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCUJUX0VSUigiQ2FuIG5vdCByZWdpc3RlciBIQ0kgZGV2aWNlIik7CisJCWdvdG8gZXJyX2hjaV9yZWdpc3Rlcl9kZXY7CisJfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJYnRtcnZsX2RlYnVnZnNfaW5pdChoZGV2KTsKKyNlbmRpZgorCisJcmV0dXJuIHByaXY7CisKK2Vycl9oY2lfcmVnaXN0ZXJfZGV2OgorCS8qIFN0b3AgdGhlIHRocmVhZCBzZXJ2aWNpbmcgdGhlIGludGVycnVwdHMgKi8KKwlrdGhyZWFkX3N0b3AocHJpdi0+bWFpbl90aHJlYWQudGFzayk7CisKKwloY2lfZnJlZV9kZXYoaGRldik7CisKK2Vycl9oZGV2OgorCWJ0bXJ2bF9mcmVlX2FkYXB0ZXIocHJpdik7CisKK2Vycl9hZGFwdGVyOgorCWtmcmVlKHByaXYpOworCitlcnJfcHJpdjoKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0bXJ2bF9hZGRfY2FyZCk7CisKK2ludCBidG1ydmxfcmVtb3ZlX2NhcmQoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2OworCisJaGRldiA9IHByaXYtPmJ0bXJ2bF9kZXYuaGNpZGV2OworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5hZGFwdGVyLT5jbWRfd2FpdF9xKTsKKworCWt0aHJlYWRfc3RvcChwcml2LT5tYWluX3RocmVhZC50YXNrKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCWJ0bXJ2bF9kZWJ1Z2ZzX3JlbW92ZShoZGV2KTsKKyNlbmRpZgorCisJaGNpX3VucmVnaXN0ZXJfZGV2KGhkZXYpOworCisJaGNpX2ZyZWVfZGV2KGhkZXYpOworCisJcHJpdi0+YnRtcnZsX2Rldi5oY2lkZXYgPSBOVUxMOworCisJYnRtcnZsX2ZyZWVfYWRhcHRlcihwcml2KTsKKworCWtmcmVlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidG1ydmxfcmVtb3ZlX2NhcmQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIEJsdWV0b290aCBkcml2ZXIgdmVyICIgVkVSU0lPTik7CitNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMzNiODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCkBAIC0wLDAgKzEsMTAwMyBAQAorLyoqCisgKiBNYXJ2ZWxsIEJULW92ZXItU0RJTyBkcml2ZXI6IFNESU8gaW50ZXJmYWNlIHJlbGF0ZWQgZnVuY3Rpb25zLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKiovCisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9faWRzLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgorCisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CisKKyNpbmNsdWRlICJidG1ydmxfZHJ2LmgiCisjaW5jbHVkZSAiYnRtcnZsX3NkaW8uaCIKKworI2RlZmluZSBWRVJTSU9OICIxLjAiCisKKy8qIFRoZSBidG1ydmxfc2Rpb19yZW1vdmUoKSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQKKyAqIHdoZW4gdXNlciByZW1vdmVzIHRoaXMgbW9kdWxlIGZyb20ga2VybmVsIHNwYWNlIG9yIGVqZWN0cworICogdGhlIGNhcmQgZnJvbSB0aGUgc2xvdC4gVGhlIGRyaXZlciBoYW5kbGVzIHRoZXNlIDIgY2FzZXMKKyAqIGRpZmZlcmVudGx5LgorICogSWYgdGhlIHVzZXIgaXMgcmVtb3ZpbmcgdGhlIG1vZHVsZSwgYSBNT0RVTEVfU0hVVERPV05fUkVRCisgKiBjb21tYW5kIGlzIHNlbnQgdG8gZmlybXdhcmUgYW5kIGludGVycnVwdCB3aWxsIGJlIGRpc2FibGVkLgorICogSWYgdGhlIGNhcmQgaXMgcmVtb3ZlZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBzZW5kIGNvbW1hbmQKKyAqIG9yIGRpc2FibGUgaW50ZXJydXB0LgorICoKKyAqIFRoZSB2YXJpYWJsZSAndXNlcl9ybW1vZCcgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCB0aGVzZSB0d28KKyAqIHNjZW5hcmlvcy4gVGhpcyBmbGFnIGlzIGluaXRpYWxpemVkIGFzIEZBTFNFIGluIGNhc2UgdGhlIGNhcmQKKyAqIGlzIHJlbW92ZWQsIGFuZCB3aWxsIGJlIHNldCB0byBUUlVFIGZvciBtb2R1bGUgcmVtb3ZhbCB3aGVuCisgKiBtb2R1bGVfZXhpdCBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK3N0YXRpYyB1OCB1c2VyX3JtbW9kOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0bXJ2bF9zZGlvX2RldmljZSBidG1ydmxfc2Rpb19zZDY4ODggPSB7CisJLmhlbHBlcgkJPSAic2Q4Njg4X2hlbHBlci5iaW4iLAorCS5maXJtd2FyZQk9ICJzZDg2ODguYmluIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgYnRtcnZsX3NkaW9faWRzW10gPSB7CisJLyogTWFydmVsbCBTRDg2ODggQmx1ZXRvb3RoIGRldmljZSAqLworCXsgU0RJT19ERVZJQ0UoU0RJT19WRU5ET1JfSURfTUFSVkVMTCwgMHg5MTA1KSwKKwkJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmYnRtcnZsX3NkaW9fc2Q2ODg4IH0sCisKKwl7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgYnRtcnZsX3NkaW9faWRzKTsKKworc3RhdGljIGludCBidG1ydmxfc2Rpb19nZXRfcnhfdW5pdChzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwl1OCByZWc7CisJaW50IHJldDsKKworCXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgQ0FSRF9SWF9VTklUX1JFRywgJnJldCk7CisJaWYgKCFyZXQpCisJCWNhcmQtPnJ4X3VuaXQgPSByZWc7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX3JlYWRfZndfc3RhdHVzKHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkLCB1MTYgKmRhdCkKK3sKKwl1OCBmd3MwLCBmd3MxOworCWludCByZXQ7CisKKwkqZGF0ID0gMDsKKworCWZ3czAgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfRldfU1RBVFVTMF9SRUcsICZyZXQpOworCisJaWYgKCFyZXQpCisJCWZ3czEgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfRldfU1RBVFVTMV9SRUcsICZyZXQpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CisKKwkqZGF0ID0gKCgodTE2KSBmd3MxKSA8PCA4KSB8IGZ3czA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19yZWFkX3J4X2xlbihzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCwgdTE2ICpkYXQpCit7CisJdTggcmVnOworCWludCByZXQ7CisKKwlyZWcgPSBzZGlvX3JlYWRiKGNhcmQtPmZ1bmMsIENBUkRfUlhfTEVOX1JFRywgJnJldCk7CisJaWYgKCFyZXQpCisJCSpkYXQgPSAodTE2KSByZWcgPDwgY2FyZC0+cnhfdW5pdDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fZW5hYmxlX2hvc3RfaW50X21hc2soc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQsCisJCQkJCQkJCXU4IG1hc2spCit7CisJaW50IHJldDsKKworCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIG1hc2ssIEhPU1RfSU5UX01BU0tfUkVHLCAmcmV0KTsKKwlpZiAocmV0KSB7CisJCUJUX0VSUigiVW5hYmxlIHRvIGVuYWJsZSB0aGUgaG9zdCBpbnRlcnJ1cHQhIik7CisJCXJldCA9IC1FSU87CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19kaXNhYmxlX2hvc3RfaW50X21hc2soc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQsCisJCQkJCQkJCXU4IG1hc2spCit7CisJdTggaG9zdF9pbnRfbWFzazsKKwlpbnQgcmV0OworCisJaG9zdF9pbnRfbWFzayA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSE9TVF9JTlRfTUFTS19SRUcsICZyZXQpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlPOworCisJaG9zdF9pbnRfbWFzayAmPSB+bWFzazsKKworCXNkaW9fd3JpdGViKGNhcmQtPmZ1bmMsIGhvc3RfaW50X21hc2ssIEhPU1RfSU5UX01BU0tfUkVHLCAmcmV0KTsKKwlpZiAocmV0IDwgMCkgeworCQlCVF9FUlIoIlVuYWJsZSB0byBkaXNhYmxlIHRoZSBob3N0IGludGVycnVwdCEiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fcG9sbF9jYXJkX3N0YXR1cyhzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCwgdTggYml0cykKK3sKKwl1bnNpZ25lZCBpbnQgdHJpZXM7CisJdTggc3RhdHVzOworCWludCByZXQ7CisKKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBNQVhfUE9MTF9UUklFUyAqIDEwMDA7IHRyaWVzKyspIHsKKwkJc3RhdHVzID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLCBDQVJEX1NUQVRVU19SRUcsICZyZXQpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CisJCWlmICgoc3RhdHVzICYgYml0cykgPT0gYml0cykKKwkJCXJldHVybiByZXQ7CisKKwkJdWRlbGF5KDEpOworCX0KKworCXJldCA9IC1FVElNRURPVVQ7CisKK2ZhaWxlZDoKKwlCVF9FUlIoIkZBSUxFRCEgcmV0PSVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fdmVyaWZ5X2Z3X2Rvd25sb2FkKHN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkLAorCQkJCQkJCQlpbnQgcG9sbG51bSkKK3sKKwlpbnQgcmV0ID0gLUVUSU1FRE9VVDsKKwl1MTYgZmlybXdhcmVzdGF0OworCXVuc2lnbmVkIGludCB0cmllczsKKworCSAvKiBXYWl0IGZvciBmaXJtd2FyZSB0byBiZWNvbWUgcmVhZHkgKi8KKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBwb2xsbnVtOyB0cmllcysrKSB7CisJCWlmIChidG1ydmxfc2Rpb19yZWFkX2Z3X3N0YXR1cyhjYXJkLCAmZmlybXdhcmVzdGF0KSA8IDApCisJCQljb250aW51ZTsKKworCQlpZiAoZmlybXdhcmVzdGF0ID09IEZJUk1XQVJFX1JFQURZKSB7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQltc2xlZXAoMTApOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19kb3dubG9hZF9oZWxwZXIoc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19oZWxwZXIgPSBOVUxMOworCWNvbnN0IHU4ICpoZWxwZXIgPSBOVUxMOworCWludCByZXQ7CisJdm9pZCAqdG1waGxwcmJ1ZiA9IE5VTEw7CisJaW50IHRtcGhscHJidWZzeiwgaGxwcmJsa25vdywgaGVscGVybGVuOworCXU4ICpoZWxwZXJidWY7CisJdTMyIHR4X2xlbjsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2hlbHBlciwgY2FyZC0+aGVscGVyLAorCQkJCQkJJmNhcmQtPmZ1bmMtPmRldik7CisJaWYgKChyZXQgPCAwKSB8fCAhZndfaGVscGVyKSB7CisJCUJUX0VSUigicmVxdWVzdF9maXJtd2FyZShoZWxwZXIpIGZhaWxlZCwgZXJyb3IgY29kZSA9ICVkIiwKKwkJCQkJCQkJCXJldCk7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwloZWxwZXIgPSBmd19oZWxwZXItPmRhdGE7CisJaGVscGVybGVuID0gZndfaGVscGVyLT5zaXplOworCisJQlRfREJHKCJEb3dubG9hZGluZyBoZWxwZXIgaW1hZ2UgKCVkIGJ5dGVzKSwgYmxvY2sgc2l6ZSAlZCBieXRlcyIsCisJCQkJCQloZWxwZXJsZW4sIFNESU9fQkxPQ0tfU0laRSk7CisKKwl0bXBobHByYnVmc3ogPSBBTElHTl9TWihCVE1fVVBMRF9TSVpFLCBCVFNESU9fRE1BX0FMSUdOKTsKKworCXRtcGhscHJidWYgPSBrbWFsbG9jKHRtcGhscHJidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBobHByYnVmKSB7CisJCUJUX0VSUigiVW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgaGVscGVyLiIKKwkJCSIgVGVybWluYXRpbmcgZG93bmxvYWQiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldCh0bXBobHByYnVmLCAwLCB0bXBobHByYnVmc3opOworCisJaGVscGVyYnVmID0gKHU4ICopIEFMSUdOX0FERFIodG1waGxwcmJ1ZiwgQlRTRElPX0RNQV9BTElHTik7CisKKwkvKiBQZXJmb3JtIGhlbHBlciBkYXRhIHRyYW5zZmVyICovCisJdHhfbGVuID0gKEZJUk1XQVJFX1RSQU5TRkVSX05CTE9DSyAqIFNESU9fQkxPQ0tfU0laRSkKKwkJCS0gU0RJT19IRUFERVJfTEVOOworCWhscHJibGtub3cgPSAwOworCisJZG8geworCQlyZXQgPSBidG1ydmxfc2Rpb19wb2xsX2NhcmRfc3RhdHVzKGNhcmQsCisJCQkJCSAgICBDQVJEX0lPX1JFQURZIHwgRE5fTERfQ0FSRF9SRFkpOworCQlpZiAocmV0IDwgMCkgeworCQkJQlRfRVJSKCJIZWxwZXIgZG93bmxvYWQgcG9sbCBzdGF0dXMgdGltZW91dCBAICVkIiwKKwkJCQlobHByYmxrbm93KTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIENoZWNrIGlmIHRoZXJlIGlzIG1vcmUgZGF0YT8gKi8KKwkJaWYgKGhscHJibGtub3cgPj0gaGVscGVybGVuKQorCQkJYnJlYWs7CisKKwkJaWYgKGhlbHBlcmxlbiAtIGhscHJibGtub3cgPCB0eF9sZW4pCisJCQl0eF9sZW4gPSBoZWxwZXJsZW4gLSBobHByYmxrbm93OworCisJCS8qIExpdHRsZS1lbmRpYW4gKi8KKwkJaGVscGVyYnVmWzBdID0gKCh0eF9sZW4gJiAweDAwMDAwMGZmKSA+PiAwKTsKKwkJaGVscGVyYnVmWzFdID0gKCh0eF9sZW4gJiAweDAwMDBmZjAwKSA+PiA4KTsKKwkJaGVscGVyYnVmWzJdID0gKCh0eF9sZW4gJiAweDAwZmYwMDAwKSA+PiAxNik7CisJCWhlbHBlcmJ1ZlszXSA9ICgodHhfbGVuICYgMHhmZjAwMDAwMCkgPj4gMjQpOworCisJCW1lbWNweSgmaGVscGVyYnVmW1NESU9fSEVBREVSX0xFTl0sICZoZWxwZXJbaGxwcmJsa25vd10sCisJCQkJdHhfbGVuKTsKKworCQkvKiBOb3cgc2VuZCB0aGUgZGF0YSAqLworCQlyZXQgPSBzZGlvX3dyaXRlc2IoY2FyZC0+ZnVuYywgY2FyZC0+aW9wb3J0LCBoZWxwZXJidWYsCisJCQkJRklSTVdBUkVfVFJBTlNGRVJfTkJMT0NLICogU0RJT19CTE9DS19TSVpFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCUJUX0VSUigiSU8gZXJyb3IgZHVyaW5nIGhlbHBlciBkb3dubG9hZCBAICVkIiwKKwkJCQlobHByYmxrbm93KTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWhscHJibGtub3cgKz0gdHhfbGVuOworCX0gd2hpbGUgKHRydWUpOworCisJQlRfREJHKCJUcmFuc2ZlcnJpbmcgaGVscGVyIGltYWdlIEVPRiBibG9jayIpOworCisJbWVtc2V0KGhlbHBlcmJ1ZiwgMHgwLCBTRElPX0JMT0NLX1NJWkUpOworCisJcmV0ID0gc2Rpb193cml0ZXNiKGNhcmQtPmZ1bmMsIGNhcmQtPmlvcG9ydCwgaGVscGVyYnVmLAorCQkJCQkJCVNESU9fQkxPQ0tfU0laRSk7CisJaWYgKHJldCA8IDApIHsKKwkJQlRfRVJSKCJJTyBlcnJvciBpbiB3cml0aW5nIGhlbHBlciBpbWFnZSBFT0YgYmxvY2siKTsKKwkJZ290byBkb25lOworCX0KKworCXJldCA9IDA7CisKK2RvbmU6CisJa2ZyZWUodG1waGxwcmJ1Zik7CisJaWYgKGZ3X2hlbHBlcikKKwkJcmVsZWFzZV9maXJtd2FyZShmd19oZWxwZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19kb3dubG9hZF9md193X2hlbHBlcihzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2Zpcm13YXJlID0gTlVMTDsKKwljb25zdCB1OCAqZmlybXdhcmUgPSBOVUxMOworCWludCBmaXJtd2FyZWxlbiwgdG1wZndidWZzeiwgcmV0OworCXVuc2lnbmVkIGludCB0cmllcywgb2Zmc2V0OworCXU4IGJhc2UwLCBiYXNlMTsKKwl2b2lkICp0bXBmd2J1ZiA9IE5VTEw7CisJdTggKmZ3YnVmOworCXUxNiBsZW47CisJaW50IHR4bGVuID0gMCwgdHhfYmxvY2tzID0gMCwgY291bnQgPSAwOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZmlybXdhcmUsIGNhcmQtPmZpcm13YXJlLAorCQkJCQkJCSZjYXJkLT5mdW5jLT5kZXYpOworCWlmICgocmV0IDwgMCkgfHwgIWZ3X2Zpcm13YXJlKSB7CisJCUJUX0VSUigicmVxdWVzdF9maXJtd2FyZShmaXJtd2FyZSkgZmFpbGVkLCBlcnJvciBjb2RlID0gJWQiLAorCQkJCQkJCQkJcmV0KTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBkb25lOworCX0KKworCWZpcm13YXJlID0gZndfZmlybXdhcmUtPmRhdGE7CisJZmlybXdhcmVsZW4gPSBmd19maXJtd2FyZS0+c2l6ZTsKKworCUJUX0RCRygiRG93bmxvYWRpbmcgRlcgaW1hZ2UgKCVkIGJ5dGVzKSIsIGZpcm13YXJlbGVuKTsKKworCXRtcGZ3YnVmc3ogPSBBTElHTl9TWihCVE1fVVBMRF9TSVpFLCBCVFNESU9fRE1BX0FMSUdOKTsKKwl0bXBmd2J1ZiA9IGttYWxsb2ModG1wZndidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0bXBmd2J1ZikgeworCQlCVF9FUlIoIlVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGZpcm13YXJlLiIKKwkJICAgICAgICIgVGVybWluYXRpbmcgZG93bmxvYWQiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCW1lbXNldCh0bXBmd2J1ZiwgMCwgdG1wZndidWZzeik7CisKKwkvKiBFbnN1cmUgYWxpZ25lZCBmaXJtd2FyZSBidWZmZXIgKi8KKwlmd2J1ZiA9ICh1OCAqKSBBTElHTl9BRERSKHRtcGZ3YnVmLCBCVFNESU9fRE1BX0FMSUdOKTsKKworCS8qIFBlcmZvcm0gZmlybXdhcmUgZGF0YSB0cmFuc2ZlciAqLworCW9mZnNldCA9IDA7CisJZG8geworCQlyZXQgPSBidG1ydmxfc2Rpb19wb2xsX2NhcmRfc3RhdHVzKGNhcmQsCisJCQkJCUNBUkRfSU9fUkVBRFkgfCBETl9MRF9DQVJEX1JEWSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlCVF9FUlIoIkZXIGRvd25sb2FkIHdpdGggaGVscGVyIHBvbGwgc3RhdHVzIgorCQkJCQkJIiB0aW1lb3V0IEAgJWQiLCBvZmZzZXQpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgbW9yZSBkYXRhID8gKi8KKwkJaWYgKG9mZnNldCA+PSBmaXJtd2FyZWxlbikKKwkJCWJyZWFrOworCisJCWZvciAodHJpZXMgPSAwOyB0cmllcyA8IE1BWF9QT0xMX1RSSUVTOyB0cmllcysrKSB7CisJCQliYXNlMCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywKKwkJCQkJU1FfUkVBRF9CQVNFX0FERFJFU1NfQTBfUkVHLCAmcmV0KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlCVF9FUlIoIkJBU0UwIHJlZ2lzdGVyIHJlYWQgZmFpbGVkOiIKKwkJCQkJIiBiYXNlMCA9IDB4JTA0WCglZCkuIgorCQkJCQkiIFRlcm1pbmF0aW5nIGRvd25sb2FkIiwKKwkJCQkJYmFzZTAsIGJhc2UwKTsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCWJhc2UxID0gc2Rpb19yZWFkYihjYXJkLT5mdW5jLAorCQkJCQlTUV9SRUFEX0JBU0VfQUREUkVTU19BMV9SRUcsICZyZXQpOworCQkJaWYgKHJldCkgeworCQkJCUJUX0VSUigiQkFTRTEgcmVnaXN0ZXIgcmVhZCBmYWlsZWQ6IgorCQkJCQkiIGJhc2UxID0gMHglMDRYKCVkKS4iCisJCQkJCSIgVGVybWluYXRpbmcgZG93bmxvYWQiLAorCQkJCQliYXNlMSwgYmFzZTEpOworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQlsZW4gPSAoKCh1MTYpIGJhc2UxKSA8PCA4KSB8IGJhc2UwOworCQkJaWYgKGxlbikKKwkJCQlicmVhazsKKworCQkJdWRlbGF5KDEwKTsKKwkJfQorCisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKGxlbiA+IEJUTV9VUExEX1NJWkUpIHsKKwkJCUJUX0VSUigiRlcgZG93bmxvYWQgZmFpbHVyZSBAJWQsIGludmFsaWQgbGVuZ3RoICVkIiwKKwkJCQkJCQkJb2Zmc2V0LCBsZW4pOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCXR4bGVuID0gbGVuOworCisJCWlmIChsZW4gJiBCSVQoMCkpIHsKKwkJCWNvdW50Kys7CisJCQlpZiAoY291bnQgPiBNQVhfV1JJVEVfSU9NRU1fUkVUUlkpIHsKKwkJCQlCVF9FUlIoIkZXIGRvd25sb2FkIGZhaWx1cmUgQCVkLCAiCisJCQkJCSJvdmVyIG1heCByZXRyeSBjb3VudCIsIG9mZnNldCk7CisJCQkJcmV0ID0gLUVJTzsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlCVF9FUlIoIkZXIENSQyBlcnJvciBpbmRpY2F0ZWQgYnkgdGhlIGhlbHBlcjogIgorCQkJCSJsZW4gPSAweCUwNFgsIHR4bGVuID0gJWQiLCBsZW4sIHR4bGVuKTsKKwkJCWxlbiAmPSB+QklUKDApOworCQkJLyogU2V0IHR4bGVuIHRvIDAgc28gYXMgdG8gcmVzZW5kIGZyb20gc2FtZSBvZmZzZXQgKi8KKwkJCXR4bGVuID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNvdW50ID0gMDsKKworCQkJLyogTGFzdCBibG9jayA/ICovCisJCQlpZiAoZmlybXdhcmVsZW4gLSBvZmZzZXQgPCB0eGxlbikKKwkJCQl0eGxlbiA9IGZpcm13YXJlbGVuIC0gb2Zmc2V0OworCisJCQl0eF9ibG9ja3MgPQorCQkJICAgICh0eGxlbiArIFNESU9fQkxPQ0tfU0laRSAtIDEpIC8gU0RJT19CTE9DS19TSVpFOworCisJCQltZW1jcHkoZndidWYsICZmaXJtd2FyZVtvZmZzZXRdLCB0eGxlbik7CisJCX0KKworCQlyZXQgPSBzZGlvX3dyaXRlc2IoY2FyZC0+ZnVuYywgY2FyZC0+aW9wb3J0LCBmd2J1ZiwKKwkJCQkJdHhfYmxvY2tzICogU0RJT19CTE9DS19TSVpFKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJQlRfRVJSKCJGVyBkb3dubG9hZCwgd3JpdGVzYiglZCkgZmFpbGVkIEAlZCIsCisJCQkJCQkJY291bnQsIG9mZnNldCk7CisJCQlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCBIT1NUX0NNRDUzX0ZJTiwgQ09ORklHX1JFRywKKwkJCQkJCQkJCSZyZXQpOworCQkJaWYgKHJldCkKKwkJCQlCVF9FUlIoIndyaXRlYiBmYWlsZWQgKENGRykiKTsKKwkJfQorCisJCW9mZnNldCArPSB0eGxlbjsKKwl9IHdoaWxlICh0cnVlKTsKKworCUJUX0RCRygiRlcgZG93bmxvYWQgb3Zlciwgc2l6ZSAlZCBieXRlcyIsIG9mZnNldCk7CisKKwlyZXQgPSAwOworCitkb25lOgorCWtmcmVlKHRtcGZ3YnVmKTsKKworCWlmIChmd19maXJtd2FyZSkKKwkJcmVsZWFzZV9maXJtd2FyZShmd19maXJtd2FyZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2NhcmRfdG9faG9zdChzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYpCit7CisJdTE2IGJ1Zl9sZW4gPSAwOworCWludCByZXQsIGJ1Zl9ibG9ja19sZW4sIGJsa3N6OworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUzMiB0eXBlOworCXU4ICpwYXlsb2FkID0gTlVMTDsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IHByaXYtPmJ0bXJ2bF9kZXYuaGNpZGV2OworCXN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkID0gcHJpdi0+YnRtcnZsX2Rldi5jYXJkOworCisJaWYgKCFjYXJkIHx8ICFjYXJkLT5mdW5jKSB7CisJCUJUX0VSUigiY2FyZCBvciBmdW5jdGlvbiBpcyBOVUxMISIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogUmVhZCB0aGUgbGVuZ3RoIG9mIGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgKi8KKwlyZXQgPSBidG1ydmxfc2Rpb19yZWFkX3J4X2xlbihjYXJkLCAmYnVmX2xlbik7CisJaWYgKHJldCA8IDApIHsKKwkJQlRfRVJSKCJyZWFkIHJ4X2xlbiBmYWlsZWQiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBleGl0OworCX0KKworCWJsa3N6ID0gU0RJT19CTE9DS19TSVpFOworCWJ1Zl9ibG9ja19sZW4gPSAoYnVmX2xlbiArIGJsa3N6IC0gMSkgLyBibGtzejsKKworCWlmIChidWZfbGVuIDw9IFNESU9fSEVBREVSX0xFTgorCQkJfHwgKGJ1Zl9ibG9ja19sZW4gKiBibGtzeikgPiBBTExPQ19CVUZfU0laRSkgeworCQlCVF9FUlIoImludmFsaWQgcGFja2V0IGxlbmd0aDogJWQiLCBidWZfbGVuKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciAqLworCXNrYiA9IGJ0X3NrYl9hbGxvYyhidWZfYmxvY2tfbGVuICogYmxrc3ogKyBCVFNESU9fRE1BX0FMSUdOLAorCQkJCQkJCQlHRlBfQVRPTUlDKTsKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJQlRfRVJSKCJObyBmcmVlIHNrYiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGEgJiAoQlRTRElPX0RNQV9BTElHTiAtIDEpKSB7CisJCXNrYl9wdXQoc2tiLCAodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhICYKKwkJCQkJKEJUU0RJT19ETUFfQUxJR04gLSAxKSk7CisJCXNrYl9wdWxsKHNrYiwgKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSAmCisJCQkJCShCVFNESU9fRE1BX0FMSUdOIC0gMSkpOworCX0KKworCXBheWxvYWQgPSBza2ItPmRhdGE7CisKKwlyZXQgPSBzZGlvX3JlYWRzYihjYXJkLT5mdW5jLCBwYXlsb2FkLCBjYXJkLT5pb3BvcnQsCisJCQkgIGJ1Zl9ibG9ja19sZW4gKiBibGtzeik7CisJaWYgKHJldCA8IDApIHsKKwkJQlRfRVJSKCJyZWFkc2IgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBUaGlzIGlzIFNESU8gc3BlY2lmaWMgaGVhZGVyIGxlbmd0aDogYnl0ZVsyXVsxXVswXSwgdHlwZTogYnl0ZVszXQorCSAqIChIQ0lfQ09NTUFORCA9IDEsIEFDTF9EQVRBID0gMiwgU0NPX0RBVEEgPSAzLCAweEZFID0gVmVuZG9yKQorCSAqLworCisJYnVmX2xlbiA9IHBheWxvYWRbMF07CisJYnVmX2xlbiB8PSAodTE2KSBwYXlsb2FkWzFdIDw8IDg7CisJdHlwZSA9IHBheWxvYWRbM107CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEhDSV9BQ0xEQVRBX1BLVDoKKwljYXNlIEhDSV9TQ09EQVRBX1BLVDoKKwljYXNlIEhDSV9FVkVOVF9QS1Q6CisJCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gdHlwZTsKKwkJc2tiLT5kZXYgPSAodm9pZCAqKWhkZXY7CisJCXNrYl9wdXQoc2tiLCBidWZfbGVuKTsKKwkJc2tiX3B1bGwoc2tiLCBTRElPX0hFQURFUl9MRU4pOworCisJCWlmICh0eXBlID09IEhDSV9FVkVOVF9QS1QpCisJCQlidG1ydmxfY2hlY2tfZXZ0cGt0KHByaXYsIHNrYik7CisKKwkJaGNpX3JlY3ZfZnJhbWUoc2tiKTsKKwkJaGRldi0+c3RhdC5ieXRlX3J4ICs9IGJ1Zl9sZW47CisJCWJyZWFrOworCisJY2FzZSBNUlZMX1ZFTkRPUl9QS1Q6CisJCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gSENJX1ZFTkRPUl9QS1Q7CisJCXNrYi0+ZGV2ID0gKHZvaWQgKiloZGV2OworCQlza2JfcHV0KHNrYiwgYnVmX2xlbik7CisJCXNrYl9wdWxsKHNrYiwgU0RJT19IRUFERVJfTEVOKTsKKworCQlpZiAoYnRtcnZsX3Byb2Nlc3NfZXZlbnQocHJpdiwgc2tiKSkKKwkJCWhjaV9yZWN2X2ZyYW1lKHNrYik7CisKKwkJaGRldi0+c3RhdC5ieXRlX3J4ICs9IGJ1Zl9sZW47CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlRfRVJSKCJVbmtub3cgcGFja2V0IHR5cGU6JWQiLCB0eXBlKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgcGF5bG9hZCwKKwkJCQkJCWJsa3N6ICogYnVmX2Jsb2NrX2xlbik7CisKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXNrYiA9IE5VTEw7CisJCWJyZWFrOworCX0KKworZXhpdDoKKwlpZiAocmV0KSB7CisJCWhkZXYtPnN0YXQuZXJyX3J4Kys7CisJCWlmIChza2IpCisJCQlrZnJlZV9za2Ioc2tiKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2dldF9pbnRfc3RhdHVzKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiwgdTggKiBpcmVnKQoreworCWludCByZXQ7CisJdTggc2Rpb19pcmVnID0gMDsKKwlzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCA9IHByaXYtPmJ0bXJ2bF9kZXYuY2FyZDsKKworCSppcmVnID0gMDsKKworCXNkaW9faXJlZyA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSE9TVF9JTlRTVEFUVVNfUkVHLCAmcmV0KTsKKwlpZiAocmV0KSB7CisJCUJUX0VSUigic2Rpb19yZWFkYjogcmVhZCBpbnQgc3RhdHVzIHJlZ2lzdGVyIGZhaWxlZCIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHNkaW9faXJlZyAhPSAwKSB7CisJCS8qCisJCSAqIEROX0xEX0hPU1RfSU5UX1NUQVRVUyBhbmQvb3IgVVBfTERfSE9TVF9JTlRfU1RBVFVTCisJCSAqIENsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGFuZCByZS1lbmFibGUgdGhlCisJCSAqIGludGVycnVwdC4KKwkJICovCisJCUJUX0RCRygic2Rpb19pcmVnID0gMHgleCIsIHNkaW9faXJlZyk7CisKKwkJc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgfihzZGlvX2lyZWcpICYgKEROX0xEX0hPU1RfSU5UX1NUQVRVUyB8CisJCQkJCQkJVVBfTERfSE9TVF9JTlRfU1RBVFVTKSwKKwkJCSAgICBIT1NUX0lOVFNUQVRVU19SRUcsICZyZXQpOworCQlpZiAocmV0KSB7CisJCQlCVF9FUlIoInNkaW9fd3JpdGViOiBjbGVhciBpbnQgc3RhdHVzIHJlZ2lzdGVyICIKKwkJCQkiZmFpbGVkIik7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKHNkaW9faXJlZyAmIEROX0xEX0hPU1RfSU5UX1NUQVRVUykgeworCQlpZiAocHJpdi0+YnRtcnZsX2Rldi50eF9kbmxkX3JkeSkKKwkJCUJUX0RCRygidHhfZG9uZSBhbHJlYWR5IHJlY2VpdmVkOiAiCisJCQkJIiBpbnRfc3RhdHVzPTB4JXgiLCBzZGlvX2lyZWcpOworCQllbHNlCisJCQlwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5ID0gdHJ1ZTsKKwl9CisKKwlpZiAoc2Rpb19pcmVnICYgVVBfTERfSE9TVF9JTlRfU1RBVFVTKQorCQlidG1ydmxfc2Rpb19jYXJkX3RvX2hvc3QocHJpdik7CisKKwkqaXJlZyA9IHNkaW9faXJlZzsKKworCXJldCA9IDA7CisKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYnRtcnZsX3NkaW9faW50ZXJydXB0KHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2OworCXN0cnVjdCBoY2lfZGV2ICpoY2lkZXY7CisJc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQ7CisJdTggaXJlZyA9IDA7CisKKwljYXJkID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKwlpZiAoY2FyZCAmJiBjYXJkLT5wcml2KSB7CisJCXByaXYgPSBjYXJkLT5wcml2OworCQloY2lkZXYgPSBwcml2LT5idG1ydmxfZGV2LmhjaWRldjsKKworCQlpZiAoYnRtcnZsX3NkaW9fZ2V0X2ludF9zdGF0dXMocHJpdiwgJmlyZWcpKQorCQkJQlRfRVJSKCJyZWFkaW5nIEhPU1RfSU5UX1NUQVRVU19SRUcgZmFpbGVkIik7CisJCWVsc2UKKwkJCUJUX0RCRygiSE9TVF9JTlRfU1RBVFVTX1JFRyAlI3giLCBpcmVnKTsKKworCQlidG1ydmxfaW50ZXJydXB0KHByaXYpOworCX0KK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb19yZWdpc3Rlcl9kZXYoc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYzsKKwl1OCByZWc7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpIHsKKwkJQlRfRVJSKCJFcnJvcjogY2FyZCBvciBmdW5jdGlvbiBpcyBOVUxMISIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwlmdW5jID0gY2FyZC0+ZnVuYzsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKworCXJldCA9IHNkaW9fZW5hYmxlX2Z1bmMoZnVuYyk7CisJaWYgKHJldCkgeworCQlCVF9FUlIoInNkaW9fZW5hYmxlX2Z1bmMoKSBmYWlsZWQ6IHJldD0lZCIsIHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gcmVsZWFzZV9ob3N0OworCX0KKworCXJldCA9IHNkaW9fY2xhaW1faXJxKGZ1bmMsIGJ0bXJ2bF9zZGlvX2ludGVycnVwdCk7CisJaWYgKHJldCkgeworCQlCVF9FUlIoInNkaW9fY2xhaW1faXJxIGZhaWxlZDogcmV0PSVkIiwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBkaXNhYmxlX2Z1bmM7CisJfQorCisJcmV0ID0gc2Rpb19zZXRfYmxvY2tfc2l6ZShjYXJkLT5mdW5jLCBTRElPX0JMT0NLX1NJWkUpOworCWlmIChyZXQpIHsKKwkJQlRfRVJSKCJjYW5ub3Qgc2V0IFNESU8gYmxvY2sgc2l6ZSIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIHJlbGVhc2VfaXJxOworCX0KKworCXJlZyA9IHNkaW9fcmVhZGIoZnVuYywgSU9fUE9SVF8wX1JFRywgJnJldCk7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byByZWxlYXNlX2lycTsKKwl9CisKKwljYXJkLT5pb3BvcnQgPSByZWc7CisKKwlyZWcgPSBzZGlvX3JlYWRiKGZ1bmMsIElPX1BPUlRfMV9SRUcsICZyZXQpOworCWlmIChyZXQgPCAwKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gcmVsZWFzZV9pcnE7CisJfQorCisJY2FyZC0+aW9wb3J0IHw9IChyZWcgPDwgOCk7CisKKwlyZWcgPSBzZGlvX3JlYWRiKGZ1bmMsIElPX1BPUlRfMl9SRUcsICZyZXQpOworCWlmIChyZXQgPCAwKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gcmVsZWFzZV9pcnE7CisJfQorCisJY2FyZC0+aW9wb3J0IHw9IChyZWcgPDwgMTYpOworCisJQlRfREJHKCJTRElPIEZVTkMlZCBJTyBwb3J0OiAweCV4IiwgZnVuYy0+bnVtLCBjYXJkLT5pb3BvcnQpOworCisJc2Rpb19zZXRfZHJ2ZGF0YShmdW5jLCBjYXJkKTsKKworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCisJcmV0dXJuIDA7CisKK3JlbGVhc2VfaXJxOgorCXNkaW9fcmVsZWFzZV9pcnEoZnVuYyk7CisKK2Rpc2FibGVfZnVuYzoKKwlzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTsKKworcmVsZWFzZV9ob3N0OgorCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCitmYWlsZWQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb191bnJlZ2lzdGVyX2RldihzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwlpZiAoY2FyZCAmJiBjYXJkLT5mdW5jKSB7CisJCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKKwkJc2Rpb19yZWxlYXNlX2lycShjYXJkLT5mdW5jKTsKKwkJc2Rpb19kaXNhYmxlX2Z1bmMoY2FyZC0+ZnVuYyk7CisJCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCQlzZGlvX3NldF9kcnZkYXRhKGNhcmQtPmZ1bmMsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX2VuYWJsZV9ob3N0X2ludChzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjYXJkIHx8ICFjYXJkLT5mdW5jKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKKworCXJldCA9IGJ0bXJ2bF9zZGlvX2VuYWJsZV9ob3N0X2ludF9tYXNrKGNhcmQsIEhJTV9FTkFCTEUpOworCisJYnRtcnZsX3NkaW9fZ2V0X3J4X3VuaXQoY2FyZCk7CisKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fZGlzYWJsZV9ob3N0X2ludChzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjYXJkIHx8ICFjYXJkLT5mdW5jKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNkaW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsKKworCXJldCA9IGJ0bXJ2bF9zZGlvX2Rpc2FibGVfaG9zdF9pbnRfbWFzayhjYXJkLCBISU1fRElTQUJMRSk7CisKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9faG9zdF90b19jYXJkKHN0cnVjdCBidG1ydmxfcHJpdmF0ZSAqcHJpdiwKKwkJCQl1OCAqcGF5bG9hZCwgdTE2IG5iKQoreworCXN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkID0gcHJpdi0+YnRtcnZsX2Rldi5jYXJkOworCWludCByZXQgPSAwOworCWludCBidWZfYmxvY2tfbGVuOworCWludCBibGtzejsKKwlpbnQgaSA9IDA7CisJdTggKmJ1ZiA9IE5VTEw7CisJdm9pZCAqdG1wYnVmID0gTlVMTDsKKwlpbnQgdG1wYnVmc3o7CisKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpIHsKKwkJQlRfRVJSKCJjYXJkIG9yIGZ1bmN0aW9uIGlzIE5VTEwhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ1ZiA9IHBheWxvYWQ7CisJaWYgKCh1bnNpZ25lZCBsb25nKSBwYXlsb2FkICYgKEJUU0RJT19ETUFfQUxJR04gLSAxKSkgeworCQl0bXBidWZzeiA9IEFMSUdOX1NaKG5iLCBCVFNESU9fRE1BX0FMSUdOKTsKKwkJdG1wYnVmID0ga3phbGxvYyh0bXBidWZzeiwgR0ZQX0tFUk5FTCk7CisJCWlmICghdG1wYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWJ1ZiA9ICh1OCAqKSBBTElHTl9BRERSKHRtcGJ1ZiwgQlRTRElPX0RNQV9BTElHTik7CisJCW1lbWNweShidWYsIHBheWxvYWQsIG5iKTsKKwl9CisKKwlibGtzeiA9IFNESU9fQkxPQ0tfU0laRTsKKwlidWZfYmxvY2tfbGVuID0gKG5iICsgYmxrc3ogLSAxKSAvIGJsa3N6OworCisJc2Rpb19jbGFpbV9ob3N0KGNhcmQtPmZ1bmMpOworCisJZG8geworCQkvKiBUcmFuc2ZlciBkYXRhIHRvIGNhcmQgKi8KKwkJcmV0ID0gc2Rpb193cml0ZXNiKGNhcmQtPmZ1bmMsIGNhcmQtPmlvcG9ydCwgYnVmLAorCQkJCSAgIGJ1Zl9ibG9ja19sZW4gKiBibGtzeik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpKys7CisJCQlCVF9FUlIoImk9JWQgd3JpdGVzYiBmYWlsZWQ6ICVkIiwgaSwgcmV0KTsKKwkJCXByaW50X2hleF9kdW1wX2J5dGVzKCIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJCQlwYXlsb2FkLCBuYik7CisJCQlyZXQgPSAtRUlPOworCQkJaWYgKGkgPiBNQVhfV1JJVEVfSU9NRU1fUkVUUlkpCisJCQkJZ290byBleGl0OworCQl9CisJfSB3aGlsZSAocmV0KTsKKworCXByaXYtPmJ0bXJ2bF9kZXYudHhfZG5sZF9yZHkgPSBmYWxzZTsKKworZXhpdDoKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkLT5mdW5jKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYnRtcnZsX3NkaW9fZG93bmxvYWRfZncoc3RydWN0IGJ0bXJ2bF9zZGlvX2NhcmQgKmNhcmQpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNhcmQgfHwgIWNhcmQtPmZ1bmMpIHsKKwkJQlRfRVJSKCJjYXJkIG9yIGZ1bmN0aW9uIGlzIE5VTEwhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7CisKKwlpZiAoIWJ0bXJ2bF9zZGlvX3ZlcmlmeV9md19kb3dubG9hZChjYXJkLCAxKSkgeworCQlCVF9EQkcoIkZpcm13YXJlIGFscmVhZHkgZG93bmxvYWRlZCEiKTsKKwkJZ290byBkb25lOworCX0KKworCXJldCA9IGJ0bXJ2bF9zZGlvX2Rvd25sb2FkX2hlbHBlcihjYXJkKTsKKwlpZiAocmV0KSB7CisJCUJUX0VSUigiRmFpbGVkIHRvIGRvd25sb2FkIGhlbHBlciEiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKworCWlmIChidG1ydmxfc2Rpb19kb3dubG9hZF9md193X2hlbHBlcihjYXJkKSkgeworCQlCVF9FUlIoIkZhaWxlZCB0byBkb3dubG9hZCBmaXJtd2FyZSEiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBkb25lOworCX0KKworCWlmIChidG1ydmxfc2Rpb192ZXJpZnlfZndfZG93bmxvYWQoY2FyZCwgTUFYX1BPTExfVFJJRVMpKSB7CisJCUJUX0VSUigiRlcgZmFpbGVkIHRvIGJlIGFjdGl2ZSBpbiB0aW1lISIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lOgorCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBidG1ydmxfc2Rpb193YWtldXBfZncoc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkID0gcHJpdi0+YnRtcnZsX2Rldi5jYXJkOworCWludCByZXQgPSAwOworCisJaWYgKCFjYXJkIHx8ICFjYXJkLT5mdW5jKSB7CisJCUJUX0VSUigiY2FyZCBvciBmdW5jdGlvbiBpcyBOVUxMISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzZGlvX2NsYWltX2hvc3QoY2FyZC0+ZnVuYyk7CisKKwlzZGlvX3dyaXRlYihjYXJkLT5mdW5jLCBIT1NUX1BPV0VSX1VQLCBDT05GSUdfUkVHLCAmcmV0KTsKKworCXNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOworCisJQlRfREJHKCJ3YWtlIHVwIGZpcm13YXJlIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGJ0bXJ2bF9zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCisJCQkJCWNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3QgYnRtcnZsX3NkaW9fY2FyZCAqY2FyZCA9IE5VTEw7CisKKwlCVF9JTkZPKCJ2ZW5kb3I9MHgleCwgZGV2aWNlPTB4JXgsIGNsYXNzPSVkLCBmbj0lZCIsCisJCQlpZC0+dmVuZG9yLCBpZC0+ZGV2aWNlLCBpZC0+Y2xhc3MsIGZ1bmMtPm51bSk7CisKKwljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBkb25lOworCX0KKworCWNhcmQtPmZ1bmMgPSBmdW5jOworCisJaWYgKGlkLT5kcml2ZXJfZGF0YSkgeworCQlzdHJ1Y3QgYnRtcnZsX3NkaW9fZGV2aWNlICpkYXRhID0gKHZvaWQgKikgaWQtPmRyaXZlcl9kYXRhOworCQljYXJkLT5oZWxwZXIgICA9IGRhdGEtPmhlbHBlcjsKKwkJY2FyZC0+ZmlybXdhcmUgPSBkYXRhLT5maXJtd2FyZTsKKwl9CisKKwlpZiAoYnRtcnZsX3NkaW9fcmVnaXN0ZXJfZGV2KGNhcmQpIDwgMCkgeworCQlCVF9FUlIoIkZhaWxlZCB0byByZWdpc3RlciBCVCBkZXZpY2UhIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9jYXJkOworCX0KKworCS8qIERpc2FibGUgdGhlIGludGVycnVwdHMgb24gdGhlIGNhcmQgKi8KKwlidG1ydmxfc2Rpb19kaXNhYmxlX2hvc3RfaW50KGNhcmQpOworCisJaWYgKGJ0bXJ2bF9zZGlvX2Rvd25sb2FkX2Z3KGNhcmQpKSB7CisJCUJUX0VSUigiRG93bmxvYWRpbmcgZmlybXdhcmUgZmFpbGVkISIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHVucmVnX2RldjsKKwl9CisKKwltc2xlZXAoMTAwKTsKKworCWJ0bXJ2bF9zZGlvX2VuYWJsZV9ob3N0X2ludChjYXJkKTsKKworCXByaXYgPSBidG1ydmxfYWRkX2NhcmQoY2FyZCk7CisJaWYgKCFwcml2KSB7CisJCUJUX0VSUigiSW5pdGlhbGl6aW5nIGNhcmQgZmFpbGVkISIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGRpc2FibGVfaG9zdF9pbnQ7CisJfQorCisJY2FyZC0+cHJpdiA9IHByaXY7CisKKwkvKiBJbml0aWFsaXplIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKwlwcml2LT5od19ob3N0X3RvX2NhcmQgPSBidG1ydmxfc2Rpb19ob3N0X3RvX2NhcmQ7CisJcHJpdi0+aHdfd2FrZXVwX2Zpcm13YXJlID0gYnRtcnZsX3NkaW9fd2FrZXVwX2Z3OworCisJYnRtcnZsX3NlbmRfbW9kdWxlX2NmZ19jbWQocHJpdiwgTU9EVUxFX0JSSU5HVVBfUkVRKTsKKworCXJldHVybiAwOworCitkaXNhYmxlX2hvc3RfaW50OgorCWJ0bXJ2bF9zZGlvX2Rpc2FibGVfaG9zdF9pbnQoY2FyZCk7Cit1bnJlZ19kZXY6CisJYnRtcnZsX3NkaW9fdW5yZWdpc3Rlcl9kZXYoY2FyZCk7CitmcmVlX2NhcmQ6CisJa2ZyZWUoY2FyZCk7Citkb25lOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGJ0bXJ2bF9zZGlvX3JlbW92ZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQoreworCXN0cnVjdCBidG1ydmxfc2Rpb19jYXJkICpjYXJkOworCisJaWYgKGZ1bmMpIHsKKwkJY2FyZCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisJCWlmIChjYXJkKSB7CisJCQkvKiBTZW5kIFNIVVRET1dOIGNvbW1hbmQgJiBkaXNhYmxlIGludGVycnVwdAorCQkJICogaWYgdXNlciByZW1vdmVzIHRoZSBtb2R1bGUuCisJCQkgKi8KKwkJCWlmICh1c2VyX3JtbW9kKSB7CisJCQkJYnRtcnZsX3NlbmRfbW9kdWxlX2NmZ19jbWQoY2FyZC0+cHJpdiwKKwkJCQkJCQlNT0RVTEVfU0hVVERPV05fUkVRKTsKKwkJCQlidG1ydmxfc2Rpb19kaXNhYmxlX2hvc3RfaW50KGNhcmQpOworCQkJfQorCQkJQlRfREJHKCJ1bnJlZ2VzdGVyIGRldiIpOworCQkJYnRtcnZsX3NkaW9fdW5yZWdpc3Rlcl9kZXYoY2FyZCk7CisJCQlidG1ydmxfcmVtb3ZlX2NhcmQoY2FyZC0+cHJpdik7CisJCQlrZnJlZShjYXJkKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBidF9tcnZsX3NkaW8gPSB7CisJLm5hbWUJCT0gImJ0bXJ2bF9zZGlvIiwKKwkuaWRfdGFibGUJPSBidG1ydmxfc2Rpb19pZHMsCisJLnByb2JlCQk9IGJ0bXJ2bF9zZGlvX3Byb2JlLAorCS5yZW1vdmUJCT0gYnRtcnZsX3NkaW9fcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBidG1ydmxfc2Rpb19pbml0X21vZHVsZSh2b2lkKQoreworCWlmIChzZGlvX3JlZ2lzdGVyX2RyaXZlcigmYnRfbXJ2bF9zZGlvKSAhPSAwKSB7CisJCUJUX0VSUigiU0RJTyBEcml2ZXIgUmVnaXN0cmF0aW9uIEZhaWxlZCIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBDbGVhciB0aGUgZmxhZyBpbiBjYXNlIHVzZXIgcmVtb3ZlcyB0aGUgY2FyZC4gKi8KKwl1c2VyX3JtbW9kID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBidG1ydmxfc2Rpb19leGl0X21vZHVsZSh2b2lkKQoreworCS8qIFNldCB0aGUgZmxhZyBhcyB1c2VyIGlzIHJlbW92aW5nIHRoaXMgbW9kdWxlLiAqLworCXVzZXJfcm1tb2QgPSAxOworCisJc2Rpb191bnJlZ2lzdGVyX2RyaXZlcigmYnRfbXJ2bF9zZGlvKTsKK30KKworbW9kdWxlX2luaXQoYnRtcnZsX3NkaW9faW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoYnRtcnZsX3NkaW9fZXhpdF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIEJULW92ZXItU0RJTyBkcml2ZXIgdmVyICIgVkVSU0lPTik7CitNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmggYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzI5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5oCkBAIC0wLDAgKzEsMTA4IEBACisvKioKKyAqIE1hcnZlbGwgQlQtb3Zlci1TRElPIGRyaXZlcjogU0RJTyBpbnRlcmZhY2UgcmVsYXRlZCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVkIGJ5IE1hcnZlbGwgSW50ZXJuYXRpb25hbAorICogTHRkLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBGaWxlIGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbnNlLCBhIGNvcHkgb2Ygd2hpY2gKKyAqIGlzIGF2YWlsYWJsZSBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBIG9yIG9uIHRoZQorICogd29ybGR3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0LgorICoKKyAqCisgKiBUSEUgRklMRSBJUyBESVNUUklCVVRFRCBBUy1JUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgQU5EIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIEVYUFJFU1NMWSBESVNDTEFJTUVELiAgVGhlIExpY2Vuc2UgcHJvdmlkZXMgYWRkaXRpb25hbCBkZXRhaWxzIGFib3V0CisgKiB0aGlzIHdhcnJhbnR5IGRpc2NsYWltZXIuCisgKgorICoqLworCisjZGVmaW5lIFNESU9fSEVBREVSX0xFTgkJCTQKKworLyogU0QgYmxvY2sgc2l6ZSBjYW4gbm90IGJpZ2dlciB0aGFuIDY0IGR1ZSB0byBidWYgc2l6ZSBsaW1pdCBpbiBmaXJtd2FyZSAqLworLyogZGVmaW5lIFNEIGJsb2NrIHNpemUgZm9yIGRhdGEgVHgvUnggKi8KKyNkZWZpbmUgU0RJT19CTE9DS19TSVpFCQkJNjQKKworLyogTnVtYmVyIG9mIGJsb2NrcyBmb3IgZmlybXdhcmUgdHJhbnNmZXIgKi8KKyNkZWZpbmUgRklSTVdBUkVfVFJBTlNGRVJfTkJMT0NLCTIKKworLyogVGhpcyBpcyBmb3IgZmlybXdhcmUgc3BlY2lmaWMgbGVuZ3RoICovCisjZGVmaW5lIEZXX0VYVFJBX0xFTgkJCTM2CisKKyNkZWZpbmUgTVJWRFJWX1NJWkVfT0ZfQ01EX0JVRkZFUiAgICAgICAoMiAqIDEwMjQpCisKKyNkZWZpbmUgTVJWRFJWX0JUX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSBcCisJKEhDSV9NQVhfRlJBTUVfU0laRSArIEZXX0VYVFJBX0xFTikKKworI2RlZmluZSBBTExPQ19CVUZfU0laRQkoKChtYXhfdCAoaW50LCBNUlZEUlZfQlRfUlhfUEFDS0VUX0JVRkZFUl9TSVpFLCBcCisJCQlNUlZEUlZfU0laRV9PRl9DTURfQlVGRkVSKSArIFNESU9fSEVBREVSX0xFTiBcCisJCQkrIFNESU9fQkxPQ0tfU0laRSAtIDEpIC8gU0RJT19CTE9DS19TSVpFKSBcCisJCQkqIFNESU9fQkxPQ0tfU0laRSkKKworLyogVGhlIG51bWJlciBvZiB0aW1lcyB0byB0cnkgd2hlbiBwb2xsaW5nIGZvciBzdGF0dXMgKi8KKyNkZWZpbmUgTUFYX1BPTExfVFJJRVMJCQkxMDAKKworLyogTWF4IHJldHJ5IG51bWJlciBvZiBDTUQ1MyB3cml0ZSAqLworI2RlZmluZSBNQVhfV1JJVEVfSU9NRU1fUkVUUlkJCTIKKworLyogSG9zdCBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBJT19QT1JUXzBfUkVHCQkJMHgwMAorI2RlZmluZSBJT19QT1JUXzFfUkVHCQkJMHgwMQorI2RlZmluZSBJT19QT1JUXzJfUkVHCQkJMHgwMgorCisjZGVmaW5lIENPTkZJR19SRUcJCQkweDAzCisjZGVmaW5lIEhPU1RfUE9XRVJfVVAJCQlCSVQoMSkKKyNkZWZpbmUgSE9TVF9DTUQ1M19GSU4JCQlCSVQoMikKKworI2RlZmluZSBIT1NUX0lOVF9NQVNLX1JFRwkJMHgwNAorI2RlZmluZSBISU1fRElTQUJMRQkJCTB4ZmYKKyNkZWZpbmUgSElNX0VOQUJMRQkJCShCSVQoMCkgfCBCSVQoMSkpCisKKyNkZWZpbmUgSE9TVF9JTlRTVEFUVVNfUkVHCQkweDA1CisjZGVmaW5lIFVQX0xEX0hPU1RfSU5UX1NUQVRVUwkJQklUKDApCisjZGVmaW5lIEROX0xEX0hPU1RfSU5UX1NUQVRVUwkJQklUKDEpCisKKy8qIENhcmQgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1FfUkVBRF9CQVNFX0FERFJFU1NfQTBfUkVHICAJMHgxMAorI2RlZmluZSBTUV9SRUFEX0JBU0VfQUREUkVTU19BMV9SRUcgIAkweDExCisKKyNkZWZpbmUgQ0FSRF9TVEFUVVNfUkVHICAgICAgICAgICAgICAJMHgyMAorI2RlZmluZSBETl9MRF9DQVJEX1JEWSAgICAgICAgICAgICAgIAlCSVQoMCkKKyNkZWZpbmUgQ0FSRF9JT19SRUFEWSAgICAgICAgICAgICAgCUJJVCgzKQorCisjZGVmaW5lIENBUkRfRldfU1RBVFVTMF9SRUcJCTB4NDAKKyNkZWZpbmUgQ0FSRF9GV19TVEFUVVMxX1JFRwkJMHg0MQorI2RlZmluZSBGSVJNV0FSRV9SRUFEWQkJCTB4ZmVkYworCisjZGVmaW5lIENBUkRfUlhfTEVOX1JFRwkJCTB4NDIKKyNkZWZpbmUgQ0FSRF9SWF9VTklUX1JFRwkJMHg0MworCisKK3N0cnVjdCBidG1ydmxfc2Rpb19jYXJkIHsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jOworCXUzMiBpb3BvcnQ7CisJY29uc3QgY2hhciAqaGVscGVyOworCWNvbnN0IGNoYXIgKmZpcm13YXJlOworCXU4IHJ4X3VuaXQ7CisJc3RydWN0IGJ0bXJ2bF9wcml2YXRlICpwcml2OworfTsKKworc3RydWN0IGJ0bXJ2bF9zZGlvX2RldmljZSB7CisJY29uc3QgY2hhciAqaGVscGVyOworCWNvbnN0IGNoYXIgKmZpcm13YXJlOworfTsKKworCisvKiBQbGF0Zm9ybSBzcGVjaWZpYyBETUEgYWxpZ25tZW50ICovCisjZGVmaW5lIEJUU0RJT19ETUFfQUxJR04JCTgKKworLyogTWFjcm9zIGZvciBEYXRhIEFsaWdubWVudCA6IHNpemUgKi8KKyNkZWZpbmUgQUxJR05fU1oocCwgYSkJXAorCSgoKHApICsgKChhKSAtIDEpKSAmIH4oKGEpIC0gMSkpCisKKy8qIE1hY3JvcyBmb3IgRGF0YSBBbGlnbm1lbnQgOiBhZGRyZXNzICovCisjZGVmaW5lIEFMSUdOX0FERFIocCwgYSkJXAorCSgoKCh1bnNpZ25lZCBsb25nKShwKSkgKyAoKCh1bnNpZ25lZCBsb25nKShhKSkgLSAxKSkgJiBcCisJCQkJCX4oKCh1bnNpZ25lZCBsb25nKShhKSkgLSAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCmluZGV4IGU3MGM1N2UuLjdiYTkxYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjAuNSIKKyNkZWZpbmUgVkVSU0lPTiAiMC42IgogCiBzdGF0aWMgaW50IGlnbm9yZV9kZ2E7CiBzdGF0aWMgaW50IGlnbm9yZV9jc3I7CkBAIC0xNDUsNiArMTQ1LDcgQEAKICNkZWZpbmUgQlRVU0JfSU5UUl9SVU5OSU5HCTAKICNkZWZpbmUgQlRVU0JfQlVMS19SVU5OSU5HCTEKICNkZWZpbmUgQlRVU0JfSVNPQ19SVU5OSU5HCTIKKyNkZWZpbmUgQlRVU0JfU1VTUEVORElORwkzCiAKIHN0cnVjdCBidHVzYl9kYXRhIHsKIAlzdHJ1Y3QgaGNpX2RldiAgICAgICAqaGRldjsKQEAgLTE1NywxMSArMTU4LDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3YWtlcjsKIAogCXN0cnVjdCB1c2JfYW5jaG9yIHR4X2FuY2hvcjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciBpbnRyX2FuY2hvcjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciBidWxrX2FuY2hvcjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciBpc29jX2FuY2hvcjsKKwlzdHJ1Y3QgdXNiX2FuY2hvciBkZWZlcnJlZDsKKwlpbnQgdHhfaW5fZmxpZ2h0OworCXNwaW5sb2NrX3QgdHhsb2NrOwogCiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRyX2VwOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa190eF9lcDsKQEAgLTE3NCw4ICsxNzksMjMgQEAKIAl1bnNpZ25lZCBpbnQgc2NvX251bTsKIAlpbnQgaXNvY19hbHRzZXR0aW5nOwogCWludCBzdXNwZW5kX2NvdW50OworCWludCBkaWRfaXNvX3Jlc3VtZToxOwogfTsKIAorc3RhdGljIGludCBpbmNfdHgoc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcnY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+dHhsb2NrLCBmbGFncyk7CisJcnYgPSB0ZXN0X2JpdChCVFVTQl9TVVNQRU5ESU5HLCAmZGF0YS0+ZmxhZ3MpOworCWlmICghcnYpCisJCWRhdGEtPnR4X2luX2ZsaWdodCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPnR4bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJ2OworfQorCiBzdGF0aWMgdm9pZCBidHVzYl9pbnRyX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IHVyYi0+Y29udGV4dDsKQEAgLTIwMiw2ICsyMjIsNyBAQAogCWlmICghdGVzdF9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKKwl1c2JfbWFya19sYXN0X2J1c3koZGF0YS0+dWRldik7CiAJdXNiX2FuY2hvcl91cmIodXJiLCAmZGF0YS0+aW50cl9hbmNob3IpOwogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTMwMSw3ICszMjIsNyBAQAogCXN0cnVjdCB1cmIgKnVyYjsKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAJdW5zaWduZWQgaW50IHBpcGU7Ci0JaW50IGVyciwgc2l6ZTsKKwlpbnQgZXJyLCBzaXplID0gSENJX01BWF9GUkFNRV9TSVpFOwogCiAJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOwogCkBAIC0zMTIsOCArMzMzLDYgQEAKIAlpZiAoIXVyYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzaXplID0gbGUxNl90b19jcHUoZGF0YS0+YnVsa19yeF9lcC0+d01heFBhY2tldFNpemUpOwotCiAJYnVmID0ga21hbGxvYyhzaXplLCBtZW1fZmxhZ3MpOwogCWlmICghYnVmKSB7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwpAQCAtMzI3LDYgKzM0Niw3IEBACiAKIAl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9GUkVFX0JVRkZFUjsKIAorCXVzYl9tYXJrX2xhc3RfYnVzeShkYXRhLT51ZGV2KTsKIAl1c2JfYW5jaG9yX3VyYih1cmIsICZkYXRhLT5idWxrX2FuY2hvcik7CiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIG1lbV9mbGFncyk7CkBAIC00NjUsNiArNDg1LDMzIEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IChzdHJ1Y3QgaGNpX2RldiAqKSBza2ItPmRldjsKKwlzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IGhkZXYtPmRyaXZlcl9kYXRhOworCisJQlRfREJHKCIlcyB1cmIgJXAgc3RhdHVzICVkIGNvdW50ICVkIiwgaGRldi0+bmFtZSwKKwkJCQkJdXJiLCB1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKworCWlmICghdGVzdF9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncykpCisJCWdvdG8gZG9uZTsKKworCWlmICghdXJiLT5zdGF0dXMpCisJCWhkZXYtPnN0YXQuYnl0ZV90eCArPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJZWxzZQorCQloZGV2LT5zdGF0LmVycl90eCsrOworCitkb25lOgorCXNwaW5fbG9jaygmZGF0YS0+dHhsb2NrKTsKKwlkYXRhLT50eF9pbl9mbGlnaHQtLTsKKwlzcGluX3VubG9jaygmZGF0YS0+dHhsb2NrKTsKKworCWtmcmVlKHVyYi0+c2V0dXBfcGFja2V0KTsKKworCWtmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBidHVzYl9pc29jX3R4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gKHN0cnVjdCBoY2lfZGV2ICopIHNrYi0+ZGV2OwogCiAJQlRfREJHKCIlcyB1cmIgJXAgc3RhdHVzICVkIGNvdW50ICVkIiwgaGRldi0+bmFtZSwKIAkJCQkJdXJiLCB1cmItPnN0YXR1cywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKQEAgLTQ5MCwxMSArNTM3LDE3IEBACiAKIAlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CiAKKwllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlkYXRhLT5pbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMTsKKwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpKQotCQlyZXR1cm4gMDsKKwkJZ290byBkb25lOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoQlRVU0JfSU5UUl9SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpKQotCQlyZXR1cm4gMDsKKwkJZ290byBkb25lOwogCiAJZXJyID0gYnR1c2Jfc3VibWl0X2ludHJfdXJiKGhkZXYsIEdGUF9LRVJORUwpOwogCWlmIChlcnIgPCAwKQpAQCAtNTA5LDE3ICs1NjIsMjggQEAKIAlzZXRfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKIAlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0tFUk5FTCk7CiAKK2RvbmU6CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOwogCXJldHVybiAwOwogCiBmYWlsZWQ6CiAJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKIAljbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncyk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOwogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGJ0dXNiX3N0b3BfdHJhZmZpYyhzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSkKK3sKKwl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pbnRyX2FuY2hvcik7CisJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+YnVsa19hbmNob3IpOworCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmlzb2NfYW5jaG9yKTsKK30KKwogc3RhdGljIGludCBidHVzYl9jbG9zZShzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IGhkZXYtPmRyaXZlcl9kYXRhOworCWludCBlcnI7CiAKIAlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CiAKQEAgLTUyOSwxMyArNTkzLDE2IEBACiAJY2FuY2VsX3dvcmtfc3luYygmZGF0YS0+d29yayk7CiAKIAljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmlzb2NfYW5jaG9yKTsKLQogCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+YnVsa19hbmNob3IpOwotCiAJY2xlYXJfYml0KEJUVVNCX0lOVFJfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pbnRyX2FuY2hvcik7CisKKwlidHVzYl9zdG9wX3RyYWZmaWMoZGF0YSk7CisJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gMDsKKworCWRhdGEtPmludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOworCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pbnRmKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjIyLDcgKzY4OSw3IEBACiAJCXVyYi0+ZGV2ICAgICAgPSBkYXRhLT51ZGV2OwogCQl1cmItPnBpcGUgICAgID0gcGlwZTsKIAkJdXJiLT5jb250ZXh0ICA9IHNrYjsKLQkJdXJiLT5jb21wbGV0ZSA9IGJ0dXNiX3R4X2NvbXBsZXRlOworCQl1cmItPmNvbXBsZXRlID0gYnR1c2JfaXNvY190eF9jb21wbGV0ZTsKIAkJdXJiLT5pbnRlcnZhbCA9IGRhdGEtPmlzb2NfdHhfZXAtPmJJbnRlcnZhbDsKIAogCQl1cmItPnRyYW5zZmVyX2ZsYWdzICA9IFVSQl9JU09fQVNBUDsKQEAgLTYzMywxMiArNzAwLDIxIEBACiAJCQkJbGUxNl90b19jcHUoZGF0YS0+aXNvY190eF9lcC0+d01heFBhY2tldFNpemUpKTsKIAogCQloZGV2LT5zdGF0LnNjb190eCsrOwotCQlicmVhazsKKwkJZ290byBza2lwX3dha2luZzsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlMU0VROwogCX0KIAorCWVyciA9IGluY190eChkYXRhKTsKKwlpZiAoZXJyKSB7CisJCXVzYl9hbmNob3JfdXJiKHVyYiwgJmRhdGEtPmRlZmVycmVkKTsKKwkJc2NoZWR1bGVfd29yaygmZGF0YS0+d2FrZXIpOworCQllcnIgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCitza2lwX3dha2luZzoKIAl1c2JfYW5jaG9yX3VyYih1cmIsICZkYXRhLT50eF9hbmNob3IpOwogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTY0NiwxMCArNzIyLDEzIEBACiAJCUJUX0VSUigiJXMgdXJiICVwIHN1Ym1pc3Npb24gZmFpbGVkIiwgaGRldi0+bmFtZSwgdXJiKTsKIAkJa2ZyZWUodXJiLT5zZXR1cF9wYWNrZXQpOwogCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJfSBlbHNlIHsKKwkJdXNiX21hcmtfbGFzdF9idXN5KGRhdGEtPnVkZXYpOwogCX0KIAogCXVzYl9mcmVlX3VyYih1cmIpOwogCitkb25lOgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTcyMSw4ICs4MDAsMTkgQEAKIHsKIAlzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYnR1c2JfZGF0YSwgd29yayk7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhLT5oZGV2OworCWludCBlcnI7CiAKIAlpZiAoaGRldi0+Y29ubl9oYXNoLnNjb19udW0gPiAwKSB7CisJCWlmICghZGF0YS0+ZGlkX2lzb19yZXN1bWUpIHsKKwkJCWVyciA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkYXRhLT5pc29jKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJY2xlYXJfYml0KEJUVVNCX0lTT0NfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKKwkJCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pc29jX2FuY2hvcik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlkYXRhLT5kaWRfaXNvX3Jlc3VtZSA9IDE7CisJCX0KIAkJaWYgKGRhdGEtPmlzb2NfYWx0c2V0dGluZyAhPSAyKSB7CiAJCQljbGVhcl9iaXQoQlRVU0JfSVNPQ19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwogCQkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aXNvY19hbmNob3IpOwpAQCAtNzQyLDkgKzgzMiwyNSBAQAogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pc29jX2FuY2hvcik7CiAKIAkJX19zZXRfaXNvY19pbnRlcmZhY2UoaGRldiwgMCk7CisJCWlmIChkYXRhLT5kaWRfaXNvX3Jlc3VtZSkgeworCQkJZGF0YS0+ZGlkX2lzb19yZXN1bWUgPSAwOworCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRhdGEtPmlzb2MpOworCQl9CiAJfQogfQogCitzdGF0aWMgdm9pZCBidHVzYl93YWtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJ0dXNiX2RhdGEsIHdha2VyKTsKKwlpbnQgZXJyOworCisJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm47CisKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7Cit9CisKIHN0YXRpYyBpbnQgYnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewpAQCAtODE0LDExICs5MjAsMTQgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGF0YS0+bG9jayk7CiAKIAlJTklUX1dPUksoJmRhdGEtPndvcmssIGJ0dXNiX3dvcmspOworCUlOSVRfV09SSygmZGF0YS0+d2FrZXIsIGJ0dXNiX3dha2VyKTsKKwlzcGluX2xvY2tfaW5pdCgmZGF0YS0+dHhsb2NrKTsKIAogCWluaXRfdXNiX2FuY2hvcigmZGF0YS0+dHhfYW5jaG9yKTsKIAlpbml0X3VzYl9hbmNob3IoJmRhdGEtPmludHJfYW5jaG9yKTsKIAlpbml0X3VzYl9hbmNob3IoJmRhdGEtPmJ1bGtfYW5jaG9yKTsKIAlpbml0X3VzYl9hbmNob3IoJmRhdGEtPmlzb2NfYW5jaG9yKTsKKwlpbml0X3VzYl9hbmNob3IoJmRhdGEtPmRlZmVycmVkKTsKIAogCWhkZXYgPSBoY2lfYWxsb2NfZGV2KCk7CiAJaWYgKCFoZGV2KSB7CkBAIC05NDMsNiArMTA1Miw3IEBACiAJaGNpX2ZyZWVfZGV2KGhkZXYpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJ0dXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKQEAgLTk1MiwyMiArMTA2Miw0NCBAQAogCWlmIChkYXRhLT5zdXNwZW5kX2NvdW50KyspCiAJCXJldHVybiAwOwogCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKKwlpZiAoIShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLT5hdXRvX3BtICYmIGRhdGEtPnR4X2luX2ZsaWdodCkpIHsKKwkJc2V0X2JpdChCVFVTQl9TVVNQRU5ESU5HLCAmZGF0YS0+ZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPnR4bG9jayk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkYXRhLT50eGxvY2spOworCQlkYXRhLT5zdXNwZW5kX2NvdW50LS07CisJCXJldHVybiAtRUJVU1k7CisJfQorCiAJY2FuY2VsX3dvcmtfc3luYygmZGF0YS0+d29yayk7CiAKKwlidHVzYl9zdG9wX3RyYWZmaWMoZGF0YSk7CiAJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+dHhfYW5jaG9yKTsKIAotCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJmRhdGEtPmlzb2NfYW5jaG9yKTsKLQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5idWxrX2FuY2hvcik7Ci0JdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aW50cl9hbmNob3IpOwotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHBsYXlfZGVmZXJyZWQoc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBlcnI7CisKKwl3aGlsZSAoKHVyYiA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJmRhdGEtPmRlZmVycmVkKSkpIHsKKwkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGVyciA8IDApCisJCQlicmVhazsKKworCQlkYXRhLT50eF9pbl9mbGlnaHQrKzsKKwl9CisJdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygmZGF0YS0+ZGVmZXJyZWQpOworfQorCiBzdGF0aWMgaW50IGJ0dXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhLT5oZGV2OwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAKIAlCVF9EQkcoImludGYgJXAiLCBpbnRmKTsKIApAQCAtOTc1LDEzICsxMTA3LDEzIEBACiAJCXJldHVybiAwOwogCiAJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gZG9uZTsKIAogCWlmICh0ZXN0X2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKIAkJZXJyID0gYnR1c2Jfc3VibWl0X2ludHJfdXJiKGhkZXYsIEdGUF9OT0lPKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCQlyZXR1cm4gZXJyOworCQkJZ290byBmYWlsZWQ7CiAJCX0KIAl9CiAKQEAgLTk4OSw5ICsxMTIxLDEwIEBACiAJCWVyciA9IGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwotCQkJcmV0dXJuIGVycjsKLQkJfSBlbHNlCi0JCQlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOwogCX0KIAogCWlmICh0ZXN0X2JpdChCVFVTQl9JU09DX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKQEAgLTEwMDEsMTYgKzExMzQsMzUgQEAKIAkJCWJ0dXNiX3N1Ym1pdF9pc29jX3VyYihoZGV2LCBHRlBfTk9JTyk7CiAJfQogCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKKwlwbGF5X2RlZmVycmVkKGRhdGEpOworCWNsZWFyX2JpdChCVFVTQl9TVVNQRU5ESU5HLCAmZGF0YS0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKKwlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKKwogCXJldHVybiAwOworCitmYWlsZWQ6CisJdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygmZGF0YS0+ZGVmZXJyZWQpOworZG9uZToKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT50eGxvY2spOworCWNsZWFyX2JpdChCVFVTQl9TVVNQRU5ESU5HLCAmZGF0YS0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKKworCXJldHVybiBlcnI7CiB9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJ0dXNiX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiYnR1c2IiLAogCS5wcm9iZQkJPSBidHVzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IGJ0dXNiX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBidHVzYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gYnR1c2JfcmVzdW1lLAorI2VuZGlmCiAJLmlkX3RhYmxlCT0gYnR1c2JfdGFibGUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJ0dXNiX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY3NwLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfYmNzcC5jCmluZGV4IDg5NGIyY2IuLjQwYWVjMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9iY3NwLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX2Jjc3AuYwpAQCAtMzczLDggKzM3Myw5IEBACiAKIAlpID0gMDsKIAlza2JfcXVldWVfd2Fsa19zYWZlKCZiY3NwLT51bmFjaywgc2tiLCB0bXApIHsKLQkJaWYgKGkrKyA+PSBwa3RzX3RvX2JlX3JlbW92ZWQpCisJCWlmIChpID49IHBrdHNfdG9fYmVfcmVtb3ZlZCkKIAkJCWJyZWFrOworCQlpKys7CiAKIAkJX19za2JfdW5saW5rKHNrYiwgJmJjc3AtPnVuYWNrKTsKIAkJa2ZyZWVfc2tiKHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKaW5kZXggNzdiMzY0OC4uY2FmNmU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYwpAQCAtNDAwNSwxMCArNDAwNSw5IEBACiAgKgogICogc2tiICBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgSERMQyBmcmFtZQogICogZGV2ICBwb2ludGVyIHRvIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3IgY29kZQogICovCi1zdGF0aWMgaW50IGhkbGNkZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGhkbGNkZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJTUdTTFBDX0lORk8gKmluZm8gPSBkZXZfdG9fcG9ydChkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MDQzLDcgKzQwNDIsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IDA1ZjlkMTguLjQwMjY4ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCS5yZWFkCT0JZG9fc3luY19yZWFkLAogCS5haW9fcmVhZCA9IAlnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLndyaXRlCT0JZG9fc3luY193cml0ZSwKLQkuYWlvX3dyaXRlID0gCWdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrLAorCS5haW9fd3JpdGUgPQlibGtkZXZfYWlvX3dyaXRlLAogCS5vcGVuCT0JcmF3X29wZW4sCiAJLnJlbGVhc2U9CXJhd19yZWxlYXNlLAogCS5pb2N0bAk9CXJhd19pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwppbmRleCA1MWU3YTQ2Li41OTQyYTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKKysrIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCkBAIC0xNzEsNyArMTcxLDYgQEAKIHN0YXRpYyB2b2lkIGN5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICopOwogc3RhdGljIHZvaWQgY3lfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKIHN0YXRpYyB2b2lkIGNvbmZpZ19zZXR1cChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqKTsKLWV4dGVybiB2b2lkIGNvbnNvbGVfcHJpbnQoY29uc3QgY2hhciAqKTsKICNpZmRlZiBDWUNMT01fU0hPV19TVEFUVVMKIHN0YXRpYyB2b2lkIHNob3dfc3RhdHVzKGludCk7CiAjZW5kaWYKQEAgLTI0NSw3ICsyNDQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWNvbnNvbGVfcHJpbnQoZGF0YSk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIiwgZGF0YSk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCkBAIC0yNTUsNyArMjU0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlzY3JuWzBdID0gZGF0YTsKLQljb25zb2xlX3ByaW50KHNjcm4pOworCXByaW50ayhLRVJOX0VNRVJHICIlYyIsIHNjcm4pOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0JCQkJLyogQ1AgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCA4MTM1NTJmLi40ODQ2YjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtNzY5NywxMCArNzY5Nyw5IEBACiAgKgogICogc2tiICBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgSERMQyBmcmFtZQogICogZGV2ICBwb2ludGVyIHRvIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3IgY29kZQogICovCi1zdGF0aWMgaW50IGhkbGNkZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGhkbGNkZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1nc2xfc3RydWN0ICppbmZvID0gZGV2X3RvX3BvcnQoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzczMSw3ICs3NzMwLDcgQEAKIAkgCXVzY19zdGFydF90cmFuc21pdHRlcihpbmZvKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5pcnFfc3BpbmxvY2ssZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IDkxZjIwYTkuLjg2NzhmMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC0xNDk3LDEwICsxNDk3LDkgQEAKICAqCiAgKiBza2IgIHNvY2tldCBidWZmZXIgY29udGFpbmluZyBIRExDIGZyYW1lCiAgKiBkZXYgIHBvaW50ZXIgdG8gbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaGRsY2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2xndF9pbmZvICppbmZvID0gZGV2X3RvX3BvcnQoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTUyOSw3ICsxNTI4LDcgQEAKIAl1cGRhdGVfdHhfdGltZXIoaW5mbyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCmluZGV4IDhkNGEyYTguLjJiMThhZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtMTYwOCwxMCArMTYwOCw5IEBACiAgKgogICogc2tiICBzb2NrZXQgYnVmZmVyIGNvbnRhaW5pbmcgSERMQyBmcmFtZQogICogZGV2ICBwb2ludGVyIHRvIG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZQotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3IgY29kZQogICovCi1zdGF0aWMgaW50IGhkbGNkZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGhkbGNkZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJU0xNUF9JTkZPICppbmZvID0gZGV2X3RvX3BvcnQoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTY0Miw3ICsxNjQxLDcgQEAKIAkgCXR4X3N0YXJ0KGluZm8pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKaW5kZXggYzVhZmM5OC4uODVlNWRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYwpAQCAtMjAyLDkgKzIwMiw4IEBACiAgKiBjbl9wcm9jX21jYXN0X2N0bAogICogQGRhdGE6IG1lc3NhZ2Ugc2VudCBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGNvbm5lY3RvcgogICovCi1zdGF0aWMgdm9pZCBjbl9wcm9jX21jYXN0X2N0bCh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY25fcHJvY19tY2FzdF9jdGwoc3RydWN0IGNuX21zZyAqbXNnKQogewotCXN0cnVjdCBjbl9tc2cgKm1zZyA9IGRhdGE7CiAJZW51bSBwcm9jX2NuX21jYXN0X29wICptY19vcCA9IE5VTEw7CiAJaW50IGVyciA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCmluZGV4IDQwOGMyYWYuLjRhMWRmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwpAQCAtODcsNyArODcsOSBAQAogCWtmcmVlKGQtPmZyZWUpOwogfQogCi1zdGF0aWMgc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjbl9xdWV1ZV9hbGxvY19jYWxsYmFja19lbnRyeShjaGFyICpuYW1lLCBzdHJ1Y3QgY2JfaWQgKmlkLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKikpCitzdGF0aWMgc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICoKK2NuX3F1ZXVlX2FsbG9jX2NhbGxiYWNrX2VudHJ5KGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsCisJCQkgICAgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBjbl9tc2cgKikpCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnE7CiAKQEAgLTEyMCw3ICsxMjIsOCBAQAogCXJldHVybiAoKGkxLT5pZHggPT0gaTItPmlkeCkgJiYgKGkxLT52YWwgPT0gaTItPnZhbCkpOwogfQogCi1pbnQgY25fcXVldWVfYWRkX2NhbGxiYWNrKHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldiwgY2hhciAqbmFtZSwgc3RydWN0IGNiX2lkICppZCwgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKQoraW50IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsCisJCQkgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNuX21zZyAqKSkKIHsKIAlzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgKl9fY2JxOwogCWludCBmb3VuZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCmluZGV4IDA4YjI1MDAuLjc0ZjUyYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jCkBAIC0yNjksNyArMjY5LDggQEAKICAqCiAgKiBNYXkgc2xlZXAuCiAgKi8KLWludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICppZCwgY2hhciAqbmFtZSwgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKQoraW50IGNuX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKmlkLCBjaGFyICpuYW1lLAorCQkgICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgY25fbXNnICopKQogewogCWludCBlcnI7CiAJc3RydWN0IGNuX2RldiAqZGV2ID0gJmNkZXY7CkBAIC0zNTEsOSArMzUyLDggQEAKICAqCiAgKiBVc2VkIGZvciBub3RpZmljYXRpb24gb2YgYSByZXF1ZXN0J3MgcHJvY2Vzc2luZy4KICAqLwotc3RhdGljIHZvaWQgY25fY2FsbGJhY2sodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGNuX2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZykKIHsKLQlzdHJ1Y3QgY25fbXNnICptc2cgPSBkYXRhOwogCXN0cnVjdCBjbl9jdGxfbXNnICpjdGw7CiAJc3RydWN0IGNuX2N0bF9lbnRyeSAqZW50OwogCXUzMiBzaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvYXRfaGRtYWMuYyBiL2RyaXZlcnMvZG1hL2F0X2hkbWFjLmMKaW5kZXggOWExZTVmYi4uYzg1MjJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYXRfaGRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9hdF9oZG1hYy5jCkBAIC0xMTY2LDMyICsxMTY2LDM3IEBACiAJY2xrX2Rpc2FibGUoYXRkbWEtPmNsayk7CiB9CiAKLXN0YXRpYyBpbnQgYXRfZG1hX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgYXRfZG1hX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBhdF9kbWEJKmF0ZG1hID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBhdF9kbWEgKmF0ZG1hID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlhdF9kbWFfb2ZmKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKIAljbGtfZGlzYWJsZShhdGRtYS0+Y2xrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdF9kbWFfcmVzdW1lX2Vhcmx5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGF0X2RtYV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBhdF9kbWEJKmF0ZG1hID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBhdF9kbWEgKmF0ZG1hID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAljbGtfZW5hYmxlKGF0ZG1hLT5jbGspOwogCWRtYV93cml0ZWwoYXRkbWEsIEVOLCBBVF9ETUFfRU5BQkxFKTsKIAlyZXR1cm4gMDsKLQogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYXRfZG1hX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmRfbm9pcnEgPSBhdF9kbWFfc3VzcGVuZF9ub2lycSwKKwkucmVzdW1lX25vaXJxID0gYXRfZG1hX3Jlc3VtZV9ub2lycSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0X2RtYV9kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcChhdF9kbWFfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBhdF9kbWFfc2h1dGRvd24sCi0JLnN1c3BlbmRfbGF0ZQk9IGF0X2RtYV9zdXNwZW5kX2xhdGUsCi0JLnJlc3VtZV9lYXJseQk9IGF0X2RtYV9yZXN1bWVfZWFybHksCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJPSAiYXRfaGRtYWMiLAorCQkucG0JPSAmYXRfZG1hX2Rldl9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCA5OGM5YTg0Li45MzNjMTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0xMzk5LDggKzEzOTksOSBAQAogCWNsa19kaXNhYmxlKGR3LT5jbGspOwogfQogCi1zdGF0aWMgaW50IGR3X3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgZHdfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBkd19kbWEJKmR3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlkd19kbWFfb2ZmKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKQEAgLTE0MDgsMjMgKzE0MDksMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkd19yZXN1bWVfZWFybHkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZHdfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGR3X2RtYQkqZHcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWNsa19lbmFibGUoZHctPmNsayk7CiAJZG1hX3dyaXRlbChkdywgQ0ZHLCBEV19DRkdfRE1BX0VOKTsKIAlyZXR1cm4gMDsKLQogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZHdfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZF9ub2lycSA9IGR3X3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IGR3X3Jlc3VtZV9ub2lycSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X2RyaXZlciA9IHsKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKGR3X3JlbW92ZSksCiAJLnNodXRkb3duCT0gZHdfc2h1dGRvd24sCi0JLnN1c3BlbmRfbGF0ZQk9IGR3X3N1c3BlbmRfbGF0ZSwKLQkucmVzdW1lX2Vhcmx5CT0gZHdfcmVzdW1lX2Vhcmx5LAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImR3X2RtYWMiLAorCQkucG0JPSAmZHdfZGV2X3BtX29wcywKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvdHh4OWRtYWMuYyBiL2RyaXZlcnMvZG1hL3R4eDlkbWFjLmMKaW5kZXggODhkYWI1Mi4uNzgzNzkzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvdHh4OWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS90eHg5ZG1hYy5jCkBAIC0xMjkxLDE3ICsxMjkxLDE4IEBACiAJdHh4OWRtYWNfb2ZmKGRkZXYpOwogfQogCi1zdGF0aWMgaW50IHR4eDlkbWFjX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSBwbV9tZXNzYWdlX3QgbWVzZykKK3N0YXRpYyBpbnQgdHh4OWRtYWNfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCB0eHg5ZG1hY19kZXYgKmRkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXR4eDlkbWFjX29mZihkZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0eHg5ZG1hY19yZXN1bWVfZWFybHkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdHh4OWRtYWNfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHR4eDlkbWFjX2RldiAqZGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB0eHg5ZG1hY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXUzMiBtY3I7CkBAIC0xMzE0LDYgKzEzMTUsMTEgQEAKIAogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgdHh4OWRtYWNfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZF9ub2lycSA9IHR4eDlkbWFjX3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IHR4eDlkbWFjX3Jlc3VtZV9ub2lycSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR4eDlkbWFjX2NoYW5fZHJpdmVyID0gewogCS5yZW1vdmUJCT0gX19leGl0X3AodHh4OWRtYWNfY2hhbl9yZW1vdmUpLAogCS5kcml2ZXIgPSB7CkBAIC0xMzI0LDEwICsxMzMwLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR4eDlkbWFjX2RyaXZlciA9IHsKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHR4eDlkbWFjX3JlbW92ZSksCiAJLnNodXRkb3duCT0gdHh4OWRtYWNfc2h1dGRvd24sCi0JLnN1c3BlbmRfbGF0ZQk9IHR4eDlkbWFjX3N1c3BlbmRfbGF0ZSwKLQkucmVzdW1lX2Vhcmx5CT0gdHh4OWRtYWNfcmVzdW1lX2Vhcmx5LAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gInR4eDlkbWFjIiwKKwkJLnBtCT0gJnR4eDlkbWFjX2Rldl9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZSBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQppbmRleCA5OGFhNGE3Li5jZmEwMzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCkBAIC0xNyw2ICsxNywxMCBAQAogZWRhY19jb3JlLW9ianMJKz0gZWRhY19wY2kubyBlZGFjX3BjaV9zeXNmcy5vCiBlbmRpZgogCitpZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKK2VkYWNfY29yZS1vYmpzICArPSBlZGFjX21jZV9hbWQubworZW5kaWYKKwogb2JqLSQoQ09ORklHX0VEQUNfQU1ENzZYKQkJKz0gYW1kNzZ4X2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfQ1BDOTI1KQkJKz0gY3BjOTI1X2VkYWMubwogb2JqLSQoQ09ORklHX0VEQUNfSTUwMDApCQkrPSBpNTAwMF9lZGFjLm8KQEAgLTMyLDcgKzM2LDcgQEAKIG9iai0kKENPTkZJR19FREFDX0k4Mjg2MCkJCSs9IGk4Mjg2MF9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX1I4MjYwMCkJCSs9IHI4MjYwMF9lZGFjLm8KIAotYW1kNjRfZWRhY19tb2QteSA6PSAgYW1kNjRfZWRhY19lcnJfdHlwZXMubyBhbWQ2NF9lZGFjLm8KK2FtZDY0X2VkYWNfbW9kLXkgOj0gYW1kNjRfZWRhYy5vCiBhbWQ2NF9lZGFjX21vZC0kKENPTkZJR19FREFDX0RFQlVHKSArPSBhbWQ2NF9lZGFjX2RiZy5vCiBhbWQ2NF9lZGFjX21vZC0kKENPTkZJR19FREFDX0FNRDY0X0VSUk9SX0lOSkVDVElPTikgKz0gYW1kNjRfZWRhY19pbmoubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCBlMmExMGJjLi4xNzNkYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTE5LDYgKzE5LDYzIEBACiBzdGF0aWMgc3RydWN0IGFtZDY0X3B2dCAqcHZ0X2xvb2t1cFtNQVhfTlVNTk9ERVNdOwogCiAvKgorICogU2VlIEYyeDgwIGZvciBLOCBhbmQgRjJ4WzEsMF04MCBmb3IgRmFtMTAgYW5kIGxhdGVyLiBUaGUgdGFibGUgYmVsb3cgaXMgb25seQorICogZm9yIEREUjIgRFJBTSBtYXBwaW5nLgorICovCit1MzIgcmV2Zl9xdWFkX2RkcjJfc2hpZnRbXSA9IHsKKwkwLAkvKiAwMDAwYiBOVUxMIERJTU0gKDEyOG1iKSAqLworCTI4LAkvKiAwMDAxYiAyNTZtYiAqLworCTI5LAkvKiAwMDEwYiA1MTJtYiAqLworCTI5LAkvKiAwMDExYiA1MTJtYiAqLworCTI5LAkvKiAwMTAwYiA1MTJtYiAqLworCTMwLAkvKiAwMTAxYiAxZ2IgKi8KKwkzMCwJLyogMDExMGIgMWdiICovCisJMzEsCS8qIDAxMTFiIDJnYiAqLworCTMxLAkvKiAxMDAwYiAyZ2IgKi8KKwkzMiwJLyogMTAwMWIgNGdiICovCisJMzIsCS8qIDEwMTBiIDRnYiAqLworCTMzLAkvKiAxMDExYiA4Z2IgKi8KKwkwLAkvKiAxMTAwYiBmdXR1cmUgKi8KKwkwLAkvKiAxMTAxYiBmdXR1cmUgKi8KKwkwLAkvKiAxMTEwYiBmdXR1cmUgKi8KKwkwCS8qIDExMTFiIGZ1dHVyZSAqLworfTsKKworLyoKKyAqIFZhbGlkIHNjcnViIHJhdGVzIGZvciB0aGUgSzggaGFyZHdhcmUgbWVtb3J5IHNjcnViYmVyLiBXZSBtYXAgdGhlIHNjcnViYmluZworICogYmFuZHdpZHRoIHRvIGEgdmFsaWQgYml0IHBhdHRlcm4uIFRoZSAnc2V0JyBvcGVyYXRpb24gZmluZHMgdGhlICdtYXRjaGluZy0KKyAqIG9yIGhpZ2hlciB2YWx1ZScuCisgKgorICpGSVhNRTogUHJvZHVjZSBhIGJldHRlciBtYXBwaW5nL2xpbmVhcmlzYXRpb24uCisgKi8KKworc3RydWN0IHNjcnVicmF0ZSBzY3J1YnJhdGVzW10gPSB7CisJeyAweDAxLCAxNjAwMDAwMDAwVUx9LAorCXsgMHgwMiwgODAwMDAwMDAwVUx9LAorCXsgMHgwMywgNDAwMDAwMDAwVUx9LAorCXsgMHgwNCwgMjAwMDAwMDAwVUx9LAorCXsgMHgwNSwgMTAwMDAwMDAwVUx9LAorCXsgMHgwNiwgNTAwMDAwMDBVTH0sCisJeyAweDA3LCAyNTAwMDAwMFVMfSwKKwl7IDB4MDgsIDEyMjg0MDY5VUx9LAorCXsgMHgwOSwgNjI3NDUwOVVMfSwKKwl7IDB4MEEsIDMxMjE5NTFVTH0sCisJeyAweDBCLCAxNTYwOTc1VUx9LAorCXsgMHgwQywgNzgxNDQwVUx9LAorCXsgMHgwRCwgMzkwNzIwVUx9LAorCXsgMHgwRSwgMTk1MzAwVUx9LAorCXsgMHgwRiwgOTc2NTBVTH0sCisJeyAweDEwLCA0ODg1NFVMfSwKKwl7IDB4MTEsIDI0NDI3VUx9LAorCXsgMHgxMiwgMTIyMTNVTH0sCisJeyAweDEzLCA2MTAxVUx9LAorCXsgMHgxNCwgMzA1MVVMfSwKKwl7IDB4MTUsIDE1MjNVTH0sCisJeyAweDE2LCA3NjFVTH0sCisJeyAweDAwLCAwVUx9LCAgICAgICAgLyogc2NydWJiaW5nIG9mZiAqLworfTsKKworLyoKICAqIE1lbW9yeSBzY3J1YmJlciBjb250cm9sIGludGVyZmFjZS4gRm9yIEs4LCBtZW1vcnkgc2NydWJiaW5nIGlzIGhhbmRsZWQgYnkKICAqIGhhcmR3YXJlIGFuZCBjYW4gaW52b2x2ZSBMMiBjYWNoZSwgZGNhY2hlIGFzIHdlbGwgYXMgdGhlIG1haW4gbWVtb3J5LiBXaXRoCiAgKiBGMTAsIHRoaXMgaXMgZXh0ZW5kZWQgdG8gTDMgY2FjaGUgc2NydWJiaW5nIG9uIENQVSBtb2RlbHMgc3BvcnRpbmcgdGhhdApAQCAtNjkzLDcgKzc1MCw3IEBACiAgKiBzcGVjaWZpYy4KICAqLwogc3RhdGljIHU2NCBleHRyYWN0X2Vycm9yX2FkZHJlc3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCSBzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKQorCQkJCSBzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8pCiB7CiAJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIApAQCAtMTA0OSw3ICsxMTA2LDcgQEAKIAogLyogZXh0cmFjdCB0aGUgRVJST1IgQUREUkVTUyBmb3IgdGhlIEs4IENQVXMgKi8KIHN0YXRpYyB1NjQgazhfZ2V0X2Vycm9yX2FkZHJlc3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCXN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8pCisJCQkJc3RydWN0IGVycl9yZWdzICppbmZvKQogewogCXJldHVybiAoKCh1NjQpIChpbmZvLT5uYmVhaCAmIDB4ZmYpKSA8PCAzMikgKwogCQkJKGluZm8tPm5iZWFsICYgfjB4MDMpOwpAQCAtMTA5Miw3ICsxMTQ5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgazhfbWFwX3N5c2FkZHJfdG9fY3Nyb3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCQlzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvLAorCQkJCQlzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8sCiAJCQkJCXU2NCBTeXN0ZW1BZGRyZXNzKQogewogCXN0cnVjdCBtZW1fY3RsX2luZm8gKnNyY19tY2k7CkBAIC0xMTAxLDggKzExNTgsOCBAQAogCXUzMiBwYWdlLCBvZmZzZXQ7CiAKIAkvKiBFeHRyYWN0IHRoZSBzeW5kcm9tZSBwYXJ0cyBhbmQgZm9ybSBhIDE2LWJpdCBzeW5kcm9tZSAqLwotCXN5bmRyb21lID0gRVhUUkFDVF9ISUdIX1NZTkRST01FKGluZm8tPm5ic2wpIDw8IDg7Ci0Jc3luZHJvbWUgfD0gRVhUUkFDVF9MT1dfU1lORFJPTUUoaW5mby0+bmJzaCk7CisJc3luZHJvbWUgID0gSElHSF9TWU5EUk9NRShpbmZvLT5uYnNsKSA8PCA4OworCXN5bmRyb21lIHw9IExPV19TWU5EUk9NRShpbmZvLT5uYnNoKTsKIAogCS8qIENISVBLSUxMIGVuYWJsZWQgKi8KIAlpZiAoaW5mby0+bmJjZmcgJiBLOF9OQkNGR19DSElQS0lMTCkgewpAQCAtMTMxMSw3ICsxMzY4LDcgQEAKIH0KIAogc3RhdGljIHU2NCBmMTBfZ2V0X2Vycm9yX2FkZHJlc3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbykKKwkJCXN0cnVjdCBlcnJfcmVncyAqaW5mbykKIHsKIAlyZXR1cm4gKCgodTY0KSAoaW5mby0+bmJlYWggJiAweGZmZmYpKSA8PCAzMikgKwogCQkJKGluZm8tPm5iZWFsICYgfjB4MDEpOwpAQCAtMTY4OCw3ICsxNzQ1LDcgQEAKICAqIFRoZSBAc3lzX2FkZHIgaXMgdXN1YWxseSBhbiBlcnJvciBhZGRyZXNzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLgogICovCiBzdGF0aWMgdm9pZCBmMTBfbWFwX3N5c2FkZHJfdG9fY3Nyb3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCSAgICAgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbywKKwkJCQkgICAgIHN0cnVjdCBlcnJfcmVncyAqaW5mbywKIAkJCQkgICAgIHU2NCBzeXNfYWRkcikKIHsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOwpAQCAtMTcwMSw4ICsxNzU4LDggQEAKIAlpZiAoY3Nyb3cgPj0gMCkgewogCQllcnJvcl9hZGRyZXNzX3RvX3BhZ2VfYW5kX29mZnNldChzeXNfYWRkciwgJnBhZ2UsICZvZmZzZXQpOwogCi0JCXN5bmRyb21lID0gRVhUUkFDVF9ISUdIX1NZTkRST01FKGluZm8tPm5ic2wpIDw8IDg7Ci0JCXN5bmRyb21lIHw9IEVYVFJBQ1RfTE9XX1NZTkRST01FKGluZm8tPm5ic2gpOworCQlzeW5kcm9tZSAgPSBISUdIX1NZTkRST01FKGluZm8tPm5ic2wpIDw8IDg7CisJCXN5bmRyb21lIHw9IExPV19TWU5EUk9NRShpbmZvLT5uYnNoKTsKIAogCQkvKgogCQkgKiBJcyBDSElQS0lMTCBvbj8gSWYgc28sIHRoZW4gd2UgY2FuIGF0dGVtcHQgdG8gdXNlIHRoZQpAQCAtMjA0NSw3ICsyMTAyLDcgQEAKICAqCS0gMDogaWYgbm8gdmFsaWQgZXJyb3IgaXMgaW5kaWNhdGVkCiAgKi8KIHN0YXRpYyBpbnQgYW1kNjRfZ2V0X2Vycm9yX2luZm9fcmVncyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQkJICAgICBzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICpyZWdzKQorCQkJCSAgICAgc3RydWN0IGVycl9yZWdzICpyZWdzKQogewogCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dDsKIAlzdHJ1Y3QgcGNpX2RldiAqbWlzY19mM19jdGw7CkBAIC0yMDk0LDEwICsyMTUxLDEwIEBACiAgKgktIDA6IGlmIG5vIGVycm9yIGlzIGZvdW5kCiAgKi8KIHN0YXRpYyBpbnQgYW1kNjRfZ2V0X2Vycm9yX2luZm8oc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCXN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8pCisJCQkJc3RydWN0IGVycl9yZWdzICppbmZvKQogewogCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dDsKLQlzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzIHJlZ3M7CisJc3RydWN0IGVycl9yZWdzIHJlZ3M7CiAKIAlwdnQgPSBtY2ktPnB2dF9pbmZvOwogCkBAIC0yMTUyLDQ4ICsyMjA5LDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhbWQ2NF9kZWNvZGVfZ2FydF90bGJfZXJyb3Ioc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCQkgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbykKLXsKLQl1MzIgZXJyX2NvZGU7Ci0JdTMyIGVjX3R0OwkJLyogZXJyb3IgY29kZSB0cmFuc2FjdGlvbiB0eXBlICgyYikgKi8KLQl1MzIgZWNfbGw7CQkvKiBlcnJvciBjb2RlIGNhY2hlIGxldmVsICgyYikgKi8KLQotCWVycl9jb2RlID0gRVhUUkFDVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOwotCWVjX2xsID0gRVhUUkFDVF9MTF9DT0RFKGVycl9jb2RlKTsKLQllY190dCA9IEVYVFJBQ1RfVFRfQ09ERShlcnJfY29kZSk7Ci0KLQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJICAgICAiR0FSVCBUTEIgZXZlbnQ6IHRyYW5zYWN0aW9uIHR5cGUoJXMpLCAiCi0JCSAgICAgImNhY2hlIGxldmVsKCVzKVxuIiwgdHRfbXNnc1tlY190dF0sIGxsX21zZ3NbZWNfbGxdKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFtZDY0X2RlY29kZV9tZW1fY2FjaGVfZXJyb3Ioc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJCSAgICAgIHN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8pCi17Ci0JdTMyIGVycl9jb2RlOwotCXUzMiBlY19ycnJyOwkJLyogZXJyb3IgY29kZSBtZW1vcnkgdHJhbnNhY3Rpb24gKDRiKSAqLwotCXUzMiBlY190dDsJCS8qIGVycm9yIGNvZGUgdHJhbnNhY3Rpb24gdHlwZSAoMmIpICovCi0JdTMyIGVjX2xsOwkJLyogZXJyb3IgY29kZSBjYWNoZSBsZXZlbCAoMmIpICovCi0KLQllcnJfY29kZSA9IEVYVFJBQ1RfRVJST1JfQ09ERShpbmZvLT5uYnNsKTsKLQllY19sbCA9IEVYVFJBQ1RfTExfQ09ERShlcnJfY29kZSk7Ci0JZWNfdHQgPSBFWFRSQUNUX1RUX0NPREUoZXJyX2NvZGUpOwotCWVjX3JycnIgPSBFWFRSQUNUX1JSUlJfQ09ERShlcnJfY29kZSk7Ci0KLQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKLQkJICAgICAiY2FjaGUgaGllcmFyY2h5IGVycm9yOiBtZW1vcnkgdHJhbnNhY3Rpb24gdHlwZSglcyksICIKLQkJICAgICAidHJhbnNhY3Rpb24gdHlwZSglcyksIGNhY2hlIGxldmVsKCVzKVxuIiwKLQkJICAgICBycnJyX21zZ3NbZWNfcnJycl0sIHR0X21zZ3NbZWNfdHRdLCBsbF9tc2dzW2VjX2xsXSk7Ci19Ci0KLQogLyoKICAqIEhhbmRsZSBhbnkgQ29ycmVjdGFibGUgRXJyb3JzIChDRXMpIHRoYXQgaGF2ZSBvY2N1cnJlZC4gQ2hlY2sgZm9yIHZhbGlkIEVSUk9SCiAgKiBBRERSRVNTIGFuZCBwcm9jZXNzLgogICovCiBzdGF0aWMgdm9pZCBhbWQ2NF9oYW5kbGVfY2Uoc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAotCQkJICAgIHN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgKmluZm8pCisJCQkgICAgc3RydWN0IGVycl9yZWdzICppbmZvKQogewogCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CiAJdTY0IFN5c3RlbUFkZHJlc3M7CkBAIC0yMjE2LDcgKzIyMzcsNyBAQAogCiAvKiBIYW5kbGUgYW55IFVuLWNvcnJlY3RhYmxlIEVycm9ycyAoVUVzKSAqLwogc3RhdGljIHZvaWQgYW1kNjRfaGFuZGxlX3VlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCSAgICBzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKQorCQkJICAgIHN0cnVjdCBlcnJfcmVncyAqaW5mbykKIHsKIAlpbnQgY3Nyb3c7CiAJdTY0IFN5c3RlbUFkZHJlc3M7CkBAIC0yMjYxLDU5ICsyMjgyLDI0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkgICBzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKQorc3RhdGljIGlubGluZSB2b2lkIF9fYW1kNjRfZGVjb2RlX2J1c19lcnJvcihzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJCSAgICBzdHJ1Y3QgZXJyX3JlZ3MgKmluZm8pCiB7Ci0JdTMyIGVycl9jb2RlLCBleHRfZWM7Ci0JdTMyIGVjX3BwOwkJLyogZXJyb3IgY29kZSBwYXJ0aWNpcGF0aW5nIHByb2Nlc3NvciAoMnApICovCi0JdTMyIGVjX3RvOwkJLyogZXJyb3IgY29kZSB0aW1lZCBvdXQgKDFiKSAqLwotCXUzMiBlY19ycnJyOwkJLyogZXJyb3IgY29kZSBtZW1vcnkgdHJhbnNhY3Rpb24gKDRiKSAqLwotCXUzMiBlY19paTsJCS8qIGVycm9yIGNvZGUgbWVtb3J5IG9yIEkvTyAoMmIpICovCi0JdTMyIGVjX2xsOwkJLyogZXJyb3IgY29kZSBjYWNoZSBsZXZlbCAoMmIpICovCisJdTMyIGVjICA9IEVSUk9SX0NPREUoaW5mby0+bmJzbCk7CisJdTMyIHhlYyA9IEVYVF9FUlJPUl9DT0RFKGluZm8tPm5ic2wpOworCWludCBlY2NfdHlwZSA9IGluZm8tPm5ic2ggJiAoMHgzIDw8IDEzKTsKIAotCWV4dF9lYyA9IEVYVFJBQ1RfRVhUX0VSUk9SX0NPREUoaW5mby0+bmJzbCk7Ci0JZXJyX2NvZGUgPSBFWFRSQUNUX0VSUk9SX0NPREUoaW5mby0+bmJzbCk7Ci0KLQllY19sbCA9IEVYVFJBQ1RfTExfQ09ERShlcnJfY29kZSk7Ci0JZWNfaWkgPSBFWFRSQUNUX0lJX0NPREUoZXJyX2NvZGUpOwotCWVjX3JycnIgPSBFWFRSQUNUX1JSUlJfQ09ERShlcnJfY29kZSk7Ci0JZWNfdG8gPSBFWFRSQUNUX1RPX0NPREUoZXJyX2NvZGUpOwotCWVjX3BwID0gRVhUUkFDVF9QUF9DT0RFKGVycl9jb2RlKTsKLQotCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkiQlVTIEVSUk9SOlxuIgotCQkiICB0aW1lLW91dCglcykgbWVtIG9yIGkvbyglcylcbiIKLQkJIiAgcGFydGljaXBhdGluZyBwcm9jZXNzb3IoJXMpXG4iCi0JCSIgIG1lbW9yeSB0cmFuc2FjdGlvbiB0eXBlKCVzKVxuIgotCQkiICBjYWNoZSBsZXZlbCglcykgRXJyb3IgRm91bmQgYnk6ICVzXG4iLAotCQl0b19tc2dzW2VjX3RvXSwKLQkJaWlfbXNnc1tlY19paV0sCi0JCXBwX21zZ3NbZWNfcHBdLAotCQlycnJyX21zZ3NbZWNfcnJycl0sCi0JCWxsX21zZ3NbZWNfbGxdLAotCQkoaW5mby0+bmJzaCAmIEs4X05CU0hfRVJSX1NDUlVCRVIpID8KLQkJCSJTY3J1YmJlciIgOiAiTm9ybWFsIE9wZXJhdGlvbiIpOwotCi0JLyogSWYgdGhpcyB3YXMgYW4gJ29ic2VydmVkJyBlcnJvciwgZWFybHkgb3V0ICovCi0JaWYgKGVjX3BwID09IEs4X05CU0xfUFBfT0JTKQotCQlyZXR1cm47CQkvKiBXZSBhcmVuJ3QgdGhlIG5vZGUgaW52b2x2ZWQgKi8KLQotCS8qIFBhcnNlIG91dCB0aGUgZXh0ZW5kZWQgZXJyb3IgY29kZSBmb3IgRUNDIGV2ZW50cyAqLwotCXN3aXRjaCAoZXh0X2VjKSB7Ci0JLyogRjEwIGNoYW5nZWQgdG8gb25lIEV4dGVuZGVkIEVDQyBlcnJvciBjb2RlICovCi0JY2FzZSBGMTBfTkJTTF9FWFRfRVJSX1JFUzoJCS8qIFJlc2VydmVkIGZpZWxkICovCi0JY2FzZSBGMTBfTkJTTF9FWFRfRVJSX0VDQzoJCS8qIEYxMCBFQ0MgZXh0IGVyciBjb2RlICovCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsICJOT1QgRUNDOiBubyBzcGVjaWFsIGVycm9yICIKLQkJCQkJICAgICAgICJoYW5kbGluZyBmb3IgdGhpcyBlcnJvclxuIik7CisJLyogQmFpbCBlYXJseSBvdXQgaWYgdGhpcyB3YXMgYW4gJ29ic2VydmVkJyBlcnJvciAqLworCWlmIChQUChlYykgPT0gSzhfTkJTTF9QUF9PQlMpCiAJCXJldHVybjsKLQl9CiAKLQlpZiAoaW5mby0+bmJzaCAmIEs4X05CU0hfQ0VDQykKKwkvKiBEbyBvbmx5IEVDQyBlcnJvcnMgKi8KKwlpZiAoeGVjICYmIHhlYyAhPSBGMTBfTkJTTF9FWFRfRVJSX0VDQykKKwkJcmV0dXJuOworCisJaWYgKGVjY190eXBlID09IDIpCiAJCWFtZDY0X2hhbmRsZV9jZShtY2ksIGluZm8pOwotCWVsc2UgaWYgKGluZm8tPm5ic2ggJiBLOF9OQlNIX1VFQ0MpCisJZWxzZSBpZiAoZWNjX3R5cGUgPT0gMSkKIAkJYW1kNjRfaGFuZGxlX3VlKG1jaSwgaW5mbyk7CiAKIAkvKgpAQCAtMjMyNCwxMzkgKzIzMTAsMjYgQEAKIAkgKiBjYXRhc3Ryb3BoaWMuCiAJICovCiAJaWYgKGluZm8tPm5ic2ggJiBLOF9OQlNIX09WRVJGTE9XKQotCQllZGFjX21jX2hhbmRsZV9jZV9ub19pbmZvKG1jaSwgRURBQ19NT0RfU1RSCi0JCQkJCSAgIkVycm9yIE92ZXJmbG93IHNldCIpOworCQllZGFjX21jX2hhbmRsZV9jZV9ub19pbmZvKG1jaSwgRURBQ19NT0RfU1RSICJFcnJvciBPdmVyZmxvdyIpOwogfQogCi1pbnQgYW1kNjRfcHJvY2Vzc19lcnJvcl9pbmZvKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCSAgICAgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbywKLQkJCSAgICAgaW50IGhhbmRsZV9lcnJvcnMpCit2b2lkIGFtZDY0X2RlY29kZV9idXNfZXJyb3IoaW50IG5vZGVfaWQsIHN0cnVjdCBlcnJfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQ7Ci0Jc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqcmVnczsKLQl1MzIgZXJyX2NvZGUsIGV4dF9lYzsKLQlpbnQgZ2FydF90bGJfZXJyb3IgPSAwOworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IG1jaV9sb29rdXBbbm9kZV9pZF07CiAKLQlwdnQgPSBtY2ktPnB2dF9pbmZvOwotCi0JLyogSWYgY2FsbGVyIGRvZXNuJ3Qgd2FudCB1cyB0byBwcm9jZXNzIHRoZSBlcnJvciwgcmV0dXJuICovCi0JaWYgKCFoYW5kbGVfZXJyb3JzKQotCQlyZXR1cm4gMTsKLQotCXJlZ3MgPSBpbmZvOwotCi0JZGVidWdmMSgiTm9ydGhCcmlkZ2UgRVJST1I6IG1jaSgweCVwKVxuIiwgbWNpKTsKLQlkZWJ1Z2YxKCIgIE1DIG5vZGUoJWQpIEVycm9yLUFkZHJlc3MoMHglLjh4LSUuOHgpXG4iLAotCQlwdnQtPm1jX25vZGVfaWQsIHJlZ3MtPm5iZWFoLCByZWdzLT5uYmVhbCk7Ci0JZGVidWdmMSgiICBuYnNoKDB4JS44eCkgbmJzbCgweCUuOHgpXG4iLAotCQlyZWdzLT5uYnNoLCByZWdzLT5uYnNsKTsKLQlkZWJ1Z2YxKCIgIFZhbGlkIEVycm9yPSVzIE92ZXJmbG93PSVzXG4iLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfVkFMSURfQklUKSA/ICJUcnVlIiA6ICJGYWxzZSIsCi0JCShyZWdzLT5uYnNoICYgSzhfTkJTSF9PVkVSRkxPVykgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKLQlkZWJ1Z2YxKCIgIEVyciBVbmNvcnJlY3RlZD0lcyBNQ0EgRXJyb3IgUmVwb3J0aW5nPSVzXG4iLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfVU5DT1JSRUNURURfRVJSKSA/Ci0JCQkiVHJ1ZSIgOiAiRmFsc2UiLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfRVJSX0VOQUJMRSkgPwotCQkJIlRydWUiIDogIkZhbHNlIik7Ci0JZGVidWdmMSgiICBNaXNjRXJyIFZhbGlkPSVzIEVyckFkZHIgVmFsaWQ9JXMgUENDPSVzXG4iLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfTUlTQ19FUlJfVkFMSUQpID8KLQkJCSJUcnVlIiA6ICJGYWxzZSIsCi0JCShyZWdzLT5uYnNoICYgSzhfTkJTSF9WQUxJRF9FUlJPUl9BRERSKSA/Ci0JCQkiVHJ1ZSIgOiAiRmFsc2UiLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfUENDKSA/Ci0JCQkiVHJ1ZSIgOiAiRmFsc2UiKTsKLQlkZWJ1Z2YxKCIgIENFQ0M9JXMgVUVDQz0lcyBGb3VuZCBieSBTY3J1YmVyPSVzXG4iLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfQ0VDQykgPwotCQkJIlRydWUiIDogIkZhbHNlIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX1VFQ0MpID8KLQkJCSJUcnVlIiA6ICJGYWxzZSIsCi0JCShyZWdzLT5uYnNoICYgSzhfTkJTSF9FUlJfU0NSVUJFUikgPwotCQkJIlRydWUiIDogIkZhbHNlIik7Ci0JZGVidWdmMSgiICBDT1JFMD0lcyBDT1JFMT0lcyBDT1JFMj0lcyBDT1JFMz0lc1xuIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX0NPUkUwKSA/ICJUcnVlIiA6ICJGYWxzZSIsCi0JCShyZWdzLT5uYnNoICYgSzhfTkJTSF9DT1JFMSkgPyAiVHJ1ZSIgOiAiRmFsc2UiLAotCQkocmVncy0+bmJzaCAmIEs4X05CU0hfQ09SRTIpID8gIlRydWUiIDogIkZhbHNlIiwKLQkJKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX0NPUkUzKSA/ICJUcnVlIiA6ICJGYWxzZSIpOwotCi0KLQllcnJfY29kZSA9IEVYVFJBQ1RfRVJST1JfQ09ERShyZWdzLT5uYnNsKTsKLQotCS8qIERldGVybWluZSB3aGljaCBlcnJvciB0eXBlOgotCSAqCTEpIEdBUlQgZXJyb3JzIC0gbm9uLWZhdGFsLCBkZXZlbG9wbWVudGFsIGV2ZW50cwotCSAqCTIpIE1FTU9SWSBlcnJvcnMKLQkgKgkzKSBCVVMgZXJyb3JzCi0JICoJNCkgVW5rbm93biBlcnJvcgotCSAqLwotCWlmIChURVNUX1RMQl9FUlJPUihlcnJfY29kZSkpIHsKLQkJLyoKLQkJICogR0FSVCBlcnJvcnMgYXJlIGludGVuZGVkIHRvIGhlbHAgZ3JhcGhpY3MgZHJpdmVyIGRldmVsb3BlcnMKLQkJICogdG8gZGV0ZWN0IGJhZCBHQVJUIFBURXMuIEl0IGlzIHJlY29tbWVuZGVkIGJ5IEFNRCB0byBkaXNhYmxlCi0JCSAqIEdBUlQgdGFibGUgd2FsayBlcnJvciByZXBvcnRpbmcgYnkgZGVmYXVsdFsxXSAoY3VycmVudGx5Ci0JCSAqIGJlaW5nIGRpc2FibGVkIGluIG1jZV9jcHVfcXVpcmtzKCkpIGFuZCBhY2NvcmRpbmcgdG8gdGhlCi0JCSAqIGNvbW1lbnQgaW4gbWNlX2NwdV9xdWlya3MoKSwgc3VjaCBHQVJUIGVycm9ycyBjYW4gYmUKLQkJICogaW5jb3JyZWN0bHkgdHJpZ2dlcmVkLiBXZSBtYXkgc2VlIHRoZXNlIGVycm9ycyBhbnl3YXkgYW5kCi0JCSAqIHVubGVzcyByZXF1ZXN0ZWQgYnkgdGhlIHVzZXIsIHRoZXkgd29uJ3QgYmUgcmVwb3J0ZWQuCi0JCSAqCi0JCSAqIFsxXSBzZWN0aW9uIDEzLjEwLjEgb24gQklPUyBhbmQgS2VybmVsIERldmVsb3BlcnMgR3VpZGUgZm9yCi0JCSAqICAgICBBTUQgTlBUIGZhbWlseSAwRmggcHJvY2Vzc29ycwotCQkgKi8KLQkJaWYgKHJlcG9ydF9nYXJ0X2Vycm9ycyA9PSAwKQotCQkJcmV0dXJuIDE7Ci0KLQkJLyoKLQkJICogT25seSBpZiBHQVJUIGVycm9yIHJlcG9ydGluZyBpcyByZXF1ZXN0ZWQgc2hvdWxkIHdlIGdlbmVyYXRlCi0JCSAqIGFueSBsb2dzLgotCQkgKi8KLQkJZ2FydF90bGJfZXJyb3IgPSAxOwotCi0JCWRlYnVnZjEoIkdBUlQgVExCIGVycm9yXG4iKTsKLQkJYW1kNjRfZGVjb2RlX2dhcnRfdGxiX2Vycm9yKG1jaSwgaW5mbyk7Ci0JfSBlbHNlIGlmIChURVNUX01FTV9FUlJPUihlcnJfY29kZSkpIHsKLQkJZGVidWdmMSgiTWVtb3J5L0NhY2hlIGVycm9yXG4iKTsKLQkJYW1kNjRfZGVjb2RlX21lbV9jYWNoZV9lcnJvcihtY2ksIGluZm8pOwotCX0gZWxzZSBpZiAoVEVTVF9CVVNfRVJST1IoZXJyX2NvZGUpKSB7Ci0JCWRlYnVnZjEoIkJ1cyAoTGluay9EUkFNKSBlcnJvclxuIik7Ci0JCWFtZDY0X2RlY29kZV9idXNfZXJyb3IobWNpLCBpbmZvKTsKLQl9IGVsc2UgewotCQkvKiBzaG91bGRuJ3QgcmVhY2ggaGVyZSEgKi8KLQkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9XQVJOSU5HLAotCQkJICAgICAiJXMoKTogdW5rbm93biBNQ0UgZXJyb3IgMHgleFxuIiwgX19mdW5jX18sCi0JCQkgICAgIGVycl9jb2RlKTsKLQl9Ci0KLQlleHRfZWMgPSBFWFRSQUNUX0VYVF9FUlJPUl9DT0RFKHJlZ3MtPm5ic2wpOwotCWFtZDY0X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLAotCQkiRXh0RXJyPSgweCV4KSAlc1xuIiwgZXh0X2VjLCBleHRfbXNnc1tleHRfZWNdKTsKLQotCWlmICgoKGV4dF9lYyA+PSBGMTBfTkJTTF9FWFRfRVJSX0NSQyAmJgotCQkJZXh0X2VjIDw9IEYxMF9OQlNMX0VYVF9FUlJfVEdUKSB8fAotCQkJKGV4dF9lYyA9PSBGMTBfTkJTTF9FWFRfRVJSX1JNVykpICYmCi0JCQlFWFRSQUNUX0xEVF9MSU5LKGluZm8tPm5ic2gpKSB7Ci0KLQkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCi0JCQkiRXJyb3Igb24gaHlwZXJ0cmFuc3BvcnQgbGluazogJXNcbiIsCi0JCQlodGxpbmtfbXNnc1sKLQkJCUVYVFJBQ1RfTERUX0xJTksoaW5mby0+bmJzaCldKTsKLQl9CisJX19hbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKG1jaSwgcmVncyk7CiAKIAkvKgogCSAqIENoZWNrIHRoZSBVRSBiaXQgb2YgdGhlIE5CIHN0YXR1cyBoaWdoIHJlZ2lzdGVyLCBpZiBzZXQgZ2VuZXJhdGUgc29tZQogCSAqIGxvZ3MuIElmIE5PVCBhIEdBUlQgZXJyb3IsIHRoZW4gcHJvY2VzcyB0aGUgZXZlbnQgYXMgYSBOTy1JTkZPIGV2ZW50LgogCSAqIElmIGl0IHdhcyBhIEdBUlQgZXJyb3IsIHNraXAgdGhhdCBwcm9jZXNzLgorCSAqCisJICogRklYTUU6IHRoaXMgc2hvdWxkIGdvIHNvbWV3aGVyZSBlbHNlLCBpZiBhdCBhbGwuCiAJICovCi0JaWYgKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX1VOQ09SUkVDVEVEX0VSUikgewotCQlhbWQ2NF9tY19wcmludGsobWNpLCBLRVJOX0NSSVQsICJ1bmNvcnJlY3RlZCBlcnJvclxuIik7Ci0JCWlmICghZ2FydF90bGJfZXJyb3IpCi0JCQllZGFjX21jX2hhbmRsZV91ZV9ub19pbmZvKG1jaSwgIlVFIGJpdCBpcyBzZXRcbiIpOwotCX0KKwlpZiAocmVncy0+bmJzaCAmIEs4X05CU0hfVUNfRVJSICYmICFyZXBvcnRfZ2FydF9lcnJvcnMpCisJCWVkYWNfbWNfaGFuZGxlX3VlX25vX2luZm8obWNpLCAiVUUgYml0IGlzIHNldCIpOwogCi0JaWYgKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX1BDQykKLQkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9DUklULAotCQkJIlBDQyAocHJvY2Vzc29yIGNvbnRleHQgY29ycnVwdCkgc2V0XG4iKTsKLQotCXJldHVybiAxOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYW1kNjRfcHJvY2Vzc19lcnJvcl9pbmZvKTsKIAogLyoKICAqIFRoZSBtYWluIHBvbGxpbmcgJ2NoZWNrJyBmdW5jdGlvbiwgY2FsbGVkIEZST00gdGhlIGVkYWMgY29yZSB0byBwZXJmb3JtIHRoZQpAQCAtMjQ2NCwxMCArMjMzNywxMiBAQAogICovCiBzdGF0aWMgdm9pZCBhbWQ2NF9jaGVjayhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCiB7Ci0Jc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyBpbmZvOworCXN0cnVjdCBlcnJfcmVncyByZWdzOwogCi0JaWYgKGFtZDY0X2dldF9lcnJvcl9pbmZvKG1jaSwgJmluZm8pKQotCQlhbWQ2NF9wcm9jZXNzX2Vycm9yX2luZm8obWNpLCAmaW5mbywgMSk7CisJaWYgKGFtZDY0X2dldF9lcnJvcl9pbmZvKG1jaSwgJnJlZ3MpKSB7CisJCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CisJCWFtZF9kZWNvZGVfbmJfbWNlKHB2dC0+bWNfbm9kZV9pZCwgJnJlZ3MsIDEpOworCX0KIH0KIAogLyoKQEAgLTMxNjMsNiArMzAzOCwxMyBAQAogCiAJbWNpX2xvb2t1cFtub2RlX2lkXSA9IG1jaTsKIAlwdnRfbG9va3VwW25vZGVfaWRdID0gTlVMTDsKKworCS8qIHJlZ2lzdGVyIHN0dWZmIHdpdGggRURBQyBNQ0UgKi8KKwlpZiAocmVwb3J0X2dhcnRfZXJyb3JzKQorCQlhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKHRydWUpOworCisJYW1kX3JlZ2lzdGVyX2VjY19kZWNvZGVyKGFtZDY0X2RlY29kZV9idXNfZXJyb3IpOworCiAJcmV0dXJuIDA7CiAKIGVycl9hZGRfbWM6CkBAIC0zMjI5LDYgKzMxMTEsMTAgQEAKIAogCW1jaV9sb29rdXBbcHZ0LT5tY19ub2RlX2lkXSA9IE5VTEw7CiAKKwkvKiB1bnJlZ2lzdGVyIGZyb20gRURBQyBNQ0UgKi8KKwlhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGZhbHNlKTsKKwlhbWRfdW5yZWdpc3Rlcl9lY2NfZGVjb2RlcihhbWQ2NF9kZWNvZGVfYnVzX2Vycm9yKTsKKwogCS8qIEZyZWUgdGhlIEVEQUMgQ09SRSByZXNvdXJjZXMgKi8KIAllZGFjX21jX2ZyZWUobWNpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCmluZGV4IGJhNzMwMTUuLjhlYTA3ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaApAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSAiZWRhY19jb3JlLmgiCisjaW5jbHVkZSAiZWRhY19tY2VfYW1kLmgiCiAKICNkZWZpbmUgYW1kNjRfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgXAogCWVkYWNfcHJpbnRrKGxldmVsLCAiYW1kNjQiLCBmbXQsICMjYXJnKQpAQCAtMzAzLDIxICszMDQsOSBAQAogI2RlZmluZSBLOF9OQlNMCQkJCTB4NDgKIAogCi0jZGVmaW5lIEVYVFJBQ1RfSElHSF9TWU5EUk9NRSh4KQkoKCh4KSA+PiAyNCkgJiAweGZmKQotI2RlZmluZSBFWFRSQUNUX0VYVF9FUlJPUl9DT0RFKHgpCSgoKHgpID4+IDE2KSAmIDB4MWYpCi0KIC8qIEZhbWlseSBGMTBoOiBOb3JtYWxpemVkIEV4dGVuZGVkIEVycm9yIENvZGVzICovCiAjZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfUkVTCQkweDAKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9DUkMJCTB4MQotI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX1NZTkMJCTB4MgotI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX01TVAkJMHgzCi0jZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfVEdUCQkweDQKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9HQVJUCQkweDUKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9STVcJCTB4NgotI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX1dEVAkJMHg3CiAjZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfRUNDCQkweDgKLSNkZWZpbmUgRjEwX05CU0xfRVhUX0VSUl9ERVYJCTB4OQotI2RlZmluZSBGMTBfTkJTTF9FWFRfRVJSX0xJTktfREFUQQkweEEKIAogLyogTmV4dCB0d28gYXJlIG92ZXJsb2FkZWQgdmFsdWVzICovCiAjZGVmaW5lIEYxMF9OQlNMX0VYVF9FUlJfTElOS19QUk9UTwkweEIKQEAgLTM0OCwxNyArMzM3LDYgQEAKICNkZWZpbmUgSzhfTkJTTF9FWFRfRVJSX0NISVBLSUxMX0VDQwkweDgKICNkZWZpbmUgSzhfTkJTTF9FWFRfRVJSX0RSQU1fUEFSSVRZCTB4RAogCi0jZGVmaW5lIEVYVFJBQ1RfRVJST1JfQ09ERSh4KQkJKCh4KSAmIDB4ZmZmZikKLSNkZWZpbmUJVEVTVF9UTEJfRVJST1IoeCkJCSgoKHgpICYgMHhGRkYwKSA9PSAweDAwMTApCi0jZGVmaW5lCVRFU1RfTUVNX0VSUk9SKHgpCQkoKCh4KSAmIDB4RkYwMCkgPT0gMHgwMTAwKQotI2RlZmluZQlURVNUX0JVU19FUlJPUih4KQkJKCgoeCkgJiAweEY4MDApID09IDB4MDgwMCkKLSNkZWZpbmUJRVhUUkFDVF9UVF9DT0RFKHgpCQkoKCh4KSA+PiAyKSAmIDB4MykKLSNkZWZpbmUJRVhUUkFDVF9JSV9DT0RFKHgpCQkoKCh4KSA+PiAyKSAmIDB4MykKLSNkZWZpbmUJRVhUUkFDVF9MTF9DT0RFKHgpCQkoKCh4KSA+PiAwKSAmIDB4MykKLSNkZWZpbmUJRVhUUkFDVF9SUlJSX0NPREUoeCkJCSgoKHgpID4+IDQpICYgMHhmKQotI2RlZmluZQlFWFRSQUNUX1RPX0NPREUoeCkJCSgoKHgpID4+IDgpICYgMHgxKQotI2RlZmluZQlFWFRSQUNUX1BQX0NPREUoeCkJCSgoKHgpID4+IDkpICYgMHgzKQotCiAvKgogICogVGhlIGZvbGxvd2luZyBhcmUgZm9yIEJVUyB0eXBlIGVycm9ycyBBRlRFUiB2YWx1ZXMgaGF2ZSBiZWVuIG5vcm1hbGl6ZWQgYnkKICAqIHNoaWZ0aW5nIHJpZ2h0CkBAIC0zNjgsMjggKzM0Niw3IEBACiAjZGVmaW5lIEs4X05CU0xfUFBfT0JTCQkJMHgyCiAjZGVmaW5lIEs4X05CU0xfUFBfR0VORVJJQwkJMHgzCiAKLQotI2RlZmluZSBLOF9OQlNICQkJCTB4NEMKLQotI2RlZmluZSBLOF9OQlNIX1ZBTElEX0JJVAkJQklUKDMxKQotI2RlZmluZSBLOF9OQlNIX09WRVJGTE9XCQlCSVQoMzApCi0jZGVmaW5lIEs4X05CU0hfVU5DT1JSRUNURURfRVJSCQlCSVQoMjkpCi0jZGVmaW5lIEs4X05CU0hfRVJSX0VOQUJMRQkJQklUKDI4KQotI2RlZmluZSBLOF9OQlNIX01JU0NfRVJSX1ZBTElECQlCSVQoMjcpCi0jZGVmaW5lIEs4X05CU0hfVkFMSURfRVJST1JfQUREUglCSVQoMjYpCi0jZGVmaW5lIEs4X05CU0hfUENDCQkJQklUKDI1KQotI2RlZmluZSBLOF9OQlNIX0NFQ0MJCQlCSVQoMTQpCi0jZGVmaW5lIEs4X05CU0hfVUVDQwkJCUJJVCgxMykKLSNkZWZpbmUgSzhfTkJTSF9FUlJfU0NSVUJFUgkJQklUKDgpCi0jZGVmaW5lIEs4X05CU0hfQ09SRTMJCQlCSVQoMykKLSNkZWZpbmUgSzhfTkJTSF9DT1JFMgkJCUJJVCgyKQotI2RlZmluZSBLOF9OQlNIX0NPUkUxCQkJQklUKDEpCi0jZGVmaW5lIEs4X05CU0hfQ09SRTAJCQlCSVQoMCkKLQotI2RlZmluZSBFWFRSQUNUX0xEVF9MSU5LKHgpCQkoKCh4KSA+PiA0KSAmIDB4NykKICNkZWZpbmUgRVhUUkFDVF9FUlJfQ1BVX01BUCh4KQkJKCh4KSAmIDB4RikKLSNkZWZpbmUgRVhUUkFDVF9MT1dfU1lORFJPTUUoeCkJCSgoKHgpID4+IDE1KSAmIDB4ZmYpCi0KIAogI2RlZmluZSBLOF9OQkVBTAkJCTB4NTAKICNkZWZpbmUgSzhfTkJFQUgJCQkweDU0CkBAIC00NTUsMjMgKzQxMiw2IEBACiAJRjExX0NQVVMsCiB9OwogCi0vKgotICogU3RydWN0dXJlIHRvIGhvbGQ6Ci0gKgotICogMSkgZHluYW1pY2FsbHkgcmVhZCBzdGF0dXMgYW5kIGVycm9yIGFkZHJlc3MgSFcgcmVnaXN0ZXJzCi0gKiAyKSBzeXNmcyBlbnRlcmVkIHZhbHVlcwotICogMykgTUNFIHZhbHVlcwotICoKLSAqIERlcGVuZHMgb24gZW50cnkgaW50byB0aGUgbW9kdWxlcwotICovCi1zdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzIHsKLQl1MzIgbmJjZmc7Ci0JdTMyIG5ic2g7Ci0JdTMyIG5ic2w7Ci0JdTMyIG5iZWFoOwotCXUzMiBuYmVhbDsKLX07Ci0KIC8qIEVycm9yIGluamVjdGlvbiBjb250cm9sIHN0cnVjdHVyZSAqLwogc3RydWN0IGVycm9yX2luamVjdGlvbiB7CiAJdTMyCXNlY3Rpb247CkBAIC01NDIsNyArNDgyLDcgQEAKIAl1MzIgb25saW5lX3NwYXJlOyAgICAgICAgICAgICAgIC8qIE9uLUxpbmUgc3BhcmUgUmVnICovCiAKIAkvKiB0ZW1wIHN0b3JhZ2UgZm9yIHdoZW4gaW5wdXQgaXMgcmVjZWl2ZWQgZnJvbSBzeXNmcyAqLwotCXN0cnVjdCBhbWQ2NF9lcnJvcl9pbmZvX3JlZ3MgY3RsX2Vycm9yX2luZm87CisJc3RydWN0IGVycl9yZWdzIGN0bF9lcnJvcl9pbmZvOwogCiAJLyogcGxhY2UgdG8gc3RvcmUgZXJyb3IgaW5qZWN0aW9uIHBhcmFtZXRlcnMgcHJpb3IgdG8gaXNzdWUgKi8KIAlzdHJ1Y3QgZXJyb3JfaW5qZWN0aW9uIGluamVjdGlvbjsKQEAgLTYwMSwxMSArNTQxLDExIEBACiAJaW50ICgqZWFybHlfY2hhbm5lbF9jb3VudCkoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KTsKIAogCXU2NCAoKmdldF9lcnJvcl9hZGRyZXNzKShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCi0JCQlzdHJ1Y3QgYW1kNjRfZXJyb3JfaW5mb19yZWdzICppbmZvKTsKKwkJCXN0cnVjdCBlcnJfcmVncyAqaW5mbyk7CiAJdm9pZCAoKnJlYWRfZHJhbV9iYXNlX2xpbWl0KShzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIGludCBkcmFtKTsKIAl2b2lkICgqcmVhZF9kcmFtX2N0bF9yZWdpc3Rlcikoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KTsKIAl2b2lkICgqbWFwX3N5c2FkZHJfdG9fY3Nyb3cpKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCQkJc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbywKKwkJCQkJc3RydWN0IGVycl9yZWdzICppbmZvLAogCQkJCQl1NjQgU3lzdGVtQWRkcik7CiAJaW50ICgqZGJhbV9tYXBfdG9fcGFnZXMpKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgaW50IGRyYW1fbWFwKTsKIH07CkBAIC02MzcsOCArNTc3LDUgQEAKICNkZWZpbmUgRjEwX01JTl9TQ1JVQl9SQVRFX0JJVFMJMHg1CiAjZGVmaW5lIEYxMV9NSU5fU0NSVUJfUkFURV9CSVRTCTB4NgogCi1pbnQgYW1kNjRfcHJvY2Vzc19lcnJvcl9pbmZvKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKLQkJCSAgICAgc3RydWN0IGFtZDY0X2Vycm9yX2luZm9fcmVncyAqaW5mbywKLQkJCSAgICAgaW50IGhhbmRsZV9lcnJvcnMpOwogaW50IGFtZDY0X2dldF9kcmFtX2hvbGVfaW5mbyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHU2NCAqaG9sZV9iYXNlLAogCQkJICAgICB1NjQgKmhvbGVfb2Zmc2V0LCB1NjQgKmhvbGVfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19kYmcuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2RiZy5jCmluZGV4IDBhNDFiMjQuLjU5Y2YyY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2RiZy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjX2RiZy5jCkBAIC0yNCw3ICsyNCw3IEBACiAKIAkJLyogUHJvY2VzcyB0aGUgTWFwcGluZyByZXF1ZXN0ICovCiAJCS8qIFRPRE86IEFkZCByYWNlIHByZXZlbnRpb24gKi8KLQkJYW1kNjRfcHJvY2Vzc19lcnJvcl9pbmZvKG1jaSwgJnB2dC0+Y3RsX2Vycm9yX2luZm8sIDEpOworCQlhbWRfZGVjb2RlX25iX21jZShwdnQtPm1jX25vZGVfaWQsICZwdnQtPmN0bF9lcnJvcl9pbmZvLCAxKTsKIAogCQlyZXR1cm4gY291bnQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfZXJyX3R5cGVzLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19lcnJfdHlwZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIxMmZmMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19lcnJfdHlwZXMuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0jaW5jbHVkZSAiYW1kNjRfZWRhYy5oIgotCi0vKgotICogU2VlIEYyeDgwIGZvciBLOCBhbmQgRjJ4WzEsMF04MCBmb3IgRmFtMTAgYW5kIGxhdGVyLiBUaGUgdGFibGUgYmVsb3cgaXMgb25seQotICogZm9yIEREUjIgRFJBTSBtYXBwaW5nLgotICovCi11MzIgcmV2Zl9xdWFkX2RkcjJfc2hpZnRbXSA9IHsKLQkwLAkvKiAwMDAwYiBOVUxMIERJTU0gKDEyOG1iKSAqLwotCTI4LAkvKiAwMDAxYiAyNTZtYiAqLwotCTI5LAkvKiAwMDEwYiA1MTJtYiAqLwotCTI5LAkvKiAwMDExYiA1MTJtYiAqLwotCTI5LAkvKiAwMTAwYiA1MTJtYiAqLwotCTMwLAkvKiAwMTAxYiAxZ2IgKi8KLQkzMCwJLyogMDExMGIgMWdiICovCi0JMzEsCS8qIDAxMTFiIDJnYiAqLwotCTMxLAkvKiAxMDAwYiAyZ2IgKi8KLQkzMiwJLyogMTAwMWIgNGdiICovCi0JMzIsCS8qIDEwMTBiIDRnYiAqLwotCTMzLAkvKiAxMDExYiA4Z2IgKi8KLQkwLAkvKiAxMTAwYiBmdXR1cmUgKi8KLQkwLAkvKiAxMTAxYiBmdXR1cmUgKi8KLQkwLAkvKiAxMTEwYiBmdXR1cmUgKi8KLQkwCS8qIDExMTFiIGZ1dHVyZSAqLwotfTsKLQotLyoKLSAqIFZhbGlkIHNjcnViIHJhdGVzIGZvciB0aGUgSzggaGFyZHdhcmUgbWVtb3J5IHNjcnViYmVyLiBXZSBtYXAgdGhlIHNjcnViYmluZwotICogYmFuZHdpZHRoIHRvIGEgdmFsaWQgYml0IHBhdHRlcm4uIFRoZSAnc2V0JyBvcGVyYXRpb24gZmluZHMgdGhlICdtYXRjaGluZy0KLSAqIG9yIGhpZ2hlciB2YWx1ZScuCi0gKgotICpGSVhNRTogUHJvZHVjZSBhIGJldHRlciBtYXBwaW5nL2xpbmVhcmlzYXRpb24uCi0gKi8KLQotc3RydWN0IHNjcnVicmF0ZSBzY3J1YnJhdGVzW10gPSB7Ci0JeyAweDAxLCAxNjAwMDAwMDAwVUx9LAotCXsgMHgwMiwgODAwMDAwMDAwVUx9LAotCXsgMHgwMywgNDAwMDAwMDAwVUx9LAotCXsgMHgwNCwgMjAwMDAwMDAwVUx9LAotCXsgMHgwNSwgMTAwMDAwMDAwVUx9LAotCXsgMHgwNiwgNTAwMDAwMDBVTH0sCi0JeyAweDA3LCAyNTAwMDAwMFVMfSwKLQl7IDB4MDgsIDEyMjg0MDY5VUx9LAotCXsgMHgwOSwgNjI3NDUwOVVMfSwKLQl7IDB4MEEsIDMxMjE5NTFVTH0sCi0JeyAweDBCLCAxNTYwOTc1VUx9LAotCXsgMHgwQywgNzgxNDQwVUx9LAotCXsgMHgwRCwgMzkwNzIwVUx9LAotCXsgMHgwRSwgMTk1MzAwVUx9LAotCXsgMHgwRiwgOTc2NTBVTH0sCi0JeyAweDEwLCA0ODg1NFVMfSwKLQl7IDB4MTEsIDI0NDI3VUx9LAotCXsgMHgxMiwgMTIyMTNVTH0sCi0JeyAweDEzLCA2MTAxVUx9LAotCXsgMHgxNCwgMzA1MVVMfSwKLQl7IDB4MTUsIDE1MjNVTH0sCi0JeyAweDE2LCA3NjFVTH0sCi0JeyAweDAwLCAwVUx9LCAgICAgICAgLyogc2NydWJiaW5nIG9mZiAqLwotfTsKLQotLyoKLSAqIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGRpZmZlcmVudCBNQ0EgcmVwb3J0ZWQgZXJyb3IgdHlwZXMsIHNlZSBGM3g0OAotICogb3IgTVNSMDAwMF8wNDExLgotICovCi1jb25zdCBjaGFyICp0dF9tc2dzW10gPSB7ICAgICAgICAvKiB0cmFuc2FjdGlvbiB0eXBlICovCi0JImluc3RydWN0aW9uIiwKLQkiZGF0YSIsCi0JImdlbmVyaWMiLAotCSJyZXNlcnZlZCIKLX07Ci0KLWNvbnN0IGNoYXIgKmxsX21zZ3NbXSA9IHsJLyogY2FjaGUgbGV2ZWwgKi8KLQkiTDAiLAotCSJMMSIsCi0JIkwyIiwKLQkiTDMvZ2VuZXJpYyIKLX07Ci0KLWNvbnN0IGNoYXIgKnJycnJfbXNnc1tdID0gewotCSJnZW5lcmljIiwKLQkiZ2VuZXJpYyByZWFkIiwKLQkiZ2VuZXJpYyB3cml0ZSIsCi0JImRhdGEgcmVhZCIsCi0JImRhdGEgd3JpdGUiLAotCSJpbnN0IGZldGNoIiwKLQkicHJlZmV0Y2giLAotCSJldmljdCIsCi0JInNub29wIiwKLQkicmVzZXJ2ZWQgUlJSUj0gOSIsCi0JInJlc2VydmVkIFJSUlI9IDEwIiwKLQkicmVzZXJ2ZWQgUlJSUj0gMTEiLAotCSJyZXNlcnZlZCBSUlJSPSAxMiIsCi0JInJlc2VydmVkIFJSUlI9IDEzIiwKLQkicmVzZXJ2ZWQgUlJSUj0gMTQiLAotCSJyZXNlcnZlZCBSUlJSPSAxNSIKLX07Ci0KLWNvbnN0IGNoYXIgKnBwX21zZ3NbXSA9IHsJLyogcGFydGljaXBhdGluZyBwcm9jZXNzb3IgKi8KLQkibG9jYWwgbm9kZSBvcmlnaW5hdGVkIChTUkMpIiwKLQkibG9jYWwgbm9kZSByZXNwb25kZWQgdG8gcmVxdWVzdCAoUkVTKSIsCi0JImxvY2FsIG5vZGUgb2JzZXJ2ZWQgYXMgM3JkIHBhcnR5IChPQlMpIiwKLQkiZ2VuZXJpYyIKLX07Ci0KLWNvbnN0IGNoYXIgKnRvX21zZ3NbXSA9IHsKLQkibm8gdGltZW91dCIsCi0JInRpbWVkIG91dCIKLX07Ci0KLWNvbnN0IGNoYXIgKmlpX21zZ3NbXSA9IHsJLyogbWVtb3J5IG9yIGkvbyAqLwotCSJtZW0gYWNjZXNzIiwKLQkicmVzZXJ2ZWQiLAotCSJpL28gYWNjZXNzIiwKLQkiZ2VuZXJpYyIKLX07Ci0KLS8qIE1hcCB0aGUgNSBiaXRzIG9mIEV4dGVuZGVkIEVycm9yIGNvZGUgdG8gdGhlIHN0cmluZyB0YWJsZS4gKi8KLWNvbnN0IGNoYXIgKmV4dF9tc2dzW10gPSB7CS8qIGV4dGVuZGVkIGVycm9yICovCi0JIks4IEVDQyBlcnJvci9GMTAgcmVzZXJ2ZWQiLAkvKiAwXzAwMDBiICovCi0JIkNSQyBlcnJvciIsCQkJLyogMF8wMDAxYiAqLwotCSJzeW5jIGVycm9yIiwJCQkvKiAwXzAwMTBiICovCi0JIm1zdCBhYm9ydCIsCQkJLyogMF8wMDExYiAqLwotCSJ0Z3QgYWJvcnQiLAkJCS8qIDBfMDEwMGIgKi8KLQkiR0FSVCBlcnJvciIsCQkJLyogMF8wMTAxYiAqLwotCSJSTVcgZXJyb3IiLAkJCS8qIDBfMDExMGIgKi8KLQkiV2RvZyB0aW1lciBlcnJvciIsCQkvKiAwXzAxMTFiICovCi0JIkYxMC1FQ0MvSzgtQ2hpcGtpbGwgZXJyb3IiLAkvKiAwXzEwMDBiICovCi0JIkRFViBFcnJvciIsCQkJLyogMF8xMDAxYiAqLwotCSJMaW5rIERhdGEgZXJyb3IiLAkJLyogMF8xMDEwYiAqLwotCSJMaW5rIG9yIEwzIFByb3RvY29sIGVycm9yIiwJLyogMF8xMDExYiAqLwotCSJOQiBBcnJheSBlcnJvciIsCQkvKiAwXzExMDBiICovCi0JIkRSQU0gUGFyaXR5IGVycm9yIiwJCS8qIDBfMTEwMWIgKi8KLQkiTGluayBSZXRyeS9HQVJUIFRhYmxlIFdhbGsvREVWIFRhYmxlIFdhbGsgZXJyb3IiLCAvKiAwXzExMTBiICovCi0JIlJlcyAweDBmZiBlcnJvciIsCQkvKiAwXzExMTFiICovCi0JIlJlcyAweDEwMCBlcnJvciIsCQkvKiAxXzAwMDBiICovCi0JIlJlcyAweDEwMSBlcnJvciIsCQkvKiAxXzAwMDFiICovCi0JIlJlcyAweDEwMiBlcnJvciIsCQkvKiAxXzAwMTBiICovCi0JIlJlcyAweDEwMyBlcnJvciIsCQkvKiAxXzAwMTFiICovCi0JIlJlcyAweDEwNCBlcnJvciIsCQkvKiAxXzAxMDBiICovCi0JIlJlcyAweDEwNSBlcnJvciIsCQkvKiAxXzAxMDFiICovCi0JIlJlcyAweDEwNiBlcnJvciIsCQkvKiAxXzAxMTBiICovCi0JIlJlcyAweDEwNyBlcnJvciIsCQkvKiAxXzAxMTFiICovCi0JIlJlcyAweDEwOCBlcnJvciIsCQkvKiAxXzEwMDBiICovCi0JIlJlcyAweDEwOSBlcnJvciIsCQkvKiAxXzEwMDFiICovCi0JIlJlcyAweDEwQSBlcnJvciIsCQkvKiAxXzEwMTBiICovCi0JIlJlcyAweDEwQiBlcnJvciIsCQkvKiAxXzEwMTFiICovCi0JIkwzIENhY2hlIERhdGEgZXJyb3IiLAkJLyogMV8xMTAwYiAqLwotCSJMMyBDYWNoZVRhZyBlcnJvciIsCQkvKiAxXzExMDFiICovCi0JIkwzIENhY2hlIExSVSBlcnJvciIsCQkvKiAxXzExMTBiICovCi0JIlJlcyAweDFGRiBlcnJvciIJCS8qIDFfMTExMWIgKi8KLX07Ci0KLWNvbnN0IGNoYXIgKmh0bGlua19tc2dzW10gPSB7Ci0JIm5vbmUiLAotCSIxIiwKLQkiMiIsCi0JIjEgMiIsCi0JIjMiLAotCSIxIDMiLAotCSIyIDMiLAotCSIxIDIgMyIKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjYTcxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYwpAQCAtMCwwICsxLDQyMiBAQAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImVkYWNfbWNlX2FtZC5oIgorCitzdGF0aWMgYm9vbCByZXBvcnRfZ2FydF9lcnJvcnM7CitzdGF0aWMgdm9pZCAoKm5iX2J1c19kZWNvZGVyKShpbnQgbm9kZV9pZCwgc3RydWN0IGVycl9yZWdzICpyZWdzKTsKKwordm9pZCBhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGJvb2wgdikKK3sKKwlyZXBvcnRfZ2FydF9lcnJvcnMgPSB2OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYW1kX3JlcG9ydF9nYXJ0X2Vycm9ycyk7CisKK3ZvaWQgYW1kX3JlZ2lzdGVyX2VjY19kZWNvZGVyKHZvaWQgKCpmKShpbnQsIHN0cnVjdCBlcnJfcmVncyAqKSkKK3sKKwluYl9idXNfZGVjb2RlciA9IGY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhbWRfcmVnaXN0ZXJfZWNjX2RlY29kZXIpOworCit2b2lkIGFtZF91bnJlZ2lzdGVyX2VjY19kZWNvZGVyKHZvaWQgKCpmKShpbnQsIHN0cnVjdCBlcnJfcmVncyAqKSkKK3sKKwlpZiAobmJfYnVzX2RlY29kZXIpIHsKKwkJV0FSTl9PTihuYl9idXNfZGVjb2RlciAhPSBmKTsKKworCQluYl9idXNfZGVjb2RlciA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoYW1kX3VucmVnaXN0ZXJfZWNjX2RlY29kZXIpOworCisvKgorICogc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZGlmZmVyZW50IE1DQSByZXBvcnRlZCBlcnJvciB0eXBlcywgc2VlIEYzeDQ4CisgKiBvciBNU1IwMDAwXzA0MTEuCisgKi8KK2NvbnN0IGNoYXIgKnR0X21zZ3NbXSA9IHsgICAgICAgIC8qIHRyYW5zYWN0aW9uIHR5cGUgKi8KKwkiaW5zdHJ1Y3Rpb24iLAorCSJkYXRhIiwKKwkiZ2VuZXJpYyIsCisJInJlc2VydmVkIgorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHR0X21zZ3MpOworCitjb25zdCBjaGFyICpsbF9tc2dzW10gPSB7CS8qIGNhY2hlIGxldmVsICovCisJIkwwIiwKKwkiTDEiLAorCSJMMiIsCisJIkwzL2dlbmVyaWMiCit9OworRVhQT1JUX1NZTUJPTF9HUEwobGxfbXNncyk7CisKK2NvbnN0IGNoYXIgKnJycnJfbXNnc1tdID0geworCSJnZW5lcmljIiwKKwkiZ2VuZXJpYyByZWFkIiwKKwkiZ2VuZXJpYyB3cml0ZSIsCisJImRhdGEgcmVhZCIsCisJImRhdGEgd3JpdGUiLAorCSJpbnN0IGZldGNoIiwKKwkicHJlZmV0Y2giLAorCSJldmljdCIsCisJInNub29wIiwKKwkicmVzZXJ2ZWQgUlJSUj0gOSIsCisJInJlc2VydmVkIFJSUlI9IDEwIiwKKwkicmVzZXJ2ZWQgUlJSUj0gMTEiLAorCSJyZXNlcnZlZCBSUlJSPSAxMiIsCisJInJlc2VydmVkIFJSUlI9IDEzIiwKKwkicmVzZXJ2ZWQgUlJSUj0gMTQiLAorCSJyZXNlcnZlZCBSUlJSPSAxNSIKK307CitFWFBPUlRfU1lNQk9MX0dQTChycnJyX21zZ3MpOworCitjb25zdCBjaGFyICpwcF9tc2dzW10gPSB7CS8qIHBhcnRpY2lwYXRpbmcgcHJvY2Vzc29yICovCisJImxvY2FsIG5vZGUgb3JpZ2luYXRlZCAoU1JDKSIsCisJImxvY2FsIG5vZGUgcmVzcG9uZGVkIHRvIHJlcXVlc3QgKFJFUykiLAorCSJsb2NhbCBub2RlIG9ic2VydmVkIGFzIDNyZCBwYXJ0eSAoT0JTKSIsCisJImdlbmVyaWMiCit9OworRVhQT1JUX1NZTUJPTF9HUEwocHBfbXNncyk7CisKK2NvbnN0IGNoYXIgKnRvX21zZ3NbXSA9IHsKKwkibm8gdGltZW91dCIsCisJInRpbWVkIG91dCIKK307CitFWFBPUlRfU1lNQk9MX0dQTCh0b19tc2dzKTsKKworY29uc3QgY2hhciAqaWlfbXNnc1tdID0gewkvKiBtZW1vcnkgb3IgaS9vICovCisJIm1lbSBhY2Nlc3MiLAorCSJyZXNlcnZlZCIsCisJImkvbyBhY2Nlc3MiLAorCSJnZW5lcmljIgorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlpX21zZ3MpOworCisvKgorICogTWFwIHRoZSA0IG9yIDUgKGZhbWlseS1zcGVjaWZpYykgYml0cyBvZiBFeHRlbmRlZCBFcnJvciBjb2RlIHRvIHRoZQorICogc3RyaW5nIHRhYmxlLgorICovCitjb25zdCBjaGFyICpleHRfbXNnc1tdID0geworCSJLOCBFQ0MgZXJyb3IiLAkJCQkJLyogMF8wMDAwYiAqLworCSJDUkMgZXJyb3Igb24gbGluayIsCQkJCS8qIDBfMDAwMWIgKi8KKwkiU3luYyBlcnJvciBwYWNrZXRzIG9uIGxpbmsiLAkJCS8qIDBfMDAxMGIgKi8KKwkiTWFzdGVyIEFib3J0IGR1cmluZyBsaW5rIG9wZXJhdGlvbiIsCQkvKiAwXzAwMTFiICovCisJIlRhcmdldCBBYm9ydCBkdXJpbmcgbGluayBvcGVyYXRpb24iLAkJLyogMF8wMTAwYiAqLworCSJJbnZhbGlkIEdBUlQgUFRFIGVudHJ5IGR1cmluZyB0YWJsZSB3YWxrIiwJLyogMF8wMTAxYiAqLworCSJVbnN1cHBvcnRlZCBhdG9taWMgUk1XIGNvbW1hbmQgcmVjZWl2ZWQiLAkvKiAwXzAxMTBiICovCisJIldEVCBlcnJvcjogTkIgdHJhbnNhY3Rpb24gdGltZW91dCIsCQkvKiAwXzAxMTFiICovCisJIkVDQy9DaGlwS2lsbCBFQ0MgZXJyb3IiLAkJCS8qIDBfMTAwMGIgKi8KKwkiU1ZNIERFViBFcnJvciIsCQkJCS8qIDBfMTAwMWIgKi8KKwkiTGluayBEYXRhIGVycm9yIiwJCQkJLyogMF8xMDEwYiAqLworCSJMaW5rL0wzL1Byb2JlIEZpbHRlciBQcm90b2NvbCBlcnJvciIsCQkvKiAwXzEwMTFiICovCisJIk5CIEludGVybmFsIEFycmF5cyBQYXJpdHkgZXJyb3IiLAkJLyogMF8xMTAwYiAqLworCSJEUkFNIEFkZHJlc3MvQ29udHJvbCBQYXJpdHkgZXJyb3IiLAkJLyogMF8xMTAxYiAqLworCSJMaW5rIFRyYW5zbWlzc2lvbiBlcnJvciIsCQkJLyogMF8xMTEwYiAqLworCSJHQVJUL0RFViBUYWJsZSBXYWxrIERhdGEgZXJyb3IiCQkvKiAwXzExMTFiICovCisJIlJlcyAweDEwMCBlcnJvciIsCQkJCS8qIDFfMDAwMGIgKi8KKwkiUmVzIDB4MTAxIGVycm9yIiwJCQkJLyogMV8wMDAxYiAqLworCSJSZXMgMHgxMDIgZXJyb3IiLAkJCQkvKiAxXzAwMTBiICovCisJIlJlcyAweDEwMyBlcnJvciIsCQkJCS8qIDFfMDAxMWIgKi8KKwkiUmVzIDB4MTA0IGVycm9yIiwJCQkJLyogMV8wMTAwYiAqLworCSJSZXMgMHgxMDUgZXJyb3IiLAkJCQkvKiAxXzAxMDFiICovCisJIlJlcyAweDEwNiBlcnJvciIsCQkJCS8qIDFfMDExMGIgKi8KKwkiUmVzIDB4MTA3IGVycm9yIiwJCQkJLyogMV8wMTExYiAqLworCSJSZXMgMHgxMDggZXJyb3IiLAkJCQkvKiAxXzEwMDBiICovCisJIlJlcyAweDEwOSBlcnJvciIsCQkJCS8qIDFfMTAwMWIgKi8KKwkiUmVzIDB4MTBBIGVycm9yIiwJCQkJLyogMV8xMDEwYiAqLworCSJSZXMgMHgxMEIgZXJyb3IiLAkJCQkvKiAxXzEwMTFiICovCisJIkVDQyBlcnJvciBpbiBMMyBDYWNoZSBEYXRhIiwJCQkvKiAxXzExMDBiICovCisJIkwzIENhY2hlIFRhZyBlcnJvciIsCQkJCS8qIDFfMTEwMWIgKi8KKwkiTDMgQ2FjaGUgTFJVIFBhcml0eSBlcnJvciIsCQkJLyogMV8xMTEwYiAqLworCSJQcm9iZSBGaWx0ZXIgZXJyb3IiCQkJCS8qIDFfMTExMWIgKi8KK307CitFWFBPUlRfU1lNQk9MX0dQTChleHRfbXNncyk7CisKK3N0YXRpYyB2b2lkIGFtZF9kZWNvZGVfZGNfbWNlKHU2NCBtYzBfc3RhdHVzKQoreworCXUzMiBlYyAgPSBtYzBfc3RhdHVzICYgMHhmZmZmOworCXUzMiB4ZWMgPSAobWMwX3N0YXR1cyA+PiAxNikgJiAweGY7CisKKwlwcl9lbWVyZygiIERhdGEgQ2FjaGUgRXJyb3IiKTsKKworCWlmICh4ZWMgPT0gMSAmJiBUTEJfRVJST1IoZWMpKQorCQlwcl9jb250KCI6ICVzIFRMQiBtdWx0aW1hdGNoLlxuIiwgTExfTVNHKGVjKSk7CisJZWxzZSBpZiAoeGVjID09IDApIHsKKwkJaWYgKG1jMF9zdGF0dXMgJiAoMVVMTCA8PCA0MCkpCisJCQlwcl9jb250KCIgZHVyaW5nIERhdGEgU2NydWIuXG4iKTsKKwkJZWxzZSBpZiAoVExCX0VSUk9SKGVjKSkKKwkJCXByX2NvbnQoIjogJXMgVExCIHBhcml0eSBlcnJvci5cbiIsIExMX01TRyhlYykpOworCQllbHNlIGlmIChNRU1fRVJST1IoZWMpKSB7CisJCQl1OCBsbCAgID0gZWMgJiAweDM7CisJCQl1OCB0dCAgID0gKGVjID4+IDIpICYgMHgzOworCQkJdTggcnJyciA9IChlYyA+PiA0KSAmIDB4ZjsKKworCQkJLyogc2VlIEYxMGggQktERyAoMzExMTYpLCBUYWJsZSA5Mi4gKi8KKwkJCWlmIChsbCA9PSAweDEpIHsKKwkJCQlpZiAodHQgIT0gMHgxKQorCQkJCQlnb3RvIHdyb25nX2RjX21jZTsKKworCQkJCXByX2NvbnQoIjogRGF0YS9UYWcgJXMgZXJyb3IuXG4iLCBSUlJSX01TRyhlYykpOworCisJCQl9IGVsc2UgaWYgKGxsID09IDB4MiAmJiBycnJyID09IDB4MykKKwkJCQlwcl9jb250KCIgZHVyaW5nIEwxIGxpbmVmaWxsIGZyb20gTDIuXG4iKTsKKwkJCWVsc2UKKwkJCQlnb3RvIHdyb25nX2RjX21jZTsKKwkJfSBlbHNlIGlmIChCVVNfRVJST1IoZWMpICYmIGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikKKwkJCXByX2NvbnQoIiBkdXJpbmcgc3lzdGVtIGxpbmVmaWxsLlxuIik7CisJCWVsc2UKKwkJCWdvdG8gd3JvbmdfZGNfbWNlOworCX0gZWxzZQorCQlnb3RvIHdyb25nX2RjX21jZTsKKworCXJldHVybjsKKword3JvbmdfZGNfbWNlOgorCXByX3dhcm5pbmcoIkNvcnJ1cHRlZCBEQyBNQ0UgaW5mbz9cbiIpOworfQorCitzdGF0aWMgdm9pZCBhbWRfZGVjb2RlX2ljX21jZSh1NjQgbWMxX3N0YXR1cykKK3sKKwl1MzIgZWMgID0gbWMxX3N0YXR1cyAmIDB4ZmZmZjsKKwl1MzIgeGVjID0gKG1jMV9zdGF0dXMgPj4gMTYpICYgMHhmOworCisJcHJfZW1lcmcoIiBJbnN0cnVjdGlvbiBDYWNoZSBFcnJvciIpOworCisJaWYgKHhlYyA9PSAxICYmIFRMQl9FUlJPUihlYykpCisJCXByX2NvbnQoIjogJXMgVExCIG11bHRpbWF0Y2guXG4iLCBMTF9NU0coZWMpKTsKKwllbHNlIGlmICh4ZWMgPT0gMCkgeworCQlpZiAoVExCX0VSUk9SKGVjKSkKKwkJCXByX2NvbnQoIjogJXMgVExCIFBhcml0eSBlcnJvci5cbiIsIExMX01TRyhlYykpOworCQllbHNlIGlmIChCVVNfRVJST1IoZWMpKSB7CisJCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmICYmCisJCQkgICAgKG1jMV9zdGF0dXMgJiAoMVVMTCA8PCA1OCkpKQorCQkJCXByX2NvbnQoIiBkdXJpbmcgc3lzdGVtIGxpbmVmaWxsLlxuIik7CisJCQllbHNlCisJCQkJcHJfY29udCgiIGR1cmluZyBhdHRlbXB0ZWQgTkIgZGF0YSByZWFkLlxuIik7CisJCX0gZWxzZSBpZiAoTUVNX0VSUk9SKGVjKSkgeworCQkJdTggbGwgICA9IGVjICYgMHgzOworCQkJdTggcnJyciA9IChlYyA+PiA0KSAmIDB4ZjsKKworCQkJaWYgKGxsID09IDB4MikKKwkJCQlwcl9jb250KCIgZHVyaW5nIGEgbGluZWZpbGwgZnJvbSBMMi5cbiIpOworCQkJZWxzZSBpZiAobGwgPT0gMHgxKSB7CisKKwkJCQlzd2l0Y2ggKHJycnIpIHsKKwkJCQljYXNlIDB4NToKKwkJCQkJcHJfY29udCgiOiBQYXJpdHkgZXJyb3IgZHVyaW5nICIKKwkJCQkJICAgICAgICJkYXRhIGxvYWQuXG4iKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDB4NzoKKwkJCQkJcHJfY29udCgiOiBDb3B5YmFjayBQYXJpdHkvVmljdGltIgorCQkJCQkJIiBlcnJvci5cbiIpOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMHg4OgorCQkJCQlwcl9jb250KCI6IFRhZyBTbm9vcCBlcnJvci5cbiIpOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gd3JvbmdfaWNfbWNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZQorCQkJZ290byB3cm9uZ19pY19tY2U7CisJfSBlbHNlCisJCWdvdG8gd3JvbmdfaWNfbWNlOworCisJcmV0dXJuOworCit3cm9uZ19pY19tY2U6CisJcHJfd2FybmluZygiQ29ycnVwdGVkIElDIE1DRSBpbmZvP1xuIik7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9kZWNvZGVfYnVfbWNlKHU2NCBtYzJfc3RhdHVzKQoreworCXUzMiBlYyA9IG1jMl9zdGF0dXMgJiAweGZmZmY7CisJdTMyIHhlYyA9IChtYzJfc3RhdHVzID4+IDE2KSAmIDB4ZjsKKworCXByX2VtZXJnKCIgQnVzIFVuaXQgRXJyb3IiKTsKKworCWlmICh4ZWMgPT0gMHgxKQorCQlwcl9jb250KCIgaW4gdGhlIHdyaXRlIGRhdGEgYnVmZmVycy5cbiIpOworCWVsc2UgaWYgKHhlYyA9PSAweDMpCisJCXByX2NvbnQoIiBpbiB0aGUgdmljdGltIGRhdGEgYnVmZmVycy5cbiIpOworCWVsc2UgaWYgKHhlYyA9PSAweDIgJiYgTUVNX0VSUk9SKGVjKSkKKwkJcHJfY29udCgiOiAlcyBlcnJvciBpbiB0aGUgTDIgY2FjaGUgdGFncy5cbiIsIFJSUlJfTVNHKGVjKSk7CisJZWxzZSBpZiAoeGVjID09IDB4MCkgeworCQlpZiAoVExCX0VSUk9SKGVjKSkKKwkJCXByX2NvbnQoIjogJXMgZXJyb3IgaW4gYSBQYWdlIERlc2NyaXB0b3IgQ2FjaGUgb3IgIgorCQkJCSJHdWVzdCBUTEIuXG4iLCBUVF9NU0coZWMpKTsKKwkJZWxzZSBpZiAoQlVTX0VSUk9SKGVjKSkKKwkJCXByX2NvbnQoIjogJXMvRUNDIGVycm9yIGluIGRhdGEgcmVhZCBmcm9tIE5COiAlcy5cbiIsCisJCQkJUlJSUl9NU0coZWMpLCBQUF9NU0coZWMpKTsKKwkJZWxzZSBpZiAoTUVNX0VSUk9SKGVjKSkgeworCQkJdTggcnJyciA9IChlYyA+PiA0KSAmIDB4ZjsKKworCQkJaWYgKHJycnIgPj0gMHg3KQorCQkJCXByX2NvbnQoIjogJXMgZXJyb3IgZHVyaW5nIGRhdGEgY29weWJhY2suXG4iLAorCQkJCQlSUlJSX01TRyhlYykpOworCQkJZWxzZSBpZiAocnJyciA8PSAweDEpCisJCQkJcHJfY29udCgiOiAlcyBwYXJpdHkvRUNDIGVycm9yIGR1cmluZyBkYXRhICIKKwkJCQkJImFjY2VzcyBmcm9tIEwyLlxuIiwgUlJSUl9NU0coZWMpKTsKKwkJCWVsc2UKKwkJCQlnb3RvIHdyb25nX2J1X21jZTsKKwkJfSBlbHNlCisJCQlnb3RvIHdyb25nX2J1X21jZTsKKwl9IGVsc2UKKwkJZ290byB3cm9uZ19idV9tY2U7CisKKwlyZXR1cm47CisKK3dyb25nX2J1X21jZToKKwlwcl93YXJuaW5nKCJDb3JydXB0ZWQgQlUgTUNFIGluZm8/XG4iKTsKK30KKworc3RhdGljIHZvaWQgYW1kX2RlY29kZV9sc19tY2UodTY0IG1jM19zdGF0dXMpCit7CisJdTMyIGVjICA9IG1jM19zdGF0dXMgJiAweGZmZmY7CisJdTMyIHhlYyA9IChtYzNfc3RhdHVzID4+IDE2KSAmIDB4ZjsKKworCXByX2VtZXJnKCIgTG9hZCBTdG9yZSBFcnJvciIpOworCisJaWYgKHhlYyA9PSAweDApIHsKKwkJdTggcnJyciA9IChlYyA+PiA0KSAmIDB4ZjsKKworCQlpZiAoIUJVU19FUlJPUihlYykgfHwgKHJycnIgIT0gMHgzICYmIHJycnIgIT0gMHg0KSkKKwkJCWdvdG8gd3JvbmdfbHNfbWNlOworCisJCXByX2NvbnQoIiBkdXJpbmcgJXMuXG4iLCBSUlJSX01TRyhlYykpOworCX0KKwlyZXR1cm47CisKK3dyb25nX2xzX21jZToKKwlwcl93YXJuaW5nKCJDb3JydXB0ZWQgTFMgTUNFIGluZm8/XG4iKTsKK30KKwordm9pZCBhbWRfZGVjb2RlX25iX21jZShpbnQgbm9kZV9pZCwgc3RydWN0IGVycl9yZWdzICpyZWdzLCBpbnQgaGFuZGxlX2Vycm9ycykKK3sKKwl1MzIgZWMgID0gRVJST1JfQ09ERShyZWdzLT5uYnNsKTsKKwl1MzIgeGVjID0gRVhUX0VSUk9SX0NPREUocmVncy0+bmJzbCk7CisKKwlpZiAoIWhhbmRsZV9lcnJvcnMpCisJCXJldHVybjsKKworCXByX2VtZXJnKCIgTm9ydGhicmlkZ2UgRXJyb3IsIG5vZGUgJWQiLCBub2RlX2lkKTsKKworCS8qCisJICogRjEwaCwgcmV2RCBjYW4gZGlzYWJsZSBFcnJDcHVbMzowXSBzbyBjaGVjayB0aGF0IGZpcnN0IGFuZCBhbHNvIHRoZQorCSAqIHZhbHVlIGVuY29kaW5nIGhhcyBjaGFuZ2VkIHNvIGludGVycHJldCB0aG9zZSBkaWZmZXJlbnRseQorCSAqLworCWlmICgoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMCkgJiYKKwkgICAgKGJvb3RfY3B1X2RhdGEueDg2X21vZGVsID4gOCkpIHsKKwkJaWYgKHJlZ3MtPm5ic2ggJiBLOF9OQlNIX0VSUl9DUFVfVkFMKQorCQkJcHJfY29udCgiLCBjb3JlOiAldVxuIiwgKHU4KShyZWdzLT5uYnNoICYgMHhmKSk7CisJfSBlbHNlIHsKKwkJcHJfY29udCgiLCBjb3JlOiAlZFxuIiwgaWxvZzIoKHJlZ3MtPm5ic2ggJiAweGYpKSk7CisJfQorCisKKwlwcl9lbWVyZygiJXMuXG4iLCBFWFRfRVJSX01TRyh4ZWMpKTsKKworCWlmIChCVVNfRVJST1IoZWMpICYmIG5iX2J1c19kZWNvZGVyKQorCQluYl9idXNfZGVjb2Rlcihub2RlX2lkLCByZWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFtZF9kZWNvZGVfbmJfbWNlKTsKKworc3RhdGljIHZvaWQgYW1kX2RlY29kZV9mcl9tY2UodTY0IG1jNV9zdGF0dXMpCit7CisJLyogd2UgaGF2ZSBvbmx5IG9uZSBlcnJvciBzaWduYXR1cmUgc28gbWF0Y2ggYWxsIGZpZWxkcyBhdCBvbmNlLiAqLworCWlmICgobWM1X3N0YXR1cyAmIDB4ZmZmZikgPT0gMHgwZjBmKQorCQlwcl9lbWVyZygiIEZSIEVycm9yOiBDUFUgV2F0Y2hkb2cgdGltZXIgZXhwaXJlLlxuIik7CisJZWxzZQorCQlwcl93YXJuaW5nKCJDb3JydXB0ZWQgRlIgTUNFIGluZm8/XG4iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFtZF9kZWNvZGVfZXJyX2NvZGUodW5zaWduZWQgaW50IGVjKQoreworCWlmIChUTEJfRVJST1IoZWMpKSB7CisJCS8qCisJCSAqIEdBUlQgZXJyb3JzIGFyZSBpbnRlbmRlZCB0byBoZWxwIGdyYXBoaWNzIGRyaXZlciBkZXZlbG9wZXJzCisJCSAqIHRvIGRldGVjdCBiYWQgR0FSVCBQVEVzLiBJdCBpcyByZWNvbW1lbmRlZCBieSBBTUQgdG8gZGlzYWJsZQorCQkgKiBHQVJUIHRhYmxlIHdhbGsgZXJyb3IgcmVwb3J0aW5nIGJ5IGRlZmF1bHRbMV0gKGN1cnJlbnRseQorCQkgKiBiZWluZyBkaXNhYmxlZCBpbiBtY2VfY3B1X3F1aXJrcygpKSBhbmQgYWNjb3JkaW5nIHRvIHRoZQorCQkgKiBjb21tZW50IGluIG1jZV9jcHVfcXVpcmtzKCksIHN1Y2ggR0FSVCBlcnJvcnMgY2FuIGJlCisJCSAqIGluY29ycmVjdGx5IHRyaWdnZXJlZC4gV2UgbWF5IHNlZSB0aGVzZSBlcnJvcnMgYW55d2F5IGFuZAorCQkgKiB1bmxlc3MgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLCB0aGV5IHdvbid0IGJlIHJlcG9ydGVkLgorCQkgKgorCQkgKiBbMV0gc2VjdGlvbiAxMy4xMC4xIG9uIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXJzIEd1aWRlIGZvcgorCQkgKiAgICAgQU1EIE5QVCBmYW1pbHkgMEZoIHByb2Nlc3NvcnMKKwkJICovCisJCWlmICghcmVwb3J0X2dhcnRfZXJyb3JzKQorCQkJcmV0dXJuOworCisJCXByX2VtZXJnKCIgVHJhbnNhY3Rpb246ICVzLCBDYWNoZSBMZXZlbCAlc1xuIiwKKwkJCSBUVF9NU0coZWMpLCBMTF9NU0coZWMpKTsKKwl9IGVsc2UgaWYgKE1FTV9FUlJPUihlYykpIHsKKwkJcHJfZW1lcmcoIiBUcmFuc2FjdGlvbjogJXMsIFR5cGU6ICVzLCBDYWNoZSBMZXZlbDogJXMiLAorCQkJIFJSUlJfTVNHKGVjKSwgVFRfTVNHKGVjKSwgTExfTVNHKGVjKSk7CisJfSBlbHNlIGlmIChCVVNfRVJST1IoZWMpKSB7CisJCXByX2VtZXJnKCIgVHJhbnNhY3Rpb24gdHlwZTogJXMoJXMpLCAlcywgQ2FjaGUgTGV2ZWw6ICVzLCAiCisJCQkgIlBhcnRpY2lwYXRpbmcgUHJvY2Vzc29yOiAlc1xuIiwKKwkJCSAgUlJSUl9NU0coZWMpLCBJSV9NU0coZWMpLCBUT19NU0coZWMpLCBMTF9NU0coZWMpLAorCQkJICBQUF9NU0coZWMpKTsKKwl9IGVsc2UKKwkJcHJfd2FybmluZygiSHVoPyBVbmtub3duIE1DRSBlcnJvciAweCV4XG4iLCBlYyk7Cit9CisKK3ZvaWQgZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQoreworCXN0cnVjdCBlcnJfcmVncyByZWdzOworCWludCBub2RlLCBlY2M7CisKKwlwcl9lbWVyZygiTUMlZF9TVEFUVVM6ICIsIG0tPmJhbmspOworCisJcHJfY29udCgiJXNvcnJlY3RlZCBlcnJvciwgcmVwb3J0OiAlcywgTWlzY1Y6ICVzdmFsaWQsICIKKwkJICJDUFUgY29udGV4dCBjb3JydXB0OiAlcyIsCisJCSAoKG0tPnN0YXR1cyAmIE1DSV9TVEFUVVNfVUMpID8gIlVuYyIgIDogIkMiKSwKKwkJICgobS0+c3RhdHVzICYgTUNJX1NUQVRVU19FTikgPyAieWVzIiAgOiAibm8iKSwKKwkJICgobS0+c3RhdHVzICYgTUNJX1NUQVRVU19NSVNDVikgPyAiIiAgOiAiaW4iKSwKKwkJICgobS0+c3RhdHVzICYgTUNJX1NUQVRVU19QQ0MpID8gInllcyIgOiAibm8iKSk7CisKKwkvKiBkbyB0aGUgdHdvIGJpdHNbMTQ6MTNdIHRvZ2V0aGVyICovCisJZWNjID0gbS0+c3RhdHVzICYgKDNVTEwgPDwgNDUpOworCWlmIChlY2MpCisJCXByX2NvbnQoIiwgJXNFQ0MgRXJyb3IiLCAoKGVjYyA9PSAyKSA/ICJDIiA6ICJVIikpOworCisJcHJfY29udCgiXG4iKTsKKworCXN3aXRjaCAobS0+YmFuaykgeworCWNhc2UgMDoKKwkJYW1kX2RlY29kZV9kY19tY2UobS0+c3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCWFtZF9kZWNvZGVfaWNfbWNlKG0tPnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlhbWRfZGVjb2RlX2J1X21jZShtLT5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgMzoKKwkJYW1kX2RlY29kZV9sc19tY2UobS0+c3RhdHVzKTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6CisJCXJlZ3MubmJzbCAgPSAodTMyKSBtLT5zdGF0dXM7CisJCXJlZ3MubmJzaCAgPSAodTMyKShtLT5zdGF0dXMgPj4gMzIpOworCQlyZWdzLm5iZWFsID0gKHUzMikgbS0+YWRkcjsKKwkJcmVncy5uYmVhaCA9ICh1MzIpKG0tPmFkZHIgPj4gMzIpOworCQlub2RlICAgICAgID0gcGVyX2NwdShjcHVfbGxjX2lkLCBtLT5leHRjcHUpOworCisJCWFtZF9kZWNvZGVfbmJfbWNlKG5vZGUsICZyZWdzLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIDU6CisJCWFtZF9kZWNvZGVfZnJfbWNlKG0tPnN0YXR1cyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYW1kX2RlY29kZV9lcnJfY29kZShtLT5zdGF0dXMgJiAweGZmZmYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5oIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjNlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmgKQEAgLTAsMCArMSw2OSBAQAorI2lmbmRlZiBfRURBQ19NQ0VfQU1EX0gKKyNkZWZpbmUgX0VEQUNfTUNFX0FNRF9ICisKKyNpbmNsdWRlIDxhc20vbWNlLmg+CisKKyNkZWZpbmUgRVJST1JfQ09ERSh4KQkJCSgoeCkgJiAweGZmZmYpCisjZGVmaW5lIEVYVF9FUlJPUl9DT0RFKHgpCQkoKCh4KSA+PiAxNikgJiAweDFmKQorI2RlZmluZSBFWFRfRVJSX01TRyh4KQkJCWV4dF9tc2dzW0VYVF9FUlJPUl9DT0RFKHgpXQorCisjZGVmaW5lIExPV19TWU5EUk9NRSh4KQkJCSgoKHgpID4+IDE1KSAmIDB4ZmYpCisjZGVmaW5lIEhJR0hfU1lORFJPTUUoeCkJCSgoKHgpID4+IDI0KSAmIDB4ZmYpCisKKyNkZWZpbmUgVExCX0VSUk9SKHgpCQkJKCgoeCkgJiAweEZGRjApID09IDB4MDAxMCkKKyNkZWZpbmUgTUVNX0VSUk9SKHgpCQkJKCgoeCkgJiAweEZGMDApID09IDB4MDEwMCkKKyNkZWZpbmUgQlVTX0VSUk9SKHgpCQkJKCgoeCkgJiAweEY4MDApID09IDB4MDgwMCkKKworI2RlZmluZSBUVCh4KQkJCQkoKCh4KSA+PiAyKSAmIDB4MykKKyNkZWZpbmUgVFRfTVNHKHgpCQkJdHRfbXNnc1tUVCh4KV0KKyNkZWZpbmUgSUkoeCkJCQkJKCgoeCkgPj4gMikgJiAweDMpCisjZGVmaW5lIElJX01TRyh4KQkJCWlpX21zZ3NbSUkoeCldCisjZGVmaW5lIExMKHgpCQkJCSgoKHgpID4+IDApICYgMHgzKQorI2RlZmluZSBMTF9NU0coeCkJCQlsbF9tc2dzW0xMKHgpXQorI2RlZmluZSBSUlJSKHgpCQkJCSgoKHgpID4+IDQpICYgMHhmKQorI2RlZmluZSBSUlJSX01TRyh4KQkJCXJycnJfbXNnc1tSUlJSKHgpXQorI2RlZmluZSBUTyh4KQkJCQkoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgVE9fTVNHKHgpCQkJdG9fbXNnc1tUTyh4KV0KKyNkZWZpbmUgUFAoeCkJCQkJKCgoeCkgPj4gOSkgJiAweDMpCisjZGVmaW5lIFBQX01TRyh4KQkJCXBwX21zZ3NbUFAoeCldCisKKyNkZWZpbmUgSzhfTkJTSAkJCQkweDRDCisKKyNkZWZpbmUgSzhfTkJTSF9WQUxJRF9CSVQJCUJJVCgzMSkKKyNkZWZpbmUgSzhfTkJTSF9PVkVSRkxPVwkJQklUKDMwKQorI2RlZmluZSBLOF9OQlNIX1VDX0VSUgkJCUJJVCgyOSkKKyNkZWZpbmUgSzhfTkJTSF9FUlJfRU4JCQlCSVQoMjgpCisjZGVmaW5lIEs4X05CU0hfTUlTQ1YJCQlCSVQoMjcpCisjZGVmaW5lIEs4X05CU0hfVkFMSURfRVJST1JfQUREUglCSVQoMjYpCisjZGVmaW5lIEs4X05CU0hfUENDCQkJQklUKDI1KQorI2RlZmluZSBLOF9OQlNIX0VSUl9DUFVfVkFMCQlCSVQoMjQpCisjZGVmaW5lIEs4X05CU0hfQ0VDQwkJCUJJVCgxNCkKKyNkZWZpbmUgSzhfTkJTSF9VRUNDCQkJQklUKDEzKQorI2RlZmluZSBLOF9OQlNIX0VSUl9TQ1JVQkVSCQlCSVQoOCkKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnR0X21zZ3NbXTsKK2V4dGVybiBjb25zdCBjaGFyICpsbF9tc2dzW107CitleHRlcm4gY29uc3QgY2hhciAqcnJycl9tc2dzW107CitleHRlcm4gY29uc3QgY2hhciAqcHBfbXNnc1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRvX21zZ3NbXTsKK2V4dGVybiBjb25zdCBjaGFyICppaV9tc2dzW107CitleHRlcm4gY29uc3QgY2hhciAqZXh0X21zZ3NbXTsKKworLyoKKyAqIHJlbGV2YW50IE5CIHJlZ3MKKyAqLworc3RydWN0IGVycl9yZWdzIHsKKwl1MzIgbmJjZmc7CisJdTMyIG5ic2g7CisJdTMyIG5ic2w7CisJdTMyIG5iZWFoOworCXUzMiBuYmVhbDsKK307CisKKwordm9pZCBhbWRfcmVwb3J0X2dhcnRfZXJyb3JzKGJvb2wpOwordm9pZCBhbWRfcmVnaXN0ZXJfZWNjX2RlY29kZXIodm9pZCAoKmYpKGludCwgc3RydWN0IGVycl9yZWdzICopKTsKK3ZvaWQgYW1kX3VucmVnaXN0ZXJfZWNjX2RlY29kZXIodm9pZCAoKmYpKGludCwgc3RydWN0IGVycl9yZWdzICopKTsKK3ZvaWQgYW1kX2RlY29kZV9uYl9tY2UoaW50LCBzdHJ1Y3QgZXJyX3JlZ3MgKiwgaW50KTsKKworI2VuZGlmIC8qIF9FREFDX01DRV9BTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9uZXQuYyBiL2RyaXZlcnMvZmlyZXdpcmUvbmV0LmMKaW5kZXggYTQyMjA5YS4uY2JhZjQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9uZXQuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL25ldC5jCkBAIC02NjMsOCArNjYzLDYgQEAKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXQpKQogCQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7CiAKLQluZXQtPmxhc3RfcnggPSBqaWZmaWVzOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExODgsNyArMTE4Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnduZXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3N0YXRpYyBuZXRkZXZfdHhfdCBmd25ldF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBmd25ldF9oZWFkZXIgaGRyX2J1ZjsKIAlzdHJ1Y3QgZnduZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwpAQCAtMTM0Miw3ICsxMzQwLDcgQEAKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sICJpZWVlMTM5NCIpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGZ3bmV0X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBmd25ldF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBmd25ldF9nZXRfZHJ2aW5mbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL0tjb25maWcgYi9kcml2ZXJzL2hpZC9LY29uZmlnCmluZGV4IDc4MzFhMDMuLjExMWFmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL0tjb25maWcKKysrIGIvZHJpdmVycy9oaWQvS2NvbmZpZwpAQCAtMzEsMjEgKzMxLDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAotY29uZmlnIEhJRF9ERUJVRwotCWJvb2wgIkhJRCBkZWJ1Z2dpbmcgc3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIEhJRAotCS0tLWhlbHAtLS0KLQlUaGlzIG9wdGlvbiBsZXRzIHRoZSBISUQgbGF5ZXIgb3V0cHV0IGRpYWdub3N0aWNzIGFib3V0IGl0cyBpbnRlcm5hbAotCXN0YXRlLCByZXNvbHZlIEhJRCB1c2FnZXMsIGR1bXAgSElEIGZpZWxkcywgZXRjLiBJbmRpdmlkdWFsIEhJRCBkcml2ZXJzCi0JdXNlIHRoaXMgZGVidWdnaW5nIGZhY2lsaXR5IHRvIG91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCBpbmRpdmlkdWFsIEhJRAotCWRldmljZXMsIGV0Yy4KLQotCVRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIHRob3NlIHdobyBhcmUgZWl0aGVyIGRlYnVnZ2luZyB0aGUgSElEIHBhcnNlcgotCW9yIGFueSBISUQgaGFyZHdhcmUgZGV2aWNlLgotCi0JSWYgdW5zdXJlLCBzYXkgWS4KLQogY29uZmlnIEhJRFJBVwogCWJvb2wgIi9kZXYvaGlkcmF3IHJhdyBISUQgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBISUQKQEAgLTE1Miw2ICsxMzcsMTMgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgR3lyYXRpb24gcmVtb3RlIGNvbnRyb2wuCiAKK2NvbmZpZyBISURfVFdJTkhBTgorCXRyaXN0YXRlICJUd2luaGFuIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgIUVNQkVEREVECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIFR3aW5oYW4gSVIgcmVtb3RlIGNvbnRyb2wuCisKIGNvbmZpZyBISURfS0VOU0lOR1RPTgogCXRyaXN0YXRlICJLZW5zaW5ndG9uIiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTc2LDYgKzE2OCw3IEBACiAJICAtIExvZ2l0ZWNoIFdpbmdNYW4gQ29yZGxlc3MgUnVtYmxlUGFkIDIKIAkgIC0gTG9naXRlY2ggV2luZ01hbiBGb3JjZSAzRAogCSAgLSBMb2dpdGVjaCBGb3JtdWxhIEZvcmNlIEVYCisJICAtIExvZ2l0ZWNoIFdpbmdNYW4gRm9ybXVsYSBGb3JjZSBHUAogCSAgLSBMb2dpdGVjaCBNT01PIEZvcmNlIHdoZWVsCiAKIAkgIGFuZCBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgZm9yIHRoZW0uCkBAIC0zMTQsOSArMzA3LDkgQEAKIAlkZXBlbmRzIG9uIEhJRF9USFJVU1RNQVNURVIKIAlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUwogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUSFJVU1RNQVNURVIgRmlyZVN0b3JlIER1YWwgUG93ZXIgMiBvcgotCSAgYSBUSFJVU1RNQVNURVIgRmVycmFyaSBHVCBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwgYW5kCi0JICB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBpdC4KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBUSFJVU1RNQVNURVIgRmlyZVN0b3JlIER1YWwgUG93ZXIgMiBvciAzLAorCSAgYSBUSFJVU1RNQVNURVIgRHVhbCBUcmlnZ2VyIDMtaW4tMSBvciBhIFRIUlVTVE1BU1RFUiBGZXJyYXJpIEdUCisJICBSdW1ibGUgRm9yY2Ugb3IgRm9yY2UgRmVlZGJhY2sgV2hlZWwuCiAKIGNvbmZpZyBISURfV0FDT00KIAl0cmlzdGF0ZSAiV2Fjb20gQmx1ZXRvb3RoIGRldmljZXMgc3VwcG9ydCIgaWYgRU1CRURERUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL01ha2VmaWxlIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKaW5kZXggZGIzNTE1MS4uMGRlMmRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oaWQvTWFrZWZpbGUKQEAgLTMsOSArMywxMiBAQAogIwogaGlkLW9ianMJCQk6PSBoaWQtY29yZS5vIGhpZC1pbnB1dC5vCiAKK2lmZGVmIENPTkZJR19ERUJVR19GUworCWhpZC1vYmpzCQkrPSBoaWQtZGVidWcubworZW5kaWYKKwogb2JqLSQoQ09ORklHX0hJRCkJCSs9IGhpZC5vCiAKLWhpZC0kKENPTkZJR19ISURfREVCVUcpCQkrPSBoaWQtZGVidWcubwogaGlkLSQoQ09ORklHX0hJRFJBVykJCSs9IGhpZHJhdy5vCiAKIGhpZC1sb2dpdGVjaC1vYmpzCQk6PSBoaWQtbGcubwpAQCAtNDAsNiArNDMsNyBAQAogb2JqLSQoQ09ORklHX0hJRF9HUkVFTkFTSUEpCSs9IGhpZC1nYWZmLm8KIG9iai0kKENPTkZJR19ISURfVEhSVVNUTUFTVEVSKQkrPSBoaWQtdG1mZi5vCiBvYmotJChDT05GSUdfSElEX1RPUFNFRUQpCSs9IGhpZC10b3BzZWVkLm8KK29iai0kKENPTkZJR19ISURfVFdJTkhBTikJKz0gaGlkLXR3aW5oYW4ubwogb2JqLSQoQ09ORklHX0hJRF9aRVJPUExVUykJKz0gaGlkLXpwZmYubwogb2JqLSQoQ09ORklHX0hJRF9XQUNPTSkJCSs9IGhpZC13YWNvbS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwppbmRleCA0MmVhMzU5Li5kZjQ3NGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYTR0ZWNoLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC0xNDUsMTIgKzE0NSwxMiBAQAogCS5yZW1vdmUgPSBhNF9yZW1vdmUsCiB9OwogCi1zdGF0aWMgaW50IGE0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGE0X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYTRfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgYTRfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGE0X2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmE0X2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYXBwbGUuYyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCmluZGV4IDMwM2NjY2UuLjRiOTZlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAkuaW5wdXRfbWFwcGVkID0gYXBwbGVfaW5wdXRfbWFwcGVkLAogfTsKIAotc3RhdGljIGludCBhcHBsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBhcHBsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYXBwbGVfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGFwcGxlX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmFwcGxlX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMgYi9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMKaW5kZXggMmY2NzIzMS4uNGNlN2FhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwpAQCAtODgsMTIgKzg4LDEyIEBACiAJLnByb2JlID0gYmVsa2luX3Byb2JlLAogfTsKIAotc3RhdGljIGludCBiZWxraW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYmVsa2luX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmYmVsa2luX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGJlbGtpbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYmVsa2luX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJlbGtpbl9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCmluZGV4IGFiODIwOWUuLjdlNTk3ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY2hlcnJ5LmMKQEAgLTcwLDEyICs3MCwxMiBAQAogCS5pbnB1dF9tYXBwaW5nID0gY2hfaW5wdXRfbWFwcGluZywKIH07CiAKLXN0YXRpYyBpbnQgY2hfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgY2hfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZjaF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBjaF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2hfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmY2hfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtY2hpY29ueS5jCmluZGV4IDdmOTEwNzYuLjg5NjVhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNoaWNvbnkuYwpAQCAtNjMsMTIgKzYzLDEyIEBACiAJLmlucHV0X21hcHBpbmcgPSBjaF9pbnB1dF9tYXBwaW5nLAogfTsKIAotc3RhdGljIGludCBjaF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjaF9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmNoX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGNoX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjaF9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZjaF9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggNWViMTBjMi4uMzQyYjdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC00NCwxMiArNDQsMTAgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkhJRCBjb3JlIGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKIAotI2lmZGVmIENPTkZJR19ISURfREVCVUcKIGludCBoaWRfZGVidWcgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBoaWRfZGVidWcsIGludCwgMDYwMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiSElEIGRlYnVnZ2luZyAoMD1vZmYsIDE9cHJvYmluZyBpbmZvLCAyPWNvbnRpbnVvdXMgZGF0YSBkdW1waW5nKSIpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInRvZ2dsZSBISUQgZGVidWdnaW5nIG1lc3NhZ2VzIik7CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfZGVidWcpOwotI2VuZGlmCiAKIC8qCiAgKiBSZWdpc3RlciBhIG5ldyByZXBvcnQgZm9yIGEgZGV2aWNlLgpAQCAtODYxLDcgKzg1OSw3IEBACiAJc3RydWN0IGhpZF9kcml2ZXIgKmhkcnYgPSBoaWQtPmRyaXZlcjsKIAlpbnQgcmV0OwogCi0JaGlkX2R1bXBfaW5wdXQodXNhZ2UsIHZhbHVlKTsKKwloaWRfZHVtcF9pbnB1dChoaWQsIHVzYWdlLCB2YWx1ZSk7CiAKIAlpZiAoaGRydiAmJiBoZHJ2LT5ldmVudCAmJiBoaWRfbWF0Y2hfdXNhZ2UoaGlkLCB1c2FnZSkpIHsKIAkJcmV0ID0gaGRydi0+ZXZlbnQoaGlkLCBmaWVsZCwgdXNhZ2UsIHZhbHVlKTsKQEAgLTk4MywxMSArOTgxLDEwIEBACiB7CiAJdW5zaWduZWQgc2l6ZSA9IGZpZWxkLT5yZXBvcnRfc2l6ZTsKIAotCWhpZF9kdW1wX2lucHV0KGZpZWxkLT51c2FnZSArIG9mZnNldCwgdmFsdWUpOworCWhpZF9kdW1wX2lucHV0KGZpZWxkLT5yZXBvcnQtPmRldmljZSwgZmllbGQtPnVzYWdlICsgb2Zmc2V0LCB2YWx1ZSk7CiAKIAlpZiAob2Zmc2V0ID49IGZpZWxkLT5yZXBvcnRfY291bnQpIHsKIAkJZGJnX2hpZCgib2Zmc2V0ICglZCkgZXhjZWVkcyByZXBvcnRfY291bnQgKCVkKVxuIiwgb2Zmc2V0LCBmaWVsZC0+cmVwb3J0X2NvdW50KTsKLQkJaGlkX2R1bXBfZmllbGQoZmllbGQsIDgpOwogCQlyZXR1cm4gLTE7CiAJfQogCWlmIChmaWVsZC0+bG9naWNhbF9taW5pbXVtIDwgMCkgewpAQCAtMTA3OCw2ICsxMDc1LDcgQEAKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKIAlzdHJ1Y3QgaGlkX2RyaXZlciAqaGRydjsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCWNoYXIgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmV0OwogCkBAIC0xMDkxLDE4ICsxMDg5LDM4IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlkYmdfaGlkKCJyZXBvcnQgKHNpemUgJXUpICglc251bWJlcmVkKVxuIiwgc2l6ZSwgcmVwb3J0X2VudW0tPm51bWJlcmVkID8gIiIgOiAidW4iKTsKKwlidWYgPSBrbWFsbG9jKHNpemVvZihjaGFyKSAqIEhJRF9ERUJVR19CVUZTSVpFLAorCQkJaW50ZXJydXB0ID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCisJaWYgKCFidWYpIHsKKwkJcmVwb3J0ID0gaGlkX2dldF9yZXBvcnQocmVwb3J0X2VudW0sIGRhdGEpOworCQlnb3RvIG5vbWVtOworCX0KKworCXNucHJpbnRmKGJ1ZiwgSElEX0RFQlVHX0JVRlNJWkUgLSAxLAorCQkJIlxucmVwb3J0IChzaXplICV1KSAoJXNudW1iZXJlZClcbiIsIHNpemUsIHJlcG9ydF9lbnVtLT5udW1iZXJlZCA/ICIiIDogInVuIik7CisJaGlkX2RlYnVnX2V2ZW50KGhpZCwgYnVmKTsKIAogCXJlcG9ydCA9IGhpZF9nZXRfcmVwb3J0KHJlcG9ydF9lbnVtLCBkYXRhKTsKLQlpZiAoIXJlcG9ydCkKKwlpZiAoIXJlcG9ydCkgeworCQlrZnJlZShidWYpOwogCQlyZXR1cm4gLTE7CisJfQogCiAJLyogZHVtcCB0aGUgcmVwb3J0ICovCi0JZGJnX2hpZCgicmVwb3J0ICVkIChzaXplICV1KSA9ICIsIHJlcG9ydC0+aWQsIHNpemUpOwotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCWRiZ19oaWRfbGluZSgiICUwMngiLCBkYXRhW2ldKTsKLQlkYmdfaGlkX2xpbmUoIlxuIik7CisJc25wcmludGYoYnVmLCBISURfREVCVUdfQlVGU0laRSAtIDEsCisJCQkicmVwb3J0ICVkIChzaXplICV1KSA9ICIsIHJlcG9ydC0+aWQsIHNpemUpOworCWhpZF9kZWJ1Z19ldmVudChoaWQsIGJ1Zik7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlzbnByaW50ZihidWYsIEhJRF9ERUJVR19CVUZTSVpFIC0gMSwKKwkJCQkiICUwMngiLCBkYXRhW2ldKTsKKwkJaGlkX2RlYnVnX2V2ZW50KGhpZCwgYnVmKTsKKwl9CisJaGlkX2RlYnVnX2V2ZW50KGhpZCwgIlxuIik7CiAKKwlrZnJlZShidWYpOworCitub21lbToKIAlpZiAoaGRydiAmJiBoZHJ2LT5yYXdfZXZlbnQgJiYgaGlkX21hdGNoX3JlcG9ydChoaWQsIHJlcG9ydCkpIHsKIAkJcmV0ID0gaGRydi0+cmF3X2V2ZW50KGhpZCwgcmVwb3J0LCBkYXRhLCBzaXplKTsKIAkJaWYgKHJldCAhPSAwKQpAQCAtMTI5Miw2ICsxMzEwLDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUlVNQkxFUEFEKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyXzIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX1dJTkdNQU5fRjNEKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRyApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xPR0lURUNILCBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0ZPUkNFM0RfUFJPKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMMikgfSwKQEAgLTEzMTEsMTUgKzEzMzAsMTcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfU1VOUExVUywgVVNCX0RFVklDRV9JRF9TVU5QTFVTX1dERVNLVE9QKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMwMCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzIzKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMyNCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGI2NTEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiNjU0KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UT1BTRUVELCBVU0JfREVWSUNFX0lEX1RPUFNFRURfQ1lCRVJMSU5LKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UV0lOSEFOLCBVU0JfREVWSUNFX0lEX1RXSU5IQU5fSVJfUkVNT1RFKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfU01BUlRKT1lfUExVUykgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkVfQkxVRVRPT1RIKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDA1KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9aRVJPUExVUywgMHgwMDMwKSB9LAogCi0JeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCAweDAzMGMpIH0sCiAJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19QUkVTRU5URVJfOEtfQlQpIH0sCiAJeyB9CiB9OwpAQCAtMTYyMiwxMiArMTY0Myw4IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BBTkpJVCwgMHgwMDAyKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9QQU5KSVQsIDB4MDAwMykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUEFOSklULCAweDAwMDQpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1BISUxJUFMsIFVTQl9ERVZJQ0VfSURfUEhJTElQU19JRUVFODAyMTU0X0RPTkdMRSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUE9XRVJDT00sIFVTQl9ERVZJQ0VfSURfUE9XRVJDT01fVVBTKSB9LAotCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9TT1VOREdSQVBILCBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDIpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDMpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDQpIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEgsIFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xDRDUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RFTlgsIFVTQl9ERVZJQ0VfSURfVEVOWF9JQlVERFkxKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9URU5YLCBVU0JfREVWSUNFX0lEX1RFTlhfSUJVRERZMikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0xBQlBSTykgfSwKQEAgLTE2OTQsNiArMTcxMSwxMSBAQAogCQkJCWhkZXYtPnByb2R1Y3QgPD0gVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9IQVJNT05ZX0xBU1QpCiAJCQlyZXR1cm4gdHJ1ZTsKIAkJYnJlYWs7CisJY2FzZSBVU0JfVkVORE9SX0lEX1NPVU5ER1JBUEg6CisJCWlmIChoZGV2LT5wcm9kdWN0ID49IFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0ZJUlNUICYmCisJCSAgICBoZGV2LT5wcm9kdWN0IDw9IFVTQl9ERVZJQ0VfSURfU09VTkRHUkFQSF9JTU9OX0xBU1QpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKGhkZXYtPnR5cGUgPT0gSElEX1RZUEVfVVNCTU9VU0UgJiYKQEAgLTE3MjUsNiArMTc0Nyw4IEBACiAJaWYgKCFyZXQpCiAJCWhkZXYtPnN0YXR1cyB8PSBISURfU1RBVF9BRERFRDsKIAorCWhpZF9kZWJ1Z19yZWdpc3RlcihoZGV2LCBkZXZfbmFtZSgmaGRldi0+ZGV2KSk7CisKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2FkZF9kZXZpY2UpOwpAQCAtMTc2MSw2ICsxNzg1LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKQogCQlJTklUX0xJU1RfSEVBRCgmaGRldi0+cmVwb3J0X2VudW1baV0ucmVwb3J0X2xpc3QpOwogCisJaW5pdF93YWl0cXVldWVfaGVhZCgmaGRldi0+ZGVidWdfd2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJmhkZXYtPmRlYnVnX2xpc3QpOworCiAJcmV0dXJuIGhkZXY7CiBlcnI6CiAJcHV0X2RldmljZSgmaGRldi0+ZGV2KTsKQEAgLTE3NzIsNiArMTc5OSw3IEBACiB7CiAJaWYgKGhkZXYtPnN0YXR1cyAmIEhJRF9TVEFUX0FEREVEKSB7CiAJCWRldmljZV9kZWwoJmhkZXYtPmRldik7CisJCWhpZF9kZWJ1Z191bnJlZ2lzdGVyKGhkZXYpOwogCQloZGV2LT5zdGF0dXMgJj0gfkhJRF9TVEFUX0FEREVEOwogCX0KIH0KQEAgLTE4NDcsNiArMTg3NSwxMCBAQAogewogCWludCByZXQ7CiAKKwlpZiAoaGlkX2RlYnVnKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJISUQ6IGhpZF9kZWJ1ZyBpcyBub3cgdXNlZCBzb2xlbHkgZm9yIHBhcnNlciBhbmQgZHJpdmVyIGRlYnVnZ2luZy5cbiIKKwkJCQkiSElEOiBkZWJ1Z2ZzIGlzIG5vdyB1c2VkIGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2UgKHJlcG9ydCBkZXNjcmlwdG9yLCByZXBvcnRzKVxuIik7CisKIAlyZXQgPSBidXNfcmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgIkhJRDogY2FuJ3QgcmVnaXN0ZXIgaGlkIGJ1c1xuIik7CkBAIC0xODU3LDYgKzE4ODksOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2J1czsKIAorCWhpZF9kZWJ1Z19pbml0KCk7CisKIAlyZXR1cm4gMDsKIGVycl9idXM6CiAJYnVzX3VucmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CkBAIC0xODY2LDYgKzE5MDAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGlkX2V4aXQodm9pZCkKIHsKKwloaWRfZGVidWdfZXhpdCgpOwogCWhpZHJhd19leGl0KCk7CiAJYnVzX3VucmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jIGIvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYwppbmRleCA5ZDZkM2I5Li42MmU5Y2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKQEAgLTE0MSwxMiArMTQxLDEyIEBACiAJLnByb2JlID0gY3BfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IGNwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGNwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmY3BfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgY3BfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGNwX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmNwX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZGVidWcuYyBiL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCmluZGV4IDA0MzU5ZWQuLjZhYmQwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1kZWJ1Zy5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqICAoYykgMTk5OSBBbmRyZWFzIEdhbAkJPGdhbEBjcy51bmktbWFnZGVidXJnLmRlPgogICogIChjKSAyMDAwLTIwMDEgVm9qdGVjaCBQYXZsaWsJPHZvanRlY2hAdWN3LmN6PgotICogIChjKSAyMDA3IEppcmkgS29zaW5hCisgKiAgKGMpIDIwMDctMjAwOSBKaXJpIEtvc2luYQogICoKLSAqICBTb21lIGRlYnVnIHN0dWZmIGZvciB0aGUgSElEIHBhcnNlci4KKyAqICBISUQgZGVidWdnaW5nIHN1cHBvcnQKICAqLwogCiAvKgpAQCAtMjYsOSArMjYsMTcgQEAKICAqIFZvanRlY2ggUGF2bGlrLCBTaW11bmtvdmEgMTU5NCwgUHJhZ3VlIDgsIDE4MiAwMCBDemVjaCBSZXB1YmxpYwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQtZGVidWcuaD4KIAorc3RhdGljIHN0cnVjdCBkZW50cnkgKmhpZF9kZWJ1Z19yb290OworCiBzdHJ1Y3QgaGlkX3VzYWdlX2VudHJ5IHsKIAl1bnNpZ25lZCAgcGFnZTsKIAl1bnNpZ25lZCAgdXNhZ2U7CkBAIC0zMzksNzIgKzM0NywxMjAgQEAKICAgeyAwLCAwLCBOVUxMIH0KIH07CiAKLXN0YXRpYyB2b2lkIHJlc29sdl91c2FnZV9wYWdlKHVuc2lnbmVkIHBhZ2UpIHsKKy8qIEVpdGhlciBvdXRwdXQgZGlyZWN0bHkgaW50byBzaW1wbGUgc2VxX2ZpbGUsIG9yIChpZiBmID09IE5VTEwpCisgKiBhbGxvY2F0ZSBhIHNlcGFyYXRlIGJ1ZmZlciB0aGF0IHdpbGwgdGhlbiBiZSBwYXNzZWQgdG8gdGhlICdldmVudHMnCisgKiByaW5nYnVmZmVyLgorICoKKyAqIFRoaXMgaXMgYmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBib3RoIGZvciAib25lLXNob3QiCisgKiAicmRlc2MiIHdoaWxlIHJlc29sdmluZywgb3IgZm9yIGJsb2NraW5nICJldmVudHMiLgorICoKKyAqIFRoaXMgaG9sZHMgYm90aCBmb3IgcmVzb2x2X3VzYWdlX3BhZ2UoKSBhbmQgaGlkX3Jlc29sdl91c2FnZSgpLgorICovCitzdGF0aWMgY2hhciAqcmVzb2x2X3VzYWdlX3BhZ2UodW5zaWduZWQgcGFnZSwgc3RydWN0IHNlcV9maWxlICpmKSB7CiAJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9lbnRyeSAqcDsKKwljaGFyICpidWYgPSBOVUxMOworCisJaWYgKCFmKSB7CisJCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKGNoYXIpICogSElEX0RFQlVHX0JVRlNJWkUsIEdGUF9BVE9NSUMpOworCQlpZiAoIWJ1ZikKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KIAogCWZvciAocCA9IGhpZF91c2FnZV90YWJsZTsgcC0+ZGVzY3JpcHRpb247IHArKykKIAkJaWYgKHAtPnBhZ2UgPT0gcGFnZSkgewotCQkJcHJpbnRrKCIlcyIsIHAtPmRlc2NyaXB0aW9uKTsKLQkJCXJldHVybjsKKwkJCWlmICghZikgeworCQkJCXNucHJpbnRmKGJ1ZiwgSElEX0RFQlVHX0JVRlNJWkUsICIlcyIsCisJCQkJCQlwLT5kZXNjcmlwdGlvbik7CisJCQkJcmV0dXJuIGJ1ZjsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXNlcV9wcmludGYoZiwgIiVzIiwgcC0+ZGVzY3JpcHRpb24pOworCQkJCXJldHVybiBOVUxMOworCQkJfQogCQl9Ci0JcHJpbnRrKCIlMDR4IiwgcGFnZSk7CisJaWYgKCFmKQorCQlzbnByaW50ZihidWYsIEhJRF9ERUJVR19CVUZTSVpFLCAiJTA0eCIsIHBhZ2UpOworCWVsc2UKKwkJc2VxX3ByaW50ZihmLCAiJTA0eCIsIHBhZ2UpOworCXJldHVybiBidWY7CiB9CiAKLXZvaWQgaGlkX3Jlc29sdl91c2FnZSh1bnNpZ25lZCB1c2FnZSkgeworY2hhciAqaGlkX3Jlc29sdl91c2FnZSh1bnNpZ25lZCB1c2FnZSwgc3RydWN0IHNlcV9maWxlICpmKSB7CiAJY29uc3Qgc3RydWN0IGhpZF91c2FnZV9lbnRyeSAqcDsKKwljaGFyICpidWYgPSBOVUxMOworCWludCBsZW4gPSAwOwogCi0JaWYgKCFoaWRfZGVidWcpCi0JCXJldHVybjsKKwlidWYgPSByZXNvbHZfdXNhZ2VfcGFnZSh1c2FnZSA+PiAxNiwgZik7CisJaWYgKElTX0VSUihidWYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgYWxsb2NhdGluZyBISUQgZGVidWcgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JcmVzb2x2X3VzYWdlX3BhZ2UodXNhZ2UgPj4gMTYpOwotCXByaW50aygiLiIpOworCisJaWYgKCFmKSB7CisJCWxlbiA9IHN0cmxlbihidWYpOworCQlzbnByaW50ZihidWYrbGVuLCBtYXgoMCwgSElEX0RFQlVHX0JVRlNJWkUgLSBsZW4pLCAiLiIpOworCQlsZW4rKzsKKwl9CisJZWxzZSB7CisJCXNlcV9wcmludGYoZiwgIi4iKTsKKwl9CiAJZm9yIChwID0gaGlkX3VzYWdlX3RhYmxlOyBwLT5kZXNjcmlwdGlvbjsgcCsrKQogCQlpZiAocC0+cGFnZSA9PSAodXNhZ2UgPj4gMTYpKSB7CiAJCQlmb3IoKytwOyBwLT5kZXNjcmlwdGlvbiAmJiBwLT51c2FnZSAhPSAwOyBwKyspCiAJCQkJaWYgKHAtPnVzYWdlID09ICh1c2FnZSAmIDB4ZmZmZikpIHsKLQkJCQkJcHJpbnRrKCIlcyIsIHAtPmRlc2NyaXB0aW9uKTsKLQkJCQkJcmV0dXJuOworCQkJCQlpZiAoIWYpCisJCQkJCQlzbnByaW50ZihidWYgKyBsZW4sCisJCQkJCQkJbWF4KDAsSElEX0RFQlVHX0JVRlNJWkUgLSBsZW4gLSAxKSwKKwkJCQkJCQkiJXMiLCBwLT5kZXNjcmlwdGlvbik7CisJCQkJCWVsc2UKKwkJCQkJCXNlcV9wcmludGYoZiwKKwkJCQkJCQkiJXMiLAorCQkJCQkJCXAtPmRlc2NyaXB0aW9uKTsKKwkJCQkJcmV0dXJuIGJ1ZjsKIAkJCQl9CiAJCQlicmVhazsKIAkJfQotCXByaW50aygiJTA0eCIsIHVzYWdlICYgMHhmZmZmKTsKKwlpZiAoIWYpCisJCXNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KDAsIEhJRF9ERUJVR19CVUZTSVpFIC0gbGVuIC0gMSksCisJCQkJIiUwNHgiLCB1c2FnZSAmIDB4ZmZmZik7CisJZWxzZQorCQlzZXFfcHJpbnRmKGYsICIlMDR4IiwgdXNhZ2UgJiAweGZmZmYpOworCXJldHVybiBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChoaWRfcmVzb2x2X3VzYWdlKTsKIAotc3RhdGljIHZvaWQgdGFiKGludCBuKSB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiUqcyIsIG4sICIiKTsKK3N0YXRpYyB2b2lkIHRhYihpbnQgbiwgc3RydWN0IHNlcV9maWxlICpmKSB7CisJc2VxX3ByaW50ZihmLCAiJSpzIiwgbiwgIiIpOwogfQogCi12b2lkIGhpZF9kdW1wX2ZpZWxkKHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBpbnQgbikgewordm9pZCBoaWRfZHVtcF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgaW50IG4sIHN0cnVjdCBzZXFfZmlsZSAqZikgewogCWludCBqOwogCi0JaWYgKCFoaWRfZGVidWcpCi0JCXJldHVybjsKLQogCWlmIChmaWVsZC0+cGh5c2ljYWwpIHsKLQkJdGFiKG4pOwotCQlwcmludGsoIlBoeXNpY2FsKCIpOwotCQloaWRfcmVzb2x2X3VzYWdlKGZpZWxkLT5waHlzaWNhbCk7IHByaW50aygiKVxuIik7CisJCXRhYihuLCBmKTsKKwkJc2VxX3ByaW50ZihmLCAiUGh5c2ljYWwoIik7CisJCWhpZF9yZXNvbHZfdXNhZ2UoZmllbGQtPnBoeXNpY2FsLCBmKTsgc2VxX3ByaW50ZihmLCAiKVxuIik7CiAJfQogCWlmIChmaWVsZC0+bG9naWNhbCkgewotCQl0YWIobik7Ci0JCXByaW50aygiTG9naWNhbCgiKTsKLQkJaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+bG9naWNhbCk7IHByaW50aygiKVxuIik7CisJCXRhYihuLCBmKTsKKwkJc2VxX3ByaW50ZihmLCAiTG9naWNhbCgiKTsKKwkJaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+bG9naWNhbCwgZik7IHNlcV9wcmludGYoZiwgIilcbiIpOwogCX0KLQl0YWIobik7IHByaW50aygiVXNhZ2UoJWQpXG4iLCBmaWVsZC0+bWF4dXNhZ2UpOworCXRhYihuLCBmKTsgc2VxX3ByaW50ZihmLCAiVXNhZ2UoJWQpXG4iLCBmaWVsZC0+bWF4dXNhZ2UpOwogCWZvciAoaiA9IDA7IGogPCBmaWVsZC0+bWF4dXNhZ2U7IGorKykgewotCQl0YWIobisyKTsgaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+dXNhZ2Vbal0uaGlkKTsgcHJpbnRrKCJcbiIpOworCQl0YWIobisyLCBmKTsgaGlkX3Jlc29sdl91c2FnZShmaWVsZC0+dXNhZ2Vbal0uaGlkLCBmKTsgc2VxX3ByaW50ZihmLCAiXG4iKTsKIAl9CiAJaWYgKGZpZWxkLT5sb2dpY2FsX21pbmltdW0gIT0gZmllbGQtPmxvZ2ljYWxfbWF4aW11bSkgewotCQl0YWIobik7IHByaW50aygiTG9naWNhbCBNaW5pbXVtKCVkKVxuIiwgZmllbGQtPmxvZ2ljYWxfbWluaW11bSk7Ci0JCXRhYihuKTsgcHJpbnRrKCJMb2dpY2FsIE1heGltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJMb2dpY2FsIE1pbmltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9taW5pbXVtKTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJMb2dpY2FsIE1heGltdW0oJWQpXG4iLCBmaWVsZC0+bG9naWNhbF9tYXhpbXVtKTsKIAl9CiAJaWYgKGZpZWxkLT5waHlzaWNhbF9taW5pbXVtICE9IGZpZWxkLT5waHlzaWNhbF9tYXhpbXVtKSB7Ci0JCXRhYihuKTsgcHJpbnRrKCJQaHlzaWNhbCBNaW5pbXVtKCVkKVxuIiwgZmllbGQtPnBoeXNpY2FsX21pbmltdW0pOwotCQl0YWIobik7IHByaW50aygiUGh5c2ljYWwgTWF4aW11bSglZClcbiIsIGZpZWxkLT5waHlzaWNhbF9tYXhpbXVtKTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJQaHlzaWNhbCBNaW5pbXVtKCVkKVxuIiwgZmllbGQtPnBoeXNpY2FsX21pbmltdW0pOworCQl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlBoeXNpY2FsIE1heGltdW0oJWQpXG4iLCBmaWVsZC0+cGh5c2ljYWxfbWF4aW11bSk7CiAJfQogCWlmIChmaWVsZC0+dW5pdF9leHBvbmVudCkgewotCQl0YWIobik7IHByaW50aygiVW5pdCBFeHBvbmVudCglZClcbiIsIGZpZWxkLT51bml0X2V4cG9uZW50KTsKKwkJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJVbml0IEV4cG9uZW50KCVkKVxuIiwgZmllbGQtPnVuaXRfZXhwb25lbnQpOwogCX0KIAlpZiAoZmllbGQtPnVuaXQpIHsKIAkJc3RhdGljIGNvbnN0IGNoYXIgKnN5c3RlbXNbNV0gPSB7ICJOb25lIiwgIlNJIExpbmVhciIsICJTSSBSb3RhdGlvbiIsICJFbmdsaXNoIExpbmVhciIsICJFbmdsaXNoIFJvdGF0aW9uIiB9OwpAQCAtNDI1LDc3ICs0ODEsNzUgQEAKIAkJZGF0YSA+Pj0gNDsKIAogCQlpZihzeXMgPiA0KSB7Ci0JCQl0YWIobik7IHByaW50aygiVW5pdChJbnZhbGlkKVxuIik7CisJCQl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlVuaXQoSW52YWxpZClcbiIpOwogCQl9CiAJCWVsc2UgewogCQkJaW50IGVhcmxpZXJfdW5pdCA9IDA7CiAKLQkJCXRhYihuKTsgcHJpbnRrKCJVbml0KCVzIDogIiwgc3lzdGVtc1tzeXNdKTsKKwkJCXRhYihuLCBmKTsgc2VxX3ByaW50ZihmLCAiVW5pdCglcyA6ICIsIHN5c3RlbXNbc3lzXSk7CiAKIAkJCWZvciAoaT0xIDsgaTxzaXplb2YoX191MzIpKjIgOyBpKyspIHsKIAkJCQljaGFyIG5pYmJsZSA9IGRhdGEgJiAweGY7CiAJCQkJZGF0YSA+Pj0gNDsKIAkJCQlpZiAobmliYmxlICE9IDApIHsKIAkJCQkJaWYoZWFybGllcl91bml0KysgPiAwKQotCQkJCQkJcHJpbnRrKCIqIik7Ci0JCQkJCXByaW50aygiJXMiLCB1bml0c1tzeXNdW2ldKTsKKwkJCQkJCXNlcV9wcmludGYoZiwgIioiKTsKKwkJCQkJc2VxX3ByaW50ZihmLCAiJXMiLCB1bml0c1tzeXNdW2ldKTsKIAkJCQkJaWYobmliYmxlICE9IDEpIHsKIAkJCQkJCS8qIFRoaXMgaXMgYSBfc2lnbmVkXyBuaWJibGUoISkgKi8KIAogCQkJCQkJaW50IHZhbCA9IG5pYmJsZSAmIDB4NzsKIAkJCQkJCWlmKG5pYmJsZSAmIDB4MDgpCiAJCQkJCQkJdmFsID0gLSgoMHg3ICYgfnZhbCkgKzEpOwotCQkJCQkJcHJpbnRrKCJeJWQiLCB2YWwpOworCQkJCQkJc2VxX3ByaW50ZihmLCAiXiVkIiwgdmFsKTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KLQkJCXByaW50aygiKVxuIik7CisJCQlzZXFfcHJpbnRmKGYsICIpXG4iKTsKIAkJfQogCX0KLQl0YWIobik7IHByaW50aygiUmVwb3J0IFNpemUoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X3NpemUpOwotCXRhYihuKTsgcHJpbnRrKCJSZXBvcnQgQ291bnQoJXUpXG4iLCBmaWVsZC0+cmVwb3J0X2NvdW50KTsKLQl0YWIobik7IHByaW50aygiUmVwb3J0IE9mZnNldCgldSlcbiIsIGZpZWxkLT5yZXBvcnRfb2Zmc2V0KTsKKwl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlJlcG9ydCBTaXplKCV1KVxuIiwgZmllbGQtPnJlcG9ydF9zaXplKTsKKwl0YWIobiwgZik7IHNlcV9wcmludGYoZiwgIlJlcG9ydCBDb3VudCgldSlcbiIsIGZpZWxkLT5yZXBvcnRfY291bnQpOworCXRhYihuLCBmKTsgc2VxX3ByaW50ZihmLCAiUmVwb3J0IE9mZnNldCgldSlcbiIsIGZpZWxkLT5yZXBvcnRfb2Zmc2V0KTsKIAotCXRhYihuKTsgcHJpbnRrKCJGbGFncyggIik7CisJdGFiKG4sIGYpOyBzZXFfcHJpbnRmKGYsICJGbGFncyggIik7CiAJaiA9IGZpZWxkLT5mbGFnczsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9DT05TVEFOVCAmIGogPyAiQ29uc3RhbnQgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9WQVJJQUJMRSAmIGogPyAiVmFyaWFibGUgIiA6ICJBcnJheSAiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9SRUxBVElWRSAmIGogPyAiUmVsYXRpdmUgIiA6ICJBYnNvbHV0ZSAiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9XUkFQICYgaiA/ICJXcmFwICIgOiAiIik7Ci0JcHJpbnRrKCIlcyIsIEhJRF9NQUlOX0lURU1fTk9OTElORUFSICYgaiA/ICJOb25MaW5lYXIgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9OT19QUkVGRVJSRUQgJiBqID8gIk5vUHJlZmVycmVkU3RhdGUgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9OVUxMX1NUQVRFICYgaiA/ICJOdWxsU3RhdGUgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9WT0xBVElMRSAmIGogPyAiVm9sYXRpbGUgIiA6ICIiKTsKLQlwcmludGsoIiVzIiwgSElEX01BSU5fSVRFTV9CVUZGRVJFRF9CWVRFICYgaiA/ICJCdWZmZXJlZEJ5dGUgIiA6ICIiKTsKLQlwcmludGsoIilcbiIpOworCXNlcV9wcmludGYoZiwgIiVzIiwgSElEX01BSU5fSVRFTV9DT05TVEFOVCAmIGogPyAiQ29uc3RhbnQgIiA6ICIiKTsKKwlzZXFfcHJpbnRmKGYsICIlcyIsIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUgJiBqID8gIlZhcmlhYmxlICIgOiAiQXJyYXkgIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX1JFTEFUSVZFICYgaiA/ICJSZWxhdGl2ZSAiIDogIkFic29sdXRlICIpOworCXNlcV9wcmludGYoZiwgIiVzIiwgSElEX01BSU5fSVRFTV9XUkFQICYgaiA/ICJXcmFwICIgOiAiIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX05PTkxJTkVBUiAmIGogPyAiTm9uTGluZWFyICIgOiAiIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX05PX1BSRUZFUlJFRCAmIGogPyAiTm9QcmVmZXJyZWRTdGF0ZSAiIDogIiIpOworCXNlcV9wcmludGYoZiwgIiVzIiwgSElEX01BSU5fSVRFTV9OVUxMX1NUQVRFICYgaiA/ICJOdWxsU3RhdGUgIiA6ICIiKTsKKwlzZXFfcHJpbnRmKGYsICIlcyIsIEhJRF9NQUlOX0lURU1fVk9MQVRJTEUgJiBqID8gIlZvbGF0aWxlICIgOiAiIik7CisJc2VxX3ByaW50ZihmLCAiJXMiLCBISURfTUFJTl9JVEVNX0JVRkZFUkVEX0JZVEUgJiBqID8gIkJ1ZmZlcmVkQnl0ZSAiIDogIiIpOworCXNlcV9wcmludGYoZiwgIilcbiIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2R1bXBfZmllbGQpOwogCi12b2lkIGhpZF9kdW1wX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlKSB7Cit2b2lkIGhpZF9kdW1wX2RldmljZShzdHJ1Y3QgaGlkX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpCit7CiAJc3RydWN0IGhpZF9yZXBvcnRfZW51bSAqcmVwb3J0X2VudW07CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCXVuc2lnbmVkIGksazsKIAlzdGF0aWMgY29uc3QgY2hhciAqdGFibGVbXSA9IHsiSU5QVVQiLCAiT1VUUFVUIiwgIkZFQVRVUkUifTsKIAotCWlmICghaGlkX2RlYnVnKQotCQlyZXR1cm47Ci0KIAlmb3IgKGkgPSAwOyBpIDwgSElEX1JFUE9SVF9UWVBFUzsgaSsrKSB7CiAJCXJlcG9ydF9lbnVtID0gZGV2aWNlLT5yZXBvcnRfZW51bSArIGk7CiAJCWxpc3QgPSByZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QubmV4dDsKIAkJd2hpbGUgKGxpc3QgIT0gJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCkgewogCQkJcmVwb3J0ID0gKHN0cnVjdCBoaWRfcmVwb3J0ICopIGxpc3Q7Ci0JCQl0YWIoMik7Ci0JCQlwcmludGsoIiVzIiwgdGFibGVbaV0pOworCQkJdGFiKDIsIGYpOworCQkJc2VxX3ByaW50ZihmLCAiJXMiLCB0YWJsZVtpXSk7CiAJCQlpZiAocmVwb3J0LT5pZCkKLQkJCQlwcmludGsoIiglZCkiLCByZXBvcnQtPmlkKTsKLQkJCXByaW50aygiWyVzXSIsIHRhYmxlW3JlcG9ydC0+dHlwZV0pOwotCQkJcHJpbnRrKCJcbiIpOworCQkJCXNlcV9wcmludGYoZiwgIiglZCkiLCByZXBvcnQtPmlkKTsKKwkJCXNlcV9wcmludGYoZiwgIlslc10iLCB0YWJsZVtyZXBvcnQtPnR5cGVdKTsKKwkJCXNlcV9wcmludGYoZiwgIlxuIik7CiAJCQlmb3IgKGsgPSAwOyBrIDwgcmVwb3J0LT5tYXhmaWVsZDsgaysrKSB7Ci0JCQkJdGFiKDQpOwotCQkJCXByaW50aygiRmllbGQoJWQpXG4iLCBrKTsKLQkJCQloaWRfZHVtcF9maWVsZChyZXBvcnQtPmZpZWxkW2tdLCA2KTsKKwkJCQl0YWIoNCwgZik7CisJCQkJc2VxX3ByaW50ZihmLCAiRmllbGQoJWQpXG4iLCBrKTsKKwkJCQloaWRfZHVtcF9maWVsZChyZXBvcnQtPmZpZWxkW2tdLCA2LCBmKTsKIAkJCX0KIAkJCWxpc3QgPSBsaXN0LT5uZXh0OwogCQl9CkBAIC01MDMsMTMgKzU1NywzNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2R1bXBfZGV2aWNlKTsKIAotdm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpIHsKLQlpZiAoaGlkX2RlYnVnIDwgMikKLQkJcmV0dXJuOworLyogZW5xdWV1ZSBzdHJpbmcgdG8gJ2V2ZW50cycgcmluZyBidWZmZXIgKi8KK3ZvaWQgaGlkX2RlYnVnX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjaGFyICpidWYpCit7CisJaW50IGk7CisJc3RydWN0IGhpZF9kZWJ1Z19saXN0ICpsaXN0OwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImhpZC1kZWJ1ZzogaW5wdXQgIik7Ci0JaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkKTsKLQlwcmludGsoIiA9ICVkXG4iLCB2YWx1ZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsaXN0LCAmaGRldi0+ZGVidWdfbGlzdCwgbm9kZSkgeworCQlmb3IgKGkgPSAwOyBpIDw9IHN0cmxlbihidWYpOyBpKyspCisJCQlsaXN0LT5oaWRfZGVidWdfYnVmWyhsaXN0LT50YWlsICsgaSkgJSAoSElEX0RFQlVHX0JVRlNJWkUgLSAxKV0gPQorCQkJCWJ1ZltpXTsKKwkJbGlzdC0+dGFpbCA9IChsaXN0LT50YWlsICsgaSkgJSAoSElEX0RFQlVHX0JVRlNJWkUgLSAxKTsKKyAgICAgICAgfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2RlYnVnX2V2ZW50KTsKKwordm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuOworCisJYnVmID0gaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkLCBOVUxMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCWxlbiA9IHN0cmxlbihidWYpOworCXNucHJpbnRmKGJ1ZiArIGxlbiwgSElEX0RFQlVHX0JVRlNJWkUgLSBsZW4gLSAxLCAiID0gJWRcbiIsIHZhbHVlKTsKKworCWhpZF9kZWJ1Z19ldmVudChoZGV2LCBidWYpOworCisJa2ZyZWUoYnVmKTsKKyAgICAgICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoZGV2LT5kZWJ1Z193YWl0KTsKKwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX2R1bXBfaW5wdXQpOwogCkBAIC03ODYsMTIgKzg2NCwyMjEgQEAKIAlbRVZfU05EXSA9IHNvdW5kcywJCQlbRVZfUkVQXSA9IHJlcGVhdHMsCiB9OwogCi12b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlKSB7Cit2b2lkIGhpZF9yZXNvbHZfZXZlbnQoX191OCB0eXBlLCBfX3UxNiBjb2RlLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYpIHsKIAotCWlmICghaGlkX2RlYnVnKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIiVzLiVzIiwgZXZlbnRzW3R5cGVdID8gZXZlbnRzW3R5cGVdIDogIj8iLAorCXNlcV9wcmludGYoZiwgIiVzLiVzIiwgZXZlbnRzW3R5cGVdID8gZXZlbnRzW3R5cGVdIDogIj8iLAogCQluYW1lc1t0eXBlXSA/IChuYW1lc1t0eXBlXVtjb2RlXSA/IG5hbWVzW3R5cGVdW2NvZGVdIDogIj8iKSA6ICI/Iik7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChoaWRfcmVzb2x2X2V2ZW50KTsKKwordm9pZCBoaWRfZHVtcF9pbnB1dF9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBzZXFfZmlsZSAqZikKK3sKKwlpbnQgaSwgaiwgazsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlOworCisJZm9yIChrID0gSElEX0lOUFVUX1JFUE9SVDsgayA8PSBISURfT1VUUFVUX1JFUE9SVDsgaysrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwb3J0LCAmaGlkLT5yZXBvcnRfZW51bVtrXS5yZXBvcnRfbGlzdCwgbGlzdCkgeworCQkJZm9yIChpID0gMDsgaSA8IHJlcG9ydC0+bWF4ZmllbGQ7IGkrKykgeworCQkJCWZvciAoIGogPSAwOyBqIDwgcmVwb3J0LT5maWVsZFtpXS0+bWF4dXNhZ2U7IGorKykgeworCQkJCQl1c2FnZSA9IHJlcG9ydC0+ZmllbGRbaV0tPnVzYWdlICsgajsKKwkJCQkJaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkLCBmKTsKKwkJCQkJc2VxX3ByaW50ZihmLCAiIC0tLT4gIik7CisJCQkJCWhpZF9yZXNvbHZfZXZlbnQodXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlLCBmKTsKKwkJCQkJc2VxX3ByaW50ZihmLCAiXG4iKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKK30KKworCitzdGF0aWMgaW50IGhpZF9kZWJ1Z19yZGVzY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiA9IGYtPnByaXZhdGU7CisJaW50IGk7CisKKwkvKiBkdW1wIEhJRCByZXBvcnQgZGVzY3JpcHRvciAqLworCWZvciAoaSA9IDA7IGkgPCBoZGV2LT5yc2l6ZTsgaSsrKQorCQlzZXFfcHJpbnRmKGYsICIlMDJ4ICIsIGhkZXYtPnJkZXNjW2ldKTsKKwlzZXFfcHJpbnRmKGYsICJcblxuIik7CisKKwkvKiBkdW1wIHBhcnNlZCBkYXRhIGFuZCBpbnB1dCBtYXBwaW5ncyAqLworCWhpZF9kdW1wX2RldmljZShoZGV2LCBmKTsKKwlzZXFfcHJpbnRmKGYsICJcbiIpOworCWhpZF9kdW1wX2lucHV0X21hcHBpbmcoaGRldiwgZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfZGVidWdfcmRlc2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaGlkX2RlYnVnX3JkZXNjX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgaW50IGhpZF9kZWJ1Z19ldmVudHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaGlkX2RlYnVnX2xpc3QgKmxpc3Q7CisKKwlpZiAoIShsaXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhpZF9kZWJ1Z19saXN0KSwgR0ZQX0tFUk5FTCkpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmICghKGxpc3QtPmhpZF9kZWJ1Z19idWYgPSBremFsbG9jKHNpemVvZihjaGFyKSAqIEhJRF9ERUJVR19CVUZTSVpFLCBHRlBfS0VSTkVMKSkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJa2ZyZWUobGlzdCk7CisJCWdvdG8gb3V0OworCX0KKwlsaXN0LT5oZGV2ID0gKHN0cnVjdCBoaWRfZGV2aWNlICopIGlub2RlLT5pX3ByaXZhdGU7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbGlzdDsKKwltdXRleF9pbml0KCZsaXN0LT5yZWFkX211dGV4KTsKKworCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZsaXN0LT5oZGV2LT5kZWJ1Z19saXN0KTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhpZF9kZWJ1Z19ldmVudHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGhpZF9kZWJ1Z19saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwLCBsZW47CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwl3aGlsZSAocmV0ID09IDApIHsKKwkJbXV0ZXhfbG9jaygmbGlzdC0+cmVhZF9tdXRleCk7CisJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKKwkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oZGV2LT5kZWJ1Z193YWl0LCAmd2FpdCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCQl3aGlsZSAobGlzdC0+aGVhZCA9PSBsaXN0LT50YWlsKSB7CisJCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoIWxpc3QtPmhkZXYgfHwgIWxpc3QtPmhkZXYtPmRlYnVnKSB7CisJCQkJCXJldCA9IC1FSU87CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qIGFsbG93IE9fTk9OQkxPQ0sgZnJvbSBvdGhlciB0aHJlYWRzICovCisJCQkJbXV0ZXhfdW5sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwkJCQlzY2hlZHVsZSgpOworCQkJCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOworCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQl9CisKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmbGlzdC0+aGRldi0+ZGVidWdfd2FpdCwgJndhaXQpOworCQl9CisKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCS8qIHBhc3MgdGhlIHJpbmdidWZmZXIgY29udGVudHMgdG8gdXNlcnNwYWNlICovCitjb3B5X3Jlc3Q6CisJCWlmIChsaXN0LT50YWlsID09IGxpc3QtPmhlYWQpCisJCQlnb3RvIG91dDsKKwkJaWYgKGxpc3QtPnRhaWwgPiBsaXN0LT5oZWFkKSB7CisJCQlsZW4gPSBsaXN0LT50YWlsIC0gbGlzdC0+aGVhZDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIgKyByZXQsICZsaXN0LT5oaWRfZGVidWdfYnVmW2xpc3QtPmhlYWRdLCBsZW4pKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXJldCArPSBsZW47CisJCQlsaXN0LT5oZWFkICs9IGxlbjsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IEhJRF9ERUJVR19CVUZTSVpFIC0gbGlzdC0+aGVhZDsKKworCQkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsICZsaXN0LT5oaWRfZGVidWdfYnVmW2xpc3QtPmhlYWRdLCBsZW4pKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWxpc3QtPmhlYWQgPSAwOworCQkJcmV0ICs9IGxlbjsKKwkJCWdvdG8gY29weV9yZXN0OworCQl9CisKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhpZF9kZWJ1Z19ldmVudHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgaGlkX2RlYnVnX2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmxpc3QtPmhkZXYtPmRlYnVnX3dhaXQsIHdhaXQpOworCWlmIChsaXN0LT5oZWFkICE9IGxpc3QtPnRhaWwpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCWlmICghbGlzdC0+aGRldi0+ZGVidWcpCisJCXJldHVybiBQT0xMRVJSIHwgUE9MTEhVUDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaWRfZGVidWdfZXZlbnRzX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhpZF9kZWJ1Z19saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJbGlzdF9kZWwoJmxpc3QtPm5vZGUpOworCWtmcmVlKGxpc3QtPmhpZF9kZWJ1Z19idWYpOworCWtmcmVlKGxpc3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhpZF9kZWJ1Z19yZGVzY19mb3BzID0geworCS5vcGVuICAgICAgICAgICA9IGhpZF9kZWJ1Z19yZGVzY19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgICAgICAgICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSAgICAgICAgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhpZF9kZWJ1Z19ldmVudHNfZm9wcyA9IHsKKwkub3duZXIgPSAgICAgICAgVEhJU19NT0RVTEUsCisJLm9wZW4gICAgICAgICAgID0gaGlkX2RlYnVnX2V2ZW50c19vcGVuLAorCS5yZWFkICAgICAgICAgICA9IGhpZF9kZWJ1Z19ldmVudHNfcmVhZCwKKwkucG9sbAkJPSBoaWRfZGVidWdfZXZlbnRzX3BvbGwsCisJLnJlbGVhc2UgICAgICAgID0gaGlkX2RlYnVnX2V2ZW50c19yZWxlYXNlLAorfTsKKworCit2b2lkIGhpZF9kZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwloZGV2LT5kZWJ1Z19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgaGlkX2RlYnVnX3Jvb3QpOworCWhkZXYtPmRlYnVnX3JkZXNjID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmRlc2MiLCAwNDAwLAorCQkJaGRldi0+ZGVidWdfZGlyLCBoZGV2LCAmaGlkX2RlYnVnX3JkZXNjX2ZvcHMpOworCWhkZXYtPmRlYnVnX2V2ZW50cyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImV2ZW50cyIsIDA0MDAsCisJCQloZGV2LT5kZWJ1Z19kaXIsIGhkZXYsICZoaWRfZGVidWdfZXZlbnRzX2ZvcHMpOworCWhkZXYtPmRlYnVnID0gMTsKK30KKwordm9pZCBoaWRfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKK3sKKwloZGV2LT5kZWJ1ZyA9IDA7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoZGV2LT5kZWJ1Z193YWl0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShoZGV2LT5kZWJ1Z19yZGVzYyk7CisJZGVidWdmc19yZW1vdmUoaGRldi0+ZGVidWdfZXZlbnRzKTsKKwlkZWJ1Z2ZzX3JlbW92ZShoZGV2LT5kZWJ1Z19kaXIpOworfQorCit2b2lkIGhpZF9kZWJ1Z19pbml0KHZvaWQpCit7CisJaGlkX2RlYnVnX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImhpZCIsIE5VTEwpOworfQorCit2b2lkIGhpZF9kZWJ1Z19leGl0KHZvaWQpCit7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGhpZF9kZWJ1Z19yb290KTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWV6a2V5LmMgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwppbmRleCAwYTFmZTA1Li5jYTExNjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYwpAQCAtNzgsMTIgKzc4LDEyIEBACiAJLmV2ZW50ID0gZXpfZXZlbnQsCiB9OwogCi1zdGF0aWMgaW50IGV6X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGV6X2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmZXpfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgZXpfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGV6X2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmV6X2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCmluZGV4IGQ0MmQyMjIuLmNhYjEzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCkBAIC04MSwxMiArODEsMTIgQEAKIAkuZXZlbnQgPSBneXJhdGlvbl9ldmVudCwKIH07CiAKLXN0YXRpYyBpbnQgZ3lyYXRpb25faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZ3lyYXRpb25faW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZneXJhdGlvbl9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBneXJhdGlvbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZ3lyYXRpb25fZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZ3lyYXRpb25fZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCA2MzAxMDEwLi5hZGJlZjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC0yOTYsNiArMjk2LDcgQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0YzRAkweGMyODMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9GT1JDRTNEX1BSTwkweGMyODYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSEVFTAkweGMyOTQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRwkweGMyOTMKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9NT01PX1dIRUVMCTB4YzI5NQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xPR0lURUNIX0cyNV9XSEVFTAkweGMyOTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9FTElURV9LQkQJMHhjMzBhCkBAIC0zNTksNiArMzYwLDkgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9QRVRBTFlOWAkJMHgxOGIxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEVUQUxZTlhfTUFYVEVSX1JFTU9URQkweDAwMzcKIAorI2RlZmluZSBVU0JfVkVORE9SX0lEX1BISUxJUFMgICAgICAgMHgwNDcxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUEhJTElQU19JRUVFODAyMTU0X0RPTkdMRSAweDA2MTcKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1BMQVlET1RDT00JMHgwYjQzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUExBWURPVENPTV9FTVNfVVNCSUkJMHgwMDAzCiAKQEAgLTM3NiwxMSArMzgwLDggQEAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT05ZX1BTM19DT05UUk9MTEVSCTB4MDI2OAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfU09VTkRHUkFQSAkweDE1YzIKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTENECTB4MDAzOAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QyCTB4MDAzNgotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0QzCTB4MDAzNAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0Q0CTB4MDA0NAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9MQ0Q1CTB4MDA0NQorI2RlZmluZSBVU0JfREVWSUNFX0lEX1NPVU5ER1JBUEhfSU1PTl9GSVJTVAkweDAwMzQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9TT1VOREdSQVBIX0lNT05fTEFTVAkweDAwNDYKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTgkJMHgwNDMwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFCTB4Y2RhYgpAQCAtNDAzLDYgKzQwNCw5IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfVFVSQk9YCQkweDA2MmEKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9UVVJCT1hfS0VZQk9BUkQJMHgwMjAxCiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9UV0lOSEFOICAgICAgICAgICAweDYyNTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9UV0lOSEFOX0lSX1JFTU9URSAweDAxMDAKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1VDTE9HSUMJCTB4NTU0MwogI2RlZmluZSBVU0JfREVWSUNFX0lEX1VDTE9HSUNfVEFCTEVUX1BGMTIwOQkweDAwNDIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwppbmRleCA3ZjE4M2I3Li41ODYyYjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaW5wdXQuYwpAQCAtMTU5LDE3ICsxNTksMTIgQEAKIAogCWZpZWxkLT5oaWRpbnB1dCA9IGhpZGlucHV0OwogCi0JZGJnX2hpZCgiTWFwcGluZzogIik7Ci0JaGlkX3Jlc29sdl91c2FnZSh1c2FnZS0+aGlkKTsKLQlkYmdfaGlkX2xpbmUoIiAtLS0+ICIpOwotCiAJaWYgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fQ09OU1RBTlQpCiAJCWdvdG8gaWdub3JlOwogCiAJLyogb25seSBMRUQgdXNhZ2VzIGFyZSBzdXBwb3J0ZWQgaW4gb3V0cHV0IGZpZWxkcyAqLwogCWlmIChmaWVsZC0+cmVwb3J0X3R5cGUgPT0gSElEX09VVFBVVF9SRVBPUlQgJiYKIAkJCSh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9MRUQpIHsKLQkJZGJnX2hpZF9saW5lKCIgW25vbi1MRUQgb3V0cHV0IGZpZWxkXSAiKTsKIAkJZ290byBpZ25vcmU7CiAJfQogCkBAIC01NjEsMTUgKzU1Niw5IEBACiAJCXNldF9iaXQoTVNDX1NDQU4sIGlucHV0LT5tc2NiaXQpOwogCX0KIAotCWhpZF9yZXNvbHZfZXZlbnQodXNhZ2UtPnR5cGUsIHVzYWdlLT5jb2RlKTsKLQotCWRiZ19oaWRfbGluZSgiXG4iKTsKLQotCXJldHVybjsKLQogaWdub3JlOgotCWRiZ19oaWRfbGluZSgiSUdOT1JFRFxuIik7CiAJcmV0dXJuOworCiB9CiAKIHZvaWQgaGlkaW5wdXRfaGlkX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwgX19zMzIgdmFsdWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQta2Vuc2luZ3Rvbi5jIGIvZHJpdmVycy9oaWQvaGlkLWtlbnNpbmd0b24uYwppbmRleCA3MzUzYmQ3Li5hNWI0MDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQta2Vuc2luZ3Rvbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1rZW5zaW5ndG9uLmMKQEAgLTQ4LDEyICs0OCwxMiBAQAogCS5pbnB1dF9tYXBwaW5nID0ga3NfaW5wdXRfbWFwcGluZywKIH07CiAKLXN0YXRpYyBpbnQga3NfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQga3NfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZrc19kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBrc19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQga3NfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigma3NfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1reWUuYyBiL2RyaXZlcnMvaGlkL2hpZC1reWUuYwppbmRleCA3MmVlM2ZlLi5mODg3MTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQta3llLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWt5ZS5jCkBAIC01NCwxMiArNTQsMTIgQEAKIAkucmVwb3J0X2ZpeHVwID0ga3llX3JlcG9ydF9maXh1cCwKIH07CiAKLXN0YXRpYyBpbnQga3llX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGt5ZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmt5ZV9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBreWVfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGt5ZV9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZreWVfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1sZy5jIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKaW5kZXggN2FmYmFhMC4uMGY4NzBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWxnLmMKQEAgLTI5OSw2ICsyOTksOCBAQAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9HMjVfV0hFRUwpLAogCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9XSU5HTUFOX0ZGRyApLAorCQkuZHJpdmVyX2RhdGEgPSBMR19GRiB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9MT0dJVEVDSF9SVU1CTEVQQUQyKSwKIAkJLmRyaXZlcl9kYXRhID0gTEdfRkYyIH0sCiAJeyB9CkBAIC0zMTUsMTIgKzMxNywxMiBAQAogCS5wcm9iZSA9IGxnX3Byb2JlLAogfTsKIAotc3RhdGljIGludCBsZ19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBsZ19pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmxnX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGxnX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBsZ19leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZsZ19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZ2ZmLmMKaW5kZXggNTYwOTk3MC4uOTg3YWJlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWxnZmYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGdmZi5jCkBAIC02Nyw2ICs2Nyw3IEBACiAJeyAweDA0NmQsIDB4YzIxOSwgZmZfcnVtYmxlIH0sCiAJeyAweDA0NmQsIDB4YzI4MywgZmZfam95c3RpY2sgfSwKIAl7IDB4MDQ2ZCwgMHhjMjg2LCBmZl9qb3lzdGlja19hYyB9LAorCXsgMHgwNDZkLCAweGMyOTMsIGZmX2pveXN0aWNrIH0sCiAJeyAweDA0NmQsIDB4YzI5NCwgZmZfd2hlZWwgfSwKIAl7IDB4MDQ2ZCwgMHhjMjk1LCBmZl9qb3lzdGljayB9LAogCXsgMHgwNDZkLCAweGNhMDMsIGZmX3doZWVsIH0sCkBAIC0xNTAsMTEgKzE1MSw2IEBACiAKIAkvKiBDaGVjayB0aGF0IHRoZSByZXBvcnQgbG9va3Mgb2sgKi8KIAlyZXBvcnQgPSBsaXN0X2VudHJ5KHJlcG9ydF9saXN0LT5uZXh0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7Ci0JaWYgKCFyZXBvcnQpIHsKLQkJZXJyX2hpZCgiTlVMTCBvdXRwdXQgcmVwb3J0Iik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KIAlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbMF07CiAJaWYgKCFmaWVsZCkgewogCQllcnJfaGlkKCJOVUxMIGZpZWxkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMgYi9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKaW5kZXggNWU5ZTM3YS4uMzU5Y2M0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYwpAQCAtMTk3LDEyICsxOTcsMTIgQEAKIAkucHJvYmUgPSBtc19wcm9iZSwKIH07CiAKLXN0YXRpYyBpbnQgbXNfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXNfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtc19kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBtc19leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbXNfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbXNfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKaW5kZXggMjQwZjg3Ni4uMmNkMDVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKQEAgLTY1LDEyICs2NSwxMiBAQAogCS5pbnB1dF9tYXBwaW5nID0gbXJfaW5wdXRfbWFwcGluZywKIH07CiAKLXN0YXRpYyBpbnQgbXJfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXJfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZtcl9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBtcl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbXJfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmbXJfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1udHJpZy5jIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKaW5kZXggNzVlZDlkMi4uNDljZTY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMKQEAgLTI3LDYgKzI3LDkgQEAKIHN0cnVjdCBudHJpZ19kYXRhIHsKIAlfX3MzMiB4LCB5LCBpZCwgdywgaDsKIAljaGFyIHJlYWRpbmdfYV9wb2ludCwgZm91bmRfY29udGFjdF9pZDsKKwljaGFyIHBlbl9hY3RpdmU7CisJY2hhciBmaW5nZXJfYWN0aXZlOworCWNoYXIgaW52ZXJ0ZWQ7CiB9OwogCiAvKgpAQCAtNjMsMTAgKzY2LDcgQEAKIAljYXNlIEhJRF9VUF9ESUdJVElaRVI6CiAJCXN3aXRjaCAodXNhZ2UtPmhpZCkgewogCQkvKiB3ZSBkbyBub3Qgd2FudCB0byBtYXAgdGhlc2UgZm9yIG5vdyAqLwotCQljYXNlIEhJRF9ER19JTlZFUlQ6IC8qIHZhbHVlIGlzIGFsd2F5cyAwICovCi0JCWNhc2UgSElEX0RHX0VSQVNFUjogLyogdmFsdWUgaXMgYWx3YXlzIDAgKi8KIAkJY2FzZSBISURfREdfQ09OVEFDVElEOiAvKiB2YWx1ZSBpcyB1c2VsZXNzICovCi0JCWNhc2UgSElEX0RHX0JBUlJFTFNXSVRDSDogIC8qIGRvdWJ0ZnVsICovCiAJCWNhc2UgSElEX0RHX0lOUFVUTU9ERToKIAkJY2FzZSBISURfREdfREVWSUNFSU5ERVg6CiAJCWNhc2UgSElEX0RHX0NPTlRBQ1RDT1VOVDoKQEAgLTEyNSw2ICsxMjUsMTggQEAKIAogICAgICAgICBpZiAoaGlkLT5jbGFpbWVkICYgSElEX0NMQUlNRURfSU5QVVQpIHsKIAkJc3dpdGNoICh1c2FnZS0+aGlkKSB7CisKKwkJY2FzZSBISURfREdfSU5SQU5HRToKKwkJCWlmIChmaWVsZC0+YXBwbGljYXRpb24gJiAweDMpCisJCQkJbmQtPnBlbl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7CisJCQllbHNlCisJCQkJbmQtPmZpbmdlcl9hY3RpdmUgPSAodmFsdWUgIT0gMCk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIEhJRF9ER19JTlZFUlQ6CisJCQluZC0+aW52ZXJ0ZWQgPSB2YWx1ZTsKKwkJCXJldHVybiAwOworCiAJCWNhc2UgSElEX0dEX1g6CiAJCQluZC0+eCA9IHZhbHVlOwogCQkJbmQtPnJlYWRpbmdfYV9wb2ludCA9IDE7CkBAIC0xNDcsNyArMTU5LDExIEBACiAJCQkgKiByZXBvcnQgcmVjZWl2ZWQgaW4gYSBmaW5nZXIgZXZlbnQuIFdlIHdhbnQKIAkJCSAqIHRvIGVtaXQgYSBub3JtYWwgKFgsIFkpIHBvc2l0aW9uCiAJCQkgKi8KLQkJCWlmICghIG5kLT5mb3VuZF9jb250YWN0X2lkKSB7CisJCQlpZiAoIW5kLT5mb3VuZF9jb250YWN0X2lkKSB7CisJCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMCk7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT09MX0RPVUJMRVRBUCwgMSk7CisJCQkJfQogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19YLCBuZC0+eCk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1ksIG5kLT55KTsKIAkJCX0KQEAgLTE1OSw2ICsxNzUsMTQgQEAKIAkJCSAqIHRvIGVtaXQgYSBub3JtYWwgKFgsIFkpIHBvc2l0aW9uCiAJCQkgKi8KIAkJCWlmICghIG5kLT5mb3VuZF9jb250YWN0X2lkKSB7CisJCQkJaWYgKG5kLT5wZW5fYWN0aXZlICYmIG5kLT5maW5nZXJfYWN0aXZlKSB7CisJCQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsCisJCQkJCQkJbmQtPmludmVydGVkID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOCisJCQkJCQkJLCAwKTsKKwkJCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwKKwkJCQkJCQluZC0+aW52ZXJ0ZWQgPyBCVE5fVE9PTF9SVUJCRVIgOiBCVE5fVE9PTF9QRU4KKwkJCQkJCQksIDEpOworCQkJCX0KIAkJCQlpbnB1dF9ldmVudChpbnB1dCwgRVZfQUJTLCBBQlNfWCwgbmQtPngpOwogCQkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9BQlMsIEFCU19ZLCBuZC0+eSk7CiAJCQkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX0FCUywgQUJTX1BSRVNTVVJFLCB2YWx1ZSk7CkBAIC0yMzMsNiArMjU3LDcgQEAKIAogCWlmIChyZXQpCiAJCWtmcmVlIChuZCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjUsMTIgKzI5MCwxMiBAQAogCS5ldmVudCA9IG50cmlnX2V2ZW50LAogfTsKIAotc3RhdGljIGludCBudHJpZ19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBudHJpZ19pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJm50cmlnX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIG50cmlnX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBudHJpZ19leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZudHJpZ19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBldGFseW54LmMgYi9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYwppbmRleCAyZTgzZThmLi41MDBmYmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYwpAQCAtMTA1LDEyICsxMDUsMTIgQEAKIAkucHJvYmUgPSBwbF9wcm9iZSwKIH07CiAKLXN0YXRpYyBpbnQgcGxfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcGxfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZwbF9kcml2ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBwbF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcGxfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1wbC5jIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKaW5kZXggNGRiOWEzNC4uYzZkN2RiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXBsLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXBsLmMKQEAgLTIxNywxMiArMjE3LDEyIEBACiAJLnByb2JlID0gcGxfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IHBsX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHBsX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmcGxfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgcGxfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBsX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jIGIvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYwppbmRleCAwNzA4M2FhLi41YjIyMmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zYW1zdW5nLmMKQEAgLTI1LDI1ICsyNSw0OCBAQAogLyoKICAqIFNhbXN1bmcgSXJEQSByZW1vdGUgY29udHJvbGxlciAocmVwb3J0cyBhcyBDeXByZXNzIFVTQiBNb3VzZSkuCiAgKgorICogVGhlcmUgYXJlIHNldmVyYWwgdmFyaWFudHMgZm9yIDA0MTk6MDAwMToKKyAqCisgKiAxLiAxODQgYnl0ZSByZXBvcnQgZGVzY3JpcHRvcgogICogVmVuZG9yIHNwZWNpZmljIHJlcG9ydCAjNCBoYXMgYSBzaXplIG9mIDQ4IGJpdCwKICAqIGFuZCB0aGVyZWZvcmUgaXMgbm90IGFjY2VwdGVkIHdoZW4gaW5zcGVjdGluZyB0aGUgZGVzY3JpcHRvcnMuCiAgKiBBcyBhIHdvcmthcm91bmQgd2UgcmVpbnRlcnByZXQgdGhlIHJlcG9ydCBhczoKICAqICAgVmFyaWFibGUgdHlwZSwgY291bnQgNiwgc2l6ZSA4IGJpdCwgbG9nLiBtYXhpbXVtIDI1NQogICogVGhlIGJ1cmRlbiB0byByZWNvbnN0cnVjdCB0aGUgZGF0YSBpcyBtb3ZlZCBpbnRvIHVzZXIgc3BhY2UuCisgKgorICogMi4gMjAzIGJ5dGUgcmVwb3J0IGRlc2NyaXB0b3IKKyAqIFJlcG9ydCAjNCBoYXMgYW4gYXJyYXkgZmllbGQgd2l0aCBsb2dpY2FsIHJhbmdlIDAuLjE4IGluc3RlYWQgb2YgMS4uMTUuCisgKgorICogMy4gMTM1IGJ5dGUgcmVwb3J0IGRlc2NyaXB0b3IKKyAqIFJlcG9ydCAjNCBoYXMgYW4gYXJyYXkgZmllbGQgd2l0aCBsb2dpY2FsIHJhbmdlIDAuLjE3IGluc3RlYWQgb2YgMS4uMTQuCiAgKi8KIHN0YXRpYyB2b2lkIHNhbXN1bmdfcmVwb3J0X2ZpeHVwKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBfX3U4ICpyZGVzYywKIAkJdW5zaWduZWQgaW50IHJzaXplKQogewotCWlmIChyc2l6ZSA+PSAxODIgJiYgcmRlc2NbMTc1XSA9PSAweDI1ICYmIHJkZXNjWzE3Nl0gPT0gMHg0MCAmJgorCWlmIChyc2l6ZSA9PSAxODQgJiYgcmRlc2NbMTc1XSA9PSAweDI1ICYmIHJkZXNjWzE3Nl0gPT0gMHg0MCAmJgogCQkJcmRlc2NbMTc3XSA9PSAweDc1ICYmIHJkZXNjWzE3OF0gPT0gMHgzMCAmJgogCQkJcmRlc2NbMTc5XSA9PSAweDk1ICYmIHJkZXNjWzE4MF0gPT0gMHgwMSAmJgogCQkJcmRlc2NbMTgyXSA9PSAweDQwKSB7Ci0JCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgU2Ftc3VuZyBJckRBIHJlcG9ydCAiCi0JCQkJImRlc2NyaXB0b3JcbiIpOworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFNhbXN1bmcgSXJEQSAlZCBieXRlIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIsIDE4NCk7CiAJCXJkZXNjWzE3Nl0gPSAweGZmOwogCQlyZGVzY1sxNzhdID0gMHgwODsKIAkJcmRlc2NbMTgwXSA9IDB4MDY7CiAJCXJkZXNjWzE4Ml0gPSAweDQyOworCX0gZWxzZQorCWlmIChyc2l6ZSA9PSAyMDMgJiYgcmRlc2NbMTkyXSA9PSAweDE1ICYmIHJkZXNjWzE5M10gPT0gMHgwICYmCisJCQlyZGVzY1sxOTRdID09IDB4MjUgJiYgcmRlc2NbMTk1XSA9PSAweDEyKSB7CisJCWRldl9pbmZvKCZoZGV2LT5kZXYsICJmaXhpbmcgdXAgU2Ftc3VuZyBJckRBICVkIGJ5dGUgcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIiwgMjAzKTsKKwkJcmRlc2NbMTkzXSA9IDB4MTsKKwkJcmRlc2NbMTk1XSA9IDB4ZjsKKwl9IGVsc2UKKwlpZiAocnNpemUgPT0gMTM1ICYmIHJkZXNjWzEyNF0gPT0gMHgxNSAmJiByZGVzY1sxMjVdID09IDB4MCAmJgorCQkJcmRlc2NbMTI2XSA9PSAweDI1ICYmIHJkZXNjWzEyN10gPT0gMHgxMSkgeworCQlkZXZfaW5mbygmaGRldi0+ZGV2LCAiZml4aW5nIHVwIFNhbXN1bmcgSXJEQSAlZCBieXRlIHJlcG9ydCAiCisJCQkJImRlc2NyaXB0b3JcbiIsIDEzNSk7CisJCXJkZXNjWzEyNV0gPSAweDE7CisJCXJkZXNjWzEyN10gPSAweGU7CiAJfQogfQogCkBAIC01MSw2ICs3NCw3IEBACiAJCWNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGludCBjbWFzayA9IEhJRF9DT05ORUNUX0RFRkFVTFQ7CiAKIAlyZXQgPSBoaWRfcGFyc2UoaGRldik7CiAJaWYgKHJldCkgewpAQCAtNTgsOCArODIsMTMgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKLQlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgKEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfSElESU5QVVQpIHwKLQkJCUhJRF9DT05ORUNUX0hJRERFVl9GT1JDRSk7CisJaWYgKGhkZXYtPnJzaXplID09IDE4NCkgeworCQkvKiBkaXNhYmxlIGhpZGlucHV0LCBmb3JjZSBoaWRkZXYgKi8KKwkJY21hc2sgPSAoY21hc2sgJiB+SElEX0NPTk5FQ1RfSElESU5QVVQpIHwKKwkJCUhJRF9DT05ORUNUX0hJRERFVl9GT1JDRTsKKwl9CisKKwlyZXQgPSBoaWRfaHdfc3RhcnQoaGRldiwgY21hc2spOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmaGRldi0+ZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZnJlZTsKQEAgLTgzLDEyICsxMTIsMTIgQEAKIAkucHJvYmUgPSBzYW1zdW5nX3Byb2JlLAogfTsKIAotc3RhdGljIGludCBzYW1zdW5nX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhbXN1bmdfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZzYW1zdW5nX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNhbXN1bmdfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNhbXN1bmdfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmc2Ftc3VuZ19kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNqb3kuYyBiL2RyaXZlcnMvaGlkL2hpZC1zam95LmMKaW5kZXggZWFiMTY5ZS4uMjAzYzQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNqb3kuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc2pveS5jCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogCS5wcm9iZSA9IHNqb3lfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IHNqb3lfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2pveV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnNqb3lfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgc2pveV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2pveV9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZzam95X2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwppbmRleCBjMjU5OTM4Li40ZTg0NTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKQEAgLTEzNSwxMiArMTM1LDEyIEBACiAJLnJlcG9ydF9maXh1cCA9IHNvbnlfcmVwb3J0X2ZpeHVwLAogfTsKIAotc3RhdGljIGludCBzb255X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNvbnlfaW5pdCh2b2lkKQogewogCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZzb255X2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNvbnlfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNvbnlfZXhpdCh2b2lkKQogewogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmc29ueV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYyBiL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMKaW5kZXggZTBhOGZkMy4uNDM4MTA3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jCkBAIC02NSwxMiArNjUsMTIgQEAKIAkuaW5wdXRfbWFwcGluZyA9IHNwX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHNwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmc3BfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgc3BfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNwX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNwX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwppbmRleCBmY2Q2Y2NkLi4xNjdlYTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMKQEAgLTI0Myw3ICsyNDMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCB0bV9kZXZpY2VzW10gPSB7CiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzAwKSwKIAkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1RIUlVTVE1BU1RFUiwgMHhiMzA0KSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMDQpLCAgIC8qIEZpcmVTdG9ybSBEdWFsIFBvd2VyIDIgKGFuZCAzKSAqLworCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZylmZl9ydW1ibGUgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfVEhSVVNUTUFTVEVSLCAweGIzMjMpLCAgIC8qIER1YWwgVHJpZ2dlciAzLWluLTEgKFBDIE1vZGUpICovCisJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKWZmX3J1bWJsZSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjMyNCksICAgLyogRHVhbCBUcmlnZ2VyIDMtaW4tMSAoUFMzIE1vZGUpICovCiAJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKWZmX3J1bWJsZSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9USFJVU1RNQVNURVIsIDB4YjY1MSksCS8qIEZHVCBSdW1ibGUgRm9yY2UgV2hlZWwgKi8KIAkJLmRyaXZlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpZmZfcnVtYmxlIH0sCkBAIC0yNTksMTIgKzI2MywxMiBAQAogCS5wcm9iZSA9IHRtX3Byb2JlLAogfTsKIAotc3RhdGljIGludCB0bV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB0bV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnRtX2RyaXZlcik7CiB9CiAKLXN0YXRpYyB2b2lkIHRtX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0bV9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ0bV9kcml2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYyBiL2RyaXZlcnMvaGlkL2hpZC10b3BzZWVkLmMKaW5kZXggMTUyY2NmYS4uNjkyNWVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAkuaW5wdXRfbWFwcGluZyA9IHRzX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHRzX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHRzX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmdHNfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgdHNfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHRzX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnRzX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDVmNjAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIEhJRCBkcml2ZXIgZm9yIFR3aW5IYW4gSVIgcmVtb3RlIGNvbnRyb2wKKyAqCisgKiBCYXNlZCBvbiBoaWQtZ3lyYXRpb24uYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBCcnVubyBQcultb250IDxib25ib25zQGxpbnV4LXZzZXJ2ZXIub3JnPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKKy8qCVJlbW90ZSBjb250cm9sIGtleSBsYXlvdXQgKyBsaXN0aW5nOgorICoKKyAqIAlGdWxsIFNjcmVlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyCisgKglLRVlfU0NSRUVOICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUE9XRVIyCisgKgorICoJMSAgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgMworICoJS0VZX05VTUVSSUNfMSAgIEtFWV9OVU1FUklDXzIgICAgS0VZX05VTUVSSUNfMworICoKKyAqCTQgICAgICAgICAgICAgICAgICAgICA1ICAgICAgICAgICAgICAgICAgICAgIDYKKyAqCUtFWV9OVU1FUklDXzQgICBLRVlfTlVNRVJJQ181ICAgIEtFWV9OVU1FUklDXzYKKyAqCisgKgk3ICAgICAgICAgICAgICAgICAgICAgOCAgICAgICAgICAgICAgICAgICAgICA5CisgKglLRVlfTlVNRVJJQ183ICAgS0VZX05VTUVSSUNfOCAgICBLRVlfTlVNRVJJQ185CisgKgorICoJUkVDICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICBGYXZvcml0ZQorICoJS0VZX1JFQ09SRCAgICAgIEtFWV9OVU1FUklDXzAgICAgS0VZX0ZBVk9SSVRFUworICoKKyAqCVJld2luZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcndhcmQKKyAqCUtFWV9SRVdJTkQgICAgICAgICAgIENIKyAgICAgICAgICAgS0VZX0ZPUldBUkQKKyAqCSAgICAgICAgICAgICAgIEtFWV9DSEFOTkVMVVAKKyAqCisgKglWT0wtICAgICAgICAgICAgICAgICAgPiAgICAgICAgICAgICAgICAgICBWT0wrCisgKglLRVlfVk9MVU1FRE9XTiAgICBLRVlfUExBWSAgICAgICAgS0VZX1ZPTFVNRVVQCisgKgorICoJICAgICAgICAgICAgICAgICAgICAgQ0gtCisgKgkgICAgICAgICAgICAgIEtFWV9DSEFOTkVMRE9XTgorICoJUmVjYWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcAorICoJS0VZX1JFU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfU1RPUAorICoKKyAqCVRpbWVzaGlmdC9QYXVzZSAgICAgTXV0ZSAgICAgICAgICAgICAgICBDYW5jZWwKKyAqCUtFWV9QQVVTRSAgICAgICAgIEtFWV9NVVRFICAgICAgICAgIEtFWV9DQU5DRUwKKyAqCisgKglDYXB0dXJlICAgICAgICAgICAgUHJldmlldyAgICAgICAgICAgICAgICAgRVBHCisgKglLRVlfUFJJTlQgICAgICAgIEtFWV9QUk9HUkFNICAgICAgICAgICBLRVlfRVBHCisgKgorICoJUmVjb3JkIExpc3QgICAgICAgICAgVGFiICAgICAgICAgICAgICBUZWxldGV4dAorICoJS0VZX0xJU1QgICAgICAgICAgICBLRVlfVEFCICAgICAgICAgICBLRVlfVEVYVAorICovCisKKyNkZWZpbmUgdGhfbWFwX2tleV9jbGVhcihjKQloaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIFwKKwkJCQkJRVZfS0VZLCAoYykpCitzdGF0aWMgaW50IHR3aW5oYW5faW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9LRVlCT0FSRCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwkvKiBNYXAgYWxsIGtleXMgZnJvbSBUd2luaGFuIFJlbW90ZSAqLworCWNhc2UgMHgwMDQ6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1RFWFQpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMDY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1JFU1RBUlQpOyAgICAgIGJyZWFrOworCWNhc2UgMHgwMDg6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0VQRyk7ICAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMGM6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1JFV0lORCk7ICAgICAgIGJyZWFrOworCWNhc2UgMHgwMGU6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BST0dSQU0pOyAgICAgIGJyZWFrOworCWNhc2UgMHgwMGY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0xJU1QpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTA6IHRoX21hcF9rZXlfY2xlYXIoS0VZX01VVEUpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTE6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0ZPUldBUkQpOyAgICAgIGJyZWFrOworCWNhc2UgMHgwMTM6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BSSU5UKTsgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTc6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BBVVNFKTsgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMTk6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0ZBVk9SSVRFUyk7ICAgIGJyZWFrOworCWNhc2UgMHgwMWQ6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1NDUkVFTik7ICAgICAgIGJyZWFrOworCWNhc2UgMHgwMWU6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMSk7ICAgIGJyZWFrOworCWNhc2UgMHgwMWY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMik7ICAgIGJyZWFrOworCWNhc2UgMHgwMjA6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMyk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjE6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNCk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjI6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNSk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjM6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNik7ICAgIGJyZWFrOworCWNhc2UgMHgwMjQ6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfNyk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjU6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfOCk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjY6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfOSk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjc6IHRoX21hcF9rZXlfY2xlYXIoS0VZX05VTUVSSUNfMCk7ICAgIGJyZWFrOworCWNhc2UgMHgwMjg6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1BMQVkpOyAgICAgICAgIGJyZWFrOworCWNhc2UgMHgwMjk6IHRoX21hcF9rZXlfY2xlYXIoS0VZX0NBTkNFTCk7ICAgICAgIGJyZWFrOworCWNhc2UgMHgwMmI6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1RBQik7ICAgICAgICAgIGJyZWFrOworCS8qIFBvd2VyICAgICAgID0gMHgwZTAgKyAweDBlMSArIDB4MGUyICsgMHgwM2YgKi8KKwljYXNlIDB4MDNmOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9QT1dFUjIpOyAgICAgICBicmVhazsKKwljYXNlIDB4MDRhOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9SRUNPUkQpOyAgICAgICBicmVhazsKKwljYXNlIDB4MDRiOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMVVApOyAgICBicmVhazsKKwljYXNlIDB4MDRkOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9TVE9QKTsgICAgICAgICBicmVhazsKKwljYXNlIDB4MDRlOiB0aF9tYXBfa2V5X2NsZWFyKEtFWV9DSEFOTkVMRE9XTik7ICBicmVhazsKKwkvKiBWb2x1bWUgZG93biA9IDB4MGUxICsgMHgwNTEgICAgICAgICAgICAgICAgICovCisJY2FzZSAweDA1MTogdGhfbWFwX2tleV9jbGVhcihLRVlfVk9MVU1FRE9XTik7ICAgYnJlYWs7CisJLyogVm9sdW1lIHVwICAgPSAweDBlMSArIDB4MDUyICAgICAgICAgICAgICAgICAqLworCWNhc2UgMHgwNTI6IHRoX21hcF9rZXlfY2xlYXIoS0VZX1ZPTFVNRVVQKTsgICAgIGJyZWFrOworCS8qIEtpbGwgdGhlIGV4dHJhIGtleXMgdXNlZCBmb3IgbXVsdGkta2V5ICJwb3dlciIgYW5kICJ2b2x1bWUiIGtleXMKKwkgKiBhcyB3ZWxsIGFzIGNvbnRpbnVvdXNseSB0byByZWxlYXNlIENUUkwsQUxULE1FVEEsLi4uIGtleXMgKi8KKwljYXNlIDB4MGUwOgorCWNhc2UgMHgwZTE6CisJY2FzZSAweDBlMjoKKwljYXNlIDB4MGUzOgorCWNhc2UgMHgwZTQ6CisJY2FzZSAweDBlNToKKwljYXNlIDB4MGU2OgorCWNhc2UgMHgwZTc6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHR3aW5oYW5fZGV2aWNlc1tdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9UV0lOSEFOLCBVU0JfREVWSUNFX0lEX1RXSU5IQU5fSVJfUkVNT1RFKSB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCB0d2luaGFuX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgdHdpbmhhbl9kcml2ZXIgPSB7CisJLm5hbWUgPSAidHdpbmhhbiIsCisJLmlkX3RhYmxlID0gdHdpbmhhbl9kZXZpY2VzLAorCS5pbnB1dF9tYXBwaW5nID0gdHdpbmhhbl9pbnB1dF9tYXBwaW5nLAorfTsKKworc3RhdGljIGludCB0d2luaGFuX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmdHdpbmhhbl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCB0d2luaGFuX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnR3aW5oYW5fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodHdpbmhhbl9pbml0KTsKK21vZHVsZV9leGl0KHR3aW5oYW5fZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtd2Fjb20uYyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCmluZGV4IDFmOTIzN2YuLjc0NzU0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC13YWNvbS5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAkucmF3X2V2ZW50ID0gd2Fjb21fcmF3X2V2ZW50LAogfTsKIAotc3RhdGljIGludCB3YWNvbV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB3YWNvbV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIApAQCAtMjQ4LDcgKzI0OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgd2Fjb21fZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHdhY29tX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJndhY29tX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtenBmZi5jIGIvZHJpdmVycy9oaWQvaGlkLXpwZmYuYwppbmRleCA1N2Y3MTA3Li5hNzlmMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC16cGZmLmMKQEAgLTE1MiwxMiArMTUyLDEyIEBACiAJLnByb2JlID0genBfcHJvYmUsCiB9OwogCi1zdGF0aWMgaW50IHpwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHpwX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigmenBfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgenBfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHpwX2V4aXQodm9pZCkKIHsKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJnpwX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCmluZGV4IDNjMWZjYjcuLjFiMGUwN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtY29yZS5jCkBAIC00LDggKzQsOCBAQAogICogIENvcHlyaWdodCAoYykgMTk5OSBBbmRyZWFzIEdhbAogICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IE1pY2hhZWwgSGFib3VzdGFrIDxtaWtlLUBjaW5jaS5yci5jb20+IGZvciBDb25jZXB0MiwgSW5jCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggSmlyaSBLb3NpbmEKICAqICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBPbGl2ZXIgTmV1a3VtCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgSmlyaSBLb3NpbmEKICAqLwogCiAvKgpAQCAtNDg5LDcgKzQ4OSw4IEBACiAJd2FrZV91cCgmdXNiaGlkLT53YWl0KTsKIH0KIAotdm9pZCBfX3VzYmhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHVuc2lnbmVkIGNoYXIgZGlyKQorc3RhdGljIHZvaWQgX191c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgZGlyKQogewogCWludCBoZWFkOwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwpAQCAtODg1LDExICs4ODYsNiBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlkYmdfaGlkKCJyZXBvcnQgZGVzY3JpcHRvciAoc2l6ZSAldSwgcmVhZCAlZCkgPSAiLCByc2l6ZSwgbik7Ci0JZm9yIChuID0gMDsgbiA8IHJzaXplOyBuKyspCi0JCWRiZ19oaWRfbGluZSgiICUwMngiLCAodW5zaWduZWQgY2hhcikgcmRlc2Nbbl0pOwotCWRiZ19oaWRfbGluZSgiXG4iKTsKLQogCXJldCA9IGhpZF9wYXJzZV9yZXBvcnQoaGlkLCByZGVzYywgcnNpemUpOwogCWtmcmVlKHJkZXNjKTsKIAlpZiAocmV0KSB7CkBAIC05ODYsNyArOTgyLDYgQEAKIAlzZXR1cF90aW1lcigmdXNiaGlkLT5pb19yZXRyeSwgaGlkX3JldHJ5X3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKSBoaWQpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+bG9jayk7CiAKIAl1c2JoaWQtPmludGYgPSBpbnRmOwogCXVzYmhpZC0+aWZudW0gPSBpbnRlcmZhY2UtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKQEAgLTEwMDQsNyArOTk5LDYgQEAKIAl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2ZsYWdzIHw9IChVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCB8IFVSQl9OT19TRVRVUF9ETUFfTUFQKTsKIAogCXVzYmhpZF9pbml0X3JlcG9ydHMoaGlkKTsKLQloaWRfZHVtcF9kZXZpY2UoaGlkKTsKIAogCXNldF9iaXQoSElEX1NUQVJURUQsICZ1c2JoaWQtPmlvZmwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCBkOGY3NDIzLi4wZDkwNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcXVpcmtzLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXUzMiBxdWlya3M7CiAJaW50IG4gPSAwLCBtOwogCi0JZm9yICg7IHF1aXJrc19wYXJhbVtuXSAmJiBuIDwgTUFYX1VTQkhJRF9CT09UX1FVSVJLUzsgbisrKSB7CisJZm9yICg7IG4gPCBNQVhfVVNCSElEX0JPT1RfUVVJUktTICYmIHF1aXJrc19wYXJhbVtuXTsgbisrKSB7CiAKIAkJbSA9IHNzY2FuZihxdWlya3NfcGFyYW1bbl0sICIweCVoeDoweCVoeDoweCV4IiwKIAkJCQkmaWRWZW5kb3IsICZpZFByb2R1Y3QsICZxdWlya3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCmluZGV4IDIxNWIyYWQuLjRkMWRjMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgSElEREVWX01JTk9SX0JBU0UJOTYKICNkZWZpbmUgSElEREVWX01JTk9SUwkJMTYKICNlbmRpZgotI2RlZmluZSBISURERVZfQlVGRkVSX1NJWkUJNjQKKyNkZWZpbmUgSElEREVWX0JVRkZFUl9TSVpFCTIwNDgKIAogc3RydWN0IGhpZGRldiB7CiAJaW50IGV4aXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDJkNTAxNjYuLjJlMjViN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTcwMiw2ICs3MDIsMjMgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNodDE1LgogCitjb25maWcgU0VOU09SU19TM0MKKwl0cmlzdGF0ZSAiUzNDMjRYWC9TM0M2NFhYIEluYnVpbHQgQURDIgorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwIHx8IEFSQ0hfUzNDNjRYWAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgb24tYm9hcmQgQURDcyBvZgorCSAgdGhlIFNhbXN1bmcgUzNDMjRYWCBvciBTM0M2NFhYIHNlcmllcyBvZiBTb0MKKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzM2MtaHdtby4KKworY29uZmlnIFNFTlNPUlNfUzNDX1JBVworCWJvb2wgIkluY2x1ZGUgcmF3IGNoYW5uZWwgYXR0cmlidXRlcyBpbiBzeXNmcyIKKwlkZXBlbmRzIG9uIFNFTlNPUlNfUzNDCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHJhdyBjb3BpZXMgb2YgYWxsIHRoZSBBREMKKwkgIGNoYW5uZWxzIGluIHN5c2ZzLgorCiBjb25maWcgU0VOU09SU19TSVM1NTk1CiAJdHJpc3RhdGUgIlNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAuIFNpUzU1OTUiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGI3OTNkY2UuLjdmMjM5YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtNzYsNiArNzYsNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzM2MCkJKz0gcGM4NzM2MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubworb2JqLSQoQ09ORklHX1NFTlNPUlNfUzNDKQkrPSBzM2MtaHdtb24ubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU0hUMTUpCSs9IHNodDE1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1NJUzU1OTUpCSs9IHNpczU1OTUubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NykrPSBzbXNjNDdiMzk3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMgYi9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNTI0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCkBAIC0wLDAgKzEsNDA1IEBACisvKiBsaW51eC9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4LCAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNFhYL1MzQzY0WFggQURDIGh3bW9uIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisKKyNpbmNsdWRlIDxwbGF0L2FkYy5oPgorI2luY2x1ZGUgPHBsYXQvaHdtb24uaD4KKworc3RydWN0IHMzY19od21vbl9hdHRyIHsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUJaW47CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlCWxhYmVsOworCWNoYXIJCQkJaW5fbmFtZVsxMl07CisJY2hhcgkJCQlsYWJlbF9uYW1lWzEyXTsKK307CisKKy8qKgorICogc3RydWN0IHMzY19od21vbiAtIEFEQyBod21vbiBjbGllbnQgaW5mb3JtYXRpb24KKyAqIEBsb2NrOiBBY2Nlc3MgbG9jayB0byBzZXJpYWxpc2UgdGhlIGNvbnZlcnNpb25zLgorICogQGNsaWVudDogVGhlIGNsaWVudCB3ZSByZWdpc3RlcmVkIHdpdGggdGhlIFMzQyBBREMgY29yZS4KKyAqIEBod21vbl9kZXY6IFRoZSBod21vbiBkZXZpY2Ugd2UgY3JlYXRlZC4KKyAqIEBhdHRyOiBUaGUgaG9sZGVycyBmb3IgdGhlIGNoYW5uZWwgYXR0cmlidXRlcy4KKyovCitzdHJ1Y3QgczNjX2h3bW9uIHsKKwlzdHJ1Y3Qgc2VtYXBob3JlCWxvY2s7CisJc3RydWN0IHMzY19hZGNfY2xpZW50CSpjbGllbnQ7CisJc3RydWN0IGRldmljZQkJKmh3bW9uX2RldjsKKworCXN0cnVjdCBzM2NfaHdtb25fYXR0cglhdHRyc1s4XTsKK307CisKKy8qKgorICogczNjX2h3bW9uX3JlYWRfY2ggLSByZWFkIGEgdmFsdWUgZnJvbSBhIGdpdmVuIGFkYyBjaGFubmVsLgorICogQGRldjogVGhlIGRldmljZS4KKyAqIEBod21vbjogT3VyIHN0YXRlLgorICogQGNoYW5uZWw6IFRoZSBjaGFubmVsIHdlJ3JlIHJlYWRpbmcgZnJvbS4KKyAqCisgKiBSZWFkIGEgdmFsdWUgZnJvbSB0aGUgQGNoYW5uZWwgd2l0aCB0aGUgcHJvcGVyIGxvY2tpbmcgYW5kIHNsZWVwIHVudGlsCisgKiBlaXRoZXIgdGhlIHJlYWQgY29tcGxldGVzIG9yIHdlIHRpbWVvdXQgYXdhaXRpbmcgdGhlIEFEQyBjb3JlIHRvIGdldAorICogYmFjayB0byB1cy4KKyAqLworc3RhdGljIGludCBzM2NfaHdtb25fcmVhZF9jaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBzM2NfaHdtb24gKmh3bW9uLCBpbnQgY2hhbm5lbCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZod21vbi0+bG9jayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZGJnKGRldiwgInJlYWRpbmcgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7CisKKwlyZXQgPSBzM2NfYWRjX3JlYWQoaHdtb24tPmNsaWVudCwgY2hhbm5lbCk7CisJdXAoJmh3bW9uLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfU0VOU09SU19TM0NfUkFXCisvKioKKyAqIHMzY19od21vbl9zaG93X3JhdyAtIHNob3cgYSBjb252ZXJzaW9uIGZyb20gdGhlIHJhdyBjaGFubmVsIG51bWJlci4KKyAqIEBkZXY6IFRoZSBkZXZpY2UgdGhhdCB0aGUgYXR0cmlidXRlIGJlbG9uZ3MgdG8uCisgKiBAYXR0cjogVGhlIGF0dHJpYnV0ZSBiZWluZyByZWFkLgorICogQGJ1ZjogVGhlIHJlc3VsdCBidWZmZXIuCisgKgorICogVGhpcyBzaG93IGRlYWxzIHdpdGggdGhlIHJhdyBhdHRyaWJ1dGUsIHJlZ2lzdGVyZWQgZm9yIGVhY2ggcG9zc2libGUKKyAqIEFEQyBjaGFubmVsLiBUaGlzIGRvZXMgYSBjb252ZXJzaW9uIGFuZCByZXR1cm5zIHRoZSByYXcgKHVuLXNjYWxlZCkKKyAqIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgc3NpemVfdCBzM2NfaHdtb25fc2hvd19yYXcoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgczNjX2h3bW9uICphZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzYSA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgcmV0OworCisJcmV0ID0gczNjX2h3bW9uX3JlYWRfY2goZGV2LCBhZGMsIHNhLT5pbmRleCk7CisKKwlyZXR1cm4gIChyZXQgPCAwKSA/IHJldCA6IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHJldCk7Cit9CisKKyNkZWZpbmUgREVGX0FEQ19BVFRSKHgpCVwKKwlzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGFkYyMjeCMjX3JhdywgU19JUlVHTywgczNjX2h3bW9uX3Nob3dfcmF3LCBOVUxMLCB4KQorCitERUZfQURDX0FUVFIoMCk7CitERUZfQURDX0FUVFIoMSk7CitERUZfQURDX0FUVFIoMik7CitERUZfQURDX0FUVFIoMyk7CitERUZfQURDX0FUVFIoNCk7CitERUZfQURDX0FUVFIoNSk7CitERUZfQURDX0FUVFIoNik7CitERUZfQURDX0FUVFIoNyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzM2NfaHdtb25fYXR0cnNbOV0gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9hZGMwX3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYWRjMV9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2FkYzJfcmF3LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9hZGMzX3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYWRjNF9yYXcuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2FkYzVfcmF3LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9hZGM2X3Jhdy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYWRjN19yYXcuZGV2X2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgczNjX2h3bW9uX2F0dHJncm91cCA9IHsKKwkuYXR0cnMJPSBzM2NfaHdtb25fYXR0cnMsCit9OworCitzdGF0aWMgaW5saW5lIGludCBzM2NfaHdtb25fYWRkX3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmczNjX2h3bW9uX2F0dHJncm91cCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfaHdtb25fcmVtb3ZlX3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZzM2NfaHdtb25fYXR0cmdyb3VwKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgczNjX2h3bW9uX2FkZF9yYXcoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2h3bW9uX3JlbW92ZV9yYXcoc3RydWN0IGRldmljZSAqZGV2KSB7IH0KKworI2VuZGlmIC8qIENPTkZJR19TRU5TT1JTX1MzQ19SQVcgKi8KKworLyoqCisgKiBzM2NfaHdtb25fY2hfc2hvdyAtIHNob3cgdmFsdWUgb2YgYSBnaXZlbiBjaGFubmVsCisgKiBAZGV2OiBUaGUgZGV2aWNlIHRoYXQgdGhlIGF0dHJpYnV0ZSBiZWxvbmdzIHRvLgorICogQGF0dHI6IFRoZSBhdHRyaWJ1dGUgYmVpbmcgcmVhZC4KKyAqIEBidWY6IFRoZSByZXN1bHQgYnVmZmVyLgorICoKKyAqIFJlYWQgYSB2YWx1ZSBmcm9tIHRoZSBBREMgYW5kIHNjYWxlIGl0IGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gdGhlCisgKiBjYWxsZXIuIFRoZSBzY2FsZSBmYWN0b3IgaXMgZ2FpbmVkIGZyb20gdGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbgorICogcGFzc2VkIHZpYSB0aGUgcGxhdGZvcm0gZGF0YSB3aGVuIHRoZSBkZXZpY2Ugd2FzIHJlZ2lzdGVyZWQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHMzY19od21vbl9jaF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzM2NfaHdtb24gKmh3bW9uID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCXN0cnVjdCBzM2NfaHdtb25fcGRhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzM2NfaHdtb25fY2hjZmcgKmNmZzsKKwlpbnQgcmV0OworCisJY2ZnID0gcGRhdGEtPmluW3Nlbl9hdHRyLT5pbmRleF07CisKKwlyZXQgPSBzM2NfaHdtb25fcmVhZF9jaChkZXYsIGh3bW9uLCBzZW5fYXR0ci0+aW5kZXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ICo9IGNmZy0+bXVsdDsKKwlyZXQgPSBESVZfUk9VTkRfQ0xPU0VTVChyZXQsIGNmZy0+ZGl2KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCByZXQpOworfQorCisvKioKKyAqIHMzY19od21vbl9sYWJlbF9zaG93IC0gc2hvdyBsYWJlbCBuYW1lIG9mIHRoZSBnaXZlbiBjaGFubmVsLgorICogQGRldjogVGhlIGRldmljZSB0aGF0IHRoZSBhdHRyaWJ1dGUgYmVsb25ncyB0by4KKyAqIEBhdHRyOiBUaGUgYXR0cmlidXRlIGJlaW5nIHJlYWQuCisgKiBAYnVmOiBUaGUgcmVzdWx0IGJ1ZmZlci4KKyAqCisgKiBSZXR1cm4gdGhlIGxhYmVsIG5hbWUgb2YgYSBnaXZlbiBjaGFubmVsCisgKi8KK3N0YXRpYyBzc2l6ZV90IHMzY19od21vbl9sYWJlbF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCXN0cnVjdCBzM2NfaHdtb25fcGRhdGEgKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzM2NfaHdtb25fY2hjZmcgKmNmZzsKKworCWNmZyA9IHBkYXRhLT5pbltzZW5fYXR0ci0+aW5kZXhdOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGNmZy0+bmFtZSk7Cit9CisKKy8qKgorICogczNjX2h3bW9uX2NyZWF0ZV9hdHRyIC0gY3JlYXRlIGh3bW9uIGF0dHJpYnV0ZSBmb3IgZ2l2ZW4gY2hhbm5lbC4KKyAqIEBkZXY6IFRoZSBkZXZpY2UgdG8gY3JlYXRlIHRoZSBhdHRyaWJ1dGUgb24uCisgKiBAY2ZnOiBUaGUgY2hhbm5lbCBjb25maWd1cmF0aW9uIHBhc3NlZCBmcm9tIHRoZSBwbGF0Zm9ybSBkYXRhLgorICogQGNoYW5uZWw6IFRoZSBBREMgY2hhbm5lbCBudW1iZXIgdG8gcHJvY2Vzcy4KKyAqCisgKiBDcmVhdGUgdGhlIHNjYWxlZCBhdHRyaWJ1dGUgZm9yIHVzZSB3aXRoIGh3bW9uIGZyb20gdGhlIHNwZWNpZmllZAorICogcGxhdGZvcm0gZGF0YSBpbiBAcGRhdGEuIFRoZSBzeXNmcyBlbnRyeSBpcyBoYW5kbGVkIGJ5IHRoZSByb3V0aW5lCisgKiBzM2NfaHdtb25fY2hfc2hvdygpLgorICoKKyAqIFRoZSBhdHRyaWJ1dGUgbmFtZSBpcyB0YWtlbiBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgaWYgcHJlc2VudAorICogb3RoZXJ3aXNlIHRoZSBuYW1lIGlzIHRha2VuIGJ5IGNvbmNhdGVuYXRpbmcgaW5fIHdpdGggdGhlIGNoYW5uZWwKKyAqIG51bWJlci4KKyAqLworc3RhdGljIGludCBzM2NfaHdtb25fY3JlYXRlX2F0dHIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgczNjX2h3bW9uX2NoY2ZnICpjZmcsCisJCQkJIHN0cnVjdCBzM2NfaHdtb25fYXR0ciAqYXR0cnMsCisJCQkJIGludCBjaGFubmVsKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cjsKKwlpbnQgcmV0OworCisJc25wcmludGYoYXR0cnMtPmluX25hbWUsIHNpemVvZihhdHRycy0+aW5fbmFtZSksICJpbiVkX2lucHV0IiwgY2hhbm5lbCk7CisKKwlhdHRyID0gJmF0dHJzLT5pbjsKKwlhdHRyLT5pbmRleCA9IGNoYW5uZWw7CisJYXR0ci0+ZGV2X2F0dHIuYXR0ci5uYW1lICA9IGF0dHJzLT5pbl9uYW1lOworCWF0dHItPmRldl9hdHRyLmF0dHIubW9kZSAgPSBTX0lSVUdPOworCWF0dHItPmRldl9hdHRyLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKKwlhdHRyLT5kZXZfYXR0ci5zaG93ID0gczNjX2h3bW9uX2NoX3Nob3c7CisKKwlyZXQgPSAgZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmF0dHItPmRldl9hdHRyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgaW5wdXQgYXR0cmlidXRlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBpZiB0aGlzIGhhcyBhIG5hbWUsIGFkZCBhIGxhYmVsICovCisJaWYgKGNmZy0+bmFtZSkgeworCQlzbnByaW50ZihhdHRycy0+bGFiZWxfbmFtZSwgc2l6ZW9mKGF0dHJzLT5sYWJlbF9uYW1lKSwKKwkJCSAiaW4lZF9sYWJlbCIsIGNoYW5uZWwpOworCisJCWF0dHIgPSAmYXR0cnMtPmxhYmVsOworCQlhdHRyLT5pbmRleCA9IGNoYW5uZWw7CisJCWF0dHItPmRldl9hdHRyLmF0dHIubmFtZSAgPSBhdHRycy0+bGFiZWxfbmFtZTsKKwkJYXR0ci0+ZGV2X2F0dHIuYXR0ci5tb2RlICA9IFNfSVJVR087CisJCWF0dHItPmRldl9hdHRyLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKKwkJYXR0ci0+ZGV2X2F0dHIuc2hvdyA9IHMzY19od21vbl9sYWJlbF9zaG93OworCisJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZhdHRyLT5kZXZfYXR0cik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmYXR0cnMtPmluLmRldl9hdHRyKTsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBsYWJlbCBhdHRyaWJ1dGVcbiIpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgczNjX2h3bW9uX3JlbW92ZV9hdHRyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBzM2NfaHdtb25fYXR0ciAqYXR0cnMpCit7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmF0dHJzLT5pbi5kZXZfYXR0cik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmF0dHJzLT5sYWJlbC5kZXZfYXR0cik7Cit9CisKKy8qKgorICogczNjX2h3bW9uX3Byb2JlIC0gZGV2aWNlIHByb2JlIGVudHJ5LgorICogQGRldjogVGhlIGRldmljZSBiZWluZyBwcm9iZWQuCisqLworc3RhdGljIGludCBfX2RldmluaXQgczNjX2h3bW9uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjX2h3bW9uX3BkYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHMzY19od21vbiAqaHdtb247CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWh3bW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzY19od21vbiksIEdGUF9LRVJORUwpOworCWlmIChod21vbiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBod21vbik7CisKKwlpbml0X01VVEVYKCZod21vbi0+bG9jayk7CisKKwkvKiBSZWdpc3RlciB3aXRoIHRoZSBjb3JlIEFEQyBkcml2ZXIuICovCisKKwlod21vbi0+Y2xpZW50ID0gczNjX2FkY19yZWdpc3RlcihkZXYsIE5VTEwsIE5VTEwsIDApOworCWlmIChJU19FUlIoaHdtb24tPmNsaWVudCkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgcmVnaXN0ZXIgYWRjXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihod21vbi0+Y2xpZW50KTsKKwkJZ290byBlcnJfbWVtOworCX0KKworCS8qIGFkZCBhdHRyaWJ1dGVzIGZvciBvdXIgYWRjIGRldmljZXMuICovCisKKwlyZXQgPSBzM2NfaHdtb25fYWRkX3JhdygmZGV2LT5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlZ2lzdGVyZWQ7CisKKwkvKiByZWdpc3RlciB3aXRoIHRoZSBod21vbiBjb3JlICovCisKKwlod21vbi0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmRldik7CisJaWYgKElTX0VSUihod21vbi0+aHdtb25fZGV2KSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImVycm9yIHJlZ2lzdGVyaW5nIHdpdGggaHdtb25cbiIpOworCQlyZXQgPSBQVFJfRVJSKGh3bW9uLT5od21vbl9kZXYpOworCQlnb3RvIGVycl9yYXdfYXR0cmlidXRlOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYXRhLT5pbik7IGkrKykgeworCQlpZiAoIXBkYXRhLT5pbltpXSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwZGF0YS0+aW5baV0tPm11bHQgPj0gMHgxMDAwMCkKKwkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgImNoYW5uZWwgJWQgbXVsdGlwbGllciB0b28gbGFyZ2VcbiIsCisJCQkJIGkpOworCisJCXJldCA9IHMzY19od21vbl9jcmVhdGVfYXR0cigmZGV2LT5kZXYsIHBkYXRhLT5pbltpXSwKKwkJCQkJICAgICZod21vbi0+YXR0cnNbaV0sIGkpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJImVycm9yIGNyZWF0aW5nIGNoYW5uZWwgJWRcbiIsIGkpOworCisJCQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCQkJczNjX2h3bW9uX3JlbW92ZV9hdHRyKCZkZXYtPmRldiwKKwkJCQkJCQkgICAgICAmaHdtb24tPmF0dHJzW2ldKTsKKworCQkJZ290byBlcnJfaHdtb25fcmVnaXN0ZXI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl9od21vbl9yZWdpc3RlcjoKKwlod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbi0+aHdtb25fZGV2KTsKKworIGVycl9yYXdfYXR0cmlidXRlOgorCXMzY19od21vbl9yZW1vdmVfcmF3KCZkZXYtPmRldik7CisKKyBlcnJfcmVnaXN0ZXJlZDoKKwlzM2NfYWRjX3JlbGVhc2UoaHdtb24tPmNsaWVudCk7CisKKyBlcnJfbWVtOgorCWtmcmVlKGh3bW9uKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzM2NfaHdtb25fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgczNjX2h3bW9uICpod21vbiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IGk7CisKKwlzM2NfaHdtb25fcmVtb3ZlX3JhdygmZGV2LT5kZXYpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdtb24tPmF0dHJzKTsgaSsrKQorCQlzM2NfaHdtb25fcmVtb3ZlX2F0dHIoJmRldi0+ZGV2LCAmaHdtb24tPmF0dHJzW2ldKTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uLT5od21vbl9kZXYpOworCXMzY19hZGNfcmVsZWFzZShod21vbi0+Y2xpZW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NfaHdtb25fZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCQk9ICJzM2MtaHdtb24iLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gczNjX2h3bW9uX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjX2h3bW9uX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2NfaHdtb25faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY19od21vbl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjX2h3bW9uX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjX2h3bW9uX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHMzY19od21vbl9pbml0KTsKK21vZHVsZV9leGl0KHMzY19od21vbl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTM0MgQURDIEhXTW9uIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzM2MtaHdtb24iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IDc2MmUxZTUuLjA0OTU1NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtMTEzNCwzNSArMTEzNCw0NCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGkyY19weGFfc3VzcGVuZF9sYXRlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBpMmNfcHhhX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKIAljbGtfZGlzYWJsZShpMmMtPmNsayk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpMmNfcHhhX3Jlc3VtZV9lYXJseShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGkyY19weGFfcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHB4YV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJY2xrX2VuYWJsZShpMmMtPmNsayk7CiAJaTJjX3B4YV9yZXNldChpMmMpOwogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBpMmNfcHhhX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmRfbm9pcnEgPSBpMmNfcHhhX3N1c3BlbmRfbm9pcnEsCisJLnJlc3VtZV9ub2lycSA9IGkyY19weGFfcmVzdW1lX25vaXJxLAorfTsKKworI2RlZmluZSBJMkNfUFhBX0RFVl9QTV9PUFMgKCZpMmNfcHhhX2Rldl9wbV9vcHMpCiAjZWxzZQotI2RlZmluZSBpMmNfcHhhX3N1c3BlbmRfbGF0ZSBOVUxMCi0jZGVmaW5lIGkyY19weGFfcmVzdW1lX2Vhcmx5IE5VTEwKKyNkZWZpbmUgSTJDX1BYQV9ERVZfUE1fT1BTIE5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaTJjX3B4YV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKGkyY19weGFfcmVtb3ZlKSwKLQkuc3VzcGVuZF9sYXRlCT0gaTJjX3B4YV9zdXNwZW5kX2xhdGUsCi0JLnJlc3VtZV9lYXJseQk9IGkyY19weGFfcmVzdW1lX2Vhcmx5LAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyeHgtaTJjIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IEkyQ19QWEFfREVWX1BNX09QUywKIAl9LAogCS5pZF90YWJsZQk9IGkyY19weGFfaWRfdGFibGUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCAyMGJiMGNlLi45NmFhZmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtOTQ2LDE3ICs5NDYsMjAgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzM2MyNHh4X2kyY19zdXNwZW5kX2xhdGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAotCQkJCSAgICBwbV9tZXNzYWdlX3QgbXNnKQorc3RhdGljIGludCBzM2MyNHh4X2kyY19zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzM2MyNHh4X2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKIAlpMmMtPnN1c3BlbmRlZCA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNHh4X2kyY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzM2MyNHh4X2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWkyYy0+c3VzcGVuZGVkID0gMDsKIAlzM2MyNHh4X2kyY19pbml0KGkyYyk7CkBAIC05NjQsOSArOTY3LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzM2MyNHh4X2kyY19kZXZfcG1fb3BzID0geworCS5zdXNwZW5kX25vaXJxID0gczNjMjR4eF9pMmNfc3VzcGVuZF9ub2lycSwKKwkucmVzdW1lID0gczNjMjR4eF9pMmNfcmVzdW1lLAorfTsKKworI2RlZmluZSBTM0MyNFhYX0RFVl9QTV9PUFMgKCZzM2MyNHh4X2kyY19kZXZfcG1fb3BzKQogI2Vsc2UKLSNkZWZpbmUgczNjMjR4eF9pMmNfc3VzcGVuZF9sYXRlIE5VTEwKLSNkZWZpbmUgczNjMjR4eF9pMmNfcmVzdW1lIE5VTEwKKyNkZWZpbmUgUzNDMjRYWF9ERVZfUE1fT1BTIE5VTEwKICNlbmRpZgogCiAvKiBkZXZpY2UgZHJpdmVyIGZvciBwbGF0Zm9ybSBidXMgYml0cyAqLwpAQCAtOTg1LDEyICs5OTMsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0eHhfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjR4eF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNHh4X2kyY19yZW1vdmUsCi0JLnN1c3BlbmRfbGF0ZQk9IHMzYzI0eHhfaTJjX3N1c3BlbmRfbGF0ZSwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaTJjX3Jlc3VtZSwKIAkuaWRfdGFibGUJPSBzM2MyNHh4X2RyaXZlcl9pZHMsCiAJLmRyaXZlcgkJPSB7CiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9ICJzM2MtaTJjIiwKKwkJLnBtCT0gUzNDMjRYWF9ERVZfUE1fT1BTLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCmluZGV4IGY1YzU4NmMuLmE0ZTlkY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZXRoMTM5NC5jCkBAIC0xNjksMTAgKzE2OSwxMSBAQAogc3RhdGljIHZvaWQgZXRoZXIxMzk0X2hlYWRlcl9jYWNoZV91cGRhdGUoc3RydWN0IGhoX2NhY2hlICpoaCwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhZGRyKTsKLXN0YXRpYyBpbnQgZXRoZXIxMzk0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGV0aGVyMTM5NF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZXRoZXIxMzk0X2lzbyhzdHJ1Y3QgaHBzYl9pc28gKmlzbyk7CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwogCiBzdGF0aWMgaW50IGV0aGVyMTM5NF93cml0ZShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgc3JjaWQsIGludCBkZXN0aWQsCiAJCQkgICBxdWFkbGV0X3QgKmRhdGEsIHU2NCBhZGRyLCBzaXplX3QgbGVuLCB1MTYgZmxhZ3MpOwpAQCAtMTMwMCw3ICsxMzAxLDYgQEAKIAogCWhwc2JfaXNvX3JlY3ZfcmVsZWFzZV9wYWNrZXRzKGlzbywgaSk7CiAKLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNTU1LDcgKzE1NTUsOCBAQAogfQogCiAvKiBUcmFuc21pdCBhIHBhY2tldCAoY2FsbGVkIGJ5IGtlcm5lbCkgKi8KLXN0YXRpYyBpbnQgZXRoZXIxMzk0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZXRoZXIxMzk0X3R4KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXRoMTM5NGhkciBoZHJfYnVmOwogCXN0cnVjdCBldGgxMzk0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTY5NCwxNCArMTY5NSw2IEBACiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQkvKgotCSAqIEZJWE1FOiBBY2NvcmRpbmcgdG8gYSBwYXRjaCBmcm9tIDIwMDMtMDItMjYsICJyZXR1cm5pbmcgbm9uLXplcm8KLQkgKiBjYXVzZXMgc2VyaW91cyBwcm9ibGVtcyIgaGVyZSwgYWxsZWdlZGx5LiAgQmVmb3JlIHRoYXQgcGF0Y2gsCi0JICogLUVSUk5PIHdhcyByZXR1cm5lZCB3aGljaCBpcyBub3QgYXBwcm9wcmlhdGUgdW5kZXIgTGludXggMi42LgotCSAqIFBlcmhhcHMgbW9yZSBuZWVkcyB0byBiZSBkb25lPyAgU3RvcCB0aGUgcXVldWUgaW4gc2VyaW91cwotCSAqIGNvbmRpdGlvbnMgYW5kIHJlc3RhcnQgaXQgZWxzZXdoZXJlPwotCSAqLwotCS8qIHJldHVybiBORVRERVZfVFhfQlVTWTsgKi8KIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0xNzEyLDcgKzE3MDUsNyBAQAogCXN0cmNweShpbmZvLT5idXNfaW5mbywgImllZWUxMzk0Iik7IC8qIEZJWE1FIHByb3ZpZGUgbW9yZSBkZXRhaWw/ICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGV0aGVyMTM5NF9nZXRfZHJ2aW5mbwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlODAyMTU0L2Zha2VoYXJkLmMgYi9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYwppbmRleCAwMzg0MTQ0Li45NmEyOTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYworKysgYi9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYwpAQCAtMjYsMTEgKzI2LDIzIEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC9hZl9pZWVlODAyMTU0Lmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvbWFjX2RlZi5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L25sODAyMTU0Lmg+CisjaW5jbHVkZSA8bmV0L2FmX2llZWU4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NF9uZXRkZXYuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9ubDgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC93cGFuLXBoeS5oPgogCitzdHJ1Y3Qgd3Bhbl9waHkgKm5ldF90b19waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldi0+ZGV2LnBhcmVudCwgc3RydWN0IHdwYW5fcGh5LCBkZXYpOworfQorCisvKioKKyAqIGZha2VfZ2V0X3Bhbl9pZCAtIFJldHJpZXZlIHRoZSBQQU4gSUQgb2YgdGhlIGRldmljZS4KKyAqIEBkZXY6IFRoZSBuZXR3b3JrIGRldmljZSB0byByZXRyaWV2ZSB0aGUgUEFOIG9mLgorICoKKyAqIFJldHVybiB0aGUgSUQgb2YgdGhlIFBBTiBmcm9tIHRoZSBQSUIuCisgKi8KIHN0YXRpYyB1MTYgZmFrZV9nZXRfcGFuX2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJQlVHX09OKGRldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCk7CkBAIC0zOCw2ICs1MCwxNCBAQAogCXJldHVybiAweGViYTE7CiB9CiAKKy8qKgorICogZmFrZV9nZXRfc2hvcnRfYWRkciAtIFJldHJpZXZlIHRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuCisgKiBAZGV2OiBUaGUgbmV0d29yayBkZXZpY2UgdG8gcmV0cmlldmUgdGhlIHNob3J0IGFkZHJlc3Mgb2YuCisgKgorICogUmV0dXJucyB0aGUgSUVFRSA4MDIuMTUuNCBzaG9ydC1mb3JtIGFkZHJlc3MgY2FjaGVkIGZvciB0aGlzCisgKiBkZXZpY2UuIElmIHRoZSBkZXZpY2UgaGFzIG5vdCB5ZXQgaGFkIGEgc2hvcnQgYWRkcmVzcyBhc3NpZ25lZAorICogdGhlbiB0aGlzIHNob3VsZCByZXR1cm4gMHhGRkZGIHRvIGluZGljYXRlIGEgbGFjayBvZiBhc3NvY2lhdGlvbi4KKyAqLwogc3RhdGljIHUxNiBmYWtlX2dldF9zaG9ydF9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJQlVHX09OKGRldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCk7CkBAIC00NSw2ICs2NSwxOSBAQAogCXJldHVybiAweDE7CiB9CiAKKy8qKgorICogZmFrZV9nZXRfZHNuIC0gUmV0cmlldmUgdGhlIERTTiBvZiB0aGUgZGV2aWNlLgorICogQGRldjogVGhlIG5ldHdvcmsgZGV2aWNlIHRvIHJldHJpZXZlIHRoZSBEU04gZm9yLgorICoKKyAqIFJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgRFNOIGZvciB0aGUgbmV0d29yayBkZXZpY2UuCisgKiBUaGUgRFNOIGlzIHRoZSBzZXF1ZW5jZSBudW1iZXIgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byBlYWNoCisgKiBwYWNrZXQgb3IgTUFDIGNvbW1hbmQgZnJhbWUgYnkgdGhlIE1BQyBkdXJpbmcgdHJhbnNtaXNzaW9uLgorICoKKyAqIERTTiBtZWFucyAnRGF0YSBTZXF1ZW5jZSBOdW1iZXInLgorICoKKyAqIE5vdGU6IFRoaXMgaXMgaW4gc2VjdGlvbiA3LjIuMS4yIG9mIHRoZSBJRUVFIDgwMi4xNS40LTIwMDYKKyAqICAgICAgIGRvY3VtZW50LgorICovCiBzdGF0aWMgdTggZmFrZV9nZXRfZHNuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJQlVHX09OKGRldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCk7CkBAIC01Miw2ICs4NSwxOSBAQAogCXJldHVybiAweDAwOyAvKiBEU04gYXJlIGltcGxlbWVudGVkIGluIEhXLCBzbyByZXR1cm4ganVzdCAwICovCiB9CiAKKy8qKgorICogZmFrZV9nZXRfYnNuIC0gUmV0cmlldmUgdGhlIEJTTiBvZiB0aGUgZGV2aWNlLgorICogQGRldjogVGhlIG5ldHdvcmsgZGV2aWNlIHRvIHJldHJpZXZlIHRoZSBCU04gZm9yLgorICoKKyAqIFJldHVybnMgdGhlIElFRUUgODAyLjE1LjQgQlNOIGZvciB0aGUgbmV0d29yayBkZXZpY2UuCisgKiBUaGUgQlNOIGlzIHRoZSBzZXF1ZW5jZSBudW1iZXIgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byBlYWNoCisgKiBiZWFjb24gZnJhbWUgc2VudCBieSB0aGUgTUFDLgorICoKKyAqIEJTTiBtZWFucyAnQmVhY29uIFNlcXVlbmNlIE51bWJlcicuCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuMi4xLjIgb2YgdGhlIElFRUUgODAyLjE1LjQtMjAwNgorICogICAgICAgZG9jdW1lbnQuCisgKi8KIHN0YXRpYyB1OCBmYWtlX2dldF9ic24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlCVUdfT04oZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KTsKQEAgLTU5LDQwICsxMDUsMTMwIEBACiAJcmV0dXJuIDB4MDA7IC8qIEJTTiBhcmUgaW1wbGVtZW50ZWQgaW4gSFcsIHNvIHJldHVybiBqdXN0IDAgKi8KIH0KIAorLyoqCisgKiBmYWtlX2Fzc29jX3JlcSAtIE1ha2UgYW4gYXNzb2NpYXRpb24gcmVxdWVzdCB0byB0aGUgSFcuCisgKiBAZGV2OiBUaGUgbmV0d29yayBkZXZpY2Ugd2hpY2ggd2UgYXJlIGFzc29jaWF0aW5nIHRvIGEgbmV0d29yay4KKyAqIEBhZGRyOiBUaGUgY29vcmRpbmF0b3Igd2l0aCB3aGljaCB3ZSB3aXNoIHRvIGFzc29jaWF0ZS4KKyAqIEBjaGFubmVsOiBUaGUgY2hhbm5lbCBvbiB3aGljaCB0byBhc3NvY2lhdGUuCisgKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiBmaWVsZCB0byB1c2UgaW4gdGhlIGFzc29jaWF0aW9uLgorICoKKyAqIFN0YXJ0IGFuIGFzc29jaWF0aW9uIHdpdGggYSBjb29yZGluYXRvci4gVGhlIGNvb3JkaW5hdG9yJ3MgYWRkcmVzcworICogYW5kIFBBTiBJRCBjYW4gYmUgZm91bmQgaW4gQGFkZHIuCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuMy4xIGFuZCA3LjUuMy4xIG9mIHRoZSBJRUVFCisgKiAgICAgICA4MDIuMTUuNC0yMDA2IGRvY3VtZW50LgorICovCiBzdGF0aWMgaW50IGZha2VfYXNzb2NfcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsIHU4IGNoYW5uZWwsIHU4IGNhcCkKKwkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwgdTggY2hhbm5lbCwgdTggcGFnZSwgdTggY2FwKQogeworCXN0cnVjdCB3cGFuX3BoeSAqcGh5ID0gbmV0X3RvX3BoeShkZXYpOworCisJbXV0ZXhfbG9jaygmcGh5LT5waWJfbG9jayk7CisJcGh5LT5jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsOworCXBoeS0+Y3VycmVudF9wYWdlID0gcGFnZTsKKwltdXRleF91bmxvY2soJnBoeS0+cGliX2xvY2spOworCiAJLyogV2Ugc2ltcGx5IGVtdWxhdGUgaXQgaGVyZSAqLwogCXJldHVybiBpZWVlODAyMTU0X25sX2Fzc29jX2NvbmZpcm0oZGV2LCBmYWtlX2dldF9zaG9ydF9hZGRyKGRldiksCiAJCQlJRUVFODAyMTU0X1NVQ0NFU1MpOwogfQogCisvKioKKyAqIGZha2VfYXNzb2NfcmVzcCAtIFNlbmQgYW4gYXNzb2NpYXRpb24gcmVzcG9uc2UgdG8gYSBkZXZpY2UuCisgKiBAZGV2OiBUaGUgbmV0d29yayBkZXZpY2Ugb24gd2hpY2ggdG8gc2VuZCB0aGUgcmVzcG9uc2UuCisgKiBAYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSB0byByZXNwb25kIHRvLgorICogQHNob3J0X2FkZHI6IFRoZSBhc3NpZ25lZCBzaG9ydCBhZGRyZXNzIGZvciB0aGUgZGV2aWNlIChpZiBhbnkpLgorICogQHN0YXR1czogVGhlIHJlc3VsdCBvZiB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdC4KKyAqCisgKiBRdWV1ZSB0aGUgYXNzb2NpYXRpb24gcmVzcG9uc2Ugb2YgdGhlIGNvb3JkaW5hdG9yIHRvIGFub3RoZXIKKyAqIGRldmljZSdzIGF0dGVtcHQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5ldHdvcmsgd2hpY2ggd2UKKyAqIGNvb3JkaW5hdGUuIFRoaXMgaXMgdGhlbiBhZGRlZCB0byB0aGUgaW5kaXJlY3Qtc2VuZCBxdWV1ZSB0byBiZQorICogdHJhbnNtaXR0ZWQgdG8gdGhlIGVuZCBkZXZpY2Ugd2hlbiBpdCBwb2xscyBmb3IgZGF0YS4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4zLjIgYW5kIDcuNS4zLjEgb2YgdGhlIElFRUUKKyAqICAgICAgIDgwMi4xNS40LTIwMDYgZG9jdW1lbnQuCisgKi8KIHN0YXRpYyBpbnQgZmFrZV9hc3NvY19yZXNwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmFkZHIsIHUxNiBzaG9ydF9hZGRyLCB1OCBzdGF0dXMpCiB7CiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogZmFrZV9kaXNhc3NvY19yZXEgLSBEaXNhc3NvY2lhdGUgYSBkZXZpY2UgZnJvbSBhIG5ldHdvcmsuCisgKiBAZGV2OiBUaGUgbmV0d29yayBkZXZpY2Ugb24gd2hpY2ggd2UncmUgZGlzYXNzb2NpYXRpbmcgYSBkZXZpY2UuCisgKiBAYWRkcjogVGhlIGRldmljZSB0byBkaXNhc3NvY2lhdGUgZnJvbSB0aGUgbmV0d29yay4KKyAqIEByZWFzb246IFRoZSByZWFzb24gdG8gZ2l2ZSB0byB0aGUgZGV2aWNlIGZvciBiZWluZyBkaXNhc3NvY2lhdGVkLgorICoKKyAqIFRoaXMgc2VuZHMgYSBkaXNhc3NvY2lhdGlvbiBub3RpZmljYXRpb24gdG8gdGhlIGRldmljZSBiZWluZworICogZGlzYXNzb2NpYXRlZCBmcm9tIHRoZSBuZXR3b3JrLgorICoKKyAqIE5vdGU6IFRoaXMgaXMgaW4gc2VjdGlvbiA3LjUuMy4yIG9mIHRoZSBJRUVFIDgwMi4xNS40LTIwMDYKKyAqICAgICAgIGRvY3VtZW50LCB3aXRoIHRoZSByZWFzb24gZGVzY3JpYmVkIGluIDcuMy4zLjIuCisgKi8KIHN0YXRpYyBpbnQgZmFrZV9kaXNhc3NvY19yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwgdTggcmVhc29uKQogewogCXJldHVybiBpZWVlODAyMTU0X25sX2Rpc2Fzc29jX2NvbmZpcm0oZGV2LCBJRUVFODAyMTU0X1NVQ0NFU1MpOwogfQogCisvKioKKyAqIGZha2Vfc3RhcnRfcmVxIC0gU3RhcnQgYW4gSUVFRSA4MDIuMTUuNCBQQU4uCisgKiBAZGV2OiBUaGUgbmV0d29yayBkZXZpY2Ugb24gd2hpY2ggdG8gc3RhcnQgdGhlIFBBTi4KKyAqIEBhZGRyOiBUaGUgY29vcmRpbmF0b3IgYWRkcmVzcyB0byB1c2Ugd2hlbiBzdGFydGluZyB0aGUgUEFOLgorICogQGNoYW5uZWw6IFRoZSBjaGFubmVsIG9uIHdoaWNoIHRvIHN0YXJ0IHRoZSBQQU4uCisgKiBAYmNuX29yZDogQmVhY29uIG9yZGVyLgorICogQHNmX29yZDogU3VwZXJmcmFtZSBvcmRlci4KKyAqIEBwYW5fY29vcmQ6IFdoZXRoZXIgb3Igbm90IHdlIGFyZSB0aGUgUEFOIGNvb3JkaW5hdG9yIG9yIGp1c3QKKyAqICAgICAgICAgICAgIHJlcXVlc3RpbmcgYSByZWFsaWdubWVudCBwZXJoYXBzPworICogQGJseDogQmF0dGVyeSBMaWZlIEV4dGVuc2lvbiBmZWF0dXJlIGJpdGZpZWxkLgorICogQGNvb3JkX3JlYWxpZ246IFNvbWV0aGluZyB0byByZWFsaWduIHNvbWV0aGluZyBlbHNlLgorICoKKyAqIElmIHBhbl9jb29yZCBpcyBub24temVybyB0aGVuIHRoaXMgc3RhcnRzIGEgbmV0d29yayB3aXRoIHRoZQorICogcHJvdmlkZWQgcGFyYW1ldGVycywgb3RoZXJ3aXNlIGl0IGF0dGVtcHRzIGEgY29vcmRpbmF0b3IKKyAqIHJlYWxpZ25tZW50IG9mIHRoZSBzdGF0ZWQgbmV0d29yayBpbnN0ZWFkLgorICoKKyAqIE5vdGU6IFRoaXMgaXMgaW4gc2VjdGlvbiA3LjUuMi4zIG9mIHRoZSBJRUVFIDgwMi4xNS40LTIwMDYKKyAqIGRvY3VtZW50LCB3aXRoIDcuMy44IGRlc2NyaWJpbmcgY29vcmRpbmF0b3IgcmVhbGlnbm1lbnQuCisgKi8KIHN0YXRpYyBpbnQgZmFrZV9zdGFydF9yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwKLQkJCQl1OCBjaGFubmVsLAorCQkJCXU4IGNoYW5uZWwsIHU4IHBhZ2UsCiAJCQkJdTggYmNuX29yZCwgdTggc2Zfb3JkLCB1OCBwYW5fY29vcmQsIHU4IGJseCwKIAkJCQl1OCBjb29yZF9yZWFsaWduKQogeworCXN0cnVjdCB3cGFuX3BoeSAqcGh5ID0gbmV0X3RvX3BoeShkZXYpOworCisJbXV0ZXhfbG9jaygmcGh5LT5waWJfbG9jayk7CisJcGh5LT5jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsOworCXBoeS0+Y3VycmVudF9wYWdlID0gcGFnZTsKKwltdXRleF91bmxvY2soJnBoeS0+cGliX2xvY2spOworCisJLyogV2UgZG9uJ3QgZW11bGF0ZSBiZWFjb25zIGhlcmUgYXQgYWxsLCBzbyBTVEFSVCBzaG91bGQgZmFpbCAqLworCWllZWU4MDIxNTRfbmxfc3RhcnRfY29uZmlybShkZXYsIElFRUU4MDIxNTRfSU5WQUxJRF9QQVJBTUVURVIpOwogCXJldHVybiAwOwogfQogCisvKioKKyAqIGZha2Vfc2Nhbl9yZXEgLSBTdGFydCBhIGNoYW5uZWwgc2Nhbi4KKyAqIEBkZXY6IFRoZSBuZXR3b3JrIGRldmljZSBvbiB3aGljaCB0byBwZXJmb3JtIGEgY2hhbm5lbCBzY2FuLgorICogQHR5cGU6IFRoZSB0eXBlIG9mIHNjYW4gdG8gcGVyZm9ybS4KKyAqIEBjaGFubmVsczogVGhlIGNoYW5uZWwgYml0bWFzayB0byBzY2FuLgorICogQGR1cmF0aW9uOiBIb3cgbG9uZyB0byBzcGVuZCBvbiBlYWNoIGNoYW5uZWwuCisgKgorICogVGhpcyBzdGFydHMgZWl0aGVyIGEgcGFzc2l2ZSAoZW5lcmd5KSBzY2FuIG9yIGFuIGFjdGl2ZSAoUEFOKSBzY2FuCisgKiBvbiB0aGUgY2hhbm5lbHMgaW5kaWNhdGVkIGluIHRoZSBAY2hhbm5lbHMgYml0bWFzay4gVGhlIGR1cmF0aW9uIG9mCisgKiB0aGUgc2NhbiBpcyBtZWFzdXJlZCBpbiB0ZXJtcyBvZiBzdXBlcmZyYW1lIGR1cmF0aW9uLiBTcGVjaWZpY2FsbHksCisgKiB0aGUgc2NhbiB3aWxsIHNwZW5kIGFCYXNlU3VwZXJGcmFtZUR1cmF0aW9uICogKCgyXm4pICsgMSkgb24gZWFjaAorICogY2hhbm5lbC4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy41LjIuMSBvZiB0aGUgSUVFRSA4MDIuMTUuNC0yMDA2IGRvY3VtZW50LgorICovCiBzdGF0aWMgaW50IGZha2Vfc2Nhbl9yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggdHlwZSwgdTMyIGNoYW5uZWxzLAotCQl1OCBkdXJhdGlvbikKKwkJdTggcGFnZSwgdTggZHVyYXRpb24pCiB7CiAJdTggZWRsWzI3XSA9IHt9OwogCXJldHVybiBpZWVlODAyMTU0X25sX3NjYW5fY29uZmlybShkZXYsIElFRUU4MDIxNTRfU1VDQ0VTUywgdHlwZSwKLQkJCWNoYW5uZWxzLAorCQkJY2hhbm5lbHMsIHBhZ2UsCiAJCQl0eXBlID09IElFRUU4MDIxNTRfTUFDX1NDQU5fRUQgPyBlZGwgOiBOVUxMKTsKIH0KIApAQCAtMTIxLDcgKzI1Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9mYWtlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpZWVlODAyMTU0X2Zha2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXNrYi0+aWlmID0gZGV2LT5pZmluZGV4OwogCXNrYi0+ZGV2ID0gZGV2OwpAQCAtMTMyLDcgKzI2OSw3IEBACiAKIAkvKiBGSVhNRTogZG8gaGFyZHdhcmUgd29yayBoZXJlIC4uLiAqLwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCkBAIC0xNzQsNiArMzExLDE0IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBpZWVlODAyMTU0X2Zha2VfbWFjX2FkZHIsCiB9OwogCitzdGF0aWMgdm9pZCBpZWVlODAyMTU0X2Zha2VfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSA9IG5ldF90b19waHkoZGV2KTsKKworCXdwYW5fcGh5X3VucmVnaXN0ZXIocGh5KTsKKwlmcmVlX25ldGRldihkZXYpOworCXdwYW5fcGh5X2ZyZWUocGh5KTsKK30KIAogc3RhdGljIHZvaWQgaWVlZTgwMjE1NF9mYWtlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xODYsMjIgKzMzMSwzNCBAQAogCWRldi0+dHlwZQkJPSBBUlBIUkRfSUVFRTgwMjE1NDsKIAlkZXYtPmZsYWdzCQk9IElGRl9OT0FSUCB8IElGRl9CUk9BRENBU1Q7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IDA7CisJZGV2LT5kZXN0cnVjdG9yCQk9IGllZWU4MDIxNTRfZmFrZV9kZXN0cnVjdDsKIH0KIAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpZWVlODAyMTU0ZmFrZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPQotCQlhbGxvY19uZXRkZXYoMCwgImhhcmR3cGFuJWQiLCBpZWVlODAyMTU0X2Zha2Vfc2V0dXApOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHdwYW5fcGh5ICpwaHkgPSB3cGFuX3BoeV9hbGxvYygwKTsKIAlpbnQgZXJyOwogCi0JaWYgKCFkZXYpCisJaWYgKCFwaHkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJoYXJkd3BhbiVkIiwgaWVlZTgwMjE1NF9mYWtlX3NldHVwKTsKKwlpZiAoIWRldikgeworCQl3cGFuX3BoeV9mcmVlKHBoeSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBoeS0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBkZXY7CisKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgIlx4YmFceGJlXHhjYVx4ZmVceGRlXHhhZFx4YmVceGVmIiwKIAkJCWRldi0+YWRkcl9sZW4pOwogCW1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAKKwlwaHktPmNoYW5uZWxzX3N1cHBvcnRlZCA9ICgxIDw8IDI3KSAtIDE7CisJcGh5LT50cmFuc21pdF9wb3dlciA9IDB4YmY7CisKIAlkZXYtPm5ldGRldl9vcHMgPSAmZmFrZV9vcHM7CiAJZGV2LT5tbF9wcml2ID0gJmZha2VfbWxtZTsKIApAQCAtMjE1LDE1ICszNzIsMTggQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGh5LT5kZXYpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAorCWVyciA9IHdwYW5fcGh5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHBoeSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXQ7CiAKLQogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBZGRlZCBpZWVlODAyMTU0IEhhcmRNQUMgaGFyZHdhcmVcbiIpOwogCXJldHVybiAwOwogCkBAIC0yMzYsNyArMzk2LDYgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCmluZGV4IDgyNTA3NDAuLmM2MWZkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCkBAIC01MjYsNyArNTI2LDYgQEAKIAogCQluZXRpZl9yeChza2IpOwogCi0JCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGJ1ZmxlbjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwppbmRleCA2M2ExYThlLi4zNTEyZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKQEAgLTI3NDMsNyArMjc0Myw3IEBACiAJCQkJfQogCiBza2lwX3J4X2luZGljYXRlMDoKLQkJCQluZXN2bmljLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJCTsKIAkJCQkvKiBuZXN2bmljLT5uZXRzdGF0cy5yeF9wYWNrZXRzKys7ICovCiAJCQkJLyogbmVzdm5pYy0+bmV0c3RhdHMucnhfYnl0ZXMgKz0gcnhfcGt0X3NpemU7ICovCiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCmluZGV4IGM2ZTY2MTEuLjUzOGU0MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCkBAIC0xNTA4LDcgKzE1MDgsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmVzX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3NldHRpbmdzID0gbmVzX25ldGRldl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IG5lc19uZXRkZXZfc2V0X3NldHRpbmdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IDhmNGI0ZmMuLjMwYmRmNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTY2Miw3ICs2NjIsNiBAQAogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3B1bGwoc2tiLCBJUE9JQl9FTkNBUF9MRU4pOwogCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkrK2Rldi0+c3RhdHMucnhfcGFja2V0czsKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggZTM1ZjRhMC4uOGM5MWQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYwpAQCAtMjc2LDcgKzI3Niw2IEBACiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlza2JfcHVsbChza2IsIElQT0lCX0VOQ0FQX0xFTik7CiAKLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCSsrZGV2LT5zdGF0cy5yeF9wYWNrZXRzOwogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDlhMWQ1NWIuLjkwMWIyNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtNDUyLDYgKzQ1Miw3NiBAQAogCQkoam95ZGV2LT5leGlzdCA/ICAwIDogKFBPTExIVVAgfCBQT0xMRVJSKSk7CiB9CiAKK3N0YXRpYyBpbnQgam95ZGV2X2hhbmRsZV9KU0lPQ1NBWE1BUChzdHJ1Y3Qgam95ZGV2ICpqb3lkZXYsCisJCQkJICAgICB2b2lkIF9fdXNlciAqYXJncCwgc2l6ZV90IGxlbikKK3sKKwlfX3U4ICphYnNwYW07CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwlsZW4gPSBtaW4obGVuLCBzaXplb2Yoam95ZGV2LT5hYnNwYW0pKTsKKworCS8qIFZhbGlkYXRlIHRoZSBtYXAuICovCisJYWJzcGFtID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYWJzcGFtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihhYnNwYW0sIGFyZ3AsIGxlbikpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGpveWRldi0+bmFiczsgaSsrKSB7CisJCWlmIChhYnNwYW1baV0gPiBBQlNfTUFYKSB7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwltZW1jcHkoam95ZGV2LT5hYnNwYW0sIGFic3BhbSwgbGVuKTsKKworIG91dDoKKwlrZnJlZShhYnNwYW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgam95ZGV2X2hhbmRsZV9KU0lPQ1NCVE5NQVAoc3RydWN0IGpveWRldiAqam95ZGV2LAorCQkJCSAgICAgIHZvaWQgX191c2VyICphcmdwLCBzaXplX3QgbGVuKQoreworCV9fdTE2ICprZXlwYW07CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwlsZW4gPSBtaW4obGVuLCBzaXplb2Yoam95ZGV2LT5rZXlwYW0pKTsKKworCS8qIFZhbGlkYXRlIHRoZSBtYXAuICovCisJa2V5cGFtID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICgha2V5cGFtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihrZXlwYW0sIGFyZ3AsIGxlbikpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGpveWRldi0+bmtleTsgaSsrKSB7CisJCWlmIChrZXlwYW1baV0gPiBLRVlfTUFYIHx8IGtleXBhbVtpXSA8IEJUTl9NSVNDKSB7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwltZW1jcHkoam95ZGV2LT5rZXlwYW0sIGtleXBhbSwgbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCBqb3lkZXYtPm5rZXk7IGkrKykKKwkJam95ZGV2LT5rZXltYXBba2V5cGFtW2ldIC0gQlROX01JU0NdID0gaTsKKworIG91dDoKKwlrZnJlZShrZXlwYW0pOworCXJldHVybiByZXR2YWw7Cit9CisKKwogc3RhdGljIGludCBqb3lkZXZfaW9jdGxfY29tbW9uKHN0cnVjdCBqb3lkZXYgKmpveWRldiwKIAkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKQEAgLTUxMiw0NiArNTgyLDE4IEBACiAJc3dpdGNoIChjbWQgJiB+SU9DU0laRV9NQVNLKSB7CiAKIAljYXNlIChKU0lPQ1NBWE1BUCAmIH5JT0NTSVpFX01BU0spOgotCQlsZW4gPSBtaW5fdChzaXplX3QsIF9JT0NfU0laRShjbWQpLCBzaXplb2Yoam95ZGV2LT5hYnNwYW0pKTsKLQkJLyoKLQkJICogRklYTUU6IHdlIHNob3VsZCBub3QgY29weSBpbnRvIG91ciBheGlzIG1hcCBiZWZvcmUKLQkJICogdmFsaWRhdGluZyB0aGUgZGF0YS4KLQkJICovCi0JCWlmIChjb3B5X2Zyb21fdXNlcihqb3lkZXYtPmFic3BhbSwgYXJncCwgbGVuKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCi0JCWZvciAoaSA9IDA7IGkgPCBqb3lkZXYtPm5hYnM7IGkrKykgewotCQkJaWYgKGpveWRldi0+YWJzcGFtW2ldID4gQUJTX01BWCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWpveWRldi0+YWJzbWFwW2pveWRldi0+YWJzcGFtW2ldXSA9IGk7Ci0JCX0KLQkJcmV0dXJuIDA7CisJCXJldHVybiBqb3lkZXZfaGFuZGxlX0pTSU9DU0FYTUFQKGpveWRldiwgYXJncCwgX0lPQ19TSVpFKGNtZCkpOwogCiAJY2FzZSAoSlNJT0NHQVhNQVAgJiB+SU9DU0laRV9NQVNLKToKIAkJbGVuID0gbWluX3Qoc2l6ZV90LCBfSU9DX1NJWkUoY21kKSwgc2l6ZW9mKGpveWRldi0+YWJzcGFtKSk7Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgam95ZGV2LT5hYnNwYW0sIGxlbikgPyAtRUZBVUxUIDogMDsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCBqb3lkZXYtPmFic3BhbSwgbGVuKSA/IC1FRkFVTFQgOiBsZW47CiAKIAljYXNlIChKU0lPQ1NCVE5NQVAgJiB+SU9DU0laRV9NQVNLKToKLQkJbGVuID0gbWluX3Qoc2l6ZV90LCBfSU9DX1NJWkUoY21kKSwgc2l6ZW9mKGpveWRldi0+a2V5cGFtKSk7Ci0JCS8qCi0JCSAqIEZJWE1FOiB3ZSBzaG91bGQgbm90IGNvcHkgaW50byBvdXIga2V5bWFwIGJlZm9yZQotCQkgKiB2YWxpZGF0aW5nIHRoZSBkYXRhLgotCQkgKi8KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGpveWRldi0+a2V5cGFtLCBhcmdwLCBsZW4pKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGpveWRldi0+bmtleTsgaSsrKSB7Ci0JCQlpZiAoam95ZGV2LT5rZXlwYW1baV0gPiBLRVlfTUFYIHx8Ci0JCQkgICAgam95ZGV2LT5rZXlwYW1baV0gPCBCVE5fTUlTQykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWpveWRldi0+a2V5bWFwW2pveWRldi0+a2V5cGFtW2ldIC0gQlROX01JU0NdID0gaTsKLQkJfQotCi0JCXJldHVybiAwOworCQlyZXR1cm4gam95ZGV2X2hhbmRsZV9KU0lPQ1NCVE5NQVAoam95ZGV2LCBhcmdwLCBfSU9DX1NJWkUoY21kKSk7CiAKIAljYXNlIChKU0lPQ0dCVE5NQVAgJiB+SU9DU0laRV9NQVNLKToKIAkJbGVuID0gbWluX3Qoc2l6ZV90LCBfSU9DX1NJWkUoY21kKSwgc2l6ZW9mKGpveWRldi0+a2V5cGFtKSk7Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoYXJncCwgam95ZGV2LT5rZXlwYW0sIGxlbikgPyAtRUZBVUxUIDogMDsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCBqb3lkZXYtPmtleXBhbSwgbGVuKSA/IC1FRkFVTFQgOiBsZW47CiAKIAljYXNlIEpTSU9DR05BTUUoMCk6CiAJCW5hbWUgPSBkZXYtPm5hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCmluZGV4IGYxNTVhZDguLjIzODhjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCkBAIC0xNDQsNiArMTQ0LDcgQEAKIAl7IDB4MTQzMCwgMHg0NzQ4LCAiUmVkT2N0YW5lIEd1aXRhciBIZXJvIFgtcGxvcmVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHgxNDMwLCAweDg4ODgsICJUWDY1MDArIERhbmNlIFBhZCAoZmlyc3QgZ2VuZXJhdGlvbikiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCiAJeyAweDA0NWUsIDB4MDI4ZSwgIk1pY3Jvc29mdCBYLUJveCAzNjAgcGFkIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWDM2MCB9LAorCXsgMHgxYmFkLCAweDAwMDMsICJIYXJtb25peCBSb2NrIEJhbmQgRHJ1bWtpdCIsIE1BUF9EUEFEX1RPX0JVVFRPTlMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4ZmZmZiwgMHhmZmZmLCAiQ2hpbmVzZS1tYWRlIFhib3ggQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1ggfSwKIAl7IDB4MDAwMCwgMHgwMDAwLCAiR2VuZXJpYyBYLUJveCBwYWQiLCBNQVBfRFBBRF9VTktOT1dOLCBYVFlQRV9VTktOT1dOIH0KIH07CkBAIC0yMDgsNiArMjA5LDcgQEAKIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MDczOCksCQkvKiBNYWQgQ2F0eiBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MGU2ZiksCQkvKiAweDBlNmYgWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDE0MzApLAkJLyogUmVkT2N0YW5lIFgtQm94IDM2MCBjb250cm9sbGVycyAqLworCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxYmFkKSwJCS8qIFJvY2sgQmFuZCBEcnVtcyAqLwogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IGE2Yjk4OWEuLjM1MjVjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTE4Nyw3ICsxODcsNyBAQAogCSAgc3VibWVudS4KIAogY29uZmlnIEtFWUJPQVJEX0hJTAotCXRyaXN0YXRlICJIUCBISUwga2V5Ym9hcmQgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiSFAgSElMIGtleWJvYXJkL3BvaW50ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEdTQyB8fCBIUDMwMAogCWRlZmF1bHQgeQogCXNlbGVjdCBIUF9TREMKQEAgLTE5Niw3ICsxOTYsOCBAQAogCWhlbHAKIAkgIFRoZSAiSHVtYW4gSW50ZXJmYWNlIExvb3AiIGlzIGEgb2xkZXIsIDgtY2hhbm5lbCBVU0ItbGlrZQogCSAgY29udHJvbGxlciB1c2VkIGluIHNldmVyYWwgSGV3bGV0dCBQYWNrYXJkIG1vZGVscy4KLQkgIFRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgSElMLWtleWJvYXJkcyBhdHRhY2hlZAorCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBISUwta2V5Ym9hcmRzIGFuZCBwb2ludGluZworCSAgZGV2aWNlcyAobWljZSwgdGFibGV0cywgdG91Y2hzY3JlZW5zKSBhdHRhY2hlZAogCSAgdG8geW91ciBtYWNoaW5lLCBzbyBub3JtYWxseSB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuCiAKIGNvbmZpZyBLRVlCT0FSRF9IUDZYWApAQCAtMzI5LDYgKzMzMCwxNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgb21hcC1rZXlwYWQuCiAKK2NvbmZpZyBLRVlCT0FSRF9UV0w0MDMwCisJdHJpc3RhdGUgIlRJIFRXTDQwMzAvVFdMNTAzMC9UUFM2NTl4MCBrZXlwYWQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91ciBib2FyZCB1c2UgdGhlIGtleXBhZCBjb250cm9sbGVyIG9uCisJICBUV0w0MDMwIGZhbWlseSBjaGlwcy4gIEl0J3Mgc2FmZSB0byBzYXkgZW5hYmxlIHRoaXMKKwkgIGV2ZW4gb24gYm9hcmRzIHRoYXQgZG9uJ3QgdXNlIHRoZSBrZXlwYWQgY29udHJvbGxlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHdsNDAzMF9rZXlwYWQuCisKIGNvbmZpZyBLRVlCT0FSRF9UT1NBCiAJdHJpc3RhdGUgIlRvc2Ega2V5Ym9hcmQiCiAJZGVwZW5kcyBvbiBNQUNIX1RPU0EKQEAgLTM2MSw0ICszNzMsMTQgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHh0a2JkLgogCitjb25maWcgS0VZQk9BUkRfVzkwUDkxMAorCXRyaXN0YXRlICJXOTBQOTEwIE1hdHJpeCBLZXlwYWQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfVzkwWDkwMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBtYXRyaXgga2V5cGFkIG9uIGV2YWx1YXRpb24gYm9hcmQKKwkgIGJhc2VkIG9uIFc5MFA5MTAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHc5MHA5MTBfa2V5cGFkLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggYjViNWVhZS4uOGE3YTIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC0zMCw0ICszMCw2IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkpCQkrPSBzdG93YXdheS5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1VOS0JEKQkJKz0gc3Vua2JkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9UT1NBKQkJKz0gdG9zYWtiZC5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfVFdMNDAzMCkJCSs9IHR3bDQwMzBfa2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9YVEtCRCkJCSs9IHh0a2JkLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9XOTBQOTEwKQkJKz0gdzkwcDkxMF9rZXlwYWQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCmluZGV4IDZjNmEwOWIuLmM5NTIzZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKQEAgLTY4LDcgKzY4LDkgQEAKICAqIGFyZSBsb2FkYWJsZSB2aWEgYSB1c2VybGFuZCB1dGlsaXR5LgogICovCiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhdGtiZF9zZXQyX2tleWNvZGVbNTEyXSA9IHsKKyNkZWZpbmUgQVRLQkRfS0VZTUFQX1NJWkUJNTEyCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhdGtiZF9zZXQyX2tleWNvZGVbQVRLQkRfS0VZTUFQX1NJWkVdID0gewogCiAjaWZkZWYgQ09ORklHX0tFWUJPQVJEX0FUS0JEX0hQX0tFWUNPREVTCiAKQEAgLTk5LDcgKzEwMSw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhdGtiZF9zZXQzX2tleWNvZGVbNTEyXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhdGtiZF9zZXQzX2tleWNvZGVbQVRLQkRfS0VZTUFQX1NJWkVdID0gewogCiAJICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCA1OSwgIDEsMTM4LDEyOCwxMjksMTMwLCAxNSwgNDEsIDYwLAogCTEzMSwgMjksIDQyLCA4NiwgNTgsIDE2LCAgMiwgNjEsMTMzLCA1NiwgNDQsIDMxLCAzMCwgMTcsICAzLCA2MiwKQEAgLTIwMCw4ICsyMDIsOCBAQAogCWNoYXIgcGh5c1szMl07CiAKIAl1bnNpZ25lZCBzaG9ydCBpZDsKLQl1bnNpZ25lZCBzaG9ydCBrZXljb2RlWzUxMl07Ci0JREVDTEFSRV9CSVRNQVAoZm9yY2VfcmVsZWFzZV9tYXNrLCA1MTIpOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVbQVRLQkRfS0VZTUFQX1NJWkVdOworCURFQ0xBUkVfQklUTUFQKGZvcmNlX3JlbGVhc2VfbWFzaywgQVRLQkRfS0VZTUFQX1NJWkUpOwogCXVuc2lnbmVkIGNoYXIgc2V0OwogCXVuc2lnbmVkIGNoYXIgdHJhbnNsYXRlZDsKIAl1bnNpZ25lZCBjaGFyIGV4dHJhOwpAQCAtMjUzLDYgKzI1NSw3IEBACiAJX19BVFRSKF9uYW1lLCBTX0lXVVNSIHwgU19JUlVHTywgYXRrYmRfZG9fc2hvd18jI19uYW1lLCBhdGtiZF9kb19zZXRfIyNfbmFtZSk7CiAKIEFUS0JEX0RFRklORV9BVFRSKGV4dHJhKTsKK0FUS0JEX0RFRklORV9BVFRSKGZvcmNlX3JlbGVhc2UpOwogQVRLQkRfREVGSU5FX0FUVFIoc2Nyb2xsKTsKIEFUS0JEX0RFRklORV9BVFRSKHNldCk7CiBBVEtCRF9ERUZJTkVfQVRUUihzb2Z0cmVwZWF0KTsKQEAgLTI3Miw2ICsyNzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXRrYmRfYXR0cmlidXRlc1tdID0gewogCSZhdGtiZF9hdHRyX2V4dHJhLmF0dHIsCisJJmF0a2JkX2F0dHJfZm9yY2VfcmVsZWFzZS5hdHRyLAogCSZhdGtiZF9hdHRyX3Njcm9sbC5hdHRyLAogCSZhdGtiZF9hdHRyX3NldC5hdHRyLAogCSZhdGtiZF9hdHRyX3NvZnRyZXBlYXQuYXR0ciwKQEAgLTkzNCw3ICs5MzgsNyBAQAogCWludCBpLCBqOwogCiAJbWVtc2V0KGF0a2JkLT5rZXljb2RlLCAwLCBzaXplb2YoYXRrYmQtPmtleWNvZGUpKTsKLQliaXRtYXBfemVybyhhdGtiZC0+Zm9yY2VfcmVsZWFzZV9tYXNrLCA1MTIpOworCWJpdG1hcF96ZXJvKGF0a2JkLT5mb3JjZV9yZWxlYXNlX21hc2ssIEFUS0JEX0tFWU1BUF9TSVpFKTsKIAogCWlmIChhdGtiZC0+dHJhbnNsYXRlZCkgewogCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKQEAgLTEwNDEsNyArMTA0NSw3IEBACiAJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShhdGtiZF9zZXQyX2tleWNvZGUpOwogCi0JZm9yIChpID0gMDsgaSA8IDUxMjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBVEtCRF9LRVlNQVBfU0laRTsgaSsrKQogCQlpZiAoYXRrYmQtPmtleWNvZGVbaV0gJiYgYXRrYmQtPmtleWNvZGVbaV0gPCBBVEtCRF9TUEVDSUFMKQogCQkJX19zZXRfYml0KGF0a2JkLT5rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CiB9CkBAIC0xMzA5LDYgKzEzMTMsMzMgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGF0a2JkX3Nob3dfZm9yY2VfcmVsZWFzZShzdHJ1Y3QgYXRrYmQgKmF0a2JkLCBjaGFyICpidWYpCit7CisJc2l6ZV90IGxlbiA9IGJpdG1hcF9zY25saXN0cHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMiwKKwkJCWF0a2JkLT5mb3JjZV9yZWxlYXNlX21hc2ssIEFUS0JEX0tFWU1BUF9TSVpFKTsKKworCWJ1ZltsZW4rK10gPSAnXG4nOworCWJ1ZltsZW5dID0gJ1wwJzsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0a2JkX3NldF9mb3JjZV9yZWxlYXNlKHN0cnVjdCBhdGtiZCAqYXRrYmQsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCS8qIDY0IGJ5dGVzIG9uIHN0YWNrIHNob3VsZCBiZSBhY2NlcHRhYmxlICovCisJREVDTEFSRV9CSVRNQVAobmV3X21hc2ssIEFUS0JEX0tFWU1BUF9TSVpFKTsKKwlpbnQgZXJyOworCisJZXJyID0gYml0bWFwX3BhcnNlbGlzdChidWYsIG5ld19tYXNrLCBBVEtCRF9LRVlNQVBfU0laRSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1lbWNweShhdGtiZC0+Zm9yY2VfcmVsZWFzZV9tYXNrLCBuZXdfbWFzaywgc2l6ZW9mKGF0a2JkLT5mb3JjZV9yZWxlYXNlX21hc2spKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKwogc3RhdGljIHNzaXplX3QgYXRrYmRfc2hvd19zY3JvbGwoc3RydWN0IGF0a2JkICphdGtiZCwgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBhdGtiZC0+c2Nyb2xsID8gMSA6IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9iZjU0eC1rZXlzLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2JmNTR4LWtleXMuYwppbmRleCBkNDI3ZjMyLi5mZTM3NmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2JmNTR4LWtleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2JmNTR4LWtleXMuYwpAQCAtMTg0LDE0ICsxODQsMTMgQEAKIAlpbnQgaSwgZXJyb3I7CiAKIAlpZiAoIXBkYXRhLT5yb3dzIHx8ICFwZGF0YS0+Y29scyB8fCAhcGRhdGEtPmtleW1hcCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJCSI6IE5vIHJvd3MsIGNvbHMgb3Iga2V5bWFwIGZyb20gcGRhdGFcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyByb3dzLCBjb2xzIG9yIGtleW1hcCBmcm9tIHBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFwZGF0YS0+a2V5bWFwc2l6ZSB8fAogCSAgICBwZGF0YS0+a2V5bWFwc2l6ZSA+IChwZGF0YS0+cm93cyAqIHBkYXRhLT5jb2xzKSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogSW52YWxpZCBrZXltYXBzaXplXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBrZXltYXBzaXplXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMTEsOCArMjEwLDggQEAKIAogCWlmICghcGRhdGEtPmRlYm91bmNlX3RpbWUgfHwgcGRhdGEtPmRlYm91bmNlX3RpbWUgPiBNQVhfTVVMVCB8fAogCSAgICAhcGRhdGEtPmNvbGRyaXZlX3RpbWUgfHwgcGRhdGEtPmNvbGRyaXZlX3RpbWUgPiBNQVhfTVVMVCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkiOiBJbnZhbGlkIERlYm91bmNlL0NvbHVtbmRyaXZlIFRpbWUgaW4gcGxhdGZvcm0gZGF0YVxuIik7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkiaW52YWxpZCBwbGF0Zm9ybSBkZWJvdW5jZS9jb2x1bW5kcml2ZSB0aW1lXG4iKTsKIAkJYmZpbl93cml0ZV9LUEFEX01TRUwoMHhGRjApOwkvKiBEZWZhdWx0IE1TRUwJKi8KIAl9IGVsc2UgewogCQliZmluX3dyaXRlX0tQQURfTVNFTCgKQEAgLTIzMSwxNiArMjMwLDE0IEBACiAKIAlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoKHUxNiAqKSZwZXJfcm93c1tNQVhfUkMgLSBwZGF0YS0+cm93c10sCiAJCQkJICAgIERSVl9OQU1FKSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJCSI6IFJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdGluZyBwZXJpcGhlcmFscyBmYWlsZWRcbiIpOwogCQllcnJvciA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0MDsKIAl9CiAKIAlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoKHUxNiAqKSZwZXJfY29sc1tNQVhfUkMgLSBwZGF0YS0+Y29sc10sCiAJCQkJICAgIERSVl9OQU1FKSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJCSI6IFJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdGluZyBwZXJpcGhlcmFscyBmYWlsZWRcbiIpOwogCQllcnJvciA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0MTsKIAl9CkBAIC0yNTQsOSArMjUxLDggQEAKIAllcnJvciA9IHJlcXVlc3RfaXJxKGJmNTR4X2twYWQtPmlycSwgYmZpbl9rcGFkX2lzciwKIAkJCQkwLCBEUlZfTkFNRSwgcGRldik7CiAJaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQotCQkJIjogdW5hYmxlIHRvIGNsYWltIGlycSAlZDsgZXJyb3IgJWRcbiIsCi0JCQliZjU0eF9rcGFkLT5pcnEsIGVycm9yKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGNsYWltIGlycSAlZFxuIiwKKwkJCWJmNTR4X2twYWQtPmlycSk7CiAJCWdvdG8gb3V0MjsKIAl9CiAKQEAgLTI5Nyw4ICsyOTMsNyBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogCWlmIChlcnJvcikgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJCSI6IFVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2UgKCVkKVxuIiwgZXJyb3IpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKIAkJZ290byBvdXQ0OwogCX0KIApAQCAtMzE2LDkgKzMxMSw2IEBACiAKIAlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMSk7CiAKLQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJIjogQmxhY2tmaW4gQkY1NHggS2V5cGFkIHJlZ2lzdGVyZWQgSVJRICVkXG4iLCBiZjU0eF9rcGFkLT5pcnEpOwotCiAJcmV0dXJuIDA7CiAKIG91dDQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwppbmRleCBlZmVkMGM5Li5hODhhZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTIxNiw4ICsyMTYsOSBAQAogCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgZ3Bpb19rZXlzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBncGlvX2tleXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgaTsKIApAQCAtMjM0LDggKzIzNSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ3Bpb19rZXlzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBncGlvX2tleXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBpOwogCkBAIC0yNTEsMTkgKzI1MywyMiBAQAogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBncGlvX2tleXNfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIGdwaW9fa2V5c19yZXN1bWUJTlVMTAorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZ3Bpb19rZXlzX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IGdwaW9fa2V5c19zdXNwZW5kLAorCS5yZXN1bWUJCT0gZ3Bpb19rZXlzX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ3Bpb19rZXlzX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGdwaW9fa2V5c19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGdwaW9fa2V5c19yZW1vdmUpLAotCS5zdXNwZW5kCT0gZ3Bpb19rZXlzX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBncGlvX2tleXNfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJncGlvLWtleXMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJmdwaW9fa2V5c19wbV9vcHMsCisjZW5kaWYKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCmluZGV4IDZmMzU2NzAuLmM4M2Y0YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCkBAIC0zNywxOSArMzcsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAKLSNkZWZpbmUgUFJFRklYICJISUwgS0VZQjogIgotI2RlZmluZSBISUxfR0VORVJJQ19OQU1FICJISUwga2V5Ym9hcmQiCisjZGVmaW5lIFBSRUZJWCAiSElMOiAiCiAKIE1PRFVMRV9BVVRIT1IoIkJyaWFuIFMuIEp1bGluIDxicmlAY2FseXguY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKEhJTF9HRU5FUklDX05BTUUgIiBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSElMIGtleWJvYXJkL21vdXNlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwotTU9EVUxFX0FMSUFTKCJzZXJpbzp0eTAzcHIyNWlkMDBleCoiKTsKK01PRFVMRV9BTElBUygic2VyaW86dHkwM3ByMjVpZDAwZXgqIik7IC8qIEhJTCBrZXlib2FyZCAqLworTU9EVUxFX0FMSUFTKCJzZXJpbzp0eTAzcHIyNWlkMEZleCoiKTsgLyogSElMIG1vdXNlICovCiAKLSNkZWZpbmUgSElMX0tCRF9NQVhfTEVOR1RIIDE2CisjZGVmaW5lIEhJTF9QQUNLRVRfTUFYX0xFTkdUSCAxNgogCiAjZGVmaW5lIEhJTF9LQkRfU0VUMV9VUEJJVCAweDAxCiAjZGVmaW5lIEhJTF9LQkRfU0VUMV9TSElGVCAxCkBAIC02NywzMDggKzY3LDQ5NyBAQAogCiBzdGF0aWMgY29uc3QgY2hhciBoaWxfbGFuZ3VhZ2VbXVsxNl0gPSB7IEhJTF9MT0NBTEVfTUFQIH07CiAKLXN0cnVjdCBoaWxfa2JkIHsKK3N0cnVjdCBoaWxfZGV2IHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIAogCS8qIElucHV0IGJ1ZmZlciBhbmQgaW5kZXggZm9yIHBhY2tldHMgZnJvbSBISUwgYnVzLiAqLwotCWhpbF9wYWNrZXQgZGF0YVtISUxfS0JEX01BWF9MRU5HVEhdOworCWhpbF9wYWNrZXQgZGF0YVtISUxfUEFDS0VUX01BWF9MRU5HVEhdOwogCWludCBpZHg0OyAvKiBmb3VyIGNvdW50cyBwZXIgcGFja2V0ICovCiAKIAkvKiBSYXcgZGV2aWNlIGluZm8gcmVjb3JkcyBmcm9tIEhJTCBidXMsIHNlZSBoaWwuaCBmb3IgZmllbGRzLiAqLwotCWNoYXIJaWRkW0hJTF9LQkRfTUFYX0xFTkdUSF07CS8qIERJRCBieXRlIGFuZCBJREQgcmVjb3JkICovCi0JY2hhcglyc2NbSElMX0tCRF9NQVhfTEVOR1RIXTsJLyogUlNDIHJlY29yZCAqLwotCWNoYXIJZXhkW0hJTF9LQkRfTUFYX0xFTkdUSF07CS8qIEVYRCByZWNvcmQgKi8KLQljaGFyCXJubVtISUxfS0JEX01BWF9MRU5HVEggKyAxXTsJLyogUk5NIHJlY29yZCArIE5VTEwgdGVybS4gKi8KKwljaGFyCWlkZFtISUxfUEFDS0VUX01BWF9MRU5HVEhdOwkvKiBESUQgYnl0ZSBhbmQgSUREIHJlY29yZCAqLworCWNoYXIJcnNjW0hJTF9QQUNLRVRfTUFYX0xFTkdUSF07CS8qIFJTQyByZWNvcmQgKi8KKwljaGFyCWV4ZFtISUxfUEFDS0VUX01BWF9MRU5HVEhdOwkvKiBFWEQgcmVjb3JkICovCisJY2hhcglybm1bSElMX1BBQ0tFVF9NQVhfTEVOR1RIICsgMV07CS8qIFJOTSByZWNvcmQgKyBOVUxMIHRlcm0uICovCiAKLQkvKiBTb21ldGhpbmcgdG8gc2xlZXAgYXJvdW5kIHdpdGguICovCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IGNvbXBsZXRpb24gY21kX2RvbmU7CisKKwlib29sIGlzX3BvaW50ZXI7CisJLyogRXh0cmEgZGV2aWNlIGRldGFpbHMgbmVlZGVkIGZvciBwb2ludGluZyBkZXZpY2VzLiAqLworCXVuc2lnbmVkIGludCBuYnRuLCBuYXhlczsKKwl1bnNpZ25lZCBpbnQgYnRubWFwWzddOwogfTsKIAotLyogUHJvY2VzcyBhIGNvbXBsZXRlIHBhY2tldCBhZnRlciB0cmFuc2ZlciBmcm9tIHRoZSBISUwgKi8KLXN0YXRpYyB2b2lkIGhpbF9rYmRfcHJvY2Vzc19yZWNvcmQoc3RydWN0IGhpbF9rYmQgKmtiZCkKK3N0YXRpYyBib29sIGhpbF9kZXZfaXNfY29tbWFuZF9yZXNwb25zZShoaWxfcGFja2V0IHApCiB7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0ga2JkLT5kZXY7Ci0JaGlsX3BhY2tldCAqZGF0YSA9IGtiZC0+ZGF0YTsKKwlpZiAoKHAgJiB+SElMX0NNRENUX1BPTCkgPT0gKEhJTF9FUlJfSU5UIHwgSElMX1BLVF9DTUQgfCBISUxfQ01EX1BPTCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICgocCAmIH5ISUxfQ01EQ1RfUlBMKSA9PSAoSElMX0VSUl9JTlQgfCBISUxfUEtUX0NNRCB8IEhJTF9DTURfUlBMKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGhpbF9kZXZfaGFuZGxlX2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGhpbF9kZXYgKmRldikKK3sKIAloaWxfcGFja2V0IHA7Ci0JaW50IGlkeCwgaSwgY250OworCWNoYXIgKmJ1ZjsKKwlpbnQgaSwgaWR4OwogCi0JaWR4ID0ga2JkLT5pZHg0LzQ7Ci0JcCA9IGRhdGFbaWR4IC0gMV07CisJaWR4ID0gZGV2LT5pZHg0IC8gNDsKKwlwID0gZGV2LT5kYXRhW2lkeCAtIDFdOwogCi0JaWYgKChwICYgfkhJTF9DTURDVF9QT0wpID09Ci0JICAgIChISUxfRVJSX0lOVCB8IEhJTF9QS1RfQ01EIHwgSElMX0NNRF9QT0wpKQotCQlnb3RvIHJlcG9ydDsKLQlpZiAoKHAgJiB+SElMX0NNRENUX1JQTCkgPT0KLQkgICAgKEhJTF9FUlJfSU5UIHwgSElMX1BLVF9DTUQgfCBISUxfQ01EX1JQTCkpCi0JCWdvdG8gcmVwb3J0OwotCi0JLyogTm90IGEgcG9sbCByZXNwb25zZS4gIFNlZSBpZiB3ZSBhcmUgbG9hZGluZyBjb25maWcgcmVjb3Jkcy4gKi8KIAlzd2l0Y2ggKHAgJiBISUxfUEtUX0RBVEFfTUFTSykgewogCWNhc2UgSElMX0NNRF9JREQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKLQkJCWtiZC0+aWRkW2ldID0ga2JkLT5kYXRhW2ldICYgSElMX1BLVF9EQVRBX01BU0s7Ci0JCWZvciAoOyBpIDwgSElMX0tCRF9NQVhfTEVOR1RIOyBpKyspCi0JCQlrYmQtPmlkZFtpXSA9IDA7CisJCWJ1ZiA9IGRldi0+aWRkOwogCQlicmVhazsKIAogCWNhc2UgSElMX0NNRF9SU0M6Ci0JCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKLQkJCWtiZC0+cnNjW2ldID0ga2JkLT5kYXRhW2ldICYgSElMX1BLVF9EQVRBX01BU0s7Ci0JCWZvciAoOyBpIDwgSElMX0tCRF9NQVhfTEVOR1RIOyBpKyspCi0JCQlrYmQtPnJzY1tpXSA9IDA7CisJCWJ1ZiA9IGRldi0+cnNjOwogCQlicmVhazsKIAogCWNhc2UgSElMX0NNRF9FWEQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKLQkJCWtiZC0+ZXhkW2ldID0ga2JkLT5kYXRhW2ldICYgSElMX1BLVF9EQVRBX01BU0s7Ci0JCWZvciAoOyBpIDwgSElMX0tCRF9NQVhfTEVOR1RIOyBpKyspCi0JCQlrYmQtPmV4ZFtpXSA9IDA7CisJCWJ1ZiA9IGRldi0+ZXhkOwogCQlicmVhazsKIAogCWNhc2UgSElMX0NNRF9STk06Ci0JCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKLQkJCWtiZC0+cm5tW2ldID0ga2JkLT5kYXRhW2ldICYgSElMX1BLVF9EQVRBX01BU0s7Ci0JCWZvciAoOyBpIDwgSElMX0tCRF9NQVhfTEVOR1RIICsgMTsgaSsrKQotCQkJa2JkLT5ybm1baV0gPSAnXDAnOworCQlkZXYtPnJubVtISUxfUEFDS0VUX01BWF9MRU5HVEhdID0gMDsKKwkJYnVmID0gZGV2LT5ybm07CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJLyogVGhlc2Ugb2NjdXIgd2hlbiBkZXZpY2UgaXNuJ3QgcHJlc2VudCAqLwotCQlpZiAocCA9PSAoSElMX0VSUl9JTlQgfCBISUxfUEtUX0NNRCkpCi0JCQlicmVhazsKLQkJLyogQW55dGhpbmcgZWxzZSB3ZSdkIGxpa2UgdG8ga25vdyBhYm91dC4gKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkRldmljZSBzZW50IHVua25vd24gcmVjb3JkICV4XG4iLCBwKTsKLQkJYnJlYWs7CisJCWlmIChwICE9IChISUxfRVJSX0lOVCB8IEhJTF9QS1RfQ01EKSkgeworCQkJLyogQW55dGhpbmcgZWxzZSB3ZSdkIGxpa2UgdG8ga25vdyBhYm91dC4gKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJEZXZpY2Ugc2VudCB1bmtub3duIHJlY29yZCAleFxuIiwgcCk7CisJCX0KKwkJZ290byBvdXQ7CiAJfQotCWdvdG8gb3V0OwogCi0gcmVwb3J0OgotCWNudCA9IDE7CisJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQorCQlidWZbaV0gPSBkZXYtPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKKwlmb3IgKDsgaSA8IEhJTF9QQUNLRVRfTUFYX0xFTkdUSDsgaSsrKQorCQlidWZbaV0gPSAwOworIG91dDoKKwljb21wbGV0ZSgmZGV2LT5jbWRfZG9uZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhpbF9kZXZfaGFuZGxlX2tiZF9ldmVudHMoc3RydWN0IGhpbF9kZXYgKmtiZCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBrYmQtPmRldjsKKwlpbnQgaWR4ID0ga2JkLT5pZHg0IC8gNDsKKwlpbnQgaTsKKwogCXN3aXRjaCAoa2JkLT5kYXRhWzBdICYgSElMX1BPTF9DSEFSVFlQRV9NQVNLKSB7CiAJY2FzZSBISUxfUE9MX0NIQVJUWVBFX05PTkU6Ci0JCWJyZWFrOworCQlyZXR1cm47CiAKIAljYXNlIEhJTF9QT0xfQ0hBUlRZUEVfQVNDSUk6Ci0JCXdoaWxlIChjbnQgPCBpZHggLSAxKQotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtiZC0+ZGF0YVtjbnQrK10gJiAweDdmLCAxKTsKKwkJZm9yIChpID0gMTsgaSA8IGlkeCAtIDE7IGkrKykKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrYmQtPmRhdGFbaV0gJiAweDdmLCAxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEhJTF9QT0xfQ0hBUlRZUEVfUlNWRDE6CiAJY2FzZSBISUxfUE9MX0NIQVJUWVBFX1JTVkQyOgogCWNhc2UgSElMX1BPTF9DSEFSVFlQRV9CSU5BUlk6Ci0JCXdoaWxlIChjbnQgPCBpZHggLSAxKQotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtiZC0+ZGF0YVtjbnQrK10sIDEpOworCQlmb3IgKGkgPSAxOyBpIDwgaWR4IC0gMTsgaSsrKQorCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtiZC0+ZGF0YVtpXSwgMSk7CiAJCWJyZWFrOwogCiAJY2FzZSBISUxfUE9MX0NIQVJUWVBFX1NFVDE6Ci0JCXdoaWxlIChjbnQgPCBpZHggLSAxKSB7Ci0JCQl1bnNpZ25lZCBpbnQga2V5OwotCQkJaW50IHVwOwotCQkJa2V5ID0ga2JkLT5kYXRhW2NudCsrXTsKLQkJCXVwID0ga2V5ICYgSElMX0tCRF9TRVQxX1VQQklUOworCQlmb3IgKGkgPSAxOyBpIDwgaWR4IC0gMTsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQga2V5ID0ga2JkLT5kYXRhW2ldOworCQkJaW50IHVwID0ga2V5ICYgSElMX0tCRF9TRVQxX1VQQklUOworCiAJCQlrZXkgJj0gKH5ISUxfS0JEX1NFVDFfVVBCSVQgJiAweGZmKTsKIAkJCWtleSA9IGhpbF9rYmRfc2V0MVtrZXkgPj4gSElMX0tCRF9TRVQxX1NISUZUXTsKLQkJCWlmIChrZXkgIT0gS0VZX1JFU0VSVkVEKQotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXksICF1cCk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5LCAhdXApOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBISUxfUE9MX0NIQVJUWVBFX1NFVDI6Ci0JCXdoaWxlIChjbnQgPCBpZHggLSAxKSB7Ci0JCQl1bnNpZ25lZCBpbnQga2V5OwotCQkJaW50IHVwOwotCQkJa2V5ID0ga2JkLT5kYXRhW2NudCsrXTsKLQkJCXVwID0ga2V5ICYgSElMX0tCRF9TRVQyX1VQQklUOworCQlmb3IgKGkgPSAxOyBpIDwgaWR4IC0gMTsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQga2V5ID0ga2JkLT5kYXRhW2ldOworCQkJaW50IHVwID0ga2V5ICYgSElMX0tCRF9TRVQyX1VQQklUOworCiAJCQlrZXkgJj0gKH5ISUxfS0JEX1NFVDFfVVBCSVQgJiAweGZmKTsKIAkJCWtleSA9IGtleSA+PiBISUxfS0JEX1NFVDJfU0hJRlQ7Ci0JCQlpZiAoa2V5ICE9IEtFWV9SRVNFUlZFRCkKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5LCAhdXApOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleSwgIXVwKTsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgSElMX1BPTF9DSEFSVFlQRV9TRVQzOgotCQl3aGlsZSAoY250IDwgaWR4IC0gMSkgewotCQkJdW5zaWduZWQgaW50IGtleTsKLQkJCWludCB1cDsKLQkJCWtleSA9IGtiZC0+ZGF0YVtjbnQrK107Ci0JCQl1cCA9IGtleSAmIEhJTF9LQkRfU0VUM19VUEJJVDsKKwkJZm9yIChpID0gMTsgaSA8IGlkeCAtIDE7IGkrKykgeworCQkJdW5zaWduZWQgaW50IGtleSA9IGtiZC0+ZGF0YVtpXTsKKwkJCWludCB1cCA9IGtleSAmIEhJTF9LQkRfU0VUM19VUEJJVDsKKwogCQkJa2V5ICY9ICh+SElMX0tCRF9TRVQxX1VQQklUICYgMHhmZik7CiAJCQlrZXkgPSBoaWxfa2JkX3NldDNba2V5ID4+IEhJTF9LQkRfU0VUM19TSElGVF07Ci0JCQlpZiAoa2V5ICE9IEtFWV9SRVNFUlZFRCkKLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5LCAhdXApOworCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleSwgIXVwKTsKIAkJfQogCQlicmVhazsKIAl9Ci0gb3V0OgotCWtiZC0+aWR4NCA9IDA7Ci0JdXAoJmtiZC0+c2VtKTsKKworCWlucHV0X3N5bmMoZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgaGlsX2tiZF9wcm9jZXNzX2VycihzdHJ1Y3QgaGlsX2tiZCAqa2JkKQorc3RhdGljIHZvaWQgaGlsX2Rldl9oYW5kbGVfcHRyX2V2ZW50cyhzdHJ1Y3QgaGlsX2RldiAqcHRyKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHB0ci0+ZGV2OworCWludCBpZHggPSBwdHItPmlkeDQgLyA0OworCWhpbF9wYWNrZXQgcCA9IHB0ci0+ZGF0YVtpZHggLSAxXTsKKwlpbnQgaSwgY250LCBsYXhpczsKKwlib29sIGFic2RldiwgYXgxNjsKKworCWlmICgocCAmIEhJTF9DTURDVF9QT0wpICE9IGlkeCAtIDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKKwkJCSJNYWxmb3JtZWQgcG9sbCBwYWNrZXQgJXggKGlkeCA9ICVpKVxuIiwgcCwgaWR4KTsKKwkJcmV0dXJuOworCX0KKworCWkgPSAocCAmIEhJTF9QT0xfQVhJU19BTFQpID8gMyA6IDA7CisJbGF4aXMgPSAocCAmIEhJTF9QT0xfTlVNX0FYRVNfTUFTSykgKyBpOworCisJYXgxNiA9IHB0ci0+aWRkWzFdICYgSElMX0lERF9IRUFERVJfMTZCSVQ7IC8qIDggb3IgMTZiaXQgcmVzb2x1dGlvbiAqLworCWFic2RldiA9IHB0ci0+aWRkWzFdICYgSElMX0lERF9IRUFERVJfQUJTOworCisJZm9yIChjbnQgPSAxOyBpIDwgbGF4aXM7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgbG8sIGhpLCB2YWw7CisKKwkJbG8gPSBwdHItPmRhdGFbY250KytdICYgSElMX1BLVF9EQVRBX01BU0s7CisJCWhpID0gYXgxNiA/IChwdHItPmRhdGFbY250KytdICYgSElMX1BLVF9EQVRBX01BU0spIDogMDsKKworCQlpZiAoYWJzZGV2KSB7CisJCQl2YWwgPSBsbyArIChoaSA8PCA4KTsKKyNpZmRlZiBUQUJMRVRfQVVUT0FESlVTVAorCQkJaWYgKHZhbCA8IGRldi0+YWJzbWluW0FCU19YICsgaV0pCisJCQkJZGV2LT5hYnNtaW5bQUJTX1ggKyBpXSA9IHZhbDsKKwkJCWlmICh2YWwgPiBkZXYtPmFic21heFtBQlNfWCArIGldKQorCQkJCWRldi0+YWJzbWF4W0FCU19YICsgaV0gPSB2YWw7CisjZW5kaWYKKwkJCWlmIChpJTMpIHZhbCA9IGRldi0+YWJzbWF4W0FCU19YICsgaV0gLSB2YWw7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ggKyBpLCB2YWwpOworCQl9IGVsc2UgeworCQkJdmFsID0gKGludCkgKCgoaW50OF90KWxvKSB8ICgoaW50OF90KWhpIDw8IDgpKTsKKwkJCWlmIChpICUgMykKKwkJCQl2YWwgKj0gLTE7CisJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ggKyBpLCB2YWwpOworCQl9CisJfQorCisJd2hpbGUgKGNudCA8IGlkeCAtIDEpIHsKKwkJdW5zaWduZWQgaW50IGJ0biA9IHB0ci0+ZGF0YVtjbnQrK107CisJCWludCB1cCA9IGJ0biAmIDE7CisKKwkJYnRuICY9IDB4ZmU7CisJCWlmIChidG4gPT0gMHg4ZSkKKwkJCWNvbnRpbnVlOyAvKiBUT0RPOiBwcm94aW1pdHkgPT0gdG91Y2g/ICovCisJCWlmIChidG4gPiAweDhjIHx8IGJ0biA8IDB4ODApCisJCQljb250aW51ZTsKKwkJYnRuID0gKGJ0biAtIDB4ODApID4+IDE7CisJCWJ0biA9IHB0ci0+YnRubWFwW2J0bl07CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBidG4sICF1cCk7CisJfQorCisJaW5wdXRfc3luYyhkZXYpOworfQorCitzdGF0aWMgdm9pZCBoaWxfZGV2X3Byb2Nlc3NfZXJyKHN0cnVjdCBoaWxfZGV2ICpkZXYpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggImVycm9yZWQgSElMIHBhY2tldFxuIik7Ci0Ja2JkLT5pZHg0ID0gMDsKLQl1cCgma2JkLT5zZW0pOworCWRldi0+aWR4NCA9IDA7CisJY29tcGxldGUoJmRldi0+Y21kX2RvbmUpOyAvKiBqdXN0IGluIGNhc2Ugc29tZWJvZHkgaXMgd2FpdGluZyAqLwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaGlsX2tiZF9pbnRlcnJ1cHQoc3RydWN0IHNlcmlvICpzZXJpbywKK3N0YXRpYyBpcnFyZXR1cm5fdCBoaWxfZGV2X2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLAogCQkJCXVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBoaWxfa2JkICprYmQ7CisJc3RydWN0IGhpbF9kZXYgKmRldjsKIAloaWxfcGFja2V0IHBhY2tldDsKIAlpbnQgaWR4OwogCi0Ja2JkID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwotCUJVR19PTihrYmQgPT0gTlVMTCk7CisJZGV2ID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOworCUJVR19PTihkZXYgPT0gTlVMTCk7CiAKLQlpZiAoa2JkLT5pZHg0ID49IChISUxfS0JEX01BWF9MRU5HVEggKiBzaXplb2YoaGlsX3BhY2tldCkpKSB7Ci0JCWhpbF9rYmRfcHJvY2Vzc19lcnIoa2JkKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOworCWlmIChkZXYtPmlkeDQgPj0gSElMX1BBQ0tFVF9NQVhfTEVOR1RIICogc2l6ZW9mKGhpbF9wYWNrZXQpKSB7CisJCWhpbF9kZXZfcHJvY2Vzc19lcnIoZGV2KTsKKwkJZ290byBvdXQ7CiAJfQotCWlkeCA9IGtiZC0+aWR4NC80OwotCWlmICghKGtiZC0+aWR4NCAlIDQpKQotCQlrYmQtPmRhdGFbaWR4XSA9IDA7Ci0JcGFja2V0ID0ga2JkLT5kYXRhW2lkeF07Ci0JcGFja2V0IHw9ICgoaGlsX3BhY2tldClkYXRhKSA8PCAoKDMgLSAoa2JkLT5pZHg0ICUgNCkpICogOCk7Ci0Ja2JkLT5kYXRhW2lkeF0gPSBwYWNrZXQ7CisKKwlpZHggPSBkZXYtPmlkeDQgLyA0OworCWlmICghKGRldi0+aWR4NCAlIDQpKQorCQlkZXYtPmRhdGFbaWR4XSA9IDA7CisJcGFja2V0ID0gZGV2LT5kYXRhW2lkeF07CisJcGFja2V0IHw9ICgoaGlsX3BhY2tldClkYXRhKSA8PCAoKDMgLSAoZGV2LT5pZHg0ICUgNCkpICogOCk7CisJZGV2LT5kYXRhW2lkeF0gPSBwYWNrZXQ7CiAKIAkvKiBSZWNvcmRzIG9mIE4gNC1ieXRlIGhpbF9wYWNrZXRzIG11c3QgdGVybWluYXRlIHdpdGggYSBjb21tYW5kLiAqLwotCWlmICgoKysoa2JkLT5pZHg0KSkgJSA0KQotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JaWYgKChwYWNrZXQgJiAweGZmZmYwMDAwKSAhPSBISUxfRVJSX0lOVCkgewotCQloaWxfa2JkX3Byb2Nlc3NfZXJyKGtiZCk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKKwlpZiAoKCsrZGV2LT5pZHg0ICUgNCkgPT0gMCkgeworCQlpZiAoKHBhY2tldCAmIDB4ZmZmZjAwMDApICE9IEhJTF9FUlJfSU5UKSB7CisJCQloaWxfZGV2X3Byb2Nlc3NfZXJyKGRldik7CisJCX0gZWxzZSBpZiAocGFja2V0ICYgSElMX1BLVF9DTUQpIHsKKwkJCWlmIChoaWxfZGV2X2lzX2NvbW1hbmRfcmVzcG9uc2UocGFja2V0KSkKKwkJCQloaWxfZGV2X2hhbmRsZV9jb21tYW5kX3Jlc3BvbnNlKGRldik7CisJCQllbHNlIGlmIChkZXYtPmlzX3BvaW50ZXIpCisJCQkJaGlsX2Rldl9oYW5kbGVfcHRyX2V2ZW50cyhkZXYpOworCQkJZWxzZQorCQkJCWhpbF9kZXZfaGFuZGxlX2tiZF9ldmVudHMoZGV2KTsKKwkJCWRldi0+aWR4NCA9IDA7CisJCX0KIAl9Ci0JaWYgKHBhY2tldCAmIEhJTF9QS1RfQ01EKQotCQloaWxfa2JkX3Byb2Nlc3NfcmVjb3JkKGtiZCk7Cisgb3V0OgogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHZvaWQgaGlsX2tiZF9kaXNjb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8pCitzdGF0aWMgdm9pZCBoaWxfZGV2X2Rpc2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbykKIHsKLQlzdHJ1Y3QgaGlsX2tiZCAqa2JkOworCXN0cnVjdCBoaWxfZGV2ICpkZXYgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CiAKLQlrYmQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7Ci0JQlVHX09OKGtiZCA9PSBOVUxMKTsKKwlCVUdfT04oZGV2ID09IE5VTEwpOwogCiAJc2VyaW9fY2xvc2Uoc2VyaW8pOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGtiZC0+ZGV2KTsKLQlrZnJlZShrYmQpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+ZGV2KTsKKwlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisJa2ZyZWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBoaWxfa2JkX2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbywgc3RydWN0IHNlcmlvX2RyaXZlciAqZHJ2KQorc3RhdGljIHZvaWQgaGlsX2Rldl9rZXlib2FyZF9zZXR1cChzdHJ1Y3QgaGlsX2RldiAqa2JkKQogewotCXN0cnVjdCBoaWxfa2JkCSprYmQ7Ci0JdWludDhfdAkJZGlkLCAqaWRkOwotCWludAkJaTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYgPSBrYmQtPmRldjsKKwl1aW50OF90IGRpZCA9IGtiZC0+aWRkWzBdOworCWludCBpOwogCi0Ja2JkID0ga3phbGxvYyhzaXplb2YoKmtiZCksIEdGUF9LRVJORUwpOwotCWlmICgha2JkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdCT0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CisJaW5wdXRfZGV2LT5sZWRiaXRbMF0JPSBCSVRfTUFTSyhMRURfTlVNTCkgfCBCSVRfTUFTSyhMRURfQ0FQU0wpIHwKKwkJCQkgIEJJVF9NQVNLKExFRF9TQ1JPTExMKTsKIAotCWtiZC0+ZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFrYmQtPmRldikKKwlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKwkJX19zZXRfYml0KGhpbF9rYmRfc2V0MVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoaGlsX2tiZF9zZXQzW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJfQorCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJaW5wdXRfZGV2LT5rZXljb2RlbWF4CT0gSElMX0tFWUNPREVTX1NFVDFfVEJMU0laRTsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplCT0gc2l6ZW9mKGhpbF9rYmRfc2V0MVswXSk7CisJaW5wdXRfZGV2LT5rZXljb2RlCT0gaGlsX2tiZF9zZXQxOworCisJaW5wdXRfZGV2LT5uYW1lCT0gc3RybGVuKGtiZC0+cm5tKSA/IGtiZC0+cm5tIDogIkhJTCBrZXlib2FyZCI7CisJaW5wdXRfZGV2LT5waHlzCT0gImhwa2JkL2lucHV0MCI7CisKKwlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiSElMIGtleWJvYXJkIGZvdW5kIChkaWQgPSAweCUwMngsIGxhbmcgPSAlcylcbiIsCisJCWRpZCwgaGlsX2xhbmd1YWdlW2RpZCAmIEhJTF9JRERfRElEX1RZUEVfS0JfTEFOR19NQVNLXSk7Cit9CisKK3N0YXRpYyB2b2lkIGhpbF9kZXZfcG9pbnRlcl9zZXR1cChzdHJ1Y3QgaGlsX2RldiAqcHRyKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IHB0ci0+ZGV2OworCXVpbnQ4X3QgZGlkID0gcHRyLT5pZGRbMF07CisJdWludDhfdCAqaWRkID0gcHRyLT5pZGQgKyAxOworCXVuc2lnbmVkIGludCBuYXhzZXRzID0gSElMX0lERF9OVU1fQVhTRVRTKCppZGQpOworCXVuc2lnbmVkIGludCBpLCBidG50eXBlOworCWNvbnN0IGNoYXIgKnR4dDsKKworCXB0ci0+bmF4ZXMgPSBISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoKmlkZCk7CisKKwlzd2l0Y2ggKGRpZCAmIEhJTF9JRERfRElEX1RZUEVfTUFTSykgeworCWNhc2UgSElMX0lERF9ESURfVFlQRV9SRUw6CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9SRUwpOworCisJCWZvciAoaSA9IDA7IGkgPCBwdHItPm5heGVzOyBpKyspCisJCQlfX3NldF9iaXQoUkVMX1ggKyBpLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisKKwkJZm9yIChpID0gMzsgbmF4c2V0cyA+IDEgJiYgaSA8IHB0ci0+bmF4ZXMgKyAzOyBpKyspCisJCQlfX3NldF9iaXQoUkVMX1ggKyBpLCBpbnB1dF9kZXYtPnJlbGJpdCk7CisKKwkJdHh0ID0gInJlbGF0aXZlIjsKKwkJYnJlYWs7CisKKwljYXNlIEhJTF9JRERfRElEX1RZUEVfQUJTOgorCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfQUJTKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcHRyLT5uYXhlczsgaSsrKQorCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCArIGksCisJCQkJCTAsIEhJTF9JRERfQVhJU19NQVgoaWRkLCBpKSwgMCwgMCk7CisKKwkJZm9yIChpID0gMzsgbmF4c2V0cyA+IDEgJiYgaSA8IHB0ci0+bmF4ZXMgKyAzOyBpKyspCisJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YICsgaSwKKwkJCQkJMCwgSElMX0lERF9BWElTX01BWChpZGQsIGkgLSAzKSwgMCwgMCk7CisKKyNpZmRlZiBUQUJMRVRfQVVUT0FESlVTVAorCQlmb3IgKGkgPSAwOyBpIDwgQUJTX01BWDsgaSsrKSB7CisJCQlpbnQgZGlmZiA9IGlucHV0X2Rldi0+YWJzbWF4W0FCU19YICsgaV0gLyAxMDsKKwkJCWlucHV0X2Rldi0+YWJzbWluW0FCU19YICsgaV0gKz0gZGlmZjsKKwkJCWlucHV0X2Rldi0+YWJzbWF4W0FCU19YICsgaV0gLT0gZGlmZjsKKwkJfQorI2VuZGlmCisKKwkJdHh0ID0gImFic29sdXRlIjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlwdHItPm5idG4gPSBISUxfSUREX05VTV9CVVRUT05TKGlkZCk7CisJaWYgKHB0ci0+bmJ0bikKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9LRVkpOworCisJYnRudHlwZSA9IEJUTl9NSVNDOworCWlmICgoZGlkICYgSElMX0lERF9ESURfQUJTX1RBQkxFVF9NQVNLKSA9PSBISUxfSUREX0RJRF9BQlNfVEFCTEVUKQorI2lmZGVmIFRBQkxFVF9TSU1VTEFURVNfTU9VU0UKKwkJYnRudHlwZSA9IEJUTl9UT1VDSDsKKyNlbHNlCisJCWJ0bnR5cGUgPSBCVE5fRElHSTsKKyNlbmRpZgorCWlmICgoZGlkICYgSElMX0lERF9ESURfQUJTX1RTQ1JFRU5fTUFTSykgPT0gSElMX0lERF9ESURfQUJTX1RTQ1JFRU4pCisJCWJ0bnR5cGUgPSBCVE5fVE9VQ0g7CisKKwlpZiAoKGRpZCAmIEhJTF9JRERfRElEX1JFTF9NT1VTRV9NQVNLKSA9PSBISUxfSUREX0RJRF9SRUxfTU9VU0UpCisJCWJ0bnR5cGUgPSBCVE5fTU9VU0U7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHRyLT5uYnRuOyBpKyspIHsKKwkJX19zZXRfYml0KGJ0bnR5cGUgfCBpLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCXB0ci0+YnRubWFwW2ldID0gYnRudHlwZSB8IGk7CisJfQorCisJaWYgKGJ0bnR5cGUgPT0gQlROX01PVVNFKSB7CisJCS8qIFN3YXAgYnV0dG9ucyAyIGFuZCAzICovCisJCXB0ci0+YnRubWFwWzFdID0gQlROX01JRERMRTsKKwkJcHRyLT5idG5tYXBbMl0gPSBCVE5fUklHSFQ7CisJfQorCisJaW5wdXRfZGV2LT5uYW1lID0gc3RybGVuKHB0ci0+cm5tKSA/IHB0ci0+cm5tIDogIkhJTCBwb2ludGVyIGRldmljZSI7CisKKwlwcmludGsoS0VSTl9JTkZPIFBSRUZJWAorCQkiSElMIHBvaW50ZXIgZGV2aWNlIGZvdW5kIChkaWQ6IDB4JTAyeCwgYXhpczogJXMpXG4iLAorCQlkaWQsIHR4dCk7CisJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVgKKwkJIkhJTCBwb2ludGVyIGhhcyAlaSBidXR0b25zIGFuZCAlaSBzZXRzIG9mICVpIGF4ZXNcbiIsCisJCXB0ci0+bmJ0biwgbmF4c2V0cywgcHRyLT5uYXhlcyk7Cit9CisKK3N0YXRpYyBpbnQgaGlsX2Rldl9jb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgaGlsX2RldiAqZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwl1aW50OF90IGRpZCwgKmlkZDsKKwlpbnQgZXJyb3I7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFkZXYgfHwgIWlucHV0X2RldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDA7CisJfQorCisJZGV2LT5zZXJpbyA9IHNlcmlvOworCWRldi0+ZGV2ID0gaW5wdXRfZGV2OworCisJZXJyb3IgPSBzZXJpb19vcGVuKHNlcmlvLCBkcnYpOworCWlmIChlcnJvcikKIAkJZ290byBiYWlsMDsKIAotCWlmIChzZXJpb19vcGVuKHNlcmlvLCBkcnYpKQotCQlnb3RvIGJhaWwxOwotCi0Jc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIGtiZCk7Ci0Ja2JkLT5zZXJpbyA9IHNlcmlvOwotCi0JaW5pdF9NVVRFWF9MT0NLRUQoJmtiZC0+c2VtKTsKKwlzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgZGV2KTsKIAogCS8qIEdldCBkZXZpY2UgaW5mby4gIE1MQyBkcml2ZXIgc3VwcGxpZXMgZGV2aWQvc3RhdHVzL2V0Yy4gKi8KLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfSUREKTsKLQlkb3duKCZrYmQtPnNlbSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9kb25lKTsKKwlzZXJpb193cml0ZShzZXJpbywgMCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIDApOworCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKKwlzZXJpb193cml0ZShzZXJpbywgSElMX0NNRF9JREQpOworCWVycm9yID0gd2FpdF9mb3JfY29tcGxldGlvbl9raWxsYWJsZSgmZGV2LT5jbWRfZG9uZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGJhaWwxOwogCi0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX1BLVF9DTUQgPj4gOCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfQ01EX1JTQyk7Ci0JZG93bigma2JkLT5zZW0pOworCWluaXRfY29tcGxldGlvbigmZGV2LT5jbWRfZG9uZSk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIDApOworCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKKwlzZXJpb193cml0ZShzZXJpbywgSElMX1BLVF9DTUQgPj4gOCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9DTURfUlNDKTsKKwllcnJvciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fa2lsbGFibGUoJmRldi0+Y21kX2RvbmUpOworCWlmIChlcnJvcikKKwkJZ290byBiYWlsMTsKIAotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCAwKTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOwotCXNlcmlvLT53cml0ZShzZXJpbywgSElMX0NNRF9STk0pOwotCWRvd24oJmtiZC0+c2VtKTsKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+Y21kX2RvbmUpOworCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKKwlzZXJpb193cml0ZShzZXJpbywgMCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOworCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfQ01EX1JOTSk7CisJZXJyb3IgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2tpbGxhYmxlKCZkZXYtPmNtZF9kb25lKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gYmFpbDE7CiAKLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfRVhEKTsKLQlkb3duKCZrYmQtPnNlbSk7CisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9kb25lKTsKKwlzZXJpb193cml0ZShzZXJpbywgMCk7CisJc2VyaW9fd3JpdGUoc2VyaW8sIDApOworCXNlcmlvX3dyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKKwlzZXJpb193cml0ZShzZXJpbywgSElMX0NNRF9FWEQpOworCWVycm9yID0gd2FpdF9mb3JfY29tcGxldGlvbl9raWxsYWJsZSgmZGV2LT5jbWRfZG9uZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGJhaWwxOwogCi0JdXAoJmtiZC0+c2VtKTsKKwlkaWQgPSBkZXYtPmlkZFswXTsKKwlpZGQgPSBkZXYtPmlkZCArIDE7CiAKLQlkaWQgPSBrYmQtPmlkZFswXTsKLQlpZGQgPSBrYmQtPmlkZCArIDE7CiAJc3dpdGNoIChkaWQgJiBISUxfSUREX0RJRF9UWVBFX01BU0spIHsKIAljYXNlIEhJTF9JRERfRElEX1RZUEVfS0JfSU5URUdSQUw6CiAJY2FzZSBISUxfSUREX0RJRF9UWVBFX0tCX0lURjoKIAljYXNlIEhJTF9JRERfRElEX1RZUEVfS0JfUlNWRDoKIAljYXNlIEhJTF9JRERfRElEX1RZUEVfQ0hBUjoKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkhJTCBrZXlib2FyZCBmb3VuZCAoZGlkID0gMHglMDJ4LCBsYW5nID0gJXMpXG4iLAotCQkJZGlkLCBoaWxfbGFuZ3VhZ2VbZGlkICYgSElMX0lERF9ESURfVFlQRV9LQl9MQU5HX01BU0tdKTsKKwkJaWYgKEhJTF9JRERfTlVNX0JVVFRPTlMoaWRkKSB8fAorCQkgICAgSElMX0lERF9OVU1fQVhFU19QRVJfU0VUKCppZGQpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWAorCQkJCSJjb21ibyBkZXZpY2VzIGFyZSBub3Qgc3VwcG9ydGVkLlxuIik7CisJCQlnb3RvIGJhaWwxOworCQl9CisKKwkJZGV2LT5pc19wb2ludGVyID0gZmFsc2U7CisJCWhpbF9kZXZfa2V5Ym9hcmRfc2V0dXAoZGV2KTsKIAkJYnJlYWs7CisKKwljYXNlIEhJTF9JRERfRElEX1RZUEVfUkVMOgorCWNhc2UgSElMX0lERF9ESURfVFlQRV9BQlM6CisJCWRldi0+aXNfcG9pbnRlciA9IHRydWU7CisJCWhpbF9kZXZfcG9pbnRlcl9zZXR1cChkZXYpOworCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCWdvdG8gYmFpbDI7CisJCWdvdG8gYmFpbDE7CiAJfQogCi0JaWYgKEhJTF9JRERfTlVNX0JVVFRPTlMoaWRkKSB8fCBISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoKmlkZCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggImtleWJvYXJkcyBvbmx5LCBubyBjb21ibyBkZXZpY2VzIHN1cHBvcnRlZC5cbiIpOwotCQlnb3RvIGJhaWwyOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZQk9IEJVU19ISUw7CisJaW5wdXRfZGV2LT5pZC52ZW5kb3IJPSBQQ0lfVkVORE9SX0lEX0hQOworCWlucHV0X2Rldi0+aWQucHJvZHVjdAk9IDB4MDAwMTsgLyogVE9ETzogZ2V0IGZyb20ga2JkLT5yc2MgKi8KKwlpbnB1dF9kZXYtPmlkLnZlcnNpb24JPSAweDAxMDA7IC8qIFRPRE86IGdldCBmcm9tIGtiZC0+cnNjICovCisJaW5wdXRfZGV2LT5kZXYucGFyZW50CT0gJnNlcmlvLT5kZXY7CisKKwlpZiAoIWRldi0+aXNfcG9pbnRlcikgeworCQlzZXJpb193cml0ZShzZXJpbywgMCk7CisJCXNlcmlvX3dyaXRlKHNlcmlvLCAwKTsKKwkJc2VyaW9fd3JpdGUoc2VyaW8sIEhJTF9QS1RfQ01EID4+IDgpOworCQkvKiBFbmFibGUgS2V5c3dpdGNoIEF1dG9yZXBlYXQgMSAqLworCQlzZXJpb193cml0ZShzZXJpbywgSElMX0NNRF9FSzEpOworCQkvKiBObyBuZWVkIHRvIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAl9CiAKLQlrYmQtPmRldi0+ZXZiaXRbMF0JPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVQKTsKLQlrYmQtPmRldi0+bGVkYml0WzBdCT0gQklUX01BU0soTEVEX05VTUwpIHwgQklUX01BU0soTEVEX0NBUFNMKSB8Ci0JCUJJVF9NQVNLKExFRF9TQ1JPTExMKTsKLQlrYmQtPmRldi0+a2V5Y29kZW1heAk9IEhJTF9LRVlDT0RFU19TRVQxX1RCTFNJWkU7Ci0Ja2JkLT5kZXYtPmtleWNvZGVzaXplCT0gc2l6ZW9mKGhpbF9rYmRfc2V0MVswXSk7Ci0Ja2JkLT5kZXYtPmtleWNvZGUJPSBoaWxfa2JkX3NldDE7Ci0Ja2JkLT5kZXYtPm5hbWUJCT0gc3RybGVuKGtiZC0+cm5tKSA/IGtiZC0+cm5tIDogSElMX0dFTkVSSUNfTkFNRTsKLQlrYmQtPmRldi0+cGh5cwkJPSAiaHBrYmQvaW5wdXQwIjsJLyogWFhYICovCi0KLQlrYmQtPmRldi0+aWQuYnVzdHlwZQk9IEJVU19ISUw7Ci0Ja2JkLT5kZXYtPmlkLnZlbmRvcgk9IFBDSV9WRU5ET1JfSURfSFA7Ci0Ja2JkLT5kZXYtPmlkLnByb2R1Y3QJPSAweDAwMDE7IC8qIFRPRE86IGdldCBmcm9tIGtiZC0+cnNjICovCi0Ja2JkLT5kZXYtPmlkLnZlcnNpb24JPSAweDAxMDA7IC8qIFRPRE86IGdldCBmcm9tIGtiZC0+cnNjICovCi0Ja2JkLT5kZXYtPmRldi5wYXJlbnQJPSAmc2VyaW8tPmRldjsKLQotCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewotCQlzZXRfYml0KGhpbF9rYmRfc2V0MVtpXSwga2JkLT5kZXYtPmtleWJpdCk7Ci0JCXNldF9iaXQoaGlsX2tiZF9zZXQzW2ldLCBrYmQtPmRldi0+a2V5Yml0KTsKLQl9Ci0JY2xlYXJfYml0KDAsIGtiZC0+ZGV2LT5rZXliaXQpOwotCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGtiZC0+ZGV2KTsKLQlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogJXMsIElEOiAlZFxuIiwKLQkJa2JkLT5kZXYtPm5hbWUsIGRpZCk7Ci0KLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfRUsxKTsgLyogRW5hYmxlIEtleXN3aXRjaCBBdXRvcmVwZWF0IDEgKi8KLQlkb3duKCZrYmQtPnNlbSk7Ci0JdXAoJmtiZC0+c2VtKTsKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dF9kZXYpOworCWlmIChlcnJvcikKKwkJZ290byBiYWlsMTsKIAogCXJldHVybiAwOwotIGJhaWwyOgorCisgYmFpbDE6CiAJc2VyaW9fY2xvc2Uoc2VyaW8pOwogCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKLSBiYWlsMToKLQlpbnB1dF9mcmVlX2RldmljZShrYmQtPmRldik7CiAgYmFpbDA6Ci0Ja2ZyZWUoa2JkKTsKLQlyZXR1cm4gLUVJTzsKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGRldik7CisJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcmlvX2RldmljZV9pZCBoaWxfa2JkX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBzZXJpb19kZXZpY2VfaWQgaGlsX2Rldl9pZHNbXSA9IHsKIAl7CiAJCS50eXBlID0gU0VSSU9fSElMX01MQywKIAkJLnByb3RvID0gU0VSSU9fSElMLApAQCAtMzc4LDI2ICs1NjcsMjYgQEAKIAl7IDAgfQogfTsKIAotc3RhdGljIHN0cnVjdCBzZXJpb19kcml2ZXIgaGlsX2tiZF9zZXJpb19kcnYgPSB7CitzdGF0aWMgc3RydWN0IHNlcmlvX2RyaXZlciBoaWxfc2VyaW9fZHJ2ID0gewogCS5kcml2ZXIJCT0gewotCQkubmFtZQk9ICJoaWxfa2JkIiwKKwkJLm5hbWUJPSAiaGlsX2RldiIsCiAJfSwKLQkuZGVzY3JpcHRpb24JPSAiSFAgSElMIGtleWJvYXJkIGRyaXZlciIsCi0JLmlkX3RhYmxlCT0gaGlsX2tiZF9pZHMsCi0JLmNvbm5lY3QJPSBoaWxfa2JkX2Nvbm5lY3QsCi0JLmRpc2Nvbm5lY3QJPSBoaWxfa2JkX2Rpc2Nvbm5lY3QsCi0JLmludGVycnVwdAk9IGhpbF9rYmRfaW50ZXJydXB0CisJLmRlc2NyaXB0aW9uCT0gIkhQIEhJTCBrZXlib2FyZC9tb3VzZS90YWJsZXQgZHJpdmVyIiwKKwkuaWRfdGFibGUJPSBoaWxfZGV2X2lkcywKKwkuY29ubmVjdAk9IGhpbF9kZXZfY29ubmVjdCwKKwkuZGlzY29ubmVjdAk9IGhpbF9kZXZfZGlzY29ubmVjdCwKKwkuaW50ZXJydXB0CT0gaGlsX2Rldl9pbnRlcnJ1cHQKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGhpbF9rYmRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaGlsX2Rldl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmaGlsX2tiZF9zZXJpb19kcnYpOworCXJldHVybiBzZXJpb19yZWdpc3Rlcl9kcml2ZXIoJmhpbF9zZXJpb19kcnYpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgaGlsX2tiZF9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaGlsX2Rldl9leGl0KHZvaWQpCiB7Ci0Jc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmhpbF9rYmRfc2VyaW9fZHJ2KTsKKwlzZXJpb191bnJlZ2lzdGVyX2RyaXZlcigmaGlsX3NlcmlvX2Rydik7CiB9CiAKLW1vZHVsZV9pbml0KGhpbF9rYmRfaW5pdCk7Ci1tb2R1bGVfZXhpdChoaWxfa2JkX2V4aXQpOworbW9kdWxlX2luaXQoaGlsX2Rldl9pbml0KTsKK21vZHVsZV9leGl0KGhpbF9kZXZfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xra2JkLmMKaW5kZXggNDczMGVmMy4uZjk4NDdlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sa2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbGtrYmQuYwpAQCAtNTI1LDEyICs1MjUsMTIgQEAKIAkJCUNIRUNLX0xFRCAobGssIGxlZHNfb24sIGxlZHNfb2ZmLCBMRURfU0NST0xMTCwgTEtfTEVEX1NDUk9MTExPQ0spOwogCQkJQ0hFQ0tfTEVEIChsaywgbGVkc19vbiwgbGVkc19vZmYsIExFRF9TTEVFUCwgTEtfTEVEX1dBSVQpOwogCQkJaWYgKGxlZHNfb24gIT0gMCkgewotCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0xFRF9PTik7Ci0JCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBsZWRzX29uKTsKKwkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfTEVEX09OKTsKKwkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBsZWRzX29uKTsKIAkJCX0KIAkJCWlmIChsZWRzX29mZiAhPSAwKSB7Ci0JCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfTEVEX09GRik7Ci0JCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBsZWRzX29mZik7CisJCQkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0xFRF9PRkYpOworCQkJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIGxlZHNfb2ZmKTsKIAkJCX0KIAkJCXJldHVybiAwOwogCkBAIC01MzksMjAgKzUzOSwyMCBAQAogCQkJCWNhc2UgU05EX0NMSUNLOgogCQkJCQlpZiAodmFsdWUgPT0gMCkgewogCQkJCQkJREJHICgiJXM6IERlYWN0aXZhdGluZyBrZXkgY2xpY2tzXG4iLCBfX2Z1bmNfXyk7Ci0JCQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9ESVNBQkxFX0tFWUNMSUNLKTsKLQkJCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0RJU0FCTEVfQ1RSQ0xJQ0spOworCQkJCQkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0RJU0FCTEVfS0VZQ0xJQ0spOworCQkJCQkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0RJU0FCTEVfQ1RSQ0xJQ0spOwogCQkJCQl9IGVsc2UgewogCQkJCQkJREJHICgiJXM6IEFjdGl2YXRpbmcga2V5IGNsaWNrc1xuIiwgX19mdW5jX18pOwotCQkJCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0tFWUNMSUNLKTsKLQkJCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgdm9sdW1lX3RvX2h3IChsay0+a2V5Y2xpY2tfdm9sdW1lKSk7Ci0JCQkJCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9FTkFCTEVfQ1RSQ0xJQ0spOwotCQkJCQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5jdHJsY2xpY2tfdm9sdW1lKSk7CisJCQkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0tFWUNMSUNLKTsKKwkJCQkJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIHZvbHVtZV90b19odyAobGstPmtleWNsaWNrX3ZvbHVtZSkpOworCQkJCQkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9DVFJDTElDSyk7CisJCQkJCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5jdHJsY2xpY2tfdm9sdW1lKSk7CiAJCQkJCX0KIAkJCQkJcmV0dXJuIDA7CiAKIAkJCQljYXNlIFNORF9CRUxMOgogCQkJCQlpZiAodmFsdWUgIT0gMCkKLQkJCQkJCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1NPVU5EX0JFTEwpOworCQkJCQkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1NPVU5EX0JFTEwpOwogCiAJCQkJCXJldHVybiAwOwogCQkJfQpAQCAtNTc5LDEwICs1NzksMTAgQEAKIAl1bnNpZ25lZCBjaGFyIGxlZHNfb2ZmID0gMDsKIAogCS8qIEFzayBmb3IgSUQgKi8KLQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9SRVFVRVNUX0lEKTsKKwlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfUkVRVUVTVF9JRCk7CiAKIAkvKiBSZXNldCBwYXJhbWV0ZXJzICovCi0JbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfU0VUX0RFRkFVTFRTKTsKKwlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfU0VUX0RFRkFVTFRTKTsKIAogCS8qIFNldCBMRURzICovCiAJQ0hFQ0tfTEVEIChsaywgbGVkc19vbiwgbGVkc19vZmYsIExFRF9DQVBTTCwgTEtfTEVEX1NISUZUTE9DSyk7CkBAIC01OTAsMTIgKzU5MCwxMiBAQAogCUNIRUNLX0xFRCAobGssIGxlZHNfb24sIGxlZHNfb2ZmLCBMRURfU0NST0xMTCwgTEtfTEVEX1NDUk9MTExPQ0spOwogCUNIRUNLX0xFRCAobGssIGxlZHNfb24sIGxlZHNfb2ZmLCBMRURfU0xFRVAsIExLX0xFRF9XQUlUKTsKIAlpZiAobGVkc19vbiAhPSAwKSB7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0xFRF9PTik7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgbGVkc19vbik7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9MRURfT04pOworCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBsZWRzX29uKTsKIAl9CiAJaWYgKGxlZHNfb2ZmICE9IDApIHsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfTEVEX09GRik7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgbGVkc19vZmYpOworCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfTEVEX09GRik7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIGxlZHNfb2ZmKTsKIAl9CiAKIAkvKgpAQCAtNjAzLDMxICs2MDMsMzEgQEAKIAkgKiBvbmx5IHdvcmsgd2l0aCBhIExLNDAxIGtleWJvYXJkIGFuZCBncmFudHMgYWNjZXNzIHRvCiAJICogTEFsdCwgUkFsdCwgUkNvbXBvc2UgYW5kIFJTaGlmdC4KIAkgKi8KLQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9FTkFCTEVfTEs0MDEpOworCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9FTkFCTEVfTEs0MDEpOwogCiAJLyogU2V0IGFsbCBrZXlzIHRvIFVQRE9XTiBtb2RlICovCiAJZm9yIChkaXZpc2lvbiA9IDE7IGRpdmlzaW9uIDw9IDE0OyBkaXZpc2lvbisrKQotCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9TRVRfTU9ERSAoTEtfTU9ERV9VUERPV04sCisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9TRVRfTU9ERSAoTEtfTU9ERV9VUERPV04sCiAJCQkJCWRpdmlzaW9uKSk7CiAKIAkvKiBFbmFibGUgYmVsbCBhbmQgc2V0IHZvbHVtZSAqLwotCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9CRUxMKTsKLQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIHZvbHVtZV90b19odyAobGstPmJlbGxfdm9sdW1lKSk7CisJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9CRUxMKTsKKwlzZXJpb193cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5iZWxsX3ZvbHVtZSkpOwogCiAJLyogRW5hYmxlL2Rpc2FibGUga2V5Y2xpY2sgKGFuZCBwb3NzaWJseSBzZXQgdm9sdW1lKSAqLwogCWlmICh0ZXN0X2JpdCAoU05EX0NMSUNLLCBsay0+ZGV2LT5zbmQpKSB7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9LRVlDTElDSyk7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgdm9sdW1lX3RvX2h3IChsay0+a2V5Y2xpY2tfdm9sdW1lKSk7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0VOQUJMRV9DVFJDTElDSyk7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgdm9sdW1lX3RvX2h3IChsay0+Y3RybGNsaWNrX3ZvbHVtZSkpOworCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfRU5BQkxFX0tFWUNMSUNLKTsKKwkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgdm9sdW1lX3RvX2h3IChsay0+a2V5Y2xpY2tfdm9sdW1lKSk7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9FTkFCTEVfQ1RSQ0xJQ0spOworCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCB2b2x1bWVfdG9faHcgKGxrLT5jdHJsY2xpY2tfdm9sdW1lKSk7CiAJfSBlbHNlIHsKLQkJbGstPnNlcmlvLT53cml0ZSAobGstPnNlcmlvLCBMS19DTURfRElTQUJMRV9LRVlDTElDSyk7Ci0JCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX0RJU0FCTEVfQ1RSQ0xJQ0spOworCQlzZXJpb193cml0ZSAobGstPnNlcmlvLCBMS19DTURfRElTQUJMRV9LRVlDTElDSyk7CisJCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9ESVNBQkxFX0NUUkNMSUNLKTsKIAl9CiAKIAkvKiBTb3VuZCB0aGUgYmVsbCBpZiBuZWVkZWQgKi8KIAlpZiAodGVzdF9iaXQgKFNORF9CRUxMLCBsay0+ZGV2LT5zbmQpKQotCQlsay0+c2VyaW8tPndyaXRlIChsay0+c2VyaW8sIExLX0NNRF9TT1VORF9CRUxMKTsKKwkJc2VyaW9fd3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1NPVU5EX0JFTEwpOwogfQogCiAvKgpAQCAtNjg0LDggKzY4NCwxMCBAQAogCWlucHV0X2Rldi0+a2V5Y29kZSA9IGxrLT5rZXljb2RlOwogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YgKGxrX2tleWNvZGVfdCk7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gTEtfTlVNX0tFWUNPREVTOworCiAJZm9yIChpID0gMDsgaSA8IExLX05VTV9LRVlDT0RFUzsgaSsrKQotCQlzZXRfYml0IChsay0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQgKGxrLT5rZXljb2RlW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAlzZXJpb19zZXRfZHJ2ZGF0YSAoc2VyaW8sIGxrKTsKIApAQCAtNjk3LDcgKzY5OSw3IEBACiAJaWYgKGVycikKIAkJZ290byBmYWlsMzsKIAotCWxrLT5zZXJpby0+d3JpdGUgKGxrLT5zZXJpbywgTEtfQ01EX1BPV0VSQ1lDTEVfUkVTRVQpOworCXNlcmlvX3dyaXRlIChsay0+c2VyaW8sIExLX0NNRF9QT1dFUkNZQ0xFX1JFU0VUKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hdHJpeF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWF0cml4X2tleXBhZC5jCmluZGV4IDU0MWI5ODEuLjkxY2ZlNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWF0cml4X2tleXBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbWF0cml4X2tleXBhZC5jCkBAIC0zMTksNyArMzE5LDYgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJdW5zaWduZWQgc2hvcnQgKmtleWNvZGVzOwogCXVuc2lnbmVkIGludCByb3dfc2hpZnQ7Ci0JaW50IGk7CiAJaW50IGVycjsKIAogCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC0zNjMsMTggKzM2MiwxMCBAQAogCiAJaW5wdXRfZGV2LT5rZXljb2RlCT0ga2V5Y29kZXM7CiAJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZQk9IHNpemVvZigqa2V5Y29kZXMpOwotCWlucHV0X2Rldi0+a2V5Y29kZW1heAk9IHBkYXRhLT5udW1fcm93X2dwaW9zIDw8IGtleXBhZC0+cm93X3NoaWZ0OworCWlucHV0X2Rldi0+a2V5Y29kZW1heAk9IHBkYXRhLT5udW1fcm93X2dwaW9zIDw8IHJvd19zaGlmdDsKIAotCWZvciAoaSA9IDA7IGkgPCBrZXltYXBfZGF0YS0+a2V5bWFwX3NpemU7IGkrKykgewotCQl1bnNpZ25lZCBpbnQga2V5ID0ga2V5bWFwX2RhdGEtPmtleW1hcFtpXTsKLQkJdW5zaWduZWQgaW50IHJvdyA9IEtFWV9ST1coa2V5KTsKLQkJdW5zaWduZWQgaW50IGNvbCA9IEtFWV9DT0woa2V5KTsKLQkJdW5zaWduZWQgc2hvcnQgY29kZSA9IEtFWV9WQUwoa2V5KTsKLQotCQlrZXljb2Rlc1tNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLCByb3dfc2hpZnQpXSA9IGNvZGU7Ci0JCV9fc2V0X2JpdChjb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JfQotCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXRfZGV2LT5rZXliaXQpOworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGtleW1hcF9kYXRhLCByb3dfc2hpZnQsCisJCQkJICAgaW5wdXRfZGV2LT5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4pOwogCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2V5cGFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcHhhMjd4X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKaW5kZXggMGQyZmM2NC4uNzZmOTY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMKQEAgLTI1LDEzICsyNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KLQogLyoKICAqIEtleXBhZCBDb250cm9sbGVyIHJlZ2lzdGVycwogICovCkBAIC05NSw3ICs5NSw4IEBACiAjZGVmaW5lIGtleXBhZF9yZWFkbChvZmYpCV9fcmF3X3JlYWRsKGtleXBhZC0+bW1pb19iYXNlICsgKG9mZikpCiAjZGVmaW5lIGtleXBhZF93cml0ZWwob2ZmLCB2KQlfX3Jhd193cml0ZWwoKHYpLCBrZXlwYWQtPm1taW9fYmFzZSArIChvZmYpKQogCi0jZGVmaW5lIE1BWF9NQVRSSVhfS0VZX05VTQkoOCAqIDgpCisjZGVmaW5lIE1BWF9NQVRSSVhfS0VZX05VTQkoTUFYX01BVFJJWF9LRVlfUk9XUyAqIE1BWF9NQVRSSVhfS0VZX0NPTFMpCisjZGVmaW5lIE1BWF9LRVlQQURfS0VZUwkJKE1BWF9NQVRSSVhfS0VZX05VTSArIE1BWF9ESVJFQ1RfS0VZX05VTSkKIAogc3RydWN0IHB4YTI3eF9rZXlwYWQgewogCXN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwpAQCAtMTA2LDczICsxMDcsODIgQEAKIAogCWludCBpcnE7CiAKLQkvKiBtYXRyaXgga2V5IGNvZGUgbWFwICovCi0JdW5zaWduZWQgaW50IG1hdHJpeF9rZXljb2Rlc1tNQVhfTUFUUklYX0tFWV9OVU1dOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVzW01BWF9LRVlQQURfS0VZU107CisJaW50IHJvdGFyeV9yZWxfY29kZVsyXTsKIAogCS8qIHN0YXRlIHJvdyBiaXRzIG9mIGVhY2ggY29sdW1uIHNjYW4gKi8KIAl1aW50MzJfdCBtYXRyaXhfa2V5X3N0YXRlW01BWF9NQVRSSVhfS0VZX0NPTFNdOwogCXVpbnQzMl90IGRpcmVjdF9rZXlfc3RhdGU7CiAKIAl1bnNpZ25lZCBpbnQgZGlyZWN0X2tleV9tYXNrOwotCi0JaW50IHJvdGFyeV9yZWxfY29kZVsyXTsKLQlpbnQgcm90YXJ5X3VwX2tleVsyXTsKLQlpbnQgcm90YXJ5X2Rvd25fa2V5WzJdOwogfTsKIAogc3RhdGljIHZvaWQgcHhhMjd4X2tleXBhZF9idWlsZF9rZXljb2RlKHN0cnVjdCBweGEyN3hfa2V5cGFkICprZXlwYWQpCiB7CiAJc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrZXlwYWQtPnBkYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtleXBhZC0+aW5wdXRfZGV2OwotCXVuc2lnbmVkIGludCAqa2V5OworCXVuc2lnbmVkIHNob3J0IGtleWNvZGU7CiAJaW50IGk7CiAKLQlrZXkgPSAmcGRhdGEtPm1hdHJpeF9rZXlfbWFwWzBdOwotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bWF0cml4X2tleV9tYXBfc2l6ZTsgaSsrLCBrZXkrKykgewotCQlpbnQgcm93ID0gKCgqa2V5KSA+PiAyOCkgJiAweGY7Ci0JCWludCBjb2wgPSAoKCprZXkpID4+IDI0KSAmIDB4ZjsKLQkJaW50IGNvZGUgPSAoKmtleSkgJiAweGZmZmZmZjsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm1hdHJpeF9rZXlfbWFwX3NpemU7IGkrKykgeworCQl1bnNpZ25lZCBpbnQga2V5ID0gcGRhdGEtPm1hdHJpeF9rZXlfbWFwW2ldOworCQl1bnNpZ25lZCBpbnQgcm93ID0gS0VZX1JPVyhrZXkpOworCQl1bnNpZ25lZCBpbnQgY29sID0gS0VZX0NPTChrZXkpOworCQl1bnNpZ25lZCBpbnQgc2NhbmNvZGUgPSBNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLAorCQkJCQkJCSBNQVRSSVhfUk9XX1NISUZUKTsKIAotCQlrZXlwYWQtPm1hdHJpeF9rZXljb2Rlc1socm93IDw8IDMpICsgY29sXSA9IGNvZGU7Ci0JCXNldF9iaXQoY29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlrZXljb2RlID0gS0VZX1ZBTChrZXkpOworCQlrZXlwYWQtPmtleWNvZGVzW3NjYW5jb2RlXSA9IGtleWNvZGU7CisJCV9fc2V0X2JpdChrZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5kaXJlY3Rfa2V5X251bTsgaSsrKQotCQlzZXRfYml0KHBkYXRhLT5kaXJlY3Rfa2V5X21hcFtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCi0Ja2V5cGFkLT5yb3RhcnlfdXBfa2V5WzBdID0gcGRhdGEtPnJvdGFyeTBfdXBfa2V5OwotCWtleXBhZC0+cm90YXJ5X3VwX2tleVsxXSA9IHBkYXRhLT5yb3RhcnkxX3VwX2tleTsKLQlrZXlwYWQtPnJvdGFyeV9kb3duX2tleVswXSA9IHBkYXRhLT5yb3RhcnkwX2Rvd25fa2V5OwotCWtleXBhZC0+cm90YXJ5X2Rvd25fa2V5WzFdID0gcGRhdGEtPnJvdGFyeTFfZG93bl9rZXk7Ci0Ja2V5cGFkLT5yb3RhcnlfcmVsX2NvZGVbMF0gPSBwZGF0YS0+cm90YXJ5MF9yZWxfY29kZTsKLQlrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVsxXSA9IHBkYXRhLT5yb3RhcnkxX3JlbF9jb2RlOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+ZGlyZWN0X2tleV9udW07IGkrKykgeworCQlrZXljb2RlID0gcGRhdGEtPmRpcmVjdF9rZXlfbWFwW2ldOworCQlrZXlwYWQtPmtleWNvZGVzW01BWF9NQVRSSVhfS0VZX05VTSArIGldID0ga2V5Y29kZTsKKwkJX19zZXRfYml0KGtleWNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwl9CiAKIAlpZiAocGRhdGEtPmVuYWJsZV9yb3RhcnkwKSB7CiAJCWlmIChwZGF0YS0+cm90YXJ5MF91cF9rZXkgJiYgcGRhdGEtPnJvdGFyeTBfZG93bl9rZXkpIHsKLQkJCXNldF9iaXQocGRhdGEtPnJvdGFyeTBfdXBfa2V5LCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCQlzZXRfYml0KHBkYXRhLT5yb3RhcnkwX2Rvd25fa2V5LCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCX0gZWxzZQotCQkJc2V0X2JpdChwZGF0YS0+cm90YXJ5MF9yZWxfY29kZSwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQkJa2V5Y29kZSA9IHBkYXRhLT5yb3RhcnkwX3VwX2tleTsKKwkJCWtleXBhZC0+a2V5Y29kZXNbTUFYX01BVFJJWF9LRVlfTlVNICsgMF0gPSBrZXljb2RlOworCQkJX19zZXRfYml0KGtleWNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKKworCQkJa2V5Y29kZSA9IHBkYXRhLT5yb3RhcnkwX2Rvd25fa2V5OworCQkJa2V5cGFkLT5rZXljb2Rlc1tNQVhfTUFUUklYX0tFWV9OVU0gKyAxXSA9IGtleWNvZGU7CisJCQlfX3NldF9iaXQoa2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJCQlrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVswXSA9IC0xOworCQl9IGVsc2UgeworCQkJa2V5cGFkLT5yb3RhcnlfcmVsX2NvZGVbMF0gPSBwZGF0YS0+cm90YXJ5MF9yZWxfY29kZTsKKwkJCV9fc2V0X2JpdChwZGF0YS0+cm90YXJ5MF9yZWxfY29kZSwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQl9CiAJfQogCiAJaWYgKHBkYXRhLT5lbmFibGVfcm90YXJ5MSkgewogCQlpZiAocGRhdGEtPnJvdGFyeTFfdXBfa2V5ICYmIHBkYXRhLT5yb3RhcnkxX2Rvd25fa2V5KSB7Ci0JCQlzZXRfYml0KHBkYXRhLT5yb3RhcnkxX3VwX2tleSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCQkJc2V0X2JpdChwZGF0YS0+cm90YXJ5MV9kb3duX2tleSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCQl9IGVsc2UKLQkJCXNldF9iaXQocGRhdGEtPnJvdGFyeTFfcmVsX2NvZGUsIGlucHV0X2Rldi0+cmVsYml0KTsKLQl9Ci19CisJCQlrZXljb2RlID0gcGRhdGEtPnJvdGFyeTFfdXBfa2V5OworCQkJa2V5cGFkLT5rZXljb2Rlc1tNQVhfTUFUUklYX0tFWV9OVU0gKyAyXSA9IGtleWNvZGU7CisJCQlfX3NldF9iaXQoa2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsb29rdXBfbWF0cml4X2tleWNvZGUoCi0JCXN0cnVjdCBweGEyN3hfa2V5cGFkICprZXlwYWQsIGludCByb3csIGludCBjb2wpCi17Ci0JcmV0dXJuIGtleXBhZC0+bWF0cml4X2tleWNvZGVzWyhyb3cgPDwgMykgKyBjb2xdOworCQkJa2V5Y29kZSA9IHBkYXRhLT5yb3RhcnkxX2Rvd25fa2V5OworCQkJa2V5cGFkLT5rZXljb2Rlc1tNQVhfTUFUUklYX0tFWV9OVU0gKyAzXSA9IGtleWNvZGU7CisJCQlfX3NldF9iaXQoa2V5Y29kZSwgaW5wdXRfZGV2LT5rZXliaXQpOworCisJCQlrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVsxXSA9IC0xOworCQl9IGVsc2UgeworCQkJa2V5cGFkLT5yb3RhcnlfcmVsX2NvZGVbMV0gPSBwZGF0YS0+cm90YXJ5MV9yZWxfY29kZTsKKwkJCV9fc2V0X2JpdChwZGF0YS0+cm90YXJ5MV9yZWxfY29kZSwgaW5wdXRfZGV2LT5yZWxiaXQpOworCQl9CisJfQorCisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBpbnB1dF9kZXYtPmtleWJpdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHB4YTI3eF9rZXlwYWRfc2Nhbl9tYXRyaXgoc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZCkKIHsKIAlzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtleXBhZC0+cGRhdGE7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2V5cGFkLT5pbnB1dF9kZXY7CiAJaW50IHJvdywgY29sLCBudW1fa2V5c19wcmVzc2VkID0gMDsKIAl1aW50MzJfdCBuZXdfc3RhdGVbTUFYX01BVFJJWF9LRVlfQ09MU107CiAJdWludDMyX3Qga3BhcyA9IGtleXBhZF9yZWFkbChLUEFTKTsKQEAgLTIxNSw2ICsyMjUsNyBAQAogc2NhbjoKIAlmb3IgKGNvbCA9IDA7IGNvbCA8IHBkYXRhLT5tYXRyaXhfa2V5X2NvbHM7IGNvbCsrKSB7CiAJCXVpbnQzMl90IGJpdHNfY2hhbmdlZDsKKwkJaW50IGNvZGU7CiAKIAkJYml0c19jaGFuZ2VkID0ga2V5cGFkLT5tYXRyaXhfa2V5X3N0YXRlW2NvbF0gXiBuZXdfc3RhdGVbY29sXTsKIAkJaWYgKGJpdHNfY2hhbmdlZCA9PSAwKQpAQCAtMjI0LDEyICsyMzUsMTMgQEAKIAkJCWlmICgoYml0c19jaGFuZ2VkICYgKDEgPDwgcm93KSkgPT0gMCkKIAkJCQljb250aW51ZTsKIAotCQkJaW5wdXRfcmVwb3J0X2tleShrZXlwYWQtPmlucHV0X2RldiwKLQkJCQlsb29rdXBfbWF0cml4X2tleWNvZGUoa2V5cGFkLCByb3csIGNvbCksCi0JCQkJbmV3X3N0YXRlW2NvbF0gJiAoMSA8PCByb3cpKTsKKwkJCWNvZGUgPSBNQVRSSVhfU0NBTl9DT0RFKHJvdywgY29sLCBNQVRSSVhfUk9XX1NISUZUKTsKKwkJCWlucHV0X2V2ZW50KGlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2Rldiwga2V5cGFkLT5rZXljb2Rlc1tjb2RlXSwKKwkJCQkJIG5ld19zdGF0ZVtjb2xdICYgKDEgPDwgcm93KSk7CiAJCX0KIAl9Ci0JaW5wdXRfc3luYyhrZXlwYWQtPmlucHV0X2Rldik7CisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOwogCW1lbWNweShrZXlwYWQtPm1hdHJpeF9rZXlfc3RhdGUsIG5ld19zdGF0ZSwgc2l6ZW9mKG5ld19zdGF0ZSkpOwogfQogCkBAIC0yNTIsMTMgKzI2NCwxNSBAQAogCWlmIChkZWx0YSA9PSAwKQogCQlyZXR1cm47CiAKLQlpZiAoa2V5cGFkLT5yb3RhcnlfdXBfa2V5W3JdICYmIGtleXBhZC0+cm90YXJ5X2Rvd25fa2V5W3JdKSB7Ci0JCWludCBrZXljb2RlID0gKGRlbHRhID4gMCkgPyBrZXlwYWQtPnJvdGFyeV91cF9rZXlbcl0gOgotCQkJCQkgICAga2V5cGFkLT5yb3RhcnlfZG93bl9rZXlbcl07CisJaWYgKGtleXBhZC0+cm90YXJ5X3JlbF9jb2RlW3JdID09IC0xKSB7CisJCWludCBjb2RlID0gTUFYX01BVFJJWF9LRVlfTlVNICsgMiAqIHIgKyAoZGVsdGEgPiAwID8gMCA6IDEpOworCQl1bnNpZ25lZCBjaGFyIGtleWNvZGUgPSBrZXlwYWQtPmtleWNvZGVzW2NvZGVdOwogCiAJCS8qIHNpbXVsYXRlIGEgcHJlc3Mtbi1yZWxlYXNlICovCisJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CiAJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAxKTsKIAkJaW5wdXRfc3luYyhkZXYpOworCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5Y29kZSwgMCk7CiAJCWlucHV0X3N5bmMoZGV2KTsKIAl9IGVsc2UgewpAQCAtMjg2LDYgKzMwMCw3IEBACiBzdGF0aWMgdm9pZCBweGEyN3hfa2V5cGFkX3NjYW5fZGlyZWN0KHN0cnVjdCBweGEyN3hfa2V5cGFkICprZXlwYWQpCiB7CiAJc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrZXlwYWQtPnBkYXRhOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtleXBhZC0+aW5wdXRfZGV2OwogCXVuc2lnbmVkIGludCBuZXdfc3RhdGU7CiAJdWludDMyX3Qga3BkaywgYml0c19jaGFuZ2VkOwogCWludCBpOwpAQCAtMjk1LDkgKzMxMCw2IEBACiAJaWYgKHBkYXRhLT5lbmFibGVfcm90YXJ5MCB8fCBwZGF0YS0+ZW5hYmxlX3JvdGFyeTEpCiAJCXB4YTI3eF9rZXlwYWRfc2Nhbl9yb3Rhcnkoa2V5cGFkKTsKIAotCWlmIChwZGF0YS0+ZGlyZWN0X2tleV9tYXAgPT0gTlVMTCkKLQkJcmV0dXJuOwotCiAJbmV3X3N0YXRlID0gS1BES19ESyhrcGRrKSAmIGtleXBhZC0+ZGlyZWN0X2tleV9tYXNrOwogCWJpdHNfY2hhbmdlZCA9IGtleXBhZC0+ZGlyZWN0X2tleV9zdGF0ZSBeIG5ld19zdGF0ZTsKIApAQCAtMzA1LDEyICszMTcsMTUgQEAKIAkJcmV0dXJuOwogCiAJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5kaXJlY3Rfa2V5X251bTsgaSsrKSB7Ci0JCWlmIChiaXRzX2NoYW5nZWQgJiAoMSA8PCBpKSkKLQkJCWlucHV0X3JlcG9ydF9rZXkoa2V5cGFkLT5pbnB1dF9kZXYsCi0JCQkJCXBkYXRhLT5kaXJlY3Rfa2V5X21hcFtpXSwKLQkJCQkJKG5ld19zdGF0ZSAmICgxIDw8IGkpKSk7CisJCWlmIChiaXRzX2NoYW5nZWQgJiAoMSA8PCBpKSkgeworCQkJaW50IGNvZGUgPSBNQVhfTUFUUklYX0tFWV9OVU0gKyBpOworCisJCQlpbnB1dF9ldmVudChpbnB1dF9kZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIGtleXBhZC0+a2V5Y29kZXNbY29kZV0sCisJCQkJCSBuZXdfc3RhdGUgJiAoMSA8PCBpKSk7CisJCX0KIAl9Ci0JaW5wdXRfc3luYyhrZXlwYWQtPmlucHV0X2Rldik7CisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOwogCWtleXBhZC0+ZGlyZWN0X2tleV9zdGF0ZSA9IG5ld19zdGF0ZTsKIH0KIApAQCAtMzg4LDggKzQwMyw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhMjd4X2tleXBhZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMjd4X2tleXBhZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHB4YTI3eF9rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJY2xrX2Rpc2FibGUoa2V5cGFkLT5jbGspOwpAQCAtNDAwLDggKzQxNiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMjd4X2tleXBhZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcHhhMjd4X2tleXBhZF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcHhhMjd4X2tleXBhZCAqa2V5cGFkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0ga2V5cGFkLT5pbnB1dF9kZXY7CiAKQEAgLTQyMCw1NSArNDM3LDU4IEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHB4YTI3eF9rZXlwYWRfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YTI3eF9rZXlwYWRfcmVzdW1lCU5VTEwKLSNlbmRpZgogCi0jZGVmaW5lIHJlc19zaXplKHJlcykJKChyZXMpLT5lbmQgLSAocmVzKS0+c3RhcnQgKyAxKQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHB4YTI3eF9rZXlwYWRfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcHhhMjd4X2tleXBhZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMjd4X2tleXBhZF9yZXN1bWUsCit9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB4YTI3eF9rZXlwYWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBweGEyN3hfa2V5cGFkICprZXlwYWQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBpcnEsIGVycm9yOwogCi0Ja2V5cGFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHB4YTI3eF9rZXlwYWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoa2V5cGFkID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGRyaXZlciBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Ja2V5cGFkLT5wZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmIChrZXlwYWQtPnBkYXRhID09IE5VTEwpIHsKKwlpZiAocGRhdGEgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIGRlZmluZWRcbiIpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gZmFpbGVkX2ZyZWU7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlwYWQgaXJxXG4iKTsKLQkJZXJyb3IgPSAtRU5YSU87Ci0JCWdvdG8gZmFpbGVkX2ZyZWU7CisJCXJldHVybiAtRU5YSU87CiAJfQogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKLQkJZXJyb3IgPSAtRU5YSU87CisJCXJldHVybiAtRU5YSU87CisJfQorCisJa2V5cGFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHB4YTI3eF9rZXlwYWQpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWtleXBhZCB8fCAhaW5wdXRfZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbGVkX2ZyZWU7CiAJfQogCi0JcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19zaXplKHJlcyksIHBkZXYtPm5hbWUpOworCWtleXBhZC0+cGRhdGEgPSBwZGF0YTsKKwlrZXlwYWQtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlrZXlwYWQtPmlycSA9IGlycTsKKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJL08gbWVtb3J5XG4iKTsKIAkJZXJyb3IgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbGVkX2ZyZWU7CiAJfQogCi0Ja2V5cGFkLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc19zaXplKHJlcykpOworCWtleXBhZC0+bW1pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmIChrZXlwYWQtPm1taW9fYmFzZSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBJL08gbWVtb3J5XG4iKTsKIAkJZXJyb3IgPSAtRU5YSU87CkBAIC00ODIsNDMgKzUwMiwzNSBAQAogCQlnb3RvIGZhaWxlZF9mcmVlX2lvOwogCX0KIAotCS8qIENyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlIGlucHV0IGRyaXZlci4gKi8KLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlucHV0X2RldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwotCX0KLQogCWlucHV0X2Rldi0+bmFtZSA9IHBkZXYtPm5hbWU7CiAJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CiAJaW5wdXRfZGV2LT5vcGVuID0gcHhhMjd4X2tleXBhZF9vcGVuOwogCWlucHV0X2Rldi0+Y2xvc2UgPSBweGEyN3hfa2V5cGFkX2Nsb3NlOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlrZXlwYWQtPmlucHV0X2RldiA9IGlucHV0X2RldjsKKwlpbnB1dF9kZXYtPmtleWNvZGUgPSBrZXlwYWQtPmtleWNvZGVzOworCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2Yoa2V5cGFkLT5rZXljb2Rlc1swXSk7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrZXlwYWQtPmtleWNvZGVzKTsKKwogCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2V5cGFkKTsKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVQKTsKLQlpZiAoKGtleXBhZC0+cGRhdGEtPmVuYWJsZV9yb3RhcnkwICYmCi0JCQlrZXlwYWQtPnBkYXRhLT5yb3RhcnkwX3JlbF9jb2RlKSB8fAotCSAgICAoa2V5cGFkLT5wZGF0YS0+ZW5hYmxlX3JvdGFyeTEgJiYKLQkJCWtleXBhZC0+cGRhdGEtPnJvdGFyeTFfcmVsX2NvZGUpKSB7Ci0JCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfUkVMKTsKLQl9CisJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOKTsKIAogCXB4YTI3eF9rZXlwYWRfYnVpbGRfa2V5Y29kZShrZXlwYWQpOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtleXBhZCk7CisKKwlpZiAoKHBkYXRhLT5lbmFibGVfcm90YXJ5MCAmJiBrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVswXSAhPSAtMSkgfHwKKwkgICAgKHBkYXRhLT5lbmFibGVfcm90YXJ5MSAmJiBrZXlwYWQtPnJvdGFyeV9yZWxfY29kZVsxXSAhPSAtMSkpIHsKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9SRUwpOworCX0KIAogCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBweGEyN3hfa2V5cGFkX2lycV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAogCQkJICAgIHBkZXYtPm5hbWUsIGtleXBhZCk7CiAJaWYgKGVycm9yKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IElSUVxuIik7Ci0JCWdvdG8gZmFpbGVkX2ZyZWVfZGV2OworCQlnb3RvIGZhaWxlZF9wdXRfY2xrOwogCX0KIAotCWtleXBhZC0+aXJxID0gaXJxOwotCiAJLyogUmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZSAqLwogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CiAJaWYgKGVycm9yKSB7CkBAIC01MjYsMjIgKzUzOCwyMSBAQAogCQlnb3RvIGZhaWxlZF9mcmVlX2lycTsKIAl9CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrZXlwYWQpOwogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAogCXJldHVybiAwOwogCiBmYWlsZWRfZnJlZV9pcnE6CiAJZnJlZV9pcnEoaXJxLCBwZGV2KTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLWZhaWxlZF9mcmVlX2RldjoKLQlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogZmFpbGVkX3B1dF9jbGs6CiAJY2xrX3B1dChrZXlwYWQtPmNsayk7CiBmYWlsZWRfZnJlZV9pbzoKIAlpb3VubWFwKGtleXBhZC0+bW1pb19iYXNlKTsKIGZhaWxlZF9mcmVlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUocmVzKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiBmYWlsZWRfZnJlZToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKGtleXBhZCk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNTUyLDggKzU2Myw2IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlmcmVlX2lycShrZXlwYWQtPmlycSwgcGRldik7Ci0KLQljbGtfZGlzYWJsZShrZXlwYWQtPmNsayk7CiAJY2xrX3B1dChrZXlwYWQtPmNsayk7CiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrZXlwYWQtPmlucHV0X2Rldik7CkBAIC01NjIsMTAgKzU3MSwxMSBAQAogCWlvdW5tYXAoa2V5cGFkLT5tbWlvX2Jhc2UpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUocmVzKSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShrZXlwYWQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3NSwxMSArNTg1LDEyIEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyN3hfa2V5cGFkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhMjd4X2tleXBhZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHB4YTI3eF9rZXlwYWRfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHB4YTI3eF9rZXlwYWRfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHB4YTI3eF9rZXlwYWRfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyN3gta2V5cGFkIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGEyN3hfa2V5cGFkX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKaW5kZXggY2VhNzBlNi4uMDcxNGJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJY2hhciBjbGtfbmFtZVs4XTsKLQlpbnQgaSwgazsKKwlpbnQgaTsKIAlpbnQgaXJxLCBlcnJvcjsKIAogCWlmICghcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKQEAgLTE5NSwxNyArMTk1LDE5IEBACiAJaW5wdXQtPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJaW5wdXQtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAKKwlpbnB1dC0+a2V5Y29kZSA9IHBkYXRhLT5rZXljb2RlczsKKwlpbnB1dC0+a2V5Y29kZXNpemUgPSBzaXplb2YocGRhdGEtPmtleWNvZGVzWzBdKTsKKwlpbnB1dC0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUocGRhdGEtPmtleWNvZGVzKTsKKwogCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBzaF9rZXlzY19pc3IsIDAsIHBkZXYtPm5hbWUsIHBkZXYpOwogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJUlFcbiIpOwogCQlnb3RvIGVycjQ7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IFNIX0tFWVNDX01BWEtFWVM7IGkrKykgewotCQlrID0gcGRhdGEtPmtleWNvZGVzW2ldOwotCQlpZiAoaykKLQkJCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0LCBFVl9LRVksIGspOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgU0hfS0VZU0NfTUFYS0VZUzsgaSsrKQorCQlfX3NldF9iaXQocGRhdGEtPmtleWNvZGVzW2ldLCBpbnB1dC0+a2V5Yml0KTsKKwlfX2NsZWFyX2JpdChLRVlfUkVTRVJWRUQsIGlucHV0LT5rZXliaXQpOwogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogCWlmIChlcnJvcikgewpAQCAtMjIxLDcgKzIyMyw5IEBACiAJaW93cml0ZTE2KEtZQ1IyX0lSUV9MRVZFTCwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IyX09GRlMpOwogCiAJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCiAJcmV0dXJuIDA7CisKICBlcnI1OgogCWZyZWVfaXJxKGlycSwgcGRldik7CiAgZXJyNDoKQEAgLTI1Miw2ICsyNTYsNyBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUocHJpdik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY3LDExICsyNzIsMTIgQEAKIAlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkgewogCQl2YWx1ZSB8PSAweDgwOwogCQllbmFibGVfaXJxX3dha2UoaXJxKTsKLQl9Ci0JZWxzZQorCX0gZWxzZSB7CiAJCXZhbHVlICY9IH4weDgwOworCX0KIAogCWlvd3JpdGUxNih2YWx1ZSwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCmluZGV4IDlmY2U2ZDEuLjQ3MmI1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYwpAQCAtNzMsNyArNzMsNyBAQAogICovCiAKIHN0cnVjdCBzdW5rYmQgewotCXVuc2lnbmVkIGNoYXIga2V5Y29kZVsxMjhdOworCXVuc2lnbmVkIGNoYXIga2V5Y29kZVtBUlJBWV9TSVpFKHN1bmtiZF9rZXljb2RlKV07CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAJc3RydWN0IHdvcmtfc3RydWN0IHRxOwpAQCAtODEsNyArODEsNyBAQAogCWNoYXIgbmFtZVs2NF07CiAJY2hhciBwaHlzWzMyXTsKIAljaGFyIHR5cGU7Ci0JdW5zaWduZWQgY2hhciBlbmFibGVkOworCWJvb2wgZW5hYmxlZDsKIAl2b2xhdGlsZSBzOCByZXNldDsKIAl2b2xhdGlsZSBzOCBsYXlvdXQ7CiB9OwpAQCAtOTQsMTAgKzk0LDE0IEBACiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3Vua2JkX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLAogCQl1bnNpZ25lZCBjaGFyIGRhdGEsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3Qgc3Vua2JkKiBzdW5rYmQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CisJc3RydWN0IHN1bmtiZCAqc3Vua2JkID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwogCi0JaWYgKHN1bmtiZC0+cmVzZXQgPD0gLTEpIHsJCS8qIElmIGNwW2ldIGlzIDB4ZmYsIHN1bmtiZC0+cmVzZXQgd2lsbCBzdGF5IC0xLiAqLwotCQlzdW5rYmQtPnJlc2V0ID0gZGF0YTsJCS8qIFRoZSBrZXlib2FyZCBzZW5kcyAweGZmIDB4ZmYgMHhJRCBvbiBwb3dlcnVwICovCisJaWYgKHN1bmtiZC0+cmVzZXQgPD0gLTEpIHsKKwkJLyoKKwkJICogSWYgY3BbaV0gaXMgMHhmZiwgc3Vua2JkLT5yZXNldCB3aWxsIHN0YXkgLTEuCisJCSAqIFRoZSBrZXlib2FyZCBzZW5kcyAweGZmIDB4ZmYgMHhJRCBvbiBwb3dlcnVwLgorCQkgKi8KKwkJc3Vua2JkLT5yZXNldCA9IGRhdGE7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmc3Vua2JkLT53YWl0KTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTEwLDI5ICsxMTQsMzMgQEAKIAogCXN3aXRjaCAoZGF0YSkgewogCi0JCWNhc2UgU1VOS0JEX1JFVF9SRVNFVDoKLQkJCXNjaGVkdWxlX3dvcmsoJnN1bmtiZC0+dHEpOwotCQkJc3Vua2JkLT5yZXNldCA9IC0xOworCWNhc2UgU1VOS0JEX1JFVF9SRVNFVDoKKwkJc2NoZWR1bGVfd29yaygmc3Vua2JkLT50cSk7CisJCXN1bmtiZC0+cmVzZXQgPSAtMTsKKwkJYnJlYWs7CisKKwljYXNlIFNVTktCRF9SRVRfTEFZT1VUOgorCQlzdW5rYmQtPmxheW91dCA9IC0xOworCQlicmVhazsKKworCWNhc2UgU1VOS0JEX1JFVF9BTExVUDogLyogQWxsIGtleXMgcmVsZWFzZWQgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoIXN1bmtiZC0+ZW5hYmxlZCkKIAkJCWJyZWFrOwogCi0JCWNhc2UgU1VOS0JEX1JFVF9MQVlPVVQ6Ci0JCQlzdW5rYmQtPmxheW91dCA9IC0xOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTVU5LQkRfUkVUX0FMTFVQOiAvKiBBbGwga2V5cyByZWxlYXNlZCAqLwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWlmICghc3Vua2JkLT5lbmFibGVkKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoc3Vua2JkLT5rZXljb2RlW2RhdGEgJiBTVU5LQkRfS0VZXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9yZXBvcnRfa2V5KHN1bmtiZC0+ZGV2LCBzdW5rYmQtPmtleWNvZGVbZGF0YSAmIFNVTktCRF9LRVldLCAhKGRhdGEgJiBTVU5LQkRfUkVMRUFTRSkpOwotCQkJCWlucHV0X3N5bmMoc3Vua2JkLT5kZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAic3Vua2JkLmM6IFVua25vd24ga2V5IChzY2FuY29kZSAlI3gpICVzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICYgU1VOS0JEX0tFWSwgZGF0YSAmIFNVTktCRF9SRUxFQVNFID8gInJlbGVhc2VkIiA6ICJwcmVzc2VkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCWlmIChzdW5rYmQtPmtleWNvZGVbZGF0YSAmIFNVTktCRF9LRVldKSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KHN1bmtiZC0+ZGV2LAorCQkJCQkgc3Vua2JkLT5rZXljb2RlW2RhdGEgJiBTVU5LQkRfS0VZXSwKKwkJCQkJICEoZGF0YSAmIFNVTktCRF9SRUxFQVNFKSk7CisJCQlpbnB1dF9zeW5jKHN1bmtiZC0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkic3Vua2JkLmM6IFVua25vd24ga2V5IChzY2FuY29kZSAlI3gpICVzLlxuIiwKKwkJCQlkYXRhICYgU1VOS0JEX0tFWSwKKwkJCQlkYXRhICYgU1VOS0JEX1JFTEVBU0UgPyAicmVsZWFzZWQiIDogInByZXNzZWQiKTsKKwkJfQogCX0KIG91dDoKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xNDIsMzQgKzE1MCwzNyBAQAogICogc3Vua2JkX2V2ZW50KCkgaGFuZGxlcyBldmVudHMgZnJvbSB0aGUgaW5wdXQgbW9kdWxlLgogICovCiAKLXN0YXRpYyBpbnQgc3Vua2JkX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHN1bmtiZF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCisJCQl1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3Qgc3Vua2JkICpzdW5rYmQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc3dpdGNoICh0eXBlKSB7CiAKLQkJY2FzZSBFVl9MRUQ6CisJY2FzZSBFVl9MRUQ6CiAKLQkJCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfU0VUTEVEKTsKLQkJCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sCi0JCQkJKCEhdGVzdF9iaXQoTEVEX0NBUFNMLCBkZXYtPmxlZCkgPDwgMykgfCAoISF0ZXN0X2JpdChMRURfU0NST0xMTCwgZGV2LT5sZWQpIDw8IDIpIHwKLQkJCQkoISF0ZXN0X2JpdChMRURfQ09NUE9TRSwgZGV2LT5sZWQpIDw8IDEpIHwgISF0ZXN0X2JpdChMRURfTlVNTCwgZGV2LT5sZWQpKTsKKwkJc2VyaW9fd3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9TRVRMRUQpOworCQlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLAorCQkJKCEhdGVzdF9iaXQoTEVEX0NBUFNMLCAgIGRldi0+bGVkKSA8PCAzKSB8CisJCQkoISF0ZXN0X2JpdChMRURfU0NST0xMTCwgZGV2LT5sZWQpIDw8IDIpIHwKKwkJCSghIXRlc3RfYml0KExFRF9DT01QT1NFLCBkZXYtPmxlZCkgPDwgMSkgfAorCQkJICEhdGVzdF9iaXQoTEVEX05VTUwsICAgIGRldi0+bGVkKSk7CisJCXJldHVybiAwOworCisJY2FzZSBFVl9TTkQ6CisKKwkJc3dpdGNoIChjb2RlKSB7CisKKwkJY2FzZSBTTkRfQ0xJQ0s6CisJCQlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX05PQ0xJQ0sgLSB2YWx1ZSk7CiAJCQlyZXR1cm4gMDsKIAotCQljYXNlIEVWX1NORDoKKwkJY2FzZSBTTkRfQkVMTDoKKwkJCXNlcmlvX3dyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfQkVMTE9GRiAtIHZhbHVlKTsKKwkJCXJldHVybiAwOworCQl9CiAKLQkJCXN3aXRjaCAoY29kZSkgewotCi0JCQkJY2FzZSBTTkRfQ0xJQ0s6Ci0JCQkJCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfTk9DTElDSyAtIHZhbHVlKTsKLQkJCQkJcmV0dXJuIDA7Ci0KLQkJCQljYXNlIFNORF9CRUxMOgotCQkJCQlzdW5rYmQtPnNlcmlvLT53cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX0JFTExPRkYgLSB2YWx1ZSk7Ci0JCQkJCXJldHVybiAwOwotCQkJfQotCi0JCQlicmVhazsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIC0xOwpAQCAtMTgzLDcgKzE5NCw3IEBACiBzdGF0aWMgaW50IHN1bmtiZF9pbml0aWFsaXplKHN0cnVjdCBzdW5rYmQgKnN1bmtiZCkKIHsKIAlzdW5rYmQtPnJlc2V0ID0gLTI7Ci0Jc3Vua2JkLT5zZXJpby0+d3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9SRVNFVCk7CisJc2VyaW9fd3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9SRVNFVCk7CiAJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3Vua2JkLT53YWl0LCBzdW5rYmQtPnJlc2V0ID49IDAsIEhaKTsKIAlpZiAoc3Vua2JkLT5yZXNldCA8IDApCiAJCXJldHVybiAtMTsKQEAgLTE5MiwxMCArMjAzLDEzIEBACiAKIAlpZiAoc3Vua2JkLT50eXBlID09IDQpIHsJLyogVHlwZSA0IGtleWJvYXJkICovCiAJCXN1bmtiZC0+bGF5b3V0ID0gLTI7Ci0JCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfTEFZT1VUKTsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoc3Vua2JkLT53YWl0LCBzdW5rYmQtPmxheW91dCA+PSAwLCBIWi80KTsKLQkJaWYgKHN1bmtiZC0+bGF5b3V0IDwgMCkgcmV0dXJuIC0xOwotCQlpZiAoc3Vua2JkLT5sYXlvdXQgJiBTVU5LQkRfTEFZT1VUXzVfTUFTSykgc3Vua2JkLT50eXBlID0gNTsKKwkJc2VyaW9fd3JpdGUoc3Vua2JkLT5zZXJpbywgU1VOS0JEX0NNRF9MQVlPVVQpOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzdW5rYmQtPndhaXQsCisJCQkJCQkgc3Vua2JkLT5sYXlvdXQgPj0gMCwgSFogLyA0KTsKKwkJaWYgKHN1bmtiZC0+bGF5b3V0IDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKHN1bmtiZC0+bGF5b3V0ICYgU1VOS0JEX0xBWU9VVF81X01BU0spCisJCQlzdW5rYmQtPnR5cGUgPSA1OwogCX0KIAogCXJldHVybiAwOwpAQCAtMjEyLDE1ICsyMjYsMTkgQEAKIAogCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHN1bmtiZC0+d2FpdCwgc3Vua2JkLT5yZXNldCA+PSAwLCBIWik7CiAKLQlzdW5rYmQtPnNlcmlvLT53cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX1NFVExFRCk7Ci0Jc3Vua2JkLT5zZXJpby0+d3JpdGUoc3Vua2JkLT5zZXJpbywKLQkJKCEhdGVzdF9iaXQoTEVEX0NBUFNMLCBzdW5rYmQtPmRldi0+bGVkKSA8PCAzKSB8ICghIXRlc3RfYml0KExFRF9TQ1JPTExMLCBzdW5rYmQtPmRldi0+bGVkKSA8PCAyKSB8Ci0JCSghIXRlc3RfYml0KExFRF9DT01QT1NFLCBzdW5rYmQtPmRldi0+bGVkKSA8PCAxKSB8ICEhdGVzdF9iaXQoTEVEX05VTUwsIHN1bmtiZC0+ZGV2LT5sZWQpKTsKLQlzdW5rYmQtPnNlcmlvLT53cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX05PQ0xJQ0sgLSAhIXRlc3RfYml0KFNORF9DTElDSywgc3Vua2JkLT5kZXYtPnNuZCkpOwotCXN1bmtiZC0+c2VyaW8tPndyaXRlKHN1bmtiZC0+c2VyaW8sIFNVTktCRF9DTURfQkVMTE9GRiAtICEhdGVzdF9iaXQoU05EX0JFTEwsIHN1bmtiZC0+ZGV2LT5zbmQpKTsKKwlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLCBTVU5LQkRfQ01EX1NFVExFRCk7CisJc2VyaW9fd3JpdGUoc3Vua2JkLT5zZXJpbywKKwkJKCEhdGVzdF9iaXQoTEVEX0NBUFNMLCAgIHN1bmtiZC0+ZGV2LT5sZWQpIDw8IDMpIHwKKwkJKCEhdGVzdF9iaXQoTEVEX1NDUk9MTEwsIHN1bmtiZC0+ZGV2LT5sZWQpIDw8IDIpIHwKKwkJKCEhdGVzdF9iaXQoTEVEX0NPTVBPU0UsIHN1bmtiZC0+ZGV2LT5sZWQpIDw8IDEpIHwKKwkJICEhdGVzdF9iaXQoTEVEX05VTUwsICAgIHN1bmtiZC0+ZGV2LT5sZWQpKTsKKwlzZXJpb193cml0ZShzdW5rYmQtPnNlcmlvLAorCQlTVU5LQkRfQ01EX05PQ0xJQ0sgLSAhIXRlc3RfYml0KFNORF9DTElDSywgc3Vua2JkLT5kZXYtPnNuZCkpOworCXNlcmlvX3dyaXRlKHN1bmtiZC0+c2VyaW8sCisJCVNVTktCRF9DTURfQkVMTE9GRiAtICEhdGVzdF9iaXQoU05EX0JFTEwsIHN1bmtiZC0+ZGV2LT5zbmQpKTsKIH0KIAotc3RhdGljIHZvaWQgc3Vua2JkX2VuYWJsZShzdHJ1Y3Qgc3Vua2JkICpzdW5rYmQsIGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBzdW5rYmRfZW5hYmxlKHN0cnVjdCBzdW5rYmQgKnN1bmtiZCwgYm9vbCBlbmFibGUpCiB7CiAJc2VyaW9fcGF1c2Vfcngoc3Vua2JkLT5zZXJpbyk7CiAJc3Vua2JkLT5lbmFibGVkID0gZW5hYmxlOwpAQCAtMjI4LDcgKzI0Niw4IEBACiB9CiAKIC8qCi0gKiBzdW5rYmRfY29ubmVjdCgpIHByb2JlcyBmb3IgYSBTdW4ga2V5Ym9hcmQgYW5kIGZpbGxzIHRoZSBuZWNlc3Nhcnkgc3RydWN0dXJlcy4KKyAqIHN1bmtiZF9jb25uZWN0KCkgcHJvYmVzIGZvciBhIFN1biBrZXlib2FyZCBhbmQgZmlsbHMgdGhlIG5lY2Vzc2FyeQorICogc3RydWN0dXJlcy4KICAqLwogCiBzdGF0aWMgaW50IHN1bmtiZF9jb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKQEAgLTI2MCw3ICsyNzksOCBAQAogCQlnb3RvIGZhaWwzOwogCX0KIAotCXNucHJpbnRmKHN1bmtiZC0+bmFtZSwgc2l6ZW9mKHN1bmtiZC0+bmFtZSksICJTdW4gVHlwZSAlZCBrZXlib2FyZCIsIHN1bmtiZC0+dHlwZSk7CisJc25wcmludGYoc3Vua2JkLT5uYW1lLCBzaXplb2Yoc3Vua2JkLT5uYW1lKSwKKwkJICJTdW4gVHlwZSAlZCBrZXlib2FyZCIsIHN1bmtiZC0+dHlwZSk7CiAJbWVtY3B5KHN1bmtiZC0+a2V5Y29kZSwgc3Vua2JkX2tleWNvZGUsIHNpemVvZihzdW5rYmQtPmtleWNvZGUpKTsKIAogCWlucHV0X2Rldi0+bmFtZSA9IHN1bmtiZC0+bmFtZTsKQEAgLTI4NCwxMSArMzA0LDExIEBACiAJaW5wdXRfZGV2LT5rZXljb2RlID0gc3Vua2JkLT5rZXljb2RlOwogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShzdW5rYmRfa2V5Y29kZSk7Ci0JZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQotCQlzZXRfYml0KHN1bmtiZC0+a2V5Y29kZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwotCWNsZWFyX2JpdCgwLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3Vua2JkX2tleWNvZGUpOyBpKyspCisJCV9fc2V0X2JpdChzdW5rYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKKwlfX2NsZWFyX2JpdChLRVlfUkVTRVJWRUQsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAotCXN1bmtiZF9lbmFibGUoc3Vua2JkLCAxKTsKKwlzdW5rYmRfZW5hYmxlKHN1bmtiZCwgdHJ1ZSk7CiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uoc3Vua2JkLT5kZXYpOwogCWlmIChlcnIpCkBAIC0yOTYsNyArMzE2LDcgQEAKIAogCXJldHVybiAwOwogCi0gZmFpbDQ6CXN1bmtiZF9lbmFibGUoc3Vua2JkLCAwKTsKKyBmYWlsNDoJc3Vua2JkX2VuYWJsZShzdW5rYmQsIGZhbHNlKTsKICBmYWlsMzoJc2VyaW9fY2xvc2Uoc2VyaW8pOwogIGZhaWwyOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CiAgZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CkBAIC0zMTIsNyArMzMyLDcgQEAKIHsKIAlzdHJ1Y3Qgc3Vua2JkICpzdW5rYmQgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CiAKLQlzdW5rYmRfZW5hYmxlKHN1bmtiZCwgMCk7CisJc3Vua2JkX2VuYWJsZShzdW5rYmQsIGZhbHNlKTsKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzdW5rYmQtPmRldik7CiAJc2VyaW9fY2xvc2Uoc2VyaW8pOwogCXNlcmlvX3NldF9kcnZkYXRhKHNlcmlvLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdG9zYWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90b3Nha2JkLmMKaW5kZXggNjc3Mjc2Yi4uNDJjYjNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90b3Nha2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90b3Nha2JkLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgS0JfRElTQ0hBUkdFX0RFTEFZCTEwCiAjZGVmaW5lIEtCX0FDVElWQVRFX0RFTEFZCTEwCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9zYWtiZF9rZXljb2RlW05SX1NDQU5DT0RFU10gPSB7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgdG9zYWtiZF9rZXljb2RlW05SX1NDQU5DT0RFU10gPSB7CiAwLAogMCwgS0VZX1csIDAsIDAsIDAsIEtFWV9LLCBLRVlfQkFDS1NQQUNFLCBLRVlfUCwKIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCkBAIC01MCw5ICs1MCw5IEBACiB9OwogCiBzdHJ1Y3QgdG9zYWtiZCB7Ci0JdW5zaWduZWQgaW50IGtleWNvZGVbQVJSQVlfU0laRSh0b3Nha2JkX2tleWNvZGUpXTsKKwl1bnNpZ25lZCBzaG9ydCBrZXljb2RlW0FSUkFZX1NJWkUodG9zYWtiZF9rZXljb2RlKV07CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Ci0JaW50IHN1c3BlbmRlZDsKKwlib29sIHN1c3BlbmRlZDsKIAlzcGlubG9ja190IGxvY2s7IC8qIHByb3RlY3Qga2JkIHNjYW5uaW5nICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiB9OwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0b3Nha2JkLT5sb2NrLCBmbGFncyk7Ci0JdG9zYWtiZC0+c3VzcGVuZGVkID0gMTsKKwl0b3Nha2JkLT5zdXNwZW5kZWQgPSB0cnVlOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRvc2FrYmQtPmxvY2ssIGZsYWdzKTsKIAogCWRlbF90aW1lcl9zeW5jKCZ0b3Nha2JkLT50aW1lcik7CkBAIC0yMjcsNyArMjI3LDcgQEAKIHsKIAlzdHJ1Y3QgdG9zYWtiZCAqdG9zYWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQl0b3Nha2JkLT5zdXNwZW5kZWQgPSAwOworCXRvc2FrYmQtPnN1c3BlbmRlZCA9IGZhbHNlOwogCXRvc2FrYmRfc2NhbmtleWJvYXJkKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTI3NywxNCArMjc3LDE0IEBACiAKIAlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKTsKIAlpbnB1dF9kZXYtPmtleWNvZGUgPSB0b3Nha2JkLT5rZXljb2RlOwotCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgaW50KTsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHRvc2FrYmQtPmtleWNvZGVbMF0pOwogCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUodG9zYWtiZF9rZXljb2RlKTsKIAogCW1lbWNweSh0b3Nha2JkLT5rZXljb2RlLCB0b3Nha2JkX2tleWNvZGUsIHNpemVvZih0b3Nha2JkX2tleWNvZGUpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRvc2FrYmRfa2V5Y29kZSk7IGkrKykKIAkJX19zZXRfYml0KHRvc2FrYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQljbGVhcl9iaXQoMCwgaW5wdXRfZGV2LT5rZXliaXQpOworCV9fY2xlYXJfYml0KEtFWV9SRVNFUlZFRCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCiAJLyogU2V0dXAgc2Vuc2UgaW50ZXJydXB0cyAtIFJpc2luZ0VkZ2UgRGV0ZWN0LCBzZW5zZSBsaW5lcyBhcyBpbnB1dHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgVE9TQV9LRVlfU0VOU0VfTlVNOyBpKyspIHsKQEAgLTM0NCw3ICszNDQsNyBAQAogCQkJCSIgZGlyZWN0aW9uIGZvciBHUElPICVkLCBlcnJvciAlZFxuIiwKIAkJCQlncGlvLCBlcnJvcik7CiAJCQlncGlvX2ZyZWUoZ3Bpbyk7Ci0JCQlnb3RvIGZhaWw7CisJCQlnb3RvIGZhaWwyOwogCQl9CiAKIAl9CkBAIC0zNTMsNyArMzUzLDcgQEAKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0b3Nha2JkOiBVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlLCAiCiAJCQkiZXJyb3I6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsMjsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJpbnB1dDogVG9zYSBLZXlib2FyZCBSZWdpc3RlcmVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTI5NzdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCkBAIC0wLDAgKzEsNDgwIEBACisvKgorICogdHdsNDAzMF9rZXlwYWQuYyAtIGRyaXZlciBmb3IgOHg4IGtleXBhZCBjb250cm9sbGVyIGluIHR3bDQwMzAgY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvZGUgcmUtd3JpdHRlbiBmb3IgMjQzMFNEUCBieToKKyAqIFN5ZWQgTW9oYW1tZWQgS2hhc2ltIDx4MGtoYXNpbUB0aS5jb20+CisgKgorICogSW5pdGlhbCBDb2RlOgorICogTWFuanVuYXRoYSBHIEsgPG1hbmp1Z2tAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworCisvKgorICogVGhlIFRXTDQwMzAgZmFtaWx5IGNoaXBzIGluY2x1ZGUgYSBrZXlwYWQgY29udHJvbGxlciB0aGF0IHN1cHBvcnRzCisgKiB1cCB0byBhbiA4eDggc3dpdGNoIG1hdHJpeC4gIFRoZSBjb250cm9sbGVyIGNhbiBpc3N1ZSBzeXN0ZW0gd2FrZXVwCisgKiBldmVudHMsIHNpbmNlIGl0IHVzZXMgb25seSB0aGUgYWx3YXlzLW9uIDMyS2lIeiBvc2NpbGxhdG9yLCBhbmQgaGFzCisgKiBhbiBpbnRlcm5hbCBzdGF0ZSBtYWNoaW5lIHRoYXQgZGVjb2RlcyBwcmVzc2VkIGtleXMsIGluY2x1ZGluZworICogbXVsdGkta2V5IGNvbWJpbmF0aW9ucy4KKyAqCisgKiBUaGlzIGRyaXZlciBsZXRzIGJvYXJkcyBkZWZpbmUgd2hhdCBrZXljb2RlcyB0aGV5IHdpc2ggdG8gcmVwb3J0IGZvcgorICogd2hpY2ggc2NhbmNvZGVzLCBhcyBwYXJ0IG9mIHRoZSAic3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEiIHVzZWQgaW4KKyAqIHRoZSBwcm9iZSgpIHJvdXRpbmUuCisgKgorICogU2VlIHRoZSBUUFM2NTk1MCBkb2N1bWVudGF0aW9uOyB0aGF0J3MgdGhlIGdlbmVyYWwgYXZhaWxhYmlsaXR5CisgKiB2ZXJzaW9uIG9mIHRoZSBUV0w1MDMwIHNlY29uZCBnZW5lcmF0aW9uIHBhcnQuCisgKi8KKyNkZWZpbmUgVFdMNDAzMF9NQVhfUk9XUwk4CS8qIFRXTDQwMzAgaGFyZCBsaW1pdCAqLworI2RlZmluZSBUV0w0MDMwX01BWF9DT0xTCTgKKyNkZWZpbmUgVFdMNDAzMF9ST1dfU0hJRlQJMworI2RlZmluZSBUV0w0MDMwX0tFWU1BUF9TSVpFCShUV0w0MDMwX01BWF9ST1dTICogVFdMNDAzMF9NQVhfQ09MUykKKworc3RydWN0IHR3bDQwMzBfa2V5cGFkIHsKKwl1bnNpZ25lZCBzaG9ydAlrZXltYXBbVFdMNDAzMF9LRVlNQVBfU0laRV07CisJdTE2CQlrcF9zdGF0ZVtUV0w0MDMwX01BWF9ST1dTXTsKKwl1bnNpZ25lZAluX3Jvd3M7CisJdW5zaWduZWQJbl9jb2xzOworCXVuc2lnbmVkCWlycTsKKworCXN0cnVjdCBkZXZpY2UgKmRiZ19kZXY7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBhcmJpdHJhcnkgcHJlc2NhbGVyIHZhbHVlIDAuLjcgKi8KKyNkZWZpbmUgUFRWX1BSRVNDQUxFUgkJCTQKKworLyogUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZSBLRVlQX0NUUkwJCQkweDAwCisjZGVmaW5lIEtFWVBfREVCCQkJMHgwMQorI2RlZmluZSBLRVlQX0xPTkdfS0VZCQkJMHgwMgorI2RlZmluZSBLRVlQX0xLX1BUVgkJCTB4MDMKKyNkZWZpbmUgS0VZUF9USU1FT1VUX0wJCQkweDA0CisjZGVmaW5lIEtFWVBfVElNRU9VVF9ICQkJMHgwNQorI2RlZmluZSBLRVlQX0tCQwkJCTB4MDYKKyNkZWZpbmUgS0VZUF9LQlIJCQkweDA3CisjZGVmaW5lIEtFWVBfU01TCQkJMHgwOAorI2RlZmluZSBLRVlQX0ZVTExfQ09ERV83XzAJCTB4MDkJLyogcm93IDAgY29sdW1uIHN0YXR1cyAqLworI2RlZmluZSBLRVlQX0ZVTExfQ09ERV8xNV84CQkweDBhCS8qIC4uLiByb3cgMSAuLi4gKi8KKyNkZWZpbmUgS0VZUF9GVUxMX0NPREVfMjNfMTYJCTB4MGIKKyNkZWZpbmUgS0VZUF9GVUxMX0NPREVfMzFfMjQJCTB4MGMKKyNkZWZpbmUgS0VZUF9GVUxMX0NPREVfMzlfMzIJCTB4MGQKKyNkZWZpbmUgS0VZUF9GVUxMX0NPREVfNDdfNDAJCTB4MGUKKyNkZWZpbmUgS0VZUF9GVUxMX0NPREVfNTVfNDgJCTB4MGYKKyNkZWZpbmUgS0VZUF9GVUxMX0NPREVfNjNfNTYJCTB4MTAKKyNkZWZpbmUgS0VZUF9JU1IxCQkJMHgxMQorI2RlZmluZSBLRVlQX0lNUjEJCQkweDEyCisjZGVmaW5lIEtFWVBfSVNSMgkJCTB4MTMKKyNkZWZpbmUgS0VZUF9JTVIyCQkJMHgxNAorI2RlZmluZSBLRVlQX1NJUgkJCTB4MTUKKyNkZWZpbmUgS0VZUF9FRFIJCQkweDE2CS8qIGVkZ2UgdHJpZ2dlcnMgKi8KKyNkZWZpbmUgS0VZUF9TSUhfQ1RSTAkJCTB4MTcKKworLyogS0VZUF9DVFJMX1JFRyBGaWVsZHMgKi8KKyNkZWZpbmUgS0VZUF9DVFJMX1NPRlRfTlJTVAkJQklUKDApCisjZGVmaW5lIEtFWVBfQ1RSTF9TT0ZUTU9ERU4JCUJJVCgxKQorI2RlZmluZSBLRVlQX0NUUkxfTEtfRU4JCQlCSVQoMikKKyNkZWZpbmUgS0VZUF9DVFJMX1RPRV9FTgkJQklUKDMpCisjZGVmaW5lIEtFWVBfQ1RSTF9UT0xFX0VOCQlCSVQoNCkKKyNkZWZpbmUgS0VZUF9DVFJMX1JQX0VOCQkJQklUKDUpCisjZGVmaW5lIEtFWVBfQ1RSTF9LQkRfT04JCUJJVCg2KQorCisvKiBLRVlQX0RFQiwgS0VZUF9MT05HX0tFWSwgS0VZUF9USU1FT1VUX3gqLworI2RlZmluZSBLRVlQX1BFUklPRF9VUyh0LCBwcmVzY2FsZSkJKCh0KSAvICgzMSA8PCAocHJlc2NhbGUgKyAxKSkgLSAxKQorCisvKiBLRVlQX0xLX1BUVl9SRUcgRmllbGRzICovCisjZGVmaW5lIEtFWVBfTEtfUFRWX1BUVl9TSElGVAkJNQorCisvKiBLRVlQX3tJTVIsSVNSLFNJUn0gRmllbGRzICovCisjZGVmaW5lIEtFWVBfSU1SMV9NSVMJCQlCSVQoMykKKyNkZWZpbmUgS0VZUF9JTVIxX1RPCQkJQklUKDIpCisjZGVmaW5lIEtFWVBfSU1SMV9MSwkJCUJJVCgxKQorI2RlZmluZSBLRVlQX0lNUjFfS1AJCQlCSVQoMCkKKworLyogS0VZUF9FRFIgRmllbGRzICovCisjZGVmaW5lIEtFWVBfRURSX0tQX0ZBTExJTkcJCTB4MDEKKyNkZWZpbmUgS0VZUF9FRFJfS1BfUklTSU5HCQkweDAyCisjZGVmaW5lIEtFWVBfRURSX0tQX0JPVEgJCTB4MDMKKyNkZWZpbmUgS0VZUF9FRFJfTEtfRkFMTElORwkJMHgwNAorI2RlZmluZSBLRVlQX0VEUl9MS19SSVNJTkcJCTB4MDgKKyNkZWZpbmUgS0VZUF9FRFJfVE9fRkFMTElORwkJMHgxMAorI2RlZmluZSBLRVlQX0VEUl9UT19SSVNJTkcJCTB4MjAKKyNkZWZpbmUgS0VZUF9FRFJfTUlTX0ZBTExJTkcJCTB4NDAKKyNkZWZpbmUgS0VZUF9FRFJfTUlTX1JJU0lORwkJMHg4MAorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgdHdsNDAzMF9rcHJlYWQoc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwKKwkJdTggKmRhdGEsIHUzMiByZWcsIHU4IG51bV9ieXRlcykKK3sKKwlpbnQgcmV0ID0gdHdsNDAzMF9pMmNfcmVhZChUV0w0MDMwX01PRFVMRV9LRVlQQUQsIGRhdGEsIHJlZywgbnVtX2J5dGVzKTsKKworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybihrcC0+ZGJnX2RldiwKKwkJCSJDb3VsZG4ndCByZWFkIFRXTDQwMzA6ICVYIC0gcmV0ICVkWyV4XVxuIiwKKwkJCSByZWcsIHJldCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMF9rcHdyaXRlX3U4KHN0cnVjdCB0d2w0MDMwX2tleXBhZCAqa3AsIHU4IGRhdGEsIHUzMiByZWcpCit7CisJaW50IHJldCA9IHR3bDQwMzBfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0tFWVBBRCwgZGF0YSwgcmVnKTsKKworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybihrcC0+ZGJnX2RldiwKKwkJCSJDb3VsZCBub3Qgd3JpdGUgVFdMNDAzMDogJVggLSByZXQgJWRbJXhdXG4iLAorCQkJIHJlZywgcmV0LCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1MTYgdHdsNDAzMF9jb2xfeGxhdGUoc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwgdTggY29sKQoreworCS8qIElmIGFsbCBiaXRzIGluIGEgcm93IGFyZSBhY3RpdmUgZm9yIGFsbCBjb2xvdW1ucyB0aGVuCisJICogd2UgaGF2ZSB0aGF0IHJvdyBsaW5lIGNvbm5lY3RlZCB0byBnbmQuIE1hcmsgdGhpcworCSAqIGtleSBvbiBhcyBpZiBpdCB3YXMgb24gbWF0cml4IHBvc2l0aW9uIG5fY29scyAoaWUKKwkgKiBvbmUgaGlnaGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIG1hdHJpeCkuCisJICovCisJaWYgKGNvbCA9PSAweEZGKQorCQlyZXR1cm4gMSA8PCBrcC0+bl9jb2xzOworCWVsc2UKKwkJcmV0dXJuIGNvbCAmICgoMSA8PCBrcC0+bl9jb2xzKSAtIDEpOworfQorCitzdGF0aWMgaW50IHR3bDQwMzBfcmVhZF9rcF9tYXRyaXhfc3RhdGUoc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcCwgdTE2ICpzdGF0ZSkKK3sKKwl1OCBuZXdfc3RhdGVbVFdMNDAzMF9NQVhfUk9XU107CisJaW50IHJvdzsKKwlpbnQgcmV0ID0gdHdsNDAzMF9rcHJlYWQoa3AsIG5ld19zdGF0ZSwKKwkJCQkgS0VZUF9GVUxMX0NPREVfN18wLCBrcC0+bl9yb3dzKTsKKwlpZiAocmV0ID49IDApCisJCWZvciAocm93ID0gMDsgcm93IDwga3AtPm5fcm93czsgcm93KyspCisJCQlzdGF0ZVtyb3ddID0gdHdsNDAzMF9jb2xfeGxhdGUoa3AsIG5ld19zdGF0ZVtyb3ddKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMF9pc19pbl9naG9zdF9zdGF0ZShzdHJ1Y3QgdHdsNDAzMF9rZXlwYWQgKmtwLCB1MTYgKmtleV9zdGF0ZSkKK3sKKwlpbnQgaTsKKwl1MTYgY2hlY2sgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGtwLT5uX3Jvd3M7IGkrKykgeworCQl1MTYgY29sID0ga2V5X3N0YXRlW2ldOworCisJCWlmICgoY29sICYgY2hlY2spICYmIGh3ZWlnaHQxNihjb2wpID4gMSkKKwkJCXJldHVybiAxOworCisJCWNoZWNrIHw9IGNvbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHdsNDAzMF9rcF9zY2FuKHN0cnVjdCB0d2w0MDMwX2tleXBhZCAqa3AsIGJvb2wgcmVsZWFzZV9hbGwpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBrcC0+aW5wdXQ7CisJdTE2IG5ld19zdGF0ZVtUV0w0MDMwX01BWF9ST1dTXTsKKwlpbnQgY29sLCByb3c7CisKKwlpZiAocmVsZWFzZV9hbGwpCisJCW1lbXNldChuZXdfc3RhdGUsIDAsIHNpemVvZihuZXdfc3RhdGUpKTsKKwllbHNlIHsKKwkJLyogY2hlY2sgZm9yIGFueSBjaGFuZ2VzICovCisJCWludCByZXQgPSB0d2w0MDMwX3JlYWRfa3BfbWF0cml4X3N0YXRlKGtwLCBuZXdfc3RhdGUpOworCisJCWlmIChyZXQgPCAwKQkvKiBwYW5pYyAuLi4gKi8KKwkJCXJldHVybjsKKworCQlpZiAodHdsNDAzMF9pc19pbl9naG9zdF9zdGF0ZShrcCwgbmV3X3N0YXRlKSkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBjaGVjayBmb3IgY2hhbmdlcyBhbmQgcHJpbnQgdGhvc2UgKi8KKwlmb3IgKHJvdyA9IDA7IHJvdyA8IGtwLT5uX3Jvd3M7IHJvdysrKSB7CisJCWludCBjaGFuZ2VkID0gbmV3X3N0YXRlW3Jvd10gXiBrcC0+a3Bfc3RhdGVbcm93XTsKKworCQlpZiAoIWNoYW5nZWQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGNvbCA9IDA7IGNvbCA8IGtwLT5uX2NvbHM7IGNvbCsrKSB7CisJCQlpbnQgY29kZTsKKworCQkJaWYgKCEoY2hhbmdlZCAmICgxIDw8IGNvbCkpKQorCQkJCWNvbnRpbnVlOworCisJCQlkZXZfZGJnKGtwLT5kYmdfZGV2LCAia2V5IFslZDolZF0gJXNcbiIsIHJvdywgY29sLAorCQkJCShuZXdfc3RhdGVbcm93XSAmICgxIDw8IGNvbCkpID8KKwkJCQkicHJlc3MiIDogInJlbGVhc2UiKTsKKworCQkJY29kZSA9IE1BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsIFRXTDQwMzBfUk9XX1NISUZUKTsKKwkJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIGtwLT5rZXltYXBbY29kZV0sCisJCQkJCSBuZXdfc3RhdGVbcm93XSAmICgxIDw8IGNvbCkpOworCQl9CisJCWtwLT5rcF9zdGF0ZVtyb3ddID0gbmV3X3N0YXRlW3Jvd107CisJfQorCWlucHV0X3N5bmMoaW5wdXQpOworfQorCisvKgorICogS2V5cGFkIGludGVycnVwdCBoYW5kbGVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkb19rcF9pcnEoaW50IGlycSwgdm9pZCAqX2twKQoreworCXN0cnVjdCB0d2w0MDMwX2tleXBhZCAqa3AgPSBfa3A7CisJdTggcmVnOworCWludCByZXQ7CisKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCS8qIFdPUktBUk9VTkQgZm9yIGxvY2tkZXAgZm9yY2luZyBJUlFGX0RJU0FCTEVEIG9uIHVzLCB3aGljaAorCSAqIHdlIGRvbid0IHdhbnQgYW5kIGNhbid0IHRvbGVyYXRlLiAgQWx0aG91Z2ggaXQgbWlnaHQgYmUKKwkgKiBmcmllbmRsaWVyIG5vdCB0byBib3Jyb3cgdGhpcyB0aHJlYWQgY29udGV4dC4uLgorCSAqLworCWxvY2FsX2lycV9lbmFibGUoKTsKKyNlbmRpZgorCisJLyogUmVhZCAmIENsZWFyIFRXTDQwMzAgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKwlyZXQgPSB0d2w0MDMwX2twcmVhZChrcCwgJnJlZywgS0VZUF9JU1IxLCAxKTsKKworCS8qIFJlbGVhc2UgYWxsIGtleXMgaWYgSTJDIGhhcyBnb25lIGJhZCBvcgorCSAqIHRoZSBLRVlQIGhhcyBnb25lIHRvIGlkbGUgc3RhdGUgKi8KKwlpZiAocmV0ID49IDAgJiYgKHJlZyAmIEtFWVBfSU1SMV9LUCkpCisJCXR3bDQwMzBfa3Bfc2NhbihrcCwgZmFsc2UpOworCWVsc2UKKwkJdHdsNDAzMF9rcF9zY2FuKGtwLCB0cnVlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdHdsNDAzMF9rcF9wcm9ncmFtKHN0cnVjdCB0d2w0MDMwX2tleXBhZCAqa3ApCit7CisJdTggcmVnOworCWludCBpOworCisJLyogRW5hYmxlIGNvbnRyb2xsZXIsIHdpdGggaGFyZHdhcmUgZGVjb2RpbmcgYnV0IG5vdCBhdXRvcmVwZWF0ICovCisJcmVnID0gS0VZUF9DVFJMX1NPRlRfTlJTVCB8IEtFWVBfQ1RSTF9TT0ZUTU9ERU4KKwkJfCBLRVlQX0NUUkxfVE9FX0VOIHwgS0VZUF9DVFJMX0tCRF9PTjsKKwlpZiAodHdsNDAzMF9rcHdyaXRlX3U4KGtwLCByZWcsIEtFWVBfQ1RSTCkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIE5PVEU6ICB3ZSBjb3VsZCB1c2Ugc2loX3NldHVwKCkgaGVyZSB0byBwYWNrYWdlIGtleXBhZAorCSAqIGV2ZW50IHNvdXJjZXMgYXMgZm91ciBkaWZmZXJlbnQgSVJRcyAuLi4gYnV0IHdlIGRvbid0LgorCSAqLworCisJLyogRW5hYmxlIFRPIHJpc2luZyBhbmQgS1AgcmlzaW5nIGFuZCBmYWxsaW5nIGVkZ2UgZGV0ZWN0aW9uICovCisJcmVnID0gS0VZUF9FRFJfS1BfQk9USCB8IEtFWVBfRURSX1RPX1JJU0lORzsKKwlpZiAodHdsNDAzMF9rcHdyaXRlX3U4KGtwLCByZWcsIEtFWVBfRURSKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogU2V0IFBUViBwcmVzY2FsZXIgRmllbGQgKi8KKwlyZWcgPSAoUFRWX1BSRVNDQUxFUiA8PCBLRVlQX0xLX1BUVl9QVFZfU0hJRlQpOworCWlmICh0d2w0MDMwX2twd3JpdGVfdTgoa3AsIHJlZywgS0VZUF9MS19QVFYpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBTZXQga2V5IGRlYm91bmNlIHRpbWUgdG8gMjAgbXMgKi8KKwlpID0gS0VZUF9QRVJJT0RfVVMoMjAwMDAsIFBUVl9QUkVTQ0FMRVIpOworCWlmICh0d2w0MDMwX2twd3JpdGVfdTgoa3AsIGksIEtFWVBfREVCKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyogU2V0IHRpbWVvdXQgcGVyaW9kIHRvIDEwMCBtcyAqLworCWkgPSBLRVlQX1BFUklPRF9VUygyMDAwMDAsIFBUVl9QUkVTQ0FMRVIpOworCWlmICh0d2w0MDMwX2twd3JpdGVfdTgoa3AsIChpICYgMHhGRiksIEtFWVBfVElNRU9VVF9MKSA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKHR3bDQwMzBfa3B3cml0ZV91OChrcCwgKGkgPj4gOCksIEtFWVBfVElNRU9VVF9IKSA8IDApCisJCXJldHVybiAtRUlPOworCisJLyoKKwkgKiBFbmFibGUgQ2xlYXItb24tUmVhZDsgZGlzYWJsZSByZW1lbWJlcmluZyBldmVudHMgdGhhdCBmaXJlCisJICogYWZ0ZXIgdGhlIElSUSBidXQgYmVmb3JlIG91ciBoYW5kbGVyIGFja3MgKHJlYWRzKSB0aGVtLAorCSAqLworCXJlZyA9IFRXTDQwMzBfU0lIX0NUUkxfQ09SX01BU0sgfCBUV0w0MDMwX1NJSF9DVFJMX1BFTkRESVNfTUFTSzsKKwlpZiAodHdsNDAzMF9rcHdyaXRlX3U4KGtwLCByZWcsIEtFWVBfU0lIX0NUUkwpIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBpbml0aWFsaXplIGtleSBzdGF0ZTsgaXJxcyB1cGRhdGUgaXQgZnJvbSBoZXJlIG9uICovCisJaWYgKHR3bDQwMzBfcmVhZF9rcF9tYXRyaXhfc3RhdGUoa3AsIGtwLT5rcF9zdGF0ZSkgPCAwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKgorICogUmVnaXN0ZXJzIGtleXBhZCBkZXZpY2Ugd2l0aCBpbnB1dCBzdWJzeXN0ZW0KKyAqIGFuZCBjb25maWd1cmVzIFRXTDQwMzAga2V5cGFkIHJlZ2lzdGVycworICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2w0MDMwX2twX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGE7CisJc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwl1OCByZWc7CisJaW50IGVycm9yOworCisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8CisJICAgIHBkYXRhLT5yb3dzID4gVFdMNDAzMF9NQVhfUk9XUyB8fCBwZGF0YS0+Y29scyA+IFRXTDQwMzBfTUFYX0NPTFMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBwbGF0Zm9ybV9kYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJa3AgPSBremFsbG9jKHNpemVvZigqa3ApLCBHRlBfS0VSTkVMKTsKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICgha3AgfHwgIWlucHV0KSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBlcnIxOworCX0KKworCS8qIEdldCB0aGUgZGVidWcgRGV2aWNlICovCisJa3AtPmRiZ19kZXYgPSAmcGRldi0+ZGV2OworCWtwLT5pbnB1dCA9IGlucHV0OworCisJa3AtPm5fcm93cyA9IHBkYXRhLT5yb3dzOworCWtwLT5uX2NvbHMgPSBwZGF0YS0+Y29sczsKKwlrcC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKworCS8qIHNldHVwIGlucHV0IGRldmljZSAqLworCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CisKKwkvKiBFbmFibGUgYXV0byByZXBlYXQgZmVhdHVyZSBvZiBMaW51eCBpbnB1dCBzdWJzeXN0ZW0gKi8KKwlpZiAocGRhdGEtPnJlcCkKKwkJX19zZXRfYml0KEVWX1JFUCwgaW5wdXQtPmV2Yml0KTsKKworCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOKTsKKworCWlucHV0LT5uYW1lCQk9ICJUV0w0MDMwIEtleXBhZCI7CisJaW5wdXQtPnBoeXMJCT0gInR3bDQwMzBfa2V5cGFkL2lucHV0MCI7CisJaW5wdXQtPmRldi5wYXJlbnQJPSAmcGRldi0+ZGV2OworCisJaW5wdXQtPmlkLmJ1c3R5cGUJPSBCVVNfSE9TVDsKKwlpbnB1dC0+aWQudmVuZG9yCT0gMHgwMDAxOworCWlucHV0LT5pZC5wcm9kdWN0CT0gMHgwMDAxOworCWlucHV0LT5pZC52ZXJzaW9uCT0gMHgwMDAzOworCisJaW5wdXQtPmtleWNvZGUJCT0ga3AtPmtleW1hcDsKKwlpbnB1dC0+a2V5Y29kZXNpemUJPSBzaXplb2Yoa3AtPmtleW1hcFswXSk7CisJaW5wdXQtPmtleWNvZGVtYXgJPSBBUlJBWV9TSVpFKGtwLT5rZXltYXApOworCisJbWF0cml4X2tleXBhZF9idWlsZF9rZXltYXAoa2V5bWFwX2RhdGEsIFRXTDQwMzBfUk9XX1NISUZULAorCQkJCSAgIGlucHV0LT5rZXljb2RlLCBpbnB1dC0+a2V5Yml0KTsKKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihrcC0+ZGJnX2RldiwKKwkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgdHdsNDAzMCBrZXlwYWQgZGV2aWNlXG4iKTsKKwkJZ290byBlcnIxOworCX0KKworCWVycm9yID0gdHdsNDAzMF9rcF9wcm9ncmFtKGtwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyMjsKKworCS8qCisJICogVGhpcyBJU1Igd2lsbCBhbHdheXMgZXhlY3V0ZSBpbiBrZXJuZWwgdGhyZWFkIGNvbnRleHQgYmVjYXVzZSBvZgorCSAqIHRoZSBuZWVkIHRvIGFjY2VzcyB0aGUgVFdMNDAzMCBvdmVyIHRoZSBJMkMgYnVzLgorCSAqCisJICogTk9URTogIHdlIGFzc3VtZSB0aGlzIGhvc3QgaXMgd2lyZWQgdG8gVFdMNDA0MCBJTlQxLCBub3QgSU5UMiAuLi4KKwkgKi8KKwllcnJvciA9IHJlcXVlc3RfaXJxKGtwLT5pcnEsIGRvX2twX2lycSwgMCwgcGRldi0+bmFtZSwga3ApOworCWlmIChlcnJvcikgeworCQlkZXZfaW5mbyhrcC0+ZGJnX2RldiwgInJlcXVlc3RfaXJxIGZhaWxlZCBmb3IgaXJxIG5vPSVkXG4iLAorCQkJa3AtPmlycSk7CisJCWdvdG8gZXJyMzsKKwl9CisKKwkvKiBFbmFibGUgS1AgYW5kIFRPIGludGVycnVwdHMgbm93LiAqLworCXJlZyA9ICh1OCkgfihLRVlQX0lNUjFfS1AgfCBLRVlQX0lNUjFfVE8pOworCWlmICh0d2w0MDMwX2twd3JpdGVfdTgoa3AsIHJlZywgS0VZUF9JTVIxKSkgeworCQllcnJvciA9IC1FSU87CisJCWdvdG8gZXJyNDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrcCk7CisJcmV0dXJuIDA7CisKK2VycjQ6CisJLyogbWFzayBhbGwgZXZlbnRzIC0gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVzdWx0ICovCisJKHZvaWQpIHR3bDQwMzBfa3B3cml0ZV91OChrcCwgMHhmZiwgS0VZUF9JTVIxKTsKK2VycjM6CisJZnJlZV9pcnEoa3AtPmlycSwgTlVMTCk7CitlcnIyOgorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpbnB1dCA9IE5VTEw7CitlcnIxOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlrZnJlZShrcCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0d2w0MDMwX2twX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0d2w0MDMwX2tleXBhZCAqa3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZyZWVfaXJxKGtwLT5pcnEsIGtwKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrcC0+aW5wdXQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGtwKTsKKworCXJldHVybiAwOworfQorCisvKgorICogTk9URTogdHdsNDAzMCBhcmUgbXVsdGktZnVuY3Rpb24gZGV2aWNlcyBjb25uZWN0ZWQgdmlhIEkyQy4KKyAqIFNvIHRoaXMgZGV2aWNlIGlzIGEgY2hpbGQgb2YgYW4gSTJDIHBhcmVudCwgdGh1cyBpdCBuZWVkcyB0bworICogc3VwcG9ydCB1bnBsdWcvcmVwbHVnICh3aGljaCBtb3N0IHBsYXRmb3JtIGRldmljZXMgZG9uJ3QpLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHR3bDQwMzBfa3BfZHJpdmVyID0geworCS5wcm9iZQkJPSB0d2w0MDMwX2twX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodHdsNDAzMF9rcF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJ0d2w0MDMwX2tleXBhZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0d2w0MDMwX2twX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0d2w0MDMwX2twX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh0d2w0MDMwX2twX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdsNDAzMF9rcF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnR3bDQwMzBfa3BfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHR3bDQwMzBfa3BfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRXTDQwMzAgS2V5cGFkIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0d2w0MDMwX2tleXBhZCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3c5MHA5MTBfa2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3c5MHA5MTBfa2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzMmRlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdzkwcDkxMF9rZXlwYWQuYwpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE51dm90b24gdGVjaG5vbG9neSBjb3Jwb3JhdGlvbi4KKyAqCisgKiBXYW4gWm9uZ1NodW4gPG1jdW9zLmNvbUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uO3ZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL3c5MHA5MTBfa2V5cGFkLmg+CisKKy8qIEtleXBhZCBJbnRlcmZhY2UgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgS1BJX0NPTkYJCTB4MDAKKyNkZWZpbmUgS1BJXzNLQ09ORgkJMHgwNAorI2RlZmluZSBLUElfTFBDT05GCQkweDA4CisjZGVmaW5lIEtQSV9TVEFUVVMJCTB4MEMKKworI2RlZmluZSBJUzFLRVkJCQkoMHgwMSA8PCAxNikKKyNkZWZpbmUgSU5UVFIJCQkoMHgwMSA8PCAyMSkKKyNkZWZpbmUgS0VZMFIJCQkoMHgwZiA8PCAzKQorI2RlZmluZSBLRVkwQwkJCTB4MDcKKyNkZWZpbmUgREVCT1VOQ0VfQklUCQkweDA4CisjZGVmaW5lIEtTSVpFMAkJCSgweDAxIDw8IDE2KQorI2RlZmluZSBLU0laRTEJCQkoMHgwMSA8PCAxNykKKyNkZWZpbmUgS1BTRUwJCQkoMHgwMSA8PCAxOSkKKyNkZWZpbmUgRU5LUAkJCSgweDAxIDw8IDE4KQorCisjZGVmaW5lIEtHRVRfUkFXKG4pCQkoKChuKSAmIEtFWTBSKSA+PiAzKQorI2RlZmluZSBLR0VUX0NPTFVNTihuKQkJKChuKSAmIEtFWTBDKQorCisjZGVmaW5lIFc5MFA5MTBfTUFYX0tFWV9OVU0JKDggKiA4KQorI2RlZmluZSBXOTBQOTEwX1JPV19TSElGVAkzCisKK3N0cnVjdCB3OTBwOTEwX2tleXBhZCB7CisJY29uc3Qgc3RydWN0IHc5MHA5MTBfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2U7CisJaW50IGlycTsKKwl1bnNpZ25lZCBzaG9ydCBrZXltYXBbVzkwUDkxMF9NQVhfS0VZX05VTV07Cit9OworCitzdGF0aWMgdm9pZCB3OTBwOTEwX2tleXBhZF9zY2FuX21hdHJpeChzdHJ1Y3QgdzkwcDkxMF9rZXlwYWQgKmtleXBhZCwKKwkJCQkJCQl1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IGtleXBhZC0+aW5wdXRfZGV2OworCXVuc2lnbmVkIGludCByb3cgPSBLR0VUX1JBVyhzdGF0dXMpOworCXVuc2lnbmVkIGludCBjb2wgPSBLR0VUX0NPTFVNTihzdGF0dXMpOworCXVuc2lnbmVkIGludCBjb2RlID0gTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwgVzkwUDkxMF9ST1dfU0hJRlQpOworCXVuc2lnbmVkIGludCBrZXkgPSBrZXlwYWQtPmtleW1hcFtjb2RlXTsKKworCWlucHV0X2V2ZW50KGlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTiwgY29kZSk7CisJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIGtleSwgMSk7CisJaW5wdXRfc3luYyhpbnB1dF9kZXYpOworCisJaW5wdXRfZXZlbnQoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKKwlpbnB1dF9yZXBvcnRfa2V5KGlucHV0X2Rldiwga2V5LCAwKTsKKwlpbnB1dF9zeW5jKGlucHV0X2Rldik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB3OTBwOTEwX2tleXBhZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHc5MHA5MTBfa2V5cGFkICprZXlwYWQgPSBkZXZfaWQ7CisJdW5zaWduZWQgaW50ICBrc3RhdHVzLCB2YWw7CisKKwlrc3RhdHVzID0gX19yYXdfcmVhZGwoa2V5cGFkLT5tbWlvX2Jhc2UgKyBLUElfU1RBVFVTKTsKKworCXZhbCA9IElOVFRSIHwgSVMxS0VZOworCisJaWYgKGtzdGF0dXMgJiB2YWwpCisJCXc5MHA5MTBfa2V5cGFkX3NjYW5fbWF0cml4KGtleXBhZCwga3N0YXR1cyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdzkwcDkxMF9rZXlwYWRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHc5MHA5MTBfa2V5cGFkICprZXlwYWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCWNvbnN0IHN0cnVjdCB3OTBwOTEwX2tleXBhZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGtleXBhZC0+cGRhdGE7CisJdW5zaWduZWQgaW50IHZhbCwgY29uZmlnOworCisJLyogRW5hYmxlIHVuaXQgY2xvY2sgKi8KKwljbGtfZW5hYmxlKGtleXBhZC0+Y2xrKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKGtleXBhZC0+bW1pb19iYXNlICsgS1BJX0NPTkYpOworCXZhbCB8PSAoS1BTRUwgfCBFTktQKTsKKwl2YWwgJj0gfihLU0laRTAgfCBLU0laRTEpOworCisJY29uZmlnID0gcGRhdGEtPnByZXNjYWxlIHwgKHBkYXRhLT5kZWJvdW5jZSA8PCBERUJPVU5DRV9CSVQpOworCisJdmFsIHw9IGNvbmZpZzsKKworCV9fcmF3X3dyaXRlbCh2YWwsIGtleXBhZC0+bW1pb19iYXNlICsgS1BJX0NPTkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHc5MHA5MTBfa2V5cGFkX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdzkwcDkxMF9rZXlwYWQgKmtleXBhZCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBEaXNhYmxlIGNsb2NrIHVuaXQgKi8KKwljbGtfZGlzYWJsZShrZXlwYWQtPmNsayk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHc5MHA5MTBfa2V5cGFkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IHc5MHA5MTBfa2V5cGFkX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJCQkJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOworCXN0cnVjdCB3OTBwOTEwX2tleXBhZCAqa2V5cGFkOworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCBlcnJvcjsKKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBkZWZpbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGE7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQga2V5cGFkIGlycVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJa2V5cGFkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHc5MHA5MTBfa2V5cGFkKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFrZXlwYWQgfHwgIWlucHV0X2RldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZHJpdmVyIGRhdGFcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX2ZyZWU7CisJfQorCisJa2V5cGFkLT5wZGF0YSA9IHBkYXRhOworCWtleXBhZC0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCWtleXBhZC0+aXJxID0gaXJxOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gZmFpbGVkX2ZyZWU7CisJfQorCisJcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBmYWlsZWRfZnJlZTsKKwl9CisKKwlrZXlwYWQtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoa2V5cGFkLT5tbWlvX2Jhc2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CisJCWVycm9yID0gLUVOWElPOworCQlnb3RvIGZhaWxlZF9mcmVlX3JlczsKKwl9CisKKwlrZXlwYWQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7CisJaWYgKElTX0VSUihrZXlwYWQtPmNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlwYWQgY2xvY2tcbiIpOworCQllcnJvciA9IFBUUl9FUlIoa2V5cGFkLT5jbGspOworCQlnb3RvIGZhaWxlZF9mcmVlX2lvOworCX0KKworCS8qIHNldCBtdWx0aS1mdW5jdGlvbiBwaW4gZm9yIHc5MHA5MTAga3BpLiAqLworCW1mcF9zZXRfZ3JvdXBpKCZwZGV2LT5kZXYpOworCisJaW5wdXRfZGV2LT5uYW1lID0gcGRldi0+bmFtZTsKKwlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlpbnB1dF9kZXYtPm9wZW4gPSB3OTBwOTEwX2tleXBhZF9vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSB3OTBwOTEwX2tleXBhZF9jbG9zZTsKKwlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJaW5wdXRfZGV2LT5rZXljb2RlID0ga2V5cGFkLT5rZXltYXA7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrZXlwYWQtPmtleW1hcFswXSk7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrZXlwYWQtPmtleW1hcCk7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGtleXBhZCk7CisKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CisJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOKTsKKworCW1hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGtleW1hcF9kYXRhLCBXOTBQOTEwX1JPV19TSElGVCwKKwkJCQkgICBpbnB1dF9kZXYtPmtleWNvZGUsIGlucHV0X2Rldi0+a2V5Yml0KTsKKworCWVycm9yID0gcmVxdWVzdF9pcnEoa2V5cGFkLT5pcnEsIHc5MHA5MTBfa2V5cGFkX2lycV9oYW5kbGVyLAorCQkJICAgIElSUUZfRElTQUJMRUQsIHBkZXYtPm5hbWUsIGtleXBhZCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IElSUVxuIik7CisJCWdvdG8gZmFpbGVkX3B1dF9jbGs7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZSAqLworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0X2Rldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlnb3RvIGZhaWxlZF9mcmVlX2lycTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBrZXlwYWQpOworCXJldHVybiAwOworCitmYWlsZWRfZnJlZV9pcnE6CisJZnJlZV9pcnEoaXJxLCBwZGV2KTsKK2ZhaWxlZF9wdXRfY2xrOgorCWNsa19wdXQoa2V5cGFkLT5jbGspOworZmFpbGVkX2ZyZWVfaW86CisJaW91bm1hcChrZXlwYWQtPm1taW9fYmFzZSk7CitmYWlsZWRfZnJlZV9yZXM6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitmYWlsZWRfZnJlZToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCWtmcmVlKGtleXBhZCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3OTBwOTEwX2tleXBhZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdzkwcDkxMF9rZXlwYWQgKmtleXBhZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJZnJlZV9pcnEoa2V5cGFkLT5pcnEsIHBkZXYpOworCisJY2xrX3B1dChrZXlwYWQtPmNsayk7CisKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShrZXlwYWQtPmlucHV0X2Rldik7CisKKwlpb3VubWFwKGtleXBhZC0+bW1pb19iYXNlKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoa2V5cGFkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3OTBwOTEwX2tleXBhZF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHc5MHA5MTBfa2V5cGFkX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodzkwcDkxMF9rZXlwYWRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibnVjOTAwLWtleXBhZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3OTBwOTEwX2tleXBhZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdzkwcDkxMF9rZXlwYWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHc5MHA5MTBfa2V5cGFkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdzkwcDkxMF9rZXlwYWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodzkwcDkxMF9rZXlwYWRfaW5pdCk7Cittb2R1bGVfZXhpdCh3OTBwOTEwX2tleXBhZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ3OTBwOTEwIGtleXBhZCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bnVjOTAwLWtleXBhZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCAxYWNmYTNhLi5jYmUyMWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMjY5LDQgKzI2OSwxNCBAQAogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkbTM1NWV2bV9rZXlzLgorCitjb25maWcgSU5QVVRfQkZJTl9ST1RBUlkKKwl0cmlzdGF0ZSAiQmxhY2tmaW4gUm90YXJ5IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCRjU0eCB8fCBCRjUyeAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBCbGFja2ZpbiBSb3RhcnkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJmaW4tcm90YXJ5LgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCmluZGV4IDBkOTc5ZmQuLjc5YzFlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBACiBvYmotJChDT05GSUdfSU5QVVRfQVRJX1JFTU9URSkJCSs9IGF0aV9yZW1vdGUubwogb2JqLSQoQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyKQkJKz0gYXRpX3JlbW90ZTIubwogb2JqLSQoQ09ORklHX0lOUFVUX0FUTEFTX0JUTlMpCQkrPSBhdGxhc19idG5zLm8KK29iai0kKENPTkZJR19JTlBVVF9CRklOX1JPVEFSWSkJCSs9IGJmaW5fcm90YXJ5Lm8KIG9iai0kKENPTkZJR19JTlBVVF9DTTEwOSkJCSs9IGNtMTA5Lm8KIG9iai0kKENPTkZJR19JTlBVVF9DT0JBTFRfQlROUykJCSs9IGNvYmFsdF9idG5zLm8KIG9iai0kKENPTkZJR19JTlBVVF9ETTM1NUVWTSkJCSs9IGRtMzU1ZXZtX2tleXMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2JmaW5fcm90YXJ5LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYmZpbl9yb3RhcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTBmM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2JmaW5fcm90YXJ5LmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBSb3RhcnkgY291bnRlciBkcml2ZXIgZm9yIEFuYWxvZyBEZXZpY2VzIEJsYWNrZmluIFByb2Nlc3NvcnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyNpbmNsdWRlIDxhc20vcG9ydG11eC5oPgorI2luY2x1ZGUgPGFzbS9iZmluX3JvdGFyeS5oPgorCitzdGF0aWMgY29uc3QgdTE2IHBlcl9jbnRbXSA9IHsKKwlQX0NOVF9DVUQsCisJUF9DTlRfQ0RHLAorCVBfQ05UX0NaTSwKKwkwCit9OworCitzdHJ1Y3QgYmZpbl9yb3QgeworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCWludCBpcnE7CisJdW5zaWduZWQgaW50IHVwX2tleTsKKwl1bnNpZ25lZCBpbnQgZG93bl9rZXk7CisJdW5zaWduZWQgaW50IGJ1dHRvbl9rZXk7CisJdW5zaWduZWQgaW50IHJlbF9jb2RlOworCXVuc2lnbmVkIHNob3J0IGNudF9jb25maWc7CisJdW5zaWduZWQgc2hvcnQgY250X2ltYXNrOworCXVuc2lnbmVkIHNob3J0IGNudF9kZWJvdW5jZTsKK307CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9rZXlfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqaW5wdXQsIGludCBrZXljb2RlKQoreworCS8qIHNpbXVsYXRlIGEgcHJlc3Mtbi1yZWxlYXNlICovCisJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZSwgMSk7CisJaW5wdXRfc3luYyhpbnB1dCk7CisJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwga2V5Y29kZSwgMCk7CisJaW5wdXRfc3luYyhpbnB1dCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9yb3RhcnlfZXZlbnQoc3RydWN0IGJmaW5fcm90ICpyb3RhcnksIGludCBkZWx0YSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHJvdGFyeS0+aW5wdXQ7CisKKwlpZiAocm90YXJ5LT51cF9rZXkpIHsKKwkJcmVwb3J0X2tleV9ldmVudChpbnB1dCwKKwkJCQkgZGVsdGEgPiAwID8gcm90YXJ5LT51cF9rZXkgOiByb3RhcnktPmRvd25fa2V5KTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfcmVsKGlucHV0LCByb3RhcnktPnJlbF9jb2RlLCBkZWx0YSk7CisJCWlucHV0X3N5bmMoaW5wdXQpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90IGJmaW5fcm90YXJ5X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgYmZpbl9yb3QgKnJvdGFyeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBkZWx0YTsKKworCXN3aXRjaCAoYmZpbl9yZWFkX0NOVF9TVEFUVVMoKSkgeworCisJY2FzZSBJQ0lJOgorCQlicmVhazsKKworCWNhc2UgVUNJSToKKwljYXNlIERDSUk6CisJCWRlbHRhID0gYmZpbl9yZWFkX0NOVF9DT1VOVEVSKCk7CisJCWlmIChkZWx0YSkKKwkJCXJlcG9ydF9yb3RhcnlfZXZlbnQocm90YXJ5LCBkZWx0YSk7CisJCWJyZWFrOworCisJY2FzZSBDWk1JSToKKwkJcmVwb3J0X2tleV9ldmVudChyb3RhcnktPmlucHV0LCByb3RhcnktPmJ1dHRvbl9rZXkpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWJmaW5fd3JpdGVfQ05UX0NPTU1BTkQoVzFMQ05UX1pFUk8pOwkvKiBDbGVhciBDT1VOVEVSICovCisJYmZpbl93cml0ZV9DTlRfU1RBVFVTKC0xKTsJLyogQ2xlYXIgU1RBVFVTICovCisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJmaW5fcm90YXJ5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJmaW5fcm90YXJ5X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGJmaW5fcm90ICpyb3Rhcnk7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJaW50IGVycm9yOworCisJLyogQmFzaWMgdmFsaWRhdGlvbiAqLworCWlmICgocGRhdGEtPnJvdGFyeV91cF9rZXkgJiYgIXBkYXRhLT5yb3RhcnlfZG93bl9rZXkpIHx8CisJICAgICghcGRhdGEtPnJvdGFyeV91cF9rZXkgJiYgcGRhdGEtPnJvdGFyeV9kb3duX2tleSkpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyb3IgPSBwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChwZXJfY250LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RpbmcgcGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXJvdGFyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmluX3JvdCksIEdGUF9LRVJORUwpOworCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFyb3RhcnkgfHwgIWlucHV0KSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBvdXQxOworCX0KKworCXJvdGFyeS0+aW5wdXQgPSBpbnB1dDsKKworCXJvdGFyeS0+dXBfa2V5ID0gcGRhdGEtPnJvdGFyeV91cF9rZXk7CisJcm90YXJ5LT5kb3duX2tleSA9IHBkYXRhLT5yb3RhcnlfZG93bl9rZXk7CisJcm90YXJ5LT5idXR0b25fa2V5ID0gcGRhdGEtPnJvdGFyeV9idXR0b25fa2V5OworCXJvdGFyeS0+cmVsX2NvZGUgPSBwZGF0YS0+cm90YXJ5X3JlbF9jb2RlOworCisJZXJyb3IgPSByb3RhcnktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBvdXQxOworCisJaW5wdXQtPm5hbWUgPSBwZGV2LT5uYW1lOworCWlucHV0LT5waHlzID0gImJmaW4tcm90YXJ5L2lucHV0MCI7CisJaW5wdXQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIHJvdGFyeSk7CisKKwlpbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWlucHV0LT5pZC52ZW5kb3IgPSAweDAwMDE7CisJaW5wdXQtPmlkLnByb2R1Y3QgPSAweDAwMDE7CisJaW5wdXQtPmlkLnZlcnNpb24gPSAweDAxMDA7CisKKwlpZiAocm90YXJ5LT51cF9rZXkpIHsKKwkJX19zZXRfYml0KEVWX0tFWSwgaW5wdXQtPmV2Yml0KTsKKwkJX19zZXRfYml0KHJvdGFyeS0+dXBfa2V5LCBpbnB1dC0+a2V5Yml0KTsKKwkJX19zZXRfYml0KHJvdGFyeS0+ZG93bl9rZXksIGlucHV0LT5rZXliaXQpOworCX0gZWxzZSB7CisJCV9fc2V0X2JpdChFVl9SRUwsIGlucHV0LT5ldmJpdCk7CisJCV9fc2V0X2JpdChyb3RhcnktPnJlbF9jb2RlLCBpbnB1dC0+cmVsYml0KTsKKwl9CisKKwlpZiAocm90YXJ5LT5idXR0b25fa2V5KSB7CisJCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CisJCV9fc2V0X2JpdChyb3RhcnktPmJ1dHRvbl9rZXksIGlucHV0LT5rZXliaXQpOworCX0KKworCWVycm9yID0gcmVxdWVzdF9pcnEocm90YXJ5LT5pcnEsIGJmaW5fcm90YXJ5X2lzciwKKwkJCSAgICAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcGRldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJ1bmFibGUgdG8gY2xhaW0gaXJxICVkOyBlcnJvciAlZFxuIiwKKwkJCXJvdGFyeS0+aXJxLCBlcnJvcik7CisJCWdvdG8gb3V0MTsKKwl9CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJ1bmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlICglZClcbiIsIGVycm9yKTsKKwkJZ290byBvdXQyOworCX0KKworCWlmIChwZGF0YS0+cm90YXJ5X2J1dHRvbl9rZXkpCisJCWJmaW5fd3JpdGVfQ05UX0lNQVNLKENaTUlFKTsKKworCWlmIChwZGF0YS0+bW9kZSAmIFJPVF9ERUJFKQorCQliZmluX3dyaXRlX0NOVF9ERUJPVU5DRShwZGF0YS0+ZGVib3VuY2UgJiBEUFJFU0NBTEUpOworCisJaWYgKHBkYXRhLT5tb2RlKQorCQliZmluX3dyaXRlX0NOVF9DT05GSUcoYmZpbl9yZWFkX0NOVF9DT05GSUcoKSB8CisJCQkJCShwZGF0YS0+bW9kZSAmIH5DTlRFKSk7CisKKwliZmluX3dyaXRlX0NOVF9JTUFTSyhiZmluX3JlYWRfQ05UX0lNQVNLKCkgfCBVQ0lFIHwgRENJRSk7CisJYmZpbl93cml0ZV9DTlRfQ09ORklHKGJmaW5fcmVhZF9DTlRfQ09ORklHKCkgfCBDTlRFKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJvdGFyeSk7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCisJcmV0dXJuIDA7CisKK291dDI6CisJZnJlZV9pcnEocm90YXJ5LT5pcnEsIHBkZXYpOworb3V0MToKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dCk7CisJa2ZyZWUocm90YXJ5KTsKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChwZXJfY250KTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYmZpbl9yb3RhcnlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJmaW5fcm90ICpyb3RhcnkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWJmaW5fd3JpdGVfQ05UX0NPTkZJRygwKTsKKwliZmluX3dyaXRlX0NOVF9JTUFTSygwKTsKKworCWZyZWVfaXJxKHJvdGFyeS0+aXJxLCBwZGV2KTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShyb3RhcnktPmlucHV0KTsKKwlwZXJpcGhlcmFsX2ZyZWVfbGlzdChwZXJfY250KTsKKworCWtmcmVlKHJvdGFyeSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBiZmluX3JvdGFyeV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGJmaW5fcm90ICpyb3RhcnkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJvdGFyeS0+Y250X2NvbmZpZyA9IGJmaW5fcmVhZF9DTlRfQ09ORklHKCk7CisJcm90YXJ5LT5jbnRfaW1hc2sgPSBiZmluX3JlYWRfQ05UX0lNQVNLKCk7CisJcm90YXJ5LT5jbnRfZGVib3VuY2UgPSBiZmluX3JlYWRfQ05UX0RFQk9VTkNFKCk7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCWVuYWJsZV9pcnFfd2FrZShyb3RhcnktPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZmluX3JvdGFyeV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYmZpbl9yb3QgKnJvdGFyeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYmZpbl93cml0ZV9DTlRfREVCT1VOQ0Uocm90YXJ5LT5jbnRfZGVib3VuY2UpOworCWJmaW5fd3JpdGVfQ05UX0lNQVNLKHJvdGFyeS0+Y250X2ltYXNrKTsKKwliZmluX3dyaXRlX0NOVF9DT05GSUcocm90YXJ5LT5jbnRfY29uZmlnICYgfkNOVEUpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCQlkaXNhYmxlX2lycV93YWtlKHJvdGFyeS0+aXJxKTsKKworCWlmIChyb3RhcnktPmNudF9jb25maWcgJiBDTlRFKQorCQliZmluX3dyaXRlX0NOVF9DT05GSUcocm90YXJ5LT5jbnRfY29uZmlnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgYmZpbl9yb3RhcnlfcG1fb3BzID0geworCS5zdXNwZW5kCT0gYmZpbl9yb3Rhcnlfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGJmaW5fcm90YXJ5X3Jlc3VtZSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbl9yb3RhcnlfZGV2aWNlX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gYmZpbl9yb3RhcnlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChiZmluX3JvdGFyeV9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJiZmluLXJvdGFyeSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmYmZpbl9yb3RhcnlfcG1fb3BzLAorI2VuZGlmCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJmaW5fcm90YXJ5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiZmluX3JvdGFyeV9kZXZpY2VfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGJmaW5fcm90YXJ5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYmZpbl9yb3RhcnlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiZmluX3JvdGFyeV9kZXZpY2VfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGJmaW5fcm90YXJ5X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEhlbm5lcmljaCA8aGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSb3RhcnkgQ291bnRlciBkcml2ZXIgZm9yIEJsYWNrZmluIFByb2Nlc3NvcnMiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06YmZpbi1yb3RhcnkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9jb2JhbHRfYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2NvYmFsdF9idG5zLmMKaW5kZXggZDExNGQzYS4uZWU3M2Q3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2NvYmFsdF9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2NvYmFsdF9idG5zLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCX0KIAogCWJkZXYtPnBvbGxfZGV2ID0gcG9sbF9kZXY7Ci0JYmRldi0+cmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwliZGV2LT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGJkZXYpOwogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHBvbGxfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9kbTM1NWV2bV9rZXlzLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvZG0zNTVldm1fa2V5cy5jCmluZGV4IGE2MzMxNWMuLjA5MThhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9kbTM1NWV2bV9rZXlzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2RtMzU1ZXZtX2tleXMuYwpAQCAtMjMsMzAgKzIzLDE2IEBACiAgKiBwcmVzc2VkLCBvciBpdHMgYXV0b3JlcGVhdCBraWNrcyBpbiwgYW4gZXZlbnQgaXMgc2VudC4gIFRoaXMgZHJpdmVyCiAgKiByZWFkIHRob3NlIGV2ZW50cyBmcm9tIHRoZSBzbWFsbCAoMzIgZXZlbnQpIHF1ZXVlIGFuZCByZXBvcnRzIHRoZW0uCiAgKgotICogQmVjYXVzZSB3ZSBjb21tdW5pY2F0ZSB3aXRoIHRoZSBNU1A0MzAgdXNpbmcgSTJDLCBhbmQgYWxsIEkyQyBjYWxscwotICogaW4gTGludXggc2xlZXAsIHdlIG5lZWQgdG8gY29ucyB1cCBhIGtpbmQgb2YgdGhyZWFkZWQgSVJRIGhhbmRsZXIKLSAqIHVzaW5nIGEgd29ya19zdHJ1Y3QuICBUaGUgSVJRIGlzIGFjdGl2ZSBsb3csIGJ1dCB3ZSB1c2UgaXQgdGhyb3VnaAotICogdGhlIEdQSU8gY29udHJvbGxlciBzbyB3ZSBjYW4gdHJpZ2dlciBvbiBmYWxsaW5nIGVkZ2VzLgotICoKICAqIE5vdGUgdGhhdCBwaHlzaWNhbGx5IHRoZXJlIGNhbiBvbmx5IGJlIG9uZSBvZiB0aGVzZSBkZXZpY2VzLgogICoKICAqIFRoaXMgZHJpdmVyIHdhcyB0ZXN0ZWQgd2l0aCBmaXJtd2FyZSByZXZpc2lvbiBBNC4KICAqLwogc3RydWN0IGRtMzU1ZXZtX2tleXMgewotCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogCXN0cnVjdCBpbnB1dF9kZXYJKmlucHV0OwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJaW50CQkJaXJxOwogfTsKIAotc3RhdGljIGlycXJldHVybl90IGRtMzU1ZXZtX2tleXNfaXJxKGludCBpcnEsIHZvaWQgKl9rZXlzKQotewotCXN0cnVjdCBkbTM1NWV2bV9rZXlzCSprZXlzID0gX2tleXM7Ci0KLQlzY2hlZHVsZV93b3JrKCZrZXlzLT53b3JrKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KIC8qIFRoZXNlIGluaXRpYWwga2V5Y29kZXMgY2FuIGJlIHJlbWFwcGVkIGJ5IGRtMzU1ZXZtX3NldGtleWNvZGUoKS4gKi8KIHN0YXRpYyBzdHJ1Y3QgewogCXUxNglldmVudDsKQEAgLTExMCwxMyArOTYsMTIgQEAKIAl7IDB4MzE2OSwgS0VZX1BBVVNFLCB9LAogfTsKIAotc3RhdGljIHZvaWQgZG0zNTVldm1fa2V5c193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKy8qIHJ1bnMgaW4gYW4gSVJRIHRocmVhZCAtLSBjYW4gKGFuZCB3aWxsISkgc2xlZXAgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkbTM1NWV2bV9rZXlzX2lycShpbnQgaXJxLCB2b2lkICpfa2V5cykKIHsKLQlzdHJ1Y3QgZG0zNTVldm1fa2V5cwkqa2V5czsKKwlzdHJ1Y3QgZG0zNTVldm1fa2V5cwkqa2V5cyA9IF9rZXlzOwogCWludAkJCXN0YXR1czsKIAotCWtleXMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtMzU1ZXZtX2tleXMsIHdvcmspOwotCiAJLyogRm9yIHNpbXBsaWNpdHkgd2UgaWdub3JlIElOUFVUX0NPVU5UIGFuZCBqdXN0IHJlYWQKIAkgKiBldmVudHMgdW50aWwgd2UgZ2V0IHRoZSAicXVldWUgZW1wdHkiIGluZGljYXRvci4KIAkgKiBSZWFkaW5nIElOUFVUX0xPVyBkZWNyZW1lbnRzIHRoZSBjb3VudC4KQEAgLTE4Myw2ICsxNjgsMTkgQEAKIAkJaW5wdXRfcmVwb3J0X2tleShrZXlzLT5pbnB1dCwga2V5Y29kZSwgMCk7CiAJCWlucHV0X3N5bmMoa2V5cy0+aW5wdXQpOwogCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBCZWNhdXNlIHdlIGNvbW11bmljYXRlIHdpdGggdGhlIE1TUDQzMCB1c2luZyBJMkMsIGFuZCBhbGwgSTJDIGNhbGxzCisgKiBpbiBMaW51eCBzbGVlcCwgd2UgdXNlIGEgdGhyZWFkZWQgSVJRIGhhbmRsZXIuICBUaGUgSVJRIGl0c2VsZiBpcworICogYWN0aXZlIGxvdywgYnV0IHdlIGdvIHRocm91Z2ggdGhlIEdQSU8gY29udHJvbGxlciBzbyB3ZSBjYW4gdHJpZ2dlcgorICogb24gZmFsbGluZyBlZGdlcyBhbmQgbm90IHdvcnJ5IGFib3V0IGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgSVJRIGluCisgKiB0aGUga2V5cHJlc3MgaGFuZGxpbmcgcGF0aC4KKyAqLworc3RhdGljIGlycXJldHVybl90IGRtMzU1ZXZtX2tleXNfaGFyZGlycShpbnQgaXJxLCB2b2lkICpfa2V5cykKK3sKKwlyZXR1cm4gSVJRX1dBS0VfVEhSRUFEOwogfQogCiBzdGF0aWMgaW50IGRtMzU1ZXZtX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgaW5kZXgsIGludCBrZXljb2RlKQpAQCAtMjMzLDcgKzIzMSw2IEBACiAKIAlrZXlzLT5kZXYgPSAmcGRldi0+ZGV2OwogCWtleXMtPmlucHV0ID0gaW5wdXQ7Ci0JSU5JVF9XT1JLKCZrZXlzLT53b3JrLCBkbTM1NWV2bV9rZXlzX3dvcmspOwogCiAJLyogc2V0IHVwICJ0aHJlYWRlZCBJUlEgaGFuZGxlciIgKi8KIAlzdGF0dXMgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtMjYwLDkgKzI1NywxMCBAQAogCiAJLyogUkVWSVNJVDogIGZsdXNoIHRoZSBldmVudCBxdWV1ZT8gKi8KIAotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKGtleXMtPmlycSwgZG0zNTVldm1fa2V5c19pcnEsCi0JCQkgICAgIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwga2V5cyk7CisJc3RhdHVzID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoa2V5cy0+aXJxLAorCQkJZG0zNTVldm1fa2V5c19oYXJkaXJxLCBkbTM1NWV2bV9rZXlzX2lycSwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJZGV2X25hbWUoJnBkZXYtPmRldiksIGtleXMpOwogCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIGZhaWwxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKaW5kZXggMjdlZTk3Ni4uMTFmZDAzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwpAQCAtMjQzLDkgKzI0Myw5IEBACiAjZGVmaW5lIEZFX1VOVEVTVEVEIDB4ODAKIAogc3RhdGljIHN0cnVjdCBrZXlfZW50cnkgKmtleW1hcDsgLyogPSBOVUxMOyBDdXJyZW50IGtleSBtYXAgKi8KLXN0YXRpYyBpbnQgaGF2ZV93aWZpOwotc3RhdGljIGludCBoYXZlX2JsdWV0b290aDsKLXN0YXRpYyBpbnQgaGF2ZV9sZWRzOworc3RhdGljIGJvb2wgaGF2ZV93aWZpOworc3RhdGljIGJvb2wgaGF2ZV9ibHVldG9vdGg7CitzdGF0aWMgaW50IGxlZHNfcHJlc2VudDsJLyogYml0bWFzayBvZiBsZWRzIHByZXNlbnQgKi8KIAogc3RhdGljIGludCBfX2luaXQgZG1pX21hdGNoZWQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmRtaSkKIHsKQEAgLTI1NCwxMSArMjU0LDExIEBACiAJa2V5bWFwID0gZG1pLT5kcml2ZXJfZGF0YTsKIAlmb3IgKGtleSA9IGtleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspIHsKIAkJaWYgKGtleS0+dHlwZSA9PSBLRV9XSUZJKQotCQkJaGF2ZV93aWZpID0gMTsKKwkJCWhhdmVfd2lmaSA9IHRydWU7CiAJCWVsc2UgaWYgKGtleS0+dHlwZSA9PSBLRV9CTFVFVE9PVEgpCi0JCQloYXZlX2JsdWV0b290aCA9IDE7CisJCQloYXZlX2JsdWV0b290aCA9IHRydWU7CiAJfQotCWhhdmVfbGVkcyA9IGtleS0+Y29kZSAmIChGRV9NQUlMX0xFRCB8IEZFX1dJRklfTEVEKTsKKwlsZWRzX3ByZXNlbnQgPSBrZXktPmNvZGUgJiAoRkVfTUFJTF9MRUQgfCBGRV9XSUZJX0xFRCk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTYxMSwxMCArNjExLDI0IEBACiAJeyBLRV9FTkQsIDAgfQogfTsKIAorc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX2FvcGVuXzE1NTdbXSBfX2luaXRkYXRhID0geworCXsgS0VfS0VZLCAgMHgwMSwge0tFWV9IRUxQfSB9LAorCXsgS0VfS0VZLCAgMHgxMSwge0tFWV9QUk9HMX0gfSwKKwl7IEtFX0tFWSwgIDB4MTIsIHtLRVlfUFJPRzJ9IH0sCisJeyBLRV9XSUZJLCAweDMwIH0sCisJeyBLRV9LRVksICAweDIyLCB7S0VZX1JFV0lORH0gfSwKKwl7IEtFX0tFWSwgIDB4MjMsIHtLRVlfRk9SV0FSRH0gfSwKKwl7IEtFX0tFWSwgIDB4MjQsIHtLRVlfUExBWVBBVVNFfSB9LAorCXsgS0VfS0VZLCAgMHgyNSwge0tFWV9TVE9QQ0R9IH0sCisJeyBLRV9LRVksICAweDMxLCB7S0VZX01BSUx9IH0sCisJeyBLRV9LRVksICAweDM2LCB7S0VZX1dXV30gfSwKKwl7IEtFX0VORCwgIDAgfQorfTsKKwogc3RhdGljIHN0cnVjdCBrZXlfZW50cnkga2V5bWFwX3ByZXN0aWdpb1tdIF9faW5pdGRhdGEgPSB7CiAJeyBLRV9LRVksICAweDExLCB7S0VZX1BST0cxfSB9LAogCXsgS0VfS0VZLCAgMHgxMiwge0tFWV9QUk9HMn0gfSwKLQl7IEtFX1dJRkksICAweDMwIH0sCisJeyBLRV9XSUZJLCAweDMwIH0sCiAJeyBLRV9LRVksICAweDIyLCB7S0VZX1JFV0lORH0gfSwKIAl7IEtFX0tFWSwgIDB4MjMsIHtLRVlfRk9SV0FSRH0gfSwKIAl7IEtFX0tFWSwgIDB4MjQsIHtLRVlfUExBWVBBVVNFfSB9LApAQCAtOTg1LDYgKzk5OSw4IEBACiAJaWYgKGtleW1hcF9uYW1lICE9IE5VTEwpIHsKIAkJaWYgKHN0cmNtcCAoa2V5bWFwX25hbWUsICIxNTU3L01TMjE0MSIpID09IDApCiAJCQlrZXltYXAgPSBrZXltYXBfd2lzdHJvbl9tczIxNDE7CisJCWVsc2UgaWYgKHN0cmNtcCAoa2V5bWFwX25hbWUsICJhb3BlbjE1NTciKSA9PSAwKQorCQkJa2V5bWFwID0ga2V5bWFwX2FvcGVuXzE1NTc7CiAJCWVsc2UgaWYgKHN0cmNtcCAoa2V5bWFwX25hbWUsICJwcmVzdGlnaW8iKSA9PSAwKQogCQkJa2V5bWFwID0ga2V5bWFwX3ByZXN0aWdpbzsKIAkJZWxzZSBpZiAoc3RyY21wIChrZXltYXBfbmFtZSwgImdlbmVyaWMiKSA9PSAwKQpAQCAtMTAwOSw4ICsxMDI1LDggQEAKIAogc3RhdGljIHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICp3aXN0cm9uX2lkZXY7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX2xhc3RfcHJlc3M7Ci1zdGF0aWMgaW50IHdpZmlfZW5hYmxlZDsKLXN0YXRpYyBpbnQgYmx1ZXRvb3RoX2VuYWJsZWQ7CitzdGF0aWMgYm9vbCB3aWZpX2VuYWJsZWQ7CitzdGF0aWMgYm9vbCBibHVldG9vdGhfZW5hYmxlZDsKIAogc3RhdGljIHZvaWQgcmVwb3J0X2tleShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBrZXljb2RlKQogewpAQCAtMTA1MywyNCArMTA2OSwyNCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgd2lzdHJvbl9sZWRfaW5pdChzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCiB7Ci0JaWYgKGhhdmVfbGVkcyAmIEZFX1dJRklfTEVEKSB7CisJaWYgKGxlZHNfcHJlc2VudCAmIEZFX1dJRklfTEVEKSB7CiAJCXUxNiB3aWZpID0gYmlvc19nZXRfZGVmYXVsdF9zZXR0aW5nKFdJRkkpOwogCQlpZiAod2lmaSAmIDEpIHsKIAkJCXdpc3Ryb25fd2lmaV9sZWQuYnJpZ2h0bmVzcyA9ICh3aWZpICYgMikgPyBMRURfRlVMTCA6IExFRF9PRkY7CiAJCQlpZiAobGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHBhcmVudCwgJndpc3Ryb25fd2lmaV9sZWQpKQotCQkJCWhhdmVfbGVkcyAmPSB+RkVfV0lGSV9MRUQ7CisJCQkJbGVkc19wcmVzZW50ICY9IH5GRV9XSUZJX0xFRDsKIAkJCWVsc2UKIAkJCQliaW9zX3NldF9zdGF0ZShXSUZJLCB3aXN0cm9uX3dpZmlfbGVkLmJyaWdodG5lc3MpOwogCiAJCX0gZWxzZQotCQkJaGF2ZV9sZWRzICY9IH5GRV9XSUZJX0xFRDsKKwkJCWxlZHNfcHJlc2VudCAmPSB+RkVfV0lGSV9MRUQ7CiAJfQogCi0JaWYgKGhhdmVfbGVkcyAmIEZFX01BSUxfTEVEKSB7CisJaWYgKGxlZHNfcHJlc2VudCAmIEZFX01BSUxfTEVEKSB7CiAJCS8qIGJpb3NfZ2V0X2RlZmF1bHRfc2V0dGluZyhNQUlMKSBhbHdheXMgcmV0dW5zIDAsIHNvIGp1c3QgdHVybiB0aGUgbGVkIG9mZiAqLwogCQl3aXN0cm9uX21haWxfbGVkLmJyaWdodG5lc3MgPSBMRURfT0ZGOwogCQlpZiAobGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHBhcmVudCwgJndpc3Ryb25fbWFpbF9sZWQpKQotCQkJaGF2ZV9sZWRzICY9IH5GRV9NQUlMX0xFRDsKKwkJCWxlZHNfcHJlc2VudCAmPSB+RkVfTUFJTF9MRUQ7CiAJCWVsc2UKIAkJCWJpb3Nfc2V0X3N0YXRlKE1BSUxfTEVELCB3aXN0cm9uX21haWxfbGVkLmJyaWdodG5lc3MpOwogCX0KQEAgLTEwNzgsMjggKzEwOTQsMjggQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHdpc3Ryb25fbGVkX3JlbW92ZSh2b2lkKQogewotCWlmIChoYXZlX2xlZHMgJiBGRV9NQUlMX0xFRCkKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfTUFJTF9MRUQpCiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZ3aXN0cm9uX21haWxfbGVkKTsKIAotCWlmIChoYXZlX2xlZHMgJiBGRV9XSUZJX0xFRCkKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfV0lGSV9MRUQpCiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZ3aXN0cm9uX3dpZmlfbGVkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHdpc3Ryb25fbGVkX3N1c3BlbmQodm9pZCkKIHsKLQlpZiAoaGF2ZV9sZWRzICYgRkVfTUFJTF9MRUQpCisJaWYgKGxlZHNfcHJlc2VudCAmIEZFX01BSUxfTEVEKQogCQlsZWRfY2xhc3NkZXZfc3VzcGVuZCgmd2lzdHJvbl9tYWlsX2xlZCk7CiAKLQlpZiAoaGF2ZV9sZWRzICYgRkVfV0lGSV9MRUQpCisJaWYgKGxlZHNfcHJlc2VudCAmIEZFX1dJRklfTEVEKQogCQlsZWRfY2xhc3NkZXZfc3VzcGVuZCgmd2lzdHJvbl93aWZpX2xlZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3aXN0cm9uX2xlZF9yZXN1bWUodm9pZCkKIHsKLQlpZiAoaGF2ZV9sZWRzICYgRkVfTUFJTF9MRUQpCisJaWYgKGxlZHNfcHJlc2VudCAmIEZFX01BSUxfTEVEKQogCQlsZWRfY2xhc3NkZXZfcmVzdW1lKCZ3aXN0cm9uX21haWxfbGVkKTsKIAotCWlmIChoYXZlX2xlZHMgJiBGRV9XSUZJX0xFRCkKKwlpZiAobGVkc19wcmVzZW50ICYgRkVfV0lGSV9MRUQpCiAJCWxlZF9jbGFzc2Rldl9yZXN1bWUoJndpc3Ryb25fd2lmaV9sZWQpOwogfQogCkBAIC0xMzEyLDcgKzEzMjgsNyBAQAogCWlmIChoYXZlX3dpZmkpIHsKIAkJdTE2IHdpZmkgPSBiaW9zX2dldF9kZWZhdWx0X3NldHRpbmcoV0lGSSk7CiAJCWlmICh3aWZpICYgMSkKLQkJCXdpZmlfZW5hYmxlZCA9ICh3aWZpICYgMikgPyAxIDogMDsKKwkJCXdpZmlfZW5hYmxlZCA9IHdpZmkgJiAyOwogCQllbHNlCiAJCQloYXZlX3dpZmkgPSAwOwogCkBAIC0xMzIzLDE1ICsxMzM5LDE2IEBACiAJaWYgKGhhdmVfYmx1ZXRvb3RoKSB7CiAJCXUxNiBidCA9IGJpb3NfZ2V0X2RlZmF1bHRfc2V0dGluZyhCTFVFVE9PVEgpOwogCQlpZiAoYnQgJiAxKQotCQkJYmx1ZXRvb3RoX2VuYWJsZWQgPSAoYnQgJiAyKSA/IDEgOiAwOworCQkJYmx1ZXRvb3RoX2VuYWJsZWQgPSBidCAmIDI7CiAJCWVsc2UKLQkJCWhhdmVfYmx1ZXRvb3RoID0gMDsKKwkJCWhhdmVfYmx1ZXRvb3RoID0gZmFsc2U7CiAKIAkJaWYgKGhhdmVfYmx1ZXRvb3RoKQogCQkJYmlvc19zZXRfc3RhdGUoQkxVRVRPT1RILCBibHVldG9vdGhfZW5hYmxlZCk7CiAJfQogCiAJd2lzdHJvbl9sZWRfaW5pdCgmZGV2LT5kZXYpOworCiAJZXJyID0gc2V0dXBfaW5wdXRfZGV2KCk7CiAJaWYgKGVycikgewogCQliaW9zX2RldGFjaCgpOwpAQCAtMTM1Miw3ICsxMzY5LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCB3aXN0cm9uX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHdpc3Ryb25fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaWYgKGhhdmVfd2lmaSkKIAkJYmlvc19zZXRfc3RhdGUoV0lGSSwgMCk7CkBAIC0xMzYxLDEwICsxMzc4LDExIEBACiAJCWJpb3Nfc2V0X3N0YXRlKEJMVUVUT09USCwgMCk7CiAKIAl3aXN0cm9uX2xlZF9zdXNwZW5kKCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3aXN0cm9uX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHdpc3Ryb25fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZiAoaGF2ZV93aWZpKQogCQliaW9zX3NldF9zdGF0ZShXSUZJLCB3aWZpX2VuYWJsZWQpOwpAQCAtMTM3MywyNCArMTM5MSwzMCBAQAogCQliaW9zX3NldF9zdGF0ZShCTFVFVE9PVEgsIGJsdWV0b290aF9lbmFibGVkKTsKIAogCXdpc3Ryb25fbGVkX3Jlc3VtZSgpOworCiAJcG9sbF9iaW9zKHRydWUpOwogCiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSB3aXN0cm9uX3N1c3BlbmQJCU5VTEwKLSNkZWZpbmUgd2lzdHJvbl9yZXN1bWUJCU5VTEwKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHdpc3Ryb25fcG1fb3BzID0geworCS5zdXNwZW5kCT0gd2lzdHJvbl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gd2lzdHJvbl9yZXN1bWUsCisJLnBvd2Vyb2ZmCT0gd2lzdHJvbl9zdXNwZW5kLAorCS5yZXN0b3JlCT0gd2lzdHJvbl9yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdpc3Ryb25fZHJpdmVyID0gewogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJ3aXN0cm9uLWJpb3MiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZiBDT05GSUdfUE0KKwkJLnBtCT0gJndpc3Ryb25fcG1fb3BzLAorI2VuZGlmCiAJfSwKIAkucHJvYmUJCT0gd2lzdHJvbl9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdpc3Ryb25fcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHdpc3Ryb25fc3VzcGVuZCwKLQkucmVzdW1lCQk9IHdpc3Ryb25fcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgd2JfbW9kdWxlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZwppbmRleCA4YTJjNWIxLi4zZmVlYjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCkBAIC0xMDcsNiArMTA3LDE0IEBACiAJICBlbnRyaWVzLiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwKIAkgIHNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2VsYW50ZWNoLnR4dD4uCiAKK2NvbmZpZyBNT1VTRV9QUzJfU0VOVEVMSUMKKwlib29sICJTZW50ZWxpYyBGaW5nZXIgU2Vuc2luZyBQYWQgUFMvMiBwcm90b2NvbCBleHRlbnNpb24iCisJZGVwZW5kcyBvbiBNT1VTRV9QUzIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgbGFwdG9wIChzdWNoIGFzIE1TSSBXSU5EIE5ldGJvb2spCisJICB3aXRoIFNlbnRlbGljIEZpbmdlciBTZW5zaW5nIFBhZCB0b3VjaHBhZC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE1PVVNFX1BTMl9UT1VDSEtJVAogCWJvb2wgImVHYWxheCBUb3VjaEtpdCBQUy8yIHByb3RvY29sIGV4dGVuc2lvbiIKQEAgLTI2MiwxNCArMjcwLDYgQEAKIAkgIGRlc2NyaWJlZCBpbiB0aGUgc291cmNlIGZpbGUpLiBUaGlzIGRyaXZlciBhbHNvIHdvcmtzIHdpdGggdGhlCiAJICBkaWdpdGl6ZXIgKFZTWFhYLUFCKSBERUMgcHJvZHVjZWQuCiAKLWNvbmZpZyBNT1VTRV9ISUwKLQl0cmlzdGF0ZSAiSElMIHBvaW50ZXJzIChtaWNlIGV0YykuIgotCWRlcGVuZHMgb24gR1NDIHx8IEhQMzAwCi0Jc2VsZWN0IEhQX1NEQwotCXNlbGVjdCBISUxfTUxDCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IEhJTCBwb2ludGVycy4KLQogY29uZmlnIE1PVVNFX0dQSU8KIAl0cmlzdGF0ZSAiR1BJTyBtb3VzZSIKIAlkZXBlbmRzIG9uIEdFTkVSSUNfR1BJTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbW91c2UvTWFrZWZpbGUKaW5kZXggMDEwZjI2NS4uNTcwYzg0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQpAQCAtOSw3ICs5LDYgQEAKIG9iai0kKENPTkZJR19NT1VTRV9BVEFSSSkJCSs9IGF0YXJpbW91c2Uubwogb2JqLSQoQ09ORklHX01PVVNFX0JDTTU5NzQpCQkrPSBiY201OTc0Lm8KIG9iai0kKENPTkZJR19NT1VTRV9HUElPKQkJKz0gZ3Bpb19tb3VzZS5vCi1vYmotJChDT05GSUdfTU9VU0VfSElMKQkJCSs9IGhpbF9wdHIubwogb2JqLSQoQ09ORklHX01PVVNFX0lOUE9SVCkJCSs9IGlucG9ydC5vCiBvYmotJChDT05GSUdfTU9VU0VfTE9HSUJNKQkJKz0gbG9naWJtLm8KIG9iai0kKENPTkZJR19NT1VTRV9NQVBMRSkJCSs9IG1hcGxlbW91c2UubwpAQCAtMjgsNSArMjcsNiBAQAogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfT0xQQykJKz0gaGdway5vCiBwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFApCSs9IGxvZ2lwczJwcC5vCiBwc21vdXNlLSQoQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSykJKz0gbGlmZWJvb2subworcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMpCSs9IHNlbnRlbGljLm8KIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQpCSs9IHRyYWNrcG9pbnQubwogcHNtb3VzZS0kKENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQpCSs9IHRvdWNoa2l0X3BzMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCmluZGV4IDU1NDdlMjQuLmYzNjExMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCkBAIC0yNzksNyArMjc5LDcgQEAKICAqIHN1YnNlcXVlbnQgY29tbWFuZHMuIEl0IGxvb2tzIGxpa2UgZ2xpZGVwYWQgaXMgYmVoaW5kIHN0aWNrcG9pbnRlciwKICAqIEknZCB0aG91Z2h0IGl0IHdvdWxkIGJlIG90aGVyIHdheSBhcm91bmQuLi4KICAqLwotc3RhdGljIGludCBhbHBzX3Bhc3N0aHJvdWdoX21vZGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBlbmFibGUpCitzdGF0aWMgaW50IGFscHNfcGFzc3Rocm91Z2hfbW9kZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBlbmFibGUpCiB7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKIAlpbnQgY21kID0gZW5hYmxlID8gUFNNT1VTRV9DTURfU0VUU0NBTEUyMSA6IFBTTU9VU0VfQ01EX1NFVFNDQUxFMTE7CkBAIC0zNjcsMTYgKzM2NywxNiBAQAogewogCXN0cnVjdCBhbHBzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwogCXVuc2lnbmVkIGNoYXIgYnVmWzZdOwotCWludCBwb2xsX2ZhaWxlZDsKKwlib29sIHBvbGxfZmFpbGVkOwogCiAJaWYgKHByaXYtPmktPmZsYWdzICYgQUxQU19QQVNTKQotCQlhbHBzX3Bhc3N0aHJvdWdoX21vZGUocHNtb3VzZSwgMSk7CisJCWFscHNfcGFzc3Rocm91Z2hfbW9kZShwc21vdXNlLCB0cnVlKTsKIAogCXBvbGxfZmFpbGVkID0gcHMyX2NvbW1hbmQoJnBzbW91c2UtPnBzMmRldiwgYnVmLAogCQkJCSAgUFNNT1VTRV9DTURfUE9MTCB8IChwc21vdXNlLT5wa3RzaXplIDw8IDgpKSA8IDA7CiAKIAlpZiAocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX1BBU1MpCi0JCWFscHNfcGFzc3Rocm91Z2hfbW9kZShwc21vdXNlLCAwKTsKKwkJYWxwc19wYXNzdGhyb3VnaF9tb2RlKHBzbW91c2UsIGZhbHNlKTsKIAogCWlmIChwb2xsX2ZhaWxlZCB8fCAoYnVmWzBdICYgcHJpdi0+aS0+bWFzazApICE9IHByaXYtPmktPmJ5dGUwKQogCQlyZXR1cm4gLTE7CkBAIC00MDEsMTAgKzQwMSwxMiBAQAogCWlmICghcHJpdi0+aSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKChwcml2LT5pLT5mbGFncyAmIEFMUFNfUEFTUykgJiYgYWxwc19wYXNzdGhyb3VnaF9tb2RlKHBzbW91c2UsIDEpKQorCWlmICgocHJpdi0+aS0+ZmxhZ3MgJiBBTFBTX1BBU1MpICYmCisJICAgIGFscHNfcGFzc3Rocm91Z2hfbW9kZShwc21vdXNlLCB0cnVlKSkgewogCQlyZXR1cm4gLTE7CisJfQogCi0JaWYgKGFscHNfdGFwX21vZGUocHNtb3VzZSwgMSkpIHsKKwlpZiAoYWxwc190YXBfbW9kZShwc21vdXNlLCB0cnVlKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbHBzLmM6IEZhaWxlZCB0byBlbmFibGUgaGFyZHdhcmUgdGFwcGluZ1xuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MTQsOCArNDE2LDEwIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoKHByaXYtPmktPmZsYWdzICYgQUxQU19QQVNTKSAmJiBhbHBzX3Bhc3N0aHJvdWdoX21vZGUocHNtb3VzZSwgMCkpCisJaWYgKChwcml2LT5pLT5mbGFncyAmIEFMUFNfUEFTUykgJiYKKwkgICAgYWxwc19wYXNzdGhyb3VnaF9tb2RlKHBzbW91c2UsIGZhbHNlKSkgewogCQlyZXR1cm4gLTE7CisJfQogCiAJLyogQUxQUyBuZWVkcyBzdHJlYW0gbW9kZSwgb3RoZXJ3aXNlIGl0IHdvbid0IHJlcG9ydCBhbnkgZGF0YSAqLwogCWlmIChwczJfY29tbWFuZCgmcHNtb3VzZS0+cHMyZGV2LCBOVUxMLCBQU01PVVNFX0NNRF9TRVRTVFJFQU0pKSB7CkBAIC01MTksNyArNTIzLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBhbHBzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoraW50IGFscHNfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCWludCB2ZXJzaW9uOwogCWNvbnN0IHN0cnVjdCBhbHBzX21vZGVsX2luZm8gKm1vZGVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuaAppbmRleCA0YmJkZGM5Li5iYzg3OTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuaApAQCAtMjYsMTAgKzI2LDEwIEBACiB9OwogCiAjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9BTFBTCi1pbnQgYWxwc19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgYWxwc19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOwogaW50IGFscHNfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CiAjZWxzZQotaW5saW5lIGludCBhbHBzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoraW5saW5lIGludCBhbHBzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKaW5kZXggMmQ4ZmMwYi4uMGQxZDMzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9iY201OTc0LmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCWNvbnN0IHN0cnVjdCB0cF9maW5nZXIgKmY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBkZXYtPmlucHV0OwogCWludCByYXdfcCwgcmF3X3csIHJhd194LCByYXdfeSwgcmF3X247Ci0JaW50IHB0ZXN0ID0gMCwgb3JpZ2luID0gMCwgaWJ0ID0gMCwgbm1pbiA9IDAsIG5tYXggPSAwOworCWludCBwdGVzdCwgb3JpZ2luLCBpYnQgPSAwLCBubWluID0gMCwgbm1heCA9IDA7CiAJaW50IGFic19wID0gMCwgYWJzX3cgPSAwLCBhYnNfeCA9IDAsIGFic195ID0gMDsKIAogCWlmIChzaXplIDwgYy0+dHBfb2Zmc2V0IHx8IChzaXplIC0gYy0+dHBfb2Zmc2V0KSAlIFNJWkVPRl9GSU5HRVIgIT0gMCkKQEAgLTM0NSwyMSArMzQ1LDIyIEBACiAJCS8qIHNldCB0aGUgaW50ZWdyYXRlZCBidXR0b24gaWYgYXBwbGljYWJsZSAqLwogCQlpZiAoYy0+dHBfdHlwZSA9PSBUWVBFMikKIAkJCWlidCA9IHJhdzJpbnQoZGV2LT50cF9kYXRhW0JVVFRPTl9UWVBFMl0pOwotCX0KIAotCS8qIHdoaWxlIHRyYWNraW5nIGZpbmdlciBzdGlsbCB2YWxpZCwgY291bnQgYWxsIGZpbmdlcnMgKi8KLQlpZiAocHRlc3QgPiBQUkVTU1VSRV9MT1cgJiYgb3JpZ2luKSB7Ci0JCWFic19wID0gcHRlc3Q7Ci0JCWFic193ID0gaW50MmJvdW5kKCZjLT53LCByYXdfdyk7Ci0JCWFic194ID0gaW50MmJvdW5kKCZjLT54LCByYXdfeCAtIGMtPnguZGV2bWluKTsKLQkJYWJzX3kgPSBpbnQyYm91bmQoJmMtPnksIGMtPnkuZGV2bWF4IC0gcmF3X3kpOwotCQl3aGlsZSAocmF3X24tLSkgewotCQkJcHRlc3QgPSBpbnQyYm91bmQoJmMtPnAsIHJhdzJpbnQoZi0+Zm9yY2VfbWFqb3IpKTsKLQkJCWlmIChwdGVzdCA+IFBSRVNTVVJFX0xPVykKLQkJCQlubWF4Kys7Ci0JCQlpZiAocHRlc3QgPiBQUkVTU1VSRV9ISUdIKQotCQkJCW5taW4rKzsKLQkJCWYrKzsKKwkJLyogd2hpbGUgdHJhY2tpbmcgZmluZ2VyIHN0aWxsIHZhbGlkLCBjb3VudCBhbGwgZmluZ2VycyAqLworCQlpZiAocHRlc3QgPiBQUkVTU1VSRV9MT1cgJiYgb3JpZ2luKSB7CisJCQlhYnNfcCA9IHB0ZXN0OworCQkJYWJzX3cgPSBpbnQyYm91bmQoJmMtPncsIHJhd193KTsKKwkJCWFic194ID0gaW50MmJvdW5kKCZjLT54LCByYXdfeCAtIGMtPnguZGV2bWluKTsKKwkJCWFic195ID0gaW50MmJvdW5kKCZjLT55LCBjLT55LmRldm1heCAtIHJhd195KTsKKwkJCXdoaWxlIChyYXdfbi0tKSB7CisJCQkJcHRlc3QgPSBpbnQyYm91bmQoJmMtPnAsCisJCQkJCQkgIHJhdzJpbnQoZi0+Zm9yY2VfbWFqb3IpKTsKKwkJCQlpZiAocHRlc3QgPiBQUkVTU1VSRV9MT1cpCisJCQkJCW5tYXgrKzsKKwkJCQlpZiAocHRlc3QgPiBQUkVTU1VSRV9ISUdIKQorCQkJCQlubWluKys7CisJCQkJZisrOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKaW5kZXggNGJjNzg4OTIuLmZkYTM1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogLyoKICAqIFVzZSBtYWdpYyBrbm9jayB0byBkZXRlY3QgRWxhbnRlY2ggdG91Y2hwYWQKICAqLwotaW50IGVsYW50ZWNoX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoraW50IGVsYW50ZWNoX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCXVuc2lnbmVkIGNoYXIgcGFyYW1bM107CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmgKaW5kZXggZWQ4NDhjYy4uZmVhYzVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guaApAQCAtMTA5LDEwICsxMDksMTAgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNICi1pbnQgZWxhbnRlY2hfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpOworaW50IGVsYW50ZWNoX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcyk7CiBpbnQgZWxhbnRlY2hfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgZWxhbnRlY2hfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitzdGF0aWMgaW5saW5lIGludCBlbGFudGVjaF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCmluZGV4IGExYWQyZjEuLmRlMWU1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCkBAIC0zNjcsNyArMzY3LDM2IEBACiB9CiAKIF9fUFNNT1VTRV9ERUZJTkVfQVRUUihwb3dlcmVkLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKLQkJICAgICAgaGdwa19zaG93X3Bvd2VyZWQsIGhncGtfc2V0X3Bvd2VyZWQsIDApOworCQkgICAgICBoZ3BrX3Nob3dfcG93ZXJlZCwgaGdwa19zZXRfcG93ZXJlZCwgZmFsc2UpOworCitzdGF0aWMgc3NpemVfdCBoZ3BrX3RyaWdnZXJfcmVjYWxfc2hvdyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKKwkJdm9pZCAqZGF0YSwgY2hhciAqYnVmKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3NpemVfdCBoZ3BrX3RyaWdnZXJfcmVjYWwoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGhncGtfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgZXJyOworCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbHVlKTsKKwlpZiAoZXJyIHx8IHZhbHVlICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBXZSBxdWV1ZSB3b3JrIGluc3RlYWQgb2YgZG9pbmcgcmVjYWxpYnJhdGlvbiByaWdodCBoZXJlCisJICogdG8gYXZvaWQgYWRkaW5nIGxvY2tpbmcgdG8gdG8gaGdwa19mb3JjZV9yZWNhbGlicmF0ZSgpCisJICogc2luY2Ugd29ya3F1ZXVlIHByb3ZpZGVzIHNlcmlhbGl6YXRpb24uCisJICovCisJcHNtb3VzZV9xdWV1ZV93b3JrKHBzbW91c2UsICZwcml2LT5yZWNhbGliX3dxLCAwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK19fUFNNT1VTRV9ERUZJTkVfQVRUUihyZWNhbGlicmF0ZSwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCSAgICAgIGhncGtfdHJpZ2dlcl9yZWNhbF9zaG93LCBoZ3BrX3RyaWdnZXJfcmVjYWwsIGZhbHNlKTsKIAogc3RhdGljIHZvaWQgaGdwa19kaXNjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQogewpAQCAtMzc1LDYgKzQwNCwxMSBAQAogCiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKIAkJCSAgICZwc21vdXNlX2F0dHJfcG93ZXJlZC5kYXR0cik7CisKKwlpZiAocHNtb3VzZS0+bW9kZWwgPj0gSEdQS19NT0RFTF9DKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJCSAgICZwc21vdXNlX2F0dHJfcmVjYWxpYnJhdGUuZGF0dHIpOworCiAJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKIAlrZnJlZShwcml2KTsKIH0KQEAgLTQyMywxMCArNDU3LDI1IEBACiAKIAllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAogCQkJCSAmcHNtb3VzZV9hdHRyX3Bvd2VyZWQuZGF0dHIpOwotCWlmIChlcnIpCi0JCWhncGtfZXJyKHBzbW91c2UsICJGYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZVxuIik7CisJaWYgKGVycikgeworCQloZ3BrX2Vycihwc21vdXNlLCAiRmFpbGVkIGNyZWF0aW5nICdwb3dlcmVkJyBzeXNmcyBub2RlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKLQlyZXR1cm4gZXJyOworCS8qIEMtc2VyaWVzIHRvdWNocGFkcyBhZGRlZCB0aGUgcmVjYWxpYnJhdGUgY29tbWFuZCAqLworCWlmIChwc21vdXNlLT5tb2RlbCA+PSBIR1BLX01PREVMX0MpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCQkJICZwc21vdXNlX2F0dHJfcmVjYWxpYnJhdGUuZGF0dHIpOworCQlpZiAoZXJyKSB7CisJCQloZ3BrX2Vycihwc21vdXNlLAorCQkJCSJGYWlsZWQgY3JlYXRpbmcgJ3JlY2FsaWJyYXRlJyBzeXNmcyBub2RlXG4iKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZSgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkJCSZwc21vdXNlX2F0dHJfcG93ZXJlZC5kYXR0cik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGludCBoZ3BrX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCkBAIC00NDAsNyArNDg5LDcgQEAKIAogCXBzbW91c2UtPnByaXZhdGUgPSBwcml2OwogCXByaXYtPnBzbW91c2UgPSBwc21vdXNlOwotCXByaXYtPnBvd2VyZWQgPSAxOworCXByaXYtPnBvd2VyZWQgPSB0cnVlOwogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5yZWNhbGliX3dxLCBoZ3BrX3JlY2FsaWJfd29yayk7CiAKIAllcnIgPSBwc21vdXNlX3Jlc2V0KHBzbW91c2UpOwpAQCAtNDgzLDcgKzUzMiw3IEBACiAJcmV0dXJuIHBhcmFtWzJdOwogfQogCi1pbnQgaGdwa19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK2ludCBoZ3BrX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlpbnQgdmVyc2lvbjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oZ3BrLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuaAppbmRleCBhNGIyYTk2Li5kNjFjZmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuaApAQCAtMTUsNyArMTUsNyBAQAogCiBzdHJ1Y3QgaGdwa19kYXRhIHsKIAlzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZTsKLQlpbnQgcG93ZXJlZDsKKwlib29sIHBvd2VyZWQ7CiAJaW50IGNvdW50LCB4X3RhbGx5LCB5X3RhbGx5OwkvKiBoYXJkd2FyZSB3b3JrYXJvdW5kIHN0dWZmICovCiAJdW5zaWduZWQgbG9uZyByZWNhbGliX3dpbmRvdzsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHJlY2FsaWJfd3E7CkBAIC0zMywxMCArMzMsMTAgQEAKIAlkZXZfbm90aWNlKCYocHNtb3VzZSktPnBzMmRldi5zZXJpby0+ZGV2LCBmb3JtYXQsICMjIGFyZykKIAogI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfT0xQQwotaW50IGhncGtfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpOworaW50IGhncGtfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKTsKIGludCBoZ3BrX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGhncGtfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitzdGF0aWMgaW5saW5lIGludCBoZ3BrX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGlsX3B0ci5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNjNjZTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDcgKzAsMCBAQAotLyoKLSAqIEdlbmVyaWMgbGludXgtaW5wdXQgZGV2aWNlIGRyaXZlciBmb3IgYXhpcy1iZWFyaW5nIGRldmljZXMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgQnJpYW4gUy4gSnVsaW4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKLSAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgotICogMi4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICoKLSAqIFJlZmVyZW5jZXM6Ci0gKiBIUC1ISUwgVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWwuICBIZXdsZXR0IFBhY2thcmQgUHJvZHVjdCBOby4gNDU5MThBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9oaWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+Ci0KLSNkZWZpbmUgUFJFRklYICJISUwgUFRSOiAiCi0jZGVmaW5lIEhJTF9HRU5FUklDX05BTUUgIkhJTCBwb2ludGVyIGRldmljZSIKLQotTU9EVUxFX0FVVEhPUigiQnJpYW4gUy4gSnVsaW4gPGJyaUBjYWx5eC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oSElMX0dFTkVSSUNfTkFNRSAiIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwotTU9EVUxFX0FMSUFTKCJzZXJpbzp0eTAzcHIyNWlkMEZleCoiKTsKLQotI2RlZmluZSBUQUJMRVRfU0lNVUxBVEVTX01PVVNFCS8qIGFsbG93IHRhYmxldCB0byBiZSB1c2VkIGFzIG1vdXNlICovCi0jdW5kZWYgIFRBQkxFVF9BVVRPQURKVVNUCS8qIGF1dG8tYWRqdXN0IHZhbGlkIHRhYmxldCByYW5nZXMgKi8KLQotCi0jZGVmaW5lIEhJTF9QVFJfTUFYX0xFTkdUSCAxNgotCi1zdHJ1Y3QgaGlsX3B0ciB7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2OwotCXN0cnVjdCBzZXJpbyAqc2VyaW87Ci0KLQkvKiBJbnB1dCBidWZmZXIgYW5kIGluZGV4IGZvciBwYWNrZXRzIGZyb20gSElMIGJ1cy4gKi8KLQloaWxfcGFja2V0IGRhdGFbSElMX1BUUl9NQVhfTEVOR1RIXTsKLQlpbnQgaWR4NDsgLyogZm91ciBjb3VudHMgcGVyIHBhY2tldCAqLwotCi0JLyogUmF3IGRldmljZSBpbmZvIHJlY29yZHMgZnJvbSBISUwgYnVzLCBzZWUgaGlsLmggZm9yIGZpZWxkcy4gKi8KLQljaGFyCWlkZFtISUxfUFRSX01BWF9MRU5HVEhdOwkvKiBESUQgYnl0ZSBhbmQgSUREIHJlY29yZCAqLwotCWNoYXIJcnNjW0hJTF9QVFJfTUFYX0xFTkdUSF07CS8qIFJTQyByZWNvcmQgKi8KLQljaGFyCWV4ZFtISUxfUFRSX01BWF9MRU5HVEhdOwkvKiBFWEQgcmVjb3JkICovCi0JY2hhcglybm1bSElMX1BUUl9NQVhfTEVOR1RIICsgMV07CS8qIFJOTSByZWNvcmQgKyBOVUxMIHRlcm0uICovCi0KLQkvKiBFeHRyYSBkZXZpY2UgZGV0YWlscyBub3QgY29udGFpbmVkIGluIHN0cnVjdCBpbnB1dF9kZXYuICovCi0JdW5zaWduZWQgaW50IG5idG4sIG5heGVzOwotCXVuc2lnbmVkIGludCBidG5tYXBbN107Ci0KLQkvKiBTb21ldGhpbmcgdG8gc2xlZXAgYXJvdW5kIHdpdGguICovCi0Jc3RydWN0IHNlbWFwaG9yZSBzZW07Ci19OwotCi0vKiBQcm9jZXNzIGEgY29tcGxldGUgcGFja2V0IGFmdGVyIHRyYW5zZmVyIGZyb20gdGhlIEhJTCAqLwotc3RhdGljIHZvaWQgaGlsX3B0cl9wcm9jZXNzX3JlY29yZChzdHJ1Y3QgaGlsX3B0ciAqcHRyKQotewotCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHB0ci0+ZGV2OwotCWhpbF9wYWNrZXQgKmRhdGEgPSBwdHItPmRhdGE7Ci0JaGlsX3BhY2tldCBwOwotCWludCBpZHgsIGksIGNudCwgbGF4aXM7Ci0JaW50IGF4MTYsIGFic2RldjsKLQotCWlkeCA9IHB0ci0+aWR4NC80OwotCXAgPSBkYXRhW2lkeCAtIDFdOwotCi0JaWYgKChwICYgfkhJTF9DTURDVF9QT0wpID09Ci0JICAgIChISUxfRVJSX0lOVCB8IEhJTF9QS1RfQ01EIHwgSElMX0NNRF9QT0wpKQotCQlnb3RvIHJlcG9ydDsKLQlpZiAoKHAgJiB+SElMX0NNRENUX1JQTCkgPT0KLQkgICAgKEhJTF9FUlJfSU5UIHwgSElMX1BLVF9DTUQgfCBISUxfQ01EX1JQTCkpCi0JCWdvdG8gcmVwb3J0OwotCi0JLyogTm90IGEgcG9sbCByZXNwb25zZS4gIFNlZSBpZiB3ZSBhcmUgbG9hZGluZyBjb25maWcgcmVjb3Jkcy4gKi8KLQlzd2l0Y2ggKHAgJiBISUxfUEtUX0RBVEFfTUFTSykgewotCWNhc2UgSElMX0NNRF9JREQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKLQkJCXB0ci0+aWRkW2ldID0gcHRyLT5kYXRhW2ldICYgSElMX1BLVF9EQVRBX01BU0s7Ci0JCWZvciAoOyBpIDwgSElMX1BUUl9NQVhfTEVOR1RIOyBpKyspCi0JCQlwdHItPmlkZFtpXSA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBISUxfQ01EX1JTQzoKLQkJZm9yIChpID0gMDsgaSA8IGlkeDsgaSsrKQotCQkJcHRyLT5yc2NbaV0gPSBwdHItPmRhdGFbaV0gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJZm9yICg7IGkgPCBISUxfUFRSX01BWF9MRU5HVEg7IGkrKykKLQkJCXB0ci0+cnNjW2ldID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIEhJTF9DTURfRVhEOgotCQlmb3IgKGkgPSAwOyBpIDwgaWR4OyBpKyspCi0JCQlwdHItPmV4ZFtpXSA9IHB0ci0+ZGF0YVtpXSAmIEhJTF9QS1RfREFUQV9NQVNLOwotCQlmb3IgKDsgaSA8IEhJTF9QVFJfTUFYX0xFTkdUSDsgaSsrKQotCQkJcHRyLT5leGRbaV0gPSAwOwotCQlicmVhazsKLQotCWNhc2UgSElMX0NNRF9STk06Ci0JCWZvciAoaSA9IDA7IGkgPCBpZHg7IGkrKykKLQkJCXB0ci0+cm5tW2ldID0gcHRyLT5kYXRhW2ldICYgSElMX1BLVF9EQVRBX01BU0s7Ci0JCWZvciAoOyBpIDwgSElMX1BUUl9NQVhfTEVOR1RIICsgMTsgaSsrKQotCQkJcHRyLT5ybm1baV0gPSAwOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCS8qIFRoZXNlIG9jY3VyIHdoZW4gZGV2aWNlIGlzbid0IHByZXNlbnQgKi8KLQkJaWYgKHAgPT0gKEhJTF9FUlJfSU5UIHwgSElMX1BLVF9DTUQpKQotCQkJYnJlYWs7Ci0JCS8qIEFueXRoaW5nIGVsc2Ugd2UnZCBsaWtlIHRvIGtub3cgYWJvdXQuICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJEZXZpY2Ugc2VudCB1bmtub3duIHJlY29yZCAleFxuIiwgcCk7Ci0JCWJyZWFrOwotCX0KLQlnb3RvIG91dDsKLQotIHJlcG9ydDoKLQlpZiAoKHAgJiBISUxfQ01EQ1RfUE9MKSAhPSBpZHggLSAxKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCi0JCQkiTWFsZm9ybWVkIHBvbGwgcGFja2V0ICV4IChpZHggPSAlaSlcbiIsIHAsIGlkeCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWkgPSAocHRyLT5kYXRhWzBdICYgSElMX1BPTF9BWElTX0FMVCkgPyAzIDogMDsKLQlsYXhpcyA9IHB0ci0+ZGF0YVswXSAmIEhJTF9QT0xfTlVNX0FYRVNfTUFTSzsKLQlsYXhpcyArPSBpOwotCi0JYXgxNiA9IHB0ci0+aWRkWzFdICYgSElMX0lERF9IRUFERVJfMTZCSVQ7IC8qIDggb3IgMTZiaXQgcmVzb2x1dGlvbiAqLwotCWFic2RldiA9IHB0ci0+aWRkWzFdICYgSElMX0lERF9IRUFERVJfQUJTOwotCi0JZm9yIChjbnQgPSAxOyBpIDwgbGF4aXM7IGkrKykgewotCQl1bnNpZ25lZCBpbnQgbG8saGksdmFsOwotCQlsbyA9IHB0ci0+ZGF0YVtjbnQrK10gJiBISUxfUEtUX0RBVEFfTUFTSzsKLQkJaGkgPSBheDE2ID8gKHB0ci0+ZGF0YVtjbnQrK10gJiBISUxfUEtUX0RBVEFfTUFTSykgOiAwOwotCQlpZiAoYWJzZGV2KSB7Ci0JCQl2YWwgPSBsbyArIChoaTw8OCk7Ci0jaWZkZWYgVEFCTEVUX0FVVE9BREpVU1QKLQkJCWlmICh2YWwgPCBkZXYtPmFic21pbltBQlNfWCArIGldKQotCQkJCWRldi0+YWJzbWluW0FCU19YICsgaV0gPSB2YWw7Ci0JCQlpZiAodmFsID4gZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSkKLQkJCQlkZXYtPmFic21heFtBQlNfWCArIGldID0gdmFsOwotI2VuZGlmCi0JCQlpZiAoaSUzKSB2YWwgPSBkZXYtPmFic21heFtBQlNfWCArIGldIC0gdmFsOwotCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YICsgaSwgdmFsKTsKLQkJfSBlbHNlIHsKLQkJCXZhbCA9IChpbnQpICgoKGludDhfdClsbykgfCAoKGludDhfdCloaTw8OCkpOwotCQkJaWYgKGklMykKLQkJCQl2YWwgKj0gLTE7Ci0JCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ggKyBpLCB2YWwpOwotCQl9Ci0JfQotCi0Jd2hpbGUgKGNudCA8IGlkeCAtIDEpIHsKLQkJdW5zaWduZWQgaW50IGJ0bjsKLQkJaW50IHVwOwotCQlidG4gPSBwdHItPmRhdGFbY250KytdOwotCQl1cCA9IGJ0biAmIDE7Ci0JCWJ0biAmPSAweGZlOwotCQlpZiAoYnRuID09IDB4OGUpCi0JCQljb250aW51ZTsgLyogVE9ETzogcHJveGltaXR5ID09IHRvdWNoPyAqLwotCQllbHNlCi0JCQlpZiAoKGJ0biA+IDB4OGMpIHx8IChidG4gPCAweDgwKSkKLQkJCQljb250aW51ZTsKLQkJYnRuID0gKGJ0biAtIDB4ODApID4+IDE7Ci0JCWJ0biA9IHB0ci0+YnRubWFwW2J0bl07Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBidG4sICF1cCk7Ci0JfQotCWlucHV0X3N5bmMoZGV2KTsKLSBvdXQ6Ci0JcHRyLT5pZHg0ID0gMDsKLQl1cCgmcHRyLT5zZW0pOwotfQotCi1zdGF0aWMgdm9pZCBoaWxfcHRyX3Byb2Nlc3NfZXJyKHN0cnVjdCBoaWxfcHRyICpwdHIpCi17Ci0JcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggImVycm9yZWQgSElMIHBhY2tldFxuIik7Ci0JcHRyLT5pZHg0ID0gMDsKLQl1cCgmcHRyLT5zZW0pOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgaGlsX3B0cl9pbnRlcnJ1cHQoc3RydWN0IHNlcmlvICpzZXJpbywKLSAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IGhpbF9wdHIgKnB0cjsKLQloaWxfcGFja2V0IHBhY2tldDsKLQlpbnQgaWR4OwotCi0JcHRyID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwotCUJVR19PTihwdHIgPT0gTlVMTCk7Ci0KLQlpZiAocHRyLT5pZHg0ID49IChISUxfUFRSX01BWF9MRU5HVEggKiBzaXplb2YoaGlsX3BhY2tldCkpKSB7Ci0JCWhpbF9wdHJfcHJvY2Vzc19lcnIocHRyKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQlpZHggPSBwdHItPmlkeDQvNDsKLQlpZiAoIShwdHItPmlkeDQgJSA0KSkKLQkJcHRyLT5kYXRhW2lkeF0gPSAwOwotCXBhY2tldCA9IHB0ci0+ZGF0YVtpZHhdOwotCXBhY2tldCB8PSAoKGhpbF9wYWNrZXQpZGF0YSkgPDwgKCgzIC0gKHB0ci0+aWR4NCAlIDQpKSAqIDgpOwotCXB0ci0+ZGF0YVtpZHhdID0gcGFja2V0OwotCi0JLyogUmVjb3JkcyBvZiBOIDQtYnl0ZSBoaWxfcGFja2V0cyBtdXN0IHRlcm1pbmF0ZSB3aXRoIGEgY29tbWFuZC4gKi8KLQlpZiAoKCsrKHB0ci0+aWR4NCkpICUgNCkKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCWlmICgocGFja2V0ICYgMHhmZmZmMDAwMCkgIT0gSElMX0VSUl9JTlQpIHsKLQkJaGlsX3B0cl9wcm9jZXNzX2VycihwdHIpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCWlmIChwYWNrZXQgJiBISUxfUEtUX0NNRCkKLQkJaGlsX3B0cl9wcm9jZXNzX3JlY29yZChwdHIpOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZCBoaWxfcHRyX2Rpc2Nvbm5lY3Qoc3RydWN0IHNlcmlvICpzZXJpbykKLXsKLQlzdHJ1Y3QgaGlsX3B0ciAqcHRyOwotCi0JcHRyID0gc2VyaW9fZ2V0X2RydmRhdGEoc2VyaW8pOwotCUJVR19PTihwdHIgPT0gTlVMTCk7Ci0KLQlzZXJpb19jbG9zZShzZXJpbyk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UocHRyLT5kZXYpOwotCWtmcmVlKHB0cik7Ci19Ci0KLXN0YXRpYyBpbnQgaGlsX3B0cl9jb25uZWN0KHN0cnVjdCBzZXJpbyAqc2VyaW8sIHN0cnVjdCBzZXJpb19kcml2ZXIgKmRyaXZlcikKLXsKLQlzdHJ1Y3QgaGlsX3B0cgkqcHRyOwotCWNvbnN0IGNoYXIJKnR4dDsKLQl1bnNpZ25lZCBpbnQJaSwgbmF4c2V0cywgYnRudHlwZTsKLQl1aW50OF90CQlkaWQsICppZGQ7Ci0JaW50CQllcnJvcjsKLQotCXB0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWxfcHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwdHIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcHRyLT5kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIXB0ci0+ZGV2KSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBiYWlsMDsKLQl9Ci0KLQllcnJvciA9IHNlcmlvX29wZW4oc2VyaW8sIGRyaXZlcik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGJhaWwxOwotCi0Jc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIHB0cik7Ci0JcHRyLT5zZXJpbyA9IHNlcmlvOwotCi0JaW5pdF9NVVRFWF9MT0NLRUQoJnB0ci0+c2VtKTsKLQotCS8qIEdldCBkZXZpY2UgaW5mby4gIE1MQyBkcml2ZXIgc3VwcGxpZXMgZGV2aWQvc3RhdHVzL2V0Yy4gKi8KLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfSUREKTsKLQlkb3duKCZwdHItPnNlbSk7Ci0KLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfUlNDKTsKLQlkb3duKCZwdHItPnNlbSk7Ci0KLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfUk5NKTsKLQlkb3duKCZwdHItPnNlbSk7Ci0KLQlzZXJpby0+d3JpdGUoc2VyaW8sIDApOwotCXNlcmlvLT53cml0ZShzZXJpbywgMCk7Ci0Jc2VyaW8tPndyaXRlKHNlcmlvLCBISUxfUEtUX0NNRCA+PiA4KTsKLQlzZXJpby0+d3JpdGUoc2VyaW8sIEhJTF9DTURfRVhEKTsKLQlkb3duKCZwdHItPnNlbSk7Ci0KLQl1cCgmcHRyLT5zZW0pOwotCi0JZGlkID0gcHRyLT5pZGRbMF07Ci0JaWRkID0gcHRyLT5pZGQgKyAxOwotCXR4dCA9ICJ1bmtub3duIjsKLQotCWlmICgoZGlkICYgSElMX0lERF9ESURfVFlQRV9NQVNLKSA9PSBISUxfSUREX0RJRF9UWVBFX1JFTCkgewotCQlwdHItPmRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9SRUwpOwotCQl0eHQgPSAicmVsYXRpdmUiOwotCX0KLQotCWlmICgoZGlkICYgSElMX0lERF9ESURfVFlQRV9NQVNLKSA9PSBISUxfSUREX0RJRF9UWVBFX0FCUykgewotCQlwdHItPmRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9BQlMpOwotCQl0eHQgPSAiYWJzb2x1dGUiOwotCX0KLQotCWlmICghcHRyLT5kZXYtPmV2Yml0WzBdKSB7Ci0JCWVycm9yID0gLUVOT0RFVjsKLQkJZ290byBiYWlsMjsKLQl9Ci0KLQlwdHItPm5idG4gPSBISUxfSUREX05VTV9CVVRUT05TKGlkZCk7Ci0JaWYgKHB0ci0+bmJ0bikKLQkJcHRyLT5kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX0tFWSk7Ci0KLQluYXhzZXRzID0gSElMX0lERF9OVU1fQVhTRVRTKCppZGQpOwotCXB0ci0+bmF4ZXMgPSBISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoKmlkZCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiSElMIHBvaW50ZXIgZGV2aWNlIGZvdW5kIChkaWQ6IDB4JTAyeCwgYXhpczogJXMpXG4iLAotCQkJZGlkLCB0eHQpOwotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJISUwgcG9pbnRlciBoYXMgJWkgYnV0dG9ucyBhbmQgJWkgc2V0cyBvZiAlaSBheGVzXG4iLAotCQkJcHRyLT5uYnRuLCBuYXhzZXRzLCBwdHItPm5heGVzKTsKLQotCWJ0bnR5cGUgPSBCVE5fTUlTQzsKLQlpZiAoKGRpZCAmIEhJTF9JRERfRElEX0FCU19UQUJMRVRfTUFTSykgPT0gSElMX0lERF9ESURfQUJTX1RBQkxFVCkKLSNpZmRlZiBUQUJMRVRfU0lNVUxBVEVTX01PVVNFCi0JCWJ0bnR5cGUgPSBCVE5fVE9VQ0g7Ci0jZWxzZQotCQlidG50eXBlID0gQlROX0RJR0k7Ci0jZW5kaWYKLQlpZiAoKGRpZCAmIEhJTF9JRERfRElEX0FCU19UU0NSRUVOX01BU0spID09IEhJTF9JRERfRElEX0FCU19UU0NSRUVOKQotCQlidG50eXBlID0gQlROX1RPVUNIOwotCi0JaWYgKChkaWQgJiBISUxfSUREX0RJRF9SRUxfTU9VU0VfTUFTSykgPT0gSElMX0lERF9ESURfUkVMX01PVVNFKQotCQlidG50eXBlID0gQlROX01PVVNFOwotCi0JZm9yIChpID0gMDsgaSA8IHB0ci0+bmJ0bjsgaSsrKSB7Ci0JCXNldF9iaXQoYnRudHlwZSB8IGksIHB0ci0+ZGV2LT5rZXliaXQpOwotCQlwdHItPmJ0bm1hcFtpXSA9IGJ0bnR5cGUgfCBpOwotCX0KLQotCWlmIChidG50eXBlID09IEJUTl9NT1VTRSkgewotCQkvKiBTd2FwIGJ1dHRvbnMgMiBhbmQgMyAqLwotCQlwdHItPmJ0bm1hcFsxXSA9IEJUTl9NSURETEU7Ci0JCXB0ci0+YnRubWFwWzJdID0gQlROX1JJR0hUOwotCX0KLQotCWlmICgoZGlkICYgSElMX0lERF9ESURfVFlQRV9NQVNLKSA9PSBISUxfSUREX0RJRF9UWVBFX1JFTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgcHRyLT5uYXhlczsgaSsrKQotCQkJc2V0X2JpdChSRUxfWCArIGksIHB0ci0+ZGV2LT5yZWxiaXQpOwotCQlmb3IgKGkgPSAzOyAoaSA8IHB0ci0+bmF4ZXMgKyAzKSAmJiAobmF4c2V0cyA+IDEpOyBpKyspCi0JCQlzZXRfYml0KFJFTF9YICsgaSwgcHRyLT5kZXYtPnJlbGJpdCk7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IHB0ci0+bmF4ZXM7IGkrKykgewotCQkJc2V0X2JpdChBQlNfWCArIGksIHB0ci0+ZGV2LT5hYnNiaXQpOwotCQkJcHRyLT5kZXYtPmFic21pbltBQlNfWCArIGldID0gMDsKLQkJCXB0ci0+ZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSA9Ci0JCQkJSElMX0lERF9BWElTX01BWCgocHRyLT5pZGQgKyAxKSwgaSk7Ci0JCX0KLQkJZm9yIChpID0gMzsgKGkgPCBwdHItPm5heGVzICsgMykgJiYgKG5heHNldHMgPiAxKTsgaSsrKSB7Ci0JCQlzZXRfYml0KEFCU19YICsgaSwgcHRyLT5kZXYtPmFic2JpdCk7Ci0JCQlwdHItPmRldi0+YWJzbWluW0FCU19YICsgaV0gPSAwOwotCQkJcHRyLT5kZXYtPmFic21heFtBQlNfWCArIGldID0KLQkJCQlISUxfSUREX0FYSVNfTUFYKChwdHItPmlkZCArIDEpLCAoaSAtIDMpKTsKLQkJfQotI2lmZGVmIFRBQkxFVF9BVVRPQURKVVNUCi0JCWZvciAoaSA9IDA7IGkgPCBBQlNfTUFYOyBpKyspIHsKLQkJCWludCBkaWZmID0gcHRyLT5kZXYtPmFic21heFtBQlNfWCArIGldIC8gMTA7Ci0JCQlwdHItPmRldi0+YWJzbWluW0FCU19YICsgaV0gKz0gZGlmZjsKLQkJCXB0ci0+ZGV2LT5hYnNtYXhbQUJTX1ggKyBpXSAtPSBkaWZmOwotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlwdHItPmRldi0+bmFtZSA9IHN0cmxlbihwdHItPnJubSkgPyBwdHItPnJubSA6IEhJTF9HRU5FUklDX05BTUU7Ci0KLQlwdHItPmRldi0+aWQuYnVzdHlwZQk9IEJVU19ISUw7Ci0JcHRyLT5kZXYtPmlkLnZlbmRvcgk9IFBDSV9WRU5ET1JfSURfSFA7Ci0JcHRyLT5kZXYtPmlkLnByb2R1Y3QJPSAweDAwMDE7IC8qIFRPRE86IGdldCBmcm9tIHB0ci0+cnNjICovCi0JcHRyLT5kZXYtPmlkLnZlcnNpb24JPSAweDAxMDA7IC8qIFRPRE86IGdldCBmcm9tIHB0ci0+cnNjICovCi0JcHRyLT5kZXYtPmRldi5wYXJlbnQJPSAmc2VyaW8tPmRldjsKLQotCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHB0ci0+ZGV2KTsKLQlpZiAoZXJyb3IpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwotCQlnb3RvIGJhaWwyOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gImlucHV0OiAlcyAoJXMpLCBJRDogJWRcbiIsCi0JCXB0ci0+ZGV2LT5uYW1lLAotCQkoYnRudHlwZSA9PSBCVE5fTU9VU0UpID8gIkhJTCBtb3VzZSI6IkhJTCB0YWJsZXQgb3IgdG91Y2hwYWQiLAotCQlkaWQpOwotCi0JcmV0dXJuIDA7Ci0KLSBiYWlsMjoKLQlzZXJpb19jbG9zZShzZXJpbyk7Ci0gYmFpbDE6Ci0JaW5wdXRfZnJlZV9kZXZpY2UocHRyLT5kZXYpOwotIGJhaWwwOgotCWtmcmVlKHB0cik7Ci0Jc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXJpb19kZXZpY2VfaWQgaGlsX3B0cl9pZHNbXSA9IHsKLQl7Ci0JCS50eXBlID0gU0VSSU9fSElMX01MQywKLQkJLnByb3RvID0gU0VSSU9fSElMLAotCQkuaWQgPSBTRVJJT19BTlksCi0JCS5leHRyYSA9IFNFUklPX0FOWSwKLQl9LAotCXsgMCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNlcmlvX2RyaXZlciBoaWxfcHRyX3NlcmlvX2RyaXZlciA9IHsKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAiaGlsX3B0ciIsCi0JfSwKLQkuZGVzY3JpcHRpb24JPSAiSFAgSElMIG1vdXNlL3RhYmxldCBkcml2ZXIiLAotCS5pZF90YWJsZQk9IGhpbF9wdHJfaWRzLAotCS5jb25uZWN0CT0gaGlsX3B0cl9jb25uZWN0LAotCS5kaXNjb25uZWN0CT0gaGlsX3B0cl9kaXNjb25uZWN0LAotCS5pbnRlcnJ1cHQJPSBoaWxfcHRyX2ludGVycnVwdAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaGlsX3B0cl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHNlcmlvX3JlZ2lzdGVyX2RyaXZlcigmaGlsX3B0cl9zZXJpb19kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaGlsX3B0cl9leGl0KHZvaWQpCi17Ci0Jc2VyaW9fdW5yZWdpc3Rlcl9kcml2ZXIoJmhpbF9wdHJfc2VyaW9fZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaGlsX3B0cl9pbml0KTsKLW1vZHVsZV9leGl0KGhpbF9wdHJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKaW5kZXggZGNkNDIzNi4uNWU2MzA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwpAQCAtMzMsMTEgKzMzLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxpZmVib29rX3VzZV82Ynl0ZV9wcm90bzsKK3N0YXRpYyBib29sIGxpZmVib29rX3VzZV82Ynl0ZV9wcm90bzsKIAogc3RhdGljIGludCBsaWZlYm9va19zZXRfNmJ5dGVfcHJvdG8oY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCiB7Ci0JbGlmZWJvb2tfdXNlXzZieXRlX3Byb3RvID0gMTsKKwlsaWZlYm9va191c2VfNmJ5dGVfcHJvdG8gPSB0cnVlOwogCXJldHVybiAwOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYxID0gcHNtb3VzZS0+ZGV2OwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldjIgPSBwcml2ID8gcHJpdi0+ZGV2MiA6IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqcGFja2V0ID0gcHNtb3VzZS0+cGFja2V0OwotCWludCByZWxhdGl2ZV9wYWNrZXQgPSBwYWNrZXRbMF0gJiAweDA4OworCWJvb2wgcmVsYXRpdmVfcGFja2V0ID0gcGFja2V0WzBdICYgMHgwODsKIAogCWlmIChyZWxhdGl2ZV9wYWNrZXQgfHwgIWxpZmVib29rX3VzZV82Ynl0ZV9wcm90bykgewogCQlpZiAocHNtb3VzZS0+cGt0Y250ICE9IDMpCkBAIC0yNDIsNyArMjQyLDcgQEAKIAlwc21vdXNlLT5wcml2YXRlID0gTlVMTDsKIH0KIAotaW50IGxpZmVib29rX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoraW50IGxpZmVib29rX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKICAgICAgICAgaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGxpZmVib29rX2RtaV90YWJsZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5oCmluZGV4IGMxNjQ3Y2YuLjQwN2NiMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmgKQEAgLTEyLDEwICsxMiwxMCBAQAogI2RlZmluZSBfTElGRUJPT0tfSAogCiAjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSwotaW50IGxpZmVib29rX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKTsKK2ludCBsaWZlYm9va19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOwogaW50IGxpZmVib29rX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpOwogI2Vsc2UKLWlubGluZSBpbnQgbGlmZWJvb2tfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbmxpbmUgaW50IGxpZmVib29rX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IDM5MGYxZGIuLmRlNzQ1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMTMwLDE0ICsxMzAsMTEgQEAKICAqIDAgLSBkaXNhYmxlZAogICovCiAKLXN0YXRpYyB2b2lkIHBzMnBwX3NldF9zbWFydHNjcm9sbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdW5zaWduZWQgaW50IHNtYXJ0c2Nyb2xsKQorc3RhdGljIHZvaWQgcHMycHBfc2V0X3NtYXJ0c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNtYXJ0c2Nyb2xsKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CiAJdW5zaWduZWQgY2hhciBwYXJhbVs0XTsKIAotCWlmIChzbWFydHNjcm9sbCA+IDEpCi0JCXNtYXJ0c2Nyb2xsID0gMTsKLQogCXBzMnBwX2NtZChwc21vdXNlLCBwYXJhbSwgMHgzMik7CiAKIAlwYXJhbVswXSA9IDA7CkBAIC0xNDksMTIgKzE0NiwxNCBAQAogCXBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIFBTTU9VU0VfQ01EX1NFVFJFUyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHBzMnBwX2F0dHJfc2hvd19zbWFydHNjcm9sbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgcHMycHBfYXR0cl9zaG93X3NtYXJ0c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQkgICB2b2lkICpkYXRhLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBzbW91c2UtPnNtYXJ0c2Nyb2xsID8gMSA6IDApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwc21vdXNlLT5zbWFydHNjcm9sbCk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHBzMnBwX2F0dHJfc2V0X3NtYXJ0c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHBzMnBwX2F0dHJfc2V0X3NtYXJ0c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAKQEAgLTI2MSwyOSArMjYwLDI5IEBACiAKIHN0YXRpYyB2b2lkIHBzMnBwX3NldF9tb2RlbF9wcm9wZXJ0aWVzKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcHMycHBfaW5mbyAqbW9kZWxfaW5mbywKLQkJCQkgICAgICAgaW50IHVzaW5nX3BzMnBwKQorCQkJCSAgICAgICBib29sIHVzaW5nX3BzMnBwKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiA9IHBzbW91c2UtPmRldjsKIAogCWlmIChtb2RlbF9pbmZvLT5mZWF0dXJlcyAmIFBTMlBQX1NJREVfQlROKQotCQlzZXRfYml0KEJUTl9TSURFLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fU0lERSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCiAJaWYgKG1vZGVsX2luZm8tPmZlYXR1cmVzICYgUFMyUFBfRVhUUkFfQlROKQotCQlzZXRfYml0KEJUTl9FWFRSQSwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX0VYVFJBLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAKIAlpZiAobW9kZWxfaW5mby0+ZmVhdHVyZXMgJiBQUzJQUF9UQVNLX0JUTikKLQkJc2V0X2JpdChCVE5fVEFTSywgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX1RBU0ssIGlucHV0X2Rldi0+a2V5Yml0KTsKIAogCWlmIChtb2RlbF9pbmZvLT5mZWF0dXJlcyAmIFBTMlBQX05BVl9CVE4pIHsKLQkJc2V0X2JpdChCVE5fRk9SV0FSRCwgaW5wdXRfZGV2LT5rZXliaXQpOwotCQlzZXRfYml0KEJUTl9CQUNLLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fRk9SV0FSRCwgaW5wdXRfZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX0JBQ0ssIGlucHV0X2Rldi0+a2V5Yml0KTsKIAl9CiAKIAlpZiAobW9kZWxfaW5mby0+ZmVhdHVyZXMgJiBQUzJQUF9XSEVFTCkKLQkJc2V0X2JpdChSRUxfV0hFRUwsIGlucHV0X2Rldi0+cmVsYml0KTsKKwkJX19zZXRfYml0KFJFTF9XSEVFTCwgaW5wdXRfZGV2LT5yZWxiaXQpOwogCiAJaWYgKG1vZGVsX2luZm8tPmZlYXR1cmVzICYgUFMyUFBfSFdIRUVMKQotCQlzZXRfYml0KFJFTF9IV0hFRUwsIGlucHV0X2Rldi0+cmVsYml0KTsKKwkJX19zZXRfYml0KFJFTF9IV0hFRUwsIGlucHV0X2Rldi0+cmVsYml0KTsKIAogCXN3aXRjaCAobW9kZWxfaW5mby0+a2luZCkgewogCQljYXNlIFBTMlBQX0tJTkRfV0hFRUw6CkBAIC0zMjEsMTMgKzMyMCwxMyBAQAogICogdGhhdCBzdXBwb3J0IGl0LgogICovCiAKLWludCBwczJwcF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbnQgcHMycHBfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCXVuc2lnbmVkIGNoYXIgcGFyYW1bNF07CiAJdW5zaWduZWQgY2hhciBtb2RlbCwgYnV0dG9uczsKIAljb25zdCBzdHJ1Y3QgcHMycHBfaW5mbyAqbW9kZWxfaW5mbzsKLQlpbnQgdXNlX3BzMnBwID0gMDsKKwlib29sIHVzZV9wczJwcCA9IGZhbHNlOwogCWludCBlcnJvcjsKIAogCXBhcmFtWzBdID0gMDsKQEAgLTM2NCw3ICszNjMsNyBAQAogCQkJcGFyYW1bMF0gPSAwOwogCQkJaWYgKCFwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCAweDEzZDEpICYmCiAJCQkgICAgcGFyYW1bMF0gPT0gMHgwNiAmJiBwYXJhbVsxXSA9PSAweDAwICYmIHBhcmFtWzJdID09IDB4MTQpIHsKLQkJCQl1c2VfcHMycHAgPSAxOworCQkJCXVzZV9wczJwcCA9IHRydWU7CiAJCQl9CiAKIAkJfSBlbHNlIHsKQEAgLTM3Niw4ICszNzUsOCBAQAogCQkJaWYgKChwYXJhbVswXSAmIDB4NzgpID09IDB4NDggJiYKIAkJCSAgICAocGFyYW1bMV0gJiAweGYzKSA9PSAweGMyICYmCiAJCQkgICAgKHBhcmFtWzJdICYgMHgwMykgPT0gKChwYXJhbVsxXSA+PiAyKSAmIDMpKSB7Ci0JCQkJcHMycHBfc2V0X3NtYXJ0c2Nyb2xsKHBzbW91c2UsIHBzbW91c2UtPnNtYXJ0c2Nyb2xsKTsKLQkJCQl1c2VfcHMycHAgPSAxOworCQkJCXBzMnBwX3NldF9zbWFydHNjcm9sbChwc21vdXNlLCBmYWxzZSk7CisJCQkJdXNlX3BzMnBwID0gdHJ1ZTsKIAkJCX0KIAkJfQogCX0KQEAgLTQwNiw3ICs0MDUsNyBAQAogCQl9CiAKIAkJaWYgKGJ1dHRvbnMgPCAzKQotCQkJY2xlYXJfYml0KEJUTl9NSURETEUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwkJCV9fY2xlYXJfYml0KEJUTl9NSURETEUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKIAogCQlpZiAobW9kZWxfaW5mbykKIAkJCXBzMnBwX3NldF9tb2RlbF9wcm9wZXJ0aWVzKHBzbW91c2UsIG1vZGVsX2luZm8sIHVzZV9wczJwcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuaAppbmRleCA2ZTU3MTI1Li4wYzE4NmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmgKQEAgLTEyLDkgKzEyLDkgQEAKICNkZWZpbmUgX0xPR0lQUzJQUF9ICiAKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUAotaW50IHBzMnBwX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcyk7CitpbnQgcHMycHBfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcyk7CiAjZWxzZQotaW5saW5lIGludCBwczJwcF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbmxpbmUgaW50IHBzMnBwX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCBiNDA3YjM1Li42OTBhZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJ0cmFja3BvaW50LmgiCiAjaW5jbHVkZSAidG91Y2hraXRfcHMyLmgiCiAjaW5jbHVkZSAiZWxhbnRlY2guaCIKKyNpbmNsdWRlICJzZW50ZWxpYy5oIgogCiAjZGVmaW5lIERSSVZFUl9ERVNDCSJQUy8yIG1vdXNlIGRyaXZlciIKIApAQCAtMTA4LDEwICsxMDksMTAgQEAKIAogc3RydWN0IHBzbW91c2VfcHJvdG9jb2wgewogCWVudW0gcHNtb3VzZV90eXBlIHR5cGU7CisJYm9vbCBtYXhwcm90bzsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmFsaWFzOwotCWludCBtYXhwcm90bzsKLQlpbnQgKCpkZXRlY3QpKHN0cnVjdCBwc21vdXNlICosIGludCk7CisJaW50ICgqZGV0ZWN0KShzdHJ1Y3QgcHNtb3VzZSAqLCBib29sKTsKIAlpbnQgKCppbml0KShzdHJ1Y3QgcHNtb3VzZSAqKTsKIH07CiAKQEAgLTIxNiw3ICsyMTcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9fcHNtb3VzZV9zZXRfc3RhdGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGVudW0gcHNtb3VzZV9zdGF0ZSBuZXdfc3RhdGUpCiB7CiAJcHNtb3VzZS0+c3RhdGUgPSBuZXdfc3RhdGU7Ci0JcHNtb3VzZS0+cGt0Y250ID0gcHNtb3VzZS0+b3V0X29mX3N5bmMgPSAwOworCXBzbW91c2UtPnBrdGNudCA9IHBzbW91c2UtPm91dF9vZl9zeW5jX2NudCA9IDA7CiAJcHNtb3VzZS0+cHMyZGV2LmZsYWdzID0gMDsKIAlwc21vdXNlLT5sYXN0ID0gamlmZmllczsKIH0KQEAgLTI0OSw3ICsyNTAsNyBAQAogCQkJaWYgKHBzbW91c2UtPnN0YXRlID09IFBTTU9VU0VfQUNUSVZBVEVEKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicHNtb3VzZS5jOiAlcyBhdCAlcyBsb3N0IHN5bmMgYXQgYnl0ZSAlZFxuIiwKIAkJCQkJcHNtb3VzZS0+bmFtZSwgcHNtb3VzZS0+cGh5cywgcHNtb3VzZS0+cGt0Y250KTsKLQkJCQlpZiAoKytwc21vdXNlLT5vdXRfb2Zfc3luYyA9PSBwc21vdXNlLT5yZXNldGFmdGVyKSB7CisJCQkJaWYgKCsrcHNtb3VzZS0+b3V0X29mX3N5bmNfY250ID09IHBzbW91c2UtPnJlc2V0YWZ0ZXIpIHsKIAkJCQkJX19wc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0lHTk9SRSk7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAicHNtb3VzZS5jOiBpc3N1aW5nIHJlY29ubmVjdCByZXF1ZXN0XG4iKTsKIAkJCQkJc2VyaW9fcmVjb25uZWN0KHBzbW91c2UtPnBzMmRldi5zZXJpbyk7CkBAIC0yNjEsOCArMjYyLDggQEAKIAogCQljYXNlIFBTTU9VU0VfRlVMTF9QQUNLRVQ6CiAJCQlwc21vdXNlLT5wa3RjbnQgPSAwOwotCQkJaWYgKHBzbW91c2UtPm91dF9vZl9zeW5jKSB7Ci0JCQkJcHNtb3VzZS0+b3V0X29mX3N5bmMgPSAwOworCQkJaWYgKHBzbW91c2UtPm91dF9vZl9zeW5jX2NudCkgeworCQkJCXBzbW91c2UtPm91dF9vZl9zeW5jX2NudCA9IDA7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJwc21vdXNlLmM6ICVzIGF0ICVzIC0gZHJpdmVyIHJlc3luY2hlZC5cbiIsCiAJCQkJCXBzbW91c2UtPm5hbWUsIHBzbW91c2UtPnBoeXMpOwogCQkJfQpAQCAtNDA4LDcgKzQwOSw3IEBACiAvKgogICogR2VuaXVzIE5ldE1vdXNlIG1hZ2ljIGluaXQuCiAgKi8KLXN0YXRpYyBpbnQgZ2VuaXVzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQorc3RhdGljIGludCBnZW5pdXNfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CiAJdW5zaWduZWQgY2hhciBwYXJhbVs0XTsKQEAgLTQyNCw5ICs0MjUsOSBAQAogCQlyZXR1cm4gLTE7CiAKIAlpZiAoc2V0X3Byb3BlcnRpZXMpIHsKLQkJc2V0X2JpdChCVE5fRVhUUkEsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKLQkJc2V0X2JpdChCVE5fU0lERSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOwotCQlzZXRfYml0KFJFTF9XSEVFTCwgcHNtb3VzZS0+ZGV2LT5yZWxiaXQpOworCQlfX3NldF9iaXQoQlROX0VYVFJBLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fU0lERSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoUkVMX1dIRUVMLCBwc21vdXNlLT5kZXYtPnJlbGJpdCk7CiAKIAkJcHNtb3VzZS0+dmVuZG9yID0gIkdlbml1cyI7CiAJCXBzbW91c2UtPm5hbWUgPSAiTW91c2UiOwpAQCAtNDM5LDcgKzQ0MCw3IEBACiAvKgogICogSW50ZWxsaU1vdXNlIG1hZ2ljIGluaXQuCiAgKi8KLXN0YXRpYyBpbnQgaW50ZWxsaW1vdXNlX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQorc3RhdGljIGludCBpbnRlbGxpbW91c2VfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CiAJdW5zaWduZWQgY2hhciBwYXJhbVsyXTsKQEAgLTQ1Niw4ICs0NTcsOCBAQAogCQlyZXR1cm4gLTE7CiAKIAlpZiAoc2V0X3Byb3BlcnRpZXMpIHsKLQkJc2V0X2JpdChCVE5fTUlERExFLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7Ci0JCXNldF9iaXQoUkVMX1dIRUVMLCBwc21vdXNlLT5kZXYtPnJlbGJpdCk7CisJCV9fc2V0X2JpdChCVE5fTUlERExFLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChSRUxfV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKIAogCQlpZiAoIXBzbW91c2UtPnZlbmRvcikgcHNtb3VzZS0+dmVuZG9yID0gIkdlbmVyaWMiOwogCQlpZiAoIXBzbW91c2UtPm5hbWUpIHBzbW91c2UtPm5hbWUgPSAiV2hlZWwgTW91c2UiOwpAQCAtNDcwLDcgKzQ3MSw3IEBACiAvKgogICogVHJ5IEludGVsbGlNb3VzZS9FeHBsb3JlciBtYWdpYyBpbml0LgogICovCi1zdGF0aWMgaW50IGltX2V4cGxvcmVyX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQorc3RhdGljIGludCBpbV9leHBsb3Jlcl9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzJdOwpAQCAtNDk3LDExICs0OTgsMTEgQEAKIAlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSQVRFKTsKIAogCWlmIChzZXRfcHJvcGVydGllcykgewotCQlzZXRfYml0KEJUTl9NSURETEUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKLQkJc2V0X2JpdChSRUxfV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKLQkJc2V0X2JpdChSRUxfSFdIRUVMLCBwc21vdXNlLT5kZXYtPnJlbGJpdCk7Ci0JCXNldF9iaXQoQlROX1NJREUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKLQkJc2V0X2JpdChCVE5fRVhUUkEsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9NSURETEUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KFJFTF9XSEVFTCwgcHNtb3VzZS0+ZGV2LT5yZWxiaXQpOworCQlfX3NldF9iaXQoUkVMX0hXSEVFTCwgcHNtb3VzZS0+ZGV2LT5yZWxiaXQpOworCQlfX3NldF9iaXQoQlROX1NJREUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9FWFRSQSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOwogCiAJCWlmICghcHNtb3VzZS0+dmVuZG9yKSBwc21vdXNlLT52ZW5kb3IgPSAiR2VuZXJpYyI7CiAJCWlmICghcHNtb3VzZS0+bmFtZSkgcHNtb3VzZS0+bmFtZSA9ICJFeHBsb3JlciBNb3VzZSI7CkBAIC01MTQsNyArNTE1LDcgQEAKIC8qCiAgKiBLZW5zaW5ndG9uIFRoaW5raW5nTW91c2UgLyBFeHBlcnRNb3VzZSBtYWdpYyBpbml0LgogICovCi1zdGF0aWMgaW50IHRoaW5raW5nX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQorc3RhdGljIGludCB0aGlua2luZ19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtWzJdOwpAQCAtNTM1LDcgKzUzNiw3IEBACiAJCXJldHVybiAtMTsKIAogCWlmIChzZXRfcHJvcGVydGllcykgewotCQlzZXRfYml0KEJUTl9FWFRSQSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX0VYVFJBLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CiAKIAkJcHNtb3VzZS0+dmVuZG9yID0gIktlbnNpbmd0b24iOwogCQlwc21vdXNlLT5uYW1lID0gIlRoaW5raW5nTW91c2UiOwpAQCAtNTQ3LDcgKzU0OCw3IEBACiAvKgogICogQmFyZSBQUy8yIHByb3RvY29sICJkZXRlY3Rpb24iLiBBbHdheXMgc3VjY2VlZHMuCiAgKi8KLXN0YXRpYyBpbnQgcHMyYmFyZV9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCBzZXRfcHJvcGVydGllcykKK3N0YXRpYyBpbnQgcHMyYmFyZV9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpCiB7CiAJaWYgKHNldF9wcm9wZXJ0aWVzKSB7CiAJCWlmICghcHNtb3VzZS0+dmVuZG9yKSBwc21vdXNlLT52ZW5kb3IgPSAiR2VuZXJpYyI7CkBAIC01NjEsMTIgKzU2MiwxMiBAQAogICogQ29ydHJvbiBQUy8yIHByb3RvY29sIGRldGVjdGlvbi4gVGhlcmUncyBubyBzcGVjaWFsIHdheSB0byBkZXRlY3QgaXQsIHNvIGl0CiAgKiBtdXN0IGJlIGZvcmNlZCBieSBzeXNmcyBwcm90b2NvbCB3cml0aW5nLgogICovCi1zdGF0aWMgaW50IGNvcnRyb25fZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitzdGF0aWMgaW50IGNvcnRyb25fZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCWlmIChzZXRfcHJvcGVydGllcykgewogCQlwc21vdXNlLT52ZW5kb3IgPSAiQ29ydHJvbiI7CiAJCXBzbW91c2UtPm5hbWUgPSAiUFMvMiBUcmFja2JhbGwiOwotCQlzZXRfYml0KEJUTl9TSURFLCBwc21vdXNlLT5kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fU0lERSwgcHNtb3VzZS0+ZGV2LT5rZXliaXQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTc4LDkgKzU3OSw5IEBACiAgKi8KIAogc3RhdGljIGludCBwc21vdXNlX2V4dGVuc2lvbnMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Byb3RvLCBpbnQgc2V0X3Byb3BlcnRpZXMpCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Byb3RvLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewotCWludCBzeW5hcHRpY3NfaGFyZHdhcmUgPSAwOworCWJvb2wgc3luYXB0aWNzX2hhcmR3YXJlID0gdHJ1ZTsKIAogLyoKICAqIFdlIGFsd2F5cyBjaGVjayBmb3IgbGlmZWJvb2sgYmVjYXVzZSBpdCBkb2VzIG5vdCBkaXN0dXJiIG1vdXNlCkBAIC02MDcsNyArNjA4LDcgQEAKICAqIGNhbiByZXNldCBpdCBwcm9wZXJseSBhZnRlciBwcm9iaW5nIGZvciBpbnRlbGxpbW91c2UuCiAgKi8KIAlpZiAobWF4X3Byb3RvID4gUFNNT1VTRV9QUzIgJiYgc3luYXB0aWNzX2RldGVjdChwc21vdXNlLCBzZXRfcHJvcGVydGllcykgPT0gMCkgewotCQlzeW5hcHRpY3NfaGFyZHdhcmUgPSAxOworCQlzeW5hcHRpY3NfaGFyZHdhcmUgPSB0cnVlOwogCiAJCWlmIChtYXhfcHJvdG8gPiBQU01PVVNFX0lNRVgpIHsKIAkJCWlmICghc2V0X3Byb3BlcnRpZXMgfHwgc3luYXB0aWNzX2luaXQocHNtb3VzZSkgPT0gMCkKQEAgLTY2Niw2ICs2NjcsMjAgQEAKIAkJbWF4X3Byb3RvID0gUFNNT1VTRV9JTUVYOwogCX0KIAorLyoKKyAqIFRyeSBGaW5nZXIgU2Vuc2luZyBQYWQKKyAqLworCWlmIChtYXhfcHJvdG8gPiBQU01PVVNFX0lNRVgpIHsKKwkJaWYgKGZzcF9kZXRlY3QocHNtb3VzZSwgc2V0X3Byb3BlcnRpZXMpID09IDApIHsKKwkJCWlmICghc2V0X3Byb3BlcnRpZXMgfHwgZnNwX2luaXQocHNtb3VzZSkgPT0gMCkKKwkJCQlyZXR1cm4gUFNNT1VTRV9GU1A7CisvKgorICogSW5pdCBmYWlsZWQsIHRyeSBiYXNpYyByZWxhdGl2ZSBwcm90b2NvbHMKKyAqLworCQkJbWF4X3Byb3RvID0gUFNNT1VTRV9JTUVYOworCQl9CisJfQorCiAJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCkgewogCQlpZiAoZ2VuaXVzX2RldGVjdChwc21vdXNlLCBzZXRfcHJvcGVydGllcykgPT0gMCkKIAkJCXJldHVybiBQU01PVVNFX0dFTlBTOwpAQCAtNzE4LDcgKzczMyw3IEBACiAJCS50eXBlCQk9IFBTTU9VU0VfUFMyLAogCQkubmFtZQkJPSAiUFMvMiIsCiAJCS5hbGlhcwkJPSAiYmFyZSIsCi0JCS5tYXhwcm90bwk9IDEsCisJCS5tYXhwcm90bwk9IHRydWUsCiAJCS5kZXRlY3QJCT0gcHMyYmFyZV9kZXRlY3QsCiAJfSwKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUApAQCAtNzQ1LDE0ICs3NjAsMTQgQEAKIAkJLnR5cGUJCT0gUFNNT1VTRV9JTVBTLAogCQkubmFtZQkJPSAiSW1QUy8yIiwKIAkJLmFsaWFzCQk9ICJpbXBzIiwKLQkJLm1heHByb3RvCT0gMSwKKwkJLm1heHByb3RvCT0gdHJ1ZSwKIAkJLmRldGVjdAkJPSBpbnRlbGxpbW91c2VfZGV0ZWN0LAogCX0sCiAJewogCQkudHlwZQkJPSBQU01PVVNFX0lNRVgsCiAJCS5uYW1lCQk9ICJJbUV4UFMvMiIsCiAJCS5hbGlhcwkJPSAiZXhwcyIsCi0JCS5tYXhwcm90bwk9IDEsCisJCS5tYXhwcm90bwk9IHRydWUsCiAJCS5kZXRlY3QJCT0gaW1fZXhwbG9yZXJfZGV0ZWN0LAogCX0sCiAjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1MKQEAgLTgxMyw3ICs4MjgsMTYgQEAKIAkJLmRldGVjdAkJPSBlbGFudGVjaF9kZXRlY3QsCiAJCS5pbml0CQk9IGVsYW50ZWNoX2luaXQsCiAJfSwKLSAjZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMKKwl7CisJCS50eXBlCQk9IFBTTU9VU0VfRlNQLAorCQkubmFtZQkJPSAiRlNQUFMvMiIsCisJCS5hbGlhcwkJPSAiZnNwIiwKKwkJLmRldGVjdAkJPSBmc3BfZGV0ZWN0LAorCQkuaW5pdAkJPSBmc3BfaW5pdCwKKwl9LAorI2VuZGlmCiAJewogCQkudHlwZQkJPSBQU01PVVNFX0NPUlRST04sCiAJCS5uYW1lCQk9ICJDb3J0cm9uUFMvMiIsCkBAIC04MjQsNyArODQ4LDcgQEAKIAkJLnR5cGUJCT0gUFNNT1VTRV9BVVRPLAogCQkubmFtZQkJPSAiYXV0byIsCiAJCS5hbGlhcwkJPSAiYW55IiwKLQkJLm1heHByb3RvCT0gMSwKKwkJLm1heHByb3RvCT0gdHJ1ZSwKIAl9LAogfTsKIApAQCAtOTkwLDcgKzEwMTQsNyBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBzbW91c2UsIHJlc3luY193b3JrLndvcmspOwogCXN0cnVjdCBzZXJpbyAqc2VyaW8gPSBwc21vdXNlLT5wczJkZXYuc2VyaW87CiAJcHNtb3VzZV9yZXRfdCByYyA9IFBTTU9VU0VfR09PRF9EQVRBOwotCWludCBmYWlsZWQgPSAwLCBlbmFibGVkID0gMDsKKwlib29sIGZhaWxlZCA9IGZhbHNlLCBlbmFibGVkID0gZmFsc2U7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZwc21vdXNlX211dGV4KTsKQEAgLTEwMTcsOSArMTA0MSw5IEBACiAKIAlpZiAocHMyX3NlbmRieXRlKCZwc21vdXNlLT5wczJkZXYsIFBTTU9VU0VfQ01EX0RJU0FCTEUsIDIwKSkgewogCQlpZiAocHNtb3VzZS0+bnVtX3Jlc3luY3MgPCAzIHx8IHBzbW91c2UtPmFja3NfZGlzYWJsZV9jb21tYW5kKQotCQkJZmFpbGVkID0gMTsKKwkJCWZhaWxlZCA9IHRydWU7CiAJfSBlbHNlCi0JCXBzbW91c2UtPmFja3NfZGlzYWJsZV9jb21tYW5kID0gMTsKKwkJcHNtb3VzZS0+YWNrc19kaXNhYmxlX2NvbW1hbmQgPSB0cnVlOwogCiAvKgogICogUG9sbCB0aGUgbW91c2UuIElmIGl0IHdhcyByZXNldCB0aGUgcGFja2V0IHdpbGwgYmUgc2hvcnRlciB0aGFuCkBAIC0xMDMwLDcgKzEwNTQsNyBAQAogICovCiAJaWYgKCFmYWlsZWQpIHsKIAkJaWYgKHBzbW91c2UtPnBvbGwocHNtb3VzZSkpCi0JCQlmYWlsZWQgPSAxOworCQkJZmFpbGVkID0gdHJ1ZTsKIAkJZWxzZSB7CiAJCQlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0NNRF9NT0RFKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBwc21vdXNlLT5wa3RzaXplOyBpKyspIHsKQEAgLTEwNDAsNyArMTA2NCw3IEBACiAJCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKHJjICE9IFBTTU9VU0VfRlVMTF9QQUNLRVQpCi0JCQkJZmFpbGVkID0gMTsKKwkJCQlmYWlsZWQgPSB0cnVlOwogCQkJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9SRVNZTkNJTkcpOwogCQl9CiAJfQpAQCAtMTA1MSw3ICsxMDc1LDcgQEAKICAqLwogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJaWYgKCFwczJfY29tbWFuZCgmcHNtb3VzZS0+cHMyZGV2LCBOVUxMLCBQU01PVVNFX0NNRF9FTkFCTEUpKSB7Ci0JCQllbmFibGVkID0gMTsKKwkJCWVuYWJsZWQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIAkJbXNsZWVwKDIwMCk7CkBAIC0xMDYwLDcgKzEwODQsNyBAQAogCWlmICghZW5hYmxlZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwc21vdXNlLmM6IGZhaWxlZCB0byByZS1lbmFibGUgbW91c2Ugb24gJXNcbiIsCiAJCQlwc21vdXNlLT5wczJkZXYuc2VyaW8tPnBoeXMpOwotCQlmYWlsZWQgPSAxOworCQlmYWlsZWQgPSB0cnVlOwogCX0KIAogCWlmIChmYWlsZWQpIHsKQEAgLTExODcsNyArMTIxMSw4IEBACiAJCXBzbW91c2UtPnR5cGUgPSBwcm90by0+dHlwZTsKIAl9CiAJZWxzZQotCQlwc21vdXNlLT50eXBlID0gcHNtb3VzZV9leHRlbnNpb25zKHBzbW91c2UsIHBzbW91c2VfbWF4X3Byb3RvLCAxKTsKKwkJcHNtb3VzZS0+dHlwZSA9IHBzbW91c2VfZXh0ZW5zaW9ucyhwc21vdXNlLAorCQkJCQkJICAgcHNtb3VzZV9tYXhfcHJvdG8sIHRydWUpOwogCiAJLyoKIAkgKiBJZiBtb3VzZSdzIHBhY2tldCBzaXplIGlzIDMgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcG9sbGluZyB0aGUKQEAgLTEzNDIsOCArMTM2NywxMCBAQAogCQlpZiAocHNtb3VzZS0+cmVjb25uZWN0KHBzbW91c2UpKQogCQkJZ290byBvdXQ7CiAJfSBlbHNlIGlmIChwc21vdXNlX3Byb2JlKHBzbW91c2UpIDwgMCB8fAotCQkgICBwc21vdXNlLT50eXBlICE9IHBzbW91c2VfZXh0ZW5zaW9ucyhwc21vdXNlLCBwc21vdXNlX21heF9wcm90bywgMCkpCisJCSAgIHBzbW91c2UtPnR5cGUgIT0gcHNtb3VzZV9leHRlbnNpb25zKHBzbW91c2UsCisJCQkJCQlwc21vdXNlX21heF9wcm90bywgZmFsc2UpKSB7CiAJCWdvdG8gb3V0OworCX0KIAogCS8qIG9rLCB0aGUgZGV2aWNlIHR5cGUgKGFuZCBjYXBhYmlsaXRpZXMpIG1hdGNoIHRoZSBvbGQgb25lLAogCSAqIHdlIGNhbiBjb250aW51ZSB1c2luZyBpdCwgY29tcGxldGUgaW50aWFsaXphdGlvbgpAQCAtMTUyOCw3ICsxNTU1LDkgQEAKIAogCXdoaWxlIChzZXJpby0+Y2hpbGQpIHsKIAkJaWYgKCsrcmV0cnkgPiAzKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJwc21vdXNlOiBmYWlsZWQgdG8gZGVzdHJveSBjaGlsZCBwb3J0LCBwcm90b2NvbCBjaGFuZ2UgYWJvcnRlZC5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJwc21vdXNlOiBmYWlsZWQgdG8gZGVzdHJveSBjaGlsZCBwb3J0LCAiCisJCQkJInByb3RvY29sIGNoYW5nZSBhYm9ydGVkLlxuIik7CiAJCQlpbnB1dF9mcmVlX2RldmljZShuZXdfZGV2KTsKIAkJCXJldHVybiAtRUlPOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCmluZGV4IDU0ZWQyNjcuLmUwNTNiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCkBAIC00NywxMCArNDcsMTAgQEAKIAl1bnNpZ25lZCBjaGFyIHBrdGNudDsKIAl1bnNpZ25lZCBjaGFyIHBrdHNpemU7CiAJdW5zaWduZWQgY2hhciB0eXBlOwotCXVuc2lnbmVkIGNoYXIgYWNrc19kaXNhYmxlX2NvbW1hbmQ7CisJYm9vbCBhY2tzX2Rpc2FibGVfY29tbWFuZDsKIAl1bnNpZ25lZCBpbnQgbW9kZWw7CiAJdW5zaWduZWQgbG9uZyBsYXN0OwotCXVuc2lnbmVkIGxvbmcgb3V0X29mX3N5bmM7CisJdW5zaWduZWQgbG9uZyBvdXRfb2Zfc3luY19jbnQ7CiAJdW5zaWduZWQgbG9uZyBudW1fcmVzeW5jczsKIAllbnVtIHBzbW91c2Vfc3RhdGUgc3RhdGU7CiAJY2hhciBkZXZuYW1lWzY0XTsKQEAgLTYwLDcgKzYwLDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVzb2x1dGlvbjsKIAl1bnNpZ25lZCBpbnQgcmVzZXRhZnRlcjsKIAl1bnNpZ25lZCBpbnQgcmVzeW5jX3RpbWU7Ci0JdW5zaWduZWQgaW50IHNtYXJ0c2Nyb2xsOwkvKiBMb2dpdGVjaCBvbmx5ICovCisJYm9vbCBzbWFydHNjcm9sbDsJLyogTG9naXRlY2ggb25seSAqLwogCiAJcHNtb3VzZV9yZXRfdCAoKnByb3RvY29sX2hhbmRsZXIpKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKIAl2b2lkICgqc2V0X3JhdGUpKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB1bnNpZ25lZCBpbnQgcmF0ZSk7CkBAIC05MSw2ICs5MSw3IEBACiAJUFNNT1VTRV9DT1JUUk9OLAogCVBTTU9VU0VfSEdQSywKIAlQU01PVVNFX0VMQU5URUNILAorCVBTTU9VU0VfRlNQLAogCVBTTU9VU0VfQVVUTwkJLyogVGhpcyBvbmUgc2hvdWxkIGFsd2F5cyBiZSBsYXN0ICovCiB9OwogCkBAIC0xMDcsNyArMTA4LDcgQEAKIAlzc2l6ZV90ICgqc2hvdykoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsIGNoYXIgKmJ1Zik7CiAJc3NpemVfdCAoKnNldCkoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIHZvaWQgKmRhdGEsCiAJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci0JaW50IHByb3RlY3Q7CisJYm9vbCBwcm90ZWN0OwogfTsKICNkZWZpbmUgdG9fcHNtb3VzZV9hdHRyKGEpCWNvbnRhaW5lcl9vZigoYSksIHN0cnVjdCBwc21vdXNlX2F0dHJpYnV0ZSwgZGF0dHIpCiAKQEAgLTExNiw5ICsxMTcsNyBAQAogc3NpemVfdCBwc21vdXNlX2F0dHJfc2V0X2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIAotI2RlZmluZSBfX1BTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQsIF9wcm90ZWN0KQlcCi1zdGF0aWMgc3NpemVfdCBfc2hvdyhzdHJ1Y3QgcHNtb3VzZSAqLCB2b2lkICpkYXRhLCBjaGFyICopOwkJCVwKLXN0YXRpYyBzc2l6ZV90IF9zZXQoc3RydWN0IHBzbW91c2UgKiwgdm9pZCAqZGF0YSwgY29uc3QgY2hhciAqLCBzaXplX3QpOwlcCisjZGVmaW5lIF9fUFNNT1VTRV9ERUZJTkVfQVRUUl9WQVIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQsIF9wcm90ZWN0KQlcCiBzdGF0aWMgc3RydWN0IHBzbW91c2VfYXR0cmlidXRlIHBzbW91c2VfYXR0cl8jI19uYW1lID0gewkJCVwKIAkuZGF0dHIJPSB7CQkJCQkJCQlcCiAJCS5hdHRyCT0gewkJCQkJCQlcCkBAIC0xMzQsNyArMTMzLDIwIEBACiAJLnByb3RlY3QgPSBfcHJvdGVjdCwJCQkJCQkJXAogfQogCi0jZGVmaW5lIFBTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQpCVwKLQkJX19QU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0LCAxKQorI2RlZmluZSBfX1BTTU9VU0VfREVGSU5FX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3csIF9zZXQsIF9wcm90ZWN0KQlcCisJc3RhdGljIHNzaXplX3QgX3Nob3coc3RydWN0IHBzbW91c2UgKiwgdm9pZCAqLCBjaGFyICopOwkJCVwKKwlzdGF0aWMgc3NpemVfdCBfc2V0KHN0cnVjdCBwc21vdXNlICosIHZvaWQgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwlcCisJX19QU01PVVNFX0RFRklORV9BVFRSX1ZBUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCwgX3Byb3RlY3QpCisKKyNkZWZpbmUgUFNNT1VTRV9ERUZJTkVfQVRUUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgX3NldCkJCQlcCisJX19QU01PVVNFX0RFRklORV9BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zaG93LCBfc2V0LCB0cnVlKQorCisjZGVmaW5lIFBTTU9VU0VfREVGSU5FX1JPX0FUVFIoX25hbWUsIF9tb2RlLCBfZGF0YSwgX3Nob3cpCQkJXAorCXN0YXRpYyBzc2l6ZV90IF9zaG93KHN0cnVjdCBwc21vdXNlICosIHZvaWQgKiwgY2hhciAqKTsJCQlcCisJX19QU01PVVNFX0RFRklORV9BVFRSX1ZBUihfbmFtZSwgX21vZGUsIF9kYXRhLCBfc2hvdywgTlVMTCwgdHJ1ZSkKKworI2RlZmluZSBQU01PVVNFX0RFRklORV9XT19BVFRSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIF9zZXQpCQkJXAorCXN0YXRpYyBzc2l6ZV90IF9zZXQoc3RydWN0IHBzbW91c2UgKiwgdm9pZCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CVwKKwlfX1BTTU9VU0VfREVGSU5FX0FUVFJfVkFSKF9uYW1lLCBfbW9kZSwgX2RhdGEsIE5VTEwsIF9zZXQsIHRydWUpCiAKICNlbmRpZiAvKiBfUFNNT1VTRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3NlbnRlbGljLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3NlbnRlbGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlMmZjMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VudGVsaWMuYwpAQCAtMCwwICsxLDg2NyBAQAorLyotCisgKiBGaW5nZXIgU2Vuc2luZyBQYWQgUFMvMiBtb3VzZSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgQXNpYSBWaXRhbCBDb21wb25lbnRzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGFpLWh3YSBMaWFuZywgU2VudGVsaWMgQ29ycG9yYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiAgIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpYnBzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlvLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorCisjaW5jbHVkZSAicHNtb3VzZS5oIgorI2luY2x1ZGUgInNlbnRlbGljLmgiCisKKy8qCisgKiBUaW1lb3V0IGZvciBGU1AgUFMvMiBjb21tYW5kIG9ubHkgKGluIG1pbGxpc2Vjb25kcykuCisgKi8KKyNkZWZpbmUJRlNQX0NNRF9USU1FT1VUCQkyMDAKKyNkZWZpbmUJRlNQX0NNRF9USU1FT1VUMgkzMAorCisvKiogRHJpdmVyIHZlcnNpb24uICovCitzdGF0aWMgY29uc3QgY2hhciBmc3BfZHJ2X3ZlcltdID0gIjEuMC4wLUsiOworCisvKgorICogTWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIGJlaW5nIHNlbnQgdG8gRlNQIHdpbGwgbm90IGNvbmZsaWN0IHdpdGgKKyAqIHBvc3NpYmxlIHNhbXBsZSByYXRlIHZhbHVlcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZnNwX3Rlc3Rfc3dhcF9jbWQodW5zaWduZWQgY2hhciByZWdfdmFsKQoreworCXN3aXRjaCAocmVnX3ZhbCkgeworCWNhc2UgMTA6IGNhc2UgMjA6IGNhc2UgNDA6IGNhc2UgNjA6IGNhc2UgODA6IGNhc2UgMTAwOiBjYXNlIDIwMDoKKwkJLyoKKwkJICogVGhlIHJlcXVlc3RlZCB2YWx1ZSBiZWluZyBzZW50IHRvIEZTUCBtYXRjaGVkIHRvIHBvc3NpYmxlCisJCSAqIHNhbXBsZSByYXRlcywgc3dhcCB0aGUgZ2l2ZW4gdmFsdWUgc3VjaCB0aGF0IHRoZSBoYXJkd2FyZQorCQkgKiB3b3VsZG4ndCBnZXQgY29uZnVzZWQuCisJCSAqLworCQlyZXR1cm4gKHJlZ192YWwgPj4gNCkgfCAocmVnX3ZhbCA8PCA0KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmVnX3ZhbDsJLyogc3dhcCBpc24ndCBuZWNlc3NhcnkgKi8KKwl9Cit9CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWUgYmVpbmcgc2VudCB0byBGU1Agd2lsbCBub3QgY29uZmxpY3Qgd2l0aCBjZXJ0YWluCisgKiBjb21tYW5kcy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgZnNwX3Rlc3RfaW52ZXJ0X2NtZCh1bnNpZ25lZCBjaGFyIHJlZ192YWwpCit7CisJc3dpdGNoIChyZWdfdmFsKSB7CisJY2FzZSAweGU5OiBjYXNlIDB4ZWU6IGNhc2UgMHhmMjogY2FzZSAweGZmOgorCQkvKgorCQkgKiBUaGUgcmVxdWVzdGVkIHZhbHVlIGJlaW5nIHNlbnQgdG8gRlNQIG1hdGNoZWQgdG8gY2VydGFpbgorCQkgKiBjb21tYW5kcywgaW52ZXJzZSB0aGUgZ2l2ZW4gdmFsdWUgc3VjaCB0aGF0IHRoZSBoYXJkd2FyZQorCQkgKiB3b3VsZG4ndCBnZXQgY29uZnVzZWQuCisJCSAqLworCQlyZXR1cm4gfnJlZ192YWw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHJlZ192YWw7CS8qIGludmVyc2lvbiBpc24ndCBuZWNlc3NhcnkgKi8KKwl9Cit9CisKK3N0YXRpYyBpbnQgZnNwX3JlZ19yZWFkKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgcmVnX2FkZHIsIGludCAqcmVnX3ZhbCkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXVuc2lnbmVkIGNoYXIgcGFyYW1bM107CisJdW5zaWduZWQgY2hhciBhZGRyOworCWludCByYyA9IC0xOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHNodXQgb2ZmIHRoZSBkZXZpY2UgYW5kIHN3aXRjaCBpdCBpbnRvIGNvbW1hbmQKKwkgKiBtb2RlIHNvIHdlIGRvbid0IGNvbmZ1c2Ugb3VyIHByb3RvY29sIGhhbmRsZXIuIFdlIGRvbid0IG5lZWQKKwkgKiB0byBkbyB0aGF0IGZvciB3cml0ZXMgYmVjYXVzZSBzeXNmcyBzZXQgaGVscGVyIGRvZXMgdGhpcyBmb3IKKwkgKiB1cy4KKwkgKi8KKwlwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX0RJU0FCTEUpOworCXBzbW91c2Vfc2V0X3N0YXRlKHBzbW91c2UsIFBTTU9VU0VfQ01EX01PREUpOworCW11dGV4X2xvY2soJnBzMmRldi0+Y21kX211dGV4KTsKKworCWlmIChwczJfc2VuZGJ5dGUocHMyZGV2LCAweGYzLCBGU1BfQ01EX1RJTUVPVVQpIDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBzaG91bGQgcmV0dXJuIDB4ZmUocmVxdWVzdCBmb3IgcmVzZW5kaW5nKSAqLworCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NjYsIEZTUF9DTURfVElNRU9VVDIpOworCS8qIHNob3VsZCByZXR1cm4gMHhmYyhmYWlsZWQpICovCisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg4OCwgRlNQX0NNRF9USU1FT1VUMik7CisKKwlpZiAocHMyX3NlbmRieXRlKHBzMmRldiwgMHhmMywgRlNQX0NNRF9USU1FT1VUKSA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKChhZGRyID0gZnNwX3Rlc3RfaW52ZXJ0X2NtZChyZWdfYWRkcikpICE9IHJlZ19hZGRyKSB7CisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NjgsIEZTUF9DTURfVElNRU9VVDIpOworCX0gZWxzZSBpZiAoKGFkZHIgPSBmc3BfdGVzdF9zd2FwX2NtZChyZWdfYWRkcikpICE9IHJlZ19hZGRyKSB7CisJCS8qIHN3YXBwaW5nIGlzIHJlcXVpcmVkICovCisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4Y2MsIEZTUF9DTURfVElNRU9VVDIpOworCQkvKiBleHBlY3QgMHhmZSAqLworCX0gZWxzZSB7CisJCS8qIHN3YXBwaW5nIGlzbid0IG5lY2Vzc2FyeSAqLworCQlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDY2LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwkJLyogZXhwZWN0IDB4ZmUgKi8KKwl9CisJLyogc2hvdWxkIHJldHVybiAweGZjKGZhaWxlZCkgKi8KKwlwczJfc2VuZGJ5dGUocHMyZGV2LCBhZGRyLCBGU1BfQ01EX1RJTUVPVVQpOworCisJaWYgKF9fcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfR0VUSU5GTykgPCAwKQorCQlnb3RvIG91dDsKKworCSpyZWdfdmFsID0gcGFyYW1bMl07CisJcmMgPSAwOworCisgb3V0OgorCW11dGV4X3VubG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOworCXBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRU5BQkxFKTsKKwlwc21vdXNlX3NldF9zdGF0ZShwc21vdXNlLCBQU01PVVNFX0FDVElWQVRFRCk7CisJZGV2X2RiZygmcHMyZGV2LT5zZXJpby0+ZGV2LCAiUkVBRCBSRUc6IDB4JTAyeCBpcyAweCUwMnggKHJjID0gJWQpXG4iLAorCQlyZWdfYWRkciwgKnJlZ192YWwsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZnNwX3JlZ193cml0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHJlZ19hZGRyLCBpbnQgcmVnX3ZhbCkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXVuc2lnbmVkIGNoYXIgdjsKKwlpbnQgcmMgPSAtMTsKKworCW11dGV4X2xvY2soJnBzMmRldi0+Y21kX211dGV4KTsKKworCWlmIChwczJfc2VuZGJ5dGUocHMyZGV2LCAweGYzLCBGU1BfQ01EX1RJTUVPVVQpIDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoKHYgPSBmc3BfdGVzdF9pbnZlcnRfY21kKHJlZ19hZGRyKSkgIT0gcmVnX2FkZHIpIHsKKwkJLyogaW52ZXJzaW9uIGlzIHJlcXVpcmVkICovCisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NzQsIEZTUF9DTURfVElNRU9VVDIpOworCX0gZWxzZSB7CisJCWlmICgodiA9IGZzcF90ZXN0X3N3YXBfY21kKHJlZ19hZGRyKSkgIT0gcmVnX2FkZHIpIHsKKwkJCS8qIHN3YXBwaW5nIGlzIHJlcXVpcmVkICovCisJCQlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDc3LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHN3YXBwaW5nIGlzbid0IG5lY2Vzc2FyeSAqLworCQkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg1NSwgRlNQX0NNRF9USU1FT1VUMik7CisJCX0KKwl9CisJLyogd3JpdGUgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgaW4gY29ycmVjdCBvcmRlciAqLworCXBzMl9zZW5kYnl0ZShwczJkZXYsIHYsIEZTUF9DTURfVElNRU9VVDIpOworCisJaWYgKHBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ZjMsIEZTUF9DTURfVElNRU9VVCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKHYgPSBmc3BfdGVzdF9pbnZlcnRfY21kKHJlZ192YWwpKSAhPSByZWdfdmFsKSB7CisJCS8qIGludmVyc2lvbiBpcyByZXF1aXJlZCAqLworCQlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDQ3LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwl9IGVsc2UgaWYgKCh2ID0gZnNwX3Rlc3Rfc3dhcF9jbWQocmVnX3ZhbCkpICE9IHJlZ192YWwpIHsKKwkJLyogc3dhcHBpbmcgaXMgcmVxdWlyZWQgKi8KKwkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg0NCwgRlNQX0NNRF9USU1FT1VUMik7CisJfSBlbHNlIHsKKwkJLyogc3dhcHBpbmcgaXNuJ3QgbmVjZXNzYXJ5ICovCisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4MzMsIEZTUF9DTURfVElNRU9VVDIpOworCX0KKworCS8qIHdyaXRlIHRoZSByZWdpc3RlciB2YWx1ZSBpbiBjb3JyZWN0IG9yZGVyICovCisJcHMyX3NlbmRieXRlKHBzMmRldiwgdiwgRlNQX0NNRF9USU1FT1VUMik7CisJcmMgPSAwOworCisgb3V0OgorCW11dGV4X3VubG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOworCWRldl9kYmcoJnBzMmRldi0+c2VyaW8tPmRldiwgIldSSVRFIFJFRzogMHglMDJ4IHRvIDB4JTAyeCAocmMgPSAlZClcbiIsCisJCXJlZ19hZGRyLCByZWdfdmFsLCByYyk7CisJcmV0dXJuIHJjOworfQorCisvKiBFbmFibGUgcmVnaXN0ZXIgY2xvY2sgZ2F0aW5nIGZvciB3cml0aW5nIGNlcnRhaW4gcmVnaXN0ZXJzICovCitzdGF0aWMgaW50IGZzcF9yZWdfd3JpdGVfZW5hYmxlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgdiwgbnY7CisKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIEZTUF9SRUdfU1lTQ1RMMSwgJnYpID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZW5hYmxlKQorCQludiA9IHYgfCBGU1BfQklUX0VOX1JFR19DTEs7CisJZWxzZQorCQludiA9IHYgJiB+RlNQX0JJVF9FTl9SRUdfQ0xLOworCisJLyogb25seSB3cml0ZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobnYgIT0gdikKKwkJaWYgKGZzcF9yZWdfd3JpdGUocHNtb3VzZSwgRlNQX1JFR19TWVNDVEwxLCBudikgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc3BfcGFnZV9yZWdfcmVhZChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50ICpyZWdfdmFsKQoreworCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZwc21vdXNlLT5wczJkZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVszXTsKKwlpbnQgcmMgPSAtMTsKKworCXBzMl9jb21tYW5kKHBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfRElTQUJMRSk7CisJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9DTURfTU9ERSk7CisJbXV0ZXhfbG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOworCisJaWYgKHBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ZjMsIEZTUF9DTURfVElNRU9VVCkgPCAwKQorCQlnb3RvIG91dDsKKworCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NjYsIEZTUF9DTURfVElNRU9VVDIpOworCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ODgsIEZTUF9DTURfVElNRU9VVDIpOworCisJaWYgKHBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ZjMsIEZTUF9DTURfVElNRU9VVCkgPCAwKQorCQlnb3RvIG91dDsKKworCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ODMsIEZTUF9DTURfVElNRU9VVDIpOworCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4ODgsIEZTUF9DTURfVElNRU9VVDIpOworCisJLyogZ2V0IHRoZSByZXR1cm5lZCByZXN1bHQgKi8KKwlpZiAoX19wczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9HRVRJTkZPKSkKKwkJZ290byBvdXQ7CisKKwkqcmVnX3ZhbCA9IHBhcmFtWzJdOworCXJjID0gMDsKKworIG91dDoKKwltdXRleF91bmxvY2soJnBzMmRldi0+Y21kX211dGV4KTsKKwlwczJfY29tbWFuZChwczJkZXYsIE5VTEwsIFBTTU9VU0VfQ01EX0VOQUJMRSk7CisJcHNtb3VzZV9zZXRfc3RhdGUocHNtb3VzZSwgUFNNT1VTRV9BQ1RJVkFURUQpOworCWRldl9kYmcoJnBzMmRldi0+c2VyaW8tPmRldiwgIlJFQUQgUEFHRSBSRUc6IDB4JTAyeCAocmMgPSAlZClcbiIsCisJCSpyZWdfdmFsLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGZzcF9wYWdlX3JlZ193cml0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHJlZ192YWwpCit7CisJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHY7CisJaW50IHJjID0gLTE7CisKKwltdXRleF9sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CisKKwlpZiAocHMyX3NlbmRieXRlKHBzMmRldiwgMHhmMywgRlNQX0NNRF9USU1FT1VUKSA8IDApCisJCWdvdG8gb3V0OworCisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHgzOCwgRlNQX0NNRF9USU1FT1VUMik7CisJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg4OCwgRlNQX0NNRF9USU1FT1VUMik7CisKKwlpZiAocHMyX3NlbmRieXRlKHBzMmRldiwgMHhmMywgRlNQX0NNRF9USU1FT1VUKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICgodiA9IGZzcF90ZXN0X2ludmVydF9jbWQocmVnX3ZhbCkpICE9IHJlZ192YWwpIHsKKwkJcHMyX3NlbmRieXRlKHBzMmRldiwgMHg0NywgRlNQX0NNRF9USU1FT1VUMik7CisJfSBlbHNlIGlmICgodiA9IGZzcF90ZXN0X3N3YXBfY21kKHJlZ192YWwpKSAhPSByZWdfdmFsKSB7CisJCS8qIHN3YXBwaW5nIGlzIHJlcXVpcmVkICovCisJCXBzMl9zZW5kYnl0ZShwczJkZXYsIDB4NDQsIEZTUF9DTURfVElNRU9VVDIpOworCX0gZWxzZSB7CisJCS8qIHN3YXBwaW5nIGlzbid0IG5lY2Vzc2FyeSAqLworCQlwczJfc2VuZGJ5dGUocHMyZGV2LCAweDMzLCBGU1BfQ01EX1RJTUVPVVQyKTsKKwl9CisKKwlwczJfc2VuZGJ5dGUocHMyZGV2LCB2LCBGU1BfQ01EX1RJTUVPVVQyKTsKKwlyYyA9IDA7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CisJZGV2X2RiZygmcHMyZGV2LT5zZXJpby0+ZGV2LCAiV1JJVEUgUEFHRSBSRUc6IHRvIDB4JTAyeCAocmMgPSAlZClcbiIsCisJCXJlZ192YWwsIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZnNwX2dldF92ZXJzaW9uKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgKnZlcnNpb24pCit7CisJaWYgKGZzcF9yZWdfcmVhZChwc21vdXNlLCBGU1BfUkVHX1ZFUlNJT04sIHZlcnNpb24pKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzcF9nZXRfcmV2aXNpb24oc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCAqcmV2KQoreworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgRlNQX1JFR19SRVZJU0lPTiwgcmV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc3BfZ2V0X2J1dHRvbnMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGludCAqYnRuKQoreworCXN0YXRpYyBjb25zdCBpbnQgYnV0dG9uc1tdID0geworCQkweDE2LCAvKiBMZWZ0L01pZGRsZS9SaWdodC9Gb3J3YXJkL0JhY2t3YXJkICYgU2Nyb2xsIFVwL0Rvd24gKi8KKwkJMHgwNiwgLyogTGVmdC9NaWRkbGUvUmlnaHQgJiBTY3JvbGwgVXAvRG93bi9SaWdodC9MZWZ0ICovCisJCTB4MDQsIC8qIExlZnQvTWlkZGxlL1JpZ2h0ICYgU2Nyb2xsIFVwL0Rvd24gKi8KKwkJMHgwMiwgLyogTGVmdC9NaWRkbGUvUmlnaHQgKi8KKwl9OworCWludCB2YWw7CisKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIEZTUF9SRUdfVE1PRF9TVEFUVVMxLCAmdmFsKSA9PSAtMSkKKwkJcmV0dXJuIC1FSU87CisKKwkqYnRuID0gYnV0dG9uc1sodmFsICYgMHgzMCkgPj4gNF07CisJcmV0dXJuIDA7Cit9CisKKy8qIEVuYWJsZSBvbi1wYWQgY29tbWFuZCB0YWcgb3V0cHV0ICovCitzdGF0aWMgaW50IGZzcF9vcGNfdGFnX2VuYWJsZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBlbmFibGUpCit7CisJaW50IHYsIG52OworCWludCByZXMgPSAwOworCisJaWYgKGZzcF9yZWdfcmVhZChwc21vdXNlLCBGU1BfUkVHX09QQ19RRE9XTiwgJnYpID09IC0xKSB7CisJCWRldl9lcnIoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LCAiVW5hYmxlIGdldCBPUEMgc3RhdGUuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGVuYWJsZSkKKwkJbnYgPSB2IHwgRlNQX0JJVF9FTl9PUENfVEFHOworCWVsc2UKKwkJbnYgPSB2ICYgfkZTUF9CSVRfRU5fT1BDX1RBRzsKKworCS8qIG9ubHkgd3JpdGUgaWYgbmVjZXNzYXJ5ICovCisJaWYgKG52ICE9IHYpIHsKKwkJZnNwX3JlZ193cml0ZV9lbmFibGUocHNtb3VzZSwgdHJ1ZSk7CisJCXJlcyA9IGZzcF9yZWdfd3JpdGUocHNtb3VzZSwgRlNQX1JFR19PUENfUURPV04sIG52KTsKKwkJZnNwX3JlZ193cml0ZV9lbmFibGUocHNtb3VzZSwgZmFsc2UpOworCX0KKworCWlmIChyZXMgIT0gMCkgeworCQlkZXZfZXJyKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldiwKKwkJCSJVbmFibGUgdG8gZW5hYmxlIE9QQyB0YWcuXG4iKTsKKwkJcmVzID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IGZzcF9vbnBhZF92c2NyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZnNwX2RhdGEgKnBhZCA9IHBzbW91c2UtPnByaXZhdGU7CisJaW50IHZhbDsKKworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgRlNQX1JFR19PTlBBRF9DVEwsICZ2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCXBhZC0+dnNjcm9sbCA9IGVuYWJsZTsKKworCWlmIChlbmFibGUpCisJCXZhbCB8PSAoRlNQX0JJVF9GSVhfVlNDUiB8IEZTUF9CSVRfT05QQURfRU5BQkxFKTsKKwllbHNlCisJCXZhbCAmPSB+RlNQX0JJVF9GSVhfVlNDUjsKKworCWlmIChmc3BfcmVnX3dyaXRlKHBzbW91c2UsIEZTUF9SRUdfT05QQURfQ1RMLCB2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzcF9vbnBhZF9oc2NyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZnNwX2RhdGEgKnBhZCA9IHBzbW91c2UtPnByaXZhdGU7CisJaW50IHZhbCwgdjI7CisKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIEZTUF9SRUdfT05QQURfQ1RMLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIEZTUF9SRUdfU1lTQ1RMNSwgJnYyKSkKKwkJcmV0dXJuIC1FSU87CisKKwlwYWQtPmhzY3JvbGwgPSBlbmFibGU7CisKKwlpZiAoZW5hYmxlKSB7CisJCXZhbCB8PSAoRlNQX0JJVF9GSVhfSFNDUiB8IEZTUF9CSVRfT05QQURfRU5BQkxFKTsKKwkJdjIgfD0gRlNQX0JJVF9FTl9NU0lENjsKKwl9IGVsc2UgeworCQl2YWwgJj0gfkZTUF9CSVRfRklYX0hTQ1I7CisJCXYyICY9IH4oRlNQX0JJVF9FTl9NU0lENiB8IEZTUF9CSVRfRU5fTVNJRDcgfCBGU1BfQklUX0VOX01TSUQ4KTsKKwl9CisKKwlpZiAoZnNwX3JlZ193cml0ZShwc21vdXNlLCBGU1BfUkVHX09OUEFEX0NUTCwgdmFsKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiByZWNvbmZpZ3VyZSBob3Jpem9udGFsIHNjcm9sbGluZyBwYWNrZXQgb3V0cHV0ICovCisJaWYgKGZzcF9yZWdfd3JpdGUocHNtb3VzZSwgRlNQX1JFR19TWVNDVEw1LCB2MikpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSBkZXZpY2Ugc3BlY2lmaWMgaW5pdGlhbCBwYXJhbWV0ZXJzLgorICoKKyAqIGV4OiAweGFiIDB4Y2QgLSB3cml0ZSBveGNkIGludG8gcmVnaXN0ZXIgMHhhYgorICovCitzdGF0aWMgc3NpemVfdCBmc3BfYXR0cl9zZXRfc2V0cmVnKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgcmVnLCB2YWw7CisJY2hhciAqcmVzdDsKKwlzc2l6ZV90IHJldHZhbDsKKworCXJlZyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJnJlc3QsIDE2KTsKKwlpZiAocmVzdCA9PSBidWYgfHwgKnJlc3QgIT0gJyAnIHx8IHJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKHJlc3QgKyAxLCAxNiwgJnZhbCkgfHwgdmFsID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZnNwX3JlZ193cml0ZV9lbmFibGUocHNtb3VzZSwgdHJ1ZSkpCisJCXJldHVybiAtRUlPOworCisJcmV0dmFsID0gZnNwX3JlZ193cml0ZShwc21vdXNlLCByZWcsIHZhbCkgPCAwID8gLUVJTyA6IGNvdW50OworCisJZnNwX3JlZ193cml0ZV9lbmFibGUocHNtb3VzZSwgZmFsc2UpOworCisJcmV0dXJuIGNvdW50OworfQorCitQU01PVVNFX0RFRklORV9XT19BVFRSKHNldHJlZywgU19JV1VTUiwgTlVMTCwgZnNwX2F0dHJfc2V0X3NldHJlZyk7CisKK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3Nob3dfZ2V0cmVnKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQl2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJc3RydWN0IGZzcF9kYXRhICpwYWQgPSBwc21vdXNlLT5wcml2YXRlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJTAyeCUwMnhcbiIsIHBhZC0+bGFzdF9yZWcsIHBhZC0+bGFzdF92YWwpOworfQorCisvKgorICogUmVhZCBhIHJlZ2lzdGVyIGZyb20gZGV2aWNlLgorICoKKyAqIGV4OiAweGFiIC0tIHJlYWQgY29udGVudCBmcm9tIHJlZ2lzdGVyIDB4YWIKKyAqLworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2V0X2dldHJlZyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZzcF9kYXRhICpwYWQgPSBwc21vdXNlLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgcmVnOworCWludCB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxNiwgJnJlZykgfHwgcmVnID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZnNwX3JlZ19yZWFkKHBzbW91c2UsIHJlZywgJnZhbCkpCisJCXJldHVybiAtRUlPOworCisJcGFkLT5sYXN0X3JlZyA9IHJlZzsKKwlwYWQtPmxhc3RfdmFsID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitQU01PVVNFX0RFRklORV9BVFRSKGdldHJlZywgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCQlmc3BfYXR0cl9zaG93X2dldHJlZywgZnNwX2F0dHJfc2V0X2dldHJlZyk7CisKK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3Nob3dfcGFnZXJlZyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKKwkJCQkJdm9pZCAqZGF0YSwgY2hhciAqYnVmKQoreworCWludCB2YWwgPSAwOworCisJaWYgKGZzcF9wYWdlX3JlZ19yZWFkKHBzbW91c2UsICZ2YWwpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwMnhcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3NldF9wYWdlcmVnKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDE2LCAmdmFsKSB8fCB2YWwgPiAweGZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmc3BfcGFnZV9yZWdfd3JpdGUocHNtb3VzZSwgdmFsKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK1BTTU9VU0VfREVGSU5FX0FUVFIocGFnZSwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCQlmc3BfYXR0cl9zaG93X3BhZ2VyZWcsIGZzcF9hdHRyX3NldF9wYWdlcmVnKTsKKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2hvd192c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQl2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJc3RydWN0IGZzcF9kYXRhICpwYWQgPSBwc21vdXNlLT5wcml2YXRlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBhZC0+dnNjcm9sbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3NldF92c2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSB8fCB2YWwgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZzcF9vbnBhZF92c2NyKHBzbW91c2UsIHZhbCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK1BTTU9VU0VfREVGSU5FX0FUVFIodnNjcm9sbCwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCQlmc3BfYXR0cl9zaG93X3ZzY3JvbGwsIGZzcF9hdHRyX3NldF92c2Nyb2xsKTsKKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2hvd19oc2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQl2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJc3RydWN0IGZzcF9kYXRhICpwYWQgPSBwc21vdXNlLT5wcml2YXRlOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBhZC0+aHNjcm9sbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3NldF9oc2Nyb2xsKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCB2b2lkICpkYXRhLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSB8fCB2YWwgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZzcF9vbnBhZF9oc2NyKHBzbW91c2UsIHZhbCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK1BTTU9VU0VfREVGSU5FX0FUVFIoaHNjcm9sbCwgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCisJCQlmc3BfYXR0cl9zaG93X2hzY3JvbGwsIGZzcF9hdHRyX3NldF9oc2Nyb2xsKTsKKworc3RhdGljIHNzaXplX3QgZnNwX2F0dHJfc2hvd19mbGFncyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKKwkJCQkJdm9pZCAqZGF0YSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmc3BfZGF0YSAqcGFkID0gcHNtb3VzZS0+cHJpdmF0ZTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVjXG4iLAorCQkJcGFkLT5mbGFncyAmIEZTUERSVl9GTEFHX0VOX09QQyA/ICdDJyA6ICdjJyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3NldF9mbGFncyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdm9pZCAqZGF0YSwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGZzcF9kYXRhICpwYWQgPSBwc21vdXNlLT5wcml2YXRlOworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3dpdGNoIChidWZbaV0pIHsKKwkJY2FzZSAnQyc6CisJCQlwYWQtPmZsYWdzIHw9IEZTUERSVl9GTEFHX0VOX09QQzsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXBhZC0+ZmxhZ3MgJj0gfkZTUERSVl9GTEFHX0VOX09QQzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIGNvdW50OworfQorCitQU01PVVNFX0RFRklORV9BVFRSKGZsYWdzLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwKKwkJCWZzcF9hdHRyX3Nob3dfZmxhZ3MsIGZzcF9hdHRyX3NldF9mbGFncyk7CisKK3N0YXRpYyBzc2l6ZV90IGZzcF9hdHRyX3Nob3dfdmVyKHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQl2b2lkICpkYXRhLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiU2VudGVsaWMgRlNQIGtlcm5lbCBtb2R1bGUgJXNcbiIsIGZzcF9kcnZfdmVyKTsKK30KKworUFNNT1VTRV9ERUZJTkVfUk9fQVRUUih2ZXIsIFNfSVJVR08sIE5VTEwsIGZzcF9hdHRyX3Nob3dfdmVyKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZzcF9hdHRyaWJ1dGVzW10gPSB7CisJJnBzbW91c2VfYXR0cl9zZXRyZWcuZGF0dHIuYXR0ciwKKwkmcHNtb3VzZV9hdHRyX2dldHJlZy5kYXR0ci5hdHRyLAorCSZwc21vdXNlX2F0dHJfcGFnZS5kYXR0ci5hdHRyLAorCSZwc21vdXNlX2F0dHJfdnNjcm9sbC5kYXR0ci5hdHRyLAorCSZwc21vdXNlX2F0dHJfaHNjcm9sbC5kYXR0ci5hdHRyLAorCSZwc21vdXNlX2F0dHJfZmxhZ3MuZGF0dHIuYXR0ciwKKwkmcHNtb3VzZV9hdHRyX3Zlci5kYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGZzcF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gZnNwX2F0dHJpYnV0ZXMsCit9OworCisjaWZkZWYgRlNQX0RFQlVHCitzdGF0aWMgdm9pZCBmc3BfcGFja2V0X2RlYnVnKHVuc2lnbmVkIGNoYXIgcGFja2V0W10pCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBwczJfcGFja2V0X2NudDsKKwlzdGF0aWMgdW5zaWduZWQgaW50IHBzMl9sYXN0X3NlY29uZDsKKwl1bnNpZ25lZCBpbnQgamlmZmllc19tc2VjOworCisJcHMyX3BhY2tldF9jbnQrKzsKKwlqaWZmaWVzX21zZWMgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOworCXByaW50ayhLRVJOX0RFQlVHICIlMDhkbXMgUFMvMiBwYWNrZXRzOiAlMDJ4LCAlMDJ4LCAlMDJ4LCAlMDJ4XG4iLAorCQlqaWZmaWVzX21zZWMsIHBhY2tldFswXSwgcGFja2V0WzFdLCBwYWNrZXRbMl0sIHBhY2tldFszXSk7CisKKwlpZiAoamlmZmllc19tc2VjIC0gcHMyX2xhc3Rfc2Vjb25kID4gMTAwMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiUFMvMiBwYWNrZXRzL3NlYyA9ICVkXG4iLCBwczJfcGFja2V0X2NudCk7CisJCXBzMl9wYWNrZXRfY250ID0gMDsKKwkJcHMyX2xhc3Rfc2Vjb25kID0gamlmZmllc19tc2VjOworCX0KK30KKyNlbHNlCitzdGF0aWMgdm9pZCBmc3BfcGFja2V0X2RlYnVnKHVuc2lnbmVkIGNoYXIgcGFja2V0W10pCit7Cit9CisjZW5kaWYKKworc3RhdGljIHBzbW91c2VfcmV0X3QgZnNwX3Byb2Nlc3NfYnl0ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwc21vdXNlLT5kZXY7CisJc3RydWN0IGZzcF9kYXRhICphZCA9IHBzbW91c2UtPnByaXZhdGU7CisJdW5zaWduZWQgY2hhciAqcGFja2V0ID0gcHNtb3VzZS0+cGFja2V0OworCXVuc2lnbmVkIGNoYXIgYnV0dG9uX3N0YXR1cyA9IDAsIGxzY3JvbGwgPSAwLCByc2Nyb2xsID0gMDsKKwlpbnQgcmVsX3gsIHJlbF95OworCisJaWYgKHBzbW91c2UtPnBrdGNudCA8IDQpCisJCXJldHVybiBQU01PVVNFX0dPT0RfREFUQTsKKworCS8qCisJICogRnVsbCBwYWNrZXQgYWNjdW11bGF0ZWQsIHByb2Nlc3MgaXQKKwkgKi8KKworCXN3aXRjaCAocHNtb3VzZS0+cGFja2V0WzBdID4+IEZTUF9QS1RfVFlQRV9TSElGVCkgeworCWNhc2UgRlNQX1BLVF9UWVBFX0FCUzoKKwkJZGV2X3dhcm4oJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJICJVbmV4cGVjdGVkIGFic29sdXRlIG1vZGUgcGFja2V0LCBpZ25vcmVkLlxuIik7CisJCWJyZWFrOworCisJY2FzZSBGU1BfUEtUX1RZUEVfTk9STUFMX09QQzoKKwkJLyogb24tcGFkIGNsaWNrLCBmaWx0ZXIgaXQgaWYgbmVjZXNzYXJ5ICovCisJCWlmICgoYWQtPmZsYWdzICYgRlNQRFJWX0ZMQUdfRU5fT1BDKSAhPSBGU1BEUlZfRkxBR19FTl9PUEMpCisJCQlwYWNrZXRbMF0gJj0gfkJJVCgwKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIEZTUF9QS1RfVFlQRV9OT1JNQUw6CisJCS8qIG5vcm1hbCBwYWNrZXQgKi8KKwkJLyogc3BlY2lhbCBwYWNrZXQgZGF0YSB0cmFuc2xhdGlvbiBmcm9tIG9uLXBhZCBwYWNrZXRzICovCisJCWlmIChwYWNrZXRbM10gIT0gMCkgeworCQkJaWYgKHBhY2tldFszXSAmIEJJVCgwKSkKKwkJCQlidXR0b25fc3RhdHVzIHw9IDB4MDE7CS8qIHdoZWVsIGRvd24gKi8KKwkJCWlmIChwYWNrZXRbM10gJiBCSVQoMSkpCisJCQkJYnV0dG9uX3N0YXR1cyB8PSAweDBmOwkvKiB3aGVlbCB1cCAqLworCQkJaWYgKHBhY2tldFszXSAmIEJJVCgyKSkKKwkJCQlidXR0b25fc3RhdHVzIHw9IEJJVCg1KTsvKiBob3Jpem9udGFsIGxlZnQgKi8KKwkJCWlmIChwYWNrZXRbM10gJiBCSVQoMykpCisJCQkJYnV0dG9uX3N0YXR1cyB8PSBCSVQoNCk7LyogaG9yaXpvbnRhbCByaWdodCAqLworCQkJLyogcHVzaCBiYWNrIHRvIHBhY2tldCBxdWV1ZSAqLworCQkJaWYgKGJ1dHRvbl9zdGF0dXMgIT0gMCkKKwkJCQlwYWNrZXRbM10gPSBidXR0b25fc3RhdHVzOworCQkJcnNjcm9sbCA9IChwYWNrZXRbM10gPj4gNCkgJiAxOworCQkJbHNjcm9sbCA9IChwYWNrZXRbM10gPj4gNSkgJiAxOworCQl9CisJCS8qCisJCSAqIFByb2Nlc3Npbmcgd2hlZWwgdXAvZG93biBhbmQgZXh0cmEgYnV0dG9uIGV2ZW50cworCQkgKi8KKwkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwKKwkJCQkgKGludCkocGFja2V0WzNdICYgOCkgLSAoaW50KShwYWNrZXRbM10gJiA3KSk7CisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfSFdIRUVMLCBsc2Nyb2xsIC0gcnNjcm9sbCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fQkFDSywgbHNjcm9sbCk7CisJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fRk9SV0FSRCwgcnNjcm9sbCk7CisKKwkJLyoKKwkJICogU3RhbmRhcmQgUFMvMiBNb3VzZQorCQkgKi8KKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCBwYWNrZXRbMF0gJiAxKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIChwYWNrZXRbMF0gPj4gMikgJiAxKTsKKwkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgKHBhY2tldFswXSA+PiAxKSAmIDEpOworCisJCXJlbF94ID0gcGFja2V0WzFdID8gKGludClwYWNrZXRbMV0gLSAoaW50KSgocGFja2V0WzBdIDw8IDQpICYgMHgxMDApIDogMDsKKwkJcmVsX3kgPSBwYWNrZXRbMl0gPyAoaW50KSgocGFja2V0WzBdIDw8IDMpICYgMHgxMDApIC0gKGludClwYWNrZXRbMl0gOiAwOworCisJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgcmVsX3gpOworCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIHJlbF95KTsKKwkJYnJlYWs7CisJfQorCisJaW5wdXRfc3luYyhkZXYpOworCisJZnNwX3BhY2tldF9kZWJ1ZyhwYWNrZXQpOworCisJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7Cit9CisKK3N0YXRpYyBpbnQgZnNwX2FjdGl2YXRlX3Byb3RvY29sKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBmc3BfZGF0YSAqcGFkID0gcHNtb3VzZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXVuc2lnbmVkIGNoYXIgcGFyYW1bMl07CisJaW50IHZhbDsKKworCS8qCisJICogU3RhbmRhcmQgcHJvY2VkdXJlIHRvIGVudGVyIEZTUCBJbnRlbGxpbW91c2UgbW9kZQorCSAqIChzY3JvbGxpbmcgd2hlZWwsIDR0aCBhbmQgNXRoIGJ1dHRvbnMpCisJICovCisJcGFyYW1bMF0gPSAyMDA7CisJcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkFURSk7CisJcGFyYW1bMF0gPSAyMDA7CisJcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkFURSk7CisJcGFyYW1bMF0gPSAgODA7CisJcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkFURSk7CisKKwlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9HRVRJRCk7CisJaWYgKHBhcmFtWzBdICE9IDB4MDQpIHsKKwkJZGV2X2VycigmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkiVW5hYmxlIHRvIGVuYWJsZSA0IGJ5dGVzIHBhY2tldCBmb3JtYXQuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGZzcF9yZWdfcmVhZChwc21vdXNlLCBGU1BfUkVHX1NZU0NUTDUsICZ2YWwpKSB7CisJCWRldl9lcnIoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJIlVuYWJsZSB0byByZWFkIFNZU0NUTDUgcmVnaXN0ZXIuXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJdmFsICY9IH4oRlNQX0JJVF9FTl9NU0lENyB8IEZTUF9CSVRfRU5fTVNJRDggfCBGU1BfQklUX0VOX0FVVE9fTVNJRDgpOworCS8qIEVuc3VyZSB3ZSBhcmUgbm90IGluIGFic29sdXRlIG1vZGUgKi8KKwl2YWwgJj0gfkZTUF9CSVRfRU5fUEtUX0cwOworCWlmIChwYWQtPmJ1dHRvbnMgPT0gMHgwNikgeworCQkvKiBMZWZ0L01pZGRsZS9SaWdodCAmIFNjcm9sbCBVcC9Eb3duL1JpZ2h0L0xlZnQgKi8KKwkJdmFsIHw9IEZTUF9CSVRfRU5fTVNJRDY7CisJfQorCisJaWYgKGZzcF9yZWdfd3JpdGUocHNtb3VzZSwgRlNQX1JFR19TWVNDVEw1LCB2YWwpKSB7CisJCWRldl9lcnIoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJIlVuYWJsZSB0byBzZXQgdXAgcmVxdWlyZWQgbW9kZSBiaXRzLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qCisJICogRW5hYmxlIE9QQyB0YWdzIHN1Y2ggdGhhdCBkcml2ZXIgY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbgorCSAqIG9uLXBhZCBhbmQgcmVhbCBidXR0b24gY2xpY2sKKwkgKi8KKwlpZiAoZnNwX29wY190YWdfZW5hYmxlKHBzbW91c2UsIHRydWUpKQorCQlkZXZfd2FybigmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYsCisJCQkgIkZhaWxlZCB0byBlbmFibGUgT1BDIHRhZyBtb2RlLlxuIik7CisKKwkvKiBFbmFibGUgb24tcGFkIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNjcm9sbGluZyAqLworCWZzcF9vbnBhZF92c2NyKHBzbW91c2UsIHRydWUpOworCWZzcF9vbnBhZF9oc2NyKHBzbW91c2UsIHRydWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmc3BfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQoreworCWludCBpZDsKKworCWlmIChmc3BfcmVnX3JlYWQocHNtb3VzZSwgRlNQX1JFR19ERVZJQ0VfSUQsICZpZCkpCisJCXJldHVybiAtRUlPOworCisJaWYgKGlkICE9IDB4MDEpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHNldF9wcm9wZXJ0aWVzKSB7CisJCXBzbW91c2UtPnZlbmRvciA9ICJTZW50ZWxpYyI7CisJCXBzbW91c2UtPm5hbWUgPSAiRmluZ2VyU2Vuc2luZ1BhZCI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZzcF9yZXNldChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlmc3Bfb3BjX3RhZ19lbmFibGUocHNtb3VzZSwgZmFsc2UpOworCWZzcF9vbnBhZF92c2NyKHBzbW91c2UsIGZhbHNlKTsKKwlmc3Bfb25wYWRfaHNjcihwc21vdXNlLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZzcF9kaXNjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYua29iaiwKKwkJCSAgICZmc3BfYXR0cmlidXRlX2dyb3VwKTsKKworCWZzcF9yZXNldChwc21vdXNlKTsKKwlrZnJlZShwc21vdXNlLT5wcml2YXRlKTsKK30KKworc3RhdGljIGludCBmc3BfcmVjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCWludCB2ZXJzaW9uOworCisJaWYgKGZzcF9kZXRlY3QocHNtb3VzZSwgMCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGZzcF9nZXRfdmVyc2lvbihwc21vdXNlLCAmdmVyc2lvbikpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGZzcF9hY3RpdmF0ZV9wcm90b2NvbChwc21vdXNlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZzcF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBmc3BfZGF0YSAqcHJpdjsKKwlpbnQgdmVyLCByZXYsIGJ1dHRvbnM7CisJaW50IGVycm9yOworCisJaWYgKGZzcF9nZXRfdmVyc2lvbihwc21vdXNlLCAmdmVyKSB8fAorCSAgICBmc3BfZ2V0X3JldmlzaW9uKHBzbW91c2UsICZyZXYpIHx8CisJICAgIGZzcF9nZXRfYnV0dG9ucyhwc21vdXNlLCAmYnV0dG9ucykpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTworCQkiRmluZ2VyIFNlbnNpbmcgUGFkLCBodzogJWQuJWQuJWQsIHN3OiAlcywgYnV0dG9uczogJWRcbiIsCisJCXZlciA+PiA0LCB2ZXIgJiAweDBGLCByZXYsIGZzcF9kcnZfdmVyLCBidXR0b25zICYgNyk7CisKKwlwc21vdXNlLT5wcml2YXRlID0gcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmc3BfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT52ZXIgPSB2ZXI7CisJcHJpdi0+cmV2ID0gcmV2OworCXByaXYtPmJ1dHRvbnMgPSBidXR0b25zOworCisJLyogZW5hYmxlIG9uLXBhZCBjbGljayBieSBkZWZhdWx0ICovCisJcHJpdi0+ZmxhZ3MgfD0gRlNQRFJWX0ZMQUdfRU5fT1BDOworCisJLyogU2V0IHVwIHZhcmlvdXMgc3VwcG9ydGVkIGlucHV0IGV2ZW50IGJpdHMgKi8KKwlfX3NldF9iaXQoQlROX0JBQ0ssIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwlfX3NldF9iaXQoQlROX0ZPUldBUkQsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKKwlfX3NldF9iaXQoUkVMX1dIRUVMLCBwc21vdXNlLT5kZXYtPnJlbGJpdCk7CisJX19zZXRfYml0KFJFTF9IV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKKworCXBzbW91c2UtPnByb3RvY29sX2hhbmRsZXIgPSBmc3BfcHJvY2Vzc19ieXRlOworCXBzbW91c2UtPmRpc2Nvbm5lY3QgPSBmc3BfZGlzY29ubmVjdDsKKwlwc21vdXNlLT5yZWNvbm5lY3QgPSBmc3BfcmVjb25uZWN0OworCXBzbW91c2UtPmNsZWFudXAgPSBmc3BfcmVzZXQ7CisJcHNtb3VzZS0+cGt0c2l6ZSA9IDQ7CisKKwkvKiBzZXQgZGVmYXVsdCBwYWNrZXQgb3V0cHV0IGJhc2VkIG9uIG51bWJlciBvZiBidXR0b25zIHdlIGZvdW5kICovCisJZXJyb3IgPSBmc3BfYWN0aXZhdGVfcHJvdG9jb2wocHNtb3VzZSk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcHNtb3VzZS0+cHMyZGV2LnNlcmlvLT5kZXYua29iaiwKKwkJCQkgICAmZnNwX2F0dHJpYnV0ZV9ncm91cCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBzbW91c2UtPnBzMmRldi5zZXJpby0+ZGV2LAorCQkJIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlcyAoJWQpIiwgZXJyb3IpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJcmV0dXJuIDA7CisKKyBlcnJfb3V0OgorCWtmcmVlKHBzbW91c2UtPnByaXZhdGUpOworCXBzbW91c2UtPnByaXZhdGUgPSBOVUxMOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VudGVsaWMuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VudGVsaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDEzOTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zZW50ZWxpYy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qLQorICogRmluZ2VyIFNlbnNpbmcgUGFkIFBTLzIgbW91c2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEFzaWEgVml0YWwgQ29tcG9uZW50cyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IFRhaS1od2EgTGlhbmcsIFNlbnRlbGljIENvcnBvcmF0aW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmCV9fU0VOVEVMSUNfSAorI2RlZmluZQlfX1NFTlRFTElDX0gKKworLyogRmluZ2VyLXNlbnNpbmcgUGFkIGluZm9ybWF0aW9uIHJlZ2lzdGVycyAqLworI2RlZmluZQlGU1BfUkVHX0RFVklDRV9JRAkweDAwCisjZGVmaW5lCUZTUF9SRUdfVkVSU0lPTgkJMHgwMQorI2RlZmluZQlGU1BfUkVHX1JFVklTSU9OCTB4MDQKKyNkZWZpbmUJRlNQX1JFR19UTU9EX1NUQVRVUzEJMHgwQgorI2RlZmluZQlGU1BfQklUX05PX1JPVEFUSU9OCUJJVCgzKQorI2RlZmluZQlGU1BfUkVHX1BBR0VfQ1RSTAkweDBGCisKKy8qIEZpbmdlci1zZW5zaW5nIFBhZCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZQlGU1BfUkVHX1NZU0NUTDEJCTB4MTAKKyNkZWZpbmUJRlNQX0JJVF9FTl9SRUdfQ0xLCUJJVCg1KQorI2RlZmluZQlGU1BfUkVHX09QQ19RRE9XTgkweDMxCisjZGVmaW5lCUZTUF9CSVRfRU5fT1BDX1RBRwlCSVQoNykKKyNkZWZpbmUJRlNQX1JFR19PUFRaX1hMTwkweDM0CisjZGVmaW5lCUZTUF9SRUdfT1BUWl9YSEkJMHgzNQorI2RlZmluZQlGU1BfUkVHX09QVFpfWUxPCTB4MzYKKyNkZWZpbmUJRlNQX1JFR19PUFRaX1lISQkweDM3CisjZGVmaW5lCUZTUF9SRUdfU1lTQ1RMNQkJMHg0MAorI2RlZmluZQlGU1BfQklUXzkwX0RFR1JFRQlCSVQoMCkKKyNkZWZpbmUJRlNQX0JJVF9FTl9NU0lENglCSVQoMSkKKyNkZWZpbmUJRlNQX0JJVF9FTl9NU0lENwlCSVQoMikKKyNkZWZpbmUJRlNQX0JJVF9FTl9NU0lEOAlCSVQoMykKKyNkZWZpbmUJRlNQX0JJVF9FTl9BVVRPX01TSUQ4CUJJVCg1KQorI2RlZmluZQlGU1BfQklUX0VOX1BLVF9HMAlCSVQoNikKKworI2RlZmluZQlGU1BfUkVHX09OUEFEX0NUTAkweDQzCisjZGVmaW5lCUZTUF9CSVRfT05QQURfRU5BQkxFCUJJVCgwKQorI2RlZmluZQlGU1BfQklUX09OUEFEX0ZCQkIJQklUKDEpCisjZGVmaW5lCUZTUF9CSVRfRklYX1ZTQ1IJQklUKDMpCisjZGVmaW5lCUZTUF9CSVRfRklYX0hTQ1IJQklUKDUpCisjZGVmaW5lCUZTUF9CSVRfRFJBR19MT0NLCUJJVCg2KQorCisvKiBGaW5nZXItc2Vuc2luZyBQYWQgcGFja2V0IGZvcm1hdGluZyByZWxhdGVkIGRlZmluaXRpb25zICovCisKKy8qIGFic29sdXRlIHBhY2tldCB0eXBlICovCisjZGVmaW5lCUZTUF9QS1RfVFlQRV9OT1JNQUwJKDB4MDApCisjZGVmaW5lCUZTUF9QS1RfVFlQRV9BQlMJKDB4MDEpCisjZGVmaW5lCUZTUF9QS1RfVFlQRV9OT1RJRlkJKDB4MDIpCisjZGVmaW5lCUZTUF9QS1RfVFlQRV9OT1JNQUxfT1BDCSgweDAzKQorI2RlZmluZQlGU1BfUEtUX1RZUEVfU0hJRlQJKDYpCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0cnVjdCBmc3BfZGF0YSB7CisJdW5zaWduZWQgY2hhcgl2ZXI7CQkvKiBoYXJkd2FyZSB2ZXJzaW9uICovCisJdW5zaWduZWQgY2hhcglyZXY7CQkvKiBoYXJkd2FyZSByZXZpc29uICovCisJdW5zaWduZWQgY2hhcglidXR0b25zOwkvKiBOdW1iZXIgb2YgYnV0dG9ucyAqLworCXVuc2lnbmVkIGludAlmbGFnczsKKyNkZWZpbmUJRlNQRFJWX0ZMQUdfRU5fT1BDCSgweDAwMSkJLyogZW5hYmxlIG9uLXBhZCBjbGlja2luZyAqLworCisJYm9vbAkJdnNjcm9sbDsJLyogVmVydGljYWwgc2Nyb2xsIHpvbmUgZW5hYmxlZCAqLworCWJvb2wJCWhzY3JvbGw7CS8qIEhvcml6b250YWwgc2Nyb2xsIHpvbmUgZW5hYmxlZCAqLworCisJdW5zaWduZWQgY2hhcglsYXN0X3JlZzsJLyogTGFzdCByZWdpc3RlciB3ZSByZXF1ZXN0ZWQgcmVhZCBmcm9tICovCisJdW5zaWduZWQgY2hhcglsYXN0X3ZhbDsKK307CisKKyNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDCitleHRlcm4gaW50IGZzcF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOworZXh0ZXJuIGludCBmc3BfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSk7CisjZWxzZQoraW5saW5lIGludCBmc3BfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQoreworCXJldHVybiAtRU5PU1lTOworfQoraW5saW5lIGludCBmc3BfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKyNlbmRpZgorCisjZW5kaWYJLyogX19LRVJORUxfXyAqLworCisjZW5kaWYJLyogIV9fU0VOVEVMSUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggMTk5ODRiZi4uYjY2ZmYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC02MCw3ICs2MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzeW5hcHRpY3NfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbnQgc3luYXB0aWNzX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCXVuc2lnbmVkIGNoYXIgcGFyYW1bNF07CkBAIC01NTYsMzggKzU1NiwzOCBAQAogewogCWludCBpOwogCi0Jc2V0X2JpdChFVl9BQlMsIGRldi0+ZXZiaXQpOworCV9fc2V0X2JpdChFVl9BQlMsIGRldi0+ZXZiaXQpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIFhNSU5fTk9NSU5BTCwgWE1BWF9OT01JTkFMLCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19ZLCBZTUlOX05PTUlOQUwsIFlNQVhfTk9NSU5BTCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDI1NSwgMCwgMCk7Ci0Jc2V0X2JpdChBQlNfVE9PTF9XSURUSCwgZGV2LT5hYnNiaXQpOworCV9fc2V0X2JpdChBQlNfVE9PTF9XSURUSCwgZGV2LT5hYnNiaXQpOwogCi0Jc2V0X2JpdChFVl9LRVksIGRldi0+ZXZiaXQpOwotCXNldF9iaXQoQlROX1RPVUNILCBkZXYtPmtleWJpdCk7Ci0Jc2V0X2JpdChCVE5fVE9PTF9GSU5HRVIsIGRldi0+a2V5Yml0KTsKLQlzZXRfYml0KEJUTl9MRUZULCBkZXYtPmtleWJpdCk7Ci0Jc2V0X2JpdChCVE5fUklHSFQsIGRldi0+a2V5Yml0KTsKKwlfX3NldF9iaXQoRVZfS0VZLCBkZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoQlROX1RPVUNILCBkZXYtPmtleWJpdCk7CisJX19zZXRfYml0KEJUTl9UT09MX0ZJTkdFUiwgZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fTEVGVCwgZGV2LT5rZXliaXQpOworCV9fc2V0X2JpdChCVE5fUklHSFQsIGRldi0+a2V5Yml0KTsKIAogCWlmIChTWU5fQ0FQX01VTFRJRklOR0VSKHByaXYtPmNhcGFiaWxpdGllcykpIHsKLQkJc2V0X2JpdChCVE5fVE9PTF9ET1VCTEVUQVAsIGRldi0+a2V5Yml0KTsKLQkJc2V0X2JpdChCVE5fVE9PTF9UUklQTEVUQVAsIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9UT09MX0RPVUJMRVRBUCwgZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX1RPT0xfVFJJUExFVEFQLCBkZXYtPmtleWJpdCk7CiAJfQogCiAJaWYgKFNZTl9DQVBfTUlERExFX0JVVFRPTihwcml2LT5jYXBhYmlsaXRpZXMpKQotCQlzZXRfYml0KEJUTl9NSURETEUsIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl9NSURETEUsIGRldi0+a2V5Yml0KTsKIAogCWlmIChTWU5fQ0FQX0ZPVVJfQlVUVE9OKHByaXYtPmNhcGFiaWxpdGllcykgfHwKIAkgICAgU1lOX0NBUF9NSURETEVfQlVUVE9OKHByaXYtPmNhcGFiaWxpdGllcykpIHsKLQkJc2V0X2JpdChCVE5fRk9SV0FSRCwgZGV2LT5rZXliaXQpOwotCQlzZXRfYml0KEJUTl9CQUNLLCBkZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fRk9SV0FSRCwgZGV2LT5rZXliaXQpOworCQlfX3NldF9iaXQoQlROX0JBQ0ssIGRldi0+a2V5Yml0KTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1lOX0NBUF9NVUxUSV9CVVRUT05fTk8ocHJpdi0+ZXh0X2NhcCk7IGkrKykKLQkJc2V0X2JpdChCVE5fMCArIGksIGRldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEJUTl8wICsgaSwgZGV2LT5rZXliaXQpOwogCi0JY2xlYXJfYml0KEVWX1JFTCwgZGV2LT5ldmJpdCk7Ci0JY2xlYXJfYml0KFJFTF9YLCBkZXYtPnJlbGJpdCk7Ci0JY2xlYXJfYml0KFJFTF9ZLCBkZXYtPnJlbGJpdCk7CisJX19jbGVhcl9iaXQoRVZfUkVMLCBkZXYtPmV2Yml0KTsKKwlfX2NsZWFyX2JpdChSRUxfWCwgZGV2LT5yZWxiaXQpOworCV9fY2xlYXJfYml0KFJFTF9ZLCBkZXYtPnJlbGJpdCk7CiAKIAlkZXYtPmFic3Jlc1tBQlNfWF0gPSBwcml2LT54X3JlczsKIAlkZXYtPmFic3Jlc1tBQlNfWV0gPSBwcml2LT55X3JlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCmluZGV4IDMwMjM4MjEuLjg3MWY2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaApAQCAtMTA1LDcgKzEwNSw3IEBACiAJaW50IHNjcm9sbDsKIH07CiAKLWludCBzeW5hcHRpY3NfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpOworaW50IHN5bmFwdGljc19kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOwogaW50IHN5bmFwdGljc19pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKIHZvaWQgc3luYXB0aWNzX3Jlc2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdG91Y2hraXRfcHMyLmMKaW5kZXggM2ZhZGIyYS4uMDMwOGEwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RvdWNoa2l0X3BzMi5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJcmV0dXJuIFBTTU9VU0VfRlVMTF9QQUNLRVQ7CiB9CiAKLWludCB0b3VjaGtpdF9wczJfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbnQgdG91Y2hraXRfcHMyX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgYm9vbCBzZXRfcHJvcGVydGllcykKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwc21vdXNlLT5kZXY7CiAJdW5zaWduZWQgY2hhciBwYXJhbVszXTsKQEAgLTg2LDcgKzg2LDcgQEAKIAogCWlmIChzZXRfcHJvcGVydGllcykgewogCQlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7Ci0JCXNldF9iaXQoQlROX1RPVUNILCBkZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChCVE5fVE9VQ0gsIGRldi0+a2V5Yml0KTsKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWCwgMCwgVE9VQ0hLSVRfTUFYX1hDLCAwLCAwKTsKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWSwgMCwgVE9VQ0hLSVRfTUFYX1lDLCAwLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdG91Y2hraXRfcHMyLmgKaW5kZXggOGEwZGQzNS4uMmVmZTllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuaAorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RvdWNoa2l0X3BzMi5oCkBAIC0xMywxMCArMTMsMTAgQEAKICNkZWZpbmUgX1RPVUNIS0lUX1BTMl9ICiAKICNpZmRlZiBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUCi1pbnQgdG91Y2hraXRfcHMyX2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKTsKK2ludCB0b3VjaGtpdF9wczJfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCB0b3VjaGtpdF9wczJfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAotCQkJCSAgICAgIGludCBzZXRfcHJvcGVydGllcykKKwkJCQkgICAgICBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXJldHVybiAtRU5PU1lTOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYwppbmRleCBlNjhjODE0Li5lMzU0MzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RyYWNrcG9pbnQuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB0cmFja3BvaW50X2RldGVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgaW50IHNldF9wcm9wZXJ0aWVzKQoraW50IHRyYWNrcG9pbnRfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXN0cnVjdCB0cmFja3BvaW50X2RhdGEgKnByaXY7CiAJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmgKaW5kZXggYzEwYTZlNy4uZTU1OGE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmgKQEAgLTE0Myw5ICsxNDMsOSBAQAogfTsKIAogI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVAotaW50IHRyYWNrcG9pbnRfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpOworaW50IHRyYWNrcG9pbnRfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKTsKICNlbHNlCi1pbmxpbmUgaW50IHRyYWNrcG9pbnRfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCitpbmxpbmUgaW50IHRyYWNrcG9pbnRfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCXJldHVybiAtRU5PU1lTOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS92c3h4eGFhLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYwppbmRleCA0MDRlZWRkLi43MDExMTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYwpAQCAtMzg0LDExICszODQsMTEgQEAKIAlwcmludGsgKEtFUk5fTk9USUNFICIlcyBvbiAlczogRm9yY2Vpbmcgc3RhbmRhcmQgcGFja2V0IGZvcm1hdCwgIgogCQkJImluY3JlbWVudGFsIHN0cmVhbWluZyBtb2RlIGFuZCA3MiBzYW1wbGVzL3NlY1xuIiwKIAkJCW1vdXNlLT5uYW1lLCBtb3VzZS0+cGh5cyk7Ci0JbW91c2UtPnNlcmlvLT53cml0ZSAobW91c2UtPnNlcmlvLCAnUycpOwkvKiBTdGFuZGFyZCBmb3JtYXQgKi8KKwlzZXJpb193cml0ZSAobW91c2UtPnNlcmlvLCAnUycpOwkvKiBTdGFuZGFyZCBmb3JtYXQgKi8KIAltZGVsYXkgKDUwKTsKLQltb3VzZS0+c2VyaW8tPndyaXRlIChtb3VzZS0+c2VyaW8sICdSJyk7CS8qIEluY3JlbWVudGFsICovCisJc2VyaW9fd3JpdGUgKG1vdXNlLT5zZXJpbywgJ1InKTsJLyogSW5jcmVtZW50YWwgKi8KIAltZGVsYXkgKDUwKTsKLQltb3VzZS0+c2VyaW8tPndyaXRlIChtb3VzZS0+c2VyaW8sICdMJyk7CS8qIDcyIHNhbXBsZXMvc2VjICovCisJc2VyaW9fd3JpdGUgKG1vdXNlLT5zZXJpbywgJ0wnKTsJLyogNzIgc2FtcGxlcy9zZWMgKi8KIH0KIAogc3RhdGljIHZvaWQKQEAgLTUzMiw3ICs1MzIsNyBAQAogCSAqIFJlcXVlc3Qgc2VsZnRlc3QuIFN0YW5kYXJkIHBhY2tldCBmb3JtYXQgYW5kIGRpZmZlcmVudGlhbAogCSAqIG1vZGUgd2lsbCBiZSByZXF1ZXN0ZWQgYWZ0ZXIgdGhlIGRldmljZSBJRCdlZCBzdWNjZXNzZnVsbHkuCiAJICovCi0Jc2VyaW8tPndyaXRlIChzZXJpbywgJ1QnKTsgLyogVGVzdCAqLworCXNlcmlvX3dyaXRlIChzZXJpbywgJ1QnKTsgLyogVGVzdCAqLwogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIChpbnB1dF9kZXYpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2F0MzJwc2lmLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2F0MzJwc2lmLmMKaW5kZXggNDFmZGE4Yy4uYTZmYjdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9hdDMycHNpZi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vYXQzMnBzaWYuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJCWdvdG8gb3V0X2ZyZWVfaW87CiAJfQogCi0JcHNpZi0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJcHNpZi0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVncykpOwogCWlmICghcHNpZi0+cmVncykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgbWFwIEkvTyBtZW1vcnlcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggY2NiZjIzZS4uYTM5YmM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC00NTcsNiArNDU3LDM0IEBACiAJfSwKIAl7IH0KIH07CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIGk4MDQyX2RtaV9sYXB0b3BfdGFibGVbXSA9IHsKKwl7CisJCS5pZGVudCA9ICJQb3J0YWJsZSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9DSEFTU0lTX1RZUEUsICI4IiksIC8qIFBvcnRhYmxlICovCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJMYXB0b3AiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiOSIpLCAvKiBMYXB0b3AgKi8KKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIk5vdGVib29rIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX0NIQVNTSVNfVFlQRSwgIjEwIiksIC8qIE5vdGVib29rICovCisJCX0sCisJfSwKKwl7CisJCS5pZGVudCA9ICJTdWItTm90ZWJvb2siLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19UWVBFLCAiMTQiKSwgLyogU3ViLU5vdGVib29rICovCisJCX0sCisJfSwKKwl7IH0KK307CiAjZW5kaWYKIAogLyoKQEAgLTUzMCw5ICs1NTgsOSBAQAogI2lmZGVmIENPTkZJR19QTlAKICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIAotc3RhdGljIGludCBpODA0Ml9wbnBfa2JkX3JlZ2lzdGVyZWQ7CitzdGF0aWMgYm9vbCBpODA0Ml9wbnBfa2JkX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX3BucF9rYmRfZGV2aWNlczsKLXN0YXRpYyBpbnQgaTgwNDJfcG5wX2F1eF9yZWdpc3RlcmVkOworc3RhdGljIGJvb2wgaTgwNDJfcG5wX2F1eF9yZWdpc3RlcmVkOwogc3RhdGljIHVuc2lnbmVkIGludCBpODA0Ml9wbnBfYXV4X2RldmljZXM7CiAKIHN0YXRpYyBpbnQgaTgwNDJfcG5wX2NvbW1hbmRfcmVnOwpAQCAtNjIwLDEyICs2NDgsMTIgQEAKIHN0YXRpYyB2b2lkIGk4MDQyX3BucF9leGl0KHZvaWQpCiB7CiAJaWYgKGk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZCkgewotCQlpODA0Ml9wbnBfa2JkX3JlZ2lzdGVyZWQgPSAwOworCQlpODA0Ml9wbnBfa2JkX3JlZ2lzdGVyZWQgPSBmYWxzZTsKIAkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZpODA0Ml9wbnBfa2JkX2RyaXZlcik7CiAJfQogCiAJaWYgKGk4MDQyX3BucF9hdXhfcmVnaXN0ZXJlZCkgewotCQlpODA0Ml9wbnBfYXV4X3JlZ2lzdGVyZWQgPSAwOworCQlpODA0Ml9wbnBfYXV4X3JlZ2lzdGVyZWQgPSBmYWxzZTsKIAkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZpODA0Ml9wbnBfYXV4X2RyaXZlcik7CiAJfQogfQpAQCAtNjMzLDEyICs2NjEsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX3BucF9pbml0KHZvaWQpCiB7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OwotCWludCBwbnBfZGF0YV9idXN0ZWQgPSAwOworCWludCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKIAlpbnQgZXJyOwogCiAjaWZkZWYgQ09ORklHX1g4NgogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9ub3BucF90YWJsZSkpCi0JCWk4MDQyX25vcG5wID0gMTsKKwkJaTgwNDJfbm9wbnAgPSB0cnVlOwogI2VuZGlmCiAKIAlpZiAoaTgwNDJfbm9wbnApIHsKQEAgLTY0OCwxMSArNjc2LDExIEBACiAKIAllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZpODA0Ml9wbnBfa2JkX2RyaXZlcik7CiAJaWYgKCFlcnIpCi0JCWk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZCA9IDE7CisJCWk4MDQyX3BucF9rYmRfcmVnaXN0ZXJlZCA9IHRydWU7CiAKIAllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZpODA0Ml9wbnBfYXV4X2RyaXZlcik7CiAJaWYgKCFlcnIpCi0JCWk4MDQyX3BucF9hdXhfcmVnaXN0ZXJlZCA9IDE7CisJCWk4MDQyX3BucF9hdXhfcmVnaXN0ZXJlZCA9IHRydWU7CiAKIAlpZiAoIWk4MDQyX3BucF9rYmRfZGV2aWNlcyAmJiAhaTgwNDJfcG5wX2F1eF9kZXZpY2VzKSB7CiAJCWk4MDQyX3BucF9leGl0KCk7CkBAIC02ODAsOSArNzA4LDkgQEAKIAogI2lmIGRlZmluZWQoX19pYTY0X18pCiAJaWYgKCFpODA0Ml9wbnBfa2JkX2RldmljZXMpCi0JCWk4MDQyX25va2JkID0gMTsKKwkJaTgwNDJfbm9rYmQgPSB0cnVlOwogCWlmICghaTgwNDJfcG5wX2F1eF9kZXZpY2VzKQotCQlpODA0Ml9ub2F1eCA9IDE7CisJCWk4MDQyX25vYXV4ID0gdHJ1ZTsKICNlbmRpZgogCiAJaWYgKCgoaTgwNDJfcG5wX2RhdGFfcmVnICYgfjB4ZikgPT0gKGk4MDQyX2RhdGFfcmVnICYgfjB4ZikgJiYKQEAgLTY5Myw3ICs3MjEsNyBAQAogCQkJInVzaW5nIGRlZmF1bHQgJSN4XG4iLAogCQkJaTgwNDJfcG5wX2RhdGFfcmVnLCBpODA0Ml9kYXRhX3JlZyk7CiAJCWk4MDQyX3BucF9kYXRhX3JlZyA9IGk4MDQyX2RhdGFfcmVnOwotCQlwbnBfZGF0YV9idXN0ZWQgPSAxOworCQlwbnBfZGF0YV9idXN0ZWQgPSB0cnVlOwogCX0KIAogCWlmICgoKGk4MDQyX3BucF9jb21tYW5kX3JlZyAmIH4weGYpID09IChpODA0Ml9jb21tYW5kX3JlZyAmIH4weGYpICYmCkBAIC03MDQsNyArNzMyLDcgQEAKIAkJCSJ1c2luZyBkZWZhdWx0ICUjeFxuIiwKIAkJCWk4MDQyX3BucF9jb21tYW5kX3JlZywgaTgwNDJfY29tbWFuZF9yZWcpOwogCQlpODA0Ml9wbnBfY29tbWFuZF9yZWcgPSBpODA0Ml9jb21tYW5kX3JlZzsKLQkJcG5wX2RhdGFfYnVzdGVkID0gMTsKKwkJcG5wX2RhdGFfYnVzdGVkID0gdHJ1ZTsKIAl9CiAKIAlpZiAoIWk4MDQyX25va2JkICYmICFpODA0Ml9wbnBfa2JkX2lycSkgewpAQCAtNzEyLDcgKzc0MCw3IEBACiAJCQkiUE5QOiBQUy8yIGNvbnRyb2xsZXIgZG9lc24ndCBoYXZlIEtCRCBpcnE7ICIKIAkJCSJ1c2luZyBkZWZhdWx0ICVkXG4iLCBpODA0Ml9rYmRfaXJxKTsKIAkJaTgwNDJfcG5wX2tiZF9pcnEgPSBpODA0Ml9rYmRfaXJxOwotCQlwbnBfZGF0YV9idXN0ZWQgPSAxOworCQlwbnBfZGF0YV9idXN0ZWQgPSB0cnVlOwogCX0KIAogCWlmICghaTgwNDJfbm9hdXggJiYgIWk4MDQyX3BucF9hdXhfaXJxKSB7CkBAIC03MjEsNyArNzQ5LDcgQEAKIAkJCQkiUE5QOiBQUy8yIGFwcGVhcnMgdG8gaGF2ZSBBVVggcG9ydCBkaXNhYmxlZCwgIgogCQkJCSJpZiB0aGlzIGlzIGluY29ycmVjdCBwbGVhc2UgYm9vdCB3aXRoICIKIAkJCQkiaTgwNDIubm9wbnBcbiIpOwotCQkJaTgwNDJfbm9hdXggPSAxOworCQkJaTgwNDJfbm9hdXggPSB0cnVlOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCSJQTlA6IFBTLzIgY29udHJvbGxlciBkb2Vzbid0IGhhdmUgQVVYIGlycTsgIgpAQCAtNzM1LDYgKzc2MywxMSBAQAogCWk4MDQyX2tiZF9pcnEgPSBpODA0Ml9wbnBfa2JkX2lycTsKIAlpODA0Ml9hdXhfaXJxID0gaTgwNDJfcG5wX2F1eF9pcnE7CiAKKyNpZmRlZiBDT05GSUdfWDg2CisJaTgwNDJfYnlwYXNzX2F1eF9pcnFfdGVzdCA9ICFwbnBfZGF0YV9idXN0ZWQgJiYKKwkJCQkgICAgZG1pX2NoZWNrX3N5c3RlbShpODA0Ml9kbWlfbGFwdG9wX3RhYmxlKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2MywyMSArNzk2LDIxIEBACiAJCXJldHVybiByZXR2YWw7CiAKICNpZiBkZWZpbmVkKF9faWE2NF9fKQotICAgICAgICBpODA0Ml9yZXNldCA9IDE7CisgICAgICAgIGk4MDQyX3Jlc2V0ID0gdHJ1ZTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1g4NgogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9yZXNldF90YWJsZSkpCi0JCWk4MDQyX3Jlc2V0ID0gMTsKKwkJaTgwNDJfcmVzZXQgPSB0cnVlOwogCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0oaTgwNDJfZG1pX25vbG9vcF90YWJsZSkpCi0JCWk4MDQyX25vbG9vcCA9IDE7CisJCWk4MDQyX25vbG9vcCA9IHRydWU7CiAKIAlpZiAoZG1pX2NoZWNrX3N5c3RlbShpODA0Ml9kbWlfbm9tdXhfdGFibGUpKQotCQlpODA0Ml9ub211eCA9IDE7CisJCWk4MDQyX25vbXV4ID0gdHJ1ZTsKIAogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGk4MDQyX2RtaV9kcml0ZWtfdGFibGUpKQotCQlpODA0Ml9kcml0ZWsgPSAxOworCQlpODA0Ml9kcml0ZWsgPSB0cnVlOwogI2VuZGlmIC8qIENPTkZJR19YODYgKi8KIAogCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggNTgyMjQ1Yy4uZWIzZmY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtMjgsMzUgKzI4LDM1IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImk4MDQyIGtleWJvYXJkIGFuZCBtb3VzZSBjb250cm9sbGVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX25va2JkOworc3RhdGljIGJvb2wgaTgwNDJfbm9rYmQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9rYmQsIGk4MDQyX25va2JkLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9rYmQsICJEbyBub3QgcHJvYmUgb3IgdXNlIEtCRCBwb3J0LiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX25vYXV4Oworc3RhdGljIGJvb2wgaTgwNDJfbm9hdXg7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9hdXgsIGk4MDQyX25vYXV4LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9hdXgsICJEbyBub3QgcHJvYmUgb3IgdXNlIEFVWCAobW91c2UpIHBvcnQuIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfbm9tdXg7CitzdGF0aWMgYm9vbCBpODA0Ml9ub211eDsKIG1vZHVsZV9wYXJhbV9uYW1lZChub211eCwgaTgwNDJfbm9tdXgsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub211eCwgIkRvIG5vdCBjaGVjayB3aGV0aGVyIGFuIGFjdGl2ZSBtdWx0aXBsZXhpbmcgY29ucnRvbGxlciBpcyBwcmVzZW50LiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX3VubG9jazsKK3N0YXRpYyBib29sIGk4MDQyX3VubG9jazsKIG1vZHVsZV9wYXJhbV9uYW1lZCh1bmxvY2ssIGk4MDQyX3VubG9jaywgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVubG9jaywgIklnbm9yZSBrZXlib2FyZCBsb2NrLiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX3Jlc2V0Oworc3RhdGljIGJvb2wgaTgwNDJfcmVzZXQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQocmVzZXQsIGk4MDQyX3Jlc2V0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJSZXNldCBjb250cm9sbGVyIGR1cmluZyBpbml0IGFuZCBjbGVhbnVwLiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX2RpcmVjdDsKK3N0YXRpYyBib29sIGk4MDQyX2RpcmVjdDsKIG1vZHVsZV9wYXJhbV9uYW1lZChkaXJlY3QsIGk4MDQyX2RpcmVjdCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpcmVjdCwgIlB1dCBrZXlib2FyZCBwb3J0IGludG8gbm9uLXRyYW5zbGF0ZWQgbW9kZS4iKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBpODA0Ml9kdW1ia2JkOworc3RhdGljIGJvb2wgaTgwNDJfZHVtYmtiZDsKIG1vZHVsZV9wYXJhbV9uYW1lZChkdW1ia2JkLCBpODA0Ml9kdW1ia2JkLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHVtYmtiZCwgIlByZXRlbmQgdGhhdCBjb250cm9sbGVyIGNhbiBvbmx5IHJlYWQgZGF0YSBmcm9tIGtleWJvYXJkIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTgwNDJfbm9sb29wOworc3RhdGljIGJvb2wgaTgwNDJfbm9sb29wOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vbG9vcCwgaTgwNDJfbm9sb29wLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9sb29wLCAiRGlzYWJsZSB0aGUgQVVYIExvb3BiYWNrIGNvbW1hbmQgd2hpbGUgcHJvYmluZyBmb3IgdGhlIEFVWCBwb3J0Iik7CiAKQEAgLTY1LDI0ICs2NSwyNiBAQAogTU9EVUxFX1BBUk1fREVTQyhwYW5pY2JsaW5rLCAiRnJlcXVlbmN5IHdpdGggd2hpY2gga2V5Ym9hcmQgTEVEcyBzaG91bGQgYmxpbmsgd2hlbiBrZXJuZWwgcGFuaWNzIik7CiAKICNpZmRlZiBDT05GSUdfWDg2Ci1zdGF0aWMgdW5zaWduZWQgaW50IGk4MDQyX2RyaXRlazsKK3N0YXRpYyBib29sIGk4MDQyX2RyaXRlazsKIG1vZHVsZV9wYXJhbV9uYW1lZChkcml0ZWssIGk4MDQyX2RyaXRlaywgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRyaXRlaywgIkZvcmNlIGVuYWJsZSB0aGUgRHJpdGVrIGtleWJvYXJkIGV4dGVuc2lvbiIpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUE5QCi1zdGF0aWMgaW50IGk4MDQyX25vcG5wOworc3RhdGljIGJvb2wgaTgwNDJfbm9wbnA7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9wbnAsIGk4MDQyX25vcG5wLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9wbnAsICJEbyBub3QgdXNlIFBOUCB0byBkZXRlY3QgY29udHJvbGxlciBzZXR0aW5ncyIpOwogI2VuZGlmCiAKICNkZWZpbmUgREVCVUcKICNpZmRlZiBERUJVRwotc3RhdGljIGludCBpODA0Ml9kZWJ1ZzsKK3N0YXRpYyBib29sIGk4MDQyX2RlYnVnOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpODA0Ml9kZWJ1ZywgYm9vbCwgMDYwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBpODA0MiBkZWJ1Z2dpbmcgbW9kZSBvbiBhbmQgb2ZmIik7CiAjZW5kaWYKIAorc3RhdGljIGJvb2wgaTgwNDJfYnlwYXNzX2F1eF9pcnFfdGVzdDsKKwogI2luY2x1ZGUgImk4MDQyLmgiCiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaTgwNDJfbG9jayk7CkBAIC05MCw3ICs5Miw3IEBACiBzdHJ1Y3QgaTgwNDJfcG9ydCB7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIAlpbnQgaXJxOwotCXVuc2lnbmVkIGNoYXIgZXhpc3RzOworCWJvb2wgZXhpc3RzOwogCXNpZ25lZCBjaGFyIG11eDsKIH07CiAKQEAgLTEwMyw5ICsxMDUsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBpODA0Ml9pbml0aWFsX2N0cjsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGk4MDQyX2N0cjsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGk4MDQyX211eF9wcmVzZW50Owotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTgwNDJfa2JkX2lycV9yZWdpc3RlcmVkOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgaTgwNDJfYXV4X2lycV9yZWdpc3RlcmVkOworc3RhdGljIGJvb2wgaTgwNDJfbXV4X3ByZXNlbnQ7CitzdGF0aWMgYm9vbCBpODA0Ml9rYmRfaXJxX3JlZ2lzdGVyZWQ7CitzdGF0aWMgYm9vbCBpODA0Ml9hdXhfaXJxX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgdW5zaWduZWQgY2hhciBpODA0Ml9zdXBwcmVzc19rYmRfYWNrOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmk4MDQyX3BsYXRmb3JtX2RldmljZTsKIApAQCAtMjYyLDYgKzI2NCw0OSBAQAogCQkJCQlJODA0Ml9DTURfTVVYX1NFTkQgKyBwb3J0LT5tdXgpOwogfQogCisKKy8qCisgKiBpODA0Ml9hdXhfY2xvc2UgYXR0ZW1wdHMgdG8gY2xlYXIgQVVYIG9yIEtCRCBwb3J0IHN0YXRlIGJ5IGRpc2FibGluZworICogYW5kIHRoZW4gcmUtZW5hYmxpbmcgaXQuCisgKi8KKworc3RhdGljIHZvaWQgaTgwNDJfcG9ydF9jbG9zZShzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCWludCBpcnFfYml0OworCWludCBkaXNhYmxlX2JpdDsKKwljb25zdCBjaGFyICpwb3J0X25hbWU7CisKKwlpZiAoc2VyaW8gPT0gaTgwNDJfcG9ydHNbSTgwNDJfQVVYX1BPUlRfTk9dLnNlcmlvKSB7CisJCWlycV9iaXQgPSBJODA0Ml9DVFJfQVVYSU5UOworCQlkaXNhYmxlX2JpdCA9IEk4MDQyX0NUUl9BVVhESVM7CisJCXBvcnRfbmFtZSA9ICJBVVgiOworCX0gZWxzZSB7CisJCWlycV9iaXQgPSBJODA0Ml9DVFJfS0JESU5UOworCQlkaXNhYmxlX2JpdCA9IEk4MDQyX0NUUl9LQkRESVM7CisJCXBvcnRfbmFtZSA9ICJLQkQiOworCX0KKworCWk4MDQyX2N0ciAmPSB+aXJxX2JpdDsKKwlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiaTgwNDIuYzogQ2FuJ3Qgd3JpdGUgQ1RSIHdoaWxlIGNsb3NpbmcgJXMgcG9ydC5cbiIsCisJCQlwb3J0X25hbWUpOworCisJdWRlbGF5KDUwKTsKKworCWk4MDQyX2N0ciAmPSB+ZGlzYWJsZV9iaXQ7CisJaTgwNDJfY3RyIHw9IGlycV9iaXQ7CisJaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJpODA0Mi5jOiBDYW4ndCByZWFjdGl2YXRlICVzIHBvcnQuXG4iLAorCQkJcG9ydF9uYW1lKTsKKworCS8qCisJICogU2VlIGlmIHRoZXJlIGlzIGFueSBkYXRhIGFwcGVhcmVkIHdoaWxlIHdlIHdlcmUgbWVzc2luZyB3aXRoCisJICogcG9ydCBzdGF0ZS4KKwkgKi8KKwlpODA0Ml9pbnRlcnJ1cHQoMCwgTlVMTCk7Cit9CisKIC8qCiAgKiBpODA0Ml9zdGFydCgpIGlzIGNhbGxlZCBieSBzZXJpbyBjb3JlIHdoZW4gcG9ydCBpcyBhYm91dCB0byBmaW5pc2gKICAqIHJlZ2lzdGVyaW5nLiBJdCB3aWxsIG1hcmsgcG9ydCBhcyBleGlzdGluZyBzbyBpODA0Ml9pbnRlcnJ1cHQgY2FuCkBAIC0yNzEsNyArMzE2LDcgQEAKIHsKIAlzdHJ1Y3QgaTgwNDJfcG9ydCAqcG9ydCA9IHNlcmlvLT5wb3J0X2RhdGE7CiAKLQlwb3J0LT5leGlzdHMgPSAxOworCXBvcnQtPmV4aXN0cyA9IHRydWU7CiAJbWIoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NSw3ICszMzAsNyBAQAogewogCXN0cnVjdCBpODA0Ml9wb3J0ICpwb3J0ID0gc2VyaW8tPnBvcnRfZGF0YTsKIAotCXBvcnQtPmV4aXN0cyA9IDA7CisJcG9ydC0+ZXhpc3RzID0gZmFsc2U7CiAKIAkvKgogCSAqIFdlIHN5bmNocm9uaXplIHdpdGggYm90aCBBVVggYW5kIEtCRCBJUlFzIGJlY2F1c2UgdGhlcmUgaXMKQEAgLTM5MSw3ICs0MzYsNyBAQAogfQogCiAvKgotICogaTgwNDJfZW5hYmxlX2tiZF9wb3J0IGVuYWJsZXMga2V5YmFvcmQgcG9ydCBvbiBjaGlwCisgKiBpODA0Ml9lbmFibGVfa2JkX3BvcnQgZW5hYmxlcyBrZXlib2FyZCBwb3J0IG9uIGNoaXAKICAqLwogCiBzdGF0aWMgaW50IGk4MDQyX2VuYWJsZV9rYmRfcG9ydCh2b2lkKQpAQCAtNDQ3LDE0ICs0OTIsMTUgQEAKIH0KIAogLyoKLSAqIGk4MDQyX3NldF9tdXhfbW9kZSBjaGVja3Mgd2hldGhlciB0aGUgY29udHJvbGxlciBoYXMgYW4gYWN0aXZlCi0gKiBtdWx0aXBsZXhvciBhbmQgcHV0cyB0aGUgY2hpcCBpbnRvIE11bHRpcGxleGVkICgxKSBvciBMZWdhY3kgKDApIG1vZGUuCisgKiBpODA0Ml9zZXRfbXV4X21vZGUgY2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRyb2xsZXIgaGFzIGFuCisgKiBhY3RpdmUgbXVsdGlwbGV4b3IgYW5kIHB1dHMgdGhlIGNoaXAgaW50byBNdWx0aXBsZXhlZCAodHJ1ZSkKKyAqIG9yIExlZ2FjeSAoZmFsc2UpIG1vZGUuCiAgKi8KIAotc3RhdGljIGludCBpODA0Ml9zZXRfbXV4X21vZGUodW5zaWduZWQgaW50IG1vZGUsIHVuc2lnbmVkIGNoYXIgKm11eF92ZXJzaW9uKQorc3RhdGljIGludCBpODA0Ml9zZXRfbXV4X21vZGUoYm9vbCBtdWx0aXBsZXgsIHVuc2lnbmVkIGNoYXIgKm11eF92ZXJzaW9uKQogewogCi0JdW5zaWduZWQgY2hhciBwYXJhbTsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtLCB2YWw7CiAvKgogICogR2V0IHJpZCBvZiBieXRlcyBpbiB0aGUgcXVldWUuCiAgKi8KQEAgLTQ2NiwxNCArNTEyLDIxIEBACiAgKiBtb3VzZSBpbnRlcmZhY2UsIHRoZSBsYXN0IHNob3VsZCBiZSB2ZXJzaW9uLgogICovCiAKLQlwYXJhbSA9IDB4ZjA7Ci0JaWYgKGk4MDQyX2NvbW1hbmQoJnBhcmFtLCBJODA0Ml9DTURfQVVYX0xPT1ApIHx8IHBhcmFtICE9IDB4ZjApCisJcGFyYW0gPSB2YWwgPSAweGYwOworCWlmIChpODA0Ml9jb21tYW5kKCZwYXJhbSwgSTgwNDJfQ01EX0FVWF9MT09QKSB8fCBwYXJhbSAhPSB2YWwpCiAJCXJldHVybiAtMTsKLQlwYXJhbSA9IG1vZGUgPyAweDU2IDogMHhmNjsKLQlpZiAoaTgwNDJfY29tbWFuZCgmcGFyYW0sIEk4MDQyX0NNRF9BVVhfTE9PUCkgfHwgcGFyYW0gIT0gKG1vZGUgPyAweDU2IDogMHhmNikpCisJcGFyYW0gPSB2YWwgPSBtdWx0aXBsZXggPyAweDU2IDogMHhmNjsKKwlpZiAoaTgwNDJfY29tbWFuZCgmcGFyYW0sIEk4MDQyX0NNRF9BVVhfTE9PUCkgfHwgcGFyYW0gIT0gdmFsKQogCQlyZXR1cm4gLTE7Ci0JcGFyYW0gPSBtb2RlID8gMHhhNCA6IDB4YTU7Ci0JaWYgKGk4MDQyX2NvbW1hbmQoJnBhcmFtLCBJODA0Ml9DTURfQVVYX0xPT1ApIHx8IHBhcmFtID09IChtb2RlID8gMHhhNCA6IDB4YTUpKQorCXBhcmFtID0gdmFsID0gbXVsdGlwbGV4ID8gMHhhNCA6IDB4YTU7CisJaWYgKGk4MDQyX2NvbW1hbmQoJnBhcmFtLCBJODA0Ml9DTURfQVVYX0xPT1ApIHx8IHBhcmFtID09IHZhbCkKKwkJcmV0dXJuIC0xOworCisvKgorICogV29ya2Fyb3VuZCBmb3IgaW50ZXJmZXJlbmNlIHdpdGggVVNCIExlZ2FjeSBlbXVsYXRpb24KKyAqIHRoYXQgY2F1c2VzIGEgdjEwLjEyIE1VWCB0byBiZSBmb3VuZC4KKyAqLworCWlmIChwYXJhbSA9PSAweGFjKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAobXV4X3ZlcnNpb24pCkBAIC00ODgsMTggKzU0MSwxMSBAQAogICogTENTL1RlbGVncmFwaGljcy4KICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpODA0Ml9jaGVja19tdXgodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGk4MDQyX2NoZWNrX211eCh2b2lkKQogewogCXVuc2lnbmVkIGNoYXIgbXV4X3ZlcnNpb247CiAKLQlpZiAoaTgwNDJfc2V0X211eF9tb2RlKDEsICZtdXhfdmVyc2lvbikpCi0JCXJldHVybiAtMTsKLQotLyoKLSAqIFdvcmthcm91bmQgZm9yIGludGVyZmVyZW5jZSB3aXRoIFVTQiBMZWdhY3kgZW11bGF0aW9uCi0gKiB0aGF0IGNhdXNlcyBhIHYxMC4xMiBNVVggdG8gYmUgZm91bmQuCi0gKi8KLQlpZiAobXV4X3ZlcnNpb24gPT0gMHhBQykKKwlpZiAoaTgwNDJfc2V0X211eF9tb2RlKHRydWUsICZtdXhfdmVyc2lvbikpCiAJCXJldHVybiAtMTsKIAogCXByaW50ayhLRVJOX0lORk8gImk4MDQyLmM6IERldGVjdGVkIGFjdGl2ZSBtdWx0aXBsZXhpbmcgY29udHJvbGxlciwgcmV2ICVkLiVkLlxuIiwKQEAgLTUxNiw3ICs1NjIsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpODA0Ml9tdXhfcHJlc2VudCA9IDE7CisJaTgwNDJfbXV4X3ByZXNlbnQgPSB0cnVlOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MjQsMTAgKzU3MCwxMCBAQAogLyoKICAqIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCB0byB0ZXN0IEFVWCBJUlEgZGVsaXZlcnkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiBpODA0Ml9hdXhfaXJxX2RlbGl2ZXJlZCBfX2RldmluaXRkYXRhOwotc3RhdGljIGludCBpODA0Ml9pcnFfYmVpbmdfdGVzdGVkIF9fZGV2aW5pdGRhdGE7CitzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gaTgwNDJfYXV4X2lycV9kZWxpdmVyZWQgX19pbml0ZGF0YTsKK3N0YXRpYyBib29sIGk4MDQyX2lycV9iZWluZ190ZXN0ZWQgX19pbml0ZGF0YTsKIAotc3RhdGljIGlycXJldHVybl90IF9fZGV2aW5pdCBpODA0Ml9hdXhfdGVzdF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IF9faW5pdCBpODA0Ml9hdXhfdGVzdF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciBzdHIsIGRhdGE7CkBAIC01NTIsNyArNTk4LDcgQEAKICAqIHZlcmlmaWVzIHN1Y2Nlc3MgYnkgcmVhZGlubmcgQ1RSLiBVc2VkIHdoZW4gdGVzdGluZyBmb3IgcHJlc2VuY2Ugb2YgQVVYCiAgKiBwb3J0LgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpODA0Ml90b2dnbGVfYXV4KGludCBvbikKK3N0YXRpYyBpbnQgX19pbml0IGk4MDQyX3RvZ2dsZV9hdXgoYm9vbCBvbikKIHsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtOwogCWludCBpOwpAQCAtNTgwLDExICs2MjYsMTEgQEAKICAqIHRoZSBwcmVzZW5jZSBvZiBhbiBBVVggaW50ZXJmYWNlLgogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDQyX2NoZWNrX2F1eCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaTgwNDJfY2hlY2tfYXV4KHZvaWQpCiB7CiAJaW50IHJldHZhbCA9IC0xOwotCWludCBpcnFfcmVnaXN0ZXJlZCA9IDA7Ci0JaW50IGF1eF9sb29wX2Jyb2tlbiA9IDA7CisJYm9vbCBpcnFfcmVnaXN0ZXJlZCA9IGZhbHNlOworCWJvb2wgYXV4X2xvb3BfYnJva2VuID0gZmFsc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIHBhcmFtOwogCkBAIC02MjEsMTkgKzY2NywxOSBAQAogICogbWFyayBpdCBhcyBicm9rZW4KICAqLwogCQlpZiAoIXJldHZhbCkKLQkJCWF1eF9sb29wX2Jyb2tlbiA9IDE7CisJCQlhdXhfbG9vcF9icm9rZW4gPSB0cnVlOwogCX0KIAogLyoKICAqIEJpdCBhc3NpZ25tZW50IHRlc3QgLSBmaWx0ZXJzIG91dCBQUy8yIGk4MDQyJ3MgaW4gQVQgbW9kZQogICovCiAKLQlpZiAoaTgwNDJfdG9nZ2xlX2F1eCgwKSkgeworCWlmIChpODA0Ml90b2dnbGVfYXV4KGZhbHNlKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gZGlzYWJsZSBBVVggcG9ydCwgYnV0IGNvbnRpbnVpbmcgYW55d2F5Li4uIElzIHRoaXMgYSBTaVM/XG4iKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiSWYgQVVYIHBvcnQgaXMgcmVhbGx5IGFic2VudCBwbGVhc2UgdXNlIHRoZSAnaTgwNDIubm9hdXgnIG9wdGlvbi5cbiIpOwogCX0KIAotCWlmIChpODA0Ml90b2dnbGVfYXV4KDEpKQorCWlmIChpODA0Ml90b2dnbGVfYXV4KHRydWUpKQogCQlyZXR1cm4gLTE7CiAKIC8qCkBAIC02NDEsNyArNjg3LDcgQEAKICAqIHVzZWQgaXQgZm9yIGEgUENJIGNhcmQgb3Igc29tZXRoaWcgZWxzZS4KICAqLwogCi0JaWYgKGk4MDQyX25vbG9vcCB8fCBhdXhfbG9vcF9icm9rZW4pIHsKKwlpZiAoaTgwNDJfbm9sb29wIHx8IGk4MDQyX2J5cGFzc19hdXhfaXJxX3Rlc3QgfHwgYXV4X2xvb3BfYnJva2VuKSB7CiAvKgogICogV2l0aG91dCBMT09QIGNvbW1hbmQgd2UgY2FuJ3QgdGVzdCBBVVggSVJRIGRlbGl2ZXJ5LiBBc3N1bWUgdGhlIHBvcnQKICAqIGlzIHdvcmtpbmcgYW5kIGhvcGUgd2UgYXJlIHJpZ2h0LgpAQCAtNjU0LDcgKzcwMCw3IEBACiAJCQkiaTgwNDIiLCBpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpKQogCQlnb3RvIG91dDsKIAotCWlycV9yZWdpc3RlcmVkID0gMTsKKwlpcnFfcmVnaXN0ZXJlZCA9IHRydWU7CiAKIAlpZiAoaTgwNDJfZW5hYmxlX2F1eF9wb3J0KCkpCiAJCWdvdG8gb3V0OwpAQCAtNjYyLDcgKzcwOCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MDQyX2xvY2ssIGZsYWdzKTsKIAogCWluaXRfY29tcGxldGlvbigmaTgwNDJfYXV4X2lycV9kZWxpdmVyZWQpOwotCWk4MDQyX2lycV9iZWluZ190ZXN0ZWQgPSAxOworCWk4MDQyX2lycV9iZWluZ190ZXN0ZWQgPSB0cnVlOwogCiAJcGFyYW0gPSAweGE1OwogCXJldHZhbCA9IF9faTgwNDJfY29tbWFuZCgmcGFyYW0sIEk4MDQyX0NNRF9BVVhfTE9PUCAmIDB4ZjBmZik7CkBAIC03OTksNyArODQ1LDcgQEAKICAqLwogCiAJaWYgKH5pODA0Ml9jdHIgJiBJODA0Ml9DVFJfWExBVEUpCi0JCWk4MDQyX2RpcmVjdCA9IDE7CisJCWk4MDQyX2RpcmVjdCA9IHRydWU7CiAKIC8qCiAgKiBTZXQgbm9udHJhbnNsYXRlZCBtb2RlIGZvciB0aGUga2JkIGludGVyZmFjZSBpZiByZXF1ZXN0ZWQgYnkgYW4gb3B0aW9uLgpAQCAtODM5LDEyICs4ODUsMTUgQEAKIAlpODA0Ml9jdHIgfD0gSTgwNDJfQ1RSX0tCRERJUyB8IEk4MDQyX0NUUl9BVVhESVM7CiAJaTgwNDJfY3RyICY9IH4oSTgwNDJfQ1RSX0tCRElOVCB8IEk4MDQyX0NUUl9BVVhJTlQpOwogCisJaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2luaXRpYWxfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJpODA0Mi5jOiBDYW4ndCB3cml0ZSBDVFIgd2hpbGUgcmVzZXR0aW5nLlxuIik7CisKIC8qCiAgKiBEaXNhYmxlIE1VWCBtb2RlIGlmIHByZXNlbnQuCiAgKi8KIAogCWlmIChpODA0Ml9tdXhfcHJlc2VudCkKLQkJaTgwNDJfc2V0X211eF9tb2RlKDAsIE5VTEwpOworCQlpODA0Ml9zZXRfbXV4X21vZGUoZmFsc2UsIE5VTEwpOwogCiAvKgogICogUmVzZXQgdGhlIGNvbnRyb2xsZXIgaWYgcmVxdWVzdGVkLgpAQCAtOTIzLDQxICs5NzIsMjcgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgYm9vbCBpODA0Ml9zdXNwZW5kZWQ7Ci0KIC8qCi0gKiBIZXJlIHdlIHRyeSB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBCSU9TIHNldHRpbmdzLiBXZSBvbmx5IHdhbnQgdG8KLSAqIGRvIHRoYXQgb25jZSwgd2hlbiB3ZSByZWFsbHkgc3VzcGVuZCwgbm90IHdoZW4gd2UgdGFraW5nIG1lbW9yeQotICogc25hcHNob3QgZm9yIHN3c3VzcCAoaW4gdGhpcyBjYXNlIHdlJ2xsIHBlcmZvcm0gcmVxdWlyZWQgY2xlYW51cAotICogYXMgcGFydCBvZiBzaHV0ZG93biBwcm9jZXNzKS4KKyAqIEhlcmUgd2UgdHJ5IHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIEJJT1Mgc2V0dGluZ3MgdG8gYXZvaWQKKyAqIHVwc2V0dGluZyBpdC4KICAqLwogCi1zdGF0aWMgaW50IGk4MDQyX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGk4MDQyX3BtX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoIWk4MDQyX3N1c3BlbmRlZCAmJiBzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKQotCQlpODA0Ml9jb250cm9sbGVyX3Jlc2V0KCk7Ci0KLQlpODA0Ml9zdXNwZW5kZWQgPSBzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EIHx8Ci0JCQkgIHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRTsKKwlpODA0Ml9jb250cm9sbGVyX3Jlc2V0KCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKgotICogSGVyZSB3ZSB0cnkgdG8gcmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIGEgc3RhdGUgaW4gd2hpY2ggc3VzcGVuZGVkCisgKiBIZXJlIHdlIHRyeSB0byByZXNldCBldmVyeXRoaW5nIGJhY2sgdG8gYSBzdGF0ZSB3ZSBoYWQKKyAqIGJlZm9yZSBzdXNwZW5kaW5nLgogICovCiAKLXN0YXRpYyBpbnQgaTgwNDJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTgwNDJfcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IGVycm9yOwogCi0vKgotICogRG8gbm90IGJvdGhlciB3aXRoIHJlc3RvcmluZyBzdGF0ZSBpZiB3ZSBoYXZlbid0IHN1c3BlbmVkIHlldAotICovCi0JaWYgKCFpODA0Ml9zdXNwZW5kZWQpCi0JCXJldHVybiAwOwotCiAJZXJyb3IgPSBpODA0Ml9jb250cm9sbGVyX2NoZWNrKCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC05OTEsNyArMTAyNiw3IEBACiAjZW5kaWYKIAogCWlmIChpODA0Ml9tdXhfcHJlc2VudCkgewotCQlpZiAoaTgwNDJfc2V0X211eF9tb2RlKDEsIE5VTEwpIHx8IGk4MDQyX2VuYWJsZV9tdXhfcG9ydHMoKSkKKwkJaWYgKGk4MDQyX3NldF9tdXhfbW9kZSh0cnVlLCBOVUxMKSB8fCBpODA0Ml9lbmFibGVfbXV4X3BvcnRzKCkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJImk4MDQyOiBmYWlsZWQgdG8gcmVzdW1lIGFjdGl2ZSBtdWx0aXBsZXhvciwgIgogCQkJCSJtb3VzZSB3b24ndCB3b3JrLlxuIik7CkBAIC0xMDAxLDExICsxMDM2LDE4IEBACiAJaWYgKGk4MDQyX3BvcnRzW0k4MDQyX0tCRF9QT1JUX05PXS5zZXJpbykKIAkJaTgwNDJfZW5hYmxlX2tiZF9wb3J0KCk7CiAKLQlpODA0Ml9zdXNwZW5kZWQgPSBmYWxzZTsKIAlpODA0Ml9pbnRlcnJ1cHQoMCwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGk4MDQyX3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IGk4MDQyX3BtX3Jlc2V0LAorCS5yZXN1bWUJCT0gaTgwNDJfcG1fcmVzdG9yZSwKKwkucG93ZXJvZmYJPSBpODA0Ml9wbV9yZXNldCwKKwkucmVzdG9yZQk9IGk4MDQyX3BtX3Jlc3RvcmUsCit9OworCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIC8qCkBAIC0xMDE4LDcgKzEwNjAsNyBAQAogCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaTgwNDJfY3JlYXRlX2tiZF9wb3J0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9jcmVhdGVfa2JkX3BvcnQodm9pZCkKIHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwogCXN0cnVjdCBpODA0Ml9wb3J0ICpwb3J0ID0gJmk4MDQyX3BvcnRzW0k4MDQyX0tCRF9QT1JUX05PXTsKQEAgLTEwMzEsNiArMTA3Myw3IEBACiAJc2VyaW8tPndyaXRlCQk9IGk4MDQyX2R1bWJrYmQgPyBOVUxMIDogaTgwNDJfa2JkX3dyaXRlOwogCXNlcmlvLT5zdGFydAkJPSBpODA0Ml9zdGFydDsKIAlzZXJpby0+c3RvcAkJPSBpODA0Ml9zdG9wOworCXNlcmlvLT5jbG9zZQkJPSBpODA0Ml9wb3J0X2Nsb3NlOwogCXNlcmlvLT5wb3J0X2RhdGEJPSBwb3J0OwogCXNlcmlvLT5kZXYucGFyZW50CT0gJmk4MDQyX3BsYXRmb3JtX2RldmljZS0+ZGV2OwogCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJpODA0MiBLQkQgcG9ydCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwpAQCAtMTA0Miw3ICsxMDg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaTgwNDJfY3JlYXRlX2F1eF9wb3J0KGludCBpZHgpCitzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9jcmVhdGVfYXV4X3BvcnQoaW50IGlkeCkKIHsKIAlzdHJ1Y3Qgc2VyaW8gKnNlcmlvOwogCWludCBwb3J0X25vID0gaWR4IDwgMCA/IEk4MDQyX0FVWF9QT1JUX05PIDogSTgwNDJfTVVYX1BPUlRfTk8gKyBpZHg7CkBAIC0xMDYxLDYgKzExMDQsNyBAQAogCWlmIChpZHggPCAwKSB7CiAJCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJpODA0MiBBVVggcG9ydCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwogCQlzdHJsY3B5KHNlcmlvLT5waHlzLCBJODA0Ml9BVVhfUEhZU19ERVNDLCBzaXplb2Yoc2VyaW8tPnBoeXMpKTsKKwkJc2VyaW8tPmNsb3NlID0gaTgwNDJfcG9ydF9jbG9zZTsKIAl9IGVsc2UgewogCQlzbnByaW50ZihzZXJpby0+bmFtZSwgc2l6ZW9mKHNlcmlvLT5uYW1lKSwgImk4MDQyIEFVWCVkIHBvcnQiLCBpZHgpOwogCQlzbnByaW50ZihzZXJpby0+cGh5cywgc2l6ZW9mKHNlcmlvLT5waHlzKSwgSTgwNDJfTVVYX1BIWVNfREVTQywgaWR4ICsgMSk7CkBAIC0xMDczLDEzICsxMTE3LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpODA0Ml9mcmVlX2tiZF9wb3J0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaTgwNDJfZnJlZV9rYmRfcG9ydCh2b2lkKQogewogCWtmcmVlKGk4MDQyX3BvcnRzW0k4MDQyX0tCRF9QT1JUX05PXS5zZXJpbyk7CiAJaTgwNDJfcG9ydHNbSTgwNDJfS0JEX1BPUlRfTk9dLnNlcmlvID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGk4MDQyX2ZyZWVfYXV4X3BvcnRzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaTgwNDJfZnJlZV9hdXhfcG9ydHModm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtMTA4OSw3ICsxMTMzLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpODA0Ml9yZWdpc3Rlcl9wb3J0cyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGk4MDQyX3JlZ2lzdGVyX3BvcnRzKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTExMjQsMTAgKzExNjgsMTAgQEAKIAlpZiAoaTgwNDJfa2JkX2lycV9yZWdpc3RlcmVkKQogCQlmcmVlX2lycShJODA0Ml9LQkRfSVJRLCBpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpOwogCi0JaTgwNDJfYXV4X2lycV9yZWdpc3RlcmVkID0gaTgwNDJfa2JkX2lycV9yZWdpc3RlcmVkID0gMDsKKwlpODA0Ml9hdXhfaXJxX3JlZ2lzdGVyZWQgPSBpODA0Ml9rYmRfaXJxX3JlZ2lzdGVyZWQgPSBmYWxzZTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaTgwNDJfc2V0dXBfYXV4KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpODA0Ml9zZXR1cF9hdXgodm9pZCkKIHsKIAlpbnQgKCphdXhfZW5hYmxlKSh2b2lkKTsKIAlpbnQgZXJyb3I7CkBAIC0xMTU4LDcgKzEyMDIsNyBAQAogCWlmIChhdXhfZW5hYmxlKCkpCiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCi0JaTgwNDJfYXV4X2lycV9yZWdpc3RlcmVkID0gMTsKKwlpODA0Ml9hdXhfaXJxX3JlZ2lzdGVyZWQgPSB0cnVlOwogCXJldHVybiAwOwogCiAgZXJyX2ZyZWVfaXJxOgpAQCAtMTE2OCw3ICsxMjEyLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDQyX3NldHVwX2tiZCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaTgwNDJfc2V0dXBfa2JkKHZvaWQpCiB7CiAJaW50IGVycm9yOwogCkBAIC0xMTg1LDcgKzEyMjksNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBlcnJfZnJlZV9pcnE7CiAKLQlpODA0Ml9rYmRfaXJxX3JlZ2lzdGVyZWQgPSAxOworCWk4MDQyX2tiZF9pcnFfcmVnaXN0ZXJlZCA9IHRydWU7CiAJcmV0dXJuIDA7CiAKICBlcnJfZnJlZV9pcnE6CkBAIC0xMTk1LDcgKzEyMzksNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaTgwNDJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaTgwNDJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBlcnJvcjsKIApAQCAtMTI1MSwxNCArMTI5NSwxMiBAQAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJpODA0MiIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmaTgwNDJfcG1fb3BzLAorI2VuZGlmCiAJfSwKLQkucHJvYmUJCT0gaTgwNDJfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChpODA0Ml9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IGk4MDQyX3NodXRkb3duLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gaTgwNDJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGk4MDQyX3Jlc3VtZSwKLSNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTgwNDJfaW5pdCh2b2lkKQpAQCAtMTI3NSwyOCArMTMxNywyOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3BsYXRmb3JtX2V4aXQ7CiAKLQllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcGxhdGZvcm1fZXhpdDsKLQogCWk4MDQyX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiaTgwNDIiLCAtMSk7CiAJaWYgKCFpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfdW5yZWdpc3Rlcl9kcml2ZXI7CisJCWdvdG8gZXJyX3BsYXRmb3JtX2V4aXQ7CiAJfQogCiAJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2aWNlOwogCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZpODA0Ml9kcml2ZXIsIGk4MDQyX3Byb2JlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9kZWxfZGV2aWNlOworCiAJcGFuaWNfYmxpbmsgPSBpODA0Ml9wYW5pY19ibGluazsKIAogCXJldHVybiAwOwogCisgZXJyX2RlbF9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX2RlbChpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpOwogIGVycl9mcmVlX2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KGk4MDQyX3BsYXRmb3JtX2RldmljZSk7Ci0gZXJyX3VucmVnaXN0ZXJfZHJpdmVyOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOwogIGVycl9wbGF0Zm9ybV9leGl0OgogCWk4MDQyX3BsYXRmb3JtX2V4aXQoKTsKIApAQCAtMTMwNSw4ICsxMzQ3LDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGk4MDQyX2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGk4MDQyX3BsYXRmb3JtX2RldmljZSk7CiAJaTgwNDJfcGxhdGZvcm1fZXhpdCgpOwogCiAJcGFuaWNfYmxpbmsgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKaW5kZXggYmU1YmJiYi4uM2E5NWI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCkBAIC0xNjEsNyArMTYxLDcgQEAKICAqIHBzMl9jb21tYW5kKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gYSBwcm9jZXNzIGNvbnRleHQKICAqLwogCi1pbnQgcHMyX2NvbW1hbmQoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyICpwYXJhbSwgaW50IGNvbW1hbmQpCitpbnQgX19wczJfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCkKIHsKIAlpbnQgdGltZW91dDsKIAlpbnQgc2VuZCA9IChjb21tYW5kID4+IDEyKSAmIDB4ZjsKQEAgLTE3OSw4ICsxNzksNiBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JbXV0ZXhfbG9jaygmcHMyZGV2LT5jbWRfbXV0ZXgpOwotCiAJc2VyaW9fcGF1c2VfcngocHMyZGV2LT5zZXJpbyk7CiAJcHMyZGV2LT5mbGFncyA9IGNvbW1hbmQgPT0gUFMyX0NNRF9HRVRJRCA/IFBTMl9GTEFHX1dBSVRJRCA6IDA7CiAJcHMyZGV2LT5jbWRjbnQgPSByZWNlaXZlOwpAQCAtMjMxLDcgKzIyOSwxOCBAQAogCXBzMmRldi0+ZmxhZ3MgPSAwOwogCXNlcmlvX2NvbnRpbnVlX3J4KHBzMmRldi0+c2VyaW8pOwogCisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChfX3BzMl9jb21tYW5kKTsKKworaW50IHBzMl9jb21tYW5kKHN0cnVjdCBwczJkZXYgKnBzMmRldiwgdW5zaWduZWQgY2hhciAqcGFyYW0sIGludCBjb21tYW5kKQoreworCWludCByYzsKKworCW11dGV4X2xvY2soJnBzMmRldi0+Y21kX211dGV4KTsKKwlyYyA9IF9fcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgY29tbWFuZCk7CiAJbXV0ZXhfdW5sb2NrKCZwczJkZXYtPmNtZF9tdXRleCk7CisKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MKHBzMl9jb21tYW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCBkNjZmNDk0Li4wMjM2ZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCkBAIC05MzEsMTUgKzkzMSwxMSBAQAogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHICovCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc2VyaW9fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2VyaW9fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNlcmlvICpzZXJpbyA9IHRvX3NlcmlvX3BvcnQoZGV2KTsKIAotCWlmICghc2VyaW8tPnN1c3BlbmRlZCAmJiBzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKQotCQlzZXJpb19jbGVhbnVwKHNlcmlvKTsKLQotCXNlcmlvLT5zdXNwZW5kZWQgPSBzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EIHx8Ci0JCQkgICBzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkU7CisJc2VyaW9fY2xlYW51cChzZXJpbyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk1MiwxMyArOTQ4LDE3IEBACiAJICogRHJpdmVyIHJlY29ubmVjdCBjYW4gdGFrZSBhIHdoaWxlLCBzbyBiZXR0ZXIgbGV0IGtzZXJpb2QKIAkgKiBkZWFsIHdpdGggaXQuCiAJICovCi0JaWYgKHNlcmlvLT5zdXNwZW5kZWQpIHsKLQkJc2VyaW8tPnN1c3BlbmRlZCA9IGZhbHNlOwotCQlzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVDT05ORUNUX1BPUlQpOwotCX0KKwlzZXJpb19xdWV1ZV9ldmVudChzZXJpbywgTlVMTCwgU0VSSU9fUkVDT05ORUNUX1BPUlQpOwogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzZXJpb19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzZXJpb19zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2VyaW9fcmVzdW1lLAorCS5wb3dlcm9mZgk9IHNlcmlvX3N1c3BlbmQsCisJLnJlc3RvcmUJPSBzZXJpb19yZXN1bWUsCit9OwogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKiBjYWxsZWQgZnJvbSBzZXJpb19kcml2ZXItPmNvbm5lY3QvZGlzY29ubmVjdCBtZXRob2RzIHVuZGVyIHNlcmlvX211dGV4ICovCkBAIC0xMDE1LDggKzEwMTUsNyBAQAogCS5yZW1vdmUJCT0gc2VyaW9fZHJpdmVyX3JlbW92ZSwKIAkuc2h1dGRvd24JPSBzZXJpb19zaHV0ZG93biwKICNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNlcmlvX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzZXJpb19yZXN1bWUsCisJLnBtCQk9ICZzZXJpb19wbV9vcHMsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZwppbmRleCA3MmUyNzEyLi44N2ExYWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCkBAIC0zNjYsMTEgKzM2NiwxMSBAQAogCSAgYmUgY2FsbGVkIGF0bWVsLXdtOTd4eC4KIAogY29uZmlnIFRPVUNIU0NSRUVOX1dNOTdYWF9NQUlOU1RPTkUKLQl0cmlzdGF0ZSAiV005N3h4IE1haW5zdG9uZSBhY2NlbGVyYXRlZCB0b3VjaCIKKwl0cmlzdGF0ZSAiV005N3h4IE1haW5zdG9uZS9QYWxtIGFjY2VsZXJhdGVkIHRvdWNoIgogCWRlcGVuZHMgb24gVE9VQ0hTQ1JFRU5fV005N1hYICYmIEFSQ0hfUFhBCiAJaGVscAogCSAgU2F5IFkgaGVyZSBmb3Igc3VwcG9ydCBmb3Igc3RyZWFtaW5nIG1vZGUgd2l0aCBXTTk3eHggdG91Y2hzY3JlZW5zCi0JICBvbiBNYWluc3RvbmUgc3lzdGVtcy4KKwkgIG9uIE1haW5zdG9uZSwgUGFsbSBUdW5nc3RlbiBUNSwgVFggYW5kIExpZmVEcml2ZSBzeXN0ZW1zLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCkBAIC00MDYsNiArNDA2LDcgQEAKIAkgIC0gSVJUT1VDSFNZU1RFTVMvVU5JVE9QCiAJICAtIElkZWFsVEVLIFVSVEMxMDAwCiAJICAtIEdvVG9wIFN1cGVyX1EyL0dvZ29QZW4vUGVuUG93ZXIgdGFibGV0cworCSAgLSBKQVNURUMgVVNCIFRvdWNoIENvbnRyb2xsZXIvRGlnaVRlY2ggRFRSLTAyVQogCiAJICBIYXZlIGEgbG9vayBhdCA8aHR0cDovL2xpbnV4LmNoYXB0ZXI3LmNoL3RvdWNoa2l0Lz4gZm9yCiAJICBhIHVzYWdlIGRlc2NyaXB0aW9uIGFuZCB0aGUgcmVxdWlyZWQgdXNlci1zcGFjZSBzdHVmZi4KQEAgLTQ2OCw2ICs0NjksMTYgQEAKIAlib29sICJHb1RvcCBTdXBlcl9RMi9Hb2dvUGVuL1BlblBvd2VyIHRhYmxldCBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKIAorY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9KQVNURUMKKwlkZWZhdWx0IHkKKwlib29sICJKQVNURUMvRGlnaVRlY2ggRFRSLTAyVSBVU0IgdG91Y2ggY29udHJvbGxlciBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKKworY29uZmlnIFRPVUNIU0NSRUVOX1VTQl9FMkkKKwlkZWZhdWx0IHkKKwlib29sICJlMmkgVG91Y2hzY3JlZW4gY29udHJvbGxlciAoZS5nLiBmcm9tIE1pbW8gNzQwKSIKKwlkZXBlbmRzIG9uIFRPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUKKwogY29uZmlnIFRPVUNIU0NSRUVOX1RPVUNISVQyMTMKIAl0cmlzdGF0ZSAiU2FoYXJhIFRvdWNoSVQtMjEzIHRvdWNoc2NyZWVuIgogCXNlbGVjdCBTRVJJTwpAQCAtNDkyLDYgKzUwMyw3IEBACiAKIGNvbmZpZyBUT1VDSFNDUkVFTl9XOTBYOTAwCiAJdHJpc3RhdGUgIlc5MFA5MTAgdG91Y2hzY3JlZW4gZHJpdmVyIgorCWRlcGVuZHMgb24gSEFWRV9DTEsKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgVzkwUDkxMCBiYXNlZCB0b3VjaHNjcmVlbi4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYXRtZWxfdHNhZGNjLmMKaW5kZXggMDU1OTY5ZS4uOWM3ZmNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hdG1lbF90c2FkY2MuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2F0bWVsX3RzYWRjYy5jCkBAIC0yMDQsMTQgKzIwNCwxNCBAQAogCQlnb3RvIGVycl9mcmVlX2RldjsKIAl9CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQkiYXRtZWwgdHNhZGNjIHJlZ3MiKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXNvdXJjZXMgaXMgdW5hdmFpbGFibGUuXG4iKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9mcmVlX2RldjsKIAl9CiAKLQl0c2NfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJdHNjX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF0c2NfYmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycy5cbiIpOwogCQllcnIgPSAtRU5PTUVNOwpAQCAtMjg2LDcgKzI4Niw3IEBACiBlcnJfdW5tYXBfcmVnczoKIAlpb3VubWFwKHRzY19iYXNlKTsKIGVycl9yZWxlYXNlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiBlcnJfZnJlZV9kZXY6CiAJaW5wdXRfZnJlZV9kZXZpY2UodHNfZGV2LT5pbnB1dCk7CiBlcnJfZnJlZV9tZW06CkBAIC0zMDUsNyArMzA1LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaW91bm1hcCh0c2NfYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCiAJY2xrX2Rpc2FibGUodHNfZGV2LT5jbGspOwogCWNsa19wdXQodHNfZGV2LT5jbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lZXRpX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VldGlfdHMuYwppbmRleCAzYWI5MjIyLi45MDI5YmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VldGlfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2VldGlfdHMuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L2VldGlfdHMuaD4KIAogc3RhdGljIGludCBmbGlwX3g7CiBtb2R1bGVfcGFyYW0oZmxpcF94LCBib29sLCAwNjQ0KTsKQEAgLTQ2LDcgKzQ3LDcgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0JaW50IGlycTsKKwlpbnQgaXJxLCBpcnFfYWN0aXZlX2hpZ2g7CiB9OwogCiAjZGVmaW5lIEVFVElfVFNfQklUREVQVEgJKDExKQpAQCAtNTgsNiArNTksMTEgQEAKICNkZWZpbmUgUkVQT1JUX0JJVF9IQVNfUFJFU1NVUkUJKDEgPDwgNikKICNkZWZpbmUgUkVQT1JUX1JFU19CSVRTKHYpCSgoKHYpID4+IDEpICsgRUVUSV9UU19CSVRERVBUSCkKIAorc3RhdGljIGlubGluZSBpbnQgZWV0aV90c19pcnFfYWN0aXZlKHN0cnVjdCBlZXRpX3RzX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKGlycV90b19ncGlvKHByaXYtPmlycSkpID09IHByaXYtPmlycV9hY3RpdmVfaGlnaDsKK30KKwogc3RhdGljIHZvaWQgZWV0aV90c19yZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAljaGFyIGJ1Zls2XTsKQEAgLTY3LDcgKzczLDcgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCXdoaWxlICghZ3Bpb19nZXRfdmFsdWUoaXJxX3RvX2dwaW8ocHJpdi0+aXJxKSkgJiYgLS10bykKKwl3aGlsZSAoZWV0aV90c19pcnFfYWN0aXZlKHByaXYpICYmIC0tdG8pCiAJCWkyY19tYXN0ZXJfcmVjdihwcml2LT5jbGllbnQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAJaWYgKCF0bykgewpAQCAtMTQwLDggKzE0NiwxMCBAQAogc3RhdGljIGludCBfX2RldmluaXQgZWV0aV90c19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZHApCiB7CisJc3RydWN0IGVldGlfdHNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IGVldGlfdHNfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwl1bnNpZ25lZCBpbnQgaXJxX2ZsYWdzOwogCWludCBlcnIgPSAtRU5PTUVNOwogCiAJLyogSW4gY29udHJhc3QgdG8gd2hhdCdzIGRlc2NyaWJlZCBpbiB0aGUgZGF0YXNoZWV0LCB0aGVyZSBzZWVtcwpAQCAtMTgwLDYgKzE4OCwxNCBAQAogCXByaXYtPmlucHV0ID0gaW5wdXQ7CiAJcHJpdi0+aXJxID0gY2xpZW50LT5pcnE7CiAKKwlwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRhdGEpCisJCXByaXYtPmlycV9hY3RpdmVfaGlnaCA9IHBkYXRhLT5pcnFfYWN0aXZlX2hpZ2g7CisKKwlpcnFfZmxhZ3MgPSBwcml2LT5pcnFfYWN0aXZlX2hpZ2ggPworCQlJUlFGX1RSSUdHRVJfUklTSU5HIDogSVJRRl9UUklHR0VSX0ZBTExJTkc7CisKIAlJTklUX1dPUksoJnByaXYtPndvcmssIGVldGlfdHNfcmVhZCk7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcHJpdik7CiAJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIHByaXYpOwpAQCAtMTg4LDcgKzIwNCw3IEBACiAJaWYgKGVycikKIAkJZ290byBlcnIxOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxLCBlZXRpX3RzX2lzciwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxLCBlZXRpX3RzX2lzciwgaXJxX2ZsYWdzLAogCQkJICBjbGllbnQtPm5hbWUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCB0b3VjaHNjcmVlbiBJUlEuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYwppbmRleCA0ZDMxMzllLi5iNGQ3ZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCkBAIC0xNDgsOSArMTQ4LDEwIEBACiAJc3RydWN0IGgzNjAwX2RldiAqdHMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJLyogTXVzdCBiZSBpbiB0aGlzIG9yZGVyICovCi0JdHMtPnNlcmlvLT53cml0ZSh0cy0+c2VyaW8sIDEpOwotCXRzLT5zZXJpby0+d3JpdGUodHMtPnNlcmlvLCBwd3IpOwotCXRzLT5zZXJpby0+d3JpdGUodHMtPnNlcmlvLCBicmlnaHRuZXNzKTsKKwlzZXJpb193cml0ZSh0cy0+c2VyaW8sIDEpOworCXNlcmlvX3dyaXRlKHRzLT5zZXJpbywgcHdyKTsKKwlzZXJpb193cml0ZSh0cy0+c2VyaW8sIGJyaWdodG5lc3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2Miw3ICsyNjMsNyBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgRVZfTEVEOiB7Ci0JCS8vCXRzLT5zZXJpby0+d3JpdGUodHMtPnNlcmlvLCBTT01FX0NNRCk7CisJCS8vCXNlcmlvX3dyaXRlKHRzLT5zZXJpbywgU09NRV9DTUQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21haW5zdG9uZS13bTk3eHguYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jCmluZGV4IDRjYzA0N2EuLjhmYzNiMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWFpbnN0b25lLXdtOTd4eC5jCkBAIC0zMSw5ICszMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dtOTd4eC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCiAjaW5jbHVkZSA8bWFjaC9yZWdzLWFjOTcuaD4KIAotI2RlZmluZSBWRVJTSU9OCQkiMC4xMyIKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiBzdHJ1Y3QgY29udGludW91cyB7CiAJdTE2IGlkOyAgICAvKiBjb2RlYyBpZCAqLwpAQCAtNjIsNiArNjQsNyBAQAogLyogY29udGludW91cyBzcGVlZCBpbmRleCAqLwogc3RhdGljIGludCBzcF9pZHg7CiBzdGF0aWMgdTE2IGxhc3QsIHRyaWVzOworc3RhdGljIGludCBpcnE7CiAKIC8qCiAgKiBQZW4gc2FtcGxpbmcgZnJlcXVlbmN5IChIeikgaW4gY29udGludW91cyBtb2RlLgpAQCAtMTcxLDcgKzE3NCw3IEBACiAKIHN0YXRpYyBpbnQgd205N3h4X2FjY19zdGFydHVwKHN0cnVjdCB3bTk3eHggKndtKQogewotCWludCBpZHggPSAwOworCWludCBpZHggPSAwLCByZXQgPSAwOwogCiAJLyogY2hlY2sgd2UgaGF2ZSBhIGNvZGVjICovCiAJaWYgKHdtLT5hYzk3ID09IE5VTEwpCkBAIC0xOTEsMTggKzE5NCw0MCBAQAogCQkgIm1haW5zdG9uZSBhY2NlbGVyYXRlZCB0b3VjaHNjcmVlbiBkcml2ZXIsICVkIHNhbXBsZXMvc2VjXG4iLAogCQkgY2luZm9bc3BfaWR4XS5zcGVlZCk7CiAKKwkvKiBJUlEgZHJpdmVuIHRvdWNoc2NyZWVuIGlzIHVzZWQgb24gUGFsbSBoYXJkd2FyZSAqLworCWlmIChtYWNoaW5lX2lzX3BhbG10NSgpIHx8IG1hY2hpbmVfaXNfcGFsbXR4KCkgfHwgbWFjaGluZV9pc19wYWxtbGQoKSkgeworCQlwZW5faW50ID0gMTsKKwkJaXJxID0gMjc7CisJCS8qIFRoZXJlIGlzIHNvbWUgb2JzY3VyZSBtdXRhbnQgb2YgV005NzEyIGludGVyYnJlZCB3aXRoIFdNOTcxMworCQkgKiB1c2VkIG9uIFBhbG0gSFcgKi8KKwkJd20tPnZhcmlhbnQgPSBXTTk3eHhfV00xNjEzOworCX0gZWxzZSBpZiAobWFjaGluZV9pc19tYWluc3RvbmUoKSAmJiBwZW5faW50KQorCQlpcnEgPSA0OworCisJaWYgKGlycSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoaXJxLCAiVG91Y2hzY3JlZW4gSVJRIik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChpcnEpOworCQlpZiAocmV0KSB7CisJCQlncGlvX2ZyZWUoaXJxKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJd20tPnBlbl9pcnEgPSBncGlvX3RvX2lycShpcnEpOworCQlzZXRfaXJxX3R5cGUod20tPnBlbl9pcnEsIElSUV9UWVBFX0VER0VfQk9USCk7CisJfSBlbHNlIC8qIHBlbiBpcnEgbm90IHN1cHBvcnRlZCAqLworCQlwZW5faW50ID0gMDsKKwogCS8qIGNvZGVjIHNwZWNpZmljIGlycSBjb25maWcgKi8KIAlpZiAocGVuX2ludCkgewogCQlzd2l0Y2ggKHdtLT5pZCkgewogCQljYXNlIFdNOTcwNV9JRDI6Ci0JCQl3bS0+cGVuX2lycSA9IElSUV9HUElPKDQpOwotCQkJc2V0X2lycV90eXBlKElSUV9HUElPKDQpLCBJUlFfVFlQRV9FREdFX0JPVEgpOwogCQkJYnJlYWs7CiAJCWNhc2UgV005NzEyX0lEMjoKIAkJY2FzZSBXTTk3MTNfSUQyOgotCQkJLyogZW5hYmxlIHBlbiBkb3duIGludGVycnVwdCAqLwogCQkJLyogdXNlIFBFTl9ET1dOIEdQSU8gMTMgdG8gYXNzZXJ0IElSUSBvbiBHUElPIGxpbmUgMiAqLwotCQkJd20tPnBlbl9pcnEgPSBNQUlOU1RPTkVfQUM5N19JUlE7CiAJCQl3bTk3eHhfY29uZmlnX2dwaW8od20sIFdNOTdYWF9HUElPXzEzLCBXTTk3WFhfR1BJT19JTiwKIAkJCQkJICAgV005N1hYX0dQSU9fUE9MX0hJR0gsCiAJCQkJCSAgIFdNOTdYWF9HUElPX1NUSUNLWSwKQEAgLTIyMCwyMyArMjQ1LDE3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB3bTk3eHhfYWNjX3NodXRkb3duKHN0cnVjdCB3bTk3eHggKndtKQogewogCS8qIGNvZGVjIHNwZWNpZmljIGRlY29uZmlnICovCiAJaWYgKHBlbl9pbnQpIHsKLQkJc3dpdGNoICh3bS0+aWQgJiAweGZmZmYpIHsKLQkJY2FzZSBXTTk3MDVfSUQyOgotCQkJd20tPnBlbl9pcnEgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgV005NzEyX0lEMjoKLQkJY2FzZSBXTTk3MTNfSUQyOgotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KLQkJCXdtLT5wZW5faXJxID0gMDsKLQkJCWJyZWFrOwotCQl9CisJCWlmIChpcnEpCisJCQlncGlvX2ZyZWUoaXJxKTsKKwkJd20tPnBlbl9pcnEgPSAwOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90c2MyMDA3LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYwppbmRleCA4ODBmNThjLi43ZWYwZDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RzYzIwMDcuYwpAQCAtMjEsMTUgKzIxLDE0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHNjMjAwNy5oPgogCi0jZGVmaW5lIFRTX1BPTExfREVMQVkJKDEwICogMTAwMCkJLyogbnMgZGVsYXkgYmVmb3JlIHRoZSBmaXJzdCBzYW1wbGUgKi8KLSNkZWZpbmUgVFNfUE9MTF9QRVJJT0QJKDUgKiAxMDAwKQkvKiBucyBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKi8KKyNkZWZpbmUgVFNfUE9MTF9ERUxBWQkJCTEgLyogbXMgZGVsYXkgYmV0d2VlbiBzYW1wbGVzICovCisjZGVmaW5lIFRTX1BPTExfUEVSSU9ECQkJMSAvKiBtcyBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKi8KIAogI2RlZmluZSBUU0MyMDA3X01FQVNVUkVfVEVNUDAJCSgweDAgPDwgNCkKICNkZWZpbmUgVFNDMjAwN19NRUFTVVJFX0FVWAkJKDB4MiA8PCA0KQpAQCAtNzAsMTcgKzY5LDE0IEBACiBzdHJ1Y3QgdHNjMjAwNyB7CiAJc3RydWN0IGlucHV0X2RldgkqaW5wdXQ7CiAJY2hhcgkJCXBoeXNbMzJdOwotCXN0cnVjdCBocnRpbWVyCQl0aW1lcjsKLQlzdHJ1Y3QgdHNfZXZlbnQJCXRjOworCXN0cnVjdCBkZWxheWVkX3dvcmsJd29yazsKIAogCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CiAKLQlzcGlubG9ja190CQlsb2NrOwotCiAJdTE2CQkJbW9kZWw7CiAJdTE2CQkJeF9wbGF0ZV9vaG1zOwogCi0JdW5zaWduZWQJCXBlbmRvd247CisJYm9vbAkJCXBlbmRvd247CiAJaW50CQkJaXJxOwogCiAJaW50CQkJKCpnZXRfcGVuZG93bl9zdGF0ZSkodm9pZCk7CkBAIC0xMDksNTIgKzEwNSw5NiBAQAogCXJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIHRzYzIwMDdfc2VuZF9ldmVudCh2b2lkICp0c2MpCitzdGF0aWMgdm9pZCB0c2MyMDA3X3JlYWRfdmFsdWVzKHN0cnVjdCB0c2MyMDA3ICp0c2MsIHN0cnVjdCB0c19ldmVudCAqdGMpCiB7Ci0Jc3RydWN0IHRzYzIwMDcJKnRzID0gdHNjOwotCXUzMgkJcnQ7Ci0JdTE2CQl4LCB5LCB6MSwgejI7CisJLyogeS0gc3RpbGwgb247IHR1cm4gb24gb25seSB5KyAoYW5kIEFEQykgKi8KKwl0Yy0+eSA9IHRzYzIwMDdfeGZlcih0c2MsIFJFQURfWSk7CiAKLQl4ID0gdHMtPnRjLng7Ci0JeSA9IHRzLT50Yy55OwotCXoxID0gdHMtPnRjLnoxOwotCXoyID0gdHMtPnRjLnoyOworCS8qIHR1cm4geS0gb2ZmLCB4KyBvbiwgdGhlbiBsZWF2ZSBpbiBsb3dwb3dlciAqLworCXRjLT54ID0gdHNjMjAwN194ZmVyKHRzYywgUkVBRF9YKTsKKworCS8qIHR1cm4geSsgb2ZmLCB4LSBvbjsgd2UnbGwgdXNlIGZvcm11bGEgIzEgKi8KKwl0Yy0+ejEgPSB0c2MyMDA3X3hmZXIodHNjLCBSRUFEX1oxKTsKKwl0Yy0+ejIgPSB0c2MyMDA3X3hmZXIodHNjLCBSRUFEX1oyKTsKKworCS8qIFByZXBhcmUgZm9yIG5leHQgdG91Y2ggcmVhZGluZyAtIHBvd2VyIGRvd24gQURDLCBlbmFibGUgUEVOSVJRICovCisJdHNjMjAwN194ZmVyKHRzYywgUFdSRE9XTik7Cit9CisKK3N0YXRpYyB1MzIgdHNjMjAwN19jYWxjdWxhdGVfcHJlc3N1cmUoc3RydWN0IHRzYzIwMDcgKnRzYywgc3RydWN0IHRzX2V2ZW50ICp0YykKK3sKKwl1MzIgcnQgPSAwOwogCiAJLyogcmFuZ2UgZmlsdGVyaW5nICovCi0JaWYgKHggPT0gTUFYXzEyQklUKQotCQl4ID0gMDsKKwlpZiAodGMtPnggPT0gTUFYXzEyQklUKQorCQl0Yy0+eCA9IDA7CiAKLQlpZiAobGlrZWx5KHggJiYgejEpKSB7CisJaWYgKGxpa2VseSh0Yy0+eCAmJiB0Yy0+ejEpKSB7CiAJCS8qIGNvbXB1dGUgdG91Y2ggcHJlc3N1cmUgcmVzaXN0YW5jZSB1c2luZyBlcXVhdGlvbiAjMSAqLwotCQlydCA9IHoyOwotCQlydCAtPSB6MTsKLQkJcnQgKj0geDsKLQkJcnQgKj0gdHMtPnhfcGxhdGVfb2htczsKLQkJcnQgLz0gejE7CisJCXJ0ID0gdGMtPnoyIC0gdGMtPnoxOworCQlydCAqPSB0Yy0+eDsKKwkJcnQgKj0gdHNjLT54X3BsYXRlX29obXM7CisJCXJ0IC89IHRjLT56MTsKIAkJcnQgPSAocnQgKyAyMDQ3KSA+PiAxMjsKLQl9IGVsc2UKLQkJcnQgPSAwOwotCi0JLyogU2FtcGxlIGZvdW5kIGluY29uc2lzdGVudCBieSBkZWJvdW5jaW5nIG9yIHByZXNzdXJlIGlzIGJleW9uZAotCSAqIHRoZSBtYXhpbXVtLiBEb24ndCByZXBvcnQgaXQgdG8gdXNlciBzcGFjZSwgcmVwZWF0IGF0IGxlYXN0Ci0JICogb25jZSBtb3JlIHRoZSBtZWFzdXJlbWVudAotCSAqLwotCWlmIChydCA+IE1BWF8xMkJJVCkgewotCQlkZXZfZGJnKCZ0cy0+Y2xpZW50LT5kZXYsICJpZ25vcmVkIHByZXNzdXJlICVkXG4iLCBydCk7Ci0KLQkJaHJ0aW1lcl9zdGFydCgmdHMtPnRpbWVyLCBrdGltZV9zZXQoMCwgVFNfUE9MTF9QRVJJT0QpLAotCQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JCXJldHVybjsKIAl9CiAKLQkvKiBOT1RFOiBXZSBjYW4ndCByZWx5IG9uIHRoZSBwcmVzc3VyZSB0byBkZXRlcm1pbmUgdGhlIHBlbiBkb3duCi0JICogc3RhdGUsIGV2ZW4gdGhpcyBjb250cm9sbGVyIGhhcyBhIHByZXNzdXJlIHNlbnNvci4gIFRoZSBwcmVzc3VyZQotCSAqIHZhbHVlIGNhbiBmbHVjdHVhdGUgZm9yIHF1aXRlIGEgd2hpbGUgYWZ0ZXIgbGlmdGluZyB0aGUgcGVuIGFuZAotCSAqIGluIHNvbWUgY2FzZXMgbWF5IG5vdCBldmVuIHNldHRsZSBhdCB0aGUgZXhwZWN0ZWQgdmFsdWUuCisJcmV0dXJuIHJ0OworfQorCitzdGF0aWMgdm9pZCB0c2MyMDA3X3NlbmRfdXBfZXZlbnQoc3RydWN0IHRzYzIwMDcgKnRzYykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHRzYy0+aW5wdXQ7CisKKwlkZXZfZGJnKCZ0c2MtPmNsaWVudC0+ZGV2LCAiVVBcbiIpOworCisJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIDApOworCWlucHV0X3N5bmMoaW5wdXQpOworfQorCitzdGF0aWMgdm9pZCB0c2MyMDA3X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB0c2MyMDA3ICp0cyA9CisJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCB0c2MyMDA3LCB3b3JrKTsKKwlzdHJ1Y3QgdHNfZXZlbnQgdGM7CisJdTMyIHJ0OworCisJLyoKKwkgKiBOT1RFOiBXZSBjYW4ndCByZWx5IG9uIHRoZSBwcmVzc3VyZSB0byBkZXRlcm1pbmUgdGhlIHBlbiBkb3duCisJICogc3RhdGUsIGV2ZW4gdGhvdWdoIHRoaXMgY29udHJvbGxlciBoYXMgYSBwcmVzc3VyZSBzZW5zb3IuCisJICogVGhlIHByZXNzdXJlIHZhbHVlIGNhbiBmbHVjdHVhdGUgZm9yIHF1aXRlIGEgd2hpbGUgYWZ0ZXIKKwkgKiBsaWZ0aW5nIHRoZSBwZW4gYW5kIGluIHNvbWUgY2FzZXMgbWF5IG5vdCBldmVuIHNldHRsZSBhdCB0aGUKKwkgKiBleHBlY3RlZCB2YWx1ZS4KIAkgKgogCSAqIFRoZSBvbmx5IHNhZmUgd2F5IHRvIGNoZWNrIGZvciB0aGUgcGVuIHVwIGNvbmRpdGlvbiBpcyBpbiB0aGUKLQkgKiB0aW1lciBieSByZWFkaW5nIHRoZSBwZW4gc2lnbmFsIHN0YXRlIChpdCdzIGEgR1BJTyBfYW5kXyBJUlEpLgorCSAqIHdvcmsgZnVuY3Rpb24gYnkgcmVhZGluZyB0aGUgcGVuIHNpZ25hbCBzdGF0ZSAoaXQncyBhIEdQSU8KKwkgKiBhbmQgSVJRKS4gVW5mb3J0dW5hdGVseSBzdWNoIGNhbGxiYWNrIGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlLAorCSAqIGluIHRoYXQgY2FzZSB3ZSBoYXZlIHJlbHkgb24gdGhlIHByZXNzdXJlIGFueXdheS4KIAkgKi8KKwlpZiAodHMtPmdldF9wZW5kb3duX3N0YXRlKSB7CisJCWlmICh1bmxpa2VseSghdHMtPmdldF9wZW5kb3duX3N0YXRlKCkpKSB7CisJCQl0c2MyMDA3X3NlbmRfdXBfZXZlbnQodHMpOworCQkJdHMtPnBlbmRvd24gPSBmYWxzZTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZGV2X2RiZygmdHMtPmNsaWVudC0+ZGV2LCAicGVuIGlzIHN0aWxsIGRvd25cbiIpOworCX0KKworCXRzYzIwMDdfcmVhZF92YWx1ZXModHMsICZ0Yyk7CisKKwlydCA9IHRzYzIwMDdfY2FsY3VsYXRlX3ByZXNzdXJlKHRzLCAmdGMpOworCWlmIChydCA+IE1BWF8xMkJJVCkgeworCQkvKgorCQkgKiBTYW1wbGUgZm91bmQgaW5jb25zaXN0ZW50IGJ5IGRlYm91bmNpbmcgb3IgcHJlc3N1cmUgaXMKKwkJICogYmV5b25kIHRoZSBtYXhpbXVtLiBEb24ndCByZXBvcnQgaXQgdG8gdXNlciBzcGFjZSwKKwkJICogcmVwZWF0IGF0IGxlYXN0IG9uY2UgbW9yZSB0aGUgbWVhc3VyZW1lbnQuCisJCSAqLworCQlkZXZfZGJnKCZ0cy0+Y2xpZW50LT5kZXYsICJpZ25vcmVkIHByZXNzdXJlICVkXG4iLCBydCk7CisJCWdvdG8gb3V0OworCisJfQorCiAJaWYgKHJ0KSB7CiAJCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gdHMtPmlucHV0OwogCkBAIC0xNjIsMTAyICsyMDIsNzQgQEAKIAkJCWRldl9kYmcoJnRzLT5jbGllbnQtPmRldiwgIkRPV05cbiIpOwogCiAJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fVE9VQ0gsIDEpOwotCQkJdHMtPnBlbmRvd24gPSAxOworCQkJdHMtPnBlbmRvd24gPSB0cnVlOwogCQl9CiAKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIHgpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWSwgeSk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19YLCB0Yy54KTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1ksIHRjLnkpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfUFJFU1NVUkUsIHJ0KTsKIAogCQlpbnB1dF9zeW5jKGlucHV0KTsKIAogCQlkZXZfZGJnKCZ0cy0+Y2xpZW50LT5kZXYsICJwb2ludCglNGQsJTRkKSwgcHJlc3N1cmUgKCU0dSlcbiIsCi0JCQl4LCB5LCBydCk7CisJCQl0Yy54LCB0Yy55LCBydCk7CisKKwl9IGVsc2UgaWYgKCF0cy0+Z2V0X3BlbmRvd25fc3RhdGUgJiYgdHMtPnBlbmRvd24pIHsKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2ZSBjYWxsYmFjayB0byBjaGVjayBwZW5kb3duIHN0YXRlLCBzbyB3ZQorCQkgKiBoYXZlIHRvIGFzc3VtZSB0aGF0IHNpbmNlIHByZXNzdXJlIHJlcG9ydGVkIGlzIDAgdGhlCisJCSAqIHBlbiB3YXMgbGlmdGVkIHVwLgorCQkgKi8KKwkJdHNjMjAwN19zZW5kX3VwX2V2ZW50KHRzKTsKKwkJdHMtPnBlbmRvd24gPSBmYWxzZTsKIAl9CiAKLQlocnRpbWVyX3N0YXJ0KCZ0cy0+dGltZXIsIGt0aW1lX3NldCgwLCBUU19QT0xMX1BFUklPRCksCi0JCQlIUlRJTUVSX01PREVfUkVMKTsKLX0KLQotc3RhdGljIGludCB0c2MyMDA3X3JlYWRfdmFsdWVzKHN0cnVjdCB0c2MyMDA3ICp0c2MpCi17Ci0JLyogeS0gc3RpbGwgb247IHR1cm4gb24gb25seSB5KyAoYW5kIEFEQykgKi8KLQl0c2MtPnRjLnkgPSB0c2MyMDA3X3hmZXIodHNjLCBSRUFEX1kpOwotCi0JLyogdHVybiB5LSBvZmYsIHgrIG9uLCB0aGVuIGxlYXZlIGluIGxvd3Bvd2VyICovCi0JdHNjLT50Yy54ID0gdHNjMjAwN194ZmVyKHRzYywgUkVBRF9YKTsKLQotCS8qIHR1cm4geSsgb2ZmLCB4LSBvbjsgd2UnbGwgdXNlIGZvcm11bGEgIzEgKi8KLQl0c2MtPnRjLnoxID0gdHNjMjAwN194ZmVyKHRzYywgUkVBRF9aMSk7Ci0JdHNjLT50Yy56MiA9IHRzYzIwMDdfeGZlcih0c2MsIFJFQURfWjIpOwotCi0JLyogcG93ZXIgZG93biAqLwotCXRzYzIwMDdfeGZlcih0c2MsIFBXUkRPV04pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB0c2MyMDA3X3RpbWVyKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCi17Ci0Jc3RydWN0IHRzYzIwMDcgKnRzID0gY29udGFpbmVyX29mKGhhbmRsZSwgc3RydWN0IHRzYzIwMDcsIHRpbWVyKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRzLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkoIXRzLT5nZXRfcGVuZG93bl9zdGF0ZSgpICYmIHRzLT5wZW5kb3duKSkgewotCQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHRzLT5pbnB1dDsKLQotCQlkZXZfZGJnKCZ0cy0+Y2xpZW50LT5kZXYsICJVUFxuIik7Ci0KLQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1RPVUNILCAwKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1BSRVNTVVJFLCAwKTsKLQkJaW5wdXRfc3luYyhpbnB1dCk7Ci0KLQkJdHMtPnBlbmRvd24gPSAwOworIG91dDoKKwlpZiAodHMtPnBlbmRvd24pCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHMtPndvcmssCisJCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhUU19QT0xMX1BFUklPRCkpOworCWVsc2UKIAkJZW5hYmxlX2lycSh0cy0+aXJxKTsKLQl9IGVsc2UgewotCQkvKiBwZW4gaXMgc3RpbGwgZG93biwgY29udGludWUgd2l0aCB0aGUgbWVhc3VyZW1lbnQgKi8KLQkJZGV2X2RiZygmdHMtPmNsaWVudC0+ZGV2LCAicGVuIGlzIHN0aWxsIGRvd25cbiIpOwotCi0JCXRzYzIwMDdfcmVhZF92YWx1ZXModHMpOwotCQl0c2MyMDA3X3NlbmRfZXZlbnQodHMpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRzLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0c2MyMDA3X2lycShpbnQgaXJxLCB2b2lkICpoYW5kbGUpCiB7CiAJc3RydWN0IHRzYzIwMDcgKnRzID0gaGFuZGxlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdHMtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChsaWtlbHkodHMtPmdldF9wZW5kb3duX3N0YXRlKCkpKSB7CisJaWYgKCF0cy0+Z2V0X3BlbmRvd25fc3RhdGUgfHwgbGlrZWx5KHRzLT5nZXRfcGVuZG93bl9zdGF0ZSgpKSkgewogCQlkaXNhYmxlX2lycV9ub3N5bmModHMtPmlycSk7Ci0JCWhydGltZXJfc3RhcnQoJnRzLT50aW1lciwga3RpbWVfc2V0KDAsIFRTX1BPTExfREVMQVkpLAotCQkJCQlIUlRJTUVSX01PREVfUkVMKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0cy0+d29yaywKKwkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKFRTX1BPTExfREVMQVkpKTsKIAl9CiAKIAlpZiAodHMtPmNsZWFyX3BlbmlycSkKIAkJdHMtPmNsZWFyX3BlbmlycSgpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHMtPmxvY2ssIGZsYWdzKTsKLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCB0c2MyMDA3X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCitzdGF0aWMgdm9pZCB0c2MyMDA3X2ZyZWVfaXJxKHN0cnVjdCB0c2MyMDA3ICp0cykKK3sKKwlmcmVlX2lycSh0cy0+aXJxLCB0cyk7CisJaWYgKGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHMtPndvcmspKSB7CisJCS8qCisJCSAqIFdvcmsgd2FzIHBlbmRpbmcsIHRoZXJlZm9yZSB3ZSBuZWVkIHRvIGVuYWJsZQorCQkgKiBJUlEgaGVyZSB0byBiYWxhbmNlIHRoZSBkaXNhYmxlX2lycSgpIGRvbmUgaW4gdGhlCisJCSAqIGludGVycnVwdCBoYW5kbGVyLgorCQkgKi8KKwkJZW5hYmxlX2lycSh0cy0+aXJxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRzYzIwMDdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHRzYzIwMDcgKnRzOwogCXN0cnVjdCB0c2MyMDA3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgZXJyOwogCi0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmdldF9wZW5kb3duX3N0YXRlKSB7CisJaWYgKCFwZGF0YSkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInBsYXRmb3JtIGRhdGEgaXMgcmVxdWlyZWQhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjc0LDIyICsyODYsMTUgQEAKIAl9CiAKIAl0cy0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHRzKTsKLQorCXRzLT5pcnEgPSBjbGllbnQtPmlycTsKIAl0cy0+aW5wdXQgPSBpbnB1dF9kZXY7Ci0KLQlocnRpbWVyX2luaXQoJnRzLT50aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKLQl0cy0+dGltZXIuZnVuY3Rpb24gPSB0c2MyMDA3X3RpbWVyOwotCi0Jc3Bpbl9sb2NrX2luaXQoJnRzLT5sb2NrKTsKKwlJTklUX0RFTEFZRURfV09SSygmdHMtPndvcmssIHRzYzIwMDdfd29yayk7CiAKIAl0cy0+bW9kZWwgICAgICAgICAgICAgPSBwZGF0YS0+bW9kZWw7CiAJdHMtPnhfcGxhdGVfb2htcyAgICAgID0gcGRhdGEtPnhfcGxhdGVfb2htczsKIAl0cy0+Z2V0X3BlbmRvd25fc3RhdGUgPSBwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGU7CiAJdHMtPmNsZWFyX3BlbmlycSAgICAgID0gcGRhdGEtPmNsZWFyX3BlbmlycTsKIAotCXBkYXRhLT5pbml0X3BsYXRmb3JtX2h3KCk7Ci0KIAlzbnByaW50Zih0cy0+cGh5cywgc2l6ZW9mKHRzLT5waHlzKSwKIAkJICIlcy9pbnB1dDAiLCBkZXZfbmFtZSgmY2xpZW50LT5kZXYpKTsKIApAQCAtMzA0LDkgKzMwOSw4IEBACiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMCwgTUFYXzEyQklULCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCwgTUFYXzEyQklULCAwLCAwKTsKIAotCXRzYzIwMDdfcmVhZF92YWx1ZXModHMpOwotCi0JdHMtPmlycSA9IGNsaWVudC0+aXJxOworCWlmIChwZGF0YS0+aW5pdF9wbGF0Zm9ybV9odykKKwkJcGRhdGEtPmluaXRfcGxhdGZvcm1faHcoKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHRzLT5pcnEsIHRzYzIwMDdfaXJxLCAwLAogCQkJY2xpZW50LT5kZXYuZHJpdmVyLT5uYW1lLCB0cyk7CkBAIC0zMTUsMzMgKzMxOSwzOSBAQAogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9CiAKKwkvKiBQcmVwYXJlIGZvciB0b3VjaCByZWFkaW5ncyAtIHBvd2VyIGRvd24gQURDIGFuZCBlbmFibGUgUEVOSVJRICovCisJZXJyID0gdHNjMjAwN194ZmVyKHRzLCBQV1JET1dOKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2lycTsKIAotCWRldl9pbmZvKCZjbGllbnQtPmRldiwgInJlZ2lzdGVyZWQgd2l0aCBpcnEgKCVkKVxuIiwgdHMtPmlycSk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHMpOwogCiAJcmV0dXJuIDA7CiAKICBlcnJfZnJlZV9pcnE6Ci0JZnJlZV9pcnEodHMtPmlycSwgdHMpOwotCWhydGltZXJfY2FuY2VsKCZ0cy0+dGltZXIpOworCXRzYzIwMDdfZnJlZV9pcnEodHMpOworCWlmIChwZGF0YS0+ZXhpdF9wbGF0Zm9ybV9odykKKwkJcGRhdGEtPmV4aXRfcGxhdGZvcm1faHcoKTsKICBlcnJfZnJlZV9tZW06CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZSh0cyk7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB0c2MyMDA3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgdHNjMjAwN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgdHNjMjAwNwkqdHMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgdHNjMjAwN19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgdHNjMjAwN19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JcGRhdGEtPmV4aXRfcGxhdGZvcm1faHcoKTsKKwl0c2MyMDA3X2ZyZWVfaXJxKHRzKTsKIAotCWZyZWVfaXJxKHRzLT5pcnEsIHRzKTsKLQlocnRpbWVyX2NhbmNlbCgmdHMtPnRpbWVyKTsKKwlpZiAocGRhdGEtPmV4aXRfcGxhdGZvcm1faHcpCisJCXBkYXRhLT5leGl0X3BsYXRmb3JtX2h3KCk7CisKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh0cy0+aW5wdXQpOwogCWtmcmVlKHRzKTsKIApAQCAtMzYyLDcgKzM3Miw3IEBACiAJfSwKIAkuaWRfdGFibGUJPSB0c2MyMDA3X2lkdGFibGUsCiAJLnByb2JlCQk9IHRzYzIwMDdfcHJvYmUsCi0JLnJlbW92ZQkJPSB0c2MyMDA3X3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRzYzIwMDdfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHRzYzIwMDdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91Y2IxNDAwX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYwppbmRleCAzYTdhNTgyLi4wOTVmODRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VjYjE0MDBfdHMuYwpAQCAtMTI4LDkgKzEyOCwxMCBAQAogCXJldHVybiB1Y2IxNDAwX2FkY19yZWFkKHVjYi0+YWM5NywgMCwgYWRjc3luYyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHVjYjE0MDBfdHNfcGVuX2Rvd24oc3RydWN0IHNuZF9hYzk3ICphYzk3KQorc3RhdGljIGlubGluZSBpbnQgdWNiMTQwMF90c19wZW5fdXAoc3RydWN0IHNuZF9hYzk3ICphYzk3KQogewogCXVuc2lnbmVkIHNob3J0IHZhbCA9IHVjYjE0MDBfcmVnX3JlYWQoYWM5NywgVUNCX1RTX0NSKTsKKwogCXJldHVybiB2YWwgJiAoVUNCX1RTX0NSX1RTUFhfTE9XIHwgVUNCX1RTX0NSX1RTTVhfTE9XKTsKIH0KIApAQCAtMjA5LDcgKzIxMCw3IEBACiAKIAkJbXNsZWVwKDEwKTsKIAotCQlpZiAodWNiMTQwMF90c19wZW5fZG93bih1Y2ItPmFjOTcpKSB7CisJCWlmICh1Y2IxNDAwX3RzX3Blbl91cCh1Y2ItPmFjOTcpKSB7CiAJCQl1Y2IxNDAwX3RzX2lycV9lbmFibGUodWNiLT5hYzk3KTsKIAogCQkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYwppbmRleCBmYjdjYjliLi42OGVjZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKiAgLSBJZGVhbFRFSyBVUlRDMTAwMAogICogIC0gR2VuZXJhbCBUb3VjaAogICogIC0gR29Ub3AgU3VwZXJfUTIvR29nb1Blbi9QZW5Qb3dlciB0YWJsZXRzCisgKiAgLSBKQVNURUMgVVNCIHRvdWNoIGNvbnRyb2xsZXIvRGlnaVRlY2ggRFRSLTAyVQogICoKICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IGJ5IERhbmllbCBSaXR6IDxkYW5pZWwucml0ekBnbXguY2g+CiAgKiBDb3B5cmlnaHQgKEMpIGJ5IFRvZGQgRS4gSm9obnNvbiAobXRvdWNodXNiLmMpCkBAIC0xMTgsNiArMTE5LDggQEAKIAlERVZUWVBFX0lERUFMVEVLLAogCURFVlRZUEVfR0VORVJBTF9UT1VDSCwKIAlERVZUWVBFX0dPVE9QLAorCURFVlRZUEVfSkFTVEVDLAorCURFVlRZUEVfRTJJLAogfTsKIAogI2RlZmluZSBVU0JfREVWSUNFX0hJRF9DTEFTUyh2ZW5kLCBwcm9kKSBcCkBAIC0xOTEsMTEgKzE5NCw1MSBAQAogCXtVU0JfREVWSUNFKDB4MDhmMiwgMHgwMGY0KSwgLmRyaXZlcl9pbmZvID0gREVWVFlQRV9HT1RPUH0sCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfSkFTVEVDCisJe1VTQl9ERVZJQ0UoMHgwZjkyLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0pBU1RFQ30sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRTJJCisJe1VTQl9ERVZJQ0UoMHgxYWM3LCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0UySX0sCisjZW5kaWYKIAl7fQogfTsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGUyaSBQYXJ0CisgKi8KKworI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRTJJCitzdGF0aWMgaW50IGUyaV9pbml0KHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNidG91Y2gtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2J0b3VjaC0+dWRldiwgMCksCisJICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDIsIDB4MDAwMCwgMHgwMDgxLAorCSAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisKKwlkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gRTJJX1JFU0VUIC0gYnl0ZXN8ZXJyOiAlZCIsCisJICAgIF9fZnVuY19fLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZTJpX3JlYWRfZGF0YShzdHJ1Y3QgdXNidG91Y2hfdXNiICpkZXYsIHVuc2lnbmVkIGNoYXIgKnBrdCkKK3sKKwlpbnQgdG1wID0gKHBrdFswXSA8PCA4KSB8IHBrdFsxXTsKKwlkZXYtPnggID0gKHBrdFsyXSA8PCA4KSB8IHBrdFszXTsKKwlkZXYtPnkgID0gKHBrdFs0XSA8PCA4KSB8IHBrdFs1XTsKKworCXRtcCA9IHRtcCAtIDB4QTAwMDsKKwlkZXYtPnRvdWNoID0gKHRtcCA+IDApOworCWRldi0+cHJlc3MgPSAodG1wID4gMCA/IHRtcCA6IDApOworCisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGVHYWxheCBwYXJ0CiAgKi8KIApAQCAtNTU5LDYgKzYwMiwyMSBAQAogCWRldi0+eCA9ICgocGt0WzFdICYgMHgzOCkgPDwgNCkgfCBwa3RbMl07CiAJZGV2LT55ID0gKChwa3RbMV0gJiAweDA3KSA8PCA3KSB8IHBrdFszXTsKIAlkZXYtPnRvdWNoID0gcGt0WzBdICYgMHgwMTsKKworCXJldHVybiAxOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSkFTVEVDIFBhcnQKKyAqLworI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfSkFTVEVDCitzdGF0aWMgaW50IGphc3RlY19yZWFkX2RhdGEoc3RydWN0IHVzYnRvdWNoX3VzYiAqZGV2LCB1bnNpZ25lZCBjaGFyICpwa3QpCit7CisJZGV2LT54ID0gKChwa3RbMF0gJiAweDNmKSA8PCA2KSB8IChwa3RbMl0gJiAweDNmKTsKKwlkZXYtPnkgPSAoKHBrdFsxXSAmIDB4M2YpIDw8IDYpIHwgKHBrdFszXSAmIDB4M2YpOworCWRldi0+dG91Y2ggPSAocGt0WzBdICYgMHg0MCkgPj4gNjsKKwogCXJldHVybiAxOwogfQogI2VuZGlmCkBAIC03MDIsNiArNzYwLDI5IEBACiAJCS5yZWFkX2RhdGEJPSBnb3RvcF9yZWFkX2RhdGEsCiAJfSwKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9KQVNURUMKKwlbREVWVFlQRV9KQVNURUNdID0geworCQkubWluX3hjCQk9IDB4MCwKKwkJLm1heF94YwkJPSAweDBmZmYsCisJCS5taW5feWMJCT0gMHgwLAorCQkubWF4X3ljCQk9IDB4MGZmZiwKKwkJLnJlcHRfc2l6ZQk9IDQsCisJCS5yZWFkX2RhdGEJPSBqYXN0ZWNfcmVhZF9kYXRhLAorCX0sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRTJJCisJW0RFVlRZUEVfRTJJXSA9IHsKKwkJLm1pbl94YwkJPSAweDAsCisJCS5tYXhfeGMJCT0gMHg3ZmZmLAorCQkubWluX3ljCQk9IDB4MCwKKwkJLm1heF95YwkJPSAweDdmZmYsCisJCS5yZXB0X3NpemUJPSA2LAorCQkuaW5pdAkJPSBlMmlfaW5pdCwKKwkJLnJlYWRfZGF0YQk9IGUyaV9yZWFkX2RhdGEsCisJfSwKKyNlbmRpZgogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3c5MHA5MTBfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jCmluZGV4IDYwNzFmNTguLjZjY2JkYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdzkwcDkxMF90cy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC00Nyw4ICs0OCw4IEBACiBzdHJ1Y3QgdzkwcDkxMF90cyB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IGNsayAqY2xrOwogCWludCBpcnFfbnVtOwotCXZvaWQgX19pb21lbSAqY2xvY2tlbjsKIAl2b2lkIF9faW9tZW0gKnRzX3JlZzsKIAlzcGlubG9ja190IGxvY2s7CiAJZW51bSB0c19zdGF0ZSBzdGF0ZTsKQEAgLTE2Niw4ICsxNjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJLyogZW5hYmxlIHRoZSBBREMgY2xvY2sgKi8KLQl2YWwgPSBfX3Jhd19yZWFkbCh3OTBwOTEwX3RzLT5jbG9ja2VuKTsKLQlfX3Jhd193cml0ZWwodmFsIHwgQURDX0NMS19FTiwgdzkwcDkxMF90cy0+Y2xvY2tlbik7CisJY2xrX2VuYWJsZSh3OTBwOTEwX3RzLT5jbGspOwogCiAJX19yYXdfd3JpdGVsKEFEQ19SU1QxLCB3OTBwOTEwX3RzLT50c19yZWcpOwogCW1zbGVlcCgxKTsKQEAgLTIxMSw4ICsyMTEsNyBAQAogCWRlbF90aW1lcl9zeW5jKCZ3OTBwOTEwX3RzLT50aW1lcik7CiAKIAkvKiBzdG9wIHRoZSBBREMgY2xvY2sgKi8KLQl2YWwgPSBfX3Jhd19yZWFkbCh3OTBwOTEwX3RzLT5jbG9ja2VuKTsKLQlfX3Jhd193cml0ZWwodmFsICYgfkFEQ19DTEtfRU4sIHc5MHA5MTBfdHMtPmNsb2NrZW4pOworCWNsa19kaXNhYmxlKHc5MHA5MTBfdHMtPmNsayk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHc5MHg5MDB0c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMjQxLDI2ICsyNDAsMjQgQEAKIAkJZ290byBmYWlsMTsKIAl9CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQlwZGV2LT5uYW1lKSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbDE7CiAJfQogCi0JdzkwcDkxMF90cy0+dHNfcmVnID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwl3OTBwOTEwX3RzLT50c19yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCF3OTBwOTEwX3RzLT50c19yZWcpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsMjsKIAl9CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwotCWlmICghcmVzKSB7Ci0JCWVyciA9IC1FTlhJTzsKKwl3OTBwOTEwX3RzLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIodzkwcDkxMF90cy0+Y2xrKSkgeworCQllcnIgPSBQVFJfRVJSKHc5MHA5MTBfdHMtPmNsayk7CiAJCWdvdG8gZmFpbDM7CiAJfQogCi0JdzkwcDkxMF90cy0+Y2xvY2tlbiA9ICh2b2lkIF9faW9tZW0gKilyZXMtPnN0YXJ0OwotCiAJaW5wdXRfZGV2LT5uYW1lID0gIlc5MFA5MTAgVG91Y2hTY3JlZW4iOwogCWlucHV0X2Rldi0+cGh5cyA9ICJ3OTBwOTEwdHMvZXZlbnQwIjsKIAlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKQEAgLTI4MywyMCArMjgwLDIxIEBACiAJaWYgKHJlcXVlc3RfaXJxKHc5MHA5MTBfdHMtPmlycV9udW0sIHc5MHA5MTBfdHNfaW50ZXJydXB0LAogCQkJSVJRRl9ESVNBQkxFRCwgInc5MHA5MTB0cyIsIHc5MHA5MTBfdHMpKSB7CiAJCWVyciA9IC1FQlVTWTsKLQkJZ290byBmYWlsMzsKKwkJZ290byBmYWlsNDsKIAl9CiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodzkwcDkxMF90cy0+aW5wdXQpOwogCWlmIChlcnIpCi0JCWdvdG8gZmFpbDQ7CisJCWdvdG8gZmFpbDU7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3OTBwOTEwX3RzKTsKIAogCXJldHVybiAwOwogCi1mYWlsNDoJZnJlZV9pcnEodzkwcDkxMF90cy0+aXJxX251bSwgdzkwcDkxMF90cyk7CitmYWlsNToJZnJlZV9pcnEodzkwcDkxMF90cy0+aXJxX251bSwgdzkwcDkxMF90cyk7CitmYWlsNDoJY2xrX3B1dCh3OTBwOTEwX3RzLT5jbGspOwogZmFpbDM6CWlvdW5tYXAodzkwcDkxMF90cy0+dHNfcmVnKTsKLWZhaWwyOglyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CitmYWlsMjoJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiBmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZSh3OTBwOTEwX3RzKTsKIAlyZXR1cm4gZXJyOwpAQCAtMzExLDggKzMwOSwxMCBAQAogCWRlbF90aW1lcl9zeW5jKCZ3OTBwOTEwX3RzLT50aW1lcik7CiAJaW91bm1hcCh3OTBwOTEwX3RzLT50c19yZWcpOwogCisJY2xrX3B1dCh3OTBwOTEwX3RzLT5jbGspOworCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh3OTBwOTEwX3RzLT5pbnB1dCk7CiAJa2ZyZWUodzkwcDkxMF90cyk7CkBAIC0zMjYsNyArMzI2LDcgQEAKIAkucHJvYmUJCT0gdzkweDkwMHRzX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodzkweDkwMHRzX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gInc5MHg5MDAtdHMiLAorCQkubmFtZQk9ICJudWM5MDAtdHMiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKQEAgLTM0Nyw0ICszNDcsNCBAQAogTU9EVUxFX0FVVEhPUigiV2FuIFpvbmdTaHVuIDxtY3Vvcy5jb21AZ21haWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3OTBwOTEwIHRvdWNoIHNjcmVlbiBkcml2ZXIhIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOnc5MHA5MTAtdHMiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bnVjOTAwLXRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKaW5kZXggMmYzM2EwMS4uNTZkYzM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYwpAQCAtMjUsMTggKzI1LDE2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0vKgotICogRGVmaW5pdGlvbnMgJiBnbG9iYWwgYXJyYXlzLgotICovCi0KICNkZWZpbmUgVzgwMDFfTUFYX0xFTkdUSAkxMQotI2RlZmluZSBXODAwMV9QQUNLRVRfTEVOCTExCi0jZGVmaW5lIFc4MDAxX0xFQURfTUFTSyAweDgwCi0jZGVmaW5lIFc4MDAxX0xFQURfQllURSAweDgwCi0jZGVmaW5lIFc4MDAxX1RBQl9NQVNLIDB4NDAKLSNkZWZpbmUgVzgwMDFfVEFCX0JZVEUgMHg0MAorI2RlZmluZSBXODAwMV9MRUFEX01BU0sJCTB4ODAKKyNkZWZpbmUgVzgwMDFfTEVBRF9CWVRFCQkweDgwCisjZGVmaW5lIFc4MDAxX1RBQl9NQVNLCQkweDQwCisjZGVmaW5lIFc4MDAxX1RBQl9CWVRFCQkweDQwCiAKLSNkZWZpbmUgVzgwMDFfUVVFUllfUEFDS0VUIDB4MjAKKyNkZWZpbmUgVzgwMDFfUVVFUllfUEFDS0VUCTB4MjAKKworI2RlZmluZSBXODAwMV9DTURfU1RBUlQJCScxJworI2RlZmluZSBXODAwMV9DTURfUVVFUlkJCScqJwogCiBzdHJ1Y3QgdzgwMDFfY29vcmQgewogCXU4IHJkeTsKQEAgLTU3LDE4ICs1NSwxOSBAQAogc3RydWN0IHc4MDAxIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKLQlzdHJ1Y3QgbXV0ZXggY21kX211dGV4OwogCXN0cnVjdCBjb21wbGV0aW9uIGNtZF9kb25lOwogCWludCBpZDsKIAlpbnQgaWR4OwotCXVuc2lnbmVkIGNoYXIgZXhwZWN0ZWRfcGFja2V0OworCXVuc2lnbmVkIGNoYXIgcmVzcG9uc2VfdHlwZTsKKwl1bnNpZ25lZCBjaGFyIHJlc3BvbnNlW1c4MDAxX01BWF9MRU5HVEhdOwogCXVuc2lnbmVkIGNoYXIgZGF0YVtXODAwMV9NQVhfTEVOR1RIXTsKLQl1bnNpZ25lZCBjaGFyIHJlc3BvbnNlW1c4MDAxX1BBQ0tFVF9MRU5dOwogCWNoYXIgcGh5c1szMl07CiB9OwogCi1zdGF0aWMgaW50IHBhcnNlX2RhdGEodTggKmRhdGEsIHN0cnVjdCB3ODAwMV9jb29yZCAqY29vcmQpCitzdGF0aWMgdm9pZCBwYXJzZV9kYXRhKHU4ICpkYXRhLCBzdHJ1Y3QgdzgwMDFfY29vcmQgKmNvb3JkKQogeworCW1lbXNldChjb29yZCwgMCwgc2l6ZW9mKCpjb29yZCkpOworCiAJY29vcmQtPnJkeSA9IGRhdGFbMF0gJiAweDIwOwogCWNvb3JkLT50c3cgPSBkYXRhWzBdICYgMHgwMTsKIAljb29yZC0+ZjEgPSBkYXRhWzBdICYgMHgwMjsKQEAgLTg3LDE1ICs4NiwxNSBAQAogCiAJY29vcmQtPnRpbHRfeCA9IGRhdGFbN10gJiAweDdGOwogCWNvb3JkLT50aWx0X3kgPSBkYXRhWzhdICYgMHg3RjsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB3ODAwMV9wcm9jZXNzX2RhdGEoc3RydWN0IHc4MDAxICp3ODAwMSwgdW5zaWduZWQgY2hhciBkYXRhKQorc3RhdGljIGlycXJldHVybl90IHc4MDAxX2ludGVycnVwdChzdHJ1Y3Qgc2VyaW8gKnNlcmlvLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgZGF0YSwgdW5zaWduZWQgaW50IGZsYWdzKQogeworCXN0cnVjdCB3ODAwMSAqdzgwMDEgPSBzZXJpb19nZXRfZHJ2ZGF0YShzZXJpbyk7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gdzgwMDEtPmRldjsKLQl1OCB0bXA7CiAJc3RydWN0IHc4MDAxX2Nvb3JkIGNvb3JkOworCXVuc2lnbmVkIGNoYXIgdG1wOwogCiAJdzgwMDEtPmRhdGFbdzgwMDEtPmlkeF0gPSBkYXRhOwogCXN3aXRjaCAodzgwMDEtPmlkeCsrKSB7CkBAIC0xMDUsMTIgKzEwNCwxMyBAQAogCQkJdzgwMDEtPmlkeCA9IDA7CiAJCX0KIAkJYnJlYWs7CisKIAljYXNlIDg6CiAJCXRtcCA9IHc4MDAxLT5kYXRhWzBdICYgVzgwMDFfVEFCX01BU0s7CiAJCWlmICh1bmxpa2VseSh0bXAgPT0gVzgwMDFfVEFCX0JZVEUpKQogCQkJYnJlYWs7CisKIAkJdzgwMDEtPmlkeCA9IDA7Ci0JCW1lbXNldCgmY29vcmQsIDAsIHNpemVvZihjb29yZCkpOwogCQlwYXJzZV9kYXRhKHc4MDAxLT5kYXRhLCAmY29vcmQpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIGNvb3JkLngpOwogCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGNvb3JkLnkpOwpAQCAtMTE4LDg2ICsxMTgsNDggQEAKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgY29vcmQudHN3KTsKIAkJaW5wdXRfc3luYyhkZXYpOwogCQlicmVhazsKKwogCWNhc2UgMTA6CiAJCXc4MDAxLT5pZHggPSAwOwotCQltZW1jcHkodzgwMDEtPnJlc3BvbnNlLCAmdzgwMDEtPmRhdGEsIFc4MDAxX1BBQ0tFVF9MRU4pOwotCQl3ODAwMS0+ZXhwZWN0ZWRfcGFja2V0ID0gVzgwMDFfUVVFUllfUEFDS0VUOworCQltZW1jcHkodzgwMDEtPnJlc3BvbnNlLCB3ODAwMS0+ZGF0YSwgVzgwMDFfTUFYX0xFTkdUSCk7CisJCXc4MDAxLT5yZXNwb25zZV90eXBlID0gVzgwMDFfUVVFUllfUEFDS0VUOwogCQljb21wbGV0ZSgmdzgwMDEtPmNtZF9kb25lKTsKIAkJYnJlYWs7CiAJfQotfQotCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCB3ODAwMV9pbnRlcnJ1cHQoc3RydWN0IHNlcmlvICpzZXJpbywKLQkJdW5zaWduZWQgY2hhciBkYXRhLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHc4MDAxICp3ODAwMSA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKLQotCXc4MDAxX3Byb2Nlc3NfZGF0YSh3ODAwMSwgZGF0YSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgdzgwMDFfYXN5bmNfY29tbWFuZChzdHJ1Y3QgdzgwMDEgKnc4MDAxLCB1bnNpZ25lZCBjaGFyICpwYWNrZXQsCi0JCQkJCWludCBsZW4pCitzdGF0aWMgaW50IHc4MDAxX2NvbW1hbmQoc3RydWN0IHc4MDAxICp3ODAwMSwgdW5zaWduZWQgY2hhciBjb21tYW5kLAorCQkJIGJvb2wgd2FpdF9yZXNwb25zZSkKIHsKLQlpbnQgcmMgPSAtMTsKLQlpbnQgaTsKKwlpbnQgcmM7CiAKLQltdXRleF9sb2NrKCZ3ODAwMS0+Y21kX211dGV4KTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlpZiAoc2VyaW9fd3JpdGUodzgwMDEtPnNlcmlvLCBwYWNrZXRbaV0pKQotCQkJZ290byBvdXQ7Ci0JfQotCXJjID0gMDsKLQotb3V0OgotCW11dGV4X3VubG9jaygmdzgwMDEtPmNtZF9tdXRleCk7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHc4MDAxX2NvbW1hbmQoc3RydWN0IHc4MDAxICp3ODAwMSwgdW5zaWduZWQgY2hhciAqcGFja2V0LCBpbnQgbGVuKQotewotCWludCByYyA9IC0xOwotCWludCBpOwotCi0JbXV0ZXhfbG9jaygmdzgwMDEtPmNtZF9tdXRleCk7Ci0KLQlzZXJpb19wYXVzZV9yeCh3ODAwMS0+c2VyaW8pOworCXc4MDAxLT5yZXNwb25zZV90eXBlID0gMDsKIAlpbml0X2NvbXBsZXRpb24oJnc4MDAxLT5jbWRfZG9uZSk7Ci0Jc2VyaW9fY29udGludWVfcngodzgwMDEtPnNlcmlvKTsKIAotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlpZiAoc2VyaW9fd3JpdGUodzgwMDEtPnNlcmlvLCBwYWNrZXRbaV0pKQotCQkJZ290byBvdXQ7CisJcmMgPSBzZXJpb193cml0ZSh3ODAwMS0+c2VyaW8sIGNvbW1hbmQpOworCWlmIChyYyA9PSAwICYmIHdhaXRfcmVzcG9uc2UpIHsKKworCQl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnc4MDAxLT5jbWRfZG9uZSwgSFopOworCQlpZiAodzgwMDEtPnJlc3BvbnNlX3R5cGUgIT0gVzgwMDFfUVVFUllfUEFDS0VUKQorCQkJcmMgPSAtRUlPOwogCX0KIAotCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmdzgwMDEtPmNtZF9kb25lLCBIWik7Ci0KLQlpZiAodzgwMDEtPmV4cGVjdGVkX3BhY2tldCA9PSBXODAwMV9RVUVSWV9QQUNLRVQpIHsKLQkJLyogV2UgYXJlIGJhY2sgaW4gcmVwb3J0aW5nIG1vZGUsIHRoZSBxdWVyeSB3YXMgQUNLZWQgKi8KLQkJbWVtY3B5KHBhY2tldCwgdzgwMDEtPnJlc3BvbnNlLCBXODAwMV9QQUNLRVRfTEVOKTsKLQkJcmMgPSAwOwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmdzgwMDEtPmNtZF9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHc4MDAxX3NldHVwKHN0cnVjdCB3ODAwMSAqdzgwMDEpCiB7Ci0Jc3RydWN0IHc4MDAxX2Nvb3JkIGNvb3JkOwogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHc4MDAxLT5kZXY7Ci0JdW5zaWduZWQgY2hhciBzdGFydFsxXSA9IHsgJzEnIH07Ci0JdW5zaWduZWQgY2hhciBxdWVyeVsxMV0gPSB7ICcqJyB9OworCXN0cnVjdCB3ODAwMV9jb29yZCBjb29yZDsKKwlpbnQgZXJyb3I7CiAKLQlpZiAodzgwMDFfY29tbWFuZCh3ODAwMSwgcXVlcnksIDEpKQotCQlyZXR1cm4gLTE7CisJZXJyb3IgPSB3ODAwMV9jb21tYW5kKHc4MDAxLCBXODAwMV9DTURfUVVFUlksIHRydWUpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCi0JbWVtc2V0KCZjb29yZCwgMCwgc2l6ZW9mKGNvb3JkKSk7Ci0JcGFyc2VfZGF0YShxdWVyeSwgJmNvb3JkKTsKKwlwYXJzZV9kYXRhKHc4MDAxLT5yZXNwb25zZSwgJmNvb3JkKTsKIAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIDAsIGNvb3JkLngsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIDAsIGNvb3JkLnksIDAsIDApOwpAQCAtMjA1LDEwICsxNjcsNyBAQAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1RJTFRfWCwgMCwgY29vcmQudGlsdF94LCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19USUxUX1ksIDAsIGNvb3JkLnRpbHRfeSwgMCwgMCk7CiAKLQlpZiAodzgwMDFfYXN5bmNfY29tbWFuZCh3ODAwMSwgc3RhcnQsIDEpKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdzgwMDFfY29tbWFuZCh3ODAwMSwgVzgwMDFfQ01EX1NUQVJULCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0yNDksNyArMjA4LDYgQEAKIAl3ODAwMS0+c2VyaW8gPSBzZXJpbzsKIAl3ODAwMS0+aWQgPSBzZXJpby0+aWQuaWQ7CiAJdzgwMDEtPmRldiA9IGlucHV0X2RldjsKLQltdXRleF9pbml0KCZ3ODAwMS0+Y21kX211dGV4KTsKIAlpbml0X2NvbXBsZXRpb24oJnc4MDAxLT5jbWRfZG9uZSk7CiAJc25wcmludGYodzgwMDEtPnBoeXMsIHNpemVvZih3ODAwMS0+cGh5cyksICIlcy9pbnB1dDAiLCBzZXJpby0+cGh5cyk7CiAKQEAgLTI2OSw3ICsyMjcsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDI7CiAKLQlpZiAodzgwMDFfc2V0dXAodzgwMDEpKQorCWVyciA9IHc4MDAxX3NldHVwKHc4MDAxKTsKKwlpZiAoZXJyKQogCQlnb3RvIGZhaWwzOwogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHc4MDAxLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTk3eHgtY29yZS5jCmluZGV4IDI5NTdkNDguLjI1MmViMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd205N3h4LWNvcmUuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtOTd4eC1jb3JlLmMKQEAgLTIwNCw3ICsyMDQsNyBAQAogCWVsc2UKIAkJcmVnICY9IH5ncGlvOwogCi0JaWYgKHdtLT5pZCA9PSBXTTk3MTJfSUQyKQorCWlmICh3bS0+aWQgPT0gV005NzEyX0lEMiAmJiB3bS0+dmFyaWFudCAhPSBXTTk3eHhfV00xNjEzKQogCQl3bTk3eHhfcmVnX3dyaXRlKHdtLCBBQzk3X0dQSU9fU1RBVFVTLCByZWcgPDwgMSk7CiAJZWxzZQogCQl3bTk3eHhfcmVnX3dyaXRlKHdtLCBBQzk3X0dQSU9fU1RBVFVTLCByZWcpOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCQkJCSBXTTk3WFhfR1BJT18xMyk7CiAJCX0KIAotCQlpZiAod20tPmlkID09IFdNOTcxMl9JRDIpCisJCWlmICh3bS0+aWQgPT0gV005NzEyX0lEMiAmJiB3bS0+dmFyaWFudCAhPSBXTTk3eHhfV00xNjEzKQogCQkJd205N3h4X3JlZ193cml0ZSh3bSwgQUM5N19HUElPX1NUQVRVUywgKHN0YXR1cyAmCiAJCQkJCQl+V005N1hYX0dQSU9fMTMpIDw8IDEpOwogCQllbHNlCkBAIC01ODIsNiArNTgyLDggQEAKIAogCXdtLT5pZCA9IHdtOTd4eF9yZWdfcmVhZCh3bSwgQUM5N19WRU5ET1JfSUQyKTsKIAorCXdtLT52YXJpYW50ID0gV005N3h4X0dFTkVSSUM7CisKIAlkZXZfaW5mbyh3bS0+ZGV2LCAiZGV0ZWN0ZWQgYSB3bTk3JTAyeCBjb2RlY1xuIiwgd20tPmlkICYgMHhmZik7CiAKIAlzd2l0Y2ggKHdtLT5pZCAmIDB4ZmYpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9LY29uZmlnIGIvZHJpdmVycy9pc2RuL0tjb25maWcKaW5kZXggMDJiZGNhNi4uMDIyYTE5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL0tjb25maWcKQEAgLTIxLDggKzIxLDYgQEAKIAogaWYgSVNETgogCi1zb3VyY2UgImRyaXZlcnMvaXNkbi9tSVNETi9LY29uZmlnIgotCiBtZW51Y29uZmlnIElTRE5fSTRMCiAJdHJpc3RhdGUgIk9sZCBJU0RONExpbnV4IChkZXByZWNhdGVkKSIKIAktLS1oZWxwLS0tCkBAIC00MSw5ICszOSw5IEBACiAJICBJdCBpcyBzdGlsbCBhdmFpbGFibGUsIHRob3VnaCwgZm9yIHVzZSB3aXRoIGFkYXB0ZXJzIHRoYXQgYXJlIG5vdAogCSAgc3VwcG9ydGVkIGJ5IHRoZSBuZXcgQ0FQSSBzdWJzeXN0ZW0geWV0LgogCi1pZiBJU0ROX0k0TAorc291cmNlICJkcml2ZXJzL2lzZG4vbUlTRE4vS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2lzZG4vaTRsL0tjb25maWciCi1lbmRpZgogCiBtZW51Y29uZmlnIElTRE5fQ0FQSQogCXRyaXN0YXRlICJDQVBJIDIuMCBzdWJzeXN0ZW0iCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vYWN0MjAwMC9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9jYXBpLmMKaW5kZXggOTQ2YzM4Yy4uMWYwYTk0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2NhcGkuYwpAQCAtNzgsNyArNzgsNiBAQAogI2VuZGlmCiAJe3sgMHgwMCwgMHgwMH0sIE5VTEx9LAogfTsKLSNkZWZpbmUgbnVtX3ZhbGlkX21zZyAoc2l6ZW9mKHZhbGlkX21zZykvc2l6ZW9mKGFjdGNhcGlfbXNnZHNjKSkKICNkZWZpbmUgbnVtX3ZhbGlkX2ltc2cgMjcgLyogTUFOVUZBQ1RVUkVSX0lORCAqLwogCiAvKgpAQCAtMTAyNSw3ICsxMDI0LDcgQEAKICNpZmRlZiBERUJVR19EVU1QX1NLQgogCWR1bXBfc2tiKHNrYik7CiAjZW5kaWYKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3ZhbGlkX21zZzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZhbGlkX21zZyk7IGkrKykKIAkJaWYgKChtc2ctPmhkci5jbWQuY21kID09IHZhbGlkX21zZ1tpXS5jbWQuY21kKSAmJgogCQkgICAgKG1zZy0+aGRyLmNtZC5zdWJjbWQgPT0gdmFsaWRfbXNnW2ldLmNtZC5zdWJjbWQpKSB7CiAJCQlkZXNjciA9IHZhbGlkX21zZ1tpXS5kZXNjcmlwdGlvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL21vZHVsZS5jIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvbW9kdWxlLmMKaW5kZXggODMyNTAyMi4uZjc3NGUxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2FjdDIwMDAvbW9kdWxlLmMKKysrIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvbW9kdWxlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICAgICAgICAgMHgwMjAwLCAweDAyNDAsIDB4MDI4MCwgMHgwMmMwLCAweDAzMDAsIDB4MDM0MCwgMHgwMzgwLAogICAgICAgICAweGNmZTAsIDB4Y2ZhMCwgMHhjZjYwLCAweGNmMjAsIDB4Y2VlMCwgMHhjZWEwLCAweGNlNjAsCiB9OwotI2RlZmluZSBJU0FfTlJQT1JUUyAoc2l6ZW9mKGFjdDIwMDBfaXNhX3BvcnRzKS9zaXplb2YodW5zaWduZWQgc2hvcnQpKQogCiBzdGF0aWMgYWN0MjAwMF9jYXJkICpjYXJkcyA9IChhY3QyMDAwX2NhcmQgKikgTlVMTDsKIApAQCAtNjg2LDIxICs2ODUsMjEgQEAKIAkJICogVGhpcyBtYXkgcmVzdWx0IGluIG1vcmUgdGhhbiBvbmUgY2FyZCBkZXRlY3RlZC4KIAkJICovCiAJCXN3aXRjaCAoYnVzKSB7Ci0JCQljYXNlIEFDVDIwMDBfQlVTX0lTQToKLQkJCQlmb3IgKGkgPSAwOyBpIDwgSVNBX05SUE9SVFM7IGkrKykKLQkJCQkJaWYgKGFjdDIwMDBfaXNhX2RldGVjdChhY3QyMDAwX2lzYV9wb3J0c1tpXSkpIHsKLQkJCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJCSAgICAgICAiYWN0MjAwMDogRGV0ZWN0ZWQgSVNBIGNhcmQgYXQgcG9ydCAweCV4XG4iLAotCQkJCQkJICAgICAgIGFjdDIwMDBfaXNhX3BvcnRzW2ldKTsKLQkJCQkJCWFjdDIwMDBfYWxsb2NjYXJkKGJ1cywgYWN0MjAwMF9pc2FfcG9ydHNbaV0sIGlycSwgaWQpOwotCQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFDVDIwMDBfQlVTX01DQToKLQkJCWNhc2UgQUNUMjAwMF9CVVNfUENNQ0lBOgotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJhY3QyMDAwOiBhZGRjYXJkOiBJbnZhbGlkIEJVUyB0eXBlICVkXG4iLAotCQkJCSAgICAgICBidXMpOworCQljYXNlIEFDVDIwMDBfQlVTX0lTQToKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFjdDIwMDBfaXNhX3BvcnRzKTsgaSsrKQorCQkJCWlmIChhY3QyMDAwX2lzYV9kZXRlY3QoYWN0MjAwMF9pc2FfcG9ydHNbaV0pKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gImFjdDIwMDA6IERldGVjdGVkICIKKwkJCQkJCSJJU0EgY2FyZCBhdCBwb3J0IDB4JXhcbiIsCisJCQkJCQlhY3QyMDAwX2lzYV9wb3J0c1tpXSk7CisJCQkJCWFjdDIwMDBfYWxsb2NjYXJkKGJ1cywKKwkJCQkJCWFjdDIwMDBfaXNhX3BvcnRzW2ldLCBpcnEsIGlkKTsKKwkJCQl9CisJCQlicmVhazsKKwkJY2FzZSBBQ1QyMDAwX0JVU19NQ0E6CisJCWNhc2UgQUNUMjAwMF9CVVNfUENNQ0lBOgorCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJhY3QyMDAwOiBhZGRjYXJkOiBJbnZhbGlkIEJVUyB0eXBlICVkXG4iLCBidXMpOwogCQl9CiAJfQogCWlmICghY2FyZHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCAzMWY5MWMxLi4yN2Q1ZGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTU1MSw5ICs1NTEsNyBAQAogICBkYnVnKDEsZHByaW50ZigiY29tPSV4Iixtc2ctPmhlYWRlci5jb21tYW5kKSk7CiAKICAgZm9yKGo9MDtqPE1BWF9NU0dfUEFSTVMrMTtqKyspIG1zZ19wYXJtc1tqXS5sZW5ndGggPSAwOwotICBmb3IoaT0wLCByZXQgPSBfQkFEX01TRzsKLSAgICAgIGk8KHNpemVvZihmdGFibGUpL3NpemVvZihzdHJ1Y3QgX2Z0YWJsZSkpOwotICAgICAgaSsrKSB7CisgIGZvcihpPTAsIHJldCA9IF9CQURfTVNHOyBpIDwgQVJSQVlfU0laRShmdGFibGUpOyBpKyspIHsKIAogICAgIGlmKGZ0YWJsZVtpXS5jb21tYW5kPT1tc2ctPmhlYWRlci5jb21tYW5kKSB7CiAgICAgICAvKiBicmVhayBsb29wIGlmIHRoZSBtZXNzYWdlIGlzIGNvcnJlY3QsIG90aGVyd2lzZSBjb250aW51ZSBzY2FuICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL29zXzRicmkuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9vc180YnJpLmMKaW5kZXggYzk2NGI4ZC4uY2I3NjE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL29zXzRicmkuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vb3NfNGJyaS5jCkBAIC0xNDksOCArMTQ5LDcgQEAKIAlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmRpdmFfY3VycmVudDsKIAlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmFkYXB0ZXJfbGlzdFs0XTsKIAlQSVNETl9BREFQVEVSIFNsYXZlOwotCXVuc2lnbmVkIGxvbmcgYmFyX2xlbmd0aFtzaXplb2YoXzRicmlfYmFyX2xlbmd0aCkgLwotCQkJCSBzaXplb2YoXzRicmlfYmFyX2xlbmd0aFswXSldOworCXVuc2lnbmVkIGxvbmcgYmFyX2xlbmd0aFtBUlJBWV9TSVpFKF80YnJpX2Jhcl9sZW5ndGgpXTsKIAlpbnQgdjIgPSBfNGJyaV9pc19yZXZfMl9jYXJkKGEtPkNhcmRPcmRpbmFsKTsKIAlpbnQgdGFza3MgPSBfNGJyaV9pc19yZXZfMl9icmlfY2FyZChhLT5DYXJkT3JkaW5hbCkgPyAxIDogTVFfSU5TVEFOQ0VfQ09VTlQ7CiAJaW50IGZhY3RvciA9ICh0YXNrcyA9PSAxKSA/IDEgOiAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL0tjb25maWcgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vS2NvbmZpZwppbmRleCAzMDI0NTY2Li5iZGU1NWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vS2NvbmZpZwpAQCAtMzksMyArMzksNTQgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBVU0IgSVNETiBUQXMgd2l0aCBDb2xvZ25lIENoaXAgQUcncwogCSAgSEZDLVMgVVNCIElTRE4gQ29udHJvbGxlcgogCitjb25maWcgTUlTRE5fQVZNRlJJVFoKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgQVZNIEZSSVRaIUNBUkQgUENJIgorCWRlcGVuZHMgb24gTUlTRE4KKwlkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBNSVNETl9JUEFDCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIEFWTXMgRlJJVFohQ0FSRCBQQ0kgY2FyZHMKKworY29uZmlnIE1JU0ROX1NQRUVERkFYCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNlZGxiYXVlciBTcGVlZGZheCsiCisJZGVwZW5kcyBvbiBNSVNETgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IE1JU0ROX0lQQUMKKwlzZWxlY3QgTUlTRE5fSVNBUgorCWhlbHAKKwkgIEVuYWJsZSBzdXBwb3J0IGZvciBTZWRsYmF1ZXIgU3BlZWRmYXgrLgorCitjb25maWcgTUlTRE5fSU5GSU5FT04KKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgY2FyZHMgd2l0aCBJbmZpbmVvbiBjaGlwc2V0IgorCWRlcGVuZHMgb24gTUlTRE4KKwlkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBNSVNETl9JUEFDCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGNhcmRzIHdpdGggSVNBQyArIEhTQ1gsIElQQUMgb3IgSVBBQy1TWAorCSAgY2hpcCBmcm9tIEluZmluZW9uIChmb3JtZXIgbWFudWZhY3R1cmVyIFNpZW1lbnMpLgorCitjb25maWcgTUlTRE5fVzY2OTIKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgY2FyZHMgd2l0aCBXaW5ib25kIDY2OTIiCisJZGVwZW5kcyBvbiBNSVNETgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFdpbmJvbmQgNjY5MiBQQ0kgY2hpcCBiYXNlZCBjYXJkcy4KKworY29uZmlnIE1JU0ROX05FVEpFVAorCXRyaXN0YXRlICJTdXBwb3J0IGZvciBORVRKZXQgY2FyZHMiCisJZGVwZW5kcyBvbiBNSVNETgorCWRlcGVuZHMgb24gUENJCisJc2VsZWN0IE1JU0ROX0lQQUMKKwlzZWxlY3QgSVNETl9IRExDCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFRyYXZlcnNlIFRlY2hub2xvZ2llcyBORVRKZXQgUENJIGNhcmRzLgorCisKK2NvbmZpZyBNSVNETl9JUEFDCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIE1JU0ROCisKK2NvbmZpZyBNSVNETl9JU0FSCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIE1JU0ROCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9NYWtlZmlsZSBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9NYWtlZmlsZQppbmRleCBiMDQwMzUyLi4yOTg3ZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL01ha2VmaWxlCkBAIC02LDMgKzYsMTEgQEAKIG9iai0kKENPTkZJR19NSVNETl9IRkNQQ0kpICs9IGhmY3BjaS5vCiBvYmotJChDT05GSUdfTUlTRE5fSEZDTVVMVEkpICs9IGhmY211bHRpLm8KIG9iai0kKENPTkZJR19NSVNETl9IRkNVU0IpICs9IGhmY3N1c2Iubworb2JqLSQoQ09ORklHX01JU0ROX0FWTUZSSVRaKSArPSBhdm1mcml0ei5vCitvYmotJChDT05GSUdfTUlTRE5fU1BFRURGQVgpICs9IHNwZWVkZmF4Lm8KK29iai0kKENPTkZJR19NSVNETl9JTkZJTkVPTikgKz0gbUlTRE5pbmZpbmVvbi5vCitvYmotJChDT05GSUdfTUlTRE5fVzY2OTIpICs9IHc2NjkyLm8KK29iai0kKENPTkZJR19NSVNETl9ORVRKRVQpICs9IG5ldGpldC5vCisjIGNoaXAgbW9kdWxlcworb2JqLSQoQ09ORklHX01JU0ROX0lQQUMpICs9IG1JU0ROaXBhYy5vCitvYmotJChDT05GSUdfTUlTRE5fSVNBUikgKz0gbUlTRE5pc2FyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9hdm1mcml0ei5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2F2bWZyaXR6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhYzU0MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9hdm1mcml0ei5jCkBAIC0wLDAgKzEsMTE1MiBAQAorLyoKKyAqIGF2bV9mcml0ei5jICAgIGxvdyBsZXZlbCBzdHVmZiBmb3IgQVZNIEZSSVRaIUNBUkQgUENJIElTRE4gY2FyZHMKKyAqICAgICAgICAgICAgICAgIFRoYW5rcyB0byBBVk0sIEJlcmxpbiBmb3IgaW5mb3JtYXRpb25zCisgKgorICogQXV0aG9yICAgICAgIEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIENvcHlyaWdodCAyMDA5ICBieSBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSAiaXBhYy5oIgorCisKKyNkZWZpbmUgQVZNRlJJVFpfUkVWCSIyLjEiCisKK3N0YXRpYyBpbnQgQVZNX2NudDsKK3N0YXRpYyBpbnQgZGVidWc7CisKK2VudW0geworCUFWTV9GUklUWl9QQ0ksCisJQVZNX0ZSSVRaX1BDSVYyLAorfTsKKworI2RlZmluZSBIRExDX0ZJRk8JCTB4MAorI2RlZmluZSBIRExDX1NUQVRVUwkJMHg0CisjZGVmaW5lIENISVBfV0lORE9XCQkweDEwCisKKyNkZWZpbmUgQ0hJUF9JTkRFWAkJMHg0CisjZGVmaW5lIEFWTV9IRExDXzEJCTB4MDAKKyNkZWZpbmUgQVZNX0hETENfMgkJMHgwMQorI2RlZmluZSBBVk1fSVNBQ19GSUZPCQkweDAyCisjZGVmaW5lIEFWTV9JU0FDX1JFR19MT1cJMHgwNAorI2RlZmluZSBBVk1fSVNBQ19SRUdfSElHSAkweDA2CisKKyNkZWZpbmUgQVZNX1NUQVRVUzBfSVJRX0lTQUMJMHgwMQorI2RlZmluZSBBVk1fU1RBVFVTMF9JUlFfSERMQwkweDAyCisjZGVmaW5lIEFWTV9TVEFUVVMwX0lSUV9USU1FUgkweDA0CisjZGVmaW5lIEFWTV9TVEFUVVMwX0lSUV9NQVNLCTB4MDcKKworI2RlZmluZSBBVk1fU1RBVFVTMF9SRVNFVAkweDAxCisjZGVmaW5lIEFWTV9TVEFUVVMwX0RJU19USU1FUgkweDAyCisjZGVmaW5lIEFWTV9TVEFUVVMwX1JFU19USU1FUgkweDA0CisjZGVmaW5lIEFWTV9TVEFUVVMwX0VOQV9JUlEJMHgwOAorI2RlZmluZSBBVk1fU1RBVFVTMF9URVNUQklUCTB4MTAKKworI2RlZmluZSBBVk1fU1RBVFVTMV9JTlRfU0VMCTB4MGYKKyNkZWZpbmUgQVZNX1NUQVRVUzFfRU5BX0lPTQkweDgwCisKKyNkZWZpbmUgSERMQ19NT0RFX0lURl9GTEcJMHgwMQorI2RlZmluZSBIRExDX01PREVfVFJBTlMJCTB4MDIKKyNkZWZpbmUgSERMQ19NT0RFX0NDUl83CQkweDA0CisjZGVmaW5lIEhETENfTU9ERV9DQ1JfMTYJMHgwOAorI2RlZmluZSBIRExDX01PREVfVEVTVExPT1AJMHg4MAorCisjZGVmaW5lIEhETENfSU5UX1hQUgkJMHg4MAorI2RlZmluZSBIRExDX0lOVF9YRFUJCTB4NDAKKyNkZWZpbmUgSERMQ19JTlRfUlBSCQkweDIwCisjZGVmaW5lIEhETENfSU5UX01BU0sJCTB4RTAKKworI2RlZmluZSBIRExDX1NUQVRfUk1FCQkweDAxCisjZGVmaW5lIEhETENfU1RBVF9SRE8JCTB4MTAKKyNkZWZpbmUgSERMQ19TVEFUX0NSQ1ZGUlJBQgkweDBFCisjZGVmaW5lIEhETENfU1RBVF9DUkNWRlIJMHgwNgorI2RlZmluZSBIRExDX1NUQVRfUk1MX01BU0sJMHgzZjAwCisKKyNkZWZpbmUgSERMQ19DTURfWFJTCQkweDgwCisjZGVmaW5lIEhETENfQ01EX1hNRQkJMHgwMQorI2RlZmluZSBIRExDX0NNRF9SUlMJCTB4MjAKKyNkZWZpbmUgSERMQ19DTURfWE1MX01BU0sJMHgzZjAwCisjZGVmaW5lIEhETENfRklGT19TSVpFCQkzMgorCisvKiBGcml0eiBQQ0kgdjIuMCAqLworCisjZGVmaW5lIEFWTV9IRExDX0ZJRk9fMQkJMHgxMAorI2RlZmluZSBBVk1fSERMQ19GSUZPXzIJCTB4MTgKKworI2RlZmluZSBBVk1fSERMQ19TVEFUVVNfMQkweDE0CisjZGVmaW5lIEFWTV9IRExDX1NUQVRVU18yCTB4MWMKKworI2RlZmluZSBBVk1fSVNBQ1hfSU5ERVgJCTB4MDQKKyNkZWZpbmUgQVZNX0lTQUNYX0RBVEEJCTB4MDgKKworLyogZGF0YSBzdHJ1Y3QgKi8KKyNkZWZpbmUgTE9HX1NJWkUJCTYzCisKK3N0cnVjdCBoZGxjX3N0YXRfcmVnIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1OCBmaWxsOworCXU4IG1vZGU7CisJdTggeG1sOworCXU4IGNtZDsKKyNlbHNlCisJdTggY21kOworCXU4IHhtbDsKKwl1OCBtb2RlOworCXU4IGZpbGw7CisjZW5kaWYKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoZGxjX2h3IHsKKwl1bmlvbiB7CisJCXUzMiBjdHJsOworCQlzdHJ1Y3QgaGRsY19zdGF0X3JlZyBzcjsKKwl9IGN0cmw7CisJdTMyIHN0YXQ7Cit9OworCitzdHJ1Y3QgZnJpdHpjYXJkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCWNoYXIJCQluYW1lW01JU0ROX01BWF9JRExFTl07CisJdTgJCQl0eXBlOworCXU4CQkJY3RybHJlZzsKKwl1MTYJCQlpcnE7CisJdTMyCQkJaXJxY250OworCXUzMgkJCWFkZHI7CisJc3BpbmxvY2tfdAkJbG9jazsgLyogaHcgbG9jayAqLworCXN0cnVjdCBpc2FjX2h3CQlpc2FjOworCXN0cnVjdCBoZGxjX2h3CQloZGxjWzJdOworCXN0cnVjdCBiY2hhbm5lbAkJYmNoWzJdOworCWNoYXIJCQlsb2dbTE9HX1NJWkUgKyAxXTsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoQ2FyZHMpOworc3RhdGljIERFRklORV9SV0xPQ0soY2FyZF9sb2NrKTsgLyogcHJvdGVjdCBDYXJkcyAqLworCitzdGF0aWMgdm9pZAorX3NldF9kZWJ1ZyhzdHJ1Y3QgZnJpdHpjYXJkICpjYXJkKQoreworCWNhcmQtPmlzYWMuZGNoLmRlYnVnID0gZGVidWc7CisJY2FyZC0+YmNoWzBdLmRlYnVnID0gZGVidWc7CisJY2FyZC0+YmNoWzFdLmRlYnVnID0gZGVidWc7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9kZWJ1Zyhjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByZXQ7CisJc3RydWN0IGZyaXR6Y2FyZCAqY2FyZDsKKworCXJldCA9IHBhcmFtX3NldF91aW50KHZhbCwga3ApOworCWlmICghcmV0KSB7CisJCXJlYWRfbG9jaygmY2FyZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmQ2FyZHMsIGxpc3QpCisJCQlfc2V0X2RlYnVnKGNhcmQpOworCQlyZWFkX3VubG9jaygmY2FyZF9sb2NrKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihBVk1GUklUWl9SRVYpOworbW9kdWxlX3BhcmFtX2NhbGwoZGVidWcsIHNldF9kZWJ1ZywgcGFyYW1fZ2V0X3VpbnQsICZkZWJ1ZywgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImF2bWZyaXR6IGRlYnVnIG1hc2siKTsKKworLyogSW50ZXJmYWNlIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgdTgKK1JlYWRJU0FDX1YxKHZvaWQgKnAsIHU4IG9mZnNldCkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IHA7CisJdTggaWR4ID0gKG9mZnNldCA+IDB4MmYpID8gQVZNX0lTQUNfUkVHX0hJR0ggOiBBVk1fSVNBQ19SRUdfTE9XOworCisJb3V0YihpZHgsIGZjLT5hZGRyICsgQ0hJUF9JTkRFWCk7CisJcmV0dXJuIGluYihmYy0+YWRkciArIENISVBfV0lORE9XICsgKG9mZnNldCAmIDB4ZikpOworfQorCitzdGF0aWMgdm9pZAorV3JpdGVJU0FDX1YxKHZvaWQgKnAsIHU4IG9mZnNldCwgdTggdmFsdWUpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBwOworCXU4IGlkeCA9IChvZmZzZXQgPiAweDJmKSA/IEFWTV9JU0FDX1JFR19ISUdIIDogQVZNX0lTQUNfUkVHX0xPVzsKKworCW91dGIoaWR4LCBmYy0+YWRkciArIENISVBfSU5ERVgpOworCW91dGIodmFsdWUsIGZjLT5hZGRyICsgQ0hJUF9XSU5ET1cgKyAob2Zmc2V0ICYgMHhmKSk7Cit9CisKK3N0YXRpYyB2b2lkCitSZWFkRmlGb0lTQUNfVjEodm9pZCAqcCwgdTggb2ZmLCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBwOworCisJb3V0YihBVk1fSVNBQ19GSUZPLCBmYy0+YWRkciArIENISVBfSU5ERVgpOworCWluc2IoZmMtPmFkZHIgKyBDSElQX1dJTkRPVywgZGF0YSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitXcml0ZUZpRm9JU0FDX1YxKHZvaWQgKnAsIHU4IG9mZiwgdTggKmRhdGEsIGludCBzaXplKQoreworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gcDsKKworCW91dGIoQVZNX0lTQUNfRklGTywgZmMtPmFkZHIgKyBDSElQX0lOREVYKTsKKwlvdXRzYihmYy0+YWRkciArIENISVBfV0lORE9XLCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIHU4CitSZWFkSVNBQ19WMih2b2lkICpwLCB1OCBvZmZzZXQpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBwOworCisJb3V0bChvZmZzZXQsIGZjLT5hZGRyICsgQVZNX0lTQUNYX0lOREVYKTsKKwlyZXR1cm4gMHhmZiAmIGlubChmYy0+YWRkciArIEFWTV9JU0FDWF9EQVRBKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlSVNBQ19WMih2b2lkICpwLCB1OCBvZmZzZXQsIHU4IHZhbHVlKQoreworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gcDsKKworCW91dGwob2Zmc2V0LCBmYy0+YWRkciArIEFWTV9JU0FDWF9JTkRFWCk7CisJb3V0bCh2YWx1ZSwgZmMtPmFkZHIgKyBBVk1fSVNBQ1hfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkCitSZWFkRmlGb0lTQUNfVjIodm9pZCAqcCwgdTggb2ZmLCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBwOworCWludCBpOworCisJb3V0bChvZmYsIGZjLT5hZGRyICsgQVZNX0lTQUNYX0lOREVYKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlkYXRhW2ldID0gMHhmZiAmIGlubChmYy0+YWRkciArIEFWTV9JU0FDWF9EQVRBKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRmlGb0lTQUNfVjIodm9pZCAqcCwgdTggb2ZmLCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBwOworCWludCBpOworCisJb3V0bChvZmYsIGZjLT5hZGRyICsgQVZNX0lTQUNYX0lOREVYKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlvdXRsKGRhdGFbaV0sIGZjLT5hZGRyICsgQVZNX0lTQUNYX0RBVEEpOworfQorCitzdGF0aWMgc3RydWN0IGJjaGFubmVsICoKK1NlbF9CQ1Moc3RydWN0IGZyaXR6Y2FyZCAqZmMsIHUzMiBjaGFubmVsKQoreworCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmZmMtPmJjaFswXS5GbGFncykgJiYKKwkJKGZjLT5iY2hbMF0ubnIgJiBjaGFubmVsKSkKKwkJcmV0dXJuICZmYy0+YmNoWzBdOworCWVsc2UgaWYgKHRlc3RfYml0KEZMR19BQ1RJVkUsICZmYy0+YmNoWzFdLkZsYWdzKSAmJgorCQkoZmMtPmJjaFsxXS5uciAmIGNoYW5uZWwpKQorCQlyZXR1cm4gJmZjLT5iY2hbMV07CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3dyaXRlX2N0cmxfcGNpKHN0cnVjdCBmcml0emNhcmQgKmZjLCBzdHJ1Y3QgaGRsY19odyAqaGRsYywgdTMyIGNoYW5uZWwpIHsKKwl1MzIgaWR4ID0gY2hhbm5lbCA9PSAyID8gQVZNX0hETENfMiA6IEFWTV9IRExDXzE7CisKKwlvdXRsKGlkeCwgZmMtPmFkZHIgKyBDSElQX0lOREVYKTsKKwlvdXRsKGhkbGMtPmN0cmwuY3RybCwgZmMtPmFkZHIgKyBDSElQX1dJTkRPVyArIEhETENfU1RBVFVTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3dyaXRlX2N0cmxfcGNpdjIoc3RydWN0IGZyaXR6Y2FyZCAqZmMsIHN0cnVjdCBoZGxjX2h3ICpoZGxjLCB1MzIgY2hhbm5lbCkgeworCW91dGwoaGRsYy0+Y3RybC5jdHJsLCBmYy0+YWRkciArIChjaGFubmVsID09IDIgPyBBVk1fSERMQ19TVEFUVVNfMiA6CisJCUFWTV9IRExDX1NUQVRVU18xKSk7Cit9CisKK3ZvaWQKK3dyaXRlX2N0cmwoc3RydWN0IGJjaGFubmVsICpiY2gsIGludCB3aGljaCkgeworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gYmNoLT5odzsKKwlzdHJ1Y3QgaGRsY19odyAqaGRsYzsKKworCWhkbGMgPSAmZmMtPmhkbGNbKGJjaC0+bnIgLSAxKSAmIDFdOworCXByX2RlYnVnKCIlczogaGRsYyAlYyB3ciV4IGN0cmwgJXhcbiIsIGZjLT5uYW1lLCAnQCcgKyBiY2gtPm5yLAorCQl3aGljaCwgaGRsYy0+Y3RybC5jdHJsKTsKKwlzd2l0Y2ggKGZjLT50eXBlKSB7CisJY2FzZSBBVk1fRlJJVFpfUENJVjI6CisJCV9fd3JpdGVfY3RybF9wY2l2MihmYywgaGRsYywgYmNoLT5ucik7CisJCWJyZWFrOworCWNhc2UgQVZNX0ZSSVRaX1BDSToKKwkJX193cml0ZV9jdHJsX3BjaShmYywgaGRsYywgYmNoLT5ucik7CisJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMgaW5saW5lIHUzMgorX19yZWFkX3N0YXR1c19wY2kodV9sb25nIGFkZHIsIHUzMiBjaGFubmVsKQoreworCW91dGwoY2hhbm5lbCA9PSAyID8gQVZNX0hETENfMiA6IEFWTV9IRExDXzEsIGFkZHIgKyBDSElQX0lOREVYKTsKKwlyZXR1cm4gaW5sKGFkZHIgKyBDSElQX1dJTkRPVyArIEhETENfU1RBVFVTKTsKK30KKworc3RhdGljIGlubGluZSB1MzIKK19fcmVhZF9zdGF0dXNfcGNpdjIodV9sb25nIGFkZHIsIHUzMiBjaGFubmVsKQoreworCXJldHVybiBpbmwoYWRkciArIChjaGFubmVsID09IDIgPyBBVk1fSERMQ19TVEFUVVNfMiA6CisJCUFWTV9IRExDX1NUQVRVU18xKSk7Cit9CisKKworc3RhdGljIHUzMgorcmVhZF9zdGF0dXMoc3RydWN0IGZyaXR6Y2FyZCAqZmMsIHUzMiBjaGFubmVsKQoreworCXN3aXRjaCAoZmMtPnR5cGUpIHsKKwljYXNlIEFWTV9GUklUWl9QQ0lWMjoKKwkJcmV0dXJuIF9fcmVhZF9zdGF0dXNfcGNpdjIoZmMtPmFkZHIsIGNoYW5uZWwpOworCWNhc2UgQVZNX0ZSSVRaX1BDSToKKwkJcmV0dXJuIF9fcmVhZF9zdGF0dXNfcGNpKGZjLT5hZGRyLCBjaGFubmVsKTsKKwl9CisJLyogZHVtbXkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2VuYWJsZV9od2lycShzdHJ1Y3QgZnJpdHpjYXJkICpmYykKK3sKKwlmYy0+Y3RybHJlZyB8PSBBVk1fU1RBVFVTMF9FTkFfSVJROworCW91dGIoZmMtPmN0cmxyZWcsIGZjLT5hZGRyICsgMik7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNhYmxlX2h3aXJxKHN0cnVjdCBmcml0emNhcmQgKmZjKQoreworCWZjLT5jdHJscmVnICY9IH5BVk1fU1RBVFVTMF9FTkFfSVJROworCW91dGIoZmMtPmN0cmxyZWcsIGZjLT5hZGRyICsgMik7Cit9CisKK3N0YXRpYyBpbnQKK21vZGVoZGxjKHN0cnVjdCBiY2hhbm5lbCAqYmNoLCBpbnQgcHJvdG9jb2wpCit7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBiY2gtPmh3OworCXN0cnVjdCBoZGxjX2h3ICpoZGxjOworCisJaGRsYyA9ICZmYy0+aGRsY1soYmNoLT5uciAtIDEpICYgMV07CisJcHJfZGVidWcoIiVzOiBoZGxjICVjIHByb3RvY29sICV4LS0+JXggY2ggJWRcbiIsIGZjLT5uYW1lLAorCQknQCcgKyBiY2gtPm5yLCBiY2gtPnN0YXRlLCBwcm90b2NvbCwgYmNoLT5ucik7CisJaGRsYy0+Y3RybC5jdHJsID0gMDsKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSAtMTogLyogdXNlZCBmb3IgaW5pdCAqLworCQliY2gtPnN0YXRlID0gLTE7CisJY2FzZSBJU0ROX1BfTk9ORToKKwkJaWYgKGJjaC0+c3RhdGUgPT0gSVNETl9QX05PTkUpCisJCQlicmVhazsKKwkJaGRsYy0+Y3RybC5zci5jbWQgID0gSERMQ19DTURfWFJTIHwgSERMQ19DTURfUlJTOworCQloZGxjLT5jdHJsLnNyLm1vZGUgPSBIRExDX01PREVfVFJBTlM7CisJCXdyaXRlX2N0cmwoYmNoLCA1KTsKKwkJYmNoLT5zdGF0ZSA9IElTRE5fUF9OT05FOworCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0hETEMsICZiY2gtPkZsYWdzKTsKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjaC0+RmxhZ3MpOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX1JBVzoKKwkJYmNoLT5zdGF0ZSA9IHByb3RvY29sOworCQloZGxjLT5jdHJsLnNyLmNtZCAgPSBIRExDX0NNRF9YUlMgfCBIRExDX0NNRF9SUlM7CisJCWhkbGMtPmN0cmwuc3IubW9kZSA9IEhETENfTU9ERV9UUkFOUzsKKwkJd3JpdGVfY3RybChiY2gsIDUpOworCQloZGxjLT5jdHJsLnNyLmNtZCA9IEhETENfQ01EX1hSUzsKKwkJd3JpdGVfY3RybChiY2gsIDEpOworCQloZGxjLT5jdHJsLnNyLmNtZCA9IDA7CisJCXRlc3RfYW5kX3NldF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmYmNoLT5GbGFncyk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJYmNoLT5zdGF0ZSA9IHByb3RvY29sOworCQloZGxjLT5jdHJsLnNyLmNtZCAgPSBIRExDX0NNRF9YUlMgfCBIRExDX0NNRF9SUlM7CisJCWhkbGMtPmN0cmwuc3IubW9kZSA9IEhETENfTU9ERV9JVEZfRkxHOworCQl3cml0ZV9jdHJsKGJjaCwgNSk7CisJCWhkbGMtPmN0cmwuc3IuY21kID0gSERMQ19DTURfWFJTOworCQl3cml0ZV9jdHJsKGJjaCwgMSk7CisJCWhkbGMtPmN0cmwuc3IuY21kID0gMDsKKwkJdGVzdF9hbmRfc2V0X2JpdChGTEdfSERMQywgJmJjaC0+RmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogcHJvdG9jb2wgbm90IGtub3duICV4XG4iLCBmYy0+bmFtZSwgcHJvdG9jb2wpOworCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2hkbGNfZW1wdHlfZmlmbyhzdHJ1Y3QgYmNoYW5uZWwgKmJjaCwgaW50IGNvdW50KQoreworCXUzMiAqcHRyOworCXU4ICpwOworCXUzMiAgdmFsLCBhZGRyOworCWludCBjbnQgPSAwOworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gYmNoLT5odzsKKworCXByX2RlYnVnKCIlczogJXMgJWRcbiIsIGZjLT5uYW1lLCBfX2Z1bmNfXywgY291bnQpOworCWlmICghYmNoLT5yeF9za2IpIHsKKwkJYmNoLT5yeF9za2IgPSBtSV9hbGxvY19za2IoYmNoLT5tYXhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIWJjaC0+cnhfc2tiKSB7CisJCQlwcl9pbmZvKCIlczogQiByZWNlaXZlIG91dCBvZiBtZW1vcnlcbiIsCisJCQkJZmMtPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICgoYmNoLT5yeF9za2ItPmxlbiArIGNvdW50KSA+IGJjaC0+bWF4bGVuKSB7CisJCXByX2RlYnVnKCIlczogb3ZlcnJ1biAlZFxuIiwgZmMtPm5hbWUsCisJCQliY2gtPnJ4X3NrYi0+bGVuICsgY291bnQpOworCQlyZXR1cm47CisJfQorCXAgPSBza2JfcHV0KGJjaC0+cnhfc2tiLCBjb3VudCk7CisJcHRyID0gKHUzMiAqKXA7CisJaWYgKEFWTV9GUklUWl9QQ0lWMiA9PSBmYy0+dHlwZSkKKwkJYWRkciA9IGZjLT5hZGRyICsgKGJjaC0+bnIgPT0gMiA/CisJCQlBVk1fSERMQ19GSUZPXzIgOiBBVk1fSERMQ19GSUZPXzEpOworCWVsc2UgeworCQlhZGRyID0gZmMtPmFkZHIgKyBDSElQX1dJTkRPVzsKKwkJb3V0bChiY2gtPm5yID09IDIgPyBBVk1fSERMQ18yIDogQVZNX0hETENfMSwgZmMtPmFkZHIpOworCX0KKwl3aGlsZSAoY250IDwgY291bnQpIHsKKwkJdmFsID0gbGUzMl90b19jcHUoaW5sKGFkZHIpKTsKKwkJcHV0X3VuYWxpZ25lZCh2YWwsIHB0cik7CisJCXB0cisrOworCQljbnQgKz0gNDsKKwl9CisJaWYgKGRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJc25wcmludGYoZmMtPmxvZywgTE9HX1NJWkUsICJCJTFkLXJlY3YgJXMgJWQgIiwKKwkJCWJjaC0+bnIsIGZjLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKGZjLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcCwgY291bnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hkbGNfZmlsbF9maWZvKHN0cnVjdCBiY2hhbm5lbCAqYmNoKQoreworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gYmNoLT5odzsKKwlzdHJ1Y3QgaGRsY19odyAqaGRsYzsKKwlpbnQgY291bnQsIGNudCA9IDA7CisJdTggKnA7CisJdTMyICpwdHIsIHZhbCwgYWRkcjsKKworCWhkbGMgPSAmZmMtPmhkbGNbKGJjaC0+bnIgLSAxKSAmIDFdOworCWlmICghYmNoLT50eF9za2IpCisJCXJldHVybjsKKwljb3VudCA9IGJjaC0+dHhfc2tiLT5sZW4gLSBiY2gtPnR4X2lkeDsKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuOworCXAgPSBiY2gtPnR4X3NrYi0+ZGF0YSArIGJjaC0+dHhfaWR4OworCWhkbGMtPmN0cmwuc3IuY21kICY9IH5IRExDX0NNRF9YTUU7CisJaWYgKGNvdW50ID4gSERMQ19GSUZPX1NJWkUpIHsKKwkJY291bnQgPSBIRExDX0ZJRk9fU0laRTsKKwl9IGVsc2UgeworCQlpZiAodGVzdF9iaXQoRkxHX0hETEMsICZiY2gtPkZsYWdzKSkKKwkJCWhkbGMtPmN0cmwuc3IuY21kIHw9IEhETENfQ01EX1hNRTsKKwl9CisJcHJfZGVidWcoIiVzOiAlcyAlZC8lZC8lZCIsIGZjLT5uYW1lLCBfX2Z1bmNfXywgY291bnQsCisJCWJjaC0+dHhfaWR4LCBiY2gtPnR4X3NrYi0+bGVuKTsKKwlwdHIgPSAodTMyICopcDsKKwliY2gtPnR4X2lkeCArPSBjb3VudDsKKwloZGxjLT5jdHJsLnNyLnhtbCA9ICgoY291bnQgPT0gSERMQ19GSUZPX1NJWkUpID8gMCA6IGNvdW50KTsKKwlpZiAoQVZNX0ZSSVRaX1BDSVYyID09IGZjLT50eXBlKSB7CisJCV9fd3JpdGVfY3RybF9wY2l2MihmYywgaGRsYywgYmNoLT5ucik7CisJCWFkZHIgPSBmYy0+YWRkciArIChiY2gtPm5yID09IDIgPworCQkJQVZNX0hETENfRklGT18yIDogQVZNX0hETENfRklGT18xKTsKKwl9IGVsc2UgeworCQlfX3dyaXRlX2N0cmxfcGNpKGZjLCBoZGxjLCBiY2gtPm5yKTsKKwkJYWRkciA9IGZjLT5hZGRyICsgQ0hJUF9XSU5ET1c7CisJfQorCXdoaWxlIChjbnQgPCBjb3VudCkgeworCQl2YWwgPSBnZXRfdW5hbGlnbmVkKHB0cik7CisJCW91dGwoY3B1X3RvX2xlMzIodmFsKSwgYWRkcik7CisJCXB0cisrOworCQljbnQgKz0gNDsKKwl9CisJaWYgKGRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJc25wcmludGYoZmMtPmxvZywgTE9HX1NJWkUsICJCJTFkLXNlbmQgJXMgJWQgIiwKKwkJCWJjaC0+bnIsIGZjLT5uYW1lLCBjb3VudCk7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKGZjLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcCwgY291bnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK0hETENfaXJxX3hwcihzdHJ1Y3QgYmNoYW5uZWwgKmJjaCkKK3sKKwlpZiAoYmNoLT50eF9za2IgJiYgYmNoLT50eF9pZHggPCBiY2gtPnR4X3NrYi0+bGVuKQorCQloZGxjX2ZpbGxfZmlmbyhiY2gpOworCWVsc2UgeworCQlpZiAoYmNoLT50eF9za2IpIHsKKwkJCS8qIHNlbmQgY29uZmlybSwgb24gdHJhbnMsIGZyZWUgb24gaGRsYy4gKi8KKwkJCWlmICh0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkKKwkJCQljb25maXJtX0JzZW5kKGJjaCk7CisJCQlkZXZfa2ZyZWVfc2tiKGJjaC0+dHhfc2tiKTsKKwkJfQorCQlpZiAoZ2V0X25leHRfYmZyYW1lKGJjaCkpCisJCQloZGxjX2ZpbGxfZmlmbyhiY2gpOworCX0KK30KKworc3RhdGljIHZvaWQKK0hETENfaXJxKHN0cnVjdCBiY2hhbm5lbCAqYmNoLCB1MzIgc3RhdCkKK3sKKwlzdHJ1Y3QgZnJpdHpjYXJkICpmYyA9IGJjaC0+aHc7CisJaW50CQlsZW47CisJc3RydWN0IGhkbGNfaHcJKmhkbGM7CisKKwloZGxjID0gJmZjLT5oZGxjWyhiY2gtPm5yIC0gMSkgJiAxXTsKKwlwcl9kZWJ1ZygiJXM6IGNoJWQgc3RhdCAlI3hcbiIsIGZjLT5uYW1lLCBiY2gtPm5yLCBzdGF0KTsKKwlpZiAoc3RhdCAmIEhETENfSU5UX1JQUikgeworCQlpZiAoc3RhdCAmIEhETENfU1RBVF9SRE8pIHsKKwkJCWhkbGMtPmN0cmwuc3IueG1sID0gMDsKKwkJCWhkbGMtPmN0cmwuc3IuY21kIHw9IEhETENfQ01EX1JSUzsKKwkJCXdyaXRlX2N0cmwoYmNoLCAxKTsKKwkJCWhkbGMtPmN0cmwuc3IuY21kICY9IH5IRExDX0NNRF9SUlM7CisJCQl3cml0ZV9jdHJsKGJjaCwgMSk7CisJCQlpZiAoYmNoLT5yeF9za2IpCisJCQkJc2tiX3RyaW0oYmNoLT5yeF9za2IsIDApOworCQl9IGVsc2UgeworCQkJbGVuID0gKHN0YXQgJiBIRExDX1NUQVRfUk1MX01BU0spID4+IDg7CisJCQlpZiAoIWxlbikKKwkJCQlsZW4gPSAzMjsKKwkJCWhkbGNfZW1wdHlfZmlmbyhiY2gsIGxlbik7CisJCQlpZiAoIWJjaC0+cnhfc2tiKQorCQkJCWdvdG8gaGFuZGxlX3R4OworCQkJaWYgKChzdGF0ICYgSERMQ19TVEFUX1JNRSkgfHwgdGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULAorCQkJICAgICZiY2gtPkZsYWdzKSkgeworCQkJCWlmICgoKHN0YXQgJiBIRExDX1NUQVRfQ1JDVkZSUkFCKSA9PQorCQkJCSAgICBIRExDX1NUQVRfQ1JDVkZSKSB8fAorCQkJCSAgICB0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkgeworCQkJCQlyZWN2X0JjaGFubmVsKGJjaCwgMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJfZGVidWcoIiVzOiBnb3QgaW52YWxpZCBmcmFtZVxuIiwKKwkJCQkJCWZjLT5uYW1lKTsKKwkJCQkJc2tiX3RyaW0oYmNoLT5yeF9za2IsIDApOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK2hhbmRsZV90eDoKKwlpZiAoc3RhdCAmIEhETENfSU5UX1hEVSkgeworCQkvKiBIZXJlIHdlIGxvc3QgYW4gVFggaW50ZXJydXB0LCBzbworCQkgKiByZXN0YXJ0IHRyYW5zbWl0dGluZyB0aGUgd2hvbGUgZnJhbWUgb24gSERMQworCQkgKiBpbiB0cmFuc3BhcmVudCBtb2RlIHdlIHNlbmQgdGhlIG5leHQgZGF0YQorCQkgKi8KKwkJaWYgKGJjaC0+dHhfc2tiKQorCQkJcHJfZGVidWcoIiVzOiBjaCVkIFhEVSBsZW4oJWQpIGlkeCglZCkgRmxhZ3MoJWx4KVxuIiwKKwkJCQlmYy0+bmFtZSwgYmNoLT5uciwgYmNoLT50eF9za2ItPmxlbiwKKwkJCQliY2gtPnR4X2lkeCwgYmNoLT5GbGFncyk7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogY2glZCBYRFUgbm8gdHhfc2tiIEZsYWdzKCVseClcbiIsCisJCQkJZmMtPm5hbWUsIGJjaC0+bnIsIGJjaC0+RmxhZ3MpOworCQlpZiAoYmNoLT50eF9za2IgJiYgYmNoLT50eF9za2ItPmxlbikgeworCQkJaWYgKCF0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkKKwkJCQliY2gtPnR4X2lkeCA9IDA7CisJCX0KKwkJaGRsYy0+Y3RybC5zci54bWwgPSAwOworCQloZGxjLT5jdHJsLnNyLmNtZCB8PSBIRExDX0NNRF9YUlM7CisJCXdyaXRlX2N0cmwoYmNoLCAxKTsKKwkJaGRsYy0+Y3RybC5zci5jbWQgJj0gfkhETENfQ01EX1hSUzsKKwkJSERMQ19pcnFfeHByKGJjaCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKHN0YXQgJiBIRExDX0lOVF9YUFIpCisJCUhETENfaXJxX3hwcihiY2gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0hETENfaXJxX21haW4oc3RydWN0IGZyaXR6Y2FyZCAqZmMpCit7CisJdTMyIHN0YXQ7CisJc3RydWN0IGJjaGFubmVsICpiY2g7CisKKwlzdGF0ID0gcmVhZF9zdGF0dXMoZmMsIDEpOworCWlmIChzdGF0ICYgSERMQ19JTlRfTUFTSykgeworCQliY2ggPSBTZWxfQkNTKGZjLCAxKTsKKwkJaWYgKGJjaCkKKwkJCUhETENfaXJxKGJjaCwgc3RhdCk7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogc3B1cmlvdXMgY2gxIElSUVxuIiwgZmMtPm5hbWUpOworCX0KKwlzdGF0ID0gcmVhZF9zdGF0dXMoZmMsIDIpOworCWlmIChzdGF0ICYgSERMQ19JTlRfTUFTSykgeworCQliY2ggPSBTZWxfQkNTKGZjLCAyKTsKKwkJaWYgKGJjaCkKKwkJCUhETENfaXJxKGJjaCwgc3RhdCk7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogc3B1cmlvdXMgY2gyIElSUVxuIiwgZmMtPm5hbWUpOworCX0KK30KKworc3RhdGljIGlycXJldHVybl90Cithdm1fZnJpdHpfaW50ZXJydXB0KGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gZGV2X2lkOworCXU4IHZhbDsKKwl1OCBzdmFsOworCisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJc3ZhbCA9IGluYihmYy0+YWRkciArIDIpOworCXByX2RlYnVnKCIlczogaXJxIHN0YXQwICV4XG4iLCBmYy0+bmFtZSwgc3ZhbCk7CisJaWYgKChzdmFsICYgQVZNX1NUQVRVUzBfSVJRX01BU0spID09IEFWTV9TVEFUVVMwX0lSUV9NQVNLKSB7CisJCS8qIHNoYXJlZCAgSVJRIGZyb20gb3RoZXIgSFcgKi8KKwkJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlmYy0+aXJxY250Kys7CisKKwlpZiAoIShzdmFsICYgQVZNX1NUQVRVUzBfSVJRX0lTQUMpKSB7CisJCXZhbCA9IFJlYWRJU0FDX1YxKGZjLCBJU0FDX0lTVEEpOworCQltSVNETmlzYWNfaXJxKCZmYy0+aXNhYywgdmFsKTsKKwl9CisJaWYgKCEoc3ZhbCAmIEFWTV9TVEFUVVMwX0lSUV9IRExDKSkKKwkJSERMQ19pcnFfbWFpbihmYyk7CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYXZtX2ZyaXR6djJfaW50ZXJydXB0KGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gZGV2X2lkOworCXU4IHZhbDsKKwl1OCBzdmFsOworCisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJc3ZhbCA9IGluYihmYy0+YWRkciArIDIpOworCXByX2RlYnVnKCIlczogaXJxIHN0YXQwICV4XG4iLCBmYy0+bmFtZSwgc3ZhbCk7CisJaWYgKCEoc3ZhbCAmIEFWTV9TVEFUVVMwX0lSUV9NQVNLKSkgeworCQkvKiBzaGFyZWQgIElSUSBmcm9tIG90aGVyIEhXICovCisJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJZmMtPmlycWNudCsrOworCisJaWYgKHN2YWwgJiBBVk1fU1RBVFVTMF9JUlFfSERMQykKKwkJSERMQ19pcnFfbWFpbihmYyk7CisJaWYgKHN2YWwgJiBBVk1fU1RBVFVTMF9JUlFfSVNBQykgeworCQl2YWwgPSBSZWFkSVNBQ19WMihmYywgSVNBQ1hfSVNUQSk7CisJCW1JU0ROaXNhY19pcnEoJmZjLT5pc2FjLCB2YWwpOworCX0KKwlpZiAoc3ZhbCAmIEFWTV9TVEFUVVMwX0lSUV9USU1FUikgeworCQlwcl9kZWJ1ZygiJXM6IHRpbWVyIGlycVxuIiwgZmMtPm5hbWUpOworCQlvdXRiKGZjLT5jdHJscmVnIHwgQVZNX1NUQVRVUzBfUkVTX1RJTUVSLCBmYy0+YWRkciArIDIpOworCQl1ZGVsYXkoMSk7CisJCW91dGIoZmMtPmN0cmxyZWcsIGZjLT5hZGRyICsgMik7CisJfQorCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50Cithdm1fbDJsMUIoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGJjaGFubmVsICpiY2ggPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBiY2hhbm5lbCwgY2gpOworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gYmNoLT5odzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbUlTRE5oZWFkICpoaCA9IG1JU0ROX0hFQURfUChza2IpOworCXUzMiBpZDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGhoLT5wcmltKSB7CisJY2FzZSBQSF9EQVRBX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCXJldCA9IGJjaGFubmVsX3NlbmRkYXRhKGJjaCwgc2tiKTsKKwkJaWYgKHJldCA+IDApIHsgLyogZGlyZWN0IFRYICovCisJCQlpZCA9IGhoLT5pZDsgLyogc2tiIGNhbiBiZSBmcmVlZCAqLworCQkJaGRsY19maWxsX2ZpZm8oYmNoKTsKKwkJCXJldCA9IDA7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgZmxhZ3MpOworCQkJaWYgKCF0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkKKwkJCQlxdWV1ZV9jaF9mcmFtZShjaCwgUEhfREFUQV9DTkYsIGlkLCBOVUxMKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCWNhc2UgUEhfQUNUSVZBVEVfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKSkKKwkJCXJldCA9IG1vZGVoZGxjKGJjaCwgY2gtPnByb3RvY29sKTsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmMtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFyZXQpCisJCQlfcXVldWVfZGF0YShjaCwgUEhfQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQkJTlVMTCwgR0ZQX0tFUk5FTCk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgZmxhZ3MpOworCQltSVNETl9jbGVhcl9iY2hhbm5lbChiY2gpOworCQltb2RlaGRsYyhiY2gsIElTRE5fUF9OT05FKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmMtPmxvY2ssIGZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoY2gsIFBIX0RFQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCWlmICghcmV0KQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2luaXRoZGxjKHN0cnVjdCBmcml0emNhcmQgKmZjKQoreworCW1vZGVoZGxjKCZmYy0+YmNoWzBdLCAtMSk7CisJbW9kZWhkbGMoJmZjLT5iY2hbMV0sIC0xKTsKK30KKwordm9pZAorY2xlYXJfcGVuZGluZ19oZGxjX2ludHMoc3RydWN0IGZyaXR6Y2FyZCAqZmMpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IHJlYWRfc3RhdHVzKGZjLCAxKTsKKwlwcl9kZWJ1ZygiJXM6IEhETEMgMSBTVEEgJXhcbiIsIGZjLT5uYW1lLCB2YWwpOworCXZhbCA9IHJlYWRfc3RhdHVzKGZjLCAyKTsKKwlwcl9kZWJ1ZygiJXM6IEhETEMgMiBTVEEgJXhcbiIsIGZjLT5uYW1lLCB2YWwpOworfQorCitzdGF0aWMgdm9pZAorcmVzZXRfYXZtKHN0cnVjdCBmcml0emNhcmQgKmZjKQoreworCXN3aXRjaCAoZmMtPnR5cGUpIHsKKwljYXNlIEFWTV9GUklUWl9QQ0k6CisJCWZjLT5jdHJscmVnID0gQVZNX1NUQVRVUzBfUkVTRVQgfCBBVk1fU1RBVFVTMF9ESVNfVElNRVI7CisJCWJyZWFrOworCWNhc2UgQVZNX0ZSSVRaX1BDSVYyOgorCQlmYy0+Y3RybHJlZyA9IEFWTV9TVEFUVVMwX1JFU0VUOworCQlicmVhazsKKwl9CisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXM6IHJlc2V0XG4iLCBmYy0+bmFtZSk7CisJZGlzYWJsZV9od2lycShmYyk7CisJbWRlbGF5KDUpOworCXN3aXRjaCAoZmMtPnR5cGUpIHsKKwljYXNlIEFWTV9GUklUWl9QQ0k6CisJCWZjLT5jdHJscmVnID0gQVZNX1NUQVRVUzBfRElTX1RJTUVSIHwgQVZNX1NUQVRVUzBfUkVTX1RJTUVSOworCQlkaXNhYmxlX2h3aXJxKGZjKTsKKwkJb3V0YihBVk1fU1RBVFVTMV9FTkFfSU9NLCBmYy0+YWRkciArIDMpOworCQlicmVhazsKKwljYXNlIEFWTV9GUklUWl9QQ0lWMjoKKwkJZmMtPmN0cmxyZWcgPSAwOworCQlkaXNhYmxlX2h3aXJxKGZjKTsKKwkJYnJlYWs7CisJfQorCW1kZWxheSgxKTsKKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlczogUzAvUzEgJXgvJXhcbiIsIGZjLT5uYW1lLAorCQkJaW5iKGZjLT5hZGRyICsgMiksIGluYihmYy0+YWRkciArIDMpKTsKK30KKworc3RhdGljIGludAoraW5pdF9jYXJkKHN0cnVjdCBmcml0emNhcmQgKmZjKQoreworCWludAkJcmV0LCBjbnQgPSAzOworCXVfbG9uZwkJZmxhZ3M7CisKKwlyZXNldF9hdm0oZmMpOyAvKiBkaXNhYmxlIElSUSAqLworCWlmIChmYy0+dHlwZSA9PSBBVk1fRlJJVFpfUENJVjIpCisJCXJldCA9IHJlcXVlc3RfaXJxKGZjLT5pcnEsIGF2bV9mcml0enYyX2ludGVycnVwdCwKKwkJCUlSUUZfU0hBUkVELCBmYy0+bmFtZSwgZmMpOworCWVsc2UKKwkJcmV0ID0gcmVxdWVzdF9pcnEoZmMtPmlycSwgYXZtX2ZyaXR6X2ludGVycnVwdCwKKwkJCUlSUUZfU0hBUkVELCBmYy0+bmFtZSwgZmMpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiJXM6IGNvdWxkbid0IGdldCBpbnRlcnJ1cHQgJWRcbiIsCisJCQlmYy0+bmFtZSwgZmMtPmlycSk7CisJCXJldHVybiByZXQ7CisJfQorCXdoaWxlIChjbnQtLSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmMtPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gZmMtPmlzYWMuaW5pdCgmZmMtPmlzYWMpOworCQlpZiAocmV0KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYy0+bG9jaywgZmxhZ3MpOworCQkJcHJfaW5mbygiJXM6IElTQUMgaW5pdCBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCQlmYy0+bmFtZSwgcmV0KTsKKwkJCWJyZWFrOworCQl9CisJCWNsZWFyX3BlbmRpbmdfaGRsY19pbnRzKGZjKTsKKwkJaW5pdGhkbGMoZmMpOworCQllbmFibGVfaHdpcnEoZmMpOworCQkvKiBSRVNFVCBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIgKi8KKwkJaWYgKEFWTV9GUklUWl9QQ0lWMiA9PSBmYy0+dHlwZSkgeworCQkJV3JpdGVJU0FDX1YyKGZjLCBJU0FDWF9NQVNLLCAwKTsKKwkJCVdyaXRlSVNBQ19WMihmYywgSVNBQ1hfQ01EUkQsIDB4NDEpOworCQl9IGVsc2UgeworCQkJV3JpdGVJU0FDX1YxKGZjLCBJU0FDX01BU0ssIDApOworCQkJV3JpdGVJU0FDX1YxKGZjLCBJU0FDX0NNRFIsIDB4NDEpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCS8qIFRpbWVvdXQgMTBtcyAqLworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQkJcHJfbm90aWNlKCIlczogSVJRICVkIGNvdW50ICVkXG4iLCBmYy0+bmFtZSwKKwkJCQlmYy0+aXJxLCBmYy0+aXJxY250KTsKKwkJaWYgKCFmYy0+aXJxY250KSB7CisJCQlwcl9pbmZvKCIlczogSVJRKCVkKSBnZXR0aW5nIG5vIElSUXMgZHVyaW5nIGluaXQgJWRcbiIsCisJCQkJZmMtPm5hbWUsIGZjLT5pcnEsIDMgLSBjbnQpOworCQkJcmVzZXRfYXZtKGZjKTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKKwl9CisJZnJlZV9pcnEoZmMtPmlycSwgZmMpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50CitjaGFubmVsX2JjdHJsKHN0cnVjdCBiY2hhbm5lbCAqYmNoLCBzdHJ1Y3QgbUlTRE5fY3RybF9yZXEgKmNxKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBmcml0emNhcmQgKmZjID0gYmNoLT5odzsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSAwOworCQlicmVhazsKKwkvKiBOb3RoaW5nIGltcGxlbWVudGVkIHlldCAqLworCWNhc2UgTUlTRE5fQ1RSTF9GSUxMX0VNUFRZOgorCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIE9wICV4XG4iLCBmYy0+bmFtZSwgX19mdW5jX18sIGNxLT5vcCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cithdm1fYmN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaCA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IGJjaGFubmVsLCBjaCk7CisJc3RydWN0IGZyaXR6Y2FyZCAqZmMgPSBiY2gtPmh3OworCWludCByZXQgPSAtRUlOVkFMOworCXVfbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczogJXMgY21kOiV4ICVwXG4iLCBmYy0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0xPU0VfQ0hBTk5FTDoKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncyk7CisJCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZmYy0+bG9jaywgZmxhZ3MpOworCQkJbUlTRE5fZnJlZWJjaGFubmVsKGJjaCk7CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RYX0JVU1ksICZiY2gtPkZsYWdzKTsKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncyk7CisJCQltb2RlaGRsYyhiY2gsIElTRE5fUF9OT05FKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZjLT5sb2NrLCBmbGFncyk7CisJCX0KKwkJY2gtPnByb3RvY29sID0gSVNETl9QX05PTkU7CisJCWNoLT5wZWVyID0gTlVMTDsKKwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgQ09OVFJPTF9DSEFOTkVMOgorCQlyZXQgPSBjaGFubmVsX2JjdHJsKGJjaCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gcHJpbSgleClcbiIsIGZjLT5uYW1lLCBfX2Z1bmNfXywgY21kKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9jdHJsKHN0cnVjdCBmcml0emNhcmQgICpmYywgc3RydWN0IG1JU0ROX2N0cmxfcmVxICpjcSkKK3sKKwlpbnQJcmV0ID0gMDsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSBNSVNETl9DVFJMX0xPT1A7CisJCWJyZWFrOworCWNhc2UgTUlTRE5fQ1RSTF9MT09QOgorCQkvKiBjcS0+Y2hhbm5lbDogMCBkaXNhYmxlLCAxIEIxIGxvb3AgMiBCMiBsb29wLCAzIGJvdGggKi8KKwkJaWYgKGNxLT5jaGFubmVsIDwgMCB8fCBjcS0+Y2hhbm5lbCA+IDMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBmYy0+aXNhYy5jdHJsKCZmYy0+aXNhYywgSFdfVEVTVExPT1AsIGNxLT5jaGFubmVsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gT3AgJXhcbiIsIGZjLT5uYW1lLCBfX2Z1bmNfXywgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fYmNoYW5uZWwoc3RydWN0IGZyaXR6Y2FyZCAqZmMsIHN0cnVjdCBjaGFubmVsX3JlcSAqcnEpCit7CisJc3RydWN0IGJjaGFubmVsCQkqYmNoOworCisJaWYgKHJxLT5hZHIuY2hhbm5lbCA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworCWJjaCA9ICZmYy0+YmNoW3JxLT5hZHIuY2hhbm5lbCAtIDFdOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncykpCisJCXJldHVybiAtRUJVU1k7IC8qIGItY2hhbm5lbCBjYW4gYmUgb25seSBvcGVuIG9uY2UgKi8KKwl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0ZJTExFTVBUWSwgJmJjaC0+RmxhZ3MpOworCWJjaC0+Y2gucHJvdG9jb2wgPSBycS0+cHJvdG9jb2w7CisJcnEtPmNoID0gJmJjaC0+Y2g7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZXZpY2UgY29udHJvbCBmdW5jdGlvbgorICovCitzdGF0aWMgaW50Cithdm1fZGN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbUlTRE5kZXZpY2UJKmRldiA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IG1JU0ROZGV2aWNlLCBEKTsKKwlzdHJ1Y3QgZGNoYW5uZWwJCSpkY2ggPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGNoYW5uZWwsIGRldik7CisJc3RydWN0IGZyaXR6Y2FyZAkqZmMgPSBkY2gtPmh3OworCXN0cnVjdCBjaGFubmVsX3JlcQkqcnE7CisJaW50CQkJZXJyID0gMDsKKworCXByX2RlYnVnKCIlczogJXMgY21kOiV4ICVwXG4iLCBmYy0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgT1BFTl9DSEFOTkVMOgorCQlycSA9IGFyZzsKKwkJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfVEVfUzApCisJCQllcnIgPSBmYy0+aXNhYy5vcGVuKCZmYy0+aXNhYywgcnEpOworCQllbHNlCisJCQllcnIgPSBvcGVuX2JjaGFubmVsKGZjLCBycSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCisJCQlwcl9pbmZvKCIlczogY2Fubm90IGdldCBtb2R1bGVcbiIsIGZjLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQlwcl9kZWJ1ZygiJXM6IGRldiglZCkgY2xvc2UgZnJvbSAlcFxuIiwgZmMtPm5hbWUsIGRjaC0+ZGV2LmlkLAorCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJCWJyZWFrOworCWNhc2UgQ09OVFJPTF9DSEFOTkVMOgorCQllcnIgPSBjaGFubmVsX2N0cmwoZmMsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogJXMgdW5rbm93biBjb21tYW5kICV4XG4iLAorCQkJZmMtPm5hbWUsIF9fZnVuY19fLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworaW50CitzZXR1cF9mcml0eihzdHJ1Y3QgZnJpdHpjYXJkICpmYykKK3sKKwl1MzIgdmFsLCB2ZXI7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGZjLT5hZGRyLCAzMiwgZmMtPm5hbWUpKSB7CisJCXByX2luZm8oIiVzOiBBVk0gY29uZmlnIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsCisJCQlmYy0+bmFtZSwgZmMtPmFkZHIsIGZjLT5hZGRyICsgMzEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJc3dpdGNoIChmYy0+dHlwZSkgeworCWNhc2UgQVZNX0ZSSVRaX1BDSToKKwkJdmFsID0gaW5sKGZjLT5hZGRyKTsKKwkJb3V0bChBVk1fSERMQ18xLCBmYy0+YWRkciArIENISVBfSU5ERVgpOworCQl2ZXIgPSBpbmwoZmMtPmFkZHIgKyBDSElQX1dJTkRPVyArIEhETENfU1RBVFVTKSA+PiAyNDsKKwkJaWYgKGRlYnVnICYgREVCVUdfSFcpIHsKKwkJCXByX25vdGljZSgiJXM6IFBDSSBzdGF0ICUjeFxuIiwgZmMtPm5hbWUsIHZhbCk7CisJCQlwcl9ub3RpY2UoIiVzOiBQQ0kgQ2xhc3MgJVggUmV2ICVkXG4iLCBmYy0+bmFtZSwKKwkJCQl2YWwgJiAweGZmLCAodmFsID4+IDgpICYgMHhmZik7CisJCQlwcl9ub3RpY2UoIiVzOiBIRExDIHZlcnNpb24gJXhcbiIsIGZjLT5uYW1lLCB2ZXIgJiAweGYpOworCQl9CisJCUFTU0lHTl9GVU5DKFYxLCBJU0FDLCBmYy0+aXNhYyk7CisJCWZjLT5pc2FjLnR5cGUgPSBJUEFDX1RZUEVfSVNBQzsKKwkJYnJlYWs7CisJY2FzZSBBVk1fRlJJVFpfUENJVjI6CisJCXZhbCA9IGlubChmYy0+YWRkcik7CisJCXZlciA9IGlubChmYy0+YWRkciArIEFWTV9IRExDX1NUQVRVU18xKSA+PiAyNDsKKwkJaWYgKGRlYnVnICYgREVCVUdfSFcpIHsKKwkJCXByX25vdGljZSgiJXM6IFBDSSBWMiBzdGF0ICUjeFxuIiwgZmMtPm5hbWUsIHZhbCk7CisJCQlwcl9ub3RpY2UoIiVzOiBQQ0kgVjIgQ2xhc3MgJVggUmV2ICVkXG4iLCBmYy0+bmFtZSwKKwkJCQl2YWwgJiAweGZmLCAodmFsPj44KSAmIDB4ZmYpOworCQkJcHJfbm90aWNlKCIlczogSERMQyB2ZXJzaW9uICV4XG4iLCBmYy0+bmFtZSwgdmVyICYgMHhmKTsKKwkJfQorCQlBU1NJR05fRlVOQyhWMiwgSVNBQywgZmMtPmlzYWMpOworCQlmYy0+aXNhYy50eXBlID0gSVBBQ19UWVBFX0lTQUNYOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWxlYXNlX3JlZ2lvbihmYy0+YWRkciwgMzIpOworCQlwcl9pbmZvKCIlczogQVZNIHVua25vd24gdHlwZSAlZFxuIiwgZmMtPm5hbWUsIGZjLT50eXBlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXByX25vdGljZSgiJXM6ICVzIGNvbmZpZyBpcnE6JWQgYmFzZToweCVYXG4iLCBmYy0+bmFtZSwKKwkJKGZjLT50eXBlID09IEFWTV9GUklUWl9QQ0kpID8gIkFWTSBGcml0eiFDQVJEIFBDSSIgOgorCQkiQVZNIEZyaXR6IUNBUkQgUENJdjIiLCBmYy0+aXJxLCBmYy0+YWRkcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX2NhcmQoc3RydWN0IGZyaXR6Y2FyZCAqY2FyZCkKK3sKKwl1X2xvbmcgZmxhZ3M7CisKKwlkaXNhYmxlX2h3aXJxKGNhcmQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJbW9kZWhkbGMoJmNhcmQtPmJjaFswXSwgSVNETl9QX05PTkUpOworCW1vZGVoZGxjKCZjYXJkLT5iY2hbMV0sIElTRE5fUF9OT05FKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJY2FyZC0+aXNhYy5yZWxlYXNlKCZjYXJkLT5pc2FjKTsKKwlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOworCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNoWzFdKTsKKwltSVNETl9mcmVlYmNoYW5uZWwoJmNhcmQtPmJjaFswXSk7CisJbUlTRE5fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmlzYWMuZGNoLmRldik7CisJcmVsZWFzZV9yZWdpb24oY2FyZC0+YWRkciwgMzIpOworCXBjaV9kaXNhYmxlX2RldmljZShjYXJkLT5wZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEoY2FyZC0+cGRldiwgTlVMTCk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWtmcmVlKGNhcmQpOworCUFWTV9jbnQtLTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3NldHVwX2luc3RhbmNlKHN0cnVjdCBmcml0emNhcmQgKmNhcmQpCit7CisJaW50IGksIGVycjsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzbnByaW50ZihjYXJkLT5uYW1lLCBNSVNETl9NQVhfSURMRU4gLSAxLCAiQVZNLiVkIiwgQVZNX2NudCArIDEpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGlzdCwgJkNhcmRzKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisKKwlfc2V0X2RlYnVnKGNhcmQpOworCWNhcmQtPmlzYWMubmFtZSA9IGNhcmQtPm5hbWU7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOworCWNhcmQtPmlzYWMuaHdsb2NrID0gJmNhcmQtPmxvY2s7CisJbUlTRE5pc2FjX2luaXQoJmNhcmQtPmlzYWMsIGNhcmQpOworCisJY2FyZC0+aXNhYy5kY2guZGV2LkJwcm90b2NvbHMgPSAoMSA8PCAoSVNETl9QX0JfUkFXICYgSVNETl9QX0JfTUFTSykpIHwKKwkgICAgKDEgPDwgKElTRE5fUF9CX0hETEMgJiBJU0ROX1BfQl9NQVNLKSk7CisJY2FyZC0+aXNhYy5kY2guZGV2LkQuY3RybCA9IGF2bV9kY3RybDsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWNhcmQtPmJjaFtpXS5uciA9IGkgKyAxOworCQlzZXRfY2hhbm5lbG1hcChpICsgMSwgY2FyZC0+aXNhYy5kY2guZGV2LmNoYW5uZWxtYXApOworCQltSVNETl9pbml0YmNoYW5uZWwoJmNhcmQtPmJjaFtpXSwgTUFYX0RBVEFfTUVNKTsKKwkJY2FyZC0+YmNoW2ldLmh3ID0gY2FyZDsKKwkJY2FyZC0+YmNoW2ldLmNoLnNlbmQgPSBhdm1fbDJsMUI7CisJCWNhcmQtPmJjaFtpXS5jaC5jdHJsID0gYXZtX2JjdHJsOworCQljYXJkLT5iY2hbaV0uY2gubnIgPSBpICsgMTsKKwkJbGlzdF9hZGQoJmNhcmQtPmJjaFtpXS5jaC5saXN0LCAmY2FyZC0+aXNhYy5kY2guZGV2LmJjaGFubmVscyk7CisJfQorCWVyciA9IHNldHVwX2ZyaXR6KGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJZXJyID0gbUlTRE5fcmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pc2FjLmRjaC5kZXYsICZjYXJkLT5wZGV2LT5kZXYsCisJCWNhcmQtPm5hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3JfcmVnOworCWVyciA9IGluaXRfY2FyZChjYXJkKTsKKwlpZiAoIWVycikgIHsKKwkJQVZNX2NudCsrOworCQlwcl9ub3RpY2UoIkFWTSAlZCBjYXJkcyBpbnN0YWxsZWQgREVCVUdcbiIsIEFWTV9jbnQpOworCQlyZXR1cm4gMDsKKwl9CisJbUlTRE5fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmlzYWMuZGNoLmRldik7CitlcnJvcl9yZWc6CisJcmVsZWFzZV9yZWdpb24oY2FyZC0+YWRkciwgMzIpOworZXJyb3I6CisJY2FyZC0+aXNhYy5yZWxlYXNlKCZjYXJkLT5pc2FjKTsKKwltSVNETl9mcmVlYmNoYW5uZWwoJmNhcmQtPmJjaFsxXSk7CisJbUlTRE5fZnJlZWJjaGFubmVsKCZjYXJkLT5iY2hbMF0pOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNhcmQtPmxpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorZnJpdHpwY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IGVyciA9IC1FTk9NRU07CisJc3RydWN0IGZyaXR6Y2FyZCAqY2FyZDsKKworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnJpdHpjYXJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYXJkKSB7CisJCXByX2luZm8oIk5vIGttZW0gZm9yIGZyaXR6Y2FyZFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVk1fQTFfVjIpCisJCWNhcmQtPnR5cGUgPSBBVk1fRlJJVFpfUENJVjI7CisJZWxzZQorCQljYXJkLT50eXBlID0gQVZNX0ZSSVRaX1BDSTsKKwljYXJkLT5wZGV2ID0gcGRldjsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKworCXByX25vdGljZSgibUlTRE46IGZvdW5kIGFkYXB0ZXIgJXMgYXQgJXNcbiIsCisJICAgICAgIChjaGFyICopIGVudC0+ZHJpdmVyX2RhdGEsIHBjaV9uYW1lKHBkZXYpKTsKKworCWNhcmQtPmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJY2FyZC0+aXJxID0gcGRldi0+aXJxOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwllcnIgPSBzZXR1cF9pbnN0YW5jZShjYXJkKTsKKwlpZiAoZXJyKQorCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0Citmcml0el9yZW1vdmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBmcml0emNhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoY2FyZCkKKwkJcmVsZWFzZV9jYXJkKGNhcmQpOworCWVsc2UKKwkJaWYgKGRlYnVnKQorCQkJcHJfaW5mbygiJXM6IGRydmRhdGEgYWxscmVhZHkgcmVtb3ZlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZmNwY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9WRU5ET1JfSURfQVZNLCBQQ0lfREVWSUNFX0lEX0FWTV9BMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgIDAsIDAsICh1bnNpZ25lZCBsb25nKSAiRnJpdHohQ2FyZCBQQ0kifSwKKwl7IFBDSV9WRU5ET1JfSURfQVZNLCBQQ0lfREVWSUNFX0lEX0FWTV9BMV9WMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkgIDAsIDAsICh1bnNpZ25lZCBsb25nKSAiRnJpdHohQ2FyZCBQQ0kgdjIiIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGZjcGNpX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBmY3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZmNwY2kiLAorCS5wcm9iZSA9IGZyaXR6cGNpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChmcml0el9yZW1vdmVfcGNpKSwKKwkuaWRfdGFibGUgPSBmY3BjaV9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBBVk1faW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwcl9ub3RpY2UoIkFWTSBGcml0eiBQQ0kgZHJpdmVyIFJldi4gJXNcbiIsIEFWTUZSSVRaX1JFVik7CisJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZmNwY2lfZHJpdmVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgQVZNX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmZjcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KEFWTV9pbml0KTsKK21vZHVsZV9leGl0KEFWTV9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNtdWx0aS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKaW5kZXggZTFkYWIzMC4uZmFlZDc5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMKQEAgLTM0MTYsMjIgKzM0MTYsOCBAQAogCXVfbG9uZwkJCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFhfTkVYVCwgJmJjaC0+RmxhZ3MpKSB7Ci0JCWRldl9rZnJlZV9za2IoYmNoLT5uZXh0X3NrYik7Ci0JCWJjaC0+bmV4dF9za2IgPSBOVUxMOwotCX0KLQlpZiAoYmNoLT50eF9za2IpIHsKLQkJZGV2X2tmcmVlX3NrYihiY2gtPnR4X3NrYik7Ci0JCWJjaC0+dHhfc2tiID0gTlVMTDsKLQl9Ci0JYmNoLT50eF9pZHggPSAwOwotCWlmIChiY2gtPnJ4X3NrYikgewotCQlkZXZfa2ZyZWVfc2tiKGJjaC0+cnhfc2tiKTsKLQkJYmNoLT5yeF9za2IgPSBOVUxMOwotCX0KKwltSVNETl9jbGVhcl9iY2hhbm5lbChiY2gpOwogCWhjLT5jaGFuW2JjaC0+c2xvdF0uY29lZmZfY291bnQgPSAwOwotCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncyk7Ci0JdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmYmNoLT5GbGFncyk7CiAJaGMtPmNoYW5bYmNoLT5zbG90XS5yeF9vZmYgPSAwOwogCWhjLT5jaGFuW2JjaC0+c2xvdF0uY29uZiA9IC0xOwogCW1vZGVfaGZjbXVsdGkoaGMsIGJjaC0+c2xvdCwgSVNETl9QX05PTkUsIC0xLCAwLCAtMSwgMCk7CkBAIC01Mzg0LDkgKzUzNzAsMTAgQEAKIAkgICAgZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9DQ0RfSEZDOFMgfHwKIAkgICAgZW50LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9DQ0RfSEZDRTEpKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkgICAgIlVua25vd24gSEZDIG11bHRpcG9ydCBjb250cm9sbGVyICh2ZW5kb3I6JXggZGV2aWNlOiV4ICIKLQkJICAgICJzdWJ2ZW5kb3I6JXggc3ViZGV2aWNlOiV4KVxuIiwgZW50LT52ZW5kb3IsIGVudC0+ZGV2aWNlLAotCQkgICAgZW50LT5zdWJ2ZW5kb3IsIGVudC0+c3ViZGV2aWNlKTsKKwkJICAgICJVbmtub3duIEhGQyBtdWx0aXBvcnQgY29udHJvbGxlciAodmVuZG9yOiUwNHggZGV2aWNlOiUwNHggIgorCQkgICAgInN1YnZlbmRvcjolMDR4IHN1YmRldmljZTolMDR4KVxuIiwgcGRldi0+dmVuZG9yLAorCQkgICAgcGRldi0+ZGV2aWNlLCBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLAorCQkgICAgcGRldi0+c3Vic3lzdGVtX2RldmljZSk7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgIlBsZWFzZSBjb250YWN0IHRoZSBkcml2ZXIgbWFpbnRhaW5lciBmb3Igc3VwcG9ydC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYwppbmRleCAyMjhmZmJlLi43MGU2YjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCkBAIC0xNTIyLDIyICsxNTIyLDggQEAKIAl1X2xvbmcJCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFhfTkVYVCwgJmJjaC0+RmxhZ3MpKSB7Ci0JCWRldl9rZnJlZV9za2IoYmNoLT5uZXh0X3NrYik7Ci0JCWJjaC0+bmV4dF9za2IgPSBOVUxMOwotCX0KLQlpZiAoYmNoLT50eF9za2IpIHsKLQkJZGV2X2tmcmVlX3NrYihiY2gtPnR4X3NrYik7Ci0JCWJjaC0+dHhfc2tiID0gTlVMTDsKLQl9Ci0JYmNoLT50eF9pZHggPSAwOwotCWlmIChiY2gtPnJ4X3NrYikgewotCQlkZXZfa2ZyZWVfc2tiKGJjaC0+cnhfc2tiKTsKLQkJYmNoLT5yeF9za2IgPSBOVUxMOwotCX0KKwltSVNETl9jbGVhcl9iY2hhbm5lbChiY2gpOwogCW1vZGVfaGZjcGNpKGJjaCwgYmNoLT5uciwgSVNETl9QX05PTkUpOwotCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncyk7Ci0JdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmYmNoLT5GbGFncyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGMtPmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKaW5kZXggNmI3NzA0Yy4uZmM0NmEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCkBAIC0xODA5LDIxICsxODA5LDcgQEAKIAkJICAgIGh3LT5uYW1lLCBfX2Z1bmNfXywgYmNoLT5ucik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9ORVhULCAmYmNoLT5GbGFncykpIHsKLQkJZGV2X2tmcmVlX3NrYihiY2gtPm5leHRfc2tiKTsKLQkJYmNoLT5uZXh0X3NrYiA9IE5VTEw7Ci0JfQotCWlmIChiY2gtPnR4X3NrYikgewotCQlkZXZfa2ZyZWVfc2tiKGJjaC0+dHhfc2tiKTsKLQkJYmNoLT50eF9za2IgPSBOVUxMOwotCX0KLQliY2gtPnR4X2lkeCA9IDA7Ci0JaWYgKGJjaC0+cnhfc2tiKSB7Ci0JCWRldl9rZnJlZV9za2IoYmNoLT5yeF9za2IpOwotCQliY2gtPnJ4X3NrYiA9IE5VTEw7Ci0JfQotCWNsZWFyX2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncyk7Ci0JY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmYmNoLT5GbGFncyk7CisJbUlTRE5fY2xlYXJfYmNoYW5uZWwoYmNoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOwogCWhmY3N1c2Jfc2V0dXBfYmNoKGJjaCwgSVNETl9QX05PTkUpOwogCWhmY3N1c2Jfc3RvcF9lbmRwb2ludChodywgYmNoLT5ucik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaW9oZWxwZXIuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9pb2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Mzg5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaW9oZWxwZXIuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIGlvaGVscGVyLmgKKyAqCQloZWxwZXIgZm9yIGRlZmluZSBmdW5jdGlvbnMgdG8gYWNjZXNzIElTRE4gaGFyZHdhcmUKKyAqICAgICAgICAgICAgICBzdXBwb3J0ZWQgYXJlIG1lbW9yeSBtYXBwZWQgSU8KKyAqCQlpbmRpcmVjdCBwb3J0IElPIChvbmUgcG9ydCBmb3IgYWRkcmVzcywgb25lIGZvciBkYXRhKQorICoKKyAqIEF1dGhvciAgICAgICBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSAgYnkgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0lPSEVMUEVSX0gKKyNkZWZpbmUgX0lPSEVMUEVSX0gKKwordHlwZWRlZgl1OAkocmVhZF9yZWdfZnVuYykodm9pZCAqaHdwLCB1OCBvZmZzZXQpOwordHlwZWRlZgl2b2lkCSh3cml0ZV9yZWdfZnVuYykodm9pZCAqaHdwLCB1OCBvZmZzZXQsIHU4IHZhbHVlKTsKK3R5cGVkZWYJdm9pZAkoZmlmb19mdW5jKSh2b2lkICpod3AsIHU4IG9mZnNldCwgdTggKmRhdGFwLCBpbnQgc2l6ZSk7CisKK3N0cnVjdCBfaW9wb3J0IHsKKwl1MzIJcG9ydDsKKwl1MzIJYWxlOworfTsKKworI2RlZmluZSBJT0ZVTkNfSU8obmFtZSwgaHdzLCBhcCkgXAorCXN0YXRpYyB1OCBSZWFkIyNuYW1lIyNfSU8odm9pZCAqcCwgdTggb2ZmKSB7XAorCQlzdHJ1Y3QgaHdzICpodyA9IHA7XAorCQlyZXR1cm4gaW5iKGh3LT5hcC5wb3J0ICsgb2ZmKTtcCisJfSBcCisJc3RhdGljIHZvaWQgV3JpdGUjI25hbWUjI19JTyh2b2lkICpwLCB1OCBvZmYsIHU4IHZhbCkge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJb3V0Yih2YWwsIGh3LT5hcC5wb3J0ICsgb2ZmKTtcCisJfSBcCisJc3RhdGljIHZvaWQgUmVhZEZpRm8jI25hbWUjI19JTyh2b2lkICpwLCB1OCBvZmYsIHU4ICpkcCwgaW50IHNpemUpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCWluc2IoaHctPmFwLnBvcnQgKyBvZmYsIGRwLCBzaXplKTtcCisJfSBcCisJc3RhdGljIHZvaWQgV3JpdGVGaUZvIyNuYW1lIyNfSU8odm9pZCAqcCwgdTggb2ZmLCB1OCAqZHAsIGludCBzaXplKSB7XAorCQlzdHJ1Y3QgaHdzICpodyA9IHA7XAorCQlvdXRzYihody0+YXAucG9ydCArIG9mZiwgZHAsIHNpemUpO1wKKwl9CisKKyNkZWZpbmUgSU9GVU5DX0lORChuYW1lLCBod3MsIGFwKSBcCisJc3RhdGljIHU4IFJlYWQjI25hbWUjI19JTkQodm9pZCAqcCwgdTggb2ZmKSB7XAorCQlzdHJ1Y3QgaHdzICpodyA9IHA7XAorCQlvdXRiKG9mZiwgaHctPmFwLmFsZSk7XAorCQlyZXR1cm4gaW5iKGh3LT5hcC5wb3J0KTtcCisJfSBcCisJc3RhdGljIHZvaWQgV3JpdGUjI25hbWUjI19JTkQodm9pZCAqcCwgdTggb2ZmLCB1OCB2YWwpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCW91dGIob2ZmLCBody0+YXAuYWxlKTtcCisJCW91dGIodmFsLCBody0+YXAucG9ydCk7XAorCX0gXAorCXN0YXRpYyB2b2lkIFJlYWRGaUZvIyNuYW1lIyNfSU5EKHZvaWQgKnAsIHU4IG9mZiwgdTggKmRwLCBpbnQgc2l6ZSkge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJb3V0YihvZmYsIGh3LT5hcC5hbGUpO1wKKwkJaW5zYihody0+YXAucG9ydCwgZHAsIHNpemUpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBXcml0ZUZpRm8jI25hbWUjI19JTkQodm9pZCAqcCwgdTggb2ZmLCB1OCAqZHAsIGludCBzaXplKSB7XAorCQlzdHJ1Y3QgaHdzICpodyA9IHA7XAorCQlvdXRiKG9mZiwgaHctPmFwLmFsZSk7XAorCQlvdXRzYihody0+YXAucG9ydCwgZHAsIHNpemUpO1wKKwl9CisKKyNkZWZpbmUgSU9GVU5DX01FTUlPKG5hbWUsIGh3cywgdHlwLCBhZHIpIFwKKwlzdGF0aWMgdTggUmVhZCMjbmFtZSMjX01JTyh2b2lkICpwLCB1OCBvZmYpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCXJldHVybiByZWFkYigoKHR5cCAqKWh3LT5hZHIpICsgb2ZmKTtcCisJfSBcCisJc3RhdGljIHZvaWQgV3JpdGUjI25hbWUjI19NSU8odm9pZCAqcCwgdTggb2ZmLCB1OCB2YWwpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCXdyaXRlYih2YWwsICgodHlwICopaHctPmFkcikgKyBvZmYpO1wKKwl9IFwKKwlzdGF0aWMgdm9pZCBSZWFkRmlGbyMjbmFtZSMjX01JTyh2b2lkICpwLCB1OCBvZmYsIHU4ICpkcCwgaW50IHNpemUpIHtcCisJCXN0cnVjdCBod3MgKmh3ID0gcDtcCisJCXdoaWxlIChzaXplLS0pXAorCQkJKmRwKysgPSByZWFkYigoKHR5cCAqKWh3LT5hZHIpICsgb2ZmKTtcCisJfSBcCisJc3RhdGljIHZvaWQgV3JpdGVGaUZvIyNuYW1lIyNfTUlPKHZvaWQgKnAsIHU4IG9mZiwgdTggKmRwLCBpbnQgc2l6ZSkge1wKKwkJc3RydWN0IGh3cyAqaHcgPSBwO1wKKwkJd2hpbGUgKHNpemUtLSlcCisJCQl3cml0ZWIoKmRwKyssICgodHlwICopaHctPmFkcikgKyBvZmYpO1wKKwl9CisKKyNkZWZpbmUgQVNTSUdOX0ZVTkModHlwLCBuYW1lLCBkZXN0KQlkbyB7XAorCWRlc3QucmVhZF9yZWcgPSAmUmVhZCMjbmFtZSMjXyMjdHlwO1wKKwlkZXN0LndyaXRlX3JlZyA9ICZXcml0ZSMjbmFtZSMjXyMjdHlwO1wKKwlkZXN0LnJlYWRfZmlmbyA9ICZSZWFkRmlGbyMjbmFtZSMjXyMjdHlwO1wKKwlkZXN0LndyaXRlX2ZpZm8gPSAmV3JpdGVGaUZvIyNuYW1lIyNfIyN0eXA7XAorCX0gd2hpbGUgKDApCisjZGVmaW5lIEFTU0lHTl9GVU5DX0lQQUModHlwLCB0YXJnZXQpCWRvIHtcCisJQVNTSUdOX0ZVTkModHlwLCBJU0FDLCB0YXJnZXQuaXNhYyk7XAorCUFTU0lHTl9GVU5DKHR5cCwgSVBBQywgdGFyZ2V0KTtcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXBhYy5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lwYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGE2Y2NmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lwYWMuaApAQCAtMCwwICsxLDQwNSBAQAorLyoKKyAqCisgKiBpcGFjLmgJRGVmaW5lcyBmb3IgdGhlIEluZmluZW9uIChmb3JtZXIgU2llbWVucykgSVNETgorICoJCWNoaXAgc2VyaWVzCisgKgorICogQXV0aG9yICAgICAgIEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIENvcHlyaWdodCAyMDA5ICBieSBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImlvaGVscGVyLmgiCisKK3N0cnVjdCBpc2FjX2h3IHsKKwlzdHJ1Y3QgZGNoYW5uZWwJCWRjaDsKKwl1MzIJCQl0eXBlOworCXUzMgkJCW9mZjsJCS8qIG9mZnNldCB0byBpc2FjIHJlZ3MgKi8KKwljaGFyCQkJKm5hbWU7CisJc3BpbmxvY2tfdAkJKmh3bG9jazsJLyogbG9jayBIVyBhY2NjZXNzICovCisJcmVhZF9yZWdfZnVuYwkJKnJlYWRfcmVnOworCXdyaXRlX3JlZ19mdW5jCQkqd3JpdGVfcmVnOworCWZpZm9fZnVuYwkJKnJlYWRfZmlmbzsKKwlmaWZvX2Z1bmMJCSp3cml0ZV9maWZvOworCWludAkJCSgqbW9uaXRvcikodm9pZCAqLCB1MzIsIHU4ICosIGludCk7CisJdm9pZAkJCSgqcmVsZWFzZSkoc3RydWN0IGlzYWNfaHcgKik7CisJaW50CQkJKCppbml0KShzdHJ1Y3QgaXNhY19odyAqKTsKKwlpbnQJCQkoKmN0cmwpKHN0cnVjdCBpc2FjX2h3ICosIHUzMiwgdV9sb25nKTsKKwlpbnQJCQkoKm9wZW4pKHN0cnVjdCBpc2FjX2h3ICosIHN0cnVjdCBjaGFubmVsX3JlcSAqKTsKKwl1OAkJCSptb25fdHg7CisJdTgJCQkqbW9uX3J4OworCWludAkJCW1vbl90eHA7CisJaW50CQkJbW9uX3R4YzsKKwlpbnQJCQltb25fcnhwOworCXN0cnVjdCBhcmNvZmlfbXNnCSphcmNvZmlfbGlzdDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlhcmNvZml0aW1lcjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlhcmNvZmlfd2FpdDsKKwl1OAkJCWFyY29maV9iYzsKKwl1OAkJCWFyY29maV9zdGF0ZTsKKwl1OAkJCW1vY3I7CisJdTgJCQlhZGYyOworCXU4CQkJc3RhdGU7Cit9OworCitzdHJ1Y3QgaXBhY19odzsKKworc3RydWN0IGhzY3hfaHcgeworCXN0cnVjdCBiY2hhbm5lbAkJYmNoOworCXN0cnVjdCBpcGFjX2h3CQkqaXA7CisJdTgJCQlmaWZvX3NpemU7CisJdTgJCQlvZmY7CS8qIG9mZnNldCB0byBJQ0Egb3IgSUNCICovCisJdTgJCQlzbG90OworCWNoYXIJCQlsb2dbNjRdOworfTsKKworc3RydWN0IGlwYWNfaHcgeworCXN0cnVjdCBpc2FjX2h3CQlpc2FjOworCXN0cnVjdCBoc2N4X2h3CQloc2N4WzJdOworCWNoYXIJCQkqbmFtZTsKKwl2b2lkCQkJKmh3OworCXNwaW5sb2NrX3QJCSpod2xvY2s7CS8qIGxvY2sgSFcgYWNjY2VzcyAqLworCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKKwl1MzIJCQl0eXBlOworCXJlYWRfcmVnX2Z1bmMJCSpyZWFkX3JlZzsKKwl3cml0ZV9yZWdfZnVuYwkJKndyaXRlX3JlZzsKKwlmaWZvX2Z1bmMJCSpyZWFkX2ZpZm87CisJZmlmb19mdW5jCQkqd3JpdGVfZmlmbzsKKwl2b2lkCQkJKCpyZWxlYXNlKShzdHJ1Y3QgaXBhY19odyAqKTsKKwlpbnQJCQkoKmluaXQpKHN0cnVjdCBpcGFjX2h3ICopOworCWludAkJCSgqY3RybCkoc3RydWN0IGlwYWNfaHcgKiwgdTMyLCB1X2xvbmcpOworCXU4CQkJY29uZjsKK307CisKKyNkZWZpbmUgSVBBQ19UWVBFX0lTQUMJCTB4MDAxMAorI2RlZmluZSBJUEFDX1RZUEVfSVBBQwkJMHgwMDIwCisjZGVmaW5lIElQQUNfVFlQRV9JU0FDWAkJMHgwMDQwCisjZGVmaW5lIElQQUNfVFlQRV9JUEFDWAkJMHgwMDgwCisjZGVmaW5lIElQQUNfVFlQRV9IU0NYCQkweDAxMDAKKworI2RlZmluZSBJU0FDX1VTRV9BUkNPRkkJCTB4MTAwMAorCisvKiBNb25pdG9yIGZ1bmN0aW9ucyAqLworI2RlZmluZSBNT05JVE9SX1JYXzAJCTB4MTAwMAorI2RlZmluZSBNT05JVE9SX1JYXzEJCTB4MTAwMQorI2RlZmluZSBNT05JVE9SX1RYXzAJCTB4MjAwMAorI2RlZmluZSBNT05JVE9SX1RYXzEJCTB4MjAwMQorCisvKiBBbGwgcmVnaXN0ZXJzIG9yaWdpbmFsIFNpZW1lbnMgU3BlYyAgKi8KKy8qIElQQUMvSVNBQyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVNBQ19NQVNLCQkweDIwCisjZGVmaW5lIElTQUNfSVNUQQkJMHgyMAorI2RlZmluZSBJU0FDX1NUQVIJCTB4MjEKKyNkZWZpbmUgSVNBQ19DTURSCQkweDIxCisjZGVmaW5lIElTQUNfRVhJUgkJMHgyNAorI2RlZmluZSBJU0FDX0FERjIJCTB4MzkKKyNkZWZpbmUgSVNBQ19TUENSCQkweDMwCisjZGVmaW5lIElTQUNfQURGMQkJMHgzOAorI2RlZmluZSBJU0FDX0NJUjAJCTB4MzEKKyNkZWZpbmUgSVNBQ19DSVgwCQkweDMxCisjZGVmaW5lIElTQUNfQ0lSMQkJMHgzMworI2RlZmluZSBJU0FDX0NJWDEJCTB4MzMKKyNkZWZpbmUgSVNBQ19TVENSCQkweDM3CisjZGVmaW5lIElTQUNfTU9ERQkJMHgyMgorI2RlZmluZSBJU0FDX1JTVEEJCTB4MjcKKyNkZWZpbmUgSVNBQ19SQkNMCQkweDI1CisjZGVmaW5lIElTQUNfUkJDSAkJMHgyQQorI2RlZmluZSBJU0FDX1RJTVIJCTB4MjMKKyNkZWZpbmUgSVNBQ19TUVhSCQkweDNiCisjZGVmaW5lIElTQUNfU1FSUgkJMHgzYgorI2RlZmluZSBJU0FDX01PU1IJCTB4M2EKKyNkZWZpbmUgSVNBQ19NT0NSCQkweDNhCisjZGVmaW5lIElTQUNfTU9SMAkJMHgzMgorI2RlZmluZSBJU0FDX01PWDAJCTB4MzIKKyNkZWZpbmUgSVNBQ19NT1IxCQkweDM0CisjZGVmaW5lIElTQUNfTU9YMQkJMHgzNAorCisjZGVmaW5lIElTQUNfUkJDSF9YQUMJCTB4ODAKKworI2RlZmluZSBJUEFDX0RfVElOMgkJMHgwMQorCisvKiBJUEFDL0hTQ1ggKi8KKyNkZWZpbmUgSVBBQ19JU1RBQgkJMHgyMAkvKiBSRAkqLworI2RlZmluZSBJUEFDX01BU0tCCQkweDIwCS8qIFdSCSovCisjZGVmaW5lIElQQUNfU1RBUkIJCTB4MjEJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19DTURSQgkJMHgyMQkvKiBXUgkqLworI2RlZmluZSBJUEFDX01PREVCCQkweDIyCS8qIFIvVwkqLworI2RlZmluZSBJUEFDX0VYSVJCCQkweDI0CS8qIFJECSovCisjZGVmaW5lIElQQUNfUkJDTEIJCTB4MjUJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19SQUgxCQkweDI2CS8qIFdSCSovCisjZGVmaW5lIElQQUNfUkFIMgkJMHgyNwkvKiBXUgkqLworI2RlZmluZSBJUEFDX1JTVEFCCQkweDI3CS8qIFJECSovCisjZGVmaW5lIElQQUNfUkFMMQkJMHgyOAkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19SQUwyCQkweDI5CS8qIFdSCSovCisjZGVmaW5lIElQQUNfUkhDUkIJCTB4MjkJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19YQkNMCQkweDJBCS8qIFdSCSovCisjZGVmaW5lIElQQUNfQ0NSMgkJMHgyQwkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19SQkNIQgkJMHgyRAkvKiBSRAkqLworI2RlZmluZSBJUEFDX1hCQ0gJCTB4MkQJLyogV1IJKi8KKyNkZWZpbmUgSFNDWF9WU1RSCQkweDJFCS8qIFJECSovCisjZGVmaW5lIElQQUNfUkxDUgkJMHgyRQkvKiBXUgkqLworI2RlZmluZSBJUEFDX0NDUjEJCTB4MkYJLyogUi9XCSovCisjZGVmaW5lIElQQUNfVFNBWAkJMHgzMAkvKiBXUgkqLworI2RlZmluZSBJUEFDX1RTQVIJCTB4MzEJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19YQ0NSCQkweDMyCS8qIFdSCSovCisjZGVmaW5lIElQQUNfUkNDUgkJMHgzMwkvKiBXUgkqLworCisvKiBJUEFDX0lTVEFCL0lQQUNfTUFTS0IgYml0cyAqLworI2RlZmluZSBJUEFDX0JfWFBSCQkweDEwCisjZGVmaW5lIElQQUNfQl9SUEYJCTB4NDAKKyNkZWZpbmUgSVBBQ19CX1JNRQkJMHg4MAorI2RlZmluZSBJUEFDX0JfT04JCTB4MkYKKworLyogSVBBQ19FWElSQiBiaXRzICovCisjZGVmaW5lIElQQUNfQl9SRlMJCTB4MDQKKyNkZWZpbmUgSVBBQ19CX1JGTwkJMHgxMAorI2RlZmluZSBJUEFDX0JfWERVCQkweDQwCisjZGVmaW5lIElQQUNfQl9YTVIJCTB4ODAKKworLyogSVBBQyBzcGVjaWFsIHJlZ2lzdGVycyAqLworI2RlZmluZSBJUEFDX0NPTkYJCTB4QzAJLyogUi9XCSovCisjZGVmaW5lIElQQUNfSVNUQQkJMHhDMQkvKiBSRAkqLworI2RlZmluZSBJUEFDX01BU0sJCTB4QzEJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19JRAkJCTB4QzIJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19BQ0ZHCQkweEMzCS8qIFIvVwkqLworI2RlZmluZSBJUEFDX0FPRQkJMHhDNAkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19BUlgJCTB4QzUJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ19BVFgJCTB4QzUJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ19QSVRBMQkJMHhDNgkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19QSVRBMgkJMHhDNwkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19QT1RBMQkJMHhDOAkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19QT1RBMgkJMHhDOQkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ19QQ0ZHCQkweENBCS8qIFIvVwkqLworI2RlZmluZSBJUEFDX1NDRkcJCTB4Q0IJLyogUi9XCSovCisjZGVmaW5lIElQQUNfVElNUjIJCTB4Q0MJLyogUi9XCSovCisKKy8qIElQQUNfSVNUQS9fTUFTSyBiaXRzICovCisjZGVmaW5lIElQQUNfX0VYQgkJMHgwMQorI2RlZmluZSBJUEFDX19JQ0IJCTB4MDIKKyNkZWZpbmUgSVBBQ19fRVhBCQkweDA0CisjZGVmaW5lIElQQUNfX0lDQQkJMHgwOAorI2RlZmluZSBJUEFDX19FWEQJCTB4MTAKKyNkZWZpbmUgSVBBQ19fSUNECQkweDIwCisjZGVmaW5lIElQQUNfX0lOVDAJCTB4NDAKKyNkZWZpbmUgSVBBQ19fSU5UMQkJMHg4MAorI2RlZmluZSBJUEFDX19PTgkJMHhDMAorCisvKiBIU0NYIElTVEEvTUFTSyBiaXRzICovCisjZGVmaW5lIEhTQ1hfX0VYQgkJMHgwMQorI2RlZmluZSBIU0NYX19FWEEJCTB4MDIKKyNkZWZpbmUgSFNDWF9fSUNBCQkweDA0CisKKy8qIElTQUMvSVNBQ1gvSVBBQy9JUEFDWCBMMSBjb21tYW5kcyAqLworI2RlZmluZSBJU0FDX0NNRF9USU0JCTB4MAorI2RlZmluZSBJU0FDX0NNRF9SUwkJMHgxCisjZGVmaW5lIElTQUNfQ01EX1NDWgkJMHg0CisjZGVmaW5lIElTQUNfQ01EX1NTWgkJMHgyCisjZGVmaW5lIElTQUNfQ01EX0FSOAkJMHg4CisjZGVmaW5lIElTQUNfQ01EX0FSMTAJCTB4OQorI2RlZmluZSBJU0FDX0NNRF9BUkwJCTB4QQorI2RlZmluZSBJU0FDX0NNRF9EVUkJCTB4RgorCisvKiBJU0FDL0lTQUNYL0lQQUMvSVBBQ1ggTDEgaW5kaWNhdGlvbnMgKi8KKyNkZWZpbmUgSVNBQ19JTkRfUlMJCTB4MQorI2RlZmluZSBJU0FDX0lORF9QVQkJMHg3CisjZGVmaW5lIElTQUNfSU5EX0RSCQkweDAKKyNkZWZpbmUgSVNBQ19JTkRfU0QJCTB4MgorI2RlZmluZSBJU0FDX0lORF9ESVMJCTB4MworI2RlZmluZSBJU0FDX0lORF9FSQkJMHg2CisjZGVmaW5lIElTQUNfSU5EX1JTWQkJMHg0CisjZGVmaW5lIElTQUNfSU5EX0FSRAkJMHg4CisjZGVmaW5lIElTQUNfSU5EX1RJCQkweEEKKyNkZWZpbmUgSVNBQ19JTkRfQVRJCQkweEIKKyNkZWZpbmUgSVNBQ19JTkRfQUk4CQkweEMKKyNkZWZpbmUgSVNBQ19JTkRfQUkxMAkJMHhECisjZGVmaW5lIElTQUNfSU5EX0RJRAkJMHhGCisKKy8qIHRoZSBuZXcgSVNBQ1ggLyBJUEFDWCAqLworLyogRC1jaGFubmVsIHJlZ2lzdGVycyAgICovCisjZGVmaW5lIElTQUNYX1JGSUZPRAkJMHgwMAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9YRklGT0QJCTB4MDAJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfSVNUQUQJCTB4MjAJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfTUFTS0QJCTB4MjAJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfU1RBUkQJCTB4MjEJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfQ01EUkQJCTB4MjEJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfTU9ERUQJCTB4MjIJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0VYTUQxCQkweDIzCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9USU1SMQkJMHgyNAkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfU0FQMQkJMHgyNQkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9TQVAyCQkweDI2CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX1JCQ0xECQkweDI2CS8qIFJECSovCisjZGVmaW5lIElTQUNYX1JCQ0hECQkweDI3CS8qIFJECSovCisjZGVmaW5lIElTQUNYX1RFSTEJCTB4MjcJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfVEVJMgkJMHgyOAkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9SU1RBRAkJMHgyOAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9UTUQJCTB4MjkJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NJUjAJCTB4MkUJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfQ0lYMAkJMHgyRQkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9DSVIxCQkweDJGCS8qIFJECSovCisjZGVmaW5lIElTQUNYX0NJWDEJCTB4MkYJLyogV1IJKi8KKworLyogVHJhbnNjZWl2ZXIgcmVnaXN0ZXJzICAqLworI2RlZmluZSBJU0FDWF9UUl9DT05GMAkJMHgzMAkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfVFJfQ09ORjEJCTB4MzEJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX1RSX0NPTkYyCQkweDMyCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9UUl9TVEEJCTB4MzMJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfVFJfQ01ECQkweDM0CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9TUVJSMQkJMHgzNQkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9TUVhSMQkJMHgzNQkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9TUVJSMgkJMHgzNgkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9TUVhSMgkJMHgzNgkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9TUVJSMwkJMHgzNwkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9TUVhSMwkJMHgzNwkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9JU1RBVFIJCTB4MzgJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfTUFTS1RSCQkweDM5CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9UUl9NT0RFCQkweDNBCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9BQ0ZHMQkJMHgzQwkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQUNGRzIJCTB4M0QJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0FPRQkJMHgzRQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQVJYCQkweDNGCS8qIFJECSovCisjZGVmaW5lIElTQUNYX0FUWAkJMHgzRgkvKiBXUgkqLworCisvKiBJT006IFRpbWVzbG90LCBEUFMsIENEQSAgKi8KKyNkZWZpbmUgSVNBQ1hfQ0RBMTAJCTB4NDAJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NEQTExCQkweDQxCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9DREEyMAkJMHg0MgkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQ0RBMjEJCTB4NDMJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NEQV9UU0RQMTAJMHg0NAkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQ0RBX1RTRFAxMQkweDQ1CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9DREFfVFNEUDIwCTB4NDYJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0NEQV9UU0RQMjEJMHg0NwkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQkNIQV9UU0RQX0JDMQkweDQ4CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9CQ0hBX1RTRFBfQkMyCTB4NDkJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0JDSEJfVFNEUF9CQzEJMHg0QQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfQkNIQl9UU0RQX0JDMgkweDRCCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9UUl9UU0RQX0JDMQkweDRDCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9UUl9UU0RQX0JDMgkweDRECS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9DREExX0NSCQkweDRFCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9DREEyX0NSCQkweDRGCS8qIFIvVwkqLworCisvKiBJT006IENvbnRvbCwgU3luYyB0cmFuc2ZlciwgTW9uaXRvciAgICAqLworI2RlZmluZSBJU0FDWF9UUl9DUgkJMHg1MAkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfVFJDX0NSCQkweDUwCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9CQ0hBX0NSCQkweDUxCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9CQ0hCX0NSCQkweDUyCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9EQ0lfQ1IJCTB4NTMJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX0RDSUNfQ1IJCTB4NTMJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX01PTl9DUgkJMHg1NAkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfU0RTMV9DUgkJMHg1NQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfU0RTMl9DUgkJMHg1NgkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfSU9NX0NSCQkweDU3CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9TVEkJCTB4NTgJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfQVNUSQkJMHg1OAkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9NU1RJCQkweDU5CS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9TRFNfQ09ORgkJMHg1QQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfTUNEQQkJMHg1QgkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9NT1IJCTB4NUMJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfTU9YCQkweDVDCS8qIFdSCSovCisjZGVmaW5lIElTQUNYX01PU1IJCTB4NUQJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfTU9DUgkJMHg1RQkvKiBSL1cJKi8KKyNkZWZpbmUgSVNBQ1hfTVNUQQkJMHg1RgkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9NQ09ORgkJMHg1RgkvKiBXUgkqLworCisvKiBJbnRlcnJ1cHQgYW5kIGdlbmVyYWwgcmVnaXN0ZXJzICovCisjZGVmaW5lIElTQUNYX0lTVEEJCTB4NjAJLyogUkQJKi8KKyNkZWZpbmUgSVNBQ1hfTUFTSwkJMHg2MAkvKiBXUgkqLworI2RlZmluZSBJU0FDWF9BVVhJCQkweDYxCS8qIFJECSovCisjZGVmaW5lIElTQUNYX0FVWE0JCTB4NjEJLyogV1IJKi8KKyNkZWZpbmUgSVNBQ1hfTU9ERTEJCTB4NjIJLyogUi9XCSovCisjZGVmaW5lIElTQUNYX01PREUyCQkweDYzCS8qIFIvVwkqLworI2RlZmluZSBJU0FDWF9JRAkJMHg2NAkvKiBSRAkqLworI2RlZmluZSBJU0FDWF9TUkVTCQkweDY0CS8qIFdSCSovCisjZGVmaW5lIElTQUNYX1RJTVIyCQkweDY1CS8qIFIvVwkqLworCisvKiBSZWdpc3RlciBCaXRzICovCisvKiBJU0FDWC9JUEFDWCBfSVNUQUQgKFIpIGFuZCBfTUFTS0QgKFcpICovCisjZGVmaW5lIElTQUNYX0RfWERVCQkweDA0CisjZGVmaW5lIElTQUNYX0RfWE1SCQkweDA4CisjZGVmaW5lIElTQUNYX0RfWFBSCQkweDEwCisjZGVmaW5lIElTQUNYX0RfUkZPCQkweDIwCisjZGVmaW5lIElTQUNYX0RfUlBGCQkweDQwCisjZGVmaW5lIElTQUNYX0RfUk1FCQkweDgwCisKKy8qIElTQUNYL0lQQUNYIF9JU1RBIChSKSBhbmQgX01BU0sgKFcpICovCisjZGVmaW5lIElTQUNYX19JQ0QJCTB4MDEKKyNkZWZpbmUgSVNBQ1hfX01PUwkJMHgwMgorI2RlZmluZSBJU0FDWF9fVFJBTgkJMHgwNAorI2RlZmluZSBJU0FDWF9fQVVYCQkweDA4CisjZGVmaW5lIElTQUNYX19DSUMJCTB4MTAKKyNkZWZpbmUgSVNBQ1hfX1NUCQkweDIwCisjZGVmaW5lIElQQUNYX19JQ0IJCTB4NDAKKyNkZWZpbmUgSVBBQ1hfX0lDQQkJMHg4MAorI2RlZmluZSBJUEFDWF9fT04JCTB4MkMKKworLyogSVNBQ1gvSVBBQ1ggX0NNRFJEIChXKSAqLworI2RlZmluZSBJU0FDWF9DTURSRF9YUkVTCTB4MDEKKyNkZWZpbmUgSVNBQ1hfQ01EUkRfWE1FCQkweDAyCisjZGVmaW5lIElTQUNYX0NNRFJEX1hURgkJMHgwOAorI2RlZmluZSBJU0FDWF9DTURSRF9TVEkJCTB4MTAKKyNkZWZpbmUgSVNBQ1hfQ01EUkRfUlJFUwkweDQwCisjZGVmaW5lIElTQUNYX0NNRFJEX1JNQwkJMHg4MAorCisvKiBJU0FDWC9JUEFDWCBfUlNUQUQgKFIpICovCisjZGVmaW5lIElTQUNYX1JTVEFEX1RBCQkweDAxCisjZGVmaW5lIElTQUNYX1JTVEFEX0NSCQkweDAyCisjZGVmaW5lIElTQUNYX1JTVEFEX1NBMAkJMHgwNAorI2RlZmluZSBJU0FDWF9SU1RBRF9TQTEJCTB4MDgKKyNkZWZpbmUgSVNBQ1hfUlNUQURfUkFCCQkweDEwCisjZGVmaW5lIElTQUNYX1JTVEFEX0NSQwkJMHgyMAorI2RlZmluZSBJU0FDWF9SU1RBRF9SRE8JCTB4NDAKKyNkZWZpbmUgSVNBQ1hfUlNUQURfVkZSCQkweDgwCisKKy8qIElTQUNYL0lQQUNYIF9DSVIwIChSKSAqLworI2RlZmluZSBJU0FDWF9DSVIwX0JBUwkJMHgwMQorI2RlZmluZSBJU0FDWF9DSVIwX1NHCQkweDA4CisjZGVmaW5lIElTQUNYX0NJUjBfQ0lDMQkJMHgwOAorI2RlZmluZSBJU0FDWF9DSVIwX0NJQzAJCTB4MDgKKworLyogQi1jaGFubmVsIHJlZ2lzdGVycyAqLworI2RlZmluZSBJUEFDWF9PRkZfSUNBCQkweDcwCisjZGVmaW5lIElQQUNYX09GRl9JQ0IJCTB4ODAKKworLyogSUNBOiBJUEFDWF9PRkZfSUNBICsgUmVnIElDQjogSVBBQ1hfT0ZGX0lDQiArIFJlZyAqLworCisjZGVmaW5lIElQQUNYX0lTVEFCCQkweDAwICAgIC8qIFJECSovCisjZGVmaW5lIElQQUNYX01BU0tCCQkweDAwCS8qIFdSCSovCisjZGVmaW5lIElQQUNYX1NUQVJCCQkweDAxCS8qIFJECSovCisjZGVmaW5lIElQQUNYX0NNRFJCCQkweDAxCS8qIFdSCSovCisjZGVmaW5lIElQQUNYX01PREVCCQkweDAyCS8qIFIvVwkqLworI2RlZmluZSBJUEFDWF9FWE1CCQkweDAzCS8qIFIvVwkqLworI2RlZmluZSBJUEFDWF9SQUgxCQkweDA1CS8qIFdSCSovCisjZGVmaW5lIElQQUNYX1JBSDIJCTB4MDYJLyogV1IJKi8KKyNkZWZpbmUgSVBBQ1hfUkJDTEIJCTB4MDYJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ1hfUkJDSEIJCTB4MDcJLyogUkQJKi8KKyNkZWZpbmUgSVBBQ1hfUkFMMQkJMHgwNwkvKiBXUgkqLworI2RlZmluZSBJUEFDWF9SQUwyCQkweDA4CS8qIFdSCSovCisjZGVmaW5lIElQQUNYX1JTVEFCCQkweDA4CS8qIFJECSovCisjZGVmaW5lIElQQUNYX1RNQgkJMHgwOQkvKiBSL1cJKi8KKyNkZWZpbmUgSVBBQ1hfUkZJRk9CCQkweDBBCS8qIFJECSovCisjZGVmaW5lIElQQUNYX1hGSUZPQgkJMHgwQQkvKiBXUgkqLworCisvKiBJUEFDWF9JU1RBQiAvIElQQUNYX01BU0tCIGJpdHMgKi8KKyNkZWZpbmUgSVBBQ1hfQl9YRFUJCTB4MDQKKyNkZWZpbmUgSVBBQ1hfQl9YUFIJCTB4MTAKKyNkZWZpbmUgSVBBQ1hfQl9SRk8JCTB4MjAKKyNkZWZpbmUgSVBBQ1hfQl9SUEYJCTB4NDAKKyNkZWZpbmUgSVBBQ1hfQl9STUUJCTB4ODAKKworI2RlZmluZSBJUEFDWF9CX09OCQkweDBCCisKK2V4dGVybiBpbnQgbUlTRE5pc2FjX2luaXQoc3RydWN0IGlzYWNfaHcgKiwgdm9pZCAqKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBtSVNETmlzYWNfaXJxKHN0cnVjdCBpc2FjX2h3ICosIHU4KTsKK2V4dGVybiB1MzIgbUlTRE5pcGFjX2luaXQoc3RydWN0IGlwYWNfaHcgKiwgdm9pZCAqKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBtSVNETmlwYWNfaXJxKHN0cnVjdCBpcGFjX2h3ICosIGludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaXNhci5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lzYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTEzNGFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2lzYXIuaApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqCisgKiBpc2FyLmggICBJU0FSIChTaWVtZW5zIFBTQiA3MTEwKSBzcGVjaWZpYyBkZWZpbmVzCisgKgorICogQXV0aG9yIEthcnN0ZW4gS2VpbCAoa2VpbEBpc2RuNGxpbnV4LmRlKQorICoKKyAqIENvcHlyaWdodCAyMDA5ICBieSBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImlvaGVscGVyLmgiCisKK3N0cnVjdCBpc2FyX2h3OworCitzdHJ1Y3QgaXNhcl9jaCB7CisJc3RydWN0IGJjaGFubmVsCQliY2g7CisJc3RydWN0IGlzYXJfaHcJCSppczsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlmdGltZXI7CisJdTgJCQlucjsKKwl1OAkJCWRwYXRoOworCXU4CQkJbW1sOworCXU4CQkJc3RhdGU7CisJdTgJCQljbWQ7CisJdTgJCQltb2Q7CisJdTgJCQluZXdjbWQ7CisJdTgJCQluZXdtb2Q7CisJdTgJCQl0cnlfbW9kOworCXU4CQkJY29ubXNnWzE2XTsKK307CisKK3N0cnVjdCBpc2FyX2h3IHsKKwlzdHJ1Y3QJaXNhcl9jaAljaFsyXTsKKwl2b2lkCQkqaHc7CisJc3BpbmxvY2tfdAkqaHdsb2NrOwkvKiBsb2NrIEhXIGFjY2Nlc3MgKi8KKwljaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgbW9kdWxlCSpvd25lcjsKKwlyZWFkX3JlZ19mdW5jCSpyZWFkX3JlZzsKKwl3cml0ZV9yZWdfZnVuYwkqd3JpdGVfcmVnOworCWZpZm9fZnVuYwkqcmVhZF9maWZvOworCWZpZm9fZnVuYwkqd3JpdGVfZmlmbzsKKwlpbnQJCSgqY3RybCkodm9pZCAqLCB1MzIsIHVfbG9uZyk7CisJdm9pZAkJKCpyZWxlYXNlKShzdHJ1Y3QgaXNhcl9odyAqKTsKKwlpbnQJCSgqaW5pdCkoc3RydWN0IGlzYXJfaHcgKik7CisJaW50CQkoKm9wZW4pKHN0cnVjdCBpc2FyX2h3ICosIHN0cnVjdCBjaGFubmVsX3JlcSAqKTsKKwlpbnQJCSgqZmlybXdhcmUpKHN0cnVjdCBpc2FyX2h3ICosIGNvbnN0IHU4ICosIGludCk7CisJdW5zaWduZWQgbG9uZwlGbGFnczsKKwlpbnQJCXZlcnNpb247CisJdTgJCWJzdGF0OworCXU4CQlpaXM7CisJdTgJCWNtc2I7CisJdTgJCWNsc2I7CisJdTgJCWJ1ZlsyNTZdOworCXU4CQlsb2dbMjU2XTsKK307CisKKyNkZWZpbmUgSVNBUl9JUlFNU0sJMHgwNAorI2RlZmluZSBJU0FSX0lSUVNUQQkweDA0CisjZGVmaW5lIElTQVJfSVJRQklUCTB4NzUKKyNkZWZpbmUgSVNBUl9DVFJMX0gJMHg2MQorI2RlZmluZSBJU0FSX0NUUkxfTAkweDYwCisjZGVmaW5lIElTQVJfSUlTCTB4NTgKKyNkZWZpbmUgSVNBUl9JSUEJMHg1OAorI2RlZmluZSBJU0FSX0hJUwkweDUwCisjZGVmaW5lIElTQVJfSElBCTB4NTAKKyNkZWZpbmUgSVNBUl9NQk9YCTB4NGMKKyNkZWZpbmUgSVNBUl9XQURSCTB4NGEKKyNkZWZpbmUgSVNBUl9SQURSCTB4NDgKKworI2RlZmluZSBJU0FSX0hJU19WTlIJCTB4MTQKKyNkZWZpbmUgSVNBUl9ISVNfREtFWQkJMHgwMgorI2RlZmluZSBJU0FSX0hJU19GSVJNCQkweDFlCisjZGVmaW5lIElTQVJfSElTX1NURFNQCQkweDA4CisjZGVmaW5lIElTQVJfSElTX0RJQUcJCTB4MDUKKyNkZWZpbmUgSVNBUl9ISVNfUDBDRkcJCTB4M2MKKyNkZWZpbmUgSVNBUl9ISVNfUDEyQ0ZHCQkweDI0CisjZGVmaW5lIElTQVJfSElTX1NBUlRDRkcJMHgyNQorI2RlZmluZSBJU0FSX0hJU19QVU1QQ0ZHCTB4MjYKKyNkZWZpbmUgSVNBUl9ISVNfUFVNUENUUkwJMHgyYQorI2RlZmluZSBJU0FSX0hJU19JT00yQ0ZHCTB4MjcKKyNkZWZpbmUgSVNBUl9ISVNfSU9NMlJFUQkweDA3CisjZGVmaW5lIElTQVJfSElTX0lPTTJDVFJMCTB4MmIKKyNkZWZpbmUgSVNBUl9ISVNfQlNUUkVRCQkweDBjCisjZGVmaW5lIElTQVJfSElTX1BTVFJFUQkJMHgwZQorI2RlZmluZSBJU0FSX0hJU19TREFUQQkJMHgyMAorI2RlZmluZSBJU0FSX0hJU19EUFMxCQkweDQwCisjZGVmaW5lIElTQVJfSElTX0RQUzIJCTB4ODAKKyNkZWZpbmUgU0VUX0RQUyh4KQkJKCh4PDw2KSAmIDB4YzApCisKKyNkZWZpbmUgSVNBUl9JSVNfTVNDTVNECQkweDNmCisjZGVmaW5lIElTQVJfSUlTX1ZOUgkJMHgxNQorI2RlZmluZSBJU0FSX0lJU19ES0VZCQkweDAzCisjZGVmaW5lIElTQVJfSUlTX0ZJUk0JCTB4MWYKKyNkZWZpbmUgSVNBUl9JSVNfU1REU1AJCTB4MDkKKyNkZWZpbmUgSVNBUl9JSVNfRElBRwkJMHgyNQorI2RlZmluZSBJU0FSX0lJU19HU1RFVgkJMHgwMAorI2RlZmluZSBJU0FSX0lJU19CU1RFVgkJMHgyOAorI2RlZmluZSBJU0FSX0lJU19CU1RSU1AJCTB4MmMKKyNkZWZpbmUgSVNBUl9JSVNfUFNUUlNQCQkweDJlCisjZGVmaW5lIElTQVJfSUlTX1BTVEVWCQkweDJhCisjZGVmaW5lIElTQVJfSUlTX0lPTTJSU1AJMHgyNworI2RlZmluZSBJU0FSX0lJU19SREFUQQkJMHgyMAorI2RlZmluZSBJU0FSX0lJU19JTlZNU0cJCTB4M2YKKworI2RlZmluZSBJU0FSX0NUUkxfU1dWRVIJMHgxMAorI2RlZmluZSBJU0FSX0NUUkxfU1RTVAkweDQwCisKKyNkZWZpbmUgSVNBUl9NU0dfSFdWRVIJMHgyMAorCisjZGVmaW5lIElTQVJfRFAxX1VTRQkxCisjZGVmaW5lIElTQVJfRFAyX1VTRQkyCisjZGVmaW5lIElTQVJfUkFURV9SRVEJMworCisjZGVmaW5lIFBNT0RfRElTQUJMRQkwCisjZGVmaW5lIFBNT0RfRkFYCTEKKyNkZWZpbmUgUE1PRF9EQVRBTU9ERU0JMgorI2RlZmluZSBQTU9EX0hBTEZEVVBMRVgJMworI2RlZmluZSBQTU9EX1YxMTAJNAorI2RlZmluZSBQTU9EX0RUTUYJNQorI2RlZmluZSBQTU9EX0RUTUZfVFJBTlMJNgorI2RlZmluZSBQTU9EX0JZUEFTUwk3CisKKyNkZWZpbmUgUENUUkxfT1JJRwkweDgwCisjZGVmaW5lIFBWMzJQMl9WMjNSCTB4NDAKKyNkZWZpbmUgUFYzMlAyX1YyMkEJMHgyMAorI2RlZmluZSBQVjMyUDJfVjIyQgkweDEwCisjZGVmaW5lIFBWMzJQMl9WMjJDCTB4MDgKKyNkZWZpbmUgUFYzMlAyX1YyMQkweDAyCisjZGVmaW5lIFBWMzJQMl9CRUwJMHgwMQorCisvKiBMU0IgTVNCIGluIElTQVIgZG9jIHdyb25nICEhISBBcmdoaGggKi8KKyNkZWZpbmUgUFYzMlAzX0FNT0QJMHg4MAorI2RlZmluZSBQVjMyUDNfVjMyQgkweDAyCisjZGVmaW5lIFBWMzJQM19WMjNCCTB4MDEKKyNkZWZpbmUgUFYzMlA0XzQ4CTB4MTEKKyNkZWZpbmUgUFYzMlA1XzQ4CTB4MDUKKyNkZWZpbmUgUFYzMlA0X1VUNDgJMHgxMQorI2RlZmluZSBQVjMyUDVfVVQ0OAkweDBkCisjZGVmaW5lIFBWMzJQNF85NgkweDExCisjZGVmaW5lIFBWMzJQNV85NgkweDAzCisjZGVmaW5lIFBWMzJQNF9VVDk2CTB4MTEKKyNkZWZpbmUgUFYzMlA1X1VUOTYJMHgwZgorI2RlZmluZSBQVjMyUDRfQjk2CTB4OTEKKyNkZWZpbmUgUFYzMlA1X0I5NgkweDBiCisjZGVmaW5lIFBWMzJQNF9VVEI5NgkweGQxCisjZGVmaW5lIFBWMzJQNV9VVEI5NgkweDBmCisjZGVmaW5lIFBWMzJQNF8xMjAJMHhiMQorI2RlZmluZSBQVjMyUDVfMTIwCTB4MDkKKyNkZWZpbmUgUFYzMlA0X1VUMTIwCTB4ZjEKKyNkZWZpbmUgUFYzMlA1X1VUMTIwCTB4MGYKKyNkZWZpbmUgUFYzMlA0XzE0NAkweDk5CisjZGVmaW5lIFBWMzJQNV8xNDQJMHgwOQorI2RlZmluZSBQVjMyUDRfVVQxNDQJMHhmOQorI2RlZmluZSBQVjMyUDVfVVQxNDQJMHgwZgorI2RlZmluZSBQVjMyUDZfQ1ROCTB4MDEKKyNkZWZpbmUgUFYzMlA2X0FUTgkweDAyCisKKyNkZWZpbmUgUEZBWFAyX0NUTgkweDAxCisjZGVmaW5lIFBGQVhQMl9BVE4JMHgwNAorCisjZGVmaW5lIFBTRVZfMTBNU19USU1FUgkweDAyCisjZGVmaW5lIFBTRVZfQ09OX09OCTB4MTgKKyNkZWZpbmUgUFNFVl9DT05fT0ZGCTB4MTkKKyNkZWZpbmUgUFNFVl9WMjRfT0ZGCTB4MjAKKyNkZWZpbmUgUFNFVl9DVFNfT04JMHgyMQorI2RlZmluZSBQU0VWX0NUU19PRkYJMHgyMgorI2RlZmluZSBQU0VWX0RDRF9PTgkweDIzCisjZGVmaW5lIFBTRVZfRENEX09GRgkweDI0CisjZGVmaW5lIFBTRVZfRFNSX09OCTB4MjUKKyNkZWZpbmUgUFNFVl9EU1JfT0ZGCTB4MjYKKyNkZWZpbmUgUFNFVl9SRU1fUkVUCTB4Y2MKKyNkZWZpbmUgUFNFVl9SRU1fUkVOCTB4Y2QKKyNkZWZpbmUgUFNFVl9HU1ROX0NMUgkweGQ0CisKKyNkZWZpbmUgUFNFVl9SU1BfUkVBRFkJMHhiYworI2RlZmluZSBQU0VWX0xJTkVfVFhfSAkweGIzCisjZGVmaW5lIFBTRVZfTElORV9UWF9CCTB4YjIKKyNkZWZpbmUgUFNFVl9MSU5FX1JYX0gJMHhiMQorI2RlZmluZSBQU0VWX0xJTkVfUlhfQgkweGIwCisjZGVmaW5lIFBTRVZfUlNQX0NPTk4JMHhiNQorI2RlZmluZSBQU0VWX1JTUF9ESVNDCTB4YjcKKyNkZWZpbmUgUFNFVl9SU1BfRkNFUlIJMHhiOQorI2RlZmluZSBQU0VWX1JTUF9TSUxERVQJMHhiZQorI2RlZmluZSBQU0VWX1JTUF9TSUxPRkYJMHhhYgorI2RlZmluZSBQU0VWX0ZMQUdTX0RFVAkweGJhCisKKyNkZWZpbmUgUENUUkxfQ01EX1REVE1GCTB4NWEKKworI2RlZmluZSBQQ1RSTF9DTURfRlRICTB4YTcKKyNkZWZpbmUgUENUUkxfQ01EX0ZSSAkweGE1CisjZGVmaW5lIFBDVFJMX0NNRF9GVE0JMHhhOAorI2RlZmluZSBQQ1RSTF9DTURfRlJNCTB4YTYKKyNkZWZpbmUgUENUUkxfQ01EX1NJTE9OCTB4YWMKKyNkZWZpbmUgUENUUkxfQ01EX0NPTlQJMHhhMgorI2RlZmluZSBQQ1RSTF9DTURfRVNDCTB4YTQKKyNkZWZpbmUgUENUUkxfQ01EX1NJTE9GRiAweGFiCisjZGVmaW5lIFBDVFJMX0NNRF9IQUxUCTB4YTkKKworI2RlZmluZSBQQ1RSTF9MT0NfUkVUCTB4Y2YKKyNkZWZpbmUgUENUUkxfTE9DX1JFTgkweGNlCisKKyNkZWZpbmUgU01PREVfRElTQUJMRQkwCisjZGVmaW5lIFNNT0RFX1YxNAkyCisjZGVmaW5lIFNNT0RFX0hETEMJMworI2RlZmluZSBTTU9ERV9CSU5BUlkJNAorI2RlZmluZSBTTU9ERV9GU0tfVjE0CTUKKworI2RlZmluZSBTQ1RSTF9IRE1DX0JPVEgJMHgwMAorI2RlZmluZSBTQ1RSTF9IRE1DX0RUWAkweDgwCisjZGVmaW5lIFNDVFJMX0hETUNfRFJYCTB4NDAKKyNkZWZpbmUgU19QMV9PVlNQCTB4NDAKKyNkZWZpbmUgU19QMV9TTlAJMHgyMAorI2RlZmluZSBTX1AxX0VPUAkweDEwCisjZGVmaW5lIFNfUDFfRURQCTB4MDgKKyNkZWZpbmUgU19QMV9OU0IJMHgwNAorI2RlZmluZSBTX1AxX0NIU184CTB4MDMKKyNkZWZpbmUgU19QMV9DSFNfNwkweDAyCisjZGVmaW5lIFNfUDFfQ0hTXzYJMHgwMQorI2RlZmluZSBTX1AxX0NIU181CTB4MDAKKworI2RlZmluZSBTX1AyX0JGVF9ERUYJMHgxMAorCisjZGVmaW5lIElPTV9DVFJMX0VOQQkweDgwCisjZGVmaW5lIElPTV9DVFJMX05PUENNCTB4MDAKKyNkZWZpbmUgSU9NX0NUUkxfQUxBVwkweDAyCisjZGVmaW5lIElPTV9DVFJMX1VMQVcJMHgwNAorI2RlZmluZSBJT01fQ1RSTF9SQ1YJMHgwMQorCisjZGVmaW5lIElPTV9QMV9UWEQJMHgxMAorCisjZGVmaW5lIEhETENfRkVECTB4NDAKKyNkZWZpbmUgSERMQ19GU0QJMHgyMAorI2RlZmluZSBIRExDX0ZTVAkweDIwCisjZGVmaW5lIEhETENfRVJST1IJMHgxYworI2RlZmluZSBIRExDX0VSUl9GQUQJMHgxMAorI2RlZmluZSBIRExDX0VSUl9SRVIJMHgwOAorI2RlZmluZSBIRExDX0VSUl9DRVIJMHgwNAorI2RlZmluZSBTQVJUX05NRAkweDAxCisKKyNkZWZpbmUgQlNUQVRfUkRNMAkweDEKKyNkZWZpbmUgQlNUQVRfUkRNMQkweDIKKyNkZWZpbmUgQlNUQVRfUkRNMgkweDQKKyNkZWZpbmUgQlNUQVRfUkRNMwkweDgKKyNkZWZpbmUgQlNURVZfVEJPCTB4MWYKKyNkZWZpbmUgQlNURVZfUkJPCTB4MmYKKworLyogRkFYIFN0YXRlIE1hY2hpbmUgKi8KKyNkZWZpbmUgU1RGQVhfTlVMTAkwCisjZGVmaW5lIFNURkFYX1JFQURZCTEKKyNkZWZpbmUgU1RGQVhfTElORQkyCisjZGVmaW5lIFNURkFYX0NPTlQJMworI2RlZmluZSBTVEZBWF9BQ1RJVgk0CisjZGVmaW5lIFNURkFYX0VTQ0FQRQk1CisjZGVmaW5lIFNURkFYX1NJTERFVAk2CisKK2V4dGVybiB1MzIgbUlTRE5pc2FyX2luaXQoc3RydWN0IGlzYXJfaHcgKiwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIG1JU0ROaXNhcl9pcnEoc3RydWN0IGlzYXJfaHcgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaW5maW5lb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQ0MWJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaW5maW5lb24uYwpAQCAtMCwwICsxLDExNzggQEAKKy8qCisgKiBtSVNETmluZmluZW9uLmMKKyAqCQlTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiBmb2xsb3dpbmcgSW5maW5lb24gSVNETiBjaGlwc2V0cworICoJCS0gSVNBQyArIEhTQ1gKKyAqCQktIElQQUMgYW5kIElQQUMtWAorICoJCS0gSVNBQy1TWCArIEhTQ1gKKyAqCisgKiBTdXBwb3J0ZWQgY2FyZHM6CisgKgkJLSBEaWFsb2dpYyBEaXZhIDIuMAorICoJCS0gRGlhbG9naWMgRGl2YSAyLjBVCisgKgkJLSBEaWFsb2dpYyBEaXZhIDIuMDEKKyAqCQktIERpYWxvZ2ljIERpdmEgMi4wMgorICoJCS0gU2VkbGJhdWVyIFNwZWVkd2luCisgKgkJLSBIU1QgU2FwaGlyMworICoJCS0gRGV2ZWxvIChmb3JtZXIgRUxTQSkgTWljcm9saW5rIFBDSSAoUXVpY2tzdGVwIDEwMDApCisgKgkJLSBEZXZlbG8gKGZvcm1lciBFTFNBKSBRdWlja3N0ZXAgMzAwMAorICoJCS0gQmVya29tIFNjaXRlbCBCUklYIFF1YWRybworICoJCS0gRHIuTmV1aGF1cyAoU2FnZW0pIE5pY2N5CisgKgorICoKKyAqCisgKiBBdXRob3IgICAgICAgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tSVNETmh3Lmg+CisjaW5jbHVkZSAiaXBhYy5oIgorCisjZGVmaW5lIElORklORU9OX1JFVgkiMS4wIgorCitzdGF0aWMgaW50IGluZl9jbnQ7CitzdGF0aWMgdTMyIGRlYnVnOworc3RhdGljIHUzMiBpcnFsb29wcyA9IDQ7CisKK2VudW0gaW5mX3R5cGVzIHsKKwlJTkZfTk9ORSwKKwlJTkZfRElWQTIwLAorCUlORl9ESVZBMjBVLAorCUlORl9ESVZBMjAxLAorCUlORl9ESVZBMjAyLAorCUlORl9TUEVFRFdJTiwKKwlJTkZfU0FQSElSMywKKwlJTkZfUVMxMDAwLAorCUlORl9RUzMwMDAsCisJSU5GX05JQ0NZLAorCUlORl9TQ1RfMSwKKwlJTkZfU0NUXzIsCisJSU5GX1NDVF8zLAorCUlORl9TQ1RfNCwKKwlJTkZfR0FaRUxfUjY4NSwKKwlJTkZfR0FaRUxfUjc1MworfTsKKworZW51bSBhZGRyX21vZGUgeworCUFNX05PTkUgPSAwLAorCUFNX0lPLAorCUFNX01FTUlPLAorCUFNX0lORF9JTywKK307CisKK3N0cnVjdCBpbmZfY2luZm8geworCWVudW0gaW5mX3R5cGVzCXR5cDsKKwljb25zdCBjaGFyCSpmdWxsOworCWNvbnN0IGNoYXIJKm5hbWU7CisJZW51bSBhZGRyX21vZGUJY2ZnX21vZGU7CisJZW51bSBhZGRyX21vZGUJYWRkcl9tb2RlOworCXU4CQljZmdfYmFyOworCXU4CQlhZGRyX2JhcjsKKwl2b2lkCQkqaXJxZnVuYzsKK307CisKK3N0cnVjdCBfaW9hZGRyIHsKKwllbnVtIGFkZHJfbW9kZQltb2RlOworCXVuaW9uIHsKKwkJdm9pZCBfX2lvbWVtCSpwOworCQlzdHJ1Y3QgX2lvcG9ydAlpbzsKKwl9IGE7Cit9OworCitzdHJ1Y3QgX2lvaGFuZGxlIHsKKwllbnVtIGFkZHJfbW9kZQltb2RlOworCXJlc291cmNlX3NpemVfdAlzaXplOworCXJlc291cmNlX3NpemVfdAlzdGFydDsKKwl2b2lkIF9faW9tZW0JKnA7Cit9OworCitzdHJ1Y3QgaW5mX2h3IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCWNvbnN0IHN0cnVjdCBpbmZfY2luZm8JKmNpOworCWNoYXIJCQluYW1lW01JU0ROX01BWF9JRExFTl07CisJdTMyCQkJaXJxOworCXUzMgkJCWlycWNudDsKKwlzdHJ1Y3QgX2lvaGFuZGxlCWNmZzsKKwlzdHJ1Y3QgX2lvaGFuZGxlCWFkZHI7CisJc3RydWN0IF9pb2FkZHIJCWlzYWM7CisJc3RydWN0IF9pb2FkZHIJCWhzY3g7CisJc3BpbmxvY2tfdAkJbG9jazsJLyogSFcgYWNjZXNzIGxvY2sgKi8KKwlzdHJ1Y3QgaXBhY19odwkJaXBhYzsKKwlzdHJ1Y3QgaW5mX2h3CQkqc2NbM107CS8qIHNsYXZlIGNhcmRzICovCit9OworCisKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9IU1RfU0FQSElSMyAgICAgICAweDUyCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfU0VETEJBVUVSX1BDSSAgICAgMHg1MworI2RlZmluZSBQQ0lfU1VCX0lEX1NFRExCQVVFUiAgICAgICAgICAgIDB4MDEKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGluZmluZW9uX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyBQQ0lfVkVORE9SX0lEX0VJQ09OLCBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjB9LAorCXsgUENJX1ZFTkRPUl9JRF9FSUNPTiwgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBfVSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjBVfSwKKwl7IFBDSV9WRU5ET1JfSURfRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjAxfSwKKwl7IFBDSV9WRU5ET1JfSURfRUlDT04sIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMiwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9ESVZBMjAyfSwKKwl7IFBDSV9WRU5ET1JfSURfVElHRVJKRVQsIFBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwLAorCSAgUENJX1NVQlZFTkRPUl9TRURMQkFVRVJfUENJLCBQQ0lfU1VCX0lEX1NFRExCQVVFUiwgMCwgMCwKKwkgIElORl9TUEVFRFdJTn0sCisJeyBQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwKKwkgIFBDSV9TVUJWRU5ET1JfSFNUX1NBUEhJUjMsIFBDSV9TVUJfSURfU0VETEJBVUVSLCAwLCAwLCBJTkZfU0FQSElSM30sCisJeyBQQ0lfVkVORE9SX0lEX0VMU0EsIFBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTkssCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBJTkZfUVMxMDAwfSwKKwl7IFBDSV9WRU5ET1JfSURfRUxTQSwgUENJX0RFVklDRV9JRF9FTFNBX1FTMzAwMCwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9RUzMwMDB9LAorCXsgUENJX1ZFTkRPUl9JRF9TQVRTQUdFTSwgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9OSUNDWSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9OSUNDWX0sCisJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwKKwkgIFBDSV9WRU5ET1JfSURfQkVSS09NLCBQQ0lfREVWSUNFX0lEX0JFUktPTV9TQ0lURUxfUVVBRFJPLCAwLCAwLAorCSAgSU5GX1NDVF8xfSwKKwl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9SNjg1LAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSU5GX0dBWkVMX1I2ODV9LAorCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYX1I3NTMsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBJTkZfR0FaRUxfUjc1M30sCisJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfREpJTk5fSVRPTywKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElORl9HQVpFTF9SNzUzfSwKKwl7IFBDSV9WRU5ET1JfSURfUExYLCBQQ0lfREVWSUNFX0lEX1BMWF9PTElURUMsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBJTkZfR0FaRUxfUjc1M30sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGluZmluZW9uX2lkcyk7CisKKy8qIFBDSSBpbnRlcmZhY2Ugc3BlY2lmaWMgZGVmaW5lcyAqLworLyogRGl2YSAyLjAvMi4wVSAqLworI2RlZmluZSBESVZBX0hTQ1hfUE9SVAkJMHgwMAorI2RlZmluZSBESVZBX0hTQ1hfQUxFCQkweDA0CisjZGVmaW5lIERJVkFfSVNBQ19QT1JUCQkweDA4CisjZGVmaW5lIERJVkFfSVNBQ19BTEUJCTB4MEMKKyNkZWZpbmUgRElWQV9QQ0lfQ1RSTCAgICAgICAgICAgMHgxMAorCisvKiBESVZBX1BDSV9DVFJMIGJpdHMgKi8KKyNkZWZpbmUgRElWQV9JUlFfQklUCQkweDAxCisjZGVmaW5lIERJVkFfUkVTRVRfQklUCQkweDA4CisjZGVmaW5lIERJVkFfRUVQUk9NX0NMSwkJMHg0MAorI2RlZmluZSBESVZBX0xFRF9BCQkweDEwCisjZGVmaW5lIERJVkFfTEVEX0IJCTB4MjAKKyNkZWZpbmUgRElWQV9JUlFfQ0xSCQkweDgwCisKKy8qIERpdmEgMi4wMS8yLjAyICovCisvKiBTaWVtZW5zIFBJVEEgKi8KKyNkZWZpbmUgUElUQV9JQ1JfUkVHCQkweDAwCisjZGVmaW5lIFBJVEFfSU5UMF9TVEFUVVMJMHgwMgorCisjZGVmaW5lIFBJVEFfTUlTQ19SRUcJCTB4MWMKKyNkZWZpbmUgUElUQV9QQVJBX1NPRlRSRVNFVAkweDAxMDAwMDAwCisjZGVmaW5lIFBJVEFfU0VSX1NPRlRSRVNFVAkweDAyMDAwMDAwCisjZGVmaW5lIFBJVEFfUEFSQV9NUFhfTU9ERQkweDA0MDAwMDAwCisjZGVmaW5lIFBJVEFfSU5UMF9FTkFCTEUJMHgwMDAyMDAwMAorCisvKiBUSUdFUiAxMDAgUmVnaXN0ZXJzICovCisjZGVmaW5lIFRJR0VSX1JFU0VUX0FERFIJMHgwMAorI2RlZmluZSBUSUdFUl9FWFRFUk5fUkVTRVQJMHgwMQorI2RlZmluZSBUSUdFUl9BVVhfQ1RSTAkJMHgwMgorI2RlZmluZSBUSUdFUl9BVVhfREFUQQkJMHgwMworI2RlZmluZSBUSUdFUl9BVVhfSVJRTUFTSwkweDA1CisjZGVmaW5lIFRJR0VSX0FVWF9TVEFUVVMJMHgwNworCisvKiBUaWdlciBBVVggQklUcyAqLworI2RlZmluZSBUSUdFUl9JT01BU0sJCTB4ZGQJLyogMSBhbmQgNSBhcmUgaW5wdXRzICovCisjZGVmaW5lIFRJR0VSX0lSUV9CSVQJCTB4MDIKKworI2RlZmluZSBUSUdFUl9JUEFDX0FMRQkJMHhDMAorI2RlZmluZSBUSUdFUl9JUEFDX1BPUlQJCTB4QzgKKworLyogRUxTQSAobm93IERldmVsbykgUENJIGNhcmRzICovCisjZGVmaW5lIEVMU0FfSVJRX0FERFIJCTB4NGMKKyNkZWZpbmUgRUxTQV9JUlFfTUFTSwkJMHgwNAorI2RlZmluZSBRUzEwMDBfSVJRX09GRgkJMHgwMQorI2RlZmluZSBRUzMwMDBfSVJRX09GRgkJMHgwMworI2RlZmluZSBRUzEwMDBfSVJRX09OCQkweDQxCisjZGVmaW5lIFFTMzAwMF9JUlFfT04JCTB4NDMKKworLyogRHIgTmV1aGF1cy9TYWdlbSBOaWNjeSAqLworI2RlZmluZSBOSUNDWV9JU0FDX1BPUlQJCTB4MDAKKyNkZWZpbmUgTklDQ1lfSFNDWF9QT1JUCQkweDAxCisjZGVmaW5lIE5JQ0NZX0lTQUNfQUxFCQkweDAyCisjZGVmaW5lIE5JQ0NZX0hTQ1hfQUxFCQkweDAzCisKKyNkZWZpbmUgTklDQ1lfSVJRX0NUUkxfUkVHCTB4MzgKKyNkZWZpbmUgTklDQ1lfSVJRX0VOQUJMRQkweDAwMWYwMAorI2RlZmluZSBOSUNDWV9JUlFfRElTQUJMRQkweGZmMDAwMAorI2RlZmluZSBOSUNDWV9JUlFfQklUCQkweDgwMDAwMAorCisKKy8qIFNjaXRlbCBQTFggKi8KKyNkZWZpbmUgU0NUX1BMWF9JUlFfQUREUgkweDRjCisjZGVmaW5lIFNDVF9QTFhfUkVTRVRfQUREUgkweDUwCisjZGVmaW5lIFNDVF9QTFhfSVJRX0VOQUJMRQkweDQxCisjZGVmaW5lIFNDVF9QTFhfUkVTRVRfQklUCTB4MDQKKworLyogR2F6ZWwgKi8KKyNkZWZpbmUJR0FaRUxfSVBBQ19EQVRBX1BPUlQJMHgwNAorLyogR2F6ZWwgUExYICovCisjZGVmaW5lIEdBWkVMX0NOVFJMCQkweDUwCisjZGVmaW5lIEdBWkVMX1JFU0VUCQkweDA0CisjZGVmaW5lIEdBWkVMX1JFU0VUXzkwNTAJMHg0MDAwMDAwMAorI2RlZmluZSBHQVpFTF9JTkNTUgkJMHg0QworI2RlZmluZSBHQVpFTF9JU0FDX0VOCQkweDA4CisjZGVmaW5lIEdBWkVMX0lOVF9JU0FDCQkweDIwCisjZGVmaW5lIEdBWkVMX0hTQ1hfRU4JCTB4MDEKKyNkZWZpbmUgR0FaRUxfSU5UX0hTQ1gJCTB4MDQKKyNkZWZpbmUgR0FaRUxfUENJX0VOCQkweDQwCisjZGVmaW5lIEdBWkVMX0lQQUNfRU4JCTB4MDMKKworCitzdGF0aWMgTElTVF9IRUFEKENhcmRzKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKGNhcmRfbG9jayk7IC8qIHByb3RlY3QgQ2FyZHMgKi8KKworc3RhdGljIHZvaWQKK19zZXRfZGVidWcoc3RydWN0IGluZl9odyAqY2FyZCkKK3sKKwljYXJkLT5pcGFjLmlzYWMuZGNoLmRlYnVnID0gZGVidWc7CisJY2FyZC0+aXBhYy5oc2N4WzBdLmJjaC5kZWJ1ZyA9IGRlYnVnOworCWNhcmQtPmlwYWMuaHNjeFsxXS5iY2guZGVidWcgPSBkZWJ1ZzsKK30KKworc3RhdGljIGludAorc2V0X2RlYnVnKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaW5mX2h3ICpjYXJkOworCisJcmV0ID0gcGFyYW1fc2V0X3VpbnQodmFsLCBrcCk7CisJaWYgKCFyZXQpIHsKKwkJcmVhZF9sb2NrKCZjYXJkX2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhcmQsICZDYXJkcywgbGlzdCkKKwkJCV9zZXRfZGVidWcoY2FyZCk7CisJCXJlYWRfdW5sb2NrKCZjYXJkX2xvY2spOworCX0KKwlyZXR1cm4gcmV0OworfQorCitNT0RVTEVfQVVUSE9SKCJLYXJzdGVuIEtlaWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9WRVJTSU9OKElORklORU9OX1JFVik7Cittb2R1bGVfcGFyYW1fY2FsbChkZWJ1Zywgc2V0X2RlYnVnLCBwYXJhbV9nZXRfdWludCwgJmRlYnVnLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiaW5maW5lb24gZGVidWcgbWFzayIpOworbW9kdWxlX3BhcmFtKGlycWxvb3BzLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGlycWxvb3BzLCAiaW5maW5lb24gbWF4aW1hbCBpcnFsb29wcyAoZGVmYXVsdCA0KSIpOworCisvKiBJbnRlcmZhY2UgZnVuY3Rpb25zICovCisKK0lPRlVOQ19JTyhJU0FDLCBpbmZfaHcsIGlzYWMuYS5pbykKK0lPRlVOQ19JTyhJUEFDLCBpbmZfaHcsIGhzY3guYS5pbykKK0lPRlVOQ19JTkQoSVNBQywgaW5mX2h3LCBpc2FjLmEuaW8pCitJT0ZVTkNfSU5EKElQQUMsIGluZl9odywgaHNjeC5hLmlvKQorSU9GVU5DX01FTUlPKElTQUMsIGluZl9odywgdTMyLCBpc2FjLmEucCkKK0lPRlVOQ19NRU1JTyhJUEFDLCBpbmZfaHcsIHUzMiwgaHNjeC5hLnApCisKK3N0YXRpYyBpcnFyZXR1cm5fdAorZGl2YV9pcnEoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGluZl9odyAqaHcgPSBkZXZfaWQ7CisJdTggdmFsOworCisJc3Bpbl9sb2NrKCZody0+bG9jayk7CisJdmFsID0gaW5iKCh1MzIpaHctPmNmZy5zdGFydCArIERJVkFfUENJX0NUUkwpOworCWlmICghKHZhbCAmIERJVkFfSVJRX0JJVCkpIHsgLyogZm9yIHVzIG9yIHNoYXJlZCA/ICovCisJCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsgLyogc2hhcmVkICovCisJfQorCWh3LT5pcnFjbnQrKzsKKwltSVNETmlwYWNfaXJxKCZody0+aXBhYywgaXJxbG9vcHMpOworCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2RpdmEyMHhfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbmZfaHcgKmh3ID0gZGV2X2lkOworCXU4IHZhbDsKKworCXNwaW5fbG9jaygmaHctPmxvY2spOworCXZhbCA9IHJlYWRiKGh3LT5jZmcucCk7CisJaWYgKCEodmFsICYgUElUQV9JTlQwX1NUQVRVUykpIHsgLyogZm9yIHVzIG9yIHNoYXJlZCA/ICovCisJCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsgLyogc2hhcmVkICovCisJfQorCWh3LT5pcnFjbnQrKzsKKwltSVNETmlwYWNfaXJxKCZody0+aXBhYywgaXJxbG9vcHMpOworCXdyaXRlYihQSVRBX0lOVDBfU1RBVFVTLCBody0+Y2ZnLnApOyAvKiBBQ0sgUElUQSBJTlQwICovCisJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAordGlnZXJfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbmZfaHcgKmh3ID0gZGV2X2lkOworCXU4IHZhbDsKKworCXNwaW5fbG9jaygmaHctPmxvY2spOworCXZhbCA9IGluYigodTMyKWh3LT5jZmcuc3RhcnQgKyBUSUdFUl9BVVhfU1RBVFVTKTsKKwlpZiAodmFsICYgVElHRVJfSVJRX0JJVCkgeyAvKiBmb3IgdXMgb3Igc2hhcmVkID8gKi8KKwkJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOyAvKiBzaGFyZWQgKi8KKwl9CisJaHctPmlycWNudCsrOworCW1JU0ROaXBhY19pcnEoJmh3LT5pcGFjLCBpcnFsb29wcyk7CisJc3Bpbl91bmxvY2soJmh3LT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorZWxzYV9pcnEoaW50IGludG5vLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGluZl9odyAqaHcgPSBkZXZfaWQ7CisJdTggdmFsOworCisJc3Bpbl9sb2NrKCZody0+bG9jayk7CisJdmFsID0gaW5iKCh1MzIpaHctPmNmZy5zdGFydCArIEVMU0FfSVJRX0FERFIpOworCWlmICghKHZhbCAmIEVMU0FfSVJRX01BU0spKSB7CisJCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsgLyogc2hhcmVkICovCisJfQorCWh3LT5pcnFjbnQrKzsKKwltSVNETmlwYWNfaXJxKCZody0+aXBhYywgaXJxbG9vcHMpOworCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK25pY2N5X2lycShpbnQgaW50bm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW5mX2h3ICpodyA9IGRldl9pZDsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrKCZody0+bG9jayk7CisJdmFsID0gaW5sKCh1MzIpaHctPmNmZy5zdGFydCArIE5JQ0NZX0lSUV9DVFJMX1JFRyk7CisJaWYgKCEodmFsICYgTklDQ1lfSVJRX0JJVCkpIHsgLyogZm9yIHVzIG9yIHNoYXJlZCA/ICovCisJCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsgLyogc2hhcmVkICovCisJfQorCW91dGwodmFsLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBOSUNDWV9JUlFfQ1RSTF9SRUcpOworCWh3LT5pcnFjbnQrKzsKKwltSVNETmlwYWNfaXJxKCZody0+aXBhYywgaXJxbG9vcHMpOworCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2dhemVsX2lycShpbnQgaW50bm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW5mX2h3ICpodyA9IGRldl9pZDsKKwlpcnFyZXR1cm5fdCByZXQ7CisKKwlzcGluX2xvY2soJmh3LT5sb2NrKTsKKwlyZXQgPSBtSVNETmlwYWNfaXJxKCZody0+aXBhYywgaXJxbG9vcHMpOworCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlycXJldHVybl90CitpcGFjX2lycShpbnQgaW50bm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaW5mX2h3ICpodyA9IGRldl9pZDsKKwl1OCB2YWw7CisKKwlzcGluX2xvY2soJmh3LT5sb2NrKTsKKwl2YWwgPSBody0+aXBhYy5yZWFkX3JlZyhodywgSVBBQ19JU1RBKTsKKwlpZiAoISh2YWwgJiAweDNmKSkgeworCQlzcGluX3VubG9jaygmaHctPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7IC8qIHNoYXJlZCAqLworCX0KKwlody0+aXJxY250Kys7CisJbUlTRE5pcGFjX2lycSgmaHctPmlwYWMsIGlycWxvb3BzKTsKKwlzcGluX3VubG9jaygmaHctPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK2VuYWJsZV9od2lycShzdHJ1Y3QgaW5mX2h3ICpodykKK3sKKwl1MTYgdzsKKwl1MzIgdmFsOworCisJc3dpdGNoIChody0+Y2ktPnR5cCkgeworCWNhc2UgSU5GX0RJVkEyMDE6CisJY2FzZSBJTkZfRElWQTIwMjoKKwkJd3JpdGVsKFBJVEFfSU5UMF9FTkFCTEUsIGh3LT5jZmcucCk7CisJCWJyZWFrOworCWNhc2UgSU5GX1NQRUVEV0lOOgorCWNhc2UgSU5GX1NBUEhJUjM6CisJCW91dGIoVElHRVJfSVJRX0JJVCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgVElHRVJfQVVYX0lSUU1BU0spOworCQlicmVhazsKKwljYXNlIElORl9RUzEwMDA6CisJCW91dGIoUVMxMDAwX0lSUV9PTiwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgRUxTQV9JUlFfQUREUik7CisJCWJyZWFrOworCWNhc2UgSU5GX1FTMzAwMDoKKwkJb3V0YihRUzMwMDBfSVJRX09OLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBFTFNBX0lSUV9BRERSKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfTklDQ1k6CisJCXZhbCA9IGlubCgodTMyKWh3LT5jZmcuc3RhcnQgKyBOSUNDWV9JUlFfQ1RSTF9SRUcpOworCQl2YWwgfD0gTklDQ1lfSVJRX0VOQUJMRTs7CisJCW91dGwodmFsLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBOSUNDWV9JUlFfQ1RSTF9SRUcpOworCQlicmVhazsKKwljYXNlIElORl9TQ1RfMToKKwkJdyA9IGludygodTMyKWh3LT5jZmcuc3RhcnQgKyBTQ1RfUExYX0lSUV9BRERSKTsKKwkJdyB8PSBTQ1RfUExYX0lSUV9FTkFCTEU7CisJCW91dHcodywgKHUzMilody0+Y2ZnLnN0YXJ0ICsgU0NUX1BMWF9JUlFfQUREUik7CisJCWJyZWFrOworCWNhc2UgSU5GX0dBWkVMX1I2ODU6CisJCW91dGIoR0FaRUxfSVNBQ19FTiArIEdBWkVMX0hTQ1hfRU4gKyBHQVpFTF9QQ0lfRU4sCisJCQkodTMyKWh3LT5jZmcuc3RhcnQgKyBHQVpFTF9JTkNTUik7CisJCWJyZWFrOworCWNhc2UgSU5GX0dBWkVMX1I3NTM6CisJCW91dGIoR0FaRUxfSVBBQ19FTiArIEdBWkVMX1BDSV9FTiwKKwkJCSh1MzIpaHctPmNmZy5zdGFydCArIEdBWkVMX0lOQ1NSKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAorZGlzYWJsZV9od2lycShzdHJ1Y3QgaW5mX2h3ICpodykKK3sKKwl1MTYgdzsKKwl1MzIgdmFsOworCisJc3dpdGNoIChody0+Y2ktPnR5cCkgeworCWNhc2UgSU5GX0RJVkEyMDE6CisJY2FzZSBJTkZfRElWQTIwMjoKKwkJd3JpdGVsKDAsIGh3LT5jZmcucCk7CisJCWJyZWFrOworCWNhc2UgSU5GX1NQRUVEV0lOOgorCWNhc2UgSU5GX1NBUEhJUjM6CisJCW91dGIoMCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgVElHRVJfQVVYX0lSUU1BU0spOworCQlicmVhazsKKwljYXNlIElORl9RUzEwMDA6CisJCW91dGIoUVMxMDAwX0lSUV9PRkYsICh1MzIpaHctPmNmZy5zdGFydCArIEVMU0FfSVJRX0FERFIpOworCQlicmVhazsKKwljYXNlIElORl9RUzMwMDA6CisJCW91dGIoUVMzMDAwX0lSUV9PRkYsICh1MzIpaHctPmNmZy5zdGFydCArIEVMU0FfSVJRX0FERFIpOworCQlicmVhazsKKwljYXNlIElORl9OSUNDWToKKwkJdmFsID0gaW5sKCh1MzIpaHctPmNmZy5zdGFydCArIE5JQ0NZX0lSUV9DVFJMX1JFRyk7CisJCXZhbCAmPSBOSUNDWV9JUlFfRElTQUJMRTsKKwkJb3V0bCh2YWwsICh1MzIpaHctPmNmZy5zdGFydCArIE5JQ0NZX0lSUV9DVFJMX1JFRyk7CisJCWJyZWFrOworCWNhc2UgSU5GX1NDVF8xOgorCQl3ID0gaW53KCh1MzIpaHctPmNmZy5zdGFydCArIFNDVF9QTFhfSVJRX0FERFIpOworCQl3ICY9ICh+U0NUX1BMWF9JUlFfRU5BQkxFKTsKKwkJb3V0dyh3LCAodTMyKWh3LT5jZmcuc3RhcnQgKyBTQ1RfUExYX0lSUV9BRERSKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfR0FaRUxfUjY4NToKKwljYXNlIElORl9HQVpFTF9SNzUzOgorCQlvdXRiKDAsICh1MzIpaHctPmNmZy5zdGFydCArIEdBWkVMX0lOQ1NSKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXBhY19jaGlwX3Jlc2V0KHN0cnVjdCBpbmZfaHcgKmh3KQoreworCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19QT1RBMiwgMHgyMCk7CisJbWRlbGF5KDUpOworCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19QT1RBMiwgMHgwMCk7CisJbWRlbGF5KDUpOworCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19DT05GLCBody0+aXBhYy5jb25mKTsKKwlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfTUFTSywgMHhjMCk7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9pbmYoc3RydWN0IGluZl9odyAqaHcpCit7CisJdTE2IHc7CisJdTMyIHZhbDsKKworCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQlwcl9ub3RpY2UoIiVzOiByZXNldHRpbmcgY2FyZFxuIiwgaHctPm5hbWUpOworCXN3aXRjaCAoaHctPmNpLT50eXApIHsKKwljYXNlIElORl9ESVZBMjA6CisJY2FzZSBJTkZfRElWQTIwVToKKwkJb3V0YigwLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBESVZBX1BDSV9DVFJMKTsKKwkJbWRlbGF5KDEwKTsKKwkJb3V0YihESVZBX1JFU0VUX0JJVCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgRElWQV9QQ0lfQ1RSTCk7CisJCW1kZWxheSgxMCk7CisJCS8qIFdvcmthcm91bmQgUENJOTA2MCAqLworCQlvdXRiKDksICh1MzIpaHctPmNmZy5zdGFydCArIDB4NjkpOworCQlvdXRiKERJVkFfUkVTRVRfQklUIHwgRElWQV9MRURfQSwKKwkJCSh1MzIpaHctPmNmZy5zdGFydCArIERJVkFfUENJX0NUUkwpOworCQlicmVhazsKKwljYXNlIElORl9ESVZBMjAxOgorCQl3cml0ZWwoUElUQV9QQVJBX1NPRlRSRVNFVCB8IFBJVEFfUEFSQV9NUFhfTU9ERSwKKwkJCWh3LT5jZmcucCArIFBJVEFfTUlTQ19SRUcpOworCQltZGVsYXkoMSk7CisJCXdyaXRlbChQSVRBX1BBUkFfTVBYX01PREUsIGh3LT5jZmcucCArIFBJVEFfTUlTQ19SRUcpOworCQltZGVsYXkoMTApOworCQlicmVhazsKKwljYXNlIElORl9ESVZBMjAyOgorCQl3cml0ZWwoUElUQV9QQVJBX1NPRlRSRVNFVCB8IFBJVEFfUEFSQV9NUFhfTU9ERSwKKwkJCWh3LT5jZmcucCArIFBJVEFfTUlTQ19SRUcpOworCQltZGVsYXkoMSk7CisJCXdyaXRlbChQSVRBX1BBUkFfTVBYX01PREUgfCBQSVRBX1NFUl9TT0ZUUkVTRVQsCisJCQlody0+Y2ZnLnAgKyBQSVRBX01JU0NfUkVHKTsKKwkJbWRlbGF5KDEwKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfU1BFRURXSU46CisJY2FzZSBJTkZfU0FQSElSMzoKKwkJaXBhY19jaGlwX3Jlc2V0KGh3KTsKKwkJaHctPmlwYWMud3JpdGVfcmVnKGh3LCBJUEFDX0FDRkcsIDB4ZmYpOworCQlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfQU9FLCAweDAwKTsKKwkJaHctPmlwYWMud3JpdGVfcmVnKGh3LCBJUEFDX1BDRkcsIDB4MTIpOworCQlicmVhazsKKwljYXNlIElORl9RUzEwMDA6CisJY2FzZSBJTkZfUVMzMDAwOgorCQlpcGFjX2NoaXBfcmVzZXQoaHcpOworCQlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfQUNGRywgMHgwMCk7CisJCWh3LT5pcGFjLndyaXRlX3JlZyhodywgSVBBQ19BT0UsIDB4M2MpOworCQlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfQVRYLCAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfTklDQ1k6CisJCWJyZWFrOworCWNhc2UgSU5GX1NDVF8xOgorCQl3ID0gaW53KCh1MzIpaHctPmNmZy5zdGFydCArIFNDVF9QTFhfUkVTRVRfQUREUik7CisJCXcgJj0gKH5TQ1RfUExYX1JFU0VUX0JJVCk7CisJCW91dHcodywgKHUzMilody0+Y2ZnLnN0YXJ0ICsgU0NUX1BMWF9SRVNFVF9BRERSKTsKKwkJbWRlbGF5KDEwKTsKKwkJdyA9IGludygodTMyKWh3LT5jZmcuc3RhcnQgKyBTQ1RfUExYX1JFU0VUX0FERFIpOworCQl3IHw9IFNDVF9QTFhfUkVTRVRfQklUOworCQlvdXR3KHcsICh1MzIpaHctPmNmZy5zdGFydCArIFNDVF9QTFhfUkVTRVRfQUREUik7CisJCW1kZWxheSgxMCk7CisJCWJyZWFrOworCWNhc2UgSU5GX0dBWkVMX1I2ODU6CisJCXZhbCA9IGlubCgodTMyKWh3LT5jZmcuc3RhcnQgKyBHQVpFTF9DTlRSTCk7CisJCXZhbCB8PSAoR0FaRUxfUkVTRVRfOTA1MCArIEdBWkVMX1JFU0VUKTsKKwkJb3V0bCh2YWwsICh1MzIpaHctPmNmZy5zdGFydCArIEdBWkVMX0NOVFJMKTsKKwkJdmFsICY9IH4oR0FaRUxfUkVTRVRfOTA1MCArIEdBWkVMX1JFU0VUKTsKKwkJbWRlbGF5KDQpOworCQlvdXRsKHZhbCwgKHUzMilody0+Y2ZnLnN0YXJ0ICsgR0FaRUxfQ05UUkwpOworCQltZGVsYXkoMTApOworCQlody0+aXBhYy5pc2FjLmFkZjIgPSAweDg3OworCQlody0+aXBhYy5oc2N4WzBdLnNsb3QgPSAweDFmOworCQlody0+aXBhYy5oc2N4WzBdLnNsb3QgPSAweDIzOworCQlicmVhazsKKwljYXNlIElORl9HQVpFTF9SNzUzOgorCQl2YWwgPSBpbmwoKHUzMilody0+Y2ZnLnN0YXJ0ICsgR0FaRUxfQ05UUkwpOworCQl2YWwgfD0gKEdBWkVMX1JFU0VUXzkwNTAgKyBHQVpFTF9SRVNFVCk7CisJCW91dGwodmFsLCAodTMyKWh3LT5jZmcuc3RhcnQgKyBHQVpFTF9DTlRSTCk7CisJCXZhbCAmPSB+KEdBWkVMX1JFU0VUXzkwNTAgKyBHQVpFTF9SRVNFVCk7CisJCW1kZWxheSg0KTsKKwkJb3V0bCh2YWwsICh1MzIpaHctPmNmZy5zdGFydCArIEdBWkVMX0NOVFJMKTsKKwkJbWRlbGF5KDEwKTsKKwkJaXBhY19jaGlwX3Jlc2V0KGh3KTsKKwkJaHctPmlwYWMud3JpdGVfcmVnKGh3LCBJUEFDX0FDRkcsIDB4ZmYpOworCQlody0+aXBhYy53cml0ZV9yZWcoaHcsIElQQUNfQU9FLCAweDAwKTsKKwkJaHctPmlwYWMuY29uZiA9IDB4MDE7IC8qIElPTSBvZmYgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwllbmFibGVfaHdpcnEoaHcpOworfQorCitzdGF0aWMgaW50CitpbmZfY3RybChzdHJ1Y3QgaW5mX2h3ICpodywgdTMyIGNtZCwgdV9sb25nIGFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBIV19SRVNFVF9SRVE6CisJCXJlc2V0X2luZihodyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIGNvbW1hbmQgJXggJWx4XG4iLAorCQkJaHctPm5hbWUsIF9fZnVuY19fLCBjbWQsIGFyZyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAoraW5pdF9pcnEoc3RydWN0IGluZl9odyAqaHcpCit7CisJaW50CXJldCwgY250ID0gMzsKKwl1X2xvbmcJZmxhZ3M7CisKKwlpZiAoIWh3LT5jaS0+aXJxZnVuYykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gcmVxdWVzdF9pcnEoaHctPmlycSwgaHctPmNpLT5pcnFmdW5jLCBJUlFGX1NIQVJFRCwgaHctPm5hbWUsIGh3KTsKKwlpZiAocmV0KSB7CisJCXByX2luZm8oIiVzOiBjb3VsZG4ndCBnZXQgaW50ZXJydXB0ICVkXG4iLCBody0+bmFtZSwgaHctPmlycSk7CisJCXJldHVybiByZXQ7CisJfQorCXdoaWxlIChjbnQtLSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKKwkJcmVzZXRfaW5mKGh3KTsKKwkJcmV0ID0gaHctPmlwYWMuaW5pdCgmaHctPmlwYWMpOworCQlpZiAocmV0KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworCQkJcHJfaW5mbygiJXM6IElTQUMgaW5pdCBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCQlody0+bmFtZSwgcmV0KTsKKwkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBJUlEgJWQgY291bnQgJWRcbiIsIGh3LT5uYW1lLAorCQkJCWh3LT5pcnEsIGh3LT5pcnFjbnQpOworCQlpZiAoIWh3LT5pcnFjbnQpIHsKKwkJCXByX2luZm8oIiVzOiBJUlEoJWQpIGdvdCBubyByZXF1ZXN0cyBkdXJpbmcgaW5pdCAlZFxuIiwKKwkJCQlody0+bmFtZSwgaHctPmlycSwgMyAtIGNudCk7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCWZyZWVfaXJxKGh3LT5pcnEsIGh3KTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfaW8oc3RydWN0IGluZl9odyAqaHcpCit7CisJaWYgKGh3LT5jZmcubW9kZSkgeworCQlpZiAoaHctPmNmZy5wKSB7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oaHctPmNmZy5zdGFydCwgaHctPmNmZy5zaXplKTsKKwkJCWlvdW5tYXAoaHctPmNmZy5wKTsKKwkJfSBlbHNlCisJCQlyZWxlYXNlX3JlZ2lvbihody0+Y2ZnLnN0YXJ0LCBody0+Y2ZnLnNpemUpOworCQlody0+Y2ZnLm1vZGUgPSBBTV9OT05FOworCX0KKwlpZiAoaHctPmFkZHIubW9kZSkgeworCQlpZiAoaHctPmFkZHIucCkgeworCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGh3LT5hZGRyLnN0YXJ0LCBody0+YWRkci5zaXplKTsKKwkJCWlvdW5tYXAoaHctPmFkZHIucCk7CisJCX0gZWxzZQorCQkJcmVsZWFzZV9yZWdpb24oaHctPmFkZHIuc3RhcnQsIGh3LT5hZGRyLnNpemUpOworCQlody0+YWRkci5tb2RlID0gQU1fTk9ORTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzZXR1cF9pbyhzdHJ1Y3QgaW5mX2h3ICpodykKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChody0+Y2ktPmNmZ19tb2RlKSB7CisJCWh3LT5jZmcuc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaHctPnBkZXYsIGh3LT5jaS0+Y2ZnX2Jhcik7CisJCWh3LT5jZmcuc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oaHctPnBkZXYsIGh3LT5jaS0+Y2ZnX2Jhcik7CisJCWlmIChody0+Y2ktPmNmZ19tb2RlID09IEFNX01FTUlPKSB7CisJCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihody0+Y2ZnLnN0YXJ0LCBody0+Y2ZnLnNpemUsCisJCQkgICAgaHctPm5hbWUpKQorCQkJCWVyciA9IC1FQlVTWTsKKwkJfSBlbHNlIHsKKwkJCWlmICghcmVxdWVzdF9yZWdpb24oaHctPmNmZy5zdGFydCwgaHctPmNmZy5zaXplLAorCQkJICAgIGh3LT5uYW1lKSkKKwkJCQllcnIgPSAtRUJVU1k7CisJCX0KKwkJaWYgKGVycikgeworCQkJcHJfaW5mbygibUlTRE46ICVzIGNvbmZpZyBwb3J0ICVseCAoJWx1IGJ5dGVzKSIKKwkJCQkiYWxyZWFkeSBpbiB1c2VcbiIsIGh3LT5uYW1lLAorCQkJCSh1bG9uZylody0+Y2ZnLnN0YXJ0LCAodWxvbmcpaHctPmNmZy5zaXplKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKGh3LT5jaS0+Y2ZnX21vZGUgPT0gQU1fTUVNSU8pCisJCQlody0+Y2ZnLnAgPSBpb3JlbWFwKGh3LT5jZmcuc3RhcnQsIGh3LT5jZmcuc2l6ZSk7CisJCWh3LT5jZmcubW9kZSA9IGh3LT5jaS0+Y2ZnX21vZGU7CisJCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQkJcHJfbm90aWNlKCIlczogSU8gY2ZnICVseCAoJWx1IGJ5dGVzKSBtb2RlJWRcbiIsCisJCQkJaHctPm5hbWUsICh1bG9uZylody0+Y2ZnLnN0YXJ0LAorCQkJCSh1bG9uZylody0+Y2ZnLnNpemUsIGh3LT5jaS0+Y2ZnX21vZGUpOworCisJfQorCWlmIChody0+Y2ktPmFkZHJfbW9kZSkgeworCQlody0+YWRkci5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChody0+cGRldiwgaHctPmNpLT5hZGRyX2Jhcik7CisJCWh3LT5hZGRyLnNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKGh3LT5wZGV2LCBody0+Y2ktPmFkZHJfYmFyKTsKKwkJaWYgKGh3LT5jaS0+YWRkcl9tb2RlID09IEFNX01FTUlPKSB7CisJCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihody0+YWRkci5zdGFydCwgaHctPmFkZHIuc2l6ZSwKKwkJCSAgICBody0+bmFtZSkpCisJCQkJZXJyID0gLUVCVVNZOworCQl9IGVsc2UgeworCQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihody0+YWRkci5zdGFydCwgaHctPmFkZHIuc2l6ZSwKKwkJCSAgICBody0+bmFtZSkpCisJCQkJZXJyID0gLUVCVVNZOworCQl9CisJCWlmIChlcnIpIHsKKwkJCXByX2luZm8oIm1JU0ROOiAlcyBhZGRyZXNzIHBvcnQgJWx4ICglbHUgYnl0ZXMpIgorCQkJCSJhbHJlYWR5IGluIHVzZVxuIiwgaHctPm5hbWUsCisJCQkJKHVsb25nKWh3LT5hZGRyLnN0YXJ0LCAodWxvbmcpaHctPmFkZHIuc2l6ZSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChody0+Y2ktPmFkZHJfbW9kZSA9PSBBTV9NRU1JTykKKwkJCWh3LT5hZGRyLnAgPSBpb3JlbWFwKGh3LT5hZGRyLnN0YXJ0LCBody0+YWRkci5zaXplKTsKKwkJaHctPmFkZHIubW9kZSA9IGh3LT5jaS0+YWRkcl9tb2RlOworCQlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJCXByX25vdGljZSgiJXM6IElPIGFkZHIgJWx4ICglbHUgYnl0ZXMpIG1vZGUlZFxuIiwKKwkJCQlody0+bmFtZSwgKHVsb25nKWh3LT5hZGRyLnN0YXJ0LAorCQkJCSh1bG9uZylody0+YWRkci5zaXplLCBody0+Y2ktPmFkZHJfbW9kZSk7CisKKwl9CisKKwlzd2l0Y2ggKGh3LT5jaS0+dHlwKSB7CisJY2FzZSBJTkZfRElWQTIwOgorCWNhc2UgSU5GX0RJVkEyMFU6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVNBQyB8IElQQUNfVFlQRV9IU0NYOworCQlody0+aXNhYy5tb2RlID0gaHctPmNmZy5tb2RlOworCQlody0+aXNhYy5hLmlvLmFsZSA9ICh1MzIpaHctPmNmZy5zdGFydCArIERJVkFfSVNBQ19BTEU7CisJCWh3LT5pc2FjLmEuaW8ucG9ydCA9ICh1MzIpaHctPmNmZy5zdGFydCArIERJVkFfSVNBQ19QT1JUOworCQlody0+aHNjeC5tb2RlID0gaHctPmNmZy5tb2RlOworCQlody0+aHNjeC5hLmlvLmFsZSA9ICh1MzIpaHctPmNmZy5zdGFydCArIERJVkFfSFNDWF9BTEU7CisJCWh3LT5oc2N4LmEuaW8ucG9ydCA9ICh1MzIpaHctPmNmZy5zdGFydCArIERJVkFfSFNDWF9QT1JUOworCQlicmVhazsKKwljYXNlIElORl9ESVZBMjAxOgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lQQUM7CisJCWh3LT5pcGFjLmlzYWMub2ZmID0gMHg4MDsKKwkJaHctPmlzYWMubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5pc2FjLmEucCA9IGh3LT5hZGRyLnA7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aHNjeC5hLnAgPSBody0+YWRkci5wOworCQlicmVhazsKKwljYXNlIElORl9ESVZBMjAyOgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lQQUNYOworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmlzYWMuYS5wID0gaHctPmFkZHIucDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEucCA9IGh3LT5hZGRyLnA7CisJCWJyZWFrOworCWNhc2UgSU5GX1NQRUVEV0lOOgorCWNhc2UgSU5GX1NBUEhJUjM6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQzsKKwkJaHctPmlwYWMuaXNhYy5vZmYgPSAweDgwOworCQlody0+aXNhYy5tb2RlID0gaHctPmNmZy5tb2RlOworCQlody0+aXNhYy5hLmlvLmFsZSA9ICh1MzIpaHctPmNmZy5zdGFydCArIFRJR0VSX0lQQUNfQUxFOworCQlody0+aXNhYy5hLmlvLnBvcnQgPSAodTMyKWh3LT5jZmcuc3RhcnQgKyBUSUdFUl9JUEFDX1BPUlQ7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+Y2ZnLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8uYWxlID0gKHUzMilody0+Y2ZnLnN0YXJ0ICsgVElHRVJfSVBBQ19BTEU7CisJCWh3LT5oc2N4LmEuaW8ucG9ydCA9ICh1MzIpaHctPmNmZy5zdGFydCArIFRJR0VSX0lQQUNfUE9SVDsKKwkJb3V0YigweGZmLCAodWxvbmcpaHctPmNmZy5zdGFydCk7CisJCW1kZWxheSgxKTsKKwkJb3V0YigweDAwLCAodWxvbmcpaHctPmNmZy5zdGFydCk7CisJCW1kZWxheSgxKTsKKwkJb3V0YihUSUdFUl9JT01BU0ssICh1bG9uZylody0+Y2ZnLnN0YXJ0ICsgVElHRVJfQVVYX0NUUkwpOworCQlicmVhazsKKwljYXNlIElORl9RUzEwMDA6CisJY2FzZSBJTkZfUVMzMDAwOgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lQQUM7CisJCWh3LT5pcGFjLmlzYWMub2ZmID0gMHg4MDsKKwkJaHctPmlzYWMuYS5pby5hbGUgPSAodTMyKWh3LT5hZGRyLnN0YXJ0OworCQlody0+aXNhYy5hLmlvLnBvcnQgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgMTsKKwkJaHctPmlzYWMubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8uYWxlID0gKHUzMilody0+YWRkci5zdGFydDsKKwkJaHctPmhzY3guYS5pby5wb3J0ID0gKHUzMilody0+YWRkci5zdGFydCArIDE7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+YWRkci5tb2RlOworCQlicmVhazsKKwljYXNlIElORl9OSUNDWToKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JU0FDIHwgSVBBQ19UWVBFX0hTQ1g7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aXNhYy5hLmlvLmFsZSA9ICh1MzIpaHctPmFkZHIuc3RhcnQgKyBOSUNDWV9JU0FDX0FMRTsKKwkJaHctPmlzYWMuYS5pby5wb3J0ID0gKHUzMilody0+YWRkci5zdGFydCArIE5JQ0NZX0lTQUNfUE9SVDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8uYWxlID0gKHUzMilody0+YWRkci5zdGFydCArIE5JQ0NZX0hTQ1hfQUxFOworCQlody0+aHNjeC5hLmlvLnBvcnQgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgTklDQ1lfSFNDWF9QT1JUOworCQlicmVhazsKKwljYXNlIElORl9TQ1RfMToKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JUEFDOworCQlody0+aXBhYy5pc2FjLm9mZiA9IDB4ODA7CisJCWh3LT5pc2FjLmEuaW8uYWxlID0gKHUzMilody0+YWRkci5zdGFydDsKKwkJaHctPmlzYWMuYS5pby5wb3J0ID0gaHctPmlzYWMuYS5pby5hbGUgKyA0OworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmhzY3guYS5pby5hbGUgPSBody0+aXNhYy5hLmlvLmFsZTsKKwkJaHctPmhzY3guYS5pby5wb3J0ID0gaHctPmlzYWMuYS5pby5wb3J0OworCQlody0+aHNjeC5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfU0NUXzI6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQzsKKwkJaHctPmlwYWMuaXNhYy5vZmYgPSAweDgwOworCQlody0+aXNhYy5hLmlvLmFsZSA9ICh1MzIpaHctPmFkZHIuc3RhcnQgKyAweDA4OworCQlody0+aXNhYy5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLmFsZSArIDQ7CisJCWh3LT5pc2FjLm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aHNjeC5hLmlvLmFsZSA9IGh3LT5pc2FjLmEuaW8uYWxlOworCQlody0+aHNjeC5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLnBvcnQ7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+YWRkci5tb2RlOworCQlicmVhazsKKwljYXNlIElORl9TQ1RfMzoKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JUEFDOworCQlody0+aXBhYy5pc2FjLm9mZiA9IDB4ODA7CisJCWh3LT5pc2FjLmEuaW8uYWxlID0gKHUzMilody0+YWRkci5zdGFydCArIDB4MTA7CisJCWh3LT5pc2FjLmEuaW8ucG9ydCA9IGh3LT5pc2FjLmEuaW8uYWxlICsgNDsKKwkJaHctPmlzYWMubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5oc2N4LmEuaW8uYWxlID0gaHctPmlzYWMuYS5pby5hbGU7CisJCWh3LT5oc2N4LmEuaW8ucG9ydCA9IGh3LT5pc2FjLmEuaW8ucG9ydDsKKwkJaHctPmhzY3gubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWJyZWFrOworCWNhc2UgSU5GX1NDVF80OgorCQlody0+aXBhYy50eXBlID0gSVBBQ19UWVBFX0lQQUM7CisJCWh3LT5pcGFjLmlzYWMub2ZmID0gMHg4MDsKKwkJaHctPmlzYWMuYS5pby5hbGUgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgMHgyMDsKKwkJaHctPmlzYWMuYS5pby5wb3J0ID0gaHctPmlzYWMuYS5pby5hbGUgKyA0OworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmhzY3guYS5pby5hbGUgPSBody0+aXNhYy5hLmlvLmFsZTsKKwkJaHctPmhzY3guYS5pby5wb3J0ID0gaHctPmlzYWMuYS5pby5wb3J0OworCQlody0+aHNjeC5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJYnJlYWs7CisJY2FzZSBJTkZfR0FaRUxfUjY4NToKKwkJaHctPmlwYWMudHlwZSA9IElQQUNfVFlQRV9JU0FDIHwgSVBBQ19UWVBFX0hTQ1g7CisJCWh3LT5pcGFjLmlzYWMub2ZmID0gMHg4MDsKKwkJaHctPmlzYWMubW9kZSA9IGh3LT5hZGRyLm1vZGU7CisJCWh3LT5pc2FjLmEuaW8ucG9ydCA9ICh1MzIpaHctPmFkZHIuc3RhcnQ7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aHNjeC5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLnBvcnQ7CisJCWJyZWFrOworCWNhc2UgSU5GX0dBWkVMX1I3NTM6CisJCWh3LT5pcGFjLnR5cGUgPSBJUEFDX1RZUEVfSVBBQzsKKwkJaHctPmlwYWMuaXNhYy5vZmYgPSAweDgwOworCQlody0+aXNhYy5tb2RlID0gaHctPmFkZHIubW9kZTsKKwkJaHctPmlzYWMuYS5pby5hbGUgPSAodTMyKWh3LT5hZGRyLnN0YXJ0OworCQlody0+aXNhYy5hLmlvLnBvcnQgPSAodTMyKWh3LT5hZGRyLnN0YXJ0ICsgR0FaRUxfSVBBQ19EQVRBX1BPUlQ7CisJCWh3LT5oc2N4Lm1vZGUgPSBody0+YWRkci5tb2RlOworCQlody0+aHNjeC5hLmlvLmFsZSA9IGh3LT5pc2FjLmEuaW8uYWxlOworCQlody0+aHNjeC5hLmlvLnBvcnQgPSBody0+aXNhYy5hLmlvLnBvcnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzd2l0Y2ggKGh3LT5pc2FjLm1vZGUpIHsKKwljYXNlIEFNX01FTUlPOgorCQlBU1NJR05fRlVOQ19JUEFDKE1JTywgaHctPmlwYWMpOworCQlicmVhazsKKwljYXNlIEFNX0lORF9JTzoKKwkJQVNTSUdOX0ZVTkNfSVBBQyhJTkQsIGh3LT5pcGFjKTsKKwkJYnJlYWs7CisJY2FzZSBBTV9JTzoKKwkJQVNTSUdOX0ZVTkNfSVBBQyhJTywgaHctPmlwYWMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWxlYXNlX2NhcmQoc3RydWN0IGluZl9odyAqY2FyZCkgeworCXVsb25nCWZsYWdzOworCWludAlpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlkaXNhYmxlX2h3aXJxKGNhcmQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwljYXJkLT5pcGFjLmlzYWMucmVsZWFzZSgmY2FyZC0+aXBhYy5pc2FjKTsKKwlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOworCW1JU0ROX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pcGFjLmlzYWMuZGNoLmRldik7CisJcmVsZWFzZV9pbyhjYXJkKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjYXJkLT5saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJc3dpdGNoIChjYXJkLT5jaS0+dHlwKSB7CisJY2FzZSBJTkZfU0NUXzI6CisJY2FzZSBJTkZfU0NUXzM6CisJY2FzZSBJTkZfU0NUXzQ6CisJCWJyZWFrOworCWNhc2UgSU5GX1NDVF8xOgorCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoY2FyZC0+c2NbaV0pCisJCQkJcmVsZWFzZV9jYXJkKGNhcmQtPnNjW2ldKTsKKwkJCWNhcmQtPnNjW2ldID0gTlVMTDsKKwkJfQorCWRlZmF1bHQ6CisJCXBjaV9kaXNhYmxlX2RldmljZShjYXJkLT5wZGV2KTsKKwkJcGNpX3NldF9kcnZkYXRhKGNhcmQtPnBkZXYsIE5VTEwpOworCQlicmVhazsKKwl9CisJa2ZyZWUoY2FyZCk7CisJaW5mX2NudC0tOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc2V0dXBfaW5zdGFuY2Uoc3RydWN0IGluZl9odyAqY2FyZCkKK3sKKwlpbnQgZXJyOworCXVsb25nIGZsYWdzOworCisJc25wcmludGYoY2FyZC0+bmFtZSwgTUlTRE5fTUFYX0lETEVOIC0gMSwgIiVzLiVkIiwgY2FyZC0+Y2ktPm5hbWUsCisJCWluZl9jbnQgKyAxKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxpc3QsICZDYXJkcyk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCisJX3NldF9kZWJ1ZyhjYXJkKTsKKwljYXJkLT5pcGFjLmlzYWMubmFtZSA9IGNhcmQtPm5hbWU7CisJY2FyZC0+aXBhYy5uYW1lID0gY2FyZC0+bmFtZTsKKwljYXJkLT5pcGFjLm93bmVyID0gVEhJU19NT0RVTEU7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOworCWNhcmQtPmlwYWMuaXNhYy5od2xvY2sgPSAmY2FyZC0+bG9jazsKKwljYXJkLT5pcGFjLmh3bG9jayA9ICZjYXJkLT5sb2NrOworCWNhcmQtPmlwYWMuY3RybCA9ICh2b2lkICopJmluZl9jdHJsOworCisJZXJyID0gc2V0dXBfaW8oY2FyZCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcl9zZXR1cDsKKworCWNhcmQtPmlwYWMuaXNhYy5kY2guZGV2LkJwcm90b2NvbHMgPQorCQltSVNETmlwYWNfaW5pdCgmY2FyZC0+aXBhYywgY2FyZCk7CisKKwlpZiAoY2FyZC0+aXBhYy5pc2FjLmRjaC5kZXYuQnByb3RvY29scyA9PSAwKQorCQlnb3RvIGVycm9yX3NldHVwOzsKKworCWVyciA9IG1JU0ROX3JlZ2lzdGVyX2RldmljZSgmY2FyZC0+aXBhYy5pc2FjLmRjaC5kZXYsCisJCSZjYXJkLT5wZGV2LT5kZXYsIGNhcmQtPm5hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSBpbml0X2lycShjYXJkKTsKKwlpZiAoIWVycikgIHsKKwkJaW5mX2NudCsrOworCQlwcl9ub3RpY2UoIkluZmluZW9uICVkIGNhcmRzIGluc3RhbGxlZFxuIiwgaW5mX2NudCk7CisJCXJldHVybiAwOworCX0KKwltSVNETl91bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+aXBhYy5pc2FjLmRjaC5kZXYpOworZXJyb3I6CisJY2FyZC0+aXBhYy5yZWxlYXNlKCZjYXJkLT5pcGFjKTsKK2Vycm9yX3NldHVwOgorCXJlbGVhc2VfaW8oY2FyZCk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmY2FyZC0+bGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5mX2NpbmZvIGluZl9jYXJkX2luZm9bXSA9IHsKKwl7CisJCUlORl9ESVZBMjAsCisJCSJEaWFsb2dpYyBEaXZhIDIuMCIsCisJCSJkaXZhMjAiLAorCQlBTV9JTkRfSU8sIEFNX05PTkUsIDIsIDAsCisJCSZkaXZhX2lycQorCX0sCisJeworCQlJTkZfRElWQTIwVSwKKwkJIkRpYWxvZ2ljIERpdmEgMi4wVSIsCisJCSJkaXZhMjBVIiwKKwkJQU1fSU5EX0lPLCBBTV9OT05FLCAyLCAwLAorCQkmZGl2YV9pcnEKKwl9LAorCXsKKwkJSU5GX0RJVkEyMDEsCisJCSJEaWFsb2dpYyBEaXZhIDIuMDEiLAorCQkiZGl2YTIwMSIsCisJCUFNX01FTUlPLCBBTV9NRU1JTywgMCwgMSwKKwkJJmRpdmEyMHhfaXJxCisJfSwKKwl7CisJCUlORl9ESVZBMjAyLAorCQkiRGlhbG9naWMgRGl2YSAyLjAyIiwKKwkJImRpdmEyMDIiLAorCQlBTV9NRU1JTywgQU1fTUVNSU8sIDAsIDEsCisJCSZkaXZhMjB4X2lycQorCX0sCisJeworCQlJTkZfU1BFRURXSU4sCisJCSJTZWRsYmF1ZXIgU3BlZWRXaW4gUENJIiwKKwkJInNwZWVkd2luIiwKKwkJQU1fSU5EX0lPLCBBTV9OT05FLCAwLCAwLAorCQkmdGlnZXJfaXJxCisJfSwKKwl7CisJCUlORl9TQVBISVIzLAorCQkiSFNUIFNhcGhpciAzIiwKKwkJInNhcGhpciIsCisJCUFNX0lORF9JTywgQU1fTk9ORSwgMCwgMCwKKwkJJnRpZ2VyX2lycQorCX0sCisJeworCQlJTkZfUVMxMDAwLAorCQkiRGV2ZWxvIE1pY3JvbGluayBQQ0kiLAorCQkicXMxMDAwIiwKKwkJQU1fSU8sIEFNX0lORF9JTywgMSwgMywKKwkJJmVsc2FfaXJxCisJfSwKKwl7CisJCUlORl9RUzMwMDAsCisJCSJEZXZlbG8gUXVpY2tTdGVwIDMwMDAiLAorCQkicXMzMDAwIiwKKwkJQU1fSU8sIEFNX0lORF9JTywgMSwgMywKKwkJJmVsc2FfaXJxCisJfSwKKwl7CisJCUlORl9OSUNDWSwKKwkJIlNhZ2VtIE5JQ0NZIiwKKwkJIm5pY2N5IiwKKwkJQU1fSU8sIEFNX0lORF9JTywgMCwgMSwKKwkJJm5pY2N5X2lycQorCX0sCisJeworCQlJTkZfU0NUXzEsCisJCSJTY2lUZWwgUXVhZHJvIiwKKwkJInAxX3NjaXRlbCIsCisJCUFNX0lPLCBBTV9JTkRfSU8sIDEsIDUsCisJCSZpcGFjX2lycQorCX0sCisJeworCQlJTkZfU0NUXzIsCisJCSJTY2lUZWwgUXVhZHJvIiwKKwkJInAyX3NjaXRlbCIsCisJCUFNX05PTkUsIEFNX0lORF9JTywgMCwgNCwKKwkJJmlwYWNfaXJxCisJfSwKKwl7CisJCUlORl9TQ1RfMywKKwkJIlNjaVRlbCBRdWFkcm8iLAorCQkicDNfc2NpdGVsIiwKKwkJQU1fTk9ORSwgQU1fSU5EX0lPLCAwLCAzLAorCQkmaXBhY19pcnEKKwl9LAorCXsKKwkJSU5GX1NDVF80LAorCQkiU2NpVGVsIFF1YWRybyIsCisJCSJwNF9zY2l0ZWwiLAorCQlBTV9OT05FLCBBTV9JTkRfSU8sIDAsIDIsCisJCSZpcGFjX2lycQorCX0sCisJeworCQlJTkZfR0FaRUxfUjY4NSwKKwkJIkdhemVsIFI2ODUiLAorCQkiZ2F6ZWw2ODUiLAorCQlBTV9JTywgQU1fSU8sIDEsIDIsCisJCSZnYXplbF9pcnEKKwl9LAorCXsKKwkJSU5GX0dBWkVMX1I3NTMsCisJCSJHYXplbCBSNzUzIiwKKwkJImdhemVsNzUzIiwKKwkJQU1fSU8sIEFNX0lORF9JTywgMSwgMiwKKwkJJmlwYWNfaXJxCisJfSwKKwl7CisJCUlORl9OT05FLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5mX2NpbmZvICogX19kZXZpbml0CitnZXRfY2FyZF9pbmZvKGVudW0gaW5mX3R5cGVzIHR5cCkKK3sKKwljb25zdCBzdHJ1Y3QgaW5mX2NpbmZvICpjaSA9IGluZl9jYXJkX2luZm87CisKKwl3aGlsZSAoY2ktPnR5cCAhPSBJTkZfTk9ORSkgeworCQlpZiAoY2ktPnR5cCA9PSB0eXApCisJCQlyZXR1cm4gY2k7CisJCWNpKys7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAoraW5mX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCWludCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBpbmZfaHcgKmNhcmQ7CisKKwljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZl9odyksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQlwcl9pbmZvKCJObyBtZW1vcnkgZm9yIEluZmluZW9uIElTRE4gY2FyZFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCWNhcmQtPnBkZXYgPSBwZGV2OworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCWNhcmQtPmNpID0gZ2V0X2NhcmRfaW5mbyhlbnQtPmRyaXZlcl9kYXRhKTsKKwlpZiAoIWNhcmQtPmNpKSB7CisJCXByX2luZm8oIm1JU0ROOiBkbyBub3QgaGF2ZSBpbmZvcm1hdGlvbnMgYWJvdXQgYWRhcHRlciBhdCAlc1xuIiwKKwkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQlwcl9ub3RpY2UoIm1JU0ROOiBmb3VuZCBhZGFwdGVyICVzIGF0ICVzXG4iLAorCQkJY2FyZC0+Y2ktPmZ1bGwsIHBjaV9uYW1lKHBkZXYpKTsKKworCWNhcmQtPmlycSA9IHBkZXYtPmlycTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJZXJyID0gc2V0dXBfaW5zdGFuY2UoY2FyZCk7CisJaWYgKGVycikgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UoY2FyZC0+cGRldik7CisJCWtmcmVlKGNhcmQpOworCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfSBlbHNlIGlmIChlbnQtPmRyaXZlcl9kYXRhID09IElORl9TQ1RfMSkgeworCQlpbnQgaTsKKwkJc3RydWN0IGluZl9odyAqc2M7CisKKwkJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykgeworCQkJc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5mX2h3KSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXNjKSB7CisJCQkJcmVsZWFzZV9jYXJkKGNhcmQpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJc2MtPmlycSA9IGNhcmQtPmlycTsKKwkJCXNjLT5wZGV2ID0gY2FyZC0+cGRldjsKKwkJCXNjLT5jaSA9IGNhcmQtPmNpICsgaTsKKwkJCWVyciA9IHNldHVwX2luc3RhbmNlKHNjKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlrZnJlZShzYyk7CisJCQkJcmVsZWFzZV9jYXJkKGNhcmQpOworCQkJfSBlbHNlCisJCQkJY2FyZC0+c2NbaSAtIDFdID0gc2M7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0CitpbmZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpbmZfaHcJKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoY2FyZCkKKwkJcmVsZWFzZV9jYXJkKGNhcmQpOworCWVsc2UKKwkJcHJfZGVidWcoIiVzOiBkcnZkYXRhIGFsbHJlYWR5IHJlbW92ZWRcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGluZmluZW9uX2RyaXZlciA9IHsKKwkubmFtZSA9ICJJU0ROIEluZmluZW9uIHBjaSIsCisJLnByb2JlID0gaW5mX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChpbmZfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBpbmZpbmVvbl9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdAoraW5maW5lb25faW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwcl9ub3RpY2UoIkluZmluZW9uIElTRE4gRHJpdmVyIFJldi4gJXNcbiIsIElORklORU9OX1JFVik7CisJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaW5maW5lb25fZHJpdmVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK2luZmluZW9uX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmluZmluZW9uX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGluZmluZW9uX2luaXQpOworbW9kdWxlX2V4aXQoaW5maW5lb25fY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pcGFjLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pcGFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzYmEwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlwYWMuYwpAQCAtMCwwICsxLDE2NTUgQEAKKy8qCisgKiBpc2FjLmMgICBJU0FDIHNwZWNpZmljIHJvdXRpbmVzCisgKgorICogQXV0aG9yICAgICAgIEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIENvcHlyaWdodCAyMDA5ICBieSBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21JU0ROaHcuaD4KKyNpbmNsdWRlICJpcGFjLmgiCisKKworI2RlZmluZSBEQlVTWV9USU1FUl9WQUxVRQk4MAorI2RlZmluZSBBUkNPRklfVVNFCQkxCisKKyNkZWZpbmUgSVNBQ19SRVYJCSIyLjAiCisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gS2VpbCIpOworTU9EVUxFX1ZFUlNJT04oSVNBQ19SRVYpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCisjZGVmaW5lIFJlYWRJU0FDKGlzLCBvKQkJKGlzLT5yZWFkX3JlZyhpcy0+ZGNoLmh3LCBvICsgaXMtPm9mZikpCisjZGVmaW5lCVdyaXRlSVNBQyhpcywgbywgdikJKGlzLT53cml0ZV9yZWcoaXMtPmRjaC5odywgbyArIGlzLT5vZmYsIHYpKQorI2RlZmluZSBSZWFkSFNDWChoLCBvKQkJKGgtPmlwLT5yZWFkX3JlZyhoLT5pcC0+aHcsIGgtPm9mZiArIG8pKQorI2RlZmluZSBXcml0ZUhTQ1goaCwgbywgdikJKGgtPmlwLT53cml0ZV9yZWcoaC0+aXAtPmh3LCBoLT5vZmYgKyBvLCB2KSkKKyNkZWZpbmUgUmVhZElQQUMoaXAsIG8pCQkoaXAtPnJlYWRfcmVnKGlwLT5odywgbykpCisjZGVmaW5lIFdyaXRlSVBBQyhpcCwgbywgdikJKGlwLT53cml0ZV9yZWcoaXAtPmh3LCBvLCB2KSkKKworc3RhdGljIGlubGluZSB2b2lkCitwaF9jb21tYW5kKHN0cnVjdCBpc2FjX2h3ICppc2FjLCB1OCBjb21tYW5kKQoreworCXByX2RlYnVnKCIlczogcGhfY29tbWFuZCAleFxuIiwgaXNhYy0+bmFtZSwgY29tbWFuZCk7CisJaWYgKGlzYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVNBQ1gpCisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDWF9DSVgwLCAoY29tbWFuZCA8PCA0KSB8IDB4RSk7CisJZWxzZQorCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19DSVgwLCAoY29tbWFuZCA8PCAyKSB8IDMpOworfQorCitzdGF0aWMgdm9pZAoraXNhY19waF9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGlzYWNfaHcgKmlzYWMpCit7CisJc3dpdGNoIChpc2FjLT5zdGF0ZSkgeworCWNhc2UgKElTQUNfSU5EX1JTKToKKwljYXNlIChJU0FDX0lORF9FSSk6CisJCXBoX2NvbW1hbmQoaXNhYywgSVNBQ19DTURfRFVJKTsKKwl9CisJc2NoZWR1bGVfZXZlbnQoJmlzYWMtPmRjaCwgRkxHX1BIQ0hBTkdFKTsKK30KKworc3RhdGljIHZvaWQKK2lzYWNfcGhfc3RhdGVfYmgoc3RydWN0IGRjaGFubmVsICpkY2gpCit7CisJc3RydWN0IGlzYWNfaHcgKmlzYWMgPSBjb250YWluZXJfb2YoZGNoLCBzdHJ1Y3QgaXNhY19odywgZGNoKTsKKworCXN3aXRjaCAoaXNhYy0+c3RhdGUpIHsKKwljYXNlIElTQUNfSU5EX1JTOgorCWNhc2UgSVNBQ19JTkRfRUk6CisJCWRjaC0+c3RhdGUgPSAwOworCQlsMV9ldmVudChkY2gtPmwxLCBIV19SRVNFVF9JTkQpOworCQlicmVhazsKKwljYXNlIElTQUNfSU5EX0RJRDoKKwkJZGNoLT5zdGF0ZSA9IDM7CisJCWwxX2V2ZW50KGRjaC0+bDEsIEhXX0RFQUNUX0NORik7CisJCWJyZWFrOworCWNhc2UgSVNBQ19JTkRfRFI6CisJCWRjaC0+c3RhdGUgPSAzOworCQlsMV9ldmVudChkY2gtPmwxLCBIV19ERUFDVF9JTkQpOworCQlicmVhazsKKwljYXNlIElTQUNfSU5EX1BVOgorCQlkY2gtPnN0YXRlID0gNDsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSFdfUE9XRVJVUF9JTkQpOworCQlicmVhazsKKwljYXNlIElTQUNfSU5EX1JTWToKKwkJaWYgKGRjaC0+c3RhdGUgPD0gNSkgeworCQkJZGNoLT5zdGF0ZSA9IDU7CisJCQlsMV9ldmVudChkY2gtPmwxLCBBTllTSUdOQUwpOworCQl9IGVsc2UgeworCQkJZGNoLT5zdGF0ZSA9IDg7CisJCQlsMV9ldmVudChkY2gtPmwxLCBMT1NURlJBTUlORyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJU0FDX0lORF9BUkQ6CisJCWRjaC0+c3RhdGUgPSA2OworCQlsMV9ldmVudChkY2gtPmwxLCBJTkZPMik7CisJCWJyZWFrOworCWNhc2UgSVNBQ19JTkRfQUk4OgorCQlkY2gtPnN0YXRlID0gNzsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSU5GTzRfUDgpOworCQlicmVhazsKKwljYXNlIElTQUNfSU5EX0FJMTA6CisJCWRjaC0+c3RhdGUgPSA3OworCQlsMV9ldmVudChkY2gtPmwxLCBJTkZPNF9QMTApOworCQlicmVhazsKKwl9CisJcHJfZGVidWcoIiVzOiBURSBuZXdzdGF0ZSAleFxuIiwgaXNhYy0+bmFtZSwgZGNoLT5zdGF0ZSk7Cit9CisKK3ZvaWQKK2lzYWNfZW1wdHlfZmlmbyhzdHJ1Y3QgaXNhY19odyAqaXNhYywgaW50IGNvdW50KQoreworCXU4ICpwdHI7CisKKwlwcl9kZWJ1ZygiJXM6ICVzICAlZFxuIiwgaXNhYy0+bmFtZSwgX19mdW5jX18sIGNvdW50KTsKKworCWlmICghaXNhYy0+ZGNoLnJ4X3NrYikgeworCQlpc2FjLT5kY2gucnhfc2tiID0gbUlfYWxsb2Nfc2tiKGlzYWMtPmRjaC5tYXhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIWlzYWMtPmRjaC5yeF9za2IpIHsKKwkJCXByX2luZm8oIiVzOiBEIHJlY2VpdmUgb3V0IG9mIG1lbW9yeVxuIiwgaXNhYy0+bmFtZSk7CisJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19DTURSLCAweDgwKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoKGlzYWMtPmRjaC5yeF9za2ItPmxlbiArIGNvdW50KSA+PSBpc2FjLT5kY2gubWF4bGVuKSB7CisJCXByX2RlYnVnKCIlczogJXMgb3ZlcnJ1biAlZFxuIiwgaXNhYy0+bmFtZSwgX19mdW5jX18sCisJCQkgICAgaXNhYy0+ZGNoLnJ4X3NrYi0+bGVuICsgY291bnQpOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19DTURSLCAweDgwKTsKKwkJcmV0dXJuOworCX0KKwlwdHIgPSBza2JfcHV0KGlzYWMtPmRjaC5yeF9za2IsIGNvdW50KTsKKwlpc2FjLT5yZWFkX2ZpZm8oaXNhYy0+ZGNoLmh3LCBpc2FjLT5vZmYsIHB0ciwgY291bnQpOworCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0NNRFIsIDB4ODApOworCWlmIChpc2FjLT5kY2guZGVidWcgJiBERUJVR19IV19ERklGTykgeworCQljaGFyCXBmeFtNSVNETl9NQVhfSURMRU4gKyAxNl07CisKKwkJc25wcmludGYocGZ4LCBNSVNETl9NQVhfSURMRU4gKyAxNSwgIkQtcmVjdiAlcyAlZCAiLAorCQkJaXNhYy0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhwZngsIERVTVBfUFJFRklYX09GRlNFVCwgcHRyLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXNhY19maWxsX2ZpZm8oc3RydWN0IGlzYWNfaHcgKmlzYWMpCit7CisJaW50IGNvdW50LCBtb3JlOworCXU4ICpwdHI7CisKKwlpZiAoIWlzYWMtPmRjaC50eF9za2IpCisJCXJldHVybjsKKwljb3VudCA9IGlzYWMtPmRjaC50eF9za2ItPmxlbiAtIGlzYWMtPmRjaC50eF9pZHg7CisJaWYgKGNvdW50IDw9IDApCisJCXJldHVybjsKKworCW1vcmUgPSAwOworCWlmIChjb3VudCA+IDMyKSB7CisJCW1vcmUgPSAhMDsKKwkJY291bnQgPSAzMjsKKwl9CisJcHJfZGVidWcoIiVzOiAlcyAgJWRcbiIsIGlzYWMtPm5hbWUsIF9fZnVuY19fLCBjb3VudCk7CisJcHRyID0gaXNhYy0+ZGNoLnR4X3NrYi0+ZGF0YSArIGlzYWMtPmRjaC50eF9pZHg7CisJaXNhYy0+ZGNoLnR4X2lkeCArPSBjb3VudDsKKwlpc2FjLT53cml0ZV9maWZvKGlzYWMtPmRjaC5odywgaXNhYy0+b2ZmLCBwdHIsIGNvdW50KTsKKwlXcml0ZUlTQUMoaXNhYywgSVNBQ19DTURSLCBtb3JlID8gMHg4IDogMHhhKTsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChGTEdfQlVTWV9USU1FUiwgJmlzYWMtPmRjaC5GbGFncykpIHsKKwkJcHJfZGVidWcoIiVzOiAlcyBkYnVzeXRpbWVyIHJ1bm5pbmdcbiIsIGlzYWMtPm5hbWUsIF9fZnVuY19fKTsKKwkJZGVsX3RpbWVyKCZpc2FjLT5kY2gudGltZXIpOworCX0KKwlpbml0X3RpbWVyKCZpc2FjLT5kY2gudGltZXIpOworCWlzYWMtPmRjaC50aW1lci5leHBpcmVzID0gamlmZmllcyArICgoREJVU1lfVElNRVJfVkFMVUUgKiBIWikvMTAwMCk7CisJYWRkX3RpbWVyKCZpc2FjLT5kY2gudGltZXIpOworCWlmIChpc2FjLT5kY2guZGVidWcgJiBERUJVR19IV19ERklGTykgeworCQljaGFyCXBmeFtNSVNETl9NQVhfSURMRU4gKyAxNl07CisKKwkJc25wcmludGYocGZ4LCBNSVNETl9NQVhfSURMRU4gKyAxNSwgIkQtc2VuZCAlcyAlZCAiLAorCQkJaXNhYy0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhwZngsIERVTVBfUFJFRklYX09GRlNFVCwgcHRyLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXNhY19ybWVfaXJxKHN0cnVjdCBpc2FjX2h3ICppc2FjKQoreworCXU4IHZhbCwgY291bnQ7CisKKwl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX1JTVEEpOworCWlmICgodmFsICYgMHg3MCkgIT0gMHgyMCkgeworCQlpZiAodmFsICYgMHg0MCkgeworCQkJcHJfZGVidWcoIiVzOiBJU0FDIFJET1xuIiwgaXNhYy0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQlpc2FjLT5kY2guZXJyX3J4Kys7CisjZW5kaWYKKwkJfQorCQlpZiAoISh2YWwgJiAweDIwKSkgeworCQkJcHJfZGVidWcoIiVzOiBJU0FDIENSQyBlcnJvclxuIiwgaXNhYy0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQlpc2FjLT5kY2guZXJyX2NyYysrOworI2VuZGlmCisJCX0KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfQ01EUiwgMHg4MCk7CisJCWlmIChpc2FjLT5kY2gucnhfc2tiKQorCQkJZGV2X2tmcmVlX3NrYihpc2FjLT5kY2gucnhfc2tiKTsKKwkJaXNhYy0+ZGNoLnJ4X3NrYiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJY291bnQgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX1JCQ0wpICYgMHgxZjsKKwkJaWYgKGNvdW50ID09IDApCisJCQljb3VudCA9IDMyOworCQlpc2FjX2VtcHR5X2ZpZm8oaXNhYywgY291bnQpOworCQlyZWN2X0RjaGFubmVsKCZpc2FjLT5kY2gpOworCX0KK30KKworc3RhdGljIHZvaWQKK2lzYWNfeHByX2lycShzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19CVVNZX1RJTUVSLCAmaXNhYy0+ZGNoLkZsYWdzKSkKKwkJZGVsX3RpbWVyKCZpc2FjLT5kY2gudGltZXIpOworCWlmIChpc2FjLT5kY2gudHhfc2tiICYmIGlzYWMtPmRjaC50eF9pZHggPCBpc2FjLT5kY2gudHhfc2tiLT5sZW4pIHsKKwkJaXNhY19maWxsX2ZpZm8oaXNhYyk7CisJfSBlbHNlIHsKKwkJaWYgKGlzYWMtPmRjaC50eF9za2IpCisJCQlkZXZfa2ZyZWVfc2tiKGlzYWMtPmRjaC50eF9za2IpOworCQlpZiAoZ2V0X25leHRfZGZyYW1lKCZpc2FjLT5kY2gpKQorCQkJaXNhY19maWxsX2ZpZm8oaXNhYyk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXNhY19yZXRyYW5zbWl0KHN0cnVjdCBpc2FjX2h3ICppc2FjKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0JVU1lfVElNRVIsICZpc2FjLT5kY2guRmxhZ3MpKQorCQlkZWxfdGltZXIoJmlzYWMtPmRjaC50aW1lcik7CisJaWYgKHRlc3RfYml0KEZMR19UWF9CVVNZLCAmaXNhYy0+ZGNoLkZsYWdzKSkgeworCQkvKiBSZXN0YXJ0IGZyYW1lICovCisJCWlzYWMtPmRjaC50eF9pZHggPSAwOworCQlpc2FjX2ZpbGxfZmlmbyhpc2FjKTsKKwl9IGVsc2UgaWYgKGlzYWMtPmRjaC50eF9za2IpIHsgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJcHJfaW5mbygiJXM6IHR4X3NrYiBleGlzdCBidXQgbm90IGJ1c3lcbiIsIGlzYWMtPm5hbWUpOworCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19UWF9CVVNZLCAmaXNhYy0+ZGNoLkZsYWdzKTsKKwkJaXNhYy0+ZGNoLnR4X2lkeCA9IDA7CisJCWlzYWNfZmlsbF9maWZvKGlzYWMpOworCX0gZWxzZSB7CisJCXByX2luZm8oIiVzOiBJU0FDIFhEVSBubyBUWF9CVVNZXG4iLCBpc2FjLT5uYW1lKTsKKwkJaWYgKGdldF9uZXh0X2RmcmFtZSgmaXNhYy0+ZGNoKSkKKwkJCWlzYWNfZmlsbF9maWZvKGlzYWMpOworCX0KK30KKworc3RhdGljIHZvaWQKK2lzYWNfbW9zX2lycShzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwl1OCB2YWw7CisJaW50IHJldDsKKworCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfTU9TUik7CisJcHJfZGVidWcoIiVzOiBJU0FDIE1PU1IgJTAyeFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKyNpZiBBUkNPRklfVVNFCisJaWYgKHZhbCAmIDB4MDgpIHsKKwkJaWYgKCFpc2FjLT5tb25fcngpIHsKKwkJCWlzYWMtPm1vbl9yeCA9IGttYWxsb2MoTUFYX01PTl9GUkFNRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIWlzYWMtPm1vbl9yeCkgeworCQkJCXByX2luZm8oIiVzOiBJU0FDIE1PTiBSWCBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCQkJaXNhYy0+bmFtZSk7CisJCQkJaXNhYy0+bW9jciAmPSAweGYwOworCQkJCWlzYWMtPm1vY3IgfD0gMHgwYTsKKwkJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJCQlnb3RvIGFmdGVyTU9OUjA7CisJCQl9IGVsc2UKKwkJCQlpc2FjLT5tb25fcnhwID0gMDsKKwkJfQorCQlpZiAoaXNhYy0+bW9uX3J4cCA+PSBNQVhfTU9OX0ZSQU1FKSB7CisJCQlpc2FjLT5tb2NyICY9IDB4ZjA7CisJCQlpc2FjLT5tb2NyIHw9IDB4MGE7CisJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJCWlzYWMtPm1vbl9yeHAgPSAwOworCQkJcHJfZGVidWcoIiVzOiBJU0FDIE1PTiBSWCBvdmVyZmxvdyFcbiIsIGlzYWMtPm5hbWUpOworCQkJZ290byBhZnRlck1PTlIwOworCQl9CisJCWlzYWMtPm1vbl9yeFtpc2FjLT5tb25fcnhwKytdID0gUmVhZElTQUMoaXNhYywgSVNBQ19NT1IwKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDIE1PUjAgJTAyeFxuIiwgaXNhYy0+bmFtZSwKKwkJCWlzYWMtPm1vbl9yeFtpc2FjLT5tb25fcnhwIC0gMV0pOworCQlpZiAoaXNhYy0+bW9uX3J4cCA9PSAxKSB7CisJCQlpc2FjLT5tb2NyIHw9IDB4MDQ7CisJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJfQorCX0KK2FmdGVyTU9OUjA6CisJaWYgKHZhbCAmIDB4ODApIHsKKwkJaWYgKCFpc2FjLT5tb25fcngpIHsKKwkJCWlzYWMtPm1vbl9yeCA9IGttYWxsb2MoTUFYX01PTl9GUkFNRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIWlzYWMtPm1vbl9yeCkgeworCQkJCXByX2luZm8oIiVzOiBJU0FDIE1PTiBSWCBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCQkJaXNhYy0+bmFtZSk7CisJCQkJaXNhYy0+bW9jciAmPSAweDBmOworCQkJCWlzYWMtPm1vY3IgfD0gMHhhMDsKKwkJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJCQlnb3RvIGFmdGVyTU9OUjE7CisJCQl9IGVsc2UKKwkJCQlpc2FjLT5tb25fcnhwID0gMDsKKwkJfQorCQlpZiAoaXNhYy0+bW9uX3J4cCA+PSBNQVhfTU9OX0ZSQU1FKSB7CisJCQlpc2FjLT5tb2NyICY9IDB4MGY7CisJCQlpc2FjLT5tb2NyIHw9IDB4YTA7CisJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJCWlzYWMtPm1vbl9yeHAgPSAwOworCQkJcHJfZGVidWcoIiVzOiBJU0FDIE1PTiBSWCBvdmVyZmxvdyFcbiIsIGlzYWMtPm5hbWUpOworCQkJZ290byBhZnRlck1PTlIxOworCQl9CisJCWlzYWMtPm1vbl9yeFtpc2FjLT5tb25fcnhwKytdID0gUmVhZElTQUMoaXNhYywgSVNBQ19NT1IxKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDIE1PUjEgJTAyeFxuIiwgaXNhYy0+bmFtZSwKKwkJCWlzYWMtPm1vbl9yeFtpc2FjLT5tb25fcnhwIC0gMV0pOworCQlpc2FjLT5tb2NyIHw9IDB4NDA7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCX0KK2FmdGVyTU9OUjE6CisJaWYgKHZhbCAmIDB4MDQpIHsKKwkJaXNhYy0+bW9jciAmPSAweGYwOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJaXNhYy0+bW9jciB8PSAweDBhOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJaWYgKGlzYWMtPm1vbml0b3IpIHsKKwkJCXJldCA9IGlzYWMtPm1vbml0b3IoaXNhYy0+ZGNoLmh3LCBNT05JVE9SX1JYXzAsCisJCQkJaXNhYy0+bW9uX3J4LCBpc2FjLT5tb25fcnhwKTsKKwkJCWlmIChyZXQpCisJCQkJa2ZyZWUoaXNhYy0+bW9uX3J4KTsKKwkJfSBlbHNlIHsKKwkJCXByX2luZm8oIiVzOiBNT05JVE9SIDAgcmVjZWl2ZWQgJWQgYnV0IG5vIHVzZXJcbiIsCisJCQkJaXNhYy0+bmFtZSwgaXNhYy0+bW9uX3J4cCk7CisJCQlrZnJlZShpc2FjLT5tb25fcngpOworCQl9CisJCWlzYWMtPm1vbl9yeCA9IE5VTEw7CisJCWlzYWMtPm1vbl9yeHAgPSAwOworCX0KKwlpZiAodmFsICYgMHg0MCkgeworCQlpc2FjLT5tb2NyICY9IDB4MGY7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQlpc2FjLT5tb2NyIHw9IDB4YTA7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQlpZiAoaXNhYy0+bW9uaXRvcikgeworCQkJcmV0ID0gaXNhYy0+bW9uaXRvcihpc2FjLT5kY2guaHcsIE1PTklUT1JfUlhfMSwKKwkJCQlpc2FjLT5tb25fcngsIGlzYWMtPm1vbl9yeHApOworCQkJaWYgKHJldCkKKwkJCQlrZnJlZShpc2FjLT5tb25fcngpOworCQl9IGVsc2UgeworCQkJcHJfaW5mbygiJXM6IE1PTklUT1IgMSByZWNlaXZlZCAlZCBidXQgbm8gdXNlclxuIiwKKwkJCQlpc2FjLT5uYW1lLCBpc2FjLT5tb25fcnhwKTsKKwkJCWtmcmVlKGlzYWMtPm1vbl9yeCk7CisJCX0KKwkJaXNhYy0+bW9uX3J4ID0gTlVMTDsKKwkJaXNhYy0+bW9uX3J4cCA9IDA7CisJfQorCWlmICh2YWwgJiAweDAyKSB7CisJCWlmICgoIWlzYWMtPm1vbl90eCkgfHwgKGlzYWMtPm1vbl90eGMgJiYKKwkJCShpc2FjLT5tb25fdHhwID49IGlzYWMtPm1vbl90eGMpICYmICEodmFsICYgMHgwOCkpKSB7CisJCQlpc2FjLT5tb2NyICY9IDB4ZjA7CisJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJCWlzYWMtPm1vY3IgfD0gMHgwYTsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJaWYgKGlzYWMtPm1vbl90eGMgJiYgKGlzYWMtPm1vbl90eHAgPj0gaXNhYy0+bW9uX3R4YykpIHsKKwkJCQlpZiAoaXNhYy0+bW9uaXRvcikKKwkJCQkJcmV0ID0gaXNhYy0+bW9uaXRvcihpc2FjLT5kY2guaHcsCisJCQkJCQlNT05JVE9SX1RYXzAsIE5VTEwsIDApOworCQkJfQorCQkJa2ZyZWUoaXNhYy0+bW9uX3R4KTsKKwkJCWlzYWMtPm1vbl90eCA9IE5VTEw7CisJCQlpc2FjLT5tb25fdHhjID0gMDsKKwkJCWlzYWMtPm1vbl90eHAgPSAwOworCQkJZ290byBBZnRlck1PWDA7CisJCX0KKwkJaWYgKGlzYWMtPm1vbl90eGMgJiYgKGlzYWMtPm1vbl90eHAgPj0gaXNhYy0+bW9uX3R4YykpIHsKKwkJCWlmIChpc2FjLT5tb25pdG9yKQorCQkJCXJldCA9IGlzYWMtPm1vbml0b3IoaXNhYy0+ZGNoLmh3LAorCQkJCQlNT05JVE9SX1RYXzAsIE5VTEwsIDApOworCQkJa2ZyZWUoaXNhYy0+bW9uX3R4KTsKKwkJCWlzYWMtPm1vbl90eCA9IE5VTEw7CisJCQlpc2FjLT5tb25fdHhjID0gMDsKKwkJCWlzYWMtPm1vbl90eHAgPSAwOworCQkJZ290byBBZnRlck1PWDA7CisJCX0KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTU9YMCwgaXNhYy0+bW9uX3R4W2lzYWMtPm1vbl90eHArK10pOworCQlwcl9kZWJ1ZygiJXM6IElTQUMgJTAyeCAtPiBNT1gwXG4iLCBpc2FjLT5uYW1lLAorCQkJaXNhYy0+bW9uX3R4W2lzYWMtPm1vbl90eHAgLSAxXSk7CisJfQorQWZ0ZXJNT1gwOgorCWlmICh2YWwgJiAweDIwKSB7CisJCWlmICgoIWlzYWMtPm1vbl90eCkgfHwgKGlzYWMtPm1vbl90eGMgJiYKKwkJCShpc2FjLT5tb25fdHhwID49IGlzYWMtPm1vbl90eGMpICYmICEodmFsICYgMHg4MCkpKSB7CisJCQlpc2FjLT5tb2NyICY9IDB4MGY7CisJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0NSLCBpc2FjLT5tb2NyKTsKKwkJCWlzYWMtPm1vY3IgfD0gMHhhMDsKKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01PQ1IsIGlzYWMtPm1vY3IpOworCQkJaWYgKGlzYWMtPm1vbl90eGMgJiYgKGlzYWMtPm1vbl90eHAgPj0gaXNhYy0+bW9uX3R4YykpIHsKKwkJCQlpZiAoaXNhYy0+bW9uaXRvcikKKwkJCQkJcmV0ID0gaXNhYy0+bW9uaXRvcihpc2FjLT5kY2guaHcsCisJCQkJCQlNT05JVE9SX1RYXzEsIE5VTEwsIDApOworCQkJfQorCQkJa2ZyZWUoaXNhYy0+bW9uX3R4KTsKKwkJCWlzYWMtPm1vbl90eCA9IE5VTEw7CisJCQlpc2FjLT5tb25fdHhjID0gMDsKKwkJCWlzYWMtPm1vbl90eHAgPSAwOworCQkJZ290byBBZnRlck1PWDE7CisJCX0KKwkJaWYgKGlzYWMtPm1vbl90eGMgJiYgKGlzYWMtPm1vbl90eHAgPj0gaXNhYy0+bW9uX3R4YykpIHsKKwkJCWlmIChpc2FjLT5tb25pdG9yKQorCQkJCXJldCA9IGlzYWMtPm1vbml0b3IoaXNhYy0+ZGNoLmh3LAorCQkJCQlNT05JVE9SX1RYXzEsIE5VTEwsIDApOworCQkJa2ZyZWUoaXNhYy0+bW9uX3R4KTsKKwkJCWlzYWMtPm1vbl90eCA9IE5VTEw7CisJCQlpc2FjLT5tb25fdHhjID0gMDsKKwkJCWlzYWMtPm1vbl90eHAgPSAwOworCQkJZ290byBBZnRlck1PWDE7CisJCX0KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTU9YMSwgaXNhYy0+bW9uX3R4W2lzYWMtPm1vbl90eHArK10pOworCQlwcl9kZWJ1ZygiJXM6IElTQUMgJTAyeCAtPiBNT1gxXG4iLCBpc2FjLT5uYW1lLAorCQkJaXNhYy0+bW9uX3R4W2lzYWMtPm1vbl90eHAgLSAxXSk7CisJfQorQWZ0ZXJNT1gxOgorCXZhbCA9IDA7IC8qIGR1bW15IHRvIGF2b2lkIHdhcm5pbmcgKi8KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAoraXNhY19jaXNxX2lycShzdHJ1Y3QgaXNhY19odyAqaXNhYykgeworCXU4IHZhbDsKKworCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfQ0lSMCk7CisJcHJfZGVidWcoIiVzOiBJU0FDIENJUjAgJTAyWFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwlpZiAodmFsICYgMikgeworCQlwcl9kZWJ1ZygiJXM6IHBoX3N0YXRlIGNoYW5nZSAleC0+JXhcbiIsIGlzYWMtPm5hbWUsCisJCQlpc2FjLT5zdGF0ZSwgKHZhbCA+PiAyKSAmIDB4Zik7CisJCWlzYWMtPnN0YXRlID0gKHZhbCA+PiAyKSAmIDB4ZjsKKwkJaXNhY19waF9zdGF0ZV9jaGFuZ2UoaXNhYyk7CisJfQorCWlmICh2YWwgJiAxKSB7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfQ0lSMSk7CisJCXByX2RlYnVnKCIlczogSVNBQyBDSVIxICUwMlhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXNhY3N4X2NpY19pcnEoc3RydWN0IGlzYWNfaHcgKmlzYWMpCit7CisJdTggdmFsOworCisJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ1hfQ0lSMCk7CisJcHJfZGVidWcoIiVzOiBJU0FDWCBDSVIwICUwMlhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJaWYgKHZhbCAmIElTQUNYX0NJUjBfQ0lDMCkgeworCQlwcl9kZWJ1ZygiJXM6IHBoX3N0YXRlIGNoYW5nZSAleC0+JXhcbiIsIGlzYWMtPm5hbWUsCisJCQlpc2FjLT5zdGF0ZSwgdmFsID4+IDQpOworCQlpc2FjLT5zdGF0ZSA9IHZhbCA+PiA0OworCQlpc2FjX3BoX3N0YXRlX2NoYW5nZShpc2FjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc2Fjc3hfcm1lX2lycShzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwlpbnQgY291bnQ7CisJdTggdmFsOworCisJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ1hfUlNUQUQpOworCWlmICgodmFsICYgKElTQUNYX1JTVEFEX1ZGUiB8CisJCSAgICBJU0FDWF9SU1RBRF9SRE8gfAorCQkgICAgSVNBQ1hfUlNUQURfQ1JDIHwKKwkJICAgIElTQUNYX1JTVEFEX1JBQikpCisJICAgICE9IChJU0FDWF9SU1RBRF9WRlIgfCBJU0FDWF9SU1RBRF9DUkMpKSB7CisJCXByX2RlYnVnKCIlczogUlNUQUQgJSN4LCBkcm9wcGVkXG4iLCBpc2FjLT5uYW1lLCB2YWwpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQlpZiAodmFsICYgSVNBQ1hfUlNUQURfQ1JDKQorCQkJaXNhYy0+ZGNoLmVycl9yeCsrOworCQllbHNlCisJCQlpc2FjLT5kY2guZXJyX2NyYysrOworI2VuZGlmCisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDWF9DTURSRCwgSVNBQ1hfQ01EUkRfUk1DKTsKKwkJaWYgKGlzYWMtPmRjaC5yeF9za2IpCisJCQlkZXZfa2ZyZWVfc2tiKGlzYWMtPmRjaC5yeF9za2IpOworCQlpc2FjLT5kY2gucnhfc2tiID0gTlVMTDsKKwl9IGVsc2UgeworCQljb3VudCA9IFJlYWRJU0FDKGlzYWMsIElTQUNYX1JCQ0xEKSAmIDB4MWY7CisJCWlmIChjb3VudCA9PSAwKQorCQkJY291bnQgPSAzMjsKKwkJaXNhY19lbXB0eV9maWZvKGlzYWMsIGNvdW50KTsKKwkJaWYgKGlzYWMtPmRjaC5yeF9za2IpIHsKKwkJCXNrYl90cmltKGlzYWMtPmRjaC5yeF9za2IsIGlzYWMtPmRjaC5yeF9za2ItPmxlbiAtIDEpOworCQkJcHJfZGVidWcoIiVzOiBkY2hhbm5lbCByZWNlaXZlZCAlZFxuIiwgaXNhYy0+bmFtZSwKKwkJCQlpc2FjLT5kY2gucnhfc2tiLT5sZW4pOworCQkJcmVjdl9EY2hhbm5lbCgmaXNhYy0+ZGNoKTsKKwkJfQorCX0KK30KKworaXJxcmV0dXJuX3QKK21JU0ROaXNhY19pcnEoc3RydWN0IGlzYWNfaHcgKmlzYWMsIHU4IHZhbCkKK3sKKwlpZiAodW5saWtlbHkoIXZhbCkpCisJCXJldHVybiBJUlFfTk9ORTsKKwlwcl9kZWJ1ZygiJXM6IElTQUMgaW50ZXJydXB0ICUwMnhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJaWYgKGlzYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVNBQ1gpIHsKKwkJaWYgKHZhbCAmIElTQUNYX19DSUMpCisJCQlpc2Fjc3hfY2ljX2lycShpc2FjKTsKKwkJaWYgKHZhbCAmIElTQUNYX19JQ0QpIHsKKwkJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNYX0lTVEFEKTsKKwkJCXByX2RlYnVnKCIlczogSVNUQUQgJTAyeFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJCWlmICh2YWwgJiBJU0FDWF9EX1hEVSkgeworCQkJCXByX2RlYnVnKCIlczogSVNBQyBYRFVcbiIsIGlzYWMtPm5hbWUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJCWlzYWMtPmRjaC5lcnJfdHgrKzsKKyNlbmRpZgorCQkJCWlzYWNfcmV0cmFuc21pdChpc2FjKTsKKwkJCX0KKwkJCWlmICh2YWwgJiBJU0FDWF9EX1hNUikgeworCQkJCXByX2RlYnVnKCIlczogSVNBQyBYTVJcbiIsIGlzYWMtPm5hbWUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJCWlzYWMtPmRjaC5lcnJfdHgrKzsKKyNlbmRpZgorCQkJCWlzYWNfcmV0cmFuc21pdChpc2FjKTsKKwkJCX0KKwkJCWlmICh2YWwgJiBJU0FDWF9EX1hQUikKKwkJCQlpc2FjX3hwcl9pcnEoaXNhYyk7CisJCQlpZiAodmFsICYgSVNBQ1hfRF9SRk8pIHsKKwkJCQlwcl9kZWJ1ZygiJXM6IElTQUMgUkZPXG4iLCBpc2FjLT5uYW1lKTsKKwkJCQlXcml0ZUlTQUMoaXNhYywgSVNBQ1hfQ01EUkQsIElTQUNYX0NNRFJEX1JNQyk7CisJCQl9CisJCQlpZiAodmFsICYgSVNBQ1hfRF9STUUpCisJCQkJaXNhY3N4X3JtZV9pcnEoaXNhYyk7CisJCQlpZiAodmFsICYgSVNBQ1hfRF9SUEYpCisJCQkJaXNhY19lbXB0eV9maWZvKGlzYWMsIDB4MjApOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHZhbCAmIDB4ODApCS8qIFJNRSAqLworCQkJaXNhY19ybWVfaXJxKGlzYWMpOworCQlpZiAodmFsICYgMHg0MCkJLyogUlBGICovCisJCQlpc2FjX2VtcHR5X2ZpZm8oaXNhYywgMzIpOworCQlpZiAodmFsICYgMHgxMCkJLyogWFBSICovCisJCQlpc2FjX3hwcl9pcnEoaXNhYyk7CisJCWlmICh2YWwgJiAweDA0KQkvKiBDSVNRICovCisJCQlpc2FjX2Npc3FfaXJxKGlzYWMpOworCQlpZiAodmFsICYgMHgyMCkJLyogUlNDIC0gbmV2ZXIgKi8KKwkJCXByX2RlYnVnKCIlczogSVNBQyBSU0MgaW50ZXJydXB0XG4iLCBpc2FjLT5uYW1lKTsKKwkJaWYgKHZhbCAmIDB4MDIpCS8qIFNJTiAtIG5ldmVyICovCisJCQlwcl9kZWJ1ZygiJXM6IElTQUMgU0lOIGludGVycnVwdFxuIiwgaXNhYy0+bmFtZSk7CisJCWlmICh2YWwgJiAweDAxKSB7CS8qIEVYSSAqLworCQkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19FWElSKTsKKwkJCXByX2RlYnVnKCIlczogSVNBQyBFWElSICUwMnhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCQlpZiAodmFsICYgMHg4MCkJLyogWE1SICovCisJCQkJcHJfZGVidWcoIiVzOiBJU0FDIFhNUlxuIiwgaXNhYy0+bmFtZSk7CisJCQlpZiAodmFsICYgMHg0MCkgeyAvKiBYRFUgKi8KKwkJCQlwcl9kZWJ1ZygiJXM6IElTQUMgWERVXG4iLCBpc2FjLT5uYW1lKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCQlpc2FjLT5kY2guZXJyX3R4Kys7CisjZW5kaWYKKwkJCQlpc2FjX3JldHJhbnNtaXQoaXNhYyk7CisJCQl9CisJCQlpZiAodmFsICYgMHgwNCkJLyogTU9TICovCisJCQkJaXNhY19tb3NfaXJxKGlzYWMpOworCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KK0VYUE9SVF9TWU1CT0wobUlTRE5pc2FjX2lycSk7CisKK3N0YXRpYyBpbnQKK2lzYWNfbDFodyhzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbUlTRE5kZXZpY2UJKmRldiA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IG1JU0ROZGV2aWNlLCBEKTsKKwlzdHJ1Y3QgZGNoYW5uZWwJCSpkY2ggPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGNoYW5uZWwsIGRldik7CisJc3RydWN0IGlzYWNfaHcJCSppc2FjID0gY29udGFpbmVyX29mKGRjaCwgc3RydWN0IGlzYWNfaHcsIGRjaCk7CisJaW50CQkJcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbUlTRE5oZWFkCSpoaCA9IG1JU0ROX0hFQURfUChza2IpOworCXUzMgkJCWlkOworCXVfbG9uZwkJCWZsYWdzOworCisJc3dpdGNoIChoaC0+cHJpbSkgeworCWNhc2UgUEhfREFUQV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlyZXQgPSBkY2hhbm5lbF9zZW5kZGF0YShkY2gsIHNrYik7CisJCWlmIChyZXQgPiAwKSB7IC8qIGRpcmVjdCBUWCAqLworCQkJaWQgPSBoaC0+aWQ7IC8qIHNrYiBjYW4gYmUgZnJlZWQgKi8KKwkJCWlzYWNfZmlsbF9maWZvKGlzYWMpOworCQkJcmV0ID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCQlxdWV1ZV9jaF9mcmFtZShjaCwgUEhfREFUQV9DTkYsIGlkLCBOVUxMKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCWNhc2UgUEhfQUNUSVZBVEVfUkVROgorCQlyZXQgPSBsMV9ldmVudChkY2gtPmwxLCBoaC0+cHJpbSk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9SRVE6CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfTDJfQUNUSVZBVEVELCAmZGNoLT5GbGFncyk7CisJCXJldCA9IGwxX2V2ZW50KGRjaC0+bDEsIGhoLT5wcmltKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFyZXQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citpc2FjX2N0cmwoc3RydWN0IGlzYWNfaHcgKmlzYWMsIHUzMiBjbWQsIHVfbG9uZyBwYXJhKQoreworCXU4IHRsID0gMDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSFdfVEVTVExPT1A6CisJCXNwaW5fbG9ja19pcnFzYXZlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlpZiAoIShpc2FjLT50eXBlICYgSVBBQ19UWVBFX0lTQUNYKSkgeworCQkJLyogVE9ETzogaW1wbGVtZW50IGZvciBJUEFDX1RZUEVfSVNBQ1ggKi8KKwkJCWlmIChwYXJhICYgMSkgLyogQjEgKi8KKwkJCQl0bCB8PSAweDBjOworCQkJZWxzZSBpZiAocGFyYSAmIDIpIC8qIEIyICovCisJCQkJdGwgfD0gMHgzOworCQkJLyogd2Ugb25seSBzdXBwb3J0IElPTTIgbW9kZSAqLworCQkJV3JpdGVJU0FDKGlzYWMsIElTQUNfU1BDUiwgdGwpOworCQkJaWYgKHRsKQorCQkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0FERjEsIDB4OCk7CisJCQllbHNlCisJCQkJV3JpdGVJU0FDKGlzYWMsIElTQUNfQURGMSwgMHgwKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6ICVzIHVua25vd24gY29tbWFuZCAleCAlbHhcbiIsIGlzYWMtPm5hbWUsCisJCQlfX2Z1bmNfXywgY21kLCBwYXJhKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraXNhY19sMWNtZChzdHJ1Y3QgZGNoYW5uZWwgKmRjaCwgdTMyIGNtZCkKK3sKKwlzdHJ1Y3QgaXNhY19odyAqaXNhYyA9IGNvbnRhaW5lcl9vZihkY2gsIHN0cnVjdCBpc2FjX2h3LCBkY2gpOworCXVfbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlczogY21kKCV4KSBzdGF0ZSglMDJ4KVxuIiwgaXNhYy0+bmFtZSwgY21kLCBpc2FjLT5zdGF0ZSk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElORk8zX1A4OgorCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwkJcGhfY29tbWFuZChpc2FjLCBJU0FDX0NNRF9BUjgpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIElORk8zX1AxMDoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCXBoX2NvbW1hbmQoaXNhYywgSVNBQ19DTURfQVIxMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgSFdfUkVTRVRfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwkJaWYgKChpc2FjLT5zdGF0ZSA9PSBJU0FDX0lORF9FSSkgfHwKKwkJICAgIChpc2FjLT5zdGF0ZSA9PSBJU0FDX0lORF9EUikgfHwKKwkJICAgIChpc2FjLT5zdGF0ZSA9PSBJU0FDX0lORF9SUykpCisJCQlwaF9jb21tYW5kKGlzYWMsIElTQUNfQ01EX1RJTSk7CisJCWVsc2UKKwkJCXBoX2NvbW1hbmQoaXNhYywgSVNBQ19DTURfUlMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIEhXX0RFQUNUX1JFUToKKwkJc2tiX3F1ZXVlX3B1cmdlKCZkY2gtPnNxdWV1ZSk7CisJCWlmIChkY2gtPnR4X3NrYikgeworCQkJZGV2X2tmcmVlX3NrYihkY2gtPnR4X3NrYik7CisJCQlkY2gtPnR4X3NrYiA9IE5VTEw7CisJCX0KKwkJZGNoLT50eF9pZHggPSAwOworCQlpZiAoZGNoLT5yeF9za2IpIHsKKwkJCWRldl9rZnJlZV9za2IoZGNoLT5yeF9za2IpOworCQkJZGNoLT5yeF9za2IgPSBOVUxMOworCQl9CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFhfQlVTWSwgJmRjaC0+RmxhZ3MpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19CVVNZX1RJTUVSLCAmZGNoLT5GbGFncykpCisJCQlkZWxfdGltZXIoJmRjaC0+dGltZXIpOworCQlicmVhazsKKwljYXNlIEhXX1BPV0VSVVBfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwkJcGhfY29tbWFuZChpc2FjLCBJU0FDX0NNRF9USU0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYWMtPmh3bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIFBIX0FDVElWQVRFX0lORDoKKwkJdGVzdF9hbmRfc2V0X2JpdChGTEdfQUNUSVZFLCAmZGNoLT5GbGFncyk7CisJCV9xdWV1ZV9kYXRhKCZkY2gtPmRldi5ELCBjbWQsIE1JU0ROX0lEX0FOWSwgMCwgTlVMTCwKKwkJCUdGUF9BVE9NSUMpOworCQlicmVhazsKKwljYXNlIFBIX0RFQUNUSVZBVEVfSU5EOgorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0FDVElWRSwgJmRjaC0+RmxhZ3MpOworCQlfcXVldWVfZGF0YSgmZGNoLT5kZXYuRCwgY21kLCBNSVNETl9JRF9BTlksIDAsIE5VTEwsCisJCQlHRlBfQVRPTUlDKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIiVzOiAlcyB1bmtub3duIGNvbW1hbmQgJXhcbiIsIGlzYWMtPm5hbWUsCisJCQlfX2Z1bmNfXywgY21kKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2lzYWNfcmVsZWFzZShzdHJ1Y3QgaXNhY19odyAqaXNhYykKK3sKKwlpZiAoaXNhYy0+dHlwZSAmIElQQUNfVFlQRV9JU0FDWCkKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX01BU0ssIDB4ZmYpOworCWVsc2UKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTUFTSywgMHhmZik7CisJaWYgKGlzYWMtPmRjaC50aW1lci5mdW5jdGlvbiAhPSBOVUxMKSB7CisJCWRlbF90aW1lcigmaXNhYy0+ZGNoLnRpbWVyKTsKKwkJaXNhYy0+ZGNoLnRpbWVyLmZ1bmN0aW9uID0gTlVMTDsKKwl9CisJa2ZyZWUoaXNhYy0+bW9uX3J4KTsKKwlpc2FjLT5tb25fcnggPSBOVUxMOworCWtmcmVlKGlzYWMtPm1vbl90eCk7CisJaXNhYy0+bW9uX3R4ID0gTlVMTDsKKwlpZiAoaXNhYy0+ZGNoLmwxKQorCQlsMV9ldmVudChpc2FjLT5kY2gubDEsIENMT1NFX0NIQU5ORUwpOworCW1JU0ROX2ZyZWVkY2hhbm5lbCgmaXNhYy0+ZGNoKTsKK30KKworc3RhdGljIHZvaWQKK2RidXN5X3RpbWVyX2hhbmRsZXIoc3RydWN0IGlzYWNfaHcgKmlzYWMpCit7CisJaW50IHJiY2gsIHN0YXI7CisJdV9sb25nIGZsYWdzOworCisJaWYgKHRlc3RfYml0KEZMR19CVVNZX1RJTUVSLCAmaXNhYy0+ZGNoLkZsYWdzKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FjLT5od2xvY2ssIGZsYWdzKTsKKwkJcmJjaCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfUkJDSCk7CisJCXN0YXIgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX1NUQVIpOworCQlwcl9kZWJ1ZygiJXM6IEQtQ2hhbm5lbCBCdXN5IFJCQ0ggJTAyeCBTVEFSICUwMnhcbiIsCisJCQlpc2FjLT5uYW1lLCByYmNoLCBzdGFyKTsKKwkJaWYgKHJiY2ggJiBJU0FDX1JCQ0hfWEFDKSAvKiBELUNoYW5uZWwgQnVzeSAqLworCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfTDFfQlVTWSwgJmlzYWMtPmRjaC5GbGFncyk7CisJCWVsc2UgeworCQkJLyogZGlzY2FyZCBmcmFtZTsgcmVzZXQgdHJhbnNjZWl2ZXIgKi8KKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQlVTWV9USU1FUiwgJmlzYWMtPmRjaC5GbGFncyk7CisJCQlpZiAoaXNhYy0+ZGNoLnR4X2lkeCkKKwkJCQlpc2FjLT5kY2gudHhfaWR4ID0gMDsKKwkJCWVsc2UKKwkJCQlwcl9pbmZvKCIlczogSVNBQyBELUNoYW5uZWwgQnVzeSBubyB0eF9pZHhcbiIsCisJCQkJCWlzYWMtPm5hbWUpOworCQkJLyogVHJhbnNtaXR0ZXIgcmVzZXQgKi8KKwkJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0NNRFIsIDB4MDEpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhYy0+aHdsb2NrLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgaW50CitvcGVuX2RjaGFubmVsKHN0cnVjdCBpc2FjX2h3ICppc2FjLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQoreworCXByX2RlYnVnKCIlczogJXMgZGV2KCVkKSBvcGVuIGZyb20gJXBcbiIsIGlzYWMtPm5hbWUsIF9fZnVuY19fLAorCQlpc2FjLT5kY2guZGV2LmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMSkpOworCWlmIChycS0+cHJvdG9jb2wgIT0gSVNETl9QX1RFX1MwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocnEtPmFkci5jaGFubmVsID09IDEpCisJCS8qIEUtQ2hhbm5lbCBub3Qgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOworCXJxLT5jaCA9ICZpc2FjLT5kY2guZGV2LkQ7CisJcnEtPmNoLT5wcm90b2NvbCA9IHJxLT5wcm90b2NvbDsKKwlpZiAoaXNhYy0+ZGNoLnN0YXRlID09IDcpCisJCV9xdWV1ZV9kYXRhKHJxLT5jaCwgUEhfQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksCisJCSAgICAwLCBOVUxMLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKklTQUNWZXJbXSA9Cit7IjIwODYvMjE4NiBWMS4xIiwgIjIwODUgQjEiLCAiMjA4NSBCMiIsCisgIjIwODUgVjIuMyJ9OworCitzdGF0aWMgaW50Citpc2FjX2luaXQoc3RydWN0IGlzYWNfaHcgKmlzYWMpCit7CisJdTggdmFsOworCWludCBlcnIgPSAwOworCisJaWYgKCFpc2FjLT5kY2gubDEpIHsKKwkJZXJyID0gY3JlYXRlX2wxKCZpc2FjLT5kY2gsIGlzYWNfbDFjbWQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJaXNhYy0+bW9uX3R4ID0gTlVMTDsKKwlpc2FjLT5tb25fcnggPSBOVUxMOworCWlzYWMtPmRjaC50aW1lci5mdW5jdGlvbiA9ICh2b2lkICopIGRidXN5X3RpbWVyX2hhbmRsZXI7CisJaXNhYy0+ZGNoLnRpbWVyLmRhdGEgPSAobG9uZylpc2FjOworCWluaXRfdGltZXIoJmlzYWMtPmRjaC50aW1lcik7CisJaXNhYy0+bW9jciA9IDB4YWE7CisJaWYgKGlzYWMtPnR5cGUgJiBJUEFDX1RZUEVfSVNBQ1gpIHsKKwkJLyogRGlzYWJsZSBhbGwgSVJRICovCisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDWF9NQVNLLCAweGZmKTsKKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ1hfU1RBUkQpOworCQlwcl9kZWJ1ZygiJXM6IElTQUNYIFNUQVJEICV4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDWF9JU1RBRCk7CisJCXByX2RlYnVnKCIlczogSVNBQ1ggSVNUQUQgJXhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNYX0lTVEEpOworCQlwcl9kZWJ1ZygiJXM6IElTQUNYIElTVEEgJXhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCS8qIGNsZWFyIExERCAqLworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ1hfVFJfQ09ORjAsIDB4MDApOworCQkvKiBlbmFibGUgdHJhbnNtaXR0ZXIgKi8KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX1RSX0NPTkYyLCAweDAwKTsKKwkJLyogdHJhbnNwYXJlbnQgbW9kZSAwLCBSQUMsIHN0b3AvZ28gKi8KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX01PREVELCAweGM5KTsKKwkJLyogYWxsIEhETEMgSVJRIHVubWFza2VkICovCisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNYX0lEKTsKKwkJaWYgKGlzYWMtPmRjaC5kZWJ1ZyAmIERFQlVHX0hXKQorCQkJcHJfbm90aWNlKCIlczogSVNBQ1ggRGVzaWduIElEICV4XG4iLAorCQkJCWlzYWMtPm5hbWUsIHZhbCAmIDB4M2YpOworCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDWF9DSVIwKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDWCBDSVIwICUwMlhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCWlzYWMtPnN0YXRlID0gdmFsID4+IDQ7CisJCWlzYWNfcGhfc3RhdGVfY2hhbmdlKGlzYWMpOworCQlwaF9jb21tYW5kKGlzYWMsIElTQUNfQ01EX1JTKTsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNYX01BU0ssIElQQUNYX19PTik7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDWF9NQVNLRCwgMHgwMCk7CisJfSBlbHNlIHsgLyogb2xkIGlzYWMgKi8KKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfTUFTSywgMHhmZik7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfU1RBUik7CisJCXByX2RlYnVnKCIlczogSVNBQyBTVEFSICV4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX01PREUpOworCQlwcl9kZWJ1ZygiJXM6IElTQUMgTU9ERSAleFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19BREYyKTsKKwkJcHJfZGVidWcoIiVzOiBJU0FDIEFERjIgJXhcbiIsIGlzYWMtPm5hbWUsIHZhbCk7CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfSVNUQSk7CisJCXByX2RlYnVnKCIlczogSVNBQyBJU1RBICV4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCQlpZiAodmFsICYgMHgwMSkgeworCQkJdmFsID0gUmVhZElTQUMoaXNhYywgSVNBQ19FWElSKTsKKwkJCXByX2RlYnVnKCIlczogSVNBQyBFWElSICV4XG4iLCBpc2FjLT5uYW1lLCB2YWwpOworCQl9CisJCXZhbCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfUkJDSCk7CisJCWlmIChpc2FjLT5kY2guZGVidWcgJiBERUJVR19IVykKKwkJCXByX25vdGljZSgiJXM6IElTQUMgdmVyc2lvbiAoJXgpOiAlc1xuIiwgaXNhYy0+bmFtZSwKKwkJCQl2YWwsIElTQUNWZXJbKHZhbCA+PiA1KSAmIDNdKTsKKwkJaXNhYy0+dHlwZSB8PSAoKHZhbCA+PiA1KSAmIDMpOworCQlpZiAoIWlzYWMtPmFkZjIpCisJCQlpc2FjLT5hZGYyID0gMHg4MDsKKwkJaWYgKCEoaXNhYy0+YWRmMiAmIDB4ODApKSB7IC8qIG9ubHkgSU9NIDIgTW9kZSAqLworCQkJcHJfaW5mbygiJXM6IG9ubHkgc3VwcG9ydCBJT00yIG1vZGUgYnV0IGFkZjI9JTAyeFxuIiwKKwkJCQlpc2FjLT5uYW1lLCBpc2FjLT5hZGYyKTsKKwkJCWlzYWNfcmVsZWFzZShpc2FjKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0FERjIsIGlzYWMtPmFkZjIpOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19TUVhSLCAweDJmKTsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfU1BDUiwgMHgwMCk7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX1NUQ1IsIDB4NzApOworCQlXcml0ZUlTQUMoaXNhYywgSVNBQ19NT0RFLCAweGM5KTsKKwkJV3JpdGVJU0FDKGlzYWMsIElTQUNfVElNUiwgMHgwMCk7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX0FERjEsIDB4MDApOworCQl2YWwgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX0NJUjApOworCQlwcl9kZWJ1ZygiJXM6IElTQUMgQ0lSMCAleFxuIiwgaXNhYy0+bmFtZSwgdmFsKTsKKwkJaXNhYy0+c3RhdGUgPSAodmFsID4+IDIpICYgMHhmOworCQlpc2FjX3BoX3N0YXRlX2NoYW5nZShpc2FjKTsKKwkJcGhfY29tbWFuZChpc2FjLCBJU0FDX0NNRF9SUyk7CisJCVdyaXRlSVNBQyhpc2FjLCBJU0FDX01BU0ssIDApOworCX0KKwlyZXR1cm4gZXJyOworfQorCitpbnQKK21JU0ROaXNhY19pbml0KHN0cnVjdCBpc2FjX2h3ICppc2FjLCB2b2lkICpodykKK3sKKwltSVNETl9pbml0ZGNoYW5uZWwoJmlzYWMtPmRjaCwgTUFYX0RGUkFNRV9MRU5fTDEsIGlzYWNfcGhfc3RhdGVfYmgpOworCWlzYWMtPmRjaC5odyA9IGh3OworCWlzYWMtPmRjaC5kZXYuRC5zZW5kID0gaXNhY19sMWh3OworCWlzYWMtPmluaXQgPSBpc2FjX2luaXQ7CisJaXNhYy0+cmVsZWFzZSA9IGlzYWNfcmVsZWFzZTsKKwlpc2FjLT5jdHJsID0gaXNhY19jdHJsOworCWlzYWMtPm9wZW4gPSBvcGVuX2RjaGFubmVsOworCWlzYWMtPmRjaC5kZXYuRHByb3RvY29scyA9ICgxIDw8IElTRE5fUF9URV9TMCk7CisJaXNhYy0+ZGNoLmRldi5ucmJjaGFuID0gMjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobUlTRE5pc2FjX2luaXQpOworCitzdGF0aWMgdm9pZAord2FpdGZvckNFQyhzdHJ1Y3QgaHNjeF9odyAqaHgpCit7CisJdTggc3RhcmIsIHRvID0gNTA7CisKKwl3aGlsZSAodG8pIHsKKwkJc3RhcmIgPSBSZWFkSFNDWChoeCwgSVBBQ19TVEFSQik7CisJCWlmICghKHN0YXJiICYgMHgwNCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCQl0by0tOworCX0KKwlpZiAodG8gPCA1MCkKKwkJcHJfZGVidWcoIiVzOiBCJTFkIENFQyAlZCB1c1xuIiwgaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yLAorCQkJNTAgLSB0byk7CisJaWYgKCF0bykKKwkJcHJfaW5mbygiJXM6IEIlMWQgQ0VDIHRpbWVvdXRcbiIsIGh4LT5pcC0+bmFtZSwgaHgtPmJjaC5ucik7Cit9CisKKworc3RhdGljIHZvaWQKK3dhaXRmb3JYRlcoc3RydWN0IGhzY3hfaHcgKmh4KQoreworCXU4IHN0YXJiLCB0byA9IDUwOworCisJd2hpbGUgKHRvKSB7CisJCXN0YXJiID0gUmVhZEhTQ1goaHgsIElQQUNfU1RBUkIpOworCQlpZiAoKHN0YXJiICYgMHg0NCkgPT0gMHg0MCkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJCXRvLS07CisJfQorCWlmICh0byA8IDUwKQorCQlwcl9kZWJ1ZygiJXM6IEIlMWQgWEZXICVkIHVzXG4iLCBoeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIsCisJCQk1MCAtIHRvKTsKKwlpZiAoIXRvKQorCQlwcl9pbmZvKCIlczogQiUxZCBYRlcgdGltZW91dFxuIiwgaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yKTsKK30KKworc3RhdGljIHZvaWQKK2hzY3hfY21kcihzdHJ1Y3QgaHNjeF9odyAqaHgsIHU4IGNtZCkKK3sKKwlpZiAoaHgtPmlwLT50eXBlICYgSVBBQ19UWVBFX0lQQUNYKQorCQlXcml0ZUhTQ1goaHgsIElQQUNYX0NNRFJCLCBjbWQpOworCWVsc2UgeworCQl3YWl0Zm9yQ0VDKGh4KTsKKwkJV3JpdGVIU0NYKGh4LCBJUEFDX0NNRFJCLCBjbWQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hzY3hfZW1wdHlfZmlmbyhzdHJ1Y3QgaHNjeF9odyAqaHNjeCwgdTggY291bnQpCit7CisJdTggKnA7CisKKwlwcl9kZWJ1ZygiJXM6IEIlMWQgJWRcbiIsIGhzY3gtPmlwLT5uYW1lLCBoc2N4LT5iY2gubnIsIGNvdW50KTsKKwlpZiAoIWhzY3gtPmJjaC5yeF9za2IpIHsKKwkJaHNjeC0+YmNoLnJ4X3NrYiA9IG1JX2FsbG9jX3NrYihoc2N4LT5iY2gubWF4bGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFoc2N4LT5iY2gucnhfc2tiKSB7CisJCQlwcl9pbmZvKCIlczogQiByZWNlaXZlIG91dCBvZiBtZW1vcnlcbiIsCisJCQkJaHNjeC0+aXAtPm5hbWUpOworCQkJaHNjeF9jbWRyKGhzY3gsIDB4ODApOyAvKiBSTUMgKi8KKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoKGhzY3gtPmJjaC5yeF9za2ItPmxlbiArIGNvdW50KSA+IGhzY3gtPmJjaC5tYXhsZW4pIHsKKwkJcHJfZGVidWcoIiVzOiBvdmVycnVuICVkXG4iLCBoc2N4LT5pcC0+bmFtZSwKKwkJCWhzY3gtPmJjaC5yeF9za2ItPmxlbiArIGNvdW50KTsKKwkJc2tiX3RyaW0oaHNjeC0+YmNoLnJ4X3NrYiwgMCk7CisJCWhzY3hfY21kcihoc2N4LCAweDgwKTsgLyogUk1DICovCisJCXJldHVybjsKKwl9CisJcCA9IHNrYl9wdXQoaHNjeC0+YmNoLnJ4X3NrYiwgY291bnQpOworCisJaWYgKGhzY3gtPmlwLT50eXBlICYgSVBBQ19UWVBFX0lQQUNYKQorCQloc2N4LT5pcC0+cmVhZF9maWZvKGhzY3gtPmlwLT5odywKKwkJCWhzY3gtPm9mZiArIElQQUNYX1JGSUZPQiwgcCwgY291bnQpOworCWVsc2UKKwkJaHNjeC0+aXAtPnJlYWRfZmlmbyhoc2N4LT5pcC0+aHcsCisJCQloc2N4LT5vZmYsIHAsIGNvdW50KTsKKworCWhzY3hfY21kcihoc2N4LCAweDgwKTsgLyogUk1DICovCisKKwlpZiAoaHNjeC0+YmNoLmRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJc25wcmludGYoaHNjeC0+bG9nLCA2NCwgIkIlMWQtcmVjdiAlcyAlZCAiLAorCQkJaHNjeC0+YmNoLm5yLCBoc2N4LT5pcC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhoc2N4LT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcCwgY291bnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hzY3hfZmlsbF9maWZvKHN0cnVjdCBoc2N4X2h3ICpoc2N4KQoreworCWludCBjb3VudCwgbW9yZTsKKwl1OCAqcDsKKworCWlmICghaHNjeC0+YmNoLnR4X3NrYikKKwkJcmV0dXJuOworCWNvdW50ID0gaHNjeC0+YmNoLnR4X3NrYi0+bGVuIC0gaHNjeC0+YmNoLnR4X2lkeDsKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuOworCXAgPSBoc2N4LT5iY2gudHhfc2tiLT5kYXRhICsgaHNjeC0+YmNoLnR4X2lkeDsKKworCW1vcmUgPSB0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZoc2N4LT5iY2guRmxhZ3MpID8gMSA6IDA7CisJaWYgKGNvdW50ID4gaHNjeC0+Zmlmb19zaXplKSB7CisJCWNvdW50ID0gaHNjeC0+Zmlmb19zaXplOworCQltb3JlID0gMTsKKwl9CisJcHJfZGVidWcoIiVzOiBCJTFkICVkLyVkLyVkXG4iLCBoc2N4LT5pcC0+bmFtZSwgaHNjeC0+YmNoLm5yLCBjb3VudCwKKwkJaHNjeC0+YmNoLnR4X2lkeCwgaHNjeC0+YmNoLnR4X3NrYi0+bGVuKTsKKwloc2N4LT5iY2gudHhfaWR4ICs9IGNvdW50OworCisJaWYgKGhzY3gtPmlwLT50eXBlICYgSVBBQ19UWVBFX0lQQUNYKQorCQloc2N4LT5pcC0+d3JpdGVfZmlmbyhoc2N4LT5pcC0+aHcsCisJCQloc2N4LT5vZmYgKyBJUEFDWF9YRklGT0IsIHAsIGNvdW50KTsKKwllbHNlIHsKKwkJd2FpdGZvclhGVyhoc2N4KTsKKwkJaHNjeC0+aXAtPndyaXRlX2ZpZm8oaHNjeC0+aXAtPmh3LAorCQkJaHNjeC0+b2ZmLCBwLCBjb3VudCk7CisJfQorCWhzY3hfY21kcihoc2N4LCBtb3JlID8gMHgwOCA6IDB4MGEpOworCisJaWYgKGhzY3gtPmJjaC5kZWJ1ZyAmIERFQlVHX0hXX0JGSUZPKSB7CisJCXNucHJpbnRmKGhzY3gtPmxvZywgNjQsICJCJTFkLXNlbmQgJXMgJWQgIiwKKwkJCWhzY3gtPmJjaC5uciwgaHNjeC0+aXAtPm5hbWUsIGNvdW50KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoaHNjeC0+bG9nLCBEVU1QX1BSRUZJWF9PRkZTRVQsIHAsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitoc2N4X3hwcihzdHJ1Y3QgaHNjeF9odyAqaHgpCit7CisJaWYgKGh4LT5iY2gudHhfc2tiICYmIGh4LT5iY2gudHhfaWR4IDwgaHgtPmJjaC50eF9za2ItPmxlbikKKwkJaHNjeF9maWxsX2ZpZm8oaHgpOworCWVsc2UgeworCQlpZiAoaHgtPmJjaC50eF9za2IpIHsKKwkJCS8qIHNlbmQgY29uZmlybSwgb24gdHJhbnMsIGZyZWUgb24gaGRsYy4gKi8KKwkJCWlmICh0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZoeC0+YmNoLkZsYWdzKSkKKwkJCQljb25maXJtX0JzZW5kKCZoeC0+YmNoKTsKKwkJCWRldl9rZnJlZV9za2IoaHgtPmJjaC50eF9za2IpOworCQl9CisJCWlmIChnZXRfbmV4dF9iZnJhbWUoJmh4LT5iY2gpKQorCQkJaHNjeF9maWxsX2ZpZm8oaHgpOworCX0KK30KKworc3RhdGljIHZvaWQKK2lwYWNfcm1lKHN0cnVjdCBoc2N4X2h3ICpoeCkKK3sKKwlpbnQgY291bnQ7CisJdTggcnN0YWI7CisKKwlpZiAoaHgtPmlwLT50eXBlICYgSVBBQ19UWVBFX0lQQUNYKQorCQlyc3RhYiA9IFJlYWRIU0NYKGh4LCBJUEFDWF9SU1RBQik7CisJZWxzZQorCQlyc3RhYiA9IFJlYWRIU0NYKGh4LCBJUEFDX1JTVEFCKTsKKwlwcl9kZWJ1ZygiJXM6IEIlMWQgUlNUQUIgJTAyeFxuIiwgaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yLCByc3RhYik7CisJaWYgKChyc3RhYiAmIDB4ZjApICE9IDB4YTApIHsKKwkJLyogIShWRlIgJiYgIVJETyAmJiBDUkMgJiYgIVJBQikgKi8KKwkJaWYgKCEocnN0YWIgJiAweDgwKSkgeworCQkJaWYgKGh4LT5iY2guZGVidWcgJiBERUJVR19IV19CQ0hBTk5FTCkKKwkJCQlwcl9ub3RpY2UoIiVzOiBCJTFkIGludmFsaWQgZnJhbWVcbiIsCisJCQkJCWh4LT5pcC0+bmFtZSwgaHgtPmJjaC5ucik7CisJCX0KKwkJaWYgKHJzdGFiICYgMHg0MCkgeworCQkJaWYgKGh4LT5iY2guZGVidWcgJiBERUJVR19IV19CQ0hBTk5FTCkKKwkJCQlwcl9ub3RpY2UoIiVzOiBCJTFkIFJETyBwcm90bz0leFxuIiwKKwkJCQkJaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yLAorCQkJCQloeC0+YmNoLnN0YXRlKTsKKwkJfQorCQlpZiAoIShyc3RhYiAmIDB4MjApKSB7CisJCQlpZiAoaHgtPmJjaC5kZWJ1ZyAmIERFQlVHX0hXX0JDSEFOTkVMKQorCQkJCXByX25vdGljZSgiJXM6IEIlMWQgQ1JDIGVycm9yXG4iLAorCQkJCQloeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIpOworCQl9CisJCWhzY3hfY21kcihoeCwgMHg4MCk7IC8qIERvIFJNQyAqLworCQlyZXR1cm47CisJfQorCWlmIChoeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpCisJCWNvdW50ID0gUmVhZEhTQ1goaHgsIElQQUNYX1JCQ0xCKTsKKwllbHNlCisJCWNvdW50ID0gUmVhZEhTQ1goaHgsIElQQUNfUkJDTEIpOworCWNvdW50ICY9IChoeC0+Zmlmb19zaXplIC0gMSk7CisJaWYgKGNvdW50ID09IDApCisJCWNvdW50ID0gaHgtPmZpZm9fc2l6ZTsKKwloc2N4X2VtcHR5X2ZpZm8oaHgsIGNvdW50KTsKKwlpZiAoIWh4LT5iY2gucnhfc2tiKQorCQlyZXR1cm47CisJaWYgKGh4LT5iY2gucnhfc2tiLT5sZW4gPCAyKSB7CisJCXByX2RlYnVnKCIlczogQiUxZCBmcmFtZSB0byBzaG9ydCAlZFxuIiwKKwkJCWh4LT5pcC0+bmFtZSwgaHgtPmJjaC5uciwgaHgtPmJjaC5yeF9za2ItPmxlbik7CisJCXNrYl90cmltKGh4LT5iY2gucnhfc2tiLCAwKTsKKwl9IGVsc2UgeworCQlza2JfdHJpbShoeC0+YmNoLnJ4X3NrYiwgaHgtPmJjaC5yeF9za2ItPmxlbiAtIDEpOworCQlyZWN2X0JjaGFubmVsKCZoeC0+YmNoLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpcGFjX2lycShzdHJ1Y3QgaHNjeF9odyAqaHgsIHU4IGlzdGEpCit7CisJdTggaXN0YWIsIG0sIGV4aXJiID0gMDsKKworCWlmIChoeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQ1gpCisJCWlzdGFiID0gUmVhZEhTQ1goaHgsIElQQUNYX0lTVEFCKTsKKwllbHNlIGlmIChoeC0+aXAtPnR5cGUgJiBJUEFDX1RZUEVfSVBBQykgeworCQlpc3RhYiA9IFJlYWRIU0NYKGh4LCBJUEFDX0lTVEFCKTsKKwkJbSA9IChoeC0+YmNoLm5yICYgMSkgPyBJUEFDX19FWEEgOiBJUEFDX19FWEI7CisJCWlmIChtICYgaXN0YSkgeworCQkJZXhpcmIgPSBSZWFkSFNDWChoeCwgSVBBQ19FWElSQik7CisJCQlwcl9kZWJ1ZygiJXM6IEIlMWQgRVhJUkIgJTAyeFxuIiwgaHgtPmlwLT5uYW1lLAorCQkJCWh4LT5iY2gubnIsIGV4aXJiKTsKKwkJfQorCX0gZWxzZSBpZiAoaHgtPmJjaC5uciAmIDIpIHsgLyogSFNDWCBCICovCisJCWlmIChpc3RhICYgKEhTQ1hfX0VYQSB8IEhTQ1hfX0lDQSkpCisJCQlpcGFjX2lycSgmaHgtPmlwLT5oc2N4WzBdLCBpc3RhKTsKKwkJaWYgKGlzdGEgJiBIU0NYX19FWEIpIHsKKwkJCWV4aXJiID0gUmVhZEhTQ1goaHgsIElQQUNfRVhJUkIpOworCQkJcHJfZGVidWcoIiVzOiBCJTFkIEVYSVJCICUwMnhcbiIsIGh4LT5pcC0+bmFtZSwKKwkJCQloeC0+YmNoLm5yLCBleGlyYik7CisJCX0KKwkJaXN0YWIgPSBpc3RhICYgMHhGODsKKwl9IGVsc2UgeyAvKiBIU0NYIEEgKi8KKwkJaXN0YWIgPSBSZWFkSFNDWChoeCwgSVBBQ19JU1RBQik7CisJCWlmIChpc3RhICYgSFNDWF9fRVhBKSB7CisJCQlleGlyYiA9IFJlYWRIU0NYKGh4LCBJUEFDX0VYSVJCKTsKKwkJCXByX2RlYnVnKCIlczogQiUxZCBFWElSQiAlMDJ4XG4iLCBoeC0+aXAtPm5hbWUsCisJCQkJaHgtPmJjaC5uciwgZXhpcmIpOworCQl9CisJCWlzdGFiID0gaXN0YWIgJiAweEY4OworCX0KKwlpZiAoZXhpcmIgJiBJUEFDX0JfWERVKQorCQlpc3RhYiB8PSBJUEFDWF9CX1hEVTsKKwlpZiAoZXhpcmIgJiBJUEFDX0JfUkZPKQorCQlpc3RhYiB8PSBJUEFDWF9CX1JGTzsKKwlwcl9kZWJ1ZygiJXM6IEIlMWQgSVNUQUIgJTAyeFxuIiwgaHgtPmlwLT5uYW1lLCBoeC0+YmNoLm5yLCBpc3RhYik7CisKKwlpZiAoIXRlc3RfYml0KEZMR19BQ1RJVkUsICZoeC0+YmNoLkZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKGlzdGFiICYgSVBBQ1hfQl9STUUpCisJCWlwYWNfcm1lKGh4KTsKKworCWlmIChpc3RhYiAmIElQQUNYX0JfUlBGKSB7CisJCWhzY3hfZW1wdHlfZmlmbyhoeCwgaHgtPmZpZm9fc2l6ZSk7CisJCWlmICh0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZoeC0+YmNoLkZsYWdzKSkgeworCQkJLyogcmVjZWl2ZSB0cmFuc3BhcmVudCBhdWRpbyBkYXRhICovCisJCQlpZiAoaHgtPmJjaC5yeF9za2IpCisJCQkJcmVjdl9CY2hhbm5lbCgmaHgtPmJjaCwgMCk7CisJCX0KKwl9CisKKwlpZiAoaXN0YWIgJiBJUEFDWF9CX1JGTykgeworCQlwcl9kZWJ1ZygiJXM6IEIlMWQgUkZPIGVycm9yXG4iLCBoeC0+aXAtPm5hbWUsIGh4LT5iY2gubnIpOworCQloc2N4X2NtZHIoaHgsIDB4NDApOwkvKiBSUkVTICovCisJfQorCisJaWYgKGlzdGFiICYgSVBBQ1hfQl9YUFIpCisJCWhzY3hfeHByKGh4KTsKKworCWlmIChpc3RhYiAmIElQQUNYX0JfWERVKSB7CisJCWlmICh0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZoeC0+YmNoLkZsYWdzKSkgeworCQkJaHNjeF9maWxsX2ZpZm8oaHgpOworCQkJcmV0dXJuOworCQl9CisJCXByX2RlYnVnKCIlczogQiUxZCBYRFUgZXJyb3IgYXQgbGVuICVkXG4iLCBoeC0+aXAtPm5hbWUsCisJCQloeC0+YmNoLm5yLCBoeC0+YmNoLnR4X2lkeCk7CisJCWh4LT5iY2gudHhfaWR4ID0gMDsKKwkJaHNjeF9jbWRyKGh4LCAweDAxKTsJLyogWFJFUyAqLworCX0KK30KKworaXJxcmV0dXJuX3QKK21JU0ROaXBhY19pcnEoc3RydWN0IGlwYWNfaHcgKmlwYWMsIGludCBtYXhsb29wKQoreworCWludCBjbnQgPSBtYXhsb29wICsgMTsKKwl1OCBpc3RhLCBpc3RhZDsKKwlzdHJ1Y3QgaXNhY19odyAgKmlzYWMgPSAmaXBhYy0+aXNhYzsKKworCWlmIChpcGFjLT50eXBlICYgSVBBQ19UWVBFX0lQQUNYKSB7CisJCWlzdGEgPSBSZWFkSVBBQyhpcGFjLCBJU0FDWF9JU1RBKTsKKwkJd2hpbGUgKGlzdGEgJiYgY250LS0pIHsKKwkJCXByX2RlYnVnKCIlczogSVNUQSAlMDJ4XG4iLCBpcGFjLT5uYW1lLCBpc3RhKTsKKwkJCWlmIChpc3RhICYgSVBBQ1hfX0lDQSkKKwkJCQlpcGFjX2lycSgmaXBhYy0+aHNjeFswXSwgaXN0YSk7CisJCQlpZiAoaXN0YSAmIElQQUNYX19JQ0IpCisJCQkJaXBhY19pcnEoJmlwYWMtPmhzY3hbMV0sIGlzdGEpOworCQkJaWYgKGlzdGEgJiAoSVNBQ1hfX0lDRCB8IElTQUNYX19DSUMpKQorCQkJCW1JU0ROaXNhY19pcnEoJmlwYWMtPmlzYWMsIGlzdGEpOworCQkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElTQUNYX0lTVEEpOworCQl9CisJfSBlbHNlIGlmIChpcGFjLT50eXBlICYgSVBBQ19UWVBFX0lQQUMpIHsKKwkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElQQUNfSVNUQSk7CisJCXdoaWxlIChpc3RhICYmIGNudC0tKSB7CisJCQlwcl9kZWJ1ZygiJXM6IElTVEEgJTAyeFxuIiwgaXBhYy0+bmFtZSwgaXN0YSk7CisJCQlpZiAoaXN0YSAmIChJUEFDX19JQ0QgfCBJUEFDX19FWEQpKSB7CisJCQkJaXN0YWQgPSBSZWFkSVNBQyhpc2FjLCBJU0FDX0lTVEEpOworCQkJCXByX2RlYnVnKCIlczogSVNUQUQgJTAyeFxuIiwgaXBhYy0+bmFtZSwgaXN0YWQpOworCQkJCWlmIChpc3RhZCAmIElQQUNfRF9USU4yKQorCQkJCQlwcl9kZWJ1ZygiJXMgVElOMiBpcnFcbiIsIGlwYWMtPm5hbWUpOworCQkJCWlmIChpc3RhICYgSVBBQ19fRVhEKQorCQkJCQlpc3RhZCB8PSAxOyAvKiBJU0FDIEVYSSAqLworCQkJCW1JU0ROaXNhY19pcnEoaXNhYywgaXN0YWQpOworCQkJfQorCQkJaWYgKGlzdGEgJiAoSVBBQ19fSUNBIHwgSVBBQ19fRVhBKSkKKwkJCQlpcGFjX2lycSgmaXBhYy0+aHNjeFswXSwgaXN0YSk7CisJCQlpZiAoaXN0YSAmIChJUEFDX19JQ0IgfCBJUEFDX19FWEIpKQorCQkJCWlwYWNfaXJxKCZpcGFjLT5oc2N4WzFdLCBpc3RhKTsKKwkJCWlzdGEgPSBSZWFkSVBBQyhpcGFjLCBJUEFDX0lTVEEpOworCQl9CisJfSBlbHNlIGlmIChpcGFjLT50eXBlICYgSVBBQ19UWVBFX0hTQ1gpIHsKKwkJd2hpbGUgKGNudCkgeworCQkJaXN0YSA9IFJlYWRJUEFDKGlwYWMsIElQQUNfSVNUQUIgKyBpcGFjLT5oc2N4WzFdLm9mZik7CisJCQlwcl9kZWJ1ZygiJXM6IEIyIElTVEEgJTAyeFxuIiwgaXBhYy0+bmFtZSwgaXN0YSk7CisJCQlpZiAoaXN0YSkKKwkJCQlpcGFjX2lycSgmaXBhYy0+aHNjeFsxXSwgaXN0YSk7CisJCQlpc3RhZCA9IFJlYWRJU0FDKGlzYWMsIElTQUNfSVNUQSk7CisJCQlwcl9kZWJ1ZygiJXM6IElTVEFEICUwMnhcbiIsIGlwYWMtPm5hbWUsIGlzdGFkKTsKKwkJCWlmIChpc3RhZCkKKwkJCQltSVNETmlzYWNfaXJxKGlzYWMsIGlzdGFkKTsKKwkJCWlmICgwID09IChpc3RhIHwgaXN0YWQpKQorCQkJCWJyZWFrOworCQkJY250LS07CisJCX0KKwl9CisJaWYgKGNudCA+IG1heGxvb3ApIC8qIG9ubHkgZm9yIElTQUMvSFNDWCB3aXRob3V0IFBDSSBJUlEgdGVzdCAqLworCQlyZXR1cm4gSVJRX05PTkU7CisJaWYgKGNudCA8IG1heGxvb3ApCisJCXByX2RlYnVnKCIlczogJWQgaXJxbG9vcHMgY3B1JWRcbiIsIGlwYWMtPm5hbWUsCisJCQltYXhsb29wIC0gY250LCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChtYXhsb29wICYmICFjbnQpCisJCXByX25vdGljZSgiJXM6ICVkIElSUSBMT09QIGNwdSVkXG4iLCBpcGFjLT5uYW1lLAorCQkJbWF4bG9vcCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CitFWFBPUlRfU1lNQk9MKG1JU0ROaXBhY19pcnEpOworCitzdGF0aWMgaW50Citoc2N4X21vZGUoc3RydWN0IGhzY3hfaHcgKmhzY3gsIHUzMiBicHJvdG9jb2wpCit7CisJcHJfZGVidWcoIiVzOiBIU0NYICVjIHByb3RvY29sICV4LS0+JXggY2ggJWRcbiIsIGhzY3gtPmlwLT5uYW1lLAorCQknQCcgKyBoc2N4LT5iY2gubnIsIGhzY3gtPmJjaC5zdGF0ZSwgYnByb3RvY29sLCBoc2N4LT5iY2gubnIpOworCWlmIChoc2N4LT5pcC0+dHlwZSAmIElQQUNfVFlQRV9JUEFDWCkgeworCQlpZiAoaHNjeC0+YmNoLm5yICYgMSkgeyAvKiBCMSBhbmQgSUNBICovCisJCQlXcml0ZUlQQUMoaHNjeC0+aXAsIElTQUNYX0JDSEFfVFNEUF9CQzEsIDB4ODApOworCQkJV3JpdGVJUEFDKGhzY3gtPmlwLCBJU0FDWF9CQ0hBX0NSLCAweDg4KTsKKwkJfSBlbHNlIHsgLyogQjIgYW5kIElDQiAqLworCQkJV3JpdGVJUEFDKGhzY3gtPmlwLCBJU0FDWF9CQ0hCX1RTRFBfQkMxLCAweDgxKTsKKwkJCVdyaXRlSVBBQyhoc2N4LT5pcCwgSVNBQ1hfQkNIQl9DUiwgMHg4OCk7CisJCX0KKwkJc3dpdGNoIChicHJvdG9jb2wpIHsKKwkJY2FzZSBJU0ROX1BfTk9ORTogLyogaW5pdCAqLworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNYX01PREVCLCAweEMwKTsJLyogcmVjIG9mZiAqLworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNYX0VYTUIsICAweDMwKTsJLyogc3RkIGFkai4gKi8KKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDWF9NQVNLQiwgMHhGRik7CS8qIGludHMgb2ZmICovCisJCQloc2N4X2NtZHIoaHNjeCwgMHg0MSk7CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0hETEMsICZoc2N4LT5iY2guRmxhZ3MpOworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UUkFOU1BBUkVOVCwgJmhzY3gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBJU0ROX1BfQl9SQVc6CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ1hfTU9ERUIsIDB4ODgpOwkvKiBleCB0cmFucyAqLworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNYX0VYTUIsICAweDAwKTsJLyogdHJhbnMgKi8KKwkJCWhzY3hfY21kcihoc2N4LCAweDQxKTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDWF9NQVNLQiwgSVBBQ1hfQl9PTik7CisJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19UUkFOU1BBUkVOVCwgJmhzY3gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJY2FzZSBJU0ROX1BfQl9IRExDOgorCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNYX01PREVCLCAweEMwKTsJLyogdHJhbnMgKi8KKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDWF9FWE1CLCAgMHgwMCk7CS8qIGhkbGMsY3JjICovCisJCQloc2N4X2NtZHIoaHNjeCwgMHg0MSk7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ1hfTUFTS0IsIElQQUNYX0JfT04pOworCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfSERMQywgJmhzY3gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2luZm8oIiVzOiBwcm90b2NvbCBub3Qga25vd24gJXhcbiIsIGhzY3gtPmlwLT5uYW1lLAorCQkJCWJwcm90b2NvbCk7CisJCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCQl9CisJfSBlbHNlIGlmIChoc2N4LT5pcC0+dHlwZSAmIElQQUNfVFlQRV9JUEFDKSB7IC8qIElQQUMgKi8KKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMSwgMHg4Mik7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjIsIDB4MzApOworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19YQ0NSLCAweDA3KTsKKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfUkNDUiwgMHgwNyk7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1RTQVgsIGhzY3gtPnNsb3QpOworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19UU0FSLCBoc2N4LT5zbG90KTsKKwkJc3dpdGNoIChicHJvdG9jb2wpIHsKKwkJY2FzZSBJU0ROX1BfTk9ORToKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1RTQVgsIDB4MUYpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfVFNBUiwgMHgxRik7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19NT0RFQiwgMHg4NCk7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19DQ1IxLCAweDgyKTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01BU0tCLCAweEZGKTsJLyogaW50cyBvZmYgKi8KKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSERMQywgJmhzY3gtPmJjaC5GbGFncyk7CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIElTRE5fUF9CX1JBVzoKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01PREVCLCAweGU0KTsJLyogZXggdHJhbnMgKi8KKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjEsIDB4ODIpOworCQkJaHNjeF9jbWRyKGhzY3gsIDB4NDEpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTUFTS0IsIDApOworCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZoc2N4LT5iY2guRmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01PREVCLCAweDhjKTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjEsIDB4OGEpOworCQkJaHNjeF9jbWRyKGhzY3gsIDB4NDEpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTUFTS0IsIDApOworCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfSERMQywgJmhzY3gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2luZm8oIiVzOiBwcm90b2NvbCBub3Qga25vd24gJXhcbiIsIGhzY3gtPmlwLT5uYW1lLAorCQkJCWJwcm90b2NvbCk7CisJCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCQl9CisJfSBlbHNlIGlmIChoc2N4LT5pcC0+dHlwZSAmIElQQUNfVFlQRV9IU0NYKSB7IC8qIEhTQ1ggKi8KKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfQ0NSMSwgMHg4NSk7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjIsIDB4MzApOworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19YQ0NSLCAweDA3KTsKKwkJV3JpdGVIU0NYKGhzY3gsIElQQUNfUkNDUiwgMHgwNyk7CisJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1RTQVgsIGhzY3gtPnNsb3QpOworCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19UU0FSLCBoc2N4LT5zbG90KTsKKwkJc3dpdGNoIChicHJvdG9jb2wpIHsKKwkJY2FzZSBJU0ROX1BfTk9ORToKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX1RTQVgsIDB4MUYpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfVFNBUiwgMHgxRik7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19NT0RFQiwgMHg4NCk7CisJCQlXcml0ZUhTQ1goaHNjeCwgSVBBQ19DQ1IxLCAweDg1KTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01BU0tCLCAweEZGKTsJLyogaW50cyBvZmYgKi8KKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSERMQywgJmhzY3gtPmJjaC5GbGFncyk7CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmaHNjeC0+YmNoLkZsYWdzKTsKKwkJCWJyZWFrOworCQljYXNlIElTRE5fUF9CX1JBVzoKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01PREVCLCAweGU0KTsJLyogZXggdHJhbnMgKi8KKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjEsIDB4ODUpOworCQkJaHNjeF9jbWRyKGhzY3gsIDB4NDEpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTUFTS0IsIDApOworCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZoc2N4LT5iY2guRmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX01PREVCLCAweDhjKTsKKwkJCVdyaXRlSFNDWChoc2N4LCBJUEFDX0NDUjEsIDB4OGQpOworCQkJaHNjeF9jbWRyKGhzY3gsIDB4NDEpOworCQkJV3JpdGVIU0NYKGhzY3gsIElQQUNfTUFTS0IsIDApOworCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfSERMQywgJmhzY3gtPmJjaC5GbGFncyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByX2luZm8oIiVzOiBwcm90b2NvbCBub3Qga25vd24gJXhcbiIsIGhzY3gtPmlwLT5uYW1lLAorCQkJCWJwcm90b2NvbCk7CisJCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCQl9CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCWhzY3gtPmJjaC5zdGF0ZSA9IGJwcm90b2NvbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraHNjeF9sMmwxKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgYmNoYW5uZWwsIGNoKTsKKwlzdHJ1Y3QgaHNjeF9odwkqaHggPSBjb250YWluZXJfb2YoYmNoLCBzdHJ1Y3QgaHNjeF9odywgYmNoKTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbUlTRE5oZWFkICpoaCA9IG1JU0ROX0hFQURfUChza2IpOworCXUzMiBpZDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGhoLT5wcmltKSB7CisJY2FzZSBQSF9EQVRBX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaHgtPmlwLT5od2xvY2ssIGZsYWdzKTsKKwkJcmV0ID0gYmNoYW5uZWxfc2VuZGRhdGEoYmNoLCBza2IpOworCQlpZiAocmV0ID4gMCkgeyAvKiBkaXJlY3QgVFggKi8KKwkJCWlkID0gaGgtPmlkOyAvKiBza2IgY2FuIGJlIGZyZWVkICovCisJCQlyZXQgPSAwOworCQkJaHNjeF9maWxsX2ZpZm8oaHgpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShoeC0+aXAtPmh3bG9jaywgZmxhZ3MpOworCQkJaWYgKCF0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkKKwkJCQlxdWV1ZV9jaF9mcmFtZShjaCwgUEhfREFUQV9DTkYsIGlkLCBOVUxMKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGh4LT5pcC0+aHdsb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJY2FzZSBQSF9BQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKGh4LT5pcC0+aHdsb2NrLCBmbGFncyk7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpCisJCQlyZXQgPSBoc2N4X21vZGUoaHgsIGNoLT5wcm90b2NvbCk7CisJCWVsc2UKKwkJCXJldCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaHgtPmlwLT5od2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFyZXQpCisJCQlfcXVldWVfZGF0YShjaCwgUEhfQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQkJTlVMTCwgR0ZQX0tFUk5FTCk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKGh4LT5pcC0+aHdsb2NrLCBmbGFncyk7CisJCW1JU0ROX2NsZWFyX2JjaGFubmVsKGJjaCk7CisJCWhzY3hfbW9kZShoeCwgSVNETl9QX05PTkUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGh4LT5pcC0+aHdsb2NrLCBmbGFncyk7CisJCV9xdWV1ZV9kYXRhKGNoLCBQSF9ERUFDVElWQVRFX0lORCwgTUlTRE5fSURfQU5ZLCAwLAorCQkJTlVMTCwgR0ZQX0tFUk5FTCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIHByaW0oJXgsJXgpXG4iLAorCQkJaHgtPmlwLT5uYW1lLCBfX2Z1bmNfXywgaGgtPnByaW0sIGhoLT5pZCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWlmICghcmV0KQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9iY3RybChzdHJ1Y3QgYmNoYW5uZWwgKmJjaCwgc3RydWN0IG1JU0ROX2N0cmxfcmVxICpjcSkKK3sKKwlpbnQJcmV0ID0gMDsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSAwOworCQlicmVhazsKKwkvKiBOb3RoaW5nIGltcGxlbWVudGVkIHlldCAqLworCWNhc2UgTUlTRE5fQ1RSTF9GSUxMX0VNUFRZOgorCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiB1bmtub3duIE9wICV4XG4iLCBfX2Z1bmNfXywgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2hzY3hfYmN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaCA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IGJjaGFubmVsLCBjaCk7CisJc3RydWN0IGhzY3hfaHcJKmh4ID0gY29udGFpbmVyX29mKGJjaCwgc3RydWN0IGhzY3hfaHcsIGJjaCk7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdV9sb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzOiAlcyBjbWQ6JXggJXBcbiIsIGh4LT5pcC0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0xPU0VfQ0hBTk5FTDoKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncyk7CisJCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKGh4LT5pcC0+aHdsb2NrLCBmbGFncyk7CisJCQltSVNETl9mcmVlYmNoYW5uZWwoYmNoKTsKKwkJCWhzY3hfbW9kZShoeCwgSVNETl9QX05PTkUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShoeC0+aXAtPmh3bG9jaywgZmxhZ3MpOworCQl9IGVsc2UgeworCQkJc2tiX3F1ZXVlX3B1cmdlKCZiY2gtPnJxdWV1ZSk7CisJCQliY2gtPnJjb3VudCA9IDA7CisJCX0KKwkJY2gtPnByb3RvY29sID0gSVNETl9QX05PTkU7CisJCWNoLT5wZWVyID0gTlVMTDsKKwkJbW9kdWxlX3B1dChoeC0+aXAtPm93bmVyKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCXJldCA9IGNoYW5uZWxfYmN0cmwoYmNoLCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogJXMgdW5rbm93biBwcmltKCV4KVxuIiwKKwkJCWh4LT5pcC0+bmFtZSwgX19mdW5jX18sIGNtZCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX2lwYWMoc3RydWN0IGlwYWNfaHcgKmlwYWMpCit7CisJaXNhY19yZWxlYXNlKCZpcGFjLT5pc2FjKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKkhTQ1hWZXJbXSA9Cit7IkExIiwgIj8xIiwgIkEyIiwgIj8zIiwgIkEzIiwgIlYyLjEiLCAiPzYiLCAiPzciLAorICI/OCIsICI/OSIsICI/MTAiLCAiPzExIiwgIj8xMiIsICI/MTMiLCAiPzE0IiwgIj8/PyJ9OworCisKKworc3RhdGljIHZvaWQKK2hzY3hfaW5pdChzdHJ1Y3QgaHNjeF9odyAqaHgpCit7CisJdTggdmFsOworCisJV3JpdGVIU0NYKGh4LCBJUEFDX1JBSDIsIDB4RkYpOworCVdyaXRlSFNDWChoeCwgSVBBQ19YQkNILCAweDAwKTsKKwlXcml0ZUhTQ1goaHgsIElQQUNfUkxDUiwgMHgwMCk7CisKKwlpZiAoaHgtPmlwLT50eXBlICYgSVBBQ19UWVBFX0hTQ1gpIHsKKwkJV3JpdGVIU0NYKGh4LCBJUEFDX0NDUjEsIDB4ODUpOworCQl2YWwgPSBSZWFkSFNDWChoeCwgSFNDWF9WU1RSKTsKKwkJcHJfZGVidWcoIiVzOiBIU0NYIFZTVFIgJTAyeFxuIiwgaHgtPmlwLT5uYW1lLCB2YWwpOworCQlpZiAoaHgtPmJjaC5kZWJ1ZyAmIERFQlVHX0hXKQorCQkJcHJfbm90aWNlKCIlczogSFNDWCB2ZXJzaW9uICVzXG4iLCBoeC0+aXAtPm5hbWUsCisJCQkJSFNDWFZlclt2YWwgJiAweDBmXSk7CisJfSBlbHNlCisJCVdyaXRlSFNDWChoeCwgSVBBQ19DQ1IxLCAweDgyKTsKKwlXcml0ZUhTQ1goaHgsIElQQUNfQ0NSMiwgMHgzMCk7CisJV3JpdGVIU0NYKGh4LCBJUEFDX1hDQ1IsIDB4MDcpOworCVdyaXRlSFNDWChoeCwgSVBBQ19SQ0NSLCAweDA3KTsKK30KKworc3RhdGljIGludAoraXBhY19pbml0KHN0cnVjdCBpcGFjX2h3ICppcGFjKQoreworCXU4IHZhbDsKKworCWlmIChpcGFjLT50eXBlICYgSVBBQ19UWVBFX0hTQ1gpIHsKKwkJaHNjeF9pbml0KCZpcGFjLT5oc2N4WzBdKTsKKwkJaHNjeF9pbml0KCZpcGFjLT5oc2N4WzFdKTsKKwkJdmFsID0gUmVhZElQQUMoaXBhYywgSVBBQ19JRCk7CisJfSBlbHNlIGlmIChpcGFjLT50eXBlICYgSVBBQ19UWVBFX0lQQUMpIHsKKwkJaHNjeF9pbml0KCZpcGFjLT5oc2N4WzBdKTsKKwkJaHNjeF9pbml0KCZpcGFjLT5oc2N4WzFdKTsKKwkJV3JpdGVJUEFDKGlwYWMsIElQQUNfTUFTSywgSVBBQ19fT04pOworCQl2YWwgPSBSZWFkSVBBQyhpcGFjLCBJUEFDX0NPTkYpOworCQkvKiBjb25mIGlzIGRlZmF1bHQgMCwgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBieSBjYXJkIHNldHVwICovCisJCXByX2RlYnVnKCIlczogSVBBQyBDT05GICUwMngvJTAyeFxuIiwgaXBhYy0+bmFtZSwKKwkJCXZhbCwgaXBhYy0+Y29uZik7CisJCVdyaXRlSVBBQyhpcGFjLCBJUEFDX0NPTkYsIGlwYWMtPmNvbmYpOworCQl2YWwgPSBSZWFkSVBBQyhpcGFjLCBJUEFDX0lEKTsKKwkJaWYgKGlwYWMtPmhzY3hbMF0uYmNoLmRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBJUEFDIERlc2lnbiBJRCAlMDJ4XG4iLCBpcGFjLT5uYW1lLCB2YWwpOworCX0KKwkvKiBub3RoaW5nIHNwZWNpYWwgZm9yIElQQUNYIHRvIGRvIGhlcmUgKi8KKwlyZXR1cm4gaXNhY19pbml0KCZpcGFjLT5pc2FjKTsKK30KKworc3RhdGljIGludAorb3Blbl9iY2hhbm5lbChzdHJ1Y3QgaXBhY19odyAqaXBhYywgc3RydWN0IGNoYW5uZWxfcmVxICpycSkKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwJCSpiY2g7CisKKwlpZiAocnEtPmFkci5jaGFubmVsID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmNoID0gJmlwYWMtPmhzY3hbcnEtPmFkci5jaGFubmVsIC0gMV0uYmNoOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncykpCisJCXJldHVybiAtRUJVU1k7IC8qIGItY2hhbm5lbCBjYW4gYmUgb25seSBvcGVuIG9uY2UgKi8KKwl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0ZJTExFTVBUWSwgJmJjaC0+RmxhZ3MpOworCWJjaC0+Y2gucHJvdG9jb2wgPSBycS0+cHJvdG9jb2w7CisJcnEtPmNoID0gJmJjaC0+Y2g7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5uZWxfY3RybChzdHJ1Y3QgaXBhY19odyAqaXBhYywgc3RydWN0IG1JU0ROX2N0cmxfcmVxICpjcSkKK3sKKwlpbnQJcmV0ID0gMDsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSBNSVNETl9DVFJMX0xPT1A7CisJCWJyZWFrOworCWNhc2UgTUlTRE5fQ1RSTF9MT09QOgorCQkvKiBjcS0+Y2hhbm5lbDogMCBkaXNhYmxlLCAxIEIxIGxvb3AgMiBCMiBsb29wLCAzIGJvdGggKi8KKwkJaWYgKGNxLT5jaGFubmVsIDwgMCB8fCBjcS0+Y2hhbm5lbCA+IDMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBpcGFjLT5jdHJsKGlwYWMsIEhXX1RFU1RMT09QLCBjcS0+Y2hhbm5lbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiB1bmtub3duIENUUkwgT1AgJXhcbiIsIGlwYWMtPm5hbWUsIGNxLT5vcCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitpcGFjX2RjdHJsKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCB1MzIgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1JU0ROZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBtSVNETmRldmljZSwgRCk7CisJc3RydWN0IGRjaGFubmVsICpkY2ggPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGNoYW5uZWwsIGRldik7CisJc3RydWN0IGlzYWNfaHcgKmlzYWMgPSBjb250YWluZXJfb2YoZGNoLCBzdHJ1Y3QgaXNhY19odywgZGNoKTsKKwlzdHJ1Y3QgaXBhY19odyAqaXBhYyA9IGNvbnRhaW5lcl9vZihpc2FjLCBzdHJ1Y3QgaXBhY19odywgaXNhYyk7CisJc3RydWN0IGNoYW5uZWxfcmVxICpycTsKKwlpbnQgZXJyID0gMDsKKworCXByX2RlYnVnKCIlczogRENUUkw6ICV4ICVwXG4iLCBpcGFjLT5uYW1lLCBjbWQsIGFyZyk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE9QRU5fQ0hBTk5FTDoKKwkJcnEgPSBhcmc7CisJCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX1RFX1MwKQorCQkJZXJyID0gb3Blbl9kY2hhbm5lbChpc2FjLCBycSk7CisJCWVsc2UKKwkJCWVyciA9IG9wZW5fYmNoYW5uZWwoaXBhYywgcnEpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCWlmICghdHJ5X21vZHVsZV9nZXQoaXBhYy0+b3duZXIpKQorCQkJcHJfaW5mbygiJXM6IGNhbm5vdCBnZXQgbW9kdWxlXG4iLCBpcGFjLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQlwcl9kZWJ1ZygiJXM6IGRldiglZCkgY2xvc2UgZnJvbSAlcFxuIiwgaXBhYy0+bmFtZSwKKwkJCWRjaC0+ZGV2LmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQltb2R1bGVfcHV0KGlwYWMtPm93bmVyKTsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCWVyciA9IGNoYW5uZWxfY3RybChpcGFjLCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6IHVua25vd24gRENUUkwgY29tbWFuZCAleFxuIiwgaXBhYy0+bmFtZSwgY21kKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3UzMgorbUlTRE5pcGFjX2luaXQoc3RydWN0IGlwYWNfaHcgKmlwYWMsIHZvaWQgKmh3KQoreworCXUzMiByZXQ7CisJdTggaTsKKworCWlwYWMtPmh3ID0gaHc7CisJaWYgKGlwYWMtPmlzYWMuZGNoLmRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXM6IGlwYWMgdHlwZSAleFxuIiwgaXBhYy0+bmFtZSwgaXBhYy0+dHlwZSk7CisJaWYgKGlwYWMtPnR5cGUgJiBJUEFDX1RZUEVfSFNDWCkgeworCQlpcGFjLT5pc2FjLnR5cGUgPSBJUEFDX1RZUEVfSVNBQzsKKwkJaXBhYy0+aHNjeFswXS5vZmYgPSAwOworCQlpcGFjLT5oc2N4WzFdLm9mZiA9IDB4NDA7CisJCWlwYWMtPmhzY3hbMF0uZmlmb19zaXplID0gMzI7CisJCWlwYWMtPmhzY3hbMV0uZmlmb19zaXplID0gMzI7CisJfSBlbHNlIGlmIChpcGFjLT50eXBlICYgSVBBQ19UWVBFX0lQQUMpIHsKKwkJaXBhYy0+aXNhYy50eXBlID0gSVBBQ19UWVBFX0lQQUMgfCBJUEFDX1RZUEVfSVNBQzsKKwkJaXBhYy0+aHNjeFswXS5vZmYgPSAwOworCQlpcGFjLT5oc2N4WzFdLm9mZiA9IDB4NDA7CisJCWlwYWMtPmhzY3hbMF0uZmlmb19zaXplID0gNjQ7CisJCWlwYWMtPmhzY3hbMV0uZmlmb19zaXplID0gNjQ7CisJfSBlbHNlIGlmIChpcGFjLT50eXBlICYgSVBBQ19UWVBFX0lQQUNYKSB7CisJCWlwYWMtPmlzYWMudHlwZSA9IElQQUNfVFlQRV9JUEFDWCB8IElQQUNfVFlQRV9JU0FDWDsKKwkJaXBhYy0+aHNjeFswXS5vZmYgPSBJUEFDWF9PRkZfSUNBOworCQlpcGFjLT5oc2N4WzFdLm9mZiA9IElQQUNYX09GRl9JQ0I7CisJCWlwYWMtPmhzY3hbMF0uZmlmb19zaXplID0gNjQ7CisJCWlwYWMtPmhzY3hbMV0uZmlmb19zaXplID0gNjQ7CisJfSBlbHNlCisJCXJldHVybiAwOworCisJbUlTRE5pc2FjX2luaXQoJmlwYWMtPmlzYWMsIGh3KTsKKworCWlwYWMtPmlzYWMuZGNoLmRldi5ELmN0cmwgPSBpcGFjX2RjdHJsOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpcGFjLT5oc2N4W2ldLmJjaC5uciA9IGkgKyAxOworCQlzZXRfY2hhbm5lbG1hcChpICsgMSwgaXBhYy0+aXNhYy5kY2guZGV2LmNoYW5uZWxtYXApOworCQlsaXN0X2FkZCgmaXBhYy0+aHNjeFtpXS5iY2guY2gubGlzdCwKKwkJCSZpcGFjLT5pc2FjLmRjaC5kZXYuYmNoYW5uZWxzKTsKKwkJbUlTRE5faW5pdGJjaGFubmVsKCZpcGFjLT5oc2N4W2ldLmJjaCwgTUFYX0RBVEFfTUVNKTsKKwkJaXBhYy0+aHNjeFtpXS5iY2guY2gubnIgPSBpICsgMTsKKwkJaXBhYy0+aHNjeFtpXS5iY2guY2guc2VuZCA9ICZoc2N4X2wybDE7CisJCWlwYWMtPmhzY3hbaV0uYmNoLmNoLmN0cmwgPSBoc2N4X2JjdHJsOworCQlpcGFjLT5oc2N4W2ldLmJjaC5odyA9IGh3OworCQlpcGFjLT5oc2N4W2ldLmlwID0gaXBhYzsKKwkJLyogZGVmYXVsdCB2YWx1ZXMgZm9yIElPTSB0aW1lIHNsb3RzCisJCSAqIGNhbiBiZSBvdmVyd3JpdGVuIGJ5IGNhcmQgKi8KKwkJaXBhYy0+aHNjeFtpXS5zbG90ID0gKGkgPT0gMCkgPyAweDJmIDogMHgwMzsKKwl9CisKKwlpcGFjLT5pbml0ID0gaXBhY19pbml0OworCWlwYWMtPnJlbGVhc2UgPSBmcmVlX2lwYWM7CisKKwlyZXQgPQkoMSA8PCAoSVNETl9QX0JfUkFXICYgSVNETl9QX0JfTUFTSykpIHwKKwkJKDEgPDwgKElTRE5fUF9CX0hETEMgJiBJU0ROX1BfQl9NQVNLKSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobUlTRE5pcGFjX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdAoraXNhY19tb2RfaW5pdCh2b2lkKQoreworCXByX25vdGljZSgibUlTRE5pcGFjIG1vZHVsZSB2ZXJzaW9uICVzXG4iLCBJU0FDX1JFVik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAoraXNhY19tb2RfY2xlYW51cCh2b2lkKQoreworCXByX25vdGljZSgibUlTRE5pcGFjIG1vZHVsZSB1bmxvYWRlZFxuIik7Cit9Cittb2R1bGVfaW5pdChpc2FjX21vZF9pbml0KTsKK21vZHVsZV9leGl0KGlzYWNfbW9kX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaXNhci5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaXNhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzUyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pc2FyLmMKQEAgLTAsMCArMSwxNzI2IEBACisvKgorICogbUlTRE5pc2FyLmMgICBJU0FSIChTaWVtZW5zIFBTQiA3MTEwKSBzcGVjaWZpYyBmdW5jdGlvbnMKKyAqCisgKiBBdXRob3IgS2Fyc3RlbiBLZWlsIChrZWlsQGlzZG40bGludXguZGUpCisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisvKiBkZWZpbmUgdGhpcyB0byBlbmFibGUgc3RhdGljIGRlYnVnIG1lc3NhZ2VzLCBpZiB5b3Uga2VybmVsIHN1cHBvcnRzCisgKiBkeW5hbWljIGRlYnVnZ2luZywgeW91IHNob3VsZCB1c2UgZGVidWdmcyBmb3IgdGhpcworICovCisvKiAjZGVmaW5lIERFQlVHICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tSVNETmh3Lmg+CisjaW5jbHVkZSAiaXNhci5oIgorCisjZGVmaW5lIElTQVJfUkVWCSIyLjEiCisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gS2VpbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oSVNBUl9SRVYpOworCisjZGVmaW5lIERFQlVHX0hXX0ZJUk1XQVJFX0ZJRk8JMHgxMDAwMAorCitzdGF0aWMgY29uc3QgdTggZmF4bW9kdWxhdGlvbl9zW10gPSAiMywyNCw0OCw3Miw3Myw3NCw5Niw5Nyw5OCwxMjEsMTIyLDE0NSwxNDYiOworc3RhdGljIGNvbnN0IHU4IGZheG1vZHVsYXRpb25bXSA9IHszLCAyNCwgNDgsIDcyLCA3MywgNzQsIDk2LCA5NywgOTgsIDEyMSwKKwkJCQkJMTIyLCAxNDUsIDE0Nn07CisjZGVmaW5lIEZBWE1PRENOVCAxMworCitzdGF0aWMgdm9pZCBpc2FyX3NldHVwKHN0cnVjdCBpc2FyX2h3ICopOworCitzdGF0aWMgaW5saW5lIGludAord2FpdGZvckhJQShzdHJ1Y3QgaXNhcl9odyAqaXNhciwgaW50IHRpbWVvdXQpCit7CisJaW50IHQgPSB0aW1lb3V0OworCXU4IHZhbCA9IGlzYXItPnJlYWRfcmVnKGlzYXItPmh3LCBJU0FSX0hJQSk7CisKKwl3aGlsZSAoKHZhbCAmIDEpICYmIHQpIHsKKwkJdWRlbGF5KDEpOworCQl0LS07CisJCXZhbCA9IGlzYXItPnJlYWRfcmVnKGlzYXItPmh3LCBJU0FSX0hJQSk7CisJfQorCXByX2RlYnVnKCIlczogSElBIGFmdGVyICVkdXNcbiIsIGlzYXItPm5hbWUsIHRpbWVvdXQgLSB0KTsKKwlyZXR1cm4gdGltZW91dDsKK30KKworLyoKKyAqIHNlbmQgbXNnIHRvIElTQVIgbWFpbGJveAorICogaWYgbXNnIGlzIE5VTEwgdXNlIGlzYXItPmJ1ZgorICovCitzdGF0aWMgaW50CitzZW5kX21ib3goc3RydWN0IGlzYXJfaHcgKmlzYXIsIHU4IGhpcywgdTggY3JlZywgdTggbGVuLCB1OCAqbXNnKQoreworCWlmICghd2FpdGZvckhJQShpc2FyLCAxMDAwKSkKKwkJcmV0dXJuIDA7CisJcHJfZGVidWcoInNlbmRfbWJveCglMDJ4LCUwMngsJWQpXG4iLCBoaXMsIGNyZWcsIGxlbik7CisJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0NUUkxfSCwgY3JlZyk7CisJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0NUUkxfTCwgbGVuKTsKKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfV0FEUiwgMCk7CisJaWYgKCFtc2cpCisJCW1zZyA9IGlzYXItPmJ1ZjsKKwlpZiAobXNnICYmIGxlbikgeworCQlpc2FyLT53cml0ZV9maWZvKGlzYXItPmh3LCBJU0FSX01CT1gsIG1zZywgbGVuKTsKKwkJaWYgKGlzYXItPmNoWzBdLmJjaC5kZWJ1ZyAmIERFQlVHX0hXX0JGSUZPKSB7CisJCQlpbnQgbCA9IDA7CisKKwkJCXdoaWxlIChsIDwgKGludClsZW4pIHsKKwkJCQloZXhfZHVtcF90b19idWZmZXIobXNnICsgbCwgbGVuIC0gbCwgMzIsIDEsCisJCQkJCWlzYXItPmxvZywgMjU2LCAxKTsKKwkJCQlwcl9kZWJ1ZygiJXM6ICVzICUwMng6ICVzXG4iLCBpc2FyLT5uYW1lLAorCQkJCQlfX2Z1bmNfXywgbCwgaXNhci0+bG9nKTsKKwkJCQlsICs9IDMyOworCQkJfQorCQl9CisJfQorCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9ISVMsIGhpcyk7CisJd2FpdGZvckhJQShpc2FyLCAxMDAwKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIHJlY2VpdmUgbWVzc2FnZSBmcm9tIElTQVIgbWFpbGJveAorICogaWYgbXNnIGlzIE5VTEwgdXNlIGlzYXItPmJ1ZgorICovCitzdGF0aWMgdm9pZAorcmN2X21ib3goc3RydWN0IGlzYXJfaHcgKmlzYXIsIHU4ICptc2cpCit7CisJaWYgKCFtc2cpCisJCW1zZyA9IGlzYXItPmJ1ZjsKKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfUkFEUiwgMCk7CisJaWYgKG1zZyAmJiBpc2FyLT5jbHNiKSB7CisJCWlzYXItPnJlYWRfZmlmbyhpc2FyLT5odywgSVNBUl9NQk9YLCBtc2csIGlzYXItPmNsc2IpOworCQlpZiAoaXNhci0+Y2hbMF0uYmNoLmRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJCWludCBsID0gMDsKKworCQkJd2hpbGUgKGwgPCAoaW50KWlzYXItPmNsc2IpIHsKKwkJCQloZXhfZHVtcF90b19idWZmZXIobXNnICsgbCwgaXNhci0+Y2xzYiAtIGwsIDMyLAorCQkJCQkxLCBpc2FyLT5sb2csIDI1NiwgMSk7CisJCQkJcHJfZGVidWcoIiVzOiAlcyAlMDJ4OiAlc1xuIiwgaXNhci0+bmFtZSwKKwkJCQkJX19mdW5jX18sIGwsIGlzYXItPmxvZyk7CisJCQkJbCArPSAzMjsKKwkJCX0KKwkJfQorCX0KKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSUlBLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitnZXRfaXJxX2luZm9zKHN0cnVjdCBpc2FyX2h3ICppc2FyKQoreworCWlzYXItPmlpcyA9IGlzYXItPnJlYWRfcmVnKGlzYXItPmh3LCBJU0FSX0lJUyk7CisJaXNhci0+Y21zYiA9IGlzYXItPnJlYWRfcmVnKGlzYXItPmh3LCBJU0FSX0NUUkxfSCk7CisJaXNhci0+Y2xzYiA9IGlzYXItPnJlYWRfcmVnKGlzYXItPmh3LCBJU0FSX0NUUkxfTCk7CisJcHJfZGVidWcoIiVzOiByY3ZfbWJveCglMDJ4LCUwMngsJWQpXG4iLCBpc2FyLT5uYW1lLAorCQlpc2FyLT5paXMsIGlzYXItPmNtc2IsIGlzYXItPmNsc2IpOworfQorCisvKgorICogcG9sbCBhbnN3ZXIgbWVzc2FnZSBmcm9tIElTQVIgbWFpbGJveAorICogc2hvdWxkIGJlIHVzZWQgb25seSB3aXRoIElTQVIgSVJRcyBkaXNhYmxlZCBiZWZvcmUgRFNQIHdhcyBzdGFydGVkCisgKgorICovCitzdGF0aWMgaW50Citwb2xsX21ib3goc3RydWN0IGlzYXJfaHcgKmlzYXIsIGludCBtYXhkZWxheSkKK3sKKwlpbnQgdCA9IG1heGRlbGF5OworCXU4IGlycTsKKworCWlycSA9IGlzYXItPnJlYWRfcmVnKGlzYXItPmh3LCBJU0FSX0lSUUJJVCk7CisJd2hpbGUgKHQgJiYgIShpcnEgJiBJU0FSX0lSUVNUQSkpIHsKKwkJdWRlbGF5KDEpOworCQl0LS07CisJfQorCWlmICh0KQl7CisJCWdldF9pcnFfaW5mb3MoaXNhcik7CisJCXJjdl9tYm94KGlzYXIsIE5VTEwpOworCX0KKwlwcl9kZWJ1ZygiJXM6IHB1bGxlZCAlZCBieXRlcyBhZnRlciAlZCB1c1xuIiwKKwkJaXNhci0+bmFtZSwgaXNhci0+Y2xzYiwgbWF4ZGVsYXkgLSB0KTsKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIGludAorSVNBUlZlcnNpb24oc3RydWN0IGlzYXJfaHcgKmlzYXIpCit7CisJaW50IHZlcjsKKworCS8qIGRpc2FibGUgSVNBUiBJUlEgKi8KKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSVJRQklULCAwKTsKKwlpc2FyLT5idWZbMF0gPSBJU0FSX01TR19IV1ZFUjsKKwlpc2FyLT5idWZbMV0gPSAwOworCWlzYXItPmJ1ZlsyXSA9IDE7CisJaWYgKCFzZW5kX21ib3goaXNhciwgSVNBUl9ISVNfVk5SLCAwLCAzLCBOVUxMKSkKKwkJcmV0dXJuIC0xOworCWlmICghcG9sbF9tYm94KGlzYXIsIDEwMDApKQorCQlyZXR1cm4gLTI7CisJaWYgKGlzYXItPmlpcyA9PSBJU0FSX0lJU19WTlIpIHsKKwkJaWYgKGlzYXItPmNsc2IgPT0gMSkgeworCQkJdmVyID0gaXNhci0+YnVmWzBdICYgMHhmOworCQkJcmV0dXJuIHZlcjsKKwkJfQorCQlyZXR1cm4gLTM7CisJfQorCXJldHVybiAtNDsKK30KKworc3RhdGljIGludAorbG9hZF9maXJtd2FyZShzdHJ1Y3QgaXNhcl9odyAqaXNhciwgY29uc3QgdTggKmJ1ZiwgaW50IHNpemUpCit7CisJdTMyCXNhdmVkX2RlYnVnID0gaXNhci0+Y2hbMF0uYmNoLmRlYnVnOworCWludAlyZXQsIGNudDsKKwl1OAlub20sIG5vYzsKKwl1MTYJbGVmdCwgdmFsLCAqc3AgPSAodTE2ICopYnVmOworCXU4CSptcDsKKwl1X2xvbmcJZmxhZ3M7CisKKwlzdHJ1Y3QgeworCQl1MTYgc2FkcjsKKwkJdTE2IGxlbjsKKwkJdTE2IGRfa2V5OworCX0gYmxrX2hlYWQ7CisKKwlpZiAoMSAhPSBpc2FyLT52ZXJzaW9uKSB7CisJCXByX2VycigiJXM6IElTQVIgd3JvbmcgdmVyc2lvbiAlZCBmaXJtd2FyZSBkb3dubG9hZCBhYm9ydGVkXG4iLAorCQkJaXNhci0+bmFtZSwgaXNhci0+dmVyc2lvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoIShzYXZlZF9kZWJ1ZyAmIERFQlVHX0hXX0ZJUk1XQVJFX0ZJRk8pKQorCQlpc2FyLT5jaFswXS5iY2guZGVidWcgJj0gfkRFQlVHX0hXX0JGSUZPOworCXByX2RlYnVnKCIlczogbG9hZCBmaXJtd2FyZSAlZCB3b3JkcyAoJWQgYnl0ZXMpXG4iLAorCQlpc2FyLT5uYW1lLCBzaXplLzIsIHNpemUpOworCWNudCA9IDA7CisJc2l6ZSAvPSAyOworCS8qIGRpc2FibGUgSVNBUiBJUlEgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSVJRQklULCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCXdoaWxlIChjbnQgPCBzaXplKSB7CisJCWJsa19oZWFkLnNhZHIgPSBsZTE2X3RvX2NwdSgqc3ArKyk7CisJCWJsa19oZWFkLmxlbiA9IGxlMTZfdG9fY3B1KCpzcCsrKTsKKwkJYmxrX2hlYWQuZF9rZXkgPSBsZTE2X3RvX2NwdSgqc3ArKyk7CisJCWNudCArPSAzOworCQlwcl9kZWJ1ZygiSVNBUiBmaXJtd2FyZSBibG9jayAoJSN4LCVkLCUjeClcbiIsCisJCQlibGtfaGVhZC5zYWRyLCBibGtfaGVhZC5sZW4sIGJsa19oZWFkLmRfa2V5ICYgMHhmZik7CisJCWxlZnQgPSBibGtfaGVhZC5sZW47CisJCWlmIChjbnQgKyBsZWZ0ID4gc2l6ZSkgeworCQkJcHJfaW5mbygiJXM6IGZpcm13YXJlIGVycm9yIGhhdmUgJWQgbmVlZCAlZCB3b3Jkc1xuIiwKKwkJCQlpc2FyLT5uYW1lLCBzaXplLCBjbnQgKyBsZWZ0KTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHJldGVycmZsZzsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwkJaWYgKCFzZW5kX21ib3goaXNhciwgSVNBUl9ISVNfREtFWSwgYmxrX2hlYWQuZF9rZXkgJiAweGZmLAorCQkgICAgMCwgTlVMTCkpIHsKKwkJCXByX2luZm8oIklTQVIgc2VuZF9tYm94IGRrZXkgZmFpbGVkXG4iKTsKKwkJCXJldCA9IC1FVElNRTsKKwkJCWdvdG8gcmV0ZXJyb3I7CisJCX0KKwkJaWYgKCFwb2xsX21ib3goaXNhciwgMTAwMCkpIHsKKwkJCXByX3dhcm5pbmcoIklTQVIgcG9sbF9tYm94IGRrZXkgZmFpbGVkXG4iKTsKKwkJCXJldCA9IC1FVElNRTsKKwkJCWdvdG8gcmV0ZXJyb3I7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwkJaWYgKChpc2FyLT5paXMgIT0gSVNBUl9JSVNfREtFWSkgfHwgaXNhci0+Y21zYiB8fCBpc2FyLT5jbHNiKSB7CisJCQlwcl9pbmZvKCJJU0FSIHdyb25nIGRrZXkgcmVzcG9uc2UgKCV4LCV4LCV4KVxuIiwKKwkJCQlpc2FyLT5paXMsIGlzYXItPmNtc2IsIGlzYXItPmNsc2IpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gcmV0ZXJyZmxnOworCQl9CisJCXdoaWxlIChsZWZ0ID4gMCkgeworCQkJaWYgKGxlZnQgPiAxMjYpCisJCQkJbm9jID0gMTI2OworCQkJZWxzZQorCQkJCW5vYyA9IGxlZnQ7CisJCQlub20gPSAoMiAqIG5vYykgKyAzOworCQkJbXAgID0gaXNhci0+YnVmOworCQkJLyogdGhlIElTQVIgaXMgYmlnIGVuZGlhbiAqLworCQkJKm1wKysgPSBibGtfaGVhZC5zYWRyID4+IDg7CisJCQkqbXArKyA9IGJsa19oZWFkLnNhZHIgJiAweEZGOworCQkJbGVmdCAtPSBub2M7CisJCQljbnQgKz0gbm9jOworCQkJKm1wKysgPSBub2M7CisJCQlwcl9kZWJ1ZygiJXM6IGxvYWQgJTNkIHdvcmRzIGF0ICUwNHhcbiIsIGlzYXItPm5hbWUsCisJCQkJbm9jLCBibGtfaGVhZC5zYWRyKTsKKwkJCWJsa19oZWFkLnNhZHIgKz0gbm9jOworCQkJd2hpbGUgKG5vYykgeworCQkJCXZhbCA9IGxlMTZfdG9fY3B1KCpzcCsrKTsKKwkJCQkqbXArKyA9IHZhbCA+PiA4OworCQkJCSptcCsrID0gdmFsICYgMHhGRjs7CisJCQkJbm9jLS07CisJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwkJCWlmICghc2VuZF9tYm94KGlzYXIsIElTQVJfSElTX0ZJUk0sIDAsIG5vbSwgTlVMTCkpIHsKKwkJCQlwcl9pbmZvKCJJU0FSIHNlbmRfbWJveCBwcm9nIGZhaWxlZFxuIik7CisJCQkJcmV0ID0gLUVUSU1FOworCQkJCWdvdG8gcmV0ZXJyb3I7CisJCQl9CisJCQlpZiAoIXBvbGxfbWJveChpc2FyLCAxMDAwKSkgeworCQkJCXByX2luZm8oIklTQVIgcG9sbF9tYm94IHByb2cgZmFpbGVkXG4iKTsKKwkJCQlyZXQgPSAtRVRJTUU7CisJCQkJZ290byByZXRlcnJvcjsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhci0+aHdsb2NrLCBmbGFncyk7CisJCQlpZiAoKGlzYXItPmlpcyAhPSBJU0FSX0lJU19GSVJNKSB8fAorCQkJICAgIGlzYXItPmNtc2IgfHwgaXNhci0+Y2xzYikgeworCQkJCXByX2luZm8oIklTQVIgd3JvbmcgcHJvZyByZXNwb25zZSAoJXgsJXgsJXgpXG4iLAorCQkJCQlpc2FyLT5paXMsIGlzYXItPmNtc2IsIGlzYXItPmNsc2IpOworCQkJCXJldCA9IC1FSU87CisJCQkJZ290byByZXRlcnJmbGc7CisJCQl9CisJCX0KKwkJcHJfZGVidWcoIiVzOiBJU0FSIGZpcm13YXJlIGJsb2NrICVkIHdvcmRzIGxvYWRlZFxuIiwKKwkJCWlzYXItPm5hbWUsIGJsa19oZWFkLmxlbik7CisJfQorCWlzYXItPmNoWzBdLmJjaC5kZWJ1ZyA9IHNhdmVkX2RlYnVnOworCS8qIDEwbXMgZGVsYXkgKi8KKwljbnQgPSAxMDsKKwl3aGlsZSAoY250LS0pCisJCW1kZWxheSgxKTsKKwlpc2FyLT5idWZbMF0gPSAweGZmOworCWlzYXItPmJ1ZlsxXSA9IDB4ZmU7CisJaXNhci0+YnN0YXQgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCWlmICghc2VuZF9tYm94KGlzYXIsIElTQVJfSElTX1NURFNQLCAwLCAyLCBOVUxMKSkgeworCQlwcl9pbmZvKCJJU0FSIHNlbmRfbWJveCBzdGFydCBkc3AgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVUSU1FOworCQlnb3RvIHJldGVycm9yOworCX0KKwlpZiAoIXBvbGxfbWJveChpc2FyLCAxMDAwKSkgeworCQlwcl9pbmZvKCJJU0FSIHBvbGxfbWJveCBzdGFydCBkc3AgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVUSU1FOworCQlnb3RvIHJldGVycm9yOworCX0KKwlpZiAoKGlzYXItPmlpcyAhPSBJU0FSX0lJU19TVERTUCkgfHwgaXNhci0+Y21zYiB8fCBpc2FyLT5jbHNiKSB7CisJCXByX2luZm8oIklTQVIgd3Jvbmcgc3RhcnQgZHNwIHJlc3BvbnNlICgleCwleCwleClcbiIsCisJCQlpc2FyLT5paXMsIGlzYXItPmNtc2IsIGlzYXItPmNsc2IpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIHJldGVycm9yOworCX0gZWxzZQorCQlwcl9kZWJ1ZygiJXM6IElTQVIgc3RhcnQgZHNwIHN1Y2Nlc3NcbiIsIGlzYXItPm5hbWUpOworCisJLyogTk9STUFMIG1vZGUgZW50ZXJlZCAqLworCS8qIEVuYWJsZSBJUlFzIG9mIElTQVIgKi8KKwlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSVJRQklULCBJU0FSX0lSUVNUQSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwljbnQgPSAxMDAwOyAvKiBtYXggMXMgKi8KKwl3aGlsZSAoKCFpc2FyLT5ic3RhdCkgJiYgY250KSB7CisJCW1kZWxheSgxKTsKKwkJY250LS07CisJfQorCWlmICghY250KSB7CisJCXByX2luZm8oIklTQVIgbm8gZ2VuZXJhbCBzdGF0dXMgZXZlbnQgcmVjZWl2ZWRcbiIpOworCQlyZXQgPSAtRVRJTUU7CisJCWdvdG8gcmV0ZXJyZmxnOworCX0gZWxzZQorCQlwcl9kZWJ1ZygiJXM6IElTQVIgZ2VuZXJhbCBzdGF0dXMgZXZlbnQgJXhcbiIsCisJCQlpc2FyLT5uYW1lLCBpc2FyLT5ic3RhdCk7CisJLyogMTBtcyBkZWxheSAqLworCWNudCA9IDEwOworCXdoaWxlIChjbnQtLSkKKwkJbWRlbGF5KDEpOworCWlzYXItPmlpcyA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoaXNhci0+aHdsb2NrLCBmbGFncyk7CisJaWYgKCFzZW5kX21ib3goaXNhciwgSVNBUl9ISVNfRElBRywgSVNBUl9DVFJMX1NUU1QsIDAsIE5VTEwpKSB7CisJCXByX2luZm8oIklTQVIgc2VuZF9tYm94IHNlbGYgdHN0IGZhaWxlZFxuIik7CisJCXJldCA9IC1FVElNRTsKKwkJZ290byByZXRlcnJvcjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwljbnQgPSAxMDAwMDsgLyogbWF4IDEwMCBtcyAqLworCXdoaWxlICgoaXNhci0+aWlzICE9IElTQVJfSUlTX0RJQUcpICYmIGNudCkgeworCQl1ZGVsYXkoMTApOworCQljbnQtLTsKKwl9CisJbWRlbGF5KDEpOworCWlmICghY250KSB7CisJCXByX2luZm8oIklTQVIgbm8gc2VsZiB0c3QgcmVzcG9uc2VcbiIpOworCQlyZXQgPSAtRVRJTUU7CisJCWdvdG8gcmV0ZXJyZmxnOworCX0KKwlpZiAoKGlzYXItPmNtc2IgPT0gSVNBUl9DVFJMX1NUU1QpICYmIChpc2FyLT5jbHNiID09IDEpCisJICAgICYmIChpc2FyLT5idWZbMF0gPT0gMCkpCisJCXByX2RlYnVnKCIlczogSVNBUiBzZWxmdGVzdCBPS1xuIiwgaXNhci0+bmFtZSk7CisJZWxzZSB7CisJCXByX2luZm8oIklTQVIgc2VsZnRlc3Qgbm90IE9LICV4LyV4LyV4XG4iLAorCQkJaXNhci0+Y21zYiwgaXNhci0+Y2xzYiwgaXNhci0+YnVmWzBdKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byByZXRlcnJmbGc7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKGlzYXItPmh3bG9jaywgZmxhZ3MpOworCWlzYXItPmlpcyA9IDA7CisJaWYgKCFzZW5kX21ib3goaXNhciwgSVNBUl9ISVNfRElBRywgSVNBUl9DVFJMX1NXVkVSLCAwLCBOVUxMKSkgeworCQlwcl9pbmZvKCJJU0FSIFJRU1QgU1ZOIGZhaWxlZFxuIik7CisJCXJldCA9IC1FVElNRTsKKwkJZ290byByZXRlcnJvcjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwljbnQgPSAzMDAwMDsgLyogbWF4IDMwMCBtcyAqLworCXdoaWxlICgoaXNhci0+aWlzICE9IElTQVJfSUlTX0RJQUcpICYmIGNudCkgeworCQl1ZGVsYXkoMTApOworCQljbnQtLTsKKwl9CisJbWRlbGF5KDEpOworCWlmICghY250KSB7CisJCXByX2luZm8oIklTQVIgbm8gU1ZOIHJlc3BvbnNlXG4iKTsKKwkJcmV0ID0gLUVUSU1FOworCQlnb3RvIHJldGVycmZsZzsKKwl9IGVsc2UgeworCQlpZiAoKGlzYXItPmNtc2IgPT0gSVNBUl9DVFJMX1NXVkVSKSAmJiAoaXNhci0+Y2xzYiA9PSAxKSkgeworCQkJcHJfbm90aWNlKCIlczogSVNBUiBzb2Z0d2FyZSB2ZXJzaW9uICUjeFxuIiwKKwkJCQlpc2FyLT5uYW1lLCBpc2FyLT5idWZbMF0pOworCQl9IGVsc2UgeworCQkJcHJfaW5mbygiJXM6IElTQVIgd3Jvbmcgc3d2ZXIgcmVzcG9uc2UgKCV4LCV4KSIKKwkJCQkiIGNudCglZClcbiIsIGlzYXItPm5hbWUsIGlzYXItPmNtc2IsCisJCQkJaXNhci0+Y2xzYiwgY250KTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIHJldGVycmZsZzsKKwkJfQorCX0KKwlzcGluX2xvY2tfaXJxc2F2ZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwlpc2FyX3NldHVwKGlzYXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaXNhci0+aHdsb2NrLCBmbGFncyk7CisJcmV0ID0gMDsKK3JldGVycmZsZzoKKwlzcGluX2xvY2tfaXJxc2F2ZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKK3JldGVycm9yOgorCWlzYXItPmNoWzBdLmJjaC5kZWJ1ZyA9IHNhdmVkX2RlYnVnOworCWlmIChyZXQpCisJCS8qIGRpc2FibGUgSVNBUiBJUlEgKi8KKwkJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0lSUUJJVCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpc2FyLT5od2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RlbGl2ZXJfc3RhdHVzKHN0cnVjdCBpc2FyX2NoICpjaCwgaW50IHN0YXR1cykKK3sKKwlwcl9kZWJ1ZygiJXM6IEhMLT5MTCBGQVhJTkQgJXhcbiIsIGNoLT5pcy0+bmFtZSwgc3RhdHVzKTsKKwlfcXVldWVfZGF0YSgmY2gtPmJjaC5jaCwgUEhfQ09OVFJPTF9JTkQsIHN0YXR1cywgMCwgTlVMTCwgR0ZQX0FUT01JQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraXNhcl9yY3ZfZnJhbWUoc3RydWN0IGlzYXJfY2ggKmNoKQoreworCXU4CQkqcHRyOworCisJaWYgKCFjaC0+aXMtPmNsc2IpIHsKKwkJcHJfZGVidWcoIiVzOyBJU0FSIHplcm8gbGVuIGZyYW1lXG4iLCBjaC0+aXMtPm5hbWUpOworCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChjaC0+YmNoLnN0YXRlKSB7CisJY2FzZSBJU0ROX1BfTk9ORToKKwkJcHJfZGVidWcoIiVzOiBJU0FSIHByb3RvY29sIDAgc3B1cmlvdXMgSUlTX1JEQVRBICV4LyV4LyV4XG4iLAorCQkJY2gtPmlzLT5uYW1lLCBjaC0+aXMtPmlpcywgY2gtPmlzLT5jbXNiLCBjaC0+aXMtPmNsc2IpOworCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfUkFXOgorCWNhc2UgSVNETl9QX0JfTDJEVE1GOgorCWNhc2UgSVNETl9QX0JfTU9ERU1fQVNZTkM6CisJCWlmICghY2gtPmJjaC5yeF9za2IpIHsKKwkJCWNoLT5iY2gucnhfc2tiID0gbUlfYWxsb2Nfc2tiKGNoLT5iY2gubWF4bGVuLAorCQkJCQkJR0ZQX0FUT01JQyk7CisJCQlpZiAodW5saWtlbHkoIWNoLT5iY2gucnhfc2tiKSkgeworCQkJCXByX2luZm8oIiVzOiBCIHJlY2VpdmUgb3V0IG9mIG1lbW9yeVxuIiwKKwkJCQkJY2gtPmlzLT5uYW1lKTsKKwkJCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmN2X21ib3goY2gtPmlzLCBza2JfcHV0KGNoLT5iY2gucnhfc2tiLCBjaC0+aXMtPmNsc2IpKTsKKwkJcmVjdl9CY2hhbm5lbCgmY2gtPmJjaCwgMCk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJaWYgKCFjaC0+YmNoLnJ4X3NrYikgeworCQkJY2gtPmJjaC5yeF9za2IgPSBtSV9hbGxvY19za2IoY2gtPmJjaC5tYXhsZW4sCisJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCWlmICh1bmxpa2VseSghY2gtPmJjaC5yeF9za2IpKSB7CisJCQkJcHJfaW5mbygiJXM6IEIgcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iLAorCQkJCQljaC0+aXMtPm5hbWUpOworCQkJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoKGNoLT5iY2gucnhfc2tiLT5sZW4gKyBjaC0+aXMtPmNsc2IpID4KKwkJICAgIChjaC0+YmNoLm1heGxlbiArIDIpKSB7CisJCQlwcl9kZWJ1ZygiJXM6IGluY29taW5nIHBhY2tldCB0b28gbGFyZ2VcbiIsCisJCQkJY2gtPmlzLT5uYW1lKTsKKwkJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjaC0+aXMtPmNtc2IgJiBIRExDX0VSUk9SKSB7CisJCQlwcl9kZWJ1ZygiJXM6IElTQVIgZnJhbWUgZXJyb3IgJXggbGVuICVkXG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPmlzLT5jbXNiLCBjaC0+aXMtPmNsc2IpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJaWYgKGNoLT5pcy0+Y21zYiAmIEhETENfRVJSX1JFUikKKwkJCQljaC0+YmNoLmVycl9pbnYrKzsKKwkJCWlmIChjaC0+aXMtPmNtc2IgJiBIRExDX0VSUl9DRVIpCisJCQkJY2gtPmJjaC5lcnJfY3JjKys7CisjZW5kaWYKKwkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCAwKTsKKwkJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjaC0+aXMtPmNtc2IgJiBIRExDX0ZTRCkKKwkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCAwKTsKKwkJcHRyID0gc2tiX3B1dChjaC0+YmNoLnJ4X3NrYiwgY2gtPmlzLT5jbHNiKTsKKwkJcmN2X21ib3goY2gtPmlzLCBwdHIpOworCQlpZiAoY2gtPmlzLT5jbXNiICYgSERMQ19GRUQpIHsKKwkJCWlmIChjaC0+YmNoLnJ4X3NrYi0+bGVuIDwgMykgeyAvKiBsYXN0IDIgYXJlIHRoZSBGQ1MgKi8KKwkJCQlwcl9kZWJ1ZygiJXM6IElTQVIgZnJhbWUgdG8gc2hvcnQgJWRcbiIsCisJCQkJCWNoLT5pcy0+bmFtZSwgY2gtPmJjaC5yeF9za2ItPmxlbik7CisJCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJCWJyZWFrOworCQkJfQorCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIGNoLT5iY2gucnhfc2tiLT5sZW4gLSAyKTsKKwkJCXJlY3ZfQmNoYW5uZWwoJmNoLT5iY2gsIDApOworCQl9CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfVDMwX0ZBWDoKKwkJaWYgKGNoLT5zdGF0ZSAhPSBTVEZBWF9BQ1RJVikgeworCQkJcHJfZGVidWcoIiVzOiBpc2FyX3Jjdl9mcmFtZTogbm90IEFDVElWXG4iLAorCQkJCWNoLT5pcy0+bmFtZSk7CisJCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCQlpZiAoY2gtPmJjaC5yeF9za2IpCisJCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjaC0+YmNoLnJ4X3NrYikgeworCQkJY2gtPmJjaC5yeF9za2IgPSBtSV9hbGxvY19za2IoY2gtPmJjaC5tYXhsZW4sCisJCQkJCQlHRlBfQVRPTUlDKTsKKwkJCWlmICh1bmxpa2VseSghY2gtPmJjaC5yeF9za2IpKSB7CisJCQkJcHJfaW5mbygiJXM6IEIgcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChjaC0+Y21kID09IFBDVFJMX0NNRF9GUk0pIHsKKwkJCXJjdl9tYm94KGNoLT5pcywgc2tiX3B1dChjaC0+YmNoLnJ4X3NrYiwgY2gtPmlzLT5jbHNiKSk7CisJCQlwcl9kZWJ1ZygiJXM6IGlzYXJfcmN2X2ZyYW1lOiAlZFxuIiwKKwkJCQljaC0+aXMtPm5hbWUsIGNoLT5iY2gucnhfc2tiLT5sZW4pOworCQkJaWYgKGNoLT5pcy0+Y21zYiAmIFNBUlRfTk1EKSB7IC8qIEFCT1JUICovCisJCQkJcHJfZGVidWcoIiVzOiBpc2FyX3Jjdl9mcmFtZTogbm8gbW9yZSBkYXRhXG4iLAorCQkJCQljaC0+aXMtPm5hbWUpOworCQkJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJCQlzZW5kX21ib3goY2gtPmlzLCBTRVRfRFBTKGNoLT5kcGF0aCkgfAorCQkJCQlJU0FSX0hJU19QVU1QQ1RSTCwgUENUUkxfQ01EX0VTQywKKwkJCQkJMCwgTlVMTCk7CisJCQkJY2gtPnN0YXRlID0gU1RGQVhfRVNDQVBFOworCQkJCS8qIHNldF9za2JfZmxhZyhza2IsIERGX05PTU9SRURBVEEpOyAqLworCQkJfQorCQkJcmVjdl9CY2hhbm5lbCgmY2gtPmJjaCwgMCk7CisJCQlpZiAoY2gtPmlzLT5jbXNiICYgU0FSVF9OTUQpCisJCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9OT0NBUlIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNoLT5jbWQgIT0gUENUUkxfQ01EX0ZSSCkgeworCQkJcHJfZGVidWcoIiVzOiBpc2FyX3Jjdl9mcmFtZTogdW5rbm93biBmYXggbW9kZSAleFxuIiwKKwkJCQljaC0+aXMtPm5hbWUsIGNoLT5jbWQpOworCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJaWYgKGNoLT5iY2gucnhfc2tiKQorCQkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFBDVFJMX0NNRF9GUkggKi8KKwkJaWYgKChjaC0+YmNoLnJ4X3NrYi0+bGVuICsgY2gtPmlzLT5jbHNiKSA+CisJCSAgICAoY2gtPmJjaC5tYXhsZW4gKyAyKSkgeworCQkJcHJfaW5mbygiJXM6ICVzIGluY29taW5nIHBhY2tldCB0b28gbGFyZ2VcbiIsCisJCQkJY2gtPmlzLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQljaC0+aXMtPndyaXRlX3JlZyhjaC0+aXMtPmh3LCBJU0FSX0lJQSwgMCk7CisJCQlza2JfdHJpbShjaC0+YmNoLnJ4X3NrYiwgMCk7CisJCQlicmVhazsKKwkJfSAgZWxzZSBpZiAoY2gtPmlzLT5jbXNiICYgSERMQ19FUlJPUikgeworCQkJcHJfaW5mbygiJXM6IElTQVIgZnJhbWUgZXJyb3IgJXggbGVuICVkXG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPmlzLT5jbXNiLCBjaC0+aXMtPmNsc2IpOworCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNoLT5pcy0+Y21zYiAmIEhETENfRlNEKQorCQkJc2tiX3RyaW0oY2gtPmJjaC5yeF9za2IsIDApOworCQlwdHIgPSBza2JfcHV0KGNoLT5iY2gucnhfc2tiLCBjaC0+aXMtPmNsc2IpOworCQlyY3ZfbWJveChjaC0+aXMsIHB0cik7CisJCWlmIChjaC0+aXMtPmNtc2IgJiBIRExDX0ZFRCkgeworCQkJaWYgKGNoLT5iY2gucnhfc2tiLT5sZW4gPCAzKSB7IC8qIGxhc3QgMiBhcmUgdGhlIEZDUyAqLworCQkJCXByX2luZm8oIiVzOiBJU0FSIGZyYW1lIHRvIHNob3J0ICVkXG4iLAorCQkJCQljaC0+aXMtPm5hbWUsIGNoLT5iY2gucnhfc2tiLT5sZW4pOworCQkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCBjaC0+YmNoLnJ4X3NrYi0+bGVuIC0gMik7CisJCQlyZWN2X0JjaGFubmVsKCZjaC0+YmNoLCAwKTsKKwkJfQorCQlpZiAoY2gtPmlzLT5jbXNiICYgU0FSVF9OTUQpIHsgLyogQUJPUlQgKi8KKwkJCXByX2RlYnVnKCIlczogaXNhcl9yY3ZfZnJhbWU6IG5vIG1vcmUgZGF0YVxuIiwKKwkJCQljaC0+aXMtPm5hbWUpOworCQkJY2gtPmlzLT53cml0ZV9yZWcoY2gtPmlzLT5odywgSVNBUl9JSUEsIDApOworCQkJaWYgKGNoLT5iY2gucnhfc2tiKQorCQkJCXNrYl90cmltKGNoLT5iY2gucnhfc2tiLCAwKTsKKwkJCXNlbmRfbWJveChjaC0+aXMsIFNFVF9EUFMoY2gtPmRwYXRoKSB8CisJCQkJSVNBUl9ISVNfUFVNUENUUkwsIFBDVFJMX0NNRF9FU0MsIDAsIE5VTEwpOworCQkJY2gtPnN0YXRlID0gU1RGQVhfRVNDQVBFOworCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9OT0NBUlIpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oImlzYXJfcmN2X2ZyYW1lIHByb3RvY29sICgleCllcnJvclxuIiwgY2gtPmJjaC5zdGF0ZSk7CisJCWNoLT5pcy0+d3JpdGVfcmVnKGNoLT5pcy0+aHcsIElTQVJfSUlBLCAwKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAoraXNhcl9maWxsX2ZpZm8oc3RydWN0IGlzYXJfY2ggKmNoKQoreworCWludCBjb3VudDsKKwl1OCBtc2I7CisJdTggKnB0cjsKKworCXByX2RlYnVnKCIlczogY2glZCAgdHhfc2tiICVwIHR4X2lkeCAlZFxuIiwKKwkJY2gtPmlzLT5uYW1lLCBjaC0+YmNoLm5yLCBjaC0+YmNoLnR4X3NrYiwgY2gtPmJjaC50eF9pZHgpOworCWlmICghY2gtPmJjaC50eF9za2IpCisJCXJldHVybjsKKwljb3VudCA9IGNoLT5iY2gudHhfc2tiLT5sZW4gLSBjaC0+YmNoLnR4X2lkeDsKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuOworCWlmICghKGNoLT5pcy0+YnN0YXQgJgorCQkoY2gtPmRwYXRoID09IDEgPyBCU1RBVF9SRE0xIDogQlNUQVRfUkRNMikpKQorCQlyZXR1cm47CisJaWYgKGNvdW50ID4gY2gtPm1tbCkgeworCQltc2IgPSAwOworCQljb3VudCA9IGNoLT5tbWw7CisJfSBlbHNlIHsKKwkJbXNiID0gSERMQ19GRUQ7CisJfQorCXB0ciA9IGNoLT5iY2gudHhfc2tiLT5kYXRhICsgY2gtPmJjaC50eF9pZHg7CisJaWYgKCFjaC0+YmNoLnR4X2lkeCkgeworCQlwcl9kZWJ1ZygiJXM6IGZyYW1lIHN0YXJ0XG4iLCBjaC0+aXMtPm5hbWUpOworCQlpZiAoKGNoLT5iY2guc3RhdGUgPT0gSVNETl9QX0JfVDMwX0ZBWCkgJiYKKwkJCShjaC0+Y21kID09IFBDVFJMX0NNRF9GVEgpKSB7CisJCQlpZiAoY291bnQgPiAxKSB7CisJCQkJaWYgKChwdHJbMF0gPT0gMHhmZikgJiYgKHB0clsxXSA9PSAweDEzKSkgeworCQkJCQkvKiBsYXN0IGZyYW1lICovCisJCQkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX0xBU1REQVRBLAorCQkJCQkJJmNoLT5iY2guRmxhZ3MpOworCQkJCQlwcl9kZWJ1ZygiJXM6IHNldCBMQVNUREFUQVxuIiwKKwkJCQkJCWNoLT5pcy0+bmFtZSk7CisJCQkJCWlmIChtc2IgPT0gSERMQ19GRUQpCisJCQkJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19ETEVFVFgsCisJCQkJCQkJJmNoLT5iY2guRmxhZ3MpOworCQkJCX0KKwkJCX0KKwkJfQorCQltc2IgfD0gSERMQ19GU1Q7CisJfQorCWNoLT5iY2gudHhfaWR4ICs9IGNvdW50OworCXN3aXRjaCAoY2gtPmJjaC5zdGF0ZSkgeworCWNhc2UgSVNETl9QX05PTkU6CisJCXByX2luZm8oIiVzOiB3cm9uZyBwcm90b2NvbCAwXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfUkFXOgorCWNhc2UgSVNETl9QX0JfTDJEVE1GOgorCWNhc2UgSVNETl9QX0JfTU9ERU1fQVNZTkM6CisJCXNlbmRfbWJveChjaC0+aXMsIFNFVF9EUFMoY2gtPmRwYXRoKSB8IElTQVJfSElTX1NEQVRBLAorCQkJMCwgY291bnQsIHB0cik7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfSERMQzoKKwkJc2VuZF9tYm94KGNoLT5pcywgU0VUX0RQUyhjaC0+ZHBhdGgpIHwgSVNBUl9ISVNfU0RBVEEsCisJCQltc2IsIGNvdW50LCBwdHIpOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX1QzMF9GQVg6CisJCWlmIChjaC0+c3RhdGUgIT0gU1RGQVhfQUNUSVYpCisJCQlwcl9kZWJ1ZygiJXM6IG5vdCBBQ1RJVlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJZWxzZSBpZiAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlRIKQorCQkJc2VuZF9tYm94KGNoLT5pcywgU0VUX0RQUyhjaC0+ZHBhdGgpIHwgSVNBUl9ISVNfU0RBVEEsCisJCQkJbXNiLCBjb3VudCwgcHRyKTsKKwkJZWxzZSBpZiAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlRNKQorCQkJc2VuZF9tYm94KGNoLT5pcywgU0VUX0RQUyhjaC0+ZHBhdGgpIHwgSVNBUl9ISVNfU0RBVEEsCisJCQkJMCwgY291bnQsIHB0cik7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogbm90IEZUSC9GVE1cbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiBwcm90b2NvbCgleCkgZXJyb3JcbiIsCisJCQlfX2Z1bmNfXywgY2gtPmJjaC5zdGF0ZSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXNhcl9jaCAqCitzZWxfYmNoX2lzYXIoc3RydWN0IGlzYXJfaHcgKmlzYXIsIHU4IGRwYXRoKQoreworCXN0cnVjdCBpc2FyX2NoCSpiYXNlID0gJmlzYXItPmNoWzBdOworCisJaWYgKCghZHBhdGgpIHx8IChkcGF0aCA+IDIpKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoYmFzZS0+ZHBhdGggPT0gZHBhdGgpCisJCXJldHVybiBiYXNlOworCWJhc2UrKzsKKwlpZiAoYmFzZS0+ZHBhdGggPT0gZHBhdGgpCisJCXJldHVybiBiYXNlOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9uZXh0KHN0cnVjdCBpc2FyX2NoICpjaCkKK3sKKwlwcl9kZWJ1ZygiJXM6ICVzIGNoJWQgdHhfc2tiICVwIHR4X2lkeCAlZFxuIiwKKwkJY2gtPmlzLT5uYW1lLCBfX2Z1bmNfXywgY2gtPmJjaC5uciwKKwkJY2gtPmJjaC50eF9za2IsIGNoLT5iY2gudHhfaWR4KTsKKwlpZiAoY2gtPmJjaC5zdGF0ZSA9PSBJU0ROX1BfQl9UMzBfRkFYKSB7CisJCWlmIChjaC0+Y21kID09IFBDVFJMX0NNRF9GVEgpIHsKKwkJCWlmICh0ZXN0X2JpdChGTEdfTEFTVERBVEEsICZjaC0+YmNoLkZsYWdzKSkgeworCQkJCXByX2RlYnVnKCJzZXQgTk1EX0RBVEFcbiIpOworCQkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX05NRF9EQVRBLCAmY2gtPmJjaC5GbGFncyk7CisJCQl9CisJCX0gZWxzZSBpZiAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlRNKSB7CisJCQlpZiAodGVzdF9iaXQoRkxHX0RMRUVUWCwgJmNoLT5iY2guRmxhZ3MpKSB7CisJCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfTEFTVERBVEEsICZjaC0+YmNoLkZsYWdzKTsKKwkJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19OTURfREFUQSwgJmNoLT5iY2guRmxhZ3MpOworCQkJfQorCQl9CisJfQorCWlmIChjaC0+YmNoLnR4X3NrYikgeworCQkvKiBzZW5kIGNvbmZpcm0sIG9uIHRyYW5zLCBmcmVlIG9uIGhkbGMuICovCisJCWlmICh0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZjaC0+YmNoLkZsYWdzKSkKKwkJCWNvbmZpcm1fQnNlbmQoJmNoLT5iY2gpOworCQlkZXZfa2ZyZWVfc2tiKGNoLT5iY2gudHhfc2tiKTsKKwl9CisJaWYgKGdldF9uZXh0X2JmcmFtZSgmY2gtPmJjaCkpCisJCWlzYXJfZmlsbF9maWZvKGNoKTsKKwllbHNlIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGTEdfRExFRVRYLCAmY2gtPmJjaC5GbGFncykpIHsKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0xBU1REQVRBLAorCQkJICAgICZjaC0+YmNoLkZsYWdzKSkgeworCQkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX05NRF9EQVRBLAorCQkJCSAgICAmY2gtPmJjaC5GbGFncykpIHsKKwkJCQkJdTggemQgPSAwOworCQkJCQlzZW5kX21ib3goY2gtPmlzLCBTRVRfRFBTKGNoLT5kcGF0aCkgfAorCQkJCQkJSVNBUl9ISVNfU0RBVEEsIDB4MDEsIDEsICZ6ZCk7CisJCQkJfQorCQkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX0xMX09LLCAmY2gtPmJjaC5GbGFncyk7CisJCQl9IGVsc2UgeworCQkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfQ09OTkVDVCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19zZW5kKHN0cnVjdCBpc2FyX2h3ICppc2FyLCB1OCByZG0pCit7CisJc3RydWN0IGlzYXJfY2gJKmNoOworCisJcHJfZGVidWcoIiVzOiByZG0gJXhcbiIsIGlzYXItPm5hbWUsIHJkbSk7CisJaWYgKHJkbSAmIEJTVEFUX1JETTEpIHsKKwkJY2ggPSBzZWxfYmNoX2lzYXIoaXNhciwgMSk7CisJCWlmIChjaCAmJiB0ZXN0X2JpdChGTEdfQUNUSVZFLCAmY2gtPmJjaC5GbGFncykpIHsKKwkJCWlmIChjaC0+YmNoLnR4X3NrYiAmJiAoY2gtPmJjaC50eF9za2ItPmxlbiA+CisJCQkgICAgY2gtPmJjaC50eF9pZHgpKQorCQkJCWlzYXJfZmlsbF9maWZvKGNoKTsKKwkJCWVsc2UKKwkJCQlzZW5kX25leHQoY2gpOworCQl9CisJfQorCWlmIChyZG0gJiBCU1RBVF9SRE0yKSB7CisJCWNoID0gc2VsX2JjaF9pc2FyKGlzYXIsIDIpOworCQlpZiAoY2ggJiYgdGVzdF9iaXQoRkxHX0FDVElWRSwgJmNoLT5iY2guRmxhZ3MpKSB7CisJCQlpZiAoY2gtPmJjaC50eF9za2IgJiYgKGNoLT5iY2gudHhfc2tiLT5sZW4gPgorCQkJICAgIGNoLT5iY2gudHhfaWR4KSkKKwkJCQlpc2FyX2ZpbGxfZmlmbyhjaCk7CisJCQllbHNlCisJCQkJc2VuZF9uZXh0KGNoKTsKKwkJfQorCX0KK30KKworY29uc3QgY2hhciAqZG1yaWxbXSA9IHsiTk8gU1BFRUQiLCAiMTIwMC83NSIsICJOT0RFRjIiLCAiNzUvMTIwMCIsICJOT0RFRjQiLAorCQkJIjMwMCIsICI2MDAiLCAiMTIwMCIsICIyNDAwIiwgIjQ4MDAiLCAiNzIwMCIsCisJCQkiOTYwMG50IiwgIjk2MDB0IiwgIjEyMDAwIiwgIjE0NDAwIiwgIldST05HIn07Citjb25zdCBjaGFyICpkbXJpbVtdID0geyJOTyBNT0QiLCAiTk8gREVGIiwgIlYzMi9WMzJiIiwgIlYyMiIsICJWMjEiLAorCQkJIkJlbGwxMDMiLCAiVjIzIiwgIkJlbGwyMDIiLCAiVjE3IiwgIlYyOSIsICJWMjd0ZXIifTsKKworc3RhdGljIHZvaWQKK2lzYXJfcHVtcF9zdGF0dXNfcnNwKHN0cnVjdCBpc2FyX2NoICpjaCkgeworCXU4IHJpbCA9IGNoLT5pcy0+YnVmWzBdOworCXU4IHJpbTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KElTQVJfUkFURV9SRVEsICZjaC0+aXMtPkZsYWdzKSkKKwkJcmV0dXJuOworCWlmIChyaWwgPiAxNCkgeworCQlwcl9pbmZvKCIlczogd3JvbmcgcHN0cnNwIHJpbD0lZFxuIiwgY2gtPmlzLT5uYW1lLCByaWwpOworCQlyaWwgPSAxNTsKKwl9CisJc3dpdGNoIChjaC0+aXMtPmJ1ZlsxXSkgeworCWNhc2UgMDoKKwkJcmltID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweDIwOgorCQlyaW0gPSAyOworCQlicmVhazsKKwljYXNlIDB4NDA6CisJCXJpbSA9IDM7CisJCWJyZWFrOworCWNhc2UgMHg0MToKKwkJcmltID0gNDsKKwkJYnJlYWs7CisJY2FzZSAweDUxOgorCQlyaW0gPSA1OworCQlicmVhazsKKwljYXNlIDB4NjE6CisJCXJpbSA9IDY7CisJCWJyZWFrOworCWNhc2UgMHg3MToKKwkJcmltID0gNzsKKwkJYnJlYWs7CisJY2FzZSAweDgyOgorCQlyaW0gPSA4OworCQlicmVhazsKKwljYXNlIDB4OTI6CisJCXJpbSA9IDk7CisJCWJyZWFrOworCWNhc2UgMHhhMjoKKwkJcmltID0gMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJpbSA9IDE7CisJCWJyZWFrOworCX0KKwlzcHJpbnRmKGNoLT5jb25tc2csICIlcyAlcyIsIGRtcmlsW3JpbF0sIGRtcmltW3JpbV0pOworCXByX2RlYnVnKCIlczogcHVtcCBzdHJzcCAlc1xuIiwgY2gtPmlzLT5uYW1lLCBjaC0+Y29ubXNnKTsKK30KKworc3RhdGljIHZvaWQKK2lzYXJfcHVtcF9zdGF0ZXZfbW9kZW0oc3RydWN0IGlzYXJfY2ggKmNoLCB1OCBkZXZ0KSB7CisJdTggZHBzID0gU0VUX0RQUyhjaC0+ZHBhdGgpOworCisJc3dpdGNoIChkZXZ0KSB7CisJY2FzZSBQU0VWXzEwTVNfVElNRVI6CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFRJTUVSXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfQ09OX09OOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBDT05ORUNUXG4iLCBjaC0+aXMtPm5hbWUpOworCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX0NPTk5FQ1QpOworCQlicmVhazsKKwljYXNlIFBTRVZfQ09OX09GRjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgTk8gQ09OTkVDVFxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFNUUkVRLCAwLCAwLCBOVUxMKTsKKwkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9OT0NBUlIpOworCQlicmVhazsKKwljYXNlIFBTRVZfVjI0X09GRjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgVjI0IE9GRlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQU0VWX0NUU19PTjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgQ1RTIE9OXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfQ1RTX09GRjoKKwkJcHJfZGVidWcoIiVzIHB1bXAgc3RldiBDVFMgT0ZGXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfRENEX09OOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBDQVJSSUVSIE9OXG4iLCBjaC0+aXMtPm5hbWUpOworCQl0ZXN0X2FuZF9zZXRfYml0KElTQVJfUkFURV9SRVEsICZjaC0+aXMtPkZsYWdzKTsKKwkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFNUUkVRLCAwLCAwLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBQU0VWX0RDRF9PRkY6CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IENBUlJJRVIgT0ZGXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfRFNSX09OOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBEU1IgT05cbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9EU1JfT0ZGOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBEU1JfT0ZGXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfUkVNX1JFVDoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgUkVNT1RFIFJFVFJBSU5cbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9SRU1fUkVOOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBSRU1PVEUgUkVORUdPVElBVEVcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9HU1ROX0NMUjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgR1NUTiBDTEVBUlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygidSVzOiBua25vd24gcHVtcCBzdGV2ICV4XG4iLCBjaC0+aXMtPm5hbWUsIGRldnQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpc2FyX3B1bXBfc3RhdGV2X2ZheChzdHJ1Y3QgaXNhcl9jaCAqY2gsIHU4IGRldnQpIHsKKwl1OCBkcHMgPSBTRVRfRFBTKGNoLT5kcGF0aCk7CisJdTggcDE7CisKKwlzd2l0Y2ggKGRldnQpIHsKKwljYXNlIFBTRVZfMTBNU19USU1FUjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgVElNRVJcbiIsIGNoLT5pcy0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUFNFVl9SU1BfUkVBRFk6CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJTUF9SRUFEWVxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJY2gtPnN0YXRlID0gU1RGQVhfUkVBRFk7CisJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfUkVBRFkpOworI2lmZGVmIEFVVE9DT04KKwkJaWYgKHRlc3RfYml0KEJDX0ZMR19PUklHLCAmY2gtPmJjaC5GbGFncykpCisJCQlpc2FyX3B1bXBfY21kKGJjaCwgSFdfTU9EX0ZSSCwgMyk7CisJCWVsc2UKKwkJCWlzYXJfcHVtcF9jbWQoYmNoLCBIV19NT0RfRlRILCAzKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFBTRVZfTElORV9UWF9IOgorCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX0xJTkUpIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IExJTkVfVFhfSFxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0NPTlQ7CisJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwKKwkJCQlQQ1RSTF9DTURfQ09OVCwgMCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBMSU5FX1RYX0ggd3Jvbmcgc3QgJXhcbiIsCisJCQkJY2gtPmlzLT5uYW1lLCBjaC0+c3RhdGUpOworCQl9CisJCWJyZWFrOworCWNhc2UgUFNFVl9MSU5FX1JYX0g6CisJCWlmIChjaC0+c3RhdGUgPT0gU1RGQVhfTElORSkgeworCQkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgTElORV9SWF9IXG4iLCBjaC0+aXMtPm5hbWUpOworCQkJY2gtPnN0YXRlID0gU1RGQVhfQ09OVDsKKwkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDVFJMLAorCQkJCVBDVFJMX0NNRF9DT05ULCAwLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IExJTkVfUlhfSCB3cm9uZyBzdCAleFxuIiwKKwkJCQljaC0+aXMtPm5hbWUsIGNoLT5zdGF0ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQU0VWX0xJTkVfVFhfQjoKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9MSU5FKSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBMSU5FX1RYX0JcbiIsIGNoLT5pcy0+bmFtZSk7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9DT05UOworCQkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFVNUENUUkwsCisJCQkJUENUUkxfQ01EX0NPTlQsIDAsIE5VTEwpOworCQl9IGVsc2UgeworCQkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgTElORV9UWF9CIHdyb25nIHN0ICV4XG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPnN0YXRlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBTRVZfTElORV9SWF9COgorCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX0xJTkUpIHsKKwkJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IExJTkVfUlhfQlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0NPTlQ7CisJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwKKwkJCQlQQ1RSTF9DTURfQ09OVCwgMCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBMSU5FX1JYX0Igd3Jvbmcgc3QgJXhcbiIsCisJCQkJY2gtPmlzLT5uYW1lLCBjaC0+c3RhdGUpOworCQl9CisJCWJyZWFrOworCWNhc2UgUFNFVl9SU1BfQ09OTjoKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9DT05UKSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBSU1BfQ09OTlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0FDVElWOworCQkJdGVzdF9hbmRfc2V0X2JpdChJU0FSX1JBVEVfUkVRLCAmY2gtPmlzLT5GbGFncyk7CisJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QU1RSRVEsIDAsIDAsIE5VTEwpOworCQkJaWYgKGNoLT5jbWQgPT0gUENUUkxfQ01EX0ZUSCkgeworCQkJCWludCBkZWxheSA9IChjaC0+bW9kID09IDMpID8gMTAwMCA6IDIwMDsKKwkJCQkvKiAxcyAoMjAwIG1zKSBGbGFncyBiZWZvcmUgZGF0YSAqLworCQkJCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMR19GVElfUlVOLAorCQkJCSAgICAmY2gtPmJjaC5GbGFncykpCisJCQkJCWRlbF90aW1lcigmY2gtPmZ0aW1lcik7CisJCQkJY2gtPmZ0aW1lci5leHBpcmVzID0KKwkJCQkJamlmZmllcyArICgoZGVsYXkgKiBIWikvMTAwMCk7CisJCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfTExfQ09OTiwKKwkJCQkJJmNoLT5iY2guRmxhZ3MpOworCQkJCWFkZF90aW1lcigmY2gtPmZ0aW1lcik7CisJCQl9IGVsc2UgeworCQkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfQ09OTkVDVCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBSU1BfQ09OTiB3cm9uZyBzdCAleFxuIiwKKwkJCQljaC0+aXMtPm5hbWUsIGNoLT5zdGF0ZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQU0VWX0ZMQUdTX0RFVDoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgRkxBR1NfREVUXG4iLCBjaC0+aXMtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFBTRVZfUlNQX0RJU0M6CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJTUF9ESVNDIHN0YXRlKCVkKVxuIiwKKwkJCWNoLT5pcy0+bmFtZSwgY2gtPnN0YXRlKTsKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9FU0NBUEUpIHsKKwkJCXAxID0gNTsKKwkJCXN3aXRjaCAoY2gtPm5ld2NtZCkgeworCQkJY2FzZSAwOgorCQkJCWNoLT5zdGF0ZSA9IFNURkFYX1JFQURZOworCQkJCWJyZWFrOworCQkJY2FzZSBQQ1RSTF9DTURfRlRNOgorCQkJCXAxID0gMjsKKwkJCWNhc2UgUENUUkxfQ01EX0ZUSDoKKwkJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwKKwkJCQkJUENUUkxfQ01EX1NJTE9OLCAxLCAmcDEpOworCQkJCWNoLT5zdGF0ZSA9IFNURkFYX1NJTERFVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUENUUkxfQ01EX0ZSSDoKKwkJCWNhc2UgUENUUkxfQ01EX0ZSTToKKwkJCQljaC0+bW9kID0gY2gtPm5ld21vZDsKKwkJCQlwMSA9IGNoLT5uZXdtb2Q7CisJCQkJY2gtPm5ld21vZCA9IDA7CisJCQkJY2gtPmNtZCA9IGNoLT5uZXdjbWQ7CisJCQkJY2gtPm5ld2NtZCA9IDA7CisJCQkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFVNUENUUkwsCisJCQkJCWNoLT5jbWQsIDEsICZwMSk7CisJCQkJY2gtPnN0YXRlID0gU1RGQVhfTElORTsKKwkJCQljaC0+dHJ5X21vZCA9IDM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByX2RlYnVnKCIlczogUlNQX0RJU0MgdW5rbm93biBuZXdjbWQgJXhcbiIsCisJCQkJCWNoLT5pcy0+bmFtZSwgY2gtPm5ld2NtZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSBpZiAoY2gtPnN0YXRlID09IFNURkFYX0FDVElWKSB7CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19MTF9PSywgJmNoLT5iY2guRmxhZ3MpKQorCQkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfT0spOworCQkJZWxzZSBpZiAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlJNKQorCQkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfTk9DQVJSKTsKKwkJCWVsc2UKKwkJCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX0ZDRVJST1IpOworCQkJY2gtPnN0YXRlID0gU1RGQVhfUkVBRFk7CisJCX0gZWxzZSBpZiAoY2gtPnN0YXRlICE9IFNURkFYX1NJTERFVCkgeworCQkJLyogaWdub3JlIGluIFNURkFYX1NJTERFVCAqLworCQkJY2gtPnN0YXRlID0gU1RGQVhfUkVBRFk7CisJCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX0ZDRVJST1IpOworCQl9CisJCWJyZWFrOworCWNhc2UgUFNFVl9SU1BfU0lMREVUOgorCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBSU1BfU0lMREVUXG4iLCBjaC0+aXMtPm5hbWUpOworCQlpZiAoY2gtPnN0YXRlID09IFNURkFYX1NJTERFVCkgeworCQkJY2gtPm1vZCA9IGNoLT5uZXdtb2Q7CisJCQlwMSA9IGNoLT5uZXdtb2Q7CisJCQljaC0+bmV3bW9kID0gMDsKKwkJCWNoLT5jbWQgPSBjaC0+bmV3Y21kOworCQkJY2gtPm5ld2NtZCA9IDA7CisJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwKKwkJCQljaC0+Y21kLCAxLCAmcDEpOworCQkJY2gtPnN0YXRlID0gU1RGQVhfTElORTsKKwkJCWNoLT50cnlfbW9kID0gMzsKKwkJfQorCQlicmVhazsKKwljYXNlIFBTRVZfUlNQX1NJTE9GRjoKKwkJcHJfZGVidWcoIiVzOiBwdW1wIHN0ZXYgUlNQX1NJTE9GRlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBQU0VWX1JTUF9GQ0VSUjoKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9MSU5FKSB7CisJCQlwcl9kZWJ1ZygiJXM6IHB1bXAgc3RldiBSU1BfRkNFUlIgdHJ5ICVkXG4iLAorCQkJCWNoLT5pcy0+bmFtZSwgY2gtPnRyeV9tb2QpOworCQkJaWYgKGNoLT50cnlfbW9kLS0pIHsKKwkJCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwKKwkJCQkJY2gtPmNtZCwgMSwgJmNoLT5tb2QpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXByX2RlYnVnKCIlczogcHVtcCBzdGV2IFJTUF9GQ0VSUlxuIiwgY2gtPmlzLT5uYW1lKTsKKwkJY2gtPnN0YXRlID0gU1RGQVhfRVNDQVBFOworCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwgUENUUkxfQ01EX0VTQywKKwkJCTAsIE5VTEwpOworCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX0ZDRVJST1IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3ZvaWQKK21JU0ROaXNhcl9pcnEoc3RydWN0IGlzYXJfaHcgKmlzYXIpCit7CisJc3RydWN0IGlzYXJfY2ggKmNoOworCisJZ2V0X2lycV9pbmZvcyhpc2FyKTsKKwlzd2l0Y2ggKGlzYXItPmlpcyAmIElTQVJfSUlTX01TQ01TRCkgeworCWNhc2UgSVNBUl9JSVNfUkRBVEE6CisJCWNoID0gc2VsX2JjaF9pc2FyKGlzYXIsIGlzYXItPmlpcyA+PiA2KTsKKwkJaWYgKGNoKQorCQkJaXNhcl9yY3ZfZnJhbWUoY2gpOworCQllbHNlIHsKKwkJCXByX2RlYnVnKCIlczogSVNBUiBzcHVyaW91cyBJSVNfUkRBVEEgJXgvJXgvJXhcbiIsCisJCQkJaXNhci0+bmFtZSwgaXNhci0+aWlzLCBpc2FyLT5jbXNiLAorCQkJCWlzYXItPmNsc2IpOworCQkJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0lJQSwgMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJU0FSX0lJU19HU1RFVjoKKwkJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0lJQSwgMCk7CisJCWlzYXItPmJzdGF0IHw9IGlzYXItPmNtc2I7CisJCWNoZWNrX3NlbmQoaXNhciwgaXNhci0+Y21zYik7CisJCWJyZWFrOworCWNhc2UgSVNBUl9JSVNfQlNURVY6CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCWNoID0gc2VsX2JjaF9pc2FyKGlzYXIsIGlzYXItPmlpcyA+PiA2KTsKKwkJaWYgKGNoKSB7CisJCQlpZiAoaXNhci0+Y21zYiA9PSBCU1RFVl9UQk8pCisJCQkJY2gtPmJjaC5lcnJfdHgrKzsKKwkJCWlmIChpc2FyLT5jbXNiID09IEJTVEVWX1JCTykKKwkJCQljaC0+YmNoLmVycl9yZG8rKzsKKwkJfQorI2VuZGlmCisJCXByX2RlYnVnKCIlczogQnVmZmVyIFNURVYgZHBhdGglZCBtc2IoJXgpXG4iLAorCQkJaXNhci0+bmFtZSwgaXNhci0+aWlzPj42LCBpc2FyLT5jbXNiKTsKKwkJaXNhci0+d3JpdGVfcmVnKGlzYXItPmh3LCBJU0FSX0lJQSwgMCk7CisJCWJyZWFrOworCWNhc2UgSVNBUl9JSVNfUFNURVY6CisJCWNoID0gc2VsX2JjaF9pc2FyKGlzYXIsIGlzYXItPmlpcyA+PiA2KTsKKwkJaWYgKGNoKSB7CisJCQlyY3ZfbWJveChpc2FyLCBOVUxMKTsKKwkJCWlmIChjaC0+YmNoLnN0YXRlID09IElTRE5fUF9CX01PREVNX0FTWU5DKQorCQkJCWlzYXJfcHVtcF9zdGF0ZXZfbW9kZW0oY2gsIGlzYXItPmNtc2IpOworCQkJZWxzZSBpZiAoY2gtPmJjaC5zdGF0ZSA9PSBJU0ROX1BfQl9UMzBfRkFYKQorCQkJCWlzYXJfcHVtcF9zdGF0ZXZfZmF4KGNoLCBpc2FyLT5jbXNiKTsKKwkJCWVsc2UgaWYgKGNoLT5iY2guc3RhdGUgPT0gSVNETl9QX0JfUkFXKSB7CisJCQkJaW50CXR0OworCQkJCXR0ID0gaXNhci0+Y21zYiB8IDB4MzA7CisJCQkJaWYgKHR0ID09IDB4M2UpCisJCQkJCXR0ID0gJyonOworCQkJCWVsc2UgaWYgKHR0ID09IDB4M2YpCisJCQkJCXR0ID0gJyMnOworCQkJCWVsc2UgaWYgKHR0ID4gJzknKQorCQkJCQl0dCArPSA3OworCQkJCXR0IHw9IERUTUZfVE9ORV9WQUw7CisJCQkJX3F1ZXVlX2RhdGEoJmNoLT5iY2guY2gsIFBIX0NPTlRST0xfSU5ELAorCQkJCQlNSVNETl9JRF9BTlksIHNpemVvZih0dCksICZ0dCwKKwkJCQkJR0ZQX0FUT01JQyk7CisJCQl9IGVsc2UKKwkJCQlwcl9kZWJ1ZygiJXM6IElTQVIgSUlTX1BTVEVWIHBtICVkIHN0YSAleFxuIiwKKwkJCQkJaXNhci0+bmFtZSwgY2gtPmJjaC5zdGF0ZSwKKwkJCQkJaXNhci0+Y21zYik7CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IElTQVIgc3B1cmlvdXMgSUlTX1BTVEVWICV4LyV4LyV4XG4iLAorCQkJCWlzYXItPm5hbWUsIGlzYXItPmlpcywgaXNhci0+Y21zYiwKKwkJCQlpc2FyLT5jbHNiKTsKKwkJCWlzYXItPndyaXRlX3JlZyhpc2FyLT5odywgSVNBUl9JSUEsIDApOworCQl9CisJCWJyZWFrOworCWNhc2UgSVNBUl9JSVNfUFNUUlNQOgorCQljaCA9IHNlbF9iY2hfaXNhcihpc2FyLCBpc2FyLT5paXMgPj4gNik7CisJCWlmIChjaCkgeworCQkJcmN2X21ib3goaXNhciwgTlVMTCk7CisJCQlpc2FyX3B1bXBfc3RhdHVzX3JzcChjaCk7CisJCX0gZWxzZSB7CisJCQlwcl9kZWJ1ZygiJXM6IElTQVIgc3B1cmlvdXMgSUlTX1BTVFJTUCAleC8leC8leFxuIiwKKwkJCQlpc2FyLT5uYW1lLCBpc2FyLT5paXMsIGlzYXItPmNtc2IsCisJCQkJaXNhci0+Y2xzYik7CisJCQlpc2FyLT53cml0ZV9yZWcoaXNhci0+aHcsIElTQVJfSUlBLCAwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElTQVJfSUlTX0RJQUc6CisJY2FzZSBJU0FSX0lJU19CU1RSU1A6CisJY2FzZSBJU0FSX0lJU19JT00yUlNQOgorCQlyY3ZfbWJveChpc2FyLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBJU0FSX0lJU19JTlZNU0c6CisJCXJjdl9tYm94KGlzYXIsIE5VTEwpOworCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgbXNnIGhpczoleFxuIiwgaXNhci0+bmFtZSwgaXNhci0+Y21zYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjdl9tYm94KGlzYXIsIE5VTEwpOworCQlwcl9kZWJ1ZygiJXM6IHVuaGFuZGxlZCBtc2cgaWlzKCV4KSBjdHJsKCV4LyV4KVxuIiwKKwkJCWlzYXItPm5hbWUsIGlzYXItPmlpcywgaXNhci0+Y21zYiwgaXNhci0+Y2xzYik7CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0wobUlTRE5pc2FyX2lycSk7CisKK3N0YXRpYyB2b2lkCitmdGltZXJfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGlzYXJfY2ggKmNoID0gKHN0cnVjdCBpc2FyX2NoICopZGF0YTsKKworCXByX2RlYnVnKCIlczogZnRpbWVyIGZsYWdzICVseFxuIiwgY2gtPmlzLT5uYW1lLCBjaC0+YmNoLkZsYWdzKTsKKwl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0ZUSV9SVU4sICZjaC0+YmNoLkZsYWdzKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19MTF9DT05OLCAmY2gtPmJjaC5GbGFncykpCisJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfQ09OTkVDVCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXR1cF9wdW1wKHN0cnVjdCBpc2FyX2NoICpjaCkgeworCXU4IGRwcyA9IFNFVF9EUFMoY2gtPmRwYXRoKTsKKwl1OCBjdHJsLCBwYXJhbVs2XTsKKworCXN3aXRjaCAoY2gtPmJjaC5zdGF0ZSkgeworCWNhc2UgSVNETl9QX05PTkU6CisJY2FzZSBJU0ROX1BfQl9SQVc6CisJY2FzZSBJU0ROX1BfQl9IRExDOgorCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ0ZHLCBQTU9EX0JZUEFTUywgMCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfTDJEVE1GOgorCQlpZiAodGVzdF9iaXQoRkxHX0RUTUZTRU5ELCAmY2gtPmJjaC5GbGFncykpIHsKKwkJCXBhcmFtWzBdID0gNTsgLyogVE9BIDUgZGIgKi8KKwkJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDRkcsCisJCQkJUE1PRF9EVE1GX1RSQU5TLCAxLCBwYXJhbSk7CisJCX0gZWxzZSB7CisJCQlwYXJhbVswXSA9IDQwOyAvKiBSRUwgLTQ2IGRibSAqLworCQkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFVNUENGRywKKwkJCQlQTU9EX0RUTUYsIDEsIHBhcmFtKTsKKwkJfQorCWNhc2UgSVNETl9QX0JfTU9ERU1fQVNZTkM6CisJCWN0cmwgPSBQTU9EX0RBVEFNT0RFTTsKKwkJaWYgKHRlc3RfYml0KEZMR19PUklHSU4sICZjaC0+YmNoLkZsYWdzKSkgeworCQkJY3RybCB8PSBQQ1RSTF9PUklHOworCQkJcGFyYW1bNV0gPSBQVjMyUDZfQ1ROOworCQl9IGVsc2UgeworCQkJcGFyYW1bNV0gPSBQVjMyUDZfQVROOworCQl9CisJCXBhcmFtWzBdID0gNjsgLyogNiBkYiAqLworCQlwYXJhbVsxXSA9IFBWMzJQMl9WMjNSIHwgUFYzMlAyX1YyMkEgfCBQVjMyUDJfVjIyQiB8CisJCQlQVjMyUDJfVjIyQyB8IFBWMzJQMl9WMjEgfCBQVjMyUDJfQkVMOworCQlwYXJhbVsyXSA9IFBWMzJQM19BTU9EIHwgUFYzMlAzX1YzMkIgfCBQVjMyUDNfVjIzQjsKKwkJcGFyYW1bM10gPSBQVjMyUDRfVVQxNDQ7CisJCXBhcmFtWzRdID0gUFYzMlA1X1VUMTQ0OworCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ0ZHLCBjdHJsLCA2LCBwYXJhbSk7CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfVDMwX0ZBWDoKKwkJY3RybCA9IFBNT0RfRkFYOworCQlpZiAodGVzdF9iaXQoRkxHX09SSUdJTiwgJmNoLT5iY2guRmxhZ3MpKSB7CisJCQljdHJsIHw9IFBDVFJMX09SSUc7CisJCQlwYXJhbVsxXSA9IFBGQVhQMl9DVE47CisJCX0gZWxzZSB7CisJCQlwYXJhbVsxXSA9IFBGQVhQMl9BVE47CisJCX0KKwkJcGFyYW1bMF0gPSA2OyAvKiA2IGRiICovCisJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1BVTVBDRkcsIGN0cmwsIDIsIHBhcmFtKTsKKwkJY2gtPnN0YXRlID0gU1RGQVhfTlVMTDsKKwkJY2gtPm5ld2NtZCA9IDA7CisJCWNoLT5uZXdtb2QgPSAwOworCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19GVElfUlVOLCAmY2gtPmJjaC5GbGFncyk7CisJCWJyZWFrOworCX0KKwl1ZGVsYXkoMTAwMCk7CisJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfUFNUUkVRLCAwLCAwLCBOVUxMKTsKKwl1ZGVsYXkoMTAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXR1cF9zYXJ0KHN0cnVjdCBpc2FyX2NoICpjaCkgeworCXU4IGRwcyA9IFNFVF9EUFMoY2gtPmRwYXRoKTsKKwl1OCBjdHJsLCBwYXJhbVsyXSA9IHswLCAwfTsKKworCXN3aXRjaCAoY2gtPmJjaC5zdGF0ZSkgeworCWNhc2UgSVNETl9QX05PTkU6CisJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1NBUlRDRkcsIFNNT0RFX0RJU0FCTEUsCisJCQkwLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9SQVc6CisJY2FzZSBJU0ROX1BfQl9MMkRUTUY6CisJCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX1NBUlRDRkcsIFNNT0RFX0JJTkFSWSwKKwkJCTIsIHBhcmFtKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9IRExDOgorCWNhc2UgSVNETl9QX0JfVDMwX0ZBWDoKKwkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfU0FSVENGRywgU01PREVfSERMQywKKwkJCTEsIHBhcmFtKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9NT0RFTV9BU1lOQzoKKwkJY3RybCA9IFNNT0RFX1YxNCB8IFNDVFJMX0hETUNfQk9USDsKKwkJcGFyYW1bMF0gPSBTX1AxX0NIU184OworCQlwYXJhbVsxXSA9IFNfUDJfQkZUX0RFRjsKKwkJc2VuZF9tYm94KGNoLT5pcywgZHBzIHwgSVNBUl9ISVNfU0FSVENGRywgY3RybCwgMiwgcGFyYW0pOworCQlicmVhazsKKwl9CisJdWRlbGF5KDEwMDApOworCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX0JTVFJFUSwgMCwgMCwgTlVMTCk7CisJdWRlbGF5KDEwMDApOworfQorCitzdGF0aWMgdm9pZAorc2V0dXBfaW9tMihzdHJ1Y3QgaXNhcl9jaCAqY2gpIHsKKwl1OCBkcHMgPSBTRVRfRFBTKGNoLT5kcGF0aCk7CisJdTggY21zYiA9IElPTV9DVFJMX0VOQSwgbXNnWzVdID0ge0lPTV9QMV9UWEQsIDAsIDAsIDAsIDB9OworCisJaWYgKGNoLT5iY2gubnIgPT0gMikgeworCQltc2dbMV0gPSAxOworCQltc2dbM10gPSAxOworCX0KKwlzd2l0Y2ggKGNoLT5iY2guc3RhdGUpIHsKKwljYXNlIElTRE5fUF9OT05FOgorCQljbXNiID0gMDsKKwkJLyogZHVtbXkgc2xvdCAqLworCQltc2dbMV0gPSBjaC0+ZHBhdGggKyAyOworCQltc2dbM10gPSBjaC0+ZHBhdGggKyAyOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX1JBVzoKKwljYXNlIElTRE5fUF9CX0hETEM6CisJCWJyZWFrOworCWNhc2UgSVNETl9QX0JfTU9ERU1fQVNZTkM6CisJY2FzZSBJU0ROX1BfQl9UMzBfRkFYOgorCQljbXNiIHw9IElPTV9DVFJMX1JDVjsKKwljYXNlIElTRE5fUF9CX0wyRFRNRjoKKwkJaWYgKHRlc3RfYml0KEZMR19EVE1GU0VORCwgJmNoLT5iY2guRmxhZ3MpKQorCQkJY21zYiB8PSBJT01fQ1RSTF9SQ1Y7CisJCWNtc2IgfD0gSU9NX0NUUkxfQUxBVzsKKwkJYnJlYWs7CisJfQorCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX0lPTTJDRkcsIGNtc2IsIDUsIG1zZyk7CisJdWRlbGF5KDEwMDApOworCXNlbmRfbWJveChjaC0+aXMsIGRwcyB8IElTQVJfSElTX0lPTTJSRVEsIDAsIDAsIE5VTEwpOworCXVkZWxheSgxMDAwKTsKK30KKworc3RhdGljIGludAorbW9kZWlzYXIoc3RydWN0IGlzYXJfY2ggKmNoLCB1MzIgYnByb3RvY29sKQoreworCS8qIEhlcmUgd2UgYXJlIHNlbGVjdGluZyB0aGUgYmVzdCBkYXRhcGF0aCBmb3IgcmVxdWVzdGVkIHByb3RvY29sICovCisJaWYgKGNoLT5iY2guc3RhdGUgPT0gSVNETl9QX05PTkUpIHsgLyogTmV3IFNldHVwICovCisJCXN3aXRjaCAoYnByb3RvY29sKSB7CisJCWNhc2UgSVNETl9QX05PTkU6IC8qIGluaXQgKi8KKwkJCWlmICghY2gtPmRwYXRoKQorCQkJCS8qIG5vIGluaXQgZm9yIGRwYXRoIDAgKi8KKwkJCQlyZXR1cm4gMDsKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSERMQywgJmNoLT5iY2guRmxhZ3MpOworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UUkFOU1BBUkVOVCwgJmNoLT5iY2guRmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgSVNETl9QX0JfUkFXOgorCQljYXNlIElTRE5fUF9CX0hETEM6CisJCQkvKiBiZXN0IGlzIGRhdGFwYXRoIDIgKi8KKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChJU0FSX0RQMl9VU0UsICZjaC0+aXMtPkZsYWdzKSkKKwkJCQljaC0+ZHBhdGggPSAyOworCQkJZWxzZSBpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVNBUl9EUDFfVVNFLAorCQkJICAgICZjaC0+aXMtPkZsYWdzKSkKKwkJCQljaC0+ZHBhdGggPSAxOworCQkJZWxzZSB7CisJCQkJcHJfaW5mbygibW9kZWlzYXIgYm90aCBwYXRoZXMgaW4gdXNlXG4iKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQkJaWYgKGJwcm90b2NvbCA9PSBJU0ROX1BfQl9IRExDKQorCQkJCXRlc3RfYW5kX3NldF9iaXQoRkxHX0hETEMsICZjaC0+YmNoLkZsYWdzKTsKKwkJCWVsc2UKKwkJCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19UUkFOU1BBUkVOVCwKKwkJCQkJJmNoLT5iY2guRmxhZ3MpOworCQkJYnJlYWs7CisJCWNhc2UgSVNETl9QX0JfTU9ERU1fQVNZTkM6CisJCWNhc2UgSVNETl9QX0JfVDMwX0ZBWDoKKwkJY2FzZSBJU0ROX1BfQl9MMkRUTUY6CisJCQkvKiBvbmx5IGRhdGFwYXRoIDEgKi8KKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChJU0FSX0RQMV9VU0UsICZjaC0+aXMtPkZsYWdzKSkKKwkJCQljaC0+ZHBhdGggPSAxOworCQkJZWxzZSB7CisJCQkJcHJfaW5mbygiJXM6IElTQVIgbW9kZWlzYXIgYW5hbG9nIGZ1bmN0aW9ucyIKKwkJCQkJIm9ubHkgd2l0aCBEUDFcbiIsIGNoLT5pcy0+bmFtZSk7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfaW5mbygiJXM6IHByb3RvY29sIG5vdCBrbm93biAleFxuIiwgY2gtPmlzLT5uYW1lLAorCQkJCWJwcm90b2NvbCk7CisJCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCQl9CisJfQorCXByX2RlYnVnKCIlczogSVNBUiBjaCVkIGRwJWQgcHJvdG9jb2wgJXgtPiV4XG4iLCBjaC0+aXMtPm5hbWUsCisJCWNoLT5iY2gubnIsIGNoLT5kcGF0aCwgY2gtPmJjaC5zdGF0ZSwgYnByb3RvY29sKTsKKwljaC0+YmNoLnN0YXRlID0gYnByb3RvY29sOworCXNldHVwX3B1bXAoY2gpOworCXNldHVwX2lvbTIoY2gpOworCXNldHVwX3NhcnQoY2gpOworCWlmIChjaC0+YmNoLnN0YXRlID09IElTRE5fUF9OT05FKSB7CisJCS8qIENsZWFyIHJlc291cmNlcyAqLworCQlpZiAoY2gtPmRwYXRoID09IDEpCisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoSVNBUl9EUDFfVVNFLCAmY2gtPmlzLT5GbGFncyk7CisJCWVsc2UgaWYgKGNoLT5kcGF0aCA9PSAyKQorCQkJdGVzdF9hbmRfY2xlYXJfYml0KElTQVJfRFAyX1VTRSwgJmNoLT5pcy0+RmxhZ3MpOworCQljaC0+ZHBhdGggPSAwOworCQljaC0+aXMtPmN0cmwoY2gtPmlzLT5odywgSFdfREVBQ1RfSU5ELCBjaC0+YmNoLm5yKTsKKwl9IGVsc2UKKwkJY2gtPmlzLT5jdHJsKGNoLT5pcy0+aHcsIEhXX0FDVElWQVRFX0lORCwgY2gtPmJjaC5ucik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitpc2FyX3B1bXBfY21kKHN0cnVjdCBpc2FyX2NoICpjaCwgdTMyIGNtZCwgdTggcGFyYSkKK3sKKwl1OCBkcHMgPSBTRVRfRFBTKGNoLT5kcGF0aCk7CisJdTggY3RybCA9IDAsIG5vbSA9IDAsIHAxID0gMDsKKworCXByX2RlYnVnKCIlczogaXNhcl9wdW1wX2NtZCAleC8leCBzdGF0ZSgleClcbiIsCisJCWNoLT5pcy0+bmFtZSwgY21kLCBwYXJhLCBjaC0+YmNoLnN0YXRlKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgSFdfTU9EX0ZUTToKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9SRUFEWSkgeworCQkJcDEgPSBwYXJhOworCQkJY3RybCA9IFBDVFJMX0NNRF9GVE07CisJCQlub20gPSAxOworCQkJY2gtPnN0YXRlID0gU1RGQVhfTElORTsKKwkJCWNoLT5jbWQgPSBjdHJsOworCQkJY2gtPm1vZCA9IHBhcmE7CisJCQljaC0+bmV3bW9kID0gMDsKKwkJCWNoLT5uZXdjbWQgPSAwOworCQkJY2gtPnRyeV9tb2QgPSAzOworCQl9IGVsc2UgaWYgKChjaC0+c3RhdGUgPT0gU1RGQVhfQUNUSVYpICYmCisJCSAgICAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlRNKSAmJiAoY2gtPm1vZCA9PSBwYXJhKSkKKwkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfQ09OTkVDVCk7CisJCWVsc2UgeworCQkJY2gtPm5ld21vZCA9IHBhcmE7CisJCQljaC0+bmV3Y21kID0gUENUUkxfQ01EX0ZUTTsKKwkJCW5vbSA9IDA7CisJCQljdHJsID0gUENUUkxfQ01EX0VTQzsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0VTQ0FQRTsKKwkJfQorCQlicmVhazsKKwljYXNlIEhXX01PRF9GVEg6CisJCWlmIChjaC0+c3RhdGUgPT0gU1RGQVhfUkVBRFkpIHsKKwkJCXAxID0gcGFyYTsKKwkJCWN0cmwgPSBQQ1RSTF9DTURfRlRIOworCQkJbm9tID0gMTsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0xJTkU7CisJCQljaC0+Y21kID0gY3RybDsKKwkJCWNoLT5tb2QgPSBwYXJhOworCQkJY2gtPm5ld21vZCA9IDA7CisJCQljaC0+bmV3Y21kID0gMDsKKwkJCWNoLT50cnlfbW9kID0gMzsKKwkJfSBlbHNlIGlmICgoY2gtPnN0YXRlID09IFNURkFYX0FDVElWKSAmJgorCQkgICAgKGNoLT5jbWQgPT0gUENUUkxfQ01EX0ZUSCkgJiYgKGNoLT5tb2QgPT0gcGFyYSkpCisJCQkJZGVsaXZlcl9zdGF0dXMoY2gsIEhXX01PRF9DT05ORUNUKTsKKwkJZWxzZSB7CisJCQljaC0+bmV3bW9kID0gcGFyYTsKKwkJCWNoLT5uZXdjbWQgPSBQQ1RSTF9DTURfRlRIOworCQkJbm9tID0gMDsKKwkJCWN0cmwgPSBQQ1RSTF9DTURfRVNDOworCQkJY2gtPnN0YXRlID0gU1RGQVhfRVNDQVBFOworCQl9CisJCWJyZWFrOworCWNhc2UgSFdfTU9EX0ZSTToKKwkJaWYgKGNoLT5zdGF0ZSA9PSBTVEZBWF9SRUFEWSkgeworCQkJcDEgPSBwYXJhOworCQkJY3RybCA9IFBDVFJMX0NNRF9GUk07CisJCQlub20gPSAxOworCQkJY2gtPnN0YXRlID0gU1RGQVhfTElORTsKKwkJCWNoLT5jbWQgPSBjdHJsOworCQkJY2gtPm1vZCA9IHBhcmE7CisJCQljaC0+bmV3bW9kID0gMDsKKwkJCWNoLT5uZXdjbWQgPSAwOworCQkJY2gtPnRyeV9tb2QgPSAzOworCQl9IGVsc2UgaWYgKChjaC0+c3RhdGUgPT0gU1RGQVhfQUNUSVYpICYmCisJCSAgICAoY2gtPmNtZCA9PSBQQ1RSTF9DTURfRlJNKSAmJiAoY2gtPm1vZCA9PSBwYXJhKSkKKwkJCWRlbGl2ZXJfc3RhdHVzKGNoLCBIV19NT0RfQ09OTkVDVCk7CisJCWVsc2UgeworCQkJY2gtPm5ld21vZCA9IHBhcmE7CisJCQljaC0+bmV3Y21kID0gUENUUkxfQ01EX0ZSTTsKKwkJCW5vbSA9IDA7CisJCQljdHJsID0gUENUUkxfQ01EX0VTQzsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0VTQ0FQRTsKKwkJfQorCQlicmVhazsKKwljYXNlIEhXX01PRF9GUkg6CisJCWlmIChjaC0+c3RhdGUgPT0gU1RGQVhfUkVBRFkpIHsKKwkJCXAxID0gcGFyYTsKKwkJCWN0cmwgPSBQQ1RSTF9DTURfRlJIOworCQkJbm9tID0gMTsKKwkJCWNoLT5zdGF0ZSA9IFNURkFYX0xJTkU7CisJCQljaC0+Y21kID0gY3RybDsKKwkJCWNoLT5tb2QgPSBwYXJhOworCQkJY2gtPm5ld21vZCA9IDA7CisJCQljaC0+bmV3Y21kID0gMDsKKwkJCWNoLT50cnlfbW9kID0gMzsKKwkJfSBlbHNlIGlmICgoY2gtPnN0YXRlID09IFNURkFYX0FDVElWKSAmJgorCQkgICAgKGNoLT5jbWQgPT0gUENUUkxfQ01EX0ZSSCkgJiYgKGNoLT5tb2QgPT0gcGFyYSkpCisJCQlkZWxpdmVyX3N0YXR1cyhjaCwgSFdfTU9EX0NPTk5FQ1QpOworCQllbHNlIHsKKwkJCWNoLT5uZXdtb2QgPSBwYXJhOworCQkJY2gtPm5ld2NtZCA9IFBDVFJMX0NNRF9GUkg7CisJCQlub20gPSAwOworCQkJY3RybCA9IFBDVFJMX0NNRF9FU0M7CisJCQljaC0+c3RhdGUgPSBTVEZBWF9FU0NBUEU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQ1RSTF9DTURfVERUTUY6CisJCXAxID0gcGFyYTsKKwkJbm9tID0gMTsKKwkJY3RybCA9IFBDVFJMX0NNRF9URFRNRjsKKwkJYnJlYWs7CisJfQorCWlmIChjdHJsKQorCQlzZW5kX21ib3goY2gtPmlzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwgY3RybCwgbm9tLCAmcDEpOworfQorCitzdGF0aWMgdm9pZAoraXNhcl9zZXR1cChzdHJ1Y3QgaXNhcl9odyAqaXNhcikKK3sKKwl1OCBtc2c7CisJaW50IGk7CisKKwkvKiBEcGF0aCAxLCAyICovCisJbXNnID0gNjE7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkvKiBCdWZmZXIgQ29uZmlnICovCisJCXNlbmRfbWJveChpc2FyLCAoaSA/IElTQVJfSElTX0RQUzIgOiBJU0FSX0hJU19EUFMxKSB8CisJCQlJU0FSX0hJU19QMTJDRkcsIDQsIDEsICZtc2cpOworCQlpc2FyLT5jaFtpXS5tbWwgPSBtc2c7CisJCWlzYXItPmNoW2ldLmJjaC5zdGF0ZSA9IDA7CisJCWlzYXItPmNoW2ldLmRwYXRoID0gaSArIDE7CisJCW1vZGVpc2FyKCZpc2FyLT5jaFtpXSwgSVNETl9QX05PTkUpOworCX0KK30KKworc3RhdGljIGludAoraXNhcl9sMmwxKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgYmNoYW5uZWwsIGNoKTsKKwlzdHJ1Y3QgaXNhcl9jaCAqaWNoID0gY29udGFpbmVyX29mKGJjaCwgc3RydWN0IGlzYXJfY2gsIGJjaCk7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IG1JU0ROaGVhZCAqaGggPSBtSVNETl9IRUFEX1Aoc2tiKTsKKwl1MzIgaWQsICp2YWw7CisJdV9sb25nIGZsYWdzOworCisJc3dpdGNoIChoaC0+cHJpbSkgeworCWNhc2UgUEhfREFUQV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQlyZXQgPSBiY2hhbm5lbF9zZW5kZGF0YShiY2gsIHNrYik7CisJCWlmIChyZXQgPiAwKSB7IC8qIGRpcmVjdCBUWCAqLworCQkJaWQgPSBoaC0+aWQ7IC8qIHNrYiBjYW4gYmUgZnJlZWQgKi8KKwkJCXJldCA9IDA7CisJCQlpc2FyX2ZpbGxfZmlmbyhpY2gpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpY2gtPmlzLT5od2xvY2ssIGZsYWdzKTsKKwkJCWlmICghdGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmYmNoLT5GbGFncykpCisJCQkJcXVldWVfY2hfZnJhbWUoY2gsIFBIX0RBVEFfQ05GLCBpZCwgTlVMTCk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpY2gtPmlzLT5od2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIFBIX0FDVElWQVRFX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoaWNoLT5pcy0+aHdsb2NrLCBmbGFncyk7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpCisJCQlyZXQgPSBtb2RlaXNhcihpY2gsIGNoLT5wcm90b2NvbCk7CisJCWVsc2UKKwkJCXJldCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaWNoLT5pcy0+aHdsb2NrLCBmbGFncyk7CisJCWlmICghcmV0KQorCQkJX3F1ZXVlX2RhdGEoY2gsIFBIX0FDVElWQVRFX0lORCwgTUlTRE5fSURfQU5ZLCAwLAorCQkJCU5VTEwsIEdGUF9LRVJORUwpOworCQlicmVhazsKKwljYXNlIFBIX0RFQUNUSVZBVEVfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZShpY2gtPmlzLT5od2xvY2ssIGZsYWdzKTsKKwkJbUlTRE5fY2xlYXJfYmNoYW5uZWwoYmNoKTsKKwkJbW9kZWlzYXIoaWNoLCBJU0ROX1BfTk9ORSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaWNoLT5pcy0+aHdsb2NrLCBmbGFncyk7CisJCV9xdWV1ZV9kYXRhKGNoLCBQSF9ERUFDVElWQVRFX0lORCwgTUlTRE5fSURfQU5ZLCAwLAorCQkJTlVMTCwgR0ZQX0tFUk5FTCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgUEhfQ09OVFJPTF9SRVE6CisJCXZhbCA9ICh1MzIgKilza2ItPmRhdGE7CisJCXByX2RlYnVnKCIlczogUEhfQ09OVFJPTCB8IFJFUVVFU1QgJXgvJXhcbiIsIGljaC0+aXMtPm5hbWUsCisJCQloaC0+aWQsICp2YWwpOworCQlpZiAoKGhoLT5pZCA9PSAwKSAmJiAoKCp2YWwgJiB+RFRNRl9UT05FX01BU0spID09CisJCSAgICBEVE1GX1RPTkVfVkFMKSkgeworCQkJaWYgKGJjaC0+c3RhdGUgPT0gSVNETl9QX0JfTDJEVE1GKSB7CisJCQkJY2hhciB0dCA9ICp2YWwgJiBEVE1GX1RPTkVfTUFTSzsKKworCQkJCWlmICh0dCA9PSAnKicpCisJCQkJCXR0ID0gMHgxZTsKKwkJCQllbHNlIGlmICh0dCA9PSAnIycpCisJCQkJCXR0ID0gMHgxZjsKKwkJCQllbHNlIGlmICh0dCA+ICc5JykKKwkJCQkJdHQgLT0gNzsKKwkJCQl0dCAmPSAweDFmOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQkJCWlzYXJfcHVtcF9jbWQoaWNoLCBQQ1RSTF9DTURfVERUTUYsIHR0KTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQkJfSBlbHNlIHsKKwkJCQlwcl9pbmZvKCIlczogRFRNRiBzZW5kIHdyb25nIHByb3RvY29sICV4XG4iLAorCQkJCQlfX2Z1bmNfXywgYmNoLT5zdGF0ZSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZSBpZiAoKGhoLT5pZCA9PSBIV19NT0RfRlJNKSB8fCAoaGgtPmlkID09IEhXX01PRF9GUkgpIHx8CisJCSAgICAoaGgtPmlkID09IEhXX01PRF9GVE0pIHx8IChoaC0+aWQgPT0gSFdfTU9EX0ZUSCkpIHsKKwkJCWZvciAoaWQgPSAwOyBpZCA8IEZBWE1PRENOVDsgaWQrKykKKwkJCQlpZiAoZmF4bW9kdWxhdGlvbltpZF0gPT0gKnZhbCkKKwkJCQkJYnJlYWs7CisJCQlpZiAoKEZBWE1PRENOVCA+IGlkKSAmJgorCQkJICAgIHRlc3RfYml0KEZMR19JTklUSUFMSVpFRCwgJmJjaC0+RmxhZ3MpKSB7CisJCQkJcHJfZGVidWcoIiVzOiBpc2FyOiBuZXcgbW9kXG4iLCBpY2gtPmlzLT5uYW1lKTsKKwkJCQlpc2FyX3B1bXBfY21kKGljaCwgaGgtPmlkLCAqdmFsKTsKKwkJCQlyZXQgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlwcl9pbmZvKCIlczogd3JvbmcgbW9kdWxhdGlvblxuIiwKKwkJCQkJaWNoLT5pcy0+bmFtZSk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCX0KKwkJfSBlbHNlIGlmIChoaC0+aWQgPT0gSFdfTU9EX0xBU1REQVRBKQorCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfRExFRVRYLCAmYmNoLT5GbGFncyk7CisJCWVsc2UgeworCQkJcHJfaW5mbygiJXM6IHVua25vd24gUEhfQ09OVFJPTF9SRVEgJXhcbiIsCisJCQkJaWNoLT5pcy0+bmFtZSwgaGgtPmlkKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogJXMgdW5rbm93biBwcmltKCV4LCV4KVxuIiwKKwkJCWljaC0+aXMtPm5hbWUsIF9fZnVuY19fLCBoaC0+cHJpbSwgaGgtPmlkKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJaWYgKCFyZXQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitjaGFubmVsX2JjdHJsKHN0cnVjdCBiY2hhbm5lbCAqYmNoLCBzdHJ1Y3QgbUlTRE5fY3RybF9yZXEgKmNxKQoreworCWludAlyZXQgPSAwOworCisJc3dpdGNoIChjcS0+b3ApIHsKKwljYXNlIE1JU0ROX0NUUkxfR0VUT1A6CisJCWNxLT5vcCA9IDA7CisJCWJyZWFrOworCS8qIE5vdGhpbmcgaW1wbGVtZW50ZWQgeWV0ICovCisJY2FzZSBNSVNETl9DVFJMX0ZJTExfRU1QVFk6CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6IHVua25vd24gT3AgJXhcbiIsIF9fZnVuY19fLCBjcS0+b3ApOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAoraXNhcl9iY3RybChzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgdTMyIGNtZCwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgYmNoYW5uZWwsIGNoKTsKKwlzdHJ1Y3QgaXNhcl9jaCAqaWNoID0gY29udGFpbmVyX29mKGJjaCwgc3RydWN0IGlzYXJfY2gsIGJjaCk7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdV9sb25nIGZsYWdzOworCisJcHJfZGVidWcoIiVzOiAlcyBjbWQ6JXggJXBcbiIsIGljaC0+aXMtPm5hbWUsIF9fZnVuY19fLCBjbWQsIGFyZyk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENMT1NFX0NIQU5ORUw6CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfT1BFTiwgJmJjaC0+RmxhZ3MpOworCQlpZiAodGVzdF9iaXQoRkxHX0FDVElWRSwgJmJjaC0+RmxhZ3MpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZShpY2gtPmlzLT5od2xvY2ssIGZsYWdzKTsKKwkJCW1JU0ROX2ZyZWViY2hhbm5lbChiY2gpOworCQkJbW9kZWlzYXIoaWNoLCBJU0ROX1BfTk9ORSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGljaC0+aXMtPmh3bG9jaywgZmxhZ3MpOworCQl9IGVsc2UgeworCQkJc2tiX3F1ZXVlX3B1cmdlKCZiY2gtPnJxdWV1ZSk7CisJCQliY2gtPnJjb3VudCA9IDA7CisJCX0KKwkJY2gtPnByb3RvY29sID0gSVNETl9QX05PTkU7CisJCWNoLT5wZWVyID0gTlVMTDsKKwkJbW9kdWxlX3B1dChpY2gtPmlzLT5vd25lcik7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgQ09OVFJPTF9DSEFOTkVMOgorCQlyZXQgPSBjaGFubmVsX2JjdHJsKGJjaCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gcHJpbSgleClcbiIsCisJCQlpY2gtPmlzLT5uYW1lLCBfX2Z1bmNfXywgY21kKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfaXNhcihzdHJ1Y3QgaXNhcl9odyAqaXNhcikKK3sKKwltb2RlaXNhcigmaXNhci0+Y2hbMF0sIElTRE5fUF9OT05FKTsKKwltb2RlaXNhcigmaXNhci0+Y2hbMV0sIElTRE5fUF9OT05FKTsKKwlkZWxfdGltZXIoJmlzYXItPmNoWzBdLmZ0aW1lcik7CisJZGVsX3RpbWVyKCZpc2FyLT5jaFsxXS5mdGltZXIpOworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSU5JVElBTElaRUQsICZpc2FyLT5jaFswXS5iY2guRmxhZ3MpOworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfSU5JVElBTElaRUQsICZpc2FyLT5jaFsxXS5iY2guRmxhZ3MpOworfQorCitzdGF0aWMgaW50Citpbml0X2lzYXIoc3RydWN0IGlzYXJfaHcgKmlzYXIpCit7CisJaW50CWNudCA9IDM7CisKKwl3aGlsZSAoY250LS0pIHsKKwkJaXNhci0+dmVyc2lvbiA9IElTQVJWZXJzaW9uKGlzYXIpOworCQlpZiAoaXNhci0+Y2hbMF0uYmNoLmRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBUZXN0aW5nIHZlcnNpb24gJWQgKCVkIHRpbWUpXG4iLAorCQkJCWlzYXItPm5hbWUsIGlzYXItPnZlcnNpb24sIDMgLSBjbnQpOworCQlpZiAoaXNhci0+dmVyc2lvbiA9PSAxKQorCQkJYnJlYWs7CisJCWlzYXItPmN0cmwoaXNhci0+aHcsIEhXX1JFU0VUX1JFUSwgMCk7CisJfQorCWlmIChpc2FyLT52ZXJzaW9uICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCWlzYXItPmNoWzBdLmZ0aW1lci5mdW5jdGlvbiA9ICZmdGltZXJfaGFuZGxlcjsKKwlpc2FyLT5jaFswXS5mdGltZXIuZGF0YSA9IChsb25nKSZpc2FyLT5jaFswXTsKKwlpbml0X3RpbWVyKCZpc2FyLT5jaFswXS5mdGltZXIpOworCXRlc3RfYW5kX3NldF9iaXQoRkxHX0lOSVRJQUxJWkVELCAmaXNhci0+Y2hbMF0uYmNoLkZsYWdzKTsKKwlpc2FyLT5jaFsxXS5mdGltZXIuZnVuY3Rpb24gPSAmZnRpbWVyX2hhbmRsZXI7CisJaXNhci0+Y2hbMV0uZnRpbWVyLmRhdGEgPSAobG9uZykmaXNhci0+Y2hbMV07CisJaW5pdF90aW1lcigmaXNhci0+Y2hbMV0uZnRpbWVyKTsKKwl0ZXN0X2FuZF9zZXRfYml0KEZMR19JTklUSUFMSVpFRCwgJmlzYXItPmNoWzFdLmJjaC5GbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2lzYXJfb3BlbihzdHJ1Y3QgaXNhcl9odyAqaXNhciwgc3RydWN0IGNoYW5uZWxfcmVxICpycSkKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwJCSpiY2g7CisKKwlpZiAocnEtPmFkci5jaGFubmVsID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmNoID0gJmlzYXItPmNoW3JxLT5hZHIuY2hhbm5lbCAtIDFdLmJjaDsKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChGTEdfT1BFTiwgJmJjaC0+RmxhZ3MpKQorCQlyZXR1cm4gLUVCVVNZOyAvKiBiLWNoYW5uZWwgY2FuIGJlIG9ubHkgb3BlbiBvbmNlICovCisJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19GSUxMRU1QVFksICZiY2gtPkZsYWdzKTsKKwliY2gtPmNoLnByb3RvY29sID0gcnEtPnByb3RvY29sOworCXJxLT5jaCA9ICZiY2gtPmNoOworCXJldHVybiAwOworfQorCit1MzIKK21JU0ROaXNhcl9pbml0KHN0cnVjdCBpc2FyX2h3ICppc2FyLCB2b2lkICpodykKK3sKKwl1MzIgcmV0LCBpOworCisJaXNhci0+aHcgPSBodzsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlzYXItPmNoW2ldLmJjaC5uciA9IGkgKyAxOworCQltSVNETl9pbml0YmNoYW5uZWwoJmlzYXItPmNoW2ldLmJjaCwgTUFYX0RBVEFfTUVNKTsKKwkJaXNhci0+Y2hbaV0uYmNoLmNoLm5yID0gaSArIDE7CisJCWlzYXItPmNoW2ldLmJjaC5jaC5zZW5kID0gJmlzYXJfbDJsMTsKKwkJaXNhci0+Y2hbaV0uYmNoLmNoLmN0cmwgPSBpc2FyX2JjdHJsOworCQlpc2FyLT5jaFtpXS5iY2guaHcgPSBodzsKKwkJaXNhci0+Y2hbaV0uaXMgPSBpc2FyOworCX0KKworCWlzYXItPmluaXQgPSAmaW5pdF9pc2FyOworCWlzYXItPnJlbGVhc2UgPSAmZnJlZV9pc2FyOworCWlzYXItPmZpcm13YXJlID0gJmxvYWRfZmlybXdhcmU7CisJaXNhci0+b3BlbiA9ICZpc2FyX29wZW47CisKKwlyZXQgPQkoMSA8PCAoSVNETl9QX0JfUkFXICYgSVNETl9QX0JfTUFTSykpIHwKKwkJKDEgPDwgKElTRE5fUF9CX0hETEMgJiBJU0ROX1BfQl9NQVNLKSkgfAorCQkoMSA8PCAoSVNETl9QX0JfTDJEVE1GICYgSVNETl9QX0JfTUFTSykpIHwKKwkJKDEgPDwgKElTRE5fUF9CX01PREVNX0FTWU5DICYgSVNETl9QX0JfTUFTSykpIHwKKwkJKDEgPDwgKElTRE5fUF9CX1QzMF9GQVggJiBJU0ROX1BfQl9NQVNLKSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChtSVNETmlzYXJfaW5pdCk7CisKK3N0YXRpYyBpbnQgaXNhcl9tb2RfaW5pdCh2b2lkKQoreworCXByX25vdGljZSgibUlTRE46IElTQVIgZHJpdmVyIFJldi4gJXNcbiIsIElTQVJfUkVWKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXNhcl9tb2RfY2xlYW51cCh2b2lkKQoreworCXByX25vdGljZSgibUlTRE46IElTQVIgbW9kdWxlIHVubG9hZGVkXG4iKTsKK30KK21vZHVsZV9pbml0KGlzYXJfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoaXNhcl9tb2RfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbmV0amV0LmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbmV0amV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxYjE2NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9uZXRqZXQuYwpAQCAtMCwwICsxLDExNTYgQEAKKy8qCisgKiBORVRKZXQgbUlTRE4gZHJpdmVyCisgKgorICogQXV0aG9yICAgICAgIEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIENvcHlyaWdodCAyMDA5ICBieSBLYXJzdGVuIEtlaWwgPGtlaWxAaXNkbjRsaW51eC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbUlTRE5ody5oPgorI2luY2x1ZGUgImlwYWMuaCIKKyNpbmNsdWRlICJpb2hlbHBlci5oIgorI2luY2x1ZGUgIm5ldGpldC5oIgorI2luY2x1ZGUgPGxpbnV4L2lzZG4vaGRsYy5oPgorCisjZGVmaW5lIE5FVEpFVF9SRVYJIjIuMCIKKworZW51bSBual90eXBlcyB7CisJTkVUSkVUX1NfVEozMDAsCisJTkVUSkVUX1NfVEozMjAsCisJRU5URVJOT1dfX1RKMzIwLAorfTsKKworc3RydWN0IHRpZ2VyX2RtYSB7CisJc2l6ZV90CQlzaXplOworCXUzMgkJKnN0YXJ0OworCWludAkJaWR4OworCXUzMgkJZG1hc3RhcnQ7CisJdTMyCQlkbWFpcnE7CisJdTMyCQlkbWFlbmQ7CisJdTMyCQlkbWFjdXI7Cit9OworCitzdHJ1Y3QgdGlnZXJfaHc7CisKK3N0cnVjdCB0aWdlcl9jaCB7CisJc3RydWN0IGJjaGFubmVsCQliY2g7CisJc3RydWN0IHRpZ2VyX2h3CQkqbmo7CisJaW50CQkJaWR4OworCWludAkJCWZyZWU7CisJaW50CQkJbGFzdHJ4OworCXUxNgkJCXJ4c3RhdGU7CisJdTE2CQkJdHhzdGF0ZTsKKwlzdHJ1Y3QgaXNkbmhkbGNfdmFycwloc2VuZDsKKwlzdHJ1Y3QgaXNkbmhkbGNfdmFycwlocmVjdjsKKwl1OAkJCSpoc2J1ZjsKKwl1OAkJCSpocmJ1ZjsKK307CisKKyNkZWZpbmUgVFhfSU5JVAkJMHgwMDAxCisjZGVmaW5lIFRYX0lETEUJCTB4MDAwMgorI2RlZmluZSBUWF9SVU4JCTB4MDAwNAorI2RlZmluZSBUWF9VTkRFUlJVTgkweDAxMDAKKyNkZWZpbmUgUlhfT1ZFUlJVTgkweDAxMDAKKworI2RlZmluZSBMT0dfU0laRQk2NAorCitzdHJ1Y3QgdGlnZXJfaHcgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CisJY2hhcgkJCW5hbWVbTUlTRE5fTUFYX0lETEVOXTsKKwllbnVtIG5qX3R5cGVzCQl0eXA7CisJaW50CQkJaXJxOworCXUzMgkJCWlycWNudDsKKwl1MzIJCQliYXNlOworCXNpemVfdAkJCWJhc2VfczsKKwlkbWFfYWRkcl90CQlkbWE7CisJdm9pZAkJCSpkbWFfcDsKKwlzcGlubG9ja190CQlsb2NrOwkvKiBsb2NrIEhXICovCisJc3RydWN0IGlzYWNfaHcJCWlzYWM7CisJc3RydWN0IHRpZ2VyX2RtYQlzZW5kOworCXN0cnVjdCB0aWdlcl9kbWEJcmVjdjsKKwlzdHJ1Y3QgdGlnZXJfY2gJCWJjWzJdOworCXU4CQkJY3RybHJlZzsKKwl1OAkJCWRtYWN0cmw7CisJdTgJCQlhdXhkOworCXU4CQkJbGFzdF9pczA7CisJdTgJCQlpcnFtYXNrMDsKKwljaGFyCQkJbG9nW0xPR19TSVpFXTsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoQ2FyZHMpOworc3RhdGljIERFRklORV9SV0xPQ0soY2FyZF9sb2NrKTsgLyogcHJvdGVjdCBDYXJkcyAqLworc3RhdGljIHUzMiBkZWJ1ZzsKK3N0YXRpYyBpbnQgbmpfY250OworCitzdGF0aWMgdm9pZAorX3NldF9kZWJ1ZyhzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQpCit7CisJY2FyZC0+aXNhYy5kY2guZGVidWcgPSBkZWJ1ZzsKKwljYXJkLT5iY1swXS5iY2guZGVidWcgPSBkZWJ1ZzsKKwljYXJkLT5iY1sxXS5iY2guZGVidWcgPSBkZWJ1ZzsKK30KKworc3RhdGljIGludAorc2V0X2RlYnVnKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQ7CisKKwlyZXQgPSBwYXJhbV9zZXRfdWludCh2YWwsIGtwKTsKKwlpZiAoIXJldCkgeworCQlyZWFkX2xvY2soJmNhcmRfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FyZCwgJkNhcmRzLCBsaXN0KQorCQkJX3NldF9kZWJ1ZyhjYXJkKTsKKwkJcmVhZF91bmxvY2soJmNhcmRfbG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gS2VpbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oTkVUSkVUX1JFVik7Cittb2R1bGVfcGFyYW1fY2FsbChkZWJ1Zywgc2V0X2RlYnVnLCBwYXJhbV9nZXRfdWludCwgJmRlYnVnLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiTmV0amV0IGRlYnVnIG1hc2siKTsKKworc3RhdGljIHZvaWQKK25qX2Rpc2FibGVfaHdpcnEoc3RydWN0IHRpZ2VyX2h3ICpjYXJkKQoreworCW91dGIoMCwgY2FyZC0+YmFzZSArIE5KX0lSUU1BU0swKTsKKwlvdXRiKDAsIGNhcmQtPmJhc2UgKyBOSl9JUlFNQVNLMSk7Cit9CisKKworc3RhdGljIHU4CitSZWFkSVNBQ19uaih2b2lkICpwLCB1OCBvZmZzZXQpCit7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkID0gcDsKKwl1OCByZXQ7CisKKwljYXJkLT5hdXhkICY9IDB4ZmM7CisJY2FyZC0+YXV4ZCB8PSAob2Zmc2V0ID4+IDQpICYgMzsKKwlvdXRiKGNhcmQtPmF1eGQsIGNhcmQtPmJhc2UgKyBOSl9BVVhEQVRBKTsKKwlyZXQgPSBpbmIoY2FyZC0+YmFzZSArIE5KX0lTQUNfT0ZGICsgKChvZmZzZXQgJiAweDBmKSA8PCAyKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlSVNBQ19uaih2b2lkICpwLCB1OCBvZmZzZXQsIHU4IHZhbHVlKQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IHA7CisKKwljYXJkLT5hdXhkICY9IDB4ZmM7CisJY2FyZC0+YXV4ZCB8PSAob2Zmc2V0ID4+IDQpICYgMzsKKwlvdXRiKGNhcmQtPmF1eGQsIGNhcmQtPmJhc2UgKyBOSl9BVVhEQVRBKTsKKwlvdXRiKHZhbHVlLCBjYXJkLT5iYXNlICsgTkpfSVNBQ19PRkYgKyAoKG9mZnNldCAmIDB4MGYpIDw8IDIpKTsKK30KKworc3RhdGljIHZvaWQKK1JlYWRGaUZvSVNBQ19uaih2b2lkICpwLCB1OCBvZmZzZXQsIHU4ICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBwOworCisJY2FyZC0+YXV4ZCAmPSAweGZjOworCW91dGIoY2FyZC0+YXV4ZCwgY2FyZC0+YmFzZSArIE5KX0FVWERBVEEpOworCWluc2IoY2FyZC0+YmFzZSArIE5KX0lTQUNfT0ZGLCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK1dyaXRlRmlGb0lTQUNfbmoodm9pZCAqcCwgdTggb2Zmc2V0LCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkID0gcDsKKworCWNhcmQtPmF1eGQgJj0gMHhmYzsKKwlvdXRiKGNhcmQtPmF1eGQsIGNhcmQtPmJhc2UgKyBOSl9BVVhEQVRBKTsKKwlvdXRzYihjYXJkLT5iYXNlICsgTkpfSVNBQ19PRkYsIGRhdGEsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorZmlsbF9tZW0oc3RydWN0IHRpZ2VyX2NoICpiYywgdTMyIGlkeCwgdTMyIGNudCwgdTMyIGZpbGwpCit7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkID0gYmMtPmJjaC5odzsKKwl1MzIgbWFzayA9IDB4ZmYsIHZhbDsKKworCXByX2RlYnVnKCIlczogQiUxZCBmaWxsICUwMnggbGVuICVkIGlkeCAlZC8lZFxuIiwgY2FyZC0+bmFtZSwKKwkJYmMtPmJjaC5uciwgZmlsbCwgY250LCBpZHgsIGNhcmQtPnNlbmQuaWR4KTsKKwlpZiAoYmMtPmJjaC5uciAmIDIpIHsKKwkJZmlsbCAgPDw9IDg7CisJCW1hc2sgPDw9IDg7CisJfQorCW1hc2sgXj0gMHhmZmZmZmZmZjsKKwl3aGlsZSAoY250LS0pIHsKKwkJdmFsID0gY2FyZC0+c2VuZC5zdGFydFtpZHhdOworCQl2YWwgJj0gbWFzazsKKwkJdmFsIHw9IGZpbGw7CisJCWNhcmQtPnNlbmQuc3RhcnRbaWR4KytdID0gdmFsOworCQlpZiAoaWR4ID49IGNhcmQtPnNlbmQuc2l6ZSkKKwkJCWlkeCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50Cittb2RlX3RpZ2VyKHN0cnVjdCB0aWdlcl9jaCAqYmMsIHUzMiBwcm90b2NvbCkKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBiYy0+YmNoLmh3OworCisJcHJfZGVidWcoIiVzOiBCJTFkIHByb3RvY29sICV4LS0+JXhcbiIsIGNhcmQtPm5hbWUsCisJCWJjLT5iY2gubnIsIGJjLT5iY2guc3RhdGUsIHByb3RvY29sKTsKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJY2FzZSBJU0ROX1BfTk9ORToKKwkJaWYgKGJjLT5iY2guc3RhdGUgPT0gSVNETl9QX05PTkUpCisJCQlicmVhazsKKwkJZmlsbF9tZW0oYmMsIDAsIGNhcmQtPnNlbmQuc2l6ZSwgMHhmZik7CisJCWJjLT5iY2guc3RhdGUgPSBwcm90b2NvbDsKKwkJLyogb25seSBzdG9wIGRtYSBhbmQgaW50ZXJydXB0cyBpZiBib3RoIGNoYW5uZWxzIE5VTEwgKi8KKwkJaWYgKChjYXJkLT5iY1swXS5iY2guc3RhdGUgPT0gSVNETl9QX05PTkUpICYmCisJCSAgICAoY2FyZC0+YmNbMV0uYmNoLnN0YXRlID09IElTRE5fUF9OT05FKSkgeworCQkJY2FyZC0+ZG1hY3RybCA9IDA7CisJCQlvdXRiKGNhcmQtPmRtYWN0cmwsIGNhcmQtPmJhc2UgKyBOSl9ETUFDVFJMKTsKKwkJCW91dGIoMCwgY2FyZC0+YmFzZSArIE5KX0lSUU1BU0swKTsKKwkJfQorCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0hETEMsICZiYy0+YmNoLkZsYWdzKTsKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjLT5iY2guRmxhZ3MpOworCQliYy0+dHhzdGF0ZSA9IDA7CisJCWJjLT5yeHN0YXRlID0gMDsKKwkJYmMtPmxhc3RyeCA9IC0xOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX1JBVzoKKwkJdGVzdF9hbmRfc2V0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiYy0+YmNoLkZsYWdzKTsKKwkJYmMtPmJjaC5zdGF0ZSA9IHByb3RvY29sOworCQliYy0+aWR4ID0gMDsKKwkJYmMtPmZyZWUgPSBjYXJkLT5zZW5kLnNpemUvMjsKKwkJYmMtPnJ4c3RhdGUgPSAwOworCQliYy0+dHhzdGF0ZSA9IFRYX0lOSVQgfCBUWF9JRExFOworCQliYy0+bGFzdHJ4ID0gLTE7CisJCWlmICghY2FyZC0+ZG1hY3RybCkgeworCQkJY2FyZC0+ZG1hY3RybCA9IDE7CisJCQlvdXRiKGNhcmQtPmRtYWN0cmwsIGNhcmQtPmJhc2UgKyBOSl9ETUFDVFJMKTsKKwkJCW91dGIoMHgwZiwgY2FyZC0+YmFzZSArIE5KX0lSUU1BU0swKTsKKwkJfQorCQlicmVhazsKKwljYXNlIElTRE5fUF9CX0hETEM6CisJCXRlc3RfYW5kX3NldF9iaXQoRkxHX0hETEMsICZiYy0+YmNoLkZsYWdzKTsKKwkJYmMtPmJjaC5zdGF0ZSA9IHByb3RvY29sOworCQliYy0+aWR4ID0gMDsKKwkJYmMtPmZyZWUgPSBjYXJkLT5zZW5kLnNpemUvMjsKKwkJYmMtPnJ4c3RhdGUgPSAwOworCQliYy0+dHhzdGF0ZSA9IFRYX0lOSVQgfCBUWF9JRExFOworCQlpc2RuaGRsY19yY3ZfaW5pdCgmYmMtPmhyZWN2LCAwKTsKKwkJaXNkbmhkbGNfb3V0X2luaXQoJmJjLT5oc2VuZCwgMCk7CisJCWJjLT5sYXN0cnggPSAtMTsKKwkJaWYgKCFjYXJkLT5kbWFjdHJsKSB7CisJCQljYXJkLT5kbWFjdHJsID0gMTsKKwkJCW91dGIoY2FyZC0+ZG1hY3RybCwgY2FyZC0+YmFzZSArIE5KX0RNQUNUUkwpOworCQkJb3V0YigweDBmLCBjYXJkLT5iYXNlICsgTkpfSVJRTUFTSzApOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyBwcm90b2NvbCAleCBub3QgaGFuZGxlZFxuIiwgY2FyZC0+bmFtZSwKKwkJCV9fZnVuY19fLCBwcm90b2NvbCk7CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJfQorCWNhcmQtPnNlbmQuZG1hY3VyID0gaW5sKGNhcmQtPmJhc2UgKyBOSl9ETUFfUkVBRF9BRFIpOworCWNhcmQtPnJlY3YuZG1hY3VyID0gaW5sKGNhcmQtPmJhc2UgKyBOSl9ETUFfV1JJVEVfQURSKTsKKwljYXJkLT5zZW5kLmlkeCA9IChjYXJkLT5zZW5kLmRtYWN1ciAtIGNhcmQtPnNlbmQuZG1hc3RhcnQpID4+IDI7CisJY2FyZC0+cmVjdi5pZHggPSAoY2FyZC0+cmVjdi5kbWFjdXIgLSBjYXJkLT5yZWN2LmRtYXN0YXJ0KSA+PiAyOworCXByX2RlYnVnKCIlczogJXMgY3RybCAleCBpcnEgICUwMngvJTAyeCBpZHggJWQvJWRcbiIsCisJCWNhcmQtPm5hbWUsIF9fZnVuY19fLAorCQlpbmIoY2FyZC0+YmFzZSArIE5KX0RNQUNUUkwpLAorCQlpbmIoY2FyZC0+YmFzZSArIE5KX0lSUU1BU0swKSwKKwkJaW5iKGNhcmQtPmJhc2UgKyBOSl9JUlFTVEFUMCksCisJCWNhcmQtPnNlbmQuaWR4LAorCQljYXJkLT5yZWN2LmlkeCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitual9yZXNldChzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQpCit7CisJb3V0YigweGZmLCBjYXJkLT5iYXNlICsgTkpfQ1RSTCk7IC8qIFJlc2V0IE9uICovCisJbWRlbGF5KDEpOworCisJLyogbm93IGVkZ2UgdHJpZ2dlcmVkIGZvciBUSjMyMCBHRSAxMy8wNy8wMCAqLworCS8qIHNlZSBjb21tZW50IGluIElSUSBmdW5jdGlvbiAqLworCWlmIChjYXJkLT50eXAgPT0gTkVUSkVUX1NfVEozMjApIC8qIFRKMzIwICovCisJCWNhcmQtPmN0cmxyZWcgPSAweDQwOyAgLyogUmVzZXQgT2ZmIGFuZCBzdGF0dXMgcmVhZCBjbGVhciAqLworCWVsc2UKKwkJY2FyZC0+Y3RybHJlZyA9IDB4MDA7ICAvKiBSZXNldCBPZmYgYW5kIHN0YXR1cyByZWFkIGNsZWFyICovCisJb3V0YihjYXJkLT5jdHJscmVnLCBjYXJkLT5iYXNlICsgTkpfQ1RSTCk7CisJbWRlbGF5KDEwKTsKKworCS8qIGNvbmZpZ3VyZSBBVVggcGlucyAoYWxsIG91dHB1dCBleGNlcHQgSVNBQyBJUlEgcGluKSAqLworCWNhcmQtPmF1eGQgPSAwOworCWNhcmQtPmRtYWN0cmwgPSAwOworCW91dGIofk5KX0lTQUNJUlEsIGNhcmQtPmJhc2UgKyBOSl9BVVhDVFJMKTsKKwlvdXRiKE5KX0lTQUNJUlEsICBjYXJkLT5iYXNlICsgTkpfSVJRTUFTSzEpOworCW91dGIoY2FyZC0+YXV4ZCwgY2FyZC0+YmFzZSArIE5KX0FVWERBVEEpOworfQorCitzdGF0aWMgaW50Citpbml0dGlnZXIoc3RydWN0IHRpZ2VyX2h3ICpjYXJkKQoreworCWludCBpOworCisJY2FyZC0+ZG1hX3AgPSBwY2lfYWxsb2NfY29uc2lzdGVudChjYXJkLT5wZGV2LCBOSl9ETUFfU0laRSwKKwkJCSZjYXJkLT5kbWEpOworCWlmICghY2FyZC0+ZG1hX3ApIHsKKwkJcHJfaW5mbygiJXM6IE5vIERNQSBtZW1vcnlcbiIsIGNhcmQtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKCh1NjQpY2FyZC0+ZG1hID4gMHhmZmZmZmZmZikgeworCQlwcl9pbmZvKCIlczogRE1BIG91dHNpZGUgMzIgYml0XG4iLCBjYXJkLT5uYW1lKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJY2FyZC0+YmNbaV0uaHNidWYgPSBrbWFsbG9jKE5KX0RNQV9UWFNJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIWNhcmQtPmJjW2ldLmhzYnVmKSB7CisJCQlwcl9pbmZvKCIlczogbm8gQiVkIHNlbmQgYnVmZmVyXG4iLCBjYXJkLT5uYW1lLCBpICsgMSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQljYXJkLT5iY1tpXS5ocmJ1ZiA9IGttYWxsb2MoTkpfRE1BX1JYU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FyZC0+YmNbaV0uaHJidWYpIHsKKwkJCXByX2luZm8oIiVzOiBubyBCJWQgcmVjdiBidWZmZXJcbiIsIGNhcmQtPm5hbWUsIGkgKyAxKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCW1lbXNldChjYXJkLT5kbWFfcCwgMHhmZiwgTkpfRE1BX1NJWkUpOworCisJY2FyZC0+c2VuZC5zdGFydCA9IGNhcmQtPmRtYV9wOworCWNhcmQtPnNlbmQuZG1hc3RhcnQgPSAodTMyKWNhcmQtPmRtYTsKKwljYXJkLT5zZW5kLmRtYWVuZCA9IGNhcmQtPnNlbmQuZG1hc3RhcnQgKworCQkoNCAqIChOSl9ETUFfVFhTSVpFIC0gMSkpOworCWNhcmQtPnNlbmQuZG1haXJxID0gY2FyZC0+c2VuZC5kbWFzdGFydCArCisJCSg0ICogKChOSl9ETUFfVFhTSVpFIC8gMikgLSAxKSk7CisJY2FyZC0+c2VuZC5zaXplID0gTkpfRE1BX1RYU0laRTsKKworCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQlwcl9ub3RpY2UoIiVzOiBzZW5kIGJ1ZmZlciBwaHkgJSN4IC0gJSN4IC0gJSN4ICB2aXJ0ICVwIgorCQkJIiBzaXplICV6dSB1MzJcbiIsIGNhcmQtPm5hbWUsCisJCQljYXJkLT5zZW5kLmRtYXN0YXJ0LCBjYXJkLT5zZW5kLmRtYWlycSwKKwkJCWNhcmQtPnNlbmQuZG1hZW5kLCBjYXJkLT5zZW5kLnN0YXJ0LCBjYXJkLT5zZW5kLnNpemUpOworCisJb3V0bChjYXJkLT5zZW5kLmRtYXN0YXJ0LCBjYXJkLT5iYXNlICsgTkpfRE1BX1JFQURfU1RBUlQpOworCW91dGwoY2FyZC0+c2VuZC5kbWFpcnEsIGNhcmQtPmJhc2UgKyBOSl9ETUFfUkVBRF9JUlEpOworCW91dGwoY2FyZC0+c2VuZC5kbWFlbmQsIGNhcmQtPmJhc2UgKyBOSl9ETUFfUkVBRF9FTkQpOworCisJY2FyZC0+cmVjdi5zdGFydCA9IGNhcmQtPmRtYV9wICsgKE5KX0RNQV9TSVpFIC8gMik7CisJY2FyZC0+cmVjdi5kbWFzdGFydCA9ICh1MzIpY2FyZC0+ZG1hICArIChOSl9ETUFfU0laRSAvIDIpOworCWNhcmQtPnJlY3YuZG1hZW5kID0gY2FyZC0+cmVjdi5kbWFzdGFydCArCisJCSg0ICogKE5KX0RNQV9SWFNJWkUgLSAxKSk7CisJY2FyZC0+cmVjdi5kbWFpcnEgPSBjYXJkLT5yZWN2LmRtYXN0YXJ0ICsKKwkJKDQgKiAoKE5KX0RNQV9SWFNJWkUgLyAyKSAtIDEpKTsKKwljYXJkLT5yZWN2LnNpemUgPSBOSl9ETUFfUlhTSVpFOworCisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXM6IHJlY3YgYnVmZmVyIHBoeSAlI3ggLSAlI3ggLSAlI3ggIHZpcnQgJXAiCisJCQkiIHNpemUgJXp1IHUzMlxuIiwgY2FyZC0+bmFtZSwKKwkJCWNhcmQtPnJlY3YuZG1hc3RhcnQsIGNhcmQtPnJlY3YuZG1haXJxLAorCQkJY2FyZC0+cmVjdi5kbWFlbmQsIGNhcmQtPnJlY3Yuc3RhcnQsIGNhcmQtPnJlY3Yuc2l6ZSk7CisKKwlvdXRsKGNhcmQtPnJlY3YuZG1hc3RhcnQsIGNhcmQtPmJhc2UgKyBOSl9ETUFfV1JJVEVfU1RBUlQpOworCW91dGwoY2FyZC0+cmVjdi5kbWFpcnEsIGNhcmQtPmJhc2UgKyBOSl9ETUFfV1JJVEVfSVJRKTsKKwlvdXRsKGNhcmQtPnJlY3YuZG1hZW5kLCBjYXJkLT5iYXNlICsgTkpfRE1BX1dSSVRFX0VORCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkX2RtYShzdHJ1Y3QgdGlnZXJfY2ggKmJjLCB1MzIgaWR4LCBpbnQgY250KQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IGJjLT5iY2guaHc7CisJaW50IGksIHN0YXQ7CisJdTMyIHZhbDsKKwl1OCAqcCwgKnBuOworCisJaWYgKGJjLT5sYXN0cnggPT0gaWR4KSB7CisJCWJjLT5yeHN0YXRlIHw9IFJYX09WRVJSVU47CisJCXByX2luZm8oIiVzOiBCJTFkIG92ZXJydW4gYXQgaWR4ICVkXG4iLCBjYXJkLT5uYW1lLAorCQkJYmMtPmJjaC5uciwgaWR4KTsKKwl9CisJYmMtPmxhc3RyeCA9IGlkeDsKKwlpZiAoIWJjLT5iY2gucnhfc2tiKSB7CisJCWJjLT5iY2gucnhfc2tiID0gbUlfYWxsb2Nfc2tiKGJjLT5iY2gubWF4bGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFiYy0+YmNoLnJ4X3NrYikgeworCQkJcHJfaW5mbygiJXM6IEIlMWQgcmVjZWl2ZSBvdXQgb2YgbWVtb3J5XG4iLAorCQkJCWNhcmQtPm5hbWUsIGJjLT5iY2gubnIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjLT5iY2guRmxhZ3MpKSB7CisJCWlmICgoYmMtPmJjaC5yeF9za2ItPmxlbiArIGNudCkgPiBiYy0+YmNoLm1heGxlbikgeworCQkJcHJfZGVidWcoIiVzOiBCJTFkIG92ZXJydW4gJWRcbiIsIGNhcmQtPm5hbWUsCisJCQkJYmMtPmJjaC5uciwgYmMtPmJjaC5yeF9za2ItPmxlbiArIGNudCk7CisJCQlza2JfdHJpbShiYy0+YmNoLnJ4X3NrYiwgMCk7CisJCQlyZXR1cm47CisJCX0KKwkJcCA9IHNrYl9wdXQoYmMtPmJjaC5yeF9za2IsIGNudCk7CisJfSBlbHNlCisJCXAgPSBiYy0+aHJidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJdmFsID0gY2FyZC0+cmVjdi5zdGFydFtpZHgrK107CisJCWlmIChiYy0+YmNoLm5yICYgMikKKwkJCXZhbCA+Pj0gODsKKwkJaWYgKGlkeCA+PSBjYXJkLT5yZWN2LnNpemUpCisJCQlpZHggPSAwOworCQlwW2ldID0gdmFsICYgMHhmZjsKKwl9CisJcG4gPSBiYy0+aHJidWY7CituZXh0X2ZyYW1lOgorCWlmICh0ZXN0X2JpdChGTEdfSERMQywgJmJjLT5iY2guRmxhZ3MpKSB7CisJCXN0YXQgPSBpc2RuaGRsY19kZWNvZGUoJmJjLT5ocmVjdiwgcG4sIGNudCwgJmksCisJCQliYy0+YmNoLnJ4X3NrYi0+ZGF0YSwgYmMtPmJjaC5tYXhsZW4pOworCQlpZiAoc3RhdCA+IDApIC8qIHZhbGlkIGZyYW1lIHJlY2VpdmVkICovIAorCQkJcCA9IHNrYl9wdXQoYmMtPmJjaC5yeF9za2IsIHN0YXQpOworCQllbHNlIGlmIChzdGF0ID09IC1IRExDX0NSQ19FUlJPUikKKwkJCXByX2luZm8oIiVzOiBCJTFkIHJlY2VpdmUgZnJhbWUgQ1JDIGVycm9yXG4iLAorCQkJCWNhcmQtPm5hbWUsIGJjLT5iY2gubnIpOworCQllbHNlIGlmIChzdGF0ID09IC1IRExDX0ZSQU1JTkdfRVJST1IpCisJCQlwcl9pbmZvKCIlczogQiUxZCByZWNlaXZlIGZyYW1pbmcgZXJyb3JcbiIsCisJCQkJY2FyZC0+bmFtZSwgYmMtPmJjaC5ucik7CisJCWVsc2UgaWYgKHN0YXQgPT0gLUhETENfTEVOR1RIX0VSUk9SKQorCQkJcHJfaW5mbygiJXM6IEIlMWQgcmVjZWl2ZSBmcmFtZSB0b28gbG9uZyAoPiAlZClcbiIsCisJCQkJY2FyZC0+bmFtZSwgYmMtPmJjaC5uciwgYmMtPmJjaC5tYXhsZW4pOworCX0gZWxzZQorCQlzdGF0ID0gY250OwkKKworCWlmIChzdGF0ID4gMCkgeworCQlpZiAoZGVidWcgJiBERUJVR19IV19CRklGTykgeworCQkJc25wcmludGYoY2FyZC0+bG9nLCBMT0dfU0laRSwgIkIlMWQtcmVjdiAlcyAlZCAiLAorCQkJCWJjLT5iY2gubnIsIGNhcmQtPm5hbWUsIHN0YXQpOworCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoY2FyZC0+bG9nLCBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJcCwgc3RhdCk7CisJCX0KKwkJcmVjdl9CY2hhbm5lbCgmYmMtPmJjaCwgMCk7CisJfQorCWlmICh0ZXN0X2JpdChGTEdfSERMQywgJmJjLT5iY2guRmxhZ3MpKSB7CisJCXBuICs9IGk7CisJCWNudCAtPSBpOworCQlpZiAoIWJjLT5iY2gucnhfc2tiKSB7CisJCQliYy0+YmNoLnJ4X3NrYiA9IG1JX2FsbG9jX3NrYihiYy0+YmNoLm1heGxlbiwKKwkJCQlHRlBfQVRPTUlDKTsKKwkJCWlmICghYmMtPmJjaC5yeF9za2IpIHsKKwkJCQlwcl9pbmZvKCIlczogQiUxZCByZWNlaXZlIG91dCBvZiBtZW1vcnlcbiIsCisJCQkJCWNhcmQtPm5hbWUsIGJjLT5iY2gubnIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlpZiAoY250ID4gMCkKKwkJCWdvdG8gbmV4dF9mcmFtZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCityZWN2X3RpZ2VyKHN0cnVjdCB0aWdlcl9odyAqY2FyZCwgdTggaXJxX3N0YXQpCit7CisJdTMyIGlkeDsKKwlpbnQgY250ID0gY2FyZC0+cmVjdi5zaXplIC8gMjsKKworCS8qIE5vdGUgcmVjZWl2ZSBpcyB2aWEgdGhlIFdSSVRFIERNQSBjaGFubmVsICovCisJY2FyZC0+bGFzdF9pczAgJj0gfk5KX0lSUU0wX1dSX01BU0s7CisJY2FyZC0+bGFzdF9pczAgfD0gKGlycV9zdGF0ICYgTkpfSVJRTTBfV1JfTUFTSyk7CisKKwlpZiAoaXJxX3N0YXQgJiBOSl9JUlFNMF9XUl9FTkQpCisJCWlkeCA9IGNudCAtIDE7CisJZWxzZQorCQlpZHggPSBjYXJkLT5yZWN2LnNpemUgLSAxOworCisJaWYgKHRlc3RfYml0KEZMR19BQ1RJVkUsICZjYXJkLT5iY1swXS5iY2guRmxhZ3MpKQorCQlyZWFkX2RtYSgmY2FyZC0+YmNbMF0sIGlkeCwgY250KTsKKwlpZiAodGVzdF9iaXQoRkxHX0FDVElWRSwgJmNhcmQtPmJjWzFdLmJjaC5GbGFncykpCisJCXJlYWRfZG1hKCZjYXJkLT5iY1sxXSwgaWR4LCBjbnQpOworfQorCisvKiBzeW5jIHdpdGggY3VycmVudCBETUEgYWRkcmVzcyBhdCBzdGFydCBvciBhZnRlciBleGNlcHRpb24gKi8KK3N0YXRpYyB2b2lkCityZXN5bmMoc3RydWN0IHRpZ2VyX2NoICpiYywgc3RydWN0IHRpZ2VyX2h3ICpjYXJkKQoreworCWNhcmQtPnNlbmQuZG1hY3VyID0gaW5sKGNhcmQtPmJhc2UgfCBOSl9ETUFfUkVBRF9BRFIpOworCWNhcmQtPnNlbmQuaWR4ID0gKGNhcmQtPnNlbmQuZG1hY3VyIC0gY2FyZC0+c2VuZC5kbWFzdGFydCkgPj4gMjsKKwlpZiAoYmMtPmZyZWUgPiBjYXJkLT5zZW5kLnNpemUgLyAyKQorCQliYy0+ZnJlZSA9IGNhcmQtPnNlbmQuc2l6ZSAvIDI7CisJLyogY3VycmVudGx5IHdlIHNpbXBsZSBzeW5jIHRvIHRoZSBuZXh0IGNvbXBsZXRlIGZyZWUgYXJlYQorCSAqIHRoaXMgaGFzdCB0aGUgYWR2YW50YWdlIHRoYXQgd2UgaGF2ZSBhbHdheXMgbWF4aW11bSB0aW1lIHRvCisJICogaGFuZGxlIFRYIGlycQorCSAqLworCWlmIChjYXJkLT5zZW5kLmlkeCA8ICgoY2FyZC0+c2VuZC5zaXplIC8gMikgLSAxKSkKKwkJYmMtPmlkeCA9IChjYXJkLT5yZWN2LnNpemUgLyAyKSAtIDE7CisJZWxzZQorCQliYy0+aWR4ID0gY2FyZC0+cmVjdi5zaXplIC0gMTsKKwliYy0+dHhzdGF0ZSA9IFRYX1JVTjsKKwlwcl9kZWJ1ZygiJXM6ICVzIEIlMWQgZnJlZSAlZCBpZHggJWQvJWRcbiIsIGNhcmQtPm5hbWUsCisJCV9fZnVuY19fLCBiYy0+YmNoLm5yLCBiYy0+ZnJlZSwgYmMtPmlkeCwgY2FyZC0+c2VuZC5pZHgpOworfQorCitzdGF0aWMgaW50IGJjX25leHRfZnJhbWUoc3RydWN0IHRpZ2VyX2NoICopOworCitzdGF0aWMgdm9pZAorZmlsbF9oZGxjX2ZsYWcoc3RydWN0IHRpZ2VyX2NoICpiYykKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBiYy0+YmNoLmh3OworCWludCBjb3VudCwgaTsKKwl1MzIgbSwgdjsKKwl1OCAgKnA7CisKKwlpZiAoYmMtPmZyZWUgPT0gMCkKKwkJcmV0dXJuOworCXByX2RlYnVnKCIlczogJXMgQiUxZCAlZCBzdGF0ZSAleCBpZHggJWQvJWRcbiIsIGNhcmQtPm5hbWUsCisJCV9fZnVuY19fLCBiYy0+YmNoLm5yLCBiYy0+ZnJlZSwgYmMtPnR4c3RhdGUsCisJCWJjLT5pZHgsIGNhcmQtPnNlbmQuaWR4KTsKKwlpZiAoYmMtPnR4c3RhdGUgJiAoVFhfSURMRSB8IFRYX0lOSVQgfCBUWF9VTkRFUlJVTikpCisJCXJlc3luYyhiYywgY2FyZCk7CisJY291bnQgPSBpc2RuaGRsY19lbmNvZGUoJmJjLT5oc2VuZCwgTlVMTCwgMCwgJmksCisJCQliYy0+aHNidWYsIGJjLT5mcmVlKTsKKwlwcl9kZWJ1ZygiJXM6IEIlMWQgaGRsYyBlbmNvZGVkICVkIGZsYWdzXG4iLCBjYXJkLT5uYW1lLAorCQkJYmMtPmJjaC5uciwgY291bnQpOworCWJjLT5mcmVlIC09IGNvdW50OworCXAgPSBiYy0+aHNidWY7CisJbSA9IChiYy0+YmNoLm5yICYgMSkgPyAweGZmZmZmZjAwIDogMHhmZmZmMDBmZjsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoYmMtPmlkeCA+PSBjYXJkLT5zZW5kLnNpemUpCisJCQliYy0+aWR4ID0gMDsKKwkJdiA9IGNhcmQtPnNlbmQuc3RhcnRbYmMtPmlkeF07CisJCXYgJj0gbTsKKwkJdiB8PSAoYmMtPmJjaC5uciAmIDEpID8gKHUzMikocFtpXSkgOiAoKHUzMikocFtpXSkpIDw8IDg7CisJCWNhcmQtPnNlbmQuc3RhcnRbYmMtPmlkeCsrXSA9IHY7CisJfQorCWlmIChkZWJ1ZyAmIERFQlVHX0hXX0JGSUZPKSB7CisJCXNucHJpbnRmKGNhcmQtPmxvZywgTE9HX1NJWkUsICJCJTFkLXNlbmQgJXMgJWQgIiwKKwkJCWJjLT5iY2gubnIsIGNhcmQtPm5hbWUsIGNvdW50KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoY2FyZC0+bG9nLCBEVU1QX1BSRUZJWF9PRkZTRVQsIHAsIGNvdW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitmaWxsX2RtYShzdHJ1Y3QgdGlnZXJfY2ggKmJjKQoreworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCA9IGJjLT5iY2guaHc7CisJaW50IGNvdW50LCBpOworCXUzMiBtLCB2OworCXU4ICAqcDsKKworCWlmIChiYy0+ZnJlZSA9PSAwKQorCQlyZXR1cm47CisJY291bnQgPSBiYy0+YmNoLnR4X3NrYi0+bGVuIC0gYmMtPmJjaC50eF9pZHg7CisJaWYgKGNvdW50IDw9IDApCisJCXJldHVybjsKKwlwcl9kZWJ1ZygiJXM6ICVzIEIlMWQgJWQvJWQvJWQvJWQgc3RhdGUgJXggaWR4ICVkLyVkXG4iLCBjYXJkLT5uYW1lLAorCQlfX2Z1bmNfXywgYmMtPmJjaC5uciwgY291bnQsIGJjLT5mcmVlLCBiYy0+YmNoLnR4X2lkeCwKKwkJYmMtPmJjaC50eF9za2ItPmxlbiwgYmMtPnR4c3RhdGUsIGJjLT5pZHgsIGNhcmQtPnNlbmQuaWR4KTsKKwlpZiAoYmMtPnR4c3RhdGUgJiAoVFhfSURMRSB8IFRYX0lOSVQgfCBUWF9VTkRFUlJVTikpCisJCXJlc3luYyhiYywgY2FyZCk7CisJcCA9IGJjLT5iY2gudHhfc2tiLT5kYXRhICsgYmMtPmJjaC50eF9pZHg7CisJaWYgKHRlc3RfYml0KEZMR19IRExDLCAmYmMtPmJjaC5GbGFncykpIHsKKwkJY291bnQgPSBpc2RuaGRsY19lbmNvZGUoJmJjLT5oc2VuZCwgcCwgY291bnQsICZpLAorCQkJYmMtPmhzYnVmLCBiYy0+ZnJlZSk7CisJCXByX2RlYnVnKCIlczogQiUxZCBoZGxjIGVuY29kZWQgJWQgaW4gJWRcbiIsIGNhcmQtPm5hbWUsCisJCQliYy0+YmNoLm5yLCBpLCBjb3VudCk7CisJCWJjLT5iY2gudHhfaWR4ICs9IGk7CisJCWJjLT5mcmVlIC09IGNvdW50OworCQlwID0gYmMtPmhzYnVmOworCX0gZWxzZSB7CisJCWlmIChjb3VudCA+IGJjLT5mcmVlKQorCQkJY291bnQgPSBiYy0+ZnJlZTsKKwkJYmMtPmJjaC50eF9pZHggKz0gY291bnQ7CisJCWJjLT5mcmVlIC09IGNvdW50OworCX0KKwltID0gKGJjLT5iY2gubnIgJiAxKSA/IDB4ZmZmZmZmMDAgOiAweGZmZmYwMGZmOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChiYy0+aWR4ID49IGNhcmQtPnNlbmQuc2l6ZSkKKwkJCWJjLT5pZHggPSAwOworCQl2ID0gY2FyZC0+c2VuZC5zdGFydFtiYy0+aWR4XTsKKwkJdiAmPSBtOworCQl2IHw9IChiYy0+YmNoLm5yICYgMSkgPyAodTMyKShwW2ldKSA6ICgodTMyKShwW2ldKSkgPDwgODsKKwkJY2FyZC0+c2VuZC5zdGFydFtiYy0+aWR4KytdID0gdjsKKwl9CisJaWYgKGRlYnVnICYgREVCVUdfSFdfQkZJRk8pIHsKKwkJc25wcmludGYoY2FyZC0+bG9nLCBMT0dfU0laRSwgIkIlMWQtc2VuZCAlcyAlZCAiLAorCQkJYmMtPmJjaC5uciwgY2FyZC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhjYXJkLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcCwgY291bnQpOworCX0KKwlpZiAoYmMtPmZyZWUpCisJCWJjX25leHRfZnJhbWUoYmMpOworfQorCisKK3N0YXRpYyBpbnQKK2JjX25leHRfZnJhbWUoc3RydWN0IHRpZ2VyX2NoICpiYykKK3sKKwlpZiAoYmMtPmJjaC50eF9za2IgJiYgYmMtPmJjaC50eF9pZHggPCBiYy0+YmNoLnR4X3NrYi0+bGVuKQorCQlmaWxsX2RtYShiYyk7CisJZWxzZSB7CisJCWlmIChiYy0+YmNoLnR4X3NrYikgeworCQkJLyogc2VuZCBjb25maXJtLCBvbiB0cmFucywgZnJlZSBvbiBoZGxjLiAqLworCQkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJmJjLT5iY2guRmxhZ3MpKQorCQkJCWNvbmZpcm1fQnNlbmQoJmJjLT5iY2gpOworCQkJZGV2X2tmcmVlX3NrYihiYy0+YmNoLnR4X3NrYik7CisJCX0KKwkJaWYgKGdldF9uZXh0X2JmcmFtZSgmYmMtPmJjaCkpCisJCQlmaWxsX2RtYShiYyk7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3NlbmRfdGlnZXJfYmMoc3RydWN0IHRpZ2VyX2h3ICpjYXJkLCBzdHJ1Y3QgdGlnZXJfY2ggKmJjKQoreworCWludCByZXQ7CisKKwliYy0+ZnJlZSArPSBjYXJkLT5zZW5kLnNpemUgLyAyOworCWlmIChiYy0+ZnJlZSA+PSBjYXJkLT5zZW5kLnNpemUpIHsKKwkJaWYgKCEoYmMtPnR4c3RhdGUgJiAoVFhfVU5ERVJSVU4gfCBUWF9JTklUKSkpIHsKKwkJCXByX2luZm8oIiVzOiBCJTFkIFRYIHVuZGVycnVuIHN0YXRlICV4XG4iLCBjYXJkLT5uYW1lLAorCQkJCWJjLT5iY2gubnIsIGJjLT50eHN0YXRlKTsKKwkJCWJjLT50eHN0YXRlIHw9IFRYX1VOREVSUlVOOworCQl9CisJCWJjLT5mcmVlID0gY2FyZC0+c2VuZC5zaXplOworCX0KKwlyZXQgPSBiY19uZXh0X2ZyYW1lKGJjKTsKKwlpZiAoIXJldCkgeworCQlpZiAodGVzdF9iaXQoRkxHX0hETEMsICZiYy0+YmNoLkZsYWdzKSkgeworCQkJZmlsbF9oZGxjX2ZsYWcoYmMpOworCQkJcmV0dXJuOworCQl9CisJCXByX2RlYnVnKCIlczogQiUxZCBUWCBubyBkYXRhIGZyZWUgJWQgaWR4ICVkLyVkXG4iLCBjYXJkLT5uYW1lLAorCQkJYmMtPmJjaC5uciwgYmMtPmZyZWUsIGJjLT5pZHgsIGNhcmQtPnNlbmQuaWR4KTsKKwkJaWYgKCEoYmMtPnR4c3RhdGUgJiAoVFhfSURMRSB8IFRYX0lOSVQpKSkgeworCQkJZmlsbF9tZW0oYmMsIGJjLT5pZHgsIGJjLT5mcmVlLCAweGZmKTsKKwkJCWlmIChiYy0+ZnJlZSA9PSBjYXJkLT5zZW5kLnNpemUpCisJCQkJYmMtPnR4c3RhdGUgfD0gVFhfSURMRTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NlbmRfdGlnZXIoc3RydWN0IHRpZ2VyX2h3ICpjYXJkLCB1OCBpcnFfc3RhdCkKK3sKKwlpbnQgaTsKKworCS8qIE5vdGUgc2VuZCBpcyB2aWEgdGhlIFJFQUQgRE1BIGNoYW5uZWwgKi8KKwlpZiAoKGlycV9zdGF0ICYgY2FyZC0+bGFzdF9pczApICYgTkpfSVJRTTBfUkRfTUFTSykgeworCQlwcl9pbmZvKCIlczogdGlnZXIgd2FybiB3cml0ZSBkb3VibGUgZG1hICV4LyV4XG4iLAorCQkJY2FyZC0+bmFtZSwgaXJxX3N0YXQsIGNhcmQtPmxhc3RfaXMwKTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWNhcmQtPmxhc3RfaXMwICY9IH5OSl9JUlFNMF9SRF9NQVNLOworCQljYXJkLT5sYXN0X2lzMCB8PSAoaXJxX3N0YXQgJiBOSl9JUlFNMF9SRF9NQVNLKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAodGVzdF9iaXQoRkxHX0FDVElWRSwgJmNhcmQtPmJjW2ldLmJjaC5GbGFncykpCisJCQlzZW5kX3RpZ2VyX2JjKGNhcmQsICZjYXJkLT5iY1tpXSk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK25qX2lycShpbnQgaW50bm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBkZXZfaWQ7CisJdTggdmFsLCBzMXZhbCwgczB2YWw7CisKKwlzcGluX2xvY2soJmNhcmQtPmxvY2spOworCXMwdmFsID0gaW5iKGNhcmQtPmJhc2UgfCBOSl9JUlFTVEFUMCk7CisJczF2YWwgPSBpbmIoY2FyZC0+YmFzZSB8IE5KX0lSUVNUQVQxKTsKKwlpZiAoKHMxdmFsICYgTkpfSVNBQ0lSUSkgJiYgKHMwdmFsID09IDApKSB7CisJCS8qIHNoYXJlZCBJUlEgKi8KKwkJc3Bpbl91bmxvY2soJmNhcmQtPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCXByX2RlYnVnKCIlczogSVJRU1RBVDAgJTAyeCBJUlFTVEFUMSAlMDJ4XG4iLCBjYXJkLT5uYW1lLCBzMHZhbCwgczF2YWwpOworCWNhcmQtPmlycWNudCsrOworCWlmICghKHMxdmFsICYgTkpfSVNBQ0lSUSkpIHsKKwkJdmFsID0gUmVhZElTQUNfbmooY2FyZCwgSVNBQ19JU1RBKTsKKwkJaWYgKHZhbCkKKwkJCW1JU0ROaXNhY19pcnEoJmNhcmQtPmlzYWMsIHZhbCk7CisJfQorCisJaWYgKHMwdmFsKQorCQkvKiB3cml0ZSB0byBjbGVhciAqLworCQlvdXRiKHMwdmFsLCBjYXJkLT5iYXNlIHwgTkpfSVJRU1RBVDApOworCWVsc2UKKwkJZ290byBlbmQ7CisJczF2YWwgPSBzMHZhbDsKKwkvKiBzZXQgYml0cyBpbiBzdmFsIHRvIGluZGljYXRlIHdoaWNoIHBhZ2UgaXMgZnJlZSAqLworCWNhcmQtPnJlY3YuZG1hY3VyID0gaW5sKGNhcmQtPmJhc2UgfCBOSl9ETUFfV1JJVEVfQURSKTsKKwljYXJkLT5yZWN2LmlkeCA9IChjYXJkLT5yZWN2LmRtYWN1ciAtIGNhcmQtPnJlY3YuZG1hc3RhcnQpID4+IDI7CisJaWYgKGNhcmQtPnJlY3YuZG1hY3VyIDwgY2FyZC0+cmVjdi5kbWFpcnEpCisJCXMwdmFsID0gMHgwODsJLyogdGhlIDJuZCB3cml0ZSBhcmVhIGlzIGZyZWUgKi8KKwllbHNlCisJCXMwdmFsID0gMHgwNDsJLyogdGhlIDFzdCB3cml0ZSBhcmVhIGlzIGZyZWUgKi8KKworCWNhcmQtPnNlbmQuZG1hY3VyID0gaW5sKGNhcmQtPmJhc2UgfCBOSl9ETUFfUkVBRF9BRFIpOworCWNhcmQtPnNlbmQuaWR4ID0gKGNhcmQtPnNlbmQuZG1hY3VyIC0gY2FyZC0+c2VuZC5kbWFzdGFydCkgPj4gMjsKKwlpZiAoY2FyZC0+c2VuZC5kbWFjdXIgPCBjYXJkLT5zZW5kLmRtYWlycSkKKwkJczB2YWwgfD0gMHgwMjsJLyogdGhlIDJuZCByZWFkIGFyZWEgaXMgZnJlZSAqLworCWVsc2UKKwkJczB2YWwgfD0gMHgwMTsJLyogdGhlIDFzdCByZWFkIGFyZWEgaXMgZnJlZSAqLworCisJcHJfZGVidWcoIiVzOiBETUEgU3RhdHVzICUwMngvJTAyeC8lMDJ4ICVkLyVkXG4iLCBjYXJkLT5uYW1lLAorCQlzMXZhbCwgczB2YWwsIGNhcmQtPmxhc3RfaXMwLAorCQljYXJkLT5yZWN2LmlkeCwgY2FyZC0+c2VuZC5pZHgpOworCS8qIHRlc3QgaWYgd2UgaGF2ZSBhIERNQSBpbnRlcnJ1cHQgKi8KKwlpZiAoczB2YWwgIT0gY2FyZC0+bGFzdF9pczApIHsKKwkJaWYgKChzMHZhbCAmIE5KX0lSUU0wX1JEX01BU0spICE9CisJCSAgICAoY2FyZC0+bGFzdF9pczAgJiBOSl9JUlFNMF9SRF9NQVNLKSkKKwkJCS8qIGdvdCBhIHdyaXRlIGRtYSBpbnQgKi8KKwkJCXNlbmRfdGlnZXIoY2FyZCwgczB2YWwpOworCQlpZiAoKHMwdmFsICYgTkpfSVJRTTBfV1JfTUFTSykgIT0KKwkJICAgIChjYXJkLT5sYXN0X2lzMCAmIE5KX0lSUU0wX1dSX01BU0spKQorCQkJLyogZ290IGEgcmVhZCBkbWEgaW50ICovCisJCQlyZWN2X3RpZ2VyKGNhcmQsIHMwdmFsKTsKKwl9CitlbmQ6CisJc3Bpbl91bmxvY2soJmNhcmQtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludAorbmpfbDJsMUIoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGJjaGFubmVsICpiY2ggPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBiY2hhbm5lbCwgY2gpOworCXN0cnVjdCB0aWdlcl9jaCAqYmMgPSBjb250YWluZXJfb2YoYmNoLCBzdHJ1Y3QgdGlnZXJfY2gsIGJjaCk7CisJc3RydWN0IHRpZ2VyX2h3ICpjYXJkID0gYmNoLT5odzsKKwlzdHJ1Y3QgbUlTRE5oZWFkICpoaCA9IG1JU0ROX0hFQURfUChza2IpOworCXUzMiBpZDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzd2l0Y2ggKGhoLT5wcmltKSB7CisJY2FzZSBQSF9EQVRBX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gYmNoYW5uZWxfc2VuZGRhdGEoYmNoLCBza2IpOworCQlpZiAocmV0ID4gMCkgeyAvKiBkaXJlY3QgVFggKi8KKwkJCWlkID0gaGgtPmlkOyAvKiBza2IgY2FuIGJlIGZyZWVkICovCisJCQlmaWxsX2RtYShiYyk7CisJCQlyZXQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQkJaWYgKCF0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZiY2gtPkZsYWdzKSkKKwkJCQlxdWV1ZV9jaF9mcmFtZShjaCwgUEhfREFUQV9DTkYsIGlkLCBOVUxMKTsKKwkJfSBlbHNlCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiByZXQ7CisJY2FzZSBQSF9BQ1RJVkFURV9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpCisJCQlyZXQgPSBtb2RlX3RpZ2VyKGJjLCBjaC0+cHJvdG9jb2wpOworCQllbHNlCisJCQlyZXQgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWlmICghcmV0KQorCQkJX3F1ZXVlX2RhdGEoY2gsIFBIX0FDVElWQVRFX0lORCwgTUlTRE5fSURfQU5ZLCAwLAorCQkJCU5VTEwsIEdGUF9LRVJORUwpOworCQlicmVhazsKKwljYXNlIFBIX0RFQUNUSVZBVEVfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQltSVNETl9jbGVhcl9iY2hhbm5lbChiY2gpOworCQltb2RlX3RpZ2VyKGJjLCBJU0ROX1BfTk9ORSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoY2gsIFBIX0RFQUNUSVZBVEVfSU5ELCBNSVNETl9JRF9BTlksIDAsCisJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCWlmICghcmV0KQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9iY3RybChzdHJ1Y3QgdGlnZXJfY2ggKmJjLCBzdHJ1Y3QgbUlTRE5fY3RybF9yZXEgKmNxKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCB0aWdlcl9odyAqY2FyZCAgPSBiYy0+YmNoLmh3OworCisJc3dpdGNoIChjcS0+b3ApIHsKKwljYXNlIE1JU0ROX0NUUkxfR0VUT1A6CisJCWNxLT5vcCA9IDA7CisJCWJyZWFrOworCS8qIE5vdGhpbmcgaW1wbGVtZW50ZWQgeWV0ICovCisJY2FzZSBNSVNETl9DVFJMX0ZJTExfRU1QVFk6CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6ICVzIHVua25vd24gT3AgJXhcbiIsIGNhcmQtPm5hbWUsIF9fZnVuY19fLCBjcS0+b3ApOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorbmpfYmN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaCA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IGJjaGFubmVsLCBjaCk7CisJc3RydWN0IHRpZ2VyX2NoICpiYyA9IGNvbnRhaW5lcl9vZihiY2gsIHN0cnVjdCB0aWdlcl9jaCwgYmNoKTsKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgID0gYmNoLT5odzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6ICVzIGNtZDoleCAlcFxuIiwgY2FyZC0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0xPU0VfQ0hBTk5FTDoKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncyk7CisJCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCQltSVNETl9mcmVlYmNoYW5uZWwoYmNoKTsKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfVFhfQlVTWSwgJmJjaC0+RmxhZ3MpOworCQkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19BQ1RJVkUsICZiY2gtPkZsYWdzKTsKKwkJCW1vZGVfdGlnZXIoYmMsIElTRE5fUF9OT05FKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJfQorCQljaC0+cHJvdG9jb2wgPSBJU0ROX1BfTk9ORTsKKwkJY2gtPnBlZXIgPSBOVUxMOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCXJldCA9IGNoYW5uZWxfYmN0cmwoYmMsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIHByaW0oJXgpXG4iLCBjYXJkLT5uYW1lLCBfX2Z1bmNfXywgY21kKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9jdHJsKHN0cnVjdCB0aWdlcl9odyAqY2FyZCwgc3RydWN0IG1JU0ROX2N0cmxfcmVxICpjcSkKK3sKKwlpbnQJcmV0ID0gMDsKKworCXN3aXRjaCAoY3EtPm9wKSB7CisJY2FzZSBNSVNETl9DVFJMX0dFVE9QOgorCQljcS0+b3AgPSBNSVNETl9DVFJMX0xPT1A7CisJCWJyZWFrOworCWNhc2UgTUlTRE5fQ1RSTF9MT09QOgorCQkvKiBjcS0+Y2hhbm5lbDogMCBkaXNhYmxlLCAxIEIxIGxvb3AgMiBCMiBsb29wLCAzIGJvdGggKi8KKwkJaWYgKGNxLT5jaGFubmVsIDwgMCB8fCBjcS0+Y2hhbm5lbCA+IDMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBjYXJkLT5pc2FjLmN0cmwoJmNhcmQtPmlzYWMsIEhXX1RFU1RMT09QLCBjcS0+Y2hhbm5lbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIE9wICV4XG4iLCBjYXJkLT5uYW1lLCBfX2Z1bmNfXywgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK29wZW5fYmNoYW5uZWwoc3RydWN0IHRpZ2VyX2h3ICpjYXJkLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQoreworCXN0cnVjdCBiY2hhbm5lbCAqYmNoOworCisJaWYgKHJxLT5hZHIuY2hhbm5lbCA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX05PTkUpCisJCXJldHVybiAtRUlOVkFMOworCWJjaCA9ICZjYXJkLT5iY1tycS0+YWRyLmNoYW5uZWwgLSAxXS5iY2g7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxHX09QRU4sICZiY2gtPkZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsgLyogYi1jaGFubmVsIGNhbiBiZSBvbmx5IG9wZW4gb25jZSAqLworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfRklMTEVNUFRZLCAmYmNoLT5GbGFncyk7CisJYmNoLT5jaC5wcm90b2NvbCA9IHJxLT5wcm90b2NvbDsKKwlycS0+Y2ggPSAmYmNoLT5jaDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGRldmljZSBjb250cm9sIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBpbnQKK25qX2RjdHJsKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCB1MzIgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1JU0ROZGV2aWNlCSpkZXYgPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBtSVNETmRldmljZSwgRCk7CisJc3RydWN0IGRjaGFubmVsCQkqZGNoID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRjaGFubmVsLCBkZXYpOworCXN0cnVjdCB0aWdlcl9odwkqY2FyZCA9IGRjaC0+aHc7CisJc3RydWN0IGNoYW5uZWxfcmVxCSpycTsKKwlpbnQJCQllcnIgPSAwOworCisJcHJfZGVidWcoIiVzOiAlcyBjbWQ6JXggJXBcbiIsIGNhcmQtPm5hbWUsIF9fZnVuY19fLCBjbWQsIGFyZyk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE9QRU5fQ0hBTk5FTDoKKwkJcnEgPSBhcmc7CisJCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX1RFX1MwKQorCQkJZXJyID0gY2FyZC0+aXNhYy5vcGVuKCZjYXJkLT5pc2FjLCBycSk7CisJCWVsc2UKKwkJCWVyciA9IG9wZW5fYmNoYW5uZWwoY2FyZCwgcnEpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQorCQkJcHJfaW5mbygiJXM6IGNhbm5vdCBnZXQgbW9kdWxlXG4iLCBjYXJkLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9TRV9DSEFOTkVMOgorCQlwcl9kZWJ1ZygiJXM6IGRldiglZCkgY2xvc2UgZnJvbSAlcFxuIiwgY2FyZC0+bmFtZSwgZGNoLT5kZXYuaWQsCisJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCWVyciA9IGNoYW5uZWxfY3RybChjYXJkLCBhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6ICVzIHVua25vd24gY29tbWFuZCAleFxuIiwKKwkJCWNhcmQtPm5hbWUsIF9fZnVuY19fLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorbmpfaW5pdF9jYXJkKHN0cnVjdCB0aWdlcl9odyAqY2FyZCkKK3sKKwl1X2xvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJbmpfZGlzYWJsZV9od2lycShjYXJkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisKKwljYXJkLT5pcnEgPSBjYXJkLT5wZGV2LT5pcnE7CisJaWYgKHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgbmpfaXJxLCBJUlFGX1NIQVJFRCwgY2FyZC0+bmFtZSwgY2FyZCkpIHsKKwkJcHJfaW5mbygiJXM6IGNvdWxkbid0IGdldCBpbnRlcnJ1cHQgJWRcbiIsCisJCQljYXJkLT5uYW1lLCBjYXJkLT5pcnEpOworCQljYXJkLT5pcnEgPSAtMTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlual9yZXNldChjYXJkKTsKKwlyZXQgPSBjYXJkLT5pc2FjLmluaXQoJmNhcmQtPmlzYWMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJcmV0ID0gaW5pdHRpZ2VyKGNhcmQpOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3I7CisJbW9kZV90aWdlcigmY2FyZC0+YmNbMF0sIElTRE5fUF9OT05FKTsKKwltb2RlX3RpZ2VyKCZjYXJkLT5iY1sxXSwgSVNETl9QX05PTkUpOworZXJyb3I6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQKK25qX3JlbGVhc2Uoc3RydWN0IHRpZ2VyX2h3ICpjYXJkKQoreworCXVfbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCWlmIChjYXJkLT5iYXNlX3MpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJbmpfZGlzYWJsZV9od2lycShjYXJkKTsKKwkJbW9kZV90aWdlcigmY2FyZC0+YmNbMF0sIElTRE5fUF9OT05FKTsKKwkJbW9kZV90aWdlcigmY2FyZC0+YmNbMV0sIElTRE5fUF9OT05FKTsKKwkJY2FyZC0+aXNhYy5yZWxlYXNlKCZjYXJkLT5pc2FjKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZWxlYXNlX3JlZ2lvbihjYXJkLT5iYXNlLCBjYXJkLT5iYXNlX3MpOworCQljYXJkLT5iYXNlX3MgPSAwOworCX0KKwlpZiAoY2FyZC0+aXJxID4gMCkKKwkJZnJlZV9pcnEoY2FyZC0+aXJxLCBjYXJkKTsKKwlpZiAoY2FyZC0+aXNhYy5kY2guZGV2LmRldi5jbGFzcykKKwkJbUlTRE5fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPmlzYWMuZGNoLmRldik7CisJCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQltSVNETl9mcmVlYmNoYW5uZWwoJmNhcmQtPmJjW2ldLmJjaCk7CisJCWtmcmVlKGNhcmQtPmJjW2ldLmhzYnVmKTsKKwkJa2ZyZWUoY2FyZC0+YmNbaV0uaHJidWYpOworCX0KKwlpZiAoY2FyZC0+ZG1hX3ApCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoY2FyZC0+cGRldiwgTkpfRE1BX1NJWkUsCisJCQljYXJkLT5kbWFfcCwgY2FyZC0+ZG1hKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjYXJkLT5saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJcGNpX2NsZWFyX21hc3RlcihjYXJkLT5wZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2FyZC0+cGRldik7CisJcGNpX3NldF9kcnZkYXRhKGNhcmQtPnBkZXYsIE5VTEwpOworCWtmcmVlKGNhcmQpOworfQorCisKK3N0YXRpYyBpbnQKK25qX3NldHVwKHN0cnVjdCB0aWdlcl9odyAqY2FyZCkKK3sKKwljYXJkLT5iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGNhcmQtPnBkZXYsIDApOworCWNhcmQtPmJhc2VfcyA9IHBjaV9yZXNvdXJjZV9sZW4oY2FyZC0+cGRldiwgMCk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjYXJkLT5iYXNlLCBjYXJkLT5iYXNlX3MsIGNhcmQtPm5hbWUpKSB7CisJCXByX2luZm8oIiVzOiBORVRqZXQgY29uZmlnIHBvcnQgJSN4LSUjeCBhbHJlYWR5IGluIHVzZVxuIiwKKwkJCWNhcmQtPm5hbWUsIGNhcmQtPmJhc2UsCisJCQkodTMyKShjYXJkLT5iYXNlICsgY2FyZC0+YmFzZV9zIC0gMSkpOworCQljYXJkLT5iYXNlX3MgPSAwOworCQlyZXR1cm4gLUVJTzsKKwl9CisJQVNTSUdOX0ZVTkMobmosIElTQUMsIGNhcmQtPmlzYWMpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitzZXR1cF9pbnN0YW5jZShzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQpCit7CisJaW50IGksIGVycjsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzbnByaW50ZihjYXJkLT5uYW1lLCBNSVNETl9NQVhfSURMRU4gLSAxLCAibmV0amV0LiVkIiwgbmpfY250ICsgMSk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZjYXJkLT5saXN0LCAmQ2FyZHMpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKworCV9zZXRfZGVidWcoY2FyZCk7CisJY2FyZC0+aXNhYy5uYW1lID0gY2FyZC0+bmFtZTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+aXNhYy5od2xvY2sgPSAmY2FyZC0+bG9jazsKKwltSVNETmlzYWNfaW5pdCgmY2FyZC0+aXNhYywgY2FyZCk7CisKKwljYXJkLT5pc2FjLmRjaC5kZXYuQnByb3RvY29scyA9ICgxIDw8IChJU0ROX1BfQl9SQVcgJiBJU0ROX1BfQl9NQVNLKSkgfAorCQkoMSA8PCAoSVNETl9QX0JfSERMQyAmIElTRE5fUF9CX01BU0spKTsKKwljYXJkLT5pc2FjLmRjaC5kZXYuRC5jdHJsID0gbmpfZGN0cmw7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQljYXJkLT5iY1tpXS5iY2gubnIgPSBpICsgMTsKKwkJc2V0X2NoYW5uZWxtYXAoaSArIDEsIGNhcmQtPmlzYWMuZGNoLmRldi5jaGFubmVsbWFwKTsKKwkJbUlTRE5faW5pdGJjaGFubmVsKCZjYXJkLT5iY1tpXS5iY2gsIE1BWF9EQVRBX01FTSk7CisJCWNhcmQtPmJjW2ldLmJjaC5odyA9IGNhcmQ7CisJCWNhcmQtPmJjW2ldLmJjaC5jaC5zZW5kID0gbmpfbDJsMUI7CisJCWNhcmQtPmJjW2ldLmJjaC5jaC5jdHJsID0gbmpfYmN0cmw7CisJCWNhcmQtPmJjW2ldLmJjaC5jaC5uciA9IGkgKyAxOworCQlsaXN0X2FkZCgmY2FyZC0+YmNbaV0uYmNoLmNoLmxpc3QsCisJCQkmY2FyZC0+aXNhYy5kY2guZGV2LmJjaGFubmVscyk7CisJCWNhcmQtPmJjW2ldLmJjaC5odyA9IGNhcmQ7CisJfQorCWVyciA9IG5qX3NldHVwKGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJZXJyID0gbUlTRE5fcmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pc2FjLmRjaC5kZXYsICZjYXJkLT5wZGV2LT5kZXYsCisJCWNhcmQtPm5hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3I7CisJZXJyID0gbmpfaW5pdF9jYXJkKGNhcmQpOworCWlmICghZXJyKSAgeworCQlual9jbnQrKzsKKwkJcHJfbm90aWNlKCJOZXRqZXQgJWQgY2FyZHMgaW5zdGFsbGVkXG4iLCBual9jbnQpOworCQlyZXR1cm4gMDsKKwl9CitlcnJvcjoKKwlual9yZWxlYXNlKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0Citual9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlpbnQgY2ZnOworCXN0cnVjdCB0aWdlcl9odyAqY2FyZDsKKworCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4ODA4NiAmJgorCSAgICBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDAwMykgeworCQlwcl9ub3RpY2UoIk5ldGpldDogRGlnaXVtIFgxMDBQL1gxMDFQIG5vdCBoYW5kbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHg1NSAmJgorCSAgICBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDIpIHsKKwkJcHJfbm90aWNlKCJOZXRqZXQ6IEVudGVyIU5vdyBub3QgaGFuZGxlZCB5ZXRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRpZ2VyX2h3KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjYXJkKSB7CisJCXByX2luZm8oIk5vIGttZW0gZm9yIE5ldGpldFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJY2FyZC0+cGRldiA9IHBkZXY7CisKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIm5qX3Byb2JlKG1JU0ROKTogZm91bmQgYWRhcHRlciBhdCAlc1xuIiwKKwkJcGNpX25hbWUocGRldikpOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwkvKiB0aGUgVEozMDAgYW5kIFRKMzIwIG11c3QgYmUgZGV0ZWN0ZWQsIHRoZSBJUlEgaGFuZGxpbmcgaXMgZGlmZmVyZW50CisJICogdW5mb3J0dW5hdGVseSB0aGUgY2hpcHMgdXNlIHRoZSBzYW1lIGRldmljZSBJRCwgYnV0IHRoZSBUSjMyMCBoYXMKKwkgKiB0aGUgYml0MjAgaW4gc3RhdHVzIFBDSSBjZmcgcmVnaXN0ZXIgc2V0CisJICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4MDQsICZjZmcpOworCWlmIChjZmcgJiAweDAwMTAwMDAwKQorCQljYXJkLT50eXAgPSBORVRKRVRfU19USjMyMDsKKwllbHNlCisJCWNhcmQtPnR5cCA9IE5FVEpFVF9TX1RKMzAwOworCisJY2FyZC0+YmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwljYXJkLT5pcnEgPSBwZGV2LT5pcnE7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWVyciA9IHNldHVwX2luc3RhbmNlKGNhcmQpOworCWlmIChlcnIpCisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZleGl0IG5qX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgdGlnZXJfaHcgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoY2FyZCkKKwkJbmpfcmVsZWFzZShjYXJkKTsKKwllbHNlCisJCXByX2luZm8oIiVzIGRydmRhdGEgYWxyZWFkeSByZW1vdmVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKKy8qIFdlIGNhbm5vdCBzZWxlY3QgY2FyZHMgd2l0aCBQQ0lfU1VCLi4uIElEcywgc2luY2UgaGVyZSBhcmUgY2FyZHMgd2l0aAorICogU1VCIElEcyBzZXQgdG8gUENJX0FOWV9JRCwgc28gd2UgbmVlZCB0byBtYXRjaCBhbGwgYW5kIHJlamVjdAorICoga25vd24gb3RoZXIgY2FyZHMgd2hpY2ggbm90IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAtIHNlZSBwcm9iZSBmdW5jdGlvbiAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5qX3BjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwgUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmpfcGNpX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBual9kcml2ZXIgPSB7CisJLm5hbWUgPSAibmV0amV0IiwKKwkucHJvYmUgPSBual9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobmpfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBual9wY2lfaWRzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmpfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwcl9ub3RpY2UoIk5ldGpldCBQQ0kgZHJpdmVyIFJldi4gJXNcbiIsIE5FVEpFVF9SRVYpOworCWVyciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm5qX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5qX2NsZWFudXAodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5qX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG5qX2luaXQpOworbW9kdWxlX2V4aXQobmpfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbmV0amV0LmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbmV0amV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2MWZmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9uZXRqZXQuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogTkVUamV0IGNvbW1vbiBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcglLYXJzdGVuIEtlaWwKKyAqICAgICAgICAgICAgICBiYXNlZCBvbiB3b3JrIG9mIE1hdHQgSGVuZGVyc29uIGFuZCBEYW5pZWwgUG90dHMsCisgKiAgICAgICAgICAgICAgVHJhdmVyc2UgVGVjaG5vbG9naWVzIFAvTCB3d3cudHJhdmVyc2UuY29tLmF1CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjZGVmaW5lIE5KX0NUUkwJCQkweDAwCisjZGVmaW5lIE5KX0RNQUNUUkwJCTB4MDEKKyNkZWZpbmUgTkpfQVVYQ1RSTAkJMHgwMgorI2RlZmluZSBOSl9BVVhEQVRBCQkweDAzCisjZGVmaW5lIE5KX0lSUU1BU0swCQkweDA0CisjZGVmaW5lIE5KX0lSUU1BU0sxCQkweDA1CisjZGVmaW5lIE5KX0lSUVNUQVQwCQkweDA2CisjZGVmaW5lIE5KX0lSUVNUQVQxCQkweDA3CisjZGVmaW5lIE5KX0RNQV9SRUFEX1NUQVJUCTB4MDgKKyNkZWZpbmUgTkpfRE1BX1JFQURfSVJRCQkweDBjCisjZGVmaW5lIE5KX0RNQV9SRUFEX0VORAkJMHgxMAorI2RlZmluZSBOSl9ETUFfUkVBRF9BRFIJCTB4MTQKKyNkZWZpbmUgTkpfRE1BX1dSSVRFX1NUQVJUCTB4MTgKKyNkZWZpbmUgTkpfRE1BX1dSSVRFX0lSUQkweDFjCisjZGVmaW5lIE5KX0RNQV9XUklURV9FTkQJMHgyMAorI2RlZmluZSBOSl9ETUFfV1JJVEVfQURSCTB4MjQKKyNkZWZpbmUgTkpfUFVMU0VfQ05UCQkweDI4CisKKyNkZWZpbmUgTkpfSVNBQ19PRkYJCTB4YzAKKyNkZWZpbmUgTkpfSVNBQ0lSUQkJMHgxMAorCisjZGVmaW5lIE5KX0lSUU0wX1JEX01BU0sJMHgwMworI2RlZmluZSBOSl9JUlFNMF9SRF9JUlEJCTB4MDEKKyNkZWZpbmUgTkpfSVJRTTBfUkRfRU5ECQkweDAyCisjZGVmaW5lIE5KX0lSUU0wX1dSX01BU0sJMHgwYworI2RlZmluZSBOSl9JUlFNMF9XUl9JUlEJCTB4MDQKKyNkZWZpbmUgTkpfSVJRTTBfV1JfRU5ECQkweDA4CisKKy8qIG9uZSBwYWdlIGhlcmUgaXMgbm8gbmVlZCB0byBiZSBzbWFsbGVyICovCisjZGVmaW5lIE5KX0RNQV9TSVpFCQk0MDk2CisvKiAyICogNjQgYnl0ZSBpcyBhIGNvbXByb21pc2UgYmV0d2VlbiBJUlEgY291bnQgYW5kIGxhdGVuY3kgKi8KKyNkZWZpbmUgTkpfRE1BX1JYU0laRQkJMTI4ICAvKiAyICogNjQgKi8KKyNkZWZpbmUgTkpfRE1BX1RYU0laRQkJMTI4ICAvKiAyICogNjQgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3NwZWVkZmF4LmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vc3BlZWRmYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjNhNGUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3NwZWVkZmF4LmMKQEAgLTAsMCArMSw1MjYgQEAKKy8qCisgKiBzcGVlZGZheC5jCWxvdyBsZXZlbCBzdHVmZiBmb3IgU2VkbGJhdWVyIFNwZWVkZmF4KyBjYXJkcworICoJCWJhc2VkIG9uIHRoZSBJU0FSIERTUAorICoJCVRoYW5rcyB0byBTZWRsYmF1ZXIgQUcgZm9yIGluZm9ybWF0aW9ucyBhbmQgSFcKKyAqCisgKiBBdXRob3IgICAgICAgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tSVNETmh3Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlICJpcGFjLmgiCisjaW5jbHVkZSAiaXNhci5oIgorCisjZGVmaW5lIFNQRUVERkFYX1JFVgkiMi4wIgorCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfU1BFRURGQVhfUFlSQU1JRAkweDUxCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfU1BFRURGQVhfUENJCTB4NTQKKyNkZWZpbmUgUENJX1NVQl9JRF9TRURMQkFVRVIJCTB4MDEKKworI2RlZmluZSBTRkFYX1BDSV9BRERSCQkweGM4CisjZGVmaW5lIFNGQVhfUENJX0lTQUMJCTB4ZDAKKyNkZWZpbmUgU0ZBWF9QQ0lfSVNBUgkJMHhlMAorCisvKiBUSUdFUiAxMDAgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgVElHRVJfUkVTRVRfQUREUgkweDAwCisjZGVmaW5lIFRJR0VSX0VYVEVSTl9SRVNFVF9PTgkweDAxCisjZGVmaW5lIFRJR0VSX0VYVEVSTl9SRVNFVF9PRkYJMHgwMAorI2RlZmluZSBUSUdFUl9BVVhfQ1RSTAkJMHgwMgorI2RlZmluZSBUSUdFUl9BVVhfREFUQQkJMHgwMworI2RlZmluZSBUSUdFUl9BVVhfSVJRTUFTSwkweDA1CisjZGVmaW5lIFRJR0VSX0FVWF9TVEFUVVMJMHgwNworCisvKiBUaWdlciBBVVggQklUcyAqLworI2RlZmluZSBTRkFYX0FVWF9JT01BU0sJCTB4ZGQJLyogMSBhbmQgNSBhcmUgaW5wdXRzICovCisjZGVmaW5lIFNGQVhfSVNBUl9SRVNFVF9CSVRfT0ZGIDB4MDAKKyNkZWZpbmUgU0ZBWF9JU0FSX1JFU0VUX0JJVF9PTgkweDAxCisjZGVmaW5lIFNGQVhfVElHRVJfSVJRX0JJVAkweDAyCisjZGVmaW5lIFNGQVhfTEVEMV9CSVQJCTB4MDgKKyNkZWZpbmUgU0ZBWF9MRUQyX0JJVAkJMHgxMAorCisjZGVmaW5lIFNGQVhfUENJX1JFU0VUX09OCShTRkFYX0lTQVJfUkVTRVRfQklUX09OKQorI2RlZmluZSBTRkFYX1BDSV9SRVNFVF9PRkYJKFNGQVhfTEVEMV9CSVQgfCBTRkFYX0xFRDJfQklUKQorCitzdGF0aWMgaW50IHNmYXhfY250Oworc3RhdGljIHUzMiBkZWJ1ZzsKK3N0YXRpYyB1MzIgaXJxbG9vcHMgPSA0OworCitzdHJ1Y3Qgc2ZheF9odyB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKKwljaGFyCQkJbmFtZVtNSVNETl9NQVhfSURMRU5dOworCXUzMgkJCWlycTsKKwl1MzIJCQlpcnFjbnQ7CisJdTMyCQkJY2ZnOworCXN0cnVjdCBfaW9wb3J0CQlwX2lzYWM7CisJc3RydWN0IF9pb3BvcnQJCXBfaXNhcjsKKwl1OAkJCWF1eF9kYXRhOworCXNwaW5sb2NrX3QJCWxvY2s7CS8qIEhXIGFjY2VzcyBsb2NrICovCisJc3RydWN0IGlzYWNfaHcJCWlzYWM7CisJc3RydWN0IGlzYXJfaHcJCWlzYXI7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKENhcmRzKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKGNhcmRfbG9jayk7IC8qIHByb3RlY3QgQ2FyZHMgKi8KKworc3RhdGljIHZvaWQKK19zZXRfZGVidWcoc3RydWN0IHNmYXhfaHcgKmNhcmQpCit7CisJY2FyZC0+aXNhYy5kY2guZGVidWcgPSBkZWJ1ZzsKKwljYXJkLT5pc2FyLmNoWzBdLmJjaC5kZWJ1ZyA9IGRlYnVnOworCWNhcmQtPmlzYXIuY2hbMV0uYmNoLmRlYnVnID0gZGVidWc7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9kZWJ1Zyhjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByZXQ7CisJc3RydWN0IHNmYXhfaHcgKmNhcmQ7CisKKwlyZXQgPSBwYXJhbV9zZXRfdWludCh2YWwsIGtwKTsKKwlpZiAoIXJldCkgeworCQlyZWFkX2xvY2soJmNhcmRfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FyZCwgJkNhcmRzLCBsaXN0KQorCQkJX3NldF9kZWJ1ZyhjYXJkKTsKKwkJcmVhZF91bmxvY2soJmNhcmRfbG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gS2VpbCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1ZFUlNJT04oU1BFRURGQVhfUkVWKTsKK21vZHVsZV9wYXJhbV9jYWxsKGRlYnVnLCBzZXRfZGVidWcsIHBhcmFtX2dldF91aW50LCAmZGVidWcsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTcGVlZGZheCBkZWJ1ZyBtYXNrIik7Cittb2R1bGVfcGFyYW0oaXJxbG9vcHMsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxbG9vcHMsICJTcGVlZGZheCBtYXhpbWFsIGlycWxvb3BzIChkZWZhdWx0IDQpIik7CisKK0lPRlVOQ19JTkQoSVNBQywgc2ZheF9odywgcF9pc2FjKQorSU9GVU5DX0lORChJU0FSLCBzZmF4X2h3LCBwX2lzYXIpCisKK3N0YXRpYyBpcnFyZXR1cm5fdAorc3BlZWRmYXhfaXJxKGludCBpbnRubywgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzZmF4X2h3CSpzZiA9IGRldl9pZDsKKwl1OCB2YWw7CisJaW50IGNudCA9IGlycWxvb3BzOworCisJc3Bpbl9sb2NrKCZzZi0+bG9jayk7CisJdmFsID0gaW5iKHNmLT5jZmcgKyBUSUdFUl9BVVhfU1RBVFVTKTsKKwlpZiAodmFsICYgU0ZBWF9USUdFUl9JUlFfQklUKSB7IC8qIGZvciB1cyBvciBzaGFyZWQgPyAqLworCQlzcGluX3VubG9jaygmc2YtPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7IC8qIHNoYXJlZCAqLworCX0KKwlzZi0+aXJxY250Kys7CisJdmFsID0gUmVhZElTQVJfSU5EKHNmLCBJU0FSX0lSUUJJVCk7CitTdGFydF9JU0FSOgorCWlmICh2YWwgJiBJU0FSX0lSUVNUQSkKKwkJbUlTRE5pc2FyX2lycSgmc2YtPmlzYXIpOworCXZhbCA9IFJlYWRJU0FDX0lORChzZiwgSVNBQ19JU1RBKTsKKwlpZiAodmFsKQorCQltSVNETmlzYWNfaXJxKCZzZi0+aXNhYywgdmFsKTsKKwl2YWwgPSBSZWFkSVNBUl9JTkQoc2YsIElTQVJfSVJRQklUKTsKKwlpZiAoKHZhbCAmIElTQVJfSVJRU1RBKSAmJiBjbnQtLSkKKwkJZ290byBTdGFydF9JU0FSOworCWlmIChjbnQgPCBpcnFsb29wcykKKwkJcHJfZGVidWcoIiVzOiAlZCBpcnFsb29wcyBjcHUlZFxuIiwgc2YtPm5hbWUsCisJCQlpcnFsb29wcyAtIGNudCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAoaXJxbG9vcHMgJiYgIWNudCkKKwkJcHJfbm90aWNlKCIlczogJWQgSVJRIExPT1AgY3B1JWRcbiIsIHNmLT5uYW1lLAorCQkJaXJxbG9vcHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3Bpbl91bmxvY2soJnNmLT5sb2NrKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkCitlbmFibGVfaHdpcnEoc3RydWN0IHNmYXhfaHcgKnNmKQoreworCVdyaXRlSVNBQ19JTkQoc2YsIElTQUNfTUFTSywgMCk7CisJV3JpdGVJU0FSX0lORChzZiwgSVNBUl9JUlFCSVQsIElTQVJfSVJRTVNLKTsKKwlvdXRiKFNGQVhfVElHRVJfSVJRX0JJVCwgc2YtPmNmZyArIFRJR0VSX0FVWF9JUlFNQVNLKTsKK30KKworc3RhdGljIHZvaWQKK2Rpc2FibGVfaHdpcnEoc3RydWN0IHNmYXhfaHcgKnNmKQoreworCVdyaXRlSVNBQ19JTkQoc2YsIElTQUNfTUFTSywgMHhGRik7CisJV3JpdGVJU0FSX0lORChzZiwgSVNBUl9JUlFCSVQsIDApOworCW91dGIoMCwgc2YtPmNmZyArIFRJR0VSX0FVWF9JUlFNQVNLKTsKK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X3NwZWVkZmF4KHN0cnVjdCBzZmF4X2h3ICpzZikKK3sKKworCXByX2RlYnVnKCIlczogcmVzZXR0aW5nIGNhcmRcbiIsIHNmLT5uYW1lKTsKKwlvdXRiKFRJR0VSX0VYVEVSTl9SRVNFVF9PTiwgc2YtPmNmZyArIFRJR0VSX1JFU0VUX0FERFIpOworCW91dGIoU0ZBWF9QQ0lfUkVTRVRfT04sIHNmLT5jZmcgKyBUSUdFUl9BVVhfREFUQSk7CisJbWRlbGF5KDEpOworCW91dGIoVElHRVJfRVhURVJOX1JFU0VUX09GRiwgc2YtPmNmZyArIFRJR0VSX1JFU0VUX0FERFIpOworCXNmLT5hdXhfZGF0YSA9IFNGQVhfUENJX1JFU0VUX09GRjsKKwlvdXRiKHNmLT5hdXhfZGF0YSwgc2YtPmNmZyArIFRJR0VSX0FVWF9EQVRBKTsKKwltZGVsYXkoMSk7Cit9CisKK3N0YXRpYyBpbnQKK3NmYXhfY3RybChzdHJ1Y3Qgc2ZheF9odyAgKnNmLCB1MzIgY21kLCB1X2xvbmcgYXJnKQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEhXX1JFU0VUX1JFUToKKwkJcmVzZXRfc3BlZWRmYXgoc2YpOworCQlicmVhazsKKwljYXNlIEhXX0FDVElWQVRFX0lORDoKKwkJaWYgKGFyZyAmIDEpCisJCQlzZi0+YXV4X2RhdGEgJj0gflNGQVhfTEVEMV9CSVQ7CisJCWlmIChhcmcgJiAyKQorCQkJc2YtPmF1eF9kYXRhICY9IH5TRkFYX0xFRDJfQklUOworCQlvdXRiKHNmLT5hdXhfZGF0YSwgc2YtPmNmZyArIFRJR0VSX0FVWF9EQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBIV19ERUFDVF9JTkQ6CisJCWlmIChhcmcgJiAxKQorCQkJc2YtPmF1eF9kYXRhIHw9IFNGQVhfTEVEMV9CSVQ7CisJCWlmIChhcmcgJiAyKQorCQkJc2YtPmF1eF9kYXRhIHw9IFNGQVhfTEVEMl9CSVQ7CisJCW91dGIoc2YtPmF1eF9kYXRhLCBzZi0+Y2ZnICsgVElHRVJfQVVYX0RBVEEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogJXMgdW5rbm93biBjb21tYW5kICV4ICVseFxuIiwKKwkJCXNmLT5uYW1lLCBfX2Z1bmNfXywgY21kLCBhcmcpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorY2hhbm5lbF9jdHJsKHN0cnVjdCBzZmF4X2h3ICAqc2YsIHN0cnVjdCBtSVNETl9jdHJsX3JlcSAqY3EpCit7CisJaW50CXJldCA9IDA7CisKKwlzd2l0Y2ggKGNxLT5vcCkgeworCWNhc2UgTUlTRE5fQ1RSTF9HRVRPUDoKKwkJY3EtPm9wID0gTUlTRE5fQ1RSTF9MT09QOworCQlicmVhazsKKwljYXNlIE1JU0ROX0NUUkxfTE9PUDoKKwkJLyogY3EtPmNoYW5uZWw6IDAgZGlzYWJsZSwgMSBCMSBsb29wIDIgQjIgbG9vcCwgMyBib3RoICovCisJCWlmIChjcS0+Y2hhbm5lbCA8IDAgfHwgY3EtPmNoYW5uZWwgPiAzKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gc2YtPmlzYWMuY3RybCgmc2YtPmlzYWMsIEhXX1RFU1RMT09QLCBjcS0+Y2hhbm5lbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiB1bmtub3duIE9wICV4XG4iLCBzZi0+bmFtZSwgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3NmYXhfZGN0cmwoc3RydWN0IG1JU0ROY2hhbm5lbCAqY2gsIHUzMiBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbUlTRE5kZXZpY2UJKmRldiA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IG1JU0ROZGV2aWNlLCBEKTsKKwlzdHJ1Y3QgZGNoYW5uZWwJCSpkY2ggPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGNoYW5uZWwsIGRldik7CisJc3RydWN0IHNmYXhfaHcJCSpzZiA9IGRjaC0+aHc7CisJc3RydWN0IGNoYW5uZWxfcmVxCSpycTsKKwlpbnQJCQllcnIgPSAwOworCisJcHJfZGVidWcoIiVzOiBjbWQ6JXggJXBcbiIsIHNmLT5uYW1lLCBjbWQsIGFyZyk7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE9QRU5fQ0hBTk5FTDoKKwkJcnEgPSBhcmc7CisJCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX1RFX1MwKQorCQkJZXJyID0gc2YtPmlzYWMub3Blbigmc2YtPmlzYWMsIHJxKTsKKwkJZWxzZQorCQkJZXJyID0gc2YtPmlzYXIub3Blbigmc2YtPmlzYXIsIHJxKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKKwkJCXByX2luZm8oIiVzOiBjYW5ub3QgZ2V0IG1vZHVsZVxuIiwgc2YtPm5hbWUpOworCQlicmVhazsKKwljYXNlIENMT1NFX0NIQU5ORUw6CisJCXByX2RlYnVnKCIlczogZGV2KCVkKSBjbG9zZSBmcm9tICVwXG4iLCBzZi0+bmFtZSwKKwkJCWRjaC0+ZGV2LmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKwkJYnJlYWs7CisJY2FzZSBDT05UUk9MX0NIQU5ORUw6CisJCWVyciA9IGNoYW5uZWxfY3RybChzZiwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIiVzOiB1bmtub3duIGNvbW1hbmQgJXhcbiIsIHNmLT5uYW1lLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK2luaXRfY2FyZChzdHJ1Y3Qgc2ZheF9odyAqc2YpCit7CisJaW50CXJldCwgY250ID0gMzsKKwl1X2xvbmcJZmxhZ3M7CisKKwlyZXQgPSByZXF1ZXN0X2lycShzZi0+aXJxLCBzcGVlZGZheF9pcnEsIElSUUZfU0hBUkVELCBzZi0+bmFtZSwgc2YpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiJXM6IGNvdWxkbid0IGdldCBpbnRlcnJ1cHQgJWRcbiIsIHNmLT5uYW1lLCBzZi0+aXJxKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJd2hpbGUgKGNudC0tKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzZi0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBzZi0+aXNhYy5pbml0KCZzZi0+aXNhYyk7CisJCWlmIChyZXQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNmLT5sb2NrLCBmbGFncyk7CisJCQlwcl9pbmZvKCIlczogSVNBQyBpbml0IGZhaWxlZCB3aXRoICVkXG4iLAorCQkJCXNmLT5uYW1lLCByZXQpOworCQkJYnJlYWs7CisJCX0KKwkJZW5hYmxlX2h3aXJxKHNmKTsKKwkJLyogUkVTRVQgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyICovCisJCVdyaXRlSVNBQ19JTkQoc2YsIElTQUNfQ01EUiwgMHg0MSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNmLT5sb2NrLCBmbGFncyk7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCQlwcl9ub3RpY2UoIiVzOiBJUlEgJWQgY291bnQgJWRcbiIsIHNmLT5uYW1lLAorCQkJCXNmLT5pcnEsIHNmLT5pcnFjbnQpOworCQlpZiAoIXNmLT5pcnFjbnQpIHsKKwkJCXByX2luZm8oIiVzOiBJUlEoJWQpIGdvdCBubyByZXF1ZXN0cyBkdXJpbmcgaW5pdCAlZFxuIiwKKwkJCSAgICAgICBzZi0+bmFtZSwgc2YtPmlycSwgMyAtIGNudCk7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCWZyZWVfaXJxKHNmLT5pcnEsIHNmKTsKKwlyZXR1cm4gLUVJTzsKK30KKworCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc2V0dXBfc3BlZWRmYXgoc3RydWN0IHNmYXhfaHcgKnNmKQoreworCXVfbG9uZyBmbGFnczsKKworCWlmICghcmVxdWVzdF9yZWdpb24oc2YtPmNmZywgMjU2LCBzZi0+bmFtZSkpIHsKKwkJcHJfaW5mbygibUlTRE46ICVzIGNvbmZpZyBwb3J0ICV4LSV4IGFscmVhZHkgaW4gdXNlXG4iLAorCQkgICAgICAgc2YtPm5hbWUsIHNmLT5jZmcsIHNmLT5jZmcgKyAyNTUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJb3V0YigweGZmLCBzZi0+Y2ZnKTsKKwlvdXRiKDAsIHNmLT5jZmcpOworCW91dGIoMHhkZCwgc2YtPmNmZyArIFRJR0VSX0FVWF9DVFJMKTsKKwlvdXRiKDAsIHNmLT5jZmcgKyBUSUdFUl9BVVhfSVJRTUFTSyk7CisKKwlzZi0+aXNhYy50eXBlID0gSVBBQ19UWVBFX0lTQUM7CisJc2YtPnBfaXNhYy5hbGUgPSBzZi0+Y2ZnICsgU0ZBWF9QQ0lfQUREUjsKKwlzZi0+cF9pc2FjLnBvcnQgPSBzZi0+Y2ZnICsgU0ZBWF9QQ0lfSVNBQzsKKwlzZi0+cF9pc2FyLmFsZSA9IHNmLT5jZmcgKyBTRkFYX1BDSV9BRERSOworCXNmLT5wX2lzYXIucG9ydCA9IHNmLT5jZmcgKyBTRkFYX1BDSV9JU0FSOworCUFTU0lHTl9GVU5DKElORCwgSVNBQywgc2YtPmlzYWMpOworCUFTU0lHTl9GVU5DKElORCwgSVNBUiwgc2YtPmlzYXIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzZi0+bG9jaywgZmxhZ3MpOworCXJlc2V0X3NwZWVkZmF4KHNmKTsKKwlkaXNhYmxlX2h3aXJxKHNmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZi0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmVsZWFzZV9jYXJkKHN0cnVjdCBzZmF4X2h3ICpjYXJkKSB7CisJdV9sb25nCWZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwlkaXNhYmxlX2h3aXJxKGNhcmQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwljYXJkLT5pc2FjLnJlbGVhc2UoJmNhcmQtPmlzYWMpOworCWZyZWVfaXJxKGNhcmQtPmlycSwgY2FyZCk7CisJY2FyZC0+aXNhci5yZWxlYXNlKCZjYXJkLT5pc2FyKTsKKwltSVNETl91bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+aXNhYy5kY2guZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5jZmcsIDI1Nik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGNhcmQtPnBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShjYXJkLT5wZGV2LCBOVUxMKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJmNhcmRfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZjYXJkLT5saXN0KTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJa2ZyZWUoY2FyZCk7CisJc2ZheF9jbnQtLTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQKK3NldHVwX2luc3RhbmNlKHN0cnVjdCBzZmF4X2h3ICpjYXJkKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CisJaW50IGksIGVycjsKKwl1X2xvbmcgZmxhZ3M7CisKKwlzbnByaW50ZihjYXJkLT5uYW1lLCBNSVNETl9NQVhfSURMRU4gLSAxLCAiU3BlZWRmYXguJWQiLCBzZmF4X2NudCArIDEpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGlzdCwgJkNhcmRzKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJX3NldF9kZWJ1ZyhjYXJkKTsKKwlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+aXNhYy5od2xvY2sgPSAmY2FyZC0+bG9jazsKKwljYXJkLT5pc2FyLmh3bG9jayA9ICZjYXJkLT5sb2NrOworCWNhcmQtPmlzYXIuY3RybCA9ICh2b2lkICopJnNmYXhfY3RybDsKKwljYXJkLT5pc2FjLm5hbWUgPSBjYXJkLT5uYW1lOworCWNhcmQtPmlzYXIubmFtZSA9IGNhcmQtPm5hbWU7CisJY2FyZC0+aXNhci5vd25lciA9IFRISVNfTU9EVUxFOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJpc2RuL0lTQVIuQklOIiwgJmNhcmQtPnBkZXYtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJcHJfaW5mbygiJXM6IGZpcm13YXJlIHJlcXVlc3QgZmFpbGVkICVkXG4iLAorCQkJY2FyZC0+bmFtZSwgZXJyKTsKKwkJZ290byBlcnJvcl9mdzsKKwl9CisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXM6IGdvdCBmaXJtd2FyZSAlenUgYnl0ZXNcbiIsCisJCQljYXJkLT5uYW1lLCBmaXJtd2FyZS0+c2l6ZSk7CisKKwltSVNETmlzYWNfaW5pdCgmY2FyZC0+aXNhYywgY2FyZCk7CisKKwljYXJkLT5pc2FjLmRjaC5kZXYuRC5jdHJsID0gc2ZheF9kY3RybDsKKwljYXJkLT5pc2FjLmRjaC5kZXYuQnByb3RvY29scyA9CisJCW1JU0ROaXNhcl9pbml0KCZjYXJkLT5pc2FyLCBjYXJkKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXNldF9jaGFubmVsbWFwKGkgKyAxLCBjYXJkLT5pc2FjLmRjaC5kZXYuY2hhbm5lbG1hcCk7CisJCWxpc3RfYWRkKCZjYXJkLT5pc2FyLmNoW2ldLmJjaC5jaC5saXN0LAorCQkJJmNhcmQtPmlzYWMuZGNoLmRldi5iY2hhbm5lbHMpOworCX0KKworCWVyciA9IHNldHVwX3NwZWVkZmF4KGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3Jfc2V0dXA7CisJZXJyID0gY2FyZC0+aXNhci5pbml0KCZjYXJkLT5pc2FyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCWVyciA9IG1JU0ROX3JlZ2lzdGVyX2RldmljZSgmY2FyZC0+aXNhYy5kY2guZGV2LAorCQkmY2FyZC0+cGRldi0+ZGV2LCBjYXJkLT5uYW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCWVyciA9IGluaXRfY2FyZChjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX2luaXQ7CisJZXJyID0gY2FyZC0+aXNhci5maXJtd2FyZSgmY2FyZC0+aXNhciwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKKwlpZiAoIWVycikgIHsKKwkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CisJCXNmYXhfY250Kys7CisJCXByX25vdGljZSgiU3BlZWRGYXggJWQgY2FyZHMgaW5zdGFsbGVkXG4iLCBzZmF4X2NudCk7CisJCXJldHVybiAwOworCX0KKwlkaXNhYmxlX2h3aXJxKGNhcmQpOworCWZyZWVfaXJxKGNhcmQtPmlycSwgY2FyZCk7CitlcnJvcl9pbml0OgorCW1JU0ROX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5pc2FjLmRjaC5kZXYpOworZXJyb3I6CisJcmVsZWFzZV9yZWdpb24oY2FyZC0+Y2ZnLCAyNTYpOworZXJyb3Jfc2V0dXA6CisJY2FyZC0+aXNhYy5yZWxlYXNlKCZjYXJkLT5pc2FjKTsKKwljYXJkLT5pc2FyLnJlbGVhc2UoJmNhcmQtPmlzYXIpOworCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworZXJyb3JfZnc6CisJcGNpX2Rpc2FibGVfZGV2aWNlKGNhcmQtPnBkZXYpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNhcmQtPmxpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAorc2ZheHBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3Qgc2ZheF9odyAqY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZmF4X2h3KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWNhcmQpIHsKKwkJcHJfaW5mbygiTm8gbWVtb3J5IGZvciBTcGVlZGZheCsgUENJXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJY2FyZC0+cGRldiA9IHBkZXY7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlrZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwcl9ub3RpY2UoIm1JU0ROOiBTcGVlZGZheCBmb3VuZCBhZGFwdGVyICVzIGF0ICVzXG4iLAorCQkoY2hhciAqKWVudC0+ZHJpdmVyX2RhdGEsIHBjaV9uYW1lKHBkZXYpKTsKKworCWNhcmQtPmNmZyA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwljYXJkLT5pcnEgPSBwZGV2LT5pcnE7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCWVyciA9IHNldHVwX2luc3RhbmNlKGNhcmQpOworCWlmIChlcnIpCisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQKK3NmYXhfcmVtb3ZlX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgc2ZheF9odwkqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChjYXJkKQorCQlyZWxlYXNlX2NhcmQoY2FyZCk7CisJZWxzZQorCQlwcl9kZWJ1ZygiJXM6IGRydmRhdGEgYWxscmVhZHkgcmVtb3ZlZFxuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2ZheHBjaV9pZHNbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX1ZFTkRPUl9JRF9USUdFUkpFVCwgUENJX0RFVklDRV9JRF9USUdFUkpFVF8xMDAsCisJICBQQ0lfU1VCVkVORE9SX1NQRUVERkFYX1BZUkFNSUQsIFBDSV9TVUJfSURfU0VETEJBVUVSLAorCSAgMCwgMCwgKHVuc2lnbmVkIGxvbmcpICJQeXJhbWlkIFNwZWVkZmF4ICsgUENJIgorCX0sCisJeyBQQ0lfVkVORE9SX0lEX1RJR0VSSkVULCBQQ0lfREVWSUNFX0lEX1RJR0VSSkVUXzEwMCwKKwkgIFBDSV9TVUJWRU5ET1JfU1BFRURGQVhfUENJLCBQQ0lfU1VCX0lEX1NFRExCQVVFUiwKKwkgIDAsIDAsICh1bnNpZ25lZCBsb25nKSAiU2VkbGJhdWVyIFNwZWVkZmF4ICsgUENJIgorCX0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNmYXhwY2lfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNmYXhwY2lfZHJpdmVyID0geworCS5uYW1lID0gInNwZWVkZmF4KyBwY2kiLAorCS5wcm9iZSA9IHNmYXhwY2lfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNmYXhfcmVtb3ZlX3BjaSksCisJLmlkX3RhYmxlID0gc2ZheHBjaV9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdAorU3BlZWRmYXhfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwcl9ub3RpY2UoIlNlZGxiYXVlciBTcGVlZGZheCsgRHJpdmVyIFJldi4gJXNcbiIsCisJCVNQRUVERkFYX1JFVik7CisJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2ZheHBjaV9kcml2ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAorU3BlZWRmYXhfY2xlYW51cCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2ZheHBjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChTcGVlZGZheF9pbml0KTsKK21vZHVsZV9leGl0KFNwZWVkZmF4X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2YxMDc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMKQEAgLTAsMCArMSwxNDQwIEBACisvKgorICogdzY2OTIuYyAgICAgbUlTRE4gZHJpdmVyIGZvciBXaW5ib25kIHc2NjkyIGJhc2VkIGNhcmRzCisgKgorICogQXV0aG9yICAgICAgS2Fyc3RlbiBLZWlsIDxra2VpbEBzdXNlLmRlPgorICogICAgICAgICAgICAgYmFzZWQgb24gdGhlIHc2NjkyIEk0TCBkcml2ZXIgZnJvbSBQZXRyIE5vdmFrIDxwZXRyLm5vdmFrQGkuY3o+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tSVNETmh3Lmg+CisjaW5jbHVkZSAidzY2OTIuaCIKKworI2RlZmluZSBXNjY5Ml9SRVYJIjIuMCIKKworI2RlZmluZSBEQlVTWV9USU1FUl9WQUxVRQk4MAorCitlbnVtIHsKKwlXNjY5Ml9BU1VTLAorCVc2NjkyX1dJTkJPTkQsCisJVzY2OTJfVVNSCit9OworCisvKiBwcml2YXRlIGRhdGEgaW4gdGhlIFBDSSBkZXZpY2VzIGxpc3QgKi8KK3N0cnVjdCB3NjY5Mm1hcCB7CisJdV9pbnQJc3VidHlwZTsKKwljaGFyCSpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3NjY5Mm1hcCAgdzY2OTJfbWFwW10gPQoreworCXtXNjY5Ml9BU1VTLCAiRHluYWxpbmsvQXN1c0NvbSBJUzY0UEgifSwKKwl7VzY2OTJfV0lOQk9ORCwgIldpbmJvbmQgVzY2OTIifSwKKwl7VzY2OTJfVVNSLCAiVVNSIFc2NjkyIn0KK307CisKKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9VU1IKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9VU1IJMHgxNmVjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVNSXzY2OTIJMHgzNDA5CisjZW5kaWYKKworc3RydWN0IHc2NjkyX2NoIHsKKwlzdHJ1Y3QgYmNoYW5uZWwJCWJjaDsKKwl1MzIJCQlhZGRyOworCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOworCXU4CQkJYl9tb2RlOworfTsKKworc3RydWN0IHc2NjkyX2h3IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCWNoYXIJCQluYW1lW01JU0ROX01BWF9JRExFTl07CisJdTMyCQkJaXJxOworCXUzMgkJCWlycWNudDsKKwl1MzIJCQlhZGRyOworCXUzMgkJCWZtYXNrOwkvKiBmZWF0dXJlIG1hc2sgLSBiaXQgc2V0IHBlciBjYXJkIG5yICovCisJaW50CQkJc3VidHlwZTsKKwlzcGlubG9ja190CQlsb2NrOwkvKiBodyBsb2NrICovCisJdTgJCQlpbWFzazsKKwl1OAkJCXBjdGw7CisJdTgJCQl4YWRkcjsKKwl1OAkJCXhkYXRhOworCXU4CQkJc3RhdGU7CisJc3RydWN0IHc2NjkyX2NoCQliY1syXTsKKwlzdHJ1Y3QgZGNoYW5uZWwJCWRjaDsKKwljaGFyCQkJbG9nWzY0XTsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoQ2FyZHMpOworc3RhdGljIERFRklORV9SV0xPQ0soY2FyZF9sb2NrKTsgLyogcHJvdGVjdCBDYXJkcyAqLworCitzdGF0aWMgaW50IHc2NjkyX2NudDsKK3N0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgdTMyIGxlZDsKK3N0YXRpYyB1MzIgcG90czsKKworc3RhdGljIHZvaWQKK19zZXRfZGVidWcoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCWNhcmQtPmRjaC5kZWJ1ZyA9IGRlYnVnOworCWNhcmQtPmJjWzBdLmJjaC5kZWJ1ZyA9IGRlYnVnOworCWNhcmQtPmJjWzFdLmJjaC5kZWJ1ZyA9IGRlYnVnOworfQorCitzdGF0aWMgaW50CitzZXRfZGVidWcoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3NjY5Ml9odyAqY2FyZDsKKworCXJldCA9IHBhcmFtX3NldF91aW50KHZhbCwga3ApOworCWlmICghcmV0KSB7CisJCXJlYWRfbG9jaygmY2FyZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmQ2FyZHMsIGxpc3QpCisJCQlfc2V0X2RlYnVnKGNhcmQpOworCQlyZWFkX3VubG9jaygmY2FyZF9sb2NrKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfVkVSU0lPTihXNjY5Ml9SRVYpOworbW9kdWxlX3BhcmFtX2NhbGwoZGVidWcsIHNldF9kZWJ1ZywgcGFyYW1fZ2V0X3VpbnQsICZkZWJ1ZywgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlc2NjkyIGRlYnVnIG1hc2siKTsKK21vZHVsZV9wYXJhbShsZWQsIHVpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MobGVkLCAiVzY2OTIgTEVEIHN1cHBvcnQgYml0bWFzayAob25lIGJpdCBwZXIgY2FyZCkiKTsKK21vZHVsZV9wYXJhbShwb3RzLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHBvdHMsICJXNjY5MiBQT1RTIHN1cHBvcnQgYml0bWFzayAob25lIGJpdCBwZXIgY2FyZCkiKTsKKworc3RhdGljIGlubGluZSB1OAorUmVhZFc2NjkyKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgdTggb2Zmc2V0KQoreworCXJldHVybiBpbmIoY2FyZC0+YWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorV3JpdGVXNjY5MihzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQsIHU4IG9mZnNldCwgdTggdmFsdWUpCit7CisJb3V0Yih2YWx1ZSwgY2FyZC0+YWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTgKK1JlYWRXNjY5MkIoc3RydWN0IHc2NjkyX2NoICpiYywgdTggb2Zmc2V0KQoreworCXJldHVybiBpbmIoYmMtPmFkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1dyaXRlVzY2OTJCKHN0cnVjdCB3NjY5Ml9jaCAqYmMsIHU4IG9mZnNldCwgdTggdmFsdWUpCit7CisJb3V0Yih2YWx1ZSwgYmMtPmFkZHIgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZAorZW5hYmxlX2h3aXJxKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlXcml0ZVc2NjkyKGNhcmQsIFdfSU1BU0ssIGNhcmQtPmltYXNrKTsKK30KKworc3RhdGljIHZvaWQKK2Rpc2FibGVfaHdpcnEoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCVdyaXRlVzY2OTIoY2FyZCwgV19JTUFTSywgMHhmZik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpXNjY5MlZlcltdID0geyJWMDAiLCAiVjAxIiwgIlYxMCIsICJWMTEifTsKKworc3RhdGljIHZvaWQKK1c2NjkyVmVyc2lvbihzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJaW50IHZhbDsKKworCXZhbCA9IFJlYWRXNjY5MihjYXJkLCBXX0RfUkJDSCk7CisJcHJfbm90aWNlKCIlczogV2luYm9uZCBXNjY5MiB2ZXJzaW9uOiAlc1xuIiwgY2FyZC0+bmFtZSwKKwkJVzY2OTJWZXJbKHZhbCA+PiA2KSAmIDNdKTsKK30KKworc3RhdGljIHZvaWQKK3c2NjkyX2xlZF9oYW5kbGVyKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgaW50IG9uKQoreworCWlmICgoIShjYXJkLT5mbWFzayAmIGxlZCkpIHx8IGNhcmQtPnN1YnR5cGUgPT0gVzY2OTJfVVNSKQorCQlyZXR1cm47CisJaWYgKG9uKSB7CisJCWNhcmQtPnhkYXRhICY9IDB4ZmI7CS8qICBMRUQgT04gKi8KKwkJV3JpdGVXNjY5MihjYXJkLCBXX1hEQVRBLCBjYXJkLT54ZGF0YSk7CisJfSBlbHNlIHsKKwkJY2FyZC0+eGRhdGEgfD0gMHgwNDsJLyogIExFRCBPRkYgKi8KKwkJV3JpdGVXNjY5MihjYXJkLCBXX1hEQVRBLCBjYXJkLT54ZGF0YSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcGhfY29tbWFuZChzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQsIHU4IGNtZCkKK3sKKwlwcl9kZWJ1ZygiJXM6IHBoX2NvbW1hbmQgJXhcbiIsIGNhcmQtPm5hbWUsIGNtZCk7CisJV3JpdGVXNjY5MihjYXJkLCBXX0NJWCwgY21kKTsKK30KKworc3RhdGljIHZvaWQKK1c2NjkyX25ld19waChzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJaWYgKGNhcmQtPnN0YXRlID09IFdfTDFDTURfUlNUKQorCQlwaF9jb21tYW5kKGNhcmQsIFdfTDFDTURfRFJDKTsKKwlzY2hlZHVsZV9ldmVudCgmY2FyZC0+ZGNoLCBGTEdfUEhDSEFOR0UpOworfQorCitzdGF0aWMgdm9pZAorVzY2OTJfcGhfYmgoc3RydWN0IGRjaGFubmVsICpkY2gpCit7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkID0gZGNoLT5odzsKKworCXN3aXRjaCAoY2FyZC0+c3RhdGUpIHsKKwljYXNlIFdfTDFDTURfUlNUOgorCQlkY2gtPnN0YXRlID0gMDsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSFdfUkVTRVRfSU5EKTsKKwkJYnJlYWs7CisJY2FzZSBXX0wxSU5EX0NEOgorCQlkY2gtPnN0YXRlID0gMzsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSFdfREVBQ1RfQ05GKTsKKwkJYnJlYWs7CisJY2FzZSBXX0wxSU5EX0RSRDoKKwkJZGNoLT5zdGF0ZSA9IDM7CisJCWwxX2V2ZW50KGRjaC0+bDEsIEhXX0RFQUNUX0lORCk7CisJCWJyZWFrOworCWNhc2UgV19MMUlORF9DRToKKwkJZGNoLT5zdGF0ZSA9IDQ7CisJCWwxX2V2ZW50KGRjaC0+bDEsIEhXX1BPV0VSVVBfSU5EKTsKKwkJYnJlYWs7CisJY2FzZSBXX0wxSU5EX0xEOgorCQlpZiAoZGNoLT5zdGF0ZSA8PSA1KSB7CisJCQlkY2gtPnN0YXRlID0gNTsKKwkJCWwxX2V2ZW50KGRjaC0+bDEsIEFOWVNJR05BTCk7CisJCX0gZWxzZSB7CisJCQlkY2gtPnN0YXRlID0gODsKKwkJCWwxX2V2ZW50KGRjaC0+bDEsIExPU1RGUkFNSU5HKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdfTDFJTkRfQVJEOgorCQlkY2gtPnN0YXRlID0gNjsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSU5GTzIpOworCQlicmVhazsKKwljYXNlIFdfTDFJTkRfQUk4OgorCQlkY2gtPnN0YXRlID0gNzsKKwkJbDFfZXZlbnQoZGNoLT5sMSwgSU5GTzRfUDgpOworCQlicmVhazsKKwljYXNlIFdfTDFJTkRfQUkxMDoKKwkJZGNoLT5zdGF0ZSA9IDc7CisJCWwxX2V2ZW50KGRjaC0+bDEsIElORk80X1AxMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogVEUgdW5rbm93biBzdGF0ZSAlMDJ4IGRjaCBzdGF0ZSAlMDJ4XG4iLAorCQkJY2FyZC0+bmFtZSwgY2FyZC0+c3RhdGUsIGRjaC0+c3RhdGUpOworCQlicmVhazsKKwl9CisJcHJfZGVidWcoIiVzOiBURSBuZXdzdGF0ZSAlMDJ4XG4iLCBjYXJkLT5uYW1lLCBkY2gtPnN0YXRlKTsKK30KKworc3RhdGljIHZvaWQKK1c2NjkyX2VtcHR5X0RmaWZvKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgaW50IGNvdW50KQoreworCXN0cnVjdCBkY2hhbm5lbCAqZGNoID0gJmNhcmQtPmRjaDsKKwl1OCAqcHRyOworCisJcHJfZGVidWcoIiVzOiBlbXB0eV9EZmlmbyAlZFxuIiwgY2FyZC0+bmFtZSwgY291bnQpOworCWlmICghZGNoLT5yeF9za2IpIHsKKwkJZGNoLT5yeF9za2IgPSBtSV9hbGxvY19za2IoY2FyZC0+ZGNoLm1heGxlbiwgR0ZQX0FUT01JQyk7CisJCWlmICghZGNoLT5yeF9za2IpIHsKKwkJCXByX2luZm8oIiVzOiBEIHJlY2VpdmUgb3V0IG9mIG1lbW9yeVxuIiwgY2FyZC0+bmFtZSk7CisJCQlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBXX0RfQ01EUl9SQUNLKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoKGRjaC0+cnhfc2tiLT5sZW4gKyBjb3VudCkgPj0gZGNoLT5tYXhsZW4pIHsKKwkJcHJfZGVidWcoIiVzOiBlbXB0eV9EZmlmbyBvdmVycnVuICVkXG4iLCBjYXJkLT5uYW1lLAorCQkJZGNoLT5yeF9za2ItPmxlbiArIGNvdW50KTsKKwkJV3JpdGVXNjY5MihjYXJkLCBXX0RfQ01EUiwgV19EX0NNRFJfUkFDSyk7CisJCXJldHVybjsKKwl9CisJcHRyID0gc2tiX3B1dChkY2gtPnJ4X3NrYiwgY291bnQpOworCWluc2IoY2FyZC0+YWRkciArIFdfRF9SRklGTywgcHRyLCBjb3VudCk7CisJV3JpdGVXNjY5MihjYXJkLCBXX0RfQ01EUiwgV19EX0NNRFJfUkFDSyk7CisJaWYgKGRlYnVnICYgREVCVUdfSFdfREZJRk8pIHsKKwkJc25wcmludGYoY2FyZC0+bG9nLCA2MywgIkQtcmVjdiAlcyAlZCAiLAorCQkJY2FyZC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhjYXJkLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcHRyLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorVzY2OTJfZmlsbF9EZmlmbyhzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJc3RydWN0IGRjaGFubmVsICpkY2ggPSAmY2FyZC0+ZGNoOworCWludCBjb3VudDsKKwl1OCAqcHRyOworCXU4IGNtZCA9IFdfRF9DTURSX1hNUzsKKworCXByX2RlYnVnKCIlczogZmlsbF9EZmlmb1xuIiwgY2FyZC0+bmFtZSk7CisJaWYgKCFkY2gtPnR4X3NrYikKKwkJcmV0dXJuOworCWNvdW50ID0gZGNoLT50eF9za2ItPmxlbiAtIGRjaC0+dHhfaWR4OworCWlmIChjb3VudCA8PSAwKQorCQlyZXR1cm47CisJaWYgKGNvdW50ID4gV19EX0ZJRk9fVEhSRVNIKQorCQljb3VudCA9IFdfRF9GSUZPX1RIUkVTSDsKKwllbHNlCisJCWNtZCB8PSBXX0RfQ01EUl9YTUU7CisJcHRyID0gZGNoLT50eF9za2ItPmRhdGEgKyBkY2gtPnR4X2lkeDsKKwlkY2gtPnR4X2lkeCArPSBjb3VudDsKKwlvdXRzYihjYXJkLT5hZGRyICsgV19EX1hGSUZPLCBwdHIsIGNvdW50KTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBjbWQpOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMR19CVVNZX1RJTUVSLCAmZGNoLT5GbGFncykpIHsKKwkJcHJfZGVidWcoIiVzOiBmaWxsX0RmaWZvIGRidXN5dGltZXIgcnVubmluZ1xuIiwgY2FyZC0+bmFtZSk7CisJCWRlbF90aW1lcigmZGNoLT50aW1lcik7CisJfQorCWluaXRfdGltZXIoJmRjaC0+dGltZXIpOworCWRjaC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoKERCVVNZX1RJTUVSX1ZBTFVFICogSFopLzEwMDApOworCWFkZF90aW1lcigmZGNoLT50aW1lcik7CisJaWYgKGRlYnVnICYgREVCVUdfSFdfREZJRk8pIHsKKwkJc25wcmludGYoY2FyZC0+bG9nLCA2MywgIkQtc2VuZCAlcyAlZCAiLAorCQkJY2FyZC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhjYXJkLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcHRyLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorZF9yZXRyYW5zbWl0KHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlzdHJ1Y3QgZGNoYW5uZWwgKmRjaCA9ICZjYXJkLT5kY2g7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19CVVNZX1RJTUVSLCAmZGNoLT5GbGFncykpCisJCWRlbF90aW1lcigmZGNoLT50aW1lcik7CisjaWZkZWYgRklYTUUKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19MMV9CVVNZLCAmZGNoLT5GbGFncykpCisJCWRjaGFubmVsX3NjaGVkX2V2ZW50KGRjaCwgRF9DTEVBUkJVU1kpOworI2VuZGlmCisJaWYgKHRlc3RfYml0KEZMR19UWF9CVVNZLCAmZGNoLT5GbGFncykpIHsKKwkJLyogUmVzdGFydCBmcmFtZSAqLworCQlkY2gtPnR4X2lkeCA9IDA7CisJCVc2NjkyX2ZpbGxfRGZpZm8oY2FyZCk7CisJfSBlbHNlIGlmIChkY2gtPnR4X3NrYikgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQlwcl9pbmZvKCIlczogJXMgd2l0aG91dCBUWF9CVVNZXG4iLCBjYXJkLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXRlc3RfYW5kX3NldF9iaXQoRkxHX1RYX0JVU1ksICZkY2gtPkZsYWdzKTsKKwkJZGNoLT50eF9pZHggPSAwOworCQlXNjY5Ml9maWxsX0RmaWZvKGNhcmQpOworCX0gZWxzZSB7CisJCXByX2luZm8oIiVzOiBYRFUgbm8gVFhfQlVTWVxuIiwgY2FyZC0+bmFtZSk7CisJCWlmIChnZXRfbmV4dF9kZnJhbWUoZGNoKSkKKwkJCVc2NjkyX2ZpbGxfRGZpZm8oY2FyZCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3J4RChzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpIHsKKwl1OAlzdGF0OworCWludAljb3VudDsKKworCXN0YXQgPSBSZWFkVzY2OTIoY2FyZCwgV19EX1JTVEEpOworCWlmIChzdGF0ICYgKFdfRF9SU1RBX1JET1YgfCBXX0RfUlNUQV9DUkNFIHwgV19EX1JTVEFfUk1CKSkgeworCQlpZiAoc3RhdCAmIFdfRF9SU1RBX1JET1YpIHsKKwkJCXByX2RlYnVnKCIlczogRC1jaGFubmVsIFJET1ZcbiIsIGNhcmQtPm5hbWUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJY2FyZC0+ZGNoLmVycl9yeCsrOworI2VuZGlmCisJCX0KKwkJaWYgKHN0YXQgJiBXX0RfUlNUQV9DUkNFKSB7CisJCQlwcl9kZWJ1ZygiJXM6IEQtY2hhbm5lbCBDUkMgZXJyb3JcbiIsIGNhcmQtPm5hbWUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJY2FyZC0+ZGNoLmVycl9jcmMrKzsKKyNlbmRpZgorCQl9CisJCWlmIChzdGF0ICYgV19EX1JTVEFfUk1CKSB7CisJCQlwcl9kZWJ1ZygiJXM6IEQtY2hhbm5lbCBBQk9SVFxuIiwgY2FyZC0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQljYXJkLT5kY2guZXJyX3J4Kys7CisjZW5kaWYKKwkJfQorCQlpZiAoY2FyZC0+ZGNoLnJ4X3NrYikKKwkJCWRldl9rZnJlZV9za2IoY2FyZC0+ZGNoLnJ4X3NrYik7CisJCWNhcmQtPmRjaC5yeF9za2IgPSBOVUxMOworCQlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DTURSLCBXX0RfQ01EUl9SQUNLIHwgV19EX0NNRFJfUlJTVCk7CisJfSBlbHNlIHsKKwkJY291bnQgPSBSZWFkVzY2OTIoY2FyZCwgV19EX1JCQ0wpICYgKFdfRF9GSUZPX1RIUkVTSCAtIDEpOworCQlpZiAoY291bnQgPT0gMCkKKwkJCWNvdW50ID0gV19EX0ZJRk9fVEhSRVNIOworCQlXNjY5Ml9lbXB0eV9EZmlmbyhjYXJkLCBjb3VudCk7CisJCXJlY3ZfRGNoYW5uZWwoJmNhcmQtPmRjaCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3R4RChzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpIHsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZMR19CVVNZX1RJTUVSLCAmY2FyZC0+ZGNoLkZsYWdzKSkKKwkJZGVsX3RpbWVyKCZjYXJkLT5kY2gudGltZXIpOworCWlmIChjYXJkLT5kY2gudHhfc2tiICYmIGNhcmQtPmRjaC50eF9pZHggPCBjYXJkLT5kY2gudHhfc2tiLT5sZW4pIHsKKwkJVzY2OTJfZmlsbF9EZmlmbyhjYXJkKTsKKwl9IGVsc2UgeworCQlpZiAoY2FyZC0+ZGNoLnR4X3NrYikKKwkJCWRldl9rZnJlZV9za2IoY2FyZC0+ZGNoLnR4X3NrYik7CisJCWlmIChnZXRfbmV4dF9kZnJhbWUoJmNhcmQtPmRjaCkpCisJCQlXNjY5Ml9maWxsX0RmaWZvKGNhcmQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9zdGF0dXNEKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlzdHJ1Y3QgZGNoYW5uZWwgKmRjaCA9ICZjYXJkLT5kY2g7CisJdTggZXh2YWwsIHYxLCBjaXI7CisKKwlleHZhbCA9IFJlYWRXNjY5MihjYXJkLCBXX0RfRVhJUik7CisKKwlwcl9kZWJ1ZygiJXM6IERfRVhJUiAlMDJ4XG4iLCBjYXJkLT5uYW1lLCBleHZhbCk7CisJaWYgKGV4dmFsICYgKFdfRF9FWElfWERVTiB8IFdfRF9FWElfWENPTCkpIHsKKwkJLyogVHJhbnNtaXQgdW5kZXJydW4vY29sbGlzaW9uICovCisJCXByX2RlYnVnKCIlczogRC1jaGFubmVsIHVuZGVycnVuL2NvbGxpc2lvblxuIiwgY2FyZC0+bmFtZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCWRjaC0+ZXJyX3R4Kys7CisjZW5kaWYKKwkJZF9yZXRyYW5zbWl0KGNhcmQpOworCX0KKwlpZiAoZXh2YWwgJiBXX0RfRVhJX1JET1YpIHsJLyogUkRPViAqLworCQlwcl9kZWJ1ZygiJXM6IEQtY2hhbm5lbCBSRE9WXG4iLCBjYXJkLT5uYW1lKTsKKwkJV3JpdGVXNjY5MihjYXJkLCBXX0RfQ01EUiwgV19EX0NNRFJfUlJTVCk7CisJfQorCWlmIChleHZhbCAmIFdfRF9FWElfVElOMikJLyogVElOMiAtIG5ldmVyICovCisJCXByX2RlYnVnKCIlczogc3B1cmlvdXMgVElOMiBpbnRlcnJ1cHRcbiIsIGNhcmQtPm5hbWUpOworCWlmIChleHZhbCAmIFdfRF9FWElfTU9DKSB7CS8qIE1PQyAtIG5vdCBzdXBwb3J0ZWQgKi8KKwkJdjEgPSBSZWFkVzY2OTIoY2FyZCwgV19NT1NSKTsKKwkJcHJfZGVidWcoIiVzOiBzcHVyaW91cyBNT0MgaW50ZXJydXB0IE1PU1IgJTAyeFxuIiwKKwkJCWNhcmQtPm5hbWUsIHYxKTsKKwl9CisJaWYgKGV4dmFsICYgV19EX0VYSV9JU0MpIHsJLyogSVNDIC0gTGV2ZWwxIGNoYW5nZSAqLworCQljaXIgPSBSZWFkVzY2OTIoY2FyZCwgV19DSVIpOworCQlwcl9kZWJ1ZygiJXM6IElTQyBDSVIgJTAyWFxuIiwgY2FyZC0+bmFtZSwgY2lyKTsKKwkJaWYgKGNpciAmIFdfQ0lSX0lDQykgeworCQkJdjEgPSBjaXIgJiBXX0NJUl9DT0RfTUFTSzsKKwkJCXByX2RlYnVnKCIlczogcGhfc3RhdGVfY2hhbmdlICV4IC0+ICV4XG4iLCBjYXJkLT5uYW1lLAorCQkJCWRjaC0+c3RhdGUsIHYxKTsKKwkJCWNhcmQtPnN0YXRlID0gdjE7CisJCQlpZiAoY2FyZC0+Zm1hc2sgJiBsZWQpIHsKKwkJCQlzd2l0Y2ggKHYxKSB7CisJCQkJY2FzZSBXX0wxSU5EX0FJODoKKwkJCQljYXNlIFdfTDFJTkRfQUkxMDoKKwkJCQkJdzY2OTJfbGVkX2hhbmRsZXIoY2FyZCwgMSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXc2NjkyX2xlZF9oYW5kbGVyKGNhcmQsIDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlXNjY5Ml9uZXdfcGgoY2FyZCk7CisJCX0KKwkJaWYgKGNpciAmIFdfQ0lSX1NDQykgeworCQkJdjEgPSBSZWFkVzY2OTIoY2FyZCwgV19TUVIpOworCQkJcHJfZGVidWcoIiVzOiBTQ0MgU1FSICUwMlhcbiIsIGNhcmQtPm5hbWUsIHYxKTsKKwkJfQorCX0KKwlpZiAoZXh2YWwgJiBXX0RfRVhJX1dFWFApCisJCXByX2RlYnVnKCIlczogc3B1cmlvdXMgV0VYUCBpbnRlcnJ1cHQhXG4iLCBjYXJkLT5uYW1lKTsKKwlpZiAoZXh2YWwgJiBXX0RfRVhJX1RFWFApCisJCXByX2RlYnVnKCIlczogc3B1cmlvdXMgVEVYUCBpbnRlcnJ1cHQhXG4iLCBjYXJkLT5uYW1lKTsKK30KKworc3RhdGljIHZvaWQKK1c2NjkyX2VtcHR5X0JmaWZvKHN0cnVjdCB3NjY5Ml9jaCAqd2NoLCBpbnQgY291bnQpCit7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkID0gd2NoLT5iY2guaHc7CisJdTggKnB0cjsKKworCXByX2RlYnVnKCIlczogZW1wdHlfQmZpZm8gJWRcbiIsIGNhcmQtPm5hbWUsIGNvdW50KTsKKwlpZiAodW5saWtlbHkod2NoLT5iY2guc3RhdGUgPT0gSVNETl9QX05PTkUpKSB7CisJCXByX2RlYnVnKCIlczogZW1wdHlfQmZpZm8gSVNETl9QX05PTkVcbiIsIGNhcmQtPm5hbWUpOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9DTURSLCBXX0JfQ01EUl9SQUNLIHwgV19CX0NNRFJfUkFDVCk7CisJCWlmICh3Y2gtPmJjaC5yeF9za2IpCisJCQlza2JfdHJpbSh3Y2gtPmJjaC5yeF9za2IsIDApOworCQlyZXR1cm47CisJfQorCWlmICghd2NoLT5iY2gucnhfc2tiKSB7CisJCXdjaC0+YmNoLnJ4X3NrYiA9IG1JX2FsbG9jX3NrYih3Y2gtPmJjaC5tYXhsZW4sIEdGUF9BVE9NSUMpOworCQlpZiAodW5saWtlbHkoIXdjaC0+YmNoLnJ4X3NrYikpIHsKKwkJCXByX2luZm8oIiVzOiBCIHJlY2VpdmUgb3V0IG9mIG1lbW9yeVxuIiwgY2FyZC0+bmFtZSk7CisJCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9DTURSLCBXX0JfQ01EUl9SQUNLIHwKKwkJCQlXX0JfQ01EUl9SQUNUKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAod2NoLT5iY2gucnhfc2tiLT5sZW4gKyBjb3VudCA+IHdjaC0+YmNoLm1heGxlbikgeworCQlwcl9kZWJ1ZygiJXM6IGVtcHR5X0JmaWZvIGluY29taW5nIHBhY2tldCB0b28gbGFyZ2VcbiIsCisJCQljYXJkLT5uYW1lKTsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUkFDSyB8IFdfQl9DTURSX1JBQ1QpOworCQlza2JfdHJpbSh3Y2gtPmJjaC5yeF9za2IsIDApOworCQlyZXR1cm47CisJfQorCXB0ciA9IHNrYl9wdXQod2NoLT5iY2gucnhfc2tiLCBjb3VudCk7CisJaW5zYih3Y2gtPmFkZHIgKyBXX0JfUkZJRk8sIHB0ciwgY291bnQpOworCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JBQ0sgfCBXX0JfQ01EUl9SQUNUKTsKKwlpZiAoZGVidWcgJiBERUJVR19IV19ERklGTykgeworCQlzbnByaW50ZihjYXJkLT5sb2csIDYzLCAiQiUxZC1yZWN2ICVzICVkICIsCisJCQl3Y2gtPmJjaC5uciwgY2FyZC0+bmFtZSwgY291bnQpOworCQlwcmludF9oZXhfZHVtcF9ieXRlcyhjYXJkLT5sb2csIERVTVBfUFJFRklYX09GRlNFVCwgcHRyLCBjb3VudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorVzY2OTJfZmlsbF9CZmlmbyhzdHJ1Y3QgdzY2OTJfY2ggKndjaCkKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSB3Y2gtPmJjaC5odzsKKwlpbnQgY291bnQ7CisJdTggKnB0ciwgY21kID0gV19CX0NNRFJfUkFDVCB8IFdfQl9DTURSX1hNUzsKKworCXByX2RlYnVnKCIlczogZmlsbCBCZmlmb1xuIiwgY2FyZC0+bmFtZSk7CisJaWYgKCF3Y2gtPmJjaC50eF9za2IpCisJCXJldHVybjsKKwljb3VudCA9IHdjaC0+YmNoLnR4X3NrYi0+bGVuIC0gd2NoLT5iY2gudHhfaWR4OworCWlmIChjb3VudCA8PSAwKQorCQlyZXR1cm47CisJcHRyID0gd2NoLT5iY2gudHhfc2tiLT5kYXRhICsgd2NoLT5iY2gudHhfaWR4OworCWlmIChjb3VudCA+IFdfQl9GSUZPX1RIUkVTSCkKKwkJY291bnQgPSBXX0JfRklGT19USFJFU0g7CisJZWxzZSBpZiAodGVzdF9iaXQoRkxHX0hETEMsICZ3Y2gtPmJjaC5GbGFncykpCisJCWNtZCB8PSBXX0JfQ01EUl9YTUU7CisKKwlwcl9kZWJ1ZygiJXM6IGZpbGwgQmZpZm8lZC8lZFxuIiwgY2FyZC0+bmFtZSwKKwkJCWNvdW50LCB3Y2gtPmJjaC50eF9pZHgpOworCXdjaC0+YmNoLnR4X2lkeCArPSBjb3VudDsKKwlvdXRzYih3Y2gtPmFkZHIgKyBXX0JfWEZJRk8sIHB0ciwgY291bnQpOworCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIGNtZCk7CisJaWYgKGRlYnVnICYgREVCVUdfSFdfREZJRk8pIHsKKwkJc25wcmludGYoY2FyZC0+bG9nLCA2MywgIkIlMWQtc2VuZCAlcyAlZCAiLAorCQkJd2NoLT5iY2gubnIsIGNhcmQtPm5hbWUsIGNvdW50KTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoY2FyZC0+bG9nLCBEVU1QX1BSRUZJWF9PRkZTRVQsIHB0ciwgY291bnQpOworCX0KK30KKworc3RhdGljIGludAorc2V0dm9sdW1lKHN0cnVjdCB3NjY5Ml9jaCAqd2NoLCBpbnQgbWljLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3NjY5Ml9odyAqY2FyZCA9IHdjaC0+YmNoLmh3OworCXUxNiAqdm9sID0gKHUxNiAqKXNrYi0+ZGF0YTsKKwl1OCB2YWw7CisKKwlpZiAoKCEoY2FyZC0+Zm1hc2sgJiBwb3RzKSkgfHwKKwkgICAgIXRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJndjaC0+YmNoLkZsYWdzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHNrYi0+bGVuIDwgMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCp2b2wgPiA3KQorCQlyZXR1cm4gLUVJTlZBTDsKKwl2YWwgPSAqdm9sICYgNzsKKwl2YWwgPSA3IC0gdmFsOworCWlmIChtaWMpIHsKKwkJdmFsIDw8PSAzOworCQljYXJkLT54YWRkciAmPSAweGM3OworCX0gZWxzZSB7CisJCWNhcmQtPnhhZGRyICY9IDB4Zjg7CisJfQorCWNhcmQtPnhhZGRyIHw9IHZhbDsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfWEFERFIsIGNhcmQtPnhhZGRyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZW5hYmxlX3BvdHMoc3RydWN0IHc2NjkyX2NoICp3Y2gpCit7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkID0gd2NoLT5iY2guaHc7CisKKwlpZiAoKCEoY2FyZC0+Zm1hc2sgJiBwb3RzKSkgfHwKKwkgICAgIXRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJndjaC0+YmNoLkZsYWdzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJd2NoLT5iX21vZGUgfD0gV19CX01PREVfRVBDTSB8IFdfQl9NT0RFX0JTVzA7CisJV3JpdGVXNjY5MkIod2NoLCBXX0JfTU9ERSwgd2NoLT5iX21vZGUpOworCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9YUlNUKTsKKwljYXJkLT5wY3RsIHw9ICgod2NoLT5iY2gubnIgJiAyKSA/IFdfUENUTF9QQ1ggOiAwKTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfUENUTCwgY2FyZC0+cGN0bCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Rpc2FibGVfcG90cyhzdHJ1Y3QgdzY2OTJfY2ggKndjaCkKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSB3Y2gtPmJjaC5odzsKKworCWlmICghKGNhcmQtPmZtYXNrICYgcG90cykpCisJCXJldHVybiAtRU5PREVWOworCXdjaC0+Yl9tb2RlICY9IH4oV19CX01PREVfRVBDTSB8IFdfQl9NT0RFX0JTVzApOworCVdyaXRlVzY2OTJCKHdjaCwgV19CX01PREUsIHdjaC0+Yl9tb2RlKTsKKwlXcml0ZVc2NjkyQih3Y2gsIFdfQl9DTURSLCBXX0JfQ01EUl9SUlNUIHwgV19CX0NNRFJfUkFDVCB8CisJCVdfQl9DTURSX1hSU1QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3NjY5Ml9tb2RlKHN0cnVjdCB3NjY5Ml9jaCAqd2NoLCB1MzIgcHIpCit7CisJc3RydWN0IHc2NjkyX2h3CSpjYXJkOworCisJY2FyZCA9IHdjaC0+YmNoLmh3OworCXByX2RlYnVnKCIlczogQiVkIHByb3RvY29sICV4LS0+JXhcbiIsIGNhcmQtPm5hbWUsCisJCXdjaC0+YmNoLm5yLCB3Y2gtPmJjaC5zdGF0ZSwgcHIpOworCXN3aXRjaCAocHIpIHsKKwljYXNlIElTRE5fUF9OT05FOgorCQlpZiAoKGNhcmQtPmZtYXNrICYgcG90cykgJiYgKHdjaC0+Yl9tb2RlICYgV19CX01PREVfRVBDTSkpCisJCQlkaXNhYmxlX3BvdHMod2NoKTsKKwkJd2NoLT5iX21vZGUgPSAwOworCQltSVNETl9jbGVhcl9iY2hhbm5lbCgmd2NoLT5iY2gpOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9NT0RFLCB3Y2gtPmJfbW9kZSk7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9YUlNUKTsKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19IRExDLCAmd2NoLT5iY2guRmxhZ3MpOworCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmd2NoLT5iY2guRmxhZ3MpOworCQlicmVhazsKKwljYXNlIElTRE5fUF9CX1JBVzoKKwkJd2NoLT5iX21vZGUgPSBXX0JfTU9ERV9NTVM7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX01PREUsIHdjaC0+Yl9tb2RlKTsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfRVhJTSwgMCk7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9SQUNUIHwKKwkJCVdfQl9DTURSX1hSU1QpOworCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19UUkFOU1BBUkVOVCwgJndjaC0+YmNoLkZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBJU0ROX1BfQl9IRExDOgorCQl3Y2gtPmJfbW9kZSA9IFdfQl9NT0RFX0lURjsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfTU9ERSwgd2NoLT5iX21vZGUpOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9BRE0xLCAweGZmKTsKKwkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQURNMiwgMHhmZik7CisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0VYSU0sIDApOworCQlXcml0ZVc2NjkyQih3Y2gsIFdfQl9DTURSLCBXX0JfQ01EUl9SUlNUIHwgV19CX0NNRFJfUkFDVCB8CisJCQlXX0JfQ01EUl9YUlNUKTsKKwkJdGVzdF9hbmRfc2V0X2JpdChGTEdfSERMQywgJndjaC0+YmNoLkZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6IHByb3RvY29sICV4IG5vdCBrbm93blxuIiwgY2FyZC0+bmFtZSwgcHIpOworCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCX0KKwl3Y2gtPmJjaC5zdGF0ZSA9IHByOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9uZXh0KHN0cnVjdCB3NjY5Ml9jaCAqd2NoKQoreworCWlmICh3Y2gtPmJjaC50eF9za2IgJiYgd2NoLT5iY2gudHhfaWR4IDwgd2NoLT5iY2gudHhfc2tiLT5sZW4pCisJCVc2NjkyX2ZpbGxfQmZpZm8od2NoKTsKKwllbHNlIHsKKwkJaWYgKHdjaC0+YmNoLnR4X3NrYikgeworCQkJLyogc2VuZCBjb25maXJtLCBvbiB0cmFucywgZnJlZSBvbiBoZGxjLiAqLworCQkJaWYgKHRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJndjaC0+YmNoLkZsYWdzKSkKKwkJCQljb25maXJtX0JzZW5kKCZ3Y2gtPmJjaCk7CisJCQlkZXZfa2ZyZWVfc2tiKHdjaC0+YmNoLnR4X3NrYik7CisJCX0KKwkJaWYgKGdldF9uZXh0X2JmcmFtZSgmd2NoLT5iY2gpKQorCQkJVzY2OTJfZmlsbF9CZmlmbyh3Y2gpOworCX0KK30KKworc3RhdGljIHZvaWQKK1c2NjkyQl9pbnRlcnJ1cHQoc3RydWN0IHc2NjkyX2h3ICpjYXJkLCBpbnQgY2gpCit7CisJc3RydWN0IHc2NjkyX2NoCSp3Y2ggPSAmY2FyZC0+YmNbY2hdOworCWludAkJY291bnQ7CisJdTgJCXN0YXQsIHN0YXIgPSAwOworCisJc3RhdCA9IFJlYWRXNjY5MkIod2NoLCBXX0JfRVhJUik7CisJcHJfZGVidWcoIiVzOiBCJWQgRVhJUiAlMDJ4XG4iLCBjYXJkLT5uYW1lLCB3Y2gtPmJjaC5uciwgc3RhdCk7CisJaWYgKHN0YXQgJiBXX0JfRVhJX1JNRSkgeworCQlzdGFyID0gUmVhZFc2NjkyQih3Y2gsIFdfQl9TVEFSKTsKKwkJaWYgKHN0YXIgJiAoV19CX1NUQVJfUkRPViB8IFdfQl9TVEFSX0NSQ0UgfCBXX0JfU1RBUl9STUIpKSB7CisJCQlpZiAoKHN0YXIgJiBXX0JfU1RBUl9SRE9WKSAmJgorCQkJICAgIHRlc3RfYml0KEZMR19BQ1RJVkUsICZ3Y2gtPmJjaC5GbGFncykpIHsKKwkJCQlwcl9kZWJ1ZygiJXM6IEIlZCBSRE9WIHByb3RvPSV4XG4iLCBjYXJkLT5uYW1lLAorCQkJCQl3Y2gtPmJjaC5uciwgd2NoLT5iY2guc3RhdGUpOworI2lmZGVmIEVSUk9SX1NUQVRJU1RJQworCQkJCXdjaC0+YmNoLmVycl9yZG8rKzsKKyNlbmRpZgorCQkJfQorCQkJaWYgKHRlc3RfYml0KEZMR19IRExDLCAmd2NoLT5iY2guRmxhZ3MpKSB7CisJCQkJaWYgKHN0YXIgJiBXX0JfU1RBUl9DUkNFKSB7CisJCQkJCXByX2RlYnVnKCIlczogQiVkIENSQyBlcnJvclxuIiwKKwkJCQkJCWNhcmQtPm5hbWUsIHdjaC0+YmNoLm5yKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCQkJd2NoLT5iY2guZXJyX2NyYysrOworI2VuZGlmCisJCQkJfQorCQkJCWlmIChzdGFyICYgV19CX1NUQVJfUk1CKSB7CisJCQkJCXByX2RlYnVnKCIlczogQiVkIG1lc3NhZ2UgYWJvcnRcbiIsCisJCQkJCQljYXJkLT5uYW1lLCB3Y2gtPmJjaC5ucik7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQkJCXdjaC0+YmNoLmVycl9pbnYrKzsKKyNlbmRpZgorCQkJCX0KKwkJCX0KKwkJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JBQ0sgfAorCQkJCVdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9SQUNUKTsKKwkJCWlmICh3Y2gtPmJjaC5yeF9za2IpCisJCQkJc2tiX3RyaW0od2NoLT5iY2gucnhfc2tiLCAwKTsKKwkJfSBlbHNlIHsKKwkJCWNvdW50ID0gUmVhZFc2NjkyQih3Y2gsIFdfQl9SQkNMKSAmCisJCQkJKFdfQl9GSUZPX1RIUkVTSCAtIDEpOworCQkJaWYgKGNvdW50ID09IDApCisJCQkJY291bnQgPSBXX0JfRklGT19USFJFU0g7CisJCQlXNjY5Ml9lbXB0eV9CZmlmbyh3Y2gsIGNvdW50KTsKKwkJCXJlY3ZfQmNoYW5uZWwoJndjaC0+YmNoLCAwKTsKKwkJfQorCX0KKwlpZiAoc3RhdCAmIFdfQl9FWElfUk1SKSB7CisJCWlmICghKHN0YXQgJiBXX0JfRVhJX1JNRSkpCisJCQlzdGFyID0gUmVhZFc2NjkyQih3Y2gsIFdfQl9TVEFSKTsKKwkJaWYgKHN0YXIgJiBXX0JfU1RBUl9SRE9WKSB7CisJCQlwcl9kZWJ1ZygiJXM6IEIlZCBSRE9WIHByb3RvPSV4XG4iLCBjYXJkLT5uYW1lLAorCQkJCXdjaC0+YmNoLm5yLCB3Y2gtPmJjaC5zdGF0ZSk7CisjaWZkZWYgRVJST1JfU1RBVElTVElDCisJCQl3Y2gtPmJjaC5lcnJfcmRvKys7CisjZW5kaWYKKwkJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1JBQ0sgfAorCQkJCVdfQl9DTURSX1JSU1QgfCBXX0JfQ01EUl9SQUNUKTsKKwkJfSBlbHNlIHsKKwkJCVc2NjkyX2VtcHR5X0JmaWZvKHdjaCwgV19CX0ZJRk9fVEhSRVNIKTsKKwkJCWlmICh0ZXN0X2JpdChGTEdfVFJBTlNQQVJFTlQsICZ3Y2gtPmJjaC5GbGFncykgJiYKKwkJCSAgICB3Y2gtPmJjaC5yeF9za2IgJiYgKHdjaC0+YmNoLnJ4X3NrYi0+bGVuID4gMCkpCisJCQkJcmVjdl9CY2hhbm5lbCgmd2NoLT5iY2gsIDApOworCQl9CisJfQorCWlmIChzdGF0ICYgV19CX0VYSV9SRE9WKSB7CisJCS8qIG9ubHkgaWYgaXQgaXMgbm90IGhhbmRsZWQgeWV0ICovCisJCWlmICghKHN0YXIgJiBXX0JfU1RBUl9SRE9WKSkgeworCQkJcHJfZGVidWcoIiVzOiBCJWQgUkRPViBJUlEgcHJvdG89JXhcbiIsIGNhcmQtPm5hbWUsCisJCQkJd2NoLT5iY2gubnIsIHdjaC0+YmNoLnN0YXRlKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCXdjaC0+YmNoLmVycl9yZG8rKzsKKyNlbmRpZgorCQkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfUkFDSyB8CisJCQkJV19CX0NNRFJfUlJTVCB8IFdfQl9DTURSX1JBQ1QpOworCQl9CisJfQorCWlmIChzdGF0ICYgV19CX0VYSV9YRlIpIHsKKwkJaWYgKCEoc3RhdCAmIChXX0JfRVhJX1JNRSB8IFdfQl9FWElfUk1SKSkpIHsKKwkJCXN0YXIgPSBSZWFkVzY2OTJCKHdjaCwgV19CX1NUQVIpOworCQkJcHJfZGVidWcoIiVzOiBCJWQgc3RhciAlMDJ4XG4iLCBjYXJkLT5uYW1lLAorCQkJCXdjaC0+YmNoLm5yLCBzdGFyKTsKKwkJfQorCQlpZiAoc3RhciAmIFdfQl9TVEFSX1hET1cpIHsKKwkJCXByX2RlYnVnKCIlczogQiVkIFhET1cgcHJvdG89JXhcbiIsIGNhcmQtPm5hbWUsCisJCQkJd2NoLT5iY2gubnIsIHdjaC0+YmNoLnN0YXRlKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJCXdjaC0+YmNoLmVycl94ZHUrKzsKKyNlbmRpZgorCQkJV3JpdGVXNjY5MkIod2NoLCBXX0JfQ01EUiwgV19CX0NNRFJfWFJTVCB8CisJCQkJV19CX0NNRFJfUkFDVCk7CisJCQkvKiByZXNlbmQgKi8KKwkJCWlmICh3Y2gtPmJjaC50eF9za2IpIHsKKwkJCQlpZiAoIXRlc3RfYml0KEZMR19UUkFOU1BBUkVOVCwgJndjaC0+YmNoLkZsYWdzKSkKKwkJCQkJd2NoLT5iY2gudHhfaWR4ID0gMDsKKwkJCX0KKwkJfQorCQlzZW5kX25leHQod2NoKTsKKwkJaWYgKHN0YXQgJiBXX0JfRVhJX1hEVU4pCisJCQlyZXR1cm47IC8qIGhhbmRsZSBYRE9XIG9ubHkgb25jZSAqLworCX0KKwlpZiAoc3RhdCAmIFdfQl9FWElfWERVTikgeworCQlwcl9kZWJ1ZygiJXM6IEIlZCBYRFVOIHByb3RvPSV4XG4iLCBjYXJkLT5uYW1lLAorCQkJd2NoLT5iY2gubnIsIHdjaC0+YmNoLnN0YXRlKTsKKyNpZmRlZiBFUlJPUl9TVEFUSVNUSUMKKwkJd2NoLT5iY2guZXJyX3hkdSsrOworI2VuZGlmCisJCVdyaXRlVzY2OTJCKHdjaCwgV19CX0NNRFIsIFdfQl9DTURSX1hSU1QgfCBXX0JfQ01EUl9SQUNUKTsKKwkJLyogcmVzZW5kICovCisJCWlmICh3Y2gtPmJjaC50eF9za2IpIHsKKwkJCWlmICghdGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmd2NoLT5iY2guRmxhZ3MpKQorCQkJCXdjaC0+YmNoLnR4X2lkeCA9IDA7CisJCX0KKwkJc2VuZF9uZXh0KHdjaCk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3c2NjkyX2lycShpbnQgaW50bm8sIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdzY2OTJfaHcJKmNhcmQgPSBkZXZfaWQ7CisJdTgJCWlzdGE7CisKKwlzcGluX2xvY2soJmNhcmQtPmxvY2spOworCWlzdGEgPSBSZWFkVzY2OTIoY2FyZCwgV19JU1RBKTsKKwlpZiAoKGlzdGEgfCBjYXJkLT5pbWFzaykgPT0gY2FyZC0+aW1hc2spIHsKKwkJLyogcG9zc2libGUgYSBzaGFyZWQgIElSUSByZXFlc3QgKi8KKwkJc3Bpbl91bmxvY2soJmNhcmQtPmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCWNhcmQtPmlycWNudCsrOworCXByX2RlYnVnKCIlczogaXN0YSAlMDJ4XG4iLCBjYXJkLT5uYW1lLCBpc3RhKTsKKwlpc3RhICY9IH5jYXJkLT5pbWFzazsKKwlpZiAoaXN0YSAmIFdfSU5UX0IxX0VYSSkKKwkJVzY2OTJCX2ludGVycnVwdChjYXJkLCAwKTsKKwlpZiAoaXN0YSAmIFdfSU5UX0IyX0VYSSkKKwkJVzY2OTJCX2ludGVycnVwdChjYXJkLCAxKTsKKwlpZiAoaXN0YSAmIFdfSU5UX0RfUk1FKQorCQloYW5kbGVfcnhEKGNhcmQpOworCWlmIChpc3RhICYgV19JTlRfRF9STVIpCisJCVc2NjkyX2VtcHR5X0RmaWZvKGNhcmQsIFdfRF9GSUZPX1RIUkVTSCk7CisJaWYgKGlzdGEgJiBXX0lOVF9EX1hGUikKKwkJaGFuZGxlX3R4RChjYXJkKTsKKwlpZiAoaXN0YSAmIFdfSU5UX0RfRVhJKQorCQloYW5kbGVfc3RhdHVzRChjYXJkKTsKKwlpZiAoaXN0YSAmIChXX0lOVF9YSU5UMCB8IFdfSU5UX1hJTlQxKSkgLyogWElOVDAvMSAtIG5ldmVyICovCisJCXByX2RlYnVnKCIlczogVzY2OTIgc3B1cmlvdXMgWElOVCFcbiIsIGNhcmQtPm5hbWUpOworLyogRW5kIElSUSBIYW5kbGVyICovCisJc3Bpbl91bmxvY2soJmNhcmQtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK2RidXN5X3RpbWVyX2hhbmRsZXIoc3RydWN0IGRjaGFubmVsICpkY2gpCit7CisJc3RydWN0IHc2NjkyX2h3CSpjYXJkID0gZGNoLT5odzsKKwlpbnQJCXJiY2gsIHN0YXI7CisJdV9sb25nCQlmbGFnczsKKworCWlmICh0ZXN0X2JpdChGTEdfQlVTWV9USU1FUiwgJmRjaC0+RmxhZ3MpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXJiY2ggPSBSZWFkVzY2OTIoY2FyZCwgV19EX1JCQ0gpOworCQlzdGFyID0gUmVhZFc2NjkyKGNhcmQsIFdfRF9TVEFSKTsKKwkJcHJfZGVidWcoIiVzOiBELUNoYW5uZWwgQnVzeSBSQkNIICUwMnggU1RBUiAlMDJ4XG4iLAorCQkJY2FyZC0+bmFtZSwgcmJjaCwgc3Rhcik7CisJCWlmIChzdGFyICYgV19EX1NUQVJfWEJaKQkvKiBELUNoYW5uZWwgQnVzeSAqLworCQkJdGVzdF9hbmRfc2V0X2JpdChGTEdfTDFfQlVTWSwgJmRjaC0+RmxhZ3MpOworCQllbHNlIHsKKwkJCS8qIGRpc2NhcmQgZnJhbWU7IHJlc2V0IHRyYW5zY2VpdmVyICovCisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0JVU1lfVElNRVIsICZkY2gtPkZsYWdzKTsKKwkJCWlmIChkY2gtPnR4X2lkeCkKKwkJCQlkY2gtPnR4X2lkeCA9IDA7CisJCQllbHNlCisJCQkJcHJfaW5mbygiJXM6IFc2NjkyIEQtQ2hhbm5lbCBCdXN5IG5vIHR4X2lkeFxuIiwKKwkJCQkJY2FyZC0+bmFtZSk7CisJCQkvKiBUcmFuc21pdHRlciByZXNldCAqLworCQkJV3JpdGVXNjY5MihjYXJkLCBXX0RfQ01EUiwgV19EX0NNRFJfWFJTVCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCX0KK30KKwordm9pZCBpbml0VzY2OTIoc3RydWN0IHc2NjkyX2h3ICpjYXJkKQoreworCXU4CXZhbDsKKworCWNhcmQtPmRjaC50aW1lci5mdW5jdGlvbiA9ICh2b2lkICopZGJ1c3lfdGltZXJfaGFuZGxlcjsKKwljYXJkLT5kY2gudGltZXIuZGF0YSA9ICh1X2xvbmcpJmNhcmQtPmRjaDsKKwlpbml0X3RpbWVyKCZjYXJkLT5kY2gudGltZXIpOworCXc2NjkyX21vZGUoJmNhcmQtPmJjWzBdLCBJU0ROX1BfTk9ORSk7CisJdzY2OTJfbW9kZSgmY2FyZC0+YmNbMV0sIElTRE5fUF9OT05FKTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9DVEwsIDB4MDApOworCWRpc2FibGVfaHdpcnEoY2FyZCk7CisJV3JpdGVXNjY5MihjYXJkLCBXX0RfU0FNLCAweGZmKTsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9UQU0sIDB4ZmYpOworCVdyaXRlVzY2OTIoY2FyZCwgV19EX01PREUsIFdfRF9NT0RFX1JBQ1QpOworCWNhcmQtPnN0YXRlID0gV19MMUNNRF9SU1Q7CisJcGhfY29tbWFuZChjYXJkLCBXX0wxQ01EX1JTVCk7CisJcGhfY29tbWFuZChjYXJkLCBXX0wxQ01EX0VDSyk7CisJLyogZW5hYmxlIGFsbCBJUlEgYnV0IGV4dGVybiAqLworCWNhcmQtPmltYXNrID0gMHgxODsKKwlXcml0ZVc2NjkyKGNhcmQsIFdfRF9FWElNLCAweDAwKTsKKwlXcml0ZVc2NjkyQigmY2FyZC0+YmNbMF0sIFdfQl9FWElNLCAwKTsKKwlXcml0ZVc2NjkyQigmY2FyZC0+YmNbMV0sIFdfQl9FWElNLCAwKTsKKwkvKiBSZXNldCBELWNoYW4gcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyICovCisJV3JpdGVXNjY5MihjYXJkLCBXX0RfQ01EUiwgV19EX0NNRFJfUlJTVCB8IFdfRF9DTURSX1hSU1QpOworCS8qIFJlc2V0IEItY2hhbiByZWNlaXZlciBhbmQgdHJhbnNtaXR0ZXIgKi8KKwlXcml0ZVc2NjkyQigmY2FyZC0+YmNbMF0sIFdfQl9DTURSLCBXX0JfQ01EUl9SUlNUIHwgV19CX0NNRFJfWFJTVCk7CisJV3JpdGVXNjY5MkIoJmNhcmQtPmJjWzFdLCBXX0JfQ01EUiwgV19CX0NNRFJfUlJTVCB8IFdfQl9DTURSX1hSU1QpOworCS8qIGVuYWJsZSBwZXJpcGhlcmFsICovCisJaWYgKGNhcmQtPnN1YnR5cGUgPT0gVzY2OTJfVVNSKSB7CisJCS8qIHNlZW1zIHRoYXQgVVNSIGltcGxlbWVudGVkIHNvbWUgcG93ZXIgY29udHJvbCBmZWF0dXJlcworCQkgKiBQaW4gNzkgaXMgY29ubmVjdGVkIHRvIHRoZSBvc2NpbGF0b3IgY2lyY3VpdCBzbyB3ZQorCQkgKiBoYXZlIHRvIGhhbmRsZSBpdCBoZXJlCisJCSAqLworCQljYXJkLT5wY3RsID0gMHg4MDsKKwkJY2FyZC0+eGRhdGEgPSAwOworCQlXcml0ZVc2NjkyKGNhcmQsIFdfUENUTCwgY2FyZC0+cGN0bCk7CisJCVdyaXRlVzY2OTIoY2FyZCwgV19YREFUQSwgY2FyZC0+eGRhdGEpOworCX0gZWxzZSB7CisJCWNhcmQtPnBjdGwgPSBXX1BDVExfT0U1IHwgV19QQ1RMX09FNCB8IFdfUENUTF9PRTIgfAorCQkJV19QQ1RMX09FMSB8IFdfUENUTF9PRTA7CisJCWNhcmQtPnhhZGRyID0gMHgwMDsvKiBhbGwgc3cgb2ZmICovCisJCWlmIChjYXJkLT5mbWFzayAmIHBvdHMpCisJCQljYXJkLT54ZGF0YSB8PSAweDA2OwkvKiAgUE9XRVIgVVAvIExFRCBPRkYgLyBBTEFXICovCisJCWlmIChjYXJkLT5mbWFzayAmIGxlZCkKKwkJCWNhcmQtPnhkYXRhIHw9IDB4MDQ7CS8qIExFRCBPRkYgKi8KKwkJaWYgKChjYXJkLT5mbWFzayAmIHBvdHMpIHx8IChjYXJkLT5mbWFzayAmIGxlZCkpIHsKKwkJCVdyaXRlVzY2OTIoY2FyZCwgV19QQ1RMLCBjYXJkLT5wY3RsKTsKKwkJCVdyaXRlVzY2OTIoY2FyZCwgV19YQUREUiwgY2FyZC0+eGFkZHIpOworCQkJV3JpdGVXNjY5MihjYXJkLCBXX1hEQVRBLCBjYXJkLT54ZGF0YSk7CisJCQl2YWwgPSBSZWFkVzY2OTIoY2FyZCwgV19YQUREUik7CisJCQlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJCQlwcl9ub3RpY2UoIiVzOiBXX1hBRERSPSUwMnhcbiIsCisJCQkJCWNhcmQtPm5hbWUsIHZhbCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF93NjY5MihzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJV3JpdGVXNjY5MihjYXJkLCBXX0RfQ1RMLCBXX0RfQ1RMX1NSU1QpOworCW1kZWxheSgxMCk7CisJV3JpdGVXNjY5MihjYXJkLCBXX0RfQ1RMLCAwKTsKK30KKworc3RhdGljIGludAoraW5pdF9jYXJkKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwlpbnQJY250ID0gMzsKKwl1X2xvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWRpc2FibGVfaHdpcnEoY2FyZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWlmIChyZXF1ZXN0X2lycShjYXJkLT5pcnEsIHc2NjkyX2lycSwgSVJRRl9TSEFSRUQsIGNhcmQtPm5hbWUsIGNhcmQpKSB7CisJCXByX2luZm8oIiVzOiBjb3VsZG4ndCBnZXQgaW50ZXJydXB0ICVkXG4iLCBjYXJkLT5uYW1lLAorCQkJY2FyZC0+aXJxKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXdoaWxlIChjbnQtLSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlpbml0VzY2OTIoY2FyZCk7CisJCWVuYWJsZV9od2lycShjYXJkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQkvKiBUaW1lb3V0IDEwbXMgKi8KKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCQlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJCXByX25vdGljZSgiJXM6IElSUSAlZCBjb3VudCAlZFxuIiwgY2FyZC0+bmFtZSwKKwkJCQljYXJkLT5pcnEsIGNhcmQtPmlycWNudCk7CisJCWlmICghY2FyZC0+aXJxY250KSB7CisJCQlwcl9pbmZvKCIlczogSVJRKCVkKSBnZXR0aW5nIG5vIElSUXMgZHVyaW5nIGluaXQgJWRcbiIsCisJCQkJY2FyZC0+bmFtZSwgY2FyZC0+aXJxLCAzIC0gY250KTsKKwkJCXJlc2V0X3c2NjkyKGNhcmQpOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCX0KKwlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50Cit3NjY5Ml9sMmwxQihzdHJ1Y3QgbUlTRE5jaGFubmVsICpjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaCA9IGNvbnRhaW5lcl9vZihjaCwgc3RydWN0IGJjaGFubmVsLCBjaCk7CisJc3RydWN0IHc2NjkyX2NoCSpiYyA9IGNvbnRhaW5lcl9vZihiY2gsIHN0cnVjdCB3NjY5Ml9jaCwgYmNoKTsKKwlzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQgPSBiY2gtPmh3OworCWludCByZXQgPSAtRUlOVkFMOworCXN0cnVjdCBtSVNETmhlYWQgKmhoID0gbUlTRE5fSEVBRF9QKHNrYik7CisJdTMyIGlkOworCXVfbG9uZyBmbGFnczsKKworCXN3aXRjaCAoaGgtPnByaW0pIHsKKwljYXNlIFBIX0RBVEFfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBiY2hhbm5lbF9zZW5kZGF0YShiY2gsIHNrYik7CisJCWlmIChyZXQgPiAwKSB7IC8qIGRpcmVjdCBUWCAqLworCQkJaWQgPSBoaC0+aWQ7IC8qIHNrYiBjYW4gYmUgZnJlZWQgKi8KKwkJCXJldCA9IDA7CisJCQlXNjY5Ml9maWxsX0JmaWZvKGJjKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJCWlmICghdGVzdF9iaXQoRkxHX1RSQU5TUEFSRU5ULCAmYmNoLT5GbGFncykpCisJCQkJcXVldWVfY2hfZnJhbWUoY2gsIFBIX0RBVEFfQ05GLCBpZCwgTlVMTCk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCWNhc2UgUEhfQUNUSVZBVEVfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRkxHX0FDVElWRSwgJmJjaC0+RmxhZ3MpKQorCQkJcmV0ID0gdzY2OTJfbW9kZShiYywgY2gtPnByb3RvY29sKTsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlpZiAoIXJldCkKKwkJCV9xdWV1ZV9kYXRhKGNoLCBQSF9BQ1RJVkFURV9JTkQsIE1JU0ROX0lEX0FOWSwgMCwKKwkJCQlOVUxMLCBHRlBfS0VSTkVMKTsKKwkJYnJlYWs7CisJY2FzZSBQSF9ERUFDVElWQVRFX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJbUlTRE5fY2xlYXJfYmNoYW5uZWwoYmNoKTsKKwkJdzY2OTJfbW9kZShiYywgSVNETl9QX05PTkUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCV9xdWV1ZV9kYXRhKGNoLCBQSF9ERUFDVElWQVRFX0lORCwgTUlTRE5fSURfQU5ZLCAwLAorCQkJTlVMTCwgR0ZQX0tFUk5FTCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIHByaW0oJXgsJXgpXG4iLAorCQkJY2FyZC0+bmFtZSwgX19mdW5jX18sIGhoLT5wcmltLCBoaC0+aWQpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlpZiAoIXJldCkKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5uZWxfYmN0cmwoc3RydWN0IGJjaGFubmVsICpiY2gsIHN0cnVjdCBtSVNETl9jdHJsX3JlcSAqY3EpCit7CisJaW50CXJldCA9IDA7CisKKwlzd2l0Y2ggKGNxLT5vcCkgeworCWNhc2UgTUlTRE5fQ1RSTF9HRVRPUDoKKwkJY3EtPm9wID0gMDsKKwkJYnJlYWs7CisJLyogTm90aGluZyBpbXBsZW1lbnRlZCB5ZXQgKi8KKwljYXNlIE1JU0ROX0NUUkxfRklMTF9FTVBUWToKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCIlczogdW5rbm93biBPcCAleFxuIiwgX19mdW5jX18sIGNxLT5vcCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitvcGVuX2JjaGFubmVsKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgc3RydWN0IGNoYW5uZWxfcmVxICpycSkKK3sKKwlzdHJ1Y3QgYmNoYW5uZWwgKmJjaDsKKworCWlmIChycS0+YWRyLmNoYW5uZWwgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocnEtPnByb3RvY29sID09IElTRE5fUF9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKwliY2ggPSAmY2FyZC0+YmNbcnEtPmFkci5jaGFubmVsIC0gMV0uYmNoOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncykpCisJCXJldHVybiAtRUJVU1k7IC8qIGItY2hhbm5lbCBjYW4gYmUgb25seSBvcGVuIG9uY2UgKi8KKwl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0ZJTExFTVBUWSwgJmJjaC0+RmxhZ3MpOworCWJjaC0+Y2gucHJvdG9jb2wgPSBycS0+cHJvdG9jb2w7CisJcnEtPmNoID0gJmJjaC0+Y2g7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoYW5uZWxfY3RybChzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQsIHN0cnVjdCBtSVNETl9jdHJsX3JlcSAqY3EpCit7CisJaW50CXJldCA9IDA7CisKKwlzd2l0Y2ggKGNxLT5vcCkgeworCWNhc2UgTUlTRE5fQ1RSTF9HRVRPUDoKKwkJY3EtPm9wID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygiJXM6IHVua25vd24gQ1RSTCBPUCAleFxuIiwgY2FyZC0+bmFtZSwgY3EtPm9wKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3c2NjkyX2JjdHJsKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCB1MzIgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IGJjaGFubmVsICpiY2ggPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBiY2hhbm5lbCwgY2gpOworCXN0cnVjdCB3NjY5Ml9jaCAqYmMgPSBjb250YWluZXJfb2YoYmNoLCBzdHJ1Y3QgdzY2OTJfY2gsIGJjaCk7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkID0gYmNoLT5odzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl1X2xvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6ICVzIGNtZDoleCAlcFxuIiwgY2FyZC0+bmFtZSwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgQ0xPU0VfQ0hBTk5FTDoKKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19PUEVOLCAmYmNoLT5GbGFncyk7CisJCWlmICh0ZXN0X2JpdChGTEdfQUNUSVZFLCAmYmNoLT5GbGFncykpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCQltSVNETl9mcmVlYmNoYW5uZWwoYmNoKTsKKwkJCXc2NjkyX21vZGUoYmMsIElTRE5fUF9OT05FKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXNrYl9xdWV1ZV9wdXJnZSgmYmNoLT5ycXVldWUpOworCQkJYmNoLT5yY291bnQgPSAwOworCQl9CisJCWNoLT5wcm90b2NvbCA9IElTRE5fUF9OT05FOworCQljaC0+cGVlciA9IE5VTEw7CisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIENPTlRST0xfQ0hBTk5FTDoKKwkJcmV0ID0gY2hhbm5lbF9iY3RybChiY2gsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIiVzOiAlcyB1bmtub3duIHByaW0oJXgpXG4iLAorCQkJY2FyZC0+bmFtZSwgX19mdW5jX18sIGNtZCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK3c2NjkyX2wybDFEKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtSVNETmRldmljZQkqZGV2ID0gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgbUlTRE5kZXZpY2UsIEQpOworCXN0cnVjdCBkY2hhbm5lbAkJKmRjaCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkY2hhbm5lbCwgZGV2KTsKKwlzdHJ1Y3QgdzY2OTJfaHcJCSpjYXJkID0gY29udGFpbmVyX29mKGRjaCwgc3RydWN0IHc2NjkyX2h3LCBkY2gpOworCWludAkJCXJldCA9IC1FSU5WQUw7CisJc3RydWN0IG1JU0ROaGVhZAkqaGggPSBtSVNETl9IRUFEX1Aoc2tiKTsKKwl1MzIJCQlpZDsKKwl1X2xvbmcJCQlmbGFnczsKKworCXN3aXRjaCAoaGgtPnByaW0pIHsKKwljYXNlIFBIX0RBVEFfUkVROgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBkY2hhbm5lbF9zZW5kZGF0YShkY2gsIHNrYik7CisJCWlmIChyZXQgPiAwKSB7IC8qIGRpcmVjdCBUWCAqLworCQkJaWQgPSBoaC0+aWQ7IC8qIHNrYiBjYW4gYmUgZnJlZWQgKi8KKwkJCVc2NjkyX2ZpbGxfRGZpZm8oY2FyZCk7CisJCQlyZXQgPSAwOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQkJcXVldWVfY2hfZnJhbWUoY2gsIFBIX0RBVEFfQ05GLCBpZCwgTlVMTCk7CisJCX0gZWxzZQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCWNhc2UgUEhfQUNUSVZBVEVfUkVROgorCQlyZXQgPSBsMV9ldmVudChkY2gtPmwxLCBoaC0+cHJpbSk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9SRVE6CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfTDJfQUNUSVZBVEVELCAmZGNoLT5GbGFncyk7CisJCXJldCA9IGwxX2V2ZW50KGRjaC0+bDEsIGhoLT5wcmltKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFyZXQpCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cit3NjY5Ml9sMWNhbGxiYWNrKHN0cnVjdCBkY2hhbm5lbCAqZGNoLCB1MzIgY21kKQoreworCXN0cnVjdCB3NjY5Ml9odyAqY2FyZCA9IGNvbnRhaW5lcl9vZihkY2gsIHN0cnVjdCB3NjY5Ml9odywgZGNoKTsKKwl1X2xvbmcgZmxhZ3M7CisKKwlwcl9kZWJ1ZygiJXM6IGNtZCgleCkgc3RhdGUoJTAyeClcbiIsIGNhcmQtPm5hbWUsIGNtZCwgY2FyZC0+c3RhdGUpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJTkZPM19QODoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJcGhfY29tbWFuZChjYXJkLCBXX0wxQ01EX0FSOCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBJTkZPM19QMTA6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXBoX2NvbW1hbmQoY2FyZCwgV19MMUNNRF9BUjEwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIEhXX1JFU0VUX1JFUToKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGNhcmQtPnN0YXRlICE9IFdfTDFJTkRfRFJEKQorCQkJcGhfY29tbWFuZChjYXJkLCBXX0wxQ01EX1JTVCk7CisJCXBoX2NvbW1hbmQoY2FyZCwgV19MMUNNRF9FQ0spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgSFdfREVBQ1RfUkVROgorCQlza2JfcXVldWVfcHVyZ2UoJmRjaC0+c3F1ZXVlKTsKKwkJaWYgKGRjaC0+dHhfc2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKGRjaC0+dHhfc2tiKTsKKwkJCWRjaC0+dHhfc2tiID0gTlVMTDsKKwkJfQorCQlkY2gtPnR4X2lkeCA9IDA7CisJCWlmIChkY2gtPnJ4X3NrYikgeworCQkJZGV2X2tmcmVlX3NrYihkY2gtPnJ4X3NrYik7CisJCQlkY2gtPnJ4X3NrYiA9IE5VTEw7CisJCX0KKwkJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmZGNoLT5GbGFncyk7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0JVU1lfVElNRVIsICZkY2gtPkZsYWdzKSkKKwkJCWRlbF90aW1lcigmZGNoLT50aW1lcik7CisJCWJyZWFrOworCWNhc2UgSFdfUE9XRVJVUF9SRVE6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCXBoX2NvbW1hbmQoY2FyZCwgV19MMUNNRF9FQ0spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgUEhfQUNUSVZBVEVfSU5EOgorCQl0ZXN0X2FuZF9zZXRfYml0KEZMR19BQ1RJVkUsICZkY2gtPkZsYWdzKTsKKwkJX3F1ZXVlX2RhdGEoJmRjaC0+ZGV2LkQsIGNtZCwgTUlTRE5fSURfQU5ZLCAwLCBOVUxMLAorCQkJR0ZQX0FUT01JQyk7CisJCWJyZWFrOworCWNhc2UgUEhfREVBQ1RJVkFURV9JTkQ6CisJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNUSVZFLCAmZGNoLT5GbGFncyk7CisJCV9xdWV1ZV9kYXRhKCZkY2gtPmRldi5ELCBjbWQsIE1JU0ROX0lEX0FOWSwgMCwgTlVMTCwKKwkJCUdGUF9BVE9NSUMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6ICVzIHVua25vd24gY29tbWFuZCAleFxuIiwgY2FyZC0+bmFtZSwKKwkJCV9fZnVuY19fLCBjbWQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitvcGVuX2RjaGFubmVsKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCwgc3RydWN0IGNoYW5uZWxfcmVxICpycSkKK3sKKwlwcl9kZWJ1ZygiJXM6ICVzIGRldiglZCkgb3BlbiBmcm9tICVwXG4iLCBjYXJkLT5uYW1lLCBfX2Z1bmNfXywKKwkJY2FyZC0+ZGNoLmRldi5pZCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDEpKTsKKwlpZiAocnEtPnByb3RvY29sICE9IElTRE5fUF9URV9TMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHJxLT5hZHIuY2hhbm5lbCA9PSAxKQorCQkvKiBFLUNoYW5uZWwgbm90IHN1cHBvcnRlZCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwlycS0+Y2ggPSAmY2FyZC0+ZGNoLmRldi5EOworCXJxLT5jaC0+cHJvdG9jb2wgPSBycS0+cHJvdG9jb2w7CisJaWYgKGNhcmQtPmRjaC5zdGF0ZSA9PSA3KQorCQlfcXVldWVfZGF0YShycS0+Y2gsIFBIX0FDVElWQVRFX0lORCwgTUlTRE5fSURfQU5ZLAorCQkgICAgMCwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3c2NjkyX2RjdHJsKHN0cnVjdCBtSVNETmNoYW5uZWwgKmNoLCB1MzIgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IG1JU0ROZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoY2gsIHN0cnVjdCBtSVNETmRldmljZSwgRCk7CisJc3RydWN0IGRjaGFubmVsICpkY2ggPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZGNoYW5uZWwsIGRldik7CisJc3RydWN0IHc2NjkyX2h3ICpjYXJkID0gY29udGFpbmVyX29mKGRjaCwgc3RydWN0IHc2NjkyX2h3LCBkY2gpOworCXN0cnVjdCBjaGFubmVsX3JlcSAqcnE7CisJaW50IGVyciA9IDA7CisKKwlwcl9kZWJ1ZygiJXM6IERDVFJMOiAleCAlcFxuIiwgY2FyZC0+bmFtZSwgY21kLCBhcmcpOworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBPUEVOX0NIQU5ORUw6CisJCXJxID0gYXJnOworCQlpZiAocnEtPnByb3RvY29sID09IElTRE5fUF9URV9TMCkKKwkJCWVyciA9IG9wZW5fZGNoYW5uZWwoY2FyZCwgcnEpOworCQllbHNlCisJCQllcnIgPSBvcGVuX2JjaGFubmVsKGNhcmQsIHJxKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKKwkJCXByX2luZm8oIiVzOiBjYW5ub3QgZ2V0IG1vZHVsZVxuIiwgY2FyZC0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgQ0xPU0VfQ0hBTk5FTDoKKwkJcHJfZGVidWcoIiVzOiBkZXYoJWQpIGNsb3NlIGZyb20gJXBcbiIsIGNhcmQtPm5hbWUsCisJCQlkY2gtPmRldi5pZCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJCWJyZWFrOworCWNhc2UgQ09OVFJPTF9DSEFOTkVMOgorCQllcnIgPSBjaGFubmVsX2N0cmwoY2FyZCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoIiVzOiB1bmtub3duIERDVFJMIGNvbW1hbmQgJXhcbiIsIGNhcmQtPm5hbWUsIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CitzZXR1cF93NjY5MihzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJdTMyCXZhbDsKKworCWlmICghcmVxdWVzdF9yZWdpb24oY2FyZC0+YWRkciwgMjU2LCBjYXJkLT5uYW1lKSkgeworCQlwcl9pbmZvKCIlczogY29uZmlnIHBvcnQgJXgtJXggYWxyZWFkeSBpbiB1c2VcbiIsIGNhcmQtPm5hbWUsCisJCSAgICAgICBjYXJkLT5hZGRyLCBjYXJkLT5hZGRyICsgMjU1KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCVc2NjkyVmVyc2lvbihjYXJkKTsKKwljYXJkLT5iY1swXS5hZGRyID0gY2FyZC0+YWRkcjsKKwljYXJkLT5iY1sxXS5hZGRyID0gY2FyZC0+YWRkciArIDB4NDA7CisJdmFsID0gUmVhZFc2NjkyKGNhcmQsIFdfSVNUQSk7CisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXMgSVNUQT0lMDJ4XG4iLCBjYXJkLT5uYW1lLCB2YWwpOworCXZhbCA9IFJlYWRXNjY5MihjYXJkLCBXX0lNQVNLKTsKKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlcyBJTUFTSz0lMDJ4XG4iLCBjYXJkLT5uYW1lLCB2YWwpOworCXZhbCA9IFJlYWRXNjY5MihjYXJkLCBXX0RfRVhJUik7CisJaWYgKGRlYnVnICYgREVCVUdfSFcpCisJCXByX25vdGljZSgiJXMgRF9FWElSPSUwMnhcbiIsIGNhcmQtPm5hbWUsIHZhbCk7CisJdmFsID0gUmVhZFc2NjkyKGNhcmQsIFdfRF9FWElNKTsKKwlpZiAoZGVidWcgJiBERUJVR19IVykKKwkJcHJfbm90aWNlKCIlcyBEX0VYSU09JTAyeFxuIiwgY2FyZC0+bmFtZSwgdmFsKTsKKwl2YWwgPSBSZWFkVzY2OTIoY2FyZCwgV19EX1JTVEEpOworCWlmIChkZWJ1ZyAmIERFQlVHX0hXKQorCQlwcl9ub3RpY2UoIiVzIERfUlNUQT0lMDJ4XG4iLCBjYXJkLT5uYW1lLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmVsZWFzZV9jYXJkKHN0cnVjdCB3NjY5Ml9odyAqY2FyZCkKK3sKKwl1X2xvbmcJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWRpc2FibGVfaHdpcnEoY2FyZCk7CisJdzY2OTJfbW9kZSgmY2FyZC0+YmNbMF0sIElTRE5fUF9OT05FKTsKKwl3NjY5Ml9tb2RlKCZjYXJkLT5iY1sxXSwgSVNETl9QX05PTkUpOworCWlmICgoY2FyZC0+Zm1hc2sgJiBsZWQpIHx8IGNhcmQtPnN1YnR5cGUgPT0gVzY2OTJfVVNSKSB7CisJCWNhcmQtPnhkYXRhIHw9IDB4MDQ7CS8qICBMRUQgT0ZGICovCisJCVdyaXRlVzY2OTIoY2FyZCwgV19YREFUQSwgY2FyZC0+eGRhdGEpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJZnJlZV9pcnEoY2FyZC0+aXJxLCBjYXJkKTsKKwlsMV9ldmVudChjYXJkLT5kY2gubDEsIENMT1NFX0NIQU5ORUwpOworCW1JU0ROX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5kY2guZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbihjYXJkLT5hZGRyLCAyNTYpOworCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNbMV0uYmNoKTsKKwltSVNETl9mcmVlYmNoYW5uZWwoJmNhcmQtPmJjWzBdLmJjaCk7CisJbUlTRE5fZnJlZWRjaGFubmVsKCZjYXJkLT5kY2gpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNhcmQtPmxpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY2FyZC0+cGRldik7CisJcGNpX3NldF9kcnZkYXRhKGNhcmQtPnBkZXYsIE5VTEwpOworCWtmcmVlKGNhcmQpOworfQorCitzdGF0aWMgaW50CitzZXR1cF9pbnN0YW5jZShzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQpCit7CisJaW50CQlpLCBlcnI7CisJdV9sb25nCQlmbGFnczsKKworCXNucHJpbnRmKGNhcmQtPm5hbWUsIE1JU0ROX01BWF9JRExFTiAtIDEsICJ3NjY5Mi4lZCIsIHc2NjkyX2NudCArIDEpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY2FyZC0+bGlzdCwgJkNhcmRzKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJY2FyZC0+Zm1hc2sgPSAoMSA8PCB3NjY5Ml9jbnQpOworCV9zZXRfZGVidWcoY2FyZCk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPmxvY2spOworCW1JU0ROX2luaXRkY2hhbm5lbCgmY2FyZC0+ZGNoLCBNQVhfREZSQU1FX0xFTl9MMSwgVzY2OTJfcGhfYmgpOworCWNhcmQtPmRjaC5kZXYuRHByb3RvY29scyA9ICgxIDw8IElTRE5fUF9URV9TMCk7CisJY2FyZC0+ZGNoLmRldi5ELnNlbmQgPSB3NjY5Ml9sMmwxRDsKKwljYXJkLT5kY2guZGV2LkQuY3RybCA9IHc2NjkyX2RjdHJsOworCWNhcmQtPmRjaC5kZXYuQnByb3RvY29scyA9ICgxIDw8IChJU0ROX1BfQl9SQVcgJiBJU0ROX1BfQl9NQVNLKSkgfAorCQkoMSA8PCAoSVNETl9QX0JfSERMQyAmIElTRE5fUF9CX01BU0spKTsKKwljYXJkLT5kY2guaHcgPSBjYXJkOworCWNhcmQtPmRjaC5kZXYubnJiY2hhbiA9IDI7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQltSVNETl9pbml0YmNoYW5uZWwoJmNhcmQtPmJjW2ldLmJjaCwgTUFYX0RBVEFfTUVNKTsKKwkJY2FyZC0+YmNbaV0uYmNoLmh3ID0gY2FyZDsKKwkJY2FyZC0+YmNbaV0uYmNoLm5yID0gaSArIDE7CisJCWNhcmQtPmJjW2ldLmJjaC5jaC5uciA9IGkgKyAxOworCQljYXJkLT5iY1tpXS5iY2guY2guc2VuZCA9IHc2NjkyX2wybDFCOworCQljYXJkLT5iY1tpXS5iY2guY2guY3RybCA9IHc2NjkyX2JjdHJsOworCQlzZXRfY2hhbm5lbG1hcChpICsgMSwgY2FyZC0+ZGNoLmRldi5jaGFubmVsbWFwKTsKKwkJbGlzdF9hZGQoJmNhcmQtPmJjW2ldLmJjaC5jaC5saXN0LCAmY2FyZC0+ZGNoLmRldi5iY2hhbm5lbHMpOworCX0KKwllcnIgPSBzZXR1cF93NjY5MihjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX3NldHVwOworCWVyciA9IG1JU0ROX3JlZ2lzdGVyX2RldmljZSgmY2FyZC0+ZGNoLmRldiwgJmNhcmQtPnBkZXYtPmRldiwKKwkJY2FyZC0+bmFtZSk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcl9yZWc7CisJZXJyID0gaW5pdF9jYXJkKGNhcmQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3JfaW5pdDsKKwllcnIgPSBjcmVhdGVfbDEoJmNhcmQtPmRjaCwgdzY2OTJfbDFjYWxsYmFjayk7CisJaWYgKCFlcnIpIHsKKwkJdzY2OTJfY250Kys7CisJCXByX25vdGljZSgiVzY2OTIgJWQgY2FyZHMgaW5zdGFsbGVkXG4iLCB3NjY5Ml9jbnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOworZXJyb3JfaW5pdDoKKwltSVNETl91bnJlZ2lzdGVyX2RldmljZSgmY2FyZC0+ZGNoLmRldik7CitlcnJvcl9yZWc6CisJcmVsZWFzZV9yZWdpb24oY2FyZC0+YWRkciwgMjU2KTsKK2Vycm9yX3NldHVwOgorCW1JU0ROX2ZyZWViY2hhbm5lbCgmY2FyZC0+YmNbMV0uYmNoKTsKKwltSVNETl9mcmVlYmNoYW5uZWwoJmNhcmQtPmJjWzBdLmJjaCk7CisJbUlTRE5fZnJlZWRjaGFubmVsKCZjYXJkLT5kY2gpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FyZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNhcmQtPmxpc3QpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkX2xvY2ssIGZsYWdzKTsKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdAordzY2OTJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50CQllcnIgPSAtRU5PTUVNOworCXN0cnVjdCB3NjY5Ml9odwkqY2FyZDsKKwlzdHJ1Y3QgdzY2OTJtYXAJKm0gPSAoc3RydWN0IHc2NjkybWFwICopZW50LT5kcml2ZXJfZGF0YTsKKworCWNhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdzY2OTJfaHcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQpIHsKKwkJcHJfaW5mbygiTm8ga21lbSBmb3IgdzY2OTIgY2FyZFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCWNhcmQtPnBkZXYgPSBwZGV2OworCWNhcmQtPnN1YnR5cGUgPSBtLT5zdWJ0eXBlOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoY2FyZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAibUlTRE5fdzY2OTI6IGZvdW5kIGFkYXB0ZXIgJXMgYXQgJXNcbiIsCisJICAgICAgIG0tPm5hbWUsIHBjaV9uYW1lKHBkZXYpKTsKKworCWNhcmQtPmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJY2FyZC0+aXJxID0gcGRldi0+aXJxOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwllcnIgPSBzZXR1cF9pbnN0YW5jZShjYXJkKTsKKwlpZiAoZXJyKQorCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0Cit3NjY5Ml9yZW1vdmVfcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCB3NjY5Ml9odwkqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChjYXJkKQorCQlyZWxlYXNlX2NhcmQoY2FyZCk7CisJZWxzZQorCQlpZiAoZGVidWcpCisJCQlwcl9ub3RpY2UoIiVzOiBkcnZkYXRhIGFsbHJlYWR5IHJlbW92ZWRcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHc2NjkyX2lkc1tdID0geworCXsgUENJX1ZFTkRPUl9JRF9EWU5BTElOSywgUENJX0RFVklDRV9JRF9EWU5BTElOS19JUzY0UEgsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAodWxvbmcpJnc2NjkyX21hcFswXX0sCisJeyBQQ0lfVkVORE9SX0lEX1dJTkJPTkQyLCBQQ0lfREVWSUNFX0lEX1dJTkJPTkQyXzY2OTIsCisJICBQQ0lfVkVORE9SX0lEX1VTUiwgUENJX0RFVklDRV9JRF9VU1JfNjY5MiwgMCwgMCwKKwkgICh1bG9uZykmdzY2OTJfbWFwWzJdfSwKKwl7IFBDSV9WRU5ET1JfSURfV0lOQk9ORDIsIFBDSV9ERVZJQ0VfSURfV0lOQk9ORDJfNjY5MiwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsICh1bG9uZykmdzY2OTJfbWFwWzFdfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdzY2OTJfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHc2NjkyX2RyaXZlciA9IHsKKwkubmFtZSA9ICAidzY2OTIiLAorCS5wcm9iZSA9IHc2NjkyX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3NjY5Ml9yZW1vdmVfcGNpKSwKKwkuaWRfdGFibGUgPSB3NjY5Ml9pZHMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3NjY5Ml9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByX25vdGljZSgiV2luYm9uZCBXNjY5MiBQQ0kgZHJpdmVyIFJldi4gJXNcbiIsIFc2NjkyX1JFVik7CisKKwllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ3NjY5Ml9kcml2ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3NjY5Ml9jbGVhbnVwKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3NjY5Ml9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3NjY5Ml9pbml0KTsKK21vZHVsZV9leGl0KHc2NjkyX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTU2OTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBXaW5ib25kIFc2NjkyIHNwZWNpZmljIGRlZmluZXMKKyAqCisgKiBBdXRob3IgICAgICAgS2Fyc3RlbiBLZWlsIDxrZWlsQGlzZG40bGludXguZGU+CisgKgkJYmFzZWQgb24gdGhlIHc2NjkyIEk0TCBkcml2ZXIgZnJvbSBQZXRyIE5vdmFrIDxwZXRyLm5vdmFrQGkuY3o+CisgKgorICogQ29weXJpZ2h0IDIwMDkgIGJ5IEthcnN0ZW4gS2VpbCA8a2VpbEBpc2RuNGxpbnV4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisvKiBTcGVjaWZpY2F0aW9ucyBvZiBXNjY5MiByZWdpc3RlcnMgKi8KKworI2RlZmluZSBXX0RfUkZJRk8JMHgwMAkvKiBSICovCisjZGVmaW5lIFdfRF9YRklGTwkweDA0CS8qIFcgKi8KKyNkZWZpbmUgV19EX0NNRFIJMHgwOAkvKiBXICovCisjZGVmaW5lIFdfRF9NT0RFCTB4MGMJLyogUi9XICovCisjZGVmaW5lIFdfRF9USU1SCTB4MTAJLyogUi9XICovCisjZGVmaW5lIFdfSVNUQQkJMHgxNAkvKiBSX2NsciAqLworI2RlZmluZSBXX0lNQVNLCQkweDE4CS8qIFIvVyAqLworI2RlZmluZSBXX0RfRVhJUgkweDFjCS8qIFJfY2xyICovCisjZGVmaW5lIFdfRF9FWElNCTB4MjAJLyogUi9XICovCisjZGVmaW5lIFdfRF9TVEFSCTB4MjQJLyogUiAqLworI2RlZmluZSBXX0RfUlNUQQkweDI4CS8qIFIgKi8KKyNkZWZpbmUgV19EX1NBTQkJMHgyYwkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1NBUDEJMHgzMAkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1NBUDIJMHgzNAkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1RBTQkJMHgzOAkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1RFSTEJMHgzYwkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1RFSTIJMHg0MAkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX1JCQ0gJMHg0NAkvKiBSICovCisjZGVmaW5lIFdfRF9SQkNMCTB4NDgJLyogUiAqLworI2RlZmluZSBXX1RJTVIyCQkweDRjCS8qIFcgKi8KKyNkZWZpbmUgV19MMV9SQwkJMHg1MAkvKiBSL1cgKi8KKyNkZWZpbmUgV19EX0NUTAkJMHg1NAkvKiBSL1cgKi8KKyNkZWZpbmUgV19DSVIJCTB4NTgJLyogUiAqLworI2RlZmluZSBXX0NJWAkJMHg1YwkvKiBXICovCisjZGVmaW5lIFdfU1FSCQkweDYwCS8qIFIgKi8KKyNkZWZpbmUgV19TUVgJCTB4NjQJLyogVyAqLworI2RlZmluZSBXX1BDVEwJCTB4NjgJLyogUi9XICovCisjZGVmaW5lIFdfTU9SCQkweDZjCS8qIFIgKi8KKyNkZWZpbmUgV19NT1gJCTB4NzAJLyogUi9XICovCisjZGVmaW5lIFdfTU9TUgkJMHg3NAkvKiBSX2NsciAqLworI2RlZmluZSBXX01PQ1IJCTB4NzgJLyogUi9XICovCisjZGVmaW5lIFdfR0NSCQkweDdjCS8qIFIvVyAqLworCisjZGVmaW5lCVdfQl9SRklGTwkweDgwCS8qIFIgKi8KKyNkZWZpbmUJV19CX1hGSUZPCTB4ODQJLyogVyAqLworI2RlZmluZQlXX0JfQ01EUgkweDg4CS8qIFcgKi8KKyNkZWZpbmUJV19CX01PREUJMHg4YwkvKiBSL1cgKi8KKyNkZWZpbmUJV19CX0VYSVIJMHg5MAkvKiBSX2NsciAqLworI2RlZmluZQlXX0JfRVhJTQkweDk0CS8qIFIvVyAqLworI2RlZmluZQlXX0JfU1RBUgkweDk4CS8qIFIgKi8KKyNkZWZpbmUJV19CX0FETTEJMHg5YwkvKiBSL1cgKi8KKyNkZWZpbmUJV19CX0FETTIJMHhhMAkvKiBSL1cgKi8KKyNkZWZpbmUJV19CX0FEUjEJMHhhNAkvKiBSL1cgKi8KKyNkZWZpbmUJV19CX0FEUjIJMHhhOAkvKiBSL1cgKi8KKyNkZWZpbmUJV19CX1JCQ0wJMHhhYwkvKiBSICovCisjZGVmaW5lCVdfQl9SQkNICTB4YjAJLyogUiAqLworCisjZGVmaW5lIFdfWEFERFIJCTB4ZjQJLyogUi9XICovCisjZGVmaW5lIFdfWERBVEEJCTB4ZjgJLyogUi9XICovCisjZGVmaW5lIFdfRVBDVEwJCTB4ZmMJLyogVyAqLworCisvKiBXNjY5MiByZWdpc3RlciBiaXRzICovCisKKyNkZWZpbmUJV19EX0NNRFJfWFJTVAkweDAxCisjZGVmaW5lCVdfRF9DTURSX1hNRQkweDAyCisjZGVmaW5lCVdfRF9DTURSX1hNUwkweDA4CisjZGVmaW5lCVdfRF9DTURSX1NUVAkweDEwCisjZGVmaW5lCVdfRF9DTURSX1JSU1QJMHg0MAorI2RlZmluZQlXX0RfQ01EUl9SQUNLCTB4ODAKKworI2RlZmluZQlXX0RfTU9ERV9STFAJMHgwMQorI2RlZmluZQlXX0RfTU9ERV9ETFAJMHgwMgorI2RlZmluZQlXX0RfTU9ERV9NRkQJMHgwNAorI2RlZmluZQlXX0RfTU9ERV9URUUJMHgwOAorI2RlZmluZQlXX0RfTU9ERV9UTVMJMHgxMAorI2RlZmluZQlXX0RfTU9ERV9SQUNUCTB4NDAKKyNkZWZpbmUJV19EX01PREVfTU1TCTB4ODAKKworI2RlZmluZSBXX0lOVF9CMl9FWEkJMHgwMQorI2RlZmluZSBXX0lOVF9CMV9FWEkJMHgwMgorI2RlZmluZSBXX0lOVF9EX0VYSQkweDA0CisjZGVmaW5lIFdfSU5UX1hJTlQwCTB4MDgKKyNkZWZpbmUgV19JTlRfWElOVDEJMHgxMAorI2RlZmluZSBXX0lOVF9EX1hGUgkweDIwCisjZGVmaW5lIFdfSU5UX0RfUk1FCTB4NDAKKyNkZWZpbmUgV19JTlRfRF9STVIJMHg4MAorCisjZGVmaW5lIFdfRF9FWElfV0VYUAkweDAxCisjZGVmaW5lIFdfRF9FWElfVEVYUAkweDAyCisjZGVmaW5lIFdfRF9FWElfSVNDCTB4MDQKKyNkZWZpbmUgV19EX0VYSV9NT0MJMHgwOAorI2RlZmluZSBXX0RfRVhJX1RJTjIJMHgxMAorI2RlZmluZSBXX0RfRVhJX1hDT0wJMHgyMAorI2RlZmluZSBXX0RfRVhJX1hEVU4JMHg0MAorI2RlZmluZSBXX0RfRVhJX1JET1YJMHg4MAorCisjZGVmaW5lCVdfRF9TVEFSX0RSRFkJMHgxMAorI2RlZmluZQlXX0RfU1RBUl9YQloJMHgyMAorI2RlZmluZQlXX0RfU1RBUl9YRE9XCTB4ODAKKworI2RlZmluZSBXX0RfUlNUQV9STUIJMHgxMAorI2RlZmluZSBXX0RfUlNUQV9DUkNFCTB4MjAKKyNkZWZpbmUgV19EX1JTVEFfUkRPVgkweDQwCisKKyNkZWZpbmUgV19EX0NUTF9TUlNUCTB4MjAKKworI2RlZmluZSBXX0NJUl9TQ0MJMHg4MAorI2RlZmluZSBXX0NJUl9JQ0MJMHg0MAorI2RlZmluZSBXX0NJUl9DT0RfTUFTSwkweDBmCisKKyNkZWZpbmUgV19QQ1RMX1BDWAkweDAxCisjZGVmaW5lIFdfUENUTF9YTU9ERQkweDAyCisjZGVmaW5lIFdfUENUTF9PRTAJMHgwNAorI2RlZmluZSBXX1BDVExfT0UxCTB4MDgKKyNkZWZpbmUgV19QQ1RMX09FMgkweDEwCisjZGVmaW5lIFdfUENUTF9PRTMJMHgyMAorI2RlZmluZSBXX1BDVExfT0U0CTB4NDAKKyNkZWZpbmUgV19QQ1RMX09FNQkweDgwCisKKyNkZWZpbmUJV19CX0NNRFJfWFJTVAkweDAxCisjZGVmaW5lCVdfQl9DTURSX1hNRQkweDAyCisjZGVmaW5lCVdfQl9DTURSX1hNUwkweDA0CisjZGVmaW5lCVdfQl9DTURSX1JBQ1QJMHgyMAorI2RlZmluZQlXX0JfQ01EUl9SUlNUCTB4NDAKKyNkZWZpbmUJV19CX0NNRFJfUkFDSwkweDgwCisKKyNkZWZpbmUJV19CX01PREVfRlRTMAkweDAxCisjZGVmaW5lCVdfQl9NT0RFX0ZUUzEJMHgwMgorI2RlZmluZQlXX0JfTU9ERV9TVzU2CTB4MDQKKyNkZWZpbmUJV19CX01PREVfQlNXMAkweDA4CisjZGVmaW5lCVdfQl9NT0RFX0JTVzEJMHgxMAorI2RlZmluZQlXX0JfTU9ERV9FUENNCTB4MjAKKyNkZWZpbmUJV19CX01PREVfSVRGCTB4NDAKKyNkZWZpbmUJV19CX01PREVfTU1TCTB4ODAKKworI2RlZmluZQlXX0JfRVhJX1hEVU4JMHgwMQorI2RlZmluZQlXX0JfRVhJX1hGUgkweDAyCisjZGVmaW5lCVdfQl9FWElfUkRPVgkweDEwCisjZGVmaW5lCVdfQl9FWElfUk1FCTB4MjAKKyNkZWZpbmUJV19CX0VYSV9STVIJMHg0MAorCisjZGVmaW5lCVdfQl9TVEFSX1hCWgkweDAxCisjZGVmaW5lCVdfQl9TVEFSX1hET1cJMHgwNAorI2RlZmluZQlXX0JfU1RBUl9STUIJMHgxMAorI2RlZmluZQlXX0JfU1RBUl9DUkNFCTB4MjAKKyNkZWZpbmUJV19CX1NUQVJfUkRPVgkweDQwCisKKyNkZWZpbmUJV19CX1JCQ0hfTE9WCTB4MjAKKworLyogVzY2OTIgTGF5ZXIxIGNvbW1hbmRzICovCisKKyNkZWZpbmUJV19MMUNNRF9FQ0sJMHgwMAorI2RlZmluZSBXX0wxQ01EX1JTVAkweDAxCisjZGVmaW5lIFdfTDFDTURfU0NQCTB4MDQKKyNkZWZpbmUgV19MMUNNRF9TU1AJMHgwMgorI2RlZmluZSBXX0wxQ01EX0FSOAkweDA4CisjZGVmaW5lIFdfTDFDTURfQVIxMAkweDA5CisjZGVmaW5lIFdfTDFDTURfRUFMCTB4MGEKKyNkZWZpbmUgV19MMUNNRF9EUkMJMHgwZgorCisvKiBXNjY5MiBMYXllcjEgaW5kaWNhdGlvbnMgKi8KKworI2RlZmluZSBXX0wxSU5EX0NFCTB4MDcKKyNkZWZpbmUgV19MMUlORF9EUkQJMHgwMAorI2RlZmluZSBXX0wxSU5EX0xECTB4MDQKKyNkZWZpbmUgV19MMUlORF9BUkQJMHgwOAorI2RlZmluZSBXX0wxSU5EX1RJCTB4MGEKKyNkZWZpbmUgV19MMUlORF9BVEkJMHgwYgorI2RlZmluZSBXX0wxSU5EX0FJOAkweDBjCisjZGVmaW5lIFdfTDFJTkRfQUkxMAkweDBkCisjZGVmaW5lIFdfTDFJTkRfQ0QJMHgwZgorCisvKiBGSUZPIHRocmVzaG9sZHMgKi8KKyNkZWZpbmUgV19EX0ZJRk9fVEhSRVNICTY0CisjZGVmaW5lIFdfQl9GSUZPX1RIUkVTSAk2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZwppbmRleCA3ODMyZDhiLi4zNDY0ZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvS2NvbmZpZwpAQCAtMzkxLDYgKzM5MSw3IEBACiBjb25maWcgSElTQVhfU1Q1NDgxCiAJdHJpc3RhdGUgIlNUNTQ4MSBVU0IgSVNETiBtb2RlbSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgSVNETl9IRExDCiAJc2VsZWN0IENSQ19DQ0lUVAogCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscApAQCAtNDE4LDExICs0MTksNiBAQAogCSAgKHRoZSBsYXR0ZXIgYWxzbyBuZWVkcyB5b3UgdG8gc2VsZWN0ICJJU0EgUGx1ZyBhbmQgUGxheSBzdXBwb3J0IgogCSAgZnJvbSB0aGUgbWVudSAiUGx1ZyBhbmQgUGxheSBjb25maWd1cmF0aW9uIikKIAotY29uZmlnIEhJU0FYX0hETEMKLQlib29sCi0JZGVwZW5kcyBvbiBISVNBWF9TVDU0ODEKLQlkZWZhdWx0IHkKLQogY29uZmlnIEhJU0FYX0FWTV9BMV9QQ01DSUEKIAlib29sCiAJZGVwZW5kcyBvbiBISVNBWF9BVk1fQTFfQ1MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9NYWtlZmlsZSBiL2RyaXZlcnMvaXNkbi9oaXNheC9NYWtlZmlsZQppbmRleCBjN2EzNzk0Li5hYjYzOGIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9NYWtlZmlsZQpAQCAtMTYsMTAgKzE2LDYgQEAKIG9iai0kKENPTkZJR19ISVNBWF9IRkM0UzhTKQkJKz0gaGZjNHM4c19sMS5vCiBvYmotJChDT05GSUdfSElTQVhfRlJJVFpfUENJUE5QKSAgICAgICAgKz0gaGlzYXhfaXNhYy5vIGhpc2F4X2ZjcGNpcG5wLm8KIAotaWZkZWYgQ09ORklHX0hJU0FYX0hETEMKLW9iai0kKENPTkZJR19JU0ROX0RSVl9ISVNBWCkJCSs9IGlzZG5oZGxjLm8KLWVuZGlmCi0KICMgTXVsdGlwYXJ0IG9iamVjdHMuCiAKIGhpc2F4X3N0NTQ4MS15IAkJCQk6PSBzdDU0ODFfaW5pdC5vIHN0NTQ4MV91c2IubyBzdDU0ODFfZC5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYW1kNzkzMF9mbi5jCmluZGV4IDM0MWZhZjUuLmJmNTI2YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FtZDc5MzBfZm4uYwpAQCAtMjM4LDggKzIzOCw2IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSwgdHF1ZXVlKTsKICAgICAgICAgc3RydWN0IFBTdGFjayAqc3RwdHI7CiAKLQlpZiAoIWNzKQotCQlyZXR1cm47CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChEX0NMRUFSQlVTWSwgJmNzLT5ldmVudCkpIHsKICAgICAgICAgICAgICAgICBpZiAoY3MtPmRlYnVnKQogCQkJZGVidWdsMShjcywgIkFtZDc5MzA6IGJoLCBELUNoYW5uZWwgQnVzeSBjbGVhcmVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCmluZGV4IDAyNWEyMGQuLjQ3NWIxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jCkBAIC04MzMsOCArODMzLDYgQEAKIH07CiAvKiAqSU5ERU5ULU9OKiAqLwogCi0jZGVmaW5lIEZOQ09VTlQgKHNpemVvZihmbmxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIGludCBfX2luaXQKIENhbGxjTmV3KHZvaWQpCiB7CkBAIC04NDIsNyArODQwLDcgQEAKIAljYWxsY2ZzbS5ldmVudF9jb3VudCA9IEVWRU5UX0NPVU5UOwogCWNhbGxjZnNtLnN0ckV2ZW50ID0gc3RyRXZlbnQ7CiAJY2FsbGNmc20uc3RyU3RhdGUgPSBzdHJTdGF0ZTsKLQlyZXR1cm4gRnNtTmV3KCZjYWxsY2ZzbSwgZm5saXN0LCBGTkNPVU5UKTsKKwlyZXR1cm4gRnNtTmV3KCZjYWxsY2ZzbSwgZm5saXN0LCBBUlJBWV9TSVpFKGZubGlzdCkpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwppbmRleCAzZDMzN2Q5Li5kMTEwYTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKQEAgLTE1MDYsOCArMTUwNiw2IEBACiAJdV9sb25nCWZsYWdzOwogLy8gICAgICBzdHJ1Y3QgUFN0YWNrICpzdHB0cjsKIAotCWlmICghY3MpCi0JCXJldHVybjsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERfTDFTVEFURUNIQU5HRSwgJmNzLT5ldmVudCkpIHsKIAkJaWYgKCFjcy0+aHcuaGZjcGNpLm50X21vZGUpCiAJCQlzd2l0Y2ggKGNzLT5kYy5oZmNwY2kucGhfc3RhdGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYwppbmRleCBkOTJlOGQ2Li40MTlmODdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCkBAIC0xMjU1LDggKzEyNTUsNiBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IElzZG5DYXJkU3RhdGUsIHRxdWV1ZSk7CiAJdV9sb25nIGZsYWdzOwogCi0JaWYgKCFjcykKLQkJcmV0dXJuOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRF9MMVNUQVRFQ0hBTkdFLCAmY3MtPmV2ZW50KSkgewogCQlpZiAoIWNzLT5ody5oZmNzeC5udF9tb2RlKQogCQkJc3dpdGNoIChjcy0+ZGMuaGZjc3gucGhfc3RhdGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pY2MuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pY2MuYwppbmRleCA2ODJjYWMzLi45YWJhNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2ljYy5jCkBAIC04Myw4ICs4Myw2IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSwgdHF1ZXVlKTsKIAlzdHJ1Y3QgUFN0YWNrICpzdHB0cjsKIAkKLQlpZiAoIWNzKQotCQlyZXR1cm47CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChEX0NMRUFSQlVTWSwgJmNzLT5ldmVudCkpIHsKIAkJaWYgKGNzLT5kZWJ1ZykKIAkJCWRlYnVnbDEoY3MsICJELUNoYW5uZWwgQnVzeSBjbGVhcmVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzYWMuYwppbmRleCAwN2IxNjczLi5hMTkzNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2FjLmMKQEAgLTg2LDggKzg2LDYgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBJc2RuQ2FyZFN0YXRlLCB0cXVldWUpOwogCXN0cnVjdCBQU3RhY2sgKnN0cHRyOwogCQotCWlmICghY3MpCi0JCXJldHVybjsKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERfQ0xFQVJCVVNZLCAmY3MtPmV2ZW50KSkgewogCQlpZiAoY3MtPmRlYnVnKQogCQkJZGVidWdsMShjcywgIkQtQ2hhbm5lbCBCdXN5IGNsZWFyZWQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RuaGRsYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2OWE3N2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDMgKzAsMCBAQAotLyoKLSAqIGlzZG5oZGxjLmMgIC0tICBHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIuCi0gKgotICpDb3B5cmlnaHQgKEMpIDIwMDIJV29sZmdhbmcgTcO8ZXMgICAgICA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4KLSAqCQkyMDAxIAlGcm9kZSBJc2Frc2VuICAgICAgPGZpc2Frc2VuQGJld2FuLmNvbT4KLSAqICAgICAgICAgICAgICAyMDAxIAlLYWkgR2VybWFzY2hld3NraSAgPGthaS5nZXJtYXNjaGV3c2tpQGdteC5kZT4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KLSNpbmNsdWRlICJpc2RuaGRsYy5oIgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1NT0RVTEVfQVVUSE9SKCJXb2xmZ2FuZyBNw7xlcyA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4sICIKLQkgICAgICAiRnJvZGUgSXNha3NlbiA8ZmlzYWtzZW5AYmV3YW4uY29tPiwgIgotCSAgICAgICJLYWkgR2VybWFzY2hld3NraSA8a2FpLmdlcm1hc2NoZXdza2lAZ214LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotZW51bSB7Ci0JSERMQ19GQVNUX0lETEUsSERMQ19HRVRfRkxBR19CMCxIRExDX0dFVEZMQUdfQjFBNixIRExDX0dFVEZMQUdfQjcsCi0JSERMQ19HRVRfREFUQSxIRExDX0ZBU1RfRkxBRwotfTsKLQotZW51bSB7Ci0JSERMQ19TRU5EX0RBVEEsSERMQ19TRU5EX0NSQzEsSERMQ19TRU5EX0ZBU1RfRkxBRywKLQlIRExDX1NFTkRfRklSU1RfRkxBRyxIRExDX1NFTkRfQ1JDMixIRExDX1NFTkRfQ0xPU0lOR19GTEFHLAotCUhETENfU0VORF9JRExFMSxIRExDX1NFTkRfRkFTVF9JRExFLEhETENfU0VOREZMQUdfQjAsCi0JSERMQ19TRU5ERkxBR19CMUE2LEhETENfU0VOREZMQUdfQjcsU1RPUFBFRAotfTsKLQotdm9pZCBpc2RuaGRsY19yY3ZfaW5pdCAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGludCBkb19hZGFwdDU2KQotewotICAgCWhkbGMtPmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQloZGxjLT5mZmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9EQVRBOwotCWhkbGMtPmRvX2FkYXB0NTYgPSBkb19hZGFwdDU2OwotCWhkbGMtPmRjaGFubmVsID0gMDsKLQloZGxjLT5jcmMgPSAwOwotCWhkbGMtPmNiaW4gPSAwOwotCWhkbGMtPnNoaWZ0X3JlZyA9IDA7Ci0JaGRsYy0+ZmZ2YWx1ZSA9IDA7Ci0JaGRsYy0+ZHN0cG9zID0gMDsKLX0KLQotdm9pZCBpc2RuaGRsY19vdXRfaW5pdCAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGludCBpc19kX2NoYW5uZWwsIGludCBkb19hZGFwdDU2KQotewotICAgCWhkbGMtPmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQloZGxjLT5mZmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JaGRsYy0+ZG9fY2xvc2luZyA9IDA7Ci0JaGRsYy0+ZmZ2YWx1ZSA9IDA7Ci0JaWYgKGlzX2RfY2hhbm5lbCkgewotCQloZGxjLT5kY2hhbm5lbCA9IDE7Ci0JCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZJUlNUX0ZMQUc7Ci0JfSBlbHNlIHsKLQkJaGRsYy0+ZGNoYW5uZWwgPSAwOwotCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GQVNUX0ZMQUc7Ci0JCWhkbGMtPmZmdmFsdWUgPSAweDdlOwotCX0KLQloZGxjLT5jYmluID0gMHg3ZTsKLQloZGxjLT5iaXRfc2hpZnQgPSAwOwotCWlmKGRvX2FkYXB0NTYpewotCQloZGxjLT5kb19hZGFwdDU2ID0gMTsKLQkJaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOwotCX0gZWxzZSB7Ci0JCWhkbGMtPmRvX2FkYXB0NTYgPSAwOwotCQloZGxjLT5kYXRhX2JpdHMgPSA4OwotCX0KLQloZGxjLT5zaGlmdF9yZWcgPSAwOwotfQotCi0vKgotICBpc2RuaGRsY19kZWNvZGUgLSBkZWNvZGVzIEhETEMgZnJhbWVzIGZyb20gYSB0cmFuc3BhcmVudCBiaXQgc3RyZWFtLgotCi0gIFRoZSBzb3VyY2UgYnVmZmVyIGlzIHNjYW5uZWQgZm9yIHZhbGlkIEhETEMgZnJhbWVzIGxvb2tpbmcgZm9yCi0gIGZsYWdzICgwMTExMTExMCkgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGEgZnJhbWUuIElmIHRoZSBzdGFydCBvZgotICB0aGUgZnJhbWUgaXMgZm91bmQsIHRoZSBiaXQgc3R1ZmZpbmcgaXMgcmVtb3ZlZCAoMCBhZnRlciA1IDEncykuCi0gIFdoZW4gYSBuZXcgZmxhZyBpcyBmb3VuZCwgdGhlIGNvbXBsZXRlIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkCi0gIGFuZCB0aGUgQ1JDIGlzIGNoZWNrZWQuCi0gIElmIGEgdmFsaWQgZnJhbWUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmcmFtZSBsZW5ndGgKLSAgZXhjbHVkaW5nIHRoZSBDUkMgd2l0aCB0aGUgYml0IEhETENfRU5EX09GX0ZSQU1FIHNldC4KLSAgSWYgdGhlIGJlZ2lubmluZyBvZiBhIHZhbGlkIGZyYW1lIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gcmV0dXJucwotICB0aGUgbGVuZ3RoLgotICBJZiBhIGZyYW1pbmcgZXJyb3IgaXMgZm91bmQgKHRvbyBtYW55IDFzIGFuZCBub3QgYSBmbGFnKSB0aGUgZnVuY3Rpb24KLSAgcmV0dXJucyB0aGUgbGVuZ3RoIHdpdGggdGhlIGJpdCBIRExDX0ZSQU1JTkdfRVJST1Igc2V0LgotICBJZiBhIENSQyBlcnJvciBpcyBmb3VuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIHdpdGggdGhlCi0gIGJpdCBIRExDX0NSQ19FUlJPUiBzZXQuCi0gIElmIHRoZSBmcmFtZSBsZW5ndGggZXhjZWVkcyB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHNpemUsIHRoZSBmdW5jdGlvbgotICByZXR1cm5zIHRoZSBsZW5ndGggd2l0aCB0aGUgYml0IEhETENfTEVOR1RIX0VSUk9SIHNldC4KLQotICBzcmMgLSBzb3VyY2UgYnVmZmVyCi0gIHNsZW4gLSBzb3VyY2UgYnVmZmVyIGxlbmd0aAotICBjb3VudCAtIG51bWJlciBvZiBieXRlcyByZW1vdmVkIChkZWNvZGVkKSBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyCi0gIGRzdCBfIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICBkc2l6ZSAtIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplCi0gIHJldHVybnMgLSBudW1iZXIgb2YgZGVjb2RlZCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGFuZCBzdGF0dXMKLSAgZmxhZy4KLSAqLwotaW50IGlzZG5oZGxjX2RlY29kZSAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJICAgICBpbnQgc2xlbiwgaW50ICpjb3VudCwgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgZHNpemUpCi17Ci0JaW50IHN0YXR1cz0wOwotCi0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmFzdF9mbGFnW109ewotCQkweDAwLDB4MDAsMHgwMCwweDIwLDB4MzAsMHgzOCwweDNjLDB4M2UsMHgzZgotCX07Ci0KLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2ZsYWdfdmFsdWVbXT17Ci0JCTB4MDAsMHg3ZSwweGZjLDB4ZjksMHhmMywweGU3LDB4Y2YsMHg5ZiwweDNmCi0JfTsKLQotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZhc3RfYWJvcnRbXT17Ci0JCTB4MDAsMHgwMCwweDgwLDB4YzAsMHhlMCwweGYwLDB4ZjgsMHhmYywweGZlLDB4ZmYKLQl9OwotCi0JKmNvdW50ID0gc2xlbjsKLQotCXdoaWxlKHNsZW4gPiAwKXsKLQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCWhkbGMtPmNiaW4gPSAqc3JjKys7Ci0JCQlzbGVuLS07Ci0JCQloZGxjLT5iaXRfc2hpZnQgPSA4OwotCQkJaWYoaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0IC0tOwotCQkJfQotCQl9Ci0KLQkJc3dpdGNoKGhkbGMtPnN0YXRlKXsKLQkJY2FzZSBTVE9QUEVEOgotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgSERMQ19GQVNUX0lETEU6Ci0JCQlpZihoZGxjLT5jYmluID09IDB4ZmYpewotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0ZMQUdfQjA7Ci0JCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX0dFVF9GTEFHX0IwOgotCQkJaWYoIShoZGxjLT5jYmluICYgMHg4MCkpIHsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VURkxBR19CMUE2OwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlpZighaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJCWlmKCsraGRsYy0+aGRsY19iaXRzMSA+PTggKSBpZihoZGxjLT5iaXRfc2hpZnQ9PTEpCi0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9JRExFOwotCQkJCX0KLQkJCX0KLQkJCWhkbGMtPmNiaW48PD0xOwotCQkJaGRsYy0+Yml0X3NoaWZ0IC0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19HRVRGTEFHX0IxQTY6Ci0JCQlpZihoZGxjLT5jYmluICYgMHg4MCl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSsrOwotCQkJCWlmKGhkbGMtPmhkbGNfYml0czE9PTYpewotCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VURkxBR19CNzsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJfQotCQkJaGRsYy0+Y2Jpbjw8PTE7Ci0JCQloZGxjLT5iaXRfc2hpZnQgLS07Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX0dFVEZMQUdfQjc6Ci0JCQlpZihoZGxjLT5jYmluICYgMHg4MCkgewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKLQkJCX0gZWxzZSB7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9EQVRBOwotCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPSAwOwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQl9Ci0JCQloZGxjLT5jYmluPDw9MTsKLQkJCWhkbGMtPmJpdF9zaGlmdCAtLTsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfR0VUX0RBVEE6Ci0JCQlpZihoZGxjLT5jYmluICYgMHg4MCl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSsrOwotCQkJCXN3aXRjaChoZGxjLT5oZGxjX2JpdHMxKXsKLQkJCQljYXNlIDY6Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgNzoKLQkJCQkJaWYoaGRsYy0+ZGF0YV9yZWNlaXZlZCkgewotCQkJCQkJLy8gYmFkIGZyYW1lCi0JCQkJCQlzdGF0dXMgPSAtSERMQ19GUkFNSU5HX0VSUk9SOwotCQkJCQl9Ci0JCQkJCWlmKCFoZGxjLT5kb19hZGFwdDU2KXsKLQkJCQkJCWlmKGhkbGMtPmNiaW49PWZhc3RfYWJvcnRbaGRsYy0+Yml0X3NoaWZ0KzFdKXsKLQkJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9JRExFOwotCQkJCQkJCWhkbGMtPmJpdF9zaGlmdD0xOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9IGVsc2UgewotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9GTEFHX0IwOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZz4+PTE7Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZyB8PSAweDgwOwotCQkJCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzd2l0Y2goaGRsYy0+aGRsY19iaXRzMSl7Ci0JCQkJY2FzZSA1OgotCQkJCQlicmVhazsKLQkJCQljYXNlIDY6Ci0JCQkJCWlmKGhkbGMtPmRhdGFfcmVjZWl2ZWQpewotCQkJCQkJaWYgKGhkbGMtPmRzdHBvcyA8IDIpIHsKLQkJCQkJCQlzdGF0dXMgPSAtSERMQ19GUkFNSU5HX0VSUk9SOwotCQkJCQkJfSBlbHNlIGlmIChoZGxjLT5jcmMgIT0gMHhmMGI4KXsKLQkJCQkJCQkvLyBjcmMgZXJyb3IKLQkJCQkJCQlzdGF0dXMgPSAtSERMQ19DUkNfRVJST1I7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCS8vIHJlbW92ZSBDUkMKLQkJCQkJCQloZGxjLT5kc3Rwb3MgLT0gMjsKLQkJCQkJCQkvLyBnb29kIGZyYW1lCi0JCQkJCQkJc3RhdHVzID0gaGRsYy0+ZHN0cG9zOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKLQkJCQkJaGRsYy0+c2hpZnRfcmVnID0gMDsKLQkJCQkJaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQkJCQkJaWYoIWhkbGMtPmRvX2FkYXB0NTYpewotCQkJCQkJaWYoaGRsYy0+Y2Jpbj09ZmFzdF9mbGFnW2hkbGMtPmJpdF9zaGlmdF0pewotCQkJCQkJCWhkbGMtPmZmdmFsdWUgPSBmYXN0X2ZsYWdfdmFsdWVbaGRsYy0+Yml0X3NoaWZ0XTsKLQkJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9GTEFHOwotCQkJCQkJCWhkbGMtPmZmYml0X3NoaWZ0ID0gaGRsYy0+Yml0X3NoaWZ0OwotCQkJCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDE7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZz4+PTE7Ci0JCQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQl9Ci0JCQlpZiAoc3RhdHVzKSB7Ci0JCQkJaGRsYy0+ZHN0cG9zID0gMDsKLQkJCQkqY291bnQgLT0gc2xlbjsKLQkJCQloZGxjLT5jYmluIDw8PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJCXJldHVybiBzdGF0dXM7Ci0JCQl9Ci0JCQlpZihoZGxjLT5kYXRhX2JpdHM9PTgpewotCQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7Ci0JCQkJaGRsYy0+Y3JjID0gY3JjX2NjaXR0X2J5dGUoaGRsYy0+Y3JjLCBoZGxjLT5zaGlmdF9yZWcpOwotCi0JCQkJLy8gZ29vZCBieXRlIHJlY2VpdmVkCi0JCQkJaWYgKGhkbGMtPmRzdHBvcyA8IGRzaXplKSB7Ci0JCQkJCWRzdFtoZGxjLT5kc3Rwb3MrK10gPSBoZGxjLT5zaGlmdF9yZWc7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gZnJhbWUgdG9vIGxvbmcKLQkJCQkJc3RhdHVzID0gLUhETENfTEVOR1RIX0VSUk9SOwotCQkJCQloZGxjLT5kc3Rwb3MgPSAwOwotCQkJCX0KLQkJCX0KLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfRkFTVF9GTEFHOgotCQkJaWYoaGRsYy0+Y2Jpbj09aGRsYy0+ZmZ2YWx1ZSl7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoaGRsYy0+Y2JpbiA9PSAweGZmKXsKLQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0ZBU1RfSURMRTsKLQkJCQkJaGRsYy0+Yml0X3NoaWZ0PTA7Ci0JCQkJfSBlbHNlIGlmKGhkbGMtPmZmYml0X3NoaWZ0PT04KXsKLQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVEZMQUdfQjc7Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IGZhc3RfYWJvcnRbaGRsYy0+ZmZiaXRfc2hpZnQtMV07Ci0JCQkJCWhkbGMtPmhkbGNfYml0czEgPSBoZGxjLT5mZmJpdF9zaGlmdC0yOwotCQkJCQlpZihoZGxjLT5oZGxjX2JpdHMxPDApaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJCWhkbGMtPmRhdGFfYml0cyA9IGhkbGMtPmZmYml0X3NoaWZ0LTE7Ci0JCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQkqY291bnQgLT0gc2xlbjsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAgaXNkbmhkbGNfZW5jb2RlIC0gZW5jb2RlcyBIRExDIGZyYW1lcyB0byBhIHRyYW5zcGFyZW50IGJpdCBzdHJlYW0uCi0KLSAgVGhlIGJpdCBzdHJlYW0gc3RhcnRzIHdpdGggYSBiZWdpbm5pbmcgZmxhZyAoMDExMTExMTApLiBBZnRlcgotICB0aGF0IGVhY2ggYnl0ZSBpcyBhZGRlZCB0byB0aGUgYml0IHN0cmVhbSB3aXRoIGJpdCBzdHVmZmluZyBhZGRlZAotICAoMCBhZnRlciA1IDEncykuCi0gIFdoZW4gdGhlIGxhc3QgYnl0ZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHNvdXJjZSBidWZmZXIsIHRoZQotICBDUkMgKDIgYnl0ZXMgaXMgYWRkZWQpIGFuZCB0aGUgZnJhbWUgdGVybWluYXRlcyB3aXRoIHRoZSBlbmRpbmcgZmxhZy4KLSAgRm9yIHRoZSBkY2hhbm5lbCwgdGhlIGlkbGUgY2hhcmFjdGVyIChhbGwgMSdzKSBpcyBhbHNvIGFkZGVkIGF0IHRoZSBlbmQuCi0gIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggZW1wdHkgc291cmNlIGJ1ZmZlciAoc2xlbj0wKSwgZmxhZ3Mgb3IKLSAgaWRsZSBjaGFyYWN0ZXIgd2lsbCBiZSBnZW5lcmF0ZWQuCi0KLSAgc3JjIC0gc291cmNlIGJ1ZmZlcgotICBzbGVuIC0gc291cmNlIGJ1ZmZlciBsZW5ndGgKLSAgY291bnQgLSBudW1iZXIgb2YgYnl0ZXMgcmVtb3ZlZCAoZW5jb2RlZCkgZnJvbSBzb3VyY2UgYnVmZmVyCi0gIGRzdCBfIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICBkc2l6ZSAtIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplCi0gIHJldHVybnMgLSBudW1iZXIgb2YgZW5jb2RlZCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0qLwotaW50IGlzZG5oZGxjX2VuY29kZShzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQl1bnNpZ25lZCBzaG9ydCBzbGVuLCBpbnQgKmNvdW50LAotCQl1bnNpZ25lZCBjaGFyICpkc3QsIGludCBkc2l6ZSkKLXsKLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB4ZmFzdF9mbGFnX3ZhbHVlW10gPSB7Ci0JCTB4N2UsMHgzZiwweDlmLDB4Y2YsMHhlNywweGYzLDB4ZjksMHhmYywweDdlCi0JfTsKLQotCWludCBsZW4gPSAwOwotCi0JKmNvdW50ID0gc2xlbjsKLQotCXdoaWxlIChkc2l6ZSA+IDApIHsKLQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCWlmKHNsZW4gJiYgIWhkbGMtPmRvX2Nsb3NpbmcpewotCQkJCWhkbGMtPnNoaWZ0X3JlZyA9ICpzcmMrKzsKLQkJCQlzbGVuLS07Ci0JCQkJaWYgKHNsZW4gPT0gMCkKLQkJCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDE7ICAvKiBjbG9zaW5nIHNlcXVlbmNlLCBDUkMgKyBmbGFnKHMpICovCi0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoaGRsYy0+c3RhdGUgPT0gSERMQ19TRU5EX0RBVEEpewotCQkJCQlpZihoZGxjLT5kYXRhX3JlY2VpdmVkKXsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0NSQzE7Ci0JCQkJCQloZGxjLT5jcmMgXj0gMHhmZmZmOwotCQkJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKLQkJCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IGhkbGMtPmNyYyAmIDB4ZmY7Ci0JCQkJCX0gZWxzZSBpZighaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GQVNUX0ZMQUc7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VOREZMQUdfQjA7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJfQotCi0JCXN3aXRjaChoZGxjLT5zdGF0ZSl7Ci0JCWNhc2UgU1RPUFBFRDoKLQkJCXdoaWxlIChkc2l6ZS0tKQotCQkJCSpkc3QrKyA9IDB4ZmY7Ci0KLQkJCXJldHVybiBkc2l6ZTsKLQkJY2FzZSBIRExDX1NFTkRfRkFTVF9GTEFHOgotCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7Ci0JCQlpZihzbGVuID09IDApewotCQkJCSpkc3QrKyA9IGhkbGMtPmZmdmFsdWU7Ci0JCQkJbGVuKys7Ci0JCQkJZHNpemUtLTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09OCl7Ci0JCQkJaGRsYy0+Y2JpbiA9IGhkbGMtPmZmdmFsdWU+Pig4LWhkbGMtPmRhdGFfYml0cyk7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKLQkJCQloZGxjLT5jcmMgPSAweGZmZmY7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRGTEFHX0IwOgotCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7Ci0JCQloZGxjLT5jYmluIDw8PSAxOwotCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMUE2OwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5ERkxBR19CMUE2OgotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaGRsYy0+Y2JpbisrOwotCQkJaWYoKytoZGxjLT5oZGxjX2JpdHMxID09IDYpCi0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0I3OwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5ERkxBR19CNzoKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKHNsZW4gPT0gMCl7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT04KXsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9EQVRBOwotCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VORF9GSVJTVF9GTEFHOgotCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7Ci0JCQlpZihoZGxjLT5kYXRhX2JpdHM9PTgpewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0RBVEE7Ci0JCQkJaGRsYy0+Y3JjID0gMHhmZmZmOwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaWYoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkKLQkJCQloZGxjLT5jYmluKys7Ci0JCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09MCl7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKLQkJCQloZGxjLT5jcmMgPSAweGZmZmY7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfREFUQToKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKGhkbGMtPmhkbGNfYml0czEgPT0gNSl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTgpewotCQkJCWhkbGMtPmNyYyA9IGNyY19jY2l0dF9ieXRlKGhkbGMtPmNyYywgaGRsYy0+c2hpZnRfcmVnKTsKLQkJCX0KLQkJCWlmKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpewotCQkJCWhkbGMtPmhkbGNfYml0czErKzsKLQkJCQloZGxjLT5jYmluKys7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfSBlbHNlIHsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0LS07Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfQ1JDMToKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKGhkbGMtPmhkbGNfYml0czEgPT0gNSl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZihoZGxjLT5zaGlmdF9yZWcgJiAweDAxKXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxKys7Ci0JCQkJaGRsYy0+Y2JpbisrOwotCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKLQkJCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCX0gZWxzZSB7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfQotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPSAoaGRsYy0+Y3JjID4+IDgpOwotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0NSQzI7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VORF9DUkMyOgotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaWYoaGRsYy0+aGRsY19iaXRzMSA9PSA1KXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpewotCQkJCWhkbGMtPmhkbGNfYml0czErKzsKLQkJCQloZGxjLT5jYmluKys7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfSBlbHNlIHsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0LS07Ci0JCQl9Ci0JCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTApewotCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IDB4N2U7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfQ0xPU0lOR19GTEFHOwotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfQ0xPU0lOR19GTEFHOgotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaWYoaGRsYy0+aGRsY19iaXRzMSA9PSA1KXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpewotCQkJCWhkbGMtPmNiaW4rKzsKLQkJCX0KLQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKLQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCQloZGxjLT5mZnZhbHVlID0geGZhc3RfZmxhZ192YWx1ZVtoZGxjLT5kYXRhX2JpdHNdOwotCQkJCWlmKGhkbGMtPmRjaGFubmVsKXsKLQkJCQkJaGRsYy0+ZmZ2YWx1ZSA9IDB4N2U7Ci0JCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0lETEUxOwotCQkJCQloZGxjLT5iaXRfc2hpZnQgPSA4LWhkbGMtPmRhdGFfYml0czsKLQkJCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKQotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRkFTVF9JRExFOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmKCFoZGxjLT5kb19hZGFwdDU2KXsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZBU1RfRkxBRzsKLQkJCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOwotCQkJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQkJCX0KLQkJCQkJLy8gRmluaXNoZWQgd2l0aCB0aGlzIGZyYW1lLCBzZW5kIGZsYWdzCi0JCQkJCWlmIChkc2l6ZSA+IDEpIGRzaXplID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfSURMRTE6Ci0JCQloZGxjLT5kb19jbG9zaW5nID0gMDsKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5jYmluKys7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GQVNUX0lETEU7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VORF9GQVNUX0lETEU6Ci0JCQloZGxjLT5kb19jbG9zaW5nID0gMDsKLQkJCWhkbGMtPmNiaW4gPSAweGZmOwotCQkJaGRsYy0+ZGF0YV9iaXRzID0gODsKLQkJCWlmKGhkbGMtPmJpdF9zaGlmdCA9PSA4KXsKLQkJCQloZGxjLT5jYmluID0gMHg3ZTsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GSVJTVF9GTEFHOwotCQkJfSBlbHNlIHsKLQkJCQkqZHN0KysgPSBoZGxjLT5jYmluOwotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IGhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQkJbGVuKys7Ci0JCQkJZHNpemUgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlpZihoZGxjLT5kb19hZGFwdDU2KXsKLQkJCWlmKGhkbGMtPmRhdGFfYml0cz09Nyl7Ci0JCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCQloZGxjLT5jYmluKys7Ci0JCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQl9Ci0JCX0KLQkJaWYoaGRsYy0+ZGF0YV9iaXRzPT04KXsKLQkJCSpkc3QrKyA9IGhkbGMtPmNiaW47Ci0JCQloZGxjLT5kYXRhX2JpdHMgPSAwOwotCQkJbGVuKys7Ci0JCQlkc2l6ZS0tOwotCQl9Ci0JfQotCSpjb3VudCAtPSBzbGVuOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotRVhQT1JUX1NZTUJPTChpc2RuaGRsY19yY3ZfaW5pdCk7Ci1FWFBPUlRfU1lNQk9MKGlzZG5oZGxjX2RlY29kZSk7Ci1FWFBPUlRfU1lNQk9MKGlzZG5oZGxjX291dF9pbml0KTsKLUVYUE9SVF9TWU1CT0woaXNkbmhkbGNfZW5jb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RuaGRsYy5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMGE5NWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogaXNkbmhkbGMuaCAgLS0gIEdlbmVyYWwgcHVycG9zZSBJU0ROIEhETEMgZGVjb2Rlci4KLSAqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBhIEhETEMgZGVjb2Rlci9lbmNvZGVyIGluIHNvZnR3YXJlLgotICogTmVjY2Vzc2FyeSBiZWNhdXNlIHNvbWUgSVNETiBkZXZpY2VzIGRvbid0IGhhdmUgSERMQwotICogY29udHJvbGxlcnMuIEFsc28gaW5jbHVkZWQ6IGEgYml0IHJldmVyc2FsIHRhYmxlLgotICoKLSAqQ29weXJpZ2h0IChDKSAyMDAyICAgIFdvbGZnYW5nIE3DvGVzICAgICAgPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+Ci0gKgkJMjAwMSAJRnJvZGUgSXNha3NlbiAgICAgIDxmaXNha3NlbkBiZXdhbi5jb20+Ci0gKiAgICAgICAgICAgICAgMjAwMSAJS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+Ci0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19JU0ROSERMQ19IX18KLSNkZWZpbmUgX19JU0ROSERMQ19IX18KLQotc3RydWN0IGlzZG5oZGxjX3ZhcnMgewotCWludCBiaXRfc2hpZnQ7Ci0JaW50IGhkbGNfYml0czE7Ci0JaW50IGRhdGFfYml0czsKLQlpbnQgZmZiaXRfc2hpZnQ7IAkvLyBlbmNvZGluZyBvbmx5Ci0JaW50IHN0YXRlOwotCWludCBkc3Rwb3M7Ci0KLQl1bnNpZ25lZCBzaG9ydCBjcmM7Ci0KLQl1bnNpZ25lZCBjaGFyIGNiaW47Ci0JdW5zaWduZWQgY2hhciBzaGlmdF9yZWc7Ci0JdW5zaWduZWQgY2hhciBmZnZhbHVlOwotCi0JdW5zaWduZWQgaW50IGRhdGFfcmVjZWl2ZWQ6MTsgCS8vIHNldCBpZiB0cmFuc2ZlcnJpbmcgZGF0YQotCXVuc2lnbmVkIGludCBkY2hhbm5lbDoxOyAJLy8gc2V0IGlmIEQgY2hhbm5lbCAoc2VuZCBpZGxlIGluc3RlYWQgb2YgZmxhZ3MpCi0JdW5zaWduZWQgaW50IGRvX2FkYXB0NTY6MTsgCS8vIHNldCBpZiA1NksgYWRhcHRhdGlvbgotCXVuc2lnbmVkIGludCBkb19jbG9zaW5nOjE7IAkvLyBzZXQgaWYgaW4gY2xvc2luZyBwaGFzZSAobmVlZCB0byBzZW5kIENSQyArIGZsYWcKLX07Ci0KLQotLyoKLSAgVGhlIHJldHVybiB2YWx1ZSBmcm9tIGlzZG5oZGxjX2RlY29kZSBpcwotICB0aGUgZnJhbWUgbGVuZ3RoLCAwIGlmIG5vIGNvbXBsZXRlIGZyYW1lIHdhcyBkZWNvZGVkLAotICBvciBhIG5lZ2F0aXZlIGVycm9yIG51bWJlcgotKi8KLSNkZWZpbmUgSERMQ19GUkFNSU5HX0VSUk9SICAgICAxCi0jZGVmaW5lIEhETENfQ1JDX0VSUk9SICAgICAgICAgMgotI2RlZmluZSBIRExDX0xFTkdUSF9FUlJPUiAgICAgIDMKLQotZXh0ZXJuIHZvaWQgaXNkbmhkbGNfcmN2X2luaXQgKHN0cnVjdCBpc2RuaGRsY192YXJzICpoZGxjLCBpbnQgZG9fYWRhcHQ1Nik7Ci0KLWV4dGVybiBpbnQgaXNkbmhkbGNfZGVjb2RlIChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgc2xlbixpbnQgKmNvdW50LAotCSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgZHNpemUpOwotCi1leHRlcm4gdm9pZCBpc2RuaGRsY19vdXRfaW5pdCAoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsaW50IGlzX2RfY2hhbm5lbCxpbnQgZG9fYWRhcHQ1Nik7Ci0KLWV4dGVybiBpbnQgaXNkbmhkbGNfZW5jb2RlIChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYyxjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsdW5zaWduZWQgc2hvcnQgc2xlbixpbnQgKmNvdW50LAotCSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LGludCBkc2l6ZSk7Ci0KLSNlbmRpZiAvKiBfX0lTRE5IRExDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCmluZGV4IDMxN2YxNmYuLjljZTZhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKQEAgLTY0Nyw4ICs2NDcsNiBAQAogCXtTVF9MMV9GOCwgRVZfVElNRVJfREVBQ1QsIGwxX3RpbWVyX2RlYWN0fSwKIH07CiAKLSNkZWZpbmUgTDFTX0ZOX0NPVU5UIChzaXplb2YoTDFTRm5MaXN0KS9zaXplb2Yoc3RydWN0IEZzbU5vZGUpKQotCiAjaWZkZWYgSElTQVhfVUlOVEVSRkFDRQogc3RhdGljIHZvaWQKIGwxX2RlYWN0X3JlcV91KHN0cnVjdCBGc21JbnN0ICpmaSwgaW50IGV2ZW50LCB2b2lkICphcmcpCkBAIC03MDYsOCArNzA0LDYgQEAKIAl7U1RfTDFfUkVTRVQsIEVWX1RJTUVSX0RFQUNULCBsMV90aW1lcl9kZWFjdH0sCiB9OwogCi0jZGVmaW5lIEwxVV9GTl9DT1VOVCAoc2l6ZW9mKEwxVUZuTGlzdCkvc2l6ZW9mKHN0cnVjdCBGc21Ob2RlKSkKLQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCkBAIC03NTQsOCArNzUwLDYgQEAKIAl7U1RfTDFfV0FJVF9ERUFDVCwgRVZfVElNRVJfREVBQ1QsIGwxYl90aW1lcl9kZWFjdH0sCiB9OwogCi0jZGVmaW5lIEwxQl9GTl9DT1VOVCAoc2l6ZW9mKEwxQkZuTGlzdCkvc2l6ZW9mKHN0cnVjdCBGc21Ob2RlKSkKLQogaW50IF9faW5pdCAKIElzZG5sMU5ldyh2b2lkKQogewpAQCAtNzY1LDcgKzc1OSw3IEBACiAJbDFmc21fcy5ldmVudF9jb3VudCA9IEwxX0VWRU5UX0NPVU5UOwogCWwxZnNtX3Muc3RyRXZlbnQgPSBzdHJMMUV2ZW50OwogCWwxZnNtX3Muc3RyU3RhdGUgPSBzdHJMMVNTdGF0ZTsKLQlyZXR2YWwgPSBGc21OZXcoJmwxZnNtX3MsIEwxU0ZuTGlzdCwgTDFTX0ZOX0NPVU5UKTsKKwlyZXR2YWwgPSBGc21OZXcoJmwxZnNtX3MsIEwxU0ZuTGlzdCwgQVJSQVlfU0laRShMMVNGbkxpc3QpKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC03NzMsNyArNzY3LDcgQEAKIAlsMWZzbV9iLmV2ZW50X2NvdW50ID0gTDFfRVZFTlRfQ09VTlQ7CiAJbDFmc21fYi5zdHJFdmVudCA9IHN0ckwxRXZlbnQ7CiAJbDFmc21fYi5zdHJTdGF0ZSA9IHN0ckwxQlN0YXRlOwotCXJldHZhbCA9IEZzbU5ldygmbDFmc21fYiwgTDFCRm5MaXN0LCBMMUJfRk5fQ09VTlQpOworCXJldHZhbCA9IEZzbU5ldygmbDFmc21fYiwgTDFCRm5MaXN0LCBBUlJBWV9TSVpFKEwxQkZuTGlzdCkpOwogCWlmIChyZXR2YWwpIHsKIAkJRnNtRnJlZSgmbDFmc21fcyk7CiAJCXJldHVybiByZXR2YWw7CkBAIC03ODMsNyArNzc3LDcgQEAKIAlsMWZzbV91LmV2ZW50X2NvdW50ID0gTDFfRVZFTlRfQ09VTlQ7CiAJbDFmc21fdS5zdHJFdmVudCA9IHN0ckwxRXZlbnQ7CiAJbDFmc21fdS5zdHJTdGF0ZSA9IHN0ckwxVVN0YXRlOwotCXJldHZhbCA9IEZzbU5ldygmbDFmc21fdSwgTDFVRm5MaXN0LCBMMVVfRk5fQ09VTlQpOworCXJldHZhbCA9IEZzbU5ldygmbDFmc21fdSwgTDFVRm5MaXN0LCBBUlJBWV9TSVpFKEwxVUZuTGlzdCkpOwogCWlmIChyZXR2YWwpIHsKIAkJRnNtRnJlZSgmbDFmc21fcyk7CiAJCUZzbUZyZWUoJmwxZnNtX2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCmluZGV4IDM0NDZmMjQuLjdiOTQ5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKQEAgLTE2MjMsOCArMTYyMyw2IEBACiAJe1NUX0wyXzgsIEVWX0wxX0RFQUNUSVZBVEUsIGwyX3BlcnNpc3RlbnRfZGF9LAogfTsKIAotI2RlZmluZSBMMl9GTl9DT1VOVCAoc2l6ZW9mKEwyRm5MaXN0KS9zaXplb2Yoc3RydWN0IEZzbU5vZGUpKQotCiBzdGF0aWMgdm9pZAogaXNkbmwyX2wxbDIoc3RydWN0IFBTdGFjayAqc3QsIGludCBwciwgdm9pZCAqYXJnKQogewpAQCAtMTgzNiw3ICsxODM0LDcgQEAKIAlsMmZzbS5ldmVudF9jb3VudCA9IEwyX0VWRU5UX0NPVU5UOwogCWwyZnNtLnN0ckV2ZW50ID0gc3RyTDJFdmVudDsKIAlsMmZzbS5zdHJTdGF0ZSA9IHN0ckwyU3RhdGU7Ci0JcmV0dXJuIEZzbU5ldygmbDJmc20sIEwyRm5MaXN0LCBMMl9GTl9DT1VOVCk7CisJcmV0dXJuIEZzbU5ldygmbDJmc20sIEwyRm5MaXN0LCBBUlJBWV9TSVpFKEwyRm5MaXN0KSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYwppbmRleCA5MzVmMjMzLi4wNjc2NjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMy5jCkBAIC01NDMsOCArNTQzLDYgQEAKIH07CiAvKiAqSU5ERU5ULU9OKiAqLwogCi0jZGVmaW5lIEwzX0ZOX0NPVU5UIChzaXplb2YoTDNGbkxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIHZvaWQKIGwzX21zZyhzdHJ1Y3QgUFN0YWNrICpzdCwgaW50IHByLCB2b2lkICphcmcpCiB7CkBAIC01ODcsNyArNTg1LDcgQEAKIAlsM2ZzbS5ldmVudF9jb3VudCA9IEwzX0VWRU5UX0NPVU5UOwogCWwzZnNtLnN0ckV2ZW50ID0gc3RyTDNFdmVudDsKIAlsM2ZzbS5zdHJTdGF0ZSA9IHN0ckwzU3RhdGU7Ci0JcmV0dXJuIEZzbU5ldygmbDNmc20sIEwzRm5MaXN0LCBMM19GTl9DT1VOVCk7CisJcmV0dXJuIEZzbU5ldygmbDNmc20sIEwzRm5MaXN0LCBBUlJBWV9TSVpFKEwzRm5MaXN0KSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM18xdHI2LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNfMXRyNi5jCmluZGV4IGM1YzM2ZWUuLmIwNTU0ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9sM18xdHI2LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzXzF0cjYuYwpAQCAtNjk4LDkgKzY5OCw2IEBACiAJIENDX1QzMDhfMiwgbDNfMXRyNl90MzA4XzJ9LAogfTsKIAotI2RlZmluZSBET1dOU1RMX0xFTiBcCi0JKHNpemVvZihkb3duc3RsKSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCi0KIHN0YXRpYyBzdHJ1Y3Qgc3RhdGVlbnRyeSBkYXRhc3RsbjFbXSA9CiB7CiAJe1NCSVQoMCksCkBAIC03MzUsOSArNzMyLDYgQEAKIAkgTVRfTjFfUkVMX0FDSywgbDNfMXRyNl9yZWxfYWNrfQogfTsKIAotI2RlZmluZSBEQVRBU1RMTjFfTEVOIFwKLQkoc2l6ZW9mKGRhdGFzdGxuMSkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgbWFuc3RhdGVsaXN0W10gPQogewogICAgICAgICB7U0JJVCgyKSwKQEAgLTc0Niw4ICs3NDAsNiBAQAogICAgICAgICAgRExfUkVMRUFTRSB8IElORElDQVRJT04sIGwzXzF0cjZfZGxfcmVsZWFzZX0sCiB9OwogIAotI2RlZmluZSBNQU5TTExFTiBcCi0gICAgICAgIChzaXplb2YobWFuc3RhdGVsaXN0KSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCiAvKiAqSU5ERU5ULU9OKiAqLwogCiBzdGF0aWMgdm9pZApAQCAtODQwLDExICs4MzIsMTEgQEAKIAkJCQltdCA9IE1UX04xX0lOVkFMSUQ7CiAJCQl9CiAJCX0KLQkJZm9yIChpID0gMDsgaSA8IERBVEFTVExOMV9MRU47IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YXN0bG4xKTsgaSsrKQogCQkJaWYgKChtdCA9PSBkYXRhc3RsbjFbaV0ucHJpbWl0aXZlKSAmJgogCQkJICAgICgoMSA8PCBwcm9jLT5zdGF0ZSkgJiBkYXRhc3RsbjFbaV0uc3RhdGUpKQogCQkJCWJyZWFrOwotCQlpZiAoaSA9PSBEQVRBU1RMTjFfTEVOKSB7CisJCWlmIChpID09IEFSUkFZX1NJWkUoZGF0YXN0bG4xKSkgewogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogCQkJCXNwcmludGYodG1wLCAidXAxdHI2JXNzdGF0ZSAlZCBtdCAleCB1bmhhbmRsZWQiLApAQCAtODkyLDExICs4ODQsMTEgQEAKIAkJcHJvYyA9IGFyZzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgRE9XTlNUTF9MRU47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkb3duc3RsKTsgaSsrKQogCQlpZiAoKHByID09IGRvd25zdGxbaV0ucHJpbWl0aXZlKSAmJgogCQkgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIGRvd25zdGxbaV0uc3RhdGUpKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gRE9XTlNUTF9MRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRvd25zdGwpKSB7CiAJCWlmIChzdC0+bDMuZGVidWcgJiBMM19ERUJfU1RBVEUpIHsKIAkJCXNwcmludGYodG1wLCAiZG93bjF0cjYgc3RhdGUgJWQgcHJpbSAlZCB1bmhhbmRsZWQiLAogCQkJCXByb2MtPnN0YXRlLCBwcik7CkBAIC05MjIsMTEgKzkxNCwxMSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiSGlTYXggbWFuMXRyNiB3aXRob3V0IHByb2MgcHI9JTA0eFxuIiwgcHIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFOU0xMRU47IGkrKykKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFuc3RhdGVsaXN0KTsgaSsrKQogICAgICAgICAgICAgICAgIGlmICgocHIgPT0gbWFuc3RhdGVsaXN0W2ldLnByaW1pdGl2ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIG1hbnN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGkgPT0gTUFOU0xMRU4pIHsKKyAgICAgICAgaWYgKGkgPT0gQVJSQVlfU0laRShtYW5zdGF0ZWxpc3QpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbDNfZGVidWcoc3QsICJjciAlZCBtYW4xdHI2IHN0YXRlICVkIHByaW0gJWQgdW5oYW5kbGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYy0+Y2FsbHJlZiAmIDB4N2YsIHByb2MtPnN0YXRlLCBwcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKaW5kZXggOTlmZWFlOC4uYTEyZmE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYwpAQCAtMjgyMCw5ICsyODIwLDYgQEAKIAkgQ0NfVDMwOSwgbDNkc3MxX2RsX3JlbGVhc2V9LAogfTsKIAotI2RlZmluZSBET1dOU0xMRU4gXAotCShzaXplb2YoZG93bnN0YXRlbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgZGF0YXN0YXRlbGlzdFtdID0KIHsKIAl7QUxMX1NUQVRFUywKQEAgLTI4NzUsOSArMjg3Miw2IEBACiAJIE1UX1JFU1VNRV9SRUpFQ1QsIGwzZHNzMV9yZXN1bWVfcmVqfSwKIH07CiAKLSNkZWZpbmUgREFUQVNMTEVOIFwKLQkoc2l6ZW9mKGRhdGFzdGF0ZWxpc3QpIC8gc2l6ZW9mKHN0cnVjdCBzdGF0ZWVudHJ5KSkKLQogc3RhdGljIHN0cnVjdCBzdGF0ZWVudHJ5IGdsb2JhbG1lc19saXN0W10gPQogewogCXtBTExfU1RBVEVTLApAQCAtMjg4OCw4ICsyODgyLDYgQEAKIAkgTVRfUkVTVEFSVF9BQ0tOT1dMRURHRSwgbDNkc3MxX3Jlc3RhcnRfYWNrfSwKICovCiB9OwotI2RlZmluZSBHTE9CQUxNX0xFTiBcCi0JKHNpemVvZihnbG9iYWxtZXNfbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQogCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgbWFuc3RhdGVsaXN0W10gPQogewpAQCAtMjkwMyw4ICsyODk1LDYgQEAKICAgICAgICAgIERMX1JFTEVBU0UgfCBJTkRJQ0FUSU9OLCBsM2RzczFfZGxfcmVsZWFzZX0sCiB9OwogCi0jZGVmaW5lIE1BTlNMTEVOIFwKLSAgICAgICAgKHNpemVvZihtYW5zdGF0ZWxpc3QpIC8gc2l6ZW9mKHN0cnVjdCBzdGF0ZWVudHJ5KSkKIC8qICpJTkRFTlQtT04qICovCiAKIApAQCAtMjkxOCwxMSArMjkwOCwxMSBAQAogCXN0cnVjdCBsM19wcm9jZXNzICpwcm9jID0gc3QtPmwzLmdsb2JhbDsKIAogCXByb2MtPmNhbGxyZWYgPSBza2ItPmRhdGFbMl07IC8qIGNyIGZsYWcgKi8KLQlmb3IgKGkgPSAwOyBpIDwgR0xPQkFMTV9MRU47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShnbG9iYWxtZXNfbGlzdCk7IGkrKykKIAkJaWYgKChtdCA9PSBnbG9iYWxtZXNfbGlzdFtpXS5wcmltaXRpdmUpICYmCiAJCSAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgZ2xvYmFsbWVzX2xpc3RbaV0uc3RhdGUpKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gR0xPQkFMTV9MRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGdsb2JhbG1lc19saXN0KSkgewogCQlpZiAoc3QtPmwzLmRlYnVnICYgTDNfREVCX1NUQVRFKSB7CiAJCQlsM19kZWJ1ZyhzdCwgImRzczEgZ2xvYmFsIHN0YXRlICVkIG10ICV4IHVuaGFuZGxlZCIsCiAJCQkJcHJvYy0+c3RhdGUsIG10KTsKQEAgLTMwOTcsMTEgKzMwODcsMTEgQEAKIAl9CiAJaWYgKChwID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0RJU1BMQVksIDApKSAhPSBOVUxMKSAKIAkgIGwzZHNzMV9kZWxpdmVyX2Rpc3BsYXkocHJvYywgcHIsIHApOyAvKiBEaXNwbGF5IElFIGluY2x1ZGVkICovCi0JZm9yIChpID0gMDsgaSA8IERBVEFTTExFTjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGFzdGF0ZWxpc3QpOyBpKyspCiAJCWlmICgobXQgPT0gZGF0YXN0YXRlbGlzdFtpXS5wcmltaXRpdmUpICYmCiAJCSAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgZGF0YXN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAJCQlicmVhazsKLQlpZiAoaSA9PSBEQVRBU0xMRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRhdGFzdGF0ZWxpc3QpKSB7CiAJCWlmIChzdC0+bDMuZGVidWcgJiBMM19ERUJfU1RBVEUpIHsKIAkJCWwzX2RlYnVnKHN0LCAiZHNzMXVwJXNzdGF0ZSAlZCBtdCAlI3ggdW5oYW5kbGVkIiwKIAkJCQkocHIgPT0gKERMX0RBVEEgfCBJTkRJQ0FUSU9OKSkgPyAiICIgOiAiKGJyb2FkY2FzdCkgIiwKQEAgLTMxNTYsMTEgKzMxNDYsMTEgQEAKIAkJcmV0dXJuOwogCX0gIAogCi0JZm9yIChpID0gMDsgaSA8IERPV05TTExFTjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRvd25zdGF0ZWxpc3QpOyBpKyspCiAJCWlmICgocHIgPT0gZG93bnN0YXRlbGlzdFtpXS5wcmltaXRpdmUpICYmCiAJCSAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgZG93bnN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAJCQlicmVhazsKLQlpZiAoaSA9PSBET1dOU0xMRU4pIHsKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGRvd25zdGF0ZWxpc3QpKSB7CiAJCWlmIChzdC0+bDMuZGVidWcgJiBMM19ERUJfU1RBVEUpIHsKIAkJCWwzX2RlYnVnKHN0LCAiZHNzMWRvd24gc3RhdGUgJWQgcHJpbSAlI3ggdW5oYW5kbGVkIiwKIAkJCQlwcm9jLT5zdGF0ZSwgcHIpOwpAQCAtMzE4NCwxMSArMzE3NCwxMSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiSGlTYXggZHNzMW1hbiB3aXRob3V0IHByb2MgcHI9JTA0eFxuIiwgcHIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFOU0xMRU47IGkrKykKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFuc3RhdGVsaXN0KTsgaSsrKQogICAgICAgICAgICAgICAgIGlmICgocHIgPT0gbWFuc3RhdGVsaXN0W2ldLnByaW1pdGl2ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIG1hbnN0YXRlbGlzdFtpXS5zdGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGkgPT0gTUFOU0xMRU4pIHsKKyAgICAgICAgaWYgKGkgPT0gQVJSQVlfU0laRShtYW5zdGF0ZWxpc3QpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbDNfZGVidWcoc3QsICJjciAlZCBkc3MxbWFuIHN0YXRlICVkIHByaW0gJSN4IHVuaGFuZGxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MtPmNhbGxyZWYgJiAweDdmLCBwcm9jLT5zdGF0ZSwgcHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwppbmRleCBmNzA0MWQ1Li40NjIyZDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwpAQCAtMjc1NSw5ICsyNzU1LDYgQEAKIAkgQ0NfVFNQSUQsIGwzbmkxX3NwaWRfdG91dCB9LAogfTsKIAotI2RlZmluZSBET1dOU0xMRU4gXAotCShzaXplb2YoZG93bnN0YXRlbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgZGF0YXN0YXRlbGlzdFtdID0KIHsKIAl7QUxMX1NUQVRFUywKQEAgLTI4MTAsOSArMjgwNyw2IEBACiAJIE1UX1JFU1VNRV9SRUpFQ1QsIGwzbmkxX3Jlc3VtZV9yZWp9LAogfTsKIAotI2RlZmluZSBEQVRBU0xMRU4gXAotCShzaXplb2YoZGF0YXN0YXRlbGlzdCkgLyBzaXplb2Yoc3RydWN0IHN0YXRlZW50cnkpKQotCiBzdGF0aWMgc3RydWN0IHN0YXRlZW50cnkgZ2xvYmFsbWVzX2xpc3RbXSA9CiB7CiAJe0FMTF9TVEFURVMsCkBAIC0yODI1LDggKzI4MTksNiBAQAogCXsgU0JJVCggMCApLCBNVF9ETF9FU1RBQkxJU0hFRCwgbDNuaTFfc3BpZF9zZW5kIH0sCiAJeyBTQklUKCAyMCApIHwgU0JJVCggMjEgKSB8IFNCSVQoIDIyICksIE1UX0lORk9STUFUSU9OLCBsM25pMV9zcGlkX2VwaWQgfSwKIH07Ci0jZGVmaW5lIEdMT0JBTE1fTEVOIFwKLQkoc2l6ZW9mKGdsb2JhbG1lc19saXN0KSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCiAKIHN0YXRpYyBzdHJ1Y3Qgc3RhdGVlbnRyeSBtYW5zdGF0ZWxpc3RbXSA9CiB7CkBAIC0yODQwLDggKzI4MzIsNiBAQAogICAgICAgICAgRExfUkVMRUFTRSB8IElORElDQVRJT04sIGwzbmkxX2RsX3JlbGVhc2V9LAogfTsKIAotI2RlZmluZSBNQU5TTExFTiBcCi0gICAgICAgIChzaXplb2YobWFuc3RhdGVsaXN0KSAvIHNpemVvZihzdHJ1Y3Qgc3RhdGVlbnRyeSkpCiAvKiAqSU5ERU5ULU9OKiAqLwogCiAKQEAgLTI4NTgsMTEgKzI4NDgsMTEgQEAKIAkJcHJvYy0+Y2FsbHJlZiA9IHNrYi0+ZGF0YVsyXTsgLyogY3IgZmxhZyAqLwogCWVsc2UKIAkJcHJvYy0+Y2FsbHJlZiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IEdMT0JBTE1fTEVOOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ2xvYmFsbWVzX2xpc3QpOyBpKyspCiAJCWlmICgobXQgPT0gZ2xvYmFsbWVzX2xpc3RbaV0ucHJpbWl0aXZlKSAmJgogCQkgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIGdsb2JhbG1lc19saXN0W2ldLnN0YXRlKSkKIAkJCWJyZWFrOwotCWlmIChpID09IEdMT0JBTE1fTEVOKSB7CisJaWYgKGkgPT0gQVJSQVlfU0laRShnbG9iYWxtZXNfbGlzdCkpIHsKIAkJaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogCQkJbDNfZGVidWcoc3QsICJuaTEgZ2xvYmFsIHN0YXRlICVkIG10ICV4IHVuaGFuZGxlZCIsCiAJCQkJcHJvYy0+c3RhdGUsIG10KTsKQEAgLTMwNDksMTEgKzMwMzksMTEgQEAKIAl9CiAJaWYgKChwID0gZmluZGllKHNrYi0+ZGF0YSwgc2tiLT5sZW4sIElFX0RJU1BMQVksIDApKSAhPSBOVUxMKSAKIAkgIGwzbmkxX2RlbGl2ZXJfZGlzcGxheShwcm9jLCBwciwgcCk7IC8qIERpc3BsYXkgSUUgaW5jbHVkZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgREFUQVNMTEVOOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YXN0YXRlbGlzdCk7IGkrKykKIAkJaWYgKChtdCA9PSBkYXRhc3RhdGVsaXN0W2ldLnByaW1pdGl2ZSkgJiYKIAkJICAgICgoMSA8PCBwcm9jLT5zdGF0ZSkgJiBkYXRhc3RhdGVsaXN0W2ldLnN0YXRlKSkKIAkJCWJyZWFrOwotCWlmIChpID09IERBVEFTTExFTikgeworCWlmIChpID09IEFSUkFZX1NJWkUoZGF0YXN0YXRlbGlzdCkpIHsKIAkJaWYgKHN0LT5sMy5kZWJ1ZyAmIEwzX0RFQl9TVEFURSkgewogCQkJbDNfZGVidWcoc3QsICJuaTF1cCVzc3RhdGUgJWQgbXQgJSN4IHVuaGFuZGxlZCIsCiAJCQkJKHByID09IChETF9EQVRBIHwgSU5ESUNBVElPTikpID8gIiAiIDogIihicm9hZGNhc3QpICIsCkBAIC0zMTA4LDExICszMDk4LDExIEBACiAJCXJldHVybjsKIAl9ICAKIAotCWZvciAoaSA9IDA7IGkgPCBET1dOU0xMRU47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkb3duc3RhdGVsaXN0KTsgaSsrKQogCQlpZiAoKHByID09IGRvd25zdGF0ZWxpc3RbaV0ucHJpbWl0aXZlKSAmJgogCQkgICAgKCgxIDw8IHByb2MtPnN0YXRlKSAmIGRvd25zdGF0ZWxpc3RbaV0uc3RhdGUpKQogCQkJYnJlYWs7Ci0JaWYgKGkgPT0gRE9XTlNMTEVOKSB7CisJaWYgKGkgPT0gQVJSQVlfU0laRShkb3duc3RhdGVsaXN0KSkgewogCQlpZiAoc3QtPmwzLmRlYnVnICYgTDNfREVCX1NUQVRFKSB7CiAJCQlsM19kZWJ1ZyhzdCwgIm5pMWRvd24gc3RhdGUgJWQgcHJpbSAlI3ggdW5oYW5kbGVkIiwKIAkJCQlwcm9jLT5zdGF0ZSwgcHIpOwpAQCAtMzEzNiwxMSArMzEyNiwxMSBAQAogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiSGlTYXggbmkxbWFuIHdpdGhvdXQgcHJvYyBwcj0lMDR4XG4iLCBwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQU5TTExFTjsgaSsrKQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYW5zdGF0ZWxpc3QpOyBpKyspCiAgICAgICAgICAgICAgICAgaWYgKChwciA9PSBtYW5zdGF0ZWxpc3RbaV0ucHJpbWl0aXZlKSAmJgogICAgICAgICAgICAgICAgICAgICAoKDEgPDwgcHJvYy0+c3RhdGUpICYgbWFuc3RhdGVsaXN0W2ldLnN0YXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoaSA9PSBNQU5TTExFTikgeworICAgICAgICBpZiAoaSA9PSBBUlJBWV9TSVpFKG1hbnN0YXRlbGlzdCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3QtPmwzLmRlYnVnICYgTDNfREVCX1NUQVRFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsM19kZWJ1ZyhzdCwgImNyICVkIG5pMW1hbiBzdGF0ZSAlZCBwcmltICUjeCB1bmhhbmRsZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jLT5jYWxscmVmICYgMHg3ZiwgcHJvYy0+c3RhdGUsIHByKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvcTkzMS5jCmluZGV4IGFhY2JmMGQuLjhiODUzZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3E5MzEuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJfQogfTsKIAotI2RlZmluZSBNVFNJWkUgc2l6ZW9mKG10bGlzdCkvc2l6ZW9mKHN0cnVjdCBNZXNzYWdlVHlwZSkKKyNkZWZpbmUgTVRTSVpFIEFSUkFZX1NJWkUobXRsaXN0KQogCiBzdGF0aWMKIHN0cnVjdCBNZXNzYWdlVHlwZSBtdF9uMFtdID0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCXtNVF9OMF9DTE9fQUNLLCAiQ0xPc2UgQUNLbm93bGVkZ2UifQogfTsKIAotI2RlZmluZSBNVF9OMF9MRU4gKHNpemVvZihtdF9uMCkgLyBzaXplb2Yoc3RydWN0IE1lc3NhZ2VUeXBlKSkKKyNkZWZpbmUgTVRfTjBfTEVOIEFSUkFZX1NJWkUobXRfbjApCiAKIHN0YXRpYwogc3RydWN0IE1lc3NhZ2VUeXBlIG10X24xW10gPQpAQCAtMTk0LDcgKzE5NCw3IEBACiAJe01UX04xX1NUQVQsICJTVEFUdXMifQogfTsKIAotI2RlZmluZSBNVF9OMV9MRU4gKHNpemVvZihtdF9uMSkgLyBzaXplb2Yoc3RydWN0IE1lc3NhZ2VUeXBlKSkKKyNkZWZpbmUgTVRfTjFfTEVOIEFSUkFZX1NJWkUobXRfbjEpCiAKIAogc3RhdGljIGludApAQCAtNDM4LDcgKzQzOCw3IEBACiAJfSwKIH07CiAKLSNkZWZpbmUgQ1ZTSVpFIHNpemVvZihjdmxpc3QpL3NpemVvZihzdHJ1Y3QgQ2F1c2VWYWx1ZSkKKyNkZWZpbmUgQ1ZTSVpFIEFSUkFZX1NJWkUoY3ZsaXN0KQogCiBzdGF0aWMKIGludApAQCAtNTE2LDcgKzUxNiw3IEBACiAJe0NBVVNFX1VzZXJJbmZvRGlzY2FyZGVkLCAiVXNlciBJbmZvIERpc2NhcmRlZCJ9CiB9OwogCi1zdGF0aWMgaW50IGNhdXNlXzF0cjZfbGVuID0gKHNpemVvZihjYXVzZV8xdHI2KSAvIHNpemVvZihzdHJ1Y3QgTWVzc2FnZVR5cGUpKTsKK3N0YXRpYyBpbnQgY2F1c2VfMXRyNl9sZW4gPSBBUlJBWV9TSVpFKGNhdXNlXzF0cjYpOwogCiBzdGF0aWMgaW50CiBwcmNhdXNlXzF0cjYoY2hhciAqZGVzdCwgdV9jaGFyICogcCkKQEAgLTg2NSw3ICs4NjUsNyBAQAogCXsgMHg5NiwgIlJlZGlyZWN0aW9uIG5hbWUiIH0sCiAJeyAweDllLCAiVGV4dCIgfSwKIH07Ci0jZGVmaW5lIERUQUdTSVpFIHNpemVvZihkdGFnbGlzdCkvc2l6ZW9mKHN0cnVjdCBEVGFnKQorI2RlZmluZSBEVEFHU0laRSBBUlJBWV9TSVpFKGR0YWdsaXN0KQogCiBzdGF0aWMgaW50CiBkaXNwdGV4dF9uaTEoY2hhciAqZGVzdCwgdV9jaGFyICogcCkKQEAgLTEwNzQsNyArMTA3NCw3IEBACiB9OwogCiAKLSNkZWZpbmUgSUVTSVpFIHNpemVvZihpZWxpc3QpL3NpemVvZihzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50KQorI2RlZmluZSBJRVNJWkUgQVJSQVlfU0laRShpZWxpc3QpCiAKIHN0YXRpYwogc3RydWN0IEluZm9ybWF0aW9uRWxlbWVudCBpZWxpc3RfbmkxW10gPSB7CkBAIC0xMTAyLDcgKzExMDIsNyBAQAogfTsKIAogCi0jZGVmaW5lIElFU0laRV9OSTEgc2l6ZW9mKGllbGlzdF9uaTEpL3NpemVvZihzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50KQorI2RlZmluZSBJRVNJWkVfTkkxIEFSUkFZX1NJWkUoaWVsaXN0X25pMSkKIAogc3RhdGljCiBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50IGllbGlzdF9uaTFfY3M1W10gPSB7CkBAIC0xMTEwLDE0ICsxMTEwLDE0IEBACiAJeyAweDJhLCAiRGlzcGxheSB0ZXh0IiwgZGlzcHRleHRfbmkxIH0sCiB9OwogCi0jZGVmaW5lIElFU0laRV9OSTFfQ1M1IHNpemVvZihpZWxpc3RfbmkxX2NzNSkvc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpCisjZGVmaW5lIElFU0laRV9OSTFfQ1M1IEFSUkFZX1NJWkUoaWVsaXN0X25pMV9jczUpCiAKIHN0YXRpYwogc3RydWN0IEluZm9ybWF0aW9uRWxlbWVudCBpZWxpc3RfbmkxX2NzNltdID0gewogCXsgMHg3YiwgIkNhbGwgYXBwZWFyYW5jZSIsIGdlbmVyYWxfbmkxIH0sCiB9OwogCi0jZGVmaW5lIElFU0laRV9OSTFfQ1M2IHNpemVvZihpZWxpc3RfbmkxX2NzNikvc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpCisjZGVmaW5lIElFU0laRV9OSTFfQ1M2IEFSUkFZX1NJWkUoaWVsaXN0X25pMV9jczYpCiAKIHN0YXRpYyBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50IHdlXzBbXSA9CiB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCXtXRTBfdXNlckluZm8sICJVc2VyIEluZm8iLCBnZW5lcmFsfQogfTsKIAotI2RlZmluZSBXRV8wX0xFTiAoc2l6ZW9mKHdlXzApIC8gc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpKQorI2RlZmluZSBXRV8wX0xFTiBBUlJBWV9TSVpFKHdlXzApCiAKIHN0YXRpYyBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50IHdlXzZbXSA9CiB7CkBAIC0xMTQ1LDcgKzExNDUsNyBAQAogCXtXRTZfc3RhdHVzQ2FsbGVkLCAiU3RhdHVzIENhbGxlZCIsIGdlbmVyYWx9LAogCXtXRTZfYWRkVHJhbnNBdHRyLCAiQWRkaXRpb25hbCBUcmFuc21pc3Npb24gQXR0cmlidXRlcyIsIGdlbmVyYWx9CiB9OwotI2RlZmluZSBXRV82X0xFTiAoc2l6ZW9mKHdlXzYpIC8gc2l6ZW9mKHN0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnQpKQorI2RlZmluZSBXRV82X0xFTiBBUlJBWV9TSVpFKHdlXzYpCiAKIGludAogUXVpY2tIZXgoY2hhciAqdHh0LCB1X2NoYXIgKiBwLCBpbnQgY250KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCmluZGV4IGNmZjdhNjMuLjY0Zjc4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKQEAgLTIyNiw3ICsyMjYsNyBAQAogI2RlZmluZSBJTkZPKGZvcm1hdCwgYXJnLi4uKSBcCiBwcmludGsoS0VSTl9JTkZPICIlczolczogIiBmb3JtYXQgIlxuIiAsIF9fRklMRV9fLCAgX19mdW5jX18gLCAjIyBhcmcpCiAKLSNpbmNsdWRlICJpc2RuaGRsYy5oIgorI2luY2x1ZGUgPGxpbnV4L2lzZG4vaGRsYy5oPgogI2luY2x1ZGUgImZzbS5oIgogI2luY2x1ZGUgImhpc2F4X2lmLmgiCiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2IuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCmluZGV4IDAwNzRiNjAuLjk1YjFjZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfYi5jCkBAIC0yMTgsNyArMjE4LDEwIEBACiAJaWYgKGJjcy0+bW9kZSAhPSBMMV9NT0RFX05VTEwpIHsKIAkJLy8gT3BlbiB0aGUgQiBjaGFubmVsCiAJCWlmIChiY3MtPm1vZGUgIT0gTDFfTU9ERV9UUkFOUykgewotCQkJaXNkbmhkbGNfb3V0X2luaXQoJmJfb3V0LT5oZGxjX3N0YXRlLCAwLCBiY3MtPm1vZGUgPT0gTDFfTU9ERV9IRExDXzU2Syk7CisJCQl1MzIgZmVhdHVyZXMgPSBIRExDX0JJVFJFVkVSU0U7CisJCQlpZiAoYmNzLT5tb2RlID09IEwxX01PREVfSERMQ181NkspCisJCQkJZmVhdHVyZXMgfD0gSERMQ181NktCSVQ7CisJCQlpc2RuaGRsY19vdXRfaW5pdCgmYl9vdXQtPmhkbGNfc3RhdGUsIGZlYXR1cmVzKTsKIAkJfQogCQlzdDU0ODFfdXNiX3BpcGVfcmVzZXQoYWRhcHRlciwgKGJjcy0+Y2hhbm5lbCsxKSoyLCBOVUxMLCBOVUxMKTsKIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKaW5kZXggMDc3OTkxYy4uMzllOGU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9kLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCiAJREJHKDIsImxlbj0lZCIsc2tiLT5sZW4pOwogCi0JaXNkbmhkbGNfb3V0X2luaXQoJmRfb3V0LT5oZGxjX3N0YXRlLCAxLCAwKTsKKwlpc2RuaGRsY19vdXRfaW5pdCgmZF9vdXQtPmhkbGNfc3RhdGUsIEhETENfRENIQU5ORUwgfCBIRExDX0JJVFJFVkVSU0UpOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoYnVmX25yLCAmZF9vdXQtPmJ1c3kpKSB7CiAJCVdBUk5JTkcoImVwICVkIHVyYiAlZCBidXN5ICUjbHgiLCBFUF9EX09VVCwgYnVmX25yLCBkX291dC0+YnVzeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYwppbmRleCAyYjNhMDU1Li4xMGQ0MWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKQEAgLTYzNywxMCArNjM3LDEzIEBACiAJdXNiX3VubGlua191cmIoaW4tPnVyYlsxXSk7CiAKIAlpZiAoaW4tPm1vZGUgIT0gTDFfTU9ERV9OVUxMKSB7Ci0JCWlmIChpbi0+bW9kZSAhPSBMMV9NT0RFX1RSQU5TKQotCQkJaXNkbmhkbGNfcmN2X2luaXQoJmluLT5oZGxjX3N0YXRlLAotCQkJCWluLT5tb2RlID09IEwxX01PREVfSERMQ181NkspOwotCQkKKwkJaWYgKGluLT5tb2RlICE9IEwxX01PREVfVFJBTlMpIHsKKwkJCXUzMiBmZWF0dXJlcyA9IEhETENfQklUUkVWRVJTRTsKKworCQkJaWYgKGluLT5tb2RlID09IEwxX01PREVfSERMQ181NkspCisJCQkJZmVhdHVyZXMgfD0gSERMQ181NktCSVQ7CisJCQlpc2RuaGRsY19yY3ZfaW5pdCgmaW4tPmhkbGNfc3RhdGUsIGZlYXR1cmVzKTsKKwkJfQogCQlzdDU0ODFfdXNiX3BpcGVfcmVzZXQoaW4tPmFkYXB0ZXIsIGluLT5lcCwgTlVMTCwgTlVMTCk7CiAJCXN0NTQ4MV91c2JfZGV2aWNlX2N0cmxfbXNnKGluLT5hZGFwdGVyLCBpbi0+Y291bnRlciwKIAkJCQkJICAgaW4tPnBhY2tldF9zaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlaS5jCmluZGV4IGNlYjBkZjkuLjZlNjU0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWkuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVpLmMKQEAgLTQ0Nyw4ICs0NDcsNiBAQAogCXtTVF9URUlfSURWRVJJRlksIEVWX0NIS1JFUSwgdGVpX2lkX2Noa19yZXF9LAogfTsKIAotI2RlZmluZSBURUlfRk5fQ09VTlQgKHNpemVvZihUZWlGbkxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIGludCBfX2luaXQKIFRlaU5ldyh2b2lkKQogewpAQCAtNDU2LDcgKzQ1NCw3IEBACiAJdGVpZnNtLmV2ZW50X2NvdW50ID0gVEVJX0VWRU5UX0NPVU5UOwogCXRlaWZzbS5zdHJFdmVudCA9IHN0clRlaUV2ZW50OwogCXRlaWZzbS5zdHJTdGF0ZSA9IHN0clRlaVN0YXRlOwotCXJldHVybiBGc21OZXcoJnRlaWZzbSwgVGVpRm5MaXN0LCBURUlfRk5fQ09VTlQpOworCXJldHVybiBGc21OZXcoJnRlaWZzbSwgVGVpRm5MaXN0LCBBUlJBWV9TSVpFKFRlaUZuTGlzdCkpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCmluZGV4IGJiMWM4ZGQuLmM0ZDg2MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCkBAIC0xMDUsOCArMTA1LDYgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBJc2RuQ2FyZFN0YXRlLCB0cXVldWUpOwogCXN0cnVjdCBQU3RhY2sgKnN0cHRyOwogCi0JaWYgKCFjcykKLQkJcmV0dXJuOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRF9DTEVBUkJVU1ksICZjcy0+ZXZlbnQpKSB7CiAJCWlmIChjcy0+ZGVidWcpCiAJCQlkZWJ1Z2wxKGNzLCAiRC1DaGFubmVsIEJ1c3kgY2xlYXJlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCmluZGV4IDU3OTk3NGMuLjcyZWI5MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKQEAgLTExOSw3ICsxMTksNyBAQAogLyogc2VuZCBhIHBhY2tldCBvbiB0aGlzIGludGVyZmFjZS4gKi8KIC8qIG5ldyBzdHlsZSBmb3Iga2VybmVsID49IDIuMy4zMyAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIGRldjsKQEAgLTE0OCw3ICsxNDgsNyBAQAogCWlmIChscC0+c2tfY291bnQgPD0gMykgewogCQlzY2hlZHVsZV93b3JrKCYoKGh5c2RuX2NhcmQgKikgZGV2LT5tbF9wcml2KS0+aXJxX3F1ZXVlKTsKIAl9Ci0JcmV0dXJuICgwKTsJCS8qIHN1Y2Nlc3MgKi8KKwlyZXR1cm4gTkVUREVWX1RYX09LOwkvKiBzdWNjZXNzICovCiB9CQkJCS8qIG5ldF9zZW5kX3BhY2tldCAqLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZwppbmRleCBlZDM1MTBmLi5kZDc0NGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnCkBAIC0yLDYgKzIsOCBAQAogIyBPbGQgSVNETjRMaW51eCBjb25maWcKICMKIAoraWYgSVNETl9JNEwKKwogY29uZmlnIElTRE5fUFBQCiAJYm9vbCAiU3VwcG9ydCBzeW5jaHJvbm91cyBQUFAiCiAJZGVwZW5kcyBvbiBJTkVUCkBAIC0xMzUsMyArMTM3LDEyIEBACiBzb3VyY2UgImRyaXZlcnMvaXNkbi9oeXNkbi9LY29uZmlnIgogCiBlbmRtZW51CisjIGVuZCBJU0ROX0k0TAorZW5kaWYKKworY29uZmlnIElTRE5fSERMQworCXRyaXN0YXRlIAorCWRlcGVuZHMgb24gSElTQVhfU1Q1NDgxCisJc2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBCSVRSRVZFUlNFCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvTWFrZWZpbGUgYi9kcml2ZXJzL2lzZG4vaTRsL01ha2VmaWxlCmluZGV4IDQ5YTA2YzAuLmNiOWQzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX0lTRE5fSTRMKQkJKz0gaXNkbi5vCiBvYmotJChDT05GSUdfSVNETl9QUFBfQlNEQ09NUCkJKz0gaXNkbl9ic2Rjb21wLm8KK29iai0kKENPTkZJR19JU0ROX0hETEMpCQkrPSBpc2RuaGRsYy5vCiAKICMgTXVsdGlwYXJ0IG9iamVjdHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwppbmRleCBkZTRhYWQwLi45MGI1NmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fbmV0LmMKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCkBAIC0xNzYsNyArMTc2LDggQEAKIC8qIFByb3RvdHlwZXMgKi8KIAogc3RhdGljIGludCBpc2RuX25ldF9mb3JjZV9kaWFsX2xwKGlzZG5fbmV0X2xvY2FsICopOwotc3RhdGljIGludCBpc2RuX25ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIG5ldGRldl90eF90IGlzZG5fbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogc3RhdGljIHZvaWQgaXNkbl9uZXRfY2lzY29oZGxja19jb25uZWN0ZWQoaXNkbl9uZXRfbG9jYWwgKmxwKTsKIHN0YXRpYyB2b2lkIGlzZG5fbmV0X2Npc2NvaGRsY2tfZGlzY29ubmVjdGVkKGlzZG5fbmV0X2xvY2FsICpscCk7CkBAIC0xMDUxLDEyICsxMDUyLDEyIEBACiAJaXNkbl9uZXRfZGV2ICpuZDsKIAlpc2RuX25ldF9sb2NhbCAqc2xwOwogCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKLQlpbnQgcmV0diA9IDA7CisJaW50IHJldHYgPSBORVRERVZfVFhfT0s7CiAKIAlpZiAoKChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KSktPm1hc3RlcikgewogCQlwcmludGsoImlzZG4gQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBGb3IgdGhlIG90aGVyIGVuY2FwcyB0aGUgaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gYnVpbHQgKi8KQEAgLTExNjAsNyArMTE2MSw3IEBACiAgKiBJZiB0aGlzIGludGVyZmFjZSBpc24ndCBjb25uZWN0ZWQgdG8gYSBJU0ROLUNoYW5uZWwsIGZpbmQgYSBmcmVlIGNoYW5uZWwsCiAgKiBhbmQgc3RhcnQgZGlhbGluZy4KICAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBpc2RuX25ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCWlzZG5fbmV0X2xvY2FsICpscCA9IChpc2RuX25ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTEyMDIsNyArMTIwMyw3IEBACiAJCQlpZiAoIShJU0ROX05FVF9ESUFMTU9ERSgqbHApID09IElTRE5fTkVUX0RNX0FVVE8pKSB7CiAJCQkJaXNkbl9uZXRfdW5yZWFjaGFibGUobmRldiwgc2tiLCAiZGlhbCByZWplY3RlZDogaW50ZXJmYWNlIG5vdCBpbiBkaWFsbW9kZSBgYXV0byciKTsKIAkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJCWlmIChscC0+cGhvbmVbMV0pIHsKIAkJCQl1bG9uZyBmbGFnczsKQEAgLTEyMTUsNyArMTIxNiw3IEBACiAJCQkJCWlmKHRpbWVfYmVmb3JlKGppZmZpZXMsIGxwLT5kaWFsd2FpdF90aW1lcikpIHsKIAkJCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwgImRpYWwgcmVqZWN0ZWQ6IHJldHJ5LXRpbWUgbm90IHJlYWNoZWQiKTsKIAkJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCQkJCXJldHVybiAwOworCQkJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCQkJfSBlbHNlCiAJCQkJCQlscC0+ZGlhbHdhaXRfdGltZXIgPSAwOwogCQkJCX0KQEAgLTEyNDMsNyArMTI0NCw3IEBACiAJCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwKIAkJCQkJCQkgICAiTm8gY2hhbm5lbCIpOwogCQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJCXJldHVybiAwOworCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJCX0KIAkJCQkvKiBMb2cgcGFja2V0LCB3aGljaCB0cmlnZ2VyZWQgZGlhbGluZyAqLwogCQkJCWlmIChkZXYtPm5ldF92ZXJib3NlKQpAQCAtMTI1OCw3ICsxMjU5LDcgQEAKIAkJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQkJCWlzZG5fbmV0X3VuYmluZF9jaGFubmVsKGxwKTsKIAkJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOwotCQkJCQkJcmV0dXJuIDA7CS8qIFNUTiAoc2tiIHRvIG5pcnZhbmEpIDspICovCisJCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwkvKiBTVE4gKHNrYiB0byBuaXJ2YW5hKSA7KSAqLwogCQkJCQl9CiAjaWZkZWYgQ09ORklHX0lQUFBfRklMVEVSCiAJCQkJCWlmIChpc2RuX3BwcF9hdXRvZGlhbF9maWx0ZXIoc2tiLCBscCkpIHsKQEAgLTEyNjcsNyArMTI2OCw3IEBACiAJCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKIAkJCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwgImRpYWwgcmVqZWN0ZWQ6IHBhY2tldCBmaWx0ZXJlZCIpOwogCQkJCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJCQkJcmV0dXJuIDA7CisJCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJCQl9CiAjZW5kaWYKIAkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CkBAIC0xMjg1LDcgKzEyODYsNyBAQAogCQkJCWlzZG5fbmV0X3VucmVhY2hhYmxlKG5kZXYsIHNrYiwKIAkJCQkJCSAgICAgIk5vIHBob25lIG51bWJlciIpOwogCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJfQogCQl9IGVsc2UgewogCQkJLyogRGV2aWNlIGlzIGNvbm5lY3RlZCB0byBhbiBJU0ROIGNoYW5uZWwgKi8gCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fcHBwLmMKaW5kZXggYWEzMGI1Yy4uMmQxNGI2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX3BwcC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9wcHAuYwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAlpc2RuX25ldF9kZXYgKm5kOwogCXVuc2lnbmVkIGludCBwcm90byA9IFBQUF9JUDsgICAgIC8qIDB4MjEgKi8KIAlzdHJ1Y3QgaXBwcF9zdHJ1Y3QgKmlwdCwqaXB0czsKLQlpbnQgc2xvdCwgcmV0dmFsID0gMDsKKwlpbnQgc2xvdCwgcmV0dmFsID0gTkVUREVWX1RYX09LOwogCiAJbWxwID0gKGlzZG5fbmV0X2xvY2FsICopIG5ldGRldl9wcml2KG5ldGRldik7CiAJbmQgPSBtbHAtPm5ldGRldjsgICAgICAgLyogZ2V0IG1hc3RlciBscCAqLwpAQCAtMTI0MCw3ICsxMjQwLDcgQEAKIAlpZiAoIShpcHRzLT5wcHBjZmcgJiBTQ19FTkFCTEVfSVApKSB7CS8qIFBQUCBjb25uZWN0ZWQgPyAqLwogCQlpZiAoaXB0cy0+ZGVidWcgJiAweDEpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogSVAgZnJhbWUgZGVsYXllZC5cbiIsIG5ldGRldi0+bmFtZSk7Ci0JCXJldHZhbCA9IDE7CisJCXJldHZhbCA9IE5FVERFVl9UWF9CVVNZOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEyNjEsNyArMTI2MSw3IEBACiAJbHAgPSBpc2RuX25ldF9nZXRfbG9ja2VkX2xwKG5kKTsKIAlpZiAoIWxwKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBhbGwgY2hhbm5lbHMgYnVzeSAtIHJlcXVldWluZyFcbiIsIG5ldGRldi0+bmFtZSk7Ci0JCXJldHZhbCA9IDE7CisJCXJldHZhbCA9IE5FVERFVl9UWF9CVVNZOwogCQlnb3RvIG91dDsKIAl9CiAJLyogd2UgaGF2ZSBvdXIgbHAgbG9ja2VkIGZyb20gbm93IG9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5oZGxjLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5oZGxjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4OWFhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbmhkbGMuYwpAQCAtMCwwICsxLDYzMCBAQAorLyoKKyAqIGlzZG5oZGxjLmMgIC0tICBHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIuCisgKgorICogQ29weXJpZ2h0IChDKQorICoJMjAwOQlLYXJzdGVuIEtlaWwJCTxrZWlsQGIxLXN5c3RlbXMuZGU+CisgKgkyMDAyCVdvbGZnYW5nIE3DvGVzCQk8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4KKyAqCTIwMDEJRnJvZGUgSXNha3NlbgkJPGZpc2Frc2VuQGJld2FuLmNvbT4KKyAqICAgICAgMjAwMQlLYWkgR2VybWFzY2hld3NraQk8a2FpLmdlcm1hc2NoZXdza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+CisjaW5jbHVkZSA8bGludXgvaXNkbi9oZGxjLmg+CisjaW5jbHVkZSA8bGludXgvYml0cmV2Lmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK01PRFVMRV9BVVRIT1IoIldvbGZnYW5nIE3DvGVzIDx3b2xmZ2FuZ0Bpa3N3LW11ZWVzLmRlPiwgIgorCSAgICAgICJGcm9kZSBJc2Frc2VuIDxmaXNha3NlbkBiZXdhbi5jb20+LCAiCisJICAgICAgIkthaSBHZXJtYXNjaGV3c2tpIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyYWwgcHVycG9zZSBJU0ROIEhETEMgZGVjb2RlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitlbnVtIHsKKwlIRExDX0ZBU1RfSURMRSwgSERMQ19HRVRfRkxBR19CMCwgSERMQ19HRVRGTEFHX0IxQTYsIEhETENfR0VURkxBR19CNywKKwlIRExDX0dFVF9EQVRBLCBIRExDX0ZBU1RfRkxBRworfTsKKworZW51bSB7CisJSERMQ19TRU5EX0RBVEEsIEhETENfU0VORF9DUkMxLCBIRExDX1NFTkRfRkFTVF9GTEFHLAorCUhETENfU0VORF9GSVJTVF9GTEFHLCBIRExDX1NFTkRfQ1JDMiwgSERMQ19TRU5EX0NMT1NJTkdfRkxBRywKKwlIRExDX1NFTkRfSURMRTEsIEhETENfU0VORF9GQVNUX0lETEUsIEhETENfU0VOREZMQUdfQjAsCisJSERMQ19TRU5ERkxBR19CMUE2LCBIRExDX1NFTkRGTEFHX0I3LCBTVE9QUEVELCBIRExDX1NFTkRGTEFHX09ORQorfTsKKwordm9pZCBpc2RuaGRsY19yY3ZfaW5pdChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgdTMyIGZlYXR1cmVzKQoreworCW1lbXNldChoZGxjLCAwLCBzaXplb2Yoc3RydWN0IGlzZG5oZGxjX3ZhcnMpKTsKKwloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7CisJaWYgKGZlYXR1cmVzICYgSERMQ181NktCSVQpCisJCWhkbGMtPmRvX2FkYXB0NTYgPSAxOworCWlmIChmZWF0dXJlcyAmIEhETENfQklUUkVWRVJTRSkKKwkJaGRsYy0+ZG9fYml0cmV2ZXJzZSA9IDE7Cit9CitFWFBPUlRfU1lNQk9MKGlzZG5oZGxjX291dF9pbml0KTsKKwordm9pZCBpc2RuaGRsY19vdXRfaW5pdChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgdTMyIGZlYXR1cmVzKQoreworCW1lbXNldChoZGxjLCAwLCBzaXplb2Yoc3RydWN0IGlzZG5oZGxjX3ZhcnMpKTsKKwlpZiAoZmVhdHVyZXMgJiBIRExDX0RDSEFOTkVMKSB7CisJCWhkbGMtPmRjaGFubmVsID0gMTsKKwkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRklSU1RfRkxBRzsKKwl9IGVsc2UgeworCQloZGxjLT5kY2hhbm5lbCA9IDA7CisJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZBU1RfRkxBRzsKKwkJaGRsYy0+ZmZ2YWx1ZSA9IDB4N2U7CisJfQorCWhkbGMtPmNiaW4gPSAweDdlOworCWlmIChmZWF0dXJlcyAmIEhETENfNTZLQklUKSB7CisJCWhkbGMtPmRvX2FkYXB0NTYgPSAxOworCQloZGxjLT5zdGF0ZSA9IEhETENfU0VOREZMQUdfQjA7CisJfSBlbHNlCisJCWhkbGMtPmRhdGFfYml0cyA9IDg7CisJaWYgKGZlYXR1cmVzICYgSERMQ19CSVRSRVZFUlNFKQorCQloZGxjLT5kb19iaXRyZXZlcnNlID0gMTsKK30KK0VYUE9SVF9TWU1CT0woaXNkbmhkbGNfcmN2X2luaXQpOworCitzdGF0aWMgaW50CitjaGVja19mcmFtZShzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYykKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGhkbGMtPmRzdHBvcyA8IDIpIAkvKiB0b28gc21hbGwgLSBmcmFtaW5nIGVycm9yICovCisJCXN0YXR1cyA9IC1IRExDX0ZSQU1JTkdfRVJST1I7CisJZWxzZSBpZiAoaGRsYy0+Y3JjICE9IDB4ZjBiOCkJLyogY3JjIGVycm9yICovCisJCXN0YXR1cyA9IC1IRExDX0NSQ19FUlJPUjsKKwllbHNlIHsKKwkJLyogcmVtb3ZlIENSQyAqLworCQloZGxjLT5kc3Rwb3MgLT0gMjsKKwkJLyogZ29vZCBmcmFtZSAqLworCQlzdGF0dXMgPSBoZGxjLT5kc3Rwb3M7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgIGlzZG5oZGxjX2RlY29kZSAtIGRlY29kZXMgSERMQyBmcmFtZXMgZnJvbSBhIHRyYW5zcGFyZW50IGJpdCBzdHJlYW0uCisKKyAgVGhlIHNvdXJjZSBidWZmZXIgaXMgc2Nhbm5lZCBmb3IgdmFsaWQgSERMQyBmcmFtZXMgbG9va2luZyBmb3IKKyAgZmxhZ3MgKDAxMTExMTEwKSB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgb2YgYSBmcmFtZS4gSWYgdGhlIHN0YXJ0IG9mCisgIHRoZSBmcmFtZSBpcyBmb3VuZCwgdGhlIGJpdCBzdHVmZmluZyBpcyByZW1vdmVkICgwIGFmdGVyIDUgMSdzKS4KKyAgV2hlbiBhIG5ldyBmbGFnIGlzIGZvdW5kLCB0aGUgY29tcGxldGUgZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQKKyAgYW5kIHRoZSBDUkMgaXMgY2hlY2tlZC4KKyAgSWYgYSB2YWxpZCBmcmFtZSBpcyBmb3VuZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZyYW1lIGxlbmd0aAorICBleGNsdWRpbmcgdGhlIENSQyB3aXRoIHRoZSBiaXQgSERMQ19FTkRfT0ZfRlJBTUUgc2V0LgorICBJZiB0aGUgYmVnaW5uaW5nIG9mIGEgdmFsaWQgZnJhbWUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgIHRoZSBsZW5ndGguCisgIElmIGEgZnJhbWluZyBlcnJvciBpcyBmb3VuZCAodG9vIG1hbnkgMXMgYW5kIG5vdCBhIGZsYWcpIHRoZSBmdW5jdGlvbgorICByZXR1cm5zIHRoZSBsZW5ndGggd2l0aCB0aGUgYml0IEhETENfRlJBTUlOR19FUlJPUiBzZXQuCisgIElmIGEgQ1JDIGVycm9yIGlzIGZvdW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggd2l0aCB0aGUKKyAgYml0IEhETENfQ1JDX0VSUk9SIHNldC4KKyAgSWYgdGhlIGZyYW1lIGxlbmd0aCBleGNlZWRzIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZSwgdGhlIGZ1bmN0aW9uCisgIHJldHVybnMgdGhlIGxlbmd0aCB3aXRoIHRoZSBiaXQgSERMQ19MRU5HVEhfRVJST1Igc2V0LgorCisgIHNyYyAtIHNvdXJjZSBidWZmZXIKKyAgc2xlbiAtIHNvdXJjZSBidWZmZXIgbGVuZ3RoCisgIGNvdW50IC0gbnVtYmVyIG9mIGJ5dGVzIHJlbW92ZWQgKGRlY29kZWQpIGZyb20gdGhlIHNvdXJjZSBidWZmZXIKKyAgZHN0IF8gZGVzdGluYXRpb24gYnVmZmVyCisgIGRzaXplIC0gZGVzdGluYXRpb24gYnVmZmVyIHNpemUKKyAgcmV0dXJucyAtIG51bWJlciBvZiBkZWNvZGVkIGJ5dGVzIGluIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYW5kIHN0YXR1cworICBmbGFnLgorICovCitpbnQgaXNkbmhkbGNfZGVjb2RlKHN0cnVjdCBpc2RuaGRsY192YXJzICpoZGxjLCBjb25zdCB1OCAqc3JjLCBpbnQgc2xlbiwKKwlpbnQgKmNvdW50LCB1OCAqZHN0LCBpbnQgZHNpemUpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2ZsYWdbXSA9IHsKKwkJMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgzMCwgMHgzOCwgMHgzYywgMHgzZSwgMHgzZgorCX07CisKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2ZsYWdfdmFsdWVbXSA9IHsKKwkJMHgwMCwgMHg3ZSwgMHhmYywgMHhmOSwgMHhmMywgMHhlNywgMHhjZiwgMHg5ZiwgMHgzZgorCX07CisKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2Fib3J0W10gPSB7CisJCTB4MDAsIDB4MDAsIDB4ODAsIDB4YzAsIDB4ZTAsIDB4ZjAsIDB4ZjgsIDB4ZmMsIDB4ZmUsIDB4ZmYKKwl9OworCisjZGVmaW5lIGhhbmRsZV9mYXN0X2ZsYWcoaCkgXAorCWRvIHtcCisJCWlmIChoLT5jYmluID09IGZhc3RfZmxhZ1toLT5iaXRfc2hpZnRdKSB7XAorCQkJaC0+ZmZ2YWx1ZSA9IGZhc3RfZmxhZ192YWx1ZVtoLT5iaXRfc2hpZnRdO1wKKwkJCWgtPnN0YXRlID0gSERMQ19GQVNUX0ZMQUc7XAorCQkJaC0+ZmZiaXRfc2hpZnQgPSBoLT5iaXRfc2hpZnQ7XAorCQkJaC0+Yml0X3NoaWZ0ID0gMTtcCisJCX0gZWxzZSB7XAorCQkJaC0+c3RhdGUgPSBIRExDX0dFVF9EQVRBO1wKKwkJCWgtPmRhdGFfcmVjZWl2ZWQgPSAwO1wKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBoYW5kbGVfYWJvcnQoaCkgXAorCWRvIHtcCisJCWgtPnNoaWZ0X3JlZyA9IGZhc3RfYWJvcnRbaC0+ZmZiaXRfc2hpZnQgLSAxXTtcCisJCWgtPmhkbGNfYml0czEgPSBoLT5mZmJpdF9zaGlmdCAtIDI7XAorCQlpZiAoaC0+aGRsY19iaXRzMSA8IDApXAorCQkJaC0+aGRsY19iaXRzMSA9IDA7XAorCQloLT5kYXRhX2JpdHMgPSBoLT5mZmJpdF9zaGlmdCAtIDE7XAorCQloLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7XAorCQloLT5kYXRhX3JlY2VpdmVkID0gMDtcCisJfSB3aGlsZSAoMCkKKworCSpjb3VudCA9IHNsZW47CisKKwl3aGlsZSAoc2xlbiA+IDApIHsKKwkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSAwKSB7CisJCQkvKiB0aGUgY29kZSBpcyBmb3IgYml0cmV2ZXJzZSBzdHJlYW1zICovCisJCQlpZiAoaGRsYy0+ZG9fYml0cmV2ZXJzZSA9PSAwKQorCQkJCWhkbGMtPmNiaW4gPSBiaXRyZXY4KCpzcmMrKyk7CisJCQllbHNlCisJCQkJaGRsYy0+Y2JpbiA9ICpzcmMrKzsKKwkJCXNsZW4tLTsKKwkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7CisJCQlpZiAoaGRsYy0+ZG9fYWRhcHQ1NikKKwkJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJfQorCisJCXN3aXRjaCAoaGRsYy0+c3RhdGUpIHsKKwkJY2FzZSBTVE9QUEVEOgorCQkJcmV0dXJuIDA7CisJCWNhc2UgSERMQ19GQVNUX0lETEU6CisJCQlpZiAoaGRsYy0+Y2JpbiA9PSAweGZmKSB7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKKwkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCWJyZWFrOworCQljYXNlIEhETENfR0VUX0ZMQUdfQjA6CisJCQlpZiAoIShoZGxjLT5jYmluICYgMHg4MCkpIHsKKwkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VURkxBR19CMUE2OworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoKCFoZGxjLT5kb19hZGFwdDU2KSAmJgorCQkJCSAgICAoKytoZGxjLT5oZGxjX2JpdHMxID49IDgpICYmCisJCQkJICAgIChoZGxjLT5iaXRfc2hpZnQgPT0gMSkpCisJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfRkFTVF9JRExFOworCQkJfQorCQkJaGRsYy0+Y2JpbiA8PD0gMTsKKwkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJYnJlYWs7CisJCWNhc2UgSERMQ19HRVRGTEFHX0IxQTY6CisJCQlpZiAoaGRsYy0+Y2JpbiAmIDB4ODApIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxKys7CisJCQkJaWYgKGhkbGMtPmhkbGNfYml0czEgPT0gNikKKwkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVEZMQUdfQjc7CisJCQl9IGVsc2UKKwkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKKwkJCWhkbGMtPmNiaW4gPDw9IDE7CisJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCWJyZWFrOworCQljYXNlIEhETENfR0VURkxBR19CNzoKKwkJCWlmIChoZGxjLT5jYmluICYgMHg4MCkgeworCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKKwkJCX0gZWxzZSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9EQVRBOworCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPSAwOworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7CisJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7CisJCQl9CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+Yml0X3NoaWZ0LS07CisJCQlicmVhazsKKwkJY2FzZSBIRExDX0dFVF9EQVRBOgorCQkJaWYgKGhkbGMtPmNiaW4gJiAweDgwKSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSsrOworCQkJCXN3aXRjaCAoaGRsYy0+aGRsY19iaXRzMSkgeworCQkJCWNhc2UgNjoKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA3OgorCQkJCQlpZiAoaGRsYy0+ZGF0YV9yZWNlaXZlZCkKKwkJCQkJCS8qIGJhZCBmcmFtZSAqLworCQkJCQkJc3RhdHVzID0gLUhETENfRlJBTUlOR19FUlJPUjsKKwkJCQkJaWYgKCFoZGxjLT5kb19hZGFwdDU2KSB7CisJCQkJCQlpZiAoaGRsYy0+Y2JpbiA9PSBmYXN0X2Fib3J0CisJCQkJCQkgICAgW2hkbGMtPmJpdF9zaGlmdCArIDFdKSB7CisJCQkJCQkJaGRsYy0+c3RhdGUgPQorCQkJCQkJCQlIRExDX0ZBU1RfSURMRTsKKwkJCQkJCQloZGxjLT5iaXRfc2hpZnQgPSAxOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9IGVsc2UKKwkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCQloZGxjLT5zaGlmdF9yZWcgfD0gMHg4MDsKKwkJCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChoZGxjLT5oZGxjX2JpdHMxKSB7CisJCQkJY2FzZSA1OgorCQkJCQlicmVhazsKKwkJCQljYXNlIDY6CisJCQkJCWlmIChoZGxjLT5kYXRhX3JlY2VpdmVkKQorCQkJCQkJc3RhdHVzID0gY2hlY2tfZnJhbWUoaGRsYyk7CisJCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKKwkJCQkJaGRsYy0+c2hpZnRfcmVnID0gMDsKKwkJCQkJaGRsYy0+ZGF0YV9iaXRzID0gMDsKKwkJCQkJaWYgKCFoZGxjLT5kb19hZGFwdDU2KQorCQkJCQkJaGFuZGxlX2Zhc3RfZmxhZyhoZGxjKTsKKwkJCQkJZWxzZSB7CisJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7CisJCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQl9CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJaGRsYy0+ZHN0cG9zID0gMDsKKwkJCQkqY291bnQgLT0gc2xlbjsKKwkJCQloZGxjLT5jYmluIDw8PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJCXJldHVybiBzdGF0dXM7CisJCQl9CisJCQlpZiAoaGRsYy0+ZGF0YV9iaXRzID09IDgpIHsKKwkJCQloZGxjLT5kYXRhX2JpdHMgPSAwOworCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAxOworCQkJCWhkbGMtPmNyYyA9IGNyY19jY2l0dF9ieXRlKGhkbGMtPmNyYywKKwkJCQkJCWhkbGMtPnNoaWZ0X3JlZyk7CisKKwkJCQkvKiBnb29kIGJ5dGUgcmVjZWl2ZWQgKi8KKwkJCQlpZiAoaGRsYy0+ZHN0cG9zIDwgZHNpemUpCisJCQkJCWRzdFtoZGxjLT5kc3Rwb3MrK10gPSBoZGxjLT5zaGlmdF9yZWc7CisJCQkJZWxzZSB7CisJCQkJCS8qIGZyYW1lIHRvbyBsb25nICovCisJCQkJCXN0YXR1cyA9IC1IRExDX0xFTkdUSF9FUlJPUjsKKwkJCQkJaGRsYy0+ZHN0cG9zID0gMDsKKwkJCQl9CisJCQl9CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+Yml0X3NoaWZ0LS07CisJCQlicmVhazsKKwkJY2FzZSBIRExDX0ZBU1RfRkxBRzoKKwkJCWlmIChoZGxjLT5jYmluID09IGhkbGMtPmZmdmFsdWUpIHsKKwkJCQloZGxjLT5iaXRfc2hpZnQgPSAwOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoaGRsYy0+Y2JpbiA9PSAweGZmKSB7CisJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19GQVNUX0lETEU7CisJCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDA7CisJCQkJfSBlbHNlIGlmIChoZGxjLT5mZmJpdF9zaGlmdCA9PSA4KSB7CisJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRGTEFHX0I3OworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UKKwkJCQkJaGFuZGxlX2Fib3J0KGhkbGMpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwkqY291bnQgLT0gc2xlbjsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXNkbmhkbGNfZGVjb2RlKTsKKy8qCisgIGlzZG5oZGxjX2VuY29kZSAtIGVuY29kZXMgSERMQyBmcmFtZXMgdG8gYSB0cmFuc3BhcmVudCBiaXQgc3RyZWFtLgorCisgIFRoZSBiaXQgc3RyZWFtIHN0YXJ0cyB3aXRoIGEgYmVnaW5uaW5nIGZsYWcgKDAxMTExMTEwKS4gQWZ0ZXIKKyAgdGhhdCBlYWNoIGJ5dGUgaXMgYWRkZWQgdG8gdGhlIGJpdCBzdHJlYW0gd2l0aCBiaXQgc3R1ZmZpbmcgYWRkZWQKKyAgKDAgYWZ0ZXIgNSAxJ3MpLgorICBXaGVuIHRoZSBsYXN0IGJ5dGUgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyLCB0aGUKKyAgQ1JDICgyIGJ5dGVzIGlzIGFkZGVkKSBhbmQgdGhlIGZyYW1lIHRlcm1pbmF0ZXMgd2l0aCB0aGUgZW5kaW5nIGZsYWcuCisgIEZvciB0aGUgZGNoYW5uZWwsIHRoZSBpZGxlIGNoYXJhY3RlciAoYWxsIDEncykgaXMgYWxzbyBhZGRlZCBhdCB0aGUgZW5kLgorICBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGVtcHR5IHNvdXJjZSBidWZmZXIgKHNsZW49MCksIGZsYWdzIG9yCisgIGlkbGUgY2hhcmFjdGVyIHdpbGwgYmUgZ2VuZXJhdGVkLgorCisgIHNyYyAtIHNvdXJjZSBidWZmZXIKKyAgc2xlbiAtIHNvdXJjZSBidWZmZXIgbGVuZ3RoCisgIGNvdW50IC0gbnVtYmVyIG9mIGJ5dGVzIHJlbW92ZWQgKGVuY29kZWQpIGZyb20gc291cmNlIGJ1ZmZlcgorICBkc3QgXyBkZXN0aW5hdGlvbiBidWZmZXIKKyAgZHNpemUgLSBkZXN0aW5hdGlvbiBidWZmZXIgc2l6ZQorICByZXR1cm5zIC0gbnVtYmVyIG9mIGVuY29kZWQgYnl0ZXMgaW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgorKi8KK2ludCBpc2RuaGRsY19lbmNvZGUoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHU4ICpzcmMsIHUxNiBzbGVuLAorCWludCAqY291bnQsIHU4ICpkc3QsIGludCBkc2l6ZSkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB4ZmFzdF9mbGFnX3ZhbHVlW10gPSB7CisJCTB4N2UsIDB4M2YsIDB4OWYsIDB4Y2YsIDB4ZTcsIDB4ZjMsIDB4ZjksIDB4ZmMsIDB4N2UKKwl9OworCisJaW50IGxlbiA9IDA7CisKKwkqY291bnQgPSBzbGVuOworCisJLyogc3BlY2lhbCBoYW5kbGluZyBmb3Igb25lIGJ5dGUgZnJhbWVzICovCisJaWYgKChzbGVuID09IDEpICYmIChoZGxjLT5zdGF0ZSA9PSBIRExDX1NFTkRfRkFTVF9GTEFHKSkKKwkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX09ORTsKKwl3aGlsZSAoZHNpemUgPiAwKSB7CisJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkgeworCQkJaWYgKHNsZW4gJiYgIWhkbGMtPmRvX2Nsb3NpbmcpIHsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPSAqc3JjKys7CisJCQkJc2xlbi0tOworCQkJCWlmIChzbGVuID09IDApCisJCQkJCS8qIGNsb3Npbmcgc2VxdWVuY2UsIENSQyArIGZsYWcocykgKi8KKwkJCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDE7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGhkbGMtPnN0YXRlID09IEhETENfU0VORF9EQVRBKSB7CisJCQkJCWlmIChoZGxjLT5kYXRhX3JlY2VpdmVkKSB7CisJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9DUkMxOworCQkJCQkJaGRsYy0+Y3JjIF49IDB4ZmZmZjsKKwkJCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7CisJCQkJCQloZGxjLT5zaGlmdF9yZWcgPQorCQkJCQkJCWhkbGMtPmNyYyAmIDB4ZmY7CisJCQkJCX0gZWxzZSBpZiAoIWhkbGMtPmRvX2FkYXB0NTYpCisJCQkJCQloZGxjLT5zdGF0ZSA9CisJCQkJCQkJSERMQ19TRU5EX0ZBU1RfRkxBRzsKKwkJCQkJZWxzZQorCQkJCQkJaGRsYy0+c3RhdGUgPQorCQkJCQkJCUhETENfU0VOREZMQUdfQjA7CisJCQkJfQorCisJCQl9CisJCX0KKworCQlzd2l0Y2ggKGhkbGMtPnN0YXRlKSB7CisJCWNhc2UgU1RPUFBFRDoKKwkJCXdoaWxlIChkc2l6ZS0tKQorCQkJCSpkc3QrKyA9IDB4ZmY7CisJCQlyZXR1cm4gZHNpemU7CisJCWNhc2UgSERMQ19TRU5EX0ZBU1RfRkxBRzoKKwkJCWhkbGMtPmRvX2Nsb3NpbmcgPSAwOworCQkJaWYgKHNsZW4gPT0gMCkgeworCQkJCS8qIHRoZSBjb2RlIGlzIGZvciBiaXRyZXZlcnNlIHN0cmVhbXMgKi8KKwkJCQlpZiAoaGRsYy0+ZG9fYml0cmV2ZXJzZSA9PSAwKQorCQkJCQkqZHN0KysgPSBiaXRyZXY4KGhkbGMtPmZmdmFsdWUpOworCQkJCWVsc2UKKwkJCQkJKmRzdCsrID0gaGRsYy0+ZmZ2YWx1ZTsKKwkJCQlsZW4rKzsKKwkJCQlkc2l6ZS0tOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgSERMQ19TRU5ERkxBR19PTkU6CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDgpIHsKKwkJCQloZGxjLT5jYmluID0gaGRsYy0+ZmZ2YWx1ZSA+PgorCQkJCQkoOCAtIGhkbGMtPmRhdGFfYml0cyk7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKKwkJCQloZGxjLT5jcmMgPSAweGZmZmY7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRGTEFHX0IwOgorCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKKwkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMUE2OworCQkJYnJlYWs7CisJCWNhc2UgSERMQ19TRU5ERkxBR19CMUE2OgorCQkJaGRsYy0+Y2JpbiA8PD0gMTsKKwkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJaGRsYy0+Y2JpbisrOworCQkJaWYgKCsraGRsYy0+aGRsY19iaXRzMSA9PSA2KQorCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CNzsKKwkJCWJyZWFrOworCQljYXNlIEhETENfU0VOREZMQUdfQjc6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoc2xlbiA9PSAwKSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSA4KSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKKwkJCQloZGxjLT5jcmMgPSAweGZmZmY7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRfRklSU1RfRkxBRzoKKwkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAxOworCQkJaWYgKGhkbGMtPmRhdGFfYml0cyA9PSA4KSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKKwkJCQloZGxjLT5jcmMgPSAweGZmZmY7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkKKwkJCQloZGxjLT5jYmluKys7CisJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkgeworCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0RBVEE7CisJCQkJaGRsYy0+Y3JjID0gMHhmZmZmOworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSERMQ19TRU5EX0RBVEE6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+aGRsY19iaXRzMSA9PSA1KSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDgpCisJCQkJaGRsYy0+Y3JjID0gY3JjX2NjaXR0X2J5dGUoaGRsYy0+Y3JjLAorCQkJCQloZGxjLT5zaGlmdF9yZWcpOworCQkJaWYgKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxKys7CisJCQkJaGRsYy0+Y2JpbisrOworCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKKwkJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCX0gZWxzZSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSERMQ19TRU5EX0NSQzE6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+aGRsY19iaXRzMSA9PSA1KSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkgeworCQkJCWhkbGMtPmhkbGNfYml0czErKzsKKwkJCQloZGxjLT5jYmluKys7CisJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJfSBlbHNlIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQkJaGRsYy0+Yml0X3NoaWZ0LS07CisJCQl9CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDApIHsKKwkJCQloZGxjLT5zaGlmdF9yZWcgPSAoaGRsYy0+Y3JjID4+IDgpOworCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0NSQzI7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhETENfU0VORF9DUkMyOgorCQkJaGRsYy0+Y2JpbiA8PD0gMTsKKwkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJaWYgKGhkbGMtPmhkbGNfYml0czEgPT0gNSkgeworCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpIHsKKwkJCQloZGxjLT5oZGxjX2JpdHMxKys7CisJCQkJaGRsYy0+Y2JpbisrOworCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKKwkJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCX0gZWxzZSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOworCQkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJfQorCQkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSAwKSB7CisJCQkJaGRsYy0+c2hpZnRfcmVnID0gMHg3ZTsKKwkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9DTE9TSU5HX0ZMQUc7CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEhETENfU0VORF9DTE9TSU5HX0ZMQUc6CisJCQloZGxjLT5jYmluIDw8PSAxOworCQkJaGRsYy0+ZGF0YV9iaXRzKys7CisJCQlpZiAoaGRsYy0+aGRsY19iaXRzMSA9PSA1KSB7CisJCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSkKKwkJCQloZGxjLT5jYmluKys7CisJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7CisJCQloZGxjLT5iaXRfc2hpZnQtLTsKKwkJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkgeworCQkJCWhkbGMtPmZmdmFsdWUgPQorCQkJCQl4ZmFzdF9mbGFnX3ZhbHVlW2hkbGMtPmRhdGFfYml0c107CisJCQkJaWYgKGhkbGMtPmRjaGFubmVsKSB7CisJCQkJCWhkbGMtPmZmdmFsdWUgPSAweDdlOworCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9JRExFMTsKKwkJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gOC1oZGxjLT5kYXRhX2JpdHM7CisJCQkJCWlmIChoZGxjLT5iaXRfc2hpZnQgPT0gMCkKKwkJCQkJCWhkbGMtPnN0YXRlID0KKwkJCQkJCQlIRExDX1NFTkRfRkFTVF9JRExFOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICghaGRsYy0+ZG9fYWRhcHQ1NikgeworCQkJCQkJaGRsYy0+c3RhdGUgPQorCQkJCQkJCUhETENfU0VORF9GQVNUX0ZMQUc7CisJCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMDsKKwkJCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOworCQkJCQl9CisJCQkJCS8qIEZpbmlzaGVkIHRoaXMgZnJhbWUsIHNlbmQgZmxhZ3MgKi8KKwkJCQkJaWYgKGRzaXplID4gMSkKKwkJCQkJCWRzaXplID0gMTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRfSURMRTE6CisJCQloZGxjLT5kb19jbG9zaW5nID0gMDsKKwkJCWhkbGMtPmNiaW4gPDw9IDE7CisJCQloZGxjLT5jYmluKys7CisJCQloZGxjLT5kYXRhX2JpdHMrKzsKKwkJCWhkbGMtPmJpdF9zaGlmdC0tOworCQkJaWYgKGhkbGMtPmJpdF9zaGlmdCA9PSAwKSB7CisJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRkFTVF9JRExFOworCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIRExDX1NFTkRfRkFTVF9JRExFOgorCQkJaGRsYy0+ZG9fY2xvc2luZyA9IDA7CisJCQloZGxjLT5jYmluID0gMHhmZjsKKwkJCWhkbGMtPmRhdGFfYml0cyA9IDg7CisJCQlpZiAoaGRsYy0+Yml0X3NoaWZ0ID09IDgpIHsKKwkJCQloZGxjLT5jYmluID0gMHg3ZTsKKwkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GSVJTVF9GTEFHOworCQkJfSBlbHNlIHsKKwkJCQkvKiB0aGUgY29kZSBpcyBmb3IgYml0cmV2ZXJzZSBzdHJlYW1zICovCisJCQkJaWYgKGhkbGMtPmRvX2JpdHJldmVyc2UgPT0gMCkKKwkJCQkJKmRzdCsrID0gYml0cmV2OChoZGxjLT5jYmluKTsKKwkJCQllbHNlCisJCQkJCSpkc3QrKyA9IGhkbGMtPmNiaW47CisJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKKwkJCQloZGxjLT5kYXRhX2JpdHMgPSAwOworCQkJCWxlbisrOworCQkJCWRzaXplID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGhkbGMtPmRvX2FkYXB0NTYpIHsKKwkJCWlmIChoZGxjLT5kYXRhX2JpdHMgPT0gNykgeworCQkJCWhkbGMtPmNiaW4gPDw9IDE7CisJCQkJaGRsYy0+Y2JpbisrOworCQkJCWhkbGMtPmRhdGFfYml0cysrOworCQkJfQorCQl9CisJCWlmIChoZGxjLT5kYXRhX2JpdHMgPT0gOCkgeworCQkJLyogdGhlIGNvZGUgaXMgZm9yIGJpdHJldmVyc2Ugc3RyZWFtcyAqLworCQkJaWYgKGhkbGMtPmRvX2JpdHJldmVyc2UgPT0gMCkKKwkJCQkqZHN0KysgPSBiaXRyZXY4KGhkbGMtPmNiaW4pOworCQkJZWxzZQorCQkJCSpkc3QrKyA9IGhkbGMtPmNiaW47CisJCQloZGxjLT5kYXRhX2JpdHMgPSAwOworCQkJbGVuKys7CisJCQlkc2l6ZS0tOworCQl9CisJfQorCSpjb3VudCAtPSBzbGVuOworCisJcmV0dXJuIGxlbjsKK30KK0VYUE9SVF9TWU1CT0woaXNkbmhkbGNfZW5jb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9od2NoYW5uZWwuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9od2NoYW5uZWwuYwppbmRleCAwNDgxYTBjLi5lODA0OWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vaHdjaGFubmVsLmMKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL2h3Y2hhbm5lbC5jCkBAIC0xMTQsMTMgKzExNCwxNCBAQAogfQogRVhQT1JUX1NZTUJPTChtSVNETl9mcmVlZGNoYW5uZWwpOwogCi1pbnQKLW1JU0ROX2ZyZWViY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKmNoKQordm9pZAorbUlTRE5fY2xlYXJfYmNoYW5uZWwoc3RydWN0IGJjaGFubmVsICpjaCkKIHsKIAlpZiAoY2gtPnR4X3NrYikgewogCQlkZXZfa2ZyZWVfc2tiKGNoLT50eF9za2IpOwogCQljaC0+dHhfc2tiID0gTlVMTDsKIAl9CisJY2gtPnR4X2lkeCA9IDA7CiAJaWYgKGNoLT5yeF9za2IpIHsKIAkJZGV2X2tmcmVlX3NrYihjaC0+cnhfc2tiKTsKIAkJY2gtPnJ4X3NrYiA9IE5VTEw7CkBAIC0xMjksNiArMTMwLDE2IEBACiAJCWRldl9rZnJlZV9za2IoY2gtPm5leHRfc2tiKTsKIAkJY2gtPm5leHRfc2tiID0gTlVMTDsKIAl9CisJdGVzdF9hbmRfY2xlYXJfYml0KEZMR19UWF9CVVNZLCAmY2gtPkZsYWdzKTsKKwl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1RYX05FWFQsICZjaC0+RmxhZ3MpOworCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNUSVZFLCAmY2gtPkZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wobUlTRE5fY2xlYXJfYmNoYW5uZWwpOworCitpbnQKK21JU0ROX2ZyZWViY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKmNoKQoreworCW1JU0ROX2NsZWFyX2JjaGFubmVsKGNoKTsKIAlza2JfcXVldWVfcHVyZ2UoJmNoLT5ycXVldWUpOwogCWNoLT5yY291bnQgPSAwOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbGF5ZXIyLmMKaW5kZXggOWMyNTg5ZS4uZTE3ZjAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sYXllcjIuYwpAQCAtMTgzMiw4ICsxODMyLDYgQEAKIAl7U1RfTDJfOCwgRVZfTDFfREVBQ1RJVkFURSwgbDJfcGVyc2lzdGFudF9kYX0sCiB9OwogCi0jZGVmaW5lIEwyX0ZOX0NPVU5UIChzaXplb2YoTDJGbkxpc3QpL3NpemVvZihzdHJ1Y3QgRnNtTm9kZSkpCi0KIHN0YXRpYyBpbnQKIHBoX2RhdGFfaW5kaWNhdGlvbihzdHJ1Y3QgbGF5ZXIyICpsMiwgc3RydWN0IG1JU0ROaGVhZCAqaGgsIHN0cnVjdCBza19idWZmICpza2IpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggNmYwZDkwZC4uMzJkMGI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwpAQCAtNjQsNiArNjQsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAogCWNvbnN0IGNoYXIgKmh3X2hhbmRsZXJfbmFtZTsKKwljaGFyICpod19oYW5kbGVyX3BhcmFtczsKIAl1bnNpZ25lZCBucl9wcmlvcml0eV9ncm91cHM7CiAJc3RydWN0IGxpc3RfaGVhZCBwcmlvcml0eV9ncm91cHM7CiAJdW5zaWduZWQgcGdfaW5pdF9yZXF1aXJlZDsJLyogcGdfaW5pdCBuZWVkcyBjYWxsaW5nPyAqLwpAQCAtMjE5LDYgKzIyMCw3IEBACiAJfQogCiAJa2ZyZWUobS0+aHdfaGFuZGxlcl9uYW1lKTsKKwlrZnJlZShtLT5od19oYW5kbGVyX3BhcmFtcyk7CiAJbWVtcG9vbF9kZXN0cm95KG0tPm1waW9fcG9vbCk7CiAJa2ZyZWUobSk7CiB9CkBAIC02MTUsNiArNjE3LDE3IEBACiAJCQlkbV9wdXRfZGV2aWNlKHRpLCBwLT5wYXRoLmRldik7CiAJCQlnb3RvIGJhZDsKIAkJfQorCisJCWlmIChtLT5od19oYW5kbGVyX3BhcmFtcykgeworCQkJciA9IHNjc2lfZGhfc2V0X3BhcmFtcyhxLCBtLT5od19oYW5kbGVyX3BhcmFtcyk7CisJCQlpZiAociA8IDApIHsKKwkJCQl0aS0+ZXJyb3IgPSAidW5hYmxlIHRvIHNldCBoYXJkd2FyZSAiCisJCQkJCQkJImhhbmRsZXIgcGFyYW1ldGVycyI7CisJCQkJc2NzaV9kaF9kZXRhY2gocSk7CisJCQkJZG1fcHV0X2RldmljZSh0aSwgcC0+cGF0aC5kZXYpOworCQkJCWdvdG8gYmFkOworCQkJfQorCQl9CiAJfQogCiAJciA9IHBzLT50eXBlLT5hZGRfcGF0aChwcywgJnAtPnBhdGgsIGFzLT5hcmdjLCBhcy0+YXJndiwgJnRpLT5lcnJvcik7CkBAIC03MDUsNiArNzE4LDcgQEAKIHN0YXRpYyBpbnQgcGFyc2VfaHdfaGFuZGxlcihzdHJ1Y3QgYXJnX3NldCAqYXMsIHN0cnVjdCBtdWx0aXBhdGggKm0pCiB7CiAJdW5zaWduZWQgaHdfYXJnYzsKKwlpbnQgcmV0OwogCXN0cnVjdCBkbV90YXJnZXQgKnRpID0gbS0+dGk7CiAKIAlzdGF0aWMgc3RydWN0IHBhcmFtIF9wYXJhbXNbXSA9IHsKQEAgLTcyNiwxNyArNzQwLDMzIEBACiAJcmVxdWVzdF9tb2R1bGUoInNjc2lfZGhfJXMiLCBtLT5od19oYW5kbGVyX25hbWUpOwogCWlmIChzY3NpX2RoX2hhbmRsZXJfZXhpc3QobS0+aHdfaGFuZGxlcl9uYW1lKSA9PSAwKSB7CiAJCXRpLT5lcnJvciA9ICJ1bmtub3duIGhhcmR3YXJlIGhhbmRsZXIgdHlwZSI7Ci0JCWtmcmVlKG0tPmh3X2hhbmRsZXJfbmFtZSk7Ci0JCW0tPmh3X2hhbmRsZXJfbmFtZSA9IE5VTEw7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CiAJfQogCi0JaWYgKGh3X2FyZ2MgPiAxKQotCQlETVdBUk4oIklnbm9yaW5nIHVzZXItc3BlY2lmaWVkIGFyZ3VtZW50cyBmb3IgIgotCQkgICAgICAgImhhcmR3YXJlIGhhbmRsZXIgXCIlc1wiIiwgbS0+aHdfaGFuZGxlcl9uYW1lKTsKKwlpZiAoaHdfYXJnYyA+IDEpIHsKKwkJY2hhciAqcDsKKwkJaW50IGksIGosIGxlbiA9IDQ7CisKKwkJZm9yIChpID0gMDsgaSA8PSBod19hcmdjIC0gMjsgaSsrKQorCQkJbGVuICs9IHN0cmxlbihhcy0+YXJndltpXSkgKyAxOworCQlwID0gbS0+aHdfaGFuZGxlcl9wYXJhbXMgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghcCkgeworCQkJdGktPmVycm9yID0gIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCI7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmYWlsOworCQl9CisJCWogPSBzcHJpbnRmKHAsICIlZCIsIGh3X2FyZ2MgLSAxKTsKKwkJZm9yIChpID0gMCwgcCs9aisxOyBpIDw9IGh3X2FyZ2MgLSAyOyBpKyssIHArPWorMSkKKwkJCWogPSBzcHJpbnRmKHAsICIlcyIsIGFzLT5hcmd2W2ldKTsKKwl9CiAJY29uc3VtZShhcywgaHdfYXJnYyAtIDEpOwogCiAJcmV0dXJuIDA7CitmYWlsOgorCWtmcmVlKG0tPmh3X2hhbmRsZXJfbmFtZSk7CisJbS0+aHdfaGFuZGxlcl9uYW1lID0gTlVMTDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBhcnNlX2ZlYXR1cmVzKHN0cnVjdCBhcmdfc2V0ICphcywgc3RydWN0IG11bHRpcGF0aCAqbSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwppbmRleCAzM2YxNzllLi5jYzlkYzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCkBAIC0xMTI5LDcgKzExMjksNyBAQAogCWlmIChlcnJvciA9PSAtRU9QTk9UU1VQUCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoKGVycm9yID09IC1FV09VTERCTE9DSykgJiYgYmlvX3J3X2FoZWFkKGJpbykpCisJaWYgKChlcnJvciA9PSAtRVdPVUxEQkxPQ0spICYmIGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0FIRUFEKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAodW5saWtlbHkoZXJyb3IpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXN0cmlwZS5jIGIvZHJpdmVycy9tZC9kbS1zdHJpcGUuYwppbmRleCAzZTU2M2QyLi5lMGVmYzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCWlmICghZXJyb3IpCiAJCXJldHVybiAwOyAvKiBJL08gY29tcGxldGUgKi8KIAotCWlmICgoZXJyb3IgPT0gLUVXT1VMREJMT0NLKSAmJiBiaW9fcndfYWhlYWQoYmlvKSkKKwlpZiAoKGVycm9yID09IC1FV09VTERCTE9DSykgJiYgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQUhFQUQpKQogCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAoZXJyb3IgPT0gLUVPUE5PVFNVUFApCkBAIC0zMzYsNyArMzM2LDcgQEAKIAl1bnNpZ25lZCBjaHVua19zaXplID0gKHNjLT5jaHVua19tYXNrICsgMSkgPDwgOTsKIAogCWJsa19saW1pdHNfaW9fbWluKGxpbWl0cywgY2h1bmtfc2l6ZSk7Ci0JbGltaXRzLT5pb19vcHQgPSBjaHVua19zaXplICogc2MtPnN0cmlwZXM7CisJYmxrX2xpbWl0c19pb19vcHQobGltaXRzLCBjaHVua19zaXplICogc2MtPnN0cmlwZXMpOwogfQogCiBzdGF0aWMgc3RydWN0IHRhcmdldF90eXBlIHN0cmlwZV90YXJnZXQgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggYjQ4NDViMS4uZWVlMjhmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJLyoKIAkgKiBBIGxpc3Qgb2YgaW9zIHRoYXQgYXJyaXZlZCB3aGlsZSB3ZSB3ZXJlIHN1c3BlbmRlZC4KIAkgKi8KLQlhdG9taWNfdCBwZW5kaW5nOworCWF0b21pY190IHBlbmRpbmdbMl07CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3QgYmlvX2xpc3QgZGVmZXJyZWQ7CkBAIC00NTMsMTMgKzQ1MywxNCBAQAogewogCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGlvLT5tZDsKIAlpbnQgY3B1OworCWludCBydyA9IGJpb19kYXRhX2Rpcihpby0+YmlvKTsKIAogCWlvLT5zdGFydF90aW1lID0gamlmZmllczsKIAogCWNwdSA9IHBhcnRfc3RhdF9sb2NrKCk7CiAJcGFydF9yb3VuZF9zdGF0cyhjcHUsICZkbV9kaXNrKG1kKS0+cGFydDApOwogCXBhcnRfc3RhdF91bmxvY2soKTsKLQlkbV9kaXNrKG1kKS0+cGFydDAuaW5fZmxpZ2h0ID0gYXRvbWljX2luY19yZXR1cm4oJm1kLT5wZW5kaW5nKTsKKwlkbV9kaXNrKG1kKS0+cGFydDAuaW5fZmxpZ2h0W3J3XSA9IGF0b21pY19pbmNfcmV0dXJuKCZtZC0+cGVuZGluZ1tyd10pOwogfQogCiBzdGF0aWMgdm9pZCBlbmRfaW9fYWNjdChzdHJ1Y3QgZG1faW8gKmlvKQpAQCAtNDc5LDggKzQ4MCw5IEBACiAJICogQWZ0ZXIgdGhpcyBpcyBkZWNyZW1lbnRlZCB0aGUgYmlvIG11c3Qgbm90IGJlIHRvdWNoZWQgaWYgaXQgaXMKIAkgKiBhIGJhcnJpZXIuCiAJICovCi0JZG1fZGlzayhtZCktPnBhcnQwLmluX2ZsaWdodCA9IHBlbmRpbmcgPQotCQlhdG9taWNfZGVjX3JldHVybigmbWQtPnBlbmRpbmcpOworCWRtX2Rpc2sobWQpLT5wYXJ0MC5pbl9mbGlnaHRbcnddID0gcGVuZGluZyA9CisJCWF0b21pY19kZWNfcmV0dXJuKCZtZC0+cGVuZGluZ1tyd10pOworCXBlbmRpbmcgKz0gYXRvbWljX3JlYWQoJm1kLT5wZW5kaW5nW3J3XjB4MV0pOwogCiAJLyogbnVkZ2UgYW55b25lIHdhaXRpbmcgb24gc3VzcGVuZCBxdWV1ZSAqLwogCWlmICghcGVuZGluZykKQEAgLTU4Niw3ICs1ODgsNyBAQAogCQkJICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWQtPmRlZmVycmVkX2xvY2ssIGZsYWdzKTsKIAkJCWlmIChfX25vZmx1c2hfc3VzcGVuZGluZyhtZCkpIHsKLQkJCQlpZiAoIWJpb19iYXJyaWVyKGlvLT5iaW8pKQorCQkJCWlmICghYmlvX3J3X2ZsYWdnZWQoaW8tPmJpbywgQklPX1JXX0JBUlJJRVIpKQogCQkJCQliaW9fbGlzdF9hZGRfaGVhZCgmbWQtPmRlZmVycmVkLAogCQkJCQkJCSAgaW8tPmJpbyk7CiAJCQl9IGVsc2UKQEAgLTU5OCw3ICs2MDAsNyBAQAogCQlpb19lcnJvciA9IGlvLT5lcnJvcjsKIAkJYmlvID0gaW8tPmJpbzsKIAotCQlpZiAoYmlvX2JhcnJpZXIoYmlvKSkgeworCQlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpIHsKIAkJCS8qCiAJCQkgKiBUaGVyZSBjYW4gYmUganVzdCBvbmUgYmFycmllciByZXF1ZXN0IHNvIHdlIHVzZQogCQkJICogYSBwZXItZGV2aWNlIHZhcmlhYmxlIGZvciBlcnJvciByZXBvcnRpbmcuCkBAIC0xMjA5LDcgKzEyMTEsNyBAQAogCiAJY2kubWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKIAlpZiAodW5saWtlbHkoIWNpLm1hcCkpIHsKLQkJaWYgKCFiaW9fYmFycmllcihiaW8pKQorCQlpZiAoIWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKQogCQkJYmlvX2lvX2Vycm9yKGJpbyk7CiAJCWVsc2UKIAkJCWlmICghbWQtPmJhcnJpZXJfZXJyb3IpCkBAIC0xMzIxLDcgKzEzMjMsNyBAQAogCSAqIHdlIGhhdmUgdG8gcXVldWUgdGhpcyBpbyBmb3IgbGF0ZXIuCiAJICovCiAJaWYgKHVubGlrZWx5KHRlc3RfYml0KERNRl9RVUVVRV9JT19UT19USFJFQUQsICZtZC0+ZmxhZ3MpKSB8fAotCSAgICB1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkgeworCSAgICB1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKIAkJdXBfcmVhZCgmbWQtPmlvX2xvY2spOwogCiAJCWlmICh1bmxpa2VseSh0ZXN0X2JpdChETUZfQkxPQ0tfSU9fRk9SX1NVU1BFTkQsICZtZC0+ZmxhZ3MpKSAmJgpAQCAtMTM0NCw3ICsxMzQ2LDcgQEAKIHsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBxLT5xdWV1ZWRhdGE7CiAKLQlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSkpIHsKKwlpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKSB7CiAJCWJpb19lbmRpbyhiaW8sIC1FT1BOT1RTVVBQKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTc4NSw3ICsxNzg3LDggQEAKIAlpZiAoIW1kLT5kaXNrKQogCQlnb3RvIGJhZF9kaXNrOwogCi0JYXRvbWljX3NldCgmbWQtPnBlbmRpbmcsIDApOworCWF0b21pY19zZXQoJm1kLT5wZW5kaW5nWzBdLCAwKTsKKwlhdG9taWNfc2V0KCZtZC0+cGVuZGluZ1sxXSwgMCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWQtPndhaXQpOwogCUlOSVRfV09SSygmbWQtPndvcmssIGRtX3dxX3dvcmspOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kLT5ldmVudHEpOwpAQCAtMjA4OCw3ICsyMDkxLDggQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCQl9IGVsc2UgaWYgKCFhdG9taWNfcmVhZCgmbWQtPnBlbmRpbmcpKQorCQl9IGVsc2UgaWYgKCFhdG9taWNfcmVhZCgmbWQtPnBlbmRpbmdbMF0pICYmCisJCQkJCSFhdG9taWNfcmVhZCgmbWQtPnBlbmRpbmdbMV0pKQogCQkJYnJlYWs7CiAKIAkJaWYgKGludGVycnVwdGlibGUgPT0gVEFTS19JTlRFUlJVUFRJQkxFICYmCkBAIC0yMTY0LDcgKzIxNjgsNyBAQAogCQlpZiAoZG1fcmVxdWVzdF9iYXNlZChtZCkpCiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChjKTsKIAkJZWxzZSB7Ci0JCQlpZiAoYmlvX2JhcnJpZXIoYykpCisJCQlpZiAoYmlvX3J3X2ZsYWdnZWQoYywgQklPX1JXX0JBUlJJRVIpKQogCQkJCXByb2Nlc3NfYmFycmllcihtZCwgYyk7CiAJCQllbHNlCiAJCQkJX19zcGxpdF9hbmRfcHJvY2Vzc19iaW8obWQsIGMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggNWZlMzljMi4uZWE0ODQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAlzZWN0b3JfdCBzdGFydF9zZWN0b3I7CiAJaW50IGNwdTsKIAotCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkgeworCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCA3MTQwOTA5Li44OWU3NjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogCWlmICh1cHRvZGF0ZSkKIAkJbXVsdGlwYXRoX2VuZF9iaF9pbyhtcF9iaCwgMCk7Ci0JZWxzZSBpZiAoIWJpb19yd19haGVhZChiaW8pKSB7CisJZWxzZSBpZiAoIWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0FIRUFEKSkgewogCQkvKgogCQkgKiBvb3BzLCBJTyBlcnJvcjoKIAkJICovCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKIAlpbnQgY3B1OwogCi0JaWYgKHVubGlrZWx5KGJpb19iYXJyaWVyKGJpbykpKSB7CisJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDAuYyBiL2RyaXZlcnMvbWQvcmFpZDAuYwppbmRleCA4OThlMmJkLi5mODQ1ZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMC5jCkBAIC00NDgsNyArNDQ4LDcgQEAKIAljb25zdCBpbnQgcncgPSBiaW9fZGF0YV9kaXIoYmlvKTsKIAlpbnQgY3B1OwogCi0JaWYgKHVubGlrZWx5KGJpb19iYXJyaWVyKGJpbykpKSB7CisJaWYgKHVubGlrZWx5KGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0JBUlJJRVIpKSkgewogCQliaW9fZW5kaW8oYmlvLCAtRU9QTk9UU1VQUCk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCA4NzI2ZmQ3Li5mZjdlZDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC03ODIsOCArNzgyLDkgQEAKIAlzdHJ1Y3QgYmlvX2xpc3QgYmw7CiAJc3RydWN0IHBhZ2UgKipiZWhpbmRfcGFnZXMgPSBOVUxMOwogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOwotCWNvbnN0IGludCBkb19zeW5jID0gYmlvX3N5bmMoYmlvKTsKLQlpbnQgY3B1LCBkb19iYXJyaWVyczsKKwljb25zdCBib29sIGRvX3N5bmMgPSBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pOworCWludCBjcHU7CisJYm9vbCBkb19iYXJyaWVyczsKIAltZGtfcmRldl90ICpibG9ja2VkX3JkZXY7CiAKIAkvKgpAQCAtNzk3LDcgKzc5OCw4IEBACiAKIAltZF93cml0ZV9zdGFydChtZGRldiwgYmlvKTsgLyogd2FpdCBvbiBzdXBlcmJsb2NrIHVwZGF0ZSBlYXJseSAqLwogCi0JaWYgKHVubGlrZWx5KCFtZGRldi0+YmFycmllcnNfd29yayAmJiBiaW9fYmFycmllcihiaW8pKSkgeworCWlmICh1bmxpa2VseSghbWRkZXYtPmJhcnJpZXJzX3dvcmsgJiYKKwkJICAgICBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKIAkJaWYgKHJ3ID09IFdSSVRFKQogCQkJbWRfd3JpdGVfZW5kKG1kZGV2KTsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwpAQCAtOTI1LDcgKzkyNyw3IEBACiAJYXRvbWljX3NldCgmcjFfYmlvLT5yZW1haW5pbmcsIDApOwogCWF0b21pY19zZXQoJnIxX2Jpby0+YmVoaW5kX3JlbWFpbmluZywgMCk7CiAKLQlkb19iYXJyaWVycyA9IGJpb19iYXJyaWVyKGJpbyk7CisJZG9fYmFycmllcnMgPSBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKTsKIAlpZiAoZG9fYmFycmllcnMpCiAJCXNldF9iaXQoUjFCSU9fQmFycmllciwgJnIxX2Jpby0+c3RhdGUpOwogCkBAIC0xNjAwLDcgKzE2MDIsNyBAQAogCQkJICogV2UgYWxyZWFkeSBoYXZlIGEgbnJfcGVuZGluZyByZWZlcmVuY2Ugb24gdGhlc2UgcmRldnMuCiAJCQkgKi8KIAkJCWludCBpOwotCQkJY29uc3QgaW50IGRvX3N5bmMgPSBiaW9fc3luYyhyMV9iaW8tPm1hc3Rlcl9iaW8pOworCQkJY29uc3QgYm9vbCBkb19zeW5jID0gYmlvX3J3X2ZsYWdnZWQocjFfYmlvLT5tYXN0ZXJfYmlvLCBCSU9fUldfU1lOQ0lPKTsKIAkJCWNsZWFyX2JpdChSMUJJT19CYXJyaWVyUmV0cnksICZyMV9iaW8tPnN0YXRlKTsKIAkJCWNsZWFyX2JpdChSMUJJT19CYXJyaWVyLCAmcjFfYmlvLT5zdGF0ZSk7CiAJCQlmb3IgKGk9MDsgaSA8IGNvbmYtPnJhaWRfZGlza3M7IGkrKykKQEAgLTE2NTQsNyArMTY1Niw3IEBACiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcjFfYmlvLT5zZWN0b3IpOwogCQkJCXJhaWRfZW5kX2Jpb19pbyhyMV9iaW8pOwogCQkJfSBlbHNlIHsKLQkJCQljb25zdCBpbnQgZG9fc3luYyA9IGJpb19zeW5jKHIxX2Jpby0+bWFzdGVyX2Jpbyk7CisJCQkJY29uc3QgYm9vbCBkb19zeW5jID0gYmlvX3J3X2ZsYWdnZWQocjFfYmlvLT5tYXN0ZXJfYmlvLCBCSU9fUldfU1lOQ0lPKTsKIAkJCQlyMV9iaW8tPmJpb3NbcjFfYmlvLT5yZWFkX2Rpc2tdID0KIAkJCQkJbWRkZXYtPnJvID8gSU9fQkxPQ0tFRCA6IE5VTEw7CiAJCQkJcjFfYmlvLT5yZWFkX2Rpc2sgPSBkaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggM2Q5MDIwYy4uZDBhMjE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC03OTYsMTIgKzc5NiwxMiBAQAogCWludCBpOwogCWludCBjaHVua19zZWN0cyA9IGNvbmYtPmNodW5rX21hc2sgKyAxOwogCWNvbnN0IGludCBydyA9IGJpb19kYXRhX2RpcihiaW8pOwotCWNvbnN0IGludCBkb19zeW5jID0gYmlvX3N5bmMoYmlvKTsKKwljb25zdCBib29sIGRvX3N5bmMgPSBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pOwogCXN0cnVjdCBiaW9fbGlzdCBibDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKIAotCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkgeworCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNjEwLDcgKzE2MTAsNyBAQAogCQkJCXJhaWRfZW5kX2Jpb19pbyhyMTBfYmlvKTsKIAkJCQliaW9fcHV0KGJpbyk7CiAJCQl9IGVsc2UgewotCQkJCWNvbnN0IGludCBkb19zeW5jID0gYmlvX3N5bmMocjEwX2Jpby0+bWFzdGVyX2Jpbyk7CisJCQkJY29uc3QgYm9vbCBkb19zeW5jID0gYmlvX3J3X2ZsYWdnZWQocjEwX2Jpby0+bWFzdGVyX2JpbywgQklPX1JXX1NZTkNJTyk7CiAJCQkJYmlvX3B1dChiaW8pOwogCQkJCXJkZXYgPSBjb25mLT5taXJyb3JzW21pcnJvcl0ucmRldjsKIAkJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IGI4YTJjNWQuLjgyNmViMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTM2MDYsNyArMzYwNiw3IEBACiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpKTsKIAlpbnQgY3B1LCByZW1haW5pbmc7CiAKLQlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmkpKSkgeworCWlmICh1bmxpa2VseShiaW9fcndfZmxhZ2dlZChiaSwgQklPX1JXX0JBUlJJRVIpKSkgewogCQliaW9fZW5kaW8oYmksIC1FT1BOT1RTVVBQKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCmluZGV4IDgyODBmOGQuLjhjOWFlMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKQEAgLTkwNCw3ICs5MDQsNyBAQAogc3RhdGljIGludCBkdmJfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB1OCBtYXNrX25vcm1hbFs2XT17MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCmluZGV4IDVkMGJhNGYuLjc2ZmEyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5jCkBAIC0xMDE1LDkgKzEwMTUsOSBAQAogewogCVNHRVNpbXBsZTY0X3QgKnBTZ2UgPSAoU0dFU2ltcGxlNjRfdCAqKSBwQWRkcjsKIAlwU2dlLT5BZGRyZXNzLkxvdyA9IGNwdV90b19sZTMyCi0JCQkobG93ZXJfMzJfYml0cygodW5zaWduZWQgbG9uZykoZG1hX2FkZHIpKSk7CisJCQkobG93ZXJfMzJfYml0cyhkbWFfYWRkcikpOwogCXBTZ2UtPkFkZHJlc3MuSGlnaCA9IGNwdV90b19sZTMyCi0JCQkodXBwZXJfMzJfYml0cygodW5zaWduZWQgbG9uZylkbWFfYWRkcikpOworCQkJKHVwcGVyXzMyX2JpdHMoZG1hX2FkZHIpKTsKIAlwU2dlLT5GbGFnc0xlbmd0aCA9IGNwdV90b19sZTMyCiAJCQkoKGZsYWdzbGVuZ3RoIHwgTVBUX1NHRV9GTEFHU182NF9CSVRfQUREUkVTU0lORykpOwogfQpAQCAtMTAzOCw4ICsxMDM4LDggQEAKIAl1MzIgdG1wOwogCiAJcFNnZS0+QWRkcmVzcy5Mb3cgPSBjcHVfdG9fbGUzMgotCQkJKGxvd2VyXzMyX2JpdHMoKHVuc2lnbmVkIGxvbmcpKGRtYV9hZGRyKSkpOwotCXRtcCA9ICh1MzIpKHVwcGVyXzMyX2JpdHMoKHVuc2lnbmVkIGxvbmcpZG1hX2FkZHIpKTsKKwkJCShsb3dlcl8zMl9iaXRzKGRtYV9hZGRyKSk7CisJdG1wID0gKHUzMikodXBwZXJfMzJfYml0cyhkbWFfYWRkcikpOwogCiAJLyoKIAkgKiAxMDc4IGVycmF0YSB3b3JrYXJvdW5kIGZvciB0aGUgMzZHQiBsaW1pdGF0aW9uCkBAIC0xMTAxLDcgKzExMDEsNyBAQAogCQlwQ2hhaW4tPk5leHRDaGFpbk9mZnNldCA9IG5leHQ7CiAKIAkJcENoYWluLT5BZGRyZXNzLkxvdyA9IGNwdV90b19sZTMyKHRtcCk7Ci0JCXRtcCA9ICh1MzIpKHVwcGVyXzMyX2JpdHMoKHVuc2lnbmVkIGxvbmcpZG1hX2FkZHIpKTsKKwkJdG1wID0gKHUzMikodXBwZXJfMzJfYml0cyhkbWFfYWRkcikpOwogCQlwQ2hhaW4tPkFkZHJlc3MuSGlnaCA9IGNwdV90b19sZTMyKHRtcCk7CiB9CiAKQEAgLTEyOTcsMTIgKzEyOTcsOCBAQAogCXBzZ2UgPSAoY2hhciAqKSZpb2NfaW5pdC0+SG9zdFBhZ2VCdWZmZXJTR0U7CiAJZmxhZ3NfbGVuZ3RoID0gTVBJX1NHRV9GTEFHU19TSU1QTEVfRUxFTUVOVCB8CiAJICAgIE1QSV9TR0VfRkxBR1NfU1lTVEVNX0FERFJFU1MgfAotCSAgICBNUElfU0dFX0ZMQUdTXzMyX0JJVF9BRERSRVNTSU5HIHwKIAkgICAgTVBJX1NHRV9GTEFHU19IT1NUX1RPX0lPQyB8CiAJICAgIE1QSV9TR0VfRkxBR1NfRU5EX09GX0JVRkZFUjsKLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID09IHNpemVvZih1NjQpKSB7Ci0JICAgIGZsYWdzX2xlbmd0aCB8PSBNUElfU0dFX0ZMQUdTXzY0X0JJVF9BRERSRVNTSU5HOwotCX0KIAlmbGFnc19sZW5ndGggPSBmbGFnc19sZW5ndGggPDwgTVBJX1NHRV9GTEFHU19TSElGVDsKIAlmbGFnc19sZW5ndGggfD0gaW9jLT5Ib3N0UGFnZUJ1ZmZlcl9zejsKIAlpb2MtPmFkZF9zZ2UocHNnZSwgZmxhZ3NfbGVuZ3RoLCBpb2MtPkhvc3RQYWdlQnVmZmVyX2RtYSk7CkBAIC0yMjI0LDggKzIyMjAsNiBAQAogCWludAkgaGFyZDsKIAlpbnQJIHJjPTA7CiAJaW50CSBpaTsKLQl1OAkgY2JfaWR4OwotCWludAkgaGFuZGxlcnM7CiAJaW50CSByZXQgPSAwOwogCWludAkgcmVzZXRfYWx0X2lvY19hY3RpdmUgPSAwOwogCWludAkgaXJxX2FsbG9jYXRlZCA9IDA7CkBAIC0yNTQ4LDM0ICsyNTQyLDYgQEAKIAkJbXB0X2dldF9tYW51ZmFjdHVyaW5nX3BnXzAoaW9jKTsKIAl9CiAKLQkvKgotCSAqIENhbGwgZWFjaCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBwcm90b2NvbCBJT0MgcmVzZXQgaGFuZGxlcgotCSAqIHdpdGggcG9zdC1yZXNldCBpbmRpY2F0aW9uLgotCSAqIE5PVEU6IElmIHdlJ3JlIGRvaW5nIF9JT0NfQlJJTkdVUCwgdGhlcmUgY2FuIGJlIG5vCi0JICogTXB0UmVzZXRIYW5kbGVyc1tdIHJlZ2lzdGVyZWQgeWV0LgotCSAqLwotCWlmIChoYXJkX3Jlc2V0X2RvbmUpIHsKLQkJcmMgPSBoYW5kbGVycyA9IDA7Ci0JCWZvciAoY2JfaWR4ID0gTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTLTE7IGNiX2lkeDsgY2JfaWR4LS0pIHsKLQkJCWlmICgocmV0ID09IDApICYmIE1wdFJlc2V0SGFuZGxlcnNbY2JfaWR4XSkgewotCQkJCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKLQkJCQkgICAgIkNhbGxpbmcgSU9DIHBvc3RfcmVzZXQgaGFuZGxlciAjJWRcbiIsCi0JCQkJICAgIGlvYy0+bmFtZSwgY2JfaWR4KSk7Ci0JCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChjYl9pZHgsIGlvYywgTVBUX0lPQ19QT1NUX1JFU0VUKTsKLQkJCQloYW5kbGVycysrOwotCQkJfQotCi0JCQlpZiAoYWx0X2lvY19yZWFkeSAmJiBNcHRSZXNldEhhbmRsZXJzW2NiX2lkeF0pIHsKLQkJCQlkcnNwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKLQkJCQkgICAgIkNhbGxpbmcgSU9DIHBvc3RfcmVzZXQgaGFuZGxlciAjJWRcbiIsCi0JCQkJICAgIGlvYy0+YWx0X2lvYy0+bmFtZSwgY2JfaWR4KSk7Ci0JCQkJcmMgKz0gbXB0X3NpZ25hbF9yZXNldChjYl9pZHgsIGlvYy0+YWx0X2lvYywgTVBUX0lPQ19QT1NUX1JFU0VUKTsKLQkJCQloYW5kbGVycysrOwotCQkJfQotCQl9Ci0JCS8qIEZJWE1FPyAgRXhhbWluZSByZXN1bHRzIGhlcmU/ICovCi0JfQotCiAgb3V0OgogCWlmICgocmV0ICE9IDApICYmIGlycV9hbGxvY2F0ZWQpIHsKIAkJZnJlZV9pcnEoaW9jLT5wY2lfaXJxLCBpb2MpOwpAQCAtMzkzOCw2ICszOTA0LDcgQEAKIAlpbnQgY291bnQgPSAwOwogCXUzMiBkaWFnMXZhbCA9IDA7CiAJTXBpRndIZWFkZXJfdCAqY2FjaGVkX2Z3OwkvKiBQb2ludGVyIHRvIEZXICovCisJdTgJIGNiX2lkeDsKIAogCS8qIENsZWFyIGFueSBleGlzdGluZyBpbnRlcnJ1cHRzICovCiAJQ0hJUFJFR19XUklURTMyKCZpb2MtPmNoaXAtPkludFN0YXR1cywgMCk7CkBAIC0zOTU2LDYgKzM5MjMsMTggQEAKIAkJZWxzZQogCQkJbWRlbGF5KDEpOwogCisJCS8qCisJCSAqIENhbGwgZWFjaCBjdXJyZW50bHkgcmVnaXN0ZXJlZCBwcm90b2NvbCBJT0MgcmVzZXQgaGFuZGxlcgorCQkgKiB3aXRoIHByZS1yZXNldCBpbmRpY2F0aW9uLgorCQkgKiBOT1RFOiBJZiB3ZSdyZSBkb2luZyBfSU9DX0JSSU5HVVAsIHRoZXJlIGNhbiBiZSBubworCQkgKiBNcHRSZXNldEhhbmRsZXJzW10gcmVnaXN0ZXJlZCB5ZXQuCisJCSAqLworCQlmb3IgKGNiX2lkeCA9IE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUy0xOyBjYl9pZHg7IGNiX2lkeC0tKSB7CisJCQlpZiAoTXB0UmVzZXRIYW5kbGVyc1tjYl9pZHhdKQorCQkJCSgqKE1wdFJlc2V0SGFuZGxlcnNbY2JfaWR4XSkpKGlvYywKKwkJCQkJCU1QVF9JT0NfUFJFX1JFU0VUKTsKKwkJfQorCiAJCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDYwOyBjb3VudCArKykgewogCQkJZG9vcmJlbGwgPSBDSElQUkVHX1JFQUQzMigmaW9jLT5jaGlwLT5Eb29yYmVsbCk7CiAJCQlkb29yYmVsbCAmPSBNUElfSU9DX1NUQVRFX01BU0s7CkBAIC00MDUyLDI1ICs0MDMxLDE1IEBACiAJCSAqIE5PVEU6IElmIHdlJ3JlIGRvaW5nIF9JT0NfQlJJTkdVUCwgdGhlcmUgY2FuIGJlIG5vCiAJCSAqIE1wdFJlc2V0SGFuZGxlcnNbXSByZWdpc3RlcmVkIHlldC4KIAkJICovCi0JCXsKLQkJCXU4CSBjYl9pZHg7Ci0JCQlpbnQJIHIgPSAwOwotCi0JCQlmb3IgKGNiX2lkeCA9IE1QVF9NQVhfUFJPVE9DT0xfRFJJVkVSUy0xOyBjYl9pZHg7IGNiX2lkeC0tKSB7Ci0JCQkJaWYgKE1wdFJlc2V0SGFuZGxlcnNbY2JfaWR4XSkgewotCQkJCQlkcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCi0JCQkJCQkiQ2FsbGluZyBJT0MgcHJlX3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAotCQkJCQkJaW9jLT5uYW1lLCBjYl9pZHgpKTsKLQkJCQkJciArPSBtcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwgaW9jLCBNUFRfSU9DX1BSRV9SRVNFVCk7Ci0JCQkJCWlmIChpb2MtPmFsdF9pb2MpIHsKLQkJCQkJCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKLQkJCQkJCQkiQ2FsbGluZyBhbHQtJXMgcHJlX3Jlc2V0IGhhbmRsZXIgIyVkXG4iLAotCQkJCQkJCWlvYy0+bmFtZSwgaW9jLT5hbHRfaW9jLT5uYW1lLCBjYl9pZHgpKTsKLQkJCQkJCXIgKz0gbXB0X3NpZ25hbF9yZXNldChjYl9pZHgsIGlvYy0+YWx0X2lvYywgTVBUX0lPQ19QUkVfUkVTRVQpOwotCQkJCQl9CisJCWZvciAoY2JfaWR4ID0gTVBUX01BWF9QUk9UT0NPTF9EUklWRVJTLTE7IGNiX2lkeDsgY2JfaWR4LS0pIHsKKwkJCWlmIChNcHRSZXNldEhhbmRsZXJzW2NiX2lkeF0pIHsKKwkJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwKKwkJCQkJaW9jLCBNUFRfSU9DX1BSRV9SRVNFVCk7CisJCQkJaWYgKGlvYy0+YWx0X2lvYykgeworCQkJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwKKwkJCQkJaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BSRV9SRVNFVCk7CiAJCQkJfQogCQkJfQotCQkJLyogRklYTUU/ICBFeGFtaW5lIHJlc3VsdHMgaGVyZT8gKi8KIAkJfQogCiAJCWlmIChpb2MtPmNhY2hlZF9mdykKQEAgLTY5NTYsNyArNjkyNSw3IEBACiBpbnQKIG1wdF9IYXJkUmVzZXRIYW5kbGVyKE1QVF9BREFQVEVSICppb2MsIGludCBzbGVlcEZsYWcpCiB7Ci0JaW50CQkgcmM7CisJaW50CSByYzsKIAl1OAkgY2JfaWR4OwogCXVuc2lnbmVkIGxvbmcJIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcJIHRpbWVfY291bnQ7CkBAIC02OTgyLDggKzY5NTEsNiBAQAogCQlpb2MtPmFsdF9pb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcyA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT50YXNrbWdtdF9sb2NrLCBmbGFncyk7CiAKLQkvKiBGSVhNRTogSWYgZG9faW9jX3JlY292ZXJ5IGZhaWxzLCByZXBlYXQuLi4uCi0JICovCiAKIAkvKiBUaGUgU0NTSSBkcml2ZXIgbmVlZHMgdG8gYWRqdXN0IHRpbWVvdXRzIG9uIGFsbCBjdXJyZW50CiAJICogY29tbWFuZHMgcHJpb3IgdG8gdGhlIGRpYWdub3N0aWMgcmVzZXQgYmVpbmcgaXNzdWVkLgpAQCAtNzAyMCw2ICs2OTg3LDE1IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+dGFza21nbXRfbG9jaywgZmxhZ3MpOwogCisJZm9yIChjYl9pZHggPSBNUFRfTUFYX1BST1RPQ09MX0RSSVZFUlMtMTsgY2JfaWR4OyBjYl9pZHgtLSkgeworCQlpZiAoTXB0UmVzZXRIYW5kbGVyc1tjYl9pZHhdKSB7CisJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwgaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOworCQkJaWYgKGlvYy0+YWx0X2lvYykKKwkJCQltcHRfc2lnbmFsX3Jlc2V0KGNiX2lkeCwKKwkJCQkJaW9jLT5hbHRfaW9jLCBNUFRfSU9DX1BPU1RfUkVTRVQpOworCQl9CisJfQorCiAJZHRtcHJpbnRrKGlvYywKIAkgICAgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UCiAJCSJIYXJkUmVzZXRIYW5kbGVyOiBjb21wbGV0ZWQgKCVkIHNlY29uZHMpOiAlc1xuIiwgaW9jLT5uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCAxYzg1MTRkLi44ZGQ0ZDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNzYsOCArNzYsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA4ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTAiCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4wOSIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjEyIgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTIiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCkBAIC0xNTcsOCArMTU3LDkgQEAKIC8qCiAgKglUcnkgdG8ga2VlcCB0aGVzZSBhdCAyXk4tMQogICovCi0jZGVmaW5lIE1QVF9GQ19DQU5fUVVFVUUJMTI3CisjZGVmaW5lIE1QVF9GQ19DQU5fUVVFVUUJMTAyNAogI2RlZmluZSBNUFRfU0NTSV9DQU5fUVVFVUUJMTI3CisjZGVmaW5lIE1QVF9TQVNfQ0FOX1FVRVVFCTEyNwogCiAvKgogICogU2V0IHRoZSBNQVhfU0dFIHZhbHVlIGJhc2VkIG9uIHVzZXIgaW5wdXQuCkBAIC04NzksMjMgKzg4MCw5IEBACiAKIHR5cGVkZWYgc3RydWN0IF9NUFRfU0NTSV9IT1NUIHsKIAlNUFRfQURBUFRFUgkJICppb2M7Ci0JaW50CQkJICBwb3J0OwotCXUzMgkJCSAgcGFkMDsKLQlNUFRfTE9DQUxfUkVQTFkJCSAqcExvY2FsOwkJLyogdXNlZCBmb3IgaW50ZXJuYWwgY29tbWFuZHMgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdAkgIHRpbWVyOwotCQkvKiBQb29sIG9mIG1lbW9yeSBmb3IgaG9sZGluZyBTQ3BudHMgYmVmb3JlIGRvaW5nCi0JCSAqIE9TIGNhbGxiYWNrcy4gZnJlZVEgaXMgdGhlIGZyZWUgcG9vbC4KLQkJICovCi0JdTgJCQkgIG5lZ29OdnJhbTsJCS8qIERWIGRpc2FibGVkLCBuZWdvIE5WUkFNICovCi0JdTgJCQkgIHBhZDE7Ci0JdTgJCQkgIHJzdmRbMl07Ci0JTVBUX0ZSQU1FX0hEUgkJICpjbWRQdHI7CQkvKiBQdHIgdG8gbm9uT1MgcmVxdWVzdCAqLwotCXN0cnVjdCBzY3NpX2NtbmQJICphYm9ydFNDcG50OwotCU1QVF9MT0NBTF9SRVBMWQkJICBsb2NhbFJlcGx5OwkJLyogaW50ZXJuYWwgY21kIHJlcGx5IHN0cnVjdCAqLwogCXVzaG9ydAkJCSAgc2VsX3RpbWVvdXRbTVBUX01BWF9GQ19ERVZJQ0VTXTsKIAljaGFyIAkJCSAgKmluZm9fa2J1ZjsKIAlsb25nCQkJICBsYXN0X3F1ZXVlX2Z1bGw7Ci0JdTE2CQkJICB0bV9pb2NzdGF0dXM7CiAJdTE2CQkJICBzcGlfcGVuZGluZzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSAgdGFyZ2V0X3Jlc2V0X2xpc3Q7CiB9IE1QVF9TQ1NJX0hPU1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggZTYxZGYxMy4uZWJmNmFlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtMTI4OCwyNSArMTI4OCw2IEBACiAJZHByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVCAiU2NzaUxvb2t1cCBAICVwXG4iLAogCQkgaW9jLT5uYW1lLCBpb2MtPlNjc2lMb29rdXApKTsKIAotCS8qIENsZWFyIHRoZSBUTSBmbGFncwotCSAqLwotCWhkLT5hYm9ydFNDcG50ID0gTlVMTDsKLQotCS8qIENsZWFyIHRoZSBwb2ludGVyIHVzZWQgdG8gc3RvcmUKLQkgKiBzaW5nbGUtdGhyZWFkZWQgY29tbWFuZHMsIGkuZS4sIHRob3NlCi0JICogaXNzdWVkIGR1cmluZyBhIGJ1cyBzY2FuLCBkdiBhbmQKLQkgKiBjb25maWd1cmF0aW9uIHBhZ2VzLgotCSAqLwotCWhkLT5jbWRQdHIgPSBOVUxMOwotCi0JLyogSW5pdGlhbGl6ZSB0aGlzIFNDU0kgSG9zdHMnIHRpbWVycwotCSAqIFRvIHVzZSwgc2V0IHRoZSB0aW1lciBleHBpcmVzIGZpZWxkCi0JICogYW5kIGFkZF90aW1lcgotCSAqLwotCWluaXRfdGltZXIoJmhkLT50aW1lcik7Ci0JaGQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaGQ7Ci0JaGQtPnRpbWVyLmZ1bmN0aW9uID0gbXB0c2NzaWhfdGltZXJfZXhwaXJlZDsKLQogCWhkLT5sYXN0X3F1ZXVlX2Z1bGwgPSAwOwogCiAJc2gtPnRyYW5zcG9ydHQgPSBtcHRmY190cmFuc3BvcnRfdGVtcGxhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYwppbmRleCBhOWU0OGUyLi5iYzJlYzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKQEAgLTc5NSw3ICs3OTUsNyBAQAogCQkJSU9DX0FORF9ORVRERVZfTkFNRVNfc19zKGRldiksCiAJCQlsZTMyX3RvX2NwdShwU2ltcGxlLT5GbGFnc0xlbmd0aCkpKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNhcy5jCmluZGV4IDU1ZmYyNTIuLjgzODczZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2FzLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzYXMuYwpAQCAtNzIsNiArNzIsNyBAQAogICovCiAjZGVmaW5lIE1QVFNBU19SQUlEX0NIQU5ORUwJMQogCisjZGVmaW5lIFNBU19DT05GSUdfUEFHRV9USU1FT1VUCQkzMAogTU9EVUxFX0FVVEhPUihNT0RVTEVBVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKG15X05BTUUpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMzI0LDcgKzMyNSw2IEBACiB7CiAJc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50LCAqbmV4dDsKIAlzdHJ1Y3QgbXB0c2FzX3RhcmdldF9yZXNldF9ldmVudCAqdGFyZ2V0X3Jlc2V0X2xpc3QsICpuOwotCXU4CWZsdXNoX3E7CiAJTVBUX1NDU0lfSE9TVAkqaGQgPSBzaG9zdF9wcml2KGlvYy0+c2gpOwogCiAJLyogZmx1c2ggdGhlIHRhcmdldF9yZXNldF9saXN0ICovCkBAIC0zNDQsMTUgKzM0NCwxMCBAQAogCSAgICAgIWlvYy0+ZndfZXZlbnRfcSB8fCBpbl9pbnRlcnJ1cHQoKSkKIAkJcmV0dXJuOwogCi0JZmx1c2hfcSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ3X2V2ZW50LCBuZXh0LCAmaW9jLT5md19ldmVudF9saXN0LCBsaXN0KSB7CiAJCWlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZmd19ldmVudC0+d29yaykpCiAJCQltcHRzYXNfZnJlZV9md19ldmVudChpb2MsIGZ3X2V2ZW50KTsKLQkJZWxzZQotCQkJZmx1c2hfcSA9IDE7CiAJfQotCWlmIChmbHVzaF9xKQotCQlmbHVzaF93b3JrcXVldWUoaW9jLT5md19ldmVudF9xKTsKIH0KIAogCkBAIC02NjEsNyArNjU2LDcgQEAKIAljZmcucGFnZUFkZHIgPSBzdGFyZ2V0LT5pZDsKIAljZmcuY2ZnaGRyLmhkciA9ICZoZHI7CiAJY2ZnLmFjdGlvbiA9IE1QSV9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCWlmIChtcHRfY29uZmlnKGlvYywgJmNmZykgIT0gMCkKIAkJZ290byBvdXQ7CkBAIC04NTEsNyArODQ2LDEzIEBACiAJCXBvcnRfZGV0YWlscy0+bnVtX3BoeXMtLTsKIAkJcG9ydF9kZXRhaWxzLT5waHlfYml0bWFzayAmPSB+ICgxIDw8IHBoeV9pbmZvLT5waHlfaWQpOwogCQltZW1zZXQoJnBoeV9pbmZvLT5hdHRhY2hlZCwgMCwgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOwotCQlzYXNfcG9ydF9kZWxldGVfcGh5KHBvcnRfZGV0YWlscy0+cG9ydCwgcGh5X2luZm8tPnBoeSk7CisJCWlmIChwaHlfaW5mby0+cGh5KSB7CisJCQlkZXZ0cHJpbnRrKGlvYywgZGV2X3ByaW50ayhLRVJOX0RFQlVHLAorCQkJCSZwaHlfaW5mby0+cGh5LT5kZXYsIE1ZSU9DX3NfRk1UCisJCQkJImRlbGV0ZSBwaHkgJWQsIHBoeS1vYmogKDB4JXApXG4iLCBpb2MtPm5hbWUsCisJCQkJcGh5X2luZm8tPnBoeV9pZCwgcGh5X2luZm8tPnBoeSkpOworCQkJc2FzX3BvcnRfZGVsZXRlX3BoeShwb3J0X2RldGFpbHMtPnBvcnQsIHBoeV9pbmZvLT5waHkpOworCQl9CiAJCXBoeV9pbmZvLT5wb3J0X2RldGFpbHMgPSBOVUxMOwogCX0KIApAQCAtMTI3Miw3ICsxMjczLDYgQEAKIAkJfQogCQltcHRzYXNfY2xlYW51cF9md19ldmVudF9xKGlvYyk7CiAJCW1wdHNhc19xdWV1ZV9yZXNjYW4oaW9jKTsKLQkJbXB0c2FzX2Z3X2V2ZW50X29uKGlvYyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKIAlpZiAoZXJyb3IpCkBAIC0xNTkyLDYgKzE1OTIsNyBAQAogCQltcHRzYXNfc2Nhbl9zYXNfdG9wb2xvZ3koaW9jKTsKIAkJaW9jLT5pbl9yZXNjYW4gPSAwOwogCQltcHRzYXNfZnJlZV9md19ldmVudChpb2MsIGZ3X2V2ZW50KTsKKwkJbXB0c2FzX2Z3X2V2ZW50X29uKGlvYyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE4OTEsNyArMTg5Miw3IEBACiAJLmVoX2J1c19yZXNldF9oYW5kbGVyCQk9IG1wdHNjc2loX2J1c19yZXNldCwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyCQk9IG1wdHNjc2loX2hvc3RfcmVzZXQsCiAJLmJpb3NfcGFyYW0JCQk9IG1wdHNjc2loX2Jpb3NfcGFyYW0sCi0JLmNhbl9xdWV1ZQkJCT0gTVBUX0ZDX0NBTl9RVUVVRSwKKwkuY2FuX3F1ZXVlCQkJPSBNUFRfU0FTX0NBTl9RVUVVRSwKIAkudGhpc19pZAkJCT0gLTEsCiAJLnNnX3RhYmxlc2l6ZQkJCT0gTVBUX1NDU0lfU0dfREVQVEgsCiAJLm1heF9zZWN0b3JzCQkJPSA4MTkyLApAQCAtMTkyNiw3ICsxOTI3LDcgQEAKIAljZmcucGFnZUFkZHIgPSBwaHktPmlkZW50aWZ5LnBoeV9pZGVudGlmaWVyOwogCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKIAljZmcuZGlyID0gMDsgICAgLyogcmVhZCAqLwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOwogCWlmIChlcnJvcikKQEAgLTIyNzgsNyArMjI3OSw3IEBACiAJY2ZnLnBhZ2VBZGRyID0gMDsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKIAlpZiAoZXJyb3IpCkBAIC0yMzQ5LDcgKzIzNTAsNyBAQAogCiAJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7Ci0JY2ZnLnRpbWVvdXQgPSAxMDsKKwljZmcudGltZW91dCA9IFNBU19DT05GSUdfUEFHRV9USU1FT1VUOwogCWNmZy5jZmdoZHIuZWhkci0+UGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX0VYVEVOREVEOwogCWNmZy5jZmdoZHIuZWhkci0+RXh0UGFnZVR5cGUgPSBNUElfQ09ORklHX0VYVFBBR0VUWVBFX1NBU19JT19VTklUOwogCWNmZy5jZmdoZHIuZWhkci0+UGFnZVZlcnNpb24gPSBNUElfU0FTSU9VTklUUEFHRTFfUEFHRVZFUlNJT047CkBAIC0yNDExLDcgKzI0MTIsNyBAQAogCiAJY2ZnLmNmZ2hkci5laGRyID0gJmhkcjsKIAljZmcuZGlyID0gMDsJLyogcmVhZCAqLwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCS8qIEdldCBQaHkgUGcgMCBmb3IgZWFjaCBQaHkuICovCiAJY2ZnLnBoeXNBZGRyID0gLTE7CkBAIC0yNDc5LDcgKzI0ODAsNyBAQAogCWNmZy5waHlzQWRkciA9IC0xOwogCWNmZy5hY3Rpb24gPSBNUElfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKIAljZmcuZGlyID0gMDsJLyogcmVhZCAqLwotCWNmZy50aW1lb3V0ID0gMTA7CisJY2ZnLnRpbWVvdXQgPSBTQVNfQ09ORklHX1BBR0VfVElNRU9VVDsKIAogCW1lbXNldChkZXZpY2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtcHRzYXNfZGV2aW5mbykpOwogCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOwpAQCAtMjU1NCw3ICsyNTU1LDcgQEAKIAljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAltZW1zZXQocG9ydF9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1wdHNhc19wb3J0aW5mbykpOwogCWVycm9yID0gbXB0X2NvbmZpZyhpb2MsICZjZmcpOwpAQCAtMjYzNSw3ICsyNjM2LDcgQEAKIAljZmcucGFnZUFkZHIgPSBmb3JtICsgZm9ybV9zcGVjaWZpYzsKIAljZmcuYWN0aW9uID0gTVBJX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJY2ZnLmRpciA9IDA7CS8qIHJlYWQgKi8KLQljZmcudGltZW91dCA9IDEwOworCWNmZy50aW1lb3V0ID0gU0FTX0NPTkZJR19QQUdFX1RJTUVPVVQ7CiAKIAllcnJvciA9IG1wdF9jb25maWcoaW9jLCAmY2ZnKTsKIAlpZiAoZXJyb3IpCkBAIC0zMzA3LDYgKzMzMDgsNyBAQAogCWV4cGFuZGVyX2RhdGEgPSAoTXBpRXZlbnREYXRhU2FzRXhwYW5kZXJTdGF0dXNDaGFuZ2VfdCAqKQogCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAltZW1jcHkoJnNhc19hZGRyZXNzLCAmZXhwYW5kZXJfZGF0YS0+U0FTQWRkcmVzcywgc2l6ZW9mKF9fbGU2NCkpOworCXNhc19hZGRyZXNzID0gbGU2NF90b19jcHUoc2FzX2FkZHJlc3MpOwogCXBvcnRfaW5mbyA9IG1wdHNhc19maW5kX3BvcnRpbmZvX2J5X3Nhc19hZGRyZXNzKGlvYywgc2FzX2FkZHJlc3MpOwogCiAJaWYgKGV4cGFuZGVyX2RhdGEtPlJlYXNvbkNvZGUgPT0gTVBJX0VWRU5UX1NBU19FWFBfUkNfQURERUQpIHsKQEAgLTQ3NjAsMTAgKzQ3NjIsOSBAQAogCiAJLyogc2V0IDE2IGJ5dGUgY2RiJ3MgKi8KIAlzaC0+bWF4X2NtZF9sZW4gPSAxNjsKLQotCXNoLT5tYXhfaWQgPSBpb2MtPnBmYWN0c1swXS5Qb3J0U0NTSUlEOworCXNoLT5jYW5fcXVldWUgPSBtaW5fdChpbnQsIGlvYy0+cmVxX2RlcHRoIC0gMTAsIHNoLT5jYW5fcXVldWUpOworCXNoLT5tYXhfaWQgPSAtMTsKIAlzaC0+bWF4X2x1biA9IG1heF9sdW47Ci0KIAlzaC0+dHJhbnNwb3J0dCA9IG1wdHNhc190cmFuc3BvcnRfdGVtcGxhdGU7CiAKIAkvKiBSZXF1aXJlZCBlbnRyeS4KQEAgLTQ4MjEsMjUgKzQ4MjIsNiBAQAogCWRwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQgIlNjc2lMb29rdXAgQCAlcFxuIiwKIAkJIGlvYy0+bmFtZSwgaW9jLT5TY3NpTG9va3VwKSk7CiAKLQkvKiBDbGVhciB0aGUgVE0gZmxhZ3MKLQkgKi8KLQloZC0+YWJvcnRTQ3BudCA9IE5VTEw7Ci0KLQkvKiBDbGVhciB0aGUgcG9pbnRlciB1c2VkIHRvIHN0b3JlCi0JICogc2luZ2xlLXRocmVhZGVkIGNvbW1hbmRzLCBpLmUuLCB0aG9zZQotCSAqIGlzc3VlZCBkdXJpbmcgYSBidXMgc2NhbiwgZHYgYW5kCi0JICogY29uZmlndXJhdGlvbiBwYWdlcy4KLQkgKi8KLQloZC0+Y21kUHRyID0gTlVMTDsKLQotCS8qIEluaXRpYWxpemUgdGhpcyBTQ1NJIEhvc3RzJyB0aW1lcnMKLQkgKiBUbyB1c2UsIHNldCB0aGUgdGltZXIgZXhwaXJlcyBmaWVsZAotCSAqIGFuZCBhZGRfdGltZXIKLQkgKi8KLQlpbml0X3RpbWVyKCZoZC0+dGltZXIpOwotCWhkLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhkOwotCWhkLT50aW1lci5mdW5jdGlvbiA9IG1wdHNjc2loX3RpbWVyX2V4cGlyZWQ7Ci0KIAlpb2MtPnNhc19kYXRhLnB0Q2xlYXIgPSBtcHRfcHRfY2xlYXI7CiAKIAloZC0+bGFzdF9xdWV1ZV9mdWxsID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwppbmRleCA4NDQwZjc4Zi4uYzI5NTc4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYwpAQCAtNjI4LDYgKzYyOCwxNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwlpZiAoaW9jLT5idXNfdHlwZSA9PSBTQVMpIHsKKwkJVmlydERldmljZSAqdmRldmljZSA9IHNjLT5kZXZpY2UtPmhvc3RkYXRhOworCisJCWlmICghdmRldmljZSB8fCAhdmRldmljZS0+dnRhcmdldCB8fAorCQkgICAgdmRldmljZS0+dnRhcmdldC0+ZGVsZXRlZCkgeworCQkJc2MtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKIAlzYy0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiAJc2MtPnJlc3VsdCA9IERJRF9PSyA8PCAxNjsJCS8qIFNldCBkZWZhdWx0IHJlcGx5IGFzIE9LICovCiAJcFNjc2lSZXEgPSAoU0NTSUlPUmVxdWVzdF90ICopIG1mOwpAQCAtNjg5LDYgKzY5OSw3IEBACiAKIAkJc3dpdGNoKHN0YXR1cykgewogCQljYXNlIE1QSV9JT0NTVEFUVVNfQlVTWToJCQkvKiAweDAwMDIgKi8KKwkJY2FzZSBNUElfSU9DU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM6CS8qIDB4MDAwNiAqLwogCQkJLyogQ0hFQ0tNRSEKIAkJCSAqIE1heWJlOiBEUklWRVJfQlVTWSB8IFNVR0dFU1RfUkVUUlkgfCBESURfU09GVF9FUlJPUiAocmV0cnkpCiAJCQkgKiBCdXQgbm90OiBESURfQlVTX0JVU1kgbGVzdCBvbmUgcmlzawpAQCAtODcyLDcgKzg4Myw2IEBACiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19JTlZBTElEX1NHTDoJCQkvKiAweDAwMDMgKi8KIAkJY2FzZSBNUElfSU9DU1RBVFVTX0lOVEVSTkFMX0VSUk9SOgkJLyogMHgwMDA0ICovCiAJCWNhc2UgTVBJX0lPQ1NUQVRVU19SRVNFUlZFRDoJCQkvKiAweDAwMDUgKi8KLQkJY2FzZSBNUElfSU9DU1RBVFVTX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM6CS8qIDB4MDAwNiAqLwogCQljYXNlIE1QSV9JT0NTVEFUVVNfSU5WQUxJRF9GSUVMRDoJCS8qIDB4MDAwNyAqLwogCQljYXNlIE1QSV9JT0NTVEFUVVNfSU5WQUxJRF9TVEFURToJCS8qIDB4MDAwOCAqLwogCQljYXNlIE1QSV9JT0NTVEFUVVNfU0NTSV9JT19EQVRBX0VSUk9SOgkJLyogMHgwMDQ2ICovCkBAIC04OTIsNyArOTAyLDcgQEAKICNlbmRpZgogCiAJfSAvKiBlbmQgb2YgYWRkcmVzcyByZXBseSBjYXNlICovCi0KK291dDoKIAkvKiBVbm1hcCB0aGUgRE1BIGJ1ZmZlcnMsIGlmIGFueS4gKi8KIAlzY3NpX2RtYV91bm1hcChzYyk7CiAKQEAgLTE3MjksOSArMTczOSw2IEBACiAJICovCiAJbWYgPSBNUFRfSU5ERVhfMl9NRlBUUihpb2MsIHNjcG50X2lkeCk7CiAJY3R4MmFib3J0ID0gbWYtPnUuZnJhbWUuaHdoZHIubXNnY3R4dS5Nc2dDb250ZXh0OwotCi0JaGQtPmFib3J0U0NwbnQgPSBTQ3BudDsKLQogCXJldHZhbCA9IG1wdHNjc2loX0lzc3VlVGFza01nbXQoaGQsCiAJCQkgTVBJX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLAogCQkJIHZkZXZpY2UtPnZ0YXJnZXQtPmNoYW5uZWwsCkBAIC0yMjkzLDcgKzIzMDAsMTAgQEAKIAkJZWxzZQogCQkJbWF4X2RlcHRoID0gTVBUX1NDU0lfQ01EX1BFUl9ERVZfTE9XOwogCX0gZWxzZQotCQltYXhfZGVwdGggPSBNUFRfU0NTSV9DTURfUEVSX0RFVl9ISUdIOworCQkgbWF4X2RlcHRoID0gaW9jLT5zaC0+Y2FuX3F1ZXVlOworCisJaWYgKCFzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQltYXhfZGVwdGggPSAxOwogCiAJaWYgKHFkZXB0aCA+IG1heF9kZXB0aCkKIAkJcWRlcHRoID0gbWF4X2RlcHRoOwpAQCAtMjYyNyw1MCArMjYzNyw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09Ki8KLS8qCW1wdHNjc2loX3RpbWVyX2V4cGlyZWQgLSBDYWxsIGJhY2sgZm9yIHRpbWVyIHByb2Nlc3MuCi0gKglVc2VkIG9ubHkgZm9yIGR2IGZ1bmN0aW9uYWxpdHkuCi0gKglAZGF0YTogUG9pbnRlciB0byBNUFRfU0NTSV9IT1NUIHJlY2FzdCBhcyBhbiB1bnNpZ25lZCBsb25nCi0gKgotICovCi12b2lkCi1tcHRzY3NpaF90aW1lcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlNUFRfU0NTSV9IT1NUICpoZCA9IChNUFRfU0NTSV9IT1NUICopIGRhdGE7Ci0JTVBUX0FEQVBURVIgCSppb2MgPSBoZC0+aW9jOwotCi0JZGR2cHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UICJUaW1lciBFeHBpcmVkISBDbWQgJXBcbiIsIGlvYy0+bmFtZSwgaGQtPmNtZFB0cikpOwotCi0JaWYgKGhkLT5jbWRQdHIpIHsKLQkJTVBJSGVhZGVyX3QgKmNtZCA9IChNUElIZWFkZXJfdCAqKWhkLT5jbWRQdHI7Ci0KLQkJaWYgKGNtZC0+RnVuY3Rpb24gPT0gTVBJX0ZVTkNUSU9OX1NDU0lfSU9fUkVRVUVTVCkgewotCQkJLyogRGVzaXJlIHRvIGlzc3VlIGEgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QgaGVyZS4KLQkJCSAqIFRNIHJlcXVlc3RzIE1VU1QgYmUgc2luZ2xlIHRocmVhZGVkLgotCQkJICogSWYgb2xkIGVoIGNvZGUgYW5kIG5vIFRNIGN1cnJlbnQsIGlzc3VlIHJlcXVlc3QuCi0JCQkgKiBJZiBuZXcgZWggY29kZSwgZG8gbm90aGluZy4gV2FpdCBmb3IgT1MgY21kIHRpbWVvdXQKLQkJCSAqCWZvciBidXMgcmVzZXQuCi0JCQkgKi8KLQkJfSBlbHNlIHsKLQkJCS8qIFBlcmZvcm0gYSBGVyByZWxvYWQgKi8KLQkJCWlmIChtcHRfSGFyZFJlc2V0SGFuZGxlcihpb2MsIE5PX1NMRUVQKSA8IDApIHsKLQkJCQlwcmludGsoTVlJT0Nfc19XQVJOX0ZNVCAiRmlybXdhcmUgUmVsb2FkIEZBSUxFRCFcbiIsIGlvYy0+bmFtZSk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBUaGlzIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KLQkJcHJpbnRrKE1ZSU9DX3NfV0FSTl9GTVQgIk51bGwgY21kUHRyISEhIVxuIiwgaW9jLT5uYW1lKTsKLQl9Ci0KLQkvKiBObyBtb3JlIHByb2Nlc3NpbmcuCi0JICogVE0gY2FsbCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdCBmb3IgU0NTSSBUTSBNYW5hZ2VtZW50LgotCSAqIFRoZSBGVyB3aWxsIHJlcGx5IHRvIGFsbCBvdXRzdGFuZGluZyBjb21tYW5kcywgY2FsbGJhY2sgd2lsbCBmaW5pc2ggY2xlYW51cC4KLQkgKiBIYXJkIHJlc2V0IGNsZWFuLXVwIHdpbGwgZnJlZSBhbGwgcmVzb3VyY2VzLgotCSAqLwotCWRkdnByaW50ayhpb2MsIHByaW50ayhNWUlPQ19zX0RFQlVHX0ZNVCAiVGltZXIgRXhwaXJlZCBDb21wbGV0ZSFcbiIsIGlvYy0+bmFtZSkpOwotCi0JcmV0dXJuOwotfQogCiAvKioKICAqCW1wdHNjc2loX2dldF9jb21wbGV0aW9uX2NvZGUgLQpAQCAtMzI2NSw2ICszMjMxLDUgQEAKIEVYUE9SVF9TWU1CT0wobXB0c2NzaWhfZXZlbnRfcHJvY2Vzcyk7CiBFWFBPUlRfU1lNQk9MKG1wdHNjc2loX2lvY19yZXNldCk7CiBFWFBPUlRfU1lNQk9MKG1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCk7Ci1FWFBPUlRfU1lNQk9MKG1wdHNjc2loX3RpbWVyX2V4cGlyZWQpOwogCiAvKj0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmgKaW5kZXggZWIzZjY3Ny4uZTBiMzNlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5oCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguaApAQCAtMTI5LDcgKzEyOSw2IEBACiBleHRlcm4gaW50IG1wdHNjc2loX2V2ZW50X3Byb2Nlc3MoTVBUX0FEQVBURVIgKmlvYywgRXZlbnROb3RpZmljYXRpb25SZXBseV90ICpwRXZSZXBseSk7CiBleHRlcm4gaW50IG1wdHNjc2loX2lvY19yZXNldChNUFRfQURBUFRFUiAqaW9jLCBpbnQgcG9zdF9yZXNldCk7CiBleHRlcm4gaW50IG1wdHNjc2loX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpOwotZXh0ZXJuIHZvaWQgbXB0c2NzaWhfdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpOwogZXh0ZXJuIHU4IG1wdHNjc2loX3JhaWRfaWRfdG9fbnVtKE1QVF9BREFQVEVSICppb2MsIHU4IGNoYW5uZWwsIHU4IGlkKTsKIGV4dGVybiBpbnQgbXB0c2NzaWhfaXNfcGh5c19kaXNrKE1QVF9BREFQVEVSICppb2MsIHU4IGNoYW5uZWwsIHU4IGlkKTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0c2NzaWhfaG9zdF9hdHRyc1tdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c3BpLmMKaW5kZXggYzViODA4Zi4uNjlmNDI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzcGkuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNwaS5jCkBAIC0xNDcyLDI4ICsxNDcyLDcgQEAKIAlkcHJpbnRrKGlvYywgcHJpbnRrKE1ZSU9DX3NfREVCVUdfRk1UICJTY3NpTG9va3VwIEAgJXBcbiIsCiAJCSBpb2MtPm5hbWUsIGlvYy0+U2NzaUxvb2t1cCkpOwogCi0JLyogQ2xlYXIgdGhlIFRNIGZsYWdzCi0JICovCi0JaGQtPmFib3J0U0NwbnQgPSBOVUxMOwotCi0JLyogQ2xlYXIgdGhlIHBvaW50ZXIgdXNlZCB0byBzdG9yZQotCSAqIHNpbmdsZS10aHJlYWRlZCBjb21tYW5kcywgaS5lLiwgdGhvc2UKLQkgKiBpc3N1ZWQgZHVyaW5nIGEgYnVzIHNjYW4sIGR2IGFuZAotCSAqIGNvbmZpZ3VyYXRpb24gcGFnZXMuCi0JICovCi0JaGQtPmNtZFB0ciA9IE5VTEw7Ci0KLQkvKiBJbml0aWFsaXplIHRoaXMgU0NTSSBIb3N0cycgdGltZXJzCi0JICogVG8gdXNlLCBzZXQgdGhlIHRpbWVyIGV4cGlyZXMgZmllbGQKLQkgKiBhbmQgYWRkX3RpbWVyCi0JICovCi0JaW5pdF90aW1lcigmaGQtPnRpbWVyKTsKLQloZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBoZDsKLQloZC0+dGltZXIuZnVuY3Rpb24gPSBtcHRzY3NpaF90aW1lcl9leHBpcmVkOwotCiAJaW9jLT5zcGlfZGF0YS5TYWZfVGUgPSBtcHRfc2FmX3RlOwotCi0JaGQtPm5lZ29OdnJhbSA9IE1QVF9TQ1NJQ0ZHX1VTRV9OVlJBTTsKIAlkZHZwcmludGsoaW9jLCBwcmludGsoTVlJT0Nfc19ERUJVR19GTVQKIAkJInNhZl90ZSAleFxuIiwKIAkJaW9jLT5uYW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCA2OGFiMzlkLi5kZjFmODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMjMzLDYgKzIzMywxOSBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaXNsMjkwMDMuCiAKK2NvbmZpZyBFUDkzWFhfUFdNCisJdHJpc3RhdGUgIkVQOTN4eCBQV00gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfRVA5M1hYCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBkZXZpY2UgZHJpdmVyIHN1cHBvcnQgZm9yIHRoZSBQV00gY2hhbm5lbHMKKwkgIG9uIHRoZSBDaXJydXMgRVA5M3h4IHByb2Nlc3NvcnMuICBUaGUgRVA5MzA3IGNoaXAgb25seSBoYXMgb25lCisJICBQV00gY2hhbm5lbCBhbGwgdGhlIG90aGVycyBoYXZlIHR3bywgdGhlIHNlY29uZCBjaGFubmVsIGlzIGFuCisJICBhbHRlcm5hdGUgZnVuY3Rpb24gb2YgdGhlIEVHUElPMTQgcGluLiAgQSBzeXNmcyBpbnRlcmZhY2UgaXMKKwkgIHByb3ZpZGVkIHRvIGNvbnRyb2wgdGhlIFBXTSBjaGFubmVscy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgZXA5M3h4X3B3bS4KKwogc291cmNlICJkcml2ZXJzL21pc2MvYzJwb3J0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9taXNjL2NiNzEwL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggMzZmNzMzYy4uZjk4MmQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogb2JqLSQoQ09ORklHX1NHSV9HUlUpCQkrPSBzZ2ktZ3J1Lwogb2JqLSQoQ09ORklHX0hQX0lMTykJCSs9IGhwaWxvLm8KIG9iai0kKENPTkZJR19JU0wyOTAwMykJCSs9IGlzbDI5MDAzLm8KK29iai0kKENPTkZJR19FUDkzWFhfUFdNKQkrPSBlcDkzeHhfcHdtLm8KIG9iai0kKENPTkZJR19DMlBPUlQpCQkrPSBjMnBvcnQvCiBvYmoteQkJCQkrPSBlZXByb20vCiBvYmoteQkJCQkrPSBjYjcxMC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYyBiL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYwppbmRleCAzNDg0NDNiLi43YjAzOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKKysrIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCkBAIC0zMywyNCArMzMsNDQgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgZW5jbG9zdXJlX2NsYXNzOwogCiAvKioKLSAqIGVuY2xvc3VyZV9maW5kIC0gZmluZCBhbiBlbmNsb3N1cmUgZ2l2ZW4gYSBkZXZpY2UKLSAqIEBkZXY6CXRoZSBkZXZpY2UgdG8gZmluZCBmb3IKKyAqIGVuY2xvc3VyZV9maW5kIC0gZmluZCBhbiBlbmNsb3N1cmUgZ2l2ZW4gYSBwYXJlbnQgZGV2aWNlCisgKiBAZGV2Ogl0aGUgcGFyZW50IHRvIG1hdGNoIGFnYWluc3QKKyAqIEBzdGFydDoJT3B0aW9uYWwgZW5jbG9zdXJlIGRldmljZSB0byBzdGFydCBmcm9tIChOVUxMIGlmIG5vbmUpCiAgKgotICogTG9va3MgdGhyb3VnaCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGVuY2xvc3VyZXMgdG8gc2VlCi0gKiBpZiBpdCBjYW4gZmluZCBhIG1hdGNoIGZvciBhIGRldmljZS4gIFJldHVybnMgTlVMTCBpZiBubwotICogZW5jbG9zdXJlIGlzIGZvdW5kLiBPYnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbmNsb3N1cmUgY2xhc3MKLSAqIGRldmljZSB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIHdpdGggZGV2aWNlX3B1dCgpLgorICogTG9va3MgdGhyb3VnaCB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGVuY2xvc3VyZXMgdG8gZmluZCBhbGwgdGhvc2UKKyAqIHdpdGggQGRldiBhcyBhIHBhcmVudC4gIFJldHVybnMgTlVMTCBpZiBubyBlbmNsb3N1cmUgaXMKKyAqIGZvdW5kLiBAc3RhcnQgY2FuIGJlIHVzZWQgYXMgYSBzdGFydGluZyBwb2ludCB0byBvYnRhaW4gbXVsdGlwbGUKKyAqIGVuY2xvc3VyZXMgcGVyIHBhcmVudCAoc2hvdWxkIGJlZ2luIHdpdGggTlVMTCBhbmQgdGhlbiBiZSBzZXQgdG8KKyAqIGVhY2ggcmV0dXJuZWQgZW5jbG9zdXJlIGRldmljZSkuIE9idGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlCisgKiBlbmNsb3N1cmUgY2xhc3MgZGV2aWNlIHdoaWNoIG11c3QgYmUgcmVsZWFzZWQgd2l0aCBkZXZpY2VfcHV0KCkuCisgKiBJZiBAc3RhcnQgaXMgbm90IE5VTEwsIGEgcmVmZXJlbmNlIG11c3QgYmUgdGFrZW4gb24gaXQgd2hpY2ggaXMKKyAqIHJlbGVhc2VkIGJlZm9yZSByZXR1cm5pbmcgKHRoaXMgYWxsb3dzIGEgbG9vcCB0aHJvdWdoIGFsbAorICogZW5jbG9zdXJlcyB0byBleGl0IHdpdGggb25seSB0aGUgcmVmZXJlbmNlIG9uIHRoZSBlbmNsb3N1cmUgb2YKKyAqIGludGVyZXN0IGhlbGQpLiAgTm90ZSB0aGF0IHRoZSBAZGV2IG1heSBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwKKyAqIGRldmljZSBob3VzaW5nIHRoZSBlbmNsb3N1cmUsIGluIHdoaWNoIGNhc2Ugbm8gaXRlcmF0aW9uIHZpYSBAc3RhcnQKKyAqIGlzIHJlcXVpcmVkLgogICovCi1zdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZW5jbG9zdXJlX2ZpbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVuY2xvc3VyZV9maW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKnN0YXJ0KQogewogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2OwogCiAJbXV0ZXhfbG9jaygmY29udGFpbmVyX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShlZGV2LCAmY29udGFpbmVyX2xpc3QsIG5vZGUpIHsKLQkJaWYgKGVkZXYtPmVkZXYucGFyZW50ID09IGRldikgewotCQkJZ2V0X2RldmljZSgmZWRldi0+ZWRldik7Ci0JCQltdXRleF91bmxvY2soJmNvbnRhaW5lcl9saXN0X2xvY2spOwotCQkJcmV0dXJuIGVkZXY7CisJZWRldiA9IGxpc3RfcHJlcGFyZV9lbnRyeShzdGFydCwgJmNvbnRhaW5lcl9saXN0LCBub2RlKTsKKwlpZiAoc3RhcnQpCisJCXB1dF9kZXZpY2UoJnN0YXJ0LT5lZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoZWRldiwgJmNvbnRhaW5lcl9saXN0LCBub2RlKSB7CisJCXN0cnVjdCBkZXZpY2UgKnBhcmVudCA9IGVkZXYtPmVkZXYucGFyZW50OworCQkvKiBwYXJlbnQgbWlnaHQgbm90IGJlIGltbWVkaWF0ZSwgc28gaXRlcmF0ZSB1cCB0bworCQkgKiB0aGUgcm9vdCBvZiB0aGUgdHJlZSBpZiBuZWNlc3NhcnkgKi8KKwkJd2hpbGUgKHBhcmVudCkgeworCQkJaWYgKHBhcmVudCA9PSBkZXYpIHsKKwkJCQlnZXRfZGV2aWNlKCZlZGV2LT5lZGV2KTsKKwkJCQltdXRleF91bmxvY2soJmNvbnRhaW5lcl9saXN0X2xvY2spOworCQkJCXJldHVybiBlZGV2OworCQkJfQorCQkJcGFyZW50ID0gcGFyZW50LT5wYXJlbnQ7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZjb250YWluZXJfbGlzdF9sb2NrKTsKQEAgLTI5NSw2ICszMTUsOSBAQAogCiAJY2RldiA9ICZlZGV2LT5jb21wb25lbnRbY29tcG9uZW50XTsKIAorCWlmIChjZGV2LT5kZXYgPT0gZGV2KQorCQlyZXR1cm4gLUVFWElTVDsKKwogCWlmIChjZGV2LT5kZXYpCiAJCWVuY2xvc3VyZV9yZW1vdmVfbGlua3MoY2Rldik7CiAKQEAgLTMxMiwxOSArMzM1LDI1IEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhbiBlcnJvci4KICAqCiAgKi8KLWludCBlbmNsb3N1cmVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwgaW50IGNvbXBvbmVudCkKK2ludCBlbmNsb3N1cmVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwgc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICpjZGV2OworCWludCBpOwogCi0JaWYgKCFlZGV2IHx8IGNvbXBvbmVudCA+PSBlZGV2LT5jb21wb25lbnRzKQorCWlmICghZWRldiB8fCAhZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNkZXYgPSAmZWRldi0+Y29tcG9uZW50W2NvbXBvbmVudF07Ci0KLQlkZXZpY2VfZGVsKCZjZGV2LT5jZGV2KTsKLQlwdXRfZGV2aWNlKGNkZXYtPmRldik7Ci0JY2Rldi0+ZGV2ID0gTlVMTDsKLQlyZXR1cm4gZGV2aWNlX2FkZCgmY2Rldi0+Y2Rldik7CisJZm9yIChpID0gMDsgaSA8IGVkZXYtPmNvbXBvbmVudHM7IGkrKykgeworCQljZGV2ID0gJmVkZXYtPmNvbXBvbmVudFtpXTsKKwkJaWYgKGNkZXYtPmRldiA9PSBkZXYpIHsKKwkJCWVuY2xvc3VyZV9yZW1vdmVfbGlua3MoY2Rldik7CisJCQlkZXZpY2VfZGVsKCZjZGV2LT5jZGV2KTsKKwkJCXB1dF9kZXZpY2UoZGV2KTsKKwkJCWNkZXYtPmRldiA9IE5VTEw7CisJCQlyZXR1cm4gZGV2aWNlX2FkZCgmY2Rldi0+Y2Rldik7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9ERVY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbmNsb3N1cmVfcmVtb3ZlX2RldmljZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lcDkzeHhfcHdtLmMgYi9kcml2ZXJzL21pc2MvZXA5M3h4X3B3bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNDY5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvZXA5M3h4X3B3bS5jCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICogIFNpbXBsZSBQV00gZHJpdmVyIGZvciBFUDkzWFgKKyAqCisgKgkoYykgQ29weXJpZ2h0IDIwMDkgIE1hdHRoaWV1IENyYXBldCA8bWNyYXBldEBnbWFpbC5jb20+CisgKgkoYykgQ29weXJpZ2h0IDIwMDkgIEggSGFydGxleSBTd2VldGVuIDxoc3dlZXRlbkB2aXNpb25lbmdyYXZlcnMuY29tPgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIEVQOTMwNyBoYXMgb25seSBvbmUgY2hhbm5lbDoKKyAqICAgIC0gUFdNT1VUCisgKgorICogIEVQOTMwMS8wMi8xMi8xNSBoYXZlIHR3byBjaGFubmVsczoKKyAqICAgIC0gUFdNT1VUCisgKiAgICAtIFBXTU9VVDEgKGFsdGVybmF0ZSBmdW5jdGlvbiBmb3IgRUdQSU8xNCkKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KKworI2RlZmluZSBFUDkzWFhfUFdNeF9URVJNX0NPVU5UCTB4MDAKKyNkZWZpbmUgRVA5M1hYX1BXTXhfRFVUWV9DWUNMRQkweDA0CisjZGVmaW5lIEVQOTNYWF9QV014X0VOQUJMRQkweDA4CisjZGVmaW5lIEVQOTNYWF9QV014X0lOVkVSVAkweDBDCisKKyNkZWZpbmUgRVA5M1hYX1BXTV9NQVhfQ09VTlQJMHhGRkZGCisKK3N0cnVjdCBlcDkzeHhfcHdtIHsKKwl2b2lkIF9faW9tZW0JKm1taW9fYmFzZTsKKwlzdHJ1Y3QgY2xrCSpjbGs7CisJdTMyCQlkdXR5X3BlcmNlbnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X3B3bV93cml0ZWwoc3RydWN0IGVwOTN4eF9wd20gKnB3bSwKKwkJdW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG9mZikKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBwd20tPm1taW9fYmFzZSArIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGVwOTN4eF9wd21fcmVhZGwoc3RydWN0IGVwOTN4eF9wd20gKnB3bSwKKwkJdW5zaWduZWQgaW50IG9mZikKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwocHdtLT5tbWlvX2Jhc2UgKyBvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X3B3bV93cml0ZV90YyhzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtLCB1MTYgdmFsdWUpCit7CisJZXA5M3h4X3B3bV93cml0ZWwocHdtLCB2YWx1ZSwgRVA5M1hYX1BXTXhfVEVSTV9DT1VOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IGVwOTN4eF9wd21fcmVhZF90YyhzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtKQoreworCXJldHVybiBlcDkzeHhfcHdtX3JlYWRsKHB3bSwgRVA5M1hYX1BXTXhfVEVSTV9DT1VOVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDkzeHhfcHdtX3dyaXRlX2RjKHN0cnVjdCBlcDkzeHhfcHdtICpwd20sIHUxNiB2YWx1ZSkKK3sKKwllcDkzeHhfcHdtX3dyaXRlbChwd20sIHZhbHVlLCBFUDkzWFhfUFdNeF9EVVRZX0NZQ0xFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVwOTN4eF9wd21fZW5hYmxlKHN0cnVjdCBlcDkzeHhfcHdtICpwd20pCit7CisJZXA5M3h4X3B3bV93cml0ZWwocHdtLCAweDEsIEVQOTNYWF9QV014X0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcDkzeHhfcHdtX2Rpc2FibGUoc3RydWN0IGVwOTN4eF9wd20gKnB3bSkKK3sKKwllcDkzeHhfcHdtX3dyaXRlbChwd20sIDB4MCwgRVA5M1hYX1BXTXhfRU5BQkxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXA5M3h4X3B3bV9pc19lbmFibGVkKHN0cnVjdCBlcDkzeHhfcHdtICpwd20pCit7CisJcmV0dXJuIGVwOTN4eF9wd21fcmVhZGwocHdtLCBFUDkzWFhfUFdNeF9FTkFCTEUpICYgMHgxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXA5M3h4X3B3bV9pbnZlcnQoc3RydWN0IGVwOTN4eF9wd20gKnB3bSkKK3sKKwllcDkzeHhfcHdtX3dyaXRlbChwd20sIDB4MSwgRVA5M1hYX1BXTXhfSU5WRVJUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVwOTN4eF9wd21fbm9ybWFsKHN0cnVjdCBlcDkzeHhfcHdtICpwd20pCit7CisJZXA5M3h4X3B3bV93cml0ZWwocHdtLCAweDAsIEVQOTNYWF9QV014X0lOVkVSVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVwOTN4eF9wd21faXNfaW52ZXJ0ZWQoc3RydWN0IGVwOTN4eF9wd20gKnB3bSkKK3sKKwlyZXR1cm4gZXA5M3h4X3B3bV9yZWFkbChwd20sIEVQOTNYWF9QV014X0lOVkVSVCkgJiAweDE7Cit9CisKKy8qCisgKiAvc3lzL2RldmljZXMvcGxhdGZvcm0vZXA5M3h4LXB3bS5OCisgKiAgIC9taW5fZnJlcSAgICAgIHJlYWQtb25seSAgIG1pbmltdW0gcHdtIG91dHB1dCBmcmVxdWVuY3kKKyAqICAgL21heF9yZXEgICAgICAgcmVhZC1vbmx5ICAgbWF4aW11bSBwd20gb3V0cHV0IGZyZXF1ZW5jeQorICogICAvZnJlcSAgICAgICAgICByZWFkLXdyaXRlICBwd20gb3V0cHV0IGZyZXF1ZW5jeSAoMCA9IGRpc2FibGUgb3V0cHV0KQorICogICAvZHV0eV9wZXJjZW50ICByZWFkLXdyaXRlICBwd20gZHV0eSBjeWNsZSBwZXJjZW50ICgxLi45OSkKKyAqICAgL2ludmVydCAgICAgICAgcmVhZC13cml0ZSAgaW52ZXJ0IHB3bSBvdXRwdXQKKyAqLworCitzdGF0aWMgc3NpemVfdCBlcDkzeHhfcHdtX2dldF9taW5fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBlcDkzeHhfcHdtICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUocHdtLT5jbGspOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCByYXRlIC8gKEVQOTNYWF9QV01fTUFYX0NPVU5UICsgMSkpOworfQorCitzdGF0aWMgc3NpemVfdCBlcDkzeHhfcHdtX2dldF9tYXhfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBlcDkzeHhfcHdtICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUocHdtLT5jbGspOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCByYXRlIC8gMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fZ2V0X2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoZXA5M3h4X3B3bV9pc19lbmFibGVkKHB3bSkpIHsKKwkJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKHB3bS0+Y2xrKTsKKwkJdTE2IHRlcm0gPSBlcDkzeHhfcHdtX3JlYWRfdGMocHdtKTsKKworCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHJhdGUgLyAodGVybSArIDEpKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gc3ByaW50ZihidWYsICJkaXNhYmxlZFxuIik7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBlcDkzeHhfcHdtX3NldF9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJbG9uZyB2YWw7CisJaW50IGVycjsKKworCWVyciA9IHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsID09IDApIHsKKwkJZXA5M3h4X3B3bV9kaXNhYmxlKHB3bSk7CisJfSBlbHNlIGlmICh2YWwgPD0gKGNsa19nZXRfcmF0ZShwd20tPmNsaykgLyAyKSkgeworCQl1MzIgdGVybSwgZHV0eTsKKworCQl2YWwgPSAoY2xrX2dldF9yYXRlKHB3bS0+Y2xrKSAvIHZhbCkgLSAxOworCQlpZiAodmFsID4gRVA5M1hYX1BXTV9NQVhfQ09VTlQpCisJCQl2YWwgPSBFUDkzWFhfUFdNX01BWF9DT1VOVDsKKwkJaWYgKHZhbCA8IDEpCisJCQl2YWwgPSAxOworCisJCXRlcm0gPSBlcDkzeHhfcHdtX3JlYWRfdGMocHdtKTsKKwkJZHV0eSA9ICgodmFsICsgMSkgKiBwd20tPmR1dHlfcGVyY2VudCAvIDEwMCkgLSAxOworCisJCS8qIElmIHB3bSBpcyBydW5uaW5nLCBvcmRlciBpcyBpbXBvcnRhbnQgKi8KKwkJaWYgKHZhbCA+IHRlcm0pIHsKKwkJCWVwOTN4eF9wd21fd3JpdGVfdGMocHdtLCB2YWwpOworCQkJZXA5M3h4X3B3bV93cml0ZV9kYyhwd20sIGR1dHkpOworCQl9IGVsc2UgeworCQkJZXA5M3h4X3B3bV93cml0ZV9kYyhwd20sIGR1dHkpOworCQkJZXA5M3h4X3B3bV93cml0ZV90Yyhwd20sIHZhbCk7CisJCX0KKworCQlpZiAoIWVwOTN4eF9wd21faXNfZW5hYmxlZChwd20pKQorCQkJZXA5M3h4X3B3bV9lbmFibGUocHdtKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fZ2V0X2R1dHlfcGVyY2VudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBlcDkzeHhfcHdtICpwd20gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwd20tPmR1dHlfcGVyY2VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fc2V0X2R1dHlfcGVyY2VudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGVwOTN4eF9wd20gKnB3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA+IDAgJiYgdmFsIDwgMTAwKSB7CisJCXUzMiB0ZXJtID0gZXA5M3h4X3B3bV9yZWFkX3RjKHB3bSk7CisJCWVwOTN4eF9wd21fd3JpdGVfZGMocHdtLCAoKHRlcm0gKyAxKSAqIHZhbCAvIDEwMCkgLSAxKTsKKwkJcHdtLT5kdXR5X3BlcmNlbnQgPSB2YWw7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHNzaXplX3QgZXA5M3h4X3B3bV9nZXRfaW52ZXJ0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGVwOTN4eF9wd20gKnB3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGVwOTN4eF9wd21faXNfaW52ZXJ0ZWQocHdtKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVwOTN4eF9wd21fc2V0X2ludmVydChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGVwOTN4eF9wd20gKnB3bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWxvbmcgdmFsOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChlcnIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA9PSAwKQorCQllcDkzeHhfcHdtX25vcm1hbChwd20pOworCWVsc2UgaWYgKHZhbCA9PSAxKQorCQllcDkzeHhfcHdtX2ludmVydChwd20pOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtaW5fZnJlcSwgU19JUlVHTywgZXA5M3h4X3B3bV9nZXRfbWluX2ZyZXEsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG1heF9mcmVxLCBTX0lSVUdPLCBlcDkzeHhfcHdtX2dldF9tYXhfZnJlcSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZnJlcSwgU19JV1VHTyB8IFNfSVJVR08sCisJCSAgIGVwOTN4eF9wd21fZ2V0X2ZyZXEsIGVwOTN4eF9wd21fc2V0X2ZyZXEpOworc3RhdGljIERFVklDRV9BVFRSKGR1dHlfcGVyY2VudCwgU19JV1VHTyB8IFNfSVJVR08sCisJCSAgIGVwOTN4eF9wd21fZ2V0X2R1dHlfcGVyY2VudCwgZXA5M3h4X3B3bV9zZXRfZHV0eV9wZXJjZW50KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpbnZlcnQsIFNfSVdVR08gfCBTX0lSVUdPLAorCQkgICBlcDkzeHhfcHdtX2dldF9pbnZlcnQsIGVwOTN4eF9wd21fc2V0X2ludmVydCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplcDkzeHhfcHdtX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX21pbl9mcmVxLmF0dHIsCisJJmRldl9hdHRyX21heF9mcmVxLmF0dHIsCisJJmRldl9hdHRyX2ZyZXEuYXR0ciwKKwkmZGV2X2F0dHJfZHV0eV9wZXJjZW50LmF0dHIsCisJJmRldl9hdHRyX2ludmVydC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGVwOTN4eF9wd21fc3lzZnNfZmlsZXMgPSB7CisJLmF0dHJzCT0gZXA5M3h4X3B3bV9hdHRycywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVwOTN4eF9wd21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnI7CisKKwllcnIgPSBlcDkzeHhfcHdtX2FjcXVpcmVfZ3BpbyhwZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcHdtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVwOTN4eF9wd20pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB3bSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbm9fbWVtOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsX25vX21lbV9yZXNvdXJjZTsKKwl9CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGZhaWxfbm9fbWVtX3Jlc291cmNlOworCX0KKworCXB3bS0+bW1pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmIChwd20tPm1taW9fYmFzZSA9PSBOVUxMKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBmYWlsX25vX2lvcmVtYXA7CisJfQorCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmVwOTN4eF9wd21fc3lzZnNfZmlsZXMpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9ub19zeXNmczsKKworCXB3bS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAicHdtX2NsayIpOworCWlmIChJU19FUlIocHdtLT5jbGspKSB7CisJCWVyciA9IFBUUl9FUlIocHdtLT5jbGspOworCQlnb3RvIGZhaWxfbm9fY2xrOworCX0KKworCXB3bS0+ZHV0eV9wZXJjZW50ID0gNTA7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwd20pOworCisJLyogZGlzYWJsZSBwd20gYXQgc3RhcnR1cC4gQXZvaWRzIHplcm8gdmFsdWUuICovCisJZXA5M3h4X3B3bV9kaXNhYmxlKHB3bSk7CisJZXA5M3h4X3B3bV93cml0ZV90Yyhwd20sIEVQOTNYWF9QV01fTUFYX0NPVU5UKTsKKwllcDkzeHhfcHdtX3dyaXRlX2RjKHB3bSwgRVA5M1hYX1BXTV9NQVhfQ09VTlQgLyAyKTsKKworCWNsa19lbmFibGUocHdtLT5jbGspOworCisJcmV0dXJuIDA7CisKK2ZhaWxfbm9fY2xrOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZlcDkzeHhfcHdtX3N5c2ZzX2ZpbGVzKTsKK2ZhaWxfbm9fc3lzZnM6CisJaW91bm1hcChwd20tPm1taW9fYmFzZSk7CitmYWlsX25vX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitmYWlsX25vX21lbV9yZXNvdXJjZToKKwlrZnJlZShwd20pOworZmFpbF9ub19tZW06CisJZXA5M3h4X3B3bV9yZWxlYXNlX2dwaW8ocGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2V4aXQgZXA5M3h4X3B3bV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3B3bSAqcHdtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJZXA5M3h4X3B3bV9kaXNhYmxlKHB3bSk7CisJY2xrX2Rpc2FibGUocHdtLT5jbGspOworCWNsa19wdXQocHdtLT5jbGspOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZlcDkzeHhfcHdtX3N5c2ZzX2ZpbGVzKTsKKwlpb3VubWFwKHB3bS0+bW1pb19iYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlrZnJlZShwd20pOworCWVwOTN4eF9wd21fcmVsZWFzZV9ncGlvKHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVwOTN4eF9wd21fZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJlcDkzeHgtcHdtIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGVwOTN4eF9wd21fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGVwOTN4eF9wd21faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmVwOTN4eF9wd21fZHJpdmVyLCBlcDkzeHhfcHdtX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGVwOTN4eF9wd21fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlcDkzeHhfcHdtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVwOTN4eF9wd21faW5pdCk7Cittb2R1bGVfZXhpdChlcDkzeHhfcHdtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXR0aGlldSBDcmFwZXQgPG1jcmFwZXRAZ21haWwuY29tPiwgIgorCSAgICAgICJIIEhhcnRsZXkgU3dlZXRlbiA8aHN3ZWV0ZW5AdmlzaW9uZW5ncmF2ZXJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRVA5M3h4IFBXTSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ZXA5M3h4LXB3bSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jCmluZGV4IDVkNzc4ZWMuLjE2ZjBhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBuZXQuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwbmV0LmMKQEAgLTI0MCw3ICsyNDAsNiBAQAogCQkodm9pZCAqKXNrYi0+aGVhZCwgKHZvaWQgKilza2ItPmRhdGEsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKIAkJc2tiX2VuZF9wb2ludGVyKHNrYiksIHNrYi0+bGVuKTsKIAotCXhwbmV0X2RldmljZS0+bGFzdF9yeCA9IGppZmZpZXM7CiAJeHBuZXRfZGV2aWNlLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJeHBuZXRfZGV2aWNlLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbiArIEVUSF9ITEVOOwogCkBAIC00MzYsNyArNDM1LDcgQEAKIAogCWlmIChza2ItPmRhdGFbMF0gPT0gMHgzMykgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOwkvKiBub3RoaW5nIG5lZWRlZCB0byBiZSBkb25lICovCisJCXJldHVybiBORVRERVZfVFhfT0s7CS8qIG5vdGhpbmcgbmVlZGVkIHRvIGJlIGRvbmUgKi8KIAl9CiAKIAkvKgpAQCAtNTAzLDcgKzUwMiw3IEBACiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IGUxYWE4NDcuLjg3NDFkMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC00MzAsNyArNDMxLDcgQEAKIAkJCQljbGsgPSAyNTU7CiAJCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsayAvICgyICogKGNsayArIDEpKTsKIAkJfQotCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgPT0gMHg4MCkKKwkJaWYgKGhvc3QtPmh3X2Rlc2lnbmVyID09IEFNQkFfVkVORE9SX1NUKQogCQkJY2xrIHw9IE1DSV9GQ0VOOyAvKiBCdWcgZml4IGluIFNUIElQIGJsb2NrICovCiAJCWNsayB8PSBNQ0lfQ0xLX0VOQUJMRTsKIAl9CkBAIC00NDMsNyArNDQ0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBNTUNfUE9XRVJfVVA6CiAJCS8qIFRoZSBTVCB2ZXJzaW9uIGRvZXMgbm90IGhhdmUgdGhpcywgZmFsbCB0aHJvdWdoIHRvIFBPV0VSX09OICovCi0JCWlmIChob3N0LT5od19kZXNpZ25lciAhPSAweDgwKSB7CisJCWlmIChob3N0LT5od19kZXNpZ25lciAhPSBBTUJBX1ZFTkRPUl9TVCkgewogCQkJcHdyIHw9IE1DSV9QV1JfVVA7CiAJCQlicmVhazsKIAkJfQpAQCAtNDUzLDcgKzQ1NCw3IEBACiAJfQogCiAJaWYgKGlvcy0+YnVzX21vZGUgPT0gTU1DX0JVU01PREVfT1BFTkRSQUlOKSB7Ci0JCWlmIChob3N0LT5od19kZXNpZ25lciAhPSAweDgwKQorCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgIT0gQU1CQV9WRU5ET1JfU1QpCiAJCQlwd3IgfD0gTUNJX1JPRDsKIAkJZWxzZSB7CiAJCQkvKgpAQCAtNDcyLDE3ICs0NzMsNDEgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbW1jaV9nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCit7CisJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwlpZiAoaG9zdC0+Z3Bpb193cCA9PSAtRU5PU1lTKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXJldHVybiBncGlvX2dldF92YWx1ZShob3N0LT5ncGlvX3dwKTsKK30KKworc3RhdGljIGludCBtbWNpX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJaWYgKGhvc3QtPmdwaW9fY2QgPT0gLUVOT1NZUykKKwkJc3RhdHVzID0gaG9zdC0+cGxhdC0+c3RhdHVzKG1tY19kZXYoaG9zdC0+bW1jKSk7CisJZWxzZQorCQlzdGF0dXMgPSBncGlvX2dldF92YWx1ZShob3N0LT5ncGlvX2NkKTsKKworCXJldHVybiAhc3RhdHVzOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtbWNpX29wcyA9IHsKIAkucmVxdWVzdAk9IG1tY2lfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IG1tY2lfc2V0X2lvcywKKwkuZ2V0X3JvCQk9IG1tY2lfZ2V0X3JvLAorCS5nZXRfY2QJCT0gbW1jaV9nZXRfY2QsCiB9OwogCiBzdGF0aWMgdm9pZCBtbWNpX2NoZWNrX3N0YXR1cyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdCA9IChzdHJ1Y3QgbW1jaV9ob3N0ICopZGF0YTsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSBtbWNpX2dldF9jZChob3N0LT5tbWMpOwogCi0Jc3RhdHVzID0gaG9zdC0+cGxhdC0+c3RhdHVzKG1tY19kZXYoaG9zdC0+bW1jKSk7CiAJaWYgKHN0YXR1cyBeIGhvc3QtPm9sZHN0YXQpCiAJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7CiAKQEAgLTUxNSwxMiArNTQwLDE1IEBACiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5tbWMgPSBtbWM7Ci0JLyogQml0cyAxMiB0aHJ1IDE5IGlzIHRoZSBkZXNpZ25lciAqLwotCWhvc3QtPmh3X2Rlc2lnbmVyID0gKGRldi0+cGVyaXBoaWQgPj4gMTIpICYgMHhmZjsKLQkvKiBCaXRzIDIwIHRocnUgMjMgaXMgdGhlIHJldmlzb24gKi8KLQlob3N0LT5od19yZXZpc2lvbiA9IChkZXYtPnBlcmlwaGlkID4+IDIwKSAmIDB4ZjsKKworCWhvc3QtPmdwaW9fd3AgPSAtRU5PU1lTOworCWhvc3QtPmdwaW9fY2QgPSAtRU5PU1lTOworCisJaG9zdC0+aHdfZGVzaWduZXIgPSBhbWJhX21hbmYoZGV2KTsKKwlob3N0LT5od19yZXZpc2lvbiA9IGFtYmFfcmV2KGRldik7CiAJREJHKGhvc3QsICJkZXNpZ25lciBJRCA9IDB4JTAyeFxuIiwgaG9zdC0+aHdfZGVzaWduZXIpOwogCURCRyhob3N0LCAicmV2aXNpb24gPSAweCUwMXhcbiIsIGhvc3QtPmh3X3JldmlzaW9uKTsKKwogCWhvc3QtPmNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwpAQCAtNTkxLDYgKzYxOSwyNyBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0sxKTsKIAl3cml0ZWwoMHhmZmYsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOwogCisjaWZkZWYgQ09ORklHX0dQSU9MSUIKKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5ncGlvX2NkKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGxhdC0+Z3Bpb19jZCwgRFJJVkVSX05BTUUgIiAoY2QpIik7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBsYXQtPmdwaW9fY2QpOworCQlpZiAocmV0ID09IDApCisJCQlob3N0LT5ncGlvX2NkID0gcGxhdC0+Z3Bpb19jZDsKKwkJZWxzZSBpZiAocmV0ICE9IC1FTk9TWVMpCisJCQlnb3RvIGVycl9ncGlvX2NkOworCX0KKwlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5ncGlvX3dwKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGxhdC0+Z3Bpb193cCwgRFJJVkVSX05BTUUgIiAod3ApIik7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBsYXQtPmdwaW9fd3ApOworCQlpZiAocmV0ID09IDApCisJCQlob3N0LT5ncGlvX3dwID0gcGxhdC0+Z3Bpb193cDsKKwkJZWxzZSBpZiAocmV0ICE9IC1FTk9TWVMpCisJCQlnb3RvIGVycl9ncGlvX3dwOworCX0KKyNlbmRpZgorCiAJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnFbMF0sIG1tY2lfaXJxLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUgIiAoY21kKSIsIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5tYXA7CkBAIC02MDIsNiArNjUxLDcgQEAKIAl3cml0ZWwoTUNJX0lSUUVOQUJMRSwgaG9zdC0+YmFzZSArIE1NQ0lNQVNLMCk7CiAKIAlhbWJhX3NldF9kcnZkYXRhKGRldiwgbW1jKTsKKwlob3N0LT5vbGRzdGF0ID0gbW1jaV9nZXRfY2QoaG9zdC0+bW1jKTsKIAogCW1tY19hZGRfaG9zdChtbWMpOwogCkBAIC02MjAsNiArNjcwLDEyIEBACiAgaXJxMF9mcmVlOgogCWZyZWVfaXJxKGRldi0+aXJxWzBdLCBob3N0KTsKICB1bm1hcDoKKwlpZiAoaG9zdC0+Z3Bpb193cCAhPSAtRU5PU1lTKQorCQlncGlvX2ZyZWUoaG9zdC0+Z3Bpb193cCk7CisgZXJyX2dwaW9fd3A6CisJaWYgKGhvc3QtPmdwaW9fY2QgIT0gLUVOT1NZUykKKwkJZ3Bpb19mcmVlKGhvc3QtPmdwaW9fY2QpOworIGVycl9ncGlvX2NkOgogCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAgY2xrX2Rpc2FibGU6CiAJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKQEAgLTY1NSw2ICs3MTEsMTEgQEAKIAkJZnJlZV9pcnEoZGV2LT5pcnFbMF0sIGhvc3QpOwogCQlmcmVlX2lycShkZXYtPmlycVsxXSwgaG9zdCk7CiAKKwkJaWYgKGhvc3QtPmdwaW9fd3AgIT0gLUVOT1NZUykKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX3dwKTsKKwkJaWYgKGhvc3QtPmdwaW9fY2QgIT0gLUVOT1NZUykKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX2NkKTsKKwogCQlpb3VubWFwKGhvc3QtPmJhc2UpOwogCQljbGtfZGlzYWJsZShob3N0LT5jbGspOwogCQljbGtfcHV0KGhvc3QtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCmluZGV4IDA0NDFiYWMuLjgzOWYyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCkBAIC0xNTEsNiArMTUxLDggQEAKIAlzdHJ1Y3QgbW1jX2RhdGEJCSpkYXRhOwogCXN0cnVjdCBtbWNfaG9zdAkJKm1tYzsKIAlzdHJ1Y3QgY2xrCQkqY2xrOworCWludAkJCWdwaW9fY2Q7CisJaW50CQkJZ3Bpb193cDsKIAogCXVuc2lnbmVkIGludAkJZGF0YV94ZmVyZWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvdHM3MjUwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3RzNzI1MC5jCmluZGV4IDJjNDEwYTAuLjBmNTU2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvdHM3MjUwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC90czcyNTAuYwpAQCAtMjQsOCArMjQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC90czcyeHguaD4KKwogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmMgYi9kcml2ZXJzL25ldC8zYzUwMS5jCmluZGV4IDM2N2JlYzYuLmY2MDMwOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAgKiBubyByZWFsIGNob2ljZS4KICAqLwogCi1zdGF0aWMgaW50IGVsX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCQkJaWYgKGVsX2RlYnVnID4gMikKIAkJCQlwcl9kZWJ1ZygiIHF1ZXVlZCB4bWl0LlxuIik7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAkJLyogQSByZWNlaXZlIHVwc2V0IG91ciBsb2FkLCBkZXNwaXRlIG91ciBiZXN0IGVmZm9ydHMgKi8KIAkJaWYgKGVsX2RlYnVnID4gMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAxLmggYi9kcml2ZXJzL25ldC8zYzUwMS5oCmluZGV4IGY0MGIwNDkuLjE4M2ZkNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAxLmgKKysrIGIvZHJpdmVycy9uZXQvM2M1MDEuaApAQCAtNiw3ICs2LDcgQEAKIHN0YXRpYyBpbnQgIGVsMV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcik7CiBzdGF0aWMgaW50ICBlbF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWxfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIGVsX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZWxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBlbF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGVsX3JlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbF9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAzLmMgYi9kcml2ZXJzL25ldC8zYzUwMy5jCmluZGV4IDEzNDYzOGEuLmM3MWUxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAzLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDMuYwpAQCAtMzgzLDcgKzM4Myw3IEBACiBzdGF0aWMgaW50CiBlbDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIGludCByZXR2YWwgPSAtRUFHQUlOOworICAgIGludCByZXR2YWw7CiAKICAgICBpZiAoZGV2LT5pcnEgPCAyKSB7CiAJaW50IGlycWxpc3RbXSA9IHs1LCA5LCAzLCA0LCAwfTsKQEAgLTM5MSw3ICszOTEsOCBAQAogCiAJb3V0YihFR0FDRlJfTk9STSwgRTMzR19HQUNGUik7CS8qIEVuYWJsZSBSQU0gYW5kIGludGVycnVwdHMuICovCiAJZG8gewotCSAgICBpZiAocmVxdWVzdF9pcnEgKCppcnFwLCBOVUxMLCAwLCAiYm9ndXMiLCBkZXYpICE9IC1FQlVTWSkgeworCSAgICByZXR2YWwgPSByZXF1ZXN0X2lycSgqaXJxcCwgTlVMTCwgMCwgImJvZ3VzIiwgZGV2KTsKKwkgICAgaWYgKHJldHZhbCA+PSAwKSB7CiAJCS8qIFR3aW5rbGUgdGhlIGludGVycnVwdCwgYW5kIGNoZWNrIGlmIGl0J3Mgc2Vlbi4gKi8KIAkJdW5zaWduZWQgbG9uZyBjb29raWUgPSBwcm9iZV9pcnFfb24oKTsKIAkJb3V0Yl9wKDB4MDQgPDwgKCgqaXJxcCA9PSA5KSA/IDIgOiAqaXJxcCksIEUzM0dfSURDRlIpOwpAQCAtNDAwLDExICs0MDEsMTQgQEAKIAkJICAgICYmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEgPSAqaXJxcCwKIAkJICAgIGVpcF9pbnRlcnJ1cHQsIDAsIGRldi0+bmFtZSwgZGV2KSkgPT0gMCkpCiAJCSAgICBicmVhazsKKwkgICAgfSBlbHNlIHsKKwkJICAgIGlmIChyZXR2YWwgIT0gLUVCVVNZKQorCQkJICAgIHJldHVybiByZXR2YWw7CiAJICAgIH0KIAl9IHdoaWxlICgqKytpcnFwKTsKIAlpZiAoKmlycXAgPT0gMCkgewogCSAgICBvdXRiKEVHQUNGUl9JUlFPRkYsIEUzM0dfR0FDRlIpOwkvKiBkaXNhYmxlIGludGVycnVwdHMuICovCi0JICAgIHJldHVybiByZXR2YWw7CisJICAgIHJldHVybiAtRUFHQUlOOwogCX0KICAgICB9IGVsc2UgewogCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpcF9pbnRlcnJ1cHQsIDAsIGRldi0+bmFtZSwgZGV2KSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA1LmMgYi9kcml2ZXJzL25ldC8zYzUwNS5jCmluZGV4IGY3MWIzNTQuLmEyMWM5ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDUuYwpAQCAtOTc2LDcgKzk3Niw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGJvb2wgc2VuZF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzZW5kX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWVscF9kZXZpY2UgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgdGFyZ2V0OwpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGVscF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWxwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWVscF9kZXZpY2UgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTEwMSw3ICsxMTAxLDcgQEAKIAlwcmltZV9yeChkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA3LmMgYi9kcml2ZXJzL25ldC8zYzUwNy5jCmluZGV4IDk2Yjg2NjUuLmE2ZGM4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDcuYwpAQCAtMjg0LDcgKzI4NCw4IEBACiAKIHN0YXRpYyBpbnQJZWwxNl9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcik7CiBzdGF0aWMgaW50CWVsMTZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQJZWwxNl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbDE2X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGVsMTZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBlbDE2X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludAllbDE2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNTA5LDcgKzUxMCw4IEBACiB9CiAKIAotc3RhdGljIGludCBlbDE2X3NlbmRfcGFja2V0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGVsMTZfc2VuZF9wYWNrZXQgKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC01MzcsNyArNTM5LDcgQEAKIAogCS8qIFlvdSBtaWdodCBuZWVkIHRvIGNsZWFuIHVwIGFuZCByZWNvcmQgVHggc3RhdGlzdGljcyBoZXJlLiAqLwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoJVGhlIHR5cGljYWwgd29ya2xvYWQgb2YgdGhlIGRyaXZlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA5LmMgYi9kcml2ZXJzL25ldC8zYzUwOS5jCmluZGV4IGQyMTM3ZWYuLjNiMDBhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA5LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDkuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiBzdGF0aWMgdXNob3J0IGlkX3JlYWRfZWVwcm9tKGludCBpbmRleCk7CiBzdGF0aWMgdXNob3J0IHJlYWRfZWVwcm9tKGludCBpb2FkZHIsIGludCBpbmRleCk7CiBzdGF0aWMgaW50IGVsM19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBlbDNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbDNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBlbDNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVsM19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC04MTYsNyArODE2LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC04OTIsNyArODkyLDcgQEAKIAkJCW91dGIoMHgwMCwgaW9hZGRyICsgVFhfU1RBVFVTKTsgLyogUG9wIHRoZSBzdGF0dXMgc3RhY2suICovCiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIEVMMyBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTE1LmMgYi9kcml2ZXJzL25ldC8zYzUxNS5jCmluZGV4IDRhN2MzMjguLjRhZGNiOTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUxNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKQEAgLTM2OSw4ICszNjksOCBAQAogCQkJICAgIHN0cnVjdCBwbnBfZGV2ICppZGV2LCBpbnQgY2FyZF9udW1iZXIpOwogc3RhdGljIGludCBjb3Jrc2NyZXdfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGNvcmtzY3Jld190aW1lcih1bnNpZ25lZCBsb25nIGFyZyk7Ci1zdGF0aWMgaW50IGNvcmtzY3Jld19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgY29ya3NjcmV3X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGNvcmtzY3Jld19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGNvcmtzY3Jld190aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBib29tZXJhbmdfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC05OTgsOCArOTk4LDggQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgY29ya3NjcmV3X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGNvcmtzY3Jld19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNvcmtzY3Jld19wcml2YXRlICp2cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMTA1Niw3ICsxMDU2LDcgQEAKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJfQogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCS8qIFB1dCBvdXQgdGhlIGRvdWJsZXdvcmQgaGVhZGVyLi4uICovCiAJb3V0bChza2ItPmxlbiwgaW9hZGRyICsgVFhfRklGTyk7CkBAIC0xMTE5LDcgKzExMTksNyBAQAogCQkJb3V0YigweDAwLCBpb2FkZHIgKyBUeFN0YXR1cyk7CS8qIFBvcCB0aGUgc3RhdHVzIHN0YWNrLiAqLwogCQl9CiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkb2VzIGFsbCBvZiB0aGUgUnggdGhyZWFkIHdvcmsgYW5kIGNsZWFucyB1cApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggY2RkOTU1Yy4uY2IwYjczMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC0xODMsNyArMTgzLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBlbG1jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBlbG1jX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGVsbWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGVsbWNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZWxtY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWxtY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbG1jX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjaWZkZWYgRUxNQ19NVUxUSUNBU1QKQEAgLTExMjksNyArMTEyOSw3IEBACiAgKiBzZW5kIGZyYW1lCiAgKi8KIAotc3RhdGljIGludCBlbG1jX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWxtY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBsZW47CiAJaW50IGk7CkBAIC0xMTk4LDcgKzExOTgsNyBAQAogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTI3LmMgYi9kcml2ZXJzL25ldC8zYzUyNy5jCmluZGV4IGFhYThhOWYuLjYwMjFlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTI3LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MjcuYwpAQCAtMjEzLDcgKzIxMyw4IEBACiBzdGF0aWMgaW50ICAgICAgbWMzMl9jb21tYW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBjbWQsIHZvaWQgKmRhdGEsIGludCBsZW4pOwogc3RhdGljIGludAltYzMyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZAltYzMyX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50CW1jMzJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbWMzMl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYzMyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludAltYzMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdAluZXRfZGV2aWNlX3N0YXRzICptYzMyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEwMjAsNyArMTAyMSw4IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgbWMzMl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG1jMzJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBoZWFkID0gYXRvbWljX3JlYWQoJmxwLT50eF9yaW5nX2hlYWQpOwpAQCAtMTAzNSw3ICsxMDM3LDcgQEAKIAogCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpIHsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlhdG9taWNfZGVjKCZscC0+dHhfY291bnQpOwpAQCAtMTA2Niw3ICsxMDY4LDcgQEAKIAlwLT5jb250cm9sICAgICAmPSB+Q09OVFJPTF9FT0w7CiAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCA0NTY3NTg4Li43YWRmZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzU5eC5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKQEAgLTcxNiw4ICs3MTYsMTAgQEAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKnZwLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSk7CiBzdGF0aWMgdm9pZCB2b3J0ZXhfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgcnhfb29tX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQgdm9ydGV4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGJvb21lcmFuZ19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHZvcnRleF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBib29tZXJhbmdfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgdm9ydGV4X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBib29tZXJhbmdfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgdm9ydGV4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtMjAzNSw3ICsyMDM3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogdm9ydGV4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgdm9ydGV4X3ByaXZhdGUgKnZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTIwODcsMTAgKzIwODksMTAgQEAKIAkJCWlvd3JpdGU4KDB4MDAsIGlvYWRkciArIFR4U3RhdHVzKTsgLyogUG9wIHRoZSBzdGF0dXMgc3RhY2suICovCiAJCX0KIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBib29tZXJhbmdfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjE3Nyw3ICsyMTc5LDcgQEAKIAlpb3dyaXRlMTYoRG93blVuc3RhbGwsIGlvYWRkciArIEVMM19DTUQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwLT5sb2NrLCBmbGFncyk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yayBhbmQgY2xlYW5zIHVwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC83OTkwLmMgYi9kcml2ZXJzL25ldC83OTkwLmMKaW5kZXggNjlmNWI3ZC4uYjFlNTc2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvNzk5MC5jCisrKyBiL2RyaXZlcnMvbmV0Lzc5OTAuYwpAQCAtNTg1LDcgKzU4NSw3IEBACiAJCWxwLT50eF9mdWxsID0gMTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmbHAtPmRldmxvY2ssIGZsYWdzKTsKIAotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxhbmNlX3N0YXJ0X3htaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IGQwZGJiZjMuLjQ2MmQ5ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtNzM2LDcgKzczNiw4IEBACiAJCW5ldGlmX3dha2VfcXVldWUoY3AtPmRldik7CiB9CiAKLXN0YXRpYyBpbnQgY3Bfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBjcF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgZW50cnk7CkBAIC04OTAsNyArODkxLDcgQEAKIAljcHc4KFR4UG9sbCwgTm9ybWFsVHhQb2xsKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFNldCBvciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBhZGFwdG9yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IDBlMmJhMjEuLjRhMzYyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTYyOCw4ICs2MjgsOCBAQAogc3RhdGljIHZvaWQgcnRsODEzOV9zdGFydF90aHJlYWQoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHApOwogc3RhdGljIHZvaWQgcnRsODEzOV90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfaW5pdF9yaW5nIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgcnRsODEzOV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHJ0bDgxMzlfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCkBAIC0xNjg3LDcgKzE2ODcsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBydGw4MTM5X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgcnRsODEzOV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKQEAgLTE3MDcsNyArMTcwOCw3IEBACiAJfSBlbHNlIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CkBAIC0xNzMyLDcgKzE3MzMsNyBAQAogCQlwcl9kZWJ1ZygiJXM6IFF1ZXVlZCBUeCBwYWNrZXQgc2l6ZSAldSB0byBzbG90ICVkLlxuIiwKIAkJCWRldi0+bmFtZSwgbGVuLCBlbnRyeSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgyNTk2LmMgYi9kcml2ZXJzL25ldC84MjU5Ni5jCmluZGV4IDc3NTQ3NTQuLmVhNmIxMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgyNTk2LmMKKysrIGIvZHJpdmVycy9uZXQvODI1OTYuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJMHg3ZiAvKiAgKm11bHRpIElBICovIH07CiAKIHN0YXRpYyBpbnQgaTU5Nl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpNTk2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaTU5Nl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGk1OTZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGk1OTZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpNTk2X2FkZF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGk1OTZfY21kICpjbWQpOwpAQCAtMTA1NCw4ICsxMDU0LDcgQEAKIAluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwogfQogCi0KLXN0YXRpYyBpbnQgaTU5Nl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaTU5Nl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHAgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHR4X2NtZCAqdHhfY21kOwpAQCAtMTA2OCw3ICsxMDY3LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CkBAIC0xMTEwLDcgKzExMDksNyBAQAogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2V0aCh1bnNpZ25lZCBjaGFyICphZGQsIGNoYXIgKnN0cikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuYyBiL2RyaXZlcnMvbmV0LzgzOTAuYwppbmRleCAyMTE1M2RlLi43Yzc1MThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvODM5MC5jCkBAIC0xNyw3ICsxNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGVpX2Nsb3NlKTsKIAotaW50IGVpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGVpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gX19laV9zdGFydF94bWl0KHNrYiwgZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuaCBiL2RyaXZlcnMvbmV0LzgzOTAuaAppbmRleCAzYzYxZDZkLi4zZDllOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmgKKysrIGIvZHJpdmVycy9uZXQvODM5MC5oCkBAIC00MCw3ICs0MCw3IEBACiBleHRlcm4gaW50IGVpX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGlycXJldHVybl90IGVpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogZXh0ZXJuIHZvaWQgZWlfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgZWlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBuZXRkZXZfdHhfdCBlaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZWlfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTU4LDcgKzU4LDcgQEAKIGV4dGVybiBpbnQgZWlwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIGlycXJldHVybl90IGVpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIGV4dGVybiB2b2lkIGVpcF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBlaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBuZXRkZXZfdHhfdCBlaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGVpcF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVpcF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTBwLmMgYi9kcml2ZXJzL25ldC84MzkwcC5jCmluZGV4IGQyMjVjMjkuLmEyYTY0ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgzOTBwLmMKKysrIGIvZHJpdmVycy9uZXQvODM5MHAuYwpAQCAtMjIsNyArMjIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChlaXBfY2xvc2UpOwogCi1pbnQgZWlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGVpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIF9fZWlfc3RhcnRfeG1pdChza2IsIGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA1Y2U3Y2JhLi41MDc1NjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTIwOSw3ICsyMDksNyBAQAogCiBjb25maWcgTUFDQgogCXRyaXN0YXRlICJBdG1lbCBNQUNCIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IEFSQ0hfQVQ5MVNBTTkyNjMgfHwgQVJDSF9BVDkxU0FNOUcyMCB8fCBBUkNIX0FUOTFDQVA5CisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTFTQU05MjYwIHx8IEFSQ0hfQVQ5MVNBTTkyNjMgfHwgQVJDSF9BVDkxU0FNOUcyMCB8fCBBUkNIX0FUOTFTQU05RzQ1IHx8IEFSQ0hfQVQ5MUNBUDkKIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhlIEF0bWVsIE1BQ0IgZXRoZXJuZXQgaW50ZXJmYWNlIGlzIGZvdW5kIG9uIG1hbnkgQVQzMiBhbmQgQVQ5MQpAQCAtMTc3Niw3ICsxNzc2LDcgQEAKIAogY29uZmlnIENQTUFDCiAJdHJpc3RhdGUgIlRJIEFSNyBDUE1BQyBFdGhlcm5ldCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIEVYUEVSSU1FTlRBTCAmJiBBUjcgJiYgQlJPS0VOCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgRVhQRVJJTUVOVEFMICYmIEFSNwogCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUSSBBUjcgQ1BNQUMgRXRoZXJuZXQgc3VwcG9ydApAQCAtMTkyOCw2ICsxOTI4LDEyIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgVGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYXRsMi4KIAorY29uZmlnIFhJTElOWF9FTUFDTElURQorCXRyaXN0YXRlICJYaWxpbnggMTAvMTAwIEV0aGVybmV0IExpdGUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBQQzMyIHx8IE1JQ1JPQkxBWkUKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMTAvMTAwIEV0aGVybmV0IExpdGUgZnJvbSBYaWxpbnguCisKIHNvdXJjZSAiZHJpdmVycy9uZXQvZnNfZW5ldC9LY29uZmlnIgogCiBlbmRpZiAjIE5FVF9FVEhFUk5FVApAQCAtMjM2OSwxMCArMjM3NSw2IEBACiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgR2lnYWJpdCBFdGhlcm5ldCBtb2RlIG9mIHRoZSBRVUlDQyBFbmdpbmUsCiAJICB3aGljaCBpcyBhdmFpbGFibGUgb24gc29tZSBGcmVlc2NhbGUgU09Dcy4KIAotY29uZmlnIFVHRVRIX01BR0lDX1BBQ0tFVAotCWJvb2wgIk1hZ2ljIFBhY2tldCBkZXRlY3Rpb24gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVDQ19HRVRICi0KIGNvbmZpZyBVR0VUSF9UWF9PTl9ERU1BTkQKIAlib29sICJUcmFuc21pdCBvbiBEZW1hbmQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVDQ19HRVRICkBAIC0yNzI0LDYgKzI3MjYsNyBAQAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgWkxJQl9JTkZMQVRFCiAJc2VsZWN0IExJQkNSQzMyQworCXNlbGVjdCBNRElPCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQnJvYWRjb20gTmV0WHRyZW1lSUkgMTAgZ2lnYWJpdCBFdGhlcm5ldCBjYXJkcy4KIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggZWFkOGNhYi4uOTlhZTZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTE0Miw2ICsxNDIsNyBAQAogb2JqLSQoQ09ORklHX01WNjQzWFhfRVRIKSArPSBtdjY0M3h4X2V0aC5vCiBsbF90ZW1hYy1vYmpzIDo9IGxsX3RlbWFjX21haW4ubyBsbF90ZW1hY19tZGlvLm8KIG9iai0kKENPTkZJR19YSUxJTlhfTExfVEVNQUMpICs9IGxsX3RlbWFjLm8KK29iai0kKENPTkZJR19YSUxJTlhfRU1BQ0xJVEUpICs9IHhpbGlueF9lbWFjbGl0ZS5vCiBvYmotJChDT05GSUdfUUxBM1hYWCkgKz0gcWxhM3h4eC5vCiBvYmotJChDT05GSUdfUUxHRSkgKz0gcWxnZS8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYTIwNjUuYyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKaW5kZXggMDg3ODdmNS4uYjdlYzAzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYTIwNjUuYworKysgYi9kcml2ZXJzL25ldC9hMjA2NS5jCkBAIC01NDcsMTcgKzU0NywxOCBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBsYW5jZV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGxhbmNlX3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX3JlZ3MgKmxsID0gbHAtPmxsOwogCXZvbGF0aWxlIHN0cnVjdCBsYW5jZV9pbml0X2Jsb2NrICppYiA9IGxwLT5pbml0X2Jsb2NrOwogCWludCBlbnRyeSwgc2tibGVuOwotCWludCBzdGF0dXMgPSAwOworCWludCBzdGF0dXMgPSBORVRERVZfVFhfT0s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCXNrYmxlbiA9IG1heF90KHVuc2lnbmVkLCBza2ItPmxlbiwgRVRIX1pMRU4pOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWNlbmljLmMgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwppbmRleCAwODQxOWVlLi41ZjBiMDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtMjQ2NCw3ICsyNDY0LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGFjZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYWNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFjZV9wcml2YXRlICphcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFjZV9yZWdzIF9faW9tZW0gKnJlZ3MgPSBhcC0+cmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5oIGIvZHJpdmVycy9uZXQvYWNlbmljLmgKaW5kZXggYzk4N2M5Yi4uMTcwNzliOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljLmgKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljLmgKQEAgLTc3NSw3ICs3NzUsOCBAQAogc3RhdGljIGlycXJldHVybl90IGFjZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpbnQgYWNlX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGFjZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBhY2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBhY2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGFjZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGFjZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2KTsKIHN0YXRpYyB2b2lkIGFjZV9kdW1wX3RyYWNlKHN0cnVjdCBhY2VfcHJpdmF0ZSAqYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggMTk4MzFiZC4uNGU2MzU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC0xMzAwLDcgKzEzMDAsOCBAQAogVGhpcyBmdW5jdGlvbiB3aWxsIHF1ZXVlIHRoZSB0cmFuc21pdCBwYWNrZXRzIHRvIHRoZSBkZXNjcmlwdG9ycyBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBzZW5kIG9wZXJhdGlvbi4gSXQgYWxzbyBpbml0aWFsaXplcyB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMgd2l0aCBidWZmZXIgcGh5c2ljYWwgYWRkcmVzcywgYnl0ZSBjb3VudCwgb3duZXJzaGlwIHRvIGhhcmR3YXJlIGV0Yy4KICovCiAKLXN0YXRpYyBpbnQgYW1kODExMWVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhbWQ4MTExZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHR4X2luZGV4OwpAQCAtMTM0Niw3ICsxMzQ3LDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAvKgogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsbCB0aGUgbWVtb3J5IG1hcHBlZCByZWdpc3RlcnMgb2YgdGhlIGRldmljZS4KQEAgLTE1MjMsOSArMTUyNCw2IEBACiAJaW50IGVycjsKIAl1MzIgbWlpX3JlZ3ZhbDsKIAotCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQogCXN3aXRjaChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgogCQlkYXRhLT5waHlfaWQgPSBscC0+ZXh0X3BoeV9hZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKaW5kZXggN2Y4MzI1NC4uYjVkYzdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCkBAIC0xOTIsNyArMTkyLDggQEAKIHN0YXRpYyB2b2lkIGNvcHNfcG9sbCAodW5zaWduZWQgbG9uZyBsdGRldik7CiBzdGF0aWMgdm9pZCBjb3BzX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBjb3BzX3J4IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIGNvcHNfc2VuZF9wYWNrZXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICBjb3BzX3NlbmRfcGFja2V0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3QgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgY29wc19pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiBzdGF0aWMgaW50ICBjb3BzX2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTg3NSw3ICs4NzYsOCBAQAogICoJTWFrZSB0aGUgY2FyZCB0cmFuc21pdCBhIExvY2FsVGFsayBwYWNrZXQuCiAgKi8KIAotc3RhdGljIGludCBjb3BzX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgY29wc19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgICAgIHN0cnVjdCBjb3BzX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgICAgIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTkyMCw3ICs5MjIsNyBAQAogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvaXBkZHAuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCmluZGV4IDc4Y2VhNWUuLmFhZjE0ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCkBAIC00OCw3ICs0OCw4IEBACiAjZW5kaWYKIAogLyogSW5kZXggdG8gZnVuY3Rpb25zLCBhcyBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLwotc3RhdGljIGludCBpcGRkcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGlwZGRwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGlwZGRwX2NyZWF0ZShzdHJ1Y3QgaXBkZHBfcm91dGUgKm5ld19ydCk7CiBzdGF0aWMgaW50IGlwZGRwX2RlbGV0ZShzdHJ1Y3QgaXBkZHBfcm91dGUgKnJ0KTsKIHN0YXRpYyBzdHJ1Y3QgaXBkZHBfcm91dGUqIF9faXBkZHBfZmluZF9yb3V0ZShzdHJ1Y3QgaXBkZHBfcm91dGUgKnJ0KTsKQEAgLTExMyw3ICsxMTQsNyBAQAogLyoKICAqIFRyYW5zbWl0IExMQVAvRUxBUCBmcmFtZSB1c2luZyBhYXJwX3NlbmRfZGRwLgogICovCi1zdGF0aWMgaW50IGlwZGRwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcGRkcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJX19iZTMyIHBhZGRyID0gc2tiX3J0YWJsZShza2IpLT5ydF9nYXRld2F5OwogICAgICAgICBzdHJ1Y3QgZGRwZWhkciAqZGRwOwpAQCAtMTMyLDcgKzEzMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYocnQgPT0gTlVMTCkgewogCQlzcGluX3VubG9jaygmaXBkZHBfcm91dGVfbG9jayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKICAgICAgICAgb3VyX2FkZHIgPSBhdGFsa19maW5kX2Rldl9hZGRyKHJ0LT5kZXYpOwpAQCAtMTc2LDEyICsxNzcsMTEgQEAKIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCi0gICAgICAgIGlmKGFhcnBfc2VuZF9kZHAocnQtPmRldiwgc2tiLCAmcnQtPmF0LCBOVUxMKSA8IDApCi0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOworCWFhcnBfc2VuZF9kZHAocnQtPmRldiwgc2tiLCAmcnQtPmF0LCBOVUxMKTsKIAogCXNwaW5fdW5sb2NrKCZpcGRkcF9yb3V0ZV9sb2NrKTsKIAotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCmluZGV4IGI2NDI2NDcuLjA4NzYwYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKKysrIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBsdHBjX3RpbWVyOwogCi1zdGF0aWMgaW50IGx0cGNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBsdHBjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbnQgcmVhZF8zMCAoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC04OTUsNyArODk1LDcgQEAKIAogLyogRERQIHRvIExMQVAgdHJhbnNsYXRpb24gKi8KIAotc3RhdGljIGludCBsdHBjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBsdHBjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBpbiBrZXJuZWwgMS4zLnh4LCBvbiBlbnRyeSBza2ItPmRhdGEgcG9pbnRzIHRvIGRkcCBoZWFkZXIsCiAJICogYW5kIHNrYi0+bGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRkcCBkYXRhICsgZGRwIGhlYWRlcgpAQCAtOTMyLDcgKzkzMiw3IEBACiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBpbml0aWFsaXphdGlvbiBzdHVmZiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCmluZGV4IDdkMjI3Y2RhLi43NWE1NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCkBAIC01OTEsNyArNTkxLDggQEAKIAogCiAvKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCBpbiBvcmRlciB0byB0cmFuc21pdCBhIHBhY2tldC4gKi8KLWludCBhcmNuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFyY2hkciAqcGt0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJpYWRuZS5jIGIvZHJpdmVycy9uZXQvYXJpYWRuZS5jCmluZGV4IDU4ZThkNTIuLmMzNWFmM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyaWFkbmUuYworKysgYi9kcml2ZXJzL25ldC9hcmlhZG5lLmMKQEAgLTExNSw3ICsxMTUsOCBAQAogCiBzdGF0aWMgaW50IGFyaWFkbmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGFyaWFkbmVfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBhcmlhZG5lX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgYXJpYWRuZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhcmlhZG5lX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGFyaWFkbmVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhcmlhZG5lX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNTg5LDcgKzU5MCw4IEBACiB9CiAKIAotc3RhdGljIGludCBhcmlhZG5lX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhcmlhZG5lX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHN0cnVjdCBhcmlhZG5lX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHZvbGF0aWxlIHN0cnVjdCBBbTc5Qzk2MCAqbGFuY2UgPSAoc3RydWN0IEFtNzlDOTYwKilkZXYtPmJhc2VfYWRkcjsKQEAgLTYxMCw3ICs2MTIsNyBAQAogICAgIGlmIChza2ItPmxlbiA8IEVUSF9aTEVOKQogICAgIHsKICAgICAJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLSAgICAJICAgIHJldHVybiAwOworICAgIAkgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKICAgICAJbGVuID0gRVRIX1pMRU47CiAgICAgfQogCkBAIC02ODUsNyArNjg3LDcgQEAKICAgICB9CiAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKaW5kZXggNjI3YmM3NS4uMTY0YjM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKaW5kZXggNTA0MWQxMC4uYzhiYzYwYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYwpAQCAtODM0LDcgKzgzNCw3IEBACiAJCQkJd2UgZnJlZSBhbmQgcmV0dXJuKDApIG9yIGRvbid0IGZyZWUgYW5kIHJldHVybiAxICovCiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCmluZGV4IGZiZjQ2NDUuLjJiZTQ5YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwpAQCAtNzYyLDcgKzc2Miw3IEBACiAJcmV0dXJuIG1paV9saW5rX29rKCZlcC0+bWlpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBlcDkzeHhfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVwOTN4eF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gZXA5M3h4X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gZXA5M3h4X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGVwOTN4eF9zZXRfc2V0dGluZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXRoZXIxLmMgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXIxLmMKaW5kZXggZWRmNzcwZi4uZTQ3YzBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyMS5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcjEuYwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogIG91dDoKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jCmluZGV4IDQ1NTAzNzEuLjFmN2E2OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXIzLmMKQEAgLTUxMSw3ICs1MTEsNyBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXByaXYoZGV2KS0+c3RhdHMudHhfZHJvcHBlZCArKzsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJbGVuZ3RoID0gKGxlbmd0aCArIDEpICYgfjE7CkBAIC01NjIsNyArNTYyLDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAgb3V0OgotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggM2ZlMDk4Ny4uNjkxYjgxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCkBAIC04MDIsNyArODAyLDcgQEAKIAlyZXR1cm4gcGh5X3N0YXJ0X2FuZWcocG9ydC0+cGh5ZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBpeHA0eHhfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4cDR4eF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBpeHA0eHhfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IGl4cDR4eF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IGl4cDR4eF9zZXRfc2V0dGluZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKaW5kZXggMzVjZDI2NC4uMmE3Yjc3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwpAQCAtNDY3LDcgKzQ2Nyw2IEBACiAJCQluZXRpZl9yeChza2IpOwogCiAJCQkvKiBSZWNvcmQgc3RhdHMgKi8KLQkJCW5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCQkJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0bGVuOwogCQkJZ290byByeF9maW5pc2hlZDsKQEAgLTEwNjMsNyArMTA2Miw3IEBACiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGtzODY5NV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMga3M4Njk1X2V0aHRvb2xfb3BzID0gewogCS5nZXRfbXNnbGV2ZWwJPSBrczg2OTVfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJPSBrczg2OTVfc2V0X21zZ2xldmVsLAogCS5nZXRfc2V0dGluZ3MJPSBrczg2OTVfZ2V0X3NldHRpbmdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMKaW5kZXggZGRkMjMxYy4uMjVlMjYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jCkBAIC0xNDMsMTYgKzE0MywxNyBAQAogCiBzdHJ1Y3QgdHJhbl9wZGVzYyB7CiAJc3RydWN0IHc5MHA5MTBfdHhiZCBkZXNjbGlzdFtUWF9ERVNDX1NJWkVdOwotCWNoYXIgdHJhbl9idWZbUlhfREVTQ19TSVpFXVtNQVhfVEJVRkZfU1pdOworCWNoYXIgdHJhbl9idWZbVFhfREVTQ19TSVpFXVtNQVhfVEJVRkZfU1pdOwogfTsKIAogc3RydWN0ICB3OTBwOTEwX2V0aGVyIHsKIAlzdHJ1Y3QgcmVjdl9wZGVzYyAqcmRlc2M7Ci0Jc3RydWN0IHJlY3ZfcGRlc2MgKnJkZXNjX3BoeXM7CiAJc3RydWN0IHRyYW5fcGRlc2MgKnRkZXNjOwotCXN0cnVjdCB0cmFuX3BkZXNjICp0ZGVzY19waHlzOworCWRtYV9hZGRyX3QgcmRlc2NfcGh5czsKKwlkbWFfYWRkcl90IHRkZXNjX3BoeXM7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBjbGsgKmNsazsKIAlzdHJ1Y3QgY2xrICpybWlpY2xrOwpAQCAtMTY5LDcgKzE3MCw2IEBACiAJdW5zaWduZWQgaW50IHN0YXJ0X3R4X3B0cjsKIAl1bnNpZ25lZCBpbnQgc3RhcnRfcnhfcHRyOwogCXVuc2lnbmVkIGludCBsaW5rZmxhZzsKLQlzcGlubG9ja190IGxvY2s7CiB9OwogCiBzdGF0aWMgdm9pZCB1cGRhdGVfbGlua3NwZWVkX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yNzUsNTkgKzI3NSw3NSBAQAogCV9fcmF3X3dyaXRlbChtc3csIGV0aGVyLT5yZWcgKyBSRUdfQ0FNTV9CQVNFICsgeCAqIENBTV9FTlRSWV9TSVpFKTsKIH0KIAotc3RhdGljIHZvaWQgdzkwcDkxMF9pbml0X2Rlc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdzkwcDkxMF9pbml0X2Rlc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdzkwcDkxMF9ldGhlciAqZXRoZXI7Ci0Jc3RydWN0IHc5MHA5MTBfdHhiZCAgKnRkZXNjLCAqdGRlc2NfcGh5czsKLQlzdHJ1Y3QgdzkwcDkxMF9yeGJkICAqcmRlc2MsICpyZGVzY19waHlzOwotCXVuc2lnbmVkIGludCBpLCBqOworCXN0cnVjdCB3OTBwOTEwX3R4YmQgICp0ZGVzYzsKKwlzdHJ1Y3QgdzkwcDkxMF9yeGJkICAqcmRlc2M7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCWV0aGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwZGV2ID0gZXRoZXItPnBkZXY7CiAKIAlldGhlci0+dGRlc2MgPSAoc3RydWN0IHRyYW5fcGRlc2MgKikKLQkJCWRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBzaXplb2Yoc3RydWN0IHRyYW5fcGRlc2MpLAotCQkJCShkbWFfYWRkcl90ICopICZldGhlci0+dGRlc2NfcGh5cywgR0ZQX0tFUk5FTCk7CisJCWRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHRyYW5fcGRlc2MpLAorCQkJCQkmZXRoZXItPnRkZXNjX3BoeXMsIEdGUF9LRVJORUwpOworCisJaWYgKCFldGhlci0+dGRlc2MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdHggZGVzY1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWV0aGVyLT5yZGVzYyA9IChzdHJ1Y3QgcmVjdl9wZGVzYyAqKQotCQkJZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIHNpemVvZihzdHJ1Y3QgcmVjdl9wZGVzYyksCi0JCQkJKGRtYV9hZGRyX3QgKikgJmV0aGVyLT5yZGVzY19waHlzLCBHRlBfS0VSTkVMKTsKKwkJZG1hX2FsbG9jX2NvaGVyZW50KCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgcmVjdl9wZGVzYyksCisJCQkJCSZldGhlci0+cmRlc2NfcGh5cywgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWV0aGVyLT5yZGVzYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByeCBkZXNjXG4iKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCB0cmFuX3BkZXNjKSwKKwkJCQkJZXRoZXItPnRkZXNjLCBldGhlci0+dGRlc2NfcGh5cyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBUWF9ERVNDX1NJWkU7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCiAJCXRkZXNjID0gJihldGhlci0+dGRlc2MtPmRlc2NsaXN0W2ldKTsKIAotCQlqID0gKChpICsgMSkgLyBUWF9ERVNDX1NJWkUpOworCQlpZiAoaSA9PSBUWF9ERVNDX1NJWkUgLSAxKQorCQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRyYW5fcGRlc2MsIGRlc2NsaXN0WzBdKTsKKwkJZWxzZQorCQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRyYW5fcGRlc2MsIGRlc2NsaXN0W2kgKyAxXSk7CiAKLQkJaWYgKGogIT0gMCkgewotCQkJdGRlc2NfcGh5cyA9ICYoZXRoZXItPnRkZXNjX3BoeXMtPmRlc2NsaXN0WzBdKTsKLQkJCWV0aGVyLT5zdGFydF90eF9wdHIgPSAodW5zaWduZWQgaW50KXRkZXNjX3BoeXM7Ci0JCQl0ZGVzYy0+bmV4dCA9ICh1bnNpZ25lZCBpbnQpZXRoZXItPnN0YXJ0X3R4X3B0cjsKLQkJfSBlbHNlIHsKLQkJCXRkZXNjX3BoeXMgPSAmKGV0aGVyLT50ZGVzY19waHlzLT5kZXNjbGlzdFtpKzFdKTsKLQkJCXRkZXNjLT5uZXh0ID0gKHVuc2lnbmVkIGludCl0ZGVzY19waHlzOwotCQl9Ci0KLQkJdGRlc2MtPmJ1ZmZlciA9ICh1bnNpZ25lZCBpbnQpZXRoZXItPnRkZXNjX3BoeXMtPnRyYW5fYnVmW2ldOworCQl0ZGVzYy0+bmV4dCA9IGV0aGVyLT50ZGVzY19waHlzICsgb2Zmc2V0OworCQl0ZGVzYy0+YnVmZmVyID0gZXRoZXItPnRkZXNjX3BoeXMgKworCQkJb2Zmc2V0b2Yoc3RydWN0IHRyYW5fcGRlc2MsIHRyYW5fYnVmW2ldKTsKIAkJdGRlc2MtPnNsID0gMDsKIAkJdGRlc2MtPm1vZGUgPSAwOwogCX0KIAorCWV0aGVyLT5zdGFydF90eF9wdHIgPSBldGhlci0+dGRlc2NfcGh5czsKKwogCWZvciAoaSA9IDA7IGkgPCBSWF9ERVNDX1NJWkU7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCiAJCXJkZXNjID0gJihldGhlci0+cmRlc2MtPmRlc2NsaXN0W2ldKTsKIAotCQlqID0gKChpICsgMSkgLyBSWF9ERVNDX1NJWkUpOworCQlpZiAoaSA9PSBSWF9ERVNDX1NJWkUgLSAxKQorCQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJlY3ZfcGRlc2MsIGRlc2NsaXN0WzBdKTsKKwkJZWxzZQorCQkJb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJlY3ZfcGRlc2MsIGRlc2NsaXN0W2kgKyAxXSk7CiAKLQkJaWYgKGogIT0gMCkgewotCQkJcmRlc2NfcGh5cyA9ICYoZXRoZXItPnJkZXNjX3BoeXMtPmRlc2NsaXN0WzBdKTsKLQkJCWV0aGVyLT5zdGFydF9yeF9wdHIgPSAodW5zaWduZWQgaW50KXJkZXNjX3BoeXM7Ci0JCQlyZGVzYy0+bmV4dCA9ICh1bnNpZ25lZCBpbnQpZXRoZXItPnN0YXJ0X3J4X3B0cjsKLQkJfSBlbHNlIHsKLQkJCXJkZXNjX3BoeXMgPSAmKGV0aGVyLT5yZGVzY19waHlzLT5kZXNjbGlzdFtpKzFdKTsKLQkJCXJkZXNjLT5uZXh0ID0gKHVuc2lnbmVkIGludClyZGVzY19waHlzOwotCQl9Ci0KKwkJcmRlc2MtPm5leHQgPSBldGhlci0+cmRlc2NfcGh5cyArIG9mZnNldDsKIAkJcmRlc2MtPnNsID0gUlhfT1dFTl9ETUE7Ci0JCXJkZXNjLT5idWZmZXIgPSAodW5zaWduZWQgaW50KWV0aGVyLT5yZGVzY19waHlzLT5yZWN2X2J1ZltpXTsKKwkJcmRlc2MtPmJ1ZmZlciA9IGV0aGVyLT5yZGVzY19waHlzICsKKwkJCW9mZnNldG9mKHN0cnVjdCByZWN2X3BkZXNjLCByZWN2X2J1ZltpXSk7CiAJICB9CisKKwlldGhlci0+c3RhcnRfcnhfcHRyID0gZXRoZXItPnJkZXNjX3BoeXM7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdzkwcDkxMF9zZXRfZmlmb190aHJlc2hvbGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQ1Niw4ICs0NzIsNiBAQAogewogCXN0cnVjdCB3OTBwOTEwX2V0aGVyICpldGhlciA9IG5ldGRldl9wcml2KGRldik7CiAKLQlzcGluX2xvY2soJmV0aGVyLT5sb2NrKTsKLQogCXc5MHA5MTBfZW5hYmxlX3R4KGRldiwgMCk7CiAJdzkwcDkxMF9lbmFibGVfcngoZGV2LCAwKTsKIAl3OTBwOTEwX3NldF9maWZvX3RocmVzaG9sZChkZXYpOwpAQCAtNDg2LDggKzUwMCw2IEBACiAKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0KLQlzcGluX3VubG9jaygmZXRoZXItPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCB3OTBwOTEwX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU0MSw3ICs1NTMsNyBAQAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgaW50IHNldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQorc3RhdGljIGludCB3OTBwOTEwX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQogewogCXN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyA9IGFkZHI7CiAKQEAgLTU1NywxMSArNTY5LDE0IEBACiBzdGF0aWMgaW50IHc5MHA5MTBfZXRoZXJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdzkwcDkxMF9ldGhlciAqZXRoZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAKLQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoTlVMTCwgc2l6ZW9mKHN0cnVjdCB3OTBwOTEwX3J4YmQpLAotCQkJCWV0aGVyLT5yZGVzYywgKGRtYV9hZGRyX3QpZXRoZXItPnJkZXNjX3BoeXMpOwotCWRtYV9mcmVlX3dyaXRlY29tYmluZShOVUxMLCBzaXplb2Yoc3RydWN0IHc5MHA5MTBfdHhiZCksCi0JCQkJZXRoZXItPnRkZXNjLCAoZG1hX2FkZHJfdClldGhlci0+dGRlc2NfcGh5cyk7CisJcGRldiA9IGV0aGVyLT5wZGV2OworCisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCByZWN2X3BkZXNjKSwKKwkJCQkJZXRoZXItPnJkZXNjLCBldGhlci0+cmRlc2NfcGh5cyk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCB0cmFuX3BkZXNjKSwKKwkJCQkJZXRoZXItPnRkZXNjLCBldGhlci0+dGRlc2NfcGh5cyk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKQEAgLTU5Nyw2ICs2MTIsNyBAQAogCiAJdHhiZCA9ICZldGhlci0+dGRlc2MtPmRlc2NsaXN0W2V0aGVyLT5jdXJfdHhdOwogCWJ1ZmZlciA9IGV0aGVyLT50ZGVzYy0+dHJhbl9idWZbZXRoZXItPmN1cl90eF07CisKIAlpZiAobGVuZ3RoID4gMTUxNCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzZW5kIGRhdGEgJWQgYnl0ZXMsIGNoZWNrIGl0XG4iLCBsZW5ndGgpOwogCQlsZW5ndGggPSAxNTE0OwpAQCAtNjEyLDcgKzYyOCw5IEBACiAKIAl3OTBwOTEwX3RyaWdnZXJfdHgoZGV2KTsKIAotCWV0aGVyLT5jdXJfdHggPSAoZXRoZXItPmN1cl90eCsxKSAlIFRYX0RFU0NfU0laRTsKKwlpZiAoKytldGhlci0+Y3VyX3R4ID49IFRYX0RFU0NfU0laRSkKKwkJZXRoZXItPmN1cl90eCA9IDA7CisKIAl0eGJkID0gJmV0aGVyLT50ZGVzYy0+ZGVzY2xpc3RbZXRoZXItPmN1cl90eF07CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKQEAgLTYzMiw3ICs2NTAsNyBAQAogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcmV0dXJuIC0xOworCXJldHVybiAtRUFHQUlOOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgdzkwcDkxMF90eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtNjQwLDI3ICs2NTgsMjUgQEAKIAlzdHJ1Y3QgdzkwcDkxMF9ldGhlciAqZXRoZXI7CiAJc3RydWN0IHc5MHA5MTBfdHhiZCAgKnR4YmQ7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQlzdHJ1Y3QgdHJhbl9wZGVzYyAqdHJhbl9wZGVzYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGludCBjdXJfZW50cnksIGVudHJ5LCBzdGF0dXM7CiAKLQlkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CisJZGV2ID0gZGV2X2lkOwogCWV0aGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwZGV2ID0gZXRoZXItPnBkZXY7CiAKLQlzcGluX2xvY2soJmV0aGVyLT5sb2NrKTsKLQogCXc5MHA5MTBfZ2V0X2FuZF9jbGVhcl9pbnQoZGV2LCAmc3RhdHVzKTsKIAogCWN1cl9lbnRyeSA9IF9fcmF3X3JlYWRsKGV0aGVyLT5yZWcgKyBSRUdfQ1RYRFNBKTsKIAotCXRyYW5fcGRlc2MgPSBldGhlci0+dGRlc2NfcGh5czsKLQllbnRyeSA9ICh1bnNpZ25lZCBpbnQpKCZ0cmFuX3BkZXNjLT5kZXNjbGlzdFtldGhlci0+ZmluaXNoX3R4XSk7CisJZW50cnkgPSBldGhlci0+dGRlc2NfcGh5cyArCisJCW9mZnNldG9mKHN0cnVjdCB0cmFuX3BkZXNjLCBkZXNjbGlzdFtldGhlci0+ZmluaXNoX3R4XSk7CiAKIAl3aGlsZSAoZW50cnkgIT0gY3VyX2VudHJ5KSB7CiAJCXR4YmQgPSAmZXRoZXItPnRkZXNjLT5kZXNjbGlzdFtldGhlci0+ZmluaXNoX3R4XTsKIAotCQlldGhlci0+ZmluaXNoX3R4ID0gKGV0aGVyLT5maW5pc2hfdHggKyAxKSAlIFRYX0RFU0NfU0laRTsKKwkJaWYgKCsrZXRoZXItPmZpbmlzaF90eCA+PSBUWF9ERVNDX1NJWkUpCisJCQlldGhlci0+ZmluaXNoX3R4ID0gMDsKIAogCQlpZiAodHhiZC0+c2wgJiBUWERTX1RYQ1ApIHsKIAkJCWV0aGVyLT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC02NzUsMjAgKzY5MSwxOSBAQAogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCi0JCWVudHJ5ID0gKHVuc2lnbmVkIGludCkoJnRyYW5fcGRlc2MtPmRlc2NsaXN0W2V0aGVyLT5maW5pc2hfdHhdKTsKKwkJZW50cnkgPSBldGhlci0+dGRlc2NfcGh5cyArCisJCQlvZmZzZXRvZihzdHJ1Y3QgdHJhbl9wZGVzYywgZGVzY2xpc3RbZXRoZXItPmZpbmlzaF90eF0pOwogCX0KIAogCWlmIChzdGF0dXMgJiBNSVNUQV9FWERFRikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlbWMgZGVmZXIgZXhjZWVkIGludGVycnVwdFxuIik7CiAJfSBlbHNlIGlmIChzdGF0dXMgJiBNSVNUQV9UWEJFUlIpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVtYyBidXMgZXJyb3IgaW50ZXJydXB0XG4iKTsKLQkJCXc5MHA5MTBfcmVzZXRfbWFjKGRldik7Ci0JCX0gZWxzZSBpZiAoc3RhdHVzICYgTUlTVEFfVERVKSB7Ci0JCQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKLQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJfQotCi0Jc3Bpbl91bmxvY2soJmV0aGVyLT5sb2NrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZW1jIGJ1cyBlcnJvciBpbnRlcnJ1cHRcbiIpOworCQl3OTBwOTEwX3Jlc2V0X21hYyhkZXYpOworCX0gZWxzZSBpZiAoc3RhdHVzICYgTUlTVEFfVERVKSB7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNjk4LDIwICs3MTMsMjAgQEAKIAlzdHJ1Y3QgdzkwcDkxMF9ldGhlciAqZXRoZXI7CiAJc3RydWN0IHc5MHA5MTBfcnhiZCAqcnhiZDsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCByZWN2X3BkZXNjICpyZGVzY19waHlzOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKIAl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBzdGF0dXMsIHZhbCwgZW50cnk7CiAKIAlldGhlciA9IG5ldGRldl9wcml2KGRldik7CiAJcGRldiA9IGV0aGVyLT5wZGV2OwotCXJkZXNjX3BoeXMgPSBldGhlci0+cmRlc2NfcGh5czsKIAogCXJ4YmQgPSAmZXRoZXItPnJkZXNjLT5kZXNjbGlzdFtldGhlci0+Y3VyX3J4XTsKIAogCWRvIHsKIAkJdmFsID0gX19yYXdfcmVhZGwoZXRoZXItPnJlZyArIFJFR19DUlhEU0EpOwotCQllbnRyeSA9ICh1bnNpZ25lZCBpbnQpJnJkZXNjX3BoeXMtPmRlc2NsaXN0W2V0aGVyLT5jdXJfcnhdOworCisJCWVudHJ5ID0gZXRoZXItPnJkZXNjX3BoeXMgKworCQkJb2Zmc2V0b2Yoc3RydWN0IHJlY3ZfcGRlc2MsIGRlc2NsaXN0W2V0aGVyLT5jdXJfcnhdKTsKIAogCQlpZiAodmFsID09IGVudHJ5KQogCQkJYnJlYWs7CkBAIC03NDMsMjUgKzc1OCwyNSBAQAogCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInJ4IHJ1bnQgZXJyXG4iKTsKIAkJCQlldGhlci0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBSWERTX0NSQ0UpIHsKLQkJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicnggY3JjIGVyclxuIik7Ci0JCQkJCWV0aGVyLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQkJfQotCi0JCQlpZiAoc3RhdHVzICYgUlhEU19BTElFKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicnggY3JjIGVyclxuIik7CisJCQkJZXRoZXItPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCX0gZWxzZSBpZiAoc3RhdHVzICYgUlhEU19BTElFKSB7CiAJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAicnggYWxpZ21lbnQgZXJyXG4iKTsKIAkJCQlldGhlci0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFJYRFNfUFRMRSkgewotCQkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyeCBsb25nZXIgZXJyXG4iKTsKLQkJCQkJZXRoZXItPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7Ci0JCQkJfQorCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgInJ4IGxvbmdlciBlcnJcbiIpOworCQkJCWV0aGVyLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJfQorCQl9CiAKIAkJcnhiZC0+c2wgPSBSWF9PV0VOX0RNQTsKIAkJcnhiZC0+cmVzZXJ2ZWQgPSAweDA7Ci0JCWV0aGVyLT5jdXJfcnggPSAoZXRoZXItPmN1cl9yeCsxKSAlIFJYX0RFU0NfU0laRTsKKworCQlpZiAoKytldGhlci0+Y3VyX3J4ID49IFJYX0RFU0NfU0laRSkKKwkJCWV0aGVyLT5jdXJfcnggPSAwOworCiAJCXJ4YmQgPSAmZXRoZXItPnJkZXNjLT5kZXNjbGlzdFtldGhlci0+Y3VyX3J4XTsKIAotCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCX0gd2hpbGUgKDEpOwogfQogCkBAIC03NzIsMjggKzc4NywyMyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAotCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlkZXYgPSBkZXZfaWQ7CiAJZXRoZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXBkZXYgPSBldGhlci0+cGRldjsKIAotCXNwaW5fbG9jaygmZXRoZXItPmxvY2spOwotCiAJdzkwcDkxMF9nZXRfYW5kX2NsZWFyX2ludChkZXYsICZzdGF0dXMpOwogCiAJaWYgKHN0YXR1cyAmIE1JU1RBX1JEVSkgewogCQluZXRkZXZfcngoZGV2KTsKLQogCQl3OTBwOTEwX3RyaWdnZXJfcngoZGV2KTsKIAotCQlzcGluX3VubG9jaygmZXRoZXItPmxvY2spOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfSBlbHNlIGlmIChzdGF0dXMgJiBNSVNUQV9SWEJFUlIpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVtYyByeCBidXMgZXJyb3JcbiIpOwotCQkJdzkwcDkxMF9yZXNldF9tYWMoZGV2KTsKLQkJfQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlbWMgcnggYnVzIGVycm9yXG4iKTsKKwkJdzkwcDkxMF9yZXNldF9tYWMoZGV2KTsKKwl9CiAKIAluZXRkZXZfcngoZGV2KTsKLQlzcGluX3VubG9jaygmZXRoZXItPmxvY2spOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtODI2LDYgKzgzNiw3IEBACiAJaWYgKHJlcXVlc3RfaXJxKGV0aGVyLT5yeGlycSwgdzkwcDkxMF9yeF9pbnRlcnJ1cHQsCiAJCQkJCQkweDAsIHBkZXYtPm5hbWUsIGRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXIgaXJxIHJ4IGZhaWxlZFxuIik7CisJCWZyZWVfaXJxKGV0aGVyLT50eGlycSwgZGV2KTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC05MDgsNyArOTE5LDcgQEAKIAkubmRvX3N0YXJ0X3htaXQJCT0gdzkwcDkxMF9ldGhlcl9zdGFydF94bWl0LAogCS5uZG9fZ2V0X3N0YXRzCQk9IHc5MHA5MTBfZXRoZXJfc3RhdHMsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSB3OTBwOTEwX2V0aGVyX3NldF9tdWx0aWNhc3RfbGlzdCwKLQkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHNldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHc5MHA5MTBfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fZG9faW9jdGwJCT0gdzkwcDkxMF9ldGhlcl9pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCkBAIC05NDksOCArOTYwLDYgQEAKIAogCWdldF9tYWNfYWRkcmVzcyhkZXYpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmV0aGVyLT5sb2NrKTsKLQogCWV0aGVyLT5jdXJfdHggPSAweDA7CiAJZXRoZXItPmN1cl9yeCA9IDB4MDsKIAlldGhlci0+ZmluaXNoX3R4ID0gMHgwOwpAQCAtOTcyLDMwICs5ODEsMjkgQEAKIHsKIAlzdHJ1Y3QgdzkwcDkxMF9ldGhlciAqZXRoZXI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyb3I7CiAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHc5MHA5MTBfZXRoZXIpKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmIChyZXMgPT0gTlVMTCkgeworCWV0aGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWV0aGVyLT5yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChldGhlci0+cmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKIAkJZXJyb3IgPSAtRU5YSU87CiAJCWdvdG8gZmFpbGVkX2ZyZWU7CiAJfQogCi0JcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7Ci0JaWYgKHJlcyA9PSBOVUxMKSB7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZXRoZXItPnJlcy0+c3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZShldGhlci0+cmVzKSwgcGRldi0+bmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgSS9PIG1lbW9yeVxuIik7CiAJCWVycm9yID0gLUVCVVNZOwogCQlnb3RvIGZhaWxlZF9mcmVlOwogCX0KIAotCWV0aGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWV0aGVyLT5yZWcgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJZXRoZXItPnJlZyA9IGlvcmVtYXAoZXRoZXItPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoZXRoZXItPnJlcykpOwogCWlmIChldGhlci0+cmVnID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOwogCQllcnJvciA9IC1FTlhJTzsKQEAgLTEwNTYsNyArMTA2NCw3IEBACiBmYWlsZWRfZnJlZV9pbzoKIAlpb3VubWFwKGV0aGVyLT5yZWcpOwogZmFpbGVkX2ZyZWVfbWVtOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihldGhlci0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShldGhlci0+cmVzKSk7CiBmYWlsZWRfZnJlZToKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBlcnJvcjsKQEAgLTEwNjgsMTAgKzEwNzYsMTkgQEAKIAlzdHJ1Y3QgdzkwcDkxMF9ldGhlciAqZXRoZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwogCWNsa19wdXQoZXRoZXItPnJtaWljbGspOwogCWNsa19wdXQoZXRoZXItPmNsayk7CisKKwlpb3VubWFwKGV0aGVyLT5yZWcpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihldGhlci0+cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShldGhlci0+cmVzKSk7CisKKwlmcmVlX2lycShldGhlci0+dHhpcnEsIGRldik7CisJZnJlZV9pcnEoZXRoZXItPnJ4aXJxLCBkZXYpOworCiAJZGVsX3RpbWVyX3N5bmMoJmV0aGVyLT5jaGVja190aW1lcik7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXQxNzAwLmMgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwppbmRleCBjZjMwZTI3Li41NDRkNWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdDE3MDAuYworKysgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwpAQCAtMTU5LDcgKzE1OSw4IEBACiBzdGF0aWMgaW50IGF0MTcwMF9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcik7CiBzdGF0aWMgaW50IHJlYWRfZWVwcm9tKGxvbmcgaW9hZGRyLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIGludCBuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQJbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IG5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IG5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIG5ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNTk1LDcgKzU5Niw4IEBACiB9CiAKIAotc3RhdGljIGludCBuZXRfc2VuZF9wYWNrZXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbmV0X3NlbmRfcGFja2V0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC02NDMsNyArNjQ1LDcgQEAKIAkJbmV0aWZfc3RhcnRfcXVldWUgKGRldik7CiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSB0eXBpY2FsIHdvcmtsb2FkIG9mIHRoZSBkcml2ZXI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKaW5kZXggNTQyNWFiMC4uMGMwZGVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAKIAlpZiAobGVuID4gc2tiLT5sZW4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIGxlbikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKQEAgLTg0Niw3ICs4NDYsNyBAQAogCQlscC0+dHhfZnVsbCA9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmxwLT5kZXZsb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgTEFOQ0UgaW50ZXJydXB0IGhhbmRsZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMKaW5kZXggMDBkMTFiNC4uOWIxZTBlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2V0aHRvb2wuYwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXRsMWNfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF0bDFjX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgICAgICAgICAgID0gYXRsMWNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgICAgICAgICAgID0gYXRsMWNfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gYXRsMWNfZ2V0X2RydmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKaW5kZXggYTM4MzEyMi4uYmUyYzZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwpAQCAtNTM0LDEwICs1MzQsNiBAQAogCQlicmVhazsKIAogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJcmV0dmFsID0gLUVQRVJNOwotCQkJZ290byBvdXQ7Ci0JCX0KIAkJaWYgKGF0bDFjX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIGRhdGEtPnJlZ19udW0gJiAweDFGLAogCQkJCSAgICAmZGF0YS0+dmFsX291dCkpIHsKIAkJCXJldHZhbCA9IC1FSU87CkBAIC01NDYsMTAgKzU0Miw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQlyZXR2YWwgPSAtRVBFUk07Ci0JCQlnb3RvIG91dDsKLQkJfQogCQlpZiAoZGF0YS0+cmVnX251bSAmIH4oMHgxRikpIHsKIAkJCXJldHZhbCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKQEAgLTE3NDAsNyArMTczMiw2IEBACiAJCX0gZWxzZQogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAotCQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkoKndvcmtfZG9uZSkrKzsKIAkJY291bnQrKzsKIAl9CkBAIC0yMDU1LDcgKzIwNDYsOCBAQAogCUFUX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFJFR19NQl9QUklPX1BST0RfSURYLCBwcm9kX2RhdGEpOwogfQogCi1zdGF0aWMgaW50IGF0bDFjX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhdGwxY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYXRsMWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI2NzgsNiArMjY3MCw5IEBACiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWF0bDFjX2Rvd24oYWRhcHRlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2V0aHRvb2wuYwppbmRleCA0MDAzOTU1Li42MGVkYjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfZXRodG9vbC5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBhdGwxZV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXRsMWVfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBhdGwxZV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyAgICAgICAgICAgPSBhdGwxZV9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvICAgICAgICAgICAgPSBhdGwxZV9nZXRfZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwppbmRleCA5ZmM2ZDZkLi42OWI4MzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCkBAIC00NTMsMTAgKzQ1Myw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTSU9DR01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQlyZXR2YWwgPSAtRVBFUk07Ci0JCQlnb3RvIG91dDsKLQkJfQogCQlpZiAoYXRsMWVfcmVhZF9waHlfcmVnKCZhZGFwdGVyLT5odywgZGF0YS0+cmVnX251bSAmIDB4MUYsCiAJCQkJICAgICZkYXRhLT52YWxfb3V0KSkgewogCQkJcmV0dmFsID0gLUVJTzsKQEAgLTQ2NSwxMCArNDYxLDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKLQkJCXJldHZhbCA9IC1FUEVSTTsKLQkJCWdvdG8gb3V0OwotCQl9CiAJCWlmIChkYXRhLT5yZWdfbnVtICYgfigweDFGKSkgewogCQkJcmV0dmFsID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwpAQCAtMTgzOSw3ICsxODMxLDggQEAKIAlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfTUJfVFBEX1BST0RfSURYLCB0eF9yaW5nLT5uZXh0X3RvX3VzZSk7CiB9CiAKLXN0YXRpYyBpbnQgYXRsMWVfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGF0bDFlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjQ5Nyw2ICsyNDkwLDkgQEAKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJYXRsMWVfZG93bihhZGFwdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwppbmRleCA4YmNhMTJmLi4wMDU2OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwpAQCAtMjM0OSw3ICsyMzQ5LDggQEAKIAlhdG9taWNfc2V0KCZ0cGRfcmluZy0+bmV4dF90b191c2UsIG5leHRfdG9fdXNlKTsKIH0KIAotc3RhdGljIGludCBhdGwxX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhdGwxX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGF0bDFfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGF0bDFfdHBkX3JpbmcgKnRwZF9yaW5nID0gJmFkYXB0ZXItPnRwZF9yaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwppbmRleCAyMDRkYjk2Li5hYjY4ODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYwpAQCAtODIxLDcgKzgyMSw4IEBACiAJCShpbnQpICh0eGRfcmVhZF9wdHIgLSBhZGFwdGVyLT50eGRfd3JpdGVfcHRyIC0gMSk7CiB9CiAKLXN0YXRpYyBpbnQgYXRsMl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYXRsMl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhdGwyX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCB0eF9wa3RfaGVhZGVyICp0eHBoOwpAQCAtOTY1LDggKzk2Niw2IEBACiAJCWRhdGEtPnBoeV9pZCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAJCWlmIChhdGwyX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsCiAJCQlkYXRhLT5yZWdfbnVtICYgMHgxRiwgJmRhdGEtPnZhbF9vdXQpKSB7CkBAIC05NzYsOCArOTc1LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c3RhdHNfbG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIFNJT0NTTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoZGF0YS0+cmVnX251bSAmIH4oMHgxRikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKQEAgLTIwOTMsNyArMjA5MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXRsMl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXRsMl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGF0bDJfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gYXRsMl9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IGF0bDJfZ2V0X2RydmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdHAuYyBiL2RyaXZlcnMvbmV0L2F0cC5jCmluZGV4IDQzMTdiM2UuLjkwNDMyOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0cC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0cC5jCkBAIC0xOTksNyArMTk5LDggQEAKIHN0YXRpYyB2b2lkIGhhcmR3YXJlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB3cml0ZV9wYWNrZXQobG9uZyBpb2FkZHIsIGludCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgaW50IHBhZCwgaW50IG1vZGUpOwogc3RhdGljIHZvaWQgdHJpZ2dlcl9zZW5kKGxvbmcgaW9hZGRyLCBpbnQgbGVuZ3RoKTsKLXN0YXRpYyBpbnQJYXRwX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGF0cF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGF0cF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIG5ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJlYWRfYmxvY2sobG9uZyBpb2FkZHIsIGludCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGRhdGFfbW9kZSk7CkBAIC01NTIsNyArNTUzLDggQEAKIAlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogfQogCi1zdGF0aWMgaW50IGF0cF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGF0cF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC01ODcsNyArNTg5LDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2IgKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggZDNjNzM0Zi4uZmRmNTkzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtOTM3LDcgKzkzNyw3IEBACiAvKgogICogQXUxMDAwIHRyYW5zbWl0IHJvdXRpbmUuCiAgKi8KLXN0YXRpYyBpbnQgYXUxMDAwX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYXUxMDAwX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwpAQCAtOTg4LDcgKzk4OCw3IEBACiAJZGV2X2tmcmVlX3NrYihza2IpOwogCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2hlYWQgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTExNTcsNiArMTE1Nyw5IEBACiAJYXVwLT5taWlfYnVzLT5uYW1lID0gImF1MTAwMF9ldGhfbWlpIjsKIAlzbnByaW50ZihhdXAtPm1paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIleCIsIGF1cC0+bWFjX2lkKTsKIAlhdXAtPm1paV9idXMtPmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkqUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXVwLT5taWlfYnVzLT5pcnEgPT0gTlVMTCkKKwkJZ290byBlcnJfb3V0OworCiAJZm9yKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpCiAJCWF1cC0+bWlpX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggYmFmY2E2Ny4uMDE4OWRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTk0Niw3ICs5NDYsNyBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBiNDRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGI0NF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGI0NCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByYyA9IE5FVERFVl9UWF9PSzsKQEAgLTEyOTgsMTQgKzEyOTgsMTggQEAKIAlzd2l0Y2ggKHNkZXYtPmJ1cy0+YnVzdHlwZSkgewogCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgogCQlidzMyKGJwLCBCNDRfTURJT19DVFJMLCAoTURJT19DVFJMX1BSRUFNQkxFIHwKLQkJICAgICAoKChzc2JfY2xvY2tzcGVlZChzZGV2LT5idXMpICsgKEI0NF9NRENfUkFUSU8gLyAyKSkgLyBCNDRfTURDX1JBVElPKQorCQkgICAgIChESVZfUk9VTkRfQ0xPU0VTVChzc2JfY2xvY2tzcGVlZChzZGV2LT5idXMpLAorCQkJCQlCNDRfTURDX1JBVElPKQogCQkgICAgICYgTURJT19DVFJMX01BWEZfTUFTSykpKTsKIAkJYnJlYWs7CiAJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6Ci0JY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CiAJCWJ3MzIoYnAsIEI0NF9NRElPX0NUUkwsIChNRElPX0NUUkxfUFJFQU1CTEUgfAogCQkgICAgICgweDBkICYgTURJT19DVFJMX01BWEZfTUFTSykpKTsKIAkJYnJlYWs7CisJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CisJY2FzZSBTU0JfQlVTVFlQRV9TRElPOgorCQlXQVJOX09OKDEpOyAvKiBBIGRldmljZSB3aXRoIHRoaXMgYnVzIGRvZXMgbm90IGV4aXN0LiAqLworCQlicmVhazsKIAl9CiAKIAlicjMyKGJwLCBCNDRfTURJT19DVFJMKTsKQEAgLTE3NTcsMTUgKzE3NjEsMTggQEAKIAlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGJwLT5zZGV2LT5idXM7CiAKLQlzdHJuY3B5KGluZm8tPmRyaXZlciwgRFJWX01PRFVMRV9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7Ci0Jc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04sIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKKwlzdHJsY3B5KGluZm8tPmRyaXZlciwgRFJWX01PRFVMRV9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CisJc3RybGNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7CiAJc3dpdGNoIChidXMtPmJ1c3R5cGUpIHsKIAljYXNlIFNTQl9CVVNUWVBFX1BDSToKLQkJc3RybmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYnVzLT5ob3N0X3BjaSksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShidXMtPmhvc3RfcGNpKSwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CisJCWJyZWFrOworCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgorCQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCAiU1NCIiwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiAJCWJyZWFrOwogCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgotCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgotCQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCAiU1NCIiwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CisJY2FzZSBTU0JfQlVTVFlQRV9TRElPOgorCQlXQVJOX09OKDEpOyAvKiBBIGRldmljZSB3aXRoIHRoaXMgYnVzIGRvZXMgbm90IGV4aXN0LiAqLwogCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZwppbmRleCBjNjkzNGYxLi5mZGI2ZTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L0tjb25maWcKQEAgLTEsNyArMSw2IEBACiBjb25maWcgQkUyTkVUCiAJdHJpc3RhdGUgIlNlcnZlckVuZ2luZXMnIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIgogCWRlcGVuZHMgb24gUENJICYmIElORVQKLQlzZWxlY3QgSU5FVF9MUk8KIAloZWxwCiAJVGhpcyBkcml2ZXIgaW1wbGVtZW50cyB0aGUgTklDIGZ1bmN0aW9uYWxpdHkgZm9yIFNlcnZlckVuZ2luZXMnCiAJMTBHYnBzIG5ldHdvcmsgYWRhcHRlciAtIEJsYWRlRW5naW5lIDIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAppbmRleCA1YjRiZjNkLi4xM2I3MmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKQEAgLTI4LDExICsyOCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNpbmNsdWRlICJiZV9ody5oIgogCi0jZGVmaW5lIERSVl9WRVIJCQkiMi4wLjM0OCIKKyNkZWZpbmUgRFJWX1ZFUgkJCSIyLjEwMS4yMDUiCiAjZGVmaW5lIERSVl9OQU1FCQkiYmUybmV0IgogI2RlZmluZSBCRV9OQU1FCQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUyIDEwR2JwcyBOSUMiCiAjZGVmaW5lIE9DX05BTUUJCQkiRW11bGV4IE9uZUNvbm5lY3QgMTBHYnBzIE5JQyIKQEAgLTcyLDggKzcyLDcgQEAKICNkZWZpbmUgTUFYX1JYX1BPU1QgCQlCRV9OQVBJX1dFSUdIVCAvKiBGcmFncyBwb3N0ZWQgYXQgYSB0aW1lICovCiAjZGVmaW5lIFJYX0ZSQUdTX1JFRklMTF9XTQkoUlhfUV9MRU4gLSBNQVhfUlhfUE9TVCkKIAotI2RlZmluZSBCRV9NQVhfTFJPX0RFU0NSSVBUT1JTICAxNgotI2RlZmluZSBCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FICAobWluKCh1MzIpIDE2LCAodTMyKSBNQVhfU0tCX0ZSQUdTKSkKKyNkZWZpbmUgRldfVkVSX0xFTgkJMzIKIAogc3RydWN0IGJlX2RtYV9tZW0gewogCXZvaWQgKnZhOwpAQCAtMTI3LDcgKzEyNiw2IEBACiAJaW5kZXhfaW5jKCZxLT50YWlsLCBxLT5sZW4pOwogfQogCi0KIHN0cnVjdCBiZV9lcV9vYmogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CiAJY2hhciBkZXNjWzMyXTsKQEAgLTE0NiwzMSArMTQ0LDYgQEAKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBjcTsKIH07CiAKLXN0cnVjdCBiZV9jdHJsX2luZm8gewotCXU4IF9faW9tZW0gKmNzcjsKLQl1OCBfX2lvbWVtICpkYjsJCS8qIERvb3IgQmVsbCAqLwotCXU4IF9faW9tZW0gKnBjaWNmZzsJLyogUENJIGNvbmZpZyBzcGFjZSAqLwotCWludCBwY2lfZnVuYzsKLQotCS8qIE1ib3ggdXNlZCBmb3IgY21kIHJlcXVlc3QvcmVzcG9uc2UgKi8KLQlzcGlubG9ja190IG1ib3hfbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIG1ib3ggY21kcyB0byBCRSBjYXJkICovCi0Jc3RydWN0IGJlX2RtYV9tZW0gbWJveF9tZW07Ci0JLyogTWJveCBtZW0gaXMgYWRqdXN0ZWQgdG8gYWxpZ24gdG8gMTYgYnl0ZXMuIFRoZSBhbGxvY2F0ZWQgYWRkcgotCSAqIGlzIHN0b3JlZCBmb3IgZnJlZWluZyBwdXJwb3NlICovCi0Jc3RydWN0IGJlX2RtYV9tZW0gbWJveF9tZW1fYWxsb2NlZDsKLQotCS8qIE1DQyBSaW5ncyAqLwotCXN0cnVjdCBiZV9tY2Nfb2JqIG1jY19vYmo7Ci0Jc3BpbmxvY2tfdCBtY2NfbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIG1jYyBjbWRzIHRvIEJFIGNhcmQgKi8KLQlzcGlubG9ja190IG1jY19jcV9sb2NrOwotCi0JLyogTUNDIEFzeW5jIGNhbGxiYWNrICovCi0Jdm9pZCAoKmFzeW5jX2NiKSh2b2lkICphZGFwdGVyLCBib29sIGxpbmtfdXApOwotCXZvaWQgKmFkYXB0ZXJfY3R4dDsKLX07Ci0KLSNpbmNsdWRlICJiZV9jbWRzLmgiCi0KIHN0cnVjdCBiZV9kcnZyX3N0YXRzIHsKIAl1MzIgYmVfdHhfcmVxczsJCS8qIG51bWJlciBvZiBUWCByZXF1ZXN0cyBpbml0aWF0ZWQgKi8KIAl1MzIgYmVfdHhfc3RvcHM7CS8qIG51bWJlciBvZiB0aW1lcyBUWCBRIHdhcyBzdG9wcGVkICovCkBAIC0xODksOCArMTYyLDYgQEAKIAl1MzIgYmVfcG9sbHM7CQkvKiBudW1iZXIgb2YgdGltZXMgTkFQSSBjYWxsZWQgcG9sbCBmdW5jdGlvbiAqLwogCXUzMiBiZV9yeF9ldmVudHM7CS8qIG51bWJlciBvZiB1Y2FzdCByeCBjb21wbGV0aW9uIGV2ZW50cyAgKi8KIAl1MzIgYmVfcnhfY29tcGw7CS8qIG51bWJlciBvZiByeCBjb21wbGV0aW9uIGVudHJpZXMgcHJvY2Vzc2VkICovCi0JdTMyIGJlX2xyb19oZ3JhbV9kYXRhWzhdOwkvKiBoaXN0b2dyYW0gb2YgTFJPIGRhdGEgcGFja2V0cyAqLwotCXUzMiBiZV9scm9faGdyYW1fYWNrWzhdOwkvKiBoaXN0b2dyYW0gb2YgTFJPIEFDS3MgKi8KIAl1bG9uZyBiZV9yeF9qaWZmaWVzOwogCXU2NCBiZV9yeF9ieXRlczsKIAl1NjQgYmVfcnhfYnl0ZXNfcHJldjsKQEAgLTIzMyw4ICsyMDQsNiBAQAogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gY3E7CiAJc3RydWN0IGJlX3J4X3BhZ2VfaW5mbyBwYWdlX2luZm9fdGJsW1JYX1FfTEVOXTsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW0JFX01BWF9MUk9fREVTQ1JJUFRPUlNdOwogfTsKIAogI2RlZmluZSBCRV9OVU1fTVNJWF9WRUNUT1JTCQkyCS8qIDEgZWFjaCBmb3IgVHggYW5kIFJ4ICovCkBAIC0yNDIsOCArMjExLDE5IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAotCS8qIE1ib3gsIHBjaSBjb25maWcsIGNzciBhZGRyZXNzIGluZm9ybWF0aW9uICovCi0Jc3RydWN0IGJlX2N0cmxfaW5mbyBjdHJsOworCXU4IF9faW9tZW0gKmNzcjsKKwl1OCBfX2lvbWVtICpkYjsJCS8qIERvb3IgQmVsbCAqLworCXU4IF9faW9tZW0gKnBjaWNmZzsJLyogUENJIGNvbmZpZyBzcGFjZSAqLworCisJc3BpbmxvY2tfdCBtYm94X2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtYm94IGNtZHMgdG8gQkUgY2FyZCAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtOworCS8qIE1ib3ggbWVtIGlzIGFkanVzdGVkIHRvIGFsaWduIHRvIDE2IGJ5dGVzLiBUaGUgYWxsb2NhdGVkIGFkZHIKKwkgKiBpcyBzdG9yZWQgZm9yIGZyZWVpbmcgcHVycG9zZSAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtX2FsbG9jZWQ7CisKKwlzdHJ1Y3QgYmVfbWNjX29iaiBtY2Nfb2JqOworCXNwaW5sb2NrX3QgbWNjX2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtY2MgY21kcyB0byBCRSBjYXJkICovCisJc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKIAogCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tCRV9OVU1fTVNJWF9WRUNUT1JTXTsKIAlib29sIG1zaXhfZW5hYmxlZDsKQEAgLTI3MSw3ICsyNTEsNiBAQAogCiAJLyogRXRodG9vbCBrbm9icyBhbmQgaW5mbyAqLwogCWJvb2wgcnhfY3N1bTsgCQkvKiBCRSBjYXJkIG11c3QgcGVyZm9ybSByeC1jaGVja3N1bW1pbmcgKi8KLQl1MzIgbWF4X3J4X2NvYWw7CiAJY2hhciBmd192ZXJbRldfVkVSX0xFTl07CiAJdTMyIGlmX2hhbmRsZTsJCS8qIFVzZWQgdG8gY29uZmlndXJlIGZpbHRlcmluZyAqLwogCXUzMiBwbWFjX2lkOwkJLyogTUFDIGFkZHIgaGFuZGxlIHVzZWQgYnkgQkUgY2FyZCAqLwpAQCAtMjgxLDEwICsyNjAsMTUgQEAKIAlib29sIHByb21pc2N1b3VzOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBiZV9ldGh0b29sX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHM7CiAKICNkZWZpbmUgZHJ2cl9zdGF0cyhhZGFwdGVyKQkJKCZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzKQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZV9wY2lfZnVuYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gUENJX0ZVTkMoYWRhcHRlci0+cGRldi0+ZGV2Zm4pOworfQorCiAjZGVmaW5lIEJFX1NFVF9ORVRERVZfT1BTKG5ldGRldiwgb3BzKQkobmV0ZGV2LT5uZXRkZXZfb3BzID0gb3BzKQogCiAjZGVmaW5lIFBBR0VfU0hJRlRfNEsJCTEyCkBAIC0zNzUsNiArMzU5LDggQEAKIAlyZXR1cm4gdmFsOwogfQogCi1leHRlcm4gdm9pZCBiZV9jcV9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHFpZCwgYm9vbCBhcm0sCitleHRlcm4gdm9pZCBiZV9jcV9ub3RpZnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQsIGJvb2wgYXJtLAogCQl1MTYgbnVtX3BvcHBlZCk7CitleHRlcm4gdm9pZCBiZV9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua191cCk7CitleHRlcm4gaW50IGJlX2xvYWRfZncoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmdW5jKTsKICNlbmRpZgkJCQkvKiBCRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKaW5kZXggNTgzNTE3ZWQuLjFkYjA5MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTE2LDIxICsxNiwyMiBAQAogICovCiAKICNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgImJlX2NtZHMuaCIKIAotc3RhdGljIHZvaWQgYmVfbWNjX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQorc3RhdGljIHZvaWQgYmVfbWNjX25vdGlmeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSA9ICZjdHJsLT5tY2Nfb2JqLnE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY3EgPSAmYWRhcHRlci0+bWNjX29iai5xOwogCXUzMiB2YWwgPSAwOwogCiAJdmFsIHw9IG1jY3EtPmlkICYgREJfTUNDUV9SSU5HX0lEX01BU0s7CiAJdmFsIHw9IDEgPDwgREJfTUNDUV9OVU1fUE9TVEVEX1NISUZUOwotCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfTUNDUV9PRkZTRVQpOworCWlvd3JpdGUzMih2YWwsIGFkYXB0ZXItPmRiICsgREJfTUNDUV9PRkZTRVQpOwogfQogCiAvKiBUbyBjaGVjayBpZiB2YWxpZCBiaXQgaXMgc2V0LCBjaGVjayB0aGUgZW50aXJlIHdvcmQgYXMgd2UgZG9uJ3Qga25vdwogICogdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIGRhdGEgKG9sZCBlbnRyeSBpcyBob3N0IGVuZGlhbiB3aGlsZSBhIG5ldyBlbnRyeSBpcwogICogbGl0dGxlIGVuZGlhbikgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBiZV9tY2NfY29tcGxfaXNfbmV3KHN0cnVjdCBiZV9tY2NfY3FfZW50cnkgKmNvbXBsKQorc3RhdGljIGlubGluZSBib29sIGJlX21jY19jb21wbF9pc19uZXcoc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCiB7CiAJaWYgKGNvbXBsLT5mbGFncyAhPSAwKSB7CiAJCWNvbXBsLT5mbGFncyA9IGxlMzJfdG9fY3B1KGNvbXBsLT5mbGFncyk7CkBAIC00MiwxMyArNDMsMTMgQEAKIH0KIAogLyogTmVlZCB0byByZXNldCB0aGUgZW50aXJlIHdvcmQgdGhhdCBob3VzZXMgdGhlIHZhbGlkIGJpdCAqLwotc3RhdGljIGlubGluZSB2b2lkIGJlX21jY19jb21wbF91c2Uoc3RydWN0IGJlX21jY19jcV9lbnRyeSAqY29tcGwpCitzdGF0aWMgaW5saW5lIHZvaWQgYmVfbWNjX2NvbXBsX3VzZShzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKIHsKIAljb21wbC0+ZmxhZ3MgPSAwOwogfQogCi1zdGF0aWMgaW50IGJlX21jY19jb21wbF9wcm9jZXNzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCi0Jc3RydWN0IGJlX21jY19jcV9lbnRyeSAqY29tcGwpCitzdGF0aWMgaW50IGJlX21jY19jb21wbF9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCXN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQogewogCXUxNiBjb21wbF9zdGF0dXMsIGV4dGRfc3RhdHVzOwogCkBAIC02MSw4ICs2Miw4IEBACiAJaWYgKGNvbXBsX3N0YXR1cyAhPSBNQ0NfU1RBVFVTX1NVQ0NFU1MpIHsKIAkJZXh0ZF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0VYVERfU0hJRlQpICYKIAkJCQlDUUVfU1RBVFVTX0VYVERfTUFTSzsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkJIiBlcnJvciBpbiBjbWQgY29tcGxldGlvbjogc3RhdHVzKGNvbXBsL2V4dGQpPSVkLyVkXG4iLAorCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkVycm9yIGluIGNtZCBjb21wbGV0aW9uOiBzdGF0dXMoY29tcGwvZXh0ZCk9JWQvJWRcbiIsCiAJCQljb21wbF9zdGF0dXMsIGV4dGRfc3RhdHVzKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTcwLDExICs3MSwxMSBAQAogfQogCiAvKiBMaW5rIHN0YXRlIGV2dCBpcyBhIHN0cmluZyBvZiBieXRlczsgbm8gbmVlZCBmb3IgZW5kaWFuIHN3YXBwaW5nICovCi1zdGF0aWMgdm9pZCBiZV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK3N0YXRpYyB2b2lkIGJlX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKmV2dCkKIHsKLQljdHJsLT5hc3luY19jYihjdHJsLT5hZGFwdGVyX2N0eHQsCi0JCWV2dC0+cG9ydF9saW5rX3N0YXR1cyA9PSBBU1lOQ19FVkVOVF9MSU5LX1VQID8gdHJ1ZSA6IGZhbHNlKTsKKwliZV9saW5rX3N0YXR1c191cGRhdGUoYWRhcHRlciwKKwkJZXZ0LT5wb3J0X2xpbmtfc3RhdHVzID09IEFTWU5DX0VWRU5UX0xJTktfVVApOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCkBAIC04NCwxMCArODUsMTAgQEAKIAkJCQlBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOwogfQogCi1zdGF0aWMgc3RydWN0IGJlX21jY19jcV9lbnRyeSAqYmVfbWNjX2NvbXBsX2dldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQorc3RhdGljIHN0cnVjdCBiZV9tY2NfY29tcGwgKmJlX21jY19jb21wbF9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY19jcSA9ICZjdHJsLT5tY2Nfb2JqLmNxOwotCXN0cnVjdCBiZV9tY2NfY3FfZW50cnkgKmNvbXBsID0gcXVldWVfdGFpbF9ub2RlKG1jY19jcSk7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKm1jY19jcSA9ICZhZGFwdGVyLT5tY2Nfb2JqLmNxOworCXN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsID0gcXVldWVfdGFpbF9ub2RlKG1jY19jcSk7CiAKIAlpZiAoYmVfbWNjX2NvbXBsX2lzX25ldyhjb21wbCkpIHsKIAkJcXVldWVfdGFpbF9pbmMobWNjX2NxKTsKQEAgLTk2LDU1ICs5Nyw1NSBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGJlX3Byb2Nlc3NfbWNjKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit2b2lkIGJlX3Byb2Nlc3NfbWNjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9tY2NfY3FfZW50cnkgKmNvbXBsOworCXN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsOwogCWludCBudW0gPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZjdHJsLT5tY2NfY3FfbG9jayk7Ci0Jd2hpbGUgKChjb21wbCA9IGJlX21jY19jb21wbF9nZXQoY3RybCkpKSB7CisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfY3FfbG9jayk7CisJd2hpbGUgKChjb21wbCA9IGJlX21jY19jb21wbF9nZXQoYWRhcHRlcikpKSB7CiAJCWlmIChjb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfQVNZTkNfTUFTSykgewogCQkJLyogSW50ZXJwcmV0IGZsYWdzIGFzIGFuIGFzeW5jIHRyYWlsZXIgKi8KIAkJCUJVR19PTighaXNfbGlua19zdGF0ZV9ldnQoY29tcGwtPmZsYWdzKSk7CiAKIAkJCS8qIEludGVycHJldCBjb21wbCBhcyBhIGFzeW5jIGxpbmsgZXZ0ICovCi0JCQliZV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3MoY3RybCwKKwkJCWJlX2FzeW5jX2xpbmtfc3RhdGVfcHJvY2VzcyhhZGFwdGVyLAogCQkJCShzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbGlua19zdGF0ZSAqKSBjb21wbCk7CiAJCX0gZWxzZSB7Ci0JCQliZV9tY2NfY29tcGxfcHJvY2VzcyhjdHJsLCBjb21wbCk7Ci0JCQlhdG9taWNfZGVjKCZjdHJsLT5tY2Nfb2JqLnEudXNlZCk7CisJCQliZV9tY2NfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBjb21wbCk7CisJCQlhdG9taWNfZGVjKCZhZGFwdGVyLT5tY2Nfb2JqLnEudXNlZCk7CiAJCX0KIAkJYmVfbWNjX2NvbXBsX3VzZShjb21wbCk7CiAJCW51bSsrOwogCX0KIAlpZiAobnVtKQotCQliZV9jcV9ub3RpZnkoY3RybCwgY3RybC0+bWNjX29iai5jcS5pZCwgdHJ1ZSwgbnVtKTsKLQlzcGluX3VubG9ja19iaCgmY3RybC0+bWNjX2NxX2xvY2spOworCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgYWRhcHRlci0+bWNjX29iai5jcS5pZCwgdHJ1ZSwgbnVtKTsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2NxX2xvY2spOwogfQogCiAvKiBXYWl0IHRpbGwgbm8gbW9yZSBwZW5kaW5nIG1jYyByZXF1ZXN0cyBhcmUgcHJlc2VudCAqLwotc3RhdGljIHZvaWQgYmVfbWNjX3dhaXRfY29tcGwoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3N0YXRpYyB2b2lkIGJlX21jY193YWl0X2NvbXBsKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogI2RlZmluZSBtY2NfdGltZW91dAkJNTAwMDAgLyogNXMgdGltZW91dCAqLwogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBtY2NfdGltZW91dDsgaSsrKSB7Ci0JCWJlX3Byb2Nlc3NfbWNjKGN0cmwpOwotCQlpZiAoYXRvbWljX3JlYWQoJmN0cmwtPm1jY19vYmoucS51c2VkKSA9PSAwKQorCQliZV9wcm9jZXNzX21jYyhhZGFwdGVyKTsKKwkJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5tY2Nfb2JqLnEudXNlZCkgPT0gMCkKIAkJCWJyZWFrOwogCQl1ZGVsYXkoMTAwKTsKIAl9CiAJaWYgKGkgPT0gbWNjX3RpbWVvdXQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIm1jYyBwb2xsIHRpbWVkIG91dFxuIik7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIm1jY3EgcG9sbCB0aW1lZCBvdXRcbiIpOwogfQogCiAvKiBOb3RpZnkgTUNDIHJlcXVlc3RzIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovCi1zdGF0aWMgdm9pZCBiZV9tY2Nfbm90aWZ5X3dhaXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3N0YXRpYyB2b2lkIGJlX21jY19ub3RpZnlfd2FpdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQliZV9tY2Nfbm90aWZ5KGN0cmwpOwotCWJlX21jY193YWl0X2NvbXBsKGN0cmwpOworCWJlX21jY19ub3RpZnkoYWRhcHRlcik7CisJYmVfbWNjX3dhaXRfY29tcGwoYWRhcHRlcik7CiB9CiAKLXN0YXRpYyBpbnQgYmVfbWJveF9kYl9yZWFkeV93YWl0KHZvaWQgX19pb21lbSAqZGIpCitzdGF0aWMgaW50IGJlX21ib3hfZGJfcmVhZHlfd2FpdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdm9pZCBfX2lvbWVtICpkYikKIHsKIAlpbnQgY250ID0gMCwgd2FpdCA9IDU7CiAJdTMyIHJlYWR5OwpAQCAtMTU0LDkgKzE1NSw4IEBACiAJCWlmIChyZWFkeSkKIAkJCWJyZWFrOwogCi0JCWlmIChjbnQgPiAyMDAwMDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCQkiOiBtYm94X2RiIHBvbGwgdGltZWQgb3V0XG4iKTsKKwkJaWYgKGNudCA+IDQwMDAwMDApIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIm1ib3ggcG9sbCB0aW1lZCBvdXRcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAKQEAgLTE3Myw1NSArMTczLDUyIEBACiAgKiBJbnNlcnQgdGhlIG1haWxib3ggYWRkcmVzcyBpbnRvIHRoZSBkb29yYmVsbCBpbiB0d28gc3RlcHMKICAqIFBvbGxzIG9uIHRoZSBtYm94IGRvb3JiZWxsIHRpbGwgYSBjb21tYW5kIGNvbXBsZXRpb24gKG9yIGEgdGltZW91dCkgb2NjdXJzCiAgKi8KLXN0YXRpYyBpbnQgYmVfbWJveF9kYl9yaW5nKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCitzdGF0aWMgaW50IGJlX21ib3hfbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBzdGF0dXM7CiAJdTMyIHZhbCA9IDA7Ci0Jdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOwotCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSA9ICZjdHJsLT5tYm94X21lbTsKKwl2b2lkIF9faW9tZW0gKmRiID0gYWRhcHRlci0+ZGIgKyBNUFVfTUFJTEJPWF9EQl9PRkZTRVQ7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtID0gJmFkYXB0ZXItPm1ib3hfbWVtOwogCXN0cnVjdCBiZV9tY2NfbWFpbGJveCAqbWJveCA9IG1ib3hfbWVtLT52YTsKLQlzdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5ICpjcWUgPSAmbWJveC0+Y3FlOworCXN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsID0gJm1ib3gtPmNvbXBsOwogCi0JbWVtc2V0KGNxZSwgMCwgc2l6ZW9mKCpjcWUpKTsKKwltZW1zZXQoY29tcGwsIDAsIHNpemVvZigqY29tcGwpKTsKIAotCXZhbCAmPSB+TVBVX01BSUxCT1hfREJfUkRZX01BU0s7CiAJdmFsIHw9IE1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CiAJLyogYXQgYml0cyAyIC0gMzEgcGxhY2UgbWJveCBkbWEgYWRkciBtc2IgYml0cyAzNCAtIDYzICovCiAJdmFsIHw9ICh1cHBlcl8zMl9iaXRzKG1ib3hfbWVtLT5kbWEpID4+IDIpIDw8IDI7CiAJaW93cml0ZTMyKHZhbCwgZGIpOwogCiAJLyogd2FpdCBmb3IgcmVhZHkgdG8gYmUgc2V0ICovCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGRiKTsKKwlzdGF0dXMgPSBiZV9tYm94X2RiX3JlYWR5X3dhaXQoYWRhcHRlciwgZGIpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJcmV0dXJuIHN0YXR1czsKIAogCXZhbCA9IDA7Ci0JdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKLQl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CiAJLyogYXQgYml0cyAyIC0gMzEgcGxhY2UgbWJveCBkbWEgYWRkciBsc2IgYml0cyA0IC0gMzMgKi8KIAl2YWwgfD0gKHUzMikobWJveF9tZW0tPmRtYSA+PiA0KSA8PCAyOwogCWlvd3JpdGUzMih2YWwsIGRiKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChkYik7CisJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGFkYXB0ZXIsIGRiKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCXJldHVybiBzdGF0dXM7CiAKIAkvKiBBIGNxIGVudHJ5IGhhcyBiZWVuIG1hZGUgbm93ICovCi0JaWYgKGJlX21jY19jb21wbF9pc19uZXcoY3FlKSkgewotCQlzdGF0dXMgPSBiZV9tY2NfY29tcGxfcHJvY2VzcyhjdHJsLCAmbWJveC0+Y3FlKTsKLQkJYmVfbWNjX2NvbXBsX3VzZShjcWUpOworCWlmIChiZV9tY2NfY29tcGxfaXNfbmV3KGNvbXBsKSkgeworCQlzdGF0dXMgPSBiZV9tY2NfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCAmbWJveC0+Y29tcGwpOworCQliZV9tY2NfY29tcGxfdXNlKGNvbXBsKTsKIAkJaWYgKHN0YXR1cykKIAkJCXJldHVybiBzdGF0dXM7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiaW52YWxpZCBtYWlsYm94IGNvbXBsZXRpb25cbiIpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJpbnZhbGlkIG1haWxib3ggY29tcGxldGlvblxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmVfUE9TVF9zdGFnZV9nZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2ICpzdGFnZSkKK3N0YXRpYyBpbnQgYmVfUE9TVF9zdGFnZV9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiAqc3RhZ2UpCiB7Ci0JdTMyIHNlbSA9IGlvcmVhZDMyKGN0cmwtPmNzciArIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUKTsKKwl1MzIgc2VtID0gaW9yZWFkMzIoYWRhcHRlci0+Y3NyICsgTVBVX0VQX1NFTUFQSE9SRV9PRkZTRVQpOwogCiAJKnN0YWdlID0gc2VtICYgRVBfU0VNQVBIT1JFX1BPU1RfU1RBR0VfTUFTSzsKIAlpZiAoKHNlbSA+PiBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfU0hJRlQpICYgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX01BU0spCkBAIC0yMzAsNTQgKzIyNywxNyBAQAogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZV9QT1NUX3N0YWdlX3BvbGwoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHBvbGxfc3RhZ2UpCi17Ci0JdTE2IHN0YWdlLCBjbnQsIGVycm9yOwotCWZvciAoY250ID0gMDsgY250IDwgNTAwMDsgY250KyspIHsKLQkJZXJyb3IgPSBiZV9QT1NUX3N0YWdlX2dldChjdHJsLCAmc3RhZ2UpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJaWYgKHN0YWdlID09IHBvbGxfc3RhZ2UpCi0JCQlicmVhazsKLQkJdWRlbGF5KDEwMDApOwotCX0KLQlpZiAoc3RhZ2UgIT0gcG9sbF9zdGFnZSkKLQkJcmV0dXJuIC0xOwotCXJldHVybiAwOwotfQotCi0KLWludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoraW50IGJlX2NtZF9QT1NUKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXUxNiBzdGFnZSwgZXJyb3I7CiAKLQllcnJvciA9IGJlX1BPU1Rfc3RhZ2VfZ2V0KGN0cmwsICZzdGFnZSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycjsKLQotCWlmIChzdGFnZSA9PSBQT1NUX1NUQUdFX0FSTUZXX1JEWSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3RhZ2UgIT0gUE9TVF9TVEFHRV9BV0FJVElOR19IT1NUX1JEWSkKLQkJZ290byBlcnI7Ci0KLQkvKiBPbiBhd2FpdGluZyBob3N0IHJkeSwgcmVzZXQgYW5kIGFnYWluIHBvbGwgb24gYXdhaXRpbmcgaG9zdCByZHkgKi8KLQlpb3dyaXRlMzIoUE9TVF9TVEFHRV9CRV9SRVNFVCwgY3RybC0+Y3NyICsgTVBVX0VQX1NFTUFQSE9SRV9PRkZTRVQpOwotCWVycm9yID0gYmVfUE9TVF9zdGFnZV9wb2xsKGN0cmwsIFBPU1RfU1RBR0VfQVdBSVRJTkdfSE9TVF9SRFkpOwotCWlmIChlcnJvcikKLQkJZ290byBlcnI7Ci0KLQkvKiBOb3cga2lja29mZiBQT1NUIGFuZCBwb2xsIG9uIGFybWZ3IHJlYWR5ICovCi0JaW93cml0ZTMyKFBPU1RfU1RBR0VfSE9TVF9SRFksIGN0cmwtPmNzciArIE1QVV9FUF9TRU1BUEhPUkVfT0ZGU0VUKTsKLQllcnJvciA9IGJlX1BPU1Rfc3RhZ2VfcG9sbChjdHJsLCBQT1NUX1NUQUdFX0FSTUZXX1JEWSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycjsKKwllcnJvciA9IGJlX1BPU1Rfc3RhZ2VfZ2V0KGFkYXB0ZXIsICZzdGFnZSk7CisJaWYgKGVycm9yIHx8IHN0YWdlICE9IFBPU1RfU1RBR0VfQVJNRldfUkRZKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBPU1QgZmFpbGVkLlxuIik7CisJCXJldHVybiAtMTsKKwl9CiAKIAlyZXR1cm4gMDsKLWVycjoKLQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IEVSUk9SLCBzdGFnZT0lZFxuIiwgc3RhZ2UpOwotCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICplbWJlZGRlZF9wYXlsb2FkKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIpCkBAIC0zNjcsMTYgKzMyNywxNiBAQAogCXJldHVybiB3cmI7CiB9CiAKLWludCBiZV9jbWRfZXFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitpbnQgYmVfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2VxX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCXN0cnVjdCBiZV9jbWRfcmVzcF9lcV9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmVxLT5kbWFfbWVtOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtMzg3LDcgKzM0Nyw3IEBACiAJcmVxLT5udW1fcGFnZXMgPSAgY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CiAKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGZ1bmMsIHJlcS0+Y29udGV4dCwKLQkJCWN0cmwtPnBjaV9mdW5jKTsKKwkJCWJlX3BjaV9mdW5jKGFkYXB0ZXIpKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIHZhbGlkLCByZXEtPmNvbnRleHQsIDEpOwogCS8qIDRieXRlIGVxZSovCiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBzaXplLCByZXEtPmNvbnRleHQsIDApOwpAQCAtMzk5LDI0ICszNTksMjQgQEAKIAogCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCWVxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmVxX2lkKTsKIAkJZXEtPmNyZWF0ZWQgPSB0cnVlOwogCX0KLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX21hY19hZGRyX3F1ZXJ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkciwKK2ludCBiZV9jbWRfbWFjX2FkZHJfcXVlcnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWNfYWRkciwKIAkJCXU4IHR5cGUsIGJvb2wgcGVybWFuZW50LCB1MzIgaWZfaGFuZGxlKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9tYWNfcXVlcnkgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlzdHJ1Y3QgYmVfY21kX3Jlc3BfbWFjX3F1ZXJ5ICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtNDMyLDIyICszOTIsMjIgQEAKIAkJcmVxLT5wZXJtYW5lbnQgPSAwOwogCX0KIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykKIAkJbWVtY3B5KG1hY19hZGRyLCByZXNwLT5tYWMuYWRkciwgRVRIX0FMRU4pOwogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9wbWFjX2FkZChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIsCitpbnQgYmVfY21kX3BtYWNfYWRkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjX2FkZHIsCiAJCXUzMiBpZl9pZCwgdTMyICpwbWFjX2lkKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9wbWFjX2FkZCAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtNDU4LDIzICs0MTgsMjMgQEAKIAlyZXEtPmlmX2lkID0gY3B1X3RvX2xlMzIoaWZfaWQpOwogCW1lbWNweShyZXEtPm1hY19hZGRyZXNzLCBtYWNfYWRkciwgRVRIX0FMRU4pOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9wbWFjX2FkZCAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAkJKnBtYWNfaWQgPSBsZTMyX3RvX2NwdShyZXNwLT5wbWFjX2lkKTsKIAl9CiAKLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX3BtYWNfZGVsKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9pZCwgdTMyIHBtYWNfaWQpCitpbnQgYmVfY21kX3BtYWNfZGVsKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsIHUzMiBwbWFjX2lkKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9wbWFjX2RlbCAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtNDg1LDI0ICs0NDUsMjQgQEAKIAlyZXEtPmlmX2lkID0gY3B1X3RvX2xlMzIoaWZfaWQpOwogCXJlcS0+cG1hY19pZCA9IGNwdV90b19sZTMyKHBtYWNfaWQpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOwotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2ludCBiZV9jbWRfY3FfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcSwKIAkJYm9vbCBzb2xfZXZ0cywgYm9vbCBub19kZWxheSwgaW50IGNvYWxlc2NlX3dtKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9jcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlzdHJ1Y3QgYmVfY21kX3Jlc3BfY3FfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZjcS0+ZG1hX21lbTsKIAl2b2lkICpjdHh0ID0gJnJlcS0+Y29udGV4dDsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTUyMSwxNyArNDgxLDE3IEBACiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBldmVudGFibGUsIGN0eHQsIDEpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXFpZCwgY3R4dCwgZXEtPmlkKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGFybWVkLCBjdHh0LCAxKTsKLQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGZ1bmMsIGN0eHQsIGN0cmwtPnBjaV9mdW5jKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGZ1bmMsIGN0eHQsIGJlX3BjaV9mdW5jKGFkYXB0ZXIpKTsKIAliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKIAogCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCWNxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNxX2lkKTsKIAkJY3EtPmNyZWF0ZWQgPSB0cnVlOwogCX0KLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC01NDQsMTcgKzUwNCwxNyBAQAogCXJldHVybiBsZW5fZW5jb2RlZDsKIH0KIAotaW50IGJlX2NtZF9tY2NxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAoraW50IGJlX2NtZF9tY2NxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICptY2NxLAogCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9tY2NfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJm1jY3EtPmRtYV9tZW07CiAJdm9pZCAqY3R4dCA9ICZyZXEtPmNvbnRleHQ7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CkBAIC01NjQsNyArNTI0LDcgQEAKIAogCXJlcS0+bnVtX3BhZ2VzID0gUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKTsKIAotCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbWNjX2NvbnRleHQsIGZpZCwgY3R4dCwgY3RybC0+cGNpX2Z1bmMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbWNjX2NvbnRleHQsIGZpZCwgY3R4dCwgYmVfcGNpX2Z1bmMoYWRhcHRlcikpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfbWNjX2NvbnRleHQsIHZhbGlkLCBjdHh0LCAxKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX21jY19jb250ZXh0LCByaW5nX3NpemUsIGN0eHQsCiAJCWJlX2VuY29kZWRfcV9sZW4obWNjcS0+bGVuKSk7CkBAIC01NzQsMjkgKzUzNCwyOSBAQAogCiAJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJc3RydWN0IGJlX2NtZF9yZXNwX21jY19jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJCW1jY3EtPmlkID0gbGUxNl90b19jcHUocmVzcC0+aWQpOwogCQltY2NxLT5jcmVhdGVkID0gdHJ1ZTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX3R4cV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2ludCBiZV9jbWRfdHhxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2V0aF90eF9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmdHhxLT5kbWFfbWVtOwogCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OwogCWludCBzdGF0dXM7CiAJdTMyIGxlbl9lbmNvZGVkOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTYxMyw3ICs1NzMsNyBAQAogCQlsZW5fZW5jb2RlZCA9IDA7CiAJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF90eF9jb250ZXh0LCB0eF9yaW5nX3NpemUsIGN0eHQsIGxlbl9lbmNvZGVkKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3R4X2NvbnRleHQsIHBjaV9mdW5jX2lkLCBjdHh0LAotCQkJY3RybC0+cGNpX2Z1bmMpOworCQkJYmVfcGNpX2Z1bmMoYWRhcHRlcikpOwogCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfdHhfY29udGV4dCwgY3R4X3ZhbGlkLCBjdHh0LCAxKTsKIAlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX3R4X2NvbnRleHQsIGNxX2lkX3NlbmQsIGN0eHQsIGNxLT5pZCk7CiAKQEAgLTYyMSwyNyArNTgxLDI3IEBACiAKIAliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXRoX3R4X2NyZWF0ZSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAkJdHhxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNpZCk7CiAJCXR4cS0+Y3JlYXRlZCA9IHRydWU7CiAJfQotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9yeHFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitpbnQgYmVfY21kX3J4cV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEsIHUxNiBjcV9pZCwgdTE2IGZyYWdfc2l6ZSwKIAkJdTE2IG1heF9mcmFtZV9zaXplLCB1MzIgaWZfaWQsIHUzMiByc3MpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2V0aF9yeF9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0gPSAmcnhxLT5kbWFfbWVtOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtNjU3LDI3ICs2MTcsMjcgQEAKIAlyZXEtPm1heF9mcmFtZV9zaXplID0gY3B1X3RvX2xlMTYobWF4X2ZyYW1lX3NpemUpOwogCXJlcS0+cnNzX3F1ZXVlID0gY3B1X3RvX2xlMzIocnNzKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXRoX3J4X2NyZWF0ZSAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAkJcnhxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmlkKTsKIAkJcnhxLT5jcmVhdGVkID0gdHJ1ZTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKiBHZW5lcmljIGRlc3Ryb3llciBmdW5jdGlvbiBmb3IgYWxsIHR5cGVzIG9mIHF1ZXVlcyAqLwotaW50IGJlX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCitpbnQgYmVfY21kX3FfZGVzdHJveShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCiAJCWludCBxdWV1ZV90eXBlKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9xX2Rlc3Ryb3kgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAl1OCBzdWJzeXMgPSAwLCBvcGNvZGUgPSAwOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtNzA0LDI5ICs2NjQsMjcgQEAKIAkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9NQ0NfREVTVFJPWTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOmJhZCBRIHR5cGUgaW4gUSBkZXN0cm95IGNtZFxuIik7Ci0JCXN0YXR1cyA9IC0xOwotCQlnb3RvIGVycjsKKwkJQlVHKCk7CiAJfQogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIHN1YnN5cywgb3Bjb2RlLCBzaXplb2YoKnJlcSkpOwogCXJlcS0+aWQgPSBjcHVfdG9fbGUxNihxLT5pZCk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7Ci1lcnI6Ci0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CisKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qIENyZWF0ZSBhbiByeCBmaWx0ZXJpbmcgcG9saWN5IGNvbmZpZ3VyYXRpb24gb24gYW4gaS9mICovCi1pbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgZmxhZ3MsIHU4ICptYWMsCitpbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGZsYWdzLCB1OCAqbWFjLAogCQlib29sIHBtYWNfaW52YWxpZCwgdTMyICppZl9oYW5kbGUsIHUzMiAqcG1hY19pZCkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfaWZfY3JlYXRlICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CkBAIC03MzksNyArNjk3LDcgQEAKIAlpZiAoIXBtYWNfaW52YWxpZCkKIAkJbWVtY3B5KHJlcS0+bWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9pZl9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJCSppZl9oYW5kbGUgPSBsZTMyX3RvX2NwdShyZXNwLT5pbnRlcmZhY2VfaWQpOwpAQCAtNzQ3LDE3ICs3MDUsMTcgQEAKIAkJCSpwbWFjX2lkID0gbGUzMl90b19jcHUocmVzcC0+cG1hY19pZCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9pZl9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpbnRlcmZhY2VfaWQpCitpbnQgYmVfY21kX2lmX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpbnRlcmZhY2VfaWQpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2lmX2Rlc3Ryb3kgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKQEAgLTc2Niw5ICs3MjQsOSBAQAogCQlPUENPREVfQ09NTU9OX05UV0tfSU5URVJGQUNFX0RFU1RST1ksIHNpemVvZigqcmVxKSk7CiAKIAlyZXEtPmludGVyZmFjZV9pZCA9IGNwdV90b19sZTMyKGludGVyZmFjZV9pZCk7Ci0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNzc2LDE0ICs3MzQsMTQgQEAKIC8qIEdldCBzdGF0cyBpcyBhIG5vbiBlbWJlZGRlZCBjb21tYW5kOiB0aGUgcmVxdWVzdCBpcyBub3QgZW1iZWRkZWQgaW5zaWRlCiAgKiBXUkIgYnV0IGlzIGEgc2VwYXJhdGUgZG1hIG1lbW9yeSBibG9jawogICovCi1pbnQgYmVfY21kX2dldF9zdGF0cyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCkKK2ludCBiZV9jbWRfZ2V0X3N0YXRzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfZ2V0X3N0YXRzICpyZXEgPSBub25lbWJfY21kLT52YTsKIAlzdHJ1Y3QgYmVfc2dlICpzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCiAJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKQEAgLTc5NiwyNCArNzU0LDI0IEBACiAJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPmRtYSAmIDB4RkZGRkZGRkYpOwogCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+c2l6ZSk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9zdGF0cyAqcmVzcCA9IG5vbmVtYl9jbWQtPnZhOwogCQliZV9kd3NfbGVfdG9fY3B1KCZyZXNwLT5od19zdGF0cywgc2l6ZW9mKHJlc3AtPmh3X3N0YXRzKSk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAoraW50IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCWJvb2wgKmxpbmtfdXApCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2xpbmtfc3RhdHVzICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAkqbGlua191cCA9IGZhbHNlOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CkBAIC04MjMsMjQgKzc4MSwyNCBAQAogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAogCQlPUENPREVfQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlksIHNpemVvZigqcmVxKSk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJc3RydWN0IGJlX2NtZF9yZXNwX2xpbmtfc3RhdHVzICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCQlpZiAocmVzcC0+bWFjX3NwZWVkICE9IFBIWV9MSU5LX1NQRUVEX1pFUk8pCiAJCQkqbGlua191cCA9IHRydWU7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9nZXRfZndfdmVyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIGNoYXIgKmZ3X3ZlcikKK2ludCBiZV9jbWRfZ2V0X2Z3X3ZlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqZndfdmVyKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfZndfdmVyc2lvbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtODQ4LDI0ICs4MDYsMjQgQEAKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKIAkJT1BDT0RFX0NPTU1PTl9HRVRfRldfVkVSU0lPTiwgc2l6ZW9mKCpyZXEpKTsKIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAlpZiAoIXN0YXR1cykgewogCQlzdHJ1Y3QgYmVfY21kX3Jlc3BfZ2V0X2Z3X3ZlcnNpb24gKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJCXN0cm5jcHkoZndfdmVyLCByZXNwLT5maXJtd2FyZV92ZXJzaW9uX3N0cmluZywgRldfVkVSX0xFTik7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogLyogc2V0IHRoZSBFUSBkZWxheSBpbnRlcnZhbCBvZiBhbiBFUSB0byBzcGVjaWZpZWQgdmFsdWUgKi8KLWludCBiZV9jbWRfbW9kaWZ5X2VxZChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgZXFfaWQsIHUzMiBlcWQpCitpbnQgYmVfY21kX21vZGlmeV9lcWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBlcV9pZCwgdTMyIGVxZCkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfbW9kaWZ5X2VxX2RlbGF5ICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIAogCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CkBAIC04NzgsMjAgKzgzNiwyMCBAQAogCXJlcS0+ZGVsYXlbMF0ucGhhc2UgPSAwOwogCXJlcS0+ZGVsYXlbMF0uZGVsYXlfbXVsdGlwbGllciA9IGNwdV90b19sZTMyKGVxZCk7CiAKLQlzdGF0dXMgPSBiZV9tYm94X2RiX3JpbmcoY3RybCk7CisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CiAKLQlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX3ZsYW5fY29uZmlnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9pZCwgdTE2ICp2dGFnX2FycmF5LAoraW50IGJlX2NtZF92bGFuX2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLCB1MTYgKnZ0YWdfYXJyYXksCiAJCQl1MzIgbnVtLCBib29sIHVudGFnZ2VkLCBib29sIHByb21pc2N1b3VzKQogewotCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmFkYXB0ZXItPm1ib3hfbWVtKTsKIAlzdHJ1Y3QgYmVfY21kX3JlcV92bGFuX2NvbmZpZyAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKIAliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOwpAQCAtOTA4LDIxICs4NjYsMjEgQEAKIAkJCXJlcS0+bnVtX3ZsYW4gKiBzaXplb2YodnRhZ19hcnJheVswXSkpOwogCX0KIAotCXN0YXR1cyA9IGJlX21ib3hfZGJfcmluZyhjdHJsKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShhZGFwdGVyKTsKIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKIC8qIFVzZSBNQ0MgZm9yIHRoaXMgY29tbWFuZCBhcyBpdCBtYXkgYmUgY2FsbGVkIGluIEJIIGNvbnRleHQgKi8KLWludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4IHBvcnRfbnVtLCBib29sIGVuKQoraW50IGJlX2NtZF9wcm9taXNjdW91c19jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHBvcnRfbnVtLCBib29sIGVuKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF9yZXFfcHJvbWlzY3VvdXNfY29uZmlnICpyZXE7CiAKLQlzcGluX2xvY2tfYmgoJmN0cmwtPm1jY19sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIAotCXdyYiA9IHdyYl9mcm9tX21jYygmY3RybC0+bWNjX29iai5xKTsKKwl3cmIgPSB3cmJfZnJvbV9tY2MoJmFkYXB0ZXItPm1jY19vYmoucSk7CiAJQlVHX09OKCF3cmIpOwogCiAJcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwpAQCAtOTM3LDkgKzg5NSw5IEBACiAJZWxzZQogCQlyZXEtPnBvcnQwX3Byb21pc2N1b3VzID0gZW47CiAKLQliZV9tY2Nfbm90aWZ5X3dhaXQoY3RybCk7CisJYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOwogCi0Jc3Bpbl91bmxvY2tfYmgoJmN0cmwtPm1jY19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC05NDcsMTYgKzkwNSwxNiBAQAogICogVXNlIE1DQyBmb3IgdGhpcyBjb21tYW5kIGFzIGl0IG1heSBiZSBjYWxsZWQgaW4gQkggY29udGV4dAogICogKG1jID09IE5VTEwpID0+IG11bHRpY2FzdCBwcm9taXNjb3VzCiAgKi8KLWludCBiZV9jbWRfbXVsdGljYXN0X3NldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsCitpbnQgYmVfY21kX211bHRpY2FzdF9zZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwKIAkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0LCB1MzIgbWNfY291bnQpCiB7CiAjZGVmaW5lIEJFX01BWF9NQwkJMzIgLyogc2V0IG1jYXN0IHByb21pc2MgaWYgPiAzMiAqLwogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF9yZXFfbWNhc3RfbWFjX2NvbmZpZyAqcmVxOwogCi0Jc3Bpbl9sb2NrX2JoKCZjdHJsLT5tY2NfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAKLQl3cmIgPSB3cmJfZnJvbV9tY2MoJmN0cmwtPm1jY19vYmoucSk7CisJd3JiID0gd3JiX2Zyb21fbWNjKCZhZGFwdGVyLT5tY2Nfb2JqLnEpOwogCUJVR19PTighd3JiKTsKIAogCXJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKQEAgLTk3OSwyMCArOTM3LDIwIEBACiAJCXJlcS0+cHJvbWlzY3VvdXMgPSAxOwogCX0KIAotCWJlX21jY19ub3RpZnlfd2FpdChjdHJsKTsKKwliZV9tY2Nfbm90aWZ5X3dhaXQoYWRhcHRlcik7CiAKLQlzcGluX3VubG9ja19iaCgmY3RybC0+bWNjX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiB0eF9mYywgdTMyIHJ4X2ZjKQoraW50IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdHhfZmMsIHUzMiByeF9mYykKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfc2V0X2Zsb3dfY29udHJvbCAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKIApAQCAtMTAwNCwxOSArOTYyLDE5IEBACiAJcmVxLT50eF9mbG93X2NvbnRyb2wgPSBjcHVfdG9fbGUxNigodTE2KXR4X2ZjKTsKIAlyZXEtPnJ4X2Zsb3dfY29udHJvbCA9IGNwdV90b19sZTE2KCh1MTYpcnhfZmMpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IGJlX2NtZF9nZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiAqdHhfZmMsIHUzMiAqcnhfZmMpCitpbnQgYmVfY21kX2dldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqdHhfZmMsIHUzMiAqcnhfZmMpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOwogCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9mbG93X2NvbnRyb2wgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKIAlpbnQgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKIAogCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CiAKQEAgLTEwMjUsNyArOTgzLDcgQEAKIAliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKIAkJT1BDT0RFX0NPTU1PTl9HRVRfRkxPV19DT05UUk9MLCBzaXplb2YoKnJlcSkpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfZmxvd19jb250cm9sICpyZXNwID0KIAkJCQkJCWVtYmVkZGVkX3BheWxvYWQod3JiKTsKQEAgLTEwMzMsMTcgKzk5MSwxNyBAQAogCQkqcnhfZmMgPSBsZTE2X3RvX2NwdShyZXNwLT5yeF9mbG93X2NvbnRyb2wpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfcXVlcnlfZndfY2ZnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiAqcG9ydF9udW0pCitpbnQgYmVfY21kX3F1ZXJ5X2Z3X2NmZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyICpwb3J0X251bSkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZhZGFwdGVyLT5tYm94X21lbSk7CiAJc3RydWN0IGJlX2NtZF9yZXFfcXVlcnlfZndfY2ZnICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJaW50IHN0YXR1czsKIAotCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOwogCkBAIC0xMDUyLDEyICsxMDEwLDYxIEBACiAJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCiAJCU9QQ09ERV9DT01NT05fUVVFUllfRklSTVdBUkVfQ09ORklHLCBzaXplb2YoKnJlcSkpOwogCi0Jc3RhdHVzID0gYmVfbWJveF9kYl9yaW5nKGN0cmwpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9xdWVyeV9md19jZmcgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAJCSpwb3J0X251bSA9IGxlMzJfdG9fY3B1KHJlc3AtPnBoeXNfcG9ydCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CisKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKworCWJlX2NtZF9oZHJfcHJlcGFyZShyZXEsIENNRF9TVUJTWVNURU1fQ09NTU9OLAorCQlPUENPREVfQ09NTU9OX0ZVTkNUSU9OX1JFU0VULCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoYWRhcHRlcik7CisKKwlzcGluX3VubG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX3dyaXRlX2ZsYXNocm9tKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfZG1hX21lbSAqY21kLAorCQkJdTMyIGZsYXNoX3R5cGUsIHUzMiBmbGFzaF9vcGNvZGUsIHUzMiBidWZfc2l6ZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmYWRhcHRlci0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20gKnJlcSA9IGNtZC0+dmE7CisJc3RydWN0IGJlX3NnZSAqc2dlID0gbm9uZW1iZWRkZWRfc2dsKHdyYik7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIGNtZC0+c2l6ZSwgZmFsc2UsIDEpOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCU9QQ09ERV9DT01NT05fV1JJVEVfRkxBU0hST00sIGNtZC0+c2l6ZSk7CisJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMoY21kLT5kbWEpKTsKKwlzZ2UtPnBhX2xvID0gY3B1X3RvX2xlMzIoY21kLT5kbWEgJiAweEZGRkZGRkZGKTsKKwlzZ2UtPmxlbiA9IGNwdV90b19sZTMyKGNtZC0+c2l6ZSk7CisKKwlyZXEtPnBhcmFtcy5vcF90eXBlID0gY3B1X3RvX2xlMzIoZmxhc2hfdHlwZSk7CisJcmVxLT5wYXJhbXMub3BfY29kZSA9IGNwdV90b19sZTMyKGZsYXNoX29wY29kZSk7CisJcmVxLT5wYXJhbXMuZGF0YV9idWZfc2l6ZSA9IGNwdV90b19sZTMyKGJ1Zl9zaXplKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGFkYXB0ZXIpOworCisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaAppbmRleCA3NDc2MjZkLi5mZDcwMjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCkBAIC02OSw3ICs2OSw3IEBACiAjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9NQVNLCQkweEZGRkYKICNkZWZpbmUgQ1FFX1NUQVRVU19FWFREX1NISUZUCQkwCS8qIGJpdHMgMCAtIDE1ICovCiAKLXN0cnVjdCBiZV9tY2NfY3FfZW50cnkgeworc3RydWN0IGJlX21jY19jb21wbCB7CiAJdTMyIHN0YXR1czsJCS8qIGR3b3JkIDAgKi8KIAl1MzIgdGFnMDsJCS8qIGR3b3JkIDEgKi8KIAl1MzIgdGFnMTsJCS8qIGR3b3JkIDIgKi8KQEAgLTEwNiw3ICsxMDYsNyBAQAogCiBzdHJ1Y3QgYmVfbWNjX21haWxib3ggewogCXN0cnVjdCBiZV9tY2Nfd3JiIHdyYjsKLQlzdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5IGNxZTsKKwlzdHJ1Y3QgYmVfbWNjX2NvbXBsIGNvbXBsOwogfTsKIAogI2RlZmluZSBDTURfU1VCU1lTVEVNX0NPTU1PTgkweDEKQEAgLTExNyw2ICsxMTcsNyBAQAogI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTVVMVElDQVNUX1NFVAkJMwogI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfVkxBTl9DT05GSUcgIAkJNAogI2RlZmluZSBPUENPREVfQ09NTU9OX05UV0tfTElOS19TVEFUVVNfUVVFUlkJCTUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9XUklURV9GTEFTSFJPTQkJCTcKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUJCQkJMTIKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FUV9DUkVBVEUJCQkJMTMKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NQ0NfQ1JFQVRFICAgICAgICAJCTIxCkBAIC0xMzUsNiArMTM2LDcgQEAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9RVUVSWV9GSVJNV0FSRV9DT05GSUcJCTU4CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19QTUFDX0FERAkJCTU5CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fTlRXS19QTUFDX0RFTAkJCTYwCisjZGVmaW5lIE9QQ09ERV9DT01NT05fRlVOQ1RJT05fUkVTRVQJCQk2MQogCiAjZGVmaW5lIE9QQ09ERV9FVEhfQUNQSV9DT05GSUcJCQkJMgogI2RlZmluZSBPUENPREVfRVRIX1BST01JU0NVT1VTCQkJCTMKQEAgLTYzNCw3ICs2MzYsNiBAQAogfSBfX3BhY2tlZDsKIAogLyoqKioqKioqKioqKioqKioqKioqIEdldCBGVyBWZXJzaW9uICoqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIEZXX1ZFUl9MRU4JCQkzMgogc3RydWN0IGJlX2NtZF9yZXFfZ2V0X2Z3X3ZlcnNpb24gewogCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CiAJdTggcnN2ZDBbRldfVkVSX0xFTl07CkBAIC02OTMsNTYgKzY5NCw3NCBAQAogCXUzMiBiZV9jb25maWdfbnVtYmVyOwogCXUzMiBhc2ljX3JldmlzaW9uOwogCXUzMiBwaHlzX3BvcnQ7Ci0JdTMyIGZ1bmN0aW9uX21vZGU7CisJdTMyIGZ1bmN0aW9uX2NhcDsKIAl1MzIgcnN2ZFsyNl07CiB9OwogCi1leHRlcm4gaW50IGJlX3BjaV9mbnVtX2dldChzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKLWV4dGVybiBpbnQgYmVfY21kX1BPU1Qoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7Ci1leHRlcm4gaW50IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIsCisvKioqKioqKioqKioqKioqKioqIEZpcm13YXJlIEZsYXNoICoqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBmbGFzaHJvbV9wYXJhbXMgeworCXUzMiBvcF9jb2RlOworCXUzMiBvcF90eXBlOworCXUzMiBkYXRhX2J1Zl9zaXplOworCXUzMiBvZmZzZXQ7CisJdTggZGF0YV9idWZbNF07Cit9OworCitzdHJ1Y3QgYmVfY21kX3dyaXRlX2ZsYXNocm9tIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXN0cnVjdCBmbGFzaHJvbV9wYXJhbXMgcGFyYW1zOworfTsKKworZXh0ZXJuIGludCBiZV9wY2lfZm51bV9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBiZV9jbWRfUE9TVChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKm1hY19hZGRyLAogCQkJdTggdHlwZSwgYm9vbCBwZXJtYW5lbnQsIHUzMiBpZl9oYW5kbGUpOwotZXh0ZXJuIGludCBiZV9jbWRfcG1hY19hZGQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTggKm1hY19hZGRyLAorZXh0ZXJuIGludCBiZV9jbWRfcG1hY19hZGQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWNfYWRkciwKIAkJCXUzMiBpZl9pZCwgdTMyICpwbWFjX2lkKTsKLWV4dGVybiBpbnQgYmVfY21kX3BtYWNfZGVsKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9pZCwgdTMyIHBtYWNfaWQpOwotZXh0ZXJuIGludCBiZV9jbWRfaWZfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9mbGFncywgdTggKm1hYywKK2V4dGVybiBpbnQgYmVfY21kX3BtYWNfZGVsKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsIHUzMiBwbWFjX2lkKTsKK2V4dGVybiBpbnQgYmVfY21kX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2ZsYWdzLCB1OCAqbWFjLAogCQkJYm9vbCBwbWFjX2ludmFsaWQsIHUzMiAqaWZfaGFuZGxlLCB1MzIgKnBtYWNfaWQpOwotZXh0ZXJuIGludCBiZV9jbWRfaWZfZGVzdHJveShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaGFuZGxlKTsKLWV4dGVybiBpbnQgYmVfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfaWZfZGVzdHJveShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2hhbmRsZSk7CitleHRlcm4gaW50IGJlX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSk7Ci1leHRlcm4gaW50IGJlX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2V4dGVybiBpbnQgYmVfY21kX2NxX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLAogCQkJYm9vbCBzb2xfZXZ0cywgYm9vbCBub19kZWxheSwKIAkJCWludCBudW1fY3FlX2RtYV9jb2FsZXNjZSk7Ci1leHRlcm4gaW50IGJlX2NtZF9tY2NxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfbWNjcV9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqbWNjcSwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSk7Ci1leHRlcm4gaW50IGJlX2NtZF90eHFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitleHRlcm4gaW50IGJlX2NtZF90eHFfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSwKIAkJCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSk7Ci1leHRlcm4gaW50IGJlX2NtZF9yeHFfY3JlYXRlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitleHRlcm4gaW50IGJlX2NtZF9yeHFfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnJ4cSwgdTE2IGNxX2lkLAogCQkJdTE2IGZyYWdfc2l6ZSwgdTE2IG1heF9mcmFtZV9zaXplLCB1MzIgaWZfaWQsCiAJCQl1MzIgcnNzKTsKLWV4dGVybiBpbnQgYmVfY21kX3FfZGVzdHJveShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKK2V4dGVybiBpbnQgYmVfY21kX3FfZGVzdHJveShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCiAJCQlpbnQgdHlwZSk7Ci1leHRlcm4gaW50IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorZXh0ZXJuIGludCBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlib29sICpsaW5rX3VwKTsKLWV4dGVybiBpbnQgYmVfY21kX3Jlc2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOwotZXh0ZXJuIGludCBiZV9jbWRfZ2V0X3N0YXRzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitleHRlcm4gaW50IGJlX2NtZF9yZXNldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGJlX2NtZF9nZXRfc3RhdHMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbm9uZW1iX2NtZCk7Ci1leHRlcm4gaW50IGJlX2NtZF9nZXRfZndfdmVyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIGNoYXIgKmZ3X3Zlcik7CitleHRlcm4gaW50IGJlX2NtZF9nZXRfZndfdmVyKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBjaGFyICpmd192ZXIpOwogCi1leHRlcm4gaW50IGJlX2NtZF9tb2RpZnlfZXFkKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBlcV9pZCwgdTMyIGVxZCk7Ci1leHRlcm4gaW50IGJlX2NtZF92bGFuX2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MzIgaWZfaWQsCitleHRlcm4gaW50IGJlX2NtZF9tb2RpZnlfZXFkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgZXFfaWQsIHUzMiBlcWQpOworZXh0ZXJuIGludCBiZV9jbWRfdmxhbl9jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwKIAkJCXUxNiAqdnRhZ19hcnJheSwgdTMyIG51bSwgYm9vbCB1bnRhZ2dlZCwKIAkJCWJvb2wgcHJvbWlzY3VvdXMpOwotZXh0ZXJuIGludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitleHRlcm4gaW50IGJlX2NtZF9wcm9taXNjdW91c19jb25maWcoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1OCBwb3J0X251bSwgYm9vbCBlbik7Ci1leHRlcm4gaW50IGJlX2NtZF9tdWx0aWNhc3Rfc2V0KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUzMiBpZl9pZCwKK2V4dGVybiBpbnQgYmVfY21kX211bHRpY2FzdF9zZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpZl9pZCwKIAkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCwgdTMyIG1jX2NvdW50KTsKLWV4dGVybiBpbnQgYmVfY21kX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKK2V4dGVybiBpbnQgYmVfY21kX3NldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1MzIgdHhfZmMsIHUzMiByeF9mYyk7Ci1leHRlcm4gaW50IGJlX2NtZF9nZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCitleHRlcm4gaW50IGJlX2NtZF9nZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJdTMyICp0eF9mYywgdTMyICpyeF9mYyk7Ci1leHRlcm4gaW50IGJlX2NtZF9xdWVyeV9md19jZmcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTMyICpwb3J0X251bSk7Ci1leHRlcm4gdm9pZCBiZV9wcm9jZXNzX21jYyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK2V4dGVybiBpbnQgYmVfY21kX3F1ZXJ5X2Z3X2NmZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyICpwb3J0X251bSk7CitleHRlcm4gaW50IGJlX2NtZF9yZXNldF9mdW5jdGlvbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBiZV9wcm9jZXNzX21jYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IGJlX2NtZF93cml0ZV9mbGFzaHJvbShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBiZV9kbWFfbWVtICpjbWQsIHUzMiBmbGFzaF9vcGVyLAorCQkJdTMyIGZsYXNoX29wY29kZSwgdTMyIGJ1Zl9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYwppbmRleCBjY2NjNTQxLi4xMTQ0NWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCkBAIC0xNiw2ICsxNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImJlLmgiCisjaW5jbHVkZSAiYmVfY21kcy5oIgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KIAogc3RydWN0IGJlX2V0aHRvb2xfc3RhdCB7CkBAIC0xMjcsOCArMTI4LDYgQEAKIAlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKIAlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKIAotCWNvYWxlc2NlLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGFkYXB0ZXItPm1heF9yeF9jb2FsOwotCiAJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzID0gcnhfZXEtPmN1cl9lcWQ7CiAJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2ggPSByeF9lcS0+bWF4X2VxZDsKIAljb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfbG93ID0gcnhfZXEtPm1pbl9lcWQ7CkBAIC0xNDQsMTQgKzE0MywxMiBAQAogfQogCiAvKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gc2V0IGludGVycnVwIGNvYWxlc2NpbmcgZGVsYXkgKmFzIHdlbGwgYXMqCi0gKiB0aGUgbnVtYmVyIG9mIHBrdHMgdG8gY29hbGVzY2UgZm9yIExSTy4KKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNldCBpbnRlcnJ1cCBjb2FsZXNjaW5nIGRlbGF5CiAgKi8KIHN0YXRpYyBpbnQKIGJlX3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbGVzY2UpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKIAlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKIAl1MzIgdHhfbWF4LCB0eF9taW4sIHR4X2N1cjsKQEAgLTE2MSwxMCArMTU4LDYgQEAKIAlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSA9PSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gY29hbGVzY2UtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwotCWlmIChhZGFwdGVyLT5tYXhfcnhfY29hbCA+IEJFX01BWF9GUkFHU19QRVJfRlJBTUUpCi0JCWFkYXB0ZXItPm1heF9yeF9jb2FsID0gQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRTsKLQogCS8qIGlmIEFJQyBpcyBiZWluZyB0dXJuZWQgb24gbm93LCBzdGFydCB3aXRoIGFuIEVRRCBvZiAwICovCiAJaWYgKHJ4X2VxLT5lbmFibGVfYWljID09IDAgJiYKIAkJY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9PSAxKSB7CkBAIC0xODMsNyArMTc2LDcgQEAKIAlpZiAodHhfY3VyID4gQkVfTUFYX0VRRCkKIAkJdHhfY3VyID0gQkVfTUFYX0VRRDsKIAlpZiAodHhfZXEtPmN1cl9lcWQgIT0gdHhfY3VyKSB7Ci0JCXN0YXR1cyA9IGJlX2NtZF9tb2RpZnlfZXFkKGN0cmwsIHR4X2VxLT5xLmlkLCB0eF9jdXIpOworCQlzdGF0dXMgPSBiZV9jbWRfbW9kaWZ5X2VxZChhZGFwdGVyLCB0eF9lcS0+cS5pZCwgdHhfY3VyKTsKIAkJaWYgKCFzdGF0dXMpCiAJCQl0eF9lcS0+Y3VyX2VxZCA9IHR4X2N1cjsKIAl9CkBAIC0yMDMsNyArMTk2LDggQEAKIAkJaWYgKHJ4X2N1ciA+IEJFX01BWF9FUUQpCiAJCQlyeF9jdXIgPSBCRV9NQVhfRVFEOwogCQlpZiAocnhfZXEtPmN1cl9lcWQgIT0gcnhfY3VyKSB7Ci0JCQlzdGF0dXMgPSBiZV9jbWRfbW9kaWZ5X2VxZChjdHJsLCByeF9lcS0+cS5pZCwgcnhfY3VyKTsKKwkJCXN0YXR1cyA9IGJlX2NtZF9tb2RpZnlfZXFkKGFkYXB0ZXIsIHJ4X2VxLT5xLmlkLAorCQkJCQlyeF9jdXIpOwogCQkJaWYgKCFzdGF0dXMpCiAJCQkJcnhfZXEtPmN1cl9lcWQgPSByeF9jdXI7CiAJCX0KQEAgLTMxNyw4ICszMTEsNyBAQAogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWJlX2NtZF9nZXRfZmxvd19jb250cm9sKCZhZGFwdGVyLT5jdHJsLCAmZWNtZC0+dHhfcGF1c2UsCi0JCSZlY21kLT5yeF9wYXVzZSk7CisJYmVfY21kX2dldF9mbG93X2NvbnRyb2woYWRhcHRlciwgJmVjbWQtPnR4X3BhdXNlLCAmZWNtZC0+cnhfcGF1c2UpOwogCWVjbWQtPmF1dG9uZWcgPSAwOwogfQogCkBAIC0zMzEsNyArMzI0LDcgQEAKIAlpZiAoZWNtZC0+YXV0b25lZyAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0YXR1cyA9IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKCZhZGFwdGVyLT5jdHJsLCBlY21kLT50eF9wYXVzZSwKKwlzdGF0dXMgPSBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLCBlY21kLT50eF9wYXVzZSwKIAkJCWVjbWQtPnJ4X3BhdXNlKTsKIAlpZiAoIXN0YXR1cykKIAkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBhdXNlIHBhcmFtIHNldCBmYWlsZWQuXG4iKTsKQEAgLTMzOSw3ICszMzIsMjEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdHJ1Y3QgZXRodG9vbF9vcHMgYmVfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgaW50CitiZV9kb19mbGFzaChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9mbGFzaCAqZWZsKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwljaGFyIGZpbGVfbmFtZVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRV07CisJdTMyIHJlZ2lvbjsKKworCWZpbGVfbmFtZVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRSAtIDFdID0gMDsKKwlzdHJjcHkoZmlsZV9uYW1lLCBlZmwtPmRhdGEpOworCXJlZ2lvbiA9IGVmbC0+cmVnaW9uOworCisJcmV0dXJuIGJlX2xvYWRfZncoYWRhcHRlciwgZmlsZV9uYW1lKTsKK30KKworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBiZV9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gYmVfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKQEAgLTM1OSw0ICszNjYsNSBAQAogCS5nZXRfc3RyaW5ncyA9IGJlX2dldF9zdGF0X3N0cmluZ3MsCiAJLmdldF9zdGF0c19jb3VudCA9IGJlX2dldF9zdGF0c19jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBiZV9nZXRfZXRodG9vbF9zdGF0cywKKwkuZmxhc2hfZGV2aWNlID0gYmVfZG9fZmxhc2gsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKaW5kZXggMjljMzNjNy4uYTMzOTRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCkBAIC01MSw5ICs1MSw2IEBACiAgKiB3aXRoIHRoZSBPUy4KICAqLwogI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLCSgxIDw8IDI5KSAvKiBiaXQgMjkgKi8KLS8qIFBDSSBwaHlzaWNhbCBmdW5jdGlvbiBudW1iZXIgKi8KLSNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfUEZVTkNfTUFTSyAgCTB4NyAJLyogYml0cyAyNiAtIDI4ICovCi0jZGVmaW5lIE1FTUJBUl9DVFJMX0lOVF9DVFJMX1BGVU5DX1NISUZUCTI2CiAKIC8qKioqKioqKiogSVNSMCBSZWdpc3RlciBvZmZzZXQgKioqKioqKioqKi8KICNkZWZpbmUgQ0VWX0lTUjBfT0ZGU0VUIAkJCTB4QzE4CkBAIC0yMDcsNyArMjA0LDcgQEAKIAl1OCBudW1mcmFnc1szXTsJCS8qIGR3b3JkIDEgKi8KIAl1OCByc3NfZmx1c2g7CQkvKiBkd29yZCAyICovCiAJdTggY2FzdF9lbmNbMl07CQkvKiBkd29yZCAyICovCi0JdTggcW5xOwkJCS8qIGR3b3JkIDIgKi8KKwl1OCB2dG07CQkJLyogZHdvcmQgMiAqLwogCXU4IHJzc19iYW5rOwkJLyogZHdvcmQgMiAqLwogCXU4IHJzdmQxWzIzXTsJCS8qIGR3b3JkIDIgKi8KIAl1OCBscm9fcGt0OwkJLyogZHdvcmQgMiAqLwpAQCAtMjE5LDMgKzIxNiw4NiBAQAogc3RydWN0IGJlX2V0aF9yeF9jb21wbCB7CiAJdTMyIGR3WzRdOwogfTsKKworLyogRmxhc2hyb20gcmVsYXRlZCBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBJTUFHRV9UWVBFX0ZJUk1XQVJFCQkxNjAKKyNkZWZpbmUgSU1BR0VfVFlQRV9CT09UQ09ERQkJMjI0CisjZGVmaW5lIElNQUdFX1RZUEVfT1BUSU9OUk9NCQkzMgorCisjZGVmaW5lIE5VTV9GTEFTSERJUl9FTlRSSUVTCQkzMgorCisjZGVmaW5lIEZMQVNIUk9NX1RZUEVfSVNDU0lfQUNUSVZFCTAKKyNkZWZpbmUgRkxBU0hST01fVFlQRV9CSU9TCQkyCisjZGVmaW5lIEZMQVNIUk9NX1RZUEVfUFhFX0JJT1MJCTMKKyNkZWZpbmUgRkxBU0hST01fVFlQRV9GQ09FX0JJT1MJCTgKKyNkZWZpbmUgRkxBU0hST01fVFlQRV9JU0NTSV9CQUNLVVAJOQorI2RlZmluZSBGTEFTSFJPTV9UWVBFX0ZDT0VfRldfQUNUSVZFCTEwCisjZGVmaW5lIEZMQVNIUk9NX1RZUEVfRkNPRV9GV19CQUNLVVAgCTExCisKKyNkZWZpbmUgRkxBU0hST01fT1BFUl9GTEFTSAkJMQorI2RlZmluZSBGTEFTSFJPTV9PUEVSX1NBVkUJCTIKKworI2RlZmluZSBGTEFTSF9JTUFHRV9NQVhfU0laRSAgICAgICAgICAgICgxMzEwNzIwKSAvKiBNYXggZmlybXdhcmUgaW1hZ2Ugc2l6ZSAqLworI2RlZmluZSBGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFICAgICAgICgyNjIxNDQpICAvKiBNYXggT1BUSU9OIFJPTSBpbWFnZSBzeiAqLworCisvKiBPZmZzZXRzIGZvciBjb21wb25lbnRzIG9uIEZsYXNoLiAqLworI2RlZmluZSBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUICgxMDQ4NTc2KQorI2RlZmluZSBGTEFTSF9pU0NTSV9CQUNLVVBfSU1BR0VfU1RBUlQgICgyMzU5Mjk2KQorI2RlZmluZSBGTEFTSF9GQ29FX1BSSU1BUllfSU1BR0VfU1RBUlQgICgzNjcwMDE2KQorI2RlZmluZSBGTEFTSF9GQ29FX0JBQ0tVUF9JTUFHRV9TVEFSVCAgICg0OTgwNzM2KQorI2RlZmluZSBGTEFTSF9pU0NTSV9CSU9TX1NUQVJUICAgICAgICAgICg3MzQwMDMyKQorI2RlZmluZSBGTEFTSF9QWEVfQklPU19TVEFSVCAgICAgICAgICAgICg3ODY0MzIwKQorI2RlZmluZSBGTEFTSF9GQ29FX0JJT1NfU1RBUlQgICAgICAgICAgICg1MjQyODgpCisKK3N0cnVjdCBjb250cm9sbGVyX2lkIHsKKwl1MzIgdmVuZG9yOworCXUzMiBkZXZpY2U7CisJdTMyIHN1YnZlbmRvcjsKKwl1MzIgc3ViZGV2aWNlOworfTsKKworc3RydWN0IGZsYXNoX2ZpbGVfaGRyIHsKKwl1OCBzaWduWzMyXTsKKwl1MzIgY2tzdW07CisJdTMyIGFudGlkb3RlOworCXN0cnVjdCBjb250cm9sbGVyX2lkIGNvbnRfaWQ7CisJdTMyIGZpbGVfbGVuOworCXUzMiBjaHVua19udW07CisJdTMyIHRvdGFsX2NodW5rczsKKwl1MzIgbnVtX2ltZ3M7CisJdTggYnVpbGRbMjRdOworfTsKKworc3RydWN0IGZsYXNoX3NlY3Rpb25faGRyIHsKKwl1MzIgZm9ybWF0X3JldjsKKwl1MzIgY2tzdW07CisJdTMyIGFudGlkb3RlOworCXUzMiBidWlsZF9ubzsKKwl1OCBpZF9zdHJpbmdbNjRdOworCXUzMiBhY3RpdmVfZW50cnlfbWFzazsKKwl1MzIgdmFsaWRfZW50cnlfbWFzazsKKwl1MzIgb3JnX2NvbnRlbnRfbWFzazsKKwl1MzIgcnN2ZDA7CisJdTMyIHJzdmQxOworCXUzMiByc3ZkMjsKKwl1MzIgcnN2ZDM7CisJdTMyIHJzdmQ0OworfTsKKworc3RydWN0IGZsYXNoX3NlY3Rpb25fZW50cnkgeworCXUzMiB0eXBlOworCXUzMiBvZmZzZXQ7CisJdTMyIHBhZF9zaXplOworCXUzMiBpbWFnZV9zaXplOworCXUzMiBja3N1bTsKKwl1MzIgZW50cnlfcG9pbnQ7CisJdTMyIHJzdmQwOworCXUzMiByc3ZkMTsKKwl1OCB2ZXJfZGF0YVszMl07Cit9OworCitzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9pbmZvIHsKKwl1OCBjb29raWVbMzJdOworCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2hkciBmc2VjX2hkcjsKKwlzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9lbnRyeSBmc2VjX2VudHJ5WzMyXTsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKaW5kZXggZGVhMzE1NS4uY2UxMWJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtMTYsNiArMTYsNyBAQAogICovCiAKICNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgImJlX2NtZHMuaCIKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUik7CkBAIC02MCw0MCArNjEsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYmVfaW50cl9zZXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgYm9vbCBlbmFibGUpCitzdGF0aWMgdm9pZCBiZV9pbnRyX3NldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBlbmFibGUpCiB7Ci0JdTggX19pb21lbSAqYWRkciA9IGN0cmwtPnBjaWNmZyArIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQ7CisJdTggX19pb21lbSAqYWRkciA9IGFkYXB0ZXItPnBjaWNmZyArIFBDSUNGR19NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9PRkZTRVQ7CiAJdTMyIHJlZyA9IGlvcmVhZDMyKGFkZHIpOwogCXUzMiBlbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKLQlpZiAoIWVuYWJsZWQgJiYgZW5hYmxlKSB7CisKKwlpZiAoIWVuYWJsZWQgJiYgZW5hYmxlKQogCQlyZWcgfD0gTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKLQl9IGVsc2UgaWYgKGVuYWJsZWQgJiYgIWVuYWJsZSkgeworCWVsc2UgaWYgKGVuYWJsZWQgJiYgIWVuYWJsZSkKIAkJcmVnICY9IH5NRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCSI6IGJhZCB2YWx1ZSBpbiBtZW1iYXJfaW50X2N0cmwgcmVnPTB4JXhcbiIsIHJlZyk7CisJZWxzZQogCQlyZXR1cm47Ci0JfQorCiAJaW93cml0ZTMyKHJlZywgYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIGJlX3J4cV9ub3RpZnkoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgdTE2IHFpZCwgdTE2IHBvc3RlZCkKK3N0YXRpYyB2b2lkIGJlX3J4cV9ub3RpZnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQsIHUxNiBwb3N0ZWQpCiB7CiAJdTMyIHZhbCA9IDA7CiAJdmFsIHw9IHFpZCAmIERCX1JRX1JJTkdfSURfTUFTSzsKIAl2YWwgfD0gcG9zdGVkIDw8IERCX1JRX05VTV9QT1NURURfU0hJRlQ7Ci0JaW93cml0ZTMyKHZhbCwgY3RybC0+ZGIgKyBEQl9SUV9PRkZTRVQpOworCWlvd3JpdGUzMih2YWwsIGFkYXB0ZXItPmRiICsgREJfUlFfT0ZGU0VUKTsKIH0KIAotc3RhdGljIHZvaWQgYmVfdHhxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLCB1MTYgcG9zdGVkKQorc3RhdGljIHZvaWQgYmVfdHhxX25vdGlmeShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IHFpZCwgdTE2IHBvc3RlZCkKIHsKIAl1MzIgdmFsID0gMDsKIAl2YWwgfD0gcWlkICYgREJfVFhVTFBfUklOR19JRF9NQVNLOwogCXZhbCB8PSAocG9zdGVkICYgREJfVFhVTFBfTlVNX1BPU1RFRF9NQVNLKSA8PCBEQl9UWFVMUF9OVU1fUE9TVEVEX1NISUZUOwotCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfVFhVTFAxX09GRlNFVCk7CisJaW93cml0ZTMyKHZhbCwgYWRhcHRlci0+ZGIgKyBEQl9UWFVMUDFfT0ZGU0VUKTsKIH0KIAotc3RhdGljIHZvaWQgYmVfZXFfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsCitzdGF0aWMgdm9pZCBiZV9lcV9ub3RpZnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBxaWQsCiAJCWJvb2wgYXJtLCBib29sIGNsZWFyX2ludCwgdTE2IG51bV9wb3BwZWQpCiB7CiAJdTMyIHZhbCA9IDA7CkBAIC0xMDQsMzcgKzEwNCwzMSBAQAogCQl2YWwgfD0gMSA8PCBEQl9FUV9DTFJfU0hJRlQ7CiAJdmFsIHw9IDEgPDwgREJfRVFfRVZOVF9TSElGVDsKIAl2YWwgfD0gbnVtX3BvcHBlZCA8PCBEQl9FUV9OVU1fUE9QUEVEX1NISUZUOwotCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfRVFfT0ZGU0VUKTsKKwlpb3dyaXRlMzIodmFsLCBhZGFwdGVyLT5kYiArIERCX0VRX09GRlNFVCk7CiB9CiAKLXZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsCi0JCWJvb2wgYXJtLCB1MTYgbnVtX3BvcHBlZCkKK3ZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkLCBib29sIGFybSwgdTE2IG51bV9wb3BwZWQpCiB7CiAJdTMyIHZhbCA9IDA7CiAJdmFsIHw9IHFpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKIAlpZiAoYXJtKQogCQl2YWwgfD0gMSA8PCBEQl9DUV9SRUFSTV9TSElGVDsKIAl2YWwgfD0gbnVtX3BvcHBlZCA8PCBEQl9DUV9OVU1fUE9QUEVEX1NISUZUOwotCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfQ1FfT0ZGU0VUKTsKKwlpb3dyaXRlMzIodmFsLCBhZGFwdGVyLT5kYiArIERCX0NRX09GRlNFVCk7CiB9CiAKLQogc3RhdGljIGludCBiZV9tYWNfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAlpbnQgc3RhdHVzID0gMDsKIAotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJc3RhdHVzID0gYmVfY21kX3BtYWNfZGVsKCZhZGFwdGVyLT5jdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUsCi0JCQkJYWRhcHRlci0+cG1hY19pZCk7Ci0JCWlmIChzdGF0dXMpCi0JCQlyZXR1cm4gc3RhdHVzOworCXN0YXR1cyA9IGJlX2NtZF9wbWFjX2RlbChhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsIGFkYXB0ZXItPnBtYWNfaWQpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CiAKLQkJc3RhdHVzID0gYmVfY21kX3BtYWNfYWRkKCZhZGFwdGVyLT5jdHJsLCAodTggKilhZGRyLT5zYV9kYXRhLAotCQkJCWFkYXB0ZXItPmlmX2hhbmRsZSwgJmFkYXB0ZXItPnBtYWNfaWQpOwotCX0KLQorCXN0YXR1cyA9IGJlX2NtZF9wbWFjX2FkZChhZGFwdGVyLCAodTggKilhZGRyLT5zYV9kYXRhLAorCQkJYWRhcHRlci0+aWZfaGFuZGxlLCAmYWRhcHRlci0+cG1hY19pZCk7CiAJaWYgKCFzdGF0dXMpCiAJCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKIApAQCAtMjE0LDkgKzIwOCw4IEBACiAJZGV2X3N0YXRzLT50eF93aW5kb3dfZXJyb3JzID0gMDsKIH0KIAotdm9pZCBiZV9saW5rX3N0YXR1c191cGRhdGUodm9pZCAqY3R4dCwgYm9vbCBsaW5rX3VwKQordm9pZCBiZV9saW5rX3N0YXR1c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgbGlua191cCkKIHsKLQlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGN0eHQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCS8qIElmIGxpbmsgY2FtZSB1cCBvciB3ZW50IGRvd24gKi8KQEAgLTIzNyw3ICsyMzAsNiBAQAogLyogVXBkYXRlIHRoZSBFUSBkZWxheSBuIEJFIGJhc2VkIG9uIHRoZSBSWCBmcmFncyBjb25zdW1lZCAvIHNlYyAqLwogc3RhdGljIHZvaWQgYmVfcnhfZXFkX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CiAJc3RydWN0IGJlX2VxX29iaiAqcnhfZXEgPSAmYWRhcHRlci0+cnhfZXE7CiAJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gJmFkYXB0ZXItPnN0YXRzLmRydnJfc3RhdHM7CiAJdWxvbmcgbm93ID0gamlmZmllczsKQEAgLTI3MCw3ICsyNjIsNyBAQAogCWlmIChlcWQgPCAxMCkKIAkJZXFkID0gMDsKIAlpZiAoZXFkICE9IHJ4X2VxLT5jdXJfZXFkKQotCQliZV9jbWRfbW9kaWZ5X2VxZChjdHJsLCByeF9lcS0+cS5pZCwgZXFkKTsKKwkJYmVfY21kX21vZGlmeV9lcWQoYWRhcHRlciwgcnhfZXEtPnEuaWQsIGVxZCk7CiAKIAlyeF9lcS0+Y3VyX2VxZCA9IGVxZDsKIH0KQEAgLTM5MywxNSArMzg1LDE5IEBACiAJc3RydWN0IGJlX2V0aF93cmIgKndyYjsKIAlzdHJ1Y3QgYmVfZXRoX2hkcl93cmIgKmhkcjsKIAotCWF0b21pY19hZGQod3JiX2NudCwgJnR4cS0+dXNlZCk7CiAJaGRyID0gcXVldWVfaGVhZF9ub2RlKHR4cSk7CisJYXRvbWljX2FkZCh3cmJfY250LCAmdHhxLT51c2VkKTsKIAlxdWV1ZV9oZWFkX2luYyh0eHEpOwogCisJaWYgKHNrYl9kbWFfbWFwKCZwZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVFggRE1BIG1hcHBpbmcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHNrYi0+bGVuID4gc2tiLT5kYXRhX2xlbikgewogCQlpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCQlidXNhZGRyID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBsZW4sCi0JCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJd3JiID0gcXVldWVfaGVhZF9ub2RlKHR4cSk7CisJCWJ1c2FkZHIgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9oZWFkOwogCQl3cmJfZmlsbCh3cmIsIGJ1c2FkZHIsIGxlbik7CiAJCWJlX2R3c19jcHVfdG9fbGUod3JiLCBzaXplb2YoKndyYikpOwogCQlxdWV1ZV9oZWFkX2luYyh0eHEpOwpAQCAtNDExLDkgKzQwNyw4IEBACiAJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgewogCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnID0KIAkJCSZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwotCQlidXNhZGRyID0gcGNpX21hcF9wYWdlKHBkZXYsIGZyYWctPnBhZ2UsCi0JCQkJICAgICAgIGZyYWctPnBhZ2Vfb2Zmc2V0LAotCQkJCSAgICAgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlidXNhZGRyID0gc2tiX3NoaW5mbyhza2IpLT5kbWFfbWFwc1tpXTsKIAkJd3JiID0gcXVldWVfaGVhZF9ub2RlKHR4cSk7CiAJCXdyYl9maWxsKHdyYiwgYnVzYWRkciwgZnJhZy0+c2l6ZSk7CiAJCWJlX2R3c19jcHVfdG9fbGUod3JiLCBzaXplb2YoKndyYikpOwpAQCAtNDM1LDcgKzQzMCw5IEBACiAJcmV0dXJuIGNvcGllZDsKIH0KIAotc3RhdGljIGludCBiZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBiZV90eF9vYmogKnR4X29iaiA9ICZhZGFwdGVyLT50eF9vYmo7CkBAIC00NDcsMjMgKzQ0NCwyOCBAQAogCXdyYl9jbnQgPSB3cmJfY250X2Zvcl9za2Ioc2tiLCAmZHVtbXlfd3JiKTsKIAogCWNvcGllZCA9IG1ha2VfdHhfd3JicyhhZGFwdGVyLCBza2IsIHdyYl9jbnQsIGR1bW15X3dyYik7CisJaWYgKGNvcGllZCkgeworCQkvKiByZWNvcmQgdGhlIHNlbnQgc2tiIGluIHRoZSBzZW50X3NrYiB0YWJsZSAqLworCQlCVUdfT04odHhfb2JqLT5zZW50X3NrYl9saXN0W3N0YXJ0XSk7CisJCXR4X29iai0+c2VudF9za2JfbGlzdFtzdGFydF0gPSBza2I7CiAKLQkvKiByZWNvcmQgdGhlIHNlbnQgc2tiIGluIHRoZSBzZW50X3NrYiB0YWJsZSAqLwotCUJVR19PTih0eF9vYmotPnNlbnRfc2tiX2xpc3Rbc3RhcnRdKTsKLQl0eF9vYmotPnNlbnRfc2tiX2xpc3Rbc3RhcnRdID0gc2tiOworCQkvKiBFbnN1cmUgdHhxIGhhcyBzcGFjZSBmb3IgdGhlIG5leHQgc2tiOyBFbHNlIHN0b3AgdGhlIHF1ZXVlCisJCSAqICpCRUZPUkUqIHJpbmdpbmcgdGhlIHR4IGRvb3JiZWxsLCBzbyB0aGF0IHdlIHNlcmlhbHplIHRoZQorCQkgKiB0eCBjb21wbHMgb2YgdGhlIGN1cnJlbnQgdHJhbnNtaXQgd2hpY2gnbGwgd2FrZSB1cCB0aGUgcXVldWUKKwkJICovCisJCWlmICgoQkVfTUFYX1RYX0ZSQUdfQ09VTlQgKyBhdG9taWNfcmVhZCgmdHhxLT51c2VkKSkgPj0KKwkJCQkJCQkJdHhxLT5sZW4pIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCXN0b3BwZWQgPSB0cnVlOworCQl9CiAKLQkvKiBFbnN1cmUgdGhhdCB0eHEgaGFzIHNwYWNlIGZvciB0aGUgbmV4dCBza2I7IEVsc2Ugc3RvcCB0aGUgcXVldWUKLQkgKiAqQkVGT1JFKiByaW5naW5nIHRoZSB0eCBkb29yYmVsbCwgc28gdGhhdCB3ZSBzZXJpYWx6ZSB0aGUKLQkgKiB0eCBjb21wbHMgb2YgdGhlIGN1cnJlbnQgdHJhbnNtaXQgd2hpY2gnbGwgd2FrZSB1cCB0aGUgcXVldWUKLQkgKi8KLQlpZiAoKEJFX01BWF9UWF9GUkFHX0NPVU5UICsgYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpID49IHR4cS0+bGVuKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQkJc3RvcHBlZCA9IHRydWU7CisJCWJlX3R4cV9ub3RpZnkoYWRhcHRlciwgdHhxLT5pZCwgd3JiX2NudCk7CisKKwkJYmVfdHhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHdyYl9jbnQsIGNvcGllZCwgc3RvcHBlZCk7CisJfSBlbHNlIHsKKwkJdHhxLT5oZWFkID0gc3RhcnQ7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQotCi0JYmVfdHhxX25vdGlmeSgmYWRhcHRlci0+Y3RybCwgdHhxLT5pZCwgd3JiX2NudCk7Ci0KLQliZV90eF9zdGF0c191cGRhdGUoYWRhcHRlciwgd3JiX2NudCwgY29waWVkLCBzdG9wcGVkKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC01MDIsMTAgKzUwNCwxMCBAQAogCQkJCW50YWdzKys7CiAJCQl9CiAJCX0KLQkJYmVfY21kX3ZsYW5fY29uZmlnKCZhZGFwdGVyLT5jdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUsCisJCWJlX2NtZF92bGFuX2NvbmZpZyhhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsCiAJCQl2dGFnLCBudGFncywgMSwgMCk7CiAJfSBlbHNlIHsKLQkJYmVfY21kX3ZsYW5fY29uZmlnKCZhZGFwdGVyLT5jdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUsCisJCWJlX2NtZF92bGFuX2NvbmZpZyhhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsCiAJCQlOVUxMLCAwLCAxLCAxKTsKIAl9CiB9CkBAIC01MTUsMTMgKzUxNywxMiBAQAogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKIAlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CiAKLQliZV9lcV9ub3RpZnkoY3RybCwgcnhfZXEtPnEuaWQsIGZhbHNlLCBmYWxzZSwgMCk7Ci0JYmVfZXFfbm90aWZ5KGN0cmwsIHR4X2VxLT5xLmlkLCBmYWxzZSwgZmFsc2UsIDApOworCWJlX2VxX25vdGlmeShhZGFwdGVyLCByeF9lcS0+cS5pZCwgZmFsc2UsIGZhbHNlLCAwKTsKKwliZV9lcV9ub3RpZnkoYWRhcHRlciwgdHhfZXEtPnEuaWQsIGZhbHNlLCBmYWxzZSwgMCk7CiAJYWRhcHRlci0+dmxhbl9ncnAgPSBncnA7Ci0JYmVfZXFfbm90aWZ5KGN0cmwsIHJ4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7Ci0JYmVfZXFfbm90aWZ5KGN0cmwsIHR4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CisJYmVfZXFfbm90aWZ5KGFkYXB0ZXIsIHJ4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CisJYmVfZXFfbm90aWZ5KGFkYXB0ZXIsIHR4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3ZsYW5fYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQpAQCAtNTQ4LDEwICs1NDksOSBAQAogc3RhdGljIHZvaWQgYmVfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhjdHJsLCBhZGFwdGVyLT5wb3J0X251bSwgMSk7CisJCWJlX2NtZF9wcm9taXNjdW91c19jb25maWcoYWRhcHRlciwgYWRhcHRlci0+cG9ydF9udW0sIDEpOwogCQlhZGFwdGVyLT5wcm9taXNjdW91cyA9IHRydWU7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC01NTksMTUgKzU1OSwxNSBAQAogCS8qIEJFIHdhcyBwcmV2aW91c2x5IGluIHByb21pc2NvdXMgbW9kZTsgZGlzYWJsZSBpdCAqLwogCWlmIChhZGFwdGVyLT5wcm9taXNjdW91cykgewogCQlhZGFwdGVyLT5wcm9taXNjdW91cyA9IGZhbHNlOwotCQliZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKGN0cmwsIGFkYXB0ZXItPnBvcnRfbnVtLCAwKTsKKwkJYmVfY21kX3Byb21pc2N1b3VzX2NvbmZpZyhhZGFwdGVyLCBhZGFwdGVyLT5wb3J0X251bSwgMCk7CiAJfQogCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJYmVfY21kX211bHRpY2FzdF9zZXQoY3RybCwgYWRhcHRlci0+aWZfaGFuZGxlLCBOVUxMLCAwKTsKKwkJYmVfY21kX211bHRpY2FzdF9zZXQoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLCBOVUxMLCAwKTsKIAkJZ290byBkb25lOwogCX0KIAotCWJlX2NtZF9tdWx0aWNhc3Rfc2V0KGN0cmwsIGFkYXB0ZXItPmlmX2hhbmRsZSwgbmV0ZGV2LT5tY19saXN0LAorCWJlX2NtZF9tdWx0aWNhc3Rfc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwgbmV0ZGV2LT5tY19saXN0LAogCQluZXRkZXYtPm1jX2NvdW50KTsKIGRvbmU6CiAJcmV0dXJuOwpAQCAtNzQyLDcgKzc0Miw3IEBACiAJcmV0dXJuOwogfQogCi0vKiBQcm9jZXNzIHRoZSBSWCBjb21wbGV0aW9uIGluZGljYXRlZCBieSByeGNwIHdoZW4gTFJPIGlzIGRpc2FibGVkICovCisvKiBQcm9jZXNzIHRoZSBSWCBjb21wbGV0aW9uIGluZGljYXRlZCBieSByeGNwIHdoZW4gR1JPIGlzIGRpc2FibGVkICovCiBzdGF0aWMgdm9pZCBiZV9yeF9jb21wbF9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCkKIHsKQEAgLTc4NCwxOCArNzg0LDE3IEBACiAJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CiAJfQogCi0JYWRhcHRlci0+bmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQogCXJldHVybjsKIH0KIAotLyogUHJvY2VzcyB0aGUgUlggY29tcGxldGlvbiBpbmRpY2F0ZWQgYnkgcnhjcCB3aGVuIExSTyBpcyBlbmFibGVkICovCi1zdGF0aWMgdm9pZCBiZV9yeF9jb21wbF9wcm9jZXNzX2xybyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKy8qIFByb2Nlc3MgdGhlIFJYIGNvbXBsZXRpb24gaW5kaWNhdGVkIGJ5IHJ4Y3Agd2hlbiBHUk8gaXMgZW5hYmxlZCAqLworc3RhdGljIHZvaWQgYmVfcnhfY29tcGxfcHJvY2Vzc19ncm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwKQogewogCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnBhZ2VfaW5mbzsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0IHJ4X2ZyYWdzW0JFX01BWF9GUkFHU19QRVJfRlJBTUVdOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpyeHEgPSAmYWRhcHRlci0+cnhfb2JqLnE7CisJc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqID0gICZhZGFwdGVyLT5yeF9lcTsKIAl1MzIgbnVtX3JjdmQsIHBrdF9zaXplLCByZW1haW5pbmcsIHZsYW5mLCBjdXJyX2ZyYWdfbGVuOwogCXUxNiBpLCByeHFfaWR4ID0gMCwgdmlkLCBqOwogCkBAIC04MDQsNiArODAzLDEyIEBACiAJdmxhbmYgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdnRwLCByeGNwKTsKIAlyeHFfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsIHJ4Y3ApOwogCisJc2tiID0gbmFwaV9nZXRfZnJhZ3MoJmVxX29iai0+bmFwaSk7CisJaWYgKCFza2IpIHsKKwkJYmVfcnhfY29tcGxfZGlzY2FyZChhZGFwdGVyLCByeGNwKTsKKwkJcmV0dXJuOworCX0KKwogCXJlbWFpbmluZyA9IHBrdF9zaXplOwogCWZvciAoaSA9IDAsIGogPSAtMTsgaSA8IG51bV9yY3ZkOyBpKyspIHsKIAkJcGFnZV9pbmZvID0gZ2V0X3J4X3BhZ2VfaW5mbyhhZGFwdGVyLCByeHFfaWR4KTsKQEAgLTgxNCwxMyArODE5LDE0IEBACiAJCWlmIChpID09IDAgfHwgcGFnZV9pbmZvLT5wYWdlX29mZnNldCA9PSAwKSB7CiAJCQkvKiBGaXJzdCBmcmFnIG9yIEZyZXNoIHBhZ2UgKi8KIAkJCWorKzsKLQkJCXJ4X2ZyYWdzW2pdLnBhZ2UgPSBwYWdlX2luZm8tPnBhZ2U7Ci0JCQlyeF9mcmFnc1tqXS5wYWdlX29mZnNldCA9IHBhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7Ci0JCQlyeF9mcmFnc1tqXS5zaXplID0gMDsKKwkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal0ucGFnZSA9IHBhZ2VfaW5mby0+cGFnZTsKKwkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal0ucGFnZV9vZmZzZXQgPQorCQkJCQkJCXBhZ2VfaW5mby0+cGFnZV9vZmZzZXQ7CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2pdLnNpemUgPSAwOwogCQl9IGVsc2UgewogCQkJcHV0X3BhZ2UocGFnZV9pbmZvLT5wYWdlKTsKIAkJfQotCQlyeF9mcmFnc1tqXS5zaXplICs9IGN1cnJfZnJhZ19sZW47CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal0uc2l6ZSArPSBjdXJyX2ZyYWdfbGVuOwogCiAJCXJlbWFpbmluZyAtPSBjdXJyX2ZyYWdfbGVuOwogCQlpbmRleF9pbmMoJnJ4cV9pZHgsIHJ4cS0+bGVuKTsKQEAgLTgyOCw5ICs4MzQsMTQgQEAKIAl9CiAJQlVHX09OKGogPiBNQVhfU0tCX0ZSQUdTKTsKIAorCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSBqICsgMTsKKwlza2ItPmxlbiA9IHBrdF9zaXplOworCXNrYi0+ZGF0YV9sZW4gPSBwa3Rfc2l6ZTsKKwlza2ItPnRydWVzaXplICs9IHBrdF9zaXplOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKIAlpZiAobGlrZWx5KCF2bGFuZikpIHsKLQkJbHJvX3JlY2VpdmVfZnJhZ3MoJmFkYXB0ZXItPnJ4X29iai5scm9fbWdyLCByeF9mcmFncywgcGt0X3NpemUsCi0JCQkJcGt0X3NpemUsIE5VTEwsIDApOworCQluYXBpX2dyb19mcmFncygmZXFfb2JqLT5uYXBpKTsKIAl9IGVsc2UgewogCQl2aWQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdmxhbl90YWcsIHJ4Y3ApOwogCQl2aWQgPSBiZTE2X3RvX2NwdSh2aWQpOwpAQCAtODM4LDkgKzg0OSw3IEBACiAJCWlmICghYWRhcHRlci0+dmxhbl9ncnAgfHwgYWRhcHRlci0+bnVtX3ZsYW5zID09IDApCiAJCQlyZXR1cm47CiAKLQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX2ZyYWdzKCZhZGFwdGVyLT5yeF9vYmoubHJvX21nciwKLQkJCXJ4X2ZyYWdzLCBwa3Rfc2l6ZSwgcGt0X3NpemUsIGFkYXB0ZXItPnZsYW5fZ3JwLAotCQkJdmlkLCBOVUxMLCAwKTsKKwkJdmxhbl9ncm9fZnJhZ3MoJmVxX29iai0+bmFwaSwgYWRhcHRlci0+dmxhbl9ncnAsIHZpZCk7CiAJfQogCiAJYmVfcnhfc3RhdHNfdXBkYXRlKGFkYXB0ZXIsIHBrdF9zaXplLCBudW1fcmN2ZCk7CkBAIC05MzEsNyArOTQwLDcgQEAKIAogCWlmIChwb3N0ZWQpIHsKIAkJYXRvbWljX2FkZChwb3N0ZWQsICZyeHEtPnVzZWQpOwotCQliZV9yeHFfbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCByeHEtPmlkLCBwb3N0ZWQpOworCQliZV9yeHFfbm90aWZ5KGFkYXB0ZXIsIHJ4cS0+aWQsIHBvc3RlZCk7CiAJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmcnhxLT51c2VkKSA9PSAwKSB7CiAJCS8qIExldCBiZV93b3JrZXIgcmVwbGVuaXNoIHdoZW4gbWVtb3J5IGlzIGF2YWlsYWJsZSAqLwogCQlhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQgPSB0cnVlOwpAQCAtOTU4LDEwICs5NjcsOCBAQAogc3RhdGljIHZvaWQgYmVfdHhfY29tcGxfcHJvY2VzcyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTE2IGxhc3RfaW5kZXgpCiB7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSA9ICZhZGFwdGVyLT50eF9vYmoucTsKLQlzdHJ1Y3QgYmVfZXRoX3dyYiAqd3JiOwogCXN0cnVjdCBza19idWZmICoqc2VudF9za2JzID0gYWRhcHRlci0+dHhfb2JqLnNlbnRfc2tiX2xpc3Q7CiAJc3RydWN0IHNrX2J1ZmYgKnNlbnRfc2tiOwotCXU2NCBidXNhZGRyOwogCXUxNiBjdXJfaW5kZXgsIG51bV93cmJzID0gMDsKIAogCWN1cl9pbmRleCA9IHR4cS0+dGFpbDsKQEAgLTk3MSwyMiArOTc4LDY1IEBACiAKIAlkbyB7CiAJCWN1cl9pbmRleCA9IHR4cS0+dGFpbDsKLQkJd3JiID0gcXVldWVfdGFpbF9ub2RlKHR4cSk7Ci0JCWJlX2R3c19sZV90b19jcHUod3JiLCBzaXplb2YoKndyYikpOwotCQlidXNhZGRyID0gKCh1NjQpd3JiLT5mcmFnX3BhX2hpIDw8IDMyKSB8ICh1NjQpd3JiLT5mcmFnX3BhX2xvOwotCQlpZiAoYnVzYWRkciAhPSAwKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIGJ1c2FkZHIsCi0JCQkJd3JiLT5mcmFnX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCX0KIAkJbnVtX3dyYnMrKzsKIAkJcXVldWVfdGFpbF9pbmModHhxKTsKIAl9IHdoaWxlIChjdXJfaW5kZXggIT0gbGFzdF9pbmRleCk7CiAKIAlhdG9taWNfc3ViKG51bV93cmJzLCAmdHhxLT51c2VkKTsKLQorCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2VudF9za2IsIERNQV9UT19ERVZJQ0UpOwogCWtmcmVlX3NrYihzZW50X3NrYik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJlX2VxX2VudHJ5ICpldmVudF9nZXQoc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqKQoreworCXN0cnVjdCBiZV9lcV9lbnRyeSAqZXFlID0gcXVldWVfdGFpbF9ub2RlKCZlcV9vYmotPnEpOworCisJaWYgKCFlcWUtPmV2dCkKKwkJcmV0dXJuIE5VTEw7CisKKwllcWUtPmV2dCA9IGxlMzJfdG9fY3B1KGVxZS0+ZXZ0KTsKKwlxdWV1ZV90YWlsX2luYygmZXFfb2JqLT5xKTsKKwlyZXR1cm4gZXFlOworfQorCitzdGF0aWMgaW50IGV2ZW50X2hhbmRsZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBiZV9lcV9vYmogKmVxX29iaikKK3sKKwlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVxZTsKKwl1MTYgbnVtID0gMDsKKworCXdoaWxlICgoZXFlID0gZXZlbnRfZ2V0KGVxX29iaikpICE9IE5VTEwpIHsKKwkJZXFlLT5ldnQgPSAwOworCQludW0rKzsKKwl9CisKKwkvKiBEZWFsIHdpdGggYW55IHNwdXJpb3VzIGludGVycnVwdHMgdGhhdCBjb21lCisJICogd2l0aG91dCBldmVudHMKKwkgKi8KKwliZV9lcV9ub3RpZnkoYWRhcHRlciwgZXFfb2JqLT5xLmlkLCB0cnVlLCB0cnVlLCBudW0pOworCWlmIChudW0pCisJCW5hcGlfc2NoZWR1bGUoJmVxX29iai0+bmFwaSk7CisKKwlyZXR1cm4gbnVtOworfQorCisvKiBKdXN0IHJlYWQgYW5kIG5vdGlmeSBldmVudHMgd2l0aG91dCBwcm9jZXNzaW5nIHRoZW0uCisgKiBVc2VkIGF0IHRoZSB0aW1lIG9mIGRlc3Ryb3lpbmcgZXZlbnQgcXVldWVzICovCitzdGF0aWMgdm9pZCBiZV9lcV9jbGVhbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJCXN0cnVjdCBiZV9lcV9vYmogKmVxX29iaikKK3sKKwlzdHJ1Y3QgYmVfZXFfZW50cnkgKmVxZTsKKwl1MTYgbnVtID0gMDsKKworCXdoaWxlICgoZXFlID0gZXZlbnRfZ2V0KGVxX29iaikpICE9IE5VTEwpIHsKKwkJZXFlLT5ldnQgPSAwOworCQludW0rKzsKKwl9CisKKwlpZiAobnVtKQorCQliZV9lcV9ub3RpZnkoYWRhcHRlciwgZXFfb2JqLT5xLmlkLCBmYWxzZSwgdHJ1ZSwgbnVtKTsKK30KKwogc3RhdGljIHZvaWQgYmVfcnhfcV9jbGVhbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmVfcnhfcGFnZV9pbmZvICpwYWdlX2luZm87CkBAIC05OTksMTIgKzEwNDksMTIgQEAKIAl3aGlsZSAoKHJ4Y3AgPSBiZV9yeF9jb21wbF9nZXQoYWRhcHRlcikpICE9IE5VTEwpIHsKIAkJYmVfcnhfY29tcGxfZGlzY2FyZChhZGFwdGVyLCByeGNwKTsKIAkJYmVfcnhfY29tcGxfcmVzZXQocnhjcCk7Ci0JCWJlX2NxX25vdGlmeSgmYWRhcHRlci0+Y3RybCwgcnhfY3EtPmlkLCB0cnVlLCAxKTsKKwkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIHJ4X2NxLT5pZCwgdHJ1ZSwgMSk7CiAJfQogCiAJLyogVGhlbiBmcmVlIHBvc3RlZCByeCBidWZmZXIgdGhhdCB3ZXJlIG5vdCB1c2VkICovCiAJdGFpbCA9IChyeHEtPmhlYWQgKyByeHEtPmxlbiAtIGF0b21pY19yZWFkKCZyeHEtPnVzZWQpKSAlIHJ4cS0+bGVuOwotCWZvciAoOyB0YWlsICE9IHJ4cS0+aGVhZDsgaW5kZXhfaW5jKCZ0YWlsLCByeHEtPmxlbikpIHsKKwlmb3IgKDsgYXRvbWljX3JlYWQoJnJ4cS0+dXNlZCkgPiAwOyBpbmRleF9pbmMoJnRhaWwsIHJ4cS0+bGVuKSkgewogCQlwYWdlX2luZm8gPSBnZXRfcnhfcGFnZV9pbmZvKGFkYXB0ZXIsIHRhaWwpOwogCQlwdXRfcGFnZShwYWdlX2luZm8tPnBhZ2UpOwogCQltZW1zZXQocGFnZV9pbmZvLCAwLCBzaXplb2YoKnBhZ2VfaW5mbykpOwpAQCAtMTAxMiwzNiArMTA2Miw0OSBAQAogCUJVR19PTihhdG9taWNfcmVhZCgmcnhxLT51c2VkKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJlX3R4X3FfY2xlYW4oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBiZV90eF9jb21wbF9jbGVhbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqKnNlbnRfc2ticyA9IGFkYXB0ZXItPnR4X29iai5zZW50X3NrYl9saXN0OwotCXN0cnVjdCBza19idWZmICpzZW50X3NrYjsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhfY3EgPSAmYWRhcHRlci0+dHhfb2JqLmNxOwogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmYWRhcHRlci0+dHhfb2JqLnE7Ci0JdTE2IGxhc3RfaW5kZXg7Ci0JYm9vbCBkdW1teV93cmI7CisJc3RydWN0IGJlX2V0aF90eF9jb21wbCAqdHhjcDsKKwl1MTYgZW5kX2lkeCwgY21wbCA9IDAsIHRpbWVvID0gMDsKIAotCXdoaWxlIChhdG9taWNfcmVhZCgmdHhxLT51c2VkKSkgewotCQlzZW50X3NrYiA9IHNlbnRfc2tic1t0eHEtPnRhaWxdOwotCQlsYXN0X2luZGV4ID0gdHhxLT50YWlsOwotCQlpbmRleF9hZHYoJmxhc3RfaW5kZXgsCi0JCQl3cmJfY250X2Zvcl9za2Ioc2VudF9za2IsICZkdW1teV93cmIpIC0gMSwgdHhxLT5sZW4pOwotCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGxhc3RfaW5kZXgpOwotCX0KKwkvKiBXYWl0IGZvciBhIG1heCBvZiAyMDBtcyBmb3IgYWxsIHRoZSB0eC1jb21wbGV0aW9ucyB0byBhcnJpdmUuICovCisJZG8geworCQl3aGlsZSAoKHR4Y3AgPSBiZV90eF9jb21wbF9nZXQodHhfY3EpKSkgeworCQkJZW5kX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3R4X2NvbXBsLAorCQkJCQl3cmJfaW5kZXgsIHR4Y3ApOworCQkJYmVfdHhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCBlbmRfaWR4KTsKKwkJCWNtcGwrKzsKKwkJfQorCQlpZiAoY21wbCkgeworCQkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIHR4X2NxLT5pZCwgZmFsc2UsIGNtcGwpOworCQkJY21wbCA9IDA7CisJCX0KKworCQlpZiAoYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkgPT0gMCB8fCArK3RpbWVvID4gMjAwKQorCQkJYnJlYWs7CisKKwkJbWRlbGF5KDEpOworCX0gd2hpbGUgKHRydWUpOworCisJaWYgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlZCBwZW5kaW5nIHR4LWNvbXBsZXRpb25zXG4iLAorCQkJYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpOwogfQogCiBzdGF0aWMgdm9pZCBiZV9tY2NfcXVldWVzX2Rlc3Ryb3koc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCi0JcSA9ICZjdHJsLT5tY2Nfb2JqLnE7CisJcSA9ICZhZGFwdGVyLT5tY2Nfb2JqLnE7CiAJaWYgKHEtPmNyZWF0ZWQpCi0JCWJlX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfTUNDUSk7CisJCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgcSwgUVRZUEVfTUNDUSk7CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIAotCXEgPSAmY3RybC0+bWNjX29iai5jcTsKKwlxID0gJmFkYXB0ZXItPm1jY19vYmouY3E7CiAJaWYgKHEtPmNyZWF0ZWQpCi0JCWJlX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfQ1EpOworCQliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIHEsIFFUWVBFX0NRKTsKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwogfQogCkBAIC0xMDQ5LDI1ICsxMTEyLDI0IEBACiBzdGF0aWMgaW50IGJlX21jY19xdWV1ZXNfY3JlYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLCAqY3E7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCiAJLyogQWxsb2MgTUNDIGNvbXBsIHF1ZXVlICovCi0JY3EgPSAmY3RybC0+bWNjX29iai5jcTsKKwljcSA9ICZhZGFwdGVyLT5tY2Nfb2JqLmNxOwogCWlmIChiZV9xdWV1ZV9hbGxvYyhhZGFwdGVyLCBjcSwgTUNDX0NRX0xFTiwKLQkJCXNpemVvZihzdHJ1Y3QgYmVfbWNjX2NxX2VudHJ5KSkpCisJCQlzaXplb2Yoc3RydWN0IGJlX21jY19jb21wbCkpKQogCQlnb3RvIGVycjsKIAogCS8qIEFzayBCRSB0byBjcmVhdGUgTUNDIGNvbXBsIHF1ZXVlOyBzaGFyZSBUWCdzIGVxICovCi0JaWYgKGJlX2NtZF9jcV9jcmVhdGUoY3RybCwgY3EsICZhZGFwdGVyLT50eF9lcS5xLCBmYWxzZSwgdHJ1ZSwgMCkpCisJaWYgKGJlX2NtZF9jcV9jcmVhdGUoYWRhcHRlciwgY3EsICZhZGFwdGVyLT50eF9lcS5xLCBmYWxzZSwgdHJ1ZSwgMCkpCiAJCWdvdG8gbWNjX2NxX2ZyZWU7CiAKIAkvKiBBbGxvYyBNQ0MgcXVldWUgKi8KLQlxID0gJmN0cmwtPm1jY19vYmoucTsKKwlxID0gJmFkYXB0ZXItPm1jY19vYmoucTsKIAlpZiAoYmVfcXVldWVfYWxsb2MoYWRhcHRlciwgcSwgTUNDX1FfTEVOLCBzaXplb2Yoc3RydWN0IGJlX21jY193cmIpKSkKIAkJZ290byBtY2NfY3FfZGVzdHJveTsKIAogCS8qIEFzayBCRSB0byBjcmVhdGUgTUNDIHF1ZXVlICovCi0JaWYgKGJlX2NtZF9tY2NxX2NyZWF0ZShjdHJsLCBxLCBjcSkpCisJaWYgKGJlX2NtZF9tY2NxX2NyZWF0ZShhZGFwdGVyLCBxLCBjcSkpCiAJCWdvdG8gbWNjX3FfZnJlZTsKIAogCXJldHVybiAwOwpAQCAtMTA3NSw3ICsxMTM3LDcgQEAKIG1jY19xX2ZyZWU6CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIG1jY19jcV9kZXN0cm95OgotCWJlX2NtZF9xX2Rlc3Ryb3koY3RybCwgY3EsIFFUWVBFX0NRKTsKKwliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIGNxLCBRVFlQRV9DUSk7CiBtY2NfY3FfZnJlZToKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIGNxKTsKIGVycjoKQEAgLTEwODcsMjMgKzExNDksMjEgQEAKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcTsKIAogCXEgPSAmYWRhcHRlci0+dHhfb2JqLnE7Ci0JaWYgKHEtPmNyZWF0ZWQpIHsKLQkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfVFhRKTsKLQotCQkvKiBObyBtb3JlIHR4IGNvbXBsZXRpb25zIGNhbiBiZSByY3ZkIG5vdzsgY2xlYW4gdXAgaWYgdGhlcmUKLQkJICogYXJlIGFueSBwZW5kaW5nIGNvbXBsZXRpb25zIG9yIHBlbmRpbmcgdHggcmVxdWVzdHMgKi8KLQkJYmVfdHhfcV9jbGVhbihhZGFwdGVyKTsKLQl9CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgcSwgUVRZUEVfVFhRKTsKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwogCiAJcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CiAJaWYgKHEtPmNyZWF0ZWQpCi0JCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX0NRKTsKKwkJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBxLCBRVFlQRV9DUSk7CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIAorCS8qIENsZWFyIGFueSByZXNpZHVhbCBldmVudHMgKi8KKwliZV9lcV9jbGVhbihhZGFwdGVyLCAmYWRhcHRlci0+dHhfZXEpOworCiAJcSA9ICZhZGFwdGVyLT50eF9lcS5xOwogCWlmIChxLT5jcmVhdGVkKQotCQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBxLCBRVFlQRV9FUSk7CisJCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgcSwgUVRZUEVfRVEpOwogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiB9CiAKQEAgLTExMjEsNyArMTE4MSw3IEBACiAJCXJldHVybiAtMTsKIAogCS8qIEFzayBCRSB0byBjcmVhdGUgVHggRXZlbnQgcXVldWUgKi8KLQlpZiAoYmVfY21kX2VxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgZXEsIGFkYXB0ZXItPnR4X2VxLmN1cl9lcWQpKQorCWlmIChiZV9jbWRfZXFfY3JlYXRlKGFkYXB0ZXIsIGVxLCBhZGFwdGVyLT50eF9lcS5jdXJfZXFkKSkKIAkJZ290byB0eF9lcV9mcmVlOwogCS8qIEFsbG9jIFRYIGV0aCBjb21wbCBxdWV1ZSAqLwogCWNxID0gJmFkYXB0ZXItPnR4X29iai5jcTsKQEAgLTExMzAsNyArMTE5MCw3IEBACiAJCWdvdG8gdHhfZXFfZGVzdHJveTsKIAogCS8qIEFzayBCRSB0byBjcmVhdGUgVHggZXRoIGNvbXBsIHF1ZXVlICovCi0JaWYgKGJlX2NtZF9jcV9jcmVhdGUoJmFkYXB0ZXItPmN0cmwsIGNxLCBlcSwgZmFsc2UsIGZhbHNlLCAzKSkKKwlpZiAoYmVfY21kX2NxX2NyZWF0ZShhZGFwdGVyLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMykpCiAJCWdvdG8gdHhfY3FfZnJlZTsKIAogCS8qIEFsbG9jIFRYIGV0aCBxdWV1ZSAqLwpAQCAtMTEzOSwxOCArMTE5OSwxOCBAQAogCQlnb3RvIHR4X2NxX2Rlc3Ryb3k7CiAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIFR4IGV0aCBxdWV1ZSAqLwotCWlmIChiZV9jbWRfdHhxX2NyZWF0ZSgmYWRhcHRlci0+Y3RybCwgcSwgY3EpKQorCWlmIChiZV9jbWRfdHhxX2NyZWF0ZShhZGFwdGVyLCBxLCBjcSkpCiAJCWdvdG8gdHhfcV9mcmVlOwogCXJldHVybiAwOwogCiB0eF9xX2ZyZWU6CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIHR4X2NxX2Rlc3Ryb3k6Ci0JYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgY3EsIFFUWVBFX0NRKTsKKwliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIGNxLCBRVFlQRV9DUSk7CiB0eF9jcV9mcmVlOgogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgY3EpOwogdHhfZXFfZGVzdHJveToKLQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBlcSwgUVRZUEVfRVEpOworCWJlX2NtZF9xX2Rlc3Ryb3koYWRhcHRlciwgZXEsIFFUWVBFX0VRKTsKIHR4X2VxX2ZyZWU6CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBlcSk7CiAJcmV0dXJuIC0xOwpAQCAtMTE2MiwxOSArMTIyMiwyMiBAQAogCiAJcSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKIAlpZiAocS0+Y3JlYXRlZCkgewotCQliZV9jbWRfcV9kZXN0cm95KCZhZGFwdGVyLT5jdHJsLCBxLCBRVFlQRV9SWFEpOworCQliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIHEsIFFUWVBFX1JYUSk7CiAJCWJlX3J4X3FfY2xlYW4oYWRhcHRlcik7CiAJfQogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiAKIAlxID0gJmFkYXB0ZXItPnJ4X29iai5jcTsKIAlpZiAocS0+Y3JlYXRlZCkKLQkJYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgcSwgUVRZUEVfQ1EpOworCQliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIHEsIFFUWVBFX0NRKTsKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIHEpOwogCisJLyogQ2xlYXIgYW55IHJlc2lkdWFsIGV2ZW50cyAqLworCWJlX2VxX2NsZWFuKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9lcSk7CisKIAlxID0gJmFkYXB0ZXItPnJ4X2VxLnE7CiAJaWYgKHEtPmNyZWF0ZWQpCi0JCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIHEsIFFUWVBFX0VRKTsKKwkJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBxLCBRVFlQRV9FUSk7CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKIH0KIApAQCAtMTE4Myw3ICsxMjQ2LDYgQEAKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsICpxLCAqY3E7CiAJaW50IHJjOwogCi0JYWRhcHRlci0+bWF4X3J4X2NvYWwgPSBCRV9NQVhfRlJBR1NfUEVSX0ZSQU1FOwogCWFkYXB0ZXItPmJpZ19wYWdlX3NpemUgPSAoMSA8PCBnZXRfb3JkZXIocnhfZnJhZ19zaXplKSkgKiBQQUdFX1NJWkU7CiAJYWRhcHRlci0+cnhfZXEubWF4X2VxZCA9IEJFX01BWF9FUUQ7CiAJYWRhcHRlci0+cnhfZXEubWluX2VxZCA9IDA7CkBAIC0xMTk4LDcgKzEyNjAsNyBAQAogCQlyZXR1cm4gcmM7CiAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIFJ4IEV2ZW50IHF1ZXVlICovCi0JcmMgPSBiZV9jbWRfZXFfY3JlYXRlKCZhZGFwdGVyLT5jdHJsLCBlcSwgYWRhcHRlci0+cnhfZXEuY3VyX2VxZCk7CisJcmMgPSBiZV9jbWRfZXFfY3JlYXRlKGFkYXB0ZXIsIGVxLCBhZGFwdGVyLT5yeF9lcS5jdXJfZXFkKTsKIAlpZiAocmMpCiAJCWdvdG8gcnhfZXFfZnJlZTsKIApAQCAtMTIxMCw3ICsxMjcyLDcgQEAKIAkJZ290byByeF9lcV9kZXN0cm95OwogCiAJLyogQXNrIEJFIHRvIGNyZWF0ZSBSeCBldGggY29tcGwgcXVldWUgKi8KLQlyYyA9IGJlX2NtZF9jcV9jcmVhdGUoJmFkYXB0ZXItPmN0cmwsIGNxLCBlcSwgZmFsc2UsIGZhbHNlLCAzKTsKKwlyYyA9IGJlX2NtZF9jcV9jcmVhdGUoYWRhcHRlciwgY3EsIGVxLCBmYWxzZSwgZmFsc2UsIDMpOwogCWlmIChyYykKIAkJZ290byByeF9jcV9mcmVlOwogCkBAIC0xMjIxLDcgKzEyODMsNyBAQAogCQlnb3RvIHJ4X2NxX2Rlc3Ryb3k7CiAKIAkvKiBBc2sgQkUgdG8gY3JlYXRlIFJ4IGV0aCBxdWV1ZSAqLwotCXJjID0gYmVfY21kX3J4cV9jcmVhdGUoJmFkYXB0ZXItPmN0cmwsIHEsIGNxLT5pZCwgcnhfZnJhZ19zaXplLAorCXJjID0gYmVfY21kX3J4cV9jcmVhdGUoYWRhcHRlciwgcSwgY3EtPmlkLCByeF9mcmFnX3NpemUsCiAJCUJFX01BWF9KVU1CT19GUkFNRV9TSVpFLCBhZGFwdGVyLT5pZl9oYW5kbGUsIGZhbHNlKTsKIAlpZiAocmMpCiAJCWdvdG8gcnhfcV9mcmVlOwpAQCAtMTIzMCw2OCArMTI5Miw0MyBAQAogcnhfcV9mcmVlOgogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgcSk7CiByeF9jcV9kZXN0cm95OgotCWJlX2NtZF9xX2Rlc3Ryb3koJmFkYXB0ZXItPmN0cmwsIGNxLCBRVFlQRV9DUSk7CisJYmVfY21kX3FfZGVzdHJveShhZGFwdGVyLCBjcSwgUVRZUEVfQ1EpOwogcnhfY3FfZnJlZToKIAliZV9xdWV1ZV9mcmVlKGFkYXB0ZXIsIGNxKTsKIHJ4X2VxX2Rlc3Ryb3k6Ci0JYmVfY21kX3FfZGVzdHJveSgmYWRhcHRlci0+Y3RybCwgZXEsIFFUWVBFX0VRKTsKKwliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIGVxLCBRVFlQRV9FUSk7CiByeF9lcV9mcmVlOgogCWJlX3F1ZXVlX2ZyZWUoYWRhcHRlciwgZXEpOwogCXJldHVybiByYzsKIH0KLXN0YXRpYyBib29sIGV2ZW50X2dldChzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmosIHUxNiAqcmlkKQorCisvKiBUaGVyZSBhcmUgOCBldnQgaWRzIHBlciBmdW5jLiBSZXRydW5zIHRoZSBldnQgaWQncyBiaXQgbnVtYmVyICovCitzdGF0aWMgaW5saW5lIGludCBiZV9ldnRfYml0X2dldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGVxX2lkKQogewotCXN0cnVjdCBiZV9lcV9lbnRyeSAqZW50cnkgPSBxdWV1ZV90YWlsX25vZGUoJmVxX29iai0+cSk7Ci0JdTMyIGV2dCA9IGVudHJ5LT5ldnQ7Ci0KLQlpZiAoIWV2dCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JZXZ0ID0gbGUzMl90b19jcHUoZXZ0KTsKLQkqcmlkID0gKGV2dCA+PiBFUV9FTlRSWV9SRVNfSURfU0hJRlQpICYgRVFfRU5UUllfUkVTX0lEX01BU0s7Ci0JZW50cnktPmV2dCA9IDA7Ci0JcXVldWVfdGFpbF9pbmMoJmVxX29iai0+cSk7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBpbnQgZXZlbnRfaGFuZGxlKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCi0JCQlzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCi17Ci0JdTE2IHJpZCA9IDAsIG51bSA9IDA7Ci0KLQl3aGlsZSAoZXZlbnRfZ2V0KGVxX29iaiwgJnJpZCkpCi0JCW51bSsrOwotCi0JLyogV2UgY2FuIHNlZSBhbiBpbnRlcnJ1cHQgYW5kIG5vIGV2ZW50ICovCi0JYmVfZXFfbm90aWZ5KGN0cmwsIGVxX29iai0+cS5pZCwgdHJ1ZSwgdHJ1ZSwgbnVtKTsKLQlpZiAobnVtKQotCQluYXBpX3NjaGVkdWxlKCZlcV9vYmotPm5hcGkpOwotCi0JcmV0dXJuIG51bTsKKwlyZXR1cm4gZXFfaWQgLSA4ICogYmVfcGNpX2Z1bmMoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBiZV9pbnR4KGludCBpcnEsIHZvaWQgKmRldikKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGRldjsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7Ci0gICAgICAgIGludCBpc3I7CisJaW50IGlzcjsKIAotCWlzciA9IGlvcmVhZDMyKGN0cmwtPmNzciArIENFVl9JU1IwX09GRlNFVCArCi0gICAgICAgICAgICAgICAgICAgICAgY3RybC0+cGNpX2Z1bmMgKiBDRVZfSVNSX1NJWkUpOworCWlzciA9IGlvcmVhZDMyKGFkYXB0ZXItPmNzciArIENFVl9JU1IwX09GRlNFVCArCisJCQliZV9wY2lfZnVuYyhhZGFwdGVyKSAqIENFVl9JU1JfU0laRSk7CiAJaWYgKCFpc3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElSUV9OT05FOworCQlyZXR1cm4gSVJRX05PTkU7CiAKLSAgICAgICAgZXZlbnRfaGFuZGxlKGN0cmwsICZhZGFwdGVyLT50eF9lcSk7Ci0gICAgICAgIGV2ZW50X2hhbmRsZShjdHJsLCAmYWRhcHRlci0+cnhfZXEpOworCWV2ZW50X2hhbmRsZShhZGFwdGVyLCAmYWRhcHRlci0+dHhfZXEpOworCWV2ZW50X2hhbmRsZShhZGFwdGVyLCAmYWRhcHRlci0+cnhfZXEpOwogCi0gICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBiZV9tc2l4X3J4KGludCBpcnEsIHZvaWQgKmRldikKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGRldjsKIAotCWV2ZW50X2hhbmRsZSgmYWRhcHRlci0+Y3RybCwgJmFkYXB0ZXItPnJ4X2VxKTsKKwlldmVudF9oYW5kbGUoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X2VxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMDAsMTIgKzEzMzcsMTIgQEAKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IGRldjsKIAotCWV2ZW50X2hhbmRsZSgmYWRhcHRlci0+Y3RybCwgJmFkYXB0ZXItPnR4X2VxKTsKKwlldmVudF9oYW5kbGUoYWRhcHRlciwgJmFkYXB0ZXItPnR4X2VxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGRvX2xybyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKK3N0YXRpYyBpbmxpbmUgYm9vbCBkb19ncm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwKQogewogCWludCBlcnIgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgZXJyLCByeGNwKTsKQEAgLTEzMTQsOCArMTM1MSw3IEBACiAJaWYgKGVycikKIAkJZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfcnhjcF9lcnIrKzsKIAotCXJldHVybiAoIXRjcF9mcmFtZSB8fCBlcnIgfHwgKGFkYXB0ZXItPm1heF9yeF9jb2FsIDw9IDEpKSA/Ci0JCWZhbHNlIDogdHJ1ZTsKKwlyZXR1cm4gKHRjcF9mcmFtZSAmJiAhZXJyKSA/IHRydWUgOiBmYWxzZTsKIH0KIAogaW50IGJlX3BvbGxfcngoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpAQCAtMTMzMiwxNiArMTM2OCwxNCBAQAogCQlpZiAoIXJ4Y3ApCiAJCQlicmVhazsKIAotCQlpZiAoZG9fbHJvKGFkYXB0ZXIsIHJ4Y3ApKQotCQkJYmVfcnhfY29tcGxfcHJvY2Vzc19scm8oYWRhcHRlciwgcnhjcCk7CisJCWlmIChkb19ncm8oYWRhcHRlciwgcnhjcCkpCisJCQliZV9yeF9jb21wbF9wcm9jZXNzX2dybyhhZGFwdGVyLCByeGNwKTsKIAkJZWxzZQogCQkJYmVfcnhfY29tcGxfcHJvY2VzcyhhZGFwdGVyLCByeGNwKTsKIAogCQliZV9yeF9jb21wbF9yZXNldChyeGNwKTsKIAl9CiAKLQlscm9fZmx1c2hfYWxsKCZhZGFwdGVyLT5yeF9vYmoubHJvX21ncik7Ci0KIAkvKiBSZWZpbGwgdGhlIHF1ZXVlICovCiAJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5yeF9vYmoucS51c2VkKSA8IFJYX0ZSQUdTX1JFRklMTF9XTSkKIAkJYmVfcG9zdF9yeF9mcmFncyhhZGFwdGVyKTsKQEAgLTEzNDksMTAgKzEzODMsMTAgQEAKIAkvKiBBbGwgY29uc3VtZWQgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7Ci0JCWJlX2NxX25vdGlmeSgmYWRhcHRlci0+Y3RybCwgcnhfY3EtPmlkLCB0cnVlLCB3b3JrX2RvbmUpOworCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgcnhfY3EtPmlkLCB0cnVlLCB3b3JrX2RvbmUpOwogCX0gZWxzZSB7CiAJCS8qIE1vcmUgdG8gYmUgY29uc3VtZWQ7IGNvbnRpbnVlIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLwotCQliZV9jcV9ub3RpZnkoJmFkYXB0ZXItPmN0cmwsIHJ4X2NxLT5pZCwgZmFsc2UsIHdvcmtfZG9uZSk7CisJCWJlX2NxX25vdGlmeShhZGFwdGVyLCByeF9jcS0+aWQsIGZhbHNlLCB3b3JrX2RvbmUpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwogfQpAQCAtMTM3Myw3ICsxNDA3LDcgQEAKIAl9CiAKIAlpZiAobnVtX2NtcGwpIHsKLQkJYmVfY3Ffbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCB0eF9jcS0+aWQsIHRydWUsIG51bV9jbXBsKTsKKwkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIHR4X2NxLT5pZCwgdHJ1ZSwgbnVtX2NtcGwpOwogCiAJCS8qIEFzIFR4IHdyYnMgaGF2ZSBiZWVuIGZyZWVkIHVwLCB3YWtlIHVwIG5ldGRldiBxdWV1ZSBpZgogCQkgKiBpdCB3YXMgc3RvcHBlZCBkdWUgdG8gbGFjayBvZiB0eCB3cmJzLgpAQCAtMTQwMSw3ICsxNDM1LDcgQEAKIAogCWJlX3Byb2Nlc3NfdHgoYWRhcHRlcik7CiAKLQliZV9wcm9jZXNzX21jYygmYWRhcHRlci0+Y3RybCk7CisJYmVfcHJvY2Vzc19tY2MoYWRhcHRlcik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE0MTMsNyArMTQ0Nyw3IEBACiAJaW50IHN0YXR1czsKIAogCS8qIEdldCBTdGF0cyAqLwotCXN0YXR1cyA9IGJlX2NtZF9nZXRfc3RhdHMoJmFkYXB0ZXItPmN0cmwsICZhZGFwdGVyLT5zdGF0cy5jbWQpOworCXN0YXR1cyA9IGJlX2NtZF9nZXRfc3RhdHMoYWRhcHRlciwgJmFkYXB0ZXItPnN0YXRzLmNtZCk7CiAJaWYgKCFzdGF0dXMpCiAJCW5ldGRldl9zdGF0c191cGRhdGUoYWRhcHRlcik7CiAKQEAgLTE0NDcsMzIgKzE0ODEsNDQgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYmVfbXNpeF92ZWNfZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgZXFfaWQpCiB7Ci0JcmV0dXJuIGFkYXB0ZXItPm1zaXhfZW50cmllc1tlcV9pZCAtCi0JCQk4ICogYWRhcHRlci0+Y3RybC5wY2lfZnVuY10udmVjdG9yOworCXJldHVybiBhZGFwdGVyLT5tc2l4X2VudHJpZXNbCisJCQliZV9ldnRfYml0X2dldChhZGFwdGVyLCBlcV9pZCldLnZlY3RvcjsKK30KKworc3RhdGljIGludCBiZV9yZXF1ZXN0X2lycShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IGJlX2VxX29iaiAqZXFfb2JqLAorCQl2b2lkICpoYW5kbGVyLCBjaGFyICpkZXNjKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaW50IHZlYzsKKworCXNwcmludGYoZXFfb2JqLT5kZXNjLCAiJXMtJXMiLCBuZXRkZXYtPm5hbWUsIGRlc2MpOworCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBlcV9vYmotPnEuaWQpOworCXJldHVybiByZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIDAsIGVxX29iai0+ZGVzYywgYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJlX2ZyZWVfaXJxKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfZXFfb2JqICplcV9vYmopCit7CisJaW50IHZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBlcV9vYmotPnEuaWQpOworCWZyZWVfaXJxKHZlYywgYWRhcHRlcik7CiB9CiAKIHN0YXRpYyBpbnQgYmVfbXNpeF9yZWdpc3RlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXN0cnVjdCBiZV9lcV9vYmogKnR4X2VxID0gJmFkYXB0ZXItPnR4X2VxOwotCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOwotCWludCBzdGF0dXMsIHZlYzsKKwlpbnQgc3RhdHVzOwogCi0Jc3ByaW50Zih0eF9lcS0+ZGVzYywgIiVzLXR4IiwgbmV0ZGV2LT5uYW1lKTsKLQl2ZWMgPSBiZV9tc2l4X3ZlY19nZXQoYWRhcHRlciwgdHhfZXEtPnEuaWQpOwotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHZlYywgYmVfbXNpeF90eF9tY2MsIDAsIHR4X2VxLT5kZXNjLCBhZGFwdGVyKTsKKwlzdGF0dXMgPSBiZV9yZXF1ZXN0X2lycShhZGFwdGVyLCAmYWRhcHRlci0+dHhfZXEsIGJlX21zaXhfdHhfbWNjLCAidHgiKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGVycjsKIAotCXNwcmludGYocnhfZXEtPmRlc2MsICIlcy1yeCIsIG5ldGRldi0+bmFtZSk7Ci0JdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHJ4X2VxLT5xLmlkKTsKLQlzdGF0dXMgPSByZXF1ZXN0X2lycSh2ZWMsIGJlX21zaXhfcngsIDAsIHJ4X2VxLT5kZXNjLCBhZGFwdGVyKTsKLQlpZiAoc3RhdHVzKSB7IC8qIEZyZWUgVFggSVJRICovCi0JCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCB0eF9lcS0+cS5pZCk7Ci0JCWZyZWVfaXJxKHZlYywgYWRhcHRlcik7Ci0JCWdvdG8gZXJyOwotCX0KKwlzdGF0dXMgPSBiZV9yZXF1ZXN0X2lycShhZGFwdGVyLCAmYWRhcHRlci0+cnhfZXEsIGJlX21zaXhfcngsICJyeCIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZnJlZV90eF9pcnE7CisKIAlyZXR1cm4gMDsKKworZnJlZV90eF9pcnE6CisJYmVfZnJlZV9pcnEoYWRhcHRlciwgJmFkYXB0ZXItPnR4X2VxKTsKIGVycjoKIAlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkiTVNJWCBSZXF1ZXN0IElSUSBmYWlsZWQgLSBlcnIgJWRcbiIsIHN0YXR1cyk7CkBAIC0xNTA5LDcgKzE1NTUsNiBAQAogc3RhdGljIHZvaWQgYmVfaXJxX3VucmVnaXN0ZXIoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlpbnQgdmVjOwogCiAJaWYgKCFhZGFwdGVyLT5pc3JfcmVnaXN0ZXJlZCkKIAkJcmV0dXJuOwpAQCAtMTUyMSwxMCArMTU2Niw4IEBACiAJfQogCiAJLyogTVNJeCAqLwotCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBhZGFwdGVyLT50eF9lcS5xLmlkKTsKLQlmcmVlX2lycSh2ZWMsIGFkYXB0ZXIpOwotCXZlYyA9IGJlX21zaXhfdmVjX2dldChhZGFwdGVyLCBhZGFwdGVyLT5yeF9lcS5xLmlkKTsKLQlmcmVlX2lycSh2ZWMsIGFkYXB0ZXIpOworCWJlX2ZyZWVfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9lcSk7CisJYmVfZnJlZV9pcnEoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X2VxKTsKIGRvbmU6CiAJYWRhcHRlci0+aXNyX3JlZ2lzdGVyZWQgPSBmYWxzZTsKIAlyZXR1cm47CkBAIC0xNTMzLDcgKzE1NzYsNiBAQAogc3RhdGljIGludCBiZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAlzdHJ1Y3QgYmVfZXFfb2JqICpyeF9lcSA9ICZhZGFwdGVyLT5yeF9lcTsKIAlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9ICZhZGFwdGVyLT50eF9lcTsKIAlib29sIGxpbmtfdXA7CkBAIC0xNTQ3LDE2ICsxNTg5LDE2IEBACiAKIAliZV9pcnFfcmVnaXN0ZXIoYWRhcHRlcik7CiAKLQliZV9pbnRyX3NldChjdHJsLCB0cnVlKTsKKwliZV9pbnRyX3NldChhZGFwdGVyLCB0cnVlKTsKIAogCS8qIFRoZSBldnQgcXVldWVzIGFyZSBjcmVhdGVkIGluIHVuYXJtZWQgc3RhdGU7IGFybSB0aGVtICovCi0JYmVfZXFfbm90aWZ5KGN0cmwsIHJ4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7Ci0JYmVfZXFfbm90aWZ5KGN0cmwsIHR4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CisJYmVfZXFfbm90aWZ5KGFkYXB0ZXIsIHJ4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CisJYmVfZXFfbm90aWZ5KGFkYXB0ZXIsIHR4X2VxLT5xLmlkLCB0cnVlLCBmYWxzZSwgMCk7CiAKIAkvKiBSeCBjb21wbCBxdWV1ZSBtYXkgYmUgaW4gdW5hcm1lZCBzdGF0ZTsgcmVhcm0gaXQgKi8KLQliZV9jcV9ub3RpZnkoY3RybCwgYWRhcHRlci0+cnhfb2JqLmNxLmlkLCB0cnVlLCAwKTsKKwliZV9jcV9ub3RpZnkoYWRhcHRlciwgYWRhcHRlci0+cnhfb2JqLmNxLmlkLCB0cnVlLCAwKTsKIAotCXN0YXR1cyA9IGJlX2NtZF9saW5rX3N0YXR1c19xdWVyeShjdHJsLCAmbGlua191cCk7CisJc3RhdHVzID0gYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyLCBsaW5rX3VwKTsKQEAgLTE1NjcsNyArMTYwOSw2IEBACiAKIHN0YXRpYyBpbnQgYmVfc2V0dXAoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdTMyIGlmX2ZsYWdzOwogCWludCBzdGF0dXM7CkBAIC0xNTc1LDcgKzE2MTYsNyBAQAogCWlmX2ZsYWdzID0gQkVfSUZfRkxBR1NfQlJPQURDQVNUIHwgQkVfSUZfRkxBR1NfUFJPTUlTQ1VPVVMgfAogCQlCRV9JRl9GTEFHU19NQ0FTVF9QUk9NSVNDVU9VUyB8IEJFX0lGX0ZMQUdTX1VOVEFHR0VEIHwKIAkJQkVfSUZfRkxBR1NfUEFTU19MM0w0X0VSUk9SUzsKLQlzdGF0dXMgPSBiZV9jbWRfaWZfY3JlYXRlKGN0cmwsIGlmX2ZsYWdzLCBuZXRkZXYtPmRldl9hZGRyLAorCXN0YXR1cyA9IGJlX2NtZF9pZl9jcmVhdGUoYWRhcHRlciwgaWZfZmxhZ3MsIG5ldGRldi0+ZGV2X2FkZHIsCiAJCQlmYWxzZS8qIHBtYWNfaW52YWxpZCAqLywgJmFkYXB0ZXItPmlmX2hhbmRsZSwKIAkJCSZhZGFwdGVyLT5wbWFjX2lkKTsKIAlpZiAoc3RhdHVzICE9IDApCkBAIC0xNTgzLDcgKzE2MjQsNyBAQAogCiAJYmVfdmlkX2NvbmZpZyhuZXRkZXYpOwogCi0Jc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woY3RybCwgdHJ1ZSwgdHJ1ZSk7CisJc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwgdHJ1ZSwgdHJ1ZSk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIGlmX2Rlc3Ryb3k7CiAKQEAgLTE2MDYsMjggKzE2NDcsMjUgQEAKIHR4X3FzX2Rlc3Ryb3k6CiAJYmVfdHhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiBpZl9kZXN0cm95OgotCWJlX2NtZF9pZl9kZXN0cm95KGN0cmwsIGFkYXB0ZXItPmlmX2hhbmRsZSk7CisJYmVfY21kX2lmX2Rlc3Ryb3koYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlKTsKIGRvX25vbmU6CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBiZV9jbGVhcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7Ci0KKwliZV9tY2NfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAJYmVfcnhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAJYmVfdHhfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAKLQliZV9jbWRfaWZfZGVzdHJveShjdHJsLCBhZGFwdGVyLT5pZl9oYW5kbGUpOworCWJlX2NtZF9pZl9kZXN0cm95KGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSk7CiAKLQliZV9tY2NfcXVldWVzX2Rlc3Ryb3koYWRhcHRlcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYmVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOwogCXN0cnVjdCBiZV9lcV9vYmogKnR4X2VxID0gJmFkYXB0ZXItPnR4X2VxOwogCWludCB2ZWM7CkBAIC0xNjM4LDcgKzE2NzYsNyBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJYWRhcHRlci0+bGlua191cCA9IGZhbHNlOwogCi0JYmVfaW50cl9zZXQoY3RybCwgZmFsc2UpOworCWJlX2ludHJfc2V0KGFkYXB0ZXIsIGZhbHNlKTsKIAogCWlmIChhZGFwdGVyLT5tc2l4X2VuYWJsZWQpIHsKIAkJdmVjID0gYmVfbXNpeF92ZWNfZ2V0KGFkYXB0ZXIsIHR4X2VxLT5xLmlkKTsKQEAgLTE2NTMsNTggKzE2OTEsMTc5IEBACiAJbmFwaV9kaXNhYmxlKCZyeF9lcS0+bmFwaSk7CiAJbmFwaV9kaXNhYmxlKCZ0eF9lcS0+bmFwaSk7CiAKKwkvKiBXYWl0IGZvciBhbGwgcGVuZGluZyB0eCBjb21wbGV0aW9ucyB0byBhcnJpdmUgc28gdGhhdAorCSAqIGFsbCB0eCBza2JzIGFyZSBmcmVlZC4KKwkgKi8KKwliZV90eF9jb21wbF9jbGVhbihhZGFwdGVyKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJlX2dldF9mcmFnX2hlYWRlcihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnLCB2b2lkICoqbWFjX2hkciwKLQkJCQl2b2lkICoqaXBfaGRyLCB2b2lkICoqdGNwdWRwX2hkciwKLQkJCQl1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKKyNkZWZpbmUgRldfRklMRV9IRFJfU0lHTiAJIlNlcnZlckVuZ2luZXMgQ29ycC4gIgorY2hhciBmbGFzaF9jb29raWVbMl1bMTZdID0JeyIqKiogU0UgRkxBUyIsCisJCQkJIkggRElSRUNUT1JZICoqKiAifTsKK3N0YXRpYyBpbnQgYmVfZmxhc2hfaW1hZ2Uoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAorCQkJc3RydWN0IGJlX2RtYV9tZW0gKmZsYXNoX2NtZCwgdTMyIGZsYXNoX3R5cGUpCiB7Ci0Jc3RydWN0IGV0aGhkciAqZWg7Ci0Jc3RydWN0IHZsYW5fZXRoaGRyICp2ZWg7Ci0Jc3RydWN0IGlwaGRyICppcGg7Ci0JdTggKnZhID0gcGFnZV9hZGRyZXNzKGZyYWctPnBhZ2UpICsgZnJhZy0+cGFnZV9vZmZzZXQ7Ci0JdW5zaWduZWQgbG9uZyBsbF9obGVuOworCWludCBzdGF0dXM7CisJdTMyIGZsYXNoX29wLCBpbWFnZV9vZmZzZXQgPSAwLCB0b3RhbF9ieXRlcywgaW1hZ2Vfc2l6ZSA9IDA7CisJaW50IG51bV9ieXRlczsKKwljb25zdCB1OCAqcCA9IGZ3LT5kYXRhOworCXN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20gKnJlcSA9IGZsYXNoX2NtZC0+dmE7CiAKLQlwcmVmZXRjaCh2YSk7Ci0JZWggPSAoc3RydWN0IGV0aGhkciAqKXZhOwotCSptYWNfaGRyID0gZWg7Ci0JbGxfaGxlbiA9IEVUSF9ITEVOOwotCWlmIChlaC0+aF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJaWYgKGVoLT5oX3Byb3RvID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewotCQkJdmVoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXZhOwotCQkJaWYgKHZlaC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpCi0JCQkJcmV0dXJuIC0xOworCXN3aXRjaCAoZmxhc2hfdHlwZSkgeworCWNhc2UgRkxBU0hST01fVFlQRV9JU0NTSV9BQ1RJVkU6CisJCWltYWdlX29mZnNldCA9IEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlQ7CisJCWltYWdlX3NpemUgPSBGTEFTSF9JTUFHRV9NQVhfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSFJPTV9UWVBFX0lTQ1NJX0JBQ0tVUDoKKwkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUOworCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7CisJCWJyZWFrOworCWNhc2UgRkxBU0hST01fVFlQRV9GQ09FX0ZXX0FDVElWRToKKwkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUOworCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7CisJCWJyZWFrOworCWNhc2UgRkxBU0hST01fVFlQRV9GQ09FX0ZXX0JBQ0tVUDoKKwkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlQ7CisJCWltYWdlX3NpemUgPSBGTEFTSF9JTUFHRV9NQVhfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSFJPTV9UWVBFX0JJT1M6CisJCWltYWdlX29mZnNldCA9IEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlQ7CisJCWltYWdlX3NpemUgPSBGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFOworCQlicmVhazsKKwljYXNlIEZMQVNIUk9NX1RZUEVfRkNPRV9CSU9TOgorCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9GQ29FX0JJT1NfU1RBUlQ7CisJCWltYWdlX3NpemUgPSBGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFOworCQlicmVhazsKKwljYXNlIEZMQVNIUk9NX1RZUEVfUFhFX0JJT1M6CisJCWltYWdlX29mZnNldCA9IEZMQVNIX1BYRV9CSU9TX1NUQVJUOworCQlpbWFnZV9zaXplID0gRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQogCi0JCQlsbF9obGVuICs9IFZMQU5fSExFTjsKLQkJfSBlbHNlIHsKKwlwICs9IHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIpICsgaW1hZ2Vfb2Zmc2V0OworCWlmIChwICsgaW1hZ2Vfc2l6ZSA+IGZ3LT5kYXRhICsgZnctPnNpemUpCisJCXJldHVybiAtMTsKKworCXRvdGFsX2J5dGVzID0gaW1hZ2Vfc2l6ZTsKKworCXdoaWxlICh0b3RhbF9ieXRlcykgeworCQlpZiAodG90YWxfYnl0ZXMgPiAzMioxMDI0KQorCQkJbnVtX2J5dGVzID0gMzIqMTAyNDsKKwkJZWxzZQorCQkJbnVtX2J5dGVzID0gdG90YWxfYnl0ZXM7CisJCXRvdGFsX2J5dGVzIC09IG51bV9ieXRlczsKKworCQlpZiAoIXRvdGFsX2J5dGVzKQorCQkJZmxhc2hfb3AgPSBGTEFTSFJPTV9PUEVSX0ZMQVNIOworCQllbHNlCisJCQlmbGFzaF9vcCA9IEZMQVNIUk9NX09QRVJfU0FWRTsKKwkJbWVtY3B5KHJlcS0+cGFyYW1zLmRhdGFfYnVmLCBwLCBudW1fYnl0ZXMpOworCQlwICs9IG51bV9ieXRlczsKKwkJc3RhdHVzID0gYmVfY21kX3dyaXRlX2ZsYXNocm9tKGFkYXB0ZXIsIGZsYXNoX2NtZCwKKwkJCQlmbGFzaF90eXBlLCBmbGFzaF9vcCwgbnVtX2J5dGVzKTsKKwkJaWYgKHN0YXR1cykgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJImNtZCB0byB3cml0ZSB0byBmbGFzaCByb20gZmFpbGVkLiB0eXBlL29wICVkLyVkXG4iLAorCQkJZmxhc2hfdHlwZSwgZmxhc2hfb3ApOwogCQkJcmV0dXJuIC0xOwogCQl9CisJCXlpZWxkKCk7CiAJfQotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNDsKLQlpcGggPSAoc3RydWN0IGlwaGRyICopKHZhICsgbGxfaGxlbik7Ci0JKmlwX2hkciA9IGlwaDsKLQlpZiAoaXBoLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCkKLQkJcmV0dXJuIC0xOwotCSpoZHJfZmxhZ3MgfD0gTFJPX1RDUDsKLQkqdGNwdWRwX2hkciA9ICh1OCAqKSAoKmlwX2hkcikgKyAoaXBoLT5paGwgPDwgMik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYmVfbHJvX2luaXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitpbnQgYmVfbG9hZF9mdyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKmZ1bmMpCiB7Ci0Jc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyOworCWNoYXIgZndfZmlsZVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRV07CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIgKmZoZHI7CisJc3RydWN0IGZsYXNoX3NlY3Rpb25faW5mbyAqZnNlYyA9IE5VTEw7CisJc3RydWN0IGJlX2RtYV9tZW0gZmxhc2hfY21kOworCWludCBzdGF0dXM7CisJY29uc3QgdTggKnA7CisJYm9vbCBlbnRyeV9mb3VuZCA9IGZhbHNlOworCWludCBmbGFzaF90eXBlOworCWNoYXIgZndfdmVyW0ZXX1ZFUl9MRU5dOworCWNoYXIgZndfY2ZnOwogCi0JbHJvX21nciA9ICZhZGFwdGVyLT5yeF9vYmoubHJvX21ncjsKLQlscm9fbWdyLT5kZXYgPSBuZXRkZXY7Ci0JbHJvX21nci0+ZmVhdHVyZXMgPSBMUk9fRl9OQVBJOwotCWxyb19tZ3ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCWxyb19tZ3ItPmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JbHJvX21nci0+bWF4X2Rlc2MgPSBCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCWxyb19tZ3ItPmxyb19hcnIgPSBhZGFwdGVyLT5yeF9vYmoubHJvX2Rlc2M7Ci0JbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gYmVfZ2V0X2ZyYWdfaGVhZGVyOwotCWxyb19tZ3ItPm1heF9hZ2dyID0gQkVfTUFYX0ZSQUdTX1BFUl9GUkFNRTsKKwlzdGF0dXMgPSBiZV9jbWRfZ2V0X2Z3X3ZlcihhZGFwdGVyLCBmd192ZXIpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlmd19jZmcgPSAqKGZ3X3ZlciArIDIpOworCWlmIChmd19jZmcgPT0gJzAnKQorCQlmd19jZmcgPSAnMSc7CisJc3RyY3B5KGZ3X2ZpbGUsIGZ1bmMpOworCisJc3RhdHVzID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X2ZpbGUsICZhZGFwdGVyLT5wZGV2LT5kZXYpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZndfZXhpdDsKKworCXAgPSBmdy0+ZGF0YTsKKwlmaGRyID0gKHN0cnVjdCBmbGFzaF9maWxlX2hkciAqKSBwOworCWlmIChtZW1jbXAoZmhkci0+c2lnbiwgRldfRklMRV9IRFJfU0lHTiwgc3RybGVuKEZXX0ZJTEVfSERSX1NJR04pKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmlybXdhcmUoJXMpIGxvYWQgZXJyb3IgKHNpZ25hdHVyZSBkaWQgbm90IG1hdGNoKVxuIiwKKwkJCQlmd19maWxlKTsKKwkJc3RhdHVzID0gLTE7CisJCWdvdG8gZndfZXhpdDsKKwl9CisKKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmxhc2hpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwgZndfZmlsZSk7CisKKwlwICs9IHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIpOworCXdoaWxlIChwIDwgKGZ3LT5kYXRhICsgZnctPnNpemUpKSB7CisJCWZzZWMgPSAoc3RydWN0IGZsYXNoX3NlY3Rpb25faW5mbyAqKXA7CisJCWlmICghbWVtY21wKGZsYXNoX2Nvb2tpZSwgZnNlYy0+Y29va2llLCBzaXplb2YoZmxhc2hfY29va2llKSkpIHsKKwkJCWVudHJ5X2ZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXAgKz0gMzI7CisJfQorCisJaWYgKCFlbnRyeV9mb3VuZCkgeworCQlzdGF0dXMgPSAtMTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZsYXNoIGNvb2tpZSBub3QgZm91bmQgaW4gZmlybXdhcmUgaW1hZ2VcbiIpOworCQlnb3RvIGZ3X2V4aXQ7CisJfQorCisJZmxhc2hfY21kLnNpemUgPSBzaXplb2Yoc3RydWN0IGJlX2NtZF93cml0ZV9mbGFzaHJvbSkgKyAzMioxMDI0OworCWZsYXNoX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGZsYXNoX2NtZC5zaXplLAorCQkJCQkmZmxhc2hfY21kLmRtYSk7CisJaWYgKCFmbGFzaF9jbWQudmEpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgd2hpbGUgZmxhc2hpbmdcbiIpOworCQlnb3RvIGZ3X2V4aXQ7CisJfQorCisJZm9yIChmbGFzaF90eXBlID0gRkxBU0hST01fVFlQRV9JU0NTSV9BQ1RJVkU7CisJCWZsYXNoX3R5cGUgPD0gRkxBU0hST01fVFlQRV9GQ09FX0ZXX0JBQ0tVUDsgZmxhc2hfdHlwZSsrKSB7CisJCXN0YXR1cyA9IGJlX2ZsYXNoX2ltYWdlKGFkYXB0ZXIsIGZ3LCAmZmxhc2hfY21kLAorCQkJCWZsYXNoX3R5cGUpOworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBmbGFzaF9jbWQuc2l6ZSwgZmxhc2hfY21kLnZhLAorCQkJCWZsYXNoX2NtZC5kbWEpOworCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmlybXdhcmUgbG9hZCBlcnJvclxuIik7CisJCWdvdG8gZndfZXhpdDsKKwl9CisKKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRmlybXdhcmUgZmxhc2hlZCBzdWNjZXNmdWxseVxuIik7CisKK2Z3X2V4aXQ6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiZV9uZXRkZXZfb3BzID0gewpAQCAtMTcyNywxOCArMTg4NiwxOCBAQAogCiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9UU08gfAogCQlORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwgTkVUSUZfRl9JUF9DU1VNIHwKLQkJTkVUSUZfRl9JUFY2X0NTVU07CisJCU5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9HUk87CiAKIAluZXRkZXYtPmZsYWdzIHw9IElGRl9NVUxUSUNBU1Q7CiAKIAlhZGFwdGVyLT5yeF9jc3VtID0gdHJ1ZTsKIAorCW5ldGlmX3NldF9nc29fbWF4X3NpemUobmV0ZGV2LCA2NTUzNSk7CisKIAlCRV9TRVRfTkVUREVWX09QUyhuZXRkZXYsICZiZV9uZXRkZXZfb3BzKTsKIAogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZiZV9ldGh0b29sX29wcyk7CiAKLQliZV9scm9faW5pdChhZGFwdGVyLCBuZXRkZXYpOwotCiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+cnhfZXEubmFwaSwgYmVfcG9sbF9yeCwKIAkJQkVfTkFQSV9XRUlHSFQpOwogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPnR4X2VxLm5hcGksIGJlX3BvbGxfdHhfbWNjLApAQCAtMTc1MCwxMyArMTkwOSwxMiBAQAogCiBzdGF0aWMgdm9pZCBiZV91bm1hcF9wY2lfYmFycyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7Ci0JaWYgKGN0cmwtPmNzcikKLQkJaW91bm1hcChjdHJsLT5jc3IpOwotCWlmIChjdHJsLT5kYikKLQkJaW91bm1hcChjdHJsLT5kYik7Ci0JaWYgKGN0cmwtPnBjaWNmZykKLQkJaW91bm1hcChjdHJsLT5wY2ljZmcpOworCWlmIChhZGFwdGVyLT5jc3IpCisJCWlvdW5tYXAoYWRhcHRlci0+Y3NyKTsKKwlpZiAoYWRhcHRlci0+ZGIpCisJCWlvdW5tYXAoYWRhcHRlci0+ZGIpOworCWlmIChhZGFwdGVyLT5wY2ljZmcpCisJCWlvdW5tYXAoYWRhcHRlci0+cGNpY2ZnKTsKIH0KIAogc3RhdGljIGludCBiZV9tYXBfcGNpX2JhcnMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0xNzY3LDE5ICsxOTI1LDE5IEBACiAJCQlwY2lfcmVzb3VyY2VfbGVuKGFkYXB0ZXItPnBkZXYsIDIpKTsKIAlpZiAoYWRkciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlhZGFwdGVyLT5jdHJsLmNzciA9IGFkZHI7CisJYWRhcHRlci0+Y3NyID0gYWRkcjsKIAogCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDQpLAogCQkJMTI4ICogMTAyNCk7CiAJaWYgKGFkZHIgPT0gTlVMTCkKIAkJZ290byBwY2lfbWFwX2VycjsKLQlhZGFwdGVyLT5jdHJsLmRiID0gYWRkcjsKKwlhZGFwdGVyLT5kYiA9IGFkZHI7CiAKIAlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChhZGFwdGVyLT5wZGV2LCAxKSwKIAkJCXBjaV9yZXNvdXJjZV9sZW4oYWRhcHRlci0+cGRldiwgMSkpOwogCWlmIChhZGRyID09IE5VTEwpCiAJCWdvdG8gcGNpX21hcF9lcnI7Ci0JYWRhcHRlci0+Y3RybC5wY2ljZmcgPSBhZGRyOworCWFkYXB0ZXItPnBjaWNmZyA9IGFkZHI7CiAKIAlyZXR1cm4gMDsKIHBjaV9tYXBfZXJyOgpAQCAtMTc5MCw3ICsxOTQ4LDcgQEAKIAogc3RhdGljIHZvaWQgYmVfY3RybF9jbGVhbnVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBiZV9kbWFfbWVtICptZW0gPSAmYWRhcHRlci0+Y3RybC5tYm94X21lbV9hbGxvY2VkOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW0gPSAmYWRhcHRlci0+bWJveF9tZW1fYWxsb2NlZDsKIAogCWJlX3VubWFwX3BjaV9iYXJzKGFkYXB0ZXIpOwogCkBAIC0xNzk5LDE0ICsxOTU3LDExIEBACiAJCQltZW0tPnZhLCBtZW0tPmRtYSk7CiB9CiAKLS8qIEluaXRpYWxpemUgdGhlIG1ib3ggcmVxdWlyZWQgdG8gc2VuZCBjbWRzIHRvIEJFICovCiBzdGF0aWMgaW50IGJlX2N0cmxfaW5pdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7Ci0Jc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsbG9jID0gJmN0cmwtPm1ib3hfbWVtX2FsbG9jZWQ7Ci0Jc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsaWduID0gJmN0cmwtPm1ib3hfbWVtOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbV9hbGxvYyA9ICZhZGFwdGVyLT5tYm94X21lbV9hbGxvY2VkOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbV9hbGlnbiA9ICZhZGFwdGVyLT5tYm94X21lbTsKIAlpbnQgc3RhdHVzOwotCXUzMiB2YWw7CiAKIAlzdGF0dXMgPSBiZV9tYXBfcGNpX2JhcnMoYWRhcHRlcik7CiAJaWYgKHN0YXR1cykKQEAgLTE4MjMsMTYgKzE5NzgsMTAgQEAKIAltYm94X21lbV9hbGlnbi0+dmEgPSBQVFJfQUxJR04obWJveF9tZW1fYWxsb2MtPnZhLCAxNik7CiAJbWJveF9tZW1fYWxpZ24tPmRtYSA9IFBUUl9BTElHTihtYm94X21lbV9hbGxvYy0+ZG1hLCAxNik7CiAJbWVtc2V0KG1ib3hfbWVtX2FsaWduLT52YSwgMCwgc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCkpOwotCXNwaW5fbG9ja19pbml0KCZjdHJsLT5tYm94X2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjdHJsLT5tY2NfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmN0cmwtPm1jY19jcV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWJveF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bWNjX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5tY2NfY3FfbG9jayk7CiAKLQljdHJsLT5hc3luY19jYiA9IGJlX2xpbmtfc3RhdHVzX3VwZGF0ZTsKLQljdHJsLT5hZGFwdGVyX2N0eHQgPSBhZGFwdGVyOwotCi0JdmFsID0gaW9yZWFkMzIoY3RybC0+cGNpY2ZnICsgUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVCk7Ci0JY3RybC0+cGNpX2Z1bmMgPSAodmFsID4+IE1FTUJBUl9DVFJMX0lOVF9DVFJMX1BGVU5DX1NISUZUKSAmCi0JCQkJCU1FTUJBUl9DVFJMX0lOVF9DVFJMX1BGVU5DX01BU0s7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4ODYsMTggKzIwMzUsMTcgQEAKIAogc3RhdGljIGludCBiZV9od191cChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJmFkYXB0ZXItPmN0cmw7CiAJaW50IHN0YXR1czsKIAotCXN0YXR1cyA9IGJlX2NtZF9QT1NUKGN0cmwpOworCXN0YXR1cyA9IGJlX2NtZF9QT1NUKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlzdGF0dXMgPSBiZV9jbWRfZ2V0X2Z3X3ZlcihjdHJsLCBhZGFwdGVyLT5md192ZXIpOworCXN0YXR1cyA9IGJlX2NtZF9nZXRfZndfdmVyKGFkYXB0ZXIsIGFkYXB0ZXItPmZ3X3Zlcik7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIAotCXN0YXR1cyA9IGJlX2NtZF9xdWVyeV9md19jZmcoY3RybCwgJmFkYXB0ZXItPnBvcnRfbnVtKTsKKwlzdGF0dXMgPSBiZV9jbWRfcXVlcnlfZndfY2ZnKGFkYXB0ZXIsICZhZGFwdGVyLT5wb3J0X251bSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTkwNyw3ICsyMDU1LDYgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmw7CiAJdTggbWFjW0VUSF9BTEVOXTsKIAogCXN0YXR1cyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTk0MiwxMSArMjA4OSwxNCBAQAogCQl9CiAJfQogCi0JY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCXN0YXR1cyA9IGJlX2N0cmxfaW5pdChhZGFwdGVyKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGZyZWVfbmV0ZGV2OwogCisJc3RhdHVzID0gYmVfY21kX3Jlc2V0X2Z1bmN0aW9uKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gY3RybF9jbGVhbjsKKwogCXN0YXR1cyA9IGJlX3N0YXRzX2luaXQoYWRhcHRlcik7CiAJaWYgKHN0YXR1cykKIAkJZ290byBjdHJsX2NsZWFuOwpAQCAtMTk1NSw3ICsyMTA1LDcgQEAKIAlpZiAoc3RhdHVzKQogCQlnb3RvIHN0YXRzX2NsZWFuOwogCi0Jc3RhdHVzID0gYmVfY21kX21hY19hZGRyX3F1ZXJ5KGN0cmwsIG1hYywgTUFDX0FERFJFU1NfVFlQRV9ORVRXT1JLLAorCXN0YXR1cyA9IGJlX2NtZF9tYWNfYWRkcl9xdWVyeShhZGFwdGVyLCBtYWMsIE1BQ19BRERSRVNTX1RZUEVfTkVUV09SSywKIAkJCXRydWUgLyogcGVybWFuZW50ICovLCAwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIHN0YXRzX2NsZWFuOwpAQCAtMjAwMSw5ICsyMTUxLDkgQEAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCXJ0bmxfbG9jaygpOwogCQliZV9jbG9zZShuZXRkZXYpOwotCQliZV9jbGVhcihhZGFwdGVyKTsKIAkJcnRubF91bmxvY2soKTsKIAl9CisJYmVfY2xlYXIoYWRhcHRlcik7CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC0yMDI2LDkgKzIxNzYsOSBAQAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKKwliZV9zZXR1cChhZGFwdGVyKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCXJ0bmxfbG9jaygpOwotCQliZV9zZXR1cChhZGFwdGVyKTsKIAkJYmVfb3BlbihuZXRkZXYpOwogCQlydG5sX3VubG9jaygpOwogCX0KQEAgLTIwNTQsMTIgKzIyMDQsNiBAQAogCQkJIiBVc2luZyAyMDQ4XG4iKTsKIAkJcnhfZnJhZ19zaXplID0gMjA0ODsKIAl9Ci0JLyogRW5zdXJlIHJ4X2ZyYWdfc2l6ZSBpcyBhbGlnbmVkIHRvIGNoYWNoZSBsaW5lICovCi0JaWYgKFNLQl9EQVRBX0FMSUdOKHJ4X2ZyYWdfc2l6ZSkgIT0gcnhfZnJhZ19zaXplKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKLQkJCSIgOiBCYWQgbW9kdWxlIHBhcmFtIHJ4X2ZyYWdfc2l6ZS4gVXNpbmcgMjA0OFxuIik7Ci0JCXJ4X2ZyYWdfc2l6ZSA9IDIwNDg7Ci0JfQogCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJlX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZmluX21hYy5jIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwppbmRleCBjMTVmYzI4Li4xNGJkMzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZmluX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKQEAgLTQ5MSw3ICs0OTEsNyBAQAogCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYmZpbl9tYWNfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJmaW5fbWFjX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBiZmluX21hY19ldGh0b29sX2dldHNldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBiZmluX21hY19ldGh0b29sX3NldHNldHRpbmdzLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCkBAIC02NTYsNyArNjU2LDcgQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IChza2ItPmxlbik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgYmZpbl9tYWNfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JtYWMuYyBiL2RyaXZlcnMvbmV0L2JtYWMuYwppbmRleCAyMDYxNDRmLi40MDZmMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYm1hYy5jCkBAIC0xNDg5LDcgKzE0ODksNyBAQAogCXN0cnVjdCBibWFjX2RhdGEgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlza2JfcXVldWVfdGFpbChicC0+cXVldWUsIHNrYik7CiAJYm1hY19zdGFydChkZXYpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGJtYWNfdHhfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMDZiOTAxMS4uMDhjZGRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTksMTIgKzU5LDEzIEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjEiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWF5IDYsIDIwMDkiCi0jZGVmaW5lIEZXX01JUFNfRklMRV8wNgkJImJueDIvYm54Mi1taXBzLTA2LTQuNi4xNi5mdyIKLSNkZWZpbmUgRldfUlYyUF9GSUxFXzA2CQkiYm54Mi9ibngyLXJ2MnAtMDYtNC42LjE2LmZ3IgotI2RlZmluZSBGV19NSVBTX0ZJTEVfMDkJCSJibngyL2JueDItbWlwcy0wOS00LjYuMTcuZnciCi0jZGVmaW5lIEZXX1JWMlBfRklMRV8wOQkJImJueDIvYm54Mi1ydjJwLTA5LTQuNi4xNS5mdyIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjAuMiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJBdWcgMjEsIDIwMDkiCisjZGVmaW5lIEZXX01JUFNfRklMRV8wNgkJImJueDIvYm54Mi1taXBzLTA2LTUuMC4wLmozLmZ3IgorI2RlZmluZSBGV19SVjJQX0ZJTEVfMDYJCSJibngyL2JueDItcnYycC0wNi01LjAuMC5qMy5mdyIKKyNkZWZpbmUgRldfTUlQU19GSUxFXzA5CQkiYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZnciCisjZGVmaW5lIEZXX1JWMlBfRklMRV8wOV9BeAkiYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdyIKKyNkZWZpbmUgRldfUlYyUF9GSUxFXzA5CQkiYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZnciCiAKICNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQogCkBAIC04Miw2ICs4Myw3IEBACiBNT0RVTEVfRklSTVdBUkUoRldfUlYyUF9GSUxFXzA2KTsKIE1PRFVMRV9GSVJNV0FSRShGV19NSVBTX0ZJTEVfMDkpOwogTU9EVUxFX0ZJUk1XQVJFKEZXX1JWMlBfRklMRV8wOSk7CitNT0RVTEVfRklSTVdBUkUoRldfUlYyUF9GSUxFXzA5X0F4KTsKIAogc3RhdGljIGludCBkaXNhYmxlX21zaSA9IDA7CiAKQEAgLTE0NSw3ICsxNDcsNyBAQAogCXsgMCwgfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9zcGVjIGZsYXNoX3RhYmxlW10gPQorc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFzaF9zcGVjIGZsYXNoX3RhYmxlW10gPQogewogI2RlZmluZSBCVUZGRVJFRF9GTEFHUwkJKEJOWDJfTlZfQlVGRkVSRUQgfCBCTlgyX05WX1RSQU5TTEFURSkKICNkZWZpbmUgTk9OQlVGRkVSRURfRkxBR1MJKEJOWDJfTlZfV1JFTikKQEAgLTIzNCw3ICsyMzYsNyBAQAogCSAiQnVmZmVyZWQgZmxhc2ggKDI1NmtCKSJ9LAogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9zcGVjIGZsYXNoXzU3MDkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX3NwZWMgZmxhc2hfNTcwOSA9IHsKIAkuZmxhZ3MJCT0gQk5YMl9OVl9CVUZGRVJFRCwKIAkucGFnZV9iaXRzCT0gQkNNNTcwOV9GTEFTSF9QQUdFX0JJVFMsCiAJLnBhZ2Vfc2l6ZQk9IEJDTTU3MDlfRkxBU0hfUEFHRV9TSVpFLApAQCAtNjIxLDYgKzYyMyw5IEBACiAJaW50IGk7CiAKIAlhdG9taWNfaW5jKCZicC0+aW50cl9zZW0pOworCWlmICghbmV0aWZfcnVubmluZyhicC0+ZGV2KSkKKwkJcmV0dXJuOworCiAJYm54Ml9kaXNhYmxlX2ludChicCk7CiAJZm9yIChpID0gMDsgaSA8IGJwLT5pcnFfbnZlY3M7IGkrKykKIAkJc3luY2hyb25pemVfaXJxKGJwLT5pcnFfdGJsW2ldLnZlY3Rvcik7CkBAIC0zNjIwLDcgKzM2MjUsMTEgQEAKIAogCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkgewogCQltaXBzX2Z3X2ZpbGUgPSBGV19NSVBTX0ZJTEVfMDk7Ci0JCXJ2MnBfZndfZmlsZSA9IEZXX1JWMlBfRklMRV8wOTsKKwkJaWYgKChDSElQX0lEKGJwKSA9PSBDSElQX0lEXzU3MDlfQTApIHx8CisJCSAgICAoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA5X0ExKSkKKwkJCXJ2MnBfZndfZmlsZSA9IEZXX1JWMlBfRklMRV8wOV9BeDsKKwkJZWxzZQorCQkJcnYycF9md19maWxlID0gRldfUlYyUF9GSUxFXzA5OwogCX0gZWxzZSB7CiAJCW1pcHNfZndfZmlsZSA9IEZXX01JUFNfRklMRV8wNjsKIAkJcnYycF9md19maWxlID0gRldfUlYyUF9GSUxFXzA2OwpAQCAtNDIyNiw3ICs0MjM1LDcgQEAKIHsKIAl1MzIgdmFsOwogCWludCBqLCBlbnRyeV9jb3VudCwgcmMgPSAwOwotCXN0cnVjdCBmbGFzaF9zcGVjICpmbGFzaDsKKwljb25zdCBzdHJ1Y3QgZmxhc2hfc3BlYyAqZmxhc2g7CiAKIAlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpIHsKIAkJYnAtPmZsYXNoX2luZm8gPSAmZmxhc2hfNTcwOTsKQEAgLTQ4NjAsNiArNDg2OSw3IEBACiAJYm54Ml9yZWdfd3JfaW5kKGJwLCBCTlgyX1JCVUZfQ09ORklHMiwgQk5YMl9SQlVGX0NPTkZJRzJfVkFMKG10dSkpOwogCWJueDJfcmVnX3dyX2luZChicCwgQk5YMl9SQlVGX0NPTkZJRzMsIEJOWDJfUkJVRl9DT05GSUczX1ZBTChtdHUpKTsKIAorCW1lbXNldChicC0+Ym54Ml9uYXBpWzBdLnN0YXR1c19ibGsubXNpLCAwLCBicC0+c3RhdHVzX3N0YXRzX3NpemUpOwogCWZvciAoaSA9IDA7IGkgPCBCTlgyX01BWF9NU0lYX1ZFQzsgaSsrKQogCQlicC0+Ym54Ml9uYXBpW2ldLmxhc3Rfc3RhdHVzX2lkeCA9IDA7CiAKQEAgLTQ4OTgsNyArNDkwOCw3IEBACiAJUkVHX1dSKGJwLCBCTlgyX0hDX0NNRF9USUNLUywKIAkgICAgICAgKGJwLT5jbWRfdGlja3NfaW50IDw8IDE2KSB8IGJwLT5jbWRfdGlja3MpOwogCi0JaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA4KQorCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQlJPS0VOX1NUQVRTKQogCQlSRUdfV1IoYnAsIEJOWDJfSENfU1RBVFNfVElDS1MsIDApOwogCWVsc2UKIAkJUkVHX1dSKGJwLCBCTlgyX0hDX1NUQVRTX1RJQ0tTLCBicC0+c3RhdHNfdGlja3MpOwpAQCAtNDkxOSw3ICs0OTI5LDcgQEAKIAl9CiAKIAlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX09ORV9TSE9UX01TSSkKLQkJdmFsIHw9IEJOWDJfSENfQ09ORklHX09ORV9TSE9UOworCQl2YWwgfD0gQk5YMl9IQ19DT05GSUdfT05FX1NIT1QgfCBCTlgyX0hDX0NPTkZJR19VU0VfSU5UX1BBUkFNOwogCiAJUkVHX1dSKGJwLCBCTlgyX0hDX0NPTkZJRywgdmFsKTsKIApAQCAtNjAyMyw3ICs2MDMzLDcgQEAKIAkJYm54Ml9yZWdfcmRfaW5kKGJwLCBCTlgyX0ZXX1JYX0RST1BfQ09VTlQpOwogCiAJLyogd29ya2Fyb3VuZCBvY2Nhc2lvbmFsIGNvcnJ1cHRlZCBjb3VudGVycyAqLwotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCAmJiBicC0+c3RhdHNfdGlja3MpCisJaWYgKChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQlJPS0VOX1NUQVRTKSAmJiBicC0+c3RhdHNfdGlja3MpCiAJCVJFR19XUihicCwgQk5YMl9IQ19DT01NQU5ELCBicC0+aGNfY21kIHwKIAkJCQkJICAgIEJOWDJfSENfQ09NTUFORF9TVEFUU19OT1cpOwogCkBAIC02MjU1LDkgKzYyNjUsMTQgQEAKIHsKIAlzdHJ1Y3QgYm54MiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JYm54Ml9uZXRpZl9zdG9wKGJwKTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlibngyX25ldGlmX3N0b3AoYnApOwogCiAJYnAtPnZsZ3JwID0gdmxncnA7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuOworCiAJYm54Ml9zZXRfcnhfbW9kZShkZXYpOwogCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQ0FOX0tFRVBfVkxBTikKIAkJYm54Ml9md19zeW5jKGJwLCBCTlgyX0RSVl9NU0dfQ09ERV9LRUVQX1ZMQU5fVVBEQVRFLCAwLCAxKTsKQEAgLTYyNzAsNyArNjI4NSw3IEBACiAgKiBibngyX3R4X2ludCgpIHJ1bnMgd2l0aG91dCBuZXRpZl90eF9sb2NrIHVubGVzcyBpdCBuZWVkcyB0byBjYWxsCiAgKiBuZXRpZl93YWtlX3F1ZXVlKCkuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogYm54Ml9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDIgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTY0NzgsNyArNjQ5Myw4IEBACiAJCXN0YXRzX2Jsay0+c3RhdF9FdGhlclN0YXRzT3ZlcnJzaXplUGt0cyk7CiAKIAluZXRfc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0KLQkJKHVuc2lnbmVkIGxvbmcpIHN0YXRzX2Jsay0+c3RhdF9JZkluTUJVRkRpc2NhcmRzOworCQkodW5zaWduZWQgbG9uZykgKHN0YXRzX2Jsay0+c3RhdF9JZkluRlRRRGlzY2FyZHMgKworCQlzdGF0c19ibGstPnN0YXRfSWZJbk1CVUZEaXNjYXJkcyk7CiAKIAluZXRfc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyA9CiAJCSh1bnNpZ25lZCBsb25nKSBzdGF0c19ibGstPnN0YXRfRG90M1N0YXRzQWxpZ25tZW50RXJyb3JzOwpAQCAtNjUxMSw4ICs2NTI3LDggQEAKIAkJbmV0X3N0YXRzLT50eF9jYXJyaWVyX2Vycm9yczsKIAogCW5ldF9zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9Ci0JCSh1bnNpZ25lZCBsb25nKSAoc3RhdHNfYmxrLT5zdGF0X0lmSW5NQlVGRGlzY2FyZHMgKwotCQlzdGF0c19ibGstPnN0YXRfRndSeERyb3ApOworCQkodW5zaWduZWQgbG9uZykgKHN0YXRzX2Jsay0+c3RhdF9JZkluRlRRRGlzY2FyZHMgKworCQlzdGF0c19ibGstPnN0YXRfSWZJbk1CVUZEaXNjYXJkcyArIHN0YXRzX2Jsay0+c3RhdF9Gd1J4RHJvcCk7CiAKIAlyZXR1cm4gbmV0X3N0YXRzOwogfQpAQCAtNjkzNCw3ICs2OTUwLDcgQEAKIAkJMHhmZjsKIAogCWJwLT5zdGF0c190aWNrcyA9IGNvYWwtPnN0YXRzX2Jsb2NrX2NvYWxlc2NlX3VzZWNzOwotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkgeworCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQlJPS0VOX1NUQVRTKSB7CiAJCWlmIChicC0+c3RhdHNfdGlja3MgIT0gMCAmJiBicC0+c3RhdHNfdGlja3MgIT0gVVNFQ19QRVJfU0VDKQogCQkJYnAtPnN0YXRzX3RpY2tzID0gVVNFQ19QRVJfU0VDOwogCX0KQEAgLTY5ODUsOSArNzAwMSwxNCBAQAogCQlpbnQgcmM7CiAKIAkJcmMgPSBibngyX2FsbG9jX21lbShicCk7Ci0JCWlmIChyYykKKwkJaWYgKCFyYykKKwkJCXJjID0gYm54Ml9pbml0X25pYyhicCwgMCk7CisKKwkJaWYgKHJjKSB7CisJCQlibngyX25hcGlfZW5hYmxlKGJwKTsKKwkJCWRldl9jbG9zZShicC0+ZGV2KTsKIAkJCXJldHVybiByYzsKLQkJYm54Ml9pbml0X25pYyhicCwgMCk7CisJCX0KIAkJYm54Ml9uZXRpZl9zdGFydChicCk7CiAJfQogCXJldHVybiAwOwpAQCAtNzA3OCwxMSArNzA5OSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgQk5YMl9OVU1fU1RBVFMgNDYKLQogc3RhdGljIHN0cnVjdCB7CiAJY2hhciBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKLX0gYm54Ml9zdGF0c19zdHJfYXJyW0JOWDJfTlVNX1NUQVRTXSA9IHsKK30gYm54Ml9zdGF0c19zdHJfYXJyW10gPSB7CiAJeyAicnhfYnl0ZXMiIH0sCiAJeyAicnhfZXJyb3JfYnl0ZXMiIH0sCiAJeyAidHhfYnl0ZXMiIH0sCkBAIC03MTI3LDEwICs3MTQ2LDE0IEBACiAJeyAidHhfeG9mZl9mcmFtZXMiIH0sCiAJeyAicnhfbWFjX2N0cmxfZnJhbWVzIiB9LAogCXsgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCisJeyAicnhfZnRxX2Rpc2NhcmRzIiB9LAogCXsgInJ4X2Rpc2NhcmRzIiB9LAogCXsgInJ4X2Z3X2Rpc2NhcmRzIiB9LAogfTsKIAorI2RlZmluZSBCTlgyX05VTV9TVEFUUyAoc2l6ZW9mKGJueDJfc3RhdHNfc3RyX2FycikvXAorCQkJc2l6ZW9mKGJueDJfc3RhdHNfc3RyX2FyclswXSkpCisKICNkZWZpbmUgU1RBVFNfT0ZGU0VUMzIob2Zmc2V0X25hbWUpIChvZmZzZXRvZihzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jaywgb2Zmc2V0X25hbWUpIC8gNCkKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYm54Ml9zdGF0c19vZmZzZXRfYXJyW0JOWDJfTlVNX1NUQVRTXSA9IHsKQEAgLTcxNzgsNiArNzIwMSw3IEBACiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9PdXRYb2ZmU2VudCksCiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9NYWNDb250cm9sRnJhbWVzUmVjZWl2ZWQpLAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbkZyYW1lc0wyRmlsdGVyRGlzY2FyZHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbkZUUURpc2NhcmRzKSwKICAgICBTVEFUU19PRkZTRVQzMihzdGF0X0lmSW5NQlVGRGlzY2FyZHMpLAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRndSeERyb3ApLAogfTsKQEAgLTcxOTAsNyArNzIxNCw3IEBACiAJNCwwLDQsNCw0LDQsNCw0LDQsNCwKIAk0LDQsNCw0LDQsNCw0LDQsNCw0LAogCTQsNCw0LDQsNCw0LDQsNCw0LDQsCi0JNCw0LDQsNCw0LDQsCisJNCw0LDQsNCw0LDQsNCwKIH07CiAKIHN0YXRpYyB1OCBibngyXzU3MDhfc3RhdHNfbGVuX2FycltCTlgyX05VTV9TVEFUU10gPSB7CkBAIC03MTk4LDcgKzcyMjIsNyBAQAogCTQsNCw0LDQsNCw0LDQsNCw0LDQsCiAJNCw0LDQsNCw0LDQsNCw0LDQsNCwKIAk0LDQsNCw0LDQsNCw0LDQsNCw0LAotCTQsNCw0LDQsNCw0LAorCTQsNCw0LDQsNCw0LDQsCiB9OwogCiAjZGVmaW5lIEJOWDJfTlVNX1RFU1RTIDYKQEAgLTc0NTYsOSArNzQ4MCw2IEBACiAJfQogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQogCQlpZiAoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfUkVNT1RFX1BIWV9DQVApCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTc3MTMsNiArNzczNCw3IEBACiAJCQlyYyA9IC1FSU87CiAJCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJCX0KKwkJYnAtPmZsYWdzIHw9IEJOWDJfRkxBR19CUk9LRU5fU1RBVFM7CiAJfQogCiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5ICYmIENISVBfUkVWKGJwKSAhPSBDSElQX1JFVl9BeCkgewpAQCAtNzg0NCwxMyArNzg2NiwxMyBAQAogCiAJYnAtPnJ4X2NzdW0gPSAxOwogCi0JYnAtPnR4X3F1aWNrX2NvbnNfdHJpcF9pbnQgPSAyMDsKKwlicC0+dHhfcXVpY2tfY29uc190cmlwX2ludCA9IDI7CiAJYnAtPnR4X3F1aWNrX2NvbnNfdHJpcCA9IDIwOwotCWJwLT50eF90aWNrc19pbnQgPSA4MDsKKwlicC0+dHhfdGlja3NfaW50ID0gMTg7CiAJYnAtPnR4X3RpY2tzID0gODA7CiAKLQlicC0+cnhfcXVpY2tfY29uc190cmlwX2ludCA9IDY7Ci0JYnAtPnJ4X3F1aWNrX2NvbnNfdHJpcCA9IDY7CisJYnAtPnJ4X3F1aWNrX2NvbnNfdHJpcF9pbnQgPSAyOworCWJwLT5yeF9xdWlja19jb25zX3RyaXAgPSAxMjsKIAlicC0+cnhfdGlja3NfaW50ID0gMTg7CiAJYnAtPnJ4X3RpY2tzID0gMTg7CiAKQEAgLTgwMjgsNiArODA1MCwxMyBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgdm9pZCBpbmxpbmUgdmxhbl9mZWF0dXJlc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyNpZmRlZiBCQ01fVkxBTgorCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBmbGFnczsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogYm54Ml9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTgwNjksMTYgKzgwOTgsMjAgQEAKIAltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGJwLT5tYWNfYWRkciwgNik7CiAKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0c7Ci0JaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQorCXZsYW5fZmVhdHVyZXNfYWRkKGRldiwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyk7CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0KKwkJdmxhbl9mZWF0dXJlc19hZGQoZGV2LCBORVRJRl9GX0lQVjZfQ1NVTSk7CisJfQogI2lmZGVmIEJDTV9WTEFOCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAjZW5kaWYKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOOwotCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkKKwl2bGFuX2ZlYXR1cmVzX2FkZChkZXYsIE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKKwlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpIHsKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0KKwkJdmxhbl9mZWF0dXJlc19hZGQoZGV2LCBORVRJRl9GX1RTTzYpOworCX0KIAlpZiAoKHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldikpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTgxOTMsNiArODIyNiwxMSBAQAogCXJ0bmxfbG9jaygpOwogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAorCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpIHsKKwkJcnRubF91bmxvY2soKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlibngyX25ldGlmX3N0b3AoYnApOwogCQlkZWxfdGltZXJfc3luYygmYnAtPnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCBhNGYxMmZkLi42YzdmNzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC02NzE4LDYgKzY3MTgsNyBAQAogCQkJCQkgQk5YMl9GTEFHX1VTSU5HX01TSVgpCiAjZGVmaW5lIEJOWDJfRkxBR19KVU1CT19CUk9LRU4JCTB4MDAwMDA4MDAKICNkZWZpbmUgQk5YMl9GTEFHX0NBTl9LRUVQX1ZMQU4JCTB4MDAwMDEwMDAKKyNkZWZpbmUgQk5YMl9GTEFHX0JST0tFTl9TVEFUUwkJMHgwMDAwMjAwMAogCiAJc3RydWN0IGJueDJfbmFwaQlibngyX25hcGlbQk5YMl9NQVhfTVNJWF9WRUNdOwogCkBAIC02ODg4LDcgKzY4ODksNyBAQAogCWludAkJCXBtX2NhcDsKIAlpbnQJCQlwY2l4X2NhcDsKIAotCXN0cnVjdCBmbGFzaF9zcGVjCSpmbGFzaF9pbmZvOworCWNvbnN0IHN0cnVjdCBmbGFzaF9zcGVjCSpmbGFzaF9pbmZvOwogCXUzMgkJCWZsYXNoX3NpemU7CiAKIAlpbnQJCQlzdGF0dXNfc3RhdHNfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC5oCmluZGV4IDg1YTczN2MuLmJiZjg0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnguaApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBCTlgyWF9ORVdfTkFQSQogCiAKKworI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KICNpbmNsdWRlICJibngyeF9yZWcuaCIKICNpbmNsdWRlICJibngyeF9md19kZWZzLmgiCiAjaW5jbHVkZSAiYm54MnhfaHNpLmgiCkBAIC04Nyw2ICs4OSw3IEBACiAJfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIGJueDJ4X3BhbmljKCkgZG8geyBcCisJCWJwLT5wYW5pYyA9IDE7IFwKIAkJQk5YMlhfRVJSKCJkcml2ZXIgYXNzZXJ0XG4iKTsgXAogCQlibngyeF9wYW5pY19kdW1wKGJwKTsgXAogCX0gd2hpbGUgKDApCkBAIC0xMTMsMjEgKzExNiwzMiBAQAogI2RlZmluZSBSRUdfUkRfRE1BRShicCwgb2Zmc2V0LCB2YWxwLCBsZW4zMikgXAogCWRvIHsgXAogCQlibngyeF9yZWFkX2RtYWUoYnAsIG9mZnNldCwgbGVuMzIpO1wKLQkJbWVtY3B5KHZhbHAsIGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgbGVuMzIgKiA0KTsgXAorCQltZW1jcHkodmFscCwgYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pLCAobGVuMzIpICogNCk7IFwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFR19XUl9ETUFFKGJwLCBvZmZzZXQsIHZhbHAsIGxlbjMyKSBcCiAJZG8geyBcCi0JCW1lbWNweShibngyeF9zcChicCwgd2JfZGF0YVswXSksIHZhbHAsIGxlbjMyICogNCk7IFwKKwkJbWVtY3B5KGJueDJ4X3NwKGJwLCB3Yl9kYXRhWzBdKSwgdmFscCwgKGxlbjMyKSAqIDQpOyBcCiAJCWJueDJ4X3dyaXRlX2RtYWUoYnAsIGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpLCBcCiAJCQkJIG9mZnNldCwgbGVuMzIpOyBcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBWSVJUX1dSX0RNQUVfTEVOKGJwLCBkYXRhLCBhZGRyLCBsZW4zMikgXAorCWRvIHsgXAorCQltZW1jcHkoR1VOWklQX0JVRihicCksIGRhdGEsIChsZW4zMikgKiA0KTsgXAorCQlibngyeF93cml0ZV9iaWdfYnVmX3diKGJwLCBhZGRyLCBsZW4zMik7IFwKKwl9IHdoaWxlICgwKQorCiAjZGVmaW5lIFNITUVNX0FERFIoYnAsIGZpZWxkKQkJKGJwLT5jb21tb24uc2htZW1fYmFzZSArIFwKIAkJCQkJIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGZpZWxkKSkKICNkZWZpbmUgU0hNRU1fUkQoYnAsIGZpZWxkKQkJUkVHX1JEKGJwLCBTSE1FTV9BRERSKGJwLCBmaWVsZCkpCiAjZGVmaW5lIFNITUVNX1dSKGJwLCBmaWVsZCwgdmFsKQlSRUdfV1IoYnAsIFNITUVNX0FERFIoYnAsIGZpZWxkKSwgdmFsKQogCisjZGVmaW5lIFNITUVNMl9BRERSKGJwLCBmaWVsZCkJCShicC0+Y29tbW9uLnNobWVtMl9iYXNlICsgXAorCQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHNobWVtMl9yZWdpb24sIGZpZWxkKSkKKyNkZWZpbmUgU0hNRU0yX1JEKGJwLCBmaWVsZCkJCVJFR19SRChicCwgU0hNRU0yX0FERFIoYnAsIGZpZWxkKSkKKyNkZWZpbmUgU0hNRU0yX1dSKGJwLCBmaWVsZCwgdmFsKQlSRUdfV1IoYnAsIFNITUVNMl9BRERSKGJwLCBmaWVsZCksIHZhbCkKKwogI2RlZmluZSBFTUFDX1JEKGJwLCByZWcpCQlSRUdfUkQoYnAsIGVtYWNfYmFzZSArIHJlZykKICNkZWZpbmUgRU1BQ19XUihicCwgcmVnLCB2YWwpCQlSRUdfV1IoYnAsIGVtYWNfYmFzZSArIHJlZywgdmFsKQogCkBAIC0xNDIsNiArMTU2LDkgQEAKIHN0cnVjdCBzd190eF9iZCB7CiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKIAl1MTYJCWZpcnN0X2JkOworCXU4CQlmbGFnczsKKy8qIFNldCBvbiB0aGUgZmlyc3QgQkQgZGVzY3JpcHRvciB3aGVuIHRoZXJlIGlzIGEgc3BsaXQgQkQgKi8KKyNkZWZpbmUgQk5YMlhfVFNPX1NQTElUX0JECQkoMTw8MCkKIH07CiAKIHN0cnVjdCBzd19yeF9wYWdlIHsKQEAgLTE0OSw2ICsxNjYsMTEgQEAKIAlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpCiB9OwogCit1bmlvbiBkYl9wcm9kIHsKKwlzdHJ1Y3QgZG9vcmJlbGxfc2V0X3Byb2QgZGF0YTsKKwl1MzIJCXJhdzsKK307CisKIAogLyogTUMgaHNpICovCiAjZGVmaW5lIEJDTV9QQUdFX1NISUZUCQkJMTIKQEAgLTE2MCw3ICsxODIsNyBAQAogI2RlZmluZSBQQUdFU19QRVJfU0dFCQkJKDEgPDwgUEFHRVNfUEVSX1NHRV9TSElGVCkKICNkZWZpbmUgU0dFX1BBR0VfU0laRQkJCVBBR0VfU0laRQogI2RlZmluZSBTR0VfUEFHRV9TSElGVAkJCVBBR0VfU0hJRlQKLSNkZWZpbmUgU0dFX1BBR0VfQUxJR04oYWRkcikJCVBBR0VfQUxJR04oKHR5cGVvZihQQUdFX1NJWkUpKWFkZHIpCisjZGVmaW5lIFNHRV9QQUdFX0FMSUdOKGFkZHIpCQlQQUdFX0FMSUdOKCh0eXBlb2YoUEFHRV9TSVpFKSkoYWRkcikpCiAKIC8qIFNHRSByaW5nIHJlbGF0ZWQgbWFjcm9zICovCiAjZGVmaW5lIE5VTV9SWF9TR0VfUEFHRVMJCTIKQEAgLTIzNCwxNSArMjU2LDE0IEBACiAKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJbmFwaTsKIAorCXU4CQkJaXNfcnhfcXVldWU7CisKIAlzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2sgKnN0YXR1c19ibGs7CiAJZG1hX2FkZHJfdAkJc3RhdHVzX2Jsa19tYXBwaW5nOwogCi0Jc3RydWN0IGV0aF90eF9kYl9kYXRhCSpod190eF9wcm9kczsKLQlkbWFfYWRkcl90CQl0eF9wcm9kc19tYXBwaW5nOwotCiAJc3RydWN0IHN3X3R4X2JkCQkqdHhfYnVmX3Jpbmc7CiAKLQlzdHJ1Y3QgZXRoX3R4X2JkCSp0eF9kZXNjX3Jpbmc7CisJdW5pb24gZXRoX3R4X2JkX3R5cGVzCSp0eF9kZXNjX3Jpbmc7CiAJZG1hX2FkZHJfdAkJdHhfZGVzY19tYXBwaW5nOwogCiAJc3RydWN0IHN3X3J4X2JkCQkqcnhfYnVmX3Jpbmc7CS8qIEJEcyBtYXBwaW5ncyByaW5nICovCkBAIC0yNzIsNiArMjkzLDggQEAKIAl1OAkJCWNsX2lkOwkvKiBldGggY2xpZW50IGlkICovCiAJdTgJCQlzYl9pZDsJLyogc3RhdHVzIGJsb2NrIG51bWJlciBpbiBIVyAqLwogCisJdW5pb24gZGJfcHJvZAkJdHhfZGI7CisKIAl1MTYJCQl0eF9wa3RfcHJvZDsKIAl1MTYJCQl0eF9wa3RfY29uczsKIAl1MTYJCQl0eF9iZF9wcm9kOwpAQCAtMjkxLDkgKzMxNCwxMSBAQAogCV9fbGUxNgkJCSpyeF9jb25zX3NiOwogCV9fbGUxNgkJCSpyeF9iZF9jb25zX3NiOwogCisKIAl1bnNpZ25lZCBsb25nCQl0eF9wa3QsCiAJCQkJcnhfcGt0LAogCQkJCXJ4X2NhbGxzOworCiAJLyogVFBBIHJlbGF0ZWQgKi8KIAlzdHJ1Y3Qgc3dfcnhfYmQJCXRwYV9wb29sW0VUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxSF07CiAJdTgJCQl0cGFfc3RhdGVbRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTFIXTsKQEAgLTMwOSwyMSArMzM0LDI0IEBACiAJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF94Y2xpZW50OwogCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyBldGhfcV9zdGF0czsKIAotCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKKwkvKiBUaGUgc2l6ZSBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBmb2xsb3dpbmc6CisJICAgICBzaXplb2YgbmFtZSBmaWVsZCBmcm9tIG5ldGRldiBzdHJ1Y3R1cmUgKworCSAgICAgNCAoJy1YeC0nIHN0cmluZykgKworCSAgICAgNCAoZm9yIHRoZSBkaWdpdHMgYW5kIHRvIG1ha2UgaXQgRFdPUkQgYWxpZ25lZCkgKi8KKyNkZWZpbmUgRlBfTkFNRV9TSVpFCQkoc2l6ZW9mKCgoc3RydWN0IG5ldF9kZXZpY2UgKikwKS0+bmFtZSkgKyA4KQorCWNoYXIJCQluYW1lW0ZQX05BTUVfU0laRV07CiAJc3RydWN0IGJueDJ4CQkqYnA7IC8qIHBhcmVudCAqLwogfTsKIAogI2RlZmluZSBibngyeF9mcChicCwgbnIsIHZhcikJCShicC0+ZnBbbnJdLnZhcikKIAotI2RlZmluZSBCTlgyWF9IQVNfV09SSyhmcCkJKGJueDJ4X2hhc19yeF93b3JrKGZwKSB8fCBibngyeF9oYXNfdHhfd29yayhmcCkpCi0KIAogLyogTUMgaHNpICovCiAjZGVmaW5lIE1BWF9GRVRDSF9CRAkJCTEzCS8qIEhXIG1heCBCRHMgcGVyIHBhY2tldCAqLwogI2RlZmluZSBSWF9DT1BZX1RIUkVTSAkJCTkyCiAKICNkZWZpbmUgTlVNX1RYX1JJTkdTCQkJMTYKLSNkZWZpbmUgVFhfREVTQ19DTlQJCShCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpKQorI2RlZmluZSBUWF9ERVNDX0NOVAkJKEJDTV9QQUdFX1NJWkUgLyBzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSkKICNkZWZpbmUgTUFYX1RYX0RFU0NfQ05UCQkJKFRYX0RFU0NfQ05UIC0gMSkKICNkZWZpbmUgTlVNX1RYX0JECQkJKFRYX0RFU0NfQ05UICogTlVNX1RYX1JJTkdTKQogI2RlZmluZSBNQVhfVFhfQkQJCQkoTlVNX1RYX0JEIC0gMSkKQEAgLTM5NSw3ICs0MjMsNyBAQAogI2RlZmluZSBEUE1fVFJJR0VSX1RZUEUJCQkweDQwCiAjZGVmaW5lIERPT1JCRUxMKGJwLCBjaWQsIHZhbCkgXAogCWRvIHsgXAotCQl3cml0ZWwoKHUzMil2YWwsIChicCktPmRvb3JiZWxscyArIChCQ01fUEFHRV9TSVpFICogY2lkKSArIFwKKwkJd3JpdGVsKCh1MzIpKHZhbCksIGJwLT5kb29yYmVsbHMgKyAoQkNNX1BBR0VfU0laRSAqIChjaWQpKSArIFwKIAkJICAgICAgIERQTV9UUklHRVJfVFlQRSk7IFwKIAl9IHdoaWxlICgwKQogCkBAIC01MjMsNiArNTUxLDcgQEAKICNkZWZpbmUgTlZSQU1fUEFHRV9TSVpFCQkJMjU2CiAKIAl1MzIJCQlzaG1lbV9iYXNlOworCXUzMgkJCXNobWVtMl9iYXNlOwogCiAJdTMyCQkJaHdfY29uZmlnOwogCkBAIC03NTcsNiArNzg2LDcgQEAKIAlzdHJ1Y3QgbmlnX3N0YXRzCQluaWdfc3RhdHM7CiAJc3RydWN0IGhvc3RfcG9ydF9zdGF0cwkJcG9ydF9zdGF0czsKIAlzdHJ1Y3QgaG9zdF9mdW5jX3N0YXRzCQlmdW5jX3N0YXRzOworCXN0cnVjdCBob3N0X2Z1bmNfc3RhdHMJCWZ1bmNfc3RhdHNfYmFzZTsKIAogCXUzMgkJCQl3Yl9jb21wOwogCXUzMgkJCQl3Yl9kYXRhWzRdOwpAQCAtODc3LDYgKzkwNyw3IEBACiAKIAlzdHJ1Y3QgbGlua19wYXJhbXMJbGlua19wYXJhbXM7CiAJc3RydWN0IGxpbmtfdmFycwlsaW5rX3ZhcnM7CisJc3RydWN0IG1kaW9faWZfaW5mbwltZGlvOwogCiAJc3RydWN0IGJueDJ4X2NvbW1vbgljb21tb247CiAJc3RydWN0IGJueDJ4X3BvcnQJcG9ydDsKQEAgLTkwMiw4ICs5MzMsNiBAQAogCXUxNgkJCXJ4X3F1aWNrX2NvbnNfdHJpcDsKIAl1MTYJCQlyeF90aWNrc19pbnQ7CiAJdTE2CQkJcnhfdGlja3M7Ci0vKiBNYXhpbWFsIGNvYWxlc2NpbmcgdGltZW91dCBpbiB1cyAqLwotI2RlZmluZSBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVAkJKDB4ZjAqMTIpCiAKIAl1MzIJCQlsaW5fY250OwogCkBAIC05NDcsMTAgKzk3NiwxMSBAQAogCWRtYV9hZGRyX3QgICAgICAJcW1fbWFwcGluZzsKICNlbmRpZgogCisJaW50CQkJZHJvcGxlc3NfZmM7CisKIAlpbnQJCQlkbWFlX3JlYWR5OwogCS8qIHVzZWQgdG8gc3luY2hyb25pemUgZG1hZSBhY2Nlc3NlcyAqLwogCXN0cnVjdCBtdXRleAkJZG1hZV9tdXRleDsKLQlzdHJ1Y3QgZG1hZV9jb21tYW5kCWluaXRfZG1hZTsKIAogCS8qIHVzZWQgdG8gc3luY2hyb25pemUgc3RhdHMgY29sbGVjdGluZyAqLwogCWludAkJCXN0YXRzX3N0YXRlOwpAQCAtOTY2LDM4ICs5OTYsNTQgQEAKIAlkbWFfYWRkcl90CQlndW56aXBfbWFwcGluZzsKIAlpbnQJCQlndW56aXBfb3V0bGVuOwogI2RlZmluZSBGV19CVUZfU0laRQkJCTB4ODAwMAorI2RlZmluZSBHVU5aSVBfQlVGKGJwKQkJCShicC0+Z3VuemlwX2J1ZikKKyNkZWZpbmUgR1VOWklQX1BIWVMoYnApCQkJKGJwLT5ndW56aXBfbWFwcGluZykKKyNkZWZpbmUgR1VOWklQX09VVExFTihicCkJCShicC0+Z3VuemlwX291dGxlbikKIAotCXN0cnVjdCByYXdfb3AgICAgICAgICAgKmluaXRfb3BzOworCXN0cnVjdCByYXdfb3AJCSppbml0X29wczsKIAkvKiBJbml0IGJsb2NrcyBvZmZzZXRzIGluc2lkZSBpbml0X29wcyAqLwotCXUxNiAgICAgICAgICAgICAgICAgICAgKmluaXRfb3BzX29mZnNldHM7CisJdTE2CQkJKmluaXRfb3BzX29mZnNldHM7CiAJLyogRGF0YSBibG9iIC0gaGFzIDMyIGJpdCBncmFudWxhcml0eSAqLwotCXUzMiAgICAgICAgICAgICAgICAgICAgKmluaXRfZGF0YTsKKwl1MzIJCQkqaW5pdF9kYXRhOwogCS8qIFppcHBlZCBQUkFNIGJsb2JzIC0gcmF3IGRhdGEgKi8KLQljb25zdCB1OCAgICAgICAgICAgICAgICp0c2VtX2ludF90YWJsZV9kYXRhOwotCWNvbnN0IHU4ICAgICAgICAgICAgICAgKnRzZW1fcHJhbV9kYXRhOwotCWNvbnN0IHU4ICAgICAgICAgICAgICAgKnVzZW1faW50X3RhYmxlX2RhdGE7Ci0JY29uc3QgdTggICAgICAgICAgICAgICAqdXNlbV9wcmFtX2RhdGE7Ci0JY29uc3QgdTggICAgICAgICAgICAgICAqeHNlbV9pbnRfdGFibGVfZGF0YTsKLQljb25zdCB1OCAgICAgICAgICAgICAgICp4c2VtX3ByYW1fZGF0YTsKLQljb25zdCB1OCAgICAgICAgICAgICAgICpjc2VtX2ludF90YWJsZV9kYXRhOwotCWNvbnN0IHU4ICAgICAgICAgICAgICAgKmNzZW1fcHJhbV9kYXRhOwotICAgICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgICpmaXJtd2FyZTsKKwljb25zdCB1OAkJKnRzZW1faW50X3RhYmxlX2RhdGE7CisJY29uc3QgdTgJCSp0c2VtX3ByYW1fZGF0YTsKKwljb25zdCB1OAkJKnVzZW1faW50X3RhYmxlX2RhdGE7CisJY29uc3QgdTgJCSp1c2VtX3ByYW1fZGF0YTsKKwljb25zdCB1OAkJKnhzZW1faW50X3RhYmxlX2RhdGE7CisJY29uc3QgdTgJCSp4c2VtX3ByYW1fZGF0YTsKKwljb25zdCB1OAkJKmNzZW1faW50X3RhYmxlX2RhdGE7CisJY29uc3QgdTgJCSpjc2VtX3ByYW1fZGF0YTsKKyNkZWZpbmUgSU5JVF9PUFMoYnApCQkJKGJwLT5pbml0X29wcykKKyNkZWZpbmUgSU5JVF9PUFNfT0ZGU0VUUyhicCkJCShicC0+aW5pdF9vcHNfb2Zmc2V0cykKKyNkZWZpbmUgSU5JVF9EQVRBKGJwKQkJCShicC0+aW5pdF9kYXRhKQorI2RlZmluZSBJTklUX1RTRU1fSU5UX1RBQkxFX0RBVEEoYnApCShicC0+dHNlbV9pbnRfdGFibGVfZGF0YSkKKyNkZWZpbmUgSU5JVF9UU0VNX1BSQU1fREFUQShicCkJCShicC0+dHNlbV9wcmFtX2RhdGEpCisjZGVmaW5lIElOSVRfVVNFTV9JTlRfVEFCTEVfREFUQShicCkJKGJwLT51c2VtX2ludF90YWJsZV9kYXRhKQorI2RlZmluZSBJTklUX1VTRU1fUFJBTV9EQVRBKGJwKQkJKGJwLT51c2VtX3ByYW1fZGF0YSkKKyNkZWZpbmUgSU5JVF9YU0VNX0lOVF9UQUJMRV9EQVRBKGJwKQkoYnAtPnhzZW1faW50X3RhYmxlX2RhdGEpCisjZGVmaW5lIElOSVRfWFNFTV9QUkFNX0RBVEEoYnApCQkoYnAtPnhzZW1fcHJhbV9kYXRhKQorI2RlZmluZSBJTklUX0NTRU1fSU5UX1RBQkxFX0RBVEEoYnApCShicC0+Y3NlbV9pbnRfdGFibGVfZGF0YSkKKyNkZWZpbmUgSU5JVF9DU0VNX1BSQU1fREFUQShicCkJCShicC0+Y3NlbV9wcmFtX2RhdGEpCisKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUJKmZpcm13YXJlOwogfTsKIAogCi0jZGVmaW5lIEJOWDJYX01BWF9RVUVVRVMoYnApCShJU19FMUhNRihicCkgPyAoTUFYX0NPTlRFWFQgLyBFMUhWTl9NQVgpIDogXAotCQkJCQkJIE1BWF9DT05URVhUKQotI2RlZmluZSBCTlgyWF9OVU1fUVVFVUVTKGJwKQltYXgoYnAtPm51bV9yeF9xdWV1ZXMsIGJwLT5udW1fdHhfcXVldWVzKQotI2RlZmluZSBpc19tdWx0aShicCkJCShCTlgyWF9OVU1fUVVFVUVTKGJwKSA+IDEpCisjZGVmaW5lIEJOWDJYX01BWF9RVUVVRVMoYnApCShJU19FMUhNRihicCkgPyAoTUFYX0NPTlRFWFQvKDIgKiBFMUhWTl9NQVgpKSBcCisJCQkJCSAgICAgIDogKE1BWF9DT05URVhULzIpKQorI2RlZmluZSBCTlgyWF9OVU1fUVVFVUVTKGJwKQkoYnAtPm51bV9yeF9xdWV1ZXMgKyBicC0+bnVtX3R4X3F1ZXVlcykKKyNkZWZpbmUgaXNfbXVsdGkoYnApCQkoQk5YMlhfTlVNX1FVRVVFUyhicCkgPiAyKQogCiAjZGVmaW5lIGZvcl9lYWNoX3J4X3F1ZXVlKGJwLCB2YXIpIFwKIAkJCWZvciAodmFyID0gMDsgdmFyIDwgYnAtPm51bV9yeF9xdWV1ZXM7IHZhcisrKQogI2RlZmluZSBmb3JfZWFjaF90eF9xdWV1ZShicCwgdmFyKSBcCi0JCQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fdHhfcXVldWVzOyB2YXIrKykKKwkJCWZvciAodmFyID0gYnAtPm51bV9yeF9xdWV1ZXM7IFwKKwkJCSAgICAgdmFyIDwgQk5YMlhfTlVNX1FVRVVFUyhicCk7IHZhcisrKQogI2RlZmluZSBmb3JfZWFjaF9xdWV1ZShicCwgdmFyKSBcCiAJCQlmb3IgKHZhciA9IDA7IHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykKICNkZWZpbmUgZm9yX2VhY2hfbm9uZGVmYXVsdF9xdWV1ZShicCwgdmFyKSBcCi0JCQlmb3IgKHZhciA9IDE7IHZhciA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyB2YXIrKykKKwkJCWZvciAodmFyID0gMTsgdmFyIDwgYnAtPm51bV9yeF9xdWV1ZXM7IHZhcisrKQogCiAKIHZvaWQgYm54MnhfcmVhZF9kbWFlKHN0cnVjdCBibngyeCAqYnAsIHUzMiBzcmNfYWRkciwgdTMyIGxlbjMyKTsKQEAgLTEwMDYsNiArMTA1MiwxMCBAQAogaW50IGJueDJ4X2dldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTggcG9ydCk7CiBpbnQgYm54Mnhfc2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCk7CiBpbnQgYm54Mnhfc2V0X2dwaW9faW50KHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOwordTMyIGJueDJ4X2Z3X2NvbW1hbmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGNvbW1hbmQpOwordm9pZCBibngyeF9yZWdfd3JfaW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCB1MzIgdmFsKTsKK3ZvaWQgYm54Mnhfd3JpdGVfZG1hZV9waHlzX2xlbihzdHJ1Y3QgYm54MnggKmJwLCBkbWFfYWRkcl90IHBoeXNfYWRkciwKKwkJCSAgICAgICB1MzIgYWRkciwgdTMyIGxlbik7CiAKIHN0YXRpYyBpbmxpbmUgdTMyIHJlZ19wb2xsKHN0cnVjdCBibngyeCAqYnAsIHUzMiByZWcsIHUzMiBleHBlY3RlZCwgaW50IG1zLAogCQkJICAgaW50IHdhaXQpCkBAIC0xMDYzLDkgKzExMTMsOSBAQAogI2RlZmluZSBETUFFX0NPTVBfVkFMCQkJMHhlMGQwZDBhZQogCiAjZGVmaW5lIE1BWF9ETUFFX0NfUEVSX1BPUlQJCTgKLSNkZWZpbmUgSU5JVF9ETUFFX0MoYnApCQkJKEJQX1BPUlQoYnApKk1BWF9ETUFFX0NfUEVSX1BPUlQgKyBcCisjZGVmaW5lIElOSVRfRE1BRV9DKGJwKQkJCShCUF9QT1JUKGJwKSAqIE1BWF9ETUFFX0NfUEVSX1BPUlQgKyBcCiAJCQkJCSBCUF9FMUhWTihicCkpCi0jZGVmaW5lIFBNRl9ETUFFX0MoYnApCQkJKEJQX1BPUlQoYnApKk1BWF9ETUFFX0NfUEVSX1BPUlQgKyBcCisjZGVmaW5lIFBNRl9ETUFFX0MoYnApCQkJKEJQX1BPUlQoYnApICogTUFYX0RNQUVfQ19QRVJfUE9SVCArIFwKIAkJCQkJIEUxSFZOX01BWCkKIAogCkBAIC0xMDkwLDcgKzExNDAsOCBAQAogCiAKIC8qIG11c3QgYmUgdXNlZCBvbiBhIENJRCBiZWZvcmUgcGxhY2luZyBpdCBvbiBhIEhXIHJpbmcgKi8KLSNkZWZpbmUgSFdfQ0lEKGJwLCB4KQkJKChCUF9QT1JUKGJwKSA8PCAyMykgfCAoQlBfRTFIVk4oYnApIDw8IDE3KSB8IHgpCisjZGVmaW5lIEhXX0NJRChicCwgeCkJCQkoKEJQX1BPUlQoYnApIDw8IDIzKSB8IFwKKwkJCQkJIChCUF9FMUhWTihicCkgPDwgMTcpIHwgKHgpKQogCiAjZGVmaW5lIFNQX0RFU0NfQ05UCQkoQkNNX1BBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgZXRoX3NwZSkpCiAjZGVmaW5lIE1BWF9TUF9ERVNDX0NOVAkJCShTUF9ERVNDX0NOVCAtIDEpCkBAIC0xMTc4LDggKzEyMjksOCBAQAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19RTV9QQVJJVFlfRVJST1IgfCBcCiAJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1hTRE1fUEFSSVRZX0VSUk9SIHwgXAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19YU0VNSV9QQVJJVFlfRVJST1IgfCBcCi0JCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX1BBUklUWV9FUlJPUiB8XAotCQkJICAgIEFFVV9JTlBVVFNfQVRUTl9CSVRTX1ZBVVhfUENJX0NPUkVfUEFSSVRZX0VSUk9SIHxcCisJCQkJIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9QQVJJVFlfRVJST1IgfFwKKwkJCSAgICAgQUVVX0lOUFVUU19BVFROX0JJVFNfVkFVWF9QQ0lfQ09SRV9QQVJJVFlfRVJST1IgfFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfREVCVUdfUEFSSVRZX0VSUk9SIHwgXAogCQkJCSBBRVVfSU5QVVRTX0FUVE5fQklUU19VU0RNX1BBUklUWV9FUlJPUiB8IFwKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfVVNFTUlfUEFSSVRZX0VSUk9SIHwgXApAQCAtMTIwNyw3ICsxMjU4LDYgQEAKIAkJIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWSB8IFwKIAkJIChicC0+bXVsdGlfbW9kZSA8PCBcCiAJCSAgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFX1NISUZUKSkKLQogI2RlZmluZSBNVUxUSV9NQVNLCQkJMHg3ZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2R1bXAuaAppbmRleCA3OGM2YjAzLi4zYmI5YTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfZHVtcC5oCkBAIC0xMywzMSArMTMsMzUgQEAKICAqIFRoZSBzaWduYXR1cmUgaXMgdGltZSBzdGFtcCwgZGlhZyB2ZXJzaW9uIGFuZCBncmNfZHVtcCB2ZXJzaW9uCiAgKi8KIAorI2lmbmRlZiBCTlgyWF9EVU1QX0gKKyNkZWZpbmUgQk5YMlhfRFVNUF9ICisKKwogc3RydWN0IGR1bXBfc2lnbiB7CiAJdTMyIHRpbWVfc3RhbXA7CiAJdTMyIGRpYWdfdmVyOwogCXUzMiBncmNfZHVtcF92ZXI7CiB9OwogCi0jZGVmaW5lIFRTVE9STV9XQUlUUF9BRERSCTB4MWI4YTgwCi0jZGVmaW5lIENTVE9STV9XQUlUUF9BRERSCTB4MjM4YTgwCi0jZGVmaW5lIFhTVE9STV9XQUlUUF9BRERSCTB4MmI4YTgwCi0jZGVmaW5lIFVTVE9STV9XQUlUUF9BRERSCTB4MzM4YTgwCi0jZGVmaW5lIFRTVE9STV9DQU1fTU9ERQkJMHgxYjE0NDAKKyNkZWZpbmUgVFNUT1JNX1dBSVRQX0FERFIJCTB4MWI4YTgwCisjZGVmaW5lIENTVE9STV9XQUlUUF9BRERSCQkweDIzOGE4MAorI2RlZmluZSBYU1RPUk1fV0FJVFBfQUREUgkJMHgyYjhhODAKKyNkZWZpbmUgVVNUT1JNX1dBSVRQX0FERFIJCTB4MzM4YTgwCisjZGVmaW5lIFRTVE9STV9DQU1fTU9ERQkJCTB4MWIxNDQwCiAKLSNkZWZpbmUgUklfRTEJCQkweDEKLSNkZWZpbmUgUklfRTFICQkJMHgyCi0jZGVmaW5lIFJJX09OTElORQkJMHgxMDAKKyNkZWZpbmUgUklfRTEJCQkJMHgxCisjZGVmaW5lIFJJX0UxSAkJCQkweDIKKyNkZWZpbmUgUklfT05MSU5FCQkJMHgxMDAKIAotI2RlZmluZSBSSV9FMV9PRkZMSU5FCQkoUklfRTEpCi0jZGVmaW5lIFJJX0UxX09OTElORQkJKFJJX0UxIHwgUklfT05MSU5FKQotI2RlZmluZSBSSV9FMUhfT0ZGTElORQkJKFJJX0UxSCkKLSNkZWZpbmUgUklfRTFIX09OTElORQkJKFJJX0UxSCB8IFJJX09OTElORSkKLSNkZWZpbmUgUklfQUxMX09GRkxJTkUJCShSSV9FMSB8IFJJX0UxSCkKLSNkZWZpbmUgUklfQUxMX09OTElORQkJKFJJX0UxIHwgUklfRTFIIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9FMV9PRkZMSU5FCQkJKFJJX0UxKQorI2RlZmluZSBSSV9FMV9PTkxJTkUJCQkoUklfRTEgfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0UxSF9PRkZMSU5FCQkJKFJJX0UxSCkKKyNkZWZpbmUgUklfRTFIX09OTElORQkJCShSSV9FMUggfCBSSV9PTkxJTkUpCisjZGVmaW5lIFJJX0FMTF9PRkZMSU5FCQkJKFJJX0UxIHwgUklfRTFIKQorI2RlZmluZSBSSV9BTExfT05MSU5FCQkJKFJJX0UxIHwgUklfRTFIIHwgUklfT05MSU5FKQogCi0jZGVmaW5lIE1BWF9USU1FUl9QRU5ESU5HCTIwMAotI2RlZmluZSBUSU1FUl9TQ0FOX0RPTlRfQ0FSRQkweEZGCisjZGVmaW5lIE1BWF9USU1FUl9QRU5ESU5HCQkyMDAKKyNkZWZpbmUgVElNRVJfU0NBTl9ET05UX0NBUkUJCTB4RkYKIAogCiBzdHJ1Y3QgZHVtcF9oZHIgewpAQCAtNjcsNDQzICs3MSw0NDQgQEAKIH07CiAKIAotI2RlZmluZSBSRUdTX0NPVU5UCQk1NTgKKyNkZWZpbmUgUkVHU19DT1VOVAkJCTU1OAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYWRkciByZWdfYWRkcnNbUkVHU19DT1VOVF0gPSB7Ci0JeyAweDIwMDAsIDM0MSwgUklfQUxMX09OTElORX0sIHsgMHgyODAwLCAxMDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMDAwLCAyODcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzgwMCwgMzMxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ODgwMCwgNiwgUklfRTFfT05MSU5FfSwgeyAweGEwMDAsIDIyMywgUklfQUxMX09OTElORX0sCi0JeyAweGEzODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTM5OCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGEzOWMsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNjMCwgMywgUklfRTFIX09OTElORX0sCi0JeyAweGEzZDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNkOCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweGEzZTAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNlOCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweGEzZjAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNmOCwgMSwgUklfRTFIX09OTElORX0sCi0JeyAweGE0MDAsIDY5LCBSSV9BTExfT05MSU5FfSwgeyAweGE1MTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1MjgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNTMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1MzgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNTYwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1NjgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNTcwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1ODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNTkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1YTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNWMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1ZTAsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhhNWU4LCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGE1ZjAsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhhNWY4LCAxMCwgUklfRTFIX09OTElORX0sIHsgMHgxMDAwMCwgMjM2LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAzYmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzY2MsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDNkYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwMCwgNTcsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDRlOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDRmNCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTAwLCAxNDYsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3NTAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDc2MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc3MCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNzgwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzkwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA3YTAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3YjAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDdjMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDdkMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwN2UwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwODgwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA5MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjAwMCwgMjYsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxNjA3MCwgMTgsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYwYzAsIDI3LCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTYxNDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxNjAsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxNjE4MCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNjFjMCwgMiwgUklfRTFIX09OTElORX0sCi0JeyAweDE2MjA0LCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweDE4MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTgwMDgsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjAwMDAsIDI0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAwNjAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwODAsIDEzOCwgUklfQUxMX09OTElORX0sCi0JeyAweDIwMmI0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMmM0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjA0MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA0MGMsIDgsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDQyYywgMTgsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjA0ODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDUwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDYwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDMwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkV9LAotCXsgMHg0MDAwMCwgOTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDAxOTQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MDFhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MDFhOCwgMTEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHg0MDIwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHg0MDQwMCwgNDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MDRiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MDRjOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDQwNGNjLCAzLCBSSV9FMUhfT05MSU5FfSwgeyAweDQwNTAwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDA1MTAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA1MjAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MDUzMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHg0MDU0MCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDQyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDIyOWMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjJiYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDQyMmQ0LCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweDQyNDAwLCA0OSwgUklfQUxMX09OTElORX0sCi0JeyAweDQyNGM4LCAzOCwgUklfQUxMX09OTElORX0sIHsgMHg0MjU2OCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDQyODAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMDAwLCAyMCwgUklfQUxMX09OTElORX0sCi0JeyAweDUwMDUwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDUwMDcwLCA4OCwgUklfQUxMX09OTElORX0sCi0JeyAweDUwMWRjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMWVjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NTAxZjAsIDQsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NTAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg1MDIwYywgNywgUklfQUxMX09OTElORX0sIHsgMHg1MDIyOCwgNiwgUklfRTFIX09OTElORX0sCi0JeyAweDUwMjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjgwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NTIwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg1NDAwNCwgMzMyNywgUklfQUxMX09GRkxJTkV9LCB7IDB4NTgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg1ODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkV9LCB7IDB4NjAwMDAsIDcxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NjAxMjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NjAxMzgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg2MDEzYywgMjQsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NjAyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg2MTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MTAwNCwgNTExLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDcwMDAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDcwMDIwLCAyMTQ5NiwgUklfQUxMX09GRkxJTkV9LAotCXsgMHg4NTAwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHg4NTAwYywgNCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHg4NTAxYywgNywgUklfQUxMX09OTElORX0sIHsgMHg4NTAzOCwgNCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHg4NTA0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg4NTA0YywgMTA5LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDg1MjAwLCAzMiwgUklfQUxMX09OTElORX0sIHsgMHg4NTI4MCwgMTExMDQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4YTAwMDAsIDE2Mzg0LCBSSV9BTExfT05MSU5FfSwgeyAweGIwMDAwLCAxNjM4NCwgUklfRTFIX09OTElORX0sCi0JeyAweGMxMDAwLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweGMxMDI4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzEwMzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzE4MDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjMjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweGMyMjljLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzIyYWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjMjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzI0YzgsIDM4LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzI1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzI2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjNDAwMCwgMTY1LCBSSV9BTExfT05MSU5FfSwgeyAweGM0MmEwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzQyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjNDJlMCwgNywgUklfRTFIX09OTElORX0sIHsgMHhjNDQwMCwgNTEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjNDRkMCwgMzgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQ1NzAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjNDYwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDAwMCwgMTksIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhkMDA0YywgOCwgUklfQUxMX09OTElORX0sIHsgMHhkMDA2YywgOTEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhkMDFlNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDFmNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGQwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMjBjLCA3LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZDAyMjgsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweGQwMjgwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZDAzMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhkNDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkNDAwNCwgMjU1OSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHhkODAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHhlMDAwMCwgMjEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAwNTQsIDgsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhlMDA3NCwgODUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAxZDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhlMDFlNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDIwMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweGUwMjBjLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjJjLCAxOCwgUklfRTFIX09OTElORX0sCi0JeyAweGUwMjgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMzAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTIwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhlMjAwNCwgMjA0NywgUklfQUxMX09GRkxJTkV9LCB7IDB4ZjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhmMDAwNCwgMTYzODMsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwMTAwMCwgMTIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDEwM2MsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAxMDRjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAxMDUwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDEwMTEwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMTgwMCwgOCwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwMDAsIDE4LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAyMDU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjA2NCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMjA4MCwgMTcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMGM4LCA4LCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTAyNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzAwMCwgMjYsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDMwNzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDg0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAzMDk0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA5OCwgNSwgUklfRTFIX09OTElORX0sCi0JeyAweDEwMzgwMCwgOCwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwMDAsIDYzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA0MTA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDExOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNDIwMCwgMTcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0NDAwLCA2NCwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNDUwMCwgMTkyLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA0OTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAwMCwgNywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTAxYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDIwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA0MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTA0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA3MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTA3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDgwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDhjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBhMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTBhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGIwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MGJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBkMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTBkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MGVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTEwMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTEwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTEwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTEzMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTEzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTQwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE2MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTE2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTcwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxODAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE5MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTE5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWEwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MWFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFjMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTFjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWQwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MWRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFmMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTFmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjAwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIyMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTIyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI1MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTI1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjYwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI4MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTI4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjkwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJiMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTJiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MmNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJlMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTJlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmYwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MmZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMxMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTMxYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzIwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM0MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTM0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM3MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTM3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzgwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzhjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNhMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTNhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2IwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1M2JjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNkMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTNkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2UwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1M2VjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzZmMsIDc2OSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA4MDAwLCAzMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwODA5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDgwYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDgwYWMsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTA4MTAwLCA1LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA4MTIwLCA1LCBSSV9BTExfT05MSU5FfSwgeyAweDEwODIwMCwgNzQsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDg0MDAsIDc0LCBSSV9BTExfT05MSU5FfSwgeyAweDEwODgwMCwgMTUyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA5MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDAwMCwgMzQ3LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwNTc4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDU4OCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDU5OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA1OWMsIDIzLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTIwNjE0LCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDEyMDYxYywgMzAsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxMjA4MGMsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDEyMGEwMCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMjAwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjgwMDAsIDIsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxNDAwMDAsIDExNCwgUklfQUxMX09OTElORX0sIHsgMHgxNDAxZDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNDAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTQ0MDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE0ODAwMCwgNCwgUklfQUxMX09OTElORX0sCi0JeyAweDE0YzAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNTAwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNTQwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTU4MDAwLCA0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTVjMDAwLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MTAwMCwgNywgUklfQUxMX09OTElORX0sCi0JeyAweDE2MTAyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjEwMzgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjE4MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MDAwLCA2MCwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDBmYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQxMGMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQxMTAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTY0MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY0MjA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIxMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDIxOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQyMjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjMwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY0MjM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI0MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDI0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjQyNTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjYwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY0MjcwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI4MCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDgwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjUwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjYwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHgxNjYyOWMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjYyYWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MmJjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY2NDAwLCA0OSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY0YzgsIDM4LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY2NTY4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjgwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODAwMCwgMjcwLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQ0NCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODQ1NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjg4MDAsIDE5LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY4OTAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTZhMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2YTAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgxNmMwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTZjMDA0LCAxNTM1LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDE2ZTAwMCwgMTYsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTZlMTAwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTZlMjAwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTQwMCwgMTgzLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTcwMDAwLCA5MywgUklfQUxMX09OTElORX0sIHsgMHgxNzAxODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNzAxOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMjAwLCA0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTcwMjE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3ODAwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE4MDAwMCwgNjEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTgwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEyMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE4MDEzMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxM2MsIDIsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxODAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDM0MCwgNCwgUklfQUxMX09OTElORX0sCi0JeyAweDE4MDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgxODEwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgxMDEwLCAxMDIwLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDFhMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MWExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAotCXsgMHgxYTU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFhODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MWE4MTAwLCAxOTg0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYWEwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxYWEwMDQsIDY2NTUsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFiMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDFiMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgxYjIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MWIyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWI4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MWI4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiODI4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDFiODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYjhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxYjhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWMwMDAwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAwMDAwLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAwMTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDE0YywgMiwgUklfRTFIX09OTElORX0sCi0JeyAweDIwMDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDIwMjAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgyMDIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MjIwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIyMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjIxMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDIyNTgwMCwgMTUzNiwgUklfRTFIX09GRkxJTkV9LCB7IDB4MjI3MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MjI3MDA0LCAxMDIzLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMjgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDIyODEwMCwgODY0MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MjMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MjMxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDIzMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyMzI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMzgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMzgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjM4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjM4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzOGEwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIzOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyNDAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDExMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDI4MDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MjgwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgyODAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MjgyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgyYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDJhMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MmE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYTgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDJhODEwMCwgOTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYTkwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgyYTkwMDQsIDc2NzksIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJiMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDJiMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgyYjIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MmIyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmI4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MmI4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiODI4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDJiODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYjhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyYjhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmMwMDAwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzAwMDAwLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMDAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzAwMTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDE0YywgMiwgUklfRTFIX09OTElORX0sCi0JeyAweDMwMDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzAwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDMwMjAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgzMDIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FfSwKLQl7IDB4MzIwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMyMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAotCXsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzIxMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDMyNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MzI4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgzMjgxMDAsIDUzNiwgUklfRTFIX09GRkxJTkV9LCB7IDB4MzI4OTYwLCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MzI4OTY0LCA4MTAzLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAotCXsgMHgzMzFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MzMyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCi0JeyAweDMzMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMzODIwMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDMzODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMzgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMzgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzM4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzM4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDM0MDAwMCwgMiwgUklfQUxMX09OTElORX0KKwl7IDB4MjAwMCwgMzQxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAwLCAxMDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzAwMCwgMjg3LCBSSV9BTExfT05MSU5FIH0sIHsgMHgzODAwLCAzMzEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ODgwMCwgNiwgUklfRTFfT05MSU5FIH0sIHsgMHhhMDAwLCAyMjMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTM4OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTM5OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhMzljLCA3LCBSSV9FMUhfT05MSU5FIH0sIHsgMHhhM2MwLCAzLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweGEzZDAsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGEzZDgsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4YTNlMCwgMSwgUklfRTFIX09OTElORSB9LCB7IDB4YTNlOCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHhhM2YwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHhhM2Y4LCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweGE0MDAsIDY5LCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTE4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1MjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1MjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTUzMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTUzOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1NTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1NTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTU2MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTU2OCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhhNTcwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhhNTgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGE1OTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGE1YTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTVjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTVlMCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHhhNWU4LCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHhhNWYwLCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweGE1ZjgsIDEwLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxMDAwMCwgMjM2LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwM2JjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDNjYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDNkYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MDAsIDU3LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNGU4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDRmNCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwMCwgMTQ2LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDc1MCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDc2MCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA3NzAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA3ODAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNzkwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwN2EwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDdiMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDdjMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTA3ZDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA3ZTAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwODgwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwOTAwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTYwMDAsIDI2LCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE2MDcwLCAxOCwgUklfRTFIX09OTElORSB9LCB7IDB4MTYwYzAsIDI3LCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE2MTQwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxNjE2MCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNjE4MCwgMiwgUklfRTFIX09OTElORSB9LCB7IDB4MTYxYzAsIDIsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTYyMDQsIDUsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE4MDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE4MDA4LCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgyMDAwMCwgMjQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAwNjAsIDgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMDgwLCAxMzgsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAyYjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwMmM0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwNDAwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDQwYywgOCwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDQyYywgMTgsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDIwNDgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwNTAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDYwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDMwMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAwNCwgMTYzODMsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDQwMDAwLCA5OCwgUklfQUxMX09OTElORSB9LCB7IDB4NDAxOTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDAxYTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwMWE4LCAxMSwgUklfRTFIX09OTElORSB9LAorCXsgMHg0MDIwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4NDA0MDAsIDQzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQwNGI4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDRjOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MDRjYywgMywgUklfRTFIX09OTElORSB9LCB7IDB4NDA1MDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDA1MTAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwNTIwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQwNTMwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MDU0MCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MjAwMCwgMTY0LCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjI5YywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MjJhYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDIyYmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDIyZDQsIDUsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDQyNDAwLCA0OSwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MjRjOCwgMzgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyNTY4LCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQyODAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDAwMCwgMjAsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTAwNTAsIDgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMDcwLCA4OCwgUklfQUxMX09OTElORSB9LAorCXsgMHg1MDFkYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NTAxZWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTAxZjAsIDQsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDUwMjAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUwMjBjLCA3LCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDIyOCwgNiwgUklfRTFIX09OTElORSB9LAorCXsgMHg1MDI0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NTAyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTIwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDU0MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDU0MDA0LCAzMzI3LCBSSV9BTExfT0ZGTElORSB9LCB7IDB4NTgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTgwMDQsIDgxOTEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHg2MDAwMCwgNzEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NjAxMjgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDYwMTM4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDYwMTNjLCAyNCwgUklfRTFIX09OTElORSB9LCB7IDB4NjAyMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NjEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDYxMDA0LCA1MTEsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDcwMDAwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHg3MDAyMCwgMjE0OTYsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDg1MDAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHg4NTAwYywgNCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4ODUwMWMsIDcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDg1MDM4LCA0LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHg4NTA0OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ODUwNGMsIDEwOSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4ODUyMDAsIDMyLCBSSV9BTExfT05MSU5FIH0sIHsgMHg4NTI4MCwgMTExMDQsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweGEwMDAwLCAxNjM4NCwgUklfQUxMX09OTElORSB9LCB7IDB4YjAwMDAsIDE2Mzg0LCBSSV9FMUhfT05MSU5FIH0sCisJeyAweGMxMDAwLCA3LCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMTAyOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjMTAzOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzE4MDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzIwMDAsIDE2NCwgUklfQUxMX09OTElORSB9LCB7IDB4YzIyOWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzIyYWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyMmJjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyNDAwLCA0OSwgUklfQUxMX09OTElORSB9LCB7IDB4YzI0YzgsIDM4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyNTY4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjYwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjNDAwMCwgMTY1LCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDJhMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjNDJiMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQyYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQyZTAsIDcsIFJJX0UxSF9PTkxJTkUgfSwgeyAweGM0NDAwLCA1MSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjNDRkMCwgMzgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGM0NTcwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGM0NjAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDAwMCwgMTksIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDAwNGMsIDgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMDZjLCA5MSwgUklfQUxMX09OTElORSB9LAorCXsgMHhkMDFlNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDAxZjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDAyMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMjBjLCA3LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGQwMjI4LCAxOCwgUklfRTFIX09OTElORSB9LCB7IDB4ZDAyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZDAzMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGQ0MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkNDAwNCwgMjU1OSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4ZDgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQ4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHhlMDAwMCwgMjEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMDU0LCA4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUwMDc0LCA4NSwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAxZDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZTAxZTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMjAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUwMjBjLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDIyYywgMTgsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4ZTAyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMzAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMjAwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMjAwNCwgMjA0NywgUklfQUxMX09GRkxJTkUgfSwgeyAweGYwMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGYwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwMTAwMCwgMTIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAxMDNjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDEwNGMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAxMDUwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxMDExMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAxODAwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDIwMDAsIDE4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMjA1NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAyMDY0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMjA4MCwgMTcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMjBjOCwgOCwgUklfRTFIX09OTElORSB9LAorCXsgMHgxMDI0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwMzAwMCwgMjYsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAzMDc0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDMwODQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAzMDk0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDMwOTgsIDUsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTAzODAwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDQwMDAsIDYzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDEwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MTE4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDIwMCwgMTcsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA0NTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDkwMCwgMTkyLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDAwLCA3LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTAxYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwMmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTA0YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTA1MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwNWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwNjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MDcwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTA3YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwOGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDljLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTBhYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTBiMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwYmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwYzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MGNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MGQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTBkYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUwZWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MGZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTEwYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTExMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxMWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxMjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTJjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTEzYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxNGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTVjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTE2YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTE3MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxN2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxODAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MThjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MTkwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTE5YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxYWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MWJjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTFjYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTFkMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUxZGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUxZTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MWVjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MWYwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTFmYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyMGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjFjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTIyYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTIzMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyM2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyNDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjRjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTI1YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyNmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjdjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTI4YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTI5MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyOWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyYTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MmFjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MmIwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTJiYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyY2MsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MmRjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTJlYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTJmMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUyZmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzMDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzBjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzEwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTMxYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzMmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzNjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTM0YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTM1MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzNWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzNjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzZjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1MzcwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTM3YywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzOGMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzljLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTNhYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTNiMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzYmMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzYzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1M2NjLCAxLCBSSV9BTExfT0ZGTElORSB9LCB7IDB4MTA1M2QwLCAzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNTNkYywgMSwgUklfQUxMX09GRkxJTkUgfSwgeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDUzZWMsIDEsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1M2ZjLCA3NjksIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgxMDgwMDAsIDMzLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwODA5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA4MGEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwODBhYywgNSwgUklfRTFIX09OTElORSB9LCB7IDB4MTA4MTAwLCA1LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwODEyMCwgNSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA4MjAwLCA3NCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDg0MDAsIDc0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDg4MDAsIDE1MiwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDkwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEyMDAwMCwgMzQ3LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDU3OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTg4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDU5OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTljLCAyMywgUklfRTFIX09OTElORSB9LAorCXsgMHgxMjA2MTQsIDEsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDEyMDYxYywgMzAsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTIwODBjLCA2NSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwYTAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMjAwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTI4MDAwLCAyLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE0MDAwMCwgMTE0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAxZDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTQwMWU0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTQ0MDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDgwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTRjMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNTAwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTU0MDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNTgwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTVjMDAwLCA3LCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxNjEwMDAsIDcsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTYxMDI4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjEwMzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTYxODAwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjQwMDAsIDYwLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDBmYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MTBjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDExMCwgMiwgUklfRTFIX09OTElORSB9LCB7IDB4MTY0MjAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDIwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDIxOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjIwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDIyOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDIzOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjQwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDI0OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjUwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDI1OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjYwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDI3MCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY0MjgwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NDgwMCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTY1MDAwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2NjAwMCwgMTY0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjYyOWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY2MmFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjYyYmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY2NDAwLCA0OSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY2NGM4LCAzOCwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjY1NjgsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2NjgwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjgwMDAsIDI3MCwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4NDQ0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODQ1NCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4ODAwLCAxOSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxNjg5MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2YTAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTZhMDA0LCAxNTM1LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgxNmMwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE2YzAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MTZlMDAwLCAxNiwgUklfRTFIX09OTElORSB9LCB7IDB4MTZlMTAwLCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDE2ZTIwMCwgMiwgUklfRTFIX09OTElORSB9LCB7IDB4MTZlNDAwLCAxODMsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTcwMDAwLCA5MywgUklfQUxMX09OTElORSB9LCB7IDB4MTcwMTgwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE3MDE5MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTcwMjAwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE3MDIxNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTc4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE4MDAwMCwgNjEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE4MDEwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxODAxMTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE4MDEyMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxODAxMzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDE4MDEzYywgMiwgUklfRTFIX09OTElORSB9LAorCXsgMHgxODAyMDAsIDU4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAzNDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwNDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MTgxMDAwLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODEwMTAsIDEwMjAsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDFhMDAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MWEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MWE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MWE4MDAwLCA2NCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MWE4MTAwLCAxOTg0LCBSSV9FMUhfT0ZGTElORSB9LCB7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDFhYTAwNCwgNjY1NSwgUklfRTFIX09GRkxJTkUgfSwgeyAweDFiMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgxYjFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwgeyAweDFiMjAwMCwgMSwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MWIyNDAwLCA2NCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDFiODIwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjgyNDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiODI4MCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjgyYzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFiOGEwMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxYjhhODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDFjMDAwMCwgMiwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDAwMDAsIDY1LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAxMTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAwMTIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAxMzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAwMTQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAxNGMsIDIsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MjAwMjAwLCA1OCwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwMzQwLCA0LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDIwMDQwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjAwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDIwMjAwMCwgNCwgUklfQUxMX09OTElORSB9LCB7IDB4MjAyMDEwLCAyMDQ0LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyMjAwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIyMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MjIxMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMjEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDIyNTgwMCwgMTUzNiwgUklfRTFIX09GRkxJTkUgfSwgeyAweDIyNzAwMCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgyMjcwMDQsIDEwMjMsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyMjgwMDAsIDY0LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyMjgxMDAsIDg2NDAsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MjMxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgyMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDIzMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyMzgyMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MjQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4YTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyNDAwMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjgwMDAwLCA2NSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMTEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MDEyMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMTMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MDE0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjgwMTRjLCAyLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDI4MDIwMCwgNTgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDM0MCwgNCwgUklfQUxMX09OTElORSB9LAorCXsgMHgyODA0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyODIwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDI4MjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MmEwMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYTAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDJhMTAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MmExMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyYTU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyYTgwMDAsIDY0LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgyYTgxMDAsIDk2MCwgUklfRTFIX09GRkxJTkUgfSwgeyAweDJhOTAwMCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgyYTkwMDQsIDc2NzksIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyYjE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MmIxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgyYjIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDJiMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgyYjgyMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MjQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjhhMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4YTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYzAwMDAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzAwMDAwLCA2NSwgUklfQUxMX09OTElORSB9LCB7IDB4MzAwMTEwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDEyMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzAwMTMwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDMwMDE0MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzAwMTRjLCAyLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDMwMDIwMCwgNTgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDM0MCwgNCwgUklfQUxMX09OTElORSB9LAorCXsgMHgzMDA0MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMDIwMDAsIDQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDMwMjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MzIwMDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMjAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDMyMTAwMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MzIxMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMjU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgzMjgwMDAsIDY0LCBSSV9BTExfT0ZGTElORSB9LAorCXsgMHgzMjgxMDAsIDUzNiwgUklfRTFIX09GRkxJTkUgfSwgeyAweDMyODk2MCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHgzMjg5NjQsIDgxMDMsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgzMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkUgfSwKKwl7IDB4MzMxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FIH0sIHsgMHgzMzIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FIH0sCisJeyAweDMzMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FIH0sIHsgMHgzMzgyMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4MjQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzgyODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4MmMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzhhMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4YTgwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzNDAwMDAsIDIsIFJJX0FMTF9PTkxJTkUgfQogfTsKIAogCi0jZGVmaW5lIElETEVSRUdTX0NPVU5UCQkyNzcKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2FkZHIgaWRsZV9hZGRyc1tJRExFUkVHU19DT1VOVF0gPSB7Ci0JeyAweDIxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjEyMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIxMmMsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgxNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDI4MWMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTM4YywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGE0MDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTQyYywgMTIsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhhNjAwLCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweGE2MTgsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHhjMDljLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2IwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAzYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzZDAsIDEsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgyMDIxYywgMTEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAyYTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDJiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDQwNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIwNDBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDIwNDFjLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDAxNTQsIDE0LCBSSV9BTExfT05MSU5FfSwgeyAweDQwMTk4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDA0YWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA0YmMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg0MjI5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjJhMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDQyMmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NDI1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg1MDE2MCwgOCwgUklfQUxMX09OTElORX0sIHsgMHg1MDFkMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDUwMWUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4NTAyMGMsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAyMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHg2MDA5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MDExYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDYwMTJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzEwMmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjMjJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjJiMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGMyNTQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyNTUwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzI1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyOTQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhjNDJhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDJiNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGM0NTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0NTU4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4YzQ1NjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxNmMsIDgsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhkMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDFlOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGQwMjA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMjBjLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4ZTAxNTQsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHhlMDFkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDIwNCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweGUwMjBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjFjLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTAxMDE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMTAzMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMTA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwNTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDIwODAsIDE2LCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzAwNCwgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDEwMzA2OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwNzgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDMwODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDljLCAyLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTA0MDA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDAxOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEwNDAyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwM2MsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDQwZmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MTBjLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA0NDAwLCA2NCwgUklfQUxMX09OTElORX0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTAxMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTAyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA3MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTA4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUwYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGIwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBkMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTBlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTEwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTEzMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTE0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTcwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE5MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTFhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUxYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWQwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFmMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTIwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjMwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI1MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTI2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjkwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJiMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTJjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUyZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmYwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTMxMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTMyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzUwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM3MCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTM4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDUzYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2IwLCAzLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNkMCwgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEwNTNlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMDgwOTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMWIwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwMzJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDM2YywgMywgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDQwOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjA0MTQsIDE1LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwNDc4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDUyYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDU2NCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMjA1N2MsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA1OGMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNjA4LCAxLCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTIwODA4LCAxLCBSSV9FMV9PTkxJTkV9LCB7IDB4MTIwODBjLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwODE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDgyMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDgyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4MzAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4MzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODQwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwODQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg1MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDg1OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4NjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODcwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwODc4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDg4OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4OTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4OTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGEwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwOGE4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhiMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDhiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YzAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4YzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGQwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwOGQ4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhlMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDEyMDhlOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxMjA4ZjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOTAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTIwOTA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDA1YywgMiwgUklfQUxMX09OTElORX0sCi0JeyAweDE0MDBkMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNDAwZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNDAxYzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTYxMDFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2MTAyYywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NDAxNCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjQwZjAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjYyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MmEwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY2MmIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjU0OCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2NjU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDA4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY4MDEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODAxOCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODAyOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwNTgsIDQsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxNjgwNzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MjM4LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY4MmQwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODJlMCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2ODMwMCwgNjcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4NDEwLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTY4NDM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQ0OCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FfSwgeyAweDE2ZTIwMCwgMTI4LCBSSV9FMUhfT05MSU5FfSwKLQl7IDB4MTZlNDA0LCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTU4NCwgNzAsIFJJX0UxSF9PTkxJTkV9LAotCXsgMHgxNzAwYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMGFjLCAyLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTcwMGMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDE3NCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE3MDE4NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAwZjQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MTgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDI2YywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDE4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgxYWEwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MWI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MWI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiODA4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDFiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDI2YywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyMjcwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzODA4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDIzODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyODAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MjgwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDI2YywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDI4MDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgyYTkwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MmI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MmI4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiODA4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDJiODBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMDAxMTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTI0LCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzAwMTM0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDI2YywgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDMwMDJhMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAotCXsgMHgzMjg5NjAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MzM4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwKLQl7IDB4MzM4MDQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMzODA4MCwgMSwgUklfQUxMX09OTElORX0sCi0JeyAweDMzODBjMCwgMSwgUklfQUxMX09OTElORX0KKyNkZWZpbmUgSURMRV9SRUdTX0NPVU5UCQkJMjc3CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIGlkbGVfYWRkcnNbSURMRV9SRUdTX0NPVU5UXSA9IHsKKwl7IDB4MjExNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjEyMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMTJjLCA0LCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODE0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDI4MWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGEzOGMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTQwOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YTQyYywgMTIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YTYwMCwgNSwgUklfRTFIX09OTElORSB9LCB7IDB4YTYxOCwgMSwgUklfRTFIX09OTElORSB9LAorCXsgMHhjMDljLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDNiMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgxMDNjMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzZDAsIDEsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MjAyMWMsIDExLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDJhOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHgyMDJiOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MjA0MDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjA0MGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDIwNDFjLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQwMTU0LCAxNCwgUklfQUxMX09OTElORSB9LCB7IDB4NDAxOTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDA0YWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQwNGJjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDQyMjkwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg0MjJhMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg0MjJiMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NDI1NDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NDI1NTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDQyNTU4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDUwMTYwLCA4LCBSSV9BTExfT05MSU5FIH0sIHsgMHg1MDFkMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg1MDFlMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4NTAyMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4NTAyMGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDUwMjFjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDYwMDkwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHg2MDExYywgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHg2MDEyYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzEwMWMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzEwMmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGMyMjkwLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGMyMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjMjJiMCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjMjU0OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzI1NTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzI1NTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGM0Mjk0LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGM0MmE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhjNDJiNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhjNDU1MCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4YzQ1NTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4YzQ1NjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGQwMTZjLCA4LCBSSV9BTExfT05MSU5FIH0sCisJeyAweGQwMWQ4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhkMDFlOCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhkMDIwNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4ZDAyMGMsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4ZTAxNTQsIDgsIFJJX0FMTF9PTkxJTkUgfSwgeyAweGUwMWM4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweGUwMWQ4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHhlMDIwNCwgMSwgUklfQUxMX09OTElORSB9LAorCXsgMHhlMDIwYywgMiwgUklfQUxMX09OTElORSB9LCB7IDB4ZTAyMWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAxMDE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDEwMzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAxMDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDIwNTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTAyMDgwLCAxNiwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDA0LCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMzA2OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDc4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwMzA4OCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTAzMDljLCAyLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDEwNDAwNCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MDE4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDAyMCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MDNjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDBmYywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTA0MTBjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkUgfSwgeyAweDEwNDgwMCwgNjQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MDgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MGMwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MGUwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MTgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MWEwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MWUwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUxZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MmEwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MmMwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUyZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzAwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzMTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzIwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzNTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzYwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzNzAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1MzgwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzYjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1M2MwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzZDAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA1M2UwLCAzLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTA4MDk0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjAxYjAsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwMzJjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjAzNmMsIDMsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwNDA4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA0MTQsIDE1LCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDQ3OCwgMiwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTJjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDU2NCwgMywgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNTdjLCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDEyMDU4YywgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTIwNjA4LCAxLCBSSV9FMUhfT05MSU5FIH0sCisJeyAweDEyMDgwOCwgMSwgUklfRTFfT05MSU5FIH0sIHsgMHgxMjA4MGMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODE4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4MjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODI4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4MzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODM4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4NDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODQ4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4NTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODU4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4NjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODY4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4NzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODc4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4ODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODg4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4OTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwODk4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4YTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwOGE4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4YjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwOGI4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4YzAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwOGM4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4ZDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwOGQ4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4ZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwOGU4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA4ZjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwOGY4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxMjA5MDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTIwOTA4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAwNWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTQwMGQwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAwZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTQwMWM4LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNDAyMDAsIDYsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTYxMDFjLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjEwMmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY0MDE0LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjQwZjAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY2MjkwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjYyYTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY2MmIwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjY1NDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY2NTUwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjY1NTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MDAwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgwMDgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MDEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgwMTgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MDI4LCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgwNTgsIDQsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MDcwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgyMzgsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MmQwLCAyLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNjgyZTAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTY4MzAwLCA2NywgUklfQUxMX09OTElORSB9LCB7IDB4MTY4NDEwLCAyLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2ODQzOCwgMSwgUklfQUxMX09OTElORSB9LCB7IDB4MTY4NDQ4LCAxLCBSSV9BTExfT05MSU5FIH0sCisJeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNmUyMDAsIDEyOCwgUklfRTFIX09OTElORSB9LAorCXsgMHgxNmU0MDQsIDIsIFJJX0UxSF9PTkxJTkUgfSwgeyAweDE2ZTU4NCwgNzAsIFJJX0UxSF9PTkxJTkUgfSwKKwl7IDB4MTcwMGE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNzAwYWMsIDIsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTcwMGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxNzAxNzQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTcwMTg0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAwZjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwMTA0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAxMTQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwMTI0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxODAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MTgwMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgxYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4MDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgxYjgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MWI4MGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAwMTE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAwMTM0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjAwMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjI3MDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgyMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyMzgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjM4MGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjgwMTE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAxMjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjgwMTM0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyODAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MjgwMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYTEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgyYjgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgyYjgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MmI4MGMwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAxMDQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzAwMTE0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAxMjQsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzAwMTM0LCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzAwMmEwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzI4OTYwLCAxLCBSSV9FMUhfT05MSU5FIH0sIHsgMHgzMzgwMDAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4MDQwLCAxLCBSSV9BTExfT05MSU5FIH0sIHsgMHgzMzgwODAsIDEsIFJJX0FMTF9PTkxJTkUgfSwKKwl7IDB4MzM4MGMwLCAxLCBSSV9BTExfT05MSU5FIH0KIH07CiAKKyNkZWZpbmUgV1JFR1NfQ09VTlRfRTEJCQkxCiBzdGF0aWMgY29uc3QgdTMyIHJlYWRfcmVnX2UxXzBbXSA9IHsgMHgxYjEwMDAgfTsKIAotI2RlZmluZSBXUkVHU19DT1VOVF9FMQkJMQogc3RhdGljIGNvbnN0IHN0cnVjdCB3cmVnX2FkZHIgd3JlZ19hZGRyc19lMVtXUkVHU19DT1VOVF9FMV0gPSB7CiAJeyAweDFiMGMwMCwgMTkyLCAxLCByZWFkX3JlZ19lMV8wLCBSSV9FMV9PRkZMSU5FIH0KIH07CiAKKworI2RlZmluZSBXUkVHU19DT1VOVF9FMUgJCQkxCiBzdGF0aWMgY29uc3QgdTMyIHJlYWRfcmVnX2UxaF8wW10gPSB7IDB4MWIxMDQwLCAweDFiMTAwMCB9OwogCi0jZGVmaW5lIFdSRUdTX0NPVU5UX0UxSAkJMQogc3RhdGljIGNvbnN0IHN0cnVjdCB3cmVnX2FkZHIgd3JlZ19hZGRyc19lMWhbV1JFR1NfQ09VTlRfRTFIXSA9IHsKIAl7IDB4MWIwYzAwLCAyNTYsIDIsIHJlYWRfcmVnX2UxaF8wLCBSSV9FMUhfT0ZGTElORSB9CiB9OwpAQCAtNTEyLDE1ICs1MTcsMTggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHVtcF9zaWduIGR1bXBfc2lnbl9hbGwgPSB7IDB4NDlhYTkzZWUsIDB4NDA4MzUsIDB4MjIgfTsKIAogCi0jZGVmaW5lIFRJTUVSX1JFR1NfQ09VTlRfRTEJMgorI2RlZmluZSBUSU1FUl9SRUdTX0NPVU5UX0UxCQkyCiBzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UxW1RJTUVSX1JFR1NfQ09VTlRfRTFdID0KIAl7IDB4MTY0MDE0LCAweDE2NDAxOCB9Owogc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zY2FuX3JlZ3NfZTFbVElNRVJfUkVHU19DT1VOVF9FMV0gPQogCXsgMHgxNjQwZDAsIDB4MTY0MGQ0IH07CiAKLSNkZWZpbmUgVElNRVJfUkVHU19DT1VOVF9FMUgJMgorCisjZGVmaW5lIFRJTUVSX1JFR1NfQ09VTlRfRTFICQkyCiBzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UxaFtUSU1FUl9SRUdTX0NPVU5UX0UxSF0gPQogCXsgMHgxNjQwMTQsIDB4MTY0MDE4IH07CiBzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3NjYW5fcmVnc19lMWhbVElNRVJfUkVHU19DT1VOVF9FMUhdID0KIAl7IDB4MTY0MGQwLCAweDE2NDBkNCB9OwogCisKKyNlbmRpZiAvKiBCTlgyWF9EVU1QX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaAppbmRleCBlMmRmMjM4Li45MzFkY2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCkBAIC0xMiw0OCArMTIsMTE3IEBACiAJKElTX0UxSF9PRkZTRVQgPyAweDcwMDAgOiAweDEwMDApCiAjZGVmaW5lIENTVE9STV9BU1NFUlRfTElTVF9PRkZTRVQoaWR4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDIwICsgKGlkeCAqIDB4MTApKSA6ICgweDEwMjAgKyAoaWR4ICogMHgxMCkpKQotI2RlZmluZSBDU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODUyMiArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCi0JKChmdW5jdGlvbiYxKSAqIDB4MTAwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTkyMiArIChmdW5jdGlvbiAqIFwKKyNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX0NfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODYyMiArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MzU2MiArIChmdW5jdGlvbiAqIFwKIAkweDQwKSArIChpbmRleCAqIDB4NCkpKQotI2RlZmluZSBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDg1MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkpIDogKDB4MTkwMCArIChmdW5jdGlvbiAqIDB4NDApKSkKLSNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDg1MDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkpIDogKDB4MTkwOCArIChmdW5jdGlvbiAqIDB4NDApKSkKKyNkZWZpbmUgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX1VfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODgyMiArICgoZnVuY3Rpb24+PjEpICogMHg4MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MjAwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MzVlMiArIChmdW5jdGlvbiAqIFwKKwkweDgwKSArIChpbmRleCAqIDB4NCkpKQorI2RlZmluZSBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9DX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODYwMCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgzNTQwICsgKGZ1bmN0aW9uICogMHg0MCkpKQorI2RlZmluZSBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9VX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODgwMCArICgoZnVuY3Rpb24+PjEpICogMHg4MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MjAwKSkgOiAoMHgzNWMwICsgKGZ1bmN0aW9uICogMHg4MCkpKQorI2RlZmluZSBDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4NjA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKKwkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDM1NDggKyAoZnVuY3Rpb24gKiAweDQwKSkpCisjZGVmaW5lIENTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDg4MDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4ODApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDIwMCkpIDogKDB4MzVjOCArIChmdW5jdGlvbiAqIDB4ODApKSkKICNkZWZpbmUgQ1NUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VUIFwKIAkoSVNfRTFIX09GRlNFVCA/IDB4MTFlOCA6IDB4ZmZmZmZmZmYpCi0jZGVmaW5lIENTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDg3MDQgKyAocG9ydCAqIDB4ZjApKSA6ICgweDE5ODQgKyAocG9ydCAqIDB4YzApKSkKLSNkZWZpbmUgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKLQkoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSArIFwKKyNkZWZpbmUgQ1NUT1JNX0hDX0JUUl9DX09GRlNFVChwb3J0KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4YzA0ICsgKHBvcnQgKiAweGYwKSkgOiAoMHgzNmM0ICsgKHBvcnQgKiAweGMwKSkpCisjZGVmaW5lIENTVE9STV9IQ19CVFJfVV9PRkZTRVQocG9ydCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4OGRlNCArIChwb3J0ICogMHhmMCkpIDogKDB4Mzg0NCArIChwb3J0ICogMHhjMCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfQ1FfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDY2ODAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI1YTAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9DUV9TUU5fU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDY2YzAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI1YjAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9FUV9DT05TX09GRlNFVChmdW5jdGlvbiwgZXFJZHgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNDAgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSA6IFwKKwkoMHgyNDEwICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9FUV9ORVhUX0VRRV9BRERSX09GRlNFVChmdW5jdGlvbiwgZXFJZHgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNDQgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSA6IFwKKwkoMHgyNDE0ICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9FUV9ORVhUX1BBR0VfQUREUl9PRkZTRVQoZnVuY3Rpb24sIGVxSWR4KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDRjICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkgOiBcCisJKDB4MjQxYyArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfRVFfTkVYVF9QQUdFX0FERFJfVkFMSURfT0ZGU0VUKGZ1bmN0aW9uLCBlcUlkeCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjA1NyArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpIDogXAorCSgweDI0MjcgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX0VRX1BST0RfT0ZGU0VUKGZ1bmN0aW9uLCBlcUlkeCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjA0MiArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpIDogXAorCSgweDI0MTIgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX0VRX1NCX0lOREVYX09GRlNFVChmdW5jdGlvbiwgZXFJZHgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNTYgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSA6IFwKKwkoMHgyNDI2ICsgKGZ1bmN0aW9uICogMHhjMCkgKyAoZXFJZHggKiAweDE4KSkpCisjZGVmaW5lIENTVE9STV9JU0NTSV9FUV9TQl9OVU1fT0ZGU0VUKGZ1bmN0aW9uLCBlcUlkeCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjA1NCArIChmdW5jdGlvbiAqIDB4YzApICsgKGVxSWR4ICogMHgxOCkpIDogXAorCSgweDI0MjQgKyAoZnVuY3Rpb24gKiAweGMwKSArIChlcUlkeCAqIDB4MTgpKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX0hRX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2NjQwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNTkwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfTlVNX09GX1RBU0tTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjAwNCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQwNCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgQ1NUT1JNX0lTQ1NJX1BBR0VfU0laRV9MT0dfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDAyICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDAyICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBDU1RPUk1fSVNDU0lfUEFHRV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjAwMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQwMCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfQ19PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODExYSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorCShpbmRleCAqIDB4NCkpIDogKDB4MzA1YSArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAogCShpbmRleCAqIDB4NCkpKQotI2RlZmluZSBDU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgY3B1X2lkLCBpbmRleCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAotCShpbmRleCAqIDB4NCkpIDogKDB4MTQxOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpICsgXAorI2RlZmluZSBDU1RPUk1fU0JfSENfRElTQUJMRV9VX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDFhICsgKHBvcnQgKiAweDgwMCkgKyAoY3B1X2lkICogMHg4MCkgKyBcCisJKGluZGV4ICogMHg0KSkgOiAoMHg0MDFhICsgKHBvcnQgKiAweDgwMCkgKyAoY3B1X2lkICogMHg4MCkgKyBcCiAJKGluZGV4ICogMHg0KSkpCi0jZGVmaW5lIENTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODAwMCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSA6IFwKLQkoMHgxNDAwICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpKQotI2RlZmluZSBDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODAwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSA6IFwKLQkoMHgxNDA4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpKQorI2RlZmluZSBDU1RPUk1fU0JfSENfVElNRU9VVF9DX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MTE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCisJKGluZGV4ICogMHg0KSkgOiAoMHgzMDU4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCisJKGluZGV4ICogMHg0KSkpCisjZGVmaW5lIENTVE9STV9TQl9IQ19USU1FT1VUX1VfT0ZGU0VUKHBvcnQsIGNwdV9pZCwgaW5kZXgpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweGIwMTggKyAocG9ydCAqIDB4ODAwKSArIChjcHVfaWQgKiAweDgwKSArIFwKKwkoaW5kZXggKiAweDQpKSA6ICgweDQwMTggKyAocG9ydCAqIDB4ODAwKSArIChjcHVfaWQgKiAweDgwKSArIFwKKwkoaW5kZXggKiAweDQpKSkKKyNkZWZpbmUgQ1NUT1JNX1NCX0hPU1RfU0JfQUREUl9DX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgxMDAgKyAocG9ydCAqIDB4MjgwKSArIChjcHVfaWQgKiAweDI4KSkgOiBcCisJKDB4MzA0MCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSkKKyNkZWZpbmUgQ1NUT1JNX1NCX0hPU1RfU0JfQUREUl9VX09GRlNFVChwb3J0LCBjcHVfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweGIwMDAgKyAocG9ydCAqIDB4ODAwKSArIChjcHVfaWQgKiAweDgwKSkgOiBcCisJKDB4NDAwMCArIChwb3J0ICogMHg4MDApICsgKGNwdV9pZCAqIDB4ODApKSkKKyNkZWZpbmUgQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODEwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSA6IFwKKwkoMHgzMDQ4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpKQorI2RlZmluZSBDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQocG9ydCwgY3B1X2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDA4ICsgKHBvcnQgKiAweDgwMCkgKyAoY3B1X2lkICogMHg4MCkpIDogXAorCSgweDQwMDggKyAocG9ydCAqIDB4ODAwKSArIChjcHVfaWQgKiAweDgwKSkpCisjZGVmaW5lIENTVE9STV9TQl9TVEFUVVNfQkxPQ0tfQ19TSVpFIDB4MTAKKyNkZWZpbmUgQ1NUT1JNX1NCX1NUQVRVU19CTE9DS19VX1NJWkUgMHg2MAogI2RlZmluZSBDU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgxMTA4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg1MTA4ICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBUU1RPUk1fQVBQUk9YSU1BVEVfTUFUQ0hfTVVMVElDQVNUX0ZJTFRFUklOR19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDMxYzAgKyAoZnVuY3Rpb24gKiAweDIwKSkgOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MzIwMCArIChmdW5jdGlvbiAqIDB4MjApKSA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFRTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAogCShJU19FMUhfT0ZGU0VUID8gMHhhMDAwIDogMHgxMDAwKQogI2RlZmluZSBUU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGNsaWVudF9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MzM1MCArIChwb3J0ICogMHgxOTApICsgKGNsaWVudF9pZCAqIDB4MTApKSBcCi0JOiAoMHg5YzAgKyAocG9ydCAqIDB4MTMwKSArIChjbGllbnRfaWQgKiAweDEwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgzM2EwICsgKHBvcnQgKiAweDFhMCkgKyAoY2xpZW50X2lkICogMHgxMCkpIFwKKwk6ICgweDljMCArIChwb3J0ICogMHgxMjApICsgKGNsaWVudF9pZCAqIDB4MTApKSkKICNkZWZpbmUgVFNUT1JNX0NPTU1PTl9TQUZDX1dPUktBUk9VTkRfRU5BQkxFX09GRlNFVCBcCi0JKElTX0UxSF9PRkZTRVQgPyAweDFhZDggOiAweGZmZmZmZmZmKQorCShJU19FMUhfT0ZGU0VUID8gMHgxZWQ4IDogMHhmZmZmZmZmZikKKyNkZWZpbmUgVFNUT1JNX0NPTU1PTl9TQUZDX1dPUktBUk9VTkRfVElNRU9VVF8xMFVTRUNfT0ZGU0VUIFwKKwkoSVNfRTFIX09GRlNFVCA/IDB4MWVkYSA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFRTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhiMDFhICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE0MWEgKyAoZnVuY3Rpb24gKiBcCkBAIC02NSw5NSArMTM0LDEzMyBAQAogCShJU19FMUhfT0ZGU0VUID8gKDB4YjAwOCArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApKSA6ICgweDE0MDggKyAoZnVuY3Rpb24gKiAweDI4KSkpCiAjZGVmaW5lIFRTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDJiODAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRiNjggKyBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyOTQwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0OTI4ICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBUU1RPUk1fRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDMwMDAgKyAoZnVuY3Rpb24gKiAweDM4KSkgOiAoMHgxNTAwICsgXAotCShmdW5jdGlvbiAqIDB4MzgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDMwMDAgKyAoZnVuY3Rpb24gKiAweDQwKSkgOiAoMHgxNTAwICsgXAorCShmdW5jdGlvbiAqIDB4NDApKSkKICNkZWZpbmUgVFNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VUIFwKLQkoSVNfRTFIX09GRlNFVCA/IDB4MWFkMCA6IDB4ZmZmZmZmZmYpCisJKElTX0UxSF9PRkZTRVQgPyAweDFlZDAgOiAweGZmZmZmZmZmKQogI2RlZmluZSBUU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhiMTQ0ICsgKHBvcnQgKiAweDMwKSkgOiAoMHgxNDU0ICsgKHBvcnQgKiAweDE4KSkpCiAjZGVmaW5lIFRTVE9STV9JTkRJUkVDVElPTl9UQUJMRV9PRkZTRVQoZnVuY3Rpb24pIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDEyYzggKyAoZnVuY3Rpb24gKiAweDgwKSkgOiAoMHgyMmM4ICsgXAogCShmdW5jdGlvbiAqIDB4ODApKSkKICNkZWZpbmUgVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX1NJWkUgMHg4MAotI2RlZmluZSBUU1RPUk1fTUFDX0ZJTFRFUl9DT05GSUdfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgzMDA4ICsgKGZ1bmN0aW9uICogMHgzOCkpIDogKDB4MTUwOCArIFwKLQkoZnVuY3Rpb24gKiAweDM4KSkpCi0jZGVmaW5lIFRTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgc3RhdHNfY291bnRlcl9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjAxMCArIChwb3J0ICogMHg1YjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCi0JMHg1MCkpIDogKDB4NDA4MCArIChwb3J0ICogMHg1YjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDUwKSkpCi0jZGVmaW5lIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDJjMDAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRiODggKyBcCisjZGVmaW5lIFRTVE9STV9JU0NTSV9DT05OX0JVRl9QQkxfT0ZGU0VUKGZ1bmN0aW9uLCBwYmxFbnRyeSkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjBjMCArIChmdW5jdGlvbiAqIDB4NDApICsgKHBibEVudHJ5ICogMHg4KSkgXAorCTogKDB4NGMzMCArIChmdW5jdGlvbiAqIDB4NDApICsgKHBibEVudHJ5ICogMHg4KSkpCisjZGVmaW5lIFRTVE9STV9JU0NTSV9FUlJPUl9CSVRNQVBfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MzQwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0Y2QwICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQotI2RlZmluZSBUU1RPUk1fVFBBX0VYSVNUX09GRlNFVCAoSVNfRTFIX09GRlNFVCA/IDB4MzY4MCA6IDB4MWMyMCkKLSNkZWZpbmUgVVNUT1JNX0FHR19EQVRBX09GRlNFVCAoSVNfRTFIX09GRlNFVCA/IDB4YTA0MCA6IDB4MmMxMCkKLSNkZWZpbmUgVVNUT1JNX0FHR19EQVRBX1NJWkUgKElTX0UxSF9PRkZTRVQgPyAweDI0NDAgOiAweDEyMDApCisjZGVmaW5lIFRTVE9STV9JU0NTSV9OVU1fT0ZfVEFTS1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDA0ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0YzA0ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfUEFHRV9TSVpFX0xPR19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwMDIgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRjMDIgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFRTVE9STV9JU0NTSV9QQUdFX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDAwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0YzAwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfUlFfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwODAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRjMjAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFRTVE9STV9JU0NTSV9UQ1BfVkFSU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDYwNDAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRjMTAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFRTVE9STV9JU0NTSV9UQ1BfVkFSU19MU0JfTE9DQUxfTUFDX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg2MDQyICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0YzEyICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fSVNDU0lfVENQX1ZBUlNfTVNCX0xPQ0FMX01BQ19BRERSX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NjA0NCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NGMxNCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVFNUT1JNX01BQ19GSUxURVJfQ09ORklHX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MzAwOCArIChmdW5jdGlvbiAqIDB4NDApKSA6ICgweDE1MDggKyBcCisJKGZ1bmN0aW9uICogMHg0MCkpKQorI2RlZmluZSBUU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIHN0YXRzX2NvdW50ZXJfaWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDIwMTAgKyAocG9ydCAqIDB4NDkwKSArIChzdGF0c19jb3VudGVyX2lkICogXAorCTB4NDApKSA6ICgweDQwMTAgKyAocG9ydCAqIDB4NDkwKSArIChzdGF0c19jb3VudGVyX2lkICogMHg0MCkpKQorI2RlZmluZSBUU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyOWMwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHg0OTQ4ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBUU1RPUk1fVENQX01BWF9DV05EX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NDAwNCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWZiNCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX0FHR19EQVRBX09GRlNFVCAoSVNfRTFIX09GRlNFVCA/IDB4YTAwMCA6IDB4MzAwMCkKKyNkZWZpbmUgVVNUT1JNX0FHR19EQVRBX1NJWkUgKElTX0UxSF9PRkZTRVQgPyAweDIwMDAgOiAweDEwMDApCiAjZGVmaW5lIFVTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAotCShJU19FMUhfT0ZGU0VUID8gMHg4OTYwIDogMHgxMDAwKQorCShJU19FMUhfT0ZGU0VUID8gMHg4MDAwIDogMHgxMDAwKQogI2RlZmluZSBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODk4MCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCiAjZGVmaW5lIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODAxOCArIChwb3J0ICogMHg0YjApICsgKGNsaWVudElkICogMHgzMCkpIDogXAotCSgweDUzMzAgKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRJZCAqIDB4MjApKSkKLSNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MjIgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE5MjIgKyAoZnVuY3Rpb24gKiBcCi0JMHg0MCkgKyAoaW5kZXggKiAweDQpKSkKLSNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NTAwICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDAgKyAoZnVuY3Rpb24gKiAweDQwKSkpCi0jZGVmaW5lIFVTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NTA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDQwKSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHgxMDApKSA6ICgweDE5MDggKyAoZnVuY3Rpb24gKiAweDQwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgxMDEwICsgKHBvcnQgKiAweDY4MCkgKyAoY2xpZW50SWQgKiAweDQwKSkgOiBcCisJKDB4NDAxMCArIChwb3J0ICogMHgzNjApICsgKGNsaWVudElkICogMHgzMCkpKQorI2RlZmluZSBVU1RPUk1fQ1FFX1BBR0VfTkVYVF9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDEwMjggKyAocG9ydCAqIDB4NjgwKSArIChjbGllbnRJZCAqIDB4NDApKSA6IFwKKwkoMHg0MDI4ICsgKHBvcnQgKiAweDM2MCkgKyAoY2xpZW50SWQgKiAweDMwKSkpCisjZGVmaW5lIFVTVE9STV9FVEhfUEFVU0VfRU5BQkxFRF9PRkZTRVQocG9ydCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MmFkNCArIChwb3J0ICogMHg4KSkgOiAweGZmZmZmZmZmKQogI2RlZmluZSBVU1RPUk1fRVRIX1JJTkdfUEFVU0VfREFUQV9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMjAgKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRJZCAqIDB4MzApKSA6IFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDEwMzAgKyAocG9ydCAqIDB4NjgwKSArIChjbGllbnRJZCAqIDB4NDApKSA6IFwKIAkweGZmZmZmZmZmKQogI2RlZmluZSBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyYTUwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxZDk4ICsgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MmE1MCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWRkMCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKICNkZWZpbmUgVVNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VUIFwKIAkoSVNfRTFIX09GRlNFVCA/IDB4MjQ0OCA6IDB4ZmZmZmZmZmYpCi0jZGVmaW5lIFVTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk3MDQgKyAocG9ydCAqIDB4ZjApKSA6ICgweDE5ODQgKyAocG9ydCAqIDB4YzApKSkKLSNkZWZpbmUgVVNUT1JNX01BWF9BR0dfU0laRV9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDgwMTAgKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRJZCAqIDB4MzApKSA6IFwKLQkoMHg1MzI4ICsgKHBvcnQgKiAweDI2MCkgKyAoY2xpZW50SWQgKiAweDIwKSkpCi0jZGVmaW5lIFVTVE9STV9NRU1fV09SS0FST1VORF9BRERSRVNTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjQwOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NTMwOCArIFwKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX0NRX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDQ0ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDE0ICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQotI2RlZmluZSBVU1RPUk1fUEFVU0VfRU5BQkxFRF9PRkZTRVQocG9ydCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MmFkNCArIChwb3J0ICogMHg4KSkgOiAweGZmZmZmZmZmKQorI2RlZmluZSBVU1RPUk1fSVNDU0lfQ1FfU1FOX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDQ2ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDE2ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBVU1RPUk1fSVNDU0lfRVJST1JfQklUTUFQX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NzY4OCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjljOCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX0dMT0JBTF9CVUZfUEhZU19BRERSX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NzY0OCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjliOCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX05VTV9PRl9UQVNLU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDcwMDQgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI0MDQgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9JU0NTSV9QQUdFX1NJWkVfTE9HX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4NzAwMiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MjQwMiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX0lTQ1NJX1BBR0VfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDcwMDAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI0MDAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9JU0NTSV9SMlRRX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDQwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDEwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBVU1RPUk1fSVNDU0lfUlFfQlVGRkVSX1NJWkVfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg3MDgwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgyNDIwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBVU1RPUk1fSVNDU0lfUlFfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDcwODQgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDI0MjQgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGNsaWVudElkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgxMDE4ICsgKHBvcnQgKiAweDY4MCkgKyAoY2xpZW50SWQgKiAweDQwKSkgOiBcCisJKDB4NDAxOCArIChwb3J0ICogMHgzNjApICsgKGNsaWVudElkICogMHgzMCkpKQorI2RlZmluZSBVU1RPUk1fTUVNX1dPUktBUk9VTkRfQUREUkVTU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI0MDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFkYTggKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFVTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgc3RhdHNfY291bnRlcl9pZCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjQ1MCArIChwb3J0ICogMHgyZDApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCi0JMHgyOCkpIDogKDB4NDc0MCArIChwb3J0ICogMHgyZDApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDI4KSkpCisJMHgyOCkpIDogKDB4MTUwMCArIChwb3J0ICogMHgyZDApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDI4KSkpCiAjZGVmaW5lIFVTVE9STV9SWF9QUk9EU19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg4MDAwICsgKHBvcnQgKiAweDRiMCkgKyAoY2xpZW50X2lkICogMHgzMCkpIFwKLQk6ICgweDUzMTggKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRfaWQgKiAweDIwKSkpCi0jZGVmaW5lIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5MDFhICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCi0JKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCi0JKGluZGV4ICogMHg0KSkpCi0jZGVmaW5lIFVTVE9STV9TQl9IQ19USU1FT1VUX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5MDE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCi0JKGluZGV4ICogMHg0KSkgOiAoMHgxNDE4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCi0JKGluZGV4ICogMHg0KSkpCi0jZGVmaW5lIFVTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTAwMCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSA6IFwKLQkoMHgxNDAwICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpKQotI2RlZmluZSBVU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTAwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSA6IFwKLQkoMHgxNDA4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4MTAwMCArIChwb3J0ICogMHg2ODApICsgKGNsaWVudF9pZCAqIDB4NDApKSBcCisJOiAoMHg0MDAwICsgKHBvcnQgKiAweDM2MCkgKyAoY2xpZW50X2lkICogMHgzMCkpKQogI2RlZmluZSBVU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyOWYwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxZDgwICsgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjlmMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWRiOCArIFwKIAkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgVVNUT1JNX1RQQV9CVFJfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHgzZGE1IDogMHg1MDk1KQorI2RlZmluZSBVU1RPUk1fVFBBX0JUUl9TSVpFIDB4MQogI2RlZmluZSBYU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUIFwKIAkoSVNfRTFIX09GRlNFVCA/IDB4OTAwMCA6IDB4MTAwMCkKICNkZWZpbmUgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDkwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCiAjZGVmaW5lIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI0YTggKyAocG9ydCAqIDB4NTApKSA6ICgweDNiYTAgKyAocG9ydCAqIDB4NTApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI0YTggKyAocG9ydCAqIDB4NTApKSA6ICgweDNhODAgKyAocG9ydCAqIDB4NTApKSkKICNkZWZpbmUgWFNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGEwMWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAogCSgoZnVuY3Rpb24mMSkgKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChmdW5jdGlvbiAqIFwKQEAgLTE2NSwyMiArMjcyLDczIEBACiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMDA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkpIDogKDB4MTQwOCArIChmdW5jdGlvbiAqIDB4MjgpKSkKICNkZWZpbmUgWFNUT1JNX0UxSE9WX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MmMxMCArIChmdW5jdGlvbiAqIDB4MikpIDogMHhmZmZmZmZmZikKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJjMTAgKyAoZnVuY3Rpb24gKiAweDgpKSA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFhTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI0MTggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDNiNzAgKyBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNDE4ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgzYTUwICsgXAogCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBYU1RPUk1fRkFJUk5FU1NfUEVSX1ZOX1ZBUlNfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNTg4ICsgKGZ1bmN0aW9uICogMHg5MCkpIDogKDB4M2M4MCArIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI1ODggKyAoZnVuY3Rpb24gKiAweDkwKSkgOiAoMHgzYjYwICsgXAogCShmdW5jdGlvbiAqIDB4OTApKSkKICNkZWZpbmUgWFNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VUIFwKLQkoSVNfRTFIX09GRlNFVCA/IDB4MmMyMCA6IDB4ZmZmZmZmZmYpCisJKElTX0UxSF9PRkZTRVQgPyAweDJjNTAgOiAweGZmZmZmZmZmKQogI2RlZmluZSBYU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMTQ0ICsgKHBvcnQgKiAweDMwKSkgOiAoMHgxNDU0ICsgKHBvcnQgKiAweDE4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9IUV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODBjMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMzMCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX0xPQ0FMX01BQ19BRERSMF9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwODAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMjAgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9MT0NBTF9NQUNfQUREUjFfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDgxICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzIxICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfTE9DQUxfTUFDX0FERFIyX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA4MiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMyMiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX0xPQ0FMX01BQ19BRERSM19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwODMgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMjMgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9MT0NBTF9NQUNfQUREUjRfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDg0ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzI0ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfTE9DQUxfTUFDX0FERFI1X09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA4NSArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMyNSArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX0xPQ0FMX1ZMQU5fT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDg2ICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzI2ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfTlVNX09GX1RBU0tTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAwNCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMwNCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX1BBR0VfU0laRV9MT0dfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDAyICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzAyICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fSVNDU0lfUEFHRV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODAwMCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMwMCArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX1IyVFFfU0laRV9PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwYzQgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMzQgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9TUV9TSVpFX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODBjMiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMzMiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX1RDUF9WQVJTX0FEVl9XTkRfU0NMX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA0MyArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMxMyArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX1RDUF9WQVJTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4ODA0MiArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4MWMxMiArIFwKKwkoZnVuY3Rpb24gKiAweDgpKSkKKyNkZWZpbmUgWFNUT1JNX0lTQ1NJX1RDUF9WQVJTX1RPU19PRkZTRVQoZnVuY3Rpb24pIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwNDEgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDFjMTEgKyBcCisJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9JU0NTSV9UQ1BfVkFSU19UVExfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDQwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxYzEwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBYU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIHN0YXRzX2NvdW50ZXJfaWQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweGMwMDAgKyAocG9ydCAqIDB4M2YwKSArIChzdGF0c19jb3VudGVyX2lkICogXAotCTB4MzgpKSA6ICgweDMzNzggKyAocG9ydCAqIDB4M2YwKSArIChzdGF0c19jb3VudGVyX2lkICogMHgzOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4YzAwMCArIChwb3J0ICogMHgzNjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCisJMHgzMCkpIDogKDB4MzM3OCArIChwb3J0ICogMHgzNjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDMwKSkpCiAjZGVmaW5lIFhTVE9STV9SQVRFX1NIQVBJTkdfUEVSX1ZOX1ZBUlNfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNTQ4ICsgKGZ1bmN0aW9uICogMHg5MCkpIDogKDB4M2M0MCArIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI1NDggKyAoZnVuY3Rpb24gKiAweDkwKSkgOiAoMHgzYjIwICsgXAogCShmdW5jdGlvbiAqIDB4OTApKSkKICNkZWZpbmUgWFNUT1JNX1NQUV9QQUdFX0JBU0VfT0ZGU0VUKGZ1bmN0aW9uKSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHgyMDAwICsgKGZ1bmN0aW9uICogMHgxMCkpIDogKDB4MzMyOCArIFwKQEAgLTE4OSw4ICszNDcsMTUgQEAKIAkoSVNfRTFIX09GRlNFVCA/ICgweDIwMDggKyAoZnVuY3Rpb24gKiAweDEwKSkgOiAoMHgzMzMwICsgXAogCShmdW5jdGlvbiAqIDB4MTApKSkKICNkZWZpbmUgWFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjNkOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4M2I2MCArIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDIzZDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDNhNDAgKyBcCiAJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFhTVE9STV9UQ1BfR0xPQkFMX0RFTF9BQ0tfQ09VTlRFUl9FTkFCTEVEX09GRlNFVChwb3J0KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg0MDAwICsgKHBvcnQgKiAweDgpKSA6ICgweDE5NjAgKyAocG9ydCAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fVENQX0dMT0JBTF9ERUxfQUNLX0NPVU5URVJfTUFYX0NPVU5UX09GRlNFVChwb3J0KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg0MDAxICsgKHBvcnQgKiAweDgpKSA6ICgweDE5NjEgKyAocG9ydCAqIDB4OCkpKQorI2RlZmluZSBYU1RPUk1fVENQX1RYX1NXU19USU1FUl9WQUxfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg0MDYwICsgKChmdW5jdGlvbj4+MSkgKiAweDgpICsgKChmdW5jdGlvbiYxKSBcCisJKiAweDQpKSA6ICgweDE5NzggKyAoZnVuY3Rpb24gKiAweDQpKSkKICNkZWZpbmUgQ09NTU9OX0FTTV9JTlZBTElEX0FTU0VSVF9PUENPREUgMHgwCiAKIC8qKgpAQCAtMjExLDYgKzM3Niw5IEBACiAjZGVmaW5lIFRDUF9JUFY0X0hBU0hfVFlQRSAyCiAjZGVmaW5lIElQVjZfSEFTSF9UWVBFIDMKICNkZWZpbmUgVENQX0lQVjZfSEFTSF9UWVBFIDQKKyNkZWZpbmUgVkxBTl9QUklfSEFTSF9UWVBFIDUKKyNkZWZpbmUgRTFIT1ZfUFJJX0hBU0hfVFlQRSA2CisjZGVmaW5lIERTQ1BfSEFTSF9UWVBFIDcKIAogCiAvKiBFdGhlcm5ldCBSaW5nIHBhcmFtZXRlcnMgKi8KQEAgLTIxOCwzMCArMzg2LDI2IEBACiAjZGVmaW5lIEZJUlNUX0JEX0lOX1BLVCAwCiAjZGVmaW5lIFBBUlNFX0JEX0lOREVYIDEKICNkZWZpbmUgTlVNX09GX0VUSF9CRFNfSU5fUEFHRSAoKFBBR0VfU0laRSkvKFNUUlVDVF9TSVpFKGV0aF90eF9iZCkvOCkpCi0KKyNkZWZpbmUgVV9FVEhfTlVNX09GX1NHRVNfVE9fRkVUQ0ggOAorI2RlZmluZSBVX0VUSF9NQVhfU0dFU19GT1JfUEFDS0VUIDMKIAogLyogUnggcmluZyBwYXJhbXMgKi8KLSNkZWZpbmUgVV9FVEhfTE9DQUxfQkRfUklOR19TSVpFIDE2Ci0jZGVmaW5lIFVfRVRIX0xPQ0FMX1NHRV9SSU5HX1NJWkUgMTIKKyNkZWZpbmUgVV9FVEhfTE9DQUxfQkRfUklOR19TSVpFIDgKKyNkZWZpbmUgVV9FVEhfTE9DQUxfU0dFX1JJTkdfU0laRSAxMAogI2RlZmluZSBVX0VUSF9TR0xfU0laRSA4CiAKIAotI2RlZmluZSBVX0VUSF9CRFNfUEVSX1BBR0VfTUFTSyBcCi0JKChQQUdFX1NJWkUvKFNUUlVDVF9TSVpFKGV0aF9yeF9iZCkvOCkpLTEpCi0jZGVmaW5lIFVfRVRIX0NRRV9QRVJfUEFHRV9NQVNLIFwKLQkoKFBBR0VfU0laRS8oU1RSVUNUX1NJWkUoZXRoX3J4X2NxZSkvOCkpLTEpCi0jZGVmaW5lIFVfRVRIX1NHRVNfUEVSX1BBR0VfTUFTSyBcCi0JKChQQUdFX1NJWkUvKFNUUlVDVF9TSVpFKGV0aF9yeF9zZ2UpLzgpKS0xKQotCiAjZGVmaW5lIFVfRVRIX1NHRVNfUEVSX1BBR0VfSU5WRVJTRV9NQVNLIFwKIAkoMHhGRkZGIC0gKChQQUdFX1NJWkUvKChTVFJVQ1RfU0laRShldGhfcnhfc2dlKSkvOCkpLTEpKQogCi0KLSNkZWZpbmUgVFVfRVRIX0NRRVNfUEVSX1BBR0UgXAotCShQQUdFX1NJWkUvKFNUUlVDVF9TSVpFKGV0aF9yeF9jcWVfbmV4dF9wYWdlKS84KSkKKyNkZWZpbmUgVFVfRVRIX0NRRVNfUEVSX1BBR0UgKFBBR0VfU0laRS8oU1RSVUNUX1NJWkUoZXRoX3J4X2NxZSkvOCkpCiAjZGVmaW5lIFVfRVRIX0JEU19QRVJfUEFHRSAoUEFHRV9TSVpFLyhTVFJVQ1RfU0laRShldGhfcnhfYmQpLzgpKQogI2RlZmluZSBVX0VUSF9TR0VTX1BFUl9QQUdFIChQQUdFX1NJWkUvKFNUUlVDVF9TSVpFKGV0aF9yeF9zZ2UpLzgpKQogCisjZGVmaW5lIFVfRVRIX0JEU19QRVJfUEFHRV9NQVNLIChVX0VUSF9CRFNfUEVSX1BBR0UtMSkKKyNkZWZpbmUgVV9FVEhfQ1FFX1BFUl9QQUdFX01BU0sgKFRVX0VUSF9DUUVTX1BFUl9QQUdFLTEpCisjZGVmaW5lIFVfRVRIX1NHRVNfUEVSX1BBR0VfTUFTSyAoVV9FVEhfU0dFU19QRVJfUEFHRS0xKQorCiAjZGVmaW5lIFVfRVRIX1VOREVGSU5FRF9RIDB4RkYKIAogLyogdmFsdWVzIG9mIGNvbW1hbmQgSURzIGluIHRoZSByYW1yb2QgbWVzc2FnZSAqLwpAQCAtMjY2LDggKzQzMCw4IEBACiAjZGVmaW5lIFRfRVRIX0NSQzMyX0hBU0hfU0VFRCAweDAwMDAwMDAwCiAKIC8qIE1heGltYWwgTDIgY2xpZW50cyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgRVRIX01BWF9SWF9DTElFTlRTX0UxIDE5Ci0jZGVmaW5lIEVUSF9NQVhfUlhfQ0xJRU5UU19FMUggMjUKKyNkZWZpbmUgRVRIX01BWF9SWF9DTElFTlRTX0UxIDE4CisjZGVmaW5lIEVUSF9NQVhfUlhfQ0xJRU5UU19FMUggMjYKIAogLyogTWF4aW1hbCBhZ2dyZWdhdGlvbiBxdWV1ZXMgc3VwcG9ydGVkICovCiAjZGVmaW5lIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxIDMyCkBAIC0yNzYsNiArNDQwLDkgQEAKIC8qIEVUSCBSU1MgbW9kZXMgKi8KICNkZWZpbmUgRVRIX1JTU19NT0RFX0RJU0FCTEVEIDAKICNkZWZpbmUgRVRIX1JTU19NT0RFX1JFR1VMQVIgMQorI2RlZmluZSBFVEhfUlNTX01PREVfVkxBTl9QUkkgMgorI2RlZmluZSBFVEhfUlNTX01PREVfRTFIT1ZfUFJJIDMKKyNkZWZpbmUgRVRIX1JTU19NT0RFX0lQX0RTQ1AgNAogCiAKIC8qKgpAQCAtMzMyLDEyICs0OTksMTQgQEAKICNkZWZpbmUgSENfSU5ERVhfREVGX0NfRVRIX1NMT1dfUEFUSCAzCiAjZGVmaW5lIEhDX0lOREVYX0RFRl9DX0VUSF9SRE1BX0NRX0NPTlMgNAogI2RlZmluZSBIQ19JTkRFWF9ERUZfQ19FVEhfSVNDU0lfQ1FfQ09OUyA1CisjZGVmaW5lIEhDX0lOREVYX0RFRl9DX0VUSF9GQ09FX0NRX0NPTlMgNgogCiAjZGVmaW5lIEhDX0lOREVYX0RFRl9VX0VUSF9SRE1BX1JYX0NRX0NPTlMgMAogI2RlZmluZSBIQ19JTkRFWF9ERUZfVV9FVEhfSVNDU0lfUlhfQ1FfQ09OUyAxCiAjZGVmaW5lIEhDX0lOREVYX0RFRl9VX0VUSF9SRE1BX1JYX0JEX0NPTlMgMgogI2RlZmluZSBIQ19JTkRFWF9ERUZfVV9FVEhfSVNDU0lfUlhfQkRfQ09OUyAzCi0KKyNkZWZpbmUgSENfSU5ERVhfREVGX1VfRVRIX0ZDT0VfUlhfQ1FfQ09OUyA0CisjZGVmaW5lIEhDX0lOREVYX0RFRl9VX0VUSF9GQ09FX1JYX0JEX0NPTlMgNQogCiAvKiB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8gZ2V0IHRoZSBTQiBvZmZzZXQgKi8KICNkZWZpbmUgVVNUT1JNX0lEIDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2hzaS5oIGIvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKaW5kZXggMDNjNjI0Mi4uOGUyMjYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfaHNpLmgKQEAgLTkxLDYgKzkxLDIxIEBACiAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19ISURFX1BPUlQxCQkgICAgMHgwMDAwMjAwMAogCisJLyogIFRoZSBmYW4gZmFpbHVyZSBtZWNoYW5pc20gaXMgdXN1YWxseSByZWxhdGVkIHRvIHRoZSBQSFkgdHlwZQorCSAgc2luY2UgdGhlIHBvd2VyIGNvbnN1bXB0aW9uIG9mIHRoZSBib2FyZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBQSFkuCisJICBDdXJyZW50bHksIGZhbiBpcyByZXF1aXJlZCBmb3IgbW9zdCBkZXNpZ25zIHdpdGggU0ZYNzEwMSwgQkNNODcyNworCSAgYW5kIEJDTTg0ODEuIElmIGEgZmFuIGlzIG5vdCByZXF1aXJlZCBmb3IgYSBib2FyZCB3aGljaCB1c2VzIG9uZQorCSAgb2YgdGhvc2UgUEhZcywgdGhpcyBmaWVsZCBzaG91bGQgYmUgc2V0IHRvICJEaXNhYmxlZCIuIElmIGEgZmFuIGlzCisJICByZXF1aXJlZCBmb3IgYSBkaWZmZXJlbnQgUEhZIHR5cGUsIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBzZXQgdG8KKwkgICJFbmFibGVkIi4KKwkgIFRoZSBmYW4gZmFpbHVyZSBpbmRpY2F0aW9uIGlzIGV4cGVjdGVkIG9uCisJICBTUElPNSAqLworI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0ZBTl9GQUlMVVJFX01BU0sJCQkgICAgICAweDAwMTgwMDAwCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfRkFOX0ZBSUxVUkVfU0hJRlQgCQkgICAgICAxOQorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0ZBTl9GQUlMVVJFX1BIWV9UWVBFCQkgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfRkFOX0ZBSUxVUkVfRElTQUJMRUQJCSAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9FTkFCTEVECQkgICAgICAweDAwMTAwMDAwCisKIAl1MzIgcG93ZXJfZGlzc2lwYXRlZDsJCQkJCS8qIDB4MTFjICovCiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfUE9XRVJfRElTX0NNTl9NQVNLCSAgICAweGZmMDAwMDAwCiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfUE9XRVJfRElTX0NNTl9TSElGVAkgICAgMjQKQEAgLTIzMyw2ICsyNDgsOCBAQAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2CSAgICAweDAwMDAwNjAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEJICAgIDB4MDAwMDA3MDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMQkgICAgMHgwMDAwMDgwMAorI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3CSAgICAweDAwMDAwOTAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjdfTk9DICAgMHgwMDAwMGEwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFCSAgICAweDAwMDBmZDAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX05PVF9DT05OCSAgICAweDAwMDBmZjAwCiAKQEAgLTM0MywxMCArMzYwLDE2IEBACiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9NQkFfRU5BQkxFRAkJICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgUE9SVF9GRUFUVVJFX01GV19FTkFCTEVECQkgICAgMHgwNDAwMDAwMAogCi0JLyogIENoZWNrIHRoZSBvcHRpYyB2ZW5kb3IgdmlhIGkyYyBiZWZvcmUgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBieQotCSAgU1cgKi8KLSNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVEIAkgICAgICAweDAwMDAwMDAwCi0jZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9FTkFCTEVECQkgICAgICAweDA4MDAwMDAwCisJLyogUmVzZXJ2ZWQgYml0czogMjgtMjkgKi8KKwkvKiAgQ2hlY2sgdGhlIG9wdGljIHZlbmRvciB2aWEgaTJjIGFnYWluc3QgYSBsaXN0IG9mIGFwcHJvdmVkIG1vZHVsZXMKKwkgIGluIGEgc2VwYXJhdGUgbnZyYW0gaW1hZ2UgKi8KKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0sJCSAgICAgIDB4RTAwMDAwMDAKKyNkZWZpbmUgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX1NISUZUCQkgICAgICAyOQorI2RlZmluZSBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTk9fRU5GT1JDRU1FTlQJICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRElTQUJMRV9UWF9MQVNFUiAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9XQVJOSU5HX01TRwkgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9QT1dFUl9ET1dOCSAgICAgIDB4NjAwMDAwMDAKKwogCiAJdTMyIHdvbF9jb25maWc7CiAJLyogRGVmYXVsdCBpcyB1c2VkIHdoZW4gZHJpdmVyIHNldHMgdG8gImF1dG8iIG1vZGUgKi8KQEAgLTYzNSw2ICs2NTgsOCBAQAogI2RlZmluZSBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfRElTIAkJMHgyMDAxMDAwMAogI2RlZmluZSBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfTUNQIAkJMHgyMDAyMDAwMAogI2RlZmluZSBEUlZfTVNHX0NPREVfVU5MT0FEX0RPTkUJCQkweDIxMDAwMDAwCisjZGVmaW5lIERSVl9NU0dfQ09ERV9EQ0NfT0sJCQkJMHgzMDAwMDAwMAorI2RlZmluZSBEUlZfTVNHX0NPREVfRENDX0ZBSUxVUkUJCQkweDMxMDAwMDAwCiAjZGVmaW5lIERSVl9NU0dfQ09ERV9ESUFHX0VOVEVSX1JFUQkJCTB4NTAwMDAwMDAKICNkZWZpbmUgRFJWX01TR19DT0RFX0RJQUdfRVhJVF9SRVEJCQkweDYwMDAwMDAwCiAjZGVmaW5lIERSVl9NU0dfQ09ERV9WQUxJREFURV9LRVkJCQkweDcwMDAwMDAwCkBAIC02NDIsNiArNjY3LDEyIEBACiAjZGVmaW5lIERSVl9NU0dfQ09ERV9HRVRfVVBHUkFERV9LRVkJCQkweDgxMDAwMDAwCiAjZGVmaW5lIERSVl9NU0dfQ09ERV9HRVRfTUFOVUZfS0VZCQkJMHg4MjAwMDAwMAogI2RlZmluZSBEUlZfTVNHX0NPREVfTE9BRF9MMkJfUFJBTQkJCTB4OTAwMDAwMDAKKwkvKgorCSAqIFRoZSBvcHRpYyBtb2R1bGUgdmVyaWZpY2F0aW9uIGNvbW1hbmRzIHJlcXVyaXMgYm9vdGNvZGUKKwkgKiB2NS4wLjYgb3IgbGF0ZXIKKwkgKi8KKyNkZWZpbmUgRFJWX01TR19DT0RFX1ZSRllfT1BUX01ETAkJCTB4YTAwMDAwMDAKKyNkZWZpbmUgUkVRX0JDX1ZFUl80X1ZSRllfT1BUX01ETAkJCTB4MDAwNTAwMDYKIAogI2RlZmluZSBCSU9TX01TR19DT0RFX0xJQ19DSEFMTEVOR0UJCQkweGZmMDEwMDAwCiAjZGVmaW5lIEJJT1NfTVNHX0NPREVfTElDX1JFU1BPTlNFCQkJMHhmZjAyMDAwMApAQCAtNjYzLDYgKzY5NCw3IEBACiAjZGVmaW5lIEZXX01TR19DT0RFX0RSVl9VTkxPQURfUE9SVAkJCTB4MjAxMTAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9GVU5DVElPTiAJCTB4MjAxMjAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfRFJWX1VOTE9BRF9ET05FCQkJMHgyMTEwMDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9EQ0NfRE9ORQkJCQkweDMwMTAwMDAwCiAjZGVmaW5lIEZXX01TR19DT0RFX0RJQUdfRU5URVJfRE9ORQkJCTB4NTAxMDAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfRElBR19SRUZVU0UgCQkJMHg1MDIwMDAwMAogI2RlZmluZSBGV19NU0dfQ09ERV9ESUFHX0VYSVRfRE9ORQkJCTB4NjAxMDAwMDAKQEAgLTY3Niw2ICs3MDgsOSBAQAogI2RlZmluZSBGV19NU0dfQ09ERV9MMkJfUFJBTV9DX0xPQURfRkFJTFVSRQkJMHg5MDIyMDAwMAogI2RlZmluZSBGV19NU0dfQ09ERV9MMkJfUFJBTV9YX0xPQURfRkFJTFVSRQkJMHg5MDIzMDAwMAogI2RlZmluZSBGV19NU0dfQ09ERV9MMkJfUFJBTV9VX0xPQURfRkFJTFVSRQkJMHg5MDI0MDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9WUkZZX09QVF9NRExfU1VDQ0VTUwkJMHhhMDEwMDAwMAorI2RlZmluZSBGV19NU0dfQ09ERV9WUkZZX09QVF9NRExfSU5WTERfSU1HCQkweGEwMjAwMDAwCisjZGVmaW5lIEZXX01TR19DT0RFX1ZSRllfT1BUX01ETF9VTkFQUFJPVkVECQkweGEwMzAwMDAwCiAKICNkZWZpbmUgRldfTVNHX0NPREVfTElDX0NIQUxMRU5HRQkJCTB4ZmYwMTAwMDAKICNkZWZpbmUgRldfTVNHX0NPREVfTElDX1JFU1BPTlNFCQkJMHhmZjAyMDAwMApAQCAtNzEwLDYgKzc0NSwxNCBAQAogCXUzMiBkcnZfc3RhdHVzOwogI2RlZmluZSBEUlZfU1RBVFVTX1BNRgkJCQkJMHgwMDAwMDAwMQogCisjZGVmaW5lIERSVl9TVEFUVVNfRENDX0VWRU5UX01BU0sJCQkweDAwMDBmZjAwCisjZGVmaW5lIERSVl9TVEFUVVNfRENDX0RJU0FCTEVfRU5BQkxFX1BGCQkweDAwMDAwMTAwCisjZGVmaW5lIERSVl9TVEFUVVNfRENDX0JBTkRXSURUSF9BTExPQ0FUSU9OCQkweDAwMDAwMjAwCisjZGVmaW5lIERSVl9TVEFUVVNfRENDX0NIQU5HRV9NQUNfQUREUkVTUwkJMHgwMDAwMDQwMAorI2RlZmluZSBEUlZfU1RBVFVTX0RDQ19SRVNFUlZFRDEJCQkweDAwMDAwODAwCisjZGVmaW5lIERSVl9TVEFUVVNfRENDX1NFVF9QUk9UT0NPTAkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgRFJWX1NUQVRVU19EQ0NfU0VUX1BSSU9SSVRZCQkJMHgwMDAwMjAwMAorCiAJdTMyIHZpcnRfbWFjX3VwcGVyOwogI2RlZmluZSBWSVJUX01BQ19TSUdOX01BU0sJCQkJMHhmZmZmMDAwMAogI2RlZmluZSBWSVJUX01BQ19TSUdOQVRVUkUJCQkJMHg1NjRkMDAwMApAQCAtNzQ2LDEwICs3ODksOSBAQAogc3RydWN0IHBvcnRfbWZfY2ZnIHsKIAogCXUzMiBkeW5hbWljX2NmZzsJLyogZGV2aWNlIGNvbnRyb2wgY2hhbm5lbCAqLwotI2RlZmluZSBQT1JUX01GX0NGR19PVVRFUl9WTEFOX1RBR19NQVNLIAkgICAgMHgwMDAwZmZmZgotI2RlZmluZSBQT1JUX01GX0NGR19PVVRFUl9WTEFOX1RBR19TSElGVAkgICAgMAotI2RlZmluZSBQT1JUX01GX0NGR19EWU5BTUlDX0NGR19FTkFCTEVEIAkgICAgMHgwMDAxMDAwMAotI2RlZmluZSBQT1JUX01GX0NGR19EWU5BTUlDX0NGR19ERUZBVUxUIAkgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQT1JUX01GX0NGR19FMUhPVl9UQUdfTUFTSwkJICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgUE9SVF9NRl9DRkdfRTFIT1ZfVEFHX1NISUZUCQkgICAgMAorI2RlZmluZSBQT1JUX01GX0NGR19FMUhPVl9UQUdfREVGQVVMVAkJICAgIFBPUlRfTUZfQ0ZHX0UxSE9WX1RBR19NQVNLCiAKIAl1MzIgcmVzZXJ2ZWRbM107CiAKQEAgLTg1Myw2ICs4OTUsMjIgQEAKIH07CQkJCQkJICAgICAgIC8qIDB4NmRjICovCiAKIAorc3RydWN0IHNobWVtMl9yZWdpb24geworCisJdTMyCQkJc2l6ZTsKKworCXUzMgkJCWRjY19zdXBwb3J0OworI2RlZmluZSBTSE1FTV9EQ0NfU1VQUE9SVF9OT05FCQkJICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU0hNRU1fRENDX1NVUFBPUlRfRElTQUJMRV9FTkFCTEVfUEZfVExWICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNITUVNX0RDQ19TVVBQT1JUX0JBTkRXSURUSF9BTExPQ0FUSU9OX1RMViAgMHgwMDAwMDAwNAorI2RlZmluZSBTSE1FTV9EQ0NfU1VQUE9SVF9DSEFOR0VfTUFDX0FERFJFU1NfVExWICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgU0hNRU1fRENDX1NVUFBPUlRfU0VUX1BST1RPQ09MX1RMVgkgICAgMHgwMDAwMDA0MAorI2RlZmluZSBTSE1FTV9EQ0NfU1VQUE9SVF9TRVRfUFJJT1JJVFlfVExWCSAgICAweDAwMDAwMDgwCisjZGVmaW5lIFNITUVNX0RDQ19TVVBQT1JUX0RFRkFVTFQJCSAgICBTSE1FTV9EQ0NfU1VQUE9SVF9OT05FCisKK307CisKKwogc3RydWN0IGVtYWNfc3RhdHMgewogICAgIHUzMiAgICAgcnhfc3RhdF9pZmhjaW5vY3RldHM7CiAgICAgdTMyICAgICByeF9zdGF0X2lmaGNpbmJhZG9jdGV0czsKQEAgLTExODYsOSArMTI0NCw5IEBACiB9OwogCiAKLSNkZWZpbmUgQkNNXzU3MTBfRldfTUFKT1JfVkVSU0lPTgkJCTQKLSNkZWZpbmUgQkNNXzU3MTBfRldfTUlOT1JfVkVSU0lPTgkJCTgKLSNkZWZpbmUgQkNNXzU3MTBfRldfUkVWSVNJT05fVkVSU0lPTgkJCTUzCisjZGVmaW5lIEJDTV81NzEwX0ZXX01BSk9SX1ZFUlNJT04JCQk1CisjZGVmaW5lIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04JCQkwCisjZGVmaW5lIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04JCQkyMQogI2RlZmluZSBCQ01fNTcxMF9GV19FTkdJTkVFUklOR19WRVJTSU9OIAkJMAogI2RlZmluZSBCQ01fNTcxMF9GV19DT01QSUxFX0ZMQUdTCQkJMQogCkBAIC0xMjM4LDYgKzEyOTYsMjIgQEAKIAogCiAvKgorICogZG9vcmJlbGwgbWVzc2FnZSBzZW50IHRvIHRoZSBjaGlwCisgKi8KK3N0cnVjdCBkb29yYmVsbF9zZXRfcHJvZCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHByb2Q7CisJdTggemVyb19maWxsMTsKKwlzdHJ1Y3QgZG9vcmJlbGxfaGRyIGhlYWRlcjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXN0cnVjdCBkb29yYmVsbF9oZHIgaGVhZGVyOworCXU4IHplcm9fZmlsbDE7CisJdTE2IHByb2Q7CisjZW5kaWYKK307CisKKworLyoKICAqIElHVSBkcml2ZXIgYWNrbm93bGVkZ2VtZW50IHJlZ2lzdGVyCiAgKi8KIHN0cnVjdCBpZ3VfYWNrX3JlZ2lzdGVyIHsKQEAgLTEyNzIsNiArMTM0Niw2MiBAQAogCiAKIC8qCisgKiBJR1UgZHJpdmVyIGFja25vd2xlZGdlbWVudCByZWdpc3RlcgorICovCitzdHJ1Y3QgaWd1X2JhY2t3YXJkX2NvbXBhdGlibGUgeworCXUzMiBzYl9pZF9hbmRfZmxhZ3M7CisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX1NCX0lOREVYICgweEZGRkY8PDApCisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX1NCX0lOREVYX1NISUZUIDAKKyNkZWZpbmUgSUdVX0JBQ0tXQVJEX0NPTVBBVElCTEVfU0JfU0VMRUNUICgweDFGPDwxNikKKyNkZWZpbmUgSUdVX0JBQ0tXQVJEX0NPTVBBVElCTEVfU0JfU0VMRUNUX1NISUZUIDE2CisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX1NFR01FTlRfQUNDRVNTICgweDc8PDIxKQorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9TRUdNRU5UX0FDQ0VTU19TSElGVCAyMQorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9CVVBEQVRFICgweDE8PDI0KQorI2RlZmluZSBJR1VfQkFDS1dBUkRfQ09NUEFUSUJMRV9CVVBEQVRFX1NISUZUIDI0CisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX0VOQUJMRV9JTlQgKDB4Mzw8MjUpCisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX0VOQUJMRV9JTlRfU0hJRlQgMjUKKyNkZWZpbmUgSUdVX0JBQ0tXQVJEX0NPTVBBVElCTEVfUkVTRVJWRURfMCAoMHgxRjw8MjcpCisjZGVmaW5lIElHVV9CQUNLV0FSRF9DT01QQVRJQkxFX1JFU0VSVkVEXzBfU0hJRlQgMjcKKwl1MzIgcmVzZXJ2ZWRfMjsKK307CisKKworLyoKKyAqIElHVSBkcml2ZXIgYWNrbm93bGVkZ2VtZW50IHJlZ2lzdGVyCisgKi8KK3N0cnVjdCBpZ3VfcmVndWxhciB7CisJdTMyIHNiX2lkX2FuZF9mbGFnczsKKyNkZWZpbmUgSUdVX1JFR1VMQVJfU0JfSU5ERVggKDB4RkZGRkY8PDApCisjZGVmaW5lIElHVV9SRUdVTEFSX1NCX0lOREVYX1NISUZUIDAKKyNkZWZpbmUgSUdVX1JFR1VMQVJfUkVTRVJWRUQwICgweDE8PDIwKQorI2RlZmluZSBJR1VfUkVHVUxBUl9SRVNFUlZFRDBfU0hJRlQgMjAKKyNkZWZpbmUgSUdVX1JFR1VMQVJfU0VHTUVOVF9BQ0NFU1MgKDB4Nzw8MjEpCisjZGVmaW5lIElHVV9SRUdVTEFSX1NFR01FTlRfQUNDRVNTX1NISUZUIDIxCisjZGVmaW5lIElHVV9SRUdVTEFSX0JVUERBVEUgKDB4MTw8MjQpCisjZGVmaW5lIElHVV9SRUdVTEFSX0JVUERBVEVfU0hJRlQgMjQKKyNkZWZpbmUgSUdVX1JFR1VMQVJfRU5BQkxFX0lOVCAoMHgzPDwyNSkKKyNkZWZpbmUgSUdVX1JFR1VMQVJfRU5BQkxFX0lOVF9TSElGVCAyNQorI2RlZmluZSBJR1VfUkVHVUxBUl9SRVNFUlZFRF8xICgweDE8PDI3KQorI2RlZmluZSBJR1VfUkVHVUxBUl9SRVNFUlZFRF8xX1NISUZUIDI3CisjZGVmaW5lIElHVV9SRUdVTEFSX0NMRUFOVVBfVFlQRSAoMHgzPDwyOCkKKyNkZWZpbmUgSUdVX1JFR1VMQVJfQ0xFQU5VUF9UWVBFX1NISUZUIDI4CisjZGVmaW5lIElHVV9SRUdVTEFSX0NMRUFOVVBfU0VUICgweDE8PDMwKQorI2RlZmluZSBJR1VfUkVHVUxBUl9DTEVBTlVQX1NFVF9TSElGVCAzMAorI2RlZmluZSBJR1VfUkVHVUxBUl9CQ0xFQU5VUCAoMHgxPDwzMSkKKyNkZWZpbmUgSUdVX1JFR1VMQVJfQkNMRUFOVVBfU0hJRlQgMzEKKwl1MzIgcmVzZXJ2ZWRfMjsKK307CisKKy8qCisgKiBJR1UgZHJpdmVyIGFja25vd2xlZGdlbWVudCByZWdpc3RlcgorICovCit1bmlvbiBpZ3VfY29uc3Byb2RfcmVnIHsKKwlzdHJ1Y3QgaWd1X3JlZ3VsYXIgcmVndWxhcjsKKwlzdHJ1Y3QgaWd1X2JhY2t3YXJkX2NvbXBhdGlibGUgYmFja3dhcmRfY29tcGF0aWJsZTsKK307CisKKworLyoKICAqIFBhcnNlciBwYXJzaW5nIGZsYWdzIGZpZWxkCiAgKi8KIHN0cnVjdCBwYXJzaW5nX2ZsYWdzIHsKQEAgLTE0MDIsMTIgKzE1MzIsMTAgQEAKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfRFlOQU1JQ19IQ19TSElGVCAxCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQSAoMHgxPDwyKQogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEFfU0hJRlQgMgotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwzKQotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCi0jZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1MgKDB4MTw8NCkKLSNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDU19TSElGVCA0Ci0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDAgKDB4Nzw8NSkKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA1CisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1MgKDB4MTw8MykKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDU19TSElGVCAzCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDAgKDB4Rjw8NCkKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwogCXU4IGNsaWVudElkOwogCXU4IHNiX2luZGV4X251bWJlcnM7CkBAIC0xNDMwLDEyICsxNTU4LDEwIEBACiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX0RZTkFNSUNfSENfU0hJRlQgMQogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEEgKDB4MTw8MikKICNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDIKLSNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKLSNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMwotI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDQpCi0jZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgNAotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweDc8PDUpCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTICgweDE8PDMpCisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1NfU0hJRlQgMworI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwICgweEY8PDQpCisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTE2IGJkX2J1ZmZfc2l6ZTsKQEAgLTE0NTUsMTEgKzE1ODEsMzYgQEAKIAl1OCBfX2xvY2FsX2JkX3Byb2Q7CiAJdTggX19sb2NhbF9zZ2VfcHJvZDsKICNlbmRpZgotCXUzMiByZXNlcnZlZDsKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgX19zZG1fYmRfZXhwZWN0ZWRfY291bnRlcjsKKwl1OCBjc3Rvcm1fYWdnX2ludDsKKwl1OCBfX2V4cGVjdGVkX2Jkc19vbl9yYW07CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1OCBfX2V4cGVjdGVkX2Jkc19vbl9yYW07CisJdTggY3N0b3JtX2FnZ19pbnQ7CisJdTE2IF9fc2RtX2JkX2V4cGVjdGVkX2NvdW50ZXI7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgX19yaW5nX2RhdGFfcmFtX2FkZHI7CisJdTE2IF9faGNfY3N0b3JtX3JhbV9hZGRyOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IF9faGNfY3N0b3JtX3JhbV9hZGRyOworCXUxNiBfX3JpbmdfZGF0YV9yYW1fYWRkcjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IHJlc2VydmVkMTsKKwl1OCBtYXhfc2dlc19mb3JfcGFja2V0OworCXUxNiBfX2JkX3JpbmdfcmFtX2FkZHI7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgX19iZF9yaW5nX3JhbV9hZGRyOworCXU4IG1heF9zZ2VzX2Zvcl9wYWNrZXQ7CisJdTggcmVzZXJ2ZWQxOworI2VuZGlmCiAJdTMyIGJkX3BhZ2VfYmFzZV9sbzsKIAl1MzIgYmRfcGFnZV9iYXNlX2hpOwogCXUzMiBzZ2VfcGFnZV9iYXNlX2xvOwogCXUzMiBzZ2VfcGFnZV9iYXNlX2hpOworCXN0cnVjdCByZWdwYWlyIHJlc2VydmVkMjsKIH07CiAKIC8qCkBAIC0xNDgyLDggKzE2MzMsOCBAQAogICogTG9jYWwgQkRzIGFuZCBTR0VzIHJpbmdzIChpbiBFVEgpCiAgKi8KIHN0cnVjdCBldGhfbG9jYWxfcnhfcmluZ3MgewotCXN0cnVjdCBldGhfcnhfYmQgX19sb2NhbF9iZF9yaW5nWzE2XTsKLQlzdHJ1Y3QgZXRoX3J4X3NnZSBfX2xvY2FsX3NnZV9yaW5nWzEyXTsKKwlzdHJ1Y3QgZXRoX3J4X2JkIF9fbG9jYWxfYmRfcmluZ1s4XTsKKwlzdHJ1Y3QgZXRoX3J4X3NnZSBfX2xvY2FsX3NnZV9yaW5nWzEwXTsKIH07CiAKIC8qCkBAIC0xNTc1LDEzICsxNzI2LDEzIEBACiAgKi8KIHN0cnVjdCB4c3Rvcm1fZXRoX2FnX2NvbnRleHQgewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBfX2JkX3Byb2Q7CisJdTE2IGFnZ192YWwxOwogCXU4IF9fYWdnX3ZhcnMxOwogCXU4IF9fc3RhdGU7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1OCBfX3N0YXRlOwogCXU4IF9fYWdnX3ZhcnMxOwotCXUxNiBfX2JkX3Byb2Q7CisJdTE2IGFnZ192YWwxOwogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTggY2R1X3Jlc2VydmVkOwpAQCAtMTU5NCw3ICsxNzQ1LDcgQEAKIAl1OCBfX2FnZ192YXJzNDsKIAl1OCBjZHVfcmVzZXJ2ZWQ7CiAjZW5kaWYKLQl1MzIgX19tb3JlX3BhY2tldHNfdG9fc2VuZDsKKwl1MzIgX19iZF9wcm9kOwogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogCXUxNiBfX2FnZ192YXJzNTsKIAl1MTYgX19hZ2dfdmFsNF90aDsKQEAgLTE4NjAsOCArMjAxMSw4IEBACiAjZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19WTEFOX1RBR19TSElGVCAwCiAjZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19JUF9DU1VNICgweDE8PDEpCiAjZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19JUF9DU1VNX1NISUZUIDEKLSNkZWZpbmUgRVRIX1RYX0JEX0ZMQUdTX1RDUF9DU1VNICgweDE8PDIpCi0jZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19UQ1BfQ1NVTV9TSElGVCAyCisjZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19MNF9DU1VNICgweDE8PDIpCisjZGVmaW5lIEVUSF9UWF9CRF9GTEFHU19MNF9DU1VNX1NISUZUIDIKICNkZWZpbmUgRVRIX1RYX0JEX0ZMQUdTX0VORF9CRCAoMHgxPDwzKQogI2RlZmluZSBFVEhfVFhfQkRfRkxBR1NfRU5EX0JEX1NISUZUIDMKICNkZWZpbmUgRVRIX1RYX0JEX0ZMQUdTX1NUQVJUX0JEICgweDE8PDQpCkBAIC0xODc3LDcgKzIwMjgsNyBAQAogLyoKICAqIFRoZSBldGggVHggQnVmZmVyIERlc2NyaXB0b3IKICAqLwotc3RydWN0IGV0aF90eF9iZCB7CitzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkIHsKIAlfX2xlMzIgYWRkcl9sbzsKIAlfX2xlMzIgYWRkcl9oaTsKIAlfX2xlMTYgbmJkOwpAQCAtMTg4NSwxMCArMjAzNiwyMSBAQAogCV9fbGUxNiB2bGFuOwogCXN0cnVjdCBldGhfdHhfYmRfZmxhZ3MgYmRfZmxhZ3M7CiAJdTggZ2VuZXJhbF9kYXRhOwotI2RlZmluZSBFVEhfVFhfQkRfSERSX05CRFMgKDB4M0Y8PDApCi0jZGVmaW5lIEVUSF9UWF9CRF9IRFJfTkJEU19TSElGVCAwCi0jZGVmaW5lIEVUSF9UWF9CRF9FVEhfQUREUl9UWVBFICgweDM8PDYpCi0jZGVmaW5lIEVUSF9UWF9CRF9FVEhfQUREUl9UWVBFX1NISUZUIDYKKyNkZWZpbmUgRVRIX1RYX1NUQVJUX0JEX0hEUl9OQkRTICgweDNGPDwwKQorI2RlZmluZSBFVEhfVFhfU1RBUlRfQkRfSERSX05CRFNfU0hJRlQgMAorI2RlZmluZSBFVEhfVFhfU1RBUlRfQkRfRVRIX0FERFJfVFlQRSAoMHgzPDw2KQorI2RlZmluZSBFVEhfVFhfU1RBUlRfQkRfRVRIX0FERFJfVFlQRV9TSElGVCA2Cit9OworCisvKgorICogVHggcmVndWxhciBCRCBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGV0aF90eF9iZCB7CisJdTMyIGFkZHJfbG87CisJdTMyIGFkZHJfaGk7CisJdTE2IHRvdGFsX3BrdF9ieXRlczsKKwl1MTYgbmJ5dGVzOworCXU4IHJlc2VydmVkWzRdOwogfTsKIAogLyoKQEAgLTE4OTgsOCArMjA2MCw4IEBACiAJdTggZ2xvYmFsX2RhdGE7CiAjZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9JUF9IRFJfU1RBUlRfT0ZGU0VUICgweEY8PDApCiAjZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9JUF9IRFJfU1RBUlRfT0ZGU0VUX1NISUZUIDAKLSNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX0NTX0FOWV9GTEcgKDB4MTw8NCkKLSNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX0NTX0FOWV9GTEdfU0hJRlQgNAorI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfVURQX0NTX0ZMRyAoMHgxPDw0KQorI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfVURQX0NTX0ZMR19TSElGVCA0CiAjZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9QU0VVRE9fQ1NfV0lUSE9VVF9MRU4gKDB4MTw8NSkKICNkZWZpbmUgRVRIX1RYX1BBUlNFX0JEX1BTRVVET19DU19XSVRIT1VUX0xFTl9TSElGVCA1CiAjZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9MTENfU05BUF9FTiAoMHgxPDw2KQpAQCAtMTkyNCwxMCArMjA4NiwxMCBAQAogI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfQ1dSX0ZMRyAoMHgxPDw3KQogI2RlZmluZSBFVEhfVFhfUEFSU0VfQkRfQ1dSX0ZMR19TSElGVCA3CiAJdTggaXBfaGxlbjsKLQlzOCBjc19vZmZzZXQ7CisJczggcmVzZXJ2ZWQ7CiAJX19sZTE2IHRvdGFsX2hsZW47Ci0JX19sZTE2IGxzb19tc3M7CiAJX19sZTE2IHRjcF9wc2V1ZG9fY3N1bTsKKwlfX2xlMTYgbHNvX21zczsKIAlfX2xlMTYgaXBfaWQ7CiAJX19sZTMyIHRjcF9zZW5kX3NlcTsKIH07CkBAIC0xOTM2LDE1ICsyMDk4LDE2IEBACiAgKiBUaGUgbGFzdCBCRCBpbiB0aGUgQkQgbWVtb3J5IHdpbGwgaG9sZCBhIHBvaW50ZXIgdG8gdGhlIG5leHQgQkQgbWVtb3J5CiAgKi8KIHN0cnVjdCBldGhfdHhfbmV4dF9iZCB7Ci0JdTMyIGFkZHJfbG87Ci0JdTMyIGFkZHJfaGk7CisJX19sZTMyIGFkZHJfbG87CisJX19sZTMyIGFkZHJfaGk7CiAJdTggcmVzZXJ2ZWRbOF07CiB9OwogCiAvKgotICogdW5pb24gZm9yIDMgQmQgdHlwZXMKKyAqIHVuaW9uIGZvciA0IEJkIHR5cGVzCiAgKi8KIHVuaW9uIGV0aF90eF9iZF90eXBlcyB7CisJc3RydWN0IGV0aF90eF9zdGFydF9iZCBzdGFydF9iZDsKIAlzdHJ1Y3QgZXRoX3R4X2JkIHJlZ19iZDsKIAlzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkIHBhcnNlX2JkOwogCXN0cnVjdCBldGhfdHhfbmV4dF9iZCBuZXh0X2JkOwpAQCAtMTk3MywxMSArMjEzNiwzNSBAQAogI2RlZmluZSBYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19FTkFCTEVfU0hJRlQgNwogCXUxNiB0eF9iZF9jb25zOwogI2VuZGlmCi0JdTMyIGRiX2RhdGFfYWRkcl9sbzsKLQl1MzIgZGJfZGF0YV9hZGRyX2hpOwotCXUzMiBfX3BrdF9jb25zOwotCXUzMiBfX2dzb19uZXh0OwotCXUzMiBpc19ldGhfY29ubl8xYjsKKwl1MzIgX19yZXNlcnZlZDE7CisJdTMyIF9fcmVzZXJ2ZWQyOworI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXU4IF9fcmFtX2NhY2hlX2luZGV4OworCXU4IF9fZG91YmxlX2J1ZmZlcl9jbGllbnQ7CisJdTE2IF9fcGt0X2NvbnM7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgX19wa3RfY29uczsKKwl1OCBfX2RvdWJsZV9idWZmZXJfY2xpZW50OworCXU4IF9fcmFtX2NhY2hlX2luZGV4OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IF9fc3RhdGlzdGljc19hZGRyZXNzOworCXUxNiBfX2dzb19uZXh0OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IF9fZ3NvX25leHQ7CisJdTE2IF9fc3RhdGlzdGljc19hZGRyZXNzOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTggX19sb2NhbF90eF9iZF9jb25zOworCXU4IHNhZmNfZ3JvdXBfbnVtOworCXU4IHNhZmNfZ3JvdXBfZW47CisJdTggX19pc19ldGhfY29ubjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXU4IF9faXNfZXRoX2Nvbm47CisJdTggc2FmY19ncm91cF9lbjsKKwl1OCBzYWZjX2dyb3VwX251bTsKKwl1OCBfX2xvY2FsX3R4X2JkX2NvbnM7CisjZW5kaWYKIAl1bmlvbiBldGhfdHhfYmRfdHlwZXMgX19iZHNbMTNdOwogfTsKIApAQCAtMjA0Miw5ICsyMjI5LDkgQEAKIAogCiAvKgotICogdXN0b3JtIHN0YXR1cyBibG9jaworICogY3N0b3JtIGRlZmF1bHQgc3RhdHVzIGJsb2NrLCBnZW5lcmF0ZWQgYnkgdXN0b3JtCiAgKi8KLXN0cnVjdCB1c3Rvcm1fZGVmX3N0YXR1c19ibG9jayB7CitzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2tfdSB7CiAJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTXTsKIAlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CkBAIC0yMDUzLDkgKzIyNDAsOSBAQAogfTsKIAogLyoKLSAqIGNzdG9ybSBzdGF0dXMgYmxvY2sKKyAqIGNzdG9ybSBkZWZhdWx0IHN0YXR1cyBibG9jaywgZ2VuZXJhdGVkIGJ5IGNzdG9ybQogICovCi1zdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2sgeworc3RydWN0IGNzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrX2MgewogCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107CiAJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwpAQCAtMjA5MCwxNyArMjI3NywxNyBAQAogICovCiBzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrIHsKIAlzdHJ1Y3QgYXR0ZW5fZGVmX3N0YXR1c19ibG9jayBhdHRlbl9zdGF0dXNfYmxvY2s7Ci0Jc3RydWN0IHVzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHVfZGVmX3N0YXR1c19ibG9jazsKLQlzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2sgY19kZWZfc3RhdHVzX2Jsb2NrOworCXN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9ja191IHVfZGVmX3N0YXR1c19ibG9jazsKKwlzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2tfYyBjX2RlZl9zdGF0dXNfYmxvY2s7CiAJc3RydWN0IHhzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrIHhfZGVmX3N0YXR1c19ibG9jazsKIAlzdHJ1Y3QgdHN0b3JtX2RlZl9zdGF0dXNfYmxvY2sgdF9kZWZfc3RhdHVzX2Jsb2NrOwogfTsKIAogCiAvKgotICogdXN0b3JtIHN0YXR1cyBibG9jaworICogY3N0b3JtIHN0YXR1cyBibG9jaywgZ2VuZXJhdGVkIGJ5IHVzdG9ybQogICovCi1zdHJ1Y3QgdXN0b3JtX3N0YXR1c19ibG9jayB7CitzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9ja191IHsKIAlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107CiAJX19sZTE2IHN0YXR1c19ibG9ja19pbmRleDsKIAl1OCBmdW5jOwpAQCAtMjEwOSw5ICsyMjk2LDkgQEAKIH07CiAKIC8qCi0gKiBjc3Rvcm0gc3RhdHVzIGJsb2NrCisgKiBjc3Rvcm0gc3RhdHVzIGJsb2NrLCBnZW5lcmF0ZWQgYnkgY3N0b3JtCiAgKi8KLXN0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrIHsKK3N0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrX2MgewogCV9fbGUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTXTsKIAlfX2xlMTYgc3RhdHVzX2Jsb2NrX2luZGV4OwogCXU4IGZ1bmM7CkBAIC0yMTIzLDggKzIzMTAsOCBAQAogICogaG9zdCBzdGF0dXMgYmxvY2sKICAqLwogc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrIHsKLQlzdHJ1Y3QgdXN0b3JtX3N0YXR1c19ibG9jayB1X3N0YXR1c19ibG9jazsKLQlzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9jayBjX3N0YXR1c19ibG9jazsKKwlzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9ja191IHVfc3RhdHVzX2Jsb2NrOworCXN0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrX2MgY19zdGF0dXNfYmxvY2s7CiB9OwogCiAKQEAgLTIxNDAsMTUgKzIzMjcsNiBAQAogCiAKIC8qCi0gKiBMMiBkeW5hbWljIGhvc3QgY29hbGVzY2luZyBpbml0IHBhcmFtZXRlcnMKLSAqLwotc3RydWN0IGV0aF9keW5hbWljX2hjX2NvbmZpZyB7Ci0JdTMyIHRocmVzaG9sZFszXTsKLQl1OCBoY190aW1lb3V0WzRdOwotfTsKLQotCi0vKgogICogcmVndWxhciBldGggRlAgQ1FFIHBhcmFtZXRlcnMgc3RydWN0CiAgKi8KIHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSB7CkBAIC0yMzEyLDEyICsyNDkwLDEwIEBACiAKIAogLyoKLSAqIGRvb3JiZWxsIGRhdGEgaW4gaG9zdCBtZW1vcnkKKyAqIGFycmF5IG9mIDEzIGJkcyBhcyBhcHBlYXJzIGluIHRoZSBldGggeHN0b3JtIGNvbnRleHQKICAqLwotc3RydWN0IGV0aF90eF9kYl9kYXRhIHsKLQlfX2xlMzIgcGFja2V0c19wcm9kOwotCV9fbGUxNiBiZHNfcHJvZDsKLQlfX2xlMTYgcmVzZXJ2ZWQ7CitzdHJ1Y3QgZXRoX3R4X2Jkc19hcnJheSB7CisJdW5pb24gZXRoX3R4X2JkX3R5cGVzIGJkc1sxM107CiB9OwogCiAKQEAgLTIzNDUsOCArMjUyMSwxMCBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU1fU0hJRlQgOAogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNICgweDE8PDkpCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU1fU0hJRlQgOQotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4M0Y8PDEwKQotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMTAKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0VOQUJMRV9UUEEgKDB4MTw8MTApCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDEwCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRjw8MTEpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMQogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGNvbmZpZ19mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY0X0NBUEFCSUxJVFkgKDB4MTw8MCkKQEAgLTIzNjUsOCArMjU0MywxMCBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU1fU0hJRlQgOAogI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNICgweDE8PDkpCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU1fU0hJRlQgOQotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4M0Y8PDEwKQotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMTAKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0VOQUJMRV9UUEEgKDB4MTw8MTApCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FTkFCTEVfVFBBX1NISUZUIDEwCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMCAoMHgxRjw8MTEpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JFU0VSVkVEMF9TSElGVCAxMQogCXU4IHJzc19yZXN1bHRfbWFzazsKIAl1OCBsZWFkaW5nX2NsaWVudF9pZDsKICNlbmRpZgpAQCAtMjM3NCwxMSArMjU1NCwzOCBAQAogfTsKIAogLyoKKyAqIFJTUyBpZGlyZWN0aW9uIHRhYmxlIHVwZGF0ZSBjb25maWd1cmF0aW9uCisgKi8KK3N0cnVjdCByc3NfdXBkYXRlX2NvbmZpZyB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHRvZV9yc3NfYml0bWFwOworCXUxNiBmbGFnczsKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfRVRIX1VQREFURV9FTkFCTEUgKDB4MTw8MCkKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfRVRIX1VQREFURV9FTkFCTEVfU0hJRlQgMAorI2RlZmluZSBSU1NfVVBEQVRFX0NPTkZJR19UT0VfVVBEQVRFX0VOQUJMRSAoMHgxPDwxKQorI2RlZmluZSBSU1NfVVBEQVRFX0NPTkZJR19UT0VfVVBEQVRFX0VOQUJMRV9TSElGVCAxCisjZGVmaW5lIF9fUlNTX1VQREFURV9DT05GSUdfUkVTRVJWRUQwICgweDNGRkY8PDIpCisjZGVmaW5lIF9fUlNTX1VQREFURV9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDIKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBmbGFnczsKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfRVRIX1VQREFURV9FTkFCTEUgKDB4MTw8MCkKKyNkZWZpbmUgUlNTX1VQREFURV9DT05GSUdfRVRIX1VQREFURV9FTkFCTEVfU0hJRlQgMAorI2RlZmluZSBSU1NfVVBEQVRFX0NPTkZJR19UT0VfVVBEQVRFX0VOQUJMRSAoMHgxPDwxKQorI2RlZmluZSBSU1NfVVBEQVRFX0NPTkZJR19UT0VfVVBEQVRFX0VOQUJMRV9TSElGVCAxCisjZGVmaW5lIF9fUlNTX1VQREFURV9DT05GSUdfUkVTRVJWRUQwICgweDNGRkY8PDIpCisjZGVmaW5lIF9fUlNTX1VQREFURV9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDIKKwl1MTYgdG9lX3Jzc19iaXRtYXA7CisjZW5kaWYKKwl1MzIgcmVzZXJ2ZWQxOworfTsKKworLyoKICAqIHBhcmFtZXRlcnMgZm9yIGV0aCB1cGRhdGUgcmFtcm9kCiAgKi8KIHN0cnVjdCBldGhfdXBkYXRlX3JhbXJvZF9kYXRhIHsKIAlzdHJ1Y3QgdHN0b3JtX2V0aF9mdW5jdGlvbl9jb21tb25fY29uZmlnIGZ1bmNfY29uZmlnOwogCXU4IGluZGlyZWN0aW9uVGFibGVbMTI4XTsKKwlzdHJ1Y3QgcnNzX3VwZGF0ZV9jb25maWcgcnNzX2NvbmZpZzsKIH07CiAKIApAQCAtMjQyMyw4ICsyNjMwLDkgQEAKICNkZWZpbmUgVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfUkRNQV9NQUNfU0hJRlQgMwogI2RlZmluZSBUU1RPUk1fQ0FNX1RBUkdFVF9UQUJMRV9FTlRSWV9SRVNFUlZFRDAgKDB4Rjw8NCkKICNkZWZpbmUgVFNUT1JNX0NBTV9UQVJHRVRfVEFCTEVfRU5UUllfUkVTRVJWRUQwX1NISUZUIDQKLQl1OCBjbGllbnRfaWQ7CisJdTggcmVzZXJ2ZWQxOwogCXUxNiB2bGFuX2lkOworCXUzMiBjbGllbnRzX2JpdF92ZWN0b3I7CiB9OwogCiAvKgpAQCAtMjQ1Myw3ICsyNjYxLDcgQEAKIAlfX2xlMTYgbXNiX21hY19hZGRyOwogCV9fbGUxNiB2bGFuX2lkOwogCV9fbGUxNiBlMWhvdl9pZDsKLQl1OCBjbGllbnRfaWQ7CisJdTggcmVzZXJ2ZWQwOwogCXU4IGZsYWdzOwogI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUE9SVCAoMHgxPDwwKQogI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUE9SVF9TSElGVCAwCkBAIC0yNDYxLDggKzI2NjksOSBAQAogI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfQUNUSU9OX1RZUEVfU0hJRlQgMQogI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUkRNQV9NQUMgKDB4MTw8MikKICNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX1JETUFfTUFDX1NISUZUIDIKLSNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX1JFU0VSVkVEMCAoMHgxRjw8MykKLSNkZWZpbmUgTUFDX0NPTkZJR1VSQVRJT05fRU5UUllfRTFIX1JFU0VSVkVEMF9TSElGVCAzCisjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9SRVNFUlZFRDEgKDB4MUY8PDMpCisjZGVmaW5lIE1BQ19DT05GSUdVUkFUSU9OX0VOVFJZX0UxSF9SRVNFUlZFRDFfU0hJRlQgMworCXUzMiBjbGllbnRzX2JpdF92ZWN0b3I7CiB9OwogCiAvKgpAQCAtMjQ4NywxMyArMjY5NiwxMyBAQAogICovCiBzdHJ1Y3QgdHN0b3JtX2V0aF9jbGllbnRfY29uZmlnIHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1OCBtYXhfc2dlc19mb3JfcGFja2V0OworCXU4IHJlc2VydmVkMDsKIAl1OCBzdGF0aXN0aWNzX2NvdW50ZXJfaWQ7CiAJdTE2IG10dTsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXUxNiBtdHU7CiAJdTggc3RhdGlzdGljc19jb3VudGVyX2lkOwotCXU4IG1heF9zZ2VzX2Zvcl9wYWNrZXQ7CisJdTggcmVzZXJ2ZWQwOwogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCiAJdTE2IGRyb3BfZmxhZ3M7CkBAIC0yNTA1LDggKzI3MTQsOCBAQAogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9UVEwwX1NISUZUIDIKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfVURQX0NTX0VSUiAoMHgxPDwzKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9VRFBfQ1NfRVJSX1NISUZUIDMKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxICgweEZGRjw8NCkKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQxX1NISUZUIDQKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQyICgweEZGRjw8NCkKKyNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQyX1NISUZUIDQKIAl1MTYgY29uZmlnX2ZsYWdzOwogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFICgweDE8PDApCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEVfU0hJRlQgMApAQCAtMjUxNCwxMCArMjcyMyw4IEBACiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFX1NISUZUIDEKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDIpCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAyCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHhGRkY8PDQpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMSAoMHgxRkZGPDwzKQorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDFfU0hJRlQgMwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGNvbmZpZ19mbGFnczsKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRSAoMHgxPDwwKQpAQCAtMjUyNiwxMCArMjczMyw4IEBACiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFX1NISUZUIDEKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDIpCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAyCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHhGRkY8PDQpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMSAoMHgxRkZGPDwzKQorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDFfU0hJRlQgMwogCXUxNiBkcm9wX2ZsYWdzOwogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9JUF9DU19FUlIgKDB4MTw8MCkKICNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0RST1BfSVBfQ1NfRVJSX1NISUZUIDAKQEAgLTI1MzksOCArMjc0NCw4IEBACiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1RUTDBfU0hJRlQgMgogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9VRFBfQ1NfRVJSICgweDE8PDMpCiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX1VEUF9DU19FUlJfU0hJRlQgMwotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDEgKDB4RkZGPDw0KQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDFfU0hJRlQgNAorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDIgKDB4RkZGPDw0KQorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDJfU0hJRlQgNAogI2VuZGlmCiB9OwogCkBAIC0yNjYzLDcgKzI4NjgsNiBAQAogCXUzMiByc190aHJlc2hvbGQ7CiB9OwogCi0KIC8qCiAgKiBwZXItcG9ydCBmYWlybmVzcyB2YXJpYWJsZXMKICAqLwpAQCAtMjY3Myw3ICsyODc3LDYgQEAKIAl1MzIgZmFpcm5lc3NfdGltZW91dDsKIH07CiAKLQogLyoKICAqIHBlci1wb3J0IFNBRkMgdmFyaWFibGVzCiAgKi8KQEAgLTI2OTAsNyArMjg5Myw2IEBACiAJdTE2IGNvc190b19wYXVzZV9tYXNrW05VTV9PRl9TQUZDX0JJVFNdOwogfTsKIAotCiAvKgogICogUGVyLXBvcnQgY29uZ2VzdGlvbiBtYW5hZ2VtZW50IHZhcmlhYmxlcwogICovCkBAIC0yNzAzLDExICsyOTA1LDIzIEBACiAKIAogLyoKKyAqIER5bmFtaWMgaG9zdCBjb2FsZXNjaW5nIGluaXQgcGFyYW1ldGVycworICovCitzdHJ1Y3QgZHluYW1pY19oY19jb25maWcgeworCXUzMiB0aHJlc2hvbGRbM107CisJdTggc2hpZnRfcGVyX3Byb3RvY29sW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107CisJdTggaGNfdGltZW91dDBbSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTXTsKKwl1OCBoY190aW1lb3V0MVtIQ19VU1RPUk1fU0JfTlVNX0lORElDRVNdOworCXU4IGhjX3RpbWVvdXQyW0hDX1VTVE9STV9TQl9OVU1fSU5ESUNFU107CisJdTggaGNfdGltZW91dDNbSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTXTsKK307CisKKworLyoKICAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgWHN0b3JtIChwZXIgY2xpZW50KQogICovCiBzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgewotCXN0cnVjdCByZWdwYWlyIHRvdGFsX3NlbnRfYnl0ZXM7Ci0JX19sZTMyIHRvdGFsX3NlbnRfcGt0czsKKwlfX2xlMzIgcmVzZXJ2ZWQwOwogCV9fbGUzMiB1bmljYXN0X3BrdHNfc2VudDsKIAlzdHJ1Y3QgcmVncGFpciB1bmljYXN0X2J5dGVzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgbXVsdGljYXN0X2J5dGVzX3NlbnQ7CkBAIC0yNzE1LDExICsyOTI5LDEwIEBACiAJX19sZTMyIGJyb2FkY2FzdF9wa3RzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgYnJvYWRjYXN0X2J5dGVzX3NlbnQ7CiAJX19sZTE2IHN0YXRzX2NvdW50ZXI7Ci0JX19sZTE2IHJlc2VydmVkMDsKLQlfX2xlMzIgcmVzZXJ2ZWQxOworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIHJlc2VydmVkMjsKIH07CiAKLQogLyoKICAqIENvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgWHN0b3JtIChwZXIgcG9ydCkKICAqLwpAQCAtMjcyNyw3ICsyOTQwLDYgQEAKICBzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgY2xpZW50X3N0YXRpc3RpY3NbTUFYX1hfU1RBVF9DT1VOVEVSX0lEXTsKIH07CiAKLQogLyoKICAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgVHN0b3JtIChwZXIgcG9ydCkKICAqLwpAQCAtMjczOCwxOSArMjk1MCwxNiBAQAogCV9fbGUzMiBtYWNfZGlzY2FyZDsKIH07CiAKLQogLyoKICAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgVHN0b3JtIChwZXIgY2xpZW50KQogICovCiBzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgewotCXN0cnVjdCByZWdwYWlyIHRvdGFsX3Jjdl9ieXRlczsKIAlzdHJ1Y3QgcmVncGFpciByY3ZfdW5pY2FzdF9ieXRlczsKIAlzdHJ1Y3QgcmVncGFpciByY3ZfYnJvYWRjYXN0X2J5dGVzOwogCXN0cnVjdCByZWdwYWlyIHJjdl9tdWx0aWNhc3RfYnl0ZXM7CiAJc3RydWN0IHJlZ3BhaXIgcmN2X2Vycm9yX2J5dGVzOwogCV9fbGUzMiBjaGVja3N1bV9kaXNjYXJkOwogCV9fbGUzMiBwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZDsKLQlfX2xlMzIgdG90YWxfcmN2X3BrdHM7CiAJX19sZTMyIHJjdl91bmljYXN0X3BrdHM7CiAJX19sZTMyIHJjdl9icm9hZGNhc3RfcGt0czsKIAlfX2xlMzIgcmN2X211bHRpY2FzdF9wa3RzOwpAQCAtMjc1OCw3ICsyOTY3LDYgQEAKIAlfX2xlMzIgdHRsMF9kaXNjYXJkOwogCV9fbGUxNiBzdGF0c19jb3VudGVyOwogCV9fbGUxNiByZXNlcnZlZDA7Ci0JX19sZTMyIHJlc2VydmVkMTsKIH07CiAKIC8qCkBAIC0yODYxLDYgKzMwNjksMTUgQEAKIAogCiAvKgorICogVGhlIHNlbmQgcXVldWUgZWxlbWVudAorICovCitzdHJ1Y3QgcHJvdG9jb2xfY29tbW9uX3NwZSB7CisJc3RydWN0IHNwZV9oZHIgaGRyOworCXN0cnVjdCByZWdwYWlyIHBoeV9hZGRyZXNzOworfTsKKworCisvKgogICogYSBzaW5nbGUgcmF0ZSBzaGFwaW5nIGNvdW50ZXIuIGNhbiBiZSB1c2VkIGFzIHByb3RvY29sIG9yIHZuaWMgY291bnRlcgogICovCiBzdHJ1Y3QgcmF0ZV9zaGFwaW5nX2NvdW50ZXIgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCmluZGV4IDNiYTRkODguLjY1YjI2Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKQEAgLTE1LDI0ICsxNSwxMSBAQAogI2lmbmRlZiBCTlgyWF9JTklUX0gKICNkZWZpbmUgQk5YMlhfSU5JVF9ICiAKLSNkZWZpbmUgQ09NTU9OCQkJCTB4MQotI2RlZmluZSBQT1JUMAkJCQkweDIKLSNkZWZpbmUgUE9SVDEJCQkJMHg0Ci0KLSNkZWZpbmUgSU5JVF9FTVVMQVRJT04JCQkweDEKLSNkZWZpbmUgSU5JVF9GUEdBCQkJMHgyCi0jZGVmaW5lIElOSVRfQVNJQwkJCTB4NAotI2RlZmluZSBJTklUX0hBUkRXQVJFCQkJMHg3Ci0KLSNkZWZpbmUgVFNUT1JNX0lOVE1FTV9BRERSCQlUU0VNX1JFR19GQVNUX01FTU9SWQotI2RlZmluZSBDU1RPUk1fSU5UTUVNX0FERFIJCUNTRU1fUkVHX0ZBU1RfTUVNT1JZCi0jZGVmaW5lIFhTVE9STV9JTlRNRU1fQUREUgkJWFNFTV9SRUdfRkFTVF9NRU1PUlkKLSNkZWZpbmUgVVNUT1JNX0lOVE1FTV9BRERSCQlVU0VNX1JFR19GQVNUX01FTU9SWQogLyogUkFNMCBzaXplIGluIGJ5dGVzICovCiAjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxCQkweDU4MDAKICNkZWZpbmUgU1RPUk1fSU5UTUVNX1NJWkVfRTFICQkweDEwMDAwCi0jZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFKGJwKQkoKENISVBfSVNfRTFIKGJwKSA/IFNUT1JNX0lOVE1FTV9TSVpFX0UxSCA6IFwKLQkJCQkJCSAgICBTVE9STV9JTlRNRU1fU0laRV9FMSkgLyA0KQorI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRShicCkgKChDSElQX0lTX0UxKGJwKSA/IFNUT1JNX0lOVE1FTV9TSVpFX0UxIDogXAorCQkJCQkJICAgIFNUT1JNX0lOVE1FTV9TSVpFX0UxSCkgLyA0KQogCiAKIC8qIEluaXQgb3BlcmF0aW9uIHR5cGVzIGFuZCBzdHJ1Y3R1cmVzICovCkBAIC01Myw2NSArNDAsNjggQEAKICNkZWZpbmUgT1BfV1JfQVNJQwkJMHhjIC8qIHdyaXRlIHNpbmdsZSByZWdpc3RlciBvbiBBU0lDICovCiAKIC8qIEluaXQgc3RhZ2VzICovCi0jZGVmaW5lIENPTU1PTl9TVEFHRSAgICAgICAgICAgIDAKLSNkZWZpbmUgUE9SVDBfU1RBR0UgICAgIAkxCi0jZGVmaW5lIFBPUlQxX1NUQUdFICAgICAJMgotLyogTmV2ZXIgcmVvcmRlciBGVU5DeCBzdGFnZXMgISEhICovCi0jZGVmaW5lIEZVTkMwX1NUQUdFICAgICAJMwotI2RlZmluZSBGVU5DMV9TVEFHRSAgICAgCTQKLSNkZWZpbmUgRlVOQzJfU1RBR0UgICAgIAk1Ci0jZGVmaW5lIEZVTkMzX1NUQUdFICAgICAJNgotI2RlZmluZSBGVU5DNF9TVEFHRSAgICAgCTcKLSNkZWZpbmUgRlVOQzVfU1RBR0UgICAgIAk4Ci0jZGVmaW5lIEZVTkM2X1NUQUdFICAgICAJOQotI2RlZmluZSBGVU5DN19TVEFHRSAgICAgCTEwCi0jZGVmaW5lIFNUQUdFX0lEWF9NQVggICAJMTEKKy8qIE5ldmVyIHJlb3JkZXIgc3RhZ2VzICEhISAqLworI2RlZmluZSBDT01NT05fU1RBR0UJCTAKKyNkZWZpbmUgUE9SVDBfU1RBR0UJCTEKKyNkZWZpbmUgUE9SVDFfU1RBR0UJCTIKKyNkZWZpbmUgRlVOQzBfU1RBR0UJCTMKKyNkZWZpbmUgRlVOQzFfU1RBR0UJCTQKKyNkZWZpbmUgRlVOQzJfU1RBR0UJCTUKKyNkZWZpbmUgRlVOQzNfU1RBR0UJCTYKKyNkZWZpbmUgRlVOQzRfU1RBR0UJCTcKKyNkZWZpbmUgRlVOQzVfU1RBR0UJCTgKKyNkZWZpbmUgRlVOQzZfU1RBR0UJCTkKKyNkZWZpbmUgRlVOQzdfU1RBR0UJCTEwCisjZGVmaW5lIFNUQUdFX0lEWF9NQVgJCTExCiAKLSNkZWZpbmUgU1RBR0VfU1RBUlQgICAgIAkwCi0jZGVmaW5lIFNUQUdFX0VORCAgICAgICAJMQorI2RlZmluZSBTVEFHRV9TVEFSVAkJMAorI2RlZmluZSBTVEFHRV9FTkQJCTEKIAogCiAvKiBJbmRpY2VzIG9mIGJsb2NrcyAqLwotI2RlZmluZSBQUlNfQkxPQ0sgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNSQ0hfQkxPQ0sgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVFNETV9CTE9DSyAgICAgICAgICAgICAgMgotI2RlZmluZSBUQ01fQkxPQ0sgICAgICAgICAgICAgICAzCi0jZGVmaW5lIEJSQjFfQkxPQ0sgICAgICAgICAgICAgIDQKLSNkZWZpbmUgVFNFTV9CTE9DSyAgICAgICAgICAgICAgNQotI2RlZmluZSBQWFBDU19CTE9DSyAgICAgICAgICAgICA2Ci0jZGVmaW5lIEVNQUMwX0JMT0NLICAgICAgICAgICAgIDcKLSNkZWZpbmUgRU1BQzFfQkxPQ0sgICAgICAgICAgICAgOAotI2RlZmluZSBEQlVfQkxPQ0sgICAgICAgICAgICAgICA5Ci0jZGVmaW5lIE1JU0NfQkxPQ0sgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIERCR19CTE9DSyAgICAgICAgICAgICAgIDExCi0jZGVmaW5lIE5JR19CTE9DSyAgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIE1DUF9CTE9DSyAgICAgICAgICAgICAgIDEzCi0jZGVmaW5lIFVQQl9CTE9DSyAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIENTRE1fQkxPQ0sgICAgICAgICAgICAgIDE1Ci0jZGVmaW5lIFVTRE1fQkxPQ0sgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIENDTV9CTE9DSyAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFVDTV9CTE9DSyAgICAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFVTRU1fQkxPQ0sgICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIENTRU1fQkxPQ0sgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIFhQQl9CTE9DSyAgICAgICAgICAgICAgIDIxCi0jZGVmaW5lIERRX0JMT0NLICAgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIFRJTUVSU19CTE9DSyAgICAgICAgICAgIDIzCi0jZGVmaW5lIFhTRE1fQkxPQ0sgICAgICAgICAgICAgIDI0Ci0jZGVmaW5lIFFNX0JMT0NLICAgICAgICAgICAgICAgIDI1Ci0jZGVmaW5lIFBCRl9CTE9DSyAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIFhDTV9CTE9DSyAgICAgICAgICAgICAgIDI3Ci0jZGVmaW5lIFhTRU1fQkxPQ0sgICAgICAgICAgICAgIDI4Ci0jZGVmaW5lIENEVV9CTE9DSyAgICAgICAgICAgICAgIDI5Ci0jZGVmaW5lIERNQUVfQkxPQ0sgICAgICAgICAgICAgIDMwCi0jZGVmaW5lIFBYUF9CTE9DSyAgICAgICAgICAgICAgIDMxCi0jZGVmaW5lIENGQ19CTE9DSyAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIEhDX0JMT0NLICAgICAgICAgICAgICAgIDMzCi0jZGVmaW5lIFBYUDJfQkxPQ0sgICAgICAgICAgICAgIDM0Ci0jZGVmaW5lIE1JU0NfQUVVX0JMT0NLICAgICAgICAgIDM1CisjZGVmaW5lIFBSU19CTE9DSwkJMAorI2RlZmluZSBTUkNIX0JMT0NLCQkxCisjZGVmaW5lIFRTRE1fQkxPQ0sJCTIKKyNkZWZpbmUgVENNX0JMT0NLCQkzCisjZGVmaW5lIEJSQjFfQkxPQ0sJCTQKKyNkZWZpbmUgVFNFTV9CTE9DSwkJNQorI2RlZmluZSBQWFBDU19CTE9DSwkJNgorI2RlZmluZSBFTUFDMF9CTE9DSwkJNworI2RlZmluZSBFTUFDMV9CTE9DSwkJOAorI2RlZmluZSBEQlVfQkxPQ0sJCTkKKyNkZWZpbmUgTUlTQ19CTE9DSwkJMTAKKyNkZWZpbmUgREJHX0JMT0NLCQkxMQorI2RlZmluZSBOSUdfQkxPQ0sJCTEyCisjZGVmaW5lIE1DUF9CTE9DSwkJMTMKKyNkZWZpbmUgVVBCX0JMT0NLCQkxNAorI2RlZmluZSBDU0RNX0JMT0NLCQkxNQorI2RlZmluZSBVU0RNX0JMT0NLCQkxNgorI2RlZmluZSBDQ01fQkxPQ0sJCTE3CisjZGVmaW5lIFVDTV9CTE9DSwkJMTgKKyNkZWZpbmUgVVNFTV9CTE9DSwkJMTkKKyNkZWZpbmUgQ1NFTV9CTE9DSwkJMjAKKyNkZWZpbmUgWFBCX0JMT0NLCQkyMQorI2RlZmluZSBEUV9CTE9DSwkJMjIKKyNkZWZpbmUgVElNRVJTX0JMT0NLCQkyMworI2RlZmluZSBYU0RNX0JMT0NLCQkyNAorI2RlZmluZSBRTV9CTE9DSwkJMjUKKyNkZWZpbmUgUEJGX0JMT0NLCQkyNgorI2RlZmluZSBYQ01fQkxPQ0sJCTI3CisjZGVmaW5lIFhTRU1fQkxPQ0sJCTI4CisjZGVmaW5lIENEVV9CTE9DSwkJMjkKKyNkZWZpbmUgRE1BRV9CTE9DSwkJMzAKKyNkZWZpbmUgUFhQX0JMT0NLCQkzMQorI2RlZmluZSBDRkNfQkxPQ0sJCTMyCisjZGVmaW5lIEhDX0JMT0NLCQkzMworI2RlZmluZSBQWFAyX0JMT0NLCQkzNAorI2RlZmluZSBNSVNDX0FFVV9CTE9DSwkJMzUKKyNkZWZpbmUgUEdMVUVfQl9CTE9DSwkJMzYKKyNkZWZpbmUgSUdVX0JMT0NLCQkzNworCiAKIC8qIFJldHVybnMgdGhlIGluZGV4IG9mIHN0YXJ0IG9yIGVuZCBvZiBhIHNwZWNpZmljIGJsb2NrIHN0YWdlIGluIG9wcyBhcnJheSovCiAjZGVmaW5lIEJMT0NLX09QU19JRFgoYmxvY2ssIHN0YWdlLCBlbmQpIFwKLSAgICAgICAoMiooKChibG9jaykqU1RBR0VfSURYX01BWCkgKyAoc3RhZ2UpKSArIChlbmQpKQorCQkJKDIqKCgoYmxvY2spKlNUQUdFX0lEWF9NQVgpICsgKHN0YWdlKSkgKyAoZW5kKSkKIAogCiBzdHJ1Y3QgcmF3X29wIHsKQEAgLTE1OCwxOTkgKzE0OCw1IEBACiAJc3RydWN0IHJhd19vcAkJcmF3OwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogUFhQCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIFRoaXMgY29kZSBjb25maWd1cmVzIHRoZSBQQ0kgcmVhZC93cml0ZSBhcmJpdGVyCi0gKiB3aGljaCBpbXBsZW1lbnRzIGEgd2VpZ2h0ZWQgcm91bmQgcm9iaW4KLSAqIGJldHdlZW4gdGhlIHZpcnR1YWwgcXVldWVzIGluIHRoZSBjaGlwLgotICoKLSAqIFRoZSB2YWx1ZXMgd2VyZSBkZXJpdmVkIGZvciBlYWNoIFBDSSBtYXggcGF5bG9hZCBhbmQgbWF4IHJlcXVlc3Qgc2l6ZS4KLSAqIHNpbmNlIG1heCBwYXlsb2FkIGFuZCBtYXggcmVxdWVzdCBzaXplIGFyZSBvbmx5IGtub3duIGF0IHJ1biB0aW1lLAotICogdGhpcyBpcyBkb25lIGFzIGEgc2VwYXJhdGUgaW5pdCBzdGFnZS4KLSAqLwotCi0jZGVmaW5lIE5VTV9XUl9RCQkJMTMKLSNkZWZpbmUgTlVNX1JEX1EJCQkyOQotI2RlZmluZSBNQVhfUkRfT1JECQkJMwotI2RlZmluZSBNQVhfV1JfT1JECQkJMgotCi0vKiBjb25maWd1cmF0aW9uIGZvciBvbmUgYXJiaXRlciBxdWV1ZSAqLwotc3RydWN0IGFyYl9saW5lIHsKLQlpbnQgbDsKLQlpbnQgYWRkOwotCWludCB1Ym91bmQ7Ci19OwotCi0vKiBkZXJpdmVkIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggcmVhZCBxdWV1ZSBmb3IgZWFjaCBtYXggcmVxdWVzdCBzaXplICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHJlYWRfYXJiX2RhdGFbTlVNX1JEX1FdW01BWF9SRF9PUkQgKyAxXSA9IHsKLS8qIDEgKi8JeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgMjV9LCB7MzIsIDY0LCAyNX0sIHs2NCwgNjQsIDQxfSB9LAotCXsgezQsIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0sICB7NCwgIDgsICA0fSAgfSwKLQl7IHs0LCAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9LCAgezQsICAzLCAgM30gIH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0sIHsxNiwgMywgIDExfSB9LAotCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCi0vKiAxMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLS8qIDIwICoveyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAotCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKLQl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCi0JeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0sIHs2NCwgNjQsIDEyMH0gfQotfTsKLQotLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHdyaXRlIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2RhdGFbTlVNX1dSX1FdW01BWF9XUl9PUkQgKyAxXSA9IHsKLS8qIDEgKi8JeyB7NCwgNiwgIDN9LCAgezQsICA2LCAgM30sICB7NCwgIDYsICAzfSB9LAotCXsgezQsIDIsICAzfSwgIHs0LCAgMiwgIDN9LCAgezQsICAyLCAgM30gfSwKLQl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHsxNiwgMiwgIDExfSB9LAotCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCi0JeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKLQl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAotCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9IH0sCi0JeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKLQl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHsxNiwgMiwgIDExfSB9LAotLyogMTAgKi97IHs4LCA5LCAgNn0sICB7MTYsIDksICAxMX0sIHszMiwgOSwgIDIxfSB9LAotCXsgezgsIDQ3LCAxOX0sIHsxNiwgNDcsIDE5fSwgezMyLCA0NywgMjF9IH0sCi0JeyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MTYsIDksICAxMX0gfSwKLQl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCA0MX0sIHszMiwgNjQsIDgxfSB9Ci19OwotCi0vKiByZWdpc3RlciBhZGRyZXNzZXMgZm9yIHJlYWQgcXVldWVzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHJlYWRfYXJiX2FkZHJbTlVNX1JEX1EtMV0gPSB7Ci0vKiAxICovCXtQWFAyX1JFR19SUV9CV19SRF9MMCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMCwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMH0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjF9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMiwgUFhQMl9SRUdfUFNXUlFfQldfQUREMiwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIyfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDMsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDMsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCM30sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0w0LCBQWFAyX1JFR19SUV9CV19SRF9BREQ0LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQ0fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDUsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDUsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDV9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MNiwgUFhQMl9SRUdfUFNXUlFfQldfQURENiwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUI2fSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDcsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDcsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCN30sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w4LCBQWFAyX1JFR19QU1dSUV9CV19BREQ4LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjh9LAotLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDksIFBYUDJfUkVHX1BTV1JRX0JXX0FERDksCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCOX0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0wxMCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTAsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMTEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDExLAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjExfSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDEyLCBQWFAyX1JFR19SUV9CV19SRF9BREQxMiwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTJ9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMTMsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDEzLAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxM30sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wxNCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTQsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE0fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDE1LCBQWFAyX1JFR19SUV9CV19SRF9BREQxNSwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTV9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMTYsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE2LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxNn0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wxNywgUFhQMl9SRUdfUlFfQldfUkRfQUREMTcsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE3fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDE4LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOCwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTh9LAotLyogMjAgKi97UFhQMl9SRUdfUlFfQldfUkRfTDE5LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOSwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTl9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMjAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDIwLAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyMH0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wyMiwgUFhQMl9SRUdfUlFfQldfUkRfQUREMjIsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDIyfSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDIzLCBQWFAyX1JFR19SUV9CV19SRF9BREQyMywKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjN9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMjQsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDI0LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyNH0sCi0Je1BYUDJfUkVHX1JRX0JXX1JEX0wyNSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMjUsCi0JCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDI1fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDI2LCBQWFAyX1JFR19SUV9CV19SRF9BREQyNiwKLQkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjZ9LAotCXtQWFAyX1JFR19SUV9CV19SRF9MMjcsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDI3LAotCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyN30sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0wyOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMjgsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCMjh9Ci19OwotCi0vKiByZWdpc3RlciBhZGRyZXNzZXMgZm9yIHdyaXRlIHF1ZXVlcyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSB3cml0ZV9hcmJfYWRkcltOVU1fV1JfUS0xXSA9IHsKLS8qIDEgKi8Je1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjF9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMiwgUFhQMl9SRUdfUFNXUlFfQldfQUREMiwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIyfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDMsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDMsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCM30sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w2LCBQWFAyX1JFR19QU1dSUV9CV19BREQ2LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjZ9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MNywgUFhQMl9SRUdfUFNXUlFfQldfQURENywKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUI3fSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDgsCi0JCVBYUDJfUkVHX1BTV1JRX0JXX1VCOH0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjl9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MMTAsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEwLAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjEwfSwKLQl7UFhQMl9SRUdfUFNXUlFfQldfTDExLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMSwKLQkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMX0sCi0vKiAxMCAqL3tQWFAyX1JFR19QU1dSUV9CV19MMjgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDI4LAotCQlQWFAyX1JFR19QU1dSUV9CV19VQjI4fSwKLQl7UFhQMl9SRUdfUlFfQldfV1JfTDI5LCBQWFAyX1JFR19SUV9CV19XUl9BREQyOSwKLQkJUFhQMl9SRUdfUlFfQldfV1JfVUJPVU5EMjl9LAotCXtQWFAyX1JFR19SUV9CV19XUl9MMzAsIFBYUDJfUkVHX1JRX0JXX1dSX0FERDMwLAotCQlQWFAyX1JFR19SUV9CV19XUl9VQk9VTkQzMH0KLX07Ci0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ0RVCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIENEVV9SRUdJT05fTlVNQkVSX1hDTV9BRwkyCi0jZGVmaW5lIENEVV9SRUdJT05fTlVNQkVSX1VDTV9BRwk0Ci0KLS8qKgotICogU3RyaW5nLXRvLWNvbXByZXNzIFszMTo4XSA9IENJRCAoYWxsIDI0IGJpdHMpCi0gKiBTdHJpbmctdG8tY29tcHJlc3MgWzc6NF0gPSBSZWdpb24KLSAqIFN0cmluZy10by1jb21wcmVzcyBbMzowXSA9IFR5cGUKLSAqLwotI2RlZmluZSBDRFVfVkFMSURfREFUQShfY2lkLCBfcmVnaW9uLCBfdHlwZSkgXAotCQkoKChfY2lkKSA8PCA4KSB8ICgoKF9yZWdpb24pICYgMHhmKSA8PCA0KSB8ICgoKF90eXBlKSAmIDB4ZikpKQotI2RlZmluZSBDRFVfQ1JDOChfY2lkLCBfcmVnaW9uLCBfdHlwZSkgXAotCQkJY2FsY19jcmM4KENEVV9WQUxJRF9EQVRBKF9jaWQsIF9yZWdpb24sIF90eXBlKSwgMHhmZikKLSNkZWZpbmUgQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShfY2lkLCBfcmVnaW9uLCBfdHlwZSkgXAotCQkJKDB4ODAgfCAoQ0RVX0NSQzgoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpICYgMHg3ZikpCi0jZGVmaW5lIENEVV9SU1JWRF9WQUxVRV9UWVBFX0IoX2NyYywgX3R5cGUpIFwKLQkoMHg4MCB8ICgoX3R5cGUpICYgMHhmIDw8IDMpIHwgKENEVV9DUkM4KF9jaWQsIF9yZWdpb24sIF90eXBlKSAmIDB4NykpCi0jZGVmaW5lIENEVV9SU1JWRF9JTlZBTElEQVRFX0NPTlRFWFRfVkFMVUUoX3ZhbCkJKChfdmFsKSAmIH4weDgwKQotCi0KLS8qIHJlZ2lzdGVycyBhZGRyZXNzZXMgYXJlIG5vdCBpbiBvcmRlcgotICAgc28gdGhlc2UgYXJyYXlzIGhlbHAgc2ltcGxpZnkgdGhlIGNvZGUgKi8KLXN0YXRpYyBjb25zdCBpbnQgY21fYmxvY2tzWzldID0gewotCU1JU0NfQkxPQ0ssIFRDTV9CTE9DSywgIFVDTV9CTE9DSywgIENDTV9CTE9DSywgWENNX0JMT0NLLAotCVRTRU1fQkxPQ0ssIFVTRU1fQkxPQ0ssIENTRU1fQkxPQ0ssIFhTRU1fQkxPQ0sKLX07Ci0KICNlbmRpZiAvKiBCTlgyWF9JTklUX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdF9vcHMuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfb3BzLmgKaW5kZXggMzI1NTJiOS4uMzhiOTcwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdF9vcHMuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9pbml0X29wcy5oCkBAIC0xMSw4NSArMTEsNjggQEAKICAqIE1haW50YWluZWQgYnk6IEVpbG9uIEdyZWVuc3RlaW4gPGVpbG9uZ0Bicm9hZGNvbS5jb20+CiAgKiBXcml0dGVuIGJ5OiBWbGFkaXNsYXYgWm9sb3Rhcm92IDx2bGFkekBicm9hZGNvbS5jb20+CiAgKi8KKwogI2lmbmRlZiBCTlgyWF9JTklUX09QU19ICiAjZGVmaW5lIEJOWDJYX0lOSVRfT1BTX0gKIAotc3RhdGljIHZvaWQgYm54MnhfcmVnX3dyX2luZChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIHZhbCk7CiBzdGF0aWMgaW50IGJueDJ4X2d1bnppcChzdHJ1Y3QgYm54MnggKmJwLCBjb25zdCB1OCAqemJ1ZiwgaW50IGxlbik7CiAKKwogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9zdHJfd3Ioc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGNvbnN0IHUzMiAqZGF0YSwKIAkJCSAgICAgIHUzMiBsZW4pCiB7Ci0JaW50IGk7CisJdTMyIGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAJCVJFR19XUihicCwgYWRkciArIGkqNCwgZGF0YVtpXSk7Ci0JCWlmICghKGkgJSAxMDAwMCkpIHsKLQkJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKLQkJCWNwdV9yZWxheCgpOwotCQl9Ci0JfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2luZF93cihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgY29uc3QgdTMyICpkYXRhLAotCQkJICAgICAgdTE2IGxlbikKKwkJCSAgICAgIHUzMiBsZW4pCiB7Ci0JaW50IGk7CisJdTMyIGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAJCVJFR19XUl9JTkQoYnAsIGFkZHIgKyBpKjQsIGRhdGFbaV0pOwotCQlpZiAoIShpICUgMTAwMDApKSB7Ci0JCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JCQljcHVfcmVsYXgoKTsKLQkJfQotCX0KIH0KIAogc3RhdGljIHZvaWQgYm54Mnhfd3JpdGVfYmlnX2J1ZihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIGxlbikKIHsKLQlpbnQgb2Zmc2V0ID0gMDsKLQotCWlmIChicC0+ZG1hZV9yZWFkeSkgewotCQl3aGlsZSAobGVuID4gRE1BRV9MRU4zMl9XUl9NQVgpIHsKLQkJCWJueDJ4X3dyaXRlX2RtYWUoYnAsIGJwLT5ndW56aXBfbWFwcGluZyArIG9mZnNldCwKLQkJCQkJIGFkZHIgKyBvZmZzZXQsIERNQUVfTEVOMzJfV1JfTUFYKTsKLQkJCW9mZnNldCArPSBETUFFX0xFTjMyX1dSX01BWCAqIDQ7Ci0JCQlsZW4gLT0gRE1BRV9MRU4zMl9XUl9NQVg7Ci0JCX0KLQkJYm54Mnhfd3JpdGVfZG1hZShicCwgYnAtPmd1bnppcF9tYXBwaW5nICsgb2Zmc2V0LAotCQkJCSBhZGRyICsgb2Zmc2V0LCBsZW4pOwotCX0gZWxzZQotCQlibngyeF9pbml0X3N0cl93cihicCwgYWRkciwgYnAtPmd1bnppcF9idWYsIGxlbik7CisJaWYgKGJwLT5kbWFlX3JlYWR5KQorCQlibngyeF93cml0ZV9kbWFlX3BoeXNfbGVuKGJwLCBHVU5aSVBfUEhZUyhicCksIGFkZHIsIGxlbik7CisJZWxzZQorCQlibngyeF9pbml0X3N0cl93cihicCwgYWRkciwgR1VOWklQX0JVRihicCksIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfZmlsbChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgaW50IGZpbGwsIHUzMiBsZW4pCiB7Ci0JdTMyIGJ1Zl9sZW4gPSAoKChsZW4gKiA0KSA+IEZXX0JVRl9TSVpFKSA/IEZXX0JVRl9TSVpFIDogKGxlbiAqIDQpKTsKLQl1MzIgYnVmX2xlbjMyID0gYnVmX2xlbiAvIDQ7Ci0JaW50IGk7CisJdTMyIGJ1Zl9sZW4gPSAoKChsZW4qNCkgPiBGV19CVUZfU0laRSkgPyBGV19CVUZfU0laRSA6IChsZW4qNCkpOworCXUzMiBidWZfbGVuMzIgPSBidWZfbGVuLzQ7CisJdTMyIGk7CiAKLQltZW1zZXQoYnAtPmd1bnppcF9idWYsIGZpbGwsIGJ1Zl9sZW4pOworCW1lbXNldChHVU5aSVBfQlVGKGJwKSwgKHU4KWZpbGwsIGJ1Zl9sZW4pOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBidWZfbGVuMzIpIHsKIAkJdTMyIGN1cl9sZW4gPSBtaW4oYnVmX2xlbjMyLCBsZW4gLSBpKTsKIAotCQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyICsgaSAqIDQsIGN1cl9sZW4pOworCQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyICsgaSo0LCBjdXJfbGVuKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfd3JfNjQoc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIGNvbnN0IHUzMiAqZGF0YSwKIAkJCSAgICAgdTMyIGxlbjY0KQogewotCXUzMiBidWZfbGVuMzIgPSBGV19CVUZfU0laRSAvIDQ7Ci0JdTMyIGxlbiA9IGxlbjY0ICogMjsKKwl1MzIgYnVmX2xlbjMyID0gRldfQlVGX1NJWkUvNDsKKwl1MzIgbGVuID0gbGVuNjQqMjsKIAl1NjQgZGF0YTY0ID0gMDsKLQlpbnQgaTsKKwl1MzIgaTsKIAogCS8qIDY0IGJpdCB2YWx1ZSBpcyBpbiBhIGJsb2I6IGZpcnN0IGxvdyBEV09SRCwgdGhlbiBoaWdoIERXT1JEICovCiAJZGF0YTY0ID0gSElMT19VNjQoKCooZGF0YSArIDEpKSwgKCpkYXRhKSk7CisKIAlsZW42NCA9IG1pbigodTMyKShGV19CVUZfU0laRS84KSwgbGVuNjQpOwogCWZvciAoaSA9IDA7IGkgPCBsZW42NDsgaSsrKSB7Ci0JCXU2NCAqcGRhdGEgPSAoKHU2NCAqKShicC0+Z3VuemlwX2J1ZikpICsgaTsKKwkJdTY0ICpwZGF0YSA9ICgodTY0ICopKEdVTlpJUF9CVUYoYnApKSkgKyBpOwogCiAJCSpwZGF0YSA9IGRhdGE2NDsKIAl9CkBAIC05Nyw3ICs4MCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBidWZfbGVuMzIpIHsKIAkJdTMyIGN1cl9sZW4gPSBtaW4oYnVmX2xlbjMyLCBsZW4gLSBpKTsKIAotCQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyICsgaSAqIDQsIGN1cl9sZW4pOworCQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyICsgaSo0LCBjdXJfbGVuKTsKIAl9CiB9CiAKQEAgLTExOCw5NyArMTAxLDgxIEBACiBzdGF0aWMgY29uc3QgdTggKmJueDJ4X3NlbF9ibG9iKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1OCAqZGF0YSkKIHsKIAlJRl9JU19JTlRfVEFCTEVfQUREUihUU0VNX1JFR19JTlRfVEFCTEUsIGFkZHIpCi0JCWRhdGEgPSBicC0+dHNlbV9pbnRfdGFibGVfZGF0YTsKLQllbHNlIElGX0lTX0lOVF9UQUJMRV9BRERSKENTRU1fUkVHX0lOVF9UQUJMRSwgYWRkcikKLQkJZGF0YSA9IGJwLT5jc2VtX2ludF90YWJsZV9kYXRhOwotCWVsc2UgSUZfSVNfSU5UX1RBQkxFX0FERFIoVVNFTV9SRUdfSU5UX1RBQkxFLCBhZGRyKQotCQlkYXRhID0gYnAtPnVzZW1faW50X3RhYmxlX2RhdGE7Ci0JZWxzZSBJRl9JU19JTlRfVEFCTEVfQUREUihYU0VNX1JFR19JTlRfVEFCTEUsIGFkZHIpCi0JCWRhdGEgPSBicC0+eHNlbV9pbnRfdGFibGVfZGF0YTsKLQllbHNlIElGX0lTX1BSQU1fQUREUihUU0VNX1JFR19QUkFNLCBhZGRyKQotCQlkYXRhID0gYnAtPnRzZW1fcHJhbV9kYXRhOwotCWVsc2UgSUZfSVNfUFJBTV9BRERSKENTRU1fUkVHX1BSQU0sIGFkZHIpCi0JCWRhdGEgPSBicC0+Y3NlbV9wcmFtX2RhdGE7Ci0JZWxzZSBJRl9JU19QUkFNX0FERFIoVVNFTV9SRUdfUFJBTSwgYWRkcikKLQkJZGF0YSA9IGJwLT51c2VtX3ByYW1fZGF0YTsKLQllbHNlIElGX0lTX1BSQU1fQUREUihYU0VNX1JFR19QUkFNLCBhZGRyKQotCQlkYXRhID0gYnAtPnhzZW1fcHJhbV9kYXRhOworCQlkYXRhID0gSU5JVF9UU0VNX0lOVF9UQUJMRV9EQVRBKGJwKTsKKwllbHNlCisJCUlGX0lTX0lOVF9UQUJMRV9BRERSKENTRU1fUkVHX0lOVF9UQUJMRSwgYWRkcikKKwkJCWRhdGEgPSBJTklUX0NTRU1fSU5UX1RBQkxFX0RBVEEoYnApOworCWVsc2UKKwkJSUZfSVNfSU5UX1RBQkxFX0FERFIoVVNFTV9SRUdfSU5UX1RBQkxFLCBhZGRyKQorCQkJZGF0YSA9IElOSVRfVVNFTV9JTlRfVEFCTEVfREFUQShicCk7CisJZWxzZQorCQlJRl9JU19JTlRfVEFCTEVfQUREUihYU0VNX1JFR19JTlRfVEFCTEUsIGFkZHIpCisJCQlkYXRhID0gSU5JVF9YU0VNX0lOVF9UQUJMRV9EQVRBKGJwKTsKKwllbHNlCisJCUlGX0lTX1BSQU1fQUREUihUU0VNX1JFR19QUkFNLCBhZGRyKQorCQkJZGF0YSA9IElOSVRfVFNFTV9QUkFNX0RBVEEoYnApOworCWVsc2UKKwkJSUZfSVNfUFJBTV9BRERSKENTRU1fUkVHX1BSQU0sIGFkZHIpCisJCQlkYXRhID0gSU5JVF9DU0VNX1BSQU1fREFUQShicCk7CisJZWxzZQorCQlJRl9JU19QUkFNX0FERFIoVVNFTV9SRUdfUFJBTSwgYWRkcikKKwkJCWRhdGEgPSBJTklUX1VTRU1fUFJBTV9EQVRBKGJwKTsKKwllbHNlCisJCUlGX0lTX1BSQU1fQUREUihYU0VNX1JFR19QUkFNLCBhZGRyKQorCQkJZGF0YSA9IElOSVRfWFNFTV9QUkFNX0RBVEEoYnApOwogCiAJcmV0dXJuIGRhdGE7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3dyaXRlX2JpZ19idWZfd2Ioc3RydWN0IGJueDJ4ICpicCwgdTMyIGFkZHIsIHUzMiBsZW4pCiB7Ci0JaW50IG9mZnNldCA9IDA7Ci0KLQlpZiAoYnAtPmRtYWVfcmVhZHkpIHsKLQkJd2hpbGUgKGxlbiA+IERNQUVfTEVOMzJfV1JfTUFYKSB7Ci0JCQlibngyeF93cml0ZV9kbWFlKGJwLCBicC0+Z3VuemlwX21hcHBpbmcgKyBvZmZzZXQsCi0JCQkJCSBhZGRyICsgb2Zmc2V0LCBETUFFX0xFTjMyX1dSX01BWCk7Ci0JCQlvZmZzZXQgKz0gRE1BRV9MRU4zMl9XUl9NQVggKiA0OwotCQkJbGVuIC09IERNQUVfTEVOMzJfV1JfTUFYOwotCQl9Ci0JCWJueDJ4X3dyaXRlX2RtYWUoYnAsIGJwLT5ndW56aXBfbWFwcGluZyArIG9mZnNldCwKLQkJCQkgYWRkciArIG9mZnNldCwgbGVuKTsKLQl9IGVsc2UKLQkJYm54MnhfaW5pdF9pbmRfd3IoYnAsIGFkZHIsIGJwLT5ndW56aXBfYnVmLCBsZW4pOworCWlmIChicC0+ZG1hZV9yZWFkeSkKKwkJYm54Mnhfd3JpdGVfZG1hZV9waHlzX2xlbihicCwgR1VOWklQX1BIWVMoYnApLCBhZGRyLCBsZW4pOworCWVsc2UKKwkJYm54MnhfaW5pdF9pbmRfd3IoYnAsIGFkZHIsIEdVTlpJUF9CVUYoYnApLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3dyX3diKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgIHUzMiBsZW4pCiB7Ci0JLyogVGhpcyBpcyBuZWVkZWQgZm9yIE5PX1pJUCBtb2RlLCBjdXJyZW50bHkgc3VwcG9ydGVkCi0JICAgaW4gbGl0dGxlIGVuZGlhbiBtb2RlIG9ubHkgKi8KLQlkYXRhID0gKGNvbnN0IHUzMiopYm54Mnhfc2VsX2Jsb2IoYnAsIGFkZHIsIChjb25zdCB1OCopZGF0YSk7CisJZGF0YSA9IChjb25zdCB1MzIgKilibngyeF9zZWxfYmxvYihicCwgYWRkciwgKGNvbnN0IHU4ICopZGF0YSk7CiAKLQlpZiAoKGxlbiAqIDQpID4gRldfQlVGX1NJWkUpIHsKLQkJQk5YMlhfRVJSKCJMQVJHRSBETUFFIE9QRVJBVElPTiAhICIKLQkJCSAgImFkZHIgMHgleCAgbGVuIDB4JXhcbiIsIGFkZHIsIGxlbio0KTsKLQkJcmV0dXJuOwotCX0KLQltZW1jcHkoYnAtPmd1bnppcF9idWYsIGRhdGEsIGxlbiAqIDQpOwotCi0JYm54Mnhfd3JpdGVfYmlnX2J1Zl93YihicCwgYWRkciwgbGVuKTsKKwlpZiAoYnAtPmRtYWVfcmVhZHkpCisJCVZJUlRfV1JfRE1BRV9MRU4oYnAsIGRhdGEsIGFkZHIsIGxlbik7CisJZWxzZQorCQlibngyeF9pbml0X2luZF93cihicCwgYWRkciwgZGF0YSwgbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfaW5pdF93cl96cChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwKLQkJCSAgICAgdTMyIGxlbiwgdTMyIGJsb2Jfb2ZmKQorc3RhdGljIHZvaWQgYm54MnhfaW5pdF93cl96cChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgdTMyIGxlbiwgdTMyIGJsb2Jfb2ZmKQogewotCWludCByYywgaTsKLSAgICAgICAgY29uc3QgdTggKmRhdGEgPSBOVUxMOworCWNvbnN0IHU4ICpkYXRhID0gTlVMTDsKKwlpbnQgcmM7CisJdTMyIGk7CiAKLQlkYXRhID0gYm54Mnhfc2VsX2Jsb2IoYnAsIGFkZHIsIGRhdGEpICsgNCpibG9iX29mZjsKLQotCWlmIChkYXRhID09IE5VTEwpIHsKLQkJcGFuaWMoIkJsb2Igbm90IGZvdW5kIGZvciBhZGRyIDB4JXhcbiIsIGFkZHIpOwotCQlyZXR1cm47Ci0JfQorCWRhdGEgPSBibngyeF9zZWxfYmxvYihicCwgYWRkciwgZGF0YSkgKyBibG9iX29mZio0OwogCiAJcmMgPSBibngyeF9ndW56aXAoYnAsIGRhdGEsIGxlbik7Ci0JaWYgKHJjKSB7Ci0JCUJOWDJYX0VSUigiZ3VuemlwIGZhaWxlZCAhIGFkZHIgMHgleCByYyAlZFxuIiwgYWRkciwgcmMpOwotCQlCTlgyWF9FUlIoImJsb2Jfb2Zmc2V0PTB4JXhcbiIsIGJsb2Jfb2ZmKTsKKwlpZiAocmMpCiAJCXJldHVybjsKLQl9CiAKIAkvKiBndW56aXBfb3V0bGVuIGlzIGluIGR3b3JkcyAqLwotCWxlbiA9IGJwLT5ndW56aXBfb3V0bGVuOworCWxlbiA9IEdVTlpJUF9PVVRMRU4oYnApOwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJKCh1MzIgKilicC0+Z3VuemlwX2J1ZilbaV0gPQotCQkJY3B1X3RvX2xlMzIoKCh1MzIgKilicC0+Z3VuemlwX2J1ZilbaV0pOworCQkoKHUzMiAqKUdVTlpJUF9CVUYoYnApKVtpXSA9CisJCQkJY3B1X3RvX2xlMzIoKCh1MzIgKilHVU5aSVBfQlVGKGJwKSlbaV0pOwogCiAJYm54Mnhfd3JpdGVfYmlnX2J1Zl93YihicCwgYWRkciwgbGVuKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9ibG9jayhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYmxvY2ssIHUzMiBzdGFnZSkKIHsKLQlpbnQgaHdfd3IsIGk7CiAJdTE2IG9wX3N0YXJ0ID0KLQkJYnAtPmluaXRfb3BzX29mZnNldHNbQkxPQ0tfT1BTX0lEWChibG9jayxzdGFnZSxTVEFHRV9TVEFSVCldOworCQlJTklUX09QU19PRkZTRVRTKGJwKVtCTE9DS19PUFNfSURYKGJsb2NrLCBzdGFnZSwgU1RBR0VfU1RBUlQpXTsKIAl1MTYgb3BfZW5kID0KLQkJYnAtPmluaXRfb3BzX29mZnNldHNbQkxPQ0tfT1BTX0lEWChibG9jayxzdGFnZSxTVEFHRV9FTkQpXTsKKwkJSU5JVF9PUFNfT0ZGU0VUUyhicClbQkxPQ0tfT1BTX0lEWChibG9jaywgc3RhZ2UsIFNUQUdFX0VORCldOwogCXVuaW9uIGluaXRfb3AgKm9wOwotCXUzMiBvcF90eXBlLCBhZGRyLCBsZW47CisJaW50IGh3X3dyOworCXUzMiBpLCBvcF90eXBlLCBhZGRyLCBsZW47CiAJY29uc3QgdTMyICpkYXRhLCAqZGF0YV9iYXNlOwogCiAJLyogSWYgZW1wdHkgYmxvY2sgKi8KQEAgLTIyMiwxMSArMTg5LDExIEBACiAJZWxzZQogCQlod193ciA9IE9QX1dSX0FTSUM7CiAKLQlkYXRhX2Jhc2UgPSBicC0+aW5pdF9kYXRhOworCWRhdGFfYmFzZSA9IElOSVRfREFUQShicCk7CiAKIAlmb3IgKGkgPSBvcF9zdGFydDsgaSA8IG9wX2VuZDsgaSsrKSB7CiAKLQkJb3AgPSAodW5pb24gaW5pdF9vcCAqKSYoYnAtPmluaXRfb3BzW2ldKTsKKwkJb3AgPSAodW5pb24gaW5pdF9vcCAqKSYoSU5JVF9PUFMoYnApW2ldKTsKIAogCQlvcF90eXBlID0gb3AtPnN0cl93ci5vcDsKIAkJYWRkciA9IG9wLT5zdHJfd3Iub2Zmc2V0OwpAQCAtMjM0LDcgKzIwMSw3IEBACiAJCWRhdGEgPSBkYXRhX2Jhc2UgKyBvcC0+c3RyX3dyLmRhdGFfb2ZmOwogCiAJCS8qIEhXL0VNVUwgc3BlY2lmaWMgKi8KLQkJaWYgKHVubGlrZWx5KChvcF90eXBlID4gT1BfV0IpICYmIChvcF90eXBlID09IGh3X3dyKSkpCisJCWlmICgob3BfdHlwZSA+IE9QX1dCKSAmJiAob3BfdHlwZSA9PSBod193cikpCiAJCQlvcF90eXBlID0gT1BfV1I7CiAKIAkJc3dpdGNoIChvcF90eXBlKSB7CkBAIC0yNjUsMzQgKzIzMiwxNzggQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogaGFwcGVucyB3aGVuZXZlciBhbiBvcCBpcyBvZiBhIGRpZmYgSFcgKi8KLSNpZiAwCi0JCQlEUChORVRJRl9NU0dfSFcsICJza2lwcGluZyBpbml0IG9wZXJhdGlvbiAgIgotCQkJICAgImluZGV4ICVkWyVkOiVkXTogdHlwZSAlZCAgYWRkciAweCV4ICAiCi0JCQkgICAibGVuICVkKDB4JXgpXG4iLAotCQkJICAgaSwgb3Bfc3RhcnQsIG9wX2VuZCwgb3BfdHlwZSwgYWRkciwgbGVuLCBsZW4pOwotI2VuZGlmCiAJCQlicmVhazsKIAkJfQogCX0KIH0KIAotLyogUFhQICovCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X3B4cChzdHJ1Y3QgYm54MnggKmJwKQotewotCXUxNiBkZXZjdGw7Ci0JaW50IHJfb3JkZXIsIHdfb3JkZXI7Ci0JdTMyIHZhbCwgaTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJwLT5wZGV2LAotCQkJICAgICBicC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwgJmRldmN0bCk7Ci0JRFAoTkVUSUZfTVNHX0hXLCAicmVhZCAweCV4IGZyb20gZGV2Y3RsXG4iLCBkZXZjdGwpOwotCXdfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1BBWUxPQUQpID4+IDUpOwotCWlmIChicC0+bXJycyA9PSAtMSkKLQkJcl9vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7Ci0JZWxzZSB7Ci0JCURQKE5FVElGX01TR19IVywgImZvcmNlIHJlYWQgb3JkZXIgdG8gJWRcbiIsIGJwLT5tcnJzKTsKLQkJcl9vcmRlciA9IGJwLT5tcnJzOwotCX0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFBYUCBBcmJpdGVyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFRoaXMgY29kZSBjb25maWd1cmVzIHRoZSBQQ0kgcmVhZC93cml0ZSBhcmJpdGVyCisgKiB3aGljaCBpbXBsZW1lbnRzIGEgd2VpZ2h0ZWQgcm91bmQgcm9iaW4KKyAqIGJldHdlZW4gdGhlIHZpcnR1YWwgcXVldWVzIGluIHRoZSBjaGlwLgorICoKKyAqIFRoZSB2YWx1ZXMgd2VyZSBkZXJpdmVkIGZvciBlYWNoIFBDSSBtYXggcGF5bG9hZCBhbmQgbWF4IHJlcXVlc3Qgc2l6ZS4KKyAqIHNpbmNlIG1heCBwYXlsb2FkIGFuZCBtYXggcmVxdWVzdCBzaXplIGFyZSBvbmx5IGtub3duIGF0IHJ1biB0aW1lLAorICogdGhpcyBpcyBkb25lIGFzIGEgc2VwYXJhdGUgaW5pdCBzdGFnZS4KKyAqLworCisjZGVmaW5lIE5VTV9XUl9RCQkJMTMKKyNkZWZpbmUgTlVNX1JEX1EJCQkyOQorI2RlZmluZSBNQVhfUkRfT1JECQkJMworI2RlZmluZSBNQVhfV1JfT1JECQkJMgorCisvKiBjb25maWd1cmF0aW9uIGZvciBvbmUgYXJiaXRlciBxdWV1ZSAqLworc3RydWN0IGFyYl9saW5lIHsKKwlpbnQgbDsKKwlpbnQgYWRkOworCWludCB1Ym91bmQ7Cit9OworCisvKiBkZXJpdmVkIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggcmVhZCBxdWV1ZSBmb3IgZWFjaCBtYXggcmVxdWVzdCBzaXplICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHJlYWRfYXJiX2RhdGFbTlVNX1JEX1FdW01BWF9SRF9PUkQgKyAxXSA9IHsKKy8qIDEgKi8JeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgMjV9LCB7MzIsIDY0LCAyNX0sIHs2NCwgNjQsIDQxfSB9LAorCXsgezQsIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0sICB7NCwgIDgsICA0fSAgfSwKKwl7IHs0LCAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9LCAgezQsICAzLCAgM30gIH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0sIHsxNiwgMywgIDExfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisvKiAxMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCA2NCwgNn0sICB7MTYsIDY0LCAxMX0sIHszMiwgNjQsIDIxfSwgezMyLCA2NCwgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKy8qIDIwICoveyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgNDF9LCB7MzIsIDY0LCA4MX0sIHs2NCwgNjQsIDEyMH0gfQorfTsKKworLyogZGVyaXZlZCBjb25maWd1cmF0aW9uIGZvciBlYWNoIHdyaXRlIHF1ZXVlIGZvciBlYWNoIG1heCByZXF1ZXN0IHNpemUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgd3JpdGVfYXJiX2RhdGFbTlVNX1dSX1FdW01BWF9XUl9PUkQgKyAxXSA9IHsKKy8qIDEgKi8JeyB7NCwgNiwgIDN9LCAgezQsICA2LCAgM30sICB7NCwgIDYsICAzfSB9LAorCXsgezQsIDIsICAzfSwgIHs0LCAgMiwgIDN9LCAgezQsICAyLCAgM30gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHsxNiwgMiwgIDExfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MTYsIDIsICAxMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHsxNiwgMiwgIDExfSB9LAorLyogMTAgKi97IHs4LCA5LCAgNn0sICB7MTYsIDksICAxMX0sIHszMiwgOSwgIDIxfSB9LAorCXsgezgsIDQ3LCAxOX0sIHsxNiwgNDcsIDE5fSwgezMyLCA0NywgMjF9IH0sCisJeyB7OCwgOSwgIDZ9LCAgezE2LCA5LCAgMTF9LCB7MTYsIDksICAxMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCA0MX0sIHszMiwgNjQsIDgxfSB9Cit9OworCisvKiByZWdpc3RlciBhZGRyZXNzZXMgZm9yIHJlYWQgcXVldWVzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHJlYWRfYXJiX2FkZHJbTlVNX1JEX1EtMV0gPSB7CisvKiAxICovCXtQWFAyX1JFR19SUV9CV19SRF9MMCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMCwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMH0sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjF9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MMiwgUFhQMl9SRUdfUFNXUlFfQldfQUREMiwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIyfSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDMsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDMsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCM30sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0w0LCBQWFAyX1JFR19SUV9CV19SRF9BREQ0LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQ0fSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDUsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDUsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDV9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MNiwgUFhQMl9SRUdfUFNXUlFfQldfQURENiwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUI2fSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDcsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDcsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCN30sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0w4LCBQWFAyX1JFR19QU1dSUV9CV19BREQ4LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjh9LAorLyogMTAgKi97UFhQMl9SRUdfUFNXUlFfQldfTDksIFBYUDJfUkVHX1BTV1JRX0JXX0FERDksCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOX0sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0wxMCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMTAsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMTB9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MMTEsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDExLAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjExfSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDEyLCBQWFAyX1JFR19SUV9CV19SRF9BREQxMiwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTJ9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMTMsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDEzLAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxM30sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wxNCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTQsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE0fSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDE1LCBQWFAyX1JFR19SUV9CV19SRF9BREQxNSwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTV9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMTYsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDE2LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxNn0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wxNywgUFhQMl9SRUdfUlFfQldfUkRfQUREMTcsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE3fSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDE4LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOCwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTh9LAorLyogMjAgKi97UFhQMl9SRUdfUlFfQldfUkRfTDE5LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOSwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMTl9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMjAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDIwLAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyMH0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wyMiwgUFhQMl9SRUdfUlFfQldfUkRfQUREMjIsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDIyfSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDIzLCBQWFAyX1JFR19SUV9CV19SRF9BREQyMywKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjN9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMjQsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDI0LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyNH0sCisJe1BYUDJfUkVHX1JRX0JXX1JEX0wyNSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMjUsCisJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDI1fSwKKwl7UFhQMl9SRUdfUlFfQldfUkRfTDI2LCBQWFAyX1JFR19SUV9CV19SRF9BREQyNiwKKwkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjZ9LAorCXtQWFAyX1JFR19SUV9CV19SRF9MMjcsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDI3LAorCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQyN30sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0wyOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMjgsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCMjh9Cit9OworCisvKiByZWdpc3RlciBhZGRyZXNzZXMgZm9yIHdyaXRlIHF1ZXVlcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcmJfbGluZSB3cml0ZV9hcmJfYWRkcltOVU1fV1JfUS0xXSA9IHsKKy8qIDEgKi8Je1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjF9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MMiwgUFhQMl9SRUdfUFNXUlFfQldfQUREMiwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIyfSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDMsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDMsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCM30sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0w2LCBQWFAyX1JFR19QU1dSUV9CV19BREQ2LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjZ9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MNywgUFhQMl9SRUdfUFNXUlFfQldfQURENywKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUI3fSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDgsCisJCVBYUDJfUkVHX1BTV1JRX0JXX1VCOH0sCisJe1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjl9LAorCXtQWFAyX1JFR19QU1dSUV9CV19MMTAsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEwLAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjEwfSwKKwl7UFhQMl9SRUdfUFNXUlFfQldfTDExLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMSwKKwkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMX0sCisvKiAxMCAqL3tQWFAyX1JFR19QU1dSUV9CV19MMjgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDI4LAorCQlQWFAyX1JFR19QU1dSUV9CV19VQjI4fSwKKwl7UFhQMl9SRUdfUlFfQldfV1JfTDI5LCBQWFAyX1JFR19SUV9CV19XUl9BREQyOSwKKwkJUFhQMl9SRUdfUlFfQldfV1JfVUJPVU5EMjl9LAorCXtQWFAyX1JFR19SUV9CV19XUl9MMzAsIFBYUDJfUkVHX1JRX0JXX1dSX0FERDMwLAorCQlQWFAyX1JFR19SUV9CV19XUl9VQk9VTkQzMH0KK307CisKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfcHhwX2FyYihzdHJ1Y3QgYm54MnggKmJwLCBpbnQgcl9vcmRlciwgaW50IHdfb3JkZXIpCit7CisJdTMyIHZhbCwgaTsKIAogCWlmIChyX29yZGVyID4gTUFYX1JEX09SRCkgewogCQlEUChORVRJRl9NU0dfSFcsICJyZWFkIG9yZGVyIG9mICVkICBvcmRlciBhZGp1c3RlZCB0byAlZFxuIiwKQEAgLTM2Nyw2ICs0NzgsMTEgQEAKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1VTRE1EUF9USCwgKDB4MTggPDwgd19vcmRlcikpOwogCiAJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQkvKiAgICBNUFMgICAgICB3X29yZGVyICAgICBvcHRpbWFsIFRIICAgICAgcHJlc2VudGx5IFRICisJCSAqICAgIDEyOCAgICAgICAgIDAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgIDIKKwkJICogICAgMjU2ICAgICAgICAgMSAgICAgICAgICAgICAxICAgICAgICAgICAgICAgMworCQkgKiAgICA+PTUxMiAgICAgICAyICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAzCisJCSAqLwogCQl2YWwgPSAoKHdfb3JkZXIgPT0gMCkgPyAyIDogMyk7CiAJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfSENfTVBTLCB2YWwpOwogCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1VTRE1fTVBTLCB2YWwpOwpAQCAtMzgyLDYxICs0OTgsNCBAQAogCX0KIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICAgICAgQ2FsY3VsYXRlcyBjcmMgOCBvbiBhIHdvcmQgdmFsdWU6IHBvbHlub21pYWwgMC0xLTItOAotICogICAgICAgICBDb2RlIHdhcyB0cmFuc2xhdGVkIGZyb20gVmVyaWxvZy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHU4IGNhbGNfY3JjOCh1MzIgZGF0YSwgdTggY3JjKQotewotCXU4IERbMzJdOwotCXU4IE5ld0NSQ1s4XTsKLQl1OCBDWzhdOwotCXU4IGNyY19yZXM7Ci0JdTggaTsKLQotCS8qIHNwbGl0IHRoZSBkYXRhIGludG8gMzEgYml0cyAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCURbaV0gPSBkYXRhICYgMTsKLQkJZGF0YSA9IGRhdGEgPj4gMTsKLQl9Ci0KLQkvKiBzcGxpdCB0aGUgY3JjIGludG8gOCBiaXRzICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlDW2ldID0gY3JjICYgMTsKLQkJY3JjID0gY3JjID4+IDE7Ci0JfQotCi0JTmV3Q1JDWzBdID0gRFszMV0gXiBEWzMwXSBeIERbMjhdIF4gRFsyM10gXiBEWzIxXSBeIERbMTldIF4gRFsxOF0gXgotCQlEWzE2XSBeIERbMTRdIF4gRFsxMl0gXiBEWzhdIF4gRFs3XSBeIERbNl0gXiBEWzBdIF4gQ1s0XSBeCi0JCUNbNl0gXiBDWzddOwotCU5ld0NSQ1sxXSA9IERbMzBdIF4gRFsyOV0gXiBEWzI4XSBeIERbMjRdIF4gRFsyM10gXiBEWzIyXSBeIERbMjFdIF4KLQkJRFsyMF0gXiBEWzE4XSBeIERbMTddIF4gRFsxNl0gXiBEWzE1XSBeIERbMTRdIF4gRFsxM10gXgotCQlEWzEyXSBeIERbOV0gXiBEWzZdIF4gRFsxXSBeIERbMF0gXiBDWzBdIF4gQ1s0XSBeIENbNV0gXiBDWzZdOwotCU5ld0NSQ1syXSA9IERbMjldIF4gRFsyOF0gXiBEWzI1XSBeIERbMjRdIF4gRFsyMl0gXiBEWzE3XSBeIERbMTVdIF4KLQkJRFsxM10gXiBEWzEyXSBeIERbMTBdIF4gRFs4XSBeIERbNl0gXiBEWzJdIF4gRFsxXSBeIERbMF0gXgotCQlDWzBdIF4gQ1sxXSBeIENbNF0gXiBDWzVdOwotCU5ld0NSQ1szXSA9IERbMzBdIF4gRFsyOV0gXiBEWzI2XSBeIERbMjVdIF4gRFsyM10gXiBEWzE4XSBeIERbMTZdIF4KLQkJRFsxNF0gXiBEWzEzXSBeIERbMTFdIF4gRFs5XSBeIERbN10gXiBEWzNdIF4gRFsyXSBeIERbMV0gXgotCQlDWzFdIF4gQ1syXSBeIENbNV0gXiBDWzZdOwotCU5ld0NSQ1s0XSA9IERbMzFdIF4gRFszMF0gXiBEWzI3XSBeIERbMjZdIF4gRFsyNF0gXiBEWzE5XSBeIERbMTddIF4KLQkJRFsxNV0gXiBEWzE0XSBeIERbMTJdIF4gRFsxMF0gXiBEWzhdIF4gRFs0XSBeIERbM10gXiBEWzJdIF4KLQkJQ1swXSBeIENbMl0gXiBDWzNdIF4gQ1s2XSBeIENbN107Ci0JTmV3Q1JDWzVdID0gRFszMV0gXiBEWzI4XSBeIERbMjddIF4gRFsyNV0gXiBEWzIwXSBeIERbMThdIF4gRFsxNl0gXgotCQlEWzE1XSBeIERbMTNdIF4gRFsxMV0gXiBEWzldIF4gRFs1XSBeIERbNF0gXiBEWzNdIF4gQ1sxXSBeCi0JCUNbM10gXiBDWzRdIF4gQ1s3XTsKLQlOZXdDUkNbNl0gPSBEWzI5XSBeIERbMjhdIF4gRFsyNl0gXiBEWzIxXSBeIERbMTldIF4gRFsxN10gXiBEWzE2XSBeCi0JCURbMTRdIF4gRFsxMl0gXiBEWzEwXSBeIERbNl0gXiBEWzVdIF4gRFs0XSBeIENbMl0gXiBDWzRdIF4KLQkJQ1s1XTsKLQlOZXdDUkNbN10gPSBEWzMwXSBeIERbMjldIF4gRFsyN10gXiBEWzIyXSBeIERbMjBdIF4gRFsxOF0gXiBEWzE3XSBeCi0JCURbMTVdIF4gRFsxM10gXiBEWzExXSBeIERbN10gXiBEWzZdIF4gRFs1XSBeIENbM10gXiBDWzVdIF4KLQkJQ1s2XTsKLQotCWNyY19yZXMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCWNyY19yZXMgfD0gKE5ld0NSQ1tpXSA8PCBpKTsKLQotCXJldHVybiBjcmNfcmVzOwotfQotCiAjZW5kaWYgLyogQk5YMlhfSU5JVF9PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5jIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCmluZGV4IDJlZTU4MWEuLmUzMmQzMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYworKysgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKQEAgLTM3LDYgKzM3LDEwIEBACiAvKgkJCVNob3J0Y3V0IGRlZmluaXRpb25zCQkgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjZGVmaW5lIE5JR19MQVRDSF9CQ19FTkFCTEVfTUlfSU5UIDAKKworI2RlZmluZSBOSUdfU1RBVFVTX0VNQUMwX01JX0lOVCBcCisJCU5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfRU1BQzBfTUlTQ19NSV9JTlQKICNkZWZpbmUgTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIFwKIAkJTklHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDBfUkVHX1NUQVRVU19YR1hTMF9MSU5LMTBHCiAjZGVmaW5lIE5JR19TVEFUVVNfWEdYUzBfTElOS19TVEFUVVMgXApAQCAtMTM5LDIxICsxNDMsMjYgQEAKIAkjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0xDIAkJMHg3CiAJI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9DT1BQRVIJMHgyMQogCisKKyNkZWZpbmUgU0ZQX0VFUFJPTV9DT01QX0NPREVfQUREUgkJMHgzCisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTVBfQ09ERV9TUl9NQVNLCSgxPDw0KQorCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT01QX0NPREVfTFJfTUFTSwkoMTw8NSkKKwkjZGVmaW5lIFNGUF9FRVBST01fQ09NUF9DT0RFX0xSTV9NQVNLCSgxPDw2KQorCiAjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9BRERSCQkweDgKIAkjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9QQVNTSVZFIDB4NAogCSNkZWZpbmUgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX0FDVElWRQkgMHg4Ci0jZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUgkJMHgxNAotI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkUgCTE2CisKICNkZWZpbmUgU0ZQX0VFUFJPTV9PUFRJT05TX0FERFIgCQkweDQwCiAJI2RlZmluZSBTRlBfRUVQUk9NX09QVElPTlNfTElORUFSX1JYX09VVF9NQVNLIDB4MQogI2RlZmluZSBTRlBfRUVQUk9NX09QVElPTlNfU0laRSAJCTIKIAotI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfVU5LTk9XTiAJCQkweDAKLSNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX0xDICAgCQkJMHgxCi0jZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9BQ1RJVkVfQ09QUEVSX0NBQkxFCQkweDIKLSNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX1BBU1NJVkVfQ09QUEVSX0NBQkxFCTB4MworI2RlZmluZSBFRENfTU9ERV9MSU5FQVIJIAkJCTB4MDAyMgorI2RlZmluZSBFRENfTU9ERV9MSU1JVElORwkgCQkJMHgwMDQ0CisjZGVmaW5lIEVEQ19NT0RFX1BBU1NJVkVfREFDIAkJCTB4MDA1NQogCi0jZGVmaW5lIFNGUF9MSU1JVElOR19NT0RFX1ZBTFVFIAkJCTB4MDA0NAorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3Myw2ICsxODIsNyBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUzMiBlbWFjX2Jhc2UgPSAocGFyYW1zLT5wb3J0KSA/IEdSQ0JBU0VfRU1BQzEgOiBHUkNCQVNFX0VNQUMwOworCiAJLyogU2V0IENsYXVzZSAyMiAqLwogCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfU1QgKyBwYXJhbXMtPnBvcnQqMHgxMCwgMSk7CiAJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgMHgyNDVmODAwMCk7CkBAIC0xODUsNiArMTk1LDcgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9waHlfbWRpbyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTggcGh5X2ZsYWdzKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCiAJaWYgKHBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfU1QgKwogCQkJICAgcGFyYW1zLT5wb3J0KjB4MTgsIDApOwpAQCAtMzg4LDcgKzM5OSw4IEBACiAKIAkJLyogZW5hYmxlIGFjY2VzcyBmb3IgYm1hYyByZWdpc3RlcnMgKi8KIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX1JFR1NfT1VUX0VOICsgcG9ydCo0LCAweDEpOwotCX0KKwl9IGVsc2UKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0JNQUMwX1JFR1NfT1VUX0VOICsgcG9ydCo0LCAweDApOwogCiAJdmFycy0+bWFjX3R5cGUgPSBNQUNfVFlQRV9FTUFDOwogCXJldHVybiAwOwpAQCAtNDU1LDcgKzQ2Nyw2IEBACiAJUkVHX1dSX0RNQUUoYnAsIGJtYWNfYWRkciArIEJJR01BQ19SRUdJU1RFUl9CTUFDX0NPTlRST0wsCiAJCSAgICB3Yl9kYXRhLCAyKTsKIAotCiAJLyogc2V0IHJ4IG10dSAqLwogCXdiX2RhdGFbMF0gPSBFVEhfTUFYX0pVTUJPX1BBQ0tFVF9TSVpFICsgRVRIX09WUkVIRUFEOwogCXdiX2RhdGFbMV0gPSAwOwpAQCAtNjc0LDYgKzY4NSw3IEBACiBzdGF0aWMgdm9pZCBibngyeF91cGRhdGVfbW5nKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MzIgbGlua19zdGF0dXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisKIAlSRUdfV1IoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCiAJCSAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sCiAJCQkgICAgcG9ydF9tYltwYXJhbXMtPnBvcnRdLmxpbmtfc3RhdHVzKSwKQEAgLTc3MCw3ICs3ODIsNiBAQAogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnZhbGlkIGxpbmVfc3BlZWQgMHgleFxuIiwKIAkJCQkgIGxpbmVfc3BlZWQpOwogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKIAkJfQogCX0KIAlSRUdfV1IoYnAsIFBCRl9SRUdfUDBfSU5JVF9DUkQgKyBwb3J0KjQsIGluaXRfY3JkKTsKQEAgLTc5MCw5ICs4MDEsMTEgQEAKIHN0YXRpYyB1MzIgYm54MnhfZ2V0X2VtYWNfYmFzZShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgZXh0X3BoeV90eXBlLCB1OCBwb3J0KQogewogCXUzMiBlbWFjX2Jhc2U7CisKIAlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgogCQkvKiBBbGwgTURDL01ESU8gaXMgZGlyZWN0ZWQgdGhyb3VnaCBzaW5nbGUgRU1BQyAqLwogCQlpZiAoUkVHX1JEKGJwLCBOSUdfUkVHX1BPUlRfU1dBUCkpCiAJCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMwOwpAQCAtODk0LDcgKzkwNyw3IEBACiAJdmFsID0gc2F2ZWRfbW9kZSAmICgoRU1BQ19NRElPX01PREVfQVVUT19QT0xMIHwKIAkJCSAgICAgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UKSk7CiAJdmFsIHw9IChFTUFDX01ESU9fTU9ERV9DTEFVU0VfNDUgfAotCQkoNDkgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7CisJCSg0OUwgPDwgRU1BQ19NRElPX01PREVfQ0xPQ0tfQ05UX0JJVFNISUZUKSk7CiAJUkVHX1dSKGJwLCBtZGlvX2N0cmwgKyBFTUFDX1JFR19FTUFDX01ESU9fTU9ERSwgdmFsKTsKIAlSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKIAl1ZGVsYXkoNDApOwpAQCAtMTAxMSw4ICsxMDI0LDggQEAKIAkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCiAJCQkgICAgICAobWlpX2NvbnRyb2wgfAogCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNFVCkpOwotCi0JYm54Mnhfc2V0X3NlcmRlc19hY2Nlc3MocGFyYW1zKTsKKwlpZiAocGFyYW1zLT5zd2l0Y2hfY2ZnID09IFNXSVRDSF9DRkdfMUcpCisJCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7CiAKIAkvKiB3YWl0IGZvciB0aGUgcmVzZXQgdG8gc2VsZiBjbGVhciAqLwogCWZvciAoaSA9IDA7IGkgPCBNRElPX0FDQ0VTU19USU1FT1VUOyBpKyspIHsKQEAgLTExNDEsNyArMTE1NCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICAgIHN0cnVjdCBsaW5rX3ZhcnMgICAqdmFycykKKwkJCSAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJICAgIHU4IGVuYWJsZV9jbDczKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUxNiByZWdfdmFsOwpAQCAtMTE3MSw3ICsxMTg1LDkgQEAKIAkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1JFR19CQU5LX1NFUkRFU19ESUdJVEFMLAogCQkJICAgICAgTURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxLCAmcmVnX3ZhbCk7Ci0JcmVnX3ZhbCAmPSB+TURJT19TRVJERVNfRElHSVRBTF9BXzEwMDBYX0NPTlRST0wxX1NJR05BTF9ERVRFQ1RfRU47CisJcmVnX3ZhbCAmPSB+KE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9TSUdOQUxfREVURUNUX0VOIHwKKwkJICAgIE1ESU9fU0VSREVTX0RJR0lUQUxfQV8xMDAwWF9DT05UUk9MMV9JTlZFUlRfU0lHTkFMX0RFVEVDVCk7CisJcmVnX3ZhbCB8PSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfRklCRVJfTU9ERTsKIAlpZiAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRykKIAkJcmVnX3ZhbCB8PSBNRElPX1NFUkRFU19ESUdJVEFMX0FfMTAwMFhfQ09OVFJPTDFfQVVUT0RFVDsKIAllbHNlCkBAIC0xMjAzLDggKzEyMTksNTEgQEAKIAkJCSAgICAgIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkwsCiAJCQkgICAgICByZWdfdmFsKTsKIAotCS8qIENMNzMgQXV0b25lZyBEaXNhYmxlZCAqLwotCXJlZ192YWwgPSAwOworCWlmIChlbmFibGVfY2w3MykgeworCQkvKiBFbmFibGUgQ2w3MyBGU00gc3RhdHVzIGJpdHMgKi8KKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCisJCQkJICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VQ1RSTCwKKwkJCQkgICAgTURJT19DTDczX1VTRVJCMF9DTDczX1VDVFJMX1VTVEFUMV9NVVhTRUwpOworCisJCS8qIEVuYWJsZSBCQU0gU3RhdGlvbiBNYW5hZ2VyKi8KKwkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCXBhcmFtcy0+cGh5X2FkZHIsCisJCQlNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAorCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMSwKKwkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX0VOIHwKKwkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX1NUQVRJT05fTU5HUl9FTiB8CisJCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9OUF9BRlRFUl9CUF9FTik7CisKKwkJLyogTWVyZ2UgQ0w3MyBhbmQgQ0wzNyBhbmVnIHJlc29sdXRpb24gKi8KKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCisJCQkJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMywKKwkJCQkgICAgICAmcmVnX3ZhbCk7CisKKwkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMEcpIHsKKwkJCS8qIFNldCB0aGUgQ0w3MyBBTiBzcGVlZCAqLworCQkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKKwkJCQkJICAgICAgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyLAorCQkJCQkgICAgICAmcmVnX3ZhbCk7CisKKwkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEsCisJCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMiwKKwkJCSAgcmVnX3ZhbCB8IE1ESU9fQ0w3M19JRUVFQjFfQU5fQURWMl9BRFZSXzEwR19LWDQpOworCisJCX0KKwkJLyogQ0w3MyBBdXRvbmVnIEVuYWJsZWQgKi8KKwkJcmVnX3ZhbCA9IE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOOworCisJfSBlbHNlIC8qIENMNzMgQXV0b25lZyBEaXNhYmxlZCAqLworCQlyZWdfdmFsID0gMDsKIAogCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLApAQCAtMTIxOSwxNCArMTI3OCwxNCBAQAogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUxNiByZWdfdmFsOwogCi0JLyogcHJvZ3JhbSBkdXBsZXgsIGRpc2FibGUgYXV0b25lZyAqLwotCisJLyogcHJvZ3JhbSBkdXBsZXgsIGRpc2FibGUgYXV0b25lZyBhbmQgc2dtaWkqLwogCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAogCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKIAkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsICZyZWdfdmFsKTsKIAlyZWdfdmFsICY9IH4oTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0ZVTExfRFVQTEVYIHwKLQkJICAgICBNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4pOworCQkgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8CisJCSAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX01BTl9TR01JSV9TUF9NQVNLKTsKIAlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQlyZWdfdmFsIHw9IE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9GVUxMX0RVUExFWDsKIAlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LApAQCAtMTI4NywxMCArMTM0NiwxMCBAQAogCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAogCQkJICAgICAgTURJT19SRUdfQkFOS19PVkVSXzFHLAotCQkJICAgICAgTURJT19PVkVSXzFHX1VQMywgMCk7CisJCQkgICAgICBNRElPX09WRVJfMUdfVVAzLCAweDQwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X2NhbGNfaWVlZV9hbmVnX2FkdihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgdTMyICppZWVlX2ZjKQorc3RhdGljIHZvaWQgYm54MnhfY2FsY19pZWVlX2FuZWdfYWR2KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MTYgKmllZWVfZmMpCiB7CiAJKmllZWVfZmMgPSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9GVUxMX0RVUExFWDsKIAkvKiByZXNvbHZlIHBhdXNlIG1vZGUgYW5kIGFkdmVydGlzZW1lbnQKQEAgLTEzMjQsNyArMTM4Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9pZWVlX2FuZWdfYWR2ZXJ0aXNtZW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCQkgICB1MzIgaWVlZV9mYykKKwkJCQkJICAgdTE2IGllZWVfZmMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJLyogZm9yIEFOLCB3ZSBhcmUgYWx3YXlzIHB1Ymxpc2hpbmcgZnVsbCBkdXBsZXggKi8KQEAgLTEzMzIsMzEgKzEzOTEsNDkgQEAKIAlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ09NQk9fSUVFRTAsCi0JCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEViwgKHUxNilpZWVlX2ZjKTsKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfQVVUT19ORUdfQURWLCBpZWVlX2ZjKTsKIH0KIAotc3RhdGljIHZvaWQgYm54MnhfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQorc3RhdGljIHZvaWQgYm54MnhfcmVzdGFydF9hdXRvbmVnKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1OCBlbmFibGVfY2w3MykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MTYgbWlpX2NvbnRyb2w7CisKIAlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3Jlc3RhcnRfYXV0b25lZ1xuIik7CiAJLyogRW5hYmxlIGFuZCByZXN0YXJ0IEJBTS9DTDM3IGFuZWcgKi8KIAotCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkgICAgICAmbWlpX2NvbnRyb2wpOwotCURQKE5FVElGX01TR19MSU5LLAotCQkgImJueDJ4X3Jlc3RhcnRfYXV0b25lZyBtaWlfY29udHJvbCBiZWZvcmUgPSAweCV4XG4iLAotCQkgbWlpX2NvbnRyb2wpOwotCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkgICAgICAobWlpX2NvbnRyb2wgfAotCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8Ci0JCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pKTsKKwlpZiAoZW5hYmxlX2NsNzMpIHsKKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCisJCQkJICAgICAgTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0wsCisJCQkJICAgICAgJm1paV9jb250cm9sKTsKKworCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCXBhcmFtcy0+cGh5X2FkZHIsCisJCQkJTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKKwkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKKwkJCQkobWlpX2NvbnRyb2wgfAorCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOIHwKKwkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTF9SRVNUQVJUX0FOKSk7CisJfSBlbHNlIHsKKworCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAorCQkJCSAgICAgICZtaWlfY29udHJvbCk7CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJibngyeF9yZXN0YXJ0X2F1dG9uZWcgbWlpX2NvbnRyb2wgYmVmb3JlID0gMHgleFxuIiwKKwkJCSBtaWlfY29udHJvbCk7CisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAorCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkJICAgICAgKG1paV9jb250cm9sIHwKKwkJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX0FOX0VOIHwKKwkJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRpYWxpemVfc2dtaWlfcHJvY2VzcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKQEAgLTE0MjgsNyArMTUwNSw3IEBACiAKIAl9IGVsc2UgeyAvKiBBTiBtb2RlICovCiAJCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBBTiAqLwotCQlibngyeF9yZXN0YXJ0X2F1dG9uZWcocGFyYW1zKTsKKwkJYm54MnhfcmVzdGFydF9hdXRvbmVnKHBhcmFtcywgMCk7CiAJfQogfQogCkBAIC0xNDYwLDIyICsxNTM3LDE5IEBACiAJfQogfQogCi1zdGF0aWMgdTggYm54MnhfZXh0X3BoeV9yZXNvdmVfZmMoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCitzdGF0aWMgdTggYm54MnhfZXh0X3BoeV9yZXNvbHZlX2ZjKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAogCQkJCSAgc3RydWN0IGxpbmtfdmFycyAqdmFycykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1OCBleHRfcGh5X2FkZHI7Ci0JdTE2IGxkX3BhdXNlOwkvKiBsb2NhbCAqLwotCXUxNiBscF9wYXVzZTsJLyogbGluayBwYXJ0bmVyICovCi0JdTE2IGFuX2NvbXBsZXRlOyAvKiBBTiBjb21wbGV0ZSAqLworCXUxNiBsZF9wYXVzZTsJCS8qIGxvY2FsICovCisJdTE2IGxwX3BhdXNlOwkJLyogbGluayBwYXJ0bmVyICovCisJdTE2IGFuX2NvbXBsZXRlOwkvKiBBTiBjb21wbGV0ZSAqLwogCXUxNiBwYXVzZV9yZXN1bHQ7CiAJdTggcmV0ID0gMDsKIAl1MzIgZXh0X3BoeV90eXBlOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7Ci0JZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKLQorCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCS8qIHJlYWQgdHdpY2UgKi8KIApAQCAtMTU3MCw3ICsxNjQ0LDcgQEAKIAkJRFAoTkVUSUZfTVNHX0xJTkssICJwYXVzZV9yZXN1bHQgMHgleFxuIiwgcGF1c2VfcmVzdWx0KTsKIAkJYm54MnhfcGF1c2VfcmVzb2x2ZSh2YXJzLCBwYXVzZV9yZXN1bHQpOwogCX0gZWxzZSBpZiAoKHBhcmFtcy0+cmVxX2Zsb3dfY3RybCA9PSBCTlgyWF9GTE9XX0NUUkxfQVVUTykgJiYKLQkJICAgKGJueDJ4X2V4dF9waHlfcmVzb3ZlX2ZjKHBhcmFtcywgdmFycykpKSB7CisJCSAgIChibngyeF9leHRfcGh5X3Jlc29sdmVfZmMocGFyYW1zLCB2YXJzKSkpIHsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWlmIChwYXJhbXMtPnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pCkBAIC0xNTgxLDEwICsxNjU1LDc3IEBACiAJRFAoTkVUSUZfTVNHX0xJTkssICJmbG93X2N0cmwgMHgleFxuIiwgdmFycy0+Zmxvd19jdHJsKTsKIH0KIAotCitzdGF0aWMgdm9pZCBibngyeF9jaGVja19mYWxsYmFja190b19jbDM3KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiByeF9zdGF0dXMsIHVzdGF0X3ZhbCwgY2wzN19mc21fcmVjaWV2ZWQ7CisJRFAoTkVUSUZfTVNHX0xJTkssICJibngyeF9jaGVja19mYWxsYmFja190b19jbDM3XG4iKTsKKwkvKiBTdGVwIDE6IE1ha2Ugc3VyZSBzaWduYWwgaXMgZGV0ZWN0ZWQgKi8KKwlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUkVHX0JBTktfUlgwLAorCQkJICAgICAgTURJT19SWDBfUlhfU1RBVFVTLAorCQkJICAgICAgJnJ4X3N0YXR1cyk7CisJaWYgKChyeF9zdGF0dXMgJiBNRElPX1JYMF9SWF9TVEFUVVNfU0lHREVUKSAhPQorCSAgICAoTURJT19SWDBfUlhfU1RBVFVTX1NJR0RFVCkpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTaWduYWwgaXMgbm90IGRldGVjdGVkLiBSZXN0b3JpbmcgQ0w3My4iCisJCQkgICAgICJyeF9zdGF0dXMoMHg4MGIwKSA9IDB4JXhcbiIsIHJ4X3N0YXR1cyk7CisJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAorCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAorCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX0FOX0VOKTsKKwkJcmV0dXJuOworCX0KKwkvKiBTdGVwIDI6IENoZWNrIENMNzMgc3RhdGUgbWFjaGluZSAqLworCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX1VTRVJCMCwKKwkJCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDEsCisJCQkgICAgICAmdXN0YXRfdmFsKTsKKwlpZiAoKHVzdGF0X3ZhbCAmCisJICAgICAoTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9MSU5LX1NUQVRVU19DSEVDSyB8CisJICAgICAgTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9BTl9HT09EX0NIRUNLX0JBTTM3KSkgIT0KKwkgICAgKE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDFfTElOS19TVEFUVVNfQ0hFQ0sgfAorCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19VU1RBVDFfQU5fR09PRF9DSEVDS19CQU0zNykpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJDTDczIHN0YXRlLW1hY2hpbmUgaXMgbm90IHN0YWJsZS4gIgorCQkJICAgICAidXN0YXRfdmFsKDB4ODM3MSkgPSAweCV4XG4iLCB1c3RhdF92YWwpOworCQlyZXR1cm47CisJfQorCS8qIFN0ZXAgMzogQ2hlY2sgQ0wzNyBNZXNzYWdlIFBhZ2VzIHJlY2VpdmVkIHRvIGluZGljYXRlIExQCisJc3VwcG9ydHMgb25seSBDTDM3ICovCisJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkgICAgICBNRElPX1JFR19CQU5LX1JFTU9URV9QSFksCisJCQkgICAgICBNRElPX1JFTU9URV9QSFlfTUlTQ19SWF9TVEFUVVMsCisJCQkgICAgICAmY2wzN19mc21fcmVjaWV2ZWQpOworCWlmICgoY2wzN19mc21fcmVjaWV2ZWQgJgorCSAgICAgKE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9PVkVSMUdfTVNHIHwKKwkgICAgIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9CUkNNX09VSV9NU0cpKSAhPQorCSAgICAoTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTX0NMMzdfRlNNX1JFQ0VJVkVEX09WRVIxR19NU0cgfAorCSAgICAgIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9CUkNNX09VSV9NU0cpKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiTm8gQ0wzNyBGU00gd2VyZSByZWNlaXZlZC4gIgorCQkJICAgICAibWlzY19yeF9zdGF0dXMoMHg4MzMwKSA9IDB4JXhcbiIsCisJCQkgY2wzN19mc21fcmVjaWV2ZWQpOworCQlyZXR1cm47CisJfQorCS8qIFRoZSBjb21iaW5lZCBjbDM3L2NsNzMgZnNtIHN0YXRlIGluZm9ybWF0aW9uIGluZGljYXRpbmcgdGhhdCB3ZSBhcmUKKwljb25uZWN0ZWQgdG8gYSBkZXZpY2Ugd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBjbDczLCBidXQgZG9lcyBzdXBwb3J0CisJY2wzNyBCQU0uIEluIHRoaXMgY2FzZSB3ZSBkaXNhYmxlIGNsNzMgYW5kIHJlc3RhcnQgY2wzNyBhdXRvLW5lZyAqLworCS8qIERpc2FibGUgQ0w3MyAqLworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKKwkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAorCQkJICAgICAgMCk7CisJLyogUmVzdGFydCBDTDM3IGF1dG9uZWcgKi8KKwlibngyeF9yZXN0YXJ0X2F1dG9uZWcocGFyYW1zLCAwKTsKKwlEUChORVRJRl9NU0dfTElOSywgIkRpc2FibGluZyBDTDczLCBhbmQgcmVzdGFydGluZyBDTDM3IGF1dG9uZWdcbiIpOworfQogc3RhdGljIHU4IGJueDJ4X2xpbmtfc2V0dGluZ3Nfc3RhdHVzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCi0JCQkJICAgICAgdTMyIGdwX3N0YXR1cykKKwkJCQkgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkJCSAgIHUzMiBncF9zdGF0dXMsCisJCQkJICAgdTggZXh0X3BoeV9saW5rX3VwKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUxNiBuZXdfbGluZV9zcGVlZDsKQEAgLTE2NDUsNyArMTc4Niw3IEBACiAJCQkJICJsaW5rIHNwZWVkIHVuc3VwcG9ydGVkICBncF9zdGF0dXMgMHgleFxuIiwKIAkJCQkgIGdwX3N0YXR1cyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOworCiAJCWNhc2UgR1BfU1RBVFVTXzEwR19LWDQ6CiAJCWNhc2UgR1BfU1RBVFVTXzEwR19ISUc6CiAJCWNhc2UgR1BfU1RBVFVTXzEwR19DWDQ6CkBAIC0xNjgyLDE0ICsxODIzLDIzIEBACiAJCQlEUChORVRJRl9NU0dfTElOSywKIAkJCQkgICJsaW5rIHNwZWVkIHVuc3VwcG9ydGVkIGdwX3N0YXR1cyAweCV4XG4iLAogCQkJCSAgZ3Bfc3RhdHVzKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKIAkJLyogVXBvbiBsaW5rIHNwZWVkIGNoYW5nZSBzZXQgdGhlIE5JRyBpbnRvIGRyYWluIG1vZGUuCiAJCUNvbWVzIHRvIGRlYWxzIHdpdGggcG9zc2libGUgRklGTyBnbGl0Y2ggZHVlIHRvIGNsayBjaGFuZ2UKIAkJd2hlbiBzcGVlZCBpcyBkZWNyZWFzZWQgd2l0aG91dCBsaW5rIGRvd24gaW5kaWNhdG9yICovCiAJCWlmIChuZXdfbGluZV9zcGVlZCAhPSB2YXJzLT5saW5lX3NwZWVkKSB7CisJCQlpZiAoWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZykgIT0KKwkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUICYmCisJCQkgICAgZXh0X3BoeV9saW5rX3VwKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnRlcm5hbCBsaW5rIHNwZWVkICVkIGlzIgorCQkJCQkgICAgIiBkaWZmZXJlbnQgdGhhbiB0aGUgZXh0ZXJuYWwiCisJCQkJCSAgICAiIGxpbmsgc3BlZWQgJWRcbiIsIG5ld19saW5lX3NwZWVkLAorCQkJCQkgIHZhcnMtPmxpbmVfc3BlZWQpOworCQkJCXZhcnMtPnBoeV9saW5rX3VwID0gMDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KIAkJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUKIAkJCQkgICAgKyBwYXJhbXMtPnBvcnQqNCwgMCk7CiAJCQltc2xlZXAoMSk7CkBAIC0xNzAzLDkgKzE4NTMsNyBAQAogCQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CiAJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgfHwKIAkJICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQotCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHx8Ci0JCSAgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09Ci0JCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSkpKSB7CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNikpKSB7CiAJCQl2YXJzLT5hdXRvbmVnID0gQVVUT19ORUdfRU5BQkxFRDsKIAogCQkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgewpAQCAtMTczNiw2ICsxODg0LDEzIEBACiAJCXZhcnMtPmZsb3dfY3RybCA9IEJOWDJYX0ZMT1dfQ1RSTF9OT05FOwogCQl2YXJzLT5hdXRvbmVnID0gQVVUT19ORUdfRElTQUJMRUQ7CiAJCXZhcnMtPm1hY190eXBlID0gTUFDX1RZUEVfTk9ORTsKKworCQlpZiAoKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpICYmCisJCSAgICAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSkpIHsKKwkJCS8qIENoZWNrIHNpZ25hbCBpcyBkZXRlY3RlZCAqLworCQkJYm54MnhfY2hlY2tfZmFsbGJhY2tfdG9fY2wzNyhwYXJhbXMpOworCQl9CiAJfQogCiAJRFAoTkVUSUZfTVNHX0xJTkssICJncF9zdGF0dXMgMHgleCAgcGh5X2xpbmtfdXAgJXggbGluZV9zcGVlZCAleCBcbiIsCkBAIC0xODQwLDcgKzE5OTUsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAJCSAgICAgRXh0ZXJuYWwgUGh5IHNlY3Rpb24gICAgICAgCQkgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZCBibngyeF9od19yZXNldChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0KQordm9pZCBibngyeF9leHRfcGh5X2h3X3Jlc2V0KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQpCiB7CiAJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKIAkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywgcG9ydCk7CkBAIC0xODU0LDkgKzIwMDksOCBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXUzMiBleHRfcGh5X3R5cGU7Ci0JdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCiAJRFAoTkVUSUZfTVNHX0xJTkssICJQb3J0ICV4OiBibngyeF9leHRfcGh5X3Jlc2V0XG4iLCBwYXJhbXMtPnBvcnQpOwogCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGVkIGJ5IEdQSU8gMQpAQCAtMTg3OSw3ICsyMDMzLDcgQEAKIAkJCQkJICBwYXJhbXMtPnBvcnQpOwogCiAJCQkvKiBIVyByZXNldCAqLwotCQkJYm54MnhfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CisJCQlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwYXJhbXMtPnBvcnQpOwogCiAJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKQEAgLTE4ODcsNiArMjA0MSwxMCBAQAogCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4YTA0MCk7CiAJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCQlicmVhazsKKwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CiAKIAkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwpAQCAtMTkwNCwxNiArMjA2MiwxNyBAQAogCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCiAJCQkJICAgICAgIDE8PDE1KTsKLQogCQkJYnJlYWs7CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzJcbiIpOworCiAJCQkvKiBVbnNldCBMb3cgUG93ZXIgTW9kZSBhbmQgU1cgcmVzZXQgKi8KIAkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwogCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKIAkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAogCQkJCQkgIHBhcmFtcy0+cG9ydCk7CiAKLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4MDcyXG4iKTsKIAkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCkBAIC0xOTIxLDggKzIwODAsOSBAQAogCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKIAkJCQkgICAgICAgMTw8MTUpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgotCQkJeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDgwNzNcbiIpOwogCiAJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCkBAIC0xOTMyLDkgKzIwOTIsNiBAQAogCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKIAkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAogCQkJCQkgIHBhcmFtcy0+cG9ydCk7Ci0KLQkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4MDczXG4iKTsKLQkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKQEAgLTE5NDYsMTkgKzIxMDMsMTcgQEAKIAkJCQkJICBwYXJhbXMtPnBvcnQpOwogCiAJCQkvKiBIVyByZXNldCAqLwotCQkJYm54MnhfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7Ci0KKwkJCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CiAJCQlicmVhazsKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6Ci0KIAkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwogCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKIAkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAogCQkJCQkgIHBhcmFtcy0+cG9ydCk7CiAKIAkJCS8qIEhXIHJlc2V0ICovCi0JCQlibngyeF9od19yZXNldChicCwgcGFyYW1zLT5wb3J0KTsKKwkJCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CiAKIAkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCQkgICAgICAgZXh0X3BoeV90eXBlLApAQCAtMTk4NiwyNCArMjE0MSwyMiBAQAogCiAJCWNhc2UgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyOgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXMgNTQ4MlxuIik7Ci0JCQlibngyeF9od19yZXNldChicCwgcGFyYW1zLT5wb3J0KTsKKwkJCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBhcmFtcy0+cG9ydCk7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJRFAoTkVUSUZfTVNHX0xJTkssCi0JCQkJICJCQUQgU2VyRGVzIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCisJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBTZXJEZXMgZXh0X3BoeV9jb25maWcgMHgleFxuIiwKIAkJCQkgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJCQlicmVhazsKIAkJfQogCX0KIH0KIAotCiBzdGF0aWMgdm9pZCBibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCiAJCQkJICAgIHUzMiBzaG1lbV9iYXNlLCB1MzIgc3Bpcm9tX3ZlcikKIHsKLQlEUChORVRJRl9NU0dfTElOSywgIkZXIHZlcnNpb24gMHgleDoweCV4XG4iLAotCQkgKHUxNikoc3Bpcm9tX3Zlcj4+MTYpLCAodTE2KXNwaXJvbV92ZXIpOworCURQKE5FVElGX01TR19MSU5LLCAiRlcgdmVyc2lvbiAweCV4OjB4JXggZm9yIHBvcnQgJWRcbiIsCisJCSAodTE2KShzcGlyb21fdmVyPj4xNiksICh1MTYpc3Bpcm9tX3ZlciwgcG9ydCk7CiAJUkVHX1dSKGJwLCBzaG1lbV9iYXNlICsKIAkJICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKIAkJCSAgICBwb3J0X21iW3BvcnRdLmV4dF9waHlfZndfdmVyc2lvbiksCkBAIC0yMDE1LDYgKzIxNjgsNyBAQAogCQkJCSAgICB1MzIgc2htZW1fYmFzZSkKIHsKIAl1MTYgZndfdmVyMSwgZndfdmVyMjsKKwogCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKQEAgLTIwMjMsMTMgKzIxNzcsMTE2IEBACiAJCQkJKHUzMikoZndfdmVyMTw8MTYgfCBmd192ZXIyKSk7CiB9CiAKKworc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV84NDgxX3NwaXJvbV92ZXJzaW9uKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJCSB1OCBleHRfcGh5X2FkZHIsIHUzMiBzaG1lbV9iYXNlKQoreworCXUxNiB2YWwsIGZ3X3ZlcjEsIGZ3X3ZlcjIsIGNudDsKKwkvKiBGb3IgdGhlIDMyIGJpdHMgcmVnaXN0ZXJzIGluIDg0ODEsIGFjY2VzcyB2aWEgTURJTzJBUk0gaW50ZXJmYWNlLiovCisJLyogKDEpIHNldCByZWdpc3RlciAweGMyMDBfMDAxNChTUElfQlJJREdFX0NUUkxfMikgdG8gMHgwMzAwMDAwMCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxOSwgMHgwMDE0KTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODFBLAorCQkgICAgICAgMHhjMjAwKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODFCLAorCQkgICAgICAgMHgwMDAwKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODFDLAorCQkgICAgICAgMHgwMzAwKTsKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODE3LAorCQkgICAgICAgMHgwMDA5KTsKKworCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAweEE4MTgsCisJCQkgICAgICAmdmFsKTsKKwkJaWYgKHZhbCAmIDEpCisJCQlicmVhazsKKwkJdWRlbGF5KDUpOworCX0KKwlpZiAoY250ID09IDEwMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIlVuYWJsZSB0byByZWFkIDg0ODEgcGh5IGZ3IHZlcnNpb24oMSlcbiIpOworCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKGJwLCBwb3J0LAorCQkJCQlzaG1lbV9iYXNlLCAwKTsKKwkJcmV0dXJuOworCX0KKworCisJLyogMikgcmVhZCByZWdpc3RlciAweGMyMDBfMDAwMCAoU1BJX0ZXX1NUQVRVUykgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCSAgICAgICAweEE4MTksIDB4MDAwMCk7CisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgMHhBODFBLCAweGMyMDApOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4QTgxNywgMHgwMDBBKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspIHsKKwkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgMHhBODE4LAorCQkJICAgICAgJnZhbCk7CisJCWlmICh2YWwgJiAxKQorCQkJYnJlYWs7CisJCXVkZWxheSg1KTsKKwl9CisJaWYgKGNudCA9PSAxMDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gcmVhZCA4NDgxIHBoeSBmdyB2ZXJzaW9uKDIpXG4iKTsKKwkJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcG9ydCwKKwkJCQkJc2htZW1fYmFzZSwgMCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBsb3dlciAxNiBiaXRzIG9mIHRoZSByZWdpc3RlciBTUElfRldfU1RBVFVTICovCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAweEE4MUIsCisJCSAgICAgICZmd192ZXIxKTsKKwkvKiB1cHBlciAxNiBiaXRzIG9mIHJlZ2lzdGVyIFNQSV9GV19TVEFUVVMgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIDB4QTgxQywKKwkJICAgICAgJmZ3X3ZlcjIpOworCisJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcG9ydCwKKwkJCQlzaG1lbV9iYXNlLCAoZndfdmVyMjw8MTYpIHwgZndfdmVyMSk7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzJfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAKIAkvKiBOZWVkIHRvIHdhaXQgMjAwbXMgYWZ0ZXIgcmVzZXQgKi8KQEAgLTIwNzcsOSArMjMzNCw3IEBACiAJLyogVGhpcyBpcyBvbmx5IHJlcXVpcmVkIGZvciA4MDczQTEsIHZlcnNpb24gMTAyIG9ubHkgKi8KIAogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCXUxNiB2YWw7CiAKIAkvKiBSZWFkIDgwNzMgSFcgcmV2aXNpb24qLwpAQCAtMjExMCw5ICsyMzY1LDcgQEAKIHN0YXRpYyB1OCBibngyeF9iY204MDczX3hhdWlfd2Eoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTE2IHZhbCwgY250LCBjbnQxIDsKIAogCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LApAQCAtMjE2OCwxNiArMjQyMSwxNyBAQAogCX0KIAlEUChORVRJRl9NU0dfTElOSywgIldhcm5pbmc6IFhBVUkgd29yay1hcm91bmQgdGltZW91dCAhISFcbiIpOwogCXJldHVybiAtRUlOVkFMOwotCiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKLQkJCQkJICB1OCBleHRfcGh5X2FkZHIsIHUzMiBzaG1lbV9iYXNlKQorc3RhdGljIHZvaWQgYm54MnhfYmNtODA3M19iY204NzI3X2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJCQkgIHU4IGV4dF9waHlfYWRkciwKKwkJCQkJCSAgdTMyIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgdTMyIHNobWVtX2Jhc2UpCiB7CiAJLyogQm9vdCBwb3J0IGZyb20gZXh0ZXJuYWwgUk9NICAqLwogCS8qIEVEQyBncnN0ICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKQEAgLTIxODUsMjEgKzI0MzksMjEgQEAKIAogCS8qIHVjb2RlIHJlYm9vdCBhbmQgcnN0ICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwKIAkJICAgICAgIDB4MDA4Yyk7CiAKIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKIAkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAogCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMSk7CiAKIAkvKiBSZXNldCBpbnRlcm5hbCBtaWNyb3Byb2Nlc3NvciAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCkBAIC0yMjA3LDcgKzI0NjEsNyBAQAogCiAJLyogUmVsZWFzZSBzcnN0IGJpdCAqLwogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCkBAIC0yMjE4LDI0ICsyNDcyLDQxIEBACiAKIAkvKiBDbGVhciBzZXJfYm9vdF9jdGwgYml0ICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDApOwogCiAJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJCWV4dF9waHlfdHlwZSwKIAkJCQlleHRfcGh5X2FkZHIsCiAJCQkJc2htZW1fYmFzZSk7CiB9CiAKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkJICB1OCBleHRfcGh5X2FkZHIsCisJCQkJCSAgdTMyIHNobWVtX2Jhc2UpCit7CisJYm54MnhfYmNtODA3M19iY204NzI3X2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsCisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJCQkgc2htZW1fYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2JjbTg3MjdfZXh0ZXJuYWxfcm9tX2Jvb3Qoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkJICB1OCBleHRfcGh5X2FkZHIsCisJCQkJCSAgdTMyIHNobWVtX2Jhc2UpCit7CisJYm54MnhfYmNtODA3M19iY204NzI3X2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsCisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJCQkgc2htZW1fYmFzZSk7CisKK30KKwogc3RhdGljIHZvaWQgYm54MnhfYmNtODcyNl9leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAogCS8qIE5lZWQgdG8gd2FpdCAxMDBtcyBhZnRlciByZXNldCAqLwpAQCAtMjI1OCw5ICsyNTI5LDEwIEBACiAJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX01JQ1JPX1JFU0VUKTsKIAorCS8qIFNldCBQTEwgcmVnaXN0ZXIgdmFsdWUgdG8gYmUgc2FtZSBsaWtlIGluIFAxMyB2ZXIgKi8KIAlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKIAkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMMiwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19QTExfQ1RSTCwKIAkJICAgICAgIDB4NzNBMCk7CiAKIAkvKiBDbGVhciBzb2Z0IHJlc2V0LgpAQCAtMjI4NSwxNSArMjU1NywxNyBAQAogCQkJCXBhcmFtcy0+c2htZW1fYmFzZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCXU4IGV4dF9waHlfYWRkciwgdTggdHhfZW4pCitzdGF0aWMgdm9pZCBibngyeF9zZnBfc2V0X3RyYW5zbWl0dGVyKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJICAgIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkciwKKwkJCQkgICAgdTggdHhfZW4pCiB7CiAJdTE2IHZhbDsKKwogCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyB0cmFuc21pdHRlciB0eF9lbj0leCBmb3IgcG9ydCAleFxuIiwKIAkJIHR4X2VuLCBwb3J0KTsKIAkvKiBEaXNhYmxlL0VuYWJsZSB0cmFuc21pdHRlciAoIFRYIGxhc2VyIG9mIHRoZSBTRlArIG1vZHVsZS4pKi8KIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLApAQCAtMjMwNSwyMyArMjU3OSwyMyBAQAogCQl2YWwgfD0gKDE8PDE1KTsKIAogCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCiAJCSAgICAgICB2YWwpOwogfQogCi0KLXN0YXRpYyB1OCBibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MTYgYWRkciwKLQkJCQkgICAgIHU4IGJ5dGVfY250LCB1OCAqb19idWYpIHsKK3N0YXRpYyB1OCBibngyeF84NzI2X3JlYWRfc2ZwX21vZHVsZV9lZXByb20oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJCSAgdTE2IGFkZHIsIHU4IGJ5dGVfY250LCB1OCAqb19idWYpCit7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTE2IHZhbCwgaTsKKwl1MTYgdmFsID0gMDsKKwl1MTYgaTsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKIAlpZiAoYnl0ZV9jbnQgPiAxNikgewogCQlEUChORVRJRl9NU0dfTElOSywgIlJlYWRpbmcgZnJvbSBlZXByb20gaXMiCiAJCQkgICAgIiBpcyBsaW1pdGVkIHRvIDB4ZlxuIik7CkBAIC0yMzMyLDcgKzI2MDYsNyBAQAogCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9CWVRFX0NOVCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQllURV9DTlQsCiAJCSAgICAgICAoYnl0ZV9jbnQgfCAweGEwMDApKTsKIAogCS8qIFNldCB0aGUgcmVhZCBjb21tYW5kIGFkZHJlc3MgKi8KQEAgLTIzNDAsNyArMjYxNCw3IEBACiAJCSAgICAgICBleHRfcGh5X3R5cGUsCiAJCSAgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX01FTV9BRERSLAorCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9NRU1fQUREUiwKIAkJICAgICAgIGFkZHIpOwogCiAJLyogQWN0aXZhdGUgcmVhZCBjb21tYW5kICovCkBAIC0yMzQ4LDcgKzI2MjIsNyBAQAogCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLAorCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMLAogCQkgICAgICAgMHgyYzBmKTsKIAogCS8qIFdhaXQgdXAgdG8gNTAwdXMgZm9yIGNvbW1hbmQgY29tcGxldGUgc3RhdHVzICovCkBAIC0yMzU3LDE4ICsyNjMxLDE4IEBACiAJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwsICZ2YWwpOwotCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spID09Ci0JCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpCisJCQkgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0NUUkwsICZ2YWwpOworCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KKwkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKQogCQkJYnJlYWs7CiAJCXVkZWxheSg1KTsKIAl9CiAKLQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spICE9Ci0JCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpIHsKKwlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgIT0KKwkJICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKSB7CiAJCURQKE5FVElGX01TR19MSU5LLAogCQkJICJHb3QgYmFkIHN0YXR1cyAweCV4IHdoZW4gcmVhZGluZyBmcm9tIFNGUCsgRUVQUk9NXG4iLAotCQkJICh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSk7CisJCQkgKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIzODcsMjkgKzI2NjEsMTQ1IEBACiAJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwsICZ2YWwpOwotCQlpZiAoKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0spID09Ci0JCSAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfSURMRSkKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CisJCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSURMRSkKIAkJCXJldHVybiAwOzsKIAkJbXNsZWVwKDEpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotCi1zdGF0aWMgdTggYm54MnhfZ2V0X3NmcF9tb2R1bGVfdHlwZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKLQkJCQkgIHU4ICptb2R1bGVfdHlwZSkKK3N0YXRpYyB1OCBibngyeF84NzI3X3JlYWRfc2ZwX21vZHVsZV9lZXByb20oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJCSAgdTE2IGFkZHIsIHU4IGJ5dGVfY250LCB1OCAqb19idWYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggdmFsOwotCSptb2R1bGVfdHlwZSA9IFNGUF9NT0RVTEVfVFlQRV9VTktOT1dOOworCXUxNiB2YWwsIGk7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKKwlpZiAoYnl0ZV9jbnQgPiAxNikgeworCQlEUChORVRJRl9NU0dfTElOSywgIlJlYWRpbmcgZnJvbSBlZXByb20gaXMiCisJCQkgICAgIiBpcyBsaW1pdGVkIHRvIDB4ZlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE5lZWQgdG8gcmVhZCBmcm9tIDEuODAwMCB0byBjbGVhciBpdCAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMLAorCQkgICAgICAmdmFsKTsKKworCS8qIFNldCB0aGUgcmVhZCBjb21tYW5kIGJ5dGUgY291bnQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX0JZVEVfQ05ULAorCQkgICAgICAgKChieXRlX2NudCA8IDIpID8gMiA6IGJ5dGVfY250KSk7CisKKwkvKiBTZXQgdGhlIHJlYWQgY29tbWFuZCBhZGRyZXNzICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9NRU1fQUREUiwKKwkJICAgICAgIGFkZHIpOworCS8qIFNldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIDB4ODAwNCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX0RBVEFfQlVGKTsKKworCS8qIEFjdGl2YXRlIHJlYWQgY29tbWFuZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwKKwkJICAgICAgIDB4ODAwMik7CisJLyogV2FpdCBhcHByb3ByaWF0ZSB0aW1lIGZvciB0d28td2lyZSBjb21tYW5kIHRvIGZpbmlzaCBiZWZvcmUKKwlwb2xsaW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwltc2xlZXAoMSk7CisKKwkvKiBXYWl0IHVwIHRvIDUwMHVzIGZvciBjb21tYW5kIGNvbXBsZXRlIHN0YXR1cyAqLworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CisJCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpCisJCQlicmVhazsKKwkJdWRlbGF5KDUpOworCX0KKworCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSAhPQorCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfQ09NUExFVEUpIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkgIkdvdCBiYWQgc3RhdHVzIDB4JXggd2hlbiByZWFkaW5nIGZyb20gU0ZQKyBFRVBST01cbiIsCisJCQkgKHZhbCAmIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBSZWFkIHRoZSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYnl0ZV9jbnQ7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX0RBVEFfQlVGICsgaSwgJnZhbCk7CisJCW9fYnVmW2ldID0gKHU4KSh2YWwgJiBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX01BU0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgeworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CisJCWlmICgodmFsICYgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSA9PQorCQkgICAgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSURMRSkKKwkJCXJldHVybiAwOzsKKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCit1OCBibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MTYgYWRkciwKKwkJCQkgICAgIHU4IGJ5dGVfY250LCB1OCAqb19idWYpCit7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KQorCQlyZXR1cm4gYm54MnhfODcyNl9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywgYWRkciwKKwkJCQkJCSAgICAgICBieXRlX2NudCwgb19idWYpOworCWVsc2UgaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3KQorCQlyZXR1cm4gYm54MnhfODcyN19yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywgYWRkciwKKwkJCQkJCSAgICAgICBieXRlX2NudCwgb19idWYpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdTggYm54MnhfZ2V0X2VkY19tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgdTE2ICplZGNfbW9kZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCB2YWwsIGNoZWNrX2xpbWl0aW5nX21vZGUgPSAwOworCSplZGNfbW9kZSA9IEVEQ19NT0RFX0xJTUlUSU5HOwogCiAJLyogRmlyc3QgY2hlY2sgZm9yIGNvcHBlciBjYWJsZSAqLwogCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKIAkJCQkgICAgICAgU0ZQX0VFUFJPTV9DT05fVFlQRV9BRERSLAogCQkJCSAgICAgICAxLAogCQkJCSAgICAgICAmdmFsKSAhPSAwKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSBTRlArIG1vZHVsZSBFRVBST00iKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBmcm9tIFNGUCsgbW9kdWxlIEVFUFJPTVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjQxNyw2ICsyODA3LDcgQEAKIAljYXNlIFNGUF9FRVBST01fQ09OX1RZUEVfVkFMX0NPUFBFUjoKIAl7CiAJCXU4IGNvcHBlcl9tb2R1bGVfdHlwZTsKKwogCQkvKiBDaGVjayBpZiBpdHMgYWN0aXZlIGNhYmxlKCBpbmNsdWRlcyBTRlArIG1vZHVsZSkKIAkJb2YgcGFzc2l2ZSBjYWJsZSovCiAJCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKQEAgLTI0MzMsMTMgKzI4MjQsMTMgQEAKIAkJaWYgKGNvcHBlcl9tb2R1bGVfdHlwZSAmCiAJCSAgICBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfQUNUSVZFKSB7CiAJCQlEUChORVRJRl9NU0dfTElOSywgIkFjdGl2ZSBDb3BwZXIgY2FibGUgZGV0ZWN0ZWRcbiIpOwotCQkJKm1vZHVsZV90eXBlID0gU0ZQX01PRFVMRV9UWVBFX0FDVElWRV9DT1BQRVJfQ0FCTEU7CisJCQljaGVja19saW1pdGluZ19tb2RlID0gMTsKIAkJfSBlbHNlIGlmIChjb3BwZXJfbW9kdWxlX3R5cGUgJgogCQkJU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX1BBU1NJVkUpIHsKIAkJCQlEUChORVRJRl9NU0dfTElOSywgIlBhc3NpdmUgQ29wcGVyIgogCQkJCQkgICAgIiBjYWJsZSBkZXRlY3RlZFxuIik7Ci0JCQkJKm1vZHVsZV90eXBlID0KLQkJCQkgICAgICBTRlBfTU9EVUxFX1RZUEVfUEFTU0lWRV9DT1BQRVJfQ0FCTEU7CisJCQkJKmVkY19tb2RlID0KKwkJCQkgICAgICBFRENfTU9ERV9QQVNTSVZFX0RBQzsKIAkJfSBlbHNlIHsKIAkJCURQKE5FVElGX01TR19MSU5LLCAiVW5rbm93biBjb3BwZXItY2FibGUtIgogCQkJCSAgICAgInR5cGUgMHgleCAhISFcbiIsIGNvcHBlcl9tb2R1bGVfdHlwZSk7CkBAIC0yNDQ5LDk3ICsyODQwLDk3IEBACiAJfQogCWNhc2UgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfTEM6CiAJCURQKE5FVElGX01TR19MSU5LLCAiT3B0aWMgbW9kdWxlIGRldGVjdGVkXG4iKTsKLQkJKm1vZHVsZV90eXBlID0gU0ZQX01PRFVMRV9UWVBFX0xDOworCQljaGVja19saW1pdGluZ19tb2RlID0gMTsKIAkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlEUChORVRJRl9NU0dfTElOSywgIlVuYWJsZSB0byBkZXRlcm1pbmUgbW9kdWxlIHR5cGUgMHgleCAhISFcbiIsCiAJCQkgdmFsKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJaWYgKGNoZWNrX2xpbWl0aW5nX21vZGUpIHsKKwkJdTggb3B0aW9uc1tTRlBfRUVQUk9NX09QVElPTlNfU0laRV07CisJCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkJICAgICAgIFNGUF9FRVBST01fT1BUSU9OU19BRERSLAorCQkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUsCisJCQkJCSAgICAgICBvcHRpb25zKSAhPSAwKSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byByZWFkIE9wdGlvbiIKKwkJCQkiIGZpZWxkIGZyb20gbW9kdWxlIEVFUFJPTVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoKG9wdGlvbnNbMF0gJiBTRlBfRUVQUk9NX09QVElPTlNfTElORUFSX1JYX09VVF9NQVNLKSkKKwkJCSplZGNfbW9kZSA9IEVEQ19NT0RFX0xJTkVBUjsKKwkJZWxzZQorCQkJKmVkY19tb2RlID0gRURDX01PREVfTElNSVRJTkc7CisJfQorCURQKE5FVElGX01TR19MSU5LLCAiRURDIG1vZGUgaXMgc2V0IHRvIDB4JXhcbiIsICplZGNfbW9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyogVGhpcyBmdW5jdGlvbiByZWFkIHRoZSByZWxldmFudCBmaWVsZCBmcm9tIHRoZSBtb2R1bGUgKCBTRlArICksCiAJYW5kIHZlcmlmeSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIGJvYXJkICovCi1zdGF0aWMgdTggYm54MnhfdmVyaWZ5X3NmcF9tb2R1bGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJdTggbW9kdWxlX3R5cGUpCitzdGF0aWMgdTggYm54MnhfdmVyaWZ5X3NmcF9tb2R1bGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7Ci0JdTggKnN0cl9wLCAqdG1wX2J1ZjsKLQl1MTYgaTsKKwl1MzIgdmFsOworCXUzMiBmd19yZXNwOworCWNoYXIgdmVuZG9yX25hbWVbU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFKzFdOworCWNoYXIgdmVuZG9yX3BuW1NGUF9FRVBST01fUEFSVF9OT19TSVpFKzFdOwogCi0jZGVmaW5lIENPTVBMSUFOQ0VfU1RSX0NOVCA2Ci0JdTggKmNvbXBsaWFuY2Vfc3RyW10gPSB7IkJyb2FkY29tIiwgIkpEU1UiLCAiTW9sZXggSW5jIiwgIlBJQ09MSUdIVCIsCi0JCSJGSU5JU0FSIENPUlAuICAgIiwgIkFtcGhlbm9sIn07Ci0JdTggYnVmW1NGUF9FRVBST01fVkVORE9SX05BTUVfU0laRV07Ci0JLyogUGFzc2l2ZSBDb3BwZXIgY2FibGVzIGFyZSBhbGxvd2VkIHRvIHBhcnRpY2lwYXRlLAotCXNpbmNlIHRoZSBtb2R1bGUgaXMgaGFyZHdpcmVkIHRvIHRoZSBjb3BwZXIgY2FibGUgKi8KLQotCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgotCSAgICAgRkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRCkpIHsKKwl2YWwgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCQkgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZGV2X2luZm8uCisJCQkJICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uY29uZmlnKSk7CisJaWYgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KKwkgICAgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX05PX0VORk9SQ0VNRU5UKSB7CiAJCURQKE5FVElGX01TR19MSU5LLCAiTk9UIGVuZm9yY2luZyBtb2R1bGUgdmVyaWZpY2F0aW9uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKG1vZHVsZV90eXBlICE9IFNGUF9NT0RVTEVfVFlQRV9MQykgewotCQlEUChORVRJRl9NU0dfTElOSywgIk5vIG5lZWQgdG8gdmVyaWZ5IGNvcHBlciBjYWJsZVxuIik7CisJLyogQXNrIHRoZSBGVyB0byB2YWxpZGF0ZSB0aGUgbW9kdWxlICovCisJaWYgKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJICAgICAgRkVBVFVSRV9DT05GSUdfQkNfU1VQUE9SVFNfT1BUX01ETF9WUkZZKSkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkZXIGRvZXMgbm90IHN1cHBvcnQgT1BUIE1ETCAiCisJCQkgICAgInZlcmlmaWNhdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZ3X3Jlc3AgPSBibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVlJGWV9PUFRfTURMKTsKKwlpZiAoZndfcmVzcCA9PSBGV19NU0dfQ09ERV9WUkZZX09QVF9NRExfU1VDQ0VTUykgeworCQlEUChORVRJRl9NU0dfTElOSywgIkFwcHJvdmVkIG1vZHVsZVxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCS8qIEluIGNhc2Ugb2Ygbm9uIGNvcHBlciBjYWJsZSBvciBBY3RpdmUgY29wcGVyIGNhYmxlLAotCQl2ZXJpZnkgdGhhdCB0aGUgU0ZQKyBtb2R1bGUgaXMgY29tcGxpYW50IHdpdGggdGhpcyBib2FyZCovCisJLyogZm9ybWF0IHRoZSB3YXJuaW5nIG1lc3NhZ2UgKi8KIAlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCiAJCQkJICAgICAgIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUiwKIAkJCQkgICAgICAgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFLAotCQkJCSAgICAgICBidWYpICE9IDApIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBWZW5kb3ItTmFtZSBmcm9tIgotCQkJICAgICIgbW9kdWxlIEVFUFJPTVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgQ09NUExJQU5DRV9TVFJfQ05UOyBpKyspIHsKLQkJc3RyX3AgPSBjb21wbGlhbmNlX3N0cltpXTsKLQkJdG1wX2J1ZiA9IGJ1ZjsKLQkJd2hpbGUgKCpzdHJfcCkgewotCQkJaWYgKCh1OCkoKnRtcF9idWYpICE9ICh1OCkoKnN0cl9wKSkKLQkJCQlicmVhazsKLQkJCXN0cl9wKys7Ci0JCQl0bXBfYnVmKys7Ci0JCX0KKwkJCQkgICAgICAgKHU4ICopdmVuZG9yX25hbWUpKQorCQl2ZW5kb3JfbmFtZVswXSA9ICdcMCc7CisJZWxzZQorCQl2ZW5kb3JfbmFtZVtTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkVdID0gJ1wwJzsKKwlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJICAgICAgIFNGUF9FRVBST01fUEFSVF9OT19BRERSLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX1BBUlRfTk9fU0laRSwKKwkJCQkgICAgICAgKHU4ICopdmVuZG9yX3BuKSkKKwkJdmVuZG9yX3BuWzBdID0gJ1wwJzsKKwllbHNlCisJCXZlbmRvcl9wbltTRlBfRUVQUk9NX1BBUlRfTk9fU0laRV0gPSAnXDAnOwogCi0JCWlmICghKCpzdHJfcCkpIHsKLQkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBNb2R1bGUgdmVyaWZpZWQsICIKLQkJCQkgICAgICJpbmRleD0leFxuIiwgaSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlEUChORVRJRl9NU0dfTElOSywgIkluY29tcGxpYW50IFNGUCsgbW9kdWxlLiBEaXNhYmxlIG1vZHVsZSAhISFcbiIpOworCXByaW50ayhLRVJOX0lORk8gUEZYICAiV2FybmluZzogIgorCQkJICJVbnF1YWxpZmllZCBTRlArIG1vZHVsZSAiCisJCQkgImRldGVjdGVkIG9uICVzLCBQb3J0ICVkIGZyb20gJXMgcGFydCBudW1iZXIgJXNcbiIKKwkJCSwgYnAtPmRldi0+bmFtZSwgcGFyYW1zLT5wb3J0LAorCQkJdmVuZG9yX25hbWUsIHZlbmRvcl9wbik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLQogc3RhdGljIHU4IGJueDJ4X2JjbTg3MjZfc2V0X2xpbWl0aW5nX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJCXU4IG1vZHVsZV90eXBlKQorCQkJCQl1MTYgZWRjX21vZGUpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQl1OCBvcHRpb25zW1NGUF9FRVBST01fT1BUSU9OU19TSVpFXTsKLQl1OCBsaW1pdGluZ19tb2RlOwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MTYgY3VyX2xpbWl0aW5nX21vZGU7Ci0JaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAotCQkJCSAgICAgICBTRlBfRUVQUk9NX09QVElPTlNfQUREUiwKLQkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX1NJWkUsCi0JCQkJICAgICAgIG9wdGlvbnMpICE9IDApIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gcmVhZCBPcHRpb24gZmllbGQgZnJvbSIKLQkJCSAgICAiIG1vZHVsZSBFRVBST01cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JbGltaXRpbmdfbW9kZSA9ICEob3B0aW9uc1swXSAmCi0JCQkgIFNGUF9FRVBST01fT1BUSU9OU19MSU5FQVJfUlhfT1VUX01BU0spOwogCiAJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAogCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LApAQCAtMjU1MCwyNiArMjk0MSwyMyBAQAogCURQKE5FVElGX01TR19MSU5LLCAiQ3VycmVudCBMaW1pdGluZyBtb2RlIGlzIDB4JXhcbiIsCiAJCSBjdXJfbGltaXRpbmdfbW9kZSk7CiAKLQlpZiAobGltaXRpbmdfbW9kZSAmJgotCSAgICAobW9kdWxlX3R5cGUgIT0gU0ZQX01PRFVMRV9UWVBFX1BBU1NJVkVfQ09QUEVSX0NBQkxFKSkgeworCWlmIChlZGNfbW9kZSA9PSBFRENfTU9ERV9MSU1JVElORykgewogCQlEUChORVRJRl9NU0dfTElOSywKLQkJCSAiTW9kdWxlIG9wdGlvbnMgPSAweCV4LlNldHRpbmcgTElNSVRJTkcgTU9ERVxuIiwKLQkJCSBvcHRpb25zWzBdKTsKKwkJCSAiU2V0dGluZyBMSU1JVElORyBNT0RFXG4iKTsKIAkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKIAkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAogCQkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCSAgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCi0JCQkgICAgICAgU0ZQX0xJTUlUSU5HX01PREVfVkFMVUUpOworCQkJICAgICAgIEVEQ19NT0RFX0xJTUlUSU5HKTsKIAl9IGVsc2UgeyAvKiBMUk0gbW9kZSAoIGRlZmF1bHQgKSovCiAKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgb3B0aW9ucyA9IDB4JXguU2V0dGluZyBMUk0gTU9ERVxuIiwKLQkJCSBvcHRpb25zWzBdKTsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIExSTSBNT0RFXG4iKTsKIAogCQkvKiBDaGFuZ2luZyB0byBMUk0gbW9kZSB0YWtlcyBxdWl0ZSBmZXcgc2Vjb25kcy4KIAkJU28gZG8gaXQgb25seSBpZiBjdXJyZW50IG1vZGUgaXMgbGltaXRpbmcKIAkJKCBkZWZhdWx0IGlzIExSTSApKi8KLQkJaWYgKGN1cl9saW1pdGluZ19tb2RlICE9IFNGUF9MSU1JVElOR19NT0RFX1ZBTFVFKQorCQlpZiAoY3VyX2xpbWl0aW5nX21vZGUgIT0gRURDX01PREVfTElNSVRJTkcpCiAJCQlyZXR1cm4gMDsKIAogCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LApAQCAtMjYwMCw2ICsyOTg4LDU0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1OCBibngyeF9iY204NzI3X3NldF9saW1pdGluZ19tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCQl1MTYgZWRjX21vZGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1MTYgcGh5X2lkZW50aWZpZXI7CisJdTE2IHJvbV92ZXIyX3ZhbDsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJICAgICAgICZwaHlfaWRlbnRpZmllcik7CisKKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLAorCQkgICAgICAgKHBoeV9pZGVudGlmaWVyICYgfigxPDw5KSkpOworCisJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAorCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCisJCSAgICAgICZyb21fdmVyMl92YWwpOworCS8qIEtlZXAgdGhlIE1TQiA4LWJpdHMsIGFuZCBzZXQgdGhlIExTQiA4LWJpdHMgd2l0aCB0aGUgZWRjX21vZGUgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkgICAgICAgKHJvbV92ZXIyX3ZhbCAmIDB4ZmYwMCkgfCAoZWRjX21vZGUgJiAweDAwZmYpKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCSAgICAgICAocGh5X2lkZW50aWZpZXIgfCAoMTw8OSkpKTsKKworCXJldHVybiAwOworfQorCisKIHN0YXRpYyB1OCBibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXU4IHZhbDsKQEAgLTI2MTksNjEgKzMwNTUsMTEyIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyB2b2lkIGJueDJ4Xzg3MjdfcG93ZXJfbW9kdWxlKHN0cnVjdCBibngyeCAqYnAsCisJCQkJICBzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHU4IGV4dF9waHlfYWRkciwgdTggaXNfcG93ZXJfdXApIHsKKwkvKiBNYWtlIHN1cmUgR1BJT3MgYXJlIG5vdCB1c2luZyBmb3IgTEVEIG1vZGUgKi8KKwl1MTYgdmFsOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJLyoKKwkgKiBJbiB0aGUgR1BJTyByZWdpc3RlciwgYml0IDQgaXMgdXNlIHRvIGRldGVtaW5lIGlmIHRoZSBHUElPcyBhcmUKKwkgKiBvcGVyYXRpbmcgYXMgSU5QVVQgb3IgYXMgT1VUUFVULiBCaXQgMSBpcyBmb3IgaW5wdXQsIGFuZCAwIGZvcgorCSAqIG91dHB1dAorCSAqIEJpdHMgMC0xIGRldGVybWluZSB0aGUgZ3Bpb3MgdmFsdWUgZm9yIE9VVFBVVCBpbiBjYXNlIGJpdCA0IHZhbCBpcyAwCisJICogQml0cyA4LTkgZGV0ZXJtaW5lIHRoZSBncGlvcyB2YWx1ZSBmb3IgSU5QVVQgaW4gY2FzZSBiaXQgNCB2YWwgaXMgMQorCSAqIHdoZXJlIHRoZSAxc3QgYml0IGlzIHRoZSBvdmVyLWN1cnJlbnQob25seSBpbnB1dCksIGFuZCAybmQgYml0IGlzCisJICogZm9yIHBvd2VyKCBvbmx5IG91dHB1dCApCisJKi8KKworCS8qCisJICogSW4gY2FzZSBvZiBOT0MgZmVhdHVyZSBpcyBkaXNhYmxlZCBhbmQgcG93ZXIgaXMgdXAsIHNldCBHUElPIGNvbnRyb2wKKwkgKiAgYXMgaW5wdXQgdG8gZW5hYmxlIGxpc3RlbmluZyBvZiBvdmVyLWN1cnJlbnQgaW5kaWNhdGlvbgorCSAqLworCisJaWYgKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJICAgICAgRkVBVFVSRV9DT05GSUdfQkNNODcyN19OT0MpICYmIGlzX3Bvd2VyX3VwKQorCQl2YWwgPSAoMTw8NCk7CisJZWxzZQorCQkvKgorCQkgKiBTZXQgR1BJTyBjb250cm9sIHRvIE9VVFBVVCwgYW5kIHNldCB0aGUgcG93ZXIgYml0CisJCSAqIHRvIGFjY29yZGluZyB0byB0aGUgaXNfcG93ZXJfdXAKKwkJICovCisJCXZhbCA9ICgoIShpc19wb3dlcl91cCkpIDw8IDEpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X0dQSU9fQ1RSTCwKKwkJICAgICAgIHZhbCk7Cit9CisKIHN0YXRpYyB1OCBibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQl1OCBtb2R1bGVfdHlwZTsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUxNiBlZGNfbW9kZTsKKwl1OCByYyA9IDA7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwotCi0JaWYgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIGRldGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgIgotCQkJICAgICJmb3IgdGhpcyBwaHlcbiIpOwotCQlyZXR1cm4gMDsKLQl9CisJdTMyIHZhbCA9IFJFR19SRChicCwgcGFyYW1zLT5zaG1lbV9iYXNlICsKKwkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwgZGV2X2luZm8uCisJCQkJICAgICBwb3J0X2ZlYXR1cmVfY29uZmlnW3BhcmFtcy0+cG9ydF0uY29uZmlnKSk7CiAKIAlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIHBsdWdnZWQgaW4vb3V0IGRldGVjdGVkIG9uIHBvcnQgJWRcbiIsCiAJCSBwYXJhbXMtPnBvcnQpOwogCi0JaWYgKGJueDJ4X2dldF9zZnBfbW9kdWxlX3R5cGUocGFyYW1zLAotCQkJCSAgICAmbW9kdWxlX3R5cGUpICE9IDApIHsKKwlpZiAoYm54MnhfZ2V0X2VkY19tb2RlKHBhcmFtcywgJmVkY19tb2RlKSAhPSAwKSB7CiAJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIGdldCB2YWxpZCBtb2R1bGUgdHlwZVxuIik7Ci0JCWlmICghKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgotCQkgICAgICBGRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVEKSkgewotCQkJLyogSW4gY2FzZSBtb2R1bGUgZGV0ZWN0aW9uIGlzIGRpc2FibGVkLCBpdCB0cnlzIHRvCi0JCQlsaW5rIHVwLiBUaGUgaXNzdWUgdGhhdCBjYW4gaGFwcGVuIGhlcmUgaXMgTFJNIC8KLQkJCUxJTUlUSU5HIG1vZGUgd2hpY2ggc2V0IGFjY29yZGluZyB0byB0aGUgbW9kdWxlLXR5cGUqLwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJVbmFibGUgdG8gcmVhZCBtb2R1bGUtdHlwZS4iCi0JCQkJICAgICJQcm9iYWJseSBkdWUgdG8gQml0IFN0cmV0Y2hpbmcuIgotCQkJCSAgICAiIFByb2NlZWRpbmcuLi5cbiIpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgaWYgKGJueDJ4X3ZlcmlmeV9zZnBfbW9kdWxlKHBhcmFtcywgbW9kdWxlX3R5cGUpICE9CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoYm54MnhfdmVyaWZ5X3NmcF9tb2R1bGUocGFyYW1zKSAhPQogCQkgICAwKSB7CiAJCS8qIGNoZWNrIFNGUCsgbW9kdWxlIGNvbXBhdGliaWxpdHkgKi8KIAkJRFAoTkVUSUZfTVNHX0xJTkssICJNb2R1bGUgdmVyaWZpY2F0aW9uIGZhaWxlZCEhXG4iKTsKKwkJcmMgPSAtRUlOVkFMOwogCQkvKiBUdXJuIG9uIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWQgKi8KIAkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKIAkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKIAkJCQkgIHBhcmFtcy0+cG9ydCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpZiAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3KSAmJgorCQkgICAgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KKwkJICAgICBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfUE9XRVJfRE9XTikpIHsKKwkJCS8qIFNodXRkb3duIFNGUCsgbW9kdWxlICovCisJCQlEUChORVRJRl9NU0dfTElOSywgIlNodXRkb3duIFNGUCsgbW9kdWxlISFcbiIpOworCQkJYm54MnhfODcyN19wb3dlcl9tb2R1bGUoYnAsIHBhcmFtcywKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLCAwKTsKKwkJCXJldHVybiByYzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFR1cm4gb2ZmIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWQgKi8KKwkJRFAoTkVUSUZfTVNHX0xJTkssICJUdXJuIG9mZiBmYXVsdCBtb2R1bGUtZGV0ZWN0ZWQgbGVkXG4iKTsKKwkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0xPVywKKwkJCQkJICBwYXJhbXMtPnBvcnQpOwogCX0KIAotCS8qIFR1cm4gb2ZmIGZhdWx0IG1vZHVsZS1kZXRlY3RlZCBsZWQgKi8KLQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0xPVywKLQkJCSAgcGFyYW1zLT5wb3J0KTsKKwkvKiBwb3dlciB1cCB0aGUgU0ZQIG1vZHVsZSAqLworCWlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNykKKwkJYm54MnhfODcyN19wb3dlcl9tb2R1bGUoYnAsIHBhcmFtcywgZXh0X3BoeV9hZGRyLCAxKTsKIAotCS8qIENoZWNrIGFuZCBzZXQgbGltaXRpbmcgbW9kZSAvIExSTSBtb2RlICovCi0JYm54MnhfYmNtODcyNl9zZXRfbGltaXRpbmdfbW9kZShwYXJhbXMsIG1vZHVsZV90eXBlKTsKKwkvKiBDaGVjayBhbmQgc2V0IGxpbWl0aW5nIG1vZGUgLyBMUk0gbW9kZSBvbiA4NzI2LgorCU9uIDg3MjcgaXQgaXMgZG9uZSBhdXRvbWF0aWNhbGx5ICovCisJaWYgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KQorCQlibngyeF9iY204NzI2X3NldF9saW1pdGluZ19tb2RlKHBhcmFtcywgZWRjX21vZGUpOworCWVsc2UKKwkJYm54MnhfYmNtODcyN19zZXRfbGltaXRpbmdfbW9kZShwYXJhbXMsIGVkY19tb2RlKTsKKwkvKgorCSAqIEVuYWJsZSB0cmFuc21pdCBmb3IgdGhpcyBtb2R1bGUgaWYgdGhlIG1vZHVsZSBpcyBhcHByb3ZlZCwgb3IKKwkgKiBpZiB1bmFwcHJvdmVkIG1vZHVsZXMgc2hvdWxkIGFsc28gZW5hYmxlIHRoZSBUeCBsYXNlcgorCSAqLworCWlmIChyYyA9PSAwIHx8CisJICAgICh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgIT0KKwkgICAgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVfVFhfTEFTRVIpCisJCWJueDJ4X3NmcF9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIDEpOworCWVsc2UKKwkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQlleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwgMCk7CiAKLQkvKiBFbmFibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlICovCi0JYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgZXh0X3BoeV9hZGRyLCAxKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7CiB9CiAKIHZvaWQgYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQpAQCAtMjY4MSw2ICszMTY4LDcgQEAKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZ3Bpb192YWw7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwogCS8qIFNldCB2YWxpZCBtb2R1bGUgbGVkIG9mZiAqLwogCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCiAJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKQEAgLTI2OTYsMjIgKzMxODQsMzAgQEAKIAkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfQ0xSLAogCQkJCSAgICAgIHBvcnQpOwogCi0JCWlmIChibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHBhcmFtcykKLQkJICAgID09IDApCisJCWlmIChibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHBhcmFtcykgPT0KKwkJICAgIDApCiAJCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOwogCQllbHNlCiAJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxuIik7CiAJfSBlbHNlIHsKLQkJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQkgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJCXUzMiBleHRfcGh5X3R5cGUgPQorCQkJWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisJCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLCBkZXZfaW5mby4KKwkJCQkJICAgICAgcG9ydF9mZWF0dXJlX2NvbmZpZ1twYXJhbXMtPnBvcnRdLgorCQkJCQkgICAgICBjb25maWcpKTsKKwogCQlibngyeF9zZXRfZ3Bpb19pbnQoYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMywKIAkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfU0VULAogCQkJCSAgICAgIHBvcnQpOwogCQkvKiBNb2R1bGUgd2FzIHBsdWdnZWQgb3V0LiAqLwogCQkvKiBEaXNhYmxlIHRyYW5zbWl0IGZvciB0aGlzIG1vZHVsZSAqLwotCQlibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkgICAgZXh0X3BoeV9hZGRyLCAwKTsKKwkJaWYgKCh2YWwgJiBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfTUFTSykgPT0KKwkJICAgIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFX1RYX0xBU0VSKQorCQkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIDApOwogCX0KIH0KIApAQCAtMjcxOSw5ICszMjE1LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OwotCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTggZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCiAJLyogRm9yY2UgS1Igb3IgS1ggKi8KQEAgLTI3NDIsMTQgKzMyMzYsMTMgQEAKIAkJICAgICAgIE1ESU9fQU5fUkVHX0NUUkwsCiAJCSAgICAgICAweDAwMDApOwogfQorCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CiAJdTE2IHZhbDsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAKIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTI4MTEsMTIgKzMzMDQsOSBAQAogc3RhdGljIHZvaWQgYm54MnhfODA3M19zZXRfcGF1c2VfY2wzNyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKIAkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCiB7Ci0KIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MTYgY2wzN192YWw7Ci0JdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwl1OCBleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAKIAlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTI4NTksOSArMzM0OSw3IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTE2IHZhbDsKLQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAogCS8qIHJlYWQgbW9kaWZ5IHdyaXRlIHBhdXNlIGFkdmVydGl6aW5nICovCkBAIC0yOTE4LDEwICszNDA2LDEzNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9waHkoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJc3RydWN0IGxpbmtfdmFycyAqdmFycykKKworc3RhdGljIHZvaWQgYm54MnhfODQ4MV9zZXRfbGVkNChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkcikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKworCS8qIFBIWUNfQ1RMX0xFRF9DVEwgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLCAweGE0ODIpOworCisJLyogVW5tYXNrIExFRDQgZm9yIDEwRyBsaW5rICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9TSUdOQUxfTUFTSywgKDE8PDYpKTsKKwkvKiAnSW50ZXJydXB0IE1hc2snICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJICAgICAgIDB4RkZGQiwgMHhGRkZEKTsKK30KK3N0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfc2V0X2xlZ2FjeV9sZWRfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkJIHUzMiBleHRfcGh5X3R5cGUsIHU4IGV4dF9waHlfYWRkcikKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKworCS8qIExFRDEgKDEwRyBMaW5rKTogRGlzYWJsZSBMRUQxIHdoZW4gMTAvMTAwLzEwMDAgbGluayAqLworCS8qIExFRDIgKDFHLzEwMC8xMCBMaW5rKTogRW5hYmxlIExFRDIgd2hlbiAxMC8xMDAvMTAwMCBsaW5rKSAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCSAgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9TSEFET1csCisJCSAgICAgICAoMTw8MTUpIHwgKDB4ZCA8PCAxMCkgfCAoMHhjPDw0KSB8IDB4ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfc2V0XzEwR19sZWRfbW9kZShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgICAgICB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHZhbDE7CisKKwkvKiBMRUQxICgxMEcgTGluaykgKi8KKwkvKiBFbmFibGUgY29udGludXNlIGJhc2VkIG9uIHNvdXJjZSA3KDEwRy1saW5rKSAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwKKwkJICAgICAgICZ2YWwxKTsKKwkvKiBTZXQgYml0IDIgdG8gMCwgYW5kIGJpdHMgWzE6MF0gdG8gMTAgKi8KKwl2YWwxICY9IH4oKDE8PDApIHwgKDE8PDIpKTsgLyogQ2xlYXIgYml0cyAwLDIqLworCXZhbDEgfD0gKDE8PDEpOyAvKiBTZXQgYml0IDEgKi8KKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfTElOS19TSUdOQUwsCisJCSAgICAgICB2YWwxKTsKKworCS8qIFVubWFzayBMRUQxIGZvciAxMEcgbGluayAqLworCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xFRDFfTUFTSywKKwkJICAgICAgJnZhbDEpOworCS8qIFNldCBiaXQgMiB0byAwLCBhbmQgYml0cyBbMTowXSB0byAxMCAqLworCXZhbDEgfD0gKDE8PDcpOworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfTEVEMV9NQVNLLAorCQkgICAgICAgdmFsMSk7CisKKwkvKiBMRUQyICgxRy8xMDAvMTBHIExpbmspICovCisJLyogTWFzayBMRUQyIGZvciAxMEcgbGluayAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHXzg0ODFfTEVEMl9NQVNLLAorCQkgICAgICAgMCk7CisKKwkvKiBMRUQzICgxMEcvMUcvMTAwLzEwRyBBY3Rpdml0eSkgKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTCwKKwkJICAgICAgJnZhbDEpOworCS8qIEVuYWJsZSBibGluayBiYXNlZCBvbiBzb3VyY2UgNChBY3Rpdml0eSkgKi8KKwl2YWwxICY9IH4oKDE8PDcpIHwgKDE8PDgpKTsgLyogQ2xlYXIgYml0cyA3LDggKi8KKwl2YWwxIHw9ICgxPDw2KTsgLyogU2V0IG9ubHkgYml0IDYgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkgICAgICAgdmFsMSk7CisKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQzX01BU0ssCisJCSAgICAgICZ2YWwxKTsKKwl2YWwxIHw9ICgxPDw0KTsgLyogVW5tYXNrIExFRDMgZm9yIDEwRyBsaW5rICovCisJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODQ4MV9MRUQzX01BU0ssCisJCSAgICAgICB2YWwxKTsKK30KKworCitzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsX3BoeShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKKwkJCQkgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCQkJICB1OCBlbmFibGVfY2w3MykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwogCWlmICghKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9TR01JSV9GTEFHKSkgewogCQlpZiAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CiAJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSAmJgpAQCAtMjkzNCw3ICszNTQ4LDcgQEAKIAkJCURQKE5FVElGX01TR19MSU5LLCAibm90IFNHTUlJLCBubyBBTlxuIik7CiAKIAkJCS8qIGRpc2FibGUgYXV0b25lZyAqLwotCQkJYm54Mnhfc2V0X2F1dG9uZWcocGFyYW1zLCB2YXJzKTsKKwkJCWJueDJ4X3NldF9hdXRvbmVnKHBhcmFtcywgdmFycywgMCk7CiAKIAkJCS8qIHByb2dyYW0gc3BlZWQgYW5kIGR1cGxleCAqLwogCQkJYm54MnhfcHJvZ3JhbV9zZXJkZXMocGFyYW1zLCB2YXJzKTsKQEAgLTI5NTAsMTAgKzM1NjQsMTAgQEAKIAkJCQkJCSAgICAgICB2YXJzLT5pZWVlX2ZjKTsKIAogCQkJLyogZW5hYmxlIGF1dG9uZWcgKi8KLQkJCWJueDJ4X3NldF9hdXRvbmVnKHBhcmFtcywgdmFycyk7CisJCQlibngyeF9zZXRfYXV0b25lZyhwYXJhbXMsIHZhcnMsIGVuYWJsZV9jbDczKTsKIAogCQkJLyogZW5hYmxlIGFuZCByZXN0YXJ0IEFOICovCi0JCQlibngyeF9yZXN0YXJ0X2F1dG9uZWcocGFyYW1zKTsKKwkJCWJueDJ4X3Jlc3RhcnRfYXV0b25lZyhwYXJhbXMsIGVuYWJsZV9jbDczKTsKIAkJfQogCiAJfSBlbHNlIHsgLyogU0dNSUkgbW9kZSAqLwpAQCAtMjk3MiwxMCArMzU4Niw5IEBACiAJdTE2IGN0cmwgPSAwOwogCXUxNiB2YWwgPSAwOwogCXU4IHJjID0gMDsKKwogCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJCWV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCiAJCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCQkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgc29mdCByZXNldCBpcyBvZmYgKGV4cGVjdCBmb3IgdGhlIDgwNzI6CkBAIC0zMTYwLDYgKzM3NzMsOSBAQAogCQkJZHJpdmVyIGlzIGxvYWRlZCwgaXQgcmVzZXQgYWxsIHJlZ2lzdGVycywgaW5jbHVkaW5nIHRoZQogCQkJdHJhbnNtaXR0ZXIgKi8KIAkJCWJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHBhcmFtcyk7CisKKwkJCS8qIFNldCBGbG93IGNvbnRyb2wgKi8KKwkJCWJueDJ4X2V4dF9waHlfc2V0X3BhdXNlKHBhcmFtcywgdmFycyk7CiAJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDFHIGZvcmNlXG4iKTsKIAkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKQEAgLTMyNjcsMTQgKzM4ODMsMTIgQEAKIAkJCWJueDJ4XzgwNzNfc2V0X3BhdXNlX2NsMzcocGFyYW1zLCB2YXJzKTsKIAogCQkJaWYgKGV4dF9waHlfdHlwZSA9PQotCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpeworCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpCiAJCQkJYm54MnhfYmNtODA3Ml9leHRlcm5hbF9yb21fYm9vdChwYXJhbXMpOwotCQkJfSBlbHNlIHsKLQorCQkJZWxzZQogCQkJCS8qIEluIGNhc2Ugb2YgODA3MyB3aXRoIGxvbmcgeGF1aSBsaW5lcywKIAkJCQlkb24ndCBzZXQgdGhlIDgwNzMgeGF1aSBsb3cgcG93ZXIqLwogCQkJCWJueDJ4X2JjbTgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUocGFyYW1zKTsKLQkJCX0KIAogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJICAgICAgZXh0X3BoeV90eXBlLApAQCAtMzMzOSwxMCArMzk1Myw4IEBACiAJCQkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKIAkJCQkgICAgICAgTURJT19BTl9SRUdfQURWLCB2YWwpOwotCiAJCQlpZiAoZXh0X3BoeV90eXBlID09CiAJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykgewotCiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKIAkJCQkJICAgICAgZXh0X3BoeV9hZGRyLApAQCAtMzQ1MCw2ICs0MDYyLDE4NyBAQAogCQkJICAgKCh2YWwgJiAoMTw8NykpID4gMCkpOwogCQkJYnJlYWs7CiAJCX0KKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCXsKKwkJCXUxNiB0bXAxOworCQkJdTE2IHJ4X2FsYXJtX2N0cmxfdmFsOworCQkJdTE2IGxhc2lfY3RybF92YWw7CisKKwkJCS8qIEVuYWJsZSBQTUQgbGluaywgTU9EX0FCU19GTFQsIGFuZCAxRyBsaW5rIGFsYXJtICovCisKKwkJCXUxNiBtb2RfYWJzOworCQkJcnhfYWxhcm1fY3RybF92YWwgPSAoMTw8MikgfCAoMTw8NSkgOworCQkJbGFzaV9jdHJsX3ZhbCA9IDB4MDAwNDsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbml0aWFsaXppbmcgQkNNODcyN1xuIik7CisJCQkvKiBlbmFibGUgTEFTSSAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCSAgICAgICByeF9hbGFybV9jdHJsX3ZhbCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLAorCQkJCSAgICAgICBsYXNpX2N0cmxfdmFsKTsKKworCQkJLyogSW5pdGlhbGx5IGNvbmZpZ3VyZSAgTU9EX0FCUyB0byBpbnRlcnJ1cHQgd2hlbgorCQkJbW9kdWxlIGlzIHByZXNlbmNlKCBiaXQgOCkgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLCAmbW9kX2Ficyk7CisJCQkvKiBTZXQgRURDIG9mZiBieSBzZXR0aW5nIE9QVFhMT1Mgc2lnbmFsIGlucHV0IHRvIGxvdworCQkJKGJpdCA5KS4KKwkJCVdoZW4gdGhlIEVEQyBpcyBvZmYgaXQgbG9ja3Mgb250byBhIHJlZmVyZW5jZSBjbG9jayBhbmQKKwkJCWF2b2lkcyBiZWNvbWluZyAnbG9zdCcuKi8KKwkJCW1vZF9hYnMgJj0gfigoMTw8OCkgfCAoMTw8OSkpOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwgbW9kX2Ficyk7CisKKwkJCS8qIE1ha2UgTU9EX0FCUyBnaXZlIGludGVycnVwdCBvbiBjaGFuZ2UgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzg3MjdfUENTX09QVF9DVFJMLAorCQkJCSAgICAgICZ2YWwpOworCQkJdmFsIHw9ICgxPDwxMik7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjdfUENTX09QVF9DVFJMLAorCQkJCSAgICAgICB2YWwpOworCisJCQkvKiBTZXQgODcyNyBHUElPcyB0byBpbnB1dCB0byBhbGxvdyByZWFkaW5nIGZyb20gdGhlCisJCQk4NzI3IEdQSU8wIHN0YXR1cyB3aGljaCByZWZsZWN0IFNGUCsgbW9kdWxlCisJCQlvdmVyLWN1cnJlbnQgKi8KKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1BDU19PUFRfQ1RSTCwKKwkJCQkgICAgICAgJnZhbCk7CisJCQl2YWwgJj0gMHhmZjhmOyAvKiBSZXNldCBiaXRzIDQtNiAqLworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3LAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfODcyN19QQ1NfT1BUX0NUUkwsCisJCQkJICAgICAgIHZhbCk7CisKKwkJCWJueDJ4Xzg3MjdfcG93ZXJfbW9kdWxlKGJwLCBwYXJhbXMsIGV4dF9waHlfYWRkciwgMSk7CisJCQlibngyeF9iY204MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKHBhcmFtcyk7CisKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsCisJCQkJICAgICAgJnRtcDEpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnRtcDEpOworCisJCQkvKiBTZXQgb3B0aW9uIDFHIHNwZWVkICovCisJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CisKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgZm9yY2VcbiIpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsIDB4NDApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzEwR19DVFJMMiwgMHhEKTsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR18xMEdfQ1RSTDIsICZ0bXAxKTsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIjEuNyA9IDB4JXggXG4iLCB0bXAxKTsKKworCQkJfSBlbHNlIGlmICgocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PQorCQkJCSAgICBTUEVFRF9BVVRPX05FRykgJiYKKwkJCQkgICAoKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCSAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykpKSB7CisKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgMUcgY2xhdXNlMzcgXG4iKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X01JU0NfQ1RSTCwgMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DTDM3X0FOLCAweDEzMDApOworCQkJfSBlbHNlIHsKKwkJCQkvKiBTaW5jZSB0aGUgODcyNyBoYXMgb25seSBzaW5nbGUgcmVzZXQgcGluLAorCQkJCW5lZWQgdG8gc2V0IHRoZSAxMEcgcmVnaXN0ZXJzIGFsdGhvdWdoIGl0IGlzCisJCQkJZGVmYXVsdCAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ1RSTCwgMHgwMDIwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIDB4NywgMHgwMTAwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHgyMDQwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfMTBHX0NUUkwyLCAweDAwMDgpOworCQkJfQorCisJCQkvKiBTZXQgMi13aXJlIHRyYW5zZmVyIHJhdGUgdG8gNDAwS2h6IHNpbmNlIDEwMEtoegorCQkJaXMgbm90IG9wZXJhdGlvbmFsICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjdfVFdPX1dJUkVfU0xBVkVfQUREUiwKKwkJCQkgICAgICAgMHhhMTAxKTsKKworCQkJLyogU2V0IFRYIFByZUVtcGhhc2lzIGlmIG5lZWRlZCAqLworCQkJaWYgKChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJCSAgICAgRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRCkpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgVFhfQ1RSTDEgMHgleCwiCisJCQkJCSAiVFhfQ1RSTDIgMHgleFxuIiwKKwkJCQkJIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMF0sCisJCQkJCSBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzFdKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RYX0NUUkwxLAorCQkJCQkgICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFswXSk7CisKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR184NzI3X1RYX0NUUkwyLAorCQkJCQkgICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFsxXSk7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQl7CiAJCQl1MTYgZndfdmVyMSwgZndfdmVyMjsKQEAgLTM0OTUsMjAgKzQyODgsMTEyIEBACiAJCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKHBhcmFtcy0+YnAsIHBhcmFtcy0+cG9ydCwKIAkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSwKIAkJCQkJCSh1MzIpKGZ3X3ZlcjE8PDE2IHwgZndfdmVyMikpOwotCiAJCQlicmVhazsKIAkJfQogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6Ci0JCQlEUChORVRJRl9NU0dfTElOSywKLQkJCQkiU2V0dGluZyB0aGUgQkNNODQ4MSBMQVNJIGNvbnRyb2xcbiIpOworCQkJLyogVGhpcyBwaHkgdXNlcyB0aGUgTklHIGxhdGNoIG1lY2hhbmlzbSBzaW5jZSBsaW5rCisJCQkJaW5kaWNhdGlvbiBhcnJpdmVzIHRocm91Z2ggaXRzIExFRDQgYW5kIG5vdCB2aWEKKwkJCQlpdHMgTEFTSSBzaWduYWwsIHNvIHdlIGdldCBzdGVhZHkgc2lnbmFsCisJCQkJaW5zdGVhZCBvZiBjbGVhciBvbiByZWFkICovCisJCQlibngyeF9iaXRzX2VuKGJwLCBOSUdfUkVHX0xBVENIX0JDXzAgKyBwYXJhbXMtPnBvcnQqNCwKKwkJCQkgICAgMSA8PCBOSUdfTEFUQ0hfQkNfRU5BQkxFX01JX0lOVCk7CiAKLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDEpOworCQkJYm54MnhfODQ4MV9zZXRfbGVkNChwYXJhbXMsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyKTsKKwkJCWlmIChwYXJhbXMtPnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKSB7CiAKLQkJCS8qIFJlc3RhcnQgYXV0b25lZyAqLworCQkJCXUxNiBhdXRvbmVnX3ZhbCwgYW5fMTAwMF92YWwsIGFuXzEwXzEwMF92YWw7CisJCQkJLyogc2V0IDEwMDAgc3BlZWQgYWR2ZXJ0aXNlbWVudCAqLworCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfODQ4MV8xMDAwVF9DVFJMLAorCQkJCQkgICAgICAmYW5fMTAwMF92YWwpOworCisJCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCSAgICBQT1JUX0hXX0NGR19TUEVFRF9DQVBBQklMSVRZX0QwXzFHKSB7CisJCQkJCWFuXzEwMDBfdmFsIHw9ICgxPDw4KTsKKwkJCQkJaWYgKHBhcmFtcy0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJCWFuXzEwMDBfdmFsIHw9ICgxPDw5KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJBZHZlcnRpc2luZyAxR1xuIik7CisJCQkJfSBlbHNlCisJCQkJCWFuXzEwMDBfdmFsICY9IH4oKDE8PDgpIHwgKDE8PDkpKTsKKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR184NDgxXzEwMDBUX0NUUkwsCisJCQkJCSAgICAgICBhbl8xMDAwX3ZhbCk7CisKKwkJCQkvKiBzZXQgMTAwIHNwZWVkIGFkdmVydGlzZW1lbnQgKi8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX0FOX0FEViwKKwkJCQkJICAgICAgJmFuXzEwXzEwMF92YWwpOworCisJCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCSAoUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMDBNX0ZVTEwgfAorCQkJCSAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xMDBNX0hBTEYpKSB7CisJCQkJCWFuXzEwXzEwMF92YWwgfD0gKDE8PDcpOworCQkJCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCQkJYW5fMTBfMTAwX3ZhbCB8PSAoMTw8OCk7CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIkFkdmVydGlzaW5nIDEwME1cbiIpOworCQkJCX0gZWxzZQorCQkJCQlhbl8xMF8xMDBfdmFsICY9IH4oKDE8PDcpIHwgKDE8PDgpKTsKKworCQkJCS8qIHNldCAxMCBzcGVlZCBhZHZlcnRpc2VtZW50ICovCisJCQkJaWYgKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCSAgKFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0ZVTEwgfAorCQkJCSAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBNX0hBTEYpKSB7CisJCQkJCWFuXzEwXzEwMF92YWwgfD0gKDE8PDUpOworCQkJCQlpZiAocGFyYW1zLT5yZXFfZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCQkJYW5fMTBfMTAwX3ZhbCB8PSAoMTw8Nik7CisJCQkJCURQKE5FVElGX01TR19MSU5LLCAiQWR2ZXJ0aXNpbmcgMTBNXG4iKTsKKwkJCQkgICAgIH0KKwkJCQllbHNlCisJCQkJCWFuXzEwXzEwMF92YWwgJj0gfigoMTw8NSkgfCAoMTw8NikpOworCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX0FOX0FEViwKKwkJCQkJICAgICAgIGFuXzEwXzEwMF92YWwpOworCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9NSUlfQ1RSTCwKKwkJCQkJICAgICAgJmF1dG9uZWdfdmFsKTsKKworCQkJCS8qIERpc2FibGUgZm9yY2VkIHNwZWVkICovCisJCQkJYXV0b25lZ192YWwgJj0gfigxPDw2fDE8PDEzKTsKKworCQkJCS8qIEVuYWJsZSBhdXRvbmVnIGFuZCByZXN0YXJ0IGF1dG9uZWcKKwkJCQlmb3IgbGVnYWN5IHNwZWVkcyAqLworCQkJCWF1dG9uZWdfdmFsIHw9ICgxPDw5fDE8PDEyKTsKKworCQkJCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQkJCWF1dG9uZWdfdmFsIHw9ICgxPDw4KTsKKwkJCQllbHNlCisJCQkJCWF1dG9uZWdfdmFsICY9IH4oMTw8OCk7CisKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfTUlJX0NUUkwsCisJCQkJCSAgICAgICBhdXRvbmVnX3ZhbCk7CisKKwkJCQlpZiAocGFyYW1zLT5zcGVlZF9jYXBfbWFzayAmCisJCQkJICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMTBHKSB7CisJCQkJCURQKE5FVElGX01TR19MSU5LLCAiQWR2ZXJ0aXNpbmcgMTBHXG4iKTsKKwkJCQkJLyogUmVzdGFydCBhdXRvbmVnIGZvciAxMEcqLwogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkJICAgICAgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKQEAgLTM1MjAsMTIgKzQ0MDUsODEgQEAKIAkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAogCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCB2YWwpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogRm9yY2Ugc3BlZWQgKi8KKwkJCQl1MTYgYXV0b25lZ19jdHJsLCBwbWFfY3RybDsKKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMLAorCQkJCQkgICAgICAmYXV0b25lZ19jdHJsKTsKIAotCQkJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJZXh0X3BoeV90eXBlLAotCQkJCQkJZXh0X3BoeV9hZGRyLAotCQkJCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKKwkJCQkvKiBEaXNhYmxlIGF1dG9uZWcgKi8KKwkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDwxMik7CiAKKwkJCQkvKiBTZXQgMTAwMCBmb3JjZSAqLworCQkJCXN3aXRjaCAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCkgeworCQkJCWNhc2UgU1BFRURfMTAwMDA6CisJCQkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCQkJIlVuYWJsZSB0byBzZXQgMTBHIGZvcmNlICFcbiIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNQRUVEXzEwMDA6CisJCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAorCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJCQkgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkJCSAgICAgICZwbWFfY3RybCk7CisJCQkJCWF1dG9uZWdfY3RybCAmPSB+KDE8PDEzKTsKKwkJCQkJYXV0b25lZ19jdHJsIHw9ICgxPDw2KTsKKwkJCQkJcG1hX2N0cmwgJj0gfigxPDwxMyk7CisJCQkJCXBtYV9jdHJsIHw9ICgxPDw2KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCQkiU2V0dGluZyAxMDAwTSBmb3JjZVxuIik7CisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCQkJICAgICAgIHBtYV9jdHJsKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTUEVFRF8xMDA6CisJCQkJCWF1dG9uZWdfY3RybCB8PSAoMTw8MTMpOworCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDw2KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCQkiU2V0dGluZyAxMDBNIGZvcmNlXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTUEVFRF8xMDoKKwkJCQkJYXV0b25lZ19jdHJsICY9IH4oMTw8MTMpOworCQkJCQlhdXRvbmVnX2N0cmwgJj0gfigxPDw2KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCQkiU2V0dGluZyAxME0gZm9yY2VcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQkvKiBEdXBsZXggbW9kZSAqLworCQkJCWlmIChwYXJhbXMtPnJlcV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKwkJCQkJYXV0b25lZ19jdHJsIHw9ICgxPDw4KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCQkiU2V0dGluZyBmdWxsIGR1cGxleFxuIik7CisJCQkJfSBlbHNlCisJCQkJCWF1dG9uZWdfY3RybCAmPSB+KDE8PDgpOworCisJCQkJLyogVXBkYXRlIGF1dG9uZWcgY3RybCBhbmQgcG1hIGN0cmwgKi8KKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfODQ4MV9MRUdBQ1lfTUlJX0NUUkwsCisJCQkJCSAgICAgICBhdXRvbmVnX2N0cmwpOworCQkJfQorCisJCQkvKiBTYXZlIHNwaXJvbSB2ZXJzaW9uICovCisJCQlibngyeF9zYXZlXzg0ODFfc3Bpcm9tX3ZlcnNpb24oYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgICBwYXJhbXMtPnNobWVtX2Jhc2UpOwogCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKIAkJCURQKE5FVElGX01TR19MSU5LLApAQCAtMzU2MSw5ICs0NTE1LDEwMSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQgYm54MnhfODcyN19oYW5kbGVfbW9kX2FicyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1MTYgbW9kX2FicywgcnhfYWxhcm1fc3RhdHVzOworCXU4IGV4dF9waHlfYWRkciA9IFhHWFNfRVhUX1BIWV9BRERSKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGRldl9pbmZvLgorCQkJCSAgICAgIHBvcnRfZmVhdHVyZV9jb25maWdbcGFyYW1zLT5wb3J0XS4KKwkJCQkgICAgICBjb25maWcpKTsKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1BIWV9JREVOVElGSUVSLCAmbW9kX2Ficyk7CisJaWYgKG1vZF9hYnMgJiAoMTw8OCkpIHsKKworCQkvKiBNb2R1bGUgaXMgYWJzZW50ICovCisJCURQKE5FVElGX01TR19MSU5LLCAiTU9EX0FCUyBpbmRpY2F0aW9uICIKKwkJCSAgICAic2hvdyBtb2R1bGUgaXMgYWJzZW50XG4iKTsKKworCQkvKiAxLiBTZXQgbW9kX2FicyB0byBkZXRlY3QgbmV4dCBtb2R1bGUKKwkJcHJlc2VuY2UgZXZlbnQKKwkJICAgMi4gU2V0IEVEQyBvZmYgYnkgc2V0dGluZyBPUFRYTE9TIHNpZ25hbCBpbnB1dCB0byBsb3cKKwkJCShiaXQgOSkuCisJCQlXaGVuIHRoZSBFREMgaXMgb2ZmIGl0IGxvY2tzIG9udG8gYSByZWZlcmVuY2UgY2xvY2sgYW5kCisJCQlhdm9pZHMgYmVjb21pbmcgJ2xvc3QnLiovCisJCW1vZF9hYnMgJj0gfigoMTw8OCl8KDE8PDkpKTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwgbW9kX2Ficyk7CisKKwkJLyogQ2xlYXIgUlggYWxhcm0gc2luY2UgaXQgc3RheXMgdXAgYXMgbG9uZyBhcworCQl0aGUgbW9kX2FicyB3YXNuJ3QgY2hhbmdlZCAqLworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnJ4X2FsYXJtX3N0YXR1cyk7CisKKwl9IGVsc2UgeworCQkvKiBNb2R1bGUgaXMgcHJlc2VudCAqLworCQlEUChORVRJRl9NU0dfTElOSywgIk1PRF9BQlMgaW5kaWNhdGlvbiAiCisJCQkgICAgInNob3cgbW9kdWxlIGlzIHByZXNlbnRcbiIpOworCQkvKiBGaXJzdCB0aGluZywgZGlzYWJsZSB0cmFuc21pdHRlciwKKwkJYW5kIGlmIHRoZSBtb2R1bGUgaXMgb2ssIHRoZQorCQltb2R1bGVfZGV0ZWN0aW9uIHdpbGwgZW5hYmxlIGl0Ki8KKworCQkvKiAxLiBTZXQgbW9kX2FicyB0byBkZXRlY3QgbmV4dCBtb2R1bGUKKwkJYWJzZW50IGV2ZW50ICggYml0IDgpCisJCSAgIDIuIFJlc3RvcmUgdGhlIGRlZmF1bHQgcG9sYXJpdHkgb2YgdGhlIE9QUlhMT1Mgc2lnbmFsIGFuZAorCQl0aGlzIHNpZ25hbCB3aWxsIHRoZW4gY29ycmVjdGx5IGluZGljYXRlIHRoZSBwcmVzZW5jZSBvcgorCQlhYnNlbmNlIG9mIHRoZSBSeCBzaWduYWwuIChiaXQgOSkgKi8KKwkJbW9kX2FicyB8PSAoKDE8PDgpfCgxPDw5KSk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwgbW9kX2Ficyk7CisKKwkJLyogQ2xlYXIgUlggYWxhcm0gc2luY2UgaXQgc3RheXMgdXAgYXMgbG9uZyBhcworCQl0aGUgbW9kX2FicyB3YXNuJ3QgY2hhbmdlZC4gVGhpcyBpcyBuZWVkIHRvIGJlIGRvbmUKKwkJYmVmb3JlIGNhbGxpbmcgdGhlIG1vZHVsZSBkZXRlY3Rpb24sIG90aGVyd2lzZSBpdCB3aWxsIGNsZWFyCisJCXRoZSBsaW5rIHVwZGF0ZSBhbGFybSAqLworCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnJ4X2FsYXJtX3N0YXR1cyk7CisKKworCQlpZiAoKHZhbCAmIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9NQVNLKSA9PQorCQkgICAgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVfVFhfTEFTRVIpCisJCQlibngyeF9zZnBfc2V0X3RyYW5zbWl0dGVyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcsCisJCQkJCWV4dF9waHlfYWRkciwgMCk7CisKKwkJaWYgKGJueDJ4X3dhaXRfZm9yX3NmcF9tb2R1bGVfaW5pdGlhbGl6ZWQocGFyYW1zKQorCQkgICAgPT0gMCkKKwkJCWJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHBhcmFtcyk7CisJCWVsc2UKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU0ZQKyBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXG4iKTsKKwl9CisKKwlEUChORVRJRl9NU0dfTElOSywgIjg3MjcgUlhfQUxBUk1fU1RBVFVTIDB4JXhcbiIsCisJCSByeF9hbGFybV9zdGF0dXMpOworCS8qIE5vIG5lZWQgdG8gY2hlY2sgbGluayBzdGF0dXMgaW4gY2FzZSBvZgorCW1vZHVsZSBwbHVnZ2VkIGluL291dCAqLworfQorCiAKIHN0YXRpYyB1OCBibngyeF9leHRfcGh5X2lzX2xpbmtfdXAoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCi0JCQkJIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMpCisJCQkJIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsCisJCQkJIHU4IGlzX21pX2ludCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZXh0X3BoeV90eXBlOwpAQCAtMzU3MiwxMSArNDYxOCw5IEBACiAJdTE2IHJ4X3NkLCBwY3Nfc3RhdHVzOwogCXU4IGV4dF9waHlfbGlua191cCA9IDA7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKLQlpZiAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRykgewotCQlleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwogCisJaWYgKHZhcnMtPnBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwogCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKQEAgLTM2MDIsOCArNDY0NiwxOSBAQAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJCQkgICAgICBNRElPX1BNQV9SRUdfUlhfU0QsICZyeF9zZCk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDUgcnhfc2QgMHgleFxuIiwgcnhfc2QpOwotCQkJZXh0X3BoeV9saW5rX3VwID0gKHJ4X3NkICYgMHgxKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgMSwKKwkJCQkgICAgICAweGM4MDksICZ2YWwxKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIDEsCisJCQkJICAgICAgMHhjODA5LCAmdmFsMSk7CisKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNSAxLmM4MDkgdmFsPTB4JXhcbiIsIHZhbDEpOworCQkJZXh0X3BoeV9saW5rX3VwID0gKChyeF9zZCAmIDB4MSkgJiYgKHZhbDEgJiAoMTw8OSkpCisJCQkJCSAgICYmICgodmFsMSAmICgxPDw4KSkgPT0gMCkpOwogCQkJaWYgKGV4dF9waHlfbGlua191cCkKIAkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CiAJCQlicmVhazsKQEAgLTM2NzIsMTkgKzQ3MjcsMTcyIEBACiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0KLQogCQkJCWlmICh2YWwyICYgKDE8PDEpKQogCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKIAkJCQllbHNlCiAJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKIAkJCX0KLQogCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgorCQl7CisJCQl1MTYgbGlua19zdGF0dXMgPSAwOworCQkJdTE2IHJ4X2FsYXJtX3N0YXR1czsKKwkJCS8qIENoZWNrIHRoZSBMQVNJICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnJ4X2FsYXJtX3N0YXR1cyk7CisKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcyNyBSWF9BTEFSTV9TVEFUVVMgMHgleFxuIiwKKwkJCQkgcnhfYWxhcm1fc3RhdHVzKTsKKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKworCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJICI4NzI3IExBU0kgc3RhdHVzIDB4JXhcbiIsCisJCQkJIHZhbDEpOworCisJCQkvKiBDbGVhciBNU0ctT1VUICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgIE1ESU9fUE1BX1JFR19NODA1MV9NU0dPVVRfUkVHLAorCQkJCSAgICAgICZ2YWwxKTsKKworCQkJLyoKKwkJCSAqIElmIGEgbW9kdWxlIGlzIHByZXNlbnQgYW5kIHRoZXJlIGlzIG5lZWQgdG8gY2hlY2sKKwkJCSAqIGZvciBvdmVyIGN1cnJlbnQKKwkJCSAqLworCQkJaWYgKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCQkgICAgICBGRUFUVVJFX0NPTkZJR19CQ004NzI3X05PQykgJiYKKwkJCSAgICAhKHJ4X2FsYXJtX3N0YXR1cyAmICgxPDw1KSkpIHsKKwkJCQkvKiBDaGVjayBvdmVyLWN1cnJlbnQgdXNpbmcgODcyNyBHUElPMCBpbnB1dCovCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgTURJT19QTUFfUkVHXzg3MjdfR1BJT19DVFJMLAorCQkJCQkgICAgICAmdmFsMSk7CisKKwkJCQlpZiAoKHZhbDEgJiAoMTw8OCkpID09IDApIHsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzI3IFBvd2VyIGZhdWx0IgorCQkJCQkJICAgICAiIGhhcyBiZWVuIGRldGVjdGVkIG9uICIKKwkJCQkJCSAgICAgInBvcnQgJWRcbiIsCisJCQkJCQkgcGFyYW1zLT5wb3J0KTsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAgIkVycm9yOiAgUG93ZXIiCisJCQkJCQkgIiBmYXVsdCBvbiAlcyBQb3J0ICVkIGhhcyIKKwkJCQkJCSAiIGJlZW4gZGV0ZWN0ZWQgYW5kIHRoZSIKKwkJCQkJCSAiIHBvd2VyIHRvIHRoYXQgU0ZQKyBtb2R1bGUiCisJCQkJCQkgIiBoYXMgYmVlbiByZW1vdmVkIHRvIHByZXZlbnQiCisJCQkJCQkgIiBmYWlsdXJlIG9mIHRoZSBjYXJkLiBQbGVhc2UiCisJCQkJCQkgIiByZW1vdmUgdGhlIFNGUCsgbW9kdWxlIGFuZCIKKwkJCQkJCSAiIHJlc3RhcnQgdGhlIHN5c3RlbSB0byBjbGVhciIKKwkJCQkJCSAiIHRoaXMgZXJyb3IuXG4iCisJCQksIGJwLT5kZXYtPm5hbWUsIHBhcmFtcy0+cG9ydCk7CisJCQkJCS8qCisJCQkJCSAqIERpc2FibGUgYWxsIFJYX0FMQVJNcyBleGNlcHQgZm9yCisJCQkJCSAqIG1vZF9hYnMKKwkJCQkJICovCisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk1fQ1RSTCwKKwkJCQkJCSAgICAgKDE8PDUpKTsKKworCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJCQkJCSAgICAmdmFsMSk7CisJCQkJCS8qIFdhaXQgZm9yIG1vZHVsZV9hYnNlbnRfZXZlbnQgKi8KKwkJCQkJdmFsMSB8PSAoMTw8OCk7CisJCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkJICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkJICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJCQkJCSAgICB2YWwxKTsKKwkJCQkJLyogQ2xlYXIgUlggYWxhcm0gKi8KKwkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwKKwkJCQkJCSAgICAgICZyeF9hbGFybV9zdGF0dXMpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IC8qIE92ZXIgY3VycmVudCBjaGVjayAqLworCisJCQkvKiBXaGVuIG1vZHVsZSBhYnNlbnQgYml0IGlzIHNldCwgY2hlY2sgbW9kdWxlICovCisJCQlpZiAocnhfYWxhcm1fc3RhdHVzICYgKDE8PDUpKSB7CisJCQkJYm54MnhfODcyN19oYW5kbGVfbW9kX2FicyhwYXJhbXMpOworCQkJCS8qIEVuYWJsZSBhbGwgbW9kX2FicyBhbmQgbGluayBkZXRlY3Rpb24gYml0cyAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX1JYX0FMQVJNX0NUUkwsCisJCQkJCSAgICAgICAoKDE8PDUpIHwgKDE8PDIpKSk7CisJCQl9CisKKwkJCS8qIElmIHRyYW5zbWl0dGVyIGlzIGRpc2FibGVkLAorCQkJaWdub3JlIGZhbHNlIGxpbmsgdXAgaW5kaWNhdGlvbiAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfUEhZX0lERU5USUZJRVIsCisJCQkJICAgICAgJnZhbDEpOworCQkJaWYgKHZhbDEgJiAoMTw8MTUpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJUeCBpcyBkaXNhYmxlZFxuIik7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUywKKwkJCQkgICAgICAmbGlua19zdGF0dXMpOworCisJCQkvKiBCaXRzIDAuLjIgLS0+IHNwZWVkIGRldGVjdGVkLAorCQkJICAgYml0cyAxMy4uMTUtLT4gbGluayBpcyBkb3duICovCisJCQlpZiAoKGxpbmtfc3RhdHVzICYgKDE8PDIpKSAmJgorCQkJICAgICghKGxpbmtfc3RhdHVzICYgKDE8PDE1KSkpKSB7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CisJCQl9IGVsc2UgaWYgKChsaW5rX3N0YXR1cyAmICgxPDwwKSkgJiYKKwkJCQkgICAoIShsaW5rX3N0YXR1cyAmICgxPDwxMykpKSkgeworCQkJCWV4dF9waHlfbGlua191cCA9IDE7CisJCQkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAicG9ydCAleDogRXh0ZXJuYWwgbGluayIKKwkJCQkJICIgdXAgaW4gMUdcbiIsIHBhcmFtcy0+cG9ydCk7CisJCQl9IGVsc2UgeworCQkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssCisJCQkJCSAicG9ydCAleDogRXh0ZXJuYWwgbGluayIKKwkJCQkJICIgaXMgZG93blxuIiwgcGFyYW1zLT5wb3J0KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCXsKIAkJCXUxNiBsaW5rX3N0YXR1cyA9IDA7CiAJCQl1MTYgYW4xMDAwX3N0YXR1cyA9IDA7CisKIAkJCWlmIChleHRfcGh5X3R5cGUgPT0KIAkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MikgewogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LApAQCAtMzcwMCw3ICs0OTA4LDYgQEAKIAkJCURQKE5FVElGX01TR19MSU5LLAogCQkJCSAiODcweCBMQVNJIHN0YXR1cyAweCV4LT4weCV4XG4iLAogCQkJCSAgdmFsMSwgdmFsMik7Ci0KIAkJCX0gZWxzZSB7CiAJCQkJLyogSW4gODA3MywgcG9ydDEgaXMgZGlyZWN0ZWQgdGhyb3VnaCBlbWFjMCBhbmQKIAkJCQkgKiBwb3J0MCBpcyBkaXJlY3RlZCB0aHJvdWdoIGVtYWMxCkBAIC0zODMwLDggKzUwMzcsNiBAQAogCQkJCQkJICAgIE1ESU9fUE1BX0RFVkFELAogCQkJCQkJICAgIE1ESU9fUE1BX1JFR19DRFJfQkFORFdJRFRILAogCQkJCQkJICAgIDB4MDMzMyk7Ci0KLQogCQkJCX0KIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCQkJICAgZXh0X3BoeV90eXBlLApAQCAtMzk0Myw1MSArNTE0OCw3OSBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKLQkJCS8qIENsZWFyIExBU0kgaW50ZXJydXB0ICovCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkvKiBDaGVjayAxMEctQmFzZVQgbGluayBzdGF0dXMgKi8KKwkJCS8qIENoZWNrIFBNRCBzaWduYWwgb2sgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkJICAgICAgMHhGRkZBLAorCQkJCQkJICAgICAgJnZhbDEpOworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg0ODEgTEFTSSBzdGF0dXMgcmVnID0gMHgleFxuIiwKLQkJCQkgdmFsMSk7CisJCQkJICAgICAgTURJT19QTUFfUkVHXzg0ODFfUE1EX1NJR05BTCwKKwkJCQkgICAgICAmdmFsMik7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlBNRF9TSUdOQUwgMS5hODExID0gMHgleFxuIiwgdmFsMik7CiAKLQkJCS8qIENoZWNrIDEwRy1CYXNlVCBsaW5rIHN0YXR1cyAqLwotCQkJLyogQ2hlY2sgR2xvYmFsIFBNRCBzaWduYWwgb2sgKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfUlhfU0QsCi0JCQkJICAgICAgJnJ4X3NkKTsKLQkJCS8qIENoZWNrIFBDUyBibG9jayBsb2NrICovCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1BDU19ERVZBRCwgTURJT19QQ1NfUkVHX1NUQVRVUywKLQkJCQkgICAgICAmcGNzX3N0YXR1cyk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg0ODEgMS5hID0gMHgleCwgMS4yMCA9IDB4JXhcbiIsCi0JCQkJIHJ4X3NkLCBwY3Nfc3RhdHVzKTsKLQkJCWlmIChyeF9zZCAmIHBjc19zdGF0dXMgJiAweDEpIHsKKwkJCS8qIENoZWNrIGxpbmsgMTBHICovCisJCQlpZiAodmFsMiAmICgxPDwxMSkpIHsKIAkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CiAJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKLQkJCX0gZWxzZSB7CisJCQkJYm54MnhfODQ4MV9zZXRfMTBHX2xlZF9tb2RlKHBhcmFtcywKKwkJCQkJCQkgIGV4dF9waHlfdHlwZSwKKwkJCQkJCQkgIGV4dF9waHlfYWRkcik7CisJCQl9IGVsc2UgeyAvKiBDaGVjayBMZWdhY3kgc3BlZWQgbGluayAqLworCQkJCXUxNiBsZWdhY3lfc3RhdHVzLCBsZWdhY3lfc3BlZWQ7CiAKLQkJCQkvKiBDaGVjayAxMDAwLUJhc2VUIGxpbmsgc3RhdHVzICovCi0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX0FOX0RFVkFELCAweEZGRTEsCi0JCQkJCSAgICAgICZ2YWwxKTsKKwkJCQkvKiBFbmFibGUgZXhwYW5zaW9uIHJlZ2lzdGVyIDB4NDIKKwkJCQkoT3BlcmF0aW9uIG1vZGUgc3RhdHVzKSAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJIGV4dF9waHlfdHlwZSwKKwkJCQkJIGV4dF9waHlfYWRkciwKKwkJCQkJIE1ESU9fQU5fREVWQUQsCisJCQkJCSBNRElPX0FOX1JFR184NDgxX0VYUEFOU0lPTl9SRUdfQUNDRVNTLAorCQkJCQkgMHhmNDIpOwogCi0JCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkgICAgICBNRElPX0FOX0RFVkFELCAweEZGRTEsCi0JCQkJCSAgICAgICZ2YWwyKTsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIjg0ODEgNy5GRkUxID0iCi0JCQkJCSAgICAgIjB4JXgtLT4weCV4XG4iLCB2YWwxLCB2YWwyKTsKLQkJCQlpZiAodmFsMiAmICgxPDwyKSkgewotCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKLQkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCQkvKiBHZXQgbGVnYWN5IHNwZWVkIG9wZXJhdGlvbiBzdGF0dXMgKi8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICBleHRfcGh5X3R5cGUsCisJCQkJCSAgZXh0X3BoeV9hZGRyLAorCQkJCQkgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgTURJT19BTl9SRUdfODQ4MV9FWFBBTlNJT05fUkVHX1JEX1JXLAorCQkJCQkgICZsZWdhY3lfc3RhdHVzKTsKKworCQkJCURQKE5FVElGX01TR19MSU5LLCAiTGVnYWN5IHNwZWVkIHN0YXR1cyIKKwkJCQkJICAgICAiID0gMHgleFxuIiwgbGVnYWN5X3N0YXR1cyk7CisJCQkJZXh0X3BoeV9saW5rX3VwID0gKChsZWdhY3lfc3RhdHVzICYgKDE8PDExKSkKKwkJCQkJCSAgID09ICgxPDwxMSkpOworCQkJCWlmIChleHRfcGh5X2xpbmtfdXApIHsKKwkJCQkJbGVnYWN5X3NwZWVkID0gKGxlZ2FjeV9zdGF0dXMgJiAoMzw8OSkpOworCQkJCQlpZiAobGVnYWN5X3NwZWVkID09ICgwPDw5KSkKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDsKKwkJCQkJZWxzZSBpZiAobGVnYWN5X3NwZWVkID09ICgxPDw5KSkKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPQorCQkJCQkJCVNQRUVEXzEwMDsKKwkJCQkJZWxzZSBpZiAobGVnYWN5X3NwZWVkID09ICgyPDw5KSkKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPQorCQkJCQkJCVNQRUVEXzEwMDA7CisJCQkJCWVsc2UgLyogU2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSAwOworCisJCQkJCWlmIChsZWdhY3lfc3RhdHVzICYgKDE8PDgpKQorCQkJCQkJdmFycy0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQkJCWVsc2UKKwkJCQkJCXZhcnMtPmR1cGxleCA9IERVUExFWF9IQUxGOworCisJCQkJCURQKE5FVElGX01TR19MSU5LLCAiTGluayBpcyB1cCAiCisJCQkJCQkgICAgICJpbiAlZE1icHMsIGlzX2R1cGxleF9mdWxsIgorCQkJCQkJICAgICAiPSAlZFxuIiwKKwkJCQkJCXZhcnMtPmxpbmVfc3BlZWQsCisJCQkJCQkodmFycy0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSk7CisJCQkJCWJueDJ4Xzg0ODFfc2V0X2xlZ2FjeV9sZWRfbW9kZShwYXJhbXMsCisJCQkJCQkJCSBleHRfcGh5X3R5cGUsCisJCQkJCQkJCSBleHRfcGh5X2FkZHIpOwogCQkJCX0KIAkJCX0KLQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUChORVRJRl9NU0dfTElOSywgIkJBRCBYR1hTIGV4dF9waHlfY29uZmlnIDB4JXhcbiIsCkBAIC0zOTk1LDYgKzUyMjgsMTMgQEAKIAkJCWV4dF9waHlfbGlua191cCA9IDA7CiAJCQlicmVhazsKIAkJfQorCQkvKiBTZXQgU0dNSUkgbW9kZSBmb3IgZXh0ZXJuYWwgcGh5ICovCisJCWlmIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB7CisJCQlpZiAodmFycy0+bGluZV9zcGVlZCA8IFNQRUVEXzEwMDApCisJCQkJdmFycy0+cGh5X2ZsYWdzIHw9IFBIWV9TR01JSV9GTEFHOworCQkJZWxzZQorCQkJCXZhcnMtPnBoeV9mbGFncyAmPSB+UEhZX1NHTUlJX0ZMQUc7CisJCX0KIAogCX0gZWxzZSB7IC8qIFNlckRlcyAqLwogCQlleHRfcGh5X3R5cGUgPSBTRVJERVNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOwpAQCAtNDAyNyw2ICs1MjY3LDcgQEAKIAl1MzIgZXh0X3BoeV90eXBlOwogCXUzMiBtYXNrOwogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCiAJLyogc2V0dGluZyB0aGUgc3RhdHVzIHRvIHJlcG9ydCBvbiBsaW5rIHVwCiAJICAgZm9yIGVpdGhlciBYR1hTIG9yIFNlckRlcyAqLwogCkBAIC00MDU4LDEwICs1Mjk5LDEwIEBACiAJYm54MnhfYml0c19lbihicCwKIAkJICAgICAgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCwKIAkJICAgICAgbWFzayk7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJwb3J0ICV4LCBpc194Z3hzPSV4LCBpbnRfc3RhdHVzIDB4JXhcbiIsIHBvcnQsCisKKwlEUChORVRJRl9NU0dfTElOSywgInBvcnQgJXgsIGlzX3hneHMgJXgsIGludF9zdGF0dXMgMHgleFxuIiwgcG9ydCwKIAkJIChwYXJhbXMtPnN3aXRjaF9jZmcgPT0gU1dJVENIX0NGR18xMEcpLAogCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpKTsKLQogCURQKE5FVElGX01TR19MSU5LLCAiIGludF9tYXNrIDB4JXgsIE1JX0lOVCAleCwgU0VSREVTX0xJTksgJXhcbiIsCiAJCSBSRUdfUkQoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpLAogCQkgUkVHX1JEKGJwLCBOSUdfUkVHX0VNQUMwX1NUQVRVU19NSVNDX01JX0lOVCArIHBvcnQqMHgxOCksCkBAIC00MDcxLDEyICs1MzEyLDQ3IEBACiAJICAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LX1NUQVRVUyArIHBvcnQqMHg2OCkpOwogfQogCi0KK3N0YXRpYyB2b2lkIGJueDJ4Xzg0ODFfcmVhcm1fbGF0Y2hfc2lnbmFsKHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCisJCQkJCXU4IGlzX21pX2ludCkKK3sKKwl1MzIgbGF0Y2hfc3RhdHVzID0gMCwgaXNfbWlfaW50X3N0YXR1czsKKwkvKiBEaXNhYmxlIHRoZSBNSSBJTlQgKCBleHRlcm5hbCBwaHkgaW50ICkKKwkgKiBieSB3cml0aW5nIDEgdG8gdGhlIHN0YXR1cyByZWdpc3Rlci4gTGluayBkb3duIGluZGljYXRpb24KKwkgKiBpcyBoaWdoLWFjdGl2ZS1zaWduYWwsIHNvIGluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIHdyaXRlIHRoZQorCSAqIHN0YXR1cyB0byBjbGVhciB0aGUgWE9SCisJICovCisJLyogUmVhZCBMYXRjaGVkIHNpZ25hbHMgKi8KKwlsYXRjaF9zdGF0dXMgPSBSRUdfUkQoYnAsCisJCQkJICBOSUdfUkVHX0xBVENIX1NUQVRVU18wICsgcG9ydCo4KTsKKwlpc19taV9pbnRfc3RhdHVzID0gUkVHX1JEKGJwLAorCQkJCSAgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KTsKKwlEUChORVRJRl9NU0dfTElOSywgIm9yaWdpbmFsX3NpZ25hbCA9IDB4JXgsIG5pZ19zdGF0dXMgPSAweCV4LCIKKwkJICAgICAibGF0Y2hfc3RhdHVzID0gMHgleFxuIiwKKwkJIGlzX21pX2ludCwgaXNfbWlfaW50X3N0YXR1cywgbGF0Y2hfc3RhdHVzKTsKKwkvKiBIYW5kbGUgb25seSB0aG9zZSB3aXRoIGxhdGNoZWQtc2lnbmFsPXVwLiovCisJaWYgKGxhdGNoX3N0YXR1cyAmIDEpIHsKKwkJLyogRm9yIGFsbCBsYXRjaGVkLXNpZ25hbD11cCxXcml0ZSBvcmlnaW5hbF9zaWduYWwgdG8gc3RhdHVzICovCisJCWlmIChpc19taV9pbnQpCisJCQlibngyeF9iaXRzX2VuKGJwLAorCQkJCSAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAKKwkJCQkgICAgKyBwb3J0KjQsCisJCQkJICAgIE5JR19TVEFUVVNfRU1BQzBfTUlfSU5UKTsKKwkJZWxzZQorCQkJYm54MnhfYml0c19kaXMoYnAsCisJCQkJICAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAKKwkJCQkgICAgICsgcG9ydCo0LAorCQkJCSAgICAgTklHX1NUQVRVU19FTUFDMF9NSV9JTlQpOworCQkvKiBGb3IgYWxsIGxhdGNoZWQtc2lnbmFsPXVwIDogUmUtQXJtIExhdGNoIHNpZ25hbHMgKi8KKwkJUkVHX1dSKGJwLCBOSUdfUkVHX0xBVENIX1NUQVRVU18wICsgcG9ydCo4LAorCQkJICAgKGxhdGNoX3N0YXR1cyAmIDB4ZmZmZSkgfCAobGF0Y2hfc3RhdHVzICYgMSkpOworCX0KK30KIC8qCiAgKiBsaW5rIG1hbmFnZW1lbnQKICAqLwogc3RhdGljIHZvaWQgYm54MnhfbGlua19pbnRfYWNrKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAotCQkJICAgICBzdHJ1Y3QgbGlua192YXJzICp2YXJzLCB1OCBpc18xMGcpCisJCQkgICAgIHN0cnVjdCBsaW5rX3ZhcnMgKnZhcnMsIHU4IGlzXzEwZywKKwkJCSAgICAgdTggaXNfbWlfaW50KQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CkBAIC00MDg3LDYgKzUzNjMsMTAgQEAKIAkJICAgICAoTklHX1NUQVRVU19YR1hTMF9MSU5LMTBHIHwKIAkJICAgICAgTklHX1NUQVRVU19YR1hTMF9MSU5LX1NUQVRVUyB8CiAJCSAgICAgIE5JR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUykpOworCWlmIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKQorCSAgICA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NDgxKSB7CisJCWJueDJ4Xzg0ODFfcmVhcm1fbGF0Y2hfc2lnbmFsKGJwLCBwb3J0LCBpc19taV9pbnQpOworCX0KIAlpZiAodmFycy0+cGh5X2xpbmtfdXApIHsKIAkJaWYgKGlzXzEwZykgewogCQkJLyogRGlzYWJsZSB0aGUgMTBHIGxpbmsgaW50ZXJydXB0CkBAIC00MTA2LDcgKzUzODYsOCBAQAogCQkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9NQVNLKSA+PgogCQkJCSAgICBQT1JUX0hXX0NGR19MQU5FX1NXQVBfQ0ZHX01BU1RFUl9TSElGVCk7CiAKLQkJCURQKE5FVElGX01TR19MSU5LLCAiMUcgWEdYUyBwaHkgbGluayB1cFxuIik7CisJCQlEUChORVRJRl9NU0dfTElOSywgIiVkIHNwZWVkIFhHWFMgcGh5IGxpbmsgdXBcbiIsCisJCQkJIHZhcnMtPmxpbmVfc3BlZWQpOwogCQkJYm54MnhfYml0c19lbihicCwKIAkJCQkgICAgICBOSUdfUkVHX1NUQVRVU19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQsCiAJCQkJICAgICAgKCgxIDw8IHNlcl9sYW5lKSA8PApAQCAtNDE1Niw2NiArNTQzNywxMyBAQAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyB2b2lkIGJueDJ4X3R1cm5fb25fZWYoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTggZXh0X3BoeV9hZGRyLAotCQkJICAgdTMyIGV4dF9waHlfdHlwZSkKLXsKLQl1MzIgY250ID0gMDsKLQl1MTYgY3RybCA9IDA7Ci0JLyogRW5hYmxlIEVNQUMwIGluIHRvIGVuYWJsZSBNRElPICovCi0JUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9TRVQsCi0JICAgICAgIChNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfMl9SU1RfRU1BQzBfSEFSRF9DT1JFIDw8IHBvcnQpKTsKLQltc2xlZXAoNSk7Ci0KLQkvKiB0YWtlIGV4dCBwaHkgb3V0IG9mIHJlc2V0ICovCi0JYm54Mnhfc2V0X2dwaW8oYnAsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILAotCQkJICBwb3J0KTsKLQotCWJueDJ4X3NldF9ncGlvKGJwLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPXzEsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKLQkJCSAgcG9ydCk7Ci0KLQkvKiB3YWl0IGZvciA1bXMgKi8KLQltc2xlZXAoNSk7Ci0KLQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKSB7Ci0JCW1zbGVlcCgxKTsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKLQkJCSAgICAgICZjdHJsKTsKLQkJaWYgKCEoY3RybCAmICgxPDwxNSkpKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlJlc2V0IGNvbXBsZXRlZFxuXG4iKTsKLQkJCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgYm54MnhfdHVybl9vZmZfc2Yoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCkKLXsKLQkvKiBwdXQgc2YgdG8gcmVzZXQgKi8KLQlibngyeF9zZXRfZ3BpbyhicCwKLQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0xPVywKLQkJCSAgcG9ydCk7Ci0JYm54Mnhfc2V0X2dwaW8oYnAsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csCi0JCQkgIHBvcnQpOwotfQotCiB1OCBibngyeF9nZXRfZXh0X3BoeV9md192ZXJzaW9uKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1OCBkcml2ZXJfbG9hZGVkLAogCQkJICAgICAgdTggKnZlcnNpb24sIHUxNiBsZW4pCiB7CiAJc3RydWN0IGJueDJ4ICpicDsKIAl1MzIgZXh0X3BoeV90eXBlID0gMDsKIAl1MzIgc3Bpcm9tX3ZlciA9IDA7Ci0JdTggc3RhdHVzID0gMCA7CisJdTggc3RhdHVzOwogCiAJaWYgKHZlcnNpb24gPT0gTlVMTCB8fCBwYXJhbXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MjI1LDYgKzU0NTMsNyBAQAogCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAogCQkJICAgIHBvcnRfbWJbcGFyYW1zLT5wb3J0XS5leHRfcGh5X2Z3X3ZlcnNpb24pKTsKIAorCXN0YXR1cyA9IDA7CiAJLyogcmVzZXQgdGhlIHJldHVybmVkIHZhbHVlIHRvIHplcm8gKi8KIAlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKIAlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgewpAQCAtNDI0MiwxMyArNTQ3MSwxOSBAQAogCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3ZlcihzcGlyb21fdmVyLCB2ZXJzaW9uLCBsZW4pOworCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCXNwaXJvbV92ZXIgPSAoKHNwaXJvbV92ZXIgJiAweEY4MCkgPj4gNykgPDwgMTYgfAorCQkJKHNwaXJvbV92ZXIgJiAweDdGKTsKIAkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3ZlcihzcGlyb21fdmVyLCB2ZXJzaW9uLCBsZW4pOwogCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCXZlcnNpb25bMF0gPSAnXDAnOwogCQlicmVhazsKIAogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRToKQEAgLTQzMzEsMTAgKzU1NjYsOCBAQAogCiAJaWYgKHBhcmFtcy0+c3dpdGNoX2NmZyA9PSBTV0lUQ0hfQ0ZHXzEwRykgewogCQlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJZXh0X3BoeV9hZGRyID0gWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJCS8qIENMMzcgQXV0b25lZyBFbmFibGVkICovCi0JCWV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCi0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+Ci0JCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKIAkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk46CkBAIC00NTAxLDYgKzU3MzQsNyBAQAogCXU4IHJjID0gMDsKIAl1MzIgdG1wOwogCXUzMiBlbWFjX2Jhc2UgPSBwb3J0ID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7CisKIAlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3NldF9sZWQ6IHBvcnQgJXgsIG1vZGUgJWRcbiIsIHBvcnQsIG1vZGUpOwogCURQKE5FVElGX01TR19MSU5LLCAic3BlZWQgMHgleCwgaHdfbGVkX21vZGUgMHgleFxuIiwKIAkJIHNwZWVkLCBod19sZWRfbW9kZSk7CkBAIC00NTY1LDcgKzU3OTksNyBAQAogCQkJICAgICAgJmdwX3N0YXR1cyk7CiAJLyogbGluayBpcyB1cCBvbmx5IGlmIGJvdGggbG9jYWwgcGh5IGFuZCBleHRlcm5hbCBwaHkgYXJlIHVwICovCiAJaWYgKChncF9zdGF0dXMgJiBNRElPX0dQX1NUQVRVU19UT1BfQU5fU1RBVFVTMV9MSU5LX1NUQVRVUykgJiYKLQkgICAgYm54MnhfZXh0X3BoeV9pc19saW5rX3VwKHBhcmFtcywgdmFycykpCisJICAgIGJueDJ4X2V4dF9waHlfaXNfbGlua191cChwYXJhbXMsIHZhcnMsIDEpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRVNSQ0g7CkBAIC00NTc5LDYgKzU4MTMsNyBAQAogCXU4IHJjID0gMDsKIAl1OCBub25fZXh0X3BoeTsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CisKIAkvKiBBY3RpdmF0ZSB0aGUgZXh0ZXJuYWwgUEhZICovCiAJYm54MnhfZXh0X3BoeV9yZXNldChwYXJhbXMsIHZhcnMpOwogCkBAIC00NjMwLDExICs1ODY1LDEwIEBACiAJaWYgKG5vbl9leHRfcGh5IHx8CiAJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgfHwKIAkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB8fAotCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpIHx8CiAJICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUX1BIWSkpIHsKIAkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCiAJCQlibngyeF9zZXRfcGFyYWxsZWxfZGV0ZWN0aW9uKHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKLQkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzKTsKKwkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzLCBub25fZXh0X3BoeSk7CiAJfQogCiAJaWYgKCFub25fZXh0X3BoeSkKQEAgLTQ2NTMsMTEgKzU4ODcsMTEgQEAKIHU4IGJueDJ4X3BoeV9pbml0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCiAJdTMyIHZhbDsKLQlEUChORVRJRl9NU0dfTElOSywgIlBoeSBJbml0aWFsaXphdGlvbiBzdGFydGVkIFxuIik7Ci0JRFAoTkVUSUZfTVNHX0xJTkssICJyZXFfc3BlZWQgPSAlZCwgcmVxX2Zsb3djdHJsPSVkXG4iLAotCQkgIHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQsIHBhcmFtcy0+cmVxX2Zsb3dfY3RybCk7CisKKwlEUChORVRJRl9NU0dfTElOSywgIlBoeSBJbml0aWFsaXphdGlvbiBzdGFydGVkXG4iKTsKKwlEUChORVRJRl9NU0dfTElOSywgInJlcV9zcGVlZCAlZCwgcmVxX2Zsb3djdHJsICVkXG4iLAorCQkgcGFyYW1zLT5yZXFfbGluZV9zcGVlZCwgcGFyYW1zLT5yZXFfZmxvd19jdHJsKTsKIAl2YXJzLT5saW5rX3N0YXR1cyA9IDA7CiAJdmFycy0+cGh5X2xpbmtfdXAgPSAwOwogCXZhcnMtPmxpbmtfdXAgPSAwOwpAQCAtNDY3MSw3ICs1OTA1LDYgQEAKIAllbHNlCiAJCXZhcnMtPnBoeV9mbGFncyA9IFBIWV9YR1hTX0ZMQUc7CiAKLQogCS8qIGRpc2FibGUgYXR0ZW50aW9ucyAqLwogCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcGFyYW1zLT5wb3J0KjQsCiAJCSAgICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfApAQCAtNDY4Miw2ICs1OTE1LDcgQEAKIAlibngyeF9lbWFjX2luaXQocGFyYW1zLCB2YXJzKTsKIAogCWlmIChDSElQX1JFVl9JU19GUEdBKGJwKSkgeworCiAJCXZhcnMtPmxpbmtfdXAgPSAxOwogCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CiAJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOwpAQCAtNDY5MCw3ICs1OTI0LDggQEAKIAkJLyogZW5hYmxlIG9uIEUxLjUgRlBHQSAqLwogCQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CiAJCQl2YXJzLT5mbG93X2N0cmwgfD0KLQkJCQkoQk5YMlhfRkxPV19DVFJMX1RYIHwgQk5YMlhfRkxPV19DVFJMX1JYKTsKKwkJCQkJKEJOWDJYX0ZMT1dfQ1RSTF9UWCB8CisJCQkJCSBCTlgyWF9GTE9XX0NUUkxfUlgpOwogCQkJdmFycy0+bGlua19zdGF0dXMgfD0KIAkJCQkJKExJTktfU1RBVFVTX1RYX0ZMT1dfQ09OVFJPTF9FTkFCTEVEIHwKIAkJCQkJIExJTktfU1RBVFVTX1JYX0ZMT1dfQ09OVFJPTF9FTkFCTEVEKTsKQEAgLTQ2OTksOCArNTkzNCw3IEBACiAJCWJueDJ4X2VtYWNfZW5hYmxlKHBhcmFtcywgdmFycywgMCk7CiAJCWJueDJ4X3BiZl91cGRhdGUocGFyYW1zLCB2YXJzLT5mbG93X2N0cmwsIHZhcnMtPmxpbmVfc3BlZWQpOwogCQkvKiBkaXNhYmxlIGRyYWluICovCi0JCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUKLQkJCQkgICAgKyBwYXJhbXMtPnBvcnQqNCwgMCk7CisJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKyBwYXJhbXMtPnBvcnQqNCwgMCk7CiAKIAkJLyogdXBkYXRlIHNoYXJlZCBtZW1vcnkgKi8KIAkJYm54MnhfdXBkYXRlX21uZyhwYXJhbXMsIHZhcnMtPmxpbmtfc3RhdHVzKTsKQEAgLTQ3MzAsNiArNTk2NCw3IEBACiAKIAl9IGVsc2UKIAlpZiAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX0JNQUMpIHsKKwogCQl2YXJzLT5saW5rX3VwID0gMTsKIAkJdmFycy0+bGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwogCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKQEAgLTQ3NDQsNyArNTk3OSw5IEBACiAKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0VHUkVTU19EUkFJTjBfTU9ERSArCiAJCSAgICBwYXJhbXMtPnBvcnQqNCwgMCk7CisKIAl9IGVsc2UgaWYgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FTUFDKSB7CisKIAkJdmFycy0+bGlua191cCA9IDE7CiAJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwogCQl2YXJzLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKQEAgLTQ3NjAsOCArNTk5NywxMCBAQAogCQkJCQkgICAgICB2YXJzLT5kdXBsZXgpOwogCQlSRUdfV1IoYnAsIE5JR19SRUdfRUdSRVNTX0RSQUlOMF9NT0RFICsKIAkJICAgIHBhcmFtcy0+cG9ydCo0LCAwKTsKKwogCX0gZWxzZSBpZiAoKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19YR1hTXzEwKSB8fAotCQkgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUX1BIWSkpIHsKKwkJICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFRfUEhZKSkgeworCiAJCXZhcnMtPmxpbmtfdXAgPSAxOwogCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDA7CiAJCXZhcnMtPmR1cGxleCA9IERVUExFWF9GVUxMOwpAQCAtNDc5MCwxMCArNjAyOSwxNCBAQAogCQl9CiAJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfRFJBSU4wX01PREUgKwogCQkJICAgIHBhcmFtcy0+cG9ydCo0LCAwKTsKKworCQlibngyeF9zZXRfbGVkKGJwLCBwYXJhbXMtPnBvcnQsIExFRF9NT0RFX09QRVIsCisJCQkgICAgdmFycy0+bGluZV9zcGVlZCwgcGFyYW1zLT5od19sZWRfbW9kZSwKKwkJCSAgICBwYXJhbXMtPmNoaXBfaWQpOworCiAJfSBlbHNlCiAJLyogTm8gbG9vcGJhY2sgKi8KIAl7Ci0KIAkJYm54MnhfcGh5X2RlYXNzZXJ0KHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKIAkJc3dpdGNoIChwYXJhbXMtPnN3aXRjaF9jZmcpIHsKIAkJY2FzZSBTV0lUQ0hfQ0ZHXzFHOgpAQCAtNDgwMSw4ICs2MDQ0LDcgQEAKIAkJCWlmICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCiAJCQkgICAgIFBPUlRfSFdfQ0ZHX1NFUkRFU19FWFRfUEhZX1RZUEVfTUFTSykgPT0KIAkJCSAgICAgUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9CQ001NDgyKSB7Ci0JCQkJdmFycy0+cGh5X2ZsYWdzIHw9Ci0JCQkJCVBIWV9TR01JSV9GTEFHOworCQkJCXZhcnMtPnBoeV9mbGFncyB8PSBQSFlfU0dNSUlfRkxBRzsKIAkJCX0KIAogCQkJdmFsID0gUkVHX1JEKGJwLApAQCAtNDgyMyw3ICs2MDY1LDYgQEAKIAkJZGVmYXVsdDoKIAkJCURQKE5FVElGX01TR19MSU5LLCAiSW52YWxpZCBzd2l0Y2hfY2ZnXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7CiAJCX0KIAkJRFAoTkVUSUZfTVNHX0xJTkssICJQaHkgYWRkcmVzcyA9IDB4JXhcbiIsIHBhcmFtcy0+cGh5X2FkZHIpOwogCkBAIC00ODQzLDI0ICs2MDg0LDIzIEBACiAJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LCBleHRfcGh5X2FkZHIsCiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwgMHgwMDAxKTsKLQotCS8qIERpc2FibGUgVHJhbnNtaXR0ZXIgKi8KLQlibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihicCwgcG9ydCwgZXh0X3BoeV9hZGRyLCAwKTsKLQogfQogCiB1OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAogCQkgIHU4IHJlc2V0X2V4dF9waHkpCiB7Ci0KIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MzIgZXh0X3BoeV9jb25maWcgPSBwYXJhbXMtPmV4dF9waHlfY29uZmlnOwogCXUxNiBod19sZWRfbW9kZSA9IHBhcmFtcy0+aHdfbGVkX21vZGU7CiAJdTMyIGNoaXBfaWQgPSBwYXJhbXMtPmNoaXBfaWQ7CiAJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKIAl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoZXh0X3BoeV9jb25maWcpOwotCS8qIGRpc2FibGUgYXR0ZW50aW9ucyAqLworCXUzMiB2YWwgPSBSRUdfUkQoYnAsIHBhcmFtcy0+c2htZW1fYmFzZSArCisJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBzaG1lbV9yZWdpb24sIGRldl9pbmZvLgorCQkJCSAgICAgIHBvcnRfZmVhdHVyZV9jb25maWdbcGFyYW1zLT5wb3J0XS4KKwkJCQkgICAgICBjb25maWcpKTsKIAorCS8qIGRpc2FibGUgYXR0ZW50aW9ucyAqLwogCXZhcnMtPmxpbmtfc3RhdHVzID0gMDsKIAlibngyeF91cGRhdGVfbW5nKHBhcmFtcywgdmFycy0+bGlua19zdGF0dXMpOwogCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LApAQCAtNDg5Myw2ICs2MTMzLDIwIEBACiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCXsKKworCQkJLyogRGlzYWJsZSBUcmFuc21pdHRlciAqLworCQkJdTggZXh0X3BoeV9hZGRyID0KKwkJCQlYR1hTX0VYVF9QSFlfQUREUihwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKwkJCWlmICgodmFsICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX01BU0spID09CisJCQkgICAgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0RJU0FCTEVfVFhfTEFTRVIpCisJCQkJYm54Mnhfc2ZwX3NldF90cmFuc21pdHRlcihicCwgcG9ydCwKKwkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCQkJZXh0X3BoeV9hZGRyLCAwKTsKKwkJCWJyZWFrOworCQl9CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyA4MDczIHBvcnQgJWQgaW50byAiCiAJCQkJICJsb3cgcG93ZXIgbW9kZVxuIiwKQEAgLTQ5MDMsOSArNjE1Nyw4IEBACiAJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgogCQl7Ci0JCQl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgotCQkJCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKKwkJCXU4IGV4dF9waHlfYWRkciA9CisJCQkJWEdYU19FWFRfUEhZX0FERFIocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAJCQkvKiBTZXQgc29mdCByZXNldCAqLwogCQkJYm54MnhfODcyNl9yZXNldF9waHkoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyKTsKIAkJCWJyZWFrOwpAQCAtNDk0Myw2ICs2MTk2LDcgQEAKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCiAJRFAoTkVUSUZfTVNHX0xJTkssICJQb3J0ICV4OiBMaW5rIGlzIGRvd25cbiIsIHBvcnQpOwogCWJueDJ4X3NldF9sZWQoYnAsIHBvcnQsIExFRF9NT0RFX09GRiwKIAkJICAgIDAsIHBhcmFtcy0+aHdfbGVkX21vZGUsCkBAIC00OTc5LDYgKzYyMzMsNyBAQAogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwogCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CiAJdTggcmMgPSAwOworCiAJdmFycy0+bGlua19zdGF0dXMgfD0gTElOS19TVEFUVVNfTElOS19VUDsKIAlpZiAobGlua18xMGcpIHsKIAkJYm54MnhfYm1hY19lbmFibGUocGFyYW1zLCB2YXJzLCAwKTsKQEAgLTUwMzIsMTYgKzYyODcsMTkgQEAKIAl1OCBsaW5rXzEwZzsKIAl1OCBleHRfcGh5X2xpbmtfdXAsIHJjID0gMDsKIAl1MzIgZXh0X3BoeV90eXBlOworCXU4IGlzX21pX2ludCA9IDA7CiAKIAlEUChORVRJRl9NU0dfTElOSywgInBvcnQgJXgsIFhHWFM/JXgsIGludF9zdGF0dXMgMHgleFxuIiwKLQkgcG9ydCwKLQkodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRyksCi0JIFJFR19SRChicCwgTklHX1JFR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0KSk7CisJCSBwb3J0LCAodmFycy0+cGh5X2ZsYWdzICYgUEhZX1hHWFNfRkxBRyksCisJCSBSRUdfUkQoYnAsIE5JR19SRUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCkpOwogCisJaXNfbWlfaW50ID0gKHU4KShSRUdfUkQoYnAsIE5JR19SRUdfRU1BQzBfU1RBVFVTX01JU0NfTUlfSU5UICsKKwkJCQkgICAgcG9ydCoweDE4KSA+IDApOwogCURQKE5FVElGX01TR19MSU5LLCAiaW50X21hc2sgMHgleCBNSV9JTlQgJXgsIFNFUkRFU19MSU5LICV4XG4iLAotCVJFR19SRChicCwgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMCArIHBvcnQqNCksCi0JUkVHX1JEKGJwLCBOSUdfUkVHX0VNQUMwX1NUQVRVU19NSVNDX01JX0lOVCArIHBvcnQqMHgxOCksCi0JUkVHX1JEKGJwLCBOSUdfUkVHX1NFUkRFUzBfU1RBVFVTX0xJTktfU1RBVFVTICsgcG9ydCoweDNjKSk7CisJCSBSRUdfUkQoYnAsIE5JR19SRUdfTUFTS19JTlRFUlJVUFRfUE9SVDAgKyBwb3J0KjQpLAorCQkgaXNfbWlfaW50LAorCQkgUkVHX1JEKGJwLAorCQkJICAgIE5JR19SRUdfU0VSREVTMF9TVEFUVVNfTElOS19TVEFUVVMgKyBwb3J0KjB4M2MpKTsKIAogCURQKE5FVElGX01TR19MSU5LLCAiIDEwRyAleCwgWEdYU19MSU5LICV4XG4iLAogCSAgUkVHX1JEKGJwLCBOSUdfUkVHX1hHWFMwX1NUQVRVU19MSU5LMTBHICsgcG9ydCoweDY4KSwKQEAgLTUwNTMsNyArNjMxMSw3IEBACiAJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CiAKIAkvKiBDaGVjayBleHRlcm5hbCBsaW5rIGNoYW5nZSBvbmx5IGZvciBub24tZGlyZWN0ICovCi0JZXh0X3BoeV9saW5rX3VwID0gYm54MnhfZXh0X3BoeV9pc19saW5rX3VwKHBhcmFtcywgdmFycyk7CisJZXh0X3BoeV9saW5rX3VwID0gYm54MnhfZXh0X3BoeV9pc19saW5rX3VwKHBhcmFtcywgdmFycywgaXNfbWlfaW50KTsKIAogCS8qIFJlYWQgZ3Bfc3RhdHVzICovCiAJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBvcnQsIHBhcmFtcy0+cGh5X2FkZHIsCkBAIC01MDYxLDcgKzYzMTksOCBAQAogCQkJICAgICAgTURJT19HUF9TVEFUVVNfVE9QX0FOX1NUQVRVUzEsCiAJCQkgICAgICAmZ3Bfc3RhdHVzKTsKIAotCXJjID0gYm54MnhfbGlua19zZXR0aW5nc19zdGF0dXMocGFyYW1zLCB2YXJzLCBncF9zdGF0dXMpOworCXJjID0gYm54MnhfbGlua19zZXR0aW5nc19zdGF0dXMocGFyYW1zLCB2YXJzLCBncF9zdGF0dXMsCisJCQkJICAgICAgZXh0X3BoeV9saW5rX3VwKTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCkBAIC01MDczLDcgKzYzMzIsNyBAQAogCQkgICAgKHZhcnMtPmxpbmVfc3BlZWQgPT0gU1BFRURfMTUwMDApIHx8CiAJCSAgICAodmFycy0+bGluZV9zcGVlZCA9PSBTUEVFRF8xNjAwMCkpOwogCi0JYm54MnhfbGlua19pbnRfYWNrKHBhcmFtcywgdmFycywgbGlua18xMGcpOworCWJueDJ4X2xpbmtfaW50X2FjayhwYXJhbXMsIHZhcnMsIGxpbmtfMTBnLCBpc19taV9pbnQpOwogCiAJLyogSW4gY2FzZSBleHRlcm5hbCBwaHkgbGluayBpcyB1cCwgYW5kIGludGVybmFsIGxpbmsgaXMgZG93bgogCSggbm90IGluaXRpYWxpemVkIHlldCBwcm9iYWJseSBhZnRlciBsaW5rIGluaXRpYWxpemF0aW9uLCBpdCBuZWVkcwpAQCAtNTA4Niw3ICs2MzQ1LDcgQEAKIAkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1KSAmJgogCSAgICAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpICYmCiAJICAgIChleHRfcGh5X2xpbmtfdXAgJiYgIXZhcnMtPnBoeV9saW5rX3VwKSkKLQkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzKTsKKwkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzLCAwKTsKIAogCS8qIGxpbmsgaXMgdXAgb25seSBpZiBib3RoIGxvY2FsIHBoeSBhbmQgZXh0ZXJuYWwgcGh5IGFyZSB1cCAqLwogCXZhcnMtPmxpbmtfdXAgPSAoZXh0X3BoeV9saW5rX3VwICYmIHZhcnMtPnBoeV9saW5rX3VwKTsKQEAgLTUxMTksMTAgKzYzNzgsNyBAQAogCQkJICAgICAgTklHX01BU0tfU0VSREVTMF9MSU5LX1NUQVRVUyB8CiAJCQkgICAgICBOSUdfTUFTS19NSV9JTlQpKTsKIAotCQlleHRfcGh5X2FkZHJbcG9ydF0gPQotCQkJKChleHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCQlleHRfcGh5X2FkZHJbcG9ydF0gPSBYR1hTX0VYVF9QSFlfQUREUihleHRfcGh5X2NvbmZpZyk7CiAKIAkJLyogTmVlZCB0byB0YWtlIHRoZSBwaHkgb3V0IG9mIGxvdyBwb3dlciBtb2RlIGluIG9yZGVyCiAJCQl0byB3cml0ZSB0byBhY2Nlc3MgaXRzIHJlZ2lzdGVycyAqLwpAQCAtNTIxNywxMiArNjQ3Myw4MSBAQAogCiB9CiAKK3N0YXRpYyB1OCBibngyeF84NzI3X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKK3sKKwl1OCBleHRfcGh5X2FkZHJbUE9SVF9NQVhdOworCXM4IHBvcnQsIGZpcnN0X3BvcnQsIGk7CisJdTMyIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlOworCURQKE5FVElGX01TR19MSU5LLCAiRXhlY3V0aW5nIEJDTTg3MjcgY29tbW9uIGluaXRcbiIpOworCXN3YXBfdmFsID0gUkVHX1JEKGJwLCAgTklHX1JFR19QT1JUX1NXQVApOworCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsICBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKKworCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIDEgXiAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkpOworCW1zbGVlcCg1KTsKKworCWlmIChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKQorCQlmaXJzdF9wb3J0ID0gUE9SVF8wOworCWVsc2UKKwkJZmlyc3RfcG9ydCA9IFBPUlRfMTsKKworCS8qIFBBUlQxIC0gUmVzZXQgYm90aCBwaHlzICovCisJZm9yIChpID0gMCwgcG9ydCA9IGZpcnN0X3BvcnQ7IGkgPCBQT1JUX01BWDsgaSsrLCBwb3J0ID0gIXBvcnQpIHsKKwkJLyogRXh0cmFjdCB0aGUgZXh0IHBoeSBhZGRyZXNzIGZvciB0aGUgcG9ydCAqLworCQl1MzIgZXh0X3BoeV9jb25maWcgPSBSRUdfUkQoYnAsIHNobWVtX2Jhc2UgKworCQkJCQlvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkgICBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5leHRlcm5hbF9waHlfY29uZmlnKSk7CisKKwkJLyogZGlzYWJsZSBhdHRlbnRpb25zICovCisJCWJueDJ4X2JpdHNfZGlzKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LAorCQkJICAgICAoTklHX01BU0tfWEdYUzBfTElOS19TVEFUVVMgfAorCQkJICAgICAgTklHX01BU0tfWEdYUzBfTElOSzEwRyB8CisJCQkgICAgICBOSUdfTUFTS19TRVJERVMwX0xJTktfU1RBVFVTIHwKKwkJCSAgICAgIE5JR19NQVNLX01JX0lOVCkpOworCisJCWV4dF9waHlfYWRkcltwb3J0XSA9IFhHWFNfRVhUX1BIWV9BRERSKGV4dF9waHlfY29uZmlnKTsKKworCQkvKiBSZXNldCB0aGUgcGh5ICovCisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCSAgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX0NUUkwsCisJCQkgICAgICAgMTw8MTUpOworCX0KKworCS8qIEFkZCBkZWxheSBvZiAxNTBtcyBhZnRlciByZXNldCAqLworCW1zbGVlcCgxNTApOworCisJLyogUEFSVDIgLSBEb3dubG9hZCBmaXJtd2FyZSB0byBib3RoIHBoeXMgKi8KKwlmb3IgKGkgPSAwLCBwb3J0ID0gZmlyc3RfcG9ydDsgaSA8IFBPUlRfTUFYOyBpKyssIHBvcnQgPSAhcG9ydCkgeworCQl1MTYgZndfdmVyMTsKKworCQlibngyeF9iY204NzI3X2V4dGVybmFsX3JvbV9ib290KGJwLCBwb3J0LAorCQkJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sIHNobWVtX2Jhc2UpOworCisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNywKKwkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7CisJCWlmIChmd192ZXIxID09IDAgfHwgZndfdmVyMSA9PSAweDQzMjEpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSAiYm54MnhfODcyN19jb21tb25faW5pdF9waHkgcG9ydCAleDoiCisJCQkJICJEb3dubG9hZCBmYWlsZWQuIGZ3IHZlcnNpb24gPSAweCV4XG4iLAorCQkJCSBwb3J0LCBmd192ZXIxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIAogc3RhdGljIHU4IGJueDJ4Xzg3MjZfY29tbW9uX2luaXRfcGh5KHN0cnVjdCBibngyeCAqYnAsIHUzMiBzaG1lbV9iYXNlKQogewogCXU4IGV4dF9waHlfYWRkcjsKIAl1MzIgdmFsOwogCXM4IHBvcnQ7CisKIAkvKiBVc2UgcG9ydDEgYmVjYXVzZSBvZiB0aGUgc3RhdGljIHBvcnQtc3dhcCAqLwogCS8qIEVuYWJsZSB0aGUgbW9kdWxlIGRldGVjdGlvbiBpbnRlcnJ1cHQgKi8KIAl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU9fRVZFTlRfRU4pOwpAQCAtNTIzMCw3ICs2NTU1LDcgQEAKIAkJKDE8PChNSVNDX1JFR0lTVEVSU19HUElPXzMgKyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQpKSk7CiAJUkVHX1dSKGJwLCBNSVNDX1JFR19HUElPX0VWRU5UX0VOLCB2YWwpOwogCi0JYm54MnhfaHdfcmVzZXQoYnAsIDEpOworCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIDEpOwogCW1zbGVlcCg1KTsKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVF9NQVg7IHBvcnQrKykgewogCQkvKiBFeHRyYWN0IHRoZSBleHQgcGh5IGFkZHJlc3MgZm9yIHRoZSBwb3J0ICovCkBAIC01MjM4LDEwICs2NTYzLDcgQEAKIAkJCQkJb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKIAkJCWRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmV4dGVybmFsX3BoeV9jb25maWcpKTsKIAotCQlleHRfcGh5X2FkZHIgPQotCQkJKChleHRfcGh5X2NvbmZpZyAmCi0JCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCQlleHRfcGh5X2FkZHIgPSBYR1hTX0VYVF9QSFlfQUREUihleHRfcGh5X2NvbmZpZyk7CiAJCURQKE5FVElGX01TR19MSU5LLCAiODcyNl9jb21tb25faW5pdCA6IGV4dF9waHlfYWRkciA9IDB4JXhcbiIsCiAJCQkgZXh0X3BoeV9hZGRyKTsKIApAQCAtNTI3NSw2ICs2NTk3LDEyIEBACiAJCXJjID0gYm54MnhfODA3M19jb21tb25faW5pdF9waHkoYnAsIHNobWVtX2Jhc2UpOwogCQlicmVhazsKIAl9CisKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3X05PQzoKKwkJcmMgPSBibngyeF84NzI3X2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7CisJCWJyZWFrOworCiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgogCQkvKiBHUElPMSBhZmZlY3RzIGJvdGggcG9ydHMsIHNvIHRoZXJlJ3MgbmVlZCB0byBwdWxsCiAJCWl0IGZvciBzaW5nbGUgcG9ydCBhbG9uZSAqLwpAQCAtNTI5MSw5ICs2NjE5LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotCi1zdGF0aWMgdm9pZCBibngyeF9zZng3MTAxX3NwX3N3X3Jlc2V0KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHU4IHBoeV9hZGRyKQordm9pZCBibngyeF9zZng3MTAxX3NwX3N3X3Jlc2V0KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsIHU4IHBoeV9hZGRyKQogewogCXUxNiB2YWwsIGNudDsKIApAQCAtNTMyMywzNzcgKzY2NDksMyBAQAogCQkJYnJlYWs7CiAJfQogfQotI2RlZmluZSBSRVNFUlZFRF9TSVpFIDI1NgotLyogbWF4IGFwcGxpY2F0aW9uIGlzIDE2MEsgYnl0ZXMgLSBkYXRhIGF0IGVuZCBvZiBSQU0gKi8KLSNkZWZpbmUgTUFYX0FQUF9TSVpFICgxNjAqMTAyNCAtIFJFU0VSVkVEX1NJWkUpCi0KLS8qIEhlYWRlciBpcyAxNCBieXRlcyAqLwotI2RlZmluZSBIRUFERVJfU0laRSAxNAotI2RlZmluZSBEQVRBX09GRlNFVCBIRUFERVJfU0laRQotCi0jZGVmaW5lIFNQSV9TVEFSVF9UUkFOU0ZFUihicCwgcG9ydCwgZXh0X3BoeV9hZGRyKSBcCi0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwgXAotCQkJZXh0X3BoeV9hZGRyLCBcCi0JCQlNRElPX1BDU19ERVZBRCwgXAotCQkJTURJT19QQ1NfUkVHXzcxMDFfU1BJX0NUUkxfQUREUiwgMSkKLQotLyogUHJvZ3JhbXMgYW4gaW1hZ2UgdG8gRFNQJ3MgZmxhc2ggdmlhIHRoZSBTUEkgcG9ydCovCi1zdGF0aWMgdTggYm54Mnhfc2Z4NzEwMV9mbGFzaF9kb3dubG9hZChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAotCQkJCSAgICAgdTggZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgY2hhciBkYXRhW10sIHUzMiBzaXplKQotewotCWNvbnN0IHUxNiBudW1fdHJhbnMgPSBzaXplLzQ7IC8qIDQgYnl0ZXMgY2FuIGJlIHNlbnQgYXQgYSB0aW1lICovCi0JLyogRG9lc24ndCBpbmNsdWRlIGxhc3QgdHJhbnMhKi8KLQljb25zdCB1MTYgbGFzdF90cmFuc19zaXplID0gc2l6ZSU0OyAvKiBOdW0gYnl0ZXMgb24gbGFzdCB0cmFucyAqLwotCXUxNiB0cmFuc19jbnQsIGJ5dGVfY250OwotCXUzMiBkYXRhX2luZGV4OwotCXUxNiB0bXA7Ci0JdTE2IGNvZGVfc3RhcnRlZCA9IDA7Ci0JdTE2IGltYWdlX3JldmlzaW9uMSwgaW1hZ2VfcmV2aXNpb24yOwotCXUxNiBjbnQ7Ci0KLQlEUChORVRJRl9NU0dfTElOSywgImJueDJ4X3NmeDcxMDFfZmxhc2hfZG93bmxvYWQgZmlsZV9zaXplPSVkXG4iLCBzaXplKTsKLQkvKiBHb2luZyB0byBmbGFzaCovCi0JaWYgKChzaXplLUhFQURFUl9TSVpFKSA+IE1BWF9BUFBfU0laRSkgewotCQkvKiBUaGlzIHZlcnkgb2Z0ZW4gd2lsbCBiZSB0aGUgY2FzZSwgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgYnVpbHQKLQkJd2l0aCAxNjBLYnl0ZXMgc2l6ZSB3aGVyZWFzIHRoZSB0b3RhbCBpbWFnZSBzaXplIG11c3QgYWN0dWFsbHkKLQkJYmUgMTYwS2J5dGVzLVJFU0VSVkVEX1NJWkUgKi8KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJXYXJuaW5nLCBmaWxlIHNpemUgd2FzICVkIGJ5dGVzICIKLQkJCSAidHJ1bmNhdGVkIHRvICVkIGJ5dGVzXG4iLCBzaXplLCBNQVhfQVBQX1NJWkUpOwotCQlzaXplID0gTUFYX0FQUF9TSVpFK0hFQURFUl9TSVpFOwotCX0KLQlEUChORVRJRl9NU0dfTElOSywgIkZpbGUgdmVyc2lvbiBpcyAlYyVjXG4iLCBkYXRhWzB4MTRlXSwgZGF0YVsweDE0Zl0pOwotCURQKE5FVElGX01TR19MSU5LLCAiICAJICAgICAgJWMlY1xuIiwgZGF0YVsweDE1MF0sIGRhdGFbMHgxNTFdKTsKLQkvKiBQdXQgdGhlIERTUCBpbiBkb3dubG9hZCBtb2RlIGJ5IHNldHRpbmcgRkxBU0hfQ0ZHWzJdIHRvIDEKLQkgICBhbmQgaXNzdWluZyBhIHJlc2V0LiovCi0KLQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAotCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gsIHBvcnQpOwotCi0JYm54Mnhfc2Z4NzEwMV9zcF9zd19yZXNldChicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKLQotCS8qIHdhaXQgMC41IHNlYyAqLwotCWZvciAoY250ID0gMDsgY250IDwgMTAwOyBjbnQrKykKLQkJbXNsZWVwKDUpOwotCi0JLyogTWFrZSBzdXJlIHdlIGNhbiBhY2Nlc3MgdGhlIERTUAotCSAgIEFuZCBpdCdzIGluIHRoZSBjb3JyZWN0IG1vZGUgKHdhaXRpbmcgZm9yIGRvd25sb2FkKSAqLwotCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICBNRElPX1BDU19SRUdfNzEwMV9EU1BfQUNDRVNTLCAmdG1wKTsKLQotCWlmICh0bXAgIT0gMHgwMDBBKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRFNQIGlzIG5vdCBpbiB3YWl0aW5nIG9uIGRvd25sb2FkIG1vZGUuICIKLQkJCSAiRXhwZWN0ZWQgMHgwMDBBLCByZWFkIDB4JTA0WFxuIiwgdG1wKTsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJEb3dubG9hZCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBNdXggdGhlIFNQSSBpbnRlcmZhY2UgYXdheSBmcm9tIHRoZSBpbnRlcm5hbCBwcm9jZXNzb3IgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX01VWCwgMSk7Ci0KLQkvKiBSZXNldCB0aGUgU1BJIHBvcnQgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0NUUkxfQUREUiwgMCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9DVFJMX0FERFIsCi0JCSAgICAgICAoMTw8TURJT19QQ1NfUkVHXzcxMDFfU1BJX1JFU0VUX0JJVCkpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfQ1RSTF9BRERSLCAwKTsKLQotCS8qIEVyYXNlIHRoZSBmbGFzaCAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUl9XUklURV9FTkFCTEVfQ01EKTsKLQotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfQllURVNfVE9fVFJBTlNGRVJfQUREUiwKLQkJICAgICAgIDEpOwotCi0JU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUl9CVUxLX0VSQVNFX0NNRCk7Ci0KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCi0JCSAgICAgICAxKTsKLQlTUElfU1RBUlRfVFJBTlNGRVIoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7Ci0KLQkvKiBXYWl0IDEwIHNlY29uZHMsIHRoZSBtYXhpbXVtIHRpbWUgZm9yIHRoZSBlcmFzZSB0byBjb21wbGV0ZSAqLwotCURQKE5FVElGX01TR19MSU5LLCAiRXJhc2luZyBmbGFzaCwgdGhpcyB0YWtlcyAxMCBzZWNvbmRzLi4uXG4iKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDA7IGNudCsrKQotCQltc2xlZXAoMTApOwotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJEb3dubG9hZGluZyBmbGFzaCwgcGxlYXNlIHdhaXQuLi5cbiIpOwotCWRhdGFfaW5kZXggPSAwOwotCWZvciAodHJhbnNfY250ID0gMDsgdHJhbnNfY250IDwgbnVtX3RyYW5zOyB0cmFuc19jbnQrKykgewotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfV1JJVEVfRU5BQkxFX0NNRCk7Ci0KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfQllURVNfVE9fVFJBTlNGRVJfQUREUiwKLQkJCSAgICAgICAxKTsKLQkJU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOwotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCSAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUl9QQUdFX1BST0dSQU1fQ01EKTsKLQotCQkvKiBCaXRzIDIzLTE2IG9mIGFkZHJlc3MgKi8KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAotCQkJICAgICAgIChkYXRhX2luZGV4Pj4xNikpOwotCQkvKiBCaXRzIDE1LTggb2YgYWRkcmVzcyAqLwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgICAgKGRhdGFfaW5kZXg+PjgpKTsKLQotCQkvKiBCaXRzIDctMCBvZiBhZGRyZXNzICovCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCSAgICAgICAoKHUxNilkYXRhX2luZGV4KSk7Ci0KLQkJYnl0ZV9jbnQgPSAwOwotCQl3aGlsZSAoYnl0ZV9jbnQgPCA0ICYmIGRhdGFfaW5kZXggPCBzaXplKSB7Ci0JCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCSAgICAgICBkYXRhW2RhdGFfaW5kZXgrK10pOwotCQkJYnl0ZV9jbnQrKzsKLQkJfQotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCi0JCQkgICAgICAgYnl0ZV9jbnQrNCk7Ci0KLQkJU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOwotCQltc2xlZXAoNSk7IC8qIFdhaXQgNSBtcyBtaW5pbXVtIGJldHdlZW4gdHJhbnNzICovCi0KLQkJLyogTGV0IHRoZSB1c2VyIGtub3cgc29tZXRoaW5nJ3MgZ29pbmcgb24uKi8KLQkJLyogYSBwYWNpZmllciBldmVyIDRLICovCi0JCWlmICgoZGF0YV9pbmRleCAlIDEwMjMpID09IDApCi0JCQlEUChORVRJRl9NU0dfTElOSywgIkRvd25sb2FkICVkJSVcbiIsIGRhdGFfaW5kZXgvc2l6ZSk7Ci0JfQotCi0JRFAoTkVUSUZfTVNHX0xJTkssICJcbiIpOwotCS8qIFRyYW5zZmVyIHRoZSBsYXN0IGJsb2NrIGlmIHRoZXJlIGlzIGRhdGEgcmVtYWluaW5nICovCi0JaWYgKGxhc3RfdHJhbnNfc2l6ZSkgewotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCWV4dF9waHlfYWRkciwKLQkJCU1ESU9fUENTX0RFVkFELAotCQkJTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCU1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFJfV1JJVEVfRU5BQkxFX0NNRCk7Ci0KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfQllURVNfVE9fVFJBTlNGRVJfQUREUiwKLQkJCSAgICAgICAxKTsKLQotCQlTUElfU1RBUlRfVFJBTlNGRVIoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7Ci0KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICBNRElPX1BDU19ERVZBRCwKLQkJCSAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCSAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUl9QQUdFX1BST0dSQU1fQ01EKTsKLQotCQkvKiBCaXRzIDIzLTE2IG9mIGFkZHJlc3MgKi8KLQkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKLQkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkJICAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgICBNRElPX1BDU19ERVZBRCwKLQkJCSAgICAgICBNRElPX1BDU19SRUdfNzEwMV9TUElfRklGT19BRERSLAotCQkJICAgICAgIChkYXRhX2luZGV4Pj4xNikpOwotCQkvKiBCaXRzIDE1LTggb2YgYWRkcmVzcyAqLwotCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAotCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCQkgICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgIE1ESU9fUENTX0RFVkFELAotCQkJICAgICAgIE1ESU9fUENTX1JFR183MTAxX1NQSV9GSUZPX0FERFIsCi0JCQkgICAgICAgKGRhdGFfaW5kZXg+PjgpKTsKLQotCQkvKiBCaXRzIDctMCBvZiBhZGRyZXNzICovCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCSAgICAgICAoKHUxNilkYXRhX2luZGV4KSk7Ci0KLQkJYnl0ZV9jbnQgPSAwOwotCQl3aGlsZSAoYnl0ZV9jbnQgPCBsYXN0X3RyYW5zX3NpemUgJiYgZGF0YV9pbmRleCA8IHNpemUpIHsKLQkJCS8qIEJpdHMgNy0wIG9mIGFkZHJlc3MgKi8KLQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCQlleHRfcGh5X2FkZHIsCi0JCQkJTURJT19QQ1NfREVWQUQsCi0JCQkJTURJT19QQ1NfUkVHXzcxMDFfU1BJX0ZJRk9fQUREUiwKLQkJCQlkYXRhW2RhdGFfaW5kZXgrK10pOwotCQkJYnl0ZV9jbnQrKzsKLQkJfQotCi0JCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCi0JCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSwKLQkJCSAgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkgICAgICAgTURJT19QQ1NfUkVHXzcxMDFfU1BJX0JZVEVTX1RPX1RSQU5TRkVSX0FERFIsCi0JCQkgICAgICAgYnl0ZV9jbnQrNCk7Ci0KLQkJU1BJX1NUQVJUX1RSQU5TRkVSKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOwotCX0KLQotCS8qIERTUCBSZW1vdmUgRG93bmxvYWQgTW9kZSAqLwotCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCi0JCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XLCBwb3J0KTsKLQotCWJueDJ4X3NmeDcxMDFfc3Bfc3dfcmVzZXQoYnAsIHBvcnQsIGV4dF9waHlfYWRkcik7Ci0KLQkvKiB3YWl0IDAuNSBzZWMgdG8gYWxsb3cgaXQgdG8gcnVuICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCAxMDA7IGNudCsrKQotCQltc2xlZXAoNSk7Ci0KLQlibngyeF9od19yZXNldChicCwgcG9ydCk7Ci0KLQlmb3IgKGNudCA9IDA7IGNudCA8IDEwMDsgY250KyspCi0JCW1zbGVlcCg1KTsKLQotCS8qIENoZWNrIHRoYXQgdGhlIGNvZGUgaXMgc3RhcnRlZC4gSW4gY2FzZSB0aGUgZG93bmxvYWQKLQljaGVja3N1bSBmYWlsZWQsIHRoZSBjb2RlIHdvbid0IGJlIHN0YXJ0ZWQuICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUENTX0RFVkFELAotCQkgICAgICBNRElPX1BDU19SRUdfNzEwMV9EU1BfQUNDRVNTLAotCQkgICAgICAmdG1wKTsKLQotCWNvZGVfc3RhcnRlZCA9ICh0bXAgJiAoMTw8NCkpOwotCWlmICghY29kZV9zdGFydGVkKSB7Ci0JCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWQgZmFpbGVkLiBQbGVhc2UgY2hlY2sgZmlsZS5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBWZXJpZnkgdGhhdCB0aGUgZmlsZSByZXZpc2lvbiBpcyBub3cgZXF1YWwgdG8gdGhlIGltYWdlCi0JcmV2aXNpb24gd2l0aGluIHRoZSBEU1AgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR183MTAxX1ZFUjEsCi0JCSAgICAgICZpbWFnZV9yZXZpc2lvbjEpOwotCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LAotCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICBNRElPX1BNQV9SRUdfNzEwMV9WRVIyLAotCQkgICAgICAmaW1hZ2VfcmV2aXNpb24yKTsKLQotCWlmIChkYXRhWzB4MTRlXSAhPSAoaW1hZ2VfcmV2aXNpb24yJjB4RkYpIHx8Ci0JICAgIGRhdGFbMHgxNGZdICE9ICgoaW1hZ2VfcmV2aXNpb24yJjB4RkYwMCk+PjgpIHx8Ci0JICAgIGRhdGFbMHgxNTBdICE9IChpbWFnZV9yZXZpc2lvbjEmMHhGRikgfHwKLQkgICAgZGF0YVsweDE1MV0gIT0gKChpbWFnZV9yZXZpc2lvbjEmMHhGRjAwKT4+OCkpIHsKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJEb3dubG9hZCBmYWlsZWQuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCURQKE5FVElGX01TR19MSU5LLCAiRG93bmxvYWQgJWQlJVxuIiwgZGF0YV9pbmRleC9zaXplKTsKLQlyZXR1cm4gMDsKLX0KLQotdTggYm54MnhfZmxhc2hfZG93bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTMyIGV4dF9waHlfY29uZmlnLAotCQkgICAgICB1OCBkcml2ZXJfbG9hZGVkLCBjaGFyIGRhdGFbXSwgdTMyIHNpemUpCi17Ci0JdTggcmMgPSAwOwotCXUzMiBleHRfcGh5X3R5cGU7Ci0JdTggZXh0X3BoeV9hZGRyOwotCWV4dF9waHlfYWRkciA9ICgoZXh0X3BoeV9jb25maWcgJgotCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KLQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKLQotCWV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKTsKLQotCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKLQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgotCQlEUChORVRJRl9NU0dfTElOSywKLQkJCSJGbGFzaCBkb3dubG9hZCBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGV4dCBwaHlcbiIpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJLyogVGFrZSBleHQgcGh5IG91dCBvZiByZXNldCAqLwotCQlpZiAoIWRyaXZlcl9sb2FkZWQpCi0JCQlibngyeF90dXJuX29uX2VmKGJwLCBwb3J0LCBleHRfcGh5X2FkZHIsIGV4dF9waHlfdHlwZSk7Ci0JCXJjID0gYm54Mnhfc2Z4NzEwMV9mbGFzaF9kb3dubG9hZChicCwgcG9ydCwgZXh0X3BoeV9hZGRyLAotCQkJCQkJZGF0YSwgc2l6ZSk7Ci0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb2ZmX3NmKGJwLCBwb3J0KTsKLQkJYnJlYWs7Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6Ci0JY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk46Ci0JZGVmYXVsdDoKLQkJRFAoTkVUSUZfTVNHX0xJTkssICJJbnZhbGlkIGV4dCBwaHkgdHlwZVxuIik7Ci0JCXJjID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByYzsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5oIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5oCmluZGV4IDE5YTg2NmQuLmYzZTI1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKQEAgLTM5LDcgKzM5LDEzIEBACiAjZGVmaW5lIFNQRUVEXzE1MDAwCQkxNTAwMAogI2RlZmluZSBTUEVFRF8xNjAwMAkJMTYwMDAKIAotCisjZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX05BTUVfQUREUgkJMHgxNAorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkUJCTE2CisjZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX09VSV9BRERSCQkweDI1CisjZGVmaW5lIFNGUF9FRVBST01fVkVORE9SX09VSV9TSVpFCQkzCisjZGVmaW5lIFNGUF9FRVBST01fUEFSVF9OT19BRERSIAkJMHgyOAorI2RlZmluZSBTRlBfRUVQUk9NX1BBUlRfTk9fU0laRQkJMTYKKyNkZWZpbmUgUFdSX0ZMVF9FUlJfTVNHX0xFTgkJCTI1MAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzUsNDcgKzgxLDU5IEBACiAjZGVmaW5lIFNXSVRDSF9DRkdfQVVUT19ERVRFQ1QJUE9SVF9GRUFUVVJFX0NPTl9TV0lUQ0hfQVVUT19ERVRFQ1QKIAogCXUxNiBod19sZWRfbW9kZTsgLyogcGFydCBvZiB0aGUgaHdfY29uZmlnIHJlYWQgZnJvbSB0aGUgc2htZW0gKi8KKworCS8qIHBoeV9hZGRyIHBvcHVsYXRlZCBieSB0aGUgcGh5X2luaXQgZnVuY3Rpb24gKi8KKwl1OCBwaHlfYWRkcjsKKwkvKnU4IHJlc2VydmVkMTsqLworCiAJdTMyIGxhbmVfY29uZmlnOwogCXUzMiBleHRfcGh5X2NvbmZpZzsKLSNkZWZpbmUgWEdYU19FWFRfUEhZX1RZUEUoZXh0X3BoeV9jb25maWcpCShleHRfcGh5X2NvbmZpZyAmIFwKLQkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSykKLSNkZWZpbmUgU0VSREVTX0VYVF9QSFlfVFlQRShleHRfcGh5X2NvbmZpZykJKGV4dF9waHlfY29uZmlnICYgXAotCQkJCQlQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX01BU0spCisjZGVmaW5lIFhHWFNfRVhUX1BIWV9UWVBFKGV4dF9waHlfY29uZmlnKSBcCisJCSgoZXh0X3BoeV9jb25maWcpICYgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSykKKyNkZWZpbmUgWEdYU19FWFRfUEhZX0FERFIoZXh0X3BoeV9jb25maWcpIFwKKwkJKCgoZXh0X3BoeV9jb25maWcpICYgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4gXAorCQkgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpCisjZGVmaW5lIFNFUkRFU19FWFRfUEhZX1RZUEUoZXh0X3BoeV9jb25maWcpIFwKKwkJKChleHRfcGh5X2NvbmZpZykgJiBQT1JUX0hXX0NGR19TRVJERVNfRVhUX1BIWV9UWVBFX01BU0spCisKIAkvKiBQaHkgcmVnaXN0ZXIgcGFyYW1ldGVyICovCiAJdTMyIGNoaXBfaWQ7CiAKLQkvKiBwaHlfYWRkciBwb3B1bGF0ZWQgYnkgdGhlIENMQyAqLwotCXU4IHBoeV9hZGRyOwogCXUxNiB4Z3hzX2NvbmZpZ19yeFs0XTsgLyogcHJlZW1waGFzaXMgdmFsdWVzIGZvciB0aGUgcnggc2lkZSAqLwotCiAJdTE2IHhneHNfY29uZmlnX3R4WzRdOyAvKiBwcmVlbXBoYXNpcyB2YWx1ZXMgZm9yIHRoZSB0eCBzaWRlICovCisKIAl1MzIgZmVhdHVyZV9jb25maWdfZmxhZ3M7CiAjZGVmaW5lIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQgKDE8PDApCi0jZGVmaW5lIEZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQJKDI8PDApCisjZGVmaW5lIEZFQVRVUkVfQ09ORklHX0JDX1NVUFBPUlRTX09QVF9NRExfVlJGWQkoMTw8MikKKyNkZWZpbmUgRkVBVFVSRV9DT05GSUdfQkNNODcyN19OT0MJCQkoMTw8MykKKwogCS8qIERldmljZSBwb2ludGVyIHBhc3NlZCB0byBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zICovCiAJc3RydWN0IGJueDJ4ICpicDsKIH07CiAKIC8qIE91dHB1dCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgbGlua192YXJzIHsKKwl1OCBwaHlfZmxhZ3M7CisKKwl1OCBtYWNfdHlwZTsKKyNkZWZpbmUgTUFDX1RZUEVfTk9ORQkJMAorI2RlZmluZSBNQUNfVFlQRV9FTUFDCQkxCisjZGVmaW5lIE1BQ19UWVBFX0JNQUMJCTIKKwogCXU4IHBoeV9saW5rX3VwOyAvKiBpbnRlcm5hbCBwaHkgbGluayBpbmRpY2F0aW9uICovCiAJdTggbGlua191cDsKLQl1MTYgZHVwbGV4OwotCXUxNiBmbG93X2N0cmw7Ci0JdTMyIGllZWVfZmM7Ci0JdTggbWFjX3R5cGU7CiAKLSNkZWZpbmUgTUFDX1RZUEVfTk9ORQkwCi0jZGVmaW5lIE1BQ19UWVBFX0VNQUMJMQotI2RlZmluZSBNQUNfVFlQRV9CTUFDCTIKIAl1MTYgbGluZV9zcGVlZDsKKwl1MTYgZHVwbGV4OworCisJdTE2IGZsb3dfY3RybDsKKwl1MTYgaWVlZV9mYzsKKwogCXUzMiBhdXRvbmVnOwogI2RlZmluZSBBVVRPX05FR19ESVNBQkxFRAkJCTB4MAogI2RlZmluZSBBVVRPX05FR19FTkFCTEVECQkJMHgxCiAjZGVmaW5lIEFVVE9fTkVHX0NPTVBMRVRFCQkJMHgyCi0jZGVmaW5lIEFVVE9fTkVHX1BBUkFMTEVMX0RFVEVDVElPTl9VU0VEIAkweDMKLQotCXU4IHBoeV9mbGFnczsKKyNkZWZpbmUgQVVUT19ORUdfUEFSQUxMRUxfREVURUNUSU9OX1VTRUQJMHgzCiAKIAkvKiBUaGUgc2FtZSBkZWZpbml0aW9ucyBhcyB0aGUgc2htZW0gcGFyYW1ldGVyICovCiAJdTMyIGxpbmtfc3RhdHVzOwpAQCAtMTY3LDggKzE4NSw2IEBACiAKIHU4IGJueDJ4X292ZXJyaWRlX2xlZF92YWx1ZShzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1MzIgbGVkX2lkeCwgdTMyIHZhbHVlKTsKIAotdTggYm54MnhfZmxhc2hfZG93bmxvYWQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTMyIGV4dF9waHlfY29uZmlnLAotCQkgICAgICB1OCBkcml2ZXJfbG9hZGVkLCBjaGFyIGRhdGFbXSwgdTMyIHNpemUpOwogLyogYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50IHNob3VsZCBiZSBjYWxsZWQgdXBvbiBtb2R1bGUgZGV0ZWN0aW9uCiAgICBpbnRlcnJ1cHQgKi8KIHZvaWQgYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKTsKQEAgLTE4MCw1ICsxOTYsMTIgQEAKIC8qIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIGZvciBleHRlcm5hbCBwaHkgYWZ0ZXIgcG93ZXIgdXAgKi8KIHU4IGJueDJ4X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSk7CiAKKy8qIFJlc2V0IHRoZSBleHRlcm5hbCBQSFkgdXNpbmcgR1BJTyAqLwordm9pZCBibngyeF9leHRfcGh5X2h3X3Jlc2V0KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQpOworCit2b2lkIGJueDJ4X3NmeDcxMDFfc3Bfc3dfcmVzZXQoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTggcGh5X2FkZHIpOworCit1OCBibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1MTYgYWRkciwKKwkJCSAgICAgIHU4IGJ5dGVfY250LCB1OCAqb19idWYpOwogCiAjZW5kaWYgLyogQk5YMlhfTElOS19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKaW5kZXggYzM2YTVmMy4uMjBmMGVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwpAQCAtMTAsNyArMTAsNyBAQAogICogV3JpdHRlbiBieTogRWxpZXplciBUYW1pcgogICogQmFzZWQgb24gY29kZSBmcm9tIE1pY2hhZWwgQ2hhbidzIGJueDIgZHJpdmVyCiAgKiBVRFAgQ1NVTSBlcnJhdGEgd29ya2Fyb3VuZCBieSBBcmlrIEdlbmRlbG1hbgotICogU2xvd3BhdGggcmV3b3JrIGJ5IFZsYWRpc2xhdiBab2xvdGFyb3YKKyAqIFNsb3dwYXRoIGFuZCBmYXN0cGF0aCByZXdvcmsgYnkgVmxhZGlzbGF2IFpvbG90YXJvdgogICogU3RhdGlzdGljcyBhbmQgTGluayBtYW5hZ2VtZW50IGJ5IFlpdGNoYWsgR2VydG5lcgogICoKICAqLwpAQCAtNTYsMTUgKzU2LDE1IEBACiAjaW5jbHVkZSAiYm54MnhfaW5pdF9vcHMuaCIKICNpbmNsdWRlICJibngyeF9kdW1wLmgiCiAKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjQ4LjEwNS0xIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIwMDkvMDQvMjIiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS41Mi4xIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIwMDkvMDgvMTIiCiAjZGVmaW5lIEJOWDJYX0JDX1ZFUgkJMHgwNDAyMDAKIAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSAiYm54MnhfZndfZmlsZV9oZHIuaCIKIC8qIEZXIGZpbGVzICovCi0jZGVmaW5lIEZXX0ZJTEVfUFJFRklYX0UxCQkiYm54MngtZTEtIgotI2RlZmluZSBGV19GSUxFX1BSRUZJWF9FMUgJCSJibngyeC1lMWgtIgorI2RlZmluZSBGV19GSUxFX1BSRUZJWF9FMQkiYm54MngtZTEtIgorI2RlZmluZSBGV19GSUxFX1BSRUZJWF9FMUgJImJueDJ4LWUxaC0iCiAKIC8qIFRpbWUgaW4gamlmZmllcyBiZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZyAqLwogI2RlZmluZSBUWF9USU1FT1VUCQkoNSpIWikKQEAgLTgwLDcgKzgwLDE4IEBACiAKIHN0YXRpYyBpbnQgbXVsdGlfbW9kZSA9IDE7CiBtb2R1bGVfcGFyYW0obXVsdGlfbW9kZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobXVsdGlfbW9kZSwgIiBVc2UgcGVyLUNQVSBxdWV1ZXMiKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGlfbW9kZSwgIiBNdWx0aSBxdWV1ZSBtb2RlICIKKwkJCSAgICAgIigwIERpc2FibGU7IDEgRW5hYmxlIChkZWZhdWx0KSkiKTsKKworc3RhdGljIGludCBudW1fcnhfcXVldWVzOworbW9kdWxlX3BhcmFtKG51bV9yeF9xdWV1ZXMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV9yeF9xdWV1ZXMsICIgTnVtYmVyIG9mIFJ4IHF1ZXVlcyBmb3IgbXVsdGlfbW9kZT0xIgorCQkJCSIgKGRlZmF1bHQgaXMgaGFsZiBudW1iZXIgb2YgQ1BVcykiKTsKKworc3RhdGljIGludCBudW1fdHhfcXVldWVzOworbW9kdWxlX3BhcmFtKG51bV90eF9xdWV1ZXMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG51bV90eF9xdWV1ZXMsICIgTnVtYmVyIG9mIFR4IHF1ZXVlcyBmb3IgbXVsdGlfbW9kZT0xIgorCQkJCSIgKGRlZmF1bHQgaXMgaGFsZiBudW1iZXIgb2YgQ1BVcykiKTsKIAogc3RhdGljIGludCBkaXNhYmxlX3RwYTsKIG1vZHVsZV9wYXJhbShkaXNhYmxlX3RwYSwgaW50LCAwKTsKQEAgLTkwLDYgKzEwMSwxMCBAQAogbW9kdWxlX3BhcmFtKGludF9tb2RlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kZSwgIiBGb3JjZSBpbnRlcnJ1cHQgbW9kZSAoMSBJTlQjeDsgMiBNU0kpIik7CiAKK3N0YXRpYyBpbnQgZHJvcGxlc3NfZmM7Cittb2R1bGVfcGFyYW0oZHJvcGxlc3NfZmMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRyb3BsZXNzX2ZjLCAiIFBhdXNlIG9uIGV4aGF1c3RlZCBob3N0IHJpbmciKTsKKwogc3RhdGljIGludCBwb2xsOwogbW9kdWxlX3BhcmFtKHBvbGwsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvbGwsICIgVXNlIHBvbGxpbmcgKGZvciBkZWJ1ZykiKTsKQEAgLTEyMywxMiArMTM4LDkgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYm54MnhfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTAsCi0JCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJDTTU3NzEwIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMSwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQkNNNTc3MTEgfSwKLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExRSwKLQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQkNNNTc3MTFFIH0sCisJeyBQQ0lfVkRFVklDRShCUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTApLCBCQ001NzcxMCB9LAorCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzExKSwgQkNNNTc3MTEgfSwKKwl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMUUpLCBCQ001NzcxMUUgfSwKIAl7IDAgfQogfTsKIApAQCAtMTQxLDcgKzE1Myw3IEBACiAvKiB1c2VkIG9ubHkgYXQgaW5pdAogICogbG9ja2luZyBpcyBkb25lIGJ5IG1jcAogICovCi1zdGF0aWMgdm9pZCBibngyeF9yZWdfd3JfaW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCB1MzIgdmFsKQordm9pZCBibngyeF9yZWdfd3JfaW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCB1MzIgdmFsKQogewogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIFBDSUNGR19HUkNfQUREUkVTUywgYWRkcik7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChicC0+cGRldiwgUENJQ0ZHX0dSQ19EQVRBLCB2YWwpOwpAQCAtMTg4LDcgKzIwMCw3IEBACiB2b2lkIGJueDJ4X3dyaXRlX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgZG1hX2FkZHJfdCBkbWFfYWRkciwgdTMyIGRzdF9hZGRyLAogCQkgICAgICB1MzIgbGVuMzIpCiB7Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+aW5pdF9kbWFlOworCXN0cnVjdCBkbWFlX2NvbW1hbmQgZG1hZTsKIAl1MzIgKndiX2NvbXAgPSBibngyeF9zcChicCwgd2JfY29tcCk7CiAJaW50IGNudCA9IDIwMDsKIApAQCAtMjAxLDQzICsyMTMsNDMgQEAKIAkJcmV0dXJuOwogCX0KIAotCW11dGV4X2xvY2soJmJwLT5kbWFlX211dGV4KTsKKwltZW1zZXQoJmRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7CiAKLQltZW1zZXQoZG1hZSwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpKTsKLQotCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfUENJIHwgRE1BRV9DTURfRFNUX0dSQyB8Ci0JCQlETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8Ci0JCQlETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAorCWRtYWUub3Bjb2RlID0gKERNQUVfQ01EX1NSQ19QQ0kgfCBETUFFX0NNRF9EU1RfR1JDIHwKKwkJICAgICAgIERNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKKwkJICAgICAgIERNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JCQlETUFFX0NNRF9FTkRJQU5JVFlfQl9EV19TV0FQIHwKKwkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAogI2Vsc2UKLQkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKwkJICAgICAgIERNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKICNlbmRpZgotCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8Ci0JCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7Ci0JZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oZG1hX2FkZHIpOwotCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGRtYV9hZGRyKTsKLQlkbWFlLT5kc3RfYWRkcl9sbyA9IGRzdF9hZGRyID4+IDI7Ci0JZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOwotCWRtYWUtPmxlbiA9IGxlbjMyOwotCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7Ci0JZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKLQlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisJCSAgICAgICAoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKKwkJICAgICAgIChCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKKwlkbWFlLnNyY19hZGRyX2xvID0gVTY0X0xPKGRtYV9hZGRyKTsKKwlkbWFlLnNyY19hZGRyX2hpID0gVTY0X0hJKGRtYV9hZGRyKTsKKwlkbWFlLmRzdF9hZGRyX2xvID0gZHN0X2FkZHIgPj4gMjsKKwlkbWFlLmRzdF9hZGRyX2hpID0gMDsKKwlkbWFlLmxlbiA9IGxlbjMyOworCWRtYWUuY29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKKwlkbWFlLmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CisJZG1hZS5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CiAKIAlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRTogb3Bjb2RlIDB4JTA4eFxuIgogCSAgIERQX0xFVkVMICJzcmNfYWRkciAgWyV4OiUwOHhdICBsZW4gWyVkICo0XSAgIgogCQkgICAgImRzdF9hZGRyIFsleDolMDh4ICglMDh4KV1cbiIKIAkgICBEUF9MRVZFTCAiY29tcF9hZGRyIFsleDolMDh4XSAgY29tcF92YWwgMHglMDh4XG4iLAotCSAgIGRtYWUtPm9wY29kZSwgZG1hZS0+c3JjX2FkZHJfaGksIGRtYWUtPnNyY19hZGRyX2xvLAotCSAgIGRtYWUtPmxlbiwgZG1hZS0+ZHN0X2FkZHJfaGksIGRtYWUtPmRzdF9hZGRyX2xvLCBkc3RfYWRkciwKLQkgICBkbWFlLT5jb21wX2FkZHJfaGksIGRtYWUtPmNvbXBfYWRkcl9sbywgZG1hZS0+Y29tcF92YWwpOworCSAgIGRtYWUub3Bjb2RlLCBkbWFlLnNyY19hZGRyX2hpLCBkbWFlLnNyY19hZGRyX2xvLAorCSAgIGRtYWUubGVuLCBkbWFlLmRzdF9hZGRyX2hpLCBkbWFlLmRzdF9hZGRyX2xvLCBkc3RfYWRkciwKKwkgICBkbWFlLmNvbXBfYWRkcl9oaSwgZG1hZS5jb21wX2FkZHJfbG8sIGRtYWUuY29tcF92YWwpOwogCURQKEJOWDJYX01TR19PRkYsICJkYXRhIFsweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhdXG4iLAogCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVswXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzFdLAogCSAgIGJwLT5zbG93cGF0aC0+d2JfZGF0YVsyXSwgYnAtPnNsb3dwYXRoLT53Yl9kYXRhWzNdKTsKIAorCW11dGV4X2xvY2soJmJwLT5kbWFlX211dGV4KTsKKwogCSp3Yl9jb21wID0gMDsKIAotCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKKwlibngyeF9wb3N0X2RtYWUoYnAsICZkbWFlLCBJTklUX0RNQUVfQyhicCkpOwogCiAJdWRlbGF5KDUpOwogCkBAIC0yNjEsNyArMjczLDcgQEAKIAogdm9pZCBibngyeF9yZWFkX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNyY19hZGRyLCB1MzIgbGVuMzIpCiB7Ci0Jc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+aW5pdF9kbWFlOworCXN0cnVjdCBkbWFlX2NvbW1hbmQgZG1hZTsKIAl1MzIgKndiX2NvbXAgPSBibngyeF9zcChicCwgd2JfY29tcCk7CiAJaW50IGNudCA9IDIwMDsKIApAQCAtMjc2LDQxICsyODgsNDEgQEAKIAkJcmV0dXJuOwogCX0KIAotCW11dGV4X2xvY2soJmJwLT5kbWFlX211dGV4KTsKKwltZW1zZXQoJmRtYWUsIDAsIHNpemVvZihzdHJ1Y3QgZG1hZV9jb21tYW5kKSk7CiAKLQltZW1zZXQoYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pLCAwLCBzaXplb2YodTMyKSAqIDQpOwotCW1lbXNldChkbWFlLCAwLCBzaXplb2Yoc3RydWN0IGRtYWVfY29tbWFuZCkpOwotCi0JZG1hZS0+b3Bjb2RlID0gKERNQUVfQ01EX1NSQ19HUkMgfCBETUFFX0NNRF9EU1RfUENJIHwKLQkJCURNQUVfQ01EX0NfRFNUX1BDSSB8IERNQUVfQ01EX0NfRU5BQkxFIHwKLQkJCURNQUVfQ01EX1NSQ19SRVNFVCB8IERNQUVfQ01EX0RTVF9SRVNFVCB8CisJZG1hZS5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX0dSQyB8IERNQUVfQ01EX0RTVF9QQ0kgfAorCQkgICAgICAgRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkgICAgICAgRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKICNpZmRlZiBfX0JJR19FTkRJQU4KLQkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorCQkgICAgICAgRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CiAjZWxzZQotCQkJRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAorCQkgICAgICAgRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAogI2VuZGlmCi0JCQkoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKLQkJCShCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKLQlkbWFlLT5zcmNfYWRkcl9sbyA9IHNyY19hZGRyID4+IDI7Ci0JZG1hZS0+c3JjX2FkZHJfaGkgPSAwOwotCWRtYWUtPmRzdF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2RhdGEpKTsKLQlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9kYXRhKSk7Ci0JZG1hZS0+bGVuID0gbGVuMzI7Ci0JZG1hZS0+Y29tcF9hZGRyX2xvID0gVTY0X0xPKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKLQlkbWFlLT5jb21wX2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOwotCWRtYWUtPmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKKwkJICAgICAgIChCUF9QT1JUKGJwKSA/IERNQUVfQ01EX1BPUlRfMSA6IERNQUVfQ01EX1BPUlRfMCkgfAorCQkgICAgICAgKEJQX0UxSFZOKGJwKSA8PCBETUFFX0NNRF9FMUhWTl9TSElGVCkpOworCWRtYWUuc3JjX2FkZHJfbG8gPSBzcmNfYWRkciA+PiAyOworCWRtYWUuc3JjX2FkZHJfaGkgPSAwOworCWRtYWUuZHN0X2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfZGF0YSkpOworCWRtYWUuZHN0X2FkZHJfaGkgPSBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfZGF0YSkpOworCWRtYWUubGVuID0gbGVuMzI7CisJZG1hZS5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgd2JfY29tcCkpOworCWRtYWUuY29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKKwlkbWFlLmNvbXBfdmFsID0gRE1BRV9DT01QX1ZBTDsKIAogCURQKEJOWDJYX01TR19PRkYsICJETUFFOiBvcGNvZGUgMHglMDh4XG4iCiAJICAgRFBfTEVWRUwgInNyY19hZGRyICBbJXg6JTA4eF0gIGxlbiBbJWQgKjRdICAiCiAJCSAgICAiZHN0X2FkZHIgWyV4OiUwOHggKCUwOHgpXVxuIgogCSAgIERQX0xFVkVMICJjb21wX2FkZHIgWyV4OiUwOHhdICBjb21wX3ZhbCAweCUwOHhcbiIsCi0JICAgZG1hZS0+b3Bjb2RlLCBkbWFlLT5zcmNfYWRkcl9oaSwgZG1hZS0+c3JjX2FkZHJfbG8sCi0JICAgZG1hZS0+bGVuLCBkbWFlLT5kc3RfYWRkcl9oaSwgZG1hZS0+ZHN0X2FkZHJfbG8sIHNyY19hZGRyLAotCSAgIGRtYWUtPmNvbXBfYWRkcl9oaSwgZG1hZS0+Y29tcF9hZGRyX2xvLCBkbWFlLT5jb21wX3ZhbCk7CisJICAgZG1hZS5vcGNvZGUsIGRtYWUuc3JjX2FkZHJfaGksIGRtYWUuc3JjX2FkZHJfbG8sCisJICAgZG1hZS5sZW4sIGRtYWUuZHN0X2FkZHJfaGksIGRtYWUuZHN0X2FkZHJfbG8sIHNyY19hZGRyLAorCSAgIGRtYWUuY29tcF9hZGRyX2hpLCBkbWFlLmNvbXBfYWRkcl9sbywgZG1hZS5jb21wX3ZhbCk7CiAKKwltdXRleF9sb2NrKCZicC0+ZG1hZV9tdXRleCk7CisKKwltZW1zZXQoYm54Mnhfc3AoYnAsIHdiX2RhdGFbMF0pLCAwLCBzaXplb2YodTMyKSAqIDQpOwogCSp3Yl9jb21wID0gMDsKIAotCWJueDJ4X3Bvc3RfZG1hZShicCwgZG1hZSwgSU5JVF9ETUFFX0MoYnApKTsKKwlibngyeF9wb3N0X2RtYWUoYnAsICZkbWFlLCBJTklUX0RNQUVfQyhicCkpOwogCiAJdWRlbGF5KDUpOwogCkBAIC0zMzQsNiArMzQ2LDIxIEBACiAJbXV0ZXhfdW5sb2NrKCZicC0+ZG1hZV9tdXRleCk7CiB9CiAKK3ZvaWQgYm54Mnhfd3JpdGVfZG1hZV9waHlzX2xlbihzdHJ1Y3QgYm54MnggKmJwLCBkbWFfYWRkcl90IHBoeXNfYWRkciwKKwkJCSAgICAgICB1MzIgYWRkciwgdTMyIGxlbikKK3sKKwlpbnQgb2Zmc2V0ID0gMDsKKworCXdoaWxlIChsZW4gPiBETUFFX0xFTjMyX1dSX01BWCkgeworCQlibngyeF93cml0ZV9kbWFlKGJwLCBwaHlzX2FkZHIgKyBvZmZzZXQsCisJCQkJIGFkZHIgKyBvZmZzZXQsIERNQUVfTEVOMzJfV1JfTUFYKTsKKwkJb2Zmc2V0ICs9IERNQUVfTEVOMzJfV1JfTUFYICogNDsKKwkJbGVuIC09IERNQUVfTEVOMzJfV1JfTUFYOworCX0KKworCWJueDJ4X3dyaXRlX2RtYWUoYnAsIHBoeXNfYWRkciArIG9mZnNldCwgYWRkciArIG9mZnNldCwgbGVuKTsKK30KKwogLyogdXNlZCBvbmx5IGZvciBzbG93cGF0aCBzbyBub3QgaW5saW5lZCAqLwogc3RhdGljIHZvaWQgYm54Mnhfd2Jfd3Ioc3RydWN0IGJueDJ4ICpicCwgaW50IHJlZywgdTMyIHZhbF9oaSwgdTMyIHZhbF9sbykKIHsKQEAgLTU0MiwxNiArNTY5LDE1IEBACiAJLyogVHggKi8KIAlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKLQkJc3RydWN0IGV0aF90eF9kYl9kYXRhICpod19wcm9kcyA9IGZwLT5od190eF9wcm9kczsKIAogCQlCTlgyWF9FUlIoImZwJWQ6IHR4X3BrdF9wcm9kKCV4KSAgdHhfcGt0X2NvbnMoJXgpIgogCQkJICAiICB0eF9iZF9wcm9kKCV4KSAgdHhfYmRfY29ucygleCkgICp0eF9jb25zX3NiKCV4KVxuIiwKIAkJCSAgaSwgZnAtPnR4X3BrdF9wcm9kLCBmcC0+dHhfcGt0X2NvbnMsIGZwLT50eF9iZF9wcm9kLAogCQkJICBmcC0+dHhfYmRfY29ucywgbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKSk7CiAJCUJOWDJYX0VSUigiICAgICAgZnBfY19pZHgoJXgpICAqc2JfY19pZHgoJXgpIgotCQkJICAiICBiZCBkYXRhKCV4LCV4KVxuIiwgbGUxNl90b19jcHUoZnAtPmZwX2NfaWR4KSwKKwkJCSAgIiAgdHhfZGJfcHJvZCgleClcbiIsIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCiAJCQkgIGZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgsCi0JCQkgIGh3X3Byb2RzLT5wYWNrZXRzX3Byb2QsIGh3X3Byb2RzLT5iZHNfcHJvZCk7CisJCQkgIGZwLT50eF9kYi5kYXRhLnByb2QpOwogCX0KIAogCS8qIFJpbmdzICovCkBAIC02NTMsNiArNjc5LDExIEBACiAJICAgdmFsLCBwb3J0LCBhZGRyLCAobXNpeCA/ICJNU0ktWCIgOiAobXNpID8gIk1TSSIgOiAiSU5UeCIpKSk7CiAKIAlSRUdfV1IoYnAsIGFkZHIsIHZhbCk7CisJLyoKKwkgKiBFbnN1cmUgdGhhdCBIQ19DT05GSUcgaXMgd3JpdHRlbiBiZWZvcmUgbGVhZGluZy90cmFpbGluZyBlZGdlIGNvbmZpZworCSAqLworCW1taW93YigpOworCWJhcnJpZXIoKTsKIAogCWlmIChDSElQX0lTX0UxSChicCkpIHsKIAkJLyogaW5pdCBsZWFkaW5nL3RyYWlsaW5nIGVkZ2UgKi8KQEAgLTY2Nyw2ICs2OTgsOSBAQAogCQlSRUdfV1IoYnAsIEhDX1JFR19UUkFJTElOR19FREdFXzAgKyBwb3J0KjgsIHZhbCk7CiAJCVJFR19XUihicCwgSENfUkVHX0xFQURJTkdfRURHRV8wICsgcG9ydCo4LCB2YWwpOwogCX0KKworCS8qIE1ha2Ugc3VyZSB0aGF0IGludGVycnVwdHMgYXJlIGluZGVlZCBlbmFibGVkIGZyb20gaGVyZSBvbiAqLworCW1taW93YigpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbnRfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwKQpAQCAtNjg5LDcgKzcyMyw2IEBACiAJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwogCWlmIChSRUdfUkQoYnAsIGFkZHIpICE9IHZhbCkKIAkJQk5YMlhfRVJSKCJCVUchIHByb3BlciB2YWwgbm90IHJlYWQgZnJvbSBJR1UhXG4iKTsKLQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbnRfZGlzYWJsZV9zeW5jKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KQpAQCAtNjk5LDYgKzczMiw4IEBACiAKIAkvKiBkaXNhYmxlIGludGVycnVwdCBoYW5kbGluZyAqLwogCWF0b21pY19pbmMoJmJwLT5pbnRyX3NlbSk7CisJc21wX3dtYigpOyAvKiBFbnN1cmUgdGhhdCBicC0+aW50cl9zZW0gdXBkYXRlIGlzIFNNUC1zYWZlICovCisKIAlpZiAoZGlzYWJsZV9odykKIAkJLyogcHJldmVudCB0aGUgSFcgZnJvbSBzZW5kaW5nIGludGVycnVwdHMgKi8KIAkJYm54MnhfaW50X2Rpc2FibGUoYnApOwpAQCAtNzQwLDYgKzc3NSwxMCBAQAogCURQKEJOWDJYX01TR19PRkYsICJ3cml0ZSAweCUwOHggdG8gSEMgYWRkciAweCV4XG4iLAogCSAgICgqKHUzMiAqKSZpZ3VfYWNrKSwgaGNfYWRkcik7CiAJUkVHX1dSKGJwLCBoY19hZGRyLCAoKih1MzIgKikmaWd1X2FjaykpOworCisJLyogTWFrZSBzdXJlIHRoYXQgQUNLIGlzIHdyaXR0ZW4gKi8KKwltbWlvd2IoKTsKKwliYXJyaWVyKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X3VwZGF0ZV9mcHNiX2lkeChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQpAQCAtNzc2LDE2ICs4MTUsNiBAQAogICogZmFzdCBwYXRoIHNlcnZpY2UgZnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgYm54MnhfaGFzX3R4X3dvcmsoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCkKLXsKLQl1MTYgdHhfY29uc19zYjsKLQotCS8qIFRlbGwgY29tcGlsZXIgdGhhdCBzdGF0dXMgYmxvY2sgZmllbGRzIGNhbiBjaGFuZ2UgKi8KLQliYXJyaWVyKCk7Ci0JdHhfY29uc19zYiA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7Ci0JcmV0dXJuIChmcC0+dHhfcGt0X2NvbnMgIT0gdHhfY29uc19zYik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGJueDJ4X2hhc190eF93b3JrX3VubG9hZChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQogewogCS8qIFRlbGwgY29tcGlsZXIgdGhhdCBjb25zdW1lciBhbmQgcHJvZHVjZXIgY2FuIGNoYW5nZSAqLwpAQCAtODAwLDcgKzgyOSw4IEBACiAJCQkgICAgIHUxNiBpZHgpCiB7CiAJc3RydWN0IHN3X3R4X2JkICp0eF9idWYgPSAmZnAtPnR4X2J1Zl9yaW5nW2lkeF07Ci0Jc3RydWN0IGV0aF90eF9iZCAqdHhfYmQ7CisJc3RydWN0IGV0aF90eF9zdGFydF9iZCAqdHhfc3RhcnRfYmQ7CisJc3RydWN0IGV0aF90eF9iZCAqdHhfZGF0YV9iZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhfYnVmLT5za2I7CiAJdTE2IGJkX2lkeCA9IFRYX0JEKHR4X2J1Zi0+Zmlyc3RfYmQpLCBuZXdfY29uczsKIAlpbnQgbmJkOwpAQCAtODEwLDUxICs4NDAsNDYgQEAKIAogCS8qIHVubWFwIGZpcnN0IGJkICovCiAJRFAoQk5YMlhfTVNHX09GRiwgImZyZWUgYmRfaWR4ICVkXG4iLCBiZF9pZHgpOwotCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKLQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LCBCRF9VTk1BUF9BRERSKHR4X2JkKSwKLQkJCSBCRF9VTk1BUF9MRU4odHhfYmQpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwl0eF9zdGFydF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX2lkeF0uc3RhcnRfYmQ7CisJcGNpX3VubWFwX3NpbmdsZShicC0+cGRldiwgQkRfVU5NQVBfQUREUih0eF9zdGFydF9iZCksCisJCQkgQkRfVU5NQVBfTEVOKHR4X3N0YXJ0X2JkKSwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQluYmQgPSBsZTE2X3RvX2NwdSh0eF9iZC0+bmJkKSAtIDE7Ci0JbmV3X2NvbnMgPSBuYmQgKyB0eF9idWYtPmZpcnN0X2JkOworCW5iZCA9IGxlMTZfdG9fY3B1KHR4X3N0YXJ0X2JkLT5uYmQpIC0gMTsKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JaWYgKG5iZCA+IChNQVhfU0tCX0ZSQUdTICsgMikpIHsKKwlpZiAoKG5iZCAtIDEpID4gKE1BWF9TS0JfRlJBR1MgKyAyKSkgewogCQlCTlgyWF9FUlIoIkJBRCBuYmQhXG4iKTsKIAkJYm54MnhfcGFuaWMoKTsKIAl9CiAjZW5kaWYKKwluZXdfY29ucyA9IG5iZCArIHR4X2J1Zi0+Zmlyc3RfYmQ7CiAKLQkvKiBTa2lwIGEgcGFyc2UgYmQgYW5kIHRoZSBUU08gc3BsaXQgaGVhZGVyIGJkCi0JICAgc2luY2UgdGhleSBoYXZlIG5vIG1hcHBpbmcgKi8KLQlpZiAobmJkKQorCS8qIEdldCB0aGUgbmV4dCBiZCAqLworCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOworCisJLyogU2tpcCBhIHBhcnNlIGJkLi4uICovCisJLS1uYmQ7CisJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7CisKKwkvKiAuLi5hbmQgdGhlIFRTTyBzcGxpdCBoZWFkZXIgYmQgc2luY2UgdGhleSBoYXZlIG5vIG1hcHBpbmcgKi8KKwlpZiAodHhfYnVmLT5mbGFncyAmIEJOWDJYX1RTT19TUExJVF9CRCkgeworCQktLW5iZDsKIAkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7Ci0KLQlpZiAodHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkICYgKEVUSF9UWF9CRF9GTEFHU19JUF9DU1VNIHwKLQkJCQkJICAgRVRIX1RYX0JEX0ZMQUdTX1RDUF9DU1VNIHwKLQkJCQkJICAgRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTykpIHsKLQkJaWYgKC0tbmJkKQotCQkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7Ci0JCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKLQkJLyogaXMgdGhpcyBhIFRTTyBzcGxpdCBoZWFkZXIgYmQ/ICovCi0JCWlmICh0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgJiBFVEhfVFhfQkRfRkxBR1NfU1dfTFNPKSB7Ci0JCQlpZiAoLS1uYmQpCi0JCQkJYmRfaWR4ID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfaWR4KSk7Ci0JCX0KIAl9CiAKIAkvKiBub3cgZnJlZSBmcmFncyAqLwogCXdoaWxlIChuYmQgPiAwKSB7CiAKIAkJRFAoQk5YMlhfTVNHX09GRiwgImZyZWUgZnJhZyBiZF9pZHggJWRcbiIsIGJkX2lkeCk7Ci0JCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XTsKLQkJcGNpX3VubWFwX3BhZ2UoYnAtPnBkZXYsIEJEX1VOTUFQX0FERFIodHhfYmQpLAotCQkJICAgICAgIEJEX1VOTUFQX0xFTih0eF9iZCksIFBDSV9ETUFfVE9ERVZJQ0UpOworCQl0eF9kYXRhX2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfaWR4XS5yZWdfYmQ7CisJCXBjaV91bm1hcF9wYWdlKGJwLT5wZGV2LCBCRF9VTk1BUF9BRERSKHR4X2RhdGFfYmQpLAorCQkJICAgICAgIEJEX1VOTUFQX0xFTih0eF9kYXRhX2JkKSwgUENJX0RNQV9UT0RFVklDRSk7CiAJCWlmICgtLW5iZCkKIAkJCWJkX2lkeCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX2lkeCkpOwogCX0KIAogCS8qIHJlbGVhc2Ugc2tiICovCiAJV0FSTl9PTighc2tiKTsKLQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl0eF9idWYtPmZpcnN0X2JkID0gMDsKIAl0eF9idWYtPnNrYiA9IE5VTEw7CiAKQEAgLTg5Niw3ICs5MjEsNyBAQAogCQlyZXR1cm47CiAjZW5kaWYKIAotCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoYnAtPmRldiwgZnAtPmluZGV4KTsKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGJwLT5kZXYsIGZwLT5pbmRleCAtIGJwLT5udW1fcnhfcXVldWVzKTsKIAlod19jb25zID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKIAlzd19jb25zID0gZnAtPnR4X3BrdF9jb25zOwogCkBAIC05MjYsOCArOTUxLDYgQEAKIAkvKiBUQkQgbmVlZCBhIHRocmVzaD8gKi8KIAlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSkgewogCi0JCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KIAkJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQogCQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCiAJCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQKQEAgLTk0MCw4ICs5NjMsNiBAQAogCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSAmJgogCQkgICAgKGJueDJ4X3R4X2F2YWlsKGZwKSA+PSBNQVhfU0tCX0ZSQUdTICsgMykpCiAJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7Ci0KLQkJX19uZXRpZl90eF91bmxvY2sodHhxKTsKIAl9CiB9CiAKQEAgLTEwMDksNiArMTAzMCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyB8IEJOWDJYX1NUQVRFX0NMT1NJTkdfV0FJVDRfSEFMVCk6CisJY2FzZSAoUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyB8IEJOWDJYX1NUQVRFX0RJU0FCTEVEKToKIAkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgImdvdCAodW4pc2V0IG1hYyByYW1yb2RcbiIpOwogCQlicmVhazsKIApAQCAtMTQ5MSw2ICsxNTEzLDEzIEBACiAJCWJkX3Byb2QgPSBSWF9CRChiZF9wcm9kKTsKIAkJYmRfY29ucyA9IFJYX0JEKGJkX2NvbnMpOwogCisJCS8qIFByZWZldGNoIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIEJEIGRlc2NyaXB0b3IKKwkJICAgYXQgcHJvZHVjZXIncyBpbmRleC4gSXQgd2lsbCBiZSBuZWVkZWQgd2hlbiBuZXcgc2tiIGlzCisJCSAgIGFsbG9jYXRlZCAqLworCQlwcmVmZXRjaCgodm9pZCAqKShQQUdFX0FMSUdOKCh1bnNpZ25lZCBsb25nKQorCQkJCQkgICAgICgmZnAtPnJ4X2Rlc2NfcmluZ1tiZF9wcm9kXSkpIC0KKwkJCQkgIFBBR0VfU0laRSArIDEpKTsKKwogCQljcWUgPSAmZnAtPnJ4X2NvbXBfcmluZ1tjb21wX3JpbmdfY29uc107CiAJCWNxZV9mcF9mbGFncyA9IGNxZS0+ZmFzdF9wYXRoX2NxZS50eXBlX2Vycm9yX2ZsYWdzOwogCkBAIC0xNTk5LDcgKzE2MjgsOCBAQAogCiAJCQkJc2tiID0gbmV3X3NrYjsKIAotCQkJfSBlbHNlIGlmIChibngyeF9hbGxvY19yeF9za2IoYnAsIGZwLCBiZF9wcm9kKSA9PSAwKSB7CisJCQl9IGVsc2UKKwkJCWlmIChsaWtlbHkoYm54MnhfYWxsb2Nfcnhfc2tiKGJwLCBmcCwgYmRfcHJvZCkgPT0gMCkpIHsKIAkJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LAogCQkJCQlwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAogCQkJCQkJIGJwLT5yeF9idWZfc2l6ZSwKQEAgLTE2MjksNiArMTY1OSw3IEBACiAJCX0KIAogCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgZnAtPmluZGV4KTsKKwogI2lmZGVmIEJDTV9WTEFOCiAJCWlmICgoYnAtPnZsZ3JwICE9IE5VTEwpICYmIChicC0+ZmxhZ3MgJiBIV19WTEFOX1JYX0ZMQUcpICYmCiAJCSAgICAobGUxNl90b19jcHUoY3FlLT5mYXN0X3BhdGhfY3FlLnBhcnNfZmxhZ3MuZmxhZ3MpICYKQEAgLTE2NzQsNyArMTcwNSw2IEBACiB7CiAJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9IGZwX2Nvb2tpZTsKIAlzdHJ1Y3QgYm54MnggKmJwID0gZnAtPmJwOwotCWludCBpbmRleCA9IGZwLT5pbmRleDsKIAogCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewpAQCAtMTY4MywyMCArMTcxMywzNCBAQAogCX0KIAogCURQKEJOWDJYX01TR19GUCwgImdvdCBhbiBNU0ktWCBpbnRlcnJ1cHQgb24gSURYOlNCIFslZDolZF1cbiIsCi0JICAgaW5kZXgsIGZwLT5zYl9pZCk7CisJICAgZnAtPmluZGV4LCBmcC0+c2JfaWQpOwogCWJueDJ4X2Fja19zYihicCwgZnAtPnNiX2lkLCBVU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCiAJCXJldHVybiBJUlFfSEFORExFRDsKICNlbmRpZgorCS8qIEhhbmRsZSBSeCBvciBUeCBhY2NvcmRpbmcgdG8gTVNJLVggdmVjdG9yICovCisJaWYgKGZwLT5pc19yeF9xdWV1ZSkgeworCQlwcmVmZXRjaChmcC0+cnhfY29uc19zYik7CisJCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAotCXByZWZldGNoKGZwLT5yeF9jb25zX3NiKTsKLQlwcmVmZXRjaChmcC0+dHhfY29uc19zYik7Ci0JcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwotCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKKwkJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGZwLT5pbmRleCwgbmFwaSkpOwogCi0JbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGluZGV4LCBuYXBpKSk7CisJfSBlbHNlIHsKKwkJcHJlZmV0Y2goZnAtPnR4X2NvbnNfc2IpOworCQlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CisKKwkJYm54MnhfdXBkYXRlX2Zwc2JfaWR4KGZwKTsKKwkJcm1iKCk7CisJCWJueDJ4X3R4X2ludChmcCk7CisKKwkJLyogUmUtZW5hYmxlIGludGVycnVwdHMgKi8KKwkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIFVTVE9STV9JRCwKKwkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwgSUdVX0lOVF9OT1AsIDEpOworCQlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgQ1NUT1JNX0lELAorCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLCBJR1VfSU5UX0VOQUJMRSwgMSk7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTcwNiw2ICsxNzUwLDcgQEAKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2X2luc3RhbmNlKTsKIAl1MTYgc3RhdHVzID0gYm54MnhfYWNrX2ludChicCk7CiAJdTE2IG1hc2s7CisJaW50IGk7CiAKIAkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgc2hhcmVkIGFuZCBpdCdzIG5vdCBmb3IgdXMgKi8KIAlpZiAodW5saWtlbHkoc3RhdHVzID09IDApKSB7CkBAIC0xNzI1LDE4ICsxNzcwLDM4IEBACiAJCXJldHVybiBJUlFfSEFORExFRDsKICNlbmRpZgogCi0JbWFzayA9IDB4MiA8PCBicC0+ZnBbMF0uc2JfaWQ7Ci0JaWYgKHN0YXR1cyAmIG1hc2spIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbMF07CisJZm9yIChpID0gMDsgaSA8IEJOWDJYX05VTV9RVUVVRVMoYnApOyBpKyspIHsKKwkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKLQkJcHJlZmV0Y2goZnAtPnJ4X2NvbnNfc2IpOwotCQlwcmVmZXRjaChmcC0+dHhfY29uc19zYik7Ci0JCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKLQkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOworCQltYXNrID0gMHgyIDw8IGZwLT5zYl9pZDsKKwkJaWYgKHN0YXR1cyAmIG1hc2spIHsKKwkJCS8qIEhhbmRsZSBSeCBvciBUeCBhY2NvcmRpbmcgdG8gU0IgaWQgKi8KKwkJCWlmIChmcC0+aXNfcnhfcXVldWUpIHsKKwkJCQlwcmVmZXRjaChmcC0+cnhfY29uc19zYik7CisJCQkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay4KKwkJCQkJCQlzdGF0dXNfYmxvY2tfaW5kZXgpOwogCi0JCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCAwLCBuYXBpKSk7CisJCQkJbmFwaV9zY2hlZHVsZSgmYm54MnhfZnAoYnAsIGZwLT5pbmRleCwgbmFwaSkpOwogCi0JCXN0YXR1cyAmPSB+bWFzazsKKwkJCX0gZWxzZSB7CisJCQkJcHJlZmV0Y2goZnAtPnR4X2NvbnNfc2IpOworCQkJCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suCisJCQkJCQkJc3RhdHVzX2Jsb2NrX2luZGV4KTsKKworCQkJCWJueDJ4X3VwZGF0ZV9mcHNiX2lkeChmcCk7CisJCQkJcm1iKCk7CisJCQkJYm54MnhfdHhfaW50KGZwKTsKKworCQkJCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisJCQkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIFVTVE9STV9JRCwKKwkJCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfdV9pZHgpLAorCQkJCQkgICAgIElHVV9JTlRfTk9QLCAxKTsKKwkJCQlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgQ1NUT1JNX0lELAorCQkJCQkgICAgIGxlMTZfdG9fY3B1KGZwLT5mcF9jX2lkeCksCisJCQkJCSAgICAgSUdVX0lOVF9FTkFCTEUsIDEpOworCQkJfQorCQkJc3RhdHVzICY9IH5tYXNrOworCQl9CiAJfQogCiAKQEAgLTIwNjMsNiArMjEyOCwxMiBAQAogCiBzdGF0aWMgdm9pZCBibngyeF9saW5rX3JlcG9ydChzdHJ1Y3QgYm54MnggKmJwKQogeworCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfRElTQUJMRUQpIHsKKwkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIE5JQyBMaW5rIGlzIERvd25cbiIsIGJwLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCiAJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkgewogCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCiAJCQluZXRpZl9jYXJyaWVyX29uKGJwLT5kZXYpOwpAQCAtMjEwMiw5ICsyMTczLDcgQEAKIAkJLyogSW5pdGlhbGl6ZSBsaW5rIHBhcmFtZXRlcnMgc3RydWN0dXJlIHZhcmlhYmxlcyAqLwogCQkvKiBJdCBpcyByZWNvbW1lbmRlZCB0byB0dXJuIG9mZiBSWCBGQyBmb3IganVtYm8gZnJhbWVzCiAJCSAgIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgKi8KLQkJaWYgKElTX0UxSE1GKGJwKSkKLQkJCWJwLT5saW5rX3BhcmFtcy5yZXFfZmNfYXV0b19hZHYgPSBCTlgyWF9GTE9XX0NUUkxfQk9USDsKLQkJZWxzZSBpZiAoYnAtPmRldi0+bXR1ID4gNTAwMCkKKwkJaWYgKGJwLT5kZXYtPm10dSA+IDUwMDApCiAJCQlicC0+bGlua19wYXJhbXMucmVxX2ZjX2F1dG9fYWR2ID0gQk5YMlhfRkxPV19DVFJMX1RYOwogCQllbHNlCiAJCQlicC0+bGlua19wYXJhbXMucmVxX2ZjX2F1dG9fYWR2ID0gQk5YMlhfRkxPV19DVFJMX0JPVEg7CkBAIC0yMTk5LDYgKzIyNjgsNDYgQEAKIAlicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcm5lc3NfdGltZW91dCA9IGZhaXJfcGVyaW9kaWNfdGltZW91dF91c2VjIC8gNDsKIH0KIAorLyogQ2FsY3VsYXRlcyB0aGUgc3VtIG9mIHZuX21pbl9yYXRlcy4KKyAgIEl0J3MgbmVlZGVkIGZvciBmdXJ0aGVyIG5vcm1hbGl6aW5nIG9mIHRoZSBtaW5fcmF0ZXMuCisgICBSZXR1cm5zOgorICAgICBzdW0gb2Ygdm5fbWluX3JhdGVzLgorICAgICAgIG9yCisgICAgIDAgLSBpZiBhbGwgdGhlIG1pbl9yYXRlcyBhcmUgMC4KKyAgICAgSW4gdGhlIGxhdGVyIGNhc2UgZmFpbmVzcyBhbGdvcml0aG0gc2hvdWxkIGJlIGRlYWN0aXZhdGVkLgorICAgICBJZiBub3QgYWxsIG1pbl9yYXRlcyBhcmUgemVybyB0aGVuIHRob3NlIHRoYXQgYXJlIHplcm9lcyB3aWxsIGJlIHNldCB0byAxLgorICovCitzdGF0aWMgdm9pZCBibngyeF9jYWxjX3ZuX3dlaWdodF9zdW0oc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgYWxsX3plcm8gPSAxOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IHZuOworCisJYnAtPnZuX3dlaWdodF9zdW0gPSAwOworCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgeworCQlpbnQgZnVuYyA9IDIqdm4gKyBwb3J0OworCQl1MzIgdm5fY2ZnID0gU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCQl1MzIgdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgorCQkJCSAgIEZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVCkgKiAxMDA7CisKKwkJLyogU2tpcCBoaWRkZW4gdm5zICovCisJCWlmICh2bl9jZmcgJiBGVU5DX01GX0NGR19GVU5DX0hJREUpCisJCQljb250aW51ZTsKKworCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KKwkJaWYgKCF2bl9taW5fcmF0ZSkKKwkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOworCQllbHNlCisJCQlhbGxfemVybyA9IDA7CisKKwkJYnAtPnZuX3dlaWdodF9zdW0gKz0gdm5fbWluX3JhdGU7CisJfQorCisJLyogLi4uIG9ubHkgaWYgYWxsIG1pbiByYXRlcyBhcmUgemVyb3MgLSBkaXNhYmxlIGZhaXJuZXNzICovCisJaWYgKGFsbF96ZXJvKQorCQlicC0+dm5fd2VpZ2h0X3N1bSA9IDA7Cit9CisKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfdm5fbWlubWF4KHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jKQogewogCXN0cnVjdCByYXRlX3NoYXBpbmdfdmFyc19wZXJfdm4gbV9yc192bjsKQEAgLTIyNzYsNyArMjM4NSw3IEBACiAJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkgewogCiAJCS8qIGRyb3BsZXNzIGZsb3cgY29udHJvbCAqLwotCQlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CisJCWlmIChDSElQX0lTX0UxSChicCkgJiYgYnAtPmRyb3BsZXNzX2ZjKSB7CiAJCQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCQkJdTMyIHBhdXNlX2VuYWJsZWQgPSAwOwogCkBAIC0yMjg0LDcgKzIzOTMsNyBAQAogCQkJCXBhdXNlX2VuYWJsZWQgPSAxOwogCiAJCQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgICAgICAgVVNUT1JNX1BBVVNFX0VOQUJMRURfT0ZGU0VUKHBvcnQpLAorCQkJICAgICAgIFVTVE9STV9FVEhfUEFVU0VfRU5BQkxFRF9PRkZTRVQocG9ydCksCiAJCQkgICAgICAgcGF1c2VfZW5hYmxlZCk7CiAJCX0KIApAQCAtMjMwOSwxNCArMjQxOCwxMiBAQAogCQlpbnQgZnVuYzsKIAkJaW50IHZuOwogCisJCS8qIFNldCB0aGUgYXR0ZW50aW9uIHRvd2FyZHMgb3RoZXIgZHJpdmVycyBvbiB0aGUgc2FtZSBwb3J0ICovCiAJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgewogCQkJaWYgKHZuID09IEJQX0UxSFZOKGJwKSkKIAkJCQljb250aW51ZTsKIAogCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBwb3J0KTsKLQotCQkJLyogU2V0IHRoZSBhdHRlbnRpb24gdG93YXJkcyBvdGhlciBkcml2ZXJzCi0JCQkgICBvbiB0aGUgc2FtZSBwb3J0ICovCiAJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMCArCiAJCQkgICAgICAgKExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMCArIGZ1bmMpKjQsIDEpOwogCQl9CkBAIC0yMzQyLDYgKzI0NDksOCBAQAogCiBzdGF0aWMgdm9pZCBibngyeF9fbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCiB7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwogCWlmIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfT1BFTikKIAkJcmV0dXJuOwogCkBAIC0yMzUyLDYgKzI0NjEsOSBAQAogCWVsc2UKIAkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKIAorCWJwLT5tZl9jb25maWcgPSBTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7CisJYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKGJwKTsKKwogCS8qIGluZGljYXRlIGxpbmsgc3RhdHVzICovCiAJYm54MnhfbGlua19yZXBvcnQoYnApOwogfQpAQCAtMjM4MCw2ICsyNDkyLDE1MiBAQAogICogR2VuZXJhbCBzZXJ2aWNlIGZ1bmN0aW9ucwogICovCiAKKy8qIHNlbmQgdGhlIE1DUCBhIHJlcXVlc3QsIGJsb2NrIHVudGlsIHRoZXJlIGlzIGEgcmVwbHkgKi8KK3UzMiBibngyeF9md19jb21tYW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBjb21tYW5kKQoreworCWludCBmdW5jID0gQlBfRlVOQyhicCk7CisJdTMyIHNlcSA9ICsrYnAtPmZ3X3NlcTsKKwl1MzIgcmMgPSAwOworCXUzMiBjbnQgPSAxOworCXU4IGRlbGF5ID0gQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyAxMDAgOiAxMDsKKworCVNITUVNX1dSKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9tYl9oZWFkZXIsIChjb21tYW5kIHwgc2VxKSk7CisJRFAoQk5YMlhfTVNHX01DUCwgIndyb3RlIGNvbW1hbmQgKCV4KSB0byBGVyBNQlxuIiwgKGNvbW1hbmQgfCBzZXEpKTsKKworCWRvIHsKKwkJLyogbGV0IHRoZSBGVyBkbyBpdCdzIG1hZ2ljIC4uLiAqLworCQltc2xlZXAoZGVsYXkpOworCisJCXJjID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfaGVhZGVyKTsKKworCQkvKiBHaXZlIHRoZSBGVyB1cCB0byAyIHNlY29uZCAoMjAwKjEwbXMpICovCisJfSB3aGlsZSAoKHNlcSAhPSAocmMgJiBGV19NU0dfU0VRX05VTUJFUl9NQVNLKSkgJiYgKGNudCsrIDwgMjAwKSk7CisKKwlEUChCTlgyWF9NU0dfTUNQLCAiW2FmdGVyICVkIG1zXSByZWFkICgleCkgc2VxIGlzICgleCkgZnJvbSBGVyBNQlxuIiwKKwkgICBjbnQqZGVsYXksIHJjLCBzZXEpOworCisJLyogaXMgdGhpcyBhIHJlcGx5IHRvIG91ciBjb21tYW5kPyAqLworCWlmIChzZXEgPT0gKHJjICYgRldfTVNHX1NFUV9OVU1CRVJfTUFTSykpCisJCXJjICY9IEZXX01TR19DT0RFX01BU0s7CisJZWxzZSB7CisJCS8qIEZXIEJVRyEgKi8KKwkJQk5YMlhfRVJSKCJGVyBmYWlsZWQgdG8gcmVzcG9uZCFcbiIpOworCQlibngyeF9md19kdW1wKGJwKTsKKwkJcmMgPSAwOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2V0X3N0b3JtX3J4X21vZGUoc3RydWN0IGJueDJ4ICpicCk7CitzdGF0aWMgdm9pZCBibngyeF9zZXRfbWFjX2FkZHJfZTFoKHN0cnVjdCBibngyeCAqYnAsIGludCBzZXQpOworc3RhdGljIHZvaWQgYm54Mnhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK3N0YXRpYyB2b2lkIGJueDJ4X2UxaF9kaXNhYmxlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgaTsKKworCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOworCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKKworCW5ldGlmX3R4X2Rpc2FibGUoYnAtPmRldik7CisJYnAtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KKworCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfRU4gKyBwb3J0KjgsIDApOworCisJYm54Mnhfc2V0X21hY19hZGRyX2UxaChicCwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUNfSEFTSF9TSVpFOyBpKyspCisJCVJFR19XUihicCwgTUNfSEFTSF9PRkZTRVQoYnAsIGkpLCAwKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBibngyeF9lMWhfZW5hYmxlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKworCVJFR19XUihicCwgTklHX1JFR19MTEgwX0ZVTkNfRU4gKyBwb3J0KjgsIDEpOworCisJYm54Mnhfc2V0X21hY19hZGRyX2UxaChicCwgMSk7CisKKwkvKiBUeCBxdWV1ZSBzaG91bGQgYmUgb25seSByZWVuYWJsZWQgKi8KKwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CisKKwkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KKwlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfdXBkYXRlX21pbl9tYXgoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCB2biwgaTsKKworCS8qIEluaXQgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBjb250ZXh0cyAqLworCWJueDJ4X2luaXRfcG9ydF9taW5tYXgoYnApOworCisJYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKGJwKTsKKworCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKKwkJYm54MnhfaW5pdF92bl9taW5tYXgoYnAsIDIqdm4gKyBwb3J0KTsKKworCWlmIChicC0+cG9ydC5wbWYpIHsKKwkJaW50IGZ1bmM7CisKKwkJLyogU2V0IHRoZSBhdHRlbnRpb24gdG93YXJkcyBvdGhlciBkcml2ZXJzIG9uIHRoZSBzYW1lIHBvcnQgKi8KKwkJZm9yICh2biA9IFZOXzA7IHZuIDwgRTFIVk5fTUFYOyB2bisrKSB7CisJCQlpZiAodm4gPT0gQlBfRTFIVk4oYnApKQorCQkJCWNvbnRpbnVlOworCisJCQlmdW5jID0gKCh2biA8PCAxKSB8IHBvcnQpOworCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzAgKworCQkJICAgICAgIChMSU5LX1NZTkNfQVRURU5USU9OX0JJVF9GVU5DXzAgKyBmdW5jKSo0LCAxKTsKKwkJfQorCisJCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkgLyA0OyBpKyspCisJCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgKyBpKjQsCisJCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgYm54MnhfZGNjX2V2ZW50KHN0cnVjdCBibngyeCAqYnAsIHUzMiBkY2NfZXZlbnQpCit7CisJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKworCURQKEJOWDJYX01TR19NQ1AsICJkY2NfZXZlbnQgMHgleFxuIiwgZGNjX2V2ZW50KTsKKwlicC0+bWZfY29uZmlnID0gU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS5jb25maWcpOworCisJaWYgKGRjY19ldmVudCAmIERSVl9TVEFUVVNfRENDX0RJU0FCTEVfRU5BQkxFX1BGKSB7CisKKwkJaWYgKGJwLT5tZl9jb25maWcgJiBGVU5DX01GX0NGR19GVU5DX0RJU0FCTEVEKSB7CisJCQlEUChORVRJRl9NU0dfSUZET1dOLCAibWZfY2ZnIGZ1bmN0aW9uIGRpc2FibGVkXG4iKTsKKwkJCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX0RJU0FCTEVEOworCisJCQlibngyeF9lMWhfZGlzYWJsZShicCk7CisJCX0gZWxzZSB7CisJCQlEUChORVRJRl9NU0dfSUZVUCwgIm1mX2NmZyBmdW5jdGlvbiBlbmFibGVkXG4iKTsKKwkJCWJwLT5zdGF0ZSA9IEJOWDJYX1NUQVRFX09QRU47CisKKwkJCWJueDJ4X2UxaF9lbmFibGUoYnApOworCQl9CisJCWRjY19ldmVudCAmPSB+RFJWX1NUQVRVU19EQ0NfRElTQUJMRV9FTkFCTEVfUEY7CisJfQorCWlmIChkY2NfZXZlbnQgJiBEUlZfU1RBVFVTX0RDQ19CQU5EV0lEVEhfQUxMT0NBVElPTikgeworCisJCWJueDJ4X3VwZGF0ZV9taW5fbWF4KGJwKTsKKwkJZGNjX2V2ZW50ICY9IH5EUlZfU1RBVFVTX0RDQ19CQU5EV0lEVEhfQUxMT0NBVElPTjsKKwl9CisKKwkvKiBSZXBvcnQgcmVzdWx0cyB0byBNQ1AgKi8KKwlpZiAoZGNjX2V2ZW50KQorCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfRENDX0ZBSUxVUkUpOworCWVsc2UKKwkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX0RDQ19PSyk7Cit9CisKIC8qIHRoZSBzbG93IHBhdGggcXVldWUgaXMgb2RkIHNpbmNlIGNvbXBsZXRpb25zIGFycml2ZSBvbiB0aGUgZmFzdHBhdGggcmluZyAqLwogc3RhdGljIGludCBibngyeF9zcF9wb3N0KHN0cnVjdCBibngyeCAqYnAsIGludCBjb21tYW5kLCBpbnQgY2lkLAogCQkJIHUzMiBkYXRhX2hpLCB1MzIgZGF0YV9sbywgaW50IGNvbW1vbikKQEAgLTI0MzAsOSArMjY4OCwxNCBAQAogCQlicC0+c3BxX3Byb2RfaWR4Kys7CiAJfQogCisJLyogTWFrZSBzdXJlIHRoYXQgQkQgZGF0YSBpcyB1cGRhdGVkIGJlZm9yZSB3cml0aW5nIHRoZSBwcm9kdWNlciAqLworCXdtYigpOworCiAJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fU1BRX1BST0RfT0ZGU0VUKGZ1bmMpLAogCSAgICAgICBicC0+c3BxX3Byb2RfaWR4KTsKIAorCW1taW93YigpOworCiAJc3Bpbl91bmxvY2tfYmgoJmJwLT5zcHFfbG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTk5LDExICsyODYyLDI4IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfZmFuX2ZhaWx1cmUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCisJLyogbWFyayB0aGUgZmFpbHVyZSAqLworCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyAmPSB+UE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSzsKKwlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgfD0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRTsKKwlTSE1FTV9XUihicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZywKKwkJIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwkvKiBsb2cgdGhlIGZhaWx1cmUgKi8KKwlwcmludGsoS0VSTl9FUlIgUEZYICJGYW4gRmFpbHVyZSBvbiBOZXR3b3JrIENvbnRyb2xsZXIgJXMgaGFzIGNhdXNlZCIKKwkgICAgICAgIiB0aGUgZHJpdmVyIHRvIHNodXRkb3duIHRoZSBjYXJkIHRvIHByZXZlbnQgcGVybWFuZW50IgorCSAgICAgICAiIGRhbWFnZS4gIFBsZWFzZSBjb250YWN0IERlbGwgU3VwcG9ydCBmb3IgYXNzaXN0YW5jZVxuIiwKKwkgICAgICAgYnAtPmRldi0+bmFtZSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBibngyeF9hdHRuX2ludF9kZWFzc2VydGVkMChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYXR0bikKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwogCWludCByZWdfb2Zmc2V0OwotCXUzMiB2YWw7CisJdTMyIHZhbCwgc3dhcF92YWwsIHN3YXBfb3ZlcnJpZGU7CiAKIAlyZWdfb2Zmc2V0ID0gKHBvcnQgPyBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAgOgogCQkJICAgICBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOwpAQCAtMjYxNiwzNiArMjg5NiwzMiBAQAogCiAJCUJOWDJYX0VSUigiU1BJTzUgaHcgYXR0ZW50aW9uXG4iKTsKIAorCQkvKiBGYW4gZmFpbHVyZSBhdHRlbnRpb24gKi8KIAkJc3dpdGNoIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpKSB7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJCS8qIEZhbiBmYWlsdXJlIGF0dGVudGlvbiAqLwotCi0JCQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAxICovCi0JCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAotCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOwogCQkJLyogTG93IHBvd2VyIG1vZGUgaXMgY29udHJvbGxlZCBieSBHUElPIDIgKi8KIAkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzIsCiAJCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywgcG9ydCk7Ci0JCQkvKiBtYXJrIHRoZSBmYWlsdXJlICovCi0JCQlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgJj0KLQkJCQkJflBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX01BU0s7Ci0JCQlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgfD0KLQkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRTsKLQkJCVNITUVNX1dSKGJwLAotCQkJCSBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS4KLQkJCQkJCQlleHRlcm5hbF9waHlfY29uZmlnLAotCQkJCSBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwotCQkJLyogbG9nIHRoZSBmYWlsdXJlICovCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJGYW4gRmFpbHVyZSBvbiBOZXR3b3JrIgotCQkJICAgICAgICIgQ29udHJvbGxlciAlcyBoYXMgY2F1c2VkIHRoZSBkcml2ZXIgdG8iCi0JCQkgICAgICAgIiBzaHV0ZG93biB0aGUgY2FyZCB0byBwcmV2ZW50IHBlcm1hbmVudCIKLQkJCSAgICAgICAiIGRhbWFnZS4gIFBsZWFzZSBjb250YWN0IERlbGwgU3VwcG9ydCBmb3IiCi0JCQkgICAgICAgIiBhc3Npc3RhbmNlXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGxlZCBieSBHUElPIDEgKi8KKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzEsCisJCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywgcG9ydCk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3Mjc6CisJCQkvKiBUaGUgUEhZIHJlc2V0IGlzIGNvbnRyb2xsZWQgYnkgR1BJTyAxICovCisJCQkvKiBmYWtlIHRoZSBwb3J0IG51bWJlciB0byBjYW5jZWwgdGhlIHN3YXAgZG9uZSBpbgorCQkJICAgc2V0X2dwaW8oKSAqLworCQkJc3dhcF92YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKTsKKwkJCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsIE5JR19SRUdfU1RSQVBfT1ZFUlJJREUpOworCQkJcG9ydCA9IChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKSBeIDE7CisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18xLAorCQkJCSAgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csIHBvcnQpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCWJueDJ4X2Zhbl9mYWlsdXJlKGJwKTsKIAl9CiAKIAlpZiAoYXR0biAmIChBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8wIHwKQEAgLTI2NjIsNyArMjkzOCw3IEBACiAJCVJFR19XUihicCwgcmVnX29mZnNldCwgdmFsKTsKIAogCQlCTlgyWF9FUlIoIkZBVEFMIEhXIGJsb2NrIGF0dGVudGlvbiBzZXQwIDB4JXhcbiIsCi0JCQkgIChhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8wKSk7CisJCQkgICh1MzIpKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzApKTsKIAkJYm54MnhfcGFuaWMoKTsKIAl9CiB9CkBAIC0yNjkzLDcgKzI5NjksNyBAQAogCQlSRUdfV1IoYnAsIHJlZ19vZmZzZXQsIHZhbCk7CiAKIAkJQk5YMlhfRVJSKCJGQVRBTCBIVyBibG9jayBhdHRlbnRpb24gc2V0MSAweCV4XG4iLAotCQkJICAoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMSkpOworCQkJICAodTMyKShhdHRuICYgSFdfSU5URVJSVVRfQVNTRVJUX1NFVF8xKSk7CiAJCWJueDJ4X3BhbmljKCk7CiAJfQogfQpAQCAtMjczMyw3ICszMDA5LDcgQEAKIAkJUkVHX1dSKGJwLCByZWdfb2Zmc2V0LCB2YWwpOwogCiAJCUJOWDJYX0VSUigiRkFUQUwgSFcgYmxvY2sgYXR0ZW50aW9uIHNldDIgMHgleFxuIiwKLQkJCSAgKGF0dG4gJiBIV19JTlRFUlJVVF9BU1NFUlRfU0VUXzIpKTsKKwkJCSAgKHUzMikoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMikpOwogCQlibngyeF9wYW5pYygpOwogCX0KIH0KQEAgLTI3NDgsOSArMzAyNCwxMiBAQAogCQkJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKIAogCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEyICsgZnVuYyo0LCAwKTsKKwkJCXZhbCA9IFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9zdGF0dXMpOworCQkJaWYgKHZhbCAmIERSVl9TVEFUVVNfRENDX0VWRU5UX01BU0spCisJCQkJYm54MnhfZGNjX2V2ZW50KGJwLAorCQkJCQkgICAgKHZhbCAmIERSVl9TVEFUVVNfRENDX0VWRU5UX01BU0spKTsKIAkJCWJueDJ4X19saW5rX3N0YXR1c191cGRhdGUoYnApOwotCQkJaWYgKFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9zdGF0dXMpICYKLQkJCQkJCQlEUlZfU1RBVFVTX1BNRikKKwkJCWlmICgoYnAtPnBvcnQucG1mID09IDApICYmICh2YWwgJiBEUlZfU1RBVFVTX1BNRikpCiAJCQkJYm54MnhfcG1mX3VwZGF0ZShicCk7CiAKIAkJfSBlbHNlIGlmIChhdHRuICYgQk5YMlhfTUNfQVNTRVJUX0JJVFMpIHsKQEAgLTMxMDksNTMgKzMzODgsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYm54Mnhfc3RhdHNfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQotewotCWludCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JaW50IGk7Ci0KLQlicC0+c3RhdHNfcGVuZGluZyA9IDA7Ci0JYnAtPmV4ZWN1dGVyX2lkeCA9IDA7Ci0JYnAtPnN0YXRzX2NvdW50ZXIgPSAwOwotCi0JLyogcG9ydCBzdGF0cyAqLwotCWlmICghQlBfTk9NQ1AoYnApKQotCQlicC0+cG9ydC5wb3J0X3N0eCA9IFNITUVNX1JEKGJwLCBwb3J0X21iW3BvcnRdLnBvcnRfc3R4KTsKLQllbHNlCi0JCWJwLT5wb3J0LnBvcnRfc3R4ID0gMDsKLQlEUChCTlgyWF9NU0dfU1RBVFMsICJwb3J0X3N0eCAweCV4XG4iLCBicC0+cG9ydC5wb3J0X3N0eCk7Ci0KLQltZW1zZXQoJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzKSwgMCwgc2l6ZW9mKHN0cnVjdCBuaWdfc3RhdHMpKTsKLQlicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmJyYl9kaXNjYXJkID0KLQkJCVJFR19SRChicCwgTklHX1JFR19TVEFUMF9CUkJfRElTQ0FSRCArIHBvcnQqMHgzOCk7Ci0JYnAtPnBvcnQub2xkX25pZ19zdGF0cy5icmJfdHJ1bmNhdGUgPQotCQkJUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVQwX0JSQl9UUlVOQ0FURSArIHBvcnQqMHgzOCk7Ci0JUkVHX1JEX0RNQUUoYnAsIE5JR19SRUdfU1RBVDBfRUdSRVNTX01BQ19QS1QwICsgcG9ydCoweDUwLAotCQkgICAgJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmVncmVzc19tYWNfcGt0MF9sbyksIDIpOwotCVJFR19SRF9ETUFFKGJwLCBOSUdfUkVHX1NUQVQwX0VHUkVTU19NQUNfUEtUMSArIHBvcnQqMHg1MCwKLQkJICAgICYoYnAtPnBvcnQub2xkX25pZ19zdGF0cy5lZ3Jlc3NfbWFjX3BrdDFfbG8pLCAyKTsKLQotCS8qIGZ1bmN0aW9uIHN0YXRzICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJbWVtc2V0KCZmcC0+b2xkX3RjbGllbnQsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7Ci0JCW1lbXNldCgmZnAtPm9sZF91Y2xpZW50LCAwLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOwotCQltZW1zZXQoJmZwLT5vbGRfeGNsaWVudCwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKLQkJbWVtc2V0KCZmcC0+ZXRoX3Ffc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMpKTsKLQl9Ci0KLQltZW1zZXQoJmJwLT5kZXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKLQltZW1zZXQoJmJwLT5ldGhfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzKSk7Ci0KLQlicC0+c3RhdHNfc3RhdGUgPSBTVEFUU19TVEFURV9ESVNBQkxFRDsKLQlpZiAoSVNfRTFITUYoYnApICYmIGJwLT5wb3J0LnBtZiAmJiBicC0+cG9ydC5wb3J0X3N0eCkKLQkJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9QTUYpOwotfQotCiBzdGF0aWMgdm9pZCBibngyeF9od19zdGF0c19wb3N0KHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IGRtYWVfY29tbWFuZCAqZG1hZSA9ICZicC0+c3RhdHNfZG1hZTsKQEAgLTM3MTYsNyArMzk0OCw4IEBACiAJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAJaW50IGk7CiAKLQltZW1zZXQoJihmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwgMCwKKwltZW1jcHkoJihmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkgICAgICAgJihibngyeF9zcChicCwgZnVuY19zdGF0c19iYXNlKS0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKIAllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpID0gMDsKIAllc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvID0gMDsKQEAgLTM3MjUsNyArMzk1OCw3IEBACiAJZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkgPSAwOwogCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvID0gMDsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAJCWludCBjbF9pZCA9IGZwLT5jbF9pZDsKIAkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICp0Y2xpZW50ID0KQEAgLTM3NjQsMTEgKzM5OTcsMjQgQEAKIAkJfQogCiAJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkgPQotCQlxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfYnl0ZXMuaGkpOworCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5oaSk7CiAJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5sbyk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmhpKSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmxvKSk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5oaSksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAorCQkgICAgICAgbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMubG8pKTsKKworCQlxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpID0KKwkJCQkJcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaTsKIAkJcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+dG90YWxfcmN2X2J5dGVzLmxvKTsKKwkJCQkJcXN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbzsKIAogCQlxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpID0KIAkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfZXJyb3JfYnl0ZXMuaGkpOwpAQCAtMzgwMSw5ICs0MDQ3LDE5IEBACiAJCVVQREFURV9FWFRFTkRfVVNUQVQoYmNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOwogCiAJCXFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkgPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfYnl0ZXMuaGkpOworCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5oaSk7CiAJCXFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8gPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfYnl0ZXMubG8pOworCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5sbyk7CisKKwkJQUREXzY0KHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBsZTMyX3RvX2NwdSh4Y2xpZW50LT5tdWx0aWNhc3RfYnl0ZXNfc2VudC5oaSksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgbGUzMl90b19jcHUoeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQubG8pKTsKKworCQlBRERfNjQocXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGxlMzJfdG9fY3B1KHhjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmhpKSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBsZTMyX3RvX2NwdSh4Y2xpZW50LT5icm9hZGNhc3RfYnl0ZXNfc2VudC5sbykpOwogCiAJCVVQREFURV9FWFRFTkRfWFNUQVQodW5pY2FzdF9wa3RzX3NlbnQsCiAJCQkJCXRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CkBAIC0zOTE5LDcgKzQxNzUsNyBAQAogCW5zdGF0cy0+dHhfYnl0ZXMgPSBibngyeF9oaWxvKCZlc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKTsKIAogCW5zdGF0cy0+cnhfZHJvcHBlZCA9IGVzdGF0cy0+bWFjX2Rpc2NhcmQ7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCW5zdGF0cy0+cnhfZHJvcHBlZCArPQogCQkJbGUzMl90b19jcHUoYnAtPmZwW2ldLm9sZF90Y2xpZW50LmNoZWNrc3VtX2Rpc2NhcmQpOwogCkBAIC0zOTczLDcgKzQyMjksNyBAQAogCWVzdGF0cy0+cnhfZXJyX2Rpc2NhcmRfcGt0ID0gMDsKIAllc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQgPSAwOwogCWVzdGF0cy0+aHdfY3N1bV9lcnIgPSAwOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzICpxc3RhdHMgPSAmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOwogCiAJCWVzdGF0cy0+ZHJpdmVyX3hvZmYgKz0gcXN0YXRzLT5kcml2ZXJfeG9mZjsKQEAgLTQwMDMsNiArNDI1OSw4IEBACiAJYm54MnhfZHJ2X3N0YXRzX3VwZGF0ZShicCk7CiAKIAlpZiAoYnAtPm1zZ2xldmVsICYgTkVUSUZfTVNHX1RJTUVSKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAwX3J4ID0gYnAtPmZwOworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwMF90eCA9ICYoYnAtPmZwW2JwLT5udW1fcnhfcXVldWVzXSk7CiAJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPQogCQkJCQkJCSZicC0+ZnAtPm9sZF90Y2xpZW50OwogCQlzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgKnFzdGF0cyA9ICZicC0+ZnAtPmV0aF9xX3N0YXRzOwpAQCAtNDAxMywxMyArNDI3MSwxMyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6XG4iLCBicC0+ZGV2LT5uYW1lKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgdHggYXZhaWwgKCU0eCkgIHR4IGhjIGlkeCAoJXgpIgogCQkJCSAgIiAgdHggcGt0ICglbHgpXG4iLAotCQkgICAgICAgYm54MnhfdHhfYXZhaWwoYnAtPmZwKSwKLQkJICAgICAgIGxlMTZfdG9fY3B1KCpicC0+ZnAtPnR4X2NvbnNfc2IpLCBuc3RhdHMtPnR4X3BhY2tldHMpOworCQkgICAgICAgYm54MnhfdHhfYXZhaWwoZnAwX3R4KSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KCpmcDBfdHgtPnR4X2NvbnNfc2IpLCBuc3RhdHMtPnR4X3BhY2tldHMpOwogCQlwcmludGsoS0VSTl9ERUJVRyAiICByeCB1c2FnZSAoJTR4KSAgcnggaGMgaWR4ICgleCkiCiAJCQkJICAiICByeCBwa3QgKCVseClcbiIsCi0JCSAgICAgICAodTE2KShsZTE2X3RvX2NwdSgqYnAtPmZwLT5yeF9jb25zX3NiKSAtCi0JCQkgICAgIGJwLT5mcC0+cnhfY29tcF9jb25zKSwKLQkJICAgICAgIGxlMTZfdG9fY3B1KCpicC0+ZnAtPnJ4X2NvbnNfc2IpLCBuc3RhdHMtPnJ4X3BhY2tldHMpOworCQkgICAgICAgKHUxNikobGUxNl90b19jcHUoKmZwMF9yeC0+cnhfY29uc19zYikgLQorCQkJICAgICBmcDBfcngtPnJ4X2NvbXBfY29ucyksCisJCSAgICAgICBsZTE2X3RvX2NwdSgqZnAwX3J4LT5yeF9jb25zX3NiKSwgbnN0YXRzLT5yeF9wYWNrZXRzKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMgKFhvZmYgZXZlbnRzICV1KSAgYnJiIGRyb3BzICV1ICAiCiAJCQkJICAiYnJiIHRydW5jYXRlICV1XG4iLAogCQkgICAgICAgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikgPyAiWG9mZiIgOiAiWG9uIiksCkBAIC00MTY1LDExICs0NDIzLDE4MSBAQAogCWJueDJ4X3N0YXRzX3N0bVtzdGF0ZV1bZXZlbnRdLmFjdGlvbihicCk7CiAJYnAtPnN0YXRzX3N0YXRlID0gYm54Mnhfc3RhdHNfc3RtW3N0YXRlXVtldmVudF0ubmV4dF9zdGF0ZTsKIAorCS8qIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaGFzIGJlZW4gImNoYW5nZWQiICovCisJc21wX3dtYigpOworCiAJaWYgKChldmVudCAhPSBTVEFUU19FVkVOVF9VUERBVEUpIHx8IChicC0+bXNnbGV2ZWwgJiBORVRJRl9NU0dfVElNRVIpKQogCQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0ZSAlZCAtPiBldmVudCAlZCAtPiBzdGF0ZSAlZFxuIiwKIAkJICAgc3RhdGUsIGV2ZW50LCBicC0+c3RhdHNfc3RhdGUpOwogfQogCitzdGF0aWMgdm9pZCBibngyeF9wb3J0X3N0YXRzX2Jhc2VfaW5pdChzdHJ1Y3QgYm54MnggKmJwKQoreworCXN0cnVjdCBkbWFlX2NvbW1hbmQgKmRtYWU7CisJdTMyICpzdGF0c19jb21wID0gYm54Mnhfc3AoYnAsIHN0YXRzX2NvbXApOworCisJLyogc2FuaXR5ICovCisJaWYgKCFicC0+cG9ydC5wbWYgfHwgIWJwLT5wb3J0LnBvcnRfc3R4KSB7CisJCUJOWDJYX0VSUigiQlVHIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKKworCWRtYWUgPSBibngyeF9zcChicCwgZG1hZVticC0+ZXhlY3V0ZXJfaWR4KytdKTsKKwlkbWFlLT5vcGNvZGUgPSAoRE1BRV9DTURfU1JDX1BDSSB8IERNQUVfQ01EX0RTVF9HUkMgfAorCQkJRE1BRV9DTURfQ19EU1RfUENJIHwgRE1BRV9DTURfQ19FTkFCTEUgfAorCQkJRE1BRV9DTURfU1JDX1JFU0VUIHwgRE1BRV9DTURfRFNUX1JFU0VUIHwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCURNQUVfQ01EX0VORElBTklUWV9CX0RXX1NXQVAgfAorI2Vsc2UKKwkJCURNQUVfQ01EX0VORElBTklUWV9EV19TV0FQIHwKKyNlbmRpZgorCQkJKEJQX1BPUlQoYnApID8gRE1BRV9DTURfUE9SVF8xIDogRE1BRV9DTURfUE9SVF8wKSB8CisJCQkoQlBfRTFIVk4oYnApIDw8IERNQUVfQ01EX0UxSFZOX1NISUZUKSk7CisJZG1hZS0+c3JjX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgcG9ydF9zdGF0cykpOworCWRtYWUtPnNyY19hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHBvcnRfc3RhdHMpKTsKKwlkbWFlLT5kc3RfYWRkcl9sbyA9IGJwLT5wb3J0LnBvcnRfc3R4ID4+IDI7CisJZG1hZS0+ZHN0X2FkZHJfaGkgPSAwOworCWRtYWUtPmxlbiA9IHNpemVvZihzdHJ1Y3QgaG9zdF9wb3J0X3N0YXRzKSA+PiAyOworCWRtYWUtPmNvbXBfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHN0YXRzX2NvbXApKTsKKwlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CisKKwkqc3RhdHNfY29tcCA9IDA7CisJYm54MnhfaHdfc3RhdHNfcG9zdChicCk7CisJYm54Mnhfc3RhdHNfY29tcChicCk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2Z1bmNfc3RhdHNfYmFzZV9pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHZuLCB2bl9tYXggPSBJU19FMUhNRihicCkgPyBFMUhWTl9NQVggOiBFMVZOX01BWDsKKwlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBmdW5jOworCXUzMiBmdW5jX3N0eDsKKworCS8qIHNhbml0eSAqLworCWlmICghYnAtPnBvcnQucG1mIHx8ICFicC0+ZnVuY19zdHgpIHsKKwkJQk5YMlhfRVJSKCJCVUchXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNhdmUgb3VyIGZ1bmNfc3R4ICovCisJZnVuY19zdHggPSBicC0+ZnVuY19zdHg7CisKKwlmb3IgKHZuID0gVk5fMDsgdm4gPCB2bl9tYXg7IHZuKyspIHsKKwkJZnVuYyA9IDIqdm4gKyBwb3J0OworCisJCWJwLT5mdW5jX3N0eCA9IFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmZ3X21iX3BhcmFtKTsKKwkJYm54MnhfZnVuY19zdGF0c19pbml0KGJwKTsKKwkJYm54MnhfaHdfc3RhdHNfcG9zdChicCk7CisJCWJueDJ4X3N0YXRzX2NvbXAoYnApOworCX0KKworCS8qIHJlc3RvcmUgb3VyIGZ1bmNfc3R4ICovCisJYnAtPmZ1bmNfc3R4ID0gZnVuY19zdHg7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2Z1bmNfc3RhdHNfYmFzZV91cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgZG1hZV9jb21tYW5kICpkbWFlID0gJmJwLT5zdGF0c19kbWFlOworCXUzMiAqc3RhdHNfY29tcCA9IGJueDJ4X3NwKGJwLCBzdGF0c19jb21wKTsKKworCS8qIHNhbml0eSAqLworCWlmICghYnAtPmZ1bmNfc3R4KSB7CisJCUJOWDJYX0VSUigiQlVHIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlicC0+ZXhlY3V0ZXJfaWR4ID0gMDsKKwltZW1zZXQoZG1hZSwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFlX2NvbW1hbmQpKTsKKworCWRtYWUtPm9wY29kZSA9IChETUFFX0NNRF9TUkNfR1JDIHwgRE1BRV9DTURfRFNUX1BDSSB8CisJCQlETUFFX0NNRF9DX0RTVF9QQ0kgfCBETUFFX0NNRF9DX0VOQUJMRSB8CisJCQlETUFFX0NNRF9TUkNfUkVTRVQgfCBETUFFX0NNRF9EU1RfUkVTRVQgfAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJRE1BRV9DTURfRU5ESUFOSVRZX0JfRFdfU1dBUCB8CisjZWxzZQorCQkJRE1BRV9DTURfRU5ESUFOSVRZX0RXX1NXQVAgfAorI2VuZGlmCisJCQkoQlBfUE9SVChicCkgPyBETUFFX0NNRF9QT1JUXzEgOiBETUFFX0NNRF9QT1JUXzApIHwKKwkJCShCUF9FMUhWTihicCkgPDwgRE1BRV9DTURfRTFIVk5fU0hJRlQpKTsKKwlkbWFlLT5zcmNfYWRkcl9sbyA9IGJwLT5mdW5jX3N0eCA+PiAyOworCWRtYWUtPnNyY19hZGRyX2hpID0gMDsKKwlkbWFlLT5kc3RfYWRkcl9sbyA9IFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzX2Jhc2UpKTsKKwlkbWFlLT5kc3RfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBmdW5jX3N0YXRzX2Jhc2UpKTsKKwlkbWFlLT5sZW4gPSBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgPj4gMjsKKwlkbWFlLT5jb21wX2FkZHJfbG8gPSBVNjRfTE8oYm54Mnhfc3BfbWFwcGluZyhicCwgc3RhdHNfY29tcCkpOworCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCBzdGF0c19jb21wKSk7CisJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOworCisJKnN0YXRzX2NvbXAgPSAwOworCWJueDJ4X2h3X3N0YXRzX3Bvc3QoYnApOworCWJueDJ4X3N0YXRzX2NvbXAoYnApOworfQorCitzdGF0aWMgdm9pZCBibngyeF9zdGF0c19pbml0KHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBpOworCisJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOworCWJwLT5leGVjdXRlcl9pZHggPSAwOworCWJwLT5zdGF0c19jb3VudGVyID0gMDsKKworCS8qIHBvcnQgYW5kIGZ1bmMgc3RhdHMgZm9yIG1hbmFnZW1lbnQgKi8KKwlpZiAoIUJQX05PTUNQKGJwKSkgeworCQlicC0+cG9ydC5wb3J0X3N0eCA9IFNITUVNX1JEKGJwLCBwb3J0X21iW3BvcnRdLnBvcnRfc3R4KTsKKwkJYnAtPmZ1bmNfc3R4ID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfcGFyYW0pOworCisJfSBlbHNlIHsKKwkJYnAtPnBvcnQucG9ydF9zdHggPSAwOworCQlicC0+ZnVuY19zdHggPSAwOworCX0KKwlEUChCTlgyWF9NU0dfU1RBVFMsICJwb3J0X3N0eCAweCV4ICBmdW5jX3N0eCAweCV4XG4iLAorCSAgIGJwLT5wb3J0LnBvcnRfc3R4LCBicC0+ZnVuY19zdHgpOworCisJLyogcG9ydCBzdGF0cyAqLworCW1lbXNldCgmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMpLCAwLCBzaXplb2Yoc3RydWN0IG5pZ19zdGF0cykpOworCWJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuYnJiX2Rpc2NhcmQgPQorCQkJUkVHX1JEKGJwLCBOSUdfUkVHX1NUQVQwX0JSQl9ESVNDQVJEICsgcG9ydCoweDM4KTsKKwlicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmJyYl90cnVuY2F0ZSA9CisJCQlSRUdfUkQoYnAsIE5JR19SRUdfU1RBVDBfQlJCX1RSVU5DQVRFICsgcG9ydCoweDM4KTsKKwlSRUdfUkRfRE1BRShicCwgTklHX1JFR19TVEFUMF9FR1JFU1NfTUFDX1BLVDAgKyBwb3J0KjB4NTAsCisJCSAgICAmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuZWdyZXNzX21hY19wa3QwX2xvKSwgMik7CisJUkVHX1JEX0RNQUUoYnAsIE5JR19SRUdfU1RBVDBfRUdSRVNTX01BQ19QS1QxICsgcG9ydCoweDUwLAorCQkgICAgJihicC0+cG9ydC5vbGRfbmlnX3N0YXRzLmVncmVzc19tYWNfcGt0MV9sbyksIDIpOworCisJLyogZnVuY3Rpb24gc3RhdHMgKi8KKwlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQltZW1zZXQoJmZwLT5vbGRfdGNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+b2xkX3VjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPm9sZF94Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5ldGhfcV9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBibngyeF9ldGhfcV9zdGF0cykpOworCX0KKworCW1lbXNldCgmYnAtPmRldi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCW1lbXNldCgmYnAtPmV0aF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBibngyeF9ldGhfc3RhdHMpKTsKKworCWJwLT5zdGF0c19zdGF0ZSA9IFNUQVRTX1NUQVRFX0RJU0FCTEVEOworCisJaWYgKGJwLT5wb3J0LnBtZikgeworCQlpZiAoYnAtPnBvcnQucG9ydF9zdHgpCisJCQlibngyeF9wb3J0X3N0YXRzX2Jhc2VfaW5pdChicCk7CisKKwkJaWYgKGJwLT5mdW5jX3N0eCkKKwkJCWJueDJ4X2Z1bmNfc3RhdHNfYmFzZV9pbml0KGJwKTsKKworCX0gZWxzZSBpZiAoYnAtPmZ1bmNfc3R4KQorCQlibngyeF9mdW5jX3N0YXRzX2Jhc2VfdXBkYXRlKGJwKTsKK30KKwogc3RhdGljIHZvaWQgYm54MnhfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBibngyeCAqYnAgPSAoc3RydWN0IGJueDJ4ICopIGRhdGE7CkBAIC00MjMyLDEyICs0NjYwLDEzIEBACiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAotCWJueDJ4X2luaXRfZmlsbChicCwgVVNUT1JNX0lOVE1FTV9BRERSICsKLQkJCVVTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgc2JfaWQpLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fc3RhdHVzX2Jsb2NrKS80KTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiArCi0JCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9jaykvNCk7CisJLyogIkNTVE9STSIgKi8KKwlibngyeF9pbml0X2ZpbGwoYnAsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsKKwkJCUNTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19VX09GRlNFVChwb3J0LCBzYl9pZCksIDAsCisJCQlDU1RPUk1fU0JfU1RBVFVTX0JMT0NLX1VfU0laRSAvIDQpOworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKworCQkJQ1NUT1JNX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgMCwKKwkJCUNTVE9STV9TQl9TVEFUVVNfQkxPQ0tfQ19TSVpFIC8gNCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfc2Ioc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrICpzYiwKQEAgLTQyNTMsMTcgKzQ2ODIsMTcgQEAKIAkJCQkJICAgIHVfc3RhdHVzX2Jsb2NrKTsKIAlzYi0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CiAKLQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JICAgICAgIFVTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgVTY0X0xPKHNlY3Rpb24pKTsKLQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JICAgICAgICgoVVNUT1JNX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQocG9ydCwgc2JfaWQpKSArIDQpLAorCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgQ1NUT1JNX1NCX0hPU1RfU0JfQUREUl9VX09GRlNFVChwb3J0LCBzYl9pZCksIFU2NF9MTyhzZWN0aW9uKSk7CisJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCSAgICAgICAoKENTVE9STV9TQl9IT1NUX1NCX0FERFJfVV9PRkZTRVQocG9ydCwgc2JfaWQpKSArIDQpLAogCSAgICAgICBVNjRfSEkoc2VjdGlvbikpOwotCVJFR19XUjgoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArIEZQX1VTQl9GVU5DX09GRiArCi0JCVVTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQocG9ydCwgc2JfaWQpLCBmdW5jKTsKKwlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBGUF9VU0JfRlVOQ19PRkYgKworCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfVV9PRkZTRVQocG9ydCwgc2JfaWQpLCBmdW5jKTsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX1VTVE9STV9TQl9OVU1fSU5ESUNFUzsgaW5kZXgrKykKLQkJUkVHX1dSMTYoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLCBpbmRleCksIDEpOworCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9VX09GRlNFVChwb3J0LCBzYl9pZCwgaW5kZXgpLCAxKTsKIAogCS8qIENTVE9STSAqLwogCXNlY3Rpb24gPSAoKHU2NCltYXBwaW5nKSArIG9mZnNldG9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaywKQEAgLTQyNzEsMTYgKzQ3MDAsMTYgQEAKIAlzYi0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7CiAKIAlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JICAgICAgIENTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgVTY0X0xPKHNlY3Rpb24pKTsKKwkgICAgICAgQ1NUT1JNX1NCX0hPU1RfU0JfQUREUl9DX09GRlNFVChwb3J0LCBzYl9pZCksIFU2NF9MTyhzZWN0aW9uKSk7CiAJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCSAgICAgICAoKENTVE9STV9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKHBvcnQsIHNiX2lkKSkgKyA0KSwKKwkgICAgICAgKChDU1RPUk1fU0JfSE9TVF9TQl9BRERSX0NfT0ZGU0VUKHBvcnQsIHNiX2lkKSkgKyA0KSwKIAkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKIAlSRUdfV1I4KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKyBGUF9DU0JfRlVOQ19PRkYgKwotCQlDU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIHNiX2lkKSwgZnVuYyk7CisJCUNTVE9STV9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChwb3J0LCBzYl9pZCksIGZ1bmMpOwogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQogCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgc2JfaWQsIGluZGV4KSwgMSk7CisJCQkgQ1NUT1JNX1NCX0hDX0RJU0FCTEVfQ19PRkZTRVQocG9ydCwgc2JfaWQsIGluZGV4KSwgMSk7CiAKIAlibngyeF9hY2tfc2IoYnAsIHNiX2lkLCBDU1RPUk1fSUQsIDAsIElHVV9JTlRfRU5BQkxFLCAwKTsKIH0KQEAgLTQyODksMTYgKzQ3MTgsMTYgQEAKIHsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwogCi0JYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIgKworCWJueDJ4X2luaXRfZmlsbChicCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKwogCQkJVFNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIDAsCiAJCQlzaXplb2Yoc3RydWN0IHRzdG9ybV9kZWZfc3RhdHVzX2Jsb2NrKS80KTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiArCi0JCQlVU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX09GRlNFVChmdW5jKSwgMCwKLQkJCXNpemVvZihzdHJ1Y3QgdXN0b3JtX2RlZl9zdGF0dXNfYmxvY2spLzQpOwotCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSICsKLQkJCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7Ci0JYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIgKworCWJueDJ4X2luaXRfZmlsbChicCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKworCQkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19VX09GRlNFVChmdW5jKSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2tfdSkvNCk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU0VNX1JFR19GQVNUX01FTU9SWSArCisJCQlDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX0NfT0ZGU0VUKGZ1bmMpLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBjc3Rvcm1fZGVmX3N0YXR1c19ibG9ja19jKS80KTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsKIAkJCVhTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCAwLAogCQkJc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fZGVmX3N0YXR1c19ibG9jaykvNCk7CiB9CkBAIC00MzUwLDE3ICs0Nzc5LDE3IEBACiAJCQkJCSAgICB1X2RlZl9zdGF0dXNfYmxvY2spOwogCWRlZl9zYi0+dV9kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwogCi0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCSAgICAgICBVU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYyksIFU2NF9MTyhzZWN0aW9uKSk7Ci0JUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCSAgICAgICAoKFVTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX09GRlNFVChmdW5jKSkgKyA0KSwKKwlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJICAgICAgIENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX1VfT0ZGU0VUKGZ1bmMpLCBVNjRfTE8oc2VjdGlvbikpOworCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkgICAgICAgKChDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9VX09GRlNFVChmdW5jKSkgKyA0KSwKIAkgICAgICAgVTY0X0hJKHNlY3Rpb24pKTsKLQlSRUdfV1I4KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBERUZfVVNCX0ZVTkNfT0ZGICsKLQkJVVNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuYyksIGZ1bmMpOworCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIERFRl9VU0JfRlVOQ19PRkYgKworCQlDU1RPUk1fREVGX1NCX0hPU1RfU1RBVFVTX0JMT0NLX1VfT0ZGU0VUKGZ1bmMpLCBmdW5jKTsKIAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVM7IGluZGV4KyspCi0JCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJIFVTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuYywgaW5kZXgpLCAxKTsKKwkJUkVHX1dSMTYoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCisJCQkgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX1VfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CiAKIAkvKiBDU1RPUk0gKi8KIAlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrLApAQCAtNDM2OCwxNiArNDc5NywxNiBAQAogCWRlZl9zYi0+Y19kZWZfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwogCiAJUkVHX1dSKGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKwotCSAgICAgICBDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYyksIFU2NF9MTyhzZWN0aW9uKSk7CisJICAgICAgIENTVE9STV9ERUZfU0JfSE9TVF9TQl9BRERSX0NfT0ZGU0VUKGZ1bmMpLCBVNjRfTE8oc2VjdGlvbikpOwogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkgICAgICAgKChDU1RPUk1fREVGX1NCX0hPU1RfU0JfQUREUl9PRkZTRVQoZnVuYykpICsgNCksCisJICAgICAgICgoQ1NUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfQ19PRkZTRVQoZnVuYykpICsgNCksCiAJICAgICAgIFU2NF9ISShzZWN0aW9uKSk7CiAJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgREVGX0NTQl9GVU5DX09GRiArCi0JCUNTVE9STV9ERUZfU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKGZ1bmMpLCBmdW5jKTsKKwkJQ1NUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19DX09GRlNFVChmdW5jKSwgZnVuYyk7CiAKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBIQ19DU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTOyBpbmRleCsrKQogCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSBDU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CisJCQkgQ1NUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX0NfT0ZGU0VUKGZ1bmMsIGluZGV4KSwgMSk7CiAKIAkvKiBUU1RPUk0gKi8KIAlzZWN0aW9uID0gKCh1NjQpbWFwcGluZykgKyBvZmZzZXRvZihzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrLApAQCAtNDQyOCwyMyArNDg1NywyMyBAQAogCQlpbnQgc2JfaWQgPSBicC0+ZnBbaV0uc2JfaWQ7CiAKIAkJLyogSENfSU5ERVhfVV9FVEhfUlhfQ1FfQ09OUyAqLwotCQlSRUdfV1I4KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkJVVNUT1JNX1NCX0hDX1RJTUVPVVRfT0ZGU0VUKHBvcnQsIHNiX2lkLAotCQkJCQkJICAgIFVfU0JfRVRIX1JYX0NRX0lOREVYKSwKKwkJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKKwkJCUNTVE9STV9TQl9IQ19USU1FT1VUX1VfT0ZGU0VUKHBvcnQsIHNiX2lkLAorCQkJCQkJICAgICAgVV9TQl9FVEhfUlhfQ1FfSU5ERVgpLAogCQkJYnAtPnJ4X3RpY2tzLzEyKTsKLQkJUkVHX1dSMTYoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLAotCQkJCQkJICAgICBVX1NCX0VUSF9SWF9DUV9JTkRFWCksCisJCVJFR19XUjE2KGJwLCBCQVJfQ1NUUk9STV9JTlRNRU0gKworCQkJIENTVE9STV9TQl9IQ19ESVNBQkxFX1VfT0ZGU0VUKHBvcnQsIHNiX2lkLAorCQkJCQkJICAgICAgIFVfU0JfRVRIX1JYX0NRX0lOREVYKSwKIAkJCSAoYnAtPnJ4X3RpY2tzLzEyKSA/IDAgOiAxKTsKIAogCQkvKiBIQ19JTkRFWF9DX0VUSF9UWF9DUV9DT05TICovCiAJCVJFR19XUjgoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArCi0JCQlDU1RPUk1fU0JfSENfVElNRU9VVF9PRkZTRVQocG9ydCwgc2JfaWQsCi0JCQkJCQkgICAgQ19TQl9FVEhfVFhfQ1FfSU5ERVgpLAorCQkJQ1NUT1JNX1NCX0hDX1RJTUVPVVRfQ19PRkZTRVQocG9ydCwgc2JfaWQsCisJCQkJCQkgICAgICBDX1NCX0VUSF9UWF9DUV9JTkRFWCksCiAJCQlicC0+dHhfdGlja3MvMTIpOwogCQlSRUdfV1IxNihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKLQkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9PRkZTRVQocG9ydCwgc2JfaWQsCi0JCQkJCQkgICAgIENfU0JfRVRIX1RYX0NRX0lOREVYKSwKKwkJCSBDU1RPUk1fU0JfSENfRElTQUJMRV9DX09GRlNFVChwb3J0LCBzYl9pZCwKKwkJCQkJCSAgICAgICBDX1NCX0VUSF9UWF9DUV9JTkRFWCksCiAJCQkgKGJwLT50eF90aWNrcy8xMikgPyAwIDogMSk7CiAJfQogfQpAQCAtNDUxNyw2ICs0OTQ2LDkgQEAKIAkJZnAtPnJ4X2NvbnNfc2IgPSBCTlgyWF9SWF9TQl9JTkRFWDsKIAkJZnAtPnJ4X2JkX2NvbnNfc2IgPSBCTlgyWF9SWF9TQl9CRF9JTkRFWDsKIAorCQkvKiBNYXJrIHF1ZXVlIGFzIFJ4ICovCisJCWZwLT5pc19yeF9xdWV1ZSA9IDE7CisKIAkJLyogIm5leHQgcGFnZSIgZWxlbWVudHMgaW5pdGlhbGl6YXRpb24gKi8KIAkJLyogU0dFIHJpbmcgKi8KIAkJZm9yIChpID0gMTsgaSA8PSBOVU1fUlhfU0dFX1BBR0VTOyBpKyspIHsKQEAgLTQ2MjYsMTcgKzUwNTgsMjEgQEAKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CiAKIAkJZm9yIChpID0gMTsgaSA8PSBOVU1fVFhfUklOR1M7IGkrKykgewotCQkJc3RydWN0IGV0aF90eF9iZCAqdHhfYmQgPQotCQkJCSZmcC0+dHhfZGVzY19yaW5nW1RYX0RFU0NfQ05UICogaSAtIDFdOworCQkJc3RydWN0IGV0aF90eF9uZXh0X2JkICp0eF9uZXh0X2JkID0KKwkJCQkmZnAtPnR4X2Rlc2NfcmluZ1tUWF9ERVNDX0NOVCAqIGkgLSAxXS5uZXh0X2JkOwogCi0JCQl0eF9iZC0+YWRkcl9oaSA9CisJCQl0eF9uZXh0X2JkLT5hZGRyX2hpID0KIAkJCQljcHVfdG9fbGUzMihVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyArCiAJCQkJCSAgICBCQ01fUEFHRV9TSVpFKihpICUgTlVNX1RYX1JJTkdTKSkpOwotCQkJdHhfYmQtPmFkZHJfbG8gPQorCQkJdHhfbmV4dF9iZC0+YWRkcl9sbyA9CiAJCQkJY3B1X3RvX2xlMzIoVTY0X0xPKGZwLT50eF9kZXNjX21hcHBpbmcgKwogCQkJCQkgICAgQkNNX1BBR0VfU0laRSooaSAlIE5VTV9UWF9SSU5HUykpKTsKIAkJfQogCisJCWZwLT50eF9kYi5kYXRhLmhlYWRlci5oZWFkZXIgPSBET09SQkVMTF9IRFJfREJfVFlQRTsKKwkJZnAtPnR4X2RiLmRhdGEuemVyb19maWxsMSA9IDA7CisJCWZwLT50eF9kYi5kYXRhLnByb2QgPSAwOworCiAJCWZwLT50eF9wa3RfcHJvZCA9IDA7CiAJCWZwLT50eF9wa3RfY29ucyA9IDA7CiAJCWZwLT50eF9iZF9wcm9kID0gMDsKQEAgLTQ2NDQsNiArNTA4MCwxMCBAQAogCQlmcC0+dHhfY29uc19zYiA9IEJOWDJYX1RYX1NCX0lOREVYOwogCQlmcC0+dHhfcGt0ID0gMDsKIAl9CisKKwkvKiBjbGVhbiB0eCBzdGF0aXN0aWNzICovCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCisJCWJueDJ4X2ZwKGJwLCBpLCB0eF9wa3QpID0gMDsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9zcF9yaW5nKHN0cnVjdCBibngyeCAqYnApCkBAIC00NjcyLDE2ICs1MTEyLDE1IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBldGhfY29udGV4dCAqY29udGV4dCA9IGJueDJ4X3NwKGJwLCBjb250ZXh0W2ldLmV0aCk7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwogCQl1OCBjbF9pZCA9IGZwLT5jbF9pZDsKLQkJdTggc2JfaWQgPSBmcC0+c2JfaWQ7CiAKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNiX2luZGV4X251bWJlcnMgPQogCQkJCQkJQk5YMlhfUlhfU0JfSU5ERVhfTlVNOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uY2xpZW50SWQgPSBjbF9pZDsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc3RhdHVzX2Jsb2NrX2lkID0gZnAtPnNiX2lkOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uZmxhZ3MgPQogCQkJKFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX01DX0FMSUdOTUVOVCB8CiAJCQkgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyk7CkBAIC00Njk3LDggKzUxMzYsNyBAQAogCQkJCQkJVTY0X0xPKGZwLT5yeF9kZXNjX21hcHBpbmcpOwogCQlpZiAoIWZwLT5kaXNhYmxlX3RwYSkgewogCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmZsYWdzIHw9Ci0JCQkJKFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQSB8Ci0JCQkJIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HKTsKKwkJCQlVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEE7CiAJCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc2dlX2J1ZmZfc2l6ZSA9CiAJCQkJKHUxNiltaW4oKHUzMilTR0VfUEFHRV9TSVpFKlBBR0VTX1BFUl9TR0UsCiAJCQkJCSAodTMyKTB4ZmZmZik7CkBAIC00NzA2LDYgKzUxNDQsMTMgQEAKIAkJCQkJCVU2NF9ISShmcC0+cnhfc2dlX21hcHBpbmcpOwogCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLnNnZV9wYWdlX2Jhc2VfbG8gPQogCQkJCQkJVTY0X0xPKGZwLT5yeF9zZ2VfbWFwcGluZyk7CisKKwkJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5tYXhfc2dlc19mb3JfcGFja2V0ID0KKwkJCQlTR0VfUEFHRV9BTElHTihicC0+ZGV2LT5tdHUpID4+IFNHRV9QQUdFX1NISUZUOworCQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLm1heF9zZ2VzX2Zvcl9wYWNrZXQgPQorCQkJCSgoY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLgorCQkJCSAgbWF4X3NnZXNfZm9yX3BhY2tldCArIFBBR0VTX1BFUl9TR0UgLSAxKSAmCisJCQkJICh+KFBBR0VTX1BFUl9TR0UgLSAxKSkpID4+IFBBR0VTX1BFUl9TR0VfU0hJRlQ7CiAJCX0KIAogCQljb250ZXh0LT51c3Rvcm1fYWdfY29udGV4dC5jZHVfdXNhZ2UgPQpAQCAtNDcxMywyNSArNTE1OCwyOCBAQAogCQkJCQkgICAgICAgQ0RVX1JFR0lPTl9OVU1CRVJfVUNNX0FHLAogCQkJCQkgICAgICAgRVRIX0NPTk5FQ1RJT05fVFlQRSk7CiAKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2hpID0KLQkJCQkJCVU2NF9ISShmcC0+dHhfZGVzY19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQudHhfYmRfcGFnZV9iYXNlX2xvID0KLQkJCQkJCVU2NF9MTyhmcC0+dHhfZGVzY19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2hpID0KLQkJCQkJCVU2NF9ISShmcC0+dHhfcHJvZHNfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9sbyA9Ci0JCQkJCQlVNjRfTE8oZnAtPnR4X3Byb2RzX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5zdGF0aXN0aWNzX2RhdGEgPSAoY2xfaWQgfAotCQkJCVhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0VOQUJMRSk7Ci0JCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnNiX2luZGV4X251bWJlciA9Ci0JCQkJCQlDX1NCX0VUSF9UWF9DUV9JTkRFWDsKLQkJY29udGV4dC0+Y3N0b3JtX3N0X2NvbnRleHQuc3RhdHVzX2Jsb2NrX2lkID0gc2JfaWQ7Ci0KIAkJY29udGV4dC0+eHN0b3JtX2FnX2NvbnRleHQuY2R1X3Jlc2VydmVkID0KIAkJCUNEVV9SU1JWRF9WQUxVRV9UWVBFX0EoSFdfQ0lEKGJwLCBpKSwKIAkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1hDTV9BRywKIAkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOwogCX0KKworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCQlzdHJ1Y3QgZXRoX2NvbnRleHQgKmNvbnRleHQgPQorCQkJYm54Mnhfc3AoYnAsIGNvbnRleHRbaSAtIGJwLT5udW1fcnhfcXVldWVzXS5ldGgpOworCisJCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnNiX2luZGV4X251bWJlciA9CisJCQkJCQlDX1NCX0VUSF9UWF9DUV9JTkRFWDsKKwkJY29udGV4dC0+Y3N0b3JtX3N0X2NvbnRleHQuc3RhdHVzX2Jsb2NrX2lkID0gZnAtPnNiX2lkOworCisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9oaSA9CisJCQkJCQlVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnN0YXRpc3RpY3NfZGF0YSA9IChmcC0+Y2xfaWQgfAorCQkJCVhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2luZF90YWJsZShzdHJ1Y3QgYm54MnggKmJwKQpAQCAtNDc2OCwxOCArNTIxNiw2IEBACiAJfQogI2VuZGlmCiAKLQlpZiAoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSB7Ci0JCXRzdG9ybV9jbGllbnQubWF4X3NnZXNfZm9yX3BhY2tldCA9Ci0JCQlTR0VfUEFHRV9BTElHTih0c3Rvcm1fY2xpZW50Lm10dSkgPj4gU0dFX1BBR0VfU0hJRlQ7Ci0JCXRzdG9ybV9jbGllbnQubWF4X3NnZXNfZm9yX3BhY2tldCA9Ci0JCQkoKHRzdG9ybV9jbGllbnQubWF4X3NnZXNfZm9yX3BhY2tldCArCi0JCQkgIFBBR0VTX1BFUl9TR0UgLSAxKSAmICh+KFBBR0VTX1BFUl9TR0UgLSAxKSkpID4+Ci0JCQlQQUdFU19QRVJfU0dFX1NISUZUOwotCi0JCXRzdG9ybV9jbGllbnQuY29uZmlnX2ZsYWdzIHw9Ci0JCQkJVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORzsKLQl9Ci0KIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCQl0c3Rvcm1fY2xpZW50LnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IGJwLT5mcFtpXS5jbF9pZDsKIApAQCAtNDgwMSw3ICs1MjM3LDE0IEBACiAJaW50IG1vZGUgPSBicC0+cnhfbW9kZTsKIAlpbnQgbWFzayA9ICgxIDw8IEJQX0xfSUQoYnApKTsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAJaW50IGk7CisJLyogQWxsIGJ1dCBtYW5hZ2VtZW50IHVuaWNhc3QgcGFja2V0cyBzaG91bGQgcGFzcyB0byB0aGUgaG9zdCBhcyB3ZWxsICovCisJdTMyIGxsaF9tYXNrID0KKwkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX0JSQ1NUIHwKKwkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX01MQ1NUIHwKKwkJTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX1ZMQU4gfAorCQlOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfTk9fVkxBTjsKIAogCURQKE5FVElGX01TR19JRlVQLCAicnggbW9kZSAlZCAgbWFzayAweCV4XG4iLCBtb2RlLCBtYXNrKTsKIApAQCAtNDgyNSw2ICs1MjY4LDggQEAKIAkJdHN0b3JtX21hY19maWx0ZXIudWNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCXRzdG9ybV9tYWNfZmlsdGVyLm1jYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKKwkJLyogcGFzcyBtYW5hZ2VtZW50IHVuaWNhc3QgcGFja2V0cyBhcyB3ZWxsICovCisJCWxsaF9tYXNrIHw9IE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19VTkNTVDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDgzMiw2ICs1Mjc3LDEwIEBACiAJCWJyZWFrOwogCX0KIAorCVJFR19XUihicCwKKwkgICAgICAgKHBvcnQgPyBOSUdfUkVHX0xMSDFfQlJCMV9EUlZfTUFTSyA6IE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLKSwKKwkgICAgICAgbGxoX21hc2spOworCiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdHN0b3JtX2V0aF9tYWNfZmlsdGVyX2NvbmZpZykvNDsgaSsrKSB7CiAJCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKIAkJICAgICAgIFRTVE9STV9NQUNfRklMVEVSX0NPTkZJR19PRkZTRVQoZnVuYykgKyBpICogNCwKQEAgLTQ4NDksMTcgKzUyOTgsNiBAQAogewogCWludCBpOwogCi0JaWYgKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgewotCQlzdHJ1Y3QgdHN0b3JtX2V0aF90cGFfZXhpc3QgdHBhID0gezB9OwotCi0JCXRwYS50cGFfZXhpc3QgPSAxOwotCi0JCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1RQQV9FWElTVF9PRkZTRVQsCi0JCSAgICAgICAoKHUzMiAqKSZ0cGEpWzBdKTsKLQkJUkVHX1dSKGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKyBUU1RPUk1fVFBBX0VYSVNUX09GRlNFVCArIDQsCi0JCSAgICAgICAoKHUzMiAqKSZ0cGEpWzFdKTsKLQl9Ci0KIAkvKiBaZXJvIHRoaXMgbWFudWFsbHkgYXMgaXRzIGluaXRpYWxpemF0aW9uIGlzCiAJICAgY3VycmVudGx5IG1pc3NpbmcgaW4gdGhlIGluaXRUb29sICovCiAJZm9yIChpID0gMDsgaSA8IChVU1RPUk1fQUdHX0RBVEFfU0laRSA+PiAyKTsgaSsrKQpAQCAtNDg3MSw1MyArNTMwOSwxNCBAQAogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAKLQlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArIFVTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOwotCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7CisJUkVHX1dSKGJwLAorCSAgICAgICBCQVJfQ1NUUk9STV9JTlRNRU0gKyBDU1RPUk1fSENfQlRSX1VfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOworCVJFR19XUihicCwKKwkgICAgICAgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX0hDX0JUUl9DX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKIAlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArIFRTVE9STV9IQ19CVFJfT0ZGU0VUKHBvcnQpLCBCTlgyWF9CVFIpOwogCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsgWFNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCksIEJOWDJYX0JUUik7CiB9CiAKLS8qIENhbGN1bGF0ZXMgdGhlIHN1bSBvZiB2bl9taW5fcmF0ZXMuCi0gICBJdCdzIG5lZWRlZCBmb3IgZnVydGhlciBub3JtYWxpemluZyBvZiB0aGUgbWluX3JhdGVzLgotICAgUmV0dXJuczoKLSAgICAgc3VtIG9mIHZuX21pbl9yYXRlcy4KLSAgICAgICBvcgotICAgICAwIC0gaWYgYWxsIHRoZSBtaW5fcmF0ZXMgYXJlIDAuCi0gICAgIEluIHRoZSBsYXRlciBjYXNlIGZhaW5lc3MgYWxnb3JpdGhtIHNob3VsZCBiZSBkZWFjdGl2YXRlZC4KLSAgICAgSWYgbm90IGFsbCBtaW5fcmF0ZXMgYXJlIHplcm8gdGhlbiB0aG9zZSB0aGF0IGFyZSB6ZXJvZXMgd2lsbCBiZSBzZXQgdG8gMS4KLSAqLwotc3RhdGljIHZvaWQgYm54MnhfY2FsY192bl93ZWlnaHRfc3VtKHN0cnVjdCBibngyeCAqYnApCi17Ci0JaW50IGFsbF96ZXJvID0gMTsKLQlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOwotCWludCB2bjsKLQotCWJwLT52bl93ZWlnaHRfc3VtID0gMDsKLQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKLQkJaW50IGZ1bmMgPSAyKnZuICsgcG9ydDsKLQkJdTMyIHZuX2NmZyA9Ci0JCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7Ci0JCXUzMiB2bl9taW5fcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUlOX0JXX01BU0spID4+Ci0JCQkJICAgRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKLQotCQkvKiBTa2lwIGhpZGRlbiB2bnMgKi8KLQkJaWYgKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX0ZVTkNfSElERSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIElmIG1pbiByYXRlIGlzIHplcm8gLSBzZXQgaXQgdG8gMSAqLwotCQlpZiAoIXZuX21pbl9yYXRlKQotCQkJdm5fbWluX3JhdGUgPSBERUZfTUlOX1JBVEU7Ci0JCWVsc2UKLQkJCWFsbF96ZXJvID0gMDsKLQotCQlicC0+dm5fd2VpZ2h0X3N1bSArPSB2bl9taW5fcmF0ZTsKLQl9Ci0KLQkvKiAuLi4gb25seSBpZiBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvcyAtIGRpc2FibGUgZmFpcm5lc3MgKi8KLQlpZiAoYWxsX3plcm8pCi0JCWJwLT52bl93ZWlnaHRfc3VtID0gMDsKLX0KLQogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9pbnRlcm5hbF9mdW5jKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IHRzdG9ybV9ldGhfZnVuY3Rpb25fY29tbW9uX2NvbmZpZyB0c3Rvcm1fY29uZmlnID0gezB9OwpAQCAtNDkzMiw2ICs1MzMxLDEyIEBACiAJCXRzdG9ybV9jb25maWcuY29uZmlnX2ZsYWdzID0gTVVMVElfRkxBR1MoYnApOwogCQl0c3Rvcm1fY29uZmlnLnJzc19yZXN1bHRfbWFzayA9IE1VTFRJX01BU0s7CiAJfQorCisJLyogRW5hYmxlIFRQQSBpZiBuZWVkZWQgKi8KKwlpZiAoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKQorCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyB8PQorCQkJVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0VOQUJMRV9UUEE7CisKIAlpZiAoSVNfRTFITUYoYnApKQogCQl0c3Rvcm1fY29uZmlnLmNvbmZpZ19mbGFncyB8PQogCQkJCVRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU07CkBAIC01MDQzLDYgKzU0NDgsMTQgQEAKIAkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpICsgNCwKIAkJICAgICAgIFU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nKSk7CiAKKwkJLyogTmV4dCBwYWdlICovCisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9ORVhUX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpLAorCQkgICAgICAgVTY0X0xPKGZwLT5yeF9jb21wX21hcHBpbmcgKyBCQ01fUEFHRV9TSVpFKSk7CisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9ORVhUX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpICsgNCwKKwkJICAgICAgIFU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nICsgQkNNX1BBR0VfU0laRSkpOworCiAJCVJFR19XUjE2KGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwogCQkJIFVTVE9STV9NQVhfQUdHX1NJWkVfT0ZGU0VUKHBvcnQsIGZwLT5jbF9pZCksCiAJCQkgbWF4X2FnZ19zaXplKTsKQEAgLTUxNTMsNiArNTU2Niw5IEBACiAJCWZwLT5pbmRleCA9IGk7CiAJCWZwLT5jbF9pZCA9IEJQX0xfSUQoYnApICsgaTsKIAkJZnAtPnNiX2lkID0gZnAtPmNsX2lkOworCQkvKiBTdWl0YWJsZSBSeCBhbmQgVHggU0JzIGFyZSBzZXJ2ZWQgYnkgdGhlIHNhbWUgY2xpZW50ICovCisJCWlmIChpID49IGJwLT5udW1fcnhfcXVldWVzKQorCQkJZnAtPmNsX2lkIC09IGJwLT5udW1fcnhfcXVldWVzOwogCQlEUChORVRJRl9NU0dfSUZVUCwKIAkJICAgInF1ZXVlWyVkXTogIGJueDJ4X2luaXRfc2IoJXAsJXApICBjbF9pZCAlZCAgc2IgJWRcbiIsCiAJCSAgIGksIGJwLCBmcC0+c3RhdHVzX2JsaywgZnAtPmNsX2lkLCBmcC0+c2JfaWQpOwpAQCAtNTE4NSw2ICs1NjAxLDExIEBACiAJbW1pb3diKCk7CiAKIAlibngyeF9pbnRfZW5hYmxlKGJwKTsKKworCS8qIENoZWNrIGZvciBTUElPNSAqLworCWJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQwKGJwLAorCQlSRUdfUkQoYnAsIE1JU0NfUkVHX0FFVV9BRlRFUl9JTlZFUlRfMV9GVU5DXzAgKyBCUF9QT1JUKGJwKSo0KSAmCisJCQkJICAgQUVVX0lOUFVUU19BVFROX0JJVFNfU1BJTzUpOwogfQogCiAvKiBlbmQgb2YgbmljIGluaXQgKi8KQEAgLTU1MTAsNiArNTkzMSw3OCBAQAogCVJFR19XUihicCwgR1JDQkFTRV9NSVNDICsgTUlTQ19SRUdJU1RFUlNfUkVTRVRfUkVHXzJfQ0xFQVIsIDB4MTQwMyk7CiB9CiAKK3N0YXRpYyB2b2lkIGJueDJ4X2luaXRfcHhwKHN0cnVjdCBibngyeCAqYnApCit7CisJdTE2IGRldmN0bDsKKwlpbnQgcl9vcmRlciwgd19vcmRlcjsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJwLT5wZGV2LAorCQkJICAgICBicC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwgJmRldmN0bCk7CisJRFAoTkVUSUZfTVNHX0hXLCAicmVhZCAweCV4IGZyb20gZGV2Y3RsXG4iLCBkZXZjdGwpOworCXdfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1BBWUxPQUQpID4+IDUpOworCWlmIChicC0+bXJycyA9PSAtMSkKKwkJcl9vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7CisJZWxzZSB7CisJCURQKE5FVElGX01TR19IVywgImZvcmNlIHJlYWQgb3JkZXIgdG8gJWRcbiIsIGJwLT5tcnJzKTsKKwkJcl9vcmRlciA9IGJwLT5tcnJzOworCX0KKworCWJueDJ4X2luaXRfcHhwX2FyYihicCwgcl9vcmRlciwgd19vcmRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldHVwX2Zhbl9mYWlsdXJlX2RldGVjdGlvbihzdHJ1Y3QgYm54MnggKmJwKQoreworCXUzMiB2YWw7CisJdTggcG9ydDsKKwl1OCBpc19yZXF1aXJlZCA9IDA7CisKKwl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5jb25maWcyKSAmCisJICAgICAgU0hBUkVEX0hXX0NGR19GQU5fRkFJTFVSRV9NQVNLOworCisJaWYgKHZhbCA9PSBTSEFSRURfSFdfQ0ZHX0ZBTl9GQUlMVVJFX0VOQUJMRUQpCisJCWlzX3JlcXVpcmVkID0gMTsKKworCS8qCisJICogVGhlIGZhbiBmYWlsdXJlIG1lY2hhbmlzbSBpcyB1c3VhbGx5IHJlbGF0ZWQgdG8gdGhlIFBIWSB0eXBlIHNpbmNlCisJICogdGhlIHBvd2VyIGNvbnN1bXB0aW9uIG9mIHRoZSBib2FyZCBpcyBhZmZlY3RlZCBieSB0aGUgUEhZLiBDdXJyZW50bHksCisJICogZmFuIGlzIHJlcXVpcmVkIGZvciBtb3N0IGRlc2lnbnMgd2l0aCBTRlg3MTAxLCBCQ004NzI3IGFuZCBCQ004NDgxLgorCSAqLworCWVsc2UgaWYgKHZhbCA9PSBTSEFSRURfSFdfQ0ZHX0ZBTl9GQUlMVVJFX1BIWV9UWVBFKQorCQlmb3IgKHBvcnQgPSBQT1JUXzA7IHBvcnQgPCBQT1JUX01BWDsgcG9ydCsrKSB7CisJCQl1MzIgcGh5X3R5cGUgPQorCQkJCVNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS4KKwkJCQkJIGV4dGVybmFsX3BoeV9jb25maWcpICYKKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9NQVNLOworCQkJaXNfcmVxdWlyZWQgfD0KKwkJCQkoKHBoeV90eXBlID09CisJCQkJICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxKSB8fAorCQkJCSAocGh5X3R5cGUgPT0KKwkJCQkgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjcpIHx8CisJCQkJIChwaHlfdHlwZSA9PQorCQkJCSAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSkpOworCQl9CisKKwlEUChORVRJRl9NU0dfSFcsICJmYW4gZGV0ZWN0aW9uIHNldHRpbmc6ICVkXG4iLCBpc19yZXF1aXJlZCk7CisKKwlpZiAoaXNfcmVxdWlyZWQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogRmFuIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IFNQSU8gNSAqLworCWJueDJ4X3NldF9zcGlvKGJwLCBNSVNDX1JFR0lTVEVSU19TUElPXzUsCisJCSAgICAgICBNSVNDX1JFR0lTVEVSU19TUElPX0lOUFVUX0hJX1opOworCisJLyogc2V0IHRvIGFjdGl2ZSBsb3cgbW9kZSAqLworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfU1BJT19JTlQpOworCXZhbCB8PSAoKDEgPDwgTUlTQ19SRUdJU1RFUlNfU1BJT181KSA8PAorCQkJCU1JU0NfUkVHSVNURVJTX1NQSU9fSU5UX09MRF9TRVRfUE9TKTsKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX1NQSU9fSU5ULCB2YWwpOworCisJLyogZW5hYmxlIGludGVycnVwdCB0byBzaWduYWwgdGhlIElHVSAqLworCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfU1BJT19FVkVOVF9FTik7CisJdmFsIHw9ICgxIDw8IE1JU0NfUkVHSVNURVJTX1NQSU9fNSk7CisJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0VWRU5UX0VOLCB2YWwpOworfQorCiBzdGF0aWMgaW50IGJueDJ4X2luaXRfY29tbW9uKHN0cnVjdCBibngyeCAqYnApCiB7CiAJdTMyIHZhbCwgaTsKQEAgLTU2MjYsMTAgKzYxMTksMTAgQEAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0RNX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFhTRE1fQkxPQ0ssIENPTU1PTl9TVEFHRSk7CiAKLQlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKLQlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOworCWJueDJ4X2luaXRfZmlsbChicCwgVVNFTV9SRUdfRkFTVF9NRU1PUlksIDAsIFNUT1JNX0lOVE1FTV9TSVpFKGJwKSk7CisJYm54MnhfaW5pdF9maWxsKGJwLCBDU0VNX1JFR19GQVNUX01FTU9SWSwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZLCAwLCBTVE9STV9JTlRNRU1fU0laRShicCkpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0VNX0JMT0NLLCBDT01NT05fU1RBR0UpOwpAQCAtNTY2MiwxMSArNjE1NSw2IEBACiAJYm54MnhfaW5pdF9ibG9jayhicCwgQ0RVX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCXZhbCA9ICg0IDw8IDI0KSArICgwIDw8IDEyKSArIDEwMjQ7CiAJUkVHX1dSKGJwLCBDRFVfUkVHX0NEVV9HTE9CQUxfUEFSQU1TLCB2YWwpOwotCWlmIChDSElQX0lTX0UxKGJwKSkgewotCQkvKiAhISEgZml4IHB4cCBjbGllbnQgY3JkaXQgdW50aWwgZXhjZWwgdXBkYXRlICovCi0JCVJFR19XUihicCwgQ0RVX1JFR19DRFVfREVCVUcsIDB4MjY0KTsKLQkJUkVHX1dSKGJwLCBDRFVfUkVHX0NEVV9ERUJVRywgMCk7Ci0JfQogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQ0ZDX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCVJFR19XUihicCwgQ0ZDX1JFR19JTklUX1JFRywgMHg3RkYpOwpAQCAtNTY3OSwxOSArNjE2NywxNCBAQAogCWJueDJ4X2luaXRfYmxvY2soYnAsIEhDX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQUVVX0JMT0NLLCBDT01NT05fU1RBR0UpOwogCi0JLyogUFhQQ1MgQ09NTU9OIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFBDU19CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAkvKiBSZXNldCBQQ0lFIGVycm9ycyBmb3IgZGVidWcgKi8KIAlSRUdfV1IoYnAsIDB4MjgxNCwgMHhmZmZmZmZmZik7CiAJUkVHX1dSKGJwLCAweDM4MjAsIDB4ZmZmZmZmZmYpOwogCi0JLyogRU1BQzAgQ09NTU9OIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBFTUFDMF9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQkvKiBFTUFDMSBDT01NT04gY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIEVNQUMxX0JMT0NLLCBDT01NT05fU1RBR0UpOwotCS8qIERCVSBDT01NT04gY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIERCVV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKLQkvKiBEQkcgQ09NTU9OIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBEQkdfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBOSUdfQkxPQ0ssIENPTU1PTl9TVEFHRSk7CkBAIC01NzM2LDMwICs2MjE5LDE2IEBACiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgogCQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSAxOwogCQlicmVhazsKIAotCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKLQkJLyogRmFuIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IFNQSU8gNSAqLwotCQlibngyeF9zZXRfc3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfU1BJT181LAotCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWik7Ci0KLQkJLyogc2V0IHRvIGFjdGl2ZSBsb3cgbW9kZSAqLwotCQl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX1NQSU9fSU5UKTsKLQkJdmFsIHw9ICgoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpIDw8Ci0JCQkJCU1JU0NfUkVHSVNURVJTX1NQSU9fSU5UX09MRF9TRVRfUE9TKTsKLQkJUkVHX1dSKGJwLCBNSVNDX1JFR19TUElPX0lOVCwgdmFsKTsKLQotCQkvKiBlbmFibGUgaW50ZXJydXB0IHRvIHNpZ25hbCB0aGUgSUdVICovCi0JCXZhbCA9IFJFR19SRChicCwgTUlTQ19SRUdfU1BJT19FVkVOVF9FTik7Ci0JCXZhbCB8PSAoMSA8PCBNSVNDX1JFR0lTVEVSU19TUElPXzUpOwotCQlSRUdfV1IoYnAsIE1JU0NfUkVHX1NQSU9fRVZFTlRfRU4sIHZhbCk7Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCisJYm54Mnhfc2V0dXBfZmFuX2ZhaWx1cmVfZGV0ZWN0aW9uKGJwKTsKKwogCS8qIGNsZWFyIFBYUDIgYXR0ZW50aW9ucyAqLwogCVJFR19SRChicCwgUFhQMl9SRUdfUFhQMl9JTlRfU1RTX0NMUl8wKTsKIApAQCAtNTc4NiwxMCArNjI1NSwxMiBAQAogCiAJUkVHX1dSKGJwLCBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQwICsgcG9ydCo0LCAwKTsKIAotCS8qIFBvcnQgUFhQIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBQWFBfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgUFhQMiBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgUFhQMl9CTE9DSywgaW5pdF9zdGFnZSk7CisKKwlibngyeF9pbml0X2Jsb2NrKGJwLCBUQ01fQkxPQ0ssIGluaXRfc3RhZ2UpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFVDTV9CTE9DSywgaW5pdF9zdGFnZSk7CisJYm54MnhfaW5pdF9ibG9jayhicCwgQ0NNX0JMT0NLLCBpbml0X3N0YWdlKTsKICNpZmRlZiBCQ01fSVNDU0kKIAkvKiBQb3J0MCAgMQogCSAqIFBvcnQxICAzODUgKi8KQEAgLTU4MTUsMTcgKzYyODYsMTQgQEAKIAlSRUdfV1JfRE1BRShicCwgUFhQMl9SRUdfUlFfT05DSElQX0FUICsgaSo4LCB3Yl93cml0ZSwgMik7CiAJUkVHX1dSKGJwLCBQWFAyX1JFR19QU1dSUV9TUkMwX0wyUCArIGZ1bmMqNCwgUFhQX09ORV9JTFQoaSkpOwogI2VuZGlmCi0JLyogUG9ydCBDTXMgY29tZSBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgWENNX0JMT0NLLCBpbml0X3N0YWdlKTsKIAotCS8qIFBvcnQgUU0gY29tZXMgaGVyZSAqLwogI2lmZGVmIEJDTV9JU0NTSQogCVJFR19XUihicCwgVE1fUkVHX0xJTjBfU0NBTl9USU1FICsgZnVuYyo0LCAxMDI0LzY0KjIwKTsKIAlSRUdfV1IoYnAsIFRNX1JFR19MSU4wX01BWF9BQ1RJVkVfQ0lEICsgZnVuYyo0LCAzMSk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBUSU1FUlNfQkxPQ0ssIGluaXRfc3RhZ2UpOwogI2VuZGlmCi0JLyogUG9ydCBEUSBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgRFFfQkxPQ0ssIGluaXRfc3RhZ2UpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQlJCMV9CTE9DSywgaW5pdF9zdGFnZSk7CkBAIC01ODUyLDE1ICs2MzIwLDExIEBACiAJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8wICsgcG9ydCo0LCBoaWdoKTsKIAogCi0JLyogUG9ydCBQUlMgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFBSU19CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBUU0RNIGNvbWVzIGhlcmUgKi8KKwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFRTRE1fQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgQ1NETSBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgQ1NETV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBVU0RNIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBVU0RNX0JMT0NLLCBpbml0X3N0YWdlKTsKLQkvKiBQb3J0IFhTRE0gY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFhTRE1fQkxPQ0ssIGluaXRfc3RhZ2UpOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9CTE9DSywgaW5pdF9zdGFnZSk7CkBAIC01ODY4LDkgKzYzMzIsNyBAQAogCWJueDJ4X2luaXRfYmxvY2soYnAsIENTRU1fQkxPQ0ssIGluaXRfc3RhZ2UpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFhTRU1fQkxPQ0ssIGluaXRfc3RhZ2UpOwogCi0JLyogUG9ydCBVUEIgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFVQQl9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBYUEIgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFhQQl9CTE9DSywgaW5pdF9zdGFnZSk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBQQkZfQkxPQ0ssIGluaXRfc3RhZ2UpOwpAQCAtNTkwMCwxMSArNjM2Miw4IEBACiAJUkVHX1dSX0RNQUUoYnAsIFNSQ19SRUdfTEFTVEZSRUUwICsgZnVuYyo0LCB3Yl93cml0ZSwgMik7CiAKIAlSRUdfV1IoYnAsIFNSQ19SRUdfTlVNQkVSX0hBU0hfQklUUzAgKyBmdW5jKjQsIDEwKTsKLQkvKiBQb3J0IFNSQ0ggY29tZXMgaGVyZSAqLwogI2VuZGlmCi0JLyogUG9ydCBDRFUgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIENEVV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBDRkMgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIENGQ19CTE9DSywgaW5pdF9zdGFnZSk7CiAKIAlpZiAoQ0hJUF9JU19FMShicCkpIHsKQEAgLTU5MjEsMTUgKzYzODAsMTAgQEAKIAlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wICsgcG9ydCo0LAogCSAgICAgICAoSVNfRTFITUYoYnApID8gMHhGNyA6IDB4NykpOwogCi0JLyogUG9ydCBQWFBDUyBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgUFhQQ1NfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgRU1BQzAgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIEVNQUMwX0JMT0NLLCBpbml0X3N0YWdlKTsKLQkvKiBQb3J0IEVNQUMxIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBFTUFDMV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBEQlUgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIERCVV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JLyogUG9ydCBEQkcgY29tZXMgaGVyZSAqLwogCWJueDJ4X2luaXRfYmxvY2soYnAsIERCR19CTE9DSywgaW5pdF9zdGFnZSk7CiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBOSUdfQkxPQ0ssIGluaXRfc3RhZ2UpOwpAQCAtNTk0MSw5ICs2Mzk1LDYgQEAKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NRiArIHBvcnQqNCwKIAkJICAgICAgIChJU19FMUhNRihicCkgPyAweDEgOiAweDIpKTsKIAotCQkvKiBzdXBwb3J0IHBhdXNlIHJlcXVlc3RzIGZyb20gVVNETSwgVFNETSBhbmQgQlJCICovCi0JCVJFR19XUihicCwgTklHX1JFR19MTEZDX0VHUkVTU19TUkNfRU5BQkxFXzAgKyBwb3J0KjQsIDB4Nyk7Ci0KIAkJewogCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfRU5BQkxFXzAgKyBwb3J0KjQsIDApOwogCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfT1VUX0VOXzAgKyBwb3J0KjQsIDApOwpAQCAtNTk1MSw5ICs2NDAyLDcgQEAKIAkJfQogCX0KIAotCS8qIFBvcnQgTUNQIGNvbWVzIGhlcmUgKi8KIAlibngyeF9pbml0X2Jsb2NrKGJwLCBNQ1BfQkxPQ0ssIGluaXRfc3RhZ2UpOwotCS8qIFBvcnQgRE1BRSBjb21lcyBoZXJlICovCiAJYm54MnhfaW5pdF9ibG9jayhicCwgRE1BRV9CTE9DSywgaW5pdF9zdGFnZSk7CiAKIAlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKQEAgLTU5ODksMTAgKzY0MzgsMTUgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OgogCQkvKiBhZGQgU1BJTyA1IHRvIGdyb3VwIDAgKi8KLQkJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOworCQl7CisJCXUzMiByZWdfYWRkciA9IChwb3J0ID8gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18xX09VVF8wIDoKKwkJCQkgICAgICAgTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wKTsKKwkJdmFsID0gUkVHX1JEKGJwLCByZWdfYWRkcik7CiAJCXZhbCB8PSBBRVVfSU5QVVRTX0FUVE5fQklUU19TUElPNTsKLQkJUkVHX1dSKGJwLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzAsIHZhbCk7CisJCVJFR19XUihicCwgcmVnX2FkZHIsIHZhbCk7CisJCX0KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNjA1Nyw5ICs2NTExLDE1IEBACiAKIAogCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKLQkJCWJueDJ4X2luaXRfYmxvY2soYnAsCi0JCQkJCSBjbV9ibG9ja3NbaV0sIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIE1JU0NfQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFRDTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgVUNNX0JMT0NLLCBGVU5DMF9TVEFHRSArIGZ1bmMpOworCQlibngyeF9pbml0X2Jsb2NrKGJwLCBDQ01fQkxPQ0ssIEZVTkMwX1NUQUdFICsgZnVuYyk7CisJCWJueDJ4X2luaXRfYmxvY2soYnAsIFhDTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgVFNFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgVVNFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgQ1NFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKKwkJYm54MnhfaW5pdF9ibG9jayhicCwgWFNFTV9CTE9DSywgRlVOQzBfU1RBR0UgKyBmdW5jKTsKIAogCQlSRUdfV1IoYnAsIE5JR19SRUdfTExIMF9GVU5DX0VOICsgcG9ydCo4LCAxKTsKIAkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMSDBfRlVOQ19WTEFOX0lEICsgcG9ydCo4LCBicC0+ZTFob3YpOwpAQCAtNjA5MCw3ICs2NTUwLDkgQEAKIAogCWJwLT5kbWFlX3JlYWR5ID0gMDsKIAltdXRleF9pbml0KCZicC0+ZG1hZV9tdXRleCk7Ci0JYm54MnhfZ3VuemlwX2luaXQoYnApOworCXJjID0gYm54MnhfZ3VuemlwX2luaXQoYnApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJc3dpdGNoIChsb2FkX2NvZGUpIHsKIAljYXNlIEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTjoKQEAgLTYxMjQsMTEgKzY1ODYsOCBAQAogCQlicC0+ZndfZHJ2X3B1bHNlX3dyX3NlcSA9CiAJCQkJKFNITUVNX1JEKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9wdWxzZV9tYikgJgogCQkJCSBEUlZfUFVMU0VfU0VRX01BU0spOwotCQlicC0+ZnVuY19zdHggPSBTSE1FTV9SRChicCwgZnVuY19tYltmdW5jXS5md19tYl9wYXJhbSk7Ci0JCURQKEJOWDJYX01TR19NQ1AsICJkcnZfcHVsc2UgMHgleCAgZnVuY19zdHggMHgleFxuIiwKLQkJICAgYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEsIGJwLT5mdW5jX3N0eCk7Ci0JfSBlbHNlCi0JCWJwLT5mdW5jX3N0eCA9IDA7CisJCURQKEJOWDJYX01TR19NQ1AsICJkcnZfcHVsc2UgMHgleFxuIiwgYnAtPmZ3X2Rydl9wdWxzZV93cl9zZXEpOworCX0KIAogCS8qIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgZ3VuemlwIGVuZCAqLwogCWJueDJ4X3plcm9fZGVmX3NiKGJwKTsKQEAgLTYxNDEsNDQgKzY2MDAsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyogc2VuZCB0aGUgTUNQIGEgcmVxdWVzdCwgYmxvY2sgdW50aWwgdGhlcmUgaXMgYSByZXBseSAqLwotc3RhdGljIHUzMiBibngyeF9md19jb21tYW5kKHN0cnVjdCBibngyeCAqYnAsIHUzMiBjb21tYW5kKQotewotCWludCBmdW5jID0gQlBfRlVOQyhicCk7Ci0JdTMyIHNlcSA9ICsrYnAtPmZ3X3NlcTsKLQl1MzIgcmMgPSAwOwotCXUzMiBjbnQgPSAxOwotCXU4IGRlbGF5ID0gQ0hJUF9SRVZfSVNfU0xPVyhicCkgPyAxMDAgOiAxMDsKLQotCVNITUVNX1dSKGJwLCBmdW5jX21iW2Z1bmNdLmRydl9tYl9oZWFkZXIsIChjb21tYW5kIHwgc2VxKSk7Ci0JRFAoQk5YMlhfTVNHX01DUCwgIndyb3RlIGNvbW1hbmQgKCV4KSB0byBGVyBNQlxuIiwgKGNvbW1hbmQgfCBzZXEpKTsKLQotCWRvIHsKLQkJLyogbGV0IHRoZSBGVyBkbyBpdCdzIG1hZ2ljIC4uLiAqLwotCQltc2xlZXAoZGVsYXkpOwotCi0JCXJjID0gU0hNRU1fUkQoYnAsIGZ1bmNfbWJbZnVuY10uZndfbWJfaGVhZGVyKTsKLQotCQkvKiBHaXZlIHRoZSBGVyB1cCB0byAyIHNlY29uZCAoMjAwKjEwbXMpICovCi0JfSB3aGlsZSAoKHNlcSAhPSAocmMgJiBGV19NU0dfU0VRX05VTUJFUl9NQVNLKSkgJiYgKGNudCsrIDwgMjAwKSk7Ci0KLQlEUChCTlgyWF9NU0dfTUNQLCAiW2FmdGVyICVkIG1zXSByZWFkICgleCkgc2VxIGlzICgleCkgZnJvbSBGVyBNQlxuIiwKLQkgICBjbnQqZGVsYXksIHJjLCBzZXEpOwotCi0JLyogaXMgdGhpcyBhIHJlcGx5IHRvIG91ciBjb21tYW5kPyAqLwotCWlmIChzZXEgPT0gKHJjICYgRldfTVNHX1NFUV9OVU1CRVJfTUFTSykpIHsKLQkJcmMgJj0gRldfTVNHX0NPREVfTUFTSzsKLQotCX0gZWxzZSB7Ci0JCS8qIEZXIEJVRyEgKi8KLQkJQk5YMlhfRVJSKCJGVyBmYWlsZWQgdG8gcmVzcG9uZCFcbiIpOwotCQlibngyeF9md19kdW1wKGJwKTsKLQkJcmMgPSAwOwotCX0KLQotCXJldHVybiByYzsKLX0KLQogc3RhdGljIHZvaWQgYm54MnhfZnJlZV9tZW0oc3RydWN0IGJueDJ4ICpicCkKIHsKIApAQCAtNjIwOCw4ICs2NjI5LDcgQEAKIAkJLyogc3RhdHVzIGJsb2NrcyAqLwogCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsayksCiAJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKwotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSk7CiAJfQogCS8qIFJ4ICovCiAJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKQEAgLTYyMzgsNyArNjY1OCw3IEBACiAJCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSk7CiAJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAogCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJCQkgICAgICAgc2l6ZW9mKHVuaW9uIGV0aF90eF9iZF90eXBlcykgKiBOVU1fVFhfQkQpOwogCX0KIAkvKiBlbmQgb2YgZmFzdHBhdGggKi8KIApAQCAtNjI4OSw4ICs2NzA5LDcgQEAKIAkJLyogc3RhdHVzIGJsb2NrcyAqLwogCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGspLAogCQkJCSZibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSArCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfZGJfZGF0YSkpOworCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spKTsKIAl9CiAJLyogUnggKi8KIAlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewpAQCAtNjMxNywxOSArNjczNiwxMiBAQAogCS8qIFR4ICovCiAJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKIAotCQlibngyeF9mcChicCwgaSwgaHdfdHhfcHJvZHMpID0KLQkJCQkodm9pZCAqKShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsaykgKyAxKTsKLQotCQlibngyeF9mcChicCwgaSwgdHhfcHJvZHNfbWFwcGluZykgPQotCQkJCWJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpICsKLQkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKTsKLQogCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KIAkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSwKIAkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7CiAJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKIAkJCQkmYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCi0JCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKKwkJCQlzaXplb2YodW5pb24gZXRoX3R4X2JkX3R5cGVzKSAqIE5VTV9UWF9CRCk7CiAJfQogCS8qIGVuZCBvZiBmYXN0cGF0aCAqLwogCkBAIC02NTA2LDcgKzY5MTgsMTIgQEAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAotCQlzcHJpbnRmKGZwLT5uYW1lLCAiJXMuZnAlZCIsIGJwLT5kZXYtPm5hbWUsIGkpOworCQlpZiAoaSA8IGJwLT5udW1fcnhfcXVldWVzKQorCQkJc3ByaW50ZihmcC0+bmFtZSwgIiVzLXJ4LSVkIiwgYnAtPmRldi0+bmFtZSwgaSk7CisJCWVsc2UKKwkJCXNwcmludGYoZnAtPm5hbWUsICIlcy10eC0lZCIsCisJCQkJYnAtPmRldi0+bmFtZSwgaSAtIGJwLT5udW1fcnhfcXVldWVzKTsKKwogCQlyYyA9IHJlcXVlc3RfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwKIAkJCQkgYm54MnhfbXNpeF9mcF9pbnQsIDAsIGZwLT5uYW1lLCBmcCk7CiAJCWlmIChyYykgewpAQCAtNjUxOSwxNiArNjkzNiwxMSBAQAogCX0KIAogCWkgPSBCTlgyWF9OVU1fUVVFVUVTKGJwKTsKLQlpZiAoaXNfbXVsdGkoYnApKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkgICAgICAgIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwICVkIC0gJWRcbiIsCi0JCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCi0JCSAgICAgICBicC0+bXNpeF90YWJsZVtvZmZzZXRdLnZlY3RvciwKLQkJICAgICAgIGJwLT5tc2l4X3RhYmxlW29mZnNldCArIGkgLSAxXS52ZWN0b3IpOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwICVkXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPm1zaXhfdGFibGVbMF0udmVjdG9yLAotCQkgICAgICAgYnAtPm1zaXhfdGFibGVbb2Zmc2V0ICsgaSAtIDFdLnZlY3Rvcik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwWyVkXSAlZCIKKwkgICAgICAgIiAuLi4gZnBbJWRdICVkXG4iLAorCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCisJICAgICAgIDAsIGJwLT5tc2l4X3RhYmxlW29mZnNldF0udmVjdG9yLAorCSAgICAgICBpIC0gMSwgYnAtPm1zaXhfdGFibGVbb2Zmc2V0ICsgaSAtIDFdLnZlY3Rvcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1ODMsNyArNjk5NSwxMiBAQAogCiBzdGF0aWMgdm9pZCBibngyeF9uZXRpZl9zdGFydChzdHJ1Y3QgYm54MnggKmJwKQogewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZicC0+aW50cl9zZW0pKSB7CisJaW50IGludHJfc2VtOworCisJaW50cl9zZW0gPSBhdG9taWNfZGVjX2FuZF90ZXN0KCZicC0+aW50cl9zZW0pOworCXNtcF93bWIoKTsgLyogRW5zdXJlIHRoYXQgYnAtPmludHJfc2VtIHVwZGF0ZSBpcyBTTVAtc2FmZSAqLworCisJaWYgKGludHJfc2VtKSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKSB7CiAJCQlibngyeF9uYXBpX2VuYWJsZShicCk7CiAJCQlibngyeF9pbnRfZW5hYmxlKGJwKTsKQEAgLTY2MzEsNyArNzA0OCw4IEBACiAJCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLnRhcmdldF90YWJsZV9lbnRyeS5mbGFncyA9IDA7CiAJZWxzZQogCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVswXSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudF9pZCA9IDA7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0udGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudHNfYml0X3ZlY3RvciA9CisJCQkJCQljcHVfdG9fbGUzMigxIDw8IEJQX0xfSUQoYnApKTsKIAljb25maWctPmNvbmZpZ190YWJsZVswXS50YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7CiAKIAlEUChORVRJRl9NU0dfSUZVUCwgIiVzIE1BQyAoJTA0eDolMDR4OiUwNHgpXG4iLApAQCAtNjY1MCw3ICs3MDY4LDggQEAKIAkJCQlUU1RPUk1fQ0FNX1RBUkdFVF9UQUJMRV9FTlRSWV9CUk9BRENBU1Q7CiAJZWxzZQogCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVsxXSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudF9pZCA9IDA7CisJY29uZmlnLT5jb25maWdfdGFibGVbMV0udGFyZ2V0X3RhYmxlX2VudHJ5LmNsaWVudHNfYml0X3ZlY3RvciA9CisJCQkJCQljcHVfdG9fbGUzMigxIDw8IEJQX0xfSUQoYnApKTsKIAljb25maWctPmNvbmZpZ190YWJsZVsxXS50YXJnZXRfdGFibGVfZW50cnkudmxhbl9pZCA9IDA7CiAKIAlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9TRVRfTUFDLCAwLApAQCAtNjY2MywxMSArNzA4Miw2IEBACiAJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZF9lMWggKmNvbmZpZyA9CiAJCShzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kX2UxaCAqKWJueDJ4X3NwKGJwLCBtYWNfY29uZmlnKTsKIAotCWlmIChzZXQgJiYgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9PUEVOKSkgewotCQlEUChORVRJRl9NU0dfSUZVUCwgInN0YXRlIGlzICV4LCByZXR1cm5pbmdcbiIsIGJwLT5zdGF0ZSk7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKiBDQU0gYWxsb2NhdGlvbiBmb3IgRTFICiAJICogdW5pY2FzdHM6IGJ5IGZ1bmMgbnVtYmVyCiAJICogbXVsdGljYXN0OiAyMCtGVU5DKjIwLCAyMCBlYWNoCkBAIC02Njg0LDcgKzcwOTgsOCBAQAogCQkJCQlzd2FiMTYoKih1MTYgKikmYnAtPmRldi0+ZGV2X2FkZHJbMl0pOwogCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzBdLmxzYl9tYWNfYWRkciA9CiAJCQkJCXN3YWIxNigqKHUxNiAqKSZicC0+ZGV2LT5kZXZfYWRkcls0XSk7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2xpZW50X2lkID0gQlBfTF9JRChicCk7CisJY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2xpZW50c19iaXRfdmVjdG9yID0KKwkJCQkJY3B1X3RvX2xlMzIoMSA8PCBCUF9MX0lEKGJwKSk7CiAJY29uZmlnLT5jb25maWdfdGFibGVbMF0udmxhbl9pZCA9IDA7CiAJY29uZmlnLT5jb25maWdfdGFibGVbMF0uZTFob3ZfaWQgPSBjcHVfdG9fbGUxNihicC0+ZTFob3YpOwogCWlmIChzZXQpCkBAIC02NzM0LDYgKzcxNDksOSBAQAogCQl9CiAKIAkJbXNsZWVwKDEpOworCisJCWlmIChicC0+cGFuaWMpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiB0aW1lb3V0ISAqLwpAQCAtNjc4MSw2NyArNzE5OSwxMTEgQEAKIAogc3RhdGljIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiAKLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9pbnRfbW9kZShzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X2ludF9tb2RlX21zaXgoc3RydWN0IGJueDJ4ICpicCwgaW50ICpudW1fcnhfcXVldWVzX291dCwKKwkJCQkgICAgaW50ICpudW1fdHhfcXVldWVzX291dCkKIHsKLQlpbnQgbnVtX3F1ZXVlczsKKwlpbnQgX251bV9yeF9xdWV1ZXMgPSAwLCBfbnVtX3R4X3F1ZXVlcyA9IDA7CisKKwlzd2l0Y2ggKGJwLT5tdWx0aV9tb2RlKSB7CisJY2FzZSBFVEhfUlNTX01PREVfRElTQUJMRUQ6CisJCV9udW1fcnhfcXVldWVzID0gMTsKKwkJX251bV90eF9xdWV1ZXMgPSAxOworCQlicmVhazsKKworCWNhc2UgRVRIX1JTU19NT0RFX1JFR1VMQVI6CisJCWlmIChudW1fcnhfcXVldWVzKQorCQkJX251bV9yeF9xdWV1ZXMgPSBtaW5fdCh1MzIsIG51bV9yeF9xdWV1ZXMsCisJCQkJCSAgICAgICBCTlgyWF9NQVhfUVVFVUVTKGJwKSk7CisJCWVsc2UKKwkJCV9udW1fcnhfcXVldWVzID0gbWluX3QodTMyLCBudW1fb25saW5lX2NwdXMoKSwKKwkJCQkJICAgICAgIEJOWDJYX01BWF9RVUVVRVMoYnApKTsKKworCQlpZiAobnVtX3R4X3F1ZXVlcykKKwkJCV9udW1fdHhfcXVldWVzID0gbWluX3QodTMyLCBudW1fdHhfcXVldWVzLAorCQkJCQkgICAgICAgQk5YMlhfTUFYX1FVRVVFUyhicCkpOworCQllbHNlCisJCQlfbnVtX3R4X3F1ZXVlcyA9IG1pbl90KHUzMiwgbnVtX29ubGluZV9jcHVzKCksCisJCQkJCSAgICAgICBCTlgyWF9NQVhfUVVFVUVTKGJwKSk7CisKKwkJLyogVGhlcmUgbXVzdCBiZSBub3QgbW9yZSBUeCBxdWV1ZXMgdGhhbiBSeCBxdWV1ZXMgKi8KKwkJaWYgKF9udW1fdHhfcXVldWVzID4gX251bV9yeF9xdWV1ZXMpIHsKKwkJCUJOWDJYX0VSUigibnVtYmVyIG9mIHR4IHF1ZXVlcyAoJWQpID4gIgorCQkJCSAgIm51bWJlciBvZiByeCBxdWV1ZXMgKCVkKSIKKwkJCQkgICIgIGRlZmF1bHRpbmcgdG8gJWRcbiIsCisJCQkJICBfbnVtX3R4X3F1ZXVlcywgX251bV9yeF9xdWV1ZXMsCisJCQkJICBfbnVtX3J4X3F1ZXVlcyk7CisJCQlfbnVtX3R4X3F1ZXVlcyA9IF9udW1fcnhfcXVldWVzOworCQl9CisJCWJyZWFrOworCisKKwlkZWZhdWx0OgorCQlfbnVtX3J4X3F1ZXVlcyA9IDE7CisJCV9udW1fdHhfcXVldWVzID0gMTsKKwkJYnJlYWs7CisJfQorCisJKm51bV9yeF9xdWV1ZXNfb3V0ID0gX251bV9yeF9xdWV1ZXM7CisJKm51bV90eF9xdWV1ZXNfb3V0ID0gX251bV90eF9xdWV1ZXM7Cit9CisKK3N0YXRpYyBpbnQgYm54Mnhfc2V0X2ludF9tb2RlKHN0cnVjdCBibngyeCAqYnApCit7CisJaW50IHJjID0gMDsKIAogCXN3aXRjaCAoaW50X21vZGUpIHsKIAljYXNlIElOVF9NT0RFX0lOVHg6CiAJY2FzZSBJTlRfTU9ERV9NU0k6Ci0JCW51bV9xdWV1ZXMgPSAxOwotCQlicC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7Ci0JCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJzZXQgbnVtYmVyIG9mIHF1ZXVlcyB0byAlZFxuIiwgbnVtX3F1ZXVlcyk7CisJCWJwLT5udW1fcnhfcXVldWVzID0gMTsKKwkJYnAtPm51bV90eF9xdWV1ZXMgPSAxOworCQlEUChORVRJRl9NU0dfSUZVUCwgInNldCBudW1iZXIgb2YgcXVldWVzIHRvIDFcbiIpOwogCQlicmVhazsKIAogCWNhc2UgSU5UX01PREVfTVNJWDoKIAlkZWZhdWx0OgotCQlpZiAoYnAtPm11bHRpX21vZGUgPT0gRVRIX1JTU19NT0RFX1JFR1VMQVIpCi0JCQludW1fcXVldWVzID0gbWluX3QodTMyLCBudW1fb25saW5lX2NwdXMoKSwKLQkJCQkJICAgQk5YMlhfTUFYX1FVRVVFUyhicCkpOwotCQllbHNlCi0JCQludW1fcXVldWVzID0gMTsKLQkJYnAtPm51bV9yeF9xdWV1ZXMgPSBudW1fcXVldWVzOwotCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7Ci0JCURQKE5FVElGX01TR19JRlVQLCAic2V0IG51bWJlciBvZiByeCBxdWV1ZXMgdG8gJWQiCi0JCSAgICIgIG51bWJlciBvZiB0eCBxdWV1ZXMgdG8gJWRcbiIsCisJCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSBhY2NvcmRpbmcgdG8gYnAtPm11bHRpX21vZGUgdmFsdWUgKi8KKwkJYm54Mnhfc2V0X2ludF9tb2RlX21zaXgoYnAsICZicC0+bnVtX3J4X3F1ZXVlcywKKwkJCQkJJmJwLT5udW1fdHhfcXVldWVzKTsKKworCQlEUChORVRJRl9NU0dfSUZVUCwgInNldCBudW1iZXIgb2YgcXVldWVzIHRvOiByeCAlZCB0eCAlZFxuIiwKIAkJICAgYnAtPm51bV9yeF9xdWV1ZXMsIGJwLT5udW1fdHhfcXVldWVzKTsKKwogCQkvKiBpZiB3ZSBjYW4ndCB1c2UgTVNJLVggd2Ugb25seSBuZWVkIG9uZSBmcCwKIAkJICogc28gdHJ5IHRvIGVuYWJsZSBNU0ktWCB3aXRoIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGZwJ3MKIAkJICogYW5kIGZhbGxiYWNrIHRvIE1TSSBvciBsZWdhY3kgSU5UeCB3aXRoIG9uZSBmcAogCQkgKi8KLQkJaWYgKGJueDJ4X2VuYWJsZV9tc2l4KGJwKSkgeworCQlyYyA9IGJueDJ4X2VuYWJsZV9tc2l4KGJwKTsKKwkJaWYgKHJjKSB7CiAJCQkvKiBmYWlsZWQgdG8gZW5hYmxlIE1TSS1YICovCi0JCQludW1fcXVldWVzID0gMTsKLQkJCWJwLT5udW1fcnhfcXVldWVzID0gbnVtX3F1ZXVlczsKLQkJCWJwLT5udW1fdHhfcXVldWVzID0gbnVtX3F1ZXVlczsKIAkJCWlmIChicC0+bXVsdGlfbW9kZSkKIAkJCQlCTlgyWF9FUlIoIk11bHRpIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvICIKLQkJCQkJICAiZW5hYmxlIE1TSS1YICBzZXQgbnVtYmVyIG9mICIKLQkJCQkJICAicXVldWVzIHRvICVkXG4iLCBudW1fcXVldWVzKTsKKwkJCQkJICAiZW5hYmxlIE1TSS1YIChyeCAlZCB0eCAlZCksICIKKwkJCQkJICAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gMVxuIiwKKwkJCQkJICBicC0+bnVtX3J4X3F1ZXVlcywgYnAtPm51bV90eF9xdWV1ZXMpOworCQkJYnAtPm51bV9yeF9xdWV1ZXMgPSAxOworCQkJYnAtPm51bV90eF9xdWV1ZXMgPSAxOwogCQl9CiAJCWJyZWFrOwogCX0KIAlicC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBicC0+bnVtX3R4X3F1ZXVlczsKKwlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLwogc3RhdGljIGludCBibngyeF9uaWNfbG9hZChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgbG9hZF9tb2RlKQogewogCXUzMiBsb2FkX2NvZGU7Ci0JaW50IGksIHJjID0gMDsKKwlpbnQgaSwgcmM7CisKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JRFAoTkVUSUZfTVNHX0lGVVAsICJlbnRlciAgbG9hZF9tb2RlICVkXG4iLCBsb2FkX21vZGUpOwogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQogCQlyZXR1cm4gLUVQRVJNOwogI2VuZGlmCiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9PUEVOSU5HX1dBSVQ0X0xPQUQ7CiAKLQlibngyeF9zZXRfaW50X21vZGUoYnApOworCXJjID0gYm54Mnhfc2V0X2ludF9tb2RlKGJwKTsKIAogCWlmIChibngyeF9hbGxvY19tZW0oYnApKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY4NTQsMTcgKzczMTYsNiBAQAogCQluZXRpZl9uYXBpX2FkZChicC0+ZGV2LCAmYm54MnhfZnAoYnAsIGksIG5hcGkpLAogCQkJICAgICAgIGJueDJ4X3BvbGwsIDEyOCk7CiAKLSNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCi0JZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKLQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07Ci0KLQkJZnAtPnBvbGxfbm9fd29yayA9IDA7Ci0JCWZwLT5wb2xsX2NhbGxzID0gMDsKLQkJZnAtPnBvbGxfbWF4X2NhbGxzID0gMDsKLQkJZnAtPnBvbGxfY29tcGxldGUgPSAwOwotCQlmcC0+cG9sbF9leGl0ID0gMDsKLQl9Ci0jZW5kaWYKIAlibngyeF9uYXBpX2VuYWJsZShicCk7CiAKIAlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSB7CkBAIC02ODc0LDYgKzczMjUsOCBAQAogCQkJZ290byBsb2FkX2Vycm9yMTsKIAkJfQogCX0gZWxzZSB7CisJCS8qIEZhbGwgdG8gSU5UeCBpZiBmYWlsZWQgdG8gZW5hYmxlIE1TSS1YIGR1ZSB0byBsYWNrIG9mCisJCSAgIG1lbW9yeSAoaW4gYm54Mnhfc2V0X2ludF9tb2RlKCkpICovCiAJCWlmICgocmMgIT0gLUVOT01FTSkgJiYgKGludF9tb2RlICE9IElOVF9NT0RFX0lOVHgpKQogCQkJYm54MnhfZW5hYmxlX21zaShicCk7CiAJCWJueDJ4X2Fja19pbnQoYnApOwpAQCAtNjk0Miw2ICs3Mzk1LDEyIEBACiAJLyogU2V0dXAgTklDIGludGVybmFscyBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KIAlibngyeF9uaWNfaW5pdChicCwgbG9hZF9jb2RlKTsKIAorCWlmICgobG9hZF9jb2RlID09IEZXX01TR19DT0RFX0RSVl9MT0FEX0NPTU1PTikgJiYKKwkgICAgKGJwLT5jb21tb24uc2htZW0yX2Jhc2UpKQorCQlTSE1FTTJfV1IoYnAsIGRjY19zdXBwb3J0LAorCQkJICAoU0hNRU1fRENDX1NVUFBPUlRfRElTQUJMRV9FTkFCTEVfUEZfVExWIHwKKwkJCSAgIFNITUVNX0RDQ19TVVBQT1JUX0JBTkRXSURUSF9BTExPQ0FUSU9OX1RMVikpOworCiAJLyogU2VuZCBMT0FEX0RPTkUgY29tbWFuZCB0byBNQ1AgKi8KIAlpZiAoIUJQX05PTUNQKGJwKSkgewogCQlsb2FkX2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfTE9BRF9ET05FKTsKQEAgLTY5NTcsNyArNzQxNiwxMiBAQAogCXJjID0gYm54Mnhfc2V0dXBfbGVhZGluZyhicCk7CiAJaWYgKHJjKSB7CiAJCUJOWDJYX0VSUigiU2V0dXAgbGVhZGluZyBmYWlsZWQhXG4iKTsKKyNpZm5kZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCQlnb3RvIGxvYWRfZXJyb3IzOworI2Vsc2UKKwkJYnAtPnBhbmljID0gMTsKKwkJcmV0dXJuIC1FQlVTWTsKKyNlbmRpZgogCX0KIAogCWlmIChDSElQX0lTX0UxSChicCkpCkBAIC02OTY2LDE3ICs3NDMwLDE4IEBACiAJCQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9ESVNBQkxFRDsKIAkJfQogCi0JaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQorCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgewogCQlmb3JfZWFjaF9ub25kZWZhdWx0X3F1ZXVlKGJwLCBpKSB7CiAJCQlyYyA9IGJueDJ4X3NldHVwX211bHRpKGJwLCBpKTsKIAkJCWlmIChyYykKIAkJCQlnb3RvIGxvYWRfZXJyb3IzOwogCQl9CiAKLQlpZiAoQ0hJUF9JU19FMShicCkpCi0JCWJueDJ4X3NldF9tYWNfYWRkcl9lMShicCwgMSk7Ci0JZWxzZQotCQlibngyeF9zZXRfbWFjX2FkZHJfZTFoKGJwLCAxKTsKKwkJaWYgKENISVBfSVNfRTEoYnApKQorCQkJYm54Mnhfc2V0X21hY19hZGRyX2UxKGJwLCAxKTsKKwkJZWxzZQorCQkJYm54Mnhfc2V0X21hY19hZGRyX2UxaChicCwgMSk7CisJfQogCiAJaWYgKGJwLT5wb3J0LnBtZikKIAkJYm54MnhfaW5pdGlhbF9waHlfaW5pdChicCwgbG9hZF9tb2RlKTsKQEAgLTY5ODQsMTQgKzc0NDksMTggQEAKIAkvKiBTdGFydCBmYXN0IHBhdGggKi8KIAlzd2l0Y2ggKGxvYWRfbW9kZSkgewogCWNhc2UgTE9BRF9OT1JNQUw6Ci0JCS8qIFR4IHF1ZXVlIHNob3VsZCBiZSBvbmx5IHJlZW5hYmxlZCAqLwotCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CisJCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgeworCQkJLyogVHggcXVldWUgc2hvdWxkIGJlIG9ubHkgcmVlbmFibGVkICovCisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CisJCX0KIAkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBmaWx0ZXIuICovCiAJCWJueDJ4X3NldF9yeF9tb2RlKGJwLT5kZXYpOwogCQlicmVhazsKIAogCWNhc2UgTE9BRF9PUEVOOgogCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGJwLT5kZXYpOworCQlpZiAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX09QRU4pCisJCQluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOwogCQkvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGZpbHRlci4gKi8KIAkJYm54Mnhfc2V0X3J4X21vZGUoYnAtPmRldik7CiAJCWJyZWFrOwpAQCAtNzE5MCw5ICs3NjU5LDExIEBACiAKIAlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9DTE9TSU5HX1dBSVQ0X0hBTFQ7CiAKKwkvKiBTZXQgImRyb3AgYWxsIiAqLwogCWJwLT5yeF9tb2RlID0gQk5YMlhfUlhfTU9ERV9OT05FOwogCWJueDJ4X3NldF9zdG9ybV9yeF9tb2RlKGJwKTsKIAorCS8qIERpc2FibGUgSFcgaW50ZXJydXB0cywgTkFQSSBhbmQgVHggKi8KIAlibngyeF9uZXRpZl9zdG9wKGJwLCAxKTsKIAogCWRlbF90aW1lcl9zeW5jKCZicC0+dGltZXIpOwpAQCAtNzI1NiwxNyArNzcyNywxNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBNQ19IQVNIX1NJWkU7IGkrKykKIAkJCVJFR19XUihicCwgTUNfSEFTSF9PRkZTRVQoYnAsIGkpLCAwKTsKKworCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0UxSE1GX01PREUsIDApOwogCX0KIAogCWlmICh1bmxvYWRfbW9kZSA9PSBVTkxPQURfTk9STUFMKQogCQlyZXNldF9jb2RlID0gRFJWX01TR19DT0RFX1VOTE9BRF9SRVFfV09MX0RJUzsKIAotCWVsc2UgaWYgKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSB7CisJZWxzZSBpZiAoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpCiAJCXJlc2V0X2NvZGUgPSBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfTUNQOwotCQlpZiAoQ0hJUF9JU19FMUgoYnApKQotCQkJUkVHX1dSKGJwLCBNSVNDX1JFR19FMUhNRl9NT0RFLCAwKTsKIAotCX0gZWxzZSBpZiAoYnAtPndvbCkgeworCWVsc2UgaWYgKGJwLT53b2wpIHsKIAkJdTMyIGVtYWNfYmFzZSA9IHBvcnQgPyBHUkNCQVNFX0VNQUMxIDogR1JDQkFTRV9FTUFDMDsKIAkJdTggKm1hY19hZGRyID0gYnAtPmRldi0+ZGV2X2FkZHI7CiAJCXUzMiB2YWw7CkBAIC03NTY5LDggKzgwNDAsMTAgQEAKIAkJICAgICAgIGJwLT5jb21tb24uZmxhc2hfc2l6ZSwgYnAtPmNvbW1vbi5mbGFzaF9zaXplKTsKIAogCWJwLT5jb21tb24uc2htZW1fYmFzZSA9IFJFR19SRChicCwgTUlTQ19SRUdfU0hBUkVEX01FTV9BRERSKTsKKwlicC0+Y29tbW9uLnNobWVtMl9iYXNlID0gUkVHX1JEKGJwLCBNSVNDX1JFR19HRU5FUklDX0NSXzApOwogCWJwLT5saW5rX3BhcmFtcy5zaG1lbV9iYXNlID0gYnAtPmNvbW1vbi5zaG1lbV9iYXNlOwotCUJOWDJYX0RFVl9JTkZPKCJzaG1lbSBvZmZzZXQgaXMgMHgleFxuIiwgYnAtPmNvbW1vbi5zaG1lbV9iYXNlKTsKKwlCTlgyWF9ERVZfSU5GTygic2htZW0gb2Zmc2V0IDB4JXggIHNobWVtMiBvZmZzZXQgMHgleFxuIiwKKwkJICAgICAgIGJwLT5jb21tb24uc2htZW1fYmFzZSwgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7CiAKIAlpZiAoIWJwLT5jb21tb24uc2htZW1fYmFzZSB8fAogCSAgICAoYnAtPmNvbW1vbi5zaG1lbV9iYXNlIDwgMHhBMDAwMCkgfHwKQEAgLTc2MTAsNiArODA4Myw5IEBACiAJCUJOWDJYX0VSUigiVGhpcyBkcml2ZXIgbmVlZHMgYmNfdmVyICVYIGJ1dCBmb3VuZCAlWCwiCiAJCQkgICIgcGxlYXNlIHVwZ3JhZGUgQkNcbiIsIEJOWDJYX0JDX1ZFUiwgdmFsKTsKIAl9CisJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCSh2YWwgPj0gUkVRX0JDX1ZFUl80X1ZSRllfT1BUX01ETCkgPworCQlGRUFUVVJFX0NPTkZJR19CQ19TVVBQT1JUU19PUFRfTURMX1ZSRlkgOiAwOwogCiAJaWYgKEJQX0UxSFZOKGJwKSA9PSAwKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGJwLT5wZGV2LCBicC0+cG1fY2FwICsgUENJX1BNX1BNQywgJnBtYyk7CkBAIC03NzcwLDYgKzgyNDYsMTggQEAKIAkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcyNylcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0F1dG9uZWcgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CiAJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKFNGWDcxMDEpXG4iLAogCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwpAQCAtODAyNCw2ICs4NTEyLDcgQEAKIAl1MzIgdmFsLCB2YWwyOwogCXUzMiBjb25maWc7CiAJdTE2IGk7CisJdTMyIGV4dF9waHlfdHlwZTsKIAogCWJwLT5saW5rX3BhcmFtcy5icCA9IGJwOwogCWJwLT5saW5rX3BhcmFtcy5wb3J0ID0gcG9ydDsKQEAgLTgwMzMsNiArODUyMiwxNyBAQAogCWJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyA9CiAJCVNITUVNX1JEKGJwLAogCQkJIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmV4dGVybmFsX3BoeV9jb25maWcpOworCS8qIEJDTTg3MjdfTk9DID0+IEJDTTg3Mjcgbm8gb3ZlciBjdXJyZW50ICovCisJaWYgKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykgPT0KKwkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyN19OT0MpIHsKKwkJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnICY9CisJCQl+UE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTUFTSzsKKwkJYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnIHw9CisJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI3OworCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgfD0KKwkJCUZFQVRVUkVfQ09ORklHX0JDTTg3MjdfTk9DOworCX0KKwogCWJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzayA9CiAJCVNITUVNX1JEKGJwLAogCQkJIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLnNwZWVkX2NhcGFiaWxpdHlfbWFzayk7CkBAIC04MDUzLDE3ICs4NTUzLDEwIEBACiAJCWJwLT5saW5rX3BhcmFtcy54Z3hzX2NvbmZpZ190eFsoaSA8PCAxKSArIDFdID0gKHZhbCAmIDB4ZmZmZik7CiAJfQogCi0JY29uZmlnID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0uY29uZmlnKTsKLQlpZiAoY29uZmlnICYgUE9SVF9GRUFUX0NGR19PUFRfTURMX0VORlJDTU5UX0VOQUJMRUQpCi0JCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyB8PQotCQkJCUZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQ7Ci0JZWxzZQotCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgJj0KLQkJCQl+RkVBVFVSRV9DT05GSUdfTU9EVUxFX0VORk9SQ01FTlRfRU5BQkxFRDsKLQogCS8qIElmIHRoZSBkZXZpY2UgaXMgY2FwYWJsZSBvZiBXb0wsIHNldCB0aGUgZGVmYXVsdCBzdGF0ZSBhY2NvcmRpbmcKIAkgKiB0byB0aGUgSFcKIAkgKi8KKwljb25maWcgPSBTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9mZWF0dXJlX2NvbmZpZ1twb3J0XS5jb25maWcpOwogCWJwLT53b2wgPSAoIShicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgJiYKIAkJICAgKGNvbmZpZyAmIFBPUlRfRkVBVFVSRV9XT0xfRU5BQkxFRCkpOwogCkBAIC04MDczLDEyICs4NTY2LDI1IEBACiAJCSAgICAgICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcsCiAJCSAgICAgICBicC0+bGlua19wYXJhbXMuc3BlZWRfY2FwX21hc2ssIGJwLT5wb3J0LmxpbmtfY29uZmlnKTsKIAotCWJwLT5saW5rX3BhcmFtcy5zd2l0Y2hfY2ZnID0gKGJwLT5wb3J0LmxpbmtfY29uZmlnICYKLQkJCQkgICAgICBQT1JUX0ZFQVRVUkVfQ09OTkVDVEVEX1NXSVRDSF9NQVNLKTsKKwlicC0+bGlua19wYXJhbXMuc3dpdGNoX2NmZyB8PSAoYnAtPnBvcnQubGlua19jb25maWcgJgorCQkJCSAgICAgICBQT1JUX0ZFQVRVUkVfQ09OTkVDVEVEX1NXSVRDSF9NQVNLKTsKIAlibngyeF9saW5rX3NldHRpbmdzX3N1cHBvcnRlZChicCwgYnAtPmxpbmtfcGFyYW1zLnN3aXRjaF9jZmcpOwogCiAJYm54MnhfbGlua19zZXR0aW5nc19yZXF1ZXN0ZWQoYnApOwogCisJLyoKKwkgKiBJZiBjb25uZWN0ZWQgZGlyZWN0bHksIHdvcmsgd2l0aCB0aGUgaW50ZXJuYWwgUEhZLCBvdGhlcndpc2UsIHdvcmsKKwkgKiB3aXRoIHRoZSBleHRlcm5hbCBQSFkKKwkgKi8KKwlleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCWlmIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKQorCQlicC0+bWRpby5wcnRhZCA9IGJwLT5saW5rX3BhcmFtcy5waHlfYWRkcjsKKworCWVsc2UgaWYgKChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRkFJTFVSRSkgJiYKKwkJIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKQorCQlicC0+bWRpby5wcnRhZCA9CisJCQlYR1hTX0VYVF9QSFlfQUREUihicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOworCiAJdmFsMiA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5tYWNfdXBwZXIpOwogCXZhbCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2h3X2NvbmZpZ1twb3J0XS5tYWNfbG93ZXIpOwogCWJwLT5kZXYtPmRldl9hZGRyWzBdID0gKHU4KSh2YWwyID4+IDggJiAweGZmKTsKQEAgLTgxMDUsMjIgKzg2MTEsMzMgQEAKIAkJYnAtPm1mX2NvbmZpZyA9CiAJCQlTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW2Z1bmNdLmNvbmZpZyk7CiAKLQkJdmFsID0gKFNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uZTFob3ZfdGFnKSAmCisJCXZhbCA9IChTSE1FTV9SRChicCwgbWZfY2ZnLmZ1bmNfbWZfY29uZmlnW0ZVTkNfMF0uZTFob3ZfdGFnKSAmCiAJCSAgICAgICBGVU5DX01GX0NGR19FMUhPVl9UQUdfTUFTSyk7Ci0JCWlmICh2YWwgIT0gRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX0RFRkFVTFQpIHsKLQotCQkJYnAtPmUxaG92ID0gdmFsOworCQlpZiAodmFsICE9IEZVTkNfTUZfQ0ZHX0UxSE9WX1RBR19ERUZBVUxUKQogCQkJYnAtPmUxaG1mID0gMTsKLQkJCUJOWDJYX0RFVl9JTkZPKCJNRiBtb2RlICBFMUhPViBmb3IgZnVuYyAlZCBpcyAlZCAiCi0JCQkJICAgICAgICIoMHglMDR4KVxuIiwKLQkJCQkgICAgICAgZnVuYywgYnAtPmUxaG92LCBicC0+ZTFob3YpOwotCQl9IGVsc2UgewotCQkJQk5YMlhfREVWX0lORk8oInNpbmdsZSBmdW5jdGlvbiBtb2RlXG4iKTsKLQkJCWlmIChCUF9FMUhWTihicCkpIHsKKwkJQk5YMlhfREVWX0lORk8oIiVzIGZ1bmN0aW9uIG1vZGVcbiIsCisJCQkgICAgICAgSVNfRTFITUYoYnApID8gIm11bHRpIiA6ICJzaW5nbGUiKTsKKworCQlpZiAoSVNfRTFITUYoYnApKSB7CisJCQl2YWwgPSAoU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1tmdW5jXS4KKwkJCQkJCQkJZTFob3ZfdGFnKSAmCisJCQkgICAgICAgRlVOQ19NRl9DRkdfRTFIT1ZfVEFHX01BU0spOworCQkJaWYgKHZhbCAhPSBGVU5DX01GX0NGR19FMUhPVl9UQUdfREVGQVVMVCkgeworCQkJCWJwLT5lMWhvdiA9IHZhbDsKKwkJCQlCTlgyWF9ERVZfSU5GTygiRTFIT1YgZm9yIGZ1bmMgJWQgaXMgJWQgIgorCQkJCQkgICAgICAgIigweCUwNHgpXG4iLAorCQkJCQkgICAgICAgZnVuYywgYnAtPmUxaG92LCBicC0+ZTFob3YpOworCQkJfSBlbHNlIHsKIAkJCQlCTlgyWF9FUlIoIiEhISAgTm8gdmFsaWQgRTFIT1YgZm9yIGZ1bmMgJWQsIgogCQkJCQkgICIgIGFib3J0aW5nXG4iLCBmdW5jKTsKIAkJCQlyYyA9IC1FUEVSTTsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChCUF9FMUhWTihicCkpIHsKKwkJCQlCTlgyWF9FUlIoIiEhISAgVk4gJWQgaW4gc2luZ2xlIGZ1bmN0aW9uIG1vZGUsIgorCQkJCQkgICIgIGFib3J0aW5nXG4iLCBCUF9FMUhWTihicCkpOworCQkJCXJjID0gLUVQRVJNOworCQkJfQogCQl9CiAJfQogCkBAIC04MTcwLDYgKzg2ODcsNyBAQAogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgdW50aWwgSFcgaXMgaW5pdGlhbGl6ZWQgKi8KIAlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDEpOworCXNtcF93bWIoKTsgLyogRW5zdXJlIHRoYXQgYnAtPmludHJfc2VtIHVwZGF0ZSBpcyBTTVAtc2FmZSAqLwogCiAJbXV0ZXhfaW5pdCgmYnAtPnBvcnQucGh5X211dGV4KTsKIApAQCAtODIwOCw2ICs4NzI2LDExIEBACiAJCWJwLT5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOwogCX0KIAorCWlmIChDSElQX0lTX0UxKGJwKSkKKwkJYnAtPmRyb3BsZXNzX2ZjID0gMDsKKwllbHNlCisJCWJwLT5kcm9wbGVzc19mYyA9IGRyb3BsZXNzX2ZjOworCiAJYnAtPm1ycnMgPSBtcnJzOwogCiAJYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9BVkFJTDsKQEAgLTgyNjksNiArODc5Miw3IEBACiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNzoKIAkJCWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CiAJCQlicmVhazsKIApAQCAtODI5MCw3ICs4ODE0LDcgQEAKIAl9IGVsc2UKIAkJY21kLT5wb3J0ID0gUE9SVF9UUDsKIAotCWNtZC0+cGh5X2FkZHJlc3MgPSBicC0+cG9ydC5waHlfYWRkcjsKKwljbWQtPnBoeV9hZGRyZXNzID0gYnAtPm1kaW8ucHJ0YWQ7CiAJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAKIAlpZiAoYnAtPmxpbmtfcGFyYW1zLnJlcV9saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKQpAQCAtODQ2Myw1MCArODk4NywxNSBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFBIWV9GV19WRVJfTEVOCQkJMTAKLQotc3RhdGljIHZvaWQgYm54MnhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCi17Ci0Jc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTggcGh5X2Z3X3ZlcltQSFlfRldfVkVSX0xFTl07Ci0KLQlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTU9EVUxFX05BTUUpOwotCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfTU9EVUxFX1ZFUlNJT04pOwotCi0JcGh5X2Z3X3ZlclswXSA9ICdcMCc7Ci0JaWYgKGJwLT5wb3J0LnBtZikgewotCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJYm54MnhfZ2V0X2V4dF9waHlfZndfdmVyc2lvbigmYnAtPmxpbmtfcGFyYW1zLAotCQkJCQkgICAgIChicC0+c3RhdGUgIT0gQk5YMlhfU1RBVEVfQ0xPU0VEKSwKLQkJCQkJICAgICBwaHlfZndfdmVyLCBQSFlfRldfVkVSX0xFTik7Ci0JCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwotCX0KLQotCXNucHJpbnRmKGluZm8tPmZ3X3ZlcnNpb24sIDMyLCAiQkM6JWQuJWQuJWQlcyVzIiwKLQkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYwMDAwKSA+PiAxNiwKLQkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYwMCkgPj4gOCwKLQkJIChicC0+Y29tbW9uLmJjX3ZlciAmIDB4ZmYpLAotCQkgKChwaHlfZndfdmVyWzBdICE9ICdcMCcpID8gIiBQSFk6IiA6ICIiKSwgcGh5X2Z3X3Zlcik7Ci0Jc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShicC0+cGRldikpOwotCWluZm8tPm5fc3RhdHMgPSBCTlgyWF9OVU1fU1RBVFM7Ci0JaW5mby0+dGVzdGluZm9fbGVuID0gQk5YMlhfTlVNX1RFU1RTOwotCWluZm8tPmVlZHVtcF9sZW4gPSBicC0+Y29tbW9uLmZsYXNoX3NpemU7Ci0JaW5mby0+cmVnZHVtcF9sZW4gPSAwOwotfQotCiAjZGVmaW5lIElTX0UxX09OTElORShpbmZvKQkoKChpbmZvKSAmIFJJX0UxX09OTElORSkgPT0gUklfRTFfT05MSU5FKQogI2RlZmluZSBJU19FMUhfT05MSU5FKGluZm8pCSgoKGluZm8pICYgUklfRTFIX09OTElORSkgPT0gUklfRTFIX09OTElORSkKIAogc3RhdGljIGludCBibngyeF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdGF0aWMgdTMyIHJlZ2R1bXBfbGVuOwogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZWdkdW1wX2xlbiA9IDA7CiAJaW50IGk7CiAKLQlpZiAocmVnZHVtcF9sZW4pCi0JCXJldHVybiByZWdkdW1wX2xlbjsKLQogCWlmIChDSElQX0lTX0UxKGJwKSkgewogCQlmb3IgKGkgPSAwOyBpIDwgUkVHU19DT1VOVDsgaSsrKQogCQkJaWYgKElTX0UxX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCkBAIC04NTczLDYgKzkwNjIsMzggQEAKIAl9CiB9CiAKKyNkZWZpbmUgUEhZX0ZXX1ZFUl9MRU4JCQkxMAorCitzdGF0aWMgdm9pZCBibngyeF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBwaHlfZndfdmVyW1BIWV9GV19WRVJfTEVOXTsKKworCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9NT0RVTEVfVkVSU0lPTik7CisKKwlwaHlfZndfdmVyWzBdID0gJ1wwJzsKKwlpZiAoYnAtPnBvcnQucG1mKSB7CisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlibngyeF9nZXRfZXh0X3BoeV9md192ZXJzaW9uKCZicC0+bGlua19wYXJhbXMsCisJCQkJCSAgICAgKGJwLT5zdGF0ZSAhPSBCTlgyWF9TVEFURV9DTE9TRUQpLAorCQkJCQkgICAgIHBoeV9md192ZXIsIFBIWV9GV19WRVJfTEVOKTsKKwkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJfQorCisJc25wcmludGYoaW5mby0+ZndfdmVyc2lvbiwgMzIsICJCQzolZC4lZC4lZCVzJXMiLAorCQkgKGJwLT5jb21tb24uYmNfdmVyICYgMHhmZjAwMDApID4+IDE2LAorCQkgKGJwLT5jb21tb24uYmNfdmVyICYgMHhmZjAwKSA+PiA4LAorCQkgKGJwLT5jb21tb24uYmNfdmVyICYgMHhmZiksCisJCSAoKHBoeV9md192ZXJbMF0gIT0gJ1wwJykgPyAiIFBIWToiIDogIiIpLCBwaHlfZndfdmVyKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGJwLT5wZGV2KSk7CisJaW5mby0+bl9zdGF0cyA9IEJOWDJYX05VTV9TVEFUUzsKKwlpbmZvLT50ZXN0aW5mb19sZW4gPSBCTlgyWF9OVU1fVEVTVFM7CisJaW5mby0+ZWVkdW1wX2xlbiA9IGJwLT5jb21tb24uZmxhc2hfc2l6ZTsKKwlpbmZvLT5yZWdkdW1wX2xlbiA9IGJueDJ4X2dldF9yZWdzX2xlbihkZXYpOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTg2MzgsOCArOTE1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIKLWJueDJ4X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdTMyIGJueDJ4X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTkwMTMsNyArOTUzMyw4IEBACiAJCQkgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICplZWJ1ZikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmM7CisJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwlpbnQgcmMgPSAwOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtOTAyNSwyNyArOTU0Niw2MCBAQAogCiAJLyogcGFyYW1ldGVycyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBldGh0b29sX3NldF9lZXByb20gKi8KIAotCS8qIElmIHRoZSBtYWdpYyBudW1iZXIgaXMgUEhZICgweDAwNTA0ODU5KSB1cGdyYWRlIHRoZSBQSFkgRlcgKi8KLQlpZiAoZWVwcm9tLT5tYWdpYyA9PSAweDAwNTA0ODU5KQotCQlpZiAoYnAtPnBvcnQucG1mKSB7CisJLyogUEhZIGVlcHJvbSBjYW4gYmUgYWNjZXNzZWQgb25seSBieSB0aGUgUE1GICovCisJaWYgKChlZXByb20tPm1hZ2ljID49IDB4NTA0ODU5MDApICYmIChlZXByb20tPm1hZ2ljIDw9IDB4NTA0ODU5RkYpICYmCisJICAgICFicC0+cG9ydC5wbWYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVlcHJvbS0+bWFnaWMgPT0gMHg1MDQ4NTk1MCkgeworCQkvKiAnUEhZUCcgKDB4NTA0ODU5NTApOiBwcmVwYXJlIHBoeSBmb3IgRlcgdXBncmFkZSAqLworCQlibngyeF9zdGF0c19oYW5kbGUoYnAsIFNUQVRTX0VWRU5UX1NUT1ApOworCisJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQlyYyB8PSBibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsCisJCQkJICAgICAgICZicC0+bGlua192YXJzLCAwKTsKKwkJaWYgKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykgPT0KKwkJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMSkKKwkJCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwgcG9ydCk7CisJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCQlibngyeF9saW5rX3JlcG9ydChicCk7CisKKwl9IGVsc2UgaWYgKGVlcHJvbS0+bWFnaWMgPT0gMHg1MDQ4NTk1MikgeworCQkvKiAnUEhZUicgKDB4NTA0ODU5NTIpOiByZS1pbml0IGxpbmsgYWZ0ZXIgRlcgdXBncmFkZSAqLworCQlpZiAoKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKSB8fAorCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9ESVNBQkxFRCkpIHsKKwkJCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCQkJcmMgfD0gYm54MnhfbGlua19yZXNldCgmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkgICAgICAgJmJwLT5saW5rX3ZhcnMsIDEpOworCisJCQlyYyB8PSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLAorCQkJCQkgICAgICZicC0+bGlua192YXJzKTsKKwkJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOworCQkJYm54MnhfY2FsY19mY19hZHYoYnApOworCQl9CisJfSBlbHNlIGlmIChlZXByb20tPm1hZ2ljID09IDB4NTM5ODU5NDMpIHsKKwkJLyogJ1BIWUMnICgweDUzOTg1OTQzKTogUEhZIEZXIHVwZ3JhZGUgY29tcGxldGVkICovCisJCWlmIChYR1hTX0VYVF9QSFlfVFlQRShicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpID09CisJCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDEpIHsKKwkJCXU4IGV4dF9waHlfYWRkciA9CisJCQkgICAgIFhHWFNfRVhUX1BIWV9BRERSKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CisKKwkJCS8qIERTUCBSZW1vdmUgRG93bmxvYWQgTW9kZSAqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMCwKKwkJCQkgICAgICAgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1csIHBvcnQpOwogCiAJCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKLQkJCXJjID0gYm54MnhfZmxhc2hfZG93bmxvYWQoYnAsIEJQX1BPUlQoYnApLAotCQkJCQkgICAgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZywKLQkJCQkJICAgICAoYnAtPnN0YXRlICE9IEJOWDJYX1NUQVRFX0NMT1NFRCksCi0JCQkJCSAgICAgZWVidWYsIGVlcHJvbS0+bGVuKTsKLQkJCWlmICgoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pIHx8Ci0JCQkgICAgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9ESVNBQkxFRCkpIHsKLQkJCQlyYyB8PSBibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsCi0JCQkJCQkgICAgICAgJmJwLT5saW5rX3ZhcnMsIDEpOwotCQkJCXJjIHw9IGJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsCi0JCQkJCQkgICAgICZicC0+bGlua192YXJzKTsKLQkJCX0KLQkJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwogCi0JCX0gZWxzZSAvKiBPbmx5IHRoZSBQTUYgY2FuIGFjY2VzcyB0aGUgUEhZICovCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlCisJCQlibngyeF9zZng3MTAxX3NwX3N3X3Jlc2V0KGJwLCBwb3J0LCBleHRfcGh5X2FkZHIpOworCisJCQkvKiB3YWl0IDAuNSBzZWMgdG8gYWxsb3cgaXQgdG8gcnVuICovCisJCQltc2xlZXAoNTAwKTsKKwkJCWJueDJ4X2V4dF9waHlfaHdfcmVzZXQoYnAsIHBvcnQpOworCQkJbXNsZWVwKDUwMCk7CisJCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwkJfQorCX0gZWxzZQogCQlyYyA9IGJueDJ4X252cmFtX3dyaXRlKGJwLCBlZXByb20tPm9mZnNldCwgZWVidWYsIGVlcHJvbS0+bGVuKTsKIAogCXJldHVybiByYzsKQEAgLTkwNjQsMTggKzk2MTgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBCTlgyWF9NQVhfQ09BTEVTX1RPVVQgICgweGYwKjEyKSAvKiBNYXhpbWFsIGNvYWxlc2NpbmcgdGltZW91dCBpbiB1cyAqLwogc3RhdGljIGludCBibngyeF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJYnAtPnJ4X3RpY2tzID0gKHUxNikgY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7Ci0JaWYgKGJwLT5yeF90aWNrcyA+IEJOWDJYX01BWF9DT0FMRVNDRV9UT1VUKQotCQlicC0+cnhfdGlja3MgPSBCTlgyWF9NQVhfQ09BTEVTQ0VfVE9VVDsKKwlpZiAoYnAtPnJ4X3RpY2tzID4gQk5YMlhfTUFYX0NPQUxFU19UT1VUKQorCQlicC0+cnhfdGlja3MgPSBCTlgyWF9NQVhfQ09BTEVTX1RPVVQ7CiAKIAlicC0+dHhfdGlja3MgPSAodTE2KSBjb2FsLT50eF9jb2FsZXNjZV91c2VjczsKLQlpZiAoYnAtPnR4X3RpY2tzID4gQk5YMlhfTUFYX0NPQUxFU0NFX1RPVVQpCi0JCWJwLT50eF90aWNrcyA9IEJOWDJYX01BWF9DT0FMRVNDRV9UT1VUOworCWlmIChicC0+dHhfdGlja3MgPiBCTlgyWF9NQVhfQ09BTEVTX1RPVVQpCisJCWJwLT50eF90aWNrcyA9IEJOWDJYX01BWF9DT0FMRVNfVE9VVDsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCWJueDJ4X3VwZGF0ZV9jb2FsZXNjZShicCk7CkBAIC05Mjk2LDEwICs5ODUxLDkgQEAKIAkJeyBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgNCwgMHgwMDAwMDAwMSB9LAogCQl7IFhDTV9SRUdfV1VfREFfQ05UX0NNRDAwLCAgICAgICAgICAgICA0LCAweDAwMDAwMDAzIH0sCiAJCXsgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsICAgICAgIDQsIDB4MDAwMDAwZmYgfSwKLQkJeyBOSUdfUkVHX0VHUkVTU19NTkcwX0ZJRk8sICAgICAgICAgICAyMCwgMHhmZmZmZmZmZiB9LAogCQl7IE5JR19SRUdfTExIMF9UX0JJVCwgICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCi0vKiAyMCAqLwl7IE5JR19SRUdfRU1BQzBfSU5fRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCi0JCXsgTklHX1JFR19CTUFDMF9JTl9FTiwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKKwkJeyBOSUdfUkVHX0VNQUMwX0lOX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAorLyogMjAgKi8JeyBOSUdfUkVHX0JNQUMwX0lOX0VOLCAgICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwMSB9LAogCQl7IE5JR19SRUdfWENNMF9PVVRfRU4sICAgICAgICAgICAgICAgICA0LCAweDAwMDAwMDAxIH0sCiAJCXsgTklHX1JFR19CUkIwX09VVF9FTiwgICAgICAgICAgICAgICAgIDQsIDB4MDAwMDAwMDEgfSwKIAkJeyBOSUdfUkVHX0xMSDBfWENNX01BU0ssICAgICAgICAgICAgICAgNCwgMHgwMDAwMDAwNyB9LApAQCAtOTMwOCw4ICs5ODYyLDggQEAKIAkJeyBOSUdfUkVHX0xMSDBfREVTVF9NQUNfMF8wLCAgICAgICAgIDE2MCwgMHhmZmZmZmZmZiB9LAogCQl7IE5JR19SRUdfTExIMF9ERVNUX0lQXzBfMSwgICAgICAgICAgMTYwLCAweGZmZmZmZmZmIH0sCiAJCXsgTklHX1JFR19MTEgwX0lQVjRfSVBWNl8wLCAgICAgICAgICAxNjAsIDB4MDAwMDAwMDEgfSwKLS8qIDMwICovCXsgTklHX1JFR19MTEgwX0RFU1RfVURQXzAsICAgICAgICAgICAxNjAsIDB4MDAwMGZmZmYgfSwKLQkJeyBOSUdfUkVHX0xMSDBfREVTVF9UQ1BfMCwgICAgICAgICAgIDE2MCwgMHgwMDAwZmZmZiB9LAorCQl7IE5JR19SRUdfTExIMF9ERVNUX1VEUF8wLCAgICAgICAgICAgMTYwLCAweDAwMDBmZmZmIH0sCisvKiAzMCAqLwl7IE5JR19SRUdfTExIMF9ERVNUX1RDUF8wLCAgICAgICAgICAgMTYwLCAweDAwMDBmZmZmIH0sCiAJCXsgTklHX1JFR19MTEgwX1ZMQU5fSURfMCwgICAgICAgICAgICAxNjAsIDB4MDAwMDBmZmYgfSwKIAkJeyBOSUdfUkVHX1hHWFNfU0VSREVTMF9NT0RFX1NFTCwgICAgICAgNCwgMHgwMDAwMDAwMSB9LAogCQl7IE5JR19SRUdfTEVEX0NPTlRST0xfT1ZFUlJJREVfVFJBRkZJQ19QMCwgNCwgMHgwMDAwMDAwMSB9LApAQCAtOTQzNSwxMiArOTk4OSwxNCBAQAogCXVuc2lnbmVkIGludCBwa3Rfc2l6ZSwgbnVtX3BrdHMsIGk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBjaGFyICpwYWNrZXQ7Ci0Jc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbMF07CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcF9yeCA9ICZicC0+ZnBbMF07CisJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcF90eCA9ICZicC0+ZnBbYnAtPm51bV9yeF9xdWV1ZXNdOwogCXUxNiB0eF9zdGFydF9pZHgsIHR4X2lkeDsKIAl1MTYgcnhfc3RhcnRfaWR4LCByeF9pZHg7Ci0JdTE2IHBrdF9wcm9kOworCXUxNiBwa3RfcHJvZCwgYmRfcHJvZDsKIAlzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZjsKLQlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZDsKKwlzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkICp0eF9zdGFydF9iZDsKKwlzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkICpwYmQgPSBOVUxMOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAl1bmlvbiBldGhfcnhfY3FlICpjcWU7CiAJdTggY3FlX2ZwX2ZsYWdzOwpAQCAtOTQ3Miw1NyArMTAwMjgsNjQgQEAKIAl9CiAJcGFja2V0ID0gc2tiX3B1dChza2IsIHBrdF9zaXplKTsKIAltZW1jcHkocGFja2V0LCBicC0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbXNldChwYWNrZXQgKyBFVEhfQUxFTiwgMCwgKEVUSF9ITEVOIC0gRVRIX0FMRU4pKTsKKwltZW1zZXQocGFja2V0ICsgRVRIX0FMRU4sIDAsIEVUSF9BTEVOKTsKKwltZW1zZXQocGFja2V0ICsgMipFVEhfQUxFTiwgMHg3NywgKEVUSF9ITEVOIC0gMipFVEhfQUxFTikpOwogCWZvciAoaSA9IEVUSF9ITEVOOyBpIDwgcGt0X3NpemU7IGkrKykKIAkJcGFja2V0W2ldID0gKHVuc2lnbmVkIGNoYXIpIChpICYgMHhmZik7CiAKIAkvKiBzZW5kIHRoZSBsb29wYmFjayBwYWNrZXQgKi8KIAludW1fcGt0cyA9IDA7Ci0JdHhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKLQlyeF9zdGFydF9pZHggPSBsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpOworCXR4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcF90eC0+dHhfY29uc19zYik7CisJcnhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwX3J4LT5yeF9jb25zX3NiKTsKIAotCXBrdF9wcm9kID0gZnAtPnR4X3BrdF9wcm9kKys7Ci0JdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tUWF9CRChwa3RfcHJvZCldOwotCXR4X2J1Zi0+Zmlyc3RfYmQgPSBmcC0+dHhfYmRfcHJvZDsKKwlwa3RfcHJvZCA9IGZwX3R4LT50eF9wa3RfcHJvZCsrOworCXR4X2J1ZiA9ICZmcF90eC0+dHhfYnVmX3JpbmdbVFhfQkQocGt0X3Byb2QpXTsKKwl0eF9idWYtPmZpcnN0X2JkID0gZnBfdHgtPnR4X2JkX3Byb2Q7CiAJdHhfYnVmLT5za2IgPSBza2I7CisJdHhfYnVmLT5mbGFncyA9IDA7CiAKLQl0eF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW1RYX0JEKGZwLT50eF9iZF9wcm9kKV07CisJYmRfcHJvZCA9IFRYX0JEKGZwX3R4LT50eF9iZF9wcm9kKTsKKwl0eF9zdGFydF9iZCA9ICZmcF90eC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdLnN0YXJ0X2JkOwogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgc2tiLT5kYXRhLAogCQkJCSBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQl0eF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7Ci0JdHhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOwotCXR4X2JkLT5uYmQgPSBjcHVfdG9fbGUxNigxKTsKLQl0eF9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoc2tiX2hlYWRsZW4oc2tiKSk7Ci0JdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7Ci0JdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkID0gKEVUSF9UWF9CRF9GTEFHU19TVEFSVF9CRCB8Ci0JCQkJICAgICAgIEVUSF9UWF9CRF9GTEFHU19FTkRfQkQpOwotCXR4X2JkLT5nZW5lcmFsX2RhdGEgPSAoKFVOSUNBU1RfQUREUkVTUyA8PAotCQkJCUVUSF9UWF9CRF9FVEhfQUREUl9UWVBFX1NISUZUKSB8IDEpOworCXR4X3N0YXJ0X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKKwl0eF9zdGFydF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7CisJdHhfc3RhcnRfYmQtPm5iZCA9IGNwdV90b19sZTE2KDIpOyAvKiBzdGFydCArIHBiZCAqLworCXR4X3N0YXJ0X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihza2JfaGVhZGxlbihza2IpKTsKKwl0eF9zdGFydF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHBrdF9wcm9kKTsKKwl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSBFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQ7CisJdHhfc3RhcnRfYmQtPmdlbmVyYWxfZGF0YSA9ICgoVU5JQ0FTVF9BRERSRVNTIDw8CisJCQkJRVRIX1RYX1NUQVJUX0JEX0VUSF9BRERSX1RZUEVfU0hJRlQpIHwgMSk7CisKKwkvKiB0dXJuIG9uIHBhcnNpbmcgYW5kIGdldCBhIEJEICovCisJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKKwlwYmQgPSAmZnBfdHgtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5wYXJzZV9iZDsKKworCW1lbXNldChwYmQsIDAsIHNpemVvZihzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkKSk7CiAKIAl3bWIoKTsKIAotCWxlMTZfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCwgMSk7Ci0JbWIoKTsgLyogRlcgcmVzdHJpY3Rpb246IG11c3Qgbm90IHJlb3JkZXIgd3JpdGluZyBuYmQgYW5kIHBhY2tldHMgKi8KLQlsZTMyX2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kLCAxKTsKLQlET09SQkVMTChicCwgZnAtPmluZGV4LCAwKTsKKwlmcF90eC0+dHhfZGIuZGF0YS5wcm9kICs9IDI7CisJYmFycmllcigpOworCURPT1JCRUxMKGJwLCBmcF90eC0+aW5kZXggLSBicC0+bnVtX3J4X3F1ZXVlcywgZnBfdHgtPnR4X2RiLnJhdyk7CiAKIAltbWlvd2IoKTsKIAogCW51bV9wa3RzKys7Ci0JZnAtPnR4X2JkX3Byb2QrKzsKKwlmcF90eC0+dHhfYmRfcHJvZCArPSAyOyAvKiBzdGFydCArIHBiZCAqLwogCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCXVkZWxheSgxMDApOwogCi0JdHhfaWR4ID0gbGUxNl90b19jcHUoKmZwLT50eF9jb25zX3NiKTsKKwl0eF9pZHggPSBsZTE2X3RvX2NwdSgqZnBfdHgtPnR4X2NvbnNfc2IpOwogCWlmICh0eF9pZHggIT0gdHhfc3RhcnRfaWR4ICsgbnVtX3BrdHMpCiAJCWdvdG8gdGVzdF9sb29wYmFja19leGl0OwogCi0JcnhfaWR4ID0gbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKTsKKwlyeF9pZHggPSBsZTE2X3RvX2NwdSgqZnBfcngtPnJ4X2NvbnNfc2IpOwogCWlmIChyeF9pZHggIT0gcnhfc3RhcnRfaWR4ICsgbnVtX3BrdHMpCiAJCWdvdG8gdGVzdF9sb29wYmFja19leGl0OwogCi0JY3FlID0gJmZwLT5yeF9jb21wX3JpbmdbUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMpXTsKKwljcWUgPSAmZnBfcngtPnJ4X2NvbXBfcmluZ1tSQ1FfQkQoZnBfcngtPnJ4X2NvbXBfY29ucyldOwogCWNxZV9mcF9mbGFncyA9IGNxZS0+ZmFzdF9wYXRoX2NxZS50eXBlX2Vycm9yX2ZsYWdzOwogCWlmIChDUUVfVFlQRShjcWVfZnBfZmxhZ3MpIHx8IChjcWVfZnBfZmxhZ3MgJiBFVEhfUlhfRVJST1JfRkFMR1MpKQogCQlnb3RvIHRlc3RfbG9vcGJhY2tfcnhfZXhpdDsKQEAgLTk1MzEsNyArMTAwOTQsNyBAQAogCWlmIChsZW4gIT0gcGt0X3NpemUpCiAJCWdvdG8gdGVzdF9sb29wYmFja19yeF9leGl0OwogCi0JcnhfYnVmID0gJmZwLT5yeF9idWZfcmluZ1tSWF9CRChmcC0+cnhfYmRfY29ucyldOworCXJ4X2J1ZiA9ICZmcF9yeC0+cnhfYnVmX3JpbmdbUlhfQkQoZnBfcngtPnJ4X2JkX2NvbnMpXTsKIAlza2IgPSByeF9idWYtPnNrYjsKIAlza2JfcmVzZXJ2ZShza2IsIGNxZS0+ZmFzdF9wYXRoX2NxZS5wbGFjZW1lbnRfb2Zmc2V0KTsKIAlmb3IgKGkgPSBFVEhfSExFTjsgaSA8IHBrdF9zaXplOyBpKyspCkBAIC05NTQyLDE0ICsxMDEwNSwxNCBAQAogCiB0ZXN0X2xvb3BiYWNrX3J4X2V4aXQ6CiAKLQlmcC0+cnhfYmRfY29ucyA9IE5FWFRfUlhfSURYKGZwLT5yeF9iZF9jb25zKTsKLQlmcC0+cnhfYmRfcHJvZCA9IE5FWFRfUlhfSURYKGZwLT5yeF9iZF9wcm9kKTsKLQlmcC0+cnhfY29tcF9jb25zID0gTkVYVF9SQ1FfSURYKGZwLT5yeF9jb21wX2NvbnMpOwotCWZwLT5yeF9jb21wX3Byb2QgPSBORVhUX1JDUV9JRFgoZnAtPnJ4X2NvbXBfcHJvZCk7CisJZnBfcngtPnJ4X2JkX2NvbnMgPSBORVhUX1JYX0lEWChmcF9yeC0+cnhfYmRfY29ucyk7CisJZnBfcngtPnJ4X2JkX3Byb2QgPSBORVhUX1JYX0lEWChmcF9yeC0+cnhfYmRfcHJvZCk7CisJZnBfcngtPnJ4X2NvbXBfY29ucyA9IE5FWFRfUkNRX0lEWChmcF9yeC0+cnhfY29tcF9jb25zKTsKKwlmcF9yeC0+cnhfY29tcF9wcm9kID0gTkVYVF9SQ1FfSURYKGZwX3J4LT5yeF9jb21wX3Byb2QpOwogCiAJLyogVXBkYXRlIHByb2R1Y2VycyAqLwotCWJueDJ4X3VwZGF0ZV9yeF9wcm9kKGJwLCBmcCwgZnAtPnJ4X2JkX3Byb2QsIGZwLT5yeF9jb21wX3Byb2QsCi0JCQkgICAgIGZwLT5yeF9zZ2VfcHJvZCk7CisJYm54MnhfdXBkYXRlX3J4X3Byb2QoYnAsIGZwX3J4LCBmcF9yeC0+cnhfYmRfcHJvZCwgZnBfcngtPnJ4X2NvbXBfcHJvZCwKKwkJCSAgICAgZnBfcngtPnJ4X3NnZV9wcm9kKTsKIAogdGVzdF9sb29wYmFja19leGl0OgogCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfTk9ORTsKQEAgLTk2MDYsNyArMTAxNjksNyBAQAogCV9fYmUzMiBidWZbMHgzNTAgLyA0XTsKIAl1OCAqZGF0YSA9ICh1OCAqKWJ1ZjsKIAlpbnQgaSwgcmM7Ci0JdTMyIG1hZ2ljLCBjc3VtOworCXUzMiBtYWdpYywgY3JjOwogCiAJcmMgPSBibngyeF9udnJhbV9yZWFkKGJwLCAwLCBkYXRhLCA0KTsKIAlpZiAocmMpIHsKQEAgLTk2MzEsMTAgKzEwMTk0LDEwIEBACiAJCQlnb3RvIHRlc3RfbnZyYW1fZXhpdDsKIAkJfQogCi0JCWNzdW0gPSBldGhlcl9jcmNfbGUobnZyYW1fdGJsW2ldLnNpemUsIGRhdGEpOwotCQlpZiAoY3N1bSAhPSBDUkMzMl9SRVNJRFVBTCkgeworCQljcmMgPSBldGhlcl9jcmNfbGUobnZyYW1fdGJsW2ldLnNpemUsIGRhdGEpOworCQlpZiAoY3JjICE9IENSQzMyX1JFU0lEVUFMKSB7CiAJCQlEUChORVRJRl9NU0dfUFJPQkUsCi0JCQkgICAibnZyYW1fdGJsWyVkXSBjc3VtIHZhbHVlICgweCUwOHgpXG4iLCBpLCBjc3VtKTsKKwkJCSAgICJudnJhbV90YmxbJWRdIGNyYyB2YWx1ZSAoMHglMDh4KVxuIiwgaSwgY3JjKTsKIAkJCXJjID0gLUVOT0RFVjsKIAkJCWdvdG8gdGVzdF9udnJhbV9leGl0OwogCQl9CkBAIC05NjkyLDggKzEwMjU1LDE1IEBACiAJCWV0ZXN0LT5mbGFncyAmPSB+RVRIX1RFU1RfRkxfT0ZGTElORTsKIAogCWlmIChldGVzdC0+ZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJCXUzMiB2YWw7CiAJCXU4IGxpbmtfdXA7CiAKKwkJLyogc2F2ZSBjdXJyZW50IHZhbHVlIG9mIGlucHV0IGVuYWJsZSBmb3IgVFggcG9ydCBJRiAqLworCQl2YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfRUdSRVNTX1VNUDBfSU5fRU4gKyBwb3J0KjQpOworCQkvKiBkaXNhYmxlIGlucHV0IGZvciBUWCBwb3J0IElGICovCisJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfVU1QMF9JTl9FTiArIHBvcnQqNCwgMCk7CisKIAkJbGlua191cCA9IGJwLT5saW5rX3ZhcnMubGlua191cDsKIAkJYm54MnhfbmljX3VubG9hZChicCwgVU5MT0FEX05PUk1BTCk7CiAJCWJueDJ4X25pY19sb2FkKGJwLCBMT0FEX0RJQUcpOwpAQCAtOTcxMyw2ICsxMDI4MywxMCBAQAogCQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAogCQlibngyeF9uaWNfdW5sb2FkKGJwLCBVTkxPQURfTk9STUFMKTsKKworCQkvKiByZXN0b3JlIGlucHV0IGZvciBUWCBwb3J0IElGICovCisJCVJFR19XUihicCwgTklHX1JFR19FR1JFU1NfVU1QMF9JTl9FTiArIHBvcnQqNCwgdmFsKTsKKwogCQlibngyeF9uaWNfbG9hZChicCwgTE9BRF9OT1JNQUwpOwogCQkvKiB3YWl0IHVudGlsIGxpbmsgc3RhdGUgaXMgcmVzdG9yZWQgKi8KIAkJYm54Mnhfd2FpdF9mb3JfbGluayhicCwgbGlua191cCk7CkBAIC05ODcxLDcgKzEwNDQ1LDcgQEAKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJaWYgKGlzX211bHRpKGJwKSkgewogCQkJayA9IDA7Ci0JCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQkJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAkJCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1FfU1RBVFM7IGorKykKIAkJCQkJc3ByaW50ZihidWYgKyAoayArIGopKkVUSF9HU1RSSU5HX0xFTiwKIAkJCQkJCWJueDJ4X3Ffc3RhdHNfYXJyW2pdLnN0cmluZywgaSk7CkBAIC05OTA1LDcgKzEwNDc5LDcgQEAKIAlpbnQgaSwgbnVtX3N0YXRzOwogCiAJaWYgKGlzX211bHRpKGJwKSkgewotCQludW1fc3RhdHMgPSBCTlgyWF9OVU1fUV9TVEFUUyAqIEJOWDJYX05VTV9RVUVVRVMoYnApOworCQludW1fc3RhdHMgPSBCTlgyWF9OVU1fUV9TVEFUUyAqIGJwLT5udW1fcnhfcXVldWVzOwogCQlpZiAoIUlTX0UxSE1GX01PREVfU1RBVChicCkpCiAJCQludW1fc3RhdHMgKz0gQk5YMlhfTlVNX1NUQVRTOwogCX0gZWxzZSB7CkBAIC05OTMwLDcgKzEwNTA0LDcgQEAKIAogCWlmIChpc19tdWx0aShicCkpIHsKIAkJayA9IDA7Ci0JCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAJCQlod19zdGF0cyA9ICh1MzIgKikmYnAtPmZwW2ldLmV0aF9xX3N0YXRzOwogCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9RX1NUQVRTOyBqKyspIHsKIAkJCQlpZiAoYm54MnhfcV9zdGF0c19hcnJbal0uc2l6ZSA9PSAwKSB7CkBAIC0xMDAzMiw3ICsxMDYwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYm54MnhfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJueDJ4X2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gYm54MnhfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gYm54Mnhfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSBibngyeF9nZXRfZHJ2aW5mbywKQEAgLTEwMTQzLDE1ICsxMDcxNywxMSBAQAogCQlnb3RvIHBvbGxfcGFuaWM7CiAjZW5kaWYKIAotCXByZWZldGNoKGZwLT50eF9idWZfcmluZ1tUWF9CRChmcC0+dHhfcGt0X2NvbnMpXS5za2IpOwogCXByZWZldGNoKGZwLT5yeF9idWZfcmluZ1tSWF9CRChmcC0+cnhfYmRfY29ucyldLnNrYik7CiAJcHJlZmV0Y2goKGNoYXIgKikoZnAtPnJ4X2J1Zl9yaW5nW1JYX0JEKGZwLT5yeF9iZF9jb25zKV0uc2tiKSArIDI1Nik7CiAKIAlibngyeF91cGRhdGVfZnBzYl9pZHgoZnApOwogCi0JaWYgKGJueDJ4X2hhc190eF93b3JrKGZwKSkKLQkJYm54MnhfdHhfaW50KGZwKTsKLQogCWlmIChibngyeF9oYXNfcnhfd29yayhmcCkpIHsKIAkJd29ya19kb25lID0gYm54MnhfcnhfaW50KGZwLCBidWRnZXQpOwogCkBAIC0xMDE2MCwxMSArMTA3MzAsMTEgQEAKIAkJCWdvdG8gcG9sbF9hZ2FpbjsKIAl9CiAKLQkvKiBCTlgyWF9IQVNfV09SSygpIHJlYWRzIHRoZSBzdGF0dXMgYmxvY2ssIHRodXMgd2UgbmVlZCB0bworCS8qIGJueDJ4X2hhc19yeF93b3JrKCkgcmVhZHMgdGhlIHN0YXR1cyBibG9jaywgdGh1cyB3ZSBuZWVkIHRvCiAJICogZW5zdXJlIHRoYXQgc3RhdHVzIGJsb2NrIGluZGljZXMgaGF2ZSBiZWVuIGFjdHVhbGx5IHJlYWQKLQkgKiAoYm54MnhfdXBkYXRlX2Zwc2JfaWR4KSBwcmlvciB0byB0aGlzIGNoZWNrIChCTlgyWF9IQVNfV09SSykKKwkgKiAoYm54MnhfdXBkYXRlX2Zwc2JfaWR4KSBwcmlvciB0byB0aGlzIGNoZWNrIChibngyeF9oYXNfcnhfd29yaykKIAkgKiBzbyB0aGF0IHdlIHdvbid0IHdyaXRlIHRoZSAibmV3ZXIiIHZhbHVlIG9mIHRoZSBzdGF0dXMgYmxvY2sgdG8gSUdVCi0JICogKGlmIHRoZXJlIHdhcyBhIERNQSByaWdodCBhZnRlciBCTlgyWF9IQVNfV09SSyBhbmQKKwkgKiAoaWYgdGhlcmUgd2FzIGEgRE1BIHJpZ2h0IGFmdGVyIGJueDJ4X2hhc19yeF93b3JrIGFuZAogCSAqIGlmIHRoZXJlIGlzIG5vIHJtYiwgdGhlIG1lbW9yeSByZWFkaW5nIChibngyeF91cGRhdGVfZnBzYl9pZHgpCiAJICogbWF5IGJlIHBvc3Rwb25lZCB0byByaWdodCBiZWZvcmUgYm54MnhfYWNrX3NiKS4gSW4gdGhpcyBjYXNlCiAJICogdGhlcmUgd2lsbCBuZXZlciBiZSBhbm90aGVyIGludGVycnVwdCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIHVwZGF0ZQpAQCAtMTAxNzIsNyArMTA3NDIsNyBAQAogCSAqLwogCXJtYigpOwogCi0JaWYgKCFCTlgyWF9IQVNfV09SSyhmcCkpIHsKKwlpZiAoIWJueDJ4X2hhc19yeF93b3JrKGZwKSkgewogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKIHBvbGxfcGFuaWM6CiAjZW5kaWYKQEAgLTEwMTk3LDEwICsxMDc2NywxMSBAQAogICovCiBzdGF0aWMgbm9pbmxpbmUgdTE2IGJueDJ4X3R4X3NwbGl0KHN0cnVjdCBibngyeCAqYnAsCiAJCQkJICAgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKLQkJCQkgICBzdHJ1Y3QgZXRoX3R4X2JkICoqdHhfYmQsIHUxNiBobGVuLAorCQkJCSAgIHN0cnVjdCBzd190eF9iZCAqdHhfYnVmLAorCQkJCSAgIHN0cnVjdCBldGhfdHhfc3RhcnRfYmQgKip0eF9iZCwgdTE2IGhsZW4sCiAJCQkJICAgdTE2IGJkX3Byb2QsIGludCBuYmQpCiB7Ci0Jc3RydWN0IGV0aF90eF9iZCAqaF90eF9iZCA9ICp0eF9iZDsKKwlzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkICpoX3R4X2JkID0gKnR4X2JkOwogCXN0cnVjdCBldGhfdHhfYmQgKmRfdHhfYmQ7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCWludCBvbGRfbGVuID0gbGUxNl90b19jcHUoaF90eF9iZC0+bmJ5dGVzKTsKQEAgLTEwMjE2LDcgKzEwNzg3LDcgQEAKIAkvKiBub3cgZ2V0IGEgbmV3IGRhdGEgQkQKIAkgKiAoYWZ0ZXIgdGhlIHBiZCkgYW5kIGZpbGwgaXQgKi8KIAliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOwotCWRfdHhfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXTsKKwlkX3R4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF0ucmVnX2JkOwogCiAJbWFwcGluZyA9IEhJTE9fVTY0KGxlMzJfdG9fY3B1KGhfdHhfYmQtPmFkZHJfaGkpLAogCQkJICAgbGUzMl90b19jcHUoaF90eF9iZC0+YWRkcl9sbykpICsgaGxlbjsKQEAgLTEwMjI0LDE3ICsxMDc5NSwxNiBAQAogCWRfdHhfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOwogCWRfdHhfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOwogCWRfdHhfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KG9sZF9sZW4gLSBobGVuKTsKLQlkX3R4X2JkLT52bGFuID0gMDsKLQkvKiB0aGlzIG1hcmtzIHRoZSBCRCBhcyBvbmUgdGhhdCBoYXMgbm8gaW5kaXZpZHVhbCBtYXBwaW5nCi0JICogdGhlIEZXIGlnbm9yZXMgdGhpcyBmbGFnIGluIGEgQkQgbm90IG1hcmtlZCBzdGFydAotCSAqLwotCWRfdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkID0gRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTzsKKworCS8qIHRoaXMgbWFya3MgdGhlIEJEIGFzIG9uZSB0aGF0IGhhcyBubyBpbmRpdmlkdWFsIG1hcHBpbmcgKi8KKwl0eF9idWYtPmZsYWdzIHw9IEJOWDJYX1RTT19TUExJVF9CRDsKKwogCURQKE5FVElGX01TR19UWF9RVUVVRUQsCiAJICAgIlRTTyBzcGxpdCBkYXRhIHNpemUgaXMgJWQgKCV4OiV4KVxuIiwKIAkgICBkX3R4X2JkLT5uYnl0ZXMsIGRfdHhfYmQtPmFkZHJfaGksIGRfdHhfYmQtPmFkZHJfbG8pOwogCi0JLyogdXBkYXRlIHR4X2JkIGZvciBtYXJraW5nIHRoZSBsYXN0IEJEIGZsYWcgKi8KLQkqdHhfYmQgPSBkX3R4X2JkOworCS8qIHVwZGF0ZSB0eF9iZCAqLworCSp0eF9iZCA9IChzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkICopZF90eF9iZDsKIAogCXJldHVybiBiZF9wcm9kOwogfQpAQCAtMTAzNjYsMjEgKzEwOTM2LDIyIEBACiAgKiBibngyeF90eF9pbnQoKSBydW5zIHdpdGhvdXQgbmV0aWZfdHhfbG9jayB1bmxlc3MgaXQgbmVlZHMgdG8gY2FsbAogICogbmV0aWZfd2FrZV9xdWV1ZSgpCiAgKi8KLXN0YXRpYyBpbnQgYm54Mnhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGJueDJ4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwOworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAsICpmcF9zdGF0OwogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlzdHJ1Y3Qgc3dfdHhfYmQgKnR4X2J1ZjsKLQlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9iZDsKKwlzdHJ1Y3QgZXRoX3R4X3N0YXJ0X2JkICp0eF9zdGFydF9iZDsKKwlzdHJ1Y3QgZXRoX3R4X2JkICp0eF9kYXRhX2JkLCAqdG90YWxfcGt0X2JkID0gTlVMTDsKIAlzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkICpwYmQgPSBOVUxMOwogCXUxNiBwa3RfcHJvZCwgYmRfcHJvZDsKIAlpbnQgbmJkLCBmcF9pbmRleDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTMyIHhtaXRfdHlwZSA9IGJueDJ4X3htaXRfdHlwZShicCwgc2tiKTsKLQlpbnQgdmxhbl9vZmYgPSAoYnAtPmUxaG92ID8gNCA6IDApOwogCWludCBpOwogCXU4IGhsZW4gPSAwOworCV9fbGUxNiBwa3Rfc2l6ZSA9IDA7CiAKICNpZmRlZiBCTlgyWF9TVE9QX09OX0VSUk9SCiAJaWYgKHVubGlrZWx5KGJwLT5wYW5pYykpCkBAIC0xMDM5MCwxMCArMTA5NjEsMTEgQEAKIAlmcF9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBmcF9pbmRleCk7CiAKLQlmcCA9ICZicC0+ZnBbZnBfaW5kZXhdOworCWZwID0gJmJwLT5mcFtmcF9pbmRleCArIGJwLT5udW1fcnhfcXVldWVzXTsKKwlmcF9zdGF0ID0gJmJwLT5mcFtmcF9pbmRleF07CiAKIAlpZiAodW5saWtlbHkoYm54MnhfdHhfYXZhaWwoZnApIDwgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAzKSkpIHsKLQkJZnAtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKyssCisJCWZwX3N0YXQtPmV0aF9xX3N0YXRzLmRyaXZlcl94b2ZmKys7CiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAkJQk5YMlhfRVJSKCJCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKQEAgLTEwNDIyLDcgKzEwOTk0LDcgQEAKIAogCS8qCiAJUGxlYXNlIHJlYWQgY2FyZWZ1bGx5LiBGaXJzdCB3ZSB1c2Ugb25lIEJEIHdoaWNoIHdlIG1hcmsgYXMgc3RhcnQsCi0JdGhlbiBmb3IgVFNPIG9yIHhzdW0gd2UgaGF2ZSBhIHBhcnNpbmcgaW5mbyBCRCwKKwl0aGVuIHdlIGhhdmUgYSBwYXJzaW5nIGluZm8gQkQgKHVzZWQgZm9yIFRTTyBvciB4c3VtKSwKIAlhbmQgb25seSB0aGVuIHdlIGhhdmUgdGhlIHJlc3Qgb2YgdGhlIFRTTyBCRHMuCiAJKGRvbid0IGZvcmdldCB0byBtYXJrIHRoZSBsYXN0IG9uZSBhcyBsYXN0LAogCWFuZCB0byB1bm1hcCBvbmx5IEFGVEVSIHlvdSB3cml0ZSB0byB0aGUgQkQgLi4uKQpAQCAtMTA0MzQsNDIgKzExMDA2LDQwIEBACiAKIAkvKiBnZXQgYSB0eF9idWYgYW5kIGZpcnN0IEJEICovCiAJdHhfYnVmID0gJmZwLT50eF9idWZfcmluZ1tUWF9CRChwa3RfcHJvZCldOwotCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07CisJdHhfc3RhcnRfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5zdGFydF9iZDsKIAotCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IEVUSF9UWF9CRF9GTEFHU19TVEFSVF9CRDsKLQl0eF9iZC0+Z2VuZXJhbF9kYXRhID0gKFVOSUNBU1RfQUREUkVTUyA8PAotCQkJICAgICAgIEVUSF9UWF9CRF9FVEhfQUREUl9UWVBFX1NISUZUKTsKKwl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgPSBFVEhfVFhfQkRfRkxBR1NfU1RBUlRfQkQ7CisJdHhfc3RhcnRfYmQtPmdlbmVyYWxfZGF0YSA9IChVTklDQVNUX0FERFJFU1MgPDwKKwkJCQkgICAgIEVUSF9UWF9TVEFSVF9CRF9FVEhfQUREUl9UWVBFX1NISUZUKTsKIAkvKiBoZWFkZXIgbmJkICovCi0JdHhfYmQtPmdlbmVyYWxfZGF0YSB8PSAoMSA8PCBFVEhfVFhfQkRfSERSX05CRFNfU0hJRlQpOworCXR4X3N0YXJ0X2JkLT5nZW5lcmFsX2RhdGEgfD0gKDEgPDwgRVRIX1RYX1NUQVJUX0JEX0hEUl9OQkRTX1NISUZUKTsKIAogCS8qIHJlbWVtYmVyIHRoZSBmaXJzdCBCRCBvZiB0aGUgcGFja2V0ICovCiAJdHhfYnVmLT5maXJzdF9iZCA9IGZwLT50eF9iZF9wcm9kOwogCXR4X2J1Zi0+c2tiID0gc2tiOworCXR4X2J1Zi0+ZmxhZ3MgPSAwOwogCiAJRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwKIAkgICAic2VuZGluZyBwa3QgJXUgQCVwICBuZXh0X2lkeCAldSAgYmQgJXUgQCVwXG4iLAotCSAgIHBrdF9wcm9kLCB0eF9idWYsIGZwLT50eF9wa3RfcHJvZCwgYmRfcHJvZCwgdHhfYmQpOworCSAgIHBrdF9wcm9kLCB0eF9idWYsIGZwLT50eF9wa3RfcHJvZCwgYmRfcHJvZCwgdHhfc3RhcnRfYmQpOwogCiAjaWZkZWYgQkNNX1ZMQU4KIAlpZiAoKGJwLT52bGdycCAhPSBOVUxMKSAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgJiYKIAkgICAgKGJwLT5mbGFncyAmIEhXX1ZMQU5fVFhfRkxBRykpIHsKLQkJdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7Ci0JCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfVkxBTl9UQUc7Ci0JCXZsYW5fb2ZmICs9IDQ7CisJCXR4X3N0YXJ0X2JkLT52bGFuID0gY3B1X3RvX2xlMTYodmxhbl90eF90YWdfZ2V0KHNrYikpOworCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX1ZMQU5fVEFHOwogCX0gZWxzZQogI2VuZGlmCi0JCXR4X2JkLT52bGFuID0gY3B1X3RvX2xlMTYocGt0X3Byb2QpOworCQl0eF9zdGFydF9iZC0+dmxhbiA9IGNwdV90b19sZTE2KHBrdF9wcm9kKTsKIAotCWlmICh4bWl0X3R5cGUpIHsKLQkJLyogdHVybiBvbiBwYXJzaW5nIGFuZCBnZXQgYSBCRCAqLwotCQliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOwotCQlwYmQgPSAodm9pZCAqKSZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdOworCS8qIHR1cm4gb24gcGFyc2luZyBhbmQgZ2V0IGEgQkQgKi8KKwliZF9wcm9kID0gVFhfQkQoTkVYVF9UWF9JRFgoYmRfcHJvZCkpOworCXBiZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdLnBhcnNlX2JkOwogCi0JCW1lbXNldChwYmQsIDAsIHNpemVvZihzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkKSk7Ci0JfQorCW1lbXNldChwYmQsIDAsIHNpemVvZihzdHJ1Y3QgZXRoX3R4X3BhcnNlX2JkKSk7CiAKIAlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNKSB7Ci0JCWhsZW4gPSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgLSBza2ItPmRhdGEgKyB2bGFuX29mZikgLyAyOworCQlobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhKSAvIDI7CiAKIAkJLyogZm9yIG5vdyBOUyBmbGFnIGlzIG5vdCB1c2VkIGluIExpbnV4ICovCiAJCXBiZC0+Z2xvYmFsX2RhdGEgPQpAQCAtMTA0ODIsMTUgKzExMDUyLDE2IEBACiAJCWhsZW4gKz0gcGJkLT5pcF9obGVuICsgdGNwX2hkcmxlbihza2IpIC8gMjsKIAogCQlwYmQtPnRvdGFsX2hsZW4gPSBjcHVfdG9fbGUxNihobGVuKTsKLQkJaGxlbiA9IGhsZW4qMiAtIHZsYW5fb2ZmOworCQlobGVuID0gaGxlbioyOwogCi0JCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfVENQX0NTVU07CisJCXR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfTDRfQ1NVTTsKIAogCQlpZiAoeG1pdF90eXBlICYgWE1JVF9DU1VNX1Y0KQotCQkJdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkIHw9CisJCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0KIAkJCQkJCUVUSF9UWF9CRF9GTEFHU19JUF9DU1VNOwogCQllbHNlCi0JCQl0eF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX0lQVjY7CisJCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0KKwkJCQkJCUVUSF9UWF9CRF9GTEFHU19JUFY2OwogCiAJCWlmICh4bWl0X3R5cGUgJiBYTUlUX0NTVU1fVENQKSB7CiAJCQlwYmQtPnRjcF9wc2V1ZG9fY3N1bSA9IHN3YWIxNih0Y3BfaGRyKHNrYiktPmNoZWNrKTsKQEAgLTEwNDk4LDEzICsxMTA2OSwxMSBAQAogCQl9IGVsc2UgewogCQkJczggZml4ID0gU0tCX0NTX09GRihza2IpOyAvKiBzaWduZWQhICovCiAKLQkJCXBiZC0+Z2xvYmFsX2RhdGEgfD0gRVRIX1RYX1BBUlNFX0JEX0NTX0FOWV9GTEc7Ci0JCQlwYmQtPmNzX29mZnNldCA9IGZpeCAvIDI7CisJCQlwYmQtPmdsb2JhbF9kYXRhIHw9IEVUSF9UWF9QQVJTRV9CRF9VRFBfQ1NfRkxHOwogCiAJCQlEUChORVRJRl9NU0dfVFhfUVVFVUVELAotCQkJICAgImhsZW4gJWQgIG9mZnNldCAlZCAgZml4ICVkICBjc3VtIGJlZm9yZSBmaXggJXhcbiIsCi0JCQkgICBsZTE2X3RvX2NwdShwYmQtPnRvdGFsX2hsZW4pLCBwYmQtPmNzX29mZnNldCwgZml4LAotCQkJICAgU0tCX0NTKHNrYikpOworCQkJICAgImhsZW4gJWQgIGZpeCAlZCAgY3N1bSBiZWZvcmUgZml4ICV4XG4iLAorCQkJICAgbGUxNl90b19jcHUocGJkLT50b3RhbF9obGVuKSwgZml4LCBTS0JfQ1Moc2tiKSk7CiAKIAkJCS8qIEhXIGJ1ZzogZml4dXAgdGhlIENTVU0gKi8KIAkJCXBiZC0+dGNwX3BzZXVkb19jc3VtID0KQEAgLTEwNTE5LDE3ICsxMTA4OCwxOCBAQAogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgc2tiLT5kYXRhLAogCQkJCSBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAotCXR4X2JkLT5hZGRyX2hpID0gY3B1X3RvX2xlMzIoVTY0X0hJKG1hcHBpbmcpKTsKLQl0eF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7Ci0JbmJkID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArICgocGJkID09IE5VTEwpID8gMSA6IDIpOwotCXR4X2JkLT5uYmQgPSBjcHVfdG9fbGUxNihuYmQpOwotCXR4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihza2JfaGVhZGxlbihza2IpKTsKKwl0eF9zdGFydF9iZC0+YWRkcl9oaSA9IGNwdV90b19sZTMyKFU2NF9ISShtYXBwaW5nKSk7CisJdHhfc3RhcnRfYmQtPmFkZHJfbG8gPSBjcHVfdG9fbGUzMihVNjRfTE8obWFwcGluZykpOworCW5iZCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAyOyAvKiBzdGFydF9iZCArIHBiZCArIGZyYWdzICovCisJdHhfc3RhcnRfYmQtPm5iZCA9IGNwdV90b19sZTE2KG5iZCk7CisJdHhfc3RhcnRfYmQtPm5ieXRlcyA9IGNwdV90b19sZTE2KHNrYl9oZWFkbGVuKHNrYikpOworCXBrdF9zaXplID0gdHhfc3RhcnRfYmQtPm5ieXRlczsKIAogCURQKE5FVElGX01TR19UWF9RVUVVRUQsICJmaXJzdCBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJkICVkIgogCSAgICIgIG5ieXRlcyAlZCAgZmxhZ3MgJXggIHZsYW4gJXhcbiIsCi0JICAgdHhfYmQsIHR4X2JkLT5hZGRyX2hpLCB0eF9iZC0+YWRkcl9sbywgbGUxNl90b19jcHUodHhfYmQtPm5iZCksCi0JICAgbGUxNl90b19jcHUodHhfYmQtPm5ieXRlcyksIHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCwKLQkgICBsZTE2X3RvX2NwdSh0eF9iZC0+dmxhbikpOworCSAgIHR4X3N0YXJ0X2JkLCB0eF9zdGFydF9iZC0+YWRkcl9oaSwgdHhfc3RhcnRfYmQtPmFkZHJfbG8sCisJICAgbGUxNl90b19jcHUodHhfc3RhcnRfYmQtPm5iZCksIGxlMTZfdG9fY3B1KHR4X3N0YXJ0X2JkLT5uYnl0ZXMpLAorCSAgIHR4X3N0YXJ0X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCwgbGUxNl90b19jcHUodHhfc3RhcnRfYmQtPnZsYW4pKTsKIAogCWlmICh4bWl0X3R5cGUgJiBYTUlUX0dTTykgewogCkBAIC0xMDUzOCwxMSArMTExMDgsMTEgQEAKIAkJICAgc2tiLT5sZW4sIGhsZW4sIHNrYl9oZWFkbGVuKHNrYiksCiAJCSAgIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOwogCi0JCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfU1dfTFNPOworCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0gRVRIX1RYX0JEX0ZMQUdTX1NXX0xTTzsKIAogCQlpZiAodW5saWtlbHkoc2tiX2hlYWRsZW4oc2tiKSA+IGhsZW4pKQotCQkJYmRfcHJvZCA9IGJueDJ4X3R4X3NwbGl0KGJwLCBmcCwgJnR4X2JkLCBobGVuLAotCQkJCQkJIGJkX3Byb2QsICsrbmJkKTsKKwkJCWJkX3Byb2QgPSBibngyeF90eF9zcGxpdChicCwgZnAsIHR4X2J1ZiwgJnR4X3N0YXJ0X2JkLAorCQkJCQkJIGhsZW4sIGJkX3Byb2QsICsrbmJkKTsKIAogCQlwYmQtPmxzb19tc3MgPSBjcHVfdG9fbGUxNihza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKIAkJcGJkLT50Y3Bfc2VuZF9zZXEgPSBzd2FiMzIodGNwX2hkcihza2IpLT5zZXEpOwpAQCAtMTA1NjMsMzMgKzExMTMzLDMxIEBACiAKIAkJcGJkLT5nbG9iYWxfZGF0YSB8PSBFVEhfVFhfUEFSU0VfQkRfUFNFVURPX0NTX1dJVEhPVVRfTEVOOwogCX0KKwl0eF9kYXRhX2JkID0gKHN0cnVjdCBldGhfdHhfYmQgKil0eF9zdGFydF9iZDsKIAogCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKIAkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwogCiAJCWJkX3Byb2QgPSBUWF9CRChORVhUX1RYX0lEWChiZF9wcm9kKSk7Ci0JCXR4X2JkID0gJmZwLT50eF9kZXNjX3JpbmdbYmRfcHJvZF07CisJCXR4X2RhdGFfYmQgPSAmZnAtPnR4X2Rlc2NfcmluZ1tiZF9wcm9kXS5yZWdfYmQ7CisJCWlmICh0b3RhbF9wa3RfYmQgPT0gTlVMTCkKKwkJCXRvdGFsX3BrdF9iZCA9ICZmcC0+dHhfZGVzY19yaW5nW2JkX3Byb2RdLnJlZ19iZDsKIAogCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGJwLT5wZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKIAkJCQkgICAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQkJdHhfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOwotCQl0eF9iZC0+YWRkcl9sbyA9IGNwdV90b19sZTMyKFU2NF9MTyhtYXBwaW5nKSk7Ci0JCXR4X2JkLT5uYnl0ZXMgPSBjcHVfdG9fbGUxNihmcmFnLT5zaXplKTsKLQkJdHhfYmQtPnZsYW4gPSBjcHVfdG9fbGUxNihwa3RfcHJvZCk7Ci0JCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCA9IDA7CisJCXR4X2RhdGFfYmQtPmFkZHJfaGkgPSBjcHVfdG9fbGUzMihVNjRfSEkobWFwcGluZykpOworCQl0eF9kYXRhX2JkLT5hZGRyX2xvID0gY3B1X3RvX2xlMzIoVTY0X0xPKG1hcHBpbmcpKTsKKwkJdHhfZGF0YV9iZC0+bmJ5dGVzID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7CisJCWxlMTZfYWRkX2NwdSgmcGt0X3NpemUsIGZyYWctPnNpemUpOwogCiAJCURQKE5FVElGX01TR19UWF9RVUVVRUQsCi0JCSAgICJmcmFnICVkICBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJ5dGVzICVkICBmbGFncyAleFxuIiwKLQkJICAgaSwgdHhfYmQsIHR4X2JkLT5hZGRyX2hpLCB0eF9iZC0+YWRkcl9sbywKLQkJICAgbGUxNl90b19jcHUodHhfYmQtPm5ieXRlcyksIHR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCk7CisJCSAgICJmcmFnICVkICBiZCBAJXAgIGFkZHIgKCV4OiV4KSAgbmJ5dGVzICVkXG4iLAorCQkgICBpLCB0eF9kYXRhX2JkLCB0eF9kYXRhX2JkLT5hZGRyX2hpLCB0eF9kYXRhX2JkLT5hZGRyX2xvLAorCQkgICBsZTE2X3RvX2NwdSh0eF9kYXRhX2JkLT5uYnl0ZXMpKTsKIAl9CiAKLQkvKiBub3cgYXQgbGFzdCBtYXJrIHRoZSBCRCBhcyB0aGUgbGFzdCBCRCAqLwotCXR4X2JkLT5iZF9mbGFncy5hc19iaXRmaWVsZCB8PSBFVEhfVFhfQkRfRkxBR1NfRU5EX0JEOwotCi0JRFAoTkVUSUZfTVNHX1RYX1FVRVVFRCwgImxhc3QgYmQgQCVwICBmbGFncyAleFxuIiwKLQkgICB0eF9iZCwgdHhfYmQtPmJkX2ZsYWdzLmFzX2JpdGZpZWxkKTsKKwlEUChORVRJRl9NU0dfVFhfUVVFVUVELCAibGFzdCBiZCBAJXBcbiIsIHR4X2RhdGFfYmQpOwogCiAJYmRfcHJvZCA9IFRYX0JEKE5FWFRfVFhfSURYKGJkX3Byb2QpKTsKIApAQCAtMTA1OTksNiArMTExNjcsOSBAQAogCWlmIChUWF9CRF9QT0ZGKGJkX3Byb2QpIDwgbmJkKQogCQluYmQrKzsKIAorCWlmICh0b3RhbF9wa3RfYmQgIT0gTlVMTCkKKwkJdG90YWxfcGt0X2JkLT50b3RhbF9wa3RfYnl0ZXMgPSBwa3Rfc2l6ZTsKKwogCWlmIChwYmQpCiAJCURQKE5FVElGX01TR19UWF9RVUVVRUQsCiAJCSAgICJQQkQgQCVwICBpcF9kYXRhICV4ICBpcF9obGVuICV1ICBpcF9pZCAldSAgbHNvX21zcyAldSIKQEAgLTEwNjE4LDI1ICsxMTE4OSwyNCBAQAogCSAqLwogCXdtYigpOwogCi0JbGUxNl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kLCBuYmQpOwotCW1iKCk7IC8qIEZXIHJlc3RyaWN0aW9uOiBtdXN0IG5vdCByZW9yZGVyIHdyaXRpbmcgbmJkIGFuZCBwYWNrZXRzICovCi0JbGUzMl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCwgMSk7Ci0JRE9PUkJFTEwoYnAsIGZwLT5pbmRleCwgMCk7CisJZnAtPnR4X2RiLmRhdGEucHJvZCArPSBuYmQ7CisJYmFycmllcigpOworCURPT1JCRUxMKGJwLCBmcC0+aW5kZXggLSBicC0+bnVtX3J4X3F1ZXVlcywgZnAtPnR4X2RiLnJhdyk7CiAKIAltbWlvd2IoKTsKIAogCWZwLT50eF9iZF9wcm9kICs9IG5iZDsKIAogCWlmICh1bmxpa2VseShibngyeF90eF9hdmFpbChmcCkgPCBNQVhfU0tCX0ZSQUdTICsgMykpIHsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwogCQkvKiBXZSB3YW50IGJueDJ4X3R4X2ludCB0byAic2VlIiB0aGUgdXBkYXRlZCB0eF9iZF9wcm9kCiAJCSAgIGlmIHdlIHB1dCBUeCBpbnRvIFhPRkYgc3RhdGUuICovCiAJCXNtcF9tYigpOwotCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7Ci0JCWZwLT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrOworCQlmcF9zdGF0LT5ldGhfcV9zdGF0cy5kcml2ZXJfeG9mZisrOwogCQlpZiAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKQogCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOwogCX0KLQlmcC0+dHhfcGt0Kys7CisJZnBfc3RhdC0+dHhfcGt0Kys7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTA3MTIsOCArMTEyODIsOSBAQAogCQkJCQkJCWNwdV90b19sZTE2KHBvcnQpOwogCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgogCQkJCQl0YXJnZXRfdGFibGVfZW50cnkuZmxhZ3MgPSAwOwotCQkJCWNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgotCQkJCQl0YXJnZXRfdGFibGVfZW50cnkuY2xpZW50X2lkID0gMDsKKwkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS50YXJnZXRfdGFibGVfZW50cnkuCisJCQkJCWNsaWVudHNfYml0X3ZlY3RvciA9CisJCQkJCQljcHVfdG9fbGUzMigxIDw8IEJQX0xfSUQoYnApKTsKIAkJCQljb25maWctPmNvbmZpZ190YWJsZVtpXS4KIAkJCQkJdGFyZ2V0X3RhYmxlX2VudHJ5LnZsYW5faWQgPSAwOwogCkBAIC0xMDgwOCw1NCArMTEzNzksNzcgQEAKIH0KIAogLyogY2FsbGVkIHdpdGggcnRubF9sb2NrICovCitzdGF0aWMgaW50IGJueDJ4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJ0YWQsCisJCQkgICBpbnQgZGV2YWQsIHUxNiBhZGRyKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiB2YWx1ZTsKKwlpbnQgcmM7CisJdTMyIHBoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKworCURQKE5FVElGX01TR19MSU5LLCAibWRpb19yZWFkOiBwcnRhZCAweCV4LCBkZXZhZCAweCV4LCBhZGRyIDB4JXhcbiIsCisJICAgcHJ0YWQsIGRldmFkLCBhZGRyKTsKKworCWlmIChwcnRhZCAhPSBicC0+bWRpby5wcnRhZCkgeworCQlEUChORVRJRl9NU0dfTElOSywgInBydGFkIG1pc3NtYXRjaCAoY21kOjB4JXggIT0gYnA6MHgleClcbiIsCisJCSAgIHBydGFkLCBicC0+bWRpby5wcnRhZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRoZSBIVyBleHBlY3RzIGRpZmZlcmVudCBkZXZhZCBpZiBDTDIyIGlzIHVzZWQgKi8KKwlkZXZhZCA9IChkZXZhZCA9PSBNRElPX0RFVkFEX05PTkUpID8gREVGQVVMVF9QSFlfREVWX0FERFIgOiBkZXZhZDsKKworCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOworCXJjID0gYm54MnhfY2w0NV9yZWFkKGJwLCBCUF9QT1JUKGJwKSwgcGh5X3R5cGUsIHBydGFkLAorCQkJICAgICBkZXZhZCwgYWRkciwgJnZhbHVlKTsKKwlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwlEUChORVRJRl9NU0dfTElOSywgIm1kaW9fcmVhZF92YWwgMHgleCByYyA9IDB4JXhcbiIsIHZhbHVlLCByYyk7CisKKwlpZiAoIXJjKQorCQlyYyA9IHZhbHVlOworCXJldHVybiByYzsKK30KKworLyogY2FsbGVkIHdpdGggcnRubF9sb2NrICovCitzdGF0aWMgaW50IGJueDJ4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHBydGFkLCBpbnQgZGV2YWQsCisJCQkgICAgdTE2IGFkZHIsIHUxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKKwlpbnQgcmM7CisKKwlEUChORVRJRl9NU0dfTElOSywgIm1kaW9fd3JpdGU6IHBydGFkIDB4JXgsIGRldmFkIDB4JXgsIGFkZHIgMHgleCwiCisJCQkgICAiIHZhbHVlIDB4JXhcbiIsIHBydGFkLCBkZXZhZCwgYWRkciwgdmFsdWUpOworCisJaWYgKHBydGFkICE9IGJwLT5tZGlvLnBydGFkKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAicHJ0YWQgbWlzc21hdGNoIChjbWQ6MHgleCAhPSBicDoweCV4KVxuIiwKKwkJICAgcHJ0YWQsIGJwLT5tZGlvLnBydGFkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhlIEhXIGV4cGVjdHMgZGlmZmVyZW50IGRldmFkIGlmIENMMjIgaXMgdXNlZCAqLworCWRldmFkID0gKGRldmFkID09IE1ESU9fREVWQURfTk9ORSkgPyBERUZBVUxUX1BIWV9ERVZfQUREUiA6IGRldmFkOworCisJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisJcmMgPSBibngyeF9jbDQ1X3dyaXRlKGJwLCBCUF9QT1JUKGJwKSwgZXh0X3BoeV90eXBlLCBwcnRhZCwKKwkJCSAgICAgIGRldmFkLCBhZGRyLCB2YWx1ZSk7CisJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CisJcmV0dXJuIHJjOworfQorCisvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KIHN0YXRpYyBpbnQgYm54MnhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7Ci0Jc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlmcik7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgZXJyOworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWRpbyA9IGlmX21paShpZnIpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNJT0NHTUlJUEhZOgotCQlkYXRhLT5waHlfaWQgPSBicC0+cG9ydC5waHlfYWRkcjsKKwlEUChORVRJRl9NU0dfTElOSywgImlvY3RsOiBwaHkgaWQgMHgleCwgcmVnIDB4JXgsIHZhbF9pbiAweCV4XG4iLAorCSAgIG1kaW8tPnBoeV9pZCwgbWRpby0+cmVnX251bSwgbWRpby0+dmFsX2luKTsKIAotCQkvKiBmYWxsdGhyb3VnaCAqLworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVBR0FJTjsKIAotCWNhc2UgU0lPQ0dNSUlSRUc6IHsKLQkJdTE2IG1paV9yZWd2YWw7Ci0KLQkJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQltdXRleF9sb2NrKCZicC0+cG9ydC5waHlfbXV0ZXgpOwotCQllcnIgPSBibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIDAsIGJwLT5wb3J0LnBoeV9hZGRyLAotCQkJCSAgICAgIERFRkFVTFRfUEhZX0RFVl9BRERSLAotCQkJCSAgICAgIChkYXRhLT5yZWdfbnVtICYgMHgxZiksICZtaWlfcmVndmFsKTsKLQkJZGF0YS0+dmFsX291dCA9IG1paV9yZWd2YWw7Ci0JCW11dGV4X3VubG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQljYXNlIFNJT0NTTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJbXV0ZXhfbG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKLQkJZXJyID0gYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwgMCwgYnAtPnBvcnQucGh5X2FkZHIsCi0JCQkJICAgICAgIERFRkFVTFRfUEhZX0RFVl9BRERSLAotCQkJCSAgICAgICAoZGF0YS0+cmVnX251bSAmIDB4MWYpLCBkYXRhLT52YWxfaW4pOwotCQltdXRleF91bmxvY2soJmJwLT5wb3J0LnBoeV9tdXRleCk7Ci0JCXJldHVybiBlcnI7Ci0KLQlkZWZhdWx0OgotCQkvKiBkbyBub3RoaW5nICovCi0JCWJyZWFrOwotCX0KLQotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gbWRpb19taWlfaW9jdGwoJmJwLT5tZGlvLCBtZGlvLCBjbWQpOwogfQogCiAvKiBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KQEAgLTExMDY1LDEyICsxMTY1OSwyNyBAQAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOwogCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19EQUNfRkxBRykKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CisJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogI2lmZGVmIEJDTV9WTEFOCiAJZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYKTsKIAlicC0+ZmxhZ3MgfD0gKEhXX1ZMQU5fUlhfRkxBRyB8IEhXX1ZMQU5fVFhfRkxBRyk7CisKKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19EQUNfRkxBRykKKwkJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU09fRUNOKTsKKwlkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogI2VuZGlmCi0JZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04pOwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCisJLyogZ2V0X3BvcnRfaHdpbmZvKCkgd2lsbCBzZXQgcHJ0YWQgYW5kIG1tZHMgcHJvcGVybHkgKi8KKwlicC0+bWRpby5wcnRhZCA9IE1ESU9fUFJUQURfTk9ORTsKKwlicC0+bWRpby5tbWRzID0gMDsKKwlicC0+bWRpby5tb2RlX3N1cHBvcnQgPSBNRElPX1NVUFBPUlRTX0M0NSB8IE1ESU9fRU1VTEFURV9DMjI7CisJYnAtPm1kaW8uZGV2ID0gZGV2OworCWJwLT5tZGlvLm1kaW9fcmVhZCA9IGJueDJ4X21kaW9fcmVhZDsKKwlicC0+bWRpby5tZGlvX3dyaXRlID0gYm54MnhfbWRpb193cml0ZTsKIAogCXJldHVybiAwOwogCkBAIC0xMTA5NiwzMSArMTE3MDUsMjYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2dldF9wY2llX3dpZHRoKHN0cnVjdCBibngyeCAqYnApCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYm54MnhfZ2V0X3BjaWVfd2lkdGhfc3BlZWQoc3RydWN0IGJueDJ4ICpicCwKKwkJCQkJCSBpbnQgKndpZHRoLCBpbnQgKnNwZWVkKQogewogCXUzMiB2YWwgPSBSRUdfUkQoYnAsIFBDSUNGR19PRkZTRVQgKyBQQ0lDRkdfTElOS19DT05UUk9MKTsKIAotCXZhbCA9ICh2YWwgJiBQQ0lDRkdfTElOS19XSURUSCkgPj4gUENJQ0ZHX0xJTktfV0lEVEhfU0hJRlQ7Ci0JcmV0dXJuIHZhbDsKKwkqd2lkdGggPSAodmFsICYgUENJQ0ZHX0xJTktfV0lEVEgpID4+IFBDSUNGR19MSU5LX1dJRFRIX1NISUZUOworCisJLyogcmV0dXJuIHZhbHVlIG9mIDE9Mi41R0h6IDI9NUdIeiAqLworCSpzcGVlZCA9ICh2YWwgJiBQQ0lDRkdfTElOS19TUEVFRCkgPj4gUENJQ0ZHX0xJTktfU1BFRURfU0hJRlQ7CiB9CiAKLS8qIHJldHVybiB2YWx1ZSBvZiAxPTIuNUdIeiAyPTVHSHogKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2dldF9wY2llX3NwZWVkKHN0cnVjdCBibngyeCAqYnApCi17Ci0JdTMyIHZhbCA9IFJFR19SRChicCwgUENJQ0ZHX09GRlNFVCArIFBDSUNGR19MSU5LX0NPTlRST0wpOwotCi0JdmFsID0gKHZhbCAmIFBDSUNGR19MSU5LX1NQRUVEKSA+PiBQQ0lDRkdfTElOS19TUEVFRF9TSElGVDsKLQlyZXR1cm4gdmFsOwotfQogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfY2hlY2tfZmlybXdhcmUoc3RydWN0IGJueDJ4ICpicCkKIHsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlID0gYnAtPmZpcm13YXJlOwogCXN0cnVjdCBibngyeF9md19maWxlX2hkciAqZndfaGRyOwogCXN0cnVjdCBibngyeF9md19maWxlX3NlY3Rpb24gKnNlY3Rpb25zOwotCXUxNiAqb3BzX29mZnNldHM7CiAJdTMyIG9mZnNldCwgbGVuLCBudW1fb3BzOworCXUxNiAqb3BzX29mZnNldHM7CiAJaW50IGk7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSA9IGJwLT5maXJtd2FyZTsKLQljb25zdCB1OCAqIGZ3X3ZlcjsKKwljb25zdCB1OCAqZndfdmVyOwogCiAJaWYgKGZpcm13YXJlLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBibngyeF9md19maWxlX2hkcikpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTExMzQsNyArMTE3MzgsOCBAQAogCQlvZmZzZXQgPSBiZTMyX3RvX2NwdShzZWN0aW9uc1tpXS5vZmZzZXQpOwogCQlsZW4gPSBiZTMyX3RvX2NwdShzZWN0aW9uc1tpXS5sZW4pOwogCQlpZiAob2Zmc2V0ICsgbGVuID4gZmlybXdhcmUtPnNpemUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlY3Rpb24gJWQgbGVuZ3RoIGlzIG91dCBvZiBib3VuZHNcbiIsIGkpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU2VjdGlvbiAlZCBsZW5ndGggaXMgb3V0IG9mICIKKwkJCQkJICAgICJib3VuZHNcbiIsIGkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0xMTE0Niw3ICsxMTc1MSw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYmUzMl90b19jcHUoZndfaGRyLT5pbml0X29wc19vZmZzZXRzLmxlbikgLyAyOyBpKyspIHsKIAkJaWYgKGJlMTZfdG9fY3B1KG9wc19vZmZzZXRzW2ldKSA+IG51bV9vcHMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlY3Rpb24gb2Zmc2V0ICVkIGlzIG91dCBvZiBib3VuZHNcbiIsIGkpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiU2VjdGlvbiBvZmZzZXQgJWQgaXMgb3V0IG9mICIKKwkJCQkJICAgICJib3VuZHNcbiIsIGkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0xMTE2NSwxNyArMTE3NzEsMTcgQEAKIAkJICAgICAgIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04sCiAJCSAgICAgICBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OLAogCQkgICAgICAgQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpbmxpbmUgYmUzMl90b19jcHVfbihjb25zdCB1OCAqX3NvdXJjZSwgdTggKl90YXJnZXQsIHUzMiBuKQorc3RhdGljIGlubGluZSB2b2lkIGJlMzJfdG9fY3B1X24oY29uc3QgdTggKl9zb3VyY2UsIHU4ICpfdGFyZ2V0LCB1MzIgbikKIHsKKwljb25zdCBfX2JlMzIgKnNvdXJjZSA9IChjb25zdCBfX2JlMzIgKilfc291cmNlOworCXUzMiAqdGFyZ2V0ID0gKHUzMiAqKV90YXJnZXQ7CiAJdTMyIGk7Ci0JY29uc3QgX19iZTMyICpzb3VyY2UgPSAoY29uc3QgX19iZTMyKilfc291cmNlOwotCXUzMiAqdGFyZ2V0ID0gKHUzMiopX3RhcmdldDsKIAogCWZvciAoaSA9IDA7IGkgPCBuLzQ7IGkrKykKIAkJdGFyZ2V0W2ldID0gYmUzMl90b19jcHUoc291cmNlW2ldKTsKQEAgLTExMTg1LDY2ICsxMTc5MSw2NyBAQAogICAgT3BzIGFycmF5IGlzIHN0b3JlZCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKICAgIHtvcCg4Yml0KSwgb2Zmc2V0KDI0Yml0LCBiaWcgZW5kaWFuKSwgZGF0YSgzMmJpdCwgYmlnIGVuZGlhbil9CiAgKi8KLXN0YXRpYyB2b2lkIGlubGluZSBibngyeF9wcmVwX29wcyhjb25zdCB1OCAqX3NvdXJjZSwgdTggKl90YXJnZXQsIHUzMiBuKQorc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X3ByZXBfb3BzKGNvbnN0IHU4ICpfc291cmNlLCB1OCAqX3RhcmdldCwgdTMyIG4pCiB7CisJY29uc3QgX19iZTMyICpzb3VyY2UgPSAoY29uc3QgX19iZTMyICopX3NvdXJjZTsKKwlzdHJ1Y3QgcmF3X29wICp0YXJnZXQgPSAoc3RydWN0IHJhd19vcCAqKV90YXJnZXQ7CiAJdTMyIGksIGosIHRtcDsKLQljb25zdCBfX2JlMzIgKnNvdXJjZSA9IChjb25zdCBfX2JlMzIqKV9zb3VyY2U7Ci0Jc3RydWN0IHJhd19vcCAqdGFyZ2V0ID0gKHN0cnVjdCByYXdfb3AqKV90YXJnZXQ7CiAKLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG4vODsgaSsrLCBqKz0yKSB7CisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBuLzg7IGkrKywgaiArPSAyKSB7CiAJCXRtcCA9IGJlMzJfdG9fY3B1KHNvdXJjZVtqXSk7CiAJCXRhcmdldFtpXS5vcCA9ICh0bXAgPj4gMjQpICYgMHhmZjsKIAkJdGFyZ2V0W2ldLm9mZnNldCA9ICB0bXAgJiAweGZmZmZmZjsKIAkJdGFyZ2V0W2ldLnJhd19kYXRhID0gYmUzMl90b19jcHUoc291cmNlW2orMV0pOwogCX0KIH0KLXN0YXRpYyB2b2lkIGlubGluZSBiZTE2X3RvX2NwdV9uKGNvbnN0IHU4ICpfc291cmNlLCB1OCAqX3RhcmdldCwgdTMyIG4pCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZTE2X3RvX2NwdV9uKGNvbnN0IHU4ICpfc291cmNlLCB1OCAqX3RhcmdldCwgdTMyIG4pCiB7CisJY29uc3QgX19iZTE2ICpzb3VyY2UgPSAoY29uc3QgX19iZTE2ICopX3NvdXJjZTsKKwl1MTYgKnRhcmdldCA9ICh1MTYgKilfdGFyZ2V0OwogCXUzMiBpOwotCXUxNiAqdGFyZ2V0ID0gKHUxNiopX3RhcmdldDsKLQljb25zdCBfX2JlMTYgKnNvdXJjZSA9IChjb25zdCBfX2JlMTYqKV9zb3VyY2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbi8yOyBpKyspCiAJCXRhcmdldFtpXSA9IGJlMTZfdG9fY3B1KHNvdXJjZVtpXSk7CiB9CiAKICNkZWZpbmUgQk5YMlhfQUxMT0NfQU5EX1NFVChhcnIsIGxibCwgZnVuYykgXAotCWRvIHsgICBcCi0JCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShmd19oZHItPmFyci5sZW4pOyAgIFwKLQkJYnAtPmFyciA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsgIFwKKwlkbyB7IFwKKwkJdTMyIGxlbiA9IGJlMzJfdG9fY3B1KGZ3X2hkci0+YXJyLmxlbik7IFwKKwkJYnAtPmFyciA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsgXAogCQlpZiAoIWJwLT5hcnIpIHsgXAotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmFpbGVkIHRvIGFsbG9jYXRlICVkIGJ5dGVzIGZvciAiI2FyciJcbiIsIGxlbik7IFwKKwkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyAiIFwKKwkJCQkJICAgICJmb3IgIiNhcnIiXG4iLCBsZW4pOyBcCiAJCQlnb3RvIGxibDsgXAogCQl9IFwKLQkJZnVuYyhicC0+ZmlybXdhcmUtPmRhdGEgKyBcCi0JCQliZTMyX3RvX2NwdShmd19oZHItPmFyci5vZmZzZXQpLCBcCi0JCQkodTgqKWJwLT5hcnIsIGxlbik7IFwKKwkJZnVuYyhicC0+ZmlybXdhcmUtPmRhdGEgKyBiZTMyX3RvX2NwdShmd19oZHItPmFyci5vZmZzZXQpLCBcCisJCSAgICAgKHU4ICopYnAtPmFyciwgbGVuKTsgXAogCX0gd2hpbGUgKDApCiAKLQogc3RhdGljIGludCBfX2RldmluaXQgYm54MnhfaW5pdF9maXJtd2FyZShzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJY2hhciBmd19maWxlX25hbWVbNDBdID0gezB9OwotICAgICAgICBpbnQgcmMsIG9mZnNldDsKIAlzdHJ1Y3QgYm54MnhfZndfZmlsZV9oZHIgKmZ3X2hkcjsKKwlpbnQgcmMsIG9mZnNldDsKIAogCS8qIENyZWF0ZSBhIEZXIGZpbGUgbmFtZSAqLwogCWlmIChDSElQX0lTX0UxKGJwKSkKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBzcHJpbnRmKGZ3X2ZpbGVfbmFtZSwgRldfRklMRV9QUkVGSVhfRTEpOworCQlvZmZzZXQgPSBzcHJpbnRmKGZ3X2ZpbGVfbmFtZSwgRldfRklMRV9QUkVGSVhfRTEpOwogCWVsc2UKIAkJb2Zmc2V0ID0gc3ByaW50Zihmd19maWxlX25hbWUsIEZXX0ZJTEVfUFJFRklYX0UxSCk7CiAKIAlzcHJpbnRmKGZ3X2ZpbGVfbmFtZSArIG9mZnNldCwgIiVkLiVkLiVkLiVkLmZ3IiwKIAkJQkNNXzU3MTBfRldfTUFKT1JfVkVSU0lPTiwKLSAgICAgICAgICAgICAgICBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OLAotICAgICAgICAgICAgICAgIEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04sCi0gICAgICAgICAgICAgICAgQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTik7CisJCUJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04sCisJCUJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04sCisJCUJDTV81NzEwX0ZXX0VOR0lORUVSSU5HX1ZFUlNJT04pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkxvYWRpbmcgJXNcbiIsIGZ3X2ZpbGVfbmFtZSk7CiAKIAlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmJwLT5maXJtd2FyZSwgZndfZmlsZV9uYW1lLCBkZXYpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgJXNcbiIsIGZ3X2ZpbGVfbmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGxvYWQgZmlybXdhcmUgZmlsZSAlc1xuIiwKKwkJICAgICAgIGZ3X2ZpbGVfbmFtZSk7CiAJCWdvdG8gcmVxdWVzdF9maXJtd2FyZV9leGl0OwogCX0KIApAQCAtMTEyNjQsMjcgKzExODcxLDI5IEBACiAJQk5YMlhfQUxMT0NfQU5EX1NFVChpbml0X29wcywgaW5pdF9vcHNfYWxsb2NfZXJyLCBibngyeF9wcmVwX29wcyk7CiAKIAkvKiBPZmZzZXRzICovCi0JQk5YMlhfQUxMT0NfQU5EX1NFVChpbml0X29wc19vZmZzZXRzLCBpbml0X29mZnNldHNfYWxsb2NfZXJyLCBiZTE2X3RvX2NwdV9uKTsKKwlCTlgyWF9BTExPQ19BTkRfU0VUKGluaXRfb3BzX29mZnNldHMsIGluaXRfb2Zmc2V0c19hbGxvY19lcnIsCisJCQkgICAgYmUxNl90b19jcHVfbik7CiAKIAkvKiBTVE9STXMgZmlybXdhcmUgKi8KLQlicC0+dHNlbV9pbnRfdGFibGVfZGF0YSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCWJlMzJfdG9fY3B1KGZ3X2hkci0+dHNlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOwotCWJwLT50c2VtX3ByYW1fZGF0YSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJYmUzMl90b19jcHUoZndfaGRyLT50c2VtX3ByYW1fZGF0YS5vZmZzZXQpOwotCWJwLT51c2VtX2ludF90YWJsZV9kYXRhID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJYmUzMl90b19jcHUoZndfaGRyLT51c2VtX2ludF90YWJsZV9kYXRhLm9mZnNldCk7Ci0JYnAtPnVzZW1fcHJhbV9kYXRhICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKwotCQliZTMyX3RvX2NwdShmd19oZHItPnVzZW1fcHJhbV9kYXRhLm9mZnNldCk7Ci0JYnAtPnhzZW1faW50X3RhYmxlX2RhdGEgPSBicC0+ZmlybXdhcmUtPmRhdGEgKwotCQliZTMyX3RvX2NwdShmd19oZHItPnhzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKLQlicC0+eHNlbV9wcmFtX2RhdGEgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCWJlMzJfdG9fY3B1KGZ3X2hkci0+eHNlbV9wcmFtX2RhdGEub2Zmc2V0KTsKLQlicC0+Y3NlbV9pbnRfdGFibGVfZGF0YSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCi0JCWJlMzJfdG9fY3B1KGZ3X2hkci0+Y3NlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOwotCWJwLT5jc2VtX3ByYW1fZGF0YSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKLQkJYmUzMl90b19jcHUoZndfaGRyLT5jc2VtX3ByYW1fZGF0YS5vZmZzZXQpOworCUlOSVRfVFNFTV9JTlRfVEFCTEVfREFUQShicCkgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT50c2VtX2ludF90YWJsZV9kYXRhLm9mZnNldCk7CisJSU5JVF9UU0VNX1BSQU1fREFUQShicCkgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCisJCQliZTMyX3RvX2NwdShmd19oZHItPnRzZW1fcHJhbV9kYXRhLm9mZnNldCk7CisJSU5JVF9VU0VNX0lOVF9UQUJMRV9EQVRBKGJwKSA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCisJCQliZTMyX3RvX2NwdShmd19oZHItPnVzZW1faW50X3RhYmxlX2RhdGEub2Zmc2V0KTsKKwlJTklUX1VTRU1fUFJBTV9EQVRBKGJwKSAgICAgID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+dXNlbV9wcmFtX2RhdGEub2Zmc2V0KTsKKwlJTklUX1hTRU1fSU5UX1RBQkxFX0RBVEEoYnApID0gYnAtPmZpcm13YXJlLT5kYXRhICsKKwkJCWJlMzJfdG9fY3B1KGZ3X2hkci0+eHNlbV9pbnRfdGFibGVfZGF0YS5vZmZzZXQpOworCUlOSVRfWFNFTV9QUkFNX0RBVEEoYnApICAgICAgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT54c2VtX3ByYW1fZGF0YS5vZmZzZXQpOworCUlOSVRfQ1NFTV9JTlRfVEFCTEVfREFUQShicCkgPSBicC0+ZmlybXdhcmUtPmRhdGEgKworCQkJYmUzMl90b19jcHUoZndfaGRyLT5jc2VtX2ludF90YWJsZV9kYXRhLm9mZnNldCk7CisJSU5JVF9DU0VNX1BSQU1fREFUQShicCkgICAgICA9IGJwLT5maXJtd2FyZS0+ZGF0YSArCisJCQliZTMyX3RvX2NwdShmd19oZHItPmNzZW1fcHJhbV9kYXRhLm9mZnNldCk7CiAKIAlyZXR1cm4gMDsKKwogaW5pdF9vZmZzZXRzX2FsbG9jX2VycjoKIAlrZnJlZShicC0+aW5pdF9vcHMpOwogaW5pdF9vcHNfYWxsb2NfZXJyOgpAQCAtMTEyOTYsMTggKzExOTA1LDE0IEBACiB9CiAKIAotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdGF0aWMgaW50IHZlcnNpb25fcHJpbnRlZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgYm54MnggKmJwOworCWludCBwY2llX3dpZHRoLCBwY2llX3NwZWVkOwogCWludCByYzsKIAotCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwotCiAJLyogZGV2IHplcm9lZCBpbiBpbml0X2V0aGVyZGV2ICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpicCksIE1BWF9DT05URVhUKTsKIAlpZiAoIWRldikgewpAQCAtMTEzMTgsMTQgKzExOTIzLDE0IEBACiAJYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWJwLT5tc2dsZXZlbCA9IGRlYnVnOwogCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKIAlyYyA9IGJueDJ4X2luaXRfZGV2KHBkZXYsIGRldik7CiAJaWYgKHJjIDwgMCkgewogCQlmcmVlX25ldGRldihkZXYpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0KIAlyYyA9IGJueDJ4X2luaXRfYnAoYnApOwogCWlmIChyYykKIAkJZ290byBpbml0X29uZV9leGl0OwpAQCAtMTEzNDMsMTEgKzExOTQ4LDExIEBACiAJCWdvdG8gaW5pdF9vbmVfZXhpdDsKIAl9CiAKKwlibngyeF9nZXRfcGNpZV93aWR0aF9zcGVlZChicCwgJnBjaWVfd2lkdGgsICZwY2llX3NwZWVkKTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXMgKCVjJWQpIFBDSS1FIHglZCAlcyBmb3VuZCBhdCBtZW0gJWx4LCIKIAkgICAgICAgIiBJUlEgJWQsICIsIGRldi0+bmFtZSwgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAogCSAgICAgICAoQ0hJUF9SRVYoYnApID4+IDEyKSArICdBJywgKENISVBfTUVUQUwoYnApID4+IDQpLAotCSAgICAgICBibngyeF9nZXRfcGNpZV93aWR0aChicCksCi0JICAgICAgIChibngyeF9nZXRfcGNpZV9zcGVlZChicCkgPT0gMikgPyAiNUdIeiAoR2VuMikiIDogIjIuNUdIeiIsCisJICAgICAgIHBjaWVfd2lkdGgsIChwY2llX3NwZWVkID09IDIpID8gIjVHSHogKEdlbjIpIiA6ICIyLjVHSHoiLAogCSAgICAgICBkZXYtPmJhc2VfYWRkciwgYnAtPnBkZXYtPmlycSk7CiAJcHJpbnRrKEtFUk5fQ09OVCAibm9kZSBhZGRyICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAKQEAgLTExNTU0LDYgKzEyMTU5LDExIEBACiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKSB7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCWJueDJ4X2VlaF9uaWNfdW5sb2FkKGJwKTsKIApAQCAtMTE2NDAsNiArMTIyNTAsOCBAQAogewogCWludCByZXQ7CiAKKwlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOworCiAJYm54Mnhfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiYm54MngiKTsKIAlpZiAoYm54Mnhfd3EgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgY3JlYXRlIHdvcmtxdWV1ZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9yZWcuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oCmluZGV4IGI4Y2U2ZmMuLjA2OTViZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oCkBAIC0xOTAsMTIgKzE5MCw2IEBACiAgICBfKDAuLjE1KSBzdGFuZHMgZm9yIHRoZSBjb25uZWN0aW9uIHR5cGUgKG9uZSBvZiAxNikuICovCiAjZGVmaW5lIENDTV9SRUdfTl9TTV9DVFhfTERfMAkJCQkJIDB4ZDAwNGMKICNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF8xCQkJCQkgMHhkMDA1MAotI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzEwCQkJCQkgMHhkMDA3NAotI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzExCQkJCQkgMHhkMDA3OAotI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzEyCQkJCQkgMHhkMDA3YwotI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzEzCQkJCQkgMHhkMDA4MAotI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzE0CQkJCQkgMHhkMDA4NAotI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzE1CQkJCQkgMHhkMDA4OAogI2RlZmluZSBDQ01fUkVHX05fU01fQ1RYX0xEXzIJCQkJCSAweGQwMDU0CiAjZGVmaW5lIENDTV9SRUdfTl9TTV9DVFhfTERfMwkJCQkJIDB4ZDAwNTgKICNkZWZpbmUgQ0NNX1JFR19OX1NNX0NUWF9MRF80CQkJCQkgMHhkMDA1YwpAQCAtMzcwLDcgKzM2NCw2IEBACiAjZGVmaW5lIENGQ19SRUdfTlVNX0xDSURTX0xFQVZJTkcJCQkJIDB4MTA0MDE4CiAvKiBbUlcgOF0gVGhlIGV2ZW50IGlkIGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMAkJCQkgMHhjMjAzOAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEJCQkJIDB4YzIwM2MKICNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xMAkJCQkgMHhjMjA2MAogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExCQkJCSAweGMyMDY0CiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4YzIwNjgKQEAgLTM3OCwzNyArMzcxLDI3IEBACiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTQJCQkJIDB4YzIwNzAKICNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xNQkJCQkgMHhjMjA3NAogI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE2CQkJCSAweGMyMDc4Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTcJCQkJIDB4YzIwN2MKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8xOAkJCQkgMHhjMjA4MAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE5CQkJCSAweGMyMDg0CiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMgkJCQkgMHhjMjA0MAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweGMyMDg4Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjEJCQkJIDB4YzIwOGMKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yMgkJCQkgMHhjMjA5MAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIzCQkJCSAweGMyMDk0Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjQJCQkJIDB4YzIwOTgKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yNQkJCQkgMHhjMjA5YwotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI2CQkJCSAweGMyMGEwCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjcJCQkJIDB4YzIwYTQKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF8yOAkJCQkgMHhjMjBhOAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI5CQkJCSAweGMyMGFjCiAjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMwkJCQkgMHhjMjA0NAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMwCQkJCSAweGMyMGIwCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4YzIwYjQKICNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF80CQkJCSAweGMyMDQ4Ci0vKiBbUlcgMV0gVGhlIFQgYml0IGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8wCQkJCQkgMHhjMjBiOAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMQkJCQkJIDB4YzIwYmMKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzEwCQkJCQkgMHhjMjBlMAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTEJCQkJCSAweGMyMGU0Ci0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xMgkJCQkJIDB4YzIwZTgKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzEzCQkJCQkgMHhjMjBlYwotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTQJCQkJCSAweGMyMGYwCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xNQkJCQkJIDB4YzIwZjQKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzE2CQkJCQkgMHhjMjBmOAotI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX1RfMTcJCQkJCSAweGMyMGZjCi0jZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfVF8xOAkJCQkJIDB4YzIxMDAKLSNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9UXzE5CQkJCQkgMHhjMjEwNAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzUJCQkJIDB4YzIwNGMKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF82CQkJCSAweGMyMDUwCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfRVZFTlRfNwkJCQkgMHhjMjA1NAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX0VWRU5UXzgJCQkJIDB4YzIwNTgKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9FVkVOVF85CQkJCSAweGMyMDVjCisvKiBbUlcgMV0gRm9yIGVhY2ggYWdncmVnYXRlZCBpbnRlcnJ1cHQgaW5kZXggd2hldGhlciB0aGUgbW9kZSBpcyBub3JtYWwgKDApCisgICBvciBhdXRvLW1hc2stbW9kZSAoMSkgKi8KKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzEwCQkJCSAweGMyMWUwCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV8xMQkJCQkgMHhjMjFlNAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfMTIJCQkJIDB4YzIxZTgKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzEzCQkJCSAweGMyMWVjCisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV8xNAkJCQkgMHhjMjFmMAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfMTUJCQkJIDB4YzIxZjQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzE2CQkJCSAweGMyMWY4CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV82IAkJCQkgMHhjMjFkMAorI2RlZmluZSBDU0RNX1JFR19BR0dfSU5UX01PREVfNyAJCQkJIDB4YzIxZDQKKyNkZWZpbmUgQ1NETV9SRUdfQUdHX0lOVF9NT0RFXzggCQkJCSAweGMyMWQ4CisjZGVmaW5lIENTRE1fUkVHX0FHR19JTlRfTU9ERV85IAkJCQkgMHhjMjFkYwogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIENTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHhjMjAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTYzMywyNCArNjE2LDYgQEAKICNkZWZpbmUgRE1BRV9SRUdfR09fQzEJCQkJCQkgMHgxMDIwODQKIC8qIFtSVyAxXSBDb21tYW5kIDEwIGdvLiAqLwogI2RlZmluZSBETUFFX1JFR19HT19DMTAgCQkJCQkgMHgxMDIwODgKLSNkZWZpbmUgRE1BRV9SRUdfR09fQzEwX1NJWkUJCQkJCSAxCi0vKiBbUlcgMV0gQ29tbWFuZCAxMSBnby4gKi8KLSNkZWZpbmUgRE1BRV9SRUdfR09fQzExIAkJCQkJIDB4MTAyMDhjCi0jZGVmaW5lIERNQUVfUkVHX0dPX0MxMV9TSVpFCQkJCQkgMQotLyogW1JXIDFdIENvbW1hbmQgMTIgZ28uICovCi0jZGVmaW5lIERNQUVfUkVHX0dPX0MxMiAJCQkJCSAweDEwMjA5MAotI2RlZmluZSBETUFFX1JFR19HT19DMTJfU0laRQkJCQkJIDEKLS8qIFtSVyAxXSBDb21tYW5kIDEzIGdvLiAqLwotI2RlZmluZSBETUFFX1JFR19HT19DMTMgCQkJCQkgMHgxMDIwOTQKLSNkZWZpbmUgRE1BRV9SRUdfR09fQzEzX1NJWkUJCQkJCSAxCi0vKiBbUlcgMV0gQ29tbWFuZCAxNCBnby4gKi8KLSNkZWZpbmUgRE1BRV9SRUdfR09fQzE0IAkJCQkJIDB4MTAyMDk4Ci0jZGVmaW5lIERNQUVfUkVHX0dPX0MxNF9TSVpFCQkJCQkgMQotLyogW1JXIDFdIENvbW1hbmQgMTUgZ28uICovCi0jZGVmaW5lIERNQUVfUkVHX0dPX0MxNSAJCQkJCSAweDEwMjA5YwotI2RlZmluZSBETUFFX1JFR19HT19DMTVfU0laRQkJCQkJIDEKLS8qIFtSVyAxXSBDb21tYW5kIDEwIGdvLiAqLwotI2RlZmluZSBETUFFX1JFR19HT19DMTAgCQkJCQkgMHgxMDIwODgKIC8qIFtSVyAxXSBDb21tYW5kIDExIGdvLiAqLwogI2RlZmluZSBETUFFX1JFR19HT19DMTEgCQkJCQkgMHgxMDIwOGMKIC8qIFtSVyAxXSBDb21tYW5kIDEyIGdvLiAqLwpAQCAtODAwLDcgKzc2NSw2IEBACiAjZGVmaW5lIE1DUF9SRUdfTUNQUl9OVk1fUkVBRAkJCQkJIDB4ODY0MTAKICNkZWZpbmUgTUNQX1JFR19NQ1BSX05WTV9TV19BUkIgCQkJCSAweDg2NDIwCiAjZGVmaW5lIE1DUF9SRUdfTUNQUl9OVk1fV1JJVEUJCQkJCSAweDg2NDA4Ci0jZGVmaW5lIE1DUF9SRUdfTUNQUl9OVk1fV1JJVEUxIAkJCQkgMHg4NjQyOAogI2RlZmluZSBNQ1BfUkVHX01DUFJfU0NSQVRDSAkJCQkJIDB4YTAwMDAKIC8qIFtSIDMyXSByZWFkIGZpcnN0IDMyIGJpdCBhZnRlciBpbnZlcnNpb24gb2YgZnVuY3Rpb24gMC4gbWFwcGVkIGFzCiAgICBmb2xsb3dzOiBbMF0gTklHIGF0dGVudGlvbiBmb3IgZnVuY3Rpb24wOyBbMV0gTklHIGF0dGVudGlvbiBmb3IKQEAgLTExODYsMTkgKzExNTAsNyBAQAogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEwCQkJCSAweGEwMjgKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMQkJCQkgMHhhMDJjCiAjZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTIJCQkJIDB4YTAzMAotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEzCQkJCSAweGEwMzQKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xNAkJCQkgMHhhMDM4Ci0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTUJCQkJIDB4YTAzYwotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzE2CQkJCSAweGEwNDAKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xNwkJCQkgMHhhMDQ0Ci0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTgJCQkJIDB4YTA0OAotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzE5CQkJCSAweGEwNGMKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8xMAkJCQkgMHhhMDI4Ci0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMTEJCQkJIDB4YTAyYwotI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzEyCQkJCSAweGEwMzAKICNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8yCQkJCSAweGEwMDgKLSNkZWZpbmUgTUlTQ19SRUdfQUVVX0dFTkVSQUxfQVRUTl8yMAkJCQkgMHhhMDUwCi0jZGVmaW5lIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMjEJCQkJIDB4YTA1NAogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzMJCQkJIDB4YTAwYwogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzQJCQkJIDB4YTAxMAogI2RlZmluZSBNSVNDX1JFR19BRVVfR0VORVJBTF9BVFROXzUJCQkJIDB4YTAxNApAQCAtMTI5MCwxMzcgKzEyNDIsMTMgQEAKICAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKICAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKICAgIGJlIGFzc2VydGVkKS4gKi8KLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTAJCQkJIDB4YTNlMAotI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xMF9TSVpFIAkJCSAyCi0vKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAotICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAotICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1Ci0gICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQotICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQotICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCi0gICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCi0gICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCi0gICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KLSAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKLSAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCi0gICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KLSAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKLSAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKLSAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKLSAgIGJlIGFzc2VydGVkKS4gKi8KLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTEJCQkJIDB4YTNlOAotI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xMV9TSVpFIAkJCSAyCi0vKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAotICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAotICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1Ci0gICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQotICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQotICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCi0gICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCi0gICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCi0gICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KLSAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKLSAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCi0gICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KLSAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKLSAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKLSAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKLSAgIGJlIGFzc2VydGVkKS4gKi8KLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTIJCQkJIDB4YTNmMAotI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xMl9TSVpFIAkJCSAyCi0vKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAotICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAotICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1Ci0gICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQotICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQotICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCi0gICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCi0gICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCi0gICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KLSAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKLSAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCi0gICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KLSAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKLSAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKLSAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKLSAgIGJlIGFzc2VydGVkKS4gKi8KLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTMJCQkJIDB4YTNmOAotI2RlZmluZSBNSVNDX1JFR19EUklWRVJfQ09OVFJPTF8xM19TSVpFIAkJCSAyCi0vKiBbUlcgMzJdIFRoZSBmb2xsb3dpbmcgZHJpdmVyIHJlZ2lzdGVycygxLi4uMTYpIHJlcHJlc2VudCAxNiBkcml2ZXJzIGFuZAotICAgMzIgY2xpZW50cy4gRWFjaCBjbGllbnQgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb25lIGRyaXZlciBvbmx5LiBPbmUgaW4gZWFjaAotICAgYml0IHJlcHJlc2VudCB0aGF0IHRoaXMgZHJpdmVyIGNvbnRyb2wgdGhlIGFwcHJvcHJpYXRlIGNsaWVudCAoRXg6IGJpdCA1Ci0gICBpcyBzZXQgbWVhbnMgdGhpcyBkcml2ZXIgY29udHJvbCBjbGllbnQgbnVtYmVyIDUpLiBhZGRyMSA9IHNldDsgYWRkcjAgPQotICAgY2xlYXI7IHJlYWQgZnJvbSBib3RoIGFkZHJlc3NlcyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0ID0gc3RhdHVzLiB3cml0ZQotICAgdG8gYWRkcmVzcyAxIHdpbGwgc2V0IGEgcmVxdWVzdCB0byBjb250cm9sIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyCi0gICBhcHByb3ByaWF0ZSBiaXQgKGluIHRoZSB3cml0ZSBjb21tYW5kKSBpcyBzZXQuIGlmIHRoZSBjbGllbnQgaXMgZnJlZSAodGhlCi0gICBhcHByb3ByaWF0ZSBiaXQgaW4gYWxsIHRoZSBvdGhlciBkcml2ZXJzIGlzIGNsZWFyKSBvbmUgd2lsbCBiZSB3cml0dGVuIHRvCi0gICB0aGF0IGRyaXZlciByZWdpc3RlcjsgaWYgdGhlIGNsaWVudCBpc24ndCBmcmVlIHRoZSBiaXQgd2lsbCByZW1haW4gemVyby4KLSAgIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgc2V0ICh0aGUgZHJpdmVyIHJlcXVlc3QgdG8gZ2FpbiBjb250cm9sIG9uIGEKLSAgIGNsaWVudCBpdCBhbHJlYWR5IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXCi0gICBpbnRlcnJ1cHQgd2lsbCBiZSBhc3NlcnRlZCkuIHdyaXRlIHRvIGFkZHJlc3MgMCB3aWxsIHNldCBhIHJlcXVlc3QgdG8KLSAgIGZyZWUgYWxsIHRoZSBjbGllbnRzIHRoYXQgdGhlaXIgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMKLSAgIHNldC4gaWYgdGhlIGFwcHJvcHJpYXRlIGJpdCBpcyBjbGVhciAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGZyZWUgYSBjbGllbnQKLSAgIGl0IGRvZXNuJ3QgY29udHJvbHMgdGhlIH5NSVNDX1JFR0lTVEVSU19JTlRfU1RTLkdFTkVSSUNfU1cgaW50ZXJydXB0IHdpbGwKLSAgIGJlIGFzc2VydGVkKS4gKi8KICNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMQkJCQkgMHhhNTEwCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE0CQkJCSAweGE1ZTAKLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTRfU0laRSAJCQkgMgotLyogW1JXIDMyXSBUaGUgZm9sbG93aW5nIGRyaXZlciByZWdpc3RlcnMoMS4uLjE2KSByZXByZXNlbnQgMTYgZHJpdmVycyBhbmQKLSAgIDMyIGNsaWVudHMuIEVhY2ggY2xpZW50IGNhbiBiZSBjb250cm9sbGVkIGJ5IG9uZSBkcml2ZXIgb25seS4gT25lIGluIGVhY2gKLSAgIGJpdCByZXByZXNlbnQgdGhhdCB0aGlzIGRyaXZlciBjb250cm9sIHRoZSBhcHByb3ByaWF0ZSBjbGllbnQgKEV4OiBiaXQgNQotICAgaXMgc2V0IG1lYW5zIHRoaXMgZHJpdmVyIGNvbnRyb2wgY2xpZW50IG51bWJlciA1KS4gYWRkcjEgPSBzZXQ7IGFkZHIwID0KLSAgIGNsZWFyOyByZWFkIGZyb20gYm90aCBhZGRyZXNzZXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCA9IHN0YXR1cy4gd3JpdGUKLSAgIHRvIGFkZHJlc3MgMSB3aWxsIHNldCBhIHJlcXVlc3QgdG8gY29udHJvbCBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpcgotICAgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMgc2V0LiBpZiB0aGUgY2xpZW50IGlzIGZyZWUgKHRoZQotICAgYXBwcm9wcmlhdGUgYml0IGluIGFsbCB0aGUgb3RoZXIgZHJpdmVycyBpcyBjbGVhcikgb25lIHdpbGwgYmUgd3JpdHRlbiB0bwotICAgdGhhdCBkcml2ZXIgcmVnaXN0ZXI7IGlmIHRoZSBjbGllbnQgaXNuJ3QgZnJlZSB0aGUgYml0IHdpbGwgcmVtYWluIHplcm8uCi0gICBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIHNldCAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGdhaW4gY29udHJvbCBvbiBhCi0gICBjbGllbnQgaXQgYWxyZWFkeSBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVwotICAgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQpLiB3cml0ZSB0byBhZGRyZXNzIDAgd2lsbCBzZXQgYSByZXF1ZXN0IHRvCi0gICBmcmVlIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzCi0gICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50Ci0gICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCi0gICBiZSBhc3NlcnRlZCkuICovCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE1CQkJCSAweGE1ZTgKLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTVfU0laRSAJCQkgMgotLyogW1JXIDMyXSBUaGUgZm9sbG93aW5nIGRyaXZlciByZWdpc3RlcnMoMS4uLjE2KSByZXByZXNlbnQgMTYgZHJpdmVycyBhbmQKLSAgIDMyIGNsaWVudHMuIEVhY2ggY2xpZW50IGNhbiBiZSBjb250cm9sbGVkIGJ5IG9uZSBkcml2ZXIgb25seS4gT25lIGluIGVhY2gKLSAgIGJpdCByZXByZXNlbnQgdGhhdCB0aGlzIGRyaXZlciBjb250cm9sIHRoZSBhcHByb3ByaWF0ZSBjbGllbnQgKEV4OiBiaXQgNQotICAgaXMgc2V0IG1lYW5zIHRoaXMgZHJpdmVyIGNvbnRyb2wgY2xpZW50IG51bWJlciA1KS4gYWRkcjEgPSBzZXQ7IGFkZHIwID0KLSAgIGNsZWFyOyByZWFkIGZyb20gYm90aCBhZGRyZXNzZXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCA9IHN0YXR1cy4gd3JpdGUKLSAgIHRvIGFkZHJlc3MgMSB3aWxsIHNldCBhIHJlcXVlc3QgdG8gY29udHJvbCBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpcgotICAgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMgc2V0LiBpZiB0aGUgY2xpZW50IGlzIGZyZWUgKHRoZQotICAgYXBwcm9wcmlhdGUgYml0IGluIGFsbCB0aGUgb3RoZXIgZHJpdmVycyBpcyBjbGVhcikgb25lIHdpbGwgYmUgd3JpdHRlbiB0bwotICAgdGhhdCBkcml2ZXIgcmVnaXN0ZXI7IGlmIHRoZSBjbGllbnQgaXNuJ3QgZnJlZSB0aGUgYml0IHdpbGwgcmVtYWluIHplcm8uCi0gICBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIHNldCAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGdhaW4gY29udHJvbCBvbiBhCi0gICBjbGllbnQgaXQgYWxyZWFkeSBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVwotICAgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQpLiB3cml0ZSB0byBhZGRyZXNzIDAgd2lsbCBzZXQgYSByZXF1ZXN0IHRvCi0gICBmcmVlIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzCi0gICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50Ci0gICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCi0gICBiZSBhc3NlcnRlZCkuICovCi0jZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzE2CQkJCSAweGE1ZjAKLSNkZWZpbmUgTUlTQ19SRUdfRFJJVkVSX0NPTlRST0xfMTZfU0laRSAJCQkgMgotLyogW1JXIDMyXSBUaGUgZm9sbG93aW5nIGRyaXZlciByZWdpc3RlcnMoMS4uLjE2KSByZXByZXNlbnQgMTYgZHJpdmVycyBhbmQKLSAgIDMyIGNsaWVudHMuIEVhY2ggY2xpZW50IGNhbiBiZSBjb250cm9sbGVkIGJ5IG9uZSBkcml2ZXIgb25seS4gT25lIGluIGVhY2gKLSAgIGJpdCByZXByZXNlbnQgdGhhdCB0aGlzIGRyaXZlciBjb250cm9sIHRoZSBhcHByb3ByaWF0ZSBjbGllbnQgKEV4OiBiaXQgNQotICAgaXMgc2V0IG1lYW5zIHRoaXMgZHJpdmVyIGNvbnRyb2wgY2xpZW50IG51bWJlciA1KS4gYWRkcjEgPSBzZXQ7IGFkZHIwID0KLSAgIGNsZWFyOyByZWFkIGZyb20gYm90aCBhZGRyZXNzZXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCA9IHN0YXR1cy4gd3JpdGUKLSAgIHRvIGFkZHJlc3MgMSB3aWxsIHNldCBhIHJlcXVlc3QgdG8gY29udHJvbCBhbGwgdGhlIGNsaWVudHMgdGhhdCB0aGVpcgotICAgYXBwcm9wcmlhdGUgYml0IChpbiB0aGUgd3JpdGUgY29tbWFuZCkgaXMgc2V0LiBpZiB0aGUgY2xpZW50IGlzIGZyZWUgKHRoZQotICAgYXBwcm9wcmlhdGUgYml0IGluIGFsbCB0aGUgb3RoZXIgZHJpdmVycyBpcyBjbGVhcikgb25lIHdpbGwgYmUgd3JpdHRlbiB0bwotICAgdGhhdCBkcml2ZXIgcmVnaXN0ZXI7IGlmIHRoZSBjbGllbnQgaXNuJ3QgZnJlZSB0aGUgYml0IHdpbGwgcmVtYWluIHplcm8uCi0gICBpZiB0aGUgYXBwcm9wcmlhdGUgYml0IGlzIHNldCAodGhlIGRyaXZlciByZXF1ZXN0IHRvIGdhaW4gY29udHJvbCBvbiBhCi0gICBjbGllbnQgaXQgYWxyZWFkeSBjb250cm9scyB0aGUgfk1JU0NfUkVHSVNURVJTX0lOVF9TVFMuR0VORVJJQ19TVwotICAgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQpLiB3cml0ZSB0byBhZGRyZXNzIDAgd2lsbCBzZXQgYSByZXF1ZXN0IHRvCi0gICBmcmVlIGFsbCB0aGUgY2xpZW50cyB0aGF0IHRoZWlyIGFwcHJvcHJpYXRlIGJpdCAoaW4gdGhlIHdyaXRlIGNvbW1hbmQpIGlzCi0gICBzZXQuIGlmIHRoZSBhcHByb3ByaWF0ZSBiaXQgaXMgY2xlYXIgKHRoZSBkcml2ZXIgcmVxdWVzdCB0byBmcmVlIGEgY2xpZW50Ci0gICBpdCBkb2Vzbid0IGNvbnRyb2xzIHRoZSB+TUlTQ19SRUdJU1RFUlNfSU5UX1NUUy5HRU5FUklDX1NXIGludGVycnVwdCB3aWxsCi0gICBiZSBhc3NlcnRlZCkuICovCiAjZGVmaW5lIE1JU0NfUkVHX0RSSVZFUl9DT05UUk9MXzcJCQkJIDB4YTNjOAogLyogW1JXIDFdIGUxaG1mIGZvciBXT0wuIElmIGNsciBXT0wgc2lnbmFsIG8gdGhlIFBYUCB3aWxsIGJlIHNlbmQgb24gYml0IDAKICAgIG9ubHkuICovCiAjZGVmaW5lIE1JU0NfUkVHX0UxSE1GX01PREUJCQkJCSAweGE1ZjgKKy8qIFtSVyAzMl0gRGVidWcgb25seTogc3BhcmUgUlcgcmVnaXN0ZXIgcmVzZXQgYnkgY29yZSByZXNldCAqLworI2RlZmluZSBNSVNDX1JFR19HRU5FUklDX0NSXzAJCQkJCSAweGE0NjAKIC8qIFtSVyAzMl0gR1BJTy4gWzMxLTI4XSBGTE9BVCBwb3J0IDA7IFsyNy0yNF0gRkxPQVQgcG9ydCAwOyBXaGVuIGFueSBvZgogICAgdGhlc2UgYml0cyBpcyB3cml0dGVuIGFzIGEgJzEnOyB0aGUgY29ycmVzcG9uZGluZyBTUElPIGJpdCB3aWxsIHR1cm4gb2ZmCiAgICBpdCdzIGRyaXZlcnMgYW5kIGJlY29tZSBhbiBpbnB1dC4gVGhpcyBpcyB0aGUgcmVzZXQgc3RhdGUgb2YgYWxsIEdQSU8KQEAgLTE2MTYsNiArMTQ0NCwxMSBAQAogLyogW1JXIDFdIFNldCBieSB0aGUgTUNQIHRvIHJlbWVtYmVyIGlmIG9uZSBvciBtb3JlIG9mIHRoZSBkcml2ZXJzIGlzL2FyZQogICAgbG9hZGVkOyAwLXByZXBhcmU7IC11bnByZXBhcmUgKi8KICNkZWZpbmUgTUlTQ19SRUdfVU5QUkVQQVJFRAkJCQkJIDB4YTQyNAorI2RlZmluZSBOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfQlJDU1QJICgweDE8PDApCisjZGVmaW5lIE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19NTENTVAkgKDB4MTw8MSkKKyNkZWZpbmUgTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX05PX1ZMQU4JICgweDE8PDQpCisjZGVmaW5lIE5JR19MTEgwX0JSQjFfRFJWX01BU0tfUkVHX0xMSDBfQlJCMV9EUlZfTUFTS19VTkNTVAkgKDB4MTw8MikKKyNkZWZpbmUgTklHX0xMSDBfQlJCMV9EUlZfTUFTS19SRUdfTExIMF9CUkIxX0RSVl9NQVNLX1ZMQU4JICgweDE8PDMpCiAjZGVmaW5lIE5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19FTUFDMF9NSVNDX01JX0lOVAkgKDB4MTw8MCkKICNkZWZpbmUgTklHX01BU0tfSU5URVJSVVBUX1BPUlQwX1JFR19NQVNLX1NFUkRFUzBfTElOS19TVEFUVVMJICgweDE8PDkpCiAjZGVmaW5lIE5JR19NQVNLX0lOVEVSUlVQVF9QT1JUMF9SRUdfTUFTS19YR1hTMF9MSU5LMTBHIAkgKDB4MTw8MTUpCkBAIC0xNjU0LDEyICsxNDg3LDEyIEBACiAvKiBbUlcgMV0gTUFDIGNvbmZpZ3VyYXRpb24gZm9yIHBhY2tldHMgb2YgcG9ydDAuIElmIDEgLSBhbGwgcGFja2V0IG91dHB1dHMKICAgIHRvIGVtYWMgZm9yIHBvcnQwOyBvdGhlciB3YXkgdG8gYm1hYyBmb3IgcG9ydDAgKi8KICNkZWZpbmUgTklHX1JFR19FR1JFU1NfRU1BQzBfUE9SVAkJCQkgMHgxMDA1OAotLyogW1JXIDMyXSBUWF9NTkdfRklGTyBpbiBOSUdfVFhfUE9SVDA7IGRhdGFbMzE6MF0gd3JpdHRlbiBpbiBGSUZPIG9yZGVyLiAqLwotI2RlZmluZSBOSUdfUkVHX0VHUkVTU19NTkcwX0ZJRk8JCQkJIDB4MTA0NWMKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFRYIFBCRiB1c2VyIHBhY2tldCBwb3J0MCBJRiAqLwogI2RlZmluZSBOSUdfUkVHX0VHUkVTU19QQkYwX0lOX0VOCQkJCSAweDEwMGNjCiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBUWCBQQkYgdXNlciBwYWNrZXQgcG9ydDEgSUYgKi8KICNkZWZpbmUgTklHX1JFR19FR1JFU1NfUEJGMV9JTl9FTgkJCQkgMHgxMDBkMAorLyogW1JXIDFdIElucHV0IGVuYWJsZSBmb3IgVFggVU1QIG1hbmFnZW1lbnQgcGFja2V0IHBvcnQwIElGICovCisjZGVmaW5lIE5JR19SRUdfRUdSRVNTX1VNUDBfSU5fRU4JCQkJIDB4MTAwZDQKIC8qIFtSVyAxXSBJbnB1dCBlbmFibGUgZm9yIFJYX0VNQUMwIElGICovCiAjZGVmaW5lIE5JR19SRUdfRU1BQzBfSU5fRU4JCQkJCSAweDEwMGE0CiAvKiBbUlcgMV0gb3V0cHV0IGVuYWJsZSBmb3IgVFggRU1BQyBwYXVzZSBwb3J0IDAgSUYgKi8KQEAgLTE2ODMsNiArMTUxNiwyNCBAQAogLyogW1JXIDE3XSBEZWJ1ZyBvbmx5LiBSWF9FT1BfRFNDUl9sYl9GSUZPIGluIE5JR19SWF9FT1AuIERhdGEKICAgIHBhY2tldF9sZW5ndGhbMTM6MF07IG1hY19lcnJvclsxNF07IHRydW5jX2Vycm9yWzE1XTsgcGFyaXR5WzE2XSAqLwogI2RlZmluZSBOSUdfUkVHX0lOR1JFU1NfRU9QX0xCX0ZJRk8JCQkJIDB4MTA0ZTQKKy8qIFtSVyAyN10gMCAtIG11c3QgYmUgYWN0aXZlIGZvciBFdmVyZXN0IEEwOyAxLSBmb3IgRXZlcmVzdCBCMCB3aGVuIGxhdGNoCisgICBsb2dpYyBmb3IgaW50ZXJydXB0cyBtdXN0IGJlIHVzZWQuIEVuYWJsZSBwZXIgYml0IG9mIGludGVycnVwdCBvZgorICAgfmxhdGNoX3N0YXR1cy5sYXRjaF9zdGF0dXMgKi8KKyNkZWZpbmUgTklHX1JFR19MQVRDSF9CQ18wCQkJCQkgMHgxNjIxMAorLyogW1JXIDI3XSBMYXRjaCBmb3IgZWFjaCBpbnRlcnJ1cHQgZnJvbSBVbmljb3JlLmJbMF0KKyAgIHN0YXR1c19lbWFjMF9taXNjX21pX2ludDsgYlsxXSBzdGF0dXNfZW1hYzBfbWlzY19taV9jb21wbGV0ZTsKKyAgIGJbMl1zdGF0dXNfZW1hYzBfbWlzY19jZmdfY2hhbmdlOyBiWzNdc3RhdHVzX2VtYWMwX21pc2NfbGlua19zdGF0dXM7CisgICBiWzRdc3RhdHVzX2VtYWMwX21pc2NfbGlua19jaGFuZ2U7IGJbNV1zdGF0dXNfZW1hYzBfbWlzY19hdHRuOworICAgYls2XXN0YXR1c19zZXJkZXMwX21hY19jcnM7IGJbN11zdGF0dXNfc2VyZGVzMF9hdXRvbmVnX2NvbXBsZXRlOworICAgYls4XXN0YXR1c19zZXJkZXMwX2ZpYmVyX3J4YWN0OyBiWzldc3RhdHVzX3NlcmRlczBfbGlua19zdGF0dXM7CisgICBiWzEwXXN0YXR1c19zZXJkZXMwX21yX3BhZ2Vfcng7IGJbMTFdc3RhdHVzX3NlcmRlczBfY2w3M19hbl9jb21wbGV0ZTsKKyAgIGJbMTJdc3RhdHVzX3NlcmRlczBfY2w3M19tcl9wYWdlX3J4OyBiWzEzXXN0YXR1c19zZXJkZXMwX3J4X3NpZ2RldDsKKyAgIGJbMTRdc3RhdHVzX3hneHMwX3JlbW90ZW1kaW9yZXE7IGJbMTVdc3RhdHVzX3hneHMwX2xpbmsxMGc7CisgICBiWzE2XXN0YXR1c194Z3hzMF9hdXRvbmVnX2NvbXBsZXRlOyBiWzE3XXN0YXR1c194Z3hzMF9maWJlcl9yeGFjdDsKKyAgIGJbMjE6MThdc3RhdHVzX3hneHMwX2xpbmtfc3RhdHVzOyBiWzIyXXN0YXR1c194Z3hzMF9tcl9wYWdlX3J4OworICAgYlsyM11zdGF0dXNfeGd4czBfY2w3M19hbl9jb21wbGV0ZTsgYlsyNF1zdGF0dXNfeGd4czBfY2w3M19tcl9wYWdlX3J4OworICAgYlsyNV1zdGF0dXNfeGd4czBfcnhfc2lnZGV0OyBiWzI2XXN0YXR1c194Z3hzMF9tYWNfY3JzICovCisjZGVmaW5lIE5JR19SRUdfTEFUQ0hfU1RBVFVTXzAJCQkJCSAweDE4MDAwCiAvKiBbUlcgMV0gbGVkIDEwZyBmb3IgcG9ydCAwICovCiAjZGVmaW5lIE5JR19SRUdfTEVEXzEwR19QMAkJCQkJIDB4MTAzMjAKIC8qIFtSVyAxXSBsZWQgMTBnIGZvciBwb3J0IDEgKi8KQEAgLTE3MjIsNiArMTU3Myw3IEBACiAvKiBbUlcgM10gZm9yIHBvcnQwIGVuYWJsZSBmb3IgbGxmYyBwcHAgYW5kIHBhdXNlLiBiMCAtIGJyYjEgZW5hYmxlOyBiMS0KICAgIHRzZG0gZW5hYmxlOyBiMi0gdXNkbSBlbmFibGUgKi8KICNkZWZpbmUgTklHX1JFR19MTEZDX0VHUkVTU19TUkNfRU5BQkxFXzAJCQkgMHgxNjA3MAorI2RlZmluZSBOSUdfUkVHX0xMRkNfRUdSRVNTX1NSQ19FTkFCTEVfMQkJCSAweDE2MDc0CiAvKiBbUlcgMV0gU0FGQyBlbmFibGUgZm9yIHBvcnQwLiBUaGlzIHJlZ2lzdGVyIG1heSBnZXQgMSBvbmx5IHdoZW4KICAgIH5wcHBfZW5hYmxlLnBwcF9lbmFibGUgPSAwIGFuZCBwYXVzZV9lbmFibGUucGF1c2VfZW5hYmxlID0wIGZvciB0aGUgc2FtZQogICAgcG9ydCAqLwpAQCAtMTg3Miw2ICsxNzI0LDcgQEAKICNkZWZpbmUgTklHX1JFR19YR1hTX0xBTkVfU0VMX1AwCQkJCSAweDEwMmU4CiAvKiBbUlcgMV0gc2VsZWN0aW9uIGZvciBwb3J0MCBmb3IgTklHX01VWCBibG9jayA6IDAgPSBTZXJEZXM7IDEgPSBYR1hTICovCiAjZGVmaW5lIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMCQkJCSAweDEwMmUwCisjZGVmaW5lIE5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfRU1BQzBfTUlTQ19NSV9JTlQgICgweDE8PDApCiAjZGVmaW5lIE5JR19TVEFUVVNfSU5URVJSVVBUX1BPUlQwX1JFR19TVEFUVVNfU0VSREVTMF9MSU5LX1NUQVRVUyAoMHgxPDw5KQogI2RlZmluZSBOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1hHWFMwX0xJTksxMEcJICgweDE8PDE1KQogI2RlZmluZSBOSUdfU1RBVFVTX0lOVEVSUlVQVF9QT1JUMF9SRUdfU1RBVFVTX1hHWFMwX0xJTktfU1RBVFVTICAoMHhmPDwxOCkKQEAgLTIwNzIsNiArMTkyNSw3IEBACiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9BRERSXzk0X0YwIAkJCQkgMHgxMjA1NDAKICNkZWZpbmUgUFhQMl9SRUdfUEdMX0NPTlRST0wwCQkJCQkgMHgxMjA0OTAKICNkZWZpbmUgUFhQMl9SRUdfUEdMX0NPTlRST0wxCQkJCQkgMHgxMjA1MTQKKyNkZWZpbmUgUFhQMl9SRUdfUEdMX0RFQlVHCQkJCQkgMHgxMjA1MjAKIC8qIFtSVyAzMl0gdGhpcmQgZHdvcmQgZGF0YSBvZiBleHBhbnNpb24gcm9tIHJlcXVlc3QuIHRoaXMgcmVnaXN0ZXIgaXMKICAgIHNwZWNpYWwuIHJlYWRpbmcgZnJvbSBpdCBwcm92aWRlcyBhIHZlY3RvciBvdXRzdGFuZGluZyByZWFkIHJlcXVlc3RzLiBpZgogICAgYSBiaXQgaXMgemVybyBpdCBtZWFucyB0aGF0IGEgcmVhZCByZXF1ZXN0IG9uIHRoZSBjb3JyZXNwb25kaW5nIHRhZyBkaWQKQEAgLTIxNDIsMTEgKzE5OTYsOCBAQAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19BREQxCQkJCQkgMHgxMjAxYzAKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQUREMTAgCQkJCSAweDEyMDFlNAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19BREQxMSAJCQkJIDB4MTIwMWU4Ci0jZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEwIAkJCQkgMHgxMjAxZTQKLSNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQUREMTEgCQkJCSAweDEyMDFlOAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19BREQyCQkJCQkgMHgxMjAxYzQKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQUREMjggCQkJCSAweDEyMDIyOAotI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19BREQyOCAJCQkJIDB4MTIwMjI4CiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0FERDMJCQkJCSAweDEyMDFjOAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19BREQ2CQkJCQkgMHgxMjAxZDQKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfQURENwkJCQkJIDB4MTIwMWQ4CkBAIC0yMTU2LDExICsyMDA3LDggQEAKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDEJCQkJCSAweDEyMDJiMAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMTAJCQkJCSAweDEyMDJkNAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMTEJCQkJCSAweDEyMDJkOAotI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMTAJCQkJCSAweDEyMDJkNAotI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMTEJCQkJCSAweDEyMDJkOAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MMgkJCQkJIDB4MTIwMmI0CiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0wyOAkJCQkJIDB4MTIwMzE4Ci0jZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0wyOAkJCQkJIDB4MTIwMzE4CiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX0wzCQkJCQkgMHgxMjAyYjgKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfTDYJCQkJCSAweDEyMDJjNAogI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19MNwkJCQkJIDB4MTIwMmM4CkBAIC0yMTcwLDExICsyMDE4LDggQEAKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUIxCQkJCQkgMHgxMjAyMzgKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUIxMAkJCQkJIDB4MTIwMjVjCiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCMTEJCQkJCSAweDEyMDI2MAotI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19VQjEwCQkJCQkgMHgxMjAyNWMKLSNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUIxMQkJCQkJIDB4MTIwMjYwCiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCMgkJCQkJIDB4MTIwMjNjCiAjZGVmaW5lIFBYUDJfUkVHX1BTV1JRX0JXX1VCMjgJCQkJCSAweDEyMDJhMAotI2RlZmluZSBQWFAyX1JFR19QU1dSUV9CV19VQjI4CQkJCQkgMHgxMjAyYTAKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUIzCQkJCQkgMHgxMjAyNDAKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUI2CQkJCQkgMHgxMjAyNGMKICNkZWZpbmUgUFhQMl9SRUdfUFNXUlFfQldfVUI3CQkJCQkgMHgxMjAyNTAKQEAgLTIyMzIsNiArMjA3Nyw5IEBACiAgICBhbGxvY2F0ZWQgZm9yIHZxMjIgKi8KICNkZWZpbmUgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlEyMgkJCQkgMHgxMjAzZDAKIC8qIFtSVyA4XSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmxvY2tzIGluIFRldHJpcyBCdWZmZXIgdGhhdCBjYW4gYmUKKyAgIGFsbG9jYXRlZCBmb3IgdnEyNSAqLworI2RlZmluZSBQWFAyX1JFR19SRF9NQVhfQkxLU19WUTI1CQkJCSAweDEyMDNkYworLyogW1JXIDhdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgaW4gVGV0cmlzIEJ1ZmZlciB0aGF0IGNhbiBiZQogICAgYWxsb2NhdGVkIGZvciB2cTYgKi8KICNkZWZpbmUgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlE2CQkJCSAweDEyMDM5MAogLyogW1JXIDhdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBibG9ja3MgaW4gVGV0cmlzIEJ1ZmZlciB0aGF0IGNhbiBiZQpAQCAtMjc2MiwxNiArMjYxMCw2IEBACiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNwkJCQkJIDB4MTZlNGI4CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOAkJCQkJIDB4MTZlNGJjCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOQkJCQkJIDB4MTZlNGMwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMAkJCQkJIDB4MTZlNDljCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMQkJCQkJIDB4MTZlNGEwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMgkJCQkJIDB4MTZlNGE0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwMwkJCQkJIDB4MTZlNGE4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNAkJCQkJIDB4MTZlNGFjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNQkJCQkJIDB4MTZlNGIwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNgkJCQkJIDB4MTZlNGI0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwNwkJCQkJIDB4MTZlNGI4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOAkJCQkJIDB4MTZlNGJjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzEwOQkJCQkJIDB4MTZlNGMwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzExCQkJCQkgMHgxNjgxMjAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTEwCQkJCQkgMHgxNmU0YzQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTExCQkJCQkgMHgxNmU0YzgKQEAgLTI3ODMsMTYgKzI2MjEsNiBAQAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTcJCQkJCSAweDE2ZTRlMAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTgJCQkJCSAweDE2ZTRlNAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTkJCQkJCSAweDE2ZTRlOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTAJCQkJCSAweDE2ZTRjNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTEJCQkJCSAweDE2ZTRjOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTIJCQkJCSAweDE2ZTRjYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTMJCQkJCSAweDE2ZTRkMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTQJCQkJCSAweDE2ZTRkNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTUJCQkJCSAweDE2ZTRkOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTYJCQkJCSAweDE2ZTRkYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTcJCQkJCSAweDE2ZTRlMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTgJCQkJCSAweDE2ZTRlNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMTkJCQkJCSAweDE2ZTRlOAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xMgkJCQkJIDB4MTY4MTI0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyMAkJCQkJIDB4MTZlNGVjCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzEyMQkJCQkJIDB4MTZlNGYwCkBAIC0yODAyLDE0ICsyNjMwLDYgQEAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTI1CQkJCQkgMHgxNmU1MDAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTI2CQkJCQkgMHgxNmU1MDQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTI3CQkJCQkgMHgxNmU1MDgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTIwCQkJCQkgMHgxNmU0ZWMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTIxCQkJCQkgMHgxNmU0ZjAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTIyCQkJCQkgMHgxNmU0ZjQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTIzCQkJCQkgMHgxNmU0ZjgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTI0CQkJCQkgMHgxNmU0ZmMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTI1CQkJCQkgMHgxNmU1MDAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTI2CQkJCQkgMHgxNmU1MDQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTI3CQkJCQkgMHgxNmU1MDgKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfMTMJCQkJCSAweDE2ODEyOAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF8xNAkJCQkJIDB4MTY4MTJjCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzE1CQkJCQkgMHgxNjgxMzAKQEAgLTI4NTUsMTYgKzI2NzUsNiBAQAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81NwkJCQkJIDB4MTY4MWQ4CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzU4CQkJCQkgMHgxNjgxZGMKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTkJCQkJCSAweDE2ODFlMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81MAkJCQkJIDB4MTY4MWJjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzUxCQkJCQkgMHgxNjgxYzAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTIJCQkJCSAweDE2ODFjNAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81MwkJCQkJIDB4MTY4MWM4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzU0CQkJCQkgMHgxNjgxY2MKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTUJCQkJCSAweDE2ODFkMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81NgkJCQkJIDB4MTY4MWQ0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzU3CQkJCQkgMHgxNjgxZDgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNTgJCQkJCSAweDE2ODFkYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF81OQkJCQkJIDB4MTY4MWUwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzYJCQkJCSAweDE2ODEwYwogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MAkJCQkJIDB4MTY4MWU0CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzYxCQkJCQkgMHgxNjgxZTgKQEAgLTI4NzIsMTYgKzI2ODIsNiBAQAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MwkJCQkJIDB4MTY4MWYwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzY0CQkJCQkgMHgxNmU0MGMKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjUJCQkJCSAweDE2ZTQxMAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82NgkJCQkJIDB4MTZlNDE0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzY3CQkJCQkgMHgxNmU0MTgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjgJCQkJCSAweDE2ZTQxYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82OQkJCQkJIDB4MTZlNDIwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzYwCQkJCQkgMHgxNjgxZTQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjEJCQkJCSAweDE2ODFlOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82MgkJCQkJIDB4MTY4MWVjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzYzCQkJCQkgMHgxNjgxZjAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNjQJCQkJCSAweDE2ZTQwYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF82NQkJCQkJIDB4MTZlNDEwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzY5CQkJCQkgMHgxNmU0MjAKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNwkJCQkJIDB4MTY4MTEwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzcwCQkJCQkgMHgxNmU0MjQKQEAgLTI4OTQsMjkgKzI2OTQsOSBAQAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83NwkJCQkJIDB4MTZlNDQwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzc4CQkJCQkgMHgxNmU0NDQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzkJCQkJCSAweDE2ZTQ0OAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83MAkJCQkJIDB4MTZlNDI0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzcxCQkJCQkgMHgxNmU0MjgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzIJCQkJCSAweDE2ZTQyYwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83MwkJCQkJIDB4MTZlNDMwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzc0CQkJCQkgMHgxNmU0MzQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzUJCQkJCSAweDE2ZTQzOAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83NgkJCQkJIDB4MTZlNDNjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzc3CQkJCQkgMHgxNmU0NDAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfNzgJCQkJCSAweDE2ZTQ0NAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF83OQkJCQkJIDB4MTZlNDQ4CiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzgJCQkJCSAweDE2ODExNAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84MAkJCQkJIDB4MTZlNDRjCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzgxCQkJCQkgMHgxNmU0NTAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODIJCQkJCSAweDE2ZTQ1NAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84MwkJCQkJIDB4MTZlNDU4Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzg0CQkJCQkgMHgxNmU0NWMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODUJCQkJCSAweDE2ZTQ2MAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NgkJCQkJIDB4MTZlNDY0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzg3CQkJCQkgMHgxNmU0NjgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODgJCQkJCSAweDE2ZTQ2YwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84OQkJCQkJIDB4MTZlNDcwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzgwCQkJCQkgMHgxNmU0NGMKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODEJCQkJCSAweDE2ZTQ1MAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF84NQkJCQkJIDB4MTZlNDYwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzg2CQkJCQkgMHgxNmU0NjQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfODcJCQkJCSAweDE2ZTQ2OApAQCAtMjkzMywyMyArMjcxMywxMSBAQAogI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85NwkJCQkJIDB4MTZlNDkwCiAjZGVmaW5lIFFNX1JFR19RVk9RSURYXzk4CQkJCQkgMHgxNmU0OTQKICNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTkJCQkJCSAweDE2ZTQ5OAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85MAkJCQkJIDB4MTZlNDc0Ci0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzkxCQkJCQkgMHgxNmU0NzgKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTIJCQkJCSAweDE2ZTQ3YwotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85MwkJCQkJIDB4MTZlNDgwCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzk0CQkJCQkgMHgxNmU0ODQKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTUJCQkJCSAweDE2ZTQ4OAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85NgkJCQkJIDB4MTZlNDhjCi0jZGVmaW5lIFFNX1JFR19RVk9RSURYXzk3CQkJCQkgMHgxNmU0OTAKLSNkZWZpbmUgUU1fUkVHX1FWT1FJRFhfOTgJCQkJCSAweDE2ZTQ5NAotI2RlZmluZSBRTV9SRUdfUVZPUUlEWF85OQkJCQkJIDB4MTZlNDk4CiAvKiBbUlcgMV0gSW5pdGlhbGl6YXRpb24gYml0IGNvbW1hbmQgKi8KICNkZWZpbmUgUU1fUkVHX1NPRlRfUkVTRVQJCQkJCSAweDE2ODQyOAogLyogW1JXIDhdIFRoZSBjcmVkaXQgY29zdCBwZXIgZXZlcnkgdGFzayBpbiB0aGUgUU0uIEEgdmFsdWUgcGVyIGVhY2ggVk9RICovCiAjZGVmaW5lIFFNX1JFR19UQVNLQ1JEQ09TVF8wCQkJCQkgMHgxNjgwOWMKICNkZWZpbmUgUU1fUkVHX1RBU0tDUkRDT1NUXzEJCQkJCSAweDE2ODBhMAotI2RlZmluZSBRTV9SRUdfVEFTS0NSRENPU1RfMTAJCQkJCSAweDE2ODBjNAotI2RlZmluZSBRTV9SRUdfVEFTS0NSRENPU1RfMTEJCQkJCSAweDE2ODBjOAogI2RlZmluZSBRTV9SRUdfVEFTS0NSRENPU1RfMgkJCQkJIDB4MTY4MGE0CiAjZGVmaW5lIFFNX1JFR19UQVNLQ1JEQ09TVF80CQkJCQkgMHgxNjgwYWMKICNkZWZpbmUgUU1fUkVHX1RBU0tDUkRDT1NUXzUJCQkJCSAweDE2ODBiMApAQCAtMjk2MiwyNCArMjczMCwxOCBAQAogLyogW1IgMTZdIFRoZSBjcmVkaXQgdmFsdWUgZm9yIGVhY2ggVk9RICovCiAjZGVmaW5lIFFNX1JFR19WT1FDUkVESVRfMAkJCQkJIDB4MTY4MmQwCiAjZGVmaW5lIFFNX1JFR19WT1FDUkVESVRfMQkJCQkJIDB4MTY4MmQ0Ci0jZGVmaW5lIFFNX1JFR19WT1FDUkVESVRfMTAJCQkJCSAweDE2ODJmOAotI2RlZmluZSBRTV9SRUdfVk9RQ1JFRElUXzExCQkJCQkgMHgxNjgyZmMKICNkZWZpbmUgUU1fUkVHX1ZPUUNSRURJVF80CQkJCQkgMHgxNjgyZTAKIC8qIFtSVyAxNl0gVGhlIGNyZWRpdCB2YWx1ZSB0aGF0IGlmIGFib3ZlIHRoZSBRTSBpcyBjb25zaWRlcmVkIGFsbW9zdCBmdWxsICovCiAjZGVmaW5lIFFNX1JFR19WT1FDUkVESVRBRlVMTFRIUgkJCQkgMHgxNjgwOTAKIC8qIFtSVyAxNl0gVGhlIGluaXQgYW5kIG1heGltdW0gY3JlZGl0IGZvciBlYWNoIFZvUSAqLwogI2RlZmluZSBRTV9SRUdfVk9RSU5JVENSRURJVF8wCQkJCQkgMHgxNjgwNjAKICNkZWZpbmUgUU1fUkVHX1ZPUUlOSVRDUkVESVRfMQkJCQkJIDB4MTY4MDY0Ci0jZGVmaW5lIFFNX1JFR19WT1FJTklUQ1JFRElUXzEwIAkJCQkgMHgxNjgwODgKLSNkZWZpbmUgUU1fUkVHX1ZPUUlOSVRDUkVESVRfMTEgCQkJCSAweDE2ODA4YwogI2RlZmluZSBRTV9SRUdfVk9RSU5JVENSRURJVF8yCQkJCQkgMHgxNjgwNjgKICNkZWZpbmUgUU1fUkVHX1ZPUUlOSVRDUkVESVRfNAkJCQkJIDB4MTY4MDcwCiAjZGVmaW5lIFFNX1JFR19WT1FJTklUQ1JFRElUXzUJCQkJCSAweDE2ODA3NAogLyogW1JXIDFdIFRoZSBwb3J0IG9mIHdoaWNoIFZPUSBiZWxvbmdzICovCiAjZGVmaW5lIFFNX1JFR19WT1FQT1JUXzAJCQkJCSAweDE2ODJhMAogI2RlZmluZSBRTV9SRUdfVk9RUE9SVF8xCQkJCQkgMHgxNjgyYTQKLSNkZWZpbmUgUU1fUkVHX1ZPUVBPUlRfMTAJCQkJCSAweDE2ODJjOAotI2RlZmluZSBRTV9SRUdfVk9RUE9SVF8xMQkJCQkJIDB4MTY4MmNjCiAjZGVmaW5lIFFNX1JFR19WT1FQT1JUXzIJCQkJCSAweDE2ODJhOAogLyogW1JXIDMyXSBUaGUgcGh5c2ljYWwgcXVldWUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIFZPUTsgcXVldWVzIDMxLTAgKi8KICNkZWZpbmUgUU1fUkVHX1ZPUVFNQVNLXzBfTFNCCQkJCQkgMHgxNjgyNDAKQEAgLTMwNzcsMzYgKzI4MzksNiBAQAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18wCQkJCQkgMHgxNjg4MGMKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMQkJCQkJIDB4MTY4ODEwCiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEwCQkJCQkgMHgxNjg4MTQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTBfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMQkJCQkJIDB4MTY4ODE4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzExX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTIJCQkJCSAweDE2ODgxYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMl9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEzCQkJCQkgMHgxNjg4MjAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTNfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNAkJCQkJIDB4MTY4ODI0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE0X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTUJCQkJCSAweDE2ODgyOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE2CQkJCQkgMHgxNmUwMDAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTZfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNwkJCQkJIDB4MTZlMDA0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE3X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTgJCQkJCSAweDE2ZTAwOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE5CQkJCQkgMHgxNmUwMGMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTlfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMAkJCQkJIDB4MTY4ODE0CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzExCQkJCQkgMHgxNjg4MTgKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTIJCQkJCSAweDE2ODgxYwogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMwkJCQkJIDB4MTY4ODIwCkBAIC0zMTE4LDM2ICsyODUwLDYgQEAKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTkJCQkJCSAweDE2ZTAwYwogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yCQkJCQkgMHgxNjg4MmMKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjAJCQkJCSAweDE2ZTAxMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIxCQkJCQkgMHgxNmUwMTQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjFfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMgkJCQkJIDB4MTZlMDE4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIyX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjMJCQkJCSAweDE2ZTAxYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yM19TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI0CQkJCQkgMHgxNmUwMjAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjRfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNQkJCQkJIDB4MTZlMDI0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI1X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjYJCQkJCSAweDE2ZTAyOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNl9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI3CQkJCQkgMHgxNmUwMmMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjdfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOAkJCQkJIDB4MTZlMDMwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI4X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjkJCQkJCSAweDE2ZTAzNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIwCQkJCQkgMHgxNmUwMTAKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjEJCQkJCSAweDE2ZTAxNAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMgkJCQkJIDB4MTZlMDE4CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIzCQkJCQkgMHgxNmUwMWMKQEAgLTMxNTksMTIgKzI4NjEsNiBAQAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOQkJCQkJIDB4MTZlMDM0CiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMJCQkJCSAweDE2ODgzMAogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMAkJCQkJIDB4MTZlMDM4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMwX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzEJCQkJCSAweDE2ZTAzYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMwCQkJCQkgMHgxNmUwMzgKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzEJCQkJCSAweDE2ZTAzYwogI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU180CQkJCQkgMHgxNjg4MzQKICNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNQkJCQkJIDB4MTY4ODM4CkBAIC0zMTc0LDM2MiArMjg3MCw2IEBACiAjZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzkJCQkJCSAweDE2ODg0OAogLyogW1IgNl0gS2VlcCB0aGUgZmlsbCBsZXZlbCBvZiB0aGUgZmlmbyBmcm9tIHdyaXRlIGNsaWVudCAxICovCiAjZGVmaW5lIFFNX1JFR19YUU1fV1JDX0ZJRk9MVkwJCQkJCSAweDE2ODAwMAotI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBCUkIxX0JSQjFfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKLSNkZWZpbmUgQlJCMV9CUkIxX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIEJSQjFfQlJCMV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIEJSQjFfQlJCMV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIEJSQjFfQlJCMV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBCUkIxX0JSQjFfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ0NNX0NDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENDTV9DQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgQ0NNX0NDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDQ01fQ0NNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENDTV9DQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDQ01fQ0NNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ0NNX0NDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDQ01fQ0NNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBDRFVfQ0RVX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0RVX0NEVV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBDRFVfQ0RVX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENEVV9DRFVfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ0RVX0NEVV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENEVV9DRFVfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBDRFVfQ0RVX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIENEVV9DRFVfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIENGQ19DRkNfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDRkNfQ0ZDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIENGQ19DRkNfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0ZDX0NGQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBDRkNfQ0ZDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0ZDX0NGQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENGQ19DRkNfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ0ZDX0NGQ19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgQ1NETV9DU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDU0RNX0NTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENTRE1fQ1NETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ1NETV9DU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ1NETV9DU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIENTRE1fQ1NETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ1NETV9DU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ1NETV9DU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBDU0VNX0NTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENTRU1fQ1NFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIENTRU1fQ1NFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgQ1NFTV9DU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgREJHX0RCR19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIERCR19EQkdfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgREJHX0RCR19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBEQkdfREJHX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIERCR19EQkdfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBEQkdfREJHX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgREJHX0RCR19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBEQkdfREJHX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBETUFFX0RNQUVfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKLSNkZWZpbmUgRE1BRV9ETUFFX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIERNQUVfRE1BRV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIERNQUVfRE1BRV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIERNQUVfRE1BRV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBETUFFX0RNQUVfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgRE9SUV9ET1JRX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SIAkJICgweDE8PDApCi0jZGVmaW5lIERPUlFfRE9SUV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBET1JRX0RPUlFfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBET1JRX0RPUlFfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBET1JRX0RPUlFfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgRE9SUV9ET1JRX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIEhDX0hDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IgCQkJICgweDE8PDApCi0jZGVmaW5lIEhDX0hDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIEhDX0hDX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIEhDX0hDX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIEhDX0hDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgSENfSENfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgSENfSENfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgSENfSENfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIE1JU0NfTUlTQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIE1JU0NfTUlTQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIE1JU0NfTUlTQ19JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUiAJCSAoMHgxPDwwKQotI2RlZmluZSBNSVNDX01JU0NfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgTUlTQ19NSVNDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgTUlTQ19NSVNDX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgTUlTQ19NSVNDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIE1JU0NfTUlTQ19JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBOSUdfTklHX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBOSUdfTklHX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBOSUdfTklHX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IgCQkgKDB4MTw8MCkKLSNkZWZpbmUgTklHX05JR19JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIE5JR19OSUdfSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIE5JR19OSUdfSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIE5JR19OSUdfSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBOSUdfTklHX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUEJGX1BCRl9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBCRl9QQkZfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgUEJGX1BCRl9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQQkZfUEJGX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBCRl9QQkZfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQQkZfUEJGX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUEJGX1BCRl9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQQkZfUEJGX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBQQl9QQl9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SIAkJCSAoMHgxPDwwKQotI2RlZmluZSBQQl9QQl9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBQQl9QQl9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBQQl9QQl9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQQl9QQl9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBCX1BCX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIFBCX1BCX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBCX1BCX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBQUlNfUFJTX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUFJTX1BSU19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBQUlNfUFJTX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBSU19QUlNfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUFJTX1BSU19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBSU19QUlNfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQUlNfUFJTX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBSU19QUlNfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIFBYUDJfUFhQMl9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUFhQMl9QWFAyX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBQWFAyX1BYUDJfSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFBYUDJfUFhQMl9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBYUDJfUFhQMl9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBQWFAyX1BYUDJfSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBYUDJfUFhQMl9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBYUDJfUFhQMl9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBYUF9QWFBfSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBYUF9QWFBfSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFBYUF9QWFBfSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUiAJCSAoMHgxPDwwKQotI2RlZmluZSBQWFBfUFhQX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUFhQX1BYUF9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgUFhQX1BYUF9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgUFhQX1BYUF9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFBYUF9QWFBfSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBRTV9RTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SIAkJCSAoMHgxPDwwKQotI2RlZmluZSBRTV9RTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBRTV9RTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBRTV9RTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBRTV9RTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFFNX1FNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIFFNX1FNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFFNX1FNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCSAwCi0jZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SIAkgKDB4MTw8MCkKLSNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkgMAotI2RlZmluZSBTRU1fRkFTVF9TRU1fRkFTVF9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCSAwCi0jZGVmaW5lIFNFTV9GQVNUX1NFTV9GQVNUX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgU0VNX0ZBU1RfU0VNX0ZBU1RfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRQkgMAotI2RlZmluZSBTUkNfU1JDX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgU1JDX1NSQ19JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBTUkNfU1JDX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFNSQ19TUkNfSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgU1JDX1NSQ19JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFNSQ19TUkNfSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBTUkNfU1JDX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFNSQ19TUkNfSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIFRDTV9UQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBUQ01fVENNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJCSAwCi0jZGVmaW5lIFRDTV9UQ01fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVENNX1RDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBUQ01fVENNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVENNX1RDTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRDTV9UQ01fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVENNX1RDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFIAkJIDAKLSNkZWZpbmUgVE1fVE1fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUiAJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVE1fVE1fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgVE1fVE1fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVE1fVE1fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVE1fVE1fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBUTV9UTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBUTV9UTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBUTV9UTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgVFNETV9UU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBUU0RNX1RTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgVFNETV9UU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVFNETV9UU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFRTRE1fVFNETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVFNETV9UU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVFNETV9UU0RNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVFNFTV9UU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBUU0VNX1RTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgVFNFTV9UU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVFNFTV9UU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFRTRU1fVFNFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVFNFTV9UU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgVFNFTV9UU0VNX0lOVF9NQVNLXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVUNNX1VDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFVDTV9VQ01fSU5UX1NUU19SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkJIDAKLSNkZWZpbmUgVUNNX1VDTV9JTlRfU1RTX0NMUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVQ01fVUNNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFVDTV9VQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVQ01fVUNNX0lOVF9TVFNfV1JfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVUNNX1VDTV9JTlRfTUFTS19SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVQ01fVUNNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SX1NJWkUgCQkgMAotI2RlZmluZSBVU0RNX1VTRE1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFVTRE1fVVNETV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBVU0RNX1VTRE1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBVU0RNX1VTRE1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgVVNETV9VU0RNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBVU0RNX1VTRE1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVU0RNX1VTRE1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBVU0VNX1VTRU1fSU5UX1NUU18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFVTRU1fVVNFTV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfQ0xSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBVU0VNX1VTRU1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBVU0VNX1VTRU1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SCQkgKDB4MTw8MCkKLSNkZWZpbmUgVVNFTV9VU0VNX0lOVF9TVFNfV1JfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBVU0VNX1VTRU1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUgkJCSAoMHgxPDwwKQotI2RlZmluZSBVU0VNX1VTRU1fSU5UX01BU0tfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYQ01fWENNX0lOVF9TVFNfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgWENNX1hDTV9JTlRfU1RTX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCQkgMAotI2RlZmluZSBYQ01fWENNX0lOVF9TVFNfQ0xSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhDTV9YQ01fSU5UX1NUU19DTFJfUkVHX0FERFJFU1NfRVJST1JfU0laRQkJIDAKLSNkZWZpbmUgWENNX1hDTV9JTlRfU1RTX1dSX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhDTV9YQ01fSU5UX1NUU19XUl9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYQ01fWENNX0lOVF9NQVNLX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhDTV9YQ01fSU5UX01BU0tfUkVHX0FERFJFU1NfRVJST1JfU0laRSAJCSAwCi0jZGVmaW5lIFhTRE1fWFNETV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgWFNETV9YU0RNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFhTRE1fWFNETV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFhTRE1fWFNETV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBYU0RNX1hTRE1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFhTRE1fWFNETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhTRE1fWFNETV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFhTRU1fWFNFTV9JTlRfU1RTXzBfUkVHX0FERFJFU1NfRVJST1IJCQkgKDB4MTw8MCkKLSNkZWZpbmUgWFNFTV9YU0VNX0lOVF9TVFNfMF9SRUdfQUREUkVTU19FUlJPUl9TSVpFCQkgMAotI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU19DTFJfMF9SRUdfQUREUkVTU19FUlJPUgkJICgweDE8PDApCi0jZGVmaW5lIFhTRU1fWFNFTV9JTlRfU1RTX0NMUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFhTRU1fWFNFTV9JTlRfU1RTX1dSXzBfUkVHX0FERFJFU1NfRVJST1IJCSAoMHgxPDwwKQotI2RlZmluZSBYU0VNX1hTRU1fSU5UX1NUU19XUl8wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIFhTRU1fWFNFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SCQkJICgweDE8PDApCi0jZGVmaW5lIFhTRU1fWFNFTV9JTlRfTUFTS18wX1JFR19BRERSRVNTX0VSUk9SX1NJWkUJCSAwCi0jZGVmaW5lIENGQ19ERUJVRzFfUkVHX1dSSVRFX0FDIAkJCQkgKDB4MTw8NCkKLSNkZWZpbmUgQ0ZDX0RFQlVHMV9SRUdfV1JJVEVfQUNfU0laRQkJCQkgNAotLyogW1IgMV0gZGVidWcgb25seTogVGhpcyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgaW5kaWNhdGVzIHRoYXQgZXh0ZXJuYWwKLSAgIGJ1ZmZlciB3YXMgd3JhcHBlZCAob2xkZXN0IGRhdGEgd2FzIHRocm93bik7IFJlbGV2YW50IG9ubHkgd2hlbgotICAgfmRiZ19yZWdpc3RlcnNfZGVidWdfdGFyZ2V0PTIgKFBDSSkgJiB+ZGJnX3JlZ2lzdGVyc19mdWxsX21vZGU9MSAod3JhcCk7ICovCi0jZGVmaW5lIERCR19SRUdfV1JBUF9PTl9FWFRfQlVGRkVSCQkJCSAweGMxMjQKLSNkZWZpbmUgREJHX1JFR19XUkFQX09OX0VYVF9CVUZGRVJfU0laRSAJCQkgMQotLyogW1IgMV0gZGVidWcgb25seTogVGhpcyBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGludGVybmFsIGJ1ZmZlciB3YXMKLSAgIHdyYXBwZWQgKG9sZGVzdCBkYXRhIHdhcyB0aHJvd24pIFJlbGV2YW50IG9ubHkgd2hlbgotICAgfmRiZ19yZWdpc3RlcnNfZGVidWdfdGFyZ2V0PTAgKGludGVybmFsIGJ1ZmZlcikgKi8KLSNkZWZpbmUgREJHX1JFR19XUkFQX09OX0lOVF9CVUZGRVIJCQkJIDB4YzEyOAotI2RlZmluZSBEQkdfUkVHX1dSQVBfT05fSU5UX0JVRkZFUl9TSVpFIAkJCSAxCi0jZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1JFR19XUkJVRkYJCQkJICgweDE8PDgpCi0jZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1JFR19XUkJVRkZfU0laRQkJCQkgOAotI2RlZmluZSBRTV9RTV9QUlRZX1NUU19DTFJfUkVHX1dSQlVGRgkJCQkgKDB4MTw8OCkKLSNkZWZpbmUgUU1fUU1fUFJUWV9TVFNfQ0xSX1JFR19XUkJVRkZfU0laRQkJCSA4Ci0jZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1dSX1JFR19XUkJVRkYJCQkJICgweDE8PDgpCi0jZGVmaW5lIFFNX1FNX1BSVFlfU1RTX1dSX1JFR19XUkJVRkZfU0laRQkJCSA4Ci0jZGVmaW5lIFFNX1FNX1BSVFlfTUFTS19SRUdfV1JCVUZGCQkJCSAoMHgxPDw4KQotI2RlZmluZSBRTV9RTV9QUlRZX01BU0tfUkVHX1dSQlVGRl9TSVpFIAkJCSA4Ci0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzAJCQkJCSAweDE2ODgwYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18wX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMQkJCQkJIDB4MTY4ODEwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzFfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMAkJCQkJIDB4MTY4ODE0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEwX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTEJCQkJCSAweDE2ODgxOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEyCQkJCQkgMHgxNjg4MWMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTJfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xMwkJCQkJIDB4MTY4ODIwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzEzX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTQJCQkJCSAweDE2ODgyNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE1CQkJCQkgMHgxNjg4MjgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTVfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yCQkJCQkgMHgxNjg4MmMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMl9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMJCQkJCSAweDE2ODgzMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNAkJCQkJIDB4MTY4ODM0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzRfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU181CQkJCQkgMHgxNjg4MzgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzYJCQkJCSAweDE2ODgzYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU182X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfNwkJCQkJIDB4MTY4ODQwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzdfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU184CQkJCQkgMHgxNjg4NDQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfOF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzkJCQkJCSAweDE2ODg0OAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU185X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTYJCQkJCSAweDE2ZTAwMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xNl9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE3CQkJCQkgMHgxNmUwMDQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTdfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOAkJCQkJIDB4MTZlMDA4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzE4X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMTkJCQkJCSAweDE2ZTAwYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18xOV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIwCQkJCQkgMHgxNmUwMTAKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjBfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMQkJCQkJIDB4MTZlMDE0Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIxX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjIJCQkJCSAweDE2ZTAxOAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yMl9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzIzCQkJCQkgMHgxNmUwMWMKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjNfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNAkJCQkJIDB4MTZlMDIwCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI0X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjUJCQkJCSAweDE2ZTAyNAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNV9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI2CQkJCQkgMHgxNmUwMjgKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjZfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yNwkJCQkJIDB4MTZlMDJjCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI3X1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjgJCQkJCSAweDE2ZTAzMAotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18yOF9TSVpFCQkJCSAxCi0vKiBbUlcgMzJdIFdyciB3ZWlnaHRzICovCi0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzI5CQkJCQkgMHgxNmUwMzQKLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMjlfU0laRQkJCQkgMQotLyogW1JXIDMyXSBXcnIgd2VpZ2h0cyAqLwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMAkJCQkJIDB4MTZlMDM4Ci0jZGVmaW5lIFFNX1JFR19XUlJXRUlHSFRTXzMwX1NJWkUJCQkJIDEKLS8qIFtSVyAzMl0gV3JyIHdlaWdodHMgKi8KLSNkZWZpbmUgUU1fUkVHX1dSUldFSUdIVFNfMzEJCQkJCSAweDE2ZTAzYwotI2RlZmluZSBRTV9SRUdfV1JSV0VJR0hUU18zMV9TSVpFCQkJCSAxCiAjZGVmaW5lIFNSQ19SRUdfQ09VTlRGUkVFMAkJCQkJIDB4NDA1MDAKIC8qIFtSVyAxXSBJZiBjbHIgdGhlIHNlYXJjaGVyIGlzIGNvbXBhdGlibGUgdG8gRTEgQTAgLSBzdXBwb3J0IG9ubHkgdHdvCiAgICBwb3J0cy4gSWYgc2V0IHRoZSBzZWFyY2hlciBzdXBwb3J0IDggZnVuY3Rpb25zLiAqLwpAQCAtMzYyOSwxMiArMjk2OSw2IEBACiAgICB0eXBlIChvbmUgb2YgMTYpLiAqLwogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzAJCQkJCSAweDUwMDUwCiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMQkJCQkJIDB4NTAwNTQKLSNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8xMAkJCQkJIDB4NTAwNzgKLSNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8xMQkJCQkJIDB4NTAwN2MKLSNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8xMgkJCQkJIDB4NTAwODAKLSNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8xMwkJCQkJIDB4NTAwODQKLSNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8xNAkJCQkJIDB4NTAwODgKLSNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8xNQkJCQkJIDB4NTAwOGMKICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8yCQkJCQkgMHg1MDA1OAogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzMJCQkJCSAweDUwMDVjCiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfNAkJCQkJIDB4NTAwNjAKQEAgLTM4MjgsNiArMzE2Miw3IEBACiAjZGVmaW5lIFRNX1JFR19MSU4wX1BIWV9BRERSCQkJCQkgMHgxNjQyNzAKIC8qIFtSVyAxXSBMaW5lYXIwIHBoeXNpY2FsIGFkZHJlc3MgdmFsaWQuICovCiAjZGVmaW5lIFRNX1JFR19MSU4wX1BIWV9BRERSX1ZBTElECQkJCSAweDE2NDI0OAorI2RlZmluZSBUTV9SRUdfTElOMF9TQ0FOX09OCQkJCQkgMHgxNjQwZDAKIC8qIFtSVyAyNF0gTGluZWFyMCBhcnJheSBzY2FuIHRpbWVvdXQuICovCiAjZGVmaW5lIFRNX1JFR19MSU4wX1NDQU5fVElNRQkJCQkJIDB4MTY0MDNjCiAvKiBbUlcgMzJdIExpbmVhcjEgbG9naWMgYWRkcmVzcy4gKi8KQEAgLTM4NDAsOCArMzE3NSw2IEBACiAjZGVmaW5lIFRNX1JFR19MSU5fU0VUQ0xSX0ZJRk9fQUxGVUxMX1RIUgkJCSAweDE2NDA3MAogLyogW1JXIDJdIExvYWQgdmFsdWUgZm9yIHBjaSBhcmJpdGVyIGNyZWRpdCBjbnQuICovCiAjZGVmaW5lIFRNX1JFR19QQ0lBUkJfQ1JEQ05UX1ZBTAkJCQkgMHgxNjQyNjAKLS8qIFtSVyAxXSBUaW1lciBzb2Z0d2FyZSByZXNldCAtIGFjdGl2ZSBoaWdoLiAqLwotI2RlZmluZSBUTV9SRUdfVElNRVJfU09GVF9SU1QJCQkJCSAweDE2NDAwNAogLyogW1JXIDIwXSBUaGUgYW1vdW50IG9mIGhhcmR3YXJlIGN5Y2xlcyBmb3IgZWFjaCB0aW1lciB0aWNrLiAqLwogI2RlZmluZSBUTV9SRUdfVElNRVJfVElDS19TSVpFCQkJCQkgMHgxNjQwMWMKIC8qIFtSVyA4XSBUaW1lcnMgQ29udGV4dCByZWdpb24uICovCkBAIC0zODUzLDQ0ICszMTg2LDEyIEBACiAvKiBbUlcgOF0gVGhlIGV2ZW50IGlkIGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMAkJCQkgMHg0MjAzOAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEJCQkJIDB4NDIwM2MKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMAkJCQkgMHg0MjA2MAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExCQkJCSAweDQyMDY0Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4NDIwNjgKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMwkJCQkgMHg0MjA2YwotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE0CQkJCSAweDQyMDcwCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTUJCQkJIDB4NDIwNzQKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNgkJCQkgMHg0MjA3OAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE3CQkJCSAweDQyMDdjCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTgJCQkJIDB4NDIwODAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOQkJCQkgMHg0MjA4NAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIJCQkJIDB4NDIwNDAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHg0MjA4OAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweDQyMDhjCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjIJCQkJIDB4NDIwOTAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMwkJCQkgMHg0MjA5NAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI0CQkJCSAweDQyMDk4Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjUJCQkJIDB4NDIwOWMKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNgkJCQkgMHg0MjBhMAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI3CQkJCSAweDQyMGE0Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjgJCQkJIDB4NDIwYTgKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yOQkJCQkgMHg0MjBhYwogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMJCQkJIDB4NDIwNDQKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMAkJCQkgMHg0MjBiMAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMxCQkJCSAweDQyMGI0CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfNAkJCQkgMHg0MjA0OAogLyogW1JXIDFdIFRoZSBUIGJpdCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLwogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMAkJCQkJIDB4NDIwYjgKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEJCQkJCSAweDQyMGJjCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMAkJCQkJIDB4NDIwZTAKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzExCQkJCQkgMHg0MjBlNAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTIJCQkJCSAweDQyMGU4Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMwkJCQkJIDB4NDIwZWMKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE0CQkJCQkgMHg0MjBmMAotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTUJCQkJCSAweDQyMGY0Ci0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNgkJCQkJIDB4NDIwZjgKLSNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE3CQkJCQkgMHg0MjBmYwotI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTgJCQkJCSAweDQyMTAwCi0jZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xOQkJCQkJIDB4NDIxMDQKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4NDIwMDgKIC8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCkBAIC00MTc1LDEyICszNDc2LDYgQEAKICAgIGNvbm5lY3Rpb24gdHlwZSAob25lIG9mIDE2KS4gKi8KICNkZWZpbmUgVUNNX1JFR19OX1NNX0NUWF9MRF8wCQkJCQkgMHhlMDA1NAogI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzEJCQkJCSAweGUwMDU4Ci0jZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMTAJCQkJCSAweGUwMDdjCi0jZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMTEJCQkJCSAweGUwMDgwCi0jZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMTIJCQkJCSAweGUwMDg0Ci0jZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMTMJCQkJCSAweGUwMDg4Ci0jZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMTQJCQkJCSAweGUwMDhjCi0jZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMTUJCQkJCSAweGUwMDkwCiAjZGVmaW5lIFVDTV9SRUdfTl9TTV9DVFhfTERfMgkJCQkJIDB4ZTAwNWMKICNkZWZpbmUgVUNNX1JFR19OX1NNX0NUWF9MRF8zCQkJCQkgMHhlMDA2MAogI2RlZmluZSBVQ01fUkVHX05fU01fQ1RYX0xEXzQJCQkJCSAweGUwMDY0CkBAIC00MzMwLDQ4ICszNjI1LDIwIEBACiAvKiBbUlcgOF0gVGhlIGV2ZW50IGlkIGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMAkJCQkgMHhjNDAzOAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEJCQkJIDB4YzQwM2MKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMAkJCQkgMHhjNDA2MAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExCQkJCSAweGM0MDY0Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4YzQwNjgKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMwkJCQkgMHhjNDA2YwotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE0CQkJCSAweGM0MDcwCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTUJCQkJIDB4YzQwNzQKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNgkJCQkgMHhjNDA3OAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE3CQkJCSAweGM0MDdjCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTgJCQkJIDB4YzQwODAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOQkJCQkgMHhjNDA4NAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIJCQkJIDB4YzQwNDAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHhjNDA4OAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweGM0MDhjCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjIJCQkJIDB4YzQwOTAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMwkJCQkgMHhjNDA5NAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI0CQkJCSAweGM0MDk4Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjUJCQkJIDB4YzQwOWMKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yNgkJCQkgMHhjNDBhMAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI3CQkJCSAweGM0MGE0Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjgJCQkJIDB4YzQwYTgKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8yOQkJCQkgMHhjNDBhYwotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMJCQkJIDB4YzQwNDQKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMAkJCQkgMHhjNDBiMAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMxCQkJCSAweGM0MGI0CiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNAkJCQkgMHhjNDA0OAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzUJCQkJIDB4YzQwNGMKKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF82CQkJCSAweGM0MDUwCiAvKiBbUlcgMV0gRm9yIGVhY2ggYWdncmVnYXRlZCBpbnRlcnJ1cHQgaW5kZXggd2hldGhlciB0aGUgbW9kZSBpcyBub3JtYWwgKDApCiAgICBvciBhdXRvLW1hc2stbW9kZSAoMSkgKi8KICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzAgCQkJCSAweGM0MWI4CiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xIAkJCQkgMHhjNDFiYwotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTAJCQkJIDB4YzQxZTAKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzExCQkJCSAweGM0MWU0Ci0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xMgkJCQkgMHhjNDFlOAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTMJCQkJIDB4YzQxZWMKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE0CQkJCSAweGM0MWYwCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xNQkJCQkgMHhjNDFmNAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTYJCQkJIDB4YzQxZjgKLSNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE3CQkJCSAweGM0MWZjCi0jZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xOAkJCQkgMHhjNDIwMAotI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTkJCQkJIDB4YzQyMDQKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzQgCQkJCSAweGM0MWM4CiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV81IAkJCQkgMHhjNDFjYworI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfNiAJCQkJIDB4YzQxZDAKKy8qIFtSVyAxXSBUaGUgVCBiaXQgZm9yIGFnZ3JlZ2F0ZWQgaW50ZXJydXB0IDUgKi8KKyNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9UXzUJCQkJCSAweGM0MGNjCisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfVF82CQkJCQkgMHhjNDBkMAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFVTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHhjNDAwOAogLyogW1JXIDE2XSBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgY29tcGV0aW9uIGNvdW50ZXIgIzAgKi8KQEAgLTQ2NzUsMTAgKzM5NDIsNiBAQAogLyogW1JDIDFdIFNldCBhdCBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKSBhdAogICAgdGhlIG5pZzEgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBYQ01fUkVHX05JRzFfTEVOR1RIX01JUyAJCQkJIDB4MjAyM2MKLS8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBuaWcxIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKLSAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAotICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLwotI2RlZmluZSBYQ01fUkVHX05JRzFfV0VJR0hUCQkJCQkgMHgyMDBkOAogLyogW1JXIDVdIFRoZSBudW1iZXIgb2YgZG91YmxlIFJFRy1wYWlyczsgbG9hZGVkIGZyb20gdGhlIFNUT1JNIGNvbnRleHQgYW5kCiAgICBzZW50IHRvIFNUT1JNOyBmb3IgYSBzcGVjaWZpYyBjb25uZWN0aW9uIHR5cGUuIFRoZSBkb3VibGUgUkVHLXBhaXJzIGFyZQogICAgdXNlZCBpbiBvcmRlciB0byBhbGlnbiB0byBTVE9STSBjb250ZXh0IHJvdyBzaXplIG9mIDEyOCBiaXRzLiBUaGUgb2Zmc2V0CkBAIC00Njg2LDEyICszOTQ5LDYgQEAKICAgIGNvbm5lY3Rpb24gdHlwZSAob25lIG9mIDE2KS4gKi8KICNkZWZpbmUgWENNX1JFR19OX1NNX0NUWF9MRF8wCQkJCQkgMHgyMDA2MAogI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzEJCQkJCSAweDIwMDY0Ci0jZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMTAJCQkJCSAweDIwMDg4Ci0jZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMTEJCQkJCSAweDIwMDhjCi0jZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMTIJCQkJCSAweDIwMDkwCi0jZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMTMJCQkJCSAweDIwMDk0Ci0jZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMTQJCQkJCSAweDIwMDk4Ci0jZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMTUJCQkJCSAweDIwMDljCiAjZGVmaW5lIFhDTV9SRUdfTl9TTV9DVFhfTERfMgkJCQkJIDB4MjAwNjgKICNkZWZpbmUgWENNX1JFR19OX1NNX0NUWF9MRF8zCQkJCQkgMHgyMDA2YwogI2RlZmluZSBYQ01fUkVHX05fU01fQ1RYX0xEXzQJCQkJCSAweDIwMDcwCkBAIC00ODY4LDMwICs0MTI1LDggQEAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHgxNjYwNjgKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMwkJCQkgMHgxNjYwNmMKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNAkJCQkgMHgxNjYwNzAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNQkJCQkgMHgxNjYwNzQKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNgkJCQkgMHgxNjYwNzgKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNwkJCQkgMHgxNjYwN2MKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOAkJCQkgMHgxNjYwODAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOQkJCQkgMHgxNjYwODQKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMAkJCQkgMHgxNjYwNjAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMQkJCQkgMHgxNjYwNjQKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMgkJCQkgMHgxNjYwNjgKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMwkJCQkgMHgxNjYwNmMKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNAkJCQkgMHgxNjYwNzAKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yCQkJCSAweDE2NjA0MAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIwCQkJCSAweDE2NjA4OAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweDE2NjA4YwotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIyCQkJCSAweDE2NjA5MAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIzCQkJCSAweDE2NjA5NAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI0CQkJCSAweDE2NjA5OAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI1CQkJCSAweDE2NjA5YwotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI2CQkJCSAweDE2NjBhMAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI3CQkJCSAweDE2NjBhNAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI4CQkJCSAweDE2NjBhOAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzI5CQkJCSAweDE2NjBhYwogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMJCQkJIDB4MTY2MDQ0Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzAJCQkJIDB4MTY2MGIwCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMzEJCQkJIDB4MTY2MGI0CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfNAkJCQkgMHgxNjYwNDgKICNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF81CQkJCSAweDE2NjA0YwogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzYJCQkJIDB4MTY2MDUwCkBAIC00OTAyLDE2ICs0MTM3LDYgQEAKICAgIG9yIGF1dG8tbWFzay1tb2RlICgxKSAqLwogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMCAJCQkJIDB4MTY2MWI4CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xIAkJCQkgMHgxNjYxYmMKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzEwCQkJCSAweDE2NjFlMAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMTEJCQkJIDB4MTY2MWU0Ci0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xMgkJCQkgMHgxNjYxZTgKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzEzCQkJCSAweDE2NjFlYwotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMTQJCQkJIDB4MTY2MWYwCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xNQkJCQkgMHgxNjYxZjQKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzE2CQkJCSAweDE2NjFmOAotI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX01PREVfMTcJCQkJIDB4MTY2MWZjCi0jZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8xOAkJCQkgMHgxNjYyMDAKLSNkZWZpbmUgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzE5CQkJCSAweDE2NjIwNAogLyogW1JXIDEzXSBUaGUgc3RhcnQgYWRkcmVzcyBpbiB0aGUgaW50ZXJuYWwgUkFNIGZvciB0aGUgY2ZjX3JzcCBsY2lkICovCiAjZGVmaW5lIFhTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUgkJCQkgMHgxNjYwMDgKIC8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCkBAIC01MTE5LDEwICs0MzQ0LDYgQEAKICNkZWZpbmUgTUNQUl9OVk1fQ09NTUFORF9GSVJTVAkJCQkJICgxTDw8NykKICNkZWZpbmUgTUNQUl9OVk1fQ09NTUFORF9MQVNUCQkJCQkgKDFMPDw4KQogI2RlZmluZSBNQ1BSX05WTV9DT01NQU5EX1dSCQkJCQkgKDFMPDw1KQotI2RlZmluZSBNQ1BSX05WTV9DT01NQU5EX1dSRU4JCQkJCSAoMUw8PDE2KQotI2RlZmluZSBNQ1BSX05WTV9DT01NQU5EX1dSRU5fQklUU0hJRlQJCQkJIDE2Ci0jZGVmaW5lIE1DUFJfTlZNX0NPTU1BTkRfV1JESQkJCQkJICgxTDw8MTcpCi0jZGVmaW5lIE1DUFJfTlZNX0NPTU1BTkRfV1JESV9CSVRTSElGVAkJCQkgMTcKICNkZWZpbmUgTUNQUl9OVk1fU1dfQVJCX0FSQl9BUkIxCQkJCSAoMUw8PDkpCiAjZGVmaW5lIE1DUFJfTlZNX1NXX0FSQl9BUkJfUkVRX0NMUjEJCQkJICgxTDw8NSkKICNkZWZpbmUgTUNQUl9OVk1fU1dfQVJCX0FSQl9SRVFfU0VUMQkJCQkgKDFMPDwxKQpAQCAtNTIyMywxMCArNDQ0NCw2IEBACiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fNwkJCQkJIDcKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19DTFJfUE9TCQkJCSAxNgogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUCQkJCSAoMHhmZkw8PDI0KQotI2RlZmluZSBHUkNfTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVDcJCQkJIDB4ODAwMDAwMDAKLSNkZWZpbmUgR1JDX01JU0NfUkVHSVNURVJTX1NQSU9fRkxPQVQ2CQkJCSAweDQwMDAwMDAwCi0jZGVmaW5lIEdSQ19NSVNDX1JFR0lTVEVSU19TUElPX0ZMT0FUNQkJCQkgMHgyMDAwMDAwMAotI2RlZmluZSBHUkNfTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVDQJCQkJIDB4MTAwMDAwMDAKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfU1BJT19GTE9BVF9QT1MJCQkJIDI0CiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWgkJCQkgMgogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPX0lOVF9PTERfU0VUX1BPUwkJCSAxNgpAQCAtNTM0NCw3ICs0NTYxLDggQEAKICNkZWZpbmUgTEFUQ0hFRF9BVFROX1NDUEFEX1BBUklUWV9NQ1AJCTMzCiAKICNkZWZpbmUgR0VORVJBTF9BVFRFTl9XT1JEKGF0dGVuX25hbWUpCSAgICAgICAoKDk0ICsgYXR0ZW5fbmFtZSkgLyAzMikKLSNkZWZpbmUgR0VORVJBTF9BVFRFTl9PRkZTRVQoYXR0ZW5fbmFtZSkgICAgICAgKDEgPDwgKCg5NCArIGF0dGVuX25hbWUpICUgMzIpKQorI2RlZmluZSBHRU5FUkFMX0FUVEVOX09GRlNFVChhdHRlbl9uYW1lKVwKKwkoMVVMIDw8ICgoOTQgKyBhdHRlbl9uYW1lKSAlIDMyKSkKIC8qCiAgKiBUaGlzIGZpbGUgZGVmaW5lcyBHUkMgYmFzZSBhZGRyZXNzIGZvciBldmVyeSBibG9jay4KICAqIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBieSBjaGlwc2ltLCBhc20gbWljcm9jb2RlIGFuZCBjcHAgbWljcm9jb2RlLgpAQCAtNTU2OCw2ICs0Nzg2LDkgQEAKICNkZWZpbmUgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyX0FEVlJfMTBHX0tSCQkweDAwODAKIAogI2RlZmluZSBNRElPX1JFR19CQU5LX1JYMAkJCQkweDgwYjAKKyNkZWZpbmUgTURJT19SWDBfUlhfU1RBVFVTCQkJCTB4MTAKKyNkZWZpbmUgTURJT19SWDBfUlhfU1RBVFVTX1NJR0RFVAkJCTB4ODAwMAorI2RlZmluZSBNRElPX1JYMF9SWF9TVEFUVVNfUlhfU0VRX0RPTkUJCQkweDEwMDAKICNkZWZpbmUgTURJT19SWDBfUlhfRVFfQk9PU1QJCQkJMHgxYwogI2RlZmluZSBNRElPX1JYMF9SWF9FUV9CT09TVF9FUVVBTElaRVJfQ1RSTF9NQVNLCTB4NwogI2RlZmluZSBNRElPX1JYMF9SWF9FUV9CT09TVF9PRkZTRVRfQ1RSTAkJMHgxMApAQCAtNTc2MSwxMiArNDk4MiwyMiBAQAogI2RlZmluZSBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX1NISUZUCQkJCTcKICNkZWZpbmUgTURJT19PVkVSXzFHX0xQX1VQMwkJCQkJCTB4MUUKIAorI2RlZmluZSBNRElPX1JFR19CQU5LX1JFTU9URV9QSFkJCQkweDgzMzAKKyNkZWZpbmUgTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTCQkJCTB4MTAKKyNkZWZpbmUgTURJT19SRU1PVEVfUEhZX01JU0NfUlhfU1RBVFVTX0NMMzdfRlNNX1JFQ0VJVkVEX09WRVIxR19NU0cJMHgwMDEwCisjZGVmaW5lIE1ESU9fUkVNT1RFX1BIWV9NSVNDX1JYX1NUQVRVU19DTDM3X0ZTTV9SRUNFSVZFRF9CUkNNX09VSV9NU0cJMHgwNjAwCisKICNkZWZpbmUgTURJT19SRUdfQkFOS19CQU1fTkVYVF9QQUdFCQkJMHg4MzUwCiAjZGVmaW5lIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkwJCQkweDEwCiAjZGVmaW5lIE1ESU9fQkFNX05FWFRfUEFHRV9NUDVfTkVYVF9QQUdFX0NUUkxfQkFNX01PREUJCQkweDAwMDEKICNkZWZpbmUgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTF9URVRPTl9BTgkJCTB4MDAwMgogCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAJCTB4ODM3MAorI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVUNUUkwJCQkJMHgxMAorI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVUNUUkxfVVNUQVQxX01VWFNFTAkJCTB4MDAwMgorI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVVNUQVQxCQkJCTB4MTEKKyNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX1VTVEFUMV9MSU5LX1NUQVRVU19DSEVDSwkJCTB4MDEwMAorI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfVVNUQVQxX0FOX0dPT0RfQ0hFQ0tfQkFNMzcJCTB4MDQwMAogI2RlZmluZSBNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxIAkJCTB4MTIKICNkZWZpbmUgTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMMV9CQU1fRU4JCQkJMHg4MDAwCiAjZGVmaW5lIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX1NUQVRJT05fTU5HUl9FTgkJMHg0MDAwCkBAIC01ODQzLDI1ICs1MDc0LDMzIEBACiAjZGVmaW5lIE1ESU9fUE1BX1JFR19ST01fVkVSMgkJMHhjYTFhCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19FRENfRkZFX01BSU4JMHhjYTFiCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19QTExfQkFORFdJRFRICTB4Y2ExZAotI2RlZmluZSBNRElPX1BNQV9SRUdfR0VOX0NUUkwyCQkweGNhMWUKKyNkZWZpbmUgTURJT19QTUFfUkVHX1BMTF9DVFJMCQkweGNhMWUKICNkZWZpbmUgTURJT19QTUFfUkVHX01JU0NfQ1RSTDAgCTB4Y2EyMwogI2RlZmluZSBNRElPX1BNQV9SRUdfTFJNX01PREUJCTB4Y2EzZgogI2RlZmluZSBNRElPX1BNQV9SRUdfQ0RSX0JBTkRXSURUSAkweGNhNDYKICNkZWZpbmUgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEgCTB4Y2E4NQogCi0jZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkwgCTB4ODAwMAotI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLCTB4MDAwYwotI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfSURMRQkJMHgwMDAwCi0jZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19DT01QTEVURQkweDAwMDQKLSNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0lOX1BST0dSRVNTCTB4MDAwOAotI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfRkFJTEVECTB4MDAwYwotI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9CWVRFX0NOVAkweDgwMDIKLSNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfTUVNX0FERFIJMHg4MDAzCisjZGVmaW5lIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTAkJMHg4MDAwCisjZGVmaW5lIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSwkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfSURMRQkJMHgwMDAwCisjZGVmaW5lIE1ESU9fUE1BX1JFR19TRlBfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFCTB4MDAwNAorI2RlZmluZSBNRElPX1BNQV9SRUdfU0ZQX1RXT19XSVJFX1NUQVRVU19JTl9QUk9HUkVTUwkweDAwMDgKKyNkZWZpbmUgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9TVEFUVVNfRkFJTEVEIAkweDAwMGMKKyNkZWZpbmUgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9CWVRFX0NOVAkweDgwMDIKKyNkZWZpbmUgTURJT19QTUFfUkVHX1NGUF9UV09fV0lSRV9NRU1fQUREUgkweDgwMDMKICNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9CVUYJMHhjODIwCiAjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfTUFTSyAweGZmCiAjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwxCQkweGNhMDEKICNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDIJCTB4Y2EwNQogCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX1NMQVZFX0FERFIJMHg4MDA1CisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI3X1RXT19XSVJFX0RBVEFfQlVGCTB4ODAwNworI2RlZmluZSBNRElPX1BNQV9SRUdfODcyN19UV09fV0lSRV9EQVRBX01BU0sgMHhmZgorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyN19NSVNDX0NUUkwJCTB4ODMwOQorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyN19UWF9DVFJMMQkJMHhjYTAyCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI3X1RYX0NUUkwyCQkweGNhMDUKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjdfUENTX09QVF9DVFJMCQkweGM4MDgKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjdfR1BJT19DVFJMCQkweGM4MGUKIAogI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFVgkJCTB4YzgwMQogI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUwkJMHhjODIwCkBAIC01ODcyLDYgKzUxMTEsMTMgQEAKICNkZWZpbmUgTURJT19QTUFfUkVHXzcxMDFfVkVSMQkJMHhjMDI2CiAjZGVmaW5lIE1ESU9fUE1BX1JFR183MTAxX1ZFUjIJCTB4YzAyNwogCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NDgxX1BNRF9TSUdOQUwJMHhhODExCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NDgxX0xFRDFfTUFTSwkweGE4MmMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg0ODFfTEVEMl9NQVNLCTB4YTgyZgorI2RlZmluZSBNRElPX1BNQV9SRUdfODQ4MV9MRUQzX01BU0sJMHhhODMyCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NDgxX1NJR05BTF9NQVNLCTB4YTgzNQorI2RlZmluZSBNRElPX1BNQV9SRUdfODQ4MV9MSU5LX1NJR05BTAkweGE4M2IKKwogCiAjZGVmaW5lIE1ESU9fV0lTX0RFVkFECQkJMHgyCiAvKmJjbSovCkBAIC01OTI1LDYgKzUxNzEsMTIgQEAKIAogI2RlZmluZSBNRElPX0FOX1JFR184MDczXzJfNUcJCTB4ODMyOQogCisjZGVmaW5lIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX01JSV9DVFJMCTB4ZmZlMAorI2RlZmluZSBNRElPX0FOX1JFR184NDgxX0xFR0FDWV9BTl9BRFYJCTB4ZmZlNAorI2RlZmluZSBNRElPX0FOX1JFR184NDgxXzEwMDBUX0NUUkwJCTB4ZmZlOQorI2RlZmluZSBNRElPX0FOX1JFR184NDgxX0VYUEFOU0lPTl9SRUdfUkRfUlcJMHhmZmY1CisjZGVmaW5lIE1ESU9fQU5fUkVHXzg0ODFfRVhQQU5TSU9OX1JFR19BQ0NFU1MJMHhmZmY3CisjZGVmaW5lIE1ESU9fQU5fUkVHXzg0ODFfTEVHQUNZX1NIQURPVwkJMHhmZmZjCiAKICNkZWZpbmUgSUdVX0ZVTkNfQkFTRQkJCTB4MDQwMAogCkBAIC01OTU3LDMgKzUyMDksMTE2IEBACiAjZGVmaW5lIENPTU1BTkRfUkVHX1NJTURfTk9NQVNLICAgICAweDFjCiAKIAorI2RlZmluZSBJR1VfTUVNX0JBU0UJCQkJCQkweDAwMDAKKworI2RlZmluZSBJR1VfTUVNX01TSVhfQkFTRQkJCQkJMHgwMDAwCisjZGVmaW5lIElHVV9NRU1fTVNJWF9VUFBFUgkJCQkJMHgwMDdmCisjZGVmaW5lIElHVV9NRU1fTVNJWF9SRVNFUlZFRF9VUFBFUgkJCTB4MDFmZgorCisjZGVmaW5lIElHVV9NRU1fUEJBX01TSVhfQkFTRQkJCQkweDAyMDAKKyNkZWZpbmUgSUdVX01FTV9QQkFfTVNJWF9VUFBFUgkJCQkweDAyMDAKKworI2RlZmluZSBJR1VfQ01EX0JBQ0tXQVJEX0NPTVBfUFJPRF9VUEQJCTB4MDIwMQorI2RlZmluZSBJR1VfTUVNX1BCQV9NU0lYX1JFU0VSVkVEX1VQUEVSIAkweDAzZmYKKworI2RlZmluZSBJR1VfQ01EX0lOVF9BQ0tfQkFTRQkJCQkweDA0MDAKKyNkZWZpbmUgSUdVX0NNRF9JTlRfQUNLX1VQUEVSXAorCShJR1VfQ01EX0lOVF9BQ0tfQkFTRSArIE1BWF9TQl9QRVJfUE9SVCAqIE5VTV9PRl9QT1JUU19QRVJfUEFUSCAtIDEpCisjZGVmaW5lIElHVV9DTURfSU5UX0FDS19SRVNFUlZFRF9VUFBFUgkJMHgwNGZmCisKKyNkZWZpbmUgSUdVX0NNRF9FMl9QUk9EX1VQRF9CQVNFCQkJMHgwNTAwCisjZGVmaW5lIElHVV9DTURfRTJfUFJPRF9VUERfVVBQRVJcCisJKElHVV9DTURfRTJfUFJPRF9VUERfQkFTRSArIE1BWF9TQl9QRVJfUE9SVCAqIE5VTV9PRl9QT1JUU19QRVJfUEFUSCAtIDEpCisjZGVmaW5lIElHVV9DTURfRTJfUFJPRF9VUERfUkVTRVJWRURfVVBQRVIJMHgwNTlmCisKKyNkZWZpbmUgSUdVX0NNRF9BVFROX0JJVF9VUERfVVBQRVIJCQkweDA1YTAKKyNkZWZpbmUgSUdVX0NNRF9BVFROX0JJVF9TRVRfVVBQRVIJCQkweDA1YTEKKyNkZWZpbmUgSUdVX0NNRF9BVFROX0JJVF9DTFJfVVBQRVIJCQkweDA1YTIKKworI2RlZmluZSBJR1VfUkVHX1NJU1JfTURQQ19XTUFTS19VUFBFUgkJMHgwNWEzCisjZGVmaW5lIElHVV9SRUdfU0lTUl9NRFBDX1dNQVNLX0xTQl9VUFBFUgkweDA1YTQKKyNkZWZpbmUgSUdVX1JFR19TSVNSX01EUENfV01BU0tfTVNCX1VQUEVSCTB4MDVhNQorI2RlZmluZSBJR1VfUkVHX1NJU1JfTURQQ19XT01BU0tfVVBQRVIJCTB4MDVhNgorCisjZGVmaW5lIElHVV9SRUdfUkVTRVJWRURfVVBQRVIJCQkJMHgwNWZmCisKKworI2RlZmluZSBDRFVfUkVHSU9OX05VTUJFUl9YQ01fQUcgMgorI2RlZmluZSBDRFVfUkVHSU9OX05VTUJFUl9VQ01fQUcgNAorCisKKy8qKgorICogU3RyaW5nLXRvLWNvbXByZXNzIFszMTo4XSA9IENJRCAoYWxsIDI0IGJpdHMpCisgKiBTdHJpbmctdG8tY29tcHJlc3MgWzc6NF0gPSBSZWdpb24KKyAqIFN0cmluZy10by1jb21wcmVzcyBbMzowXSA9IFR5cGUKKyAqLworI2RlZmluZSBDRFVfVkFMSURfREFUQShfY2lkLCBfcmVnaW9uLCBfdHlwZSlcCisJKCgoX2NpZCkgPDwgOCkgfCAoKChfcmVnaW9uKSYweGYpPDw0KSB8ICgoKF90eXBlKSYweGYpKSkKKyNkZWZpbmUgQ0RVX0NSQzgoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpXAorCShjYWxjX2NyYzgoQ0RVX1ZBTElEX0RBVEEoX2NpZCwgX3JlZ2lvbiwgX3R5cGUpLCAweGZmKSkKKyNkZWZpbmUgQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQShfY2lkLCBfcmVnaW9uLCBfdHlwZSlcCisJKDB4ODAgfCAoKENEVV9DUkM4KF9jaWQsIF9yZWdpb24sIF90eXBlKSkgJiAweDdmKSkKKyNkZWZpbmUgQ0RVX1JTUlZEX1ZBTFVFX1RZUEVfQihfY3JjLCBfdHlwZSlcCisJKDB4ODAgfCAoKF90eXBlKSYweGYgPDwgMykgfCAoKENEVV9DUkM4KF9jaWQsIF9yZWdpb24sIF90eXBlKSkgJiAweDcpKQorI2RlZmluZSBDRFVfUlNSVkRfSU5WQUxJREFURV9DT05URVhUX1ZBTFVFKF92YWwpICgoX3ZhbCkgJiB+MHg4MCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGVzY3JpcHRpb246CisgKgkgICBDYWxjdWxhdGVzIGNyYyA4IG9uIGEgd29yZCB2YWx1ZTogcG9seW5vbWlhbCAwLTEtMi04CisgKgkgICBDb2RlIHdhcyB0cmFuc2xhdGVkIGZyb20gVmVyaWxvZy4KKyAqIFJldHVybjoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdTggY2FsY19jcmM4KHUzMiBkYXRhLCB1OCBjcmMpCit7CisJdTggRFszMl07CisJdTggTmV3Q1JDWzhdOworCXU4IENbOF07CisJdTggY3JjX3JlczsKKwl1OCBpOworCisJLyogc3BsaXQgdGhlIGRhdGEgaW50byAzMSBiaXRzICovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJRFtpXSA9ICh1OCkoZGF0YSAmIDEpOworCQlkYXRhID0gZGF0YSA+PiAxOworCX0KKworCS8qIHNwbGl0IHRoZSBjcmMgaW50byA4IGJpdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCUNbaV0gPSBjcmMgJiAxOworCQljcmMgPSBjcmMgPj4gMTsKKwl9CisKKwlOZXdDUkNbMF0gPSBEWzMxXSBeIERbMzBdIF4gRFsyOF0gXiBEWzIzXSBeIERbMjFdIF4gRFsxOV0gXiBEWzE4XSBeCisJCSAgICBEWzE2XSBeIERbMTRdIF4gRFsxMl0gXiBEWzhdIF4gRFs3XSBeIERbNl0gXiBEWzBdIF4gQ1s0XSBeCisJCSAgICBDWzZdIF4gQ1s3XTsKKwlOZXdDUkNbMV0gPSBEWzMwXSBeIERbMjldIF4gRFsyOF0gXiBEWzI0XSBeIERbMjNdIF4gRFsyMl0gXiBEWzIxXSBeCisJCSAgICBEWzIwXSBeIERbMThdIF4gRFsxN10gXiBEWzE2XSBeIERbMTVdIF4gRFsxNF0gXiBEWzEzXSBeCisJCSAgICBEWzEyXSBeIERbOV0gXiBEWzZdIF4gRFsxXSBeIERbMF0gXiBDWzBdIF4gQ1s0XSBeIENbNV0gXgorCQkgICAgQ1s2XTsKKwlOZXdDUkNbMl0gPSBEWzI5XSBeIERbMjhdIF4gRFsyNV0gXiBEWzI0XSBeIERbMjJdIF4gRFsxN10gXiBEWzE1XSBeCisJCSAgICBEWzEzXSBeIERbMTJdIF4gRFsxMF0gXiBEWzhdIF4gRFs2XSBeIERbMl0gXiBEWzFdIF4gRFswXSBeCisJCSAgICBDWzBdIF4gQ1sxXSBeIENbNF0gXiBDWzVdOworCU5ld0NSQ1szXSA9IERbMzBdIF4gRFsyOV0gXiBEWzI2XSBeIERbMjVdIF4gRFsyM10gXiBEWzE4XSBeIERbMTZdIF4KKwkJICAgIERbMTRdIF4gRFsxM10gXiBEWzExXSBeIERbOV0gXiBEWzddIF4gRFszXSBeIERbMl0gXiBEWzFdIF4KKwkJICAgIENbMV0gXiBDWzJdIF4gQ1s1XSBeIENbNl07CisJTmV3Q1JDWzRdID0gRFszMV0gXiBEWzMwXSBeIERbMjddIF4gRFsyNl0gXiBEWzI0XSBeIERbMTldIF4gRFsxN10gXgorCQkgICAgRFsxNV0gXiBEWzE0XSBeIERbMTJdIF4gRFsxMF0gXiBEWzhdIF4gRFs0XSBeIERbM10gXiBEWzJdIF4KKwkJICAgIENbMF0gXiBDWzJdIF4gQ1szXSBeIENbNl0gXiBDWzddOworCU5ld0NSQ1s1XSA9IERbMzFdIF4gRFsyOF0gXiBEWzI3XSBeIERbMjVdIF4gRFsyMF0gXiBEWzE4XSBeIERbMTZdIF4KKwkJICAgIERbMTVdIF4gRFsxM10gXiBEWzExXSBeIERbOV0gXiBEWzVdIF4gRFs0XSBeIERbM10gXiBDWzFdIF4KKwkJICAgIENbM10gXiBDWzRdIF4gQ1s3XTsKKwlOZXdDUkNbNl0gPSBEWzI5XSBeIERbMjhdIF4gRFsyNl0gXiBEWzIxXSBeIERbMTldIF4gRFsxN10gXiBEWzE2XSBeCisJCSAgICBEWzE0XSBeIERbMTJdIF4gRFsxMF0gXiBEWzZdIF4gRFs1XSBeIERbNF0gXiBDWzJdIF4gQ1s0XSBeCisJCSAgICBDWzVdOworCU5ld0NSQ1s3XSA9IERbMzBdIF4gRFsyOV0gXiBEWzI3XSBeIERbMjJdIF4gRFsyMF0gXiBEWzE4XSBeIERbMTddIF4KKwkJICAgIERbMTVdIF4gRFsxM10gXiBEWzExXSBeIERbN10gXiBEWzZdIF4gRFs1XSBeIENbM10gXiBDWzVdIF4KKwkJICAgIENbNl07CisKKwljcmNfcmVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQljcmNfcmVzIHw9IChOZXdDUkNbaV0gPDwgaSk7CisKKwlyZXR1cm4gY3JjX3JlczsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggZDRiNTcwOC4uY2VhNWNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMTEwOSw3ICsxMTA5LDggQEAKIAkJCS8vbXV4IG1hY2hpbmUgaW4gY2FzZSBvZiBFWFBJUkVEIGV2ZW4gaWYgTElOS19ET1dOIGRpZG4ndCBhcnJpdmUgZm9yIHRoZSBwb3J0LgogCQkJcG9ydC0+cGFydG5lcl9vcGVyLnBvcnRfc3RhdGUgJj0gfkFEX1NUQVRFX1NZTkNIUk9OSVpBVElPTjsKIAkJCXBvcnQtPnNtX3ZhcnMgJj0gfkFEX1BPUlRfTUFUQ0hFRDsKLQkJCXBvcnQtPnBhcnRuZXJfb3Blci5wb3J0X3N0YXRlIHw9IEFEX1NIT1JUX1RJTUVPVVQ7CisJCQlwb3J0LT5wYXJ0bmVyX29wZXIucG9ydF9zdGF0ZSB8PQorCQkJCUFEX1NUQVRFX0xBQ1BfQUNUSVZJVFk7CiAJCQlwb3J0LT5zbV9yeF90aW1lcl9jb3VudGVyID0gX19hZF90aW1lcl90b190aWNrcyhBRF9DVVJSRU5UX1dISUxFX1RJTUVSLCAodTE2KShBRF9TSE9SVF9USU1FT1VUKSk7CiAJCQlwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGUgfD0gQURfU1RBVEVfRVhQSVJFRDsKIAkJCWJyZWFrOwpAQCAtMTEyMyw3ICsxMTI0LDcgQEAKIAkJCS8vIGRldGVjdCBsb29wYmFjayBzaXR1YXRpb24KIAkJCWlmICghTUFDX0FERFJFU1NfQ09NUEFSRSgmKGxhY3BkdS0+YWN0b3Jfc3lzdGVtKSwgJihwb3J0LT5hY3Rvcl9zeXN0ZW0pKSkgewogCQkJCS8vIElORk9fUkVDRUlWRURfTE9PUEJBQ0tfRlJBTUVTCi0JCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBBbiBpbGxlZ2FsIGxvb3BiYWNrIG9jY3VycmVkIG9uICIKKwkJCQlwcl9lcnIoRFJWX05BTUUgIjogJXM6IEFuIGlsbGVnYWwgbG9vcGJhY2sgb2NjdXJyZWQgb24gIgogCQkJCSAgICAgICAiYWRhcHRlciAoJXMpLiBDaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byB2ZXJpZnkgdGhhdCBhbGwgIgogCQkJCSAgICAgICAiQWRhcHRlcnMgYXJlIGNvbm5lY3RlZCB0byA4MDIuM2FkIGNvbXBsaWFudCBzd2l0Y2ggcG9ydHNcbiIsCiAJCQkJICAgICAgIHBvcnQtPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgcG9ydC0+c2xhdmUtPmRldi0+bmFtZSk7CkBAIC0xMzA1LDExICsxMzA2LDEzIEBACiAJCQl9CiAJCX0KIAkJaWYgKCFjdXJyX3BvcnQpIHsgLy8gbWVhbmluZzogdGhlIHBvcnQgd2FzIHJlbGF0ZWQgdG8gYW4gYWdncmVnYXRvciBidXQgd2FzIG5vdCBvbiB0aGUgYWdncmVnYXRvciBwb3J0IGxpc3QKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IFBvcnQgJWQgKG9uICVzKSB3YXMgIgotCQkJICAgICAgICJyZWxhdGVkIHRvIGFnZ3JlZ2F0b3IgJWQgYnV0IHdhcyBub3Qgb24gaXRzIHBvcnQgbGlzdFxuIiwKLQkJCSAgICAgICBwb3J0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsCi0JCQkgICAgICAgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsIHBvcnQtPnNsYXZlLT5kZXYtPm5hbWUsCi0JCQkgICAgICAgcG9ydC0+YWdncmVnYXRvci0+YWdncmVnYXRvcl9pZGVudGlmaWVyKTsKKwkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IFBvcnQgJWQgKG9uICVzKSAiCisJCQkJICAgIndhcyByZWxhdGVkIHRvIGFnZ3JlZ2F0b3IgJWQgYnV0IHdhcyBub3QgIgorCQkJCSAgICJvbiBpdHMgcG9ydCBsaXN0XG4iLAorCQkJCSAgIHBvcnQtPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwKKwkJCQkgICBwb3J0LT5hY3Rvcl9wb3J0X251bWJlciwKKwkJCQkgICBwb3J0LT5zbGF2ZS0+ZGV2LT5uYW1lLAorCQkJCSAgIHBvcnQtPmFnZ3JlZ2F0b3ItPmFnZ3JlZ2F0b3JfaWRlbnRpZmllcik7CiAJCX0KIAl9CiAJLy8gc2VhcmNoIG9uIGFsbCBhZ2dyZWdhdG9ycyBmb3IgYSBzdWl0YWJsZSBhZ2dyZWdhdG9yIGZvciB0aGlzIHBvcnQKQEAgLTEzNzgsNyArMTM4MSw4IEBACiAKIAkJCXByX2RlYnVnKCJQb3J0ICVkIGpvaW5lZCBMQUcgJWQobmV3IExBRylcbiIsIHBvcnQtPmFjdG9yX3BvcnRfbnVtYmVyLCBwb3J0LT5hZ2dyZWdhdG9yLT5hZ2dyZWdhdG9yX2lkZW50aWZpZXIpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBQb3J0ICVkIChvbiAlcykgZGlkIG5vdCBmaW5kIGEgc3VpdGFibGUgYWdncmVnYXRvclxuIiwKKwkJCXByX2VycihEUlZfTkFNRSAiOiAlczogUG9ydCAlZCAob24gJXMpIGRpZCBub3QgZmluZCAiCisJCQkgICAgICAgImEgc3VpdGFibGUgYWdncmVnYXRvclxuIiwKIAkJCSAgICAgICBwb3J0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsCiAJCQkgICAgICAgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsIHBvcnQtPnNsYXZlLT5kZXYtPm5hbWUpOwogCQl9CkBAIC0xNDU1LDEwICsxNDU5LDEwIEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkgICAgICAgIjogJXM6IEltcG9zc2libGUgYWdnIHNlbGVjdCBtb2RlICVkXG4iLAotCQkgICAgICAgY3Vyci0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLAotCQkgICAgICAgX19nZXRfYWdnX3NlbGVjdGlvbl9tb2RlKGN1cnItPmxhZ19wb3J0cykpOworCQlwcl93YXJuaW5nKERSVl9OQU1FCisJCQkgICAiOiAlczogSW1wb3NzaWJsZSBhZ2cgc2VsZWN0IG1vZGUgJWRcbiIsCisJCQkgICBjdXJyLT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsCisJCQkgICBfX2dldF9hZ2dfc2VsZWN0aW9uX21vZGUoY3Vyci0+bGFnX3BvcnRzKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTU2MSw3ICsxNTY1LDcgQEAKIAogCQkvLyBjaGVjayBpZiBhbnkgcGFydG5lciByZXBseXMKIAkJaWYgKGJlc3QtPmlzX2luZGl2aWR1YWwpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IE5vIDgwMi4zYWQiCisJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBObyA4MDIuM2FkIgogCQkJICAgICAgICIgcmVzcG9uc2UgZnJvbSB0aGUgbGluayBwYXJ0bmVyIGZvciBhbnkiCiAJCQkgICAgICAgIiBhZGFwdGVycyBpbiB0aGUgYm9uZFxuIiwKIAkJCSAgICAgICBiZXN0LT5zbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOwpAQCAtMTg4NCw3ICsxODg4LDggQEAKIAlzdHJ1Y3QgYWdncmVnYXRvciAqYWdncmVnYXRvcjsKIAogCWlmIChib25kID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzOiBUaGUgc2xhdmUgJXMgaXMgbm90IGF0dGFjaGVkIHRvIGl0cyBib25kXG4iLAorCQlwcl9lcnIoRFJWX05BTUUgIjogJXM6IFRoZSBzbGF2ZSAlcyBpcyBub3QgYXR0YWNoZWQgdG8gIgorCQkgICAgICAgIml0cyBib25kXG4iLAogCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE5NjAsOSArMTk2NSw5IEBACiAKIAkvLyBpZiBzbGF2ZSBpcyBudWxsLCB0aGUgd2hvbGUgcG9ydCBpcyBub3QgaW5pdGlhbGl6ZWQKIAlpZiAoIXBvcnQtPnNsYXZlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogV2FybmluZzogJXM6IFRyeWluZyB0byAiCi0JCSAgICAgICAidW5iaW5kIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKLQkJICAgICAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CisJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogV2FybmluZzogJXM6IFRyeWluZyB0byAiCisJCQkgICAidW5iaW5kIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKKwkJCSAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE5OTMsOCArMTk5OCw4IEBACiAJCQkJcHJfZGVidWcoIlNvbWUgcG9ydChzKSByZWxhdGVkIHRvIExBRyAlZCAtIHJlcGxhY2Vpbmcgd2l0aCBMQUcgJWRcbiIsIGFnZ3JlZ2F0b3ItPmFnZ3JlZ2F0b3JfaWRlbnRpZmllciwgbmV3X2FnZ3JlZ2F0b3ItPmFnZ3JlZ2F0b3JfaWRlbnRpZmllcik7CiAKIAkJCQlpZiAoKG5ld19hZ2dyZWdhdG9yLT5sYWdfcG9ydHMgPT0gcG9ydCkgJiYgbmV3X2FnZ3JlZ2F0b3ItPmlzX2FjdGl2ZSkgewotCQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICVzOiBSZW1vdmluZyBhbiBhY3RpdmUgYWdncmVnYXRvclxuIiwKLQkJCQkJICAgICAgIGFnZ3JlZ2F0b3ItPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CisJCQkJCXByX2luZm8oRFJWX05BTUUgIjogJXM6IFJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iLAorCQkJCQkJYWdncmVnYXRvci0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCQkJLy8gc2VsZWN0IG5ldyBhY3RpdmUgYWdncmVnYXRvcgogCQkJCQkgc2VsZWN0X25ld19hY3RpdmVfYWdnID0gMTsKIAkJCQl9CkBAIC0yMDI0LDE3ICsyMDI5LDE3IEBACiAJCQkJCWFkX2FnZ19zZWxlY3Rpb25fbG9naWMoX19nZXRfZmlyc3RfYWdnKHBvcnQpKTsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IHVuYmluZGluZyBhZ2dyZWdhdG9yLCAiCi0JCQkJICAgICAgICJhbmQgY291bGQgbm90IGZpbmQgYSBuZXcgYWdncmVnYXRvciBmb3IgaXRzIHBvcnRzXG4iLAotCQkJCSAgICAgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOworCQkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IHVuYmluZGluZyBhZ2dyZWdhdG9yLCAiCisJCQkJCSAgICJhbmQgY291bGQgbm90IGZpbmQgYSBuZXcgYWdncmVnYXRvciBmb3IgaXRzIHBvcnRzXG4iLAorCQkJCQkgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOwogCQkJfQogCQl9IGVsc2UgeyAvLyBpbiBjYXNlIHRoYXQgdGhlIG9ubHkgcG9ydCByZWxhdGVkIHRvIHRoaXMgYWdncmVnYXRvciBpcyB0aGUgb25lIHdlIHdhbnQgdG8gcmVtb3ZlCiAJCQlzZWxlY3RfbmV3X2FjdGl2ZV9hZ2cgPSBhZ2dyZWdhdG9yLT5pc19hY3RpdmU7CiAJCQkvLyBjbGVhciB0aGUgYWdncmVnYXRvcgogCQkJYWRfY2xlYXJfYWdnKGFnZ3JlZ2F0b3IpOwogCQkJaWYgKHNlbGVjdF9uZXdfYWN0aXZlX2FnZykgewotCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6IFJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iLAotCQkJCSAgICAgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOworCQkJCXByX2luZm8oRFJWX05BTUUgIjogJXM6IFJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iLAorCQkJCQlzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOwogCQkJCS8vIHNlbGVjdCBuZXcgYWN0aXZlIGFnZ3JlZ2F0b3IKIAkJCQlhZF9hZ2dfc2VsZWN0aW9uX2xvZ2ljKF9fZ2V0X2ZpcnN0X2FnZyhwb3J0KSk7CiAJCQl9CkBAIC0yMDYwLDggKzIwNjUsOCBAQAogCQkJCQkvLyBjbGVhciB0aGUgYWdncmVnYXRvcgogCQkJCQlhZF9jbGVhcl9hZ2codGVtcF9hZ2dyZWdhdG9yKTsKIAkJCQkJaWYgKHNlbGVjdF9uZXdfYWN0aXZlX2FnZykgewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlczogUmVtb3ZpbmcgYW4gYWN0aXZlIGFnZ3JlZ2F0b3JcbiIsCi0JCQkJCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKKwkJCQkJCXByX2luZm8oRFJWX05BTUUgIjogJXM6IFJlbW92aW5nIGFuIGFjdGl2ZSBhZ2dyZWdhdG9yXG4iLAorCQkJCQkJCXNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCQkJCQkvLyBzZWxlY3QgbmV3IGFjdGl2ZSBhZ2dyZWdhdG9yCiAJCQkJCQlhZF9hZ2dfc2VsZWN0aW9uX2xvZ2ljKF9fZ2V0X2ZpcnN0X2FnZyhwb3J0KSk7CiAJCQkJCX0KQEAgLTIxMDksOCArMjExNCw4IEBACiAJCS8vIHNlbGVjdCB0aGUgYWN0aXZlIGFnZ3JlZ2F0b3IgZm9yIHRoZSBib25kCiAJCWlmICgocG9ydCA9IF9fZ2V0X2ZpcnN0X3BvcnQoYm9uZCkpKSB7CiAJCQlpZiAoIXBvcnQtPnNsYXZlKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogV2FybmluZzogYm9uZCdzIGZpcnN0IHBvcnQgaXMgIgotCQkJCSAgICAgICAidW5pbml0aWFsaXplZFxuIiwgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBib25kJ3MgZmlyc3QgcG9ydCBpcyAiCisJCQkJCSAgICJ1bmluaXRpYWxpemVkXG4iLCBib25kLT5kZXYtPm5hbWUpOwogCQkJCWdvdG8gcmVfYXJtOwogCQkJfQogCkBAIC0yMTIzLDggKzIxMjgsOCBAQAogCS8vIGZvciBlYWNoIHBvcnQgcnVuIHRoZSBzdGF0ZSBtYWNoaW5lcwogCWZvciAocG9ydCA9IF9fZ2V0X2ZpcnN0X3BvcnQoYm9uZCk7IHBvcnQ7IHBvcnQgPSBfX2dldF9uZXh0X3BvcnQocG9ydCkpIHsKIAkJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlczogV2FybmluZzogRm91bmQgYW4gdW5pbml0aWFsaXplZCAiCi0JCQkgICAgICAgInBvcnRcbiIsIGJvbmQtPmRldi0+bmFtZSk7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzOiBXYXJuaW5nOiBGb3VuZCBhbiB1bmluaXRpYWxpemVkICIKKwkJCQkgICAicG9ydFxuIiwgYm9uZC0+ZGV2LT5uYW1lKTsKIAkJCWdvdG8gcmVfYXJtOwogCQl9CiAKQEAgLTIxNjUsOCArMjE3MCw5IEBACiAJCXBvcnQgPSAmKFNMQVZFX0FEX0lORk8oc2xhdmUpLnBvcnQpOwogCiAJCWlmICghcG9ydC0+c2xhdmUpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IHBvcnQgb2Ygc2xhdmUgJXMgaXMgIgotCQkJICAgICAgICJ1bmluaXRpYWxpemVkXG4iLCBzbGF2ZS0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUpOworCQkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlczogV2FybmluZzogcG9ydCBvZiBzbGF2ZSAlcyAiCisJCQkJICAgImlzIHVuaW5pdGlhbGl6ZWRcbiIsCisJCQkJICAgc2xhdmUtPmRldi0+bmFtZSwgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC0yMjExLDkgKzIyMTcsOSBAQAogCiAJLy8gaWYgc2xhdmUgaXMgbnVsbCwgdGhlIHdob2xlIHBvcnQgaXMgbm90IGluaXRpYWxpemVkCiAJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFdhcm5pbmc6ICVzOiBzcGVlZCAiCi0JCSAgICAgICAiY2hhbmdlZCBmb3IgdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAotCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBXYXJuaW5nOiAlczogc3BlZWQgIgorCQkJICAgImNoYW5nZWQgZm9yIHVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKKwkJCSAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyMzksOSArMjI0NSw5IEBACiAKIAkvLyBpZiBzbGF2ZSBpcyBudWxsLCB0aGUgd2hvbGUgcG9ydCBpcyBub3QgaW5pdGlhbGl6ZWQKIAlpZiAoIXBvcnQtPnNsYXZlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogJXM6IFdhcm5pbmc6IGR1cGxleCBjaGFuZ2VkICIKLQkJICAgICAgICJmb3IgdW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAotCQkgICAgICAgc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiAlczogV2FybmluZzogZHVwbGV4IGNoYW5nZWQgIgorCQkJICAgImZvciB1bmluaXRpYWxpemVkIHBvcnQgb24gJXNcbiIsCisJCQkgICBzbGF2ZS0+ZGV2LT5tYXN0ZXItPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjY4LDkgKzIyNzQsOSBAQAogCiAJLy8gaWYgc2xhdmUgaXMgbnVsbCwgdGhlIHdob2xlIHBvcnQgaXMgbm90IGluaXRpYWxpemVkCiAJaWYgKCFwb3J0LT5zbGF2ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6IFdhcm5pbmc6ICVzOiBsaW5rIHN0YXR1cyBjaGFuZ2VkIGZvciAiCi0JCSAgICAgICAidW5pbml0aWFsaXplZCBwb3J0IG9uICVzXG4iLAotCQkJc2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBXYXJuaW5nOiAlczogbGluayBzdGF0dXMgY2hhbmdlZCBmb3IgIgorCQkJICAgInVuaW5pdGlhbGl6ZWQgcG9ydCBvbiAlc1xuIiwKKwkJCSAgIHNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSwgc2xhdmUtPmRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIzNzQsOCArMjM4MCw4IEBACiAJfQogCiAJaWYgKGJvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8oYm9uZCwgJmFkX2luZm8pKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICI6ICVzOiBFcnJvcjogIgotCQkgICAgICAgImJvbmRfM2FkX2dldF9hY3RpdmVfYWdnX2luZm8gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQlwcl9kZWJ1ZyhEUlZfTkFNRSAiOiAlczogRXJyb3I6ICIKKwkJCSAiYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjM4NCw5ICsyMzkwLDggQEAKIAogCWlmIChzbGF2ZXNfaW5fYWdnID09IDApIHsKIAkJLyp0aGUgYWdncmVnYXRvciBpcyBlbXB0eSovCi0JCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICI6ICVzOiBFcnJvcjogYWN0aXZlICIKLQkJICAgICAgICJhZ2dyZWdhdG9yIGlzIGVtcHR5XG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcHJfZGVidWcoRFJWX05BTUUgIjogJXM6IEVycm9yOiBhY3RpdmUgYWdncmVnYXRvciBpcyBlbXB0eVxuIiwKKwkJCSBkZXYtPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI0MDQsNyArMjQwOSw3IEBACiAJfQogCiAJaWYgKHNsYXZlX2FnZ19ubyA+PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiAlczogRXJyb3I6IENvdWxkbid0IGZpbmQgYSBzbGF2ZSB0byB0eCBvbiAiCisJCXByX2VycihEUlZfTkFNRSAiOiAlczogRXJyb3I6IENvdWxkbid0IGZpbmQgYSBzbGF2ZSB0byB0eCBvbiAiCiAJCSAgICAgICAiZm9yIGFnZ3JlZ2F0b3IgSUQgJWRcbiIsIGRldi0+bmFtZSwgYWdnX2lkKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjQzMSw3ICsyNDM2LDcgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogaW50IGJvbmRfM2FkX2xhY3BkdV9yZWN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwYWNrZXRfdHlwZSogcHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA0NmQzMTJiLi45YjU5MzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC03OSw4ICs3OSwxNSBAQAogICovCiAjZGVmaW5lIFJMQl9QUk9NSVNDX1RJTUVPVVQJMTAqQUxCX1RJTUVSX1RJQ0tTX1BFUl9TRUMKIAotc3RhdGljIGNvbnN0IHU4IG1hY19iY2FzdFtFVEhfQUxFTl0gPSB7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9Owotc3RhdGljIGNvbnN0IHU4IG1hY192Nl9hbGxtY2FzdFtFVEhfQUxFTl0gPSB7MHgzMywweDMzLDB4MDAsMHgwMCwweDAwLDB4MDF9OworI2lmbmRlZiBfX2xvbmdfYWxpZ25lZAorI2RlZmluZSBfX2xvbmdfYWxpZ25lZCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKChzaXplb2YobG9uZykpKSkpCisjZW5kaWYKK3N0YXRpYyBjb25zdCB1OCBtYWNfYmNhc3RbRVRIX0FMRU5dIF9fbG9uZ19hbGlnbmVkID0geworCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKK307CitzdGF0aWMgY29uc3QgdTggbWFjX3Y2X2FsbG1jYXN0W0VUSF9BTEVOXSBfX2xvbmdfYWxpZ25lZCA9IHsKKwkweDMzLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAxCit9Owogc3RhdGljIGNvbnN0IGludCBhbGJfZGVsdGFfaW5fdGlja3MgPSBIWiAvIEFMQl9USU1FUl9USUNLU19QRVJfU0VDOwogCiAjcHJhZ21hIHBhY2soMSkKQEAgLTE5NCw3ICsyMDEsNyBAQAogCiAJbmV3X2hhc2h0YmwgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghbmV3X2hhc2h0YmwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCXByX2VycihEUlZfTkFNRQogCQkgICAgICAgIjogJXM6IEVycm9yOiBGYWlsZWQgdG8gYWxsb2NhdGUgVExCIGhhc2ggdGFibGVcbiIsCiAJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOwogCQlyZXR1cm4gLTE7CkBAIC00NjAsOCArNDY3LDggQEAKIAogCQkJaWYgKGFzc2lnbmVkX3NsYXZlKSB7CiAJCQkJcnhfaGFzaF90YWJsZVtpbmRleF0uc2xhdmUgPSBhc3NpZ25lZF9zbGF2ZTsKLQkJCQlpZiAobWVtY21wKHJ4X2hhc2hfdGFibGVbaW5kZXhdLm1hY19kc3QsCi0JCQkJCSAgIG1hY19iY2FzdCwgRVRIX0FMRU4pKSB7CisJCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMocnhfaGFzaF90YWJsZVtpbmRleF0ubWFjX2RzdCwKKwkJCQkJCQkgICAgICBtYWNfYmNhc3QpKSB7CiAJCQkJCWJvbmRfaW5mby0+cnhfaGFzaHRibFtpbmRleF0ubnR0ID0gMTsKIAkJCQkJYm9uZF9pbmZvLT5yeF9udHQgPSAxOwogCQkJCQkvKiBBIHNsYXZlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKQEAgLTUxMCw3ICs1MTcsNyBAQAogCQkJCSBjbGllbnRfaW5mby0+c2xhdmUtPmRldi0+ZGV2X2FkZHIsCiAJCQkJIGNsaWVudF9pbmZvLT5tYWNfZHN0KTsKIAkJaWYgKCFza2IpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJcHJfZXJyKERSVl9OQU1FCiAJCQkgICAgICAgIjogJXM6IEVycm9yOiBmYWlsZWQgdG8gY3JlYXRlIGFuIEFSUCBwYWNrZXRcbiIsCiAJCQkgICAgICAgY2xpZW50X2luZm8tPnNsYXZlLT5kZXYtPm1hc3Rlci0+bmFtZSk7CiAJCQljb250aW51ZTsKQEAgLTUyMSw3ICs1MjgsNyBAQAogCQlpZiAoY2xpZW50X2luZm8tPnRhZykgewogCQkJc2tiID0gdmxhbl9wdXRfdGFnKHNrYiwgY2xpZW50X2luZm8tPnZsYW5faWQpOwogCQkJaWYgKCFza2IpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCQlwcl9lcnIoRFJWX05BTUUKIAkJCQkgICAgICAgIjogJXM6IEVycm9yOiBmYWlsZWQgdG8gaW5zZXJ0IFZMQU4gdGFnXG4iLAogCQkJCSAgICAgICBjbGllbnRfaW5mby0+c2xhdmUtPmRldi0+bWFzdGVyLT5uYW1lKTsKIAkJCQljb250aW51ZTsKQEAgLTU3NSw3ICs1ODIsNyBAQAogCQljbGllbnRfaW5mbyA9ICYoYm9uZF9pbmZvLT5yeF9oYXNodGJsW2hhc2hfaW5kZXhdKTsKIAogCQlpZiAoKGNsaWVudF9pbmZvLT5zbGF2ZSA9PSBzbGF2ZSkgJiYKLQkJICAgIG1lbWNtcChjbGllbnRfaW5mby0+bWFjX2RzdCwgbWFjX2JjYXN0LCBFVEhfQUxFTikpIHsKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoY2xpZW50X2luZm8tPm1hY19kc3QsIG1hY19iY2FzdCkpIHsKIAkJCWNsaWVudF9pbmZvLT5udHQgPSAxOwogCQkJbnR0ID0gMTsKIAkJfQpAQCAtNjA1LDcgKzYxMiw3IEBACiAJCWNsaWVudF9pbmZvID0gJihib25kX2luZm8tPnJ4X2hhc2h0YmxbaGFzaF9pbmRleF0pOwogCiAJCWlmICghY2xpZW50X2luZm8tPnNsYXZlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCXByX2VycihEUlZfTkFNRQogCQkJICAgICAgICI6ICVzOiBFcnJvcjogZm91bmQgYSBjbGllbnQgd2l0aCBubyBjaGFubmVsIGluICIKIAkJCSAgICAgICAidGhlIGNsaWVudCdzIGhhc2ggdGFibGVcbiIsCiAJCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKQEAgLTYxNiw5ICs2MjMsOSBAQAogCQkgKiB1bmljYXN0IG1hYyBhZGRyZXNzLgogCQkgKi8KIAkJaWYgKChjbGllbnRfaW5mby0+aXBfc3JjID09IHNyY19pcCkgJiYKLQkJICAgIG1lbWNtcChjbGllbnRfaW5mby0+c2xhdmUtPmRldi0+ZGV2X2FkZHIsCi0JCQkgICBib25kLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgJiYKLQkJICAgIG1lbWNtcChjbGllbnRfaW5mby0+bWFjX2RzdCwgbWFjX2JjYXN0LCBFVEhfQUxFTikpIHsKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoY2xpZW50X2luZm8tPnNsYXZlLT5kZXYtPmRldl9hZGRyLAorCQkJICAgYm9uZC0+ZGV2LT5kZXZfYWRkcikgJiYKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoY2xpZW50X2luZm8tPm1hY19kc3QsIG1hY19iY2FzdCkpIHsKIAkJCWNsaWVudF9pbmZvLT5udHQgPSAxOwogCQkJYm9uZF9pbmZvLT5yeF9udHQgPSAxOwogCQl9CkBAIC02NDUsNyArNjUyLDcgQEAKIAkJaWYgKChjbGllbnRfaW5mby0+aXBfc3JjID09IGFycC0+aXBfc3JjKSAmJgogCQkgICAgKGNsaWVudF9pbmZvLT5pcF9kc3QgPT0gYXJwLT5pcF9kc3QpKSB7CiAJCQkvKiB0aGUgZW50cnkgaXMgYWxyZWFkeSBhc3NpZ25lZCB0byB0aGlzIGNsaWVudCAqLwotCQkJaWYgKG1lbWNtcChhcnAtPm1hY19kc3QsIG1hY19iY2FzdCwgRVRIX0FMRU4pKSB7CisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhhcnAtPm1hY19kc3QsIG1hY19iY2FzdCkpIHsKIAkJCQkvKiB1cGRhdGUgbWFjIGFkZHJlc3MgZnJvbSBhcnAgKi8KIAkJCQltZW1jcHkoY2xpZW50X2luZm8tPm1hY19kc3QsIGFycC0+bWFjX2RzdCwgRVRIX0FMRU4pOwogCQkJfQpAQCAtNjgwLDcgKzY4Nyw3IEBACiAJCW1lbWNweShjbGllbnRfaW5mby0+bWFjX2RzdCwgYXJwLT5tYWNfZHN0LCBFVEhfQUxFTik7CiAJCWNsaWVudF9pbmZvLT5zbGF2ZSA9IGFzc2lnbmVkX3NsYXZlOwogCi0JCWlmIChtZW1jbXAoY2xpZW50X2luZm8tPm1hY19kc3QsIG1hY19iY2FzdCwgRVRIX0FMRU4pKSB7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGNsaWVudF9pbmZvLT5tYWNfZHN0LCBtYWNfYmNhc3QpKSB7CiAJCQljbGllbnRfaW5mby0+bnR0ID0gMTsKIAkJCWJvbmQtPmFsYl9pbmZvLnJ4X250dCA9IDE7CiAJCX0gZWxzZSB7CkBAIC04MDIsNyArODA5LDcgQEAKIAogCW5ld19oYXNodGJsID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19oYXNodGJsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQlwcl9lcnIoRFJWX05BTUUKIAkJICAgICAgICI6ICVzOiBFcnJvcjogRmFpbGVkIHRvIGFsbG9jYXRlIFJMQiBoYXNoIHRhYmxlXG4iLAogCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpAQCAtOTI0LDcgKzkzMSw3IEBACiAKIAkJCXNrYiA9IHZsYW5fcHV0X3RhZyhza2IsIHZsYW4tPnZsYW5faWQpOwogCQkJaWYgKCFza2IpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJCQlwcl9lcnIoRFJWX05BTUUKIAkJCQkgICAgICAgIjogJXM6IEVycm9yOiBmYWlsZWQgdG8gaW5zZXJ0IFZMQU4gdGFnXG4iLAogCQkJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOwogCQkJCWNvbnRpbnVlOwpAQCAtOTU0LDcgKzk2MSw3IEBACiAJbWVtY3B5KHNfYWRkci5zYV9kYXRhLCBhZGRyLCBkZXYtPmFkZHJfbGVuKTsKIAlzX2FkZHIuc2FfZmFtaWx5ID0gZGV2LT50eXBlOwogCWlmIChkZXZfc2V0X21hY19hZGRyZXNzKGRldiwgJnNfYWRkcikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCXByX2VycihEUlZfTkFNRQogCQkgICAgICAgIjogJXM6IEVycm9yOiBkZXZfc2V0X21hY19hZGRyZXNzIG9mIGRldiAlcyBmYWlsZWQhIEFMQiAiCiAJCSAgICAgICAibW9kZSByZXF1aXJlcyB0aGF0IHRoZSBiYXNlIGRyaXZlciBzdXBwb3J0IHNldHRpbmcgIgogCQkgICAgICAgInRoZSBodyBhZGRyZXNzIGFsc28gd2hlbiB0aGUgbmV0d29yayBkZXZpY2UncyAiCkBAIC0xMDQ2LDIxICsxMDUzLDE4IEBACiAJaW50IHBlcm1fY3Vycl9kaWZmOwogCWludCBwZXJtX2JvbmRfZGlmZjsKIAotCXBlcm1fY3Vycl9kaWZmID0gbWVtY21wKHNsYXZlLT5wZXJtX2h3YWRkciwKLQkJCQlzbGF2ZS0+ZGV2LT5kZXZfYWRkciwKLQkJCQlFVEhfQUxFTik7Ci0JcGVybV9ib25kX2RpZmYgPSBtZW1jbXAoc2xhdmUtPnBlcm1faHdhZGRyLAotCQkJCWJvbmQtPmRldi0+ZGV2X2FkZHIsCi0JCQkJRVRIX0FMRU4pOworCXBlcm1fY3Vycl9kaWZmID0gY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhzbGF2ZS0+cGVybV9od2FkZHIsCisJCQkJCQkgICBzbGF2ZS0+ZGV2LT5kZXZfYWRkcik7CisJcGVybV9ib25kX2RpZmYgPSBjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHNsYXZlLT5wZXJtX2h3YWRkciwKKwkJCQkJCSAgIGJvbmQtPmRldi0+ZGV2X2FkZHIpOwogCiAJaWYgKHBlcm1fY3Vycl9kaWZmICYmIHBlcm1fYm9uZF9kaWZmKSB7CiAJCXN0cnVjdCBzbGF2ZSAqdG1wX3NsYXZlOwogCQlpbnQgaSwgZm91bmQgPSAwOwogCiAJCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgdG1wX3NsYXZlLCBpKSB7Ci0JCQlpZiAoIW1lbWNtcChzbGF2ZS0+cGVybV9od2FkZHIsCi0JCQkJICAgIHRtcF9zbGF2ZS0+ZGV2LT5kZXZfYWRkciwKLQkJCQkgICAgRVRIX0FMRU4pKSB7CisJCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoc2xhdmUtPnBlcm1faHdhZGRyLAorCQkJCQkJICAgICAgIHRtcF9zbGF2ZS0+ZGV2LT5kZXZfYWRkcikpIHsKIAkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMTE0LDEwICsxMTE4LDEwIEBACiAJICogY2hlY2sgdW5pcXVlbmVzcyBvZiBzbGF2ZSdzIG1hYyBhZGRyZXNzIGFnYWluc3QgdGhlIG90aGVyCiAJICogc2xhdmVzIGluIHRoZSBib25kLgogCSAqLwotCWlmIChtZW1jbXAoc2xhdmUtPnBlcm1faHdhZGRyLCBib25kLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpIHsKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhzbGF2ZS0+cGVybV9od2FkZHIsIGJvbmQtPmRldi0+ZGV2X2FkZHIpKSB7CiAJCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgdG1wX3NsYXZlMSwgaSkgewotCQkJaWYgKCFtZW1jbXAodG1wX3NsYXZlMS0+ZGV2LT5kZXZfYWRkciwgc2xhdmUtPmRldi0+ZGV2X2FkZHIsCi0JCQkJICAgIEVUSF9BTEVOKSkgeworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHRtcF9zbGF2ZTEtPmRldi0+ZGV2X2FkZHIsCisJCQkJCQkgICAgICAgc2xhdmUtPmRldi0+ZGV2X2FkZHIpKSB7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE0MCw5ICsxMTQ0LDggQEAKIAlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHRtcF9zbGF2ZTEsIGkpIHsKIAkJZm91bmQgPSAwOwogCQlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHRtcF9zbGF2ZTIsIGopIHsKLQkJCWlmICghbWVtY21wKHRtcF9zbGF2ZTEtPnBlcm1faHdhZGRyLAotCQkJCSAgICB0bXBfc2xhdmUyLT5kZXYtPmRldl9hZGRyLAotCQkJCSAgICBFVEhfQUxFTikpIHsKKwkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyh0bXBfc2xhdmUxLT5wZXJtX2h3YWRkciwKKwkJCQkJCSAgICAgICB0bXBfc2xhdmUyLT5kZXYtPmRldl9hZGRyKSkgewogCQkJCWZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTExNTcsOSArMTE2MCw4IEBACiAJCX0KIAogCQlpZiAoIWhhc19ib25kX2FkZHIpIHsKLQkJCWlmICghbWVtY21wKHRtcF9zbGF2ZTEtPmRldi0+ZGV2X2FkZHIsCi0JCQkJICAgIGJvbmQtPmRldi0+ZGV2X2FkZHIsCi0JCQkJICAgIEVUSF9BTEVOKSkgeworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHRtcF9zbGF2ZTEtPmRldi0+ZGV2X2FkZHIsCisJCQkJCQkgICAgICAgYm9uZC0+ZGV2LT5kZXZfYWRkcikpIHsKIAogCQkJCWhhc19ib25kX2FkZHIgPSB0bXBfc2xhdmUxOwogCQkJfQpAQCAtMTE3MCwxMyArMTE3MiwxNSBAQAogCQlhbGJfc2V0X3NsYXZlX21hY19hZGRyKHNsYXZlLCBmcmVlX21hY19zbGF2ZS0+cGVybV9od2FkZHIsCiAJCQkJICAgICAgIGJvbmQtPmFsYl9pbmZvLnJsYl9lbmFibGVkKTsKIAotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCSAgICAgICAiOiAlczogV2FybmluZzogdGhlIGh3IGFkZHJlc3Mgb2Ygc2xhdmUgJXMgaXMgaW4gdXNlIGJ5ICIKLQkJICAgICAgICJ0aGUgYm9uZDsgZ2l2aW5nIGl0IHRoZSBodyBhZGRyZXNzIG9mICVzXG4iLAotCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lLCBmcmVlX21hY19zbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRQorCQkJICAgIjogJXM6IFdhcm5pbmc6IHRoZSBodyBhZGRyZXNzIG9mIHNsYXZlICVzIGlzICIKKwkJCSAgICJpbiB1c2UgYnkgdGhlIGJvbmQ7IGdpdmluZyBpdCB0aGUgaHcgYWRkcmVzcyAiCisJCQkgICAib2YgJXNcbiIsCisJCQkgICBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUsCisJCQkgICBmcmVlX21hY19zbGF2ZS0+ZGV2LT5uYW1lKTsKIAogCX0gZWxzZSBpZiAoaGFzX2JvbmRfYWRkcikgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJcHJfZXJyKERSVl9OQU1FCiAJCSAgICAgICAiOiAlczogRXJyb3I6IHRoZSBodyBhZGRyZXNzIG9mIHNsYXZlICVzIGlzIGluIHVzZSBieSB0aGUgIgogCQkgICAgICAgImJvbmQ7IGNvdWxkbid0IGZpbmQgYSBzbGF2ZSB3aXRoIGEgZnJlZSBodyBhZGRyZXNzIHRvICIKIAkJICAgICAgICJnaXZlIGl0ICh0aGlzIHNob3VsZCBub3QgaGF2ZSBoYXBwZW5lZClcbiIsCkBAIC0xMzExLDcgKzEzMTUsNyBAQAogCWNhc2UgRVRIX1BfSVA6IHsKIAkJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAotCQlpZiAoKG1lbWNtcChldGhfZGF0YS0+aF9kZXN0LCBtYWNfYmNhc3QsIEVUSF9BTEVOKSA9PSAwKSB8fAorCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoZXRoX2RhdGEtPmhfZGVzdCwgbWFjX2JjYXN0KSB8fAogCQkgICAgKGlwaC0+ZGFkZHIgPT0gaXBfYmNhc3QpIHx8CiAJCSAgICAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX0lHTVApKSB7CiAJCQlkb190eF9iYWxhbmNlID0gMDsKQEAgLTEzMjUsNyArMTMyOSw3IEBACiAJCS8qIElQdjYgZG9lc24ndCByZWFsbHkgdXNlIGJyb2FkY2FzdCBtYWMgYWRkcmVzcywgYnV0IGxlYXZlCiAJCSAqIHRoYXQgaGVyZSBqdXN0IGluIGNhc2UuCiAJCSAqLwotCQlpZiAobWVtY21wKGV0aF9kYXRhLT5oX2Rlc3QsIG1hY19iY2FzdCwgRVRIX0FMRU4pID09IDApIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGV0aF9kYXRhLT5oX2Rlc3QsIG1hY19iY2FzdCkpIHsKIAkJCWRvX3R4X2JhbGFuY2UgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEzMzMsNyArMTMzNyw3IEBACiAJCS8qIElQdjYgdXNlcyBhbGwtbm9kZXMgbXVsdGljYXN0IGFzIGFuIGVxdWl2YWxlbnQgdG8KIAkJICogYnJvYWRjYXN0cyBpbiBJUHY0LgogCQkgKi8KLQkJaWYgKG1lbWNtcChldGhfZGF0YS0+aF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QsIEVUSF9BTEVOKSA9PSAwKSB7CisJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyXzY0Yml0cyhldGhfZGF0YS0+aF9kZXN0LCBtYWNfdjZfYWxsbWNhc3QpKSB7CiAJCQlkb190eF9iYWxhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDEzLDcgKzE0MTcsNyBAQAogCX0KIAlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKIAlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogdm9pZCBib25kX2FsYl9tb25pdG9yKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE2NTgsOCArMTY2Miw4IEBACiAJCXN0cnVjdCBzbGF2ZSAqdG1wX3NsYXZlOwogCQkvKiBmaW5kIHNsYXZlIHRoYXQgaXMgaG9sZGluZyB0aGUgYm9uZCdzIG1hYyBhZGRyZXNzICovCiAJCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgdG1wX3NsYXZlLCBpKSB7Ci0JCQlpZiAoIW1lbWNtcCh0bXBfc2xhdmUtPmRldi0+ZGV2X2FkZHIsCi0JCQkJICAgIGJvbmQtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkgeworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHRtcF9zbGF2ZS0+ZGV2LT5kZXZfYWRkciwKKwkJCQkJCSAgICAgICBib25kLT5kZXYtPmRldl9hZGRyKSkgewogCQkJCXN3YXBfc2xhdmUgPSB0bXBfc2xhdmU7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNzM3LDcgKzE3NDEsOCBAQAogCXN3YXBfc2xhdmUgPSBOVUxMOwogCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewotCQlpZiAoIW1lbWNtcChzbGF2ZS0+ZGV2LT5kZXZfYWRkciwgYm9uZF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHNsYXZlLT5kZXYtPmRldl9hZGRyLAorCQkJCQkgICAgICAgYm9uZF9kZXYtPmRldl9hZGRyKSkgewogCQkJc3dhcF9zbGF2ZSA9IHNsYXZlOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHY2LmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfaXB2Ni5jCmluZGV4IDBkNzNiZjUuLjgzOTIxYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9pcHY2LmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2lwdjYuYwpAQCAtNzksMTQgKzc5LDE0IEBACiAJCQkgICAgICBORF9PUFRfVEFSR0VUX0xMX0FERFIpOwogCiAJaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE5BIHBhY2tldCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXByX2VycihEUlZfTkFNRSAiOiBOQSBwYWNrZXQgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKHZsYW5faWQpIHsKIAkJc2tiID0gdmxhbl9wdXRfdGFnKHNrYiwgdmxhbl9pZCk7CiAJCWlmICghc2tiKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogZmFpbGVkIHRvIGluc2VydCBWTEFOIHRhZ1xuIik7CisJCQlwcl9lcnIoRFJWX05BTUUgIjogZmFpbGVkIHRvIGluc2VydCBWTEFOIHRhZ1xuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBhYTFiZTFmLi5hN2U3MzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTY5NSw2ICs2OTUsOSBAQAogCXN0cnVjdCBpZnJlcSBpZnI7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWk7CiAKKwlpZiAoIXJlcG9ydGluZyAmJiAhbmV0aWZfcnVubmluZyhzbGF2ZV9kZXYpKQorCQlyZXR1cm4gMDsKKwogCWlmIChib25kLT5wYXJhbXMudXNlX2NhcnJpZXIpCiAJCXJldHVybiBuZXRpZl9jYXJyaWVyX29rKHNsYXZlX2RldikgPyBCTVNSX0xTVEFUVVMgOiAwOwogCkBAIC0xMzMxLDYgKzEzMzQsNyBAQAogCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2ID0gYm9uZC0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmVhdHVyZXMgPSBib25kX2Rldi0+ZmVhdHVyZXM7CisJdW5zaWduZWQgbG9uZyB2bGFuX2ZlYXR1cmVzID0gMDsKIAl1bnNpZ25lZCBzaG9ydCBtYXhfaGFyZF9oZWFkZXJfbGVuID0gbWF4KCh1MTYpRVRIX0hMRU4sCiAJCQkJCQlib25kX2Rldi0+aGFyZF9oZWFkZXJfbGVuKTsKIAlpbnQgaTsKQEAgLTEzNDMsMTAgKzEzNDcsMTQgQEAKIAogCWZlYXR1cmVzICY9IH5ORVRJRl9GX09ORV9GT1JfQUxMOwogCisJdmxhbl9mZWF0dXJlcyA9IGJvbmQtPmZpcnN0X3NsYXZlLT5kZXYtPnZsYW5fZmVhdHVyZXM7CiAJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewogCQlmZWF0dXJlcyA9IG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXMoZmVhdHVyZXMsCiAJCQkJCQkgICAgIHNsYXZlLT5kZXYtPmZlYXR1cmVzLAogCQkJCQkJICAgICBORVRJRl9GX09ORV9GT1JfQUxMKTsKKwkJdmxhbl9mZWF0dXJlcyA9IG5ldGRldl9pbmNyZW1lbnRfZmVhdHVyZXModmxhbl9mZWF0dXJlcywKKwkJCQkJCQlzbGF2ZS0+ZGV2LT52bGFuX2ZlYXR1cmVzLAorCQkJCQkJCU5FVElGX0ZfT05FX0ZPUl9BTEwpOwogCQlpZiAoc2xhdmUtPmRldi0+aGFyZF9oZWFkZXJfbGVuID4gbWF4X2hhcmRfaGVhZGVyX2xlbikKIAkJCW1heF9oYXJkX2hlYWRlcl9sZW4gPSBzbGF2ZS0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47CiAJfQpAQCAtMTM1NCw2ICsxMzYyLDcgQEAKIGRvbmU6CiAJZmVhdHVyZXMgfD0gKGJvbmRfZGV2LT5mZWF0dXJlcyAmIEJPTkRfVkxBTl9GRUFUVVJFUyk7CiAJYm9uZF9kZXYtPmZlYXR1cmVzID0gbmV0ZGV2X2ZpeF9mZWF0dXJlcyhmZWF0dXJlcywgTlVMTCk7CisJYm9uZF9kZXYtPnZsYW5fZmVhdHVyZXMgPSBuZXRkZXZfZml4X2ZlYXR1cmVzKHZsYW5fZmVhdHVyZXMsIE5VTEwpOwogCWJvbmRfZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBtYXhfaGFyZF9oZWFkZXJfbGVuOwogCiAJcmV0dXJuIDA7CkBAIC0xNzkwLDcgKzE3OTksNiBAQAogCXN0cnVjdCBib25kaW5nICpib25kID0gbmV0ZGV2X3ByaXYoYm9uZF9kZXYpOwogCXN0cnVjdCBzbGF2ZSAqc2xhdmUsICpvbGRjdXJyZW50OwogCXN0cnVjdCBzb2NrYWRkciBhZGRyOwotCWludCBtYWNfYWRkcl9kaWZmZXI7CiAKIAkvKiBzbGF2ZSBpcyBub3QgYSBzbGF2ZSBvciBtYXN0ZXIgaXMgbm90IG1hc3RlciBvZiB0aGlzIHNsYXZlICovCiAJaWYgKCEoc2xhdmVfZGV2LT5mbGFncyAmIElGRl9TTEFWRSkgfHwKQEAgLTE4MTQsOSArMTgyMiw4IEBACiAJfQogCiAJaWYgKCFib25kLT5wYXJhbXMuZmFpbF9vdmVyX21hYykgewotCQltYWNfYWRkcl9kaWZmZXIgPSBtZW1jbXAoYm9uZF9kZXYtPmRldl9hZGRyLCBzbGF2ZS0+cGVybV9od2FkZHIsCi0JCQkJCSBFVEhfQUxFTik7Ci0JCWlmICghbWFjX2FkZHJfZGlmZmVyICYmIChib25kLT5zbGF2ZV9jbnQgPiAxKSkKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoYm9uZF9kZXYtPmRldl9hZGRyLCBzbGF2ZS0+cGVybV9od2FkZHIpCisJCSAgICAmJiBib25kLT5zbGF2ZV9jbnQgPiAxKQogCQkJcHJfd2FybmluZyhEUlZfTkFNRQogCQkJICAgICAgICI6ICVzOiBXYXJuaW5nOiB0aGUgcGVybWFuZW50IEhXYWRkciBvZiAlcyAtICIKIAkJCSAgICAgICAiJXBNIC0gaXMgc3RpbGwgaW4gdXNlIGJ5ICVzLiAiCkBAIC00Mjg1LDcgKzQyOTIsNyBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQogCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKQEAgLTQzMTYsNyArNDMyMyw3IEBACiAKIAlyZWFkX3VubG9jaygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKTsKIAlyZWFkX3VubG9jaygmYm9uZC0+bG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTQzNjIsNyArNDM2OSw3IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC00NDIyLDcgKzQ0MjksNyBAQAogCiAJLyogZnJhbWUgc2VudCB0byBhbGwgc3VpdGFibGUgaW50ZXJmYWNlcyAqLwogCXJlYWRfdW5sb2NrKCZib25kLT5sb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGV2aWNlIGluaXRpYWxpemF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC00NDQzLDcgKzQ0NTAsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTQ3NTUsNyArNDc2Miw3IEBACiAJCXBhcmFtcy0+YWRfc2VsZWN0ID0gQk9ORF9BRF9TVEFCTEU7CiAJfQogCi0JaWYgKG1heF9ib25kcyA8IDAgfHwgbWF4X2JvbmRzID4gSU5UX01BWCkgeworCWlmIChtYXhfYm9uZHMgPCAwKSB7CiAJCXByX3dhcm5pbmcoRFJWX05BTUUKIAkJICAgICAgICI6IFdhcm5pbmc6IG1heF9ib25kcyAoJWQpIG5vdCBpbiByYW5nZSAlZC0lZCwgc28gaXQgIgogCQkgICAgICAgIndhcyByZXNldCB0byBCT05EX0RFRkFVTFRfTUFYX0JPTkRTICglZClcbiIsCkBAIC00ODM3LDcgKzQ4NDQsNyBAQAogCX0KIAogCWlmIChib25kX21vZGUgPT0gQk9ORF9NT0RFX0FMQikgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgRFJWX05BTUUKKwkJcHJfbm90aWNlKERSVl9OQU1FCiAJCSAgICAgICAiOiBJbiBBTEIgbW9kZSB5b3UgbWlnaHQgZXhwZXJpZW5jZSBjbGllbnQgIgogCQkgICAgICAgImRpc2Nvbm5lY3Rpb25zIHVwb24gcmVjb25uZWN0aW9uIG9mIGEgbGluayBpZiB0aGUgIgogCQkgICAgICAgImJvbmRpbmcgbW9kdWxlIHVwZGVsYXkgcGFyYW1ldGVyICglZCBtc2VjKSBpcyAiCkBAIC00OTYxLDkgKzQ5NjgsOSBAQAogCQkgICAgICAgYXJwX2lwX2NvdW50KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYXJwX2lwX2NvdW50OyBpKyspCi0JCQlwcmludGsoIiAlcyIsIGFycF9pcF90YXJnZXRbaV0pOworCQkJcHJfaW5mbygiICVzIiwgYXJwX2lwX3RhcmdldFtpXSk7CiAKLQkJcHJpbnRrKCJcbiIpOworCQlwcl9pbmZvKCJcbiIpOwogCiAJfSBlbHNlIGlmIChtYXhfYm9uZHMpIHsKIAkJLyogbWlpbW9uIGFuZCBhcnBfaW50ZXJ2YWwgbm90IHNldCwgd2UgbmVlZCBvbmUgc28gdGhpbmdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCmluZGV4IDU1YmYzNGYuLjYwNDRlMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCkBAIC0yMTgsOSArMjE4LDggQEAKIAogCS8qIFF1aWNrIHNhbml0eSBjaGVjayAtLSBpcyB0aGUgYm9uZCBpbnRlcmZhY2UgdXA/ICovCiAJaWYgKCEoYm9uZC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkgICAgICAgIjogJXM6IGRvaW5nIHNsYXZlIHVwZGF0ZXMgd2hlbiBpbnRlcmZhY2UgaXMgZG93bi5cbiIsCi0JCSAgICAgICBib25kLT5kZXYtPm5hbWUpOworCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzOiBkb2luZyBzbGF2ZSB1cGRhdGVzIHdoZW4gIgorCQkJICAgImludGVyZmFjZSBpcyBkb3duLlxuIiwgYm9uZC0+ZGV2LT5uYW1lKTsKIAl9CiAKIAkvKiBOb3RlOiAgV2UgY2FuJ3QgaG9sZCBib25kLT5sb2NrIGhlcmUsIGFzIGJvbmRfY3JlYXRlIGdyYWJzIGl0LiAqLwpAQCAtNzc4LDEyICs3NzcsMTQgQEAKIAkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJaWYgKChuZXdfdmFsdWUgJSBib25kLT5wYXJhbXMubWlpbW9uKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IGRvd24gZGVsYXkgKCVkKSBpcyBub3QgYSBtdWx0aXBsZSAiCi0JCQkgICAgICAgIm9mIG1paW1vbiAoJWQpLCBkZWxheSByb3VuZGVkIHRvICVkIG1zXG4iLAotCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlLCBib25kLT5wYXJhbXMubWlpbW9uLAotCQkJICAgICAgIChuZXdfdmFsdWUgLyBib25kLT5wYXJhbXMubWlpbW9uKSAqCi0JCQkgICAgICAgYm9uZC0+cGFyYW1zLm1paW1vbik7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FCisJCQkJICAgIjogJXM6IFdhcm5pbmc6IGRvd24gZGVsYXkgKCVkKSBpcyBub3QgYSAiCisJCQkJICAgIm11bHRpcGxlIG9mIG1paW1vbiAoJWQpLCBkZWxheSByb3VuZGVkICIKKwkJCQkgICAidG8gJWQgbXNcbiIsCisJCQkJICAgYm9uZC0+ZGV2LT5uYW1lLCBuZXdfdmFsdWUsCisJCQkJICAgYm9uZC0+cGFyYW1zLm1paW1vbiwKKwkJCQkgICAobmV3X3ZhbHVlIC8gYm9uZC0+cGFyYW1zLm1paW1vbikgKgorCQkJCSAgIGJvbmQtPnBhcmFtcy5taWltb24pOwogCQl9CiAJCWJvbmQtPnBhcmFtcy5kb3duZGVsYXkgPSBuZXdfdmFsdWUgLyBib25kLT5wYXJhbXMubWlpbW9uOwogCQlwcl9pbmZvKERSVl9OQU1FICI6ICVzOiBTZXR0aW5nIGRvd24gZGVsYXkgdG8gJWQuXG4iLApAQCAtODM4LDEyICs4MzksMTQgQEAKIAkJZ290byBvdXQ7CiAJfSBlbHNlIHsKIAkJaWYgKChuZXdfdmFsdWUgJSBib25kLT5wYXJhbXMubWlpbW9uKSAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCi0JCQkgICAgICAgIjogJXM6IFdhcm5pbmc6IHVwIGRlbGF5ICglZCkgaXMgbm90IGEgbXVsdGlwbGUgIgotCQkJICAgICAgICJvZiBtaWltb24gKCVkKSwgdXBkZWxheSByb3VuZGVkIHRvICVkIG1zXG4iLAotCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgbmV3X3ZhbHVlLCBib25kLT5wYXJhbXMubWlpbW9uLAotCQkJICAgICAgIChuZXdfdmFsdWUgLyBib25kLT5wYXJhbXMubWlpbW9uKSAqCi0JCQkgICAgICAgYm9uZC0+cGFyYW1zLm1paW1vbik7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FCisJCQkJICAgIjogJXM6IFdhcm5pbmc6IHVwIGRlbGF5ICglZCkgaXMgbm90IGEgIgorCQkJCSAgICJtdWx0aXBsZSBvZiBtaWltb24gKCVkKSwgdXBkZWxheSByb3VuZGVkICIKKwkJCQkgICAidG8gJWQgbXNcbiIsCisJCQkJICAgYm9uZC0+ZGV2LT5uYW1lLCBuZXdfdmFsdWUsCisJCQkJICAgYm9uZC0+cGFyYW1zLm1paW1vbiwKKwkJCQkgICAobmV3X3ZhbHVlIC8gYm9uZC0+cGFyYW1zLm1paW1vbikgKgorCQkJCSAgIGJvbmQtPnBhcmFtcy5taWltb24pOwogCQl9CiAJCWJvbmQtPnBhcmFtcy51cGRlbGF5ID0gbmV3X3ZhbHVlIC8gYm9uZC0+cGFyYW1zLm1paW1vbjsKIAkJcHJfaW5mbyhEUlZfTkFNRSAiOiAlczogU2V0dGluZyB1cCBkZWxheSB0byAlZC5cbiIsCkBAIC0xMjk5LDkgKzEzMDIsOSBAQAogICAgICAgICAJCQluZXdfYWN0aXZlID0gc2xhdmU7CiAgICAgICAgIAkJCWlmIChuZXdfYWN0aXZlID09IG9sZF9hY3RpdmUpIHsKIAkJCQkJLyogZG8gbm90aGluZyAqLwotCQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCQkJICAgICAgIAkgICAgICAgIjogJXM6ICVzIGlzIGFscmVhZHkgdGhlIGN1cnJlbnQgYWN0aXZlIHNsYXZlLlxuIiwKLQkJCQkgICAgICAgICAgICAgICBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOworCQkJCQlwcl9pbmZvKERSVl9OQU1FCisJCQkJCQkiOiAlczogJXMgaXMgYWxyZWFkeSB0aGUgY3VycmVudCBhY3RpdmUgc2xhdmUuXG4iLAorCQkJCQkJYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAkJCQkJZ290byBvdXQ7CiAJCQkJfQogCQkJCWVsc2UgewpAQCAtMTMwOSwxNyArMTMxMiwxNyBAQAogICAgICAgICAgICAgCQkJCSAgICAob2xkX2FjdGl2ZSkgJiYKIAkJCQkgICAgICAgICAgICAobmV3X2FjdGl2ZS0+bGluayA9PSBCT05EX0xJTktfVVApICYmCiAJCQkJICAgICAgICAgICAgSVNfVVAobmV3X2FjdGl2ZS0+ZGV2KSkgewotCQkJCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJCSAgICAgICAJICAgICAgICAgICAgICAiOiAlczogU2V0dGluZyAlcyBhcyBhY3RpdmUgc2xhdmUuXG4iLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIAkJCQlib25kX2NoYW5nZV9hY3RpdmVfc2xhdmUoYm9uZCwgbmV3X2FjdGl2ZSk7CisJCQkJCQlwcl9pbmZvKERSVl9OQU1FCisJCQkJCQkJIjogJXM6IFNldHRpbmcgJXMgYXMgYWN0aXZlIHNsYXZlLlxuIiwKKwkJCQkJCQlib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUpOworCQkJCQkJCWJvbmRfY2hhbmdlX2FjdGl2ZV9zbGF2ZShib25kLCBuZXdfYWN0aXZlKTsKICAgICAgICAgCQkJCX0KIAkJCQkJZWxzZSB7Ci0JCQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCQkJICAgICAgIAkgICAgICAgICAgICAgICI6ICVzOiBDb3VsZCBub3Qgc2V0ICVzIGFzIGFjdGl2ZSBzbGF2ZTsgIgotCQkJCQkJICAgICAgImVpdGhlciAlcyBpcyBkb3duIG9yIHRoZSBsaW5rIGlzIGRvd24uXG4iLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUsCi0JCQkJCQkgICAgICBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJCQkJCXByX2luZm8oRFJWX05BTUUKKwkJCQkJCQkiOiAlczogQ291bGQgbm90IHNldCAlcyBhcyBhY3RpdmUgc2xhdmU7ICIKKwkJCQkJCQkiZWl0aGVyICVzIGlzIGRvd24gb3IgdGhlIGxpbmsgaXMgZG93bi5cbiIsCisJCQkJCQkJYm9uZC0+ZGV2LT5uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lLAorCQkJCQkJCXNsYXZlLT5kZXYtPm5hbWUpOwogCQkJCQl9CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KQEAgLTE1MzcsOCArMTU0MCw4IEBACiAJCS8qIElzIHNvbWVvbmUgYmVpbmcga2lua3kgYW5kIG5hbWluZyBhIGRldmljZSBib25kaW5nX21hc3Rlcj8gKi8KIAkJaWYgKF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwKIAkJCQkgICAgICBjbGFzc19hdHRyX2JvbmRpbmdfbWFzdGVycy5hdHRyLm5hbWUpKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm5ldHdvcmsgZGV2aWNlIG5hbWVkICVzIGFscmVhZHkgZXhpc3RzIGluIHN5c2ZzIiwKKwkJCXByX2VycigibmV0d29yayBkZXZpY2UgbmFtZWQgJXMgYWxyZWFkeSAiCisJCQkgICAgICAgImV4aXN0cyBpbiBzeXNmcyIsCiAJCQkgICAgICAgY2xhc3NfYXR0cl9ib25kaW5nX21hc3RlcnMuYXR0ci5uYW1lKTsKIAkJcmV0ID0gMDsKIAl9CkBAIC0xNTY2LDcgKzE1NjksNyBAQAogCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCYoZGV2LT5kZXYua29iaiksICZib25kaW5nX2dyb3VwKTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FTUVSRyAiZWVrISBkaWRuJ3QgY3JlYXRlIGdyb3VwIVxuIik7CisJCXByX2VtZXJnKCJlZWshIGRpZG4ndCBjcmVhdGUgZ3JvdXAhXG4iKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCmluZGV4IDYyOTBhNTAuLjY4MjQ3NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCkBAIC0xNjMsOSArMTYzLDkgQEAKIAl1MzIgICAgb3JpZ2luYWxfZmxhZ3M7CiAJdTMyICAgIG9yaWdpbmFsX210dTsKIAl1MzIgICAgbGlua19mYWlsdXJlX2NvdW50OworCXU4ICAgICBwZXJtX2h3YWRkcltFVEhfQUxFTl07CiAJdTE2ICAgIHNwZWVkOwogCXU4ICAgICBkdXBsZXg7Ci0JdTggICAgIHBlcm1faHdhZGRyW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgYWRfc2xhdmVfaW5mbyBhZF9pbmZvOyAvKiBIVUdFIC0gYmV0dGVyIHRvIGR5bmFtaWNhbGx5IGFsbG9jICovCiAJc3RydWN0IHRsYl9zbGF2ZV9pbmZvIHRsYl9pbmZvOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL0tjb25maWcKaW5kZXggMzM4MjFhOC4uMDkwMDc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvY2FuL0tjb25maWcKQEAgLTQxLDYgKzQxLDEzIEBACiAJLS0taGVscC0tLQogCSAgRHJpdmVyIGZvciB0aGUgU0pBMTAwMCBDQU4gY29udHJvbGxlcnMgZnJvbSBQaGlsaXBzIG9yIE5YUAogCitjb25maWcgQ0FOX1NKQTEwMDBfSVNBCisJZGVwZW5kcyBvbiBDQU5fU0pBMTAwMCAmJiBJU0EKKwl0cmlzdGF0ZSAiSVNBIEJ1cyBiYXNlZCBsZWdhY3kgU0pBMTAwMCBkcml2ZXIiCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgYWRkcyBsZWdhY3kgc3VwcG9ydCBmb3IgU0pBMTAwMCBjaGlwcyBjb25uZWN0ZWQgdG8KKwkgIHRoZSBJU0EgYnVzIHVzaW5nIEkvTyBwb3J0LCBtZW1vcnkgbWFwcGVkIG9yIGluZGlyZWN0IGFjY2Vzcy4KKwogY29uZmlnIENBTl9TSkExMDAwX1BMQVRGT1JNCiAJZGVwZW5kcyBvbiBDQU5fU0pBMTAwMAogCXRyaXN0YXRlICJHZW5lcmljIFBsYXRmb3JtIEJ1cyBiYXNlZCBTSkExMDAwIGRyaXZlciIKQEAgLTYxLDExICs2OCwxMiBAQAogCSAgeW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIG9wdGlvbi4KIAogY29uZmlnIENBTl9FTVNfUENJCi0JdHJpc3RhdGUgIkVNUyBDUEMtUENJIGFuZCBDUEMtUENJZSBDYXJkIgorCXRyaXN0YXRlICJFTVMgQ1BDLVBDSSwgQ1BDLVBDSWUgYW5kIENQQy0xMDRQIENhcmQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgQ0FOX1NKQTEwMDAKIAktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIG9uZSBvciB0d28gY2hhbm5lbCBDUEMtUENJIGFuZCBDUEMtUENJZQotCSAgY2FyZHMgZnJvbSBFTVMgRHIuIFRob21hcyBXdWVuc2NoZSAoaHR0cDovL3d3dy5lbXMtd3VlbnNjaGUuZGUpLgorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBvbmUsIHR3byBvciBmb3VyIGNoYW5uZWwgQ1BDLVBDSSwKKwkgIENQQy1QQ0llIGFuZCBDUEMtMTA0UCBjYXJkcyBmcm9tIEVNUyBEci4gVGhvbWFzIFd1ZW5zY2hlCisJICAoaHR0cDovL3d3dy5lbXMtd3VlbnNjaGUuZGUpLgogCiBjb25maWcgQ0FOX0tWQVNFUl9QQ0kKIAl0cmlzdGF0ZSAiS3Zhc2VyIFBDSWNhbnggYW5kIEt2YXNlciBQQ0ljYW4gUENJIENhcmRzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi5jCmluZGV4IGUxYTRmODIuLmYwYjlhMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYworKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2LmMKQEAgLTMxNSw3ICszMTUsNyBAQAogewogCXN0cnVjdCBjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfRUNITykgJiYgcHJpdi0+ZWNob19za2JbaWR4XSkgeworCWlmIChwcml2LT5lY2hvX3NrYltpZHhdKSB7CiAJCW5ldGlmX3J4KHByaXYtPmVjaG9fc2tiW2lkeF0pOwogCQlwcml2LT5lY2hvX3NrYltpZHhdID0gTlVMTDsKIAl9CkBAIC0zMjMsNiArMzIzLDIyIEBACiBFWFBPUlRfU1lNQk9MX0dQTChjYW5fZ2V0X2VjaG9fc2tiKTsKIAogLyoKKyAgKiBSZW1vdmUgdGhlIHNrYiBmcm9tIHRoZSBzdGFjayBhbmQgZnJlZSBpdC4KKyAgKgorICAqIFRoZSBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIHdoZW4gVFggZmFpbGVkLgorICAqLwordm9pZCBjYW5fZnJlZV9lY2hvX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaWR4KQoreworCXN0cnVjdCBjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAocHJpdi0+ZWNob19za2JbaWR4XSkgeworCQlrZnJlZV9za2IocHJpdi0+ZWNob19za2JbaWR4XSk7CisJCXByaXYtPmVjaG9fc2tiW2lkeF0gPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNhbl9mcmVlX2VjaG9fc2tiKTsKKworLyoKICAqIENBTiBkZXZpY2UgcmVzdGFydCBmb3IgYnVzLW9mZiByZWNvdmVyeQogICovCiB2b2lkIGNhbl9yZXN0YXJ0KHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTM1Nyw3ICszNzMsNiBAQAogCiAJbmV0aWZfcngoc2tiKTsKIAotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvTWFrZWZpbGUKaW5kZXggOWQwYzA4ZC4uOWQyNDVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvTWFrZWZpbGUKQEAgLTMsNiArMyw3IEBACiAjCiAKIG9iai0kKENPTkZJR19DQU5fU0pBMTAwMCkgKz0gc2phMTAwMC5vCitvYmotJChDT05GSUdfQ0FOX1NKQTEwMDBfSVNBKSArPSBzamExMDAwX2lzYS5vCiBvYmotJChDT05GSUdfQ0FOX1NKQTEwMDBfUExBVEZPUk0pICs9IHNqYTEwMDBfcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX0NBTl9TSkExMDAwX09GX1BMQVRGT1JNKSArPSBzamExMDAwX29mX3BsYXRmb3JtLm8KIG9iai0kKENPTkZJR19DQU5fRU1TX1BDSSkgKz0gZW1zX3BjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMKaW5kZXggMTIxYjY0MS4uN2Q4NGI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvZW1zX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2Vtc19wY2kuYwpAQCAtMzIsMTMgKzMyLDE2IEBACiAjZGVmaW5lIERSVl9OQU1FICAiZW1zX3BjaSIKIAogTU9EVUxFX0FVVEhPUigiU2ViYXN0aWFuIEhhYXMgPGhhYXNAZW1zLXd1ZW5jaGUuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2NrZXQtQ0FOIGRyaXZlciBmb3IgRU1TIENQQy1QQ0kvUENJZSBDQU4gY2FyZHMiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJFTVMgQ1BDLVBDSS9QQ0llIENBTiBjYXJkIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvY2tldC1DQU4gZHJpdmVyIGZvciBFTVMgQ1BDLVBDSS9QQ0llLzEwNFAgQ0FOIGNhcmRzIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiRU1TIENQQy1QQ0kvUENJZS8xMDRQIENBTiBjYXJkIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiAKLSNkZWZpbmUgRU1TX1BDSV9NQVhfQ0hBTiAyCisjZGVmaW5lIEVNU19QQ0lfVjFfTUFYX0NIQU4gMgorI2RlZmluZSBFTVNfUENJX1YyX01BWF9DSEFOIDQKKyNkZWZpbmUgRU1TX1BDSV9NQVhfQ0hBTiAgICBFTVNfUENJX1YyX01BWF9DSEFOCiAKIHN0cnVjdCBlbXNfcGNpX2NhcmQgeworCWludCB2ZXJzaW9uOwogCWludCBjaGFubmVsczsKIAogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwpAQCAtNjMsMTIgKzY2LDIyIEBACiAjZGVmaW5lIFBJVEEyX01JU0NfQ09ORklHICAgMHgwNDAwMDAwMAkvKiBNdWx0aXBsZXhlZCBwYXJhbGxlbCBpbnRlcmZhY2UgKi8KIAogLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgUExYIDkwMzAKKyAqLworI2RlZmluZSBQTFhfSUNTUiAgICAgICAgICAgIDB4NGMgICAvKiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUExYX0lDU1JfTElOVEkxX0VOQSAweDAwMDEgLyogTElOVGkxIEVuYWJsZSAqLworI2RlZmluZSBQTFhfSUNTUl9QQ0lJTlRfRU5BIDB4MDA0MCAvKiBQQ0kgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBQTFhfSUNTUl9MSU5USTFfQ0xSIDB4MDQwMCAvKiBMb2NhbCBFZGdlIFRyaWdnZXJhYmxlIEludGVycnVwdCBDbGVhciAqLworI2RlZmluZSBQTFhfSUNTUl9FTkFfQ0xSICAgIChQTFhfSUNTUl9MSU5USTFfRU5BIHwgUExYX0lDU1JfUENJSU5UX0VOQSB8IFwKKwkJCSAgICAgUExYX0lDU1JfTElOVEkxX0NMUikKKworLyoKICAqIFRoZSBib2FyZCBjb25maWd1cmF0aW9uIGlzIHByb2JhYmx5IGZvbGxvd2luZzoKICAqIFJYMSBpcyBjb25uZWN0ZWQgdG8gZ3JvdW5kLgogICogVFgxIGlzIG5vdCBjb25uZWN0ZWQuCiAgKiBDTEtPIGlzIG5vdCBjb25uZWN0ZWQuCiAgKiBTZXR0aW5nIHRoZSBPQ1IgcmVnaXN0ZXIgdG8gMHhEQSBpcyBhIGdvb2QgaWRlYS4KLSAqIFRoaXMgbWVhbnMgIG5vcm1hbCBvdXRwdXQgbW9kZSAsIHB1c2gtcHVsbCBhbmQgdGhlIGNvcnJlY3QgcG9sYXJpdHkuCisgKiBUaGlzIG1lYW5zIG5vcm1hbCBvdXRwdXQgbW9kZSwgcHVzaC1wdWxsIGFuZCB0aGUgY29ycmVjdCBwb2xhcml0eS4KICAqLwogI2RlZmluZSBFTVNfUENJX09DUiAgICAgICAgIChPQ1JfVFgwX1BVU0hQVUxMIHwgT0NSX1RYMV9QVVNIUFVMTCkKIApAQCAtNzksMTcgKzkyLDIxIEBACiAgKiBpcyBkcml2ZW4gYnkgdGhlIGZpcnN0IG9uZSBDTEtPVVQgb3V0cHV0LgogICovCiAjZGVmaW5lIEVNU19QQ0lfQ0RSICAgICAgICAgICAgIChDRFJfQ0JQIHwgQ0RSX0NMS09VVF9NQVNLKQotI2RlZmluZSBFTVNfUENJX01FTV9TSVpFICAgICAgICA0MDk2ICAvKiBTaXplIG9mIHRoZSByZW1hcHBlZCBpby1tZW1vcnkgKi8KKworI2RlZmluZSBFTVNfUENJX1YxX0JBU0VfQkFSICAgICAxCisjZGVmaW5lIEVNU19QQ0lfVjFfTUVNX1NJWkUgICAgIDQwOTYKKyNkZWZpbmUgRU1TX1BDSV9WMl9CQVNFX0JBUiAgICAgMgorI2RlZmluZSBFTVNfUENJX1YyX01FTV9TSVpFICAgICAxMjgKICNkZWZpbmUgRU1TX1BDSV9DQU5fQkFTRV9PRkZTRVQgMHg0MDAgLyogb2Zmc2V0IHdoZXJlIHRoZSBjb250cm9sbGVycyBzdGFydHMgKi8KICNkZWZpbmUgRU1TX1BDSV9DQU5fQ1RSTF9TSVpFICAgMHgyMDAgLyogbWVtb3J5IHNpemUgZm9yIGVhY2ggY29udHJvbGxlciAqLwogCi0jZGVmaW5lIEVNU19QQ0lfUE9SVF9CWVRFUyAgMHg0ICAgICAvKiBFYWNoIHJlZ2lzdGVyIG9jY3VwaWVzIDQgYnl0ZXMgKi8KLQotI2RlZmluZSBFTVNfUENJX1ZFTkRPUl9JRCAgIDB4MTEwYSAgLyogUENJIGRldmljZSBhbmQgdmVuZG9yIElEICovCi0jZGVmaW5lIEVNU19QQ0lfREVWSUNFX0lEICAgMHgyMTA0Ci0KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlbXNfcGNpX3RibFtdID0gewotCXtFTVNfUENJX1ZFTkRPUl9JRCwgRU1TX1BDSV9ERVZJQ0VfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKKwkvKiBDUEMtUENJIHYxICovCisJe1BDSV9WRU5ET1JfSURfU0lFTUVOUywgMHgyMTA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCisJLyogQ1BDLVBDSSB2MiAqLworCXtQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTAzMCwgUENJX1ZFTkRPUl9JRF9QTFgsIDB4NDAwMH0sCisJLyogQ1BDLTEwNFAgdjIgKi8KKwl7UENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwMzAsIFBDSV9WRU5ET1JfSURfUExYLCAweDQwMDJ9LAogCXswLH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZW1zX3BjaV90YmwpOwpAQCAtOTcsMjggKzExNCw0NyBAQAogLyoKICAqIEhlbHBlciB0byByZWFkIGludGVybmFsIHJlZ2lzdGVycyBmcm9tIGNhcmQgbG9naWMgKG5vdCBDQU4pCiAgKi8KLXN0YXRpYyB1OCBlbXNfcGNpX3JlYWRiKHN0cnVjdCBlbXNfcGNpX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBwb3J0KQorc3RhdGljIHU4IGVtc19wY2lfdjFfcmVhZGIoc3RydWN0IGVtc19wY2lfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IHBvcnQpCiB7Ci0JcmV0dXJuIHJlYWRiKGNhcmQtPmJhc2VfYWRkciArIChwb3J0ICogRU1TX1BDSV9QT1JUX0JZVEVTKSk7CisJcmV0dXJuIHJlYWRiKGNhcmQtPmJhc2VfYWRkciArIChwb3J0ICogNCkpOwogfQogCi1zdGF0aWMgdTggZW1zX3BjaV9yZWFkX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LCBpbnQgcG9ydCkKK3N0YXRpYyB1OCBlbXNfcGNpX3YxX3JlYWRfcmVnKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsIGludCBwb3J0KQogewotCXJldHVybiByZWFkYihwcml2LT5yZWdfYmFzZSArIChwb3J0ICogRU1TX1BDSV9QT1JUX0JZVEVTKSk7CisJcmV0dXJuIHJlYWRiKHByaXYtPnJlZ19iYXNlICsgKHBvcnQgKiA0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtc19wY2lfd3JpdGVfcmVnKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsIGludCBwb3J0LCB1OCB2YWwpCitzdGF0aWMgdm9pZCBlbXNfcGNpX3YxX3dyaXRlX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LAorCQkJCSBpbnQgcG9ydCwgdTggdmFsKQogewotCXdyaXRlYih2YWwsIHByaXYtPnJlZ19iYXNlICsgKHBvcnQgKiBFTVNfUENJX1BPUlRfQllURVMpKTsKKwl3cml0ZWIodmFsLCBwcml2LT5yZWdfYmFzZSArIChwb3J0ICogNCkpOwogfQogCi1zdGF0aWMgdm9pZCBlbXNfcGNpX3Bvc3RfaXJxKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBlbXNfcGNpX3YxX3Bvc3RfaXJxKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGVtc19wY2lfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgZW1zX3BjaV9jYXJkICopcHJpdi0+cHJpdjsKIAogCS8qIHJlc2V0IGludCBmbGFnIG9mIHBpdGEgKi8KLQl3cml0ZWwoUElUQTJfSUNSX0lOVDBfRU4gfCBQSVRBMl9JQ1JfSU5UMCwgY2FyZC0+Y29uZl9hZGRyCi0JCSsgUElUQTJfSUNSKTsKKwl3cml0ZWwoUElUQTJfSUNSX0lOVDBfRU4gfCBQSVRBMl9JQ1JfSU5UMCwKKwkgICAgICAgY2FyZC0+Y29uZl9hZGRyICsgUElUQTJfSUNSKTsKK30KKworc3RhdGljIHU4IGVtc19wY2lfdjJfcmVhZF9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwgaW50IHBvcnQpCit7CisJcmV0dXJuIHJlYWRiKHByaXYtPnJlZ19iYXNlICsgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGVtc19wY2lfdjJfd3JpdGVfcmVnKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsCisJCQkJIGludCBwb3J0LCB1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgcHJpdi0+cmVnX2Jhc2UgKyBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgZW1zX3BjaV92Ml9wb3N0X2lycShjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2KQoreworCXN0cnVjdCBlbXNfcGNpX2NhcmQgKmNhcmQgPSAoc3RydWN0IGVtc19wY2lfY2FyZCAqKXByaXYtPnByaXY7CisKKwl3cml0ZWwoUExYX0lDU1JfRU5BX0NMUiwgY2FyZC0+Y29uZl9hZGRyICsgUExYX0lDU1IpOwogfQogCiAvKgpAQCAtMTMwLDEyICsxNjYsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIHJlczsKIAogCS8qIE1ha2Ugc3VyZSBTSkExMDAwIGlzIGluIHJlc2V0IG1vZGUgKi8KLQllbXNfcGNpX3dyaXRlX3JlZyhwcml2LCBSRUdfTU9ELCAxKTsKKwlwcml2LT53cml0ZV9yZWcocHJpdiwgUkVHX01PRCwgMSk7CiAKLQllbXNfcGNpX3dyaXRlX3JlZyhwcml2LCBSRUdfQ0RSLCBDRFJfUEVMSUNBTik7CisJcHJpdi0+d3JpdGVfcmVnKHByaXYsIFJFR19DRFIsIENEUl9QRUxJQ0FOKTsKIAogCS8qIHJlYWQgcmVzZXQtdmFsdWVzICovCi0JcmVzID0gZW1zX3BjaV9yZWFkX3JlZyhwcml2LCBSRUdfQ0RSKTsKKwlyZXMgPSBwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfQ0RSKTsKIAogCWlmIChyZXMgPT0gQ0RSX1BFTElDQU4pCiAJCXJldHVybiAxOwpAQCAtMTg4LDYgKzIyNCw3IEBACiAJc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBlbXNfcGNpX2NhcmQgKmNhcmQ7CisJaW50IG1heF9jaGFuLCBtZW1fc2l6ZSwgYmFzZV9iYXI7CiAJaW50IGVyciwgaTsKIAogCS8qIEVuYWJsaW5nIFBDSSBkZXZpY2UgKi8KQEAgLTIxMCwzNyArMjQ3LDUyIEBACiAKIAljYXJkLT5jaGFubmVscyA9IDA7CiAKLQkvKiBSZW1hcCBQSVRBIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBjb250cm9sbGVyIG1lbW9yeSBhcmVhICovCi0JY2FyZC0+Y29uZl9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIEVNU19QQ0lfTUVNX1NJWkUpOworCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9QTFgpIHsKKwkJY2FyZC0+dmVyc2lvbiA9IDI7IC8qIENQQy1QQ0kgdjIgKi8KKwkJbWF4X2NoYW4gPSBFTVNfUENJX1YyX01BWF9DSEFOOworCQliYXNlX2JhciA9IEVNU19QQ0lfVjJfQkFTRV9CQVI7CisJCW1lbV9zaXplID0gRU1TX1BDSV9WMl9NRU1fU0laRTsKKwl9IGVsc2UgeworCQljYXJkLT52ZXJzaW9uID0gMTsgLyogQ1BDLVBDSSB2MSAqLworCQltYXhfY2hhbiA9IEVNU19QQ0lfVjFfTUFYX0NIQU47CisJCWJhc2VfYmFyID0gRU1TX1BDSV9WMV9CQVNFX0JBUjsKKwkJbWVtX3NpemUgPSBFTVNfUENJX1YxX01FTV9TSVpFOworCX0KKworCS8qIFJlbWFwIGNvbmZpZ3VyYXRpb24gc3BhY2UgYW5kIGNvbnRyb2xsZXIgbWVtb3J5IGFyZWEgKi8KKwljYXJkLT5jb25mX2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMCwgbWVtX3NpemUpOwogCWlmIChjYXJkLT5jb25mX2FkZHIgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWx1cmVfY2xlYW51cDsKIAl9CiAKLQljYXJkLT5iYXNlX2FkZHIgPSBwY2lfaW9tYXAocGRldiwgMSwgRU1TX1BDSV9NRU1fU0laRSk7CisJY2FyZC0+YmFzZV9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIGJhc2VfYmFyLCBtZW1fc2l6ZSk7CiAJaWYgKGNhcmQtPmJhc2VfYWRkciA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbHVyZV9jbGVhbnVwOwogCX0KIAotCS8qIENvbmZpZ3VyZSBQSVRBLTIgcGFyYWxsZWwgaW50ZXJmYWNlIChlbmFibGUgTVVYKSAqLwotCXdyaXRlbChQSVRBMl9NSVNDX0NPTkZJRywgY2FyZC0+Y29uZl9hZGRyICsgUElUQTJfTUlTQyk7CisJaWYgKGNhcmQtPnZlcnNpb24gPT0gMSkgeworCQkvKiBDb25maWd1cmUgUElUQS0yIHBhcmFsbGVsIGludGVyZmFjZSAoZW5hYmxlIE1VWCkgKi8KKwkJd3JpdGVsKFBJVEEyX01JU0NfQ09ORklHLCBjYXJkLT5jb25mX2FkZHIgKyBQSVRBMl9NSVNDKTsKIAotCS8qIENoZWNrIGZvciB1bmlxdWUgRU1TIENBTiBzaWduYXR1cmUgKi8KLQlpZiAoZW1zX3BjaV9yZWFkYihjYXJkLCAwKSAhPSAweDU1IHx8Ci0JICAgIGVtc19wY2lfcmVhZGIoY2FyZCwgMSkgIT0gMHhBQSB8fAotCSAgICBlbXNfcGNpX3JlYWRiKGNhcmQsIDIpICE9IDB4MDEgfHwKLQkgICAgZW1zX3BjaV9yZWFkYihjYXJkLCAzKSAhPSAweENCIHx8Ci0JICAgIGVtc19wY2lfcmVhZGIoY2FyZCwgNCkgIT0gMHgxMSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJOb3QgRU1TIERyLiBUaG9tYXMgV3VlbnNjaGUgaW50ZXJmYWNlXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBmYWlsdXJlX2NsZWFudXA7CisJCS8qIENoZWNrIGZvciB1bmlxdWUgRU1TIENBTiBzaWduYXR1cmUgKi8KKwkJaWYgKGVtc19wY2lfdjFfcmVhZGIoY2FyZCwgMCkgIT0gMHg1NSB8fAorCQkgICAgZW1zX3BjaV92MV9yZWFkYihjYXJkLCAxKSAhPSAweEFBIHx8CisJCSAgICBlbXNfcGNpX3YxX3JlYWRiKGNhcmQsIDIpICE9IDB4MDEgfHwKKwkJICAgIGVtc19wY2lfdjFfcmVhZGIoY2FyZCwgMykgIT0gMHhDQiB8fAorCQkgICAgZW1zX3BjaV92MV9yZWFkYihjYXJkLCA0KSAhPSAweDExKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIk5vdCBFTVMgRHIuIFRob21hcyBXdWVuc2NoZSBpbnRlcmZhY2VcbiIpOworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbHVyZV9jbGVhbnVwOworCQl9CiAJfQogCiAJZW1zX3BjaV9jYXJkX3Jlc2V0KGNhcmQpOwogCiAJLyogRGV0ZWN0IGF2YWlsYWJsZSBjaGFubmVscyAqLwotCWZvciAoaSA9IDA7IGkgPCBFTVNfUENJX01BWF9DSEFOOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2NoYW47IGkrKykgewogCQlkZXYgPSBhbGxvY19zamExMDAwZGV2KDApOwogCQlpZiAoZGV2ID09IE5VTEwpIHsKIAkJCWVyciA9IC1FTk9NRU07CkBAIC0yNTUsMjAgKzMwNywzMiBAQAogCQlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAkJcHJpdi0+cmVnX2Jhc2UgPSBjYXJkLT5iYXNlX2FkZHIgKyBFTVNfUENJX0NBTl9CQVNFX09GRlNFVAogCQkJCQkrIChpICogRU1TX1BDSV9DQU5fQ1RSTF9TSVpFKTsKKwkJaWYgKGNhcmQtPnZlcnNpb24gPT0gMSkgeworCQkJcHJpdi0+cmVhZF9yZWcgID0gZW1zX3BjaV92MV9yZWFkX3JlZzsKKwkJCXByaXYtPndyaXRlX3JlZyA9IGVtc19wY2lfdjFfd3JpdGVfcmVnOworCQkJcHJpdi0+cG9zdF9pcnEgID0gZW1zX3BjaV92MV9wb3N0X2lycTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPnJlYWRfcmVnICA9IGVtc19wY2lfdjJfcmVhZF9yZWc7CisJCQlwcml2LT53cml0ZV9yZWcgPSBlbXNfcGNpX3YyX3dyaXRlX3JlZzsKKwkJCXByaXYtPnBvc3RfaXJxICA9IGVtc19wY2lfdjJfcG9zdF9pcnE7CisJCX0KIAogCQkvKiBDaGVjayBpZiBjaGFubmVsIGlzIHByZXNlbnQgKi8KIAkJaWYgKGVtc19wY2lfY2hlY2tfY2hhbihwcml2KSkgewotCQkJcHJpdi0+cmVhZF9yZWcgID0gZW1zX3BjaV9yZWFkX3JlZzsKLQkJCXByaXYtPndyaXRlX3JlZyA9IGVtc19wY2lfd3JpdGVfcmVnOwotCQkJcHJpdi0+cG9zdF9pcnEgID0gZW1zX3BjaV9wb3N0X2lycTsKIAkJCXByaXYtPmNhbi5jbG9jay5mcmVxID0gRU1TX1BDSV9DQU5fQ0xPQ0s7CiAJCQlwcml2LT5vY3IgPSBFTVNfUENJX09DUjsKIAkJCXByaXYtPmNkciA9IEVNU19QQ0lfQ0RSOwogCiAJCQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0JCQkvKiBFbmFibGUgaW50ZXJydXB0cyBmcm9tIGNhcmQgKi8KLQkJCXdyaXRlbChQSVRBMl9JQ1JfSU5UMF9FTiwgY2FyZC0+Y29uZl9hZGRyICsgUElUQTJfSUNSKTsKKwkJCWlmIChjYXJkLT52ZXJzaW9uID09IDEpCisJCQkJLyogcmVzZXQgaW50IGZsYWcgb2YgcGl0YSAqLworCQkJCXdyaXRlbChQSVRBMl9JQ1JfSU5UMF9FTiB8IFBJVEEyX0lDUl9JTlQwLAorCQkJCSAgICAgICBjYXJkLT5jb25mX2FkZHIgKyBQSVRBMl9JQ1IpOworCQkJZWxzZQorCQkJCS8qIGVuYWJsZSBJUlEgaW4gUExYIDkwMzAgKi8KKwkJCQl3cml0ZWwoUExYX0lDU1JfRU5BX0NMUiwKKwkJCQkgICAgICAgY2FyZC0+Y29uZl9hZGRyICsgUExYX0lDU1IpOwogCiAJCQkvKiBSZWdpc3RlciBTSkExMDAwIGRldmljZSAqLwogCQkJZXJyID0gcmVnaXN0ZXJfc2phMTAwMGRldihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCmluZGV4IDA4ZWJlZTcuLjE2ZDJlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKQEAgLTIzOCwxMCArMjM4LDEwIEBACiAgKiB4eCB4eCB4eCB4eAkgZmYJIGxsICAgMDAgMTEgMjIgMzMgNDQgNTUgNjYgNzcKICAqIFsgIGNhbi1pZCBdIFtmbGFnc10gW2xlbl0gW2NhbiBkYXRhICh1cCB0byA4IGJ5dGVzXQogICovCi1zdGF0aWMgaW50IHNqYTEwMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNqYTEwMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOwogCXVpbnQ4X3QgZmk7CiAJdWludDhfdCBkbGM7CkBAIC0yNzUsMTQgKzI3NSwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBkbGM7IGkrKykKIAkJcHJpdi0+d3JpdGVfcmVnKHByaXYsIGRyZWcrKywgY2YtPmRhdGFbaV0pOwogCi0Jc3RhdHMtPnR4X2J5dGVzICs9IGRsYzsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCWNhbl9wdXRfZWNob19za2Ioc2tiLCBkZXYsIDApOwogCiAJcHJpdi0+d3JpdGVfcmVnKHByaXYsIFJFR19DTVIsIENNRF9UUik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBzamExMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzksNyArMzM4LDYgQEAKIAogCW5ldGlmX3J4KHNrYik7CiAKLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCXN0YXRzLT5yeF9wYWNrZXRzKys7CiAJc3RhdHMtPnJ4X2J5dGVzICs9IGRsYzsKIH0KQEAgLTQyNyw3ICs0MjUsNyBAQAogCQlkZXZfZGJnKGRldi0+ZGV2LnBhcmVudCwgImFyYml0cmF0aW9uIGxvc3QgaW50ZXJydXB0XG4iKTsKIAkJYWxjID0gcHJpdi0+cmVhZF9yZWcocHJpdiwgUkVHX0FMQyk7CiAJCXByaXYtPmNhbi5jYW5fc3RhdHMuYXJiaXRyYXRpb25fbG9zdCsrOwotCQlzdGF0cy0+cnhfZXJyb3JzKys7CisJCXN0YXRzLT50eF9lcnJvcnMrKzsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0xPU1RBUkI7CiAJCWNmLT5kYXRhWzBdID0gYWxjICYgMHgxZjsKIAl9CkBAIC00NTQsNyArNDUyLDYgQEAKIAogCW5ldGlmX3J4KHNrYik7CiAKLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCXN0YXRzLT5yeF9wYWNrZXRzKys7CiAJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5jYW5fZGxjOwogCkBAIC00ODUsNiArNDgyLDcgQEAKIAogCQlpZiAoaXNyYyAmIElSUV9USSkgewogCQkJLyogdHJhbnNtaXNzaW9uIGNvbXBsZXRlIGludGVycnVwdCAqLworCQkJc3RhdHMtPnR4X2J5dGVzICs9IHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19GSSkgJiAweGY7CiAJCQlzdGF0cy0+dHhfcGFja2V0cysrOwogCQkJY2FuX2dldF9lY2hvX3NrYihkZXYsIDApOwogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMF9pc2EuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDBfaXNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhNTFmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDBfaXNhLmMKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV29sZmdhbmcgR3JhbmRlZ2dlciA8d2dAZ3JhbmRlZ2dlci5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2FuL3BsYXRmb3JtL3NqYTEwMDAuaD4KKworI2luY2x1ZGUgInNqYTEwMDAuaCIKKworI2RlZmluZSBEUlZfTkFNRSAic2phMTAwMF9pc2EiCisKKyNkZWZpbmUgTUFYREVWIDgKKworTU9EVUxFX0FVVEhPUigiV29sZmdhbmcgR3JhbmRlZ2dlciA8d2dAZ3JhbmRlZ2dlci5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNvY2tldC1DQU4gZHJpdmVyIGZvciBTSkExMDAwIG9uIHRoZSBJU0EgYnVzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKKyNkZWZpbmUgQ0xLX0RFRkFVTFQJMTYwMDAwMDAJLyogMTYgTUh6ICovCisjZGVmaW5lIENEUl9ERUZBVUxUCShDRFJfQ0JQIHwgQ0RSX0NMS19PRkYpCisjZGVmaW5lIE9DUl9ERUZBVUxUCU9DUl9UWDBfUFVTSFBVTEwKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcG9ydFtNQVhERVZdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtW01BWERFVl07CitzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgaXJxW01BWERFVl07CitzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgY2xrW01BWERFVl07CitzdGF0aWMgY2hhciBfX2RldmluaXRkYXRhIGNkcltNQVhERVZdID0ge1swIC4uLiAoTUFYREVWIC0gMSldID0gLTF9Oworc3RhdGljIGNoYXIgX19kZXZpbml0ZGF0YSBvY3JbTUFYREVWXSA9IHtbMCAuLi4gKE1BWERFViAtIDEpXSA9IC0xfTsKK3N0YXRpYyBjaGFyIF9fZGV2aW5pdGRhdGEgaW5kaXJlY3RbTUFYREVWXSA9IHtbMCAuLi4gKE1BWERFViAtIDEpXSA9IC0xfTsKKworbW9kdWxlX3BhcmFtX2FycmF5KHBvcnQsIHVsb25nLCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydCwgIkkvTyBwb3J0IG51bWJlciIpOworCittb2R1bGVfcGFyYW1fYXJyYXkobWVtLCB1bG9uZywgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1lbSwgIkkvTyBtZW1vcnkgYWRkcmVzcyIpOworCittb2R1bGVfcGFyYW1fYXJyYXkoaW5kaXJlY3QsIGJ5dGUsIE5VTEwsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpbmRpcmVjdCwgIkluZGlyZWN0IGFjY2VzcyB2aWEgYWRkcmVzcyBhbmQgZGF0YSBwb3J0Iik7CisKK21vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlycSwgIklSUSBudW1iZXIiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGNsaywgaW50LCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xrLCAiRXh0ZXJuYWwgb3NjaWxsYXRvciBjbG9jayBmcmVxdWVuY3kgIgorCQkgIihkZWZhdWx0PTE2MDAwMDAwIFsxNiBNSHpdKSIpOworCittb2R1bGVfcGFyYW1fYXJyYXkoY2RyLCBieXRlLCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoY2RyLCAiQ2xvY2sgZGl2aWRlciByZWdpc3RlciAiCisJCSAiKGRlZmF1bHQ9MHg0OCBbQ0RSX0NCUCB8IENEUl9DTEtfT0ZGXSkiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KG9jciwgYnl0ZSwgTlVMTCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG9jciwgIk91dHB1dCBjb250cm9sIHJlZ2lzdGVyICIKKwkJICIoZGVmYXVsdD0weDE4IFtPQ1JfVFgwX1BVU0hQVUxMXSkiKTsKKworI2RlZmluZSBTSkExMDAwX0lPU0laRSAgICAgICAgICAweDIwCisjZGVmaW5lIFNKQTEwMDBfSU9TSVpFX0lORElSRUNUIDB4MDIKKworc3RhdGljIHU4IHNqYTEwMDBfaXNhX21lbV9yZWFkX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LCBpbnQgcmVnKQoreworCXJldHVybiByZWFkYihwcml2LT5yZWdfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNqYTEwMDBfaXNhX21lbV93cml0ZV9yZWcoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwKKwkJCQkgICAgICBpbnQgcmVnLCB1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgcHJpdi0+cmVnX2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgdTggc2phMTAwMF9pc2FfcG9ydF9yZWFkX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LCBpbnQgcmVnKQoreworCXJldHVybiBpbmIoKHVuc2lnbmVkIGxvbmcpcHJpdi0+cmVnX2Jhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBzamExMDAwX2lzYV9wb3J0X3dyaXRlX3JlZyhjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LAorCQkJCSAgICAgICBpbnQgcmVnLCB1OCB2YWwpCit7CisJb3V0Yih2YWwsICh1bnNpZ25lZCBsb25nKXByaXYtPnJlZ19iYXNlICsgcmVnKTsKK30KKworc3RhdGljIHU4IHNqYTEwMDBfaXNhX3BvcnRfcmVhZF9yZWdfaW5kaXJlY3QoY29uc3Qgc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiwKKwkJCQkJICAgICBpbnQgcmVnKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSA9ICh1bnNpZ25lZCBsb25nKXByaXYtPnJlZ19iYXNlOworCisJb3V0YihyZWcsIGJhc2UpOworCXJldHVybiBpbmIoYmFzZSArIDEpOworfQorCitzdGF0aWMgdm9pZCBzamExMDAwX2lzYV9wb3J0X3dyaXRlX3JlZ19pbmRpcmVjdChjb25zdCBzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2LAorCQkJCQkJaW50IHJlZywgdTggdmFsKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSA9ICh1bnNpZ25lZCBsb25nKXByaXYtPnJlZ19iYXNlOworCisJb3V0YihyZWcsIGJhc2UpOworCW91dGIodmFsLCBiYXNlICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNqYTEwMDBfaXNhX21hdGNoKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpZHgpCit7CisJaWYgKHBvcnRbaWR4XSB8fCBtZW1baWR4XSkgeworCQlpZiAoaXJxW2lkeF0pCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGlkeCkKKwkJcmV0dXJuIDA7CisKKwlkZXZfZXJyKHBkZXYsICJpbnN1ZmZpY2llbnQgcGFyYW1ldGVycyBzdXBwbGllZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNqYTEwMDBfaXNhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2OworCXZvaWQgX19pb21lbSAqYmFzZSA9IE5VTEw7CisJaW50IGlvc2l6ZSA9IFNKQTEwMDBfSU9TSVpFOworCWludCBlcnI7CisKKwlpZiAobWVtW2lkeF0pIHsKKwkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24obWVtW2lkeF0sIGlvc2l6ZSwgRFJWX05BTUUpKSB7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShtZW1baWR4XSwgaW9zaXplKTsKKwkJaWYgKCFiYXNlKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBleGl0X3JlbGVhc2U7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaW5kaXJlY3RbaWR4XSA+IDAgfHwKKwkJICAgIChpbmRpcmVjdFtpZHhdID09IC0xICYmIGluZGlyZWN0WzBdID4gMCkpCisJCQlpb3NpemUgPSBTSkExMDAwX0lPU0laRV9JTkRJUkVDVDsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwb3J0W2lkeF0sIGlvc2l6ZSwgRFJWX05BTUUpKSB7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisKKwlkZXYgPSBhbGxvY19zamExMDAwZGV2KDApOworCWlmICghZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF91bm1hcDsKKwl9CisJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlkZXYtPmlycSA9IGlycVtpZHhdOworCXByaXYtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOworCWlmIChtZW1baWR4XSkgeworCQlwcml2LT5yZWdfYmFzZSA9IGJhc2U7CisJCWRldi0+YmFzZV9hZGRyID0gbWVtW2lkeF07CisJCXByaXYtPnJlYWRfcmVnID0gc2phMTAwMF9pc2FfbWVtX3JlYWRfcmVnOworCQlwcml2LT53cml0ZV9yZWcgPSBzamExMDAwX2lzYV9tZW1fd3JpdGVfcmVnOworCX0gZWxzZSB7CisJCXByaXYtPnJlZ19iYXNlID0gKHZvaWQgX19pb21lbSAqKXBvcnRbaWR4XTsKKwkJZGV2LT5iYXNlX2FkZHIgPSBwb3J0W2lkeF07CisKKwkJaWYgKGlvc2l6ZSA9PSBTSkExMDAwX0lPU0laRV9JTkRJUkVDVCkgeworCQkJcHJpdi0+cmVhZF9yZWcgPSBzamExMDAwX2lzYV9wb3J0X3JlYWRfcmVnX2luZGlyZWN0OworCQkJcHJpdi0+d3JpdGVfcmVnID0gc2phMTAwMF9pc2FfcG9ydF93cml0ZV9yZWdfaW5kaXJlY3Q7CisJCX0gZWxzZSB7CisJCQlwcml2LT5yZWFkX3JlZyA9IHNqYTEwMDBfaXNhX3BvcnRfcmVhZF9yZWc7CisJCQlwcml2LT53cml0ZV9yZWcgPSBzamExMDAwX2lzYV9wb3J0X3dyaXRlX3JlZzsKKwkJfQorCX0KKworCWlmIChjbGtbaWR4XSkKKwkJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBjbGtbaWR4XSAvIDI7CisJZWxzZSBpZiAoY2xrWzBdKQorCQlwcml2LT5jYW4uY2xvY2suZnJlcSA9IGNsa1swXSAvIDI7CisJZWxzZQorCQlwcml2LT5jYW4uY2xvY2suZnJlcSA9IENMS19ERUZBVUxUIC8gMjsKKworCWlmIChvY3JbaWR4XSAhPSAtMSkKKwkJcHJpdi0+b2NyID0gb2NyW2lkeF0gJiAweGZmOworCWVsc2UgaWYgKG9jclswXSAhPSAtMSkKKwkJcHJpdi0+b2NyID0gb2NyWzBdICYgMHhmZjsKKwllbHNlCisJCXByaXYtPm9jciA9IE9DUl9ERUZBVUxUOworCisJaWYgKGNkcltpZHhdICE9IC0xKQorCQlwcml2LT5jZHIgPSBjZHJbaWR4XSAmIDB4ZmY7CisJZWxzZSBpZiAoY2RyWzBdICE9IC0xKQorCQlwcml2LT5jZHIgPSBjZHJbMF0gJiAweGZmOworCWVsc2UKKwkJcHJpdi0+Y2RyID0gQ0RSX0RFRkFVTFQ7CisKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVihkZXYsIHBkZXYpOworCisJZXJyID0gcmVnaXN0ZXJfc2phMTAwMGRldihkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihwZGV2LCAicmVnaXN0ZXJpbmcgJXMgZmFpbGVkIChlcnI9JWQpXG4iLAorCQkJRFJWX05BTUUsIGVycik7CisJCWdvdG8gZXhpdF91bm1hcDsKKwl9CisKKwlkZXZfaW5mbyhwZGV2LCAiJXMgZGV2aWNlIHJlZ2lzdGVyZWQgKHJlZ19iYXNlPTB4JXAsIGlycT0lZClcbiIsCisJCSBEUlZfTkFNRSwgcHJpdi0+cmVnX2Jhc2UsIGRldi0+aXJxKTsKKwlyZXR1cm4gMDsKKworIGV4aXRfdW5tYXA6CisJaWYgKG1lbVtpZHhdKQorCQlpb3VubWFwKGJhc2UpOworIGV4aXRfcmVsZWFzZToKKwlpZiAobWVtW2lkeF0pCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1baWR4XSwgaW9zaXplKTsKKwllbHNlCisJCXJlbGVhc2VfcmVnaW9uKHBvcnRbaWR4XSwgaW9zaXplKTsKKyBleGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNqYTEwMDBfaXNhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwl1bnJlZ2lzdGVyX3NqYTEwMDBkZXYoZGV2KTsKKwlkZXZfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpZiAobWVtW2lkeF0pIHsKKwkJaW91bm1hcChwcml2LT5yZWdfYmFzZSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1baWR4XSwgU0pBMTAwMF9JT1NJWkUpOworCX0gZWxzZSB7CisJCWlmIChwcml2LT5yZWFkX3JlZyA9PSBzamExMDAwX2lzYV9wb3J0X3JlYWRfcmVnX2luZGlyZWN0KQorCQkJcmVsZWFzZV9yZWdpb24ocG9ydFtpZHhdLCBTSkExMDAwX0lPU0laRV9JTkRJUkVDVCk7CisJCWVsc2UKKwkJCXJlbGVhc2VfcmVnaW9uKHBvcnRbaWR4XSwgU0pBMTAwMF9JT1NJWkUpOworCX0KKwlmcmVlX3NqYTEwMDBkZXYoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgc2phMTAwMF9pc2FfZHJpdmVyID0geworCS5tYXRjaCA9IHNqYTEwMDBfaXNhX21hdGNoLAorCS5wcm9iZSA9IHNqYTEwMDBfaXNhX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzamExMDAwX2lzYV9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNqYTEwMDBfaXNhX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gaXNhX3JlZ2lzdGVyX2RyaXZlcigmc2phMTAwMF9pc2FfZHJpdmVyLCBNQVhERVYpOworCisJaWYgKCFlcnIpCisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJMZWdhY3kgJXMgZHJpdmVyIGZvciBtYXguICVkIGRldmljZXMgcmVnaXN0ZXJlZFxuIiwKKwkJICAgICAgIERSVl9OQU1FLCBNQVhERVYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzamExMDAwX2lzYV9leGl0KHZvaWQpCit7CisJaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZzamExMDAwX2lzYV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzamExMDAwX2lzYV9pbml0KTsKK21vZHVsZV9leGl0KHNqYTEwMDBfaXNhX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3ZjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi92Y2FuLmMKaW5kZXggYTEwYzFkNy4uNjk3MWY2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3ZjYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vdmNhbi5jCkBAIC04Myw3ICs4Myw3IEBACiAJbmV0aWZfcngoc2tiKTsKIH0KIAotc3RhdGljIGludCB2Y2FuX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdmNhbl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCWludCBsb29wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IGViMDY2NjcuLjA1OTE2YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTI5MTgsNyArMjkxOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY2FzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBjYXNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMjkyOCw3ICsyOTI4LDcgQEAKIAlzdGF0aWMgaW50IHJpbmc7CiAKIAlpZiAoc2tiX3BhZHRvKHNrYiwgY3AtPm1pbl9mcmFtZV9zaXplKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAKIAkvKiBYWFg6IHdlIG5lZWQgc29tZSBoaWdoZXItbGV2ZWwgUW9TIGhvb2tzIHRvIHN0ZWVyIHBhY2tldHMgdG8KIAkgKiAgICAgIGluZGl2aWR1YWwgcXVldWVzLgpAQCAtMjkzNiw3ICsyOTM2LDcgQEAKIAlpZiAoY2FzX3htaXRfdHhfcmluZ04oY3AsIHJpbmcrKyAmIE5fVFhfUklOR1NfTUFTSywgc2tiKSkKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGNhc19pbml0X3R4X2RtYShzdHJ1Y3QgY2FzICpjcCkKQEAgLTQ4NzUsMTAgKzQ4NzUsNiBAQAogCQlicmVhazsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKLQkJCXJjID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJCWNhc19taWZfcG9sbChjcCwgMCk7CiAJCXJjID0gY2FzX3BoeV93cml0ZShjcCwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCAzNzExZDY0Li44YzY1OGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTE3NzYsNyArMTc3Niw3IEBACiAvKgogICogQWRkcyB0aGUgQ1BMIGhlYWRlciB0byB0aGUgc2tfYnVmZiBhbmQgcGFzc2VzIGl0IHRvIHQxX3NnZV90eC4KICAqLwotaW50IHQxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IHQxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc2dlICpzZ2UgPSBhZGFwdGVyLT5zZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuaAppbmRleCA4Yzk0MDUxLi4wMGNjMzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmgKQEAgLTc4LDcgKzc4LDcgQEAKIGlycXJldHVybl90IHQxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb29raWUpOwogaW50IHQxX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCk7CiAKLWludCB0MV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgdDFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgdDFfc2V0X3ZsYW5fYWNjZWwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBvbl9vZmYpOwogdm9pZCB0MV9zZ2Vfc3RhcnQoc3RydWN0IHNnZSAqKTsKIHZvaWQgdDFfc2dlX3N0b3Aoc3RydWN0IHNnZSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWMuYyBiL2RyaXZlcnMvbmV0L2NuaWMuYwppbmRleCA3NGMzNDI5Li5kNDVlYWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jbmljLmMKKysrIGIvZHJpdmVycy9uZXQvY25pYy5jCkBAIC03NzQsMTAgKzc3NCw4MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNuaWNfYWxsb2NfbDJfcmluZ3Moc3RydWN0IGNuaWNfZGV2ICpkZXYsIGludCBwYWdlcykKK3sKKwlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKKworCWNwLT5sMl9yaW5nX3NpemUgPSBwYWdlcyAqIEJDTV9QQUdFX1NJWkU7CisJY3AtPmwyX3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaWRldiwgY3AtPmwyX3Jpbmdfc2l6ZSwKKwkJCQkJICAgJmNwLT5sMl9yaW5nX21hcCk7CisJaWYgKCFjcC0+bDJfcmluZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljcC0+bDJfYnVmX3NpemUgPSAoY3AtPmwyX3J4X3Jpbmdfc2l6ZSArIDEpICogY3AtPmwyX3NpbmdsZV9idWZfc2l6ZTsKKwljcC0+bDJfYnVmX3NpemUgPSBQQUdFX0FMSUdOKGNwLT5sMl9idWZfc2l6ZSk7CisJY3AtPmwyX2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpZGV2LCBjcC0+bDJfYnVmX3NpemUsCisJCQkJCSAgICZjcC0+bDJfYnVmX21hcCk7CisJaWYgKCFjcC0+bDJfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNuaWNfYWxsb2NfdWlvKHN0cnVjdCBjbmljX2RldiAqZGV2KSB7CisJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CisJc3RydWN0IHVpb19pbmZvICp1aW5mbzsKKwlpbnQgcmV0OworCisJdWluZm8gPSBremFsbG9jKHNpemVvZigqdWluZm8pLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXVpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVpbmZvLT5tZW1bMF0uYWRkciA9IGRldi0+bmV0ZGV2LT5iYXNlX2FkZHI7CisJdWluZm8tPm1lbVswXS5pbnRlcm5hbF9hZGRyID0gZGV2LT5yZWd2aWV3OworCXVpbmZvLT5tZW1bMF0uc2l6ZSA9IGRldi0+bmV0ZGV2LT5tZW1fZW5kIC0gZGV2LT5uZXRkZXYtPm1lbV9zdGFydDsKKwl1aW5mby0+bWVtWzBdLm1lbXR5cGUgPSBVSU9fTUVNX1BIWVM7CisKKwl1aW5mby0+bWVtWzFdLmFkZHIgPSAodW5zaWduZWQgbG9uZykgY3AtPnN0YXR1c19ibGsgJiBQQUdFX01BU0s7CisJaWYgKHRlc3RfYml0KENOSUNfRl9CTlgyX0NMQVNTLCAmZGV2LT5mbGFncykpIHsKKwkJaWYgKGNwLT5ldGhkZXYtPmRydl9zdGF0ZSAmIENOSUNfRFJWX1NUQVRFX1VTSU5HX01TSVgpCisJCQl1aW5mby0+bWVtWzFdLnNpemUgPSBCTlgyX1NCTEtfTVNJWF9BTElHTl9TSVpFICogOTsKKwkJZWxzZQorCQkJdWluZm8tPm1lbVsxXS5zaXplID0gQk5YMl9TQkxLX01TSVhfQUxJR05fU0laRTsKKworCQl1aW5mby0+bmFtZSA9ICJibngyX2NuaWMiOworCX0KKworCXVpbmZvLT5tZW1bMV0ubWVtdHlwZSA9IFVJT19NRU1fTE9HSUNBTDsKKworCXVpbmZvLT5tZW1bMl0uYWRkciA9ICh1bnNpZ25lZCBsb25nKSBjcC0+bDJfcmluZzsKKwl1aW5mby0+bWVtWzJdLnNpemUgPSBjcC0+bDJfcmluZ19zaXplOworCXVpbmZvLT5tZW1bMl0ubWVtdHlwZSA9IFVJT19NRU1fTE9HSUNBTDsKKworCXVpbmZvLT5tZW1bM10uYWRkciA9ICh1bnNpZ25lZCBsb25nKSBjcC0+bDJfYnVmOworCXVpbmZvLT5tZW1bM10uc2l6ZSA9IGNwLT5sMl9idWZfc2l6ZTsKKwl1aW5mby0+bWVtWzNdLm1lbXR5cGUgPSBVSU9fTUVNX0xPR0lDQUw7CisKKwl1aW5mby0+dmVyc2lvbiA9IENOSUNfTU9EVUxFX1ZFUlNJT047CisJdWluZm8tPmlycSA9IFVJT19JUlFfQ1VTVE9NOworCisJdWluZm8tPm9wZW4gPSBjbmljX3Vpb19vcGVuOworCXVpbmZvLT5yZWxlYXNlID0gY25pY191aW9fY2xvc2U7CisKKwl1aW5mby0+cHJpdiA9IGRldjsKKworCXJldCA9IHVpb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+cGNpZGV2LT5kZXYsIHVpbmZvKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHVpbmZvKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljcC0+Y25pY191aW5mbyA9IHVpbmZvOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGNuaWNfYWxsb2NfYm54Ml9yZXNjKHN0cnVjdCBjbmljX2RldiAqZGV2KQogewogCXN0cnVjdCBjbmljX2xvY2FsICpjcCA9IGRldi0+Y25pY19wcml2OwotCXN0cnVjdCB1aW9faW5mbyAqdWluZm87CiAJaW50IHJldDsKIAogCXJldCA9IGNuaWNfYWxsb2NfZG1hKGRldiwgJmNwLT5rd3FfaW5mbywgS1dRX1BBR0VfQ05ULCAxKTsKQEAgLTc5NCw2MCArODY1LDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKIAotCWNwLT5sMl9yaW5nX3NpemUgPSAyICogQkNNX1BBR0VfU0laRTsKLQljcC0+bDJfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldi0+cGNpZGV2LCBjcC0+bDJfcmluZ19zaXplLAotCQkJCQkgICAmY3AtPmwyX3JpbmdfbWFwKTsKLQlpZiAoIWNwLT5sMl9yaW5nKQorCXJldCA9IGNuaWNfYWxsb2NfbDJfcmluZ3MoZGV2LCAyKTsKKwlpZiAocmV0KQogCQlnb3RvIGVycm9yOwogCi0JY3AtPmwyX2J1Zl9zaXplID0gKGNwLT5sMl9yeF9yaW5nX3NpemUgKyAxKSAqIGNwLT5sMl9zaW5nbGVfYnVmX3NpemU7Ci0JY3AtPmwyX2J1Zl9zaXplID0gUEFHRV9BTElHTihjcC0+bDJfYnVmX3NpemUpOwotCWNwLT5sMl9idWYgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYtPnBjaWRldiwgY3AtPmwyX2J1Zl9zaXplLAotCQkJCQkgICAmY3AtPmwyX2J1Zl9tYXApOwotCWlmICghY3AtPmwyX2J1ZikKKwlyZXQgPSBjbmljX2FsbG9jX3VpbyhkZXYpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CiAKLQl1aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp1aW5mbyksIEdGUF9BVE9NSUMpOwotCWlmICghdWluZm8pCi0JCWdvdG8gZXJyb3I7Ci0KLQl1aW5mby0+bWVtWzBdLmFkZHIgPSBkZXYtPm5ldGRldi0+YmFzZV9hZGRyOwotCXVpbmZvLT5tZW1bMF0uaW50ZXJuYWxfYWRkciA9IGRldi0+cmVndmlldzsKLQl1aW5mby0+bWVtWzBdLnNpemUgPSBkZXYtPm5ldGRldi0+bWVtX2VuZCAtIGRldi0+bmV0ZGV2LT5tZW1fc3RhcnQ7Ci0JdWluZm8tPm1lbVswXS5tZW10eXBlID0gVUlPX01FTV9QSFlTOwotCi0JdWluZm8tPm1lbVsxXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5zdGF0dXNfYmxrICYgUEFHRV9NQVNLOwotCWlmIChjcC0+ZXRoZGV2LT5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9VU0lOR19NU0lYKQotCQl1aW5mby0+bWVtWzFdLnNpemUgPSBCTlgyX1NCTEtfTVNJWF9BTElHTl9TSVpFICogOTsKLQllbHNlCi0JCXVpbmZvLT5tZW1bMV0uc2l6ZSA9IEJOWDJfU0JMS19NU0lYX0FMSUdOX1NJWkU7Ci0JdWluZm8tPm1lbVsxXS5tZW10eXBlID0gVUlPX01FTV9MT0dJQ0FMOwotCi0JdWluZm8tPm1lbVsyXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5sMl9yaW5nOwotCXVpbmZvLT5tZW1bMl0uc2l6ZSA9IGNwLT5sMl9yaW5nX3NpemU7Ci0JdWluZm8tPm1lbVsyXS5tZW10eXBlID0gVUlPX01FTV9MT0dJQ0FMOwotCi0JdWluZm8tPm1lbVszXS5hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5sMl9idWY7Ci0JdWluZm8tPm1lbVszXS5zaXplID0gY3AtPmwyX2J1Zl9zaXplOwotCXVpbmZvLT5tZW1bM10ubWVtdHlwZSA9IFVJT19NRU1fTE9HSUNBTDsKLQotCXVpbmZvLT5uYW1lID0gImJueDJfY25pYyI7Ci0JdWluZm8tPnZlcnNpb24gPSBDTklDX01PRFVMRV9WRVJTSU9OOwotCXVpbmZvLT5pcnEgPSBVSU9fSVJRX0NVU1RPTTsKLQotCXVpbmZvLT5vcGVuID0gY25pY191aW9fb3BlbjsKLQl1aW5mby0+cmVsZWFzZSA9IGNuaWNfdWlvX2Nsb3NlOwotCi0JdWluZm8tPnByaXYgPSBkZXY7Ci0KLQlyZXQgPSB1aW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnBjaWRldi0+ZGV2LCB1aW5mbyk7Ci0JaWYgKHJldCkgewotCQlrZnJlZSh1aW5mbyk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JY3AtPmNuaWNfdWluZm8gPSB1aW5mbzsKLQogCXJldHVybiAwOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NwbWFjLmMgYi9kcml2ZXJzL25ldC9jcG1hYy5jCmluZGV4IGZkNWUzMmMuLjNlM2ZhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3BtYWMuYwpAQCAtNTQsNyArNTQsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIk51bWJlciBvZiBORVRJRl9NU0cgYml0cyB0byBlbmFibGUiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHVtYl9zd2l0Y2gsICJBc3N1bWUgc3dpdGNoIGlzIG5vdCBjb25uZWN0ZWQgdG8gTURJTyBidXMiKTsKIAotI2RlZmluZSBDUE1BQ19WRVJTSU9OICIwLjUuMCIKKyNkZWZpbmUgQ1BNQUNfVkVSU0lPTiAiMC41LjEiCiAvKiBmcmFtZSBzaXplICsgODAyLjFxIHRhZyAqLwogI2RlZmluZSBDUE1BQ19TS0JfU0laRQkJKEVUSF9GUkFNRV9MRU4gKyA0KQogI2RlZmluZSBDUE1BQ19RVUVVRVMJOApAQCAtMTEwOSw3ICsxMTA5LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNwbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJjLCBwaHlfaWQ7Ci0JY2hhciAqbWRpb19idXNfaWQgPSAiMCI7CisJY2hhciBtZGlvX2J1c19pZFtCVVNfSURfU0laRV07CiAJc3RydWN0IHJlc291cmNlICptZW07CiAJc3RydWN0IGNwbWFjX3ByaXYgKnByaXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTExMTcsMjIgKzExMTcsMjMgQEAKIAogCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKLQlmb3IgKHBoeV9pZCA9IDA7IHBoeV9pZCA8IFBIWV9NQVhfQUREUjsgcGh5X2lkKyspIHsKLQkJaWYgKCEocGRhdGEtPnBoeV9tYXNrICYgKDEgPDwgcGh5X2lkKSkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFjcG1hY19taWktPnBoeV9tYXBbcGh5X2lkXSkKLQkJCWNvbnRpbnVlOwotCQlicmVhazsKKwlpZiAoZXh0ZXJuYWxfc3dpdGNoIHx8IGR1bWJfc3dpdGNoKSB7CisJCXN0cm5jcHkobWRpb19idXNfaWQsICIwIiwgQlVTX0lEX1NJWkUpOyAvKiBmaXhlZCBwaHlzIGJ1cyAqLworCQlwaHlfaWQgPSBwZGV2LT5pZDsKKwl9IGVsc2UgeworCQlmb3IgKHBoeV9pZCA9IDA7IHBoeV9pZCA8IFBIWV9NQVhfQUREUjsgcGh5X2lkKyspIHsKKwkJCWlmICghKHBkYXRhLT5waHlfbWFzayAmICgxIDw8IHBoeV9pZCkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFjcG1hY19taWktPnBoeV9tYXBbcGh5X2lkXSkKKwkJCQljb250aW51ZTsKKwkJCXN0cm5jcHkobWRpb19idXNfaWQsIGNwbWFjX21paS0+aWQsIEJVU19JRF9TSVpFKTsKKwkJCWJyZWFrOworCQl9CiAJfQogCiAJaWYgKHBoeV9pZCA9PSBQSFlfTUFYX0FERFIpIHsKLQkJaWYgKGV4dGVybmFsX3N3aXRjaCB8fCBkdW1iX3N3aXRjaCkgewotCQkJbWRpb19idXNfaWQgPSAwOyAvKiBmaXhlZCBwaHlzIGJ1cyAqLwotCQkJcGh5X2lkID0gcGRldi0+aWQ7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBQSFkgcHJlc2VudFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBQSFkgcHJlc2VudFxuIik7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZigqcHJpdiksIENQTUFDX1FVRVVFUyk7CkBAIC0xMTY2LDggKzExNjcsMTEgQEAKIAlwcml2LT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWdfbGV2ZWwsIDB4ZmYpOwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBwZGF0YS0+ZGV2X2FkZHIsIHNpemVvZihkZXYtPmRldl9hZGRyKSk7CiAKLQlwcml2LT5waHkgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZjcG1hY19taWktPnBoeV9tYXBbcGh5X2lkXS0+ZGV2KSwKLQkJCQkmY3BtYWNfYWRqdXN0X2xpbmssIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCXNucHJpbnRmKHByaXYtPnBoeV9uYW1lLCBCVVNfSURfU0laRSwgUEhZX0lEX0ZNVCwgbWRpb19idXNfaWQsIHBoeV9pZCk7CisKKwlwcml2LT5waHkgPSBwaHlfY29ubmVjdChkZXYsIHByaXYtPnBoeV9uYW1lLCAmY3BtYWNfYWRqdXN0X2xpbmssIDAsCisJCQkJCQlQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwogCWlmIChJU19FUlIocHJpdi0+cGh5KSkgewogCQlpZiAobmV0aWZfbXNnX2Rydihwcml2KSkKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLApAQCAtMTI0MSwxMSArMTI0NSwxMSBAQAogCiAJY3BtYWNfbWlpLT5yZXNldChjcG1hY19taWkpOwogCi0JZm9yIChpID0gMDsgaSA8IDMwMDAwMDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCAzMDA7IGkrKykKIAkJaWYgKChtYXNrID0gY3BtYWNfcmVhZChjcG1hY19taWktPnByaXYsIENQTUFDX01ESU9fQUxJVkUpKSkKIAkJCWJyZWFrOwogCQllbHNlCi0JCQljcHVfcmVsYXgoKTsKKwkJCW1zbGVlcCgxMCk7CiAKIAltYXNrICY9IDB4N2ZmZmZmZmY7CiAJaWYgKG1hc2sgJiAobWFzayAtIDEpKSB7CkBAIC0xMjU0LDcgKzEyNTgsNyBAQAogCX0KIAogCWNwbWFjX21paS0+cGh5X21hc2sgPSB+KG1hc2sgfCAweDgwMDAwMDAwKTsKLQlzbnByaW50ZihjcG1hY19taWktPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIwIik7CisJc25wcmludGYoY3BtYWNfbWlpLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiMSIpOwogCiAJcmVzID0gbWRpb2J1c19yZWdpc3RlcihjcG1hY19taWkpOwogCWlmIChyZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDdhMThkYzcuLjE1YzAxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC0xMTA4LDcgKzExMDgsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuYyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCmluZGV4IDU1NDQ1ZjkuLjBjNTQyMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCkBAIC0xNzcsMTMgKzE3NywxMCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9JWERQMjM1MSkKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0Y2FyZF9wb3J0bGlzdFtdIF9fdXNlZCBfX2luaXRkYXRhID0ge0lYRFAyMzUxX1ZJUlRfQ1M4OTAwX0JBU0UsIDB9Owogc3RhdGljIHVuc2lnbmVkIGludCBjczg5MDBfaXJxX21hcFtdID0ge0lSUV9JWERQMjM1MV9DUzg5MDAsIDAsIDAsIDB9OwotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVhEUDJYMDEpCi0jaW5jbHVkZSA8YXNtL2lycS5oPgogc3RhdGljIHVuc2lnbmVkIGludCBuZXRjYXJkX3BvcnRsaXN0W10gX191c2VkIF9faW5pdGRhdGEgPSB7SVhEUDJYMDFfQ1M4OTAwX1ZJUlRfQkFTRSwgMH07CiBzdGF0aWMgdW5zaWduZWQgaW50IGNzODkwMF9pcnFfbWFwW10gPSB7SVJRX0lYRFAyWDAxX0NTODkwMCwgMCwgMCwgMH07CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1BOWDAxMFgpCi0jaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2RlZmluZSBDSVJSVVNfREVGQVVMVF9CQVNFCUlPX0FERFJFU1MoRVhUX1NUQVRJQzJfczBfQkFTRSArIDB4MjAwMDAwKQkvKiA9IFBoeXNpY2FsIGFkZHJlc3MgMHg0ODIwMDAwMCAqLwogI2RlZmluZSBDSVJSVVNfREVGQVVMVF9JUlEJVkhfSU5UQ19JTlRfTlVNX0NBU0NBREVEX0lOVEVSUlVQVF8xIC8qIEV2ZW50IGlucHV0cyBiYW5rIDEgLSBJRCAzNS9iaXQgMyAqLwpAQCAtMjQ5LDcgKzI0Niw3IEBACiAKIHN0YXRpYyBpbnQgY3M4OXgwX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyLCBpbnQgbW9kdWxhcik7CiBzdGF0aWMgaW50IG5ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IG5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIG5ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTM2Nyw3ICsxMzY0LDcgQEAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCQkJZGlzYWJsZV9kbWEoZGV2LT5kbWEpOwogCQkJY2xlYXJfZG1hX2ZmKGRldi0+ZG1hKTsKLQkJCXNldF9kbWFfbW9kZShkZXYtPmRtYSwgMHgxNCk7IC8qIGF1dG9faW5pdCBhcyB3ZWxsICovCisJCQlzZXRfZG1hX21vZGUoZGV2LT5kbWEsIERNQV9SWF9NT0RFKTsgLyogYXV0b19pbml0IGFzIHdlbGwgKi8KIAkJCXNldF9kbWFfYWRkcihkZXYtPmRtYSwgaXNhX3ZpcnRfdG9fYnVzKGxwLT5kbWFfYnVmZikpOwogCQkJc2V0X2RtYV9jb3VudChkZXYtPmRtYSwgbHAtPmRtYXNpemUqMTAyNCk7CiAJCQllbmFibGVfZG1hKGRldi0+ZG1hKTsKQEAgLTE1MjEsNyArMTUxOCw3IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi1zdGF0aWMgaW50IG5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xNTcyLDcgKzE1NjksNyBAQAogCSAqIHRvIHJlc3RhcnQgdGhlIG5ldGRldmljZSBsYXllcgogCSAqLwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIHR5cGljYWwgd29ya2xvYWQgb2YgdGhlIGRyaXZlcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAppbmRleCAxNjk0ZmFkLi4yYjFhZWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCkBAIC0yNzYsNiArMjc2LDE0IEBACiAJcmV0dXJuIG5ldGRldl9wcml2KGFkYXAtPnBvcnRbaWR4XSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBoeTJwb3J0aWQoc3RydWN0IGNwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHBoeS0+YWRhcHRlcjsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwb3J0MCA9IGFkYXAycGluZm8oYWRhcCwgMCk7CisKKwlyZXR1cm4gJnBvcnQwLT5waHkgPT0gcGh5ID8gMCA6IDE7Cit9CisKICNkZWZpbmUgT0ZGTE9BRF9ERVZNQVBfQklUIDE1CiAKICNkZWZpbmUgdGRldjJhZGFwKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgYWRhcHRlciwgdGRldikKQEAgLTMwMSw3ICszMDksNyBAQAogdm9pZCB0M19mcmVlX3NnZV9yZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCB0M19zZ2VfZXJyX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CiBpcnFfaGFuZGxlcl90IHQzX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgaW50IHBvbGxpbmcpOwotaW50IHQzX2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgdDNfZXRoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgdDNfbWdtdF90eChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHQzX3VwZGF0ZV9xc2V0X2NvYWxlc2NlKHN0cnVjdCBzZ2VfcXNldCAqcXMsIGNvbnN0IHN0cnVjdCBxc2V0X3BhcmFtcyAqcCk7CiBpbnQgdDNfc2dlX2FsbG9jX3FzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBpZCwgaW50IG5wb3J0cywKQEAgLTMxMiw0ICszMjAsNiBAQAogCQl1bnNpZ25lZCBjaGFyICpkYXRhKTsKIGlycXJldHVybl90IHQzX3NnZV9pbnRyX21zaXgoaW50IGlycSwgdm9pZCAqY29va2llKTsKIAoraW50IHQzX2dldF9lZGNfZncoc3RydWN0IGNwaHkgKnBoeSwgaW50IGVkY19pZHgsIGludCBzaXplKTsKKwogI2VuZGlmCQkJCS8qIF9fVDNfQURBUFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYwppbmRleCA5ZmUwMDhlLi41MjQ4ZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCkBAIC0yMjQsMTIgKzIyNCw2IEBACiAJcmV0dXJuIHQzX3BoeV9yZXNldChwaHksIE1ESU9fTU1EX1BNQVBNRCwgd2FpdCk7CiB9CiAKLXN0YXRpYyBpbnQgYWVsMTAwNl9wb3dlcl9kb3duKHN0cnVjdCBjcGh5ICpwaHksIGludCBlbmFibGUpCi17Ci0JcmV0dXJuIG1kaW9fc2V0X2ZsYWcoJnBoeS0+bWRpbywgcGh5LT5tZGlvLnBydGFkLCBNRElPX01NRF9QTUFQTUQsCi0JCQkgICAgIE1ESU9fQ1RSTDEsIE1ESU9fQ1RSTDFfTFBPV0VSLCBlbmFibGUpOwotfQotCiBzdGF0aWMgc3RydWN0IGNwaHlfb3BzIGFlbDEwMDZfb3BzID0gewogCS5yZXNldCA9IGFlbDEwMDZfcmVzZXQsCiAJLmludHJfZW5hYmxlID0gdDNfcGh5X2xhc2lfaW50cl9lbmFibGUsCkBAIC0yMzcsNyArMjMxLDcgQEAKIAkuaW50cl9jbGVhciA9IHQzX3BoeV9sYXNpX2ludHJfY2xlYXIsCiAJLmludHJfaGFuZGxlciA9IHQzX3BoeV9sYXNpX2ludHJfaGFuZGxlciwKIAkuZ2V0X2xpbmtfc3RhdHVzID0gZ2V0X2xpbmtfc3RhdHVzX3IsCi0JLnBvd2VyX2Rvd24gPSBhZWwxMDA2X3Bvd2VyX2Rvd24sCisJLnBvd2VyX2Rvd24gPSBhZWwxMDAyX3Bvd2VyX2Rvd24sCiAJLm1tZHMgPSBNRElPX0RFVlNfUE1BUE1EIHwgTURJT19ERVZTX1BDUyB8IE1ESU9fREVWU19QSFlYUywKIH07CiAKQEAgLTMwNCwyNzkgKzI5OCw3IEBACiAJCXsgTURJT19NTURfUE1BUE1ELCAweGMwNGEsIDB4ZmZmZiwgMHg1MjAwIH0sCiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKLQlzdGF0aWMgdTE2IHNyX2VkY1tdID0gewotCQkweGNjMDAsIDB4MmZmNCwKLQkJMHhjYzAxLCAweDNjZDQsCi0JCTB4Y2MwMiwgMHgyMDE1LAotCQkweGNjMDMsIDB4MzEwNSwKLQkJMHhjYzA0LCAweDY1MjQsCi0JCTB4Y2MwNSwgMHgyN2ZmLAotCQkweGNjMDYsIDB4MzAwZiwKLQkJMHhjYzA3LCAweDJjOGIsCi0JCTB4Y2MwOCwgMHgzMDBiLAotCQkweGNjMDksIDB4NDAwOSwKLQkJMHhjYzBhLCAweDQwMGUsCi0JCTB4Y2MwYiwgMHgyZjcyLAotCQkweGNjMGMsIDB4MzAwMiwKLQkJMHhjYzBkLCAweDEwMDIsCi0JCTB4Y2MwZSwgMHgyMTcyLAotCQkweGNjMGYsIDB4MzAxMiwKLQkJMHhjYzEwLCAweDEwMDIsCi0JCTB4Y2MxMSwgMHgyNWQyLAotCQkweGNjMTIsIDB4MzAxMiwKLQkJMHhjYzEzLCAweDEwMDIsCi0JCTB4Y2MxNCwgMHhkMDFlLAotCQkweGNjMTUsIDB4MjdkMiwKLQkJMHhjYzE2LCAweDMwMTIsCi0JCTB4Y2MxNywgMHgxMDAyLAotCQkweGNjMTgsIDB4MjAwNCwKLQkJMHhjYzE5LCAweDNjODQsCi0JCTB4Y2MxYSwgMHg2NDM2LAotCQkweGNjMWIsIDB4MjAwNywKLQkJMHhjYzFjLCAweDNmODcsCi0JCTB4Y2MxZCwgMHg4Njc2LAotCQkweGNjMWUsIDB4NDBiNywKLQkJMHhjYzFmLCAweGE3NDYsCi0JCTB4Y2MyMCwgMHg0MDQ3LAotCQkweGNjMjEsIDB4NTY3MywKLQkJMHhjYzIyLCAweDI5ODIsCi0JCTB4Y2MyMywgMHgzMDAyLAotCQkweGNjMjQsIDB4MTNkMiwKLQkJMHhjYzI1LCAweDhiYmQsCi0JCTB4Y2MyNiwgMHgyODYyLAotCQkweGNjMjcsIDB4MzAxMiwKLQkJMHhjYzI4LCAweDEwMDIsCi0JCTB4Y2MyOSwgMHgyMDkyLAotCQkweGNjMmEsIDB4MzAxMiwKLQkJMHhjYzJiLCAweDEwMDIsCi0JCTB4Y2MyYywgMHg1Y2MzLAotCQkweGNjMmQsIDB4MzE0LAotCQkweGNjMmUsIDB4Mjk0MiwKLQkJMHhjYzJmLCAweDMwMDIsCi0JCTB4Y2MzMCwgMHgxMDAyLAotCQkweGNjMzEsIDB4ZDAxOSwKLQkJMHhjYzMyLCAweDIwMzIsCi0JCTB4Y2MzMywgMHgzMDEyLAotCQkweGNjMzQsIDB4MTAwMiwKLQkJMHhjYzM1LCAweDJhMDQsCi0JCTB4Y2MzNiwgMHgzYzc0LAotCQkweGNjMzcsIDB4NjQzNSwKLQkJMHhjYzM4LCAweDJmYTQsCi0JCTB4Y2MzOSwgMHgzY2Q0LAotCQkweGNjM2EsIDB4NjYyNCwKLQkJMHhjYzNiLCAweDU1NjMsCi0JCTB4Y2MzYywgMHgyZDQyLAotCQkweGNjM2QsIDB4MzAwMiwKLQkJMHhjYzNlLCAweDEzZDIsCi0JCTB4Y2MzZiwgMHg0NjRkLAotCQkweGNjNDAsIDB4Mjg2MiwKLQkJMHhjYzQxLCAweDMwMTIsCi0JCTB4Y2M0MiwgMHgxMDAyLAotCQkweGNjNDMsIDB4MjAzMiwKLQkJMHhjYzQ0LCAweDMwMTIsCi0JCTB4Y2M0NSwgMHgxMDAyLAotCQkweGNjNDYsIDB4MmZiNCwKLQkJMHhjYzQ3LCAweDNjZDQsCi0JCTB4Y2M0OCwgMHg2NjI0LAotCQkweGNjNDksIDB4NTU2MywKLQkJMHhjYzRhLCAweDJkNDIsCi0JCTB4Y2M0YiwgMHgzMDAyLAotCQkweGNjNGMsIDB4MTNkMiwKLQkJMHhjYzRkLCAweDJlZDIsCi0JCTB4Y2M0ZSwgMHgzMDAyLAotCQkweGNjNGYsIDB4MTAwMiwKLQkJMHhjYzUwLCAweDJmZDIsCi0JCTB4Y2M1MSwgMHgzMDAyLAotCQkweGNjNTIsIDB4MTAwMiwKLQkJMHhjYzUzLCAweDAwNCwKLQkJMHhjYzU0LCAweDI5NDIsCi0JCTB4Y2M1NSwgMHgzMDAyLAotCQkweGNjNTYsIDB4MTAwMiwKLQkJMHhjYzU3LCAweDIwOTIsCi0JCTB4Y2M1OCwgMHgzMDEyLAotCQkweGNjNTksIDB4MTAwMiwKLQkJMHhjYzVhLCAweDVjYzMsCi0JCTB4Y2M1YiwgMHgzMTcsCi0JCTB4Y2M1YywgMHgyZjcyLAotCQkweGNjNWQsIDB4MzAwMiwKLQkJMHhjYzVlLCAweDEwMDIsCi0JCTB4Y2M1ZiwgMHgyOTQyLAotCQkweGNjNjAsIDB4MzAwMiwKLQkJMHhjYzYxLCAweDEwMDIsCi0JCTB4Y2M2MiwgMHgyMmNkLAotCQkweGNjNjMsIDB4MzAxZCwKLQkJMHhjYzY0LCAweDI4NjIsCi0JCTB4Y2M2NSwgMHgzMDEyLAotCQkweGNjNjYsIDB4MTAwMiwKLQkJMHhjYzY3LCAweDJlZDIsCi0JCTB4Y2M2OCwgMHgzMDAyLAotCQkweGNjNjksIDB4MTAwMiwKLQkJMHhjYzZhLCAweDJkNzIsCi0JCTB4Y2M2YiwgMHgzMDAyLAotCQkweGNjNmMsIDB4MTAwMiwKLQkJMHhjYzZkLCAweDYyOGYsCi0JCTB4Y2M2ZSwgMHgyMTEyLAotCQkweGNjNmYsIDB4MzAxMiwKLQkJMHhjYzcwLCAweDEwMDIsCi0JCTB4Y2M3MSwgMHg1YWEzLAotCQkweGNjNzIsIDB4MmRjMiwKLQkJMHhjYzczLCAweDMwMDIsCi0JCTB4Y2M3NCwgMHgxMzEyLAotCQkweGNjNzUsIDB4NmY3MiwKLQkJMHhjYzc2LCAweDEwMDIsCi0JCTB4Y2M3NywgMHgyODA3LAotCQkweGNjNzgsIDB4MzFhNywKLQkJMHhjYzc5LCAweDIwYzQsCi0JCTB4Y2M3YSwgMHgzYzI0LAotCQkweGNjN2IsIDB4NjcyNCwKLQkJMHhjYzdjLCAweDEwMDIsCi0JCTB4Y2M3ZCwgMHgyODA3LAotCQkweGNjN2UsIDB4MzE4NywKLQkJMHhjYzdmLCAweDIwYzQsCi0JCTB4Y2M4MCwgMHgzYzI0LAotCQkweGNjODEsIDB4NjcyNCwKLQkJMHhjYzgyLCAweDEwMDIsCi0JCTB4Y2M4MywgMHgyNTE0LAotCQkweGNjODQsIDB4M2M2NCwKLQkJMHhjYzg1LCAweDY0MzYsCi0JCTB4Y2M4NiwgMHhkZmY0LAotCQkweGNjODcsIDB4NjQzNiwKLQkJMHhjYzg4LCAweDEwMDIsCi0JCTB4Y2M4OSwgMHg0MGE0LAotCQkweGNjOGEsIDB4NjQzYywKLQkJMHhjYzhiLCAweDQwMTYsCi0JCTB4Y2M4YywgMHg4YzZjLAotCQkweGNjOGQsIDB4MmIyNCwKLQkJMHhjYzhlLCAweDNjMjQsCi0JCTB4Y2M4ZiwgMHg2NDM1LAotCQkweGNjOTAsIDB4MTAwMiwKLQkJMHhjYzkxLCAweDJiMjQsCi0JCTB4Y2M5MiwgMHgzYzI0LAotCQkweGNjOTMsIDB4NjQzYSwKLQkJMHhjYzk0LCAweDQwMjUsCi0JCTB4Y2M5NSwgMHg4YTVhLAotCQkweGNjOTYsIDB4MTAwMiwKLQkJMHhjYzk3LCAweDI3MzEsCi0JCTB4Y2M5OCwgMHgzMDExLAotCQkweGNjOTksIDB4MTAwMSwKLQkJMHhjYzlhLCAweGM3YTAsCi0JCTB4Y2M5YiwgMHgxMDAsCi0JCTB4Y2M5YywgMHhjNTAyLAotCQkweGNjOWQsIDB4NTNhYywKLQkJMHhjYzllLCAweGM1MDMsCi0JCTB4Y2M5ZiwgMHhkNWQ1LAotCQkweGNjYTAsIDB4YzYwMCwKLQkJMHhjY2ExLCAweDJhNmQsCi0JCTB4Y2NhMiwgMHhjNjAxLAotCQkweGNjYTMsIDB4MmE0YywKLQkJMHhjY2E0LCAweGM2MDIsCi0JCTB4Y2NhNSwgMHgxMTEsCi0JCTB4Y2NhNiwgMHhjNjBjLAotCQkweGNjYTcsIDB4NTkwMCwKLQkJMHhjY2E4LCAweGM3MTAsCi0JCTB4Y2NhOSwgMHg3MDAsCi0JCTB4Y2NhYSwgMHhjNzE4LAotCQkweGNjYWIsIDB4NzAwLAotCQkweGNjYWMsIDB4YzcyMCwKLQkJMHhjY2FkLCAweDQ3MDAsCi0JCTB4Y2NhZSwgMHhjODAxLAotCQkweGNjYWYsIDB4N2Y1MCwKLQkJMHhjY2IwLCAweGM4MDIsCi0JCTB4Y2NiMSwgMHg3NzYwLAotCQkweGNjYjIsIDB4YzgwMywKLQkJMHhjY2IzLCAweDdmY2UsCi0JCTB4Y2NiNCwgMHhjODA0LAotCQkweGNjYjUsIDB4NTcwMCwKLQkJMHhjY2I2LCAweGM4MDUsCi0JCTB4Y2NiNywgMHg1ZjExLAotCQkweGNjYjgsIDB4YzgwNiwKLQkJMHhjY2I5LCAweDQ3NTEsCi0JCTB4Y2NiYSwgMHhjODA3LAotCQkweGNjYmIsIDB4NTdlMSwKLQkJMHhjY2JjLCAweGM4MDgsCi0JCTB4Y2NiZCwgMHgyNzAwLAotCQkweGNjYmUsIDB4YzgwOSwKLQkJMHhjY2JmLCAweDAwMCwKLQkJMHhjY2MwLCAweGM4MjEsCi0JCTB4Y2NjMSwgMHgwMDIsCi0JCTB4Y2NjMiwgMHhjODIyLAotCQkweGNjYzMsIDB4MDE0LAotCQkweGNjYzQsIDB4YzgzMiwKLQkJMHhjY2M1LCAweDExODYsCi0JCTB4Y2NjNiwgMHhjODQ3LAotCQkweGNjYzcsIDB4MWUwMiwKLQkJMHhjY2M4LCAweGMwMTMsCi0JCTB4Y2NjOSwgMHhmMzQxLAotCQkweGNjY2EsIDB4YzAxYSwKLQkJMHhjY2NiLCAweDQ0NiwKLQkJMHhjY2NjLCAweGMwMjQsCi0JCTB4Y2NjZCwgMHgxMDAwLAotCQkweGNjY2UsIDB4YzAyNSwKLQkJMHhjY2NmLCAweGEwMCwKLQkJMHhjY2QwLCAweGMwMjYsCi0JCTB4Y2NkMSwgMHhjMGMsCi0JCTB4Y2NkMiwgMHhjMDI3LAotCQkweGNjZDMsIDB4YzBjLAotCQkweGNjZDQsIDB4YzAyOSwKLQkJMHhjY2Q1LCAweDBhMCwKLQkJMHhjY2Q2LCAweGMwMzAsCi0JCTB4Y2NkNywgMHhhMDAsCi0JCTB4Y2NkOCwgMHhjMDNjLAotCQkweGNjZDksIDB4MDFjLAotCQkweGNjZGEsIDB4YzAwNSwKLQkJMHhjY2RiLCAweDdhMDYsCi0JCTB4Y2NkYywgMHgwMDAsCi0JCTB4Y2NkZCwgMHgyNzMxLAotCQkweGNjZGUsIDB4MzAxMSwKLQkJMHhjY2RmLCAweDEwMDEsCi0JCTB4Y2NlMCwgMHhjNjIwLAotCQkweGNjZTEsIDB4MDAwLAotCQkweGNjZTIsIDB4YzYyMSwKLQkJMHhjY2UzLCAweDAzZiwKLQkJMHhjY2U0LCAweGM2MjIsCi0JCTB4Y2NlNSwgMHgwMDAsCi0JCTB4Y2NlNiwgMHhjNjIzLAotCQkweGNjZTcsIDB4MDAwLAotCQkweGNjZTgsIDB4YzYyNCwKLQkJMHhjY2U5LCAweDAwMCwKLQkJMHhjY2VhLCAweGM2MjUsCi0JCTB4Y2NlYiwgMHgwMDAsCi0JCTB4Y2NlYywgMHhjNjI3LAotCQkweGNjZWQsIDB4MDAwLAotCQkweGNjZWUsIDB4YzYyOCwKLQkJMHhjY2VmLCAweDAwMCwKLQkJMHhjY2YwLCAweGM2MmMsCi0JCTB4Y2NmMSwgMHgwMDAsCi0JCTB4Y2NmMiwgMHgwMDAsCi0JCTB4Y2NmMywgMHgyODA2LAotCQkweGNjZjQsIDB4M2NiNiwKLQkJMHhjY2Y1LCAweGMxNjEsCi0JCTB4Y2NmNiwgMHg2MTM0LAotCQkweGNjZjcsIDB4NjEzNSwKLQkJMHhjY2Y4LCAweDU0NDMsCi0JCTB4Y2NmOSwgMHgzMDMsCi0JCTB4Y2NmYSwgMHg2NTI0LAotCQkweGNjZmIsIDB4MDBiLAotCQkweGNjZmMsIDB4MTAwMiwKLQkJMHhjY2ZkLCAweDIxMDQsCi0JCTB4Y2NmZSwgMHgzYzI0LAotCQkweGNjZmYsIDB4MjEwNSwKLQkJMHhjZDAwLCAweDM4MDUsCi0JCTB4Y2QwMSwgMHg2NTI0LAotCQkweGNkMDIsIDB4ZGZmNCwKLQkJMHhjZDAzLCAweDQwMDUsCi0JCTB4Y2QwNCwgMHg2NTI0LAotCQkweGNkMDUsIDB4MTAwMiwKLQkJMHhjZDA2LCAweDVkZDMsCi0JCTB4Y2QwNywgMHgzMDYsCi0JCTB4Y2QwOCwgMHgyZmY3LAotCQkweGNkMDksIDB4MzhmNywKLQkJMHhjZDBhLCAweDYwYjcsCi0JCTB4Y2QwYiwgMHhkZmZkLAotCQkweGNkMGMsIDB4MDBhLAotCQkweGNkMGQsIDB4MTAwMiwKLQkJMHhjZDBlLCAwCi0JfTsKKwogCWludCBpLCBlcnI7CiAKIAllcnIgPSBzZXRfcGh5X3JlZ3MocGh5LCByZWdzKTsKQEAgLTU4NSw5ICszMDcsMTYgQEAKIAogCW1zbGVlcCg1MCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcl9lZGMpICYmICFlcnI7IGkgKz0gMikKLQkJZXJyID0gdDNfbWRpb193cml0ZShwaHksIE1ESU9fTU1EX1BNQVBNRCwgc3JfZWRjW2ldLAotCQkJCSAgICBzcl9lZGNbaSArIDFdKTsKKwlpZiAocGh5LT5wcml2ICE9IGVkY19zcikKKwkJZXJyID0gdDNfZ2V0X2VkY19mdyhwaHksIEVEQ19PUFRfQUVMMjAwNSwKKwkJCQkgICAgRURDX09QVF9BRUwyMDA1X1NJWkUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgIEVEQ19PUFRfQUVMMjAwNV9TSVpFIC8gc2l6ZW9mKHUxNikgJiYgIWVycjsgaSArPSAyKQorCQllcnIgPSB0M19tZGlvX3dyaXRlKHBoeSwgTURJT19NTURfUE1BUE1ELAorCQkJCSAgICBwaHktPnBoeV9jYWNoZVtpXSwKKwkJCQkgICAgcGh5LT5waHlfY2FjaGVbaSArIDFdKTsKIAlpZiAoIWVycikKIAkJcGh5LT5wcml2ID0gZWRjX3NyOwogCXJldHVybiBlcnI7CkBAIC02MDQsMzc0ICszMzMsNiBAQAogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhjMDE1LCAweGZmZmYsIDB4YTAwMCB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07Ci0Jc3RhdGljIHUxNiB0d2luYXhfZWRjW10gPSB7Ci0JCTB4Y2MwMCwgMHg0MDA5LAotCQkweGNjMDEsIDB4MjdmZiwKLQkJMHhjYzAyLCAweDMwMGYsCi0JCTB4Y2MwMywgMHg0MGFhLAotCQkweGNjMDQsIDB4NDAxYywKLQkJMHhjYzA1LCAweDQwMWUsCi0JCTB4Y2MwNiwgMHgyZmY0LAotCQkweGNjMDcsIDB4M2NkNCwKLQkJMHhjYzA4LCAweDIwMzUsCi0JCTB4Y2MwOSwgMHgzMTQ1LAotCQkweGNjMGEsIDB4NjUyNCwKLQkJMHhjYzBiLCAweDI2YTIsCi0JCTB4Y2MwYywgMHgzMDEyLAotCQkweGNjMGQsIDB4MTAwMiwKLQkJMHhjYzBlLCAweDI5YzIsCi0JCTB4Y2MwZiwgMHgzMDAyLAotCQkweGNjMTAsIDB4MTAwMiwKLQkJMHhjYzExLCAweDIwNzIsCi0JCTB4Y2MxMiwgMHgzMDEyLAotCQkweGNjMTMsIDB4MTAwMiwKLQkJMHhjYzE0LCAweDIyY2QsCi0JCTB4Y2MxNSwgMHgzMDFkLAotCQkweGNjMTYsIDB4MmU1MiwKLQkJMHhjYzE3LCAweDMwMTIsCi0JCTB4Y2MxOCwgMHgxMDAyLAotCQkweGNjMTksIDB4MjhlMiwKLQkJMHhjYzFhLCAweDMwMDIsCi0JCTB4Y2MxYiwgMHgxMDAyLAotCQkweGNjMWMsIDB4NjI4ZiwKLQkJMHhjYzFkLCAweDJhYzIsCi0JCTB4Y2MxZSwgMHgzMDEyLAotCQkweGNjMWYsIDB4MTAwMiwKLQkJMHhjYzIwLCAweDU1NTMsCi0JCTB4Y2MyMSwgMHgyYWUyLAotCQkweGNjMjIsIDB4MzAwMiwKLQkJMHhjYzIzLCAweDEzMDIsCi0JCTB4Y2MyNCwgMHg0MDFlLAotCQkweGNjMjUsIDB4MmJlMiwKLQkJMHhjYzI2LCAweDMwMTIsCi0JCTB4Y2MyNywgMHgxMDAyLAotCQkweGNjMjgsIDB4MmRhMiwKLQkJMHhjYzI5LCAweDMwMTIsCi0JCTB4Y2MyYSwgMHgxMDAyLAotCQkweGNjMmIsIDB4MmJhMiwKLQkJMHhjYzJjLCAweDMwMDIsCi0JCTB4Y2MyZCwgMHgxMDAyLAotCQkweGNjMmUsIDB4NWVlMywKLQkJMHhjYzJmLCAweDMwNSwKLQkJMHhjYzMwLCAweDQwMGUsCi0JCTB4Y2MzMSwgMHgyYmMyLAotCQkweGNjMzIsIDB4MzAwMiwKLQkJMHhjYzMzLCAweDEwMDIsCi0JCTB4Y2MzNCwgMHgyYjgyLAotCQkweGNjMzUsIDB4MzAxMiwKLQkJMHhjYzM2LCAweDEwMDIsCi0JCTB4Y2MzNywgMHg1NjYzLAotCQkweGNjMzgsIDB4MzAyLAotCQkweGNjMzksIDB4NDAxZSwKLQkJMHhjYzNhLCAweDZmNzIsCi0JCTB4Y2MzYiwgMHgxMDAyLAotCQkweGNjM2MsIDB4NjI4ZiwKLQkJMHhjYzNkLCAweDJiZTIsCi0JCTB4Y2MzZSwgMHgzMDEyLAotCQkweGNjM2YsIDB4MTAwMiwKLQkJMHhjYzQwLCAweDIyY2QsCi0JCTB4Y2M0MSwgMHgzMDFkLAotCQkweGNjNDIsIDB4MmU1MiwKLQkJMHhjYzQzLCAweDMwMTIsCi0JCTB4Y2M0NCwgMHgxMDAyLAotCQkweGNjNDUsIDB4MjUyMiwKLQkJMHhjYzQ2LCAweDMwMTIsCi0JCTB4Y2M0NywgMHgxMDAyLAotCQkweGNjNDgsIDB4MmRhMiwKLQkJMHhjYzQ5LCAweDMwMTIsCi0JCTB4Y2M0YSwgMHgxMDAyLAotCQkweGNjNGIsIDB4MmNhMiwKLQkJMHhjYzRjLCAweDMwMTIsCi0JCTB4Y2M0ZCwgMHgxMDAyLAotCQkweGNjNGUsIDB4MmZhNCwKLQkJMHhjYzRmLCAweDNjZDQsCi0JCTB4Y2M1MCwgMHg2NjI0LAotCQkweGNjNTEsIDB4NDEwYiwKLQkJMHhjYzUyLCAweDU2YjMsCi0JCTB4Y2M1MywgMHgzYzQsCi0JCTB4Y2M1NCwgMHgyZmIyLAotCQkweGNjNTUsIDB4MzAwMiwKLQkJMHhjYzU2LCAweDEwMDIsCi0JCTB4Y2M1NywgMHgyMjBiLAotCQkweGNjNTgsIDB4MzAzYiwKLQkJMHhjYzU5LCAweDU2YjMsCi0JCTB4Y2M1YSwgMHgzYzMsCi0JCTB4Y2M1YiwgMHg4NjZiLAotCQkweGNjNWMsIDB4NDAwYywKLQkJMHhjYzVkLCAweDIzYTIsCi0JCTB4Y2M1ZSwgMHgzMDEyLAotCQkweGNjNWYsIDB4MTAwMiwKLQkJMHhjYzYwLCAweDJkYTIsCi0JCTB4Y2M2MSwgMHgzMDEyLAotCQkweGNjNjIsIDB4MTAwMiwKLQkJMHhjYzYzLCAweDJjYTIsCi0JCTB4Y2M2NCwgMHgzMDEyLAotCQkweGNjNjUsIDB4MTAwMiwKLQkJMHhjYzY2LCAweDJmYjQsCi0JCTB4Y2M2NywgMHgzY2Q0LAotCQkweGNjNjgsIDB4NjYyNCwKLQkJMHhjYzY5LCAweDU2YjMsCi0JCTB4Y2M2YSwgMHgzYzMsCi0JCTB4Y2M2YiwgMHg4NjZiLAotCQkweGNjNmMsIDB4NDAxYywKLQkJMHhjYzZkLCAweDIyMDUsCi0JCTB4Y2M2ZSwgMHgzMDM1LAotCQkweGNjNmYsIDB4NWI1MywKLQkJMHhjYzcwLCAweDJjNTIsCi0JCTB4Y2M3MSwgMHgzMDAyLAotCQkweGNjNzIsIDB4MTNjMiwKLQkJMHhjYzczLCAweDVjYzMsCi0JCTB4Y2M3NCwgMHgzMTcsCi0JCTB4Y2M3NSwgMHgyNTIyLAotCQkweGNjNzYsIDB4MzAxMiwKLQkJMHhjYzc3LCAweDEwMDIsCi0JCTB4Y2M3OCwgMHgyZGEyLAotCQkweGNjNzksIDB4MzAxMiwKLQkJMHhjYzdhLCAweDEwMDIsCi0JCTB4Y2M3YiwgMHgyYjgyLAotCQkweGNjN2MsIDB4MzAxMiwKLQkJMHhjYzdkLCAweDEwMDIsCi0JCTB4Y2M3ZSwgMHg1NjYzLAotCQkweGNjN2YsIDB4MzAzLAotCQkweGNjODAsIDB4NDAxZSwKLQkJMHhjYzgxLCAweDAwNCwKLQkJMHhjYzgyLCAweDJjNDIsCi0JCTB4Y2M4MywgMHgzMDEyLAotCQkweGNjODQsIDB4MTAwMiwKLQkJMHhjYzg1LCAweDZmNzIsCi0JCTB4Y2M4NiwgMHgxMDAyLAotCQkweGNjODcsIDB4NjI4ZiwKLQkJMHhjYzg4LCAweDIzMDQsCi0JCTB4Y2M4OSwgMHgzYzg0LAotCQkweGNjOGEsIDB4NjQzNiwKLQkJMHhjYzhiLCAweGRmZjQsCi0JCTB4Y2M4YywgMHg2NDM2LAotCQkweGNjOGQsIDB4MmZmNSwKLQkJMHhjYzhlLCAweDMwMDUsCi0JCTB4Y2M4ZiwgMHg4NjU2LAotCQkweGNjOTAsIDB4ZGZiYSwKLQkJMHhjYzkxLCAweDU2YTMsCi0JCTB4Y2M5MiwgMHhkMDVhLAotCQkweGNjOTMsIDB4MjFjMiwKLQkJMHhjYzk0LCAweDMwMTIsCi0JCTB4Y2M5NSwgMHgxMzkyLAotCQkweGNjOTYsIDB4ZDA1YSwKLQkJMHhjYzk3LCAweDU2YTMsCi0JCTB4Y2M5OCwgMHhkZmJhLAotCQkweGNjOTksIDB4MzgzLAotCQkweGNjOWEsIDB4NmY3MiwKLQkJMHhjYzliLCAweDEwMDIsCi0JCTB4Y2M5YywgMHgyOGM1LAotCQkweGNjOWQsIDB4MzAwNSwKLQkJMHhjYzllLCAweDQxNzgsCi0JCTB4Y2M5ZiwgMHg1NjUzLAotCQkweGNjYTAsIDB4Mzg0LAotCQkweGNjYTEsIDB4MjJiMiwKLQkJMHhjY2EyLCAweDMwMTIsCi0JCTB4Y2NhMywgMHgxMDAyLAotCQkweGNjYTQsIDB4MmJlNSwKLQkJMHhjY2E1LCAweDMwMDUsCi0JCTB4Y2NhNiwgMHg0MWU4LAotCQkweGNjYTcsIDB4NTY1MywKLQkJMHhjY2E4LCAweDM4MiwKLQkJMHhjY2E5LCAweDAwMiwKLQkJMHhjY2FhLCAweDQyNTgsCi0JCTB4Y2NhYiwgMHgyNDc0LAotCQkweGNjYWMsIDB4M2M4NCwKLQkJMHhjY2FkLCAweDY0MzcsCi0JCTB4Y2NhZSwgMHhkZmY0LAotCQkweGNjYWYsIDB4NjQzNywKLQkJMHhjY2IwLCAweDJmZjUsCi0JCTB4Y2NiMSwgMHgzYzA1LAotCQkweGNjYjIsIDB4ODc1NywKLQkJMHhjY2IzLCAweGI4ODgsCi0JCTB4Y2NiNCwgMHg5Nzg3LAotCQkweGNjYjUsIDB4ZGZmNCwKLQkJMHhjY2I2LCAweDY3MjQsCi0JCTB4Y2NiNywgMHg4NjZhLAotCQkweGNjYjgsIDB4NmY3MiwKLQkJMHhjY2I5LCAweDEwMDIsCi0JCTB4Y2NiYSwgMHgyZDAxLAotCQkweGNjYmIsIDB4MzAxMSwKLQkJMHhjY2JjLCAweDEwMDEsCi0JCTB4Y2NiZCwgMHhjNjIwLAotCQkweGNjYmUsIDB4MTRlNSwKLQkJMHhjY2JmLCAweGM2MjEsCi0JCTB4Y2NjMCwgMHhjNTNkLAotCQkweGNjYzEsIDB4YzYyMiwKLQkJMHhjY2MyLCAweDNjYmUsCi0JCTB4Y2NjMywgMHhjNjIzLAotCQkweGNjYzQsIDB4NDQ1MiwKLQkJMHhjY2M1LCAweGM2MjQsCi0JCTB4Y2NjNiwgMHhjNWM1LAotCQkweGNjYzcsIDB4YzYyNSwKLQkJMHhjY2M4LCAweGUwMWUsCi0JCTB4Y2NjOSwgMHhjNjI3LAotCQkweGNjY2EsIDB4MDAwLAotCQkweGNjY2IsIDB4YzYyOCwKLQkJMHhjY2NjLCAweDAwMCwKLQkJMHhjY2NkLCAweGM2MmIsCi0JCTB4Y2NjZSwgMHgwMDAsCi0JCTB4Y2NjZiwgMHhjNjJjLAotCQkweGNjZDAsIDB4MDAwLAotCQkweGNjZDEsIDB4MDAwLAotCQkweGNjZDIsIDB4MmQwMSwKLQkJMHhjY2QzLCAweDMwMTEsCi0JCTB4Y2NkNCwgMHgxMDAxLAotCQkweGNjZDUsIDB4YzYyMCwKLQkJMHhjY2Q2LCAweDAwMCwKLQkJMHhjY2Q3LCAweGM2MjEsCi0JCTB4Y2NkOCwgMHgwMDAsCi0JCTB4Y2NkOSwgMHhjNjIyLAotCQkweGNjZGEsIDB4MGNlLAotCQkweGNjZGIsIDB4YzYyMywKLQkJMHhjY2RjLCAweDA3ZiwKLQkJMHhjY2RkLCAweGM2MjQsCi0JCTB4Y2NkZSwgMHgwMzIsCi0JCTB4Y2NkZiwgMHhjNjI1LAotCQkweGNjZTAsIDB4MDAwLAotCQkweGNjZTEsIDB4YzYyNywKLQkJMHhjY2UyLCAweDAwMCwKLQkJMHhjY2UzLCAweGM2MjgsCi0JCTB4Y2NlNCwgMHgwMDAsCi0JCTB4Y2NlNSwgMHhjNjJiLAotCQkweGNjZTYsIDB4MDAwLAotCQkweGNjZTcsIDB4YzYyYywKLQkJMHhjY2U4LCAweDAwMCwKLQkJMHhjY2U5LCAweDAwMCwKLQkJMHhjY2VhLCAweDJkMDEsCi0JCTB4Y2NlYiwgMHgzMDExLAotCQkweGNjZWMsIDB4MTAwMSwKLQkJMHhjY2VkLCAweGM1MDIsCi0JCTB4Y2NlZSwgMHg2MDlmLAotCQkweGNjZWYsIDB4YzYwMCwKLQkJMHhjY2YwLCAweDJhNmUsCi0JCTB4Y2NmMSwgMHhjNjAxLAotCQkweGNjZjIsIDB4MmEyYywKLQkJMHhjY2YzLCAweGM2MGMsCi0JCTB4Y2NmNCwgMHg1NDAwLAotCQkweGNjZjUsIDB4YzcxMCwKLQkJMHhjY2Y2LCAweDcwMCwKLQkJMHhjY2Y3LCAweGM3MTgsCi0JCTB4Y2NmOCwgMHg3MDAsCi0JCTB4Y2NmOSwgMHhjNzIwLAotCQkweGNjZmEsIDB4NDcwMCwKLQkJMHhjY2ZiLCAweGM3MjgsCi0JCTB4Y2NmYywgMHg3MDAsCi0JCTB4Y2NmZCwgMHhjNzI5LAotCQkweGNjZmUsIDB4MTIwNywKLQkJMHhjY2ZmLCAweGM4MDEsCi0JCTB4Y2QwMCwgMHg3ZjUwLAotCQkweGNkMDEsIDB4YzgwMiwKLQkJMHhjZDAyLCAweDc3NjAsCi0JCTB4Y2QwMywgMHhjODAzLAotCQkweGNkMDQsIDB4N2ZjZSwKLQkJMHhjZDA1LCAweGM4MDQsCi0JCTB4Y2QwNiwgMHg1MjBlLAotCQkweGNkMDcsIDB4YzgwNSwKLQkJMHhjZDA4LCAweDVjMTEsCi0JCTB4Y2QwOSwgMHhjODA2LAotCQkweGNkMGEsIDB4M2M1MSwKLQkJMHhjZDBiLCAweGM4MDcsCi0JCTB4Y2QwYywgMHg0MDYxLAotCQkweGNkMGQsIDB4YzgwOCwKLQkJMHhjZDBlLCAweDQ5YzEsCi0JCTB4Y2QwZiwgMHhjODA5LAotCQkweGNkMTAsIDB4Mzg0MCwKLQkJMHhjZDExLCAweGM4MGEsCi0JCTB4Y2QxMiwgMHgwMDAsCi0JCTB4Y2QxMywgMHhjODIxLAotCQkweGNkMTQsIDB4MDAyLAotCQkweGNkMTUsIDB4YzgyMiwKLQkJMHhjZDE2LCAweDA0NiwKLQkJMHhjZDE3LCAweGM4NDQsCi0JCTB4Y2QxOCwgMHgxODJmLAotCQkweGNkMTksIDB4YzAxMywKLQkJMHhjZDFhLCAweGYzNDEsCi0JCTB4Y2QxYiwgMHhjMDFhLAotCQkweGNkMWMsIDB4NDQ2LAotCQkweGNkMWQsIDB4YzAyNCwKLQkJMHhjZDFlLCAweDEwMDAsCi0JCTB4Y2QxZiwgMHhjMDI1LAotCQkweGNkMjAsIDB4YTAwLAotCQkweGNkMjEsIDB4YzAyNiwKLQkJMHhjZDIyLCAweGMwYywKLQkJMHhjZDIzLCAweGMwMjcsCi0JCTB4Y2QyNCwgMHhjMGMsCi0JCTB4Y2QyNSwgMHhjMDI5LAotCQkweGNkMjYsIDB4MGEwLAotCQkweGNkMjcsIDB4YzAzMCwKLQkJMHhjZDI4LCAweGEwMCwKLQkJMHhjZDI5LCAweGMwM2MsCi0JCTB4Y2QyYSwgMHgwMWMsCi0JCTB4Y2QyYiwgMHgwMDAsCi0JCTB4Y2QyYywgMHgyYjg0LAotCQkweGNkMmQsIDB4M2M3NCwKLQkJMHhjZDJlLCAweDY0MzUsCi0JCTB4Y2QyZiwgMHhkZmY0LAotCQkweGNkMzAsIDB4NjQzNSwKLQkJMHhjZDMxLCAweDI4MDYsCi0JCTB4Y2QzMiwgMHgzMDA2LAotCQkweGNkMzMsIDB4ODU2NSwKLQkJMHhjZDM0LCAweDJiMjQsCi0JCTB4Y2QzNSwgMHgzYzI0LAotCQkweGNkMzYsIDB4NjQzNiwKLQkJMHhjZDM3LCAweDEwMDIsCi0JCTB4Y2QzOCwgMHgyYjI0LAotCQkweGNkMzksIDB4M2MyNCwKLQkJMHhjZDNhLCAweDY0MzYsCi0JCTB4Y2QzYiwgMHg0MDQ1LAotCQkweGNkM2MsIDB4ODY1NiwKLQkJMHhjZDNkLCAweDEwMDIsCi0JCTB4Y2QzZSwgMHgyODA3LAotCQkweGNkM2YsIDB4MzFhNywKLQkJMHhjZDQwLCAweDIwYzQsCi0JCTB4Y2Q0MSwgMHgzYzI0LAotCQkweGNkNDIsIDB4NjcyNCwKLQkJMHhjZDQzLCAweDEwMDIsCi0JCTB4Y2Q0NCwgMHgyODA3LAotCQkweGNkNDUsIDB4MzE4NywKLQkJMHhjZDQ2LCAweDIwYzQsCi0JCTB4Y2Q0NywgMHgzYzI0LAotCQkweGNkNDgsIDB4NjcyNCwKLQkJMHhjZDQ5LCAweDEwMDIsCi0JCTB4Y2Q0YSwgMHgyNTE0LAotCQkweGNkNGIsIDB4M2M2NCwKLQkJMHhjZDRjLCAweDY0MzYsCi0JCTB4Y2Q0ZCwgMHhkZmY0LAotCQkweGNkNGUsIDB4NjQzNiwKLQkJMHhjZDRmLCAweDEwMDIsCi0JCTB4Y2Q1MCwgMHgyODA2LAotCQkweGNkNTEsIDB4M2NiNiwKLQkJMHhjZDUyLCAweGMxNjEsCi0JCTB4Y2Q1MywgMHg2MTM0LAotCQkweGNkNTQsIDB4NjEzNSwKLQkJMHhjZDU1LCAweDU0NDMsCi0JCTB4Y2Q1NiwgMHgzMDMsCi0JCTB4Y2Q1NywgMHg2NTI0LAotCQkweGNkNTgsIDB4MDBiLAotCQkweGNkNTksIDB4MTAwMiwKLQkJMHhjZDVhLCAweGQwMTksCi0JCTB4Y2Q1YiwgMHgyMTA0LAotCQkweGNkNWMsIDB4M2MyNCwKLQkJMHhjZDVkLCAweDIxMDUsCi0JCTB4Y2Q1ZSwgMHgzODA1LAotCQkweGNkNWYsIDB4NjUyNCwKLQkJMHhjZDYwLCAweGRmZjQsCi0JCTB4Y2Q2MSwgMHg0MDA1LAotCQkweGNkNjIsIDB4NjUyNCwKLQkJMHhjZDYzLCAweDJlOGQsCi0JCTB4Y2Q2NCwgMHgzMDNkLAotCQkweGNkNjUsIDB4NWRkMywKLQkJMHhjZDY2LCAweDMwNiwKLQkJMHhjZDY3LCAweDJmZjcsCi0JCTB4Y2Q2OCwgMHgzOGY3LAotCQkweGNkNjksIDB4NjBiNywKLQkJMHhjZDZhLCAweGRmZmQsCi0JCTB4Y2Q2YiwgMHgwMGEsCi0JCTB4Y2Q2YywgMHgxMDAyLAotCQkweGNkNmQsIDAKLQl9OwogCWludCBpLCBlcnI7CiAKIAllcnIgPSBzZXRfcGh5X3JlZ3MocGh5LCByZWdzKTsKQEAgLTk4Miw5ICszNDMsMTYgQEAKIAogCW1zbGVlcCg1MCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0d2luYXhfZWRjKSAmJiAhZXJyOyBpICs9IDIpCi0JCWVyciA9IHQzX21kaW9fd3JpdGUocGh5LCBNRElPX01NRF9QTUFQTUQsIHR3aW5heF9lZGNbaV0sCi0JCQkJICAgIHR3aW5heF9lZGNbaSArIDFdKTsKKwlpZiAocGh5LT5wcml2ICE9IGVkY190d2luYXgpCisJCWVyciA9IHQzX2dldF9lZGNfZncocGh5LCBFRENfVFdYX0FFTDIwMDUsCisJCQkJICAgIEVEQ19UV1hfQUVMMjAwNV9TSVpFKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgaSA8ICBFRENfVFdYX0FFTDIwMDVfU0laRSAvIHNpemVvZih1MTYpICYmICFlcnI7IGkgKz0gMikKKwkJZXJyID0gdDNfbWRpb193cml0ZShwaHksIE1ESU9fTU1EX1BNQVBNRCwKKwkJCQkgICAgcGh5LT5waHlfY2FjaGVbaV0sCisJCQkJICAgIHBoeS0+cGh5X2NhY2hlW2kgKyAxXSk7CiAJaWYgKCFlcnIpCiAJCXBoeS0+cHJpdiA9IGVkY190d2luYXg7CiAJcmV0dXJuIGVycjsKQEAgLTEyMDEsNDA1ICs1NjksNiBAQAogCQl7IE1ESU9fTU1EX1BNQVBNRCwgMHhkMDkyLCAweGZmZmYsIDB4MDAwMCB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07Ci0KLQkvKiBUV0lOQVggRURDIGZpcm13YXJlICovCi0Jc3RhdGljIHUxNiB0d2luYXhfZWRjW10gPSB7Ci0JCTB4ZDgwMCwgMHg0MDA5LAotCQkweGQ4MDEsIDB4MmZmZiwKLQkJMHhkODAyLCAweDMwMGYsCi0JCTB4ZDgwMywgMHg0MGFhLAotCQkweGQ4MDQsIDB4NDAxYywKLQkJMHhkODA1LCAweDQwMWUsCi0JCTB4ZDgwNiwgMHgyZmY0LAotCQkweGQ4MDcsIDB4M2RjNCwKLQkJMHhkODA4LCAweDIwMzUsCi0JCTB4ZDgwOSwgMHgzMDM1LAotCQkweGQ4MGEsIDB4NjUyNCwKLQkJMHhkODBiLCAweDJjYjIsCi0JCTB4ZDgwYywgMHgzMDEyLAotCQkweGQ4MGQsIDB4MTAwMiwKLQkJMHhkODBlLCAweDI2ZTIsCi0JCTB4ZDgwZiwgMHgzMDIyLAotCQkweGQ4MTAsIDB4MTAwMiwKLQkJMHhkODExLCAweDI3ZDIsCi0JCTB4ZDgxMiwgMHgzMDIyLAotCQkweGQ4MTMsIDB4MTAwMiwKLQkJMHhkODE0LCAweDI4MjIsCi0JCTB4ZDgxNSwgMHgzMDEyLAotCQkweGQ4MTYsIDB4MTAwMiwKLQkJMHhkODE3LCAweDI0OTIsCi0JCTB4ZDgxOCwgMHgzMDIyLAotCQkweGQ4MTksIDB4MTAwMiwKLQkJMHhkODFhLCAweDI3NzIsCi0JCTB4ZDgxYiwgMHgzMDEyLAotCQkweGQ4MWMsIDB4MTAwMiwKLQkJMHhkODFkLCAweDIzZDIsCi0JCTB4ZDgxZSwgMHgzMDIyLAotCQkweGQ4MWYsIDB4MTAwMiwKLQkJMHhkODIwLCAweDIyY2QsCi0JCTB4ZDgyMSwgMHgzMDFkLAotCQkweGQ4MjIsIDB4MjdmMiwKLQkJMHhkODIzLCAweDMwMjIsCi0JCTB4ZDgyNCwgMHgxMDAyLAotCQkweGQ4MjUsIDB4NTU1MywKLQkJMHhkODI2LCAweDAzMDcsCi0JCTB4ZDgyNywgMHgyNTIyLAotCQkweGQ4MjgsIDB4MzAyMiwKLQkJMHhkODI5LCAweDEwMDIsCi0JCTB4ZDgyYSwgMHgyMTQyLAotCQkweGQ4MmIsIDB4MzAxMiwKLQkJMHhkODJjLCAweDEwMDIsCi0JCTB4ZDgyZCwgMHg0MDE2LAotCQkweGQ4MmUsIDB4NWU2MywKLQkJMHhkODJmLCAweDAzNDQsCi0JCTB4ZDgzMCwgMHgyMTQyLAotCQkweGQ4MzEsIDB4MzAxMiwKLQkJMHhkODMyLCAweDEwMDIsCi0JCTB4ZDgzMywgMHg0MDBlLAotCQkweGQ4MzQsIDB4MjUyMiwKLQkJMHhkODM1LCAweDMwMjIsCi0JCTB4ZDgzNiwgMHgxMDAyLAotCQkweGQ4MzcsIDB4MmI1MiwKLQkJMHhkODM4LCAweDMwMTIsCi0JCTB4ZDgzOSwgMHgxMDAyLAotCQkweGQ4M2EsIDB4Mjc0MiwKLQkJMHhkODNiLCAweDMwMjIsCi0JCTB4ZDgzYywgMHgxMDAyLAotCQkweGQ4M2QsIDB4MjVlMiwKLQkJMHhkODNlLCAweDMwMjIsCi0JCTB4ZDgzZiwgMHgxMDAyLAotCQkweGQ4NDAsIDB4MmZhNCwKLQkJMHhkODQxLCAweDNkYzQsCi0JCTB4ZDg0MiwgMHg2NjI0LAotCQkweGQ4NDMsIDB4NDE0YiwKLQkJMHhkODQ0LCAweDU2YjMsCi0JCTB4ZDg0NSwgMHgwM2M2LAotCQkweGQ4NDYsIDB4ODY2YiwKLQkJMHhkODQ3LCAweDQwMGMsCi0JCTB4ZDg0OCwgMHgyNzEyLAotCQkweGQ4NDksIDB4MzAxMiwKLQkJMHhkODRhLCAweDEwMDIsCi0JCTB4ZDg0YiwgMHgyYzRiLAotCQkweGQ4NGMsIDB4MzA5YiwKLQkJMHhkODRkLCAweDU2YjMsCi0JCTB4ZDg0ZSwgMHgwM2MzLAotCQkweGQ4NGYsIDB4ODY2YiwKLQkJMHhkODUwLCAweDQwMGMsCi0JCTB4ZDg1MSwgMHgyMjcyLAotCQkweGQ4NTIsIDB4MzAyMiwKLQkJMHhkODUzLCAweDEwMDIsCi0JCTB4ZDg1NCwgMHgyNzQyLAotCQkweGQ4NTUsIDB4MzAyMiwKLQkJMHhkODU2LCAweDEwMDIsCi0JCTB4ZDg1NywgMHgyNWUyLAotCQkweGQ4NTgsIDB4MzAyMiwKLQkJMHhkODU5LCAweDEwMDIsCi0JCTB4ZDg1YSwgMHgyZmI0LAotCQkweGQ4NWIsIDB4M2RjNCwKLQkJMHhkODVjLCAweDY2MjQsCi0JCTB4ZDg1ZCwgMHg1NmIzLAotCQkweGQ4NWUsIDB4MDNjMywKLQkJMHhkODVmLCAweDg2NmIsCi0JCTB4ZDg2MCwgMHg0MDFjLAotCQkweGQ4NjEsIDB4MmM0NSwKLQkJMHhkODYyLCAweDMwOTUsCi0JCTB4ZDg2MywgMHg1YjUzLAotCQkweGQ4NjQsIDB4MjM3MiwKLQkJMHhkODY1LCAweDMwMTIsCi0JCTB4ZDg2NiwgMHgxM2MyLAotCQkweGQ4NjcsIDB4NWNjMywKLQkJMHhkODY4LCAweDI3MTIsCi0JCTB4ZDg2OSwgMHgzMDEyLAotCQkweGQ4NmEsIDB4MTMxMiwKLQkJMHhkODZiLCAweDJiNTIsCi0JCTB4ZDg2YywgMHgzMDEyLAotCQkweGQ4NmQsIDB4MTAwMiwKLQkJMHhkODZlLCAweDI3NDIsCi0JCTB4ZDg2ZiwgMHgzMDIyLAotCQkweGQ4NzAsIDB4MTAwMiwKLQkJMHhkODcxLCAweDI1ODIsCi0JCTB4ZDg3MiwgMHgzMDIyLAotCQkweGQ4NzMsIDB4MTAwMiwKLQkJMHhkODc0LCAweDIxNDIsCi0JCTB4ZDg3NSwgMHgzMDEyLAotCQkweGQ4NzYsIDB4MTAwMiwKLQkJMHhkODc3LCAweDYyOGYsCi0JCTB4ZDg3OCwgMHgyOTg1LAotCQkweGQ4NzksIDB4MzNhNSwKLQkJMHhkODdhLCAweDI1ZTIsCi0JCTB4ZDg3YiwgMHgzMDIyLAotCQkweGQ4N2MsIDB4MTAwMiwKLQkJMHhkODdkLCAweDU2NTMsCi0JCTB4ZDg3ZSwgMHgwM2QyLAotCQkweGQ4N2YsIDB4NDAxZSwKLQkJMHhkODgwLCAweDZmNzIsCi0JCTB4ZDg4MSwgMHgxMDAyLAotCQkweGQ4ODIsIDB4NjI4ZiwKLQkJMHhkODgzLCAweDIzMDQsCi0JCTB4ZDg4NCwgMHgzYzg0LAotCQkweGQ4ODUsIDB4NjQzNiwKLQkJMHhkODg2LCAweGRmZjQsCi0JCTB4ZDg4NywgMHg2NDM2LAotCQkweGQ4ODgsIDB4MmZmNSwKLQkJMHhkODg5LCAweDMwMDUsCi0JCTB4ZDg4YSwgMHg4NjU2LAotCQkweGQ4OGIsIDB4ZGZiYSwKLQkJMHhkODhjLCAweDU2YTMsCi0JCTB4ZDg4ZCwgMHhkMDVhLAotCQkweGQ4OGUsIDB4Mjk3MiwKLQkJMHhkODhmLCAweDMwMTIsCi0JCTB4ZDg5MCwgMHgxMzkyLAotCQkweGQ4OTEsIDB4ZDA1YSwKLQkJMHhkODkyLCAweDU2YTMsCi0JCTB4ZDg5MywgMHhkZmJhLAotCQkweGQ4OTQsIDB4MDM4MywKLQkJMHhkODk1LCAweDZmNzIsCi0JCTB4ZDg5NiwgMHgxMDAyLAotCQkweGQ4OTcsIDB4MmI0NSwKLQkJMHhkODk4LCAweDMwMDUsCi0JCTB4ZDg5OSwgMHg0MTc4LAotCQkweGQ4OWEsIDB4NTY1MywKLQkJMHhkODliLCAweDAzODQsCi0JCTB4ZDg5YywgMHgyYTYyLAotCQkweGQ4OWQsIDB4MzAxMiwKLQkJMHhkODllLCAweDEwMDIsCi0JCTB4ZDg5ZiwgMHgyZjA1LAotCQkweGQ4YTAsIDB4MzAwNSwKLQkJMHhkOGExLCAweDQxYzgsCi0JCTB4ZDhhMiwgMHg1NjUzLAotCQkweGQ4YTMsIDB4MDM4MiwKLQkJMHhkOGE0LCAweDAwMDIsCi0JCTB4ZDhhNSwgMHg0MjE4LAotCQkweGQ4YTYsIDB4MjQ3NCwKLQkJMHhkOGE3LCAweDNjODQsCi0JCTB4ZDhhOCwgMHg2NDM3LAotCQkweGQ4YTksIDB4ZGZmNCwKLQkJMHhkOGFhLCAweDY0MzcsCi0JCTB4ZDhhYiwgMHgyZmY1LAotCQkweGQ4YWMsIDB4M2MwNSwKLQkJMHhkOGFkLCAweDg3NTcsCi0JCTB4ZDhhZSwgMHhiODg4LAotCQkweGQ4YWYsIDB4OTc4NywKLQkJMHhkOGIwLCAweGRmZjQsCi0JCTB4ZDhiMSwgMHg2NzI0LAotCQkweGQ4YjIsIDB4ODY2YSwKLQkJMHhkOGIzLCAweDZmNzIsCi0JCTB4ZDhiNCwgMHgxMDAyLAotCQkweGQ4YjUsIDB4MjY0MSwKLQkJMHhkOGI2LCAweDMwMjEsCi0JCTB4ZDhiNywgMHgxMDAxLAotCQkweGQ4YjgsIDB4YzYyMCwKLQkJMHhkOGI5LCAweDAwMDAsCi0JCTB4ZDhiYSwgMHhjNjIxLAotCQkweGQ4YmIsIDB4MDAwMCwKLQkJMHhkOGJjLCAweGM2MjIsCi0JCTB4ZDhiZCwgMHgwMGNlLAotCQkweGQ4YmUsIDB4YzYyMywKLQkJMHhkOGJmLCAweDAwN2YsCi0JCTB4ZDhjMCwgMHhjNjI0LAotCQkweGQ4YzEsIDB4MDAzMiwKLQkJMHhkOGMyLCAweGM2MjUsCi0JCTB4ZDhjMywgMHgwMDAwLAotCQkweGQ4YzQsIDB4YzYyNywKLQkJMHhkOGM1LCAweDAwMDAsCi0JCTB4ZDhjNiwgMHhjNjI4LAotCQkweGQ4YzcsIDB4MDAwMCwKLQkJMHhkOGM4LCAweGM2MmMsCi0JCTB4ZDhjOSwgMHgwMDAwLAotCQkweGQ4Y2EsIDB4MDAwMCwKLQkJMHhkOGNiLCAweDI2NDEsCi0JCTB4ZDhjYywgMHgzMDIxLAotCQkweGQ4Y2QsIDB4MTAwMSwKLQkJMHhkOGNlLCAweGM1MDIsCi0JCTB4ZDhjZiwgMHg1M2FjLAotCQkweGQ4ZDAsIDB4YzUwMywKLQkJMHhkOGQxLCAweDJjZDMsCi0JCTB4ZDhkMiwgMHhjNjAwLAotCQkweGQ4ZDMsIDB4MmE2ZSwKLQkJMHhkOGQ0LCAweGM2MDEsCi0JCTB4ZDhkNSwgMHgyYTJjLAotCQkweGQ4ZDYsIDB4YzYwNSwKLQkJMHhkOGQ3LCAweDU1NTcsCi0JCTB4ZDhkOCwgMHhjNjBjLAotCQkweGQ4ZDksIDB4NTQwMCwKLQkJMHhkOGRhLCAweGM3MTAsCi0JCTB4ZDhkYiwgMHgwNzAwLAotCQkweGQ4ZGMsIDB4YzcxMSwKLQkJMHhkOGRkLCAweDBmMDYsCi0JCTB4ZDhkZSwgMHhjNzE4LAotCQkweGQ4ZGYsIDB4MDcwMCwKLQkJMHhkOGUwLCAweGM3MTksCi0JCTB4ZDhlMSwgMHgwZjA2LAotCQkweGQ4ZTIsIDB4YzcyMCwKLQkJMHhkOGUzLCAweDQ3MDAsCi0JCTB4ZDhlNCwgMHhjNzIxLAotCQkweGQ4ZTUsIDB4MGYwNiwKLQkJMHhkOGU2LCAweGM3MjgsCi0JCTB4ZDhlNywgMHgwNzAwLAotCQkweGQ4ZTgsIDB4YzcyOSwKLQkJMHhkOGU5LCAweDEyMDcsCi0JCTB4ZDhlYSwgMHhjODAxLAotCQkweGQ4ZWIsIDB4N2Y1MCwKLQkJMHhkOGVjLCAweGM4MDIsCi0JCTB4ZDhlZCwgMHg3NzYwLAotCQkweGQ4ZWUsIDB4YzgwMywKLQkJMHhkOGVmLCAweDdmY2UsCi0JCTB4ZDhmMCwgMHhjODA0LAotCQkweGQ4ZjEsIDB4NTIwZSwKLQkJMHhkOGYyLCAweGM4MDUsCi0JCTB4ZDhmMywgMHg1YzExLAotCQkweGQ4ZjQsIDB4YzgwNiwKLQkJMHhkOGY1LCAweDNjNTEsCi0JCTB4ZDhmNiwgMHhjODA3LAotCQkweGQ4ZjcsIDB4NDA2MSwKLQkJMHhkOGY4LCAweGM4MDgsCi0JCTB4ZDhmOSwgMHg0OWMxLAotCQkweGQ4ZmEsIDB4YzgwOSwKLQkJMHhkOGZiLCAweDM4NDAsCi0JCTB4ZDhmYywgMHhjODBhLAotCQkweGQ4ZmQsIDB4MDAwMCwKLQkJMHhkOGZlLCAweGM4MjEsCi0JCTB4ZDhmZiwgMHgwMDAyLAotCQkweGQ5MDAsIDB4YzgyMiwKLQkJMHhkOTAxLCAweDAwNDYsCi0JCTB4ZDkwMiwgMHhjODQ0LAotCQkweGQ5MDMsIDB4MTgyZiwKLQkJMHhkOTA0LCAweGMwMTMsCi0JCTB4ZDkwNSwgMHhmMzQxLAotCQkweGQ5MDYsIDB4YzA4NCwKLQkJMHhkOTA3LCAweDAwMzAsCi0JCTB4ZDkwOCwgMHhjOTA0LAotCQkweGQ5MDksIDB4MTQwMSwKLQkJMHhkOTBhLCAweGNiMGMsCi0JCTB4ZDkwYiwgMHgwMDA0LAotCQkweGQ5MGMsIDB4Y2IwZSwKLQkJMHhkOTBkLCAweGEwMGEsCi0JCTB4ZDkwZSwgMHhjYjBmLAotCQkweGQ5MGYsIDB4YzBjMCwKLQkJMHhkOTEwLCAweGNiMTAsCi0JCTB4ZDkxMSwgMHhjMGMwLAotCQkweGQ5MTIsIDB4Y2IxMSwKLQkJMHhkOTEzLCAweDAwYTAsCi0JCTB4ZDkxNCwgMHhjYjEyLAotCQkweGQ5MTUsIDB4MDAwNywKLQkJMHhkOTE2LCAweGMyNDEsCi0JCTB4ZDkxNywgMHhhMDAwLAotCQkweGQ5MTgsIDB4YzI0MywKLQkJMHhkOTE5LCAweDdmZTAsCi0JCTB4ZDkxYSwgMHhjNjA0LAotCQkweGQ5MWIsIDB4MDAwZSwKLQkJMHhkOTFjLCAweGM2MDksCi0JCTB4ZDkxZCwgMHgwMGY1LAotCQkweGQ5MWUsIDB4YzYxMSwKLQkJMHhkOTFmLCAweDAwMGUsCi0JCTB4ZDkyMCwgMHhjNjYwLAotCQkweGQ5MjEsIDB4OTYwMCwKLQkJMHhkOTIyLCAweGM2ODcsCi0JCTB4ZDkyMywgMHgwMDA0LAotCQkweGQ5MjQsIDB4YzYwYSwKLQkJMHhkOTI1LCAweDA0ZjUsCi0JCTB4ZDkyNiwgMHgwMDAwLAotCQkweGQ5MjcsIDB4MjY0MSwKLQkJMHhkOTI4LCAweDMwMjEsCi0JCTB4ZDkyOSwgMHgxMDAxLAotCQkweGQ5MmEsIDB4YzYyMCwKLQkJMHhkOTJiLCAweDE0ZTUsCi0JCTB4ZDkyYywgMHhjNjIxLAotCQkweGQ5MmQsIDB4YzUzZCwKLQkJMHhkOTJlLCAweGM2MjIsCi0JCTB4ZDkyZiwgMHgzY2JlLAotCQkweGQ5MzAsIDB4YzYyMywKLQkJMHhkOTMxLCAweDQ0NTIsCi0JCTB4ZDkzMiwgMHhjNjI0LAotCQkweGQ5MzMsIDB4YzVjNSwKLQkJMHhkOTM0LCAweGM2MjUsCi0JCTB4ZDkzNSwgMHhlMDFlLAotCQkweGQ5MzYsIDB4YzYyNywKLQkJMHhkOTM3LCAweDAwMDAsCi0JCTB4ZDkzOCwgMHhjNjI4LAotCQkweGQ5MzksIDB4MDAwMCwKLQkJMHhkOTNhLCAweGM2MmMsCi0JCTB4ZDkzYiwgMHgwMDAwLAotCQkweGQ5M2MsIDB4MDAwMCwKLQkJMHhkOTNkLCAweDJiODQsCi0JCTB4ZDkzZSwgMHgzYzc0LAotCQkweGQ5M2YsIDB4NjQzNSwKLQkJMHhkOTQwLCAweGRmZjQsCi0JCTB4ZDk0MSwgMHg2NDM1LAotCQkweGQ5NDIsIDB4MjgwNiwKLQkJMHhkOTQzLCAweDMwMDYsCi0JCTB4ZDk0NCwgMHg4NTY1LAotCQkweGQ5NDUsIDB4MmIyNCwKLQkJMHhkOTQ2LCAweDNjMjQsCi0JCTB4ZDk0NywgMHg2NDM2LAotCQkweGQ5NDgsIDB4MTAwMiwKLQkJMHhkOTQ5LCAweDJiMjQsCi0JCTB4ZDk0YSwgMHgzYzI0LAotCQkweGQ5NGIsIDB4NjQzNiwKLQkJMHhkOTRjLCAweDQwNDUsCi0JCTB4ZDk0ZCwgMHg4NjU2LAotCQkweGQ5NGUsIDB4NTY2MywKLQkJMHhkOTRmLCAweDAzMDIsCi0JCTB4ZDk1MCwgMHg0MDFlLAotCQkweGQ5NTEsIDB4MTAwMiwKLQkJMHhkOTUyLCAweDI4MDcsCi0JCTB4ZDk1MywgMHgzMWE3LAotCQkweGQ5NTQsIDB4MjBjNCwKLQkJMHhkOTU1LCAweDNjMjQsCi0JCTB4ZDk1NiwgMHg2NzI0LAotCQkweGQ5NTcsIDB4MTAwMiwKLQkJMHhkOTU4LCAweDI4MDcsCi0JCTB4ZDk1OSwgMHgzMTg3LAotCQkweGQ5NWEsIDB4MjBjNCwKLQkJMHhkOTViLCAweDNjMjQsCi0JCTB4ZDk1YywgMHg2NzI0LAotCQkweGQ5NWQsIDB4MTAwMiwKLQkJMHhkOTVlLCAweDI0ZjQsCi0JCTB4ZDk1ZiwgMHgzYzY0LAotCQkweGQ5NjAsIDB4NjQzNiwKLQkJMHhkOTYxLCAweGRmZjQsCi0JCTB4ZDk2MiwgMHg2NDM2LAotCQkweGQ5NjMsIDB4MTAwMiwKLQkJMHhkOTY0LCAweDIwMDYsCi0JCTB4ZDk2NSwgMHgzZDc2LAotCQkweGQ5NjYsIDB4YzE2MSwKLQkJMHhkOTY3LCAweDYxMzQsCi0JCTB4ZDk2OCwgMHg2MTM1LAotCQkweGQ5NjksIDB4NTQ0MywKLQkJMHhkOTZhLCAweDAzMDMsCi0JCTB4ZDk2YiwgMHg2NTI0LAotCQkweGQ5NmMsIDB4MDBmYiwKLQkJMHhkOTZkLCAweDEwMDIsCi0JCTB4ZDk2ZSwgMHgyMGQ0LAotCQkweGQ5NmYsIDB4M2MyNCwKLQkJMHhkOTcwLCAweDIwMjUsCi0JCTB4ZDk3MSwgMHgzMDA1LAotCQkweGQ5NzIsIDB4NjUyNCwKLQkJMHhkOTczLCAweDEwMDIsCi0JCTB4ZDk3NCwgMHhkMDE5LAotCQkweGQ5NzUsIDB4MjEwNCwKLQkJMHhkOTc2LCAweDNjMjQsCi0JCTB4ZDk3NywgMHgyMTA1LAotCQkweGQ5NzgsIDB4MzgwNSwKLQkJMHhkOTc5LCAweDY1MjQsCi0JCTB4ZDk3YSwgMHhkZmY0LAotCQkweGQ5N2IsIDB4NDAwNSwKLQkJMHhkOTdjLCAweDY1MjQsCi0JCTB4ZDk3ZCwgMHgyZThkLAotCQkweGQ5N2UsIDB4MzAzZCwKLQkJMHhkOTdmLCAweDI0MDgsCi0JCTB4ZDk4MCwgMHgzNWQ4LAotCQkweGQ5ODEsIDB4NWRkMywKLQkJMHhkOTgyLCAweDAzMDcsCi0JCTB4ZDk4MywgMHg4ODg3LAotCQkweGQ5ODQsIDB4NjNhNywKLQkJMHhkOTg1LCAweDg4ODcsCi0JCTB4ZDk4NiwgMHg2M2E3LAotCQkweGQ5ODcsIDB4ZGZmZCwKLQkJMHhkOTg4LCAweDAwZjksCi0JCTB4ZDk4OSwgMHgxMDAyLAotCQkweGQ5OGEsIDB4MDAwMCwKLQl9OwogCWludCBpLCBlcnI7CiAKIAkvKiBzZXQgdUMgY2xvY2sgYW5kIGFjdGl2YXRlIGl0ICovCkBAIC0xNjEyLDEwICs1ODEsMTYgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JLyogd3JpdGUgVFdJTkFYIEVEQyBmaXJtd2FyZSBpbnRvIFBIWSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHR3aW5heF9lZGMpICYmICFlcnI7IGkgKz0gMikKLQkJZXJyID0gdDNfbWRpb193cml0ZShwaHksIE1ESU9fTU1EX1BNQVBNRCwgdHdpbmF4X2VkY1tpXSwKLQkJCQkgICAgdHdpbmF4X2VkY1tpICsgMV0pOworCWlmIChwaHktPnByaXYgIT0gZWRjX3R3aW5heCkKKwkJZXJyID0gdDNfZ2V0X2VkY19mdyhwaHksIEVEQ19UV1hfQUVMMjAyMCwKKwkJCQkgICAgRURDX1RXWF9BRUwyMDIwX1NJWkUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgIEVEQ19UV1hfQUVMMjAyMF9TSVpFIC8gc2l6ZW9mKHUxNikgJiYgIWVycjsgaSArPSAyKQorCQllcnIgPSB0M19tZGlvX3dyaXRlKHBoeSwgTURJT19NTURfUE1BUE1ELAorCQkJCSAgICBwaHktPnBoeV9jYWNoZVtpXSwKKwkJCQkgICAgcGh5LT5waHlfY2FjaGVbaSArIDFdKTsKIAkvKiBhY3RpdmF0ZSB1QyAqLwogCWVyciA9IHNldF9waHlfcmVncyhwaHksIHVDYWN0aXZhdGUpOwogCWlmICghZXJyKQpAQCAtMTY0OSw5ICs2MjQsMzkgQEAKICAqLwogc3RhdGljIGludCBhZWwyMDIwX2ludHJfZW5hYmxlKHN0cnVjdCBjcGh5ICpwaHkpCiB7Ci0JaW50IGVyciA9IHQzX21kaW9fd3JpdGUocGh5LCBNRElPX01NRF9QTUFQTUQsIEFFTDIwMjBfR1BJT19DVFJMLAotCQkJCTB4MiA8PCAoQUVMMjAyMF9HUElPX01PRERFVCo0KSk7Ci0JcmV0dXJuIGVyciA/IGVyciA6IHQzX3BoeV9sYXNpX2ludHJfZW5hYmxlKHBoeSk7CisJc3RydWN0IHJlZ192YWwgcmVnc1tdID0geworCQkvKiBvdXRwdXQgTW9kdWxlJ3MgTG9zcyBPZiBTaWduYWwgKExPUykgdG8gTEVEICovCisJCXsgTURJT19NTURfUE1BUE1ELCBBRUwyMDIwX0dQSU9fQ0ZHK0FFTDIwMjBfR1BJT19MU1RBVCwKKwkJCTB4ZmZmZiwgMHg0IH0sCisJCXsgTURJT19NTURfUE1BUE1ELCBBRUwyMDIwX0dQSU9fQ1RSTCwKKwkJCTB4ZmZmZiwgMHg4IDw8IChBRUwyMDIwX0dQSU9fTFNUQVQqNCkgfSwKKworCQkgLyogZW5hYmxlIG1vZHVsZSBkZXRlY3Qgc3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHRzICovCisJCXsgTURJT19NTURfUE1BUE1ELCBBRUwyMDIwX0dQSU9fQ1RSTCwKKwkJCTB4ZmZmZiwgMHgyIDw8IChBRUwyMDIwX0dQSU9fTU9EREVUKjQpIH0sCisKKwkJLyogZW5kICovCisJCXsgMCwgMCwgMCwgMCB9CisJfTsKKwlpbnQgZXJyLCBsaW5rX29rID0gMDsKKworCS8qIHNldCB1cCAibGluayBzdGF0dXMiIExFRCBhbmQgZW5hYmxlIG1vZHVsZSBjaGFuZ2UgaW50ZXJydXB0cyAqLworCWVyciA9IHNldF9waHlfcmVncyhwaHksIHJlZ3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBnZXRfbGlua19zdGF0dXNfcihwaHksICZsaW5rX29rLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChsaW5rX29rKQorCQl0M19saW5rX2NoYW5nZWQocGh5LT5hZGFwdGVyLAorCQkJCXBoeTJwb3J0aWQocGh5KSk7CisKKwllcnIgPSB0M19waHlfbGFzaV9pbnRyX2VuYWJsZShwaHkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTE2NTksOSArNjY0LDI2IEBACiAgKi8KIHN0YXRpYyBpbnQgYWVsMjAyMF9pbnRyX2Rpc2FibGUoc3RydWN0IGNwaHkgKnBoeSkKIHsKLQlpbnQgZXJyID0gdDNfbWRpb193cml0ZShwaHksIE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NUUkwsCi0JCQkJMHgxIDw8IChBRUwyMDIwX0dQSU9fTU9EREVUKjQpKTsKLQlyZXR1cm4gZXJyID8gZXJyIDogdDNfcGh5X2xhc2lfaW50cl9kaXNhYmxlKHBoeSk7CisJc3RydWN0IHJlZ192YWwgcmVnc1tdID0geworCQkvKiByZXNldCAibGluayBzdGF0dXMiIExFRCB0byAib2ZmIiAqLworCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NUUkwsCisJCQkweGZmZmYsIDB4YiA8PCAoQUVMMjAyMF9HUElPX0xTVEFUKjQpIH0sCisKKwkJLyogZGlzYWJsZSBtb2R1bGUgZGV0ZWN0IHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0cyAqLworCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NUUkwsCisJCQkweGZmZmYsIDB4MSA8PCAoQUVMMjAyMF9HUElPX01PRERFVCo0KSB9LAorCisJCS8qIGVuZCAqLworCQl7IDAsIDAsIDAsIDAgfQorCX07CisJaW50IGVycjsKKworCS8qIHR1cm4gb2ZmICJsaW5rIHN0YXR1cyIgTEVEIGFuZCBkaXNhYmxlIG1vZHVsZSBjaGFuZ2UgaW50ZXJydXB0cyAqLworCWVyciA9IHNldF9waHlfcmVncyhwaHksIHJlZ3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gdDNfcGh5X2xhc2lfaW50cl9kaXNhYmxlKHBoeSk7CiB9CiAKIC8qCkBAIC0xNjc5LDMxICs3MDEsMjYgQEAKIAlyZXR1cm4gZXJyID8gZXJyIDogdDNfcGh5X2xhc2lfaW50cl9jbGVhcihwaHkpOwogfQogCitzdGF0aWMgc3RydWN0IHJlZ192YWwgYWVsMjAyMF9yZXNldF9yZWdzW10gPSB7CisJLyogRXJyYXR1bSAjMjogQ0RSTE9MIGFzc2VydGVkLCBjYXVzaW5nIFBNQSBsaW5rIGRvd24gc3RhdHVzICovCisJeyBNRElPX01NRF9QTUFQTUQsIDB4YzAwMywgMHhmZmZmLCAweDMxMDEgfSwKKworCS8qIGZvcmNlIFhBVUkgdG8gc2VuZCBMRiB3aGVuIFJYX0xPUyBpcyBhc3NlcnRlZCAqLworCXsgTURJT19NTURfUE1BUE1ELCAweGNkNDAsIDB4ZmZmZiwgMHgwMDAxIH0sCisKKwkvKiBhbGxvdyB3cml0ZXMgdG8gdHJhbnNjZWl2ZXIgbW9kdWxlIEVFUFJPTSBvbiBpMmMgYnVzICovCisJeyBNRElPX01NRF9QTUFQTUQsIDB4ZmYwMiwgMHhmZmZmLCAweDAwMjMgfSwKKwl7IE1ESU9fTU1EX1BNQVBNRCwgMHhmZjAzLCAweGZmZmYsIDB4MDAwMCB9LAorCXsgTURJT19NTURfUE1BUE1ELCAweGZmMDQsIDB4ZmZmZiwgMHgwMDAwIH0sCisKKwkvKiBlbmQgKi8KKwl7IDAsIDAsIDAsIDAgfQorfTsKIC8qCiAgKiBSZXNldCB0aGUgUEhZIGFuZCBwdXQgaXQgaW50byBhIGNhbm9uaWNhbCBvcGVyYXRpbmcgc3RhdGUuCiAgKi8KIHN0YXRpYyBpbnQgYWVsMjAyMF9yZXNldChzdHJ1Y3QgY3BoeSAqcGh5LCBpbnQgd2FpdCkKIHsKLQlzdGF0aWMgc3RydWN0IHJlZ192YWwgcmVnczBbXSA9IHsKLQkJLyogRXJyYXR1bSAjMjogQ0RSTE9MIGFzc2VydGVkLCBjYXVzaW5nIFBNQSBsaW5rIGRvd24gc3RhdHVzICovCi0JCXsgTURJT19NTURfUE1BUE1ELCAweGMwMDMsIDB4ZmZmZiwgMHgzMTAxIH0sCi0KLQkJLyogZm9yY2UgWEFVSSB0byBzZW5kIExGIHdoZW4gUlhfTE9TIGlzIGFzc2VydGVkICovCi0JCXsgTURJT19NTURfUE1BUE1ELCAweGNkNDAsIDB4ZmZmZiwgMHgwMDAxIH0sCi0KLQkJLyogUlhfTE9TIHBpbiBpcyBhY3RpdmUgaGlnaCAqLwotCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMX09QVF9TRVRUSU5HUywKLQkJCTB4MDAyMCwgMHgwMDIwIH0sCi0KLQkJLyogb3V0cHV0IE1vZHVsZSdzIExvc3MgT2YgU2lnbmFsIChMT1MpIHRvIExFRCAqLwotCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NGRytBRUwyMDIwX0dQSU9fTFNUQVQsCi0JCQkweGZmZmYsIDB4MDAwNCB9LAotCQl7IE1ESU9fTU1EX1BNQVBNRCwgQUVMMjAyMF9HUElPX0NUUkwsCi0JCQkweGZmZmYsIDB4OCA8PCAoQUVMMjAyMF9HUElPX0xTVEFUKjQpIH0sCi0KLQkJLyogZW5kICovCi0JCXsgMCwgMCwgMCwgMCB9Ci0JfTsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBsYXNpX2N0cmw7CiAKQEAgLTE3MjAsNyArNzM3LDcgQEAKIAogCS8qIGJhc2ljIGluaXRpYWxpemF0aW9uIGZvciBhbGwgbW9kdWxlIHR5cGVzICovCiAJcGh5LT5wcml2ID0gZWRjX25vbmU7Ci0JZXJyID0gc2V0X3BoeV9yZWdzKHBoeSwgcmVnczApOworCWVyciA9IHNldF9waHlfcmVncyhwaHksIGFlbDIwMjBfcmVzZXRfcmVncyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMTc5OCwxMCArODE1LDE2IEBACiBpbnQgdDNfYWVsMjAyMF9waHlfcHJlcChzdHJ1Y3QgY3BoeSAqcGh5LCBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBoeV9hZGRyLAogCQkJY29uc3Qgc3RydWN0IG1kaW9fb3BzICptZGlvX29wcykKIHsKKwlpbnQgZXJyOworCiAJY3BoeV9pbml0KHBoeSwgYWRhcHRlciwgcGh5X2FkZHIsICZhZWwyMDIwX29wcywgbWRpb19vcHMsCiAJCSAgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9BVUkgfCBTVVBQT1JURURfRklCUkUgfAogCQkgIFNVUFBPUlRFRF9JUlEsICIxMEdCQVNFLVIiKTsKIAltc2xlZXAoMTI1KTsKKworCWVyciA9IHNldF9waHlfcmVncyhwaHksIGFlbDIwMjBfcmVzZXRfcmVncyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg0MCw3ICs4NjMsNyBAQAogCS5pbnRyX2NsZWFyID0gdDNfcGh5X2xhc2lfaW50cl9jbGVhciwKIAkuaW50cl9oYW5kbGVyID0gdDNfcGh5X2xhc2lfaW50cl9oYW5kbGVyLAogCS5nZXRfbGlua19zdGF0dXMgPSBnZXRfbGlua19zdGF0dXNfeCwKLQkucG93ZXJfZG93biA9IGFlbDEwMDZfcG93ZXJfZG93biwKKwkucG93ZXJfZG93biA9IGFlbDEwMDJfcG93ZXJfZG93biwKIAkubW1kcyA9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfUENTIHwgTURJT19ERVZTX1BIWVhTLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvYXExMDB4LmMgYi9kcml2ZXJzL25ldC9jeGdiMy9hcTEwMHguYwppbmRleCBiMWZkNWJmLi4zNDFiN2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9hcTEwMHguYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9hcTEwMHguYwpAQCAtMjcxLDcgKzI3MSw4IEBACiAKIAljcGh5X2luaXQocGh5LCBhZGFwdGVyLCBwaHlfYWRkciwgJmFxMTAweF9vcHMsIG1kaW9fb3BzLAogCQkgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAotCQkgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0FVSSwgIjEwMDAvMTBHQkFTRS1UIik7CisJCSAgU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfQVVJLAorCQkgICIxMDAwLzEwR0JBU0UtVCIpOwogCiAJLyoKIAkgKiBUaGUgUEhZIGhhcyBiZWVuIG91dCBvZiByZXNldCBldmVyIHNpbmNlIHRoZSBzeXN0ZW0gcG93ZXJlZCB1cC4gIFNvCkBAIC0zMTYsMTEgKzMxNyw5IEBACiAKIAkvKiBGaXJtd2FyZSB2ZXJzaW9uIGNoZWNrLiAqLwogCXQzX21kaW9fcmVhZChwaHksIE1ESU9fTU1EX1ZFTkQxLCBBUV9GV19WRVJTSU9OLCAmdik7Ci0JaWYgKHYgIT0gMzApIHsKKwlpZiAodiAhPSAxMDEpCiAJCUNIX1dBUk4oYWRhcHRlciwgIlBIWSVkOiB1bnN1cHBvcnRlZCBmaXJtd2FyZSAlZFxuIiwKIAkJCXBoeV9hZGRyLCB2KTsKLQkJcmV0dXJuIDA7IC8qIGFsbG93IHQzX3ByZXBfYWRhcHRlciB0byBzdWNjZWVkICovCi0JfQogCiAJLyoKIAkgKiBUaGUgUEhZIHNob3VsZCBzdGFydCBpbiByZWFsbHktbG93LXBvd2VyIG1vZGUuICBQcmVwYXJlIGl0IGZvciBub3JtYWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggZDIxYjcwNS4uMWIyYzMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTU2Niw2ICs1NjYsMTUgQEAKIAogCXUzMiBtbWRzOwogfTsKK2VudW0geworCUVEQ19PUFRfQUVMMjAwNSA9IDAsCisJRURDX09QVF9BRUwyMDA1X1NJWkUgPSAxMDg0LAorCUVEQ19UV1hfQUVMMjAwNSA9IDEsCisJRURDX1RXWF9BRUwyMDA1X1NJWkUgPSAxNDY0LAorCUVEQ19UV1hfQUVMMjAyMCA9IDIsCisJRURDX1RXWF9BRUwyMDIwX1NJWkUgPSAxNjI4LAorCUVEQ19NQVhfU0laRSA9IEVEQ19UV1hfQUVMMjAyMF9TSVpFLCAvKiBNYXggY2FjaGUgc2l6ZSAqLworfTsKIAogLyogQSBQSFkgaW5zdGFuY2UgKi8KIHN0cnVjdCBjcGh5IHsKQEAgLTU3Nyw2ICs1ODYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmlmb19lcnJvcnM7CS8qIEZJRk8gb3Zlci91bmRlci1mbG93cyAqLwogCWNvbnN0IHN0cnVjdCBjcGh5X29wcyAqb3BzOwkvKiBQSFkgb3BlcmF0aW9ucyAqLwogCXN0cnVjdCBtZGlvX2lmX2luZm8gbWRpbzsKKwl1MTYgcGh5X2NhY2hlW0VEQ19NQVhfU0laRV07CS8qIEVEQyBjYWNoZSAqLwogfTsKIAogLyogQ29udmVuaWVuY2UgTURJTyByZWFkL3dyaXRlIHdyYXBwZXJzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKaW5kZXggYzk3YWI4Mi4uMzRlNzc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtMTcyLDYgKzE3MiwyMyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZW5hYmxlX3R4X2ZpZm9fZHJhaW4oc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCBwb3J0X2luZm8gKnBpKQoreworCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwgQV9YR01fVFhGSUZPX0NGRyArIHBpLT5tYWMub2Zmc2V0LCAwLAorCQkJIEZfRU5EUk9QUEtUKTsKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fUlhfQ1RSTCArIHBpLT5tYWMub2Zmc2V0LCAwKTsKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fVFhfQ1RSTCArIHBpLT5tYWMub2Zmc2V0LCBGX1RYRU4pOworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9SWF9DVFJMICsgcGktPm1hYy5vZmZzZXQsIEZfUlhFTik7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfdHhfZmlmb19kcmFpbihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHN0cnVjdCBwb3J0X2luZm8gKnBpKQoreworCXQzX3NldF9yZWdfZmllbGQoYWRhcHRlciwgQV9YR01fVFhGSUZPX0NGRyArIHBpLT5tYWMub2Zmc2V0LAorCQkJIEZfRU5EUk9QUEtULCAwKTsKK30KKwogdm9pZCB0M19vc19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCwgaW50IHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwLT5wb3J0W3BvcnRfaWRdOwpAQCAtMTg1LDYgKzIwMiw4IEBACiAKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCisJCWRpc2FibGVfdHhfZmlmb19kcmFpbihhZGFwLCBwaSk7CisKIAkJLyogQ2xlYXIgbG9jYWwgZmF1bHRzICovCiAJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcCwgcGktPnBvcnRfaWQpOwogCQl0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9JTlRfU1RBVFVTICsKQEAgLTIwMCw5ICsyMTksMTIgQEAKIAkJdDNfeGdtX2ludHJfZW5hYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKIAogCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9UWCk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAorCQkvKiBGbHVzaCBUWCBGSUZPICovCisJCWVuYWJsZV90eF9maWZvX2RyYWluKGFkYXAsIHBpKTsKKwl9CiAJbGlua19yZXBvcnQoZGV2KTsKIH0KIApAQCAtMjMyLDYgKzI1NCw4IEBACiAKIAlpZiAobGlua19zdGF0ICE9IG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlpZiAobGlua19zdGF0KSB7CisJCQlkaXNhYmxlX3R4X2ZpZm9fZHJhaW4oYWRhcHRlciwgcGkpOworCiAJCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CiAKIAkJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLwpAQCAtMjYzLDYgKzI4Nyw5IEBACiAJCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcGktPm1hYy5vZmZzZXQpOwogCQkJdDNfbWFjX2Rpc2FibGUobWFjLCBNQUNfRElSRUNUSU9OX1JYKTsKIAkJCXQzX2xpbmtfc3RhcnQoJnBpLT5waHksIG1hYywgJnBpLT5saW5rX2NvbmZpZyk7CisKKwkJCS8qIEZsdXNoIFRYIEZJRk8gKi8KKwkJCWVuYWJsZV90eF9maWZvX2RyYWluKGFkYXB0ZXIsIHBpKTsKIAkJfQogCiAJCWxpbmtfcmVwb3J0KGRldik7CkBAIC00NDMsNiArNDcwLDcgQEAKIAkJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKIAkJcmVxLT53ci53cl9oaSA9IGh0b25sKFZfV1JfT1AoRldfV1JPUENPREVfRk9SV0FSRCkpOwogCQlPUENPREVfVElEKHJlcSkgPSBodG9ubChNS19PUENPREVfVElEKENQTF9TTVRfV1JJVEVfUkVRLCBpKSk7CisJCXJlcS0+bXR1X2lkeCA9IE5NVFVTIC0gMTsKIAkJcmVxLT5pZmYgPSBpOwogCQl0M19tZ210X3R4KGFkYXAsIHNrYik7CiAJCWlmIChza2IgPT0gYWRhcC0+bm9mYWlsX3NrYikgewpAQCAtOTYzLDYgKzk5MSw3NSBAQAogCiAjZGVmaW5lIEZXX0ZOQU1FICJjeGdiMy90M2Z3LSVkLiVkLiVkLmJpbiIKICNkZWZpbmUgVFBTUkFNX05BTUUgImN4Z2IzL3QzJWNfcHNyYW0tJWQuJWQuJWQuYmluIgorI2RlZmluZSBBRUwyMDA1X09QVF9FRENfTkFNRSAiY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbiIKKyNkZWZpbmUgQUVMMjAwNV9UV1hfRURDX05BTUUgImN4Z2IzL2FlbDIwMDVfdHd4X2VkYy5iaW4iCisjZGVmaW5lIEFFTDIwMjBfVFdYX0VEQ19OQU1FICJjeGdiMy9hZWwyMDIwX3R3eF9lZGMuYmluIgorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmdldF9lZGNfZndfbmFtZShpbnQgZWRjX2lkeCkKK3sKKwljb25zdCBjaGFyICpmd19uYW1lID0gTlVMTDsKKworCXN3aXRjaCAoZWRjX2lkeCkgeworCWNhc2UgRURDX09QVF9BRUwyMDA1OgorCQlmd19uYW1lID0gQUVMMjAwNV9PUFRfRURDX05BTUU7CisJCWJyZWFrOworCWNhc2UgRURDX1RXWF9BRUwyMDA1OgorCQlmd19uYW1lID0gQUVMMjAwNV9UV1hfRURDX05BTUU7CisJCWJyZWFrOworCWNhc2UgRURDX1RXWF9BRUwyMDIwOgorCQlmd19uYW1lID0gQUVMMjAyMF9UV1hfRURDX05BTUU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZndfbmFtZTsKK30KKworaW50IHQzX2dldF9lZGNfZncoc3RydWN0IGNwaHkgKnBoeSwgaW50IGVkY19pZHgsIGludCBzaXplKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGh5LT5hZGFwdGVyOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY2hhciBidWZbNjRdOworCXUzMiBjc3VtOworCWNvbnN0IF9fYmUzMiAqcDsKKwl1MTYgKmNhY2hlID0gcGh5LT5waHlfY2FjaGU7CisJaW50IGksIHJldDsKKworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGdldF9lZGNfZndfbmFtZShlZGNfaWR4KSk7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgYnVmLCAmYWRhcHRlci0+cGRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiY291bGQgbm90IHVwZ3JhZGUgZmlybXdhcmU6IHVuYWJsZSB0byBsb2FkICVzXG4iLAorCQkJYnVmKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBjaGVjayBzaXplLCB0YWtlIGNoZWNrc3VtIGluIGFjY291bnQgKi8KKwlpZiAoZnctPnNpemUgPiBzaXplICsgNCkgeworCQlDSF9FUlIoYWRhcHRlciwgImZpcm13YXJlIGltYWdlIHRvbyBsYXJnZSAldSwgZXhwZWN0ZWQgJWRcbiIsCisJCSAgICAgICAodW5zaWduZWQgaW50KWZ3LT5zaXplLCBzaXplICsgNCk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJLyogY29tcHV0ZSBjaGVja3N1bSAqLworCXAgPSAoY29uc3QgX19iZTMyICopZnctPmRhdGE7CisJZm9yIChjc3VtID0gMCwgaSA9IDA7IGkgPCBmdy0+c2l6ZSAvIHNpemVvZihjc3VtKTsgaSsrKQorCQljc3VtICs9IG50b2hsKHBbaV0pOworCisJaWYgKGNzdW0gIT0gMHhmZmZmZmZmZikgeworCQlDSF9FUlIoYWRhcHRlciwgImNvcnJ1cHRlZCBmaXJtd2FyZSBpbWFnZSwgY2hlY2tzdW0gJXVcbiIsCisJCSAgICAgICBjc3VtKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIDQgOyBpKyspIHsKKwkJKmNhY2hlKysgPSAoYmUzMl90b19jcHUocFtpXSkgJiAweGZmZmYwMDAwKSA+PiAxNjsKKwkJKmNhY2hlKysgPSBiZTMyX3RvX2NwdShwW2ldKSAmIDB4ZmZmZjsKKwl9CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyBpbnQgdXBncmFkZV9mdyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKaW5kZXggMjljNzllYi4uZjg2NjEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMKQEAgLTEyMTYsNyArMTIxNiw3IEBACiAgKgogICoJQWRkIGEgcGFja2V0IHRvIGFuIFNHRSBUeCBxdWV1ZS4gIFJ1bnMgd2l0aCBzb2Z0aXJxcyBkaXNhYmxlZC4KICAqLwotaW50IHQzX2V0aF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCB0M19ldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBxaWR4OwogCXVuc2lnbmVkIGludCBuZGVzYywgcGlkeCwgY3JlZGl0cywgZ2VuLCBjb21wbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCmluZGV4IDg3MGQ0NDkuLjAzMmNmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwpAQCAtMzQ2NSw3ICszNDY1LDcgQEAKIAkJezIwMSwgMzIxLCAyNTgsIDQ1MCwgODM0LCAxNjAyfQogCX07CiAKLQl1MTYgdmFsOworCXUxNiB2YWwsIGRldmlkOwogCXVuc2lnbmVkIGludCBsb2cyX3dpZHRoLCBwbGRzaXplOwogCXVuc2lnbmVkIGludCBmc3RfdHJuX3J4LCBmc3RfdHJuX3R4LCBhY2tsYXQsIHJwbGxtdDsKIApAQCAtMzQ3Myw2ICszNDczLDE3IEBACiAJCQkgICAgIGFkYXAtPnBhcmFtcy5wY2kucGNpZV9jYXBfYWRkciArIFBDSV9FWFBfREVWQ1RMLAogCQkJICAgICAmdmFsKTsKIAlwbGRzaXplID0gKHZhbCAmIFBDSV9FWFBfREVWQ1RMX1BBWUxPQUQpID4+IDU7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwLT5wZGV2LCAweDIsICZkZXZpZCk7CisJaWYgKGRldmlkID09IDB4MzcpIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkYXAtPnBkZXYsCisJCQkJICAgICAgYWRhcC0+cGFyYW1zLnBjaS5wY2llX2NhcF9hZGRyICsKKwkJCQkgICAgICBQQ0lfRVhQX0RFVkNUTCwKKwkJCQkgICAgICB2YWwgJiB+UENJX0VYUF9ERVZDVExfUkVBRFJRICYKKwkJCQkgICAgICB+UENJX0VYUF9ERVZDVExfUEFZTE9BRCk7CisJCXBsZHNpemUgPSAwOworCX0KKwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXAtPnBkZXYsCiAJCQkgICAgIGFkYXAtPnBhcmFtcy5wY2kucGNpZV9jYXBfYWRkciArIFBDSV9FWFBfTE5LQ1RMLAogCQkJICAgICAmdmFsKTsKQEAgLTM2ODEsNyArMzY5MiwxMyBAQAogCiB2b2lkIG1hY19wcmVwKHN0cnVjdCBjbWFjICptYWMsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaW5kZXgpCiB7CisJdTE2IGRldmlkOworCiAJbWFjLT5hZGFwdGVyID0gYWRhcHRlcjsKKwlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCAweDIsICZkZXZpZCk7CisKKwlpZiAoZGV2aWQgPT0gMHgzNyAmJiAhYWRhcHRlci0+cGFyYW1zLnZwZC54YXVpY2ZnWzFdKQorCQlpbmRleCA9IDA7CiAJbWFjLT5vZmZzZXQgPSAoWEdNQUMwXzFfQkFTRV9BRERSIC0gWEdNQUMwXzBfQkFTRV9BRERSKSAqIGluZGV4OwogCW1hYy0+bnVjYXN0ID0gMTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKaW5kZXggZjg3Zjk0My4uMDEwOWVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCkBAIC00NDcsMTEgKzQ0NywxMiBAQAogCiAJdmFsID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUlhGSUZPX0NGRyArIG9mdCk7CiAJdmFsICY9IH5WX1JYRklGT1BBVVNFSFdNKE1fUlhGSUZPUEFVU0VIV00pOwotCWlmIChmYyAmIFBBVVNFX1RYKQotCQl2YWwgfD0gVl9SWEZJRk9QQVVTRUhXTShyeF9maWZvX2h3bSgKLQkJCQkJCXQzX3JlYWRfcmVnKGFkYXAsCi0JCQkJCQlBX1hHTV9SWF9NQVhfUEtUX1NJWkUKLQkJCQkJCSsgb2Z0KSkgLyA4KTsKKwlpZiAoZmMgJiBQQVVTRV9UWCkgeworCQl1MzIgcnhfbWF4X3BrdF9zaXplID0KKwkJICAgIEdfUlhNQVhQS1RTSVpFKHQzX3JlYWRfcmVnKGFkYXAsCisJCQkJCSAgICAgICBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBvZnQpKTsKKwkJdmFsIHw9IFZfUlhGSUZPUEFVU0VIV00ocnhfZmlmb19od20ocnhfbWF4X3BrdF9zaXplKSAvIDgpOworCX0KIAl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhGSUZPX0NGRyArIG9mdCwgdmFsKTsKIAogCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9YR01fVFhfQ0ZHICsgb2Z0LCBGX1RYUEFVU0VFTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggMTJmZDQ0Ni4uZDQ2NWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTE5MjAsNyArMTkyMCw2IEBACiAJc2tiX3B1dChwX3NrYiwgbmV0X3BrdF9saXN0LT5wa3RfbGVuZ3RoKTsKIAlFTUFDX0NBQ0hFX0lOVkFMSURBVEUoKHVuc2lnbmVkIGxvbmcpcF9za2ItPmRhdGEsIHBfc2tiLT5sZW4pOwogCXBfc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHBfc2tiLCBwcml2LT5uZGV2KTsKLQlwX3NrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAluZXRpZl9yZWNlaXZlX3NrYihwX3NrYik7CiAJcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9ieXRlcyArPSBuZXRfcGt0X2xpc3QtPnBrdF9sZW5ndGg7CiAJcHJpdi0+bmV0X2Rldl9zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0yODE3LDcgKzI4MTYsNyBAQAogewogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRhdmluY2lfZW1hY19kcml2ZXIpOwogfQotbW9kdWxlX2luaXQoZGF2aW5jaV9lbWFjX2luaXQpOworbGF0ZV9pbml0Y2FsbChkYXZpbmNpX2VtYWNfaW5pdCk7CiAKIC8qKgogICogZGF2aW5jaV9lbWFjX2V4aXQ6IEVNQUMgZHJpdmVyIG1vZHVsZSBleGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZTYwMC5jIGIvZHJpdmVycy9uZXQvZGU2MDAuYwppbmRleCBlMWFmMDg5Li42YjEzZjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZTYwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlNjAwLmMKQEAgLTIyNiw3ICsyMjYsNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZTYwMF9sb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZTYyMC5jIGIvZHJpdmVycy9uZXQvZGU2MjAuYwppbmRleCA1NWQyYmI2Li40NTc5NGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZTYyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlNjIwLmMKQEAgLTU0Miw3ICs1NDIsNyBAQAogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlNjIwX2xvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKaW5kZXggMmIyMmU1OC4uYTMxNjk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVjbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCkBAIC05MDIsNyArOTAyLDcgQEAKIAogCWlmIChsZW4gPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW4gPSBFVEhfWkxFTjsKIAl9CiAKQEAgLTkzMyw3ICs5MzMsNyBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotIAlyZXR1cm4gMDsKKyAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbGFuY2VfbG9hZF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlZnh4LmMgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCmluZGV4IDEwMmI4ZDQuLjZhNmVhMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlZnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZGVmeHguYwpAQCAtMzAwLDcgKzMwMCw4IEBACiBzdGF0aWMgdm9pZAkJZGZ4X3Jjdl9xdWV1ZV9wcm9jZXNzKERGWF9ib2FyZF90ICpicCk7CiBzdGF0aWMgdm9pZAkJZGZ4X3Jjdl9mbHVzaChERlhfYm9hcmRfdCAqYnApOwogCi1zdGF0aWMgaW50CQlkZnhfeG10X3F1ZXVlX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBkZnhfeG10X3F1ZXVlX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50CQlkZnhfeG10X2RvbmUoREZYX2JvYXJkX3QgKmJwKTsKIHN0YXRpYyB2b2lkCQlkZnhfeG10X2ZsdXNoKERGWF9ib2FyZF90ICpicCk7CiAKQEAgLTMxODgsMTEgKzMxODksOCBAQAogICogICBOb25lCiAgKi8KIAotc3RhdGljIGludCBkZnhfeG10X3F1ZXVlX3BrdCgKLQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiLAotCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXYKLQkpCi0KK3N0YXRpYyBuZXRkZXZfdHhfdCBkZnhfeG10X3F1ZXVlX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAl7CiAJREZYX2JvYXJkX3QJCSpicCA9IG5ldGRldl9wcml2KGRldik7CiAJdTgJCQlwcm9kOwkJCQkvKiBsb2NhbCB0cmFuc21pdCBwcm9kdWNlciBpbmRleCAqLwpAQCAtMzIxOCw3ICszMjE2LDcgQEAKIAkJYnAtPnhtdF9sZW5ndGhfZXJyb3JzKys7CQkvKiBidW1wIGVycm9yIGNvdW50ZXIgKi8KIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybigwKTsJCQkJLyogcmV0dXJuICJzdWNjZXNzIiAqLworCQlyZXR1cm4gTkVUREVWX1RYX09LOwkJCS8qIHJldHVybiAic3VjY2VzcyIgKi8KIAl9CiAJLyoKIAkgKiBTZWUgaWYgYWRhcHRlciBsaW5rIGlzIGF2YWlsYWJsZSwgaWYgbm90LCBmcmVlIGJ1ZmZlcgpAQCAtMzI0MSw3ICszMjM5LDcgQEAKIAkJCWJwLT54bXRfZGlzY2FyZHMrKzsJCQkJCS8qIGJ1bXAgZXJyb3IgY291bnRlciAqLwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwkJLyogZnJlZSBza19idWZmIG5vdyAqLwogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJcmV0dXJuKDApOwkJCQkJCQkvKiByZXR1cm4gInN1Y2Nlc3MiICovCisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwkJLyogcmV0dXJuICJzdWNjZXNzIiAqLwogCQkJfQogCQl9CiAKQEAgLTMzNDUsNyArMzM0Myw3IEBACiAJZGZ4X3BvcnRfd3JpdGVfbG9uZyhicCwgUElfUERRX0tfUkVHX1RZUEVfMl9QUk9ELCBicC0+cmN2X3htdF9yZWcubHdvcmQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCXJldHVybigwKTsJCQkJCQkJLyogcGFja2V0IHF1ZXVlZCB0byBhZGFwdGVyICovCisJcmV0dXJuIE5FVERFVl9UWF9PSzsJLyogcGFja2V0IHF1ZXVlZCB0byBhZGFwdGVyICovCiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IDk3ZWEyZDYuLjk2ODZjMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtNTE2LDcgKzUxNiw4IEBACiAqKiBQdWJsaWMgRnVuY3Rpb25zCiAqLwogc3RhdGljIGludCBkZXBjYV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBkZXBjYV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGRlcGNhX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZGVwY2FfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGRlcGNhX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBkZXBjYV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKQEAgLTkyOCw3ICs5MjksOCBAQAogLyoKICoqIFdyaXRlcyBhIHNvY2tldCBidWZmZXIgdG8gVFggZGVzY3JpcHRvciByaW5nIGFuZCBzdGFydHMgdHJhbnNtaXNzaW9uCiAqLwotc3RhdGljIGludCBkZXBjYV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZGVwY2Ffc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXBjYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdV9sb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMTc5Myw3ICsxNzk1LDcgQEAKIHN0YXRpYyBpbnQgbG9hZF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZGVwY2FfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpLCBlbnRyeSwgZW5kLCBsZW4sIHN0YXR1cyA9IDA7CisJaW50IGksIGVudHJ5LCBlbmQsIGxlbiwgc3RhdHVzID0gTkVUREVWX1RYX09LOwogCiAJZW50cnkgPSBscC0+dHhfbmV3OwkvKiBSaW5nIGFyb3VuZCBidWZmZXIgbnVtYmVyLiAqLwogCWVuZCA9IChlbnRyeSArIChza2ItPmxlbiAtIDEpIC8gVFhfQlVGRl9TWikgJiBscC0+dHhSaW5nTWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCA0YjZhMjE5Li43ZmE3YTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgdm9pZCByaW9fdGltZXIgKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCByaW9fdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhbGxvY19saXN0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcmlvX2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyB2b2lkIHJpb19mcmVlX3R4IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaXJxKTsKIHN0YXRpYyB2b2lkIHR4X2Vycm9yIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdHhfc3RhdHVzKTsKQEAgLTYwMCw3ICs2MDAsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBzdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBkZDc3MWRlLi4zMWI4YmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtOTIsNiArOTIsNyBAQAogCXUxNgkJdHhfcGt0X2NudDsKIAl1MTYJCXF1ZXVlX3BrdF9sZW47CiAJdTE2CQlxdWV1ZV9zdGFydF9hZGRyOworCXUxNgkJcXVldWVfaXBfc3VtbWVkOwogCXUxNgkJZGJ1Z19jbnQ7CiAJdTgJCWlvX21vZGU7CQkvKiAwOndvcmQsIDI6Ynl0ZSAqLwogCXU4CQlwaHlfYWRkcjsKQEAgLTEyNCw2ICsxMjUsMTAgQEAKIAogCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWk7CiAJdTMyCQltc2dfZW5hYmxlOworCisJaW50CQlyeF9jc3VtOworCWludAkJY2FuX2NzdW07CisJaW50CQlpcF9zdW1tZWQ7CiB9IGJvYXJkX2luZm9fdDsKIAogLyogZGVidWcgY29kZSAqLwpAQCAtNDYwLDYgKzQ2NSw0MCBAQAogCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZkbS0+bWlpKTsKIH0KIAorc3RhdGljIHVpbnQzMl90IGRtOTAwMF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKKwlyZXR1cm4gZG0tPnJ4X2NzdW07Cit9CisKK3N0YXRpYyBpbnQgZG05MDAwX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVpbnQzMl90IGRhdGEpCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZG0tPmNhbl9jc3VtKSB7CisJCWRtLT5yeF9jc3VtID0gZGF0YTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZG0tPmxvY2ssIGZsYWdzKTsKKwkJaW93KGRtLCBETTkwMDBfUkNTUiwgZG0tPnJ4X2NzdW0gPyBSQ1NSX0NTVU0gOiAwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG0tPmxvY2ssIGZsYWdzKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgZG05MDAwX3NldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVpbnQzMl90IGRhdGEpCit7CisJYm9hcmRfaW5mb190ICpkbSA9IHRvX2RtOTAwMF9ib2FyZChkZXYpOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmIChkbS0+Y2FuX2NzdW0pCisJCXJldCA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0oZGV2LCBkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdTMyIGRtOTAwMF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKQEAgLTU0MCw2ICs1NzksMTAgQEAKICAJLmdldF9lZXByb21fbGVuCQk9IGRtOTAwMF9nZXRfZWVwcm9tX2xlbiwKICAJLmdldF9lZXByb20JCT0gZG05MDAwX2dldF9lZXByb20sCiAgCS5zZXRfZWVwcm9tCQk9IGRtOTAwMF9zZXRfZWVwcm9tLAorCS5nZXRfcnhfY3N1bQkJPSBkbTkwMDBfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IGRtOTAwMF9zZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0JCT0gZG05MDAwX3NldF90eF9jc3VtLAogfTsKIAogc3RhdGljIHZvaWQgZG05MDAwX3Nob3dfY2Fycmllcihib2FyZF9pbmZvX3QgKmRiLApAQCAtNjg1LDYgKzcyOCw5IEBACiAJLyogSS9PIG1vZGUgKi8KIAlkYi0+aW9fbW9kZSA9IGlvcihkYiwgRE05MDAwX0lTUikgPj4gNjsJLyogSVNSIGJpdDc6NiBrZWVwcyBJL08gbW9kZSAqLwogCisJLyogQ2hlY2tzdW0gbW9kZSAqLworCWRtOTAwMF9zZXRfcnhfY3N1bShkZXYsIGRiLT5yeF9jc3VtKTsKKwogCS8qIEdQSU8wIG9uIHByZS1hY3RpdmF0ZSBQSFkgKi8KIAlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBSRUdfMUYgYml0MCBhY3RpdmF0ZSBwaHl4Y2VyICovCiAJaW93KGRiLCBETTkwMDBfR1BDUiwgR1BDUl9HRVBfQ05UTCk7CS8qIExldCBHUElPMCBvdXRwdXQgKi8KQEAgLTc0Myw2ICs3ODksMjkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBkbTkwMDBfc2VuZF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBpbnQgaXBfc3VtbWVkLAorCQkJICAgICAgIHUxNiBwa3RfbGVuKQoreworCWJvYXJkX2luZm9fdCAqZG0gPSB0b19kbTkwMDBfYm9hcmQoZGV2KTsKKworCS8qIFRoZSBETTkwMDAgaXMgbm90IHNtYXJ0IGVub3VnaCB0byBsZWF2ZSBmcmFnbWVudGVkIHBhY2tldHMgYWxvbmUuICovCisJaWYgKGRtLT5pcF9zdW1tZWQgIT0gaXBfc3VtbWVkKSB7CisJCWlmIChpcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkKKwkJCWlvdyhkbSwgRE05MDAwX1RDQ1IsIDApOworCQllbHNlCisJCQlpb3coZG0sIERNOTAwMF9UQ0NSLCBUQ0NSX0lQIHwgVENDUl9VRFAgfCBUQ0NSX1RDUCk7CisJCWRtLT5pcF9zdW1tZWQgPSBpcF9zdW1tZWQ7CisJfQorCisJLyogU2V0IFRYIGxlbmd0aCB0byBETTkwMDAgKi8KKwlpb3coZG0sIERNOTAwMF9UWFBMTCwgcGt0X2xlbik7CisJaW93KGRtLCBETTkwMDBfVFhQTEgsIHBrdF9sZW4gPj4gOCk7CisKKwkvKiBJc3N1ZSBUWCBwb2xsaW5nIGNvbW1hbmQgKi8KKwlpb3coZG0sIERNOTAwMF9UQ1IsIFRDUl9UWFJFUSk7CS8qIENsZWFyZWQgYWZ0ZXIgVFggY29tcGxldGUgKi8KK30KKwogLyoKICAqICBIYXJkd2FyZSBzdGFydCB0cmFuc21pc3Npb24uCiAgKiAgU2VuZCBhIHBhY2tldCB0byBtZWRpYSBmcm9tIHRoZSB1cHBlciBsYXllci4KQEAgLTc2OSwxNyArODM4LDExIEBACiAJZGItPnR4X3BrdF9jbnQrKzsKIAkvKiBUWCBjb250cm9sOiBGaXJzdCBwYWNrZXQgaW1tZWRpYXRlbHkgc2VuZCwgc2Vjb25kIHBhY2tldCBxdWV1ZSAqLwogCWlmIChkYi0+dHhfcGt0X2NudCA9PSAxKSB7Ci0JCS8qIFNldCBUWCBsZW5ndGggdG8gRE05MDAwICovCi0JCWlvdyhkYiwgRE05MDAwX1RYUExMLCBza2ItPmxlbik7Ci0JCWlvdyhkYiwgRE05MDAwX1RYUExILCBza2ItPmxlbiA+PiA4KTsKLQotCQkvKiBJc3N1ZSBUWCBwb2xsaW5nIGNvbW1hbmQgKi8KLQkJaW93KGRiLCBETTkwMDBfVENSLCBUQ1JfVFhSRVEpOwkvKiBDbGVhcmVkIGFmdGVyIFRYIGNvbXBsZXRlICovCi0KLQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHNhdmUgdGhlIHRpbWUgc3RhbXAgKi8KKwkJZG05MDAwX3NlbmRfcGFja2V0KGRldiwgc2tiLT5pcF9zdW1tZWQsIHNrYi0+bGVuKTsKIAl9IGVsc2UgewogCQkvKiBTZWNvbmQgcGFja2V0ICovCiAJCWRiLT5xdWV1ZV9wa3RfbGVuID0gc2tiLT5sZW47CisJCWRiLT5xdWV1ZV9pcF9zdW1tZWQgPSBza2ItPmlwX3N1bW1lZDsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0KIApAQCAtNzg4LDcgKzg1MSw3IEBACiAJLyogZnJlZSB0aGlzIFNLQiAqLwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC04MDksMTIgKzg3Miw5IEBACiAJCQlkZXZfZGJnKGRiLT5kZXYsICJ0eCBkb25lLCBOU1IgJTAyeFxuIiwgdHhfc3RhdHVzKTsKIAogCQkvKiBRdWV1ZSBwYWNrZXQgY2hlY2sgJiBzZW5kICovCi0JCWlmIChkYi0+dHhfcGt0X2NudCA+IDApIHsKLQkJCWlvdyhkYiwgRE05MDAwX1RYUExMLCBkYi0+cXVldWVfcGt0X2xlbik7Ci0JCQlpb3coZGIsIERNOTAwMF9UWFBMSCwgZGItPnF1ZXVlX3BrdF9sZW4gPj4gOCk7Ci0JCQlpb3coZGIsIERNOTAwMF9UQ1IsIFRDUl9UWFJFUSk7Ci0JCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJfQorCQlpZiAoZGItPnR4X3BrdF9jbnQgPiAwKQorCQkJZG05MDAwX3NlbmRfcGFja2V0KGRldiwgZGItPnF1ZXVlX2lwX3N1bW1lZCwKKwkJCQkJICAgZGItPnF1ZXVlX3BrdF9sZW4pOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQogfQpAQCAtODQ2LDE0ICs5MDYsMTQgQEAKIAkJcnhieXRlID0gcmVhZGIoZGItPmlvX2RhdGEpOwogCiAJCS8qIFN0YXR1cyBjaGVjazogdGhpcyBieXRlIG11c3QgYmUgMCBvciAxICovCi0JCWlmIChyeGJ5dGUgPiBETTkwMDBfUEtUX1JEWSkgeworCQlpZiAocnhieXRlICYgRE05MDAwX1BLVF9FUlIpIHsKIAkJCWRldl93YXJuKGRiLT5kZXYsICJzdGF0dXMgY2hlY2sgZmFpbDogJWRcbiIsIHJ4Ynl0ZSk7CiAJCQlpb3coZGIsIERNOTAwMF9SQ1IsIDB4MDApOwkvKiBTdG9wIERldmljZSAqLwogCQkJaW93KGRiLCBETTkwMDBfSVNSLCBJTVJfUEFSKTsJLyogU3RvcCBJTlQgcmVxdWVzdCAqLwogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKHJ4Ynl0ZSAhPSBETTkwMDBfUEtUX1JEWSkKKwkJaWYgKCEocnhieXRlICYgRE05MDAwX1BLVF9SRFkpKQogCQkJcmV0dXJuOwogCiAJCS8qIEEgcGFja2V0IHJlYWR5IG5vdyAgJiBHZXQgc3RhdHVzL2xlbmd0aCAqLwpAQCAtOTE0LDYgKzk3NCwxMiBAQAogCiAJCQkvKiBQYXNzIHRvIHVwcGVyIGxheWVyICovCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCQkJaWYgKGRiLT5yeF9jc3VtKSB7CisJCQkJaWYgKCgoKHJ4Ynl0ZSAmIDB4MWMpIDw8IDMpICYgcnhieXRlKSA9PSAwKQorCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCWVsc2UKKwkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQkJfQogCQkJbmV0aWZfcngoc2tiKTsKIAkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCkBAIC05MjIsNyArOTg4LDcgQEAKIAogCQkJKGRiLT5kdW1wYmxrKShkYi0+aW9fZGF0YSwgUnhMZW4pOwogCQl9Ci0JfSB3aGlsZSAocnhieXRlID09IERNOTAwMF9QS1RfUkRZKTsKKwl9IHdoaWxlIChyeGJ5dGUgJiBETTkwMDBfUEtUX1JEWSk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbTkwMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKQEAgLTExODUsOCArMTI1MSw2IEBACiAjZW5kaWYKIH07CiAKLSNkZWZpbmUgcmVzX3NpemUoX3IpICgoKF9yKS0+ZW5kIC0gKF9yKS0+c3RhcnQpICsgMSkKLQogLyoKICAqIFNlYXJjaCBETTkwMDAgYm9hcmQsIGFsbG9jYXRlIHNwYWNlIGFuZCByZWdpc3RlciBpdAogICovCkBAIC0xMjE1LDcgKzEyNzksNiBAQAogCiAJLyogc2V0dXAgYm9hcmQgaW5mbyBzdHJ1Y3R1cmUgKi8KIAlkYiA9IG5ldGRldl9wcml2KG5kZXYpOwotCW1lbXNldChkYiwgMCwgc2l6ZW9mKCpkYikpOwogCiAJZGItPmRldiA9ICZwZGV2LT5kZXY7CiAJZGItPm5kZXYgPSBuZGV2OwpAQCAtMTIzNiw3ICsxMjk5LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaW9zaXplID0gcmVzX3NpemUoZGItPmFkZHJfcmVzKTsKKwlpb3NpemUgPSByZXNvdXJjZV9zaXplKGRiLT5hZGRyX3Jlcyk7CiAJZGItPmFkZHJfcmVxID0gcmVxdWVzdF9tZW1fcmVnaW9uKGRiLT5hZGRyX3Jlcy0+c3RhcnQsIGlvc2l6ZSwKIAkJCQkJICBwZGV2LT5uYW1lKTsKIApAQCAtMTI1NCw3ICsxMzE3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaW9zaXplID0gcmVzX3NpemUoZGItPmRhdGFfcmVzKTsKKwlpb3NpemUgPSByZXNvdXJjZV9zaXplKGRiLT5kYXRhX3Jlcyk7CiAJZGItPmRhdGFfcmVxID0gcmVxdWVzdF9tZW1fcmVnaW9uKGRiLT5kYXRhX3Jlcy0+c3RhcnQsIGlvc2l6ZSwKIAkJCQkJICBwZGV2LT5uYW1lKTsKIApAQCAtMTM0OSw2ICsxNDEyLDEzIEBACiAJCWRiLT50eXBlID0gVFlQRV9ETTkwMDBFOwogCX0KIAorCS8qIGRtOTAwMGEvYiBhcmUgY2FwYWJsZSBvZiBoYXJkd2FyZSBjaGVja3N1bSBvZmZsb2FkICovCisJaWYgKGRiLT50eXBlID09IFRZUEVfRE05MDAwQSB8fCBkYi0+dHlwZSA9PSBUWVBFX0RNOTAwMEIpIHsKKwkJZGItPmNhbl9jc3VtID0gMTsKKwkJZGItPnJ4X2NzdW0gPSAxOworCQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJfQorCiAJLyogZnJvbSB0aGlzIHBvaW50IHdlIGFzc3VtZSB0aGF0IHdlIGhhdmUgZm91bmQgYSBETTkwMDAgKi8KIAogCS8qIGRyaXZlciBzeXN0ZW0gZnVuY3Rpb24gKi8KQEAgLTE0MTAsOSArMTQ4MCwxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1kbTkwMDBfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitkbTkwMDBfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlib2FyZF9pbmZvX3QgKmRiOwogCiAJaWYgKG5kZXYpIHsKQEAgLTE0MjgsOSArMTQ5OSwxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1kbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitkbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCWJvYXJkX2luZm9fdCAqZGIgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAogCWlmIChuZGV2KSB7CkBAIC0xNDQ3LDYgKzE1MTksMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGRtOTAwMF9kcnZfcG1fb3BzID0geworCS5zdXNwZW5kCT0gZG05MDAwX2Rydl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZG05MDAwX2Rydl9yZXN1bWUsCit9OworCiBzdGF0aWMgaW50IF9fZGV2ZXhpdAogZG05MDAwX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKQEAgLTE0NjYsMTEgKzE1NDMsMTAgQEAKIAkuZHJpdmVyCT0gewogCQkubmFtZSAgICA9ICJkbTkwMDAiLAogCQkub3duZXIJID0gVEhJU19NT0RVTEUsCisJCS5wbQkgPSAmZG05MDAwX2Rydl9wbV9vcHMsCiAJfSwKIAkucHJvYmUgICA9IGRtOTAwMF9wcm9iZSwKIAkucmVtb3ZlICA9IF9fZGV2ZXhpdF9wKGRtOTAwMF9kcnZfcmVtb3ZlKSwKLQkuc3VzcGVuZCA9IGRtOTAwMF9kcnZfc3VzcGVuZCwKLQkucmVzdW1lICA9IGRtOTAwMF9kcnZfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5oIGIvZHJpdmVycy9uZXQvZG05MDAwLmgKaW5kZXggYmEyNWNmNS4uODA4MTdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmgKQEAgLTQ1LDYgKzQ1LDEwIEBACiAjZGVmaW5lIERNOTAwMF9DSElQUiAgICAgICAgICAgMHgyQwogI2RlZmluZSBETTkwMDBfU01DUiAgICAgICAgICAgIDB4MkYKIAorI2RlZmluZSBETTkwMDBfRVRYQ1NSICAgICAgICAgIDB4MzAKKyNkZWZpbmUgRE05MDAwX1RDQ1IJICAgICAgIDB4MzEKKyNkZWZpbmUgRE05MDAwX1JDU1IJICAgICAgIDB4MzIKKwogI2RlZmluZSBDSElQUl9ETTkwMDBBCSAgICAgICAweDE5CiAjZGVmaW5lIENISVBSX0RNOTAwMEIJICAgICAgIDB4MUIKIApAQCAtMTMxLDcgKzEzNSwyMSBAQAogCiAjZGVmaW5lIEdQQ1JfR0VQX0NOVEwgICAgICAgKDE8PDApCiAKKyNkZWZpbmUgVENDUl9JUAkJICAgICgxPDwwKQorI2RlZmluZSBUQ0NSX1RDUAkgICAgKDE8PDEpCisjZGVmaW5lIFRDQ1JfVURQCSAgICAoMTw8MikKKworI2RlZmluZSBSQ1NSX1VEUF9CQUQJICAgICgxPDw3KQorI2RlZmluZSBSQ1NSX1RDUF9CQUQJICAgICgxPDw2KQorI2RlZmluZSBSQ1NSX0lQX0JBRAkgICAgKDE8PDUpCisjZGVmaW5lIFJDU1JfVURQCSAgICAoMTw8NCkKKyNkZWZpbmUgUkNTUl9UQ1AJICAgICgxPDwzKQorI2RlZmluZSBSQ1NSX0lQCQkgICAgKDE8PDIpCisjZGVmaW5lIFJDU1JfQ1NVTQkgICAgKDE8PDEpCisjZGVmaW5lIFJDU1JfRElTQ0FSRAkgICAgKDE8PDApCisKICNkZWZpbmUgRE05MDAwX1BLVF9SRFkJCTB4MDEJLyogUGFja2V0IHJlYWR5IHRvIHJlY2VpdmUgKi8KKyNkZWZpbmUgRE05MDAwX1BLVF9FUlIJCTB4MDIKICNkZWZpbmUgRE05MDAwX1BLVF9NQVgJCTE1MzYJLyogUmVjZWl2ZWQgcGFja2V0IG1heCBzaXplICovCiAKIC8qIERNOTAwMEEgLyBETTkwMDBCIGRlZmluaXRpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9kbmV0LmMKaW5kZXggMzNmYTllZS4uMjM0Njg1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2RuZXQuYwpAQCAtNTQxLDcgKzU0MSw3IEBACiAjZGVmaW5lIGRuZXRfcHJpbnRfc2tiKHNrYikJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotc3RhdGljIGludCBkbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBkbmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAogCXN0cnVjdCBkbmV0ICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01OTYsNyArNTk2LDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgZG5ldF9yZXNldF9odyhzdHJ1Y3QgZG5ldCAqYnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kdW1teS5jIGIvZHJpdmVycy9uZXQvZHVtbXkuYwppbmRleCA4ZWJkN2Q3Li4zN2RjZmRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kdW1teS5jCisrKyBiL2RyaXZlcnMvbmV0L2R1bW15LmMKQEAgLTM5LDggKzM5LDYgQEAKIAogc3RhdGljIGludCBudW1kdW1taWVzID0gMTsKIAotc3RhdGljIGludCBkdW1teV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCiBzdGF0aWMgaW50IGR1bW15X3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHNvY2thZGRyICpzYSA9IHA7CkBAIC01Nyw2ICs1NSwxNiBAQAogewogfQogCisKK3N0YXRpYyBuZXRkZXZfdHhfdCBkdW1teV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGR1bW15X25ldGRldl9vcHMgPSB7CiAJLm5kb19zdGFydF94bWl0CQk9IGR1bW15X3htaXQsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCkBAIC03OCwxNiArODYsNiBAQAogCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CiAJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcik7CiB9Ci0KLXN0YXRpYyBpbnQgZHVtbXlfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgZHVtbXlfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQogewogCWlmICh0YltJRkxBX0FERFJFU1NdKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggM2E2NzM1ZC4uNjc5OTY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTY5MCw3ICsxNjkwLDggQEAKIAljYi0+dS50Y2IudGJkLnNpemUgPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CiB9CiAKLXN0YXRpYyBpbnQgZTEwMF94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZTEwMF94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnI7CkBAIC0xNzIwLDcgKzE3MjEsNyBAQAogCX0KIAogCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgZTEwMF90eF9jbGVhbihzdHJ1Y3QgbmljICpuaWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCBlOWE0MTZmLi4xYTRmODljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTExMSw2ICsxMTEsOSBAQAogI2RlZmluZSBFMTAwMF9NSU5fUlhEICAgICAgICAgICAgICAgICAgICAgICA4MAogI2RlZmluZSBFMTAwMF9NQVhfODI1NDRfUlhEICAgICAgICAgICAgICAgNDA5NgogCisjZGVmaW5lIEUxMDAwX01JTl9JVFJfVVNFQ1MJCTEwIC8qIDEwMDAwMCBpcnEvc2VjICovCisjZGVmaW5lIEUxMDAwX01BWF9JVFJfVVNFQ1MJCTEwMDAwIC8qIDEwMCAgICBpcnEvc2VjICovCisKIC8qIHRoaXMgaXMgdGhlIHNpemUgcGFzdCB3aGljaCBoYXJkd2FyZSB3aWxsIGRyb3AgcGFja2V0cyB3aGVuIHNldHRpbmcgTFBFPTAgKi8KICNkZWZpbmUgTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkUgMTUyMgogCkBAIC0xMzcsNyArMTQwLDcgQEAKICNkZWZpbmUgRTEwMDBfRkNfSElHSF9ESUZGIDB4MTYzOCAgLyogSGlnaDogNTY4OCBieXRlcyBiZWxvdyBSeCBGSUZPIHNpemUgKi8KICNkZWZpbmUgRTEwMDBfRkNfTE9XX0RJRkYgMHgxNjQwICAgLyogTG93OiAgNTY5NiBieXRlcyBiZWxvdyBSeCBGSUZPIHNpemUgKi8KIAotI2RlZmluZSBFMTAwMF9GQ19QQVVTRV9USU1FIDB4MDY4MCAvKiA4NTggdXNlYyAqLworI2RlZmluZSBFMTAwMF9GQ19QQVVTRV9USU1FIDB4RkZGRiAvKiBwYXVzZSBmb3IgdGhlIG1heCBvciB1bnRpbCBzZW5kIHhvbiAqLwogCiAvKiBIb3cgbWFueSBUeCBEZXNjcmlwdG9ycyBkbyB3ZSBuZWVkIHRvIGNhbGwgbmV0aWZfd2FrZV9xdWV1ZSA/ICovCiAjZGVmaW5lIEUxMDAwX1RYX1FVRVVFX1dBS0UJMTYKQEAgLTE2MSw2ICsxNjQsNyBAQAogc3RydWN0IGUxMDAwX2J1ZmZlciB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlkbWFfYWRkcl90IGRtYTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7CiAJdTE2IGxlbmd0aDsKIAl1MTYgbmV4dF90b193YXRjaDsKQEAgLTIwMiw2ICsyMDYsNyBAQAogCXVuc2lnbmVkIGludCBuZXh0X3RvX2NsZWFuOwogCS8qIGFycmF5IG9mIGJ1ZmZlciBpbmZvcm1hdGlvbiBzdHJ1Y3RzICovCiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYl90b3A7CiAKIAkvKiBjcHUgZm9yIHJ4IHF1ZXVlICovCiAJaW50IGNwdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwppbmRleCBjODU0Yzk2Li4yN2Y5OTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCkBAIC0xOTA0LDYgKzE5MDQsNTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBlMTAwMF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKK3sKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPCBlMTAwMF84MjU0NSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nIDw9IDMpCisJCWVjLT5yeF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPml0cl9zZXR0aW5nOworCWVsc2UKKwkJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gMTAwMDAwMCAvIGFkYXB0ZXItPml0cl9zZXR0aW5nOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZTEwMDBfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCit7CisJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAoaHctPm1hY190eXBlIDwgZTEwMDBfODI1NDUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICgoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID4gRTEwMDBfTUFYX0lUUl9VU0VDUykgfHwKKwkgICAgKChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPiAzKSAmJgorCSAgICAgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA8IEUxMDAwX01JTl9JVFJfVVNFQ1MpKSB8fAorCSAgICAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID09IDIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPD0gMykgeworCQlhZGFwdGVyLT5pdHIgPSAyMDAwMDsKKwkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBlYy0+cnhfY29hbGVzY2VfdXNlY3M7CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+aXRyID0gKDEwMDAwMDAgLyBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOworCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IGFkYXB0ZXItPml0ciAmIH4zOworCX0KKworCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAhPSAwKQorCQlldzMyKElUUiwgMTAwMDAwMDAwMCAvIChhZGFwdGVyLT5pdHIgKiAyNTYpKTsKKwllbHNlCisJCWV3MzIoSVRSLCAwKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGUxMDAwX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0xOTc4LDcgKzIwMjUsOSBAQAogCS5nZXRfc3RyaW5ncyAgICAgICAgICAgID0gZTEwMDBfZ2V0X3N0cmluZ3MsCiAJLnBoeXNfaWQgICAgICAgICAgICAgICAgPSBlMTAwMF9waHlzX2lkLAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gZTEwMDBfZ2V0X2V0aHRvb2xfc3RhdHMsCi0JLmdldF9zc2V0X2NvdW50CQk9IGUxMDAwX2dldF9zc2V0X2NvdW50LAorCS5nZXRfc3NldF9jb3VudCAgICAgICAgID0gZTEwMDBfZ2V0X3NzZXRfY291bnQsCisJLmdldF9jb2FsZXNjZSAgICAgICAgICAgPSBlMTAwMF9nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZSAgICAgICAgICAgPSBlMTAwMF9zZXRfY29hbGVzY2UsCiB9OwogCiB2b2lkIGUxMDAwX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKaW5kZXggZTFhM2ZjMS4uY2RhNmIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC0xOTU1LDcgKzE5NTUsNyBAQAogICAgIHMzMiByZXRfdmFsOwogICAgIHUxNiBpOwogICAgIHUxNiBwaHlfZGF0YTsKLSAgICB1MTYgcmVnX2RhdGE7CisgICAgdTE2IHJlZ19kYXRhID0gMDsKIAogICAgIERFQlVHRlVOQygiZTEwMDBfc2V0dXBfY29wcGVyX2xpbmsiKTsKIApAQCAtNTc1OSw1MiArNTc1OSw2IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNldHMgdGhlIGJpdCBpbiB0aGUgbXVsdGljYXN0IHRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGhhc2ggdmFsdWUuCi0gKgotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqIGhhc2hfdmFsdWUgLSBNdWx0aWNhc3QgYWRkcmVzcyBoYXNoIHZhbHVlCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGUxMDAwX210YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGhhc2hfdmFsdWUpCi17Ci0gICAgdTMyIGhhc2hfYml0LCBoYXNoX3JlZzsKLSAgICB1MzIgbXRhOwotICAgIHUzMiB0ZW1wOwotCi0gICAgLyogVGhlIE1UQSBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDEyOCAzMi1iaXQgcmVnaXN0ZXJzLgotICAgICAqIEl0IGlzIHRyZWF0ZWQgbGlrZSBhbiBhcnJheSBvZiA0MDk2IGJpdHMuICBXZSB3YW50IHRvIHNldAotICAgICAqIGJpdCBCaXRBcnJheVtoYXNoX3ZhbHVlXS4gU28gd2UgZmlndXJlIG91dCB3aGF0IHJlZ2lzdGVyCi0gICAgICogdGhlIGJpdCBpcyBpbiwgcmVhZCBpdCwgT1IgaW4gdGhlIG5ldyBiaXQsIHRoZW4gd3JpdGUKLSAgICAgKiBiYWNrIHRoZSBuZXcgdmFsdWUuICBUaGUgcmVnaXN0ZXIgaXMgZGV0ZXJtaW5lZCBieSB0aGUKLSAgICAgKiB1cHBlciA3IGJpdHMgb2YgdGhlIGhhc2ggdmFsdWUgYW5kIHRoZSBiaXQgd2l0aGluIHRoYXQKLSAgICAgKiByZWdpc3RlciBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXIgNSBiaXRzIG9mIHRoZSB2YWx1ZS4KLSAgICAgKi8KLSAgICBoYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgMHg3RjsKLSAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pCi0gICAgICAgIGhhc2hfcmVnICY9IDB4MUY7Ci0KLSAgICBoYXNoX2JpdCA9IGhhc2hfdmFsdWUgJiAweDFGOwotCi0gICAgbXRhID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIE1UQSwgaGFzaF9yZWcpOwotCi0gICAgbXRhIHw9ICgxIDw8IGhhc2hfYml0KTsKLQotICAgIC8qIElmIHdlIGFyZSBvbiBhbiA4MjU0NCBhbmQgd2UgYXJlIHRyeWluZyB0byB3cml0ZSBhbiBvZGQgb2Zmc2V0Ci0gICAgICogaW4gdGhlIE1UQSwgc2F2ZSBvZmYgdGhlIHByZXZpb3VzIGVudHJ5IGJlZm9yZSB3cml0aW5nIGFuZAotICAgICAqIHJlc3RvcmUgdGhlIG9sZCB2YWx1ZSBhZnRlciB3cml0aW5nLgotICAgICAqLwotICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ0KSAmJiAoKGhhc2hfcmVnICYgMHgxKSA9PSAxKSkgewotICAgICAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIE1UQSwgKGhhc2hfcmVnIC0gMSkpOwotICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIE1UQSwgaGFzaF9yZWcsIG10YSk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgTVRBLCAoaGFzaF9yZWcgLSAxKSwgdGVtcCk7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBNVEEsIGhhc2hfcmVnLCBtdGEpOwotICAgICAgICBFMTAwMF9XUklURV9GTFVTSCgpOwotICAgIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUHV0cyBhbiBldGhlcm5ldCBhZGRyZXNzIGludG8gYSByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIuCiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IDk5ZmNlMmMuLmE4ODY2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaApAQCAtNTIzLDExICs1MjMsOCBAQAogCiAvKiBUaGUgc2l6ZXMgKGluIGJ5dGVzKSBvZiBhIGV0aGVybmV0IHBhY2tldCAqLwogI2RlZmluZSBFTkVUX0hFQURFUl9TSVpFICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSAgMTUxOCAvKiBXaXRoIEZDUyAqLwogI2RlZmluZSBNSU5JTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUgIDY0ICAgLyogV2l0aCBGQ1MgKi8KICNkZWZpbmUgRVRIRVJORVRfRkNTX1NJWkUgICAgICAgICAgICA0Ci0jZGVmaW5lIE1BWElNVU1fRVRIRVJORVRfUEFDS0VUX1NJWkUgXAotICAgIChNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUgLSBFVEhFUk5FVF9GQ1NfU0laRSkKICNkZWZpbmUgTUlOSU1VTV9FVEhFUk5FVF9QQUNLRVRfU0laRSBcCiAgICAgKE1JTklNVU1fRVRIRVJORVRfRlJBTUVfU0laRSAtIEVUSEVSTkVUX0ZDU19TSVpFKQogI2RlZmluZSBDUkNfTEVOR1RIICAgICAgICAgICAgICAgICAgIEVUSEVSTkVUX0ZDU19TSVpFCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggNWI4Y2JkYi4uYzY2ZGQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMTI1LDcgKzEyNSw4IEBACiBzdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfcGh5X2luZm8odW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyB2b2lkIGUxMDAwX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCBlMTAwMF84MjU0N190eF9maWZvX3N0YWxsKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgaW50IGUxMDAwX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZTEwMDBfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIGUxMDAwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHN0YXRpYyBpbnQgZTEwMDBfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CiBzdGF0aWMgaW50IGUxMDAwX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCk7CkBAIC0xMzcsOSArMTM4LDE1IEBACiBzdGF0aWMgYm9vbCBlMTAwMF9jbGVhbl9yeF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgICAgc3RydWN0IGUxMDAwX3J4X3JpbmcgKnJ4X3JpbmcsCiAJCQkgICAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKK3N0YXRpYyBib29sIGUxMDAwX2NsZWFuX2p1bWJvX3J4X2lycShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAorCQkJCSAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKTsKIHN0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAorCQkJCSAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAogCQkJCSAgIGludCBjbGVhbmVkX2NvdW50KTsKK3N0YXRpYyB2b2lkIGUxMDAwX2FsbG9jX2p1bWJvX3J4X2J1ZmZlcnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywKKwkJCQkJIGludCBjbGVhbmVkX2NvdW50KTsKIHN0YXRpYyBpbnQgZTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwogc3RhdGljIGludCBlMTAwMF9taWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGlmcmVxICppZnIsCiAJCQkgICBpbnQgY21kKTsKQEAgLTYzNSw4ICs2NDIsOCBAQAogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHBiYSA9IDAsIHR4X3NwYWNlLCBtaW5fdHhfc3BhY2UsIG1pbl9yeF9zcGFjZTsKLQl1MTYgZmNfaGlnaF93YXRlcl9tYXJrID0gRTEwMDBfRkNfSElHSF9ESUZGOwogCWJvb2wgbGVnYWN5X3BiYV9hZGp1c3QgPSBmYWxzZTsKKwl1MTYgaHdtOwogCiAJLyogUmVwYXJ0aXRpb24gUGJhIGZvciBncmVhdGVyIHRoYW4gOWsgbXR1CiAJICogVG8gdGFrZSBlZmZlY3QgQ1RSTC5SU1QgaXMgcmVxdWlyZWQuCkBAIC02ODAsNyArNjg3LDcgQEAKIAl9CiAKIAlpZiAobGVnYWN5X3BiYV9hZGp1c3QpIHsKLQkJaWYgKGFkYXB0ZXItPm5ldGRldi0+bXR1ID4gRTEwMDBfUlhCVUZGRVJfODE5MikKKwkJaWYgKGh3LT5tYXhfZnJhbWVfc2l6ZSA+IEUxMDAwX1JYQlVGRkVSXzgxOTIpCiAJCQlwYmEgLT0gODsgLyogYWxsb2NhdGUgbW9yZSBGSUZPIGZvciBUeCAqLwogCiAJCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcpIHsKQEAgLTY5MCwxNCArNjk3LDE0IEBACiAJCQkJKEUxMDAwX1BCQV80MEsgLSBwYmEpIDw8IEUxMDAwX1BCQV9CWVRFU19TSElGVDsKIAkJCWF0b21pY19zZXQoJmFkYXB0ZXItPnR4X2ZpZm9fc3RhbGwsIDApOwogCQl9Ci0JfSBlbHNlIGlmIChody0+bWF4X2ZyYW1lX3NpemUgPiBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHsKKwl9IGVsc2UgaWYgKGh3LT5tYXhfZnJhbWVfc2l6ZSA+ICBFVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pIHsKIAkJLyogYWRqdXN0IFBCQSBmb3IganVtYm8gZnJhbWVzICovCiAJCWV3MzIoUEJBLCBwYmEpOwogCiAJCS8qIFRvIG1haW50YWluIHdpcmUgc3BlZWQgdHJhbnNtaXRzLCB0aGUgVHggRklGTyBzaG91bGQgYmUKLQkJICogbGFyZ2UgZW5vdWdoIHRvIGFjY29tb2RhdGUgdHdvIGZ1bGwgdHJhbnNtaXQgcGFja2V0cywKKwkJICogbGFyZ2UgZW5vdWdoIHRvIGFjY29tbW9kYXRlIHR3byBmdWxsIHRyYW5zbWl0IHBhY2tldHMsCiAJCSAqIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgMUtCIGFuZCBleHByZXNzZWQgaW4gS0IuICBMaWtld2lzZSwKLQkJICogdGhlIFJ4IEZJRk8gc2hvdWxkIGJlIGxhcmdlIGVub3VnaCB0byBhY2NvbW9kYXRlIGF0IGxlYXN0CisJCSAqIHRoZSBSeCBGSUZPIHNob3VsZCBiZSBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgYXQgbGVhc3QKIAkJICogb25lIGZ1bGwgcmVjZWl2ZSBwYWNrZXQgYW5kIGlzIHNpbWlsYXJseSByb3VuZGVkIHVwIGFuZAogCQkgKiBleHByZXNzZWQgaW4gS0IuICovCiAJCXBiYSA9IGVyMzIoUEJBKTsKQEAgLTcwNSwxMyArNzEyLDE3IEBACiAJCXR4X3NwYWNlID0gcGJhID4+IDE2OwogCQkvKiBsb3dlciAxNiBiaXRzIGhhcyBSeCBwYWNrZXQgYnVmZmVyIGFsbG9jYXRpb24gc2l6ZSBpbiBLQiAqLwogCQlwYmEgJj0gMHhmZmZmOwotCQkvKiBkb24ndCBpbmNsdWRlIGV0aGVybmV0IEZDUyBiZWNhdXNlIGhhcmR3YXJlIGFwcGVuZHMvc3RyaXBzICovCi0JCW1pbl9yeF9zcGFjZSA9IGFkYXB0ZXItPm5ldGRldi0+bXR1ICsgRU5FVF9IRUFERVJfU0laRSArCi0JCSAgICAgICAgICAgICAgIFZMQU5fVEFHX1NJWkU7Ci0JCW1pbl90eF9zcGFjZSA9IG1pbl9yeF9zcGFjZTsKLQkJbWluX3R4X3NwYWNlICo9IDI7CisJCS8qCisJCSAqIHRoZSB0eCBmaWZvIGFsc28gc3RvcmVzIDE2IGJ5dGVzIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0eAorCQkgKiBidXQgZG9uJ3QgaW5jbHVkZSBldGhlcm5ldCBGQ1MgYmVjYXVzZSBoYXJkd2FyZSBhcHBlbmRzIGl0CisJCSAqLworCQltaW5fdHhfc3BhY2UgPSAoaHctPm1heF9mcmFtZV9zaXplICsKKwkJICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykgLQorCQkgICAgICAgICAgICAgICAgRVRIX0ZDU19MRU4pICogMjsKIAkJbWluX3R4X3NwYWNlID0gQUxJR04obWluX3R4X3NwYWNlLCAxMDI0KTsKIAkJbWluX3R4X3NwYWNlID4+PSAxMDsKKwkJLyogc29mdHdhcmUgc3RyaXBzIHJlY2VpdmUgQ1JDLCBzbyBsZWF2ZSByb29tIGZvciBpdCAqLworCQltaW5fcnhfc3BhY2UgPSBody0+bWF4X2ZyYW1lX3NpemU7CiAJCW1pbl9yeF9zcGFjZSA9IEFMSUdOKG1pbl9yeF9zcGFjZSwgMTAyNCk7CiAJCW1pbl9yeF9zcGFjZSA+Pj0gMTA7CiAKQEAgLTc0OCwyMyArNzU5LDIyIEBACiAKIAlldzMyKFBCQSwgcGJhKTsKIAotCS8qIGZsb3cgY29udHJvbCBzZXR0aW5ncyAqLwotCS8qIFNldCB0aGUgRkMgaGlnaCB3YXRlciBtYXJrIHRvIDkwJSBvZiB0aGUgRklGTyBzaXplLgotCSAqIFJlcXVpcmVkIHRvIGNsZWFyIGxhc3QgMyBMU0IgKi8KLQlmY19oaWdoX3dhdGVyX21hcmsgPSAoKHBiYSAqIDkyMTYpLzEwKSAmIDB4RkZGODsKLQkvKiBXZSBjYW4ndCB1c2UgOTAlIG9uIHNtYWxsIEZJRk9zIGJlY2F1c2UgdGhlIHJlbWFpbmRlcgotCSAqIHdvdWxkIGJlIGxlc3MgdGhhbiAxIGZ1bGwgZnJhbWUuICBJbiB0aGlzIGNhc2UsIHdlIHNpemUKLQkgKiBpdCB0byBhbGxvdyBhdCBsZWFzdCBhIGZ1bGwgZnJhbWUgYWJvdmUgdGhlIGhpZ2ggd2F0ZXIKLQkgKiAgbWFyay4gKi8KLQlpZiAocGJhIDwgRTEwMDBfUEJBXzE2SykKLQkJZmNfaGlnaF93YXRlcl9tYXJrID0gKHBiYSAqIDEwMjQpIC0gMTYwMDsKKwkvKgorCSAqIGZsb3cgY29udHJvbCBzZXR0aW5nczoKKwkgKiBUaGUgaGlnaCB3YXRlciBtYXJrIG11c3QgYmUgbG93IGVub3VnaCB0byBmaXQgb25lIGZ1bGwgZnJhbWUKKwkgKiAob3IgdGhlIHNpemUgdXNlZCBmb3IgZWFybHkgcmVjZWl2ZSkgYWJvdmUgaXQgaW4gdGhlIFJ4IEZJRk8uCisJICogU2V0IGl0IHRvIHRoZSBsb3dlciBvZjoKKwkgKiAtIDkwJSBvZiB0aGUgUnggRklGTyBzaXplLCBhbmQKKwkgKiAtIHRoZSBmdWxsIFJ4IEZJRk8gc2l6ZSBtaW51cyB0aGUgZWFybHkgcmVjZWl2ZSBzaXplIChmb3IgcGFydHMKKwkgKiAgIHdpdGggRVJUIHN1cHBvcnQgYXNzdW1pbmcgRVJUIHNldCB0byBFMTAwMF9FUlRfMjA0OCksIG9yCisJICogLSB0aGUgZnVsbCBSeCBGSUZPIHNpemUgbWludXMgb25lIGZ1bGwgZnJhbWUKKwkgKi8KKwlod20gPSBtaW4oKChwYmEgPDwgMTApICogOSAvIDEwKSwKKwkJICAoKHBiYSA8PCAxMCkgLSBody0+bWF4X2ZyYW1lX3NpemUpKTsKIAotCWh3LT5mY19oaWdoX3dhdGVyID0gZmNfaGlnaF93YXRlcl9tYXJrOwotCWh3LT5mY19sb3dfd2F0ZXIgPSBmY19oaWdoX3dhdGVyX21hcmsgLSA4OwotCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pCi0JCWh3LT5mY19wYXVzZV90aW1lID0gMHhGRkZGOwotCWVsc2UKLQkJaHctPmZjX3BhdXNlX3RpbWUgPSBFMTAwMF9GQ19QQVVTRV9USU1FOworCWh3LT5mY19oaWdoX3dhdGVyID0gaHdtICYgMHhGRkY4OwkvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwlody0+ZmNfbG93X3dhdGVyID0gaHctPmZjX2hpZ2hfd2F0ZXIgLSA4OworCWh3LT5mY19wYXVzZV90aW1lID0gRTEwMDBfRkNfUEFVU0VfVElNRTsKIAlody0+ZmNfc2VuZF94b24gPSAxOwogCWh3LT5mYyA9IGh3LT5vcmlnaW5hbF9mYzsKIApAQCAtMTg2Miw2ICsxODcyLDcgQEAKIAogCXJ4ZHItPm5leHRfdG9fY2xlYW4gPSAwOwogCXJ4ZHItPm5leHRfdG9fdXNlID0gMDsKKwlyeGRyLT5yeF9za2JfdG9wID0gTlVMTDsKIAogCXJldHVybiAwOwogfQpAQCAtMTk2OCwxMCArMTk3OSwxNyBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHJkbGVuLCByY3RsLCByeGNzdW0sIGN0cmxfZXh0OwogCi0JcmRsZW4gPSBhZGFwdGVyLT5yeF9yaW5nWzBdLmNvdW50ICoKLQkJc2l6ZW9mKHN0cnVjdCBlMTAwMF9yeF9kZXNjKTsKLQlhZGFwdGVyLT5jbGVhbl9yeCA9IGUxMDAwX2NsZWFuX3J4X2lycTsKLQlhZGFwdGVyLT5hbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19yeF9idWZmZXJzOworCWlmIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQlyZGxlbiA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0uY291bnQgKgorCQkgICAgICAgIHNpemVvZihzdHJ1Y3QgZTEwMDBfcnhfZGVzYyk7CisJCWFkYXB0ZXItPmNsZWFuX3J4ID0gZTEwMDBfY2xlYW5fanVtYm9fcnhfaXJxOworCQlhZGFwdGVyLT5hbGxvY19yeF9idWYgPSBlMTAwMF9hbGxvY19qdW1ib19yeF9idWZmZXJzOworCX0gZWxzZSB7CisJCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqCisJCSAgICAgICAgc2l6ZW9mKHN0cnVjdCBlMTAwMF9yeF9kZXNjKTsKKwkJYWRhcHRlci0+Y2xlYW5fcnggPSBlMTAwMF9jbGVhbl9yeF9pcnE7CisJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZiA9IGUxMDAwX2FsbG9jX3J4X2J1ZmZlcnM7CisJfQogCiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJjdGwgPSBlcjMyKFJDVEwpOwpAQCAtMjE4NSwyNiArMjIwMywzOSBAQAogCS8qIEZyZWUgYWxsIHRoZSBSeCByaW5nIHNrX2J1ZmZzICovCiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKIAkJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07Ci0JCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsCi0JCQkJCSBidWZmZXJfaW5mby0+ZG1hLAotCQkJCQkgYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWlmIChidWZmZXJfaW5mby0+ZG1hICYmCisJCSAgICBhZGFwdGVyLT5jbGVhbl9yeCA9PSBlMTAwMF9jbGVhbl9yeF9pcnEpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKKwkJCSAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCSAgICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfSBlbHNlIGlmIChidWZmZXJfaW5mby0+ZG1hICYmCisJCSAgICAgICAgICAgYWRhcHRlci0+Y2xlYW5fcnggPT0gZTEwMDBfY2xlYW5fanVtYm9fcnhfaXJxKSB7CisJCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCSAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAogCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKLQorCQlpZiAoYnVmZmVyX2luZm8tPnBhZ2UpIHsKKwkJCXB1dF9wYWdlKGJ1ZmZlcl9pbmZvLT5wYWdlKTsKKwkJCWJ1ZmZlcl9pbmZvLT5wYWdlID0gTlVMTDsKKwkJfQogCQlpZiAoYnVmZmVyX2luZm8tPnNrYikgewogCQkJZGV2X2tmcmVlX3NrYihidWZmZXJfaW5mby0+c2tiKTsKIAkJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCQl9CiAJfQogCisJLyogdGhlcmUgYWxzbyBtYXkgYmUgc29tZSBjYWNoZWQgZGF0YSBmcm9tIGEgY2hhaW5lZCByZWNlaXZlICovCisJaWYgKHJ4X3JpbmctPnJ4X3NrYl90b3ApIHsKKwkJZGV2X2tmcmVlX3NrYihyeF9yaW5nLT5yeF9za2JfdG9wKTsKKwkJcnhfcmluZy0+cnhfc2tiX3RvcCA9IE5VTEw7CisJfQorCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZTEwMDBfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwogCW1lbXNldChyeF9yaW5nLT5idWZmZXJfaW5mbywgMCwgc2l6ZSk7CiAKIAkvKiBaZXJvIG91dCB0aGUgZGVzY3JpcHRvciByaW5nICovCi0KIAltZW1zZXQocnhfcmluZy0+ZGVzYywgMCwgcnhfcmluZy0+c2l6ZSk7CiAKIAlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKQEAgLTIzNzEsNyArMjQwMiw5IEBACiAJCQlyY3RsICY9IH5FMTAwMF9SQ1RMX01QRTsKIAkJfQogCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikKLQkJCXJjdGwgfD0gRTEwMDBfUkNUTF9WRkU7CisJCQkvKiBFbmFibGUgVkxBTiBmaWx0ZXIgaWYgdGhlcmUgaXMgYSBWTEFOICovCisJCQlpZiAoYWRhcHRlci0+dmxncnApCisJCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKIAl9CiAKIAlpZiAobmV0ZGV2LT51Yy5jb3VudCA+IHJhcl9lbnRyaWVzIC0gMSkgewpAQCAtMzIxOSw3ICszMjUyLDggQEAKIH0KIAogI2RlZmluZSBUWERfVVNFX0NPVU5UKFMsIFgpICgoKFMpID4+IChYKSkgKyAxICkKLXN0YXRpYyBpbnQgZTEwMDBfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGUxMDAwX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTM0NTAsNyArMzQ4NCw3IEBACiAJc3dpdGNoIChody0+bWFjX3R5cGUpIHsKIAljYXNlIGUxMDAwX3VuZGVmaW5lZCAuLi4gZTEwMDBfODI1NDJfcmV2Ml8xOgogCWNhc2UgZTEwMDBfaWNoOGxhbjoKLQkJaWYgKG1heF9mcmFtZSA+IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgeworCQlpZiAobWF4X2ZyYW1lID4gKEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikpIHsKIAkJCURQUklOVEsoUFJPQkUsIEVSUiwgIkp1bWJvIEZyYW1lcyBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMzQ2Myw3ICszNDk3LDcgQEAKIAkJICAgICAgICAgICAgICAgICAgJmVlcHJvbV9kYXRhKTsKIAkJaWYgKChody0+ZGV2aWNlX2lkICE9IEUxMDAwX0RFVl9JRF84MjU3M0wpIHx8CiAJCSAgICAoZWVwcm9tX2RhdGEgJiBFRVBST01fV09SRDFBX0FTUE1fTUFTSykpIHsKLQkJCWlmIChtYXhfZnJhbWUgPiBNQVhJTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUpIHsKKwkJCWlmIChtYXhfZnJhbWUgPiAoRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSkgewogCQkJCURQUklOVEsoUFJPQkUsIEVSUiwKIAkJCSAgICAgICAgICAgIAkiSnVtYm8gRnJhbWVzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM0ODksOCArMzUyMywxMCBAQAogCiAJLyogTk9URTogbmV0ZGV2X2FsbG9jX3NrYiByZXNlcnZlcyAxNiBieXRlcywgYW5kIHR5cGljYWxseSBORVRfSVBfQUxJR04KIAkgKiBtZWFucyB3ZSByZXNlcnZlIDIgbW9yZSwgdGhpcyBwdXNoZXMgdXMgdG8gYWxsb2NhdGUgZnJvbSB0aGUgbmV4dAotCSAqIGxhcmdlciBzbGFiIHNpemUKLQkgKiBpLmUuIFJYQlVGRkVSXzIwNDggLS0+IHNpemUtNDA5NiBzbGFiICovCisJICogbGFyZ2VyIHNsYWIgc2l6ZS4KKwkgKiBpLmUuIFJYQlVGRkVSXzIwNDggLS0+IHNpemUtNDA5NiBzbGFiCisJICogIGhvd2V2ZXIgd2l0aCB0aGUgbmV3ICpfanVtYm9fcngqIHJvdXRpbmVzLCBqdW1ibyByZWNlaXZlcyB3aWxsIHVzZQorCSAqICBmcmFnbWVudGVkIHNrYnMgKi8KIAogCWlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfMjU2KQogCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfMjU2OwpAQCAtMzUwMCwxNiArMzUzNiwxNiBAQAogCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfMTAyNDsKIAllbHNlIGlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfMjA0OCkKIAkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IEUxMDAwX1JYQlVGRkVSXzIwNDg7Ci0JZWxzZSBpZiAobWF4X2ZyYW1lIDw9IEUxMDAwX1JYQlVGRkVSXzQwOTYpCi0JCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl80MDk2OwotCWVsc2UgaWYgKG1heF9mcmFtZSA8PSBFMTAwMF9SWEJVRkZFUl84MTkyKQotCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRTEwMDBfUlhCVUZGRVJfODE5MjsKLQllbHNlIGlmIChtYXhfZnJhbWUgPD0gRTEwMDBfUlhCVUZGRVJfMTYzODQpCisJZWxzZQorI2lmIChQQUdFX1NJWkUgPj0gRTEwMDBfUlhCVUZGRVJfMTYzODQpCiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBFMTAwMF9SWEJVRkZFUl8xNjM4NDsKKyNlbGlmIChQQUdFX1NJWkUgPj0gRTEwMDBfUlhCVUZGRVJfNDA5NikKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IFBBR0VfU0laRTsKKyNlbmRpZgogCiAJLyogYWRqdXN0IGFsbG9jYXRpb24gaWYgTFBFIHByb3RlY3RzIHVzLCBhbmQgd2UgYXJlbid0IHVzaW5nIFNCUCAqLwogCWlmICghaHctPnRiaV9jb21wYXRpYmlsaXR5X29uICYmCi0JICAgICgobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfRlJBTUVfU0laRSkgfHwKKwkgICAgKChtYXhfZnJhbWUgPT0gKEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikpIHx8CiAJICAgICAobWF4X2ZyYW1lID09IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKSkpCiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRTsKIApAQCAtMzk4Nyw5ICs0MDIzLDIyNyBAQAogfQogCiAvKioKKyAqIGUxMDAwX2NvbnN1bWVfcGFnZSAtIGhlbHBlciBmdW5jdGlvbgorICoqLworc3RhdGljIHZvaWQgZTEwMDBfY29uc3VtZV9wYWdlKHN0cnVjdCBlMTAwMF9idWZmZXIgKmJpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBsZW5ndGgpCit7CisJYmktPnBhZ2UgPSBOVUxMOworCXNrYi0+bGVuICs9IGxlbmd0aDsKKwlza2ItPmRhdGFfbGVuICs9IGxlbmd0aDsKKwlza2ItPnRydWVzaXplICs9IGxlbmd0aDsKK30KKworLyoqCisgKiBlMTAwMF9yZWNlaXZlX3NrYiAtIGhlbHBlciBmdW5jdGlvbiB0byBoYW5kbGUgcnggaW5kaWNhdGlvbnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHN0YXR1czogZGVzY3JpcHRvciBzdGF0dXMgZmllbGQgYXMgd3JpdHRlbiBieSBoYXJkd2FyZQorICogQHZsYW46IGRlc2NyaXB0b3IgdmxhbiBmaWVsZCBhcyB3cml0dGVuIGJ5IGhhcmR3YXJlIChubyBsZS9iZSBjb252ZXJzaW9uKQorICogQHNrYjogcG9pbnRlciB0byBza19idWZmIHRvIGJlIGluZGljYXRlZCB0byBzdGFjaworICovCitzdGF0aWMgdm9pZCBlMTAwMF9yZWNlaXZlX3NrYihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwgdTggc3RhdHVzLAorCQkJICAgICAgX19sZTE2IHZsYW4sIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKHVubGlrZWx5KGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpKSB7CisJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgbGUxNl90b19jcHUodmxhbikgJgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfUlhEX1NQQ19WTEFOX01BU0spOworCX0gZWxzZSB7CisJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJfQorfQorCisvKioKKyAqIGUxMDAwX2NsZWFuX2p1bWJvX3J4X2lycSAtIFNlbmQgcmVjZWl2ZWQgZGF0YSB1cCB0aGUgbmV0d29yayBzdGFjazsgbGVnYWN5CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEByeF9yaW5nOiByaW5nIHRvIGNsZWFuCisgKiBAd29ya19kb25lOiBhbW91bnQgb2YgbmFwaSB3b3JrIGNvbXBsZXRlZCB0aGlzIGNhbGwKKyAqIEB3b3JrX3RvX2RvOiBtYXggYW1vdW50IG9mIHdvcmsgYWxsb3dlZCBmb3IgdGhpcyBjYWxsIHRvIGRvCisgKgorICogdGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhY3R1YWwgY2xlYW5pbmcgd2FzIGRvbmUsIHRoZXJlCisgKiBpcyBubyBndWFyYW50ZWUgdGhhdCBldmVyeXRoaW5nIHdhcyBjbGVhbmVkCisgKi8KK3N0YXRpYyBib29sIGUxMDAwX2NsZWFuX2p1bWJvX3J4X2lycShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAorCQkJCSAgICAgaW50ICp3b3JrX2RvbmUsIGludCB3b3JrX3RvX2RvKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGUxMDAwX3J4X2Rlc2MgKnJ4X2Rlc2MsICpuZXh0X3J4ZDsKKwlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbywgKm5leHRfYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXUzMiBsZW5ndGg7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGNsZWFuZWRfY291bnQgPSAwOworCWJvb2wgY2xlYW5lZCA9IGZhbHNlOworCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlcz0wLCB0b3RhbF9yeF9wYWNrZXRzPTA7CisKKwlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKKwlyeF9kZXNjID0gRTEwMDBfUlhfREVTQygqcnhfcmluZywgaSk7CisJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisKKwl3aGlsZSAocnhfZGVzYy0+c3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfREQpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJdTggc3RhdHVzOworCisJCWlmICgqd29ya19kb25lID49IHdvcmtfdG9fZG8pCisJCQlicmVhazsKKwkJKCp3b3JrX2RvbmUpKys7CisKKwkJc3RhdHVzID0gcnhfZGVzYy0+c3RhdHVzOworCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOworCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKworCQlpZiAoKytpID09IHJ4X3JpbmctPmNvdW50KSBpID0gMDsKKwkJbmV4dF9yeGQgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKKwkJcHJlZmV0Y2gobmV4dF9yeGQpOworCisJCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCisJCWNsZWFuZWQgPSB0cnVlOworCQljbGVhbmVkX2NvdW50Kys7CisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5kbWEsIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCisJCSAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCisJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPmxlbmd0aCk7CisKKwkJLyogZXJyb3JzIGlzIG9ubHkgdmFsaWQgZm9yIEREICsgRU9QIGRlc2NyaXB0b3JzICovCisJCWlmICh1bmxpa2VseSgoc3RhdHVzICYgRTEwMDBfUlhEX1NUQVRfRU9QKSAmJgorCQkgICAgKHJ4X2Rlc2MtPmVycm9ycyAmIEUxMDAwX1JYRF9FUlJfRlJBTUVfRVJSX01BU0spKSkgeworCQkJdTggbGFzdF9ieXRlID0gKihza2ItPmRhdGEgKyBsZW5ndGggLSAxKTsKKwkJCWlmIChUQklfQUNDRVBUKGh3LCBzdGF0dXMsIHJ4X2Rlc2MtPmVycm9ycywgbGVuZ3RoLAorCQkJCSAgICAgICBsYXN0X2J5dGUpKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssCisJCQkJICAgICAgICAgICAgICAgICAgaXJxX2ZsYWdzKTsKKwkJCQllMTAwMF90YmlfYWRqdXN0X3N0YXRzKGh3LCAmYWRhcHRlci0+c3RhdHMsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIHNrYi0+ZGF0YSk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c3RhdHNfbG9jaywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIGlycV9mbGFncyk7CisJCQkJbGVuZ3RoLS07CisJCQl9IGVsc2UgeworCQkJCS8qIHJlY3ljbGUgYm90aCBwYWdlIGFuZCBza2IgKi8KKwkJCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQkJCS8qIGFuIGVycm9yIG1lYW5zIGFueSBjaGFpbiBnb2VzIG91dCB0aGUgd2luZG93CisJCQkJICogdG9vICovCisJCQkJaWYgKHJ4X3JpbmctPnJ4X3NrYl90b3ApCisJCQkJCWRldl9rZnJlZV9za2IocnhfcmluZy0+cnhfc2tiX3RvcCk7CisJCQkJcnhfcmluZy0+cnhfc2tiX3RvcCA9IE5VTEw7CisJCQkJZ290byBuZXh0X2Rlc2M7CisJCQl9CisJCX0KKworI2RlZmluZSByeHRvcCByeF9yaW5nLT5yeF9za2JfdG9wCisJCWlmICghKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX0VPUCkpIHsKKwkJCS8qIHRoaXMgZGVzY3JpcHRvciBpcyBvbmx5IHRoZSBiZWdpbm5pbmcgKG9yIG1pZGRsZSkgKi8KKwkJCWlmICghcnh0b3ApIHsKKwkJCQkvKiB0aGlzIGlzIHRoZSBiZWdpbm5pbmcgb2YgYSBjaGFpbiAqLworCQkJCXJ4dG9wID0gc2tiOworCQkJCXNrYl9maWxsX3BhZ2VfZGVzYyhyeHRvcCwgMCwgYnVmZmVyX2luZm8tPnBhZ2UsCisJCQkJICAgICAgICAgICAgICAgICAgIDAsIGxlbmd0aCk7CisJCQl9IGVsc2UgeworCQkJCS8qIHRoaXMgaXMgdGhlIG1pZGRsZSBvZiBhIGNoYWluICovCisJCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHJ4dG9wLAorCQkJCSAgICBza2Jfc2hpbmZvKHJ4dG9wKS0+bnJfZnJhZ3MsCisJCQkJICAgIGJ1ZmZlcl9pbmZvLT5wYWdlLCAwLCBsZW5ndGgpOworCQkJCS8qIHJlLXVzZSB0aGUgc2tiLCBvbmx5IGNvbnN1bWVkIHRoZSBwYWdlICovCisJCQkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKKwkJCX0KKwkJCWUxMDAwX2NvbnN1bWVfcGFnZShidWZmZXJfaW5mbywgcnh0b3AsIGxlbmd0aCk7CisJCQlnb3RvIG5leHRfZGVzYzsKKwkJfSBlbHNlIHsKKwkJCWlmIChyeHRvcCkgeworCQkJCS8qIGVuZCBvZiB0aGUgY2hhaW4gKi8KKwkJCQlza2JfZmlsbF9wYWdlX2Rlc2Mocnh0b3AsCisJCQkJICAgIHNrYl9zaGluZm8ocnh0b3ApLT5ucl9mcmFncywKKwkJCQkgICAgYnVmZmVyX2luZm8tPnBhZ2UsIDAsIGxlbmd0aCk7CisJCQkJLyogcmUtdXNlIHRoZSBjdXJyZW50IHNrYiwgd2Ugb25seSBjb25zdW1lZCB0aGUKKwkJCQkgKiBwYWdlICovCisJCQkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKKwkJCQlza2IgPSByeHRvcDsKKwkJCQlyeHRvcCA9IE5VTEw7CisJCQkJZTEwMDBfY29uc3VtZV9wYWdlKGJ1ZmZlcl9pbmZvLCBza2IsIGxlbmd0aCk7CisJCQl9IGVsc2UgeworCQkJCS8qIG5vIGNoYWluLCBnb3QgRU9QLCB0aGlzIGJ1ZiBpcyB0aGUgcGFja2V0CisJCQkJICogY29weWJyZWFrIHRvIHNhdmUgdGhlIHB1dF9wYWdlL2FsbG9jX3BhZ2UgKi8KKwkJCQlpZiAobGVuZ3RoIDw9IGNvcHlicmVhayAmJgorCQkJCSAgICBza2JfdGFpbHJvb20oc2tiKSA+PSBsZW5ndGgpIHsKKwkJCQkJdTggKnZhZGRyOworCQkJCQl2YWRkciA9IGttYXBfYXRvbWljKGJ1ZmZlcl9pbmZvLT5wYWdlLAorCQkJCQkgICAgICAgICAgICAgICAgICAgIEtNX1NLQl9EQVRBX1NPRlRJUlEpOworCQkJCQltZW1jcHkoc2tiX3RhaWxfcG9pbnRlcihza2IpLCB2YWRkciwgbGVuZ3RoKTsKKwkJCQkJa3VubWFwX2F0b21pYyh2YWRkciwKKwkJCQkJICAgICAgICAgICAgICBLTV9TS0JfREFUQV9TT0ZUSVJRKTsKKwkJCQkJLyogcmUtdXNlIHRoZSBwYWdlLCBzbyBkb24ndCBlcmFzZQorCQkJCQkgKiBidWZmZXJfaW5mby0+cGFnZSAqLworCQkJCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKKwkJCQl9IGVsc2UgeworCQkJCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCAwLAorCQkJCQkgICAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPnBhZ2UsIDAsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKKwkJCQkJZTEwMDBfY29uc3VtZV9wYWdlKGJ1ZmZlcl9pbmZvLCBza2IsCisJCQkJCSAgICAgICAgICAgICAgICAgICBsZW5ndGgpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCBYWFggcmVjb21wdXRlIGR1ZSB0byBDUkMgc3RyaXA/ICovCisJCWUxMDAwX3J4X2NoZWNrc3VtKGFkYXB0ZXIsCisJCSAgICAgICAgICAgICAgICAgICh1MzIpKHN0YXR1cykgfAorCQkgICAgICAgICAgICAgICAgICAoKHUzMikocnhfZGVzYy0+ZXJyb3JzKSA8PCAyNCksCisJCSAgICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPmNzdW0pLCBza2IpOworCisJCXBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7CisKKwkJLyogcHJvYmFibHkgYSBsaXR0bGUgc2tld2VkIGR1ZSB0byByZW1vdmluZyBDUkMgKi8KKwkJdG90YWxfcnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCXRvdGFsX3J4X3BhY2tldHMrKzsKKworCQkvKiBldGggdHlwZSB0cmFucyBuZWVkcyBza2ItPmRhdGEgdG8gcG9pbnQgdG8gc29tZXRoaW5nICovCisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIEVUSF9ITEVOKSkgeworCQkJRFBSSU5USyhEUlYsIEVSUiwgInBza2JfbWF5X3B1bGwgZmFpbGVkLlxuIik7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlnb3RvIG5leHRfZGVzYzsKKwkJfQorCisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisKKwkJZTEwMDBfcmVjZWl2ZV9za2IoYWRhcHRlciwgc3RhdHVzLCByeF9kZXNjLT5zcGVjaWFsLCBza2IpOworCituZXh0X2Rlc2M6CisJCXJ4X2Rlc2MtPnN0YXR1cyA9IDA7CisKKwkJLyogcmV0dXJuIHNvbWUgYnVmZmVycyB0byBoYXJkd2FyZSwgb25lIGF0IGEgdGltZSBpcyB0b28gc2xvdyAqLworCQlpZiAodW5saWtlbHkoY2xlYW5lZF9jb3VudCA+PSBFMTAwMF9SWF9CVUZGRVJfV1JJVEUpKSB7CisJCQlhZGFwdGVyLT5hbGxvY19yeF9idWYoYWRhcHRlciwgcnhfcmluZywgY2xlYW5lZF9jb3VudCk7CisJCQljbGVhbmVkX2NvdW50ID0gMDsKKwkJfQorCisJCS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLworCQlyeF9kZXNjID0gbmV4dF9yeGQ7CisJCWJ1ZmZlcl9pbmZvID0gbmV4dF9idWZmZXI7CisJfQorCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOworCisJY2xlYW5lZF9jb3VudCA9IEUxMDAwX0RFU0NfVU5VU0VEKHJ4X3JpbmcpOworCWlmIChjbGVhbmVkX2NvdW50KQorCQlhZGFwdGVyLT5hbGxvY19yeF9idWYoYWRhcHRlciwgcnhfcmluZywgY2xlYW5lZF9jb3VudCk7CisKKwlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzICs9IHRvdGFsX3J4X3BhY2tldHM7CisJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgKz0gdG90YWxfcnhfYnl0ZXM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9wYWNrZXRzICs9IHRvdGFsX3J4X3BhY2tldHM7CisJcmV0dXJuIGNsZWFuZWQ7Cit9CisKKy8qKgogICogZTEwMDBfY2xlYW5fcnhfaXJxIC0gU2VuZCByZWNlaXZlZCBkYXRhIHVwIHRoZSBuZXR3b3JrIHN0YWNrOyBsZWdhY3kKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoqLworICogQHJ4X3Jpbmc6IHJpbmcgdG8gY2xlYW4KKyAqIEB3b3JrX2RvbmU6IGFtb3VudCBvZiBuYXBpIHdvcmsgY29tcGxldGVkIHRoaXMgY2FsbAorICogQHdvcmtfdG9fZG86IG1heCBhbW91bnQgb2Ygd29yayBhbGxvd2VkIGZvciB0aGlzIGNhbGwgdG8gZG8KKyAqLwogc3RhdGljIGJvb2wgZTEwMDBfY2xlYW5fcnhfaXJxKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgICAgIHN0cnVjdCBlMTAwMF9yeF9yaW5nICpyeF9yaW5nLAogCQkJICAgICAgIGludCAqd29ya19kb25lLCBpbnQgd29ya190b19kbykKQEAgLTQwMDEsNyArNDI1NSw2IEBACiAJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBsZW5ndGg7Ci0JdTggbGFzdF9ieXRlOwogCXVuc2lnbmVkIGludCBpOwogCWludCBjbGVhbmVkX2NvdW50ID0gMDsKIAlib29sIGNsZWFuZWQgPSBmYWxzZTsKQEAgLTQwMzMsOSArNDI4Niw3IEBACiAKIAkJY2xlYW5lZCA9IHRydWU7CiAJCWNsZWFuZWRfY291bnQrKzsKLQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LAotCQkgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pbmZvLT5kbWEsCi0JCSAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLCBidWZmZXJfaW5mby0+bGVuZ3RoLAogCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCkBAIC00MDUyLDcgKzQzMDMsNyBAQAogCQl9CiAKIAkJaWYgKHVubGlrZWx5KHJ4X2Rlc2MtPmVycm9ycyAmIEUxMDAwX1JYRF9FUlJfRlJBTUVfRVJSX01BU0spKSB7Ci0JCQlsYXN0X2J5dGUgPSAqKHNrYi0+ZGF0YSArIGxlbmd0aCAtIDEpOworCQkJdTggbGFzdF9ieXRlID0gKihza2ItPmRhdGEgKyBsZW5ndGggLSAxKTsKIAkJCWlmIChUQklfQUNDRVBUKGh3LCBzdGF0dXMsIHJ4X2Rlc2MtPmVycm9ycywgbGVuZ3RoLAogCQkJCSAgICAgICBsYXN0X2J5dGUpKSB7CiAJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKQEAgLTQxMDcsMTMgKzQzNTgsNyBAQAogCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CiAKLQkJaWYgKHVubGlrZWx5KGFkYXB0ZXItPnZsZ3JwICYmCi0JCQkgICAgKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX1ZQKSkpIHsKLQkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAotCQkJCQkJIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnNwZWNpYWwpKTsKLQkJfSBlbHNlIHsKLQkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0JCX0KKwkJZTEwMDBfcmVjZWl2ZV9za2IoYWRhcHRlciwgc3RhdHVzLCByeF9kZXNjLT5zcGVjaWFsLCBza2IpOwogCiBuZXh0X2Rlc2M6CiAJCXJ4X2Rlc2MtPnN0YXR1cyA9IDA7CkBAIC00MTQyLDYgKzQzODcsMTE0IEBACiB9CiAKIC8qKgorICogZTEwMDBfYWxsb2NfanVtYm9fcnhfYnVmZmVycyAtIFJlcGxhY2UgdXNlZCBqdW1ibyByZWNlaXZlIGJ1ZmZlcnMKKyAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAcnhfcmluZzogcG9pbnRlciB0byByZWNlaXZlIHJpbmcgc3RydWN0dXJlCisgKiBAY2xlYW5lZF9jb3VudDogbnVtYmVyIG9mIGJ1ZmZlcnMgdG8gYWxsb2NhdGUgdGhpcyBwYXNzCisgKiovCisKK3N0YXRpYyB2b2lkCitlMTAwMF9hbGxvY19qdW1ib19yeF9idWZmZXJzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcnhfcmluZyAqcnhfcmluZywgaW50IGNsZWFuZWRfY291bnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IGUxMDAwX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm87CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYnVmc3ogPSAyNTYgLQorCSAgICAgICAgICAgICAgICAgICAgIDE2IC8qZm9yIHNrYl9yZXNlcnZlICovIC0KKwkgICAgICAgICAgICAgICAgICAgICBORVRfSVBfQUxJR047CisKKwlpID0gcnhfcmluZy0+bmV4dF90b191c2U7CisJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisKKwl3aGlsZSAoY2xlYW5lZF9jb3VudC0tKSB7CisJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCWlmIChza2IpIHsKKwkJCXNrYl90cmltKHNrYiwgMCk7CisJCQlnb3RvIGNoZWNrX3BhZ2U7CisJCX0KKworCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgYnVmc3opOworCQlpZiAodW5saWtlbHkoIXNrYikpIHsKKwkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KKwkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEZpeCBmb3IgZXJyYXRhIDIzLCBjYW4ndCBjcm9zcyA2NGtCIGJvdW5kYXJ5ICovCisJCWlmICghZTEwMDBfY2hlY2tfNjRrX2JvdW5kKGFkYXB0ZXIsIHNrYi0+ZGF0YSwgYnVmc3opKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiID0gc2tiOworCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAic2tiIGFsaWduIGNoZWNrIGZhaWxlZDogJXUgYnl0ZXMgIgorCQkJCQkgICAgICJhdCAlcFxuIiwgYnVmc3osIHNrYi0+ZGF0YSk7CisJCQkvKiBUcnkgYWdhaW4sIHdpdGhvdXQgZnJlZWluZyB0aGUgcHJldmlvdXMgKi8KKwkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBidWZzeik7CisJCQkvKiBGYWlsZWQgYWxsb2NhdGlvbiwgY3JpdGljYWwgZmFpbHVyZSAqLworCQkJaWYgKCFza2IpIHsKKwkJCQlkZXZfa2ZyZWVfc2tiKG9sZHNrYik7CisJCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCFlMTAwMF9jaGVja182NGtfYm91bmQoYWRhcHRlciwgc2tiLT5kYXRhLCBidWZzeikpIHsKKwkJCQkvKiBnaXZlIHVwICovCisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJCWRldl9rZnJlZV9za2Iob2xkc2tiKTsKKwkJCQlicmVhazsgLyogd2hpbGUgKGNsZWFuZWRfY291bnQtLSkgKi8KKwkJCX0KKworCQkJLyogVXNlIG5ldyBhbGxvY2F0aW9uICovCisJCQlkZXZfa2ZyZWVfc2tiKG9sZHNrYik7CisJCX0KKwkJLyogTWFrZSBidWZmZXIgYWxpZ25tZW50IDIgYmV5b25kIGEgMTYgYnl0ZSBib3VuZGFyeQorCQkgKiB0aGlzIHdpbGwgcmVzdWx0IGluIGEgMTYgYnl0ZSBhbGlnbmVkIElQIGhlYWRlciBhZnRlcgorCQkgKiB0aGUgMTQgYnl0ZSBNQUMgaGVhZGVyIGlzIHJlbW92ZWQKKwkJICovCisJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKKworCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKK2NoZWNrX3BhZ2U6CisJCS8qIGFsbG9jYXRlIGEgbmV3IHBhZ2UgaWYgbmVjZXNzYXJ5ICovCisJCWlmICghYnVmZmVyX2luZm8tPnBhZ2UpIHsKKwkJCWJ1ZmZlcl9pbmZvLT5wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKKwkJCWlmICh1bmxpa2VseSghYnVmZmVyX2luZm8tPnBhZ2UpKSB7CisJCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghYnVmZmVyX2luZm8tPmRtYSkKKwkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3BhZ2UocGRldiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2luZm8tPnBhZ2UsIDAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9pbmZvLT5sZW5ndGgsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOworCQlyeF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOworCisJCWlmICh1bmxpa2VseSgrK2kgPT0gcnhfcmluZy0+Y291bnQpKQorCQkJaSA9IDA7CisJCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCX0KKworCWlmIChsaWtlbHkocnhfcmluZy0+bmV4dF90b191c2UgIT0gaSkpIHsKKwkJcnhfcmluZy0+bmV4dF90b191c2UgPSBpOworCQlpZiAodW5saWtlbHkoaS0tID09IDApKQorCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOworCisJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93CisJCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CisJCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJCSAqIHN1Y2ggYXMgSUEtNjQpLiAqLworCQl3bWIoKTsKKwkJd3JpdGVsKGksIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT5yZHQpOworCX0KK30KKworLyoqCiAgKiBlMTAwMF9hbGxvY19yeF9idWZmZXJzIC0gUmVwbGFjZSB1c2VkIHJlY2VpdmUgYnVmZmVyczsgbGVnYWN5ICYgZXh0ZW5kZWQKICAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiovCkBAIC00MTg2LDYgKzQ1MzksNyBAQAogCQkJLyogRmFpbGVkIGFsbG9jYXRpb24sIGNyaXRpY2FsIGZhaWx1cmUgKi8KIAkJCWlmICghc2tiKSB7CiAJCQkJZGV2X2tmcmVlX3NrYihvbGRza2IpOworCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTQxOTMsNiArNDU0Nyw3IEBACiAJCQkJLyogZ2l2ZSB1cCAqLwogCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQlkZXZfa2ZyZWVfc2tiKG9sZHNrYik7CisJCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKIAkJCQlicmVhazsgLyogd2hpbGUgIWJ1ZmZlcl9pbmZvLT5za2IgKi8KIAkJCX0KIApAQCAtNDIxMCw5ICs0NTY1LDE0IEBACiBtYXBfc2tiOgogCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwKIAkJCQkJCSAgc2tiLT5kYXRhLAotCQkJCQkJICBhZGFwdGVyLT5yeF9idWZmZXJfbGVuLAorCQkJCQkJICBidWZmZXJfaW5mby0+bGVuZ3RoLAogCQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCisJCS8qCisJCSAqIFhYWCBpZiBpdCB3YXMgYWxsb2NhdGVkIGNsZWFubHkgaXQgd2lsbCBuZXZlciBtYXAgdG8gYQorCQkgKiBib3VuZGFyeSBjcm9zc2luZworCQkgKi8KKwogCQkvKiBGaXggZm9yIGVycmF0YSAyMywgY2FuJ3QgY3Jvc3MgNjRrQiBib3VuZGFyeSAqLwogCQlpZiAoIWUxMDAwX2NoZWNrXzY0a19ib3VuZChhZGFwdGVyLAogCQkJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJ1ZmZlcl9pbmZvLT5kbWEsCkBAIC00MjI5LDYgKzQ1ODksNyBAQAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCisJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwogCQkJYnJlYWs7IC8qIHdoaWxlICFidWZmZXJfaW5mby0+c2tiICovCiAJCX0KIAkJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOwpAQCAtNDM1Myw4ICs0NzE0LDYgQEAKIAkJZGF0YS0+cGh5X2lkID0gaHctPnBoeV9hZGRyOwogCQlicmVhazsKIAljYXNlIFNJT0NHTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c3RhdHNfbG9jaywgZmxhZ3MpOwogCQlpZiAoZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBkYXRhLT5yZWdfbnVtICYgMHgxRiwKIAkJCQkgICAmZGF0YS0+dmFsX291dCkpIHsKQEAgLTQzNjQsOCArNDcyMyw2IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnN0YXRzX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKIAkJaWYgKGRhdGEtPnJlZ19udW0gJiB+KDB4MUYpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCW1paV9yZWcgPSBkYXRhLT52YWxfaW47CkBAIC00NDk3LDYgKzQ4NTQsOCBAQAogCQkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KIAkJCXJjdGwgPSBlcjMyKFJDVEwpOwogCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9DRklFTjsKKwkgICAgICAgICAgICAgICAgaWYgKCEobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKKwkJCQlyY3RsIHw9IEUxMDAwX1JDVExfVkZFOwogCQkJZXczMihSQ1RMLCByY3RsKTsKIAkJCWUxMDAwX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKIAkJfQpAQCAtNDUwNyw2ICs0ODY2LDExIEBACiAJCWV3MzIoQ1RSTCwgY3RybCk7CiAKIAkJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlICE9IGUxMDAwX2ljaDhsYW4pIHsKKwkJCS8qIGRpc2FibGUgVkxBTiByZWNlaXZlIGZpbHRlcmluZyAqLworCQkJcmN0bCA9IGVyMzIoUkNUTCk7CisJCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1ZGRTsKKwkJCWV3MzIoUkNUTCwgcmN0bCk7CisKIAkJCWlmIChhZGFwdGVyLT5tbmdfdmxhbl9pZCAhPQogCQkJICAgICh1MTYpRTEwMDBfTU5HX1ZMQU5fTk9ORSkgewogCQkJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IGZhOTJhNjguLjE2YzE5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTQwOTcsNyArNDA5Nyw4IEBACiB9CiAKICNkZWZpbmUgVFhEX1VTRV9DT1VOVChTLCBYKSAoKChTKSA+PiAoWCkpICsgMSApCi1zdGF0aWMgaW50IGUxMDAwX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlMTAwMF94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKQEAgLTQzNDUsOCArNDM0Niw2IEBACiAJCWRhdGEtPnBoeV9pZCA9IGFkYXB0ZXItPmh3LnBoeS5hZGRyOwogCQlicmVhazsKIAljYXNlIFNJT0NHTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlzd2l0Y2ggKGRhdGEtPnJlZ19udW0gJiAweDFGKSB7CiAJCWNhc2UgTUlJX0JNQ1I6CiAJCQlkYXRhLT52YWxfb3V0ID0gYWRhcHRlci0+cGh5X3JlZ3MuYm1jcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvLmMgYi9kcml2ZXJzL25ldC9lZXByby5jCmluZGV4IDRmNzAwMzQuLjFlOTM0MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VlcHJvLmMKKysrIGIvZHJpdmVycy9uZXQvZWVwcm8uYwpAQCAtMzA5LDcgKzMwOSw4IEBACiAKIHN0YXRpYyBpbnQJZWVwcm9fcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhdXRvcHJvYmUpOwogc3RhdGljIGludAllZXByb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludAllZXByb19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlZXByb19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZWVwcm9faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCAJZWVwcm9fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAJZWVwcm9fdHJhbnNtaXRfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTEzMyw3ICsxMTM0LDggQEAKIH0KIAogCi1zdGF0aWMgaW50IGVlcHJvX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWVwcm9fc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVlcHJvX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExNDUsNyArMTE0Nyw3IEBACiAKIAlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQogCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CkBAIC0xMTc4LDcgKzExODAsNyBAQAogCWVlcHJvX2VuX2ludChpb2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCmluZGV4IDFmMDE2ZDYuLjU5MmRlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwpAQCAtMjQ2LDcgKzI0Niw4IEBACiBzdGF0aWMgaW50IGVleHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZWV4cF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVleHBfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZWV4cF94bWl0KHN0cnVjdCBza19idWZmICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGVleHBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAorCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIGlycXJldHVybl90IGVleHBfaXJxKGludCBpcnEsIHZvaWQgKmRldl9hZGRyKTsKIHN0YXRpYyB2b2lkIGVleHBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTY1MCw3ICs2NTEsNyBAQAogICogQ2FsbGVkIHRvIHRyYW5zbWl0IGEgcGFja2V0LCBvciB0byBhbGxvdyB1cyB0byByaWdodCBvdXJzZWx2ZXMKICAqIGlmIHRoZSBrZXJuZWwgdGhpbmtzIHdlJ3ZlIGRpZWQuCiAgKi8KLXN0YXRpYyBpbnQgZWV4cF94bWl0KHN0cnVjdCBza19idWZmICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWV4cF94bWl0KHN0cnVjdCBza19idWZmICpidWYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc2hvcnQgbGVuZ3RoID0gYnVmLT5sZW47CiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNjY0LDcgKzY2NSw3IEBACiAKIAlpZiAoYnVmLT5sZW4gPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKGJ1ZiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAKQEAgLTY5MSw3ICs2OTIsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAjZW5kaWYKIAllbmFibGVfaXJxKGRldi0+aXJxKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKaW5kZXggZmM2Y2MwMy4uMTE3ZmM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYworKysgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCkBAIC0xMjc2LDcgKzEyNzYsOCBAQAogCWxvY2tlZF9yZWdfYmZzZXQocHJpdiwgRUNPTjEsIEVDT04xX1RYUlRTKTsKIH0KIAotc3RhdGljIGludCBlbmMyOGo2MF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGVuYzI4ajYwX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVuYzI4ajYwX25ldCAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTEyOTksNyArMTMwMCw3IEBACiAJcHJpdi0+dHhfc2tiID0gc2tiOwogCXNjaGVkdWxlX3dvcmsoJnByaXYtPnR4X3dvcmspOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgZW5jMjhqNjBfdHhfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKaW5kZXggYzI2Y2VhMC4uZTFjMjA3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKQEAgLTI5LDI4ICsyOSwzNCBAQAogI2luY2x1ZGUgInZuaWNfY3EuaCIKICNpbmNsdWRlICJ2bmljX2ludHIuaCIKICNpbmNsdWRlICJ2bmljX3N0YXRzLmgiCisjaW5jbHVkZSAidm5pY19uaWMuaCIKICNpbmNsdWRlICJ2bmljX3Jzcy5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gMTBHIEV0aGVybmV0IERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC45MzMiCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJCSJDb3B5cmlnaHQgMjAwOCBDaXNjbyBTeXN0ZW1zLCBJbmMiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4xLjAuMTAwIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0IDIwMDgtMjAwOSBDaXNjbyBTeXN0ZW1zLCBJbmMiCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKIAogI2RlZmluZSBFTklDX0xST19NQVhfREVTQwk4CiAjZGVmaW5lIEVOSUNfTFJPX01BWF9BR0dSCTY0CiAKKyNkZWZpbmUgRU5JQ19CQVJTX01BWAkJNgorCisjZGVmaW5lIEVOSUNfV1FfTUFYCQk4CisjZGVmaW5lIEVOSUNfUlFfTUFYCQk4CisjZGVmaW5lIEVOSUNfQ1FfTUFYCQkoRU5JQ19XUV9NQVggKyBFTklDX1JRX01BWCkKKyNkZWZpbmUgRU5JQ19JTlRSX01BWAkJKEVOSUNfQ1FfTUFYICsgMikKKwogZW51bSBlbmljX2NxX2luZGV4IHsKIAlFTklDX0NRX1JRLAogCUVOSUNfQ1FfV1EsCi0JRU5JQ19DUV9NQVgsCiB9OwogCiBlbnVtIGVuaWNfaW50eF9pbnRyX2luZGV4IHsKIAlFTklDX0lOVFhfV1FfUlEsCiAJRU5JQ19JTlRYX0VSUiwKIAlFTklDX0lOVFhfTk9USUZZLAotCUVOSUNfSU5UWF9NQVgsCiB9OwogCiBlbnVtIGVuaWNfbXNpeF9pbnRyX2luZGV4IHsKQEAgLTczLDcgKzc5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCB2bmljX2VuZXRfY29uZmlnIGNvbmZpZzsKLQlzdHJ1Y3Qgdm5pY19kZXZfYmFyIGJhcjA7CisJc3RydWN0IHZuaWNfZGV2X2JhciBiYXJbRU5JQ19CQVJTX01BWF07CiAJc3RydWN0IHZuaWNfZGV2ICp2ZGV2OwogCXN0cnVjdCB0aW1lcl9saXN0IG5vdGlmeV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXQ7CkBAIC04OCwyMiArOTQsMjMgQEAKIAl1MzIgcG9ydF9tdHU7CiAKIAkvKiB3b3JrIHF1ZXVlIGNhY2hlIGxpbmUgc2VjdGlvbiAqLwotCV9fX19jYWNoZWxpbmVfYWxpZ25lZCBzdHJ1Y3Qgdm5pY193cSB3cVsxXTsKLQlzcGlubG9ja190IHdxX2xvY2tbMV07CisJX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX3dxIHdxW0VOSUNfV1FfTUFYXTsKKwlzcGlubG9ja190IHdxX2xvY2tbRU5JQ19XUV9NQVhdOwogCXVuc2lnbmVkIGludCB3cV9jb3VudDsKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbl9ncm91cDsKIAogCS8qIHJlY2VpdmUgcXVldWUgY2FjaGUgbGluZSBzZWN0aW9uICovCi0JX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX3JxIHJxWzFdOworCV9fX19jYWNoZWxpbmVfYWxpZ25lZCBzdHJ1Y3Qgdm5pY19ycSBycVtFTklDX1JRX01BWF07CiAJdW5zaWduZWQgaW50IHJxX2NvdW50OwogCWludCAoKnJxX2FsbG9jX2J1Zikoc3RydWN0IHZuaWNfcnEgKnJxKTsKKwl1NjQgcnFfdHJ1bmNhdGVkX3BrdHM7CiAJdTY0IHJxX2JhZF9mY3M7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CiAJc3RydWN0IG5ldF9scm9fZGVzYyBscm9fZGVzY1tFTklDX0xST19NQVhfREVTQ107CiAKIAkvKiBpbnRlcnJ1cHQgcmVzb3VyY2UgY2FjaGUgbGluZSBzZWN0aW9uICovCi0JX19fX2NhY2hlbGluZV9hbGlnbmVkIHN0cnVjdCB2bmljX2ludHIgaW50cltFTklDX01TSVhfTUFYXTsKKwlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfaW50ciBpbnRyW0VOSUNfSU5UUl9NQVhdOwogCXVuc2lnbmVkIGludCBpbnRyX2NvdW50OwogCXUzMiBfX2lvbWVtICpsZWdhY3lfcGJhOwkJLyogbWVtb3J5LW1hcHBlZCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwppbmRleCA4MDA1YjYwLi5kNjlkNTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKQEAgLTQ0LDEwICs0NCwxNSBAQAogI2luY2x1ZGUgImVuaWMuaCIKIAogI2RlZmluZSBFTklDX05PVElGWV9USU1FUl9QRVJJT0QJKDIgKiBIWikKKyNkZWZpbmUgV1FfRU5FVF9NQVhfREVTQ19MRU4JCSgxIDw8IFdRX0VORVRfTEVOX0JJVFMpCisjZGVmaW5lIE1BWF9UU08JCQkJKDEgPDwgMTYpCisjZGVmaW5lIEVOSUNfREVTQ19NQVhfU1BMSVRTCQkoTUFYX1RTTyAvIFdRX0VORVRfTUFYX0RFU0NfTEVOICsgMSkKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJU0NPX1ZJQ19FTkVUICAgICAgICAgMHgwMDQzICAvKiBldGhlcm5ldCB2bmljICovCiAKIC8qIFN1cHBvcnRlZCBkZXZpY2VzICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZW5pY19pZF90YWJsZVtdID0gewotCXsgUENJX1ZERVZJQ0UoQ0lTQ08sIDB4MDA0MykgfSwKKwl7IFBDSV9WREVWSUNFKENJU0NPLCBQQ0lfREVWSUNFX0lEX0NJU0NPX1ZJQ19FTkVUKSB9LAogCXsgMCwgfQkvKiBlbmQgb2YgdGFibGUgKi8KIH07CiAKQEAgLTI1Niw3ICsyNjEsNyBAQAogCWVuaWMtPm1zZ19lbmFibGUgPSB2YWx1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBlbmljX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlbmljX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBlbmljX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBlbmljX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwgPSBlbmljX2dldF9tc2dsZXZlbCwKQEAgLTMxMCw3ICszMTUsOCBAQAogCQlvcGFxdWUpOwogCiAJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZW5pYy0+bmV0ZGV2KSAmJgotCSAgICB2bmljX3dxX2Rlc2NfYXZhaWwoJmVuaWMtPndxW3FfbnVtYmVyXSkgPj0gTUFYX1NLQl9GUkFHUyArIDEpCisJICAgIHZuaWNfd3FfZGVzY19hdmFpbCgmZW5pYy0+d3FbcV9udW1iZXJdKSA+PQorCSAgICAoTUFYX1NLQl9GUkFHUyArIEVOSUNfREVTQ19NQVhfU1BMSVRTKSkKIAkJbmV0aWZfd2FrZV9xdWV1ZShlbmljLT5uZXRkZXYpOwogCiAJc3Bpbl91bmxvY2soJmVuaWMtPndxX2xvY2tbcV9udW1iZXJdKTsKQEAgLTM1Niw3ICszNjIsNyBAQAogewogCXUzMiBtdHUgPSB2bmljX2Rldl9tdHUoZW5pYy0+dmRldik7CiAKLQlpZiAobXR1ICE9IGVuaWMtPnBvcnRfbXR1KSB7CisJaWYgKG10dSAmJiBtdHUgIT0gZW5pYy0+cG9ydF9tdHUpIHsKIAkJaWYgKG10dSA8IGVuaWMtPm5ldGRldi0+bXR1KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKIAkJCQkiJXM6IGludGVyZmFjZSBNVFUgKCVkKSBzZXQgaGlnaGVyICIKQEAgLTUyNSw3ICs1MzEsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbGVuX2xlZnQgPSBza2ItPmxlbiAtIGhlYWRfbGVuOwogCWludCBlb3AgPSAobGVuX2xlZnQgPT0gMCk7CiAKLQkvKiBRdWV1ZSB0aGUgbWFpbiBza2IgZnJhZ21lbnQgKi8KKwkvKiBRdWV1ZSB0aGUgbWFpbiBza2IgZnJhZ21lbnQuIFRoZSBmcmFnbWVudHMgYXJlIG5vIGxhcmdlcgorCSAqIHRoYW4gbWF4IE1UVSg5MDAwKStFVEhfSERSX0xFTigxNCkgYnl0ZXMsIHdoaWNoIGlzIGxlc3MKKwkgKiB0aGFuIFdRX0VORVRfTUFYX0RFU0NfTEVOIGxlbmd0aC4gU28gb25seSBvbmUgZGVzY3JpcHRvcgorCSAqIHBlciBmcmFnbWVudCBpcyBxdWV1ZWQuCisJICovCiAJZW5pY19xdWV1ZV93cV9kZXNjKHdxLCBza2IsCiAJCXBjaV9tYXBfc2luZ2xlKGVuaWMtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCWhlYWRfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKSwKQEAgLTU0Nyw3ICs1NTcsMTEgQEAKIAl1bnNpZ25lZCBpbnQgY3N1bV9vZmZzZXQgPSBoZHJfbGVuICsgc2tiLT5jc3VtX29mZnNldDsKIAlpbnQgZW9wID0gKGxlbl9sZWZ0ID09IDApOwogCi0JLyogUXVldWUgdGhlIG1haW4gc2tiIGZyYWdtZW50ICovCisJLyogUXVldWUgdGhlIG1haW4gc2tiIGZyYWdtZW50LiBUaGUgZnJhZ21lbnRzIGFyZSBubyBsYXJnZXIKKwkgKiB0aGFuIG1heCBNVFUoOTAwMCkrRVRIX0hEUl9MRU4oMTQpIGJ5dGVzLCB3aGljaCBpcyBsZXNzCisJICogdGhhbiBXUV9FTkVUX01BWF9ERVNDX0xFTiBsZW5ndGguIFNvIG9ubHkgb25lIGRlc2NyaXB0b3IKKwkgKiBwZXIgZnJhZ21lbnQgaXMgcXVldWVkLgorCSAqLwogCWVuaWNfcXVldWVfd3FfZGVzY19jc3VtX2w0KHdxLCBza2IsCiAJCXBjaV9tYXBfc2luZ2xlKGVuaWMtPnBkZXYsIHNrYi0+ZGF0YSwKIAkJCWhlYWRfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKSwKQEAgLTU2NSwxMCArNTc5LDE0IEBACiAJc3RydWN0IHZuaWNfd3EgKndxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbXNzLAogCWludCB2bGFuX3RhZ19pbnNlcnQsIHVuc2lnbmVkIGludCB2bGFuX3RhZykKIHsKLQl1bnNpZ25lZCBpbnQgaGVhZF9sZW4gPSBza2JfaGVhZGxlbihza2IpOwotCXVuc2lnbmVkIGludCBsZW5fbGVmdCA9IHNrYi0+bGVuIC0gaGVhZF9sZW47CisJdW5zaWduZWQgaW50IGZyYWdfbGVuX2xlZnQgPSBza2JfaGVhZGxlbihza2IpOworCXVuc2lnbmVkIGludCBsZW5fbGVmdCA9IHNrYi0+bGVuIC0gZnJhZ19sZW5fbGVmdDsKIAl1bnNpZ25lZCBpbnQgaGRyX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYik7CiAJaW50IGVvcCA9IChsZW5fbGVmdCA9PSAwKTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisJc2tiX2ZyYWdfdCAqZnJhZzsKIAogCS8qIFByZWxvYWQgVENQIGNzdW0gZmllbGQgd2l0aCBJUCBwc2V1ZG8gaGRyIGNhbGN1bGF0ZWQKIAkgKiB3aXRoIElQIGxlbmd0aCBzZXQgdG8gemVyby4gIEhXIHdpbGwgbGF0ZXIgYWRkIGluIGxlbmd0aApAQCAtNTg0LDE3ICs2MDIsNDkgQEAKIAkJCSZpcHY2X2hkcihza2IpLT5kYWRkciwgMCwgSVBQUk9UT19UQ1AsIDApOwogCX0KIAotCS8qIFF1ZXVlIHRoZSBtYWluIHNrYiBmcmFnbWVudCAqLwotCWVuaWNfcXVldWVfd3FfZGVzY190c28od3EsIHNrYiwKLQkJcGNpX21hcF9zaW5nbGUoZW5pYy0+cGRldiwgc2tiLT5kYXRhLAotCQkJaGVhZF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpLAotCQloZWFkX2xlbiwKLQkJbXNzLCBoZHJfbGVuLAotCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLAotCQllb3ApOworCS8qIFF1ZXVlIFdRX0VORVRfTUFYX0RFU0NfTEVOIGxlbmd0aCBkZXNjcmlwdG9ycworCSAqIGZvciB0aGUgbWFpbiBza2IgZnJhZ21lbnQKKwkgKi8KKwl3aGlsZSAoZnJhZ19sZW5fbGVmdCkgeworCQlsZW4gPSBtaW4oZnJhZ19sZW5fbGVmdCwgKHVuc2lnbmVkIGludClXUV9FTkVUX01BWF9ERVNDX0xFTik7CisJCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoZW5pYy0+cGRldiwgc2tiLT5kYXRhICsgb2Zmc2V0LAorCQkJCWxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCWVuaWNfcXVldWVfd3FfZGVzY190c28od3EsIHNrYiwKKwkJCWRtYV9hZGRyLAorCQkJbGVuLAorCQkJbXNzLCBoZHJfbGVuLAorCQkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywKKwkJCWVvcCAmJiAobGVuID09IGZyYWdfbGVuX2xlZnQpKTsKKwkJZnJhZ19sZW5fbGVmdCAtPSBsZW47CisJCW9mZnNldCArPSBsZW47CisJfQogCi0JaWYgKCFlb3ApCi0JCWVuaWNfcXVldWVfd3Ffc2tiX2NvbnQoZW5pYywgd3EsIHNrYiwgbGVuX2xlZnQpOworCWlmIChlb3ApCisJCXJldHVybjsKKworCS8qIFF1ZXVlIFdRX0VORVRfTUFYX0RFU0NfTEVOIGxlbmd0aCBkZXNjcmlwdG9ycworCSAqIGZvciBhZGRpdGlvbmFsIGRhdGEgZnJhZ21lbnRzCisJICovCisJZm9yIChmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsgbGVuX2xlZnQ7IGZyYWcrKykgeworCQlsZW5fbGVmdCAtPSBmcmFnLT5zaXplOworCQlmcmFnX2xlbl9sZWZ0ID0gZnJhZy0+c2l6ZTsKKwkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisKKwkJd2hpbGUgKGZyYWdfbGVuX2xlZnQpIHsKKwkJCWxlbiA9IG1pbihmcmFnX2xlbl9sZWZ0LAorCQkJCSh1bnNpZ25lZCBpbnQpV1FfRU5FVF9NQVhfREVTQ19MRU4pOworCQkJZG1hX2FkZHIgPSBwY2lfbWFwX3BhZ2UoZW5pYy0+cGRldiwgZnJhZy0+cGFnZSwKKwkJCQlvZmZzZXQsIGxlbiwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWVuaWNfcXVldWVfd3FfZGVzY19jb250KHdxLCBza2IsCisJCQkJZG1hX2FkZHIsCisJCQkJbGVuLAorCQkJCShsZW5fbGVmdCA9PSAwKSAmJgorCQkJCShsZW4gPT0gZnJhZ19sZW5fbGVmdCkpOwkvKiBFT1A/ICovCisJCQlmcmFnX2xlbl9sZWZ0IC09IGxlbjsKKwkJCW9mZnNldCArPSBsZW47CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmljX3F1ZXVlX3dxX3NrYihzdHJ1Y3QgZW5pYyAqZW5pYywKQEAgLTYyMiw3ICs2NzIsOCBAQAogfQogCiAvKiBuZXRpZl90eF9sb2NrIGhlbGQsIHByb2Nlc3MgY29udGV4dCB3aXRoIEJIcyBkaXNhYmxlZCwgb3IgQkggKi8KLXN0YXRpYyBpbnQgZW5pY19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3Qgdm5pY193cSAqd3EgPSAmZW5pYy0+d3FbMF07CkBAIC02NDcsNyArNjk4LDggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlbmljLT53cV9sb2NrWzBdLCBmbGFncyk7CiAKLQlpZiAodm5pY193cV9kZXNjX2F2YWlsKHdxKSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSB7CisJaWYgKHZuaWNfd3FfZGVzY19hdmFpbCh3cSkgPAorCSAgICBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgRU5JQ19ERVNDX01BWF9TUExJVFMpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0ICovCiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IHJpbmcgZnVsbCB3aGVuICIKQEAgLTY1OCw3ICs3MTAsNyBAQAogCiAJZW5pY19xdWV1ZV93cV9za2IoZW5pYywgd3EsIHNrYik7CiAKLQlpZiAodm5pY193cV9kZXNjX2F2YWlsKHdxKSA8IE1BWF9TS0JfRlJBR1MgKyAxKQorCWlmICh2bmljX3dxX2Rlc2NfYXZhaWwod3EpIDwgTUFYX1NLQl9GUkFHUyArIEVOSUNfREVTQ19NQVhfU1BMSVRTKQogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmljLT53cV9sb2NrWzBdLCBmbGFncyk7CkBAIC02ODYsOCArNzM4LDkgQEAKIAluZXRfc3RhdHMtPnJ4X2J5dGVzID0gc3RhdHMtPnJ4LnJ4X2J5dGVzX29rOwogCW5ldF9zdGF0cy0+cnhfZXJyb3JzID0gc3RhdHMtPnJ4LnJ4X2Vycm9yczsKIAluZXRfc3RhdHMtPm11bHRpY2FzdCA9IHN0YXRzLT5yeC5yeF9tdWx0aWNhc3RfZnJhbWVzX29rOworCW5ldF9zdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBlbmljLT5ycV90cnVuY2F0ZWRfcGt0czsKIAluZXRfc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBlbmljLT5ycV9iYWRfZmNzOwotCW5ldF9zdGF0cy0+cnhfZHJvcHBlZCA9IHN0YXRzLT5yeC5yeF9ub19idWZzOworCW5ldF9zdGF0cy0+cnhfZHJvcHBlZCA9IHN0YXRzLT5yeC5yeF9ub19idWZzICsgc3RhdHMtPnJ4LnJ4X2Ryb3A7CiAKIAlyZXR1cm4gbmV0X3N0YXRzOwogfQpAQCAtODE3LDExICs4NzAsMTIgQEAKIAlkZXZfa2ZyZWVfc2tiX2FueShidWYtPm9zX2J1Zik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmVuaWNfcnFfYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqZW5pY19ycV9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwl1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplICsgTkVUX0lQX0FMSUdOKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgc2l6ZSArIE5FVF9JUF9BTElHTik7CiAKIAlpZiAoc2tiKQogCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CkBAIC04MzIsMTIgKzg4NiwxMyBAQAogc3RhdGljIGludCBlbmljX3JxX2FsbG9jX2J1ZihzdHJ1Y3Qgdm5pY19ycSAqcnEpCiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSB2bmljX2Rldl9wcml2KHJxLT52ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZW5pYy0+bmV0ZGV2OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGxlbiA9IGVuaWMtPm5ldGRldi0+bXR1ICsgRVRIX0hMRU47CisJdW5zaWduZWQgaW50IGxlbiA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU47CiAJdW5zaWduZWQgaW50IG9zX2J1Zl9pbmRleCA9IDA7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAotCXNrYiA9IGVuaWNfcnFfYWxsb2Nfc2tiKGxlbik7CisJc2tiID0gZW5pY19ycV9hbGxvY19za2IobmV0ZGV2LCBsZW4pOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODUwLDYgKzkwNSw1MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVuaWNfcnFfYWxsb2NfYnVmX2ExKHN0cnVjdCB2bmljX3JxICpycSkKK3sKKwlzdHJ1Y3QgcnFfZW5ldF9kZXNjICpkZXNjID0gdm5pY19ycV9uZXh0X2Rlc2MocnEpOworCisJaWYgKHZuaWNfcnFfcG9zdGluZ19zb29uKHJxKSkgeworCisJCS8qIFNXIHdvcmthcm91bmQgZm9yIEEwIEhXIGVycmF0dW06IGlmIHdlJ3JlIGp1c3QgYWJvdXQKKwkJICogdG8gd3JpdGUgcG9zdGVkX2luZGV4LCBpbnNlcnQgYSBkdW1teSBkZXNjCisJCSAqIG9mIHR5cGUgcmVzdmQKKwkJICovCisKKwkJcnFfZW5ldF9kZXNjX2VuYyhkZXNjLCAwLCBSUV9FTkVUX1RZUEVfUkVTVjIsIDApOworCQl2bmljX3JxX3Bvc3QocnEsIDAsIDAsIDAsIDApOworCX0gZWxzZSB7CisJCXJldHVybiBlbmljX3JxX2FsbG9jX2J1ZihycSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZW5pY19zZXRfcnFfYWxsb2NfYnVmKHN0cnVjdCBlbmljICplbmljKQoreworCWVudW0gdm5pY19kZXZfaHdfdmVyc2lvbiBod192ZXI7CisJaW50IGVycjsKKworCWVyciA9IHZuaWNfZGV2X2h3X3ZlcnNpb24oZW5pYy0+dmRldiwgJmh3X3Zlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAoaHdfdmVyKSB7CisJY2FzZSBWTklDX0RFVl9IV19WRVJfQTE6CisJCWVuaWMtPnJxX2FsbG9jX2J1ZiA9IGVuaWNfcnFfYWxsb2NfYnVmX2ExOworCQlicmVhazsKKwljYXNlIFZOSUNfREVWX0hXX1ZFUl9BMjoKKwljYXNlIFZOSUNfREVWX0hXX1ZFUl9VTktOT1dOOgorCQllbmljLT5ycV9hbGxvY19idWYgPSBlbmljX3JxX2FsbG9jX2J1ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZW5pY19nZXRfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqaXBoZHIsCiAJdm9pZCAqKnRjcGgsIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQogewpAQCAtOTMxLDggKzEwMzAsMTIgQEAKIAogCWlmIChwYWNrZXRfZXJyb3IpIHsKIAotCQlpZiAoYnl0ZXNfd3JpdHRlbiA+IDAgJiYgIWZjc19vaykKLQkJCWVuaWMtPnJxX2JhZF9mY3MrKzsKKwkJaWYgKCFmY3Nfb2spIHsKKwkJCWlmIChieXRlc193cml0dGVuID4gMCkKKwkJCQllbmljLT5ycV9iYWRfZmNzKys7CisJCQllbHNlIGlmIChieXRlc193cml0dGVuID09IDApCisJCQkJZW5pYy0+cnFfdHJ1bmNhdGVkX3BrdHMrKzsKKwkJfQogCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKQEAgLTEwNTcsNyArMTE2MCw3IEBACiAJCS8qIFJlcGxlbmlzaCBSUQogCQkgKi8KIAotCQl2bmljX3JxX2ZpbGwoJmVuaWMtPnJxWzBdLCBlbmljX3JxX2FsbG9jX2J1Zik7CisJCXZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7CiAKIAl9IGVsc2UgewogCkBAIC0xMDkyLDcgKzExOTUsNyBAQAogCQkvKiBSZXBsZW5pc2ggUlEKIAkJICovCiAKLQkJdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pY19ycV9hbGxvY19idWYpOworCQl2bmljX3JxX2ZpbGwoJmVuaWMtPnJxWzBdLCBlbmljLT5ycV9hbGxvY19idWYpOwogCiAJCS8qIFJldHVybiBpbnRyIGV2ZW50IGNyZWRpdHMgZm9yIHRoaXMgcG9sbGluZwogCQkgKiBjeWNsZS4gIEFuIGludHIgZXZlbnQgaXMgdGhlIGNvbXBsZXRpb24gb2YgYQpAQCAtMTIxOCw2ICsxMzIxLDcgQEAKIHsKIAlpbnQgZXJyOwogCisJc3Bpbl9sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJc3dpdGNoICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYpKSB7CiAJY2FzZSBWTklDX0RFVl9JTlRSX01PREVfSU5UWDoKIAkJZXJyID0gdm5pY19kZXZfbm90aWZ5X3NldChlbmljLT52ZGV2LCBFTklDX0lOVFhfTk9USUZZKTsKQEAgLTEyMjksNiArMTMzMyw3IEBACiAJCWVyciA9IHZuaWNfZGV2X25vdGlmeV9zZXQoZW5pYy0+dmRldiwgLTEgLyogbm8gaW50ciAqLyk7CiAJCWJyZWFrOwogCX0KKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTEyNjgsNyArMTM3Myw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGVuaWMtPnJxX2NvdW50OyBpKyspIHsKLQkJZXJyID0gdm5pY19ycV9maWxsKCZlbmljLT5ycVtpXSwgZW5pY19ycV9hbGxvY19idWYpOworCQllcnIgPSB2bmljX3JxX2ZpbGwoJmVuaWMtPnJxW2ldLCBlbmljLT5ycV9hbGxvY19idWYpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkJIiVzOiBVbmFibGUgdG8gYWxsb2MgcmVjZWl2ZSBidWZmZXJzLlxuIiwKQEAgLTEyODIsMTIgKzEzODcsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+cnFfY291bnQ7IGkrKykKIAkJdm5pY19ycV9lbmFibGUoJmVuaWMtPnJxW2ldKTsKIAorCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCWVuaWNfYWRkX3N0YXRpb25fYWRkcihlbmljKTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCWVuaWNfc2V0X211bHRpY2FzdF9saXN0KG5ldGRldik7CiAKIAluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CiAJbmFwaV9lbmFibGUoJmVuaWMtPm5hcGkpOworCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCXZuaWNfZGV2X2VuYWJsZShlbmljLT52ZGV2KTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCiAJZm9yIChpID0gMDsgaSA8IGVuaWMtPmludHJfY291bnQ7IGkrKykKIAkJdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltpXSk7CkBAIC0xMjk3LDcgKzE0MDYsOSBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X25vdGlmeV91bnNldDoKKwlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAl2bmljX2Rldl9ub3RpZnlfdW5zZXQoZW5pYy0+dmRldik7CisJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIGVycl9vdXRfZnJlZV9pbnRyOgogCWVuaWNfZnJlZV9pbnRyKGVuaWMpOwogCkBAIC0xMzEzLDcgKzE0MjQsOSBAQAogCiAJZGVsX3RpbWVyX3N5bmMoJmVuaWMtPm5vdGlmeV90aW1lcik7CiAKKwlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAl2bmljX2Rldl9kaXNhYmxlKGVuaWMtPnZkZXYpOworCXNwaW5fdW5sb2NrKCZlbmljLT5kZXZjbWRfbG9jayk7CiAJbmFwaV9kaXNhYmxlKCZlbmljLT5uYXBpKTsKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKQEAgLTEzMzEsNyArMTQ0NCw5IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCXZuaWNfZGV2X25vdGlmeV91bnNldChlbmljLT52ZGV2KTsKKwlzcGluX3VubG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCWVuaWNfZnJlZV9pbnRyKGVuaWMpOwogCiAJKHZvaWQpdm5pY19jcV9zZXJ2aWNlKCZlbmljLT5jcVtFTklDX0NRX1JRXSwKQEAgLTE0NzEsNyArMTU4Niw3IEBACiAJY29uc3QgdTggaWdfdmxhbl9zdHJpcF9lbiA9IDE7CiAKIAkvKiBFbmFibGUgVkxBTiB0YWcgc3RyaXBwaW5nLiAgUlNTIG5vdCBlbmFibGVkICh5ZXQpLgotCSovCisJICovCiAKIAlyZXR1cm4gZW5pY19zZXRfbmljX2NmZyhlbmljLAogCQlyc3NfZGVmYXVsdF9jcHUsIHJzc19oYXNoX3R5cGUsCkBAIC0xNTA2LDggKzE2MjEsOCBAQAogCiBzdGF0aWMgaW50IGVuaWNfc2V0X2ludHJfbW9kZShzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKLQl1bnNpZ25lZCBpbnQgbiA9IEFSUkFZX1NJWkUoZW5pYy0+cnEpOwotCXVuc2lnbmVkIGludCBtID0gQVJSQVlfU0laRShlbmljLT53cSk7CisJdW5zaWduZWQgaW50IG4gPSAxOworCXVuc2lnbmVkIGludCBtID0gMTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSAoSU5UeCwgTVNJLCBNU0ktWCkgZGVwZW5kaW5nCkBAIC0xNjA4LDEyICsxNzIzLDYgQEAKIAl2bmljX2Rldl9zZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYsIFZOSUNfREVWX0lOVFJfTU9ERV9VTktOT1dOKTsKIH0KIAotc3RhdGljIHZvaWQgZW5pY19pb3VubWFwKHN0cnVjdCBlbmljICplbmljKQotewotCWlmIChlbmljLT5iYXIwLnZhZGRyKQotCQlpb3VubWFwKGVuaWMtPmJhcjAudmFkZHIpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuaWNfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCT0gZW5pY19vcGVuLAogCS5uZG9fc3RvcAkJPSBlbmljX3N0b3AsCkBAIC0xNjMyLDYgKzE3NDEsOTcgQEAKICNlbmRpZgogfTsKIAordm9pZCBlbmljX2Rldl9kZWluaXQoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJbmV0aWZfbmFwaV9kZWwoJmVuaWMtPm5hcGkpOworCWVuaWNfZnJlZV92bmljX3Jlc291cmNlcyhlbmljKTsKKwllbmljX2NsZWFyX2ludHJfbW9kZShlbmljKTsKK30KKworaW50IGVuaWNfZGV2X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGVuaWMtPm5ldGRldjsKKwlpbnQgZXJyOworCisJLyogR2V0IHZOSUMgY29uZmlndXJhdGlvbgorCSAqLworCisJZXJyID0gZW5pY19nZXRfdm5pY19jb25maWcoZW5pYyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiR2V0IHZOSUMgY29uZmlndXJhdGlvbiBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogR2V0IGF2YWlsYWJsZSByZXNvdXJjZSBjb3VudHMKKwkgKi8KKworCWVuaWNfZ2V0X3Jlc19jb3VudHMoZW5pYyk7CisKKwkvKiBTZXQgaW50ZXJydXB0IG1vZGUgYmFzZWQgb24gcmVzb3VyY2UgY291bnRzIGFuZCBzeXN0ZW0KKwkgKiBjYXBhYmlsaXRpZXMKKwkgKi8KKworCWVyciA9IGVuaWNfc2V0X2ludHJfbW9kZShlbmljKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJGYWlsZWQgdG8gc2V0IGludHIgbW9kZSwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhbmQgY29uZmlndXJlIHZOSUMgcmVzb3VyY2VzCisJICovCisKKwllcnIgPSBlbmljX2FsbG9jX3ZuaWNfcmVzb3VyY2VzKGVuaWMpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkZhaWxlZCB0byBhbGxvYyB2TklDIHJlc291cmNlcywgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfdm5pY19yZXNvdXJjZXM7CisJfQorCisJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOworCisJZXJyID0gZW5pY19zZXRfcnFfYWxsb2NfYnVmKGVuaWMpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkZhaWxlZCB0byBzZXQgUlEgYnVmZmVyIGFsbG9jYXRvciwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfdm5pY19yZXNvdXJjZXM7CisJfQorCisJZXJyID0gZW5pY19zZXRfbmljY2ZnKGVuaWMpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkZhaWxlZCB0byBjb25maWcgbmljLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKKwl9CisKKwlzd2l0Y2ggKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy0+dmRldikpIHsKKwlkZWZhdWx0OgorCQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZlbmljLT5uYXBpLCBlbmljX3BvbGwsIDY0KTsKKwkJYnJlYWs7CisJY2FzZSBWTklDX0RFVl9JTlRSX01PREVfTVNJWDoKKwkJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmZW5pYy0+bmFwaSwgZW5pY19wb2xsX21zaXgsIDY0KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczoKKwllbmljX2NsZWFyX2ludHJfbW9kZShlbmljKTsKKwllbmljX2ZyZWVfdm5pY19yZXNvdXJjZXMoZW5pYyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBlbmljX2lvdW5tYXAoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbmljLT5iYXIpOyBpKyspCisJCWlmIChlbmljLT5iYXJbaV0udmFkZHIpCisJCQlpb3VubWFwKGVuaWMtPmJhcltpXS52YWRkcik7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTE3MDksMzEgKzE5MDksMjggQEAKIAkJdXNpbmdfZGFjID0gMTsKIAl9CiAKLQkvKiBNYXAgdk5JQyByZXNvdXJjZXMgZnJvbSBCQVIwCisJLyogTWFwIHZOSUMgcmVzb3VyY2VzIGZyb20gQkFSMC01CiAJICovCiAKLQlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJIkJBUjAgbm90IG1lbW9yeS1tYXAnYWJsZSwgYWJvcnRpbmcuXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBlcnJfb3V0X3JlbGVhc2VfcmVnaW9uczsKLQl9Ci0KLQllbmljLT5iYXIwLnZhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIGVuaWMtPmJhcjAubGVuKTsKLQllbmljLT5iYXIwLmJ1c19hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCWVuaWMtPmJhcjAubGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKLQotCWlmICghZW5pYy0+YmFyMC52YWRkcikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiQ2Fubm90IG1lbW9yeS1tYXAgQkFSMCByZXMgaGRyLCBhYm9ydGluZy5cbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9yZWdpb25zOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuaWMtPmJhcik7IGkrKykgeworCQlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBJT1JFU09VUkNFX01FTSkpCisJCQljb250aW51ZTsKKwkJZW5pYy0+YmFyW2ldLmxlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSk7CisJCWVuaWMtPmJhcltpXS52YWRkciA9IHBjaV9pb21hcChwZGV2LCBpLCBlbmljLT5iYXJbaV0ubGVuKTsKKwkJaWYgKCFlbmljLT5iYXJbaV0udmFkZHIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiQ2Fubm90IG1lbW9yeS1tYXAgQkFSICVkLCBhYm9ydGluZy5cbiIsIGkpOworCQkJZXJyID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX291dF9pb3VubWFwOworCQl9CisJCWVuaWMtPmJhcltpXS5idXNfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTsKIAl9CiAKIAkvKiBSZWdpc3RlciB2TklDIGRldmljZQogCSAqLwogCi0JZW5pYy0+dmRldiA9IHZuaWNfZGV2X3JlZ2lzdGVyKE5VTEwsIGVuaWMsIHBkZXYsICZlbmljLT5iYXIwKTsKKwllbmljLT52ZGV2ID0gdm5pY19kZXZfcmVnaXN0ZXIoTlVMTCwgZW5pYywgcGRldiwgZW5pYy0+YmFyLAorCQlBUlJBWV9TSVpFKGVuaWMtPmJhcikpOwogCWlmICghZW5pYy0+dmRldikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkidk5JQyByZWdpc3RyYXRpb24gZmFpbGVkLCBhYm9ydGluZy5cbiIpOwpAQCAtMTc2OCw1MSArMTk2NSwxMyBAQAogCQlnb3RvIGVycl9vdXRfZGV2X2Nsb3NlOwogCX0KIAotCS8qIEdldCB2TklDIGNvbmZpZ3VyYXRpb24KLQkgKi8KLQotCWVyciA9IGVuaWNfZ2V0X3ZuaWNfY29uZmlnKGVuaWMpOworCWVyciA9IGVuaWNfZGV2X2luaXQoZW5pYyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiR2V0IHZOSUMgY29uZmlndXJhdGlvbiBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCQkiRGV2aWNlIGluaXRpYWxpemF0aW9uIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKIAkJZ290byBlcnJfb3V0X2Rldl9jbG9zZTsKIAl9CiAKLQkvKiBHZXQgYXZhaWxhYmxlIHJlc291cmNlIGNvdW50cwotCSAqLwotCi0JZW5pY19nZXRfcmVzX2NvdW50cyhlbmljKTsKLQotCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSBiYXNlZCBvbiByZXNvdXJjZSBjb3VudHMgYW5kIHN5c3RlbQotCSAqIGNhcGFiaWxpdGllcwotCSAqLwotCi0JZXJyID0gZW5pY19zZXRfaW50cl9tb2RlKGVuaWMpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJIkZhaWxlZCB0byBzZXQgaW50ciBtb2RlLCBhYm9ydGluZy5cbiIpOwotCQlnb3RvIGVycl9vdXRfZGV2X2Nsb3NlOwotCX0KLQotCS8qIEFsbG9jYXRlIGFuZCBjb25maWd1cmUgdk5JQyByZXNvdXJjZXMKLQkgKi8KLQotCWVyciA9IGVuaWNfYWxsb2Nfdm5pY19yZXNvdXJjZXMoZW5pYyk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiRmFpbGVkIHRvIGFsbG9jIHZOSUMgcmVzb3VyY2VzLCBhYm9ydGluZy5cbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKLQl9Ci0KLQllbmljX2luaXRfdm5pY19yZXNvdXJjZXMoZW5pYyk7Ci0KLQllcnIgPSBlbmljX3NldF9uaWNjZmcoZW5pYyk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiRmFpbGVkIHRvIGNvbmZpZyBuaWMsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3ZuaWNfcmVzb3VyY2VzOwotCX0KLQogCS8qIFNldHVwIG5vdGlmaWNhdGlvbiB0aW1lciwgSFcgcmVzZXQgdGFzaywgYW5kIGxvY2tzCiAJICovCiAKQEAgLTE4MzcsMjMgKzE5OTYsMTUgQEAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlgKIAkJCSJJbnZhbGlkIE1BQyBhZGRyZXNzLCBhYm9ydGluZy5cbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKKwkJZ290byBlcnJfb3V0X2Rldl9kZWluaXQ7CiAJfQogCiAJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmVuaWNfbmV0ZGV2X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmZW5pY19ldGh0b29sX29wczsKIAotCXN3aXRjaCAodm5pY19kZXZfZ2V0X2ludHJfbW9kZShlbmljLT52ZGV2KSkgewotCWRlZmF1bHQ6Ci0JCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmVuaWMtPm5hcGksIGVuaWNfcG9sbCwgNjQpOwotCQlicmVhazsKLQljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOgotCQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZlbmljLT5uYXBpLCBlbmljX3BvbGxfbXNpeCwgNjQpOwotCQlicmVhazsKLQl9Ci0KLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8CisJCU5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CiAJaWYgKEVOSUNfU0VUVElORyhlbmljLCBUWENTVU0pKQogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CiAJaWYgKEVOSUNfU0VUVElORyhlbmljLCBUU08pKQpAQCAtMTg3OSwxNyArMjAzMCwxNiBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczsKKwkJZ290byBlcnJfb3V0X2Rldl9kZWluaXQ7CiAJfQogCiAJcmV0dXJuIDA7CiAKLWVycl9vdXRfZnJlZV92bmljX3Jlc291cmNlczoKLQllbmljX2ZyZWVfdm5pY19yZXNvdXJjZXMoZW5pYyk7CitlcnJfb3V0X2Rldl9kZWluaXQ6CisJZW5pY19kZXZfZGVpbml0KGVuaWMpOwogZXJyX291dF9kZXZfY2xvc2U6CiAJdm5pY19kZXZfY2xvc2UoZW5pYy0+dmRldik7CiBlcnJfb3V0X3ZuaWNfdW5yZWdpc3RlcjoKLQllbmljX2NsZWFyX2ludHJfbW9kZShlbmljKTsKIAl2bmljX2Rldl91bnJlZ2lzdGVyKGVuaWMtPnZkZXYpOwogZXJyX291dF9pb3VubWFwOgogCWVuaWNfaW91bm1hcChlbmljKTsKQEAgLTE5MTMsOSArMjA2Myw4IEBACiAKIAkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKLQkJZW5pY19mcmVlX3ZuaWNfcmVzb3VyY2VzKGVuaWMpOworCQllbmljX2Rldl9kZWluaXQoZW5pYyk7CiAJCXZuaWNfZGV2X2Nsb3NlKGVuaWMtPnZkZXYpOwotCQllbmljX2NsZWFyX2ludHJfbW9kZShlbmljKTsKIAkJdm5pY19kZXZfdW5yZWdpc3RlcihlbmljLT52ZGV2KTsKIAkJZW5pY19pb3VubWFwKGVuaWMpOwogCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCmluZGV4IGU1ZmM5MzguLjMyMTExMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKQEAgLTE1Niw2ICsxNTYsMjIgQEAKIAlyZXR1cm4gdm5pY19kZXZfY21kKGVuaWMtPnZkZXYsIENNRF9OSUNfQ0ZHLCAmYTAsICZhMSwgd2FpdCk7CiB9CiAKK2ludCBlbmljX3NldF9yc3Nfa2V5KHN0cnVjdCBlbmljICplbmljLCBkbWFfYWRkcl90IGtleV9wYSwgdTY0IGxlbikKK3sKKwl1NjQgYTAgPSAodTY0KWtleV9wYSwgYTEgPSBsZW47CisJaW50IHdhaXQgPSAxMDAwOworCisJcmV0dXJuIHZuaWNfZGV2X2NtZChlbmljLT52ZGV2LCBDTURfUlNTX0tFWSwgJmEwLCAmYTEsIHdhaXQpOworfQorCitpbnQgZW5pY19zZXRfcnNzX2NwdShzdHJ1Y3QgZW5pYyAqZW5pYywgZG1hX2FkZHJfdCBjcHVfcGEsIHU2NCBsZW4pCit7CisJdTY0IGEwID0gKHU2NCljcHVfcGEsIGExID0gbGVuOworCWludCB3YWl0ID0gMTAwMDsKKworCXJldHVybiB2bmljX2Rldl9jbWQoZW5pYy0+dmRldiwgQ01EX1JTU19DUFUsICZhMCwgJmExLCB3YWl0KTsKK30KKwogdm9pZCBlbmljX2ZyZWVfdm5pY19yZXNvdXJjZXMoc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xNzIsMTEgKzE4OCwxOCBAQAogCiB2b2lkIGVuaWNfZ2V0X3Jlc19jb3VudHMoc3RydWN0IGVuaWMgKmVuaWMpCiB7Ci0JZW5pYy0+d3FfY291bnQgPSB2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtPnZkZXYsIFJFU19UWVBFX1dRKTsKLQllbmljLT5ycV9jb3VudCA9IHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy0+dmRldiwgUkVTX1RZUEVfUlEpOwotCWVuaWMtPmNxX2NvdW50ID0gdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLT52ZGV2LCBSRVNfVFlQRV9DUSk7Ci0JZW5pYy0+aW50cl9jb3VudCA9IHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy0+dmRldiwKLQkJUkVTX1RZUEVfSU5UUl9DVFJMKTsKKwllbmljLT53cV9jb3VudCA9IG1pbl90KGludCwKKwkJdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLT52ZGV2LCBSRVNfVFlQRV9XUSksCisJCUVOSUNfV1FfTUFYKTsKKwllbmljLT5ycV9jb3VudCA9IG1pbl90KGludCwKKwkJdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLT52ZGV2LCBSRVNfVFlQRV9SUSksCisJCUVOSUNfUlFfTUFYKTsKKwllbmljLT5jcV9jb3VudCA9IG1pbl90KGludCwKKwkJdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLT52ZGV2LCBSRVNfVFlQRV9DUSksCisJCUVOSUNfQ1FfTUFYKTsKKwllbmljLT5pbnRyX2NvdW50ID0gbWluX3QoaW50LAorCQl2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtPnZkZXYsIFJFU19UWVBFX0lOVFJfQ1RSTCksCisJCUVOSUNfSU5UUl9NQVgpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBQRlggInZOSUMgcmVzb3VyY2VzIGF2YWlsOiAiCiAJCSJ3cSAlZCBycSAlZCBjcSAlZCBpbnRyICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5oIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5oCmluZGV4IDdiZjI3MmYuLmFiYzE5NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmgKQEAgLTEzOSw2ICsxMzksOCBAQAogaW50IGVuaWNfc2V0X25pY19jZmcoc3RydWN0IGVuaWMgKmVuaWMsIHU4IHJzc19kZWZhdWx0X2NwdSwgdTggcnNzX2hhc2hfdHlwZSwKIAl1OCByc3NfaGFzaF9iaXRzLCB1OCByc3NfYmFzZV9jcHUsIHU4IHJzc19lbmFibGUsIHU4IHRzb19pcGlkX3NwbGl0X2VuLAogCXU4IGlnX3ZsYW5fc3RyaXBfZW4pOworaW50IGVuaWNfc2V0X3Jzc19rZXkoc3RydWN0IGVuaWMgKmVuaWMsIGRtYV9hZGRyX3Qga2V5X3BhLCB1NjQgbGVuKTsKK2ludCBlbmljX3NldF9yc3NfY3B1KHN0cnVjdCBlbmljICplbmljLCBkbWFfYWRkcl90IGNwdV9wYSwgdTY0IGxlbik7CiB2b2lkIGVuaWNfZ2V0X3Jlc19jb3VudHMoc3RydWN0IGVuaWMgKmVuaWMpOwogdm9pZCBlbmljX2luaXRfdm5pY19yZXNvdXJjZXMoc3RydWN0IGVuaWMgKmVuaWMpOwogaW50IGVuaWNfYWxsb2Nfdm5pY19yZXNvdXJjZXMoc3RydWN0IGVuaWMgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKaW5kZXggZTIxYjlkNi4uMjlhNDhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYwpAQCAtMzEsNiArMzEsNyBAQAogCiBzdHJ1Y3Qgdm5pY19yZXMgewogCXZvaWQgX19pb21lbSAqdmFkZHI7CisJZG1hX2FkZHJfdCBidXNfYWRkcjsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiB9OwogCkBAIC02NywxMiArNjgsMTUgQEAKIH0KIAogc3RhdGljIGludCB2bmljX2Rldl9kaXNjb3Zlcl9yZXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAotCXN0cnVjdCB2bmljX2Rldl9iYXIgKmJhcikKKwlzdHJ1Y3Qgdm5pY19kZXZfYmFyICpiYXIsIHVuc2lnbmVkIGludCBudW1fYmFycykKIHsKIAlzdHJ1Y3Qgdm5pY19yZXNvdXJjZV9oZWFkZXIgX19pb21lbSAqcmg7CiAJc3RydWN0IHZuaWNfcmVzb3VyY2UgX19pb21lbSAqcjsKIAl1OCB0eXBlOwogCisJaWYgKG51bV9iYXJzID09IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGJhci0+bGVuIDwgVk5JQ19NQVhfUkVTX0hEUl9TSVpFKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidk5JQyBCQVIwIHJlcyBoZHIgbGVuZ3RoIGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDQsNyArMTA4LDEwIEBACiAKIAkJcisrOwogCi0JCWlmIChiYXJfbnVtICE9IDApICAvKiBvbmx5IG1hcHBpbmcgaW4gQkFSMCByZXNvdXJjZXMgKi8KKwkJaWYgKGJhcl9udW0gPj0gbnVtX2JhcnMpCisJCQljb250aW51ZTsKKworCQlpZiAoIWJhcltiYXJfbnVtXS5sZW4gfHwgIWJhcltiYXJfbnVtXS52YWRkcikKIAkJCWNvbnRpbnVlOwogCiAJCXN3aXRjaCAodHlwZSkgewpAQCAtMTE0LDEzICsxMjEsMTMgQEAKIAkJY2FzZSBSRVNfVFlQRV9JTlRSX0NUUkw6CiAJCQkvKiBlYWNoIGNvdW50IGlzIHN0cmlkZSBieXRlcyBsb25nICovCiAJCQlsZW4gPSBjb3VudCAqIFZOSUNfUkVTX1NUUklERTsKLQkJCWlmIChsZW4gKyBiYXJfb2Zmc2V0ID4gYmFyLT5sZW4pIHsKKwkJCWlmIChsZW4gKyBiYXJfb2Zmc2V0ID4gYmFyW2Jhcl9udW1dLmxlbikgewogCQkJCXByaW50ayhLRVJOX0VSUiAidk5JQyBCQVIwIHJlc291cmNlICVkICIKIAkJCQkJIm91dC1vZi1ib3VuZHMsIG9mZnNldCAweCV4ICsgIgogCQkJCQkic2l6ZSAweCV4ID4gYmFyIGxlbiAweCVseFxuIiwKIAkJCQkJdHlwZSwgYmFyX29mZnNldCwKIAkJCQkJbGVuLAotCQkJCQliYXItPmxlbik7CisJCQkJCWJhcltiYXJfbnVtXS5sZW4pOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xMzMsNyArMTQwLDkgQEAKIAkJfQogCiAJCXZkZXYtPnJlc1t0eXBlXS5jb3VudCA9IGNvdW50OwotCQl2ZGV2LT5yZXNbdHlwZV0udmFkZHIgPSAoY2hhciBfX2lvbWVtICopYmFyLT52YWRkciArIGJhcl9vZmZzZXQ7CisJCXZkZXYtPnJlc1t0eXBlXS52YWRkciA9IChjaGFyIF9faW9tZW0gKiliYXJbYmFyX251bV0udmFkZHIgKworCQkJYmFyX29mZnNldDsKKwkJdmRldi0+cmVzW3R5cGVdLmJ1c19hZGRyID0gYmFyW2Jhcl9udW1dLmJ1c19hZGRyICsgYmFyX29mZnNldDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE2Myw2ICsxNzIsMjEgQEAKIAl9CiB9CiAKK2RtYV9hZGRyX3Qgdm5pY19kZXZfZ2V0X3Jlc19idXNfYWRkcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCisJZW51bSB2bmljX3Jlc190eXBlIHR5cGUsIHVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFJFU19UWVBFX1dROgorCWNhc2UgUkVTX1RZUEVfUlE6CisJY2FzZSBSRVNfVFlQRV9DUToKKwljYXNlIFJFU19UWVBFX0lOVFJfQ1RSTDoKKwkJcmV0dXJuIHZkZXYtPnJlc1t0eXBlXS5idXNfYWRkciArCisJCQlpbmRleCAqIFZOSUNfUkVTX1NUUklERTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gdmRldi0+cmVzW3R5cGVdLmJ1c19hZGRyOworCX0KK30KKwogdW5zaWduZWQgaW50IHZuaWNfZGV2X2Rlc2NfcmluZ19zaXplKHN0cnVjdCB2bmljX2Rldl9yaW5nICpyaW5nLAogCXVuc2lnbmVkIGludCBkZXNjX2NvdW50LCB1bnNpZ25lZCBpbnQgZGVzY19zaXplKQogewpAQCAtMjU3LDcgKzI4MSw3IEBACiAJaW93cml0ZTMyKGNtZCwgJmRldmNtZC0+Y21kKTsKIAogCWlmICgoX0NNRF9GTEFHUyhjbWQpICYgX0NNRF9GTEFHU19OT1dBSVQpKQotCQkJcmV0dXJuIDA7CisJCXJldHVybiAwOwogCiAJZm9yIChkZWxheSA9IDA7IGRlbGF5IDwgd2FpdDsgZGVsYXkrKykgewogCkBAIC0zMjUsNiArMzQ5LDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IHZuaWNfZGV2X2h3X3ZlcnNpb24oc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBlbnVtIHZuaWNfZGV2X2h3X3ZlcnNpb24gKmh3X3ZlcikKK3sKKwlzdHJ1Y3Qgdm5pY19kZXZjbWRfZndfaW5mbyAqZndfaW5mbzsKKwlpbnQgZXJyOworCisJZXJyID0gdm5pY19kZXZfZndfaW5mbyh2ZGV2LCAmZndfaW5mbyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChzdHJuY21wKGZ3X2luZm8tPmh3X3ZlcnNpb24sICJBMSIsIHNpemVvZigiQTEiKSkgPT0gMCkKKwkJKmh3X3ZlciA9IFZOSUNfREVWX0hXX1ZFUl9BMTsKKwllbHNlIGlmIChzdHJuY21wKGZ3X2luZm8tPmh3X3ZlcnNpb24sICJBMiIsIHNpemVvZigiQTIiKSkgPT0gMCkKKwkJKmh3X3ZlciA9IFZOSUNfREVWX0hXX1ZFUl9BMjsKKwllbHNlCisJCSpod192ZXIgPSBWTklDX0RFVl9IV19WRVJfVU5LTk9XTjsKKworCXJldHVybiAwOworfQorCiBpbnQgdm5pY19kZXZfc3BlYyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXplLAogCXZvaWQgKnZhbHVlKQogewpAQCAtNTE3LDYgKzU2MCwyMCBAQAogCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGRlbCBhZGRyIFslcE1dLCAlZFxuIiwgYWRkciwgZXJyKTsKIH0KIAoraW50IHZuaWNfZGV2X3JhaXNlX2ludHIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1MTYgaW50cikKK3sKKwl1NjQgYTAgPSBpbnRyLCBhMSA9IDA7CisJaW50IHdhaXQgPSAxMDAwOworCWludCBlcnI7CisKKwllcnIgPSB2bmljX2Rldl9jbWQodmRldiwgQ01EX0lBUiwgJmEwLCAmYTEsIHdhaXQpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJhaXNlIElOVFJbJWRdLCBlcnIgJWRcbiIsCisJCQlpbnRyLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKwogaW50IHZuaWNfZGV2X25vdGlmeV9zZXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1MTYgaW50cikKIHsKIAl1NjQgYTAsIGExOwpAQCAtNjg0LDcgKzc0MSw4IEBACiB9CiAKIHN0cnVjdCB2bmljX2RldiAqdm5pY19kZXZfcmVnaXN0ZXIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAotCXZvaWQgKnByaXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgdm5pY19kZXZfYmFyICpiYXIpCisJdm9pZCAqcHJpdiwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bmljX2Rldl9iYXIgKmJhciwKKwl1bnNpZ25lZCBpbnQgbnVtX2JhcnMpCiB7CiAJaWYgKCF2ZGV2KSB7CiAJCXZkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdm5pY19kZXYpLCBHRlBfQVRPTUlDKTsKQEAgLTY5NSw3ICs3NTMsNyBAQAogCXZkZXYtPnByaXYgPSBwcml2OwogCXZkZXYtPnBkZXYgPSBwZGV2OwogCi0JaWYgKHZuaWNfZGV2X2Rpc2NvdmVyX3Jlcyh2ZGV2LCBiYXIpKQorCWlmICh2bmljX2Rldl9kaXNjb3Zlcl9yZXModmRldiwgYmFyLCBudW1fYmFycykpCiAJCWdvdG8gZXJyX291dDsKIAogCXZkZXYtPmRldmNtZCA9IHZuaWNfZGV2X2dldF9yZXModmRldiwgUkVTX1RZUEVfREVWQ01ELCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAppbmRleCA4YWE4ZGIyLi5mYzVlM2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCkBAIC00MSw2ICs0MSwxMiBAQAogfQogI2VuZGlmCiAKK2VudW0gdm5pY19kZXZfaHdfdmVyc2lvbiB7CisJVk5JQ19ERVZfSFdfVkVSX1VOS05PV04sCisJVk5JQ19ERVZfSFdfVkVSX0ExLAorCVZOSUNfREVWX0hXX1ZFUl9BMiwKK307CisKIGVudW0gdm5pY19kZXZfaW50cl9tb2RlIHsKIAlWTklDX0RFVl9JTlRSX01PREVfVU5LTk9XTiwKIAlWTklDX0RFVl9JTlRSX01PREVfSU5UWCwKQEAgLTc1LDYgKzgxLDggQEAKIAllbnVtIHZuaWNfcmVzX3R5cGUgdHlwZSk7CiB2b2lkIF9faW9tZW0gKnZuaWNfZGV2X2dldF9yZXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBlbnVtIHZuaWNfcmVzX3R5cGUgdHlwZSwKIAl1bnNpZ25lZCBpbnQgaW5kZXgpOworZG1hX2FkZHJfdCB2bmljX2Rldl9nZXRfcmVzX2J1c19hZGRyKHN0cnVjdCB2bmljX2RldiAqdmRldiwKKwllbnVtIHZuaWNfcmVzX3R5cGUgdHlwZSwgdW5zaWduZWQgaW50IGluZGV4KTsKIHVuc2lnbmVkIGludCB2bmljX2Rldl9kZXNjX3Jpbmdfc2l6ZShzdHJ1Y3Qgdm5pY19kZXZfcmluZyAqcmluZywKIAl1bnNpZ25lZCBpbnQgZGVzY19jb3VudCwgdW5zaWduZWQgaW50IGRlc2Nfc2l6ZSk7CiB2b2lkIHZuaWNfZGV2X2NsZWFyX2Rlc2NfcmluZyhzdHJ1Y3Qgdm5pY19kZXZfcmluZyAqcmluZyk7CkBAIC04Niw2ICs5NCw4IEBACiAJdTY0ICphMCwgdTY0ICphMSwgaW50IHdhaXQpOwogaW50IHZuaWNfZGV2X2Z3X2luZm8oc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAogCXN0cnVjdCB2bmljX2RldmNtZF9md19pbmZvICoqZndfaW5mbyk7CitpbnQgdm5pY19kZXZfaHdfdmVyc2lvbihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsCisJZW51bSB2bmljX2Rldl9od192ZXJzaW9uICpod192ZXIpOwogaW50IHZuaWNfZGV2X3NwZWMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgc2l6ZSwKIAl2b2lkICp2YWx1ZSk7CiBpbnQgdm5pY19kZXZfc3RhdHNfY2xlYXIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKQEAgLTk2LDYgKzEwNiw3IEBACiB2b2lkIHZuaWNfZGV2X2FkZF9hZGRyKHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTggKmFkZHIpOwogdm9pZCB2bmljX2Rldl9kZWxfYWRkcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHU4ICphZGRyKTsKIGludCB2bmljX2Rldl9tYWNfYWRkcihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHU4ICptYWNfYWRkcik7CitpbnQgdm5pY19kZXZfcmFpc2VfaW50cihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHUxNiBpbnRyKTsKIGludCB2bmljX2Rldl9ub3RpZnlfc2V0KHN0cnVjdCB2bmljX2RldiAqdmRldiwgdTE2IGludHIpOwogdm9pZCB2bmljX2Rldl9ub3RpZnlfdW5zZXQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9saW5rX3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwpAQCAtMTE3LDYgKzEyOCw3IEBACiBlbnVtIHZuaWNfZGV2X2ludHJfbW9kZSB2bmljX2Rldl9nZXRfaW50cl9tb2RlKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiB2b2lkIHZuaWNfZGV2X3VucmVnaXN0ZXIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHN0cnVjdCB2bmljX2RldiAqdm5pY19kZXZfcmVnaXN0ZXIoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LAotCXZvaWQgKnByaXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgdm5pY19kZXZfYmFyICpiYXIpOworCXZvaWQgKnByaXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgdm5pY19kZXZfYmFyICpiYXIsCisJdW5zaWduZWQgaW50IG51bV9iYXJzKTsKIAogI2VuZGlmIC8qIF9WTklDX0RFVl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCmluZGV4IDI1ODdmMzQuLmQ3OGJiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKQEAgLTEwNSwxNCArMTA1LDYgQEAKIAlDTURfTUFDX0FERFIgICAgICAgICAgICA9IF9DTURDKF9DTURfRElSX1JFQUQsCiAJCQkJCV9DTURfVlRZUEVfRU5FVCB8IF9DTURfVlRZUEVfRkMsIDkpLAogCi0JLyogZGlzYWJsZS9lbmFibGUgcHJvbWlzYyBtb2RlOiAodTgpYTA9MC8xICovCi0vKioqKiogWFhYIERFUFJFQ0FURUQgKioqKiovCi0JQ01EX1BST01JU0NfTU9ERSAgICAgICAgPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDEwKSwKLQotCS8qIGRpc2FibGUvZW5hYmxlIGFsbC1tdWx0aSBtb2RlOiAodTgpYTA9MC8xICovCi0vKioqKiogWFhYIERFUFJFQ0FURUQgKioqKiovCi0JQ01EX0FMTE1VTFRJX01PREUgICAgICAgPSBfQ01EQ05XKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDExKSwKLQogCS8qIGFkZCBhZGRyIGZyb20gKHU0OClhMCAqLwogCUNNRF9BRERSX0FERCAgICAgICAgICAgID0gX0NNRENOVyhfQ01EX0RJUl9XUklURSwKIAkJCQkJX0NNRF9WVFlQRV9FTkVUIHwgX0NNRF9WVFlQRV9GQywgMTIpLApAQCAtMTgyLDcgKzE3NCw5IEBACiAJLyogZGlzYWJsZSB2aXJ0dWFsIGxpbmsgKi8KIAlDTURfRElTQUJMRQkJPSBfQ01EQyhfQ01EX0RJUl9OT05FLCBfQ01EX1ZUWVBFX0FMTCwgMjkpLAogCi0JLyogc3RhdHMgZHVtcCBhbGwgdm5pY3Mgb24gdXBsaW5rIGluIG1lbTogKHU2NClhMD1wYWRkciAodTMyKWExPXVpZiAqLworCS8qIHN0YXRzIGR1bXAgc3VtIG9mIGFsbCB2bmljIHN0YXRzIG9uIHNhbWUgdXBsaW5rIGluIG1lbToKKwkgKiAgICAgKHU2NClhMD1wYWRkcgorCSAqICAgICAodTE2KWExPXNpemVvZiBzdGF0cyBhcmVhICovCiAJQ01EX1NUQVRTX0RVTVBfQUxMCT0gX0NNREMoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfQUxMLCAzMCksCiAKIAkvKiBpbml0IHN0YXR1czoKQEAgLTIxMSw3ICsyMDUsMTIgQEAKIAkvKiBwZXJzaXN0ZW50IGJpbmRpbmcgaW5mbwogCSAqIGluOiAgKHU2NClhMD1wYWRkciBvZiBhcmcKIAkgKiAgICAgICh1MzIpYTE9Q01EX1BFUkJJX1hYWCAqLwotCUNNRF9QRVJCSSAgICAgICAgICAgICAgID0gX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfRkMsIDM3KSwKKwlDTURfUEVSQkkJCT0gX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfRkMsIDM3KSwKKworCS8qIEludGVycnVwdCBBc3NlcnQgUmVnaXN0ZXIgZnVuY3Rpb25hbGl0eQorCSAqIGluOiAodTE2KWEwPWludGVycnVwdCBudW1iZXIgdG8gYXNzZXJ0CisJICovCisJQ01EX0lBUgkJCT0gX0NNRENOVyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9BTEwsIDM4KSwKIH07CiAKIC8qIGZsYWdzIGZvciBDTURfT1BFTiAqLwpAQCAtMjQ0LDYgKzI0Myw3IEBACiAJRVJSX0VOT01FTSA9IDcsCiAJRVJSX0VUSU1FRE9VVCA9IDgsCiAJRVJSX0VMSU5LRE9XTiA9IDksCisJRVJSX0VNQVhSRVMgPSAxMCwKIH07CiAKIHN0cnVjdCB2bmljX2RldmNtZF9md19pbmZvIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5jCmluZGV4IGRkYzM4ZjguLjFmODc4NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYwpAQCAtNjAsMyArNjAsOCBAQAogewogCWlvd3JpdGUzMigwLCAmaW50ci0+Y3RybC0+aW50X2NyZWRpdHMpOwogfQorCit2b2lkIHZuaWNfaW50cl9yYWlzZShzdHJ1Y3Qgdm5pY19pbnRyICppbnRyKQoreworCXZuaWNfZGV2X3JhaXNlX2ludHIoaW50ci0+dmRldiwgKHUxNilpbnRyLT5pbmRleCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmgKaW5kZXggZGFkZjI2Zi4uZWVhZjMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaApAQCAtNDEsNiArNDEsMTMgQEAKICNkZWZpbmUgTklDX0NGR19JR19WTEFOX1NUUklQX0VOX01BU0tfRklFTEQJMVVMCiAjZGVmaW5lIE5JQ19DRkdfSUdfVkxBTl9TVFJJUF9FTl9TSElGVAkJMjQKIAorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNAkJKDEgPDwgMCkKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY0CQkoMSA8PCAxKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNgkJKDEgPDwgMikKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2CQkoMSA8PCAzKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNl9FWAkJKDEgPDwgNCkKKyNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2X0VYCSgxIDw8IDUpCisKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bmljX3NldF9uaWNfY2ZnKHUzMiAqbmljX2NmZywKIAl1OCByc3NfZGVmYXVsdF9jcHUsIHU4IHJzc19oYXNoX3R5cGUsCiAJdTggcnNzX2hhc2hfYml0cywgdTggcnNzX2Jhc2VfY3B1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX3JxLmMgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuYwppbmRleCA5MzY1ZTYzLi43NTU4Mzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuYwpAQCAtNjIsNyArNjIsNiBAQAogCX0KIAogCXJxLT50b191c2UgPSBycS0+dG9fY2xlYW4gPSBycS0+YnVmc1swXTsKLQlycS0+YnVmX2luZGV4ID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTEzLDEyICsxMTIsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB2bmljX3JxX2luaXQoc3RydWN0IHZuaWNfcnEgKnJxLCB1bnNpZ25lZCBpbnQgY3FfaW5kZXgsCit2b2lkIHZuaWNfcnFfaW5pdF9zdGFydChzdHJ1Y3Qgdm5pY19ycSAqcnEsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZmV0Y2hfaW5kZXgsIHVuc2lnbmVkIGludCBwb3N0ZWRfaW5kZXgsCiAJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9lbmFibGUsCiAJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9vZmZzZXQpCiB7CiAJdTY0IHBhZGRyOwotCXUzMiBmZXRjaF9pbmRleDsKIAogCXBhZGRyID0gKHU2NClycS0+cmluZy5iYXNlX2FkZHIgfCBWTklDX1BBRERSX1RBUkdFVDsKIAl3cml0ZXEocGFkZHIsICZycS0+Y3RybC0+cmluZ19iYXNlKTsKQEAgLTEyOCwxNSArMTI3LDI3IEBACiAJaW93cml0ZTMyKGVycm9yX2ludGVycnVwdF9vZmZzZXQsICZycS0+Y3RybC0+ZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CiAJaW93cml0ZTMyKDAsICZycS0+Y3RybC0+ZHJvcHBlZF9wYWNrZXRfY291bnQpOwogCWlvd3JpdGUzMigwLCAmcnEtPmN0cmwtPmVycm9yX3N0YXR1cyk7CisJaW93cml0ZTMyKGZldGNoX2luZGV4LCAmcnEtPmN0cmwtPmZldGNoX2luZGV4KTsKKwlpb3dyaXRlMzIocG9zdGVkX2luZGV4LCAmcnEtPmN0cmwtPnBvc3RlZF9pbmRleCk7CiAKLQkvKiBVc2UgY3VycmVudCBmZXRjaF9pbmRleCBhcyB0aGUgcmluZyBzdGFydGluZyBwb2ludCAqLwotCWZldGNoX2luZGV4ID0gaW9yZWFkMzIoJnJxLT5jdHJsLT5mZXRjaF9pbmRleCk7CiAJcnEtPnRvX3VzZSA9IHJxLT50b19jbGVhbiA9CiAJCSZycS0+YnVmc1tmZXRjaF9pbmRleCAvIFZOSUNfUlFfQlVGX0JMS19FTlRSSUVTXQogCQkJW2ZldGNoX2luZGV4ICUgVk5JQ19SUV9CVUZfQkxLX0VOVFJJRVNdOwotCWlvd3JpdGUzMihmZXRjaF9pbmRleCwgJnJxLT5jdHJsLT5wb3N0ZWRfaW5kZXgpOworfQogCi0JcnEtPmJ1Zl9pbmRleCA9IDA7Cit2b2lkIHZuaWNfcnFfaW5pdChzdHJ1Y3Qgdm5pY19ycSAqcnEsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCkKK3sKKwl1MzIgZmV0Y2hfaW5kZXg7CisKKwkvKiBVc2UgY3VycmVudCBmZXRjaF9pbmRleCBhcyB0aGUgcmluZyBzdGFydGluZyBwb2ludCAqLworCWZldGNoX2luZGV4ID0gaW9yZWFkMzIoJnJxLT5jdHJsLT5mZXRjaF9pbmRleCk7CisKKwl2bmljX3JxX2luaXRfc3RhcnQocnEsIGNxX2luZGV4LAorCQlmZXRjaF9pbmRleCwgZmV0Y2hfaW5kZXgsCisJCWVycm9yX2ludGVycnVwdF9lbmFibGUsCisJCWVycm9yX2ludGVycnVwdF9vZmZzZXQpOwogfQogCiB1bnNpZ25lZCBpbnQgdm5pY19ycV9lcnJvcl9zdGF0dXMoc3RydWN0IHZuaWNfcnEgKnJxKQpAQCAtMTkyLDggKzIwMyw2IEBACiAJCQlbZmV0Y2hfaW5kZXggJSBWTklDX1JRX0JVRl9CTEtfRU5UUklFU107CiAJaW93cml0ZTMyKGZldGNoX2luZGV4LCAmcnEtPmN0cmwtPnBvc3RlZF9pbmRleCk7CiAKLQlycS0+YnVmX2luZGV4ID0gMDsKLQogCXZuaWNfZGV2X2NsZWFyX2Rlc2NfcmluZygmcnEtPnJpbmcpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfcnEuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5oCmluZGV4IGZkMGVmNjYuLjM1ZTczNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19ycS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA4IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCwgMjAwOSBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDcgTnVvdmEgU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNzksNyArNzksNiBAQAogCXN0cnVjdCB2bmljX3JxX2J1ZiAqdG9fdXNlOwogCXN0cnVjdCB2bmljX3JxX2J1ZiAqdG9fY2xlYW47CiAJdm9pZCAqb3NfYnVmX2hlYWQ7Ci0JdW5zaWduZWQgaW50IGJ1Zl9pbmRleDsKIAl1bnNpZ25lZCBpbnQgcGt0c19vdXRzdGFuZGluZzsKIH07CiAKQEAgLTEwNSwxMSArMTA0LDYgQEAKIAlyZXR1cm4gcnEtPnRvX3VzZS0+aW5kZXg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZuaWNfcnFfbmV4dF9idWZfaW5kZXgoc3RydWN0IHZuaWNfcnEgKnJxKQotewotCXJldHVybiBycS0+YnVmX2luZGV4Kys7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB2bmljX3JxX3Bvc3Qoc3RydWN0IHZuaWNfcnEgKnJxLAogCXZvaWQgKm9zX2J1ZiwgdW5zaWduZWQgaW50IG9zX2J1Zl9pbmRleCwKIAlkbWFfYWRkcl90IGRtYV9hZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtMTQzLDYgKzEzNywxMSBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBpbnQgdm5pY19ycV9wb3N0aW5nX3Nvb24oc3RydWN0IHZuaWNfcnEgKnJxKQoreworCXJldHVybiAoKHJxLT50b191c2UtPmluZGV4ICYgVk5JQ19SUV9SRVRVUk5fUkFURSkgPT0gMCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bmljX3JxX3JldHVybl9kZXNjcyhzdHJ1Y3Qgdm5pY19ycSAqcnEsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlycS0+cmluZy5kZXNjX2F2YWlsICs9IGNvdW50OwpAQCAtMTg2LDcgKzE4NSw3IEBACiB7CiAJaW50IGVycjsKIAotCXdoaWxlICh2bmljX3JxX2Rlc2NfYXZhaWwocnEpID4gMSkgeworCXdoaWxlICh2bmljX3JxX2Rlc2NfYXZhaWwocnEpID4gMCkgewogCiAJCWVyciA9ICgqYnVmX2ZpbGwpKHJxKTsKIAkJaWYgKGVycikKQEAgLTE5OSw2ICsxOTgsMTAgQEAKIHZvaWQgdm5pY19ycV9mcmVlKHN0cnVjdCB2bmljX3JxICpycSk7CiBpbnQgdm5pY19ycV9hbGxvYyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHN0cnVjdCB2bmljX3JxICpycSwgdW5zaWduZWQgaW50IGluZGV4LAogCXVuc2lnbmVkIGludCBkZXNjX2NvdW50LCB1bnNpZ25lZCBpbnQgZGVzY19zaXplKTsKK3ZvaWQgdm5pY19ycV9pbml0X3N0YXJ0KHN0cnVjdCB2bmljX3JxICpycSwgdW5zaWduZWQgaW50IGNxX2luZGV4LAorCXVuc2lnbmVkIGludCBmZXRjaF9pbmRleCwgdW5zaWduZWQgaW50IHBvc3RlZF9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CiB2b2lkIHZuaWNfcnFfaW5pdChzdHJ1Y3Qgdm5pY19ycSAqcnEsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKIAl1bnNpZ25lZCBpbnQgZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfd3EuYyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5jCmluZGV4IGE1NzZkMDQuLmQyZTAwZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB2bmljX3dxX2luaXQoc3RydWN0IHZuaWNfd3EgKndxLCB1bnNpZ25lZCBpbnQgY3FfaW5kZXgsCit2b2lkIHZuaWNfd3FfaW5pdF9zdGFydChzdHJ1Y3Qgdm5pY193cSAqd3EsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZmV0Y2hfaW5kZXgsIHVuc2lnbmVkIGludCBwb3N0ZWRfaW5kZXgsCiAJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9lbmFibGUsCiAJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9vZmZzZXQpCiB7CkBAIC0xMjEsMTIgKzEyMiwyNSBAQAogCXBhZGRyID0gKHU2NCl3cS0+cmluZy5iYXNlX2FkZHIgfCBWTklDX1BBRERSX1RBUkdFVDsKIAl3cml0ZXEocGFkZHIsICZ3cS0+Y3RybC0+cmluZ19iYXNlKTsKIAlpb3dyaXRlMzIod3EtPnJpbmcuZGVzY19jb3VudCwgJndxLT5jdHJsLT5yaW5nX3NpemUpOwotCWlvd3JpdGUzMigwLCAmd3EtPmN0cmwtPmZldGNoX2luZGV4KTsKLQlpb3dyaXRlMzIoMCwgJndxLT5jdHJsLT5wb3N0ZWRfaW5kZXgpOworCWlvd3JpdGUzMihmZXRjaF9pbmRleCwgJndxLT5jdHJsLT5mZXRjaF9pbmRleCk7CisJaW93cml0ZTMyKHBvc3RlZF9pbmRleCwgJndxLT5jdHJsLT5wb3N0ZWRfaW5kZXgpOwogCWlvd3JpdGUzMihjcV9pbmRleCwgJndxLT5jdHJsLT5jcV9pbmRleCk7CiAJaW93cml0ZTMyKGVycm9yX2ludGVycnVwdF9lbmFibGUsICZ3cS0+Y3RybC0+ZXJyb3JfaW50ZXJydXB0X2VuYWJsZSk7CiAJaW93cml0ZTMyKGVycm9yX2ludGVycnVwdF9vZmZzZXQsICZ3cS0+Y3RybC0+ZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CiAJaW93cml0ZTMyKDAsICZ3cS0+Y3RybC0+ZXJyb3Jfc3RhdHVzKTsKKworCXdxLT50b191c2UgPSB3cS0+dG9fY2xlYW4gPQorCQkmd3EtPmJ1ZnNbZmV0Y2hfaW5kZXggLyBWTklDX1dRX0JVRl9CTEtfRU5UUklFU10KKwkJCVtmZXRjaF9pbmRleCAlIFZOSUNfV1FfQlVGX0JMS19FTlRSSUVTXTsKK30KKwordm9pZCB2bmljX3dxX2luaXQoc3RydWN0IHZuaWNfd3EgKndxLCB1bnNpZ25lZCBpbnQgY3FfaW5kZXgsCisJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9lbmFibGUsCisJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9vZmZzZXQpCit7CisJdm5pY193cV9pbml0X3N0YXJ0KHdxLCBjcV9pbmRleCwgMCwgMCwKKwkJZXJyb3JfaW50ZXJydXB0X2VuYWJsZSwKKwkJZXJyb3JfaW50ZXJydXB0X29mZnNldCk7CiB9CiAKIHVuc2lnbmVkIGludCB2bmljX3dxX2Vycm9yX3N0YXR1cyhzdHJ1Y3Qgdm5pY193cSAqd3EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfd3EuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5oCmluZGV4IGM4MjYxMzcuLjljMzRkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY193cS5oCkBAIC0xNDksNiArMTQ5LDEwIEBACiB2b2lkIHZuaWNfd3FfZnJlZShzdHJ1Y3Qgdm5pY193cSAqd3EpOwogaW50IHZuaWNfd3FfYWxsb2Moc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBzdHJ1Y3Qgdm5pY193cSAqd3EsIHVuc2lnbmVkIGludCBpbmRleCwKIAl1bnNpZ25lZCBpbnQgZGVzY19jb3VudCwgdW5zaWduZWQgaW50IGRlc2Nfc2l6ZSk7Cit2b2lkIHZuaWNfd3FfaW5pdF9zdGFydChzdHJ1Y3Qgdm5pY193cSAqd3EsIHVuc2lnbmVkIGludCBjcV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgZmV0Y2hfaW5kZXgsIHVuc2lnbmVkIGludCBwb3N0ZWRfaW5kZXgsCisJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9lbmFibGUsCisJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9vZmZzZXQpOwogdm9pZCB2bmljX3dxX2luaXQoc3RydWN0IHZuaWNfd3EgKndxLCB1bnNpZ25lZCBpbnQgY3FfaW5kZXgsCiAJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9lbmFibGUsCiAJdW5zaWduZWQgaW50IGVycm9yX2ludGVycnVwdF9vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCmluZGV4IDg4ZDdlYmYuLjY0MWExMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYworKysgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKQEAgLTI5OCw3ICsyOTgsOCBAQAogc3RhdGljIHZvaWQgZXBpY190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgZXBpY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZXBpY19pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGVwaWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlcGljX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZXBpY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVkZ2V0KTsKIHN0YXRpYyBpbnQgZXBpY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZXBpY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKQEAgLTk2MSw3ICs5NjIsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBlcGljX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlcGljX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXBpY19wcml2YXRlICplcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVudHJ5LCBmcmVlX2NvdW50OwpAQCAtOTY5LDcgKzk3MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJLyogQ2F1dGlvbjogdGhlIHdyaXRlIG9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCBzZXQgdGhlIGZpZWxkIHdpdGggdGhlCiAJICAgIm93bmVyc2hpcCIgYml0IGxhc3QuICovCkBAIC0xMDEzLDcgKzEwMTQsNyBAQAogCQkJICAgZGV2LT5uYW1lLCAoaW50KXNrYi0+bGVuLCBlbnRyeSwgY3RybF93b3JkLAogCQkJICAgKGludClpbmwoZGV2LT5iYXNlX2FkZHIgKyBUeFNUQVQpKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGVwaWNfdHhfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGVwaWNfcHJpdmF0ZSAqZXAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcWwuYyBiL2RyaXZlcnMvbmV0L2VxbC5jCmluZGV4IDE5YjdkZDkuLmQ0ZDlhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VxbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VxbC5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIHN0YXRpYyBpbnQgZXFsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGVxbF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZXFsX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgZXFsX3NsYXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZXFsX3NsYXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNkZWZpbmUgZXFsX2lzX3NsYXZlKGRldikJKChkZXYtPmZsYWdzICYgSUZGX1NMQVZFKSA9PSBJRkZfU0xBVkUpCiAjZGVmaW5lIGVxbF9pc19tYXN0ZXIoZGV2KQkoKGRldi0+ZmxhZ3MgJiBJRkZfTUFTVEVSKSA9PSBJRkZfTUFTVEVSKQpAQCAtMzI1LDcgKzMyNSw3IEBACiAJcmV0dXJuIGJlc3Rfc2xhdmU7CiB9CiAKLXN0YXRpYyBpbnQgZXFsX3NsYXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlcWxfc2xhdmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWVxdWFsaXplcl90ICplcWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXNsYXZlX3QgKnNsYXZlOwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAKIAlzcGluX3VubG9jaygmZXFsLT5xdWV1ZS5sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGgxNmkuYyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCmluZGV4IDBkOGI2ZGEuLjcxYmZlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCkBAIC00MDUsNyArNDA1LDcgQEAKIHN0YXRpYyB2b2lkICAgIGV0aDE2aV9lZXByb21fY21kKGludCBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgY29tbWFuZCk7CiBzdGF0aWMgaW50ICAgICBldGgxNmlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgICAgIGV0aDE2aV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgICAgIGV0aDE2aV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBldGgxNmlfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAgICBldGgxNmlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAgICBldGgxNmlfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBldGgxNmlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBldGgxNmlfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBldGgxNmlfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXRoMTZpX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMTA2NCw3ICsxMDY0LDcgQEAKIAogCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAJYnVmID0gc2tiLT5kYXRhOwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAkvKiBvdXRiKFRYX0lOVFJfRE9ORSB8IFRYX0lOVFJfMTZfQ09MLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7ICovCiAJc3RhdHVzID0gMDsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgZXRoMTZpX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhvYy5jIGIvZHJpdmVycy9uZXQvZXRob2MuYwppbmRleCBjZWI2YTljLi5iNzMxMWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKQEAgLTQwNCw3ICs0MDQsNiBAQAogCQkJCXZvaWQgKnNyYyA9IHByaXYtPm1lbWJhc2UgKyBiZC5hZGRyOwogCQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLCBzcmMsIHNpemUpOwogCQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwpAQCAtODAyLDcgKzgwMSw3IEBACiAJcmV0dXJuICZwcml2LT5zdGF0czsKIH0KIAotc3RhdGljIGludCBldGhvY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZXRob2Nfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGV0aG9jX2JkIGJkOwpAQCAtODk0LDcgKzg5Myw3IEBACiAKIAltbWlvID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKIAkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsIHJlcy0+bmFtZSk7Ci0JaWYgKCFyZXMpIHsKKwlpZiAoIW1taW8pIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSBzcGFjZVxuIik7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBmcmVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXdyazMuYyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKaW5kZXggMWU5NzIzMi4uYjJhNWVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXdyazMuYworKysgYi9kcml2ZXJzL25ldC9ld3JrMy5jCkBAIC0yOTgsNyArMjk4LDcgQEAKICAgICoqIFB1YmxpYyBGdW5jdGlvbnMKICAqLwogc3RhdGljIGludCBld3JrM19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBld3JrM19xdWV1ZV9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZXdyazNfcXVldWVfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGV3cmszX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBld3JrM19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTc2NCw3ICs3NjQsNyBAQAogLyoKICAgICoqIFdyaXRlcyBhIHNvY2tldCBidWZmZXIgdG8gdGhlIGZyZWUgcGFnZSBxdWV1ZQogICovCi1zdGF0aWMgaW50IGV3cmszX3F1ZXVlX3BrdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBld3JrM19xdWV1ZV9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXdyazNfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVfbG9uZyBpb2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTg2OCw3ICs4NjgsNyBAQAogCWlmIChpbmIgKEVXUkszX0ZNUUMpID09IDApCiAJCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBlcnJfb3V0OgogCUVOQUJMRV9JUlFzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVhbG54LmMgYi9kcml2ZXJzL25ldC9mZWFsbnguYwppbmRleCAxNjA2NTVkLi4xOGQ1ZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWFsbnguYworKysgYi9kcml2ZXJzL25ldC9mZWFsbnguYwpAQCAtNDMzLDcgKzQzMyw3IEBACiBzdGF0aWMgdm9pZCByZXNldF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgZmVhbG54X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIGludCBuZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEzMDUsNyArMTMwNSw3IEBACiB9CiAKIAotc3RhdGljIGludCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNzgsNyArMTM3OCw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCBjOWZkODJkLi5iNDcyMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZXAtPmh3X2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00MjcsNyArNDI3LDcgQEAKIAlzdHJ1Y3QJc2tfYnVmZgkqc2tiOwogCiAJZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaXJxKCZmZXAtPmh3X2xvY2spOworCXNwaW5fbG9jaygmZmVwLT5od19sb2NrKTsKIAliZHAgPSBmZXAtPmRpcnR5X3R4OwogCiAJd2hpbGUgKCgoc3RhdHVzID0gYmRwLT5jYmRfc2MpICYgQkRfRU5FVF9UWF9SRUFEWSkgPT0gMCkgewpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCX0KIAl9CiAJZmVwLT5kaXJ0eV90eCA9IGJkcDsKLQlzcGluX3VubG9ja19pcnEoJmZlcC0+aHdfbG9jayk7CisJc3Bpbl91bmxvY2soJmZlcC0+aHdfbG9jayk7CiB9CiAKIApAQCAtNTA5LDcgKzUwOSw3IEBACiAJZmx1c2hfY2FjaGVfYWxsKCk7CiAjZW5kaWYKIAotCXNwaW5fbG9ja19pcnEoJmZlcC0+aHdfbG9jayk7CisJc3Bpbl9sb2NrKCZmZXAtPmh3X2xvY2spOwogCiAJLyogRmlyc3QsIGdyYWIgYWxsIG9mIHRoZSBzdGF0cyBmb3IgdGhlIGluY29taW5nIHBhY2tldC4KIAkgKiBUaGVzZSBnZXQgbWVzc2VkIHVwIGlmIHdlIGdldCBjYWxsZWQgZHVlIHRvIGEgYnVzeSBjb25kaXRpb24uCkBAIC02MDQsNyArNjA0LDcgQEAKIAl9CiAJZmVwLT5jdXJfcnggPSBiZHA7CiAKLQlzcGluX3VubG9ja19pcnEoJmZlcC0+aHdfbG9jayk7CisJc3Bpbl91bmxvY2soJmZlcC0+aHdfbG9jayk7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0ICovCkBAIC02MTUsNyArNjE1LDcgQEAKIAltaWlfbGlzdF90CSptaXA7CiAKIAlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXNwaW5fbG9ja19pcnEoJmZlcC0+bWlpX2xvY2spOworCXNwaW5fbG9jaygmZmVwLT5taWlfbG9jayk7CiAKIAlpZiAoKG1pcCA9IG1paV9oZWFkKSA9PSBOVUxMKSB7CiAJCXByaW50aygiTUlJIGFuZCBubyBoZWFkIVxuIik7CkBAIC02MzMsMjAgKzYzMywxOSBAQAogCQl3cml0ZWwobWlwLT5taWlfcmVndmFsLCBmZXAtPmh3cCArIEZFQ19NSUlfREFUQSk7CiAKIHVubG9jazoKLQlzcGluX3VubG9ja19pcnEoJmZlcC0+bWlpX2xvY2spOworCXNwaW5fdW5sb2NrKCZmZXAtPm1paV9sb2NrKTsKIH0KIAogc3RhdGljIGludAotbWlpX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByZWd2YWwsIHZvaWQgKCpmdW5jKSh1aW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqKSkKK21paV9xdWV1ZV91bmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcmVndmFsLAorCQl2b2lkICgqZnVuYykodWludCwgc3RydWN0IG5ldF9kZXZpY2UgKikpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwogCW1paV9saXN0X3QJKm1pcDsKIAlpbnQJCXJldHZhbDsKIAogCS8qIEFkZCBQSFkgYWRkcmVzcyB0byByZWdpc3RlciBjb21tYW5kICovCiAJZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVwLT5taWlfbG9jaywgZmxhZ3MpOwogCiAJcmVndmFsIHw9IGZlcC0+cGh5X2FkZHIgPDwgMjM7CiAJcmV0dmFsID0gMDsKQEAgLTY2Nyw2ICs2NjYsMTkgQEAKIAkJcmV0dmFsID0gMTsKIAl9CiAKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50CittaWlfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJlZ3ZhbCwKKwkJdm9pZCAoKmZ1bmMpKHVpbnQsIHN0cnVjdCBuZXRfZGV2aWNlICopKQoreworCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWludCAgICAgICAgICAgICByZXR2YWw7CisJZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmVwLT5taWlfbG9jaywgZmxhZ3MpOworCXJldHZhbCA9IG1paV9xdWV1ZV91bmxvY2tlZChkZXYsIHJlZ3ZhbCwgZnVuYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVwLT5taWlfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xMzczLDExICsxMzg1LDExIEBACiAKIAkJCS8qIEdvdCBmaXJzdCBwYXJ0IG9mIElELCBub3cgZ2V0IHJlbWFpbmRlciAqLwogCQkJZmVwLT5waHlfaWQgPSBwaHl0eXBlIDw8IDE2OwotCQkJbWlpX3F1ZXVlKGRldiwgbWtfbWlpX3JlYWQoTUlJX1JFR19QSFlJUjIpLAorCQkJbWlpX3F1ZXVlX3VubG9ja2VkKGRldiwgbWtfbWlpX3JlYWQoTUlJX1JFR19QSFlJUjIpLAogCQkJCQkJCW1paV9kaXNjb3Zlcl9waHkzKTsKIAkJfSBlbHNlIHsKIAkJCWZlcC0+cGh5X2FkZHIrKzsKLQkJCW1paV9xdWV1ZShkZXYsIG1rX21paV9yZWFkKE1JSV9SRUdfUEhZSVIxKSwKKwkJCW1paV9xdWV1ZV91bmxvY2tlZChkZXYsIG1rX21paV9yZWFkKE1JSV9SRUdfUEhZSVIxKSwKIAkJCQkJCQltaWlfZGlzY292ZXJfcGh5KTsKIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDNiNGUwNzYuLjBhMWMyYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0yMTM3LDcgKzIxMzcsNyBAQAogICogbnZfc3RhcnRfeG1pdDogZGV2LT5oYXJkX3N0YXJ0X3htaXQgZnVuY3Rpb24KICAqIENhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgaGVsZC4KICAqLwotc3RhdGljIGludCBudl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbnZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIHR4X2ZsYWdzID0gMDsKQEAgLTIyNTcsNyArMjI1Nyw4IEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludCBudl9zdGFydF94bWl0X29wdGltaXplZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG52X3N0YXJ0X3htaXRfb3B0aW1pemVkKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgdHhfZmxhZ3MgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwppbmRleCA3NWEwOTk5Li5hMmQ2OWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL21wYzV4eHguaD4KIAogI2luY2x1ZGUgImZzX2VuZXQuaCIKICNpbmNsdWRlICJmZWMuaCIKQEAgLTEwMywxMSArMTA0LDExIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmc19lbmV0X21kaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlIHJlczsKIAlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKIAlzdHJ1Y3QgZmVjX2luZm8gKmZlYzsKLQlpbnQgcmV0ID0gLUVOT01FTSwgaTsKKwlpbnQgKCpnZXRfYnVzX2ZyZXEpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKSA9IG1hdGNoLT5kYXRhOworCWludCByZXQgPSAtRU5PTUVNLCBjbG9jaywgc3BlZWQ7CiAKIAluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwogCWlmICghbmV3X2J1cykKQEAgLTEzMywxMyArMTM0LDM1IEBACiAJaWYgKCFmZWMtPmZlY3ApCiAJCWdvdG8gb3V0X2ZlYzsKIAotCWZlYy0+bWlpX3NwZWVkID0gKChwcGNfcHJvY19mcmVxICsgNDk5OTk5OSkgLyA1MDAwMDAwKSA8PCAxOworCWlmIChnZXRfYnVzX2ZyZXEpIHsKKwkJY2xvY2sgPSBnZXRfYnVzX2ZyZXEob2ZkZXYtPm5vZGUpOworCQlpZiAoIWNsb2NrKSB7CisJCQkvKiBVc2UgbWF4aW11bSBkaXZpZGVyIGlmIGNsb2NrIGlzIHVua25vd24gKi8KKwkJCWRldl93YXJuKCZvZmRldi0+ZGV2LCAiY291bGQgbm90IGRldGVybWluZSBJUFMgY2xvY2tcbiIpOworCQkJY2xvY2sgPSAweDNGICogNTAwMDAwMDsKKwkJfQorCX0gZWxzZQorCQljbG9jayA9IHBwY19wcm9jX2ZyZXE7CisKKwkvKgorCSAqIFNjYWxlIGZvciBhIE1JSSBjbG9jayA8PSAyLjUgTUh6CisJICogTm90ZSB0aGF0IG9ubHkgNiBiaXRzICgyNTozMCkgYXJlIGF2YWlsYWJsZSBmb3IgTUlJIHNwZWVkLgorCSAqLworCXNwZWVkID0gKGNsb2NrICsgNDk5OTk5OSkgLyA1MDAwMDAwOworCWlmIChzcGVlZCA+IDB4M0YpIHsKKwkJc3BlZWQgPSAweDNGOworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LAorCQkJIk1JSSBjbG9jayAoJWQgSHopIGV4Y2VlZHMgbWF4ICgyLjUgTUh6KVxuIiwKKwkJCWNsb2NrIC8gc3BlZWQpOworCX0KKworCWZlYy0+bWlpX3NwZWVkID0gc3BlZWQgPDwgMTsKIAogCXNldGJpdHMzMigmZmVjLT5mZWNwLT5mZWNfcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CiAJc2V0Yml0czMyKCZmZWMtPmZlY3AtPmZlY19lY250cmwsIEZFQ19FQ05UUkxfUElOTVVYIHwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkVDX0VDTlRSTF9FVEhFUl9FTik7CiAJb3V0X2JlMzIoJmZlYy0+ZmVjcC0+ZmVjX2lldmVudCwgRkVDX0VORVRfTUlJKTsKLQlvdXRfYmUzMigmZmVjLT5mZWNwLT5mZWNfbWlpX3NwZWVkLCBmZWMtPm1paV9zcGVlZCk7CisJY2xyc2V0Yml0c19iZTMyKCZmZWMtPmZlY3AtPmZlY19taWlfc3BlZWQsIDB4N0UsIGZlYy0+bWlpX3NwZWVkKTsKIAogCW5ld19idXMtPnBoeV9tYXNrID0gfjA7CiAJbmV3X2J1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CkBAIC0xODgsNiArMjExLDEyIEBACiAJewogCQkuY29tcGF0aWJsZSA9ICJmc2wscHExLWZlYy1tZGlvIiwKIAl9LAorI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NUEM1MTJ4KQorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZmVjLW1kaW8iLAorCQkuZGF0YSA9IG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3ksCisJfSwKKyNlbmRpZgogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IGEwMGVjNjMuLjFlNTI4OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTI5Nyw3ICsyOTcsNiBAQAogCXUzMiB0ZW1wdmFsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBOVUxMOwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwogCWludCBlcnIgPSAwOwogCWludCBsZW5fZGV2bmFtZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IGQ2MjM3OGMuLjFkNTA2NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTU1Nyw3ICs1NTcsOCBAQAogc3RhdGljIHZvaWQgaGFtYWNoaV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgaGFtYWNoaV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaGFtYWNoaV9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGhhbWFjaGlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBoYW1hY2hpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBoYW1hY2hpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIGludCBoYW1hY2hpX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlubGluZSBpbnQgaGFtYWNoaV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTEyNjMsNyArMTI2NCw4IEBACiB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaGFtYWNoaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaGFtYWNoaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaGFtYWNoaV9wcml2YXRlICpobXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGVudHJ5OwpAQCAtMTM3Miw3ICsxMzc0LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBIYW1hY2hpIHRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZC5cbiIsCiAJCQkgICBkZXYtPm5hbWUsIGhtcC0+Y3VyX3R4LCBlbnRyeSk7CiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkb2VzIGFsbCBvZiB0aGUgUnggdGhyZWFkIHdvcmsgYW5kIGNsZWFucyB1cApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKaW5kZXggOTgxYWI1My4uZmI1ODgzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCkBAIC0yNDIsNyArMjQyLDcgQEAKIAogLyogRW5jYXBzdWxhdGUgYW4gSVAgZGF0YWdyYW0gYW5kIGtpY2sgaXQgaW50byBhIFRUWSBxdWV1ZS4gKi8KIAotc3RhdGljIGludCBzcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3BfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzaXhwYWNrICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTI1NSw3ICsyNTUsNyBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBzcF9vcGVuX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCmluZGV4IDM1MjcwMzIuLjdiY2FmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKQEAgLTc3NCwxOCArNzc0LDE4IEBACiAJaWYgKHNrYi0+ZGF0YVswXSAhPSAwKSB7CiAJCWRvX2tpc3NfcGFyYW1zKGJjLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJaWYgKGJjLT5za2IpCiAJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwogCS8qIHN0cmlwIEtJU1MgYnl0ZSAqLwogCWlmIChza2ItPmxlbiA+PSBIRExDRFJWX01BWEZMRU4rMSB8fCBza2ItPmxlbiA8IDMpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCWJjLT5za2IgPSBza2I7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCBhYmNkMTlhLi5mZTg5M2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTI0Nyw5ICsyNDcsOCBAQAogLyoKICAqIAlTZW5kIGFuIEFYLjI1IGZyYW1lIHZpYSBhbiBldGhlcm5ldCBpbnRlcmZhY2UKICAqLwotc3RhdGljIGludCBicHFfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGJwcV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5ld3NrYjsKIAl1bnNpZ25lZCBjaGFyICpwdHI7CiAJc3RydWN0IGJwcWRldiAqYnBxOwogCWludCBzaXplOwpAQCAtMjYzLDI4ICsyNjIsMjMgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQlza2JfcHVsbChza2IsIDEpOworCXNrYl9wdWxsKHNrYiwgMSk7CQkJLyogRHJvcCBLSVNTIGJ5dGUgKi8KIAlzaXplID0gc2tiLT5sZW47CiAKIAkvKgotCSAqIFRoZSBBWC4yNSBjb2RlIGxlYXZlcyBlbm91Z2ggcm9vbSBmb3IgdGhlIGV0aGVybmV0IGhlYWRlciwgYnV0Ci0JICogc2VuZHRvKCkgZG9lcyBub3QuCisJICogV2UncmUgYWJvdXQgdG8gbWVzcyB3aXRoIHRoZSBza2Igd2hpY2ggbWF5IHN0aWxsIHNoYXJlZCB3aXRoIHRoZQorCSAqIGdlbmVyaWMgbmV0d29ya2luZyBjb2RlIHNvIHVuc2hhcmUgYW5kIGVuc3VyZSBpdCdzIGdvdCBlbm91Z2gKKwkgKiBzcGFjZSBmb3IgdGhlIEJQUSBoZWFkZXJzLgogCSAqLwotCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IEFYMjVfQlBRX0hFQURFUl9MRU4pIHsJLyogT3VnaCEgKi8KLQkJaWYgKChuZXdza2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIEFYMjVfQlBRX0hFQURFUl9MRU4pKSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJicHFldGhlcjogb3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiBORVRERVZfVFhfT0s7Ci0JCX0KLQotCQlpZiAoc2tiLT5zayAhPSBOVUxMKQotCQkJc2tiX3NldF9vd25lcl93KG5ld3NrYiwgc2tiLT5zayk7Ci0KKwlpZiAoc2tiX2Nvdyhza2IsIEFYMjVfQlBRX0hFQURFUl9MRU4pKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcl9lcnIoImJwcWV0aGVyOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXNrYiA9IG5ld3NrYjsKKworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAotCXB0ciA9IHNrYl9wdXNoKHNrYiwgMik7CisJcHRyID0gc2tiX3B1c2goc2tiLCAyKTsJCQkvKiBNYWtlIHNwYWNlIGZvciBsZW5ndGggKi8KIAogCSpwdHIrKyA9IChzaXplICsgNSkgJSAyNTY7CiAJKnB0cisrID0gKHNpemUgKyA1KSAvIDI1NjsKQEAgLTMwNSw3ICsyOTksNyBAQAogICAKIAlkZXZfcXVldWVfeG1pdChza2IpOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwppbmRleCA3NDU5YjNhLi45NTBmM2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmluZ19sb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKaW5kZXggZDAzNGY4Yy4uMDAxM2M0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwpAQCAtMzk5LDIwICszOTksMjEgQEAKICAqID09PT09PT09PT09PT09PT09PT09PSBuZXR3b3JrIGRyaXZlciBpbnRlcmZhY2UgPT09PT09PT09PT09PT09PT09PT09PT09PQogICovCiAKLXN0YXRpYyBpbnQgaGRsY2Rydl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGhkbGNkcnZfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSAqc20gPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKHNrYi0+ZGF0YVswXSAhPSAwKSB7CiAJCWRvX2tpc3NfcGFyYW1zKHNtLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJaWYgKHNtLT5za2IpCiAJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlzbS0+c2tiID0gc2tiOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKaW5kZXggZmRhMmZjOC4uMzNiNTVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCkBAIC01MjUsNyArNTI1LDcgQEAKIH0KIAogLyogRW5jYXBzdWxhdGUgYW4gQVguMjUgcGFja2V0IGFuZCBraWNrIGl0IGludG8gYSBUVFkgcXVldWUuICovCi1zdGF0aWMgaW50IGF4X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBheF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1raXNzICpheCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGF4X29wZW5fZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9zY2MuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCmluZGV4IGQ3MTJlN2EuLjM1YzkzNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jCkBAIC0yMDksNyArMjA5LDggQEAKIHN0YXRpYyBpbnQgc2NjX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzY2NfbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2NjX25ldF9yeChzdHJ1Y3Qgc2NjX2NoYW5uZWwgKnNjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IHNjY19uZXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2NjX25ldF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNjY19uZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwogc3RhdGljIGludCBzY2NfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIHNjY19uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTYzNCw3ICsxNjM1LDcgQEAKIAogLyogLS0tLT4gdHJhbnNtaXQgZnJhbWUgPC0tLS0gKi8KIAotc3RhdGljIGludCBzY2NfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2NjX25ldF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzY2NfY2hhbm5lbCAqc2NjID0gKHN0cnVjdCBzY2NfY2hhbm5lbCAqKSBkZXYtPm1sX3ByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2NDMsNyArMTY0NCw3IEBACiAJaWYgKHNrYi0+bGVuID4gc2NjLT5zdGF0LmJ1ZnNpemUgfHwgc2tiLT5sZW4gPCAyKSB7CiAJCXNjYy0+ZGV2X3N0YXQudHhfZHJvcHBlZCsrOwkvKiBib2d1cyBmcmFtZSAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAkKIAlzY2MtPmRldl9zdGF0LnR4X3BhY2tldHMrKzsKQEAgLTE2NTYsNyArMTY1Nyw3IEBACiAJaWYgKGtpc3NjbWQpIHsKIAkJc2NjX3NldF9wYXJhbShzY2MsIGtpc3NjbWQsICpza2ItPmRhdGEpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzY2MtPmxvY2ssIGZsYWdzKTsKQEAgLTE2ODQsNyArMTY4NSw3IEBACiAJCQlfX3NjY19zdGFydF90eF90aW1lcihzY2MsIHRfZHdhaXQsIDApOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2MtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiAtLS0tPiBpb2N0bCBmdW5jdGlvbnMgPC0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbS5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKaW5kZXggYjA2NjkxOS4uNjk0MTMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMKQEAgLTU5NCwxMyArNTk0LDE0IEBACiAJb3V0YihQVFRfT0ZGLCBNQ1IoZGV2LT5iYXNlX2FkZHIpKTsKIH0KIAotc3RhdGljIGludCB5YW1fc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB5YW1fc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlza2JfcXVldWVfdGFpbCgmeXAtPnNlbmRfcXVldWUsIHNrYik7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgeWFtX3N0YXJ0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB5YW1fcG9ydCAqeXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5jIGIvZHJpdmVycy9uZXQvaHAxMDAuYwppbmRleCAxZDM0MjlhLi5hOWExYTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKQEAgLTI0MCw5ICsyNDAsMTAgQEAKIAogc3RhdGljIGludCBocDEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBocDEwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaHAxMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgaHAxMDBfc3RhcnRfeG1pdF9ibShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGhwMTAwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaHAxMDBfc3RhcnRfeG1pdF9ibShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGhwMTAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpocDEwMF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBocDEwMF9taXNjX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE0ODMsNyArMTQ4NCw4IEBACiAgKi8KIAogLyogdHggZnVuY3Rpb24gZm9yIGJ1c21hc3RlciBtb2RlICovCi1zdGF0aWMgaW50IGhwMTAwX3N0YXJ0X3htaXRfYm0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBocDEwMF9zdGFydF94bWl0X2JtKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgb2tfZmxhZzsKQEAgLTE0OTksNyArMTUwMSw3IEBACiAJCWdvdG8gZHJvcDsKIAogCWlmIChscC0+Y2hpcCA9PSBIUDEwMF9DSElQSURfU0hBU1RBICYmIHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAKIAkvKiBHZXQgVHggcmluZyB0YWlsIHBvaW50ZXIgKi8KIAlpZiAobHAtPnR4cnRhaWwtPm5leHQgPT0gbHAtPnR4cmhlYWQpIHsKQEAgLTE1ODUsNyArMTU4Nyw3IEBACiAJbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZHJvcDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0xNjM1LDcgKzE2MzcsOCBAQAogfQogCiAvKiB0eCBmdW5jdGlvbiBmb3Igc2xhdmUgbW9kZXMgKi8KLXN0YXRpYyBpbnQgaHAxMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGhwMTAwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBva19mbGFnOwpAQCAtMTc1Miw3ICsxNzU1LDcgQEAKIAlwcmludGsoImhwMTAwOiAlczogc3RhcnRfeG1pdDogZW5kXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBkcm9wOgogCWRldl9rZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2h5ZHJhLmMgYi9kcml2ZXJzL25ldC9oeWRyYS5jCmluZGV4IDhhYzA5MzAuLmQ0OTZiNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2h5ZHJhLmMKKysrIGIvZHJpdmVycy9uZXQvaHlkcmEuYwpAQCAtMTczLDkgKzE3Myw5IEBACiAKICAgICB6b3Jyb19zZXRfZHJ2ZGF0YSh6LCBkZXYpOwogCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEh5ZHJhIGF0IDB4JTA4bHgsIGFkZHJlc3MgIgorICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBIeWRyYSBhdCAweCUwOGxseCwgYWRkcmVzcyAiCiAJICAgIiVwTSAoaHlkcmEuYyAiIEhZRFJBX1ZFUlNJT04gIilcbiIsCi0JICAgZGV2LT5uYW1lLCB6LT5yZXNvdXJjZS5zdGFydCwgZGV2LT5kZXZfYWRkcik7CisJICAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXotPnJlc291cmNlLnN0YXJ0LCBkZXYtPmRldl9hZGRyKTsKIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCmluZGV4IGYwZjg5MDguLjFkN2Q3ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKQEAgLTEzNDQsNyArMTM0NCw3IEBACiAJKytkZXYtPnN0YXRzLnR4X3BhY2tldHM7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUeCBsb2NrIEJIICovCkBAIC0yMjA5LDcgKzIyMDksNyBAQAogc3RhdGljIGludCBlbWFjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogCXN0cnVjdCBlbWFjX2luc3RhbmNlICpkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQl1aW50MTZfdCAqZGF0YSA9ICh1aW50MTZfdCAqKSAmIHJxLT5pZnJfaWZydTsKKwlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocnEpOwogCiAJREJHKGRldiwgImlvY3RsICUwOHgiIE5MLCBjbWQpOwogCkBAIC0yMjE4LDE5ICsyMjE4LDE2IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQSFk6Ci0JY2FzZSBTSU9DREVWUFJJVkFURToKLQkJZGF0YVswXSA9IGRldi0+cGh5LmFkZHJlc3M7CisJCWRhdGEtPnBoeV9pZCA9IGRldi0+cGh5LmFkZHJlc3M7CiAJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JY2FzZSBTSU9DREVWUFJJVkFURSArIDE6Ci0JCWRhdGFbM10gPSBlbWFjX21kaW9fcmVhZChuZGV2LCBkZXYtPnBoeS5hZGRyZXNzLCBkYXRhWzFdKTsKKwkJZGF0YS0+dmFsX291dCA9IGVtYWNfbWRpb19yZWFkKG5kZXYsIGRldi0+cGh5LmFkZHJlc3MsCisJCQkJCSAgICAgICBkYXRhLT5yZWdfbnVtKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgotCWNhc2UgU0lPQ0RFVlBSSVZBVEUgKyAyOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCQllbWFjX21kaW9fd3JpdGUobmRldiwgZGV2LT5waHkuYWRkcmVzcywgZGF0YVsxXSwgZGF0YVsyXSk7CisJCWVtYWNfbWRpb193cml0ZShuZGV2LCBkZXYtPnBoeS5hZGRyZXNzLCBkYXRhLT5yZWdfbnVtLAorCQkJCWRhdGEtPnZhbF9pbik7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libWxhbmEuYyBiL2RyaXZlcnMvbmV0L2libWxhbmEuYwppbmRleCA0NDgwOThkLi4wOTBhNmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1sYW5hLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCkBAIC04MTIsNyArODEyLDcgQEAKIAogLyogdHJhbnNtaXQgYSBibG9jay4gKi8KIAotc3RhdGljIGludCBpYm1sYW5hX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaWJtbGFuYV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlibWxhbmFfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHRtcGxlbiwgYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCAwOTk1YzQzLi41ODYyMjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC04ODcsNyArODg3LDggQEAKIAogI2RlZmluZSBwYWdlX29mZnNldCh2KSAoKHVuc2lnbmVkIGxvbmcpKHYpICYgKCgxIDw8IDEyKSAtIDEpKQogCi1zdGF0aWMgaW50IGlibXZldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlibXZldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5pb24gaWJtdmV0aF9idWZfZGVzYyBkZXNjOwpAQCAtOTcxLDcgKzk3Miw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c3RhdHNfbG9jaywgZmxhZ3MpOwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgaWJtdmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lmYi5jIGIvZHJpdmVycy9uZXQvaWZiLmMKaW5kZXggOTY3MTNlZi4uODAxZjA4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWZiLmMKKysrIGIvZHJpdmVycy9uZXQvaWZiLmMKQEAgLTU5LDcgKzU5LDcgQEAKIHN0YXRpYyBpbnQgbnVtaWZicyA9IDI7CiAKIHN0YXRpYyB2b2lkIHJpX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXYpOwotc3RhdGljIGludCBpZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaWZiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGlmYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApAQCAtMTYwLDExICsxNjAsMTAgQEAKIAlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKIH0KIAotc3RhdGljIGludCBpZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlmYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlmYl9wcml2YXRlICpkcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7Ci0JaW50IHJldCA9IDA7CiAJdTMyIGZyb20gPSBHX1RDX0ZST00oc2tiLT50Y192ZXJkKTsKIAogCXN0YXRzLT5yeF9wYWNrZXRzKys7CkBAIC0xNzMsNyArMTcyLDcgQEAKIAlpZiAoIShmcm9tICYgKEFUX0lOR1JFU1N8QVRfRUdSRVNTKSkgfHwgIXNrYi0+aWlmKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlpZiAoc2tiX3F1ZXVlX2xlbigmZHAtPnJxKSA+PSBkZXYtPnR4X3F1ZXVlX2xlbikgewpAQCAtMTg3LDcgKzE4Niw3IEBACiAJCXRhc2tsZXRfc2NoZWR1bGUoJmRwLT5pZmJfdGFza2xldCk7CiAJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGlmYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwppbmRleCBhYzI4ZGQ1Li42MTU4YzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtNTMsNyArNTMsNyBAQAogc3RhdGljIHMzMiAgaWdiX3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzUoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2KTsKIHN0YXRpYyB2b2lkIGlnYl9jbGVhcl9od19jbnRyc184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiBzdGF0aWMgczMyICBpZ2JfYWNxdWlyZV9zd2Z3X3N5bmNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7Ci1zdGF0aWMgczMyICBpZ2JfY29uZmlndXJlX3Bjc19saW5rXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyB2b2lkIGlnYl9jb25maWd1cmVfcGNzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogc3RhdGljIHMzMiAgaWdiX2dldF9wY3Nfc3BlZWRfYW5kX2R1cGxleF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2ICosCiAJCQkJCQkgdTE2ICopOwogc3RhdGljIHMzMiAgaWdiX2dldF9waHlfaWRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwpAQCAtNjEsNiArNjEsNyBAQAogc3RhdGljIGJvb2wgaWdiX3NnbWlpX2FjdGl2ZV84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CiBzdGF0aWMgczMyICBpZ2JfcmVzZXRfaW5pdF9zY3JpcHRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogc3RhdGljIHMzMiAgaWdiX3JlYWRfbWFjX2FkZHJfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOworc3RhdGljIHMzMiAgaWdiX3NldF9wY2llX2NvbXBsZXRpb25fdGltZW91dChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogc3RhdGljIHMzMiBpZ2JfZ2V0X2ludmFyaWFudHNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKQEAgLTg0LDYgKzg1LDcgQEAKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVM6CiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfU0VSREVTX1FVQUQ6CiAJCW1hYy0+dHlwZSA9IGUxMDAwXzgyNTc2OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTcwLDYgKzE3MiwxMCBAQAogCQlzaXplID0gMTQ7CiAJbnZtLT53b3JkX3NpemUgPSAxIDw8IHNpemU7CiAKKwkvKiBpZiA4MjU3NiB0aGVuIGluaXRpYWxpemUgbWFpbGJveCBwYXJhbWV0ZXJzICovCisJaWYgKG1hYy0+dHlwZSA9PSBlMTAwMF84MjU3NikKKwkJaWdiX2luaXRfbWJ4X3BhcmFtc19wZihodyk7CisKIAkvKiBzZXR1cCBQSFkgcGFyYW1ldGVycyAqLwogCWlmIChwaHktPm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJcGh5LT50eXBlID0gZTEwMDBfcGh5X25vbmU7CkBAIC0yMTksMTAgKzIyNSw2IEBACiAJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAl9CiAKLQkvKiBpZiA4MjU3NiB0aGVuIGluaXRpYWxpemUgbWFpbGJveCBwYXJhbWV0ZXJzICovCi0JaWYgKG1hYy0+dHlwZSA9PSBlMTAwMF84MjU3NikKLQkJaWdiX2luaXRfbWJ4X3BhcmFtc19wZihodyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzY0LDk4ICs3NjYsNiBAQAogfQogCiAvKioKLSAqICBpZ2JfaW5pdF9yeF9hZGRyc184MjU3NSAtIEluaXRpYWxpemUgcmVjZWl2ZSBhZGRyZXNzJ3MKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICogIEByYXJfY291bnQ6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMKLSAqCi0gKiAgU2V0dXBzIHRoZSByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzIGJ5IHNldHRpbmcgdGhlIGJhc2UgcmVjZWl2ZSBhZGRyZXNzCi0gKiAgcmVnaXN0ZXIgdG8gdGhlIGRldmljZXMgTUFDIGFkZHJlc3MgYW5kIGNsZWFyaW5nIGFsbCB0aGUgb3RoZXIgcmVjZWl2ZQotICogIGFkZHJlc3MgcmVnaXN0ZXJzIHRvIDAuCi0gKiovCi1zdGF0aWMgdm9pZCBpZ2JfaW5pdF9yeF9hZGRyc184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgcmFyX2NvdW50KQotewotCXUzMiBpOwotCXU4IGFkZHJbNl0gPSB7MCwwLDAsMCwwLDB9OwotCS8qCi0JICogVGhpcyBmdW5jdGlvbiBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB0aGF0IG9mCi0JICogZTEwMDBfaW5pdF9yeF9hZGRyc19nZW5lcmljLiBIb3dldmVyIGl0IGFsc28gdGFrZXMgY2FyZQotCSAqIG9mIHRoZSBzcGVjaWFsIGNhc2Ugd2hlcmUgdGhlIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGUKLQkgKiBzZWNvbmQgc2V0IG9mIFJBUnMgYmVnaW5zIGVsc2V3aGVyZS4gVGhpcyBpcyBpbXBsaWNpdGx5IHRha2VuIGNhcmUgYnkKLQkgKiBmdW5jdGlvbiBlMTAwMF9yYXJfc2V0X2dlbmVyaWMuCi0JICovCi0KLQlod19kYmcoImUxMDAwX2luaXRfcnhfYWRkcnNfODI1NzUiKTsKLQotCS8qIFNldHVwIHRoZSByZWNlaXZlIGFkZHJlc3MgKi8KLQlod19kYmcoIlByb2dyYW1taW5nIE1BQyBBZGRyZXNzIGludG8gUkFSWzBdXG4iKTsKLQlody0+bWFjLm9wcy5yYXJfc2V0KGh3LCBody0+bWFjLmFkZHIsIDApOwotCi0JLyogWmVybyBvdXQgdGhlIG90aGVyIChyYXJfZW50cnlfY291bnQgLSAxKSByZWNlaXZlIGFkZHJlc3NlcyAqLwotCWh3X2RiZygiQ2xlYXJpbmcgUkFSWzEtJXVdXG4iLCByYXJfY291bnQtMSk7Ci0JZm9yIChpID0gMTsgaSA8IHJhcl9jb3VudDsgaSsrKQotCSAgICBody0+bWFjLm9wcy5yYXJfc2V0KGh3LCBhZGRyLCBpKTsKLX0KLQotLyoqCi0gKiAgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcwotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKiAgQG1jX2FkZHJfbGlzdDogYXJyYXkgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCi0gKiAgQG1jX2FkZHJfY291bnQ6IG51bWJlciBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KLSAqICBAcmFyX3VzZWRfY291bnQ6IHRoZSBmaXJzdCBSQVIgcmVnaXN0ZXIgZnJlZSB0byBwcm9ncmFtCi0gKiAgQHJhcl9jb3VudDogdG90YWwgbnVtYmVyIG9mIHN1cHBvcnRlZCBSZWNlaXZlIEFkZHJlc3MgUmVnaXN0ZXJzCi0gKgotICogIFVwZGF0ZXMgdGhlIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMgYW5kIE11bHRpY2FzdCBUYWJsZSBBcnJheS4KLSAqICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBhIHBhY2tlZCBtY19hZGRyX2xpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KLSAqICBUaGUgcGFyYW1ldGVyIHJhcl9jb3VudCB3aWxsIHVzdWFsbHkgYmUgaHctPm1hYy5yYXJfZW50cnlfY291bnQKLSAqICB1bmxlc3MgdGhlcmUgYXJlIHdvcmthcm91bmRzIHRoYXQgY2hhbmdlIHRoaXMuCi0gKiovCi12b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCi17Ci0JdTMyIGhhc2hfdmFsdWU7Ci0JdTMyIGk7Ci0JdTggYWRkcls2XSA9IHswLDAsMCwwLDAsMH07Ci0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoYXQgb2YgCi0JICogaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYy4gSG93ZXZlciBpdCBhbHNvIHRha2VzIGNhcmUgCi0JICogb2YgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0IG9mIHRoZSAKLQkgKiBzZWNvbmQgc2V0IG9mIFJBUnMgYmVnaW5zIGVsc2V3aGVyZS4gVGhpcyBpcyBpbXBsaWNpdGx5IHRha2VuIGNhcmUgYnkgCi0JICogZnVuY3Rpb24gZTEwMDBfcmFyX3NldF9nZW5lcmljLgotCSAqLwotCi0JLyoKLQkgKiBMb2FkIHRoZSBmaXJzdCBzZXQgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyBpbnRvIHRoZSBleGFjdAotCSAqIGZpbHRlcnMgKFJBUikuICBJZiB0aGVyZSBhcmUgbm90IGVub3VnaCB0byBmaWxsIHRoZSBSQVIKLQkgKiBhcnJheSwgY2xlYXIgdGhlIGZpbHRlcnMuCi0JICovCi0JZm9yIChpID0gcmFyX3VzZWRfY291bnQ7IGkgPCByYXJfY291bnQ7IGkrKykgewotCQlpZiAobWNfYWRkcl9jb3VudCkgewotCQkJaWdiX3Jhcl9zZXQoaHcsIG1jX2FkZHJfbGlzdCwgaSk7Ci0JCQltY19hZGRyX2NvdW50LS07Ci0JCQltY19hZGRyX2xpc3QgKz0gRVRIX0FMRU47Ci0JCX0gZWxzZSB7Ci0JCQlpZ2JfcmFyX3NldChodywgYWRkciwgaSk7Ci0JCX0KLQl9Ci0KLQkvKiBDbGVhciB0aGUgb2xkIHNldHRpbmdzIGZyb20gdGhlIE1UQSAqLwotCWh3X2RiZygiQ2xlYXJpbmcgTVRBXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgaHctPm1hYy5tdGFfcmVnX2NvdW50OyBpKyspIHsKLQkJYXJyYXlfd3IzMihFMTAwMF9NVEEsIGksIDApOwotCQl3cmZsKCk7Ci0JfQotCi0JLyogTG9hZCBhbnkgcmVtYWluaW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8KLQlmb3IgKDsgbWNfYWRkcl9jb3VudCA+IDA7IG1jX2FkZHJfY291bnQtLSkgewotCQloYXNoX3ZhbHVlID0gaWdiX2hhc2hfbWNfYWRkcihodywgbWNfYWRkcl9saXN0KTsKLQkJaHdfZGJnKCJIYXNoIHZhbHVlID0gMHglMDNYXG4iLCBoYXNoX3ZhbHVlKTsKLQkJaWdiX210YV9zZXQoaHcsIGhhc2hfdmFsdWUpOwotCQltY19hZGRyX2xpc3QgKz0gRVRIX0FMRU47Ci0JfQotfQotCi0vKioKICAqICBpZ2Jfc2h1dGRvd25fZmliZXJfc2VyZGVzX2xpbmtfODI1NzUgLSBSZW1vdmUgbGluayBkdXJpbmcgcG93ZXIgZG93bgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtODY2LDkgKzc3Niw3IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzYgfHwKLQkgICAgKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyICYmCi0JICAgICBody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpKQorCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpCiAJCXJldHVybjsKIAogCS8qIGlmIHRoZSBtYW5hZ2VtZW50IGludGVyZmFjZSBpcyBub3QgZW5hYmxlZCwgdGhlbiBwb3dlciBkb3duICovCkBAIC05MTEsNiArODE5LDEyIEBACiAJaWYgKHJldF92YWwpCiAJCWh3X2RiZygiUENJLUUgTWFzdGVyIGRpc2FibGUgcG9sbGluZyBoYXMgZmFpbGVkLlxuIik7CiAKKwkvKiBzZXQgdGhlIGNvbXBsZXRpb24gdGltZW91dCBmb3IgaW50ZXJmYWNlICovCisJcmV0X3ZhbCA9IGlnYl9zZXRfcGNpZV9jb21wbGV0aW9uX3RpbWVvdXQoaHcpOworCWlmIChyZXRfdmFsKSB7CisJCWh3X2RiZygiUENJLUUgU2V0IGNvbXBsZXRpb24gdGltZW91dCBoYXMgZmFpbGVkLlxuIik7CisJfQorCiAJaHdfZGJnKCJNYXNraW5nIG9mZiBhbGwgaW50ZXJydXB0c1xuIik7CiAJd3IzMihFMTAwMF9JTUMsIDB4ZmZmZmZmZmYpOwogCkBAIC05NDMsNyArODU3LDggQEAKIAl3cjMyKEUxMDAwX0lNQywgMHhmZmZmZmZmZik7CiAJaWNyID0gcmQzMihFMTAwMF9JQ1IpOwogCi0JaWdiX2NoZWNrX2FsdF9tYWNfYWRkcihodyk7CisJLyogSW5zdGFsbCBhbnkgYWx0ZXJuYXRlIE1BQyBhZGRyZXNzIGludG8gUkFSMCAqLworCXJldF92YWwgPSBpZ2JfY2hlY2tfYWx0X21hY19hZGRyKGh3KTsKIAogCXJldHVybiByZXRfdmFsOwogfQpAQCAtOTcyLDcgKzg4Nyw4IEBACiAJaWdiX2NsZWFyX3ZmdGEoaHcpOwogCiAJLyogU2V0dXAgdGhlIHJlY2VpdmUgYWRkcmVzcyAqLwotCWlnYl9pbml0X3J4X2FkZHJzXzgyNTc1KGh3LCByYXJfY291bnQpOworCWlnYl9pbml0X3J4X2FkZHJzKGh3LCByYXJfY291bnQpOworCiAJLyogWmVybyBvdXQgdGhlIE11bHRpY2FzdCBIQVNIIHRhYmxlICovCiAJaHdfZGJnKCJaZXJvaW5nIHRoZSBNVEFcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBtYWMtPm10YV9yZWdfY291bnQ7IGkrKykKQEAgLTEwMDIsNyArOTE4LDcgQEAKICAqKi8KIHN0YXRpYyBzMzIgaWdiX3NldHVwX2NvcHBlcl9saW5rXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0JdTMyIGN0cmwsIGxlZF9jdHJsOworCXUzMiBjdHJsOwogCXMzMiAgcmV0X3ZhbDsKIAlib29sIGxpbms7CiAKQEAgLTEwMTcsMTEgKzkzMyw2IEBACiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfcGh5X2lncF8zOgogCQlyZXRfdmFsID0gaWdiX2NvcHBlcl9saW5rX3NldHVwX2lncChodyk7Ci0JCS8qIFNldHVwIGFjdGl2aXR5IExFRCAqLwotCQlsZWRfY3RybCA9IHJkMzIoRTEwMDBfTEVEQ1RMKTsKLQkJbGVkX2N0cmwgJj0gSUdQX0FDVElWSVRZX0xFRF9NQVNLOwotCQlsZWRfY3RybCB8PSAoSUdQX0FDVElWSVRZX0xFRF9FTkFCTEUgfCBJR1BfTEVEM19NT0RFKTsKLQkJd3IzMihFMTAwMF9MRURDVEwsIGxlZF9jdHJsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOwpAQCAtMTA1Miw5ICs5NjMsNyBAQAogCQl9CiAJfQogCi0JcmV0X3ZhbCA9IGlnYl9jb25maWd1cmVfcGNzX2xpbmtfODI1NzUoaHcpOwotCWlmIChyZXRfdmFsKQotCQlnb3RvIG91dDsKKwlpZ2JfY29uZmlndXJlX3Bjc19saW5rXzgyNTc1KGh3KTsKIAogCS8qCiAJICogQ2hlY2sgbGluayBzdGF0dXMuIFdhaXQgdXAgdG8gMTAwIG1pY3Jvc2Vjb25kcyBmb3IgbGluayB0byBiZWNvbWUKQEAgLTExNjMsMTQgKzEwNzIsMTQgQEAKICAqICBpbmRlcGVuZGVudCBpbnRlcmZhY2UgKHNnbWlpKSBpcyBiZWluZyB1c2VkLiAgQ29uZmlndXJlcyB0aGUgbGluawogICogIGZvciBhdXRvLW5lZ290aWF0aW9uIG9yIGZvcmNlcyBzcGVlZC9kdXBsZXguCiAgKiovCi1zdGF0aWMgczMyIGlnYl9jb25maWd1cmVfcGNzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3N0YXRpYyB2b2lkIGlnYl9jb25maWd1cmVfcGNzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCXUzMiByZWcgPSAwOwogCiAJaWYgKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlciB8fAogCSAgICAhKGlnYl9zZ21paV9hY3RpdmVfODI1NzUoaHcpKSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCS8qIEZvciBTR01JSSwgd2UgbmVlZCB0byBpc3N1ZSBhIFBDUyBhdXRvbmVnIHJlc3RhcnQgKi8KIAlyZWcgPSByZDMyKEUxMDAwX1BDU19MQ1RMKTsKQEAgLTEyMTMsOSArMTEyMiw2IEBACiAJCSAgICAgICByZWcpOwogCX0KIAl3cjMyKEUxMDAwX1BDU19MQ1RMLCByZWcpOwotCi1vdXQ6Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTIyOSwxMCArMTEzNSw2IEBACiBzdGF0aWMgYm9vbCBpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICpkZXZfc3BlYyA9ICZody0+ZGV2X3NwZWMuXzgyNTc1OwotCi0JaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NSAmJiBody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzYpCi0JCXJldHVybiBmYWxzZTsKLQogCXJldHVybiBkZXZfc3BlYy0+c2dtaWlfYWN0aXZlOwogfQogCkBAIC0xNDI0LDYgKzEzMjYsNTcgQEAKIH0KIAogLyoqCisgKiAgaWdiX3NldF9wY2llX2NvbXBsZXRpb25fdGltZW91dCAtIHNldCBwY2ktZSBjb21wbGV0aW9uIHRpbWVvdXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBUaGUgZGVmYXVsdHMgZm9yIDgyNTc1IGFuZCA4MjU3NiBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIG9mIDUwdXMgdG8gNTBtcywKKyAqICBob3dldmVyIHRoZSBoYXJkd2FyZSBkZWZhdWx0IGZvciB0aGVzZSBwYXJ0cyBpcyA1MDB1cyB0byAxbXMgd2hpY2ggaXMgbGVzcworICogIHRoYW4gdGhlIDEwbXMgcmVjb21tZW5kZWQgYnkgdGhlIHBjaS1lIHNwZWMuICBUbyBhZGRyZXNzIHRoaXMgd2UgbmVlZCB0bworICogIGluY3JlYXNlIHRoZSB2YWx1ZSB0byBlaXRoZXIgMTBtcyB0byAyMDBtcyBmb3IgY2FwYWJpbGl0eSB2ZXJzaW9uIDEgY29uZmlnLAorICogIG9yIDE2bXMgdG8gNTVtcyBmb3IgdmVyc2lvbiAyLgorICoqLworc3RhdGljIHMzMiBpZ2Jfc2V0X3BjaWVfY29tcGxldGlvbl90aW1lb3V0KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTMyIGdjciA9IHJkMzIoRTEwMDBfR0NSKTsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IHBjaWVfZGV2Y3RsMjsKKworCS8qIG9ubHkgdGFrZSBhY3Rpb24gaWYgdGltZW91dCB2YWx1ZSBpcyBkZWZhdWx0ZWQgdG8gMCAqLworCWlmIChnY3IgJiBFMTAwMF9HQ1JfQ01QTF9UTU9VVF9NQVNLKQorCQlnb3RvIG91dDsKKworCS8qCisJICogaWYgY2FwYWJhYmlsaXRpZXMgdmVyc2lvbiBpcyB0eXBlIDEgd2UgY2FuIHdyaXRlIHRoZQorCSAqIHRpbWVvdXQgb2YgMTBtcyB0byAyMDBtcyB0aHJvdWdoIHRoZSBHQ1IgcmVnaXN0ZXIKKwkgKi8KKwlpZiAoIShnY3IgJiBFMTAwMF9HQ1JfQ0FQX1ZFUjIpKSB7CisJCWdjciB8PSBFMTAwMF9HQ1JfQ01QTF9UTU9VVF8xMG1zOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIGZvciB2ZXJzaW9uIDIgY2FwYWJpbGl0aWVzIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGNvbmZpZyBzcGFjZQorCSAqIGRpcmVjdGx5IGluIG9yZGVyIHRvIHNldCB0aGUgY29tcGxldGlvbiB0aW1lb3V0IHZhbHVlIGZvcgorCSAqIDE2bXMgdG8gNTVtcworCSAqLworCXJldF92YWwgPSBpZ2JfcmVhZF9wY2llX2NhcF9yZWcoaHcsIFBDSUVfREVWSUNFX0NPTlRST0wyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjaWVfZGV2Y3RsMik7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJcGNpZV9kZXZjdGwyIHw9IFBDSUVfREVWSUNFX0NPTlRST0wyXzE2bXM7CisKKwlyZXRfdmFsID0gaWdiX3dyaXRlX3BjaWVfY2FwX3JlZyhodywgUENJRV9ERVZJQ0VfQ09OVFJPTDIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjaWVfZGV2Y3RsMik7CitvdXQ6CisJLyogZGlzYWJsZSBjb21wbGV0aW9uIHRpbWVvdXQgcmVzZW5kICovCisJZ2NyICY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7CisKKwl3cjMyKEUxMDAwX0dDUiwgZ2NyKTsKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmIC0gZW5hYmxlIG9yIGRpc2FibGUgdm1kcSBsb29wYmFjawogICogIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0CiAgKiAgQGVuYWJsZTogc3RhdGUgdG8gZW50ZXIsIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCmluZGV4IDBmMTZhYmEuLjhhMWU2NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCkBAIC0yOCwxMCArMjgsMTQgQEAKICNpZm5kZWYgX0UxMDAwXzgyNTc1X0hfCiAjZGVmaW5lIF9FMTAwMF84MjU3NV9IXwogCi12b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyosIHU4KiwgdTMyLCB1MzIsIHUzMik7CiBleHRlcm4gdm9pZCBpZ2Jfc2h1dGRvd25fZmliZXJfc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBpZ2JfcnhfZmlmb19mbHVzaF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAorI2RlZmluZSBJRF9MRURfREVGQVVMVF84MjU3NV9TRVJERVMgKChJRF9MRURfREVGMV9ERUYyIDw8IDEyKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSURfTEVEX0RFRjFfREVGMiA8PCAgOCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElEX0xFRF9ERUYxX0RFRjIgPDwgIDQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJRF9MRURfT0ZGMV9PTjIpKQorCiAjZGVmaW5lIEUxMDAwX1JBUl9FTlRSSUVTXzgyNTc1ICAgMTYKICNkZWZpbmUgRTEwMDBfUkFSX0VOVFJJRVNfODI1NzYgICAyNAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaAppbmRleCAzYmRhM2RiLi5jODU4MjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTQzNSw2ICs0MzUsMTIgQEAKIC8qIEZsb3cgQ29udHJvbCAqLwogI2RlZmluZSBFMTAwMF9GQ1JUTF9YT05FIDB4ODAwMDAwMDAgICAgIC8qIEVuYWJsZSBYT04gZnJhbWUgdHJhbnNtaXNzaW9uICovCiAKKy8qIFBDSSBFeHByZXNzIENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfR0NSX0NNUExfVE1PVVRfTUFTSyAgICAgICAweDAwMDBGMDAwCisjZGVmaW5lIEUxMDAwX0dDUl9DTVBMX1RNT1VUXzEwbXMgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBFMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQgICAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgRTEwMDBfR0NSX0NBUF9WRVIyICAgICAgICAgICAgICAweDAwMDQwMDAwCisKIC8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9DUl9GVUxMX0RVUExFWCAgICAgIDB4MDEwMCAgLyogRkRYID0xLCBoYWxmIGR1cGxleCA9MCAqLwogI2RlZmluZSBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyAweDAyMDAgIC8qIFJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLwpAQCAtNTY5LDkgKzU3NSwxMSBAQAogCiAvKiBQQ0kvUENJLVgvUENJLUVYIENvbmZpZyBzcGFjZSAqLwogI2RlZmluZSBQQ0lFX0xJTktfU1RBVFVTICAgICAgICAgICAgIDB4MTIKKyNkZWZpbmUgUENJRV9ERVZJQ0VfQ09OVFJPTDIgICAgICAgICAweDI4CiAKICNkZWZpbmUgUENJRV9MSU5LX1dJRFRIX01BU0sgICAgICAgICAweDNGMAogI2RlZmluZSBQQ0lFX0xJTktfV0lEVEhfU0hJRlQgICAgICAgIDQKKyNkZWZpbmUgUENJRV9ERVZJQ0VfQ09OVFJPTDJfMTZtcyAgICAweDAwMDUKIAogI2RlZmluZSBQSFlfUkVWSVNJT05fTUFTSyAgICAgIDB4RkZGRkZGRjAKICNkZWZpbmUgTUFYX1BIWV9SRUdfQUREUkVTUyAgICAweDFGICAvKiA1IGJpdCBhZGRyZXNzIGJ1cyAoMC0weDFGKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAppbmRleCA2OGFhYzIwLi4xMTk4NjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaApAQCAtNDIsNiArNDIsNyBAQAogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzZfU0VSREVTICAgICAgICAgICAgIDB4MTBFNwogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVIgICAgICAgIDB4MTBFOAogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzZfTlMgICAgICAgICAgICAgICAgIDB4MTUwQQorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzZfU0VSREVTX1FVQUQgICAgICAgIDB4MTUwRAogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzVFQl9DT1BQRVIgICAgICAgICAgIDB4MTBBNwogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzVFQl9GSUJFUl9TRVJERVMgICAgIDB4MTBBOQogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzVHQl9RVUFEX0NPUFBFUiAgICAgIDB4MTBENgpAQCAtNjEsOCArNjIsNyBAQAogZW51bSBlMTAwMF9tZWRpYV90eXBlIHsKIAllMTAwMF9tZWRpYV90eXBlX3Vua25vd24gPSAwLAogCWUxMDAwX21lZGlhX3R5cGVfY29wcGVyID0gMSwKLQllMTAwMF9tZWRpYV90eXBlX2ZpYmVyID0gMiwKLQllMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcyA9IDMsCisJZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMgPSAyLAogCWUxMDAwX251bV9tZWRpYV90eXBlcwogfTsKIApAQCAtMTM3LDcgKzEzNyw3IEBACiAJZTEwMDBfcmV2X3BvbGFyaXR5X3VuZGVmaW5lZCA9IDB4RkYKIH07CiAKLWVudW0gZTEwMDBfZmNfdHlwZSB7CitlbnVtIGUxMDAwX2ZjX21vZGUgewogCWUxMDAwX2ZjX25vbmUgPSAwLAogCWUxMDAwX2ZjX3J4X3BhdXNlLAogCWUxMDAwX2ZjX3R4X3BhdXNlLApAQCAtMzM5LDYgKzMzOSwxMCBAQAogCXUxNiBpZnNfcmF0aW87CiAJdTE2IGlmc19zdGVwX3NpemU7CiAJdTE2IG10YV9yZWdfY291bnQ7CisKKwkvKiBNYXhpbXVtIHNpemUgb2YgdGhlIE1UQSByZWdpc3RlciB0YWJsZSBpbiBhbGwgc3VwcG9ydGVkIGFkYXB0ZXJzICovCisJI2RlZmluZSBNQVhfTVRBX1JFRyAxMjgKKwl1MzIgbXRhX3NoYWRvd1tNQVhfTVRBX1JFR107CiAJdTE2IHJhcl9lbnRyeV9jb3VudDsKIAogCXU4ICBmb3JjZWRfc3BlZWRfZHVwbGV4OwpAQCAtNDI1LDggKzQyOSw4IEBACiAJdTE2IHBhdXNlX3RpbWU7ICAgICAvKiBGbG93IGNvbnRyb2wgcGF1c2UgdGltZXIgKi8KIAlib29sIHNlbmRfeG9uOyAgICAgIC8qIEZsb3cgY29udHJvbCBzZW5kIFhPTiAqLwogCWJvb2wgc3RyaWN0X2llZWU7ICAgLyogU3RyaWN0IElFRUUgbW9kZSAqLwotCWVudW0gZTEwMDBfZmNfdHlwZSB0eXBlOyAvKiBUeXBlIG9mIGZsb3cgY29udHJvbCAqLwotCWVudW0gZTEwMDBfZmNfdHlwZSBvcmlnaW5hbF90eXBlOworCWVudW0gZTEwMDBfZmNfbW9kZSBjdXJyZW50X21vZGU7IC8qIFR5cGUgb2YgZmxvdyBjb250cm9sICovCisJZW51bSBlMTAwMF9mY19tb2RlIHJlcXVlc3RlZF9tb2RlOwogfTsKIAogc3RydWN0IGUxMDAwX21ieF9vcGVyYXRpb25zIHsKQEAgLTQ5NSw1ICs0OTksNyBAQAogI2Vsc2UKICNkZWZpbmUgaHdfZGJnKGZvcm1hdCwgYXJnLi4uKQogI2VuZGlmCi0KICNlbmRpZgorLyogVGhlc2UgZnVuY3Rpb25zIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZHJpdmVycyAqLworczMyICBpZ2JfcmVhZF9wY2llX2NhcF9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZywgdTE2ICp2YWx1ZSk7CitzMzIgIGlnYl93cml0ZV9wY2llX2NhcF9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZywgdTE2ICp2YWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKaW5kZXggNDcyZjNmMS4uYTAyMzFjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwpAQCAtMzcsMjAgKzM3LDYgQEAKIHN0YXRpYyBzMzIgaWdiX3NldF9kZWZhdWx0X2ZjKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogc3RhdGljIHMzMiBpZ2Jfc2V0X2ZjX3dhdGVybWFya3Moc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKLXN0YXRpYyBzMzIgaWdiX3JlYWRfcGNpZV9jYXBfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWcsIHUxNiAqdmFsdWUpCi17Ci0Jc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7Ci0JdTE2IGNhcF9vZmZzZXQ7Ci0KLQljYXBfb2Zmc2V0ID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShhZGFwdGVyLT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7Ci0JaWYgKCFjYXBfb2Zmc2V0KQotCQlyZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBjYXBfb2Zmc2V0ICsgcmVnLCB2YWx1ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiAgaWdiX2dldF9idXNfaW5mb19wY2llIC0gR2V0IFBDSWUgYnVzIGluZm9ybWF0aW9uCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKQEAgLTExOCw2ICsxMDQsMzEgQEAKIH0KIAogLyoqCisgKiAgaWdiX2luaXRfcnhfYWRkcnMgLSBJbml0aWFsaXplIHJlY2VpdmUgYWRkcmVzcydzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAcmFyX2NvdW50OiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzCisgKgorICogIFNldHVwcyB0aGUgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycyBieSBzZXR0aW5nIHRoZSBiYXNlIHJlY2VpdmUgYWRkcmVzcworICogIHJlZ2lzdGVyIHRvIHRoZSBkZXZpY2VzIE1BQyBhZGRyZXNzIGFuZCBjbGVhcmluZyBhbGwgdGhlIG90aGVyIHJlY2VpdmUKKyAqICBhZGRyZXNzIHJlZ2lzdGVycyB0byAwLgorICoqLwordm9pZCBpZ2JfaW5pdF9yeF9hZGRycyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgcmFyX2NvdW50KQoreworCXUzMiBpOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXSA9IHswfTsKKworCS8qIFNldHVwIHRoZSByZWNlaXZlIGFkZHJlc3MgKi8KKwlod19kYmcoIlByb2dyYW1taW5nIE1BQyBBZGRyZXNzIGludG8gUkFSWzBdXG4iKTsKKworCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7CisKKwkvKiBaZXJvIG91dCB0aGUgb3RoZXIgKHJhcl9lbnRyeV9jb3VudCAtIDEpIHJlY2VpdmUgYWRkcmVzc2VzICovCisJaHdfZGJnKCJDbGVhcmluZyBSQVJbMS0ldV1cbiIsIHJhcl9jb3VudC0xKTsKKwlmb3IgKGkgPSAxOyBpIDwgcmFyX2NvdW50OyBpKyspCisJCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIG1hY19hZGRyLCBpKTsKK30KKworLyoqCiAgKiAgaWdiX3ZmdGFfc2V0IC0gZW5hYmxlIG9yIGRpc2FibGUgdmxhbiBpbiBWTEFOIGZpbHRlciB0YWJsZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQHZpZDogVkxBTiBpZCB0byBhZGQgb3IgcmVtb3ZlCkBAIC0yNzUsNiArMjg2LDQxIEBACiB9CiAKIC8qKgorICogIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0IC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQorICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCisgKgorICogIFVwZGF0ZXMgZW50aXJlIE11bHRpY2FzdCBUYWJsZSBBcnJheS4KKyAqICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBhIHBhY2tlZCBtY19hZGRyX2xpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKyAqKi8KK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3Qoc3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQpCit7CisJdTMyIGhhc2hfdmFsdWUsIGhhc2hfYml0LCBoYXNoX3JlZzsKKwlpbnQgaTsKKworCS8qIGNsZWFyIG10YV9zaGFkb3cgKi8KKwltZW1zZXQoJmh3LT5tYWMubXRhX3NoYWRvdywgMCwgc2l6ZW9mKGh3LT5tYWMubXRhX3NoYWRvdykpOworCisJLyogdXBkYXRlIG10YV9zaGFkb3cgZnJvbSBtY19hZGRyX2xpc3QgKi8KKwlmb3IgKGkgPSAwOyAodTMyKSBpIDwgbWNfYWRkcl9jb3VudDsgaSsrKSB7CisJCWhhc2hfdmFsdWUgPSBpZ2JfaGFzaF9tY19hZGRyKGh3LCBtY19hZGRyX2xpc3QpOworCisJCWhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gNSkgJiAoaHctPm1hYy5tdGFfcmVnX2NvdW50IC0gMSk7CisJCWhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7CisKKwkJaHctPm1hYy5tdGFfc2hhZG93W2hhc2hfcmVnXSB8PSAoMSA8PCBoYXNoX2JpdCk7CisJCW1jX2FkZHJfbGlzdCArPSAoRVRIX0FMRU4pOworCX0KKworCS8qIHJlcGxhY2UgdGhlIGVudGlyZSBNVEEgdGFibGUgKi8KKwlmb3IgKGkgPSBody0+bWFjLm10YV9yZWdfY291bnQgLSAxOyBpID49IDA7IGktLSkKKwkJYXJyYXlfd3IzMihFMTAwMF9NVEEsIGksIGh3LT5tYWMubXRhX3NoYWRvd1tpXSk7CisJd3JmbCgpOworfQorCisvKioKICAqICBpZ2JfaGFzaF9tY19hZGRyIC0gR2VuZXJhdGUgYSBtdWx0aWNhc3QgaGFzaCB2YWx1ZQogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQG1jX2FkZHI6IHBvaW50ZXIgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcwpAQCAtNDkwLDE4ICs1MzYsMjQgQEAKIAlpZiAoaWdiX2NoZWNrX3Jlc2V0X2Jsb2NrKGh3KSkKIAkJZ290byBvdXQ7CiAKLQlyZXRfdmFsID0gaWdiX3NldF9kZWZhdWx0X2ZjKGh3KTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7CisJLyoKKwkgKiBJZiByZXF1ZXN0ZWQgZmxvdyBjb250cm9sIGlzIHNldCB0byBkZWZhdWx0LCBzZXQgZmxvdyBjb250cm9sCisJICogYmFzZWQgb24gdGhlIEVFUFJPTSBmbG93IGNvbnRyb2wgc2V0dGluZ3MuCisJICovCisJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19kZWZhdWx0KSB7CisJCXJldF92YWwgPSBpZ2Jfc2V0X2RlZmF1bHRfZmMoaHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogV2Ugd2FudCB0byBzYXZlIG9mZiB0aGUgb3JpZ2luYWwgRmxvdyBDb250cm9sIGNvbmZpZ3VyYXRpb24ganVzdAogCSAqIGluIGNhc2Ugd2UgZ2V0IGRpc2Nvbm5lY3RlZCBhbmQgdGhlbiByZWNvbm5lY3RlZCBpbnRvIGEgZGlmZmVyZW50CiAJICogaHViIG9yIHN3aXRjaCB3aXRoIGRpZmZlcmVudCBGbG93IENvbnRyb2wgY2FwYWJpbGl0aWVzLgogCSAqLwotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7CisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKIAotCWh3X2RiZygiQWZ0ZXIgZml4LXVwcyBGbG93Q29udHJvbCBpcyBub3cgPSAleFxuIiwgaHctPmZjLnR5cGUpOworCWh3X2RiZygiQWZ0ZXIgZml4LXVwcyBGbG93Q29udHJvbCBpcyBub3cgPSAleFxuIiwgaHctPmZjLmN1cnJlbnRfbW9kZSk7CiAKIAkvKiBDYWxsIHRoZSBuZWNlc3NhcnkgbWVkaWFfdHlwZSBzdWJyb3V0aW5lIHRvIGNvbmZpZ3VyZSB0aGUgbGluay4gKi8KIAlyZXRfdmFsID0gaHctPm1hYy5vcHMuc2V0dXBfcGh5c2ljYWxfaW50ZXJmYWNlKGh3KTsKQEAgLTU2OCw3ICs2MjAsNyBAQAogCSAqIGFiaWxpdHkgdG8gdHJhbnNtaXQgcGF1c2UgZnJhbWVzIGlzIG5vdCBlbmFibGVkLCB0aGVuIHRoZXNlCiAJICogcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IHRvIDAuCiAJICovCi0JaWYgKGh3LT5mYy50eXBlICYgZTEwMDBfZmNfdHhfcGF1c2UpIHsKKwlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSAmIGUxMDAwX2ZjX3R4X3BhdXNlKSB7CiAJCS8qCiAJCSAqIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSBSZWNlaXZlIFRocmVzaG9sZCBoaWdoIGFuZCBsb3cgd2F0ZXIKIAkJICogbWFya3MgYXMgd2VsbCBhcyAob3B0aW9uYWxseSkgZW5hYmxpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZgpAQCAtNjE1LDEyICs2NjcsMTIgQEAKIAl9CiAKIAlpZiAoKG52bV9kYXRhICYgTlZNX1dPUkQwRl9QQVVTRV9NQVNLKSA9PSAwKQotCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX25vbmU7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX25vbmU7CiAJZWxzZSBpZiAoKG52bV9kYXRhICYgTlZNX1dPUkQwRl9QQVVTRV9NQVNLKSA9PQogCQkgTlZNX1dPUkQwRl9BU01fRElSKQotCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3R4X3BhdXNlOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBlMTAwMF9mY190eF9wYXVzZTsKIAllbHNlCi0JCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtNjUwLDcgKzcwMiw3IEBACiAJICogcmVjZWl2ZSBmbG93IGNvbnRyb2wuCiAJICoKIAkgKiBUaGUgIkNhc2UiIHN0YXRlbWVudCBiZWxvdyBlbmFibGVzL2Rpc2FibGUgZmxvdyBjb250cm9sCi0JICogYWNjb3JkaW5nIHRvIHRoZSAiaHctPmZjLnR5cGUiIHBhcmFtZXRlci4KKwkgKiBhY2NvcmRpbmcgdG8gdGhlICJody0+ZmMuY3VycmVudF9tb2RlIiBwYXJhbWV0ZXIuCiAJICoKIAkgKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIHRoZSAiZmMiIHBhcmFtZXRlciBhcmU6CiAJICogICAgICAwOiAgRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKQEAgLTY2MSw5ICs3MTMsOSBAQAogCSAqICAgICAgMzogIEJvdGggUnggYW5kIFRYIGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBpcyBlbmFibGVkLgogCSAqICBvdGhlcjogIE5vIG90aGVyIHZhbHVlcyBzaG91bGQgYmUgcG9zc2libGUgYXQgdGhpcyBwb2ludC4KIAkgKi8KLQlod19kYmcoImh3LT5mYy50eXBlID0gJXVcbiIsIGh3LT5mYy50eXBlKTsKKwlod19kYmcoImh3LT5mYy5jdXJyZW50X21vZGUgPSAldVxuIiwgaHctPmZjLmN1cnJlbnRfbW9kZSk7CiAKLQlzd2l0Y2ggKGh3LT5mYy50eXBlKSB7CisJc3dpdGNoIChody0+ZmMuY3VycmVudF9tb2RlKSB7CiAJY2FzZSBlMTAwMF9mY19ub25lOgogCQljdHJsICY9ICh+KEUxMDAwX0NUUkxfVEZDRSB8IEUxMDAwX0NUUkxfUkZDRSkpOwogCQlicmVhazsKQEAgLTcxMyw4ICs3NjUsNyBAQAogCSAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1BQyB0byBtYXRjaCB0aGUgImZjIiBwYXJhbWV0ZXIuCiAJICovCiAJaWYgKG1hYy0+YXV0b25lZ19mYWlsZWQpIHsKLQkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyIHx8Ci0JCSAgICBody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpCisJCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpCiAJCQlyZXRfdmFsID0gaWdiX2ZvcmNlX21hY19mYyhodyk7CiAJfSBlbHNlIHsKIAkJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKQEAgLTgxMiwxMSArODYzLDExIEBACiAJCQkgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KIAkJCSAqIHR1cm4gT0ZGICB0aGUgVFJBTlNNSVNTSU9OIG9mIFBBVVNFIGZyYW1lcy4KIAkJCSAqLwotCQkJaWYgKGh3LT5mYy5vcmlnaW5hbF90eXBlID09IGUxMDAwX2ZjX2Z1bGwpIHsKLQkJCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2Z1bGw7CisJCQlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2Z1bGwpIHsKKwkJCQlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKIAkJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9IEZVTEwuXHJcbiIpOwogCQkJfSBlbHNlIHsKLQkJCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOworCQkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKIAkJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9ICIKIAkJCQkgICAgICAgIlJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKIAkJCX0KQEAgLTgzMyw3ICs4ODQsNyBAQAogCQkJICAobWlpX253YXlfYWR2X3JlZyAmIE5XQVlfQVJfQVNNX0RJUikgJiYKIAkJCSAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgogCQkJICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfQVNNX0RJUikpIHsKLQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfdHhfcGF1c2U7CisJCQlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfdHhfcGF1c2U7CiAJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9IFRYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKIAkJfQogCQkvKgpAQCAtODQ4LDcgKzg5OSw3IEBACiAJCQkgKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX0FTTV9ESVIpICYmCiAJCQkgIShtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9QQVVTRSkgJiYKIAkJCSAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfQVNNX0RJUikpIHsKLQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfcnhfcGF1c2U7CisJCQlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfcnhfcGF1c2U7CiAJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKIAkJfQogCQkvKgpAQCAtODcyLDEzICs5MjMsMTMgQEAKIAkJICogYmUgYXNrZWQgdG8gZGVsYXkgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMgdGhhbiBhc2tpbmcKIAkJICogb3VyIGxpbmsgcGFydG5lciB0byBwYXVzZSB0cmFuc21pc3Npb24gb2YgZnJhbWVzLgogCQkgKi8KLQkJZWxzZSBpZiAoKGh3LT5mYy5vcmlnaW5hbF90eXBlID09IGUxMDAwX2ZjX25vbmUgfHwKLQkJCSAgaHctPmZjLm9yaWdpbmFsX3R5cGUgPT0gZTEwMDBfZmNfdHhfcGF1c2UpIHx8CisJCWVsc2UgaWYgKChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gZTEwMDBfZmNfbm9uZSB8fAorCQkJICBody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gZTEwMDBfZmNfdHhfcGF1c2UpIHx8CiAJCQkgaHctPmZjLnN0cmljdF9pZWVlKSB7Ci0JCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX25vbmU7CisJCQlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfbm9uZTsKIAkJCWh3X2RiZygiRmxvdyBDb250cm9sID0gTk9ORS5cclxuIik7CiAJCX0gZWxzZSB7Ci0JCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOworCQkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOwogCQkJaHdfZGJnKCJGbG93IENvbnRyb2wgPSBSWCBQQVVTRSBmcmFtZXMgb25seS5cclxuIik7CiAJCX0KIApAQCAtODk0LDcgKzk0NSw3IEBACiAJCX0KIAogCQlpZiAoZHVwbGV4ID09IEhBTEZfRFVQTEVYKQotCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19ub25lOworCQkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGUxMDAwX2ZjX25vbmU7CiAKIAkJLyoKIAkJICogTm93IHdlIGNhbGwgYSBzdWJyb3V0aW5lIHRvIGFjdHVhbGx5IGZvcmNlIHRoZSBNQUMKQEAgLTEwNjUsOSArMTExNiwxNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEXzAwMDAgfHwgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpCi0JCSpkYXRhID0gSURfTEVEX0RFRkFVTFQ7Ci0KKwlpZiAoKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEXzAwMDAgfHwgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpIHsKKwkJc3dpdGNoKGh3LT5waHkubWVkaWFfdHlwZSkgeworCQljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgorCQkJKmRhdGEgPSBJRF9MRURfREVGQVVMVF84MjU3NV9TRVJERVM7CisJCQlicmVhazsKKwkJY2FzZSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcjoKKwkJZGVmYXVsdDoKKwkJCSpkYXRhID0gSURfTEVEX0RFRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCX0KIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KQEAgLTExNjEsMjIgKzEyMjAsMTYgQEAKIAl1MzIgbGVkY3RsX2JsaW5rID0gMDsKIAl1MzIgaTsKIAotCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgewotCQkvKiBhbHdheXMgYmxpbmsgTEVEMCBmb3IgUENJLUUgZmliZXIgKi8KLQkJbGVkY3RsX2JsaW5rID0gRTEwMDBfTEVEQ1RMX0xFRDBfQkxJTksgfAotCQkgICAgIChFMTAwMF9MRURDVExfTU9ERV9MRURfT04gPDwgRTEwMDBfTEVEQ1RMX0xFRDBfTU9ERV9TSElGVCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogc2V0IHRoZSBibGluayBiaXQgZm9yIGVhY2ggTEVEIHRoYXQncyAib24iICgweDBFKQotCQkgKiBpbiBsZWRjdGxfbW9kZTIKLQkJICovCi0JCWxlZGN0bF9ibGluayA9IGh3LT5tYWMubGVkY3RsX21vZGUyOwotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQkJaWYgKCgoaHctPm1hYy5sZWRjdGxfbW9kZTIgPj4gKGkgKiA4KSkgJiAweEZGKSA9PQotCQkJICAgIEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PTikKLQkJCQlsZWRjdGxfYmxpbmsgfD0gKEUxMDAwX0xFRENUTF9MRUQwX0JMSU5LIDw8Ci0JCQkJCQkgKGkgKiA4KSk7Ci0JfQorCS8qCisJICogc2V0IHRoZSBibGluayBiaXQgZm9yIGVhY2ggTEVEIHRoYXQncyAib24iICgweDBFKQorCSAqIGluIGxlZGN0bF9tb2RlMgorCSAqLworCWxlZGN0bF9ibGluayA9IGh3LT5tYWMubGVkY3RsX21vZGUyOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWlmICgoKGh3LT5tYWMubGVkY3RsX21vZGUyID4+IChpICogOCkpICYgMHhGRikgPT0KKwkJICAgIEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PTikKKwkJCWxlZGN0bF9ibGluayB8PSAoRTEwMDBfTEVEQ1RMX0xFRDBfQkxJTksgPDwKKwkJCQkJIChpICogOCkpOwogCiAJd3IzMihFMTAwMF9MRURDVEwsIGxlZGN0bF9ibGluayk7CiAKQEAgLTExOTEsMTUgKzEyNDQsNyBAQAogICoqLwogczMyIGlnYl9sZWRfb2ZmKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0JdTMyIGN0cmw7Ci0KIAlzd2l0Y2ggKGh3LT5waHkubWVkaWFfdHlwZSkgewotCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9maWJlcjoKLQkJY3RybCA9IHJkMzIoRTEwMDBfQ1RSTCk7Ci0JCWN0cmwgfD0gRTEwMDBfQ1RSTF9TV0RQSU4wOwotCQljdHJsIHw9IEUxMDAwX0NUUkxfU1dEUElPMDsKLQkJd3IzMihFMTAwMF9DVFJMLCBjdHJsKTsKLQkJYnJlYWs7CiAJY2FzZSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcjoKIAkJd3IzMihFMTAwMF9MRURDVEwsIGh3LT5tYWMubGVkY3RsX21vZGUxKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKaW5kZXggMWQ2OTBiNC4uNzUxOGFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaApAQCAtNTEsNiArNTEsOCBAQAogCQkJCSAgICAgICB1MTYgKmR1cGxleCk7CiBzMzIgIGlnYl9pZF9sZWRfaW5pdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX2xlZF9vZmYoc3RydWN0IGUxMDAwX2h3ICpodyk7Cit2b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyAqaHcsCisJICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQpOwogczMyICBpZ2Jfc2V0dXBfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX3ZhbGlkYXRlX21kaV9zZXR0aW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLApAQCAtNjAsNiArNjIsNyBAQAogdm9pZCBpZ2JfY2xlYXJfdmZ0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX3ZmdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiB2aWQsIGJvb2wgYWRkKTsKIHZvaWQgaWdiX2NvbmZpZ19jb2xsaXNpb25fZGlzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3ZvaWQgaWdiX2luaXRfcnhfYWRkcnMoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHJhcl9jb3VudCk7CiB2b2lkIGlnYl9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKTsKIHZvaWQgaWdiX3B1dF9od19zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICphZGRyLCB1MzIgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IGY1MGZhYzIuLmMxZjRkYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTczNSw3ICs3MzUsNyBAQAogCSAqICBvdGhlcjogIE5vIHNvZnR3YXJlIG92ZXJyaWRlLiAgVGhlIGZsb3cgY29udHJvbCBjb25maWd1cmF0aW9uCiAJICogICAgICAgICAgaW4gdGhlIEVFUFJPTSBpcyB1c2VkLgogCSAqLwotCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKKwlzd2l0Y2ggKGh3LT5mYy5jdXJyZW50X21vZGUpIHsKIAljYXNlIGUxMDAwX2ZjX25vbmU6CiAJCS8qCiAJCSAqIEZsb3cgY29udHJvbCAoUlggJiBUWCkgaXMgY29tcGxldGVseSBkaXNhYmxlZCBieSBhCkBAIC05OTIsNyArOTkyLDcgQEAKIAl1MzIgY3RybDsKIAogCS8qIFR1cm4gb2ZmIGZsb3cgY29udHJvbCB3aGVuIGZvcmNpbmcgc3BlZWQvZHVwbGV4ICovCi0JaHctPmZjLnR5cGUgPSBlMTAwMF9mY19ub25lOworCWh3LT5mYy5jdXJyZW50X21vZGUgPSBlMTAwMF9mY19ub25lOwogCiAJLyogRm9yY2Ugc3BlZWQvZHVwbGV4IG9uIHRoZSBtYWMgKi8KIAljdHJsID0gcmQzMihFMTAwMF9DVFJMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCmluZGV4IDZlNTkyNDUuLjM0NWQxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMzA1LDYgKzMwNSw3IEBACiAjZGVmaW5lIEUxMDAwX0NDTUNUTCAgICAgIDB4MDVCNDggLyogQ0NNIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgRTEwMDBfR0lPQ1RMICAgICAgMHgwNUI0NCAvKiBHSU8gQW5hbG9nIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgRTEwMDBfU0NDVEwgICAgICAgMHgwNUI0QyAvKiBQQ0ljIFBMTCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEUxMDAwX0dDUiAgICAgICAgIDB4MDVCMDAgLyogUENJLUV4IENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfRkFDVFBTICAgIDB4MDVCMzAgLyogRnVuY3Rpb24gQWN0aXZlIGFuZCBQb3dlciBTdGF0ZSB0byBNTkcgKi8KICNkZWZpbmUgRTEwMDBfU1dTTSAgICAgIDB4MDVCNTAgLyogU1cgU2VtYXBob3JlICovCiAjZGVmaW5lIEUxMDAwX0ZXU00gICAgICAweDA1QjU0IC8qIEZXIFNlbWFwaG9yZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCmluZGV4IGIyYzk4ZGUuLjcxMjZmZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKQEAgLTcwLDYgKzcwLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHZmX21hY19hZGRyZXNzZXNbRVRIX0FMRU5dOwogCXUxNiB2Zl9tY19oYXNoZXNbSUdCX01BWF9WRl9NQ19FTlRSSUVTXTsKIAl1MTYgbnVtX3ZmX21jX2hhc2hlczsKKwl1MTYgdmxhbnNfZW5hYmxlZDsKIAlib29sIGNsZWFyX3RvX3NlbmQ7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCmluZGV4IDk1OThhYzAuLmQwMDRjMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCkBAIC0xNjgsOCArMTY4LDcgQEAKIAkJZWNtZC0+ZHVwbGV4ID0gLTE7CiAJfQogCi0JZWNtZC0+YXV0b25lZyA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHx8Ci0JCQkgaHctPm1hYy5hdXRvbmVnKSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOworCWVjbWQtPmF1dG9uZWcgPSBody0+bWFjLmF1dG9uZWcgPyBBVVRPTkVHX0VOQUJMRSA6IEFVVE9ORUdfRElTQUJMRTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTkxLDIzICsxOTAsMjAgQEAKIAogCWlmIChlY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CiAJCWh3LT5tYWMuYXV0b25lZyA9IDE7Ci0JCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikKLQkJCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCQkgICAgIEFEVkVSVElTRURfRklCUkUgfAotCQkJCQkJICAgICBBRFZFUlRJU0VEX0F1dG9uZWc7Ci0JCWVsc2UKLQkJCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gZWNtZC0+YWR2ZXJ0aXNpbmcgfAotCQkJCQkJICAgICBBRFZFUlRJU0VEX1RQIHwKLQkJCQkJCSAgICAgQURWRVJUSVNFRF9BdXRvbmVnOworCQlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IGVjbWQtPmFkdmVydGlzaW5nIHwKKwkJCQkJICAgICBBRFZFUlRJU0VEX1RQIHwKKwkJCQkJICAgICBBRFZFUlRJU0VEX0F1dG9uZWc7CiAJCWVjbWQtPmFkdmVydGlzaW5nID0gaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQ7Ci0JfSBlbHNlCisJCWlmIChhZGFwdGVyLT5mY19hdXRvbmVnKQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZGVmYXVsdDsKKwl9IGVsc2UgewogCQlpZiAoaWdiX3NldF9zcGRfZHBseChhZGFwdGVyLCBlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCkpIHsKIAkJCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCX0KIAogCS8qIHJlc2V0IHRoZSBsaW5rICovCi0KIAlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCWlnYl9kb3duKGFkYXB0ZXIpOwogCQlpZ2JfdXAoYWRhcHRlcik7CkBAIC0yMjcsMTEgKzIyMywxMSBAQAogCXBhdXNlLT5hdXRvbmVnID0KIAkJKGFkYXB0ZXItPmZjX2F1dG9uZWcgPyBBVVRPTkVHX0VOQUJMRSA6IEFVVE9ORUdfRElTQUJMRSk7CiAKLQlpZiAoaHctPmZjLnR5cGUgPT0gZTEwMDBfZmNfcnhfcGF1c2UpCisJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gZTEwMDBfZmNfcnhfcGF1c2UpCiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7Ci0JZWxzZSBpZiAoaHctPmZjLnR5cGUgPT0gZTEwMDBfZmNfdHhfcGF1c2UpCisJZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBlMTAwMF9mY190eF9wYXVzZSkKIAkJcGF1c2UtPnR4X3BhdXNlID0gMTsKLQllbHNlIGlmIChody0+ZmMudHlwZSA9PSBlMTAwMF9mY19mdWxsKSB7CisJZWxzZSBpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBlMTAwMF9mY19mdWxsKSB7CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CiAJCXBhdXNlLT50eF9wYXVzZSA9IDE7CiAJfQpAQCAtMjQ5LDI2ICsyNDUsMjggQEAKIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCW1zbGVlcCgxKTsKIAotCWlmIChwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2Z1bGw7Ci0JZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfcnhfcGF1c2U7Ci0JZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfdHhfcGF1c2U7Ci0JZWxzZSBpZiAoIXBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX25vbmU7Ci0KLQlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGh3LT5mYy50eXBlOwotCiAJaWYgKGFkYXB0ZXItPmZjX2F1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZGVmYXVsdDsKIAkJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewogCQkJaWdiX2Rvd24oYWRhcHRlcik7CiAJCQlpZ2JfdXAoYWRhcHRlcik7CiAJCX0gZWxzZQogCQkJaWdiX3Jlc2V0KGFkYXB0ZXIpOwotCX0gZWxzZQotCQlyZXR2YWwgPSAoKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSA/Ci0JCQkgIGlnYl9zZXR1cF9saW5rKGh3KSA6IGlnYl9mb3JjZV9tYWNfZmMoaHcpKTsKKwl9IGVsc2UgeworCQlpZiAocGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKKwkJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2Z1bGw7CisJCWVsc2UgaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiAhcGF1c2UtPnR4X3BhdXNlKQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfcnhfcGF1c2U7CisJCWVsc2UgaWYgKCFwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfdHhfcGF1c2U7CisJCWVsc2UgaWYgKCFwYXVzZS0+cnhfcGF1c2UgJiYgIXBhdXNlLT50eF9wYXVzZSkKKwkJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX25vbmU7CisKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKworCQlyZXR2YWwgPSAoKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgPworCQkJICBpZ2JfZm9yY2VfbWFjX2ZjKGh3KSA6IGlnYl9zZXR1cF9saW5rKGh3KSk7CisJfQogCiAJY2xlYXJfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTQ4Myw4ICsxNDgxLDcgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiByZWc7CiAKLQlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKLQkgICAgaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgewogCQlyZWcgPSByZDMyKEUxMDAwX1JDVEwpOwogCQlyZWcgfD0gRTEwMDBfUkNUTF9MQk1fVENWUjsKIAkJd3IzMihFMTAwMF9SQ1RMLCByZWcpOwpAQCAtMTg0Myw3ICsxODQwLDYgQEAKIHN0YXRpYyBpbnQgaWdiX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xODUyLDExICsxODQ4LDYgQEAKIAkgICAgIWRldmljZV9jYW5fd2FrZXVwKCZhZGFwdGVyLT5wZGV2LT5kZXYpKQogCQlyZXR1cm4gd29sLT53b2xvcHRzID8gLUVPUE5PVFNVUFAgOiAwOwogCi0Jc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCiAJLyogdGhlc2Ugc2V0dGluZ3Mgd2lsbCBhbHdheXMgb3ZlcnJpZGUgd2hhdCB3ZSBjdXJyZW50bHkgaGF2ZSAqLwogCWFkYXB0ZXItPndvbCA9IDA7CiAKQEAgLTIwMjUsNyArMjAxNiw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlnYl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaWdiX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgICAgICAgICAgID0gaWdiX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzICAgICAgICAgICA9IGlnYl9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvICAgICAgICAgICAgPSBpZ2JfZ2V0X2RydmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IGFkYjA5ZDMuLjk0MzE4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC02NSw2ICs2NSw3IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X05TKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfRklCRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVMpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVNfUVVBRCksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVFQl9DT1BQRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCkBAIC05MywxMyArOTQsMTUgQEAKIHN0YXRpYyB2b2lkIGlnYl9jbGVhbl9hbGxfcnhfcmluZ3Moc3RydWN0IGlnYl9hZGFwdGVyICopOwogc3RhdGljIHZvaWQgaWdiX2NsZWFuX3R4X3Jpbmcoc3RydWN0IGlnYl9yaW5nICopOwogc3RhdGljIHZvaWQgaWdiX2NsZWFuX3J4X3Jpbmcoc3RydWN0IGlnYl9yaW5nICopOwotc3RhdGljIHZvaWQgaWdiX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGlnYl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIGlnYl91cGRhdGVfcGh5X2luZm8odW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBpZ2Jfd2F0Y2hkb2codW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBpZ2Jfd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Ci1zdGF0aWMgaW50IGlnYl94bWl0X2ZyYW1lX3JpbmdfYWR2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosCi0JCQkJICBzdHJ1Y3QgaWdiX3JpbmcgKik7Ci1zdGF0aWMgaW50IGlnYl94bWl0X2ZyYW1lX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpZ2JfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqLAorCQkJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaWdiX3htaXRfZnJhbWVfYWR2KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlnYl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGlnYl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7CiBzdGF0aWMgaW50IGlnYl9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICosIHZvaWQgKik7CkBAIC0xMjcsNyArMTMwLDcgQEAKIHN0YXRpYyB2b2lkIGlnYl9waW5nX2FsbF92ZnMoc3RydWN0IGlnYl9hZGFwdGVyICopOwogc3RhdGljIHZvaWQgaWdiX21zZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKIHN0YXRpYyBpbnQgaWdiX3Jjdl9tc2dfZnJvbV92ZihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgdTMyKTsKLXN0YXRpYyB2b2lkIGlnYl9zZXRfbWNfbGlzdF9wb29scyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgaW50LCB1MTYpOworc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfcmFoX3Bvb2woc3RydWN0IGUxMDAwX2h3ICosIGludCAsIGludCk7CiBzdGF0aWMgdm9pZCBpZ2Jfdm1tX2NvbnRyb2woc3RydWN0IGlnYl9hZGFwdGVyICopOwogc3RhdGljIGludCBpZ2Jfc2V0X3ZmX21hYyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKIHN0YXRpYyB2b2lkIGlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTE1MSw2ICsxNTQsMTIgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiB2bW9scjsKIAorCS8qIGlmIGl0IGlzbid0IHRoZSBQRiBjaGVjayB0byBzZWUgaWYgVkZzIGFyZSBlbmFibGVkIGFuZAorCSAqIGluY3JlYXNlIHRoZSBzaXplIHRvIHN1cHBvcnQgdmxhbiB0YWdzICovCisJaWYgKHZmbiA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgJiYKKwkgICAgYWRhcHRlci0+dmZfZGF0YVt2Zm5dLnZsYW5zX2VuYWJsZWQpCisJCXNpemUgKz0gVkxBTl9UQUdfU0laRTsKKwogCXZtb2xyID0gcmQzMihFMTAwMF9WTU9MUih2Zm4pKTsKIAl2bW9sciAmPSB+RTEwMDBfVk1PTFJfUkxQTUxfTUFTSzsKIAl2bW9sciB8PSBzaXplIHwgRTEwMDBfVk1PTFJfTFBFOwpAQCAtODE4LDkgKzgyNywxMSBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7Ci0JCXdyMzIoRTEwMDBfRUlBTSwgMCk7Ci0JCXdyMzIoRTEwMDBfRUlNQywgfjApOwotCQl3cjMyKEUxMDAwX0VJQUMsIDApOworCQl1MzIgcmVndmFsID0gcmQzMihFMTAwMF9FSUFNKTsKKwkJd3IzMihFMTAwMF9FSUFNLCByZWd2YWwgJiB+YWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7CisJCXdyMzIoRTEwMDBfRUlNQywgYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayk7CisJCXJlZ3ZhbCA9IHJkMzIoRTEwMDBfRUlBQyk7CisJCXdyMzIoRTEwMDBfRUlBQywgcmVndmFsICYgfmFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwogCX0KIAogCXdyMzIoRTEwMDBfSUFNLCAwKTsKQEAgLTgzOCw4ICs4NDksMTAgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCiAJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykgewotCQl3cjMyKEUxMDAwX0VJQUMsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOwotCQl3cjMyKEUxMDAwX0VJQU0sIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2spOworCQl1MzIgcmVndmFsID0gcmQzMihFMTAwMF9FSUFDKTsKKwkJd3IzMihFMTAwMF9FSUFDLCByZWd2YWwgfCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKKwkJcmVndmFsID0gcmQzMihFMTAwMF9FSUFNKTsKKwkJd3IzMihFMTAwMF9FSUFNLCByZWd2YWwgfCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKIAkJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKIAkJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCiAJCQl3cjMyKEUxMDAwX01CVkZJTVIsIDB4RkYpOwpAQCAtOTI1LDcgKzkzOCw3IEBACiAJaW50IGk7CiAKIAlpZ2JfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7Ci0JaWdiX3NldF9tdWx0aShuZXRkZXYpOworCWlnYl9zZXRfcnhfbW9kZShuZXRkZXYpOwogCiAJaWdiX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKIApAQCAtMTEyOSw3ICsxMTQyLDcgQEAKIAl9CiAJZmMtPnBhdXNlX3RpbWUgPSAweEZGRkY7CiAJZmMtPnNlbmRfeG9uID0gMTsKLQlmYy0+dHlwZSA9IGZjLT5vcmlnaW5hbF90eXBlOworCWZjLT5jdXJyZW50X21vZGUgPSBmYy0+cmVxdWVzdGVkX21vZGU7CiAKIAkvKiBkaXNhYmxlIHJlY2VpdmUgZm9yIGFsbCBWRnMgYW5kIHdhaXQgb25lIHNlY29uZCAqLwogCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KSB7CkBAIC0xMTY2LDcgKzExNzksOCBAQAogCS5uZG9fc3RvcAkJPSBpZ2JfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGlnYl94bWl0X2ZyYW1lX2FkdiwKIAkubmRvX2dldF9zdGF0cwkJPSBpZ2JfZ2V0X3N0YXRzLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaWdiX3NldF9tdWx0aSwKKwkubmRvX3NldF9yeF9tb2RlCT0gaWdiX3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaWdiX3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaWdiX3NldF9tYWMsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGlnYl9jaGFuZ2VfbXR1LAogCS5uZG9fZG9faW9jdGwJCT0gaWdiX2lvY3RsLApAQCAtMTM3OSw2ICsxMzkzLDcgQEAKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTTsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKIAogCWlmIChwY2lfdXNpbmdfZGFjKQpAQCAtMTQyNiw4ICsxNDQxLDggQEAKIAlody0+bWFjLmF1dG9uZWcgPSB0cnVlOwogCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gMHgyZjsKIAotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gZTEwMDBfZmNfZGVmYXVsdDsKLQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CisJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZGVmYXVsdDsKKwlody0+ZmMuY3VycmVudF9tb2RlID0gZTEwMDBfZmNfZGVmYXVsdDsKIAogCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gSUdCX0RFRkFVTFRfSVRSOwogCWFkYXB0ZXItPml0ciA9IElHQl9TVEFSVF9JVFI7CkBAIC0yNTE1LDc1ICsyNTMwLDk0IEBACiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCW1lbWNweShody0+bWFjLmFkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCi0JaHctPm1hYy5vcHMucmFyX3NldChodywgaHctPm1hYy5hZGRyLCAwKTsKLQorCWlnYl9yYXJfc2V0KGh3LCBody0+bWFjLmFkZHIsIDApOwogCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogaWdiX3NldF9tdWx0aSAtIE11bHRpY2FzdCBhbmQgUHJvbWlzY3VvdXMgbW9kZSBzZXQKKyAqIGlnYl9zZXRfcnhfbW9kZSAtIFNlY29uZGFyeSBVbmljYXN0LCBNdWx0aWNhc3QgYW5kIFByb21pc2N1b3VzIG1vZGUgc2V0CiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKgotICogVGhlIHNldF9tdWx0aSBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzCi0gKiBsaXN0IG9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmbGFncyBhcmUgdXBkYXRlZC4gIFRoaXMgcm91dGluZSBpcwotICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIG11bHRpY2FzdCwKKyAqIFRoZSBzZXRfcnhfbW9kZSBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHVuaWNhc3Qgb3IgbXVsdGljYXN0CisgKiBhZGRyZXNzIGxpc3RzIG9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmbGFncyBhcmUgdXBkYXRlZC4gIFRoaXMgcm91dGluZSBpcworICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIHVuaWNhc3QsIG11bHRpY2FzdCwKICAqIHByb21pc2N1b3VzIG1vZGUsIGFuZCBhbGwtbXVsdGkgYmVoYXZpb3IuCiAgKiovCi1zdGF0aWMgdm9pZCBpZ2Jfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgdm9pZCBpZ2Jfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKKwl1bnNpZ25lZCBpbnQgcmFyX2VudHJpZXMgPSBody0+bWFjLnJhcl9lbnRyeV9jb3VudCAtCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgKyAxKTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKIAl1OCAgKm10YV9saXN0ID0gTlVMTDsKIAl1MzIgcmN0bDsKIAlpbnQgaTsKIAogCS8qIENoZWNrIGZvciBQcm9taXNjdW91cyBhbmQgQWxsIE11bHRpY2FzdCBtb2RlcyAqLwotCiAJcmN0bCA9IHJkMzIoRTEwMDBfUkNUTCk7CiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXJjdGwgfD0gKEUxMDAwX1JDVExfVVBFIHwgRTEwMDBfUkNUTF9NUEUpOwogCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1ZGRTsKIAl9IGVsc2UgewotCQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKIAkJCXJjdGwgfD0gRTEwMDBfUkNUTF9NUEU7CisJCWVsc2UKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfTVBFOworCisJCWlmIChuZXRkZXYtPnVjLmNvdW50ID4gcmFyX2VudHJpZXMpCisJCQlyY3RsIHw9IEUxMDAwX1JDVExfVVBFOworCQllbHNlCiAJCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1VQRTsKLQkJfSBlbHNlCi0JCQlyY3RsICY9IH4oRTEwMDBfUkNUTF9VUEUgfCBFMTAwMF9SQ1RMX01QRSk7CiAJCXJjdGwgfD0gRTEwMDBfUkNUTF9WRkU7CiAJfQogCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAKLQlpZiAobmV0ZGV2LT5tY19jb3VudCkgewotCQltdGFfbGlzdCA9IGt6YWxsb2MobmV0ZGV2LT5tY19jb3VudCAqIDYsIEdGUF9BVE9NSUMpOwotCQlpZiAoIW10YV9saXN0KSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgbXVsdGljYXN0IGZpbHRlciBsaXN0XG4iKTsKLQkJCXJldHVybjsKKwlpZiAobmV0ZGV2LT51Yy5jb3VudCAmJiByYXJfZW50cmllcykgeworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmbmV0ZGV2LT51Yy5saXN0LCBsaXN0KSB7CisJCQlpZiAoIXJhcl9lbnRyaWVzKQorCQkJCWJyZWFrOworCQkJaWdiX3Jhcl9zZXQoaHcsIGhhLT5hZGRyLCByYXJfZW50cmllcyk7CisJCQlpZ2Jfc2V0X3JhaF9wb29sKGh3LCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50LAorCQkJICAgICAgICAgICAgICAgICByYXJfZW50cmllcyk7CisJCQlyYXJfZW50cmllcy0tOwogCQl9CiAJfQorCS8qIHdyaXRlIHRoZSBhZGRyZXNzZXMgaW4gcmV2ZXJzZSBvcmRlciB0byBhdm9pZCB3cml0ZSBjb21iaW5pbmcgKi8KKwlmb3IgKDsgcmFyX2VudHJpZXMgPiAwIDsgcmFyX2VudHJpZXMtLSkgeworCQl3cjMyKEUxMDAwX1JBSChyYXJfZW50cmllcyksIDApOworCQl3cjMyKEUxMDAwX1JBTChyYXJfZW50cmllcyksIDApOworCX0KKwl3cmZsKCk7CisKKwlpZiAoIW5ldGRldi0+bWNfY291bnQpIHsKKwkJLyogbm90aGluZyB0byBwcm9ncmFtLCBzbyBjbGVhciBtYyBsaXN0ICovCisJCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBOVUxMLCAwKTsKKwkJaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKKwkJcmV0dXJuOworCX0KKworCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7CisJaWYgKCFtdGFfbGlzdCkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCSAgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBtdWx0aWNhc3QgZmlsdGVyIGxpc3RcbiIpOworCQlyZXR1cm47CisJfQogCiAJLyogVGhlIHNoYXJlZCBmdW5jdGlvbiBleHBlY3RzIGEgcGFja2VkIGFycmF5IG9mIG9ubHkgYWRkcmVzc2VzLiAqLwotCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKLQogCWZvciAoaSA9IDA7IGkgPCBuZXRkZXYtPm1jX2NvdW50OyBpKyspIHsKIAkJaWYgKCFtY19wdHIpCiAJCQlicmVhazsKIAkJbWVtY3B5KG10YV9saXN0ICsgKGkqRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCW1jX3B0ciA9IG1jX3B0ci0+bmV4dDsKIAl9Ci0JaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG10YV9saXN0LCBpLAotCSAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgKyAxLAotCSAgICAgICAgICAgICAgICAgICAgICAgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKLQotCWlnYl9zZXRfbWNfbGlzdF9wb29scyhhZGFwdGVyLCBpLCBtYWMtPnJhcl9lbnRyeV9jb3VudCk7Ci0JaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKLQorCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtdGFfbGlzdCwgaSk7CiAJa2ZyZWUobXRhX2xpc3QpOworCWlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoYWRhcHRlcik7CiB9CiAKIC8qIE5lZWQgdG8gd2FpdCBhIGZldyBzZWNvbmRzIGFmdGVyIGxpbmsgdXAgdG8gZ2V0IGRpYWdub3N0aWMgaW5mb3JtYXRpb24gZnJvbQpAQCAtMjYxOCwxMCArMjY1Miw2IEBACiAJCQlsaW5rX2FjdGl2ZSA9IHRydWU7CiAJCX0KIAkJYnJlYWs7Ci0JY2FzZSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyOgotCQlyZXRfdmFsID0gaHctPm1hYy5vcHMuY2hlY2tfZm9yX2xpbmsoaHcpOwotCQlsaW5rX2FjdGl2ZSA9ICEhKHJkMzIoRTEwMDBfU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSk7Ci0JCWJyZWFrOwogCWNhc2UgZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXM6CiAJCXJldF92YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluayhodyk7CiAJCWxpbmtfYWN0aXZlID0gaHctPm1hYy5zZXJkZXNfaGFzX2xpbms7CkBAIC0zMjk4LDkgKzMzMjgsOSBAQAogCXJldHVybiBfX2lnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgaWdiX3htaXRfZnJhbWVfcmluZ19hZHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAotCQkJCSAgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKK3N0YXRpYyBuZXRkZXZfdHhfdCBpZ2JfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQkgICBzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBpbnQgZmlyc3Q7CkBAIC0zMzg4LDcgKzM0MTgsOCBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBpbnQgaWdiX3htaXRfZnJhbWVfYWR2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaWdiX3htaXRfZnJhbWVfYWR2KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZzsKQEAgLTM0MDEsNyArMzQzMiw3IEBACiAJICogdG8gYSBmbG93LiAgUmlnaHQgbm93LCBwZXJmb3JtYW5jZSBpcyBpbXBhY3RlZCBzbGlnaHRseSBuZWdhdGl2ZWx5CiAJICogaWYgdXNpbmcgbXVsdGlwbGUgdHggcXVldWVzLiAgSWYgdGhlIHN0YWNrIGJyZWFrcyBhd2F5IGZyb20gYQogCSAqIHNpbmdsZSBxZGlzYyBpbXBsZW1lbnRhdGlvbiwgd2UgY2FuIGxvb2sgYXQgdGhpcyBhZ2Fpbi4gKi8KLQlyZXR1cm4gKGlnYl94bWl0X2ZyYW1lX3JpbmdfYWR2KHNrYiwgbmV0ZGV2LCB0eF9yaW5nKSk7CisJcmV0dXJuIGlnYl94bWl0X2ZyYW1lX3JpbmdfYWR2KHNrYiwgbmV0ZGV2LCB0eF9yaW5nKTsKIH0KIAogLyoqCkBAIC0zOTM4LDcgKzM5NjksNyBAQAogCQl2Zl9kYXRhLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07OwogCiAJLyogRmx1c2ggYW5kIHJlc2V0IHRoZSBtdGEgd2l0aCB0aGUgbmV3IHZhbHVlcyAqLwotCWlnYl9zZXRfbXVsdGkoYWRhcHRlci0+bmV0ZGV2KTsKKwlpZ2Jfc2V0X3J4X21vZGUoYWRhcHRlci0+bmV0ZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzk4MSw2ICs0MDEyLDggQEAKIAogCQl3cjMyKEUxMDAwX1ZMVkYoaSksIHJlZyk7CiAJfQorCisJYWRhcHRlci0+dmZfZGF0YVt2Zl0udmxhbnNfZW5hYmxlZCA9IDA7CiB9CiAKIHN0YXRpYyBzMzIgaWdiX3ZsdmZfc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZpZCwgYm9vbCBhZGQsIHUzMiB2ZikKQEAgLTQwMjksNiArNDA2MiwyMiBAQAogCQkJcmVnIHw9IHZpZDsKIAogCQkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCisJCQkvKiBkbyBub3QgbW9kaWZ5IFJMUE1MIGZvciBQRiBkZXZpY2VzICovCisJCQlpZiAodmYgPj0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJCQlyZXR1cm4gMDsKKworCQkJaWYgKCFhZGFwdGVyLT52Zl9kYXRhW3ZmXS52bGFuc19lbmFibGVkKSB7CisJCQkJdTMyIHNpemU7CisJCQkJcmVnID0gcmQzMihFMTAwMF9WTU9MUih2ZikpOworCQkJCXNpemUgPSByZWcgJiBFMTAwMF9WTU9MUl9STFBNTF9NQVNLOworCQkJCXNpemUgKz0gNDsKKwkJCQlyZWcgJj0gfkUxMDAwX1ZNT0xSX1JMUE1MX01BU0s7CisJCQkJcmVnIHw9IHNpemU7CisJCQkJd3IzMihFMTAwMF9WTU9MUih2ZiksIHJlZyk7CisJCQl9CisJCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS52bGFuc19lbmFibGVkKys7CisKIAkJCXJldHVybiAwOwogCQl9CiAJfSBlbHNlIHsKQEAgLTQwNDEsNiArNDA5MCwyMSBAQAogCQkJCWlnYl92ZnRhX3NldChodywgdmlkLCBmYWxzZSk7CiAJCQl9CiAJCQl3cjMyKEUxMDAwX1ZMVkYoaSksIHJlZyk7CisKKwkJCS8qIGRvIG5vdCBtb2RpZnkgUkxQTUwgZm9yIFBGIGRldmljZXMgKi8KKwkJCWlmICh2ZiA+PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQkJCXJldHVybiAwOworCisJCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS52bGFuc19lbmFibGVkLS07CisJCQlpZiAoIWFkYXB0ZXItPnZmX2RhdGFbdmZdLnZsYW5zX2VuYWJsZWQpIHsKKwkJCQl1MzIgc2l6ZTsKKwkJCQlyZWcgPSByZDMyKEUxMDAwX1ZNT0xSKHZmKSk7CisJCQkJc2l6ZSA9IHJlZyAmIEUxMDAwX1ZNT0xSX1JMUE1MX01BU0s7CisJCQkJc2l6ZSAtPSA0OworCQkJCXJlZyAmPSB+RTEwMDBfVk1PTFJfUkxQTUxfTUFTSzsKKwkJCQlyZWcgfD0gc2l6ZTsKKwkJCQl3cjMyKEUxMDAwX1ZNT0xSKHZmKSwgcmVnKTsKKwkJCX0KIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNDA3MiwxMyArNDEzNiwxNCBAQAogCWFkYXB0ZXItPnZmX2RhdGFbdmZdLm51bV92Zl9tY19oYXNoZXMgPSAwOwogCiAJLyogRmx1c2ggYW5kIHJlc2V0IHRoZSBtdGEgd2l0aCB0aGUgbmV3IHZhbHVlcyAqLwotCWlnYl9zZXRfbXVsdGkoYWRhcHRlci0+bmV0ZGV2KTsKKwlpZ2Jfc2V0X3J4X21vZGUoYWRhcHRlci0+bmV0ZGV2KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGlnYl92Zl9yZXNldF9tc2coc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1bnNpZ25lZCBjaGFyICp2Zl9tYWMgPSBhZGFwdGVyLT52Zl9kYXRhW3ZmXS52Zl9tYWNfYWRkcmVzc2VzOworCWludCByYXJfZW50cnkgPSBody0+bWFjLnJhcl9lbnRyeV9jb3VudCAtICh2ZiArIDEpOwogCXUzMiByZWcsIG1zZ2J1ZlszXTsKIAl1OCAqYWRkciA9ICh1OCAqKSgmbXNnYnVmWzFdKTsKIApAQCAtNDA4Niw4ICs0MTUxLDggQEAKIAlpZ2JfdmZfcmVzZXRfZXZlbnQoYWRhcHRlciwgdmYpOwogCiAJLyogc2V0IHZmIG1hYyBhZGRyZXNzICovCi0JaWdiX3Jhcl9zZXQoaHcsIHZmX21hYywgdmYgKyAxKTsKLQlpZ2Jfc2V0X3JhaF9wb29sKGh3LCB2ZiwgdmYgKyAxKTsKKwlpZ2JfcmFyX3NldChodywgdmZfbWFjLCByYXJfZW50cnkpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIHZmLCByYXJfZW50cnkpOwogCiAJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLwogCXJlZyA9IHJkMzIoRTEwMDBfVkZURSk7CkBAIC00NTQyLDYgKzQ2MDcsMjAgQEAKIAlhZGFwdGVyLT5od19jc3VtX2dvb2QrKzsKIH0KIAorc3RhdGljIGlubGluZSB1MTYgaWdiX2dldF9obGVuKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyAqcnhfZGVzYykKK3sKKwkvKiBIVyB3aWxsIG5vdCBETUEgaW4gZGF0YSBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gYnVmZmVyLCBldmVuIGlmIGl0CisJICogcGFyc2VzIHRoZSAoTkZTLCBvZiBjb3Vyc2UpIGhlYWRlciB0byBiZSBsYXJnZXIuICBJbiB0aGF0IGNhc2UsIGl0CisJICogZmlsbHMgdGhlIGhlYWRlciBidWZmZXIgYW5kIHNwaWxscyB0aGUgcmVzdCBpbnRvIHRoZSBwYWdlLgorCSAqLworCXUxNiBobGVuID0gKGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhkcl9pbmZvKSAmCisJICAgICAgICAgICBFMTAwMF9SWERBRFZfSERSQlVGTEVOX01BU0spID4+IEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQ7CisJaWYgKGhsZW4gPiBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKKwkJaGxlbiA9IGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplOworCXJldHVybiBobGVuOworfQorCiBzdGF0aWMgYm9vbCBpZ2JfY2xlYW5fcnhfaXJxX2FkdihzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcsCiAJCQkJIGludCAqd29ya19kb25lLCBpbnQgYnVkZ2V0KQogewpAQCAtNDU1Niw3ICs0NjM1LDggQEAKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CiAJdW5zaWduZWQgaW50IHRvdGFsX2J5dGVzID0gMCwgdG90YWxfcGFja2V0cyA9IDA7CiAJdW5zaWduZWQgaW50IGk7Ci0JdTMyIGxlbmd0aCwgaGxlbiwgc3RhdGVycjsKKwl1MzIgc3RhdGVycjsKKwl1MTYgbGVuZ3RoOwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CkBAIC00NTkzLDE3ICs0NjczLDggQEAKIAkJCWdvdG8gc2VuZF91cDsKIAkJfQogCi0JCS8qIEhXIHdpbGwgbm90IERNQSBpbiBkYXRhIGxhcmdlciB0aGFuIHRoZSBnaXZlbiBidWZmZXIsIGV2ZW4KLQkJICogaWYgaXQgcGFyc2VzIHRoZSAoTkZTLCBvZiBjb3Vyc2UpIGhlYWRlciB0byBiZSBsYXJnZXIuICBJbgotCQkgKiB0aGF0IGNhc2UsIGl0IGZpbGxzIHRoZSBoZWFkZXIgYnVmZmVyIGFuZCBzcGlsbHMgdGhlIHJlc3QKLQkJICogaW50byB0aGUgcGFnZS4KLQkJICovCi0JCWhsZW4gPSAobGUxNl90b19jcHUocnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaGRyX2luZm8pICYKLQkJICBFMTAwMF9SWERBRFZfSERSQlVGTEVOX01BU0spID4+IEUxMDAwX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQ7Ci0JCWlmIChobGVuID4gYWRhcHRlci0+cnhfcHNfaGRyX3NpemUpCi0JCQlobGVuID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7Ci0KLQkJaWYgKCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CisJCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7CisJCQl1MTYgaGxlbiA9IGlnYl9nZXRfaGxlbihhZGFwdGVyLCByeF9kZXNjKTsKIAkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKIAkJCQkJIGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKQEAgLTQ4NDMsOCArNDkxNCw2IEBACiAJCWRhdGEtPnBoeV9pZCA9IGFkYXB0ZXItPmh3LnBoeS5hZGRyOwogCQlicmVhazsKIAljYXNlIFNJT0NHTUlJUkVHOgotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoaWdiX3JlYWRfcGh5X3JlZygmYWRhcHRlci0+aHcsIGRhdGEtPnJlZ19udW0gJiAweDFGLAogCQkgICAgICAgICAgICAgICAgICAgICAmZGF0YS0+dmFsX291dCkpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTUwMzMsNiArNTEwMiwzNCBAQAogCX0KIH0KIAorczMyIGlnYl9yZWFkX3BjaWVfY2FwX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLCB1MTYgKnZhbHVlKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXUxNiBjYXBfb2Zmc2V0OworCisJY2FwX29mZnNldCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoYWRhcHRlci0+cGRldiwgUENJX0NBUF9JRF9FWFApOworCWlmICghY2FwX29mZnNldCkKKwkJcmV0dXJuIC1FMTAwMF9FUlJfQ09ORklHOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgY2FwX29mZnNldCArIHJlZywgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3MzMiBpZ2Jfd3JpdGVfcGNpZV9jYXBfcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiByZWcsIHUxNiAqdmFsdWUpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IGNhcF9vZmZzZXQ7CisKKwljYXBfb2Zmc2V0ID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShhZGFwdGVyLT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKCFjYXBfb2Zmc2V0KQorCQlyZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CisKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgY2FwX29mZnNldCArIHJlZywgKnZhbHVlKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpZ2Jfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQogewpAQCAtNTEzNiwxNCArNTIzMyw2IEBACiAKIAltYWMtPmF1dG9uZWcgPSAwOwogCi0JLyogRmliZXIgTklDcyBvbmx5IGFsbG93IDEwMDAgZ2JwcyBGdWxsIGR1cGxleCAqLwotCWlmICgoYWRhcHRlci0+aHcucGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgJiYKLQkJc3BkZHBseCAhPSAoU1BFRURfMTAwMCArIERVUExFWF9GVUxMKSkgewotCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkiVW5zdXBwb3J0ZWQgU3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlzd2l0Y2ggKHNwZGRwbHgpIHsKIAljYXNlIFNQRUVEXzEwICsgRFVQTEVYX0hBTEY6CiAJCW1hYy0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9IEFEVkVSVElTRV8xMF9IQUxGOwpAQCAtNTIwMiw3ICs1MjkxLDcgQEAKIAogCWlmICh3dWZjKSB7CiAJCWlnYl9zZXR1cF9yY3RsKGFkYXB0ZXIpOwotCQlpZ2Jfc2V0X211bHRpKG5ldGRldik7CisJCWlnYl9zZXRfcnhfbW9kZShuZXRkZXYpOwogCiAJCS8qIHR1cm4gb24gYWxsLW11bHRpIG1vZGUgaWYgd2FrZSBvbiBtdWx0aWNhc3QgaXMgZW5hYmxlZCAqLwogCQlpZiAod3VmYyAmIEUxMDAwX1dVRkNfTUMpIHsKQEAgLTU0NTIsMjkgKzU1NDEsMTcgQEAKIAlpZ2JfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CiB9CiAKLXN0YXRpYyB2b2lkIGlnYl9zZXRfbWNfbGlzdF9wb29scyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICBpbnQgZW50cnlfY291bnQsIHUxNiB0b3RhbF9yYXJfZmlsdGVycykKLXsKLQlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCWludCBpID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDE7Ci0KLQlpZiAoKGkgKyBlbnRyeV9jb3VudCkgPCB0b3RhbF9yYXJfZmlsdGVycykKLQkJdG90YWxfcmFyX2ZpbHRlcnMgPSBpICsgZW50cnlfY291bnQ7Ci0KLQlmb3IgKDsgaSA8IHRvdGFsX3Jhcl9maWx0ZXJzOyBpKyspCi0JCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIGkpOwotfQotCiBzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZmLCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCWludCByYXJfZW50cnkgPSB2ZiArIDE7IC8qIFZGIE1BQyBhZGRyZXNzZXMgc3RhcnQgYXQgZW50cnkgMSAqLwotCi0JaWdiX3Jhcl9zZXQoaHcsIG1hY19hZGRyLCByYXJfZW50cnkpOworCS8qIFZGIE1BQyBhZGRyZXNzZXMgc3RhcnQgYXQgZW5kIG9mIHJlY2VpdmUgYWRkcmVzc2VzIGFuZCBtb3ZlcworCSAqIHRvcndhcmRzIHRoZSBmaXJzdCwgYXMgYSByZXN1bHQgYSBjb2xsaXNpb24gc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSAqLworCWludCByYXJfZW50cnkgPSBody0+bWFjLnJhcl9lbnRyeV9jb3VudCAtICh2ZiArIDEpOwogCiAJbWVtY3B5KGFkYXB0ZXItPnZmX2RhdGFbdmZdLnZmX21hY19hZGRyZXNzZXMsIG1hY19hZGRyLCBFVEhfQUxFTik7CiAKKwlpZ2JfcmFyX3NldChodywgbWFjX2FkZHIsIHJhcl9lbnRyeSk7CiAJaWdiX3NldF9yYWhfcG9vbChodywgdmYsIHJhcl9lbnRyeSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKaW5kZXggMmJjOWQ2My4uOTEwMjRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvbmV0ZGV2LmMKQEAgLTk2LDggKzk2LDYgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX1JYRF9TUENfVkxBTl9NQVNLKTsKIAllbHNlCiAJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQluZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWdidmZfcnhfY2hlY2tzdW1fYWR2KHN0cnVjdCBpZ2J2Zl9hZGFwdGVyICphZGFwdGVyLApAQCAtMTQ5LDcgKzE0Nyw2IEBACiAJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7CiAJZWxzZQogCQlidWZzeiA9IGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW47Ci0JYnVmc3ogKz0gTkVUX0lQX0FMSUdOOwogCiAJd2hpbGUgKGNsZWFuZWRfY291bnQtLSkgewogCQlyeF9kZXNjID0gSUdCVkZfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwpAQCAtMTczLDcgKzE3MCw3IEBACiAJCX0KIAogCQlpZiAoIWJ1ZmZlcl9pbmZvLT5za2IpIHsKLQkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBidWZzeik7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgYnVmc3ogKyBORVRfSVBfQUxJR04pOwogCQkJaWYgKCFza2IpIHsKIAkJCQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOwogCQkJCWdvdG8gbm9fYnVmZmVyczsKQEAgLTI4Niw3ICsyODMsNyBAQAogCiAJCWlmICghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgewogCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAotCQkJICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSArIE5FVF9JUF9BTElHTiwKKwkJCSAgICAgICAgICAgICAgICAgYWRhcHRlci0+cnhfcHNfaGRyX3NpemUsCiAJCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlza2JfcHV0KHNrYiwgaGxlbik7CiAJCX0KQEAgLTM0Myw4ICszNDAsNiBAQAogCQlpZ2J2Zl9yZWNlaXZlX3NrYihhZGFwdGVyLCBuZXRkZXYsIHNrYiwgc3RhdGVyciwKIAkJICAgICAgICAgICAgICAgICAgcnhfZGVzYy0+d2IudXBwZXIudmxhbik7CiAKLQkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQogbmV4dF9kZXNjOgogCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IgPSAwOwogCkBAIC0yMjA1LDkgKzIyMDAsOSBAQAogCW1taW93YigpOwogfQogCi1zdGF0aWMgaW50IGlnYnZmX3htaXRfZnJhbWVfcmluZ19hZHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlnYnZmX3JpbmcgKnR4X3JpbmcpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaWdidmZfeG1pdF9mcmFtZV9yaW5nX2FkdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCSAgICAgc3RydWN0IGlnYnZmX3JpbmcgKnR4X3JpbmcpCiB7CiAJc3RydWN0IGlnYnZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGludCBmaXJzdCwgdHhfZmxhZ3MgPSAwOwpAQCAtMjI4MCwxMSArMjI3NSwxMSBAQAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBpbnQgaWdidmZfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlnYnZmX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaWdidmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGlnYnZmX3JpbmcgKnR4X3Jpbmc7Ci0JaW50IHJldHZhbDsKIAogCWlmICh0ZXN0X2JpdChfX0lHQlZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTIyOTMsOSArMjI4OCw3IEBACiAKIAl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbMF07CiAKLQlyZXR2YWwgPSBpZ2J2Zl94bWl0X2ZyYW1lX3JpbmdfYWR2KHNrYiwgbmV0ZGV2LCB0eF9yaW5nKTsKLQotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGlnYnZmX3htaXRfZnJhbWVfcmluZ19hZHYoc2tiLCBuZXRkZXYsIHR4X3JpbmcpOwogfQogCiAvKioKQEAgLTI1MTIsNiArMjUwNSw5IEBACiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKKwlpZiAoc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWlnYnZmX2Rvd24oYWRhcHRlcik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKaW5kZXggZTNjZmVmYS4uOGVjMTVhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYworKysgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCkBAIC0xNTE1LDcgKzE1MTUsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZpcC0+aW9jM19sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGlvYzNfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXBnLmMgYi9kcml2ZXJzL25ldC9pcGcuYwppbmRleCA0MzAxOTQ2Li45ZjdiNWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcGcuYworKysgYi9kcml2ZXJzL25ldC9pcGcuYwpAQCAtMTg1OCw3ICsxODU4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcGdfbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlwZ19uaWNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwZ19uaWNfcHJpdmF0ZSAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gc3AtPmlvYWRkcjsKQEAgLTIxODUsNyArMjE4Niw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlwZ19ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaXBnX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBpcGdfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBpcGdfc2V0X3NldHRpbmdzLAogCS5ud2F5X3Jlc2V0ICAgPSBpcGdfbndheV9yZXNldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYwppbmRleCBhZDE3OTU1Li4xMmM3YjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCkBAIC0xMTEsNyArMTExLDggQEAKIHN0YXRpYyB2b2lkIGFsaV9pcmNjX2NoYW5nZV9zcGVlZChzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGYsIF9fdTMyIGJhdWQpOwogCiAvKiBTSVIgZnVuY3Rpb24gKi8KLXN0YXRpYyBpbnQgIGFsaV9pcmNjX3Npcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgYWxpX2lyY2Nfc2lyX2ludGVycnVwdChzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIHZvaWQgYWxpX2lyY2Nfc2lyX3JlY2VpdmUoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKTsKIHN0YXRpYyB2b2lkIGFsaV9pcmNjX3Npcl93cml0ZV93YWtldXAoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKTsKQEAgLTExOSw3ICsxMjAsOCBAQAogc3RhdGljIHZvaWQgYWxpX2lyY2Nfc2lyX2NoYW5nZV9zcGVlZChzdHJ1Y3QgYWxpX2lyY2NfY2IgKnByaXYsIF9fdTMyIHNwZWVkKTsKIAogLyogRklSIGZ1bmN0aW9uICovCi1zdGF0aWMgaW50ICBhbGlfaXJjY19maXJfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICBhbGlfaXJjY19maXJfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhbGlfaXJjY19maXJfY2hhbmdlX3NwZWVkKHN0cnVjdCBhbGlfaXJjY19jYiAqcHJpdiwgX191MzIgc3BlZWQpOwogc3RhdGljIGlycXJldHVybl90IGFsaV9pcmNjX2Zpcl9pbnRlcnJ1cHQoc3RydWN0IGFsaV9pcmNjX2NiICpzZWxmKTsKIHN0YXRpYyBpbnQgIGFsaV9pcmNjX2RtYV9yZWNlaXZlKHN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZik7IApAQCAtMTQzNSw3ICsxNDM3LDggQEAKICAqICAgIFRyYW5zbWl0IHRoZSBmcmFtZQogICoKICAqLwotc3RhdGljIGludCBhbGlfaXJjY19maXJfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYWxpX2lyY2NfZmlyX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWxpX2lyY2NfY2IgKnNlbGY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NjYsNyArMTQ2OSw3IEBACiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlCiAJCQlzZWxmLT5uZXdfc3BlZWQgPSBzcGVlZDsKIAl9CkBAIC0xNTc3LDcgKzE1ODAsNyBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCUlSREFfREVCVUcoMSwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0tIEVuZCAtLS0tLS0tLS0tLS0tLS0tLS1cbiIsIF9fZnVuY19fICk7Ci0JcmV0dXJuIDA7CQorCXJldHVybiBORVRERVZfVFhfT0s7CQogfQogCiAKQEAgLTE5NTcsNyArMTk2MCw4IEBACiAgKiAgICBUcmFuc21pdCB0aGUgZnJhbWUhCiAgKgogICovCi1zdGF0aWMgaW50IGFsaV9pcmNjX3Npcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhbGlfaXJjY19zaXJfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhbGlfaXJjY19jYiAqc2VsZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTk2NiwxMCArMTk3MCwxMCBAQAogCQogCUlSREFfREVCVUcoMiwgIiVzKCksIC0tLS0tLS0tLS0tLS0tLS0gU3RhcnQgLS0tLS0tLS0tLS0tLS0tLVxuIiwgX19mdW5jX18gKTsKIAkKLQlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIDA7KTsKKwlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCQogCXNlbGYgPSBuZXRkZXZfcHJpdihkZXYpOwotCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIDA7KTsKKwlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiBORVRERVZfVFhfT0s7KTsKIAogCWlvYmFzZSA9IHNlbGYtPmlvLnNpcl9iYXNlOwogCkBAIC0xOTkxLDcgKzE5OTUsNyBAQAogCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0gZWxzZQogCQkJc2VsZi0+bmV3X3NwZWVkID0gc3BlZWQ7CiAJfQpAQCAtMjAxNSw3ICsyMDE5LDcgQEAKIAkKIAlJUkRBX0RFQlVHKDIsICIlcygpLCAtLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX2Z1bmNfXyApOwogCQotCXJldHVybiAwOwkKKwlyZXR1cm4gTkVUREVWX1RYX09LOwkKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2F1MWtfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCmluZGV4IGVlMWNmZjUuLmViNDI0NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAkJCWF1cC0+bmV3c3BlZWQgPSAwOwogCQl9CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJcHR4ZCA9IGF1cC0+dHhfcmluZ1thdXAtPnR4X2hlYWRdOwpAQCAtNTUxLDcgKzU1MSw3IEBACiAJZGV2X2tmcmVlX3NrYihza2IpOwogCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2hlYWQgKyAxKSAmIChOVU1fSVJfREVTQyAtIDEpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IDlhMDM0NmUuLjJkN2I1YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTk3MCw3ICs5NzAsNyBAQAogLyogTmV0ZGV2IHN0eWxlIGNvZGUgKi8KIAogLyogVHJhbnNtaXQgc29tZXRoaW5nICovCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHRvc2hvYm9lX2hhcmRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgc3RydWN0IHRvc2hvYm9lX2NiICpzZWxmOwpAQCAtOTgxLDcgKzk4MSw3IEBACiAKICAgc2VsZiA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgSVJEQV9BU1NFUlQgKHNlbGYgIT0gTlVMTCwgcmV0dXJuIDA7ICk7CisgIElSREFfQVNTRVJUIChzZWxmICE9IE5VTEwsIHJldHVybiBORVRERVZfVFhfT0s7ICk7CiAKICAgSVJEQV9ERUJVRyAoMSwgIiVzLnR4OiV4KCV4KSV4XG4iLCBfX2Z1bmNfXwogICAgICAgLHNrYi0+bGVuLHNlbGYtPnR4cGVuZGluZyxJTkIgKE9CT0VfRU5BQkxFSCkpOwpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKICAgICAgICAgICAgIHsKIAkgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiIChza2IpOwotICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAvKiBUcnVlIHBhY2tldCwgZ28gb24sIGJ1dCAqLwogICAgICAgICAgIC8qIGRvIG5vdCBhY2NlcHQgYW55dGhpbmcgYmVmb3JlIGNoYW5nZSBzcGVlZCBleGVjdXRpb24gKi8KQEAgLTEwMzYsNyArMTAzNiw3IEBACiAgICAgICAgICAgdG9zaG9ib2Vfc2V0YmF1ZCAoc2VsZik7CiAJICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5zcGlubG9jaywgZmxhZ3MpOwogICAgICAgICAgIGRldl9rZnJlZV9za2IgKHNrYik7Ci0gICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKICAgICAgICAgfQogCiAgICAgfQpAQCAtMTE0Myw3ICsxMTQzLDcgQEAKICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+c3BpbmxvY2ssIGZsYWdzKTsKICAgZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAotICByZXR1cm4gMDsKKyAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyppbnRlcnJ1cHQgaGFuZGxlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IDBjMDgzMWMuLjIxNWFkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTExMSw3ICsxMTEsOCBAQAogc3RhdGljIHN0cnVjdCBpcmRhX2NsYXNzX2Rlc2MgKmlyZGFfdXNiX2ZpbmRfY2xhc3NfZGVzYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBzdGF0aWMgdm9pZCBpcmRhX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0YXRpYyB2b2lkIGlyZGFfdXNiX2NoYW5nZV9zcGVlZF94Ym9mcyhzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYpOwotc3RhdGljIGludCBpcmRhX3VzYl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaXJkYV91c2JfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaXJkYV91c2Jfb3BlbihzdHJ1Y3QgaXJkYV91c2JfY2IgKnNlbGYpOwogc3RhdGljIHZvaWQgaXJkYV91c2JfY2xvc2Uoc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmKTsKIHN0YXRpYyB2b2lkIHNwZWVkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKQEAgLTM4MSw3ICszODIsOCBAQAogLyoKICAqIFNlbmQgYW4gSXJEQSBmcmFtZSB0byB0aGUgVVNCIGRvbmdsZSAoZm9yIHRyYW5zbWlzc2lvbikKICAqLwotc3RhdGljIGludCBpcmRhX3VzYl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcmRhX3VzYl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGlyZGFfdXNiX2NiICpzZWxmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBzZWxmLT50eF91cmI7CkBAIC01MzQsNyArNTM2LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOwogCQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRyb3A6CiAJLyogRHJvcCBzaWxlbnRseSB0aGUgc2tiIGFuZCBleGl0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKaW5kZXggYzNlNGUyYy4uMmZjMzBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtMTUwLDcgKzE1MCw4IEBACiAvKgogICogQ2FsbGVkIGZyb20gbmV0L2NvcmUgd2hlbiBuZXcgZnJhbWUgaXMgYXZhaWxhYmxlLgogICovCi1zdGF0aWMgaW50IGtpbmdzdW5faGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qga2luZ3N1bl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qga2luZ3N1bl9jYiAqa2luZ3N1bjsKIAlpbnQgd3JhcGxlbjsKQEAgLTQxNiw3ICs0MTcsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtpbmdzdW5fb3BzID0gewotCS5uZG9fc3RhcnRfeG1pdCA9IGtpbmdzdW5faGFyZF94bWl0LAorCS5uZG9fc3RhcnRfeG1pdAkgICAgID0ga2luZ3N1bl9oYXJkX3htaXQsCiAJLm5kb19vcGVuICAgICAgICAgICAgPSBraW5nc3VuX25ldF9vcGVuLAogCS5uZG9fc3RvcCAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfY2xvc2UsCiAJLm5kb19kb19pb2N0bCAgICAgICAgPSBraW5nc3VuX25ldF9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCmluZGV4IGQ3M2I4YjYuLmY0ZDEzZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwpAQCAtMzg1LDcgKzM4NSw4IEBACiAvKgogICogQ2FsbGVkIGZyb20gbmV0L2NvcmUgd2hlbiBuZXcgZnJhbWUgaXMgYXZhaWxhYmxlLgogICovCi1zdGF0aWMgaW50IGtzOTU5X2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGtzOTU5X2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3Qga3M5NTlfY2IgKmtpbmdzdW47CiAJdW5zaWduZWQgaW50IHdyYXBsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwppbmRleCAxZWY0NWVjLi41ZjlkNzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKQEAgLTI5OCw3ICsyOTgsOCBAQAogLyoKICAqIENhbGxlZCBmcm9tIG5ldC9jb3JlIHdoZW4gbmV3IGZyYW1lIGlzIGF2YWlsYWJsZS4KICAqLwotc3RhdGljIGludCBrc2RhenpsZV9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBrc2RhenpsZV9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGtzZGF6emxlX2NiICpraW5nc3VuOwogCXVuc2lnbmVkIGludCB3cmFwbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwppbmRleCBmNGRmMTAwLi5iM2QzMGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwpAQCAtODE3LDcgKzgxNyw4IEBACiB9CiAKIC8qIFRyYW5zbWl0IGNhbGxiYWNrIGZ1bnRpb24uICAqLwotc3RhdGljIGludCBtY3NfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQorc3RhdGljIG5ldGRldl90eF90IG1jc19oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbWNzX2NiICptY3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuaCBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5oCmluZGV4IDZiZGM2MjEuLmIxMDY4OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5oCkBAIC0xNTYsNyArMTU2LDggQEAKIAogc3RhdGljIHZvaWQgbWNzX3JlY2VpdmVfaXJxKHN0cnVjdCB1cmIgKnVyYik7CiBzdGF0aWMgdm9pZCBtY3Nfc2VuZF9pcnEoc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyBpbnQgbWNzX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBtY3NfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogCiBzdGF0aWMgaW50IG1jc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCmluZGV4IDQ1ZmQ5YzEuLjI0MTMyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKQEAgLTE3Myw4ICsxNzMsMTAgQEAKIHN0YXRpYyB2b2lkIG5zY19pcmNjX3Bpb19yZWNlaXZlKHN0cnVjdCBuc2NfaXJjY19jYiAqc2VsZik7CiBzdGF0aWMgaW50ICBuc2NfaXJjY19kbWFfcmVjZWl2ZShzdHJ1Y3QgbnNjX2lyY2NfY2IgKnNlbGYpOyAKIHN0YXRpYyBpbnQgIG5zY19pcmNjX2RtYV9yZWNlaXZlX2NvbXBsZXRlKHN0cnVjdCBuc2NfaXJjY19jYiAqc2VsZiwgaW50IGlvYmFzZSk7Ci1zdGF0aWMgaW50ICBuc2NfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgbnNjX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCAgbnNjX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICBuc2NfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50ICBuc2NfaXJjY19waW9fd3JpdGUoaW50IGlvYmFzZSwgX191OCAqYnVmLCBpbnQgbGVuLCBpbnQgZmlmb19zaXplKTsKIHN0YXRpYyB2b2lkIG5zY19pcmNjX2RtYV94bWl0KHN0cnVjdCBuc2NfaXJjY19jYiAqc2VsZiwgaW50IGlvYmFzZSk7CiBzdGF0aWMgX191OCBuc2NfaXJjY19jaGFuZ2Vfc3BlZWQoc3RydWN0IG5zY19pcmNjX2NiICpzZWxmLCBfX3UzMiBiYXVkKTsKQEAgLTEzNTUsNyArMTM1Nyw4IEBACiAgKiAgICBUcmFuc21pdCB0aGUgZnJhbWUhCiAgKgogICovCi1zdGF0aWMgaW50IG5zY19pcmNjX2hhcmRfeG1pdF9zaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBuc2NfaXJjY19oYXJkX3htaXRfc2lyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuc2NfaXJjY19jYiAqc2VsZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTM2NSw3ICsxMzY4LDcgQEAKIAkKIAlzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIDA7KTsKKwlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiBORVRERVZfVFhfT0s7KTsKIAogCWlvYmFzZSA9IHNlbGYtPmlvLmZpcl9iYXNlOwogCkBAIC0xMzk3LDcgKzE0MDAsNyBAQAogCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0gZWxzZQogCQkJc2VsZi0+bmV3X3NwZWVkID0gc3BlZWQ7CiAJfQpAQCAtMTQyNCwxMCArMTQyNywxMSBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIGludCBuc2NfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbnNjX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbnNjX2lyY2NfY2IgKnNlbGY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NjcsNyArMTQ3MSw3IEBACiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlIHsKIAkJCS8qIENoYW5nZSBzcGVlZCBhZnRlciBjdXJyZW50IGZyYW1lICovCiAJCQlzZWxmLT5uZXdfc3BlZWQgPSBzcGVlZDsKQEAgLTE1NTQsNyArMTU1OCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCmluZGV4IDc3ZDEwZWQuLjE0NDVlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCkBAIC01MDQsNyArNTA0LDcgQEAKIAkJCXB4YV9pcmRhX3NldF9zcGVlZChzaSwgc3BlZWQpOwogCQl9CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtNTM5LDcgKzUzOSw3IEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBweGFfaXJkYV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcmVxLCBpbnQgY21kKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKaW5kZXggYjAzOWNiMC4uMzhiZjdjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCkBAIC02NjYsNyArNjY2LDcgQEAKIAkJCXNhMTEwMF9pcmRhX3NldF9zcGVlZChzaSwgc3BlZWQpOwogCQl9CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKCFJU19GSVIoc2kpKSB7CkBAIC03MTQsNyArNzE0LDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaXJfZGV2LmMgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwppbmRleCBmZDA3OTZjLi40YjJhMWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYwpAQCAtNTgyLDcgKzU4Miw4IEBACiAKIC8qIGNhbGxiYWNrcyBmcm9tIG5ldHdvcmsgbGF5ZXIgKi8KIAotc3RhdGljIGludCBzaXJkZXZfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNpcmRldl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3Qgc2lyX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTU5MCw3ICs1OTEsNyBAQAogCWludCBlcnI7CiAJczMyIHNwZWVkOwogCi0JSVJEQV9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiAwOyk7CisJSVJEQV9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiBORVRERVZfVFhfT0s7KTsKIAogCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAKQEAgLTYyMSw3ICs2MjIsNyBAQAogCQkJICovCiAKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0gZWxzZQogCQkJZGV2LT5uZXdfc3BlZWQgPSBzcGVlZDsKIAl9CkBAIC02NjgsNyArNjY5LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT50eF9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBjYWxsZWQgZnJvbSBuZXR3b3JrIGxheWVyIHdpdGggcnRubCBob2xkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IGQwNzk3YWQuLjFlOGRkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC0xOTQsOCArMTk0LDEwIEBACiBzdGF0aWMgaW50ICBzbXNjX2lyY2NfZG1hX3JlY2VpdmUoc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZik7CiBzdGF0aWMgdm9pZCBzbXNjX2lyY2NfZG1hX3JlY2VpdmVfY29tcGxldGUoc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZik7CiBzdGF0aWMgdm9pZCBzbXNjX2lyY2Nfc2lyX3JlY2VpdmUoc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZik7Ci1zdGF0aWMgaW50ICBzbXNjX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIHNtc2NfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICBzbXNjX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCAgc21zY19pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzbXNjX2lyY2NfZG1hX3htaXQoc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiwgaW50IGJvZnMpOwogc3RhdGljIHZvaWQgc21zY19pcmNjX2RtYV94bWl0X2NvbXBsZXRlKHN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIHZvaWQgc21zY19pcmNjX2NoYW5nZV9zcGVlZChzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmLCB1MzIgc3BlZWQpOwpAQCAtNDg2LDcgKzQ4OCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzbXNjX2lyY2NfbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzbXNjX2lyY2NfbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTg3OCw3ICs4ODEsOCBAQAogICogICAgd2FpdHMgdW50aWwgdGhlIG5leHQgdHJhbnNtaXQgaW50ZXJydXB0LCBhbmQgY29udGludWVzIHVudGlsIHRoZQogICogICAgZnJhbWUgaXMgdHJhbnNtaXR0ZWQuCiAgKi8KLXN0YXRpYyBpbnQgc21zY19pcmNjX2hhcmRfeG1pdF9zaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzbXNjX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODg2LDEwICs4OTAsMTAgQEAKIAogCUlSREFfREVCVUcoMSwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIDA7KTsKKwlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCiAJc2VsZiA9IG5ldGRldl9wcml2KGRldik7Ci0JSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gMDspOworCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC05MTQsNyArOTE4LDcgQEAKIAkJCXNtc2NfaXJjY19jaGFuZ2Vfc3BlZWQoc2VsZiwgc3BlZWQpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJCXNlbGYtPm5ld19zcGVlZCA9IHNwZWVkOwogCX0KQEAgLTkzNSw3ICs5MzksNyBAQAogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTExODMsMTYgKzExODcsMTcgQEAKICAqICAgIFRyYW5zbWl0IHRoZSBmcmFtZSEKICAqCiAgKi8KLXN0YXRpYyBpbnQgc21zY19pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzbXNjX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXMzMiBzcGVlZDsKIAlpbnQgbXR0OwogCi0JSVJEQV9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiAwOyk7CisJSVJEQV9BU1NFUlQoZGV2ICE9IE5VTEwsIHJldHVybiBORVRERVZfVFhfT0s7KTsKIAlzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAwOyk7CisJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gTkVUREVWX1RYX09LOyk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKQEAgLTEyMTAsNyArMTIxNSw3IEBACiAJCQlzbXNjX2lyY2NfY2hhbmdlX3NwZWVkKHNlbGYsIHNwZWVkKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlbGYtPmxvY2ssIGZsYWdzKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCiAJCXNlbGYtPm5ld19zcGVlZCA9IHNwZWVkOwpAQCAtMTI0Miw3ICsxMjQ3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwppbmRleCA4ZTVlNDVjLi41Mjg3NjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCkBAIC01NjAsNyArNTYwLDggQEAKIC8qCiAgKiBDYWxsZWQgZnJvbSBuZXQvY29yZSB3aGVuIG5ldyBmcmFtZSBpcyBhdmFpbGFibGUuCiAgKi8KLXN0YXRpYyBpbnQgc3Rpcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGlyX2hhcmRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBzdGlyX2NiICpzdGlyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIApAQCAtNTc4LDcgKzU3OSw3IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCmluZGV4IDg2NDc5ODUuLmE1Y2E3MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKQEAgLTg3LDEwICs4NywxMCBAQAogc3RhdGljIGludCB2aWFfaXJjY19kbWFfcmVjZWl2ZShzdHJ1Y3QgdmlhX2lyY2NfY2IgKnNlbGYpOwogc3RhdGljIGludCB2aWFfaXJjY19kbWFfcmVjZWl2ZV9jb21wbGV0ZShzdHJ1Y3QgdmlhX2lyY2NfY2IgKnNlbGYsCiAJCQkJCSBpbnQgaW9iYXNlKTsKLXN0YXRpYyBpbnQgdmlhX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHZpYV9pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHZpYV9pcmNjX2hhcmRfeG1pdF9maXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgdmlhX2h3X2luaXQoc3RydWN0IHZpYV9pcmNjX2NiICpzZWxmKTsKIHN0YXRpYyB2b2lkIHZpYV9pcmNjX2NoYW5nZV9zcGVlZChzdHJ1Y3QgdmlhX2lyY2NfY2IgKnNlbGYsIF9fdTMyIGJhdWQpOwogc3RhdGljIGlycXJldHVybl90IHZpYV9pcmNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtODIzLDggKzgyMyw4IEBACiAgKiAgICBUcmFuc21pdCB0aGUgZnJhbWUhCiAgKgogICovCi1zdGF0aWMgaW50IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdmlhX2lyY2NfaGFyZF94bWl0X3NpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmlhX2lyY2NfY2IgKnNlbGY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTgzMiw3ICs4MzIsNyBAQAogCV9fdTMyIHNwZWVkOwogCiAJc2VsZiA9IG5ldGRldl9wcml2KGRldik7Ci0JSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gMDspOworCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuIE5FVERFVl9UWF9PSzspOwogCWlvYmFzZSA9IHNlbGYtPmlvLmZpcl9iYXNlOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwpAQCAtODQ0LDcgKzg0NCw3IEBACiAJCQl2aWFfaXJjY19jaGFuZ2Vfc3BlZWQoc2VsZiwgc3BlZWQpOwogCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0gZWxzZQogCQkJc2VsZi0+bmV3X3NwZWVkID0gc3BlZWQ7CiAJfQpAQCAtODkyLDExICs4OTIsMTEgQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZWxmLT5sb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLXN0YXRpYyBpbnQgdmlhX2lyY2NfaGFyZF94bWl0X2ZpcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB2aWFfaXJjY19oYXJkX3htaXRfZmlyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aWFfaXJjY19jYiAqc2VsZjsKIAl1MTYgaW9iYXNlOwpAQCAtOTA3LDcgKzkwNyw3IEBACiAJaW9iYXNlID0gc2VsZi0+aW8uZmlyX2Jhc2U7CiAKIAlpZiAoc2VsZi0+c3RfZmlmby5sZW4pCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCWlmIChzZWxmLT5jaGlwX2lkID09IDB4MzA3NikKIAkJaW9kZWxheSgxNTAwKTsKIAllbHNlCkBAIC05MTksNyArOTE5LDcgQEAKIAkJCXZpYV9pcmNjX2NoYW5nZV9zcGVlZChzZWxmLCBzcGVlZCk7CiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlCiAJCQlzZWxmLT5uZXdfc3BlZWQgPSBzcGVlZDsKIAl9CkBAIC05NDAsNyArOTQwLDcgQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VsZi0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwppbmRleCBhYzBlNGI2Li43Y2ZiOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYwpAQCAtODU0LDcgKzg1NCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2bHNpX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB2bHNpX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAl2bHNpX2lyZGFfZGV2X3QgKmlkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3QgdmxzaV9yaW5nCSpyID0gaWRldi0+dHhfcmluZzsKQEAgLTkxNSw3ICs5MTYsNyBAQAogCQkJICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZXYtPmxvY2ssIGZsYWdzKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyogc2FuaXR5IGNoZWNrcyAtIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQgKi8KQEAgLTEwNDQsNyArMTA0NSw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZXYtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRyb3BfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZXYtPmxvY2ssIGZsYWdzKTsKQEAgLTEwNTgsNyArMTA1OSw3IEBACiAJICogcGFja2V0IGZvciBsYXRlciByZXRyeSBvZiB0cmFuc21pc3Npb24gLSB3aGljaCBpc24ndCBleGFjdGx5CiAJICogd2hhdCB3ZSB3YW50IGFmdGVyIHdlJ3ZlIGp1c3QgY2FsbGVkIGRldl9rZnJlZV9za2JfYW55IDstKQogCSAqLwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHZsc2lfdHhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCmluZGV4IGZlNGYyYjIuLjU1MTgxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKQEAgLTkzLDcgKzkzLDggQEAKIHN0YXRpYyBpbnQgIHc4Mzk3N2FmX3Byb2JlKGludCBpb2Jhc2UsIGludCBpcnEsIGludCBkbWEpOwogc3RhdGljIGludCAgdzgzOTc3YWZfZG1hX3JlY2VpdmUoc3RydWN0IHc4Mzk3N2FmX2lyICpzZWxmKTsgCiBzdGF0aWMgaW50ICB3ODM5NzdhZl9kbWFfcmVjZWl2ZV9jb21wbGV0ZShzdHJ1Y3QgdzgzOTc3YWZfaXIgKnNlbGYpOwotc3RhdGljIGludCAgdzgzOTc3YWZfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90ICB3ODM5NzdhZl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIHc4Mzk3N2FmX3Bpb193cml0ZShpbnQgaW9iYXNlLCBfX3U4ICpidWYsIGludCBsZW4sIGludCBmaWZvX3NpemUpOwogc3RhdGljIHZvaWQgdzgzOTc3YWZfZG1hX3dyaXRlKHN0cnVjdCB3ODM5NzdhZl9pciAqc2VsZiwgaW50IGlvYmFzZSk7CiBzdGF0aWMgdm9pZCB3ODM5NzdhZl9jaGFuZ2Vfc3BlZWQoc3RydWN0IHc4Mzk3N2FmX2lyICpzZWxmLCBfX3UzMiBzcGVlZCk7CkBAIC00OTAsNyArNDkxLDggQEAKICAqICAgIFNldHMgdXAgYSBETUEgdHJhbnNmZXIgdG8gc2VuZCB0aGUgY3VycmVudCBmcmFtZS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgdzgzOTc3YWZfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdzgzOTc3YWZfaGFyZF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB3ODM5NzdhZl9pciAqc2VsZjsKIAlfX3MzMiBzcGVlZDsKQEAgLTUxNiw3ICs1MTgsNyBAQAogCQkJdzgzOTc3YWZfY2hhbmdlX3NwZWVkKHNlbGYsIHNwZWVkKTsgCiAJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlCiAJCQlzZWxmLT5uZXdfc3BlZWQgPSBzcGVlZDsKIAl9CkBAIC01NzYsNyArNTc4LDcgQEAKIAkvKiBSZXN0b3JlIHNldCByZWdpc3RlciAqLwogCW91dGIoc2V0LCBpb2Jhc2UrU1NSKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pc2Etc2tlbGV0b24uYyBiL2RyaXZlcnMvbmV0L2lzYS1za2VsZXRvbi5jCmluZGV4IGQxMjM3N2IuLjk3MDZlNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lzYS1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lzYS1za2VsZXRvbi5jCkBAIC00NjgsNyArNDY4LDcgQEAKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogI2VuZGlmCiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAjaWYgVFhfUklORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXNlcmllc192ZXRoLmMgYi9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYwppbmRleCBlNDQyMTVjLi5lMzZlOTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYworKysgYi9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYwpAQCAtMTIwNSw3ICsxMjA1LDcgQEAKIAogCQlpZiAoICEgKCgxIDw8IHJscCkgJiBwb3J0LT5scGFyX21hcCkgKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAogCQlscG1hc2sgPSAxIDw8IHJscDsKQEAgLTEyMTcsNyArMTIxNyw3IEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBZb3UgbXVzdCBob2xkIHRoZSBjb25uZWN0aW9uJ3MgbG9jayB3aGVuIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCA5Yzg5N2NmLi44YWE0NGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTgxLDcgKzgxLDggQEAKIHN0YXRpYyB2b2lkIGl4Z2JfY2xlYW5fcnhfcmluZyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyB2b2lkIGl4Z2Jfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIHZvaWQgaXhnYl93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpOwotc3RhdGljIGludCBpeGdiX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaXhnYl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKml4Z2JfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIGludCBpeGdiX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIGludCBpeGdiX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCk7CkBAIC0xNDQyLDcgKzE0NDMsNyBAQAogCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxIC8qIGZvciBjb250ZXh0ICovIFwKIAkrIDEgLyogb25lIG1vcmUgbmVlZGVkIGZvciBzZW50aW5lbCBUU08gd29ya2Fyb3VuZCAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGl4Z2JfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtMTQ1OSw3ICsxNDYwLDcgQEAKIAogCWlmIChza2ItPmxlbiA8PSAwKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKHVubGlrZWx5KGl4Z2JfbWF5YmVfc3RvcF90eChuZXRkZXYsICZhZGFwdGVyLT50eF9yaW5nLApAQCAtMjIyNyw2ICsyMjI4LDExIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAorCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJaXhnYl9kb3duKGFkYXB0ZXIsIHRydWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaAppbmRleCAyYzRkYzgyLi5kZDY4OGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKQEAgLTIzMywxMCArMjMzLDYgQEAKICNkZWZpbmUgSVhHQkVfVFhfQ1RYVERFU0NfQURWKFIsIGkpCSAgICBcCiAJKCYoKChzdHJ1Y3QgaXhnYmVfYWR2X3R4X2NvbnRleHRfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKIAotI2RlZmluZSBJWEdCRV9HRVRfREVTQyhSLCBpLCB0eXBlKQkoJigoKHN0cnVjdCB0eXBlICopKChSKS5kZXNjKSlbaV0pKQotI2RlZmluZSBJWEdCRV9UWF9ERVNDKFIsIGkpCUlYR0JFX0dFVF9ERVNDKFIsIGksIGl4Z2JlX2xlZ2FjeV90eF9kZXNjKQotI2RlZmluZSBJWEdCRV9SWF9ERVNDKFIsIGkpCUlYR0JFX0dFVF9ERVNDKFIsIGksIGl4Z2JlX2xlZ2FjeV9yeF9kZXNjKQotCiAjZGVmaW5lIElYR0JFX01BWF9KVU1CT19GUkFNRV9TSVpFICAgICAgICAxNjEyOAogI2lmZGVmIElYR0JFX0ZDT0UKIC8qIFVzZSAzSyBhcyB0aGUgYmFieSBqdW1ibyBmcmFtZSBzaXplIGZvciBGQ29FICovCkBAIC00MjgsNTUgKzQyNCwyMCBAQAogZXh0ZXJuIHMzMiBpeGdiZV9mZGlyX2FkZF9zaWduYXR1cmVfZmlsdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggcXVldWUpOwotZXh0ZXJuIHMzMiBpeGdiZV9mZGlyX2FkZF9wZXJmZWN0X2ZpbHRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNvZnRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlKTsKLWV4dGVybiB1MTYgaXhnYmVfYXRyX2NvbXB1dGVfaGFzaF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwgdTMyIGtleSk7CiBleHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfdmxhbl9pZF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2bGFuX2lkKTsKIGV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF9zcmNfaXB2NF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHIpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X2RzdF9pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcik7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfc3JjX2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNyY19hZGRyXzEsIHUzMiBzcmNfYWRkcl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfYWRkcl8zLCB1MzIgc3JjX2FkZHJfNCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfZHN0X2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRzdF9hZGRyXzEsIHUzMiBkc3RfYWRkcl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8zLCB1MzIgZHN0X2FkZHJfNCk7CiBleHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfc3JjX3BvcnRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNyY19wb3J0KTsKIGV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF9kc3RfcG9ydF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZHN0X3BvcnQpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X2ZsZXhfYnl0ZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGZsZXhfYnl0ZSk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9zZXRfdm1fcG9vbF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHZtX3Bvb2wpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbDR0eXBlKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX2dldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICp2bGFuX2lkKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX2dldF9zcmNfaXB2NF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX2dldF9kc3RfaXB2NF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmRzdF9hZGRyKTsKLWV4dGVybiBzMzIgaXhnYmVfYXRyX2dldF9zcmNfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzEsIHUzMiAqc3JjX2FkZHJfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzMsIHUzMiAqc3JjX2FkZHJfNCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9nZXRfZHN0X2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcl8xLCB1MzIgKmRzdF9hZGRyXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcl8zLCB1MzIgKmRzdF9hZGRyXzQpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X3NyY19wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqc3JjX3BvcnQpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X2RzdF9wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZHN0X3BvcnQpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X2ZsZXhfYnl0ZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICpmbGV4X2J5dGUpOwotZXh0ZXJuIHMzMiBpeGdiZV9hdHJfZ2V0X3ZtX3Bvb2xfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqdm1fcG9vbCk7Ci1leHRlcm4gczMyIGl4Z2JlX2F0cl9nZXRfbDR0eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqbDR0eXBlKTsKICNpZmRlZiBJWEdCRV9GQ09FCiBleHRlcm4gdm9pZCBpeGdiZV9jb25maWd1cmVfZmNvZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGl4Z2JlX2ZzbyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTQ4OSw2ICs0NTAsMTIgQEAKIGV4dGVybiBpbnQgaXhnYmVfZmNvZV9kZHBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB4aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnYyk7CiBleHRlcm4gaW50IGl4Z2JlX2Zjb2VfZGRwX3B1dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgeGlkKTsKK2V4dGVybiBpbnQgaXhnYmVfZmNvZV9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitleHRlcm4gaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCitleHRlcm4gdTggaXhnYmVfZmNvZV9nZXRhcHAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIHU4IGl4Z2JlX2Zjb2Vfc2V0YXBwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1OCB1cCk7CisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQiAqLwogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIAogI2VuZGlmIC8qIF9JWEdCRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKaW5kZXggNTIyYzAzYi4uY2I3ZjBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCkBAIC00MSw4ICs0MSw3IEBACiBzdGF0aWMgczMyIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZyk7Ci1zdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpOwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKQEAgLTU5LDcgKzU4LDcgQEAKICAqICBpbmNyZWFzZSB0aGUgdmFsdWUgdG8gZWl0aGVyIDEwbXMgdG8gMjUwbXMgZm9yIGNhcGFiaWxpdHkgdmVyc2lvbiAxIGNvbmZpZywKICAqICBvciAxNm1zIHRvIDU1bXMgZm9yIHZlcnNpb24gMi4KICAqKi8KLXZvaWQgaXhnYmVfc2V0X3BjaWVfY29tcGxldGlvbl90aW1lb3V0KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgdm9pZCBpeGdiZV9zZXRfcGNpZV9jb21wbGV0aW9uX3RpbWVvdXQoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwogCXUzMiBnY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR0NSKTsKQEAgLTE0Myw3ICsxNDIsNyBAQAogICogIG5vdCBrbm93bi4gIFBlcmZvcm0gdGhlIFNGUCBpbml0IGlmIG5lY2Vzc2FyeS4KICAqCiAgKiovCi1zMzIgaXhnYmVfaW5pdF9waHlfb3BzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX2luaXRfcGh5X29wc184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAJc3RydWN0IGl4Z2JlX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKQEAgLTE1Niw4ICsxNTUsNiBAQAogCS8qIE92ZXJ3cml0ZSB0aGUgbGluayBmdW5jdGlvbiBwb2ludGVycyBpZiBjb3BwZXIgUEhZICovCiAJaWYgKG1hYy0+b3BzLmdldF9tZWRpYV90eXBlKGh3KSA9PSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcikgewogCQltYWMtPm9wcy5zZXR1cF9saW5rID0gJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk4OwotCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KLQkJICAgICAgICAgICAgICAgICAgICAgJml4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk4OwogCQltYWMtPm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMgPQogCQkgICAgICAgICAgICAgICAgICAmaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5ODsKIAl9CkBAIC0yMDQsNyArMjAxLDcgQEAKICAqICBTdGFydHMgdGhlIGhhcmR3YXJlIHVzaW5nIHRoZSBnZW5lcmljIHN0YXJ0X2h3IGZ1bmN0aW9uLgogICogIFRoZW4gc2V0IHBjaWUgY29tcGxldGlvbiB0aW1lb3V0CiAgKiovCi1zMzIgaXhnYmVfc3RhcnRfaHdfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfc3RhcnRfaHdfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgcmV0X3ZhbCA9IDA7CiAKQEAgLTMzNCw2ICszMzEsNyBAQAogCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9maWJlcjsKIAkJYnJlYWs7CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OThBVDoKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OEFUMjoKIAkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNDY0LDEzICs0NjIsMTQgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTggLSBDb25maWd1cmVzIE1BQyBsaW5rIHNldHRpbmdzCisgKiAgaXhnYmVfc3RhcnRfbWFjX2xpbmtfODI1OTggLSBDb25maWd1cmVzIE1BQyBsaW5rIHNldHRpbmdzCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICoKICAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCiAgKiAgUmVzdGFydHMgdGhlIGxpbmsuICBQZXJmb3JtcyBhdXRvbmVnb3RpYXRpb24gaWYgbmVlZGVkLgogICoqLwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9zdGFydF9tYWNfbGlua184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKIHsKIAl1MzIgYXV0b2NfcmVnOwogCXUzMiBsaW5rc19yZWc7CkBAIC00ODMsNyArNDgyLDcgQEAKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOwogCiAJLyogT25seSBwb2xsIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIGlmIHNwZWNpZmllZCB0byBkbyBzbyAqLwotCWlmIChody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgeworCWlmIChhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKIAkJaWYgKChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KIAkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOIHx8CiAJCSAgICAoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CkBAIC01OTksNyArNTk4LDcgQEAKIAogCiAvKioKLSAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OCAtIFNldCBNQUMgbGluayBzcGVlZAorICogIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4IC0gU2V0IE1BQyBsaW5rIHNwZWVkCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKICAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvLW5lZ290aWF0aW9uIGVuYWJsZWQKQEAgLTYwNyw3ICs2MDYsNyBAQAogICoKICAqICBTZXQgdGhlIGxpbmsgc3BlZWQgaW4gdGhlIEFVVE9DIHJlZ2lzdGVyIGFuZCByZXN0YXJ0cyBsaW5rLgogICoqLwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKIHsKQEAgLTYzNywxNCArNjM2LDEyIEBACiAJfQogCiAJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCWh3LT5waHkuYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlID0gYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOwotCiAJCS8qCiAJCSAqIFNldHVwIGFuZCByZXN0YXJ0IHRoZSBsaW5rIGJhc2VkIG9uIHRoZSBuZXcgdmFsdWVzIGluCiAJCSAqIGl4Z2JlX2h3IFRoaXMgd2lsbCB3cml0ZSB0aGUgQVVUT0MgcmVnaXN0ZXIgYmFzZWQgb24gdGhlIG5ldwogCQkgKiBzdG9yZWQgdmFsdWVzCiAJCSAqLwotCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OChodyk7CisJCXN0YXR1cyA9IGl4Z2JlX3N0YXJ0X21hY19saW5rXzgyNTk4KGh3LCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC02NTIsMjkgKzY0OSw3IEBACiAKIAogLyoqCi0gKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTggLSBTZXR1cCBjb3BwZXIgbGluayBzZXR0aW5ncwotICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqCi0gKiAgQ29uZmlndXJlcyBsaW5rIHNldHRpbmdzIGJhc2VkIG9uIHZhbHVlcyBpbiB0aGUgaXhnYmVfaHcgc3RydWN0LgotICogIFJlc3RhcnRzIHRoZSBsaW5rLiAgUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4gIFJlc3RhcnQKLSAqICBwaHkgYW5kIHdhaXQgZm9yIGF1dG9uZWdvdGlhdGUgdG8gZmluaXNoLiAgVGhlbiBzeW5jaHJvbml6ZSB0aGUKLSAqICBNQUMgYW5kIFBIWS4KLSAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodykKLXsKLQlzMzIgc3RhdHVzOwotCi0JLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCi0Jc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7Ci0KLQkvKiBTZXQgdXAgTUFDICovCi0JaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoqCi0gKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTggLSBTZXQgdGhlIFBIWSBhdXRvbmVnIGFkdmVydGlzZWQgZmllbGQKKyAqICBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OCAtIFNldCB0aGUgUEhZIGF1dG9uZWcgYWR2ZXJ0aXNlZCBmaWVsZAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCiAgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKQEAgLTY4Miw3ICs2NTcsNyBAQAogICoKICAqICBTZXRzIHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBpbiB0aGUgTUFDIGFuZCByZXN0YXJ0cyBsaW5rLgogICoqLwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQpAQCAtNjk0LDcgKzY2OSw3IEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogCiAJLyogU2V0IHVwIE1BQyAqLwotCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKKwlpeGdiZV9zdGFydF9tYWNfbGlua184MjU5OChodywgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMTYyLDcgKzExMzcsNiBAQAogCS5yZWFkX2FuYWxvZ19yZWc4CT0gJml4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTgsCiAJLndyaXRlX2FuYWxvZ19yZWc4CT0gJml4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk4LAogCS5zZXR1cF9saW5rCQk9ICZpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OCwKLQkuc2V0dXBfbGlua19zcGVlZAk9ICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OCwKIAkuY2hlY2tfbGluawkJPSAmaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTgsCiAJLmdldF9saW5rX2NhcGFiaWxpdGllcwk9ICZpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTgsCiAJLmxlZF9vbgkJCT0gJml4Z2JlX2xlZF9vbl9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKaW5kZXggMTk4NGNhYi4uNjFhZjQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0zOCw2MiArMzgsMzcgQEAKICNkZWZpbmUgSVhHQkVfODI1OTlfTUNfVEJMX1NJWkUgICAxMjgKICNkZWZpbmUgSVhHQkVfODI1OTlfVkZUX1RCTF9TSVpFICAxMjgKIAotczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZyk7Ci1lbnVtIGl4Z2JlX21lZGlhX3R5cGUgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci1zMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKLXMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXMzMiBpeGdiZV9jaGVja19tYWNfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmxpbmtfdXAsIGJvb2wgbGlua191cF93YWl0X3RvX2NvbXBsZXRlKTsKLXMzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3N0YXJ0X21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOwotc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKLXN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7Ci1zMzIgaXhnYmVfcmVzZXRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci1zMzIgaXhnYmVfc2V0X3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOwotczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpOwotczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLAotICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2aW5kLCBib29sIHZsYW5fb24pOwotczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci1zMzIgaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwotczMyIGl4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggKnZhbCk7Ci1zMzIgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggdmFsKTsKLXMzMiBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci1zMzIgaXhnYmVfc3RhcnRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7Ci11MzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiBzdGF0aWMgczMyIGl4Z2JlX3ZlcmlmeV9md192ZXJzaW9uXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwogCi12b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgdm9pZCBpeGdiZV9pbml0X21hY19saW5rX29wc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlcikgewogCQkvKiBTZXQgdXAgZHVhbCBzcGVlZCBTRlArIHN1cHBvcnQgKi8KLQkJbWFjLT5vcHMuc2V0dXBfbGluayA9Ci0JCSAgICAgICAgICAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcjsKLQkJbWFjLT5vcHMuc2V0dXBfbGlua19zcGVlZCA9Ci0JCSAgICAgICAgICAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlcjsKKwkJbWFjLT5vcHMuc2V0dXBfbGluayA9ICZpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyOwogCX0gZWxzZSB7Ci0JCW1hYy0+b3BzLnNldHVwX2xpbmsgPQotCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5OwotCQltYWMtPm9wcy5zZXR1cF9saW5rX3NwZWVkID0KLQkJICAgICAgICAgICZpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OTsKKwkJbWFjLT5vcHMuc2V0dXBfbGluayA9ICZpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OTsKIAl9CiB9CiAKLXMzMiBpeGdiZV9zZXR1cF9zZnBfbW9kdWxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9zZnBfbW9kdWxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiByZXRfdmFsID0gMDsKIAl1MTYgbGlzdF9vZmZzZXQsIGRhdGFfb2Zmc2V0LCBkYXRhX3ZhbHVlOwpAQCAtMTQzLDcgKzExOCw3IEBACiAgKiAgUmVhZCBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBnZXQgdGhlIE1TSS1YIHZlY3RvciBjb3VudCBmcm9tCiAgKiAgdGhlIGNhcGFiaWxpdGllcyB0YWJsZS4KICAqKi8KLXUzMiBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgdTMyIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwogCXUxNiBtc2l4X2NvdW50OwpAQCAtMTgyLDcgKzE1Nyw3IEBACiAgKiAgbm90IGtub3duLiAgUGVyZm9ybSB0aGUgU0ZQIGluaXQgaWYgbmVjZXNzYXJ5LgogICoKICAqKi8KLXMzMiBpeGdiZV9pbml0X3BoeV9vcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfaW5pdF9waHlfb3BzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJc3RydWN0IGl4Z2JlX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIAlzdHJ1Y3QgaXhnYmVfcGh5X2luZm8gKnBoeSA9ICZody0+cGh5OwpAQCAtMTk3LDggKzE3Miw2IEBACiAJLyogSWYgY29wcGVyIG1lZGlhLCBvdmVyd3JpdGUgd2l0aCBjb3BwZXIgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIAlpZiAobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB7CiAJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTk7Ci0JCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQotCQkgICAgICAgICAgICAgICAgICAgICAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTk7CiAJCW1hYy0+b3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyA9CiAJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5OwogCX0KQEAgLTIyNSw5ICsxOTgsOSBAQAogICoKICAqICBEZXRlcm1pbmVzIHRoZSBsaW5rIGNhcGFiaWxpdGllcyBieSByZWFkaW5nIHRoZSBBVVRPQyByZWdpc3Rlci4KICAqKi8KLXMzMiBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKm5lZ290aWF0aW9uKQorc3RhdGljIHMzMiBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbmVnb3RpYXRpb24pCiB7CiAJczMyIHN0YXR1cyA9IDA7CiAJdTMyIGF1dG9jID0gMDsKQEAgLTM0NCw3ICszMTcsNyBAQAogICoKICAqICBSZXR1cm5zIHRoZSBtZWRpYSB0eXBlIChmaWJlciwgY29wcGVyLCBiYWNrcGxhbmUpCiAgKiovCi1lbnVtIGl4Z2JlX21lZGlhX3R5cGUgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBlbnVtIGl4Z2JlX21lZGlhX3R5cGUgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAllbnVtIGl4Z2JlX21lZGlhX3R5cGUgbWVkaWFfdHlwZTsKIApAQCAtMzczLDEzICszNDYsMTUgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkgLSBTZXR1cCBNQUMgbGluayBzZXR0aW5ncworICogIGl4Z2JlX3N0YXJ0X21hY19saW5rXzgyNTk5IC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdHJ1ZSB3aGVuIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24gaXMgbmVlZGVkCiAgKgogICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KICAqICBSZXN0YXJ0cyB0aGUgbGluay4gIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3MzMiBpeGdiZV9zdGFydF9tYWNfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQogewogCXUzMiBhdXRvY19yZWc7CiAJdTMyIGxpbmtzX3JlZzsKQEAgLTM5Miw3ICszNjcsNyBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jX3JlZyk7CiAKIAkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCi0JaWYgKGh3LT5waHkuYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CisJaWYgKGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewogCQlpZiAoKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQogCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1IgfHwKIAkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KQEAgLTQyMCwyNSArMzk1LDcgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlciAtIFNldHVwIE1BQyBsaW5rIHNldHRpbmdzCi0gKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQotICoKLSAqICBDb25maWd1cmVzIGxpbmsgc2V0dGluZ3MgYmFzZWQgb24gdmFsdWVzIGluIHRoZSBpeGdiZV9odyBzdHJ1Y3QuCi0gKiAgUmVzdGFydHMgdGhlIGxpbmsgZm9yIG11bHRpLXNwZWVkIGZpYmVyIGF0IDFHIHNwZWVkLCBpZiBsaW5rCi0gKiAgZmFpbHMgYXQgMTBHLgotICogIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCi0gKiovCi1zMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQotewotCXMzMiBzdGF0dXMgPSAwOwotCWl4Z2JlX2xpbmtfc3BlZWQgbGlua19zcGVlZCA9IElYR0JFX0xJTktfU1BFRURfODI1OTlfQVVUT05FRzsKLQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LCBsaW5rX3NwZWVkLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoqCi0gKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlciAtIFNldCBNQUMgbGluayBzcGVlZAorICogIGl4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXIgLSBTZXQgTUFDIGxpbmsgc3BlZWQKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAogICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCkBAIC00NDYsMTAgKzQwMywxMCBAQAogICoKICAqICBTZXQgdGhlIGxpbmsgc3BlZWQgaW4gdGhlIEFVVE9DIHJlZ2lzdGVyIGFuZCByZXN0YXJ0cyBsaW5rLgogICoqLwotczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCiB7CiAJczMyIHN0YXR1cyA9IDA7CiAJaXhnYmVfbGlua19zcGVlZCBwaHlfbGlua19zcGVlZDsKQEAgLTQ2NCwxNSArNDIxLDYgQEAKIAlody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcsICZwaHlfbGlua19zcGVlZCwgJm5lZ290aWF0aW9uKTsKIAlzcGVlZCAmPSBwaHlfbGlua19zcGVlZDsKIAotCSAvKiBTZXQgYXV0b25lZ19hZHZlcnRpc2VkIHZhbHVlIGJhc2VkIG9uIGlucHV0IGxpbmsgc3BlZWQgKi8KLQlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IDA7Ci0KLQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKLQkJaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0KLQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKQotCQlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOwotCiAJLyoKIAkgKiBXaGVuIHRoZSBkcml2ZXIgY2hhbmdlcyB0aGUgbGluayBzcGVlZHMgdGhhdCBpdCBjYW4gc3VwcG9ydCwKIAkgKiBpdCBzZXRzIGF1dG90cnlfcmVzdGFydCB0byB0cnVlIHRvIGluZGljYXRlIHRoYXQgd2UgbmVlZCB0bwpAQCAtNTA0LDEyICs0NTIsMTIgQEAKIAkJLyogQWxsb3cgbW9kdWxlIHRvIGNoYW5nZSBhbmFsb2cgY2hhcmFjdGVyaXN0aWNzICgxRy0+MTBHKSAqLwogCQltc2xlZXAoNDApOwogCi0JCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKwkJc3RhdHVzID0gaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOwogCQlpZiAoc3RhdHVzICE9IDApCi0JCQlnb3RvIG91dDsKKwkJCXJldHVybiBzdGF0dXM7CiAKIAkJLyogRmxhcCB0aGUgdHggbGFzZXIgaWYgaXQgaGFzIG5vdCBhbHJlYWR5IGJlZW4gZG9uZSAqLwogCQlpZiAoaHctPm1hYy5hdXRvdHJ5X3Jlc3RhcnQpIHsKQEAgLTU1OCwxMiArNTA2LDEyIEBACiAJCS8qIEFsbG93IG1vZHVsZSB0byBjaGFuZ2UgYW5hbG9nIGNoYXJhY3RlcmlzdGljcyAoMTBHLT4xRykgKi8KIAkJbXNsZWVwKDQwKTsKIAotCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OShodywKKwkJc3RhdHVzID0gaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoaHcsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiAJCWlmIChzdGF0dXMgIT0gMCkKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIHN0YXR1czsKIAogCQkvKiBGbGFwIHRoZSB0eCBsYXNlciBpZiBpdCBoYXMgbm90IGFscmVhZHkgYmVlbiBkb25lICovCiAJCWlmIChody0+bWFjLmF1dG90cnlfcmVzdGFydCkgewpAQCAtNTk1LDEyICs1NDMsMjEgQEAKIAkgKiBzaW5nbGUgaGlnaGVzdCBzcGVlZCB0aGF0IHRoZSB1c2VyIHJlcXVlc3RlZC4KIAkgKi8KIAlpZiAoc3BlZWRjbnQgPiAxKQotCQlzdGF0dXMgPSBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdF9saW5rX3NwZWVkLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXIoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdF9saW5rX3NwZWVkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAogb3V0OgorCS8qIFNldCBhdXRvbmVnX2FkdmVydGlzZWQgdmFsdWUgYmFzZWQgb24gaW5wdXQgbGluayBzcGVlZCAqLworCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gMDsKKworCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQorCQlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKworCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpCisJCWh3LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MTMsOCArNTcwLDEwIEBACiAgKgogICogIFJlYWRzIHRoZSBsaW5rcyByZWdpc3RlciB0byBkZXRlcm1pbmUgaWYgbGluayBpcyB1cCBhbmQgdGhlIGN1cnJlbnQgc3BlZWQKICAqKi8KLXMzMiBpeGdiZV9jaGVja19tYWNfbGlua184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpsaW5rX3VwLCBib29sIGxpbmtfdXBfd2FpdF90b19jb21wbGV0ZSkKK3N0YXRpYyBzMzIgaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmxpbmtfdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbGlua191cF93YWl0X3RvX2NvbXBsZXRlKQogewogCXUzMiBsaW5rc19yZWc7CiAJdTMyIGk7CkBAIC02NTcsNyArNjE2LDcgQEAKIH0KIAogLyoqCi0gKiAgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgTUFDIGxpbmsgc3BlZWQKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua184MjU5OSAtIFNldCBNQUMgbGluayBzcGVlZAogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCiAgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKQEAgLTY2NSw5ICs2MjQsOSBAQAogICoKICAqICBTZXQgdGhlIGxpbmsgc3BlZWQgaW4gdGhlIEFVVE9DIHJlZ2lzdGVyIGFuZCByZXN0YXJ0cyBsaW5rLgogICoqLwotczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQorczMyIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKQogewogCXMzMiBzdGF0dXMgPSAwOwogCXUzMiBhdXRvYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7CkBAIC03NjcsMjYgKzcyNiw3IEBACiB9CiAKIC8qKgotICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5IC0gU2V0dXAgY29wcGVyIGxpbmsgc2V0dGluZ3MKLSAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCi0gKgotICogIFJlc3RhcnRzIHRoZSBsaW5rIG9uIFBIWSBhbmQgdGhlbiBNQUMuIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCi0gKiovCi1zdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCi17Ci0JczMyIHN0YXR1czsKLQotCS8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uIG9uIFBIWSAqLwotCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmsoaHcpOwotCi0JLyogU2V0IHVwIE1BQyAqLwotCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qKgotICogIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rX3NwZWVkXzgyNTk5IC0gU2V0IHRoZSBQSFkgYXV0b25lZyBhZHZlcnRpc2VkIGZpZWxkCisgKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkgLSBTZXQgdGhlIFBIWSBhdXRvbmVnIGFkdmVydGlzZWQgZmllbGQKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAogICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCkBAIC03OTQsMTAgKzczNCwxMCBAQAogICoKICAqICBSZXN0YXJ0cyBsaW5rIG9uIFBIWSBhbmQgTUFDIGJhc2VkIG9uIHNldHRpbmdzIHBhc3NlZCBpbi4KICAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKIHsKIAlzMzIgc3RhdHVzOwogCkBAIC04MDUsNyArNzQ1LDcgQEAKIAlzdGF0dXMgPSBody0+cGh5Lm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBzcGVlZCwgYXV0b25lZywKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CiAJLyogU2V0IHVwIE1BQyAqLwotCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKKwlpeGdiZV9zdGFydF9tYWNfbGlua184MjU5OShodywgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC04MTgsNyArNzU4LDcgQEAKICAqICBhbmQgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLCBwZXJmb3JtIGEgUEhZIHJlc2V0LCBhbmQgcGVyZm9ybSBhIGxpbmsgKE1BQykKICAqICByZXNldC4KICAqKi8KLXMzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiBzdGF0dXMgPSAwOwogCXUzMiBjdHJsLCBjdHJsX2V4dDsKQEAgLTk0Myw3ICs4ODMsNyBAQAogICogIEByYXI6IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlciBpbmRleCB0byBkaXNhc3NvY2lhdGUKICAqICBAdm1kcTogVk1EcSBwb29sIGluZGV4IHRvIHJlbW92ZSBmcm9tIHRoZSByYXIKICAqKi8KLXMzMiBpeGdiZV9jbGVhcl92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQorc3RhdGljIHMzMiBpeGdiZV9jbGVhcl92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQogewogCXUzMiBtcHNhcl9sbywgbXBzYXJfaGk7CiAJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CkBAIC05ODksNyArOTI5LDcgQEAKICAqICBAcmFyOiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIgaW5kZXggdG8gYXNzb2NpYXRlIHdpdGggYSBWTURxIGluZGV4CiAgKiAgQHZtZHE6IFZNRHEgcG9vbCBpbmRleAogICoqLwotczMyIGl4Z2JlX3NldF92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQorc3RhdGljIHMzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSkKIHsKIAl1MzIgbXBzYXI7CiAJdTMyIHJhcl9lbnRyaWVzID0gaHctPm1hYy5udW1fcmFyX2VudHJpZXM7CkBAIC0xMDE5LDggKzk1OSw4IEBACiAgKgogICogIFR1cm4gb24vb2ZmIHNwZWNpZmllZCBWTEFOIGluIHRoZSBWTEFOIGZpbHRlciB0YWJsZS4KICAqKi8KLXMzMiBpeGdiZV9zZXRfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgdmxhbiwgdTMyIHZpbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2bGFuX29uKQorc3RhdGljIHMzMiBpeGdiZV9zZXRfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgdmxhbiwgdTMyIHZpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmxhbl9vbikKIHsKIAl1MzIgcmVnaW5kZXg7CiAJdTMyIGJpdGluZGV4OwpAQCAtMTEzMyw3ICsxMDczLDcgQEAKICAqCiAgKiAgQ2xlYXJzIHRoZSBWTEFOIGZpbGVyIHRhYmxlLCBhbmQgdGhlIFZNRHEgaW5kZXggYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWx0ZXIKICAqKi8KLXMzMiBpeGdiZV9jbGVhcl92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX2NsZWFyX3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAl1MzIgb2Zmc2V0OwogCkBAIC0xMTUzLDcgKzEwOTMsNyBAQAogICogIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OSAtIEluaXRpYWxpemUgdGhlIFVuaWNhc3QgVGFibGUgQXJyYXkKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiovCi1zMzIgaXhnYmVfaW5pdF91dGFfdGFibGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCWludCBpOwogCWh3X2RiZyhodywgIiBDbGVhcmluZyBVVEFcbiIpOwpAQCAtMTQzMCw3ICsxMzcwLDggQEAKICAqICBAc3RyZWFtOiBpbnB1dCBiaXRzdHJlYW0gdG8gY29tcHV0ZSB0aGUgaGFzaCBvbgogICogIEBrZXk6IDMyLWJpdCBoYXNoIGtleQogICoqLwotdTE2IGl4Z2JlX2F0cl9jb21wdXRlX2hhc2hfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqYXRyX2lucHV0LCB1MzIga2V5KQorc3RhdGljIHUxNiBpeGdiZV9hdHJfY29tcHV0ZV9oYXNoXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmF0cl9pbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIga2V5KQogewogCS8qCiAJICogVGhlIGFsZ29yaXRobSBpcyBhcyBmb2xsb3dzOgpAQCAtMTYwMiw4ICsxNTQzLDggQEAKICAqICBAc3JjX2FkZHJfNDogdGhlIGZvdXJ0aCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKICAqKi8KIHMzMiBpeGdiZV9hdHJfc2V0X3NyY19pcHY2XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNyY19hZGRyXzEsIHUzMiBzcmNfYWRkcl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNyY19hZGRyXzMsIHUzMiBzcmNfYWRkcl80KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfYWRkcl8xLCB1MzIgc3JjX2FkZHJfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMywgdTMyIHNyY19hZGRyXzQpCiB7CiAJaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVRdID0gc3JjX2FkZHJfNCAmIDB4ZmY7CiAJaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyAxXSA9CkBAIC0xNjQ1LDggKzE1ODYsOCBAQAogICogIEBkc3RfYWRkcl80OiB0aGUgZm91cnRoIDQgYnl0ZXMgb2YgdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICoqLwogczMyIGl4Z2JlX2F0cl9zZXRfZHN0X2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZHN0X2FkZHJfMSwgdTMyIGRzdF9hZGRyXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZHN0X2FkZHJfMywgdTMyIGRzdF9hZGRyXzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRzdF9hZGRyXzEsIHUzMiBkc3RfYWRkcl8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8zLCB1MzIgZHN0X2FkZHJfNCkKIHsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY2X09GRlNFVF0gPSBkc3RfYWRkcl80ICYgMHhmZjsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY2X09GRlNFVCArIDFdID0KQEAgLTE3MjMsNyArMTY2NCw4IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5CiAgKiAgQHZtX3Bvb2w6IHRoZSBWaXJ0dWFsIE1hY2hpbmUgcG9vbCB0byBsb2FkCiAgKiovCi1zMzIgaXhnYmVfYXRyX3NldF92bV9wb29sXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1OCB2bV9wb29sKQorczMyIGl4Z2JlX2F0cl9zZXRfdm1fcG9vbF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHZtX3Bvb2wpCiB7CiAJaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9WTV9QT09MX09GRlNFVF0gPSB2bV9wb29sOwogCkBAIC0xNzQ3LDcgKzE2ODksOCBAQAogICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIHNlYXJjaAogICogIEB2bGFuOiB0aGUgVkxBTiBpZCB0byBsb2FkCiAgKiovCi1zMzIgaXhnYmVfYXRyX2dldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MTYgKnZsYW4pCitzdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfdmxhbl9pZF84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqdmxhbikKIHsKIAkqdmxhbiA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVRdOwogCSp2bGFuIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVQgKyAxXSA8PCA4OwpAQCAtMTc2MCw3ICsxNzAzLDggQEAKICAqICBAaW5wdXQ6IGlucHV0IHN0cmVhbSB0byBzZWFyY2gKICAqICBAc3JjX2FkZHI6IHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKICAqKi8KLXMzMiBpeGdiZV9hdHJfZ2V0X3NyY19pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MzIgKnNyY19hZGRyKQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X3NyY19pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqc3JjX2FkZHIpCiB7CiAJKnNyY19hZGRyID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNF9PRkZTRVRdOwogCSpzcmNfYWRkciB8PSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1NSQ19JUFY0X09GRlNFVCArIDFdIDw8IDg7CkBAIC0xNzc1LDcgKzE3MTksOCBAQAogICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIHNlYXJjaAogICogIEBkc3RfYWRkcjogdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICoqLwotczMyIGl4Z2JlX2F0cl9nZXRfZHN0X2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUzMiAqZHN0X2FkZHIpCitzdGF0aWMgczMyIGl4Z2JlX2F0cl9nZXRfZHN0X2lwdjRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcikKIHsKIAkqZHN0X2FkZHIgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY0X09GRlNFVF07CiAJKmRzdF9hZGRyIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjRfT0ZGU0VUICsgMV0gPDwgODsKQEAgLTE3OTMsOSArMTczOCw5IEBACiAgKiAgQHNyY19hZGRyXzM6IHRoZSB0aGlyZCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKICAqICBAc3JjX2FkZHJfNDogdGhlIGZvdXJ0aCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKICAqKi8KLXMzMiBpeGdiZV9hdHJfZ2V0X3NyY19pcHY2XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpzcmNfYWRkcl8xLCB1MzIgKnNyY19hZGRyXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzMsIHUzMiAqc3JjX2FkZHJfNCkKK3N0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF9zcmNfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzEsIHUzMiAqc3JjX2FkZHJfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnNyY19hZGRyXzMsIHUzMiAqc3JjX2FkZHJfNCkKIHsKIAkqc3JjX2FkZHJfMSA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX0lQVjZfT0ZGU0VUICsgMTJdOwogCSpzcmNfYWRkcl8xID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyAxM10gPDwgODsKQEAgLTE4MjksOCArMTc3NCw4IEBACiAgKiAgQGRzdF9hZGRyXzQ6IHRoZSBmb3VydGggNCBieXRlcyBvZiB0aGUgSVAgYWRkcmVzcyB0byBsb2FkCiAgKiovCiBzMzIgaXhnYmVfYXRyX2dldF9kc3RfaXB2Nl84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqZHN0X2FkZHJfMSwgdTMyICpkc3RfYWRkcl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcl8zLCB1MzIgKmRzdF9hZGRyXzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcl8xLCB1MzIgKmRzdF9hZGRyXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICpkc3RfYWRkcl8zLCB1MzIgKmRzdF9hZGRyXzQpCiB7CiAJKmRzdF9hZGRyXzEgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY2X09GRlNFVCArIDEyXTsKIAkqZHN0X2FkZHJfMSA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX0lQVjZfT0ZGU0VUICsgMTNdIDw8IDg7CkBAIC0xODY1LDcgKzE4MTAsOCBAQAogICogIGVuZGlhbm5lc3Mgd2hlbiByZXRyaWV2aW5nIHRoZSBkYXRhLiAgVGhpcyBjYW4gYmUgY29uZnVzaW5nIHNpbmNlIHRoZQogICogIGludGVybmFsIGhhc2ggZW5naW5lIGV4cGVjdHMgaXQgdG8gYmUgYmlnLWVuZGlhbi4KICAqKi8KLXMzMiBpeGdiZV9hdHJfZ2V0X3NyY19wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MTYgKnNyY19wb3J0KQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X3NyY19wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqc3JjX3BvcnQpCiB7CiAJKnNyY19wb3J0ID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfUE9SVF9PRkZTRVRdIDw8IDg7CiAJKnNyY19wb3J0IHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfU1JDX1BPUlRfT0ZGU0VUICsgMV07CkBAIC0xODgzLDcgKzE4MjksOCBAQAogICogIGVuZGlhbm5lc3Mgd2hlbiByZXRyaWV2aW5nIHRoZSBkYXRhLiAgVGhpcyBjYW4gYmUgY29uZnVzaW5nIHNpbmNlIHRoZQogICogIGludGVybmFsIGhhc2ggZW5naW5lIGV4cGVjdHMgaXQgdG8gYmUgYmlnLWVuZGlhbi4KICAqKi8KLXMzMiBpeGdiZV9hdHJfZ2V0X2RzdF9wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MTYgKmRzdF9wb3J0KQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X2RzdF9wb3J0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZHN0X3BvcnQpCiB7CiAJKmRzdF9wb3J0ID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9EU1RfUE9SVF9PRkZTRVRdIDw8IDg7CiAJKmRzdF9wb3J0IHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfRFNUX1BPUlRfT0ZGU0VUICsgMV07CkBAIC0xODk2LDcgKzE4NDMsOCBAQAogICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIG1vZGlmeQogICogIEBmbGV4X2J5dGVzOiB0aGUgZmxleGlibGUgYnl0ZXMgdG8gbG9hZAogICoqLwotczMyIGl4Z2JlX2F0cl9nZXRfZmxleF9ieXRlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1MTYgKmZsZXhfYnl0ZSkKK3N0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF9mbGV4X2J5dGVfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZmxleF9ieXRlKQogewogCSpmbGV4X2J5dGUgPSBpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0ZMRVhfQllURV9PRkZTRVRdOwogCSpmbGV4X2J5dGUgfD0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9GTEVYX0JZVEVfT0ZGU0VUICsgMV0gPDwgODsKQEAgLTE5MDksNyArMTg1Nyw4IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gbW9kaWZ5CiAgKiAgQHZtX3Bvb2w6IHRoZSBWaXJ0dWFsIE1hY2hpbmUgcG9vbCB0byBsb2FkCiAgKiovCi1zMzIgaXhnYmVfYXRyX2dldF92bV9wb29sXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1OCAqdm1fcG9vbCkKK3MzMiBpeGdiZV9hdHJfZ2V0X3ZtX3Bvb2xfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqdm1fcG9vbCkKIHsKIAkqdm1fcG9vbCA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVk1fUE9PTF9PRkZTRVRdOwogCkBAIC0xOTIxLDcgKzE4NzAsOCBAQAogICogIEBpbnB1dDogaW5wdXQgc3RyZWFtIHRvIG1vZGlmeQogICogIEBsNHR5cGU6IHRoZSBsYXllciA0IHR5cGUgdmFsdWUgdG8gbG9hZAogICoqLwotczMyIGl4Z2JlX2F0cl9nZXRfbDR0eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LCB1OCAqbDR0eXBlKQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X2w0dHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmw0dHlwZSkKIHsKIAkqbDR0eXBlID0gaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9MNFRZUEVfT0ZGU0VUXTsKIApAQCAtMjAwMiw5ICsxOTUyLDkgQEAKICAqICBoYXJkd2FyZSB3cml0ZXMgbXVzdCBiZSBwcm90ZWN0ZWQgZnJvbSBvbmUgYW5vdGhlci4KICAqKi8KIHMzMiBpeGdiZV9mZGlyX2FkZF9wZXJmZWN0X2ZpbHRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBzb2Z0X2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNvZnRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlKQogewogCXUzMiBmZGlyY21kID0gMDsKIAl1MzIgZmRpcmhhc2g7CkBAIC0yMDk3LDcgKzIwNDcsNyBAQAogICoKICAqICBQZXJmb3JtcyByZWFkIG9wZXJhdGlvbiB0byBPbWVyIGFuYWxvZyByZWdpc3RlciBzcGVjaWZpZWQuCiAgKiovCi1zMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKQorc3RhdGljIHMzMiBpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4ICp2YWwpCiB7CiAJdTMyICBjb3JlX2N0bDsKIApAQCAtMjExOSw3ICsyMDY5LDcgQEAKICAqCiAgKiAgUGVyZm9ybXMgd3JpdGUgb3BlcmF0aW9uIHRvIE9tZXIgYW5hbG9nIHJlZ2lzdGVyIHNwZWNpZmllZC4KICAqKi8KLXMzMiBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCB2YWwpCitzdGF0aWMgczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCkKIHsKIAl1MzIgIGNvcmVfY3RsOwogCkBAIC0yMTM5LDcgKzIwODksNyBAQAogICogIFRoZW4gcGVyZm9ybXMgZGV2aWNlLXNwZWNpZmljOgogICogIENsZWFycyB0aGUgcmF0ZSBsaW1pdGVyIHJlZ2lzdGVycy4KICAqKi8KLXMzMiBpeGdiZV9zdGFydF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9zdGFydF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXUzMiBxX251bTsKIAlzMzIgcmV0X3ZhbDsKQEAgLTIxNjgsNyArMjExOCw3IEBACiAgKgogICogIERldGVybWluZXMgdGhlIHBoeXNpY2FsIGxheWVyIG1vZHVsZSBmb3VuZCBvbiB0aGUgY3VycmVudCBhZGFwdGVyLgogICoqLwotczMyIGl4Z2JlX2lkZW50aWZ5X3BoeV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX1BIWV9BRERSX0lOVkFMSUQ7CiAJc3RhdHVzID0gaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOwpAQCAtMjE4Myw3ICsyMTMzLDcgQEAKICAqCiAgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KICAqKi8KLXUzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgdTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAl1MzIgcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOwogCXUzMiBhdXRvYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7CkBAIC0yMjkwLDcgKzIyNDAsNyBAQAogICoKICAqICBFbmFibGVzIHRoZSBSeCBETUEgdW5pdCBmb3IgODI1OTkKICAqKi8KLXMzMiBpeGdiZV9lbmFibGVfcnhfZG1hXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWd2YWwpCitzdGF0aWMgczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKIHsKICNkZWZpbmUgSVhHQkVfTUFYX1NFQ1JYX1BPTEwgMzAKIAlpbnQgaTsKQEAgLTIzMzUsNyArMjI4NSw3IEBACiAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlYWQgdGhlIEVFUFJPTSBsb2NhdGlvbiBmb3IgdGhlIGRldmljZSBjYXBhYmlsaXRpZXMsCiAgKiAgYW5kIHJldHVybiB0aGUgd29yZCB0aHJvdWdoIGRldmljZV9jYXBzLgogICoqLwotczMyIGl4Z2JlX2dldF9kZXZpY2VfY2Fwc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgKmRldmljZV9jYXBzKQorc3RhdGljIHMzMiBpeGdiZV9nZXRfZGV2aWNlX2NhcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2ICpkZXZpY2VfY2FwcykKIHsKIAlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCBJWEdCRV9ERVZJQ0VfQ0FQUywgZGV2aWNlX2NhcHMpOwogCkBAIC0yMzUxLDggKzIzMDEsOCBAQAogICogIHBvaW50ZXIsIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBhdCB0aGF0IGxvY2F0aW9uLiAgVGhpcyBpcyB1c2VkIGluIGJvdGgKICAqICBnZXQgYW5kIHNldCBtYWNfYWRkciByb3V0aW5lcy4KICAqKi8KLXMzMiBpeGdiZV9nZXRfc2FuX21hY19hZGRyX29mZnNldF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqc2FuX21hY19vZmZzZXQpCitzdGF0aWMgczMyIGl4Z2JlX2dldF9zYW5fbWFjX2FkZHJfb2Zmc2V0XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqc2FuX21hY19vZmZzZXQpCiB7CiAJLyoKIAkgKiBGaXJzdCByZWFkIHRoZSBFRVBST00gcG9pbnRlciB0byBzZWUgaWYgdGhlIE1BQyBhZGRyZXNzZXMgYXJlCkBAIC0yMzczLDcgKzIzMjMsNyBAQAogICogIHNldF9sYW5faWQoKSBpcyBjYWxsZWQgYnkgaWRlbnRpZnlfc2ZwKCksIGJ1dCB0aGlzIGNhbm5vdCBiZSByZWxpZWQKICAqICB1cG9uIGZvciBub24tU0ZQIGNvbm5lY3Rpb25zLCBzbyB3ZSBtdXN0IGNhbGwgaXQgaGVyZS4KICAqKi8KLXMzMiBpeGdiZV9nZXRfc2FuX21hY19hZGRyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICpzYW5fbWFjX2FkZHIpCitzdGF0aWMgczMyIGl4Z2JlX2dldF9zYW5fbWFjX2FkZHJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKnNhbl9tYWNfYWRkcikKIHsKIAl1MTYgc2FuX21hY19kYXRhLCBzYW5fbWFjX29mZnNldDsKIAl1OCBpOwpAQCAtMjQ3Niw3ICsyNDI2LDYgQEAKIAkucmVhZF9hbmFsb2dfcmVnOCAgICAgICA9ICZpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5LAogCS53cml0ZV9hbmFsb2dfcmVnOCAgICAgID0gJml4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5LAogCS5zZXR1cF9saW5rICAgICAgICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5LAotCS5zZXR1cF9saW5rX3NwZWVkICAgICAgID0gJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5LAogCS5jaGVja19saW5rICAgICAgICAgICAgID0gJml4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5LAogCS5nZXRfbGlua19jYXBhYmlsaXRpZXMgID0gJml4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OSwKIAkubGVkX29uICAgICAgICAgICAgICAgICA9ICZpeGdiZV9sZWRfb25fZ2VuZXJpYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKaW5kZXggOTZhMTg1OS4uNjYyMWUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKQEAgLTUzLDYgKzUzLDcgQEAKIHN0YXRpYyB2b2lkIGl4Z2JlX2Rpc2FibGVfcmFyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiBzdGF0aWMgczMyIGl4Z2JlX210YV92ZWN0b3Ioc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKm1jX2FkZHIpOwogc3RhdGljIHZvaWQgaXhnYmVfYWRkX3VjX2FkZHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKmFkZHIsIHUzMiB2bWRxKTsKK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfZmMoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pOwogCiAvKioKICAqICBpeGdiZV9zdGFydF9od19nZW5lcmljIC0gUHJlcGFyZSBoYXJkd2FyZSBmb3IgVHgvUngKQEAgLTE4MTUsNyArMTgxNiw3IEBACiAgKgogICogIENhbGxlZCBhdCBpbml0IHRpbWUgdG8gc2V0IHVwIGZsb3cgY29udHJvbC4KICAqKi8KLXMzMiBpeGdiZV9zZXR1cF9mYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfZmMoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pCiB7CiAJczMyIHJldF92YWwgPSAwOwogCXUzMiByZWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCmluZGV4IDBkMzRkNGQuLjI3ZjMyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCkBAIC02NCw3ICs2NCw2IEBACiBzMzIgaXhnYmVfZW5hYmxlX21jX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfZGlzYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKTsKLXMzMiBpeGdiZV9zZXR1cF9mYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSk7CiBzMzIgaXhnYmVfZmNfZW5hYmxlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2t0ZXRidWZfbnVtKTsKIHMzMiBpeGdiZV9mY19hdXRvbmVnKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCmluZGV4IDU4OWY2MmMuLmVjOGEyNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCkBAIC0xNDUsOCArMTQ1LDEyIEBACiAJdTMyICAgIGNyZWRpdF9tYXggICAgPSAwOwogCXU4ICAgICBpICAgICAgICAgICAgID0gMDsKIAotCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUUlBDUywgSVhHQkVfUlRSUENTX0FSQkRJUyk7CisJLyoKKwkgKiBEaXNhYmxlIHRoZSBhcmJpdGVyIGJlZm9yZSBjaGFuZ2luZyBwYXJhbWV0ZXJzCisJICogKGFsd2F5cyBlbmFibGUgcmVjeWNsZSBtb2RlOyBXU1ApCisJICovCisJcmVnID0gSVhHQkVfUlRSUENTX1JSTSB8IElYR0JFX1JUUlBDU19SQUMgfCBJWEdCRV9SVFJQQ1NfQVJCRElTOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRSUENTLCByZWcpOwogCiAJLyogTWFwIGFsbCB0cmFmZmljIGNsYXNzZXMgdG8gdGhlaXIgVVAsIDEgdG8gMSAqLwogCXJlZyA9IDA7CkBAIC0xOTQsOSArMTk4LDYgQEAKIAl1MzIgICAgcmVnLCBtYXhfY3JlZGl0czsKIAl1OCAgICAgaTsKIAotCS8qIERpc2FibGUgdGhlIGFyYml0ZXIgYmVmb3JlIGNoYW5naW5nIHBhcmFtZXRlcnMgKi8KLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgSVhHQkVfUlRURENTX0FSQkRJUyk7Ci0KIAkvKiBDbGVhciB0aGUgcGVyLVR4IHF1ZXVlIGNyZWRpdHM7IHdlIHVzZSBwZXItVEMgaW5zdGVhZCAqLwogCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERRU0VMLCBpKTsKQEAgLTI0NCw4ICsyNDUsMTQgQEAKIAl1MzIgcmVnOwogCXU4IGk7CiAKLQkvKiBEaXNhYmxlIHRoZSBhcmJpdGVyIGJlZm9yZSBjaGFuZ2luZyBwYXJhbWV0ZXJzICovCi0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRQQ1MsIElYR0JFX1JUVFBDU19BUkJESVMpOworCS8qCisJICogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycworCSAqIChhbHdheXMgZW5hYmxlIHJlY3ljbGUgbW9kZTsgU1A7IGFyYiBkZWxheSkKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFRQQ1NfVFBQQUMgfCBJWEdCRV9SVFRQQ1NfVFBSTSB8CisJICAgICAgKElYR0JFX1JUVFBDU19BUkJEX0RDQiA8PCBJWEdCRV9SVFRQQ1NfQVJCRF9TSElGVCkgfAorCSAgICAgIElYR0JFX1JUVFBDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRQQ1MsIHJlZyk7CiAKIAkvKiBNYXAgYWxsIHRyYWZmaWMgY2xhc3NlcyB0byB0aGVpciBVUCwgMSB0byAxICovCiAJcmVnID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggMWM3MjY1Ny4uYTZiYzFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNkZWZpbmUgQklUX1BGQwkJMHgwMgogI2RlZmluZSBCSVRfUEdfUlgJMHgwNAogI2RlZmluZSBCSVRfUEdfVFgJMHgwOAorI2RlZmluZSBCSVRfQVBQX1VQQ0hHCTB4MTAKICNkZWZpbmUgQklUX1JFU0VUTElOSyAgIDB4NDAKICNkZWZpbmUgQklUX0xJTktTUEVFRCAgIDB4ODAKIApAQCAtMTM5LDE4ICsxNDAsNiBAQAogCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEU7CiAJCX0KIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKLSNpZmRlZiBJWEdCRV9GQ09FCi0JCS8qIFR1cm4gb24gRkNvRSBvZmZsb2FkICovCi0JCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSkgJiYKLQkJICAgICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKSkgewotCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQ7Ci0JCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLmluZGljZXMgPQotCQkJCUlYR0JFX0ZDUkVUQV9TSVpFOwotCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfQ1JDOwotCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0ZTTzsKLQkJCW5ldGRldi0+ZmNvZV9kZHBfeGlkID0gSVhHQkVfRkNPRV9ERFBfTUFYIC0gMTsKLQkJfQotI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIAkJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOwpAQCAtMTY5LDE3ICsxNTgsNiBAQAogCQkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQogCQkJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CiAKLSNpZmRlZiBJWEdCRV9GQ09FCi0JCQkvKiBUdXJuIG9mZiBGQ29FIG9mZmxvYWQgKi8KLQkJCWlmIChhZGFwdGVyLT5mbGFncyAmIChJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSB8Ci0JCQkgICAgIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSkgewotCQkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRDsKLQkJCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLmluZGljZXMgPSAwOwotCQkJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRkNPRV9DUkM7Ci0JCQkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9GU087Ci0JCQkJbmV0ZGV2LT5mY29lX2RkcF94aWQgPSAwOwotCQkJfQotI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIAkJCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAkJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOwpAQCAtMzcxLDggKzM0OSwxNCBAQAogCQl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCW1zbGVlcCgxKTsKIAotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJaXhnYmVfZG93bihhZGFwdGVyKTsKKwkJaWYgKGFkYXB0ZXItPmRjYl9zZXRfYml0bWFwICYgQklUX0FQUF9VUENIRykgeworCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7CisJCQlpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOworCQl9IGVsc2UgeworCQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCQl9CiAJfQogCiAJcmV0ID0gaXhnYmVfY29weV9kY2JfY2ZnKCZhZGFwdGVyLT50ZW1wX2RjYl9jZmcsICZhZGFwdGVyLT5kY2JfY2ZnLApAQCAtMzk2LDggKzM4MCwxNCBAQAogCX0KIAogCWlmIChhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCAmIEJJVF9SRVNFVExJTkspIHsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKLQkJCWl4Z2JlX3VwKGFkYXB0ZXIpOworCQlpZiAoYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgJiBCSVRfQVBQX1VQQ0hHKSB7CisJCQlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisJCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX29wZW4obmV0ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQkJaXhnYmVfdXAoYWRhcHRlcik7CisJCX0KIAkJcmV0ID0gRENCX0hXX0NIR19SU1Q7CiAJfSBlbHNlIGlmIChhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCAmIEJJVF9QRkMpIHsKIAkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQpAQCAtNTAzLDYgKzQ5Myw3NiBAQAogCXJldHVybjsKIH0KIAorLyoqCisgKiBpeGdiZV9kY2JubF9nZXRhcHAgLSByZXRyaWV2ZSB0aGUgRENCWCBhcHBsaWNhdGlvbiB1c2VyIHByaW9yaXR5CisgKiBAbmV0ZGV2IDogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2CisgKiBAaWR0eXBlIDogaWRlbnRpZmllcyB0aGUgaWQgYXMgZXRoZXIgdHlwZSBvciBUQ1AvVURQIHBvcnQgbnVtYmVyCisgKiBAaWQ6IGlkIGlzIGVpdGhlciBldGhlciB0eXBlIG9yIFRDUC9VRFAgcG9ydCBudW1iZXIKKyAqCisgKiBSZXR1cm5zIDogb24gc3VjY2VzcywgcmV0dXJucyBhIG5vbi16ZXJvIDgwMi4xcCB1c2VyIHByaW9yaXR5IGJpdG1hcAorICogb3RoZXJ3aXNlIHJldHVybnMgMCBhcyB0aGUgaW52YWxpZCB1c2VyIHByaW9yaXR5IGJpdG1hcCB0byBpbmRpY2F0ZSBhbgorICogZXJyb3IuCisgKi8KK3N0YXRpYyB1OCBpeGdiZV9kY2JubF9nZXRhcHAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggaWR0eXBlLCB1MTYgaWQpCit7CisJdTggcnZhbCA9IDA7CisKKwlzd2l0Y2ggKGlkdHlwZSkgeworCWNhc2UgRENCX0FQUF9JRFRZUEVfRVRIVFlQRToKKyNpZmRlZiBJWEdCRV9GQ09FCisJCWlmIChpZCA9PSBFVEhfUF9GQ09FKQorCQkJcnZhbCA9IGl4Z2JlX2Zjb2VfZ2V0YXBwKG5ldGRldl9wcml2KG5ldGRldikpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgRENCX0FQUF9JRFRZUEVfUE9SVE5VTToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBydmFsOworfQorCisvKioKKyAqIGl4Z2JlX2RjYm5sX3NldGFwcCAtIHNldCB0aGUgRENCWCBhcHBsaWNhdGlvbiB1c2VyIHByaW9yaXR5CisgKiBAbmV0ZGV2IDogdGhlIGNvcnJlc3BvbmRpbmcgbmV0ZGV2CisgKiBAaWR0eXBlIDogaWRlbnRpZmllcyB0aGUgaWQgYXMgZXRoZXIgdHlwZSBvciBUQ1AvVURQIHBvcnQgbnVtYmVyCisgKiBAaWQ6IGlkIGlzIGVpdGhlciBldGhlciB0eXBlIG9yIFRDUC9VRFAgcG9ydCBudW1iZXIKKyAqIEB1cDogdGhlIDgwMi4xcCB1c2VyIHByaW9yaXR5IGJpdG1hcAorICoKKyAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3Mgb3IgMSBvbiBlcnJvcgorICovCitzdGF0aWMgdTggaXhnYmVfZGNibmxfc2V0YXBwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGlkdHlwZSwgdTE2IGlkLCB1OCB1cCkKK3sKKwl1OCBydmFsID0gMTsKKworCXN3aXRjaCAoaWR0eXBlKSB7CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9FVEhUWVBFOgorI2lmZGVmIElYR0JFX0ZDT0UKKwkJaWYgKGlkID09IEVUSF9QX0ZDT0UpIHsKKwkJCXU4IHRjOworCQkJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwkJCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQkJdGMgPSBhZGFwdGVyLT5mY29lLnRjOworCQkJcnZhbCA9IGl4Z2JlX2Zjb2Vfc2V0YXBwKGFkYXB0ZXIsIHVwKTsKKwkJCWlmICgoIXJ2YWwpICYmICh0YyAhPSBhZGFwdGVyLT5mY29lLnRjKSAmJgorCQkJICAgIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpICYmCisJCQkgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpKSB7CisJCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0FQUF9VUENIRzsKKwkJCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfUkVTRVRMSU5LOworCQkJfQorCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQVBQX0lEVFlQRV9QT1JUTlVNOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHJ2YWw7Cit9CisKIHN0cnVjdCBkY2JubF9ydG5sX29wcyBkY2JubF9vcHMgPSB7CiAJLmdldHN0YXRlCT0gaXhnYmVfZGNibmxfZ2V0X3N0YXRlLAogCS5zZXRzdGF0ZQk9IGl4Z2JlX2RjYm5sX3NldF9zdGF0ZSwKQEAgLTUyMyw1ICs1ODMsNyBAQAogCS5zZXRudW10Y3MJPSBpeGdiZV9kY2JubF9zZXRudW10Y3MsCiAJLmdldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfZ2V0cGZjc3RhdGUsCiAJLnNldHBmY3N0YXRlCT0gaXhnYmVfZGNibmxfc2V0cGZjc3RhdGUsCisJLmdldGFwcAkJPSBpeGdiZV9kY2JubF9nZXRhcHAsCisJLnNldGFwcAkJPSBpeGdiZV9kY2JubF9zZXRhcHAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggZGZmOGRmYS4uMDI2ZTk0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtMTY5LDIzICsxNjksMjAgQEAKIAkJfQogCX0gZWxzZSBpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lKSB7CiAJCS8qIFNldCBhcyBGSUJSRSB1bnRpbCBTRVJERVMgZGVmaW5lZCBpbiBrZXJuZWwgKi8KLQkJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7Ci0JCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgotCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCVNVUFBPUlRFRF9GSUJSRSk7Ci0JCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCB8Ci0JCQkJQURWRVJUSVNFRF9GSUJSRSk7Ci0JCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKLQkJCWJyZWFrOwotCQljYXNlIElYR0JFX0RFVl9JRF84MjU5OF9CWDoKKwkJaWYgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQkVfREVWX0lEXzgyNTk4X0JYKSB7CiAJCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKIAkJCQkJICAgU1VQUE9SVEVEX0ZJQlJFKTsKIAkJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAogCQkJCQkgICAgIEFEVkVSVElTRURfRklCUkUpOwogCQkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CiAJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwotCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICBTVVBQT1JURURfRklCUkUpOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgIEFEVkVSVElTRURfRklCUkUpOworCQkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CiAJCX0KIAl9IGVsc2UgewogCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0ZJQlJFOwpAQCAtMjM2LDExICsyMzMsMTEgQEAKIAkJCXJldHVybiBlcnI7CiAJCS8qIHRoaXMgc2V0cyB0aGUgbGluayBzcGVlZCBhbmQgcmVzdGFydHMgYXV0by1uZWcgKi8KIAkJaHctPm1hYy5hdXRvdHJ5X3Jlc3RhcnQgPSB0cnVlOwotCQllcnIgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhZHZlcnRpc2VkLCB0cnVlLCB0cnVlKTsKKwkJZXJyID0gaHctPm1hYy5vcHMuc2V0dXBfbGluayhodywgYWR2ZXJ0aXNlZCwgdHJ1ZSwgdHJ1ZSk7CiAJCWlmIChlcnIpIHsKIAkJCURQUklOVEsoUFJPQkUsIElORk8sCiAJCQkgICAgICAgICJzZXR1cCBsaW5rIGZhaWxlZCB3aXRoIGNvZGUgJWRcbiIsIGVycik7Ci0JCQlody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBvbGQsIHRydWUsIHRydWUpOworCQkJaHctPm1hYy5vcHMuc2V0dXBfbGluayhodywgb2xkLCB0cnVlLCB0cnVlKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGluIHRoaXMgY2FzZSB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDEwR2IvRlVMTCAqLwpAQCAtMTQ0MCw3ICsxNDM3LDcgQEAKIAkJZ290byBlcnJfbm9tZW07CiAJfQogCi0JdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBpeGdiZV9sZWdhY3lfdHhfZGVzYyk7CisJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKTsKIAl0eF9yaW5nLT5zaXplID0gQUxJR04odHhfcmluZy0+c2l6ZSwgNDA5Nik7CiAJaWYgKCEodHhfcmluZy0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4X3JpbmctPnNpemUsCiAJCQkJCQkgICAmdHhfcmluZy0+ZG1hKSkpIHsKQEAgLTE0NTQsNyArMTQ1MSw3IEBACiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVERCQUgoMCksCiAJCQkoKHU2NCkgdHhfcmluZy0+ZG1hID4+IDMyKSk7CiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVERMRU4oMCksCi0JCQl0eF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfbGVnYWN5X3R4X2Rlc2MpKTsKKwkJCXR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKSk7CiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVERIKDApLCAwKTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9URFQoMCksIDApOwogCkBAIC0xNDcyLDcgKzE0NjksNyBAQAogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1RYRENUTCgwKSwgcmVnX2RhdGEpOwogCiAJZm9yIChpID0gMDsgaSA8IHR4X3JpbmctPmNvdW50OyBpKyspIHsKLQkJc3RydWN0IGl4Z2JlX2xlZ2FjeV90eF9kZXNjICpkZXNjID0gSVhHQkVfVFhfREVTQygqdHhfcmluZywgaSk7CisJCXVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICpkZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGkpOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDEwMjQ7CiAKQEAgLTE0ODYsMTMgKzE0ODMsMTggQEAKIAkJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubGVuZ3RoID0gc2tiLT5sZW47CiAJCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLmRtYSA9CiAJCQlwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAotCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJZGVzYy0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NCh0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5kbWEpOwotCQlkZXNjLT5sb3dlci5kYXRhID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCQlkZXNjLT5sb3dlci5kYXRhIHw9IGNwdV90b19sZTMyKElYR0JFX1RYRF9DTURfRU9QIHwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9UWERfQ01EX0lGQ1MgfAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1RYRF9DTURfUlMpOwotCQlkZXNjLT51cHBlci5kYXRhID0gMDsKKwkJCSAgICAgICAgICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlkZXNjLT5yZWFkLmJ1ZmZlcl9hZGRyID0KKwkJICAgICAgICAgICAgICAgICAgICBjcHVfdG9fbGU2NCh0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5kbWEpOworCQlkZXNjLT5yZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKKwkJZGVzYy0+cmVhZC5jbWRfdHlwZV9sZW4gfD0gY3B1X3RvX2xlMzIoSVhHQkVfVFhEX0NNRF9FT1AgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9UWERfQ01EX0lGQ1MgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9UWERfQ01EX1JTKTsKKwkJZGVzYy0+cmVhZC5vbGluZm9fc3RhdHVzID0gMDsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQkJZGVzYy0+cmVhZC5vbGluZm9fc3RhdHVzIHw9CisJCQkgICAgICAgICAgICAgICAgKHNrYi0+bGVuIDw8IElYR0JFX0FEVlRYRF9QQVlMRU5fU0hJRlQpOworCiAJfQogCiAJLyogU2V0dXAgUnggRGVzY3JpcHRvciByaW5nIGFuZCBSeCBidWZmZXJzICovCkBAIC0xNTA4LDcgKzE1MTAsNyBAQAogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKLQlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGl4Z2JlX2xlZ2FjeV9yeF9kZXNjKTsKKwlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MpOwogCXJ4X3JpbmctPnNpemUgPSBBTElHTihyeF9yaW5nLT5zaXplLCA0MDk2KTsKIAlpZiAoIShyeF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwKIAkJCQkJCSAgICZyeF9yaW5nLT5kbWEpKSkgewpAQCAtMTU2Niw4ICsxNTY4LDggQEAKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SWENUUkwsIHJjdGwpOwogCiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKLQkJc3RydWN0IGl4Z2JlX2xlZ2FjeV9yeF9kZXNjICpyeF9kZXNjID0KLQkJCQkJSVhHQkVfUlhfREVTQygqcnhfcmluZywgaSk7CisJCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjID0KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCXNrYiA9IGFsbG9jX3NrYihJWEdCRV9SWEJVRkZFUl8yMDQ4ICsgTkVUX0lQX0FMSUdOLCBHRlBfS0VSTkVMKTsKQEAgLTE1ODAsNyArMTU4Miw3IEBACiAJCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldLmRtYSA9CiAJCQlwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIElYR0JFX1JYQlVGRkVSXzIwNDgsCiAJCQkgICAgICAgICAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlyeF9kZXNjLT5idWZmZXJfYWRkciA9CisJCXJ4X2Rlc2MtPnJlYWQucGt0X2FkZHIgPQogCQkJCWNwdV90b19sZTY0KHJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldLmRtYSk7CiAJCW1lbXNldChza2ItPmRhdGEsIDB4MDAsIHNrYi0+bGVuKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggMjhjZjEwNC4uYTNjOWY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtMjcsNiArMjcsOSBAQAogCiAKICNpbmNsdWRlICJpeGdiZS5oIgorI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKKyNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTkuaCIKKyNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENCICovCiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTI4OSw2ICsyOTIsNyBAQAogCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXUxNiB4aWQ7CisJdTMyIGZjdGw7CiAJdTMyIHN0ZXJyLCBmY2VvZmUsIGZjZXJyLCBmY3N0YXQ7CiAJaW50IHJjID0gLUVJTlZBTDsKIAlzdHJ1Y3QgaXhnYmVfZmNvZSAqZmNvZTsKQEAgLTMwOSw3ICszMTMsMTIgQEAKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSArCiAJCQkJIHNpemVvZihzdHJ1Y3QgZmNvZV9oZHIpKTsKIAlmaCA9IChzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKLQl4aWQgPSAgYmUxNl90b19jcHUoZmgtPmZoX294X2lkKTsKKwlmY3RsID0gbnRvaDI0KGZoLT5maF9mX2N0bCk7CisJaWYgKGZjdGwgJiBGQ19GQ19FWF9DVFgpCisJCXhpZCA9ICBiZTE2X3RvX2NwdShmaC0+Zmhfb3hfaWQpOworCWVsc2UKKwkJeGlkID0gIGJlMTZfdG9fY3B1KGZoLT5maF9yeF9pZCk7CisKIAlpZiAoeGlkID49IElYR0JFX0ZDT0VfRERQX01BWCkKIAkJZ290byBkZHBfb3V0OwogCkBAIC01NTQsMyArNTYzLDE1OCBAQAogCQlmY29lLT5wb29sID0gTlVMTDsKIAl9CiB9CisKKy8qKgorICogaXhnYmVfZmNvZV9lbmFibGUgLSB0dXJuIG9uIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlCisgKiBAbmV0ZGV2OiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYKKyAqCisgKiBUdXJucyBvbiBGQ29FIG9mZmxvYWQgZmVhdHVyZSBpbiA4MjU5OS4KKyAqCisgKiBSZXR1cm5zIDogMCBpbmRpY2F0ZXMgc3VjY2VzcyBvciAtRUlOVkFMIG9uIGZhaWx1cmUKKyAqLworaW50IGl4Z2JlX2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJjID0gLUVJTlZBTDsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0NBUEFCTEUpKQorCQlnb3RvIG91dF9lbmFibGU7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkKKwkJZ290byBvdXRfZW5hYmxlOworCisJRFBSSU5USyhEUlYsIElORk8sICJFbmFibGluZyBGQ29FIG9mZmxvYWQgZmVhdHVyZXMuXG4iKTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7CisKKwlpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQ7CisJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXS5pbmRpY2VzID0gSVhHQkVfRkNSRVRBX1NJWkU7CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfQ1JDOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9GU087CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfTVRVOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0ZDT0VfQ1JDOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0ZTTzsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9GQ09FX01UVTsKKwluZXRkZXYtPmZjb2VfZGRwX3hpZCA9IElYR0JFX0ZDT0VfRERQX01BWCAtIDE7CisJbmV0ZGV2X2ZlYXR1cmVzX2NoYW5nZShuZXRkZXYpOworCisJaXhnYmVfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOworCXJjID0gMDsKKworb3V0X2VuYWJsZToKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogaXhnYmVfZmNvZV9kaXNhYmxlIC0gdHVybiBvZmYgRkNvRSBvZmZsb2FkIGZlYXR1cmUKKyAqIEBuZXRkZXY6IHRoZSBjb3JyZXNwb25kaW5nIG5ldGRldgorICoKKyAqIFR1cm5zIG9mZiBGQ29FIG9mZmxvYWQgZmVhdHVyZSBpbiA4MjU5OS4KKyAqCisgKiBSZXR1cm5zIDogMCBpbmRpY2F0ZXMgc3VjY2VzcyBvciAtRUlOVkFMIG9uIGZhaWx1cmUKKyAqLworaW50IGl4Z2JlX2Zjb2VfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCByYyA9IC1FSU5WQUw7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSkpCisJCWdvdG8gb3V0X2Rpc2FibGU7CisKKwlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSkKKwkJZ290byBvdXRfZGlzYWJsZTsKKworCURQUklOVEsoRFJWLCBJTkZPLCAiRGlzYWJsaW5nIEZDb0Ugb2ZmbG9hZCBmZWF0dXJlcy5cbiIpOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKKworCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19GQ09FX0VOQUJMRUQ7CisJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXS5pbmRpY2VzID0gMDsKKwluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0ZDT0VfQ1JDOworCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRlNPOworCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfRkNPRV9NVFU7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzICY9IH5ORVRJRl9GX0ZDT0VfQ1JDOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyAmPSB+TkVUSUZfRl9GU087CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzICY9IH5ORVRJRl9GX0ZDT0VfTVRVOworCW5ldGRldi0+ZmNvZV9kZHBfeGlkID0gMDsKKwluZXRkZXZfZmVhdHVyZXNfY2hhbmdlKG5ldGRldik7CisKKwlpeGdiZV9jbGVhbnVwX2Zjb2UoYWRhcHRlcik7CisKKwlpeGdiZV9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fb3BlbihuZXRkZXYpOworCXJjID0gMDsKKworb3V0X2Rpc2FibGU6CisJcmV0dXJuIHJjOworfQorCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorLyoqCisgKiBpeGdiZV9mY29lX2dldGFwcCAtIHJldHJpZXZlcyBjdXJyZW50IHVzZXIgcHJpb3JpdHkgYml0bWFwIGZvciBGQ29FCisgKiBAYWRhcHRlciA6IGl4Z2JlIGFkYXB0ZXIKKyAqCisgKiBGaW5kcyBvdXQgdGhlIGNvcnJlc3BvbmRpbmcgdXNlciBwcmlvcml0eSBiaXRtYXAgZnJvbSB0aGUgY3VycmVudAorICogdHJhZmZpYyBjbGFzcyB0aGF0IEZDb0UgYmVsb25ncyB0by4gUmV0dXJucyAwIGFzIHRoZSBpbnZhbGlkIHVzZXIKKyAqIHByaW9yaXR5IGJpdG1hcCB0byBpbmRpY2F0ZSBhbiBlcnJvci4KKyAqCisgKiBSZXR1cm5zIDogODAyLjFwIHVzZXIgcHJpb3JpdHkgYml0bWFwIGZvciBGQ29FCisgKi8KK3U4IGl4Z2JlX2Zjb2VfZ2V0YXBwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXU4IHRjOworCXUzMiB1cDJ0YzsKKworCXVwMnRjID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SVFRVUDJUQyk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9VU0VSX1BSSU9SSVRZOyBpKyspIHsKKwkJdGMgPSAodTgpKHVwMnRjID4+IChpICogSVhHQkVfUlRUVVAyVENfVVBfU0hJRlQpKTsKKwkJdGMgJj0gKE1BWF9UUkFGRklDX0NMQVNTIC0gMSk7CisJCWlmIChhZGFwdGVyLT5mY29lLnRjID09IHRjKQorCQkJcmV0dXJuIDEgPDwgaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9mY29lX3NldGFwcCAtIHNldHMgdGhlIHVzZXIgcHJpb3JpdHkgYml0bWFwIGZvciBGQ29FCisgKiBAYWRhcHRlciA6IGl4Z2JlIGFkYXB0ZXIKKyAqIEB1cCA6IDgwMi4xcCB1c2VyIHByaW9yaXR5IGJpdG1hcAorICoKKyAqIEZpbmRzIG91dCB0aGUgdHJhZmZpYyBjbGFzcyBmcm9tIHRoZSBpbnB1dCB1c2VyIHByaW9yaXR5CisgKiBiaXRtYXAgZm9yIEZDb0UuCisgKgorICogUmV0dXJucyA6IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgcmV0dXJucyAxIG9uIGVycm9yCisgKi8KK3U4IGl4Z2JlX2Zjb2Vfc2V0YXBwKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1OCB1cCkKK3sKKwlpbnQgaTsKKwl1MzIgdXAydGM7CisKKwkvKiB2YWxpZCB1c2VyIHByaW9yaXR5IGJpdG1hcCBtdXN0IG5vdCBiZSAwICovCisJaWYgKHVwKSB7CisJCS8qIGZyb20gdXNlciBwcmlvcml0eSB0byB0aGUgY29ycmVzcG9uZGluZyB0cmFmZmljIGNsYXNzICovCisJCXVwMnRjID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SVFRVUDJUQyk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfVVNFUl9QUklPUklUWTsgaSsrKSB7CisJCQlpZiAodXAgJiAoMSA8PCBpKSkgeworCQkJCXVwMnRjID4+PSAoaSAqIElYR0JFX1JUVFVQMlRDX1VQX1NISUZUKTsKKwkJCQl1cDJ0YyAmPSAoTUFYX1RSQUZGSUNfQ0xBU1MgLSAxKTsKKwkJCQlhZGFwdGVyLT5mY29lLnRjID0gKHU4KXVwMnRjOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oCmluZGV4IGM1YjUwMDIuLmI1ZGVlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmgKQEAgLTQ2LDYgKzQ2LDkgQEAKICNkZWZpbmUgSVhHQkVfRkNCVUZGX01JTgk0MDk2CS8qIDRLQiBtaW4gKi8KICNkZWZpbmUgSVhHQkVfRkNPRV9ERFBfTUFYCTUxMgkvKiA5IGJpdHMgeGlkICovCiAKKy8qIERlZmF1bHQgdHJhZmZpYyBjbGFzcyB0byB1c2UgZm9yIEZDb0UgKi8KKyNkZWZpbmUgSVhHQkVfRkNPRV9ERUZUQwkzCisKIC8qIGZjZXJyICovCiAjZGVmaW5lIElYR0JFX0ZDRVJSX0JBRENSQyAgICAgICAweDAwMTAwMDAwCiAKQEAgLTU5LDYgKzYyLDcgQEAKIH07CiAKIHN0cnVjdCBpeGdiZV9mY29lIHsKKwl1OCB0YzsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHBjaV9wb29sICpwb29sOwogCXN0cnVjdCBpeGdiZV9mY29lX2RkcCBkZHBbSVhHQkVfRkNPRV9ERFBfTUFYXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwppbmRleCA3N2IwMzgxLi40NWJmOGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCkBAIC00OSw3ICs0OSw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfc3RyaW5nW10gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVsKFIpIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTmV0d29yayBEcml2ZXIiOwogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMzQtazIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMzctazIiCiBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjaGFyIGl4Z2JlX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA5IEludGVsIENvcnBvcmF0aW9uLiI7CiAKQEAgLTc1LDYgKzc1LDggQEAKIAkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFUKSwKIAkgYm9hcmRfODI1OTggfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFUMiksCisJIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThFQl9DWDQpLAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4X0NYNF9EVUFMX1BPUlQpLApAQCAtMjAyNCw3ICsyMDI2LDcgQEAKIAllbHNlCiAJCWhscmVnMCB8PSBJWEdCRV9ITFJFRzBfSlVNQk9FTjsKICNpZmRlZiBJWEdCRV9GQ09FCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQpCisJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0ZDT0VfTVRVKQogCQlobHJlZzAgfD0gSVhHQkVfSExSRUcwX0pVTUJPRU47CiAjZW5kaWYKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0hMUkVHMCwgaGxyZWcwKTsKQEAgLTIwNTUsNyArMjA1Nyw3IEBACiAJCQlyeF9yaW5nLT5mbGFncyB8PSBJWEdCRV9SSU5HX1JYX1BTX0VOQUJMRUQ7CiAKICNpZmRlZiBJWEdCRV9GQ09FCi0JCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSB7CisJCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GQ09FX01UVSkgewogCQkJc3RydWN0IGl4Z2JlX3JpbmdfZmVhdHVyZSAqZjsKIAkJCWYgPSAmYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXTsKIAkJCWlmICgoaSA+PSBmLT5tYXNrKSAmJiAoaSA8IGYtPm1hc2sgKyBmLT5pbmRpY2VzKSkgewpAQCAtMjUxNCw3ICsyNTE2LDcgQEAKIHN0YXRpYyBpbnQgaXhnYmVfbm9uX3NmcF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXUzMiBhdXRvbmVnOwotCWJvb2wgbGlua191cCA9IGZhbHNlOworCWJvb2wgbmVnb3RpYXRpb24sIGxpbmtfdXAgPSBmYWxzZTsKIAl1MzIgcmV0ID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CiAKIAlpZiAoaHctPm1hYy5vcHMuY2hlY2tfbGluaykKQEAgLTI1MjQsMTMgKzI1MjYsMTIgQEAKIAkJZ290byBsaW5rX2NmZ19vdXQ7CiAKIAlpZiAoaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKQotCQlyZXQgPSBody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMoaHcsICZhdXRvbmVnLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmh3LT5tYWMuYXV0b25lZyk7CisJCXJldCA9IGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsICZuZWdvdGlhdGlvbik7CiAJaWYgKHJldCkKIAkJZ290byBsaW5rX2NmZ19vdXQ7CiAKLQlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKLQkJcmV0ID0gaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgbGlua191cCk7CisJaWYgKGh3LT5tYWMub3BzLnNldHVwX2xpbmspCisJCXJldCA9IGh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcsIGF1dG9uZWcsIG5lZ290aWF0aW9uLCBsaW5rX3VwKTsKIGxpbmtfY2ZnX291dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjYwNyw3ICsyNjA4LDcgQEAKIAogI2lmZGVmIElYR0JFX0ZDT0UKIAkvKiBhZGp1c3QgbWF4IGZyYW1lIHRvIGJlIGFibGUgdG8gZG8gYmFieSBqdW1ibyBmb3IgRkNvRSAqLwotCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkgJiYKKwlpZiAoKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0ZDT0VfTVRVKSAmJgogCSAgICAobWF4X2ZyYW1lIDwgSVhHQkVfRkNPRV9KVU1CT19GUkFNRV9TSVpFKSkKIAkJbWF4X2ZyYW1lID0gSVhHQkVfRkNPRV9KVU1CT19GUkFNRV9TSVpFOwogCkBAIC0zMTEyLDE0ICszMTEzLDE2IEBACiAKIAlmLT5pbmRpY2VzID0gbWluKChpbnQpbnVtX29ubGluZV9jcHVzKCksIGYtPmluZGljZXMpOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSB7CisJCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAxOworCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKLQkJCURQUklOVEsoUFJPQkUsIElORk8sICJGQ09FIGVuYWJsZWQgd2l0aCBEQ0IgXG4iKTsKKwkJCURQUklOVEsoUFJPQkUsIElORk8sICJGQ29FIGVuYWJsZWQgd2l0aCBEQ0IgXG4iKTsKIAkJCWl4Z2JlX3NldF9kY2JfcXVldWVzKGFkYXB0ZXIpOwogCQl9CiAjZW5kaWYKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgewotCQkJRFBSSU5USyhQUk9CRSwgSU5GTywgIkZDT0UgZW5hYmxlZCB3aXRoIFJTUyBcbiIpOworCQkJRFBSSU5USyhQUk9CRSwgSU5GTywgIkZDb0UgZW5hYmxlZCB3aXRoIFJTUyBcbiIpOwogCQkJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEUpIHx8CiAJCQkgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkpCiAJCQkJaXhnYmVfc2V0X2ZkaXJfcXVldWVzKGFkYXB0ZXIpOwpAQCAtMzEyOSw4ICszMTMyLDcgQEAKIAkJLyogYWRkaW5nIEZDb0UgcnggcmluZ3MgdG8gdGhlIGVuZCAqLwogCQlmLT5tYXNrID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKIAkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyArPSBmLT5pbmRpY2VzOwotCQlpZiAoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9PSAwKQotCQkJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IGYtPmluZGljZXM7CisJCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKz0gZi0+aW5kaWNlczsKIAogCQlyZXQgPSB0cnVlOwogCX0KQEAgLTMzNzAsMTUgKzMzNzIsMzYgQEAKICAqLwogc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NhY2hlX3JpbmdfZmNvZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgaSwgZmNvZV9pID0gMDsKKwlpbnQgaSwgZmNvZV9yeF9pID0gMCwgZmNvZV90eF9pID0gMDsKIAlib29sIHJldCA9IGZhbHNlOwogCXN0cnVjdCBpeGdiZV9yaW5nX2ZlYXR1cmUgKmYgPSAmYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXTsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSB7CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCQlzdHJ1Y3QgaXhnYmVfZmNvZSAqZmNvZSA9ICZhZGFwdGVyLT5mY29lOworCiAJCQlpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKTsKLQkJCWZjb2VfaSA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0ucmVnX2lkeCArIDE7CisJCQkvKiBmaW5kIG91dCBxdWV1ZXMgaW4gVEMgZm9yIEZDb0UgKi8KKwkJCWZjb2VfcnhfaSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZS0+dGNdLnJlZ19pZHggKyAxOworCQkJZmNvZV90eF9pID0gYWRhcHRlci0+dHhfcmluZ1tmY29lLT50Y10ucmVnX2lkeCArIDE7CisJCQkvKgorCQkJICogSW4gODI1OTksIHRoZSBudW1iZXIgb2YgVHggcXVldWVzIGZvciBlYWNoIHRyYWZmaWMKKwkJCSAqIGNsYXNzIGZvciBib3RoIDgtVEMgYW5kIDQtVEMgbW9kZXMgYXJlOgorCQkJICogVENzICA6IFRDMCBUQzEgVEMyIFRDMyBUQzQgVEM1IFRDNiBUQzcKKwkJCSAqIDggVENzOiAgMzIgIDMyICAxNiAgMTYgICA4ICAgOCAgIDggICA4CisJCQkgKiA0IFRDczogIDY0ICA2NCAgMzIgIDMyCisJCQkgKiBXZSBoYXZlIG1heCA4IHF1ZXVlcyBmb3IgRkNvRSwgd2hlcmUgOCB0aGUgaXMKKwkJCSAqIEZDb0UgcmVkaXJlY3Rpb24gdGFibGUgc2l6ZS4gSWYgVEMgZm9yIEZDb0UgaXMKKwkJCSAqIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUQzMsIHdlIGhhdmUgZW5vdWdoIHF1ZXVlcworCQkJICogdG8gYWRkIG1heCBvZiA4IHF1ZXVlcyBmb3IgRkNvRSwgc28gd2Ugc3RhcnQgRkNvRQorCQkJICogdHggZGVzY3JpcHRvciBmcm9tIHRoZSBuZXh0IG9uZSwgaS5lLiwgcmVnX2lkeCArIDEuCisJCQkgKiBJZiBUQyBmb3IgRkNvRSBpcyBhYm92ZSBUQzMsIGltcGx5aW5nIDggVEMgbW9kZSwKKwkJCSAqIGFuZCB3ZSBuZWVkIDggZm9yIEZDb0UsIHdlIGhhdmUgdG8gdGFrZSBhbGwgcXVldWVzCisJCQkgKiBpbiB0aGF0IHRyYWZmaWMgY2xhc3MgZm9yIEZDb0UuCisJCQkgKi8KKwkJCWlmICgoZi0+aW5kaWNlcyA9PSBJWEdCRV9GQ1JFVEFfU0laRSkgJiYgKGZjb2UtPnRjID4gMykpCisJCQkJZmNvZV90eF9pLS07CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfSVhHQkVfRENCICovCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpIHsKQEAgLTMzODgsMTAgKzM0MTEsMTMgQEAKIAkJCWVsc2UKIAkJCQlpeGdiZV9jYWNoZV9yaW5nX3JzcyhhZGFwdGVyKTsKIAotCQkJZmNvZV9pID0gZi0+bWFzazsKKwkJCWZjb2VfcnhfaSA9IGYtPm1hc2s7CisJCQlmY29lX3R4X2kgPSBmLT5tYXNrOwogCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBmLT5pbmRpY2VzOyBpKyssIGZjb2VfaSsrKQotCQkJYWRhcHRlci0+cnhfcmluZ1tmLT5tYXNrICsgaV0ucmVnX2lkeCA9IGZjb2VfaTsKKwkJZm9yIChpID0gMDsgaSA8IGYtPmluZGljZXM7IGkrKywgZmNvZV9yeF9pKyssIGZjb2VfdHhfaSsrKSB7CisJCQlhZGFwdGVyLT5yeF9yaW5nW2YtPm1hc2sgKyBpXS5yZWdfaWR4ID0gZmNvZV9yeF9pOworCQkJYWRhcHRlci0+dHhfcmluZ1tmLT5tYXNrICsgaV0ucmVnX2lkeCA9IGZjb2VfdHhfaTsKKwkJfQogCQlyZXQgPSB0cnVlOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMzYxMyw3ICszNjM5LDcgQEAKIAl9CiB9CiAKLXZvaWQgaXhnYmVfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCBpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19NU0lYX0VOQUJMRUQ7CkBAIC0zNzk5LDYgKzM4MjUsOCBAQAogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRTsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEOwogCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLmluZGljZXMgPSAwOworCQkvKiBEZWZhdWx0IHRyYWZmaWMgY2xhc3MgdG8gdXNlIGZvciBGQ29FICovCisJCWFkYXB0ZXItPmZjb2UudGMgPSBJWEdCRV9GQ09FX0RFRlRDOwogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIAl9CiAKQEAgLTQ1MTMsMTQgKzQ1NDEsMTQgQEAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGF1dG9uZWc7CisJYm9vbCBuZWdvdGlhdGlvbjsKIAogCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSzsKIAlhdXRvbmVnID0gaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQ7CiAJaWYgKCghYXV0b25lZykgJiYgKGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcykpCi0JCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKLQlpZiAoaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZCkKLQkJaHctPm1hYy5vcHMuc2V0dXBfbGlua19zcGVlZChodywgYXV0b25lZywgdHJ1ZSwgdHJ1ZSk7CisJCWh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsICZuZWdvdGlhdGlvbik7CisJaWYgKGh3LT5tYWMub3BzLnNldHVwX2xpbmspCisJCWh3LT5tYWMub3BzLnNldHVwX2xpbmsoaHcsIGF1dG9uZWcsIG5lZ290aWF0aW9uLCB0cnVlKTsKIAlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEU7CiAJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSzsKIH0KQEAgLTQ2MzQsMTMgKzQ2NjIsMTMgQEAKIAkJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKIAkJCQl1MzIgbWZsY24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUZMQ04pOwogCQkJCXUzMiBmY2NmZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7Ci0JCQkJZmxvd19yeCA9IChtZmxjbiAmIElYR0JFX01GTENOX1JGQ0UpOwotCQkJCWZsb3dfdHggPSAoZmNjZmcgJiBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCk7CisJCQkJZmxvd19yeCA9ICEhKG1mbGNuICYgSVhHQkVfTUZMQ05fUkZDRSk7CisJCQkJZmxvd190eCA9ICEhKGZjY2ZnICYgSVhHQkVfRkNDRkdfVEZDRV84MDJfM1gpOwogCQkJfSBlbHNlIHsKIAkJCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOwogCQkJCXUzMiBybWNzID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotCQkJCWZsb3dfcnggPSAoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKLQkJCQlmbG93X3R4ID0gKHJtY3MgJiBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKwkJCQlmbG93X3J4ID0gISEoZnJjdGwgJiBJWEdCRV9GQ1RSTF9SRkNFKTsKKwkJCQlmbG93X3R4ID0gISEocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOwogCQkJfQogCiAJCQlwcmludGsoS0VSTl9JTkZPICJpeGdiZTogJXMgTklDIExpbmsgaXMgVXAgJXMsICIKQEAgLTUxMDAsMTIgKzUxMjgsMTMgQEAKIAkJcmV0dXJuIHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpCi0JCXJldHVybiAwOyAgLyogQWxsIHRyYWZmaWMgc2hvdWxkIGRlZmF1bHQgdG8gY2xhc3MgMCAqLworCQlyZXR1cm4gKHNrYi0+dmxhbl90Y2kgJiBJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSykgPj4gMTM7CiAKIAlyZXR1cm4gc2tiX3R4X2hhc2goZGV2LCBza2IpOwogfQogCi1zdGF0aWMgaW50IGl4Z2JlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpeGdiZV94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nOwpAQCAtNTEzOSw5ICs1MTY4LDE1IEBACiAJdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKIAogCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZDT0VfRU5BQkxFRCkgJiYKLQkgICAgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRkNPRSkpKQorCSAgICAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GQ09FKSkpIHsKIAkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfRkNPRTsKLQorI2lmZGVmIElYR0JFX0ZDT0UKKwkJcl9pZHggPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJCXJfaWR4ICY9IChhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0ZDT0VdLmluZGljZXMgLSAxKTsKKwkJcl9pZHggKz0gYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9GQ09FXS5tYXNrOworCQl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdOworI2VuZGlmCisJfQogCS8qIGZvdXIgdGhpbmdzIGNhbiBjYXVzZSB1cyB0byBuZWVkIGEgY29udGV4dCBkZXNjcmlwdG9yICovCiAJaWYgKHNrYl9pc19nc28oc2tiKSB8fAogCSAgICAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgfHwKQEAgLTUzNzQsNiArNTQwOSw4IEBACiAjaWZkZWYgSVhHQkVfRkNPRQogCS5uZG9fZmNvZV9kZHBfc2V0dXAgPSBpeGdiZV9mY29lX2RkcF9nZXQsCiAJLm5kb19mY29lX2RkcF9kb25lID0gaXhnYmVfZmNvZV9kZHBfcHV0LAorCS5uZG9fZmNvZV9lbmFibGUgPSBpeGdiZV9mY29lX2VuYWJsZSwKKwkubmRvX2Zjb2VfZGlzYWJsZSA9IGl4Z2JlX2Zjb2VfZGlzYWJsZSwKICNlbmRpZiAvKiBJWEdCRV9GQ09FICovCiB9OwogCkBAIC01NTczLDYgKzU2MTAsNyBAQAogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCBiZTkwZWI0Li44YmE5MGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCkBAIC00Miw2ICs0Miw3IEBACiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUIDB4MTBDNwogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThFQl9TRlBfTE9NICAgICAweDEwREIKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4QVQgICAgICAgICAgICAgMHgxMEM4CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEFUMiAgICAgICAgICAgIDB4MTUwQgogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThFQl9DWDQgICAgICAgICAweDEwREQKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X0NYNF9EVUFMX1BPUlQgMHgxMEVDCiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OF9EQV9EVUFMX1BPUlQgIDB4MTBGMQpAQCAtMTkwMSwyNyArMTkwMiw2IEBACiAjZGVmaW5lIElYR0JFX0ZESVJfSU5JVF9ET05FX1BPTEwgICAgICAgICAgICAgICAxMAogI2RlZmluZSBJWEdCRV9GRElSQ01EX0NNRF9QT0xMICAgICAgICAgICAgICAgICAgMTAKIAotLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIExlZ2FjeSAqLwotc3RydWN0IGl4Z2JlX2xlZ2FjeV90eF9kZXNjIHsKLQl1NjQgYnVmZmVyX2FkZHI7ICAgICAgIC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqLwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgbGVuZ3RoOyAgICAvKiBEYXRhIGJ1ZmZlciBsZW5ndGggKi8KLQkJCXU4IGNzbzsgICAgICAgICAgIC8qIENoZWNrc3VtIG9mZnNldCAqLwotCQkJdTggY21kOyAgICAgICAgICAgLyogRGVzY3JpcHRvciBjb250cm9sICovCi0JCX0gZmxhZ3M7Ci0JfSBsb3dlcjsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBkYXRhOwotCQlzdHJ1Y3QgewotCQkJdTggc3RhdHVzOyAgICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KLQkJCXU4IGNzczsgICAgICAgICAgIC8qIENoZWNrc3VtIHN0YXJ0ICovCi0JCQlfX2xlMTYgdmxhbjsKLQkJfSBmaWVsZHM7Ci0JfSB1cHBlcjsKLX07Ci0KIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwogdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgewogCXN0cnVjdCB7CkBAIC0xOTM2LDE2ICsxOTE2LDYgQEAKIAl9IHdiOwogfTsKIAotLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gTGVnYWN5ICovCi1zdHJ1Y3QgaXhnYmVfbGVnYWN5X3J4X2Rlc2MgewotCV9fbGU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovCi0JX19sZTE2IGxlbmd0aDsgICAgICAvKiBMZW5ndGggb2YgZGF0YSBETUFlZCBpbnRvIGRhdGEgYnVmZmVyICovCi0JX19sZTE2IGNzdW07ICAgICAgICAvKiBQYWNrZXQgY2hlY2tzdW0gKi8KLQl1OCBzdGF0dXM7ICAgICAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JdTggZXJyb3JzOyAgICAgICAgICAvKiBEZXNjcmlwdG9yIEVycm9ycyAqLwotCV9fbGUxNiB2bGFuOwotfTsKLQogLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gQWR2YW5jZWQgKi8KIHVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjIHsKIAlzdHJ1Y3QgewpAQCAtMjM2Miw5ICsyMzMyLDcgQEAKIAlzMzIgKCplbmFibGVfcnhfZG1hKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyKTsKIAogCS8qIExpbmsgKi8KLQlzMzIgKCpzZXR1cF9saW5rKShzdHJ1Y3QgaXhnYmVfaHcgKik7Ci0JczMyICgqc2V0dXBfbGlua19zcGVlZCkoc3RydWN0IGl4Z2JlX2h3ICosIGl4Z2JlX2xpbmtfc3BlZWQsIGJvb2wsCi0JICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCk7CisJczMyICgqc2V0dXBfbGluaykoc3RydWN0IGl4Z2JlX2h3ICosIGl4Z2JlX2xpbmtfc3BlZWQsIGJvb2wsIGJvb2wpOwogCXMzMiAoKmNoZWNrX2xpbmspKHN0cnVjdCBpeGdiZV9odyAqLCBpeGdiZV9saW5rX3NwZWVkICosIGJvb2wgKiwgYm9vbCk7CiAJczMyICgqZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKShzdHJ1Y3QgaXhnYmVfaHcgKiwgaXhnYmVfbGlua19zcGVlZCAqLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqKTsKQEAgLTI0MzYsOCArMjQwNCw2IEBACiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2F1dG9jOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ19hdXRvYzI7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2xpbmtfc2V0dGluZ3Nfc3RvcmVkOwotCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZzsKLQlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfc3VjY2VlZGVkOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b3RyeV9yZXN0YXJ0OwogfTsKIApAQCAtMjQ1Miw3ICsyNDE4LDYgQEAKIAllbnVtIGl4Z2JlX21lZGlhX3R5cGUgICAgICAgICAgIG1lZGlhX3R5cGU7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldF9kaXNhYmxlOwogCWl4Z2JlX2F1dG9uZWdfYWR2ZXJ0aXNlZCAgICAgICAgYXV0b25lZ19hZHZlcnRpc2VkOwotCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOwogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcjsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCmluZGV4IDkyZmI4MjMuLjEyNzI0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYwpAQCAtNDYsNyArNDYsNyBAQAogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IFBBR0VfU0laRSkpIHsKIAkJLyogQEBAIENvdW50IGRyb3BzLiAgKi8KIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAllbnRyeSA9IHR4X3BvaW50ZXI7CkBAIC03MCw3ICs3MCw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKaW5kZXggMmYyODYwOS4uNmU1YjNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc29uaWNfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzb25pY19wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkOwogCXVuc2lnbmVkIGludCBzaWxpY29uX3JldmlzaW9uOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIAlyZXR1cm4gMDsKIG91dDoKLQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU09OSUNfTUVNX1NJWkUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU09OSUNfTUVNX1NJWkUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIxMSw3ICsyMTEsNyBAQAogICogUHJvYmUgZm9yIGEgU09OSUMgZXRoZXJuZXQgY29udHJvbGxlciBvbiBhIE1pcHMgSmF6eiBib2FyZC4KICAqIEFjdHVhbGx5IHByb2JpbmcgaXMgc3VwZXJmbHVvdXMgYnV0IHdlJ3JlIHBhcmFub2lkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBqYXp6X3NvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBqYXp6X3NvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiAKIG91dDE6Ci0JcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFNPTklDX01FTV9TSVpFKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFNPTklDX01FTV9TSVpFKTsKIG91dDoKIAlmcmVlX25ldGRldihkZXYpOwogCkBAIC0yNjksNyArMjY5LDcgQEAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCWRtYV9mcmVlX2NvaGVyZW50KGxwLT5kZXZpY2UsIFNJWkVPRl9TT05JQ19ERVNDICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSksCiAJICAgICAgICAgICAgICAgICAgbHAtPmRlc2NyaXB0b3JzLCBscC0+ZGVzY3JpcHRvcnNfbGFkZHIpOwotCXJlbGVhc2VfcmVnaW9uIChkZXYtPmJhc2VfYWRkciwgU09OSUNfTUVNX1NJWkUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU09OSUNfTUVNX1NJWkUpOwogCWZyZWVfbmV0ZGV2KGRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ptZS5jIGIvZHJpdmVycy9uZXQvam1lLmMKaW5kZXggMWUzYzYzZC4uMWQyYTMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvam1lLmMKKysrIGIvZHJpdmVycy9uZXQvam1lLmMKQEAgLTMyMiwyMCArMzIyLDYgQEAKIAlqd3JpdGUzMmYoam1lLCBKTUVfSUVOQywgSU5UUl9FTkFCTEUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWptZV9lbmFibGVfc2hhZG93KHN0cnVjdCBqbWVfYWRhcHRlciAqam1lKQotewotCWp3cml0ZTMyKGptZSwKLQkJIEpNRV9TSEJBX0xPLAotCQkgKCh1MzIpam1lLT5zaGFkb3dfZG1hICYgfigodTMyKTB4MUYpKSB8IFNIQkFfUE9TVEVOKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1qbWVfZGlzYWJsZV9zaGFkb3coc3RydWN0IGptZV9hZGFwdGVyICpqbWUpCi17Ci0JandyaXRlMzIoam1lLCBKTUVfU0hCQV9MTywgMHgwKTsKLX0KLQogc3RhdGljIHUzMgogam1lX2xpbmtzdGF0X2Zyb21fcGh5KHN0cnVjdCBqbWVfYWRhcHRlciAqam1lKQogewpAQCAtNTIyLDEyICs1MDgsOCBAQAogCQkJCSAgICYodHhyaW5nLT5kbWFhbGxvYyksCiAJCQkJICAgR0ZQX0FUT01JQyk7CiAKLQlpZiAoIXR4cmluZy0+YWxsb2MpIHsKLQkJdHhyaW5nLT5kZXNjID0gTlVMTDsKLQkJdHhyaW5nLT5kbWFhbGxvYyA9IDA7Ci0JCXR4cmluZy0+ZG1hID0gMDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmICghdHhyaW5nLT5hbGxvYykKKwkJZ290byBlcnJfc2V0X251bGw7CiAKIAkvKgogCSAqIDE2IEJ5dGVzIGFsaWduCkBAIC01MzksNiArNTIxLDExIEBACiAJYXRvbWljX3NldCgmdHhyaW5nLT5uZXh0X3RvX2NsZWFuLCAwKTsKIAlhdG9taWNfc2V0KCZ0eHJpbmctPm5yX2ZyZWUsIGptZS0+dHhfcmluZ19zaXplKTsKIAorCXR4cmluZy0+YnVmaW5mCQk9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqbWVfYnVmZmVyX2luZm8pICoKKwkJCQkJam1lLT50eF9yaW5nX3NpemUsIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseSghKHR4cmluZy0+YnVmaW5mKSkpCisJCWdvdG8gZXJyX2ZyZWVfdHhyaW5nOworCiAJLyoKIAkgKiBJbml0aWFsaXplIFRyYW5zbWl0IERlc2NyaXB0b3JzCiAJICovCkBAIC01NDcsNiArNTM0LDIwIEBACiAJCXNpemVvZihzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvKSAqIGptZS0+dHhfcmluZ19zaXplKTsKIAogCXJldHVybiAwOworCitlcnJfZnJlZV90eHJpbmc6CisJZG1hX2ZyZWVfY29oZXJlbnQoJihqbWUtPnBkZXYtPmRldiksCisJCQkgIFRYX1JJTkdfQUxMT0NfU0laRShqbWUtPnR4X3Jpbmdfc2l6ZSksCisJCQkgIHR4cmluZy0+YWxsb2MsCisJCQkgIHR4cmluZy0+ZG1hYWxsb2MpOworCitlcnJfc2V0X251bGw6CisJdHhyaW5nLT5kZXNjID0gTlVMTDsKKwl0eHJpbmctPmRtYWFsbG9jID0gMDsKKwl0eHJpbmctPmRtYSA9IDA7CisJdHhyaW5nLT5idWZpbmYgPSBOVUxMOworCisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01NTQsMTkgKzU1NSwyMiBAQAogewogCWludCBpOwogCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gJihqbWUtPnR4cmluZ1swXSk7Ci0Jc3RydWN0IGptZV9idWZmZXJfaW5mbyAqdHhiaSA9IHR4cmluZy0+YnVmaW5mOworCXN0cnVjdCBqbWVfYnVmZmVyX2luZm8gKnR4Ymk7CiAKIAlpZiAodHhyaW5nLT5hbGxvYykgewotCQlmb3IgKGkgPSAwIDsgaSA8IGptZS0+dHhfcmluZ19zaXplIDsgKytpKSB7Ci0JCQl0eGJpID0gdHhyaW5nLT5idWZpbmYgKyBpOwotCQkJaWYgKHR4YmktPnNrYikgewotCQkJCWRldl9rZnJlZV9za2IodHhiaS0+c2tiKTsKLQkJCQl0eGJpLT5za2IgPSBOVUxMOworCQlpZiAodHhyaW5nLT5idWZpbmYpIHsKKwkJCWZvciAoaSA9IDAgOyBpIDwgam1lLT50eF9yaW5nX3NpemUgOyArK2kpIHsKKwkJCQl0eGJpID0gdHhyaW5nLT5idWZpbmYgKyBpOworCQkJCWlmICh0eGJpLT5za2IpIHsKKwkJCQkJZGV2X2tmcmVlX3NrYih0eGJpLT5za2IpOworCQkJCQl0eGJpLT5za2IgPSBOVUxMOworCQkJCX0KKwkJCQl0eGJpLT5tYXBwaW5nCQk9IDA7CisJCQkJdHhiaS0+bGVuCQk9IDA7CisJCQkJdHhiaS0+bnJfZGVzYwkJPSAwOworCQkJCXR4YmktPnN0YXJ0X3htaXQJPSAwOwogCQkJfQotCQkJdHhiaS0+bWFwcGluZwkJPSAwOwotCQkJdHhiaS0+bGVuCQk9IDA7Ci0JCQl0eGJpLT5ucl9kZXNjCQk9IDA7Ci0JCQl0eGJpLT5zdGFydF94bWl0CT0gMDsKKwkJCWtmcmVlKHR4cmluZy0+YnVmaW5mKTsKIAkJfQogCiAJCWRtYV9mcmVlX2NvaGVyZW50KCYoam1lLT5wZGV2LT5kZXYpLApAQCAtNTc4LDExICs1ODIsMTEgQEAKIAkJdHhyaW5nLT5kZXNjCQk9IE5VTEw7CiAJCXR4cmluZy0+ZG1hYWxsb2MJPSAwOwogCQl0eHJpbmctPmRtYQkJPSAwOworCQl0eHJpbmctPmJ1ZmluZgkJPSBOVUxMOwogCX0KIAl0eHJpbmctPm5leHRfdG9fdXNlCT0gMDsKIAlhdG9taWNfc2V0KCZ0eHJpbmctPm5leHRfdG9fY2xlYW4sIDApOwogCWF0b21pY19zZXQoJnR4cmluZy0+bnJfZnJlZSwgMCk7Ci0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC02NTMsNyArNjU3LDcgQEAKIHN0YXRpYyB2b2lkCiBqbWVfc2V0X2NsZWFuX3J4ZGVzYyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwgaW50IGkpCiB7Ci0Jc3RydWN0IGptZV9yaW5nICpyeHJpbmcgPSBqbWUtPnJ4cmluZzsKKwlzdHJ1Y3Qgam1lX3JpbmcgKnJ4cmluZyA9ICYoam1lLT5yeHJpbmdbMF0pOwogCXJlZ2lzdGVyIHN0cnVjdCByeGRlc2MgKnJ4ZGVzYyA9IHJ4cmluZy0+ZGVzYzsKIAlzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvICpyeGJpID0gcnhyaW5nLT5idWZpbmY7CiAJcnhkZXNjICs9IGk7CkBAIC03MjAsOCArNzI0LDExIEBACiAJc3RydWN0IGptZV9yaW5nICpyeHJpbmcgPSAmKGptZS0+cnhyaW5nWzBdKTsKIAogCWlmIChyeHJpbmctPmFsbG9jKSB7Ci0JCWZvciAoaSA9IDAgOyBpIDwgam1lLT5yeF9yaW5nX3NpemUgOyArK2kpCi0JCQlqbWVfZnJlZV9yeF9idWYoam1lLCBpKTsKKwkJaWYgKHJ4cmluZy0+YnVmaW5mKSB7CisJCQlmb3IgKGkgPSAwIDsgaSA8IGptZS0+cnhfcmluZ19zaXplIDsgKytpKQorCQkJCWptZV9mcmVlX3J4X2J1ZihqbWUsIGkpOworCQkJa2ZyZWUocnhyaW5nLT5idWZpbmYpOworCQl9CiAKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJihqbWUtPnBkZXYtPmRldiksCiAJCQkJICBSWF9SSU5HX0FMTE9DX1NJWkUoam1lLT5yeF9yaW5nX3NpemUpLApAQCAtNzMxLDYgKzczOCw3IEBACiAJCXJ4cmluZy0+ZGVzYyAgICAgPSBOVUxMOwogCQlyeHJpbmctPmRtYWFsbG9jID0gMDsKIAkJcnhyaW5nLT5kbWEgICAgICA9IDA7CisJCXJ4cmluZy0+YnVmaW5mICAgPSBOVUxMOwogCX0KIAlyeHJpbmctPm5leHRfdG9fdXNlICAgPSAwOwogCWF0b21pY19zZXQoJnJ4cmluZy0+bmV4dF90b19jbGVhbiwgMCk7CkBAIC03NDYsMTIgKzc1NCw4IEBACiAJCQkJICAgUlhfUklOR19BTExPQ19TSVpFKGptZS0+cnhfcmluZ19zaXplKSwKIAkJCQkgICAmKHJ4cmluZy0+ZG1hYWxsb2MpLAogCQkJCSAgIEdGUF9BVE9NSUMpOwotCWlmICghcnhyaW5nLT5hbGxvYykgewotCQlyeHJpbmctPmRlc2MgPSBOVUxMOwotCQlyeHJpbmctPmRtYWFsbG9jID0gMDsKLQkJcnhyaW5nLT5kbWEgPSAwOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCFyeHJpbmctPmFsbG9jKQorCQlnb3RvIGVycl9zZXRfbnVsbDsKIAogCS8qCiAJICogMTYgQnl0ZXMgYWxpZ24KQEAgLTc2Miw5ICs3NjYsMTYgQEAKIAlyeHJpbmctPm5leHRfdG9fdXNlCT0gMDsKIAlhdG9taWNfc2V0KCZyeHJpbmctPm5leHRfdG9fY2xlYW4sIDApOwogCisJcnhyaW5nLT5idWZpbmYJCT0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGptZV9idWZmZXJfaW5mbykgKgorCQkJCQlqbWUtPnJ4X3Jpbmdfc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCEocnhyaW5nLT5idWZpbmYpKSkKKwkJZ290byBlcnJfZnJlZV9yeHJpbmc7CisKIAkvKgogCSAqIEluaXRpYWxsaXplIFJlY2VpdmUgRGVzY3JpcHRvcnMKIAkgKi8KKwltZW1zZXQocnhyaW5nLT5idWZpbmYsIDAsCisJCXNpemVvZihzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvKSAqIGptZS0+cnhfcmluZ19zaXplKTsKIAlmb3IgKGkgPSAwIDsgaSA8IGptZS0+cnhfcmluZ19zaXplIDsgKytpKSB7CiAJCWlmICh1bmxpa2VseShqbWVfbWFrZV9uZXdfcnhfYnVmKGptZSwgaSkpKSB7CiAJCQlqbWVfZnJlZV9yeF9yZXNvdXJjZXMoam1lKTsKQEAgLTc3NSw2ICs3ODYsMTkgQEAKIAl9CiAKIAlyZXR1cm4gMDsKKworZXJyX2ZyZWVfcnhyaW5nOgorCWRtYV9mcmVlX2NvaGVyZW50KCYoam1lLT5wZGV2LT5kZXYpLAorCQkJICBSWF9SSU5HX0FMTE9DX1NJWkUoam1lLT5yeF9yaW5nX3NpemUpLAorCQkJICByeHJpbmctPmFsbG9jLAorCQkJICByeHJpbmctPmRtYWFsbG9jKTsKK2Vycl9zZXRfbnVsbDoKKwlyeHJpbmctPmRlc2MgPSBOVUxMOworCXJ4cmluZy0+ZG1hYWxsb2MgPSAwOworCXJ4cmluZy0+ZG1hID0gMDsKKwlyeHJpbmctPmJ1ZmluZiA9IE5VTEw7CisKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC03OTAsOSArODE0LDkgQEAKIAkvKgogCSAqIFNldHVwIFJYIERNQSBCYXNzIEFkZHJlc3MKIAkgKi8KLQlqd3JpdGUzMihqbWUsIEpNRV9SWERCQV9MTywgKF9fdTY0KWptZS0+cnhyaW5nWzBdLmRtYSAmIDB4RkZGRkZGRkZVTCk7CisJandyaXRlMzIoam1lLCBKTUVfUlhEQkFfTE8sIChfX3U2NCkoam1lLT5yeHJpbmdbMF0uZG1hKSAmIDB4RkZGRkZGRkZVTCk7CiAJandyaXRlMzIoam1lLCBKTUVfUlhEQkFfSEksIChfX3U2NCkoam1lLT5yeHJpbmdbMF0uZG1hKSA+PiAzMik7Ci0JandyaXRlMzIoam1lLCBKTUVfUlhOREEsIChfX3U2NClqbWUtPnJ4cmluZ1swXS5kbWEgJiAweEZGRkZGRkZGVUwpOworCWp3cml0ZTMyKGptZSwgSk1FX1JYTkRBLCAoX191NjQpKGptZS0+cnhyaW5nWzBdLmRtYSkgJiAweEZGRkZGRkZGVUwpOwogCiAJLyoKIAkgKiBTZXR1cCBSWCBEZXNjcmlwdG9yIENvdW50CkBAIC04NTYsMjcgKzg4MCwyNyBAQAogCWlmICghKGZsYWdzICYgKFJYV0JGTEFHX1RDUE9OIHwgUlhXQkZMQUdfVURQT04gfCBSWFdCRkxBR19JUFY0KSkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmICh1bmxpa2VseSghKGZsYWdzICYgUlhXQkZMQUdfTUYpICYmCi0JKGZsYWdzICYgUlhXQkZMQUdfVENQT04pICYmICEoZmxhZ3MgJiBSWFdCRkxBR19UQ1BDUykpKSB7Ci0JCW1zZ19yeF9lcnIoam1lLCAiVENQIENoZWNrc3VtIGVycm9yLlxuIik7Ci0JCWdvdG8gb3V0X3N1bWVycjsKKwlpZiAodW5saWtlbHkoKGZsYWdzICYgKFJYV0JGTEFHX01GIHwgUlhXQkZMQUdfVENQT04gfCBSWFdCRkxBR19UQ1BDUykpCisJCQk9PSBSWFdCRkxBR19UQ1BPTikpIHsKKwkJaWYgKGZsYWdzICYgUlhXQkZMQUdfSVBWNCkKKwkJCW1zZ19yeF9lcnIoam1lLCAiVENQIENoZWNrc3VtIGVycm9yXG4iKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCWlmICh1bmxpa2VseSghKGZsYWdzICYgUlhXQkZMQUdfTUYpICYmCi0JKGZsYWdzICYgUlhXQkZMQUdfVURQT04pICYmICEoZmxhZ3MgJiBSWFdCRkxBR19VRFBDUykpKSB7Ci0JCW1zZ19yeF9lcnIoam1lLCAiVURQIENoZWNrc3VtIGVycm9yLlxuIik7Ci0JCWdvdG8gb3V0X3N1bWVycjsKKwlpZiAodW5saWtlbHkoKGZsYWdzICYgKFJYV0JGTEFHX01GIHwgUlhXQkZMQUdfVURQT04gfCBSWFdCRkxBR19VRFBDUykpCisJCQk9PSBSWFdCRkxBR19VRFBPTikpIHsKKwkJaWYgKGZsYWdzICYgUlhXQkZMQUdfSVBWNCkKKwkJCW1zZ19yeF9lcnIoam1lLCAiVURQIENoZWNrc3VtIGVycm9yLlxuIik7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpZiAodW5saWtlbHkoKGZsYWdzICYgUlhXQkZMQUdfSVBWNCkgJiYgIShmbGFncyAmIFJYV0JGTEFHX0lQQ1MpKSkgeworCWlmICh1bmxpa2VseSgoZmxhZ3MgJiAoUlhXQkZMQUdfSVBWNCB8IFJYV0JGTEFHX0lQQ1MpKQorCQkJPT0gUlhXQkZMQUdfSVBWNCkpIHsKIAkJbXNnX3J4X2VycihqbWUsICJJUHY0IENoZWNrc3VtIGVycm9yLlxuIik7Ci0JCWdvdG8gb3V0X3N1bWVycjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXJldHVybiB0cnVlOwotCi1vdXRfc3VtZXJyOgotCXJldHVybiBmYWxzZTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEyOTYsNyArMTMyMCw3IEBACiBzdGF0aWMgdm9pZAogam1lX3dha2VfcXVldWVfaWZfc3RvcHBlZChzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSkKIHsKLQlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9IGptZS0+dHhyaW5nOworCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gJihqbWUtPnR4cmluZ1swXSk7CiAKIAlzbXBfd21iKCk7CiAJaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQoam1lLT5kZXYpICYmCkBAIC0xNDgzLDEyICsxNTA3LDcgQEAKIAlzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTMyIGludHJzdGF0OwogCi0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGptZS0+cGRldiwKLQkJCQkgICAgam1lLT5zaGFkb3dfZG1hLAotCQkJCSAgICBzaXplb2YodTMyKSAqIFNIQURPV19SRUdfTlIsCi0JCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaW50cnN0YXQgPSBqbWUtPnNoYWRvd19yZWdzW1NIQURPV19JRVZFXTsKLQlqbWUtPnNoYWRvd19yZWdzW1NIQURPV19JRVZFXSA9IDA7CisJaW50cnN0YXQgPSBqcmVhZDMyKGptZSwgSk1FX0lFVkUpOwogCiAJam1lX2ludHJfbXNpKGptZSwgaW50cnN0YXQpOwogCkBAIC0xNTY2LDYgKzE1ODUsNyBAQAogCWptZV9jbGVhcl9wbShqbWUpOwogCUpNRV9OQVBJX0VOQUJMRShqbWUpOwogCisJdGFza2xldF9lbmFibGUoJmptZS0+bGlua2NoX3Rhc2spOwogCXRhc2tsZXRfZW5hYmxlKCZqbWUtPnR4Y2xlYW5fdGFzayk7CiAJdGFza2xldF9oaV9lbmFibGUoJmptZS0+cnhjbGVhbl90YXNrKTsKIAl0YXNrbGV0X2hpX2VuYWJsZSgmam1lLT5yeGVtcHR5X3Rhc2spOwpAQCAtMTU3NCw3ICsxNTk0LDYgQEAKIAlpZiAocmMpCiAJCWdvdG8gZXJyX291dDsKIAotCWptZV9lbmFibGVfc2hhZG93KGptZSk7CiAJam1lX3N0YXJ0X2lycShqbWUpOwogCiAJaWYgKHRlc3RfYml0KEpNRV9GTEFHX1NTRVQsICZqbWUtPmZsYWdzKSkKQEAgLTE2NDIsMTUgKzE2NjEsMTQgQEAKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCiAJam1lX3N0b3BfaXJxKGptZSk7Ci0Jam1lX2Rpc2FibGVfc2hhZG93KGptZSk7CiAJam1lX2ZyZWVfaXJxKGptZSk7CiAKIAlKTUVfTkFQSV9ESVNBQkxFKGptZSk7CiAKLQl0YXNrbGV0X2tpbGwoJmptZS0+bGlua2NoX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmam1lLT50eGNsZWFuX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmam1lLT5yeGNsZWFuX3Rhc2spOwotCXRhc2tsZXRfa2lsbCgmam1lLT5yeGVtcHR5X3Rhc2spOworCXRhc2tsZXRfZGlzYWJsZSgmam1lLT5saW5rY2hfdGFzayk7CisJdGFza2xldF9kaXNhYmxlKCZqbWUtPnR4Y2xlYW5fdGFzayk7CisJdGFza2xldF9kaXNhYmxlKCZqbWUtPnJ4Y2xlYW5fdGFzayk7CisJdGFza2xldF9kaXNhYmxlKCZqbWUtPnJ4ZW1wdHlfdGFzayk7CiAKIAlqbWVfcmVzZXRfZ2hjX3NwZWVkKGptZSk7CiAJam1lX2Rpc2FibGVfcnhfZW5naW5lKGptZSk7CkBAIC0xNjY4LDcgKzE2ODYsNyBAQAogam1lX2FsbG9jX3R4ZGVzYyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwKIAkJCXN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSBqbWUtPnR4cmluZzsKKwlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9ICYoam1lLT50eHJpbmdbMF0pOwogCWludCBpZHgsIG5yX2FsbG9jLCBtYXNrID0gam1lLT50eF9yaW5nX21hc2s7CiAKIAlpZHggPSB0eHJpbmctPm5leHRfdG9fdXNlOwpAQCAtMTcyMiw3ICsxNzQwLDcgQEAKIHN0YXRpYyB2b2lkCiBqbWVfbWFwX3R4X3NrYihzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkeCkKIHsKLQlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9IGptZS0+dHhyaW5nOworCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gJihqbWUtPnR4cmluZ1swXSk7CiAJc3RydWN0IHR4ZGVzYyAqdHhkZXNjID0gdHhyaW5nLT5kZXNjLCAqY3R4ZGVzYzsKIAlzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvICp0eGJpID0gdHhyaW5nLT5idWZpbmYsICpjdHhiaTsKIAl1OCBoaWRtYSA9IGptZS0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSElHSERNQTsKQEAgLTE4MzUsNyArMTg1Myw3IEBACiBzdGF0aWMgaW50CiBqbWVfZmlsbF90eF9kZXNjKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWR4KQogewotCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gam1lLT50eHJpbmc7CisJc3RydWN0IGptZV9yaW5nICp0eHJpbmcgPSAmKGptZS0+dHhyaW5nWzBdKTsKIAlzdHJ1Y3QgdHhkZXNjICp0eGRlc2M7CiAJc3RydWN0IGptZV9idWZmZXJfaW5mbyAqdHhiaTsKIAl1OCBmbGFnczsKQEAgLTE4ODMsNyArMTkwMSw3IEBACiBzdGF0aWMgdm9pZAogam1lX3N0b3BfcXVldWVfaWZfZnVsbChzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSkKIHsKLQlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9IGptZS0+dHhyaW5nOworCXN0cnVjdCBqbWVfcmluZyAqdHhyaW5nID0gJihqbWUtPnR4cmluZ1swXSk7CiAJc3RydWN0IGptZV9idWZmZXJfaW5mbyAqdHhiaSA9IHR4cmluZy0+YnVmaW5mOwogCWludCBpZHggPSBhdG9taWNfcmVhZCgmdHhyaW5nLT5uZXh0X3RvX2NsZWFuKTsKIApAQCAtMTkxMyw3ICsxOTMxLDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcm90ZWN0ZWQgYnkgbmV0aWZfdHhfbG9jaygpCiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBqbWVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBqbWVfYWRhcHRlciAqam1lID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTI3MjUsMTQgKzI3NDMsNiBAQAogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKIAl9Ci0Jam1lLT5zaGFkb3dfcmVncyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsCi0JCQkJCQlzaXplb2YodTMyKSAqIFNIQURPV19SRUdfTlIsCi0JCQkJCQkmKGptZS0+c2hhZG93X2RtYSkpOwotCWlmICghKGptZS0+c2hhZG93X3JlZ3MpKSB7Ci0JCWplcHJpbnRrKHBkZXYsICJBbGxvY2F0aW5nIHNoYWRvdyByZWdpc3RlciBtYXBwaW5nIGVycm9yLlxuIik7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3VubWFwOwotCX0KIAogCWlmIChub19wc2V1ZG9ocCkgewogCQlhcG1jID0ganJlYWQzMihqbWUsIEpNRV9BUE1DKSAmIH5KTUVfQVBNQ19QU0VVRE9fSFBfRU47CkBAIC0yNzY4LDYgKzI3NzgsNyBAQAogCXRhc2tsZXRfaW5pdCgmam1lLT5yeGVtcHR5X3Rhc2ssCiAJCSAgICAgJmptZV9yeF9lbXB0eV90YXNrbGV0LAogCQkgICAgICh1bnNpZ25lZCBsb25nKSBqbWUpOworCXRhc2tsZXRfZGlzYWJsZV9ub3N5bmMoJmptZS0+bGlua2NoX3Rhc2spOwogCXRhc2tsZXRfZGlzYWJsZV9ub3N5bmMoJmptZS0+dHhjbGVhbl90YXNrKTsKIAl0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKCZqbWUtPnJ4Y2xlYW5fdGFzayk7CiAJdGFza2xldF9kaXNhYmxlX25vc3luYygmam1lLT5yeGVtcHR5X3Rhc2spOwpAQCAtMjgxNyw3ICsyODI4LDcgQEAKIAkJaWYgKCFqbWUtPm1paV9pZi5waHlfaWQpIHsKIAkJCXJjID0gLUVJTzsKIAkJCWplcHJpbnRrKHBkZXYsICJDYW4gbm90IGZpbmQgcGh5X2lkLlxuIik7Ci0JCQkgZ290byBlcnJfb3V0X2ZyZWVfc2hhZG93OworCQkJIGdvdG8gZXJyX291dF91bm1hcDsKIAkJfQogCiAJCWptZS0+cmVnX2doYyB8PSBHSENfTElOS19QT0xMOwpAQCAtMjg0Niw3ICsyODU3LDcgQEAKIAlpZiAocmMpIHsKIAkJamVwcmludGsocGRldiwKIAkJCSJSZWxvYWQgZWVwcm9tIGZvciByZWFkaW5nIE1BQyBBZGRyZXNzIGVycm9yLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3NoYWRvdzsKKwkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KIAlqbWVfbG9hZF9tYWNhZGRyKG5ldGRldik7CiAKQEAgLTI4NjIsNyArMjg3Myw3IEBACiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAocmMpIHsKIAkJamVwcmludGsocGRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX3NoYWRvdzsKKwkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KIAogCW1zZ19wcm9iZShqbWUsICIlcyVzIHZlcjoleCByZXY6JXggbWFjYWRkcjolcE1cbiIsCkBAIC0yODc2LDExICsyODg3LDYgQEAKIAogCXJldHVybiAwOwogCi1lcnJfb3V0X2ZyZWVfc2hhZG93OgotCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwKLQkJCSAgICBzaXplb2YodTMyKSAqIFNIQURPV19SRUdfTlIsCi0JCQkgICAgam1lLT5zaGFkb3dfcmVncywKLQkJCSAgICBqbWUtPnNoYWRvd19kbWEpOwogZXJyX291dF91bm1hcDoKIAlpb3VubWFwKGptZS0+cmVncyk7CiBlcnJfb3V0X2ZyZWVfbmV0ZGV2OgpAQCAtMjkwMSwxMCArMjkwNyw2IEBACiAJc3RydWN0IGptZV9hZGFwdGVyICpqbWUgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsCi0JCQkgICAgc2l6ZW9mKHUzMikgKiBTSEFET1dfUkVHX05SLAotCQkJICAgIGptZS0+c2hhZG93X3JlZ3MsCi0JCQkgICAgam1lLT5zaGFkb3dfZG1hKTsKIAlpb3VubWFwKGptZS0+cmVncyk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfbmV0ZGV2KG5ldGRldik7CkBAIC0yOTMwLDggKzI5MzIsNiBAQAogCXRhc2tsZXRfZGlzYWJsZSgmam1lLT5yeGNsZWFuX3Rhc2spOwogCXRhc2tsZXRfZGlzYWJsZSgmam1lLT5yeGVtcHR5X3Rhc2spOwogCi0Jam1lX2Rpc2FibGVfc2hhZG93KGptZSk7Ci0KIAlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCWlmICh0ZXN0X2JpdChKTUVfRkxBR19QT0xMLCAmam1lLT5mbGFncykpCiAJCQlqbWVfcG9sbGluZ19tb2RlKGptZSk7CkBAIC0yOTgzLDcgKzI5ODMsNiBAQAogCWVsc2UKIAkJam1lX3Jlc2V0X3BoeV9wcm9jZXNzb3Ioam1lKTsKIAotCWptZV9lbmFibGVfc2hhZG93KGptZSk7CiAJam1lX3N0YXJ0X2lycShqbWUpOwogCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmggYi9kcml2ZXJzL25ldC9qbWUuaAppbmRleCAwOTk2YTA2Li4yNTFhYmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuaAorKysgYi9kcml2ZXJzL25ldC9qbWUuaApAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBfX0pNRV9IX0lOQ0xVREVEX18KIAogI2RlZmluZSBEUlZfTkFNRQkiam1lIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wLjQiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuNSIKICNkZWZpbmUgUEZYCQlEUlZfTkFNRSAiOiAiCiAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MAkweDAyNTAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogfTsKIAogI2RlZmluZSBUWERFU0NfTVNTX1NISUZUCTIKLWVudW0gam1lX3J4ZGVzY3diX2ZsYWdzX2JpdHMgeworZW51bSBqbWVfdHh3YmRlc2NfZmxhZ3NfYml0cyB7CiAJVFhXQkZMQUdfT1dOCT0gMHg4MCwKIAlUWFdCRkxBR19JTlQJPSAweDQwLAogCVRYV0JGTEFHX1RNT1VUCT0gMHgyMCwKQEAgLTM3Miw3ICszNzIsNiBAQAogLyoKICAqIFRoZSBzdHJ1Y3R1cmUgaG9sZGluZyBidWZmZXIgaW5mb3JtYXRpb24gYW5kIHJpbmcgZGVzY3JpcHRvcnMgYWxsIHRvZ2V0aGVyLgogICovCi0jZGVmaW5lIE1BWF9SSU5HX0RFU0NfTlIJMTAyNAogc3RydWN0IGptZV9yaW5nIHsKIAl2b2lkICphbGxvYzsJCS8qIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSAqLwogCXZvaWQgKmRlc2M7CQkvKiBwb2ludGVyIHRvIHJpbmcgbWVtb3J5ICAqLwpAQCAtMzgwLDcgKzM3OSw3IEBACiAJZG1hX2FkZHJfdCBkbWE7CQkvKiBwaHlzIGFkZHJlc3MgZm9yIHJpbmcgZG1hICovCiAKIAkvKiBCdWZmZXIgaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBlYWNoIGRlc2NyaXB0b3IgKi8KLQlzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvIGJ1ZmluZltNQVhfUklOR19ERVNDX05SXTsKKwlzdHJ1Y3Qgam1lX2J1ZmZlcl9pbmZvICpidWZpbmY7CiAKIAlpbnQgbmV4dF90b191c2U7CiAJYXRvbWljX3QgbmV4dF90b19jbGVhbjsKQEAgLTQxMSwxMyArNDEwLDEwIEBACiAvKgogICogSm1hYyBBZGFwdGVyIFByaXZhdGUgZGF0YQogICovCi0jZGVmaW5lIFNIQURPV19SRUdfTlIgOAogc3RydWN0IGptZV9hZGFwdGVyIHsKIAlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAqcGRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAqZGV2OwogCXZvaWQgX19pb21lbSAgICAgICAgICAgICpyZWdzOwotCWRtYV9hZGRyX3QJCXNoYWRvd19kbWE7Ci0JdTMyCQkJKnNoYWRvd19yZWdzOwogCXN0cnVjdCBtaWlfaWZfaW5mbwltaWlfaWY7CiAJc3RydWN0IGptZV9yaW5nCQlyeHJpbmdbUlhfUklOR19OUl07CiAJc3RydWN0IGptZV9yaW5nCQl0eHJpbmdbVFhfUklOR19OUl07CkBAIC00NjQsMTAgKzQ2MCw2IEBACiAJREVDTEFSRV9ORVRfREVWSUNFX1NUQVRTCiB9OwogCi1lbnVtIHNoYWRvd19yZWdfdmFsIHsKLQlTSEFET1dfSUVWRSA9IDAsCi19OwotCiBlbnVtIGptZV9mbGFnc19iaXRzIHsKIAlKTUVfRkxBR19NU0kJCT0gMSwKIAlKTUVfRkxBR19TU0VUCQk9IDIsCkBAIC0xMTA0LDEzICsxMDk2LDYgQEAKIH07CiAKIC8qCi0gKiBTaGFkb3cgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyIGJpdHMKLSAqLwotZW51bSBqbWVfc2hhZG93X2Jhc2VfYWRkcmVzc19iaXRzIHsKLQlTSEJBX1BPU1RFTgk9IDB4MSwKLX07Ci0KLS8qCiAgKiBBZ2dyZXNzaXZlIFBvd2VyIE1vZGUgQ29udHJvbAogICovCiBlbnVtIGptZV9hcG1jX2JpdHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva29yaW5hLmMgYi9kcml2ZXJzL25ldC9rb3JpbmEuYwppbmRleCBiNGNmNjAyLi4wMzE5OWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rb3JpbmEuYworKysgYi9kcml2ZXJzL25ldC9rb3JpbmEuYwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJCW5hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAogCQlpZiAoZG1hcyAmIERNQV9TVEFUX0VSUikKLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IERNQSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IERNQSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKIAogCQlyZXR2YWwgPSBJUlFfSEFORExFRDsKIAl9IGVsc2UKQEAgLTU1NSw3ICs1NTUsNyBAQAogCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAKIAkJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IHNwbGl0IHR4IGlnbm9yZWRcbiIsCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzcGxpdCB0eCBpZ25vcmVkXG4iLAogCQkJCQkJCWRldi0+bmFtZSk7CiAJCX0gZWxzZSBpZiAoZGV2Y3MgJiBFVEhfVFhfVE9LKSB7CiAJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKQEAgLTY0MSw3ICs2NDEsNyBAQAogCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCX0KIAkJaWYgKGRtYXMgJiBETUFfU1RBVF9FUlIpCi0JCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiVzOiBETUEgZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgZXJyb3JcbiIsIGRldi0+bmFtZSk7CiAKIAkJcmV0dmFsID0gSVJRX0hBTkRMRUQ7CiAJfSBlbHNlCkBAIC03NDMsMTQgKzc0MywxNCBAQAogCXJldHVybiBtaWlfbGlua19vaygmbHAtPm1paV9pZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvICAgICAgICAgICAgPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBuZXRkZXZfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgICAgICAgICAgID0gbmV0ZGV2X3NldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IG5ldGRldl9nZXRfbGluaywKIH07CiAKLXN0YXRpYyB2b2lkIGtvcmluYV9hbGxvY19yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGtvcmluYV9hbGxvY19yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGtvcmluYV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTc3MSw3ICs3NzEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBLT1JJTkFfTlVNX1JEUzsgaSsrKSB7CiAJCXNrYiA9IGRldl9hbGxvY19za2IoS09SSU5BX1JCU0laRSArIDIpOwogCQlpZiAoIXNrYikKLQkJCWJyZWFrOworCQkJcmV0dXJuIC1FTk9NRU07CiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7CiAJCWxwLT5yeF9za2JbaV0gPSBza2I7CiAJCWxwLT5yZF9yaW5nW2ldLmNvbnRyb2wgPSBETUFfREVTQ19JT0QgfApAQCAtNzkwLDYgKzc5MCw4IEBACiAJbHAtPnJ4X2NoYWluX2hlYWQgPSAwOwogCWxwLT5yeF9jaGFpbl90YWlsID0gMDsKIAlscC0+cnhfY2hhaW5fc3RhdHVzID0gZGVzY19lbXB0eTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBrb3JpbmFfZnJlZV9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC04MzIsNyArODM0LDExIEBACiAJd3JpdGVsKEVUSF9JTlRfRkNfRU4sICZscC0+ZXRoX3JlZ3MtPmV0aGludGZjKTsKIAogCS8qIEFsbG9jYXRlIHJpbmdzICovCi0Ja29yaW5hX2FsbG9jX3JpbmcoZGV2KTsKKwlpZiAoa29yaW5hX2FsbG9jX3JpbmcoZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkZXNjcmlwdG9yIGFsbG9jYXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQlrb3JpbmFfZnJlZV9yaW5nKGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCXdyaXRlbCgwLCAmbHAtPnJ4X2RtYV9yZWdzLT5kbWFzKTsKIAkvKiBTdGFydCBSeCBETUEgKi8KQEAgLTkxNyw4ICs5MjMsNyBAQAogCiAJcmV0ID0ga29yaW5hX2luaXQoZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiVzOiBjYW5ub3QgcmVzdGFydCBkZXZpY2VcbiIsCi0JCQkJCQkJCWRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXN0YXJ0IGRldmljZVxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJa29yaW5hX211bHRpY2FzdF9saXN0KGRldik7CkBAIC0xMDA1LDcgKzEwMTAsNyBAQAogCS8qIEluaXRpYWxpemUgKi8KIAlyZXQgPSBrb3JpbmFfaW5pdChkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IGNhbm5vdCBvcGVuIGRldmljZVxuIiwgZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IG9wZW4gZGV2aWNlXG4iLCBkZXYtPm5hbWUpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwMTUsMTQgKzEwMjAsMTQgQEAKIAlyZXQgPSByZXF1ZXN0X2lycShscC0+cnhfaXJxLCAma29yaW5hX3J4X2RtYV9pbnRlcnJ1cHQsCiAJCQlJUlFGX0RJU0FCTEVELCAiS29yaW5hIGV0aGVybmV0IFJ4IiwgZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIiVzOiB1bmFibGUgdG8gZ2V0IFJ4IERNQSBJUlEgJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBnZXQgUnggRE1BIElSUSAlZFxuIiwKIAkJICAgIGRldi0+bmFtZSwgbHAtPnJ4X2lycSk7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCXJldCA9IHJlcXVlc3RfaXJxKGxwLT50eF9pcnEsICZrb3JpbmFfdHhfZG1hX2ludGVycnVwdCwKIAkJCUlSUUZfRElTQUJMRUQsICJLb3JpbmEgZXRoZXJuZXQgVHgiLCBkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IHVuYWJsZSB0byBnZXQgVHggRE1BIElSUSAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGdldCBUeCBETUEgSVJRICVkXG4iLAogCQkgICAgZGV2LT5uYW1lLCBscC0+dHhfaXJxKTsKIAkJZ290byBlcnJfZnJlZV9yeF9pcnE7CiAJfQpAQCAtMTAzMSw3ICsxMDM2LDcgQEAKIAlyZXQgPSByZXF1ZXN0X2lycShscC0+b3ZyX2lycSwgJmtvcmluYV9vdnJfaW50ZXJydXB0LAogCQkJSVJRRl9ESVNBQkxFRCwgIkV0aGVybmV0IE92ZXJmbG93IiwgZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUiJXM6IHVuYWJsZSB0byBnZXQgT1ZSIElSUSAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGdldCBPVlIgSVJRICVkXG4iLAogCQkgICAgZGV2LT5uYW1lLCBscC0+b3ZyX2lycSk7CiAJCWdvdG8gZXJyX2ZyZWVfdHhfaXJxOwogCX0KQEAgLTEwNDAsNyArMTA0NSw3IEBACiAJcmV0ID0gcmVxdWVzdF9pcnEobHAtPnVuZF9pcnEsICZrb3JpbmFfdW5kX2ludGVycnVwdCwKIAkJCUlSUUZfRElTQUJMRUQsICJFdGhlcm5ldCBVbmRlcmZsb3ciLCBkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IHVuYWJsZSB0byBnZXQgVU5EIElSUSAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGdldCBVTkQgSVJRICVkXG4iLAogCQkgICAgZGV2LT5uYW1lLCBscC0+dW5kX2lycSk7CiAJCWdvdG8gZXJyX2ZyZWVfb3ZyX2lycTsKIAl9CkBAIC0xMTM3LDcgKzExNDIsNyBAQAogCWRldi0+YmFzZV9hZGRyID0gci0+c3RhcnQ7CiAJbHAtPmV0aF9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CiAJaWYgKCFscC0+ZXRoX3JlZ3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJjYW5ub3QgcmVtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IGNhbm5vdCByZW1hcCByZWdpc3RlcnNcbiIpOwogCQlyYyA9IC1FTlhJTzsKIAkJZ290byBwcm9iZV9lcnJfb3V0OwogCX0KQEAgLTExNDUsNyArMTE1MCw3IEBACiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJrb3JpbmFfZG1hX3J4Iik7CiAJbHAtPnJ4X2RtYV9yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CiAJaWYgKCFscC0+cnhfZG1hX3JlZ3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJjYW5ub3QgcmVtYXAgUnggRE1BIHJlZ2lzdGVyc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBjYW5ub3QgcmVtYXAgUnggRE1BIHJlZ2lzdGVyc1xuIik7CiAJCXJjID0gLUVOWElPOwogCQlnb3RvIHByb2JlX2Vycl9kbWFfcng7CiAJfQpAQCAtMTE1MywxNCArMTE1OCwxNCBAQAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAia29yaW5hX2RtYV90eCIpOwogCWxwLT50eF9kbWFfcmVncyA9IGlvcmVtYXBfbm9jYWNoZShyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQpOwogCWlmICghbHAtPnR4X2RtYV9yZWdzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiY2Fubm90IHJlbWFwIFR4IERNQSByZWdpc3RlcnNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY2Fubm90IHJlbWFwIFR4IERNQSByZWdpc3RlcnNcbiIpOwogCQlyYyA9IC1FTlhJTzsKIAkJZ290byBwcm9iZV9lcnJfZG1hX3R4OwogCX0KIAogCWxwLT50ZF9yaW5nID0ga21hbGxvYyhURF9SSU5HX1NJWkUgKyBSRF9SSU5HX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghbHAtPnRkX3JpbmcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICJjYW5ub3QgYWxsb2NhdGUgZGVzY3JpcHRvcnNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogY2Fubm90IGFsbG9jYXRlIGRlc2NyaXB0b3JzXG4iKTsKIAkJcmMgPSAtRU5YSU87CiAJCWdvdG8gcHJvYmVfZXJyX3RkX3Jpbmc7CiAJfQpAQCAtMTE5MywxMCArMTE5OCwxMyBAQAogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKLQkJCSI6IGNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlICVkXG4iLCByYyk7CisJCQkiOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZTogJWRcbiIsIHJjKTsKIAkJZ290byBwcm9iZV9lcnJfcmVnaXN0ZXI7CiAJfQogCXNldHVwX3RpbWVyKCZscC0+bWVkaWFfY2hlY2tfdGltZXIsIGtvcmluYV9wb2xsX21lZGlhLCAodW5zaWduZWQgbG9uZykgZGV2KTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIERSVl9OQU1FICItIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIlxuIiwKKwkJCWRldi0+bmFtZSk7CiBvdXQ6CiAJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NDIuYyBiL2RyaXZlcnMvbmV0L2tzODg0Mi5jCmluZGV4IDM5YjBhZWEuLjk5ZTk1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg0Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg0Mi5jCkBAIC01NTEsNyArNTUxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrczg4NDJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IGtzODg0Ml94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCWludCByZXQ7CiAJc3RydWN0IGtzODg0Ml9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTYxOCw3ICs2MTksNyBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyCiB9OwogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGtzODg0Ml9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMga3M4ODQyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxLmMgYi9kcml2ZXJzL25ldC9rczg4NTEuYwppbmRleCA5YTFkZWE2Li41NDdhYzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rczg4NTEuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTEuYwpAQCAtODY4LDExICs4NjgsMTIgQEAKICAqIGFuZCBzZWNvbmRseSBzbyB3ZSBjYW4gcm91bmQgdXAgbW9yZSB0aGFuIG9uZSBwYWNrZXQgdG8gdHJhbnNtaXQgd2hpY2gKICAqIG1lYW5zIHdlIGNhbiB0cnkgYW5kIGF2b2lkIGdlbmVyYXRpbmcgdG9vIG1hbnkgdHJhbnNtaXQgZG9uZSBpbnRlcnJ1cHRzLgogICovCi1zdGF0aWMgaW50IGtzODg1MV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qga3M4ODUxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGtzODg1MV9uZXQgKmtzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBuZWVkZWQgPSBjYWxjX3R4bGVuKHNrYi0+bGVuKTsKLQlpbnQgcmV0ID0gTkVUREVWX1RYX09LOworCW5ldGRldl90eF90IHJldCA9IE5FVERFVl9UWF9PSzsKIAogCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGtzKSkKIAkJa3NfZGJnKGtzLCAiJXM6IHNrYiAlcCwgJWRAJXBcbiIsIF9fZnVuY19fLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKaW5kZXggNjMzODA4ZC4uZGNkYTMwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9sYW5jZS5jCkBAIC0zMDAsNyArMzAwLDggQEAKIAogc3RhdGljIGludCBsYW5jZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbGFuY2VfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGdmcF90IG1vZGUpOwotc3RhdGljIGludCBsYW5jZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGxhbmNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxhbmNlX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGxhbmNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBsYW5jZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTk0OSw3ICs5NTAsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgbGFuY2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGxhbmNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMTAxNiw3ICsxMDE4LDcgQEAKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5kZXZsb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIExBTkNFIGludGVycnVwdCBoYW5kbGVyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGliODI1OTYuYyBiL2RyaXZlcnMvbmV0L2xpYjgyNTk2LmMKaW5kZXggMDcwZmE0NS4uNTFlMTFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGliODI1OTYuYworKysgYi9kcml2ZXJzL25ldC9saWI4MjU5Ni5jCkBAIC05ODMsNyArOTgzLDcgQEAKIAogCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAKQEAgLTEwMjgsNyArMTAyOCw3IEBACiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfZXRoKHVuc2lnbmVkIGNoYXIgKmFkZCwgY2hhciAqc3RyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGliODM5MC5jIGIvZHJpdmVycy9uZXQvbGliODM5MC5jCmluZGV4IGYyOGMyMzMuLjI1NjExOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xpYjgzOTAuYworKysgYi9kcml2ZXJzL25ldC9saWI4MzkwLmMKQEAgLTI5OSw3ICsyOTksOCBAQAogICogU2VuZHMgYSBwYWNrZXQgdG8gYW4gODM5MCBuZXR3b3JrIGRldmljZS4KICAqLwogCi1zdGF0aWMgaW50IF9fZWlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IF9fZWlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNDE0LDcgKzQxNSw3IEBACiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNlbmRfbGVuZ3RoOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKaW5kZXggOTZlNzI0OC4uZGE4ZDBhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYwpAQCAtNTkxLDcgKzU5MSw3IEBACiAJLyogS2ljayBvZmYgdGhlIHRyYW5zZmVyICovCiAJdGVtYWNfZG1hX291dDMyKGxwLCBUWF9UQUlMREVTQ19QVFIsIHRhaWxfcCk7IC8qIERNQSBzdGFydCAqLwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sb29wYmFjay5jIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwppbmRleCBkYTQ3MmM2Li4xYmM2NTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sb29wYmFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKQEAgLTY5LDcgKzY5LDggQEAKICAqIFRoZSBoaWdoZXIgbGV2ZWxzIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhpcyBub24tcmVlbnRyYW50IChpdCdzCiAgKiBjYWxsZWQgd2l0aCBiaCdzIGRpc2FibGVkKS4KICAqLwotc3RhdGljIGludCBsb29wYmFja194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbG9vcGJhY2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwY3B1X2xzdGF0cyAqcGNwdV9sc3RhdHMsICpsYl9zdGF0czsKIAlpbnQgbGVuOwpAQCAtODksNyArOTAsNyBAQAogCX0gZWxzZQogCQlsYl9zdGF0cy0+ZHJvcHMrKzsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbG9vcGJhY2tfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9scDQ4NmUuYyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCmluZGV4IGQ0NGJkZGIuLmNjM2VkOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xwNDg2ZS5jCkBAIC0zNzcsNyArMzc3LDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgaTU5Nl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBpNTk2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgaTU5Nl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGk1OTZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGk1OTZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpNTk2X2FkZF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGk1OTZfY21kICpjbWQpOwpAQCAtODYzLDcgKzg2Myw3IEBACiAJcmV0dXJuIDA7CQkJLyogQWx3YXlzIHN1Y2NlZWQgKi8KIH0KIAotc3RhdGljIGludCBpNTk2X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKK3N0YXRpYyBuZXRkZXZfdHhfdCBpNTk2X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKIAlzdHJ1Y3QgdHhfY21kICp0eF9jbWQ7CiAJc2hvcnQgbGVuZ3RoOwogCkBAIC04NzEsNyArODcxLDcgQEAKIAogCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAKQEAgLTkwNiw3ICs5MDYsNyBAQAogCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjODl4MC5jIGIvZHJpdmVycy9uZXQvbWFjODl4MC5jCmluZGV4IGRhYjQ1MzMuLjE0OWUwZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hYzg5eDAuYworKysgYi9kcml2ZXJzL25ldC9tYWM4OXgwLmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2IgKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgdHlwaWNhbCB3b3JrbG9hZCBvZiB0aGUgZHJpdmVyOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IGUzNjAxY2YuLmZiNjViNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTY3OSw3ICs2NzksNyBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBtYWNiX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgbWFjYiAqYnApCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoJmJwLT5wZGV2LT5kZXYpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBtYWNiX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYWNiX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gbWFjYl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBtYWNiX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gbWFjYl9nZXRfZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY2UuYwppbmRleCAxNDI3NzU1Li43ZDc1NzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjZS5jCkBAIC01ODEsNyArNTgxLDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmxvY2ssIGZsYWdzKTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIG1hY2Vfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCmluZGV4IDk5ZWVkOWYuLjNhYWJmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYworKysgYi9kcml2ZXJzL25ldC9tYWN2bGFuLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh2bGFuLCBuLCAmcG9ydC0+dmxhbl9oYXNoW2FkZHJbNV1dLCBobGlzdCkgewotCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcih2bGFuLT5kZXYtPmRldl9hZGRyLCBhZGRyKSkKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHZsYW4tPmRldi0+ZGV2X2FkZHIsIGFkZHIpKQogCQkJcmV0dXJuIHZsYW47CiAJfQogCXJldHVybiBOVUxMOwpAQCAtOTIsNyArOTIsNyBAQAogCSAqIGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlIHVuZGVybHlpbmcgZGV2aWNlIG9yCiAJICogYW5vdGhlciBtYWN2bGFuLgogCSAqLwotCWlmIChtZW1jbXAocG9ydC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pID09IDApCisJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKHBvcnQtPmRldi0+ZGV2X2FkZHIsIGFkZHIpKQogCQlyZXR1cm4gMTsKIAogCWlmIChtYWN2bGFuX2hhc2hfbG9va3VwKHBvcnQsIGFkZHIpKQpAQCAtMTMwLDcgKzEzMCw3IEBACiAJCQlkZXYtPnN0YXRzLm11bHRpY2FzdCsrOwogCiAJCQluc2tiLT5kZXYgPSBkZXY7Ci0JCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGgtPmhfZGVzdCwgZGV2LT5icm9hZGNhc3QpKQorCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHJfNjRiaXRzKGV0aC0+aF9kZXN0LCBkZXYtPmJyb2FkY2FzdCkpCiAJCQkJbnNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfQlJPQURDQVNUOwogCQkJZWxzZQogCQkJCW5za2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKQEAgLTE4NCw4ICsxODQsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBtYWN2bGFuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCBpID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOwogCWNvbnN0IHN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwogCWludCByZXQ7CkBAIC0xOTQsMTIgKzE5NywxMSBAQAogCXJldCA9IGRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewotCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47Ci0JfSBlbHNlIHsKLQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCX0KKwkJdHhxLT50eF9wYWNrZXRzKys7CisJCXR4cS0+dHhfYnl0ZXMgKz0gbGVuOworCX0gZWxzZQorCQl0eHEtPnR4X2Ryb3BwZWQrKzsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQ4Myw2ICs0ODUsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtYWN2bGFuX2dldF90eF9xdWV1ZXMoc3RydWN0IG5ldCAqbmV0LAorCQkJCSBzdHJ1Y3QgbmxhdHRyICp0YltdLAorCQkJCSB1bnNpZ25lZCBpbnQgKm51bV90eF9xdWV1ZXMsCisJCQkJIHVuc2lnbmVkIGludCAqcmVhbF9udW1fdHhfcXVldWVzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjsKKworCWlmICghdGJbSUZMQV9MSU5LXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTsKKwlpZiAoIXJlYWxfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSpudW1fdHhfcXVldWVzICAgICAgPSByZWFsX2Rldi0+bnVtX3R4X3F1ZXVlczsKKwkqcmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBtYWN2bGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKQEAgLTU0OSw2ICs1NzAsNyBAQAogc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIG1hY3ZsYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkua2luZAkJPSAibWFjdmxhbiIsCiAJLnByaXZfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbWFjdmxhbl9kZXYpLAorCS5nZXRfdHhfcXVldWVzICA9IG1hY3ZsYW5fZ2V0X3R4X3F1ZXVlcywKIAkuc2V0dXAJCT0gbWFjdmxhbl9zZXR1cCwKIAkudmFsaWRhdGUJPSBtYWN2bGFuX3ZhbGlkYXRlLAogCS5uZXdsaW5rCT0gbWFjdmxhbl9uZXdsaW5rLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWRpby5jIGIvZHJpdmVycy9uZXQvbWRpby5jCmluZGV4IDY4NTFiZGIuLjIxZjg3NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21kaW8uYworKysgYi9kcml2ZXJzL25ldC9tZGlvLmMKQEAgLTEwOSwxMyArMTA5LDIwIEBACiAJCWlmIChtbWRfbWFzayAmICgxIDw8IGRldmFkKSkgewogCQkJbW1kX21hc2sgJj0gfigxIDw8IGRldmFkKTsKIAotCQkJLyogUmVhZCB0d2ljZSBiZWNhdXNlIGxpbmsgc3RhdGUgaXMgbGF0Y2hlZCBhbmQgYQotCQkJICogcmVhZCBtb3ZlcyB0aGUgY3VycmVudCBzdGF0ZSBpbnRvIHRoZSByZWdpc3RlciAqLworCQkJLyogUmVzZXQgdGhlIGxhdGNoZWQgc3RhdHVzIGFuZCBmYXVsdCBmbGFncyAqLwogCQkJbWRpby0+bWRpb19yZWFkKG1kaW8tPmRldiwgbWRpby0+cHJ0YWQsCiAJCQkJCWRldmFkLCBNRElPX1NUQVQxKTsKKwkJCWlmIChkZXZhZCA9PSBNRElPX01NRF9QTUFQTUQgfHwgZGV2YWQgPT0gTURJT19NTURfUENTIHx8CisJCQkgICAgZGV2YWQgPT0gTURJT19NTURfUEhZWFMgfHwgZGV2YWQgPT0gTURJT19NTURfRFRFWFMpCisJCQkJbWRpby0+bWRpb19yZWFkKG1kaW8tPmRldiwgbWRpby0+cHJ0YWQsCisJCQkJCQlkZXZhZCwgTURJT19TVEFUMik7CisKKwkJCS8qIENoZWNrIHRoZSBjdXJyZW50IHN0YXR1cyBhbmQgZmF1bHQgZmxhZ3MgKi8KIAkJCXJlZyA9IG1kaW8tPm1kaW9fcmVhZChtZGlvLT5kZXYsIG1kaW8tPnBydGFkLAogCQkJCQkgICAgICBkZXZhZCwgTURJT19TVEFUMSk7Ci0JCQlpZiAocmVnIDwgMCB8fCAhKHJlZyAmIE1ESU9fU1RBVDFfTFNUQVRVUykpCisJCQlpZiAocmVnIDwgMCB8fAorCQkJICAgIChyZWcgJiAoTURJT19TVEFUMV9GQVVMVCB8IE1ESU9fU1RBVDFfTFNUQVRVUykpICE9CisJCQkgICAgTURJT19TVEFUMV9MU1RBVFVTKQogCQkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KQEAgLTM3MywxMCArMzgwLDcgQEAKIAkJY21kID0gU0lPQ0dNSUlSRUc7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWJyZWFrOwogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21ldGguYyBiL2RyaXZlcnMvbmV0L21ldGguYwppbmRleCA1ZDA0ZDk0Li45MmNlYjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbWV0aC5jCkBAIC03MTUsNyArNzE1LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1ldGhfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTc4NCw3ICs3ODQsNyBAQAogLyoKICAqIFRoZSBpbml0IGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBtZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbWV0aF9wcml2YXRlICpwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWlpLmMgYi9kcml2ZXJzL25ldC9taWkuYwppbmRleCBkODFhNWQyLi4yMTBiMmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taWkuYworKysgYi9kcml2ZXJzL25ldC9taWkuYwpAQCAtNDMzLDkgKzQzMyw2IEBACiAJY2FzZSBTSU9DU01JSVJFRzogewogCQl1MTYgdmFsID0gbWlpX2RhdGEtPnZhbF9pbjsKIAotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCWlmIChtaWlfZGF0YS0+cGh5X2lkID09IG1paV9pZi0+cGh5X2lkKSB7CiAJCQlzd2l0Y2gobWlpX2RhdGEtPnJlZ19udW0pIHsKIAkJCWNhc2UgTUlJX0JNQ1I6IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21pcHNuZXQuYyBiL2RyaXZlcnMvbmV0L21pcHNuZXQuYwppbmRleCBiM2I5YTE0Li44ZWE5OGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taXBzbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvbWlwc25ldC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJbWlwc25ldF9wdXRfdG9kZXZpY2UoZGV2LCBza2IpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGlubGluZSBzc2l6ZV90IG1pcHNuZXRfZ2V0X2Zyb21kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKaW5kZXggOWVkNGExNS4uNTA3ZTExZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9tYWluLmMKQEAgLTIxOCw4ICsyMTgsOSBAQAogCW1seDRfZm9yZWFjaF9wb3J0KGksIGRldiwgTUxYNF9QT1JUX1RZUEVfRVRIKSB7CiAJCW1seDRfaW5mbyhtZGV2LCAiVXNpbmcgJWQgdHggcmluZ3MgZm9yIHBvcnQ6JWRcbiIsCiAJCQkgIG1kZXYtPnByb2ZpbGUucHJvZltpXS50eF9yaW5nX251bSwgaSk7Ci0JCW1kZXYtPnByb2ZpbGUucHJvZltpXS5yeF9yaW5nX251bSA9Ci0JCQltaW5fdChpbnQsIGRldi0+Y2Fwcy5udW1fY29tcF92ZWN0b3JzLCBNQVhfUlhfUklOR1MpOworCQltZGV2LT5wcm9maWxlLnByb2ZbaV0ucnhfcmluZ19udW0gPSBtaW5fdChpbnQsCisJCQlyb3VuZHVwX3Bvd19vZl90d28oZGV2LT5jYXBzLm51bV9jb21wX3ZlY3RvcnMpLAorCQkJTUFYX1JYX1JJTkdTKTsKIAkJbWx4NF9pbmZvKG1kZXYsICJEZWZhdWx0aW5nIHRvICVkIHJ4IHJpbmdzIGZvciBwb3J0OiVkXG4iLAogCQkJICBtZGV2LT5wcm9maWxlLnByb2ZbaV0ucnhfcmluZ19udW0sIGkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCmluZGV4IDkzZjRhYmQuLmM0OGIwZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKQEAgLTQxNCw2ICs0MTQsNyBAQAogCXVuc2lnbmVkIGxvbmcgYXZnX3BrdF9zaXplOwogCXVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOworCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZV9kaWZmOwogCXVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nIHR4X3BrdF9kaWZmOwogCXVuc2lnbmVkIGxvbmcgcnhfcGt0X2RpZmY7CkBAIC00MzcsNiArNDM4LDggQEAKIAlyeF9wa3RfZGlmZiA9ICgodW5zaWduZWQgbG9uZykgKHJ4X3BhY2tldHMgLQogCQkJCQlwcml2LT5sYXN0X21vZGVyX3BhY2tldHMpKTsKIAlwYWNrZXRzID0gbWF4KHR4X3BrdF9kaWZmLCByeF9wa3RfZGlmZik7CisJcnhfYnl0ZV9kaWZmID0gcnhfYnl0ZXMgLSBwcml2LT5sYXN0X21vZGVyX2J5dGVzOworCXJ4X2J5dGVfZGlmZiA9IHJ4X2J5dGVfZGlmZiA/IHJ4X2J5dGVfZGlmZiA6IDE7CiAJcmF0ZSA9IHBhY2tldHMgKiBIWiAvIHBlcmlvZDsKIAlhdmdfcGt0X3NpemUgPSBwYWNrZXRzID8gKCh1bnNpZ25lZCBsb25nKSAocnhfYnl0ZXMgLQogCQkJCSBwcml2LT5sYXN0X21vZGVyX2J5dGVzKSkgLyBwYWNrZXRzIDogMDsKQEAgLTQ0NywxMCArNDUwLDEzIEBACiAJCS8qIElmIHR4IGFuZCByeCBwYWNrZXQgcmF0ZXMgYXJlIG5vdCBiYWxhbmNlZCwgYXNzdW1lIHRoYXQKIAkJICogdHJhZmZpYyBpcyBtYWlubHkgQlcgYm91bmQgYW5kIGFwcGx5IG1heGltdW0gbW9kZXJhdGlvbi4KIAkJICogT3RoZXJ3aXNlLCBtb2RlcmF0ZSBhY2NvcmRpbmcgdG8gcGFja2V0IHJhdGUgKi8KLQkJaWYgKDIgKiB0eF9wa3RfZGlmZiA+IDMgKiByeF9wa3RfZGlmZiB8fAotCQkgICAgMiAqIHJ4X3BrdF9kaWZmID4gMyAqIHR4X3BrdF9kaWZmKSB7CisJCWlmICgyICogdHhfcGt0X2RpZmYgPiAzICogcnhfcGt0X2RpZmYgJiYKKwkJICAgIHJ4X3BrdF9kaWZmIC8gcnhfYnl0ZV9kaWZmIDwKKwkJICAgIE1MWDRfRU5fU01BTExfUEtUX1NJWkUpCisJCQltb2Rlcl90aW1lID0gcHJpdi0+cnhfdXNlY3NfbG93OworCQllbHNlIGlmICgyICogcnhfcGt0X2RpZmYgPiAzICogdHhfcGt0X2RpZmYpCiAJCQltb2Rlcl90aW1lID0gcHJpdi0+cnhfdXNlY3NfaGlnaDsKLQkJfSBlbHNlIHsKKwkJZWxzZSB7CiAJCQlpZiAocmF0ZSA8IHByaXYtPnBrdF9yYXRlX2xvdykKIAkJCQltb2Rlcl90aW1lID0gcHJpdi0+cnhfdXNlY3NfbG93OwogCQkJZWxzZSBpZiAocmF0ZSA+IHByaXYtPnBrdF9yYXRlX2hpZ2gpCkBAIC02MTYsOCArNjIyLDcgQEAKIAogCQkvKiBDb25maWd1cmUgcmluZyAqLwogCQl0eF9yaW5nID0gJnByaXYtPnR4X3JpbmdbaV07Ci0JCWVyciA9IG1seDRfZW5fYWN0aXZhdGVfdHhfcmluZyhwcml2LCB0eF9yaW5nLCBjcS0+bWNxLmNxbiwKLQkJCQkJICAgICAgIHByaXYtPnJ4X3JpbmdbMF0uc3JxLnNycW4pOworCQllcnIgPSBtbHg0X2VuX2FjdGl2YXRlX3R4X3JpbmcocHJpdiwgdHhfcmluZywgY3EtPm1jcS5jcW4pOwogCQlpZiAoZXJyKSB7CiAJCQllbl9lcnIocHJpdiwgIkZhaWxlZCBhbGxvY2F0aW5nIFR4IHJpbmdcbiIpOwogCQkJbWx4NF9lbl9kZWFjdGl2YXRlX2NxKHByaXYsIGNxKTsKQEAgLTEwMDUsOSArMTAxMCw2IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQkvKiBQb3B1bGF0ZSBSeCBkZWZhdWx0IFJTUyBtYXBwaW5ncyAqLwotCW1seDRfZW5fc2V0X2RlZmF1bHRfcnNzX21hcChwcml2LCAmcHJpdi0+cnNzX21hcCwgcHJpdi0+cnhfcmluZ19udW0gKgotCQkJCQkJUlNTX0ZBQ1RPUiwgcHJpdi0+cnhfcmluZ19udW0pOwogCS8qIEFsbG9jYXRlIHBhZ2UgZm9yIHJlY2VpdmUgcmluZ3MgKi8KIAllcnIgPSBtbHg0X2FsbG9jX2h3cV9yZXMobWRldi0+ZGV2LCAmcHJpdi0+cmVzLAogCQkJCU1MWDRfRU5fUEFHRV9TSVpFLCBNTFg0X0VOX1BBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3Jlc291cmNlcy5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yZXNvdXJjZXMuYwppbmRleCA2NWNhNzA2Li4xNjI1Njc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX3Jlc291cmNlcy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcmVzb3VyY2VzLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJtbHg0X2VuLmgiCiAKIHZvaWQgbWx4NF9lbl9maWxsX3FwX2NvbnRleHQoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgaW50IHNpemUsIGludCBzdHJpZGUsCi0JCQkgICAgIGludCBpc190eCwgaW50IHJzcywgaW50IHFwbiwgaW50IGNxbiwgaW50IHNycW4sCisJCQkgICAgIGludCBpc190eCwgaW50IHJzcywgaW50IHFwbiwgaW50IGNxbiwKIAkJCSAgICAgc3RydWN0IG1seDRfcXBfY29udGV4dCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OwpAQCAtNDYsMTEgKzQ2LDEyIEBACiAJY29udGV4dC0+ZmxhZ3MgPSBjcHVfdG9fYmUzMig3IDw8IDE2IHwgcnNzIDw8IDEzKTsKIAljb250ZXh0LT5wZCA9IGNwdV90b19iZTMyKG1kZXYtPnByaXZfcGRuKTsKIAljb250ZXh0LT5tdHVfbXNnbWF4ID0gMHhmZjsKLQljb250ZXh0LT5ycV9zaXplX3N0cmlkZSA9IDA7CisJaWYgKCFpc190eCAmJiAhcnNzKQorCQljb250ZXh0LT5ycV9zaXplX3N0cmlkZSA9IGlsb2cyKHNpemUpIDw8IDMgfCAoaWxvZzIoc3RyaWRlKSAtIDQpOwogCWlmIChpc190eCkKIAkJY29udGV4dC0+c3Ffc2l6ZV9zdHJpZGUgPSBpbG9nMihzaXplKSA8PCAzIHwgKGlsb2cyKHN0cmlkZSkgLSA0KTsKIAllbHNlCi0JCWNvbnRleHQtPnNxX3NpemVfc3RyaWRlID0gMTsKKwkJY29udGV4dC0+c3Ffc2l6ZV9zdHJpZGUgPSBpbG9nMihUWEJCX1NJWkUpIC0gNDsKIAljb250ZXh0LT51c3JfcGFnZSA9IGNwdV90b19iZTMyKG1kZXYtPnByaXZfdWFyLmluZGV4KTsKIAljb250ZXh0LT5sb2NhbF9xcG4gPSBjcHVfdG9fYmUzMihxcG4pOwogCWNvbnRleHQtPnByaV9wYXRoLmFja3RvID0gMSAmIDB4MDc7CkBAIC01OSw4ICs2MCw2IEBACiAJY29udGV4dC0+Y3FuX3NlbmQgPSBjcHVfdG9fYmUzMihjcW4pOwogCWNvbnRleHQtPmNxbl9yZWN2ID0gY3B1X3RvX2JlMzIoY3FuKTsKIAljb250ZXh0LT5kYl9yZWNfYWRkciA9IGNwdV90b19iZTY0KHByaXYtPnJlcy5kYi5kbWEgPDwgMik7Ci0JaWYgKCFyc3MpCi0JCWNvbnRleHQtPnNycW4gPSBjcHVfdG9fYmUzMihNTFg0X0VOX1VTRV9TUlEgfCBzcnFuKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKaW5kZXggM2FjMDQwNC4uMDNiNzgxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwpAQCAtNDAsMTYgKzQwLDYgQEAKIAogI2luY2x1ZGUgIm1seDRfZW4uaCIKIAotc3RhdGljIHZvaWQgKmdldF93cWUoc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZywgaW50IG4pCi17Ci0JaW50IG9mZnNldCA9IG4gPDwgcmluZy0+c3JxLndxZV9zaGlmdDsKLQlyZXR1cm4gcmluZy0+YnVmICsgb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZCBtbHg0X2VuX3NycV9ldmVudChzdHJ1Y3QgbWx4NF9zcnEgKnNycSwgZW51bSBtbHg0X2V2ZW50IHR5cGUpCi17Ci0JcmV0dXJuOwotfQogCiBzdGF0aWMgaW50IG1seDRfZW5fZ2V0X2ZyYWdfaGVhZGVyKHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWdzLCB2b2lkICoqbWFjX2hkciwKIAkJCQkgICB2b2lkICoqaXBfaGRyLCB2b2lkICoqdGNwdWRwX2hkciwKQEAgLTE1NCw5ICsxNDQsNiBAQAogCWludCBwb3NzaWJsZV9mcmFnczsKIAlpbnQgaTsKIAotCS8qIFByZS1saW5rIGRlc2NyaXB0b3IgKi8KLQlyeF9kZXNjLT5uZXh0Lm5leHRfd3FlX2luZGV4ID0gY3B1X3RvX2JlMTYoKGluZGV4ICsgMSkgJiByaW5nLT5zaXplX21hc2spOwotCiAJLyogU2V0IHNpemUgYW5kIG1lbXR5cGUgZmllbGRzICovCiAJZm9yIChpID0gMDsgaSA8IHByaXYtPm51bV9mcmFnczsgaSsrKSB7CiAJCXNrYl9mcmFnc1tpXS5zaXplID0gcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfc2l6ZTsKQEAgLTI5NCw5ICsyODEsNiBAQAogCWludCBlcnI7CiAJaW50IHRtcDsKIAotCS8qIFNhbml0eSBjaGVjayBTUlEgc2l6ZSBiZWZvcmUgcHJvY2VlZGluZyAqLwotCWlmIChzaXplID49IG1kZXYtPmRldi0+Y2Fwcy5tYXhfc3JxX3dxZXMpCi0JCXJldHVybiAtRUlOVkFMOwogCiAJcmluZy0+cHJvZCA9IDA7CiAJcmluZy0+Y29ucyA9IDA7CkBAIC0zMDQsNyArMjg4LDcgQEAKIAlyaW5nLT5zaXplX21hc2sgPSBzaXplIC0gMTsKIAlyaW5nLT5zdHJpZGUgPSBzdHJpZGU7CiAJcmluZy0+bG9nX3N0cmlkZSA9IGZmcyhyaW5nLT5zdHJpZGUpIC0gMTsKLQlyaW5nLT5idWZfc2l6ZSA9IHJpbmctPnNpemUgKiByaW5nLT5zdHJpZGU7CisJcmluZy0+YnVmX3NpemUgPSByaW5nLT5zaXplICogcmluZy0+c3RyaWRlICsgVFhCQl9TSVpFOwogCiAJdG1wID0gc2l6ZSAqIHJvdW5kdXBfcG93X29mX3R3byhNTFg0X0VOX01BWF9SWF9GUkFHUyAqCiAJCQkJCXNpemVvZihzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0KSk7CkBAIC0zNjAsMTUgKzM0NCwxMiBAQAogCiBpbnQgbWx4NF9lbl9hY3RpdmF0ZV9yeF9yaW5ncyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KQogewotCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldiA9IHByaXYtPm1kZXY7Ci0Jc3RydWN0IG1seDRfd3FlX3NycV9uZXh0X3NlZyAqbmV4dDsKIAlzdHJ1Y3QgbWx4NF9lbl9yeF9yaW5nICpyaW5nOwogCWludCBpOwogCWludCByaW5nX2luZDsKIAlpbnQgZXJyOwogCWludCBzdHJpZGUgPSByb3VuZHVwX3Bvd19vZl90d28oc2l6ZW9mKHN0cnVjdCBtbHg0X2VuX3J4X2Rlc2MpICsKIAkJCQkJRFNfU0laRSAqIHByaXYtPm51bV9mcmFncyk7Ci0JaW50IG1heF9ncyA9IChzdHJpZGUgLSBzaXplb2Yoc3RydWN0IG1seDRfd3FlX3NycV9uZXh0X3NlZykpIC8gRFNfU0laRTsKIAogCWZvciAocmluZ19pbmQgPSAwOyByaW5nX2luZCA8IHByaXYtPnJ4X3JpbmdfbnVtOyByaW5nX2luZCsrKSB7CiAJCXJpbmcgPSAmcHJpdi0+cnhfcmluZ1tyaW5nX2luZF07CkBAIC0zNzksNiArMzYwLDkgQEAKIAkJcmluZy0+Y3FuID0gcHJpdi0+cnhfY3FbcmluZ19pbmRdLm1jcS5jcW47CiAKIAkJcmluZy0+c3RyaWRlID0gc3RyaWRlOworCQlpZiAocmluZy0+c3RyaWRlIDw9IFRYQkJfU0laRSkKKwkJCXJpbmctPmJ1ZiArPSBUWEJCX1NJWkU7CisKIAkJcmluZy0+bG9nX3N0cmlkZSA9IGZmcyhyaW5nLT5zdHJpZGUpIC0gMTsKIAkJcmluZy0+YnVmX3NpemUgPSByaW5nLT5zaXplICogcmluZy0+c3RyaWRlOwogCkBAIC00MDUsMzcgKzM4OSwxMCBAQAogCQlyaW5nID0gJnByaXYtPnJ4X3JpbmdbcmluZ19pbmRdOwogCiAJCW1seDRfZW5fdXBkYXRlX3J4X3Byb2RfZGIocmluZyk7Ci0KLQkJLyogQ29uZmlndXJlIFNSUSByZXByZXNlbnRpbmcgdGhlIHJpbmcgKi8KLQkJcmluZy0+c3JxLm1heCAgICA9IHJpbmctPmFjdHVhbF9zaXplOwotCQlyaW5nLT5zcnEubWF4X2dzID0gbWF4X2dzOwotCQlyaW5nLT5zcnEud3FlX3NoaWZ0ID0gaWxvZzIocmluZy0+c3RyaWRlKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgcmluZy0+c3JxLm1heDsgKytpKSB7Ci0JCQluZXh0ID0gZ2V0X3dxZShyaW5nLCBpKTsKLQkJCW5leHQtPm5leHRfd3FlX2luZGV4ID0KLQkJCWNwdV90b19iZTE2KChpICsgMSkgJiAocmluZy0+c3JxLm1heCAtIDEpKTsKLQkJfQotCi0JCWVyciA9IG1seDRfc3JxX2FsbG9jKG1kZXYtPmRldiwgbWRldi0+cHJpdl9wZG4sICZyaW5nLT53cXJlcy5tdHQsCi0JCQkJICAgICByaW5nLT53cXJlcy5kYi5kbWEsICZyaW5nLT5zcnEpOwotCQlpZiAoZXJyKXsKLQkJCWVuX2Vycihwcml2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNycVxuIik7Ci0JCQlyaW5nX2luZC0tOwotCQkJZ290byBlcnJfc3JxOwotCQl9Ci0JCXJpbmctPnNycS5ldmVudCA9IG1seDRfZW5fc3JxX2V2ZW50OwogCX0KIAogCXJldHVybiAwOwogCi1lcnJfc3JxOgotCXdoaWxlIChyaW5nX2luZCA+PSAwKSB7Ci0JCXJpbmcgPSAmcHJpdi0+cnhfcmluZ1tyaW5nX2luZF07Ci0JCW1seDRfc3JxX2ZyZWUobWRldi0+ZGV2LCAmcmluZy0+c3JxKTsKLQkJcmluZ19pbmQtLTsKLQl9Ci0KIGVycl9idWZmZXJzOgogCWZvciAocmluZ19pbmQgPSAwOyByaW5nX2luZCA8IHByaXYtPnJ4X3JpbmdfbnVtOyByaW5nX2luZCsrKQogCQltbHg0X2VuX2ZyZWVfcnhfYnVmKHByaXYsICZwcml2LT5yeF9yaW5nW3JpbmdfaW5kXSk7CkBAIC00NTYsNyArNDEzLDcgQEAKIAogCWtmcmVlKHJpbmctPmxyby5scm9fYXJyKTsKIAltbHg0X2VuX3VubWFwX2J1ZmZlcigmcmluZy0+d3FyZXMuYnVmKTsKLQltbHg0X2ZyZWVfaHdxX3JlcyhtZGV2LT5kZXYsICZyaW5nLT53cXJlcywgcmluZy0+YnVmX3NpemUpOworCW1seDRfZnJlZV9od3FfcmVzKG1kZXYtPmRldiwgJnJpbmctPndxcmVzLCByaW5nLT5idWZfc2l6ZSArIFRYQkJfU0laRSk7CiAJdmZyZWUocmluZy0+cnhfaW5mbyk7CiAJcmluZy0+cnhfaW5mbyA9IE5VTEw7CiB9CkBAIC00NjQsMTAgKzQyMSw5IEBACiB2b2lkIG1seDRfZW5fZGVhY3RpdmF0ZV9yeF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IG1seDRfZW5fcnhfcmluZyAqcmluZykKIHsKLQlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OwotCi0JbWx4NF9zcnFfZnJlZShtZGV2LT5kZXYsICZyaW5nLT5zcnEpOwogCW1seDRfZW5fZnJlZV9yeF9idWYocHJpdiwgcmluZyk7CisJaWYgKHJpbmctPnN0cmlkZSA8PSBUWEJCX1NJWkUpCisJCXJpbmctPmJ1ZiAtPSBUWEJCX1NJWkU7CiAJbWx4NF9lbl9kZXN0cm95X2FsbG9jYXRvcihwcml2LCByaW5nKTsKIH0KIApAQCAtODM2LDI1ICs3OTIsOCBAQAogCiAvKiBSU1MgcmVsYXRlZCBmdW5jdGlvbnMgKi8KIAotLyogQ2FsY3VsYXRlIHJzcyBzaXplIGFuZCBtYXAgZWFjaCBlbnRyeSBpbiByc3MgdGFibGUgdG8gcnggcmluZyAqLwotdm9pZCBtbHg0X2VuX3NldF9kZWZhdWx0X3Jzc19tYXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IG1seDRfZW5fcnNzX21hcCAqcnNzX21hcCwKLQkJCQkgaW50IG51bV9lbnRyaWVzLCBpbnQgbnVtX3JpbmdzKQotewotCWludCBpOwotCi0JcnNzX21hcC0+c2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhudW1fZW50cmllcyk7Ci0JZW5fZGJnKERSViwgcHJpdiwgIlNldHRpbmcgZGVmYXVsdCBSU1MgbWFwIG9mICVkIGVudGlyZXNcbiIsCi0JICAgICAgIHJzc19tYXAtPnNpemUpOwotCi0JZm9yIChpID0gMDsgaSA8IHJzc19tYXAtPnNpemU7IGkrKykgewotCQlyc3NfbWFwLT5tYXBbaV0gPSBpICUgbnVtX3JpbmdzOwotCQllbl9kYmcoRFJWLCBwcml2LCAiRW50cnkgJWQgLS0tPiByaW5nICVkXG4iLCBpLCByc3NfbWFwLT5tYXBbaV0pOwotCX0KLX0KLQotc3RhdGljIGludCBtbHg0X2VuX2NvbmZpZ19yc3NfcXAoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKLQkJCQkgaW50IHFwbiwgaW50IHNycW4sIGludCBjcW4sCitzdGF0aWMgaW50IG1seDRfZW5fY29uZmlnX3Jzc19xcChzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LCBpbnQgcXBuLAorCQkJCSBzdHJ1Y3QgbWx4NF9lbl9yeF9yaW5nICpyaW5nLAogCQkJCSBlbnVtIG1seDRfcXBfc3RhdGUgKnN0YXRlLAogCQkJCSBzdHJ1Y3QgbWx4NF9xcCAqcXApCiB7CkBAIC04NzYsMTMgKzgxNSwxNiBAQAogCXFwLT5ldmVudCA9IG1seDRfZW5fc3FwX2V2ZW50OwogCiAJbWVtc2V0KGNvbnRleHQsIDAsIHNpemVvZiAqY29udGV4dCk7Ci0JbWx4NF9lbl9maWxsX3FwX2NvbnRleHQocHJpdiwgMCwgMCwgMCwgMCwgcXBuLCBjcW4sIHNycW4sIGNvbnRleHQpOworCW1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHByaXYsIHJpbmctPnNpemUsIHJpbmctPnN0cmlkZSwgMCwgMCwKKwkJCQlxcG4sIHJpbmctPmNxbiwgY29udGV4dCk7CisJY29udGV4dC0+ZGJfcmVjX2FkZHIgPSBjcHVfdG9fYmU2NChyaW5nLT53cXJlcy5kYi5kbWEpOwogCi0JZXJyID0gbWx4NF9xcF90b19yZWFkeShtZGV2LT5kZXYsICZwcml2LT5yZXMubXR0LCBjb250ZXh0LCBxcCwgc3RhdGUpOworCWVyciA9IG1seDRfcXBfdG9fcmVhZHkobWRldi0+ZGV2LCAmcmluZy0+d3FyZXMubXR0LCBjb250ZXh0LCBxcCwgc3RhdGUpOwogCWlmIChlcnIpIHsKIAkJbWx4NF9xcF9yZW1vdmUobWRldi0+ZGV2LCBxcCk7CiAJCW1seDRfcXBfZnJlZShtZGV2LT5kZXYsIHFwKTsKIAl9CisJbWx4NF9lbl91cGRhdGVfcnhfcHJvZF9kYihyaW5nKTsKIG91dDoKIAlrZnJlZShjb250ZXh0KTsKIAlyZXR1cm4gZXJyOwpAQCAtODk4LDIzICs4NDAsMjIgQEAKIAl2b2lkICpwdHI7CiAJaW50IHJzc194b3IgPSBtZGV2LT5wcm9maWxlLnJzc194b3I7CiAJdTggcnNzX21hc2sgPSBtZGV2LT5wcm9maWxlLnJzc19tYXNrOwotCWludCBpLCBzcnFuLCBxcG4sIGNxbjsKKwlpbnQgaSwgcXBuOwogCWludCBlcnIgPSAwOwogCWludCBnb29kX3FwcyA9IDA7CiAKIAllbl9kYmcoRFJWLCBwcml2LCAiQ29uZmlndXJpbmcgcnNzIHN0ZWVyaW5nXG4iKTsKLQllcnIgPSBtbHg0X3FwX3Jlc2VydmVfcmFuZ2UobWRldi0+ZGV2LCByc3NfbWFwLT5zaXplLAotCQkJCSAgICByc3NfbWFwLT5zaXplLCAmcnNzX21hcC0+YmFzZV9xcG4pOworCWVyciA9IG1seDRfcXBfcmVzZXJ2ZV9yYW5nZShtZGV2LT5kZXYsIHByaXYtPnJ4X3JpbmdfbnVtLAorCQkJCSAgICBwcml2LT5yeF9yaW5nX251bSwKKwkJCQkgICAgJnJzc19tYXAtPmJhc2VfcXBuKTsKIAlpZiAoZXJyKSB7Ci0JCWVuX2Vycihwcml2LCAiRmFpbGVkIHJlc2VydmluZyAlZCBxcHNcbiIsIHJzc19tYXAtPnNpemUpOworCQllbl9lcnIocHJpdiwgIkZhaWxlZCByZXNlcnZpbmcgJWQgcXBzXG4iLCBwcml2LT5yeF9yaW5nX251bSk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IHJzc19tYXAtPnNpemU7IGkrKykgewotCQljcW4gPSBwcml2LT5yeF9yaW5nW3Jzc19tYXAtPm1hcFtpXV0uY3FuOwotCQlzcnFuID0gcHJpdi0+cnhfcmluZ1tyc3NfbWFwLT5tYXBbaV1dLnNycS5zcnFuOworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX251bTsgaSsrKSB7CiAJCXFwbiA9IHJzc19tYXAtPmJhc2VfcXBuICsgaTsKLQkJZXJyID0gbWx4NF9lbl9jb25maWdfcnNzX3FwKHByaXYsIHFwbiwgc3JxbiwgY3FuLAorCQllcnIgPSBtbHg0X2VuX2NvbmZpZ19yc3NfcXAocHJpdiwgcXBuLCAmcHJpdi0+cnhfcmluZ1tpXSwKIAkJCQkJICAgICZyc3NfbWFwLT5zdGF0ZVtpXSwKIAkJCQkJICAgICZyc3NfbWFwLT5xcHNbaV0pOwogCQlpZiAoZXJyKQpAQCAtOTM3LDExICs4NzgsMTEgQEAKIAl9CiAJcnNzX21hcC0+aW5kaXJfcXAuZXZlbnQgPSBtbHg0X2VuX3NxcF9ldmVudDsKIAltbHg0X2VuX2ZpbGxfcXBfY29udGV4dChwcml2LCAwLCAwLCAwLCAxLCBwcml2LT5iYXNlX3FwbiwKLQkJCQlwcml2LT5yeF9yaW5nWzBdLmNxbiwgMCwgJmNvbnRleHQpOworCQkJCXByaXYtPnJ4X3JpbmdbMF0uY3FuLCAmY29udGV4dCk7CiAKIAlwdHIgPSAoKHZvaWQgKikgJmNvbnRleHQpICsgMHgzYzsKIAlyc3NfY29udGV4dCA9IChzdHJ1Y3QgbWx4NF9lbl9yc3NfY29udGV4dCAqKSBwdHI7Ci0JcnNzX2NvbnRleHQtPmJhc2VfcXBuID0gY3B1X3RvX2JlMzIoaWxvZzIocnNzX21hcC0+c2l6ZSkgPDwgMjQgfAorCXJzc19jb250ZXh0LT5iYXNlX3FwbiA9IGNwdV90b19iZTMyKGlsb2cyKHByaXYtPnJ4X3JpbmdfbnVtKSA8PCAyNCB8CiAJCQkJCSAgICAocnNzX21hcC0+YmFzZV9xcG4pKTsKIAlyc3NfY29udGV4dC0+ZGVmYXVsdF9xcG4gPSBjcHVfdG9fYmUzMihyc3NfbWFwLT5iYXNlX3Fwbik7CiAJcnNzX2NvbnRleHQtPmhhc2hfZm4gPSByc3NfeG9yICYgMHgzOwpAQCAtOTY4LDcgKzkwOSw3IEBACiAJCW1seDRfcXBfcmVtb3ZlKG1kZXYtPmRldiwgJnJzc19tYXAtPnFwc1tpXSk7CiAJCW1seDRfcXBfZnJlZShtZGV2LT5kZXYsICZyc3NfbWFwLT5xcHNbaV0pOwogCX0KLQltbHg0X3FwX3JlbGVhc2VfcmFuZ2UobWRldi0+ZGV2LCByc3NfbWFwLT5iYXNlX3FwbiwgcnNzX21hcC0+c2l6ZSk7CisJbWx4NF9xcF9yZWxlYXNlX3JhbmdlKG1kZXYtPmRldiwgcnNzX21hcC0+YmFzZV9xcG4sIHByaXYtPnJ4X3JpbmdfbnVtKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05ODQsMTMgKzkyNSwxMyBAQAogCW1seDRfcXBfZnJlZShtZGV2LT5kZXYsICZyc3NfbWFwLT5pbmRpcl9xcCk7CiAJbWx4NF9xcF9yZWxlYXNlX3JhbmdlKG1kZXYtPmRldiwgcHJpdi0+YmFzZV9xcG4sIDEpOwogCi0JZm9yIChpID0gMDsgaSA8IHJzc19tYXAtPnNpemU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeF9yaW5nX251bTsgaSsrKSB7CiAJCW1seDRfcXBfbW9kaWZ5KG1kZXYtPmRldiwgTlVMTCwgcnNzX21hcC0+c3RhdGVbaV0sCiAJCQkgICAgICAgTUxYNF9RUF9TVEFURV9SU1QsIE5VTEwsIDAsIDAsICZyc3NfbWFwLT5xcHNbaV0pOwogCQltbHg0X3FwX3JlbW92ZShtZGV2LT5kZXYsICZyc3NfbWFwLT5xcHNbaV0pOwogCQltbHg0X3FwX2ZyZWUobWRldi0+ZGV2LCAmcnNzX21hcC0+cXBzW2ldKTsKIAl9Ci0JbWx4NF9xcF9yZWxlYXNlX3JhbmdlKG1kZXYtPmRldiwgcnNzX21hcC0+YmFzZV9xcG4sIHJzc19tYXAtPnNpemUpOworCW1seDRfcXBfcmVsZWFzZV9yYW5nZShtZGV2LT5kZXYsIHJzc19tYXAtPmJhc2VfcXBuLCBwcml2LT5yeF9yaW5nX251bSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl90eC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl90eC5jCmluZGV4IDYyMjA4NDAuLjhjNzI3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fdHguYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3R4LmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiBpbnQgbWx4NF9lbl9hY3RpdmF0ZV90eF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcsCi0JCQkgICAgIGludCBjcSwgaW50IHNycW4pCisJCQkgICAgIGludCBjcSkKIHsKIAlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OwogCWludCBlcnI7CkBAIC0xNjgsNyArMTY4LDcgQEAKIAlyaW5nLT5kb29yYmVsbF9xcG4gPSBzd2FiMzIocmluZy0+cXAucXBuIDw8IDgpOwogCiAJbWx4NF9lbl9maWxsX3FwX2NvbnRleHQocHJpdiwgcmluZy0+c2l6ZSwgcmluZy0+c3RyaWRlLCAxLCAwLCByaW5nLT5xcG4sCi0JCQkJcmluZy0+Y3FuLCBzcnFuLCAmcmluZy0+Y29udGV4dCk7CisJCQkJcmluZy0+Y3FuLCAmcmluZy0+Y29udGV4dCk7CiAKIAllcnIgPSBtbHg0X3FwX3RvX3JlYWR5KG1kZXYtPmRldiwgJnJpbmctPndxcmVzLm10dCwgJnJpbmctPmNvbnRleHQsCiAJCQkgICAgICAgJnJpbmctPnFwLCAmcmluZy0+cXBfc3RhdGUpOwpAQCAtNTg5LDcgKzU4OSw3IEBACiAJcmV0dXJuIHNrYl90eF9oYXNoKGRldiwgc2tiKTsKIH0KIAotaW50IG1seDRfZW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgbWx4NF9lbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG1seDRfZW5fZGV2ICptZGV2ID0gcHJpdi0+bWRldjsKQEAgLTc2Niw3ICs3NjYsNyBAQAogCS8qIFBvbGwgQ1EgaGVyZSAqLwogCW1seDRfZW5feG1pdF9wb2xsKHByaXYsIHR4X2luZCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB0eF9kcm9wOgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21seDRfZW4uaCBiL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCmluZGV4IGM3YzVlODYuLjQzNzYxNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NF9lbi5oCkBAIC05NSw4ICs5NSw2IEBACiAjZGVmaW5lIE1MWDRfRU5fUEFHRV9TSVpFCSgxIDw8IE1MWDRfRU5fUEFHRV9TSElGVCkKICNkZWZpbmUgTUFYX1RYX1JJTkdTCQkxNgogI2RlZmluZSBNQVhfUlhfUklOR1MJCTE2Ci0jZGVmaW5lIE1BWF9SU1NfTUFQX1NJWkUJNjQKLSNkZWZpbmUgUlNTX0ZBQ1RPUgkJMgogI2RlZmluZSBUWEJCX1NJWkUJCTY0CiAjZGVmaW5lIEhFQURST09NCQkoMjA0OCAvIFRYQkJfU0laRSArIDEpCiAjZGVmaW5lIFNUQU1QX1NUUklERQkJNjQKQEAgLTI3NiwxMyArMjc0LDExIEBACiB9OwogCiBzdHJ1Y3QgbWx4NF9lbl9yeF9kZXNjIHsKLQlzdHJ1Y3QgbWx4NF93cWVfc3JxX25leHRfc2VnIG5leHQ7CiAJLyogYWN0dWFsIG51bWJlciBvZiBlbnRyaWVzIGRlcGVuZHMgb24gcnggcmluZyBzdHJpZGUgKi8KIAlzdHJ1Y3QgbWx4NF93cWVfZGF0YV9zZWcgZGF0YVswXTsKIH07CiAKIHN0cnVjdCBtbHg0X2VuX3J4X3JpbmcgewotCXN0cnVjdCBtbHg0X3NycSBzcnE7CiAJc3RydWN0IG1seDRfaHdxX3Jlc291cmNlcyB3cXJlczsKIAlzdHJ1Y3QgbWx4NF9lbl9yeF9hbGxvYyBwYWdlX2FsbG9jW01MWDRfRU5fTUFYX1JYX0ZSQUdTXTsKIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvOwpAQCAtMzc3LDExICszNzMsOSBAQAogCiAKIHN0cnVjdCBtbHg0X2VuX3Jzc19tYXAgewotCWludCBzaXplOwogCWludCBiYXNlX3FwbjsKLQl1MTYgbWFwW01BWF9SU1NfTUFQX1NJWkVdOwotCXN0cnVjdCBtbHg0X3FwIHFwc1tNQVhfUlNTX01BUF9TSVpFXTsKLQllbnVtIG1seDRfcXBfc3RhdGUgc3RhdGVbTUFYX1JTU19NQVBfU0laRV07CisJc3RydWN0IG1seDRfcXAgcXBzW01BWF9SWF9SSU5HU107CisJZW51bSBtbHg0X3FwX3N0YXRlIHN0YXRlW01BWF9SWF9SSU5HU107CiAJc3RydWN0IG1seDRfcXAgaW5kaXJfcXA7CiAJZW51bSBtbHg0X3FwX3N0YXRlIGluZGlyX3N0YXRlOwogfTsKQEAgLTUyNCwxNCArNTE4LDE0IEBACiB2b2lkIG1seDRfZW5fcG9sbF90eF9jcSh1bnNpZ25lZCBsb25nIGRhdGEpOwogdm9pZCBtbHg0X2VuX3R4X2lycShzdHJ1Y3QgbWx4NF9jcSAqbWNxKTsKIHUxNiBtbHg0X2VuX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBtbHg0X2VuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCBtbHg0X2VuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGludCBtbHg0X2VuX2NyZWF0ZV90eF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcsCiAJCQkgICB1MzIgc2l6ZSwgdTE2IHN0cmlkZSk7CiB2b2lkIG1seDRfZW5fZGVzdHJveV90eF9yaW5nKHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcpOwogaW50IG1seDRfZW5fYWN0aXZhdGVfdHhfcmluZyhzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nLAotCQkJICAgICBpbnQgY3EsIGludCBzcnFuKTsKKwkJCSAgICAgaW50IGNxKTsKIHZvaWQgbWx4NF9lbl9kZWFjdGl2YXRlX3R4X3Jpbmcoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgbWx4NF9lbl90eF9yaW5nICpyaW5nKTsKIApAQCAtNTQ4LDE2ICs1NDIsMTMgQEAKIAkJCSAgaW50IGJ1ZGdldCk7CiBpbnQgbWx4NF9lbl9wb2xsX3J4X2NxKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiB2b2lkIG1seDRfZW5fZmlsbF9xcF9jb250ZXh0KHN0cnVjdCBtbHg0X2VuX3ByaXYgKnByaXYsIGludCBzaXplLCBpbnQgc3RyaWRlLAotCQkJICAgICBpbnQgaXNfdHgsIGludCByc3MsIGludCBxcG4sIGludCBjcW4sIGludCBzcnFuLAorCQkJICAgICBpbnQgaXNfdHgsIGludCByc3MsIGludCBxcG4sIGludCBjcW4sCiAJCQkgICAgIHN0cnVjdCBtbHg0X3FwX2NvbnRleHQgKmNvbnRleHQpOwogdm9pZCBtbHg0X2VuX3NxcF9ldmVudChzdHJ1Y3QgbWx4NF9xcCAqcXAsIGVudW0gbWx4NF9ldmVudCBldmVudCk7CiBpbnQgbWx4NF9lbl9tYXBfYnVmZmVyKHN0cnVjdCBtbHg0X2J1ZiAqYnVmKTsKIHZvaWQgbWx4NF9lbl91bm1hcF9idWZmZXIoc3RydWN0IG1seDRfYnVmICpidWYpOwogCiB2b2lkIG1seDRfZW5fY2FsY19yeF9idWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIG1seDRfZW5fc2V0X2RlZmF1bHRfcnNzX21hcChzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2LAotCQkJCSBzdHJ1Y3QgbWx4NF9lbl9yc3NfbWFwICpyc3NfbWFwLAotCQkJCSBpbnQgbnVtX2VudHJpZXMsIGludCBudW1fcmluZ3MpOwogaW50IG1seDRfZW5fY29uZmlnX3Jzc19zdGVlcihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KTsKIHZvaWQgbWx4NF9lbl9yZWxlYXNlX3Jzc19zdGVlcihzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2KTsKIGludCBtbHg0X2VuX2ZyZWVfdHhfYnVmKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBtbHg0X2VuX3R4X3JpbmcgKnJpbmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKaW5kZXggMGYzMmRiMy4uYjYyZTYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCkBAIC0xMDY2LDQwICsxMDY2LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHR4cV9zZXRfd3JyKHN0cnVjdCB0eF9xdWV1ZSAqdHhxLCBpbnQgd2VpZ2h0KQotewotCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IHR4cV90b19tcCh0eHEpOwotCWludCBvZmY7Ci0JdTMyIHZhbDsKLQotCS8qCi0JICogVHVybiBvZmYgZml4ZWQgcHJpb3JpdHkgbW9kZS4KLQkgKi8KLQlvZmYgPSAwOwotCXN3aXRjaCAobXAtPnNoYXJlZC0+dHhfYndfY29udHJvbCkgewotCWNhc2UgVFhfQldfQ09OVFJPTF9PTERfTEFZT1VUOgotCQlvZmYgPSBUWFFfRklYX1BSSU9fQ09ORjsKLQkJYnJlYWs7Ci0JY2FzZSBUWF9CV19DT05UUk9MX05FV19MQVlPVVQ6Ci0JCW9mZiA9IFRYUV9GSVhfUFJJT19DT05GX01PVkVEOwotCQlicmVhazsKLQl9Ci0KLQlpZiAob2ZmKSB7Ci0JCXZhbCA9IHJkbHAobXAsIG9mZik7Ci0JCXZhbCAmPSB+KDEgPDwgdHhxLT5pbmRleCk7Ci0JCXdybHAobXAsIG9mZiwgdmFsKTsKLQotCQkvKgotCQkgKiBDb25maWd1cmUgV1JSIHdlaWdodCBmb3IgdGhpcyBxdWV1ZS4KLQkJICovCi0KLQkJdmFsID0gcmRscChtcCwgb2ZmKTsKLQkJdmFsID0gKHZhbCAmIH4weGZmKSB8ICh3ZWlnaHQgJiAweGZmKTsKLQkJd3JscChtcCwgVFhRX0JXX1dSUl9DT05GKHR4cS0+aW5kZXgpLCB2YWwpOwotCX0KLX0KLQogCiAvKiBtaWkgbWFuYWdlbWVudCBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBtdjY0M3h4X2V0aF9lcnJfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IDFmNmUzNmUuLjY5MzBjODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtNzUsNyArNzUsNyBAQAogI2luY2x1ZGUgIm15cmkxMGdlX21jcC5oIgogI2luY2x1ZGUgIm15cmkxMGdlX21jcF9nZW5faGVhZGVyLmgiCiAKLSNkZWZpbmUgTVlSSTEwR0VfVkVSU0lPTl9TVFIgIjEuNS4wLTEuNDE4IgorI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS41LjAtMS40MzIiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiTXlyaWNvbSAxMEcgZHJpdmVyICgxMEdiRSkiKTsKIE1PRFVMRV9BVVRIT1IoIk1haW50YWluZXI6IGhlbHBAbXlyaS5jb20iKTsKQEAgLTE4OCw2ICsxODgsNyBAQAogCWRtYV9hZGRyX3QgZndfc3RhdHNfYnVzOwogCWludCB3YXRjaGRvZ190eF9kb25lOwogCWludCB3YXRjaGRvZ190eF9yZXE7CisJaW50IHdhdGNoZG9nX3J4X2RvbmU7CiAjaWZkZWYgQ09ORklHX01ZUkkxMEdFX0RDQQogCWludCBjYWNoZWRfZGNhX3RhZzsKIAlpbnQgY3B1OwpAQCAtMjU2LDYgKzI1Nyw3IEBACiAJdTMyIGxpbmtfY2hhbmdlczsKIAl1MzIgbXNnX2VuYWJsZTsKIAl1bnNpZ25lZCBpbnQgYm9hcmRfbnVtYmVyOworCWludCByZWJvb3RlZDsKIH07CiAKIHN0YXRpYyBjaGFyICpteXJpMTBnZV9md191bmFsaWduZWQgPSAibXlyaTEwZ2VfZXRocF96OGUuZGF0IjsKQEAgLTM1OCw3ICszNjAsOCBAQAogI2RlZmluZSBteXJpMTBnZV9waW9fY29weSh0byxmcm9tLHNpemUpIF9faW93cml0ZTY0X2NvcHkodG8sZnJvbSxzaXplLzgpCiAKIHN0YXRpYyB2b2lkIG15cmkxMGdlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbXlyaTEwZ2Vfc3dfdHNvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IG15cmkxMGdlX3N3X3RzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYmUzMihfX2JlMzIgdmFsLCBfX2JlMzIgX19pb21lbSAqIHApCiB7CkBAIC0yNTUyLDE3ICsyNTU1LDIyIEBACiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOwotCW9sZF9kb3duX2NudCA9IG1ncC0+ZG93bl9jbnQ7Ci0JbWIoKTsKLQlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfRVRIRVJORVRfRE9XTiwgJmNtZCwgMCk7Ci0JaWYgKHN0YXR1cykKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IGJyaW5nIGRvd24gbGlua1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJaWYgKG1ncC0+cmVib290ZWQgPT0gMCkgeworCQlvbGRfZG93bl9jbnQgPSBtZ3AtPmRvd25fY250OworCQltYigpOworCQlzdGF0dXMgPQorCQkgICAgbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX0VUSEVSTkVUX0RPV04sICZjbWQsIDApOworCQlpZiAoc3RhdHVzKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIm15cmkxMGdlOiAlczogQ291bGRuJ3QgYnJpbmcgZG93biBsaW5rXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CiAKLQl3YWl0X2V2ZW50X3RpbWVvdXQobWdwLT5kb3duX3dxLCBvbGRfZG93bl9jbnQgIT0gbWdwLT5kb3duX2NudCwgSFopOwotCWlmIChvbGRfZG93bl9jbnQgPT0gbWdwLT5kb3duX2NudCkKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXMgbmV2ZXIgZ290IGRvd24gaXJxXG4iLCBkZXYtPm5hbWUpOwotCisJCXdhaXRfZXZlbnRfdGltZW91dChtZ3AtPmRvd25fd3EsIG9sZF9kb3duX2NudCAhPSBtZ3AtPmRvd25fY250LAorCQkJCSAgIEhaKTsKKwkJaWYgKG9sZF9kb3duX2NudCA9PSBtZ3AtPmRvd25fY250KQorCQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXMgbmV2ZXIgZ290IGRvd24gaXJxXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJfQogCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAlteXJpMTBnZV9mcmVlX2lycShtZ3ApOwogCWZvciAoaSA9IDA7IGkgPCBtZ3AtPm51bV9zbGljZXM7IGkrKykKQEAgLTI2NDksNyArMjY1Nyw4IEBACiAgKiBpdCBhbmQgdHJ5IGFnYWluLgogICovCiAKLXN0YXRpYyBpbnQgbXlyaTEwZ2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG15cmkxMGdlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbXlyaTEwZ2Vfc2xpY2Vfc3RhdGUgKnNzOwpAQCAtMjc0OCw3ICsyNzU3LDcgQEAKIAkJCQkvKiBUaGUgcGFja2V0IGlzIGdvbmUsIHNvIHdlIG11c3QKIAkJCQkgKiByZXR1cm4gMCAqLwogCQkJCXNzLT5zdGF0cy50eF9kcm9wcGVkICs9IDE7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJCS8qIGFkanVzdCB0aGUgbGVuIHRvIGFjY291bnQgZm9yIHRoZSB6ZXJvIHBhZAogCQkJICogc28gdGhhdCB0aGUgbmljIGNhbiBrbm93IGhvdyBsb25nIGl0IGlzICovCkBAIC0yODkyLDcgKzI5MDEsNyBAQAogCQl0eC0+c3RvcF9xdWV1ZSsrOwogCQluZXRpZl90eF9zdG9wX3F1ZXVlKG5ldGRldl9xdWV1ZSk7CiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGFib3J0X2xpbmVhcml6ZToKIAkvKiBGcmVlIGFueSBETUEgcmVzb3VyY2VzIHdlJ3ZlIGFsbG9jZWQgYW5kIGNsZWFyIG91dCB0aGUgc2tiCkBAIC0yOTM2LDE2ICsyOTQ1LDE3IEBACiBkcm9wOgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJc3MtPnN0YXRzLnR4X2Ryb3BwZWQgKz0gMTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB9CiAKLXN0YXRpYyBpbnQgbXlyaTEwZ2Vfc3dfdHNvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbXlyaTEwZ2Vfc3dfdHNvKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza19idWZmICpzZWdzLCAqY3VycjsKIAlzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbXlyaTEwZ2Vfc2xpY2Vfc3RhdGUgKnNzOwotCWludCBzdGF0dXM7CisJbmV0ZGV2X3R4X3Qgc3RhdHVzOwogCiAJc2VncyA9IHNrYl9nc29fc2VnbWVudChza2IsIGRldi0+ZmVhdHVyZXMgJiB+TkVUSUZfRl9UU082KTsKIAlpZiAoSVNfRVJSKHNlZ3MpKQpAQCAtMjk2OCwxMyArMjk3OCwxMyBAQAogCQl9CiAJfQogCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZHJvcDoKIAlzcyA9ICZtZ3AtPnNzW3NrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpXTsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCXNzLT5zdGF0cy50eF9kcm9wcGVkICs9IDE7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpteXJpMTBnZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTM0MjcsMTIgKzM0MzcsMTMgQEAKIAkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteXJpMTBnZV9wcml2LCB3YXRjaGRvZ193b3JrKTsKIAlzdHJ1Y3QgbXlyaTEwZ2VfdHhfYnVmICp0eDsKIAl1MzIgcmVib290OwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cywgcmVib290ZWQ7CiAJaW50IGk7CiAJdTE2IGNtZCwgdmVuZG9yOwogCiAJbWdwLT53YXRjaGRvZ19yZXNldHMrKzsKIAlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwlyZWJvb3RlZCA9IDA7CiAJaWYgKChjbWQgJiBQQ0lfQ09NTUFORF9NQVNURVIpID09IDApIHsKIAkJLyogQnVzIG1hc3RlciBETUEgZGlzYWJsZWQ/ICBDaGVjayB0byBzZWUKIAkJICogaWYgdGhlIGNhcmQgcmVib290ZWQgZHVlIHRvIGEgcGFyaXR5IGVycm9yCkBAIC0zNDQ0LDkgKzM0NTUsMTIgQEAKIAkJICAgICAgIG15cmkxMGdlX3Jlc2V0X3JlY292ZXIgPyAiICIgOiAiIG5vdCIpOwogCQlpZiAobXlyaTEwZ2VfcmVzZXRfcmVjb3ZlciA9PSAwKQogCQkJcmV0dXJuOwotCisJCXJ0bmxfbG9jaygpOworCQltZ3AtPnJlYm9vdGVkID0gMTsKKwkJcmVib290ZWQgPSAxOworCQlteXJpMTBnZV9jbG9zZShtZ3AtPmRldik7CiAJCW15cmkxMGdlX3Jlc2V0X3JlY292ZXItLTsKLQorCQltZ3AtPnJlYm9vdGVkID0gMDsKIAkJLyoKIAkJICogQSByZWJvb3RlZCBuaWMgd2lsbCBjb21lIGJhY2sgd2l0aCBjb25maWcgc3BhY2UgYXMKIAkJICogaXQgd2FzIGFmdGVyIHBvd2VyIHdhcyBhcHBsaWVkIHRvIFBDSWUgYnVzLgpAQCAtMzQ5NCw4ICszNTA4LDEwIEBACiAJCX0KIAl9CiAKLQlydG5sX2xvY2soKTsKLQlteXJpMTBnZV9jbG9zZShtZ3AtPmRldik7CisJaWYgKCFyZWJvb3RlZCkgeworCQlydG5sX2xvY2soKTsKKwkJbXlyaTEwZ2VfY2xvc2UobWdwLT5kZXYpOworCX0KIAlzdGF0dXMgPSBteXJpMTBnZV9sb2FkX2Zpcm13YXJlKG1ncCwgMSk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIsCkBAIC0zNTE2LDEyICszNTMyLDE0IEBACiB7CiAJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKIAlzdHJ1Y3QgbXlyaTEwZ2Vfc2xpY2Vfc3RhdGUgKnNzOwotCWludCBpLCByZXNldF9uZWVkZWQ7CisJaW50IGksIHJlc2V0X25lZWRlZCwgYnVzeV9zbGljZV9jbnQ7CiAJdTMyIHJ4X3BhdXNlX2NudDsKKwl1MTYgY21kOwogCiAJbWdwID0gKHN0cnVjdCBteXJpMTBnZV9wcml2ICopYXJnOwogCiAJcnhfcGF1c2VfY250ID0gbnRvaGwobWdwLT5zc1swXS5md19zdGF0cy0+ZHJvcHBlZF9wYXVzZSk7CisJYnVzeV9zbGljZV9jbnQgPSAwOwogCWZvciAoaSA9IDAsIHJlc2V0X25lZWRlZCA9IDA7CiAJICAgICBpIDwgbWdwLT5udW1fc2xpY2VzICYmIHJlc2V0X25lZWRlZCA9PSAwOyArK2kpIHsKIApAQCAtMzU1OSw4ICszNTc3LDIyIEBACiAJCQkJcmVzZXRfbmVlZGVkID0gMTsKIAkJCX0KIAkJfQorCQlpZiAoc3MtPndhdGNoZG9nX3R4X2RvbmUgIT0gc3MtPnR4LmRvbmUgfHwKKwkJICAgIHNzLT53YXRjaGRvZ19yeF9kb25lICE9IHNzLT5yeF9kb25lLmNudCkgeworCQkJYnVzeV9zbGljZV9jbnQrKzsKKwkJfQogCQlzcy0+d2F0Y2hkb2dfdHhfZG9uZSA9IHNzLT50eC5kb25lOwogCQlzcy0+d2F0Y2hkb2dfdHhfcmVxID0gc3MtPnR4LnJlcTsKKwkJc3MtPndhdGNoZG9nX3J4X2RvbmUgPSBzcy0+cnhfZG9uZS5jbnQ7CisJfQorCS8qIGlmIHdlJ3ZlIHNlbnQgb3IgcmVjZWl2ZWQgbm8gdHJhZmZpYywgcG9sbCB0aGUgTklDIHRvCisJICogZW5zdXJlIGl0IGlzIHN0aWxsIHRoZXJlLiAgT3RoZXJ3aXNlLCB3ZSByaXNrIG5vdCBub3RpY2luZworCSAqIGFuIGVycm9yIGluIGEgdGltZWx5IGZhc2hpb24gKi8KKwlpZiAoYnVzeV9zbGljZV9jbnQgPT0gMCkgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJaWYgKChjbWQgJiBQQ0lfQ09NTUFORF9NQVNURVIpID09IDApIHsKKwkJCXJlc2V0X25lZWRlZCA9IDE7CisJCX0KIAl9CiAJbWdwLT53YXRjaGRvZ19wYXVzZSA9IHJ4X3BhdXNlX2NudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCA1ZjA3NThiLi4yOWViZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYworKysgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJRFRYKCgidGJ1c3k9MCwgcmV0dXJuaW5nIDBcbiIpKTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5pcnFfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIENyZWF0ZSB0aGUgTXlyaU5ldCBNQUMgaGVhZGVyIGZvciBhbiBhcmJpdHJhcnkgcHJvdG9jb2wgbGF5ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCA3OGMwODgzLi5iMjcyMmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC02MjEsNyArNjIxLDcgQEAKIHN0YXRpYyB2b2lkIGZyZWVfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJlaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaW5pdF9yZWdpc3RlcnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIHZvaWQgbmV0ZGV2X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3N0YXR1cyk7CiBzdGF0aWMgaW50IG5hdHNlbWlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwpAQCAtMjA3OSw3ICsyMDc5LDcgQEAKIAlyZWluaXRfcngoZGV2KTsKIH0KIAotc3RhdGljIGludCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICogaW9hZGRyID0gbnNfaW9hZGRyKGRldik7CkBAIC0yMTI1LDcgKzIxMjUsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZC5cbiIsCiAJCQlkZXYtPm5hbWUsIG5wLT5jdXJfdHgsIGVudHJ5KTsKIAl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgbmV0ZGV2X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTMwNTMsMTIgKzMwNTMsMTAgQEAKIAogCXN3aXRjaChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgkJLyogR2V0IGFkZHJlc3Mgb2YgTUlJIFBIWSBpbiB1c2UuICovCi0JY2FzZSBTSU9DREVWUFJJVkFURToJCS8qIGZvciBiaW5hcnkgY29tcGF0LCByZW1vdmUgaW4gMi41ICovCiAJCWRhdGEtPnBoeV9pZCA9IG5wLT5waHlfYWRkcl9leHRlcm5hbDsKIAkJLyogRmFsbCBUaHJvdWdoICovCiAKIAljYXNlIFNJT0NHTUlJUkVHOgkJLyogUmVhZCBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCWNhc2UgU0lPQ0RFVlBSSVZBVEUrMToJCS8qIGZvciBiaW5hcnkgY29tcGF0LCByZW1vdmUgaW4gMi41ICovCiAJCS8qIFRoZSBwaHlfaWQgaXMgbm90IGVub3VnaCB0byB1bmlxdWVseSBpZGVudGlmeQogCQkgKiB0aGUgaW50ZW5kZWQgdGFyZ2V0LiBUaGVyZWZvcmUgdGhlIGNvbW1hbmQgaXMgc2VudCB0bwogCQkgKiB0aGUgZ2l2ZW4gbWlpIG9uIHRoZSBjdXJyZW50IHBvcnQuCkBAIC0zMDc3LDkgKzMwNzUsNiBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCWNhc2UgU0lPQ0RFVlBSSVZBVEUrMjoJCS8qIGZvciBiaW5hcnkgY29tcGF0LCByZW1vdmUgaW4gMi41ICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCWlmIChkZXYtPmlmX3BvcnQgPT0gUE9SVF9UUCkgewogCQkJaWYgKChkYXRhLT5waHlfaWQgJiAweDFmKSA9PSBucC0+cGh5X2FkZHJfZXh0ZXJuYWwpIHsKICAJCQkJaWYgKChkYXRhLT5yZWdfbnVtICYgMHgxZikgPT0gTUlJX0FEVkVSVElTRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHgtZXRoLmMgYi9kcml2ZXJzL25ldC9uZXR4LWV0aC5jCmluZGV4IDk0NjM2NmQuLjlmNDIzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHgtZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eC1ldGguYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBuZXR4X2V0aF9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCmluZGV4IGNmMDFhOTEuLjExZDk0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiAjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTE5LDE2ICsyMCwxMCBAQAogIyBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgogIyBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KICMgCi0jIENvbnRhY3QgSW5mb3JtYXRpb246Ci0jICAgIGluZm9AbmV0eGVuLmNvbQotIyBOZXRYZW4gSW5jLAotIyAxODkyMiBGb3JnZSBEcml2ZQotIyBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSMKICMKIAogCiBvYmotJChDT05GSUdfTkVUWEVOX05JQykgOj0gbmV0eGVuX25pYy5vCiAKIG5ldHhlbl9uaWMteSA6PSBuZXR4ZW5fbmljX2h3Lm8gbmV0eGVuX25pY19tYWluLm8gbmV0eGVuX25pY19pbml0Lm8gXAotCW5ldHhlbl9uaWNfZXRodG9vbC5vIG5ldHhlbl9uaWNfbml1Lm8gbmV0eGVuX25pY19jdHgubworCW5ldHhlbl9uaWNfZXRodG9vbC5vIG5ldHhlbl9uaWNfY3R4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IGE5YzFmY2MuLjczODRmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMCwxMiArMjEsNiBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KICAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiBJbmMsCi0gKiAxODkyMiBGb3JnZSBEcml2ZQotICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCi0gKgogICovCiAKICNpZm5kZWYgX05FVFhFTl9OSUNfSF8KQEAgLTUzLDEyICs0OCwxMyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorI2luY2x1ZGUgIm5ldHhlbl9uaWNfaGRyLmgiCiAjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgogCiAjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01BSk9SIDQKICNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUlOT1IgMAotI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OIDMwCi0jZGVmaW5lIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklEICAiNC4wLjMwIgorI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OIDUwCisjZGVmaW5lIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklEICAiNC4wLjUwIgogCiAjZGVmaW5lIE5FVFhFTl9WRVJTSU9OX0NPREUoYSwgYiwgYykJKCgoYSkgPDwgMjQpICsgKChiKSA8PCAxNikgKyAoYykpCiAjZGVmaW5lIF9tYWpvcih2KQkoKCh2KSA+PiAyNCkgJiAweGZmKQpAQCAtMTQzLDE4ICsxMzksMTQgQEAKICNkZWZpbmUgTlhfRVRIRVJNVFUgICAgICAgICAgICAgICAgICAgIDE1MDAKICNkZWZpbmUgTlhfTUFYX0VUSEVSSERSICAgICAgICAgICAgICAgIDMyIC8qIFRoaXMgY29udGFpbnMgc29tZSBwYWRkaW5nICovCiAKLSNkZWZpbmUgTlhfUlhfTk9STUFMX0JVRl9NQVhfTEVOICAgICAgIChOWF9NQVhfRVRIRVJIRFIgKyBOWF9FVEhFUk1UVSkKKyNkZWZpbmUgTlhfUDJfUlhfQlVGX01BWF9MRU4gICAgICAgICAgIDE3NjAKKyNkZWZpbmUgTlhfUDNfUlhfQlVGX01BWF9MRU4gICAgICAgICAgIChOWF9NQVhfRVRIRVJIRFIgKyBOWF9FVEhFUk1UVSkKICNkZWZpbmUgTlhfUDJfUlhfSlVNQk9fQlVGX01BWF9MRU4gICAgIChOWF9NQVhfRVRIRVJIRFIgKyBQMl9NQVhfTVRVKQogI2RlZmluZSBOWF9QM19SWF9KVU1CT19CVUZfTUFYX0xFTiAgICAgKE5YX01BWF9FVEhFUkhEUiArIFAzX01BWF9NVFUpCiAjZGVmaW5lIE5YX0NUX0RFRkFVTFRfUlhfQlVGX0xFTgkyMDQ4CisjZGVmaW5lIE5YX0xST19CVUZGRVJfRVhUUkEJCTIwNDgKIAotI2RlZmluZSBNQVhfUlhfQlVGRkVSX0xFTkdUSAkJMTc2MAotI2RlZmluZSBNQVhfUlhfSlVNQk9fQlVGRkVSX0xFTkdUSCAJODA2MgotI2RlZmluZSBNQVhfUlhfTFJPX0JVRkZFUl9MRU5HVEgJKDgwNjIpCi0jZGVmaW5lIFJYX0RNQV9NQVBfTEVOCQkJKE1BWF9SWF9CVUZGRVJfTEVOR1RIIC0gMikKLSNkZWZpbmUgUlhfSlVNQk9fRE1BX01BUF9MRU4JXAotCShNQVhfUlhfSlVNQk9fQlVGRkVSX0xFTkdUSCAtIDIpCi0jZGVmaW5lIFJYX0xST19ETUFfTUFQX0xFTgkJKE1BWF9SWF9MUk9fQlVGRkVSX0xFTkdUSCAtIDIpCisjZGVmaW5lIE5YX1JYX0xST19CVUZGRVJfTEVOR1RICQkoODA2MCkKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIHJpbmcgY29udGV4dHMKQEAgLTE4MSw2ICsxNzMsNyBAQAogCiAjZGVmaW5lIE1BWF9CVUZGRVJTX1BFUl9DTUQJMzIKICNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIDQpCisjZGVmaW5lIE5YX01BWF9UWF9USU1FT1VUUwkyCiAKIC8qCiAgKiBGb2xsb3dpbmcgYXJlIHRoZSBzdGF0ZXMgb2YgdGhlIFBoYW50b20uIFBoYW50b20gd2lsbCBzZXQgdGhlbSBhbmQKQEAgLTIwMCwxMyArMTkzLDIwIEBACiAjZGVmaW5lIFJDVl9SSU5HX0pVTUJPCTEKICNkZWZpbmUgUkNWX1JJTkdfTFJPCTIKIAotI2RlZmluZSBNQVhfQ01EX0RFU0NSSVBUT1JTCQk0MDk2Ci0jZGVmaW5lIE1BWF9SQ1ZfREVTQ1JJUFRPUlMJCTE2Mzg0Ci0jZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlNfSE9TVAkxMDI0Ci0jZGVmaW5lIE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUcJCTIwNDgKLSNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SU18xMEcJCTQwOTYKLSNkZWZpbmUgTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUwkxMDI0CisjZGVmaW5lIE1JTl9DTURfREVTQ1JJUFRPUlMJCTY0CisjZGVmaW5lIE1JTl9SQ1ZfREVTQ1JJUFRPUlMJCTY0CisjZGVmaW5lIE1JTl9KVU1CT19ERVNDUklQVE9SUwkJMzIKKworI2RlZmluZSBNQVhfQ01EX0RFU0NSSVBUT1JTCQkxMDI0CisjZGVmaW5lIE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUcJCTQwOTYKKyNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SU18xMEcJCTgxOTIKKyNkZWZpbmUgTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xRwk1MTIKKyNkZWZpbmUgTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEcJMTAyNAogI2RlZmluZSBNQVhfTFJPX1JDVl9ERVNDUklQVE9SUwkJOAorCisjZGVmaW5lIERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTXzFHCTIwNDgKKyNkZWZpbmUgREVGQVVMVF9SQ1ZfREVTQ1JJUFRPUlNfMTBHCTQwOTYKKwogI2RlZmluZSBORVRYRU5fQ1RYX1NJR05BVFVSRQkweGRlZTAKICNkZWZpbmUgTkVUWEVOX0NUWF9TSUdOQVRVUkVfVjIJMHgwMDAyZGVlMAogI2RlZmluZSBORVRYRU5fQ1RYX1JFU0VUCTB4YmFkMApAQCAtMjI1LDcgKzIyNSw3IEBACiAjZGVmaW5lIE1QT1JUX1NJTkdMRV9GVU5DVElPTl9NT0RFIDB4MTExMQogI2RlZmluZSBNUE9SVF9NVUxUSV9GVU5DVElPTl9NT0RFIDB4MjIyMgogCi0jaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgorI2RlZmluZSBOWF9NQVhfUENJX0ZVTkMJCTgKIAogLyoKICAqIE5ldFhlbiBob3N0LXBlZyBzaWduYWwgbWVzc2FnZSBzdHJ1Y3R1cmUKQEAgLTMwMiw2ICszMDIsMTAgQEAKICNkZWZpbmUgRkxBR1NfSVBTRUNfU0FfQURECTB4MDQKICNkZWZpbmUgRkxBR1NfSVBTRUNfU0FfREVMRVRFCTB4MDgKICNkZWZpbmUgRkxBR1NfVkxBTl9UQUdHRUQJMHgxMAorI2RlZmluZSBGTEFHU19WTEFOX09PQgkJMHg0MAorCisjZGVmaW5lIG5ldHhlbl9zZXRfdHhfdmxhbl90Y2koY21kX2Rlc2MsIHYpCVwKKwkoY21kX2Rlc2MpLT52bGFuX1RDSSA9IGNwdV90b19sZTE2KHYpOwogCiAjZGVmaW5lIG5ldHhlbl9zZXRfY21kX2Rlc2NfcG9ydChjbWRfZGVzYywgdmFyKQlcCiAJKChjbWRfZGVzYyktPnBvcnRfY3R4aWQgfD0gKCh2YXIpICYgMHgwRikpCkBAIC0zMTYsNTggKzMyMCwzMyBAQAogCWNwdV90b19sZTE2KCgoX2ZsYWdzKSAmIDB4N2YpIHwgKCgoX29wY29kZSkgJiAweDNmKSA8PCA3KSkKIAogI2RlZmluZSBuZXR4ZW5fc2V0X3R4X2ZyYWdzX2xlbihfZGVzYywgX2ZyYWdzLCBfbGVuKSBcCi0JKF9kZXNjKS0+bnVtX29mX2J1ZmZlcnNfdG90YWxfbGVuZ3RoID0gXAorCShfZGVzYyktPm5mcmFnc19fbGVuZ3RoID0gXAogCWNwdV90b19sZTMyKCgoX2ZyYWdzKSAmIDB4ZmYpIHwgKCgoX2xlbikgJiAweGZmZmZmZikgPDwgOCkpCiAKIHN0cnVjdCBjbWRfZGVzY190eXBlMCB7CiAJdTggdGNwX2hkcl9vZmZzZXQ7CS8qIEZvciBMU08gb25seSAqLwogCXU4IGlwX2hkcl9vZmZzZXQ7CS8qIEZvciBMU08gb25seSAqLwotCS8qIEJpdCBwYXR0ZXJuOiAwLTYgZmxhZ3MsIDctMTIgb3Bjb2RlLCAxMy0xNSB1bnVzZWQgKi8KLQlfX2xlMTYgZmxhZ3Nfb3Bjb2RlOwotCS8qIEJpdCBwYXR0ZXJuOiAwLTcgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzLAotCSAgIDgtMzEgVG90YWwgc2l6ZSBvZiB0aGUgcGFja2V0ICovCi0JX19sZTMyIG51bV9vZl9idWZmZXJzX3RvdGFsX2xlbmd0aDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgYWRkcl9sb3dfcGFydDI7Ci0JCQlfX2xlMzIgYWRkcl9oaWdoX3BhcnQyOwotCQl9OwotCQlfX2xlNjQgYWRkcl9idWZmZXIyOwotCX07CisJX19sZTE2IGZsYWdzX29wY29kZTsJLyogMTU6MTMgdW51c2VkLCAxMjo3IG9wY29kZSwgNjowIGZsYWdzICovCisJX19sZTMyIG5mcmFnc19fbGVuZ3RoOwkvKiAzMTo4IHRvdGFsIGxlbiwgNzowIGZyYWcgY291bnQgKi8KIAotCV9fbGUxNiByZWZlcmVuY2VfaGFuZGxlOwkvKiBjaGFuZ2VkIHRvIHUxNiB0byBhZGQgbXNzICovCi0JX19sZTE2IG1zczsJCS8qIHBhc3NlZCBieSBORElTX1BBQ0tFVCBmb3IgTFNPICovCi0JLyogQml0IHBhdHRlcm4gMC0zIHBvcnQsIDAtMyBjdHggaWQgKi8KLQl1OCBwb3J0X2N0eGlkOworCV9fbGU2NCBhZGRyX2J1ZmZlcjI7CisKKwlfX2xlMTYgcmVmZXJlbmNlX2hhbmRsZTsKKwlfX2xlMTYgbXNzOworCXU4IHBvcnRfY3R4aWQ7CQkvKiA3OjQgY3R4aWQgMzowIHBvcnQgKi8KIAl1OCB0b3RhbF9oZHJfbGVuZ3RoOwkvKiBMU08gb25seSA6IE1BQytJUCtUQ1AgSGRyIHNpemUgKi8KIAlfX2xlMTYgY29ubl9pZDsJCS8qIElQU2VjIG9mZm9hZCBvbmx5ICovCiAKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgYWRkcl9sb3dfcGFydDM7Ci0JCQlfX2xlMzIgYWRkcl9oaWdoX3BhcnQzOwotCQl9OwotCQlfX2xlNjQgYWRkcl9idWZmZXIzOwotCX07Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX19sZTMyIGFkZHJfbG93X3BhcnQxOwotCQkJX19sZTMyIGFkZHJfaGlnaF9wYXJ0MTsKLQkJfTsKLQkJX19sZTY0IGFkZHJfYnVmZmVyMTsKLQl9OworCV9fbGU2NCBhZGRyX2J1ZmZlcjM7CisJX19sZTY0IGFkZHJfYnVmZmVyMTsKIAogCV9fbGUxNiBidWZmZXJfbGVuZ3RoWzRdOwogCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX19sZTMyIGFkZHJfbG93X3BhcnQ0OwotCQkJX19sZTMyIGFkZHJfaGlnaF9wYXJ0NDsKLQkJfTsKLQkJX19sZTY0IGFkZHJfYnVmZmVyNDsKLQl9OworCV9fbGU2NCBhZGRyX2J1ZmZlcjQ7CiAKLQlfX2xlNjQgdW51c2VkOworCV9fbGUzMiByZXNlcnZlZDI7CisJX19sZTE2IHJlc2VydmVkOworCV9fbGUxNiB2bGFuX1RDSTsKIAogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg2NCkpKTsKIApAQCAtMzgwLDkgKzM1OSwxMSBAQAogfTsKIAogLyogb3Bjb2RlIGZpZWxkIGluIHN0YXR1c19kZXNjICovCisjZGVmaW5lIE5FVFhFTl9OSUNfU1lOX09GRkxPQUQgIDB4MDMKICNkZWZpbmUgTkVUWEVOX05JQ19SWFBLVF9ERVNDICAweDA0CiAjZGVmaW5lIE5FVFhFTl9PTERfUlhQS1RfREVTQyAgMHgzZgogI2RlZmluZSBORVRYRU5fTklDX1JFU1BPTlNFX0RFU0MgMHgwNQorI2RlZmluZSBORVRYRU5fTklDX0xST19ERVNDICAJMHgxMgogCiAvKiBmb3Igc3RhdHVzIGZpZWxkIGluIHN0YXR1c19kZXNjICovCiAjZGVmaW5lIFNUQVRVU19ORUVEX0NLU1VNCSgxKQpAQCAtNDE2LDYgKzM5NywyNCBAQAogI2RlZmluZSBuZXR4ZW5fZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEpCVwKIAkoKChzdHNfZGF0YSkgPj4gNTgpICYgMHgwM0YpCiAKKyNkZWZpbmUgbmV0eGVuX2dldF9scm9fc3RzX3JlZmhhbmRsZShzdHNfZGF0YSkgCVwKKwkoKHN0c19kYXRhKSAmIDB4MEZGRkYpCisjZGVmaW5lIG5ldHhlbl9nZXRfbHJvX3N0c19sZW5ndGgoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gMTYpICYgMHgwRkZGRikKKyNkZWZpbmUgbmV0eGVuX2dldF9scm9fc3RzX2wyX2hkcl9vZmZzZXQoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gMzIpICYgMHgwRkYpCisjZGVmaW5lIG5ldHhlbl9nZXRfbHJvX3N0c19sNF9oZHJfb2Zmc2V0KHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDQwKSAmIDB4MEZGKQorI2RlZmluZSBuZXR4ZW5fZ2V0X2xyb19zdHNfdGltZXN0YW1wKHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDQ4KSAmIDB4MSkKKyNkZWZpbmUgbmV0eGVuX2dldF9scm9fc3RzX3R5cGUoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNDkpICYgMHg3KQorI2RlZmluZSBuZXR4ZW5fZ2V0X2xyb19zdHNfcHVzaF9mbGFnKHN0c19kYXRhKQkJXAorCSgoKHN0c19kYXRhKSA+PiA1MikgJiAweDEpCisjZGVmaW5lIG5ldHhlbl9nZXRfbHJvX3N0c19zZXFfbnVtYmVyKHN0c19kYXRhKQkJXAorCSgoc3RzX2RhdGEpICYgMHgwRkZGRkZGRkYpCisKKwogc3RydWN0IHN0YXR1c19kZXNjIHsKIAlfX2xlNjQgc3RhdHVzX2Rlc2NfZGF0YVsyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CkBAIC00NTksMTU0ICs0NTgsNiBAQAogI2RlZmluZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfWEZQCTB4MDAzMgogI2RlZmluZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFAJMHgwMDgwCiAKLXN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbyB7Ci0JdTMyIGhlYWRlcl92ZXJzaW9uOwotCi0JdTMyIGJvYXJkX21mZzsKLQl1MzIgYm9hcmRfdHlwZTsKLQl1MzIgYm9hcmRfbnVtOwotCXUzMiBjaGlwX2lkOwotCXUzMiBjaGlwX21pbm9yOwotCXUzMiBjaGlwX21ham9yOwotCXUzMiBjaGlwX3BrZzsKLQl1MzIgY2hpcF9sb3Q7Ci0KLQl1MzIgcG9ydF9tYXNrOwkJLyogYXZhaWxhYmxlIG5pdSBwb3J0cyAqLwotCXUzMiBwZWdfbWFzazsJCS8qIGF2YWlsYWJsZSBwZWdzICovCi0JdTMyIGljYWNoZV9vazsJCS8qIGNhbiB3ZSBydW4gd2l0aCBpY2FjaGU/ICovCi0JdTMyIGRjYWNoZV9vazsJCS8qIGNhbiB3ZSBydW4gd2l0aCBkY2FjaGU/ICovCi0JdTMyIGNhc3Blcl9vazsKLQotCXUzMiBtYWNfYWRkcl9sb18wOwotCXUzMiBtYWNfYWRkcl9sb18xOwotCXUzMiBtYWNfYWRkcl9sb18yOwotCXUzMiBtYWNfYWRkcl9sb18zOwotCi0JLyogTU4tcmVsYXRlZCBjb25maWcgKi8KLQl1MzIgbW5fc3luY19tb2RlOwkvKiBlbmFibGUvIHN5bmMgc2hpZnQgY2Nsay8gc3luYyBzaGlmdCBtY2xrICovCi0JdTMyIG1uX3N5bmNfc2hpZnRfY2NsazsKLQl1MzIgbW5fc3luY19zaGlmdF9tY2xrOwotCXUzMiBtbl93Yl9lbjsKLQl1MzIgbW5fY3J5c3RhbF9mcmVxOwkvKiBpbiBNSHogKi8KLQl1MzIgbW5fc3BlZWQ7CQkvKiBpbiBNSHogKi8KLQl1MzIgbW5fb3JnOwotCXUzMiBtbl9kZXB0aDsKLQl1MzIgbW5fcmFua3NfMDsJCS8qIHJhbmtzIHBlciBzbG90ICovCi0JdTMyIG1uX3JhbmtzXzE7CQkvKiByYW5rcyBwZXIgc2xvdCAqLwotCXUzMiBtbl9yZF9sYXRlbmN5XzA7Ci0JdTMyIG1uX3JkX2xhdGVuY3lfMTsKLQl1MzIgbW5fcmRfbGF0ZW5jeV8yOwotCXUzMiBtbl9yZF9sYXRlbmN5XzM7Ci0JdTMyIG1uX3JkX2xhdGVuY3lfNDsKLQl1MzIgbW5fcmRfbGF0ZW5jeV81OwotCXUzMiBtbl9yZF9sYXRlbmN5XzY7Ci0JdTMyIG1uX3JkX2xhdGVuY3lfNzsKLQl1MzIgbW5fcmRfbGF0ZW5jeV84OwotCXUzMiBtbl9kbGxfdmFsWzE4XTsKLQl1MzIgbW5fbW9kZV9yZWc7CS8qIE1JVSBERFIgTW9kZSBSZWdpc3RlciAqLwotCXUzMiBtbl9leHRfbW9kZV9yZWc7CS8qIE1JVSBERFIgRXh0ZW5kZWQgTW9kZSBSZWdpc3RlciAqLwotCXUzMiBtbl90aW1pbmdfMDsJLyogTUlVIE1lbW9yeSBDb250cm9sIFRpbWluZyBSZ2lzdGVyICovCi0JdTMyIG1uX3RpbWluZ18xOwkvKiBNSVUgRXh0ZW5kZWQgTWVtb3J5IEN0cmwgVGltaW5nIFJlZ2lzdGVyICovCi0JdTMyIG1uX3RpbWluZ18yOwkvKiBNSVUgRXh0ZW5kZWQgTWVtb3J5IEN0cmwgVGltaW5nMiBSZWdpc3RlciAqLwotCi0JLyogU04tcmVsYXRlZCBjb25maWcgKi8KLQl1MzIgc25fc3luY19tb2RlOwkvKiBlbmFibGUvIHN5bmMgc2hpZnQgY2NsayAvIHN5bmMgc2hpZnQgbWNsayAqLwotCXUzMiBzbl9wdF9tb2RlOwkJLyogcGFzcyB0aHJvdWdoIG1vZGUgKi8KLQl1MzIgc25fZWNjX2VuOwotCXUzMiBzbl93Yl9lbjsKLQl1MzIgc25fY3J5c3RhbF9mcmVxOwotCXUzMiBzbl9zcGVlZDsKLQl1MzIgc25fb3JnOwotCXUzMiBzbl9kZXB0aDsKLQl1MzIgc25fZGxsX3RhcDsKLQl1MzIgc25fcmRfbGF0ZW5jeTsKLQotCXUzMiBtYWNfYWRkcl9oaV8wOwotCXUzMiBtYWNfYWRkcl9oaV8xOwotCXUzMiBtYWNfYWRkcl9oaV8yOwotCXUzMiBtYWNfYWRkcl9oaV8zOwotCi0JdTMyIG1hZ2ljOwkJLyogaW5kaWNhdGVzIGZsYXNoIGhhcyBiZWVuIGluaXRpYWxpemVkICovCi0KLQl1MzIgbW5fcmRpbW07Ci0JdTMyIG1uX2RsbF9vdmVycmlkZTsKLQotfTsKLQotI2RlZmluZSBGTEFTSF9OVU1fUE9SVFMJCSg0KQotCi1zdHJ1Y3QgbmV0eGVuX2ZsYXNoX21hY19hZGRyIHsKLQl1MzIgZmxhc2hfYWRkclszMl07Ci19OwotCi1zdHJ1Y3QgbmV0eGVuX3VzZXJfb2xkX2luZm8gewotCXU4IGZsYXNoX21kNVsxNl07Ci0JdTggY3JiaW5pdF9tZDVbMTZdOwotCXU4IGJyZGNmZ19tZDVbMTZdOwotCS8qIGJvb3Rsb2FkZXIgKi8KLQl1MzIgYm9vdGxkX3ZlcnNpb247Ci0JdTMyIGJvb3RsZF9zaXplOwotCXU4IGJvb3RsZF9tZDVbMTZdOwotCS8qIGltYWdlICovCi0JdTMyIGltYWdlX3ZlcnNpb247Ci0JdTMyIGltYWdlX3NpemU7Ci0JdTggaW1hZ2VfbWQ1WzE2XTsKLQkvKiBwcmltYXJ5IGltYWdlIHN0YXR1cyAqLwotCXUzMiBwcmltYXJ5X3N0YXR1czsKLQl1MzIgc2Vjb25kYXJ5X3ByZXNlbnQ7Ci0KLQkvKiBNQUMgYWRkcmVzcyAsIDQgcG9ydHMgKi8KLQlzdHJ1Y3QgbmV0eGVuX2ZsYXNoX21hY19hZGRyIG1hY19hZGRyW0ZMQVNIX05VTV9QT1JUU107Ci19OwotI2RlZmluZSBGTEFTSF9OVU1fTUFDX1BFUl9QT1JUCTMyCi1zdHJ1Y3QgbmV0eGVuX3VzZXJfaW5mbyB7Ci0JdTggZmxhc2hfbWQ1WzE2ICogNjRdOwotCS8qIGJvb3Rsb2FkZXIgKi8KLQl1MzIgYm9vdGxkX3ZlcnNpb247Ci0JdTMyIGJvb3RsZF9zaXplOwotCS8qIGltYWdlICovCi0JdTMyIGltYWdlX3ZlcnNpb247Ci0JdTMyIGltYWdlX3NpemU7Ci0JLyogcHJpbWFyeSBpbWFnZSBzdGF0dXMgKi8KLQl1MzIgcHJpbWFyeV9zdGF0dXM7Ci0JdTMyIHNlY29uZGFyeV9wcmVzZW50OwotCi0JLyogTUFDIGFkZHJlc3MgLCA0IHBvcnRzLCAzMiBhZGRyZXNzIHBlciBwb3J0ICovCi0JdTY0IG1hY19hZGRyW0ZMQVNIX05VTV9QT1JUUyAqIEZMQVNIX05VTV9NQUNfUEVSX1BPUlRdOwotCXUzMiBzdWJfc3lzX2lkOwotCXU4IHNlcmlhbF9udW1bMzJdOwotCi0JLyogQW55IHVzZXIgZGVmaW5lZCBkYXRhICovCi19OwotCi0vKgotICogRmxhc2ggTGF5b3V0IC0gbmV3IGZvcm1hdC4KLSAqLwotc3RydWN0IG5ldHhlbl9uZXdfdXNlcl9pbmZvIHsKLQl1OCBmbGFzaF9tZDVbMTYgKiA2NF07Ci0JLyogYm9vdGxvYWRlciAqLwotCXUzMiBib290bGRfdmVyc2lvbjsKLQl1MzIgYm9vdGxkX3NpemU7Ci0JLyogaW1hZ2UgKi8KLQl1MzIgaW1hZ2VfdmVyc2lvbjsKLQl1MzIgaW1hZ2Vfc2l6ZTsKLQkvKiBwcmltYXJ5IGltYWdlIHN0YXR1cyAqLwotCXUzMiBwcmltYXJ5X3N0YXR1czsKLQl1MzIgc2Vjb25kYXJ5X3ByZXNlbnQ7Ci0KLQkvKiBNQUMgYWRkcmVzcyAsIDQgcG9ydHMsIDMyIGFkZHJlc3MgcGVyIHBvcnQgKi8KLQl1NjQgbWFjX2FkZHJbRkxBU0hfTlVNX1BPUlRTICogRkxBU0hfTlVNX01BQ19QRVJfUE9SVF07Ci0JdTMyIHN1Yl9zeXNfaWQ7Ci0JdTggc2VyaWFsX251bVszMl07Ci0KLQkvKiBBbnkgdXNlciBkZWZpbmVkIGRhdGEgKi8KLX07Ci0KLSNkZWZpbmUgU0VDT05EQVJZX0lNQUdFX1BSRVNFTlQgMHhiM2I0YjViNgotI2RlZmluZSBTRUNPTkRBUllfSU1BR0VfQUJTRU5UCTB4ZmZmZmZmZmYKLSNkZWZpbmUgUFJJTUFSWV9JTUFHRV9HT09ECTB4NWE1YTVhNWEKLSNkZWZpbmUgUFJJTUFSWV9JTUFHRV9CQUQJMHhmZmZmZmZmZgotCiAvKiBGbGFzaCBtZW1vcnkgbWFwICovCiAjZGVmaW5lIE5FVFhFTl9DUkJJTklUX1NUQVJUCTAJLyogY3JiaW5pdCBzZWN0aW9uICovCiAjZGVmaW5lIE5FVFhFTl9CUkRDRkdfU1RBUlQJMHg0MDAwCS8qIGJvYXJkIGNvbmZpZyAqLwpAQCAtNjE3LDI4ICs0NjgsMjUgQEAKICNkZWZpbmUgTkVUWEVOX1BYRV9TVEFSVAkweDNFMDAwMAkvKiBQWEUgYm9vdCByb20gKi8KICNkZWZpbmUgTkVUWEVOX1VTRVJfU1RBUlQJMHgzRTgwMDAJLyogRmlybWFyZSBpbmZvICovCiAjZGVmaW5lIE5FVFhFTl9GSVhFRF9TVEFSVAkweDNGMDAwMAkvKiBiYWNrdXAgb2YgY3JiaW5pdCAqLworI2RlZmluZSBORVRYRU5fVVNFUl9TVEFSVF9PTEQJTkVUWEVOX1BYRV9TVEFSVCAvKiB2ZXJ5IG9sZCBmbGFzaCAqLwogCisjZGVmaW5lIE5YX09MRF9NQUNfQUREUl9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKQogI2RlZmluZSBOWF9GV19WRVJTSU9OX09GRlNFVAkoTkVUWEVOX1VTRVJfU1RBUlQrMHg0MDgpCiAjZGVmaW5lIE5YX0ZXX1NJWkVfT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDQwYykKKyNkZWZpbmUgTlhfRldfTUFDX0FERFJfT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDQxOCkKKyNkZWZpbmUgTlhfRldfU0VSSUFMX05VTV9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4ODFjKQogI2RlZmluZSBOWF9CSU9TX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDgzYykKKworI2RlZmluZSBOWF9IRFJfVkVSU0lPTl9PRkZTRVQJKE5FVFhFTl9CUkRDRkdfU1RBUlQpCisjZGVmaW5lIE5YX0JSRFRZUEVfT0ZGU0VUCShORVRYRU5fQlJEQ0ZHX1NUQVJUKzB4OCkKICNkZWZpbmUgTlhfRldfTUFHSUNfT0ZGU0VUCShORVRYRU5fQlJEQ0ZHX1NUQVJUKzB4MTI4KQorCiAjZGVmaW5lIE5YX0ZXX01JTl9TSVpFCQkoMHgzZmZmZmYpCiAjZGVmaW5lIE5YX1AyX01OX1JPTUlNQUdFCTAKICNkZWZpbmUgTlhfUDNfQ1RfUk9NSU1BR0UJMQogI2RlZmluZSBOWF9QM19NTl9ST01JTUFHRQkyCiAjZGVmaW5lIE5YX0ZMQVNIX1JPTUlNQUdFCTMKIAotI2RlZmluZSBORVRYRU5fVVNFUl9TVEFSVF9PTEQgTkVUWEVOX1BYRV9TVEFSVAkvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCi0jZGVmaW5lIE5FVFhFTl9GTEFTSF9TVEFSVAkJKE5FVFhFTl9DUkJJTklUX1NUQVJUKQotI2RlZmluZSBORVRYRU5fSU5JVF9TRUNUT1IJCSgwKQotI2RlZmluZSBORVRYRU5fUFJJTUFSWV9TVEFSVCAJCShORVRYRU5fQk9PVExEX1NUQVJUKQotI2RlZmluZSBORVRYRU5fRkxBU0hfQ1JCSU5JVF9TSVpFIAkoMHg0MDAwKQotI2RlZmluZSBORVRYRU5fRkxBU0hfQlJEQ0ZHX1NJWkUgCShzaXplb2Yoc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvKSkKLSNkZWZpbmUgTkVUWEVOX0ZMQVNIX1VTRVJfU0laRQkJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3VzZXJfaW5mbykvc2l6ZW9mKHUzMikpCi0jZGVmaW5lIE5FVFhFTl9GTEFTSF9TRUNPTkRBUllfU0laRSAJKE5FVFhFTl9VU0VSX1NUQVJULU5FVFhFTl9TRUNPTkRBUllfU1RBUlQpCi0jZGVmaW5lIE5FVFhFTl9OVU1fUFJJTUFSWV9TRUNUT1JTCSgweDIwKQotI2RlZmluZSBORVRYRU5fTlVNX0NPTkZJR19TRUNUT1JTIAkoMSkKIGV4dGVybiBjaGFyIG5ldHhlbl9uaWNfZHJpdmVyX25hbWVbXTsKIAogLyogTnVtYmVyIG9mIHN0YXR1cyBkZXNjcmlwdG9ycyB0byBoYW5kbGUgcGVyIGludGVycnVwdCAqLwpAQCAtNjUzLDE3ICs1MDEsMTEgQEAKIAl1NjQgbGVuZ3RoOwogfTsKIAotI2RlZmluZSBfbmV0eGVuX3NldF9iaXRzKGNvbmZpZ193b3JkLCBzdGFydCwgYml0cywgdmFsKQl7XAotCXVuc2lnbmVkIGxvbmcgbG9uZyBfX3RtYXNrID0gKCgoMVVMTCA8PCAoYml0cykpIC0gMSkgPDwgKHN0YXJ0KSk7XAotCXVuc2lnbmVkIGxvbmcgbG9uZyBfX3R2YWx1ZSA9ICh2YWwpOyAgICBcCi0JKGNvbmZpZ193b3JkKSAmPSB+X190bWFzazsgICAgICBcCi0JKGNvbmZpZ193b3JkKSB8PSAoKChfX3R2YWx1ZSkgPDwgKHN0YXJ0KSkgJiBfX3RtYXNrKTsgXAotfQotCi0jZGVmaW5lIF9uZXR4ZW5fY2xlYXJfYml0cyhjb25maWdfd29yZCwgc3RhcnQsIGJpdHMpIHtcCi0JdW5zaWduZWQgbG9uZyBsb25nIF9fdG1hc2sgPSAoKCgxVUxMIDw8IChiaXRzKSkgLSAxKSA8PCAoc3RhcnQpKTsgIFwKLQkoY29uZmlnX3dvcmQpICY9IH5fX3RtYXNrOyBcCi19CitzdHJ1Y3QgbmV0eGVuX3JlY3ZfY3JiIHsKKwl1MzIgY3JiX3Jjdl9wcm9kdWNlcltOVU1fUkNWX0RFU0NfUklOR1NdOworCXUzMiBjcmJfc3RzX2NvbnN1bWVyW05VTV9TVFNfREVTQ19SSU5HU107CisJdTMyIHN3X2ludF9tYXNrW05VTV9TVFNfREVTQ19SSU5HU107Cit9OwogCiAvKiAgICBGb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBzdGF0ZSBvZiB0aGUgYnVmZmVycyAgICAqLwogI2RlZmluZQlORVRYRU5fQlVGRkVSX0ZSRUUJMApAQCAtNzA2LDggKzU0OCw4IEBACiAKIAlpbnQgcWRyX3NuX3dpbmRvdzsKIAlpbnQgZGRyX21uX3dpbmRvdzsKLQl1bnNpZ25lZCBsb25nIG1uX3dpbl9jcmI7Ci0JdW5zaWduZWQgbG9uZyBtc193aW5fY3JiOworCXUzMiBtbl93aW5fY3JiOworCXUzMiBtc193aW5fY3JiOwogCiAJdTggY3V0X3Rocm91Z2g7CiAJdTggcmV2aXNpb25faWQ7CkBAIC03MjYsNyArNTY4LDggQEAKIAl1NjQgIHJ4ZHJvcHBlZDsKIAl1NjQgIHR4ZHJvcHBlZDsKIAl1NjQgIGNzdW1tZWQ7Ci0JdTY0ICBub19yY3Y7CisJdTY0ICByeF9wa3RzOworCXU2NCAgbHJvX3BrdHM7CiAJdTY0ICByeGJ5dGVzOwogCXU2NCAgdHhieXRlczsKIH07CkBAIC03MzcsMTEgKzU4MCwxMSBAQAogICovCiBzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyB7CiAJdTMyIHByb2R1Y2VyOwotCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOwogCXUzMiBudW1fZGVzYzsKIAl1MzIgZG1hX3NpemU7CiAJdTMyIHNrYl9zaXplOwogCXUzMiBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmNyYl9yY3ZfcHJvZHVjZXI7CiAJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CiAJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CkBAIC03NTEsOSArNTk0LDkgQEAKIAogc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgewogCXUzMiBjb25zdW1lcjsKLQl1MzIgY3JiX3N0c19jb25zdW1lcjsKLQl1MzIgY3JiX2ludHJfbWFzazsKIAl1MzIgbnVtX2Rlc2M7CisJdm9pZCBfX2lvbWVtICpjcmJfc3RzX2NvbnN1bWVyOworCXZvaWQgX19pb21lbSAqY3JiX2ludHJfbWFzazsKIAogCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzY19oZWFkOwogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKQEAgLTc3MCw4ICs2MTMsOCBAQAogCXUzMiBwcm9kdWNlcjsKIAlfX2xlMzIgKmh3X2NvbnN1bWVyOwogCXUzMiBzd19jb25zdW1lcjsKLQl1MzIgY3JiX2NtZF9wcm9kdWNlcjsKLQl1MzIgY3JiX2NtZF9jb25zdW1lcjsKKwl2b2lkIF9faW9tZW0gKmNyYl9jbWRfcHJvZHVjZXI7CisJdm9pZCBfX2lvbWVtICpjcmJfY21kX2NvbnN1bWVyOwogCXUzMiBudW1fZGVzYzsKIAogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKQEAgLTg0MCw3ICs2ODMsMTkgQEAKICNkZWZpbmUgTlhfQ0RSUF9DTURfR0VUX1NUQVRJU1RJQ1MgICAgICAgICAgMHgwMDAwMDAwZgogI2RlZmluZSBOWF9DRFJQX0NNRF9ERUxFVEVfU1RBVElTVElDUyAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIE5YX0NEUlBfQ01EX1NFVF9NVFUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKLSNkZWZpbmUgTlhfQ0RSUF9DTURfTUFYICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMworI2RlZmluZSBOWF9DRFJQX0NNRF9SRUFEX1BIWQkJCTB4MDAwMDAwMTMKKyNkZWZpbmUgTlhfQ0RSUF9DTURfV1JJVEVfUEhZCQkJMHgwMDAwMDAxNAorI2RlZmluZSBOWF9DRFJQX0NNRF9SRUFEX0hXX1JFRwkJCTB4MDAwMDAwMTUKKyNkZWZpbmUgTlhfQ0RSUF9DTURfR0VUX0ZMT1dfQ1RMCQkweDAwMDAwMDE2CisjZGVmaW5lIE5YX0NEUlBfQ01EX1NFVF9GTE9XX0NUTAkJMHgwMDAwMDAxNworI2RlZmluZSBOWF9DRFJQX0NNRF9SRUFEX01BWF9NVFUJCTB4MDAwMDAwMTgKKyNkZWZpbmUgTlhfQ0RSUF9DTURfUkVBRF9NQVhfTFJPCQkweDAwMDAwMDE5CisjZGVmaW5lIE5YX0NEUlBfQ01EX0NPTkZJR1VSRV9UT0UJCTB4MDAwMDAwMWEKKyNkZWZpbmUgTlhfQ0RSUF9DTURfRlVOQ19BVFRSSUIJCQkweDAwMDAwMDFiCisjZGVmaW5lIE5YX0NEUlBfQ01EX1JFQURfUEVYUV9QQVJBTUVURVJTCTB4MDAwMDAwMWMKKyNkZWZpbmUgTlhfQ0RSUF9DTURfR0VUX0xJQ19DQVBBQklMSVRJRVMJMHgwMDAwMDAxZAorI2RlZmluZSBOWF9DRFJQX0NNRF9SRUFEX01BWF9MUk9fUEVSX0JPQVJECTB4MDAwMDAwMWUKKyNkZWZpbmUgTlhfQ0RSUF9DTURfTUFYCQkJCTB4MDAwMDAwMWYKIAogI2RlZmluZSBOWF9SQ09ERV9TVUNDRVNTCQkwCiAjZGVmaW5lIE5YX1JDT0RFX05PX0hPU1RfTUVNCQkxCkBAIC04ODEsNiArNzM2LDcgQEAKICNkZWZpbmUgTlhfQ0FQMF9MU08JCQlOWF9DQVBfQklUKDAsIDYpCiAjZGVmaW5lIE5YX0NBUDBfSlVNQk9fQ09OVElHVU9VUwlOWF9DQVBfQklUKDAsIDcpCiAjZGVmaW5lIE5YX0NBUDBfTFJPX0NPTlRJR1VPVVMJCU5YX0NBUF9CSVQoMCwgOCkKKyNkZWZpbmUgTlhfQ0FQMF9IV19MUk8JCQlOWF9DQVBfQklUKDAsIDEwKQogCiAvKgogICogQ29udGV4dCBzdGF0ZQpAQCAtMTA3OCw2ICs5MzQsOSBAQAogCiAjZGVmaW5lIE5YX01BQ19FVkVOVAkJMHgxCiAKKyNkZWZpbmUgTlhfSVBfVVAJCTIKKyNkZWZpbmUgTlhfSVBfRE9XTgkJMworCiAvKgogICogRHJpdmVyIC0tPiBGaXJtd2FyZQogICovCkBAIC0xMTA0LDcgKzk2Myw5IEBACiAjZGVmaW5lIE5YX05JQ19IMkNfT1BDT0RFX1BST1hZX1NUT1BfRE9ORQkJMjAKICNkZWZpbmUgTlhfTklDX0gyQ19PUENPREVfR0VUX0xJTktFVkVOVAkJCTIxCiAjZGVmaW5lIE5YX05JQ19DMkNfT1BDT0RFCQkJCTIyCi0jZGVmaW5lIE5YX05JQ19IMkNfT1BDT0RFX0xBU1QJCQkJMjMKKyNkZWZpbmUgTlhfTklDX0gyQ19PUENPREVfQ09ORklHX0JSSURHSU5HICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgTlhfTklDX0gyQ19PUENPREVfQ09ORklHX0hXX0xSTwkJCTI0CisjZGVmaW5lIE5YX05JQ19IMkNfT1BDT0RFX0xBU1QJCQkJMjUKIAogLyoKICAqIEZpcm13YXJlIC0tPiBEcml2ZXIKQEAgLTExMzAsOCArOTkxLDI1IEBACiAjZGVmaW5lIFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfQUxMCTEgLyogYWNjZXB0IGFsbCBwYWNrZXRzICovCiAjZGVmaW5lIFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfTVVMVEkJMiAvKiBhY2NlcHQgdW5tYXRjaGVkIG11bHRpY2FzdCAqLwogCisjZGVmaW5lIE5YX05JQ19MUk9fUkVRVUVTVF9GSVJTVAkJMAorI2RlZmluZSBOWF9OSUNfTFJPX1JFUVVFU1RfQUREX0ZMT1cJCTEKKyNkZWZpbmUgTlhfTklDX0xST19SRVFVRVNUX0RFTEVURV9GTE9XCQkyCisjZGVmaW5lIE5YX05JQ19MUk9fUkVRVUVTVF9USU1FUgkJMworI2RlZmluZSBOWF9OSUNfTFJPX1JFUVVFU1RfQ0xFQU5VUAkJNAorI2RlZmluZSBOWF9OSUNfTFJPX1JFUVVFU1RfQUREX0ZMT1dfU0NIRURVTEVECTUKKyNkZWZpbmUgTlhfVE9FX0xST19SRVFVRVNUX0FERF9GTE9XCQk2CisjZGVmaW5lIE5YX1RPRV9MUk9fUkVRVUVTVF9BRERfRkxPV19SRVNQT05TRQk3CisjZGVmaW5lIE5YX1RPRV9MUk9fUkVRVUVTVF9ERUxFVEVfRkxPVwkJOAorI2RlZmluZSBOWF9UT0VfTFJPX1JFUVVFU1RfREVMRVRFX0ZMT1dfUkVTUE9OU0UJOQorI2RlZmluZSBOWF9UT0VfTFJPX1JFUVVFU1RfVElNRVIJCTEwCisjZGVmaW5lIE5YX05JQ19MUk9fUkVRVUVTVF9MQVNUCQkJMTEKKwogI2RlZmluZSBOWF9GV19DQVBBQklMSVRZX0xJTktfTk9USUZJQ0FUSU9OCSgxIDw8IDUpCiAjZGVmaW5lIE5YX0ZXX0NBUEFCSUxJVFlfU1dJVENISU5HCQkoMSA8PCA2KQorI2RlZmluZSBOWF9GV19DQVBBQklMSVRZX1BFWFEJCQkoMSA8PCA3KQorI2RlZmluZSBOWF9GV19DQVBBQklMSVRZX0JERwkJCSgxIDw8IDgpCisjZGVmaW5lIE5YX0ZXX0NBUEFCSUxJVFlfRlZMQU5UWAkJKDEgPDwgOSkKKyNkZWZpbmUgTlhfRldfQ0FQQUJJTElUWV9IV19MUk8JCQkoMSA8PCAxMCkKIAogLyogbW9kdWxlIHR5cGVzICovCiAjZGVmaW5lIExJTktFVkVOVF9NT0RVTEVfTk9UX1BSRVNFTlQJCQkxCkBAIC0xMjA2LDYgKzEwODQsOCBAQAogCiAjZGVmaW5lIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQJCTB4MDIKICNkZWZpbmUgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQJCTB4MDQKKyNkZWZpbmUgTkVUWEVOX05JQ19MUk9fRU5BQkxFRAkJMHgwOAorI2RlZmluZSBORVRYRU5fTklDX0JSSURHRV9FTkFCTEVEICAgICAgIDBYMTAKICNkZWZpbmUgTkVUWEVOX0lTX01TSV9GQU1JTFkoYWRhcHRlcikgXAogCSgoYWRhcHRlciktPmZsYWdzICYgKE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQgfCBORVRYRU5fTklDX01TSVhfRU5BQkxFRCkpCiAKQEAgLTEyMTksNiArMTA5OSwxMCBAQAogI2RlZmluZSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQyA3NzcKICNkZWZpbmUgTkVUWEVOX05JQ19QRUdfVFVORSAwCiAKKyNkZWZpbmUgX19OWF9GV19BVFRBQ0hFRAkJMAorI2RlZmluZSBfX05YX0RFVl9VUAkJCTEKKyNkZWZpbmUgX19OWF9SRVNFVFRJTkcJCQkyCisKIHN0cnVjdCBuZXR4ZW5fZHVtbXlfZG1hIHsKIAl2b2lkICphZGRyOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwpAQCAtMTI1NSw3ICsxMTM5LDEwIEBACiAJdTggbWF4X21jX2NvdW50OwogCXU4IHJzc19zdXBwb3J0ZWQ7CiAJdTggbGlua19jaGFuZ2VkOwotCXUzMiByZXN2MzsKKwl1OCBmd193YWl0X2NudDsKKwl1OCBmd19mYWlsX2NudDsKKwl1OCB0eF90aW1lb19jbnQ7CisJdTggbmVlZF9md19yZXNldDsKIAogCXU4IGhhc19saW5rX2V2ZW50czsKIAl1OCBmd190eXBlOwpAQCAtMTI3Myw3OSArMTE2MCw2NCBAQAogCXUzMiBpcnE7CiAJdTMyIHRlbXA7CiAKLQl1MzIgbXNpX3RndF9zdGF0dXM7Ci0JdTMyIHJlc3Y0OworCXUzMiBpbnRfdmVjX2JpdDsKKwl1MzIgaGVhcnRiaXQ7CiAKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CiAKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF90eF9yaW5nICp0eF9yaW5nOwogCi0JaW50ICgqZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopOwotCWludCAoKmRpc2FibGVfcGh5X2ludGVycnVwdHMpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKik7CiAJaW50ICgqbWFjYWRkcl9zZXQpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdTggKik7CiAJaW50ICgqc2V0X210dSkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBpbnQpOwogCWludCAoKnNldF9wcm9taXNjKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHUzMik7CiAJdm9pZCAoKnNldF9tdWx0aSkgKHN0cnVjdCBuZXRfZGV2aWNlICopOwotCWludCAoKnBoeV9yZWFkKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGxvbmcgcmVnLCB1MzIgKik7Ci0JaW50ICgqcGh5X3dyaXRlKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGxvbmcgcmVnLCB1MzIgdmFsKTsKKwlpbnQgKCpwaHlfcmVhZCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1MzIgcmVnLCB1MzIgKik7CisJaW50ICgqcGh5X3dyaXRlKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHUzMiByZWcsIHUzMiB2YWwpOwogCWludCAoKmluaXRfcG9ydCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBpbnQpOwogCWludCAoKnN0b3BfcG9ydCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKTsKIAotCXUzMiAoKmh3X3JlYWRfd3gpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1bG9uZyk7Ci0JaW50ICgqaHdfd3JpdGVfd3gpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1bG9uZywgdTMyKTsKKwl1MzIgKCpjcmJfcmVhZCkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHVsb25nKTsKKwlpbnQgKCpjcmJfd3JpdGUpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1bG9uZywgdTMyKTsKKwogCWludCAoKnBjaV9tZW1fcmVhZCkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHU2NCwgdm9pZCAqLCBpbnQpOwogCWludCAoKnBjaV9tZW1fd3JpdGUpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB1NjQsIHZvaWQgKiwgaW50KTsKLQlpbnQgKCpwY2lfd3JpdGVfaW1tZWRpYXRlKShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdTY0LCB1MzIpOwotCXUzMiAoKnBjaV9yZWFkX2ltbWVkaWF0ZSkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHU2NCk7CisKIAl1bnNpZ25lZCBsb25nICgqcGNpX3NldF93aW5kb3cpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLAogCQkJdW5zaWduZWQgbG9uZyBsb25nKTsKIAotCXN0cnVjdCBuZXR4ZW5fbGVnYWN5X2ludHJfc2V0IGxlZ2FjeV9pbnRyOworCXUzMiAoKmlvX3JlYWQpKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCB2b2lkIF9faW9tZW0gKik7CisJdm9pZCAoKmlvX3dyaXRlKShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgdm9pZCBfX2lvbWVtICosIHUzMik7CisKKwl2b2lkIF9faW9tZW0JKnRndF9tYXNrX3JlZzsKKwl2b2lkIF9faW9tZW0JKnBjaV9pbnRfcmVnOworCXZvaWQgX19pb21lbQkqdGd0X3N0YXR1c19yZWc7CisJdm9pZCBfX2lvbWVtCSpjcmJfaW50X3N0YXRlX3JlZzsKKwl2b2lkIF9faW9tZW0JKmlzcl9pbnRfdmVjOwogCiAJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW01TSVhfRU5UUklFU19QRVJfQURBUFRFUl07CiAKIAlzdHJ1Y3QgbmV0eGVuX2R1bW15X2RtYSBkdW1teV9kbWE7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGZ3X3dvcms7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgIHR4X3RpbWVvdXRfdGFzazsKIAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKIAogCW54X25pY19pbnRyX2NvYWxlc2NlX3QgY29hbDsKIAotCXUzMiBmd19tYWpvcjsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCXUzMiByZXN2NTsKIAl1MzIgZndfdmVyc2lvbjsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogfTsKIAotLyoKLSAqIE5ldFhlbiBkbWEgd2F0Y2hkb2cgY29udHJvbCBzdHJ1Y3R1cmUKLSAqCi0gKglCaXQgMAkJOiBlbmFibGVkID0+IFIvTzogMSB3YXRjaGRvZyBhY3RpdmUsIDAgaW5hY3RpdmUKLSAqCUJpdCAxCQk6IGRpc2FibGVfcmVxdWVzdCA9PiAxIHJlcSBkaXNhYmxlIGRtYSB3YXRjaGRvZwotICoJQml0IDIJCTogZW5hYmxlX3JlcXVlc3QgPT4gIDEgcmVxIGVuYWJsZSBkbWEgd2F0Y2hkb2cKLSAqCUJpdCAzLTMxCTogdW51c2VkCi0gKi8KK2ludCBuZXR4ZW5fbml1X3hnX2luaXRfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KTsKK2ludCBuZXR4ZW5fbml1X2Rpc2FibGVfeGdfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCi0jZGVmaW5lIG5ldHhlbl9zZXRfZG1hX3dhdGNoZG9nX2Rpc2FibGVfcmVxKGNvbmZpZ193b3JkKSBcCi0JX25ldHhlbl9zZXRfYml0cyhjb25maWdfd29yZCwgMSwgMSwgMSkKLSNkZWZpbmUgbmV0eGVuX3NldF9kbWFfd2F0Y2hkb2dfZW5hYmxlX3JlcShjb25maWdfd29yZCkgXAotCV9uZXR4ZW5fc2V0X2JpdHMoY29uZmlnX3dvcmQsIDIsIDEsIDEpCi0jZGVmaW5lIG5ldHhlbl9nZXRfZG1hX3dhdGNoZG9nX2VuYWJsZWQoY29uZmlnX3dvcmQpIFwKLQkoKGNvbmZpZ193b3JkKSAmIDB4MSkKLSNkZWZpbmUgbmV0eGVuX2dldF9kbWFfd2F0Y2hkb2dfZGlzYWJsZWQoY29uZmlnX3dvcmQpIFwKLQkoKChjb25maWdfd29yZCkgPj4gMSkgJiAweDEpCi0KLWludCBuZXR4ZW5fbml1X3hnYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgbmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgbmV0eGVuX25pdV94Z2JlX2Rpc2FibGVfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLWludCBuZXR4ZW5fbml1X2diZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgbmV0eGVuX25pdV9nYmVfcGh5X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBsb25nIHJlZywKLQkJCSAgICBfX3UzMiAqIHJlYWR2YWwpOwotaW50IG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIGxvbmcgcmVnLCBfX3UzMiB2YWwpOworaW50IG54X2Z3X2NtZF9xdWVyeV9waHkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgKnZhbCk7CitpbnQgbnhfZndfY21kX3NldF9waHkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgdmFsKTsKIAogLyogRnVuY3Rpb25zIGF2YWlsYWJsZSBmcm9tIG5ldHhlbl9uaWNfaHcuYyAqLwogaW50IG5ldHhlbl9uaWNfc2V0X210dV94Z2Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbmV3X210dSk7CkBAIC0xMzU1LDUxICsxMjI3LDQ1IEBACiBpbnQgbmV0eGVuX3AzX25pY19zZXRfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1OCAqYWRkcik7CiAKICNkZWZpbmUgTlhSRDMyKGFkYXB0ZXIsIG9mZikgXAotCShhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsIG9mZikpCisJKGFkYXB0ZXItPmNyYl9yZWFkKGFkYXB0ZXIsIG9mZikpCiAjZGVmaW5lIE5YV1IzMihhZGFwdGVyLCBvZmYsIHZhbCkgXAotCShhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBvZmYsIHZhbCkpCisJKGFkYXB0ZXItPmNyYl93cml0ZShhZGFwdGVyLCBvZmYsIHZhbCkpCisjZGVmaW5lIE5YUkRJTyhhZGFwdGVyLCBhZGRyKSBcCisJKGFkYXB0ZXItPmlvX3JlYWQoYWRhcHRlciwgYWRkcikpCisjZGVmaW5lIE5YV1JJTyhhZGFwdGVyLCBhZGRyLCB2YWwpIFwKKwkoYWRhcHRlci0+aW9fd3JpdGUoYWRhcHRlciwgYWRkciwgdmFsKSkKKworaW50IG5ldHhlbl9wY2llX3NlbV9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBpbnQsIHUzMik7Cit2b2lkIG5ldHhlbl9wY2llX3NlbV91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGludCk7CisKKyNkZWZpbmUgbmV0eGVuX3JvbV9sb2NrKGEpCVwKKwluZXR4ZW5fcGNpZV9zZW1fbG9jaygoYSksIDIsIE5FVFhFTl9ST01fTE9DS19JRCkKKyNkZWZpbmUgbmV0eGVuX3JvbV91bmxvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV91bmxvY2soKGEpLCAyKQorI2RlZmluZSBuZXR4ZW5fcGh5X2xvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV9sb2NrKChhKSwgMywgTkVUWEVOX1BIWV9MT0NLX0lEKQorI2RlZmluZSBuZXR4ZW5fcGh5X3VubG9jayhhKQlcCisJbmV0eGVuX3BjaWVfc2VtX3VubG9jaygoYSksIDMpCisjZGVmaW5lIG5ldHhlbl9hcGlfbG9jayhhKQlcCisJbmV0eGVuX3BjaWVfc2VtX2xvY2soKGEpLCA1LCAwKQorI2RlZmluZSBuZXR4ZW5fYXBpX3VubG9jayhhKQlcCisJbmV0eGVuX3BjaWVfc2VtX3VubG9jaygoYSksIDUpCisjZGVmaW5lIG5ldHhlbl9zd19sb2NrKGEpCVwKKwluZXR4ZW5fcGNpZV9zZW1fbG9jaygoYSksIDYsIDApCisjZGVmaW5lIG5ldHhlbl9zd191bmxvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV91bmxvY2soKGEpLCA2KQorI2RlZmluZSBjcmJfd2luX2xvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV9sb2NrKChhKSwgNywgTkVUWEVOX0NSQl9XSU5fTE9DS19JRCkKKyNkZWZpbmUgY3JiX3dpbl91bmxvY2soYSkJXAorCW5ldHhlbl9wY2llX3NlbV91bmxvY2soKGEpLCA3KQogCiBpbnQgbmV0eGVuX25pY19nZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBuZXR4ZW5fbmljX2dldF9maXJtd2FyZV9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX25pY193b2xfc3VwcG9ydGVkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKLXUzMiBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZik7Ci1pbnQgbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdWxvbmcgb2ZmLCB1MzIgZGF0YSk7Ci1pbnQgbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKTsKLWludCBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKTsKLWludCBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHUzMiBkYXRhKTsKLXUzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZik7Ci12b2lkIG5ldHhlbl9uaWNfcGNpX3dyaXRlX25vcm1hbGl6ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdTY0IG9mZiwgdTMyIGRhdGEpOwotdTMyIG5ldHhlbl9uaWNfcGNpX3JlYWRfbm9ybWFsaXplXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmKTsKLXVuc2lnbmVkIGxvbmcgbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpOwotdm9pZCBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1MzIgd25kdyk7Ci0KLXUzMiBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpOwotaW50IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1bG9uZyBvZmYsIHUzMiBkYXRhKTsKLWludCBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKTsKLWludCBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSk7Ci1pbnQgbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdTY0IG9mZiwgdTMyIGRhdGEpOwotdTMyIG5ldHhlbl9uaWNfcGNpX3JlYWRfaW1tZWRpYXRlXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZik7Ci12b2lkIG5ldHhlbl9uaWNfcGNpX3dyaXRlX25vcm1hbGl6ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHUzMiBkYXRhKTsKLXUzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpOwotdW5zaWduZWQgbG9uZyBuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93XzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpOwotCiAvKiBGdW5jdGlvbnMgZnJvbSBuZXR4ZW5fbmljX2luaXQuYyAqLwotdm9pZCBuZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLWludCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX29mZmxvYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBuZXR4ZW5faW5pdF9kdW1teV9kbWEoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX2ZyZWVfZHVtbXlfZG1hKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CisKIGludCBuZXR4ZW5fcGhhbnRvbV9pbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBlZ3R1bmVfdmFsKTsKIGludCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IG5ldHhlbl9uZWVkX2Z3X3Jlc2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CkBAIC0xNDIzLDEzICsxMjg5LDE1IEBACiBpbnQgbmV0eGVuX2FsbG9jX3N3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5fZnJlZV9zd19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAordm9pZCBuZXR4ZW5fc2V0dXBfaHdvcHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgX19pb21lbSAqbmV0eGVuX2dldF9pb2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIHUzMik7CisKIGludCBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiB2b2lkIG5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3JlbGVhc2VfdHhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCi12b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX2luaXRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX25pY19jbGVhcl9zdGF0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBuZXR4ZW5fd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpAQCAtMTQ0MCwxNCArMTMwOCwxOSBAQAogdm9pZCBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmV0eGVuX3AzX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIG5ldHhlbl9wM19mcmVlX21hY19saXN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX3AyX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtb2RlKTsKIGludCBuZXR4ZW5fcDNfbmljX3NldF9wcm9taXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyKTsKIGludCBuZXR4ZW5fY29uZmlnX2ludHJfY29hbGVzY2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGludCBuZXR4ZW5fY29uZmlnX3JzcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpOworaW50IG5ldHhlbl9jb25maWdfaXBhZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGlwLCBpbnQgY21kKTsKIGludCBuZXR4ZW5fbGlua2V2ZW50X3JlcXVlc3Qoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKIHZvaWQgbmV0eGVuX2FkdmVydF9saW5rX2NoYW5nZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBsaW5rdXApOwogCiBpbnQgbnhfZndfY21kX3NldF9tdHUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbXR1KTsKIGludCBuZXR4ZW5fbmljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOworaW50IG5ldHhlbl9jb25maWdfaHdfbHJvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7CitpbnQgbmV0eGVuX2NvbmZpZ19icmlkZ2VkX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKK2ludCBuZXR4ZW5fc2VuZF9scm9fY2xlYW51cChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBpbnQgbmV0eGVuX25pY19zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApOwogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHhlbl9uaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwpAQCAtMTQ1NSw2ICsxMzI4LDkgQEAKIHZvaWQgbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZyk7CiAKKy8qIEZ1bmN0aW9ucyBmcm9tIG5ldHhlbl9uaWNfbWFpbi5jICovCitpbnQgbmV0eGVuX25pY19yZXNldF9jb250ZXh0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKTsKKwogLyoKICAqIE5ldFhlbiBCb2FyZCBpbmZvcm1hdGlvbgogICovCkBAIC0xNTA1LDU2ICsxMzgxLDYgQEAKIAkJbmFtZSA9ICJVbmtub3duIjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWRtYV93YXRjaGRvZ19zaHV0ZG93bl9yZXF1ZXN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQl1MzIgY3RybDsKLQotCS8qIGNoZWNrIGlmIGFscmVhZHkgaW5hY3RpdmUgKi8KLQljdHJsID0gYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAotCQkJTkVUWEVOX0NBTV9SQU0oTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwpKTsKLQotCWlmIChuZXR4ZW5fZ2V0X2RtYV93YXRjaGRvZ19lbmFibGVkKGN0cmwpID09IDApCi0JCXJldHVybiAxOwotCi0JLyogU2VuZCB0aGUgZGlzYWJsZSByZXF1ZXN0ICovCi0JbmV0eGVuX3NldF9kbWFfd2F0Y2hkb2dfZGlzYWJsZV9yZXEoY3RybCk7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9DQU1fUkFNKE5FVFhFTl9DQU1fUkFNX0RNQV9XQVRDSERPR19DVFJMKSwgY3RybCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV93YXRjaGRvZ19zaHV0ZG93bl9wb2xsX3Jlc3VsdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JdTMyIGN0cmw7Ci0KLQljdHJsID0gYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAotCQkJTkVUWEVOX0NBTV9SQU0oTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwpKTsKLQotCXJldHVybiAobmV0eGVuX2dldF9kbWFfd2F0Y2hkb2dfZW5hYmxlZChjdHJsKSA9PSAwKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV93YXRjaGRvZ193YWtldXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCXUzMiBjdHJsOwotCi0JY3RybCA9IGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKLQkJCU5FVFhFTl9DQU1fUkFNKE5FVFhFTl9DQU1fUkFNX0RNQV9XQVRDSERPR19DVFJMKSk7Ci0KLQlpZiAobmV0eGVuX2dldF9kbWFfd2F0Y2hkb2dfZW5hYmxlZChjdHJsKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBzZW5kIHRoZSB3YWtldXAgcmVxdWVzdCAqLwotCW5ldHhlbl9zZXRfZG1hX3dhdGNoZG9nX2VuYWJsZV9yZXEoY3RybCk7Ci0KLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX0NBTV9SQU0oTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwpLCBjdHJsKTsKLQotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbmxpbmUgdTMyIG5ldHhlbl90eF9hdmFpbChzdHJ1Y3QgbnhfaG9zdF90eF9yaW5nICp0eF9yaW5nKQogewogCXNtcF9tYigpOwpAQCAtMTU2OSw2ICsxMzk1LDYgQEAKIGV4dGVybiBpbnQgbmV0eGVuX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKIAkJCQlpbnQgKnZhbHApOwogCi1leHRlcm4gc3RydWN0IGV0aHRvb2xfb3BzIG5ldHhlbl9uaWNfZXRodG9vbF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldHhlbl9uaWNfZXRodG9vbF9vcHM7CiAKICNlbmRpZgkJCQkvKiBfX05FVFhFTl9OSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKaW5kZXggOWY4YWU0Ny4uOWNiOGY2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsNTUgKzIxLDEzIEBACiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgogICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCiAgKi8KIAogI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKICNpbmNsdWRlICJuZXR4ZW5fbmljLmgiCi0jaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgogCiAjZGVmaW5lIE5YSEFMX1ZFUlNJT04JMQogCi1zdGF0aWMgaW50Ci1uZXR4ZW5fYXBpX2xvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCXUzMiBkb25lID0gMCwgdGltZW91dCA9IDA7Ci0KLQlmb3IgKDs7KSB7Ci0JCS8qIEFjcXVpcmUgUENJRSBIVyBzZW1hcGhvcmU1ICovCi0JCWRvbmUgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNNV9MT0NLKSk7Ci0KLQkJaWYgKGRvbmUgPT0gMSkKLQkJCWJyZWFrOwotCi0JCWlmICgrK3RpbWVvdXQgPj0gTlhfT1NfQ1JCX1JFVFJZX0NPVU5UKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBsb2NrIHRpbWVvdXQuXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQltc2xlZXAoMSk7Ci0JfQotCi0jaWYgMAotCU5YV1IzMihhZGFwdGVyLAotCQlORVRYRU5fQVBJX0xPQ0tfSUQsIE5YX09TX0FQSV9MT0NLX0RSSVZFUik7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbmV0eGVuX2FwaV91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCS8qIFJlbGVhc2UgUENJRSBIVyBzZW1hcGhvcmU1ICovCi0JTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTVfVU5MT0NLKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1MzIKIG5ldHhlbl9wb2xsX3JzcChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CkBAIC0yNjUsNyArMjI0LDggQEAKIAkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tpXTsKIAogCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Jkc1tpXS5ob3N0X3Byb2R1Y2VyX2NyYik7Ci0JCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApKTsKIAl9CiAKIAlwcnNwX3NkcyA9ICgobnhfY2FyZHJzcF9zZHNfcmluZ190ICopCkBAIC0yNzUsMTAgKzIzNSwxMiBAQAogCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW2ldOwogCiAJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmhvc3RfY29uc3VtZXJfY3JiKTsKLQkJc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisJCXNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCkpOwogCiAJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmludGVycnVwdF9jcmIpOwotCQlzZHNfcmluZy0+Y3JiX2ludHJfbWFzayA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKwkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCU5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKSk7CiAJfQogCiAJcmVjdl9jdHgtPnN0YXRlID0gbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOwpAQCAtMzc4LDcgKzM0MCw4IEBACiAKIAlpZiAoZXJyID09IE5YX1JDT0RFX1NVQ0NFU1MpIHsKIAkJdGVtcCA9IGxlMzJfdG9fY3B1KHByc3AtPmNkc19yaW5nLmhvc3RfcHJvZHVjZXJfY3JiKTsKLQkJdHhfcmluZy0+Y3JiX2NtZF9wcm9kdWNlciA9IE5FVFhFTl9OSUNfUkVHKHRlbXAgLSAweDIwMCk7CisJCXR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCU5FVFhFTl9OSUNfUkVHKHRlbXAgLSAweDIwMCkpOwogI2lmIDAKIAkJYWRhcHRlci0+dHhfc3RhdGUgPQogCQkJbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOwpAQCAtNDE2LDYgKzM3OSw0NCBAQAogCX0KIH0KIAoraW50CitueF9md19jbWRfcXVlcnlfcGh5KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyICp2YWwpCit7CisJdTMyIHJjb2RlOworCisJcmNvZGUgPSBuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlOWEhBTF9WRVJTSU9OLAorCQkJcmVnLAorCQkJMCwKKwkJCTAsCisJCQlOWF9DRFJQX0NNRF9SRUFEX1BIWSk7CisKKwlpZiAocmNvZGUgIT0gTlhfUkNPREVfU1VDQ0VTUykKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gTlhSRDMyKGFkYXB0ZXIsIE5YX0FSRzFfQ1JCX09GRlNFVCk7Cit9CisKK2ludAorbnhfZndfY21kX3NldF9waHkoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgdmFsKQoreworCXUzMiByY29kZTsKKworCXJjb2RlID0gbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJTlhIQUxfVkVSU0lPTiwKKwkJCXJlZywKKwkJCXZhbCwKKwkJCTAsCisJCQlOWF9DRFJQX0NNRF9XUklURV9QSFkpOworCisJaWYgKHJjb2RlICE9IE5YX1JDT0RFX1NVQ0NFU1MpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB1NjQgY3R4X2FkZHJfc2lnX3JlZ3NbXVszXSA9IHsKIAl7TkVUWEVOX05JQ19SRUcoMHgxODgpLCBORVRYRU5fTklDX1JFRygweDE4YyksIE5FVFhFTl9OSUNfUkVHKDB4MWMwKX0sCiAJe05FVFhFTl9OSUNfUkVHKDB4MTkwKSwgTkVUWEVOX05JQ19SRUcoMHgxOTQpLCBORVRYRU5fTklDX1JFRygweDFjNCl9LApAQCAtNjQ3LDkgKzY0OCwxMCBAQAogCQl9CiAJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKIAotCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQorCQlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0KLQkJCQlyZWN2X2NyYl9yZWdpc3RlcnNbcG9ydF0uY3JiX3Jjdl9wcm9kdWNlcltyaW5nXTsKKwkJCQluZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW3BvcnRdLmNyYl9yY3ZfcHJvZHVjZXJbcmluZ10pOwogCX0KIAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKQEAgLTY2OCwxNCArNjcwLDE5IEBACiAJCXNkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHN0YXR1c19kZXNjICopYWRkcjsKIAogCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9Ci0JCQlyZWN2X2NyYl9yZWdpc3RlcnNbcG9ydF0uY3JiX3N0c19jb25zdW1lcltyaW5nXTsKKwkJCW5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQlyZWN2X2NyYl9yZWdpc3RlcnNbcG9ydF0uY3JiX3N0c19jb25zdW1lcltyaW5nXSk7CiAKIAkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPQotCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW3BvcnRdLnN3X2ludF9tYXNrW3JpbmddOworCQkJbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1twb3J0XS5zd19pbnRfbWFza1tyaW5nXSk7CiAJfQogCiAKLQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPj0gNCkgeworCWlmICghTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChfX05YX0ZXX0FUVEFDSEVELCAmYWRhcHRlci0+c3RhdGUpKQorCQkJZ290byBkb25lOworCiAJCWVyciA9IG54X2Z3X2NtZF9jcmVhdGVfcnhfY3R4KGFkYXB0ZXIpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X2ZyZWU7CkBAIC02ODgsNiArNjk1LDcgQEAKIAkJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAorZG9uZToKIAlyZXR1cm4gMDsKIAogZXJyX291dF9mcmVlOgpAQCAtNzA1LDcgKzcxMywxMCBAQAogCiAJaW50IHBvcnQgPSBhZGFwdGVyLT5wb3J0bnVtOwogCi0JaWYgKGFkYXB0ZXItPmZ3X21ham9yID49IDQpIHsKKwlpZiAoIU5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoX19OWF9GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCWdvdG8gZG9uZTsKKwogCQlueF9md19jbWRfZGVzdHJveV9yeF9jdHgoYWRhcHRlcik7CiAJCW54X2Z3X2NtZF9kZXN0cm95X3R4X2N0eChhZGFwdGVyKTsKIAl9IGVsc2UgewpAQCAtNzE4LDYgKzcyOSw3IEBACiAJLyogQWxsb3cgZG1hIHF1ZXVlcyB0byBkcmFpbiBhZnRlciBjb250ZXh0IHJlc2V0ICovCiAJbXNsZWVwKDIwKTsKIAorZG9uZToKIAlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChyZWN2X2N0eC0+aHdjdHggIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCmluZGV4IGUxNmVhNDYuLjcxNGYzODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsMTIgKzIxLDYgQEAKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCiAgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KICAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4gSW5jLAotICogMTg5MjIgRm9yZ2UgRHJpdmUKLSAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTM3LDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCi0jaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgogCiBzdHJ1Y3QgbmV0eGVuX25pY19zdGF0cyB7CiAJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOwpAQCAtNTcsNyArNTEsOCBAQAogCXsicnhfZHJvcHBlZCIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5yeGRyb3BwZWQpfSwKIAl7InR4X2Ryb3BwZWQiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMudHhkcm9wcGVkKX0sCiAJeyJjc3VtbWVkIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLmNzdW1tZWQpfSwKLQl7Im5vX3JjdiIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5ub19yY3YpfSwKKwl7InJ4X3BrdHMiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMucnhfcGt0cyl9LAorCXsibHJvX3BrdHMiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMubHJvX3BrdHMpfSwKIAl7InJ4X2J5dGVzIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnJ4Ynl0ZXMpfSwKIAl7InR4X2J5dGVzIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnR4Ynl0ZXMpfSwKIH07CkBAIC04NCwxOCArNzksMTcgQEAKIG5ldHhlbl9uaWNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGZ3X21ham9yID0gMDsKIAl1MzIgZndfbWlub3IgPSAwOwogCXUzMiBmd19idWlsZCA9IDA7CiAKIAlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgMzIpOwogCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQsIDMyKTsKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCXJlYWRfbG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKIAlmd19tYWpvciA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9NQUpPUik7CiAJZndfbWlub3IgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IpOwogCWZ3X2J1aWxkID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX1NVQik7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOworCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOwogCXNwcmludGYoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIiVkLiVkLiVkIiwgZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CiAKIAlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwgMzIpOwpAQCAtNDkwLDI4ICs0ODQsODYgQEAKIH0KIAogc3RhdGljIHZvaWQKLW5ldHhlbl9uaWNfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCituZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyaW5nLT5yeF9wZW5kaW5nID0gMDsKLQlyaW5nLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKLQlyaW5nLT5yeF9wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4LgotCQlyZHNfcmluZ3NbUkNWX1JJTkdfTk9STUFMXS5udW1fZGVzYzsKLQlyaW5nLT5yeF9qdW1ib19wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4LgotCQlyZHNfcmluZ3NbUkNWX1JJTkdfSlVNQk9dLm51bV9kZXNjOworCXJpbmctPnJ4X3BlbmRpbmcgPSBhZGFwdGVyLT5udW1fcnhkOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSBhZGFwdGVyLT5udW1fanVtYm9fcnhkOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgKz0gYWRhcHRlci0+bnVtX2xyb19yeGQ7CiAJcmluZy0+dHhfcGVuZGluZyA9IGFkYXB0ZXItPm51bV90eGQ7CiAKLQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JZWxzZQorCQlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMUc7CisJfSBlbHNlIHsKIAkJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKLQlyaW5nLT50eF9tYXhfcGVuZGluZyA9IE1BWF9DTURfREVTQ1JJUFRPUlNfSE9TVDsKLQlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlM7CisJCXJpbmctPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CisJfQorCisJcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBNQVhfQ01EX0RFU0NSSVBUT1JTOworCiAJcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CiAJcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKIH0KIAorc3RhdGljIHUzMgorbmV0eGVuX3ZhbGlkYXRlX3JpbmdwYXJhbSh1MzIgdmFsLCB1MzIgbWluLCB1MzIgbWF4LCBjaGFyICpyX25hbWUpCit7CisJdTMyIG51bV9kZXNjOworCW51bV9kZXNjID0gbWF4KHZhbCwgbWluKTsKKwludW1fZGVzYyA9IG1pbihudW1fZGVzYywgbWF4KTsKKwludW1fZGVzYyA9IHJvdW5kdXBfcG93X29mX3R3byhudW1fZGVzYyk7CisKKwlpZiAodmFsICE9IG51bV9kZXNjKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXR0aW5nICVzIHJpbmcgc2l6ZSAlZCBpbnN0ZWFkIG9mICVkXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgcl9uYW1lLCBudW1fZGVzYywgdmFsKTsKKwl9CisKKwlyZXR1cm4gbnVtX2Rlc2M7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgbWF4X3Jjdl9kZXNjID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7CisJdTE2IG1heF9qdW1ib19kZXNjID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CisJdTE2IG51bV9yeGQsIG51bV9qdW1ib19yeGQsIG51bV90eGQ7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHJpbmctPnJ4X21pbmlfcGVuZGluZykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwkJbWF4X3Jjdl9kZXNjID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKKwkJbWF4X2p1bWJvX2Rlc2MgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwl9CisKKwludW1fcnhkID0gbmV0eGVuX3ZhbGlkYXRlX3JpbmdwYXJhbShyaW5nLT5yeF9wZW5kaW5nLAorCQkJTUlOX1JDVl9ERVNDUklQVE9SUywgbWF4X3Jjdl9kZXNjLCAicngiKTsKKworCW51bV9qdW1ib19yeGQgPSBuZXR4ZW5fdmFsaWRhdGVfcmluZ3BhcmFtKHJpbmctPnJ4X2p1bWJvX3BlbmRpbmcsCisJCQlNSU5fSlVNQk9fREVTQ1JJUFRPUlMsIG1heF9qdW1ib19kZXNjLCAicngganVtYm8iKTsKKworCW51bV90eGQgPSBuZXR4ZW5fdmFsaWRhdGVfcmluZ3BhcmFtKHJpbmctPnR4X3BlbmRpbmcsCisJCQlNSU5fQ01EX0RFU0NSSVBUT1JTLCBNQVhfQ01EX0RFU0NSSVBUT1JTLCAidHgiKTsKKworCWlmIChudW1fcnhkID09IGFkYXB0ZXItPm51bV9yeGQgJiYgbnVtX3R4ZCA9PSBhZGFwdGVyLT5udW1fdHhkICYmCisJCQludW1fanVtYm9fcnhkID09IGFkYXB0ZXItPm51bV9qdW1ib19yeGQpCisJCXJldHVybiAwOworCisJYWRhcHRlci0+bnVtX3J4ZCA9IG51bV9yeGQ7CisJYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCA9IG51bV9qdW1ib19yeGQ7CisJYWRhcHRlci0+bnVtX3R4ZCA9IG51bV90eGQ7CisKKwlyZXR1cm4gbmV0eGVuX25pY19yZXNldF9jb250ZXh0KGFkYXB0ZXIpOworfQorCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKQEAgLTg4Myw3ICs5MzUsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGV0aHRvb2xfb3BzIG5ldHhlbl9uaWNfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgaW50IG5ldHhlbl9uaWNfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGh3X2xybzsKKworCWlmICghKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfSFdfTFJPKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlldGh0b29sX29wX3NldF9mbGFncyhuZXRkZXYsIGRhdGEpOworCisJaHdfbHJvID0gKGRhdGEgJiBFVEhfRkxBR19MUk8pID8gTkVUWEVOX05JQ19MUk9fRU5BQkxFRCA6IDA7CisKKwlpZiAobmV0eGVuX2NvbmZpZ19od19scm8oYWRhcHRlciwgaHdfbHJvKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGh3X2xybyA9PSAwKSAmJiBuZXR4ZW5fc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKSkKKwkJcmV0dXJuIC1FSU87CisKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0eGVuX25pY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gbmV0eGVuX25pY19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IG5ldHhlbl9uaWNfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyA9IG5ldHhlbl9uaWNfZ2V0X2RydmluZm8sCkBAIC04OTMsNiArOTY3LDcgQEAKIAkuZ2V0X2VlcHJvbV9sZW4gPSBuZXR4ZW5fbmljX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tID0gbmV0eGVuX25pY19nZXRfZWVwcm9tLAogCS5nZXRfcmluZ3BhcmFtID0gbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtID0gbmV0eGVuX25pY19zZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2VwYXJhbSA9IG5ldHhlbl9uaWNfZ2V0X3BhdXNlcGFyYW0sCiAJLnNldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19zZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLApAQCAtOTA5LDQgKzk4NCw2IEBACiAJLnNldF9yeF9jc3VtID0gbmV0eGVuX25pY19zZXRfcnhfY3N1bSwKIAkuZ2V0X2NvYWxlc2NlID0gbmV0eGVuX2dldF9pbnRyX2NvYWxlc2NlLAogCS5zZXRfY29hbGVzY2UgPSBuZXR4ZW5fc2V0X2ludHJfY29hbGVzY2UsCisJLmdldF9mbGFncyA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MgPSBuZXR4ZW5fbmljX3NldF9mbGFncywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IDgyNDEwMzYuLjdhNzE3NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDEyICsyMSw2IEBACiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgogICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCiAgKi8KIAogI2lmbmRlZiBfX05FVFhFTl9OSUNfSERSX0hfCkBAIC00MzMsNiArNDI4LDcgQEAKICNkZWZpbmUgTkVUWEVOX0NSQl9QRUdfTkVUXzEJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHTjEpCiAjZGVmaW5lIE5FVFhFTl9DUkJfUEVHX05FVF8yCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9QR04yKQogI2RlZmluZSBORVRYRU5fQ1JCX1BFR19ORVRfMwlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOMykKKyNkZWZpbmUgTkVUWEVOX0NSQl9QRUdfTkVUXzQJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1NRUzIpCiAjZGVmaW5lIE5FVFhFTl9DUkJfUEVHX05FVF9ECU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9QR05EKQogI2RlZmluZSBORVRYRU5fQ1JCX1BFR19ORVRfSQlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOSSkKICNkZWZpbmUgTkVUWEVOX0NSQl9ERFJfTkVUCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9NTikKQEAgLTcyMyw5ICs3MTksOTIgQEAKICNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IgKE5FVFhFTl9DQU1fUkFNKDB4MTU0KSkKICNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fU1VCCShORVRYRU5fQ0FNX1JBTSgweDE1OCkpCiAjZGVmaW5lIE5FVFhFTl9ST01fTE9DS19JRAkoTkVUWEVOX0NBTV9SQU0oMHgxMDApKQorI2RlZmluZSBORVRYRU5fUEhZX0xPQ0tfSUQJKE5FVFhFTl9DQU1fUkFNKDB4MTIwKSkKICNkZWZpbmUgTkVUWEVOX0NSQl9XSU5fTE9DS19JRAkoTkVUWEVOX0NBTV9SQU0oMHgxMjQpKQogCi0jZGVmaW5lIE5FVFhFTl9QSFlfTE9DS19JRAkoTkVUWEVOX0NBTV9SQU0oMHgxMjApKQorI2RlZmluZSBOSUNfQ1JCX0JBU0UJCShORVRYRU5fQ0FNX1JBTSgweDIwMCkpCisjZGVmaW5lIE5JQ19DUkJfQkFTRV8yCQkoTkVUWEVOX0NBTV9SQU0oMHg3MDApKQorI2RlZmluZSBORVRYRU5fTklDX1JFRyhYKQkoTklDX0NSQl9CQVNFKyhYKSkKKyNkZWZpbmUgTkVUWEVOX05JQ19SRUdfMihYKQkoTklDX0NSQl9CQVNFXzIrKFgpKQorCisjZGVmaW5lIE5YX0NEUlBfQ1JCX09GRlNFVAkJKE5FVFhFTl9OSUNfUkVHKDB4MTgpKQorI2RlZmluZSBOWF9BUkcxX0NSQl9PRkZTRVQJCShORVRYRU5fTklDX1JFRygweDFjKSkKKyNkZWZpbmUgTlhfQVJHMl9DUkJfT0ZGU0VUCQkoTkVUWEVOX05JQ19SRUcoMHgyMCkpCisjZGVmaW5lIE5YX0FSRzNfQ1JCX09GRlNFVAkJKE5FVFhFTl9OSUNfUkVHKDB4MjQpKQorI2RlZmluZSBOWF9TSUdOX0NSQl9PRkZTRVQJCShORVRYRU5fTklDX1JFRygweDI4KSkKKworI2RlZmluZSBDUkJfSE9TVF9EVU1NWV9CVUZfQUREUl9ISQkoTkVUWEVOX05JQ19SRUcoMHgzYykpCisjZGVmaW5lIENSQl9IT1NUX0RVTU1ZX0JVRl9BRERSX0xPCShORVRYRU5fTklDX1JFRygweDQwKSkKKworI2RlZmluZSBDUkJfQ01EUEVHX1NUQVRFCQkoTkVUWEVOX05JQ19SRUcoMHg1MCkpCisjZGVmaW5lIENSQl9SQ1ZQRUdfU1RBVEUJCShORVRYRU5fTklDX1JFRygweDEzYykpCisKKyNkZWZpbmUgQ1JCX1hHX1NUQVRFCQkJKE5FVFhFTl9OSUNfUkVHKDB4OTQpKQorI2RlZmluZSBDUkJfWEdfU1RBVEVfUDMJCQkoTkVUWEVOX05JQ19SRUcoMHg5OCkpCisjZGVmaW5lIENSQl9QRl9MSU5LX1NQRUVEXzEJCShORVRYRU5fTklDX1JFRygweGU4KSkKKyNkZWZpbmUgQ1JCX1BGX0xJTktfU1BFRURfMgkJKE5FVFhFTl9OSUNfUkVHKDB4ZWMpKQorCisjZGVmaW5lIENSQl9NUE9SVF9NT0RFCQkJKE5FVFhFTl9OSUNfUkVHKDB4YzQpKQorI2RlZmluZSBDUkJfRE1BX1NISUZUCQkJKE5FVFhFTl9OSUNfUkVHKDB4Y2MpKQorI2RlZmluZSBDUkJfSU5UX1ZFQ1RPUgkJCShORVRYRU5fTklDX1JFRygweGQ0KSkKKworI2RlZmluZSBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVAkJKE5FVFhFTl9OSUNfUkVHKDB4MDgpKQorI2RlZmluZSBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVAkJKE5FVFhFTl9OSUNfUkVHKDB4MGMpKQorI2RlZmluZSBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVF8xICAgCShORVRYRU5fTklDX1JFRygweDFhYykpCisjZGVmaW5lIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUXzEJKE5FVFhFTl9OSUNfUkVHKDB4MWIwKSkKKyNkZWZpbmUgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMgkoTkVUWEVOX05JQ19SRUcoMHgxYjgpKQorI2RlZmluZSBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVF8yCShORVRYRU5fTklDX1JFRygweDFiYykpCisjZGVmaW5lIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzMJKE5FVFhFTl9OSUNfUkVHKDB4MWQwKSkKKyNkZWZpbmUgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVRfMwkoTkVUWEVOX05JQ19SRUcoMHgxZDQpKQorI2RlZmluZSBDUkJfVEVNUF9TVEFURQkJCShORVRYRU5fTklDX1JFRygweDFiNCkpCisKKyNkZWZpbmUgQ1JCX1YyUF8wCQkJKE5FVFhFTl9OSUNfUkVHKDB4MjkwKSkKKyNkZWZpbmUgQ1JCX1YyUChwb3J0KQkJCShDUkJfVjJQXzArKChwb3J0KSo0KSkKKyNkZWZpbmUgQ1JCX0RSSVZFUl9WRVJTSU9OCQkoTkVUWEVOX05JQ19SRUcoMHgyYTApKQorCisjZGVmaW5lIENSQl9TV19JTlRfTUFTS18wCQkoTkVUWEVOX05JQ19SRUcoMHgxZDgpKQorI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMQkJKE5FVFhFTl9OSUNfUkVHKDB4MWUwKSkKKyNkZWZpbmUgQ1JCX1NXX0lOVF9NQVNLXzIJCShORVRYRU5fTklDX1JFRygweDFlNCkpCisjZGVmaW5lIENSQl9TV19JTlRfTUFTS18zCQkoTkVUWEVOX05JQ19SRUcoMHgxZTgpKQorCisjZGVmaW5lIENSQl9GV19DQVBBQklMSVRJRVNfMQkJKE5FVFhFTl9DQU1fUkFNKDB4MTI4KSkKKyNkZWZpbmUgQ1JCX01BQ19CTE9DS19TVEFSVAkJKE5FVFhFTl9DQU1fUkFNKDB4MWMwKSkKKworLyoKKyAqIGNhcGFiaWxpdGllcyByZWdpc3RlciwgY2FuIGJlIHVzZWQgdG8gc2VsZWN0aXZlbHkgZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMKKyAqIGZvciBiYWNrd2FyZCBjb21wYWJpbGl0eQorICovCisjZGVmaW5lIENSQl9OSUNfQ0FQQUJJTElUSUVTX0hPU1QJTkVUWEVOX05JQ19SRUcoMHgxYTgpCisjZGVmaW5lIENSQl9OSUNfQ0FQQUJJTElUSUVTX0ZXCSAgCU5FVFhFTl9OSUNfUkVHKDB4MWRjKQorI2RlZmluZSBDUkJfTklDX01TSV9NT0RFX0hPU1QJCU5FVFhFTl9OSUNfUkVHKDB4MjcwKQorI2RlZmluZSBDUkJfTklDX01TSV9NT0RFX0ZXCSAgCU5FVFhFTl9OSUNfUkVHKDB4Mjc0KQorCisjZGVmaW5lIElOVFJfU0NIRU1FX1BFUlBPUlQJICAgICAgCTB4MQorI2RlZmluZSBNU0lfTU9ERV9NVUxUSUZVTkMJICAgICAgCTB4MQorCisvKiB1c2VkIGZvciBldGh0b29sIHRlc3RzICovCisjZGVmaW5lIENSQl9TQ1JBVENIUEFEX1RFU1QJICAgIE5FVFhFTl9OSUNfUkVHKDB4MjgwKQorCisvKgorICogQ3JiUG9ydFBoYW5DbnRySGkvTG8gaXMgdXNlZCB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIEhvc3RQaGFudG9tSW5kZXggYWRkcmVzcworICogd2hpY2ggY2FuIGJlIHJlYWQgYnkgdGhlIFBoYW50b20gaG9zdCB0byBnZXQgcHJvZHVjZXIvY29uc3VtZXIgaW5kZXhlcyBmcm9tCisgKiBQaGFudG9tL0Nhc3Blci4gSWYgaXQgaXMgbm90IEhPU1RfU0hBUkVEX01FTU9SWSwgdGhlbiB0aGUgZm9sbG93aW5nCisgKiByZWdpc3RlcnMgd2lsbCBiZSB1c2VkIGZvciB0aGUgYWRkcmVzc2VzIG9mIHRoZSByaW5nJ3Mgc2hhcmVkIG1lbW9yeQorICogb24gdGhlIFBoYW50b20uCisgKi8KKworI2RlZmluZSBueF9nZXRfdGVtcF92YWwoeCkJCSgoeCkgPj4gMTYpCisjZGVmaW5lIG54X2dldF90ZW1wX3N0YXRlKHgpCQkoKHgpICYgMHhmZmZmKQorI2RlZmluZSBueF9lbmNvZGVfdGVtcCh2YWwsIHN0YXRlKQkoKCh2YWwpIDw8IDE2KSB8IChzdGF0ZSkpCisKKy8qCisgKiBUZW1wZXJhdHVyZSBjb250cm9sLgorICovCitlbnVtIHsKKwlOWF9URU1QX05PUk1BTCA9IDB4MSwJLyogTm9ybWFsIG9wZXJhdGluZyByYW5nZSAqLworCU5YX1RFTVBfV0FSTiwJCS8qIFNvdW5kIGFsZXJ0LCB0ZW1wZXJhdHVyZSBnZXR0aW5nIGhpZ2ggKi8KKwlOWF9URU1QX1BBTklDCQkvKiBGYXRhbCBlcnJvciwgaGFyZHdhcmUgaGFzIHNodXQgZG93bi4gKi8KK307CiAKIC8qIExvY2sgSURzIGZvciBQSFkgbG9jayAqLwogI2RlZmluZSBQSFlfTE9DS19EUklWRVIJCTB4NDQ1MjQ5NTYKQEAgLTgxNiwxNiArODk1LDI0IEBACiAKICNkZWZpbmUgUENJRV9EQ1IJCTB4MDBkOAogCisjZGVmaW5lIFBDSUVfU0VNMF9MT0NLCQkoMHgxYzAwMCkKKyNkZWZpbmUgUENJRV9TRU0wX1VOTE9DSwkoMHgxYzAwNCkKKyNkZWZpbmUgUENJRV9TRU0xX0xPQ0sJCSgweDFjMDA4KQorI2RlZmluZSBQQ0lFX1NFTTFfVU5MT0NLCSgweDFjMDBjKQogI2RlZmluZSBQQ0lFX1NFTTJfTE9DSwkJKDB4MWMwMTApCS8qIEZsYXNoIGxvY2sgICAqLwogI2RlZmluZSBQQ0lFX1NFTTJfVU5MT0NLCSgweDFjMDE0KQkvKiBGbGFzaCB1bmxvY2sgKi8KICNkZWZpbmUgUENJRV9TRU0zX0xPQ0sJICAJKDB4MWMwMTgpCS8qIFBoeSBsb2NrICAgICAqLwogI2RlZmluZSBQQ0lFX1NFTTNfVU5MT0NLCSgweDFjMDFjKQkvKiBQaHkgdW5sb2NrICAgKi8KKyNkZWZpbmUgUENJRV9TRU00X0xPQ0sJICAJKDB4MWMwMjApCisjZGVmaW5lIFBDSUVfU0VNNF9VTkxPQ0sJKDB4MWMwMjQpCiAjZGVmaW5lIFBDSUVfU0VNNV9MT0NLCQkoMHgxYzAyOCkJLyogQVBJIGxvY2sgICAgICovCiAjZGVmaW5lIFBDSUVfU0VNNV9VTkxPQ0sJKDB4MWMwMmMpCS8qIEFQSSB1bmxvY2sgICAqLwogI2RlZmluZSBQQ0lFX1NFTTZfTE9DSwkJKDB4MWMwMzApCS8qIHN3IGxvY2sgICAgICAqLwogI2RlZmluZSBQQ0lFX1NFTTZfVU5MT0NLCSgweDFjMDM0KQkvKiBzdyB1bmxvY2sgICAgKi8KICNkZWZpbmUgUENJRV9TRU03X0xPQ0sJCSgweDFjMDM4KQkvKiBjcmIgd2luIGxvY2sgKi8KICNkZWZpbmUgUENJRV9TRU03X1VOTE9DSwkoMHgxYzAzYykJLyogY3Jid2luIHVubG9jayovCisjZGVmaW5lIFBDSUVfU0VNX0xPQ0soTikJKFBDSUVfU0VNMF9MT0NLICsgOCooTikpCisjZGVmaW5lIFBDSUVfU0VNX1VOTE9DSyhOKQkoUENJRV9TRU0wX1VOTE9DSyArIDgqKE4pKQogCiAjZGVmaW5lIFBDSUVfU0VUVVBfRlVOQ1RJT04JKDB4MTIwNDApCiAjZGVmaW5lIFBDSUVfU0VUVVBfRlVOQ1RJT04yCSgweDEyMDQ4KQpAQCAtODUyLDggKzkzOSwzMCBAQAogI2RlZmluZSBOWF9QRUdfVFVORV9NTl9QUkVTRU5UCQkweDEKICNkZWZpbmUgTlhfUEVHX1RVTkVfQ0FQQUJJTElUWQkJKE5FVFhFTl9DQU1fUkFNKDB4MDJjKSkKIAotI2RlZmluZSBORVRYRU5fQ0FNX1JBTV9ETUFfV0FUQ0hET0dfQ1RSTAkJKDB4MTQpCisjZGVmaW5lIE5FVFhFTl9ETUFfV0FUQ0hET0dfQ1RSTAkoTkVUWEVOX0NBTV9SQU0oMHgxNCkpCiAjZGVmaW5lIE5FVFhFTl9QRUdfQUxJVkVfQ09VTlRFUgkoTkVUWEVOX0NBTV9SQU0oMHhiMCkpCisjZGVmaW5lIE5FVFhFTl9QRUdfSEFMVF9TVEFUVVMxIAkoTkVUWEVOX0NBTV9SQU0oMHhhOCkpCisjZGVmaW5lIE5FVFhFTl9QRUdfSEFMVF9TVEFUVVMyIAkoTkVUWEVOX0NBTV9SQU0oMHhhYykpCisjZGVmaW5lIE5YX0NSQl9ERVZfUkVGX0NPVU5UCQkoTkVUWEVOX0NBTV9SQU0oMHgxMzgpKQorI2RlZmluZSBOWF9DUkJfREVWX1NUQVRFCQkoTkVUWEVOX0NBTV9SQU0oMHgxNDApKQorCisvKiBEZXZpY2UgU3RhdGUgKi8KKyNkZWZpbmUgTlhfREVWX0NPTEQJCTEKKyNkZWZpbmUgTlhfREVWX0lOSVRBTElaSU5HCTIKKyNkZWZpbmUgTlhfREVWX1JFQURZCQkzCisjZGVmaW5lIE5YX0RFVl9ORUVEX1JFU0VUCTQKKyNkZWZpbmUgTlhfREVWX05FRURfUVVJU0NFTlQJNQorI2RlZmluZSBOWF9ERVZfRkFJTEVECQk2CisKKyNkZWZpbmUgTlhfUkNPREVfRFJJVkVSX0lORk8JCTB4MjAwMDAwMDAKKyNkZWZpbmUgTlhfUkNPREVfRFJJVkVSX0NBTl9SRUxPQUQJMHg0MDAwMDAwMAorI2RlZmluZSBOWF9SQ09ERV9GQVRBTF9FUlJPUgkJMHg4MDAwMDAwMAorI2RlZmluZSBOWF9GV0VSUk9SX1BFR05VTShjb2RlKQkJKChjb2RlKSAmIDB4ZmYpCisjZGVmaW5lIE5YX0ZXRVJST1JfQ09ERShjb2RlKQkJKChjb2RlID4+IDgpICYgMHhmZmZmZikKKworI2RlZmluZSBGV19QT0xMX0RFTEFZCQkJKDIgKiBIWikKKyNkZWZpbmUgRldfRkFJTF9USFJFU0gJCQkzCisjZGVmaW5lIEZXX1BPTExfVEhSRVNICQkJMTAKIAogI2RlZmluZQlJU1JfTVNJX0lOVF9UUklHR0VSKEZVTkMpIChORVRYRU5fUENJWF9QU19SRUcoUENJWF9NU0lfRihGVU5DKSkpCiAjZGVmaW5lIElTUl9MRUdBQ1lfSU5UX1RSSUdHRVJFRChWQUwpCSgoKFZBTCkgJiAweDMwMCkgPT0gMHgyMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCBiOTEyM2Q0Li4zMjMxNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsMTcgKzIxLDEwIEBACiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgogICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCiAgKi8KIAogI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCi0jaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgogCiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAKQEAgLTg3LDcgKzgxLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotI2RlZmluZSBDUkJfV0lOX0xPQ0tfVElNRU9VVCAxMDAwMDAwMDAKIHN0YXRpYyBjcmJfMTI4TV8yTV9ibG9ja19tYXBfdAogY3JiXzEyOE1fMk1fbWFwWzY0XSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IHsKICAgICB7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkJLyogMDogUENJICovCkBAIC0zMjEsNiArMzE0LDY0IEBACiAKICNkZWZpbmUgTkVUWEVOX1dJTkRPV19PTkUgCTB4MjAwMDAwMCAvKkNSQiBXaW5kb3c6IGJpdCAyNSBvZiBDUkIgYWRkcmVzcyAqLwogCisjZGVmaW5lIE5FVFhFTl9QQ0lFX1NFTV9USU1FT1VUCTEwMDAwCisKK2ludAorbmV0eGVuX3BjaWVfc2VtX2xvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgc2VtLCB1MzIgaWRfcmVnKQoreworCWludCBkb25lID0gMCwgdGltZW91dCA9IDA7CisKKwl3aGlsZSAoIWRvbmUpIHsKKwkJZG9uZSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU1fTE9DSyhzZW0pKSk7CisJCWlmIChkb25lID09IDEpCisJCQlicmVhazsKKwkJaWYgKCsrdGltZW91dCA+PSBORVRYRU5fUENJRV9TRU1fVElNRU9VVCkKKwkJCXJldHVybiAtMTsKKwkJbXNsZWVwKDEpOworCX0KKworCWlmIChpZF9yZWcpCisJCU5YV1IzMihhZGFwdGVyLCBpZF9yZWcsIGFkYXB0ZXItPnBvcnRudW0pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25ldHhlbl9wY2llX3NlbV91bmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgc2VtKQoreworCWludCB2YWw7CisJdmFsID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTV9VTkxPQ0soc2VtKSkpOworfQorCitpbnQgbmV0eGVuX25pdV94Z19pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKK3sKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzErKDB4MTAwMDAqcG9ydCksIDB4MTQ0Nyk7CisJCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCsoMHgxMDAwMCpwb3J0KSwgMHg1KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRGlzYWJsZSBhbiBYRyBpbnRlcmZhY2UgKi8KK2ludCBuZXR4ZW5fbml1X2Rpc2FibGVfeGdfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJX191MzIgbWFjX2NmZzsKKwl1MzIgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1hY19jZmcgPSAwOworCWlmIChOWFdSMzIoYWRhcHRlciwKKwkJCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSwgbWFjX2NmZykpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCiAjZGVmaW5lIE5FVFhFTl9VTklDQVNUX0FERFIocG9ydCwgaW5kZXgpIFwKIAkoTkVUWEVOX1VOSUNBU1RfQUREUl9CQVNFKyhwb3J0KjMyKSsoaW5kZXgqOCkpCiAjZGVmaW5lIE5FVFhFTl9NQ0FTVF9BRERSKHBvcnQsIGluZGV4KSBcCkBAIC0zMzAsNiArMzgxLDU2IEBACiAjZGVmaW5lIE1BQ19MTyhhZGRyKSBcCiAJKChhZGRyWzVdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwgKGFkZHJbM10pKQogCitpbnQgbmV0eGVuX3AyX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBtb2RlKQoreworCV9fdTMyIHJlZzsKKwl1MzIgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisKKwlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCkpOworCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKQorCQlyZWcgPSAocmVnIHwgMHgyMDAwVUwpOworCWVsc2UKKwkJcmVnID0gKHJlZyAmIH4weDIwMDBVTCk7CisKKwlpZiAobW9kZSA9PSBORVRYRU5fTklVX0FMTE1VTFRJX01PREUpCisJCXJlZyA9IChyZWcgfCAweDEwMDBVTCk7CisJZWxzZQorCQlyZWcgPSAocmVnICYgfjB4MTAwMFVMKTsKKworCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCksIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHhlbl9wMl9uaWNfc2V0X21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTggKmFkZHIpCit7CisJdTMyIG1hY19oaSwgbWFjX2xvOworCXUzMiByZWdfaGksIHJlZ19sbzsKKworCXU4IHBoeSA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisKKwlpZiAocGh5ID49IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1hY19sbyA9ICgodTMyKWFkZHJbMF0gPDwgMTYpIHwgKCh1MzIpYWRkclsxXSA8PCAyNCk7CisJbWFjX2hpID0gYWRkclsyXSB8ICgodTMyKWFkZHJbM10gPDwgOCkgfAorCQkoKHUzMilhZGRyWzRdIDw8IDE2KSB8ICgodTMyKWFkZHJbNV0gPDwgMjQpOworCisJcmVnX2xvID0gTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfMSArICgweDEwMDAwICogcGh5KTsKKwlyZWdfaGkgPSBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF9ISSArICgweDEwMDAwICogcGh5KTsKKworCS8qIHdyaXRlIHR3aWNlIHRvIGZsdXNoICovCisJaWYgKE5YV1IzMihhZGFwdGVyLCByZWdfbG8sIG1hY19sbykgfHwgTlhXUjMyKGFkYXB0ZXIsIHJlZ19oaSwgbWFjX2hpKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKE5YV1IzMihhZGFwdGVyLCByZWdfbG8sIG1hY19sbykgfHwgTlhXUjMyKGFkYXB0ZXIsIHJlZ19oaSwgbWFjX2hpKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogbmV0eGVuX25pY19lbmFibGVfbWNhc3RfZmlsdGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTQ2MCw2ICs1NjEsOSBAQAogCiAJaSA9IDA7CiAKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybiAtRUlPOworCiAJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CiAJX19uZXRpZl90eF9sb2NrX2JoKHR4X3JpbmctPnR4cSk7CiAKQEAgLTY0Myw3ICs3NDcsNyBAQAogCiAJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihueF9uaWNfcmVxX3QpKTsKIAotCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoTlhfTklDX1JFUVVFU1QgPDwgMjMpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoTlhfSE9TVF9SRVFVRVNUIDw8IDIzKTsKIAogCXdvcmQgPSBORVRYRU5fQ09ORklHX0lOVFJfQ09BTEVTQ0UgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKIAlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOwpAQCAtNjU5LDYgKzc2Myw2NiBAQAogCXJldHVybiBydjsKIH0KIAoraW50IG5ldHhlbl9jb25maWdfaHdfbHJvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSkKK3sKKwlueF9uaWNfcmVxX3QgcmVxOworCXU2NCB3b3JkOworCWludCBydiA9IDA7CisKKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19MUk9fRU5BQkxFRCkgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YobnhfbmljX3JlcV90KSk7CisKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gTlhfTklDX0gyQ19PUENPREVfQ09ORklHX0hXX0xSTyB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChlbmFibGUpOworCisJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRVJST1IuIENvdWxkIG5vdCBzZW5kICIKKwkJCSJjb25maWd1cmUgaHcgbHJvIHJlcXVlc3RcbiIpOworCX0KKworCWFkYXB0ZXItPmZsYWdzIF49IE5FVFhFTl9OSUNfTFJPX0VOQUJMRUQ7CisKKwlyZXR1cm4gcnY7Cit9CisKK2ludCBuZXR4ZW5fY29uZmlnX2JyaWRnZWRfbW9kZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJbnhfbmljX3JlcV90IHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgcnYgPSAwOworCisJaWYgKCEhKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19CUklER0VfRU5BQkxFRCkgPT0gZW5hYmxlKQorCQlyZXR1cm4gcnY7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOworCisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChOWF9IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IE5YX05JQ19IMkNfT1BDT0RFX0NPTkZJR19CUklER0lORyB8CisJCSgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChlbmFibGUpOworCisJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRVJST1IuIENvdWxkIG5vdCBzZW5kICIKKwkJCQkiY29uZmlndXJlIGJyaWRnZSBtb2RlIHJlcXVlc3RcbiIpOworCX0KKworCWFkYXB0ZXItPmZsYWdzIF49IE5FVFhFTl9OSUNfQlJJREdFX0VOQUJMRUQ7CisKKwlyZXR1cm4gcnY7Cit9CisKKwogI2RlZmluZSBSU1NfSEFTSFRZUEVfSVBfVENQCTB4MwogCiBpbnQgbmV0eGVuX2NvbmZpZ19yc3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQpAQCAtNzA2LDYgKzg3MCwzMCBAQAogCXJldHVybiBydjsKIH0KIAoraW50IG5ldHhlbl9jb25maWdfaXBhZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGlwLCBpbnQgY21kKQoreworCW54X25pY19yZXFfdCByZXE7CisJdTY0IHdvcmQ7CisJaW50IHJ2OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihueF9uaWNfcmVxX3QpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gTlhfTklDX0gyQ19PUENPREVfQ09ORklHX0lQQUREUiB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChjbWQpOworCXJlcS53b3Jkc1sxXSA9IGNwdV90b19sZTY0KGlwKTsKKworCXJ2ID0gbmV0eGVuX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3Qgbm90aWZ5ICVzIElQIDB4JXggcmV1cWVzdFxuIiwKKwkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJKGNtZCA9PSBOWF9JUF9VUCkgPyAiQWRkIiA6ICJSZW1vdmUiLCBpcCk7CisJfQorCXJldHVybiBydjsKK30KKwogaW50IG5ldHhlbl9saW5rZXZlbnRfcmVxdWVzdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCiB7CiAJbnhfbmljX3JlcV90IHJlcTsKQEAgLTcyOCw2ICs5MTYsMjkgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK2ludCBuZXR4ZW5fc2VuZF9scm9fY2xlYW51cChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbnhfbmljX3JlcV90IHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgcnY7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKG54X25pY19yZXFfdCkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoTlhfSE9TVF9SRVFVRVNUIDw8IDIzKTsKKworCXdvcmQgPSBOWF9OSUNfSDJDX09QQ09ERV9MUk9fUkVRVUVTVCB8CisJCSgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpIHwKKwkJKCh1NjQpTlhfTklDX0xST19SRVFVRVNUX0NMRUFOVVAgPDwgNTYpIDsKKworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlydiA9IG5ldHhlbl9zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGNsZWFudXAgbHJvIGZsb3dzXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfQorCXJldHVybiBydjsKK30KKwogLyoKICAqIG5ldHhlbl9uaWNfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CiAgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKQEAgLTc5MiwxOCArMTAwMywxNSBAQAogCV9fbGUzMiAqcG1hYyA9IChfX2xlMzIgKikgbWFjOwogCXUzMiBvZmZzZXQ7CiAKLQlvZmZzZXQgPSBORVRYRU5fVVNFUl9TVEFSVCArCi0JCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fbmV3X3VzZXJfaW5mbywgbWFjX2FkZHIpICsKLQkJYWRhcHRlci0+cG9ydG51bSAqIHNpemVvZih1NjQpOworCW9mZnNldCA9IE5YX0ZXX01BQ19BRERSX09GRlNFVCArIChhZGFwdGVyLT5wb3J0bnVtICogc2l6ZW9mKHU2NCkpOwogCiAJaWYgKG5ldHhlbl9nZXRfZmxhc2hfYmxvY2soYWRhcHRlciwgb2Zmc2V0LCBzaXplb2YodTY0KSwgcG1hYykgPT0gLTEpCiAJCXJldHVybiAtMTsKIAogCWlmICgqbWFjID09IGNwdV90b19sZTY0KH4wVUxMKSkgewogCi0JCW9mZnNldCA9IE5FVFhFTl9VU0VSX1NUQVJUX09MRCArCi0JCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX3VzZXJfb2xkX2luZm8sIG1hY19hZGRyKSArCi0JCQlhZGFwdGVyLT5wb3J0bnVtICogc2l6ZW9mKHU2NCk7CisJCW9mZnNldCA9IE5YX09MRF9NQUNfQUREUl9PRkZTRVQgKworCQkJKGFkYXB0ZXItPnBvcnRudW0gKiBzaXplb2YodTY0KSk7CiAKIAkJaWYgKG5ldHhlbl9nZXRfZmxhc2hfYmxvY2soYWRhcHRlciwKIAkJCQkJb2Zmc2V0LCBzaXplb2YodTY0KSwgcG1hYykgPT0gLTEpCkBAIC04MzQsMzcgKzEwNDIsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBDUkJfV0lOX0xPQ0tfVElNRU9VVCAxMDAwMDAwMDAKLQotc3RhdGljIGludCBjcmJfd2luX2xvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCBkb25lID0gMCwgdGltZW91dCA9IDA7Ci0KLQl3aGlsZSAoIWRvbmUpIHsKLQkJLyogYWNxdWlyZSBzZW1hcGhvcmUzIGZyb20gUENJIEhXIGJsb2NrICovCi0JCWRvbmUgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNN19MT0NLKSk7Ci0JCWlmIChkb25lID09IDEpCi0JCQlicmVhazsKLQkJaWYgKHRpbWVvdXQgPj0gQ1JCX1dJTl9MT0NLX1RJTUVPVVQpCi0JCQlyZXR1cm4gLTE7Ci0JCXRpbWVvdXQrKzsKLQkJdWRlbGF5KDEpOwotCX0KLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX0NSQl9XSU5fTE9DS19JRCwgYWRhcHRlci0+cG9ydG51bSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNyYl93aW5fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgdmFsOwotCi0JdmFsID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTdfVU5MT0NLKSk7Ci19Ci0KIC8qCiAgKiBDaGFuZ2VzIHRoZSBDUkIgd2luZG93IHRvIHRoZSBzcGVjaWZpZWQgd2luZG93LgogICovCi12b2lkCitzdGF0aWMgdm9pZAogbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHduZHcpCiB7CiAJdm9pZCBfX2lvbWVtICpvZmZzZXQ7CkBAIC05NzcsNjEgKzExNTgsNjggQEAKIAkJKHVsb25nKWFkYXB0ZXItPmFody5wY2lfYmFzZTA7CiB9CiAKLWludAorc3RhdGljIGludAogbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWxvbmcgb2ZmLCB1MzIgZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgX19pb21lbSAqYWRkcjsKIAotCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgeworCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkKIAkJYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7Ci0JfSBlbHNlIHsJCS8qIFdpbmRvdyAwICovCisJZWxzZQogCQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIG9mZik7Ci0JCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKLQl9CiAKLQlpZiAoIWFkZHIpIHsKLQkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQl3cml0ZWwoZGF0YSwgYWRkcik7Ci0KLQlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQotCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdTMyCi1uZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZikKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHI7Ci0JdTMyIGRhdGE7CisJQlVHX09OKCFhZGRyKTsKIAogCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewkvKiBXaW5kb3cgMSAqLwotCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKKwkJcmVhZF9sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOworCQl3cml0ZWwoZGF0YSwgYWRkcik7CisJCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOwogCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLworCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIG9mZik7CiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKKwkJd3JpdGVsKGRhdGEsIGFkZHIpOworCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlpZiAoIWFkZHIpIHsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMgorbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdTMyIGRhdGE7CisKKwlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpCisJCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOworCWVsc2UKKwkJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBvZmYpOworCisJQlVHX09OKCFhZGRyKTsKKworCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewkvKiBXaW5kb3cgMSAqLworCQlyZWFkX2xvY2soJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7CisJCWRhdGEgPSByZWFkbChhZGRyKTsKKwkJcmVhZF91bmxvY2soJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7CisJfSBlbHNlIHsJCS8qIFdpbmRvdyAwICovCisJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CisJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKKwkJZGF0YSA9IHJlYWRsKGFkZHIpOwogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7Ci0JCXJldHVybiAxOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJfQogCi0JZGF0YSA9IHJlYWRsKGFkZHIpOwotCi0JaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKLQkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwotCiAJcmV0dXJuIGRhdGE7CiB9CiAKLWludAorc3RhdGljIGludAogbmV0eGVuX25pY19od193cml0ZV93eF8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZiwgdTMyIGRhdGEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcnY7CiAKIAlydiA9IG5ldHhlbl9uaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCAmb2ZmKTsKQEAgLTEwNTcsMTAgKzEyNDUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotdTMyCitzdGF0aWMgdTMyCiBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcnY7CiAJdTMyIGRhdGE7CiAKQEAgLTEwODYsMjggKzEyNzQsOSBAQAogCXJldHVybiBkYXRhOwogfQogCi0vKgotICogY2hlY2sgbWVtb3J5IGFjY2VzcyBib3VuZGFyeS4KLSAqIHVzZWQgYnkgdGVzdCBhZ2VudC4gc3VwcG9ydCBkZHIgYWNjZXNzIG9ubHkgZm9yIG5vdwotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZwotbmV0eGVuX25pY19wY2lfbWVtX2JvdW5kX2NoZWNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdW5zaWduZWQgbG9uZyBsb25nIGFkZHIsIGludCBzaXplKQotewotCWlmICghQUREUl9JTl9SQU5HRShhZGRyLAotCQkJTkVUWEVOX0FERFJfRERSX05FVCwgTkVUWEVOX0FERFJfRERSX05FVF9NQVgpIHx8Ci0JCSFBRERSX0lOX1JBTkdFKGFkZHIrc2l6ZS0xLAotCQkJTkVUWEVOX0FERFJfRERSX05FVCwgTkVUWEVOX0FERFJfRERSX05FVF9NQVgpIHx8Ci0JCSgoc2l6ZSAhPSAxKSAmJiAoc2l6ZSAhPSAyKSAmJiAoc2l6ZSAhPSA0KSAmJiAoc2l6ZSAhPSA4KSkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbnQgbmV0eGVuX3BjaV9zZXRfd2luZG93X3dhcm5pbmdfY291bnQ7CiAKLXVuc2lnbmVkIGxvbmcKK3N0YXRpYyB1bnNpZ25lZCBsb25nCiBuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcikKIHsKQEAgLTExNzEsMjIgKzEzNDAsNTYgQEAKIAlyZXR1cm4gYWRkcjsKIH0KIAotLyoKLSAqIE5vdGUgOiBvbmx5IDMyLWJpdCB3cml0ZXMhCi0gKi8KLWludCBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXU2NCBvZmYsIHUzMiBkYXRhKQorLyogd2luZG93IDEgcmVnaXN0ZXJzIG9ubHkgKi8KK3N0YXRpYyB2b2lkIG5ldHhlbl9uaWNfaW9fd3JpdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXZvaWQgX19pb21lbSAqYWRkciwgdTMyIGRhdGEpCiB7Ci0Jd3JpdGVsKGRhdGEsICh2b2lkIF9faW9tZW0gKikoUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwgb2ZmKSkpOwotCXJldHVybiAwOworCXJlYWRfbG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKKwl3cml0ZWwoZGF0YSwgYWRkcik7CisJcmVhZF91bmxvY2soJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7CiB9CiAKLXUzMiBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZikKK3N0YXRpYyB1MzIgbmV0eGVuX25pY19pb19yZWFkXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl2b2lkIF9faW9tZW0gKmFkZHIpCiB7Ci0JcmV0dXJuIHJlYWRsKCh2b2lkIF9faW9tZW0gKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIG9mZikpKTsKKwl1MzIgdmFsOworCisJcmVhZF9sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOworCXZhbCA9IHJlYWRsKGFkZHIpOworCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOworCisJcmV0dXJuIHZhbDsKIH0KIAotdW5zaWduZWQgbG9uZworc3RhdGljIHZvaWQgbmV0eGVuX25pY19pb193cml0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXZvaWQgX19pb21lbSAqYWRkciwgdTMyIGRhdGEpCit7CisJd3JpdGVsKGRhdGEsIGFkZHIpOworfQorCitzdGF0aWMgdTMyIG5ldHhlbl9uaWNfaW9fcmVhZF8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGwoYWRkcik7Cit9CisKK3ZvaWQgX19pb21lbSAqCituZXR4ZW5fZ2V0X2lvYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBvZmZzZXQpCit7CisJdWxvbmcgb2ZmID0gb2Zmc2V0OworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJaWYgKG9mZnNldCA8IE5FVFhFTl9DUkJfUENJWF9IT1NUMiAmJgorCQkJCW9mZnNldCA+IE5FVFhFTl9DUkJfUENJWF9IT1NUKQorCQkJcmV0dXJuIFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsIG9mZnNldCk7CisJCXJldHVybiBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmZzZXQpOworCX0KKworCUJVR19PTihuZXR4ZW5fbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgJm9mZikpOworCXJldHVybiAodm9pZCBfX2lvbWVtICopb2ZmOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZwogbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQogewpAQCAtMTE5NywxMCArMTQwMCw4IEBACiAJCS8qIEREUiBuZXR3b3JrIHNpZGUgKi8KIAkJd2luZG93ID0gTU5fV0lOKGFkZHIpOwogCQlhZGFwdGVyLT5haHcuZGRyX21uX3dpbmRvdyA9IHdpbmRvdzsKLQkJTlhXUjMyKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5tbl93aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSwKLQkJCQl3aW5kb3cpOwotCQl3aW5fcmVhZCA9IE5YUkQzMihhZGFwdGVyLAotCQkJCWFkYXB0ZXItPmFody5tbl93aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSk7CisJCU5YV1IzMihhZGFwdGVyLCBhZGFwdGVyLT5haHcubW5fd2luX2NyYiwgd2luZG93KTsKKwkJd2luX3JlYWQgPSBOWFJEMzIoYWRhcHRlciwgYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIpOwogCQlpZiAoKHdpbl9yZWFkIDw8IDE3KSAhPSB3aW5kb3cpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIldyaXR0ZW4gTU53aW4gKDB4JXgpICE9ICIKIAkJCQkiUmVhZCBNTndpbiAoMHgleClcbiIsIHdpbmRvdywgd2luX3JlYWQpOwpAQCAtMTIxNSwxMCArMTQxNiw4IEBACiAKIAkJd2luZG93ID0gT0NNX1dJTihhZGRyKTsKIAkJYWRhcHRlci0+YWh3LmRkcl9tbl93aW5kb3cgPSB3aW5kb3c7Ci0JCU5YV1IzMihhZGFwdGVyLCBhZGFwdGVyLT5haHcubW5fd2luX2NyYiB8IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UsCi0JCQkJd2luZG93KTsKLQkJd2luX3JlYWQgPSBOWFJEMzIoYWRhcHRlciwKLQkJCQlhZGFwdGVyLT5haHcubW5fd2luX2NyYiB8IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UpOworCQlOWFdSMzIoYWRhcHRlciwgYWRhcHRlci0+YWh3Lm1uX3dpbl9jcmIsIHdpbmRvdyk7CisJCXdpbl9yZWFkID0gTlhSRDMyKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5tbl93aW5fY3JiKTsKIAkJaWYgKCh3aW5fcmVhZCA+PiA3KSAhPSB3aW5kb3cpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXcml0dGVuIE9DTXdpbiAoMHgleCkgIT0gIgogCQkJCQkiUmVhZCBPQ013aW4gKDB4JXgpXG4iLApAQCAtMTIzMSwxMCArMTQzMCw4IEBACiAJCS8qIFFEUiBuZXR3b3JrIHNpZGUgKi8KIAkJd2luZG93ID0gTVNfV0lOKGFkZHIpOwogCQlhZGFwdGVyLT5haHcucWRyX3NuX3dpbmRvdyA9IHdpbmRvdzsKLQkJTlhXUjMyKGFkYXB0ZXIsIGFkYXB0ZXItPmFody5tc193aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSwKLQkJCQl3aW5kb3cpOwotCQl3aW5fcmVhZCA9IE5YUkQzMihhZGFwdGVyLAotCQkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiIHwgTkVUWEVOX1BDSV9DUkJTUEFDRSk7CisJCU5YV1IzMihhZGFwdGVyLCBhZGFwdGVyLT5haHcubXNfd2luX2NyYiwgd2luZG93KTsKKwkJd2luX3JlYWQgPSBOWFJEMzIoYWRhcHRlciwgYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIpOwogCQlpZiAod2luX3JlYWQgIT0gd2luZG93KSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogV3JpdHRlbiBNU3dpbiAoMHgleCkgIT0gIgogCQkJCQkiUmVhZCBNU3dpbiAoMHgleClcbiIsCkBAIC0xMjU3LDE4MCArMTQ1NCw5IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXN0YXRpYyBpbnQgbmV0eGVuX25pY19wY2lfaXNfc2FtZV93aW5kb3coc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKQotewotCWludCB3aW5kb3c7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHFkcl9tYXg7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJcWRyX21heCA9IE5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AyOwotCWVsc2UKLQkJcWRyX21heCA9IE5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AzOwotCi0JaWYgKEFERFJfSU5fUkFOR0UoYWRkciwKLQkJCU5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgewotCQkvKiBERFIgbmV0d29yayBzaWRlICovCi0JCUJVRygpOwkvKiBNTiBhY2Nlc3MgY2FuIG5vdCBjb21lIGhlcmUgKi8KLQl9IGVsc2UgaWYgKEFERFJfSU5fUkFOR0UoYWRkciwKLQkJCU5FVFhFTl9BRERSX09DTTAsIE5FVFhFTl9BRERSX09DTTBfTUFYKSkgewotCQlyZXR1cm4gMTsKLQl9IGVsc2UgaWYgKEFERFJfSU5fUkFOR0UoYWRkciwKLQkJCQlORVRYRU5fQUREUl9PQ00xLCBORVRYRU5fQUREUl9PQ00xX01BWCkpIHsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlIGlmIChBRERSX0lOX1JBTkdFKGFkZHIsIE5FVFhFTl9BRERSX1FEUl9ORVQsIHFkcl9tYXgpKSB7Ci0JCS8qIFFEUiBuZXR3b3JrIHNpZGUgKi8KLQkJd2luZG93ID0gKChhZGRyIC0gTkVUWEVOX0FERFJfUURSX05FVCkgPj4gMjIpICYgMHgzZjsKLQkJaWYgKGFkYXB0ZXItPmFody5xZHJfc25fd2luZG93ID09IHdpbmRvdykKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkX2RpcmVjdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOwotCWludCByZXQgPSAwOwotCXU2NCBzdGFydDsKLQl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwotCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBJZiBhdHRlbXB0aW5nIHRvIGFjY2VzcyB1bmtub3duIGFkZHJlc3Mgb3Igc3RyYWRkbGUgaHcgd2luZG93cywKLQkgKiBkbyBub3QgYWNjZXNzLgotCSAqLwotCXN0YXJ0ID0gYWRhcHRlci0+cGNpX3NldF93aW5kb3coYWRhcHRlciwgb2ZmKTsKLQlpZiAoKHN0YXJ0ID09IC0xVUwpIHx8Ci0JCShuZXR4ZW5fbmljX3BjaV9pc19zYW1lX3dpbmRvdyhhZGFwdGVyLCBvZmYrc2l6ZS0xKSA9PSAwKSkgewotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgb3V0IG9mIGJvdW5kIHBjaSBtZW1vcnkgYWNjZXNzLiAiCi0JCQkib2Zmc2V0IGlzIDB4JWxseFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2ZmKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgc3RhcnQpOwotCWlmICghYWRkcikgewotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDApOwotCQltZW1fcGFnZSA9IHN0YXJ0ICYgUEFHRV9NQVNLOwotCQkvKiBNYXAgdHdvIHBhZ2VzIHdoZW5ldmVyIHVzZXIgdHJpZXMgdG8gYWNjZXNzIGFkZHJlc3NlcyBpbiB0d28KLQkJY29uc2VjdXRpdmUgcGFnZXMuCi0JCSovCi0JCWlmIChtZW1fcGFnZSAhPSAoKHN0YXJ0ICsgc2l6ZSAtIDEpICYgUEFHRV9NQVNLKSkKLQkJCW1lbV9wdHIgPSBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSAqIDIpOwotCQllbHNlCi0JCQltZW1fcHRyID0gaW9yZW1hcChtZW1fYmFzZSArIG1lbV9wYWdlLCBQQUdFX1NJWkUpOwotCQlpZiAobWVtX3B0ciA9PSBOVUxMKSB7Ci0JCQkqKHVpbnQ4X3QgICopZGF0YSA9IDA7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJYWRkciA9IG1lbV9wdHI7Ci0JCWFkZHIgKz0gc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JfQotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQkqKHVpbnQ4X3QgICopZGF0YSA9IHJlYWRiKGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSoodWludDE2X3QgKilkYXRhID0gcmVhZHcoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJKih1aW50MzJfdCAqKWRhdGEgPSByZWFkbChhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHVpbnQ2NF90ICopZGF0YSA9IHJlYWRxKGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtMTsKLQkJYnJlYWs7Ci0JfQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQotCWlmIChtZW1fcHRyKQotCQlpb3VubWFwKG1lbV9wdHIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLW5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV9kaXJlY3Qoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLAotCQl2b2lkICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOwotCWludCByZXQgPSAwOwotCXU2NCBzdGFydDsKLQl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwotCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7Ci0KLQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBJZiBhdHRlbXB0aW5nIHRvIGFjY2VzcyB1bmtub3duIGFkZHJlc3Mgb3Igc3RyYWRkbGUgaHcgd2luZG93cywKLQkgKiBkbyBub3QgYWNjZXNzLgotCSAqLwotCXN0YXJ0ID0gYWRhcHRlci0+cGNpX3NldF93aW5kb3coYWRhcHRlciwgb2ZmKTsKLQlpZiAoKHN0YXJ0ID09IC0xVUwpIHx8Ci0JCShuZXR4ZW5fbmljX3BjaV9pc19zYW1lX3dpbmRvdyhhZGFwdGVyLCBvZmYrc2l6ZS0xKSA9PSAwKSkgewotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgb3V0IG9mIGJvdW5kIHBjaSBtZW1vcnkgYWNjZXNzLiAiCi0JCQkib2Zmc2V0IGlzIDB4JWxseFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2ZmKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgc3RhcnQpOwotCWlmICghYWRkcikgewotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7Ci0JCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDApOwotCQltZW1fcGFnZSA9IHN0YXJ0ICYgUEFHRV9NQVNLOwotCQkvKiBNYXAgdHdvIHBhZ2VzIHdoZW5ldmVyIHVzZXIgdHJpZXMgdG8gYWNjZXNzIGFkZHJlc3NlcyBpbiB0d28KLQkJICogY29uc2VjdXRpdmUgcGFnZXMuCi0JCSAqLwotCQlpZiAobWVtX3BhZ2UgIT0gKChzdGFydCArIHNpemUgLSAxKSAmIFBBR0VfTUFTSykpCi0JCQltZW1fcHRyID0gaW9yZW1hcChtZW1fYmFzZSArIG1lbV9wYWdlLCBQQUdFX1NJWkUqMik7Ci0JCWVsc2UKLQkJCW1lbV9wdHIgPSBpb3JlbWFwKG1lbV9iYXNlICsgbWVtX3BhZ2UsIFBBR0VfU0laRSk7Ci0JCWlmIChtZW1fcHRyID09IE5VTEwpCi0JCQlyZXR1cm4gLTE7Ci0JCWFkZHIgPSBtZW1fcHRyOwotCQlhZGRyICs9IHN0YXJ0ICYgKFBBR0VfU0laRSAtIDEpOwotCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCX0KLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJd3JpdGViKCoodWludDhfdCAqKWRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHVpbnQxNl90ICopZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJd3JpdGVsKCoodWludDMyX3QgKilkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQl3cml0ZXEoKih1aW50NjRfdCAqKWRhdGEsIGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtMTsKLQkJYnJlYWs7Ci0JfQotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQlpZiAobWVtX3B0cikKLQkJaW91bm1hcChtZW1fcHRyKTsKLQlyZXR1cm4gcmV0OwotfQotCiAjZGVmaW5lIE1BWF9DVExfQ0hFQ0sgICAxMDAwCiAKLWludAorc3RhdGljIGludAogbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1NjQgb2ZmLCB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKIHsKQEAgLTE0NDAsMTkgKzE0NjYsMjggQEAKIAl1aW50NjRfdCAgICAgIG9mZjgsIHRtcHcsIHdvcmRbMl0gPSB7MCwgMH07CiAJdm9pZCBfX2lvbWVtICptZW1fY3JiOwogCi0JLyoKLQkgKiBJZiBub3QgTU4sIGdvIGNoZWNrIGZvciBNUyBvciBpbnZhbGlkLgotCSAqLwotCWlmIChuZXR4ZW5fbmljX3BjaV9tZW1fYm91bmRfY2hlY2soYWRhcHRlciwgb2ZmLCBzaXplKSA9PSAwKQotCQlyZXR1cm4gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlX2RpcmVjdChhZGFwdGVyLAotCQkJCW9mZiwgZGF0YSwgc2l6ZSk7CisJaWYgKHNpemUgIT0gOCkKKwkJcmV0dXJuIC1FSU87CiAKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIE5FVFhFTl9BRERSX1FEUl9ORVQsCisJCQkJTkVUWEVOX0FERFJfUURSX05FVF9NQVhfUDIpKSB7CisJCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9RRFJfTkVUKTsKKwkJZ290byBjb3JyZWN0OworCX0KKworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgTkVUWEVOX0FERFJfRERSX05FVCwgTkVUWEVOX0FERFJfRERSX05FVF9NQVgpKSB7CisJCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKKwkJZ290byBjb3JyZWN0OworCX0KKworCXJldHVybiAtRUlPOworCitjb3JyZWN0OgogCW9mZjggPSBvZmYgJiAweGZmZmZmZmY4OwogCW9mZjAgPSBvZmYgJiAweDc7CiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMCkpID8gc2l6ZSA6ICg4IC0gb2ZmMCk7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAJbG9vcCA9ICgob2ZmMCArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0JbWVtX2NyYiA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOwogCiAJaWYgKChzaXplICE9IDgpIHx8IChvZmYwICE9IDApKSAgewogCQlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7CkBAIC0xNTIzLDcgKzE1NTgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludAorc3RhdGljIGludAogbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewpAQCAtMTUzMywyMCArMTU2OCwyOSBAQAogCXVpbnQ2NF90ICAgICAgb2ZmOCwgdmFsLCB3b3JkWzJdID0gezAsIDB9OwogCXZvaWQgX19pb21lbSAqbWVtX2NyYjsKIAorCWlmIChzaXplICE9IDgpCisJCXJldHVybiAtRUlPOwogCi0JLyoKLQkgKiBJZiBub3QgTU4sIGdvIGNoZWNrIGZvciBNUyBvciBpbnZhbGlkLgotCSAqLwotCWlmIChuZXR4ZW5fbmljX3BjaV9tZW1fYm91bmRfY2hlY2soYWRhcHRlciwgb2ZmLCBzaXplKSA9PSAwKQotCQlyZXR1cm4gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfZGlyZWN0KGFkYXB0ZXIsIG9mZiwgZGF0YSwgc2l6ZSk7CisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBORVRYRU5fQUREUl9RRFJfTkVULAorCQkJCU5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AyKSkgeworCQltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfUURSX05FVCk7CisJCWdvdG8gY29ycmVjdDsKKwl9CiAKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIE5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgeworCQltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CisJCWdvdG8gY29ycmVjdDsKKwl9CisKKwlyZXR1cm4gLUVJTzsKKworY29ycmVjdDoKIAlvZmY4ID0gb2ZmICYgMHhmZmZmZmZmODsKIAlvZmYwWzBdID0gb2ZmICYgMHg3OwogCW9mZjBbMV0gPSAwOwogCXN6WzBdID0gKHNpemUgPCAoOCAtIG9mZjBbMF0pKSA/IHNpemUgOiAoOCAtIG9mZjBbMF0pOwogCXN6WzFdID0gc2l6ZSAtIHN6WzBdOwogCWxvb3AgPSAoKG9mZjBbMF0gKyBzaXplIC0gMSkgPj4gMykgKyAxOwotCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwpAQCAtMTYxNCwyNiArMTY1OCwzMiBAQAogCXJldHVybiAwOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewogCWludCBpLCBqLCByZXQgPSAwLCBsb29wLCBzelsyXSwgb2ZmMDsKIAl1aW50MzJfdCB0ZW1wOwotCXVpbnQ2NF90IG9mZjgsIG1lbV9jcmIsIHRtcHcsIHdvcmRbMl0gPSB7MCwgMH07CisJdWludDY0X3Qgb2ZmOCwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKLQkvKgotCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCi0JICovCi0JaWYgKG9mZiA+PSBORVRYRU5fQUREUl9RRFJfTkVUICYmIG9mZiA8PSBORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMykKLQkJbWVtX2NyYiA9IE5FVFhFTl9DUkJfUURSX05FVDsKLQllbHNlIHsKLQkJbWVtX2NyYiA9IE5FVFhFTl9DUkJfRERSX05FVDsKLQkJaWYgKG5ldHhlbl9uaWNfcGNpX21lbV9ib3VuZF9jaGVjayhhZGFwdGVyLCBvZmYsIHNpemUpID09IDApCi0JCQlyZXR1cm4gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlX2RpcmVjdChhZGFwdGVyLAotCQkJCQlvZmYsIGRhdGEsIHNpemUpOworCWlmIChzaXplICE9IDgpCisJCXJldHVybiAtRUlPOworCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBORVRYRU5fQUREUl9RRFJfTkVULAorCQkJCU5FVFhFTl9BRERSX1FEUl9ORVRfTUFYX1AzKSkgeworCQltZW1fY3JiID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwgTkVUWEVOX0NSQl9RRFJfTkVUKTsKKwkJZ290byBjb3JyZWN0OwogCX0KIAorCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgTkVUWEVOX0FERFJfRERSX05FVCwgTkVUWEVOX0FERFJfRERSX05FVF9NQVgpKSB7CisJCW1lbV9jcmIgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCQlnb3RvIGNvcnJlY3Q7CisJfQorCisJcmV0dXJuIC1FSU87CisKK2NvcnJlY3Q6CiAJb2ZmOCA9IG9mZiAmIDB4ZmZmZmZmZjg7CiAJb2ZmMCA9IG9mZiAmIDB4NzsKIAlzelswXSA9IChzaXplIDwgKDggLSBvZmYwKSkgPyBzaXplIDogKDggLSBvZmYwKTsKQEAgLTE2NDIsOCArMTY5Miw4IEBACiAKIAlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZjAgIT0gMCkpIHsKIAkJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewotCQkJaWYgKGFkYXB0ZXItPnBjaV9tZW1fcmVhZChhZGFwdGVyLCBvZmY4ICsgKGkgPDwgMyksCi0JCQkJCQkmd29yZFtpXSwgOCkpCisJCQlpZiAoYWRhcHRlci0+cGNpX21lbV9yZWFkKGFkYXB0ZXIsCisJCQkJCW9mZjggKyAoaSA8PCAzKSwgJndvcmRbaV0sIDgpKQogCQkJCXJldHVybiAtMTsKIAkJfQogCX0KQEAgLTE2NzksMjEgKzE3MjksMTggQEAKIAkgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKLQkJdGVtcCA9IG9mZjggKyAoaSA8PCAzKTsKLQkJTlhXUjMyKGFkYXB0ZXIsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8sIHRlbXApOwotCQl0ZW1wID0gMDsKLQkJTlhXUjMyKGFkYXB0ZXIsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEksIHRlbXApOwotCQl0ZW1wID0gd29yZFtpXSAmIDB4ZmZmZmZmZmY7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfTE8sIHRlbXApOwotCQl0ZW1wID0gKHdvcmRbaV0gPj4gMzIpICYgMHhmZmZmZmZmZjsKLQkJTlhXUjMyKGFkYXB0ZXIsIG1lbV9jcmIrTUlVX1RFU1RfQUdUX1dSREFUQV9ISSwgdGVtcCk7Ci0JCXRlbXAgPSBNSVVfVEFfQ1RMX0VOQUJMRSB8IE1JVV9UQV9DVExfV1JJVEU7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMLCB0ZW1wKTsKLQkJdGVtcCA9IE1JVV9UQV9DVExfU1RBUlQgfCBNSVVfVEFfQ1RMX0VOQUJMRSB8IE1JVV9UQV9DVExfV1JJVEU7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMLCB0ZW1wKTsKKwkJd3JpdGVsKG9mZjggKyAoaSA8PCAzKSwgbWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9MTyk7CisJCXdyaXRlbCgwLCBtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJKTsKKwkJd3JpdGVsKHdvcmRbaV0gJiAweGZmZmZmZmZmLCBtZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfTE8pOworCQl3cml0ZWwoKHdvcmRbaV0gPj4gMzIpICYgMHhmZmZmZmZmZiwKKwkJCQltZW1fY3JiK01JVV9URVNUX0FHVF9XUkRBVEFfSEkpOworCQl3cml0ZWwoKE1JVV9UQV9DVExfRU5BQkxFIHwgTUlVX1RBX0NUTF9XUklURSksCisJCQkJbWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCk7CisJCXdyaXRlbChNSVVfVEFfQ1RMX1NUQVJUIHwgTUlVX1RBX0NUTF9FTkFCTEUgfCBNSVVfVEFfQ1RMX1dSSVRFLAorCQkJCW1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpOwogCiAJCWZvciAoaiA9IDA7IGogPCBNQVhfQ1RMX0NIRUNLOyBqKyspIHsKLQkJCXRlbXAgPSBOWFJEMzIoYWRhcHRlciwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9DVFJMKTsKKwkJCXRlbXAgPSByZWFkbChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwpOwogCQkJaWYgKCh0ZW1wICYgTUlVX1RBX0NUTF9CVVNZKSA9PSAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xNzE0LDI3ICsxNzYxLDMyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50CitzdGF0aWMgaW50CiBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8yTShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewogCWludCBpLCBqID0gMCwgaywgc3RhcnQsIGVuZCwgbG9vcCwgc3pbMl0sIG9mZjBbMl07CiAJdWludDMyX3QgICAgICB0ZW1wOwotCXVpbnQ2NF90ICAgICAgb2ZmOCwgdmFsLCBtZW1fY3JiLCB3b3JkWzJdID0gezAsIDB9OworCXVpbnQ2NF90ICAgICAgb2ZmOCwgdmFsLCB3b3JkWzJdID0gezAsIDB9OworCXZvaWQgX19pb21lbSAqbWVtX2NyYjsKIAotCS8qCi0JICogSWYgbm90IE1OLCBnbyBjaGVjayBmb3IgTVMgb3IgaW52YWxpZC4KLQkgKi8KKwlpZiAoc2l6ZSAhPSA4KQorCQlyZXR1cm4gLUVJTzsKIAotCWlmIChvZmYgPj0gTkVUWEVOX0FERFJfUURSX05FVCAmJiBvZmYgPD0gTkVUWEVOX0FERFJfUURSX05FVF9NQVhfUDMpCi0JCW1lbV9jcmIgPSBORVRYRU5fQ1JCX1FEUl9ORVQ7Ci0JZWxzZSB7Ci0JCW1lbV9jcmIgPSBORVRYRU5fQ1JCX0REUl9ORVQ7Ci0JCWlmIChuZXR4ZW5fbmljX3BjaV9tZW1fYm91bmRfY2hlY2soYWRhcHRlciwgb2ZmLCBzaXplKSA9PSAwKQotCQkJcmV0dXJuIG5ldHhlbl9uaWNfcGNpX21lbV9yZWFkX2RpcmVjdChhZGFwdGVyLAotCQkJCQlvZmYsIGRhdGEsIHNpemUpOworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgTkVUWEVOX0FERFJfUURSX05FVCwKKwkJCQlORVRYRU5fQUREUl9RRFJfTkVUX01BWF9QMykpIHsKKwkJbWVtX2NyYiA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsIE5FVFhFTl9DUkJfUURSX05FVCk7CisJCWdvdG8gY29ycmVjdDsKIAl9CiAKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIE5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgeworCQltZW1fY3JiID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKKwkJZ290byBjb3JyZWN0OworCX0KKworCXJldHVybiAtRUlPOworCitjb3JyZWN0OgogCW9mZjggPSBvZmYgJiAweGZmZmZmZmY4OwogCW9mZjBbMF0gPSBvZmYgJiAweDc7CiAJb2ZmMFsxXSA9IDA7CkBAIC0xNzQ5LDE3ICsxODAxLDE0IEBACiAJICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgbG9vcDsgaSsrKSB7Ci0JCXRlbXAgPSBvZmY4ICsgKGkgPDwgMyk7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfTE8sIHRlbXApOwotCQl0ZW1wID0gMDsKLQkJTlhXUjMyKGFkYXB0ZXIsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQUREUl9ISSwgdGVtcCk7Ci0JCXRlbXAgPSBNSVVfVEFfQ1RMX0VOQUJMRTsKLQkJTlhXUjMyKGFkYXB0ZXIsIG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCwgdGVtcCk7Ci0JCXRlbXAgPSBNSVVfVEFfQ1RMX1NUQVJUIHwgTUlVX1RBX0NUTF9FTkFCTEU7Ci0JCU5YV1IzMihhZGFwdGVyLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwsIHRlbXApOworCQl3cml0ZWwob2ZmOCArIChpIDw8IDMpLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfTE8pOworCQl3cml0ZWwoMCwgbWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0hJKTsKKwkJd3JpdGVsKE1JVV9UQV9DVExfRU5BQkxFLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwpOworCQl3cml0ZWwoTUlVX1RBX0NUTF9TVEFSVCB8IE1JVV9UQV9DVExfRU5BQkxFLAorCQkJCW1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewotCQkJdGVtcCA9IE5YUkQzMihhZGFwdGVyLCBtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0NUUkwpOworCQkJdGVtcCA9IHJlYWRsKG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQ1RSTCk7CiAJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTE3NzQsOCArMTgyMyw3IEBACiAJCXN0YXJ0ID0gb2ZmMFtpXSA+PiAyOwogCQllbmQgICA9IChvZmYwW2ldICsgc3pbaV0gLSAxKSA+PiAyOwogCQlmb3IgKGsgPSBzdGFydDsgayA8PSBlbmQ7IGsrKykgewotCQkJdGVtcCA9IE5YUkQzMihhZGFwdGVyLAotCQkJCW1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfUkREQVRBKGspKTsKKwkJCXRlbXAgPSByZWFkbChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX1JEREFUQShrKSk7CiAJCQl3b3JkW2ldIHw9ICgodWludDY0X3QpdGVtcCA8PCAoMzIgKiBrKSk7CiAJCX0KIAl9CkBAIC0xODEyLDIwICsxODYwLDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBOb3RlIDogb25seSAzMi1iaXQgd3JpdGVzIQotICovCi1pbnQgbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJdTY0IG9mZiwgdTMyIGRhdGEpCit2b2lkCituZXR4ZW5fc2V0dXBfaHdvcHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCU5YV1IzMihhZGFwdGVyLCBvZmYsIGRhdGEpOworCWFkYXB0ZXItPmluaXRfcG9ydCA9IG5ldHhlbl9uaXVfeGdfaW5pdF9wb3J0OworCWFkYXB0ZXItPnN0b3BfcG9ydCA9IG5ldHhlbl9uaXVfZGlzYWJsZV94Z19wb3J0OwogCi0JcmV0dXJuIDA7Ci19CisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJYWRhcHRlci0+Y3JiX3JlYWQgPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TSwKKwkJYWRhcHRlci0+Y3JiX3dyaXRlID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNLAorCQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TSwKKwkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TSwKKwkJYWRhcHRlci0+cGNpX21lbV93cml0ZSA9IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8xMjhNLAorCQlhZGFwdGVyLT5pb19yZWFkID0gbmV0eGVuX25pY19pb19yZWFkXzEyOE0sCisJCWFkYXB0ZXItPmlvX3dyaXRlID0gbmV0eGVuX25pY19pb193cml0ZV8xMjhNLAogCi11MzIgbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmKQotewotCXJldHVybiBOWFJEMzIoYWRhcHRlciwgb2ZmKTsKKwkJYWRhcHRlci0+bWFjYWRkcl9zZXQgPSBuZXR4ZW5fcDJfbmljX3NldF9tYWNfYWRkcjsKKwkJYWRhcHRlci0+c2V0X211bHRpID0gbmV0eGVuX3AyX25pY19zZXRfbXVsdGk7CisJCWFkYXB0ZXItPnNldF9tdHUgPSBuZXR4ZW5fbmljX3NldF9tdHVfeGdiOworCQlhZGFwdGVyLT5zZXRfcHJvbWlzYyA9IG5ldHhlbl9wMl9uaWNfc2V0X3Byb21pc2M7CisKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5jcmJfcmVhZCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8yTSwKKwkJYWRhcHRlci0+Y3JiX3dyaXRlID0gbmV0eGVuX25pY19od193cml0ZV93eF8yTSwKKwkJYWRhcHRlci0+cGNpX3NldF93aW5kb3cgPSBuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93XzJNLAorCQlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8yTSwKKwkJYWRhcHRlci0+cGNpX21lbV93cml0ZSA9IG5ldHhlbl9uaWNfcGNpX21lbV93cml0ZV8yTSwKKwkJYWRhcHRlci0+aW9fcmVhZCA9IG5ldHhlbl9uaWNfaW9fcmVhZF8yTSwKKwkJYWRhcHRlci0+aW9fd3JpdGUgPSBuZXR4ZW5fbmljX2lvX3dyaXRlXzJNLAorCisJCWFkYXB0ZXItPnNldF9tdHUgPSBueF9md19jbWRfc2V0X210dTsKKwkJYWRhcHRlci0+c2V0X3Byb21pc2MgPSBuZXR4ZW5fcDNfbmljX3NldF9wcm9taXNjOworCQlhZGFwdGVyLT5tYWNhZGRyX3NldCA9IG5ldHhlbl9wM19uaWNfc2V0X21hY19hZGRyOworCQlhZGFwdGVyLT5zZXRfbXVsdGkgPSBuZXR4ZW5fcDNfbmljX3NldF9tdWx0aTsKKworCQlhZGFwdGVyLT5waHlfcmVhZCA9IG54X2Z3X2NtZF9xdWVyeV9waHk7CisJCWFkYXB0ZXItPnBoeV93cml0ZSA9IG54X2Z3X2NtZF9zZXRfcGh5OworCX0KIH0KIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTgzMywxMyArMTkwNCwxMSBAQAogCWludCBvZmZzZXQsIGJvYXJkX3R5cGUsIG1hZ2ljLCBoZWFkZXJfdmVyc2lvbjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlvZmZzZXQgPSBORVRYRU5fQlJEQ0ZHX1NUQVJUICsKLQkJb2Zmc2V0b2Yoc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvLCBtYWdpYyk7CisJb2Zmc2V0ID0gTlhfRldfTUFHSUNfT0ZGU0VUOwogCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZtYWdpYykpCiAJCXJldHVybiAtRUlPOwogCi0Jb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCi0JCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgaGVhZGVyX3ZlcnNpb24pOworCW9mZnNldCA9IE5YX0hEUl9WRVJTSU9OX09GRlNFVDsKIAlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgb2Zmc2V0LCAmaGVhZGVyX3ZlcnNpb24pKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMTg1MSw4ICsxOTIwLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0Jb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCi0JCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgYm9hcmRfdHlwZSk7CisJb2Zmc2V0ID0gTlhfQlJEVFlQRV9PRkZTRVQ7CiAJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJmJvYXJkX3R5cGUpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMTk5Myw2MiArMjA2MSw2IEBACiAJfQogfQogCi12b2lkIG5ldHhlbl9uaWNfZ2V0X2Zpcm13YXJlX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCXUzMiBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkOwotCWNoYXIgYnJkX25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKLQljaGFyIHNlcmlhbF9udW1bMzJdOwotCWludCBpLCBhZGRyLCB2YWw7Ci0JaW50ICpwdHIzMjsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAwOwotCi0JcHRyMzIgPSAoaW50ICopJnNlcmlhbF9udW07Ci0JYWRkciA9IE5FVFhFTl9VU0VSX1NUQVJUICsKLQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IG5ldHhlbl9uZXdfdXNlcl9pbmZvLCBzZXJpYWxfbnVtKTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCAmdmFsKSA9PSAtMSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgcmVhZGluZyBib2FyZCBpbmZvXG4iKTsKLQkJCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDE7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcHRyMzJbaV0gPSBjcHVfdG9fbGUzMih2YWwpOwotCQlhZGRyICs9IHNpemVvZih1MzIpOwotCX0KLQotCWZ3X21ham9yID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX01BSk9SKTsKLQlmd19taW5vciA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9NSU5PUik7Ci0JZndfYnVpbGQgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fU1VCKTsKLQotCWFkYXB0ZXItPmZ3X21ham9yID0gZndfbWFqb3I7Ci0JYWRhcHRlci0+ZndfdmVyc2lvbiA9IE5FVFhFTl9WRVJTSU9OX0NPREUoZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7Ci0KLQlpZiAoYWRhcHRlci0+cG9ydG51bSA9PSAwKSB7Ci0JCWdldF9icmRfbmFtZV9ieV90eXBlKGFkYXB0ZXItPmFody5ib2FyZF90eXBlLCBicmRfbmFtZSk7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0WGVuICVzIEJvYXJkIFMvTiAlcyAgQ2hpcCByZXYgMHgleFxuIiwKLQkJCQlicmRfbmFtZSwgc2VyaWFsX251bSwgYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKTsKLQl9Ci0KLQlpZiAoYWRhcHRlci0+ZndfdmVyc2lvbiA8IE5FVFhFTl9WRVJTSU9OX0NPREUoMywgNCwgMjE2KSkgewotCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOwotCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKLQkJCQlmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKLQkJcmV0dXJuOwotCX0KLQotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJmaXJtd2FyZSB2ZXJzaW9uICVkLiVkLiVkXG4iLAotCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewotCQlpID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9TUkVfTUlTQyk7Ci0JCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA9IChpICYgMHg4MDAwKSA/IDEgOiAwOwotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmlybXdhcmUgcnVubmluZyBpbiAlcyBtb2RlXG4iLAotCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPyAiY3V0LXRocm91Z2giIDogImxlZ2FjeSIpOwotCX0KLX0KLQogaW50CiBuZXR4ZW5fbmljX3dvbF9zdXBwb3J0ZWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKaW5kZXggZDRlODMzMy4uM2ZkMWRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIwLDE5ICsyMSwxMSBAQAogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KICAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgogICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiBJbmMsCi0gKiAxODkyMiBGb3JnZSBEcml2ZQotICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCi0gKgogICovCiAKICNpZm5kZWYgX19ORVRYRU5fTklDX0hXX0hfCiAjZGVmaW5lIF9fTkVUWEVOX05JQ19IV19IXwogCi0jaW5jbHVkZSAibmV0eGVuX25pY19oZHIuaCIKLQogLyogSGFyZHdhcmUgbWVtb3J5IHNpemUgb2YgMTI4IG1lZyAqLwogI2RlZmluZSBORVRYRU5fTUVNQUREUl9NQVggKDEyOCAqIDEwMjQgKiAxMDI0KQogCkBAIC02MywxMCArNTYsNiBAQAogICoJQml0IDMxOiBzb2Z0X3Jlc2V0ID0+IDE6cmVzZXQgdGhlIE1BQyBhbmQgdGhlIFNFUkRFUywgMDpuby1vcAogICovCiAKLSNkZWZpbmUgbmV0eGVuX2diX2VuYWJsZV90eChjb25maWdfd29yZCkJXAotCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMCkKLSNkZWZpbmUgbmV0eGVuX2diX2VuYWJsZV9yeChjb25maWdfd29yZCkJXAotCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMikKICNkZWZpbmUgbmV0eGVuX2diX3R4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKIAkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDQpCiAjZGVmaW5lIG5ldHhlbl9nYl9yeF9mbG93Y3RsKGNvbmZpZ193b3JkKQlcCkBAIC03OSw4ICs2OCw2IEBACiAJKChjb25maWdfd29yZCkgfD0gMSA8PCAxOCkKICNkZWZpbmUgbmV0eGVuX2diX3J4X3Jlc2V0X21hYyhjb25maWdfd29yZCkJXAogCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTkpCi0jZGVmaW5lIG5ldHhlbl9nYl9zb2Z0X3Jlc2V0KGNvbmZpZ193b3JkKQlcCi0JKChjb25maWdfd29yZCkgfD0gMSA8PCAzMSkKIAogI2RlZmluZSBuZXR4ZW5fZ2JfdW5zZXRfdHhfZmxvd2N0bChjb25maWdfd29yZCkJXAogCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCA0KSkKQEAgLTI0Miw3ICsyMjksNiBAQAogICogQml0cyAxNC0xNSA6IHNwZWVkID0+IDA6MTBNYi9zLCAxOjEwME1iL3MsIDI6MTAwME1iL3MsIDM6cnN2ZAogICovCiAKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfY2FibGVsZW4oY29uZmlnX3dvcmQpICgoKGNvbmZpZ193b3JkKSA+PiA3KSAmIDB4MDcpCiAjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X3NwZWVkKGNvbmZpZ193b3JkKSAoKChjb25maWdfd29yZCkgPj4gMTQpICYgMHgwMykKIAogI2RlZmluZSBuZXR4ZW5fc2V0X3BoeV9zcGVlZChjb25maWdfd29yZCwgdmFsKQlcCkBAIC0yNTIsODUgKzIzOCwxMiBAQAogI2RlZmluZSBuZXR4ZW5fY2xlYXJfcGh5X2R1cGxleChjb25maWdfd29yZCkJXAogCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMTMpKQogCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2phYmJlcihjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAwKQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9wb2xhcml0eShjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxKQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9yZWN2cGF1c2UoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMikKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfeG1pdHBhdXNlKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDMpCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2VuZXJneWRldGVjdChjb25maWdfd29yZCkgXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA0KQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9kb3duc2hpZnQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgNSkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfY3Jvc3NvdmVyKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDYpCiAjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2xpbmsoY29uZmlnX3dvcmQpCVwKIAkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTApCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X3Jlc29sdmVkKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDExKQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9wYWdlcmN2ZChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMikKICNkZWZpbmUgbmV0eGVuX2dldF9waHlfZHVwbGV4KGNvbmZpZ193b3JkKQlcCiAJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEzKQogCiAvKgotICogSW50ZXJydXB0IFJlZ2lzdGVyIGRlZmluaXRpb24KLSAqIFRoaXMgZGVmaW5pdGlvbiBhcHBsaWVzIHRvIHJlZ2lzdGVycyAxOCBhbmQgMTkgKGludCBlbmFibGUgYW5kIGludCBzdGF0dXMpLgotICogQml0IDAgOiBqYWJiZXIKLSAqIEJpdCAxIDogcG9sYXJpdHlfY2hhbmdlZAotICogQml0IDQgOiBlbmVyZ3lfZGV0ZWN0Ci0gKiBCaXQgNSA6IGRvd25zaGlmdAotICogQml0IDYgOiBtZGlfeG92ZXJfY2hhbmdlZAotICogQml0IDcgOiBmaWZvX292ZXJfdW5kZXJmbG93Ci0gKiBCaXQgOCA6IGZhbHNlX2NhcnJpZXIKLSAqIEJpdCA5IDogc3ltYm9sX2Vycm9yCi0gKiBCaXQgMTA6IGxpbmtfc3RhdHVzX2NoYW5nZWQKLSAqIEJpdCAxMTogYXV0b25lZ19jb21wbGV0ZWQKLSAqIEJpdCAxMjogcGFnZV9yZWNlaXZlZAotICogQml0IDEzOiBkdXBsZXhfY2hhbmdlZAotICogQml0IDE0OiBzcGVlZF9jaGFuZ2VkCi0gKiBCaXQgMTU6IGF1dG9uZWdfZXJyb3IKLSAqLwotCi0jZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9qYWJiZXIoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMCkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X3BvbGFyaXR5X2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMSkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2VuZXJneV9kZXRlY3QoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgNCkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2Rvd25zaGlmdChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA1KQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfbWRpX3hvdmVyX2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgNikKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2ZpZm9fb3Zlcl91bmRlcmZsb3coY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgNykKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2ZhbHNlX2NhcnJpZXIoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgOCkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X3N5bWJvbF9lcnJvcihjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA5KQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfbGlua19zdGF0dXNfY2hhbmdlZChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMCkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2F1dG9uZWdfY29tcGxldGVkKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDExKQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfcGFnZV9yZWNlaXZlZChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMikKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2R1cGxleF9jaGFuZ2VkKGNvbmZpZ193b3JkKQlcCi0JCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEzKQotI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfc3BlZWRfY2hhbmdlZChjb25maWdfd29yZCkJXAotCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxNCkKLSNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2F1dG9uZWdfZXJyb3IoY29uZmlnX3dvcmQpCVwKLQkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTUpCi0KLSNkZWZpbmUgbmV0eGVuX3NldF9waHlfaW50X2xpbmtfc3RhdHVzX2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCAxMCkKLSNkZWZpbmUgbmV0eGVuX3NldF9waHlfaW50X2F1dG9uZWdfY29tcGxldGVkKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTEpCi0jZGVmaW5lIG5ldHhlbl9zZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTQpCi0KLS8qCiAgKiBOSVUgTW9kZSBSZWdpc3Rlci4KICAqIEJpdCAwIDogZW5hYmxlIEZpYnJlQ2hhbm5lbAogICogQml0IDEgOiBlbmFibGUgMTAvMTAwLzEwMDAgRXRoZXJuZXQKQEAgLTM0NSwzMyArMjU4LDYgQEAKICNkZWZpbmUgTkVUWEVOX05JVV9BTExNVUxUSV9NT0RFCTIKIAogLyoKLSAqIE5JVSBHQiBEcm9wIENSQyBSZWdpc3RlcgotICoKLSAqIEJpdCAwIDogZHJvcF9nYjAgPT4gMTpkcm9wIHBrdHMgd2l0aCBiYWQgQ1JDcywgMDpwYXNzIHRoZW0gb24KLSAqIEJpdCAxIDogZHJvcF9nYjEgPT4gMTpkcm9wIHBrdHMgd2l0aCBiYWQgQ1JDcywgMDpwYXNzIHRoZW0gb24KLSAqIEJpdCAyIDogZHJvcF9nYjIgPT4gMTpkcm9wIHBrdHMgd2l0aCBiYWQgQ1JDcywgMDpwYXNzIHRoZW0gb24KLSAqIEJpdCAzIDogZHJvcF9nYjMgPT4gMTpkcm9wIHBrdHMgd2l0aCBiYWQgQ1JDcywgMDpwYXNzIHRoZW0gb24KLSAqLwotCi0jZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjAoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCAwKQotI2RlZmluZSBuZXR4ZW5fc2V0X2diX2Ryb3BfZ2IxKGNvbmZpZ193b3JkKQlcCi0JCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMSkKLSNkZWZpbmUgbmV0eGVuX3NldF9nYl9kcm9wX2diMihjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDIpCi0jZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjMoY29uZmlnX3dvcmQpCVwKLQkJKChjb25maWdfd29yZCkgfD0gMSA8PCAzKQotCi0jZGVmaW5lIG5ldHhlbl9jbGVhcl9nYl9kcm9wX2diMChjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMCkpCi0jZGVmaW5lIG5ldHhlbl9jbGVhcl9nYl9kcm9wX2diMShjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMSkpCi0jZGVmaW5lIG5ldHhlbl9jbGVhcl9nYl9kcm9wX2diMihjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMikpCi0jZGVmaW5lIG5ldHhlbl9jbGVhcl9nYl9kcm9wX2diMyhjb25maWdfd29yZCkJXAotCQkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMykpCi0KLS8qCiAgKiBOSVUgWEcgTUFDIENvbmZpZyBSZWdpc3RlcgogICoKICAqIEJpdCAwIDogdHhfZW5hYmxlID0+IDE6ZW5hYmxlIGZyYW1lIHhtaXQsIDA6ZGlzYWJsZQpAQCAtMzg3LDIyICsyNzMsNiBAQAogI2RlZmluZSBuZXR4ZW5feGdfc29mdF9yZXNldChjb25maWdfd29yZCkJXAogCQkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDQpCiAKLS8qIFNldCBwcm9taXNjdW91cyBtb2RlIGZvciBhIEdiRSBpbnRlcmZhY2UgKi8KLWludCBuZXR4ZW5fbml1X3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgdTMyIG1vZGUpOwotaW50IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgICAgICB1MzIgbW9kZSk7Ci0KLS8qIEdlbmVyaWMgZW5hYmxlIGZvciBHYkUgcG9ydHMuIFdpbGwgZGV0ZWN0IHRoZSBzcGVlZCBvZiB0aGUgbGluay4gKi8KLWludCBuZXR4ZW5fbml1X2diZV9pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCk7Ci0KLWludCBuZXR4ZW5fbml1X3hnX2luaXRfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KTsKLQotLyogRGlzYWJsZSBhIEdiRSBpbnRlcmZhY2UgKi8KLWludCBuZXR4ZW5fbml1X2Rpc2FibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKLQotaW50IG5ldHhlbl9uaXVfZGlzYWJsZV94Z19wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci0KIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCB2YWxpZDsKIAl1bnNpZ25lZCBzdGFydF8xMjhNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCmluZGV4IDVkMzM0M2UuLjkxYzJiYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsMTkgKzIxLDEyIEBACiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgogICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAgKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuIEluYywKLSAqIDE4OTIyIEZvcmdlIERyaXZlCi0gKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAibmV0eGVuX25pYy5oIgogI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKLSNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCiAKIHN0cnVjdCBjcmJfYWRkcl9wYWlyIHsKIAl1MzIgYWRkcjsKQEAgLTI0Nyw5ICsyNDEsMTQgQEAKIAkJCQlyZHNfcmluZy0+c2tiX3NpemUgPQogCQkJCQlOWF9DVF9ERUZBVUxUX1JYX0JVRl9MRU47CiAJCQl9IGVsc2UgewotCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFJYX0RNQV9NQVBfTEVOOworCQkJCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQkJTlhfUDNfUlhfQlVGX01BWF9MRU47CisJCQkJZWxzZQorCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUgPQorCQkJCQkJTlhfUDJfUlhfQlVGX01BWF9MRU47CiAJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KLQkJCQkJTUFYX1JYX0JVRkZFUl9MRU5HVEg7CisJCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKIAkJCX0KIAkJCWJyZWFrOwogCkBAIC0yNjEsMTQgKzI2MCwxOCBAQAogCQkJZWxzZQogCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9CiAJCQkJCU5YX1AyX1JYX0pVTUJPX0JVRl9NQVhfTEVOOworCisJCQlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfQ0FQMF9IV19MUk8pCisJCQkJcmRzX3JpbmctPmRtYV9zaXplICs9IE5YX0xST19CVUZGRVJfRVhUUkE7CisKIAkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CiAJCQkJcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBSQ1ZfUklOR19MUk86CiAJCQlyZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fbHJvX3J4ZDsKLQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IFJYX0xST19ETUFfTUFQX0xFTjsKLQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9IE1BWF9SWF9MUk9fQlVGRkVSX0xFTkdUSDsKKwkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9IE5YX1JYX0xST19CVUZGRVJfTEVOR1RIOworCQkJcmRzX3JpbmctPnNrYl9zaXplID0gcmRzX3JpbmctPmRtYV9zaXplICsgTkVUX0lQX0FMSUdOOwogCQkJYnJlYWs7CiAKIAkJfQpAQCAtMzE1LDQ4ICszMTgsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi12b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlhZGFwdGVyLT5tYWNhZGRyX3NldCA9IG5ldHhlbl9wMl9uaWNfc2V0X21hY19hZGRyOwotCWFkYXB0ZXItPnNldF9tdWx0aSA9IG5ldHhlbl9wMl9uaWNfc2V0X211bHRpOwotCi0Jc3dpdGNoIChhZGFwdGVyLT5haHcucG9ydF90eXBlKSB7Ci0JY2FzZSBORVRYRU5fTklDX0dCRToKLQkJYWRhcHRlci0+ZW5hYmxlX3BoeV9pbnRlcnJ1cHRzID0KLQkJICAgIG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0czsKLQkJYWRhcHRlci0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyA9Ci0JCSAgICBuZXR4ZW5fbml1X2diZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzOwotCQlhZGFwdGVyLT5zZXRfbXR1ID0gbmV0eGVuX25pY19zZXRfbXR1X2diOwotCQlhZGFwdGVyLT5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfc2V0X3Byb21pc2N1b3VzX21vZGU7Ci0JCWFkYXB0ZXItPnBoeV9yZWFkID0gbmV0eGVuX25pdV9nYmVfcGh5X3JlYWQ7Ci0JCWFkYXB0ZXItPnBoeV93cml0ZSA9IG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZTsKLQkJYWRhcHRlci0+aW5pdF9wb3J0ID0gbmV0eGVuX25pdV9nYmVfaW5pdF9wb3J0OwotCQlhZGFwdGVyLT5zdG9wX3BvcnQgPSBuZXR4ZW5fbml1X2Rpc2FibGVfZ2JlX3BvcnQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fTklDX1hHQkU6Ci0JCWFkYXB0ZXItPmVuYWJsZV9waHlfaW50ZXJydXB0cyA9Ci0JCSAgICBuZXR4ZW5fbml1X3hnYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzOwotCQlhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzID0KLQkJICAgIG5ldHhlbl9uaXVfeGdiZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzOwotCQlhZGFwdGVyLT5zZXRfbXR1ID0gbmV0eGVuX25pY19zZXRfbXR1X3hnYjsKLQkJYWRhcHRlci0+aW5pdF9wb3J0ID0gbmV0eGVuX25pdV94Z19pbml0X3BvcnQ7Ci0JCWFkYXB0ZXItPnNldF9wcm9taXNjID0gbmV0eGVuX25pdV94Z19zZXRfcHJvbWlzY3VvdXNfbW9kZTsKLQkJYWRhcHRlci0+c3RvcF9wb3J0ID0gbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQ7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKLQkJYWRhcHRlci0+c2V0X210dSA9IG54X2Z3X2NtZF9zZXRfbXR1OwotCQlhZGFwdGVyLT5zZXRfcHJvbWlzYyA9IG5ldHhlbl9wM19uaWNfc2V0X3Byb21pc2M7Ci0JCWFkYXB0ZXItPm1hY2FkZHJfc2V0ID0gbmV0eGVuX3AzX25pY19zZXRfbWFjX2FkZHI7Ci0JCWFkYXB0ZXItPnNldF9tdWx0aSA9IG5ldHhlbl9wM19uaWNfc2V0X211bHRpOwotCX0KLX0KLQogLyoKICAqIG5ldHhlbl9kZWNvZGVfY3JiX2FkZHIoMCAtIHV0aWxpdHkgdG8gdHJhbnNsYXRlIGZyb20gaW50ZXJuYWwgUGhhbnRvbSBDUkIKICAqIGFkZHJlc3MgdG8gZXh0ZXJuYWwgUENJIENSQiBhZGRyZXNzLgpAQCAtMzg0LDM3ICszNDUsNyBAQAogCQlyZXR1cm4gKHBjaV9iYXNlICsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIGxvbmcgcm9tX21heF90aW1lb3V0ID0gMTAwOwotc3RhdGljIGxvbmcgcm9tX2xvY2tfdGltZW91dCA9IDEwMDAwOwotCi1zdGF0aWMgaW50IHJvbV9sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgaXRlcjsKLQl1MzIgZG9uZSA9IDA7Ci0JaW50IHRpbWVvdXQgPSAwOwotCi0Jd2hpbGUgKCFkb25lKSB7Ci0JCS8qIGFjcXVpcmUgc2VtYXBob3JlMiBmcm9tIFBDSSBIVyBibG9jayAqLwotCQlkb25lID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTJfTE9DSykpOwotCQlpZiAoZG9uZSA9PSAxKQotCQkJYnJlYWs7Ci0JCWlmICh0aW1lb3V0ID49IHJvbV9sb2NrX3RpbWVvdXQpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQl0aW1lb3V0Kys7Ci0JCS8qCi0JCSAqIFlpZWxkIENQVQotCQkgKi8KLQkJaWYgKCFpbl9hdG9taWMoKSkKLQkJCXNjaGVkdWxlKCk7Ci0JCWVsc2UgewotCQkJZm9yIChpdGVyID0gMDsgaXRlciA8IDIwOyBpdGVyKyspCi0JCQkJY3B1X3JlbGF4KCk7CS8qVGhpcyBhIG5vcCBpbnN0ciBvbiBpMzg2ICovCi0JCX0KLQl9Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9ST01fTE9DS19JRCwgUk9NX0xPQ0tfRFJJVkVSKTsKLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgTkVUWEVOX01BWF9ST01fV0FJVF9VU0VDCTEwMAogCiBzdGF0aWMgaW50IG5ldHhlbl93YWl0X3JvbV9kb25lKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTQyNiwyMiArMzU3LDE2IEBACiAJd2hpbGUgKGRvbmUgPT0gMCkgewogCQlkb25lID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfR0xCX1NUQVRVUyk7CiAJCWRvbmUgJj0gMjsKLQkJdGltZW91dCsrOwotCQlpZiAodGltZW91dCA+PSByb21fbWF4X3RpbWVvdXQpIHsKLQkJCXByaW50aygiVGltZW91dCByZWFjaGVkICB3YWl0aW5nIGZvciByb20gZG9uZSIpOworCQlpZiAoKyt0aW1lb3V0ID49IE5FVFhFTl9NQVhfUk9NX1dBSVRfVVNFQykgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJUaW1lb3V0IHJlYWNoZWQgIHdhaXRpbmcgZm9yIHJvbSBkb25lIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQorCQl1ZGVsYXkoMSk7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBuZXR4ZW5fcm9tX3VubG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JLyogcmVsZWFzZSBzZW1hcGhvcmUyICovCi0JTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTJfVU5MT0NLKSk7Ci0KLX0KLQogc3RhdGljIGludCBkb19yb21fZmFzdF9yZWFkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICBpbnQgYWRkciwgaW50ICp2YWxwKQogewpAQCAtNDg2LDcgKzQxMSw3IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHJvbV9sb2NrKGFkYXB0ZXIpOworCXJldCA9IG5ldHhlbl9yb21fbG9jayhhZGFwdGVyKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTAwLDcgKzQyNSw3IEBACiB7CiAJaW50IHJldDsKIAotCWlmIChyb21fbG9jayhhZGFwdGVyKSAhPSAwKQorCWlmIChuZXR4ZW5fcm9tX2xvY2soYWRhcHRlcikgIT0gMCkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZXQgPSBkb19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHZhbHApOwpAQCAtNTIxLDcgKzQ0Niw3IEBACiAJdTMyIG9mZjsKIAogCS8qIHJlc2V0YWxsICovCi0Jcm9tX2xvY2soYWRhcHRlcik7CisJbmV0eGVuX3JvbV9sb2NrKGFkYXB0ZXIpOwogCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fUk9NVVNCX0dMQl9TV19SRVNFVCwgMHhmZmZmZmZmZik7CiAJbmV0eGVuX3JvbV91bmxvY2soYWRhcHRlcik7CiAKQEAgLTc5NywyMSArNzIyLDI4IEBACiAJCQlmbGFzaGFkZHIgKz0gODsKIAkJfQogCX0gZWxzZSB7Ci0JCXUzMiBkYXRhOworCQl1NjQgZGF0YTsKKwkJdTMyIGhpLCBsbzsKIAotCQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpIC8gNDsKKwkJc2l6ZSA9IChORVRYRU5fSU1BR0VfU1RBUlQgLSBORVRYRU5fQk9PVExEX1NUQVJUKSAvIDg7CiAJCWZsYXNoYWRkciA9IE5FVFhFTl9CT09UTERfU1RBUlQ7CiAKIAkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogCQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCi0JCQkJCWZsYXNoYWRkciwgKGludCAqKSZkYXRhKSAhPSAwKQorCQkJCQlmbGFzaGFkZHIsICZsbykgIT0gMCkKIAkJCQlyZXR1cm4gLUVJTzsKKwkJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJCQlmbGFzaGFkZHIgKyA0LCAmaGkpICE9IDApCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCS8qIGhpLCBsbyBhcmUgYWxyZWFkeSBpbiBob3N0IGVuZGlhbiBieXRlb3JkZXIgKi8KKwkJCWRhdGEgPSAoKCh1NjQpaGkgPDwgMzIpIHwgbG8pOwogCiAJCQlpZiAoYWRhcHRlci0+cGNpX21lbV93cml0ZShhZGFwdGVyLAotCQkJCQkJZmxhc2hhZGRyLCAmZGF0YSwgNCkpCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA4KSkKIAkJCQlyZXR1cm4gLUVJTzsKIAotCQkJZmxhc2hhZGRyICs9IDQ7CisJCQlmbGFzaGFkZHIgKz0gODsKIAkJfQogCX0KIAltc2xlZXAoMSk7CkBAIC04ODAsMjIgKzgxMiwxMCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG5ldHhlbl9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQKK25ldHhlbl9wM19oYXNfbW4oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBjYXBhYmlsaXR5LCBmbGFzaGVkX3ZlcjsKLQl1OCBmd190eXBlOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKLQkJZndfdHlwZSA9IE5YX1AyX01OX1JPTUlNQUdFOwotCQlnb3RvIHJlcXVlc3RfZnc7Ci0JfSBlbHNlIHsKLQkJZndfdHlwZSA9IE5YX1AzX0NUX1JPTUlNQUdFOwotCQlnb3RvIHJlcXVlc3RfZnc7Ci0JfQotCi1yZXF1ZXN0X21uOgogCWNhcGFiaWxpdHkgPSAwOwogCiAJbmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKQEAgLTkwMywyMyArODIzLDM1IEBACiAJZmxhc2hlZF92ZXIgPSBORVRYRU5fREVDT0RFX1ZFUlNJT04oZmxhc2hlZF92ZXIpOwogCiAJaWYgKGZsYXNoZWRfdmVyID49IE5FVFhFTl9WRVJTSU9OX0NPREUoNCwgMCwgMjIwKSkgeworCiAJCWNhcGFiaWxpdHkgPSBOWFJEMzIoYWRhcHRlciwgTlhfUEVHX1RVTkVfQ0FQQUJJTElUWSk7Ci0JCWlmIChjYXBhYmlsaXR5ICYgTlhfUEVHX1RVTkVfTU5fUFJFU0VOVCkgewotCQkJZndfdHlwZSA9IE5YX1AzX01OX1JPTUlNQUdFOwotCQkJZ290byByZXF1ZXN0X2Z3OwotCQl9CisJCWlmIChjYXBhYmlsaXR5ICYgTlhfUEVHX1RVTkVfTU5fUFJFU0VOVCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBuZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTggZndfdHlwZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHJjID0gMDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCWZ3X3R5cGUgPSBOWF9QMl9NTl9ST01JTUFHRTsKKwkJZ290byByZXF1ZXN0X2Z3OwogCX0KIAotCWZ3X3R5cGUgPSBOWF9GTEFTSF9ST01JTUFHRTsKLQlhZGFwdGVyLT5mdyA9IE5VTEw7Ci0JZ290byBkb25lOworCWZ3X3R5cGUgPSBuZXR4ZW5fcDNfaGFzX21uKGFkYXB0ZXIpID8KKwkJTlhfUDNfTU5fUk9NSU1BR0UgOiBOWF9QM19DVF9ST01JTUFHRTsKIAogcmVxdWVzdF9mdzoKIAlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmFkYXB0ZXItPmZ3LCBmd19uYW1lW2Z3X3R5cGVdLCAmcGRldi0+ZGV2KTsKIAlpZiAocmMgIT0gMCkgewotCQlpZiAoZndfdHlwZSA9PSBOWF9QM19DVF9ST01JTUFHRSkgeworCQlpZiAoZndfdHlwZSA9PSBOWF9QM19NTl9ST01JTUFHRSkgewogCQkJbXNsZWVwKDEpOwotCQkJZ290byByZXF1ZXN0X21uOworCQkJZndfdHlwZSA9IE5YX1AzX0NUX1JPTUlNQUdFOworCQkJZ290byByZXF1ZXN0X2Z3OwogCQl9CiAKIAkJZndfdHlwZSA9IE5YX0ZMQVNIX1JPTUlNQUdFOwpAQCAtOTMxLDkgKzg2MywxMCBAQAogCWlmIChyYyAhPSAwKSB7CiAJCXJlbGVhc2VfZmlybXdhcmUoYWRhcHRlci0+ZncpOwogCi0JCWlmIChmd190eXBlID09IE5YX1AzX0NUX1JPTUlNQUdFKSB7CisJCWlmIChmd190eXBlID09IE5YX1AzX01OX1JPTUlNQUdFKSB7CiAJCQltc2xlZXAoMSk7Ci0JCQlnb3RvIHJlcXVlc3RfbW47CisJCQlmd190eXBlID0gTlhfUDNfQ1RfUk9NSU1BR0U7CisJCQlnb3RvIHJlcXVlc3RfZnc7CiAJCX0KIAogCQlmd190eXBlID0gTlhfRkxBU0hfUk9NSU1BR0U7CkBAIC05NTEsMjEgKzg4NCwyMyBAQAogewogCWlmIChhZGFwdGVyLT5mdykKIAkJcmVsZWFzZV9maXJtd2FyZShhZGFwdGVyLT5mdyk7CisJYWRhcHRlci0+ZncgPSBOVUxMOwogfQogCi1pbnQgbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vZmZsb2FkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK2ludCBuZXR4ZW5faW5pdF9kdW1teV9kbWEoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXVpbnQ2NF90IGFkZHI7Ci0JdWludDMyX3QgaGk7Ci0JdWludDMyX3QgbG87CisJdTY0IGFkZHI7CisJdTMyIGhpLCBsbzsKIAotCWFkYXB0ZXItPmR1bW15X2RtYS5hZGRyID0KLQkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwlpZiAoIU5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybiAwOworCisJYWRhcHRlci0+ZHVtbXlfZG1hLmFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAogCQkJCSBORVRYRU5fSE9TVF9EVU1NWV9ETUFfU0laRSwKIAkJCQkgJmFkYXB0ZXItPmR1bW15X2RtYS5waHlzX2FkZHIpOwogCWlmIChhZGFwdGVyLT5kdW1teV9kbWEuYWRkciA9PSBOVUxMKSB7Ci0JCXByaW50aygiJXM6IEVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgZHVtbXkgRE1BIG1lbW9yeVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgZHVtbXkgRE1BIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtOTc2LDI5ICs5MTEsNDEgQEAKIAlOWFdSMzIoYWRhcHRlciwgQ1JCX0hPU1RfRFVNTVlfQlVGX0FERFJfSEksIGhpKTsKIAlOWFdSMzIoYWRhcHRlciwgQ1JCX0hPU1RfRFVNTVlfQlVGX0FERFJfTE8sIGxvKTsKIAotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7Ci0JCXVpbnQzMl90IHRlbXAgPSAwOwotCQlOWFdSMzIoYWRhcHRlciwgQ1JCX0hPU1RfRFVNTVlfQlVGLCB0ZW1wKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBuZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorLyoKKyAqIE5ldFhlbiBETUEgd2F0Y2hkb2cgY29udHJvbDoKKyAqCisgKglCaXQgMAkJOiBlbmFibGVkID0+IFIvTzogMSB3YXRjaGRvZyBhY3RpdmUsIDAgaW5hY3RpdmUKKyAqCUJpdCAxCQk6IGRpc2FibGVfcmVxdWVzdCA9PiAxIHJlcSBkaXNhYmxlIGRtYSB3YXRjaGRvZworICoJQml0IDIJCTogZW5hYmxlX3JlcXVlc3QgPT4gIDEgcmVxIGVuYWJsZSBkbWEgd2F0Y2hkb2cKKyAqCUJpdCAzLTMxCTogdW51c2VkCisgKi8KK3ZvaWQgbmV0eGVuX2ZyZWVfZHVtbXlfZG1hKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaSA9IDEwMDsKKwl1MzIgY3RybDsKKworCWlmICghTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuOwogCiAJaWYgKCFhZGFwdGVyLT5kdW1teV9kbWEuYWRkcikKIAkJcmV0dXJuOwogCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKLQkJZG8gewotCQkJaWYgKGRtYV93YXRjaGRvZ19zaHV0ZG93bl9yZXF1ZXN0KGFkYXB0ZXIpID09IDEpCi0JCQkJYnJlYWs7CisJY3RybCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRE1BX1dBVENIRE9HX0NUUkwpOworCWlmICgoY3RybCAmIDB4MSkgIT0gMCkgeworCQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX0RNQV9XQVRDSERPR19DVFJMLCAoY3RybCB8IDB4MikpOworCisJCXdoaWxlICgoY3RybCAmIDB4MSkgIT0gMCkgeworCiAJCQltc2xlZXAoNTApOwotCQkJaWYgKGRtYV93YXRjaGRvZ19zaHV0ZG93bl9wb2xsX3Jlc3VsdChhZGFwdGVyKSA9PSAxKQorCisJCQljdHJsID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9ETUFfV0FUQ0hET0dfQ1RSTCk7CisKKwkJCWlmICgtLWkgPT0gMCkKIAkJCQlicmVhazsKLQkJfSB3aGlsZSAoLS1pKTsKKwkJfTsKIAl9CiAKIAlpZiAoaSkgewpAQCAtMTAwNywxMCArOTU0LDggQEAKIAkJCSAgICBhZGFwdGVyLT5kdW1teV9kbWEuYWRkciwKIAkJCSAgICBhZGFwdGVyLT5kdW1teV9kbWEucGh5c19hZGRyKTsKIAkJYWRhcHRlci0+ZHVtbXlfZG1hLmFkZHIgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRtYV93YXRjaGRvZ19zaHV0ZG93biBmYWlsZWRcbiIsCi0JCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQl9CisJfSBlbHNlCisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgImRtYV93YXRjaGRvZ19zaHV0ZG93biBmYWlsZWRcbiIpOwogfQogCiBpbnQgbmV0eGVuX3BoYW50b21faW5pdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwZWd0dW5lX3ZhbCkKQEAgLTEwODMsMTAgKzEwMjgsNiBAQAogCU5YV1IzMihhZGFwdGVyLCBDUkJfTVBPUlRfTU9ERSwgTVBPUlRfTVVMVElfRlVOQ1RJT05fTU9ERSk7CiAJTlhXUjMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUsIFBIQU5fSU5JVElBTElaRV9BQ0spOwogCi0JaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPj0gTkVUWEVOX1ZFUlNJT05fQ09ERSg0LCAwLCAyMjIpKSB7Ci0JCWFkYXB0ZXItPmNhcGFiaWxpdGllcyA9IE5YUkQzMihhZGFwdGVyLCBDUkJfRldfQ0FQQUJJTElUSUVTXzEpOwotCX0KLQogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEyMjIsMjAgKzExNjMsMzEgQEAKIAogc3RhdGljIHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICoKIG5ldHhlbl9wcm9jZXNzX3JjdihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCWludCByaW5nLCBpbnQgaW5kZXgsIGludCBsZW5ndGgsIGludCBja3N1bSwgaW50IHBrdF9vZmZzZXQsCi0JCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKKwkJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nLAorCQlpbnQgcmluZywgdTY0IHN0c19kYXRhMCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqYnVmZmVyOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJc3RydWN0IG54X2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCWludCBpbmRleCwgbGVuZ3RoLCBja3N1bSwgcGt0X29mZnNldDsKIAotCWlmICh1bmxpa2VseShpbmRleCA+IHJkc19yaW5nLT5udW1fZGVzYykpCisJaWYgKHVubGlrZWx5KHJpbmcgPj0gYWRhcHRlci0+bWF4X3Jkc19yaW5ncykpCisJCXJldHVybiBOVUxMOworCisJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKworCWluZGV4ID0gbmV0eGVuX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhMCk7CisJaWYgKHVubGlrZWx5KGluZGV4ID49IHJkc19yaW5nLT5udW1fZGVzYykpCiAJCXJldHVybiBOVUxMOwogCiAJYnVmZmVyID0gJnJkc19yaW5nLT5yeF9idWZfYXJyW2luZGV4XTsKIAorCWxlbmd0aCA9IG5ldHhlbl9nZXRfc3RzX3RvdGFsbGVuZ3RoKHN0c19kYXRhMCk7CisJY2tzdW0gID0gbmV0eGVuX2dldF9zdHNfc3RhdHVzKHN0c19kYXRhMCk7CisJcGt0X29mZnNldCA9IG5ldHhlbl9nZXRfc3RzX3BrdF9vZmZzZXQoc3RzX2RhdGEwKTsKKwogCXNrYiA9IG5ldHhlbl9wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsIHJkc19yaW5nLCBpbmRleCwgY2tzdW0pOwogCWlmICghc2tiKQogCQlyZXR1cm4gYnVmZmVyOwpAQCAtMTI0OSwxMSArMTIwMSw4OCBAQAogCWlmIChwa3Rfb2Zmc2V0KQogCQlza2JfcHVsbChza2IsIHBrdF9vZmZzZXQpOwogCisJc2tiLT50cnVlc2l6ZSA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCiAJbmFwaV9ncm9fcmVjZWl2ZSgmc2RzX3JpbmctPm5hcGksIHNrYik7CiAKLQlhZGFwdGVyLT5zdGF0cy5ub19yY3YrKzsKKwlhZGFwdGVyLT5zdGF0cy5yeF9wa3RzKys7CisJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCisjZGVmaW5lIFRDUF9IRFJfU0laRSAgICAgICAgICAgIDIwCisjZGVmaW5lIFRDUF9UU19PUFRJT05fU0laRSAgICAgIDEyCisjZGVmaW5lIFRDUF9UU19IRFJfU0laRSAgICAgICAgIChUQ1BfSERSX1NJWkUgKyBUQ1BfVFNfT1BUSU9OX1NJWkUpCisKK3N0YXRpYyBzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqCituZXR4ZW5fcHJvY2Vzc19scm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsCisJCWludCByaW5nLCB1NjQgc3RzX2RhdGEwLCB1NjQgc3RzX2RhdGExKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IHRjcGhkciAqdGg7CisJYm9vbCBwdXNoLCB0aW1lc3RhbXA7CisJaW50IGwyX2hkcl9vZmZzZXQsIGw0X2hkcl9vZmZzZXQ7CisJaW50IGluZGV4OworCXUxNiBscm9fbGVuZ3RoLCBsZW5ndGgsIGRhdGFfb2Zmc2V0OworCXUzMiBzZXFfbnVtYmVyOworCisJaWYgKHVubGlrZWx5KHJpbmcgPiBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCisJaW5kZXggPSBuZXR4ZW5fZ2V0X2xyb19zdHNfcmVmaGFuZGxlKHN0c19kYXRhMCk7CisJaWYgKHVubGlrZWx5KGluZGV4ID4gcmRzX3JpbmctPm51bV9kZXNjKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOworCisJdGltZXN0YW1wID0gbmV0eGVuX2dldF9scm9fc3RzX3RpbWVzdGFtcChzdHNfZGF0YTApOworCWxyb19sZW5ndGggPSBuZXR4ZW5fZ2V0X2xyb19zdHNfbGVuZ3RoKHN0c19kYXRhMCk7CisJbDJfaGRyX29mZnNldCA9IG5ldHhlbl9nZXRfbHJvX3N0c19sMl9oZHJfb2Zmc2V0KHN0c19kYXRhMCk7CisJbDRfaGRyX29mZnNldCA9IG5ldHhlbl9nZXRfbHJvX3N0c19sNF9oZHJfb2Zmc2V0KHN0c19kYXRhMCk7CisJcHVzaCA9IG5ldHhlbl9nZXRfbHJvX3N0c19wdXNoX2ZsYWcoc3RzX2RhdGEwKTsKKwlzZXFfbnVtYmVyID0gbmV0eGVuX2dldF9scm9fc3RzX3NlcV9udW1iZXIoc3RzX2RhdGExKTsKKworCXNrYiA9IG5ldHhlbl9wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsIHJkc19yaW5nLCBpbmRleCwgU1RBVFVTX0NLU1VNX09LKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIGJ1ZmZlcjsKKworCWlmICh0aW1lc3RhbXApCisJCWRhdGFfb2Zmc2V0ID0gbDRfaGRyX29mZnNldCArIFRDUF9UU19IRFJfU0laRTsKKwllbHNlCisJCWRhdGFfb2Zmc2V0ID0gbDRfaGRyX29mZnNldCArIFRDUF9IRFJfU0laRTsKKworCXNrYl9wdXQoc2tiLCBscm9fbGVuZ3RoICsgZGF0YV9vZmZzZXQpOworCisJc2tiLT50cnVlc2l6ZSA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKSArIHNrYl9oZWFkcm9vbShza2IpOworCisJc2tiX3B1bGwoc2tiLCBsMl9oZHJfb2Zmc2V0KTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCisJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIChpcGgtPmlobCA8PCAyKSk7CisKKwlsZW5ndGggPSAoaXBoLT5paGwgPDwgMikgKyAodGgtPmRvZmYgPDwgMikgKyBscm9fbGVuZ3RoOworCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbmd0aCk7CisJaXBoLT5jaGVjayA9IDA7CisJaXBoLT5jaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLT5paGwpOworCXRoLT5wc2ggPSBwdXNoOworCXRoLT5zZXEgPSBodG9ubChzZXFfbnVtYmVyKTsKKworCWxlbmd0aCA9IHNrYi0+bGVuOworCisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCWFkYXB0ZXItPnN0YXRzLmxyb19wa3RzKys7CiAJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CiAKIAlyZXR1cm4gYnVmZmVyOwpAQCAtMTI3NSwyNyArMTMwNCwzMyBAQAogCXUzMiBjb25zdW1lciA9IHNkc19yaW5nLT5jb25zdW1lcjsKIAogCWludCBjb3VudCA9IDA7Ci0JdTY0IHN0c19kYXRhOwotCWludCBvcGNvZGUsIHJpbmcsIGluZGV4LCBsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0LCBkZXNjX2NudDsKKwl1NjQgc3RzX2RhdGEwLCBzdHNfZGF0YTE7CisJaW50IG9wY29kZSwgcmluZyA9IDAsIGRlc2NfY250OwogCiAJd2hpbGUgKGNvdW50IDwgbWF4KSB7CiAJCWRlc2MgPSAmc2RzX3JpbmctPmRlc2NfaGVhZFtjb25zdW1lcl07Ci0JCXN0c19kYXRhID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YVswXSk7CisJCXN0c19kYXRhMCA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMF0pOwogCi0JCWlmICghKHN0c19kYXRhICYgU1RBVFVTX09XTkVSX0hPU1QpKQorCQlpZiAoIShzdHNfZGF0YTAgJiBTVEFUVVNfT1dORVJfSE9TVCkpCiAJCQlicmVhazsKIAotCQlkZXNjX2NudCA9IG5ldHhlbl9nZXRfc3RzX2Rlc2NfY250KHN0c19kYXRhKTsKLQkJcmluZyAgID0gbmV0eGVuX2dldF9zdHNfdHlwZShzdHNfZGF0YSk7CisJCWRlc2NfY250ID0gbmV0eGVuX2dldF9zdHNfZGVzY19jbnQoc3RzX2RhdGEwKTsKIAotCQlpZiAocmluZyA+IFJDVl9SSU5HX0pVTUJPKQotCQkJZ290byBza2lwOwotCi0JCW9wY29kZSA9IG5ldHhlbl9nZXRfc3RzX29wY29kZShzdHNfZGF0YSk7CisJCW9wY29kZSA9IG5ldHhlbl9nZXRfc3RzX29wY29kZShzdHNfZGF0YTApOwogCiAJCXN3aXRjaCAob3Bjb2RlKSB7CiAJCWNhc2UgTkVUWEVOX05JQ19SWFBLVF9ERVNDOgogCQljYXNlIE5FVFhFTl9PTERfUlhQS1RfREVTQzoKKwkJY2FzZSBORVRYRU5fTklDX1NZTl9PRkZMT0FEOgorCQkJcmluZyA9IG5ldHhlbl9nZXRfc3RzX3R5cGUoc3RzX2RhdGEwKTsKKwkJCXJ4YnVmID0gbmV0eGVuX3Byb2Nlc3NfcmN2KGFkYXB0ZXIsIHNkc19yaW5nLAorCQkJCQlyaW5nLCBzdHNfZGF0YTApOworCQkJYnJlYWs7CisJCWNhc2UgTkVUWEVOX05JQ19MUk9fREVTQzoKKwkJCXJpbmcgPSBuZXR4ZW5fZ2V0X2xyb19zdHNfdHlwZShzdHNfZGF0YTApOworCQkJc3RzX2RhdGExID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YVsxXSk7CisJCQlyeGJ1ZiA9IG5ldHhlbl9wcm9jZXNzX2xybyhhZGFwdGVyLCBzZHNfcmluZywKKwkJCQkJcmluZywgc3RzX2RhdGEwLCBzdHNfZGF0YTEpOwogCQkJYnJlYWs7CiAJCWNhc2UgTkVUWEVOX05JQ19SRVNQT05TRV9ERVNDOgogCQkJbmV0eGVuX2hhbmRsZV9md19tZXNzYWdlKGRlc2NfY250LCBjb25zdW1lciwgc2RzX3JpbmcpOwpAQCAtMTMwNSwxNCArMTM0MCw2IEBACiAKIAkJV0FSTl9PTihkZXNjX2NudCA+IDEpOwogCi0JCWluZGV4ICA9IG5ldHhlbl9nZXRfc3RzX3JlZmhhbmRsZShzdHNfZGF0YSk7Ci0JCWxlbmd0aCA9IG5ldHhlbl9nZXRfc3RzX3RvdGFsbGVuZ3RoKHN0c19kYXRhKTsKLQkJY2tzdW0gID0gbmV0eGVuX2dldF9zdHNfc3RhdHVzKHN0c19kYXRhKTsKLQkJcGt0X29mZnNldCA9IG5ldHhlbl9nZXRfc3RzX3BrdF9vZmZzZXQoc3RzX2RhdGEpOwotCi0JCXJ4YnVmID0gbmV0eGVuX3Byb2Nlc3NfcmN2KGFkYXB0ZXIsIHJpbmcsIGluZGV4LAotCQkJCWxlbmd0aCwgY2tzdW0sIHBrdF9vZmZzZXQsIHNkc19yaW5nKTsKLQogCQlpZiAocnhidWYpCiAJCQlsaXN0X2FkZF90YWlsKCZyeGJ1Zi0+bGlzdCwgJnNkc19yaW5nLT5mcmVlX2xpc3RbcmluZ10pOwogCkBAIC0xMzQ3LDcgKzEzNzQsNyBAQAogCiAJaWYgKGNvdW50KSB7CiAJCXNkc19yaW5nLT5jb25zdW1lciA9IGNvbnN1bWVyOwotCQlOWFdSMzIoYWRhcHRlciwgc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIsIGNvbnN1bWVyKTsKKwkJTlhXUklPKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyLCBjb25zdW1lcik7CiAJfQogCiAJcmV0dXJuIGNvdW50OwpAQCAtMTQwMiw4ICsxNDI5LDEwIEBACiAKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJiBuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCV9fbmV0aWZfdHhfbG9jayh0eF9yaW5nLT50eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JCQlpZiAobmV0eGVuX3R4X2F2YWlsKHR4X3JpbmcpID4gVFhfU1RPUF9USFJFU0gpCisJCQlpZiAobmV0eGVuX3R4X2F2YWlsKHR4X3JpbmcpID4gVFhfU1RPUF9USFJFU0gpIHsKIAkJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQkJYWRhcHRlci0+dHhfdGltZW9fY250ID0gMDsKKwkJCX0KIAkJCV9fbmV0aWZfdHhfdW5sb2NrKHR4X3JpbmctPnR4cSk7CiAJCX0KIAl9CkBAIC0xNDY1LDEwICsxNDk0LDEwIEBACiAKIAlpZiAoY291bnQpIHsKIAkJcmRzX3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7Ci0JCU5YV1IzMihhZGFwdGVyLCByZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciwKKwkJTlhXUklPKGFkYXB0ZXIsIHJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyLAogCQkJCShwcm9kdWNlci0xKSAmIChyZHNfcmluZy0+bnVtX2Rlc2MtMSkpOwogCi0JCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpIHsKKwkJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKIAkJCS8qCiAJCQkgKiBXcml0ZSBhIGRvb3JiZWxsIG1zZyB0byB0ZWxsIHBoYW5tb24gb2YgY2hhbmdlIGluCiAJCQkgKiByZWNlaXZlIHJpbmcgcHJvZHVjZXIKQEAgLTE0ODEsOSArMTUxMCwxMCBAQAogCQkJCQkgICAgICAocmRzX3JpbmctPm51bV9kZXNjIC0gMSkpKTsKIAkJCW5ldHhlbl9zZXRfbXNnX2N0eGlkKG1zZywgYWRhcHRlci0+cG9ydG51bSk7CiAJCQluZXR4ZW5fc2V0X21zZ19vcGNvZGUobXNnLCBORVRYRU5fUkNWX1BST0RVQ0VSKHJpbmdpZCkpOwotCQkJd3JpdGVsKG1zZywKLQkJCSAgICAgICBEQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCXJlYWRfbG9jaygmYWRhcHRlci0+YWRhcHRlcl9sb2NrKTsKKwkJCXdyaXRlbChtc2csIERCX05PUk1BTElaRShhZGFwdGVyLAogCQkJCQkgICAgTkVUWEVOX1JDVl9QUk9EVUNFUl9PRkZTRVQpKTsKKwkJCXJlYWRfdW5sb2NrKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOwogCQl9CiAJfQogfQpAQCAtMTUyNSw3ICsxNTU1LDcgQEAKIAogCWlmIChjb3VudCkgewogCQlyZHNfcmluZy0+cHJvZHVjZXIgPSBwcm9kdWNlcjsKLQkJTlhXUjMyKGFkYXB0ZXIsIHJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyLAorCQlOWFdSSU8oYWRhcHRlciwgcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIsCiAJCQkJKHByb2R1Y2VyIC0gMSkgJiAocmRzX3JpbmctPm51bV9kZXNjIC0gMSkpOwogCX0KIAlzcGluX3VubG9jaygmcmRzX3JpbmctPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDI4ZjI3MGYuLmY3YmRkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAsMTIgKzIxLDYgQEAKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCiAgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KICAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4gSW5jLAotICogMTg5MjIgRm9yZ2UgRHJpdmUKLSAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtMzMsMTIgKzI4LDEyIEBACiAjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgogCiAjaW5jbHVkZSAibmV0eGVuX25pYy5oIgotI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiTmV0WGVuIE11bHRpIHBvcnQgKDEvMTApIEdpZ2FiaXQgTmV0d29yayBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTYzLDE4ICs1OCwzMSBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IG5ldHhlbl9uaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHN0YXRpYyBpbnQgbmV0eGVuX25pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIGludCBuZXR4ZW5fbmljX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwotc3RhdGljIGludCBuZXR4ZW5fbmljX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbmV0eGVuX25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICosCisJCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIG5ldHhlbl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogc3RhdGljIHZvaWQgbmV0eGVuX3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotc3RhdGljIHZvaWQgbmV0eGVuX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQgbmV0eGVuX2Z3X3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgbmV0eGVuX3NjaGVkdWxlX3dvcmsoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl3b3JrX2Z1bmNfdCBmdW5jLCBpbnQgZGVsYXkpOworc3RhdGljIHZvaWQgbmV0eGVuX2NhbmNlbF9md193b3JrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKICNlbmRpZgorCitzdGF0aWMgdm9pZCBuZXR4ZW5fY3JlYXRlX3N5c2ZzX2VudHJpZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIG5ldHhlbl9yZW1vdmVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworCitzdGF0aWMgaW50IG54X2RlY3JfZGV2X3JlZl9jbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgbmV0eGVuX2Nhbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworCiBzdGF0aWMgaXJxcmV0dXJuX3QgbmV0eGVuX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgbmV0eGVuX21zaV9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOwogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2l4X2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CiAKK3N0YXRpYyB2b2lkIG5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nKTsKKwogLyogIFBDSSBEZXZpY2UgSUQgVGFibGUgICovCiAjZGVmaW5lIEVOVFJZKGRldmljZSkgXAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTkVUWEVOLCAoZGV2aWNlKSksIFwKQEAgLTk0LDggKzEwMiw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZXR4ZW5fcGNpX3RibCk7CiAKLXN0YXRpYyB2b2lkIG5ldHhlbl93YXRjaGRvZyh1bnNpZ25lZCBsb25nKTsKLQogc3RhdGljIHVpbnQzMl90IGNyYl9jbWRfcHJvZHVjZXJbNF0gPSB7CiAJQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVQsIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzEsCiAJQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMiwgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMwpAQCAtMTA1LDcgKzExMSw3IEBACiBuZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgbnhfaG9zdF90eF9yaW5nICp0eF9yaW5nKQogewotCU5YV1IzMihhZGFwdGVyLCB0eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyLCB0eF9yaW5nLT5wcm9kdWNlcik7CisJTlhXUklPKGFkYXB0ZXIsIHR4X3JpbmctPmNyYl9jbWRfcHJvZHVjZXIsIHR4X3JpbmctPnByb2R1Y2VyKTsKIAogCWlmIChuZXR4ZW5fdHhfYXZhaWwodHhfcmluZykgPD0gVFhfU1RPUF9USFJFU0gpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwpAQCAtMTIyLDcgKzEyOCw3IEBACiBuZXR4ZW5fbmljX3VwZGF0ZV9jbWRfY29uc3VtZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQlzdHJ1Y3QgbnhfaG9zdF90eF9yaW5nICp0eF9yaW5nKQogewotCU5YV1IzMihhZGFwdGVyLCB0eF9yaW5nLT5jcmJfY21kX2NvbnN1bWVyLCB0eF9yaW5nLT5zd19jb25zdW1lcik7CisJTlhXUklPKGFkYXB0ZXIsIHR4X3JpbmctPmNyYl9jbWRfY29uc3VtZXIsIHR4X3JpbmctPnN3X2NvbnN1bWVyKTsKIH0KIAogc3RhdGljIHVpbnQzMl90IG1zaV90Z3Rfc3RhdHVzWzhdID0gewpAQCAtMTM4LDE4ICsxNDQsMTcgQEAKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKIAotCU5YV1IzMihhZGFwdGVyLCBzZHNfcmluZy0+Y3JiX2ludHJfbWFzaywgMCk7CisJTlhXUklPKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAwKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZW5hYmxlX2ludChzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CiAKLQlOWFdSMzIoYWRhcHRlciwgc2RzX3JpbmctPmNyYl9pbnRyX21hc2ssIDB4MSk7CisJTlhXUklPKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAweDEpOwogCiAJaWYgKCFORVRYRU5fSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSkKLQkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAotCQkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywgMHhmYmZmKTsKKwkJTlhXUklPKGFkYXB0ZXIsIGFkYXB0ZXItPnRndF9tYXNrX3JlZywgMHhmYmZmKTsKIH0KIAogc3RhdGljIGludApAQCAtMTc5LDcgKzE4NCw3IEBACiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCiAJaWYgKG5ldHhlbl9hbGxvY19zZHNfcmluZ3MocmVjdl9jdHgsIGFkYXB0ZXItPm1heF9zZHNfcmluZ3MpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CiAJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CkBAIC0zMDgsMzYgKzMxMyw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgbmV0eGVuX2NoZWNrX29wdGlvbnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKLQkJYWRhcHRlci0+bnVtX3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCWVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCi0JCWFkYXB0ZXItPm51bV9yeGQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOwotCi0JYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPnJzc19zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPj0gTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAzMzYpKSB7Ci0JCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKLQkJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKLQkJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19DWDQ6Ci0JCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OwotCQkJYWRhcHRlci0+cnNzX3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWFkYXB0ZXItPm51bV90eGQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1Q7Ci0JYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlM7Ci0JYWRhcHRlci0+bnVtX2xyb19yeGQgPSBNQVhfTFJPX1JDVl9ERVNDUklQVE9SUzsKLQotCXJldHVybjsKLX0KLQogc3RhdGljIGludAogbmV0eGVuX2NoZWNrX2h3X2luaXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZmlyc3RfYm9vdCkKIHsKQEAgLTUzNywxMCArNTEyLDIyIEBACiAJCWxlZ2FjeV9pbnRycCA9ICZsZWdhY3lfaW50clthZGFwdGVyLT5haHcucGNpX2Z1bmNdOwogCWVsc2UKIAkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyWzBdOwotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLmludF92ZWNfYml0ID0gbGVnYWN5X2ludHJwLT5pbnRfdmVjX2JpdDsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZyA9IGxlZ2FjeV9pbnRycC0+dGd0X3N0YXR1c19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X21hc2tfcmVnID0gbGVnYWN5X2ludHJwLT50Z3RfbWFza19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIucGNpX2ludF9yZWcgPSBsZWdhY3lfaW50cnAtPnBjaV9pbnRfcmVnOworCisJYWRhcHRlci0+aW50X3ZlY19iaXQgPSBsZWdhY3lfaW50cnAtPmludF92ZWNfYml0OworCWFkYXB0ZXItPnRndF9zdGF0dXNfcmVnID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCWxlZ2FjeV9pbnRycC0+dGd0X3N0YXR1c19yZWcpOworCWFkYXB0ZXItPnRndF9tYXNrX3JlZyA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQlsZWdhY3lfaW50cnAtPnRndF9tYXNrX3JlZyk7CisJYWRhcHRlci0+cGNpX2ludF9yZWcgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJbGVnYWN5X2ludHJwLT5wY2lfaW50X3JlZyk7CisJYWRhcHRlci0+aXNyX2ludF92ZWMgPSBuZXR4ZW5fZ2V0X2lvYWRkcihhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUik7CisKKwlpZiAoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID49IE5YX1AzX0IxKQorCQlhZGFwdGVyLT5jcmJfaW50X3N0YXRlX3JlZyA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQlJU1JfSU5UX1NUQVRFX1JFRyk7CisJZWxzZQorCQlhZGFwdGVyLT5jcmJfaW50X3N0YXRlX3JlZyA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQlDUkJfSU5UX1ZFQ1RPUik7CiAKIAluZXR4ZW5fc2V0X21zaXhfYml0KHBkZXYsIDApOwogCkBAIC01NjcsOCArNTU0LDggQEAKIAogCWlmICh1c2VfbXNpICYmICFwY2lfZW5hYmxlX21zaShwZGV2KSkgewogCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOwotCQlhZGFwdGVyLT5tc2lfdGd0X3N0YXR1cyA9Ci0JCQltc2lfdGd0X3N0YXR1c1thZGFwdGVyLT5haHcucGNpX2Z1bmNdOworCQlhZGFwdGVyLT50Z3Rfc3RhdHVzX3JlZyA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJbXNpX3RndF9zdGF0dXNbYWRhcHRlci0+YWh3LnBjaV9mdW5jXSk7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kgaW50ZXJydXB0c1xuIik7CiAJCWFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3IgPSBwZGV2LT5pcnE7CiAJCXJldHVybjsKQEAgLTYyOCwxNCArNjE1LDYgQEAKIAltZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAlwY2lfbGVuMCA9IDA7CiAKLQlhZGFwdGVyLT5od193cml0ZV93eCA9IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TTsKLQlhZGFwdGVyLT5od19yZWFkX3d4ID0gbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE07Ci0JYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzEyOE07Ci0JYWRhcHRlci0+cGNpX3NldF93aW5kb3cgPSBuZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93XzEyOE07Ci0JYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TTsKLQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlID0gbmV0eGVuX25pY19wY2lfbWVtX3dyaXRlXzEyOE07Ci0KIAkvKiAxMjggTWVnIG9mIG1lbW9yeSAqLwogCWlmIChtZW1fbGVuID09IE5FVFhFTl9QQ0lfMTI4TUJfU0laRSkgewogCQltZW1fcHRyMCA9IGlvcmVtYXAobWVtX2Jhc2UsIEZJUlNUX1BBR0VfR1JPVVBfU0laRSk7CkBAIC02NDgsMTQgKzYyNyw2IEBACiAJCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQgLQogCQkJU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsIFRISVJEX1BBR0VfR1JPVVBfU0laRSk7CiAJfSBlbHNlIGlmIChtZW1fbGVuID09IE5FVFhFTl9QQ0lfMk1CX1NJWkUpIHsKLQkJYWRhcHRlci0+aHdfd3JpdGVfd3ggPSBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4XzJNOwotCQlhZGFwdGVyLT5od19yZWFkX3d4ID0gbmV0eGVuX25pY19od19yZWFkX3d4XzJNOwotCQlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8yTTsKLQkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZSA9Ci0JCQluZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMk07Ci0JCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTTsKLQkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk07Ci0JCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk07CiAKIAkJbWVtX3B0cjAgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CiAJCWlmIChtZW1fcHRyMCA9PSBOVUxMKSB7CkBAIC02NjcsOSArNjM4LDEwIEBACiAJCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKIAkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOwogCi0JCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCi0JCQkocGNpX2Z1bmMgKiAweDIwKTsKLQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOworCQlhZGFwdGVyLT5haHcubW5fd2luX2NyYiA9IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UgKworCQkJMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArIChwY2lfZnVuYyAqIDB4MjApOworCQlhZGFwdGVyLT5haHcubXNfd2luX2NyYiA9IE5FVFhFTl9QQ0lfQ1JCU1BBQ0UgKworCQkJMHgxMDAwMDAgKyBQQ0lYX1NOX1dJTkRPVzsKIAkJaWYgKHBjaV9mdW5jIDwgNCkKIAkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9IChwY2lfZnVuYyAqIDB4MjApOwogCQllbHNlCkBAIC02NzksNiArNjUxLDggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCisJbmV0eGVuX3NldHVwX2h3b3BzKGFkYXB0ZXIpOworCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVkTUIgbWVtb3J5IG1hcFxuIiwgKGludCkobWVtX2xlbj4+MjApKTsKIAogCWFkYXB0ZXItPmFody5wY2lfYmFzZTAgPSBtZW1fcHRyMDsKQEAgLTcxNywyMCArNjkxLDExMSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkCituZXR4ZW5fY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQ7CisJY2hhciBicmRfbmFtZVtORVRYRU5fTUFYX1NIT1JUX05BTUVdOworCWNoYXIgc2VyaWFsX251bVszMl07CisJaW50IGksIG9mZnNldCwgdmFsOworCWludCAqcHRyMzI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMDsKKworCXB0cjMyID0gKGludCAqKSZzZXJpYWxfbnVtOworCW9mZnNldCA9IE5YX0ZXX1NFUklBTF9OVU1fT0ZGU0VUOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJnZhbCkgPT0gLTEpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yIHJlYWRpbmcgYm9hcmQgaW5mb1xuIik7CisJCQlhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2ggPSAxOworCQkJcmV0dXJuOworCQl9CisJCXB0cjMyW2ldID0gY3B1X3RvX2xlMzIodmFsKTsKKwkJb2Zmc2V0ICs9IHNpemVvZih1MzIpOworCX0KKworCWZ3X21ham9yID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9GV19WRVJTSU9OX01BSk9SKTsKKwlmd19taW5vciA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9NSU5PUik7CisJZndfYnVpbGQgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fU1VCKTsKKworCWFkYXB0ZXItPmZ3X3ZlcnNpb24gPSBORVRYRU5fVkVSU0lPTl9DT0RFKGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOworCisJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkgeworCQlnZXRfYnJkX25hbWVfYnlfdHlwZShhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSwgYnJkX25hbWUpOworCisJCXByaW50ayhLRVJOX0lORk8gIk5ldFhlbiAlcyBCb2FyZCBTL04gJXMgIENoaXAgcmV2IDB4JXhcbiIsCisJCQkJYnJkX25hbWUsIHNlcmlhbF9udW0sIGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCk7CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPCBORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKKwkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCisJCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlpID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9TUkVfTUlTQyk7CisJCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA9IChpICYgMHg4MDAwKSA/IDEgOiAwOworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJmaXJtd2FyZSB2JWQuJWQuJWQgWyVzXVxuIiwKKwkJCWZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQsCisJCQlhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2ggPyAiY3V0LXRocm91Z2giIDogImxlZ2FjeSIpOworCisJaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPj0gTkVUWEVOX1ZFUlNJT05fQ09ERSg0LCAwLCAyMjIpKQorCQlhZGFwdGVyLT5jYXBhYmlsaXRpZXMgPSBOWFJEMzIoYWRhcHRlciwgQ1JCX0ZXX0NBUEFCSUxJVElFU18xKTsKKworCWFkYXB0ZXItPmZsYWdzICY9IH5ORVRYRU5fTklDX0xST19FTkFCTEVEOworCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJCWFkYXB0ZXItPm51bV9yeGQgPSBERUZBVUxUX1JDVl9ERVNDUklQVE9SU18xMEc7CisJCWFkYXB0ZXItPm51bV9qdW1ib19yeGQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwkJYWRhcHRlci0+bnVtX3J4ZCA9IERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTXzFHOworCQlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xRzsKKwl9CisKKwlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7CisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpIHsKKwkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKKwkJYWRhcHRlci0+cnNzX3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OworCX0gZWxzZSBpZiAoYWRhcHRlci0+ZndfdmVyc2lvbiA+PSBORVRYRU5fVkVSU0lPTl9DT0RFKDMsIDQsIDMzNikpIHsKKwkJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgeworCQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHOgorCQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNDoKKwkJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7CisJCQlhZGFwdGVyLT5yc3Nfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlM7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlhZGFwdGVyLT5udW1fbHJvX3J4ZCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOworCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMzsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5udW1fbHJvX3J4ZCA9IDA7CisJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAyOworCX0KK30KKwogc3RhdGljIGludAotbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHJlcXVlc3RfZncpCituZXR4ZW5fc3RhcnRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCWludCB2YWwsIGVyciwgZmlyc3RfYm9vdDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlpbnQgZmlyc3RfZHJpdmVyID0gMDsKKwkvKiByZXF1aXJlZCBmb3IgTlgyMDMxIGR1bW15IGRtYSAqLworCWVyciA9IG54X3NldF9kbWFfbWFzayhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCi0JCWZpcnN0X2RyaXZlciA9IChhZGFwdGVyLT5wb3J0bnVtID09IDApOwotCWVsc2UKLQkJZmlyc3RfZHJpdmVyID0gKGFkYXB0ZXItPmFody5wY2lfZnVuYyA9PSAwKTsKLQotCWlmICghZmlyc3RfZHJpdmVyKQorCWlmICghbmV0eGVuX2Nhbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKSkKIAkJZ290byB3YWl0X2luaXQ7CiAKIAlmaXJzdF9ib290ID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9DQU1fUkFNKDB4MWZjKSk7CkBAIC03NDEsMTIgKzgwNiwxMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChyZXF1ZXN0X2Z3KQotCQluZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShhZGFwdGVyKTsKKwluZXR4ZW5fcmVxdWVzdF9maXJtd2FyZShhZGFwdGVyKTsKIAogCWVyciA9IG5ldHhlbl9uZWVkX2Z3X3Jlc2V0KGFkYXB0ZXIpOwotCWlmIChlcnIgPD0gMCkKLQkJcmV0dXJuIGVycjsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0OworCWlmIChlcnIgPT0gMCkKKwkJZ290byByZWFkeTsKIAogCWlmIChmaXJzdF9ib290ICE9IDB4NTU1NTU1NTUpIHsKIAkJTlhXUjMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUsIDApOwpAQCAtNzU1LDEwICs4MjEsMTcgQEAKIAl9CiAKIAlOWFdSMzIoYWRhcHRlciwgQ1JCX0RNQV9TSElGVCwgMHg1NTU1NTU1NSk7CisJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9QRUdfSEFMVF9TVEFUVVMxLCAwKTsKKwlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX1BFR19IQUxUX1NUQVRVUzIsIDApOworCiAJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCW5ldHhlbl9zZXRfcG9ydF9tb2RlKGFkYXB0ZXIpOwogCi0JbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7CisJZXJyID0gbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJbmV0eGVuX3JlbGVhc2VfZmlybXdhcmUoYWRhcHRlcik7CiAKIAlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewogCkBAIC03NzAsOSArODQzLDkgQEAKIAogCX0KIAotCWVyciA9IG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKKwllcnIgPSBuZXR4ZW5faW5pdF9kdW1teV9kbWEoYWRhcHRlcik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJfb3V0OwogCiAJLyoKIAkgKiBUZWxsIHRoZSBoYXJkd2FyZSBvdXIgdmVyc2lvbiBudW1iZXIuCkBAIC03ODIsMTUgKzg1NSwyOCBAQAogCQl8IChfTkVUWEVOX05JQ19MSU5VWF9TVUJWRVJTSU9OKTsKIAlOWFdSMzIoYWRhcHRlciwgQ1JCX0RSSVZFUl9WRVJTSU9OLCB2YWwpOwogCityZWFkeToKKwlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX1JFQURZKTsKKwogd2FpdF9pbml0OgogCS8qIEhhbmRzaGFrZSB3aXRoIHRoZSBjYXJkIGJlZm9yZSB3ZSByZWdpc3RlciB0aGUgZGV2aWNlcy4gKi8KIAllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOwogCWlmIChlcnIpIHsKLQkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwotCQlyZXR1cm4gZXJyOworCQluZXR4ZW5fZnJlZV9kdW1teV9kbWEoYWRhcHRlcik7CisJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlueF91cGRhdGVfZG1hX21hc2soYWRhcHRlcik7CisKKwluZXR4ZW5fY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKKworCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAwOworCisJLyogZmFsbCB0aHJvdWdoIGFuZCByZWxlYXNlIGZpcm13YXJlICovCisKK2Vycl9vdXQ6CisJbmV0eGVuX3JlbGVhc2VfZmlybXdhcmUoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludApAQCAtODQwLDExICs5MjYsMjggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2luaXRfY29hbGVzY2VfZGVmYXVsdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWFkYXB0ZXItPmNvYWwuZmxhZ3MgPSBORVRYRU5fTklDX0lOVFJfREVGQVVMVDsKKwlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3RpbWVfdXMgPQorCQlORVRYRU5fREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVM7CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF9wYWNrZXRzID0KKwkJTkVUWEVOX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9QQUNLRVRTOworCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfdGltZV91cyA9CisJCU5FVFhFTl9ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfVElNRV9VUzsKKwlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3BhY2tldHMgPQorCQlORVRYRU5fREVGQVVMVF9JTlRSX0NPQUxFU0NFX1RYX1BBQ0tFVFM7Cit9CisKIHN0YXRpYyBpbnQKIG5ldHhlbl9uaWNfdXAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCWludCBlcnI7CiAKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybiAtRUlPOworCiAJZXJyID0gYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKQEAgLTg2Miw2ICs5NjUsMTIgQEAKIAlpZiAoYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA+IDEpCiAJCW5ldHhlbl9jb25maWdfcnNzKGFkYXB0ZXIsIDEpOwogCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCW5ldHhlbl9jb25maWdfaW50cl9jb2FsZXNjZShhZGFwdGVyKTsKKworCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0hXX0xSTykKKwkJbmV0eGVuX2NvbmZpZ19od19scm8oYWRhcHRlciwgTkVUWEVOX05JQ19MUk9fRU5BQkxFRCk7CisKIAluZXR4ZW5fbmFwaV9lbmFibGUoYWRhcHRlcik7CiAKIAlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9MSU5LX05PVElGSUNBVElPTikKQEAgLTg2OSwxNCArOTc4LDE4IEBACiAJZWxzZQogCQluZXR4ZW5fbmljX3NldF9saW5rX3BhcmFtZXRlcnMoYWRhcHRlcik7CiAKLQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKLQorCXNldF9iaXQoX19OWF9ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCiBuZXR4ZW5fbmljX2Rvd24oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogeworCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuOworCisJY2xlYXJfYml0KF9fTlhfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpOworCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKQEAgLTg4NywxMiArMTAwMCwxMiBAQAogCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQluZXR4ZW5fcDNfZnJlZV9tYWNfbGlzdChhZGFwdGVyKTsKIAorCWFkYXB0ZXItPnNldF9wcm9taXNjKGFkYXB0ZXIsIE5FVFhFTl9OSVVfTk9OX1BST01JU0NfTU9ERSk7CisKIAluZXR4ZW5fbmFwaV9kaXNhYmxlKGFkYXB0ZXIpOwogCiAJbmV0eGVuX3JlbGVhc2VfdHhfYnVmZmVycyhhZGFwdGVyKTsKIAlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7Ci0KLQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwogfQogCiAKQEAgLTkwNSw2ICsxMDE4LDkgQEAKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CiAJc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZzsKIAorCWlmIChhZGFwdGVyLT5pc191cCA9PSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuIDA7CisKIAllcnIgPSBuZXR4ZW5faW5pdF9maXJtd2FyZShhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtOTEzLDExICsxMDI5LDYgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJYWRhcHRlci0+bWF4X3Jkc19yaW5ncyA9IDM7Ci0JZWxzZQotCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKLQogCWVyciA9IG5ldHhlbl9hbGxvY19zd19yZXNvdXJjZXMoYWRhcHRlcik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKQEAgLTkyNSw4ICsxMDM2LDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQluZXR4ZW5fbmljX2NsZWFyX3N0YXRzKGFkYXB0ZXIpOwotCiAJZXJyID0gbmV0eGVuX2FsbG9jX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGluIHNldHRpbmcgaHcgcmVzb3VyY2VzXG4iLApAQCAtOTM0LDEwICsxMDQzLDEyIEBACiAJCWdvdG8gZXJyX291dF9mcmVlX3N3OwogCX0KIAotCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpIHsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewogCQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKLQkJdHhfcmluZy0+Y3JiX2NtZF9wcm9kdWNlciA9IGNyYl9jbWRfcHJvZHVjZXJbYWRhcHRlci0+cG9ydG51bV07Ci0JCXR4X3JpbmctPmNyYl9jbWRfY29uc3VtZXIgPSBjcmJfY21kX2NvbnN1bWVyW2FkYXB0ZXItPnBvcnRudW1dOworCQl0eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyID0gbmV0eGVuX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQljcmJfY21kX3Byb2R1Y2VyW2FkYXB0ZXItPnBvcnRudW1dKTsKKwkJdHhfcmluZy0+Y3JiX2NtZF9jb25zdW1lciA9IG5ldHhlbl9nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJY3JiX2NtZF9jb25zdW1lclthZGFwdGVyLT5wb3J0bnVtXSk7CiAKIAkJdHhfcmluZy0+cHJvZHVjZXIgPSAwOwogCQl0eF9yaW5nLT5zd19jb25zdW1lciA9IDA7CkBAIC05NTgsNiArMTA2OSwxMSBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9yeGJ1ZjsKIAl9CiAKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJbmV0eGVuX25pY19pbml0X2NvYWxlc2NlX2RlZmF1bHRzKGFkYXB0ZXIpOworCisJbmV0eGVuX2NyZWF0ZV9zeXNmc19lbnRyaWVzKGFkYXB0ZXIpOworCiAJYWRhcHRlci0+aXNfdXAgPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQzsKIAlyZXR1cm4gMDsKIApAQCAtOTcyLDYgKzEwODgsMTEgQEAKIHN0YXRpYyB2b2lkCiBuZXR4ZW5fbmljX2RldGFjaChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm47CisKKwluZXR4ZW5fcmVtb3ZlX3N5c2ZzX2VudHJpZXMoYWRhcHRlcik7CisKIAluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CiAJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKIAluZXR4ZW5fbmljX2ZyZWVfaXJxKGFkYXB0ZXIpOwpAQCAtOTgxLDYgKzExMDIsMTAxIEBACiAJYWRhcHRlci0+aXNfdXAgPSAwOwogfQogCitpbnQKK25ldHhlbl9uaWNfcmVzZXRfY29udGV4dChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7CisKKwkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQluZXR4ZW5fbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKKworCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKKworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQllcnIgPSBuZXR4ZW5fbmljX2F0dGFjaChhZGFwdGVyKTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IG5ldHhlbl9uaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKKworCQkJaWYgKGVycikKKwkJCQlnb3RvIGRvbmU7CisJCX0KKworCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJfQorCitkb25lOgorCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fc2V0dXBfbmV0ZGV2KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlhZGFwdGVyLT5yeF9jc3VtID0gMTsKKwlhZGFwdGVyLT5tY19lbmFibGVkID0gMDsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJYWRhcHRlci0+bWF4X21jX2NvdW50ID0gMzg7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfbWNfY291bnQgPSAxNjsKKworCW5ldGRldi0+bmV0ZGV2X29wcwkgICA9ICZuZXR4ZW5fbmV0ZGV2X29wczsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvICAgICA9IDIqSFo7CisKKwluZXR4ZW5fbmljX2NoYW5nZV9tdHUobmV0ZGV2LCBuZXRkZXYtPm10dSk7CisKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmbmV0eGVuX25pY19ldGh0b29sX29wcyk7CisKKwluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9UU08pOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfR1JPKTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNik7CisJCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzYpOworCX0KKworCWlmIChhZGFwdGVyLT5wY2lfdXNpbmdfZGFjKSB7CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCX0KKworCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBOWF9GV19DQVBBQklMSVRZX0ZWTEFOVFgpCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSFdfVkxBTl9UWCk7CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9IV19MUk8pCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisKKwluZXRkZXYtPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3I7CisKKwlJTklUX1dPUksoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzaywgbmV0eGVuX3R4X3RpbWVvdXRfdGFzayk7CisKKwlpZiAobmV0eGVuX3JlYWRfbWFjX2FkZHIoYWRhcHRlcikpCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVhZCBtYWMgYWRkclxuIik7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldCBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogbmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKQEAgLTEwMTgsOSArMTIzNCw4IEBACiAKIAluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyKSk7CiAJaWYoIW5ldGRldikgewotCQlwcmludGsoS0VSTl9FUlIiJXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSAiCi0JCQkJImRldmljZSBibG9jay5DaGVjayBzeXN0ZW0gbWVtb3J5IHJlc291cmNlIgotCQkJCSIgdXNhZ2UuXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG5ldF9kZXZpY2VcbiIpOworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQogCkBAIC0xMDM0LDEwICsxMjQ5LDYgQEAKIAlyZXZpc2lvbl9pZCA9IHBkZXYtPnJldmlzaW9uOwogCWFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA9IHJldmlzaW9uX2lkOwogCi0JZXJyID0gbnhfc2V0X2RtYV9tYXNrKGFkYXB0ZXIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKLQogCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5hZGFwdGVyX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+bWFjX2xpc3QpOwpAQCAtMTA0OCw0MyArMTI1OSwxMyBAQAogCiAJLyogVGhpcyB3aWxsIGJlIHJlc2V0IGZvciBtZXp6IGNhcmRzICAqLwogCWFkYXB0ZXItPnBvcnRudW0gPSBwY2lfZnVuY19pZDsKLQlhZGFwdGVyLT5yeF9jc3VtID0gMTsKLQlhZGFwdGVyLT5tY19lbmFibGVkID0gMDsKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKQotCQlhZGFwdGVyLT5tYXhfbWNfY291bnQgPSAzODsKLQllbHNlCi0JCWFkYXB0ZXItPm1heF9tY19jb3VudCA9IDE2OwogCi0JbmV0ZGV2LT5uZXRkZXZfb3BzCSAgID0gJm5ldHhlbl9uZXRkZXZfb3BzOwotCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gICAgID0gMipIWjsKLQotCW5ldHhlbl9uaWNfY2hhbmdlX210dShuZXRkZXYsIG5ldGRldi0+bXR1KTsKLQotCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZuZXR4ZW5fbmljX2V0aHRvb2xfb3BzKTsKLQotCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7Ci0JbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9HUk8pOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKLQotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhyZXZpc2lvbl9pZCkpIHsKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzYpOwotCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082KTsKLQl9Ci0KLQlpZiAoYWRhcHRlci0+cGNpX3VzaW5nX2RhYykgewotCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQkJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKLQl9Ci0KLQlpZiAobmV0eGVuX25pY19nZXRfYm9hcmRfaW5mbyhhZGFwdGVyKSAhPSAwKSB7Ci0JCXByaW50aygiJXM6IEVycm9yIGdldHRpbmcgYm9hcmQgY29uZmlnIGluZm8uXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQllcnIgPSAtRUlPOworCWVyciA9IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBnZXR0aW5nIGJvYXJkIGNvbmZpZyBpbmZvLlxuIik7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIAotCW5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKGFkYXB0ZXIpOwotCiAJLyogTWV6eiBjYXJkcyBoYXZlIFBDSSBmdW5jdGlvbiAwLDIsMyBlbmFibGVkICovCiAJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKQEAgLTEwOTYsNTMgKzEyNzcsMzIgQEAKIAkJYnJlYWs7CiAJfQogCi0JZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIsIDEpOworCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCW54X3VwZGF0ZV9kbWFfbWFzayhhZGFwdGVyKTsKLQotCW5ldHhlbl9uaWNfZ2V0X2Zpcm13YXJlX2luZm8oYWRhcHRlcik7Ci0KIAkvKgogCSAqIFNlZSBpZiB0aGUgZmlybXdhcmUgZ2F2ZSB1cyBhIHZpcnR1YWwtcGh5c2ljYWwgcG9ydCBtYXBwaW5nLgogCSAqLwogCWFkYXB0ZXItPnBoeXNpY2FsX3BvcnQgPSBhZGFwdGVyLT5wb3J0bnVtOwotCWlmIChhZGFwdGVyLT5md19tYWpvciA8IDQpIHsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewogCQlpID0gTlhSRDMyKGFkYXB0ZXIsIENSQl9WMlAoYWRhcHRlci0+cG9ydG51bSkpOwogCQlpZiAoaSAhPSAweDU1NTU1NTU1KQogCQkJYWRhcHRlci0+cGh5c2ljYWxfcG9ydCA9IGk7CiAJfQogCi0JbmV0eGVuX2NoZWNrX29wdGlvbnMoYWRhcHRlcik7CisJbmV0eGVuX25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKIAogCW5ldHhlbl9zZXR1cF9pbnRyKGFkYXB0ZXIpOwogCi0JbmV0ZGV2LT5pcnEgPSBhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yOwotCi0JaW5pdF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwotCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmZ1bmN0aW9uID0gJm5ldHhlbl93YXRjaGRvZzsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKLQlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssIG5ldHhlbl93YXRjaGRvZ190YXNrKTsKLQlJTklUX1dPUksoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzaywgbmV0eGVuX3R4X3RpbWVvdXRfdGFzayk7Ci0KLQllcnIgPSBuZXR4ZW5fcmVhZF9tYWNfYWRkcihhZGFwdGVyKTsKKwllcnIgPSBuZXR4ZW5fc2V0dXBfbmV0ZGV2KGFkYXB0ZXIsIG5ldGRldik7CiAJaWYgKGVycikKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWFkIG1hYyBhZGRyXG4iKTsKLQotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCi0JaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZCBwb3J0ICMlZCIKLQkJCSAgICAgICAiIGFib3J0aW5nXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAotCQkJICAgICAgIGFkYXB0ZXItPnBvcnRudW0pOwotCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9tc2k7Ci0JfQogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwogCisJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2Z3X3BvbGxfd29yaywgRldfUE9MTF9ERUxBWSk7CisKIAlzd2l0Y2ggKGFkYXB0ZXItPmFody5wb3J0X3R5cGUpIHsKIAljYXNlIE5FVFhFTl9OSUNfR0JFOgogCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXM6IEdiRSBwb3J0IGluaXRpYWxpemVkXG4iLApAQCAtMTE1OSw3ICsxMzE5LDkgQEAKIGVycl9vdXRfZGlzYWJsZV9tc2k6CiAJbmV0eGVuX3RlYXJkb3duX2ludHIoYWRhcHRlcik7CiAKLQluZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CisJbmV0eGVuX2ZyZWVfZHVtbXlfZG1hKGFkYXB0ZXIpOworCisJbnhfZGVjcl9kZXZfcmVmX2NudChhZGFwdGVyKTsKIAogZXJyX291dF9pb3VubWFwOgogCW5ldHhlbl9jbGVhbnVwX3BjaV9tYXAoYWRhcHRlcik7CkBAIC0xMTg3LDE3ICsxMzQ5LDIwIEBACiAKIAluZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKKwluZXR4ZW5fY2FuY2VsX2Z3X3dvcmsoYWRhcHRlcik7CisKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCi0JY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKIAotCWlmIChhZGFwdGVyLT5pc191cCA9PSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykgewotCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKLQl9CisJbmV0eGVuX25pY19kZXRhY2goYWRhcHRlcik7CisKKwlueF9kZWNyX2Rldl9yZWZfY250KGFkYXB0ZXIpOwogCiAJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkKLQkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCQluZXR4ZW5fZnJlZV9kdW1teV9kbWEoYWRhcHRlcik7CisKKwljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CiAKIAluZXR4ZW5fdGVhcmRvd25faW50cihhZGFwdGVyKTsKIApAQCAtMTIxMSwyNyArMTM3NiwzMyBAQAogCiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIH0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludAotbmV0eGVuX25pY19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IF9fbmV0eGVuX25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCByZXR2YWw7CiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKKwluZXR4ZW5fY2FuY2VsX2Z3X3dvcmsoYWRhcHRlcik7CisKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQluZXR4ZW5fbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7CiAKLQlpZiAoYWRhcHRlci0+aXNfdXAgPT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCi0JCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOwogCi0JcGNpX3NhdmVfc3RhdGUocGRldik7CisJaWYgKGFkYXB0ZXItPnBvcnRudW0gPT0gMCkKKwkJbmV0eGVuX2ZyZWVfZHVtbXlfZG1hKGFkYXB0ZXIpOworCisJbnhfZGVjcl9kZXZfcmVmX2NudChhZGFwdGVyKTsKKworCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKworCXJldHZhbCA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAKIAlpZiAobmV0eGVuX25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7CiAJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKQEAgLTEyMzksMTAgKzE0MTAsMjcgQEAKIAl9CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CiAKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyB2b2lkIG5ldHhlbl9uaWNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKF9fbmV0eGVuX25pY19zaHV0ZG93bihwZGV2KSkKKwkJcmV0dXJuOworfQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludAorbmV0eGVuX25pY19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IF9fbmV0eGVuX25pY19zaHV0ZG93bihwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQKIG5ldHhlbl9uaWNfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMTI2MCw3ICsxNDQ4LDcgQEAKIAogCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OwogCi0JZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIsIDApOworCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBmaXJtd2FyZVxuIik7CiAJCXJldHVybiBlcnI7CkBAIC0xMjY5LDE2ICsxNDU3LDI0IEBACiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewogCQllcnIgPSBuZXR4ZW5fbmljX2F0dGFjaChhZGFwdGVyKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlnb3RvIGVycl9vdXQ7CiAKIAkJZXJyID0gbmV0eGVuX25pY191cChhZGFwdGVyLCBuZXRkZXYpOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gZXJyX291dF9kZXRhY2g7CiAKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCisJCW5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihuZXRkZXYsIE5FVERFVl9VUCk7CiAJfQogCi0JcmV0dXJuIDA7CisJbmV0eGVuX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgbmV0eGVuX2Z3X3BvbGxfd29yaywgRldfUE9MTF9ERUxBWSk7CisKK2Vycl9vdXRfZGV0YWNoOgorCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworZXJyX291dDoKKwlueF9kZWNyX2Rldl9yZWZfY250KGFkYXB0ZXIpOworCXJldHVybiBlcnI7CiB9CiAjZW5kaWYKIApAQCAtMTI5MCwxMSArMTQ4Niw5IEBACiAJaWYgKGFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpIHsKLQkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBuZXR4ZW5fbmljX2F0dGFjaChhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gbmV0eGVuX25pY191cChhZGFwdGVyLCBuZXRkZXYpOwogCWlmIChlcnIpCkBAIC0xMzIwLDMwICsxNTE0LDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIG5ldHhlbl90c29fY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJICAgICAgc3RydWN0IGNtZF9kZXNjX3R5cGUwICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQKK25ldHhlbl90c29fY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJc3RydWN0IG54X2hvc3RfdHhfcmluZyAqdHhfcmluZywKKwkJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpmaXJzdF9kZXNjLAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWJvb2wgdHNvID0gZmFsc2U7CiAJdTggb3Bjb2RlID0gVFhfRVRIRVJfUEtUOwogCV9fYmUxNiBwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7Ci0JdTE2IGZsYWdzID0gMDsKKwl1MTYgZmxhZ3MgPSAwLCB2aWQgPSAwOworCXUzMiBwcm9kdWNlcjsKKwlpbnQgY29waWVkLCBvZmZzZXQsIGNvcHlfbGVuLCBoZHJfbGVuID0gMCwgdHNvID0gMCwgdmxhbl9vb2IgPSAwOworCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjOworCXN0cnVjdCB2bGFuX2V0aGhkciAqdmg7CiAKIAlpZiAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKSB7Ci0JCXN0cnVjdCB2bGFuX2V0aGhkciAqdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOworCisJCXZoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYi0+ZGF0YTsKIAkJcHJvdG9jb2wgPSB2aC0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKIAkJZmxhZ3MgPSBGTEFHU19WTEFOX1RBR0dFRDsKKworCX0gZWxzZSBpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisKKwkJZmxhZ3MgPSBGTEFHU19WTEFOX09PQjsKKwkJdmlkID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCW5ldHhlbl9zZXRfdHhfdmxhbl90Y2koZmlyc3RfZGVzYywgdmlkKTsKKwkJdmxhbl9vb2IgPSAxOwogCX0KIAogCWlmICgobmV0ZGV2LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICYmCiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID4gMCkgewogCi0JCWRlc2MtPm1zcyA9IGNwdV90b19sZTE2KHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOwotCQlkZXNjLT50b3RhbF9oZHJfbGVuZ3RoID0KLQkJCXNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYik7CisJCWhkcl9sZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOworCisJCWZpcnN0X2Rlc2MtPm1zcyA9IGNwdV90b19sZTE2KHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpOworCQlmaXJzdF9kZXNjLT50b3RhbF9oZHJfbGVuZ3RoID0gaGRyX2xlbjsKKwkJaWYgKHZsYW5fb29iKSB7CisJCQlmaXJzdF9kZXNjLT50b3RhbF9oZHJfbGVuZ3RoICs9IFZMQU5fSExFTjsKKwkJCWZpcnN0X2Rlc2MtPnRjcF9oZHJfb2Zmc2V0ID0gVkxBTl9ITEVOOworCQkJZmlyc3RfZGVzYy0+aXBfaGRyX29mZnNldCA9IFZMQU5fSExFTjsKKwkJCS8qIE9ubHkgaW4gY2FzZSBvZiBUU08gb24gdmxhbiBkZXZpY2UgKi8KKwkJCWZsYWdzIHw9IEZMQUdTX1ZMQU5fVEFHR0VEOworCQl9CiAKIAkJb3Bjb2RlID0gKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQVjYpKSA/CiAJCQkJVFhfVENQX0xTTzYgOiBUWF9UQ1BfTFNPOwotCQl0c28gPSB0cnVlOworCQl0c28gPSAxOwogCiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCXU4IGw0cHJvdG87CkBAIC0xMzY0LDU1ICsxNTgwLDEzMyBAQAogCQkJCW9wY29kZSA9IFRYX1VEUFY2X1BLVDsKIAkJfQogCX0KLQlkZXNjLT50Y3BfaGRyX29mZnNldCA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7Ci0JZGVzYy0+aXBfaGRyX29mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOwotCW5ldHhlbl9zZXRfdHhfZmxhZ3Nfb3Bjb2RlKGRlc2MsIGZsYWdzLCBvcGNvZGUpOwotCXJldHVybiB0c287CisKKwlmaXJzdF9kZXNjLT50Y3BfaGRyX29mZnNldCArPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCWZpcnN0X2Rlc2MtPmlwX2hkcl9vZmZzZXQgKz0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CisJbmV0eGVuX3NldF90eF9mbGFnc19vcGNvZGUoZmlyc3RfZGVzYywgZmxhZ3MsIG9wY29kZSk7CisKKwlpZiAoIXRzbykKKwkJcmV0dXJuOworCisJLyogRm9yIExTTywgd2UgbmVlZCB0byBjb3B5IHRoZSBNQUMvSVAvVENQIGhlYWRlcnMgaW50bworCSAqIHRoZSBkZXNjcmlwdG9yIHJpbmcKKwkgKi8KKwlwcm9kdWNlciA9IHR4X3JpbmctPnByb2R1Y2VyOworCWNvcGllZCA9IDA7CisJb2Zmc2V0ID0gMjsKKworCWlmICh2bGFuX29vYikgeworCQkvKiBDcmVhdGUgYSBUU08gdmxhbiBoZWFkZXIgdGVtcGxhdGUgZm9yIGZpcm13YXJlICovCisKKwkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCXR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXS5za2IgPSBOVUxMOworCisJCWNvcHlfbGVuID0gbWluKChpbnQpc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSBvZmZzZXQsCisJCQkJaGRyX2xlbiArIFZMQU5fSExFTik7CisKKwkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopKChjaGFyICopaHdkZXNjICsgMik7CisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCB2aCwgMTIpOworCQl2aC0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOworCQl2aC0+aF92bGFuX1RDSSA9IGh0b25zKHZpZCk7CisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgMTIsCisJCQkJKGNoYXIgKil2aCArIDE2LCBjb3B5X2xlbiAtIDE2KTsKKworCQljb3BpZWQgPSBjb3B5X2xlbiAtIFZMQU5fSExFTjsKKwkJb2Zmc2V0ID0gMDsKKworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJfQorCisJd2hpbGUgKGNvcGllZCA8IGhkcl9sZW4pIHsKKworCQljb3B5X2xlbiA9IG1pbigoaW50KXNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApIC0gb2Zmc2V0LAorCQkJCShoZHJfbGVuIC0gY29waWVkKSk7CisKKwkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCXR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXS5za2IgPSBOVUxMOworCisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgY29waWVkLAorCQkJCSAoY2hhciAqKWh3ZGVzYyArIG9mZnNldCwgY29weV9sZW4pOworCisJCWNvcGllZCArPSBjb3B5X2xlbjsKKwkJb2Zmc2V0ID0gMDsKKworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJfQorCisJdHhfcmluZy0+cHJvZHVjZXIgPSBwcm9kdWNlcjsKKwliYXJyaWVyKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1uZXR4ZW5fY2xlYW5fdHhfZG1hX21hcHBpbmcoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqcGJ1ZiwgaW50IGxhc3QpCitzdGF0aWMgaW50CituZXR4ZW5fbWFwX3R4X3NrYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpwYnVmKQogewotCWludCBrOwotCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKmJ1ZmZyYWc7CisJc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqbmY7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKKwlpbnQgaSwgbnJfZnJhZ3M7CisJZG1hX2FkZHJfdCBtYXA7CiAKLQlidWZmcmFnID0gJnBidWYtPmZyYWdfYXJyYXlbMF07Ci0JcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmcmFnLT5kbWEsCi0JCQlidWZmcmFnLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwluZiA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOwogCi0JZm9yIChrID0gMTsgayA8IGxhc3Q7IGsrKykgewotCQlidWZmcmFnID0gJnBidWYtPmZyYWdfYXJyYXlba107Ci0JCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZyYWctPmRtYSwKLQkJCWJ1ZmZyYWctPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJbWFwID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAorCQkJc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBtYXApKQorCQlnb3RvIG91dF9lcnI7CisKKwluZi0+ZG1hID0gbWFwOworCW5mLT5sZW5ndGggPSBza2JfaGVhZGxlbihza2IpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyBpKyspIHsKKwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQluZiA9ICZwYnVmLT5mcmFnX2FycmF5W2krMV07CisKKwkJbWFwID0gcGNpX21hcF9wYWdlKHBkZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCWZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIG1hcCkpCisJCQlnb3RvIHVud2luZDsKKworCQluZi0+ZG1hID0gbWFwOworCQluZi0+bGVuZ3RoID0gZnJhZy0+c2l6ZTsKIAl9CisKKwlyZXR1cm4gMDsKKwordW53aW5kOgorCXdoaWxlICgtLWkgPj0gMCkgeworCQluZiA9ICZwYnVmLT5mcmFnX2FycmF5W2krMV07CisJCXBjaV91bm1hcF9wYWdlKHBkZXYsIG5mLT5kbWEsIG5mLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCX0KKworCW5mID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CisJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBuZi0+ZG1hLCBza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworb3V0X2VycjoKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBuZXR4ZW5fY2xlYXJfY21kZGVzYyh1NjQgKmRlc2MpCiB7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJZGVzY1tpXSA9IDBVTEw7CisJZGVzY1swXSA9IDBVTEw7CisJZGVzY1syXSA9IDBVTEw7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogbmV0eGVuX25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgbnhfaG9zdF90eF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKLQl1bnNpZ25lZCBpbnQgZmlyc3Rfc2VnX2xlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKnBidWY7CiAJc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqYnVmZnJhZzsKLQlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYzsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JZG1hX2FkZHJfdCB0ZW1wX2RtYTsKKwlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYywgKmZpcnN0X2Rlc2M7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IGksIGs7CiAKIAl1MzIgcHJvZHVjZXI7CiAJaW50IGZyYWdfY291bnQsIG5vX29mX2Rlc2M7CiAJdTMyIG51bV90eGQgPSB0eF9yaW5nLT5udW1fZGVzYzsKLQlib29sIGlzX3RzbyA9IGZhbHNlOwogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOwogCkBAIC0xNDI1LDEyMSArMTcxOSw2MCBAQAogCX0KIAogCXByb2R1Y2VyID0gdHhfcmluZy0+cHJvZHVjZXI7Ci0KLQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQluZXR4ZW5fY2xlYXJfY21kZGVzYygodTY0ICopaHdkZXNjKTsKIAlwYnVmID0gJnR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKIAotCWlzX3RzbyA9IG5ldHhlbl90c29fY2hlY2sobmV0ZGV2LCBod2Rlc2MsIHNrYik7CisJcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpZiAobmV0eGVuX21hcF90eF9za2IocGRldiwgc2tiLCBwYnVmKSkKKwkJZ290byBkcm9wX3BhY2tldDsKIAogCXBidWYtPnNrYiA9IHNrYjsKIAlwYnVmLT5mcmFnX2NvdW50ID0gZnJhZ19jb3VudDsKLQlidWZmcmFnID0gJnBidWYtPmZyYWdfYXJyYXlbMF07Ci0JdGVtcF9kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIGZpcnN0X3NlZ19sZW4sCi0JCQkJICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCB0ZW1wX2RtYSkpCi0JCWdvdG8gZHJvcF9wYWNrZXQ7CiAKLQlidWZmcmFnLT5kbWEgPSB0ZW1wX2RtYTsKLQlidWZmcmFnLT5sZW5ndGggPSBmaXJzdF9zZWdfbGVuOwotCW5ldHhlbl9zZXRfdHhfZnJhZ3NfbGVuKGh3ZGVzYywgZnJhZ19jb3VudCwgc2tiLT5sZW4pOwotCW5ldHhlbl9zZXRfdHhfcG9ydChod2Rlc2MsIGFkYXB0ZXItPnBvcnRudW0pOworCWZpcnN0X2Rlc2MgPSBod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKKwluZXR4ZW5fY2xlYXJfY21kZGVzYygodTY0ICopaHdkZXNjKTsKIAotCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFswXSA9IGNwdV90b19sZTE2KGZpcnN0X3NlZ19sZW4pOwotCWh3ZGVzYy0+YWRkcl9idWZmZXIxID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKKwluZXR4ZW5fc2V0X3R4X2ZyYWdzX2xlbihmaXJzdF9kZXNjLCBmcmFnX2NvdW50LCBza2ItPmxlbik7CisJbmV0eGVuX3NldF90eF9wb3J0KGZpcnN0X2Rlc2MsIGFkYXB0ZXItPnBvcnRudW0pOwogCi0JZm9yIChpID0gMSwgayA9IDE7IGkgPCBmcmFnX2NvdW50OyBpKyssIGsrKykgewotCQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwotCQlpbnQgbGVuLCB0ZW1wX2xlbjsKLQkJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJZm9yIChpID0gMDsgaSA8IGZyYWdfY291bnQ7IGkrKykgewogCi0JCS8qIG1vdmUgdG8gbmV4dCBkZXNjLiBpZiB0aGVyZSBpcyBhIG5lZWQgKi8KLQkJaWYgKChpICYgMHgzKSA9PSAwKSB7Ci0JCQlrID0gMDsKKwkJayA9IGkgJSA0OworCisJCWlmICgoayA9PSAwKSAmJiAoaSA+IDApKSB7CisJCQkvKiBtb3ZlIHRvIG5leHQgZGVzYy4qLwogCQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CiAJCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKIAkJCW5ldHhlbl9jbGVhcl9jbWRkZXNjKCh1NjQgKilod2Rlc2MpOwotCQkJcGJ1ZiA9ICZ0eF9yaW5nLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07Ci0JCQlwYnVmLT5za2IgPSBOVUxMOwotCQl9Ci0JCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV07Ci0JCWxlbiA9IGZyYWctPnNpemU7Ci0JCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OwotCi0JCXRlbXBfbGVuID0gbGVuOwotCQl0ZW1wX2RtYSA9IHBjaV9tYXBfcGFnZShwZGV2LCBmcmFnLT5wYWdlLCBvZmZzZXQsCi0JCQkJCWxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgdGVtcF9kbWEpKSB7Ci0JCQluZXR4ZW5fY2xlYW5fdHhfZG1hX21hcHBpbmcocGRldiwgcGJ1ZiwgaSk7Ci0JCQlnb3RvIGRyb3BfcGFja2V0OworCQkJdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdLnNrYiA9IE5VTEw7CiAJCX0KIAotCQlidWZmcmFnKys7Ci0JCWJ1ZmZyYWctPmRtYSA9IHRlbXBfZG1hOwotCQlidWZmcmFnLT5sZW5ndGggPSB0ZW1wX2xlbjsKKwkJYnVmZnJhZyA9ICZwYnVmLT5mcmFnX2FycmF5W2ldOwogCi0JCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFtrXSA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKKwkJaHdkZXNjLT5idWZmZXJfbGVuZ3RoW2tdID0gY3B1X3RvX2xlMTYoYnVmZnJhZy0+bGVuZ3RoKTsKIAkJc3dpdGNoIChrKSB7CiAJCWNhc2UgMDoKLQkJCWh3ZGVzYy0+YWRkcl9idWZmZXIxID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOworCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjEgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMToKLQkJCWh3ZGVzYy0+YWRkcl9idWZmZXIyID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOworCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjIgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCWh3ZGVzYy0+YWRkcl9idWZmZXIzID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOworCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjMgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCWh3ZGVzYy0+YWRkcl9idWZmZXI0ID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOworCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjQgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOwogCQkJYnJlYWs7CiAJCX0KLQkJZnJhZysrOwotCX0KLQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBudW1fdHhkKTsKLQotCS8qIEZvciBMU08sIHdlIG5lZWQgdG8gY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIGludG8KLQkgKiB0aGUgZGVzY3JpcHRvciByaW5nCi0JICovCi0JaWYgKGlzX3RzbykgewotCQlpbnQgaGRyX2xlbiwgZmlyc3RfaGRyX2xlbiwgbW9yZV9oZHI7Ci0JCWhkcl9sZW4gPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsgdGNwX2hkcmxlbihza2IpOwotCQlpZiAoaGRyX2xlbiA+IChzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAtIDIpKSB7Ci0JCQlmaXJzdF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSAyOwotCQkJbW9yZV9oZHIgPSAxOwotCQl9IGVsc2UgewotCQkJZmlyc3RfaGRyX2xlbiA9IGhkcl9sZW47Ci0JCQltb3JlX2hkciA9IDA7Ci0JCX0KLQkJLyogY29weSB0aGUgTUFDL0lQL1RDUCBoZWFkZXJzIHRvIHRoZSBjbWQgZGVzY3JpcHRvciBsaXN0ICovCi0JCWh3ZGVzYyA9ICZ0eF9yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOwotCQlwYnVmID0gJnR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKLQkJcGJ1Zi0+c2tiID0gTlVMTDsKLQotCQkvKiBjb3B5IHRoZSBmaXJzdCA2NCBieXRlcyAqLwotCQltZW1jcHkoKCh2b2lkICopaHdkZXNjKSArIDIsCi0JCSAgICAgICAodm9pZCAqKShza2ItPmRhdGEpLCBmaXJzdF9oZHJfbGVuKTsKLQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7Ci0KLQkJaWYgKG1vcmVfaGRyKSB7Ci0JCQlod2Rlc2MgPSAmdHhfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQkJCXBidWYgPSAmdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdOwotCQkJcGJ1Zi0+c2tiID0gTlVMTDsKLQkJCS8qIGNvcHkgdGhlIG5leHQgNjQgYnl0ZXMgLSBzaG91bGQgYmUgZW5vdWdoIGV4Y2VwdAotCQkJICogZm9yIHBhdGhvbG9naWNhbCBjYXNlCi0JCQkgKi8KLQkJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgZmlyc3RfaGRyX2xlbiwKLQkJCQkJCQkgaHdkZXNjLAotCQkJCQkJCSAoaGRyX2xlbiAtCi0JCQkJCQkJICBmaXJzdF9oZHJfbGVuKSk7Ci0JCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBudW1fdHhkKTsKLQkJfQogCX0KIAotCXR4X3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7Ci0JYWRhcHRlci0+c3RhdHMudHhieXRlcyArPSBza2ItPmxlbjsKKwl0eF9yaW5nLT5wcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBudW1fdHhkKTsKKworCW5ldHhlbl90c29fY2hlY2sobmV0ZGV2LCB0eF9yaW5nLCBmaXJzdF9kZXNjLCBza2IpOwogCiAJbmV0eGVuX25pY191cGRhdGVfY21kX3Byb2R1Y2VyKGFkYXB0ZXIsIHR4X3JpbmcpOwogCisJYWRhcHRlci0+c3RhdHMudHhieXRlcyArPSBza2ItPmxlbjsKIAlhZGFwdGVyLT5zdGF0cy54bWl0Y2FsbGVkKys7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtMTYzNSw1OCArMTg2OCwxNCBAQAogCW5ldHhlbl9hZHZlcnRfbGlua19jaGFuZ2UoYWRhcHRlciwgbGlua3VwKTsKIH0KIAotc3RhdGljIHZvaWQgbmV0eGVuX25pY190aGVybWFsX3NodXRkb3duKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCi0JbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwotCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOwotCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBuZXR4ZW5fd2F0Y2hkb2codW5zaWduZWQgbG9uZyB2KQotewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKil2OwotCi0JaWYgKG5ldHhlbl9uaWNfY2hlY2tfdGVtcChhZGFwdGVyKSkKLQkJZ290byBkb19zY2hlZDsKLQotCWlmICghYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzKSB7Ci0JCW5ldHhlbl9uaWNfaGFuZGxlX3BoeV9pbnRyKGFkYXB0ZXIpOwotCi0JCWlmIChhZGFwdGVyLT5saW5rX2NoYW5nZWQpCi0JCQlnb3RvIGRvX3NjaGVkOwotCX0KLQotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAyICogSFopOwotCi0JcmV0dXJuOwotCi1kb19zY2hlZDoKLQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKLX0KLQotdm9pZCBuZXR4ZW5fd2F0Y2hkb2dfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgd2F0Y2hkb2dfdGFzayk7Ci0KLQlpZiAoYWRhcHRlci0+dGVtcCA9PSBOWF9URU1QX1BBTklDKSB7Ci0JCW5ldHhlbl9uaWNfdGhlcm1hbF9zaHV0ZG93bihhZGFwdGVyKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChhZGFwdGVyLT5saW5rX2NoYW5nZWQpCi0JCW5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhhZGFwdGVyKTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAyICogSFopOwotfQotCiBzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAodGVzdF9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAidHJhbnNtaXQgdGltZW91dCwgcmVzZXR0aW5nLlxuIik7CiAJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKIH0KIApAQCAtMTY5OCwxNSArMTg4NywzNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzICVzOiB0cmFuc21pdCB0aW1lb3V0LCByZXNldHRpbmcuXG4iLAotCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CiAKLQluZXR4ZW5fbmFwaV9kaXNhYmxlKGFkYXB0ZXIpOworCWlmICgrK2FkYXB0ZXItPnR4X3RpbWVvX2NudCA+PSBOWF9NQVhfVFhfVElNRU9VVFMpCisJCWdvdG8gcmVxdWVzdF9yZXNldDsKIAotCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7CisJCS8qIHRyeSB0byBzY3J1YiBpbnRlcnJ1cHQgKi8KKwkJbmV0eGVuX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKIAotCW5ldHhlbl9uYXBpX2VuYWJsZShhZGFwdGVyKTsKLQluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJCW5ldHhlbl9uYXBpX2VuYWJsZShhZGFwdGVyKTsKKworCQluZXRpZl93YWtlX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisKKwkJZ290byBkb25lOworCisJfSBlbHNlIHsKKwkJaWYgKCFuZXR4ZW5fbmljX3Jlc2V0X2NvbnRleHQoYWRhcHRlcikpIHsKKwkJCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogY29udGV4dCByZXNldCBmYWlsZWQsIGZhbGwgdGhyb3VnaCBmb3IgZncgcmVzZXQgKi8KKwl9CisKK3JlcXVlc3RfcmVzZXQ6CisJYWRhcHRlci0+bmVlZF9md19yZXNldCA9IDE7Citkb25lOgorCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIH0KIAogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHhlbl9uaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0xNzE2LDcgKzE5MjcsNyBAQAogCiAJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CiAKLQlzdGF0cy0+cnhfcGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLm5vX3JjdjsKKwlzdGF0cy0+cnhfcGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLnJ4X3BrdHMgKyBhZGFwdGVyLT5zdGF0cy5scm9fcGt0czsKIAlzdGF0cy0+dHhfcGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLnhtaXRmaW5pc2hlZDsKIAlzdGF0cy0+cnhfYnl0ZXMgPSBhZGFwdGVyLT5zdGF0cy5yeGJ5dGVzOwogCXN0YXRzLT50eF9ieXRlcyA9IGFkYXB0ZXItPnN0YXRzLnR4Ynl0ZXM7CkBAIC0xNzMyLDQxICsxOTQzLDM3IEBACiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CiAJdTMyIHN0YXR1cyA9IDA7CiAKLQlzdGF0dXMgPSBhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUoYWRhcHRlciwgSVNSX0lOVF9WRUNUT1IpOworCXN0YXR1cyA9IHJlYWRsKGFkYXB0ZXItPmlzcl9pbnRfdmVjKTsKIAotCWlmICghKHN0YXR1cyAmIGFkYXB0ZXItPmxlZ2FjeV9pbnRyLmludF92ZWNfYml0KSkKKwlpZiAoIShzdGF0dXMgJiBhZGFwdGVyLT5pbnRfdmVjX2JpdCkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmIChhZGFwdGVyLT5haHcucmV2aXNpb25faWQgPj0gTlhfUDNfQjEpIHsKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgewogCQkvKiBjaGVjayBpbnRlcnJ1cHQgc3RhdGUgbWFjaGluZSwgdG8gYmUgc3VyZSAqLwotCQlzdGF0dXMgPSBhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUoYWRhcHRlciwKLQkJCQlJU1JfSU5UX1NUQVRFX1JFRyk7CisJCXN0YXR1cyA9IHJlYWRsKGFkYXB0ZXItPmNyYl9pbnRfc3RhdGVfcmVnKTsKIAkJaWYgKCFJU1JfTEVHQUNZX0lOVF9UUklHR0VSRUQoc3RhdHVzKSkKIAkJCXJldHVybiBJUlFfTk9ORTsKIAogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgb3VyX2ludCA9IDA7CiAKLQkJb3VyX2ludCA9IE5YUkQzMihhZGFwdGVyLCBDUkJfSU5UX1ZFQ1RPUik7CisJCW91cl9pbnQgPSByZWFkbChhZGFwdGVyLT5jcmJfaW50X3N0YXRlX3JlZyk7CiAKIAkJLyogbm90IG91ciBpbnRlcnJ1cHQgKi8KIAkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoKDcgKyBhZGFwdGVyLT5wb3J0bnVtKSwgJm91cl9pbnQpKQogCQkJcmV0dXJuIElSUV9OT05FOwogCiAJCS8qIGNsYWltIGludGVycnVwdCAqLwotCQlOWFdSMzIoYWRhcHRlciwgQ1JCX0lOVF9WRUNUT1IsIChvdXJfaW50ICYgMHhmZmZmZmZmZikpOworCQl3cml0ZWwoKG91cl9pbnQgJiAweGZmZmZmZmZmKSwgYWRhcHRlci0+Y3JiX2ludF9zdGF0ZV9yZWcpOworCisJCS8qIGNsZWFyIGludGVycnVwdCAqLworCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKIAl9CiAKLQkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KLQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKLQotCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKLQkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnLAotCQkJMHhmZmZmZmZmZik7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIGFkYXB0ZXItPnRndF9zdGF0dXNfcmVnKTsKIAkvKiByZWFkIHR3aWNlIHRvIGVuc3VyZSB3cml0ZSBpcyBmbHVzaGVkICovCi0JYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUoYWRhcHRlciwgSVNSX0lOVF9WRUNUT1IpOworCXJlYWRsKGFkYXB0ZXItPmlzcl9pbnRfdmVjKTsKKwlyZWFkbChhZGFwdGVyLT5pc3JfaW50X3ZlYyk7CiAKIAluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CiAKQEAgLTE3NzksOCArMTk4Niw3IEBACiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KLQlhZGFwdGVyLT5wY2lfd3JpdGVfaW1tZWRpYXRlKGFkYXB0ZXIsCi0JCQlhZGFwdGVyLT5tc2lfdGd0X3N0YXR1cywgMHhmZmZmZmZmZik7CisJd3JpdGVsKDB4ZmZmZmZmZmYsIGFkYXB0ZXItPnRndF9zdGF0dXNfcmVnKTsKIAogCW5hcGlfc2NoZWR1bGUoJnNkc19yaW5nLT5uYXBpKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xODI3LDYgKzIwMzMsNDczIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludAorbnhfaW5jcl9kZXZfcmVmX2NudChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNvdW50OworCWlmIChuZXR4ZW5fYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiAtRUlPOworCisJY291bnQgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9SRUZfQ09VTlQpOworCisJTlhXUjMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfUkVGX0NPVU5ULCArK2NvdW50KTsKKworCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludAorbnhfZGVjcl9kZXZfcmVmX2NudChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNvdW50OworCWlmIChuZXR4ZW5fYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiAtRUlPOworCisJY291bnQgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9SRUZfQ09VTlQpOworCVdBUk5fT04oY291bnQgPT0gMCk7CisKKwlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9SRUZfQ09VTlQsIC0tY291bnQpOworCisJaWYgKGNvdW50ID09IDApCisJCU5YV1IzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFLCBOWF9ERVZfQ09MRCk7CisKKwluZXR4ZW5fYXBpX3VubG9jayhhZGFwdGVyKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkCitueF9kZXZfcmVxdWVzdF9yZXNldChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHN0YXRlOworCisJaWYgKG5ldHhlbl9hcGlfbG9jayhhZGFwdGVyKSkKKwkJcmV0dXJuOworCisJc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CisKKwlpZiAoc3RhdGUgIT0gTlhfREVWX0lOSVRBTElaSU5HKQorCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX05FRURfUkVTRVQpOworCisJbmV0eGVuX2FwaV91bmxvY2soYWRhcHRlcik7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9jYW5fc3RhcnRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBjb3VudDsKKwlpbnQgY2FuX3N0YXJ0ID0gMDsKKworCWlmIChuZXR4ZW5fYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiAwOworCisJY291bnQgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9SRUZfQ09VTlQpOworCisJaWYgKChjb3VudCA8IDApIHx8IChjb3VudCA+PSBOWF9NQVhfUENJX0ZVTkMpKQorCQljb3VudCA9IDA7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQljYW5fc3RhcnQgPSAxOworCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX0lOSVRBTElaSU5HKTsKKwl9CisKKwlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9SRUZfQ09VTlQsICsrY291bnQpOworCisJbmV0eGVuX2FwaV91bmxvY2soYWRhcHRlcik7CisKKwlyZXR1cm4gY2FuX3N0YXJ0OworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX3NjaGVkdWxlX3dvcmsoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQl3b3JrX2Z1bmNfdCBmdW5jLCBpbnQgZGVsYXkpCit7CisJSU5JVF9ERUxBWUVEX1dPUksoJmFkYXB0ZXItPmZ3X3dvcmssIGZ1bmMpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWRhcHRlci0+Zndfd29yaywgZGVsYXkpOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX2NhbmNlbF9md193b3JrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEwKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWRhcHRlci0+Zndfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fYXR0YWNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgZndfd29yay53b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnIgPSAwOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQllcnIgPSBuZXR4ZW5fbmljX2F0dGFjaChhZGFwdGVyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZG9uZTsKKworCQllcnIgPSBuZXR4ZW5fbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJCWlmIChlcnIpIHsKKwkJCW5ldHhlbl9uaWNfZGV0YWNoKGFkYXB0ZXIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJbmV0eGVuX2NvbmZpZ19pbmRldl9hZGRyKG5ldGRldiwgTkVUREVWX1VQKTsKKwl9CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisKK2RvbmU6CisJYWRhcHRlci0+ZndfZmFpbF9jbnQgPSAwOworCWNsZWFyX2JpdChfX05YX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwluZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLCBuZXR4ZW5fZndfcG9sbF93b3JrLCBGV19QT0xMX0RFTEFZKTsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9md2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJc3RydWN0IG5ldHhlbl9hZGFwdGVyLCBmd193b3JrLndvcmspOworCWludCBkZXZfc3RhdGU7CisKKwlkZXZfc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CisKKwlzd2l0Y2ggKGRldl9zdGF0ZSkgeworCWNhc2UgTlhfREVWX0NPTEQ6CisJY2FzZSBOWF9ERVZfUkVBRFk6CisJCWlmICghbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpKSB7CisJCQluZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLCBuZXR4ZW5fYXR0YWNoX3dvcmssIDApOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCisJY2FzZSBOWF9ERVZfSU5JVEFMSVpJTkc6CisJCWlmICgrK2FkYXB0ZXItPmZ3X3dhaXRfY250IDwgRldfUE9MTF9USFJFU0gpIHsKKwkJCW5ldHhlbl9zY2hlZHVsZV93b3JrKGFkYXB0ZXIsCisJCQkJCW5ldHhlbl9md2luaXRfd29yaywgMiAqIEZXX1BPTExfREVMQVkpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCisJY2FzZSBOWF9ERVZfRkFJTEVEOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW54X2luY3JfZGV2X3JlZl9jbnQoYWRhcHRlcik7CisJY2xlYXJfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX2RldGFjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIsIGZ3X3dvcmsud29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgcmVmX2NudCwgZGVsYXk7CisJdTMyIHN0YXR1czsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJbmV0eGVuX25pY19kZXRhY2goYWRhcHRlcik7CisKKwlzdGF0dXMgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX1BFR19IQUxUX1NUQVRVUzEpOworCisJcmVmX2NudCA9IG54X2RlY3JfZGV2X3JlZl9jbnQoYWRhcHRlcik7CisKKwlpZiAoc3RhdHVzICYgTlhfUkNPREVfRkFUQUxfRVJST1IpCisJCXJldHVybjsKKworCWlmIChhZGFwdGVyLT50ZW1wID09IE5YX1RFTVBfUEFOSUMpCisJCXJldHVybjsKKworCWRlbGF5ID0gKHJlZl9jbnQgPT0gMCkgPyAwIDogKDIgKiBGV19QT0xMX0RFTEFZKTsKKworCWFkYXB0ZXItPmZ3X3dhaXRfY250ID0gMDsKKwluZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLCBuZXR4ZW5fZndpbml0X3dvcmssIGRlbGF5KTsKK30KKworc3RhdGljIGludAorbmV0eGVuX2NoZWNrX2hlYWx0aChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHN0YXRlLCBoZWFydGJpdDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJaWYgKG5ldHhlbl9uaWNfY2hlY2tfdGVtcChhZGFwdGVyKSkKKwkJZ290byBkZXRhY2g7CisKKwlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkgeworCQlueF9kZXZfcmVxdWVzdF9yZXNldChhZGFwdGVyKTsKKwkJZ290byBkZXRhY2g7CisJfQorCisJc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CisJaWYgKHN0YXRlID09IE5YX0RFVl9ORUVEX1JFU0VUKQorCQlnb3RvIGRldGFjaDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gMDsKKworCWhlYXJ0Yml0ID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9QRUdfQUxJVkVfQ09VTlRFUik7CisJaWYgKGhlYXJ0Yml0ICE9IGFkYXB0ZXItPmhlYXJ0Yml0KSB7CisJCWFkYXB0ZXItPmhlYXJ0Yml0ID0gaGVhcnRiaXQ7CisJCWFkYXB0ZXItPmZ3X2ZhaWxfY250ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCsrYWRhcHRlci0+ZndfZmFpbF9jbnQgPCBGV19GQUlMX1RIUkVTSCkKKwkJcmV0dXJuIDA7CisKKwljbGVhcl9iaXQoX19OWF9GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKTsKKworCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgImZpcm13YXJlIGhhbmcgZGV0ZWN0ZWRcbiIpOworCitkZXRhY2g6CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQluZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLCBuZXR4ZW5fZGV0YWNoX3dvcmssIDApOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX2Z3X3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJc3RydWN0IG5ldHhlbl9hZGFwdGVyLCBmd193b3JrLndvcmspOworCisJaWYgKHRlc3RfYml0KF9fTlhfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlnb3RvIHJlc2NoZWR1bGU7CisKKwlpZiAodGVzdF9iaXQoX19OWF9ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJaWYgKCFhZGFwdGVyLT5oYXNfbGlua19ldmVudHMpIHsKKworCQkJbmV0eGVuX25pY19oYW5kbGVfcGh5X2ludHIoYWRhcHRlcik7CisKKwkJCWlmIChhZGFwdGVyLT5saW5rX2NoYW5nZWQpCisJCQkJbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKGFkYXB0ZXIpOworCQl9CisJfQorCisJaWYgKG5ldHhlbl9jaGVja19oZWFsdGgoYWRhcHRlcikpCisJCXJldHVybjsKKworcmVzY2hlZHVsZToKKwluZXR4ZW5fc2NoZWR1bGVfd29yayhhZGFwdGVyLCBuZXR4ZW5fZndfcG9sbF93b3JrLCBGV19QT0xMX0RFTEFZKTsKK30KKworc3RhdGljIHNzaXplX3QKK25ldHhlbl9zdG9yZV9icmlkZ2VkX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0KTsKKwl1bnNpZ25lZCBsb25nIG5ldzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfQkRHKSkKKwkJZ290byBlcnJfb3V0OworCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAyLCAmbmV3KSkKKwkJZ290byBlcnJfb3V0OworCisJaWYgKCFuZXR4ZW5fY29uZmlnX2JyaWRnZWRfbW9kZShhZGFwdGVyLCAhIW5ldykpCisJCXJldCA9IGxlbjsKKworZXJyX291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAorbmV0eGVuX3Nob3dfYnJpZGdlZF9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKKwlpbnQgYnJpZGdlZF9tb2RlID0gMDsKKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXQpOworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIE5YX0ZXX0NBUEFCSUxJVFlfQkRHKQorCQlicmlkZ2VkX21vZGUgPSAhIShhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfQlJJREdFX0VOQUJMRUQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJyaWRnZWRfbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9icmlkZ2VkX21vZGUgPSB7CisgICAgICAgLmF0dHIgPSB7Lm5hbWUgPSAiYnJpZGdlZF9tb2RlIiwgLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpfSwKKyAgICAgICAuc2hvdyA9IG5ldHhlbl9zaG93X2JyaWRnZWRfbW9kZSwKKyAgICAgICAuc3RvcmUgPSBuZXR4ZW5fc3RvcmVfYnJpZGdlZF9tb2RlLAorfTsKKworc3RhdGljIHZvaWQKK25ldHhlbl9jcmVhdGVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbmV0ZGV2LT5kZXY7CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9CREcpIHsKKwkJLyogYnJpZGdlZF9tb2RlIGNvbnRyb2wgKi8KKwkJaWYgKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9icmlkZ2VkX21vZGUpKSB7CisJCQlkZXZfd2FybigmbmV0ZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBjcmVhdGUgYnJpZGdlZF9tb2RlIHN5c2ZzIGVudHJ5XG4iKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9yZW1vdmVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbmV0ZGV2LT5kZXY7CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgTlhfRldfQ0FQQUJJTElUWV9CREcpCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9icmlkZ2VkX21vZGUpOworfQorCisjaWZkZWYgQ09ORklHX0lORVQKKworI2RlZmluZSBpc19uZXR4ZW5fbmV0ZGV2KGRldikgKGRldi0+bmV0ZGV2X29wcyA9PSAmbmV0eGVuX25ldGRldl9vcHMpCisKK3N0YXRpYyBpbnQKK25ldHhlbl9kZXN0aXBfc3VwcG9ydGVkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX2NvbmZpZ19pbmRldl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZXZlbnQpCit7CisJc3RydWN0IGluX2RldmljZSAqaW5kZXY7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghbmV0eGVuX2Rlc3RpcF9zdXBwb3J0ZWQoYWRhcHRlcikpCisJCXJldHVybjsKKworCWluZGV2ID0gaW5fZGV2X2dldChkZXYpOworCWlmICghaW5kZXYpCisJCXJldHVybjsKKworCWZvcl9pZmEoaW5kZXYpIHsKKwkJc3dpdGNoIChldmVudCkgeworCQljYXNlIE5FVERFVl9VUDoKKwkJCW5ldHhlbl9jb25maWdfaXBhZGRyKGFkYXB0ZXIsCisJCQkJCWlmYS0+aWZhX2FkZHJlc3MsIE5YX0lQX1VQKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVERFVl9ET1dOOgorCQkJbmV0eGVuX2NvbmZpZ19pcGFkZHIoYWRhcHRlciwKKwkJCQkJaWZhLT5pZmFfYWRkcmVzcywgTlhfSVBfRE9XTik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBlbmRmb3JfaWZhKGluZGV2KTsKKworCWluX2Rldl9wdXQoaW5kZXYpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBuZXR4ZW5fbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCQkgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopcHRyOworCityZWNoZWNrOgorCWlmIChkZXYgPT0gTlVMTCkKKwkJZ290byBkb25lOworCisJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikgeworCQlkZXYgPSB2bGFuX2Rldl9yZWFsX2RldihkZXYpOworCQlnb3RvIHJlY2hlY2s7CisJfQorCisJaWYgKCFpc19uZXR4ZW5fbmV0ZGV2KGRldikpCisJCWdvdG8gZG9uZTsKKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFhZGFwdGVyKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpCisJCWdvdG8gZG9uZTsKKworCW5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihkZXYsIGV2ZW50KTsKK2RvbmU6CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgaW50CituZXR4ZW5faW5ldGFkZHJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQl1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSAoc3RydWN0IGluX2lmYWRkciAqKXB0cjsKKworCWRldiA9IGlmYS0+aWZhX2RldiA/IGlmYS0+aWZhX2Rldi0+ZGV2IDogTlVMTDsKKworcmVjaGVjazoKKwlpZiAoZGV2ID09IE5VTEwgfHwgIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZ290byBkb25lOworCisJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikgeworCQlkZXYgPSB2bGFuX2Rldl9yZWFsX2RldihkZXYpOworCQlnb3RvIHJlY2hlY2s7CisJfQorCisJaWYgKCFpc19uZXR4ZW5fbmV0ZGV2KGRldikpCisJCWdvdG8gZG9uZTsKKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFhZGFwdGVyIHx8ICFuZXR4ZW5fZGVzdGlwX3N1cHBvcnRlZChhZGFwdGVyKSkKKwkJZ290byBkb25lOworCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBORVRERVZfVVA6CisJCW5ldHhlbl9jb25maWdfaXBhZGRyKGFkYXB0ZXIsIGlmYS0+aWZhX2FkZHJlc3MsIE5YX0lQX1VQKTsKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfRE9XTjoKKwkJbmV0eGVuX2NvbmZpZ19pcGFkZHIoYWRhcHRlciwgaWZhLT5pZmFfYWRkcmVzcywgTlhfSVBfRE9XTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworZG9uZToKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJbmV0eGVuX25ldGRldl9jYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG5ldHhlbl9uZXRkZXZfZXZlbnQsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldHhlbl9pbmV0YWRkcl9jYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG5ldHhlbl9pbmV0YWRkcl9ldmVudCwKK307CisjZWxzZQorc3RhdGljIHZvaWQKK25ldHhlbl9jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreyB9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5ldHhlbl9kcml2ZXIgPSB7CiAJLm5hbWUgPSBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9IG5ldHhlbl9wY2lfdGJsLApAQCAtMTgzNCwxNiArMjUwNywyMCBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChuZXR4ZW5fbmljX3JlbW92ZSksCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCi0JLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lCisJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lLAogI2VuZGlmCisJLnNodXRkb3duID0gbmV0eGVuX25pY19zaHV0ZG93bgogfTsKIAotLyogRHJpdmVyIFJlZ2lzdHJhdGlvbiBvbiBOZXRYZW4gY2FyZCAgICAqLwotCiBzdGF0aWMgaW50IF9faW5pdCBuZXR4ZW5faW5pdF9tb2R1bGUodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKIAorI2lmZGVmIENPTkZJR19JTkVUCisJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZuZXR4ZW5fbmV0ZGV2X2NiKTsKKwlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmbmV0eGVuX2luZXRhZGRyX2NiKTsKKyNlbmRpZgorCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm5ldHhlbl9kcml2ZXIpOwogfQogCkBAIC0xODUyLDYgKzI1MjksMTEgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZXR4ZW5fZXhpdF9tb2R1bGUodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5ldHhlbl9kcml2ZXIpOworCisjaWZkZWYgQ09ORklHX0lORVQKKwl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZuZXR4ZW5faW5ldGFkZHJfY2IpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZuZXR4ZW5fbmV0ZGV2X2NiKTsKKyNlbmRpZgogfQogCiBtb2R1bGVfZXhpdChuZXR4ZW5fZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbml1LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk0MWM3OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYworKysgL2Rldi9udWxsCkBAIC0xLDU1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4gSW5jLAotICogMTg5MjIgRm9yZ2UgRHJpdmUKLSAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQotICoKLSAqLwotCi0jaW5jbHVkZSAibmV0eGVuX25pYy5oIgotCi0jZGVmaW5lIE5FVFhFTl9HQl9NQUNfU09GVF9SRVNFVAkweDgwMDAwMDAwCi0jZGVmaW5lIE5FVFhFTl9HQl9NQUNfUkVTRVRfUFJPVF9CTEsgICAweDAwMEYwMDAwCi0jZGVmaW5lIE5FVFhFTl9HQl9NQUNfRU5BQkxFX1RYX1JYICAgICAweDAwMDAwMDA1Ci0jZGVmaW5lIE5FVFhFTl9HQl9NQUNfUEFVU0VEX0ZSTVMgICAgICAweDAwMDAwMDIwCi0KLXN0YXRpYyBsb25nIHBoeV9sb2NrX3RpbWVvdXQgPSAxMDAwMDAwMDA7Ci0KLXN0YXRpYyBpbnQgcGh5X2xvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCBpOwotCWludCBkb25lID0gMCwgdGltZW91dCA9IDA7Ci0KLQl3aGlsZSAoIWRvbmUpIHsKLQkJZG9uZSA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fUENJRV9SRUcoUENJRV9TRU0zX0xPQ0spKTsKLQkJaWYgKGRvbmUgPT0gMSkKLQkJCWJyZWFrOwotCQlpZiAodGltZW91dCA+PSBwaHlfbG9ja190aW1lb3V0KSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJdGltZW91dCsrOwotCQlpZiAoIWluX2F0b21pYygpKQotCQkJc2NoZWR1bGUoKTsKLQkJZWxzZSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKLQkJCQljcHVfcmVsYXgoKTsKLQkJfQotCX0KLQotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fUEhZX0xPQ0tfSUQsIFBIWV9MT0NLX0RSSVZFUik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGh5X3VubG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTNfVU5MT0NLKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkIC0gcmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIEdiRSBQSFkgdmlhCi0gKiBtaWkgbWFuYWdlbWVudCBpbnRlcmZhY2UuCi0gKgotICogTm90ZTogVGhlIE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZSBnb2VzIHRocm91Z2ggcG9ydCAwLgotICoJSW5kaXZpZHVhbCBwaHlzIGFyZSBhZGRyZXNzZWQgYXMgZm9sbG93czoKLSAqIEBwYXJhbSBwaHkgIFsxNTo4XSAgcGh5IGlkCi0gKiBAcGFyYW0gcmVnICBbNzowXSAgIHJlZ2lzdGVyIG51bWJlcgotICoKLSAqIEByZXR1cm5zICAwIG9uIHN1Y2Nlc3MKLSAqCSAgLTEgb24gZXJyb3IKLSAqCi0gKi8KLWludCBuZXR4ZW5fbml1X2diZV9waHlfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGxvbmcgcmVnLAotCQkJCV9fdTMyICogcmVhZHZhbCkKLXsKLQlsb25nIHRpbWVvdXQgPSAwOwotCWxvbmcgcmVzdWx0ID0gMDsKLQlsb25nIHJlc3RvcmUgPSAwOwotCWxvbmcgcGh5ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQlfX3UzMiBhZGRyZXNzOwotCV9fdTMyIGNvbW1hbmQ7Ci0JX191MzIgc3RhdHVzOwotCV9fdTMyIG1hY19jZmcwOwotCi0JaWYgKHBoeV9sb2NrKGFkYXB0ZXIpICE9IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogTUlJIG1nbXQgYWxsIGdvZXMgdGhyb3VnaCBwb3J0IDAgTUFDIGludGVyZmFjZSwKLQkgKiBzbyBpdCBjYW5ub3QgYmUgaW4gcmVzZXQKLQkgKi8KLQotCW1hY19jZmcwID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApKTsKLQlpZiAobmV0eGVuX2diX2dldF9zb2Z0X3Jlc2V0KG1hY19jZmcwKSkgewotCQlfX3UzMiB0ZW1wOwotCQl0ZW1wID0gMDsKLQkJbmV0eGVuX2diX3R4X3Jlc2V0X3BiKHRlbXApOwotCQluZXR4ZW5fZ2JfcnhfcmVzZXRfcGIodGVtcCk7Ci0JCW5ldHhlbl9nYl90eF9yZXNldF9tYWModGVtcCk7Ci0JCW5ldHhlbl9nYl9yeF9yZXNldF9tYWModGVtcCk7Ci0JCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksIHRlbXApKQotCQkJcmV0dXJuIC1FSU87Ci0JCXJlc3RvcmUgPSAxOwotCX0KLQotCWFkZHJlc3MgPSAwOwotCW5ldHhlbl9nYl9taWlfbWdtdF9yZWdfYWRkcihhZGRyZXNzLCByZWcpOwotCW5ldHhlbl9nYl9taWlfbWdtdF9waHlfYWRkcihhZGRyZXNzLCBwaHkpOwotCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSKDApLCBhZGRyZXNzKSkKLQkJcmV0dXJuIC1FSU87Ci0JY29tbWFuZCA9IDA7CQkvKiB0dXJuIG9mZiBhbnkgcHJpb3IgYWN0aXZpdHkgKi8KLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwgY29tbWFuZCkpCi0JCXJldHVybiAtRUlPOwotCS8qIHNlbmQgcmVhZCBjb21tYW5kICovCi0JbmV0eGVuX2diX21paV9tZ210X3NldF9yZWFkX2N5Y2xlKGNvbW1hbmQpOwotCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT01NQU5EKDApLCBjb21tYW5kKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlzdGF0dXMgPSAwOwotCWRvIHsKLQkJc3RhdHVzID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfSU5ESUNBVEUoMCkpOwotCQl0aW1lb3V0Kys7Ci0JfSB3aGlsZSAoKG5ldHhlbl9nZXRfZ2JfbWlpX21nbXRfYnVzeShzdGF0dXMpCi0JCSAgfHwgbmV0eGVuX2dldF9nYl9taWlfbWdtdF9ub3R2YWxpZChzdGF0dXMpKQotCQkgJiYgKHRpbWVvdXQrKyA8IE5FVFhFTl9OSVVfUEhZX1dBSVRNQVgpKTsKLQotCWlmICh0aW1lb3V0IDwgTkVUWEVOX05JVV9QSFlfV0FJVE1BWCkgewotCQkqcmVhZHZhbCA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX1NUQVRVUygwKSk7Ci0JCXJlc3VsdCA9IDA7Ci0JfSBlbHNlCi0JCXJlc3VsdCA9IC0xOwotCi0JaWYgKHJlc3RvcmUpCi0JCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksIG1hY19jZmcwKSkKLQkJCXJldHVybiAtRUlPOwotCXBoeV91bmxvY2soYWRhcHRlcik7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZSAtIHdyaXRlIGEgcmVnaXN0ZXIgdG8gdGhlIEdiRSBQSFkgdmlhCi0gKiBtaWkgbWFuYWdlbWVudCBpbnRlcmZhY2UuCi0gKgotICogTm90ZTogVGhlIE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZSBnb2VzIHRocm91Z2ggcG9ydCAwLgotICoJSW5kaXZpZHVhbCBwaHlzIGFyZSBhZGRyZXNzZWQgYXMgZm9sbG93czoKLSAqIEBwYXJhbSBwaHkgICAgICBbMTU6OF0gIHBoeSBpZAotICogQHBhcmFtIHJlZyAgICAgIFs3OjBdICAgcmVnaXN0ZXIgbnVtYmVyCi0gKgotICogQHJldHVybnMgIDAgb24gc3VjY2VzcwotICoJICAtMSBvbiBlcnJvcgotICoKLSAqLwotaW50IG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGxvbmcgcmVnLAotCQkJCV9fdTMyIHZhbCkKLXsKLQlsb25nIHRpbWVvdXQgPSAwOwotCWxvbmcgcmVzdWx0ID0gMDsKLQlsb25nIHJlc3RvcmUgPSAwOwotCWxvbmcgcGh5ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKLQlfX3UzMiBhZGRyZXNzOwotCV9fdTMyIGNvbW1hbmQ7Ci0JX191MzIgc3RhdHVzOwotCV9fdTMyIG1hY19jZmcwOwotCi0JLyoKLQkgKiBNSUkgbWdtdCBhbGwgZ29lcyB0aHJvdWdoIHBvcnQgMCBNQUMgaW50ZXJmYWNlLCBzbyBpdAotCSAqIGNhbm5vdCBiZSBpbiByZXNldAotCSAqLwotCi0JbWFjX2NmZzAgPSBOWFJEMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCkpOwotCWlmIChuZXR4ZW5fZ2JfZ2V0X3NvZnRfcmVzZXQobWFjX2NmZzApKSB7Ci0JCV9fdTMyIHRlbXA7Ci0JCXRlbXAgPSAwOwotCQluZXR4ZW5fZ2JfdHhfcmVzZXRfcGIodGVtcCk7Ci0JCW5ldHhlbl9nYl9yeF9yZXNldF9wYih0ZW1wKTsKLQkJbmV0eGVuX2diX3R4X3Jlc2V0X21hYyh0ZW1wKTsKLQkJbmV0eGVuX2diX3J4X3Jlc2V0X21hYyh0ZW1wKTsKLQotCQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLCB0ZW1wKSkKLQkJCXJldHVybiAtRUlPOwotCQlyZXN0b3JlID0gMTsKLQl9Ci0KLQljb21tYW5kID0gMDsJCS8qIHR1cm4gb2ZmIGFueSBwcmlvciBhY3Rpdml0eSAqLwotCWlmIChOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT01NQU5EKDApLCBjb21tYW5kKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlhZGRyZXNzID0gMDsKLQluZXR4ZW5fZ2JfbWlpX21nbXRfcmVnX2FkZHIoYWRkcmVzcywgcmVnKTsKLQluZXR4ZW5fZ2JfbWlpX21nbXRfcGh5X2FkZHIoYWRkcmVzcywgcGh5KTsKLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUigwKSwgYWRkcmVzcykpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKE5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NUUkwoMCksIHZhbCkpCi0JCXJldHVybiAtRUlPOwotCi0Jc3RhdHVzID0gMDsKLQlkbyB7Ci0JCXN0YXR1cyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0lORElDQVRFKDApKTsKLQkJdGltZW91dCsrOwotCX0gd2hpbGUgKChuZXR4ZW5fZ2V0X2diX21paV9tZ210X2J1c3koc3RhdHVzKSkKLQkJICYmICh0aW1lb3V0KysgPCBORVRYRU5fTklVX1BIWV9XQUlUTUFYKSk7Ci0KLQlpZiAodGltZW91dCA8IE5FVFhFTl9OSVVfUEhZX1dBSVRNQVgpCi0JCXJlc3VsdCA9IDA7Ci0JZWxzZQotCQlyZXN1bHQgPSAtRUlPOwotCi0JLyogcmVzdG9yZSB0aGUgc3RhdGUgb2YgcG9ydCAwIE1BQyBpbiBjYXNlIHdlIHRhbXBlcmVkIHdpdGggaXQgKi8KLQlpZiAocmVzdG9yZSkKLQkJaWYgKE5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSwgbWFjX2NmZzApKQotCQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgbmV0eGVuX25pdV94Z2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfSU5UX01BU0ssIDB4M2YpOwotCXJldHVybiAwOwotfQotCi1pbnQgbmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlfX3UzMiBlbmFibGUgPSAwOwotCW5ldHhlbl9zZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGVuYWJsZSk7Ci0JbmV0eGVuX3NldF9waHlfaW50X2F1dG9uZWdfY29tcGxldGVkKGVuYWJsZSk7Ci0JbmV0eGVuX3NldF9waHlfaW50X3NwZWVkX2NoYW5nZWQoZW5hYmxlKTsKLQotCWlmICgwICE9Ci0JICAgIG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShhZGFwdGVyLAotCQkJCSAgICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0lOVF9FTkFCTEUsCi0JCQkJICAgICBlbmFibGUpKQotCQlyZXN1bHQgPSAtRUlPOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IG5ldHhlbl9uaXVfeGdiZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9JTlRfTUFTSywgMHg3Zik7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBuZXR4ZW5fbml1X2diZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpZiAoMCAhPQotCSAgICBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGUoYWRhcHRlciwKLQkJCQkgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9JTlRfRU5BQkxFLCAwKSkKLQkJcmVzdWx0ID0gLUVJTzsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgbmV0eGVuX25pdV9nYmVfY2xlYXJfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQotewotCWludCByZXN1bHQgPSAwOwotCWlmICgwICE9Ci0JICAgIG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShhZGFwdGVyLAotCQkJCSAgICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0lOVF9TVEFUVVMsCi0JCQkJICAgICAtRUlPKSkKLQkJcmVzdWx0ID0gLUVJTzsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gKiBuZXR4ZW5fbml1X2diZV9zZXRfbWlpX21vZGUtIFNldCAxMC8xMDAgTWJpdCBNb2RlIGZvciBHYkUgTUFDCi0gKgotICovCi1zdGF0aWMgdm9pZCBuZXR4ZW5fbml1X2diZV9zZXRfbWlpX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQlpbnQgcG9ydCwgbG9uZyBlbmFibGUpCi17Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfTU9ERSwgMHgyKTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksIDB4ODAwMDAwMDApOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwgMHgwMDAwZjAwMjUpOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMShwb3J0KSwgMHhmMWZmKTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFICsgKHBvcnQgPDwgMyksIDApOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArIChwb3J0IDw8IDMpLCAxKTsKLQlOWFdSMzIoYWRhcHRlciwgKE5FVFhFTl9OSVVfR0IwX0hBTEZfRFVQTEVYICsgcG9ydCAqIDQpLCAwKTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT05GSUcocG9ydCksIDB4Nyk7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCS8qCi0JCSAqIERvIE5PVCBlbmFibGUgZmxvdyBjb250cm9sIHVudGlsIGEgc3VpdGFibGUgc29sdXRpb24gZm9yCi0JCSAqICBzaHV0dGluZyBkb3duIHBhdXNlIGZyYW1lcyBpcyBmb3VuZC4KLQkJICovCi0JCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwgMHg1KTsKLQl9Ci0KLQlpZiAobmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpKQotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SIGVuYWJsaW5nIFBIWSBpbnRlcnJ1cHRzXG4iKTsKLQlpZiAobmV0eGVuX25pdV9nYmVfY2xlYXJfcGh5X2ludGVycnVwdHMoYWRhcHRlcikpCi0JCXByaW50ayhLRVJOX0VSUiAiRVJST1IgY2xlYXJpbmcgUEhZIGludGVycnVwdHNcbiIpOwotfQotCi0vKgotICogbmV0eGVuX25pdV9nYmVfc2V0X2dtaWlfbW9kZS0gU2V0IEdiRSBNb2RlIGZvciBHYkUgTUFDCi0gKi8KLXN0YXRpYyB2b2lkIG5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQkgaW50IHBvcnQsIGxvbmcgZW5hYmxlKQotewotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX01PREUsIDB4Mik7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLCAweDgwMDAwMDAwKTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksIDB4MDAwMGYwMDI1KTsKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksIDB4ZjJmZik7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX01JSV9NT0RFICsgKHBvcnQgPDwgMyksIDApOwotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9HTUlJX01PREUgKyAocG9ydCA8PCAzKSwgMSk7Ci0JTlhXUjMyKGFkYXB0ZXIsIChORVRYRU5fTklVX0dCMF9IQUxGX0RVUExFWCArIHBvcnQgKiA0KSwgMCk7Ci0JTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09ORklHKHBvcnQpLCAweDcpOwotCi0JaWYgKGVuYWJsZSkgewotCQkvKgotCQkgKiBEbyBOT1QgZW5hYmxlIGZsb3cgY29udHJvbCB1bnRpbCBhIHN1aXRhYmxlIHNvbHV0aW9uIGZvcgotCQkgKiAgc2h1dHRpbmcgZG93biBwYXVzZSBmcmFtZXMgaXMgZm91bmQuCi0JCSAqLwotCQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksIDB4NSk7Ci0JfQotCi0JaWYgKG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhhZGFwdGVyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUiBlbmFibGluZyBQSFkgaW50ZXJydXB0c1xuIik7Ci0JaWYgKG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpKQotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SIGNsZWFyaW5nIFBIWSBpbnRlcnJ1cHRzXG4iKTsKLX0KLQotaW50IG5ldHhlbl9uaXVfZ2JlX2luaXRfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KQotewotCWludCByZXN1bHQgPSAwOwotCV9fdTMyIHN0YXR1czsKLQotCWlmIChOWF9JU19SRVZJU0lPTl9QMyhhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQotCQlyZXR1cm4gMDsKLQotCWlmIChhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKQotCQlhZGFwdGVyLT5kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIpOwotCW1kZWxheSgyKTsKLQotCWlmICgwID09IG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkKGFkYXB0ZXIsCi0JCQlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywgJnN0YXR1cykpIHsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2xpbmsoc3RhdHVzKSkgewotCQkJaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMikgewotCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUoYWRhcHRlciwgcG9ydCwgMSk7Ci0JCQl9IGVsc2UgaWYgKChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDEpCi0JCQkJICAgfHwgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMCkpIHsKLQkJCQluZXR4ZW5fbml1X2diZV9zZXRfbWlpX21vZGUoYWRhcHRlciwgcG9ydCwgMSk7Ci0JCQl9IGVsc2UgewotCQkJCXJlc3VsdCA9IC0xOwotCQkJfQotCi0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogV2UgZG9uJ3QgaGF2ZSBsaW5rLiBDYWJsZSAgbXVzdCBiZSB1bmNvbm5lY3RlZC4KLQkJCSAqIEVuYWJsZSBwaHkgaW50ZXJydXB0cyBzbyB3ZSB0YWtlIGFjdGlvbiB3aGVuCi0JCQkgKiBwbHVnZ2VkIGluLgotCQkJICovCi0KLQkJCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkJCSAgICBORVRYRU5fR0JfTUFDX1NPRlRfUkVTRVQpOwotCQkJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAotCQkJCQkgICAgTkVUWEVOX0dCX01BQ19SRVNFVF9QUk9UX0JMSyB8Ci0JCQkJCSAgICBORVRYRU5fR0JfTUFDX0VOQUJMRV9UWF9SWCB8Ci0JCQkJCSAgICBORVRYRU5fR0JfTUFDX1BBVVNFRF9GUk1TKTsKLQkJCWlmIChuZXR4ZW5fbml1X2diZV9jbGVhcl9waHlfaW50ZXJydXB0cyhhZGFwdGVyKSkKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIkVSUk9SIGNsZWFyaW5nIFBIWSBpbnRlcnJ1cHRzXG4iKTsKLQkJCWlmIChuZXR4ZW5fbml1X2diZV9lbmFibGVfcGh5X2ludGVycnVwdHMoYWRhcHRlcikpCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJFUlJPUiBlbmFibGluZyBQSFkgaW50ZXJydXB0c1xuIik7Ci0JCQlpZiAobmV0eGVuX25pdV9nYmVfY2xlYXJfcGh5X2ludGVycnVwdHMoYWRhcHRlcikpCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJFUlJPUiBjbGVhcmluZyBQSFkgaW50ZXJydXB0c1xuIik7Ci0JCQlyZXN1bHQgPSAtMTsKLQkJfQotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IC1FSU87Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBuZXR4ZW5fbml1X3hnX2luaXRfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KQotewotCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKSB7Ci0JCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSsoMHgxMDAwMCpwb3J0KSwgMHgxNDQ3KTsKLQkJTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18wKygweDEwMDAwKnBvcnQpLCAweDUpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBEaXNhYmxlIGEgR2JFIGludGVyZmFjZSAqLwotaW50IG5ldHhlbl9uaXVfZGlzYWJsZV9nYmVfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JX191MzIgbWFjX2NmZzA7Ci0JdTMyIHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCi0JCXJldHVybiAwOwotCi0JaWYgKHBvcnQgPiBORVRYRU5fTklVX01BWF9HQkVfUE9SVFMpCi0JCXJldHVybiAtRUlOVkFMOwotCW1hY19jZmcwID0gMDsKLQluZXR4ZW5fZ2Jfc29mdF9yZXNldChtYWNfY2ZnMCk7Ci0JaWYgKE5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwgbWFjX2NmZzApKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLQotLyogRGlzYWJsZSBhbiBYRyBpbnRlcmZhY2UgKi8KLWludCBuZXR4ZW5fbml1X2Rpc2FibGVfeGdfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JX191MzIgbWFjX2NmZzsKLQl1MzIgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0KLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1hY19jZmcgPSAwOwotCWlmIChOWFdSMzIoYWRhcHRlciwKLQkJCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSwgbWFjX2NmZykpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCi0vKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSBmb3IgYSBHYkUgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9zZXRfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXUzMiBtb2RlKQotewotCV9fdTMyIHJlZzsKLQl1MzIgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0KLQlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBzYXZlIHByZXZpb3VzIGNvbnRlbnRzICovCi0JcmVnID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfRFJPUF9XUk9OR0FERFIpOwotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKSB7Ci0JCXN3aXRjaCAocG9ydCkgewotCQljYXNlIDA6Ci0JCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjAocmVnKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjEocmVnKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjIocmVnKTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjMocmVnKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSAwOgotCQkJbmV0eGVuX3NldF9nYl9kcm9wX2diMChyZWcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCW5ldHhlbl9zZXRfZ2JfZHJvcF9nYjEocmVnKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQluZXR4ZW5fc2V0X2diX2Ryb3BfZ2IyKHJlZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJbmV0eGVuX3NldF9nYl9kcm9wX2diMyhyZWcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfRFJPUF9XUk9OR0FERFIsIHJlZykpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCi1pbnQgbmV0eGVuX25pdV94Z19zZXRfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCXUzMiBtb2RlKQotewotCV9fdTMyIHJlZzsKLQl1MzIgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0KLQlpZiAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJlZyA9IE5YUkQzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCkpOwotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKQotCQlyZWcgPSAocmVnIHwgMHgyMDAwVUwpOwotCWVsc2UKLQkJcmVnID0gKHJlZyAmIH4weDIwMDBVTCk7Ci0KLQlpZiAobW9kZSA9PSBORVRYRU5fTklVX0FMTE1VTFRJX01PREUpCi0JCXJlZyA9IChyZWcgfCAweDEwMDBVTCk7Ci0JZWxzZQotCQlyZWcgPSAocmVnICYgfjB4MTAwMFVMKTsKLQotCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSArICgweDEwMDAwICogcG9ydCksIHJlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IG5ldHhlbl9wMl9uaWNfc2V0X21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTggKmFkZHIpCi17Ci0JdTMyIG1hY19oaSwgbWFjX2xvOwotCXUzMiByZWdfaGksIHJlZ19sbzsKLQotCXU4IHBoeSA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7Ci0JdTggcGh5X2NvdW50ID0gKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSA/Ci0JCU5FVFhFTl9OSVVfTUFYX1hHX1BPUlRTIDogTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTOwotCi0JaWYgKHBoeSA+PSBwaHlfY291bnQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWFjX2xvID0gKCh1MzIpYWRkclswXSA8PCAxNikgfCAoKHUzMilhZGRyWzFdIDw8IDI0KTsKLQltYWNfaGkgPSBhZGRyWzJdIHwgKCh1MzIpYWRkclszXSA8PCA4KSB8Ci0JCSgodTMyKWFkZHJbNF0gPDwgMTYpIHwgKCh1MzIpYWRkcls1XSA8PCAyNCk7Ci0KLQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKLQkJcmVnX2xvID0gTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfMSArICgweDEwMDAwICogcGh5KTsKLQkJcmVnX2hpID0gTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEkgKyAoMHgxMDAwMCAqIHBoeSk7Ci0JfSBlbHNlIHsKLQkJcmVnX2xvID0gTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMShwaHkpOwotCQlyZWdfaGkgPSBORVRYRU5fTklVX0dCX1NUQVRJT05fQUREUl8wKHBoeSk7Ci0JfQotCi0JLyogd3JpdGUgdHdpY2UgdG8gZmx1c2ggKi8KLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIHJlZ19sbywgbWFjX2xvKSB8fCBOWFdSMzIoYWRhcHRlciwgcmVnX2hpLCBtYWNfaGkpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoTlhXUjMyKGFkYXB0ZXIsIHJlZ19sbywgbWFjX2xvKSB8fCBOWFdSMzIoYWRhcHRlciwgcmVnX2hpLCBtYWNfaGkpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3M2E2MmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4gSW5jLAotICogMTg5MjIgRm9yZ2UgRHJpdmUKLSAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQotICoKLSAqLwotCi0jaWZuZGVmIF9fTklDX1BIQU5fUkVHX0hfCi0jZGVmaW5lIF9fTklDX1BIQU5fUkVHX0hfCi0KLS8qCi0gKiBDUkIgUmVnaXN0ZXJzIG9yIHF1ZXVlIG1lc3NhZ2UgZG9uZSBvbmx5IGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCi0gKi8KLSNkZWZpbmUgTklDX0NSQl9CQVNFICAgICAgICAgICAgICAgTkVUWEVOX0NBTV9SQU0oMHgyMDApCi0jZGVmaW5lIE5FVFhFTl9OSUNfUkVHKFgpICAgICAgICAgICAgIChOSUNfQ1JCX0JBU0UrKFgpKQotI2RlZmluZSBOSUNfQ1JCX0JBU0VfMiAgICAgICAgICAgICBORVRYRU5fQ0FNX1JBTSgweDcwMCkKLSNkZWZpbmUgTkVUWEVOX05JQ19SRUdfMihYKSAgICAgICAgIChOSUNfQ1JCX0JBU0VfMisoWCkpCi0KLSNkZWZpbmUgQ1JCX1BIQU5fQ05UUkxfTE9fT0ZGU0VUICAgIE5FVFhFTl9OSUNfUkVHKDB4MDApCi0jZGVmaW5lIENSQl9QSEFOX0NOVFJMX0hJX09GRlNFVCAgICBORVRYRU5fTklDX1JFRygweDA0KQotI2RlZmluZSBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVCAgICAgTkVUWEVOX05JQ19SRUcoMHgwOCkKLSNkZWZpbmUgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVQgICAgIE5FVFhFTl9OSUNfUkVHKDB4MGMpCi0jZGVmaW5lIENSQl9QQVVTRV9BRERSX0xPICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDEwKQotI2RlZmluZSBDUkJfUEFVU0VfQUREUl9ISSAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgxNCkKLSNkZWZpbmUgTlhfQ0RSUF9DUkJfT0ZGU0VUICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MTgpCi0jZGVmaW5lIE5YX0FSRzFfQ1JCX09GRlNFVCAgICAgICAgICBORVRYRU5fTklDX1JFRygweDFjKQotI2RlZmluZSBOWF9BUkcyX0NSQl9PRkZTRVQgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgyMCkKLSNkZWZpbmUgTlhfQVJHM19DUkJfT0ZGU0VUICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MjQpCi0jZGVmaW5lIE5YX1NJR05fQ1JCX09GRlNFVCAgICAgICAgICBORVRYRU5fTklDX1JFRygweDI4KQotI2RlZmluZSBDUkJfQ01EX0lOVFJfTE9PUCAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgyMCkKLSNkZWZpbmUgQ1JCX0NNRF9ETUFfTE9PUCAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MjQpCi0jZGVmaW5lIENSQl9SQ1ZfSU5UUl9MT09QICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDI4KQotI2RlZmluZSBDUkJfUkNWX0RNQV9MT09QICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgyYykKLSNkZWZpbmUgQ1JCX0VOQUJMRV9UWF9JTlRSICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4MzApCi0jZGVmaW5lIENSQl9NTUFQX0FERFJfMyAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDM0KQotI2RlZmluZSBDUkJfQ01EUEVHX0NNRFJJTkcgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgzOCkKLSNkZWZpbmUgQ1JCX0hPU1RfRFVNTVlfQlVGX0FERFJfSEkgIE5FVFhFTl9OSUNfUkVHKDB4M2MpCi0jZGVmaW5lIENSQl9IT1NUX0RVTU1ZX0JVRl9BRERSX0xPICBORVRYRU5fTklDX1JFRygweDQwKQotI2RlZmluZSBDUkJfTU1BUF9BRERSXzAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg0NCkKLSNkZWZpbmUgQ1JCX01NQVBfQUREUl8xICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NDgpCi0jZGVmaW5lIENSQl9NTUFQX0FERFJfMiAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDRjKQotI2RlZmluZSBDUkJfQ01EUEVHX1NUQVRFICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg1MCkKLSNkZWZpbmUgQ1JCX01NQVBfU0laRV8wICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NTQpCi0jZGVmaW5lIENSQl9NTUFQX1NJWkVfMSAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDU4KQotI2RlZmluZSBDUkJfTU1BUF9TSVpFXzIgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg1YykKLSNkZWZpbmUgQ1JCX01NQVBfU0laRV8zICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NjApCi0jZGVmaW5lIENSQl9HTE9CQUxfSU5UX0NPQUwgICAgICAgICBORVRYRU5fTklDX1JFRygweDY0KQotI2RlZmluZSBDUkJfSU5UX0NPQUxfTU9ERSAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg2OCkKLSNkZWZpbmUgQ1JCX01BWF9SQ1ZfQlVGUyAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NmMpCi0jZGVmaW5lIENSQl9UWF9JTlRfVEhSRVNIT0xEICAgICAgICBORVRYRU5fTklDX1JFRygweDcwKQotI2RlZmluZSBDUkJfUlhfUEtUX1RJTUVSICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg3NCkKLSNkZWZpbmUgQ1JCX1RYX1BLVF9USU1FUiAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4NzgpCi0jZGVmaW5lIENSQl9SWF9QS1RfQ05UICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDdjKQotI2RlZmluZSBDUkJfUlhfVE1SX0NOVCAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg4MCkKLSNkZWZpbmUgQ1JCX1JYX0xST19USU1FUiAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ODQpCi0jZGVmaW5lIENSQl9SWF9MUk9fTUlEX1RJTUVSICAgICAgICBORVRYRU5fTklDX1JFRygweDg4KQotI2RlZmluZSBDUkJfRE1BX01BWF9SQ1ZfQlVGUyAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg4YykKLSNkZWZpbmUgQ1JCX01BWF9ETUFfRU5UUklFUyAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4OTApCi0jZGVmaW5lIENSQl9YR19TVEFURSAgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDk0KSAvKiBYRyBMaW5rIHN0YXR1cyAqLwotI2RlZmluZSBDUkJfWEdfU1RBVEVfUDMgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHg5OCkgLyogWEcgUEYgTGluayBzdGF0dXMgKi8KLSNkZWZpbmUgQ1JCX0FHRU5UX1RYX1NJWkUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4OWMpCi0jZGVmaW5lIENSQl9BR0VOVF9UWF9UWVBFICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGEwKQotI2RlZmluZSBDUkJfQUdFTlRfVFhfQUREUiAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhhNCkKLSNkZWZpbmUgQ1JCX0FHRU5UX1RYX01TUyAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YTgpCi0jZGVmaW5lIENSQl9UWF9TVEFURSAgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGFjKQotI2RlZmluZSBDUkJfVFhfQ09VTlQgICAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhiMCkKLSNkZWZpbmUgQ1JCX1JYX1NUQVRFICAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YjQpCi0jZGVmaW5lIENSQl9SWF9QRVJGX0RFQlVHXzEgICAgICAgICBORVRYRU5fTklDX1JFRygweGI4KQotI2RlZmluZSBDUkJfUlhfTFJPX0NPTlRST0wgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhiYykKLSNkZWZpbmUgQ1JCX1JYX0xST19TVEFSVF9OVU0gICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzApCi0jZGVmaW5lIENSQl9NUE9SVF9NT0RFICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGM0KQotI2RlZmluZSBDUkJfQ01EX1JJTkdfU0laRSAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjOCkKLSNkZWZpbmUgQ1JCX0RNQV9TSElGVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4Y2MpCi0jZGVmaW5lIENSQl9JTlRfVkVDVE9SICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGQ0KQotI2RlZmluZSBDUkJfQ1RYX1JFU0VUICAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkOCkKLSNkZWZpbmUgQ1JCX0hPU1RfU1RTX1BST0QgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZGMpCi0jZGVmaW5lIENSQl9IT1NUX1NUU19DT05TICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGUwKQotI2RlZmluZSBDUkJfUEVHX0NNRF9QUk9EICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhlNCkKLSNkZWZpbmUgQ1JCX1BGX0xJTktfU1BFRURfMSAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZTgpCi0jZGVmaW5lIENSQl9QRl9MSU5LX1NQRUVEXzIgICAgICAgICBORVRYRU5fTklDX1JFRygweGVjKQotI2RlZmluZSBDUkJfSE9TVF9CVUZGRVJfQ09OUyAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhmMCkKLSNkZWZpbmUgQ1JCX0pVTUJPX0JVRkZFUl9QUk9EICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZjQpCi0jZGVmaW5lIENSQl9KVU1CT19CVUZGRVJfQ09OUyAgICAgICBORVRYRU5fTklDX1JFRygweGY4KQotI2RlZmluZSBDUkJfSE9TVF9EVU1NWV9CVUYgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhmYykKLQotI2RlZmluZSBDUkJfUkNWUEVHX1NUQVRFICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHgxM2MpCi0jZGVmaW5lIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUXzEgICBORVRYRU5fTklDX1JFRygweDFhYykKLSNkZWZpbmUgQ1JCX0NNRF9DT05TVU1FUl9PRkZTRVRfMSAgIE5FVFhFTl9OSUNfUkVHKDB4MWIwKQotI2RlZmluZSBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVF8yICAgTkVUWEVOX05JQ19SRUcoMHgxYjgpCi0jZGVmaW5lIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUXzIgICBORVRYRU5fTklDX1JFRygweDFiYykKLSNkZWZpbmUgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVRfMyAgIE5FVFhFTl9OSUNfUkVHKDB4MWQwKQotI2RlZmluZSBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVF8zICAgTkVUWEVOX05JQ19SRUcoMHgxZDQpCi0jZGVmaW5lIENSQl9URU1QX1NUQVRFICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweDFiNCkKLQotI2RlZmluZSBDUkJfVjJQXzAJCSAgICBORVRYRU5fTklDX1JFRygweDI5MCkKLSNkZWZpbmUgQ1JCX1YyUF8xCQkgICAgTkVUWEVOX05JQ19SRUcoMHgyOTQpCi0jZGVmaW5lIENSQl9WMlBfMgkJICAgIE5FVFhFTl9OSUNfUkVHKDB4Mjk4KQotI2RlZmluZSBDUkJfVjJQXzMJCSAgICBORVRYRU5fTklDX1JFRygweDI5YykKLSNkZWZpbmUgQ1JCX1YyUChwb3J0KQkJICAgIChDUkJfVjJQXzArKChwb3J0KSo0KSkKLSNkZWZpbmUgQ1JCX0RSSVZFUl9WRVJTSU9OCSAgIE5FVFhFTl9OSUNfUkVHKDB4MmEwKQotI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMAkgICBORVRYRU5fTklDX1JFRygweDFkOCkKLSNkZWZpbmUgQ1JCX1NXX0lOVF9NQVNLXzEJICAgTkVUWEVOX05JQ19SRUcoMHgxZTApCi0jZGVmaW5lIENSQl9TV19JTlRfTUFTS18yCSAgIE5FVFhFTl9OSUNfUkVHKDB4MWU0KQotI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMwkgICBORVRYRU5fTklDX1JFRygweDFlOCkKLQotI2RlZmluZSBDUkJfRldfQ0FQQUJJTElUSUVTXzEgICAgICBORVRYRU5fQ0FNX1JBTSgweDEyOCkKLSNkZWZpbmUgQ1JCX01BQ19CTE9DS19TVEFSVCAgICAgICAgTkVUWEVOX0NBTV9SQU0oMHgxYzApCi0KLS8qCi0gKiBjYXBhYmlsaXRpZXMgcmVnaXN0ZXIsIGNhbiBiZSB1c2VkIHRvIHNlbGVjdGl2ZWx5IGVuYWJsZS9kaXNhYmxlIGZlYXR1cmVzCi0gKiBmb3IgYmFja3dhcmQgY29tcGFiaWxpdHkKLSAqLwotI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19IT1NUCU5FVFhFTl9OSUNfUkVHKDB4MWE4KQotI2RlZmluZSBDUkJfTklDX0NBUEFCSUxJVElFU19GVwkgIAlORVRYRU5fTklDX1JFRygweDFkYykKLSNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9IT1NUCQlORVRYRU5fTklDX1JFRygweDI3MCkKLSNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9GVwkgIAlORVRYRU5fTklDX1JFRygweDI3NCkKLQotI2RlZmluZSBJTlRSX1NDSEVNRV9QRVJQT1JUCSAgICAgIAkweDEKLSNkZWZpbmUgTVNJX01PREVfTVVMVElGVU5DCSAgICAgIAkweDEKLQotLyogdXNlZCBmb3IgZXRodG9vbCB0ZXN0cyAqLwotI2RlZmluZSBDUkJfU0NSQVRDSFBBRF9URVNUCSAgICBORVRYRU5fTklDX1JFRygweDI4MCkKLQotLyoKLSAqIENyYlBvcnRQaGFuQ250ckhpL0xvIGlzIHVzZWQgdG8gcGFzcyB0aGUgYWRkcmVzcyBvZiBIb3N0UGhhbnRvbUluZGV4IGFkZHJlc3MKLSAqIHdoaWNoIGNhbiBiZSByZWFkIGJ5IHRoZSBQaGFudG9tIGhvc3QgdG8gZ2V0IHByb2R1Y2VyL2NvbnN1bWVyIGluZGV4ZXMgZnJvbQotICogUGhhbnRvbS9DYXNwZXIuIElmIGl0IGlzIG5vdCBIT1NUX1NIQVJFRF9NRU1PUlksIHRoZW4gdGhlIGZvbGxvd2luZwotICogcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGFkZHJlc3NlcyBvZiB0aGUgcmluZydzIHNoYXJlZCBtZW1vcnkKLSAqIG9uIHRoZSBQaGFudG9tLgotICovCi0KLSNkZWZpbmUgbnhfZ2V0X3RlbXBfdmFsKHgpCQkoKHgpID4+IDE2KQotI2RlZmluZSBueF9nZXRfdGVtcF9zdGF0ZSh4KQkJKCh4KSAmIDB4ZmZmZikKLSNkZWZpbmUgbnhfZW5jb2RlX3RlbXAodmFsLCBzdGF0ZSkJKCgodmFsKSA8PCAxNikgfCAoc3RhdGUpKQotCi0vKgotICogQ1JCIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSByZWNlaXZlIHBlZyBsb2dpYy4KLSAqLwotCi1zdHJ1Y3QgbmV0eGVuX3JlY3ZfY3JiIHsKLQl1MzIgY3JiX3Jjdl9wcm9kdWNlcltOVU1fUkNWX0RFU0NfUklOR1NdOwotCXUzMiBjcmJfc3RzX2NvbnN1bWVyW05VTV9TVFNfREVTQ19SSU5HU107Ci0JdTMyIHN3X2ludF9tYXNrW05VTV9TVFNfREVTQ19SSU5HU107Ci19OwotCi0vKgotICogVGVtcGVyYXR1cmUgY29udHJvbC4KLSAqLwotZW51bSB7Ci0JTlhfVEVNUF9OT1JNQUwgPSAweDEsCS8qIE5vcm1hbCBvcGVyYXRpbmcgcmFuZ2UgKi8KLQlOWF9URU1QX1dBUk4sCQkvKiBTb3VuZCBhbGVydCwgdGVtcGVyYXR1cmUgZ2V0dGluZyBoaWdoICovCi0JTlhfVEVNUF9QQU5JQwkJLyogRmF0YWwgZXJyb3IsIGhhcmR3YXJlIGhhcyBzaHV0IGRvd24uICovCi19OwotCi0jZW5kaWYJCQkJLyogX19OSUNfUEhBTl9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTAxMC5jIGIvZHJpdmVycy9uZXQvbmk1MDEwLmMKaW5kZXggMmE4ZGE0Ny4uNDYyZDIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1MDEwLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1MDEwLmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCWhhcmR3YXJlX3NlbmRfcGFja2V0KGRldiwgKHVuc2lnbmVkIGNoYXIgKilza2ItPmRhdGEsIHNrYi0+bGVuLCBsZW5ndGgtc2tiLT5sZW4pOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2IgKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTIuYyBiL2RyaXZlcnMvbmV0L25pNTIuYwppbmRleCA3N2Q0NGEwLi5iZDBhYzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1Mi5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBuaTUyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCAgICAgbmk1Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgICAgbmk1Ml9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgICAgIG5pNTJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgbmk1Ml9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBzdHJ1Y3QgIG5ldF9kZXZpY2Vfc3RhdHMgKm5pNTJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgICAgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgICAgbmk1Ml90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTE3Myw3ICsxMTczLDggQEAKICAqIHNlbmQgZnJhbWUKICAqLwogCi1zdGF0aWMgaW50IG5pNTJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBuaTUyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGxlbiwgaTsKICNpZm5kZWYgTk9fTk9QQ09NTUFORFMKQEAgLTExODMsNyArMTE4NCw3IEBACiAKIAlpZiAoc2tiLT5sZW4gPiBYTUlUX0JVRkZfU0laRSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTb3JyeSwgbWF4LiBmcmFtZWxlbmd0aCBpcyAlZCBieXRlcy4gVGhlIGxlbmd0aCBvZiB5b3VyIGZyYW1lIGlzICVkIGJ5dGVzLlxuIiwgZGV2LT5uYW1lLCBYTUlUX0JVRkZfU0laRSwgc2tiLT5sZW4pOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CkBAIC0xMjY3LDcgKzEyNjgsNyBAQAogCX0KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAjZW5kaWYKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk2NS5jIGIvZHJpdmVycy9uZXQvbmk2NS5jCmluZGV4IDFmMTBlZDYuLjc1MmMyZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNjUuYworKysgYi9kcml2ZXJzL25ldC9uaTY1LmMKQEAgLTI1Miw3ICsyNTIsOCBAQAogc3RhdGljIGludCAgbmk2NV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgbmk2NV9sYW5jZV9yZWluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBuaTY1X2luaXRfbGFuY2Uoc3RydWN0IHByaXYgKnAsdW5zaWduZWQgY2hhciosaW50LGludCk7Ci1zdGF0aWMgaW50ICBuaTY1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IG5pNjVfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAgbmk2NV90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgbmk2NV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIG5pNjVfYWxsb2NfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTE1Nyw3ICsxMTU4LDggQEAKICAqCVNlbmQgYSBwYWNrZXQKICAqLwogCi1zdGF0aWMgaW50IG5pNjVfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBuaTY1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHByaXYgKnAgPSBkZXYtPm1sX3ByaXY7CiAKQEAgLTEyMTYsNyArMTIxOCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnJpbmdfbG9jaywgZmxhZ3MpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCBkMjE0NmQ0Li43NmNjMjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtNDAxNSw3ICs0MDE1LDcgQEAKIAkJbXAtPnJ4X2hpc3RfY250NiArPSBSWE1BQ19ISVNUX0NOVDZfQ09VTlQ7CiAJaWYgKHZhbCAmIFhSWE1BQ19TVEFUVVNfUlhISVNUN19DTlRfRVhQKQogCQltcC0+cnhfaGlzdF9jbnQ3ICs9IFJYTUFDX0hJU1RfQ05UN19DT1VOVDsKLQlpZiAodmFsICYgWFJYTUFDX1NUQVRfTVNLX1JYT0NURVRfQ05UX0VYUCkKKwlpZiAodmFsICYgWFJYTUFDX1NUQVRVU19SWE9DVEVUX0NOVF9FWFApCiAJCW1wLT5yeF9vY3RldHMgKz0gUlhNQUNfQlRfQ05UX0NPVU5UOwogCWlmICh2YWwgJiBYUlhNQUNfU1RBVFVTX0NWSU9MRVJSX0NOVF9FWFApCiAJCW1wLT5yeF9jb2RlX3Zpb2xhdGlvbnMgKz0gUlhNQUNfQ0RfVklPX0NOVF9DT1VOVDsKQEAgLTY2NTcsNyArNjY1Nyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBuaXVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG5pdV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGFsaWduLCBoZWFkcm9vbTsKQEAgLTEwMTQ0LDExICsxMDE0NSw2IEBACiAJLnVubWFwX3NpbmdsZQk9IG5pdV9waHlzX3VubWFwX3NpbmdsZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlc19zaXplKHN0cnVjdCByZXNvdXJjZSAqcikKLXsKLQlyZXR1cm4gci0+ZW5kIC0gci0+c3RhcnQgKyAxVUw7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IG5pdV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewpAQCAtMTAxODgsNyArMTAxODQsNyBAQAogCWRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU0pOwogCiAJbnAtPnJlZ3MgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMV0sIDAsCi0JCQkgICAgICByZXNfc2l6ZSgmb3AtPnJlc291cmNlWzFdKSwKKwkJCSAgICAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVsxXSksCiAJCQkgICAgICAibml1IHJlZ3MiKTsKIAlpZiAoIW5wLT5yZWdzKSB7CiAJCWRldl9lcnIoJm9wLT5kZXYsIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCAiCkBAIC0xMDE5OCw3ICsxMDE5NCw3IEBACiAJfQogCiAJbnAtPnZpcl9yZWdzXzEgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbMl0sIDAsCi0JCQkJICAgIHJlc19zaXplKCZvcC0+cmVzb3VyY2VbMl0pLAorCQkJCSAgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbMl0pLAogCQkJCSAgICAibml1IHZyZWdzLTEiKTsKIAlpZiAoIW5wLT52aXJfcmVnc18xKSB7CiAJCWRldl9lcnIoJm9wLT5kZXYsIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgdmlyIHJlZ2lzdGVycyAxLCAiCkBAIC0xMDIwOCw3ICsxMDIwNCw3IEBACiAJfQogCiAJbnAtPnZpcl9yZWdzXzIgPSBvZl9pb3JlbWFwKCZvcC0+cmVzb3VyY2VbM10sIDAsCi0JCQkJICAgIHJlc19zaXplKCZvcC0+cmVzb3VyY2VbM10pLAorCQkJCSAgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbM10pLAogCQkJCSAgICAibml1IHZyZWdzLTIiKTsKIAlpZiAoIW5wLT52aXJfcmVnc18yKSB7CiAJCWRldl9lcnIoJm9wLT5kZXYsIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgdmlyIHJlZ2lzdGVycyAyLCAiCkBAIC0xMDI0MywxOSArMTAyMzksMTkgQEAKIGVycl9vdXRfaW91bm1hcDoKIAlpZiAobnAtPnZpcl9yZWdzXzEpIHsKIAkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLCBucC0+dmlyX3JlZ3NfMSwKLQkJCSAgIHJlc19zaXplKCZvcC0+cmVzb3VyY2VbMl0pKTsKKwkJCSAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVsyXSkpOwogCQlucC0+dmlyX3JlZ3NfMSA9IE5VTEw7CiAJfQogCiAJaWYgKG5wLT52aXJfcmVnc18yKSB7CiAJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVszXSwgbnAtPnZpcl9yZWdzXzIsCi0JCQkgICByZXNfc2l6ZSgmb3AtPnJlc291cmNlWzNdKSk7CisJCQkgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbM10pKTsKIAkJbnAtPnZpcl9yZWdzXzIgPSBOVUxMOwogCX0KIAogCWlmIChucC0+cmVncykgewogCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMV0sIG5wLT5yZWdzLAotCQkJICAgcmVzX3NpemUoJm9wLT5yZXNvdXJjZVsxXSkpOworCQkJICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzFdKSk7CiAJCW5wLT5yZWdzID0gTlVMTDsKIAl9CiAKQEAgLTEwMjgwLDE5ICsxMDI3NiwxOSBAQAogCiAJCWlmIChucC0+dmlyX3JlZ3NfMSkgewogCQkJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzJdLCBucC0+dmlyX3JlZ3NfMSwKLQkJCQkgICByZXNfc2l6ZSgmb3AtPnJlc291cmNlWzJdKSk7CisJCQkJICAgcmVzb3VyY2Vfc2l6ZSgmb3AtPnJlc291cmNlWzJdKSk7CiAJCQlucC0+dmlyX3JlZ3NfMSA9IE5VTEw7CiAJCX0KIAogCQlpZiAobnAtPnZpcl9yZWdzXzIpIHsKIAkJCW9mX2lvdW5tYXAoJm9wLT5yZXNvdXJjZVszXSwgbnAtPnZpcl9yZWdzXzIsCi0JCQkJICAgcmVzX3NpemUoJm9wLT5yZXNvdXJjZVszXSkpOworCQkJCSAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVszXSkpOwogCQkJbnAtPnZpcl9yZWdzXzIgPSBOVUxMOwogCQl9CiAKIAkJaWYgKG5wLT5yZWdzKSB7CiAJCQlvZl9pb3VubWFwKCZvcC0+cmVzb3VyY2VbMV0sIG5wLT5yZWdzLAotCQkJCSAgIHJlc19zaXplKCZvcC0+cmVzb3VyY2VbMV0pKTsKKwkJCQkgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbMV0pKTsKIAkJCW5wLT5yZWdzID0gTlVMTDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uczgzODIwLmMgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKaW5kZXggMTU3NmFjMC4uYzU5NGUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwpAQCAtMTA3Nyw3ICsxMDc3LDggQEAKICAqIHdoaWxlIHRyeWluZyB0byB0cmFjayBkb3duIGEgYnVnIGluIGVpdGhlciB0aGUgemVybyBjb3B5IGNvZGUgb3IKICAqIHRoZSB0eCBmaWZvIChoZW5jZSB0aGUgTUFYX0ZSQUdfTEVOKS4KICAqLwotc3RhdGljIGludCBuczgzODIwX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBuczgzODIwX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgbnM4MzgyMCAqZGV2ID0gUFJJVihuZGV2KTsKIAl1MzIgZnJlZV9pZHgsIGNtZHN0cywgZXh0c3RzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwppbmRleCA4OWY3YjJhLi4wYzQ0YjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYworKysgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwpAQCAtMTM1Niw3ICsxMzU2LDcgQEAKIAlEUFJJTlRLICgiJXM6IFF1ZXVlZCBUeCBwYWNrZXQgYXQgJXAgc2l6ZSAldSB0byBzbG90ICVkLlxuIiwKIAkJIGRldi0+bmFtZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwgZW50cnkpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCkBAIC0xNzg0LDExICsxNzg0LDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQkJaWYgKCFjYXBhYmxlIChDQVBfTkVUX0FETUlOKSkgewotCQkJcmMgPSAtRVBFUk07Ci0JCQlicmVhazsKLQkJfQotCiAJCXNwaW5fbG9ja19pcnFzYXZlICgmdHAtPmxvY2ssIGZsYWdzKTsKIAkJbWRpb193cml0ZSAoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnRwLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IGYzNWM2MDkuLmVlOGFkM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CkBAIC0yMzksNyArMjQwLDggQEAKIHN0YXRpYyB2b2lkIHRjNTc0X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbWVkaWFfY2hlY2sodW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBlbDNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgZWwzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplbDNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNzc4LDcgKzc4MCw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGVsM19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC04MDYsNyArODA5LDcgQEAKIAlwb3BfdHhfc3RhdHVzKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPndpbmRvd19sb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBFTDMgaW50ZXJydXB0IGhhbmRsZXIuICovCkBAIC0xMDk0LDE2ICsxMDk3LDE2IEBACiB7CiAJc3RydWN0IGVsM19wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXUxNiAqZGF0YSA9ICh1MTYgKikmcnEtPmlmcl9pZnJ1OworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7CiAJaW50IHBoeSA9IGxwLT5waHlzICYgMHgxZjsKIAogCURFQlVHKDIsICIlczogSW4gaW9jdCglLS42cywgJSM0LjR4KSAlNC40eCAlNC40eCAlNC40eCAlNC40eC5cbiIsCiAJCSAgZGV2LT5uYW1lLCBycS0+aWZyX2lmcm4uaWZybl9uYW1lLCBjbWQsCi0JCSAgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7CisJCSAgZGF0YS0+cGh5X2lkLCBkYXRhLT5yZWdfbnVtLCBkYXRhLT52YWxfaW4sIGRhdGEtPnZhbF9vdXQpOwogCiAJc3dpdGNoKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQSFk6CQkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFBIWSBpbiB1c2UuICovCi0JCWRhdGFbMF0gPSBwaHk7CisJCWRhdGEtPnBoeV9pZCA9IHBoeTsKIAljYXNlIFNJT0NHTUlJUkVHOgkJLyogUmVhZCB0aGUgc3BlY2lmaWVkIE1JSSByZWdpc3Rlci4gKi8KIAkJewogCQkJaW50IHNhdmVkX3dpbmRvdzsKQEAgLTExMTIsNyArMTExNSw4IEBACiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPndpbmRvd19sb2NrLCBmbGFncyk7CiAJCQlzYXZlZF93aW5kb3cgPSBpbncoaW9hZGRyICsgRUwzX0NNRCkgPj4gMTM7CiAJCQlFTDNXSU5ET1coNCk7Ci0JCQlkYXRhWzNdID0gbWRpb19yZWFkKGlvYWRkciwgZGF0YVswXSAmIDB4MWYsIGRhdGFbMV0gJiAweDFmKTsKKwkJCWRhdGEtPnZhbF9vdXQgPSBtZGlvX3JlYWQoaW9hZGRyLCBkYXRhLT5waHlfaWQgJiAweDFmLAorCQkJCQkJICBkYXRhLT5yZWdfbnVtICYgMHgxZik7CiAJCQlFTDNXSU5ET1coc2F2ZWRfd2luZG93KTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT53aW5kb3dfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDA7CkBAIC0xMTIyLDEyICsxMTI2LDExIEBACiAJCQlpbnQgc2F2ZWRfd2luZG93OwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQkJcmV0dXJuIC1FUEVSTTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+d2luZG93X2xvY2ssIGZsYWdzKTsKIAkJCXNhdmVkX3dpbmRvdyA9IGludyhpb2FkZHIgKyBFTDNfQ01EKSA+PiAxMzsKIAkJCUVMM1dJTkRPVyg0KTsKLQkJCW1kaW9fd3JpdGUoaW9hZGRyLCBkYXRhWzBdICYgMHgxZiwgZGF0YVsxXSAmIDB4MWYsIGRhdGFbMl0pOworCQkJbWRpb193cml0ZShpb2FkZHIsIGRhdGEtPnBoeV9pZCAmIDB4MWYsCisJCQkJICAgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJCQlFTDNXSU5ET1coc2F2ZWRfd2luZG93KTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT53aW5kb3dfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDY5MGI5YzcuLjU2OWZiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCkBAIC0xNDksNyArMTQ5LDggQEAKIHN0YXRpYyB2b2lkIG1lZGlhX2NoZWNrKHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyBpbnQgZWwzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7CiBzdGF0aWMgaW50IGVsM19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBlbDNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbDNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBlbDNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVsM19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC02MDQsNyArNjA1LDggQEAKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgZWwzX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBlbDNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjM1LDcgKzYzNyw3IEBACiAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOyAgICAKICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7CiAgICAgCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIEVMMyBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggMGUzOGQ4MC4uMzEzMWE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSAiLi4vODM5MC5oIgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CkBAIC05Miw3ICs5Myw4IEBACiBzdGF0aWMgaW50IGF4bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBheG5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgYXhuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBheG5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmdldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGF4bmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC02OTYsMTggKzY5OCwxNiBAQAogc3RhdGljIGludCBheG5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogICAgIGF4bmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwotICAgIHUxNiAqZGF0YSA9ICh1MTYgKikmcnEtPmlmcl9pZnJ1OworICAgIHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7CiAgICAgdW5zaWduZWQgaW50IG1paV9hZGRyID0gZGV2LT5iYXNlX2FkZHIgKyBBWE5FVF9NSUlfRUVQOwogICAgIHN3aXRjaCAoY21kKSB7CiAgICAgY2FzZSBTSU9DR01JSVBIWToKLQlkYXRhWzBdID0gaW5mby0+cGh5X2lkOworCWRhdGEtPnBoeV9pZCA9IGluZm8tPnBoeV9pZDsKICAgICBjYXNlIFNJT0NHTUlJUkVHOgkJLyogUmVhZCBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCWRhdGFbM10gPSBtZGlvX3JlYWQobWlpX2FkZHIsIGRhdGFbMF0sIGRhdGFbMV0gJiAweDFmKTsKKwlkYXRhLT52YWxfb3V0ID0gbWRpb19yZWFkKG1paV9hZGRyLCBkYXRhLT5waHlfaWQsIGRhdGEtPnJlZ19udW0gJiAweDFmKTsKIAlyZXR1cm4gMDsKICAgICBjYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JICAgIHJldHVybiAtRVBFUk07Ci0JbWRpb193cml0ZShtaWlfYWRkciwgZGF0YVswXSwgZGF0YVsxXSAmIDB4MWYsIGRhdGFbMl0pOworCW1kaW9fd3JpdGUobWlpX2FkZHIsIGRhdGEtPnBoeV9pZCwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTg5Myw4ICs4OTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCiAjZGVmaW5lIEJVR184M0M2OTAKIAogLyogVGhlc2UgYXJlIHRoZSBvcGVyYXRpb25hbCBmdW5jdGlvbiBpbnRlcmZhY2VzIHRvIGJvYXJkLXNwZWNpZmljCkBAIC0xMDY1LDcgKzEwNjMsOCBAQAogICogU2VuZHMgYSBwYWNrZXQgdG8gYW4gODM5MCBuZXR3b3JrIGRldmljZS4KICAqLwogIAotc3RhdGljIGludCBheG5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYXhuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTE3OSw3ICsxMTc4LDcgQEAKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2VuZF9sZW5ndGg7CiAgICAgCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA0NzlkNWI0Li43ZTAxZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTk2LDcgKzk2LDggQEAKIHN0YXRpYyBpbnQgZmpuX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7CiBzdGF0aWMgaW50IGZqbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBmam5fY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGZqbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGZqbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGZqbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGZqbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGZqbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTg1Niw3ICs4NTcsOCBAQAogICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBmam5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGZqbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGxvY2FsX2luZm9fdCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTg2NSw3ICs4NjcsNyBAQAogICAgIGlmIChsZW5ndGggPCBFVEhfWkxFTikKICAgICB7CiAgICAgCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0gICAgCQlyZXR1cm4gMDsKKyAgICAJCXJldHVybiBORVRERVZfVFhfT0s7CiAgICAgCWxlbmd0aCA9IEVUSF9aTEVOOwogICAgIH0KIApAQCAtOTI0LDcgKzkyNiw3IEBACiAgICAgfQogICAgIGRldl9rZnJlZV9za2IgKHNrYik7CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfSAvKiBmam5fc3RhcnRfeG1pdCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwppbmRleCAzNmRlOTFiLi41ZWQ2MzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCkBAIC00MjQsNyArNDI0LDggQEAKIHN0YXRpYyBpbnQgbWFjZV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApOwogc3RhdGljIGludCBtYWNlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG1hY2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IG1hY2Vfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBtYWNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbWFjZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IG1hY2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm1hY2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtOTM3LDcgKzkzOCw4IEBACiAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBtYWNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBtYWNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgIG1hY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICB1bnNpZ25lZCBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC05OTAsNyArOTkyLDcgQEAKIAogICBkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBORVRERVZfVFhfT0s7CiB9IC8qIG1hY2Vfc3RhcnRfeG1pdCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvcGNuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCmluZGV4IDllZjFjMWIuLjkwYTk0ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSAiLi4vODM5MC5oIgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CkBAIC0xMTkxLDcgKzExOTIsNyBAQAogc3RhdGljIGludCBlaV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewogICAgIHBjbmV0X2Rldl90ICppbmZvID0gUFJJVihkZXYpOwotICAgIHUxNiAqZGF0YSA9ICh1MTYgKikmcnEtPmlmcl9pZnJ1OworICAgIHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShycSk7CiAgICAgdW5zaWduZWQgaW50IG1paV9hZGRyID0gZGV2LT5iYXNlX2FkZHIgKyBETElOS19HUElPOwogCiAgICAgaWYgKCEoaW5mby0+ZmxhZ3MgJiAoSVNfREwxMDAxOXxJU19ETDEwMDIyKSkpCkBAIC0xMTk5LDE0ICsxMjAwLDEyIEBACiAKICAgICBzd2l0Y2ggKGNtZCkgewogICAgIGNhc2UgU0lPQ0dNSUlQSFk6Ci0JZGF0YVswXSA9IGluZm8tPnBoeV9pZDsKKwlkYXRhLT5waHlfaWQgPSBpbmZvLT5waHlfaWQ7CiAgICAgY2FzZSBTSU9DR01JSVJFRzoJCS8qIFJlYWQgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQlkYXRhWzNdID0gbWRpb19yZWFkKG1paV9hZGRyLCBkYXRhWzBdLCBkYXRhWzFdICYgMHgxZik7CisJZGF0YS0+dmFsX291dCA9IG1kaW9fcmVhZChtaWlfYWRkciwgZGF0YS0+cGh5X2lkLCBkYXRhLT5yZWdfbnVtICYgMHgxZik7CiAJcmV0dXJuIDA7CiAgICAgY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCSAgICByZXR1cm4gLUVQRVJNOwotCW1kaW9fd3JpdGUobWlpX2FkZHIsIGRhdGFbMF0sIGRhdGFbMV0gJiAweDFmLCBkYXRhWzJdKTsKKwltZGlvX3dyaXRlKG1paV9hZGRyLCBkYXRhLT5waHlfaWQsIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwogCXJldHVybiAwOwogICAgIH0KICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDM3ZTA1ZDMuLjdiZGUyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0yODgsNyArMjg4LDggQEAKIHN0YXRpYyBpbnQgc21jX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzbWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiBzdGF0aWMgdm9pZCBzbWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc21jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc21jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc21jX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgc21jX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzcwLDcgKzEzNzEsOCBAQAogICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBzbWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IHNtY19wcml2YXRlICpzbWMgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTEzOTksNyArMTQwMSw3IEBACiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAlzbWMtPnNhdmVkX3NrYiA9IE5VTEw7CiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JcmV0dXJuIDA7CQkvKiBEbyBub3QgcmUtcXVldWUgdGhpcyBwYWNrZXQuICovCisJcmV0dXJuIE5FVERFVl9UWF9PSzsJCS8qIERvIG5vdCByZS1xdWV1ZSB0aGlzIHBhY2tldC4gKi8KICAgICB9CiAgICAgLyogQSBwYWNrZXQgaXMgbm93IHdhaXRpbmcuICovCiAgICAgc21jLT5wYWNrZXRzX3dhaXRpbmcrKzsKQEAgLTE0MjIsNyArMTQyNCw3IEBACiAJICAgIG91dHcoKGlyJjB4ZmYwMCkgfCBJTV9BTExPQ19JTlQsIGlvYWRkciArIElOVEVSUlVQVCk7CiAJICAgIHNtY19oYXJkd2FyZV9zZW5kX3BhY2tldChkZXYpOwkvKiBTZW5kIHRoZSBwYWNrZXQgbm93Li4gKi8KIAkgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc21jLT5sb2NrLCBmbGFncyk7Ci0JICAgIHJldHVybiAwOworCSAgICByZXR1cm4gTkVUREVWX1RYX09LOwogCX0KICAgICB9CiAKQEAgLTE0MzEsNyArMTQzMyw3IEBACiAgICAgb3V0dygoSU1fQUxMT0NfSU5UIDw8IDgpIHwgKGlyICYgMHhmZjAwKSwgaW9hZGRyICsgSU5URVJSVVBUKTsKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbWMtPmxvY2ssIGZsYWdzKTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggZWYzN2QyMi4uY2Y4NDIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC04MCw2ICs4MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KQEAgLTM1Miw3ICszNTMsOCBAQAogLyoqKioqKioqKioqKioqKioKICAqIFNvbWUgbW9yZSBwcm90b3R5cGVzCiAgKi8KLXN0YXRpYyBpbnQgZG9fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBkb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyY190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyYzJwc190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIHNldF9hZGRyZXNzZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzYxLDcgKzEzNjMsNyBAQAogICAgIHNjaGVkdWxlX3dvcmsoJmxwLT50eF90aW1lb3V0X3Rhc2spOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGRvX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEzODQsNyArMTM4Niw3IEBACiAgICAgaWYgKHBrdGxlbiA8IEVUSF9aTEVOKQogICAgIHsKICAgICAgICAgaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLSAgICAgICAgCXJldHVybiAwOworICAgICAgICAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAlwa3RsZW4gPSBFVEhfWkxFTjsKICAgICB9CiAKQEAgLTE0MTQsNyArMTQxNiw3IEBACiAgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAgICAgZGV2LT5zdGF0cy50eF9ieXRlcyArPSBwa3RsZW47CiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioqKioqKioqKioqKioqKgpAQCAtMTU1NywyNiArMTU1OSwyNiBAQAogewogICAgIGxvY2FsX2luZm9fdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICB1MTYgKmRhdGEgPSAodTE2ICopJnJxLT5pZnJfaWZydTsKKyAgICBzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocnEpOwogCiAgICAgREVCVUcoMSwgIiVzOiBpb2N0bCglLS42cywgJSMwNHgpICUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCiAJICBkZXYtPm5hbWUsIHJxLT5pZnJfaWZybi5pZnJuX25hbWUsIGNtZCwKLQkgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworCSAgZGF0YS0+cGh5X2lkLCBkYXRhLT5yZWdfbnVtLCBkYXRhLT52YWxfaW4sIGRhdGEtPnZhbF9vdXQpOwogCiAgICAgaWYgKCFsb2NhbC0+bW9oYXdrKQogCXJldHVybiAtRU9QTk9UU1VQUDsKIAogICAgIHN3aXRjaChjbWQpIHsKICAgICAgIGNhc2UgU0lPQ0dNSUlQSFk6CQkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIFBIWSBpbiB1c2UuICovCi0JZGF0YVswXSA9IDA7CQkvKiB3ZSBoYXZlIG9ubHkgdGhpcyBhZGRyZXNzICovCisJZGF0YS0+cGh5X2lkID0gMDsJLyogd2UgaGF2ZSBvbmx5IHRoaXMgYWRkcmVzcyAqLwogCS8qIGZhbGwgdGhyb3VnaCAqLwogICAgICAgY2FzZSBTSU9DR01JSVJFRzoJCS8qIFJlYWQgdGhlIHNwZWNpZmllZCBNSUkgcmVnaXN0ZXIuICovCi0JZGF0YVszXSA9IG1paV9yZChpb2FkZHIsIGRhdGFbMF0gJiAweDFmLCBkYXRhWzFdICYgMHgxZik7CisJZGF0YS0+dmFsX291dCA9IG1paV9yZChpb2FkZHIsIGRhdGEtPnBoeV9pZCAmIDB4MWYsCisJCQkgICAgICAgZGF0YS0+cmVnX251bSAmIDB4MWYpOwogCWJyZWFrOwogICAgICAgY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIHRoZSBzcGVjaWZpZWQgTUlJIHJlZ2lzdGVyICovCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCSAgICByZXR1cm4gLUVQRVJNOwotCW1paV93cihpb2FkZHIsIGRhdGFbMF0gJiAweDFmLCBkYXRhWzFdICYgMHgxZiwgZGF0YVsyXSwgMTYpOworCW1paV93cihpb2FkZHIsIGRhdGEtPnBoeV9pZCAmIDB4MWYsIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4sCisJICAgICAgIDE2KTsKIAlicmVhazsKICAgICAgIGRlZmF1bHQ6CiAJcmV0dXJuIC1FT1BOT1RTVVBQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IDIzZTFhMDcuLjZkMjhiMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTMwMyw3ICszMDMsOCBAQAogc3RhdGljIGludCBwY25ldDMyX3Byb2JlMSh1bnNpZ25lZCBsb25nLCBpbnQsIHN0cnVjdCBwY2lfZGV2ICopOwogc3RhdGljIGludCBwY25ldDMyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHBjbmV0MzJfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBwY25ldDMyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgcGNuZXQzMl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBwY25ldDMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcGNuZXQzMl9pbnRlcnJ1cHQoaW50LCB2b2lkICopOwogc3RhdGljIGludCBwY25ldDMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwpAQCAtMjQ4MSw3ICsyNDgyLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHBjbmV0MzJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHBjbmV0MzJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0yNTM0LDcgKzI1MzYsNyBAQAogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogVGhlIFBDTkVUMzIgaW50ZXJydXB0IGhhbmRsZXIuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IGRlOWNmNTEuLmQ1ZDhlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC01Niw2ICs1NiwxMiBAQAogCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSBCQ001NDExLCBCQ001NDIxLCBCQ001NDYxLCBCQ001NDY0LCBCQ001NDgxCiAJICBhbmQgQkNNNTQ4MiBQSFlzLgogCitjb25maWcgQkNNNjNYWF9QSFkKKwl0cmlzdGF0ZSAiRHJpdmVycyBmb3IgQnJvYWRjb20gNjN4eCBTT0NzIGludGVybmFsIFBIWSIKKwlkZXBlbmRzIG9uIEJDTTYzWFgKKwktLS1oZWxwLS0tCisJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIDYzNDggYW5kIDYzNTggUEhZcy4KKwogY29uZmlnIElDUExVU19QSFkKIAl0cmlzdGF0ZSAiRHJpdmVycyBmb3IgSUNQbHVzIFBIWXMiCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCmluZGV4IDNhMWJmZWYuLmVkZmFhYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKQEAgLTExLDYgKzExLDcgQEAKIG9iai0kKENPTkZJR19TTVNDX1BIWSkJCSs9IHNtc2Mubwogb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKQkrPSB2aXRlc3NlLm8KIG9iai0kKENPTkZJR19CUk9BRENPTV9QSFkpCSs9IGJyb2FkY29tLm8KK29iai0kKENPTkZJR19CQ002M1hYX1BIWSkJKz0gYmNtNjN4eC5vCiBvYmotJChDT05GSUdfSUNQTFVTX1BIWSkJKz0gaWNwbHVzLm8KIG9iai0kKENPTkZJR19SRUFMVEVLX1BIWSkJKz0gcmVhbHRlay5vCiBvYmotJChDT05GSUdfTFNJX0VUMTAxMUNfUEhZKQkrPSBldDEwMTFjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9iY202M3h4LmMgYi9kcml2ZXJzL25ldC9waHkvYmNtNjN4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZWQ5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9waHkvYmNtNjN4eC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICoJRHJpdmVyIGZvciBCcm9hZGNvbSA2M3h4IFNPQ3MgaW50ZWdyYXRlZCBQSFlzCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICoJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjZGVmaW5lIE1JSV9CQ002M1hYX0lSCQkweDFhCS8qIGludGVycnVwdCByZWdpc3RlciAqLworI2RlZmluZSBNSUlfQkNNNjNYWF9JUl9FTgkweDQwMDAJLyogZ2xvYmFsIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgTUlJX0JDTTYzWFhfSVJfRFVQTEVYCTB4MDgwMAkvKiBkdXBsZXggY2hhbmdlZCAqLworI2RlZmluZSBNSUlfQkNNNjNYWF9JUl9TUEVFRAkweDA0MDAJLyogc3BlZWQgY2hhbmdlZCAqLworI2RlZmluZSBNSUlfQkNNNjNYWF9JUl9MSU5LCTB4MDIwMAkvKiBsaW5rIGNoYW5nZWQgKi8KKyNkZWZpbmUgTUlJX0JDTTYzWFhfSVJfR01BU0sJMHgwMTAwCS8qIGdsb2JhbCBpbnRlcnJ1cHQgbWFzayAqLworCitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIDYzeHggaW50ZXJuYWwgUEhZIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBiY202M3h4X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJlZywgZXJyOworCisJcmVnID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQkNNNjNYWF9JUik7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwkvKiBNYXNrIGludGVycnVwdHMgZ2xvYmFsbHkuICAqLworCXJlZyB8PSBNSUlfQkNNNjNYWF9JUl9HTUFTSzsKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQkNNNjNYWF9JUiwgcmVnKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIFVubWFzayBldmVudHMgd2UgYXJlIGludGVyZXN0ZWQgaW4gICovCisJcmVnID0gfihNSUlfQkNNNjNYWF9JUl9EVVBMRVggfAorCQlNSUlfQkNNNjNYWF9JUl9TUEVFRCB8CisJCU1JSV9CQ002M1hYX0lSX0xJTkspIHwKKwkJTUlJX0JDTTYzWFhfSVJfRU47CisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JDTTYzWFhfSVIsIHJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNjN4eF9hY2tfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJlZzsKKworCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cy4gICovCisJcmVnID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQkNNNjNYWF9JUik7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiY202M3h4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJlZywgZXJyOworCisJcmVnID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQkNNNjNYWF9JUik7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwlpZiAocGh5ZGV2LT5pbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkKKwkJcmVnICY9IH5NSUlfQkNNNjNYWF9JUl9HTUFTSzsKKwllbHNlCisJCXJlZyB8PSBNSUlfQkNNNjNYWF9JUl9HTUFTSzsKKworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CQ002M1hYX0lSLCByZWcpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY202M3h4XzFfZHJpdmVyID0geworCS5waHlfaWQJCT0gMHgwMDQwNjAwMCwKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmYzAwLAorCS5uYW1lCQk9ICJCcm9hZGNvbSBCQ002M1hYICgxKSIsCisJLyogQVNZTV9QQVVTRSBiaXQgaXMgbWFya2VkIFJPIGluIGRhdGFzaGVldCwgc28gZG9uJ3QgY2hlYXQgKi8KKwkuZmVhdHVyZXMJPSAoUEhZX0JBU0lDX0ZFQVRVUkVTIHwgU1VQUE9SVEVEX1BhdXNlKSwKKwkuZmxhZ3MJCT0gUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19pbml0CT0gYmNtNjN4eF9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0gYmNtNjN4eF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGJjbTYzeHhfY29uZmlnX2ludHIsCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCit9OworCisvKiBzYW1lIHBoeSBhcyBhYm92ZSwgd2l0aCBqdXN0IGEgZGlmZmVyZW50IE9VSSAqLworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTYzeHhfMl9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSAweDAwMmJkYzAwLAorCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZjMDAsCisJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTYzWFggKDIpIiwKKwkuZmVhdHVyZXMJPSAoUEhZX0JBU0lDX0ZFQVRVUkVTIHwgU1VQUE9SVEVEX1BhdXNlKSwKKwkuZmxhZ3MJCT0gUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19pbml0CT0gYmNtNjN4eF9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0gYmNtNjN4eF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGJjbTYzeHhfY29uZmlnX2ludHIsCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiY202M3h4X3BoeV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmJjbTYzeHhfMV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0XzYzeHhfMTsKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY202M3h4XzJfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF82M3h4XzI7CisJcmV0dXJuIHJldDsKKworb3V0XzYzeHhfMjoKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTYzeHhfMV9kcml2ZXIpOworb3V0XzYzeHhfMToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmNtNjN4eF9waHlfZXhpdCh2b2lkKQoreworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNjN4eF8xX2RyaXZlcik7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY202M3h4XzJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYmNtNjN4eF9waHlfaW5pdCk7Cittb2R1bGVfZXhpdChiY202M3h4X3BoeV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKaW5kZXggMTkwZWZjMy4uZjgxZTUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKQEAgLTE4LDYgKzE4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNkZWZpbmUgUEhZX0lEX0JDTTUwNjEwCQkweDAxNDNiZDYwCisjZGVmaW5lIFBIWV9JRF9CQ001MDYxME0JMHgwMTQzYmQ3MAorI2RlZmluZSBQSFlfSURfQkNNNTc3ODAJCTB4MDM2MjVkOTAKKworI2RlZmluZSBCUkNNX1BIWV9NT0RFTChwaHlkZXYpIFwKKwkoKHBoeWRldiktPmRydi0+cGh5X2lkICYgKHBoeWRldiktPmRydi0+cGh5X2lkX21hc2spCisKIAogI2RlZmluZSBNSUlfQkNNNTRYWF9FQ1IJCTB4MTAJLyogQkNNNTR4eCBleHRlbmRlZCBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9CQ001NFhYX0VDUl9JTQkweDEwMDAJLyogSW50ZXJydXB0IG1hc2sgKi8KQEAgLTExNyw2ICsxMjMsNyBAQAogI2RlZmluZSAgTUlJX0JDTTU0WFhfRVhQX0VYUDA4X0VBUkxZX0RBQ19XQUtFCTB4MDIwMAogI2RlZmluZSBNSUlfQkNNNTRYWF9FWFBfRVhQNzUJCQkweDBmNzUKICNkZWZpbmUgIE1JSV9CQ001NFhYX0VYUF9FWFA3NV9WREFDQ1RSTAkJMHgwMDNjCisjZGVmaW5lICBNSUlfQkNNNTRYWF9FWFBfRVhQNzVfQ01fT1NDCQkweDAwMDEKICNkZWZpbmUgTUlJX0JDTTU0WFhfRVhQX0VYUDk2CQkJMHgwZjk2CiAjZGVmaW5lICBNSUlfQkNNNTRYWF9FWFBfRVhQOTZfTVlTVAkJMHgwMDEwCiAjZGVmaW5lIE1JSV9CQ001NFhYX0VYUF9FWFA5NwkJCTB4MGY5NwpAQCAtMTQxLDYgKzE0OCwzNSBAQAogI2RlZmluZSBQSFlfQkNNX0ZMQUdTX01PREVfMTAwMEJYCTB4MDAwMDAwMDIKICNkZWZpbmUgUEhZX0JDTV9GTEFHU19NT0RFX0NPUFBFUgkweDAwMDAwMDAxCiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRmFzdCBFdGhlcm5ldCBUcmFuc2NlaXZlciBkZWZpbml0aW9ucy4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBNSUlfQlJDTV9GRVRfSU5UUkVHCQkweDFhCS8qIEludGVycnVwdCByZWdpc3RlciAqLworI2RlZmluZSBNSUlfQlJDTV9GRVRfSVJfTUFTSwkJMHgwMTAwCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KKyNkZWZpbmUgTUlJX0JSQ01fRkVUX0lSX0xJTktfRU4JCTB4MDIwMAkvKiBMaW5rIHN0YXR1cyBjaGFuZ2UgZW5hYmxlICovCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9JUl9TUEVFRF9FTgkweDA0MDAJLyogTGluayBzcGVlZCBjaGFuZ2UgZW5hYmxlICovCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9JUl9EVVBMRVhfRU4JMHgwODAwCS8qIER1cGxleCBtb2RlIGNoYW5nZSBlbmFibGUgKi8KKyNkZWZpbmUgTUlJX0JSQ01fRkVUX0lSX0VOQUJMRQkJMHg0MDAwCS8qIEludGVycnVwdCBlbmFibGUgKi8KKworI2RlZmluZSBNSUlfQlJDTV9GRVRfQlJDTVRFU1QJCTB4MWYJLyogQnJjbSB0ZXN0IHJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9CVF9TUkUJCTB4MDA4MAkvKiBTaGFkb3cgcmVnaXN0ZXIgZW5hYmxlICovCisKKworLyoqKiBTaGFkb3cgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKioqLworCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9TSERXX01JU0NDVFJMCTB4MTAJLyogU2hhZG93IG1pc2MgY3RybCAqLworI2RlZmluZSBNSUlfQlJDTV9GRVRfU0hEV19NQ19GQU1FCTB4NDAwMAkvKiBGb3JjZSBBdXRvIE1ESVggZW5hYmxlICovCisKKyNkZWZpbmUgTUlJX0JSQ01fRkVUX1NIRFdfQVVYTU9ERTQJMHgxYQkvKiBBdXhpbGlhcnkgbW9kZSA0ICovCisjZGVmaW5lIE1JSV9CUkNNX0ZFVF9TSERXX0FNNF9MRURfTUFTSwkweDAwMDMKKyNkZWZpbmUgTUlJX0JSQ01fRkVUX1NIRFdfQU00X0xFRF9NT0RFMSAweDAwMDEKKworI2RlZmluZSBNSUlfQlJDTV9GRVRfU0hEV19BVVhTVEFUMgkweDFiCS8qIEF1eGlsaWFyeSBzdGF0dXMgMiAqLworI2RlZmluZSBNSUlfQlJDTV9GRVRfU0hEV19BUzJfQVBERQkweDAwMjAJLyogQXV0byBwb3dlciBkb3duIGVuYWJsZSAqLworCisKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gUEhZIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWFjaWVqIFcuIFJvenlja2kiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTE2NCw3ICsyMDAsNyBAQAogfQogCiAvKiBJbmRpcmVjdCByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zIGZvciB0aGUgRXhwYW5zaW9uIFJlZ2lzdGVycyAqLwotc3RhdGljIGludCBiY201NHh4X2V4cF9yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHU4IHJlZ251bSkKK3N0YXRpYyBpbnQgYmNtNTR4eF9leHBfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKQogewogCWludCB2YWw7CiAKQEAgLTI3OCw2ICszMTQsMzMgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKEJSQ01fUEhZX01PREVMKHBoeWRldikgPT0gUEhZX0lEX0JDTTU3NzgwKSB7CisJCWludCBlcnIyOworCisJCWVyciA9IGJjbTU0eHhfYXV4Y3RsX3dyaXRlKHBoeWRldiwKKwkJCQkJICAgTUlJX0JDTTU0WFhfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMLAorCQkJCQkgICBNSUlfQkNNNTRYWF9BVVhDVExfQUNUTF9TTURTUF9FTkEgfAorCQkJCQkgICBNSUlfQkNNNTRYWF9BVVhDVExfQUNUTF9UWF82REIpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwkJcmVnID0gYmNtNTR4eF9leHBfcmVhZChwaHlkZXYsIE1JSV9CQ001NFhYX0VYUF9FWFA3NSk7CisJCWlmIChyZWcgPCAwKQorCQkJZ290byBlcnJvcjsKKworCQlyZWcgfD0gTUlJX0JDTTU0WFhfRVhQX0VYUDc1X0NNX09TQzsKKwkJZXJyID0gYmNtNTR4eF9leHBfd3JpdGUocGh5ZGV2LCBNSUlfQkNNNTRYWF9FWFBfRVhQNzUsIHJlZyk7CisKK2Vycm9yOgorCQllcnIyID0gYmNtNTR4eF9hdXhjdGxfd3JpdGUocGh5ZGV2LAorCQkJCQkgICAgTUlJX0JDTTU0WFhfQVVYQ1RMX1NIRFdTRUxfQVVYQ1RMLAorCQkJCQkgICAgTUlJX0JDTTU0WFhfQVVYQ1RMX0FDVExfVFhfNkRCKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmIChlcnIyKQorCQkJcmV0dXJuIGVycjI7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNSw2ICs0OTgsMTE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBicmNtX3BoeV9zZXRiaXRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWcsIGludCBzZXQpCit7CisJaW50IHZhbDsKKworCXZhbCA9IHBoeV9yZWFkKHBoeWRldiwgcmVnKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCByZWcsIHZhbCB8IHNldCk7Cit9CisKK3N0YXRpYyBpbnQgYnJjbV9mZXRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgcmVnLCBlcnIsIGVycjIsIGJyY210ZXN0OworCisJLyogUmVzZXQgdGhlIFBIWSB0byBicmluZyBpdCB0byBhIGtub3duIHN0YXRlLiAqLworCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JSQ01fRkVUX0lOVFJFRyk7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwkvKiBVbm1hc2sgZXZlbnRzIHdlIGFyZSBpbnRlcmVzdGVkIGluIGFuZCBtYXNrIGludGVycnVwdHMgZ2xvYmFsbHkuICovCisJcmVnID0gTUlJX0JSQ01fRkVUX0lSX0RVUExFWF9FTiB8CisJICAgICAgTUlJX0JSQ01fRkVUX0lSX1NQRUVEX0VOIHwKKwkgICAgICBNSUlfQlJDTV9GRVRfSVJfTElOS19FTiB8CisJICAgICAgTUlJX0JSQ01fRkVUX0lSX0VOQUJMRSB8CisJICAgICAgTUlJX0JSQ01fRkVUX0lSX01BU0s7CisKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQlJDTV9GRVRfSU5UUkVHLCByZWcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogRW5hYmxlIHNoYWRvdyByZWdpc3RlciBhY2Nlc3MgKi8KKwlicmNtdGVzdCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JSQ01fRkVUX0JSQ01URVNUKTsKKwlpZiAoYnJjbXRlc3QgPCAwKQorCQlyZXR1cm4gYnJjbXRlc3Q7CisKKwlyZWcgPSBicmNtdGVzdCB8IE1JSV9CUkNNX0ZFVF9CVF9TUkU7CisKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQlJDTV9GRVRfQlJDTVRFU1QsIHJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBTZXQgdGhlIExFRCBtb2RlICovCisJcmVnID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQlJDTV9GRVRfU0hEV19BVVhNT0RFNCk7CisJaWYgKHJlZyA8IDApIHsKKwkJZXJyID0gcmVnOworCQlnb3RvIGRvbmU7CisJfQorCisJcmVnICY9IH5NSUlfQlJDTV9GRVRfU0hEV19BTTRfTEVEX01BU0s7CisJcmVnIHw9IE1JSV9CUkNNX0ZFVF9TSERXX0FNNF9MRURfTU9ERTE7CisKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQlJDTV9GRVRfU0hEV19BVVhNT0RFNCwgcmVnKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBkb25lOworCisJLyogRW5hYmxlIGF1dG8gTURJWCAqLworCWVyciA9IGJyY21fcGh5X3NldGJpdHMocGh5ZGV2LCBNSUlfQlJDTV9GRVRfU0hEV19NSVNDQ1RSTCwKKwkJCQkgICAgICAgTUlJX0JSQ01fRkVUX1NIRFdfTUNfRkFNRSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZG9uZTsKKworCS8qIEVuYWJsZSBhdXRvIHBvd2VyIGRvd24gKi8KKwllcnIgPSBicmNtX3BoeV9zZXRiaXRzKHBoeWRldiwgTUlJX0JSQ01fRkVUX1NIRFdfQVVYU1RBVDIsCisJCQkJICAgICAgIE1JSV9CUkNNX0ZFVF9TSERXX0FTMl9BUERFKTsKKworZG9uZToKKwkvKiBEaXNhYmxlIHNoYWRvdyByZWdpc3RlciBhY2Nlc3MgKi8KKwllcnIyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JSQ01fRkVUX0JSQ01URVNULCBicmNtdGVzdCk7CisJaWYgKCFlcnIpCisJCWVyciA9IGVycjI7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJyY21fZmV0X2Fja19pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgcmVnOworCisJLyogQ2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzLiAgKi8KKwlyZWcgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CUkNNX0ZFVF9JTlRSRUcpOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnJjbV9mZXRfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgcmVnLCBlcnI7CisKKwlyZWcgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CUkNNX0ZFVF9JTlRSRUcpOworCWlmIChyZWcgPCAwKQorCQlyZXR1cm4gcmVnOworCisJaWYgKHBoeWRldi0+aW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpCisJCXJlZyAmPSB+TUlJX0JSQ01fRkVUX0lSX01BU0s7CisJZWxzZQorCQlyZWcgfD0gTUlJX0JSQ01fRkVUX0lSX01BU0s7CisKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQlJDTV9GRVRfSU5UUkVHLCByZWcpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDExX2RyaXZlciA9IHsKIAkucGh5X2lkCQk9IDB4MDAyMDYwNzAsCiAJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKQEAgLTQ0Nyw3ICs2MTgsNyBAQAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKIAkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKIAkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0MjFfZHJpdmVyID0gewpAQCAtNDYyLDcgKzYzMyw3IEBACiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAogCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCi0JLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTQ2MV9kcml2ZXIgPSB7CkBAIC00NzcsNyArNjQ4LDcgQEAKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCiAJLmFja19pbnRlcnJ1cHQJPSBiY201NHh4X2Fja19pbnRlcnJ1cHQsCiAJLmNvbmZpZ19pbnRyCT0gYmNtNTR4eF9jb25maWdfaW50ciwKLQkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDY0X2RyaXZlciA9IHsKQEAgLTQ5Miw3ICs2NjMsNyBAQAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKIAkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKIAkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0ODFfZHJpdmVyID0gewpAQCAtNTA3LDcgKzY3OCw3IEBACiAJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAogCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCi0JLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTQ4Ml9kcml2ZXIgPSB7CkBAIC01MjIsNyArNjkzLDcgQEAKIAkucmVhZF9zdGF0dXMJPSBiY201NDgyX3JlYWRfc3RhdHVzLAogCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAogCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCi0JLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTA2MTBfZHJpdmVyID0gewpAQCAtNTM3LDExICs3MDgsMjYgQEAKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCiAJLmFja19pbnRlcnJ1cHQJPSBiY201NHh4X2Fja19pbnRlcnJ1cHQsCiAJLmNvbmZpZ19pbnRyCT0gYmNtNTR4eF9jb25maWdfaW50ciwKLQkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKKwkuZHJpdmVyCQk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201MDYxMG1fZHJpdmVyID0geworCS5waHlfaWQJCT0gUEhZX0lEX0JDTTUwNjEwTSwKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAorCS5uYW1lCQk9ICJCcm9hZGNvbSBCQ001MDYxME0iLAorCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTIHwKKwkJCSAgU1VQUE9SVEVEX1BhdXNlIHwgU1VQUE9SVEVEX0FzeW1fUGF1c2UsCisJLmZsYWdzCQk9IFBIWV9IQVNfTUFHSUNBTkVHIHwgUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19pbml0CT0gYmNtNTR4eF9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTc3ODBfZHJpdmVyID0gewotCS5waHlfaWQJCT0gMHgwMzYyNWQ5MCwKKwkucGh5X2lkCQk9IFBIWV9JRF9CQ001Nzc4MCwKIAkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAogCS5uYW1lCQk9ICJCcm9hZGNvbSBCQ001Nzc4MCIsCiAJLmZlYXR1cmVzCT0gUEhZX0dCSVRfRkVBVFVSRVMgfApAQCAtNTUyLDcgKzczOCwyMiBAQAogCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKIAkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKIAkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAotCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbWFjMTMxX2RyaXZlciA9IHsKKwkucGh5X2lkCQk9IDB4MDE0M2JjNzAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiQnJvYWRjb20gQkNNQUMxMzEiLAorCS5mZWF0dXJlcwk9IFBIWV9CQVNJQ19GRUFUVVJFUyB8CisJCQkgIFNVUFBPUlRFRF9QYXVzZSB8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlLAorCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdAk9IGJyY21fZmV0X2NvbmZpZ19pbml0LAorCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmFja19pbnRlcnJ1cHQJPSBicmNtX2ZldF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGJyY21fZmV0X2NvbmZpZ19pbnRyLAorCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYnJvYWRjb21faW5pdCh2b2lkKQpAQCAtNTgwLDEyICs3ODEsMjIgQEAKIAlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201MDYxMF9kcml2ZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0XzUwNjEwOworCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmJjbTUwNjEwbV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0XzUwNjEwbTsKIAlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiY201Nzc4MF9kcml2ZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0XzU3NzgwOworCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmJjbWFjMTMxX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfYWMxMzE7CiAJcmV0dXJuIHJldDsKIAorb3V0X2FjMTMxOgorCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTc3ODBfZHJpdmVyKTsKIG91dF81Nzc4MDoKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTUwNjEwbV9kcml2ZXIpOworb3V0XzUwNjEwbToKIAlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTUwNjEwX2RyaXZlcik7CiBvdXRfNTA2MTA6CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201NDgyX2RyaXZlcik7CkBAIC02MDUsNyArODE2LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGJyb2FkY29tX2V4aXQodm9pZCkKIHsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbWFjMTMxX2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201Nzc4MF9kcml2ZXIpOworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTA2MTBtX2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201MDYxMF9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTQ4Ml9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYmNtNTQ4MV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKaW5kZXggZGQ2ZjU0ZC4uNmY2OWI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCkBAIC0xNTUsOCArMTU1LDI3IEBACiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAotCXJldHVybiBlcnI7CisJaWYgKHBoeWRldi0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkgeworCQlpbnQgYm1jcjsKKworCQkvKgorCQkgKiBBIHdyaXRlIHRvIHNwZWVkL2R1cGxleCBiaXRzICh0aGF0IGlzIHBlcmZvcm1lZCBieQorCQkgKiBnZW5waHlfY29uZmlnX2FuZWcoKSBjYWxsIGFib3ZlKSBtdXN0IGJlIGZvbGxvd2VkIGJ5CisJCSAqIGEgc29mdHdhcmUgcmVzZXQuIE90aGVyd2lzZSwgdGhlIHdyaXRlIGhhcyBubyBlZmZlY3QuCisJCSAqLworCQlibWNyID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CisJCWlmIChibWNyIDwgMCkKKwkJCXJldHVybiBibWNyOworCisJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCBibWNyIHwgQk1DUl9SRVNFVCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtODhlMTEyMV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCmluZGV4IDIyY2RkNDUuLjI1MGUxMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiAJbmV3X2J1cyA9IG1kaW9fZ3Bpb19idXNfaW5pdCgmb2ZkZXYtPmRldiwgcGRhdGEsIHBkYXRhLT5tZGMpOwogCWlmICghbmV3X2J1cykKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CiAKIAlyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMsIG9mZGV2LT5ub2RlKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IGVkYTk0ZmMuLjZiNzFiMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTMyNCw5ICszMjQsNiBAQAogCQlicmVhazsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KIAkJaWYgKG1paV9kYXRhLT5waHlfaWQgPT0gcGh5ZGV2LT5hZGRyKSB7CiAJCQlzd2l0Y2gobWlpX2RhdGEtPnJlZ19udW0pIHsKIAkJCWNhc2UgTUlJX0JNQ1I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wbGlwLmMgYi9kcml2ZXJzL25ldC9wbGlwLmMKaW5kZXggMmNhOGIwZC4uMDA0ODdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGxpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3BsaXAuYwpAQCAtOTkwLDcgKzk5MCw3IEBACiAJc2NoZWR1bGVfd29yaygmbmwtPmltbWVkaWF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZubC0+bG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggY2QzN2Q3My4uOWJmMmE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC05NTEsNyArOTUxLDcgQEAKIC8qCiAgKiBOZXR3b3JrIGludGVyZmFjZSB1bml0IHJvdXRpbmVzLgogICovCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHBwcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBwcCAqcHBwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTk4OCwxMiArOTg4LDEyIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNrYl9xdWV1ZV90YWlsKCZwcHAtPmZpbGUueHEsIHNrYik7CiAJcHBwX3htaXRfcHJvY2VzcyhwcHApOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKICBvdXRmOgogCWtmcmVlX3NrYihza2IpOwogCSsrZGV2LT5zdGF0cy50eF9kcm9wcGVkOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE0MzEsNiArMTQzMSw3IEBACiAJCSpvdGhlcndpc2UgZGl2aWRlIGl0IGFjY29yZGluZyB0byB0aGUgc3BlZWQKIAkJKm9mIHRoZSBjaGFubmVsIHdlIGFyZSBnb2luZyB0byB0cmFuc21pdCBvbgogCQkqLworCQlmbGVuID0gbGVuOwogCQlpZiAobmZyZWUgPiAwKSB7CiAJCQlpZiAocGNoLT5zcGVlZCA9PSAwKSB7CiAJCQkJZmxlbiA9IHRvdGxlbi9uZnJlZQk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCA1ZjIwOTAyLi43Y2JmNmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTExODUsNDAgKzExODUsNDAgQEAKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnBwcG9lX3NrX3Byb3RvLCAwKTsKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmcHBwb2VfbmV0X2lkLCAmcHBwb2VfbmV0X29wcyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKKwllcnIgPSBwcm90b19yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8sIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfbmV0X29wczsKKwogCWVyciA9IHJlZ2lzdGVyX3BwcG94X3Byb3RvKFBYX1BST1RPX09FLCAmcHBwb2VfcHJvdG8pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcHBwb2VfcHJvdG87CiAKLQllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmcHBwb2VfbmV0X2lkLCAmcHBwb2VfbmV0X29wcyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcHBveF9wcm90bzsKLQogCWRldl9hZGRfcGFjaygmcHBwb2VzX3B0eXBlKTsKIAlkZXZfYWRkX3BhY2soJnBwcG9lZF9wdHlwZSk7CiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwcHBvZV9ub3RpZmllcik7CiAKIAlyZXR1cm4gMDsKIAotb3V0X3VucmVnaXN0ZXJfcHBwb3hfcHJvdG86Ci0JdW5yZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PRSk7CiBvdXRfdW5yZWdpc3Rlcl9wcHBvZV9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvZV9za19wcm90byk7CitvdXRfdW5yZWdpc3Rlcl9uZXRfb3BzOgorCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UocHBwb2VfbmV0X2lkLCAmcHBwb2VfbmV0X29wcyk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBwcG9lX2V4aXQodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3BwcG94X3Byb3RvKFBYX1BST1RPX09FKTsKLQlkZXZfcmVtb3ZlX3BhY2soJnBwcG9lc19wdHlwZSk7Ci0JZGV2X3JlbW92ZV9wYWNrKCZwcHBvZWRfcHR5cGUpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwcHBvZV9ub3RpZmllcik7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKKwlkZXZfcmVtb3ZlX3BhY2soJnBwcG9lZF9wdHlwZSk7CisJZGV2X3JlbW92ZV9wYWNrKCZwcHBvZXNfcHR5cGUpOworCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UpOwogCXByb3RvX3VucmVnaXN0ZXIoJnBwcG9lX3NrX3Byb3RvKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHBwcG9lX25ldF9pZCwgJnBwcG9lX25ldF9vcHMpOwogfQogCiBtb2R1bGVfaW5pdChwcHBvZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwppbmRleCBhMzkzMmM5Li5iMjExNjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCkBAIC0xMzQ2LDcgKzEzNDYsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2VsaWNfZXRoZXJfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGdlbGljX2V0aGVyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwk9IGdlbGljX25ldF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzCT0gZ2VsaWNfZXRoZXJfZ2V0X3NldHRpbmdzLAogCS5nZXRfbGluawk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCmluZGV4IDY5MzJiMDguLjIyN2IxNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY193aXJlbGVzcy5jCkBAIC0yNzE0LDcgKzI3MTQsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGdlbGljX3dsX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZ2VsaWNfd2xfZ2V0X2xpbmssCiAJLmdldF90eF9jc3VtCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwppbmRleCAzZTRiNjdhLi40YzYxMDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCkBAIC0yNTcyLDcgKzI1NzIsOCBAQAogICogVGhlIElPQ0IgaXMgYWx3YXlzIHRoZSB0b3Agb2YgdGhlIGNoYWluIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlCiAgKiBPQUxzICh3aGVuIG5lY2Vzc2FyeSkuCiAgKi8KLXN0YXRpYyBpbnQgcWwzeHh4X3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgcWwzeHh4X3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsM19hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZS5oIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKaW5kZXggNmVkNTMxNy4uYTk4NDVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmgKQEAgLTEyODcsMTIgKzEyODcsMTEgQEAKIAl1MzIgc2JxX2ZyZWVfY250OwkvKiBmcmVlIGJ1ZmZlciBkZXNjIGNudCAqLwogCiAJLyogTWlzYy4gaGFuZGxlciBlbGVtZW50cy4gKi8KLQl1MzIgdHlwZTsJCS8qIFR5cGUgb2YgcXVldWUsIHR4LCByeCwgb3IgZGVmYXVsdC4gKi8KKwl1MzIgdHlwZTsJCS8qIFR5cGUgb2YgcXVldWUsIHR4LCByeC4gKi8KIAl1MzIgaXJxOwkJLyogV2hpY2ggdmVjdG9yIHRoaXMgcmluZyBpcyBhc3NpZ25lZC4gKi8KIAl1MzIgY3B1OwkJLyogV2hpY2ggQ1BVIHRoaXMgc2hvdWxkIHJ1biBvbi4gKi8KIAljaGFyIG5hbWVbSUZOQU1TSVogKyA1XTsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJ4X3dvcms7CiAJdTggcmVzZXJ2ZWQ7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXY7CiB9OwpAQCAtMTM2Niw2ICsxMzY1LDcgQEAKIHN0cnVjdCBpbnRyX2NvbnRleHQgewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2OwogCXUzMiBpbnRyOworCXUzMiBpcnFfbWFzazsJCS8qIE1hc2sgb2Ygd2hpY2ggcmluZ3MgdGhlIHZlY3RvciBzZXJ2aWNlcy4gKi8KIAl1MzIgaG9va2VkOwogCXUzMiBpbnRyX2VuX21hc2s7CS8qIHZhbHVlL21hc2sgdXNlZCB0byBlbmFibGUgdGhpcyBpbnRyICovCiAJdTMyIGludHJfZGlzX21hc2s7CS8qIHZhbHVlL21hc2sgdXNlZCB0byBkaXNhYmxlIHRoaXMgaW50ciAqLwpAQCAtMTQ4NiwxMyArMTQ4NiwxMSBAQAogCXN0cnVjdCBpbnRyX2NvbnRleHQgaW50cl9jb250ZXh0W01BWF9SWF9SSU5HU107CiAKIAlpbnQgdHhfcmluZ19jb3VudDsJLyogT25lIHBlciBvbmxpbmUgQ1BVLiAqLwotCXUzMiByc3NfcmluZ19maXJzdF9jcV9pZDsvKiBpbmRleCBvZiBmaXJzdCBpbmJvdW5kIChyc3MpIHJ4X3JpbmcgKi8KLQl1MzIgcnNzX3JpbmdfY291bnQ7CS8qIE9uZSBwZXIgb25saW5lIENQVS4gICovCisJdTMyIHJzc19yaW5nX2NvdW50OwkvKiBPbmUgcGVyIGlycSB2ZWN0b3IuICAqLwogCS8qCiAJICogcnhfcmluZ19jb3VudCA9Ci0JICogIG9uZSBkZWZhdWx0IHF1ZXVlICsKIAkgKiAgKENQVSBjb3VudCAqIG91dGJvdW5kIGNvbXBsZXRpb24gcnhfcmluZykgKwotCSAqICAoQ1BVIGNvdW50ICogaW5ib3VuZCAoUlNTKSBjb21wbGV0aW9uIHJ4X3JpbmcpCisJICogIChpcnFfdmVjdG9yX2NudCAqIGluYm91bmQgKFJTUykgY29tcGxldGlvbiByeF9yaW5nKQogCSAqLwogCWludCByeF9yaW5nX2NvdW50OwogCWludCByaW5nX21lbV9zaXplOwpAQCAtMTUxOSw3ICsxNTE3LDYgQEAKIAl1bmlvbiBmbGFzaF9wYXJhbXMgZmxhc2g7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcV93b3JrcXVldWU7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGFzaWNfcmVzZXRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV9yZXNldF93b3JrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCmluZGV4IDQwYTcwYzMuLmFhODhjYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKQEAgLTQxOCw4ICs0MTgsNiBAQAogCXByaW50ayhLRVJOX0VSUiBQRlggInFkZXYtPmludHJfY291bnQgCT0gJWQuXG4iLCBxZGV2LT5pbnRyX2NvdW50KTsKIAlwcmludGsoS0VSTl9FUlIgUEZYICJxZGV2LT50eF9yaW5nCQk9ICVwLlxuIiwKIAkgICAgICAgcWRldi0+dHhfcmluZyk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQgCT0gJWQuXG4iLAotCSAgICAgICBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCk7CiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+cnNzX3JpbmdfY291bnQgCT0gJWQuXG4iLAogCSAgICAgICBxZGV2LT5yc3NfcmluZ19jb3VudCk7CiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAicWRldi0+cnhfcmluZwk9ICVwLlxuIiwgcWRldi0+cnhfcmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCBlYjZhOWVlLi42OGY5YmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTQ5LDEwICs0OSwxMSBAQAogCS8qIFNraXAgdGhlIGRlZmF1bHQgcXVldWUsIGFuZCB1cGRhdGUgdGhlIG91dGJvdW5kIGhhbmRsZXIKIAkgKiBxdWV1ZXMgaWYgdGhleSBjaGFuZ2VkLgogCSAqLwotCWNxaWNiID0gKHN0cnVjdCBjcWljYiAqKSZxZGV2LT5yeF9yaW5nWzFdOworCWNxaWNiID0gKHN0cnVjdCBjcWljYiAqKSZxZGV2LT5yeF9yaW5nW3FkZXYtPnJzc19yaW5nX2NvdW50XTsKIAlpZiAobGUxNl90b19jcHUoY3FpY2ItPmlycV9kZWxheSkgIT0gcWRldi0+dHhfY29hbGVzY2VfdXNlY3MgfHwKLQkgICAgbGUxNl90b19jcHUoY3FpY2ItPnBrdF9kZWxheSkgIT0gcWRldi0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpIHsKLQkJZm9yIChpID0gMTsgaSA8IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkOyBpKyssIHJ4X3JpbmcrKykgeworCQlsZTE2X3RvX2NwdShjcWljYi0+cGt0X2RlbGF5KSAhPQorCQkJCXFkZXYtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzKSB7CisJCWZvciAoaSA9IHFkZXYtPnJzc19yaW5nX2NvdW50OyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7CiAJCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07CiAJCQljcWljYiA9IChzdHJ1Y3QgY3FpY2IgKilyeF9yaW5nOwogCQkJY3FpY2ItPmlycV9kZWxheSA9IGNwdV90b19sZTE2KHFkZXYtPnR4X2NvYWxlc2NlX3VzZWNzKTsKQEAgLTcwLDEyICs3MSwxMSBAQAogCX0KIAogCS8qIFVwZGF0ZSB0aGUgaW5ib3VuZCAoUlNTKSBoYW5kbGVyIHF1ZXVlcyBpZiB0aGV5IGNoYW5nZWQuICovCi0JY3FpY2IgPSAoc3RydWN0IGNxaWNiICopJnFkZXYtPnJ4X3JpbmdbcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWRdOworCWNxaWNiID0gKHN0cnVjdCBjcWljYiAqKSZxZGV2LT5yeF9yaW5nWzBdOwogCWlmIChsZTE2X3RvX2NwdShjcWljYi0+aXJxX2RlbGF5KSAhPSBxZGV2LT5yeF9jb2FsZXNjZV91c2VjcyB8fAotCSAgICBsZTE2X3RvX2NwdShjcWljYi0+cGt0X2RlbGF5KSAhPSBxZGV2LT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcykgewotCQlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsKLQkJICAgICBpIDw9IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkICsgcWRldi0+cnNzX3JpbmdfY291bnQ7Ci0JCSAgICAgaSsrKSB7CisJCWxlMTZfdG9fY3B1KGNxaWNiLT5wa3RfZGVsYXkpICE9CisJCQkJCXFkZXYtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSsrLCByeF9yaW5nKyspIHsKIAkJCXJ4X3JpbmcgPSAmcWRldi0+cnhfcmluZ1tpXTsKIAkJCWNxaWNiID0gKHN0cnVjdCBjcWljYiAqKXJ4X3Jpbmc7CiAJCQljcWljYi0+aXJxX2RlbGF5ID0gY3B1X3RvX2xlMTYocWRldi0+cnhfY29hbGVzY2VfdXNlY3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKaW5kZXggNTc2OGFmMS4uMjIwNTI5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCkBAIC0zNzAsOSArMzcwLDcgQEAKIAkJCQljYW1fb3V0cHV0ID0gKENBTV9PVVRfUk9VVEVfTklDIHwKIAkJCQkJICAgICAgKHFkZXYtPgogCQkJCQkgICAgICAgZnVuYyA8PCBDQU1fT1VUX0ZVTkNfU0hJRlQpIHwKLQkJCQkJICAgICAgKHFkZXYtPgotCQkJCQkgICAgICAgcnNzX3JpbmdfZmlyc3RfY3FfaWQgPDwKLQkJCQkJICAgICAgIENBTV9PVVRfQ1FfSURfU0hJRlQpKTsKKwkJCQkJCSgwIDw8IENBTV9PVVRfQ1FfSURfU0hJRlQpKTsKIAkJCQlpZiAocWRldi0+dmxncnApCiAJCQkJCWNhbV9vdXRwdXQgfD0gQ0FNX09VVF9SVjsKIAkJCQkvKiByb3V0ZSB0byBOSUMgY29yZSAqLwpAQCAtMTY0OSw4ICsxNjQ3LDcgQEAKIAogCXFkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlxZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwKLQkJcnhfcmluZy0+Y3FfaWQgLSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCk7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4X3JpbmctPmNxX2lkKTsKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKIAkJaWYgKHFkZXYtPnZsZ3JwICYmCiAJCQkoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1YpICYmCkBAIC0xODYyLDExICsxODU5LDQxIEBACiB7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHJ4X3JpbmcsIG5hcGkpOwogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gcnhfcmluZy0+cWRldjsKLQlpbnQgd29ya19kb25lID0gcWxfY2xlYW5faW5ib3VuZF9yeF9yaW5nKHJ4X3JpbmcsIGJ1ZGdldCk7CisJc3RydWN0IHJ4X3JpbmcgKnRyeF9yaW5nOworCWludCBpLCB3b3JrX2RvbmUgPSAwOworCXN0cnVjdCBpbnRyX2NvbnRleHQgKmN0eCA9ICZxZGV2LT5pbnRyX2NvbnRleHRbcnhfcmluZy0+Y3FfaWRdOwogCiAJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLCAiRW50ZXIsIE5BUEkgUE9MTCBjcV9pZCA9ICVkLlxuIiwKIAkJcnhfcmluZy0+Y3FfaWQpOwogCisJLyogU2VydmljZSB0aGUgVFggcmluZ3MgZmlyc3QuICBUaGV5IHN0YXJ0CisJICogcmlnaHQgYWZ0ZXIgdGhlIFJTUyByaW5ncy4gKi8KKwlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCQl0cnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOworCQkvKiBJZiB0aGlzIFRYIGNvbXBsZXRpb24gcmluZyBiZWxvbmdzIHRvIHRoaXMgdmVjdG9yIGFuZAorCQkgKiBpdCdzIG5vdCBlbXB0eSB0aGVuIHNlcnZpY2UgaXQuCisJCSAqLworCQlpZiAoKGN0eC0+aXJxX21hc2sgJiAoMSA8PCB0cnhfcmluZy0+Y3FfaWQpKSAmJgorCQkJKHFsX3JlYWRfc2hfcmVnKHRyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpICE9CisJCQkJCXRyeF9yaW5nLT5jbnNtcl9pZHgpKSB7CisJCQlRUFJJTlRLKHFkZXYsIElOVFIsIERFQlVHLAorCQkJCSIlczogU2VydmljaW5nIFRYIGNvbXBsZXRpb24gcmluZyAlZC5cbiIsCisJCQkJX19mdW5jX18sIHRyeF9yaW5nLT5jcV9pZCk7CisJCQlxbF9jbGVhbl9vdXRib3VuZF9yeF9yaW5nKHRyeF9yaW5nKTsKKwkJfQorCX0KKworCS8qCisJICogTm93IHNlcnZpY2UgdGhlIFJTUyByaW5nIGlmIGl0J3MgYWN0aXZlLgorCSAqLworCWlmIChxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpICE9CisJCQkJCXJ4X3JpbmctPmNuc21yX2lkeCkgeworCQlRUFJJTlRLKHFkZXYsIElOVFIsIERFQlVHLAorCQkJIiVzOiBTZXJ2aWNpbmcgUlggY29tcGxldGlvbiByaW5nICVkLlxuIiwKKwkJCV9fZnVuY19fLCByeF9yaW5nLT5jcV9pZCk7CisJCXdvcmtfZG9uZSA9IHFsX2NsZWFuX2luYm91bmRfcnhfcmluZyhyeF9yaW5nLCBidWRnZXQpOworCX0KKwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIHJ4X3JpbmctPmlycSk7CkBAIC0xOTI4LDM4ICsxOTU1LDYgQEAKIAogfQogCi0vKiBXb3JrZXIgdGhyZWFkIHRvIHByb2Nlc3MgYSBnaXZlbiByeF9yaW5nIHRoYXQgaXMgZGVkaWNhdGVkCi0gKiB0byBvdXRib3VuZCBjb21wbGV0aW9ucy4KLSAqLwotc3RhdGljIHZvaWQgcWxfdHhfY2xlYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nID0KLQkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByeF9yaW5nLCByeF93b3JrLndvcmspOwotCXFsX2NsZWFuX291dGJvdW5kX3J4X3JpbmcocnhfcmluZyk7Ci0JcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHJ4X3JpbmctPnFkZXYsIHJ4X3JpbmctPmlycSk7Ci0KLX0KLQotLyogV29ya2VyIHRocmVhZCB0byBwcm9jZXNzIGEgZ2l2ZW4gcnhfcmluZyB0aGF0IGlzIGRlZGljYXRlZAotICogdG8gaW5ib3VuZCBjb21wbGV0aW9ucy4KLSAqLwotc3RhdGljIHZvaWQgcWxfcnhfY2xlYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nID0KLQkgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByeF9yaW5nLCByeF93b3JrLndvcmspOwotCXFsX2NsZWFuX2luYm91bmRfcnhfcmluZyhyeF9yaW5nLCA2NCk7Ci0JcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHJ4X3JpbmctPnFkZXYsIHJ4X3JpbmctPmlycSk7Ci19Ci0KLS8qIE1TSS1YIE11bHRpcGxlIFZlY3RvciBJbnRlcnJ1cHQgSGFuZGxlciBmb3Igb3V0Ym91bmQgY29tcGxldGlvbnMuICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgcWxnZV9tc2l4X3R4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcgPSBkZXZfaWQ7Ci0JcXVldWVfZGVsYXllZF93b3JrX29uKHJ4X3JpbmctPmNwdSwgcnhfcmluZy0+cWRldi0+cV93b3JrcXVldWUsCi0JCQkgICAgICAmcnhfcmluZy0+cnhfd29yaywgMCk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCiAvKiBNU0ktWCBNdWx0aXBsZSBWZWN0b3IgSW50ZXJydXB0IEhhbmRsZXIgZm9yIGluYm91bmQgY29tcGxldGlvbnMuICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcWxnZV9tc2l4X3J4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CkBAIC0xOTc5LDcgKzE5NzQsNiBAQAogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gcnhfcmluZy0+cWRldjsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICppbnRyX2NvbnRleHQgPSAmcWRldi0+aW50cl9jb250ZXh0WzBdOwogCXUzMiB2YXI7Ci0JaW50IGk7CiAJaW50IHdvcmtfZG9uZSA9IDA7CiAKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwpAQCAtMjAyMCw0MSArMjAxNCwxOCBAQAogCX0KIAogCS8qCi0JICogQ2hlY2sgdGhlIGRlZmF1bHQgcXVldWUgYW5kIHdha2UgaGFuZGxlciBpZiBhY3RpdmUuCisJICogR2V0IHRoZSBiaXQtbWFzayB0aGF0IHNob3dzIHRoZSBhY3RpdmUgcXVldWVzIGZvciB0aGlzCisJICogcGFzcy4gIENvbXBhcmUgaXQgdG8gdGhlIHF1ZXVlcyB0aGF0IHRoaXMgaXJxIHNlcnZpY2VzCisJICogYW5kIGNhbGwgbmFwaSBpZiB0aGVyZSdzIGEgbWF0Y2guCiAJICovCi0JcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nWzBdOwotCWlmIChxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpICE9IHJ4X3JpbmctPmNuc21yX2lkeCkgewotCQlRUFJJTlRLKHFkZXYsIElOVFIsIElORk8sICJXYWtpbmcgaGFuZGxlciBmb3IgcnhfcmluZ1swXS5cbiIpOwotCQlxbF9kaXNhYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIGludHJfY29udGV4dC0+aW50cik7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihzbXBfcHJvY2Vzc29yX2lkKCksIHFkZXYtPnFfd29ya3F1ZXVlLAotCQkJCSAgICAgICZyeF9yaW5nLT5yeF93b3JrLCAwKTsKLQkJd29ya19kb25lKys7Ci0JfQotCi0JaWYgKCF0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKLQkJLyoKLQkJICogU3RhcnQgdGhlIERQQyBmb3IgZWFjaCBhY3RpdmUgcXVldWUuCi0JCSAqLwotCQlmb3IgKGkgPSAxOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKSB7Ci0JCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07Ci0JCQlpZiAocWxfcmVhZF9zaF9yZWcocnhfcmluZy0+cHJvZF9pZHhfc2hfcmVnKSAhPQotCQkJICAgIHJ4X3JpbmctPmNuc21yX2lkeCkgeworCXZhciA9IHFsX3JlYWQzMihxZGV2LCBJU1IxKTsKKwlpZiAodmFyICYgaW50cl9jb250ZXh0LT5pcnFfbWFzaykgewogCQkJCVFQUklOVEsocWRldiwgSU5UUiwgSU5GTywKLQkJCQkJIldha2luZyBoYW5kbGVyIGZvciByeF9yaW5nWyVkXS5cbiIsIGkpOwotCQkJCXFsX2Rpc2FibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwKLQkJCQkJCQkJaW50cl9jb250ZXh0LT4KLQkJCQkJCQkJaW50cik7Ci0JCQkJaWYgKGkgPCBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCkKLQkJCQkJcXVldWVfZGVsYXllZF93b3JrX29uKHJ4X3JpbmctPmNwdSwKLQkJCQkJCQkgICAgICBxZGV2LT5xX3dvcmtxdWV1ZSwKLQkJCQkJCQkgICAgICAmcnhfcmluZy0+cnhfd29yaywKLQkJCQkJCQkgICAgICAwKTsKLQkJCQllbHNlCisJCQkiV2FraW5nIGhhbmRsZXIgZm9yIHJ4X3JpbmdbMF0uXG4iKTsKKwkJcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCBpbnRyX2NvbnRleHQtPmludHIpOwogCQkJCQluYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKIAkJCQl3b3JrX2RvbmUrKzsKIAkJCX0KLQkJfQotCX0KIAlxbF9lbmFibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwgaW50cl9jb250ZXh0LT5pbnRyKTsKIAlyZXR1cm4gd29ya19kb25lID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKIH0KQEAgLTIxMzIsNyArMjEwMyw3IEBACiAJCQkJICAgIGlwaC0+ZGFkZHIsIGxlbiwgaXBoLT5wcm90b2NvbCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgcWxnZV9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQorc3RhdGljIG5ldGRldl90eF90IHFsZ2Vfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgdHhfcmluZ19kZXNjICp0eF9yaW5nX2Rlc2M7CiAJc3RydWN0IG9iX21hY19pb2NiX3JlcSAqbWFjX2lvY2JfcHRyOwpAQCAtMjcwNiwzNSArMjY3Nyw5IEBACiAJfQogCXN3aXRjaCAocnhfcmluZy0+dHlwZSkgewogCWNhc2UgVFhfUToKLQkJLyogSWYgdGhlcmUncyBvbmx5IG9uZSBpbnRlcnJ1cHQsIHRoZW4gd2UgdXNlCi0JCSAqIHdvcmtlciB0aHJlYWRzIHRvIHByb2Nlc3MgdGhlIG91dGJvdW5kCi0JCSAqIGNvbXBsZXRpb24gaGFuZGxpbmcgcnhfcmluZ3MuIFdlIGRvIHRoaXMgc28KLQkJICogdGhleSBjYW4gYmUgcnVuIG9uIG11bHRpcGxlIENQVXMuIFRoZXJlIGlzCi0JCSAqIHJvb20gdG8gcGxheSB3aXRoIHRoaXMgbW9yZSB3aGVyZSB3ZSB3b3VsZCBvbmx5Ci0JCSAqIHJ1biBpbiBhIHdvcmtlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIHggbnVtYmVyCi0JCSAqIG9mIG91dGJvdW5kIGNvbXBsZXRpb25zIG9uIHRoZSBxdWV1ZSBhbmQgbW9yZQotCQkgKiB0aGFuIG9uZSBxdWV1ZSBhY3RpdmUuICBTb21lIHRocmVzaG9sZCB0aGF0Ci0JCSAqIHdvdWxkIGluZGljYXRlIGEgYmVuZWZpdCBpbiBzcGl0ZSBvZiB0aGUgY29zdAotCQkgKiBvZiBhIGNvbnRleHQgc3dpdGNoLgotCQkgKiBJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgaW50ZXJydXB0LCB0aGVuIHRoZQotCQkgKiBvdXRib3VuZCBjb21wbGV0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBJU1IuCi0JCSAqLwotCQlpZiAoIXRlc3RfYml0KFFMX01TSVhfRU5BQkxFRCwgJnFkZXYtPmZsYWdzKSkKLQkJCUlOSVRfREVMQVlFRF9XT1JLKCZyeF9yaW5nLT5yeF93b3JrLCBxbF90eF9jbGVhbik7Ci0JCWVsc2UgewotCQkJLyogV2l0aCBhbGwgZGVidWcgd2FybmluZ3Mgb24gd2Ugc2VlIGEgV0FSTl9PTiBtZXNzYWdlCi0JCQkgKiB3aGVuIHdlIGZyZWUgdGhlIHNrYiBpbiB0aGUgaW50ZXJydXB0IGNvbnRleHQuCi0JCQkgKi8KLQkJCUlOSVRfREVMQVlFRF9XT1JLKCZyeF9yaW5nLT5yeF93b3JrLCBxbF90eF9jbGVhbik7Ci0JCX0KIAkJY3FpY2ItPmlycV9kZWxheSA9IGNwdV90b19sZTE2KHFkZXYtPnR4X2NvYWxlc2NlX3VzZWNzKTsKIAkJY3FpY2ItPnBrdF9kZWxheSA9IGNwdV90b19sZTE2KHFkZXYtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzKTsKIAkJYnJlYWs7Ci0JY2FzZSBERUZBVUxUX1E6Ci0JCUlOSVRfREVMQVlFRF9XT1JLKCZyeF9yaW5nLT5yeF93b3JrLCBxbF9yeF9jbGVhbik7Ci0JCWNxaWNiLT5pcnFfZGVsYXkgPSAwOwotCQljcWljYi0+cGt0X2RlbGF5ID0gMDsKLQkJYnJlYWs7CiAJY2FzZSBSWF9ROgogCQkvKiBJbmJvdW5kIGNvbXBsZXRpb24gaGFuZGxpbmcgcnhfcmluZ3MgcnVuIGluCiAJCSAqIHNlcGFyYXRlIE5BUEkgY29udGV4dHMuCkBAIC0yODE4LDE3ICsyNzYzLDIwIEBACiAJfQogfQogCisvKiBXZSBzdGFydCBieSB0cnlpbmcgdG8gZ2V0IHRoZSBudW1iZXIgb2YgdmVjdG9ycworICogc3RvcmVkIGluIHFkZXYtPmludHJfY291bnQuIElmIHdlIGRvbid0IGdldCB0aGF0CisgKiBtYW55IHRoZW4gd2UgcmVkdWNlIHRoZSBjb3VudCBhbmQgdHJ5IGFnYWluLgorICovCiBzdGF0aWMgdm9pZCBxbF9lbmFibGVfbXNpeChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyOwogCi0JcWRldi0+aW50cl9jb3VudCA9IDE7CiAJLyogR2V0IHRoZSBNU0lYIHZlY3RvcnMuICovCiAJaWYgKGlycV90eXBlID09IE1TSVhfSVJRKSB7CiAJCS8qIFRyeSB0byBhbGxvYyBzcGFjZSBmb3IgdGhlIG1zaXggc3RydWN0LAogCQkgKiBpZiBpdCBmYWlscyB0aGVuIGdvIHRvIE1TSS9sZWdhY3kuCiAJCSAqLwotCQlxZGV2LT5tc2lfeF9lbnRyeSA9IGtjYWxsb2MocWRldi0+cnhfcmluZ19jb3VudCwKKwkJcWRldi0+bXNpX3hfZW50cnkgPSBrY2FsbG9jKHFkZXYtPmludHJfY291bnQsCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLAogCQkJCQkgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghcWRldi0+bXNpX3hfZW50cnkpIHsKQEAgLTI4MzYsMjYgKzI3ODQsMzYgQEAKIAkJCWdvdG8gbXNpOwogCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IHFkZXYtPmludHJfY291bnQ7IGkrKykKIAkJCXFkZXYtPm1zaV94X2VudHJ5W2ldLmVudHJ5ID0gaTsKIAotCQlpZiAoIXBjaV9lbmFibGVfbXNpeAotCQkgICAgKHFkZXYtPnBkZXYsIHFkZXYtPm1zaV94X2VudHJ5LCBxZGV2LT5yeF9yaW5nX2NvdW50KSkgewotCQkJc2V0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7Ci0JCQlxZGV2LT5pbnRyX2NvdW50ID0gcWRldi0+cnhfcmluZ19jb3VudDsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkJIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKLQkJCQlxZGV2LT5pbnRyX2NvdW50KTsKLQkJCXJldHVybjsKLQkJfSBlbHNlIHsKKwkJLyogTG9vcCB0byBnZXQgb3VyIHZlY3RvcnMuICBXZSBzdGFydCB3aXRoCisJCSAqIHdoYXQgd2Ugd2FudCBhbmQgc2V0dGxlIGZvciB3aGF0IHdlIGdldC4KKwkJICovCisJCWRvIHsKKwkJCWVyciA9IHBjaV9lbmFibGVfbXNpeChxZGV2LT5wZGV2LAorCQkJCXFkZXYtPm1zaV94X2VudHJ5LCBxZGV2LT5pbnRyX2NvdW50KTsKKwkJCWlmIChlcnIgPiAwKQorCQkJCXFkZXYtPmludHJfY291bnQgPSBlcnI7CisJCX0gd2hpbGUgKGVyciA+IDApOworCisJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZShxZGV2LT5tc2lfeF9lbnRyeSk7CiAJCQlxZGV2LT5tc2lfeF9lbnRyeSA9IE5VTEw7CiAJCQlRUFJJTlRLKHFkZXYsIElGVVAsIFdBUk5JTkcsCiAJCQkJIk1TSS1YIEVuYWJsZSBmYWlsZWQsIHRyeWluZyBNU0kuXG4iKTsKKwkJCXFkZXYtPmludHJfY291bnQgPSAxOwogCQkJaXJxX3R5cGUgPSBNU0lfSVJROworCQl9IGVsc2UgaWYgKGVyciA9PSAwKSB7CisJCQlzZXRfYml0KFFMX01TSVhfRU5BQkxFRCwgJnFkZXYtPmZsYWdzKTsKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCQkiTVNJLVggRW5hYmxlZCwgZ290ICVkIHZlY3RvcnMuXG4iLAorCQkJCXFkZXYtPmludHJfY291bnQpOworCQkJcmV0dXJuOwogCQl9CiAJfQogbXNpOgorCXFkZXYtPmludHJfY291bnQgPSAxOwogCWlmIChpcnFfdHlwZSA9PSBNU0lfSVJRKSB7CiAJCWlmICghcGNpX2VuYWJsZV9tc2kocWRldi0+cGRldikpIHsKIAkJCXNldF9iaXQoUUxfTVNJX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CkBAIC0yODY4LDYgKzI4MjYsNzEgQEAKIAlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiUnVubmluZyB3aXRoIGxlZ2FjeSBpbnRlcnJ1cHRzLlxuIik7CiB9CiAKKy8qIEVhY2ggdmVjdG9yIHNlcnZpY2VzIDEgUlNTIHJpbmcgYW5kIGFuZCAxIG9yIG1vcmUKKyAqIFRYIGNvbXBsZXRpb24gcmluZ3MuICBUaGlzIGZ1bmN0aW9uIGxvb3BzIHRocm91Z2gKKyAqIHRoZSBUWCBjb21wbGV0aW9uIHJpbmdzIGFuZCBhc3NpZ25zIHRoZSB2ZWN0b3IgdGhhdAorICogd2lsbCBzZXJ2aWNlIGl0LiAgQW4gZXhhbXBsZSB3b3VsZCBiZSBpZiB0aGVyZSBhcmUKKyAqIDIgdmVjdG9ycyAoc28gMiBSU1MgcmluZ3MpIGFuZCA4IFRYIGNvbXBsZXRpb24gcmluZ3MuCisgKiBUaGlzIHdvdWxkIG1lYW4gdGhhdCB2ZWN0b3IgMCB3b3VsZCBzZXJ2aWNlIFJTUyByaW5nIDAKKyAqIGFuZCBUWCBjb21wZXRpb24gcmluZ3MgMCwxLDIgYW5kIDMuICBWZWN0b3IgMSB3b3VsZAorICogc2VydmljZSBSU1MgcmluZyAxIGFuZCBUWCBjb21wbGV0aW9uIHJpbmdzIDQsNSw2IGFuZCA3LgorICovCitzdGF0aWMgdm9pZCBxbF9zZXRfdHhfdmVjdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgaSwgaiwgdmVjdDsKKwl1MzIgdHhfcmluZ3NfcGVyX3ZlY3RvciA9IHFkZXYtPnR4X3JpbmdfY291bnQgLyBxZGV2LT5pbnRyX2NvdW50OworCisJaWYgKGxpa2VseSh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpKSB7CisJCS8qIEFzc2lnbiBpcnEgdmVjdG9ycyB0byBUWCByeF9yaW5ncy4qLworCQlmb3IgKHZlY3QgPSAwLCBqID0gMCwgaSA9IHFkZXYtPnJzc19yaW5nX2NvdW50OworCQkJCQkgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCQkJaWYgKGogPT0gdHhfcmluZ3NfcGVyX3ZlY3RvcikgeworCQkJCXZlY3QrKzsKKwkJCQlqID0gMDsKKwkJCX0KKwkJCXFkZXYtPnJ4X3JpbmdbaV0uaXJxID0gdmVjdDsKKwkJCWorKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZvciBzaW5nbGUgdmVjdG9yIGFsbCByaW5ncyBoYXZlIGFuIGlycQorCQkgKiBvZiB6ZXJvLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykKKwkJCXFkZXYtPnJ4X3JpbmdbaV0uaXJxID0gMDsKKwl9Cit9CisKKy8qIFNldCB0aGUgaW50ZXJydXB0IG1hc2sgZm9yIHRoaXMgdmVjdG9yLiAgRWFjaCB2ZWN0b3IKKyAqIHdpbGwgc2VydmljZSAxIFJTUyByaW5nIGFuZCAxIG9yIG1vcmUgVFggY29tcGxldGlvbgorICogcmluZ3MuICBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgYSBiaXQgbWFzayBwZXIgdmVjdG9yCisgKiB0aGF0IGluZGljYXRlcyB3aGljaCByaW5ncyBpdCBzZXJ2aWNlcy4KKyAqLworc3RhdGljIHZvaWQgcWxfc2V0X2lycV9tYXNrKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHgpCit7CisJaW50IGosIHZlY3QgPSBjdHgtPmludHI7CisJdTMyIHR4X3JpbmdzX3Blcl92ZWN0b3IgPSBxZGV2LT50eF9yaW5nX2NvdW50IC8gcWRldi0+aW50cl9jb3VudDsKKworCWlmIChsaWtlbHkodGVzdF9iaXQoUUxfTVNJWF9FTkFCTEVELCAmcWRldi0+ZmxhZ3MpKSkgeworCQkvKiBBZGQgdGhlIFJTUyByaW5nIHNlcnZpY2VkIGJ5IHRoaXMgdmVjdG9yCisJCSAqIHRvIHRoZSBtYXNrLgorCQkgKi8KKwkJY3R4LT5pcnFfbWFzayA9ICgxIDw8IHFkZXYtPnJ4X3JpbmdbdmVjdF0uY3FfaWQpOworCQkvKiBBZGQgdGhlIFRYIHJpbmcocykgc2VydmljZWQgYnkgdGhpcyB2ZWN0b3IKKwkJICogdG8gdGhlIG1hc2suICovCisJCWZvciAoaiA9IDA7IGogPCB0eF9yaW5nc19wZXJfdmVjdG9yOyBqKyspIHsKKwkJCWN0eC0+aXJxX21hc2sgfD0KKwkJCSgxIDw8IHFkZXYtPnJ4X3JpbmdbcWRldi0+cnNzX3JpbmdfY291bnQgKworCQkJKHZlY3QgKiB0eF9yaW5nc19wZXJfdmVjdG9yKSArIGpdLmNxX2lkKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZvciBzaW5nbGUgdmVjdG9yIHdlIGp1c3Qgc2hpZnQgZWFjaCBxdWV1ZSdzCisJCSAqIElEIGludG8gdGhlIG1hc2suCisJCSAqLworCQlmb3IgKGogPSAwOyBqIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaisrKQorCQkJY3R4LT5pcnFfbWFzayB8PSAoMSA8PCBxZGV2LT5yeF9yaW5nW2pdLmNxX2lkKTsKKwl9Cit9CisKIC8qCiAgKiBIZXJlIHdlIGJ1aWxkIHRoZSBpbnRyX2NvbnRleHQgc3RydWN0dXJlcyBiYXNlZCBvbgogICogb3VyIHJ4X3JpbmcgY291bnQgYW5kIGludHIgdmVjdG9yIGNvdW50LgpAQCAtMjg3OSwxOCArMjkwMiwxOSBAQAogCWludCBpID0gMDsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICppbnRyX2NvbnRleHQgPSAmcWRldi0+aW50cl9jb250ZXh0WzBdOwogCi0JcWxfZW5hYmxlX21zaXgocWRldik7Ci0KIAlpZiAobGlrZWx5KHRlc3RfYml0KFFMX01TSVhfRU5BQkxFRCwgJnFkZXYtPmZsYWdzKSkpIHsKIAkJLyogRWFjaCByeF9yaW5nIGhhcyBpdCdzCiAJCSAqIG93biBpbnRyX2NvbnRleHQgc2luY2Ugd2UgaGF2ZSBzZXBhcmF0ZQogCQkgKiB2ZWN0b3JzIGZvciBlYWNoIHF1ZXVlLgotCQkgKiBUaGlzIG9ubHkgdHJ1ZSB3aGVuIE1TSS1YIGlzIGVuYWJsZWQuCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgcWRldi0+aW50cl9jb3VudDsgaSsrLCBpbnRyX2NvbnRleHQrKykgewogCQkJcWRldi0+cnhfcmluZ1tpXS5pcnEgPSBpOwogCQkJaW50cl9jb250ZXh0LT5pbnRyID0gaTsKIAkJCWludHJfY29udGV4dC0+cWRldiA9IHFkZXY7CisJCQkvKiBTZXQgdXAgdGhpcyB2ZWN0b3IncyBiaXQtbWFzayB0aGF0IGluZGljYXRlcworCQkJICogd2hpY2ggcXVldWVzIGl0IHNlcnZpY2VzLgorCQkJICovCisJCQlxbF9zZXRfaXJxX21hc2socWRldiwgaW50cl9jb250ZXh0KTsKIAkJCS8qCiAJCQkgKiBXZSBzZXQgdXAgZWFjaCB2ZWN0b3JzIGVuYWJsZS9kaXNhYmxlL3JlYWQgYml0cyBzbwogCQkJICogdGhlcmUncyBubyBiaXQvbWFzayBjYWxjdWxhdGlvbnMgaW4gdGhlIGNyaXRpY2FsIHBhdGguCkBAIC0yOTA3LDIxICsyOTMxLDE0IEBACiAJCQkgICAgSU5UUl9FTl9UWVBFX01BU0sgfCBJTlRSX0VOX0lOVFJfTUFTSyB8CiAJCQkgICAgSU5UUl9FTl9UWVBFX1JFQUQgfCBJTlRSX0VOX0lIRF9NQVNLIHwgSU5UUl9FTl9JSEQgfAogCQkJICAgIGk7Ci0KIAkJCWlmIChpID09IDApIHsKLQkJCQkvKgotCQkJCSAqIERlZmF1bHQgcXVldWUgaGFuZGxlcyBiY2FzdC9tY2FzdCBwbHVzCi0JCQkJICogYXN5bmMgZXZlbnRzLiAgTmVlZHMgYnVmZmVycy4KKwkJCQkvKiBUaGUgZmlyc3QgdmVjdG9yL3F1ZXVlIGhhbmRsZXMKKwkJCQkgKiBicm9hZGNhc3QvbXVsdGljYXN0LCBmYXRhbCBlcnJvcnMsCisJCQkJICogYW5kIGZpcm13YXJlIGV2ZW50cy4gIFRoaXMgaW4gYWRkaXRpb24KKwkJCQkgKiB0byBub3JtYWwgaW5ib3VuZCBOQVBJIHByb2Nlc3NpbmcuCiAJCQkJICovCiAJCQkJaW50cl9jb250ZXh0LT5oYW5kbGVyID0gcWxnZV9pc3I7Ci0JCQkJc3ByaW50ZihpbnRyX2NvbnRleHQtPm5hbWUsICIlcy1kZWZhdWx0LXF1ZXVlIiwKLQkJCQkJcWRldi0+bmRldi0+bmFtZSk7Ci0JCQl9IGVsc2UgaWYgKGkgPCBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCkgewotCQkJCS8qCi0JCQkJICogT3V0Ym91bmQgcXVldWUgaXMgZm9yIG91dGJvdW5kIGNvbXBsZXRpb25zIG9ubHkuCi0JCQkJICovCi0JCQkJaW50cl9jb250ZXh0LT5oYW5kbGVyID0gcWxnZV9tc2l4X3R4X2lzcjsKLQkJCQlzcHJpbnRmKGludHJfY29udGV4dC0+bmFtZSwgIiVzLXR4LSVkIiwKKwkJCQlzcHJpbnRmKGludHJfY29udGV4dC0+bmFtZSwgIiVzLXJ4LSVkIiwKIAkJCQkJcWRldi0+bmRldi0+bmFtZSwgaSk7CiAJCQl9IGVsc2UgewogCQkJCS8qCkBAIC0yOTU1LDkgKzI5NzIsMTcgQEAKIAkJICovCiAJCWludHJfY29udGV4dC0+aGFuZGxlciA9IHFsZ2VfaXNyOwogCQlzcHJpbnRmKGludHJfY29udGV4dC0+bmFtZSwgIiVzLXNpbmdsZV9pcnEiLCBxZGV2LT5uZGV2LT5uYW1lKTsKLQkJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykKLQkJCXFkZXYtPnJ4X3JpbmdbaV0uaXJxID0gMDsKKwkJLyogU2V0IHVwIHRoaXMgdmVjdG9yJ3MgYml0LW1hc2sgdGhhdCBpbmRpY2F0ZXMKKwkJICogd2hpY2ggcXVldWVzIGl0IHNlcnZpY2VzLiBJbiB0aGlzIGNhc2UgdGhlcmUgaXMKKwkJICogYSBzaW5nbGUgdmVjdG9yIHNvIGl0IHdpbGwgc2VydmljZSBhbGwgUlNTIGFuZAorCQkgKiBUWCBjb21wbGV0aW9uIHJpbmdzLgorCQkgKi8KKwkJcWxfc2V0X2lycV9tYXNrKHFkZXYsIGludHJfY29udGV4dCk7CiAJfQorCS8qIFRlbGwgdGhlIFRYIGNvbXBsZXRpb24gcmluZ3Mgd2hpY2ggTVNJeCB2ZWN0b3IKKwkgKiB0aGV5IHdpbGwgYmUgdXNpbmcuCisJICovCisJcWxfc2V0X3R4X3ZlY3QocWRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHFsX2ZyZWVfaXJxKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQpAQCAtMzA2Miw3ICszMDg3LDcgQEAKIAogCW1lbXNldCgodm9pZCAqKXJpY2IsIDAsIHNpemVvZigqcmljYikpOwogCi0JcmljYi0+YmFzZV9jcSA9IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkIHwgUlNTX0w0SzsKKwlyaWNiLT5iYXNlX2NxID0gUlNTX0w0SzsKIAlyaWNiLT5mbGFncyA9CiAJICAgIChSU1NfTDZLIHwgUlNTX0xJIHwgUlNTX0xCIHwgUlNTX0xNIHwgUlNTX1JJNCB8IFJTU19SSTYgfCBSU1NfUlQ0IHwKIAkgICAgIFJTU19SVDYpOwpAQCAtMzI2NCw3ICszMjg5LDcgQEAKIAl9CiAKIAkvKiBTdGFydCBOQVBJIGZvciB0aGUgUlNTIHF1ZXVlcy4gKi8KLQlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSsrKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCiAJCQlpKTsKIAkJbmFwaV9lbmFibGUoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CkBAIC0zMzI2LDcgKzMzNTEsNiBAQAogc3RhdGljIGludCBxbF9hZGFwdGVyX2Rvd24oc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IGksIHN0YXR1cyA9IDA7Ci0Jc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAKIAlxbF9saW5rX29mZihxZGV2KTsKIApAQCAtMzM0MCwyNyArMzM2NCw4IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfaWRjX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmspOwogCi0JLyogVGhlIGRlZmF1bHQgcXVldWUgYXQgaW5kZXggMCBpcyBhbHdheXMgcHJvY2Vzc2VkIGluCi0JICogYSB3b3JrcXVldWUuCi0JICovCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5yeF9yaW5nWzBdLnJ4X3dvcmspOwotCi0JLyogVGhlIHJlc3Qgb2YgdGhlIHJ4X3JpbmdzIGFyZSBwcm9jZXNzZWQgaW4KLQkgKiBhIHdvcmtxdWV1ZSBvbmx5IGlmIGl0J3MgYSBzaW5nbGUgaW50ZXJydXB0Ci0JICogZW52aXJvbm1lbnQgKE1TSS9MZWdhY3kpLgotCSAqLwotCWZvciAoaSA9IDE7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKLQkJcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOwotCQkvKiBPbmx5IHRoZSBSU1MgcmluZ3MgdXNlIE5BUEkgb24gbXVsdGkgaXJxCi0JCSAqIGVudmlyb25tZW50LiAgT3V0Ym91bmQgY29tcGxldGlvbiBwcm9jZXNzaW5nCi0JCSAqIGlzIGRvbmUgaW4gaW50ZXJydXB0IGNvbnRleHQuCi0JCSAqLwotCQlpZiAoaSA+PSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCkgewotCQkJbmFwaV9kaXNhYmxlKCZyeF9yaW5nLT5uYXBpKTsKLQkJfSBlbHNlIHsKLQkJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnhfcmluZy0+cnhfd29yayk7Ci0JCX0KLQl9CisJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJzc19yaW5nX2NvdW50OyBpKyspCisJCW5hcGlfZGlzYWJsZSgmcWRldi0+cnhfcmluZ1tpXS5uYXBpKTsKIAogCWNsZWFyX2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOwogCkBAIC0zMzcwLDcgKzMzNzUsNyBAQAogCiAJLyogQ2FsbCBuZXRpZl9uYXBpX2RlbCgpIGZyb20gY29tbW9uIHBvaW50LgogCSAqLwotCWZvciAoaSA9IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkOyBpIDwgcWRldi0+cnhfcmluZ19jb3VudDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSsrKQogCQluZXRpZl9uYXBpX2RlbCgmcWRldi0+cnhfcmluZ1tpXS5uYXBpKTsKIAogCXFsX2ZyZWVfcnhfYnVmZmVycyhxZGV2KTsKQEAgLTM0NDksNDMgKzM0NTQsMjEgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKIAlzdHJ1Y3QgdHhfcmluZyAqdHhfcmluZzsKLQlpbnQgY3B1X2NudCA9IG51bV9vbmxpbmVfY3B1cygpOworCWludCBjcHVfY250ID0gbWluKE1BWF9DUFVTLCAoaW50KW51bV9vbmxpbmVfY3B1cygpKTsKIAotCS8qCi0JICogRm9yIGVhY2ggcHJvY2Vzc29yIHByZXNlbnQgd2UgYWxsb2NhdGUgb25lCi0JICogcnhfcmluZyBmb3Igb3V0Ym91bmQgY29tcGxldGlvbnMsIGFuZCBvbmUKLQkgKiByeF9yaW5nIGZvciBpbmJvdW5kIGNvbXBsZXRpb25zLiAgUGx1cyB0aGVyZSBpcwotCSAqIGFsd2F5cyB0aGUgb25lIGRlZmF1bHQgcXVldWUuICBGb3IgdGhlIENQVQotCSAqIGNvdW50cyB3ZSBlbmQgdXAgd2l0aCB0aGUgZm9sbG93aW5nIHJ4X3JpbmdzOgotCSAqIHJ4X3JpbmcgY291bnQgPQotCSAqICBvbmUgZGVmYXVsdCBxdWV1ZSArCi0JICogIChDUFUgY291bnQgKiBvdXRib3VuZCBjb21wbGV0aW9uIHJ4X3JpbmcpICsKLQkgKiAgKENQVSBjb3VudCAqIGluYm91bmQgKFJTUykgY29tcGxldGlvbiByeF9yaW5nKQotCSAqIFRvIGtlZXAgaXQgc2ltcGxlIHdlIGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YKLQkgKiBxdWV1ZXMgdG8gPCAzMiwgc28gd2UgdHJ1bmNhdGUgQ1BVIHRvIDguCi0JICogVGhpcyBsaW1pdGF0aW9uIGNhbiBiZSByZW1vdmVkIHdoZW4gcmVxdWVzdGVkLgorCS8qIEluIGEgcGVyZmVjdCB3b3JsZCB3ZSBoYXZlIG9uZSBSU1MgcmluZyBmb3IgZWFjaCBDUFUKKwkgKiBhbmQgZWFjaCBoYXMgaXQncyBvd24gdmVjdG9yLiAgVG8gZG8gdGhhdCB3ZSBhc2sgZm9yCisJICogY3B1X2NudCB2ZWN0b3JzLiAgcWxfZW5hYmxlX21zaXgoKSB3aWxsIGFkanVzdCB0aGUKKwkgKiB2ZWN0b3IgY291bnQgdG8gd2hhdCB3ZSBhY3R1YWxseSBnZXQuICBXZSB0aGVuCisJICogYWxsb2NhdGUgYW4gUlNTIHJpbmcgZm9yIGVhY2guCisJICogRXNzZW50aWFsbHksIHdlIGFyZSBkb2luZyBtaW4oY3B1X2NvdW50LCBtc2l4X3ZlY3Rvcl9jb3VudCkuCiAJICovCi0KLQlpZiAoY3B1X2NudCA+IE1BWF9DUFVTKQotCQljcHVfY250ID0gTUFYX0NQVVM7Ci0KLQkvKgotCSAqIHJ4X3JpbmdbMF0gaXMgYWx3YXlzIHRoZSBkZWZhdWx0IHF1ZXVlLgotCSAqLwotCS8qIEFsbG9jYXRlIG91dGJvdW5kIGNvbXBsZXRpb24gcmluZyBmb3IgZWFjaCBDUFUuICovCisJcWRldi0+aW50cl9jb3VudCA9IGNwdV9jbnQ7CisJcWxfZW5hYmxlX21zaXgocWRldik7CisJLyogQWRqdXN0IHRoZSBSU1MgcmluZyBjb3VudCB0byB0aGUgYWN0dWFsIHZlY3RvciBjb3VudC4gKi8KKwlxZGV2LT5yc3NfcmluZ19jb3VudCA9IHFkZXYtPmludHJfY291bnQ7CiAJcWRldi0+dHhfcmluZ19jb3VudCA9IGNwdV9jbnQ7Ci0JLyogQWxsb2NhdGUgaW5ib3VuZCBjb21wbGV0aW9uIChSU1MpIHJpbmcgZm9yIGVhY2ggQ1BVLiAqLwotCXFkZXYtPnJzc19yaW5nX2NvdW50ID0gY3B1X2NudDsKLQkvKiBjcV9pZCBmb3IgdGhlIGZpcnN0IGluYm91bmQgcmluZyBoYW5kbGVyLiAqLwotCXFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkID0gY3B1X2NudCArIDE7Ci0JLyoKLQkgKiBxZGV2LT5yeF9yaW5nX2NvdW50OgotCSAqIFRvdGFsIG51bWJlciBvZiByeF9yaW5ncy4gIFRoaXMgaW5jbHVkZXMgdGhlIG9uZQotCSAqIGRlZmF1bHQgcXVldWUsIGEgbnVtYmVyIG9mIG91dGJvdW5kIGNvbXBsZXRpb24KLQkgKiBoYW5kbGVyIHJ4X3JpbmdzLCBhbmQgdGhlIG51bWJlciBvZiBpbmJvdW5kCi0JICogY29tcGxldGlvbiBoYW5kbGVyIHJ4X3JpbmdzLgotCSAqLwotCXFkZXYtPnJ4X3JpbmdfY291bnQgPSBxZGV2LT50eF9yaW5nX2NvdW50ICsgcWRldi0+cnNzX3JpbmdfY291bnQgKyAxOworCXFkZXYtPnJ4X3JpbmdfY291bnQgPSBxZGV2LT50eF9yaW5nX2NvdW50ICsgcWRldi0+cnNzX3JpbmdfY291bnQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+dHhfcmluZ19jb3VudDsgaSsrKSB7CiAJCXR4X3JpbmcgPSAmcWRldi0+dHhfcmluZ1tpXTsKQEAgLTM0OTgsOSArMzQ4MSw5IEBACiAKIAkJLyoKIAkJICogVGhlIGNvbXBsZXRpb24gcXVldWUgSUQgZm9yIHRoZSB0eCByaW5ncyBzdGFydAotCQkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGUgZGVmYXVsdCBRIElELCB3aGljaCBpcyB6ZXJvLgorCQkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGUgcnNzIHJpbmdzLgogCQkgKi8KLQkJdHhfcmluZy0+Y3FfaWQgPSBpICsgMTsKKwkJdHhfcmluZy0+Y3FfaWQgPSBxZGV2LT5yc3NfcmluZ19jb3VudCArIGk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewpAQCAtMzUwOSwxMCArMzQ5Miw5IEBACiAJCXJ4X3JpbmctPnFkZXYgPSBxZGV2OwogCQlyeF9yaW5nLT5jcV9pZCA9IGk7CiAJCXJ4X3JpbmctPmNwdSA9IGkgJSBjcHVfY250OwkvKiBDUFUgdG8gcnVuIGhhbmRsZXIgb24uICovCi0JCWlmIChpID09IDApIHsJLyogRGVmYXVsdCBxdWV1ZSBhdCBpbmRleCAwLiAqLworCQlpZiAoaSA8IHFkZXYtPnJzc19yaW5nX2NvdW50KSB7CiAJCQkvKgotCQkJICogRGVmYXVsdCBxdWV1ZSBoYW5kbGVzIGJjYXN0L21jYXN0IHBsdXMKLQkJCSAqIGFzeW5jIGV2ZW50cy4gIE5lZWRzIGJ1ZmZlcnMuCisJCQkgKiBJbmJvdW5kIChSU1MpIHF1ZXVlcy4KIAkJCSAqLwogCQkJcnhfcmluZy0+Y3FfbGVuID0gcWRldi0+cnhfcmluZ19zaXplOwogCQkJcnhfcmluZy0+Y3Ffc2l6ZSA9CkBAIC0zNTI1LDggKzM1MDcsOCBAQAogCQkJcnhfcmluZy0+c2JxX3NpemUgPQogCQkJICAgIHJ4X3JpbmctPnNicV9sZW4gKiBzaXplb2YoX19sZTY0KTsKIAkJCXJ4X3JpbmctPnNicV9idWZfc2l6ZSA9IFNNQUxMX0JVRkZFUl9TSVpFICogMjsKLQkJCXJ4X3JpbmctPnR5cGUgPSBERUZBVUxUX1E7Ci0JCX0gZWxzZSBpZiAoaSA8IHFkZXYtPnJzc19yaW5nX2ZpcnN0X2NxX2lkKSB7CisJCQlyeF9yaW5nLT50eXBlID0gUlhfUTsKKwkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBPdXRib3VuZCBxdWV1ZSBoYW5kbGVzIG91dGJvdW5kIGNvbXBsZXRpb25zIG9ubHkuCiAJCQkgKi8KQEAgLTM1NDEsMjIgKzM1MjMsNiBAQAogCQkJcnhfcmluZy0+c2JxX3NpemUgPSAwOwogCQkJcnhfcmluZy0+c2JxX2J1Zl9zaXplID0gMDsKIAkJCXJ4X3JpbmctPnR5cGUgPSBUWF9ROwotCQl9IGVsc2UgewkvKiBJbmJvdW5kIGNvbXBsZXRpb25zIChSU1MpIHF1ZXVlcyAqLwotCQkJLyoKLQkJCSAqIEluYm91bmQgcXVldWVzIGhhbmRsZSB1bmljYXN0IGZyYW1lcyBvbmx5LgotCQkJICovCi0JCQlyeF9yaW5nLT5jcV9sZW4gPSBxZGV2LT5yeF9yaW5nX3NpemU7Ci0JCQlyeF9yaW5nLT5jcV9zaXplID0KLQkJCSAgICByeF9yaW5nLT5jcV9sZW4gKiBzaXplb2Yoc3RydWN0IHFsX25ldF9yc3BfaW9jYik7Ci0JCQlyeF9yaW5nLT5sYnFfbGVuID0gTlVNX0xBUkdFX0JVRkZFUlM7Ci0JCQlyeF9yaW5nLT5sYnFfc2l6ZSA9Ci0JCQkgICAgcnhfcmluZy0+bGJxX2xlbiAqIHNpemVvZihfX2xlNjQpOwotCQkJcnhfcmluZy0+bGJxX2J1Zl9zaXplID0gTEFSR0VfQlVGRkVSX1NJWkU7Ci0JCQlyeF9yaW5nLT5zYnFfbGVuID0gTlVNX1NNQUxMX0JVRkZFUlM7Ci0JCQlyeF9yaW5nLT5zYnFfc2l6ZSA9Ci0JCQkgICAgcnhfcmluZy0+c2JxX2xlbiAqIHNpemVvZihfX2xlNjQpOwotCQkJcnhfcmluZy0+c2JxX2J1Zl9zaXplID0gU01BTExfQlVGRkVSX1NJWkUgKiAyOwotCQkJcnhfcmluZy0+dHlwZSA9IFJYX1E7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0zODQ1LDEwICszODExLDcgQEAKIAkJZGVzdHJveV93b3JrcXVldWUocWRldi0+d29ya3F1ZXVlKTsKIAkJcWRldi0+d29ya3F1ZXVlID0gTlVMTDsKIAl9Ci0JaWYgKHFkZXYtPnFfd29ya3F1ZXVlKSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHFkZXYtPnFfd29ya3F1ZXVlKTsKLQkJcWRldi0+cV93b3JrcXVldWUgPSBOVUxMOwotCX0KKwogCWlmIChxZGV2LT5yZWdfYmFzZSkKIAkJaW91bm1hcChxZGV2LT5yZWdfYmFzZSk7CiAJaWYgKHFkZXYtPmRvb3JiZWxsX2FyZWEpCkBAIC0zOTYxLDggKzM5MjQsNiBAQAogCSAqIFNldCB1cCB0aGUgb3BlcmF0aW5nIHBhcmFtZXRlcnMuCiAJICovCiAJcWRldi0+cnhfY3N1bSA9IDE7Ci0KLQlxZGV2LT5xX3dvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUobmRldi0+bmFtZSk7CiAJcWRldi0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmRldi0+bmFtZSk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPmFzaWNfcmVzZXRfd29yaywgcWxfYXNpY19yZXNldF93b3JrKTsKIAlJTklUX0RFTEFZRURfV09SSygmcWRldi0+bXBpX3Jlc2V0X3dvcmssIHFsX21waV9yZXNldF93b3JrKTsKQEAgLTQwNzYsNiArNDAzNywxMSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpOworCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKIAkJcWxfYWRhcHRlcl9kb3duKHFkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yNjA0MC5jIGIvZHJpdmVycy9uZXQvcjYwNDAuYwppbmRleCA5NjFiNTM5Li43ZGZjYjU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yNjA0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKQEAgLTQ5LDggKzQ5LDggQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInI2MDQwIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yNCIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIjA4SnVsMjAwOSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMjUiCisjZGVmaW5lIERSVl9SRUxEQVRFCSIyMEF1ZzIwMDkiCiAKIC8qIFBIWSBDSElQIEFkZHJlc3MgKi8KICNkZWZpbmUgUEhZMV9BRERSCTEJLyogRm9yIE1BQzEgKi8KQEAgLTc1MCwxNCArNzUwLDYgQEAKIAlzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CiAJaW50IHJldDsKLQl1MTYgdmFsOwotCi0JLyogQ2hlY2sgcHJlc2VuY2Ugb2YgYSBzZWNvbmQgUEhZICovCi0JdmFsID0gcjYwNDBfcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDIpOwotCWlmICh2YWwgPT0gMHhGRkZGKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiIG5vIHNlY29uZCBQSFkgYXR0YWNoZWRcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CiAKIAkvKiBJbml0aWFsaXNlIGFuZCBhbGxvYyBSWC9UWCBidWZmZXJzICovCiAJcjYwNDBfaW5pdF90eGJ1ZnMoZGV2KTsKQEAgLTg5MSwxMyArODgzLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcjYwNDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHI2MDQwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCByNjA0MF9kZXNjcmlwdG9yICpkZXNjcHRyOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbHAtPmJhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gTkVUREVWX1RYX09LOwogCiAJLyogQ3JpdGljYWwgU2VjdGlvbiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwpAQCAtOTA3LDggKzg5OSw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IG5vIHR4IGRlc2NyaXB0b3JcbiIpOwotCQlyZXQgPSBORVRERVZfVFhfQlVTWTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAogCS8qIFN0YXRpc3RpYyBDb3VudGVyICovCkBAIC05MzYsNyArOTI3LDggQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHI2MDQwX211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMDkxLDcgKzEwODMsNiBAQAogCWludCBlcnIsIGlvX3NpemUgPSBSNjA0MF9JT19TSVpFOwogCXN0YXRpYyBpbnQgY2FyZF9pZHggPSAtMTsKIAlpbnQgYmFyID0gMDsKLQlsb25nIHBpb2FkZHI7CiAJdTE2ICphZHJwOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHZlcnNpb24pOwpAQCAtMTExNSwxMyArMTEwNiwxMiBAQAogCX0KIAogCS8qIElPIFNpemUgY2hlY2sgKi8KLQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSA8IGlvX3NpemUpIHsKKwlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBiYXIpIDwgaW9fc2l6ZSkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogSW5zdWZmaWNpZW50IFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCXBpb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CS8qIElPIG1hcCBiYXNlIGFkZHJlc3MgKi8KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgcjYwNDBfcHJpdmF0ZSkpOwpAQCAtMTE5Niw2ICsxMTg2LDEzIEBACiAJbHAtPm1paV9pZi5waHlfaWRfbWFzayA9IDB4MWY7CiAJbHAtPm1paV9pZi5yZWdfbnVtX21hc2sgPSAweDFmOwogCisJLyogQ2hlY2sgdGhlIHZlbmRvciBJRCBvbiB0aGUgUEhZLCBpZiAweGZmZmYgYXNzdW1lIG5vbmUgYXR0YWNoZWQgKi8KKwlpZiAocjYwNDBfcGh5X3JlYWQoaW9hZGRyLCBscC0+cGh5X2FkZHIsIDIpID09IDB4ZmZmZikgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogRmFpbGVkIHRvIGRldGVjdCBhbiBhdHRhY2hlZCBQSFlcbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfdW5tYXA7CisJfQorCiAJLyogUmVnaXN0ZXIgbmV0IGRldmljZS4gQWZ0ZXIgdGhpcyBkZXYtPm5hbWUgYXNzaWduICovCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggYjgyNzgwZC4uNTBjNmEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC01MDcsNyArNTA3LDggQEAKIE1PRFVMRV9WRVJTSU9OKFJUTDgxNjlfVkVSU0lPTik7CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBydGw4MTY5X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgcnRsODE2OV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyBpbnQgcnRsODE2OV9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMjIyLDE3ICsxMjIzLDYgQEAKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLAogfTsKIAotc3RhdGljIHZvaWQgcnRsODE2OV93cml0ZV9nbWlpX3JlZ19iaXQodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCByZWcsCi0JCQkJICAgICAgIGludCBiaXRudW0sIGludCBiaXR2YWwpCi17Ci0JaW50IHZhbDsKLQotCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIHJlZyk7Ci0JdmFsID0gKGJpdHZhbCA9PSAxKSA/Ci0JCXZhbCB8IChiaXR2YWwgPDwgYml0bnVtKSA6ICB2YWwgJiB+KDB4MDAwMSA8PCBiaXRudW0pOwotCW1kaW9fd3JpdGUoaW9hZGRyLCByZWcsIHZhbCAmIDB4ZmZmZik7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X21hY192ZXJzaW9uKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLAogCQkJCSAgICB2b2lkIF9faW9tZW0gKmlvYWRkcikKIHsKQEAgLTEzMjgsNTQgKzEzMTgsNjkgQEAKIAogc3RhdGljIHZvaWQgcnRsODE2OXNfaHdfcGh5X2NvbmZpZyh2b2lkIF9faW9tZW0gKmlvYWRkcikKIHsKLQlzdHJ1Y3QgewotCQl1MTYgcmVnc1s1XTsgLyogQmV3YXJlIG9mIGJpdC1zaWduIHByb3BhZ2F0aW9uICovCi0JfSBwaHlfbWFnaWNbNV0gPSB7IHsKLQkJeyAweDAwMDAsCS8vdyA0IDE1IDEyIDAKLQkJICAweDAwYTEsCS8vdyAzIDE1IDAgMDBhMQotCQkgIDB4MDAwOCwJLy93IDIgMTUgMCAwMDA4Ci0JCSAgMHgxMDIwLAkvL3cgMSAxNSAwIDEwMjAKLQkJICAweDEwMDAgfSB9LHsJLy93IDAgMTUgMCAxMDAwCi0JCXsgMHg3MDAwLAkvL3cgNCAxNSAxMiA3Ci0JCSAgMHhmZjQxLAkvL3cgMyAxNSAwIGZmNDEKLQkJICAweGRlNjAsCS8vdyAyIDE1IDAgZGU2MAotCQkgIDB4MDE0MCwJLy93IDEgMTUgMCAwMTQwCi0JCSAgMHgwMDc3IH0gfSx7CS8vdyAwIDE1IDAgMDA3NwotCQl7IDB4YTAwMCwJLy93IDQgMTUgMTIgYQotCQkgIDB4ZGYwMSwJLy93IDMgMTUgMCBkZjAxCi0JCSAgMHhkZjIwLAkvL3cgMiAxNSAwIGRmMjAKLQkJICAweGZmOTUsCS8vdyAxIDE1IDAgZmY5NQotCQkgIDB4ZmEwMCB9IH0sewkvL3cgMCAxNSAwIGZhMDAKLQkJeyAweGIwMDAsCS8vdyA0IDE1IDEyIGIKLQkJICAweGZmNDEsCS8vdyAzIDE1IDAgZmY0MQotCQkgIDB4ZGUyMCwJLy93IDIgMTUgMCBkZTIwCi0JCSAgMHgwMTQwLAkvL3cgMSAxNSAwIDAxNDAKLQkJICAweDAwYmIgfSB9LHsJLy93IDAgMTUgMCAwMGJiCi0JCXsgMHhmMDAwLAkvL3cgNCAxNSAxMiBmCi0JCSAgMHhkZjAxLAkvL3cgMyAxNSAwIGRmMDEKLQkJICAweGRmMjAsCS8vdyAyIDE1IDAgZGYyMAotCQkgIDB4ZmY5NSwJLy93IDEgMTUgMCBmZjk1Ci0JCSAgMHhiZjAwIH0JLy93IDAgMTUgMCBiZjAwCi0JCX0KLQl9LCAqcCA9IHBoeV9tYWdpYzsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDA2LCAweDAwNmUgfSwKKwkJeyAweDA4LCAweDA3MDggfSwKKwkJeyAweDE1LCAweDQwMDAgfSwKKwkJeyAweDE4LCAweDY1YzcgfSwKIAotCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDEpOwkJLy93IDMxIDIgMCAxCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MTUsIDB4MTAwMCk7CQkvL3cgMjEgMTUgMCAxMDAwCi0JbWRpb193cml0ZShpb2FkZHIsIDB4MTgsIDB4NjVjNyk7CQkvL3cgMjQgMTUgMCA2NWM3Ci0JcnRsODE2OV93cml0ZV9nbWlpX3JlZ19iaXQoaW9hZGRyLCA0LCAxMSwgMCk7CS8vdyA0IDExIDExIDAKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDAzLCAweDAwYTEgfSwKKwkJeyAweDAyLCAweDAwMDggfSwKKwkJeyAweDAxLCAweDAxMjAgfSwKKwkJeyAweDAwLCAweDEwMDAgfSwKKwkJeyAweDA0LCAweDA4MDAgfSwKKwkJeyAweDA0LCAweDAwMDAgfSwKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBoeV9tYWdpYyk7IGkrKywgcCsrKSB7Ci0JCWludCB2YWwsIHBvcyA9IDQ7CisJCXsgMHgwMywgMHhmZjQxIH0sCisJCXsgMHgwMiwgMHhkZjYwIH0sCisJCXsgMHgwMSwgMHgwMTQwIH0sCisJCXsgMHgwMCwgMHgwMDc3IH0sCisJCXsgMHgwNCwgMHg3ODAwIH0sCisJCXsgMHgwNCwgMHg3MDAwIH0sCiAKLQkJdmFsID0gKG1kaW9fcmVhZChpb2FkZHIsIHBvcykgJiAweDBmZmYpIHwgKHAtPnJlZ3NbMF0gJiAweGZmZmYpOwotCQltZGlvX3dyaXRlKGlvYWRkciwgcG9zLCB2YWwpOwotCQl3aGlsZSAoLS1wb3MgPj0gMCkKLQkJCW1kaW9fd3JpdGUoaW9hZGRyLCBwb3MsIHAtPnJlZ3NbNCAtIHBvc10gJiAweGZmZmYpOwotCQlydGw4MTY5X3dyaXRlX2dtaWlfcmVnX2JpdChpb2FkZHIsIDQsIDExLCAxKTsgLy93IDQgMTEgMTEgMQotCQlydGw4MTY5X3dyaXRlX2dtaWlfcmVnX2JpdChpb2FkZHIsIDQsIDExLCAwKTsgLy93IDQgMTEgMTEgMAotCX0KLQltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsgLy93IDMxIDIgMCAwCisJCXsgMHgwMywgMHg4MDJmIH0sCisJCXsgMHgwMiwgMHg0ZjAyIH0sCisJCXsgMHgwMSwgMHgwNDA5IH0sCisJCXsgMHgwMCwgMHhmMGY5IH0sCisJCXsgMHgwNCwgMHg5ODAwIH0sCisJCXsgMHgwNCwgMHg5MDAwIH0sCisKKwkJeyAweDAzLCAweGRmMDEgfSwKKwkJeyAweDAyLCAweGRmMjAgfSwKKwkJeyAweDAxLCAweGZmOTUgfSwKKwkJeyAweDAwLCAweGJhMDAgfSwKKwkJeyAweDA0LCAweGE4MDAgfSwKKwkJeyAweDA0LCAweGEwMDAgfSwKKworCQl7IDB4MDMsIDB4ZmY0MSB9LAorCQl7IDB4MDIsIDB4ZGYyMCB9LAorCQl7IDB4MDEsIDB4MDE0MCB9LAorCQl7IDB4MDAsIDB4MDBiYiB9LAorCQl7IDB4MDQsIDB4YjgwMCB9LAorCQl7IDB4MDQsIDB4YjAwMCB9LAorCisJCXsgMHgwMywgMHhkZjQxIH0sCisJCXsgMHgwMiwgMHhkYzYwIH0sCisJCXsgMHgwMSwgMHg2MzQwIH0sCisJCXsgMHgwMCwgMHgwMDdkIH0sCisJCXsgMHgwNCwgMHhkODAwIH0sCisJCXsgMHgwNCwgMHhkMDAwIH0sCisKKwkJeyAweDAzLCAweGRmMDEgfSwKKwkJeyAweDAyLCAweGRmMjAgfSwKKwkJeyAweDAxLCAweDEwMGEgfSwKKwkJeyAweDAwLCAweGEwZmYgfSwKKwkJeyAweDA0LCAweGY4MDAgfSwKKwkJeyAweDA0LCAweGYwMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwMCB9LAorCQl7IDB4MGIsIDB4MDAwMCB9LAorCQl7IDB4MDAsIDB4OTIwMCB9CisJfTsKKworCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlzYl9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQpAQCAtMTM4OSw2ICsxMzk0LDEyNCBAQAogCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bDgxNjlzY2RfaHdfcGh5X2NvbmZpZ19xdWlyayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwKKwkJCQkJICAgdm9pZCBfX2lvbWVtICppb2FkZHIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGNpX2RldjsKKwl1MTYgdmVuZG9yX2lkLCBkZXZpY2VfaWQ7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwgJnZlbmRvcl9pZCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9JRCwgJmRldmljZV9pZCk7CisKKwlpZiAoKHZlbmRvcl9pZCAhPSBQQ0lfVkVORE9SX0lEX0dJR0FCWVRFKSB8fCAoZGV2aWNlX2lkICE9IDB4ZTAwMCkpCisJCXJldHVybjsKKworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDEpOworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDEwLCAweGYwMWIpOworCW1kaW9fd3JpdGUoaW9hZGRyLCAweDFmLCAweDAwMDApOworfQorCitzdGF0aWMgdm9pZCBydGw4MTY5c2NkX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsCisJCQkJICAgICB2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwlzdHJ1Y3QgcGh5X3JlZyBwaHlfcmVnX2luaXRbXSA9IHsKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDA0LCAweDAwMDAgfSwKKwkJeyAweDAzLCAweDAwYTEgfSwKKwkJeyAweDAyLCAweDAwMDggfSwKKwkJeyAweDAxLCAweDAxMjAgfSwKKwkJeyAweDAwLCAweDEwMDAgfSwKKwkJeyAweDA0LCAweDA4MDAgfSwKKwkJeyAweDA0LCAweDkwMDAgfSwKKwkJeyAweDAzLCAweDgwMmYgfSwKKwkJeyAweDAyLCAweDRmMDIgfSwKKwkJeyAweDAxLCAweDA0MDkgfSwKKwkJeyAweDAwLCAweGYwOTkgfSwKKwkJeyAweDA0LCAweDk4MDAgfSwKKwkJeyAweDA0LCAweGEwMDAgfSwKKwkJeyAweDAzLCAweGRmMDEgfSwKKwkJeyAweDAyLCAweGRmMjAgfSwKKwkJeyAweDAxLCAweGZmOTUgfSwKKwkJeyAweDAwLCAweGJhMDAgfSwKKwkJeyAweDA0LCAweGE4MDAgfSwKKwkJeyAweDA0LCAweGYwMDAgfSwKKwkJeyAweDAzLCAweGRmMDEgfSwKKwkJeyAweDAyLCAweGRmMjAgfSwKKwkJeyAweDAxLCAweDEwMWEgfSwKKwkJeyAweDAwLCAweGEwZmYgfSwKKwkJeyAweDA0LCAweGY4MDAgfSwKKwkJeyAweDA0LCAweDAwMDAgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MTAsIDB4ZjQxYiB9LAorCQl7IDB4MTQsIDB4ZmI1NCB9LAorCQl7IDB4MTgsIDB4ZjVjNyB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgxNywgMHgwY2MwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0KKwl9OworCisJcnRsX3BoeV93cml0ZShpb2FkZHIsIHBoeV9yZWdfaW5pdCwgQVJSQVlfU0laRShwaHlfcmVnX2luaXQpKTsKKworCXJ0bDgxNjlzY2RfaHdfcGh5X2NvbmZpZ19xdWlyayh0cCwgaW9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgcnRsODE2OXNjZV9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQoreworCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0geworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MDQsIDB4MDAwMCB9LAorCQl7IDB4MDMsIDB4MDBhMSB9LAorCQl7IDB4MDIsIDB4MDAwOCB9LAorCQl7IDB4MDEsIDB4MDEyMCB9LAorCQl7IDB4MDAsIDB4MTAwMCB9LAorCQl7IDB4MDQsIDB4MDgwMCB9LAorCQl7IDB4MDQsIDB4OTAwMCB9LAorCQl7IDB4MDMsIDB4ODAyZiB9LAorCQl7IDB4MDIsIDB4NGYwMiB9LAorCQl7IDB4MDEsIDB4MDQwOSB9LAorCQl7IDB4MDAsIDB4ZjA5OSB9LAorCQl7IDB4MDQsIDB4OTgwMCB9LAorCQl7IDB4MDQsIDB4YTAwMCB9LAorCQl7IDB4MDMsIDB4ZGYwMSB9LAorCQl7IDB4MDIsIDB4ZGYyMCB9LAorCQl7IDB4MDEsIDB4ZmY5NSB9LAorCQl7IDB4MDAsIDB4YmEwMCB9LAorCQl7IDB4MDQsIDB4YTgwMCB9LAorCQl7IDB4MDQsIDB4ZjAwMCB9LAorCQl7IDB4MDMsIDB4ZGYwMSB9LAorCQl7IDB4MDIsIDB4ZGYyMCB9LAorCQl7IDB4MDEsIDB4MTAxYSB9LAorCQl7IDB4MDAsIDB4YTBmZiB9LAorCQl7IDB4MDQsIDB4ZjgwMCB9LAorCQl7IDB4MDQsIDB4MDAwMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9LAorCisJCXsgMHgxZiwgMHgwMDAxIH0sCisJCXsgMHgwYiwgMHg4NDgwIH0sCisJCXsgMHgxZiwgMHgwMDAwIH0sCisKKwkJeyAweDFmLCAweDAwMDEgfSwKKwkJeyAweDE4LCAweDY3YzcgfSwKKwkJeyAweDA0LCAweDIwMDAgfSwKKwkJeyAweDAzLCAweDAwMmYgfSwKKwkJeyAweDAyLCAweDQzNjAgfSwKKwkJeyAweDAxLCAweDAxMDkgfSwKKwkJeyAweDAwLCAweDMwMjIgfSwKKwkJeyAweDA0LCAweDI4MDAgfSwKKwkJeyAweDFmLCAweDAwMDAgfSwKKworCQl7IDB4MWYsIDB4MDAwMSB9LAorCQl7IDB4MTcsIDB4MGNjMCB9LAorCQl7IDB4MWYsIDB4MDAwMCB9CisJfTsKKworCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bDgxNjhiYl9od19waHlfY29uZmlnKHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCXN0cnVjdCBwaHlfcmVnIHBoeV9yZWdfaW5pdFtdID0gewpAQCAtMTYwNyw2ICsxNzMwLDcgQEAKIAltZGlvX3dyaXRlKGlvYWRkciwgMHgxZiwgMHgwMDAwKTsKIAltZGlvX3BhdGNoKGlvYWRkciwgMHgxMSwgMSA8PCAxMik7CiAJbWRpb19wYXRjaChpb2FkZHIsIDB4MTksIDEgPDwgMTMpOworCW1kaW9fcGF0Y2goaW9hZGRyLCAweDEwLCAxIDw8IDE1KTsKIAogCXJ0bF9waHlfd3JpdGUoaW9hZGRyLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CkBAIC0xNjI4LDYgKzE3NTIsMTIgQEAKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDQ6CiAJCXJ0bDgxNjlzYl9od19waHlfY29uZmlnKGlvYWRkcik7CiAJCWJyZWFrOworCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wNToKKwkJcnRsODE2OXNjZF9od19waHlfY29uZmlnKHRwLCBpb2FkZHIpOworCQlicmVhazsKKwljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDY6CisJCXJ0bDgxNjlzY2VfaHdfcGh5X2NvbmZpZyhpb2FkZHIpOworCQlicmVhazsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMDc6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzA4OgogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wOToKQEAgLTE4NjEsOCArMTk5MSw2IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKIAkJbWRpb193cml0ZSh0cC0+bW1pb19hZGRyLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjE4MCw3ICsyMzA4LDcgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKSB7Ci0JCXUzMiB4aWQgPSBSVExfUjMyKFR4Q29uZmlnKSAmIDB4N2NmMGY4ZmY7CisJCXUzMiB4aWQgPSBSVExfUjMyKFR4Q29uZmlnKSAmIDB4OWNmMGY4ZmY7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0IDB4JWx4LCAiCiAJCSAgICAgICAiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMngsICIKQEAgLTI3NTcsNyArMjg4NSw3IEBACiAJRW5hYmxlQmlzdCB8IFwKIAlNYWNfZGJnb19vZSB8IFwKIAlGb3JjZV9oYWxmX2R1cCB8IFwKLQlGb3JjZV9oYWxmX2R1cCB8IFwKKwlGb3JjZV9yeGZsb3dfZW4gfCBcCiAJRm9yY2VfdHhmbG93X2VuIHwgXAogCUN4cGxfZGJnX3NlbCB8IFwKIAlBU0YgfCBcCkBAIC0zMjI4LDcgKzMzNTYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0bDgxNjlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNjlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBmcmFncywgZW50cnkgPSB0cC0+Y3VyX3R4ICUgTlVNX1RYX0RFU0M7CkBAIC0zMjM3LDcgKzMzNjYsNiBAQAogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAl1MzIgc3RhdHVzLCBsZW47CiAJdTMyIG9wdHMxOwotCWludCByZXQgPSBORVRERVZfVFhfT0s7CiAKIAlpZiAodW5saWtlbHkoVFhfQlVGRlNfQVZBSUwodHApIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykpIHsKIAkJaWYgKG5ldGlmX21zZ19kcnYodHApKSB7CkBAIC0zMjg4LDE0ICszNDE2LDEyIEBACiAJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQogCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBlcnJfc3RvcDoKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JcmV0ID0gTkVUREVWX1RYX0JVU1k7CiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JZ290byBvdXQ7CisJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X3BjaWVycl9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Jpb25ldC5jIGIvZHJpdmVycy9uZXQvcmlvbmV0LmMKaW5kZXggODcwMmU3YS4uYmM5OGU3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcmlvbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvcmlvbmV0LmMKQEAgLTExNCwxMSArMTE0LDYgQEAKIAogCQlpZiAoZXJyb3IgPT0gTkVUX1JYX0RST1ApIHsKIAkJCW5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJfSBlbHNlIGlmIChlcnJvciA9PSBORVRfUlhfQkFEKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2VycihybmV0KSkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYmFkIHJ4IHBhY2tldFxuIiwKLQkJCQkgICAgICAgRFJWX05BTUUpOwotCQkJbmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCX0gZWxzZSB7CiAJCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQluZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBSSU9fTUFYX01TR19TSVpFOwpAQCAtMjA4LDcgKzIwMyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybmV0LT50eF9sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCByaW9uZXRfZGJlbGxfZXZlbnQoc3RydWN0IHJpb19tcG9ydCAqbXBvcnQsIHZvaWQgKmRldl9pZCwgdTE2IHNpZCwgdTE2IHRpZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3JydW5uZXIuYyBiL2RyaXZlcnMvbmV0L3JydW5uZXIuYwppbmRleCA4MWRiY2JiLi4yMGE3MTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ycnVubmVyLmMKKysrIGIvZHJpdmVycy9uZXQvcnJ1bm5lci5jCkBAIC0xNDAxLDcgKzE0MDEsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgcnJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnJfcHJpdmF0ZSAqcnJwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcnJfcmVncyBfX2lvbWVtICpyZWdzID0gcnJwcml2LT5yZWdzOwpAQCAtMTQ2Niw3ICsxNDY3LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcnJ1bm5lci5oIGIvZHJpdmVycy9uZXQvcnJ1bm5lci5oCmluZGV4IDYxNzNmMTEuLjI4MTY5MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3JydW5uZXIuaAorKysgYi9kcml2ZXJzL25ldC9ycnVubmVyLmgKQEAgLTgzMSw3ICs4MzEsOCBAQAogc3RhdGljIGlycXJldHVybl90IHJyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCiBzdGF0aWMgaW50IHJyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHJyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgcnJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcnJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHJyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogc3RhdGljIHVuc2lnbmVkIGludCBycl9yZWFkX2VlcHJvbShzdHJ1Y3QgcnJfcHJpdmF0ZSAqcnJwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IDQ1OGRhYTAuLmRkY2NmNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uYworKysgYi9kcml2ZXJzL25ldC9zMmlvLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBzMmlvLmM6IEEgTGludXggUENJLVggRXRoZXJuZXQgZHJpdmVyIGZvciBOZXRlcmlvbiAxMEdiRSBTZXJ2ZXIgTklDCiAgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA3IE5ldGVyaW9uIEluYy4KLQorICoKICAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKICAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CkBAIC0yNSw3ICsyNSw3IEBACiAgKiBDaHJpc3RvcGhlciBIZWxsd2lnCTogU29tZSBtb3JlIDIuNiBzcGVjaWZpYyBpc3N1ZXMgaW4gdGhlIGRyaXZlci4KICAqCiAgKiBUaGUgbW9kdWxlIGxvYWRhYmxlIHBhcmFtZXRlcnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgYW5kIGEgYnJpZWYKLSAqIGV4cGxhaW5hdGlvbiBvZiBhbGwgdGhlIHZhcmlhYmxlcy4KKyAqIGV4cGxhbmF0aW9uIG9mIGFsbCB0aGUgdmFyaWFibGVzLgogICoKICAqIHJ4X3JpbmdfbnVtIDogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm9ncmFtIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSByaW5ncyB1c2VkCiAgKiBpbiB0aGUgZHJpdmVyLgpAQCAtNTQsNiArNTQsOCBAQAogICogICAgICBQb3NzaWJsZSB2YWx1ZXMgJzEnIGZvciBlbmFibGUgYW5kICcwJyBmb3IgZGlzYWJsZS4gRGVmYXVsdCBpcyAnMCcKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTc1LDExICs3NywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtOTMsMTUgKzk1LDE1IEBACiBzdGF0aWMgY2hhciBzMmlvX2RyaXZlcl9uYW1lW10gPSAiTmV0ZXJpb24iOwogc3RhdGljIGNoYXIgczJpb19kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiAKLXN0YXRpYyBpbnQgcnhkX3NpemVbMl0gPSB7MzIsNDh9Owotc3RhdGljIGludCByeGRfY291bnRbMl0gPSB7MTI3LDg1fTsKK3N0YXRpYyBpbnQgcnhkX3NpemVbMl0gPSB7MzIsIDQ4fTsKK3N0YXRpYyBpbnQgcnhkX2NvdW50WzJdID0gezEyNywgODV9OwogCiBzdGF0aWMgaW5saW5lIGludCBSWERfSVNfVVAyRFQoc3RydWN0IFJ4RF90ICpyeGRwKQogewogCWludCByZXQ7CiAKIAlyZXQgPSAoKCEocnhkcC0+Q29udHJvbF8xICYgUlhEX09XTl9YRU5BKSkgJiYKLQkJKEdFVF9SWERfTUFSS0VSKHJ4ZHAtPkNvbnRyb2xfMikgIT0gVEhFX1JYRF9NQVJLKSk7CisJICAgICAgIChHRVRfUlhEX01BUktFUihyeGRwLT5Db250cm9sXzIpICE9IFRIRV9SWERfTUFSSykpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMSwyMSArMTEzLDIxIEBACiAgKiBwcm9ibGVtLCA2MDBCLCA2MDBDLCA2MDBELCA2NDBCLCA2NDBDIGFuZCA2NDBELgogICogbWFjcm8gYmVsb3cgaWRlbnRpZmllcyB0aGVzZSBjYXJkcyBnaXZlbiB0aGUgc3Vic3lzdGVtX2lkLgogICovCi0jZGVmaW5lIENBUkRTX1dJVEhfRkFVTFRZX0xJTktfSU5ESUNBVE9SUyhkZXZfdHlwZSwgc3ViaWQpIFwKLQkoZGV2X3R5cGUgPT0gWEZSQU1FX0lfREVWSUNFKSA/CQkJXAotCQkoKCgoc3ViaWQgPj0gMHg2MDBCKSAmJiAoc3ViaWQgPD0gMHg2MDBEKSkgfHwgXAotCQkgKChzdWJpZCA+PSAweDY0MEIpICYmIChzdWJpZCA8PSAweDY0MEQpKSkgPyAxIDogMCkgOiAwCisjZGVmaW5lIENBUkRTX1dJVEhfRkFVTFRZX0xJTktfSU5ESUNBVE9SUyhkZXZfdHlwZSwgc3ViaWQpCQlcCisJKGRldl90eXBlID09IFhGUkFNRV9JX0RFVklDRSkgPwkJCQkJXAorCSgoKChzdWJpZCA+PSAweDYwMEIpICYmIChzdWJpZCA8PSAweDYwMEQpKSB8fAkJCVwKKwkgICgoc3ViaWQgPj0gMHg2NDBCKSAmJiAoc3ViaWQgPD0gMHg2NDBEKSkpID8gMSA6IDApIDogMAogCiAjZGVmaW5lIExJTktfSVNfVVAodmFsNjQpICghKHZhbDY0ICYgKEFEQVBURVJfU1RBVFVTX1JNQUNfUkVNT1RFX0ZBVUxUIHwgXAogCQkJCSAgICAgIEFEQVBURVJfU1RBVFVTX1JNQUNfTE9DQUxfRkFVTFQpKSkKIAotc3RhdGljIGlubGluZSBpbnQgaXNfczJpb19jYXJkX3VwKGNvbnN0IHN0cnVjdCBzMmlvX25pYyAqIHNwKQorc3RhdGljIGlubGluZSBpbnQgaXNfczJpb19jYXJkX3VwKGNvbnN0IHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJcmV0dXJuIHRlc3RfYml0KF9fUzJJT19TVEFURV9DQVJEX1VQLCAmc3AtPnN0YXRlKTsKIH0KIAogLyogRXRodG9vbCByZWxhdGVkIHZhcmlhYmxlcyBhbmQgTWFjcm9zLiAqLwotc3RhdGljIGNoYXIgczJpb19nc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CitzdGF0aWMgY29uc3QgY2hhciBzMmlvX2dzdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKIAkiUmVnaXN0ZXIgdGVzdFx0KG9mZmxpbmUpIiwKIAkiRWVwcm9tIHRlc3RcdChvZmZsaW5lKSIsCiAJIkxpbmsgdGVzdFx0KG9ubGluZSkiLApAQCAtMTMzLDcgKzEzNSw3IEBACiAJIkJJU1QgVGVzdFx0KG9mZmxpbmUpIgogfTsKIAotc3RhdGljIGNoYXIgZXRodG9vbF94ZW5hX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0geworc3RhdGljIGNvbnN0IGNoYXIgZXRodG9vbF94ZW5hX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0gewogCXsidG1hY19mcm1zIn0sCiAJeyJ0bWFjX2RhdGFfb2N0ZXRzIn0sCiAJeyJ0bWFjX2Ryb3BfZnJtcyJ9LApAQCAtMjMwLDcgKzIzMiw3IEBACiAJeyJyeGZfd3JfY250In0KIH07CiAKLXN0YXRpYyBjaGFyIGV0aHRvb2xfZW5oYW5jZWRfc3RhdHNfa2V5c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CitzdGF0aWMgY29uc3QgY2hhciBldGh0b29sX2VuaGFuY2VkX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0gewogCXsicm1hY190dGxfMTUxOV80MDk1X2ZybXMifSwKIAl7InJtYWNfdHRsXzQwOTZfODE5MV9mcm1zIn0sCiAJeyJybWFjX3R0bF84MTkyX21heF9mcm1zIn0sCkBAIC0yNDksNyArMjUxLDcgQEAKIAl7ImxpbmtfZmF1bHRfY250In0KIH07CiAKLXN0YXRpYyBjaGFyIGV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXNbXVtFVEhfR1NUUklOR19MRU5dID0geworc3RhdGljIGNvbnN0IGNoYXIgZXRodG9vbF9kcml2ZXJfc3RhdHNfa2V5c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CiAJeyJcbiBEUklWRVIgU1RBVElTVElDUyJ9LAogCXsic2luZ2xlX2JpdF9lY2NfZXJycyJ9LAogCXsiZG91YmxlX2JpdF9lY2NfZXJycyJ9LApAQCAtMzI4LDIwICszMzAsMjAgQEAKICNkZWZpbmUgUzJJT19FTkhBTkNFRF9TVEFUX0xFTglBUlJBWV9TSVpFKGV0aHRvb2xfZW5oYW5jZWRfc3RhdHNfa2V5cykKICNkZWZpbmUgUzJJT19EUklWRVJfU1RBVF9MRU4JQVJSQVlfU0laRShldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzKQogCi0jZGVmaW5lIFhGUkFNRV9JX1NUQVRfTEVOIChTMklPX1hFTkFfU1RBVF9MRU4gKyBTMklPX0RSSVZFUl9TVEFUX0xFTiApCi0jZGVmaW5lIFhGUkFNRV9JSV9TVEFUX0xFTiAoWEZSQU1FX0lfU1RBVF9MRU4gKyBTMklPX0VOSEFOQ0VEX1NUQVRfTEVOICkKKyNkZWZpbmUgWEZSQU1FX0lfU1RBVF9MRU4gKFMySU9fWEVOQV9TVEFUX0xFTiArIFMySU9fRFJJVkVSX1NUQVRfTEVOKQorI2RlZmluZSBYRlJBTUVfSUlfU1RBVF9MRU4gKFhGUkFNRV9JX1NUQVRfTEVOICsgUzJJT19FTkhBTkNFRF9TVEFUX0xFTikKIAotI2RlZmluZSBYRlJBTUVfSV9TVEFUX1NUUklOR1NfTEVOICggWEZSQU1FX0lfU1RBVF9MRU4gKiBFVEhfR1NUUklOR19MRU4gKQotI2RlZmluZSBYRlJBTUVfSUlfU1RBVF9TVFJJTkdTX0xFTiAoIFhGUkFNRV9JSV9TVEFUX0xFTiAqIEVUSF9HU1RSSU5HX0xFTiApCisjZGVmaW5lIFhGUkFNRV9JX1NUQVRfU1RSSU5HU19MRU4gKFhGUkFNRV9JX1NUQVRfTEVOICogRVRIX0dTVFJJTkdfTEVOKQorI2RlZmluZSBYRlJBTUVfSUlfU1RBVF9TVFJJTkdTX0xFTiAoWEZSQU1FX0lJX1NUQVRfTEVOICogRVRIX0dTVFJJTkdfTEVOKQogCiAjZGVmaW5lIFMySU9fVEVTVF9MRU4JQVJSQVlfU0laRShzMmlvX2dzdHJpbmdzKQotI2RlZmluZSBTMklPX1NUUklOR1NfTEVOCVMySU9fVEVTVF9MRU4gKiBFVEhfR1NUUklOR19MRU4KKyNkZWZpbmUgUzJJT19TVFJJTkdTX0xFTgkoUzJJT19URVNUX0xFTiAqIEVUSF9HU1RSSU5HX0xFTikKIAotI2RlZmluZSBTMklPX1RJTUVSX0NPTkYodGltZXIsIGhhbmRsZSwgYXJnLCBleHApCQlcCi0JCQlpbml0X3RpbWVyKCZ0aW1lcik7CQkJXAotCQkJdGltZXIuZnVuY3Rpb24gPSBoYW5kbGU7CQlcCi0JCQl0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFyZzsJXAotCQkJbW9kX3RpbWVyKCZ0aW1lciwgKGppZmZpZXMgKyBleHApKQlcCisjZGVmaW5lIFMySU9fVElNRVJfQ09ORih0aW1lciwgaGFuZGxlLCBhcmcsIGV4cCkJXAorCWluaXRfdGltZXIoJnRpbWVyKTsJCQkJXAorCXRpbWVyLmZ1bmN0aW9uID0gaGFuZGxlOwkJCVwKKwl0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYXJnOwkJXAorCW1vZF90aW1lcigmdGltZXIsIChqaWZmaWVzICsgZXhwKSkJCVwKIAogLyogY29weSBtYWMgYWRkciB0byBkZWZfbWFjX2FkZHIgYXJyYXkgKi8KIHN0YXRpYyB2b2lkIGRvX3MyaW9fY29weV9tYWNfYWRkcihzdHJ1Y3QgczJpb19uaWMgKnNwLCBpbnQgb2Zmc2V0LCB1NjQgbWFjX2FkZHIpCkBAIC0zNjEsMTYgKzM2MywyMiBAQAogCWludCBpOwogCXN0cnVjdCBzMmlvX25pYyAqbmljID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzW01BWF9UWF9GSUZPU107Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2ssIGZsYWdzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7CisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFnc1tpXSk7CisJfQogCiAJbmljLT52bGdycCA9IGdycDsKLQlmb3IgKGkgPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsgaSA+PSAwOyBpLS0pCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY19jb250cm9sLT5maWZvc1tpXS50eF9sb2NrLAotCQkJCWZsYWdzW2ldKTsKKworCWZvciAoaSA9IGNvbmZpZy0+dHhfZmlmb19udW0gLSAxOyBpID49IDA7IGktLSkgeworCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFnc1tpXSk7CisJfQogfQogCiAvKiBVbnJlZ2lzdGVyIHRoZSB2bGFuICovCkBAIC0zNzksMTggKzM4NywyMyBAQAogCWludCBpOwogCXN0cnVjdCBzMmlvX25pYyAqbmljID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzW01BWF9UWF9GSUZPU107Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2xvY2ssIGZsYWdzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7CisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFnc1tpXSk7CisJfQogCiAJaWYgKG5pYy0+dmxncnApCiAJCXZsYW5fZ3JvdXBfc2V0X2RldmljZShuaWMtPnZsZ3JwLCB2aWQsIE5VTEwpOwogCi0JZm9yIChpID0gY29uZmlnLT50eF9maWZvX251bSAtIDE7IGkgPj0gMDsgaS0tKQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfbG9jaywKLQkJCWZsYWdzW2ldKTsKKwlmb3IgKGkgPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbaV07CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3NbaV0pOworCX0KIH0KIAogLyoKQEAgLTQ5NiwxMSArNTA5LDExIEBACiBTMklPX1BBUk1fSU5UKHZsYW5fdGFnX3N0cmlwLCBOT19TVFJJUF9JTl9QUk9NSVNDKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCB0eF9maWZvX2xlbltNQVhfVFhfRklGT1NdID0KLSAgICB7REVGQVVMVF9GSUZPXzBfTEVOLCBbMSAuLi4oTUFYX1RYX0ZJRk9TIC0gMSldID0gREVGQVVMVF9GSUZPXzFfN19MRU59Owore0RFRkFVTFRfRklGT18wX0xFTiwgWzEgLi4uKE1BWF9UWF9GSUZPUyAtIDEpXSA9IERFRkFVTFRfRklGT18xXzdfTEVOfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnhfcmluZ19zeltNQVhfUlhfUklOR1NdID0KLSAgICB7WzAgLi4uKE1BWF9SWF9SSU5HUyAtIDEpXSA9IFNNQUxMX0JMS19DTlR9Owore1swIC4uLihNQVhfUlhfUklOR1MgLSAxKV0gPSBTTUFMTF9CTEtfQ05UfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnRzX2ZybV9sZW5bTUFYX1JYX1JJTkdTXSA9Ci0gICAge1swIC4uLihNQVhfUlhfUklOR1MgLSAxKV0gPSAwIH07Cit7WzAgLi4uKE1BWF9SWF9SSU5HUyAtIDEpXSA9IDAgfTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KHR4X2ZpZm9fbGVuLCB1aW50LCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShyeF9yaW5nX3N6LCB1aW50LCBOVUxMLCAwKTsKQEAgLTUxNiw5ICs1MjksOSBAQAogCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfUzJJT19VTkksCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAogCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfSEVSQ19XSU4sCi0gICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKLSAgICAgICAge1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9IRVJDX1VOSSwKLSAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKKwl7UENJX1ZFTkRPUl9JRF9TMklPLCBQQ0lfREVWSUNFX0lEX0hFUkNfVU5JLAorCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEfSwKIAl7MCx9CiB9OwogCkBAIC01MzEsMTEgKzU0NCwxMSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHMyaW9fZHJpdmVyID0gewotICAgICAgLm5hbWUgPSAiUzJJTyIsCi0gICAgICAuaWRfdGFibGUgPSBzMmlvX3RibCwKLSAgICAgIC5wcm9iZSA9IHMyaW9faW5pdF9uaWMsCi0gICAgICAucmVtb3ZlID0gX19kZXZleGl0X3AoczJpb19yZW1fbmljKSwKLSAgICAgIC5lcnJfaGFuZGxlciA9ICZzMmlvX2Vycl9oYW5kbGVyLAorCS5uYW1lID0gIlMySU8iLAorCS5pZF90YWJsZSA9IHMyaW9fdGJsLAorCS5wcm9iZSA9IHMyaW9faW5pdF9uaWMsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHMyaW9fcmVtX25pYyksCisJLmVycl9oYW5kbGVyID0gJnMyaW9fZXJyX2hhbmRsZXIsCiB9OwogCiAvKiBBIHNpbXBsaWZpZXIgbWFjcm8gdXNlZCBib3RoIGJ5IGluaXQgYW5kIGZyZWUgc2hhcmVkX21lbSBGbnMoKS4gKi8KQEAgLTYyNywzNyArNjQwLDM2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5pYy0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgdG1wOwogCXN0cnVjdCBidWZmQWRkICpiYTsKLQotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7CiAJdW5zaWduZWQgbG9uZyBsb25nIG1lbV9hbGxvY2F0ZWQgPSAwOwogCi0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKLQljb25maWcgPSAmbmljLT5jb25maWc7Ci0KLQotCS8qIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIFRYRExzIGluIEZJT0ZzICovCisJLyogQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgVFhETHMgaW4gRklGT3MgKi8KIAlzaXplID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7Ci0JCXNpemUgKz0gY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW47CisJCXN0cnVjdCB0eF9maWZvX2NvbmZpZyAqdHhfY2ZnID0gJmNvbmZpZy0+dHhfY2ZnW2ldOworCisJCXNpemUgKz0gdHhfY2ZnLT5maWZvX2xlbjsKIAl9CiAJaWYgKHNpemUgPiBNQVhfQVZBSUxBQkxFX1RYRFMpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBSZXF1ZXN0ZWQgVHhEcyB0b28gaGlnaCwgIik7Ci0JCURCR19QUklOVChFUlJfREJHLCAiUmVxdWVzdGVkOiAlZCwgbWF4IHN1cHBvcnRlZDogODE5MlxuIiwgc2l6ZSk7CisJCURCR19QUklOVChFUlJfREJHLAorCQkJICAiVG9vIG1hbnkgVHhEcyByZXF1ZXN0ZWQ6ICVkLCBtYXggc3VwcG9ydGVkOiAlZFxuIiwKKwkJCSAgc2l6ZSwgTUFYX0FWQUlMQUJMRV9UWERTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJc2l6ZSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewotCQlzaXplID0gY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW47CisJCXN0cnVjdCB0eF9maWZvX2NvbmZpZyAqdHhfY2ZnID0gJmNvbmZpZy0+dHhfY2ZnW2ldOworCisJCXNpemUgPSB0eF9jZmctPmZpZm9fbGVuOwogCQkvKgogCQkgKiBMZWdhbCB2YWx1ZXMgYXJlIGZyb20gMiB0byA4MTkyCiAJCSAqLwogCQlpZiAoc2l6ZSA8IDIpIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogSW52YWxpZCBmaWZvIGxlbiAoJWQpIiwgc2l6ZSk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgImZvciBmaWZvICVkXG4iLCBpKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiczJpbzogTGVnYWwgdmFsdWVzIGZvciBmaWZvIGxlbiIKLQkJCQkiYXJlIDIgdG8gODE5MlxuIik7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIkZpZm8gJWQ6IEludmFsaWQgbGVuZ3RoICglZCkgLSAiCisJCQkJICAiVmFsaWQgbGVuZ3RocyBhcmUgMiB0aHJvdWdoIDgxOTJcbiIsCisJCQkJICBpLCBzaXplKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNjY2LDEzICs2NzgsMTQgQEAKIAlsc3RfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBsc3Rfc2l6ZTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKLQkJaW50IGZpZm9fbGVuID0gY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW47CisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKwkJaW50IGZpZm9fbGVuID0gdHhfY2ZnLT5maWZvX2xlbjsKIAkJaW50IGxpc3RfaG9sZGVyX3NpemUgPSBmaWZvX2xlbiAqIHNpemVvZihzdHJ1Y3QgbGlzdF9pbmZvX2hvbGQpOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0ubGlzdF9pbmZvID0ga3phbGxvYyhsaXN0X2hvbGRlcl9zaXplLAotCQkJCQkJCSAgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mbykgewotCQkJREJHX1BSSU5UKElORk9fREJHLAotCQkJCSAgIk1hbGxvYyBmYWlsZWQgZm9yIGxpc3RfaW5mb1xuIik7CisKKwkJZmlmby0+bGlzdF9pbmZvID0ga3phbGxvYyhsaXN0X2hvbGRlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFmaWZvLT5saXN0X2luZm8pIHsKKwkJCURCR19QUklOVChJTkZPX0RCRywgIk1hbGxvYyBmYWlsZWQgZm9yIGxpc3RfaW5mb1xuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQltZW1fYWxsb2NhdGVkICs9IGxpc3RfaG9sZGVyX3NpemU7CkBAIC02ODAsMTYgKzY5MywxNyBAQAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKIAkJaW50IHBhZ2VfbnVtID0gVFhEX01FTV9QQUdFX0NOVChjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiwKIAkJCQkJCWxzdF9wZXJfcGFnZSk7Ci0JCW1hY19jb250cm9sLT5maWZvc1tpXS50eF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IDA7Ci0JCW1hY19jb250cm9sLT5maWZvc1tpXS50eF9jdXJyX3B1dF9pbmZvLmZpZm9fbGVuID0KLQkJICAgIGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuIC0gMTsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gMDsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnR4X2N1cnJfZ2V0X2luZm8uZmlmb19sZW4gPQotCQkgICAgY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4gLSAxOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0uZmlmb19ubyA9IGk7Ci0JCW1hY19jb250cm9sLT5maWZvc1tpXS5uaWMgPSBuaWM7Ci0JCW1hY19jb250cm9sLT5maWZvc1tpXS5tYXhfdHhkcyA9IE1BWF9TS0JfRlJBR1MgKyAyOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0uZGV2ID0gZGV2OworCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKwkJc3RydWN0IHR4X2ZpZm9fY29uZmlnICp0eF9jZmcgPSAmY29uZmlnLT50eF9jZmdbaV07CisKKwkJZmlmby0+dHhfY3Vycl9wdXRfaW5mby5vZmZzZXQgPSAwOworCQlmaWZvLT50eF9jdXJyX3B1dF9pbmZvLmZpZm9fbGVuID0gdHhfY2ZnLT5maWZvX2xlbiAtIDE7CisJCWZpZm8tPnR4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gMDsKKwkJZmlmby0+dHhfY3Vycl9nZXRfaW5mby5maWZvX2xlbiA9IHR4X2NmZy0+Zmlmb19sZW4gLSAxOworCQlmaWZvLT5maWZvX25vID0gaTsKKwkJZmlmby0+bmljID0gbmljOworCQlmaWZvLT5tYXhfdHhkcyA9IE1BWF9TS0JfRlJBR1MgKyAyOworCQlmaWZvLT5kZXYgPSBkZXY7CiAKIAkJZm9yIChqID0gMDsgaiA8IHBhZ2VfbnVtOyBqKyspIHsKIAkJCWludCBrID0gMDsKQEAgLTY5OSw4ICs3MTMsNyBAQAogCQkJCQkJICAgICBQQUdFX1NJWkUsICZ0bXBfcCk7CiAJCQlpZiAoIXRtcF92KSB7CiAJCQkJREJHX1BSSU5UKElORk9fREJHLAotCQkJCQkgICJwY2lfYWxsb2NfY29uc2lzdGVudCAiKTsKLQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICJmYWlsZWQgZm9yIFR4RExcbiIpOworCQkJCQkgICJwY2lfYWxsb2NfY29uc2lzdGVudCBmYWlsZWQgZm9yIFR4RExcbiIpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQkJLyogSWYgd2UgZ290IGEgemVybyBETUEgYWRkcmVzcyhjYW4gaGFwcGVuIG9uCkBAIC03MTEsMzcgKzcyNCwzOCBAQAogCQkJaWYgKCF0bXBfcCkgewogCQkJCW1hY19jb250cm9sLT56ZXJvZG1hX3ZpcnRfYWRkciA9IHRtcF92OwogCQkJCURCR19QUklOVChJTklUX0RCRywKLQkJCQkiJXM6IFplcm8gRE1BIGFkZHJlc3MgZm9yIFR4REwuICIsIGRldi0+bmFtZSk7Ci0JCQkJREJHX1BSSU5UKElOSVRfREJHLAotCQkJCSJWaXJ0dWFsIGFkZHJlc3MgJXBcbiIsIHRtcF92KTsKKwkJCQkJICAiJXM6IFplcm8gRE1BIGFkZHJlc3MgZm9yIFR4REwuICIKKwkJCQkJICAiVmlydHVhbCBhZGRyZXNzICVwXG4iLAorCQkJCQkgIGRldi0+bmFtZSwgdG1wX3YpOwogCQkJCXRtcF92ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobmljLT5wZGV2LAotCQkJCQkJICAgICBQQUdFX1NJWkUsICZ0bXBfcCk7CisJCQkJCQkJICAgICBQQUdFX1NJWkUsICZ0bXBfcCk7CiAJCQkJaWYgKCF0bXBfdikgewogCQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsCi0JCQkJCSAgInBjaV9hbGxvY19jb25zaXN0ZW50ICIpOwotCQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICJmYWlsZWQgZm9yIFR4RExcbiIpOworCQkJCQkJICAicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkIGZvciBUeERMXG4iKTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQogCQkJCW1lbV9hbGxvY2F0ZWQgKz0gUEFHRV9TSVpFOwogCQkJfQogCQkJd2hpbGUgKGsgPCBsc3RfcGVyX3BhZ2UpIHsKIAkJCQlpbnQgbCA9IChqICogbHN0X3Blcl9wYWdlKSArIGs7Ci0JCQkJaWYgKGwgPT0gY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4pCisJCQkJaWYgKGwgPT0gdHhfY2ZnLT5maWZvX2xlbikKIAkJCQkJYnJlYWs7Ci0JCQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mb1tsXS5saXN0X3ZpcnRfYWRkciA9Ci0JCQkJICAgIHRtcF92ICsgKGsgKiBsc3Rfc2l6ZSk7Ci0JCQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mb1tsXS5saXN0X3BoeV9hZGRyID0KLQkJCQkgICAgdG1wX3AgKyAoayAqIGxzdF9zaXplKTsKKwkJCQlmaWZvLT5saXN0X2luZm9bbF0ubGlzdF92aXJ0X2FkZHIgPQorCQkJCQl0bXBfdiArIChrICogbHN0X3NpemUpOworCQkJCWZpZm8tPmxpc3RfaW5mb1tsXS5saXN0X3BoeV9hZGRyID0KKwkJCQkJdG1wX3AgKyAoayAqIGxzdF9zaXplKTsKIAkJCQlrKys7CiAJCQl9CiAJCX0KIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7Ci0JCXNpemUgPSBjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbjsKLQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnVmb19pbl9iYW5kX3YKLQkJCT0ga2NhbGxvYyhzaXplLCBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFjX2NvbnRyb2wtPmZpZm9zW2ldLnVmb19pbl9iYW5kX3YpCisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKworCQlzaXplID0gdHhfY2ZnLT5maWZvX2xlbjsKKwkJZmlmby0+dWZvX2luX2JhbmRfdiA9IGtjYWxsb2Moc2l6ZSwgc2l6ZW9mKHU2NCksIEdGUF9LRVJORUwpOworCQlpZiAoIWZpZm8tPnVmb19pbl9iYW5kX3YpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtX2FsbG9jYXRlZCArPSAoc2l6ZSAqIHNpemVvZih1NjQpKTsKIAl9CkBAIC03NDksMjAgKzc2MywxOSBAQAogCS8qIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIFJYRHMgaW4gUmluZ3MgKi8KIAlzaXplID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCWlmIChjb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkICUKLQkJICAgIChyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKSkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUnhEIGNvdW50IG9mICIsIGRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJpbmclZCBpcyBub3QgYSBtdWx0aXBsZSBvZiAiLAotCQkJCSAgaSk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJ4RHMgcGVyIEJsb2NrIik7CisJCXN0cnVjdCByeF9yaW5nX2NvbmZpZyAqcnhfY2ZnID0gJmNvbmZpZy0+cnhfY2ZnW2ldOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQlpZiAocnhfY2ZnLT5udW1fcnhkICUgKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpKSB7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBSaW5nJWQgUnhEIGNvdW50IGlzIG5vdCBhICIKKwkJCQkgICJtdWx0aXBsZSBvZiBSeERzIHBlciBCbG9ja1xuIiwKKwkJCQkgIGRldi0+bmFtZSwgaSk7CiAJCQlyZXR1cm4gRkFJTFVSRTsKIAkJfQotCQlzaXplICs9IGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQ7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5ibG9ja19jb3VudCA9Ci0JCQljb25maWctPnJ4X2NmZ1tpXS5udW1fcnhkIC8KLQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxICk7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5wa3RfY250ID0gY29uZmlnLT5yeF9jZmdbaV0ubnVtX3J4ZCAtCi0JCQltYWNfY29udHJvbC0+cmluZ3NbaV0uYmxvY2tfY291bnQ7CisJCXNpemUgKz0gcnhfY2ZnLT5udW1fcnhkOworCQlyaW5nLT5ibG9ja19jb3VudCA9IHJ4X2NmZy0+bnVtX3J4ZCAvCisJCQkocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSk7CisJCXJpbmctPnBrdF9jbnQgPSByeF9jZmctPm51bV9yeGQgLSByaW5nLT5ibG9ja19jb3VudDsKIAl9CiAJaWYgKG5pYy0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkKIAkJc2l6ZSA9IChzaXplICogKHNpemVvZihzdHJ1Y3QgUnhEMSkpKTsKQEAgLTc3MCwyNyArNzgzLDI3IEBACiAJCXNpemUgPSAoc2l6ZSAqIChzaXplb2Yoc3RydWN0IFJ4RDMpKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX2dldF9pbmZvLmJsb2NrX2luZGV4ID0gMDsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gMDsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2N1cnJfZ2V0X2luZm8ucmluZ19sZW4gPQotCQkgICAgY29uZmlnLT5yeF9jZmdbaV0ubnVtX3J4ZCAtIDE7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX3B1dF9pbmZvLmJsb2NrX2luZGV4ID0gMDsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2N1cnJfcHV0X2luZm8ub2Zmc2V0ID0gMDsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2N1cnJfcHV0X2luZm8ucmluZ19sZW4gPQotCQkgICAgY29uZmlnLT5yeF9jZmdbaV0ubnVtX3J4ZCAtIDE7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5uaWMgPSBuaWM7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yaW5nX25vID0gaTsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmxybyA9IGxyb19lbmFibGU7CisJCXN0cnVjdCByeF9yaW5nX2NvbmZpZyAqcnhfY2ZnID0gJmNvbmZpZy0+cnhfY2ZnW2ldOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKIAotCQlibGtfY250ID0gY29uZmlnLT5yeF9jZmdbaV0ubnVtX3J4ZCAvCi0JCQkJKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpOworCQlyaW5nLT5yeF9jdXJyX2dldF9pbmZvLmJsb2NrX2luZGV4ID0gMDsKKwkJcmluZy0+cnhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPSAwOworCQlyaW5nLT5yeF9jdXJyX2dldF9pbmZvLnJpbmdfbGVuID0gcnhfY2ZnLT5udW1fcnhkIC0gMTsKKwkJcmluZy0+cnhfY3Vycl9wdXRfaW5mby5ibG9ja19pbmRleCA9IDA7CisJCXJpbmctPnJ4X2N1cnJfcHV0X2luZm8ub2Zmc2V0ID0gMDsKKwkJcmluZy0+cnhfY3Vycl9wdXRfaW5mby5yaW5nX2xlbiA9IHJ4X2NmZy0+bnVtX3J4ZCAtIDE7CisJCXJpbmctPm5pYyA9IG5pYzsKKwkJcmluZy0+cmluZ19ubyA9IGk7CisJCXJpbmctPmxybyA9IGxyb19lbmFibGU7CisKKwkJYmxrX2NudCA9IHJ4X2NmZy0+bnVtX3J4ZCAvIChyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKTsKIAkJLyogIEFsbG9jYXRpbmcgYWxsIHRoZSBSeCBibG9ja3MgKi8KIAkJZm9yIChqID0gMDsgaiA8IGJsa19jbnQ7IGorKykgewogCQkJc3RydWN0IHJ4X2Jsb2NrX2luZm8gKnJ4X2Jsb2NrczsKIAkJCWludCBsOwogCi0JCQlyeF9ibG9ja3MgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1tqXTsKLQkJCXNpemUgPSBTSVpFX09GX0JMT0NLOyAvL3NpemUgaXMgYWx3YXlzIHBhZ2Ugc2l6ZQorCQkJcnhfYmxvY2tzID0gJnJpbmctPnJ4X2Jsb2Nrc1tqXTsKKwkJCXNpemUgPSBTSVpFX09GX0JMT0NLOwkvKiBzaXplIGlzIGFsd2F5cyBwYWdlIHNpemUgKi8KIAkJCXRtcF92X2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChuaWMtPnBkZXYsIHNpemUsCiAJCQkJCQkJICAmdG1wX3BfYWRkcik7CiAJCQlpZiAodG1wX3ZfYWRkciA9PSBOVUxMKSB7CkBAIC04MDUsMTYgKzgxOCwxNiBAQAogCQkJfQogCQkJbWVtX2FsbG9jYXRlZCArPSBzaXplOwogCQkJbWVtc2V0KHRtcF92X2FkZHIsIDAsIHNpemUpOworCisJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCByeGRfaW5mbykgKgorCQkJCXJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXTsKIAkJCXJ4X2Jsb2Nrcy0+YmxvY2tfdmlydF9hZGRyID0gdG1wX3ZfYWRkcjsKIAkJCXJ4X2Jsb2Nrcy0+YmxvY2tfZG1hX2FkZHIgPSB0bXBfcF9hZGRyOwotCQkJcnhfYmxvY2tzLT5yeGRzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJ4ZF9pbmZvKSoKLQkJCQkJCSAgcnhkX2NvdW50W25pYy0+cnhkX21vZGVdLAotCQkJCQkJICBHRlBfS0VSTkVMKTsKKwkJCXJ4X2Jsb2Nrcy0+cnhkcyA9IGttYWxsb2Moc2l6ZSwgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFyeF9ibG9ja3MtPnJ4ZHMpCiAJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQltZW1fYWxsb2NhdGVkICs9Ci0JCQkoc2l6ZW9mKHN0cnVjdCByeGRfaW5mbykqIHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSk7Ci0JCQlmb3IgKGw9MDsgbDxyeGRfY291bnRbbmljLT5yeGRfbW9kZV07bCsrKSB7CisJCQltZW1fYWxsb2NhdGVkICs9IHNpemU7CisJCQlmb3IgKGwgPSAwOyBsIDwgcnhkX2NvdW50W25pYy0+cnhkX21vZGVdOyBsKyspIHsKIAkJCQlyeF9ibG9ja3MtPnJ4ZHNbbF0udmlydF9hZGRyID0KIAkJCQkJcnhfYmxvY2tzLT5ibG9ja192aXJ0X2FkZHIgKwogCQkJCQkocnhkX3NpemVbbmljLT5yeGRfbW9kZV0gKiBsKTsKQEAgLTgyNSwyMiArODM4LDE3IEBACiAJCX0KIAkJLyogSW50ZXJsaW5raW5nIGFsbCBSeCBCbG9ja3MgKi8KIAkJZm9yIChqID0gMDsgaiA8IGJsa19jbnQ7IGorKykgewotCQkJdG1wX3ZfYWRkciA9Ci0JCQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1tqXS5ibG9ja192aXJ0X2FkZHI7Ci0JCQl0bXBfdl9hZGRyX25leHQgPQotCQkJCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3NbKGogKyAxKSAlCi0JCQkJCSAgICAgIGJsa19jbnRdLmJsb2NrX3ZpcnRfYWRkcjsKLQkJCXRtcF9wX2FkZHIgPQotCQkJCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3Nbal0uYmxvY2tfZG1hX2FkZHI7Ci0JCQl0bXBfcF9hZGRyX25leHQgPQotCQkJCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9ibG9ja3NbKGogKyAxKSAlCi0JCQkJCSAgICAgIGJsa19jbnRdLmJsb2NrX2RtYV9hZGRyOworCQkJaW50IG5leHQgPSAoaiArIDEpICUgYmxrX2NudDsKKwkJCXRtcF92X2FkZHIgPSByaW5nLT5yeF9ibG9ja3Nbal0uYmxvY2tfdmlydF9hZGRyOworCQkJdG1wX3ZfYWRkcl9uZXh0ID0gcmluZy0+cnhfYmxvY2tzW25leHRdLmJsb2NrX3ZpcnRfYWRkcjsKKwkJCXRtcF9wX2FkZHIgPSByaW5nLT5yeF9ibG9ja3Nbal0uYmxvY2tfZG1hX2FkZHI7CisJCQl0bXBfcF9hZGRyX25leHQgPSByaW5nLT5yeF9ibG9ja3NbbmV4dF0uYmxvY2tfZG1hX2FkZHI7CiAKLQkJCXByZV9yeGRfYmxrID0gKHN0cnVjdCBSeERfYmxvY2sgKikgdG1wX3ZfYWRkcjsKKwkJCXByZV9yeGRfYmxrID0gKHN0cnVjdCBSeERfYmxvY2sgKil0bXBfdl9hZGRyOwogCQkJcHJlX3J4ZF9ibGstPnJlc2VydmVkXzJfcE5leHRfUnhEX2Jsb2NrID0KLQkJCSAgICAodW5zaWduZWQgbG9uZykgdG1wX3ZfYWRkcl9uZXh0OworCQkJCSh1bnNpZ25lZCBsb25nKXRtcF92X2FkZHJfbmV4dDsKIAkJCXByZV9yeGRfYmxrLT5wTmV4dF9SeERfQmxrX3BoeXNpY2FsID0KLQkJCSAgICAodTY0KSB0bXBfcF9hZGRyX25leHQ7CisJCQkJKHU2NCl0bXBfcF9hZGRyX25leHQ7CiAJCX0KIAl9CiAJaWYgKG5pYy0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKQEAgLTg0OSw0OCArODU3LDQ2IEBACiAJCSAqIGFuZCB0aGUgYnVmZmVycyBhcyB3ZWxsLgogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQkJYmxrX2NudCA9IGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLwotCQkJICAgKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSsgMSk7Ci0JCQltYWNfY29udHJvbC0+cmluZ3NbaV0uYmEgPQotCQkJCWttYWxsb2MoKHNpemVvZihzdHJ1Y3QgYnVmZkFkZCAqKSAqIGJsa19jbnQpLAotCQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIW1hY19jb250cm9sLT5yaW5nc1tpXS5iYSkKKwkJCXN0cnVjdCByeF9yaW5nX2NvbmZpZyAqcnhfY2ZnID0gJmNvbmZpZy0+cnhfY2ZnW2ldOworCQkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJCWJsa19jbnQgPSByeF9jZmctPm51bV9yeGQgLworCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKTsKKwkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGJ1ZmZBZGQgKikgKiBibGtfY250OworCQkJcmluZy0+YmEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFyaW5nLT5iYSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCW1lbV9hbGxvY2F0ZWQgKz0oc2l6ZW9mKHN0cnVjdCBidWZmQWRkICopICogYmxrX2NudCk7CisJCQltZW1fYWxsb2NhdGVkICs9IHNpemU7CiAJCQlmb3IgKGogPSAwOyBqIDwgYmxrX2NudDsgaisrKSB7CiAJCQkJaW50IGsgPSAwOwotCQkJCW1hY19jb250cm9sLT5yaW5nc1tpXS5iYVtqXSA9Ci0JCQkJCWttYWxsb2MoKHNpemVvZihzdHJ1Y3QgYnVmZkFkZCkgKgotCQkJCQkJKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhW2pdKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQltZW1fYWxsb2NhdGVkICs9IChzaXplb2Yoc3RydWN0IGJ1ZmZBZGQpICogIFwKLQkJCQkJKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpKTsKLQkJCQl3aGlsZSAoayAhPSByeGRfY291bnRbbmljLT5yeGRfbW9kZV0pIHsKLQkJCQkJYmEgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhW2pdW2tdOwogCi0JCQkJCWJhLT5iYV8wX29yZyA9ICh2b2lkICopIGttYWxsb2MKLQkJCQkJICAgIChCVUYwX0xFTiArIEFMSUdOX1NJWkUsIEdGUF9LRVJORUwpOworCQkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGJ1ZmZBZGQpICoKKwkJCQkJKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpOworCQkJCXJpbmctPmJhW2pdID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJCQlpZiAoIXJpbmctPmJhW2pdKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQltZW1fYWxsb2NhdGVkICs9IHNpemU7CisJCQkJd2hpbGUgKGsgIT0gcnhkX2NvdW50W25pYy0+cnhkX21vZGVdKSB7CisJCQkJCWJhID0gJnJpbmctPmJhW2pdW2tdOworCQkJCQlzaXplID0gQlVGMF9MRU4gKyBBTElHTl9TSVpFOworCQkJCQliYS0+YmFfMF9vcmcgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCQkJCQlpZiAoIWJhLT5iYV8wX29yZykKIAkJCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCQltZW1fYWxsb2NhdGVkICs9Ci0JCQkJCQkoQlVGMF9MRU4gKyBBTElHTl9TSVpFKTsKKwkJCQkJbWVtX2FsbG9jYXRlZCArPSBzaXplOwogCQkJCQl0bXAgPSAodW5zaWduZWQgbG9uZyliYS0+YmFfMF9vcmc7CiAJCQkJCXRtcCArPSBBTElHTl9TSVpFOwotCQkJCQl0bXAgJj0gfigodW5zaWduZWQgbG9uZykgQUxJR05fU0laRSk7Ci0JCQkJCWJhLT5iYV8wID0gKHZvaWQgKikgdG1wOworCQkJCQl0bXAgJj0gfigodW5zaWduZWQgbG9uZylBTElHTl9TSVpFKTsKKwkJCQkJYmEtPmJhXzAgPSAodm9pZCAqKXRtcDsKIAotCQkJCQliYS0+YmFfMV9vcmcgPSAodm9pZCAqKSBrbWFsbG9jCi0JCQkJCSAgICAoQlVGMV9MRU4gKyBBTElHTl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJCQkJc2l6ZSA9IEJVRjFfTEVOICsgQUxJR05fU0laRTsKKwkJCQkJYmEtPmJhXzFfb3JnID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAkJCQkJaWYgKCFiYS0+YmFfMV9vcmcpCiAJCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQkJbWVtX2FsbG9jYXRlZAotCQkJCQkJKz0gKEJVRjFfTEVOICsgQUxJR05fU0laRSk7Ci0JCQkJCXRtcCA9ICh1bnNpZ25lZCBsb25nKSBiYS0+YmFfMV9vcmc7CisJCQkJCW1lbV9hbGxvY2F0ZWQgKz0gc2l6ZTsKKwkJCQkJdG1wID0gKHVuc2lnbmVkIGxvbmcpYmEtPmJhXzFfb3JnOwogCQkJCQl0bXAgKz0gQUxJR05fU0laRTsKLQkJCQkJdG1wICY9IH4oKHVuc2lnbmVkIGxvbmcpIEFMSUdOX1NJWkUpOwotCQkJCQliYS0+YmFfMSA9ICh2b2lkICopIHRtcDsKKwkJCQkJdG1wICY9IH4oKHVuc2lnbmVkIGxvbmcpQUxJR05fU0laRSk7CisJCQkJCWJhLT5iYV8xID0gKHZvaWQgKil0bXA7CiAJCQkJCWsrKzsKIAkJCQl9CiAJCQl9CkBAIC04OTksOCArOTA1LDkgQEAKIAogCS8qIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIFN0YXRpc3RpY3MgYmxvY2sgKi8KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBzdGF0X2Jsb2NrKTsKLQltYWNfY29udHJvbC0+c3RhdHNfbWVtID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQKLQkgICAgKG5pYy0+cGRldiwgc2l6ZSwgJm1hY19jb250cm9sLT5zdGF0c19tZW1fcGh5KTsKKwltYWNfY29udHJvbC0+c3RhdHNfbWVtID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQobmljLT5wZGV2LCBzaXplLAorCQkJCSAgICAgJm1hY19jb250cm9sLT5zdGF0c19tZW1fcGh5KTsKIAogCWlmICghbWFjX2NvbnRyb2wtPnN0YXRzX21lbSkgewogCQkvKgpAQCAtOTE0LDEwICs5MjEsMTAgQEAKIAltYWNfY29udHJvbC0+c3RhdHNfbWVtX3N6ID0gc2l6ZTsKIAogCXRtcF92X2FkZHIgPSBtYWNfY29udHJvbC0+c3RhdHNfbWVtOwotCW1hY19jb250cm9sLT5zdGF0c19pbmZvID0gKHN0cnVjdCBzdGF0X2Jsb2NrICopIHRtcF92X2FkZHI7CisJbWFjX2NvbnRyb2wtPnN0YXRzX2luZm8gPSAoc3RydWN0IHN0YXRfYmxvY2sgKil0bXBfdl9hZGRyOwogCW1lbXNldCh0bXBfdl9hZGRyLCAwLCBzaXplKTsKLQlEQkdfUFJJTlQoSU5JVF9EQkcsICIlczpSaW5nIE1lbSBQSFk6IDB4JWxseFxuIiwgZGV2LT5uYW1lLAotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRtcF9wX2FkZHIpOworCURCR19QUklOVChJTklUX0RCRywgIiVzOiBSaW5nIE1lbSBQSFk6IDB4JWxseFxuIiwgZGV2LT5uYW1lLAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpdG1wX3BfYWRkcik7CiAJbWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZCArPSBtZW1fYWxsb2NhdGVkOwogCXJldHVybiBTVUNDRVNTOwogfQpAQCAtOTM0LDQyICs5NDEsNDYgQEAKIAlpbnQgaSwgaiwgYmxrX2NudCwgc2l6ZTsKIAl2b2lkICp0bXBfdl9hZGRyOwogCWRtYV9hZGRyX3QgdG1wX3BfYWRkcjsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwotCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKIAlpbnQgbHN0X3NpemUsIGxzdF9wZXJfcGFnZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBwYWdlX251bSA9IDA7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7CisJc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRzOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHM7CiAKIAlpZiAoIW5pYykKIAkJcmV0dXJuOwogCiAJZGV2ID0gbmljLT5kZXY7CiAKLQltYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCWNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwltYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOworCXN0YXRzID0gbWFjX2NvbnRyb2wtPnN0YXRzX2luZm87CisJc3dzdGF0cyA9ICZzdGF0cy0+c3dfc3RhdDsKIAotCWxzdF9zaXplID0gKHNpemVvZihzdHJ1Y3QgVHhEKSAqIGNvbmZpZy0+bWF4X3R4ZHMpOworCWxzdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBUeEQpICogY29uZmlnLT5tYXhfdHhkczsKIAlsc3RfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBsc3Rfc2l6ZTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKLQkJcGFnZV9udW0gPSBUWERfTUVNX1BBR0VfQ05UKGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuLAotCQkJCQkJCWxzdF9wZXJfcGFnZSk7CisJCXN0cnVjdCBmaWZvX2luZm8gKmZpZm8gPSAmbWFjX2NvbnRyb2wtPmZpZm9zW2ldOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKworCQlwYWdlX251bSA9IFRYRF9NRU1fUEFHRV9DTlQodHhfY2ZnLT5maWZvX2xlbiwgbHN0X3Blcl9wYWdlKTsKIAkJZm9yIChqID0gMDsgaiA8IHBhZ2VfbnVtOyBqKyspIHsKIAkJCWludCBtZW1fYmxrcyA9IChqICogbHN0X3Blcl9wYWdlKTsKLQkJCWlmICghbWFjX2NvbnRyb2wtPmZpZm9zW2ldLmxpc3RfaW5mbykKKwkJCXN0cnVjdCBsaXN0X2luZm9faG9sZCAqZmxpOworCisJCQlpZiAoIWZpZm8tPmxpc3RfaW5mbykKIAkJCQlyZXR1cm47Ci0JCQlpZiAoIW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm9bbWVtX2Jsa3NdLgotCQkJCSBsaXN0X3ZpcnRfYWRkcikKKworCQkJZmxpID0gJmZpZm8tPmxpc3RfaW5mb1ttZW1fYmxrc107CisJCQlpZiAoIWZsaS0+bGlzdF92aXJ0X2FkZHIpCiAJCQkJYnJlYWs7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5pYy0+cGRldiwgUEFHRV9TSVpFLAotCQkJCQkgICAgbWFjX2NvbnRyb2wtPmZpZm9zW2ldLgotCQkJCQkgICAgbGlzdF9pbmZvW21lbV9ibGtzXS4KLQkJCQkJICAgIGxpc3RfdmlydF9hZGRyLAotCQkJCQkgICAgbWFjX2NvbnRyb2wtPmZpZm9zW2ldLgotCQkJCQkgICAgbGlzdF9pbmZvW21lbV9ibGtzXS4KLQkJCQkJICAgIGxpc3RfcGh5X2FkZHIpOwotCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJCQkJKz0gUEFHRV9TSVpFOworCQkJCQkgICAgZmxpLT5saXN0X3ZpcnRfYWRkciwKKwkJCQkJICAgIGZsaS0+bGlzdF9waHlfYWRkcik7CisJCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gUEFHRV9TSVpFOwogCQl9CiAJCS8qIElmIHdlIGdvdCBhIHplcm8gRE1BIGFkZHJlc3MgZHVyaW5nIGFsbG9jYXRpb24sCiAJCSAqIGZyZWUgdGhlIHBhZ2Ugbm93CkBAIC05NzksNzkgKzk5MCw4MCBAQAogCQkJCQkgICAgbWFjX2NvbnRyb2wtPnplcm9kbWFfdmlydF9hZGRyLAogCQkJCQkgICAgKGRtYV9hZGRyX3QpMCk7CiAJCQlEQkdfUFJJTlQoSU5JVF9EQkcsCi0JCQkgIAkiJXM6IEZyZWVpbmcgVHhETCB3aXRoIHplcm8gRE1BIGFkZHIuICIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChJTklUX0RCRywgIlZpcnR1YWwgYWRkcmVzcyAlcFxuIiwKLQkJCQltYWNfY29udHJvbC0+emVyb2RtYV92aXJ0X2FkZHIpOwotCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJCQkJKz0gUEFHRV9TSVpFOworCQkJCSAgIiVzOiBGcmVlaW5nIFR4REwgd2l0aCB6ZXJvIERNQSBhZGRyZXNzLiAiCisJCQkJICAiVmlydHVhbCBhZGRyZXNzICVwXG4iLAorCQkJCSAgZGV2LT5uYW1lLCBtYWNfY29udHJvbC0+emVyb2RtYV92aXJ0X2FkZHIpOworCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IFBBR0VfU0laRTsKIAkJfQotCQlrZnJlZShtYWNfY29udHJvbC0+Zmlmb3NbaV0ubGlzdF9pbmZvKTsKLQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPQotCQkobmljLT5jb25maWcudHhfY2ZnW2ldLmZpZm9fbGVuICpzaXplb2Yoc3RydWN0IGxpc3RfaW5mb19ob2xkKSk7CisJCWtmcmVlKGZpZm8tPmxpc3RfaW5mbyk7CisJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSB0eF9jZmctPmZpZm9fbGVuICoKKwkJCXNpemVvZihzdHJ1Y3QgbGlzdF9pbmZvX2hvbGQpOwogCX0KIAogCXNpemUgPSBTSVpFX09GX0JMT0NLOwogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJYmxrX2NudCA9IG1hY19jb250cm9sLT5yaW5nc1tpXS5ibG9ja19jb3VudDsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJYmxrX2NudCA9IHJpbmctPmJsb2NrX2NvdW50OwogCQlmb3IgKGogPSAwOyBqIDwgYmxrX2NudDsgaisrKSB7Ci0JCQl0bXBfdl9hZGRyID0gbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1tqXS4KLQkJCQlibG9ja192aXJ0X2FkZHI7Ci0JCQl0bXBfcF9hZGRyID0gbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1tqXS4KLQkJCQlibG9ja19kbWFfYWRkcjsKKwkJCXRtcF92X2FkZHIgPSByaW5nLT5yeF9ibG9ja3Nbal0uYmxvY2tfdmlydF9hZGRyOworCQkJdG1wX3BfYWRkciA9IHJpbmctPnJ4X2Jsb2Nrc1tqXS5ibG9ja19kbWFfYWRkcjsKIAkJCWlmICh0bXBfdl9hZGRyID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5pYy0+cGRldiwgc2l6ZSwKIAkJCQkJICAgIHRtcF92X2FkZHIsIHRtcF9wX2FkZHIpOwotCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPSBzaXplOwotCQkJa2ZyZWUobWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1tqXS5yeGRzKTsKLQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0KLQkJCSggc2l6ZW9mKHN0cnVjdCByeGRfaW5mbykqIHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSk7CisJCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gc2l6ZTsKKwkJCWtmcmVlKHJpbmctPnJ4X2Jsb2Nrc1tqXS5yeGRzKTsKKwkJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBzaXplb2Yoc3RydWN0IHJ4ZF9pbmZvKSAqCisJCQkJcnhkX2NvdW50W25pYy0+cnhkX21vZGVdOwogCQl9CiAJfQogCiAJaWYgKG5pYy0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKIAkJLyogRnJlZWluZyBidWZmZXIgc3RvcmFnZSBhZGRyZXNzZXMgaW4gMkJVRkYgbW9kZS4gKi8KIAkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQkJYmxrX2NudCA9IGNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgLwotCQkJICAgIChyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKTsKKwkJCXN0cnVjdCByeF9yaW5nX2NvbmZpZyAqcnhfY2ZnID0gJmNvbmZpZy0+cnhfY2ZnW2ldOworCQkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJCWJsa19jbnQgPSByeF9jZmctPm51bV9yeGQgLworCQkJCShyeGRfY291bnRbbmljLT5yeGRfbW9kZV0gKyAxKTsKIAkJCWZvciAoaiA9IDA7IGogPCBibGtfY250OyBqKyspIHsKIAkJCQlpbnQgayA9IDA7Ci0JCQkJaWYgKCFtYWNfY29udHJvbC0+cmluZ3NbaV0uYmFbal0pCisJCQkJaWYgKCFyaW5nLT5iYVtqXSkKIAkJCQkJY29udGludWU7CiAJCQkJd2hpbGUgKGsgIT0gcnhkX2NvdW50W25pYy0+cnhkX21vZGVdKSB7Ci0JCQkJCXN0cnVjdCBidWZmQWRkICpiYSA9Ci0JCQkJCQkmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhW2pdW2tdOworCQkJCQlzdHJ1Y3QgYnVmZkFkZCAqYmEgPSAmcmluZy0+YmFbal1ba107CiAJCQkJCWtmcmVlKGJhLT5iYV8wX29yZyk7Ci0JCQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5cCi0JCQkJCW1lbV9mcmVlZCArPSAoQlVGMF9MRU4gKyBBTElHTl9TSVpFKTsKKwkJCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9CisJCQkJCQlCVUYwX0xFTiArIEFMSUdOX1NJWkU7CiAJCQkJCWtmcmVlKGJhLT5iYV8xX29yZyk7Ci0JCQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5cCi0JCQkJCW1lbV9mcmVlZCArPSAoQlVGMV9MRU4gKyBBTElHTl9TSVpFKTsKKwkJCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9CisJCQkJCQlCVUYxX0xFTiArIEFMSUdOX1NJWkU7CiAJCQkJCWsrKzsKIAkJCQl9Ci0JCQkJa2ZyZWUobWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhW2pdKTsKLQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9Ci0JCQkJCShzaXplb2Yoc3RydWN0IGJ1ZmZBZGQpICoKLQkJCQkJKHJ4ZF9jb3VudFtuaWMtPnJ4ZF9tb2RlXSArIDEpKTsKKwkJCQlrZnJlZShyaW5nLT5iYVtqXSk7CisJCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNpemVvZihzdHJ1Y3QgYnVmZkFkZCkgKgorCQkJCQkocnhkX2NvdW50W25pYy0+cnhkX21vZGVdICsgMSk7CiAJCQl9Ci0JCQlrZnJlZShtYWNfY29udHJvbC0+cmluZ3NbaV0uYmEpOwotCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPQotCQkJKHNpemVvZihzdHJ1Y3QgYnVmZkFkZCAqKSAqIGJsa19jbnQpOworCQkJa2ZyZWUocmluZy0+YmEpOworCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNpemVvZihzdHJ1Y3QgYnVmZkFkZCAqKSAqCisJCQkJYmxrX2NudDsKIAkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBuaWMtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKSB7Ci0JCWlmIChtYWNfY29udHJvbC0+Zmlmb3NbaV0udWZvX2luX2JhbmRfdikgewotCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJCSs9IChjb25maWctPnR4X2NmZ1tpXS5maWZvX2xlbiAqIHNpemVvZih1NjQpKTsKLQkJCWtmcmVlKG1hY19jb250cm9sLT5maWZvc1tpXS51Zm9faW5fYmFuZF92KTsKKwkJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbaV07CisJCXN0cnVjdCB0eF9maWZvX2NvbmZpZyAqdHhfY2ZnID0gJmNvbmZpZy0+dHhfY2ZnW2ldOworCisJCWlmIChmaWZvLT51Zm9faW5fYmFuZF92KSB7CisJCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gdHhfY2ZnLT5maWZvX2xlbiAqCisJCQkJc2l6ZW9mKHU2NCk7CisJCQlrZnJlZShmaWZvLT51Zm9faW5fYmFuZF92KTsKIAkJfQogCX0KIAogCWlmIChtYWNfY29udHJvbC0+c3RhdHNfbWVtKSB7Ci0JCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0KLQkJCW1hY19jb250cm9sLT5zdGF0c19tZW1fc3o7CisJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBtYWNfY29udHJvbC0+c3RhdHNfbWVtX3N6OwogCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5pYy0+cGRldiwKIAkJCQkgICAgbWFjX2NvbnRyb2wtPnN0YXRzX21lbV9zeiwKIAkJCQkgICAgbWFjX2NvbnRyb2wtPnN0YXRzX21lbSwKQEAgLTEwNzIsNyArMTA4NCw3IEBACiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+cGNpX21vZGUpOwogCW1vZGUgPSAodTgpR0VUX1BDSV9NT0RFKHZhbDY0KTsKIAotCWlmICggdmFsNjQgJiBQQ0lfTU9ERV9VTktOT1dOX01PREUpCisJaWYgKHZhbDY0ICYgUENJX01PREVfVU5LTk9XTl9NT0RFKQogCQlyZXR1cm4gLTE7ICAgICAgLyogVW5rbm93biBQQ0kgbW9kZSAqLwogCXJldHVybiBtb2RlOwogfQpAQCAtMTEwMyw1NSArMTExNSw1NCBAQAogCXJlZ2lzdGVyIHU2NCB2YWw2NCA9IDA7CiAJaW50CW1vZGU7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJm5pYy0+Y29uZmlnOworCWNvbnN0IGNoYXIgKnBjaW1vZGU7CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5wY2lfbW9kZSk7CiAJbW9kZSA9ICh1OClHRVRfUENJX01PREUodmFsNjQpOwogCi0JaWYgKCB2YWw2NCAmIFBDSV9NT0RFX1VOS05PV05fTU9ERSkKKwlpZiAodmFsNjQgJiBQQ0lfTU9ERV9VTktOT1dOX01PREUpCiAJCXJldHVybiAtMTsJLyogVW5rbm93biBQQ0kgbW9kZSAqLwogCiAJY29uZmlnLT5idXNfc3BlZWQgPSBidXNfc3BlZWRbbW9kZV07CiAKIAlpZiAoczJpb19vbl9uZWNfYnJpZGdlKG5pYy0+cGRldikpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGV2aWNlIGlzIG9uIFBDSS1FIGJ1c1xuIiwKLQkJCQkJCQluaWMtPmRldi0+bmFtZSk7CisJCQkgIG5pYy0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIG1vZGU7CiAJfQogCi0JaWYgKHZhbDY0ICYgUENJX01PREVfMzJfQklUUykgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgaXMgb24gMzIgYml0ICIsIG5pYy0+ZGV2LT5uYW1lKTsKLQl9IGVsc2UgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgaXMgb24gNjQgYml0ICIsIG5pYy0+ZGV2LT5uYW1lKTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFBDSV9NT0RFX1BDSV8zMzoKKwkJcGNpbW9kZSA9ICIzM01IeiBQQ0kgYnVzIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfTU9ERV9QQ0lfNjY6CisJCXBjaW1vZGUgPSAiNjZNSHogUENJIGJ1cyI7CisJCWJyZWFrOworCWNhc2UgUENJX01PREVfUENJWF9NMV82NjoKKwkJcGNpbW9kZSA9ICI2Nk1IeiBQQ0lYKE0xKSBidXMiOworCQlicmVhazsKKwljYXNlIFBDSV9NT0RFX1BDSVhfTTFfMTAwOgorCQlwY2ltb2RlID0gIjEwME1IeiBQQ0lYKE0xKSBidXMiOworCQlicmVhazsKKwljYXNlIFBDSV9NT0RFX1BDSVhfTTFfMTMzOgorCQlwY2ltb2RlID0gIjEzM01IeiBQQ0lYKE0xKSBidXMiOworCQlicmVhazsKKwljYXNlIFBDSV9NT0RFX1BDSVhfTTJfNjY6CisJCXBjaW1vZGUgPSAiMTMzTUh6IFBDSVgoTTIpIGJ1cyI7CisJCWJyZWFrOworCWNhc2UgUENJX01PREVfUENJWF9NMl8xMDA6CisJCXBjaW1vZGUgPSAiMjAwTUh6IFBDSVgoTTIpIGJ1cyI7CisJCWJyZWFrOworCWNhc2UgUENJX01PREVfUENJWF9NMl8xMzM6CisJCXBjaW1vZGUgPSAiMjY2TUh6IFBDSVgoTTIpIGJ1cyI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBjaW1vZGUgPSAidW5zdXBwb3J0ZWQgYnVzISI7CisJCW1vZGUgPSAtMTsKIAl9CiAKLQlzd2l0Y2gobW9kZSkgewotCQljYXNlIFBDSV9NT0RFX1BDSV8zMzoKLQkJCURCR19QUklOVChFUlJfREJHLCAiMzNNSHogUENJIGJ1c1xuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBQQ0lfTU9ERV9QQ0lfNjY6Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIjY2TUh6IFBDSSBidXNcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX01PREVfUENJWF9NMV82NjoKLQkJCURCR19QUklOVChFUlJfREJHLCAiNjZNSHogUENJWChNMSkgYnVzXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9NT0RFX1BDSVhfTTFfMTAwOgotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIxMDBNSHogUENJWChNMSkgYnVzXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9NT0RFX1BDSVhfTTFfMTMzOgotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIxMzNNSHogUENJWChNMSkgYnVzXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9NT0RFX1BDSVhfTTJfNjY6Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIjEzM01IeiBQQ0lYKE0yKSBidXNcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX01PREVfUENJWF9NMl8xMDA6Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIjIwME1IeiBQQ0lYKE0yKSBidXNcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX01PREVfUENJWF9NMl8xMzM6Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIjI2Nk1IeiBQQ0lYKE0yKSBidXNcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLTE7CS8qIFVuc3VwcG9ydGVkIGJ1cyBzcGVlZCAqLwotCX0KKwlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgaXMgb24gJWQgYml0ICVzXG4iLAorCQkgIG5pYy0+ZGV2LT5uYW1lLCB2YWw2NCAmIFBDSV9NT0RFXzMyX0JJVFMgPyAzMiA6IDY0LCBwY2ltb2RlKTsKIAogCXJldHVybiBtb2RlOwogfQpAQCAtMTE3MSw5ICsxMTgyLDcgQEAKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBuaWMtPmJhcjA7CiAJcmVnaXN0ZXIgdTY0IHZhbDY0ID0gMDsKIAlpbnQgaTsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0KLQljb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJm5pYy0+Y29uZmlnOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewogCQkvKgpAQCAtMTE4OCw5ICsxMTk3LDkgQEAKIAkJCXZhbDY0ID0gVFRJX0RBVEExX01FTV9UWF9USU1FUl9WQUwoMHgyMDc4KTsKIAogCQl2YWw2NCB8PSBUVElfREFUQTFfTUVNX1RYX1VSTkdfQSgweEEpIHwKLQkJCQlUVElfREFUQTFfTUVNX1RYX1VSTkdfQigweDEwKSB8Ci0JCQkJVFRJX0RBVEExX01FTV9UWF9VUk5HX0MoMHgzMCkgfAotCQkJCVRUSV9EQVRBMV9NRU1fVFhfVElNRVJfQUNfRU47CisJCQlUVElfREFUQTFfTUVNX1RYX1VSTkdfQigweDEwKSB8CisJCQlUVElfREFUQTFfTUVNX1RYX1VSTkdfQygweDMwKSB8CisJCQlUVElfREFUQTFfTUVNX1RYX1RJTUVSX0FDX0VOOwogCQlpZiAoaSA9PSAwKQogCQkJaWYgKHVzZV9jb250aW51b3VzX3R4X2ludHJzICYmIChsaW5rID09IExJTktfVVApKQogCQkJCXZhbDY0IHw9IFRUSV9EQVRBMV9NRU1fVFhfVElNRVJfQ0lfRU47CkBAIC0xMjAzLDExICsxMjEyLDExIEBACiAJCQkJVFRJX0RBVEEyX01FTV9UWF9VRkNfRCgweDMwMCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoKG5pYy0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0KLQkJCQlUWF9ERUZBVUxUX1NURUVSSU5HKSAmJgotCQkJCShjb25maWctPnR4X2ZpZm9fbnVtID4gMSkgJiYKLQkJCQkoaSA+PSBuaWMtPnVkcF9maWZvX2lkeCkgJiYKLQkJCQkoaSA8IChuaWMtPnVkcF9maWZvX2lkeCArCi0JCQkJbmljLT50b3RhbF91ZHBfZmlmb3MpKSkKKwkJCSAgICAgVFhfREVGQVVMVF9TVEVFUklORykgJiYKKwkJCSAgICAoY29uZmlnLT50eF9maWZvX251bSA+IDEpICYmCisJCQkgICAgKGkgPj0gbmljLT51ZHBfZmlmb19pZHgpICYmCisJCQkgICAgKGkgPCAobmljLT51ZHBfZmlmb19pZHggKworCQkJCSAgbmljLT50b3RhbF91ZHBfZmlmb3MpKSkKIAkJCQl2YWw2NCA9IFRUSV9EQVRBMl9NRU1fVFhfVUZDX0EoMHg1MCkgfAogCQkJCQlUVElfREFUQTJfTUVNX1RYX1VGQ19CKDB4ODApIHwKIAkJCQkJVFRJX0RBVEEyX01FTV9UWF9VRkNfQygweDEwMCkgfApAQCAtMTIyMSwxMiArMTIzMCwxNCBAQAogCiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR0aV9kYXRhMl9tZW0pOwogCi0JCXZhbDY0ID0gVFRJX0NNRF9NRU1fV0UgfCBUVElfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8Ci0JCQkJVFRJX0NNRF9NRU1fT0ZGU0VUKGkpOworCQl2YWw2NCA9IFRUSV9DTURfTUVNX1dFIHwKKwkJCVRUSV9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKKwkJCVRUSV9DTURfTUVNX09GRlNFVChpKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHRpX2NvbW1hbmRfbWVtKTsKIAogCQlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT50dGlfY29tbWFuZF9tZW0sCi0JCQlUVElfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCwgUzJJT19CSVRfUkVTRVQpICE9IFNVQ0NFU1MpCisJCQkJCSAgVFRJX0NNRF9NRU1fU1RST0JFX05FV19DTUQsCisJCQkJCSAgUzJJT19CSVRfUkVTRVQpICE9IFNVQ0NFU1MpCiAJCQlyZXR1cm4gRkFJTFVSRTsKIAl9CiAKQEAgLTEyNTAsMTggKzEyNjEsMTUgQEAKIAl2b2lkIF9faW9tZW0gKmFkZDsKIAl1MzIgdGltZTsKIAlpbnQgaSwgajsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwotCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKIAlpbnQgZHR4X2NudCA9IDA7CiAJdW5zaWduZWQgbG9uZyBsb25nIG1lbV9zaGFyZTsKIAlpbnQgbWVtX3NpemU7Ci0KLQltYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwotCWNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCiAJLyogdG8gc2V0IHRoZSBzd2FwcGVyIGNvbnRyb2xlIG9uIHRoZSBjYXJkICovCi0JaWYoczJpb19zZXRfc3dhcHBlcihuaWMpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCJFUlJPUjogU2V0dGluZyBTd2FwcGVyIGZhaWxlZFxuIik7CisJaWYgKHMyaW9fc2V0X3N3YXBwZXIobmljKSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgIkVSUk9SOiBTZXR0aW5nIFN3YXBwZXIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMzAwLDcgKzEzMDgsNyBAQAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPm1hY19jZmcpOwogCXZhbDY0IHw9IE1BQ19STUFDX0JDQVNUX0VOQUJMRTsKIAl3cml0ZXEoUk1BQ19DRkdfS0VZKDB4NEMwRCksICZiYXIwLT5ybWFjX2NmZ19rZXkpOwotCXdyaXRlbCgodTMyKSB2YWw2NCwgYWRkKTsKKwl3cml0ZWwoKHUzMil2YWw2NCwgYWRkKTsKIAl3cml0ZXEoUk1BQ19DRkdfS0VZKDB4NEMwRCksICZiYXIwLT5ybWFjX2NmZ19rZXkpOwogCXdyaXRlbCgodTMyKSAodmFsNjQgPj4gMzIpLCAoYWRkICsgNCkpOwogCkBAIC0xMzM3LDEyICsxMzQ1LDExIEBACiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMik7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMyk7CiAKLQogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgY29uZmlnLT50eF9maWZvX251bTsgaSsrKSB7Ci0JCXZhbDY0IHw9Ci0JCSAgICB2QklUKGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuIC0gMSwgKChqICogMzIpICsgMTkpLAotCQkJIDEzKSB8IHZCSVQoY29uZmlnLT50eF9jZmdbaV0uZmlmb19wcmlvcml0eSwKLQkJCQkgICAgKChqICogMzIpICsgNSksIDMpOworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKworCQl2YWw2NCB8PSB2QklUKHR4X2NmZy0+Zmlmb19sZW4gLSAxLCAoKGogKiAzMikgKyAxOSksIDEzKSB8CisJCQl2QklUKHR4X2NmZy0+Zmlmb19wcmlvcml0eSwgKChqICogMzIpICsgNSksIDMpOwogCiAJCWlmIChpID09IChjb25maWctPnR4X2ZpZm9fbnVtIC0gMSkpIHsKIAkJCWlmIChpICUgMiA9PSAwKQpAQCAtMTM4MCwyOSArMTM4NywzMCBAQAogCSAqIERpc2FibGUgNCBQQ0NzIGZvciBYZW5hMSwgMiBhbmQgMyBhcyBwZXIgSC9XIGJ1ZwogCSAqIFNYRS0wMDggVFJBTlNNSVQgRE1BIEFSQklUUkFUSU9OIElTU1VFLgogCSAqLwotCWlmICgobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSV9ERVZJQ0UpICYmCi0JCShuaWMtPnBkZXYtPnJldmlzaW9uIDwgNCkpCisJaWYgKChuaWMtPmRldmljZV90eXBlID09IFhGUkFNRV9JX0RFVklDRSkgJiYgKG5pYy0+cGRldi0+cmV2aXNpb24gPCA0KSkKIAkJd3JpdGVxKFBDQ19FTkFCTEVfRk9VUiwgJmJhcjAtPnBjY19lbmFibGUpOwogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMCk7CiAJREJHX1BSSU5UKElOSVRfREJHLCAiRmlmbyBwYXJ0aXRpb24gYXQ6IDB4JXAgaXM6IDB4JWxseFxuIiwKLQkJICAmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsNjQpOworCQkgICZiYXIwLT50eF9maWZvX3BhcnRpdGlvbl8wLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKIAogCS8qCiAJICogSW5pdGlhbGl6YXRpb24gb2YgVHhfUEFfQ09ORklHIHJlZ2lzdGVyIHRvIGlnbm9yZSBwYWNrZXQKIAkgKiBpbnRlZ3JpdHkgY2hlY2tpbmcuCiAJICovCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+dHhfcGFfY2ZnKTsKLQl2YWw2NCB8PSBUWF9QQV9DRkdfSUdOT1JFX0ZSTV9FUlIgfCBUWF9QQV9DRkdfSUdOT1JFX1NOQVBfT1VJIHwKLQkgICAgVFhfUEFfQ0ZHX0lHTk9SRV9MTENfQ1RSTCB8IFRYX1BBX0NGR19JR05PUkVfTDJfRVJSOworCXZhbDY0IHw9IFRYX1BBX0NGR19JR05PUkVfRlJNX0VSUiB8CisJCVRYX1BBX0NGR19JR05PUkVfU05BUF9PVUkgfAorCQlUWF9QQV9DRkdfSUdOT1JFX0xMQ19DVFJMIHwKKwkJVFhfUEFfQ0ZHX0lHTk9SRV9MMl9FUlI7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHhfcGFfY2ZnKTsKIAogCS8qIFJ4IERNQSBpbnRpYWxpemF0aW9uLiAqLwogCXZhbDY0ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCXZhbDY0IHw9Ci0JCSAgICB2QklUKGNvbmZpZy0+cnhfY2ZnW2ldLnJpbmdfcHJpb3JpdHksICg1ICsgKGkgKiA4KSksCi0JCQkgMyk7CisJCXN0cnVjdCByeF9yaW5nX2NvbmZpZyAqcnhfY2ZnID0gJmNvbmZpZy0+cnhfY2ZnW2ldOworCisJCXZhbDY0IHw9IHZCSVQocnhfY2ZnLT5yaW5nX3ByaW9yaXR5LCAoNSArIChpICogOCkpLCAzKTsKIAl9CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfcXVldWVfcHJpb3JpdHkpOwogCkBAIC0xNjg2LDE2ICsxNjk0LDE2IEBACiAJCSAqLwogCQlpZiAocnRzX2ZybV9sZW5baV0gIT0gMCkgewogCQkJd3JpdGVxKE1BQ19SVFNfRlJNX0xFTl9TRVQocnRzX2ZybV9sZW5baV0pLAotCQkJCSZiYXIwLT5ydHNfZnJtX2xlbl9uW2ldKTsKKwkJCSAgICAgICAmYmFyMC0+cnRzX2ZybV9sZW5fbltpXSk7CiAJCX0KIAl9CiAKIAkvKiBEaXNhYmxlIGRpZmZlcmVudGlhdGVkIHNlcnZpY2VzIHN0ZWVyaW5nIGxvZ2ljICovCiAJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKIAkJaWYgKHJ0c19kc19zdGVlcihuaWMsIGksIDApID09IEZBSUxVUkUpIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGZhaWxlZCBydHMgZHMgc3RlZXJpbmciLAotCQkJCWRldi0+bmFtZSk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgInNldCBvbiBjb2RlcG9pbnQgJWRcbiIsIGkpOworCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJICAiJXM6IHJ0c19kc19zdGVlciBmYWlsZWQgb24gY29kZXBvaW50ICVkXG4iLAorCQkJCSAgZGV2LT5uYW1lLCBpKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtMTcxMyw3ICsxNzIxLDcgQEAKIAkgKiBiYW5kd2lkdGggdXRpbGl6YXRpb24uCiAJICovCiAJdmFsNjQgPSBNQUNfVFhfTElOS19VVElMX1ZBTCh0bWFjX3V0aWxfcGVyaW9kKSB8Ci0JICAgIE1BQ19SWF9MSU5LX1VUSUxfVkFMKHJtYWNfdXRpbF9wZXJpb2QpOworCQlNQUNfUlhfTElOS19VVElMX1ZBTChybWFjX3V0aWxfcGVyaW9kKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tYWNfbGlua191dGlsKTsKIAogCS8qCkBAIC0xNzM2LDI0ICsxNzQ0LDI2IEBACiAJfSBlbHNlCiAJCXZhbDY0ID0gUlRJX0RBVEExX01FTV9SWF9USU1FUl9WQUwoMHhGRkYpOwogCXZhbDY0IHw9IFJUSV9EQVRBMV9NRU1fUlhfVVJOR19BKDB4QSkgfAotCQkgUlRJX0RBVEExX01FTV9SWF9VUk5HX0IoMHgxMCkgfAotCQkgUlRJX0RBVEExX01FTV9SWF9VUk5HX0MoMHgzMCkgfCBSVElfREFUQTFfTUVNX1JYX1RJTUVSX0FDX0VOOworCQlSVElfREFUQTFfTUVNX1JYX1VSTkdfQigweDEwKSB8CisJCVJUSV9EQVRBMV9NRU1fUlhfVVJOR19DKDB4MzApIHwKKwkJUlRJX0RBVEExX01FTV9SWF9USU1FUl9BQ19FTjsKIAogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ0aV9kYXRhMV9tZW0pOwogCiAJdmFsNjQgPSBSVElfREFUQTJfTUVNX1JYX1VGQ19BKDB4MSkgfAogCQlSVElfREFUQTJfTUVNX1JYX1VGQ19CKDB4MikgOwogCWlmIChuaWMtPmNvbmZpZy5pbnRyX3R5cGUgPT0gTVNJX1gpCi0JICAgIHZhbDY0IHw9IChSVElfREFUQTJfTUVNX1JYX1VGQ19DKDB4MjApIHwgXAotCQkJUlRJX0RBVEEyX01FTV9SWF9VRkNfRCgweDQwKSk7CisJCXZhbDY0IHw9IChSVElfREFUQTJfTUVNX1JYX1VGQ19DKDB4MjApIHwKKwkJCSAgUlRJX0RBVEEyX01FTV9SWF9VRkNfRCgweDQwKSk7CiAJZWxzZQotCSAgICB2YWw2NCB8PSAoUlRJX0RBVEEyX01FTV9SWF9VRkNfQygweDQwKSB8IFwKLQkJCVJUSV9EQVRBMl9NRU1fUlhfVUZDX0QoMHg4MCkpOworCQl2YWw2NCB8PSAoUlRJX0RBVEEyX01FTV9SWF9VRkNfQygweDQwKSB8CisJCQkgIFJUSV9EQVRBMl9NRU1fUlhfVUZDX0QoMHg4MCkpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ0aV9kYXRhMl9tZW0pOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQl2YWw2NCA9IFJUSV9DTURfTUVNX1dFIHwgUlRJX0NNRF9NRU1fU1RST0JFX05FV19DTUQKLQkJCQl8IFJUSV9DTURfTUVNX09GRlNFVChpKTsKKwkJdmFsNjQgPSBSVElfQ01EX01FTV9XRSB8CisJCQlSVElfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CisJCQlSVElfQ01EX01FTV9PRkZTRVQoaSk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ0aV9jb21tYW5kX21lbSk7CiAKIAkJLyoKQEAgLTE3NzAsNyArMTc4MCw3IEBACiAJCQkJYnJlYWs7CiAKIAkJCWlmICh0aW1lID4gMTApIHsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBSVEkgaW5pdCBGYWlsZWRcbiIsCisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUlRJIGluaXQgZmFpbGVkXG4iLAogCQkJCQkgIGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQl9CkBAIC0xODI2LDE5ICsxODM2LDE3IEBACiAJICovCiAJdmFsNjQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJdmFsNjQgfD0KLQkJICAgICgoKHU2NCkgMHhGRjAwIHwgbmljLT5tYWNfY29udHJvbC4KLQkJICAgICAgbWNfcGF1c2VfdGhyZXNob2xkX3EwcTMpCi0JCSAgICAgPDwgKGkgKiAyICogOCkpOworCQl2YWw2NCB8PSAoKCh1NjQpMHhGRjAwIHwKKwkJCSAgIG5pYy0+bWFjX2NvbnRyb2wubWNfcGF1c2VfdGhyZXNob2xkX3EwcTMpCisJCQkgIDw8IChpICogMiAqIDgpKTsKIAl9CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWNfcGF1c2VfdGhyZXNoX3EwcTMpOwogCiAJdmFsNjQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJdmFsNjQgfD0KLQkJICAgICgoKHU2NCkgMHhGRjAwIHwgbmljLT5tYWNfY29udHJvbC4KLQkJICAgICAgbWNfcGF1c2VfdGhyZXNob2xkX3E0cTcpCi0JCSAgICAgPDwgKGkgKiAyICogOCkpOworCQl2YWw2NCB8PSAoKCh1NjQpMHhGRjAwIHwKKwkJCSAgIG5pYy0+bWFjX2NvbnRyb2wubWNfcGF1c2VfdGhyZXNob2xkX3E0cTcpCisJCQkgIDw8IChpICogMiAqIDgpKTsKIAl9CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWNfcGF1c2VfdGhyZXNoX3E0cTcpOwogCkBAIC0xOTAxLDEwICsxOTA5LDEwIEBACiAKIAl0ZW1wNjQgPSByZWFkcShhZGRyKTsKIAotCWlmKGZsYWcgPT0gRU5BQkxFX0lOVFJTKQotCQl0ZW1wNjQgJj0gfigodTY0KSB2YWx1ZSk7CisJaWYgKGZsYWcgPT0gRU5BQkxFX0lOVFJTKQorCQl0ZW1wNjQgJj0gfigodTY0KXZhbHVlKTsKIAllbHNlCi0JCXRlbXA2NCB8PSAoKHU2NCkgdmFsdWUpOworCQl0ZW1wNjQgfD0gKCh1NjQpdmFsdWUpOwogCXdyaXRlcSh0ZW1wNjQsIGFkZHIpOwogfQogCkBAIC0xOTE2LDEyNCArMTkyNCwxMjUgQEAKIAogCXdyaXRlcShESVNBQkxFX0FMTF9JTlRSUywgJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOwogCWlmIChtYXNrICYgVFhfRE1BX0lOVFIpIHsKLQogCQlnZW5faW50X21hc2sgfD0gVFhETUFfSU5UX007CiAKIAkJZG9fczJpb193cml0ZV9iaXRzKFRYRE1BX1REQV9JTlQgfCBUWERNQV9QRkNfSU5UIHwKLQkJCQlUWERNQV9QQ0NfSU5UIHwgVFhETUFfVFRJX0lOVCB8Ci0JCQkJVFhETUFfTFNPX0lOVCB8IFRYRE1BX1RQQV9JTlQgfAotCQkJCVRYRE1BX1NNX0lOVCwgZmxhZywgJmJhcjAtPnR4ZG1hX2ludF9tYXNrKTsKKwkJCQkgICBUWERNQV9QQ0NfSU5UIHwgVFhETUFfVFRJX0lOVCB8CisJCQkJICAgVFhETUFfTFNPX0lOVCB8IFRYRE1BX1RQQV9JTlQgfAorCQkJCSAgIFRYRE1BX1NNX0lOVCwgZmxhZywgJmJhcjAtPnR4ZG1hX2ludF9tYXNrKTsKIAogCQlkb19zMmlvX3dyaXRlX2JpdHMoUEZDX0VDQ19EQl9FUlIgfCBQRkNfU01fRVJSX0FMQVJNIHwKLQkJCQlQRkNfTUlTQ18wX0VSUiB8IFBGQ19NSVNDXzFfRVJSIHwKLQkJCQlQRkNfUENJWF9FUlIgfCBQRkNfRUNDX1NHX0VSUiwgZmxhZywKLQkJCQkmYmFyMC0+cGZjX2Vycl9tYXNrKTsKKwkJCQkgICBQRkNfTUlTQ18wX0VSUiB8IFBGQ19NSVNDXzFfRVJSIHwKKwkJCQkgICBQRkNfUENJWF9FUlIgfCBQRkNfRUNDX1NHX0VSUiwgZmxhZywKKwkJCQkgICAmYmFyMC0+cGZjX2Vycl9tYXNrKTsKIAogCQlkb19zMmlvX3dyaXRlX2JpdHMoVERBX0ZuX0VDQ19EQl9FUlIgfCBUREFfU00wX0VSUl9BTEFSTSB8Ci0JCQkJVERBX1NNMV9FUlJfQUxBUk0gfCBUREFfRm5fRUNDX1NHX0VSUiB8Ci0JCQkJVERBX1BDSVhfRVJSLCBmbGFnLCAmYmFyMC0+dGRhX2Vycl9tYXNrKTsKKwkJCQkgICBUREFfU00xX0VSUl9BTEFSTSB8IFREQV9Gbl9FQ0NfU0dfRVJSIHwKKwkJCQkgICBUREFfUENJWF9FUlIsIGZsYWcsICZiYXIwLT50ZGFfZXJyX21hc2spOwogCiAJCWRvX3MyaW9fd3JpdGVfYml0cyhQQ0NfRkJfRUNDX0RCX0VSUiB8IFBDQ19UWEJfRUNDX0RCX0VSUiB8Ci0JCQkJUENDX1NNX0VSUl9BTEFSTSB8IFBDQ19XUl9FUlJfQUxBUk0gfAotCQkJCVBDQ19OX1NFUlIgfCBQQ0NfNl9DT0ZfT1ZfRVJSIHwKLQkJCQlQQ0NfN19DT0ZfT1ZfRVJSIHwgUENDXzZfTFNPX09WX0VSUiB8Ci0JCQkJUENDXzdfTFNPX09WX0VSUiB8IFBDQ19GQl9FQ0NfU0dfRVJSIHwKLQkJCQlQQ0NfVFhCX0VDQ19TR19FUlIsIGZsYWcsICZiYXIwLT5wY2NfZXJyX21hc2spOworCQkJCSAgIFBDQ19TTV9FUlJfQUxBUk0gfCBQQ0NfV1JfRVJSX0FMQVJNIHwKKwkJCQkgICBQQ0NfTl9TRVJSIHwgUENDXzZfQ09GX09WX0VSUiB8CisJCQkJICAgUENDXzdfQ09GX09WX0VSUiB8IFBDQ182X0xTT19PVl9FUlIgfAorCQkJCSAgIFBDQ183X0xTT19PVl9FUlIgfCBQQ0NfRkJfRUNDX1NHX0VSUiB8CisJCQkJICAgUENDX1RYQl9FQ0NfU0dfRVJSLAorCQkJCSAgIGZsYWcsICZiYXIwLT5wY2NfZXJyX21hc2spOwogCiAJCWRvX3MyaW9fd3JpdGVfYml0cyhUVElfU01fRVJSX0FMQVJNIHwgVFRJX0VDQ19TR19FUlIgfAotCQkJCVRUSV9FQ0NfREJfRVJSLCBmbGFnLCAmYmFyMC0+dHRpX2Vycl9tYXNrKTsKKwkJCQkgICBUVElfRUNDX0RCX0VSUiwgZmxhZywgJmJhcjAtPnR0aV9lcnJfbWFzayk7CiAKIAkJZG9fczJpb193cml0ZV9iaXRzKExTTzZfQUJPUlQgfCBMU083X0FCT1JUIHwKLQkJCQlMU082X1NNX0VSUl9BTEFSTSB8IExTTzdfU01fRVJSX0FMQVJNIHwKLQkJCQlMU082X1NFTkRfT0ZMT1cgfCBMU083X1NFTkRfT0ZMT1csCi0JCQkJZmxhZywgJmJhcjAtPmxzb19lcnJfbWFzayk7CisJCQkJICAgTFNPNl9TTV9FUlJfQUxBUk0gfCBMU083X1NNX0VSUl9BTEFSTSB8CisJCQkJICAgTFNPNl9TRU5EX09GTE9XIHwgTFNPN19TRU5EX09GTE9XLAorCQkJCSAgIGZsYWcsICZiYXIwLT5sc29fZXJyX21hc2spOwogCiAJCWRvX3MyaW9fd3JpdGVfYml0cyhUUEFfU01fRVJSX0FMQVJNIHwgVFBBX1RYX0ZSTV9EUk9QLAotCQkJCWZsYWcsICZiYXIwLT50cGFfZXJyX21hc2spOworCQkJCSAgIGZsYWcsICZiYXIwLT50cGFfZXJyX21hc2spOwogCiAJCWRvX3MyaW9fd3JpdGVfYml0cyhTTV9TTV9FUlJfQUxBUk0sIGZsYWcsICZiYXIwLT5zbV9lcnJfbWFzayk7Ci0KIAl9CiAKIAlpZiAobWFzayAmIFRYX01BQ19JTlRSKSB7CiAJCWdlbl9pbnRfbWFzayB8PSBUWE1BQ19JTlRfTTsKIAkJZG9fczJpb193cml0ZV9iaXRzKE1BQ19JTlRfU1RBVFVTX1RNQUNfSU5ULCBmbGFnLAotCQkJCSZiYXIwLT5tYWNfaW50X21hc2spOworCQkJCSAgICZiYXIwLT5tYWNfaW50X21hc2spOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoVE1BQ19UWF9CVUZfT1ZSTiB8IFRNQUNfVFhfU01fRVJSIHwKLQkJCQlUTUFDX0VDQ19TR19FUlIgfCBUTUFDX0VDQ19EQl9FUlIgfAotCQkJCVRNQUNfREVTQ19FQ0NfU0dfRVJSIHwgVE1BQ19ERVNDX0VDQ19EQl9FUlIsCi0JCQkJZmxhZywgJmJhcjAtPm1hY190bWFjX2Vycl9tYXNrKTsKKwkJCQkgICBUTUFDX0VDQ19TR19FUlIgfCBUTUFDX0VDQ19EQl9FUlIgfAorCQkJCSAgIFRNQUNfREVTQ19FQ0NfU0dfRVJSIHwgVE1BQ19ERVNDX0VDQ19EQl9FUlIsCisJCQkJICAgZmxhZywgJmJhcjAtPm1hY190bWFjX2Vycl9tYXNrKTsKIAl9CiAKIAlpZiAobWFzayAmIFRYX1hHWFNfSU5UUikgewogCQlnZW5faW50X21hc2sgfD0gVFhYR1hTX0lOVF9NOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoWEdYU19JTlRfU1RBVFVTX1RYR1hTLCBmbGFnLAotCQkJCSZiYXIwLT54Z3hzX2ludF9tYXNrKTsKKwkJCQkgICAmYmFyMC0+eGd4c19pbnRfbWFzayk7CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhUWEdYU19FU1RPUkVfVUZMT1cgfCBUWEdYU19UWF9TTV9FUlIgfAotCQkJCVRYR1hTX0VDQ19TR19FUlIgfCBUWEdYU19FQ0NfREJfRVJSLAotCQkJCWZsYWcsICZiYXIwLT54Z3hzX3R4Z3hzX2Vycl9tYXNrKTsKKwkJCQkgICBUWEdYU19FQ0NfU0dfRVJSIHwgVFhHWFNfRUNDX0RCX0VSUiwKKwkJCQkgICBmbGFnLCAmYmFyMC0+eGd4c190eGd4c19lcnJfbWFzayk7CiAJfQogCiAJaWYgKG1hc2sgJiBSWF9ETUFfSU5UUikgewogCQlnZW5faW50X21hc2sgfD0gUlhETUFfSU5UX007CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhSWERNQV9JTlRfUkNfSU5UX00gfCBSWERNQV9JTlRfUlBBX0lOVF9NIHwKLQkJCQlSWERNQV9JTlRfUkRBX0lOVF9NIHwgUlhETUFfSU5UX1JUSV9JTlRfTSwKLQkJCQlmbGFnLCAmYmFyMC0+cnhkbWFfaW50X21hc2spOworCQkJCSAgIFJYRE1BX0lOVF9SREFfSU5UX00gfCBSWERNQV9JTlRfUlRJX0lOVF9NLAorCQkJCSAgIGZsYWcsICZiYXIwLT5yeGRtYV9pbnRfbWFzayk7CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhSQ19QUkNuX0VDQ19EQl9FUlIgfCBSQ19GVENfRUNDX0RCX0VSUiB8Ci0JCQkJUkNfUFJDbl9TTV9FUlJfQUxBUk0gfCBSQ19GVENfU01fRVJSX0FMQVJNIHwKLQkJCQlSQ19QUkNuX0VDQ19TR19FUlIgfCBSQ19GVENfRUNDX1NHX0VSUiB8Ci0JCQkJUkNfUkRBX0ZBSUxfV1JfUm4sIGZsYWcsICZiYXIwLT5yY19lcnJfbWFzayk7CisJCQkJICAgUkNfUFJDbl9TTV9FUlJfQUxBUk0gfCBSQ19GVENfU01fRVJSX0FMQVJNIHwKKwkJCQkgICBSQ19QUkNuX0VDQ19TR19FUlIgfCBSQ19GVENfRUNDX1NHX0VSUiB8CisJCQkJICAgUkNfUkRBX0ZBSUxfV1JfUm4sIGZsYWcsICZiYXIwLT5yY19lcnJfbWFzayk7CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhQUkNfUENJX0FCX1JEX1JuIHwgUFJDX1BDSV9BQl9XUl9SbiB8Ci0JCQkJUFJDX1BDSV9BQl9GX1dSX1JuIHwgUFJDX1BDSV9EUF9SRF9SbiB8Ci0JCQkJUFJDX1BDSV9EUF9XUl9SbiB8IFBSQ19QQ0lfRFBfRl9XUl9SbiwgZmxhZywKLQkJCQkmYmFyMC0+cHJjX3BjaXhfZXJyX21hc2spOworCQkJCSAgIFBSQ19QQ0lfQUJfRl9XUl9SbiB8IFBSQ19QQ0lfRFBfUkRfUm4gfAorCQkJCSAgIFBSQ19QQ0lfRFBfV1JfUm4gfCBQUkNfUENJX0RQX0ZfV1JfUm4sIGZsYWcsCisJCQkJICAgJmJhcjAtPnByY19wY2l4X2Vycl9tYXNrKTsKIAkJZG9fczJpb193cml0ZV9iaXRzKFJQQV9TTV9FUlJfQUxBUk0gfCBSUEFfQ1JFRElUX0VSUiB8Ci0JCQkJUlBBX0VDQ19TR19FUlIgfCBSUEFfRUNDX0RCX0VSUiwgZmxhZywKLQkJCQkmYmFyMC0+cnBhX2Vycl9tYXNrKTsKKwkJCQkgICBSUEFfRUNDX1NHX0VSUiB8IFJQQV9FQ0NfREJfRVJSLCBmbGFnLAorCQkJCSAgICZiYXIwLT5ycGFfZXJyX21hc2spOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoUkRBX1JYRG5fRUNDX0RCX0VSUiB8IFJEQV9GUk1fRUNDX0RCX05fQUVSUiB8Ci0JCQkJUkRBX1NNMV9FUlJfQUxBUk0gfCBSREFfU00wX0VSUl9BTEFSTSB8Ci0JCQkJUkRBX1JYRF9FQ0NfREJfU0VSUiB8IFJEQV9SWERuX0VDQ19TR19FUlIgfAotCQkJCVJEQV9GUk1fRUNDX1NHX0VSUiB8IFJEQV9NSVNDX0VSUnxSREFfUENJWF9FUlIsCi0JCQkJZmxhZywgJmJhcjAtPnJkYV9lcnJfbWFzayk7CisJCQkJICAgUkRBX1NNMV9FUlJfQUxBUk0gfCBSREFfU00wX0VSUl9BTEFSTSB8CisJCQkJICAgUkRBX1JYRF9FQ0NfREJfU0VSUiB8IFJEQV9SWERuX0VDQ19TR19FUlIgfAorCQkJCSAgIFJEQV9GUk1fRUNDX1NHX0VSUiB8CisJCQkJICAgUkRBX01JU0NfRVJSfFJEQV9QQ0lYX0VSUiwKKwkJCQkgICBmbGFnLCAmYmFyMC0+cmRhX2Vycl9tYXNrKTsKIAkJZG9fczJpb193cml0ZV9iaXRzKFJUSV9TTV9FUlJfQUxBUk0gfAotCQkJCVJUSV9FQ0NfU0dfRVJSIHwgUlRJX0VDQ19EQl9FUlIsCi0JCQkJZmxhZywgJmJhcjAtPnJ0aV9lcnJfbWFzayk7CisJCQkJICAgUlRJX0VDQ19TR19FUlIgfCBSVElfRUNDX0RCX0VSUiwKKwkJCQkgICBmbGFnLCAmYmFyMC0+cnRpX2Vycl9tYXNrKTsKIAl9CiAKIAlpZiAobWFzayAmIFJYX01BQ19JTlRSKSB7CiAJCWdlbl9pbnRfbWFzayB8PSBSWE1BQ19JTlRfTTsKIAkJZG9fczJpb193cml0ZV9iaXRzKE1BQ19JTlRfU1RBVFVTX1JNQUNfSU5ULCBmbGFnLAotCQkJCSZiYXIwLT5tYWNfaW50X21hc2spOwotCQlpbnRlcnJ1cHRpYmxlID0gUk1BQ19SWF9CVUZGX09WUk4gfCBSTUFDX1JYX1NNX0VSUiB8Ci0JCQkJUk1BQ19VTlVTRURfSU5UIHwgUk1BQ19TSU5HTEVfRUNDX0VSUiB8Ci0JCQkJUk1BQ19ET1VCTEVfRUNDX0VSUjsKKwkJCQkgICAmYmFyMC0+bWFjX2ludF9tYXNrKTsKKwkJaW50ZXJydXB0aWJsZSA9IChSTUFDX1JYX0JVRkZfT1ZSTiB8IFJNQUNfUlhfU01fRVJSIHwKKwkJCQkgUk1BQ19VTlVTRURfSU5UIHwgUk1BQ19TSU5HTEVfRUNDX0VSUiB8CisJCQkJIFJNQUNfRE9VQkxFX0VDQ19FUlIpOwogCQlpZiAoczJpb19saW5rX2ZhdWx0X2luZGljYXRpb24obmljKSA9PSBNQUNfUk1BQ19FUlJfVElNRVIpCiAJCQlpbnRlcnJ1cHRpYmxlIHw9IFJNQUNfTElOS19TVEFURV9DSEFOR0VfSU5UOwogCQlkb19zMmlvX3dyaXRlX2JpdHMoaW50ZXJydXB0aWJsZSwKLQkJCQlmbGFnLCAmYmFyMC0+bWFjX3JtYWNfZXJyX21hc2spOworCQkJCSAgIGZsYWcsICZiYXIwLT5tYWNfcm1hY19lcnJfbWFzayk7CiAJfQogCi0JaWYgKG1hc2sgJiBSWF9YR1hTX0lOVFIpCi0JeworCWlmIChtYXNrICYgUlhfWEdYU19JTlRSKSB7CiAJCWdlbl9pbnRfbWFzayB8PSBSWFhHWFNfSU5UX007CiAJCWRvX3MyaW9fd3JpdGVfYml0cyhYR1hTX0lOVF9TVEFUVVNfUlhHWFMsIGZsYWcsCi0JCQkJJmJhcjAtPnhneHNfaW50X21hc2spOworCQkJCSAgICZiYXIwLT54Z3hzX2ludF9tYXNrKTsKIAkJZG9fczJpb193cml0ZV9iaXRzKFJYR1hTX0VTVE9SRV9PRkxPVyB8IFJYR1hTX1JYX1NNX0VSUiwgZmxhZywKLQkJCQkmYmFyMC0+eGd4c19yeGd4c19lcnJfbWFzayk7CisJCQkJICAgJmJhcjAtPnhneHNfcnhneHNfZXJyX21hc2spOwogCX0KIAogCWlmIChtYXNrICYgTUNfSU5UUikgewogCQlnZW5faW50X21hc2sgfD0gTUNfSU5UX007Ci0JCWRvX3MyaW9fd3JpdGVfYml0cyhNQ19JTlRfTUFTS19NQ19JTlQsIGZsYWcsICZiYXIwLT5tY19pbnRfbWFzayk7CisJCWRvX3MyaW9fd3JpdGVfYml0cyhNQ19JTlRfTUFTS19NQ19JTlQsCisJCQkJICAgZmxhZywgJmJhcjAtPm1jX2ludF9tYXNrKTsKIAkJZG9fczJpb193cml0ZV9iaXRzKE1DX0VSUl9SRUdfU01fRVJSIHwgTUNfRVJSX1JFR19FQ0NfQUxMX1NORyB8Ci0JCQkJTUNfRVJSX1JFR19FQ0NfQUxMX0RCTCB8IFBMTF9MT0NLX04sIGZsYWcsCi0JCQkJJmJhcjAtPm1jX2Vycl9tYXNrKTsKKwkJCQkgICBNQ19FUlJfUkVHX0VDQ19BTExfREJMIHwgUExMX0xPQ0tfTiwgZmxhZywKKwkJCQkgICAmYmFyMC0+bWNfZXJyX21hc2spOwogCX0KIAluaWMtPmdlbmVyYWxfaW50X21hc2sgPSBnZW5faW50X21hc2s7CiAKIAkvKiBSZW1vdmUgdGhpcyBsaW5lIHdoZW4gYWxhcm0gaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLwogCW5pYy0+Z2VuZXJhbF9pbnRfbWFzayA9IDA7CiB9CisKIC8qKgogICogIGVuX2Rpc19hYmxlX25pY19pbnRycyAtIEVuYWJsZSBvciBEaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCiAgKiAgQG5pYzogZGV2aWNlIHByaXZhdGUgdmFyaWFibGUsCkBAIC0yMDY1LDExICsyMDc0LDExIEBACiAJCQkgKiBUT0RPCiAJCQkgKi8KIAkJCWlmIChzMmlvX2xpbmtfZmF1bHRfaW5kaWNhdGlvbihuaWMpID09Ci0JCQkJCUxJTktfVVBfRE9XTl9JTlRFUlJVUFQgKSB7CisJCQkgICAgTElOS19VUF9ET1dOX0lOVEVSUlVQVCkgewogCQkJCWRvX3MyaW9fd3JpdGVfYml0cyhQSUNfSU5UX0dQSU8sIGZsYWcsCi0JCQkJCQkmYmFyMC0+cGljX2ludF9tYXNrKTsKKwkJCQkJCSAgICZiYXIwLT5waWNfaW50X21hc2spOwogCQkJCWRvX3MyaW9fd3JpdGVfYml0cyhHUElPX0lOVF9NQVNLX0xJTktfVVAsIGZsYWcsCi0JCQkJCQkmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CisJCQkJCQkgICAmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CiAJCQl9IGVsc2UKIAkJCQl3cml0ZXEoRElTQUJMRV9BTExfSU5UUlMsICZiYXIwLT5waWNfaW50X21hc2spOwogCQl9IGVsc2UgaWYgKGZsYWcgPT0gRElTQUJMRV9JTlRSUykgewpAQCAtMjExNiw3ICsyMTI1LDcgQEAKIAogCXRlbXA2NCA9IHJlYWRxKCZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKIAlpZiAoZmxhZyA9PSBFTkFCTEVfSU5UUlMpCi0JCXRlbXA2NCAmPSB+KCh1NjQpIGludHJfbWFzayk7CisJCXRlbXA2NCAmPSB+KCh1NjQpaW50cl9tYXNrKTsKIAllbHNlCiAJCXRlbXA2NCA9IERJU0FCTEVfQUxMX0lOVFJTOwogCXdyaXRlcSh0ZW1wNjQsICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKQEAgLTIxNzcsMzUgKzIxODYsMzUgQEAKIAltb2RlID0gczJpb192ZXJpZnlfcGNpX21vZGUoc3ApOwogCiAJaWYgKCEodmFsNjQgJiBBREFQVEVSX1NUQVRVU19URE1BX1JFQURZKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzIiwgIlRETUEgaXMgbm90IHJlYWR5ISIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIlRETUEgaXMgbm90IHJlYWR5IVxuIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoISh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX1JETUFfUkVBRFkpKSB7Ci0JREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJSRE1BIGlzIG5vdCByZWFkeSEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJSRE1BIGlzIG5vdCByZWFkeSFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCEodmFsNjQgJiBBREFQVEVSX1NUQVRVU19QRkNfUkVBRFkpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXMiLCAiUEZDIGlzIG5vdCByZWFkeSEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJQRkMgaXMgbm90IHJlYWR5IVxuIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoISh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX1RNQUNfQlVGX0VNUFRZKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzIiwgIlRNQUMgQlVGIGlzIG5vdCBlbXB0eSEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJUTUFDIEJVRiBpcyBub3QgZW1wdHkhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghKHZhbDY0ICYgQURBUFRFUl9TVEFUVVNfUElDX1FVSUVTQ0VOVCkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJQSUMgaXMgbm90IFFVSUVTQ0VOVCEiKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJQSUMgaXMgbm90IFFVSUVTQ0VOVCFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCEodmFsNjQgJiBBREFQVEVSX1NUQVRVU19NQ19EUkFNX1JFQURZKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzIiwgIk1DX0RSQU0gaXMgbm90IHJlYWR5ISIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIk1DX0RSQU0gaXMgbm90IHJlYWR5IVxuIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoISh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX01DX1FVRVVFU19SRUFEWSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJNQ19RVUVVRVMgaXMgbm90IHJlYWR5ISIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIk1DX1FVRVVFUyBpcyBub3QgcmVhZHkhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghKHZhbDY0ICYgQURBUFRFUl9TVEFUVVNfTV9QTExfTE9DSykpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJNX1BMTCBpcyBub3QgbG9ja2VkISIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIk1fUExMIGlzIG5vdCBsb2NrZWQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjE1LDE0ICsyMjI0LDE0IEBACiAJICogbm90IGJlIGFzc2VydGVkLgogCSAqLwogCWlmICghKHZhbDY0ICYgQURBUFRFUl9TVEFUVVNfUF9QTExfTE9DSykgJiYKLQkJc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UgJiYgbW9kZSAhPQotCQlQQ0lfTU9ERV9QQ0lfMzMpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlcyIsICJQX1BMTCBpcyBub3QgbG9ja2VkISIpOworCSAgICBzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSAmJgorCSAgICBtb2RlICE9IFBDSV9NT0RFX1BDSV8zMykgeworCQlEQkdfUFJJTlQoRVJSX0RCRywgIlBfUExMIGlzIG5vdCBsb2NrZWQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmICghKCh2YWw2NCAmIEFEQVBURVJfU1RBVFVTX1JDX1BSQ19RVUlFU0NFTlQpID09Ci0JCQlBREFQVEVSX1NUQVRVU19SQ19QUkNfUVVJRVNDRU5UKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzIiwgIlJDX1BSQyBpcyBub3QgUVVJRVNDRU5UISIpOworCSAgICAgIEFEQVBURVJfU1RBVFVTX1JDX1BSQ19RVUlFU0NFTlQpKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiUkNfUFJDIGlzIG5vdCBRVUlFU0NFTlQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtMjIzNiw3ICsyMjQ1LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIHZvaWQgZml4X21hY19hZGRyZXNzKHN0cnVjdCBzMmlvX25pYyAqIHNwKQorc3RhdGljIHZvaWQgZml4X21hY19hZGRyZXNzKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAJdTY0IHZhbDY0OwpAQCAtMjI2OCwxNSArMjI3NywxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuaWMtPmRldjsKIAlyZWdpc3RlciB1NjQgdmFsNjQgPSAwOwogCXUxNiBzdWJpZCwgaTsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwotCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKLQotCW1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7Ci0JY29uZmlnID0gJm5pYy0+Y29uZmlnOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7CiAKIAkvKiAgUFJDIEluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uICovCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQl3cml0ZXEoKHU2NCkgbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2Jsb2Nrc1swXS5ibG9ja19kbWFfYWRkciwKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJd3JpdGVxKCh1NjQpcmluZy0+cnhfYmxvY2tzWzBdLmJsb2NrX2RtYV9hZGRyLAogCQkgICAgICAgJmJhcjAtPnByY19yeGQwX25baV0pOwogCiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnByY19jdHJsX25baV0pOwpAQCAtMjMyOCw5ICsyMzM2LDkgQEAKIAkgKi8KIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX3N0YXR1cyk7CiAJaWYgKCF2ZXJpZnlfeGVuYV9xdWllc2NlbmNlKG5pYykpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogZGV2aWNlIGlzIG5vdCByZWFkeSwgIiwgZGV2LT5uYW1lKTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJBZGFwdGVyIHN0YXR1cyByZWFkczogMHglbGx4XG4iLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWw2NCk7CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGRldmljZSBpcyBub3QgcmVhZHksICIKKwkJCSAgIkFkYXB0ZXIgc3RhdHVzIHJlYWRzOiAweCVsbHhcbiIsCisJCQkgIGRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CiAJCXJldHVybiBGQUlMVVJFOwogCX0KIApAQCAtMjM3MCw4ICsyMzc4LDggQEAKIC8qKgogICogczJpb190eGRsX2dldHNrYiAtIEdldCB0aGUgc2tiIGZyb20gdHhkbCwgdW5tYXAgYW5kIHJldHVybiBza2IKICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpzMmlvX3R4ZGxfZ2V0c2tiKHN0cnVjdCBmaWZvX2luZm8gKmZpZm9fZGF0YSwgc3RydWN0IFwKLQkJCQkJVHhEICp0eGRscCwgaW50IGdldF9vZmYpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnMyaW9fdHhkbF9nZXRza2Ioc3RydWN0IGZpZm9faW5mbyAqZmlmb19kYXRhLAorCQkJCQlzdHJ1Y3QgVHhEICp0eGRscCwgaW50IGdldF9vZmYpCiB7CiAJc3RydWN0IHMyaW9fbmljICpuaWMgPSBmaWZvX2RhdGEtPm5pYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMjM4MCwyMiArMjM4OCwxOCBAQAogCiAJdHhkcyA9IHR4ZGxwOwogCWlmICh0eGRzLT5Ib3N0X0NvbnRyb2wgPT0gKHU2NCkobG9uZylmaWZvX2RhdGEtPnVmb19pbl9iYW5kX3YpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJdHhkcy0+QnVmZmVyX1BvaW50ZXIsIHNpemVvZih1NjQpLAotCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCXBjaV91bm1hcF9zaW5nbGUobmljLT5wZGV2LCAoZG1hX2FkZHJfdCl0eGRzLT5CdWZmZXJfUG9pbnRlciwKKwkJCQkgc2l6ZW9mKHU2NCksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQl0eGRzKys7CiAJfQogCi0Jc2tiID0gKHN0cnVjdCBza19idWZmICopICgodW5zaWduZWQgbG9uZykKLQkJCXR4ZHMtPkhvc3RfQ29udHJvbCk7CisJc2tiID0gKHN0cnVjdCBza19idWZmICopKCh1bnNpZ25lZCBsb25nKXR4ZHMtPkhvc3RfQ29udHJvbCk7CiAJaWYgKCFza2IpIHsKIAkJbWVtc2V0KHR4ZGxwLCAwLCAoc2l6ZW9mKHN0cnVjdCBUeEQpICogZmlmb19kYXRhLT5tYXhfdHhkcykpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJIHR4ZHMtPkJ1ZmZlcl9Qb2ludGVyLAotCQkJIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbiwKLQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwlwY2lfdW5tYXBfc2luZ2xlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpdHhkcy0+QnVmZmVyX1BvaW50ZXIsCisJCQkgc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAlmcmdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAlpZiAoZnJnX2NudCkgewogCQl0eGRzKys7CkBAIC0yNDAzLDEzICsyNDA3LDEzIEBACiAJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3Nbal07CiAJCQlpZiAoIXR4ZHMtPkJ1ZmZlcl9Qb2ludGVyKQogCQkJCWJyZWFrOwotCQkJcGNpX3VubWFwX3BhZ2UobmljLT5wZGV2LCAoZG1hX2FkZHJfdCkKLQkJCQkJdHhkcy0+QnVmZmVyX1BvaW50ZXIsCisJCQlwY2lfdW5tYXBfcGFnZShuaWMtPnBkZXYsCisJCQkJICAgICAgIChkbWFfYWRkcl90KXR4ZHMtPkJ1ZmZlcl9Qb2ludGVyLAogCQkJCSAgICAgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJfQogCX0KLQltZW1zZXQodHhkbHAsMCwgKHNpemVvZihzdHJ1Y3QgVHhEKSAqIGZpZm9fZGF0YS0+bWF4X3R4ZHMpKTsKLQlyZXR1cm4oc2tiKTsKKwltZW1zZXQodHhkbHAsIDAsIChzaXplb2Yoc3RydWN0IFR4RCkgKiBmaWZvX2RhdGEtPm1heF90eGRzKSk7CisJcmV0dXJuIHNrYjsKIH0KIAogLyoqCkBAIC0yNDE4LDcgKzI0MjIsNyBAQAogICogIERlc2NyaXB0aW9uOgogICogIEZyZWUgYWxsIHF1ZXVlZCBUeCBidWZmZXJzLgogICogIFJldHVybiBWYWx1ZTogdm9pZAotKi8KKyAqLwogCiBzdGF0aWMgdm9pZCBmcmVlX3R4X2J1ZmZlcnMoc3RydWN0IHMyaW9fbmljICpuaWMpCiB7CkBAIC0yNDI2LDMzICsyNDMwLDMzIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgVHhEICp0eGRwOwogCWludCBpLCBqOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOwogCWludCBjbnQgPSAwOwotCi0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKLQljb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJm5pYy0+Y29uZmlnOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHMgPSBtYWNfY29udHJvbC0+c3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnN0YXRzLT5zd19zdGF0OwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgeworCQlzdHJ1Y3QgdHhfZmlmb19jb25maWcgKnR4X2NmZyA9ICZjb25maWctPnR4X2NmZ1tpXTsKKwkJc3RydWN0IGZpZm9faW5mbyAqZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbaV07CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZtYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfbG9jaywgZmxhZ3MpOwotCQlmb3IgKGogPSAwOyBqIDwgY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW47IGorKykgewotCQkJdHhkcCA9IChzdHJ1Y3QgVHhEICopIFwKLQkJCW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm9bal0ubGlzdF92aXJ0X2FkZHI7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKwkJZm9yIChqID0gMDsgaiA8IHR4X2NmZy0+Zmlmb19sZW47IGorKykgeworCQkJdHhkcCA9IChzdHJ1Y3QgVHhEICopZmlmby0+bGlzdF9pbmZvW2pdLmxpc3RfdmlydF9hZGRyOwogCQkJc2tiID0gczJpb190eGRsX2dldHNrYigmbWFjX2NvbnRyb2wtPmZpZm9zW2ldLCB0eGRwLCBqKTsKIAkJCWlmIChza2IpIHsKLQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkCi0JCQkJCSs9IHNrYi0+dHJ1ZXNpemU7CisJCQkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CiAJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWNudCsrOwogCQkJfQogCQl9CiAJCURCR19QUklOVChJTlRSX0RCRywKLQkJCSAgIiVzOmZvcmNpYmx5IGZyZWVpbmcgJWQgc2ticyBvbiBGSUZPJWRcbiIsCisJCQkgICIlczogZm9yY2libHkgZnJlZWluZyAlZCBza2JzIG9uIEZJRk8lZFxuIiwKIAkJCSAgZGV2LT5uYW1lLCBjbnQsIGkpOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPSAwOwotCQltYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfY3Vycl9wdXRfaW5mby5vZmZzZXQgPSAwOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfbG9jaywgZmxhZ3MpOworCQlmaWZvLT50eF9jdXJyX2dldF9pbmZvLm9mZnNldCA9IDA7CisJCWZpZm8tPnR4X2N1cnJfcHV0X2luZm8ub2Zmc2V0ID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMjQ3MSwxMSArMjQ3NSw2IEBACiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXJlZ2lzdGVyIHU2NCB2YWw2NCA9IDA7CiAJdTE2IGludGVycnVwdGlibGU7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0KLQltYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwotCWNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKIAogCS8qICBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJZW5fZGlzX2Vycl9hbGFybXMobmljLCBFTkFfQUxMX0lOVFJTLCBESVNBQkxFX0lOVFJTKTsKQEAgLTI1MTIsNyArMjUxMSw3IEBACiAgKiAgU1VDQ0VTUyBvbiBzdWNjZXNzIG9yIGFuIGFwcHJvcHJpYXRlIC12ZSB2YWx1ZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IGZpbGxfcnhfYnVmZmVycyhzdHJ1Y3QgczJpb19uaWMgKm5pYywgc3RydWN0IHJpbmdfaW5mbyAqcmluZywKLQkJCQlpbnQgZnJvbV9jYXJkX3VwKQorCQkJICAgaW50IGZyb21fY2FyZF91cCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBSeERfdCAqcnhkcDsKQEAgLTI1MjYsNyArMjUyNSw3IEBACiAJaW50IHJ4ZF9pbmRleCA9IDA7CiAJc3RydWN0IFJ4RDEgKnJ4ZHAxOwogCXN0cnVjdCBSeEQzICpyeGRwMzsKLQlzdHJ1Y3Qgc3dTdGF0ICpzdGF0cyA9ICZyaW5nLT5uaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZyaW5nLT5uaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKIAlhbGxvY19jbnQgPSByaW5nLT5wa3RfY250IC0gcmluZy0+cnhfYnVmc19sZWZ0OwogCkBAIC0yNTQzLDE3ICsyNTQyLDE2IEBACiAJCQlyeGRfaW5kZXggKz0gKGJsb2NrX25vICogcmluZy0+cnhkX2NvdW50KTsKIAogCQlpZiAoKGJsb2NrX25vID09IGJsb2NrX25vMSkgJiYKLQkJCShvZmYgPT0gcmluZy0+cnhfY3Vycl9nZXRfaW5mby5vZmZzZXQpICYmCi0JCQkocnhkcC0+SG9zdF9Db250cm9sKSkgewotCQkJREJHX1BSSU5UKElOVFJfREJHLCAiJXM6IEdldCBhbmQgUHV0IiwKLQkJCQlyaW5nLT5kZXYtPm5hbWUpOwotCQkJREJHX1BSSU5UKElOVFJfREJHLCAiIGluZm8gZXF1YXRlZFxuIik7CisJCSAgICAob2ZmID09IHJpbmctPnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0KSAmJgorCQkgICAgKHJ4ZHAtPkhvc3RfQ29udHJvbCkpIHsKKwkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBHZXQgYW5kIFB1dCBpbmZvIGVxdWF0ZWRcbiIsCisJCQkJICByaW5nLT5kZXYtPm5hbWUpOwogCQkJZ290byBlbmQ7CiAJCX0KIAkJaWYgKG9mZiAmJiAob2ZmID09IHJpbmctPnJ4ZF9jb3VudCkpIHsKIAkJCXJpbmctPnJ4X2N1cnJfcHV0X2luZm8uYmxvY2tfaW5kZXgrKzsKIAkJCWlmIChyaW5nLT5yeF9jdXJyX3B1dF9pbmZvLmJsb2NrX2luZGV4ID09Ci0JCQkJCQkJcmluZy0+YmxvY2tfY291bnQpCisJCQkgICAgcmluZy0+YmxvY2tfY291bnQpCiAJCQkJcmluZy0+cnhfY3Vycl9wdXRfaW5mby5ibG9ja19pbmRleCA9IDA7CiAJCQlibG9ja19ubyA9IHJpbmctPnJ4X2N1cnJfcHV0X2luZm8uYmxvY2tfaW5kZXg7CiAJCQlvZmYgPSAwOwpAQCAtMjU2NSwxNCArMjU2MywxNSBAQAogCQl9CiAKIAkJaWYgKChyeGRwLT5Db250cm9sXzEgJiBSWERfT1dOX1hFTkEpICYmCi0JCQkoKHJpbmctPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSAmJgotCQkJCShyeGRwLT5Db250cm9sXzIgJiBzMkJJVCgwKSkpKSB7CisJCSAgICAoKHJpbmctPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSAmJgorCQkgICAgIChyeGRwLT5Db250cm9sXzIgJiBzMkJJVCgwKSkpKSB7CiAJCQlyaW5nLT5yeF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IG9mZjsKIAkJCWdvdG8gZW5kOwogCQl9CiAJCS8qIGNhbGN1bGF0ZSBzaXplIG9mIHNrYiBiYXNlZCBvbiByaW5nIG1vZGUgKi8KLQkJc2l6ZSA9IHJpbmctPm10dSArIEhFQURFUl9FVEhFUk5FVF9JSV84MDJfM19TSVpFICsKLQkJCQlIRUFERVJfODAyXzJfU0laRSArIEhFQURFUl9TTkFQX1NJWkU7CisJCXNpemUgPSByaW5nLT5tdHUgKworCQkJSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX1NJWkUgKworCQkJSEVBREVSXzgwMl8yX1NJWkUgKyBIRUFERVJfU05BUF9TSVpFOwogCQlpZiAocmluZy0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkKIAkJCXNpemUgKz0gTkVUX0lQX0FMSUdOOwogCQllbHNlCkBAIC0yNTgwLDM0ICsyNTc5LDM1IEBACiAKIAkJLyogYWxsb2NhdGUgc2tiICovCiAJCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7Ci0JCWlmKCFza2IpIHsKLQkJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBPdXQgb2YgIiwgcmluZy0+ZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChJTkZPX0RCRywgIm1lbW9yeSB0byBhbGxvY2F0ZSBTS0JzXG4iKTsKKwkJaWYgKCFza2IpIHsKKwkJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iLAorCQkJCSAgcmluZy0+ZGV2LT5uYW1lKTsKIAkJCWlmIChmaXJzdF9yeGRwKSB7CiAJCQkJd21iKCk7CiAJCQkJZmlyc3RfcnhkcC0+Q29udHJvbF8xIHw9IFJYRF9PV05fWEVOQTsKIAkJCX0KLQkJCXN0YXRzLT5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKKwkJCXN3c3RhdHMtPm1lbV9hbGxvY19mYWlsX2NudCsrOwogCiAJCQlyZXR1cm4gLUVOT01FTSA7CiAJCX0KLQkJc3RhdHMtPm1lbV9hbGxvY2F0ZWQgKz0gc2tiLT50cnVlc2l6ZTsKKwkJc3dzdGF0cy0+bWVtX2FsbG9jYXRlZCArPSBza2ItPnRydWVzaXplOwogCiAJCWlmIChyaW5nLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8xKSB7CiAJCQkvKiAxIGJ1ZmZlciBtb2RlIC0gbm9ybWFsIG9wZXJhdGlvbiBtb2RlICovCi0JCQlyeGRwMSA9IChzdHJ1Y3QgUnhEMSopcnhkcDsKKwkJCXJ4ZHAxID0gKHN0cnVjdCBSeEQxICopcnhkcDsKIAkJCW1lbXNldChyeGRwLCAwLCBzaXplb2Yoc3RydWN0IFJ4RDEpKTsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQkJCXJ4ZHAxLT5CdWZmZXIwX3B0ciA9IHBjaV9tYXBfc2luZ2xlCi0JCQkgICAgKHJpbmctPnBkZXYsIHNrYi0+ZGF0YSwgc2l6ZSAtIE5FVF9JUF9BTElHTiwKLQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcnhkcDEtPkJ1ZmZlcjBfcHRyID0KKwkJCQlwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgICAgICBzaXplIC0gTkVUX0lQX0FMSUdOLAorCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IobmljLT5wZGV2LAotCQkJCQkJcnhkcDEtPkJ1ZmZlcjBfcHRyKSkKKwkJCQkJCSAgcnhkcDEtPkJ1ZmZlcjBfcHRyKSkKIAkJCQlnb3RvIHBjaV9tYXBfZmFpbGVkOwogCiAJCQlyeGRwLT5Db250cm9sXzIgPQogCQkJCVNFVF9CVUZGRVIwX1NJWkVfMShzaXplIC0gTkVUX0lQX0FMSUdOKTsKLQkJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSAoc2tiKTsKKwkJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKXNrYjsKIAkJfSBlbHNlIGlmIChyaW5nLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgewogCQkJLyoKIAkJCSAqIDIgYnVmZmVyIG1vZGUgLQpAQCAtMjYxNSw3ICsyNjE1LDcgQEAKIAkJCSAqIGJ5dGUgYWxpZ25lZCByZWNlaXZlIGJ1ZmZlcnMuCiAJCQkgKi8KIAotCQkJcnhkcDMgPSAoc3RydWN0IFJ4RDMqKXJ4ZHA7CisJCQlyeGRwMyA9IChzdHJ1Y3QgUnhEMyAqKXJ4ZHA7CiAJCQkvKiBzYXZlIGJ1ZmZlciBwb2ludGVycyB0byBhdm9pZCBmcmVxdWVudCBkbWEgbWFwcGluZyAqLwogCQkJQnVmZmVyMF9wdHIgPSByeGRwMy0+QnVmZmVyMF9wdHI7CiAJCQlCdWZmZXIxX3B0ciA9IHJ4ZHAzLT5CdWZmZXIxX3B0cjsKQEAgLTI2MjYsNyArMjYyNiw3IEBACiAKIAkJCWJhID0gJnJpbmctPmJhW2Jsb2NrX25vXVtvZmZdOwogCQkJc2tiX3Jlc2VydmUoc2tiLCBCVUYwX0xFTik7Ci0JCQl0bXAgPSAodTY0KSh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGE7CisJCQl0bXAgPSAodTY0KSh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YTsKIAkJCXRtcCArPSBBTElHTl9TSVpFOwogCQkJdG1wICY9IH5BTElHTl9TSVpFOwogCQkJc2tiLT5kYXRhID0gKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpdG1wOwpAQCAtMjYzNCwxNSArMjYzNCwxNyBAQAogCiAJCQlpZiAoZnJvbV9jYXJkX3VwKSB7CiAJCQkJcnhkcDMtPkJ1ZmZlcjBfcHRyID0KLQkJCQkgICBwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCBiYS0+YmFfMCwKLQkJCQkJQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKG5pYy0+cGRldiwKLQkJCQkJCXJ4ZHAzLT5CdWZmZXIwX3B0cikpCisJCQkJCXBjaV9tYXBfc2luZ2xlKHJpbmctPnBkZXYsIGJhLT5iYV8wLAorCQkJCQkJICAgICAgIEJVRjBfTEVOLAorCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihuaWMtPnBkZXYsCisJCQkJCQkJICByeGRwMy0+QnVmZmVyMF9wdHIpKQogCQkJCQlnb3RvIHBjaV9tYXBfZmFpbGVkOwogCQkJfSBlbHNlCiAJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHJpbmctPnBkZXYsCi0JCQkJKGRtYV9hZGRyX3QpIHJ4ZHAzLT5CdWZmZXIwX3B0ciwKLQkJCQkgICAgQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCQkJICAgICAgIChkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIwX3B0ciwKKwkJCQkJCQkgICAgICAgQlVGMF9MRU4sCisJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJCXJ4ZHAtPkNvbnRyb2xfMiA9IFNFVF9CVUZGRVIwX1NJWkVfMyhCVUYwX0xFTik7CiAJCQlpZiAocmluZy0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKQEAgLTI2NTIsMzQgKzI2NTQsMzUgQEAKIAkJCQkgKiBCdWZmZXIyIHdpbGwgaGF2ZSBMMy9MNCBoZWFkZXIgcGx1cwogCQkJCSAqIEw0IHBheWxvYWQKIAkJCQkgKi8KLQkJCQlyeGRwMy0+QnVmZmVyMl9wdHIgPSBwY2lfbWFwX3NpbmdsZQotCQkJCShyaW5nLT5wZGV2LCBza2ItPmRhdGEsIHJpbmctPm10dSArIDQsCi0JCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCXJ4ZHAzLT5CdWZmZXIyX3B0ciA9IHBjaV9tYXBfc2luZ2xlKHJpbmctPnBkZXYsCisJCQkJCQkJCSAgICBza2ItPmRhdGEsCisJCQkJCQkJCSAgICByaW5nLT5tdHUgKyA0LAorCQkJCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IobmljLT5wZGV2LAotCQkJCQkJCXJ4ZHAzLT5CdWZmZXIyX3B0cikpCisJCQkJCQkJICByeGRwMy0+QnVmZmVyMl9wdHIpKQogCQkJCQlnb3RvIHBjaV9tYXBfZmFpbGVkOwogCiAJCQkJaWYgKGZyb21fY2FyZF91cCkgewogCQkJCQlyeGRwMy0+QnVmZmVyMV9wdHIgPQogCQkJCQkJcGNpX21hcF9zaW5nbGUocmluZy0+cGRldiwKLQkJCQkJCWJhLT5iYV8xLCBCVUYxX0xFTiwKLQkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCQkJICAgICAgIGJhLT5iYV8xLAorCQkJCQkJCSAgICAgICBCVUYxX0xFTiwKKwkJCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQkJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKG5pYy0+cGRldiwKLQkJCQkJCXJ4ZHAzLT5CdWZmZXIxX3B0cikpIHsKLQkJCQkJCXBjaV91bm1hcF9zaW5nbGUKLQkJCQkJCQkocmluZy0+cGRldiwKLQkJCQkJCSAgICAoZG1hX2FkZHJfdCkodW5zaWduZWQgbG9uZykKLQkJCQkJCQlza2ItPmRhdGEsCi0JCQkJCQkJcmluZy0+bXR1ICsgNCwKLQkJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkJCQkgIHJ4ZHAzLT5CdWZmZXIxX3B0cikpIHsKKwkJCQkJCXBjaV91bm1hcF9zaW5nbGUocmluZy0+cGRldiwKKwkJCQkJCQkJIChkbWFfYWRkcl90KSh1bnNpZ25lZCBsb25nKQorCQkJCQkJCQkgc2tiLT5kYXRhLAorCQkJCQkJCQkgcmluZy0+bXR1ICsgNCwKKwkJCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJCQlnb3RvIHBjaV9tYXBfZmFpbGVkOwogCQkJCQl9CiAJCQkJfQogCQkJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMV9TSVpFXzMoMSk7CiAJCQkJcnhkcC0+Q29udHJvbF8yIHw9IFNFVF9CVUZGRVIyX1NJWkVfMwotCQkJCQkJCQkocmluZy0+bXR1ICsgNCk7CisJCQkJCShyaW5nLT5tdHUgKyA0KTsKIAkJCX0KIAkJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBzMkJJVCgwKTsKIAkJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSAoc2tiKTsKQEAgLTI3MDMsNyArMjcwNiw3IEBACiAJCWFsbG9jX3RhYisrOwogCX0KIAotICAgICAgZW5kOgorZW5kOgogCS8qIFRyYW5zZmVyIG93bmVyc2hpcCBvZiBmaXJzdCBkZXNjcmlwdG9yIHRvIGFkYXB0ZXIganVzdCBiZWZvcmUKIAkgKiBleGl0aW5nLiBCZWZvcmUgdGhhdCwgdXNlIG1lbW9yeSBiYXJyaWVyIHNvIHRoYXQgb3duZXJzaGlwCiAJICogYW5kIG90aGVyIGZpZWxkcyBhcmUgc2VlbiBieSBhZGFwdGVyIGNvcnJlY3RseS4KQEAgLTI3MTQsOSArMjcxNywxMCBAQAogCX0KIAogCXJldHVybiBTVUNDRVNTOworCiBwY2lfbWFwX2ZhaWxlZDoKLQlzdGF0cy0+cGNpX21hcF9mYWlsX2NudCsrOwotCXN0YXRzLT5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKKwlzd3N0YXRzLT5wY2lfbWFwX2ZhaWxfY250Kys7CisJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CiAJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTI3MjcsNDkgKzI3MzEsNDYgQEAKIAlpbnQgajsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBSeERfdCAqcnhkcDsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwogCXN0cnVjdCBidWZmQWRkICpiYTsKIAlzdHJ1Y3QgUnhEMSAqcnhkcDE7CiAJc3RydWN0IFJ4RDMgKnJ4ZHAzOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOworCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0cyA9IG1hY19jb250cm9sLT5zdGF0c19pbmZvOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3RhdHMtPnN3X3N0YXQ7CiAKLQltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAJZm9yIChqID0gMCA7IGogPCByeGRfY291bnRbc3AtPnJ4ZF9tb2RlXTsgaisrKSB7CiAJCXJ4ZHAgPSBtYWNfY29udHJvbC0+cmluZ3NbcmluZ19ub10uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2Jsb2Nrc1tibGtdLnJ4ZHNbal0udmlydF9hZGRyOwotCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikKLQkJCSgodW5zaWduZWQgbG9uZykgcnhkcC0+SG9zdF9Db250cm9sKTsKLQkJaWYgKCFza2IpIHsKKwkJCXJ4X2Jsb2Nrc1tibGtdLnJ4ZHNbal0udmlydF9hZGRyOworCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikoKHVuc2lnbmVkIGxvbmcpcnhkcC0+SG9zdF9Db250cm9sKTsKKwkJaWYgKCFza2IpCiAJCQljb250aW51ZTsKLQkJfQogCQlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpIHsKLQkJCXJ4ZHAxID0gKHN0cnVjdCBSeEQxKilyeGRwOwotCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJcnhkcDEtPkJ1ZmZlcjBfcHRyLAotCQkJCWRldi0+bXR1ICsKLQkJCQlIRUFERVJfRVRIRVJORVRfSUlfODAyXzNfU0laRQotCQkJCSsgSEVBREVSXzgwMl8yX1NJWkUgKwotCQkJCUhFQURFUl9TTkFQX1NJWkUsCi0JCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXJ4ZHAxID0gKHN0cnVjdCBSeEQxICopcnhkcDsKKwkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCisJCQkJCSAoZG1hX2FkZHJfdClyeGRwMS0+QnVmZmVyMF9wdHIsCisJCQkJCSBkZXYtPm10dSArCisJCQkJCSBIRUFERVJfRVRIRVJORVRfSUlfODAyXzNfU0laRSArCisJCQkJCSBIRUFERVJfODAyXzJfU0laRSArIEhFQURFUl9TTkFQX1NJWkUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJbWVtc2V0KHJ4ZHAsIDAsIHNpemVvZihzdHJ1Y3QgUnhEMSkpOwotCQl9IGVsc2UgaWYoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSB7Ci0JCQlyeGRwMyA9IChzdHJ1Y3QgUnhEMyopcnhkcDsKLQkJCWJhID0gJm1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS4KLQkJCQliYVtibGtdW2pdOwotCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJcnhkcDMtPkJ1ZmZlcjBfcHRyLAotCQkJCUJVRjBfTEVOLAotCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LCAoZG1hX2FkZHJfdCkKLQkJCQlyeGRwMy0+QnVmZmVyMV9wdHIsCi0JCQkJQlVGMV9MRU4sCi0JCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCXJ4ZHAzLT5CdWZmZXIyX3B0ciwKLQkJCQlkZXYtPm10dSArIDQsCi0JCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfSBlbHNlIGlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKKwkJCXJ4ZHAzID0gKHN0cnVjdCBSeEQzICopcnhkcDsKKwkJCWJhID0gJm1hY19jb250cm9sLT5yaW5nc1tyaW5nX25vXS5iYVtibGtdW2pdOworCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwKKwkJCQkJIChkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIwX3B0ciwKKwkJCQkJIEJVRjBfTEVOLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCisJCQkJCSAoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMV9wdHIsCisJCQkJCSBCVUYxX0xFTiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHNwLT5wZGV2LAorCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjJfcHRyLAorCQkJCQkgZGV2LT5tdHUgKyA0LAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCW1lbXNldChyeGRwLCAwLCBzaXplb2Yoc3RydWN0IFJ4RDMpKTsKIAkJfQotCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKKwkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJbWFjX2NvbnRyb2wtPnJpbmdzW3Jpbmdfbm9dLnJ4X2J1ZnNfbGVmdCAtPSAxOwogCX0KQEAgLTI3ODgsMjIgKzI3ODksMjEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKIAlpbnQgaSwgYmxrID0gMCwgYnVmX2NudCA9IDA7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0KLQltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7Ci0JY29uZmlnID0gJnNwLT5jb25maWc7CisJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnID0gJnNwLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCWZvciAoYmxrID0gMDsgYmxrIDwgcnhfcmluZ19zeltpXTsgYmxrKyspCi0JCQlmcmVlX3J4ZF9ibGsoc3AsaSxibGspOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKIAotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfY3Vycl9wdXRfaW5mby5ibG9ja19pbmRleCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeF9jdXJyX2dldF9pbmZvLmJsb2NrX2luZGV4ID0gMDsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2N1cnJfcHV0X2luZm8ub2Zmc2V0ID0gMDsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gMDsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2J1ZnNfbGVmdCA9IDA7Ci0JCURCR19QUklOVChJTklUX0RCRywgIiVzOkZyZWVkIDB4JXggUnggQnVmZmVycyBvbiByaW5nJWRcbiIsCisJCWZvciAoYmxrID0gMDsgYmxrIDwgcnhfcmluZ19zeltpXTsgYmxrKyspCisJCQlmcmVlX3J4ZF9ibGsoc3AsIGksIGJsayk7CisKKwkJcmluZy0+cnhfY3Vycl9wdXRfaW5mby5ibG9ja19pbmRleCA9IDA7CisJCXJpbmctPnJ4X2N1cnJfZ2V0X2luZm8uYmxvY2tfaW5kZXggPSAwOworCQlyaW5nLT5yeF9jdXJyX3B1dF9pbmZvLm9mZnNldCA9IDA7CisJCXJpbmctPnJ4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gMDsKKwkJcmluZy0+cnhfYnVmc19sZWZ0ID0gMDsKKwkJREJHX1BSSU5UKElOSVRfREJHLCAiJXM6IEZyZWVkIDB4JXggUnggQnVmZmVycyBvbiByaW5nJWRcbiIsCiAJCQkgIGRldi0+bmFtZSwgYnVmX2NudCwgaSk7CiAJfQogfQpAQCAtMjgxMSw4ICsyODExLDggQEAKIHN0YXRpYyBpbnQgczJpb19jaGtfcnhfYnVmZmVycyhzdHJ1Y3QgczJpb19uaWMgKm5pYywgc3RydWN0IHJpbmdfaW5mbyAqcmluZykKIHsKIAlpZiAoZmlsbF9yeF9idWZmZXJzKG5pYywgcmluZywgMCkgPT0gLUVOT01FTSkgewotCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwgcmluZy0+ZGV2LT5uYW1lKTsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiIGluIFJ4IEludHIhIVxuIik7CisJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBPdXQgb2YgbWVtb3J5IGluIFJ4IEludHIhIVxuIiwKKwkJCSAgcmluZy0+ZGV2LT5uYW1lKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yODM0LDggKzI4MzQsNiBAQAogewogCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHJpbmdfaW5mbywgbmFwaSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlpbnQgcGt0c19wcm9jZXNzZWQgPSAwOwogCXU4IF9faW9tZW0gKmFkZHIgPSBOVUxMOwogCXU4IHZhbDggPSAwOwpAQCAtMjg0Myw5ICsyODQxLDYgQEAKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBuaWMtPmJhcjA7CiAJaW50IGJ1ZGdldF9vcmcgPSBidWRnZXQ7CiAKLQljb25maWcgPSAmbmljLT5jb25maWc7Ci0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKLQogCWlmICh1bmxpa2VseSghaXNfczJpb19jYXJkX3VwKG5pYykpKQogCQlyZXR1cm4gMDsKIApAQCAtMjg2MywyNSArMjg1OCwyMiBAQAogCX0KIAlyZXR1cm4gcGt0c19wcm9jZXNzZWQ7CiB9CisKIHN0YXRpYyBpbnQgczJpb19wb2xsX2ludGEoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBzMmlvX25pYyAqbmljID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBzMmlvX25pYywgbmFwaSk7Ci0Jc3RydWN0IHJpbmdfaW5mbyAqcmluZzsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlpbnQgcGt0c19wcm9jZXNzZWQgPSAwOwogCWludCByaW5nX3BrdHNfcHJvY2Vzc2VkLCBpOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKIAlpbnQgYnVkZ2V0X29yZyA9IGJ1ZGdldDsKLQotCWNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKLQltYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZuaWMtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJm5pYy0+bWFjX2NvbnRyb2w7CiAKIAlpZiAodW5saWtlbHkoIWlzX3MyaW9fY2FyZF91cChuaWMpKSkKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCXJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKIAkJcmluZ19wa3RzX3Byb2Nlc3NlZCA9IHJ4X2ludHJfaGFuZGxlcihyaW5nLCBidWRnZXQpOwogCQlzMmlvX2Noa19yeF9idWZmZXJzKG5pYywgcmluZyk7CiAJCXBrdHNfcHJvY2Vzc2VkICs9IHJpbmdfcGt0c19wcm9jZXNzZWQ7CkBAIC0yOTExLDIwICsyOTAzLDE3IEBACiBzdGF0aWMgdm9pZCBzMmlvX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgczJpb19uaWMgKm5pYyA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKLQlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXU2NCB2YWw2NCA9IDB4RkZGRkZGRkZGRkZGRkZGRlVMTDsKIAlpbnQgaTsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmbmljLT5jb25maWc7CisJc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbCA9ICZuaWMtPm1hY19jb250cm9sOwogCiAJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUobmljLT5wZGV2KSkKIAkJcmV0dXJuOwogCiAJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCi0JbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKLQljb25maWcgPSAmbmljLT5jb25maWc7Ci0KIAl3cml0ZXEodmFsNjQsICZiYXIwLT5yeF90cmFmZmljX2ludCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+dHhfdHJhZmZpY19pbnQpOwogCkBAIC0yOTM2LDE0ICsyOTI1LDE5IEBACiAJCXR4X2ludHJfaGFuZGxlcigmbWFjX2NvbnRyb2wtPmZpZm9zW2ldKTsKIAogCS8qIGNoZWNrIGZvciByZWNlaXZlZCBwYWNrZXQgYW5kIGluZGljYXRlIHVwIHRvIG5ldHdvcmsgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKQotCQlyeF9pbnRyX2hhbmRsZXIoJm1hY19jb250cm9sLT5yaW5nc1tpXSwgMCk7CisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgeworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQlyeF9pbnRyX2hhbmRsZXIocmluZywgMCk7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlpZiAoZmlsbF9yeF9idWZmZXJzKG5pYywgJm1hY19jb250cm9sLT5yaW5nc1tpXSwgMCkgPT0KLQkJCQktRU5PTUVNKSB7Ci0JCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwgZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChJTkZPX0RCRywgIiBpbiBSeCBOZXRwb2xsISFcbiIpOworCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQlpZiAoZmlsbF9yeF9idWZmZXJzKG5pYywgcmluZywgMCkgPT0gLUVOT01FTSkgeworCQkJREJHX1BSSU5UKElORk9fREJHLAorCQkJCSAgIiVzOiBPdXQgb2YgbWVtb3J5IGluIFJ4IE5ldHBvbGwhIVxuIiwKKwkJCQkgIGRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTI5NzMsOCArMjk2Nyw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgcGt0X2NudCA9IDAsIG5hcGlfcGt0cyA9IDA7CiAJaW50IGk7Ci0Jc3RydWN0IFJ4RDEqIHJ4ZHAxOwotCXN0cnVjdCBSeEQzKiByeGRwMzsKKwlzdHJ1Y3QgUnhEMSAqcnhkcDE7CisJc3RydWN0IFJ4RDMgKnJ4ZHAzOwogCiAJZ2V0X2luZm8gPSByaW5nX2RhdGEtPnJ4X2N1cnJfZ2V0X2luZm87CiAJZ2V0X2Jsb2NrID0gZ2V0X2luZm8uYmxvY2tfaW5kZXg7CkBAIC0yOTkwLDQxICsyOTg0LDQxIEBACiAJCWlmICgoZ2V0X2Jsb2NrID09IHB1dF9ibG9jaykgJiYKIAkJICAgIChnZXRfaW5mby5vZmZzZXQgKyAxKSA9PSBwdXRfaW5mby5vZmZzZXQpIHsKIAkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBSaW5nIEZ1bGxcbiIsCi0JCQkJcmluZ19kYXRhLT5kZXYtPm5hbWUpOworCQkJCSAgcmluZ19kYXRhLT5kZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KLQkJc2tiID0gKHN0cnVjdCBza19idWZmICopICgodW5zaWduZWQgbG9uZylyeGRwLT5Ib3N0X0NvbnRyb2wpOworCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikoKHVuc2lnbmVkIGxvbmcpcnhkcC0+SG9zdF9Db250cm9sKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBUaGUgc2tiIGlzICIsCisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBOVUxMIHNrYiBpbiBSeCBJbnRyXG4iLAogCQkJCSAgcmluZ19kYXRhLT5kZXYtPm5hbWUpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJOdWxsIGluIFJ4IEludHJcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJaWYgKHJpbmdfZGF0YS0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkgewotCQkJcnhkcDEgPSAoc3RydWN0IFJ4RDEqKXJ4ZHA7CisJCQlyeGRwMSA9IChzdHJ1Y3QgUnhEMSAqKXJ4ZHA7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKHJpbmdfZGF0YS0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJcnhkcDEtPkJ1ZmZlcjBfcHRyLAotCQkJCXJpbmdfZGF0YS0+bXR1ICsKLQkJCQlIRUFERVJfRVRIRVJORVRfSUlfODAyXzNfU0laRSArCi0JCQkJSEVBREVSXzgwMl8yX1NJWkUgKwotCQkJCUhFQURFUl9TTkFQX1NJWkUsCi0JCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJIHJ4ZHAxLT5CdWZmZXIwX3B0ciwKKwkJCQkJIHJpbmdfZGF0YS0+bXR1ICsKKwkJCQkJIEhFQURFUl9FVEhFUk5FVF9JSV84MDJfM19TSVpFICsKKwkJCQkJIEhFQURFUl84MDJfMl9TSVpFICsKKwkJCQkJIEhFQURFUl9TTkFQX1NJWkUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9IGVsc2UgaWYgKHJpbmdfZGF0YS0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKLQkJCXJ4ZHAzID0gKHN0cnVjdCBSeEQzKilyeGRwOwotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHJpbmdfZGF0YS0+cGRldiwgKGRtYV9hZGRyX3QpCi0JCQkJcnhkcDMtPkJ1ZmZlcjBfcHRyLAotCQkJCUJVRjBfTEVOLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJcGNpX3VubWFwX3NpbmdsZShyaW5nX2RhdGEtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCXJ4ZHAzLT5CdWZmZXIyX3B0ciwKLQkJCQlyaW5nX2RhdGEtPm10dSArIDQsCi0JCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXJ4ZHAzID0gKHN0cnVjdCBSeEQzICopcnhkcDsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShyaW5nX2RhdGEtPnBkZXYsCisJCQkJCQkgICAgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjBfcHRyLAorCQkJCQkJICAgIEJVRjBfTEVOLAorCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHJpbmdfZGF0YS0+cGRldiwKKwkJCQkJIChkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIyX3B0ciwKKwkJCQkJIHJpbmdfZGF0YS0+bXR1ICsgNCwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAkJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAkJcnhfb3NtX2hhbmRsZXIocmluZ19kYXRhLCByeGRwKTsKIAkJZ2V0X2luZm8ub2Zmc2V0Kys7CiAJCXJpbmdfZGF0YS0+cnhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPSBnZXRfaW5mby5vZmZzZXQ7CiAJCXJ4ZHAgPSByaW5nX2RhdGEtPnJ4X2Jsb2Nrc1tnZXRfYmxvY2tdLgotCQkJCXJ4ZHNbZ2V0X2luZm8ub2Zmc2V0XS52aXJ0X2FkZHI7CisJCQlyeGRzW2dldF9pbmZvLm9mZnNldF0udmlydF9hZGRyOwogCQlpZiAoZ2V0X2luZm8ub2Zmc2V0ID09IHJ4ZF9jb3VudFtyaW5nX2RhdGEtPnJ4ZF9tb2RlXSkgewogCQkJZ2V0X2luZm8ub2Zmc2V0ID0gMDsKIAkJCXJpbmdfZGF0YS0+cnhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPSBnZXRfaW5mby5vZmZzZXQ7CkBAIC0zMDQ3LDcgKzMwNDEsNyBAQAogCX0KIAlpZiAocmluZ19kYXRhLT5scm8pIHsKIAkJLyogQ2xlYXIgYWxsIExSTyBzZXNzaW9ucyBiZWZvcmUgZXhpdGluZyAqLwotCQlmb3IgKGk9MDsgaTxNQVhfTFJPX1NFU1NJT05TOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9MUk9fU0VTU0lPTlM7IGkrKykgewogCQkJc3RydWN0IGxybyAqbHJvID0gJnJpbmdfZGF0YS0+bHJvMF9uW2ldOwogCQkJaWYgKGxyby0+aW5fdXNlKSB7CiAJCQkJdXBkYXRlX0wzTDRfaGVhZGVyKHJpbmdfZGF0YS0+bmljLCBscm8pOwpAQCAtMzA1Niw3ICszMDUwLDcgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4obmFwaV9wa3RzKTsKKwlyZXR1cm4gbmFwaV9wa3RzOwogfQogCiAvKioKQEAgLTMwODAsMTQgKzMwNzQsMTYgQEAKIAlpbnQgcGt0X2NudCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJdTggZXJyX21hc2s7CisJc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRzID0gbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3RhdHMtPnN3X3N0YXQ7CiAKIAlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZmaWZvX2RhdGEtPnR4X2xvY2ssIGZsYWdzKSkKLQkJCXJldHVybjsKKwkJcmV0dXJuOwogCiAJZ2V0X2luZm8gPSBmaWZvX2RhdGEtPnR4X2N1cnJfZ2V0X2luZm87CiAJbWVtY3B5KCZwdXRfaW5mbywgJmZpZm9fZGF0YS0+dHhfY3Vycl9wdXRfaW5mbywgc2l6ZW9mKHB1dF9pbmZvKSk7Ci0JdHhkbHAgPSAoc3RydWN0IFR4RCAqKSBmaWZvX2RhdGEtPmxpc3RfaW5mb1tnZXRfaW5mby5vZmZzZXRdLgotCSAgICBsaXN0X3ZpcnRfYWRkcjsKKwl0eGRscCA9IChzdHJ1Y3QgVHhEICopCisJCWZpZm9fZGF0YS0+bGlzdF9pbmZvW2dldF9pbmZvLm9mZnNldF0ubGlzdF92aXJ0X2FkZHI7CiAJd2hpbGUgKCghKHR4ZGxwLT5Db250cm9sXzEgJiBUWERfTElTVF9PV05fWEVOQSkpICYmCiAJICAgICAgIChnZXRfaW5mby5vZmZzZXQgIT0gcHV0X2luZm8ub2Zmc2V0KSAmJgogCSAgICAgICAodHhkbHAtPkhvc3RfQ29udHJvbCkpIHsKQEAgLTMwOTYsNjIgKzMwOTIsNTQgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbG9uZyBlcnI7CiAJCQllcnIgPSB0eGRscC0+Q29udHJvbF8xICYgVFhEX1RfQ09ERTsKIAkJCWlmIChlcnIgJiAweDEpIHsKLQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJCQlwYXJpdHlfZXJyX2NudCsrOworCQkJCXN3c3RhdHMtPnBhcml0eV9lcnJfY250Kys7CiAJCQl9CiAKIAkJCS8qIHVwZGF0ZSB0X2NvZGUgc3RhdGlzdGljcyAqLwogCQkJZXJyX21hc2sgPSBlcnIgPj4gNDg7Ci0JCQlzd2l0Y2goZXJyX21hc2spIHsKLQkJCQljYXNlIDI6Ci0JCQkJCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQkJCQl0eF9idWZfYWJvcnRfY250Kys7CisJCQlzd2l0Y2ggKGVycl9tYXNrKSB7CisJCQljYXNlIDI6CisJCQkJc3dzdGF0cy0+dHhfYnVmX2Fib3J0X2NudCsrOwogCQkJCWJyZWFrOwogCi0JCQkJY2FzZSAzOgotCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJCQkJdHhfZGVzY19hYm9ydF9jbnQrKzsKKwkJCWNhc2UgMzoKKwkJCQlzd3N0YXRzLT50eF9kZXNjX2Fib3J0X2NudCsrOwogCQkJCWJyZWFrOwogCi0JCQkJY2FzZSA3OgotCQkJCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJCQkJdHhfcGFyaXR5X2Vycl9jbnQrKzsKKwkJCWNhc2UgNzoKKwkJCQlzd3N0YXRzLT50eF9wYXJpdHlfZXJyX2NudCsrOwogCQkJCWJyZWFrOwogCi0JCQkJY2FzZSAxMDoKLQkJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCQkJCXR4X2xpbmtfbG9zc19jbnQrKzsKKwkJCWNhc2UgMTA6CisJCQkJc3dzdGF0cy0+dHhfbGlua19sb3NzX2NudCsrOwogCQkJCWJyZWFrOwogCi0JCQkJY2FzZSAxNToKLQkJCQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCQkJCXR4X2xpc3RfcHJvY19lcnJfY250Kys7CisJCQljYXNlIDE1OgorCQkJCXN3c3RhdHMtPnR4X2xpc3RfcHJvY19lcnJfY250Kys7CiAJCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCQl9CiAJCX0KIAogCQlza2IgPSBzMmlvX3R4ZGxfZ2V0c2tiKGZpZm9fZGF0YSwgdHhkbHAsIGdldF9pbmZvLm9mZnNldCk7CiAJCWlmIChza2IgPT0gTlVMTCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmb19kYXRhLT50eF9sb2NrLCBmbGFncyk7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBOdWxsIHNrYiAiLAotCQkJX19mdW5jX18pOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJpbiBUeCBGcmVlIEludHJcbiIpOworCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTlVMTCBza2IgaW4gVHggRnJlZSBJbnRyXG4iLAorCQkJCSAgX19mdW5jX18pOwogCQkJcmV0dXJuOwogCQl9CiAJCXBrdF9jbnQrKzsKIAogCQkvKiBVcGRhdGluZyB0aGUgc3RhdGlzdGljcyBibG9jayAqLwogCQluaWMtPmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKKwkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CiAJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAKIAkJZ2V0X2luZm8ub2Zmc2V0Kys7CiAJCWlmIChnZXRfaW5mby5vZmZzZXQgPT0gZ2V0X2luZm8uZmlmb19sZW4gKyAxKQogCQkJZ2V0X2luZm8ub2Zmc2V0ID0gMDsKLQkJdHhkbHAgPSAoc3RydWN0IFR4RCAqKSBmaWZvX2RhdGEtPmxpc3RfaW5mbwotCQkgICAgW2dldF9pbmZvLm9mZnNldF0ubGlzdF92aXJ0X2FkZHI7Ci0JCWZpZm9fZGF0YS0+dHhfY3Vycl9nZXRfaW5mby5vZmZzZXQgPQotCQkgICAgZ2V0X2luZm8ub2Zmc2V0OworCQl0eGRscCA9IChzdHJ1Y3QgVHhEICopCisJCQlmaWZvX2RhdGEtPmxpc3RfaW5mb1tnZXRfaW5mby5vZmZzZXRdLmxpc3RfdmlydF9hZGRyOworCQlmaWZvX2RhdGEtPnR4X2N1cnJfZ2V0X2luZm8ub2Zmc2V0ID0gZ2V0X2luZm8ub2Zmc2V0OwogCX0KIAogCXMyaW9fd2FrZV90eF9xdWV1ZShmaWZvX2RhdGEsIHBrdF9jbnQsIG5pYy0+Y29uZmlnLm11bHRpcSk7CkBAIC0zMTY5LDQzICszMTU3LDQxIEBACiAgKiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHdyaXRlIHZhbHVlcyB0byB0aGUgTURJTyByZWdpc3RlcnMKICAqICBOT05FCiAgKi8KLXN0YXRpYyB2b2lkIHMyaW9fbWRpb193cml0ZSh1MzIgbW1kX3R5cGUsIHU2NCBhZGRyLCB1MTYgdmFsdWUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzMmlvX21kaW9fd3JpdGUodTMyIG1tZF90eXBlLCB1NjQgYWRkciwgdTE2IHZhbHVlLAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JdTY0IHZhbDY0ID0gMHgwOworCXU2NCB2YWw2NDsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAotCS8vYWRkcmVzcyB0cmFuc2FjdGlvbgotCXZhbDY0ID0gdmFsNjQgfCBNRElPX01NRF9JTkRYX0FERFIoYWRkcikKLQkJCXwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCi0JCQl8IE1ESU9fTU1TX1BSVF9BRERSKDB4MCk7CisJLyogYWRkcmVzcyB0cmFuc2FjdGlvbiAqLworCXZhbDY0ID0gTURJT19NTURfSU5EWF9BRERSKGFkZHIpIHwKKwkJTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpIHwKKwkJTURJT19NTVNfUFJUX0FERFIoMHgwKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXVkZWxheSgxMDApOwogCi0JLy9EYXRhIHRyYW5zYWN0aW9uCi0JdmFsNjQgPSAweDA7Ci0JdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQotCQkJfCBNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkKLQkJCXwgTURJT19NTVNfUFJUX0FERFIoMHgwKQotCQkJfCBNRElPX01ESU9fREFUQSh2YWx1ZSkKLQkJCXwgTURJT19PUChNRElPX09QX1dSSVRFX1RSQU5TKTsKKwkvKiBEYXRhIHRyYW5zYWN0aW9uICovCisJdmFsNjQgPSBNRElPX01NRF9JTkRYX0FERFIoYWRkcikgfAorCQlNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkgfAorCQlNRElPX01NU19QUlRfQUREUigweDApIHwKKwkJTURJT19NRElPX0RBVEEodmFsdWUpIHwKKwkJTURJT19PUChNRElPX09QX1dSSVRFX1RSQU5TKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXVkZWxheSgxMDApOwogCi0JdmFsNjQgPSAweDA7Ci0JdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQotCXwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCi0JfCBNRElPX01NU19QUlRfQUREUigweDApCi0JfCBNRElPX09QKE1ESU9fT1BfUkVBRF9UUkFOUyk7CisJdmFsNjQgPSBNRElPX01NRF9JTkRYX0FERFIoYWRkcikgfAorCQlNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkgfAorCQlNRElPX01NU19QUlRfQUREUigweDApIHwKKwkJTURJT19PUChNRElPX09QX1JFQURfVFJBTlMpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CiAJdmFsNjQgPSB2YWw2NCB8IE1ESU9fQ1RSTF9TVEFSVF9UUkFOUygweEUpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1kaW9fY29udHJvbCk7CiAJdWRlbGF5KDEwMCk7Ci0KIH0KIAogLyoqCkBAIC0zMjI1LDIwICszMjExLDE5IEBACiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAKIAkvKiBhZGRyZXNzIHRyYW5zYWN0aW9uICovCi0JdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQotCQkJfCBNRElPX01NRF9ERVZfQUREUihtbWRfdHlwZSkKLQkJCXwgTURJT19NTVNfUFJUX0FERFIoMHgwKTsKKwl2YWw2NCA9IHZhbDY0IHwgKE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQorCQkJIHwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCisJCQkgfCBNRElPX01NU19QUlRfQUREUigweDApKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXVkZWxheSgxMDApOwogCiAJLyogRGF0YSB0cmFuc2FjdGlvbiAqLwotCXZhbDY0ID0gMHgwOwotCXZhbDY0ID0gdmFsNjQgfCBNRElPX01NRF9JTkRYX0FERFIoYWRkcikKLQkJCXwgTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpCi0JCQl8IE1ESU9fTU1TX1BSVF9BRERSKDB4MCkKLQkJCXwgTURJT19PUChNRElPX09QX1JFQURfVFJBTlMpOworCXZhbDY0ID0gTURJT19NTURfSU5EWF9BRERSKGFkZHIpIHwKKwkJTURJT19NTURfREVWX0FERFIobW1kX3R5cGUpIHwKKwkJTURJT19NTVNfUFJUX0FERFIoMHgwKSB8CisJCU1ESU9fT1AoTURJT19PUF9SRUFEX1RSQU5TKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwogCXZhbDY0ID0gdmFsNjQgfCBNRElPX0NUUkxfU1RBUlRfVFJBTlMoMHhFKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5tZGlvX2NvbnRyb2wpOwpAQCAtMzI1MCw2ICszMjM1LDcgQEAKIAlydmFsNjQgPSBydmFsNjQgPj4gMTY7CiAJcmV0dXJuIHJ2YWw2NDsKIH0KKwogLyoqCiAgKiAgczJpb19jaGtfeHBha19jb3VudGVyIC0gRnVuY3Rpb24gdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgeHBhayBjb3VudGVycwogICogIEBjb3VudGVyICAgICAgOiBjb3V0ZXIgdmFsdWUgdG8gYmUgdXBkYXRlZApAQCAtMzI2MCw0NSArMzI0Niw0MyBAQAogICogIE5PTkUKICAqLwogCi1zdGF0aWMgdm9pZCBzMmlvX2Noa194cGFrX2NvdW50ZXIodTY0ICpjb3VudGVyLCB1NjQgKiByZWdzX3N0YXQsIHUzMiBpbmRleCwgdTE2IGZsYWcsIHUxNiB0eXBlKQorc3RhdGljIHZvaWQgczJpb19jaGtfeHBha19jb3VudGVyKHU2NCAqY291bnRlciwgdTY0ICogcmVnc19zdGF0LCB1MzIgaW5kZXgsCisJCQkJICB1MTYgZmxhZywgdTE2IHR5cGUpCiB7CiAJdTY0IG1hc2sgPSAweDM7CiAJdTY0IHZhbDY0OwogCWludCBpOwotCWZvcihpID0gMDsgaSA8aW5kZXg7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXg7IGkrKykKIAkJbWFzayA9IG1hc2sgPDwgMHgyOwogCi0JaWYoZmxhZyA+IDApCi0JeworCWlmIChmbGFnID4gMCkgewogCQkqY291bnRlciA9ICpjb3VudGVyICsgMTsKIAkJdmFsNjQgPSAqcmVnc19zdGF0ICYgbWFzazsKIAkJdmFsNjQgPSB2YWw2NCA+PiAoaW5kZXggKiAweDIpOwogCQl2YWw2NCA9IHZhbDY0ICsgMTsKLQkJaWYodmFsNjQgPT0gMykKLQkJewotCQkJc3dpdGNoKHR5cGUpCi0JCQl7CisJCWlmICh2YWw2NCA9PSAzKSB7CisJCQlzd2l0Y2ggKHR5cGUpIHsKIAkJCWNhc2UgMToKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIlRha2UgWGZyYW1lIE5JQyBvdXQgb2YgIgotCQkJCQkgICJzZXJ2aWNlLiBFeGNlc3NpdmUgdGVtcGVyYXR1cmVzIG1heSAiCi0JCQkJCSAgInJlc3VsdCBpbiBwcmVtYXR1cmUgdHJhbnNjZWl2ZXIgIgotCQkJCQkgICJmYWlsdXJlIFxuIik7Ci0JCQlicmVhazsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkJICAiVGFrZSBYZnJhbWUgTklDIG91dCBvZiBzZXJ2aWNlLlxuIik7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisiRXhjZXNzaXZlIHRlbXBlcmF0dXJlcyBtYXkgcmVzdWx0IGluIHByZW1hdHVyZSB0cmFuc2NlaXZlciBmYWlsdXJlLlxuIik7CisJCQkJYnJlYWs7CiAJCQljYXNlIDI6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICJUYWtlIFhmcmFtZSBOSUMgb3V0IG9mICIKLQkJCQkJICAic2VydmljZSBFeGNlc3NpdmUgYmlhcyBjdXJyZW50cyBtYXkgIgotCQkJCQkgICJpbmRpY2F0ZSBpbW1pbmVudCBsYXNlciBkaW9kZSAiCi0JCQkJCSAgImZhaWx1cmUgXG4iKTsKLQkJCWJyZWFrOworCQkJCURCR19QUklOVChFUlJfREJHLAorCQkJCQkgICJUYWtlIFhmcmFtZSBOSUMgb3V0IG9mIHNlcnZpY2UuXG4iKTsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKyJFeGNlc3NpdmUgYmlhcyBjdXJyZW50cyBtYXkgaW5kaWNhdGUgaW1taW5lbnQgbGFzZXIgZGlvZGUgZmFpbHVyZS5cbiIpOworCQkJCWJyZWFrOwogCQkJY2FzZSAzOgotCQkJCURCR19QUklOVChFUlJfREJHLCAiVGFrZSBYZnJhbWUgTklDIG91dCBvZiAiCi0JCQkJCSAgInNlcnZpY2UgRXhjZXNzaXZlIGxhc2VyIG91dHB1dCAiCi0JCQkJCSAgInBvd2VyIG1heSBzYXR1cmF0ZSBmYXItZW5kICIKLQkJCQkJICAicmVjZWl2ZXJcbiIpOwotCQkJYnJlYWs7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJCSAgIlRha2UgWGZyYW1lIE5JQyBvdXQgb2Ygc2VydmljZS5cbiIpOworCQkJCURCR19QUklOVChFUlJfREJHLAorIkV4Y2Vzc2l2ZSBsYXNlciBvdXRwdXQgcG93ZXIgbWF5IHNhdHVyYXRlIGZhci1lbmQgcmVjZWl2ZXIuXG4iKTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICJJbmNvcnJlY3QgWFBBSyBBbGFybSAiCi0JCQkJCSAgInR5cGUgXG4iKTsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkJICAiSW5jb3JyZWN0IFhQQUsgQWxhcm0gdHlwZVxuIik7CiAJCQl9CiAJCQl2YWw2NCA9IDB4MDsKIAkJfQpAQCAtMzMyNiwyNCArMzMxMCwyNCBAQAogCXU2NCBhZGRyICA9IDB4MDsKIAogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0X2luZm8gPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHMgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbzsKKwlzdHJ1Y3QgeHBha1N0YXQgKnhzdGF0cyA9ICZzdGF0cy0+eHBha19zdGF0OwogCiAJLyogQ2hlY2sgdGhlIGNvbW11bmljYXRpb24gd2l0aCB0aGUgTURJTyBzbGF2ZSAqLwogCWFkZHIgPSBNRElPX0NUUkwxOwogCXZhbDY0ID0gMHgwOwogCXZhbDY0ID0gczJpb19tZGlvX3JlYWQoTURJT19NTURfUE1BUE1ELCBhZGRyLCBkZXYpOwotCWlmKCh2YWw2NCA9PSAweEZGRkYpIHx8ICh2YWw2NCA9PSAweDAwMDApKQotCXsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJFUlI6IE1ESU8gc2xhdmUgYWNjZXNzIGZhaWxlZCAtICIKLQkJCSAgIlJldHVybmVkICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsNjQpOworCWlmICgodmFsNjQgPT0gMHhGRkZGKSB8fCAodmFsNjQgPT0gMHgwMDAwKSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCSAgIkVSUjogTURJTyBzbGF2ZSBhY2Nlc3MgZmFpbGVkIC0gUmV0dXJuZWQgJWxseFxuIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIHZhbHVlIG9mIGNvbnRyb2wgcmVnIDEgKi8KLQlpZih2YWw2NCAhPSBNRElPX0NUUkwxX1NQRUVEMTBHKQotCXsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJJbmNvcnJlY3QgdmFsdWUgYXQgUE1BIGFkZHJlc3MgMHgwMDAwIC0gIik7Ci0JCURCR19QUklOVChFUlJfREJHLCAiUmV0dXJuZWQ6ICVsbHgtIEV4cGVjdGVkOiAweCV4XG4iLAorCWlmICh2YWw2NCAhPSBNRElPX0NUUkwxX1NQRUVEMTBHKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiSW5jb3JyZWN0IHZhbHVlIGF0IFBNQSBhZGRyZXNzIDB4MDAwMCAtICIKKwkJCSAgIlJldHVybmVkOiAlbGx4LSBFeHBlY3RlZDogMHgleFxuIiwKIAkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWw2NCwgTURJT19DVFJMMV9TUEVFRDEwRyk7CiAJCXJldHVybjsKIAl9CkBAIC0zMzYwLDUzICszMzQ0LDUzIEBACiAKIAlmbGFnID0gQ0hFQ0tCSVQodmFsNjQsIDB4Nyk7CiAJdHlwZSA9IDE7Ci0JczJpb19jaGtfeHBha19jb3VudGVyKCZzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2gsCi0JCQkJJnN0YXRfaW5mby0+eHBha19zdGF0LnhwYWtfcmVnc19zdGF0LAotCQkJCTB4MCwgZmxhZywgdHlwZSk7CisJczJpb19jaGtfeHBha19jb3VudGVyKCZ4c3RhdHMtPmFsYXJtX3RyYW5zY2VpdmVyX3RlbXBfaGlnaCwKKwkJCSAgICAgICZ4c3RhdHMtPnhwYWtfcmVnc19zdGF0LAorCQkJICAgICAgMHgwLCBmbGFnLCB0eXBlKTsKIAotCWlmKENIRUNLQklUKHZhbDY0LCAweDYpKQotCQlzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdysrOworCWlmIChDSEVDS0JJVCh2YWw2NCwgMHg2KSkKKwkJeHN0YXRzLT5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2xvdysrOwogCiAJZmxhZyA9IENIRUNLQklUKHZhbDY0LCAweDMpOwogCXR5cGUgPSAyOwotCXMyaW9fY2hrX3hwYWtfY291bnRlcigmc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2gsCi0JCQkJJnN0YXRfaW5mby0+eHBha19zdGF0LnhwYWtfcmVnc19zdGF0LAotCQkJCTB4MiwgZmxhZywgdHlwZSk7CisJczJpb19jaGtfeHBha19jb3VudGVyKCZ4c3RhdHMtPmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoLAorCQkJICAgICAgJnhzdGF0cy0+eHBha19yZWdzX3N0YXQsCisJCQkgICAgICAweDIsIGZsYWcsIHR5cGUpOwogCi0JaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MikpCi0JCXN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX2JpYXNfY3VycmVudF9sb3crKzsKKwlpZiAoQ0hFQ0tCSVQodmFsNjQsIDB4MikpCisJCXhzdGF0cy0+YWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2xvdysrOwogCiAJZmxhZyA9IENIRUNLQklUKHZhbDY0LCAweDEpOwogCXR5cGUgPSAzOwotCXMyaW9fY2hrX3hwYWtfY291bnRlcigmc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2gsCi0JCQkJJnN0YXRfaW5mby0+eHBha19zdGF0LnhwYWtfcmVnc19zdGF0LAotCQkJCTB4NCwgZmxhZywgdHlwZSk7CisJczJpb19jaGtfeHBha19jb3VudGVyKCZ4c3RhdHMtPmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoLAorCQkJICAgICAgJnhzdGF0cy0+eHBha19yZWdzX3N0YXQsCisJCQkgICAgICAweDQsIGZsYWcsIHR5cGUpOwogCi0JaWYoQ0hFQ0tCSVQodmFsNjQsIDB4MCkpCi0JCXN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9sb3crKzsKKwlpZiAoQ0hFQ0tCSVQodmFsNjQsIDB4MCkpCisJCXhzdGF0cy0+YWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdysrOwogCiAJLyogUmVhZGluZyB0aGUgV2FybmluZyBmbGFncyAqLwogCWFkZHIgPSAweEEwNzQ7CiAJdmFsNjQgPSAweDA7CiAJdmFsNjQgPSBzMmlvX21kaW9fcmVhZChNRElPX01NRF9QTUFQTUQsIGFkZHIsIGRldik7CiAKLQlpZihDSEVDS0JJVCh2YWw2NCwgMHg3KSkKLQkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl90cmFuc2NlaXZlcl90ZW1wX2hpZ2grKzsKKwlpZiAoQ0hFQ0tCSVQodmFsNjQsIDB4NykpCisJCXhzdGF0cy0+d2Fybl90cmFuc2NlaXZlcl90ZW1wX2hpZ2grKzsKIAotCWlmKENIRUNLQklUKHZhbDY0LCAweDYpKQotCQlzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX3RyYW5zY2VpdmVyX3RlbXBfbG93Kys7CisJaWYgKENIRUNLQklUKHZhbDY0LCAweDYpKQorCQl4c3RhdHMtPndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9sb3crKzsKIAotCWlmKENIRUNLQklUKHZhbDY0LCAweDMpKQotCQlzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoKys7CisJaWYgKENIRUNLQklUKHZhbDY0LCAweDMpKQorCQl4c3RhdHMtPndhcm5fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2grKzsKIAotCWlmKENIRUNLQklUKHZhbDY0LCAweDIpKQotCQlzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9sb3crKzsKKwlpZiAoQ0hFQ0tCSVQodmFsNjQsIDB4MikpCisJCXhzdGF0cy0+d2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfbG93Kys7CiAKLQlpZihDSEVDS0JJVCh2YWw2NCwgMHgxKSkKLQkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9vdXRwdXRfcG93ZXJfaGlnaCsrOworCWlmIChDSEVDS0JJVCh2YWw2NCwgMHgxKSkKKwkJeHN0YXRzLT53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9oaWdoKys7CiAKLQlpZihDSEVDS0JJVCh2YWw2NCwgMHgwKSkKLQkJc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9vdXRwdXRfcG93ZXJfbG93Kys7CisJaWYgKENIRUNLQklUKHZhbDY0LCAweDApKQorCQl4c3RhdHMtPndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdysrOwogfQogCiAvKioKQEAgLTM0MjEsNyArMzQwNSw3IEBACiAgKi8KIAogc3RhdGljIGludCB3YWl0X2Zvcl9jbWRfY29tcGxldGUodm9pZCBfX2lvbWVtICphZGRyLCB1NjQgYnVzeV9iaXQsCi0JCQkJaW50IGJpdF9zdGF0ZSkKKwkJCQkgaW50IGJpdF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gRkFJTFVSRSwgY250ID0gMCwgZGVsYXkgPSAxOwogCXU2NCB2YWw2NDsKQEAgLTM0NDMsNyArMzQyNyw3IEBACiAJCQl9CiAJCX0KIAotCQlpZihpbl9pbnRlcnJ1cHQoKSkKKwkJaWYgKGluX2ludGVycnVwdCgpKQogCQkJbWRlbGF5KGRlbGF5KTsKIAkJZWxzZQogCQkJbXNsZWVwKGRlbGF5KTsKQEAgLTM0ODMsNyArMzQ2Nyw3IEBACiAgKiAgdm9pZC4KICAqLwogCi1zdGF0aWMgdm9pZCBzMmlvX3Jlc2V0KHN0cnVjdCBzMmlvX25pYyAqIHNwKQorc3RhdGljIHZvaWQgczJpb19yZXNldChzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCXU2NCB2YWw2NDsKQEAgLTM0OTIsMTggKzM0NzYsMTkgQEAKIAl1MTYgdmFsMTY7CiAJdW5zaWduZWQgbG9uZyBsb25nIHVwX2NudCwgZG93bl9jbnQsIHVwX3RpbWUsIGRvd25fdGltZSwgcmVzZXRfY250OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBtZW1fYWxsb2NfY250LCBtZW1fZnJlZV9jbnQsIHdhdGNoZG9nX2NudDsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHM7CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0czsKIAotCURCR19QUklOVChJTklUX0RCRywiJXMgLSBSZXNldHRpbmcgWEZyYW1lIGNhcmQgJXNcbiIsCi0JCQlfX2Z1bmNfXywgc3AtPmRldi0+bmFtZSk7CisJREJHX1BSSU5UKElOSVRfREJHLCAiJXM6IFJlc2V0dGluZyBYRnJhbWUgY2FyZCAlc1xuIiwKKwkJICBfX2Z1bmNfXywgc3AtPmRldi0+bmFtZSk7CiAKIAkvKiBCYWNrIHVwICB0aGUgUENJLVggQ01EIHJlZywgZG9udCB3YW50IHRvIGxvc2UgTU1SQkMsIE9TVCBzZXR0aW5ncyAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHNwLT5wZGV2LCBQQ0lYX0NPTU1BTkRfUkVHSVNURVIsICYocGNpX2NtZCkpOwogCiAJdmFsNjQgPSBTV19SRVNFVF9BTEw7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+c3dfcmVzZXQpOwotCWlmIChzdHJzdHIoc3AtPnByb2R1Y3RfbmFtZSwgIkNYNCIpKSB7CisJaWYgKHN0cnN0cihzcC0+cHJvZHVjdF9uYW1lLCAiQ1g0IikpCiAJCW1zbGVlcCg3NTApOwotCX0KIAltc2xlZXAoMjUwKTsKIAlmb3IgKGkgPSAwOyBpIDwgUzJJT19NQVhfUENJX0NPTkZJR19TUEFDRV9SRUlOSVQ7IGkrKykgewogCkBAIC0zNTE1LDkgKzM1MDAsOCBAQAogCQltc2xlZXAoMjAwKTsKIAl9CiAKLQlpZiAoY2hlY2tfcGNpX2RldmljZV9pZCh2YWwxNikgPT0gKHUxNilQQ0lfQU5ZX0lEKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCIlcyBTV19SZXNldCBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7Ci0JfQorCWlmIChjaGVja19wY2lfZGV2aWNlX2lkKHZhbDE2KSA9PSAodTE2KVBDSV9BTllfSUQpCisJCURCR19QUklOVChFUlJfREJHLCAiJXMgU1dfUmVzZXQgZmFpbGVkIVxuIiwgX19mdW5jX18pOwogCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHNwLT5wZGV2LCBQQ0lYX0NPTU1BTkRfUkVHSVNURVIsIHBjaV9jbWQpOwogCkBAIC0zNTQ1LDI3ICszNTI5LDMyIEBACiAJfQogCiAJLyogUmVzZXQgZGV2aWNlIHN0YXRpc3RpY3MgbWFpbnRhaW5lZCBieSBPUyAqLwotCW1lbXNldCgmc3AtPnN0YXRzLCAwLCBzaXplb2YgKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisJbWVtc2V0KCZzcC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwogCi0JdXBfY250ID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua191cF9jbnQ7Ci0JZG93bl9jbnQgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fY250OwotCXVwX3RpbWUgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX3RpbWU7Ci0JZG93bl90aW1lID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua19kb3duX3RpbWU7Ci0JcmVzZXRfY250ID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuc29mdF9yZXNldF9jbnQ7Ci0JbWVtX2FsbG9jX2NudCA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQ7Ci0JbWVtX2ZyZWVfY250ID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkOwotCXdhdGNoZG9nX2NudCA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LndhdGNoZG9nX3RpbWVyX2NudDsKKwlzdGF0cyA9IHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvOworCXN3c3RhdHMgPSAmc3RhdHMtPnN3X3N0YXQ7CisKIAkvKiBzYXZlIGxpbmsgdXAvZG93biB0aW1lL2NudCwgcmVzZXQvbWVtb3J5L3dhdGNoZG9nIGNudCAqLwotCW1lbXNldChzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0X2Jsb2NrKSk7CisJdXBfY250ID0gc3dzdGF0cy0+bGlua191cF9jbnQ7CisJZG93bl9jbnQgPSBzd3N0YXRzLT5saW5rX2Rvd25fY250OworCXVwX3RpbWUgPSBzd3N0YXRzLT5saW5rX3VwX3RpbWU7CisJZG93bl90aW1lID0gc3dzdGF0cy0+bGlua19kb3duX3RpbWU7CisJcmVzZXRfY250ID0gc3dzdGF0cy0+c29mdF9yZXNldF9jbnQ7CisJbWVtX2FsbG9jX2NudCA9IHN3c3RhdHMtPm1lbV9hbGxvY2F0ZWQ7CisJbWVtX2ZyZWVfY250ID0gc3dzdGF0cy0+bWVtX2ZyZWVkOworCXdhdGNoZG9nX2NudCA9IHN3c3RhdHMtPndhdGNoZG9nX3RpbWVyX2NudDsKKworCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0X2Jsb2NrKSk7CisKIAkvKiByZXN0b3JlIGxpbmsgdXAvZG93biB0aW1lL2NudCwgcmVzZXQvbWVtb3J5L3dhdGNoZG9nIGNudCAqLwotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfdXBfY250ID0gdXBfY250OwotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfZG93bl9jbnQgPSBkb3duX2NudDsKLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX3VwX3RpbWUgPSB1cF90aW1lOwotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfZG93bl90aW1lID0gZG93bl90aW1lOwotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LnNvZnRfcmVzZXRfY250ID0gcmVzZXRfY250OwotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY2F0ZWQgPSBtZW1fYWxsb2NfY250OwotCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCA9IG1lbV9mcmVlX2NudDsKLQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC53YXRjaGRvZ190aW1lcl9jbnQgPSB3YXRjaGRvZ19jbnQ7CisJc3dzdGF0cy0+bGlua191cF9jbnQgPSB1cF9jbnQ7CisJc3dzdGF0cy0+bGlua19kb3duX2NudCA9IGRvd25fY250OworCXN3c3RhdHMtPmxpbmtfdXBfdGltZSA9IHVwX3RpbWU7CisJc3dzdGF0cy0+bGlua19kb3duX3RpbWUgPSBkb3duX3RpbWU7CisJc3dzdGF0cy0+c29mdF9yZXNldF9jbnQgPSByZXNldF9jbnQ7CisJc3dzdGF0cy0+bWVtX2FsbG9jYXRlZCA9IG1lbV9hbGxvY19jbnQ7CisJc3dzdGF0cy0+bWVtX2ZyZWVkID0gbWVtX2ZyZWVfY250OworCXN3c3RhdHMtPndhdGNoZG9nX3RpbWVyX2NudCA9IHdhdGNoZG9nX2NudDsKIAogCS8qIFNYRS0wMDI6IENvbmZpZ3VyZSBsaW5rIGFuZCBhY3Rpdml0eSBMRUQgdG8gdHVybiBpdCBvZmYgKi8KIAlzdWJpZCA9IHNwLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwpAQCAtMzYwMCw3ICszNTg5LDcgQEAKICAqICBTVUNDRVNTIG9uIHN1Y2Nlc3MgYW5kIEZBSUxVUkUgb24gZmFpbHVyZS4KICAqLwogCi1zdGF0aWMgaW50IHMyaW9fc2V0X3N3YXBwZXIoc3RydWN0IHMyaW9fbmljICogc3ApCitzdGF0aWMgaW50IHMyaW9fc2V0X3N3YXBwZXIoc3RydWN0IHMyaW9fbmljICpzcCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKQEAgLTM2MTksNyArMzYwOCw3IEBACiAJCQkJMHg0MjAwMDA0MjQyMDAwMDQyVUxMLCAgLyogRkU9MCwgU0U9MSAqLwogCQkJCTB9OyAgICAgICAgICAgICAgICAgICAgIC8qIEZFPTAsIFNFPTAgKi8KIAotCQl3aGlsZShpPDQpIHsKKwkJd2hpbGUgKGkgPCA0KSB7CiAJCQl3cml0ZXEodmFsdWVbaV0sICZiYXIwLT5zd2FwcGVyX2N0cmwpOwogCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+cGlmX3JkX3N3YXBwZXJfZmIpOwogCQkJaWYgKHZhbDY0ID09IDB4MDEyMzQ1Njc4OUFCQ0RFRlVMTCkKQEAgLTM2MjcsMTAgKzM2MTYsOSBAQAogCQkJaSsrOwogCQl9CiAJCWlmIChpID09IDQpIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVuZGlhbiBzZXR0aW5ncyBhcmUgd3JvbmcsICIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiZmVlZGJhY2sgcmVhZCAlbGx4XG4iLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbDY0KTsKKwkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVuZGlhbiBzZXR0aW5ncyBhcmUgd3JvbmcsICIKKwkJCQkgICJmZWVkYmFjayByZWFkICVsbHhcbiIsCisJCQkJICBkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsNjQpOwogCQkJcmV0dXJuIEZBSUxVUkU7CiAJCX0KIAkJdmFsciA9IHZhbHVlW2ldOwpAQCAtMzY0Miw0NiArMzYzMCw0NyBAQAogCXdyaXRlcSh2YWx0LCAmYmFyMC0+eG1zaV9hZGRyZXNzKTsKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT54bXNpX2FkZHJlc3MpOwogCi0JaWYodmFsNjQgIT0gdmFsdCkgeworCWlmICh2YWw2NCAhPSB2YWx0KSB7CiAJCWludCBpID0gMDsKIAkJdTY0IHZhbHVlW10gPSB7IDB4MDBDM0MzMDAwMEMzQzMwMFVMTCwgIC8qIEZFPTEsIFNFPTEgKi8KIAkJCQkweDAwODE4MTAwMDA4MTgxMDBVTEwsICAvKiBGRT0xLCBTRT0wICovCiAJCQkJMHgwMDQyNDIwMDAwNDI0MjAwVUxMLCAgLyogRkU9MCwgU0U9MSAqLwogCQkJCTB9OyAgICAgICAgICAgICAgICAgICAgIC8qIEZFPTAsIFNFPTAgKi8KIAotCQl3aGlsZShpPDQpIHsKKwkJd2hpbGUgKGkgPCA0KSB7CiAJCQl3cml0ZXEoKHZhbHVlW2ldIHwgdmFsciksICZiYXIwLT5zd2FwcGVyX2N0cmwpOwogCQkJd3JpdGVxKHZhbHQsICZiYXIwLT54bXNpX2FkZHJlc3MpOwogCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+eG1zaV9hZGRyZXNzKTsKLQkJCWlmKHZhbDY0ID09IHZhbHQpCisJCQlpZiAodmFsNjQgPT0gdmFsdCkKIAkJCQlicmVhazsKIAkJCWkrKzsKIAkJfQotCQlpZihpID09IDQpIHsKKwkJaWYgKGkgPT0gNCkgewogCQkJdW5zaWduZWQgbG9uZyBsb25nIHggPSB2YWw2NDsKLQkJCURCR19QUklOVChFUlJfREJHLCAiV3JpdGUgZmFpbGVkLCBYbXNpX2FkZHIgIik7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgInJlYWRzOjB4JWxseFxuIiwgeCk7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkgICJXcml0ZSBmYWlsZWQsIFhtc2lfYWRkciByZWFkczoweCVsbHhcbiIsIHgpOwogCQkJcmV0dXJuIEZBSUxVUkU7CiAJCX0KIAl9CiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+c3dhcHBlcl9jdHJsKTsKIAl2YWw2NCAmPSAweEZGRkYwMDAwMDAwMDAwMDBVTEw7CiAKLSNpZmRlZiAgX19CSUdfRU5ESUFOCisjaWZkZWYgX19CSUdfRU5ESUFOCiAJLyoKIAkgKiBUaGUgZGV2aWNlIGJ5IGRlZmF1bHQgc2V0IHRvIGEgYmlnIGVuZGlhbiBmb3JtYXQsIHNvIGEKIAkgKiBiaWcgZW5kaWFuIGRyaXZlciBuZWVkIG5vdCBzZXQgYW55dGhpbmcuCiAJICovCiAJdmFsNjQgfD0gKFNXQVBQRVJfQ1RSTF9UWFBfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1RYUF9TRSB8Ci0JCSBTV0FQUEVSX0NUUkxfVFhEX1JfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1RYRF9XX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9UWEZfUl9GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfUlhEX1JfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1JYRF9XX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9SWEZfV19GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfWE1TSV9GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfU1RBVFNfRkUgfCBTV0FQUEVSX0NUUkxfU1RBVFNfU0UpOworCQkgIFNXQVBQRVJfQ1RSTF9UWFBfU0UgfAorCQkgIFNXQVBQRVJfQ1RSTF9UWERfUl9GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1RYRF9XX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfVFhGX1JfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9SWERfUl9GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1JYRF9XX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfUlhGX1dfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9YTVNJX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfU1RBVFNfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9TVEFUU19TRSk7CiAJaWYgKHNwLT5jb25maWcuaW50cl90eXBlID09IElOVEEpCiAJCXZhbDY0IHw9IFNXQVBQRVJfQ1RSTF9YTVNJX1NFOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnN3YXBwZXJfY3RybCk7CkBAIC0zNjkyLDE5ICszNjgxLDIwIEBACiAJICogd2Ugd2FudCB0byBzZXQuCiAJICovCiAJdmFsNjQgfD0gKFNXQVBQRVJfQ1RSTF9UWFBfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1RYUF9TRSB8Ci0JCSBTV0FQUEVSX0NUUkxfVFhEX1JfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1RYRF9SX1NFIHwKLQkJIFNXQVBQRVJfQ1RSTF9UWERfV19GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfVFhEX1dfU0UgfAotCQkgU1dBUFBFUl9DVFJMX1RYRl9SX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9SWERfUl9GRSB8Ci0JCSBTV0FQUEVSX0NUUkxfUlhEX1JfU0UgfAotCQkgU1dBUFBFUl9DVFJMX1JYRF9XX0ZFIHwKLQkJIFNXQVBQRVJfQ1RSTF9SWERfV19TRSB8Ci0JCSBTV0FQUEVSX0NUUkxfUlhGX1dfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1hNU0lfRkUgfAotCQkgU1dBUFBFUl9DVFJMX1NUQVRTX0ZFIHwgU1dBUFBFUl9DVFJMX1NUQVRTX1NFKTsKKwkJICBTV0FQUEVSX0NUUkxfVFhQX1NFIHwKKwkJICBTV0FQUEVSX0NUUkxfVFhEX1JfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9UWERfUl9TRSB8CisJCSAgU1dBUFBFUl9DVFJMX1RYRF9XX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfVFhEX1dfU0UgfAorCQkgIFNXQVBQRVJfQ1RSTF9UWEZfUl9GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1JYRF9SX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfUlhEX1JfU0UgfAorCQkgIFNXQVBQRVJfQ1RSTF9SWERfV19GRSB8CisJCSAgU1dBUFBFUl9DVFJMX1JYRF9XX1NFIHwKKwkJICBTV0FQUEVSX0NUUkxfUlhGX1dfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9YTVNJX0ZFIHwKKwkJICBTV0FQUEVSX0NUUkxfU1RBVFNfRkUgfAorCQkgIFNXQVBQRVJfQ1RSTF9TVEFUU19TRSk7CiAJaWYgKHNwLT5jb25maWcuaW50cl90eXBlID09IElOVEEpCiAJCXZhbDY0IHw9IFNXQVBQRVJfQ1RSTF9YTVNJX1NFOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnN3YXBwZXJfY3RybCk7CkBAIC0zNzE4LDEwICszNzA4LDkgQEAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5waWZfcmRfc3dhcHBlcl9mYik7CiAJaWYgKHZhbDY0ICE9IDB4MDEyMzQ1Njc4OUFCQ0RFRlVMTCkgewogCQkvKiBFbmRpYW4gc2V0dGluZ3MgYXJlIGluY29ycmVjdCwgY2FsbHMgZm9yIGFub3RoZXIgZGVra28uICovCi0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVuZGlhbiBzZXR0aW5ncyBhcmUgd3JvbmcsICIsCi0JCQkgIGRldi0+bmFtZSk7Ci0JCURCR19QUklOVChFUlJfREJHLCAiZmVlZGJhY2sgcmVhZCAlbGx4XG4iLAotCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWw2NCk7CisJCURCR19QUklOVChFUlJfREJHLAorCQkJICAiJXM6IEVuZGlhbiBzZXR0aW5ncyBhcmUgd3JvbmcsIGZlZWRiYWNrIHJlYWQgJWxseFxuIiwKKwkJCSAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKIAkJcmV0dXJuIEZBSUxVUkU7CiAJfQogCkBAIC0zNzQwLDcgKzM3MjksNyBAQAogCQkJYnJlYWs7CiAJCW1kZWxheSgxKTsKIAkJY250Kys7Ci0JfSB3aGlsZShjbnQgPCA1KTsKKwl9IHdoaWxlIChjbnQgPCA1KTsKIAlpZiAoY250ID09IDUpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICJYTVNJICMgJWQgQWNjZXNzIGZhaWxlZFxuIiwgaSk7CiAJCXJldCA9IDE7CkBAIC0zNzU1LDE4ICszNzQ0LDE4IEBACiAJdTY0IHZhbDY0OwogCWludCBpLCBtc2l4X2luZGV4OwogCi0KIAlpZiAobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSV9ERVZJQ0UpCiAJCXJldHVybjsKIAotCWZvciAoaT0wOyBpIDwgTUFYX1JFUVVFU1RFRF9NU0lfWDsgaSsrKSB7Ci0JCW1zaXhfaW5kZXggPSAoaSkgPyAoKGktMSkgKiA4ICsgMSk6IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9SRVFVRVNURURfTVNJX1g7IGkrKykgeworCQltc2l4X2luZGV4ID0gKGkpID8gKChpLTEpICogOCArIDEpIDogMDsKIAkJd3JpdGVxKG5pYy0+bXNpeF9pbmZvW2ldLmFkZHIsICZiYXIwLT54bXNpX2FkZHJlc3MpOwogCQl3cml0ZXEobmljLT5tc2l4X2luZm9baV0uZGF0YSwgJmJhcjAtPnhtc2lfZGF0YSk7CiAJCXZhbDY0ID0gKHMyQklUKDcpIHwgczJCSVQoMTUpIHwgdkJJVChtc2l4X2luZGV4LCAyNiwgNikpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT54bXNpX2FjY2Vzcyk7CiAJCWlmICh3YWl0X2Zvcl9tc2l4X3RyYW5zKG5pYywgbXNpeF9pbmRleCkpIHsKLQkJCURCR19QUklOVChFUlJfREJHLCAiZmFpbGVkIGluICVzXG4iLCBfX2Z1bmNfXyk7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBpbmRleDogJWQgZmFpbGVkXG4iLAorCQkJCSAgX19mdW5jX18sIG1zaXhfaW5kZXgpOwogCQkJY29udGludWU7CiAJCX0KIAl9CkBAIC0zNzgyLDEyICszNzcxLDEzIEBACiAJCXJldHVybjsKIAogCS8qIFN0b3JlIGFuZCBkaXNwbGF5ICovCi0JZm9yIChpPTA7IGkgPCBNQVhfUkVRVUVTVEVEX01TSV9YOyBpKyspIHsKLQkJbXNpeF9pbmRleCA9IChpKSA/ICgoaS0xKSAqIDggKyAxKTogMDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1JFUVVFU1RFRF9NU0lfWDsgaSsrKSB7CisJCW1zaXhfaW5kZXggPSAoaSkgPyAoKGktMSkgKiA4ICsgMSkgOiAwOwogCQl2YWw2NCA9IChzMkJJVCgxNSkgfCB2QklUKG1zaXhfaW5kZXgsIDI2LCA2KSk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnhtc2lfYWNjZXNzKTsKIAkJaWYgKHdhaXRfZm9yX21zaXhfdHJhbnMobmljLCBtc2l4X2luZGV4KSkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJmYWlsZWQgaW4gJXNcbiIsIF9fZnVuY19fKTsKKwkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGluZGV4OiAlZCBmYWlsZWRcbiIsCisJCQkJICBfX2Z1bmNfXywgbXNpeF9pbmRleCk7CiAJCQljb250aW51ZTsKIAkJfQogCQlhZGRyID0gcmVhZHEoJmJhcjAtPnhtc2lfYWRkcmVzcyk7CkBAIC0zODA1LDM2ICszNzk1LDMyIEBACiAJdTY0IHJ4X21hdDsKIAl1MTYgbXNpX2NvbnRyb2w7IC8qIFRlbXAgdmFyaWFibGUgKi8KIAlpbnQgcmV0LCBpLCBqLCBtc2l4X2luZHggPSAxOworCWludCBzaXplOworCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0cyA9IG5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnN0YXRzLT5zd19zdGF0OwogCi0JbmljLT5lbnRyaWVzID0ga21hbGxvYyhuaWMtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlzaXplID0gbmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSk7CisJbmljLT5lbnRyaWVzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5pYy0+ZW50cmllcykgewotCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iLCBcCi0JCQlfX2Z1bmNfXyk7Ci0JCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKKwkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwKKwkJCSAgX19mdW5jX18pOworCQlzd3N0YXRzLT5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCW5pYy0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkCi0JCSs9IChuaWMtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSk7CisJc3dzdGF0cy0+bWVtX2FsbG9jYXRlZCArPSBzaXplOwogCi0JbWVtc2V0KG5pYy0+ZW50cmllcywgMCwgbmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOwotCi0JbmljLT5zMmlvX2VudHJpZXMgPQotCQlrbWFsbG9jKG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSksCi0JCQkJICAgR0ZQX0tFUk5FTCk7CisJc2l6ZSA9IG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSk7CisJbmljLT5zMmlvX2VudHJpZXMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghbmljLT5zMmlvX2VudHJpZXMpIHsKIAkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwKLQkJCV9fZnVuY19fKTsKLQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY19mYWlsX2NudCsrOworCQkJICBfX2Z1bmNfXyk7CisJCXN3c3RhdHMtPm1lbV9hbGxvY19mYWlsX2NudCsrOwogCQlrZnJlZShuaWMtPmVudHJpZXMpOwotCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkCisJCXN3c3RhdHMtPm1lbV9mcmVlZAogCQkJKz0gKG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCSBuaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZAotCQkrPSAobmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgczJpb19tc2l4X2VudHJ5KSk7Ci0JbWVtc2V0KG5pYy0+czJpb19lbnRyaWVzLCAwLAotCQluaWMtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBzMmlvX21zaXhfZW50cnkpKTsKKwlzd3N0YXRzLT5tZW1fYWxsb2NhdGVkICs9IHNpemU7CiAKIAluaWMtPmVudHJpZXNbMF0uZW50cnkgPSAwOwogCW5pYy0+czJpb19lbnRyaWVzWzBdLmVudHJ5ID0gMDsKQEAgLTM4NjMsMTMgKzM4NDksMTMgQEAKIAlyZXQgPSBwY2lfZW5hYmxlX21zaXgobmljLT5wZGV2LCBuaWMtPmVudHJpZXMsIG5pYy0+bnVtX2VudHJpZXMpOwogCS8qIFdlIGZhaWwgaW5pdCBpZiBlcnJvciBvciB3ZSBnZXQgbGVzcyB2ZWN0b3JzIHRoYW4gbWluIHJlcXVpcmVkICovCiAJaWYgKHJldCkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IEVuYWJsaW5nIE1TSS1YIGZhaWxlZFxuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiRW5hYmxpbmcgTVNJLVggZmFpbGVkXG4iKTsKIAkJa2ZyZWUobmljLT5lbnRyaWVzKTsKLQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJKz0gKG5pYy0+bnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpKTsKKwkJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IG5pYy0+bnVtX2VudHJpZXMgKgorCQkJc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KTsKIAkJa2ZyZWUobmljLT5zMmlvX2VudHJpZXMpOwotCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkCi0JCQkrPSAobmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgczJpb19tc2l4X2VudHJ5KSk7CisJCXN3c3RhdHMtPm1lbV9mcmVlZCArPSBuaWMtPm51bV9lbnRyaWVzICoKKwkJCXNpemVvZihzdHJ1Y3QgczJpb19tc2l4X2VudHJ5KTsKIAkJbmljLT5lbnRyaWVzID0gTlVMTDsKIAkJbmljLT5zMmlvX2VudHJpZXMgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTM5MDYsMTQgKzM4OTIsMTQgQEAKIAl1NjQgdmFsNjQsIHNhdmVkNjQ7CiAKIAllcnIgPSByZXF1ZXN0X2lycShzcC0+ZW50cmllc1sxXS52ZWN0b3IsIHMyaW9fdGVzdF9pbnRyLCAwLAotCQkJc3AtPm5hbWUsIHNwKTsKKwkJCSAgc3AtPm5hbWUsIHNwKTsKIAlpZiAoZXJyKSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IFBDSSAlczogY2Fubm90IGFzc2lnbiBpcnEgJWRcbiIsCi0JCSAgICAgICBzcC0+ZGV2LT5uYW1lLCBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKKwkJCSAgc3AtPmRldi0+bmFtZSwgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCAoJnNwLT5tc2lfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc3AtPm1zaV93YWl0KTsKIAlzcC0+bXNpX2RldGVjdGVkID0gMDsKIAogCXNhdmVkNjQgPSB2YWw2NCA9IHJlYWRxKCZiYXIwLT5zY2hlZHVsZWRfaW50X2N0cmwpOwpAQCAtMzkyNyw4ICszOTEzLDggQEAKIAlpZiAoIXNwLT5tc2lfZGV0ZWN0ZWQpIHsKIAkJLyogTVNJKFgpIHRlc3QgZmFpbGVkLCBnbyBiYWNrIHRvIElOVHggbW9kZSAqLwogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBQQ0kgJXM6IE5vIGludGVycnVwdCB3YXMgZ2VuZXJhdGVkICIKLQkJCSJ1c2luZyBNU0koWCkgZHVyaW5nIHRlc3RcbiIsIHNwLT5kZXYtPm5hbWUsCi0JCQlwY2lfbmFtZShwZGV2KSk7CisJCQkgICJ1c2luZyBNU0koWCkgZHVyaW5nIHRlc3RcbiIsCisJCQkgIHNwLT5kZXYtPm5hbWUsIHBjaV9uYW1lKHBkZXYpKTsKIAogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAl9CkBAIC0zOTQ2LDggKzM5MzIsNyBAQAogCXUxNiBtc2lfY29udHJvbDsKIAogCWZvciAoaSA9IDA7IGkgPCBzcC0+bnVtX2VudHJpZXM7IGkrKykgewotCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0KLQkJCU1TSVhfUkVHSVNURVJFRF9TVUNDRVNTKSB7CisJCWlmIChzcC0+czJpb19lbnRyaWVzW2ldLmluX3VzZSA9PSBNU0lYX1JFR0lTVEVSRURfU1VDQ0VTUykgewogCQkJaW50IHZlY3RvciA9IHNwLT5lbnRyaWVzW2ldLnZlY3RvcjsKIAkJCXZvaWQgKmFyZyA9IHNwLT5zMmlvX2VudHJpZXNbaV0uYXJnOwogCQkJZnJlZV9pcnEodmVjdG9yLCBhcmcpOwpAQCAtMzk5Miw2ICszOTc3LDcgQEAKIHN0YXRpYyBpbnQgczJpb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdDsKIAlpbnQgZXJyID0gMDsKIAogCS8qCkBAIC00MDIyLDEzICs0MDA4LDEzIEBACiAJaWYgKHNwLT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKSB7CiAJCWlmIChzcC0+ZW50cmllcykgewogCQkJa2ZyZWUoc3AtPmVudHJpZXMpOwotCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkCi0JCQkrPSAoc3AtPm51bV9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSk7CisJCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gc3AtPm51bV9lbnRyaWVzICoKKwkJCQlzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpOwogCQl9CiAJCWlmIChzcC0+czJpb19lbnRyaWVzKSB7CiAJCQlrZnJlZShzcC0+czJpb19lbnRyaWVzKTsKLQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAotCQkJKz0gKHNwLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgczJpb19tc2l4X2VudHJ5KSk7CisJCQlzd3N0YXRzLT5tZW1fZnJlZWQgKz0gc3AtPm51bV9lbnRyaWVzICoKKwkJCQlzaXplb2Yoc3RydWN0IHMyaW9fbXNpeF9lbnRyeSk7CiAJCX0KIAl9CiAJcmV0dXJuIGVycjsKQEAgLTQwNTUsOCArNDA0MSw4IEBACiAJaW50IG9mZnNldDsKIAogCS8qIFJldHVybiBpZiB0aGUgZGV2aWNlIGlzIGFscmVhZHkgY2xvc2VkICAgICAgICAgICAgICAgKgotCSogIENhbiBoYXBwZW4gd2hlbiBzMmlvX2NhcmRfdXAgZmFpbGVkIGluIGNoYW5nZV9tdHUgICAgKgotCSovCisJICogIENhbiBoYXBwZW4gd2hlbiBzMmlvX2NhcmRfdXAgZmFpbGVkIGluIGNoYW5nZV9tdHUgICAgKgorCSAqLwogCWlmICghaXNfczJpb19jYXJkX3VwKHNwKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQwODYsNyArNDA3Miw3IEBACiAgKiAgMCBvbiBzdWNjZXNzICYgMSBvbiBmYWlsdXJlLgogICovCiAKLXN0YXRpYyBpbnQgczJpb194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgczJpb194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2IGZyZ19jbnQsIGZyZ19sZW4sIGksIHF1ZXVlLCBxdWV1ZV9sZW4sIHB1dF9vZmYsIGdldF9vZmY7CkBAIC00MDk2LDI5ICs0MDgyLDI3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJdTE2IHZsYW5fdGFnID0gMDsKIAlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gTlVMTDsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwotCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKIAlpbnQgZG9fc3Bpbl9sb2NrID0gMTsKIAlpbnQgb2ZmbG9hZF90eXBlOwogCWludCBlbmFibGVfcGVyX2xpc3RfaW50ZXJydXB0ID0gMDsKLQlzdHJ1Y3Qgc3dTdGF0ICpzdGF0cyA9ICZzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdDsKLQotCW1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKLQljb25maWcgPSAmc3AtPmNvbmZpZzsKKwlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmc3AtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHMgPSBtYWNfY29udHJvbC0+c3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnN0YXRzLT5zd19zdGF0OwogCiAJREJHX1BSSU5UKFRYX0RCRywgIiVzOiBJbiBOZXRlcmlvbiBUeCByb3V0aW5lXG4iLCBkZXYtPm5hbWUpOwogCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDw9IDApKSB7Ci0JCURCR19QUklOVChUWF9EQkcsICIlczpCdWZmZXIgaGFzIG5vIGRhdGEuLlxuIiwgZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKFRYX0RCRywgIiVzOiBCdWZmZXIgaGFzIG5vIGRhdGEuLlxuIiwgZGV2LT5uYW1lKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKCFpc19zMmlvX2NhcmRfdXAoc3ApKSB7CiAJCURCR19QUklOVChUWF9EQkcsICIlczogQ2FyZCBnb2luZyBkb3duIGZvciByZXNldFxuIiwKIAkJCSAgZGV2LT5uYW1lKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlxdWV1ZSA9IDA7CkBAIC00MTMyLDIwICs0MTE2LDIwIEBACiAKIAkJCWlmICgoaXAtPmZyYWdfb2ZmICYgaHRvbnMoSVBfT0ZGU0VUfElQX01GKSkgPT0gMCkgewogCQkJCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoKCh1bnNpZ25lZCBjaGFyICopaXApICsKLQkJCQkJCWlwLT5paGwqNCk7CisJCQkJCQkgICAgICAgaXAtPmlobCo0KTsKIAogCQkJCWlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHsKIAkJCQkJcXVldWVfbGVuID0gc3AtPnRvdGFsX3RjcF9maWZvczsKIAkJCQkJcXVldWUgPSAobnRvaHModGgtPnNvdXJjZSkgKwotCQkJCQkJCW50b2hzKHRoLT5kZXN0KSkgJgotCQkJCQkgICAgc3AtPmZpZm9fc2VsZWN0b3JbcXVldWVfbGVuIC0gMV07CisJCQkJCQkgbnRvaHModGgtPmRlc3QpKSAmCisJCQkJCQlzcC0+Zmlmb19zZWxlY3RvcltxdWV1ZV9sZW4gLSAxXTsKIAkJCQkJaWYgKHF1ZXVlID49IHF1ZXVlX2xlbikKIAkJCQkJCXF1ZXVlID0gcXVldWVfbGVuIC0gMTsKIAkJCQl9IGVsc2UgaWYgKGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgewogCQkJCQlxdWV1ZV9sZW4gPSBzcC0+dG90YWxfdWRwX2ZpZm9zOwogCQkJCQlxdWV1ZSA9IChudG9ocyh0aC0+c291cmNlKSArCi0JCQkJCQkJbnRvaHModGgtPmRlc3QpKSAmCi0JCQkJCSAgICBzcC0+Zmlmb19zZWxlY3RvcltxdWV1ZV9sZW4gLSAxXTsKKwkJCQkJCSBudG9ocyh0aC0+ZGVzdCkpICYKKwkJCQkJCXNwLT5maWZvX3NlbGVjdG9yW3F1ZXVlX2xlbiAtIDFdOwogCQkJCQlpZiAocXVldWUgPj0gcXVldWVfbGVuKQogCQkJCQkJcXVldWUgPSBxdWV1ZV9sZW4gLSAxOwogCQkJCQlxdWV1ZSArPSBzcC0+dWRwX2ZpZm9faWR4OwpAQCAtNDE1OCw3ICs0MTQyLDcgQEAKIAl9IGVsc2UgaWYgKHNwLT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9QUklPUklUWV9TVEVFUklORykKIAkJLyogZ2V0IGZpZm8gbnVtYmVyIGJhc2VkIG9uIHNrYi0+cHJpb3JpdHkgdmFsdWUgKi8KIAkJcXVldWUgPSBjb25maWctPmZpZm9fbWFwcGluZwotCQkJCQlbc2tiLT5wcmlvcml0eSAmIChNQVhfVFhfRklGT1MgLSAxKV07CisJCQlbc2tiLT5wcmlvcml0eSAmIChNQVhfVFhfRklGT1MgLSAxKV07CiAJZmlmbyA9ICZtYWNfY29udHJvbC0+Zmlmb3NbcXVldWVdOwogCiAJaWYgKGRvX3NwaW5fbG9jaykKQEAgLTQxODAsMTkgKzQxNjQsMTkgQEAKIAkJfQogCX0KIAotCXB1dF9vZmYgPSAodTE2KSBmaWZvLT50eF9jdXJyX3B1dF9pbmZvLm9mZnNldDsKLQlnZXRfb2ZmID0gKHUxNikgZmlmby0+dHhfY3Vycl9nZXRfaW5mby5vZmZzZXQ7Ci0JdHhkcCA9IChzdHJ1Y3QgVHhEICopIGZpZm8tPmxpc3RfaW5mb1twdXRfb2ZmXS5saXN0X3ZpcnRfYWRkcjsKKwlwdXRfb2ZmID0gKHUxNilmaWZvLT50eF9jdXJyX3B1dF9pbmZvLm9mZnNldDsKKwlnZXRfb2ZmID0gKHUxNilmaWZvLT50eF9jdXJyX2dldF9pbmZvLm9mZnNldDsKKwl0eGRwID0gKHN0cnVjdCBUeEQgKilmaWZvLT5saXN0X2luZm9bcHV0X29mZl0ubGlzdF92aXJ0X2FkZHI7CiAKIAlxdWV1ZV9sZW4gPSBmaWZvLT50eF9jdXJyX3B1dF9pbmZvLmZpZm9fbGVuICsgMTsKIAkvKiBBdm9pZCAicHV0IiBwb2ludGVyIGdvaW5nIGJleW9uZCAiZ2V0IiBwb2ludGVyICovCiAJaWYgKHR4ZHAtPkhvc3RfQ29udHJvbCB8fAotCQkgICAoKHB1dF9vZmYrMSkgPT0gcXVldWVfbGVuID8gMCA6IChwdXRfb2ZmKzEpKSA9PSBnZXRfb2ZmKSB7CisJICAgICgocHV0X29mZisxKSA9PSBxdWV1ZV9sZW4gPyAwIDogKHB1dF9vZmYrMSkpID09IGdldF9vZmYpIHsKIAkJREJHX1BSSU5UKFRYX0RCRywgIkVycm9yIGluIHhtaXQsIE5vIGZyZWUgVFhEcy5cbiIpOwogCQlzMmlvX3N0b3BfdHhfcXVldWUoc3AsIGZpZm8tPmZpZm9fbm8pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJb2ZmbG9hZF90eXBlID0gczJpb19vZmZsb2FkX3R5cGUoc2tiKTsKQEAgLTQyMDEsOSArNDE4NSw5IEBACiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVENQX0xTT19NU1MoczJpb190Y3BfbXNzKHNrYikpOwogCX0KIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQl0eGRwLT5Db250cm9sXzIgfD0KLQkJICAgIChUWERfVFhfQ0tPX0lQVjRfRU4gfCBUWERfVFhfQ0tPX1RDUF9FTiB8Ci0JCSAgICAgVFhEX1RYX0NLT19VRFBfRU4pOworCQl0eGRwLT5Db250cm9sXzIgfD0gKFRYRF9UWF9DS09fSVBWNF9FTiB8CisJCQkJICAgIFRYRF9UWF9DS09fVENQX0VOIHwKKwkJCQkgICAgVFhEX1RYX0NLT19VRFBfRU4pOwogCX0KIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0dBVEhFUl9DT0RFX0ZJUlNUOwogCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfTElTVF9PV05fWEVOQTsKQEAgLTQyMjgsMjYgKzQyMTIsMjcgQEAKICNpZmRlZiBfX0JJR19FTkRJQU4KIAkJLyogYm90aCB2YXJpYW50cyBkbyBjcHVfdG9fYmU2NChiZTMyX3RvX2NwdSguLi4pKSAqLwogCQlmaWZvLT51Zm9faW5fYmFuZF92W3B1dF9vZmZdID0KLQkJCQkoX19mb3JjZSB1NjQpc2tiX3NoaW5mbyhza2IpLT5pcDZfZnJhZ19pZDsKKwkJCShfX2ZvcmNlIHU2NClza2Jfc2hpbmZvKHNrYiktPmlwNl9mcmFnX2lkOwogI2Vsc2UKIAkJZmlmby0+dWZvX2luX2JhbmRfdltwdXRfb2ZmXSA9Ci0JCQkJKF9fZm9yY2UgdTY0KXNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQgPDwgMzI7CisJCQkoX19mb3JjZSB1NjQpc2tiX3NoaW5mbyhza2IpLT5pcDZfZnJhZ19pZCA8PCAzMjsKICNlbmRpZgogCQl0eGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZylmaWZvLT51Zm9faW5fYmFuZF92OwogCQl0eGRwLT5CdWZmZXJfUG9pbnRlciA9IHBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LAotCQkJCQlmaWZvLT51Zm9faW5fYmFuZF92LAotCQkJCQlzaXplb2YodTY0KSwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCQkgICAgICBmaWZvLT51Zm9faW5fYmFuZF92LAorCQkJCQkJICAgICAgc2l6ZW9mKHU2NCksCisJCQkJCQkgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihzcC0+cGRldiwgdHhkcC0+QnVmZmVyX1BvaW50ZXIpKQogCQkJZ290byBwY2lfbWFwX2ZhaWxlZDsKIAkJdHhkcCsrOwogCX0KIAotCXR4ZHAtPkJ1ZmZlcl9Qb2ludGVyID0gcGNpX21hcF9zaW5nbGUKLQkgICAgKHNwLT5wZGV2LCBza2ItPmRhdGEsIGZyZ19sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCXR4ZHAtPkJ1ZmZlcl9Qb2ludGVyID0gcGNpX21hcF9zaW5nbGUoc3AtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQkJICAgICAgZnJnX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihzcC0+cGRldiwgdHhkcC0+QnVmZmVyX1BvaW50ZXIpKQogCQlnb3RvIHBjaV9tYXBfZmFpbGVkOwogCi0JdHhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpIHNrYjsKKwl0eGRwLT5Ib3N0X0NvbnRyb2wgPSAodW5zaWduZWQgbG9uZylza2I7CiAJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9CVUZGRVIwX1NJWkUoZnJnX2xlbik7CiAJaWYgKG9mZmxvYWRfdHlwZSA9PSBTS0JfR1NPX1VEUCkKIAkJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9VRk9fRU47CkBAIC00MjYwLDkgKzQyNDUsMTAgQEAKIAkJaWYgKCFmcmFnLT5zaXplKQogCQkJY29udGludWU7CiAJCXR4ZHArKzsKLQkJdHhkcC0+QnVmZmVyX1BvaW50ZXIgPSAodTY0KSBwY2lfbWFwX3BhZ2UKLQkJICAgIChzcC0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCi0JCSAgICAgZnJhZy0+c2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCXR4ZHAtPkJ1ZmZlcl9Qb2ludGVyID0gKHU2NClwY2lfbWFwX3BhZ2Uoc3AtPnBkZXYsIGZyYWctPnBhZ2UsCisJCQkJCQkJIGZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCQkJCSBmcmFnLT5zaXplLAorCQkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJdHhkcC0+Q29udHJvbF8xID0gVFhEX0JVRkZFUjBfU0laRShmcmFnLT5zaXplKTsKIAkJaWYgKG9mZmxvYWRfdHlwZSA9PSBTS0JfR1NPX1VEUCkKIAkJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwpAQCAtNDI5MiwyNiArNDI3OCwyNyBAQAogCiAJLyogQXZvaWQgInB1dCIgcG9pbnRlciBnb2luZyBiZXlvbmQgImdldCIgcG9pbnRlciAqLwogCWlmICgoKHB1dF9vZmYrMSkgPT0gcXVldWVfbGVuID8gMCA6IChwdXRfb2ZmKzEpKSA9PSBnZXRfb2ZmKSB7Ci0JCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmZpZm9fZnVsbF9jbnQrKzsKKwkJc3dzdGF0cy0+Zmlmb19mdWxsX2NudCsrOwogCQlEQkdfUFJJTlQoVFhfREJHLAogCQkJICAiTm8gZnJlZSBUeERzIGZvciB4bWl0LCBQdXQ6IDB4JXggR2V0OjB4JXhcbiIsCiAJCQkgIHB1dF9vZmYsIGdldF9vZmYpOwogCQlzMmlvX3N0b3BfdHhfcXVldWUoc3AsIGZpZm8tPmZpZm9fbm8pOwogCX0KLQltYWNfY29udHJvbC0+c3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkICs9IHNrYi0+dHJ1ZXNpemU7CisJc3dzdGF0cy0+bWVtX2FsbG9jYXRlZCArPSBza2ItPnRydWVzaXplOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKIAogCWlmIChzcC0+Y29uZmlnLmludHJfdHlwZSA9PSBNU0lfWCkKIAkJdHhfaW50cl9oYW5kbGVyKGZpZm8pOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogcGNpX21hcF9mYWlsZWQ6Ci0Jc3RhdHMtPnBjaV9tYXBfZmFpbF9jbnQrKzsKKwlzd3N0YXRzLT5wY2lfbWFwX2ZhaWxfY250Kys7CiAJczJpb19zdG9wX3R4X3F1ZXVlKHNwLCBmaWZvLT5maWZvX25vKTsKLQlzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CisJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDQwMiwxNyArNDM4OSwxNiBAQAogCQkJICogVGhpcyBpcyB1bnN0YWJsZSBzdGF0ZSBzbyBjbGVhciBib3RoIHVwL2Rvd24KIAkJCSAqIGludGVycnVwdCBhbmQgYWRhcHRlciB0byByZS1ldmFsdWF0ZSB0aGUgbGluayBzdGF0ZS4KIAkJCSAqLwotCQkJdmFsNjQgfD0gIEdQSU9fSU5UX1JFR19MSU5LX0RPV047CisJCQl2YWw2NCB8PSBHUElPX0lOVF9SRUdfTElOS19ET1dOOwogCQkJdmFsNjQgfD0gR1BJT19JTlRfUkVHX0xJTktfVVA7CiAJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5ncGlvX2ludF9yZWcpOwogCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19pbnRfbWFzayk7CiAJCQl2YWw2NCAmPSB+KEdQSU9fSU5UX01BU0tfTElOS19VUCB8CiAJCQkJICAgR1BJT19JTlRfTUFTS19MSU5LX0RPV04pOwogCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19pbnRfbWFzayk7Ci0JCX0KLQkJZWxzZSBpZiAodmFsNjQgJiBHUElPX0lOVF9SRUdfTElOS19VUCkgeworCQl9IGVsc2UgaWYgKHZhbDY0ICYgR1BJT19JTlRfUkVHX0xJTktfVVApIHsKIAkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfc3RhdHVzKTsKLQkJCQkvKiBFbmFibGUgQWRhcHRlciAqLworCQkJLyogRW5hYmxlIEFkYXB0ZXIgKi8KIAkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfY29udHJvbCk7CiAJCQl2YWw2NCB8PSBBREFQVEVSX0NOVExfRU47CiAJCQl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwpAQCAtNDQzMSw3ICs0NDE3LDcgQEAKIAkJCXZhbDY0IHw9IEdQSU9fSU5UX01BU0tfTElOS19VUDsKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmdwaW9faW50X21hc2spOwogCi0JCX1lbHNlIGlmICh2YWw2NCAmIEdQSU9fSU5UX1JFR19MSU5LX0RPV04pIHsKKwkJfSBlbHNlIGlmICh2YWw2NCAmIEdQSU9fSU5UX1JFR19MSU5LX0RPV04pIHsKIAkJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmFkYXB0ZXJfc3RhdHVzKTsKIAkJCXMyaW9fbGluayhzcCwgTElOS19ET1dOKTsKIAkJCS8qIExpbmsgaXMgZG93biBzbyB1bm1ha3MgbGluayB1cCBpbnRlcnJ1cHQgKi8KQEAgLTQ0NDIsNyArNDQyOCw3IEBACiAKIAkJCS8qIHR1cm4gb2ZmIExFRCAqLwogCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKLQkJCXZhbDY0ID0gdmFsNjQgJih+QURBUFRFUl9MRURfT04pOworCQkJdmFsNjQgPSB2YWw2NCAmICh+QURBUFRFUl9MRURfT04pOwogCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIAkJfQogCX0KQEAgLTQ0NTksMTIgKzQ0NDUsMTIgQEAKICAqICAxIC0gaWYgYWxhcm0gYml0IHNldAogICogIDAgLSBpZiBhbGFybSBiaXQgaXMgbm90IHNldAogICovCi1zdGF0aWMgaW50IGRvX3MyaW9fY2hrX2FsYXJtX2JpdCh1NjQgdmFsdWUsIHZvaWQgX19pb21lbSAqIGFkZHIsCi0JCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyAqY250KQorc3RhdGljIGludCBkb19zMmlvX2Noa19hbGFybV9iaXQodTY0IHZhbHVlLCB2b2lkIF9faW9tZW0gKmFkZHIsCisJCQkJIHVuc2lnbmVkIGxvbmcgbG9uZyAqY250KQogewogCXU2NCB2YWw2NDsKIAl2YWw2NCA9IHJlYWRxKGFkZHIpOwotCWlmICggdmFsNjQgJiB2YWx1ZSApIHsKKwlpZiAodmFsNjQgJiB2YWx1ZSkgewogCQl3cml0ZXEodmFsNjQsIGFkZHIpOwogCQkoKmNudCkrKzsKIAkJcmV0dXJuIDE7CkBAIC00NDgxLDEyICs0NDY3LDEyIEBACiAgKiAgUmV0dXJuIFZhbHVlOgogICogIE5PTkUKICAqLwotc3RhdGljIHZvaWQgczJpb19oYW5kbGVfZXJyb3JzKHZvaWQgKiBkZXZfaWQpCitzdGF0aWMgdm9pZCBzMmlvX2hhbmRsZV9lcnJvcnModm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7Ci0JdTY0IHRlbXA2NCA9IDAsdmFsNjQ9MDsKKwl1NjQgdGVtcDY0ID0gMCwgdmFsNjQgPSAwOwogCWludCBpID0gMDsKIAogCXN0cnVjdCBzd1N0YXQgKnN3X3N0YXQgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CkBAIC00NDk5LDEwICs0NDg1LDEwIEBACiAJCXJldHVybjsKIAogCW1lbXNldCgmc3dfc3RhdC0+cmluZ19mdWxsX2NudCwgMCwKLQkJc2l6ZW9mKHN3X3N0YXQtPnJpbmdfZnVsbF9jbnQpKTsKKwkgICAgICAgc2l6ZW9mKHN3X3N0YXQtPnJpbmdfZnVsbF9jbnQpKTsKIAogCS8qIEhhbmRsaW5nIHRoZSBYUEFLIGNvdW50ZXJzIHVwZGF0ZSAqLwotCWlmKHN0YXRzLT54cGFrX3RpbWVyX2NvdW50IDwgNzIwMDApIHsKKwlpZiAoc3RhdHMtPnhwYWtfdGltZXJfY291bnQgPCA3MjAwMCkgewogCQkvKiB3YWl0aW5nIGZvciBhbiBob3VyICovCiAJCXN0YXRzLT54cGFrX3RpbWVyX2NvdW50Kys7CiAJfSBlbHNlIHsKQEAgLTQ1MjEsMTkxICs0NTA3LDIyNyBAQAogCiAJLyogSW4gY2FzZSBvZiBhIHNlcmlvdXMgZXJyb3IsIHRoZSBkZXZpY2Ugd2lsbCBiZSBSZXNldC4gKi8KIAlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFNFUlJfU09VUkNFX0FOWSwgJmJhcjAtPnNlcnJfc291cmNlLAotCQkJCSZzd19zdGF0LT5zZXJpb3VzX2Vycl9jbnQpKQorCQkJCSAgJnN3X3N0YXQtPnNlcmlvdXNfZXJyX2NudCkpCiAJCWdvdG8gcmVzZXQ7CiAKIAkvKiBDaGVjayBmb3IgZGF0YSBwYXJpdHkgZXJyb3IgKi8KIAlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KEdQSU9fSU5UX1JFR19EUF9FUlJfSU5ULCAmYmFyMC0+Z3Bpb19pbnRfcmVnLAotCQkJCSZzd19zdGF0LT5wYXJpdHlfZXJyX2NudCkpCisJCQkJICAmc3dfc3RhdC0+cGFyaXR5X2Vycl9jbnQpKQogCQlnb3RvIHJlc2V0OwogCiAJLyogQ2hlY2sgZm9yIHJpbmcgZnVsbCBjb3VudGVyICovCiAJaWYgKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJpbmdfYnVtcF9jb3VudGVyMSk7Ci0JCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkJdGVtcDY0ID0gKCB2YWw2NCAmIHZCSVQoMHhGRkZGLChpKjE2KSwxNikpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl0ZW1wNjQgPSAodmFsNjQgJiB2QklUKDB4RkZGRiwgKGkqMTYpLCAxNikpOwogCQkJdGVtcDY0ID4+PSA2NCAtICgoaSsxKSoxNik7CiAJCQlzd19zdGF0LT5yaW5nX2Z1bGxfY250W2ldICs9IHRlbXA2NDsKIAkJfQogCiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJpbmdfYnVtcF9jb3VudGVyMik7Ci0JCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkJdGVtcDY0ID0gKCB2YWw2NCAmIHZCSVQoMHhGRkZGLChpKjE2KSwxNikpOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQl0ZW1wNjQgPSAodmFsNjQgJiB2QklUKDB4RkZGRiwgKGkqMTYpLCAxNikpOwogCQkJdGVtcDY0ID4+PSA2NCAtICgoaSsxKSoxNik7Ci0JCQkgc3dfc3RhdC0+cmluZ19mdWxsX2NudFtpKzRdICs9IHRlbXA2NDsKKwkJCXN3X3N0YXQtPnJpbmdfZnVsbF9jbnRbaSs0XSArPSB0ZW1wNjQ7CiAJCX0KIAl9CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT50eGRtYV9pbnRfc3RhdHVzKTsKIAkvKmNoZWNrIGZvciBwZmNfZXJyKi8KIAlpZiAodmFsNjQgJiBUWERNQV9QRkNfSU5UKSB7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUEZDX0VDQ19EQl9FUlIgfCBQRkNfU01fRVJSX0FMQVJNfAotCQkJCVBGQ19NSVNDXzBfRVJSIHwgUEZDX01JU0NfMV9FUlJ8Ci0JCQkJUEZDX1BDSVhfRVJSLCAmYmFyMC0+cGZjX2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPnBmY19lcnJfY250KSkKKwkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChQRkNfRUNDX0RCX0VSUiB8IFBGQ19TTV9FUlJfQUxBUk0gfAorCQkJCQkgIFBGQ19NSVNDXzBfRVJSIHwgUEZDX01JU0NfMV9FUlIgfAorCQkJCQkgIFBGQ19QQ0lYX0VSUiwKKwkJCQkJICAmYmFyMC0+cGZjX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPnBmY19lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7Ci0JCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChQRkNfRUNDX1NHX0VSUiwgJmJhcjAtPnBmY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5wZmNfZXJyX2NudCk7CisJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChQRkNfRUNDX1NHX0VSUiwKKwkJCQkgICAgICAmYmFyMC0+cGZjX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPnBmY19lcnJfY250KTsKIAl9CiAKIAkvKmNoZWNrIGZvciB0ZGFfZXJyKi8KIAlpZiAodmFsNjQgJiBUWERNQV9UREFfSU5UKSB7Ci0JCWlmKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChUREFfRm5fRUNDX0RCX0VSUiB8IFREQV9TTTBfRVJSX0FMQVJNIHwKLQkJCQlUREFfU00xX0VSUl9BTEFSTSwgJmJhcjAtPnRkYV9lcnJfcmVnLAotCQkJCSZzd19zdGF0LT50ZGFfZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoVERBX0ZuX0VDQ19EQl9FUlIgfAorCQkJCQkgIFREQV9TTTBfRVJSX0FMQVJNIHwKKwkJCQkJICBUREFfU00xX0VSUl9BTEFSTSwKKwkJCQkJICAmYmFyMC0+dGRhX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPnRkYV9lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7CiAJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChUREFfRm5fRUNDX1NHX0VSUiB8IFREQV9QQ0lYX0VSUiwKLQkJCQkmYmFyMC0+dGRhX2Vycl9yZWcsICZzd19zdGF0LT50ZGFfZXJyX2NudCk7CisJCQkJICAgICAgJmJhcjAtPnRkYV9lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT50ZGFfZXJyX2NudCk7CiAJfQogCS8qY2hlY2sgZm9yIHBjY19lcnIqLwogCWlmICh2YWw2NCAmIFRYRE1BX1BDQ19JTlQpIHsKLQkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChQQ0NfU01fRVJSX0FMQVJNIHwgUENDX1dSX0VSUl9BTEFSTQotCQkJCXwgUENDX05fU0VSUiB8IFBDQ182X0NPRl9PVl9FUlIKLQkJCQl8IFBDQ183X0NPRl9PVl9FUlIgfCBQQ0NfNl9MU09fT1ZfRVJSCi0JCQkJfCBQQ0NfN19MU09fT1ZfRVJSIHwgUENDX0ZCX0VDQ19EQl9FUlIKLQkJCQl8IFBDQ19UWEJfRUNDX0RCX0VSUiwgJmJhcjAtPnBjY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5wY2NfZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUENDX1NNX0VSUl9BTEFSTSB8IFBDQ19XUl9FUlJfQUxBUk0gfAorCQkJCQkgIFBDQ19OX1NFUlIgfCBQQ0NfNl9DT0ZfT1ZfRVJSIHwKKwkJCQkJICBQQ0NfN19DT0ZfT1ZfRVJSIHwgUENDXzZfTFNPX09WX0VSUiB8CisJCQkJCSAgUENDXzdfTFNPX09WX0VSUiB8IFBDQ19GQl9FQ0NfREJfRVJSIHwKKwkJCQkJICBQQ0NfVFhCX0VDQ19EQl9FUlIsCisJCQkJCSAgJmJhcjAtPnBjY19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5wY2NfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUENDX0ZCX0VDQ19TR19FUlIgfCBQQ0NfVFhCX0VDQ19TR19FUlIsCi0JCQkJJmJhcjAtPnBjY19lcnJfcmVnLCAmc3dfc3RhdC0+cGNjX2Vycl9jbnQpOworCQkJCSAgICAgICZiYXIwLT5wY2NfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+cGNjX2Vycl9jbnQpOwogCX0KIAogCS8qY2hlY2sgZm9yIHR0aV9lcnIqLwogCWlmICh2YWw2NCAmIFRYRE1BX1RUSV9JTlQpIHsKLQkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChUVElfU01fRVJSX0FMQVJNLCAmYmFyMC0+dHRpX2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPnR0aV9lcnJfY250KSkKKwkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChUVElfU01fRVJSX0FMQVJNLAorCQkJCQkgICZiYXIwLT50dGlfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+dHRpX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKIAkJZG9fczJpb19jaGtfYWxhcm1fYml0KFRUSV9FQ0NfU0dfRVJSIHwgVFRJX0VDQ19EQl9FUlIsCi0JCQkJJmJhcjAtPnR0aV9lcnJfcmVnLCAmc3dfc3RhdC0+dHRpX2Vycl9jbnQpOworCQkJCSAgICAgICZiYXIwLT50dGlfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+dHRpX2Vycl9jbnQpOwogCX0KIAogCS8qY2hlY2sgZm9yIGxzb19lcnIqLwogCWlmICh2YWw2NCAmIFRYRE1BX0xTT19JTlQpIHsKLQkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChMU082X0FCT1JUIHwgTFNPN19BQk9SVAotCQkJCXwgTFNPNl9TTV9FUlJfQUxBUk0gfCBMU083X1NNX0VSUl9BTEFSTSwKLQkJCQkmYmFyMC0+bHNvX2Vycl9yZWcsICZzd19zdGF0LT5sc29fZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoTFNPNl9BQk9SVCB8IExTTzdfQUJPUlQgfAorCQkJCQkgIExTTzZfU01fRVJSX0FMQVJNIHwgTFNPN19TTV9FUlJfQUxBUk0sCisJCQkJCSAgJmJhcjAtPmxzb19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5sc29fZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCQlkb19zMmlvX2Noa19hbGFybV9iaXQoTFNPNl9TRU5EX09GTE9XIHwgTFNPN19TRU5EX09GTE9XLAotCQkJCSZiYXIwLT5sc29fZXJyX3JlZywgJnN3X3N0YXQtPmxzb19lcnJfY250KTsKKwkJCQkgICAgICAmYmFyMC0+bHNvX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPmxzb19lcnJfY250KTsKIAl9CiAKIAkvKmNoZWNrIGZvciB0cGFfZXJyKi8KIAlpZiAodmFsNjQgJiBUWERNQV9UUEFfSU5UKSB7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoVFBBX1NNX0VSUl9BTEFSTSwgJmJhcjAtPnRwYV9lcnJfcmVnLAotCQkJJnN3X3N0YXQtPnRwYV9lcnJfY250KSkKKwkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChUUEFfU01fRVJSX0FMQVJNLAorCQkJCQkgICZiYXIwLT50cGFfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+dHBhX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKLQkJZG9fczJpb19jaGtfYWxhcm1fYml0KFRQQV9UWF9GUk1fRFJPUCwgJmJhcjAtPnRwYV9lcnJfcmVnLAotCQkJJnN3X3N0YXQtPnRwYV9lcnJfY250KTsKKwkJZG9fczJpb19jaGtfYWxhcm1fYml0KFRQQV9UWF9GUk1fRFJPUCwKKwkJCQkgICAgICAmYmFyMC0+dHBhX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPnRwYV9lcnJfY250KTsKIAl9CiAKIAkvKmNoZWNrIGZvciBzbV9lcnIqLwogCWlmICh2YWw2NCAmIFRYRE1BX1NNX0lOVCkgewotCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFNNX1NNX0VSUl9BTEFSTSwgJmJhcjAtPnNtX2Vycl9yZWcsCi0JCQkmc3dfc3RhdC0+c21fZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoU01fU01fRVJSX0FMQVJNLAorCQkJCQkgICZiYXIwLT5zbV9lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5zbV9lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7CiAJfQogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+bWFjX2ludF9zdGF0dXMpOwogCWlmICh2YWw2NCAmIE1BQ19JTlRfU1RBVFVTX1RNQUNfSU5UKSB7CiAJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoVE1BQ19UWF9CVUZfT1ZSTiB8IFRNQUNfVFhfU01fRVJSLAotCQkJCSZiYXIwLT5tYWNfdG1hY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5tYWNfdG1hY19lcnJfY250KSkKKwkJCQkJICAmYmFyMC0+bWFjX3RtYWNfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+bWFjX3RtYWNfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwotCQlkb19zMmlvX2Noa19hbGFybV9iaXQoVE1BQ19FQ0NfU0dfRVJSIHwgVE1BQ19FQ0NfREJfRVJSCi0JCQkJfCBUTUFDX0RFU0NfRUNDX1NHX0VSUiB8IFRNQUNfREVTQ19FQ0NfREJfRVJSLAotCQkJCSZiYXIwLT5tYWNfdG1hY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5tYWNfdG1hY19lcnJfY250KTsKKwkJZG9fczJpb19jaGtfYWxhcm1fYml0KFRNQUNfRUNDX1NHX0VSUiB8IFRNQUNfRUNDX0RCX0VSUiB8CisJCQkJICAgICAgVE1BQ19ERVNDX0VDQ19TR19FUlIgfAorCQkJCSAgICAgIFRNQUNfREVTQ19FQ0NfREJfRVJSLAorCQkJCSAgICAgICZiYXIwLT5tYWNfdG1hY19lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5tYWNfdG1hY19lcnJfY250KTsKIAl9CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT54Z3hzX2ludF9zdGF0dXMpOwogCWlmICh2YWw2NCAmIFhHWFNfSU5UX1NUQVRVU19UWEdYUykgewogCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFRYR1hTX0VTVE9SRV9VRkxPVyB8IFRYR1hTX1RYX1NNX0VSUiwKLQkJCQkmYmFyMC0+eGd4c190eGd4c19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT54Z3hzX3R4Z3hzX2Vycl9jbnQpKQorCQkJCQkgICZiYXIwLT54Z3hzX3R4Z3hzX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPnhneHNfdHhneHNfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCQlkb19zMmlvX2Noa19hbGFybV9iaXQoVFhHWFNfRUNDX1NHX0VSUiB8IFRYR1hTX0VDQ19EQl9FUlIsCi0JCQkJJmJhcjAtPnhneHNfdHhneHNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+eGd4c190eGd4c19lcnJfY250KTsKKwkJCQkgICAgICAmYmFyMC0+eGd4c190eGd4c19lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT54Z3hzX3R4Z3hzX2Vycl9jbnQpOwogCX0KIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJ4ZG1hX2ludF9zdGF0dXMpOwogCWlmICh2YWw2NCAmIFJYRE1BX0lOVF9SQ19JTlRfTSkgewotCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJDX1BSQ25fRUNDX0RCX0VSUiB8IFJDX0ZUQ19FQ0NfREJfRVJSCi0JCQkJfCBSQ19QUkNuX1NNX0VSUl9BTEFSTSB8UkNfRlRDX1NNX0VSUl9BTEFSTSwKLQkJCQkmYmFyMC0+cmNfZXJyX3JlZywgJnN3X3N0YXQtPnJjX2Vycl9jbnQpKQorCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJDX1BSQ25fRUNDX0RCX0VSUiB8CisJCQkJCSAgUkNfRlRDX0VDQ19EQl9FUlIgfAorCQkJCQkgIFJDX1BSQ25fU01fRVJSX0FMQVJNIHwKKwkJCQkJICBSQ19GVENfU01fRVJSX0FMQVJNLAorCQkJCQkgICZiYXIwLT5yY19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5yY19lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7Ci0JCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChSQ19QUkNuX0VDQ19TR19FUlIgfCBSQ19GVENfRUNDX1NHX0VSUgotCQkJCXwgUkNfUkRBX0ZBSUxfV1JfUm4sICZiYXIwLT5yY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5yY19lcnJfY250KTsKLQkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChQUkNfUENJX0FCX1JEX1JuIHwgUFJDX1BDSV9BQl9XUl9SbgotCQkJCXwgUFJDX1BDSV9BQl9GX1dSX1JuLCAmYmFyMC0+cHJjX3BjaXhfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+cHJjX3BjaXhfZXJyX2NudCkpCisJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChSQ19QUkNuX0VDQ19TR19FUlIgfAorCQkJCSAgICAgIFJDX0ZUQ19FQ0NfU0dfRVJSIHwKKwkJCQkgICAgICBSQ19SREFfRkFJTF9XUl9SbiwgJmJhcjAtPnJjX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPnJjX2Vycl9jbnQpOworCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFBSQ19QQ0lfQUJfUkRfUm4gfAorCQkJCQkgIFBSQ19QQ0lfQUJfV1JfUm4gfAorCQkJCQkgIFBSQ19QQ0lfQUJfRl9XUl9SbiwKKwkJCQkJICAmYmFyMC0+cHJjX3BjaXhfZXJyX3JlZywKKwkJCQkJICAmc3dfc3RhdC0+cHJjX3BjaXhfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwotCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUFJDX1BDSV9EUF9SRF9SbiB8IFBSQ19QQ0lfRFBfV1JfUm4KLQkJCQl8IFBSQ19QQ0lfRFBfRl9XUl9SbiwgJmJhcjAtPnByY19wY2l4X2Vycl9yZWcsCi0JCQkJJnN3X3N0YXQtPnByY19wY2l4X2Vycl9jbnQpOworCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUFJDX1BDSV9EUF9SRF9SbiB8CisJCQkJICAgICAgUFJDX1BDSV9EUF9XUl9SbiB8CisJCQkJICAgICAgUFJDX1BDSV9EUF9GX1dSX1JuLAorCQkJCSAgICAgICZiYXIwLT5wcmNfcGNpeF9lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5wcmNfcGNpeF9lcnJfY250KTsKIAl9CiAKIAlpZiAodmFsNjQgJiBSWERNQV9JTlRfUlBBX0lOVF9NKSB7CiAJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUlBBX1NNX0VSUl9BTEFSTSB8IFJQQV9DUkVESVRfRVJSLAotCQkJCSZiYXIwLT5ycGFfZXJyX3JlZywgJnN3X3N0YXQtPnJwYV9lcnJfY250KSkKKwkJCQkJICAmYmFyMC0+cnBhX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPnJwYV9lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7CiAJCWRvX3MyaW9fY2hrX2FsYXJtX2JpdChSUEFfRUNDX1NHX0VSUiB8IFJQQV9FQ0NfREJfRVJSLAotCQkJCSZiYXIwLT5ycGFfZXJyX3JlZywgJnN3X3N0YXQtPnJwYV9lcnJfY250KTsKKwkJCQkgICAgICAmYmFyMC0+cnBhX2Vycl9yZWcsCisJCQkJICAgICAgJnN3X3N0YXQtPnJwYV9lcnJfY250KTsKIAl9CiAKIAlpZiAodmFsNjQgJiBSWERNQV9JTlRfUkRBX0lOVF9NKSB7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUkRBX1JYRG5fRUNDX0RCX0VSUgotCQkJCXwgUkRBX0ZSTV9FQ0NfREJfTl9BRVJSIHwgUkRBX1NNMV9FUlJfQUxBUk0KLQkJCQl8IFJEQV9TTTBfRVJSX0FMQVJNIHwgUkRBX1JYRF9FQ0NfREJfU0VSUiwKLQkJCQkmYmFyMC0+cmRhX2Vycl9yZWcsICZzd19zdGF0LT5yZGFfZXJyX2NudCkpCisJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUkRBX1JYRG5fRUNDX0RCX0VSUiB8CisJCQkJCSAgUkRBX0ZSTV9FQ0NfREJfTl9BRVJSIHwKKwkJCQkJICBSREFfU00xX0VSUl9BTEFSTSB8CisJCQkJCSAgUkRBX1NNMF9FUlJfQUxBUk0gfAorCQkJCQkgIFJEQV9SWERfRUNDX0RCX1NFUlIsCisJCQkJCSAgJmJhcjAtPnJkYV9lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5yZGFfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwotCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUkRBX1JYRG5fRUNDX1NHX0VSUiB8IFJEQV9GUk1fRUNDX1NHX0VSUgotCQkJCXwgUkRBX01JU0NfRVJSIHwgUkRBX1BDSVhfRVJSLAotCQkJCSZiYXIwLT5yZGFfZXJyX3JlZywgJnN3X3N0YXQtPnJkYV9lcnJfY250KTsKKwkJZG9fczJpb19jaGtfYWxhcm1fYml0KFJEQV9SWERuX0VDQ19TR19FUlIgfAorCQkJCSAgICAgIFJEQV9GUk1fRUNDX1NHX0VSUiB8CisJCQkJICAgICAgUkRBX01JU0NfRVJSIHwKKwkJCQkgICAgICBSREFfUENJWF9FUlIsCisJCQkJICAgICAgJmJhcjAtPnJkYV9lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5yZGFfZXJyX2NudCk7CiAJfQogCiAJaWYgKHZhbDY0ICYgUlhETUFfSU5UX1JUSV9JTlRfTSkgewotCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJUSV9TTV9FUlJfQUxBUk0sICZiYXIwLT5ydGlfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+cnRpX2Vycl9jbnQpKQorCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KFJUSV9TTV9FUlJfQUxBUk0sCisJCQkJCSAgJmJhcjAtPnJ0aV9lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5ydGlfZXJyX2NudCkpCiAJCQlnb3RvIHJlc2V0OwogCQlkb19zMmlvX2Noa19hbGFybV9iaXQoUlRJX0VDQ19TR19FUlIgfCBSVElfRUNDX0RCX0VSUiwKLQkJCQkmYmFyMC0+cnRpX2Vycl9yZWcsICZzd19zdGF0LT5ydGlfZXJyX2NudCk7CisJCQkJICAgICAgJmJhcjAtPnJ0aV9lcnJfcmVnLAorCQkJCSAgICAgICZzd19zdGF0LT5ydGlfZXJyX2NudCk7CiAJfQogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+bWFjX2ludF9zdGF0dXMpOwogCWlmICh2YWw2NCAmIE1BQ19JTlRfU1RBVFVTX1JNQUNfSU5UKSB7CiAJCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoUk1BQ19SWF9CVUZGX09WUk4gfCBSTUFDX1JYX1NNX0VSUiwKLQkJCQkmYmFyMC0+bWFjX3JtYWNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+bWFjX3JtYWNfZXJyX2NudCkpCisJCQkJCSAgJmJhcjAtPm1hY19ybWFjX2Vycl9yZWcsCisJCQkJCSAgJnN3X3N0YXQtPm1hY19ybWFjX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKLQkJZG9fczJpb19jaGtfYWxhcm1fYml0KFJNQUNfVU5VU0VEX0lOVHxSTUFDX1NJTkdMRV9FQ0NfRVJSfAotCQkJCVJNQUNfRE9VQkxFX0VDQ19FUlIsICZiYXIwLT5tYWNfcm1hY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5tYWNfcm1hY19lcnJfY250KTsKKwkJZG9fczJpb19jaGtfYWxhcm1fYml0KFJNQUNfVU5VU0VEX0lOVCB8CisJCQkJICAgICAgUk1BQ19TSU5HTEVfRUNDX0VSUiB8CisJCQkJICAgICAgUk1BQ19ET1VCTEVfRUNDX0VSUiwKKwkJCQkgICAgICAmYmFyMC0+bWFjX3JtYWNfZXJyX3JlZywKKwkJCQkgICAgICAmc3dfc3RhdC0+bWFjX3JtYWNfZXJyX2NudCk7CiAJfQogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+eGd4c19pbnRfc3RhdHVzKTsKIAlpZiAodmFsNjQgJiBYR1hTX0lOVF9TVEFUVVNfUlhHWFMpIHsKIAkJaWYgKGRvX3MyaW9fY2hrX2FsYXJtX2JpdChSWEdYU19FU1RPUkVfT0ZMT1cgfCBSWEdYU19SWF9TTV9FUlIsCi0JCQkJJmJhcjAtPnhneHNfcnhneHNfZXJyX3JlZywKLQkJCQkmc3dfc3RhdC0+eGd4c19yeGd4c19lcnJfY250KSkKKwkJCQkJICAmYmFyMC0+eGd4c19yeGd4c19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT54Z3hzX3J4Z3hzX2Vycl9jbnQpKQogCQkJZ290byByZXNldDsKIAl9CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5tY19pbnRfc3RhdHVzKTsKLQlpZih2YWw2NCAmIE1DX0lOVF9TVEFUVVNfTUNfSU5UKSB7Ci0JCWlmIChkb19zMmlvX2Noa19hbGFybV9iaXQoTUNfRVJSX1JFR19TTV9FUlIsICZiYXIwLT5tY19lcnJfcmVnLAotCQkJCSZzd19zdGF0LT5tY19lcnJfY250KSkKKwlpZiAodmFsNjQgJiBNQ19JTlRfU1RBVFVTX01DX0lOVCkgeworCQlpZiAoZG9fczJpb19jaGtfYWxhcm1fYml0KE1DX0VSUl9SRUdfU01fRVJSLAorCQkJCQkgICZiYXIwLT5tY19lcnJfcmVnLAorCQkJCQkgICZzd19zdGF0LT5tY19lcnJfY250KSkKIAkJCWdvdG8gcmVzZXQ7CiAKIAkJLyogSGFuZGxpbmcgRWNjIGVycm9ycyAqLwpAQCAtNDcxOCwxMCArNDc0MCwxMCBAQAogCQkJCQkgKiBSZXNldCBYZnJhbWVJIG9ubHkgaWYgY3JpdGljYWwgZXJyb3IKIAkJCQkJICovCiAJCQkJCWlmICh2YWw2NCAmCi0JCQkJCQkoTUNfRVJSX1JFR19NSVJJX0VDQ19EQl9FUlJfMCB8Ci0JCQkJCQlNQ19FUlJfUkVHX01JUklfRUNDX0RCX0VSUl8xKSkKLQkJCQkJCQkJZ290byByZXNldDsKLQkJCQkJfQorCQkJCQkgICAgKE1DX0VSUl9SRUdfTUlSSV9FQ0NfREJfRVJSXzAgfAorCQkJCQkgICAgIE1DX0VSUl9SRUdfTUlSSV9FQ0NfREJfRVJSXzEpKQorCQkJCQkJZ290byByZXNldDsKKwkJCQl9CiAJCQl9IGVsc2UKIAkJCQlzd19zdGF0LT5zaW5nbGVfZWNjX2VycnMrKzsKIAkJfQpAQCAtNDc1MCw3ICs0NzcyLDcgQEAKICAqLwogc3RhdGljIGlycXJldHVybl90IHMyaW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCWludCBpOwpAQCAtNDc2NSw4ICs0Nzg3LDggQEAKIAlpZiAoIWlzX3MyaW9fY2FyZF91cChzcCkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCW1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKIAljb25maWcgPSAmc3AtPmNvbmZpZzsKKwltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAKIAkvKgogCSAqIElkZW50aWZ5IHRoZSBjYXVzZSBmb3IgaW50ZXJydXB0IGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZQpAQCAtNDc3NywxNCArNDc5OSwxMSBAQAogCSAqLwogCXJlYXNvbiA9IHJlYWRxKCZiYXIwLT5nZW5lcmFsX2ludF9zdGF0dXMpOwogCi0JaWYgKHVubGlrZWx5KHJlYXNvbiA9PSBTMklPX01JTlVTX09ORSkgKSB7Ci0JCS8qIE5vdGhpbmcgbXVjaCBjYW4gYmUgZG9uZS4gR2V0IG91dCAqLwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQorCWlmICh1bmxpa2VseShyZWFzb24gPT0gUzJJT19NSU5VU19PTkUpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CS8qIE5vdGhpbmcgbXVjaCBjYW4gYmUgZG9uZS4gR2V0IG91dCAqLwogCi0JaWYgKHJlYXNvbiAmIChHRU5fSU5UUl9SWFRSQUZGSUMgfAotCQlHRU5fSU5UUl9UWFRSQUZGSUMgfCBHRU5fSU5UUl9UWFBJQykpCi0JeworCWlmIChyZWFzb24gJgorCSAgICAoR0VOX0lOVFJfUlhUUkFGRklDIHwgR0VOX0lOVFJfVFhUUkFGRklDIHwgR0VOX0lOVFJfVFhQSUMpKSB7CiAJCXdyaXRlcShTMklPX01JTlVTX09ORSwgJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOwogCiAJCWlmIChjb25maWctPm5hcGkpIHsKQEAgLTQ4MDMsOCArNDgyMiwxMSBAQAogCQkJaWYgKHJlYXNvbiAmIEdFTl9JTlRSX1JYVFJBRkZJQykKIAkJCQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5yeF90cmFmZmljX2ludCk7CiAKLQkJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspCi0JCQkJcnhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+cmluZ3NbaV0sIDApOworCQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgeworCQkJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCQkJcnhfaW50cl9oYW5kbGVyKHJpbmcsIDApOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTQ4MjUsMTYgKzQ4NDcsMTggQEAKIAkJICogUmVhbGxvY2F0ZSB0aGUgYnVmZmVycyBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpdHNlbGYuCiAJCSAqLwogCQlpZiAoIWNvbmZpZy0+bmFwaSkgewotCQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykKLQkJCQlzMmlvX2Noa19yeF9idWZmZXJzKHNwLCAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspIHsKKwkJCQlzdHJ1Y3QgcmluZ19pbmZvICpyaW5nID0gJm1hY19jb250cm9sLT5yaW5nc1tpXTsKKworCQkJCXMyaW9fY2hrX3J4X2J1ZmZlcnMoc3AsIHJpbmcpOworCQkJfQogCQl9CiAJCXdyaXRlcShzcC0+Z2VuZXJhbF9pbnRfbWFzaywgJmJhcjAtPmdlbmVyYWxfaW50X21hc2spOwogCQlyZWFkbCgmYmFyMC0+Z2VuZXJhbF9pbnRfc3RhdHVzKTsKIAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQl9Ci0JZWxzZSBpZiAoIXJlYXNvbikgeworCX0gZWxzZSBpZiAoIXJlYXNvbikgewogCQkvKiBUaGUgaW50ZXJydXB0IHdhcyBub3QgcmFpc2VkIGJ5IHVzICovCiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CkBAIC00ODY0LDcgKzQ4ODgsNyBAQAogCQkJY250Kys7CiAJCQlpZiAoY250ID09IDUpCiAJCQkJYnJlYWs7IC8qIFVwZHQgZmFpbGVkICovCi0JCX0gd2hpbGUoMSk7CisJCX0gd2hpbGUgKDEpOwogCX0KIH0KIApAQCAtNDg4MSw1MyArNDkwNSw0NiBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzMmlvX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7Ci0Jc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOworCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZyA9ICZzcC0+Y29uZmlnOworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOworCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0cyA9IG1hY19jb250cm9sLT5zdGF0c19pbmZvOwogCWludCBpOwogCi0KLQltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7Ci0JY29uZmlnID0gJnNwLT5jb25maWc7Ci0KIAkvKiBDb25maWd1cmUgU3RhdHMgZm9yIGltbWVkaWF0ZSB1cGR0ICovCiAJczJpb191cGR0X3N0YXRzKHNwKTsKIAogCS8qIFVzaW5nIHNwLT5zdGF0cyBhcyBhIHN0YWdpbmcgYXJlYSwgYmVjYXVzZSByZXNldCAoZHVlIHRvIG10dQogCSAgIGNoYW5nZSwgZm9yIGV4YW1wbGUpIHdpbGwgY2xlYXIgc29tZSBoYXJkd2FyZSBjb3VudGVycyAqLwotCWRldi0+c3RhdHMudHhfcGFja2V0cyArPQotCQlsZTMyX3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+dG1hY19mcm1zKSAtIAorCWRldi0+c3RhdHMudHhfcGFja2V0cyArPSBsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19mcm1zKSAtCiAJCXNwLT5zdGF0cy50eF9wYWNrZXRzOwotCXNwLT5zdGF0cy50eF9wYWNrZXRzID0KLQkJbGUzMl90b19jcHUobWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnRtYWNfZnJtcyk7Ci0JZGV2LT5zdGF0cy50eF9lcnJvcnMgKz0KLQkJbGUzMl90b19jcHUobWFjX2NvbnRyb2wtPnN0YXRzX2luZm8tPnRtYWNfYW55X2Vycl9mcm1zKSAtCisJc3AtPnN0YXRzLnR4X3BhY2tldHMgPSBsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19mcm1zKTsKKworCWRldi0+c3RhdHMudHhfZXJyb3JzICs9IGxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2FueV9lcnJfZnJtcykgLQogCQlzcC0+c3RhdHMudHhfZXJyb3JzOwotCXNwLT5zdGF0cy50eF9lcnJvcnMgPQotCQlsZTMyX3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+dG1hY19hbnlfZXJyX2ZybXMpOwotCWRldi0+c3RhdHMucnhfZXJyb3JzICs9Ci0JCWxlNjRfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT5ybWFjX2Ryb3BfZnJtcykgLQorCXNwLT5zdGF0cy50eF9lcnJvcnMgPSBsZTMyX3RvX2NwdShzdGF0cy0+dG1hY19hbnlfZXJyX2ZybXMpOworCisJZGV2LT5zdGF0cy5yeF9lcnJvcnMgKz0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZHJvcF9mcm1zKSAtCiAJCXNwLT5zdGF0cy5yeF9lcnJvcnM7Ci0Jc3AtPnN0YXRzLnJ4X2Vycm9ycyA9Ci0JCWxlNjRfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT5ybWFjX2Ryb3BfZnJtcyk7Ci0JZGV2LT5zdGF0cy5tdWx0aWNhc3QgPQotCQlsZTMyX3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY192bGRfbWNzdF9mcm1zKSAtIAorCXNwLT5zdGF0cy5yeF9lcnJvcnMgPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19kcm9wX2ZybXMpOworCisJZGV2LT5zdGF0cy5tdWx0aWNhc3QgPSBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY192bGRfbWNzdF9mcm1zKSAtCiAJCXNwLT5zdGF0cy5tdWx0aWNhc3Q7Ci0Jc3AtPnN0YXRzLm11bHRpY2FzdCA9Ci0JCWxlMzJfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT5ybWFjX3ZsZF9tY3N0X2ZybXMpOwotCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9Ci0JCWxlNjRfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT5ybWFjX2xvbmdfZnJtcykgLSAKKwlzcC0+c3RhdHMubXVsdGljYXN0ID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdmxkX21jc3RfZnJtcyk7CisKKwlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19sb25nX2ZybXMpIC0KIAkJc3AtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnM7Ci0Jc3AtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPQotCQlsZTY0X3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY19sb25nX2ZybXMpOworCXNwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfbG9uZ19mcm1zKTsKIAogCS8qIGNvbGxlY3QgcGVyLXJpbmcgcnhfcGFja2V0cyBhbmQgcnhfYnl0ZXMgKi8KIAlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSBkZXYtPnN0YXRzLnJ4X2J5dGVzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCWRldi0+c3RhdHMucnhfcGFja2V0cyArPSBtYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfcGFja2V0czsKLQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBtYWNfY29udHJvbC0+cmluZ3NbaV0ucnhfYnl0ZXM7CisJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCWRldi0+c3RhdHMucnhfcGFja2V0cyArPSByaW5nLT5yeF9wYWNrZXRzOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHJpbmctPnJ4X2J5dGVzOwogCX0KIAotCXJldHVybiAoJmRldi0+c3RhdHMpOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogLyoqCkBAIC00OTUwLDcgKzQ5NjcsNyBAQAogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCXU2NCB2YWw2NCA9IDAsIG11bHRpX21hYyA9IDB4MDEwMjAzMDQwNTA2VUxMLCBtYXNrID0KLQkgICAgMHhmZWZmZmZmZmZmZmZVTEw7CisJCTB4ZmVmZmZmZmZmZmZmVUxMOwogCXU2NCBkaXNfYWRkciA9IFMySU9fRElTQUJMRV9NQUNfRU5UUlksIG1hY19hZGRyID0gMDsKIAl2b2lkIF9faW9tZW0gKmFkZDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmc3AtPmNvbmZpZzsKQEAgLTQ5NjIsMTMgKzQ5NzksMTMgQEAKIAkJd3JpdGVxKFJNQUNfQUREUl9EQVRBMV9NRU1fTUFTSyhtYXNrKSwKIAkJICAgICAgICZiYXIwLT5ybWFjX2FkZHJfZGF0YTFfbWVtKTsKIAkJdmFsNjQgPSBSTUFDX0FERFJfQ01EX01FTV9XRSB8Ci0JCSAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8Ci0JCSAgICBSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQoY29uZmlnLT5tYXhfbWNfYWRkciAtIDEpOworCQkJUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAorCQkJUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKGNvbmZpZy0+bWF4X21jX2FkZHIgLSAxKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0pOwogCQkvKiBXYWl0IHRpbGwgY29tbWFuZCBjb21wbGV0ZXMgKi8KIAkJd2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKLQkJCQkJUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCi0JCQkJCVMySU9fQklUX1JFU0VUKTsKKwkJCQkgICAgICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKKwkJCQkgICAgICBTMklPX0JJVF9SRVNFVCk7CiAKIAkJc3AtPm1fY2FzdF9mbGcgPSAxOwogCQlzcC0+YWxsX211bHRpX3BvcyA9IGNvbmZpZy0+bWF4X21jX2FkZHIgLSAxOwpAQCAtNDk3OSwxMyArNDk5NiwxMyBAQAogCQl3cml0ZXEoUk1BQ19BRERSX0RBVEExX01FTV9NQVNLKDB4MCksCiAJCSAgICAgICAmYmFyMC0+cm1hY19hZGRyX2RhdGExX21lbSk7CiAJCXZhbDY0ID0gUk1BQ19BRERSX0NNRF9NRU1fV0UgfAotCQkgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAotCQkgICAgUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKHNwLT5hbGxfbXVsdGlfcG9zKTsKKwkJCVJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKKwkJCVJNQUNfQUREUl9DTURfTUVNX09GRlNFVChzcC0+YWxsX211bHRpX3Bvcyk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAkJLyogV2FpdCB0aWxsIGNvbW1hbmQgY29tcGxldGVzICovCiAJCXdhaXRfZm9yX2NtZF9jb21wbGV0ZSgmYmFyMC0+cm1hY19hZGRyX2NtZF9tZW0sCi0JCQkJCVJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAotCQkJCQlTMklPX0JJVF9SRVNFVCk7CisJCQkJICAgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCisJCQkJICAgICAgUzJJT19CSVRfUkVTRVQpOwogCiAJCXNwLT5tX2Nhc3RfZmxnID0gMDsKIAkJc3AtPmFsbF9tdWx0aV9wb3MgPSAwOwpAQCAtNDk5OCw3ICs1MDE1LDcgQEAKIAkJdmFsNjQgfD0gTUFDX0NGR19STUFDX1BST01fRU5BQkxFOwogCiAJCXdyaXRlcShSTUFDX0NGR19LRVkoMHg0QzBEKSwgJmJhcjAtPnJtYWNfY2ZnX2tleSk7Ci0JCXdyaXRlbCgodTMyKSB2YWw2NCwgYWRkKTsKKwkJd3JpdGVsKCh1MzIpdmFsNjQsIGFkZCk7CiAJCXdyaXRlcShSTUFDX0NGR19LRVkoMHg0QzBEKSwgJmJhcjAtPnJtYWNfY2ZnX2tleSk7CiAJCXdyaXRlbCgodTMyKSAodmFsNjQgPj4gMzIpLCAoYWRkICsgNCkpOwogCkBAIC01MDIwLDcgKzUwMzcsNyBAQAogCQl2YWw2NCAmPSB+TUFDX0NGR19STUFDX1BST01fRU5BQkxFOwogCiAJCXdyaXRlcShSTUFDX0NGR19LRVkoMHg0QzBEKSwgJmJhcjAtPnJtYWNfY2ZnX2tleSk7Ci0JCXdyaXRlbCgodTMyKSB2YWw2NCwgYWRkKTsKKwkJd3JpdGVsKCh1MzIpdmFsNjQsIGFkZCk7CiAJCXdyaXRlcShSTUFDX0NGR19LRVkoMHg0QzBEKSwgJmJhcjAtPnJtYWNfY2ZnX2tleSk7CiAJCXdyaXRlbCgodTMyKSAodmFsNjQgPj4gMzIpLCAoYWRkICsgNCkpOwogCkBAIC01MDMzLDE4ICs1MDUwLDE3IEBACiAKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+bWFjX2NmZyk7CiAJCXNwLT5wcm9taXNjX2ZsZyA9IDA7Ci0JCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBsZWZ0IHByb21pc2N1b3VzIG1vZGVcbiIsCi0JCQkgIGRldi0+bmFtZSk7CisJCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBsZWZ0IHByb21pc2N1b3VzIG1vZGVcbiIsIGRldi0+bmFtZSk7CiAJfQogCiAJLyogIFVwZGF0ZSBpbmRpdmlkdWFsIE1fQ0FTVCBhZGRyZXNzIGxpc3QgKi8KIAlpZiAoKCFzcC0+bV9jYXN0X2ZsZykgJiYgZGV2LT5tY19jb3VudCkgewogCQlpZiAoZGV2LT5tY19jb3VudCA+CiAJCSAgICAoY29uZmlnLT5tYXhfbWNfYWRkciAtIGNvbmZpZy0+bWF4X21hY19hZGRyKSkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTm8gbW9yZSBSeCBmaWx0ZXJzICIsCisJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkgICIlczogTm8gbW9yZSBSeCBmaWx0ZXJzIGNhbiBiZSBhZGRlZCAtICIKKwkJCQkgICJwbGVhc2UgZW5hYmxlIEFMTF9NVUxUSSBpbnN0ZWFkXG4iLAogCQkJCSAgZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiY2FuIGJlIGFkZGVkLCBwbGVhc2UgZW5hYmxlICIpOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJBTExfTVVMVEkgaW5zdGVhZFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtNTA1NiwyMCArNTA3MiwyMCBAQAogCQkJd3JpdGVxKFJNQUNfQUREUl9EQVRBMF9NRU1fQUREUihkaXNfYWRkciksCiAJCQkgICAgICAgJmJhcjAtPnJtYWNfYWRkcl9kYXRhMF9tZW0pOwogCQkJd3JpdGVxKFJNQUNfQUREUl9EQVRBMV9NRU1fTUFTSygwVUxMKSwKLQkJCQkmYmFyMC0+cm1hY19hZGRyX2RhdGExX21lbSk7CisJCQkgICAgICAgJmJhcjAtPnJtYWNfYWRkcl9kYXRhMV9tZW0pOwogCQkJdmFsNjQgPSBSTUFDX0FERFJfQ01EX01FTV9XRSB8Ci0JCQkgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAotCQkJICAgIFJNQUNfQUREUl9DTURfTUVNX09GRlNFVAotCQkJICAgIChjb25maWctPm1jX3N0YXJ0X29mZnNldCArIGkpOworCQkJCVJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKKwkJCQlSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQKKwkJCQkoY29uZmlnLT5tY19zdGFydF9vZmZzZXQgKyBpKTsKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAogCQkJLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0ZXMgKi8KIAkJCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAotCQkJCQlSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKLQkJCQkJUzJJT19CSVRfUkVTRVQpKSB7Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogQWRkaW5nICIsCisJCQkJCQkgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAorCQkJCQkJICBTMklPX0JJVF9SRVNFVCkpIHsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkJICAiJXM6IEFkZGluZyBNdWx0aWNhc3RzIGZhaWxlZFxuIiwKIAkJCQkJICBkZXYtPm5hbWUpOwotCQkJCURCR19QUklOVChFUlJfREJHLCAiTXVsdGljYXN0cyBmYWlsZWRcbiIpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpAQCAtNTA4OCwyMCArNTEwNCwyMCBAQAogCQkJd3JpdGVxKFJNQUNfQUREUl9EQVRBMF9NRU1fQUREUihtYWNfYWRkciksCiAJCQkgICAgICAgJmJhcjAtPnJtYWNfYWRkcl9kYXRhMF9tZW0pOwogCQkJd3JpdGVxKFJNQUNfQUREUl9EQVRBMV9NRU1fTUFTSygwVUxMKSwKLQkJCQkmYmFyMC0+cm1hY19hZGRyX2RhdGExX21lbSk7CisJCQkgICAgICAgJmJhcjAtPnJtYWNfYWRkcl9kYXRhMV9tZW0pOwogCQkJdmFsNjQgPSBSTUFDX0FERFJfQ01EX01FTV9XRSB8Ci0JCQkgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAotCQkJICAgIFJNQUNfQUREUl9DTURfTUVNX09GRlNFVAotCQkJICAgIChpICsgY29uZmlnLT5tY19zdGFydF9vZmZzZXQpOworCQkJCVJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKKwkJCQlSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQKKwkJCQkoaSArIGNvbmZpZy0+bWNfc3RhcnRfb2Zmc2V0KTsKIAkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAogCQkJLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0ZXMgKi8KIAkJCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAotCQkJCQlSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKLQkJCQkJUzJJT19CSVRfUkVTRVQpKSB7Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogQWRkaW5nICIsCisJCQkJCQkgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAorCQkJCQkJICBTMklPX0JJVF9SRVNFVCkpIHsKKwkJCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCQkJICAiJXM6IEFkZGluZyBNdWx0aWNhc3RzIGZhaWxlZFxuIiwKIAkJCQkJICBkZXYtPm5hbWUpOwotCQkJCURCR19QUklOVChFUlJfREJHLCAiTXVsdGljYXN0cyBmYWlsZWRcbiIpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpAQCAtNTEzNSwxMSArNTE1MSwxMSBAQAogCS8qIHJlc3RvcmUgdW5pY2FzdCBtYWMgYWRkcmVzcyAqLwogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgY29uZmlnLT5tYXhfbWFjX2FkZHI7IG9mZnNldCsrKQogCQlkb19zMmlvX3Byb2dfdW5pY2FzdChzcC0+ZGV2LAotCQkJc3AtPmRlZl9tYWNfYWRkcltvZmZzZXRdLm1hY19hZGRyKTsKKwkJCQkgICAgIHNwLT5kZWZfbWFjX2FkZHJbb2Zmc2V0XS5tYWNfYWRkcik7CiAKIAkvKiByZXN0b3JlIG11bHRpY2FzdCBtYWMgYWRkcmVzcyAqLwogCWZvciAob2Zmc2V0ID0gY29uZmlnLT5tY19zdGFydF9vZmZzZXQ7Ci0JCW9mZnNldCA8IGNvbmZpZy0+bWF4X21jX2FkZHI7IG9mZnNldCsrKQorCSAgICAgb2Zmc2V0IDwgY29uZmlnLT5tYXhfbWNfYWRkcjsgb2Zmc2V0KyspCiAJCWRvX3MyaW9fYWRkX21jKHNwLCBzcC0+ZGVmX21hY19hZGRyW29mZnNldF0ubWFjX2FkZHIpOwogfQogCkBAIC01MTY5LDEzICs1MTg1LDEzIEBACiAJfQogCWlmIChpID09IGNvbmZpZy0+bWF4X21jX2FkZHIpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkiQ0FNIGZ1bGwgbm8gc3BhY2UgbGVmdCBmb3IgbXVsdGljYXN0IE1BQ1xuIik7CisJCQkgICJDQU0gZnVsbCBubyBzcGFjZSBsZWZ0IGZvciBtdWx0aWNhc3QgTUFDXG4iKTsKIAkJcmV0dXJuIEZBSUxVUkU7CiAJfQogCS8qIFVwZGF0ZSB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIHdpdGggdGhpcyBuZXcgbWFjIGFkZHJlc3MgKi8KIAlkb19zMmlvX2NvcHlfbWFjX2FkZHIoc3AsIGksIG1hY19hZGRyKTsKIAotCXJldHVybiAoZG9fczJpb19hZGRfbWFjKHNwLCBtYWNfYWRkciwgaSkpOworCXJldHVybiBkb19zMmlvX2FkZF9tYWMoc3AsIG1hY19hZGRyLCBpKTsKIH0KIAogLyogYWRkIE1BQyBhZGRyZXNzIHRvIENBTSAqLwpAQCAtNTE4NSwxNyArNTIwMSwxNiBAQAogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCiAJd3JpdGVxKFJNQUNfQUREUl9EQVRBMF9NRU1fQUREUihhZGRyKSwKLQkJJmJhcjAtPnJtYWNfYWRkcl9kYXRhMF9tZW0pOworCSAgICAgICAmYmFyMC0+cm1hY19hZGRyX2RhdGEwX21lbSk7CiAKLQl2YWw2NCA9Ci0JCVJNQUNfQUREUl9DTURfTUVNX1dFIHwgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAorCXZhbDY0ID0JUk1BQ19BRERSX0NNRF9NRU1fV0UgfCBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8CiAJCVJNQUNfQUREUl9DTURfTUVNX09GRlNFVChvZmYpOwogCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtKTsKIAogCS8qIFdhaXQgdGlsbCBjb21tYW5kIGNvbXBsZXRlcyAqLwogCWlmICh3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJtYWNfYWRkcl9jbWRfbWVtLAotCQlSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKLQkJUzJJT19CSVRfUkVTRVQpKSB7CisJCQkJICBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORywKKwkJCQkgIFMySU9fQklUX1JFU0VUKSkgewogCQlEQkdfUFJJTlQoSU5GT19EQkcsICJkb19zMmlvX2FkZF9tYWMgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIEZBSUxVUkU7CiAJfQpAQCAtNTIwOSw3ICs1MjI0LDcgQEAKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmc3AtPmNvbmZpZzsKIAogCWZvciAob2Zmc2V0ID0gMTsKLQkJb2Zmc2V0IDwgY29uZmlnLT5tYXhfbWNfYWRkcjsgb2Zmc2V0KyspIHsKKwkgICAgIG9mZnNldCA8IGNvbmZpZy0+bWF4X21jX2FkZHI7IG9mZnNldCsrKSB7CiAJCXRtcDY0ID0gZG9fczJpb19yZWFkX3VuaWNhc3RfbWMoc3AsIG9mZnNldCk7CiAJCWlmICh0bXA2NCA9PSBhZGRyKSB7CiAJCQkvKiBkaXNhYmxlIHRoZSBlbnRyeSBieSB3cml0aW5nICAweGZmZmZmZmZmZmZmZlVMTCAqLwpAQCAtNTIyMSw3ICs1MjM2LDcgQEAKIAkJfQogCX0KIAlEQkdfUFJJTlQoRVJSX0RCRywgIk1BQyBhZGRyZXNzIDB4JWxseCBub3QgZm91bmQgaW4gQ0FNXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyKTsKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKWFkZHIpOwogCXJldHVybiBGQUlMVVJFOwogfQogCkBAIC01MjMyLDIwICs1MjQ3LDIwIEBACiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAKIAkvKiByZWFkIG1hYyBhZGRyICovCi0JdmFsNjQgPQotCQlSTUFDX0FERFJfQ01EX01FTV9SRCB8IFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9ORVdfQ01EIHwKKwl2YWw2NCA9CVJNQUNfQUREUl9DTURfTUVNX1JEIHwgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX05FV19DTUQgfAogCQlSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQob2Zmc2V0KTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7CiAKIAkvKiBXYWl0IHRpbGwgY29tbWFuZCBjb21wbGV0ZXMgKi8KIAlpZiAod2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKLQkJUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCi0JCVMySU9fQklUX1JFU0VUKSkgeworCQkJCSAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsCisJCQkJICBTMklPX0JJVF9SRVNFVCkpIHsKIAkJREJHX1BSSU5UKElORk9fREJHLCAiZG9fczJpb19yZWFkX3VuaWNhc3RfbWMgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIEZBSUxVUkU7CiAJfQogCXRtcDY0ID0gcmVhZHEoJmJhcjAtPnJtYWNfYWRkcl9kYXRhMF9tZW0pOwotCXJldHVybiAodG1wNjQgPj4gMTYpOworCisJcmV0dXJuIHRtcDY0ID4+IDE2OwogfQogCiAvKioKQEAgLTUyNjIsNyArNTI3Nyw3IEBACiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCiAJLyogc3RvcmUgdGhlIE1BQyBhZGRyZXNzIGluIENBTSAqLwotCXJldHVybiAoZG9fczJpb19wcm9nX3VuaWNhc3QoZGV2LCBkZXYtPmRldl9hZGRyKSk7CisJcmV0dXJuIGRvX3MyaW9fcHJvZ191bmljYXN0KGRldiwgZGV2LT5kZXZfYWRkcik7CiB9CiAvKioKICAqICBkb19zMmlvX3Byb2dfdW5pY2FzdCAtIFByb2dyYW1zIHRoZSBYZnJhbWUgbWFjIGFkZHJlc3MKQEAgLTUyODMsMTAgKzUyOTgsMTAgQEAKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmc3AtPmNvbmZpZzsKIAogCS8qCi0JKiBTZXQgdGhlIG5ldyBNQUMgYWRkcmVzcyBhcyB0aGUgbmV3IHVuaWNhc3QgZmlsdGVyIGFuZCByZWZsZWN0IHRoaXMKLQkqIGNoYW5nZSBvbiB0aGUgZGV2aWNlIGFkZHJlc3MgcmVnaXN0ZXJlZCB3aXRoIHRoZSBPUy4gSXQgd2lsbCBiZQotCSogYXQgb2Zmc2V0IDAuCi0JKi8KKwkgKiBTZXQgdGhlIG5ldyBNQUMgYWRkcmVzcyBhcyB0aGUgbmV3IHVuaWNhc3QgZmlsdGVyIGFuZCByZWZsZWN0IHRoaXMKKwkgKiBjaGFuZ2Ugb24gdGhlIGRldmljZSBhZGRyZXNzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgT1MuIEl0IHdpbGwgYmUKKwkgKiBhdCBvZmZzZXQgMC4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgewogCQltYWNfYWRkciA8PD0gODsKIAkJbWFjX2FkZHIgfD0gYWRkcltpXTsKQEAgLTUzMDYsOCArNTMyMSw4IEBACiAKIAkJaWYgKHRtcDY0ID09IG1hY19hZGRyKSB7CiAJCQlEQkdfUFJJTlQoSU5GT19EQkcsCi0JCQkiTUFDIGFkZHI6MHglbGx4IGFscmVhZHkgcHJlc2VudCBpbiBDQU1cbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKW1hY19hZGRyKTsKKwkJCQkgICJNQUMgYWRkcjoweCVsbHggYWxyZWFkeSBwcmVzZW50IGluIENBTVxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbWFjX2FkZHIpOwogCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCX0KIAl9CkBAIC01MzE3LDcgKzUzMzIsOCBAQAogCX0KIAkvKiBVcGRhdGUgdGhlIGludGVybmFsIHN0cnVjdHVyZSB3aXRoIHRoaXMgbmV3IG1hYyBhZGRyZXNzICovCiAJZG9fczJpb19jb3B5X21hY19hZGRyKHNwLCBpLCBtYWNfYWRkcik7Ci0JcmV0dXJuIChkb19zMmlvX2FkZF9tYWMoc3AsIG1hY19hZGRyLCBpKSk7CisKKwlyZXR1cm4gZG9fczJpb19hZGRfbWFjKHNwLCBtYWNfYWRkciwgaSk7CiB9CiAKIC8qKgpAQCAtNTMzMCwxNCArNTM0NiwxNSBAQAogICogdGhlIE5JQy4KICAqIFJldHVybiB2YWx1ZToKICAqIDAgb24gc3VjY2Vzcy4KLSovCisgKi8KIAogc3RhdGljIGludCBzMmlvX2V0aHRvb2xfc3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmluZm8pCiB7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAJaWYgKChpbmZvLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB8fAotCSAgICAoaW5mby0+c3BlZWQgIT0gU1BFRURfMTAwMDApIHx8IChpbmZvLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQorCSAgICAoaW5mby0+c3BlZWQgIT0gU1BFRURfMTAwMDApIHx8CisJICAgIChpbmZvLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIHsKIAkJczJpb19jbG9zZShzcC0+ZGV2KTsKQEAgLTU0MTgsMTQgKzU0MzUsMTQgQEAKICAqICBidWZmZXIgYXJlYS4KICAqIFJldHVybiB2YWx1ZSA6CiAgKiB2b2lkIC4KLSovCisgKi8KIAogc3RhdGljIHZvaWQgczJpb19ldGh0b29sX2dyZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqc3BhY2UpCiB7CiAJaW50IGk7CiAJdTY0IHJlZzsKLQl1OCAqcmVnX3NwYWNlID0gKHU4ICopIHNwYWNlOworCXU4ICpyZWdfc3BhY2UgPSAodTggKilzcGFjZTsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJlZ3MtPmxlbiA9IFhFTkFfUkVHX1NQQUNFOwpAQCAtNTQ0NSwxNyArNTQ2MiwxNyBAQAogICogYWRhcHRlciBMRUQgYml0IG9mIHRoZSBhZGFwdGVyIGNvbnRyb2wgYml0IHRvIHNldC9yZXNldCBldmVyeSB0aW1lIG9uCiAgKiBpbnZvY2F0aW9uLiBUaGUgdGltZXIgaXMgc2V0IGZvciAxLzIgYSBzZWNvbmQsIGhlbmNlIHRoYSBOSUMgYmxpbmtzCiAgKiAgb25jZSBldmVyeSBzZWNvbmQuCi0qLworICovCiBzdGF0aWMgdm9pZCBzMmlvX3BoeV9pZCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IHMyaW9fbmljICpzcCA9IChzdHJ1Y3QgczJpb19uaWMgKikgZGF0YTsKKwlzdHJ1Y3QgczJpb19uaWMgKnNwID0gKHN0cnVjdCBzMmlvX25pYyAqKWRhdGE7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAJdTY0IHZhbDY0ID0gMDsKIAl1MTYgc3ViaWQ7CiAKIAlzdWJpZCA9IHNwLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwogCWlmICgoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHx8Ci0JCSAgICgoc3ViaWQgJiAweEZGKSA+PSAweDA3KSkgeworCSAgICAoKHN1YmlkICYgMHhGRikgPj0gMHgwNykpIHsKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAkJdmFsNjQgXj0gR1BJT19DVFJMX0dQSU9fMDsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19jb250cm9sKTsKQEAgLTU0OTIsMTkgKzU1MDksMTcgQEAKIAogCXN1YmlkID0gc3AtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CiAJbGFzdF9ncGlvX2N0cmxfdmFsID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7Ci0JaWYgKChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lfREVWSUNFKSAmJgotCQkoKHN1YmlkICYgMHhGRikgPCAweDA3KSkgeworCWlmICgoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JX0RFVklDRSkgJiYgKChzdWJpZCAmIDB4RkYpIDwgMHgwNykpIHsKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9jb250cm9sKTsKIAkJaWYgKCEodmFsNjQgJiBBREFQVEVSX0NOVExfRU4pKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiQWRhcHRlciBMaW5rIGRvd24sIGNhbm5vdCBibGluayBMRURcbiIpOworCQkJcHJfZXJyKCJBZGFwdGVyIExpbmsgZG93biwgY2Fubm90IGJsaW5rIExFRFxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCX0KIAlpZiAoc3AtPmlkX3RpbWVyLmZ1bmN0aW9uID09IE5VTEwpIHsKIAkJaW5pdF90aW1lcigmc3AtPmlkX3RpbWVyKTsKIAkJc3AtPmlkX3RpbWVyLmZ1bmN0aW9uID0gczJpb19waHlfaWQ7Ci0JCXNwLT5pZF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHNwOworCQlzcC0+aWRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNwOwogCX0KIAltb2RfdGltZXIoJnNwLT5pZF90aW1lciwgamlmZmllcyk7CiAJaWYgKGRhdGEpCkBAIC01NTIyLDEwICs1NTM3LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIHMyaW9fZXRodG9vbF9ncmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpLHR4X2Rlc2NfY291bnQ9MCxyeF9kZXNjX2NvdW50PTA7CisJaW50IGksIHR4X2Rlc2NfY291bnQgPSAwLCByeF9kZXNjX2NvdW50ID0gMDsKIAogCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkKIAkJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JYX0RFU0NfMTsKQEAgLTU1MzYsNyArNTU1MSw3IEBACiAJZm9yIChpID0gMCA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtIDsgaSsrKQogCQl0eF9kZXNjX2NvdW50ICs9IHNwLT5jb25maWcudHhfY2ZnW2ldLmZpZm9fbGVuOwogCi0JREJHX1BSSU5UKElORk9fREJHLCJcbm1heCB0eGRzIDogJWRcbiIsc3AtPmNvbmZpZy5tYXhfdHhkcyk7CisJREJHX1BSSU5UKElORk9fREJHLCAibWF4IHR4ZHM6ICVkXG4iLCBzcC0+Y29uZmlnLm1heF90eGRzKTsKIAllcmluZy0+dHhfcGVuZGluZyA9IHR4X2Rlc2NfY291bnQ7CiAJcnhfZGVzY19jb3VudCA9IDA7CiAJZm9yIChpID0gMCA7IGkgPCBzcC0+Y29uZmlnLnJ4X3JpbmdfbnVtIDsgaSsrKQpAQCAtNTU0Niw3ICs1NTYxLDcgQEAKIAogCWVyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKIAllcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKLQlpZihzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfMSkKKwlpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzEpCiAJCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9SWF9ERVNDXzE7CiAJZWxzZSBpZiAoc3AtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKQogCQllcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfUlhfREVTQ18yOwpAQCAtNTU5MSw3ICs1NjA2LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9zZXRwYXVzZV9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXApCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZXApCiB7CiAJdTY0IHZhbDY0OwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNTYyNyw3ICs1NjQyLDcgQEAKICAqLwogCiAjZGVmaW5lIFMySU9fREVWX0lECQk1Ci1zdGF0aWMgaW50IHJlYWRfZWVwcm9tKHN0cnVjdCBzMmlvX25pYyAqIHNwLCBpbnQgb2ZmLCB1NjQgKiBkYXRhKQorc3RhdGljIGludCByZWFkX2VlcHJvbShzdHJ1Y3QgczJpb19uaWMgKnNwLCBpbnQgb2ZmLCB1NjQgKmRhdGEpCiB7CiAJaW50IHJldCA9IC0xOwogCXUzMiBleGl0X2NudCA9IDA7CkBAIC01NjM1LDkgKzU2NTAsMTEgQEAKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAogCWlmIChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lfREVWSUNFKSB7Ci0JCXZhbDY0ID0gSTJDX0NPTlRST0xfREVWX0lEKFMySU9fREVWX0lEKSB8IEkyQ19DT05UUk9MX0FERFIob2ZmKSB8Ci0JCSAgICBJMkNfQ09OVFJPTF9CWVRFX0NOVCgweDMpIHwgSTJDX0NPTlRST0xfUkVBRCB8Ci0JCSAgICBJMkNfQ09OVFJPTF9DTlRMX1NUQVJUOworCQl2YWw2NCA9IEkyQ19DT05UUk9MX0RFVl9JRChTMklPX0RFVl9JRCkgfAorCQkJSTJDX0NPTlRST0xfQUREUihvZmYpIHwKKwkJCUkyQ19DT05UUk9MX0JZVEVfQ05UKDB4MykgfAorCQkJSTJDX0NPTlRST0xfUkVBRCB8CisJCQlJMkNfQ09OVFJPTF9DTlRMX1NUQVJUOwogCQlTUEVDSUFMX1JFR19XUklURSh2YWw2NCwgJmJhcjAtPmkyY19jb250cm9sLCBMRik7CiAKIAkJd2hpbGUgKGV4aXRfY250IDwgNSkgewpAQCAtNTY5MiwxNiArNTcwOSwxOCBAQAogICogIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KICAqLwogCi1zdGF0aWMgaW50IHdyaXRlX2VlcHJvbShzdHJ1Y3QgczJpb19uaWMgKiBzcCwgaW50IG9mZiwgdTY0IGRhdGEsIGludCBjbnQpCitzdGF0aWMgaW50IHdyaXRlX2VlcHJvbShzdHJ1Y3QgczJpb19uaWMgKnNwLCBpbnQgb2ZmLCB1NjQgZGF0YSwgaW50IGNudCkKIHsKIAlpbnQgZXhpdF9jbnQgPSAwLCByZXQgPSAtMTsKIAl1NjQgdmFsNjQ7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAKIAlpZiAoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JX0RFVklDRSkgewotCQl2YWw2NCA9IEkyQ19DT05UUk9MX0RFVl9JRChTMklPX0RFVl9JRCkgfCBJMkNfQ09OVFJPTF9BRERSKG9mZikgfAotCQkgICAgSTJDX0NPTlRST0xfQllURV9DTlQoY250KSB8IEkyQ19DT05UUk9MX1NFVF9EQVRBKCh1MzIpZGF0YSkgfAotCQkgICAgSTJDX0NPTlRST0xfQ05UTF9TVEFSVDsKKwkJdmFsNjQgPSBJMkNfQ09OVFJPTF9ERVZfSUQoUzJJT19ERVZfSUQpIHwKKwkJCUkyQ19DT05UUk9MX0FERFIob2ZmKSB8CisJCQlJMkNfQ09OVFJPTF9CWVRFX0NOVChjbnQpIHwKKwkJCUkyQ19DT05UUk9MX1NFVF9EQVRBKCh1MzIpZGF0YSkgfAorCQkJSTJDX0NPTlRST0xfQ05UTF9TVEFSVDsKIAkJU1BFQ0lBTF9SRUdfV1JJVEUodmFsNjQsICZiYXIwLT5pMmNfY29udHJvbCwgTEYpOwogCiAJCXdoaWxlIChleGl0X2NudCA8IDUpIHsKQEAgLTU3MTgsNyArNTczNyw3IEBACiAKIAlpZiAoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKIAkJaW50IHdyaXRlX2NudCA9IChjbnQgPT0gOCkgPyAwIDogY250OwotCQl3cml0ZXEoU1BJX0RBVEFfV1JJVEUoZGF0YSwoY250PDwzKSksICZiYXIwLT5zcGlfZGF0YSk7CisJCXdyaXRlcShTUElfREFUQV9XUklURShkYXRhLCAoY250IDw8IDMpKSwgJmJhcjAtPnNwaV9kYXRhKTsKIAogCQl2YWw2NCA9IFNQSV9DT05UUk9MX0tFWSgweDkpIHwgU1BJX0NPTlRST0xfU0VMMSB8CiAJCQlTUElfQ09OVFJPTF9CWVRFQ05UKHdyaXRlX2NudCkgfApAQCAtNTc0NSwxNCArNTc2NCwxNCBAQAogewogCXU4ICp2cGRfZGF0YTsKIAl1OCBkYXRhOwotCWludCBpPTAsIGNudCwgZmFpbCA9IDA7CisJaW50IGkgPSAwLCBjbnQsIGZhaWwgPSAwOwogCWludCB2cGRfYWRkciA9IDB4ODA7CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZuaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKIAlpZiAobmljLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCXN0cmNweShuaWMtPnByb2R1Y3RfbmFtZSwgIlhmcmFtZSBJSSAxMEdiRSBuZXR3b3JrIGFkYXB0ZXIiKTsKIAkJdnBkX2FkZHIgPSAweDgwOwotCX0KLQllbHNlIHsKKwl9IGVsc2UgewogCQlzdHJjcHkobmljLT5wcm9kdWN0X25hbWUsICJYZnJhbWUgSSAxMEdiRSBuZXR3b3JrIGFkYXB0ZXIiKTsKIAkJdnBkX2FkZHIgPSAweDUwOwogCX0KQEAgLTU3NjAsMTYgKzU3NzksMTYgQEAKIAogCXZwZF9kYXRhID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOwogCWlmICghdnBkX2RhdGEpIHsKLQkJbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY19mYWlsX2NudCsrOworCQlzd3N0YXRzLT5tZW1fYWxsb2NfZmFpbF9jbnQrKzsKIAkJcmV0dXJuOwogCX0KLQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZCArPSAyNTY7CisJc3dzdGF0cy0+bWVtX2FsbG9jYXRlZCArPSAyNTY7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9NCApIHsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDQpIHsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKG5pYy0+cGRldiwgKHZwZF9hZGRyICsgMiksIGkpOwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShuaWMtPnBkZXYsICAodnBkX2FkZHIgKyAyKSwgJmRhdGEpOwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmljLT5wZGV2LCAodnBkX2FkZHIgKyAzKSwgMCk7Ci0JCWZvciAoY250ID0gMDsgY250IDw1OyBjbnQrKykgeworCQlmb3IgKGNudCA9IDA7IGNudCA8IDU7IGNudCsrKSB7CiAJCQltc2xlZXAoMik7CiAJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShuaWMtPnBkZXYsICh2cGRfYWRkciArIDMpLCAmZGF0YSk7CiAJCQlpZiAoZGF0YSA9PSAweDgwKQpAQCAtNTc4NCwxNSArNTgwMywxNSBAQAogCQkJCSAgICAgICh1MzIgKikmdnBkX2RhdGFbaV0pOwogCX0KIAotCWlmKCFmYWlsKSB7CisJaWYgKCFmYWlsKSB7CiAJCS8qIHJlYWQgc2VyaWFsIG51bWJlciBvZiBhZGFwdGVyICovCiAJCWZvciAoY250ID0gMDsgY250IDwgMjU2OyBjbnQrKykgewotCQlpZiAoKHZwZF9kYXRhW2NudF0gPT0gJ1MnKSAmJgotCQkJKHZwZF9kYXRhW2NudCsxXSA9PSAnTicpICYmCi0JCQkodnBkX2RhdGFbY250KzJdIDwgVlBEX1NUUklOR19MRU4pKSB7CisJCQlpZiAoKHZwZF9kYXRhW2NudF0gPT0gJ1MnKSAmJgorCQkJICAgICh2cGRfZGF0YVtjbnQrMV0gPT0gJ04nKSAmJgorCQkJICAgICh2cGRfZGF0YVtjbnQrMl0gPCBWUERfU1RSSU5HX0xFTikpIHsKIAkJCQltZW1zZXQobmljLT5zZXJpYWxfbnVtLCAwLCBWUERfU1RSSU5HX0xFTik7CiAJCQkJbWVtY3B5KG5pYy0+c2VyaWFsX251bSwgJnZwZF9kYXRhW2NudCArIDNdLAotCQkJCQl2cGRfZGF0YVtjbnQrMl0pOworCQkJCSAgICAgICB2cGRfZGF0YVtjbnQrMl0pOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC01ODAzLDcgKzU4MjIsNyBAQAogCQltZW1jcHkobmljLT5wcm9kdWN0X25hbWUsICZ2cGRfZGF0YVszXSwgdnBkX2RhdGFbMV0pOwogCX0KIAlrZnJlZSh2cGRfZGF0YSk7Ci0JbmljLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZCArPSAyNTY7CisJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IDI1NjsKIH0KIAogLyoqCkBAIC01ODIwLDcgKzU4MzksNyBAQAogICovCiAKIHN0YXRpYyBpbnQgczJpb19ldGh0b29sX2dlZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKiBkYXRhX2J1ZikKKwkJCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKiBkYXRhX2J1ZikKIHsKIAl1MzIgaSwgdmFsaWQ7CiAJdTY0IGRhdGE7CkBAIC01ODU4LDcgKzU4NzcsNyBAQAogCiBzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9zZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCi0JCQkJdTggKiBkYXRhX2J1ZikKKwkJCQl1OCAqZGF0YV9idWYpCiB7CiAJaW50IGxlbiA9IGVlcHJvbS0+bGVuLCBjbnQgPSAwOwogCXU2NCB2YWxpZCA9IDAsIGRhdGE7CkBAIC01ODY2LDI0ICs1ODg1LDI0IEBACiAKIAlpZiAoZWVwcm9tLT5tYWdpYyAhPSAoc3AtPnBkZXYtPnZlbmRvciB8IChzcC0+cGRldi0+ZGV2aWNlIDw8IDE2KSkpIHsKIAkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkgICJFVEhUT09MX1dSSVRFX0VFUFJPTSBFcnI6IE1hZ2ljIHZhbHVlICIpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgImlzIHdyb25nLCBJdHMgbm90IDB4JXhcbiIsCisJCQkgICJFVEhUT09MX1dSSVRFX0VFUFJPTSBFcnI6ICIKKwkJCSAgIk1hZ2ljIHZhbHVlIGlzIHdyb25nLCBpdCBpcyAweCV4IHNob3VsZCBiZSAweCV4XG4iLAorCQkJICAoc3AtPnBkZXYtPnZlbmRvciB8IChzcC0+cGRldi0+ZGV2aWNlIDw8IDE2KSksCiAJCQkgIGVlcHJvbS0+bWFnaWMpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKIAl3aGlsZSAobGVuKSB7Ci0JCWRhdGEgPSAodTMyKSBkYXRhX2J1ZltjbnRdICYgMHgwMDAwMDBGRjsKLQkJaWYgKGRhdGEpIHsKLQkJCXZhbGlkID0gKHUzMikgKGRhdGEgPDwgMjQpOwotCQl9IGVsc2UKKwkJZGF0YSA9ICh1MzIpZGF0YV9idWZbY250XSAmIDB4MDAwMDAwRkY7CisJCWlmIChkYXRhKQorCQkJdmFsaWQgPSAodTMyKShkYXRhIDw8IDI0KTsKKwkJZWxzZQogCQkJdmFsaWQgPSBkYXRhOwogCiAJCWlmICh3cml0ZV9lZXByb20oc3AsIChlZXByb20tPm9mZnNldCArIGNudCksIHZhbGlkLCAwKSkgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkJICAiRVRIVE9PTF9XUklURV9FRVBST00gRXJyOiBDYW5ub3QgIik7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCQkgICJ3cml0ZSBpbnRvIHRoZSBzcGVjaWZpZWQgb2Zmc2V0XG4iKTsKKwkJCQkgICJFVEhUT09MX1dSSVRFX0VFUFJPTSBFcnI6ICIKKwkJCQkgICJDYW5ub3Qgd3JpdGUgaW50byB0aGUgc3BlY2lmaWVkIG9mZnNldFxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQljbnQrKzsKQEAgLTU5MDYsNyArNTkyNSw3IEBACiAgKiAwIG9uIHN1Y2Nlc3MuCiAgKi8KIAotc3RhdGljIGludCBzMmlvX3JlZ2lzdGVyX3Rlc3Qoc3RydWN0IHMyaW9fbmljICogc3AsIHVpbnQ2NF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczJpb19yZWdpc3Rlcl90ZXN0KHN0cnVjdCBzMmlvX25pYyAqc3AsIHVpbnQ2NF90ICpkYXRhKQogewogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCXU2NCB2YWw2NCA9IDAsIGV4cF92YWw7CkBAIC01OTE1LDEzICs1OTM0LDEzIEBACiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+cGlmX3JkX3N3YXBwZXJfZmIpOwogCWlmICh2YWw2NCAhPSAweDEyMzQ1Njc4OWFiY2RlZlVMTCkgewogCQlmYWlsID0gMTsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiUmVhZCBUZXN0IGxldmVsIDEgZmFpbHNcbiIpOworCQlEQkdfUFJJTlQoSU5GT19EQkcsICJSZWFkIFRlc3QgbGV2ZWwgJWQgZmFpbHNcbiIsIDEpOwogCX0KIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnJtYWNfcGF1c2VfY2ZnKTsKIAlpZiAodmFsNjQgIT0gMHhjMDAwZmZmZjAwMDAwMDAwVUxMKSB7CiAJCWZhaWwgPSAxOwotCQlEQkdfUFJJTlQoSU5GT19EQkcsICJSZWFkIFRlc3QgbGV2ZWwgMiBmYWlsc1xuIik7CisJCURCR19QUklOVChJTkZPX0RCRywgIlJlYWQgVGVzdCBsZXZlbCAlZCBmYWlsc1xuIiwgMik7CiAJfQogCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+cnhfcXVldWVfY2ZnKTsKQEAgLTU5MzEsMTMgKzU5NTAsMTMgQEAKIAkJZXhwX3ZhbCA9IDB4MDgwODA4MDgwODA4MDgwOFVMTDsKIAlpZiAodmFsNjQgIT0gZXhwX3ZhbCkgewogCQlmYWlsID0gMTsKLQkJREJHX1BSSU5UKElORk9fREJHLCAiUmVhZCBUZXN0IGxldmVsIDMgZmFpbHNcbiIpOworCQlEQkdfUFJJTlQoSU5GT19EQkcsICJSZWFkIFRlc3QgbGV2ZWwgJWQgZmFpbHNcbiIsIDMpOwogCX0KIAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnhneHNfZWZpZm9fY2ZnKTsKIAlpZiAodmFsNjQgIT0gMHgwMDAwMDAwMDE5MjMxNDFFVUxMKSB7CiAJCWZhaWwgPSAxOwotCQlEQkdfUFJJTlQoSU5GT19EQkcsICJSZWFkIFRlc3QgbGV2ZWwgNCBmYWlsc1xuIik7CisJCURCR19QUklOVChJTkZPX0RCRywgIlJlYWQgVGVzdCBsZXZlbCAlZCBmYWlsc1xuIiwgNCk7CiAJfQogCiAJdmFsNjQgPSAweDVBNUE1QTVBNUE1QTVBNUFVTEw7CkBAIC01OTQ1LDcgKzU5NjQsNyBAQAogCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnhtc2lfZGF0YSk7CiAJaWYgKHZhbDY0ICE9IDB4NUE1QTVBNUE1QTVBNUE1QVVMTCkgewogCQlmYWlsID0gMTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJXcml0ZSBUZXN0IGxldmVsIDEgZmFpbHNcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIldyaXRlIFRlc3QgbGV2ZWwgJWQgZmFpbHNcbiIsIDEpOwogCX0KIAogCXZhbDY0ID0gMHhBNUE1QTVBNUE1QTVBNUE1VUxMOwpAQCAtNTk1Myw3ICs1OTcyLDcgQEAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT54bXNpX2RhdGEpOwogCWlmICh2YWw2NCAhPSAweEE1QTVBNUE1QTVBNUE1QTVVTEwpIHsKIAkJZmFpbCA9IDE7Ci0JCURCR19QUklOVChFUlJfREJHLCAiV3JpdGUgVGVzdCBsZXZlbCAyIGZhaWxzXG4iKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJXcml0ZSBUZXN0IGxldmVsICVkIGZhaWxzXG4iLCAyKTsKIAl9CiAKIAkqZGF0YSA9IGZhaWw7CkBAIC01OTczLDcgKzU5OTIsNyBAQAogICogMCBvbiBzdWNjZXNzLgogICovCiAKLXN0YXRpYyBpbnQgczJpb19lZXByb21fdGVzdChzdHJ1Y3QgczJpb19uaWMgKiBzcCwgdWludDY0X3QgKiBkYXRhKQorc3RhdGljIGludCBzMmlvX2VlcHJvbV90ZXN0KHN0cnVjdCBzMmlvX25pYyAqc3AsIHVpbnQ2NF90ICpkYXRhKQogewogCWludCBmYWlsID0gMDsKIAl1NjQgcmV0X2RhdGEsIG9yZ180RjAsIG9yZ183RjA7CkBAIC02MDAyLDkgKzYwMjEsOSBAQAogCiAJaWYgKHJldF9kYXRhICE9IDB4MDEyMzQ1KSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGVlcHJvbSB0ZXN0IGVycm9yIGF0IG9mZnNldCAweDRGMC4gIgotCQkJIkRhdGEgd3JpdHRlbiAlbGx4IERhdGEgcmVhZCAlbGx4XG4iLAotCQkJZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKTB4MTIzNDUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJldF9kYXRhKTsKKwkJCSAgIkRhdGEgd3JpdHRlbiAlbGx4IERhdGEgcmVhZCAlbGx4XG4iLAorCQkJICBkZXYtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpMHgxMjM0NSwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXRfZGF0YSk7CiAJCWZhaWwgPSAxOwogCX0KIApAQCAtNjAyNCw5ICs2MDQzLDkgQEAKIAogCWlmIChyZXRfZGF0YSAhPSAweDAxMjM0NSkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBlZXByb20gdGVzdCBlcnJvciBhdCBvZmZzZXQgMHg3RjAuICIKLQkJCSJEYXRhIHdyaXR0ZW4gJWxseCBEYXRhIHJlYWQgJWxseFxuIiwKLQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykweDEyMzQ1LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXRfZGF0YSk7CisJCQkgICJEYXRhIHdyaXR0ZW4gJWxseCBEYXRhIHJlYWQgJWxseFxuIiwKKwkJCSAgZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKTB4MTIzNDUsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpcmV0X2RhdGEpOwogCQlmYWlsID0gMTsKIAl9CiAKQEAgLTYwNzUsNyArNjA5NCw3IEBACiAgKiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIG9uIGZhaWx1cmUuCiAgKi8KIAotc3RhdGljIGludCBzMmlvX2Jpc3RfdGVzdChzdHJ1Y3QgczJpb19uaWMgKiBzcCwgdWludDY0X3QgKiBkYXRhKQorc3RhdGljIGludCBzMmlvX2Jpc3RfdGVzdChzdHJ1Y3QgczJpb19uaWMgKnNwLCB1aW50NjRfdCAqZGF0YSkKIHsKIAl1OCBiaXN0ID0gMDsKIAlpbnQgY250ID0gMCwgcmV0ID0gLTE7CkBAIC02MTExLDEzICs2MTMwLDEzIEBACiAgKiAwIG9uIHN1Y2Nlc3MuCiAgKi8KIAotc3RhdGljIGludCBzMmlvX2xpbmtfdGVzdChzdHJ1Y3QgczJpb19uaWMgKiBzcCwgdWludDY0X3QgKiBkYXRhKQorc3RhdGljIGludCBzMmlvX2xpbmtfdGVzdChzdHJ1Y3QgczJpb19uaWMgKnNwLCB1aW50NjRfdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAl1NjQgdmFsNjQ7CiAKIAl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX3N0YXR1cyk7Ci0JaWYoIShMSU5LX0lTX1VQKHZhbDY0KSkpCisJaWYgKCEoTElOS19JU19VUCh2YWw2NCkpKQogCQkqZGF0YSA9IDE7CiAJZWxzZQogCQkqZGF0YSA9IDA7CkBAIC02MTM4LDcgKzYxNTcsNyBAQAogICogIDAgb24gc3VjY2Vzcy4KICAqLwogCi1zdGF0aWMgaW50IHMyaW9fcmxkcmFtX3Rlc3Qoc3RydWN0IHMyaW9fbmljICogc3AsIHVpbnQ2NF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczJpb19ybGRyYW1fdGVzdChzdHJ1Y3QgczJpb19uaWMgKnNwLCB1aW50NjRfdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBzcC0+YmFyMDsKIAl1NjQgdmFsNjQ7CkBAIC02MTYxLDI4ICs2MTgwLDI2IEBACiAKIAl3aGlsZSAoaXRlcmF0aW9uIDwgMikgewogCQl2YWw2NCA9IDB4NTU1NTU1NTVhYWFhMDAwMFVMTDsKLQkJaWYgKGl0ZXJhdGlvbiA9PSAxKSB7CisJCWlmIChpdGVyYXRpb24gPT0gMSkKIAkJCXZhbDY0IF49IDB4RkZGRkZGRkZGRkZGMDAwMFVMTDsKLQkJfQogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5tY19ybGRyYW1fdGVzdF9kMCk7CiAKIAkJdmFsNjQgPSAweGFhYWE1YTU1NTU1NTAwMDBVTEw7Ci0JCWlmIChpdGVyYXRpb24gPT0gMSkgeworCQlpZiAoaXRlcmF0aW9uID09IDEpCiAJCQl2YWw2NCBePSAweEZGRkZGRkZGRkZGRjAwMDBVTEw7Ci0JCX0KIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+bWNfcmxkcmFtX3Rlc3RfZDEpOwogCiAJCXZhbDY0ID0gMHg1NWFhYWFhYWFhNWEwMDAwVUxMOwotCQlpZiAoaXRlcmF0aW9uID09IDEpIHsKKwkJaWYgKGl0ZXJhdGlvbiA9PSAxKQogCQkJdmFsNjQgXj0gMHhGRkZGRkZGRkZGRkYwMDAwVUxMOwotCQl9CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1jX3JsZHJhbV90ZXN0X2QyKTsKIAogCQl2YWw2NCA9ICh1NjQpICgweDAwMDAwMDNmZmZmZTAxMDBVTEwpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5tY19ybGRyYW1fdGVzdF9hZGQpOwogCi0JCXZhbDY0ID0gTUNfUkxEUkFNX1RFU1RfTU9ERSB8IE1DX1JMRFJBTV9URVNUX1dSSVRFIHwKLQkJICAgIAlNQ19STERSQU1fVEVTVF9HTzsKKwkJdmFsNjQgPSBNQ19STERSQU1fVEVTVF9NT0RFIHwKKwkJCU1DX1JMRFJBTV9URVNUX1dSSVRFIHwKKwkJCU1DX1JMRFJBTV9URVNUX0dPOwogCQlTUEVDSUFMX1JFR19XUklURSh2YWw2NCwgJmJhcjAtPm1jX3JsZHJhbV90ZXN0X2N0cmwsIExGKTsKIAogCQlmb3IgKGNudCA9IDA7IGNudCA8IDU7IGNudCsrKSB7CkBAIC02MjQwLDcgKzYyNTcsNyBAQAogCiBzdGF0aWMgdm9pZCBzMmlvX2V0aHRvb2xfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRodGVzdCwKLQkJCSAgICAgIHVpbnQ2NF90ICogZGF0YSkKKwkJCSAgICAgIHVpbnQ2NF90ICpkYXRhKQogewogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBvcmlnX3N0YXRlID0gbmV0aWZfcnVubmluZyhzcC0+ZGV2KTsKQEAgLTYyNzMsOCArNjI5MCw3IEBACiAJfSBlbHNlIHsKIAkJLyogT25saW5lIFRlc3RzLiAqLwogCQlpZiAoIW9yaWdfc3RhdGUpIHsKLQkJCURCR19QUklOVChFUlJfREJHLAotCQkJCSAgIiVzOiBpcyBub3QgdXAsIGNhbm5vdCBydW4gdGVzdFxuIiwKKwkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IGlzIG5vdCB1cCwgY2Fubm90IHJ1biB0ZXN0XG4iLAogCQkJCSAgZGV2LT5uYW1lKTsKIAkJCWRhdGFbMF0gPSAtMTsKIAkJCWRhdGFbMV0gPSAtMTsKQEAgLTYyOTUsMjkxICs2MzExLDI5MiBAQAogCiBzdGF0aWMgdm9pZCBzMmlvX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKmVzdGF0cywKLQkJCQkgICB1NjQgKiB0bXBfc3RhdHMpCisJCQkJICAgdTY0ICp0bXBfc3RhdHMpCiB7CiAJaW50IGkgPSAwLCBrOwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBzdGF0X2Jsb2NrICpzdGF0X2luZm8gPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3RhdF9ibG9jayAqc3RhdHMgPSBzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mbzsKKwlzdHJ1Y3Qgc3dTdGF0ICpzd3N0YXRzID0gJnN0YXRzLT5zd19zdGF0OworCXN0cnVjdCB4cGFrU3RhdCAqeHN0YXRzID0gJnN0YXRzLT54cGFrX3N0YXQ7CiAKIAlzMmlvX3VwZHRfc3RhdHMoc3ApOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfZnJtc19vZmxvdykgPDwgMzIgIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2ZybXNfb2Zsb3cpIDw8IDMyICB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfZGF0YV9vY3RldHNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2RhdGFfb2N0ZXRzKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19kcm9wX2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2RhdGFfb2N0ZXRzX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2RhdGFfb2N0ZXRzKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT50bWFjX2Ryb3BfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19tY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX21jc3RfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfbWNzdF9mcm1zX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX21jc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19iY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2Jjc3RfZnJtcyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnRtYWNfcGF1c2VfY3RybF9mcm1zKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPQotICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3R0bF9vY3RldHNfb2Zsb3cpIDw8IDMyIHwKLSAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdHRsX29jdGV0cyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfYmNzdF9mcm1zX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2Jjc3RfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+dG1hY19wYXVzZV9jdHJsX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLSAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY191Y3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKLSAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdWNzdF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY190dGxfb2N0ZXRzX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX3R0bF9vY3RldHMpOwogCXRtcF9zdGF0c1tpKytdID0KLSAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19udWNzdF9mcm1zX29mbG93KSA8PCAzMiB8Ci0gICAgICAgICAgICAgICAgbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX251Y3N0X2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX3Vjc3RfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+dG1hY191Y3N0X2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfYW55X2Vycl9mcm1zX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19hbnlfZXJyX2ZybXMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+dG1hY190dGxfbGVzc19mYl9vY3RldHMpOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT50bWFjX3ZsZF9pcF9vY3RldHMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX251Y3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfbnVjc3RfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY192bGRfaXBfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX3ZsZF9pcCk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfYW55X2Vycl9mcm1zX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2FueV9lcnJfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+dG1hY190dGxfbGVzc19mYl9vY3RldHMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnRtYWNfdmxkX2lwX29jdGV0cyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19kcm9wX2lwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19kcm9wX2lwKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY192bGRfaXBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfdmxkX2lwKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2ljbXBfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT50bWFjX2ljbXApOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2Ryb3BfaXBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfZHJvcF9pcCk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19yc3RfdGNwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY19yc3RfdGNwKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+dG1hY190Y3ApOwotCXRtcF9zdGF0c1tpKytdID0gKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnRtYWNfdWRwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dG1hY191ZHApOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX2ljbXBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfaWNtcCk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY192bGRfZnJtc19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdmxkX2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT50bWFjX3JzdF90Y3Bfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfcnN0X3RjcCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+dG1hY190Y3ApOworCXRtcF9zdGF0c1tpKytdID0gKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+dG1hY191ZHBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnRtYWNfdWRwKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2RhdGFfb2N0ZXRzX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kYXRhX29jdGV0cyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZmNzX2Vycl9mcm1zKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3ZsZF9mcm1zX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3ZsZF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsZF9tY3N0X2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsZF9tY3N0X2ZybXMpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2RhdGFfb2N0ZXRzX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2RhdGFfb2N0ZXRzKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2Zjc19lcnJfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19kcm9wX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdmxkX2Jjc3RfZnJtc19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdmxkX2Jjc3RfZnJtcyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaW5fcm5nX2xlbl9lcnJfZnJtcyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfb3V0X3JuZ19sZW5fZXJyX2ZybXMpOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2xvbmdfZnJtcyk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcGF1c2VfY3RybF9mcm1zKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191bnN1cF9jdHJsX2ZybXMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9Ci0gICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsX29jdGV0c19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsX29jdGV0cyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0KLSAgICAgICAgICAgICAgICAodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF91Y3N0X2ZybXNfb2Zsb3cpCi0JCTw8IDMyIHwgbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2FjY2VwdGVkX3Vjc3RfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdmxkX21jc3RfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY192bGRfbWNzdF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0gICAgICAgICAgICAgICAgKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfYWNjZXB0ZWRfbnVjc3RfZnJtc19vZmxvdykKLSAgICAgICAgICAgICAgICAgPDwgMzIgfCBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfYWNjZXB0ZWRfbnVjc3RfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdmxkX2Jjc3RfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY192bGRfYmNzdF9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2luX3JuZ19sZW5fZXJyX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfb3V0X3JuZ19sZW5fZXJyX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfbG9uZ19mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3BhdXNlX2N0cmxfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY191bnN1cF9jdHJsX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZGlzY2FyZGVkX2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Rpc2NhcmRlZF9mcm1zKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPQotICAgICAgICAgICAgICAgICh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Ryb3BfZXZlbnRzX29mbG93KQotICAgICAgICAgICAgICAgICA8PCAzMiB8IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2V2ZW50cyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9sZXNzX2ZiX29jdGV0cyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY190dGxfb2N0ZXRzX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF9vY3RldHMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdXNpemVkX2ZybXNfb2Zsb3cpIDw8IDMyIHwKLQkJbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3VzaXplZF9mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19hY2NlcHRlZF91Y3N0X2ZybXNfb2Zsb3cpIDw8IDMyCisJCXwgbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfYWNjZXB0ZWRfdWNzdF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX29zaXplZF9mcm1zX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19vc2l6ZWRfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfYWNjZXB0ZWRfbnVjc3RfZnJtc19vZmxvdykKKwkJPDwgMzIgfCBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19hY2NlcHRlZF9udWNzdF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZyYWdfZnJtc19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJhZ19mcm1zKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19kaXNjYXJkZWRfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19kaXNjYXJkZWRfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19qYWJiZXJfZnJtc19vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfamFiYmVyX2ZybXMpOwotCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF82NF9mcm1zKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzY1XzEyN19mcm1zKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdHRsXzEyOF8yNTVfZnJtcyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF8yNTZfNTExX2ZybXMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfNTEyXzEwMjNfZnJtcyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF8xMDI0XzE1MThfZnJtcyk7CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZHJvcF9ldmVudHNfb2Zsb3cpCisJCTw8IDMyIHwgbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZHJvcF9ldmVudHMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsX2xlc3NfZmJfb2N0ZXRzKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2lwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pcCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfaXBfb2N0ZXRzKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19oZHJfZXJyX2lwKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY191c2l6ZWRfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY191c2l6ZWRfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2lwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19kcm9wX2lwKTsKKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19vc2l6ZWRfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19vc2l6ZWRfZnJtcyk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pY21wX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pY21wKTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190Y3ApOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2ZyYWdfZnJtc19vZmxvdykgPDwgMzIgfAorCQlsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19mcmFnX2ZybXMpOwogCXRtcF9zdGF0c1tpKytdID0KLQkJKHU2NClsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfdWRwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY191ZHApOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2phYmJlcl9mcm1zX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2phYmJlcl9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF82NF9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF82NV8xMjdfZnJtcyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY190dGxfMTI4XzI1NV9mcm1zKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX3R0bF8yNTZfNTExX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsXzUxMl8xMDIzX2ZybXMpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsXzEwMjRfMTUxOF9mcm1zKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Vycl9kcnBfdWRwX29mbG93KSA8PCAzMiB8Ci0JCWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19lcnJfZHJwX3VkcCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfeGdtaWlfZXJyX3N5bSk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTApOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3ExKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xMik7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTMpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3E0KTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnJtc19xNSk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2ZybXNfcTYpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mcm1zX3E3KTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xMCk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTEpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3EyKTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xMyk7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTQpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19mdWxsX3E1KTsKLSAgICAgICAgdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZnVsbF9xNik7Ci0gICAgICAgIHRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Z1bGxfcTcpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2lwX29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2lwKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2lwX29jdGV0cyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19oZHJfZXJyX2lwKTsKIAl0bXBfc3RhdHNbaSsrXSA9Ci0JCSh1NjQpbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3BhdXNlX2NudF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcGF1c2VfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY194Z21paV9kYXRhX2Vycl9jbnQpOwotICAgICAgICB0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY194Z21paV9jdHJsX2Vycl9jbnQpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2Ryb3BfaXBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZHJvcF9pcCk7CiAJdG1wX3N0YXRzW2krK10gPQotCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19hY2NlcHRlZF9pcF9vZmxvdykgPDwgMzIgfAotCQlsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfYWNjZXB0ZWRfaXApOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2Vycl90Y3ApOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yZF9yZXFfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bmV3X3JkX3JlcV9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5uZXdfcmRfcmVxX3J0cnlfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cmRfcnRyeV9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT53cl9ydHJ5X3JkX2Fja19jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT53cl9yZXFfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+bmV3X3dyX3JlcV9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5uZXdfd3JfcmVxX3J0cnlfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+d3JfcnRyeV9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT53cl9kaXNjX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJkX3J0cnlfd3JfYWNrX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnR4cF93cl9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT50eGRfcmRfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dHhkX3dyX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJ4ZF9yZF9jbnQpOwotCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5yeGRfd3JfY250KTsKLQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+dHhmX3JkX2NudCk7Ci0JdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJ4Zl93cl9jbnQpOworCQkodTY0KWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2ljbXBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfaWNtcCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY190Y3ApOworCXRtcF9zdGF0c1tpKytdID0KKwkJKHU2NClsZTMyX3RvX2NwdShzdGF0cy0+cm1hY191ZHBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfdWRwKTsKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZXJyX2RycF91ZHBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZXJyX2RycF91ZHApOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfeGdtaWlfZXJyX3N5bSk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19mcm1zX3EwKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2ZybXNfcTEpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZnJtc19xMik7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19mcm1zX3EzKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2ZybXNfcTQpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZnJtc19xNSk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19mcm1zX3E2KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2ZybXNfcTcpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdHMtPnJtYWNfZnVsbF9xMCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0cy0+cm1hY19mdWxsX3ExKTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRzLT5ybWFjX2Z1bGxfcTIpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdHMtPnJtYWNfZnVsbF9xMyk7CisJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0cy0+cm1hY19mdWxsX3E0KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMTZfdG9fY3B1KHN0YXRzLT5ybWFjX2Z1bGxfcTUpOworCXRtcF9zdGF0c1tpKytdID0gbGUxNl90b19jcHUoc3RhdHMtPnJtYWNfZnVsbF9xNik7CisJdG1wX3N0YXRzW2krK10gPSBsZTE2X3RvX2NwdShzdGF0cy0+cm1hY19mdWxsX3E3KTsKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfcGF1c2VfY250X29mbG93KSA8PCAzMiB8CisJCWxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3BhdXNlX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY194Z21paV9kYXRhX2Vycl9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfeGdtaWlfY3RybF9lcnJfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9CisJCSh1NjQpbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfYWNjZXB0ZWRfaXBfb2Zsb3cpIDw8IDMyIHwKKwkJbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfYWNjZXB0ZWRfaXApOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZXJyX3RjcCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cmRfcmVxX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+bmV3X3JkX3JlcV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPm5ld19yZF9yZXFfcnRyeV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJkX3J0cnlfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT53cl9ydHJ5X3JkX2Fja19jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPndyX3JlcV9jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPm5ld193cl9yZXFfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5uZXdfd3JfcmVxX3J0cnlfY250KTsKKwl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT53cl9ydHJ5X2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+d3JfZGlzY19jbnQpOworCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJkX3J0cnlfd3JfYWNrX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+dHhwX3dyX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+dHhkX3JkX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+dHhkX3dyX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cnhkX3JkX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cnhkX3dyX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+dHhmX3JkX2NudCk7CisJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cnhmX3dyX2NudCk7CiAKIAkvKiBFbmhhbmNlZCBzdGF0aXN0aWNzIGV4aXN0IG9ubHkgZm9yIEhlcmN1bGVzICovCi0JaWYoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKKwlpZiAoc3AtPmRldmljZV90eXBlID09IFhGUkFNRV9JSV9ERVZJQ0UpIHsKIAkJdG1wX3N0YXRzW2krK10gPQotCQkJCWxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfMTUxOV80MDk1X2ZybXMpOworCQkJbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsXzE1MTlfNDA5NV9mcm1zKTsKIAkJdG1wX3N0YXRzW2krK10gPQotCQkJCWxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfNDA5Nl84MTkxX2ZybXMpOworCQkJbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsXzQwOTZfODE5MV9mcm1zKTsKIAkJdG1wX3N0YXRzW2krK10gPQotCQkJCWxlNjRfdG9fY3B1KHN0YXRfaW5mby0+cm1hY190dGxfODE5Ml9tYXhfZnJtcyk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3R0bF9ndF9tYXhfZnJtcyk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX29zaXplZF9hbHRfZnJtcyk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2phYmJlcl9hbHRfZnJtcyk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2d0X21heF9hbHRfZnJtcyk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3ZsYW5fZnJtcyk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX2xlbl9kaXNjYXJkKTsKLQkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZmNzX2Rpc2NhcmQpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19wZl9kaXNjYXJkKTsKLQkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfZGFfZGlzY2FyZCk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5ybWFjX3JlZF9kaXNjYXJkKTsKLQkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0X2luZm8tPnJtYWNfcnRzX2Rpc2NhcmQpOwotCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRfaW5mby0+cm1hY19pbmdtX2Z1bGxfZGlzY2FyZCk7Ci0JCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdF9pbmZvLT5saW5rX2ZhdWx0X2NudCk7CisJCQlsZTY0X3RvX2NwdShzdGF0cy0+cm1hY190dGxfODE5Ml9tYXhfZnJtcyk7CisJCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfdHRsX2d0X21heF9mcm1zKTsKKwkJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY19vc2l6ZWRfYWx0X2ZybXMpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlNjRfdG9fY3B1KHN0YXRzLT5ybWFjX2phYmJlcl9hbHRfZnJtcyk7CisJCXRtcF9zdGF0c1tpKytdID0gbGU2NF90b19jcHUoc3RhdHMtPnJtYWNfZ3RfbWF4X2FsdF9mcm1zKTsKKwkJdG1wX3N0YXRzW2krK10gPSBsZTY0X3RvX2NwdShzdGF0cy0+cm1hY192bGFuX2ZybXMpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX2xlbl9kaXNjYXJkKTsKKwkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19mY3NfZGlzY2FyZCk7CisJCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfcGZfZGlzY2FyZCk7CisJCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfZGFfZGlzY2FyZCk7CisJCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPnJtYWNfcmVkX2Rpc2NhcmQpOworCQl0bXBfc3RhdHNbaSsrXSA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ybWFjX3J0c19kaXNjYXJkKTsKKwkJdG1wX3N0YXRzW2krK10gPSBsZTMyX3RvX2NwdShzdGF0cy0+cm1hY19pbmdtX2Z1bGxfZGlzY2FyZCk7CisJCXRtcF9zdGF0c1tpKytdID0gbGUzMl90b19jcHUoc3RhdHMtPmxpbmtfZmF1bHRfY250KTsKIAl9CiAKIAl0bXBfc3RhdHNbaSsrXSA9IDA7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc2luZ2xlX2VjY19lcnJzOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmRvdWJsZV9lY2NfZXJyczsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5wYXJpdHlfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5zZXJpb3VzX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuc29mdF9yZXNldF9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuZmlmb19mdWxsX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnNpbmdsZV9lY2NfZXJyczsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPmRvdWJsZV9lY2NfZXJyczsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnBhcml0eV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+c2VyaW91c19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+c29mdF9yZXNldF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5maWZvX2Z1bGxfY250OwogCWZvciAoayA9IDA7IGsgPCBNQVhfUlhfUklOR1M7IGsrKykKLQkJdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucmluZ19mdWxsX2NudFtrXTsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX3RyYW5zY2VpdmVyX3RlbXBfaGlnaDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0LmFsYXJtX3RyYW5zY2VpdmVyX3RlbXBfbG93OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2hpZ2g7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV9sYXNlcl9iaWFzX2N1cnJlbnRfbG93OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQuYWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2g7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC5hbGFybV9sYXNlcl9vdXRwdXRfcG93ZXJfbG93OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl90cmFuc2NlaXZlcl90ZW1wX2hpZ2g7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX3RyYW5zY2VpdmVyX3RlbXBfbG93OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT54cGFrX3N0YXQud2Fybl9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfYmlhc19jdXJyZW50X2xvdzsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+eHBha19zdGF0Lndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2g7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnhwYWtfc3RhdC53YXJuX2xhc2VyX291dHB1dF9wb3dlcl9sb3c7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQuY2x1YmJlZF9mcm1zX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5zZW5kaW5nX2JvdGg7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQub3V0b2Zfc2VxdWVuY2VfcGt0czsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5mbHVzaF9tYXhfcGt0czsKLQlpZiAoc3RhdF9pbmZvLT5zd19zdGF0Lm51bV9hZ2dyZWdhdGlvbnMpIHsKLQkJdTY0IHRtcCA9IHN0YXRfaW5mby0+c3dfc3RhdC5zdW1fYXZnX3BrdHNfYWdncmVnYXRlZDsKKwkJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yaW5nX2Z1bGxfY250W2tdOworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT5hbGFybV90cmFuc2NlaXZlcl90ZW1wX2hpZ2g7CisJdG1wX3N0YXRzW2krK10gPSB4c3RhdHMtPmFsYXJtX3RyYW5zY2VpdmVyX3RlbXBfbG93OworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT5hbGFybV9sYXNlcl9iaWFzX2N1cnJlbnRfaGlnaDsKKwl0bXBfc3RhdHNbaSsrXSA9IHhzdGF0cy0+YWxhcm1fbGFzZXJfYmlhc19jdXJyZW50X2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHhzdGF0cy0+YWxhcm1fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2g7CisJdG1wX3N0YXRzW2krK10gPSB4c3RhdHMtPmFsYXJtX2xhc2VyX291dHB1dF9wb3dlcl9sb3c7CisJdG1wX3N0YXRzW2krK10gPSB4c3RhdHMtPndhcm5fdHJhbnNjZWl2ZXJfdGVtcF9oaWdoOworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT53YXJuX3RyYW5zY2VpdmVyX3RlbXBfbG93OworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9oaWdoOworCXRtcF9zdGF0c1tpKytdID0geHN0YXRzLT53YXJuX2xhc2VyX2JpYXNfY3VycmVudF9sb3c7CisJdG1wX3N0YXRzW2krK10gPSB4c3RhdHMtPndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2hpZ2g7CisJdG1wX3N0YXRzW2krK10gPSB4c3RhdHMtPndhcm5fbGFzZXJfb3V0cHV0X3Bvd2VyX2xvdzsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPmNsdWJiZWRfZnJtc19jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5zZW5kaW5nX2JvdGg7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5vdXRvZl9zZXF1ZW5jZV9wa3RzOworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+Zmx1c2hfbWF4X3BrdHM7CisJaWYgKHN3c3RhdHMtPm51bV9hZ2dyZWdhdGlvbnMpIHsKKwkJdTY0IHRtcCA9IHN3c3RhdHMtPnN1bV9hdmdfcGt0c19hZ2dyZWdhdGVkOwogCQlpbnQgY291bnQgPSAwOwogCQkvKgogCQkgKiBTaW5jZSA2NC1iaXQgZGl2aWRlIGRvZXMgbm90IHdvcmsgb24gYWxsIHBsYXRmb3JtcywKIAkJICogZG8gcmVwZWF0ZWQgc3VidHJhY3Rpb24uCiAJCSAqLwotCQl3aGlsZSAodG1wID49IHN0YXRfaW5mby0+c3dfc3RhdC5udW1fYWdncmVnYXRpb25zKSB7Ci0JCQl0bXAgLT0gc3RhdF9pbmZvLT5zd19zdGF0Lm51bV9hZ2dyZWdhdGlvbnM7CisJCXdoaWxlICh0bXAgPj0gc3dzdGF0cy0+bnVtX2FnZ3JlZ2F0aW9ucykgeworCQkJdG1wIC09IHN3c3RhdHMtPm51bV9hZ2dyZWdhdGlvbnM7CiAJCQljb3VudCsrOwogCQl9CiAJCXRtcF9zdGF0c1tpKytdID0gY291bnQ7Ci0JfQotCWVsc2UKKwl9IGVsc2UKIAkJdG1wX3N0YXRzW2krK10gPSAwOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm1lbV9hbGxvY19mYWlsX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5wY2lfbWFwX2ZhaWxfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LndhdGNoZG9nX3RpbWVyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkOwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5saW5rX3VwX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LmxpbmtfdXBfdGltZTsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fdGltZTsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPm1lbV9hbGxvY19mYWlsX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnBjaV9tYXBfZmFpbF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT53YXRjaGRvZ190aW1lcl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5tZW1fYWxsb2NhdGVkOworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bWVtX2ZyZWVkOworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bGlua191cF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5saW5rX2Rvd25fY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bGlua191cF90aW1lOworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bGlua19kb3duX3RpbWU7CiAKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50eF9idWZfYWJvcnRfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnR4X2Rlc2NfYWJvcnRfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnR4X3Bhcml0eV9lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnR4X2xpbmtfbG9zc19jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQudHhfbGlzdF9wcm9jX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT50eF9idWZfYWJvcnRfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+dHhfZGVzY19hYm9ydF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT50eF9wYXJpdHlfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnR4X2xpbmtfbG9zc19jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT50eF9saXN0X3Byb2NfZXJyX2NudDsKIAotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X3Bhcml0eV9lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X2Fib3J0X2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF9wYXJpdHlfYWJvcnRfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X3JkYV9mYWlsX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yeF91bmtuX3Byb3RfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X2Zjc19lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X2J1Zl9zaXplX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucnhfcnhkX2NvcnJ1cHRfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJ4X3Vua25fZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50ZGFfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5wZmNfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5wY2NfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50dGlfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC50cGFfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5zbV9lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lmxzb19lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0Lm1hY190bWFjX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQubWFjX3JtYWNfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC54Z3hzX3R4Z3hzX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQueGd4c19yeGd4c19lcnJfY250OwotCXRtcF9zdGF0c1tpKytdID0gc3RhdF9pbmZvLT5zd19zdGF0LnJjX2Vycl9jbnQ7Ci0JdG1wX3N0YXRzW2krK10gPSBzdGF0X2luZm8tPnN3X3N0YXQucHJjX3BjaXhfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5ycGFfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5yZGFfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5ydGlfZXJyX2NudDsKLQl0bXBfc3RhdHNbaSsrXSA9IHN0YXRfaW5mby0+c3dfc3RhdC5tY19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cnhfcGFyaXR5X2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yeF9hYm9ydF9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yeF9wYXJpdHlfYWJvcnRfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cnhfcmRhX2ZhaWxfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cnhfdW5rbl9wcm90X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ4X2Zjc19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cnhfYnVmX3NpemVfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ4X3J4ZF9jb3JydXB0X2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ4X3Vua25fZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnRkYV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cGZjX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5wY2NfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnR0aV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+dHBhX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5zbV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bHNvX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5tYWNfdG1hY19lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bWFjX3JtYWNfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnhneHNfdHhneHNfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnhneHNfcnhneHNfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJjX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5wcmNfcGNpeF9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+cnBhX2Vycl9jbnQ7CisJdG1wX3N0YXRzW2krK10gPSBzd3N0YXRzLT5yZGFfZXJyX2NudDsKKwl0bXBfc3RhdHNbaSsrXSA9IHN3c3RhdHMtPnJ0aV9lcnJfY250OworCXRtcF9zdGF0c1tpKytdID0gc3dzdGF0cy0+bWNfZXJyX2NudDsKIH0KIAogc3RhdGljIGludCBzMmlvX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChYRU5BX1JFR19TUEFDRSk7CisJcmV0dXJuIFhFTkFfUkVHX1NQQUNFOwogfQogCiAKLXN0YXRpYyB1MzIgczJpb19ldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQorc3RhdGljIHUzMiBzMmlvX2V0aHRvb2xfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXJldHVybiAoc3AtPnJ4X2NzdW0pOworCXJldHVybiBzcC0+cnhfY3N1bTsKIH0KIAogc3RhdGljIGludCBzMmlvX2V0aHRvb2xfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCkBAIC02NTk2LDcgKzY2MTMsNyBAQAogCiBzdGF0aWMgaW50IHMyaW9fZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKFhFTkFfRUVQUk9NX1NQQUNFKTsKKwlyZXR1cm4gWEVOQV9FRVBST01fU1BBQ0U7CiB9CiAKIHN0YXRpYyBpbnQgczJpb19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKQEAgLTY2MDcsNyArNjYyNCw3IEBACiAJY2FzZSBFVEhfU1NfVEVTVDoKIAkJcmV0dXJuIFMySU9fVEVTVF9MRU47CiAJY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCXN3aXRjaChzcC0+ZGV2aWNlX3R5cGUpIHsKKwkJc3dpdGNoIChzcC0+ZGV2aWNlX3R5cGUpIHsKIAkJY2FzZSBYRlJBTUVfSV9ERVZJQ0U6CiAJCQlyZXR1cm4gWEZSQU1FX0lfU1RBVF9MRU47CiAJCWNhc2UgWEZSQU1FX0lJX0RFVklDRToKQEAgLTY2MjEsNyArNjYzOCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHMyaW9fZXRodG9vbF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgdTMyIHN0cmluZ3NldCwgdTggKiBkYXRhKQorCQkJCSAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCiB7CiAJaW50IHN0YXRfc2l6ZSA9IDA7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02NjMyLDE2ICs2NjQ5LDE2IEBACiAJCWJyZWFrOwogCWNhc2UgRVRIX1NTX1NUQVRTOgogCQlzdGF0X3NpemUgPSBzaXplb2YoZXRodG9vbF94ZW5hX3N0YXRzX2tleXMpOwotCQltZW1jcHkoZGF0YSwgJmV0aHRvb2xfeGVuYV9zdGF0c19rZXlzLHN0YXRfc2l6ZSk7Ci0JCWlmKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CisJCW1lbWNweShkYXRhLCAmZXRodG9vbF94ZW5hX3N0YXRzX2tleXMsIHN0YXRfc2l6ZSk7CisJCWlmIChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgewogCQkJbWVtY3B5KGRhdGEgKyBzdGF0X3NpemUsCi0JCQkJJmV0aHRvb2xfZW5oYW5jZWRfc3RhdHNfa2V5cywKLQkJCQlzaXplb2YoZXRodG9vbF9lbmhhbmNlZF9zdGF0c19rZXlzKSk7CisJCQkgICAgICAgJmV0aHRvb2xfZW5oYW5jZWRfc3RhdHNfa2V5cywKKwkJCSAgICAgICBzaXplb2YoZXRodG9vbF9lbmhhbmNlZF9zdGF0c19rZXlzKSk7CiAJCQlzdGF0X3NpemUgKz0gc2l6ZW9mKGV0aHRvb2xfZW5oYW5jZWRfc3RhdHNfa2V5cyk7CiAJCX0KIAogCQltZW1jcHkoZGF0YSArIHN0YXRfc2l6ZSwgJmV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXMsCi0JCQlzaXplb2YoZXRodG9vbF9kcml2ZXJfc3RhdHNfa2V5cykpOworCQkgICAgICAgc2l6ZW9mKGV0aHRvb2xfZHJpdmVyX3N0YXRzX2tleXMpKTsKIAl9CiB9CiAKQEAgLTY3MzAsOCArNjc0Nyw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoKG5ld19tdHUgPCBNSU5fTVRVKSB8fCAobmV3X210dSA+IFMySU9fSlVNQk9fU0laRSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTVRVIHNpemUgaXMgaW52YWxpZC5cbiIsCi0JCQkgIGRldi0+bmFtZSk7CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE1UVSBzaXplIGlzIGludmFsaWQuXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIApAQCAtNjc2NCw3ICs2NzgwLDggQEAKIAogc3RhdGljIHZvaWQgczJpb19zZXRfbGluayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IHMyaW9fbmljICpuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHMyaW9fbmljLCBzZXRfbGlua190YXNrKTsKKwlzdHJ1Y3QgczJpb19uaWMgKm5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgczJpb19uaWMsCisJCQkJCSAgICBzZXRfbGlua190YXNrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmljLT5kZXY7CiAJc3RydWN0IFhFTkFfZGV2X2NvbmZpZyBfX2lvbWVtICpiYXIwID0gbmljLT5iYXIwOwogCXJlZ2lzdGVyIHU2NCB2YWw2NDsKQEAgLTY3OTcsNyArNjgxNCw3IEBACiAJCQkJdmFsNjQgfD0gQURBUFRFUl9DTlRMX0VOOwogCQkJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPmFkYXB0ZXJfY29udHJvbCk7CiAJCQkJaWYgKENBUkRTX1dJVEhfRkFVTFRZX0xJTktfSU5ESUNBVE9SUygKLQkJCQkJbmljLT5kZXZpY2VfdHlwZSwgc3ViaWQpKSB7CisJCQkJCSAgICBuaWMtPmRldmljZV90eXBlLCBzdWJpZCkpIHsKIAkJCQkJdmFsNjQgPSByZWFkcSgmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAkJCQkJdmFsNjQgfD0gR1BJT19DVFJMX0dQSU9fMDsKIAkJCQkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19jb250cm9sKTsKQEAgLTY4MDgsOCArNjgyNSw5IEBACiAJCQkJfQogCQkJCW5pYy0+ZGV2aWNlX2VuYWJsZWRfb25jZSA9IHRydWU7CiAJCQl9IGVsc2UgewotCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IEVycm9yOiAiLCBkZXYtPm5hbWUpOwotCQkJCURCR19QUklOVChFUlJfREJHLCAiZGV2aWNlIGlzIG5vdCBRdWllc2NlbnRcbiIpOworCQkJCURCR19QUklOVChFUlJfREJHLAorCQkJCQkgICIlczogRXJyb3I6IGRldmljZSBpcyBub3QgUXVpZXNjZW50XG4iLAorCQkJCQkgIGRldi0+bmFtZSk7CiAJCQkJczJpb19zdG9wX2FsbF90eF9xdWV1ZShuaWMpOwogCQkJfQogCQl9CkBAIC02ODI3LDcgKzY4NDUsNyBAQAogCQl9CiAJCS8qIHR1cm4gb2ZmIExFRCAqLwogCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwotCQl2YWw2NCA9IHZhbDY0ICYofkFEQVBURVJfTEVEX09OKTsKKwkJdmFsNjQgPSB2YWw2NCAmICh+QURBUFRFUl9MRURfT04pOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5hZGFwdGVyX2NvbnRyb2wpOwogCQlzMmlvX2xpbmsobmljLCBMSU5LX0RPV04pOwogCX0KQEAgLTY4MzgsOSArNjg1Niw5IEBACiB9CiAKIHN0YXRpYyBpbnQgc2V0X3J4ZF9idWZmZXJfcG9pbnRlcihzdHJ1Y3QgczJpb19uaWMgKnNwLCBzdHJ1Y3QgUnhEX3QgKnJ4ZHAsCi0JCQkJc3RydWN0IGJ1ZmZBZGQgKmJhLAotCQkJCXN0cnVjdCBza19idWZmICoqc2tiLCB1NjQgKnRlbXAwLCB1NjQgKnRlbXAxLAotCQkJCXU2NCAqdGVtcDIsIGludCBzaXplKQorCQkJCSAgc3RydWN0IGJ1ZmZBZGQgKmJhLAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKipza2IsIHU2NCAqdGVtcDAsIHU2NCAqdGVtcDEsCisJCQkJICB1NjQgKnRlbXAyLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKIAlzdHJ1Y3Qgc3dTdGF0ICpzdGF0cyA9ICZzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdDsKQEAgLTY4NTksMjMgKzY4NzcsMjEgQEAKIAkJfSBlbHNlIHsKIAkJCSpza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpOwogCQkJaWYgKCEoKnNrYikpIHsKLQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogT3V0IG9mICIsIGRldi0+bmFtZSk7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAibWVtb3J5IHRvIGFsbG9jYXRlICIpOwotCQkJCURCR19QUklOVChJTkZPX0RCRywgIjEgYnVmIG1vZGUgU0tCc1xuIik7Ci0JCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuIFwKLQkJCQkJbWVtX2FsbG9jX2ZhaWxfY250Kys7CisJCQkJREJHX1BSSU5UKElORk9fREJHLAorCQkJCQkgICIlczogT3V0IG9mIG1lbW9yeSB0byBhbGxvY2F0ZSAlc1xuIiwKKwkJCQkJICBkZXYtPm5hbWUsICIxIGJ1ZiBtb2RlIFNLQnMiKTsKKwkJCQlzdGF0cy0+bWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCQkJcmV0dXJuIC1FTk9NRU0gOwogCQkJfQotCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2FsbG9jYXRlZAotCQkJCSs9ICgqc2tiKS0+dHJ1ZXNpemU7CisJCQlzdGF0cy0+bWVtX2FsbG9jYXRlZCArPSAoKnNrYiktPnRydWVzaXplOwogCQkJLyogc3RvcmluZyB0aGUgbWFwcGVkIGFkZHIgaW4gYSB0ZW1wIHZhcmlhYmxlCiAJCQkgKiBzdWNoIGl0IHdpbGwgYmUgdXNlZCBmb3IgbmV4dCByeGQgd2hvc2UKIAkJCSAqIEhvc3QgQ29udHJvbCBpcyBOVUxMCiAJCQkgKi8KIAkJCXJ4ZHAxLT5CdWZmZXIwX3B0ciA9ICp0ZW1wMCA9Ci0JCQkJcGNpX21hcF9zaW5nbGUoIHNwLT5wZGV2LCAoKnNrYiktPmRhdGEsCi0JCQkJCXNpemUgLSBORVRfSVBfQUxJR04sCi0JCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJcGNpX21hcF9zaW5nbGUoc3AtPnBkZXYsICgqc2tiKS0+ZGF0YSwKKwkJCQkJICAgICAgIHNpemUgLSBORVRfSVBfQUxJR04sCisJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihzcC0+cGRldiwgcnhkcDEtPkJ1ZmZlcjBfcHRyKSkKIAkJCQlnb3RvIG1lbWFsbG9jX2ZhaWxlZDsKIAkJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSAoKnNrYik7CkBAIC02ODkwLDE1ICs2OTA2LDE0IEBACiAJCX0gZWxzZSB7CiAJCQkqc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAkJCWlmICghKCpza2IpKSB7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IE91dCBvZiAiLCBkZXYtPm5hbWUpOwotCQkJCURCR19QUklOVChJTkZPX0RCRywgIm1lbW9yeSB0byBhbGxvY2F0ZSAiKTsKLQkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIyIGJ1ZiBtb2RlIFNLQnNcbiIpOwotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LiBcCi0JCQkJCW1lbV9hbGxvY19mYWlsX2NudCsrOworCQkJCURCR19QUklOVChJTkZPX0RCRywKKwkJCQkJICAiJXM6IE91dCBvZiBtZW1vcnkgdG8gYWxsb2NhdGUgJXNcbiIsCisJCQkJCSAgZGV2LT5uYW1lLAorCQkJCQkgICIyIGJ1ZiBtb2RlIFNLQnMiKTsKKwkJCQlzdGF0cy0+bWVtX2FsbG9jX2ZhaWxfY250Kys7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9Ci0JCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fYWxsb2NhdGVkCi0JCQkJKz0gKCpza2IpLT50cnVlc2l6ZTsKKwkJCXN0YXRzLT5tZW1fYWxsb2NhdGVkICs9ICgqc2tiKS0+dHJ1ZXNpemU7CiAJCQlyeGRwMy0+QnVmZmVyMl9wdHIgPSAqdGVtcDIgPQogCQkJCXBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCAoKnNrYiktPmRhdGEsCiAJCQkJCSAgICAgICBkZXYtPm10dSArIDQsCkBAIC02OTA2LDEzICs2OTIxLDE0IEBACiAJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNwLT5wZGV2LCByeGRwMy0+QnVmZmVyMl9wdHIpKQogCQkJCWdvdG8gbWVtYWxsb2NfZmFpbGVkOwogCQkJcnhkcDMtPkJ1ZmZlcjBfcHRyID0gKnRlbXAwID0KLQkJCQlwY2lfbWFwX3NpbmdsZSggc3AtPnBkZXYsIGJhLT5iYV8wLCBCVUYwX0xFTiwKLQkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJcGNpX21hcF9zaW5nbGUoc3AtPnBkZXYsIGJhLT5iYV8wLCBCVUYwX0xFTiwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNwLT5wZGV2LAotCQkJCQkJcnhkcDMtPkJ1ZmZlcjBfcHRyKSkgewotCQkJCXBjaV91bm1hcF9zaW5nbGUgKHNwLT5wZGV2LAotCQkJCQkoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMl9wdHIsCi0JCQkJCWRldi0+bXR1ICsgNCwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJCSAgcnhkcDMtPkJ1ZmZlcjBfcHRyKSkgeworCQkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsCisJCQkJCQkgKGRtYV9hZGRyX3QpcnhkcDMtPkJ1ZmZlcjJfcHRyLAorCQkJCQkJIGRldi0+bXR1ICsgNCwKKwkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJCWdvdG8gbWVtYWxsb2NfZmFpbGVkOwogCQkJfQogCQkJcnhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpICgqc2tiKTsKQEAgLTY5MjAsMjUgKzY5MzYsMjcgQEAKIAkJCS8qIEJ1ZmZlci0xIHdpbGwgYmUgZHVtbXkgYnVmZmVyIG5vdCB1c2VkICovCiAJCQlyeGRwMy0+QnVmZmVyMV9wdHIgPSAqdGVtcDEgPQogCQkJCXBjaV9tYXBfc2luZ2xlKHNwLT5wZGV2LCBiYS0+YmFfMSwgQlVGMV9MRU4sCi0JCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc3AtPnBkZXYsCi0JCQkJCQlyeGRwMy0+QnVmZmVyMV9wdHIpKSB7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZSAoc3AtPnBkZXYsCi0JCQkJCShkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIwX3B0ciwKLQkJCQkJQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZSAoc3AtPnBkZXYsCi0JCQkJCShkbWFfYWRkcl90KXJ4ZHAzLT5CdWZmZXIyX3B0ciwKLQkJCQkJZGV2LT5tdHUgKyA0LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCQkJICByeGRwMy0+QnVmZmVyMV9wdHIpKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwKKwkJCQkJCSAoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMF9wdHIsCisJCQkJCQkgQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwKKwkJCQkJCSAoZG1hX2FkZHJfdClyeGRwMy0+QnVmZmVyMl9wdHIsCisJCQkJCQkgZGV2LT5tdHUgKyA0LAorCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJZ290byBtZW1hbGxvY19mYWlsZWQ7CiAJCQl9CiAJCX0KIAl9CiAJcmV0dXJuIDA7Ci0JbWVtYWxsb2NfZmFpbGVkOgotCQlzdGF0cy0+cGNpX21hcF9mYWlsX2NudCsrOwotCQlzdGF0cy0+bWVtX2ZyZWVkICs9ICgqc2tiKS0+dHJ1ZXNpemU7Ci0JCWRldl9rZnJlZV9za2IoKnNrYik7Ci0JCXJldHVybiAtRU5PTUVNOworCittZW1hbGxvY19mYWlsZWQ6CisJc3RhdHMtPnBjaV9tYXBfZmFpbF9jbnQrKzsKKwlzdGF0cy0+bWVtX2ZyZWVkICs9ICgqc2tiKS0+dHJ1ZXNpemU7CisJZGV2X2tmcmVlX3NrYigqc2tiKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgc2V0X3J4ZF9idWZmZXJfc2l6ZShzdHJ1Y3QgczJpb19uaWMgKnNwLCBzdHJ1Y3QgUnhEX3QgKnJ4ZHAsCkBAIC02OTQ2LDE5ICs2OTY0LDE5IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CiAJaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8xKSB7Ci0JCXJ4ZHAtPkNvbnRyb2xfMiA9IFNFVF9CVUZGRVIwX1NJWkVfMSggc2l6ZSAtIE5FVF9JUF9BTElHTik7CisJCXJ4ZHAtPkNvbnRyb2xfMiA9IFNFVF9CVUZGRVIwX1NJWkVfMShzaXplIC0gTkVUX0lQX0FMSUdOKTsKIAl9IGVsc2UgaWYgKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgewogCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzMoQlVGMF9MRU4pOwogCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjFfU0laRV8zKDEpOwotCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjJfU0laRV8zKCBkZXYtPm10dSArIDQpOworCQlyeGRwLT5Db250cm9sXzIgfD0gU0VUX0JVRkZFUjJfU0laRV8zKGRldi0+bXR1ICsgNCk7CiAJfQogfQogCiBzdGF0aWMgIGludCByeGRfb3duZXJfYml0X3Jlc2V0KHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJaW50IGksIGosIGssIGJsa19jbnQgPSAwLCBzaXplOwotCXN0cnVjdCBtYWNfaW5mbyAqIG1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWcgPSAmc3AtPmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sID0gJnNwLT5tYWNfY29udHJvbDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3AtPmRldjsKIAlzdHJ1Y3QgUnhEX3QgKnJ4ZHAgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwpAQCAtNjk3NCwyMCArNjk5MiwyMSBAQAogCQlzaXplID0gZGV2LT5tdHUgKyBBTElHTl9TSVpFICsgQlVGMF9MRU4gKyA0OwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlibGtfY250ID0gY29uZmlnLT5yeF9jZmdbaV0ubnVtX3J4ZCAvCi0JCQkocnhkX2NvdW50W3NwLT5yeGRfbW9kZV0gKzEpOworCQlzdHJ1Y3QgcnhfcmluZ19jb25maWcgKnJ4X2NmZyA9ICZjb25maWctPnJ4X2NmZ1tpXTsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJYmxrX2NudCA9IHJ4X2NmZy0+bnVtX3J4ZCAvIChyeGRfY291bnRbc3AtPnJ4ZF9tb2RlXSArIDEpOwogCiAJCWZvciAoaiA9IDA7IGogPCBibGtfY250OyBqKyspIHsKIAkJCWZvciAoayA9IDA7IGsgPCByeGRfY291bnRbc3AtPnJ4ZF9tb2RlXTsgaysrKSB7Ci0JCQkJcnhkcCA9IG1hY19jb250cm9sLT5yaW5nc1tpXS4KLQkJCQkJcnhfYmxvY2tzW2pdLnJ4ZHNba10udmlydF9hZGRyOwotCQkJCWlmKHNwLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikKLQkJCQkJYmEgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldLmJhW2pdW2tdOwotCQkJCWlmIChzZXRfcnhkX2J1ZmZlcl9wb2ludGVyKHNwLCByeGRwLCBiYSwKLQkJCQkJCSAgICAgICAmc2tiLCh1NjQgKikmdGVtcDBfNjQsCi0JCQkJCQkgICAgICAgKHU2NCAqKSZ0ZW1wMV82NCwKLQkJCQkJCSAgICAgICAodTY0ICopJnRlbXAyXzY0LAotCQkJCQkJCXNpemUpID09IC1FTk9NRU0pIHsKKwkJCQlyeGRwID0gcmluZy0+cnhfYmxvY2tzW2pdLnJ4ZHNba10udmlydF9hZGRyOworCQkJCWlmIChzcC0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpCisJCQkJCWJhID0gJnJpbmctPmJhW2pdW2tdOworCQkJCWlmIChzZXRfcnhkX2J1ZmZlcl9wb2ludGVyKHNwLCByeGRwLCBiYSwgJnNrYiwKKwkJCQkJCQkgICAodTY0ICopJnRlbXAwXzY0LAorCQkJCQkJCSAgICh1NjQgKikmdGVtcDFfNjQsCisJCQkJCQkJICAgKHU2NCAqKSZ0ZW1wMl82NCwKKwkJCQkJCQkgICBzaXplKSA9PSAtRU5PTUVNKSB7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIApAQCAtNzAwMiw3ICs3MDIxLDcgQEAKIAogfQogCi1zdGF0aWMgaW50IHMyaW9fYWRkX2lzcihzdHJ1Y3QgczJpb19uaWMgKiBzcCkKK3N0YXRpYyBpbnQgczJpb19hZGRfaXNyKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5kZXY7CkBAIC03MDE1LDcgKzcwMzQsMTAgQEAKIAkJc3AtPmNvbmZpZy5pbnRyX3R5cGUgPSBJTlRBOwogCX0KIAotCS8qIFN0b3JlIHRoZSB2YWx1ZXMgb2YgdGhlIE1TSVggdGFibGUgaW4gdGhlIHN0cnVjdCBzMmlvX25pYyBzdHJ1Y3R1cmUgKi8KKwkvKgorCSAqIFN0b3JlIHRoZSB2YWx1ZXMgb2YgdGhlIE1TSVggdGFibGUgaW4KKwkgKiB0aGUgc3RydWN0IHMyaW9fbmljIHN0cnVjdHVyZQorCSAqLwogCXN0b3JlX3htc2lfZGF0YShzcCk7CiAKIAkvKiBBZnRlciBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgSC9XLCByZWdpc3RlciBJU1IgKi8KQEAgLTcwMjUsNDUgKzcwNDcsNDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IHNwLT5udW1fZW50cmllczsgaSsrKSB7CiAJCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS5pbl91c2UgPT0gTVNJWF9GTEcpIHsKIAkJCQlpZiAoc3AtPnMyaW9fZW50cmllc1tpXS50eXBlID09Ci0JCQkJCU1TSVhfUklOR19UWVBFKSB7CisJCQkJICAgIE1TSVhfUklOR19UWVBFKSB7CiAJCQkJCXNwcmludGYoc3AtPmRlc2NbaV0sICIlczpNU0ktWC0lZC1SWCIsCiAJCQkJCQlkZXYtPm5hbWUsIGkpOwogCQkJCQllcnIgPSByZXF1ZXN0X2lycShzcC0+ZW50cmllc1tpXS52ZWN0b3IsCi0JCQkJCQlzMmlvX21zaXhfcmluZ19oYW5kbGUsIDAsCi0JCQkJCQlzcC0+ZGVzY1tpXSwKLQkJCQkJCXNwLT5zMmlvX2VudHJpZXNbaV0uYXJnKTsKKwkJCQkJCQkgIHMyaW9fbXNpeF9yaW5nX2hhbmRsZSwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBzcC0+ZGVzY1tpXSwKKwkJCQkJCQkgIHNwLT5zMmlvX2VudHJpZXNbaV0uYXJnKTsKIAkJCQl9IGVsc2UgaWYgKHNwLT5zMmlvX2VudHJpZXNbaV0udHlwZSA9PQotCQkJCQlNU0lYX0FMQVJNX1RZUEUpIHsKKwkJCQkJICAgTVNJWF9BTEFSTV9UWVBFKSB7CiAJCQkJCXNwcmludGYoc3AtPmRlc2NbaV0sICIlczpNU0ktWC0lZC1UWCIsCi0JCQkJCWRldi0+bmFtZSwgaSk7CisJCQkJCQlkZXYtPm5hbWUsIGkpOwogCQkJCQllcnIgPSByZXF1ZXN0X2lycShzcC0+ZW50cmllc1tpXS52ZWN0b3IsCi0JCQkJCQlzMmlvX21zaXhfZmlmb19oYW5kbGUsIDAsCi0JCQkJCQlzcC0+ZGVzY1tpXSwKLQkJCQkJCXNwLT5zMmlvX2VudHJpZXNbaV0uYXJnKTsKKwkJCQkJCQkgIHMyaW9fbXNpeF9maWZvX2hhbmRsZSwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBzcC0+ZGVzY1tpXSwKKwkJCQkJCQkgIHNwLT5zMmlvX2VudHJpZXNbaV0uYXJnKTsKIAogCQkJCX0KIAkJCQkvKiBpZiBlaXRoZXIgZGF0YSBvciBhZGRyIGlzIHplcm8gcHJpbnQgaXQuICovCiAJCQkJaWYgKCEoc3AtPm1zaXhfaW5mb1tpXS5hZGRyICYmCi0JCQkJCXNwLT5tc2l4X2luZm9baV0uZGF0YSkpIHsKKwkJCQkgICAgICBzcC0+bXNpeF9pbmZvW2ldLmRhdGEpKSB7CiAJCQkJCURCR19QUklOVChFUlJfREJHLAotCQkJCQkJIiVzIEBBZGRyOjB4JWxseCBEYXRhOjB4JWxseFxuIiwKLQkJCQkJCXNwLT5kZXNjW2ldLAotCQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkJCXNwLT5tc2l4X2luZm9baV0uYWRkciwKLQkJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJCQludG9obChzcC0+bXNpeF9pbmZvW2ldLmRhdGEpKTsKKwkJCQkJCSAgIiVzIEBBZGRyOjB4JWxseCBEYXRhOjB4JWxseFxuIiwKKwkJCQkJCSAgc3AtPmRlc2NbaV0sCisJCQkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJCQkgIHNwLT5tc2l4X2luZm9baV0uYWRkciwKKwkJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJCQkJCSAgbnRvaGwoc3AtPm1zaXhfaW5mb1tpXS5kYXRhKSk7CiAJCQkJfSBlbHNlCiAJCQkJCW1zaXhfcnhfY250Kys7CiAJCQkJaWYgKGVycikgewogCQkJCQlyZW1vdmVfbXNpeF9pc3Ioc3ApOwogCiAJCQkJCURCR19QUklOVChFUlJfREJHLAotCQkJCQkJIiVzOk1TSS1YLSVkIHJlZ2lzdHJhdGlvbiAiCi0JCQkJCQkiZmFpbGVkXG4iLCBkZXYtPm5hbWUsIGkpOworCQkJCQkJICAiJXM6TVNJLVgtJWQgcmVnaXN0cmF0aW9uICIKKwkJCQkJCSAgImZhaWxlZFxuIiwgZGV2LT5uYW1lLCBpKTsKIAogCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCQkJCSIlczogRGVmYXVsdGluZyB0byBJTlRBXG4iLAotCQkJCQkJZGV2LT5uYW1lKTsKKwkJCQkJCSAgIiVzOiBEZWZhdWx0aW5nIHRvIElOVEFcbiIsCisJCQkJCQkgIGRldi0+bmFtZSk7CiAJCQkJCXNwLT5jb25maWcuaW50cl90eXBlID0gSU5UQTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNzA3MiwxNSArNzA5NiwxNCBAQAogCQkJfQogCQl9CiAJCWlmICghZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJNU0ktWC1SWCAlZCBlbnRyaWVzIGVuYWJsZWRcbiIsCi0JCQkJLS1tc2l4X3J4X2NudCk7Ci0JCQlEQkdfUFJJTlQoSU5GT19EQkcsICJNU0ktWC1UWCBlbnRyaWVzIGVuYWJsZWQiCi0JCQkJCQkiIHRocm91Z2ggYWxhcm0gdmVjdG9yXG4iKTsKKwkJCXByX2luZm8oIk1TSS1YLVJYICVkIGVudHJpZXMgZW5hYmxlZFxuIiwgLS1tc2l4X3J4X2NudCk7CisJCQlEQkdfUFJJTlQoSU5GT19EQkcsCisJCQkJICAiTVNJLVgtVFggZW50cmllcyBlbmFibGVkIHRocm91Z2ggYWxhcm0gdmVjdG9yXG4iKTsKIAkJfQogCX0KIAlpZiAoc3AtPmNvbmZpZy5pbnRyX3R5cGUgPT0gSU5UQSkgewotCQllcnIgPSByZXF1ZXN0X2lycSgoaW50KSBzcC0+cGRldi0+aXJxLCBzMmlvX2lzciwgSVJRRl9TSEFSRUQsCi0JCQkJc3AtPm5hbWUsIGRldik7CisJCWVyciA9IHJlcXVlc3RfaXJxKChpbnQpc3AtPnBkZXYtPmlycSwgczJpb19pc3IsIElSUUZfU0hBUkVELAorCQkJCSAgc3AtPm5hbWUsIGRldik7CiAJCWlmIChlcnIpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IElTUiByZWdpc3RyYXRpb24gZmFpbGVkXG4iLAogCQkJCSAgZGV2LT5uYW1lKTsKQEAgLTcwODksNyArNzExMiw4IEBACiAJfQogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQgczJpb19yZW1faXNyKHN0cnVjdCBzMmlvX25pYyAqIHNwKQorCitzdGF0aWMgdm9pZCBzMmlvX3JlbV9pc3Ioc3RydWN0IHMyaW9fbmljICpzcCkKIHsKIAlpZiAoc3AtPmNvbmZpZy5pbnRyX3R5cGUgPT0gTVNJX1gpCiAJCXJlbW92ZV9tc2l4X2lzcihzcCk7CkBAIC03MDk3LDcgKzcxMjEsNyBAQAogCQlyZW1vdmVfaW50YV9pc3Ioc3ApOwogfQogCi1zdGF0aWMgdm9pZCBkb19zMmlvX2NhcmRfZG93bihzdHJ1Y3QgczJpb19uaWMgKiBzcCwgaW50IGRvX2lvKQorc3RhdGljIHZvaWQgZG9fczJpb19jYXJkX2Rvd24oc3RydWN0IHMyaW9fbmljICpzcCwgaW50IGRvX2lvKQogewogCWludCBjbnQgPSAwOwogCXN0cnVjdCBYRU5BX2Rldl9jb25maWcgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwpAQCAtNzExMCw5ICs3MTM0LDggQEAKIAogCWRlbF90aW1lcl9zeW5jKCZzcC0+YWxhcm1fdGltZXIpOwogCS8qIElmIHMyaW9fc2V0X2xpbmsgdGFzayBpcyBleGVjdXRpbmcsIHdhaXQgdGlsbCBpdCBjb21wbGV0ZXMuICovCi0Jd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19TMklPX1NUQVRFX0xJTktfVEFTSywgJihzcC0+c3RhdGUpKSkgeworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fUzJJT19TVEFURV9MSU5LX1RBU0ssICYoc3AtPnN0YXRlKSkpCiAJCW1zbGVlcCg1MCk7Ci0JfQogCWNsZWFyX2JpdChfX1MySU9fU1RBVEVfQ0FSRF9VUCwgJnNwLT5zdGF0ZSk7CiAKIAkvKiBEaXNhYmxlIG5hcGkgKi8KQEAgLTcxMjEsNyArNzE0NCw3IEBACiAJCWlmIChjb25maWctPmludHJfdHlwZSA9PSAgTVNJX1gpIHsKIAkJCWZvciAoOyBvZmYgPCBzcC0+Y29uZmlnLnJ4X3JpbmdfbnVtOyBvZmYrKykKIAkJCQluYXBpX2Rpc2FibGUoJnNwLT5tYWNfY29udHJvbC5yaW5nc1tvZmZdLm5hcGkpOwotCQkJfQorCQl9CiAJCWVsc2UKIAkJCW5hcGlfZGlzYWJsZSgmc3AtPm5hcGkpOwogCX0KQEAgLTcxMzYsNyArNzE1OSw3IEBACiAJczJpb19saW5rKHNwLCBMSU5LX0RPV04pOwogCiAJLyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBRdWllc2NlbnQgYW5kIHRoZW4gUmVzZXQgdGhlIE5JQyAqLwotCXdoaWxlKGRvX2lvKSB7CisJd2hpbGUgKGRvX2lvKSB7CiAJCS8qIEFzIHBlciB0aGUgSFcgcmVxdWlyZW1lbnQgd2UgbmVlZCB0byByZXBsZW5pc2ggdGhlCiAJCSAqIHJlY2VpdmUgYnVmZmVyIHRvIGF2b2lkIHRoZSByaW5nIGJ1bXAuIFNpbmNlIHRoZXJlIGlzCiAJCSAqIG5vIGludGVudGlvbiBvZiBwcm9jZXNzaW5nIHRoZSBSeCBmcmFtZSBhdCB0aGlzIHBvaW50d2UgYXJlCkBAIC03MTQ4LDE3ICs3MTcxLDE2IEBACiAKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+YWRhcHRlcl9zdGF0dXMpOwogCQlpZiAodmVyaWZ5X3hlbmFfcXVpZXNjZW5jZShzcCkpIHsKLQkJCWlmKHZlcmlmeV9wY2NfcXVpZXNjZW50KHNwLCBzcC0+ZGV2aWNlX2VuYWJsZWRfb25jZSkpCi0JCQlicmVhazsKKwkJCWlmICh2ZXJpZnlfcGNjX3F1aWVzY2VudChzcCwgc3AtPmRldmljZV9lbmFibGVkX29uY2UpKQorCQkJCWJyZWFrOwogCQl9CiAKIAkJbXNsZWVwKDUwKTsKIAkJY250Kys7CiAJCWlmIChjbnQgPT0gMTApIHsKLQkJCURCR19QUklOVChFUlJfREJHLAotCQkJCSAgInMyaW9fY2xvc2U6RGV2aWNlIG5vdCBRdWllc2NlbnQgIik7Ci0JCQlEQkdfUFJJTlQoRVJSX0RCRywgImFkYXBlciBzdGF0dXMgcmVhZHMgMHglbGx4XG4iLAotCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdmFsNjQpOworCQkJREJHX1BSSU5UKEVSUl9EQkcsICJEZXZpY2Ugbm90IFF1aWVzY2VudCAtICIKKwkJCQkgICJhZGFwdGVyIHN0YXR1cyByZWFkcyAweCVsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKXZhbDY0KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzE3NCwxNyArNzE5NiwxNyBAQAogCWNsZWFyX2JpdChfX1MySU9fU1RBVEVfTElOS19UQVNLLCAmKHNwLT5zdGF0ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBzMmlvX2NhcmRfZG93bihzdHJ1Y3QgczJpb19uaWMgKiBzcCkKK3N0YXRpYyB2b2lkIHMyaW9fY2FyZF9kb3duKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJZG9fczJpb19jYXJkX2Rvd24oc3AsIDEpOwogfQogCi1zdGF0aWMgaW50IHMyaW9fY2FyZF91cChzdHJ1Y3QgczJpb19uaWMgKiBzcCkKK3N0YXRpYyBpbnQgczJpb19jYXJkX3VwKHN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJaW50IGksIHJldCA9IDA7Ci0Jc3RydWN0IG1hY19pbmZvICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBzcC0+ZGV2OworCXN0cnVjdCBtYWNfaW5mbyAqbWFjX2NvbnRyb2w7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXNwLT5kZXY7CiAJdTE2IGludGVycnVwdGlibGU7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBIL1cgSS9PIHJlZ2lzdGVycyAqLwpAQCAtNzIwMSwxMiArNzIyMywxNCBAQAogCSAqIEluaXRpYWxpemluZyB0aGUgUnggYnVmZmVycy4gRm9yIG5vdyB3ZSBhcmUgY29uc2lkZXJpbmcgb25seSAxCiAJICogUnggcmluZyBhbmQgaW5pdGlhbGl6aW5nIGJ1ZmZlcnMgaW50byAzMCBSeCBibG9ja3MKIAkgKi8KLQltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAJY29uZmlnID0gJnNwLT5jb25maWc7CisJbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ubXR1ID0gZGV2LT5tdHU7Ci0JCXJldCA9IGZpbGxfcnhfYnVmZmVycyhzcCwgJm1hY19jb250cm9sLT5yaW5nc1tpXSwgMSk7CisJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCXJpbmctPm10dSA9IGRldi0+bXR1OworCQlyZXQgPSBmaWxsX3J4X2J1ZmZlcnMoc3AsIHJpbmcsIDEpOwogCQlpZiAocmV0KSB7CiAJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBPdXQgb2YgbWVtb3J5IGluIE9wZW5cbiIsCiAJCQkJICBkZXYtPm5hbWUpOwpAQCAtNzIxNSw3ICs3MjM5LDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCURCR19QUklOVChJTkZPX0RCRywgIkJ1ZiBpbiByaW5nOiVkIGlzICVkOlxuIiwgaSwKLQkJCSAgbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2J1ZnNfbGVmdCk7CisJCQkgIHJpbmctPnJ4X2J1ZnNfbGVmdCk7CiAJfQogCiAJLyogSW5pdGlhbGlzZSBuYXBpICovCkBAIC03MjMzLDcgKzcyNTcsNyBAQAogCQlzcC0+cHJvbWlzY19mbGcgPSAwOwogCWlmIChzcC0+bV9jYXN0X2ZsZykgewogCQlzcC0+bV9jYXN0X2ZsZyA9IDA7Ci0JCXNwLT5hbGxfbXVsdGlfcG9zPSAwOworCQlzcC0+YWxsX211bHRpX3BvcyA9IDA7CiAJfQogCiAJLyogU2V0dGluZyBpdHMgcmVjZWl2ZSBtb2RlICovCkBAIC03MjQyLDcgKzcyNjYsNyBAQAogCWlmIChzcC0+bHJvKSB7CiAJCS8qIEluaXRpYWxpemUgbWF4IGFnZ3JlZ2F0YWJsZSBwa3RzIHBlciBzZXNzaW9uIGJhc2VkIG9uIE1UVSAqLwogCQlzcC0+bHJvX21heF9hZ2dyX3Blcl9zZXNzID0gKCgxPDwxNikgLSAxKSAvIGRldi0+bXR1OwotCQkvKiBDaGVjayBpZiB3ZSBjYW4gdXNlKGlmIHNwZWNpZmllZCkgdXNlciBwcm92aWRlZCB2YWx1ZSAqLworCQkvKiBDaGVjayBpZiB3ZSBjYW4gdXNlIChpZiBzcGVjaWZpZWQpIHVzZXIgcHJvdmlkZWQgdmFsdWUgKi8KIAkJaWYgKGxyb19tYXhfcGt0cyA8IHNwLT5scm9fbWF4X2FnZ3JfcGVyX3Nlc3MpCiAJCQlzcC0+bHJvX21heF9hZ2dyX3Blcl9zZXNzID0gbHJvX21heF9wa3RzOwogCX0KQEAgLTczMDQsMTIgKzczMjgsMTAgQEAKIAogCXMyaW9fY2FyZF9kb3duKHNwKTsKIAlpZiAoczJpb19jYXJkX3VwKHNwKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgYnJpbmcgdXAgZmFpbGVkXG4iLAotCQkJICBkZXYtPm5hbWUpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBEZXZpY2UgYnJpbmcgdXAgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCX0KIAlzMmlvX3dha2VfYWxsX3R4X3F1ZXVlKHNwKTsKLQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiB3YXMgcmVzZXQgYnkgVHggd2F0Y2hkb2cgdGltZXJcbiIsCi0JCSAgZGV2LT5uYW1lKTsKKwlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiB3YXMgcmVzZXQgYnkgVHggd2F0Y2hkb2cgdGltZXJcbiIsIGRldi0+bmFtZSk7CiBvdXRfdW5sb2NrOgogCXJ0bmxfdW5sb2NrKCk7CiB9CkBAIC03MzMwLDExICs3MzUyLDEyIEBACiBzdGF0aWMgdm9pZCBzMmlvX3R4X3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdDsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQud2F0Y2hkb2dfdGltZXJfY250Kys7CisJCXN3c3RhdHMtPndhdGNoZG9nX3RpbWVyX2NudCsrOwogCQlzY2hlZHVsZV93b3JrKCZzcC0+cnN0X3RpbWVyX3Rhc2spOwotCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5zb2Z0X3Jlc2V0X2NudCsrOworCQlzd3N0YXRzLT5zb2Z0X3Jlc2V0X2NudCsrOwogCX0KIH0KIApAQCAtNzM1OCw4MSArNzM4MSw3MyBAQAogc3RhdGljIGludCByeF9vc21faGFuZGxlcihzdHJ1Y3QgcmluZ19pbmZvICpyaW5nX2RhdGEsIHN0cnVjdCBSeERfdCAqIHJ4ZHApCiB7CiAJc3RydWN0IHMyaW9fbmljICpzcCA9IHJpbmdfZGF0YS0+bmljOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgcmluZ19kYXRhLT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXJpbmdfZGF0YS0+ZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikKLQkJKCh1bnNpZ25lZCBsb25nKSByeGRwLT5Ib3N0X0NvbnRyb2wpOworCQkoKHVuc2lnbmVkIGxvbmcpcnhkcC0+SG9zdF9Db250cm9sKTsKIAlpbnQgcmluZ19ubyA9IHJpbmdfZGF0YS0+cmluZ19ubzsKIAl1MTYgbDNfY3N1bSwgbDRfY3N1bTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZXJyID0gcnhkcC0+Q29udHJvbF8xICYgUlhEX1RfQ09ERTsKIAlzdHJ1Y3QgbHJvICp1bmluaXRpYWxpemVkX3Zhcihscm8pOwogCXU4IGVycl9tYXNrOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKIAlza2ItPmRldiA9IGRldjsKIAogCWlmIChlcnIpIHsKIAkJLyogQ2hlY2sgZm9yIHBhcml0eSBlcnJvciAqLwotCQlpZiAoZXJyICYgMHgxKSB7Ci0JCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5wYXJpdHlfZXJyX2NudCsrOwotCQl9CisJCWlmIChlcnIgJiAweDEpCisJCQlzd3N0YXRzLT5wYXJpdHlfZXJyX2NudCsrOworCiAJCWVycl9tYXNrID0gZXJyID4+IDQ4OwotCQlzd2l0Y2goZXJyX21hc2spIHsKLQkJCWNhc2UgMToKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQlyeF9wYXJpdHlfZXJyX2NudCsrOworCQlzd2l0Y2ggKGVycl9tYXNrKSB7CisJCWNhc2UgMToKKwkJCXN3c3RhdHMtPnJ4X3Bhcml0eV9lcnJfY250Kys7CiAJCQlicmVhazsKIAotCQkJY2FzZSAyOgotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCXJ4X2Fib3J0X2NudCsrOworCQljYXNlIDI6CisJCQlzd3N0YXRzLT5yeF9hYm9ydF9jbnQrKzsKIAkJCWJyZWFrOwogCi0JCQljYXNlIDM6Ci0JCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJcnhfcGFyaXR5X2Fib3J0X2NudCsrOworCQljYXNlIDM6CisJCQlzd3N0YXRzLT5yeF9wYXJpdHlfYWJvcnRfY250Kys7CiAJCQlicmVhazsKIAotCQkJY2FzZSA0OgotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCXJ4X3JkYV9mYWlsX2NudCsrOworCQljYXNlIDQ6CisJCQlzd3N0YXRzLT5yeF9yZGFfZmFpbF9jbnQrKzsKIAkJCWJyZWFrOwogCi0JCQljYXNlIDU6Ci0JCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuCi0JCQkJcnhfdW5rbl9wcm90X2NudCsrOworCQljYXNlIDU6CisJCQlzd3N0YXRzLT5yeF91bmtuX3Byb3RfY250Kys7CiAJCQlicmVhazsKIAotCQkJY2FzZSA2OgotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCXJ4X2Zjc19lcnJfY250Kys7CisJCWNhc2UgNjoKKwkJCXN3c3RhdHMtPnJ4X2Zjc19lcnJfY250Kys7CiAJCQlicmVhazsKIAotCQkJY2FzZSA3OgotCQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LgotCQkJCXJ4X2J1Zl9zaXplX2Vycl9jbnQrKzsKKwkJY2FzZSA3OgorCQkJc3dzdGF0cy0+cnhfYnVmX3NpemVfZXJyX2NudCsrOwogCQkJYnJlYWs7CiAKLQkJCWNhc2UgODoKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQlyeF9yeGRfY29ycnVwdF9jbnQrKzsKKwkJY2FzZSA4OgorCQkJc3dzdGF0cy0+cnhfcnhkX2NvcnJ1cHRfY250Kys7CiAJCQlicmVhazsKIAotCQkJY2FzZSAxNToKLQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC4KLQkJCQlyeF91bmtuX2Vycl9jbnQrKzsKKwkJY2FzZSAxNToKKwkJCXN3c3RhdHMtPnJ4X3Vua25fZXJyX2NudCsrOwogCQkJYnJlYWs7CiAJCX0KIAkJLyoKLQkJKiBEcm9wIHRoZSBwYWNrZXQgaWYgYmFkIHRyYW5zZmVyIGNvZGUuIEV4Y2VwdGlvbiBiZWluZwotCQkqIDB4NSwgd2hpY2ggY291bGQgYmUgZHVlIHRvIHVuc3VwcG9ydGVkIElQdjYgZXh0ZW5zaW9uIGhlYWRlci4KLQkJKiBJbiB0aGlzIGNhc2UsIHdlIGxldCBzdGFjayBoYW5kbGUgdGhlIHBhY2tldC4KLQkJKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCBzaW5jZSBjaGVja3N1bSB3aWxsIGJlIGluY29ycmVjdCwKLQkJKiBzdGFjayB3aWxsIHZhbGlkYXRlIHRoZSBzYW1lLgotCQkqLworCQkgKiBEcm9wIHRoZSBwYWNrZXQgaWYgYmFkIHRyYW5zZmVyIGNvZGUuIEV4Y2VwdGlvbiBiZWluZworCQkgKiAweDUsIHdoaWNoIGNvdWxkIGJlIGR1ZSB0byB1bnN1cHBvcnRlZCBJUHY2IGV4dGVuc2lvbiBoZWFkZXIuCisJCSAqIEluIHRoaXMgY2FzZSwgd2UgbGV0IHN0YWNrIGhhbmRsZSB0aGUgcGFja2V0LgorCQkgKiBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCBzaW5jZSBjaGVja3N1bSB3aWxsIGJlIGluY29ycmVjdCwKKwkJICogc3RhY2sgd2lsbCB2YWxpZGF0ZSB0aGUgc2FtZS4KKwkJICovCiAJCWlmIChlcnJfbWFzayAhPSAweDUpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IFJ4IGVycm9yIFZhbHVlOiAweCV4XG4iLAotCQkJCWRldi0+bmFtZSwgZXJyX21hc2spOworCQkJCSAgZGV2LT5uYW1lLCBlcnJfbWFzayk7CiAJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0Lm1lbV9mcmVlZAorCQkJc3dzdGF0cy0+bWVtX2ZyZWVkCiAJCQkJKz0gc2tiLT50cnVlc2l6ZTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCXJpbmdfZGF0YS0+cnhfYnVmc19sZWZ0IC09IDE7CkBAIC03NDYzLDggKzc0NzgsOSBAQAogCQlza2JfcHV0KHNrYiwgYnVmMl9sZW4pOwogCX0KIAotCWlmICgocnhkcC0+Q29udHJvbF8xICYgVENQX09SX1VEUF9GUkFNRSkgJiYgKCghcmluZ19kYXRhLT5scm8pIHx8Ci0JICAgIChyaW5nX2RhdGEtPmxybyAmJiAoIShyeGRwLT5Db250cm9sXzEgJiBSWERfRlJBTUVfSVBfRlJBRykpKSkgJiYKKwlpZiAoKHJ4ZHAtPkNvbnRyb2xfMSAmIFRDUF9PUl9VRFBfRlJBTUUpICYmCisJICAgICgoIXJpbmdfZGF0YS0+bHJvKSB8fAorCSAgICAgKHJpbmdfZGF0YS0+bHJvICYmICghKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9GUkFNRV9JUF9GUkFHKSkpKSAmJgogCSAgICAoc3AtPnJ4X2NzdW0pKSB7CiAJCWwzX2NzdW0gPSBSWERfR0VUX0wzX0NLU1VNKHJ4ZHAtPkNvbnRyb2xfMSk7CiAJCWw0X2NzdW0gPSBSWERfR0VUX0w0X0NLU1VNKHJ4ZHAtPkNvbnRyb2xfMSk7CkBAIC03NDgxLDUyICs3NDk3LDQyIEBACiAJCQkJaW50IHJldCA9IDA7CiAKIAkJCQlyZXQgPSBzMmlvX2NsdWJfdGNwX3Nlc3Npb24ocmluZ19kYXRhLAotCQkJCQlza2ItPmRhdGEsICZ0Y3AsICZ0Y3BfbGVuLCAmbHJvLAotCQkJCQlyeGRwLCBzcCk7CisJCQkJCQkJICAgIHNrYi0+ZGF0YSwgJnRjcCwKKwkJCQkJCQkgICAgJnRjcF9sZW4sICZscm8sCisJCQkJCQkJICAgIHJ4ZHAsIHNwKTsKIAkJCQlzd2l0Y2ggKHJldCkgewotCQkJCQljYXNlIDM6IC8qIEJlZ2luIGFuZXcgKi8KLQkJCQkJCWxyby0+cGFyZW50ID0gc2tiOwotCQkJCQkJZ290byBhZ2dyZWdhdGU7Ci0JCQkJCWNhc2UgMTogLyogQWdncmVnYXRlICovCi0JCQkJCXsKLQkJCQkJCWxyb19hcHBlbmRfcGt0KHNwLCBscm8sCi0JCQkJCQkJc2tiLCB0Y3BfbGVuKTsKLQkJCQkJCWdvdG8gYWdncmVnYXRlOwotCQkJCQl9Ci0JCQkJCWNhc2UgNDogLyogRmx1c2ggc2Vzc2lvbiAqLwotCQkJCQl7Ci0JCQkJCQlscm9fYXBwZW5kX3BrdChzcCwgbHJvLAotCQkJCQkJCXNrYiwgdGNwX2xlbik7Ci0JCQkJCQlxdWV1ZV9yeF9mcmFtZShscm8tPnBhcmVudCwKLQkJCQkJCQlscm8tPnZsYW5fdGFnKTsKLQkJCQkJCWNsZWFyX2xyb19zZXNzaW9uKGxybyk7Ci0JCQkJCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+Ci0JCQkJCQkgICAgc3dfc3RhdC5mbHVzaF9tYXhfcGt0cysrOwotCQkJCQkJZ290byBhZ2dyZWdhdGU7Ci0JCQkJCX0KLQkJCQkJY2FzZSAyOiAvKiBGbHVzaCBib3RoICovCi0JCQkJCQlscm8tPnBhcmVudC0+ZGF0YV9sZW4gPQotCQkJCQkJCWxyby0+ZnJhZ3NfbGVuOwotCQkJCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPgotCQkJCQkJICAgICBzd19zdGF0LnNlbmRpbmdfYm90aCsrOwotCQkJCQkJcXVldWVfcnhfZnJhbWUobHJvLT5wYXJlbnQsCi0JCQkJCQkJbHJvLT52bGFuX3RhZyk7Ci0JCQkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOwotCQkJCQkJZ290byBzZW5kX3VwOwotCQkJCQljYXNlIDA6IC8qIHNlc3Npb25zIGV4Y2VlZGVkICovCi0JCQkJCWNhc2UgLTE6IC8qIG5vbi1UQ1Agb3Igbm90Ci0JCQkJCQkgICogTDIgYWdncmVnYXRhYmxlCi0JCQkJCQkgICovCi0JCQkJCWNhc2UgNTogLyoKLQkJCQkJCSAqIEZpcnN0IHBrdCBpbiBzZXNzaW9uIG5vdAotCQkJCQkJICogTDMvTDQgYWdncmVnYXRhYmxlCi0JCQkJCQkgKi8KLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkJCQkJIiVzOiBTYW1hZGhhbmEhIVxuIiwKLQkJCQkJCQkgX19mdW5jX18pOwotCQkJCQkJQlVHKCk7CisJCQkJY2FzZSAzOiAvKiBCZWdpbiBhbmV3ICovCisJCQkJCWxyby0+cGFyZW50ID0gc2tiOworCQkJCQlnb3RvIGFnZ3JlZ2F0ZTsKKwkJCQljYXNlIDE6IC8qIEFnZ3JlZ2F0ZSAqLworCQkJCQlscm9fYXBwZW5kX3BrdChzcCwgbHJvLCBza2IsIHRjcF9sZW4pOworCQkJCQlnb3RvIGFnZ3JlZ2F0ZTsKKwkJCQljYXNlIDQ6IC8qIEZsdXNoIHNlc3Npb24gKi8KKwkJCQkJbHJvX2FwcGVuZF9wa3Qoc3AsIGxybywgc2tiLCB0Y3BfbGVuKTsKKwkJCQkJcXVldWVfcnhfZnJhbWUobHJvLT5wYXJlbnQsCisJCQkJCQkgICAgICAgbHJvLT52bGFuX3RhZyk7CisJCQkJCWNsZWFyX2xyb19zZXNzaW9uKGxybyk7CisJCQkJCXN3c3RhdHMtPmZsdXNoX21heF9wa3RzKys7CisJCQkJCWdvdG8gYWdncmVnYXRlOworCQkJCWNhc2UgMjogLyogRmx1c2ggYm90aCAqLworCQkJCQlscm8tPnBhcmVudC0+ZGF0YV9sZW4gPSBscm8tPmZyYWdzX2xlbjsKKwkJCQkJc3dzdGF0cy0+c2VuZGluZ19ib3RoKys7CisJCQkJCXF1ZXVlX3J4X2ZyYW1lKGxyby0+cGFyZW50LAorCQkJCQkJICAgICAgIGxyby0+dmxhbl90YWcpOworCQkJCQljbGVhcl9scm9fc2Vzc2lvbihscm8pOworCQkJCQlnb3RvIHNlbmRfdXA7CisJCQkJY2FzZSAwOiAvKiBzZXNzaW9ucyBleGNlZWRlZCAqLworCQkJCWNhc2UgLTE6IC8qIG5vbi1UQ1Agb3Igbm90IEwyIGFnZ3JlZ2F0YWJsZSAqLworCQkJCWNhc2UgNTogLyoKKwkJCQkJICogRmlyc3QgcGt0IGluIHNlc3Npb24gbm90CisJCQkJCSAqIEwzL0w0IGFnZ3JlZ2F0YWJsZQorCQkJCQkgKi8KKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkJCQkgICIlczogU2FtYWRoYW5hISFcbiIsCisJCQkJCQkgIF9fZnVuY19fKTsKKwkJCQkJQlVHKCk7CiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewpAQCAtNzUzOSw3ICs3NTQ1LDcgQEAKIAl9IGVsc2UKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCi0Jc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CisJc3dzdGF0cy0+bWVtX2ZyZWVkICs9IHNrYi0+dHJ1ZXNpemU7CiBzZW5kX3VwOgogCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByaW5nX25vKTsKIAlxdWV1ZV9yeF9mcmFtZShza2IsIFJYRF9HRVRfVkxBTl9UQUcocnhkcC0+Q29udHJvbF8yKSk7CkBAIC03NTYxLDkgKzc1NjcsMTAgQEAKICAqICB2b2lkLgogICovCiAKLXN0YXRpYyB2b2lkIHMyaW9fbGluayhzdHJ1Y3QgczJpb19uaWMgKiBzcCwgaW50IGxpbmspCitzdGF0aWMgdm9pZCBzMmlvX2xpbmsoc3RydWN0IHMyaW9fbmljICpzcCwgaW50IGxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBzcC0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilzcC0+ZGV2OworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKIAlpZiAobGluayAhPSBzcC0+bGFzdF9saW5rX3N0YXRlKSB7CiAJCWluaXRfdHRpKHNwLCBsaW5rKTsKQEAgLTc1NzEsMTYgKzc1NzgsMTYgQEAKIAkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IExpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKIAkJCXMyaW9fc3RvcF9hbGxfdHhfcXVldWUoc3ApOwogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJCWlmKHNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfdXBfY250KQotCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua191cF90aW1lID0KLQkJCQlqaWZmaWVzIC0gc3AtPnN0YXJ0X3RpbWU7Ci0JCQlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fY250Kys7CisJCQlpZiAoc3dzdGF0cy0+bGlua191cF9jbnQpCisJCQkJc3dzdGF0cy0+bGlua191cF90aW1lID0KKwkJCQkJamlmZmllcyAtIHNwLT5zdGFydF90aW1lOworCQkJc3dzdGF0cy0+bGlua19kb3duX2NudCsrOwogCQl9IGVsc2UgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTGluayBVcFxuIiwgZGV2LT5uYW1lKTsKLQkJCWlmIChzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5saW5rX2Rvd25fY250KQotCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubGlua19kb3duX3RpbWUgPQotCQkJCWppZmZpZXMgLSBzcC0+c3RhcnRfdGltZTsKLQkJCXNwLT5tYWNfY29udHJvbC5zdGF0c19pbmZvLT5zd19zdGF0LmxpbmtfdXBfY250Kys7CisJCQlpZiAoc3dzdGF0cy0+bGlua19kb3duX2NudCkKKwkJCQlzd3N0YXRzLT5saW5rX2Rvd25fdGltZSA9CisJCQkJCWppZmZpZXMgLSBzcC0+c3RhcnRfdGltZTsKKwkJCXN3c3RhdHMtPmxpbmtfdXBfY250Kys7CiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCQlzMmlvX3dha2VfYWxsX3R4X3F1ZXVlKHNwKTsKIAkJfQpAQCAtNzYwMCw3ICs3NjA3LDcgQEAKICAqICB2b2lkCiAgKi8KIAotc3RhdGljIHZvaWQgczJpb19pbml0X3BjaShzdHJ1Y3QgczJpb19uaWMgKiBzcCkKK3N0YXRpYyB2b2lkIHMyaW9faW5pdF9wY2koc3RydWN0IHMyaW9fbmljICpzcCkKIHsKIAl1MTYgcGNpX2NtZCA9IDAsIHBjaXhfY21kID0gMDsKIApAQCAtNzYyMCwyMCArNzYyNywxOCBAQAogfQogCiBzdGF0aWMgaW50IHMyaW9fdmVyaWZ5X3Bhcm0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4ICpkZXZfaW50cl90eXBlLAotCXU4ICpkZXZfbXVsdGlxKQorCQkJICAgIHU4ICpkZXZfbXVsdGlxKQogewotCWlmICgodHhfZmlmb19udW0gPiBNQVhfVFhfRklGT1MpIHx8Ci0JCSh0eF9maWZvX251bSA8IDEpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIG51bWJlciBvZiB0eCBmaWZvcyAiCi0JCQkiKCVkKSBub3Qgc3VwcG9ydGVkXG4iLCB0eF9maWZvX251bSk7CisJaWYgKCh0eF9maWZvX251bSA+IE1BWF9UWF9GSUZPUykgfHwgKHR4X2ZpZm9fbnVtIDwgMSkpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJSZXF1ZXN0ZWQgbnVtYmVyIG9mIHR4IGZpZm9zICIKKwkJCSAgIiglZCkgbm90IHN1cHBvcnRlZFxuIiwgdHhfZmlmb19udW0pOwogCiAJCWlmICh0eF9maWZvX251bSA8IDEpCiAJCQl0eF9maWZvX251bSA9IDE7CiAJCWVsc2UKIAkJCXR4X2ZpZm9fbnVtID0gTUFYX1RYX0ZJRk9TOwogCi0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogRGVmYXVsdCB0byAlZCAiLCB0eF9maWZvX251bSk7Ci0JCURCR19QUklOVChFUlJfREJHLCAidHggZmlmb3NcbiIpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIkRlZmF1bHQgdG8gJWQgdHggZmlmb3NcbiIsIHR4X2ZpZm9fbnVtKTsKIAl9CiAKIAlpZiAobXVsdGlxKQpAQCAtNzY0Miw0NCArNzY0Nyw0NCBAQAogCWlmICh0eF9zdGVlcmluZ190eXBlICYmICgxID09IHR4X2ZpZm9fbnVtKSkgewogCQlpZiAodHhfc3RlZXJpbmdfdHlwZSAhPSBUWF9ERUZBVUxUX1NURUVSSU5HKQogCQkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkJInMyaW86IFR4IHN0ZWVyaW5nIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCAiCi0JCQkJIm9uZSBmaWZvLiBEaXNhYmxpbmcgVHggc3RlZXJpbmcuXG4iKTsKKwkJCQkgICJUeCBzdGVlcmluZyBpcyBub3Qgc3VwcG9ydGVkIHdpdGggIgorCQkJCSAgIm9uZSBmaWZvLiBEaXNhYmxpbmcgVHggc3RlZXJpbmcuXG4iKTsKIAkJdHhfc3RlZXJpbmdfdHlwZSA9IE5PX1NURUVSSU5HOwogCX0KIAogCWlmICgodHhfc3RlZXJpbmdfdHlwZSA8IE5PX1NURUVSSU5HKSB8fAotCQkodHhfc3RlZXJpbmdfdHlwZSA+IFRYX0RFRkFVTFRfU1RFRVJJTkcpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIHRyYW5zbWl0IHN0ZWVyaW5nIG5vdCAiCi0JCQkgInN1cHBvcnRlZFxuIik7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogRGlzYWJsaW5nIHRyYW5zbWl0IHN0ZWVyaW5nXG4iKTsKKwkgICAgKHR4X3N0ZWVyaW5nX3R5cGUgPiBUWF9ERUZBVUxUX1NURUVSSU5HKSkgeworCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCSAgIlJlcXVlc3RlZCB0cmFuc21pdCBzdGVlcmluZyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJEaXNhYmxpbmcgdHJhbnNtaXQgc3RlZXJpbmdcbiIpOwogCQl0eF9zdGVlcmluZ190eXBlID0gTk9fU1RFRVJJTkc7CiAJfQogCiAJaWYgKHJ4X3JpbmdfbnVtID4gTUFYX1JYX1JJTkdTKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogUmVxdWVzdGVkIG51bWJlciBvZiByeCByaW5ncyBub3QgIgotCQkJICJzdXBwb3J0ZWRcbiIpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERlZmF1bHQgdG8gJWQgcnggcmluZ3NcbiIsCi0JCQlNQVhfUlhfUklOR1MpOworCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCSAgIlJlcXVlc3RlZCBudW1iZXIgb2YgcnggcmluZ3Mgbm90IHN1cHBvcnRlZFxuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiRGVmYXVsdCB0byAlZCByeCByaW5nc1xuIiwKKwkJCSAgTUFYX1JYX1JJTkdTKTsKIAkJcnhfcmluZ19udW0gPSBNQVhfUlhfUklOR1M7CiAJfQogCiAJaWYgKCgqZGV2X2ludHJfdHlwZSAhPSBJTlRBKSAmJiAoKmRldl9pbnRyX3R5cGUgIT0gTVNJX1gpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogV3JvbmcgaW50cl90eXBlIHJlcXVlc3RlZC4gIgorCQlEQkdfUFJJTlQoRVJSX0RCRywgIldyb25nIGludHJfdHlwZSByZXF1ZXN0ZWQuICIKIAkJCSAgIkRlZmF1bHRpbmcgdG8gSU5UQVxuIik7CiAJCSpkZXZfaW50cl90eXBlID0gSU5UQTsKIAl9CiAKIAlpZiAoKCpkZXZfaW50cl90eXBlID09IE1TSV9YKSAmJgotCQkJKChwZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9IRVJDX1dJTikgJiYKLQkJCShwZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9IRVJDX1VOSSkpKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiczJpbzogWGZyYW1lIEkgZG9lcyBub3Qgc3VwcG9ydCBNU0lfWC4gIgotCQkJCQkiRGVmYXVsdGluZyB0byBJTlRBXG4iKTsKKwkgICAgKChwZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9IRVJDX1dJTikgJiYKKwkgICAgIChwZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9IRVJDX1VOSSkpKSB7CisJCURCR19QUklOVChFUlJfREJHLCAiWGZyYW1lIEkgZG9lcyBub3Qgc3VwcG9ydCBNU0lfWC4gIgorCQkJICAiRGVmYXVsdGluZyB0byBJTlRBXG4iKTsKIAkJKmRldl9pbnRyX3R5cGUgPSBJTlRBOwogCX0KIAogCWlmICgocnhfcmluZ19tb2RlICE9IDEpICYmIChyeF9yaW5nX21vZGUgIT0gMikpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBSZXF1ZXN0ZWQgcmluZyBtb2RlIG5vdCBzdXBwb3J0ZWRcbiIpOwotCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IERlZmF1bHRpbmcgdG8gMS1idWZmZXIgbW9kZVxuIik7CisJCURCR19QUklOVChFUlJfREJHLCAiUmVxdWVzdGVkIHJpbmcgbW9kZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJEZWZhdWx0aW5nIHRvIDEtYnVmZmVyIG1vZGVcbiIpOwogCQlyeF9yaW5nX21vZGUgPSAxOwogCX0KIAlyZXR1cm4gU1VDQ0VTUzsKQEAgLTc3MTIsOCArNzcxNyw4IEBACiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnRzX2RzX21lbV9jdHJsKTsKIAogCXJldHVybiB3YWl0X2Zvcl9jbWRfY29tcGxldGUoJmJhcjAtPnJ0c19kc19tZW1fY3RybCwKLQkJCQlSVFNfRFNfTUVNX0NUUkxfU1RST0JFX0NNRF9CRUlOR19FWEVDVVRFRCwKLQkJCQlTMklPX0JJVF9SRVNFVCk7CisJCQkJICAgICBSVFNfRFNfTUVNX0NUUkxfU1RST0JFX0NNRF9CRUlOR19FWEVDVVRFRCwKKwkJCQkgICAgIFMySU9fQklUX1JFU0VUKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzMmlvX25ldGRldl9vcHMgPSB7CkBAIC03NzU5LDggKzc3NjQsOCBAQAogCXU2NCB2YWw2NCA9IDAsIHRtcDY0ID0gMDsKIAlzdHJ1Y3QgWEVOQV9kZXZfY29uZmlnIF9faW9tZW0gKmJhcjAgPSBOVUxMOwogCXUxNiBzdWJpZDsKLQlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwogCXN0cnVjdCBjb25maWdfcGFyYW0gKmNvbmZpZzsKKwlzdHJ1Y3QgbWFjX2luZm8gKm1hY19jb250cm9sOwogCWludCBtb2RlOwogCXU4IGRldl9pbnRyX3R5cGUgPSBpbnRyX3R5cGU7CiAJdTggZGV2X211bHRpcSA9IDA7CkBAIC03NzY5LDMxICs3Nzc0LDMzIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkgewogCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCSAgInMyaW9faW5pdF9uaWM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIik7CisJCQkgICIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7Ci0JCURCR19QUklOVChJTklUX0RCRywgInMyaW9faW5pdF9uaWM6IFVzaW5nIDY0Yml0IERNQVxuIik7CisJCURCR19QUklOVChJTklUX0RCRywgIiVzOiBVc2luZyA2NGJpdCBETUFcbiIsIF9fZnVuY19fKTsKIAkJZG1hX2ZsYWcgPSB0cnVlOwotCQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrCi0JCSAgICAocGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsCi0JCQkJICAiVW5hYmxlIHRvIG9idGFpbiA2NGJpdCBETUEgZm9yIFwKLQkJCQkJY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIik7CisJCQkJICAiVW5hYmxlIHRvIG9idGFpbiA2NGJpdCBETUEgIgorCQkJCSAgImZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iKTsKIAkJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgewotCQlEQkdfUFJJTlQoSU5JVF9EQkcsICJzMmlvX2luaXRfbmljOiBVc2luZyAzMmJpdCBETUFcbiIpOworCQlEQkdfUFJJTlQoSU5JVF9EQkcsICIlczogVXNpbmcgMzJiaXQgRE1BXG4iLCBfX2Z1bmNfXyk7CiAJfSBlbHNlIHsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaWYgKChyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIHMyaW9fZHJpdmVyX25hbWUpKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBSZXF1ZXN0IFJlZ2lvbnMgZmFpbGVkIC0gJXggXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIHMyaW9fZHJpdmVyX25hbWUpOworCWlmIChyZXQpIHsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUmVxdWVzdCBSZWdpb25zIGZhaWxlZCAtICV4XG4iLAorCQkJICBfX2Z1bmNfXywgcmV0KTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC03ODI3LDcgKzc4MzQsNyBAQAogCXNwLT5jb25maWcuaW50cl90eXBlID0gZGV2X2ludHJfdHlwZTsKIAogCWlmICgocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSEVSQ19XSU4pIHx8Ci0JCShwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9IRVJDX1VOSSkpCisJICAgIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9IRVJDX1VOSSkpCiAJCXNwLT5kZXZpY2VfdHlwZSA9IFhGUkFNRV9JSV9ERVZJQ0U7CiAJZWxzZQogCQlzcC0+ZGV2aWNlX3R5cGUgPSBYRlJBTUVfSV9ERVZJQ0U7CkBAIC03ODQ0LDggKzc4NTEsOCBAQAogCSAqIHRoZXNlIHBhcmFtZXRlcnMgYXJlIG5vdCBub3Qgc3BlY2lmaWVkIGR1cmluZyBsb2FkIHRpbWUsIHRoZXkKIAkgKiBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcy4KIAkgKi8KLQltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAJY29uZmlnID0gJnNwLT5jb25maWc7CisJbWFjX2NvbnRyb2wgPSAmc3AtPm1hY19jb250cm9sOwogCiAJY29uZmlnLT5uYXBpID0gbmFwaTsKIAljb25maWctPnR4X3N0ZWVyaW5nX3R5cGUgPSB0eF9zdGVlcmluZ190eXBlOwpAQCAtNzg1OCwxNiArNzg2NSwxNiBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZmlmb3MgdXNlZCBmb3IgdHggc3RlZXJpbmcgKi8KIAlpZiAoY29uZmlnLT50eF9maWZvX251bSA8IDUpIHsKLQkJCWlmIChjb25maWctPnR4X2ZpZm9fbnVtICA9PSAxKQotCQkJCXNwLT50b3RhbF90Y3BfZmlmb3MgPSAxOwotCQkJZWxzZQotCQkJCXNwLT50b3RhbF90Y3BfZmlmb3MgPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsKLQkJCXNwLT51ZHBfZmlmb19pZHggPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsKLQkJCXNwLT50b3RhbF91ZHBfZmlmb3MgPSAxOwotCQkJc3AtPm90aGVyX2ZpZm9faWR4ID0gc3AtPnRvdGFsX3RjcF9maWZvcyAtIDE7CisJCWlmIChjb25maWctPnR4X2ZpZm9fbnVtICA9PSAxKQorCQkJc3AtPnRvdGFsX3RjcF9maWZvcyA9IDE7CisJCWVsc2UKKwkJCXNwLT50b3RhbF90Y3BfZmlmb3MgPSBjb25maWctPnR4X2ZpZm9fbnVtIC0gMTsKKwkJc3AtPnVkcF9maWZvX2lkeCA9IGNvbmZpZy0+dHhfZmlmb19udW0gLSAxOworCQlzcC0+dG90YWxfdWRwX2ZpZm9zID0gMTsKKwkJc3AtPm90aGVyX2ZpZm9faWR4ID0gc3AtPnRvdGFsX3RjcF9maWZvcyAtIDE7CiAJfSBlbHNlIHsKIAkJc3AtPnRvdGFsX3RjcF9maWZvcyA9ICh0eF9maWZvX251bSAtIEZJRk9fVURQX01BWF9OVU0gLQotCQkJCQkJRklGT19PVEhFUl9NQVhfTlVNKTsKKwkJCQkgICAgICAgRklGT19PVEhFUl9NQVhfTlVNKTsKIAkJc3AtPnVkcF9maWZvX2lkeCA9IHNwLT50b3RhbF90Y3BfZmlmb3M7CiAJCXNwLT50b3RhbF91ZHBfZmlmb3MgPSBGSUZPX1VEUF9NQVhfTlVNOwogCQlzcC0+b3RoZXJfZmlmb19pZHggPSBzcC0+dWRwX2ZpZm9faWR4ICsgRklGT19VRFBfTUFYX05VTTsKQEAgLTc4NzUsOCArNzg4MiwxMCBAQAogCiAJY29uZmlnLT5tdWx0aXEgPSBkZXZfbXVsdGlxOwogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnR4X2ZpZm9fbnVtOyBpKyspIHsKLQkJY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW4gPSB0eF9maWZvX2xlbltpXTsKLQkJY29uZmlnLT50eF9jZmdbaV0uZmlmb19wcmlvcml0eSA9IGk7CisJCXN0cnVjdCB0eF9maWZvX2NvbmZpZyAqdHhfY2ZnID0gJmNvbmZpZy0+dHhfY2ZnW2ldOworCisJCXR4X2NmZy0+Zmlmb19sZW4gPSB0eF9maWZvX2xlbltpXTsKKwkJdHhfY2ZnLT5maWZvX3ByaW9yaXR5ID0gaTsKIAl9CiAKIAkvKiBtYXBwaW5nIHRoZSBRb1MgcHJpb3JpdHkgdG8gdGhlIGNvbmZpZ3VyZWQgZmlmb3MgKi8KQEAgLTc4OTAsOSArNzg5OSwxMCBAQAogCiAJY29uZmlnLT50eF9pbnRyX3R5cGUgPSBUWERfSU5UX1RZUEVfVVRJTFo7CiAJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykgewotCQljb25maWctPnR4X2NmZ1tpXS5mX25vX3Nub29wID0KLQkJICAgIChOT19TTk9PUF9UWEQgfCBOT19TTk9PUF9UWERfQlVGRkVSKTsKLQkJaWYgKGNvbmZpZy0+dHhfY2ZnW2ldLmZpZm9fbGVuIDwgNjUpIHsKKwkJc3RydWN0IHR4X2ZpZm9fY29uZmlnICp0eF9jZmcgPSAmY29uZmlnLT50eF9jZmdbaV07CisKKwkJdHhfY2ZnLT5mX25vX3Nub29wID0gKE5PX1NOT09QX1RYRCB8IE5PX1NOT09QX1RYRF9CVUZGRVIpOworCQlpZiAodHhfY2ZnLT5maWZvX2xlbiA8IDY1KSB7CiAJCQljb25maWctPnR4X2ludHJfdHlwZSA9IFRYRF9JTlRfVFlQRV9QRVJfTElTVDsKIAkJCWJyZWFrOwogCQl9CkBAIC03OTAzLDIwICs3OTEzLDIzIEBACiAJLyogUnggc2lkZSBwYXJhbWV0ZXJzLiAqLwogCWNvbmZpZy0+cnhfcmluZ19udW0gPSByeF9yaW5nX251bTsKIAlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKSB7Ci0JCWNvbmZpZy0+cnhfY2ZnW2ldLm51bV9yeGQgPSByeF9yaW5nX3N6W2ldICoKLQkJICAgIChyeGRfY291bnRbc3AtPnJ4ZF9tb2RlXSArIDEpOwotCQljb25maWctPnJ4X2NmZ1tpXS5yaW5nX3ByaW9yaXR5ID0gaTsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4X2J1ZnNfbGVmdCA9IDA7Ci0JCW1hY19jb250cm9sLT5yaW5nc1tpXS5yeGRfbW9kZSA9IHNwLT5yeGRfbW9kZTsKLQkJbWFjX2NvbnRyb2wtPnJpbmdzW2ldLnJ4ZF9jb3VudCA9IHJ4ZF9jb3VudFtzcC0+cnhkX21vZGVdOwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0ucGRldiA9IHNwLT5wZGV2OwotCQltYWNfY29udHJvbC0+cmluZ3NbaV0uZGV2ID0gc3AtPmRldjsKKwkJc3RydWN0IHJ4X3JpbmdfY29uZmlnICpyeF9jZmcgPSAmY29uZmlnLT5yeF9jZmdbaV07CisJCXN0cnVjdCByaW5nX2luZm8gKnJpbmcgPSAmbWFjX2NvbnRyb2wtPnJpbmdzW2ldOworCisJCXJ4X2NmZy0+bnVtX3J4ZCA9IHJ4X3Jpbmdfc3pbaV0gKiAocnhkX2NvdW50W3NwLT5yeGRfbW9kZV0gKyAxKTsKKwkJcnhfY2ZnLT5yaW5nX3ByaW9yaXR5ID0gaTsKKwkJcmluZy0+cnhfYnVmc19sZWZ0ID0gMDsKKwkJcmluZy0+cnhkX21vZGUgPSBzcC0+cnhkX21vZGU7CisJCXJpbmctPnJ4ZF9jb3VudCA9IHJ4ZF9jb3VudFtzcC0+cnhkX21vZGVdOworCQlyaW5nLT5wZGV2ID0gc3AtPnBkZXY7CisJCXJpbmctPmRldiA9IHNwLT5kZXY7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmdfbnVtOyBpKyspIHsKLQkJY29uZmlnLT5yeF9jZmdbaV0ucmluZ19vcmcgPSBSSU5HX09SR19CVUZGMTsKLQkJY29uZmlnLT5yeF9jZmdbaV0uZl9ub19zbm9vcCA9Ci0JCSAgICAoTk9fU05PT1BfUlhEIHwgTk9fU05PT1BfUlhEX0JVRkZFUik7CisJCXN0cnVjdCByeF9yaW5nX2NvbmZpZyAqcnhfY2ZnID0gJmNvbmZpZy0+cnhfY2ZnW2ldOworCisJCXJ4X2NmZy0+cmluZ19vcmcgPSBSSU5HX09SR19CVUZGMTsKKwkJcnhfY2ZnLT5mX25vX3Nub29wID0gKE5PX1NOT09QX1JYRCB8IE5PX1NOT09QX1JYRF9CVUZGRVIpOwogCX0KIAogCS8qICBTZXR0aW5nIE1hYyBDb250cm9sIHBhcmFtZXRlcnMgKi8KQEAgLTc5MjcsOCArNzk0MCw3IEBACiAKIAkvKiAgaW5pdGlhbGl6ZSB0aGUgc2hhcmVkIG1lbW9yeSB1c2VkIGJ5IHRoZSBOSUMgYW5kIHRoZSBob3N0ICovCiAJaWYgKGluaXRfc2hhcmVkX21lbShzcCkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iLAotCQkJICBkZXYtPm5hbWUpOworCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gbWVtX2FsbG9jX2ZhaWxlZDsKIAl9CkBAIC03OTUwLDEyICs3OTYyLDEzIEBACiAJfQogCiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7Ci0JZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykgc3AtPmJhcjA7CisJZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylzcC0+YmFyMDsKIAogCS8qIEluaXRpYWxpemluZyB0aGUgQkFSMSBhZGRyZXNzIGFzIHRoZSBzdGFydCBvZiB0aGUgRklGTyBwb2ludGVyLiAqLwogCWZvciAoaiA9IDA7IGogPCBNQVhfVFhfRklGT1M7IGorKykgewotCQltYWNfY29udHJvbC0+dHhfRklGT19zdGFydFtqXSA9IChzdHJ1Y3QgVHhGSUZPX2VsZW1lbnQgX19pb21lbSAqKQotCQkgICAgKHNwLT5iYXIxICsgKGogKiAweDAwMDIwMDAwKSk7CisJCW1hY19jb250cm9sLT50eF9GSUZPX3N0YXJ0W2pdID0KKwkJCShzdHJ1Y3QgVHhGSUZPX2VsZW1lbnQgX19pb21lbSAqKQorCQkJKHNwLT5iYXIxICsgKGogKiAweDAwMDIwMDAwKSk7CiAJfQogCiAJLyogIERyaXZlciBlbnRyeSBwb2ludHMgKi8KQEAgLTc5ODAsNyArNzk5Myw3IEBACiAKIAkvKiBTZXR0aW5nIHN3YXBwZXIgY29udHJvbCBvbiB0aGUgTklDLCBmb3IgcHJvcGVyIHJlc2V0IG9wZXJhdGlvbiAqLwogCWlmIChzMmlvX3NldF9zd2FwcGVyKHNwKSkgewotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOnN3YXBwZXIgc2V0dGluZ3MgYXJlIHdyb25nXG4iLAorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBzd2FwcGVyIHNldHRpbmdzIGFyZSB3cm9uZ1xuIiwKIAkJCSAgZGV2LT5uYW1lKTsKIAkJcmV0ID0gLUVBR0FJTjsKIAkJZ290byBzZXRfc3dhcF9mYWlsZWQ7CkBAIC03OTkwLDggKzgwMDMsOCBAQAogCWlmIChzcC0+ZGV2aWNlX3R5cGUgJiBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCW1vZGUgPSBzMmlvX3ZlcmlmeV9wY2lfbW9kZShzcCk7CiAJCWlmIChtb2RlIDwgMCkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogIiwgX19mdW5jX18pOwotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgVW5zdXBwb3J0ZWQgUENJIGJ1cyBtb2RlXG4iKTsKKwkJCURCR19QUklOVChFUlJfREJHLCAiJXM6IFVuc3VwcG9ydGVkIFBDSSBidXMgbW9kZVxuIiwKKwkJCQkgIF9fZnVuY19fKTsKIAkJCXJldCA9IC1FQkFEU0xUOwogCQkJZ290byBzZXRfc3dhcF9mYWlsZWQ7CiAJCX0KQEAgLTgwMDksMTUgKzgwMjIsMTcgQEAKIAkJaWYgKHJldCkgewogCiAJCQlEQkdfUFJJTlQoRVJSX0RCRywKLQkJCSAgInMyaW86IE1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIik7CisJCQkJICAiTVNJLVggcmVxdWVzdGVkIGJ1dCBmYWlsZWQgdG8gZW5hYmxlXG4iKTsKIAkJCXNwLT5jb25maWcuaW50cl90eXBlID0gSU5UQTsKIAkJfQogCX0KIAogCWlmIChjb25maWctPmludHJfdHlwZSA9PSAgTVNJX1gpIHsKLQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW0gOyBpKyspCi0JCQluZXRpZl9uYXBpX2FkZChkZXYsICZtYWNfY29udHJvbC0+cmluZ3NbaV0ubmFwaSwKLQkJCQlzMmlvX3BvbGxfbXNpeCwgNjQpOworCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bSA7IGkrKykgeworCQkJc3RydWN0IHJpbmdfaW5mbyAqcmluZyA9ICZtYWNfY29udHJvbC0+cmluZ3NbaV07CisKKwkJCW5ldGlmX25hcGlfYWRkKGRldiwgJnJpbmctPm5hcGksIHMyaW9fcG9sbF9tc2l4LCA2NCk7CisJCX0KIAl9IGVsc2UgewogCQluZXRpZl9uYXBpX2FkZChkZXYsICZzcC0+bmFwaSwgczJpb19wb2xsX2ludGEsIDY0KTsKIAl9CkBAIC04MDM4LDEyICs4MDUzLDEzIEBACiAJICovCiAJYmFyMCA9IHNwLT5iYXIwOwogCXZhbDY0ID0gUk1BQ19BRERSX0NNRF9NRU1fUkQgfCBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCB8Ci0JICAgIFJNQUNfQUREUl9DTURfTUVNX09GRlNFVCgwICsgUzJJT19NQUNfQUREUl9TVEFSVF9PRkZTRVQpOworCQlSTUFDX0FERFJfQ01EX01FTV9PRkZTRVQoMCArIFMySU9fTUFDX0FERFJfU1RBUlRfT0ZGU0VUKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSk7CiAJd2FpdF9mb3JfY21kX2NvbXBsZXRlKCZiYXIwLT5ybWFjX2FkZHJfY21kX21lbSwKLQkJICAgICAgUk1BQ19BRERSX0NNRF9NRU1fU1RST0JFX0NNRF9FWEVDVVRJTkcsIFMySU9fQklUX1JFU0VUKTsKKwkJCSAgICAgIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HLAorCQkJICAgICAgUzJJT19CSVRfUkVTRVQpOwogCXRtcDY0ID0gcmVhZHEoJmJhcjAtPnJtYWNfYWRkcl9kYXRhMF9tZW0pOwotCW1hY19kb3duID0gKHUzMikgdG1wNjQ7CisJbWFjX2Rvd24gPSAodTMyKXRtcDY0OwogCW1hY191cCA9ICh1MzIpICh0bXA2NCA+PiAzMik7CiAKIAlzcC0+ZGVmX21hY19hZGRyWzBdLm1hY19hZGRyWzNdID0gKHU4KSAobWFjX3VwKTsKQEAgLTgwNzQsMTAgKzgwOTAsMTAgQEAKIAogCS8qIENvbmZpZ3VyZSBNU0lYIHZlY3RvciBmb3IgbnVtYmVyIG9mIHJpbmdzIGNvbmZpZ3VyZWQgcGx1cyBvbmUgKi8KIAlpZiAoKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSAmJgotCQkoY29uZmlnLT5pbnRyX3R5cGUgPT0gTVNJX1gpKQorCSAgICAoY29uZmlnLT5pbnRyX3R5cGUgPT0gTVNJX1gpKQogCQlzcC0+bnVtX2VudHJpZXMgPSBjb25maWctPnJ4X3JpbmdfbnVtICsgMTsKIAotCSAvKiBTdG9yZSB0aGUgdmFsdWVzIG9mIHRoZSBNU0lYIHRhYmxlIGluIHRoZSBzMmlvX25pYyBzdHJ1Y3R1cmUgKi8KKwkvKiBTdG9yZSB0aGUgdmFsdWVzIG9mIHRoZSBNU0lYIHRhYmxlIGluIHRoZSBzMmlvX25pYyBzdHJ1Y3R1cmUgKi8KIAlzdG9yZV94bXNpX2RhdGEoc3ApOwogCS8qIHJlc2V0IE5pYyBhbmQgYnJpbmcgaXQgdG8ga25vd24gc3RhdGUgKi8KIAlzMmlvX3Jlc2V0KHNwKTsKQEAgLTgwODksOCArODEwNSwxMSBAQAogCXNwLT5zdGF0ZSA9IDA7CiAKIAkvKiBJbml0aWFsaXplIHNwaW5sb2NrcyAqLwotCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnR4X2ZpZm9fbnVtOyBpKyspCi0JCXNwaW5fbG9ja19pbml0KCZtYWNfY29udHJvbC0+Zmlmb3NbaV0udHhfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IHNwLT5jb25maWcudHhfZmlmb19udW07IGkrKykgeworCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKworCQlzcGluX2xvY2tfaW5pdCgmZmlmby0+dHhfbG9jayk7CisJfQogCiAJLyoKIAkgKiBTWEUtMDAyOiBDb25maWd1cmUgbGluayBhbmQgYWN0aXZpdHkgTEVEIHRvIGluaXQgc3RhdGUKQEAgLTgxMDIsNyArODEyMSw3IEBACiAJCXZhbDY0IHw9IDB4MDAwMDgwMDAwMDAwMDAwMFVMTDsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+Z3Bpb19jb250cm9sKTsKIAkJdmFsNjQgPSAweDA0MTEwNDA0MDAwMDAwMDBVTEw7Ci0JCXdyaXRlcSh2YWw2NCwgKHZvaWQgX19pb21lbSAqKSBiYXIwICsgMHgyNzAwKTsKKwkJd3JpdGVxKHZhbDY0LCAodm9pZCBfX2lvbWVtICopYmFyMCArIDB4MjcwMCk7CiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPmdwaW9fY29udHJvbCk7CiAJfQogCkBAIC04MTE1LDMwICs4MTM0LDI5IEBACiAJfQogCXMyaW9fdnBkX3JlYWQoc3ApOwogCURCR19QUklOVChFUlJfREJHLCAiQ29weXJpZ2h0KGMpIDIwMDItMjAwNyBOZXRlcmlvbiBJbmMuXG4iKTsKLQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBOZXRlcmlvbiAlcyAocmV2ICVkKVxuIixkZXYtPm5hbWUsCisJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTmV0ZXJpb24gJXMgKHJldiAlZClcbiIsIGRldi0+bmFtZSwKIAkJICBzcC0+cHJvZHVjdF9uYW1lLCBwZGV2LT5yZXZpc2lvbik7CiAJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRHJpdmVyIHZlcnNpb24gJXNcbiIsIGRldi0+bmFtZSwKIAkJICBzMmlvX2RyaXZlcl92ZXJzaW9uKTsKLQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNQUMgQUREUjogJXBNXG4iLCBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOwotCURCR19QUklOVChFUlJfREJHLCAiU0VSSUFMIE5VTUJFUjogJXNcbiIsIHNwLT5zZXJpYWxfbnVtKTsKKwlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNQUMgQWRkcmVzczogJXBNXG4iLCBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOworCURCR19QUklOVChFUlJfREJHLCAiU2VyaWFsIG51bWJlcjogJXNcbiIsIHNwLT5zZXJpYWxfbnVtKTsKIAlpZiAoc3AtPmRldmljZV90eXBlICYgWEZSQU1FX0lJX0RFVklDRSkgewogCQltb2RlID0gczJpb19wcmludF9wY2lfbW9kZShzcCk7CiAJCWlmIChtb2RlIDwgMCkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgVW5zdXBwb3J0ZWQgUENJIGJ1cyBtb2RlXG4iKTsKIAkJCXJldCA9IC1FQkFEU0xUOwogCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJCWdvdG8gc2V0X3N3YXBfZmFpbGVkOwogCQl9CiAJfQotCXN3aXRjaChzcC0+cnhkX21vZGUpIHsKLQkJY2FzZSBSWERfTU9ERV8xOgotCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogMS1CdWZmZXIgcmVjZWl2ZSBtb2RlIGVuYWJsZWRcbiIsCi0JCQkJCQlkZXYtPm5hbWUpOwotCQkgICAgYnJlYWs7Ci0JCWNhc2UgUlhEX01PREVfM0I6Ci0JCSAgICBEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiAyLUJ1ZmZlciByZWNlaXZlIG1vZGUgZW5hYmxlZFxuIiwKLQkJCQkJCWRldi0+bmFtZSk7Ci0JCSAgICBicmVhazsKKwlzd2l0Y2ggKHNwLT5yeGRfbW9kZSkgeworCWNhc2UgUlhEX01PREVfMToKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogMS1CdWZmZXIgcmVjZWl2ZSBtb2RlIGVuYWJsZWRcbiIsCisJCQkgIGRldi0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgUlhEX01PREVfM0I6CisJCURCR19QUklOVChFUlJfREJHLCAiJXM6IDItQnVmZmVyIHJlY2VpdmUgbW9kZSBlbmFibGVkXG4iLAorCQkJICBkZXYtPm5hbWUpOworCQlicmVhazsKIAl9CiAKIAlzd2l0Y2ggKHNwLT5jb25maWcubmFwaSkgewpAQCAtODE1MSw0OCArODE2OSw1NCBAQAogCX0KIAogCURCR19QUklOVChFUlJfREJHLCAiJXM6IFVzaW5nICVkIFR4IGZpZm8ocylcbiIsIGRldi0+bmFtZSwKLQkJc3AtPmNvbmZpZy50eF9maWZvX251bSk7CisJCSAgc3AtPmNvbmZpZy50eF9maWZvX251bSk7CiAKIAlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBVc2luZyAlZCBSeCByaW5nKHMpXG4iLCBkZXYtPm5hbWUsCiAJCSAgc3AtPmNvbmZpZy5yeF9yaW5nX251bSk7CiAKLQlzd2l0Y2goc3AtPmNvbmZpZy5pbnRyX3R5cGUpIHsKLQkJY2FzZSBJTlRBOgotCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogSW50ZXJydXB0IHR5cGUgSU5UQVxuIiwgZGV2LT5uYW1lKTsKLQkJICAgIGJyZWFrOwotCQljYXNlIE1TSV9YOgotCQkgICAgREJHX1BSSU5UKEVSUl9EQkcsICIlczogSW50ZXJydXB0IHR5cGUgTVNJLVhcbiIsIGRldi0+bmFtZSk7Ci0JCSAgICBicmVhazsKKwlzd2l0Y2ggKHNwLT5jb25maWcuaW50cl90eXBlKSB7CisJY2FzZSBJTlRBOgorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBJbnRlcnJ1cHQgdHlwZSBJTlRBXG4iLCBkZXYtPm5hbWUpOworCQlicmVhazsKKwljYXNlIE1TSV9YOgorCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBJbnRlcnJ1cHQgdHlwZSBNU0ktWFxuIiwgZGV2LT5uYW1lKTsKKwkJYnJlYWs7CiAJfQogCWlmIChzcC0+Y29uZmlnLm11bHRpcSkgewotCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKQotCQkJbWFjX2NvbnRyb2wtPmZpZm9zW2ldLm11bHRpcSA9IGNvbmZpZy0+bXVsdGlxOworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPmNvbmZpZy50eF9maWZvX251bTsgaSsrKSB7CisJCQlzdHJ1Y3QgZmlmb19pbmZvICpmaWZvID0gJm1hY19jb250cm9sLT5maWZvc1tpXTsKKworCQkJZmlmby0+bXVsdGlxID0gY29uZmlnLT5tdWx0aXE7CisJCX0KIAkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTXVsdGlxdWV1ZSBzdXBwb3J0IGVuYWJsZWRcbiIsCi0JCQlkZXYtPm5hbWUpOworCQkJICBkZXYtPm5hbWUpOwogCX0gZWxzZQogCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBNdWx0aXF1ZXVlIHN1cHBvcnQgZGlzYWJsZWRcbiIsCi0JCQlkZXYtPm5hbWUpOworCQkJICBkZXYtPm5hbWUpOwogCiAJc3dpdGNoIChzcC0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUpIHsKIAljYXNlIE5PX1NURUVSSU5HOgotCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOiBObyBzdGVlcmluZyBlbmFibGVkIGZvciIKLQkJCSIgdHJhbnNtaXRcbiIsIGRldi0+bmFtZSk7Ci0JCQlicmVhazsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTm8gc3RlZXJpbmcgZW5hYmxlZCBmb3IgdHJhbnNtaXRcbiIsCisJCQkgIGRldi0+bmFtZSk7CisJCWJyZWFrOwogCWNhc2UgVFhfUFJJT1JJVFlfU1RFRVJJTkc6Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IFByaW9yaXR5IHN0ZWVyaW5nIGVuYWJsZWQgZm9yIgotCQkJIiB0cmFuc21pdFxuIiwgZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsCisJCQkgICIlczogUHJpb3JpdHkgc3RlZXJpbmcgZW5hYmxlZCBmb3IgdHJhbnNtaXRcbiIsCisJCQkgIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgVFhfREVGQVVMVF9TVEVFUklORzoKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRGVmYXVsdCBzdGVlcmluZyBlbmFibGVkIGZvciIKLQkJCSIgdHJhbnNtaXRcbiIsIGRldi0+bmFtZSk7CisJCURCR19QUklOVChFUlJfREJHLAorCQkJICAiJXM6IERlZmF1bHQgc3RlZXJpbmcgZW5hYmxlZCBmb3IgdHJhbnNtaXRcbiIsCisJCQkgIGRldi0+bmFtZSk7CiAJfQogCiAJaWYgKHNwLT5scm8pCiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IExhcmdlIHJlY2VpdmUgb2ZmbG9hZCBlbmFibGVkXG4iLAogCQkJICBkZXYtPm5hbWUpOwogCWlmICh1Zm8pCi0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IFVEUCBGcmFnbWVudGF0aW9uIE9mZmxvYWQoVUZPKSIKLQkJCQkJIiBlbmFibGVkXG4iLCBkZXYtPm5hbWUpOworCQlEQkdfUFJJTlQoRVJSX0RCRywKKwkJCSAgIiVzOiBVRFAgRnJhZ21lbnRhdGlvbiBPZmZsb2FkKFVGTykgZW5hYmxlZFxuIiwKKwkJCSAgZGV2LT5uYW1lKTsKIAkvKiBJbml0aWFsaXplIGRldmljZSBuYW1lICovCiAJc3ByaW50ZihzcC0+bmFtZSwgIiVzIE5ldGVyaW9uICVzIiwgZGV2LT5uYW1lLCBzcC0+cHJvZHVjdF9uYW1lKTsKIApAQCAtODIxMCwxMyArODIzNCwxMyBAQAogCiAJcmV0dXJuIDA7CiAKLSAgICAgIHJlZ2lzdGVyX2ZhaWxlZDoKLSAgICAgIHNldF9zd2FwX2ZhaWxlZDoKK3JlZ2lzdGVyX2ZhaWxlZDoKK3NldF9zd2FwX2ZhaWxlZDoKIAlpb3VubWFwKHNwLT5iYXIxKTsKLSAgICAgIGJhcjFfcmVtYXBfZmFpbGVkOgorYmFyMV9yZW1hcF9mYWlsZWQ6CiAJaW91bm1hcChzcC0+YmFyMCk7Ci0gICAgICBiYXIwX3JlbWFwX2ZhaWxlZDoKLSAgICAgIG1lbV9hbGxvY19mYWlsZWQ6CitiYXIwX3JlbWFwX2ZhaWxlZDoKK21lbV9hbGxvY19mYWlsZWQ6CiAJZnJlZV9zaGFyZWRfbWVtKHNwKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKQEAgLTgyMzgsNyArODI2Miw3IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgczJpb19yZW1fbmljKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPQotCSAgICAoc3RydWN0IG5ldF9kZXZpY2UgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCQkoc3RydWN0IG5ldF9kZXZpY2UgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHMyaW9fbmljICpzcDsKIAogCWlmIChkZXYgPT0gTlVMTCkgewpAQCAtODI4NiwyOCArODMxMCwyOCBAQAogbW9kdWxlX2V4aXQoczJpb19jbG9zZXIpOwogCiBzdGF0aWMgaW50IGNoZWNrX0wyX2xyb19jYXBhYmxlKHU4ICpidWZmZXIsIHN0cnVjdCBpcGhkciAqKmlwLAotCQlzdHJ1Y3QgdGNwaGRyICoqdGNwLCBzdHJ1Y3QgUnhEX3QgKnJ4ZHAsCi0JCXN0cnVjdCBzMmlvX25pYyAqc3ApCisJCQkJc3RydWN0IHRjcGhkciAqKnRjcCwgc3RydWN0IFJ4RF90ICpyeGRwLAorCQkJCXN0cnVjdCBzMmlvX25pYyAqc3ApCiB7CiAJaW50IGlwX29mZjsKIAl1OCBsMl90eXBlID0gKHU4KSgocnhkcC0+Q29udHJvbF8xID4+IDM3KSAmIDB4NyksIGlwX2xlbjsKIAogCWlmICghKHJ4ZHAtPkNvbnRyb2xfMSAmIFJYRF9GUkFNRV9QUk9UT19UQ1ApKSB7Ci0JCURCR19QUklOVChJTklUX0RCRywiJXM6IE5vbi1UQ1AgZnJhbWVzIG5vdCBzdXBwb3J0ZWQgZm9yIExST1xuIiwKKwkJREJHX1BSSU5UKElOSVRfREJHLAorCQkJICAiJXM6IE5vbi1UQ1AgZnJhbWVzIG5vdCBzdXBwb3J0ZWQgZm9yIExST1xuIiwKIAkJCSAgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQ2hlY2tpbmcgZm9yIERJWCB0eXBlIG9yIERJWCB0eXBlIHdpdGggVkxBTiAqLwotCWlmICgobDJfdHlwZSA9PSAwKQotCQl8fCAobDJfdHlwZSA9PSA0KSkgeworCWlmICgobDJfdHlwZSA9PSAwKSB8fCAobDJfdHlwZSA9PSA0KSkgewogCQlpcF9vZmYgPSBIRUFERVJfRVRIRVJORVRfSUlfODAyXzNfU0laRTsKIAkJLyoKIAkJICogSWYgdmxhbiBzdHJpcHBpbmcgaXMgZGlzYWJsZWQgYW5kIHRoZSBmcmFtZSBpcyBWTEFOIHRhZ2dlZCwKIAkJICogc2hpZnQgdGhlIG9mZnNldCBieSB0aGUgVkxBTiBoZWFkZXIgc2l6ZSBieXRlcy4KIAkJICovCiAJCWlmICgoIXNwLT52bGFuX3N0cmlwX2ZsYWcpICYmCi0JCQkocnhkcC0+Q29udHJvbF8xICYgUlhEX0ZSQU1FX1ZMQU5fVEFHKSkKKwkJICAgIChyeGRwLT5Db250cm9sXzEgJiBSWERfRlJBTUVfVkxBTl9UQUcpKQogCQkJaXBfb2ZmICs9IEhFQURFUl9WTEFOX1NJWkU7CiAJfSBlbHNlIHsKIAkJLyogTExDLCBTTkFQIGV0YyBhcmUgY29uc2lkZXJlZCBub24tbWVyZ2VhYmxlICovCkBAIC04MzI1LDIyICs4MzQ5LDI1IEBACiBzdGF0aWMgaW50IGNoZWNrX2Zvcl9zb2NrZXRfbWF0Y2goc3RydWN0IGxybyAqbHJvLCBzdHJ1Y3QgaXBoZHIgKmlwLAogCQkJCSAgc3RydWN0IHRjcGhkciAqdGNwKQogewotCURCR19QUklOVChJTkZPX0RCRywiJXM6IEJlZW4gaGVyZS4uLlxuIiwgX19mdW5jX18pOwotCWlmICgobHJvLT5pcGgtPnNhZGRyICE9IGlwLT5zYWRkcikgfHwgKGxyby0+aXBoLT5kYWRkciAhPSBpcC0+ZGFkZHIpIHx8Ci0JICAgKGxyby0+dGNwaC0+c291cmNlICE9IHRjcC0+c291cmNlKSB8fCAobHJvLT50Y3BoLT5kZXN0ICE9IHRjcC0+ZGVzdCkpCisJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IEJlZW4gaGVyZS4uLlxuIiwgX19mdW5jX18pOworCWlmICgobHJvLT5pcGgtPnNhZGRyICE9IGlwLT5zYWRkcikgfHwKKwkgICAgKGxyby0+aXBoLT5kYWRkciAhPSBpcC0+ZGFkZHIpIHx8CisJICAgIChscm8tPnRjcGgtPnNvdXJjZSAhPSB0Y3AtPnNvdXJjZSkgfHwKKwkgICAgKGxyby0+dGNwaC0+ZGVzdCAhPSB0Y3AtPmRlc3QpKQogCQlyZXR1cm4gLTE7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9sNF9weWxkX2xlbmd0aChzdHJ1Y3QgaXBoZHIgKmlwLCBzdHJ1Y3QgdGNwaGRyICp0Y3ApCiB7Ci0JcmV0dXJuKG50b2hzKGlwLT50b3RfbGVuKSAtIChpcC0+aWhsIDw8IDIpIC0gKHRjcC0+ZG9mZiA8PCAyKSk7CisJcmV0dXJuIG50b2hzKGlwLT50b3RfbGVuKSAtIChpcC0+aWhsIDw8IDIpIC0gKHRjcC0+ZG9mZiA8PCAyKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdGlhdGVfbmV3X3Nlc3Npb24oc3RydWN0IGxybyAqbHJvLCB1OCAqbDJoLAotCXN0cnVjdCBpcGhkciAqaXAsIHN0cnVjdCB0Y3BoZHIgKnRjcCwgdTMyIHRjcF9weWxkX2xlbiwgdTE2IHZsYW5fdGFnKQorCQkJCSBzdHJ1Y3QgaXBoZHIgKmlwLCBzdHJ1Y3QgdGNwaGRyICp0Y3AsCisJCQkJIHUzMiB0Y3BfcHlsZF9sZW4sIHUxNiB2bGFuX3RhZykKIHsKLQlEQkdfUFJJTlQoSU5GT19EQkcsIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKKwlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogQmVlbiBoZXJlLi4uXG4iLCBfX2Z1bmNfXyk7CiAJbHJvLT5sMmggPSBsMmg7CiAJbHJvLT5pcGggPSBpcDsKIAlscm8tPnRjcGggPSB0Y3A7CkBAIC04MzUxLDkgKzgzNzgsOSBAQAogCWxyby0+ZnJhZ3NfbGVuID0gMDsKIAlscm8tPnZsYW5fdGFnID0gdmxhbl90YWc7CiAJLyoKLQkgKiBjaGVjayBpZiB3ZSBzYXcgVENQIHRpbWVzdGFtcC4gT3RoZXIgY29uc2lzdGVuY3kgY2hlY2tzIGhhdmUKLQkgKiBhbHJlYWR5IGJlZW4gZG9uZS4KLSAJICovCisJICogQ2hlY2sgaWYgd2Ugc2F3IFRDUCB0aW1lc3RhbXAuCisJICogT3RoZXIgY29uc2lzdGVuY3kgY2hlY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUuCisJICovCiAJaWYgKHRjcC0+ZG9mZiA9PSA4KSB7CiAJCV9fYmUzMiAqcHRyOwogCQlwdHIgPSAoX19iZTMyICopKHRjcCsxKTsKQEAgLTgzNjksOCArODM5Niw5IEBACiAJc3RydWN0IGlwaGRyICppcCA9IGxyby0+aXBoOwogCXN0cnVjdCB0Y3BoZHIgKnRjcCA9IGxyby0+dGNwaDsKIAlfX3N1bTE2IG5jaGs7Ci0Jc3RydWN0IHN0YXRfYmxvY2sgKnN0YXRpbmZvID0gc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm87Ci0JREJHX1BSSU5UKElORk9fREJHLCIlczogQmVlbiBoZXJlLi4uXG4iLCBfX2Z1bmNfXyk7CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdDsKKworCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKIAogCS8qIFVwZGF0ZSBMMyBoZWFkZXIgKi8KIAlpcC0+dG90X2xlbiA9IGh0b25zKGxyby0+dG90YWxfbGVuKTsKQEAgLTgzOTEsMTQgKzg0MTksMTQgQEAKIAkvKiBVcGRhdGUgY291bnRlcnMgcmVxdWlyZWQgZm9yIGNhbGN1bGF0aW9uIG9mCiAJICogYXZlcmFnZSBuby4gb2YgcGFja2V0cyBhZ2dyZWdhdGVkLgogCSAqLwotCXN0YXRpbmZvLT5zd19zdGF0LnN1bV9hdmdfcGt0c19hZ2dyZWdhdGVkICs9IGxyby0+c2dfbnVtOwotCXN0YXRpbmZvLT5zd19zdGF0Lm51bV9hZ2dyZWdhdGlvbnMrKzsKKwlzd3N0YXRzLT5zdW1fYXZnX3BrdHNfYWdncmVnYXRlZCArPSBscm8tPnNnX251bTsKKwlzd3N0YXRzLT5udW1fYWdncmVnYXRpb25zKys7CiB9CiAKIHN0YXRpYyB2b2lkIGFnZ3JlZ2F0ZV9uZXdfcngoc3RydWN0IGxybyAqbHJvLCBzdHJ1Y3QgaXBoZHIgKmlwLAotCQlzdHJ1Y3QgdGNwaGRyICp0Y3AsIHUzMiBsNF9weWxkKQorCQkJICAgICBzdHJ1Y3QgdGNwaGRyICp0Y3AsIHUzMiBsNF9weWxkKQogewotCURCR19QUklOVChJTkZPX0RCRywiJXM6IEJlZW4gaGVyZS4uLlxuIiwgX19mdW5jX18pOworCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKIAlscm8tPnRvdGFsX2xlbiArPSBsNF9weWxkOwogCWxyby0+ZnJhZ3NfbGVuICs9IGw0X3B5bGQ7CiAJbHJvLT50Y3BfbmV4dF9zZXEgKz0gbDRfcHlsZDsKQEAgLTg0MjIsNyArODQ1MCw3IEBACiB7CiAJdTggKnB0cjsKIAotCURCR19QUklOVChJTkZPX0RCRywiJXM6IEJlZW4gaGVyZS4uLlxuIiwgX19mdW5jX18pOworCURCR19QUklOVChJTkZPX0RCRywgIiVzOiBCZWVuIGhlcmUuLi5cbiIsIF9fZnVuY19fKTsKIAogCWlmICghdGNwX3B5bGRfbGVuKSB7CiAJCS8qIFJ1bnQgZnJhbWUgb3IgYSBwdXJlIGFjayAqLwpAQCAtODQzNyw4ICs4NDY1LDkgQEAKIAkJcmV0dXJuIC0xOwogCiAJLyogSWYgd2Ugc2VlIEVDRSBvciBDV1IgZmxhZ3MgaW4gVENQIGhlYWRlciwgcGFja2V0IGlzIG5vdCBtZXJnZWFibGUgKi8KLQlpZiAodGNwLT51cmcgfHwgdGNwLT5wc2ggfHwgdGNwLT5yc3QgfHwgdGNwLT5zeW4gfHwgdGNwLT5maW4gfHwKLQkJCQkgICAgdGNwLT5lY2UgfHwgdGNwLT5jd3IgfHwgIXRjcC0+YWNrKSB7CisJaWYgKHRjcC0+dXJnIHx8IHRjcC0+cHNoIHx8IHRjcC0+cnN0IHx8CisJICAgIHRjcC0+c3luIHx8IHRjcC0+ZmluIHx8CisJICAgIHRjcC0+ZWNlIHx8IHRjcC0+Y3dyIHx8ICF0Y3AtPmFjaykgewogCQkvKgogCQkgKiBDdXJyZW50bHkgcmVjb2duaXplIG9ubHkgdGhlIGFjayBjb250cm9sIHdvcmQgYW5kCiAJCSAqIGFueSBvdGhlciBjb250cm9sIGZpZWxkIGJlaW5nIHNldCB3b3VsZCByZXN1bHQgaW4KQEAgLTg0NzQsMjcgKzg1MDMsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotczJpb19jbHViX3RjcF9zZXNzaW9uKHN0cnVjdCByaW5nX2luZm8gKnJpbmdfZGF0YSwgdTggKmJ1ZmZlciwgdTggKip0Y3AsCi0JdTMyICp0Y3BfbGVuLCBzdHJ1Y3QgbHJvICoqbHJvLCBzdHJ1Y3QgUnhEX3QgKnJ4ZHAsCi0Jc3RydWN0IHMyaW9fbmljICpzcCkKK3N0YXRpYyBpbnQgczJpb19jbHViX3RjcF9zZXNzaW9uKHN0cnVjdCByaW5nX2luZm8gKnJpbmdfZGF0YSwgdTggKmJ1ZmZlciwKKwkJCQkgdTggKip0Y3AsIHUzMiAqdGNwX2xlbiwgc3RydWN0IGxybyAqKmxybywKKwkJCQkgc3RydWN0IFJ4RF90ICpyeGRwLCBzdHJ1Y3QgczJpb19uaWMgKnNwKQogewogCXN0cnVjdCBpcGhkciAqaXA7CiAJc3RydWN0IHRjcGhkciAqdGNwaDsKIAlpbnQgcmV0ID0gMCwgaTsKIAl1MTYgdmxhbl90YWcgPSAwOworCXN0cnVjdCBzd1N0YXQgKnN3c3RhdHMgPSAmc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQ7CiAKLQlpZiAoIShyZXQgPSBjaGVja19MMl9scm9fY2FwYWJsZShidWZmZXIsICZpcCwgKHN0cnVjdCB0Y3BoZHIgKiopdGNwLAotCQkJCQkgcnhkcCwgc3ApKSkgewotCQlEQkdfUFJJTlQoSU5GT19EQkcsIklQIFNhZGRyOiAleCBEYWRkcjogJXhcbiIsCi0JCQkgIGlwLT5zYWRkciwgaXAtPmRhZGRyKTsKLQl9IGVsc2UKKwlyZXQgPSBjaGVja19MMl9scm9fY2FwYWJsZShidWZmZXIsICZpcCwgKHN0cnVjdCB0Y3BoZHIgKiopdGNwLAorCQkJCSAgIHJ4ZHAsIHNwKTsKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJREJHX1BSSU5UKElORk9fREJHLCAiSVAgU2FkZHI6ICV4IERhZGRyOiAleFxuIiwgaXAtPnNhZGRyLCBpcC0+ZGFkZHIpOworCiAJdmxhbl90YWcgPSBSWERfR0VUX1ZMQU5fVEFHKHJ4ZHAtPkNvbnRyb2xfMik7CiAJdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopKnRjcDsKIAkqdGNwX2xlbiA9IGdldF9sNF9weWxkX2xlbmd0aChpcCwgdGNwaCk7Ci0JZm9yIChpPTA7IGk8TUFYX0xST19TRVNTSU9OUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MUk9fU0VTU0lPTlM7IGkrKykgewogCQlzdHJ1Y3QgbHJvICpsX2xybyA9ICZyaW5nX2RhdGEtPmxybzBfbltpXTsKIAkJaWYgKGxfbHJvLT5pbl91c2UpIHsKIAkJCWlmIChjaGVja19mb3Jfc29ja2V0X21hdGNoKGxfbHJvLCBpcCwgdGNwaCkpCkBAIC04NTAzLDE4ICs4NTMyLDE5IEBACiAJCQkqbHJvID0gbF9scm87CiAKIAkJCWlmICgoKmxybyktPnRjcF9uZXh0X3NlcSAhPSBudG9obCh0Y3BoLT5zZXEpKSB7Ci0JCQkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6T3V0IG9mIG9yZGVyLiBleHBlY3RlZCAiCi0JCQkJCSAgIjB4JXgsIGFjdHVhbCAweCV4XG4iLCBfX2Z1bmNfXywKKwkJCQlEQkdfUFJJTlQoSU5GT19EQkcsICIlczogT3V0IG9mIHNlcXVlbmNlLiAiCisJCQkJCSAgImV4cGVjdGVkIDB4JXgsIGFjdHVhbCAweCV4XG4iLAorCQkJCQkgIF9fZnVuY19fLAogCQkJCQkgICgqbHJvKS0+dGNwX25leHRfc2VxLAogCQkJCQkgIG50b2hsKHRjcGgtPnNlcSkpOwogCi0JCQkJc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPgotCQkJCSAgIHN3X3N0YXQub3V0b2Zfc2VxdWVuY2VfcGt0cysrOworCQkJCXN3c3RhdHMtPm91dG9mX3NlcXVlbmNlX3BrdHMrKzsKIAkJCQlyZXQgPSAyOwogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIXZlcmlmeV9sM19sNF9scm9fY2FwYWJsZShsX2xybywgaXAsIHRjcGgsKnRjcF9sZW4pKQorCQkJaWYgKCF2ZXJpZnlfbDNfbDRfbHJvX2NhcGFibGUobF9scm8sIGlwLCB0Y3BoLAorCQkJCQkJICAgICAgKnRjcF9sZW4pKQogCQkJCXJldCA9IDE7IC8qIEFnZ3JlZ2F0ZSAqLwogCQkJZWxzZQogCQkJCXJldCA9IDI7IC8qIEZsdXNoIGJvdGggKi8KQEAgLTg1MjgsMTEgKzg1NTgsMTAgQEAKIAkJICogZG9uJ3QgY3JlYXRlIG5ldyBMUk8gc2Vzc2lvbi4gSnVzdCBzZW5kIHRoaXMKIAkJICogcGFja2V0IHVwLgogCQkgKi8KLQkJaWYgKHZlcmlmeV9sM19sNF9scm9fY2FwYWJsZShOVUxMLCBpcCwgdGNwaCwgKnRjcF9sZW4pKSB7CisJCWlmICh2ZXJpZnlfbDNfbDRfbHJvX2NhcGFibGUoTlVMTCwgaXAsIHRjcGgsICp0Y3BfbGVuKSkKIAkJCXJldHVybiA1OwotCQl9CiAKLQkJZm9yIChpPTA7IGk8TUFYX0xST19TRVNTSU9OUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTFJPX1NFU1NJT05TOyBpKyspIHsKIAkJCXN0cnVjdCBscm8gKmxfbHJvID0gJnJpbmdfZGF0YS0+bHJvMF9uW2ldOwogCQkJaWYgKCEobF9scm8tPmluX3VzZSkpIHsKIAkJCQkqbHJvID0gbF9scm87CkBAIC04NTQzLDMxICs4NTcyLDMwIEBACiAJfQogCiAJaWYgKHJldCA9PSAwKSB7IC8qIHNlc3Npb25zIGV4Y2VlZGVkICovCi0JCURCR19QUklOVChJTkZPX0RCRywiJXM6QWxsIExSTyBzZXNzaW9ucyBhbHJlYWR5IGluIHVzZVxuIiwKKwkJREJHX1BSSU5UKElORk9fREJHLCAiJXM6IEFsbCBMUk8gc2Vzc2lvbnMgYWxyZWFkeSBpbiB1c2VcbiIsCiAJCQkgIF9fZnVuY19fKTsKIAkJKmxybyA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJc3dpdGNoIChyZXQpIHsKLQkJY2FzZSAzOgotCQkJaW5pdGlhdGVfbmV3X3Nlc3Npb24oKmxybywgYnVmZmVyLCBpcCwgdGNwaCwgKnRjcF9sZW4sCi0JCQkJCQkJCXZsYW5fdGFnKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6CisJY2FzZSAzOgorCQlpbml0aWF0ZV9uZXdfc2Vzc2lvbigqbHJvLCBidWZmZXIsIGlwLCB0Y3BoLCAqdGNwX2xlbiwKKwkJCQkgICAgIHZsYW5fdGFnKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl1cGRhdGVfTDNMNF9oZWFkZXIoc3AsICpscm8pOworCQlicmVhazsKKwljYXNlIDE6CisJCWFnZ3JlZ2F0ZV9uZXdfcngoKmxybywgaXAsIHRjcGgsICp0Y3BfbGVuKTsKKwkJaWYgKCgqbHJvKS0+c2dfbnVtID09IHNwLT5scm9fbWF4X2FnZ3JfcGVyX3Nlc3MpIHsKIAkJCXVwZGF0ZV9MM0w0X2hlYWRlcihzcCwgKmxybyk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYWdncmVnYXRlX25ld19yeCgqbHJvLCBpcCwgdGNwaCwgKnRjcF9sZW4pOwotCQkJaWYgKCgqbHJvKS0+c2dfbnVtID09IHNwLT5scm9fbWF4X2FnZ3JfcGVyX3Nlc3MpIHsKLQkJCQl1cGRhdGVfTDNMNF9oZWFkZXIoc3AsICpscm8pOwotCQkJCXJldCA9IDQ7IC8qIEZsdXNoIHRoZSBMUk8gKi8KLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHX1BSSU5UKEVSUl9EQkcsIiVzOkRvbnQga25vdywgY2FuJ3Qgc2F5ISFcbiIsCi0JCQkJX19mdW5jX18pOwotCQkJYnJlYWs7CisJCQlyZXQgPSA0OyAvKiBGbHVzaCB0aGUgTFJPICovCisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRG9uJ3Qga25vdywgY2FuJ3Qgc2F5ISFcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTg1ODYsOCArODYxNCw3IEBACiAJc3RydWN0IHMyaW9fbmljICpzcCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCWlmIChzcC0+dmxncnAgJiYgdmxhbl90YWcKLQkJJiYgKHNwLT52bGFuX3N0cmlwX2ZsYWcpKSB7CisJaWYgKHNwLT52bGdycCAmJiB2bGFuX3RhZyAmJiAoc3AtPnZsYW5fc3RyaXBfZmxhZykpIHsKIAkJLyogUXVldWVpbmcgdGhlIHZsYW4gZnJhbWUgdG8gdGhlIHVwcGVyIGxheWVyICovCiAJCWlmIChzcC0+Y29uZmlnLm5hcGkpCiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBzcC0+dmxncnAsIHZsYW5fdGFnKTsKQEAgLTg2MDIsMTAgKzg2MjksMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgbHJvX2FwcGVuZF9wa3Qoc3RydWN0IHMyaW9fbmljICpzcCwgc3RydWN0IGxybyAqbHJvLAotCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHUzMiB0Y3BfbGVuKQorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHRjcF9sZW4pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmZpcnN0ID0gbHJvLT5wYXJlbnQ7CisJc3RydWN0IHN3U3RhdCAqc3dzdGF0cyA9ICZzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdDsKIAogCWZpcnN0LT5sZW4gKz0gdGNwX2xlbjsKIAlmaXJzdC0+ZGF0YV9sZW4gPSBscm8tPmZyYWdzX2xlbjsKQEAgLTg2MTYsNyArODY0Myw3IEBACiAJCXNrYl9zaGluZm8oZmlyc3QpLT5mcmFnX2xpc3QgPSBza2I7CiAJZmlyc3QtPnRydWVzaXplICs9IHNrYi0+dHJ1ZXNpemU7CiAJbHJvLT5sYXN0X2ZyYWcgPSBza2I7Ci0Jc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuY2x1YmJlZF9mcm1zX2NudCsrOworCXN3c3RhdHMtPmNsdWJiZWRfZnJtc19jbnQrKzsKIAlyZXR1cm47CiB9CiAKQEAgLTg2MjksMTMgKzg2NTYsMTYgQEAKICAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgogICovCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBzMmlvX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfY2hhbm5lbF9zdGF0ZV90IHN0YXRlKQorCQkJCQkgICAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzMmlvX25pYyAqc3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCS8qIEJyaW5nIGRvd24gdGhlIGNhcmQsIHdoaWxlIGF2b2lkaW5nIFBDSSBJL08gKi8KIAkJZG9fczJpb19jYXJkX2Rvd24oc3AsIDApOwpAQCAtODY2MCw4ICs4NjkwLDcgQEAKIAlzdHJ1Y3QgczJpb19uaWMgKnNwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgInMyaW86ICIKLQkJICAgICAgICJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCkBAIC04Njg1LDE1ICs4NzE0LDEzIEBACiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCWlmIChzMmlvX2NhcmRfdXAoc3ApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInMyaW86ICIKLQkJCSAgICAgICAiQ2FuJ3QgYnJpbmcgZGV2aWNlIGJhY2sgdXAgYWZ0ZXIgcmVzZXQuXG4iKTsKKwkJCXByX2VycigiQ2FuJ3QgYnJpbmcgZGV2aWNlIGJhY2sgdXAgYWZ0ZXIgcmVzZXQuXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCWlmIChzMmlvX3NldF9tYWNfYWRkcihuZXRkZXYsIG5ldGRldi0+ZGV2X2FkZHIpID09IEZBSUxVUkUpIHsKIAkJCXMyaW9fY2FyZF9kb3duKHNwKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiczJpbzogIgotCQkJICAgICAgICJDYW4ndCByZXNldG9yZSBtYWMgYWRkciBhZnRlciByZXNldC5cbiIpOworCQkJcHJfZXJyKCJDYW4ndCByZXN0b3JlIG1hYyBhZGRyIGFmdGVyIHJlc2V0LlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmggYi9kcml2ZXJzL25ldC9zMmlvLmgKaW5kZXggZDVjNWJlNi4uNDdjMzZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5oCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uaApAQCAtNjQsNyArNjQsMTAgQEAKIHN0YXRpYyBpbnQgZGVidWdfbGV2ZWwgPSBFUlJfREJHOwogCiAvKiBERUJVRyBtZXNzYWdlIHByaW50LiAqLwotI2RlZmluZSBEQkdfUFJJTlQoZGJnX2xldmVsLCBhcmdzLi4uKSAgaWYoIShkZWJ1Z19sZXZlbDxkYmdfbGV2ZWwpKSBwcmludGsoYXJncykKKyNkZWZpbmUgREJHX1BSSU5UKGRiZ19sZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7CQkJXAorCWlmIChkYmdfbGV2ZWwgPj0gZGVidWdfbGV2ZWwpCQkJCVwKKwkJcHJfaW5mbyhmbXQsICMjYXJncyk7CQkJCVwKKwl9IHdoaWxlICgwKQogCiAvKiBQcm90b2NvbCBhc3Npc3QgZmVhdHVyZXMgb2YgdGhlIE5JQyAqLwogI2RlZmluZSBMM19DS1NVTV9PSyAweEZGRkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKaW5kZXggZmMwZTM4Yi4uZWUzNjZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKQEAgLTgyLDcgKzgyLDggQEAKIGV4dGVybiBpbnQgc2IxMDAwX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzYjEwMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2IxMDAwX2Rldl9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwotc3RhdGljIGludCBzYjEwMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzYjEwMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2IxMDAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCBzYjEwMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTEwODAsMTMgKzEwODEsMTMgQEAKIH0KIAogLyogdHJhbnNtaXQgZnVuY3Rpb246IGRvIG5vdGhpbmcgc2luY2UgU0IxMDAwIGNhbid0IHNlbmQgYW55dGhpbmcgb3V0ICovCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHNiMTAwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyeWluZyB0byB0cmFuc21pdCEhIVxuIiwgZGV2LT5uYW1lKTsKIAkvKiBzYjEwMDAgY2FuJ3QgeG1pdCBkYXRhZ3JhbXMgKi8KIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogU0IxMDAwIGludGVycnVwdCBoYW5kbGVyLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCmluZGV4IGQ4YzljZjEuLjUwODU1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYworKysgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKQEAgLTIwOTEsNyArMjA5MSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2JtX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjg4LDcgKzI2ODgsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgX19pbml0IHNibWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2JtYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2JtYWNfc29mdGMgKnNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCmluZGV4IGUzMTU2YzkuLjhkNjAzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYworKysgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKQEAgLTk0MSw3ICs5NDEsOCBAQAogCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAotc3RhdGljIGludCBzYzkyMDMxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzYzkyMDMxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzYzkyMDMxX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqcG9ydF9iYXNlID0gcHJpdi0+cG9ydF9iYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2VlcTgwMDUuYyBiL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMKaW5kZXggZWJiYmUwOS4uMzkyNDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2VlcTgwMDUuYworKysgYi9kcml2ZXJzL25ldC9zZWVxODAwNS5jCkBAIC04MSw3ICs4MSw4IEBACiBzdGF0aWMgaW50IHNlZXE4MDA1X3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKTsKIHN0YXRpYyBpbnQgc2VlcTgwMDVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNlZXE4MDA1X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHNlZXE4MDA1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHNlZXE4MDA1X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHNlZXE4MDA1X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgc2VlcTgwMDVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNlZXE4MDA1X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMzk0LDE0ICszOTUsMTUgQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgc2VlcTgwMDVfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzZWVxODAwNV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXNob3J0IGxlbmd0aCA9IHNrYi0+bGVuOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAogCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAJYnVmID0gc2tiLT5kYXRhOwpAQCAtNDE1LDcgKzQxNyw3IEBACiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkvKiBZb3UgbWlnaHQgbmVlZCB0byBjbGVhbiB1cCBhbmQgcmVjb3JkIFR4IHN0YXRpc3RpY3MgaGVyZS4gKi8KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggMzQzZThkYS4uMDdhN2U0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtMTE3OSw2ICsxMTc5LDggQEAKIAogCS8qIElzb2xhdGUgdGhlIE1BQyBmcm9tIHRoZSBUWCBhbmQgUlggZW5naW5lcywgc28gdGhhdCBxdWV1ZQogCSAqIGZsdXNoZXMgd2lsbCBjb21wbGV0ZSBpbiBhIHRpbWVseSBmYXNoaW9uLiAqLworCWZhbGNvbl9kZWNvbmZpZ3VyZV9tYWNfd3JhcHBlcihlZngpOworCW1zbGVlcCgxMCk7IC8qIExldCB0aGUgUnggRklGTyBkcmFpbiAqLwogCWZhbGNvbl9kcmFpbl90eF9maWZvKGVmeCk7CiAKIAkvKiBTdG9wIHRoZSBrZXJuZWwgdHJhbnNtaXQgaW50ZXJmYWNlIGxhdGUsIHNvIHRoZSB3YXRjaGRvZwpAQCAtMTYxNCwyMSArMTYxNiwyNCBAQAogCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsICZlZngtPnBjaV9kZXYtPmRldik7CiAJU0VUX0VUSFRPT0xfT1BTKG5ldF9kZXYsICZlZnhfZXRodG9vbF9vcHMpOwogCi0JLyogQWx3YXlzIHN0YXJ0IHdpdGggY2FycmllciBvZmY7IFBIWSBldmVudHMgd2lsbCBkZXRlY3QgdGhlIGxpbmsgKi8KLQluZXRpZl9jYXJyaWVyX29mZihlZngtPm5ldF9kZXYpOwotCiAJLyogQ2xlYXIgTUFDIHN0YXRpc3RpY3MgKi8KIAllZngtPm1hY19vcC0+dXBkYXRlX3N0YXRzKGVmeCk7CiAJbWVtc2V0KCZlZngtPm1hY19zdGF0cywgMCwgc2l6ZW9mKGVmeC0+bWFjX3N0YXRzKSk7CiAKLQlyYyA9IHJlZ2lzdGVyX25ldGRldihuZXRfZGV2KTsKLQlpZiAocmMpIHsKLQkJRUZYX0VSUihlZngsICJjb3VsZCBub3QgcmVnaXN0ZXIgbmV0IGRldlxuIik7Ci0JCXJldHVybiByYzsKLQl9Ci0KIAlydG5sX2xvY2soKTsKKworCXJjID0gZGV2X2FsbG9jX25hbWUobmV0X2RldiwgbmV0X2Rldi0+bmFtZSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBmYWlsX2xvY2tlZDsKIAllZnhfdXBkYXRlX25hbWUoZWZ4KTsKKworCXJjID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKG5ldF9kZXYpOworCWlmIChyYykKKwkJZ290byBmYWlsX2xvY2tlZDsKKworCS8qIEFsd2F5cyBzdGFydCB3aXRoIGNhcnJpZXIgb2ZmOyBQSFkgZXZlbnRzIHdpbGwgZGV0ZWN0IHRoZSBsaW5rICovCisJbmV0aWZfY2Fycmllcl9vZmYoZWZ4LT5uZXRfZGV2KTsKKwogCXJ0bmxfdW5sb2NrKCk7CiAKIAlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZWZ4LT5wY2lfZGV2LT5kZXYsICZkZXZfYXR0cl9waHlfdHlwZSk7CkBAIC0xNjM5LDYgKzE2NDQsMTEgQEAKIAogCXJldHVybiAwOwogCitmYWlsX2xvY2tlZDoKKwlydG5sX3VubG9jaygpOworCUVGWF9FUlIoZWZ4LCAiY291bGQgbm90IHJlZ2lzdGVyIG5ldCBkZXZcbiIpOworCXJldHVybiByYzsKKwogZmFpbF9yZWdpc3RlcmVkOgogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldF9kZXYpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaCBiL2RyaXZlcnMvbmV0L3NmYy9lZnguaAppbmRleCBkYTE1N2FhLi5hZWNhZjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCkBAIC0yMCw4ICsyMCw5IEBACiAjZGVmaW5lIEZBTENPTl9CX1BfREVWSUQgICAgICAgIDB4MDcxMAogCiAvKiBUWCAqLwotZXh0ZXJuIGludCBlZnhfeG1pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAotCQkgICAgc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIG5ldGRldl90eF90IGVmeF94bWl0KHN0cnVjdCBlZnhfbmljICplZngsCisJCQkJICBzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQgZWZ4X3N0b3BfcXVldWUoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBlZnhfd2FrZV9xdWV1ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKaW5kZXggOTk3ZWEyYS4uNDUwMThmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCkBAIC03MzEsNyArNzMxLDcgQEAKIH0KIAogCi1zdHJ1Y3QgZXRodG9vbF9vcHMgZWZ4X2V0aHRvb2xfb3BzID0geworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVmeF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGVmeF9ldGh0b29sX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGVmeF9ldGh0b29sX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gZWZ4X2V0aHRvb2xfZ2V0X2RydmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5oIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuaAppbmRleCAzNjI4ZTQzLi4yOTVlYWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmgKQEAgLTIyLDYgKzIyLDYgQEAKIGV4dGVybiBpbnQgZWZ4X2V0aHRvb2xfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAogCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpOwogCi1leHRlcm4gc3RydWN0IGV0aHRvb2xfb3BzIGVmeF9ldGh0b29sX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZWZ4X2V0aHRvb2xfb3BzOwogCiAjZW5kaWYgLyogRUZYX0VUSFRPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9od2RlZnMuaCBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faHdkZWZzLmgKaW5kZXggMzc1ZTJhNS4uMmQyMjYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9od2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2h3ZGVmcy5oCkBAIC03MDAsNiArNzAwLDggQEAKIC8qIFhHWFMvWEFVSSBwb3dlcmRvd24vcmVzZXQgcmVnaXN0ZXIgKi8KICNkZWZpbmUgWFhfUFdSX1JTVF9SRUcgMHgxMzAwCiAKKyNkZWZpbmUgWFhfU0RfUlNUX0FDVF9MQk4gMTYKKyNkZWZpbmUgWFhfU0RfUlNUX0FDVF9XSURUSCAxCiAjZGVmaW5lIFhYX1BXUkRORF9FTl9MQk4gMTUKICNkZWZpbmUgWFhfUFdSRE5EX0VOX1dJRFRIIDEKICNkZWZpbmUgWFhfUFdSRE5DX0VOX0xCTiAxNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl94bWFjLmMgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYwppbmRleCAyYjMyNjljLi5iZWM1MmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYworKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uX3htYWMuYwpAQCAtNjQsMTMgKzY0LDE1IEBACiAJZWZ4X293b3JkX3QgcmVnOwogCWludCBjb3VudDsKIAorCS8qIFN0YXJ0IHJlc2V0IHNlcXVlbmNlICovCiAJRUZYX1BPUFVMQVRFX0RXT1JEXzEocmVnLCBYWF9SU1RfWFhfRU4sIDEpOwogCWZhbGNvbl93cml0ZShlZngsICZyZWcsIFhYX1BXUl9SU1RfUkVHKTsKIAotCS8qIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgbGluayB0byBlc3RhYmxpc2ggKi8KLQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAxMDAwOyBjb3VudCsrKSB7IC8qIHdhaXQgdXB0byAxMG1zICovCisJLyogV2FpdCB1cCB0byAxMCBtcyBmb3IgY29tcGxldGlvbiwgdGhlbiByZWluaXRpYWxpc2UgKi8KKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCAxMDAwOyBjb3VudCsrKSB7CiAJCWZhbGNvbl9yZWFkKGVmeCwgJnJlZywgWFhfUFdSX1JTVF9SRUcpOwotCQlpZiAoRUZYX09XT1JEX0ZJRUxEKHJlZywgWFhfUlNUX1hYX0VOKSA9PSAwKSB7CisJCWlmIChFRlhfT1dPUkRfRklFTEQocmVnLCBYWF9SU1RfWFhfRU4pID09IDAgJiYKKwkJICAgIEVGWF9PV09SRF9GSUVMRChyZWcsIFhYX1NEX1JTVF9BQ1QpID09IDApIHsKIAkJCWZhbGNvbl9zZXR1cF94YXVpKGVmeCk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaCBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKaW5kZXggNWVhYmVkZS4uMjk4NTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCkBAIC05ODQsOSArOTg0LDE0IEBACiAgKgogICogVGhlIDEwRyBNQUMgdXNlZCBpbiBGYWxjb24gcmVxdWlyZXMgOC1ieXRlIGFsaWdubWVudCBvbiB0aGUgZnJhbWUKICAqIGxlbmd0aCwgc28gd2Ugcm91bmQgdXAgdG8gdGhlIG5lYXJlc3QgOC4KKyAqCisgKiBSZS1jbG9ja2luZyBieSB0aGUgWEdYUyBvbiBSWCBjYW4gcmVkdWNlIGFuIElQRyB0byAzMiBiaXRzIChoYWxmIGFuCisgKiBYR01JSSBjeWNsZSkuICBJZiB0aGUgZnJhbWUgbGVuZ3RoIHJlYWNoZXMgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlCisgKiBzYW1lIGN5Y2xlLCB0aGUgWE1BQyBjYW4gbWlzcyB0aGUgSVBHIGFsdG9nZXRoZXIuICBXZSB3b3JrIGFyb3VuZAorICogdGhpcyBieSBhZGRpbmcgYSBmdXJ0aGVyIDE2IGJ5dGVzLgogICovCiAjZGVmaW5lIEVGWF9NQVhfRlJBTUVfTEVOKG10dSkgXAotCSgoKChtdHUpICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyA0LyogRkNTICovKSArIDcpICYgfjcpCisJKCgoKG10dSkgKyBFVEhfSExFTiArIFZMQU5fSExFTiArIDQvKiBGQ1MgKi8gKyA3KSAmIH43KSArIDE2KQogCiAKICNlbmRpZiAvKiBFRlhfTkVUX0RSSVZFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYyBiL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCmluZGV4IGI2N2NjY2EuLjgxN2M3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCkBAIC00MDAsNyArNDAwLDggQEAKIAlzdHJ1Y3QgZWZ4X2xvb3BiYWNrX3N0YXRlICpzdGF0ZSA9IGVmeC0+bG9vcGJhY2tfc2VsZnRlc3Q7CiAJc3RydWN0IGVmeF9sb29wYmFja19wYXlsb2FkICpwYXlsb2FkOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGksIHJjOworCWludCBpOworCW5ldGRldl90eF90IHJjOwogCiAJLyogVHJhbnNtaXQgTiBjb3BpZXMgb2YgYnVmZmVyICovCiAJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5wYWNrZXRfY291bnQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCAxNGExNDc4Li40ODljNGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtMTM4LDggKzEzOCw4IEBACiAgKiBSZXR1cm5zIE5FVERFVl9UWF9PSyBvciBORVRERVZfVFhfQlVTWQogICogWW91IG11c3QgaG9sZCBuZXRpZl90eF9sb2NrKCkgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IGVmeF9lbnF1ZXVlX3NrYihzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSwKLQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZWZ4X2VucXVldWVfc2tiKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlLAorCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gdHhfcXVldWUtPmVmeDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IGVmeC0+cGNpX2RldjsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXVuc2lnbmVkIGludCBkbWFfbGVuOwogCWJvb2wgdW5tYXBfc2luZ2xlOwogCWludCBxX3NwYWNlLCBpID0gMDsKLQlpbnQgcmMgPSBORVRERVZfVFhfT0s7CisJbmV0ZGV2X3R4X3QgcmMgPSBORVRERVZfVFhfT0s7CiAKIAlFRlhfQlVHX09OX1BBUkFOT0lEKHR4X3F1ZXVlLT53cml0ZV9jb3VudCAhPSB0eF9xdWV1ZS0+aW5zZXJ0X2NvdW50KTsKIApAQCAtMzUzLDE0ICszNTMsMTEgQEAKICAqCiAgKiBDb250ZXh0OiBuZXRpZl90eF9sb2NrIGhlbGQKICAqLwotaW5saW5lIGludCBlZnhfeG1pdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAotCQkgICAgc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWUsIHN0cnVjdCBza19idWZmICpza2IpCitpbmxpbmUgbmV0ZGV2X3R4X3QgZWZ4X3htaXQoc3RydWN0IGVmeF9uaWMgKmVmeCwKKwkJCSAgIHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCByYzsKLQogCS8qIE1hcCBmcmFnbWVudHMgZm9yIERNQSBhbmQgYWRkIHRvIFRYIHF1ZXVlICovCi0JcmMgPSBlZnhfZW5xdWV1ZV9za2IodHhfcXVldWUsIHNrYik7Ci0JcmV0dXJuIHJjOworCXJldHVybiBlZnhfZW5xdWV1ZV9za2IodHhfcXVldWUsIHNrYik7CiB9CiAKIC8qIEluaXRpYXRlIGEgcGFja2V0IHRyYW5zbWlzc2lvbi4gIFdlIHVzZSBvbmUgY2hhbm5lbCBwZXIgQ1BVCkBAIC0zNzIsNyArMzY5LDggQEAKICAqIE5vdGUgdGhhdCByZXR1cm5pbmcgYW55dGhpbmcgb3RoZXIgdGhhbiBORVRERVZfVFhfT0sgd2lsbCBjYXVzZSB0aGUKICAqIE9TIHRvIGZyZWUgdGhlIHNrYi4KICAqLwotaW50IGVmeF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCituZXRkZXZfdHhfdCBlZnhfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmggYi9kcml2ZXJzL25ldC9zZmMvdHguaAppbmRleCA1ZTFjYzIzLi5lMzY3ODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvdHguaApAQCAtMTgsNyArMTgsOCBAQAogdm9pZCBlZnhfaW5pdF90eF9xdWV1ZShzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSk7CiB2b2lkIGVmeF9maW5pX3R4X3F1ZXVlKHN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlKTsKIAotaW50IGVmeF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworbmV0ZGV2X3R4X3QgZWZ4X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKIHZvaWQgZWZ4X3JlbGVhc2VfdHhfYnVmZmVycyhzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZSk7CiAKICNlbmRpZiAvKiBFRlhfVFhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKaW5kZXggYmIyZTZhZi4uZTZiM2Q1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCkBAIC05NywyMyArOTcsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogUmVzZXQgdGhlIFBIWVhTIE1NRC4gVGhpcyBpcyBkb2N1bWVudGVkIChmb3IgdGhlIFF1YWtlIFBIWXMpIGFzIGRvaW5nCi0gKiBhIGNvbXBsZXRlIHNvZnQgcmVzZXQuCi0gKi8KIHN0YXRpYyBpbnQgeGZwX3Jlc2V0X3BoeShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCWludCByYzsKIAotCXJjID0gZWZ4X21kaW9fcmVzZXRfbW1kKGVmeCwgTURJT19NTURfUEhZWFMsCi0JCQkJWEZQX01BWF9SRVNFVF9USU1FIC8gWEZQX1JFU0VUX1dBSVQsCi0JCQkJWEZQX1JFU0VUX1dBSVQpOwotCWlmIChyYyA8IDApCi0JCWdvdG8gZmFpbDsKLQogCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJLyogV2FpdCBmb3IgdGhlIHJlc2V0IHRyaWdnZXJlZCBieSBmYWxjb25fcmVzZXRfaHcoKQorCQkgKiB0byBjb21wbGV0ZSAqLwogCQlyYyA9IHF0MjAyNWNfd2FpdF9yZXNldChlZngpOwogCQlpZiAocmMgPCAwKQogCQkJZ290byBmYWlsOworCX0gZWxzZSB7CisJCS8qIFJlc2V0IHRoZSBQSFlYUyBNTUQuIFRoaXMgaXMgZG9jdW1lbnRlZCBhcyBkb2luZworCQkgKiBhIGNvbXBsZXRlIHNvZnQgcmVzZXQuICovCisJCXJjID0gZWZ4X21kaW9fcmVzZXRfbW1kKGVmeCwgTURJT19NTURfUEhZWFMsCisJCQkJCVhGUF9NQVhfUkVTRVRfVElNRSAvIFhGUF9SRVNFVF9XQUlULAorCQkJCQlYRlBfUkVTRVRfV0FJVCk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIGZhaWw7CiAJfQogCiAJLyogV2FpdCAyNTBtcyBmb3IgdGhlIFBIWSB0byBjb21wbGV0ZSBib290dXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuYyBiL2RyaXZlcnMvbmV0L3NnaXNlZXEuYwppbmRleCA1ZmI4OGNhLi5lY2YzMjc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2dpc2VlcS5jCisrKyBiL2RyaXZlcnMvbmV0L3NnaXNlZXEuYwpAQCAtNTk0LDcgKzU5NCw3IEBACiAJbGVuID0gc2tiLT5sZW47CiAJaWYgKGxlbiA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbiA9IEVUSF9aTEVOOwogCX0KIApAQCAtNjQyLDcgKzY0Miw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcC0+dHhfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNzIwLDcgKzcyMCw3IEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzZ2lzZWVxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZ2lzZWVxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNnaXNlZXFfcGxhdGZvcm1fZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaHBjM19yZWdzICpocGNyZWdzID0gcGQtPmhwYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggYTJkODJkZC4uZjQ5ZDA4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCkBAIC03NzIsMTMgKzc3MiwxNSBAQAogCQkJbWRwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQlpZiAoZmVsaWNfc3RhdCAmIEVDU1JfTENITkcpIHsKIAkJCS8qIExpbmsgQ2hhbmdlZCAqLwotCQkJaWYgKG1kcC0+Y2QtPm5vX3BzcikgeworCQkJaWYgKG1kcC0+Y2QtPm5vX3BzciB8fCBtZHAtPm5vX2V0aGVyX2xpbmspIHsKIAkJCQlpZiAobWRwLT5saW5rID09IFBIWV9ET1dOKQogCQkJCQlsaW5rX3N0YXQgPSAwOwogCQkJCWVsc2UKIAkJCQkJbGlua19zdGF0ID0gUEhZX1NUX0xJTks7CiAJCQl9IGVsc2UgewogCQkJCWxpbmtfc3RhdCA9IChjdHJsX2lubChpb2FkZHIgKyBQU1IpKTsKKwkJCQlpZiAobWRwLT5ldGhlcl9saW5rX2FjdGl2ZV9sb3cpCisJCQkJCWxpbmtfc3RhdCA9IH5saW5rX3N0YXQ7CiAJCQl9CiAJCQlpZiAoIShsaW5rX3N0YXQgJiBQSFlfU1RfTElOSykpIHsKIAkJCQkvKiBMaW5rIERvd24gOiBkaXNhYmxlIHR4IGFuZCByeCAqLwpAQCAtMTEzMyw3ICsxMTM1LDcgQEAKIAogCW5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIGRldmljZSBjbG9zZSBmdW5jdGlvbiAqLwpAQCAtMTQxMCw2ICsxNDEyLDggQEAKIAltZHAtPnBoeV9pZCA9IHBkLT5waHk7CiAJLyogRURNQUMgZW5kaWFuICovCiAJbWRwLT5lZG1hY19lbmRpYW4gPSBwZC0+ZWRtYWNfZW5kaWFuOworCW1kcC0+bm9fZXRoZXJfbGluayA9IHBkLT5ub19ldGhlcl9saW5rOworCW1kcC0+ZXRoZXJfbGlua19hY3RpdmVfbG93ID0gcGQtPmV0aGVyX2xpbmtfYWN0aXZlX2xvdzsKIAogCS8qIHNldCBjcHUgZGF0YSAqLwogCW1kcC0+Y2QgPSAmc2hfZXRoX215X2NwdV9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmggYi9kcml2ZXJzL25ldC9zaF9ldGguaAppbmRleCA5YWZlNWI0Li5iYTE1MWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9zaF9ldGguaApAQCAtNzI5LDYgKzcyOSw5IEBACiAJY2hhciBwb3N0X3J4OwkJLyogUE9TVCByZWNlaXZlICovCiAJY2hhciBwb3N0X2Z3OwkJLyogUE9TVCBmb3J3YXJkICovCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgdHN1X3N0YXRzOwkvKiBUU1UgZm9yd2FyZCBzdGF0dXMgKi8KKworCXVuc2lnbmVkIG5vX2V0aGVyX2xpbms6MTsKKwl1bnNpZ25lZCBldGhlcl9saW5rX2FjdGl2ZV9sb3c6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9ldGhfc29mdF9zd2FwKGNoYXIgKnNyYywgaW50IGxlbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczE5MC5jIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKaW5kZXggMWYwNDBlOC4uN2NjOTg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzMTkwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzMTkwLmMKQEAgLTExNjgsNyArMTE2OCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2lzMTkwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzaXMxOTBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc2lzMTkwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IGE5YTg5N2IuLjk3OTQ5ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC0yMTQsNyArMjE0LDggQEAKIHN0YXRpYyB2b2lkIHNpczkwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKIHN0YXRpYyB2b2lkIHNpczkwMF9pbml0X3R4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogc3RhdGljIHZvaWQgc2lzOTAwX2luaXRfcnhfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7Ci1zdGF0aWMgaW50IHNpczkwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzaXM5MDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogc3RhdGljIGludCBzaXM5MDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogc3RhdGljIHZvaWQgc2lzOTAwX2ZpbmlzaF94bWl0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2lzOTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwpAQCAtMTU3MSw3ICsxNTcyLDcgQEAKICAqCXRlbGwgdXBwZXIgbGF5ZXIgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsCiAgKi8KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBzaXM5MDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKIAlzdHJ1Y3Qgc2lzOTAwX3ByaXZhdGUgKnNpc19wcml2ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CkBAIC0xNjI4LDcgKzE2MjksNyBAQAogCQkgICAgICAgInRvIHNsb3QgJWQuXG4iLAogCQkgICAgICAgbmV0X2Rldi0+bmFtZSwgc2tiLT5kYXRhLCAoaW50KXNrYi0+bGVuLCBlbnRyeSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioKQEAgLTIxMjcsOCArMjEyOCw2IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCW1kaW9fd3JpdGUobmV0X2RldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwppbmRleCAwODhmZTI2Li4zOGE1MDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKQEAgLTEwNyw3ICsxMDcsOCBAQAogc3RhdGljIHZvaWQgc2tmcF9jdGxfc2V0X211bHRpY2FzdF9saXN0X3dvX2xvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNrZnBfY3RsX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKIHN0YXRpYyBpbnQgc2tmcF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgc2tmcF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBza2ZwX3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2VuZF9xdWV1ZWRfcGFja2V0cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBzdGF0aWMgdm9pZCBDaGVja1NvdXJjZUFkZHJlc3ModW5zaWduZWQgY2hhciAqZnJhbWUsIHVuc2lnbmVkIGNoYXIgKmh3X2FkZHIpOwogc3RhdGljIHZvaWQgUmVzZXRBZGFwdGVyKHN0cnVjdCBzX3NtYyAqc21jKTsKQEAgLTEwNTYsNyArMTA1Nyw4IEBACiAgKiBTaWRlIEVmZmVjdHM6CiAgKiAgIE5vbmUKICAqLwotc3RhdGljIGludCBza2ZwX3NlbmRfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2tmcF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzX3NtYyAqc21jID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlza2ZkZGlfcHJpdiAqYnAgPSAmc21jLT5vczsKQEAgLTEwNzcsNyArMTA3OSw3IEBACiAJCS8vIGRlcXVldWUgcGFja2V0cyBmcm9tIHhtdCBxdWV1ZSBhbmQgc2VuZCB0aGVtCiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuICgwKTsJLyogcmV0dXJuICJzdWNjZXNzIiAqLworCQlyZXR1cm4gTkVUREVWX1RYX09LOwkvKiByZXR1cm4gInN1Y2Nlc3MiICovCiAJfQogCWlmIChicC0+UXVldWVTa2IgPT0gMCkgewkvLyByZXR1cm4gd2l0aCB0YnVzeSBzZXQ6IHF1ZXVlIGZ1bGwKIApAQCAtMTA5MSw3ICsxMDkzLDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiB9CQkJCS8vIHNrZnBfc2VuZF9wa3QKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDU0M2FmMjAuLjYyZTg1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTI0OTYsOSArMjQ5Niw2IEBACiAJfQogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQogCQlzcGluX2xvY2tfYmgoJmh3LT5waHlfbG9jayk7CiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCiAJCQllcnIgPSB4bV9waHlfd3JpdGUoaHcsIHNrZ2UtPnBvcnQsIGRhdGEtPnJlZ19udW0gJiAweDFmLApAQCAtMjc0Niw3ICsyNzQzLDggQEAKIAkJKyAocmluZy0+dG9fY2xlYW4gLSByaW5nLT50b191c2UpIC0gMTsKIH0KIAotc3RhdGljIGludCBza2dlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBza2dlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDBhNTUxZDguLjAwYmM2NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlICJza3kyLmgiCiAKICNkZWZpbmUgRFJWX05BTUUJCSJza3kyIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMjMiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4yNSIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIiAiCiAKIC8qCkBAIC02NCwxMCArNjQsMTIgQEAKICNkZWZpbmUgUlhfTUFYX1BFTkRJTkcJCShSWF9MRV9TSVpFLzYgLSAyKQogI2RlZmluZSBSWF9ERUZfUEVORElORwkJUlhfTUFYX1BFTkRJTkcKIAotI2RlZmluZSBUWF9SSU5HX1NJWkUJCTUxMgotI2RlZmluZSBUWF9ERUZfUEVORElORwkJMTI4Ci0jZGVmaW5lIE1BWF9TS0JfVFhfTEUJCSg0ICsgKHNpemVvZihkbWFfYWRkcl90KS9zaXplb2YodTMyKSkqTUFYX1NLQl9GUkFHUykKKy8qIFRoaXMgaXMgdGhlIHdvcnN0IGNhc2UgbnVtYmVyIG9mIHRyYW5zbWl0IGxpc3QgZWxlbWVudHMgZm9yIGEgc2luZ2xlIHNrYjoKKyAgIFZMQU4gKyBUU08gKyBDS1NVTSArIERhdGEgKyBza2JfZnJhZ3MgKiBETUEgKi8KKyNkZWZpbmUgTUFYX1NLQl9UWF9MRQkoNCArIChzaXplb2YoZG1hX2FkZHJfdCkvc2l6ZW9mKHUzMikpKk1BWF9TS0JfRlJBR1MpCiAjZGVmaW5lIFRYX01JTl9QRU5ESU5HCQkoTUFYX1NLQl9UWF9MRSsxKQorI2RlZmluZSBUWF9NQVhfUEVORElORwkJNDA5NgorI2RlZmluZSBUWF9ERUZfUEVORElORwkJMTI3CiAKICNkZWZpbmUgU1RBVFVTX1JJTkdfU0laRQkyMDQ4CS8qIDIgcG9ydHMgKiAoVFggKyAyKlJYKSAqLwogI2RlZmluZSBTVEFUVVNfTEVfQllURVMJCShTVEFUVVNfUklOR19TSVpFKnNpemVvZihzdHJ1Y3Qgc2t5Ml9zdGF0dXNfbGUpKQpAQCAtMjU0LDYgKzI1Niw5IEBACiAKIAkJc2t5Ml9yZWFkMzIoaHcsIEIyX0dQX0lPKTsKIAl9CisKKwkvKiBUdXJuIG9uICJkcml2ZXIgbG9hZGVkIiBMRUQgKi8KKwlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIFkyX0xFRF9TVEFUX09OKTsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9wb3dlcl9hdXgoc3RydWN0IHNreTJfaHcgKmh3KQpAQCAtMjY3LDExICsyNzIsMTUgQEAKIAkJCSAgICBZMl9DTEtfR0FUX0xOSzFfRElTIHwgWTJfUENJX0NMS19MTksyX0RJUyB8CiAJCQkgICAgWTJfQ09SX0NMS19MTksyX0RJUyB8IFkyX0NMS19HQVRfTE5LMl9ESVMpOwogCi0JLyogc3dpdGNoIHBvd2VyIHRvIFZBVVggKi8KLQlpZiAoc2t5Ml9yZWFkMTYoaHcsIEIwX0NUU1QpICYgWTJfVkFVWF9BVkFJTCkKKwkvKiBzd2l0Y2ggcG93ZXIgdG8gVkFVWCBpZiBzdXBwb3J0ZWQgYW5kIFBNRSBmcm9tIEQzY29sZCAqLworCWlmICggKHNreTJfcmVhZDMyKGh3LCBCMF9DVFNUKSAmIFkyX1ZBVVhfQVZBSUwpICYmCisJICAgICBwY2lfcG1lX2NhcGFibGUoaHctPnBkZXYsIFBDSV9EM2NvbGQpKQogCQlza3kyX3dyaXRlOChodywgQjBfUE9XRVJfQ1RSTCwKIAkJCSAgICAoUENfVkFVWF9FTkEgfCBQQ19WQ0NfRU5BIHwKIAkJCSAgICAgUENfVkFVWF9PTiB8IFBDX1ZDQ19PRkYpKTsKKworCS8qIHR1cm4gb2ZmICJkcml2ZXIgbG9hZGVkIExFRCIgKi8KKwlza3kyX3dyaXRlMTYoaHcsIEIwX0NUU1QsIFkyX0xFRF9TVEFUX09GRik7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfZ21hY19yZXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCkBAIC0zMjEsNyArMzMwLDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoaHctPmRldltwb3J0XSk7CiAJdTE2IGN0cmwsIGN0MTAwMCwgYWR2LCBwZywgbGVkY3RybCwgbGVkb3ZlciwgcmVnOwogCi0JaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKKwlpZiAoIChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1NQRUVEKSAmJgogCSAgICAhKGh3LT5mbGFncyAmIFNLWTJfSFdfTkVXRVJfUEhZKSkgewogCQl1MTYgZWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfRVhUX0NUUkwpOwogCkBAIC0zNjMsNyArMzcyLDcgQEAKIAkJCWN0cmwgfD0gUEhZX01fUENfTURJX1hNT0RFKFBIWV9NX1BDX0VOQV9BVVRPKTsKIAogCQkJLyogZG93bnNoaWZ0IG9uIFBIWSA4OEUxMTEyIGFuZCA4OEUxMTQ5IGlzIGNoYW5nZWQgKi8KLQkJCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFCisJCQlpZiAoIChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1NQRUVEKQogCQkJICAgICYmIChody0+ZmxhZ3MgJiBTS1kyX0hXX05FV0VSX1BIWSkpIHsKIAkJCQkvKiBzZXQgZG93bnNoaWZ0IGNvdW50ZXIgdG8gM3ggYW5kIGVuYWJsZSBkb3duc2hpZnQgKi8KIAkJCQljdHJsICY9IH5QSFlfTV9QQ19EU0NfTVNLOwpAQCAtNDA4LDcgKzQxNyw3IEBACiAJYWR2ID0gUEhZX0FOX0NTTUE7CiAJcmVnID0gMDsKIAotCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJaWYgKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX0FVVE9fU1BFRUQpIHsKIAkJaWYgKHNreTJfaXNfY29wcGVyKGh3KSkgewogCQkJaWYgKHNreTItPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKIAkJCQljdDEwMDAgfD0gUEhZX01fMTAwMENfQUZEOwpAQCAtNDIzLDE0ICs0MzIsMTEgQEAKIAkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQogCQkJCWFkdiB8PSBQSFlfTV9BTl8xMF9IRDsKIAotCQkJYWR2IHw9IGNvcHBlcl9mY19hZHZbc2t5Mi0+Zmxvd19tb2RlXTsKIAkJfSBlbHNlIHsJLyogc3BlY2lhbCBkZWZpbmVzIGZvciBGSUJFUiAoODhFMTA0MFMgb25seSkgKi8KIAkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCiAJCQkJYWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FGRDsKIAkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCiAJCQkJYWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FIRDsKLQotCQkJYWR2IHw9IGZpYmVyX2ZjX2Fkdltza3kyLT5mbG93X21vZGVdOwogCQl9CiAKIAkJLyogUmVzdGFydCBBdXRvLW5lZ290aWF0aW9uICovCkBAIC00MzksOCArNDQ1LDggQEAKIAkJLyogZm9yY2VkIHNwZWVkL2R1cGxleCBzZXR0aW5ncyAqLwogCQljdDEwMDAgPSBQSFlfTV8xMDAwQ19NU0U7CiAKLQkJLyogRGlzYWJsZSBhdXRvIHVwZGF0ZSBmb3IgZHVwbGV4IGZsb3cgY29udHJvbCBhbmQgc3BlZWQgKi8KLQkJcmVnIHw9IEdNX0dQQ1JfQVVfQUxMX0RJUzsKKwkJLyogRGlzYWJsZSBhdXRvIHVwZGF0ZSBmb3IgZHVwbGV4IGZsb3cgY29udHJvbCBhbmQgZHVwbGV4ICovCisJCXJlZyB8PSBHTV9HUENSX0FVX0RVUF9ESVMgfCBHTV9HUENSX0FVX1NQRF9ESVM7CiAKIAkJc3dpdGNoIChza3kyLT5zcGVlZCkgewogCQljYXNlIFNQRUVEXzEwMDA6CkBAIC00NTgsOCArNDY0LDE1IEBACiAJCQljdHJsIHw9IFBIWV9DVF9EVVBfTUQ7CiAJCX0gZWxzZSBpZiAoc2t5Mi0+c3BlZWQgPCBTUEVFRF8xMDAwKQogCQkJc2t5Mi0+Zmxvd19tb2RlID0gRkNfTk9ORTsKKwl9CiAKLQorCWlmIChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1BBVVNFKSB7CisJCWlmIChza3kyX2lzX2NvcHBlcihodykpCisJCQlhZHYgfD0gY29wcGVyX2ZjX2Fkdltza3kyLT5mbG93X21vZGVdOworCQllbHNlCisJCQlhZHYgfD0gZmliZXJfZmNfYWR2W3NreTItPmZsb3dfbW9kZV07CisJfSBlbHNlIHsKKwkJcmVnIHw9IEdNX0dQQ1JfQVVfRkNUX0RJUzsKICAJCXJlZyB8PSBnbV9mY19kaXNhYmxlW3NreTItPmZsb3dfbW9kZV07CiAKIAkJLyogRm9yd2FyZCBwYXVzZSBwYWNrZXRzIHRvIEdNQUM/ICovCkBAIC01OTQsNyArNjA3LDggQEAKIAkJLyogbm8gZWZmZWN0IG9uIFl1a29uLVhMICovCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfTEVEX0NUUkwsIGxlZGN0cmwpOwogCi0JCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRElTQUJMRSB8fCBza3kyLT5zcGVlZCA9PSBTUEVFRF8xMDApIHsKKwkJaWYgKCAhKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX0FVVE9fU1BFRUQpCisJCSAgICAgfHwgc2t5Mi0+c3BlZWQgPT0gU1BFRURfMTAwKSB7CiAJCQkvKiB0dXJuIG9uIDEwMCBNYnBzIExFRCAoTEVEX0xJTksxMDApICovCiAJCQlsZWRvdmVyIHw9IFBIWV9NX0xFRF9NT18xMDAoTU9fTEVEX09OKTsKIAkJfQpAQCAtNjA1LDcgKzYxOSw3IEBACiAJfQogCiAJLyogRW5hYmxlIHBoeSBpbnRlcnJ1cHQgb24gYXV0by1uZWdvdGlhdGlvbiBjb21wbGV0ZSAob3IgbGluayB1cCkgKi8KLQlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKKwlpZiAoc2t5Mi0+ZmxhZ3MgJiBTS1kyX0ZMQUdfQVVUT19TUEVFRCkKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgUEhZX01fSVNfQU5fQ09NUEwpOwogCWVsc2UKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgUEhZX01fREVGX01TSyk7CkBAIC02NjEsNyArNjc1LDkgQEAKIAogCS8qIHNldHVwIEdlbmVyYWwgUHVycG9zZSBDb250cm9sIFJlZ2lzdGVyICovCiAJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwsCi0JCSAgICBHTV9HUENSX0ZMX1BBU1MgfCBHTV9HUENSX1NQRUVEXzEwMCB8IEdNX0dQQ1JfQVVfQUxMX0RJUyk7CisJCSAgICBHTV9HUENSX0ZMX1BBU1MgfCBHTV9HUENSX1NQRUVEXzEwMCB8CisJCSAgICBHTV9HUENSX0FVX0RVUF9ESVMgfCBHTV9HUENSX0FVX0ZDVF9ESVMgfAorCQkgICAgR01fR1BDUl9BVV9TUERfRElTKTsKIAogCWlmIChody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX0VDKSB7CiAJCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UpIHsKQEAgLTk3NywyMyArOTkzLDI2IEBACiAgKiBoYXJkd2FyZSBhbmQgZHJpdmVyIGxpc3QgZWxlbWVudHMKICAqLwogc3RhdGljIHZvaWQgc2t5Ml9wcmVmZXRjaF9pbml0KHN0cnVjdCBza3kyX2h3ICpodywgdTMyIHFhZGRyLAotCQkJCSAgICAgIHU2NCBhZGRyLCB1MzIgbGFzdCkKKwkJCSAgICAgICBkbWFfYWRkcl90IGFkZHIsIHUzMiBsYXN0KQogewogCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9DVFJMKSwgUFJFRl9VTklUX1JTVF9TRVQpOwogCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9DVFJMKSwgUFJFRl9VTklUX1JTVF9DTFIpOwotCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9BRERSX0hJKSwgYWRkciA+PiAzMik7Ci0Jc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUihxYWRkciwgUFJFRl9VTklUX0FERFJfTE8pLCAodTMyKSBhZGRyKTsKKwlza3kyX3dyaXRlMzIoaHcsIFkyX1FBRERSKHFhZGRyLCBQUkVGX1VOSVRfQUREUl9ISSksIHVwcGVyXzMyX2JpdHMoYWRkcikpOworCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIocWFkZHIsIFBSRUZfVU5JVF9BRERSX0xPKSwgbG93ZXJfMzJfYml0cyhhZGRyKSk7CiAJc2t5Ml93cml0ZTE2KGh3LCBZMl9RQUREUihxYWRkciwgUFJFRl9VTklUX0xBU1RfSURYKSwgbGFzdCk7CiAJc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUihxYWRkciwgUFJFRl9VTklUX0NUUkwpLCBQUkVGX1VOSVRfT1BfT04pOwogCiAJc2t5Ml9yZWFkMzIoaHcsIFkyX1FBRERSKHFhZGRyLCBQUkVGX1VOSVRfQ1RSTCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza3kyX3R4X2xlICpnZXRfdHhfbGUoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNreTJfdHhfbGUgKmdldF90eF9sZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCB1MTYgKnNsb3QpCiB7Ci0Jc3RydWN0IHNreTJfdHhfbGUgKmxlID0gc2t5Mi0+dHhfbGUgKyBza3kyLT50eF9wcm9kOworCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IHNreTItPnR4X2xlICsgKnNsb3Q7CisJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmUgPSBza3kyLT50eF9yaW5nICsgKnNsb3Q7CiAKLQlza3kyLT50eF9wcm9kID0gUklOR19ORVhUKHNreTItPnR4X3Byb2QsIFRYX1JJTkdfU0laRSk7CisJKnNsb3QgPSBSSU5HX05FWFQoKnNsb3QsIHNreTItPnR4X3Jpbmdfc2l6ZSk7CisJcmUtPmZsYWdzID0gMDsKKwlyZS0+c2tiID0gTlVMTDsKIAlsZS0+Y3RybCA9IDA7CiAJcmV0dXJuIGxlOwogfQpAQCAtMTAwNiwxNSArMTAyNSwxMCBAQAogCXNreTItPnR4X3RjcHN1bSA9IDA7CiAJc2t5Mi0+dHhfbGFzdF9tc3MgPSAwOwogCi0JbGUgPSBnZXRfdHhfbGUoc2t5Mik7CisJbGUgPSBnZXRfdHhfbGUoc2t5MiwgJnNreTItPnR4X3Byb2QpOwogCWxlLT5hZGRyID0gMDsKIAlsZS0+b3Bjb2RlID0gT1BfQUREUjY0IHwgSFdfT1dORVI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHR4X3JpbmdfaW5mbyAqdHhfbGVfcmUoc3RydWN0IHNreTJfcG9ydCAqc2t5MiwKLQkJCQkJICAgIHN0cnVjdCBza3kyX3R4X2xlICpsZSkKLXsKLQlyZXR1cm4gc2t5Mi0+dHhfcmluZyArIChsZSAtIHNreTItPnR4X2xlKTsKKwlza3kyLT50eF9sYXN0X3VwcGVyID0gMDsKIH0KIAogLyogVXBkYXRlIGNoaXAncyBuZXh0IHBvaW50ZXIgKi8KQEAgLTEwNTAsNyArMTA2NCw3IEBACiAJfQogCiAJbGUgPSBza3kyX25leHRfcngoc2t5Mik7Ci0JbGUtPmFkZHIgPSBjcHVfdG9fbGUzMigodTMyKSBtYXApOworCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhtYXApKTsKIAlsZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKIAlsZS0+b3Bjb2RlID0gb3AgfCBIV19PV05FUjsKIH0KQEAgLTExMTcsNyArMTEzMSw4IEBACiAKIAlza3kyX3dyaXRlMzIoc2t5Mi0+aHcsCiAJCSAgICAgUV9BRERSKHJ4cWFkZHJbc2t5Mi0+cG9ydF0sIFFfQ1NSKSwKLQkJICAgICBza3kyLT5yeF9jc3VtID8gQk1VX0VOQV9SWF9DSEtTVU0gOiBCTVVfRElTX1JYX0NIS1NVTSk7CisJCSAgICAgKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKQorCQkgICAgID8gQk1VX0VOQV9SWF9DSEtTVU0gOiBCTVVfRElTX1JYX0NIS1NVTSk7CiB9CiAKIC8qCkBAIC0xMTY5LDcgKzExODQsNiBAQAogCQkJcmUtPnNrYiA9IE5VTEw7CiAJCX0KIAl9Ci0Jc2tiX3F1ZXVlX3B1cmdlKCZza3kyLT5yeF9yZWN5Y2xlKTsKIH0KIAogLyogQmFzaWMgTUlJIHN1cHBvcnQgKi8KQEAgLTEyMDAsOSArMTIxNCw2IEBACiAJfQogCiAJY2FzZSBTSU9DU01JSVJFRzoKLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQogCQlzcGluX2xvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIAkJZXJyID0gZ21fcGh5X3dyaXRlKGh3LCBza3kyLT5wb3J0LCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKIAkJCQkgICBkYXRhLT52YWxfaW4pOwpAQCAtMTI2MSwxMCArMTI3Miw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgaTsKIAotCXNrYiA9IF9fc2tiX2RlcXVldWUoJnNreTItPnJ4X3JlY3ljbGUpOwotCWlmICghc2tiKQotCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHNreTItPm5ldGRldiwgc2t5Mi0+cnhfZGF0YV9zaXplCi0JCQkJICAgICAgICsgc2t5Ml9yeF9wYWQoc2t5Mi0+aHcpKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHNreTItPm5ldGRldiwKKwkJCSAgICAgICBza3kyLT5yeF9kYXRhX3NpemUgKyBza3kyX3J4X3BhZChza3kyLT5odykpOwogCWlmICghc2tiKQogCQlnb3RvIG5vbWVtOwogCkBAIC0xMzU2LDggKzEzNjUsNiBAQAogCiAJc2t5Mi0+cnhfZGF0YV9zaXplID0gc2l6ZTsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnNreTItPnJ4X3JlY3ljbGUpOwotCiAJLyogRmlsbCBSeCByaW5nICovCiAJZm9yIChpID0gMDsgaSA8IHNreTItPnJ4X3BlbmRpbmc7IGkrKykgewogCQlyZSA9IHNreTItPnJ4X3JpbmcgKyBpOwpAQCAtMTM5Niw2ICsxNDAzLDYxIEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyBpbnQgc2t5Ml9hbGxvY19idWZmZXJzKHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCit7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisKKwkvKiBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KKwlza3kyLT50eF9sZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGh3LT5wZGV2LAorCQkJCQkgICBza3kyLT50eF9yaW5nX3NpemUgKgorCQkJCQkgICBzaXplb2Yoc3RydWN0IHNreTJfdHhfbGUpLAorCQkJCQkgICAmc2t5Mi0+dHhfbGVfbWFwKTsKKwlpZiAoIXNreTItPnR4X2xlKQorCQlnb3RvIG5vbWVtOworCisJc2t5Mi0+dHhfcmluZyA9IGtjYWxsb2Moc2t5Mi0+dHhfcmluZ19zaXplLCBzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFza3kyLT50eF9yaW5nKQorCQlnb3RvIG5vbWVtOworCisJc2t5Mi0+cnhfbGUgPSBwY2lfYWxsb2NfY29uc2lzdGVudChody0+cGRldiwgUlhfTEVfQllURVMsCisJCQkJCSAgICZza3kyLT5yeF9sZV9tYXApOworCWlmICghc2t5Mi0+cnhfbGUpCisJCWdvdG8gbm9tZW07CisJbWVtc2V0KHNreTItPnJ4X2xlLCAwLCBSWF9MRV9CWVRFUyk7CisKKwlza3kyLT5yeF9yaW5nID0ga2NhbGxvYyhza3kyLT5yeF9wZW5kaW5nLCBzaXplb2Yoc3RydWN0IHJ4X3JpbmdfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFza3kyLT5yeF9yaW5nKQorCQlnb3RvIG5vbWVtOworCisJcmV0dXJuIDA7Citub21lbToKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgc2t5Ml9mcmVlX2J1ZmZlcnMoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKworCWlmIChza3kyLT5yeF9sZSkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KGh3LT5wZGV2LCBSWF9MRV9CWVRFUywKKwkJCQkgICAgc2t5Mi0+cnhfbGUsIHNreTItPnJ4X2xlX21hcCk7CisJCXNreTItPnJ4X2xlID0gTlVMTDsKKwl9CisJaWYgKHNreTItPnR4X2xlKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHctPnBkZXYsCisJCQkJICAgIHNreTItPnR4X3Jpbmdfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc2t5Ml90eF9sZSksCisJCQkJICAgIHNreTItPnR4X2xlLCBza3kyLT50eF9sZV9tYXApOworCQlza3kyLT50eF9sZSA9IE5VTEw7CisJfQorCWtmcmVlKHNreTItPnR4X3JpbmcpOworCWtmcmVlKHNreTItPnJ4X3JpbmcpOworCisJc2t5Mi0+dHhfcmluZyA9IE5VTEw7CisJc2t5Mi0+cnhfcmluZyA9IE5VTEw7Cit9CisKIC8qIEJyaW5nIHVwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLwogc3RhdGljIGludCBza3kyX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNDAzLDcgKzE0NjUsNyBAQAogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwogCXUzMiBpbWFzaywgcmFtc2l6ZTsKLQlpbnQgY2FwLCBlcnIgPSAtRU5PTUVNOworCWludCBjYXAsIGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb3RoZXJkZXYgPSBody0+ZGV2W3NreTItPnBvcnReMV07CiAKIAkvKgpAQCAtMTQyMiwzMiArMTQ4NCwxMiBAQAogCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAotCS8qIG11c3QgYmUgcG93ZXIgb2YgMiAqLwotCXNreTItPnR4X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaHctPnBkZXYsCi0JCQkJCSAgIFRYX1JJTkdfU0laRSAqCi0JCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2t5Ml90eF9sZSksCi0JCQkJCSAgICZza3kyLT50eF9sZV9tYXApOwotCWlmICghc2t5Mi0+dHhfbGUpCi0JCWdvdG8gZXJyX291dDsKLQotCXNreTItPnR4X3JpbmcgPSBrY2FsbG9jKFRYX1JJTkdfU0laRSwgc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghc2t5Mi0+dHhfcmluZykKKwllcnIgPSBza3kyX2FsbG9jX2J1ZmZlcnMoc2t5Mik7CisJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCiAJdHhfaW5pdChza3kyKTsKIAotCXNreTItPnJ4X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaHctPnBkZXYsIFJYX0xFX0JZVEVTLAotCQkJCQkgICAmc2t5Mi0+cnhfbGVfbWFwKTsKLQlpZiAoIXNreTItPnJ4X2xlKQotCQlnb3RvIGVycl9vdXQ7Ci0JbWVtc2V0KHNreTItPnJ4X2xlLCAwLCBSWF9MRV9CWVRFUyk7Ci0KLQlza3kyLT5yeF9yaW5nID0ga2NhbGxvYyhza3kyLT5yeF9wZW5kaW5nLCBzaXplb2Yoc3RydWN0IHJ4X3JpbmdfaW5mbyksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza3kyLT5yeF9yaW5nKQotCQlnb3RvIGVycl9vdXQ7Ci0KIAlza3kyX21hY19pbml0KGh3LCBwb3J0KTsKIAogCS8qIFJlZ2lzdGVyIGlzIG51bWJlciBvZiA0SyBibG9ja3Mgb24gaW50ZXJuYWwgUkFNIGJ1ZmZlci4gKi8KQEAgLTE0ODIsMTQgKzE1MjQsMTIgQEAKIAkJc2t5Ml93cml0ZTE2KGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9BTCksIEVDVV9UWEZGX0xFVik7CiAKIAlza3kyX3ByZWZldGNoX2luaXQoaHcsIHR4cWFkZHJbcG9ydF0sIHNreTItPnR4X2xlX21hcCwKLQkJCSAgIFRYX1JJTkdfU0laRSAtIDEpOworCQkJICAgc2t5Mi0+dHhfcmluZ19zaXplIC0gMSk7CiAKICNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKIAlza3kyX3NldF92bGFuX21vZGUoaHcsIHBvcnQsIHNreTItPnZsZ3JwICE9IE5VTEwpOwogI2VuZGlmCiAKLQlza3kyLT5yZXN0YXJ0aW5nID0gMDsKLQogCWVyciA9IHNreTJfcnhfc3RhcnQoc2t5Mik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwpAQCAtMTUwMCw0NyArMTU0MCwyNiBAQAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOwogCXNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKIAotCXNreTJfc2V0X211bHRpY2FzdChkZXYpOwotCi0JLyogd2FrZSBxdWV1ZSBpbmNhc2Ugd2UgYXJlIHJlc3RhcnRpbmcgKi8KLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0KIAlpZiAobmV0aWZfbXNnX2lmdXAoc2t5MikpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZW5hYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOworCiAJcmV0dXJuIDA7CiAKIGVycl9vdXQ6Ci0JaWYgKHNreTItPnJ4X2xlKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHctPnBkZXYsIFJYX0xFX0JZVEVTLAotCQkJCSAgICBza3kyLT5yeF9sZSwgc2t5Mi0+cnhfbGVfbWFwKTsKLQkJc2t5Mi0+cnhfbGUgPSBOVUxMOwotCX0KLQlpZiAoc2t5Mi0+dHhfbGUpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChody0+cGRldiwKLQkJCQkgICAgVFhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBza3kyX3R4X2xlKSwKLQkJCQkgICAgc2t5Mi0+dHhfbGUsIHNreTItPnR4X2xlX21hcCk7Ci0JCXNreTItPnR4X2xlID0gTlVMTDsKLQl9Ci0Ja2ZyZWUoc2t5Mi0+dHhfcmluZyk7Ci0Ja2ZyZWUoc2t5Mi0+cnhfcmluZyk7Ci0KLQlza3kyLT50eF9yaW5nID0gTlVMTDsKLQlza3kyLT5yeF9yaW5nID0gTlVMTDsKKwlza3kyX2ZyZWVfYnVmZmVycyhza3kyKTsKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBNb2R1bGFyIHN1YnRyYWN0aW9uIGluIHJpbmcgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHR4X2Rpc3QodW5zaWduZWQgdGFpbCwgdW5zaWduZWQgaGVhZCkKK3N0YXRpYyBpbmxpbmUgaW50IHR4X2ludXNlKGNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCiB7Ci0JcmV0dXJuIChoZWFkIC0gdGFpbCkgJiAoVFhfUklOR19TSVpFIC0gMSk7CisJcmV0dXJuIChza3kyLT50eF9wcm9kIC0gc2t5Mi0+dHhfY29ucykgJiAoc2t5Mi0+dHhfcmluZ19zaXplIC0gMSk7CiB9CiAKIC8qIE51bWJlciBvZiBsaXN0IGVsZW1lbnRzIGF2YWlsYWJsZSBmb3IgbmV4dCB0eCAqLwogc3RhdGljIGlubGluZSBpbnQgdHhfYXZhaWwoY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MikKIHsKLQlpZiAodW5saWtlbHkoc2t5Mi0+cmVzdGFydGluZykpCi0JCXJldHVybiAwOwotCXJldHVybiBza3kyLT50eF9wZW5kaW5nIC0gdHhfZGlzdChza3kyLT50eF9jb25zLCBza3kyLT50eF9wcm9kKTsKKwlyZXR1cm4gc2t5Mi0+dHhfcGVuZGluZyAtIHR4X2ludXNlKHNreTIpOwogfQogCiAvKiBFc3RpbWF0ZSBvZiBudW1iZXIgb2YgdHJhbnNtaXQgbGlzdCBlbGVtZW50cyByZXF1aXJlZCAqLwpAQCAtMTU2MCwyMCArMTU3OSwzNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgc2t5Ml90eF91bm1hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgY29uc3Qgc3RydWN0IHR4X3JpbmdfaW5mbyAqcmUpCit7CisJaWYgKHJlLT5mbGFncyAmIFRYX01BUF9TSU5HTEUpCisJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAorCQkJCSBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAorCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwllbHNlIGlmIChyZS0+ZmxhZ3MgJiBUWF9NQVBfUEFHRSkKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAorCQkJICAgICAgIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Cit9CisKIC8qCiAgKiBQdXQgb25lIHBhY2tldCBpbiByaW5nIGZvciB0cmFuc21pdC4KICAqIEEgc2luZ2xlIHBhY2tldCBjYW4gZ2VuZXJhdGUgbXVsdGlwbGUgbGlzdCBlbGVtZW50cywgYW5kCiAgKiB0aGUgbnVtYmVyIG9mIHJpbmcgZWxlbWVudHMgd2lsbCBwcm9iYWJseSBiZSBsZXNzIHRoYW4gdGhlIG51bWJlcgogICogb2YgbGlzdCBlbGVtZW50cyB1c2VkLgogICovCi1zdGF0aWMgaW50IHNreTJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNreTJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJc3RydWN0IHNreTJfdHhfbGUgKmxlID0gTlVMTDsKIAlzdHJ1Y3QgdHhfcmluZ19pbmZvICpyZTsKLQl1bnNpZ25lZCBpLCBsZW4sIGZpcnN0X3Nsb3Q7CisJdW5zaWduZWQgaSwgbGVuOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKKwl1MzIgdXBwZXI7CisJdTE2IHNsb3Q7CiAJdTE2IG1zczsKIAl1OCBjdHJsOwogCkBAIC0xNTg2LDE1ICsxNjIxLDE3IEBACiAJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihody0+cGRldiwgbWFwcGluZykpCiAJCWdvdG8gbWFwcGluZ19lcnJvcjsKIAotCWZpcnN0X3Nsb3QgPSBza3kyLT50eF9wcm9kOworCXNsb3QgPSBza3kyLT50eF9wcm9kOwogCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNreTIpKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZmlyc3Rfc2xvdCwgc2tiLT5sZW4pOworCQkgICAgICAgZGV2LT5uYW1lLCBzbG90LCBza2ItPmxlbik7CiAKIAkvKiBTZW5kIGhpZ2ggYml0cyBpZiBuZWVkZWQgKi8KLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpIHsKLQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7Ci0JCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhtYXBwaW5nKSk7CisJdXBwZXIgPSB1cHBlcl8zMl9iaXRzKG1hcHBpbmcpOworCWlmICh1cHBlciAhPSBza3kyLT50eF9sYXN0X3VwcGVyKSB7CisJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKKwkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMih1cHBlcik7CisJCXNreTItPnR4X2xhc3RfdXBwZXIgPSB1cHBlcjsKIAkJbGUtPm9wY29kZSA9IE9QX0FERFI2NCB8IEhXX09XTkVSOwogCX0KIApAQCAtMTYwNiw3ICsxNjQzLDcgQEAKIAkJCW1zcyArPSBFVEhfSExFTiArIGlwX2hkcmxlbihza2IpICsgdGNwX2hkcmxlbihza2IpOwogCiAgIAkJaWYgKG1zcyAhPSBza3kyLT50eF9sYXN0X21zcykgewotICAJCQlsZSA9IGdldF90eF9sZShza3kyKTsKKwkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKICAgCQkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMihtc3MpOwogCiAJCQlpZiAoaHctPmZsYWdzICYgU0tZMl9IV19ORVdfTEUpCkBAIC0xNjIyLDcgKzE2NTksNyBAQAogCS8qIEFkZCBWTEFOIHRhZywgY2FuIHBpZ2d5YmFjayBvbiBMUkdMRU4gb3IgQUREUjY0ICovCiAJaWYgKHNreTItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQlpZiAoIWxlKSB7Ci0JCQlsZSA9IGdldF90eF9sZShza3kyKTsKKwkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKIAkJCWxlLT5hZGRyID0gMDsKIAkJCWxlLT5vcGNvZGUgPSBPUF9WTEFOfEhXX09XTkVSOwogCQl9IGVsc2UKQEAgLTE2NTEsNyArMTY4OCw3IEBACiAJCQlpZiAodGNwc3VtICE9IHNreTItPnR4X3RjcHN1bSkgewogCQkJCXNreTItPnR4X3RjcHN1bSA9IHRjcHN1bTsKIAotCQkJCWxlID0gZ2V0X3R4X2xlKHNreTIpOworCQkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKIAkJCQlsZS0+YWRkciA9IGNwdV90b19sZTMyKHRjcHN1bSk7CiAJCQkJbGUtPmxlbmd0aCA9IDA7CS8qIGluaXRpYWwgY2hlY2tzdW0gdmFsdWUgKi8KIAkJCQlsZS0+Y3RybCA9IDE7CS8qIG9uZSBwYWNrZXQgKi8KQEAgLTE2NjAsMTYgKzE2OTcsMTcgQEAKIAkJfQogCX0KIAotCWxlID0gZ2V0X3R4X2xlKHNreTIpOwotCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIoKHUzMikgbWFwcGluZyk7CisJcmUgPSBza3kyLT50eF9yaW5nICsgc2xvdDsKKwlyZS0+ZmxhZ3MgPSBUWF9NQVBfU0lOR0xFOworCXBjaV91bm1hcF9hZGRyX3NldChyZSwgbWFwYWRkciwgbWFwcGluZyk7CisJcGNpX3VubWFwX2xlbl9zZXQocmUsIG1hcGxlbiwgbGVuKTsKKworCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKKwlsZS0+YWRkciA9IGNwdV90b19sZTMyKGxvd2VyXzMyX2JpdHMobWFwcGluZykpOwogCWxlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZW4pOwogCWxlLT5jdHJsID0gY3RybDsKIAlsZS0+b3Bjb2RlID0gbXNzID8gKE9QX0xBUkdFU0VORCB8IEhXX09XTkVSKSA6IChPUF9QQUNLRVQgfCBIV19PV05FUik7CiAKLQlyZSA9IHR4X2xlX3JlKHNreTIsIGxlKTsKLQlyZS0+c2tiID0gc2tiOwotCXBjaV91bm1hcF9hZGRyX3NldChyZSwgbWFwYWRkciwgbWFwcGluZyk7Ci0JcGNpX3VubWFwX2xlbl9zZXQocmUsIG1hcGxlbiwgbGVuKTsKIAogCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKIAkJY29uc3Qgc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOwpAQCAtMTY4MCwyNyArMTcxOCwzMSBAQAogCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGh3LT5wZGV2LCBtYXBwaW5nKSkKIAkJCWdvdG8gbWFwcGluZ191bndpbmQ7CiAKLQkJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKSB7Ci0JCQlsZSA9IGdldF90eF9sZShza3kyKTsKLQkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhtYXBwaW5nKSk7Ci0JCQlsZS0+Y3RybCA9IDA7CisJCXVwcGVyID0gdXBwZXJfMzJfYml0cyhtYXBwaW5nKTsKKwkJaWYgKHVwcGVyICE9IHNreTItPnR4X2xhc3RfdXBwZXIpIHsKKwkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKKwkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIodXBwZXIpOworCQkJc2t5Mi0+dHhfbGFzdF91cHBlciA9IHVwcGVyOwogCQkJbGUtPm9wY29kZSA9IE9QX0FERFI2NCB8IEhXX09XTkVSOwogCQl9CiAKLQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7Ci0JCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIoKHUzMikgbWFwcGluZyk7CisJCXJlID0gc2t5Mi0+dHhfcmluZyArIHNsb3Q7CisJCXJlLT5mbGFncyA9IFRYX01BUF9QQUdFOworCQlwY2lfdW5tYXBfYWRkcl9zZXQocmUsIG1hcGFkZHIsIG1hcHBpbmcpOworCQlwY2lfdW5tYXBfbGVuX3NldChyZSwgbWFwbGVuLCBmcmFnLT5zaXplKTsKKworCQlsZSA9IGdldF90eF9sZShza3kyLCAmc2xvdCk7CisJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhtYXBwaW5nKSk7CiAJCWxlLT5sZW5ndGggPSBjcHVfdG9fbGUxNihmcmFnLT5zaXplKTsKIAkJbGUtPmN0cmwgPSBjdHJsOwogCQlsZS0+b3Bjb2RlID0gT1BfQlVGRkVSIHwgSFdfT1dORVI7Ci0KLQkJcmUgPSB0eF9sZV9yZShza3kyLCBsZSk7Ci0JCXJlLT5za2IgPSBza2I7Ci0JCXBjaV91bm1hcF9hZGRyX3NldChyZSwgbWFwYWRkciwgbWFwcGluZyk7Ci0JCXBjaV91bm1hcF9sZW5fc2V0KHJlLCBtYXBsZW4sIGZyYWctPnNpemUpOwogCX0KIAorCXJlLT5za2IgPSBza2I7CiAJbGUtPmN0cmwgfD0gRU9QOwogCisJc2t5Mi0+dHhfcHJvZCA9IHNsb3Q7CisKIAlpZiAodHhfYXZhaWwoc2t5MikgPD0gTUFYX1NLQl9UWF9MRSkKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC0xNzA5LDI3ICsxNzUxLDEyIEBACiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogbWFwcGluZ191bndpbmQ6Ci0JZm9yIChpID0gZmlyc3Rfc2xvdDsgaSAhPSBza3kyLT50eF9wcm9kOyBpID0gUklOR19ORVhUKGksIFRYX1JJTkdfU0laRSkpIHsKLQkJbGUgPSBza3kyLT50eF9sZSArIGk7CisJZm9yIChpID0gc2t5Mi0+dHhfcHJvZDsgaSAhPSBzbG90OyBpID0gUklOR19ORVhUKGksIHNreTItPnR4X3Jpbmdfc2l6ZSkpIHsKIAkJcmUgPSBza3kyLT50eF9yaW5nICsgaTsKIAotCQlzd2l0Y2gobGUtPm9wY29kZSAmIH5IV19PV05FUikgewotCQljYXNlIE9QX0xBUkdFU0VORDoKLQkJY2FzZSBPUF9QQUNLRVQ6Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGh3LT5wZGV2LAotCQkJCQkgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAotCQkJCQkgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfQlVGRkVSOgotCQkJcGNpX3VubWFwX3BhZ2UoaHctPnBkZXYsIHBjaV91bm1hcF9hZGRyKHJlLCBtYXBhZGRyKSwKLQkJCQkgICAgICAgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKLQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlicmVhazsKLQkJfQorCQlza3kyX3R4X3VubWFwKGh3LT5wZGV2LCByZSk7CiAJfQogCi0Jc2t5Mi0+dHhfcHJvZCA9IGZpcnN0X3Nsb3Q7CiBtYXBwaW5nX2Vycm9yOgogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCWRldl93YXJuKCZody0+cGRldi0+ZGV2LCAiJXM6IHR4IG1hcHBpbmcgZXJyb3JcbiIsIGRldi0+bmFtZSk7CkBAIC0xNzQwLDQwICsxNzY3LDI4IEBACiAvKgogICogRnJlZSByaW5nIGVsZW1lbnRzIGZyb20gc3RhcnRpbmcgYXQgdHhfY29ucyB1bnRpbCAiZG9uZSIKICAqCi0gKiBOQjogdGhlIGhhcmR3YXJlIHdpbGwgdGVsbCB1cyBhYm91dCBwYXJ0aWFsIGNvbXBsZXRpb24gb2YgbXVsdGktcGFydAorICogTkI6CisgKiAgMS4gVGhlIGhhcmR3YXJlIHdpbGwgdGVsbCB1cyBhYm91dCBwYXJ0aWFsIGNvbXBsZXRpb24gb2YgbXVsdGktcGFydAogICogICAgIGJ1ZmZlcnMgc28gbWFrZSBzdXJlIG5vdCB0byBmcmVlIHNrYiB0byBlYXJseS4KKyAqICAyLiBUaGlzIG1heSBydW4gaW4gcGFyYWxsZWwgc3RhcnRfeG1pdCBiZWNhdXNlIHRoZSBpdCBvbmx5CisgKiAgICAgbG9va3MgYXQgdGhlIHRhaWwgb2YgdGhlIHF1ZXVlIG9mIEZJRk8gKHR4X2NvbnMpLCBub3QKKyAqICAgICB0aGUgaGVhZCAodHhfcHJvZCkKICAqLwogc3RhdGljIHZvaWQgc2t5Ml90eF9jb21wbGV0ZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCB1MTYgZG9uZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2t5Mi0+bmV0ZGV2OwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2t5Mi0+aHctPnBkZXY7CiAJdW5zaWduZWQgaWR4OwogCi0JQlVHX09OKGRvbmUgPj0gVFhfUklOR19TSVpFKTsKKwlCVUdfT04oZG9uZSA+PSBza3kyLT50eF9yaW5nX3NpemUpOwogCiAJZm9yIChpZHggPSBza3kyLT50eF9jb25zOyBpZHggIT0gZG9uZTsKLQkgICAgIGlkeCA9IFJJTkdfTkVYVChpZHgsIFRYX1JJTkdfU0laRSkpIHsKLQkJc3RydWN0IHNreTJfdHhfbGUgKmxlID0gc2t5Mi0+dHhfbGUgKyBpZHg7CisJICAgICBpZHggPSBSSU5HX05FWFQoaWR4LCBza3kyLT50eF9yaW5nX3NpemUpKSB7CiAJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlID0gc2t5Mi0+dHhfcmluZyArIGlkeDsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJlLT5za2I7CiAKLQkJc3dpdGNoKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKLQkJY2FzZSBPUF9MQVJHRVNFTkQ6Ci0JCWNhc2UgT1BfUEFDS0VUOgotCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LAotCQkJCQkgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAotCQkJCQkgcGNpX3VubWFwX2xlbihyZSwgbWFwbGVuKSwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1BfQlVGRkVSOgotCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgcGNpX3VubWFwX2FkZHIocmUsIG1hcGFkZHIpLAotCQkJCSAgICAgICBwY2lfdW5tYXBfbGVuKHJlLCBtYXBsZW4pLAotCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCWJyZWFrOwotCQl9CisJCXNreTJfdHhfdW5tYXAoc2t5Mi0+aHctPnBkZXYsIHJlKTsKIAotCQlpZiAobGUtPmN0cmwgJiBFT1ApIHsKLQkJCXN0cnVjdCBza19idWZmICpza2IgPSByZS0+c2tiOwotCisJCWlmIChza2IpIHsKIAkJCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfZG9uZShza3kyKSkpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBkb25lICV1XG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGlkeCk7CkBAIC0xNzgxLDE0ICsxNzk2LDkgQEAKIAkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJnNreTItPnJ4X3JlY3ljbGUpIDwgc2t5Mi0+cnhfcGVuZGluZwotCQkJICAgICYmIHNrYl9yZWN5Y2xlX2NoZWNrKHNrYiwgc2t5Mi0+cnhfZGF0YV9zaXplCi0JCQkJCQkgKyBza3kyX3J4X3BhZChza3kyLT5odykpKQotCQkJCV9fc2tiX3F1ZXVlX2hlYWQoJnNreTItPnJ4X3JlY3ljbGUsIHNrYik7Ci0JCQllbHNlCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQkJCXNreTItPnR4X25leHQgPSBSSU5HX05FWFQoaWR4LCBUWF9SSU5HX1NJWkUpOworCQkJc2t5Mi0+dHhfbmV4dCA9IFJJTkdfTkVYVChpZHgsIHNreTItPnR4X3Jpbmdfc2l6ZSk7CiAJCX0KIAl9CiAKQEAgLTE3OTksMTQgKzE4MDksMjYgQEAKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi0vKiBDbGVhbnVwIGFsbCB1bnRyYW5zbWl0dGVkIGJ1ZmZlcnMsIGFzc3VtZSB0cmFuc21pdHRlciBub3QgcnVubmluZyAqLwotc3RhdGljIHZvaWQgc2t5Ml90eF9jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2t5Ml90eF9yZXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCiB7Ci0Jc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJLyogRGlzYWJsZSBGb3JjZSBTeW5jIGJpdCBhbmQgRW5hYmxlIEFsbG9jIGJpdCAqLworCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgVFhBX0NUUkwpLAorCQkgICAgVFhBX0RJU19GU1lOQyB8IFRYQV9ESVNfQUxMT0MgfCBUWEFfU1RPUF9SQyk7CiAKLQluZXRpZl90eF9sb2NrX2JoKGRldik7Ci0Jc2t5Ml90eF9jb21wbGV0ZShza3kyLCBza3kyLT50eF9wcm9kKTsKLQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwkvKiBTdG9wIEludGVydmFsIFRpbWVyIGFuZCBMaW1pdCBDb3VudGVyIG9mIFR4IEFyYml0ZXIgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWEFfSVRJX0lOSSksIDBMKTsKKwlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWEFfTElNX0lOSSksIDBMKTsKKworCS8qIFJlc2V0IHRoZSBQQ0kgRklGTyBvZiB0aGUgYXN5bmMgVHggcXVldWUgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHFhZGRyW3BvcnRdLCBRX0NTUiksCisJCSAgICAgQk1VX1JTVF9TRVQgfCBCTVVfRklGT19SU1QpOworCisJLyogUmVzZXQgdGhlIFR4IHByZWZldGNoIHVuaXRzICovCisJc2t5Ml93cml0ZTMyKGh3LCBZMl9RQUREUih0eHFhZGRyW3BvcnRdLCBQUkVGX1VOSVRfQ1RSTCksCisJCSAgICAgUFJFRl9VTklUX1JTVF9TRVQpOworCisJc2t5Ml93cml0ZTMyKGh3LCBSQl9BRERSKHR4cWFkZHJbcG9ydF0sIFJCX0NUUkwpLCBSQl9SU1RfU0VUKTsKKwlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7CiB9CiAKIC8qIE5ldHdvcmsgc2h1dGRvd24gKi8KQEAgLTE4MjUsMTAgKzE4NDcsNiBAQAogCWlmIChuZXRpZl9tc2dfaWZkb3duKHNreTIpKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGRpc2FibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CiAKLQkvKiBleHBsaWNpdGx5IHNodXQgb2ZmIHR4IGluY2FzZSB3ZSdyZSByZXN0YXJ0aW5nICovCi0Jc2t5Mi0+cmVzdGFydGluZyA9IDE7Ci0JbmV0aWZfdHhfZGlzYWJsZShkZXYpOwotCiAJLyogRm9yY2UgZmxvdyBjb250cm9sIG9mZiAqLwogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09GRik7CiAKQEAgLTE4NTAsMjYgKzE4NjgsNyBAQAogCSAgICAgICYmIHBvcnQgPT0gMCAmJiBody0+ZGV2WzFdICYmIG5ldGlmX3J1bm5pbmcoaHctPmRldlsxXSkpKQogCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19SU1RfU0VUKTsKIAotCS8qIERpc2FibGUgRm9yY2UgU3luYyBiaXQgYW5kIEVuYWJsZSBBbGxvYyBiaXQgKi8KLQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYQV9DVFJMKSwKLQkJICAgIFRYQV9ESVNfRlNZTkMgfCBUWEFfRElTX0FMTE9DIHwgVFhBX1NUT1BfUkMpOwotCi0JLyogU3RvcCBJbnRlcnZhbCBUaW1lciBhbmQgTGltaXQgQ291bnRlciBvZiBUeCBBcmJpdGVyICovCi0Jc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhBX0lUSV9JTkkpLCAwTCk7Ci0Jc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhBX0xJTV9JTkkpLCAwTCk7Ci0KLQkvKiBSZXNldCB0aGUgUENJIEZJRk8gb2YgdGhlIGFzeW5jIFR4IHF1ZXVlICovCi0Jc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIodHhxYWRkcltwb3J0XSwgUV9DU1IpLAotCQkgICAgIEJNVV9SU1RfU0VUIHwgQk1VX0ZJRk9fUlNUKTsKLQotCS8qIFJlc2V0IHRoZSBUeCBwcmVmZXRjaCB1bml0cyAqLwotCXNreTJfd3JpdGUzMihodywgWTJfUUFERFIodHhxYWRkcltwb3J0XSwgUFJFRl9VTklUX0NUUkwpLAotCQkgICAgIFBSRUZfVU5JVF9SU1RfU0VUKTsKLQotCXNreTJfd3JpdGUzMihodywgUkJfQUREUih0eHFhZGRyW3BvcnRdLCBSQl9DVFJMKSwgUkJfUlNUX1NFVCk7Ci0KIAlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9DVFJMX1QpLCBHTUZfUlNUX1NFVCk7Ci0Jc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX1JTVF9TRVQpOwogCiAJLyogRm9yY2UgYW55IGRlbGF5ZWQgc3RhdHVzIGludGVycnJ1cHQgYW5kIE5BUEkgKi8KIAlza3kyX3dyaXRlMzIoaHcsIFNUQVRfTEVWX1RJTUVSX0NOVCwgMCk7CkBAIC0xODg4LDI4ICsxODg3LDE4IEBACiAJc3luY2hyb25pemVfaXJxKGh3LT5wZGV2LT5pcnEpOwogCW5hcGlfc3luY2hyb25pemUoJmh3LT5uYXBpKTsKIAorCXNwaW5fbG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwogCXNreTJfcGh5X3Bvd2VyX2Rvd24oaHcsIHBvcnQpOworCXNwaW5fdW5sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CiAKLQkvKiB0dXJuIG9mZiBMRUQncyAqLwotCXNreTJfd3JpdGUxNihodywgQjBfWTJMRUQsIExFRF9TVEFUX09GRik7CisJc2t5Ml90eF9yZXNldChodywgcG9ydCk7CiAKLQlza3kyX3R4X2NsZWFuKGRldik7CisJLyogRnJlZSBhbnkgcGVuZGluZyBmcmFtZXMgc3R1Y2sgaW4gSFcgcXVldWUgKi8KKwlza3kyX3R4X2NvbXBsZXRlKHNreTIsIHNreTItPnR4X3Byb2QpOworCiAJc2t5Ml9yeF9jbGVhbihza3kyKTsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHctPnBkZXYsIFJYX0xFX0JZVEVTLAotCQkJICAgIHNreTItPnJ4X2xlLCBza3kyLT5yeF9sZV9tYXApOwotCWtmcmVlKHNreTItPnJ4X3JpbmcpOwotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChody0+cGRldiwKLQkJCSAgICBUWF9SSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IHNreTJfdHhfbGUpLAotCQkJICAgIHNreTItPnR4X2xlLCBza3kyLT50eF9sZV9tYXApOwotCWtmcmVlKHNreTItPnR4X3JpbmcpOwotCi0Jc2t5Mi0+dHhfbGUgPSBOVUxMOwotCXNreTItPnJ4X2xlID0gTlVMTDsKLQotCXNreTItPnJ4X3JpbmcgPSBOVUxMOwotCXNreTItPnR4X3JpbmcgPSBOVUxMOworCXNreTJfZnJlZV9idWZmZXJzKHNreTIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDgzLDcgKzIwNzIsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXggMHgleFxuIiwKIAkJICAgICAgIHNreTItPm5ldGRldi0+bmFtZSwgaXN0YXR1cywgcGh5c3RhdCk7CiAKLQlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJiAoaXN0YXR1cyAmIFBIWV9NX0lTX0FOX0NPTVBMKSkgeworCWlmIChpc3RhdHVzICYgUEhZX01fSVNfQU5fQ09NUEwpIHsKIAkJaWYgKHNreTJfYXV0b25lZ19kb25lKHNreTIsIHBoeXN0YXQpID09IDApCiAJCQlza3kyX2xpbmtfdXAoc2t5Mik7CiAJCWdvdG8gb3V0OwpAQCAtMjM3MCwxMSArMjM1OSw4IEBACiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobGlrZWx5KG5ldGlmX3J1bm5pbmcoZGV2KSAmJiAhc2t5Mi0+cmVzdGFydGluZykpIHsKLQkJbmV0aWZfdHhfbG9jayhkZXYpOworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCXNreTJfdHhfY29tcGxldGUoc2t5MiwgbGFzdCk7Ci0JCW5ldGlmX3R4X3VubG9jayhkZXYpOwotCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNreTJfc2tiX3J4KGNvbnN0IHN0cnVjdCBza3kyX3BvcnQgKnNreTIsCkBAIC0yNDUyLDcgKzI0MzgsNyBAQAogCiAJCQkvKiBUaGlzIGNoaXAgcmVwb3J0cyBjaGVja3N1bSBzdGF0dXMgZGlmZmVyZW50bHkgKi8KIAkJCWlmIChody0+ZmxhZ3MgJiBTS1kyX0hXX05FV19MRSkgewotCQkJCWlmIChza3kyLT5yeF9jc3VtICYmCisJCQkJaWYgKChza3kyLT5mbGFncyAmIFNLWTJfRkxBR19SWF9DSEVDS1NVTSkgJiYKIAkJCQkgICAgKGxlLT5jc3MgJiAoQ1NTX0lTSVBWNCB8IENTU19JU0lQVjYpKSAmJgogCQkJCSAgICAobGUtPmNzcyAmIENTU19UQ1BVRFBDU09LKSkKIAkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTI0NzksNyArMjQ2NSw3IEBACiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KICNlbmRpZgogCQljYXNlIE9QX1JYQ0hLUzoKLQkJCWlmICghc2t5Mi0+cnhfY3N1bSkKKwkJCWlmICghKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKSkKIAkJCQlicmVhazsKIAogCQkJLyogSWYgdGhpcyBoYXBwZW5zIHRoZW4gZHJpdmVyIGFzc3VtaW5nIHdyb25nIGZvcm1hdCAqLwpAQCAtMjUwNCw3ICsyNDkwLDggQEAKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogaGFyZHdhcmUgcmVjZWl2ZSAiCiAJCQkJICAgICAgICJjaGVja3N1bSBwcm9ibGVtIChzdGF0dXMgPSAlI3gpXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQkJc2t5Mi0+cnhfY3N1bSA9IDA7CisJCQkJc2t5Mi0+ZmxhZ3MgJj0gflNLWTJfRkxBR19SWF9DSEVDS1NVTTsKKwogCQkJCXNreTJfd3JpdGUzMihza3kyLT5odywKIAkJCQkJICAgICBRX0FERFIocnhxYWRkcltwb3J0XSwgUV9DU1IpLAogCQkJCQkgICAgIEJNVV9ESVNfUlhfQ0hLU1VNKTsKQEAgLTI1MTMsNyArMjUwMCw2IEBACiAKIAkJY2FzZSBPUF9UWElOREVYTEU6CiAJCQkvKiBUWCBpbmRleCByZXBvcnRzIHN0YXR1cyBmb3IgYm90aCBwb3J0cyAqLwotCQkJQlVJTERfQlVHX09OKFRYX1JJTkdfU0laRSA+IDB4MTAwMCk7CiAJCQlza3kyX3R4X2RvbmUoaHctPmRldlswXSwgc3RhdHVzICYgMHhmZmYpOwogCQkJaWYgKGh3LT5kZXZbMV0pCiAJCQkJc2t5Ml90eF9kb25lKGh3LT5kZXZbMV0sCkBAIC0yNjU3LDE5ICsyNjQzLDE1IEBACiB9CiAKIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBpdCBpcyBhIGJ1Zy4gKi8KLXN0YXRpYyB2b2lkIHNreTJfbGVfZXJyb3Ioc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0LAotCQkJICB1MTYgcSwgdW5zaWduZWQgcmluZ19zaXplKQorc3RhdGljIHZvaWQgc2t5Ml9sZV9lcnJvcihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQsIHUxNiBxKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOwotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGlkeDsKLQljb25zdCB1NjQgKmxlID0gKHEgPT0gUV9SMSB8fCBxID09IFFfUjIpCi0JCT8gKHU2NCAqKSBza3kyLT5yeF9sZSA6ICh1NjQgKikgc2t5Mi0+dHhfbGU7CisJdTE2IGlkeCA9IHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfR0VUX0lEWCkpOwogCi0JaWR4ID0gc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9HRVRfSURYKSk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGRlc2NyaXB0b3IgZXJyb3IgcT0lI3ggZ2V0PSV1IFslbGx4XSBwdXQ9JXVcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgKHVuc2lnbmVkKSBxLCBpZHgsICh1bnNpZ25lZCBsb25nIGxvbmcpIGxlW2lkeF0sCi0JICAgICAgICh1bnNpZ25lZCkgc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHEsIFBSRUZfVU5JVF9QVVRfSURYKSkpOworCWRldl9lcnIoJmh3LT5wZGV2LT5kZXYsIFBGWAorCQkiJXM6IGRlc2NyaXB0b3IgZXJyb3IgcT0lI3ggZ2V0PSV1IHB1dD0ldVxuIiwKKwkJZGV2LT5uYW1lLCAodW5zaWduZWQpIHEsICh1bnNpZ25lZCkgaWR4LAorCQkodW5zaWduZWQpIHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfUFVUX0lEWCkpKTsKIAogCXNreTJfd3JpdGUzMihodywgUV9BRERSKHEsIFFfQ1NSKSwgQk1VX0NMUl9JUlFfQ0hLKTsKIH0KQEAgLTI3NTUsMTYgKzI3MzcsMTYgQEAKIAkJc2t5Ml9tYWNfaW50cihodywgMSk7CiAKIAlpZiAoc3RhdHVzICYgWTJfSVNfQ0hLX1JYMSkKLQkJc2t5Ml9sZV9lcnJvcihodywgMCwgUV9SMSwgUlhfTEVfU0laRSk7CisJCXNreTJfbGVfZXJyb3IoaHcsIDAsIFFfUjEpOwogCiAJaWYgKHN0YXR1cyAmIFkyX0lTX0NIS19SWDIpCi0JCXNreTJfbGVfZXJyb3IoaHcsIDEsIFFfUjIsIFJYX0xFX1NJWkUpOworCQlza3kyX2xlX2Vycm9yKGh3LCAxLCBRX1IyKTsKIAogCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMSkKLQkJc2t5Ml9sZV9lcnJvcihodywgMCwgUV9YQTEsIFRYX1JJTkdfU0laRSk7CisJCXNreTJfbGVfZXJyb3IoaHcsIDAsIFFfWEExKTsKIAogCWlmIChzdGF0dXMgJiBZMl9JU19DSEtfVFhBMikKLQkJc2t5Ml9sZV9lcnJvcihodywgMSwgUV9YQTIsIFRYX1JJTkdfU0laRSk7CisJCXNreTJfbGVfZXJyb3IoaHcsIDEsIFFfWEEyKTsKIH0KIAogc3RhdGljIGludCBza3kyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgd29ya19saW1pdCkKQEAgLTMwMDksOCArMjk5MSw2IEBACiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RJX0NUUkwsIFRJTV9TVE9QKTsKIAlza3kyX3dyaXRlOChodywgQjJfVElfQ1RSTCwgVElNX0NMUl9JUlEpOwogCi0Jc2t5Ml93cml0ZTgoaHcsIEIwX1kyTEVELCBMRURfU1RBVF9PTik7Ci0KIAkvKiBUdXJuIG9mZiBkZXNjcmlwdG9yIHBvbGxpbmcgKi8KIAlza3kyX3dyaXRlMzIoaHcsIEIyOF9EUFRfQ1RSTCwgRFBUX1NUT1ApOwogCkBAIC0zMDc4LDE4ICszMDU4LDQ2IEBACiAJc2t5Ml93cml0ZTgoaHcsIFNUQVRfSVNSX1RJTUVSX0NUUkwsIFRJTV9TVEFSVCk7CiB9CiAKKy8qIFRha2UgZGV2aWNlIGRvd24gKG9mZmxpbmUpLgorICogRXF1aXZhbGVudCB0byBkb2luZyBkZXZfc3RvcCgpIGJ1dCB0aGlzIGRvZXMgbm90CisgKiBpbmZvcm0gdXBwZXIgbGF5ZXJzIG9mIHRoZSB0cmFuc2lzdGlvbi4KKyAqLworc3RhdGljIHZvaWQgc2t5Ml9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsJLyogc3RvcCB0eHEgKi8KKwkJc2t5Ml9kb3duKGRldik7CisJfQorfQorCisvKiBCcmluZyBkZXZpY2UgYmFjayBhZnRlciBkb2luZyBza3kyX2RldGFjaCAqLworc3RhdGljIGludCBza3kyX3JlYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IHNreTJfdXAoZGV2KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBjb3VsZCBub3QgcmVzdGFydCAlZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlkZXZfY2xvc2UoZGV2KTsKKwkJfSBlbHNlIHsKKwkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJCXNreTJfc2V0X211bHRpY2FzdChkZXYpOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHZvaWQgc2t5Ml9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNreTJfaHcsIHJlc3RhcnRfd29yayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlpbnQgaSwgZXJyOworCWludCBpOwogCiAJcnRubF9sb2NrKCk7Ci0JZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7Ci0JCWRldiA9IGh3LT5kZXZbaV07Ci0JCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCQlza3kyX2Rvd24oZGV2KTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKQorCQlza3kyX2RldGFjaChody0+ZGV2W2ldKTsKIAogCW5hcGlfZGlzYWJsZSgmaHctPm5hcGkpOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CkBAIC0zMDk3LDE3ICszMTA1LDggQEAKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOwogCW5hcGlfZW5hYmxlKCZody0+bmFwaSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKLQkJZGV2ID0gaHctPmRldltpXTsKLQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJZXJyID0gc2t5Ml91cChkZXYpOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogY291bGQgbm90IHJlc3RhcnQgJWRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCQlkZXZfY2xvc2UoZGV2KTsKLQkJCX0KLQkJfQotCX0KKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspCisJCXNreTJfcmVhdHRhY2goaHctPmRldltpXSk7CiAKIAlydG5sX3VubG9jaygpOwogfQpAQCAtMzE4Niw3ICszMTg1LDggQEAKIAl9CiAKIAllY21kLT5hZHZlcnRpc2luZyA9IHNreTItPmFkdmVydGlzaW5nOwotCWVjbWQtPmF1dG9uZWcgPSBza3kyLT5hdXRvbmVnOworCWVjbWQtPmF1dG9uZWcgPSAoc2t5Mi0+ZmxhZ3MgJiBTS1kyX0ZMQUdfQVVUT19TUEVFRCkKKwkJPyBBVVRPTkVHX0VOQUJMRSA6IEFVVE9ORUdfRElTQUJMRTsKIAllY21kLT5kdXBsZXggPSBza3kyLT5kdXBsZXg7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTk4LDYgKzMxOTgsNyBAQAogCXUzMiBzdXBwb3J0ZWQgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7CiAKIAlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlza3kyLT5mbGFncyB8PSBTS1kyX0ZMQUdfQVVUT19TUEVFRDsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBzdXBwb3J0ZWQ7CiAJCXNreTItPmR1cGxleCA9IC0xOwogCQlza3kyLT5zcGVlZCA9IC0xOwpAQCAtMzIzOSw5ICszMjQwLDkgQEAKIAogCQlza3kyLT5zcGVlZCA9IGVjbWQtPnNwZWVkOwogCQlza3kyLT5kdXBsZXggPSBlY21kLT5kdXBsZXg7CisJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfQVVUT19TUEVFRDsKIAl9CiAKLQlza3kyLT5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKIAlza3kyLT5hZHZlcnRpc2luZyA9IGVjbWQtPmFkdmVydGlzaW5nOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewpAQCAtMzMxMSwxNCArMzMxMiwxNyBAQAogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIHNreTItPnJ4X2NzdW07CisJcmV0dXJuICEhKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKTsKIH0KIAogc3RhdGljIGludCBza3kyX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jc2t5Mi0+cnhfY3N1bSA9IGRhdGE7CisJaWYgKGRhdGEpCisJCXNreTItPmZsYWdzIHw9IFNLWTJfRkxBR19SWF9DSEVDS1NVTTsKKwllbHNlCisJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07CiAKIAlza3kyX3dyaXRlMzIoc2t5Mi0+aHcsIFFfQUREUihyeHFhZGRyW3NreTItPnBvcnRdLCBRX0NTUiksCiAJCSAgICAgZGF0YSA/IEJNVV9FTkFfUlhfQ0hLU1VNIDogQk1VX0RJU19SWF9DSEtTVU0pOwpAQCAtMzMzNiw3ICszMzQwLDcgQEAKIHsKIAlzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghbmV0aWZfcnVubmluZyhkZXYpIHx8IHNreTItPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwgIShza3kyLT5mbGFncyAmIFNLWTJfRkxBR19BVVRPX1NQRUVEKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlza3kyX3BoeV9yZWluaXQoc2t5Mik7CkBAIC0zNTc2LDcgKzM1ODAsOCBAQAogCQllY21kLT50eF9wYXVzZSA9IGVjbWQtPnJ4X3BhdXNlID0gMTsKIAl9CiAKLQllY21kLT5hdXRvbmVnID0gc2t5Mi0+YXV0b25lZzsKKwllY21kLT5hdXRvbmVnID0gKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX0FVVE9fUEFVU0UpCisJCT8gQVVUT05FR19FTkFCTEUgOiBBVVRPTkVHX0RJU0FCTEU7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMzU4NCw3ICszNTg5LDExIEBACiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlza3kyLT5hdXRvbmVnID0gZWNtZC0+YXV0b25lZzsKKwlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKKwkJc2t5Mi0+ZmxhZ3MgfD0gU0tZMl9GTEFHX0FVVE9fUEFVU0U7CisJZWxzZQorCQlza3kyLT5mbGFncyAmPSB+U0tZMl9GTEFHX0FVVE9fUEFVU0U7CisKIAlza3kyLT5mbG93X21vZGUgPSBza3kyX2Zsb3coZWNtZC0+cnhfcGF1c2UsIGVjbWQtPnR4X3BhdXNlKTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCkBAIC0zNjQwLDcgKzM2NDksNyBAQAogCSAgICBlY21kLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEgPiB0bWF4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChlY21kLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA+PSBUWF9SSU5HX1NJWkUtMSkKKwlpZiAoZWNtZC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPj0gc2t5Mi0+dHhfcmluZ19zaXplLTEpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlY21kLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA+IFJYX01BWF9QRU5ESU5HKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2ODQsNyArMzY5Myw3IEBACiAJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gUlhfTUFYX1BFTkRJTkc7CiAJZXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOwogCWVyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7Ci0JZXJpbmctPnR4X21heF9wZW5kaW5nID0gVFhfUklOR19TSVpFIC0gMTsKKwllcmluZy0+dHhfbWF4X3BlbmRpbmcgPSBUWF9NQVhfUEVORElORzsKIAogCWVyaW5nLT5yeF9wZW5kaW5nID0gc2t5Mi0+cnhfcGVuZGluZzsKIAllcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKQEAgLTM2OTYsMjcgKzM3MDUsMjAgQEAKIAkJCSAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7CiAKIAlpZiAoZXJpbmctPnJ4X3BlbmRpbmcgPiBSWF9NQVhfUEVORElORyB8fAogCSAgICBlcmluZy0+cnhfcGVuZGluZyA8IDggfHwKLQkgICAgZXJpbmctPnR4X3BlbmRpbmcgPCBNQVhfU0tCX1RYX0xFIHx8Ci0JICAgIGVyaW5nLT50eF9wZW5kaW5nID4gVFhfUklOR19TSVpFIC0gMSkKKwkgICAgZXJpbmctPnR4X3BlbmRpbmcgPCBUWF9NSU5fUEVORElORyB8fAorCSAgICBlcmluZy0+dHhfcGVuZGluZyA+IFRYX01BWF9QRU5ESU5HKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCXNreTJfZG93bihkZXYpOworCXNreTJfZGV0YWNoKGRldik7CiAKIAlza3kyLT5yeF9wZW5kaW5nID0gZXJpbmctPnJ4X3BlbmRpbmc7CiAJc2t5Mi0+dHhfcGVuZGluZyA9IGVyaW5nLT50eF9wZW5kaW5nOworCXNreTItPnR4X3Jpbmdfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhza3kyLT50eF9wZW5kaW5nKzEpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQllcnIgPSBza3kyX3VwKGRldik7Ci0JCWlmIChlcnIpCi0JCQlkZXZfY2xvc2UoZGV2KTsKLQl9Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBza3kyX3JlYXR0YWNoKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQwODQsOCArNDA4Niw4IEBACiAKIAkvKiBEdW1wIGNvbnRlbnRzIG9mIHR4IHJpbmcgKi8KIAlzb3AgPSAxOwotCWZvciAoaWR4ID0gc2t5Mi0+dHhfbmV4dDsgaWR4ICE9IHNreTItPnR4X3Byb2QgJiYgaWR4IDwgVFhfUklOR19TSVpFOwotCSAgICAgaWR4ID0gUklOR19ORVhUKGlkeCwgVFhfUklOR19TSVpFKSkgeworCWZvciAoaWR4ID0gc2t5Mi0+dHhfbmV4dDsgaWR4ICE9IHNreTItPnR4X3Byb2QgJiYgaWR4IDwgc2t5Mi0+dHhfcmluZ19zaXplOworCSAgICAgaWR4ID0gUklOR19ORVhUKGlkeCwgc2t5Mi0+dHhfcmluZ19zaXplKSkgewogCQljb25zdCBzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBza3kyLT50eF9sZSArIGlkeDsKIAkJdTMyIGEgPSBsZTMyX3RvX2NwdShsZS0+YWRkcik7CiAKQEAgLTQxMjgsNyArNDEzMCw3IEBACiAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuUnggcmluZyBodyBnZXQ9JWQgcHV0PSVkIGxhc3Q9JWRcbiIsCiAJCSAgIHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihyeHFhZGRyW3BvcnRdLCBQUkVGX1VOSVRfR0VUX0lEWCkpLAotCQkgICBsYXN0ID0gc2t5Ml9yZWFkMTYoaHcsIFkyX1FBRERSKHJ4cWFkZHJbcG9ydF0sIFBSRUZfVU5JVF9QVVRfSURYKSksCisJCSAgIHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihyeHFhZGRyW3BvcnRdLCBQUkVGX1VOSVRfUFVUX0lEWCkpLAogCQkgICBza3kyX3JlYWQxNihodywgWTJfUUFERFIocnhxYWRkcltwb3J0XSwgUFJFRl9VTklUX0xBU1RfSURYKSkpOwogCiAJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwpAQCAtNDI4MiwxOSArNDI4NCwyMiBAQAogCXNreTItPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2cpOwogCiAJLyogQXV0byBzcGVlZCBhbmQgZmxvdyBjb250cm9sICovCi0Jc2t5Mi0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCXNreTItPmZsYWdzID0gU0tZMl9GTEFHX0FVVE9fU1BFRUQgfCBTS1kyX0ZMQUdfQVVUT19QQVVTRTsKKwlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9YTCkKKwkJc2t5Mi0+ZmxhZ3MgfD0gU0tZMl9GTEFHX1JYX0NIRUNLU1VNOworCiAJc2t5Mi0+Zmxvd19tb2RlID0gRkNfQk9USDsKIAogCXNreTItPmR1cGxleCA9IC0xOwogCXNreTItPnNwZWVkID0gLTE7CiAJc2t5Mi0+YWR2ZXJ0aXNpbmcgPSBza3kyX3N1cHBvcnRlZF9tb2Rlcyhodyk7Ci0Jc2t5Mi0+cnhfY3N1bSA9IChody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX1hMKTsKIAlza3kyLT53b2wgPSB3b2w7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2t5Mi0+cGh5X2xvY2spOworCiAJc2t5Mi0+dHhfcGVuZGluZyA9IFRYX0RFRl9QRU5ESU5HOworCXNreTItPnR4X3Jpbmdfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byhUWF9ERUZfUEVORElORysxKTsKIAlza3kyLT5yeF9wZW5kaW5nID0gUlhfREVGX1BFTkRJTkc7Ci0Jc2t5Mi0+cmVzdGFydGluZyA9IDA7CiAKIAlody0+ZGV2W3BvcnRdID0gZGV2OwogCkBAIC00NjAyLDcgKzQ2MDcsNiBAQAogCiAJc2t5Ml9wb3dlcl9hdXgoaHcpOwogCi0Jc2t5Ml93cml0ZTE2KGh3LCBCMF9ZMkxFRCwgTEVEX1NUQVRfT0ZGKTsKIAlza3kyX3dyaXRlOChodywgQjBfQ1RTVCwgQ1NfUlNUX1NFVCk7CiAJc2t5Ml9yZWFkOChodywgQjBfQ1RTVCk7CiAKQEAgLTQ2MzQsMTMgKzQ2MzgsMTIgQEAKIAlkZWxfdGltZXJfc3luYygmaHctPndhdGNoZG9nX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZody0+cmVzdGFydF93b3JrKTsKIAorCXJ0bmxfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltpXTsKIAkJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQkJc2t5Ml9kb3duKGRldik7CisJCXNreTJfZGV0YWNoKGRldik7CiAKIAkJaWYgKHNreTItPndvbCkKIAkJCXNreTJfd29sX2luaXQoc2t5Mik7CkBAIC00NjUxLDYgKzQ2NTQsNyBAQAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CiAJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CiAJc2t5Ml9wb3dlcl9hdXgoaHcpOworCXJ0bmxfdW5sb2NrKCk7CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIHdvbCk7CkBAIC00Njg3LDI1ICs0NjkxLDE4IEBACiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBZMl9JU19CQVNFKTsKIAluYXBpX2VuYWJsZSgmaHctPm5hcGkpOwogCisJcnRubF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwotCi0JCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJZXJyID0gc2t5Ml91cChkZXYpOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjb3VsZCBub3QgdXA6ICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQkJcnRubF9sb2NrKCk7Ci0JCQkJZGV2X2Nsb3NlKGRldik7Ci0JCQkJcnRubF91bmxvY2soKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQorCQllcnIgPSBza3kyX3JlYXR0YWNoKGh3LT5kZXZbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CiAJfQorCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIG91dDoKKwlydG5sX3VubG9jaygpOworCiAJZGV2X2VycigmcGRldi0+ZGV2LCAicmVzdW1lIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gZXJyOwpAQCAtNDcyMCw2ICs0NzE3LDcgQEAKIAlpZiAoIWh3KQogCQlyZXR1cm47CiAKKwlydG5sX2xvY2soKTsKIAlkZWxfdGltZXJfc3luYygmaHctPndhdGNoZG9nX3RpbWVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewpAQCAtNDczNCw2ICs0NzMyLDcgQEAKIAogCWlmICh3b2wpCiAJCXNreTJfcG93ZXJfYXV4KGh3KTsKKwlydG5sX3VubG9jaygpOwogCiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgd29sKTsKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgd29sKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaAppbmRleCA0NDg2YjA2Li5lMGYyM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmgKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5oCkBAIC0xNTUsNyArMTU1LDcgQEAKIGVudW0gY3NyX3JlZ3MgewogCUIwX1JBUAkJPSAweDAwMDAsCiAJQjBfQ1RTVAkJPSAweDAwMDQsCi0JQjBfWTJMRUQJPSAweDAwMDUsCisKIAlCMF9QT1dFUl9DVFJMCT0gMHgwMDA3LAogCUIwX0lTUkMJCT0gMHgwMDA4LAogCUIwX0lNU0sJCT0gMHgwMDBjLApAQCAtMjYwLDcgKzI2MCw3IEBACiAJWTJfQ0ZHX0FFUiAgICAgID0gMHgxZDAwLAkvKiBQQ0kgQWR2YW5jZWQgRXJyb3IgUmVwb3J0IHJlZ2lvbiAqLwogfTsKIAotLyoJQjBfQ1RTVAkJCTE2IGJpdAlDb250cm9sL1N0YXR1cyByZWdpc3RlciAqLworLyoJQjBfQ1RTVAkJCTI0IGJpdAlDb250cm9sL1N0YXR1cyByZWdpc3RlciAqLwogZW51bSB7CiAJWTJfVk1BSU5fQVZBSUwJPSAxPDwxNywvKiBWTUFJTiBhdmFpbGFibGUgKFlVS09OLTIgb25seSkgKi8KIAlZMl9WQVVYX0FWQUlMCT0gMTw8MTYsLyogVkFVWCBhdmFpbGFibGUgKFlVS09OLTIgb25seSkgKi8KQEAgLTI4MywxMyArMjgzLDYgQEAKIAlDU19SU1RfU0VUCT0gMSwJLyogU2V0ICAgU29mdHdhcmUgcmVzZXQJKi8KIH07CiAKLS8qCUIwX0xFRAkJCSA4IEJpdAlMRUQgcmVnaXN0ZXIgKi8KLWVudW0gewotLyogQml0ICA3Li4gMjoJcmVzZXJ2ZWQgKi8KLQlMRURfU1RBVF9PTgk9IDE8PDEsCS8qIFN0YXR1cyBMRUQgb24JKi8KLQlMRURfU1RBVF9PRkYJPSAxLAkvKiBTdGF0dXMgTEVEIG9mZgkqLwotfTsKLQogLyoJQjBfUE9XRVJfQ1RSTAkgOCBCaXQJUG93ZXIgQ29udHJvbCByZWcgKFlVS09OIG9ubHkpICovCiBlbnVtIHsKIAlQQ19WQVVYX0VOQQk9IDE8PDcsCS8qIFN3aXRjaCBWQVVYIEVuYWJsZSAgKi8KQEAgLTE1ODMsNyArMTU3Niw2IEBACiB9OwogCiAjZGVmaW5lIEdNX0dQQ1JfU1BFRURfMTAwMAkoR01fR1BDUl9HSUdTX0VOQSB8IEdNX0dQQ1JfU1BFRURfMTAwKQotI2RlZmluZSBHTV9HUENSX0FVX0FMTF9ESVMJKEdNX0dQQ1JfQVVfRFVQX0RJUyB8IEdNX0dQQ1JfQVVfRkNUX0RJU3xHTV9HUENSX0FVX1NQRF9ESVMpCiAKIC8qCUdNX1RYX0NUUkwJCQkxNiBiaXQgci93CVRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KIGVudW0gewpAQCAtMTk4NSw2ICsxOTc3LDkgQEAKIAogc3RydWN0IHR4X3JpbmdfaW5mbyB7CiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2RlZmluZSBUWF9NQVBfU0lOR0xFICAgMHgwMDAxCisjZGVmaW5lIFRYX01BUF9QQUdFICAgICAwMDAwMDIKIAlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcGFkZHIpOwogCURFQ0xBUkVfUENJX1VOTUFQX0xFTihtYXBsZW4pOwogfTsKQEAgLTIwMTIsMTIgKzIwMDcsMTQgQEAKIAogCXN0cnVjdCB0eF9yaW5nX2luZm8gICp0eF9yaW5nOwogCXN0cnVjdCBza3kyX3R4X2xlICAgICp0eF9sZTsKKwl1MTYJCSAgICAgdHhfcmluZ19zaXplOwogCXUxNgkJICAgICB0eF9jb25zOwkJLyogbmV4dCBsZSB0byBjaGVjayAqLwogCXUxNgkJICAgICB0eF9wcm9kOwkJLyogbmV4dCBsZSB0byB1c2UgKi8KIAl1MTYJCSAgICAgdHhfbmV4dDsJCS8qIGRlYnVnIG9ubHkgKi8KIAogCXUxNgkJICAgICB0eF9wZW5kaW5nOwogCXUxNgkJICAgICB0eF9sYXN0X21zczsKKwl1MzIJCSAgICAgdHhfbGFzdF91cHBlcjsKIAl1MzIJCSAgICAgdHhfdGNwc3VtOwogCiAJc3RydWN0IHJ4X3JpbmdfaW5mbyAgKnJ4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKQEAgLTIwMjgsNyArMjAyNSw2IEBACiAJdTE2CQkgICAgIHJ4X3BlbmRpbmc7CiAJdTE2CQkgICAgIHJ4X2RhdGFfc2l6ZTsKIAl1MTYJCSAgICAgcnhfbmZyYWdzOwotCXN0cnVjdCBza19idWZmX2hlYWQgIHJ4X3JlY3ljbGU7CiAKICNpZmRlZiBTS1kyX1ZMQU5fVEFHX1VTRUQKIAl1MTYJCSAgICAgcnhfdGFnOwpAQCAtMjA0MiwxNiArMjAzOCwxOCBAQAogCQl1OAlmaWZvX2xldjsKIAl9IGNoZWNrOwogCi0KIAlkbWFfYWRkcl90CSAgICAgcnhfbGVfbWFwOwogCWRtYV9hZGRyX3QJICAgICB0eF9sZV9tYXA7CisKIAl1MTYJCSAgICAgYWR2ZXJ0aXNpbmc7CS8qIEFEVkVSVElTRURfIGJpdHMgKi8KLQl1MTYJCSAgICAgc3BlZWQ7CS8qIFNQRUVEXzEwMDAsIFNQRUVEXzEwMCwgLi4uICovCi0JdTgJCSAgICAgYXV0b25lZzsJLyogQVVUT05FR19FTkFCTEUsIEFVVE9ORUdfRElTQUJMRSAqLwotCXU4CQkgICAgIGR1cGxleDsJLyogRFVQTEVYX0hBTEYsIERVUExFWF9GVUxMICovCi0JdTgJCSAgICAgcnhfY3N1bTsKLQl1OAkJICAgICB3b2w7Ci0JdTgJCSAgICAgcmVzdGFydGluZzsKKwl1MTYJCSAgICAgc3BlZWQ7CQkvKiBTUEVFRF8xMDAwLCBTUEVFRF8xMDAsIC4uLiAqLworCXU4CQkgICAgIHdvbDsJCS8qIFdBS0VfIGJpdHMgKi8KKwl1OAkJICAgICBkdXBsZXg7CQkvKiBEVVBMRVhfSEFMRiwgRFVQTEVYX0ZVTEwgKi8KKwl1MTYJCSAgICAgZmxhZ3M7CisjZGVmaW5lIFNLWTJfRkxBR19SWF9DSEVDS1NVTQkJMHgwMDAxCisjZGVmaW5lIFNLWTJfRkxBR19BVVRPX1NQRUVECQkweDAwMDIKKyNkZWZpbmUgU0tZMl9GTEFHX0FVVE9fUEFVU0UJCTB4MDAwNAorCiAgCWVudW0gZmxvd19jb250cm9sICAgIGZsb3dfbW9kZTsKICAJZW51bSBmbG93X2NvbnRyb2wgICAgZmxvd19zdGF0dXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NsaXAuYyBiL2RyaXZlcnMvbmV0L3NsaXAuYwppbmRleCA1YzYxZDVmLi4yNmY2ZWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvc2xpcC5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAogCiAvKiBFbmNhcHN1bGF0ZSBhbiBJUCBkYXRhZ3JhbSBhbmQga2ljayBpdCBpbnRvIGEgVFRZIHF1ZXVlLiAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBzbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNsaXAgKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQ4NCwxMiArNDg0LDEyIEBACiAJCXNwaW5fdW5sb2NrKCZzbC0+bG9jayk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB4bWl0IGNhbGwgd2hlbiBpZmFjZSBpcyBkb3duXG4iLCBkZXYtPm5hbWUpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoc2wtPnR0eSA9PSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrKCZzbC0+bG9jayk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJc2xfbG9jayhzbCk7CkBAIC00OTgsNyArNDk4LDcgQEAKIAlzcGluX3VubG9jaygmc2wtPmxvY2spOwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IGJjNDk3NmEuLjJhNmI2ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTU1Myw3ICs1NTMsNyBAQAogCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKICNpZmRlZiBTTUNfVVNFX0RNQQpAQCAtNTY2LDcgKzU2Niw3IEBACiAJCQlscC0+cGVuZGluZ190eF9za2IgPSBza2I7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9IGVsc2UgewogCQkJREJHKFNNQ19ERUJVR19UWCB8IFNNQ19ERUJVR19ETUEsICIlczogQWN0aXZhdGluZyBUeCBETUFcbiIsIGRldi0+bmFtZSk7CiAJCQlscC0+dHhkbWFfYWN0aXZlID0gMTsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCXNtYzkxMXhfaGFyZHdhcmVfc2VuZF9wa3QoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaAppbmRleCA4MTQwZjdjLi4wNWFkYjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCkBAIC0yMzYsNyArMjM2LDYgQEAKICAqIFVzZSBhIERNQSBmb3IgUlggYW5kIFRYIHBhY2tldHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKIHN0YXRpYyBkbWFfYWRkcl90IHJ4X2RtYWJ1ZiwgdHhfZG1hYnVmOwogc3RhdGljIGludCByeF9kbWFsZW4sIHR4X2RtYWxlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxOTQuYyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwppbmRleCBlMDI0NzFiLi45MzRhMTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTE5NC5jCkBAIC0yOTksNyArMjk5LDggQEAKICAuIHRvIHN0b3JlIHRoZSBwYWNrZXQsIEkgY2FsbCB0aGlzIHJvdXRpbmUsIHdoaWNoIGVpdGhlciBzZW5kcyBpdAogIC4gbm93LCBvciBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IHdoZW4gdGhlIGNhcmQgaXMgcmVhZHkgZm9yIHRoZQogIC4gcGFja2V0ICovCi1zdGF0aWMgaW50ICBzbWNfd2FpdF90b19zZW5kX3BhY2tldCggc3RydWN0IHNrX2J1ZmYgKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCAgc21jX3dhaXRfdG9fc2VuZF9wYWNrZXQoIHN0cnVjdCBza19idWZmICogc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKTsKIAogLyogdGhpcyBkb2VzIGEgc29mdCByZXNldCBvbiB0aGUgZGV2aWNlICovCiBzdGF0aWMgdm9pZCBzbWNfcmVzZXQoIGludCBpb2FkZHIgKTsKQEAgLTQ4Nyw3ICs0ODgsOCBAQAogIC4gbyAJKE5PKTogRW5hYmxlIGludGVycnVwdHMgYW5kIGxldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZGVhbCB3aXRoIGl0LgogIC4gbwkoWUVTKTpTZW5kIGl0IG5vdy4KICovCi1zdGF0aWMgaW50IHNtY193YWl0X3RvX3NlbmRfcGFja2V0KCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYgKQorc3RhdGljIG5ldGRldl90eF90IHNtY193YWl0X3RvX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpb2FkZHIgCT0gZGV2LT5iYXNlX2FkZHI7CkBAIC01MTIsNyArNTE0LDcgQEAKIAlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkgewogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KQEAgLTUzNCw3ICs1MzYsNyBAQAogCQlscC0+c2F2ZWRfc2tiID0gTlVMTDsKIAkJLyogdGhpcyBJUyBhbiBlcnJvciwgYnV0LCBpIGRvbid0IHdhbnQgdGhlIHNrYiBzYXZlZCAqLwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAkvKiBlaXRoZXIgd2F5LCBhIHBhY2tldCBpcyB3YWl0aW5nIG5vdyAqLwogCWxwLT5wYWNrZXRzX3dhaXRpbmcrKzsKQEAgLTU3MSwxMiArNTczLDEyIEBACiAJCVNNQ19FTkFCTEVfSU5UKCBJTV9BTExPQ19JTlQgKTsKICAgICAgIAkJUFJJTlRLMigoQ0FSRE5BTUUiOiBtZW1vcnkgYWxsb2NhdGlvbiBkZWZlcnJlZC4gXG4iKSk7CiAJCS8qIGl0J3MgZGVmZXJyZWQsIGJ1dCBJJ2xsIGhhbmRsZSBpdCBsYXRlciAqLwotICAgICAgCQlyZXR1cm4gMDsKKyAgICAgIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKICAgIAl9CiAJLyogb3IgWUVTISBJIGNhbiBzZW5kIHRoZSBwYWNrZXQgbm93Li4gKi8KIAlzbWNfaGFyZHdhcmVfc2VuZF9wYWNrZXQoZGV2KTsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggNzU2N2Y1MS4uNjFiZTZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTY1OSw3ICs2NTksNyBAQAogCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzbWNfc3BlY2lhbF9sb2NrKCZscC0+bG9jaywgZmxhZ3MpOwpAQCAtNjk2LDcgKzY5Niw3IEBACiAJCXNtY19oYXJkd2FyZV9zZW5kX3BrdCgodW5zaWduZWQgbG9uZylkZXYpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwppbmRleCA5NGI2ZDI2Li5jY2RkMTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbXNjOTExeC5jCisrKyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FiLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICJzbXNjOTExeC5oIgogCiAjZGVmaW5lIFNNU0NfQ0hJUE5BTUUJCSJzbXNjOTExeCIKQEAgLTEwNDYsNyArMTA0Nyw2IEBACiAJCS8qIFVwZGF0ZSBjb3VudGVycyAqLwogCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSAocGt0bGVuZ3RoIC0gNCk7Ci0JCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJfQogCiAJLyogUmV0dXJuIHRvdGFsIHJlY2VpdmVkIHBhY2tldHMgKi8KQEAgLTIxMTQsMTAgKzIxMTQsMTIgQEAKIC8qIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGUgZGV2aWNlcyByZW1haW5zIHBvd2VyZWQgb24gaXRzIFZERFZBUklPCiAgKiBwaW5zIGR1cmluZyBzdXNwZW5kLiAqLwogCi1zdGF0aWMgaW50IHNtc2M5MTF4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorLyogVE9ETzogaW1wbGVtZW50IGZyZWV6ZS90aGF3IGNhbGxiYWNrcyBmb3IgaGliZXJuYXRpb24uKi8KKworc3RhdGljIGludCBzbXNjOTExeF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJLyogZW5hYmxlIHdha2Ugb24gTEFOLCBlbmVyZ3kgZGV0ZWN0aW9uIGFuZCB0aGUgZXh0ZXJuYWwgUE1FCiAJICogc2lnbmFsLiAqLwpAQCAtMjEyOCwxMCArMjEzMCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtc2M5MTF4X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBzbXNjOTExeF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdW5zaWduZWQgaW50IHRvID0gMTAwOwogCiAJLyogTm90ZSAzLjExIGZyb20gdGhlIGRhdGFzaGVldDoKQEAgLTIxNDksMTkgKzIxNTEsMjUgQEAKIAlyZXR1cm4gKHRvID09IDApID8gLUVJTyA6IDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzbXNjOTExeF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzbXNjOTExeF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc21zYzkxMXhfcmVzdW1lLAorfTsKKworI2RlZmluZSBTTVNDOTExWF9QTV9PUFMgKCZzbXNjOTExeF9wbV9vcHMpCisKICNlbHNlCi0jZGVmaW5lIHNtc2M5MTF4X3N1c3BlbmQJTlVMTAotI2RlZmluZSBzbXNjOTExeF9yZXN1bWUJCU5VTEwKKyNkZWZpbmUgU01TQzkxMVhfUE1fT1BTIE5VTEwKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbXNjOTExeF9kcml2ZXIgPSB7CiAJLnByb2JlID0gc21zYzkxMXhfZHJ2X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbXNjOTExeF9kcnZfcmVtb3ZlKSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9IFNNU0NfQ0hJUE5BTUUsCisJCS5uYW1lCT0gU01TQ19DSElQTkFNRSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9IFNNU0M5MTFYX1BNX09QUywKIAl9LAotCS5zdXNwZW5kID0gc21zYzkxMXhfc3VzcGVuZCwKLQkucmVzdW1lID0gc21zYzkxMXhfcmVzdW1lLAogfTsKIAogLyogRW50cnkgcG9pbnQgZm9yIGxvYWRpbmcgdGhlIG1vZHVsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYyBiL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKaW5kZXggNjBhYmRiMS4uYjQ5MDlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzk0MjAuYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCkBAIC04MTcsNyArODE3LDYgQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCiAJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCiBzdGF0aWMgaW50IHNtc2M5NDIwX2FsbG9jX3J4X2J1ZmZlcihzdHJ1Y3Qgc21zYzk0MjBfcGRhdGEgKnBkLCBpbnQgaW5kZXgpCkBAIC05NjgsNyArOTY3LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc21zYzk0MjBfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc21zYzk0MjBfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbXNjOTQyMF9wZGF0YSAqcGQgPSBuZXRkZXZfcHJpdihkZXYpOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NvbmljLmMgYi9kcml2ZXJzL25ldC9zb25pYy5jCmluZGV4IDc1M2ExZmIuLjk1OTljZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvc29uaWMuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAJbGVuZ3RoID0gc2tiLT5sZW47CiAJaWYgKGxlbmd0aCA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWxlbmd0aCA9IEVUSF9aTEVOOwogCX0KIApAQCAtMjY1LDcgKzI2NSw3IEBACiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCA2NjkyNTNjLi5hMzZlMmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogc3RhdGljIHZvaWQJY2hlY2tfZHVwbGV4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQJdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkCWluaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQJc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiBzdGF0aWMgdm9pZAluZXRkZXZfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGludHJfc3RhdHVzKTsKIHN0YXRpYyBpbnQJX19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpxdW90YSk7CkBAIC0xMjIzLDcgKzEyMjMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBlbnRyeTsKQEAgLTEzMTEsNyArMTMxMSw3IEBACiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jIGIvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jCmluZGV4IDdiYjI3NDIuLjJmMWVhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuYworKysgYi9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmMKQEAgLTEwMTUsNyArMTAxNSw3IEBACiAJaWYoc2tiLT5sZW4gPiBYTUlUX0JVRkZfU0laRSkKIAl7CiAJCXByaW50aygiJXM6IFNvcnJ5LCBtYXguIGZyYW1lbGVuZ3RoIGlzICVkIGJ5dGVzLiBUaGUgbGVuZ3RoIG9mIHlvdXIgZnJhbWUgaXMgJWQgYnl0ZXMuXG4iLGRldi0+bmFtZSxYTUlUX0JVRkZfU0laRSxza2ItPmxlbik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTExMTAsNyArMTExMCw3IEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKICNlbmRpZgogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuM2xhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYwppbmRleCA1MzRkZmUzLi4wY2E0MjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCkBAIC02NDgsNyArNjQ4LDcgQEAKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBMQU5DRSBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCA1MDE3ZDdmLi41MzZjZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC05ODQsNyArOTg0LDcgQEAKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiaWdtYWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwppbmRleCBkMTUyMWMzLi5lMTM2ODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKQEAgLTQxNSw3ICs0MTUsNyBAQAogc3RhdGljIHZvaWQgbmV0ZGV2X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCB0eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHJlc2V0X3R4IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbnRyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyB2b2lkIHJ4X3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKTsKQEAgLTEwNTMsNyArMTA1Myw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHN0YXJ0X3R4IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTA5MSw3ICsxMDkxLDcgQEAKIAkJCSIlczogVHJhbnNtaXQgZnJhbWUgIyVkIHF1ZXVlZCBpbiBzbG90ICVkLlxuIiwKIAkJCWRldi0+bmFtZSwgbnAtPmN1cl90eCwgZW50cnkpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBSZXNldCBoYXJkd2FyZSB0eCBhbmQgZnJlZSBhbGwgb2YgdHggYnVmZmVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCBkMmRmZTBhLi4zMDVlYzNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMTAxNSw3ICsxMDE1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW1fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGdlbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBnZW0gKmdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZW50cnk7CkBAIC0yODUxLDkgKzI4NTIsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyYyA9IC1FUEVSTTsKLQkJZWxzZSBpZiAoIWdwLT5ydW5uaW5nKQorCQlpZiAoIWdwLT5ydW5uaW5nKQogCQkJcmMgPSAtRUFHQUlOOwogCQllbHNlIHsKIAkJCV9fcGh5X3dyaXRlKGdwLCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggNGVmNzI5MTkuLjM3ZDcyMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmhtZS5jCkBAIC0yMjUyLDcgKzIyNTIsOCBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBoYXBweV9tZWFsX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBoYXBweV9tZWFsX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhhcHB5X21lYWwgKmhwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAJaW50IGVudHJ5OwpAQCAtMjMzOCw3ICsyMzM5LDcgQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCXR4X2FkZF9sb2coaHAsIFRYTE9HX0FDVElPTl9UWE1JVCwgMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpoYXBweV9tZWFsX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VubGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKaW5kZXggYWZjN2IzNS4uOWQ2ZmQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VubGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCkBAIC0xMTYzLDcgKzExNjMsNyBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIHRha2VuIGZyb20gdGhlIGRlcGNhIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VucWUuYyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKaW5kZXggYzZlYzYxZS4uZGNlZmI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VucWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5xZS5jCkBAIC02MjEsNyArNjIxLDcgQEAKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHFlX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCBkNzM3ZjZiLi5kMTI5OGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC0yMyw5ICsyMyw5IEBACiAgKi8KIAogI2lmZGVmIFRDMzU4MTVfTkFQSQotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zNy1OQVBJIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zOC1OQVBJIgogI2Vsc2UKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMzciCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjM4IgogI2VuZGlmCiBzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9ICJ0YzM1ODE1LmM6diIgRFJWX1ZFUlNJT04gIlxuIjsKICNkZWZpbmUgTU9ETkFNRQkJCSJ0YzM1ODE1IgpAQCAtMzQxLDggKzM0MSw5IEBACiAJVHhfRW5FeENvbGwgfCBUeF9FbkxDYXJyIHwgVHhfRW5FeERlZmVyIHwgVHhfRW5VbmRlciB8IFwKIAlUeF9FbikJLyogbWF5YmUgIDB4N2IwMSAqLwogI2VuZGlmCisvKiBEbyBub3QgdXNlIFJ4X1N0cmlwQ1JDIC0tIGl0IGNhdXNlcyB0cm91YmxlIG9uIEJMRXgvRkRBRXggY29uZGl0aW9uICovCiAjZGVmaW5lIFJYX0NUTF9DTUQJKFJ4X0VuR29vZCB8IFJ4X0VuUnhQYXIgfCBSeF9FbkxvbmdFcnIgfCBSeF9Fbk92ZXIgXAotCXwgUnhfRW5DUkNFcnIgfCBSeF9FbkFsaWduIHwgUnhfU3RyaXBDUkMgfCBSeF9SeEVuKSAvKiBtYXliZSAweDZmMTEgKi8KKwl8IFJ4X0VuQ1JDRXJyIHwgUnhfRW5BbGlnbiB8IFJ4X1J4RW4pIC8qIG1heWJlIDB4NmYwMSAqLwogI2RlZmluZSBJTlRfRU5fQ01EICAoSW50X05SQWJ0RW4gfCBcCiAJSW50X0RtUGFyRXJyRW4gfCBJbnRfRFBhckRFbiB8IEludF9EUGFyRXJyRW4gfCBcCiAJSW50X1NTeXNFcnJFbiAgfCBJbnRfUk1hc0FidEVuIHwgSW50X1JUYXJnQWJ0RW4gfCBcCkBAIC01OTMsOSArNTk0LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJ1cy0+cHJpdjsKIAlzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKnRyID0KIAkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgSFo7CiAKIAl0Y193cml0ZWwoTURfQ0FfQnVzeSB8IChtaWlfaWQgPDwgNSkgfCAocmVnbnVtICYgMHgxZiksICZ0ci0+TURfQ0EpOworCXVkZWxheSgxMik7IC8qIGl0IHRha2VzIDMyIHggNDAwbnMgYXQgbGVhc3QgKi8KIAl3aGlsZSAodGNfcmVhZGwoJnRyLT5NRF9DQSkgJiBNRF9DQV9CdXN5KSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQogCQkJcmV0dXJuIC1FSU87CkBAIC02MDksMTEgKzYxMSwxMiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBidXMtPnByaXY7CiAJc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9CiAJCShzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgMTA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaOwogCiAJdGNfd3JpdGVsKHZhbCwgJnRyLT5NRF9EYXRhKTsKIAl0Y193cml0ZWwoTURfQ0FfQnVzeSB8IE1EX0NBX1dyIHwgKG1paV9pZCA8PCA1KSB8IChyZWdudW0gJiAweDFmKSwKIAkJICAmdHItPk1EX0NBKTsKKwl1ZGVsYXkoMTIpOyAvKiBpdCB0YWtlcyAzMiB4IDQwMG5zIGF0IGxlYXN0ICovCiAJd2hpbGUgKHRjX3JlYWRsKCZ0ci0+TURfQ0EpICYgTURfQ0FfQnVzeSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKIAkJCXJldHVybiAtRUlPOwpAQCAtMTUwOSw3ICsxNTEyLDcgQEAKIAkgKi8KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogI2RlZmluZSBGQVRBTF9FUlJPUl9JTlQgXApAQCAtMTU0MCw4ICsxNTQzLDYgQEAKICNlbmRpZgogewogCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9Ci0JCShzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKIAlpbnQgcmV0ID0gLTE7CiAKIAkvKiBGYXRhbCBlcnJvcnMuLi4gKi8KQEAgLTE1NTEsMjcgKzE1NTIsMjYgQEAKIAl9CiAJLyogcmVjb3ZlcmFibGUgZXJyb3JzICovCiAJaWYgKHN0YXR1cyAmIEludF9JbnRGREFFeCkgewotCQkvKiBkaXNhYmxlIEZEQUV4IGludC4gKHVudGlsIHdlIG1ha2Ugcm9vbXMuLi4pICovCi0JCXRjX3dyaXRlbCh0Y19yZWFkbCgmdHItPkludF9FbikgJiB+SW50X0ZEQUV4RW4sICZ0ci0+SW50X0VuKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBGcmVlIERlc2NyaXB0b3IgQXJlYSBFeGhhdXN0ZWQgKCUjeCkuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCisJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJICJGcmVlIERlc2NyaXB0b3IgQXJlYSBFeGhhdXN0ZWQgKCUjeCkuXG4iLAorCQkJCSBzdGF0dXMpOwogCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0ID0gMDsKIAl9CiAJaWYgKHN0YXR1cyAmIEludF9JbnRCTEV4KSB7Ci0JCS8qIGRpc2FibGUgQkxFeCBpbnQuICh1bnRpbCB3ZSBtYWtlIHJvb21zLi4uKSAqLwotCQl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5JbnRfRW4pICYgfkludF9CTEV4RW4sICZ0ci0+SW50X0VuKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBCdWZmZXIgTGlzdCBFeGhhdXN0ZWQgKCUjeCkuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCisJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJICJCdWZmZXIgTGlzdCBFeGhhdXN0ZWQgKCUjeCkuXG4iLAorCQkJCSBzdGF0dXMpOwogCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJcmV0ID0gMDsKIAl9CiAJaWYgKHN0YXR1cyAmIEludF9JbnRFeEJEKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICIlczogRXhjZXNzaXZlIEJ1ZmZlciBEZXNjcmlwdGlvcnMgKCUjeCkuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCisJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJICJFeGNlc3NpdmUgQnVmZmVyIERlc2NyaXB0aW9ycyAoJSN4KS5cbiIsCisJCQkJIHN0YXR1cyk7CiAJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlyZXQgPSAwOwogCX0KQEAgLTE2MzAsOCArMTYzMCwxMiBAQAogCiAJc3Bpbl9sb2NrKCZscC0+bG9jayk7CiAJc3RhdHVzID0gdGNfcmVhZGwoJnRyLT5JbnRfU3JjKTsKLQl0Y193cml0ZWwoc3RhdHVzLCAmdHItPkludF9TcmMpOwkvKiB3cml0ZSB0byBjbGVhciAqLworCS8qIEJMRXgsIEZEQUV4IHdpbGwgYmUgY2xlYXJlZCBsYXRlciAqLworCXRjX3dyaXRlbChzdGF0dXMgJiB+KEludF9CTEV4IHwgSW50X0ZEQUV4KSwKKwkJICAmdHItPkludF9TcmMpOwkvKiB3cml0ZSB0byBjbGVhciAqLwogCWhhbmRsZWQgPSB0YzM1ODE1X2RvX2ludGVycnVwdChkZXYsIHN0YXR1cyk7CisJaWYgKHN0YXR1cyAmIChJbnRfQkxFeCB8IEludF9GREFFeCkpCisJCXRjX3dyaXRlbChzdGF0dXMgJiAoSW50X0JMRXggfCBJbnRfRkRBRXgpLCAmdHItPkludF9TcmMpOwogCSh2b2lkKXRjX3JlYWRsKCZ0ci0+SW50X1NyYyk7CS8qIGZsdXNoICovCiAJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkID49IDApOwpAQCAtMTY1OSw4ICsxNjYzLDYgQEAKIAlzdHJ1Y3QgdGMzNTgxNV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBmZGN0bDsKIAlpbnQgaTsKLQlpbnQgYnVmX2ZyZWVfY291bnQgPSAwOwotCWludCBmZF9mcmVlX2NvdW50ID0gMDsKICNpZmRlZiBUQzM1ODE1X05BUEkKIAlpbnQgcmVjZWl2ZWQgPSAwOwogI2VuZGlmCkBAIC0xNzY5LDggKzE3NzEsOSBAQAogCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCQl9IGVsc2UgewogCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUnggZXJyb3IgKHN0YXR1cyAleClcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMgJiBSeF9TdGF0X01hc2spOworCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIobHApKQorCQkJCWRldl9pbmZvKCZkZXYtPmRldiwgIlJ4IGVycm9yIChzdGF0dXMgJXgpXG4iLAorCQkJCQkgc3RhdHVzICYgUnhfU3RhdF9NYXNrKTsKIAkJCS8qIFdPUktBUk9VTkQ6IExvbmdFcnIgYW5kIENSQ0VyciBtZWFucyBPdmVyZmxvdy4gKi8KIAkJCWlmICgoc3RhdHVzICYgUnhfTG9uZ0VycikgJiYgKHN0YXR1cyAmIFJ4X0NSQ0VycikpIHsKIAkJCQlzdGF0dXMgJj0gfihSeF9Mb25nRXJyfFJ4X0NSQ0Vycik7CkBAIC0xODQ4LDcgKzE4NTEsNiBAQAogI2Vsc2UKIAkJCQlscC0+ZmJsX2NvdW50Kys7CiAjZW5kaWYKLQkJCQlidWZfZnJlZV9jb3VudCsrOwogCQkJfQogCQl9CiAKQEAgLTE4NzAsNyArMTg3Miw2IEBACiAjZW5kaWYKIAkJCWxwLT5yZmRfY3VyLT5mZC5GREN0bCA9IGNwdV90b19sZTMyKEZEX0Nvd25zRkQpOwogCQkJbHAtPnJmZF9jdXIrKzsKLQkJCWZkX2ZyZWVfY291bnQrKzsKIAkJfQogCQlpZiAobHAtPnJmZF9jdXIgPiBscC0+cmZkX2xpbWl0KQogCQkJbHAtPnJmZF9jdXIgPSBscC0+cmZkX2Jhc2U7CkBAIC0xODgxLDE3ICsxODgyLDYgQEAKICNlbmRpZgogCX0KIAotCS8qIHJlLWVuYWJsZSBCTC9GREEgRXhoYXVzdCBpbnRlcnJ1cHRzLiAqLwotCWlmIChmZF9mcmVlX2NvdW50KSB7Ci0JCXN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqdHIgPQotCQkJKHN0cnVjdCB0YzM1ODE1X3JlZ3MgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOwotCQl1MzIgZW4sIGVuX29sZCA9IHRjX3JlYWRsKCZ0ci0+SW50X0VuKTsKLQkJZW4gPSBlbl9vbGQgfCBJbnRfRkRBRXhFbjsKLQkJaWYgKGJ1Zl9mcmVlX2NvdW50KQotCQkJZW4gfD0gSW50X0JMRXhFbjsKLQkJaWYgKGVuICE9IGVuX29sZCkKLQkJCXRjX3dyaXRlbChlbiwgJnRyLT5JbnRfRW4pOwotCX0KICNpZmRlZiBUQzM1ODE1X05BUEkKIAlyZXR1cm4gcmVjZWl2ZWQ7CiAjZW5kaWYKQEAgLTE5MTAsOSArMTkwMCwxNCBAQAogCXNwaW5fbG9jaygmbHAtPmxvY2spOwogCXN0YXR1cyA9IHRjX3JlYWRsKCZ0ci0+SW50X1NyYyk7CiAJZG8gewotCQl0Y193cml0ZWwoc3RhdHVzLCAmdHItPkludF9TcmMpOwkvKiB3cml0ZSB0byBjbGVhciAqLworCQkvKiBCTEV4LCBGREFFeCB3aWxsIGJlIGNsZWFyZWQgbGF0ZXIgKi8KKwkJdGNfd3JpdGVsKHN0YXR1cyAmIH4oSW50X0JMRXggfCBJbnRfRkRBRXgpLAorCQkJICAmdHItPkludF9TcmMpOwkvKiB3cml0ZSB0byBjbGVhciAqLwogCiAJCWhhbmRsZWQgPSB0YzM1ODE1X2RvX2ludGVycnVwdChkZXYsIHN0YXR1cywgYnVkZ2V0IC0gcmVjZWl2ZWQpOworCQlpZiAoc3RhdHVzICYgKEludF9CTEV4IHwgSW50X0ZEQUV4KSkKKwkJCXRjX3dyaXRlbChzdGF0dXMgJiAoSW50X0JMRXggfCBJbnRfRkRBRXgpLAorCQkJCSAgJnRyLT5JbnRfU3JjKTsKIAkJaWYgKGhhbmRsZWQgPj0gMCkgewogCQkJcmVjZWl2ZWQgKz0gaGFuZGxlZDsKIAkJCWlmIChyZWNlaXZlZCA+PSBidWRnZXQpCkBAIC0yMTQ0LDcgKzIxMzksNyBAQAogCQkoc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJLyogVXBkYXRlIHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIGRldmljZSByZWdpc3RlcnMuICovCi0JCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IHRjX3JlYWRsKCZ0ci0+TWlzc19DbnQpOworCQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gdGNfcmVhZGwoJnRyLT5NaXNzX0NudCk7CiAKIAlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CkBAIC0yMzk5LDggKzIzOTQsNiBAQAogCQl0Y193cml0ZWwoRE1BX0JVUlNUX1NJWkUsICZ0ci0+RE1BX0N0bCk7CiAjaWZkZWYgVEMzNTgxNV9VU0VfUEFDS0VEQlVGRkVSCiAJdGNfd3JpdGVsKFJ4RnJhZ19FblBhY2sgfCBFVEhfWkxFTiwgJnRyLT5SeEZyYWdTaXplKTsJLyogUGFja2luZyAqLwotI2Vsc2UKLQl0Y193cml0ZWwoRVRIX1pMRU4sICZ0ci0+UnhGcmFnU2l6ZSk7CiAjZW5kaWYKIAl0Y193cml0ZWwoMCwgJnRyLT5UeFBvbGxDdHIpOwkvKiBCYXRjaCBtb2RlICovCiAJdGNfd3JpdGVsKFRYX1RIUkVTSE9MRCwgJnRyLT5UeFRocnNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKaW5kZXggM2MyNjc5Yy4uZWM5ZGZiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmMKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKQEAgLTE2MjIsNyArMTYyMiw4IEBACiAgKiAgIHRoZSBkcml2ZXIuIE5vdGU6IHRoZSBkcml2ZXIgbXVzdCBOT1QgcHV0IHRoZSBza2IgaW4gaXRzIERNQSByaW5nLgogICogbyBORVRERVZfVFhfTE9DS0VEIExvY2tpbmcgZmFpbGVkLCBwbGVhc2UgcmV0cnkgcXVpY2tseS4KICAqLwotc3RhdGljIGludCBiZHhfdHhfdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYmR4X3R4X3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IGJkeF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHR4ZF9maWZvICpmID0gJnByaXYtPnR4ZF9maWZvMDsKQEAgLTI0MjcsNyArMjQyOCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGJkeF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewotCXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYmR4X2V0aHRvb2xfb3BzID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmR4X2V0aHRvb2xfb3BzID0gewogCQkuZ2V0X3NldHRpbmdzID0gYmR4X2dldF9zZXR0aW5ncywKIAkJLmdldF9kcnZpbmZvID0gYmR4X2dldF9kcnZpbmZvLAogCQkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmMgYi9kcml2ZXJzL25ldC90ZzMuYwppbmRleCA0NmEzZjg2Li5mMDliYzVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuYworKysgYi9kcml2ZXJzL25ldC90ZzMuYwpAQCAtNjgsOCArNjgsOCBAQAogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMy45OSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJBcHJpbCAyMCwgMjAwOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjEwMiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJTZXB0ZW1iZXIgMSwgMjAwOSIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC05Miw3ICs5Miw3IEBACiAvKiBoYXJkd2FyZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGZvciBhIHNpbmdsZSBmcmFtZSdzIGRhdGEgcGF5bG9hZCAqLwogI2RlZmluZSBURzNfTUlOX01UVQkJCTYwCiAjZGVmaW5lIFRHM19NQVhfTVRVKHRwKQlcCi0JKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0pVTUJPX0NBUEFCTEUpID8gOTAwMCA6IDE1MDApCisJKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgPyA5MDAwIDogMTUwMCkKIAogLyogVGhlc2UgbnVtYmVycyBzZWVtIHRvIGJlIGhhcmQgY29kZWQgaW4gdGhlIE5JQyBmaXJtd2FyZSBzb21laG93LgogICogWW91IGNhbid0IGNoYW5nZSB0aGUgcmluZyBzaXplcywgYnV0IHlvdSBjYW4gY2hhbmdlIHdoZXJlIHlvdSBwbGFjZQpAQCAtMTAyLDYgKzEwMiw3IEBACiAjZGVmaW5lIFRHM19ERUZfUlhfUklOR19QRU5ESU5HCQkyMDAKICNkZWZpbmUgVEczX1JYX0pVTUJPX1JJTkdfU0laRQkJMjU2CiAjZGVmaW5lIFRHM19ERUZfUlhfSlVNQk9fUklOR19QRU5ESU5HCTEwMAorI2RlZmluZSBURzNfUlNTX0lORElSX1RCTF9TSVpFIDEyOAogCiAvKiBEbyBub3QgcGxhY2UgdGhpcyBuLXJpbmcgZW50cmllcyB2YWx1ZSBpbnRvIHRoZSB0cCBzdHJ1Y3QgaXRzZWxmLAogICogd2UgcmVhbGx5IHdhbnQgdG8gZXhwb3NlIHRoZXNlIGNvbnN0YW50cyB0byBHQ0Mgc28gdGhhdCBtb2R1bG8gZXQKQEAgLTExMCwyNiArMTExLDM0IEBACiAgKiByZXBsYWNlIHRoaW5ncyBsaWtlICclIGZvbycgd2l0aCAnJiAoZm9vIC0gMSknLgogICovCiAjZGVmaW5lIFRHM19SWF9SQ0JfUklOR19TSVpFKHRwKQlcCi0JKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgPyAgNTEyIDogMTAyNCkKKwkoKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgJiYgXAorCSAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKSA/IDEwMjQgOiA1MTIpCiAKICNkZWZpbmUgVEczX1RYX1JJTkdfU0laRQkJNTEyCiAjZGVmaW5lIFRHM19ERUZfVFhfUklOR19QRU5ESU5HCQkoVEczX1RYX1JJTkdfU0laRSAtIDEpCiAKICNkZWZpbmUgVEczX1JYX1JJTkdfQllURVMJKHNpemVvZihzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjKSAqIFwKIAkJCQkgVEczX1JYX1JJTkdfU0laRSkKLSNkZWZpbmUgVEczX1JYX0pVTUJPX1JJTkdfQllURVMJKHNpemVvZihzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjKSAqIFwKLQkJCSAgICAgICAgIFRHM19SWF9KVU1CT19SSU5HX1NJWkUpCisjZGVmaW5lIFRHM19SWF9KVU1CT19SSU5HX0JZVEVTCShzaXplb2Yoc3RydWN0IHRnM19leHRfcnhfYnVmZmVyX2Rlc2MpICogXAorCQkJCSBURzNfUlhfSlVNQk9fUklOR19TSVpFKQogI2RlZmluZSBURzNfUlhfUkNCX1JJTkdfQllURVModHApIChzaXplb2Yoc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYykgKiBcCi0JCQkgICAgICAgICAgIFRHM19SWF9SQ0JfUklOR19TSVpFKHRwKSkKKwkJCQkgVEczX1JYX1JDQl9SSU5HX1NJWkUodHApKQogI2RlZmluZSBURzNfVFhfUklOR19CWVRFUwkoc2l6ZW9mKHN0cnVjdCB0ZzNfdHhfYnVmZmVyX2Rlc2MpICogXAogCQkJCSBURzNfVFhfUklOR19TSVpFKQogI2RlZmluZSBORVhUX1RYKE4pCQkoKChOKSArIDEpICYgKFRHM19UWF9SSU5HX1NJWkUgLSAxKSkKIAotI2RlZmluZSBSWF9QS1RfQlVGX1NaCQkoMTUzNiArIHRwLT5yeF9vZmZzZXQgKyA2NCkKLSNkZWZpbmUgUlhfSlVNQk9fUEtUX0JVRl9TWgkoOTA0NiArIHRwLT5yeF9vZmZzZXQgKyA2NCkKKyNkZWZpbmUgVEczX0RNQV9CWVRFX0VOQUIJCTY0CisKKyNkZWZpbmUgVEczX1JYX1NURF9ETUFfU1oJCTE1MzYKKyNkZWZpbmUgVEczX1JYX0pNQl9ETUFfU1oJCTkwNDYKKworI2RlZmluZSBURzNfUlhfRE1BX1RPX01BUF9TWih4KQkJKCh4KSArIFRHM19ETUFfQllURV9FTkFCKQorCisjZGVmaW5lIFRHM19SWF9TVERfTUFQX1NaCQlURzNfUlhfRE1BX1RPX01BUF9TWihURzNfUlhfU1REX0RNQV9TWikKKyNkZWZpbmUgVEczX1JYX0pNQl9NQVBfU1oJCVRHM19SWF9ETUFfVE9fTUFQX1NaKFRHM19SWF9KTUJfRE1BX1NaKQogCiAvKiBtaW5pbXVtIG51bWJlciBvZiBmcmVlIFRYIGRlc2NyaXB0b3JzIHJlcXVpcmVkIHRvIHdha2UgdXAgVFggcHJvY2VzcyAqLwotI2RlZmluZSBURzNfVFhfV0FLRVVQX1RIUkVTSCh0cCkJCSgodHApLT50eF9wZW5kaW5nIC8gNCkKKyNkZWZpbmUgVEczX1RYX1dBS0VVUF9USFJFU0godG5hcGkpCQkoKHRuYXBpKS0+dHhfcGVuZGluZyAvIDQpCiAKICNkZWZpbmUgVEczX1JBV19JUF9BTElHTiAyCiAKQEAgLTE1Myw2ICsxNjIsNyBAQAogTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX1RHM1RTTyk7CiBNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfVEczVFNPNSk7CiAKKyNkZWZpbmUgVEczX1JTU19NSU5fTlVNX01TSVhfVkVDUwkyCiAKIHN0YXRpYyBpbnQgdGczX2RlYnVnID0gLTE7CS8qIC0xID09IHVzZSBURzNfREVGX01TR19FTkFCTEUgYXMgdmFsdWUgKi8KIG1vZHVsZV9wYXJhbSh0ZzNfZGVidWcsIGludCwgMCk7CkBAIC0yMTksMTEgKzIyOSwxMiBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NjFFKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc2MVMpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181NzYxU0UpfSwKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg1KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc4NV9HKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc4NV9GKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3ODApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc2MCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkwKX0sCi0Je1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3MjApfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc4OCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlEWFgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85TVhYKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTFRJTUEsIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDMTAwMCl9LApAQCAtNjA1LDM5ICs2MTYsNDcgQEAKIAogc3RhdGljIHZvaWQgdGczX2Rpc2FibGVfaW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKKwlpbnQgaTsKKwogCXR3MzIoVEczUENJX01JU0NfSE9TVF9DVFJMLAogCSAgICAgKHRwLT5taXNjX2hvc3RfY3RybCB8IE1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCkpOwotCXR3MzJfbWFpbGJveF9mKE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMHgwMDAwMDAwMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0ZzNfY29uZF9pbnQoc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpICYmCi0JICAgICh0cC0+aHdfc3RhdHVzLT5zdGF0dXMgJiBTRF9TVEFUVVNfVVBEQVRFRCkpCi0JCXR3MzIoR1JDX0xPQ0FMX0NUUkwsIHRwLT5ncmNfbG9jYWxfY3RybCB8IEdSQ19MQ0xDVFJMX1NFVElOVCk7Ci0JZWxzZQotCQl0dzMyKEhPU1RDQ19NT0RFLCB0cC0+Y29hbGVzY2VfbW9kZSB8Ci0JCSAgICAgKEhPU1RDQ19NT0RFX0VOQUJMRSB8IEhPU1RDQ19NT0RFX05PVykpOworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX21heDsgaSsrKQorCQl0dzMyX21haWxib3hfZih0cC0+bmFwaVtpXS5pbnRfbWJveCwgMHgwMDAwMDAwMSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19lbmFibGVfaW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKKwlpbnQgaTsKKwl1MzIgY29hbF9ub3cgPSAwOworCiAJdHAtPmlycV9zeW5jID0gMDsKIAl3bWIoKTsKIAogCXR3MzIoVEczUENJX01JU0NfSE9TVF9DVFJMLAogCSAgICAgKHRwLT5taXNjX2hvc3RfY3RybCAmIH5NSVNDX0hPU1RfQ1RSTF9NQVNLX1BDSV9JTlQpKTsKLQl0dzMyX21haWxib3hfZihNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csCi0JCSAgICAgICAodHAtPmxhc3RfdGFnIDw8IDI0KSk7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfMVNIT1RfTVNJKQotCQl0dzMyX21haWxib3hfZihNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csCi0JCQkgICAgICAgKHRwLT5sYXN0X3RhZyA8PCAyNCkpOwotCXRnM19jb25kX2ludCh0cCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCQl0dzMyX21haWxib3hfZih0bmFwaS0+aW50X21ib3gsIHRuYXBpLT5sYXN0X3RhZyA8PCAyNCk7CisJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzFTSE9UX01TSSkKKwkJCXR3MzJfbWFpbGJveF9mKHRuYXBpLT5pbnRfbWJveCwgdG5hcGktPmxhc3RfdGFnIDw8IDI0KTsKKworCQljb2FsX25vdyB8PSB0bmFwaS0+Y29hbF9ub3c7CisJfQorCisJLyogRm9yY2UgYW4gaW5pdGlhbCBpbnRlcnJ1cHQgKi8KKwlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgJiYKKwkgICAgKHRwLT5uYXBpWzBdLmh3X3N0YXR1cy0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpKQorCQl0dzMyKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwgfCBHUkNfTENMQ1RSTF9TRVRJTlQpOworCWVsc2UKKwkJdHczMihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxlc2NlX21vZGUgfAorCQkgICAgIEhPU1RDQ19NT0RFX0VOQUJMRSB8IGNvYWxfbm93KTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGczX2hhc193b3JrKHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGczX2hhc193b3JrKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkpCiB7Ci0Jc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0cC0+aHdfc3RhdHVzOworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOworCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdG5hcGktPmh3X3N0YXR1czsKIAl1bnNpZ25lZCBpbnQgd29ya19leGlzdHMgPSAwOwogCiAJLyogY2hlY2sgZm9yIHBoeSBldmVudHMgKi8KQEAgLTY0OCwyMiArNjY3LDIzIEBACiAJCQl3b3JrX2V4aXN0cyA9IDE7CiAJfQogCS8qIGNoZWNrIGZvciBSWC9UWCB3b3JrIHRvIGRvICovCi0JaWYgKHNibGstPmlkeFswXS50eF9jb25zdW1lciAhPSB0cC0+dHhfY29ucyB8fAotCSAgICBzYmxrLT5pZHhbMF0ucnhfcHJvZHVjZXIgIT0gdHAtPnJ4X3JjYl9wdHIpCisJaWYgKHNibGstPmlkeFswXS50eF9jb25zdW1lciAhPSB0bmFwaS0+dHhfY29ucyB8fAorCSAgICAqKHRuYXBpLT5yeF9yY2JfcHJvZF9pZHgpICE9IHRuYXBpLT5yeF9yY2JfcHRyKQogCQl3b3JrX2V4aXN0cyA9IDE7CiAKIAlyZXR1cm4gd29ya19leGlzdHM7CiB9CiAKLS8qIHRnM19yZXN0YXJ0X2ludHMKKy8qIHRnM19pbnRfcmVlbmFibGUKICAqICBzaW1pbGFyIHRvIHRnM19lbmFibGVfaW50cywgYnV0IGl0IGFjY3VyYXRlbHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlCiAgKiAgaXMgbmV3IHdvcmsgcGVuZGluZyBhbmQgY2FuIHJldHVybiB3aXRob3V0IGZsdXNoaW5nIHRoZSBQSU8gd3JpdGUKICAqICB3aGljaCByZWVuYWJsZXMgaW50ZXJydXB0cwogICovCi1zdGF0aWMgdm9pZCB0ZzNfcmVzdGFydF9pbnRzKHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIHZvaWQgdGczX2ludF9yZWVuYWJsZShzdHJ1Y3QgdGczX25hcGkgKnRuYXBpKQogewotCXR3MzJfbWFpbGJveChNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csCi0JCSAgICAgdHAtPmxhc3RfdGFnIDw8IDI0KTsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKKworCXR3MzJfbWFpbGJveCh0bmFwaS0+aW50X21ib3gsIHRuYXBpLT5sYXN0X3RhZyA8PCAyNCk7CiAJbW1pb3diKCk7CiAKIAkvKiBXaGVuIGRvaW5nIHRhZ2dlZCBzdGF0dXMsIHRoaXMgd29yayBjaGVjayBpcyB1bm5lY2Vzc2FyeS4KQEAgLTY3MSwzOSArNjkxLDU4IEBACiAJICogd29yayB3ZSd2ZSBjb21wbGV0ZWQuCiAJICovCiAJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RBR0dFRF9TVEFUVVMpICYmCi0JICAgIHRnM19oYXNfd29yayh0cCkpCisJICAgIHRnM19oYXNfd29yayh0bmFwaSkpCiAJCXR3MzIoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwKLQkJICAgICAoSE9TVENDX01PREVfRU5BQkxFIHwgSE9TVENDX01PREVfTk9XKSk7CisJCSAgICAgSE9TVENDX01PREVfRU5BQkxFIHwgdG5hcGktPmNvYWxfbm93KTsKK30KKworc3RhdGljIHZvaWQgdGczX25hcGlfZGlzYWJsZShzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IHRwLT5pcnFfY250IC0gMTsgaSA+PSAwOyBpLS0pCisJCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGlbaV0ubmFwaSk7Cit9CisKK3N0YXRpYyB2b2lkIHRnM19uYXBpX2VuYWJsZShzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKQorCQluYXBpX2VuYWJsZSgmdHAtPm5hcGlbaV0ubmFwaSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZzNfbmV0aWZfc3RvcChzdHJ1Y3QgdGczICp0cCkKIHsKIAl0cC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLwotCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOworCXRnM19uYXBpX2Rpc2FibGUodHApOwogCW5ldGlmX3R4X2Rpc2FibGUodHAtPmRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0ZzNfbmV0aWZfc3RhcnQoc3RydWN0IHRnMyAqdHApCiB7Ci0JbmV0aWZfd2FrZV9xdWV1ZSh0cC0+ZGV2KTsKLQkvKiBOT1RFOiB1bmNvbmRpdGlvbmFsIG5ldGlmX3dha2VfcXVldWUgaXMgb25seSBhcHByb3ByaWF0ZQotCSAqIHNvIGxvbmcgYXMgYWxsIGNhbGxlcnMgYXJlIGFzc3VyZWQgdG8gaGF2ZSBmcmVlIHR4IHNsb3RzCi0JICogKHN1Y2ggYXMgYWZ0ZXIgdGczX2luaXRfaHcpCisJLyogTk9URTogdW5jb25kaXRpb25hbCBuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMgaXMgb25seQorCSAqIGFwcHJvcHJpYXRlIHNvIGxvbmcgYXMgYWxsIGNhbGxlcnMgYXJlIGFzc3VyZWQgdG8KKwkgKiBoYXZlIGZyZWUgdHggc2xvdHMgKHN1Y2ggYXMgYWZ0ZXIgdGczX2luaXRfaHcpCiAJICovCi0JbmFwaV9lbmFibGUoJnRwLT5uYXBpKTsKLQl0cC0+aHdfc3RhdHVzLT5zdGF0dXMgfD0gU0RfU1RBVFVTX1VQREFURUQ7CisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHRwLT5kZXYpOworCisJdGczX25hcGlfZW5hYmxlKHRwKTsKKwl0cC0+bmFwaVswXS5od19zdGF0dXMtPnN0YXR1cyB8PSBTRF9TVEFUVVNfVVBEQVRFRDsKIAl0ZzNfZW5hYmxlX2ludHModHApOwogfQogCiBzdGF0aWMgdm9pZCB0ZzNfc3dpdGNoX2Nsb2NrcyhzdHJ1Y3QgdGczICp0cCkKIHsKLQl1MzIgY2xvY2tfY3RybCA9IHRyMzIoVEczUENJX0NMT0NLX0NUUkwpOworCXUzMiBjbG9ja19jdHJsOwogCXUzMiBvcmlnX2Nsb2NrX2N0cmw7CiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19DUE1VX1BSRVNFTlQpIHx8CiAJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpKQogCQlyZXR1cm47CiAKKwljbG9ja19jdHJsID0gdHIzMihURzNQQ0lfQ0xPQ0tfQ1RSTCk7CisKIAlvcmlnX2Nsb2NrX2N0cmwgPSBjbG9ja19jdHJsOwogCWNsb2NrX2N0cmwgJj0gKENMT0NLX0NUUkxfRk9SQ0VfQ0xLUlVOIHwKIAkJICAgICAgIENMT0NLX0NUUkxfQ0xLUlVOX09FTkFCTEUgfApAQCAtNzQzLDcgKzc4Miw3IEBACiAKIAkqdmFsID0gMHgwOwogCi0JZnJhbWVfdmFsICA9ICgoUEhZX0FERFIgPDwgTUlfQ09NX1BIWV9BRERSX1NISUZUKSAmCisJZnJhbWVfdmFsICA9ICgodHAtPnBoeV9hZGRyIDw8IE1JX0NPTV9QSFlfQUREUl9TSElGVCkgJgogCQkgICAgICBNSV9DT01fUEhZX0FERFJfTUFTSyk7CiAJZnJhbWVfdmFsIHw9ICgocmVnIDw8IE1JX0NPTV9SRUdfQUREUl9TSElGVCkgJgogCQkgICAgICBNSV9DT01fUkVHX0FERFJfTUFTSyk7CkBAIC03ODQsNyArODIzLDcgQEAKIAl1bnNpZ25lZCBpbnQgbG9vcHM7CiAJaW50IHJldDsKIAotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNiAmJgorCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSAmJgogCSAgICAocmVnID09IE1JSV9URzNfQ1RSTCB8fCByZWcgPT0gTUlJX1RHM19BVVhfQ1RSTCkpCiAJCXJldHVybiAwOwogCkBAIC03OTQsNyArODMzLDcgQEAKIAkJdWRlbGF5KDgwKTsKIAl9CiAKLQlmcmFtZV92YWwgID0gKChQSFlfQUREUiA8PCBNSV9DT01fUEhZX0FERFJfU0hJRlQpICYKKwlmcmFtZV92YWwgID0gKCh0cC0+cGh5X2FkZHIgPDwgTUlfQ09NX1BIWV9BRERSX1NISUZUKSAmCiAJCSAgICAgIE1JX0NPTV9QSFlfQUREUl9NQVNLKTsKIAlmcmFtZV92YWwgfD0gKChyZWcgPDwgTUlfQ09NX1JFR19BRERSX1NISUZUKSAmCiAJCSAgICAgIE1JX0NPTV9SRUdfQUREUl9NQVNLKTsKQEAgLTkxNyw3ICs5NTYsOSBAQAogCQl0dzMyKE1BQ19QSFlDRkcyLCB2YWwpOwogCiAJCXZhbCA9IHRyMzIoTUFDX1BIWUNGRzEpOwotCQl2YWwgJj0gfk1BQ19QSFlDRkcxX1JHTUlJX0lOVDsKKwkJdmFsICY9IH4oTUFDX1BIWUNGRzFfUkdNSUlfSU5UIHwKKwkJCSBNQUNfUEhZQ0ZHMV9SWENMS19UT19NQVNLIHwgTUFDX1BIWUNGRzFfVFhDTEtfVE9fTUFTSyk7CisJCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SWENMS19USU1FT1VUIHwgTUFDX1BIWUNGRzFfVFhDTEtfVElNRU9VVDsKIAkJdHczMihNQUNfUEhZQ0ZHMSwgdmFsKTsKIAogCQlyZXR1cm47CkBAIC05MzMsMTUgKzk3NCwxOCBAQAogCiAJdHczMihNQUNfUEhZQ0ZHMiwgdmFsKTsKIAotCXZhbCA9IHRyMzIoTUFDX1BIWUNGRzEpICYgfihNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDIHwKLQkJCQkgICAgTUFDX1BIWUNGRzFfUkdNSUlfU05EX1NUQVRfRU4pOwotCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUpIHsKKwl2YWwgPSB0cjMyKE1BQ19QSFlDRkcxKTsKKwl2YWwgJj0gfihNQUNfUEhZQ0ZHMV9SWENMS19UT19NQVNLIHwgTUFDX1BIWUNGRzFfVFhDTEtfVE9fTUFTSyB8CisJCSBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDIHwgTUFDX1BIWUNGRzFfUkdNSUlfU05EX1NUQVRfRU4pOworCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkpIHsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4pCiAJCQl2YWwgfD0gTUFDX1BIWUNGRzFfUkdNSUlfRVhUX1JYX0RFQzsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfVFhfRU4pCiAJCQl2YWwgfD0gTUFDX1BIWUNGRzFfUkdNSUlfU05EX1NUQVRfRU47CiAJfQotCXR3MzIoTUFDX1BIWUNGRzEsIHZhbCB8IE1BQ19QSFlDRkcxX1JHTUlJX0lOVCB8IE1BQ19QSFlDRkcxX1RYQ19EUlYpOworCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SWENMS19USU1FT1VUIHwgTUFDX1BIWUNGRzFfVFhDTEtfVElNRU9VVCB8CisJICAgICAgIE1BQ19QSFlDRkcxX1JHTUlJX0lOVCB8IE1BQ19QSFlDRkcxX1RYQ19EUlY7CisJdHczMihNQUNfUEhZQ0ZHMSwgdmFsKTsKIAogCXZhbCA9IHRyMzIoTUFDX0VYVF9SR01JSV9NT0RFKTsKIAl2YWwgJj0gfihNQUNfUkdNSUlfTU9ERV9SWF9JTlRfQiB8CkBAIC05NzcsNiArMTAyMSwyMSBAQAogCXR3MzJfZihNQUNfTUlfTU9ERSwgdHAtPm1pX21vZGUpOwogCXVkZWxheSg4MCk7CiAKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpIHsKKwkJdTMyIGZ1bmNudW0sIGlzX3NlcmRlczsKKworCQlmdW5jbnVtID0gdHIzMihURzNfQ1BNVV9TVEFUVVMpICYgVEczX0NQTVVfU1RBVFVTX1BDSUVfRlVOQzsKKwkJaWYgKGZ1bmNudW0pCisJCQl0cC0+cGh5X2FkZHIgPSAyOworCQllbHNlCisJCQl0cC0+cGh5X2FkZHIgPSAxOworCisJCWlzX3NlcmRlcyA9IHRyMzIoU0dfRElHX1NUQVRVUykgJiBTR19ESUdfSVNfU0VSREVTOworCQlpZiAoaXNfc2VyZGVzKQorCQkJdHAtPnBoeV9hZGRyICs9IDc7CisJfSBlbHNlCisJCXRwLT5waHlfYWRkciA9IFBIWV9BRERSOworCiAJaWYgKCh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfSU5JVEVEKSAmJgogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkKIAkJdGczX21kaW9fY29uZmlnXzU3ODUodHApOwpAQCAtMTA2NCw2ICsxMTIzLDcgQEAKIAljYXNlIFRHM19QSFlfSURfUlRMODIwMUU6CiAJY2FzZSBURzNfUEhZX0lEX0JDTUFDMTMxOgogCQlwaHlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CisJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1BIWV9JU19GRVQ7CiAJCWJyZWFrOwogCX0KIApAQCAtMTQ2OSwxNCArMTUyOSwzOCBAQAogCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19EU1BfUldfUE9SVCwgdmFsKTsKIH0KIAorc3RhdGljIHZvaWQgdGczX3BoeV9mZXRfdG9nZ2xlX2FwZChzdHJ1Y3QgdGczICp0cCwgYm9vbCBlbmFibGUpCit7CisJdTMyIHBoeXRlc3Q7CisKKwlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0ZFVF9URVNULCAmcGh5dGVzdCkpIHsKKwkJdTMyIHBoeTsKKworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRkVUX1RFU1QsCisJCQkgICAgIHBoeXRlc3QgfCBNSUlfVEczX0ZFVF9TSEFET1dfRU4pOworCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0ZFVF9TSERXX0FVWFNUQVQyLCAmcGh5KSkgeworCQkJaWYgKGVuYWJsZSkKKwkJCQlwaHkgfD0gTUlJX1RHM19GRVRfU0hEV19BVVhTVEFUMl9BUEQ7CisJCQllbHNlCisJCQkJcGh5ICY9IH5NSUlfVEczX0ZFVF9TSERXX0FVWFNUQVQyX0FQRDsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfU0hEV19BVVhTVEFUMiwgcGh5KTsKKwkJfQorCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRkVUX1RFU1QsIHBoeXRlc3QpOworCX0KK30KKwogc3RhdGljIHZvaWQgdGczX3BoeV90b2dnbGVfYXBkKHN0cnVjdCB0ZzMgKnRwLCBib29sIGVuYWJsZSkKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHx8Ci0JICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQorCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKIAkJcmV0dXJuOwogCisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgeworCQl0ZzNfcGh5X2ZldF90b2dnbGVfYXBkKHRwLCBlbmFibGUpOworCQlyZXR1cm47CisJfQorCiAJcmVnID0gTUlJX1RHM19NSVNDX1NIRFdfV1JFTiB8CiAJICAgICAgTUlJX1RHM19NSVNDX1NIRFdfU0NSNV9TRUwgfAogCSAgICAgIE1JSV9URzNfTUlTQ19TSERXX1NDUjVfTFBFRCB8CkBAIC0xNTA2LDIwICsxNTkwLDIyIEBACiAJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpKQogCQlyZXR1cm47CiAKLQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7CiAJCXUzMiBlcGh5OwogCi0JCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRVBIWV9URVNULCAmZXBoeSkpIHsKLQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FUEhZX1RFU1QsCi0JCQkJICAgICBlcGh5IHwgTUlJX1RHM19FUEhZX1NIQURPV19FTik7Ci0JCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0VQSFlUU1RfTUlTQ0NUUkwsICZwaHkpKSB7CisJCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRkVUX1RFU1QsICZlcGh5KSkgeworCQkJdTMyIHJlZyA9IE1JSV9URzNfRkVUX1NIRFdfTUlTQ0NUUkw7CisKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfVEVTVCwKKwkJCQkgICAgIGVwaHkgfCBNSUlfVEczX0ZFVF9TSEFET1dfRU4pOworCQkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgcmVnLCAmcGh5KSkgewogCQkJCWlmIChlbmFibGUpCi0JCQkJCXBoeSB8PSBNSUlfVEczX0VQSFlUU1RfTUlTQ0NUUkxfTURJWDsKKwkJCQkJcGh5IHw9IE1JSV9URzNfRkVUX1NIRFdfTUlTQ0NUUkxfTURJWDsKIAkJCQllbHNlCi0JCQkJCXBoeSAmPSB+TUlJX1RHM19FUEhZVFNUX01JU0NDVFJMX01ESVg7Ci0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VQSFlUU1RfTUlTQ0NUUkwsIHBoeSk7CisJCQkJCXBoeSAmPSB+TUlJX1RHM19GRVRfU0hEV19NSVNDQ1RSTF9NRElYOworCQkJCXRnM193cml0ZXBoeSh0cCwgcmVnLCBwaHkpOwogCQkJfQotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VQSFlfVEVTVCwgZXBoeSk7CisJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRkVUX1RFU1QsIGVwaHkpOwogCQl9CiAJfSBlbHNlIHsKIAkJcGh5ID0gTUlJX1RHM19BVVhDVExfTUlTQ19SRFNFTF9NSVNDIHwKQEAgLTE4ODgsNyArMTk3NCw3IEBACiAJaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKSB7CiAJCS8qIENhbm5vdCBkbyByZWFkLW1vZGlmeS13cml0ZSBvbiA1NDAxICovCiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19BVVhfQ1RSTCwgMHg0YzIwKTsKLQl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSlVNQk9fQ0FQQUJMRSkgeworCX0gZWxzZSBpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpIHsKIAkJdTMyIHBoeV9yZWc7CiAKIAkJLyogU2V0IGJpdCAxNCB3aXRoIHJlYWQtbW9kaWZ5LXdyaXRlIHRvIHByZXNlcnZlIG90aGVyIGJpdHMgKi8KQEAgLTE5MDAsNyArMTk4Niw3IEBACiAJLyogU2V0IHBoeSByZWdpc3RlciAweDEwIGJpdCAwIHRvIGhpZ2ggZmlmbyBlbGFzdGljaXR5IHRvIHN1cHBvcnQKIAkgKiBqdW1ibyBmcmFtZXMgdHJhbnNtaXNzaW9uLgogCSAqLwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0pVTUJPX0NBUEFCTEUpIHsKKwlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUpIHsKIAkJdTMyIHBoeV9yZWc7CiAKIAkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19FWFRfQ1RSTCwgJnBoeV9yZWcpKQpAQCAtMTkxMCw3ICsxOTk2LDcgQEAKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgewogCQkvKiBhZGp1c3Qgb3V0cHV0IHZvbHRhZ2UgKi8KLQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VQSFlfUFRFU1QsIDB4MTIpOworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRkVUX1BURVNULCAweDEyKTsKIAl9CiAKIAl0ZzNfcGh5X3RvZ2dsZV9hdXRvbWRpeCh0cCwgMSk7CkBAIC0xOTI1LDggKzIwMTEsOSBAQAogCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9JU19OSUMpID09IDApCiAJCXJldHVybjsKIAotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHx8Ci0JICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCkpIHsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTQgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldl9wZWVyOwogCiAJCWRldl9wZWVyID0gcGNpX2dldF9kcnZkYXRhKHRwLT5wZGV2X3BlZXIpOwpAQCAtMjY1NSw3ICsyNzQyLDcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgewogCQkJKnNwZWVkID0gKHZhbCAmIE1JSV9URzNfQVVYX1NUQVRfMTAwKSA/IFNQRUVEXzEwMCA6CiAJCQkJIFNQRUVEXzEwOwogCQkJKmR1cGxleCA9ICh2YWwgJiBNSUlfVEczX0FVWF9TVEFUX0ZVTEwpID8gRFVQTEVYX0ZVTEwgOgpAQCAtMjk5MCw3ICszMDc3LDcgQEAKIAogCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCkKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0lNQVNLLCB+TUlJX1RHM19JTlRfTElOS0NIRyk7Ci0JZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYpCisJZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpKQogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfSU1BU0ssIH4wKTsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCB8fApAQCAtMzEwMCw3ICszMTg3LDkgQEAKIAkJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOwogCQllbHNlCiAJCQl0cC0+bWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7Ci0JfSBlbHNlCisJfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpCisJCXRwLT5tYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOworCWVsc2UKIAkJdHAtPm1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwogCiAJdHAtPm1hY19tb2RlICY9IH5NQUNfTU9ERV9IQUxGX0RVUExFWDsKQEAgLTMxNjcsNiArMzI1NiwxNSBAQAogCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRwLT5wZGV2LAogCQkJCQkgICAgICB0cC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0xOS0NUTCwKIAkJCQkJICAgICAgbmV3bG5rY3RsKTsKKwl9IGVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVE9HR0xFXzEwXzEwMF9MMVBMTFBEKSB7CisJCXUzMiBuZXdyZWcsIG9sZHJlZyA9IHRyMzIoVEczX1BDSUVfTE5LQ1RMKTsKKwkJaWYgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwIHx8CisJCSAgICB0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkID09IFNQRUVEXzEwKQorCQkJbmV3cmVnID0gb2xkcmVnICYgflRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRU47CisJCWVsc2UKKwkJCW5ld3JlZyA9IG9sZHJlZyB8IFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRU47CisJCWlmIChuZXdyZWcgIT0gb2xkcmVnKQorCQkJdHczMihURzNfUENJRV9MTktDVEwsIG5ld3JlZyk7CiAJfQogCiAJaWYgKGN1cnJlbnRfbGlua191cCAhPSBuZXRpZl9jYXJyaWVyX29rKHRwLT5kZXYpKSB7CkBAIC0zODQ4LDkgKzM5NDYsOSBAQAogCWVsc2UKIAkJY3VycmVudF9saW5rX3VwID0gdGczX3NldHVwX2ZpYmVyX2J5X2hhbmQodHAsIG1hY19zdGF0dXMpOwogCi0JdHAtPmh3X3N0YXR1cy0+c3RhdHVzID0KKwl0cC0+bmFwaVswXS5od19zdGF0dXMtPnN0YXR1cyA9CiAJCShTRF9TVEFUVVNfVVBEQVRFRCB8Ci0JCSAodHAtPmh3X3N0YXR1cy0+c3RhdHVzICYgflNEX1NUQVRVU19MSU5LX0NIRykpOworCQkgKHRwLT5uYXBpWzBdLmh3X3N0YXR1cy0+c3RhdHVzICYgflNEX1NUQVRVU19MSU5LX0NIRykpOwogCiAJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CiAJCXR3MzJfZihNQUNfU1RBVFVTLCAoTUFDX1NUQVRVU19TWU5DX0NIQU5HRUQgfApAQCAtNDIxNiwyNCArNDMxNCwzMiBAQAogCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHRnM190eF9hdmFpbChzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyBpbmxpbmUgdTMyIHRnM190eF9hdmFpbChzdHJ1Y3QgdGczX25hcGkgKnRuYXBpKQogewogCXNtcF9tYigpOwotCXJldHVybiAodHAtPnR4X3BlbmRpbmcgLQotCQkoKHRwLT50eF9wcm9kIC0gdHAtPnR4X2NvbnMpICYgKFRHM19UWF9SSU5HX1NJWkUgLSAxKSkpOworCXJldHVybiB0bmFwaS0+dHhfcGVuZGluZyAtCisJICAgICAgICgodG5hcGktPnR4X3Byb2QgLSB0bmFwaS0+dHhfY29ucykgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKTsKIH0KIAogLyogVGlnb24zIG5ldmVyIHJlcG9ydHMgcGFydGlhbCBwYWNrZXQgc2VuZHMuICBTbyB3ZSBkbyBub3QKICAqIG5lZWQgc3BlY2lhbCBsb2dpYyB0byBoYW5kbGUgU0tCcyB0aGF0IGhhdmUgbm90IGhhZCBhbGwKICAqIG9mIHRoZWlyIGZyYWdzIHNlbnQgeWV0LCBsaWtlIFN1bkdFTSBkb2VzLgogICovCi1zdGF0aWMgdm9pZCB0ZzNfdHgoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgdm9pZCB0ZzNfdHgoc3RydWN0IHRnM19uYXBpICp0bmFwaSkKIHsKLQl1MzIgaHdfaWR4ID0gdHAtPmh3X3N0YXR1cy0+aWR4WzBdLnR4X2NvbnN1bWVyOwotCXUzMiBzd19pZHggPSB0cC0+dHhfY29uczsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKKwl1MzIgaHdfaWR4ID0gdG5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnR4X2NvbnN1bWVyOworCXUzMiBzd19pZHggPSB0bmFwaS0+dHhfY29uczsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CisJaW50IGluZGV4ID0gdG5hcGkgLSB0cC0+bmFwaTsKKworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpCisJCWluZGV4LS07CisKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHRwLT5kZXYsIGluZGV4KTsKIAogCXdoaWxlIChzd19pZHggIT0gaHdfaWR4KSB7Ci0JCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJpID0gJnRwLT50eF9idWZmZXJzW3N3X2lkeF07CisJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJpID0gJnRuYXBpLT50eF9idWZmZXJzW3N3X2lkeF07CiAJCXN0cnVjdCBza19idWZmICpza2IgPSByaS0+c2tiOwogCQlpbnQgaSwgdHhfYnVnID0gMDsKIApAQCAtNDI0OSw3ICs0MzU1LDcgQEAKIAkJc3dfaWR4ID0gTkVYVF9UWChzd19pZHgpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKLQkJCXJpID0gJnRwLT50eF9idWZmZXJzW3N3X2lkeF07CisJCQlyaSA9ICZ0bmFwaS0+dHhfYnVmZmVyc1tzd19pZHhdOwogCQkJaWYgKHVubGlrZWx5KHJpLT5za2IgIT0gTlVMTCB8fCBzd19pZHggPT0gaHdfaWR4KSkKIAkJCQl0eF9idWcgPSAxOwogCQkJc3dfaWR4ID0gTkVYVF9UWChzd19pZHgpOwpAQCAtNDI2Myw3ICs0MzY5LDcgQEAKIAkJfQogCX0KIAotCXRwLT50eF9jb25zID0gc3dfaWR4OworCXRuYXBpLT50eF9jb25zID0gc3dfaWR4OwogCiAJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHRnM19zdGFydF94bWl0KCkKIAkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCkBAIC00MjcyLDEzICs0Mzc4LDEzIEBACiAJICovCiAJc21wX21iKCk7CiAKLQlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZCh0cC0+ZGV2KSAmJgotCQkgICAgICh0ZzNfdHhfYXZhaWwodHApID4gVEczX1RYX1dBS0VVUF9USFJFU0godHApKSkpIHsKLQkJbmV0aWZfdHhfbG9jayh0cC0+ZGV2KTsKLQkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQodHAtPmRldikgJiYKLQkJICAgICh0ZzNfdHhfYXZhaWwodHApID4gVEczX1RYX1dBS0VVUF9USFJFU0godHApKSkKLQkJCW5ldGlmX3dha2VfcXVldWUodHAtPmRldik7Ci0JCW5ldGlmX3R4X3VubG9jayh0cC0+ZGV2KTsKKwlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmCisJCSAgICAgKHRnM190eF9hdmFpbCh0bmFwaSkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCh0bmFwaSkpKSkgeworCQlfX25ldGlmX3R4X2xvY2sodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmCisJCSAgICAodGczX3R4X2F2YWlsKHRuYXBpKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKHRuYXBpKSkpCisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CisJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJfQogfQogCkBAIC00MjkzLDMzICs0Mzk5LDM1IEBACiAgKiBidWZmZXJzIHRoZSBjcHUgb25seSByZWFkcyB0aGUgbGFzdCBjYWNoZWxpbmUgb2YgdGhlIFJYIGRlc2NyaXB0b3IKICAqICh0byBmZXRjaCB0aGUgZXJyb3IgZmxhZ3MsIHZsYW4gdGFnLCBjaGVja3N1bSwgYW5kIG9wYXF1ZSBjb29raWUpLgogICovCi1zdGF0aWMgaW50IHRnM19hbGxvY19yeF9za2Ioc3RydWN0IHRnMyAqdHAsIHUzMiBvcGFxdWVfa2V5LAorc3RhdGljIGludCB0ZzNfYWxsb2Nfcnhfc2tiKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksIHUzMiBvcGFxdWVfa2V5LAogCQkJICAgIGludCBzcmNfaWR4LCB1MzIgZGVzdF9pZHhfdW5tYXNrZWQpCiB7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CiAJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgcmluZ19pbmZvICptYXAsICpzcmNfbWFwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCWludCBza2Jfc2l6ZSwgZGVzdF9pZHg7CisJc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgKnRwciA9ICZ0cC0+cHJvZHJpbmdbMF07CiAKIAlzcmNfbWFwID0gTlVMTDsKIAlzd2l0Y2ggKG9wYXF1ZV9rZXkpIHsKIAljYXNlIFJYRF9PUEFRVUVfUklOR19TVEQ6CiAJCWRlc3RfaWR4ID0gZGVzdF9pZHhfdW5tYXNrZWQgJSBURzNfUlhfUklOR19TSVpFOwotCQlkZXNjID0gJnRwLT5yeF9zdGRbZGVzdF9pZHhdOwotCQltYXAgPSAmdHAtPnJ4X3N0ZF9idWZmZXJzW2Rlc3RfaWR4XTsKKwkJZGVzYyA9ICZ0cHItPnJ4X3N0ZFtkZXN0X2lkeF07CisJCW1hcCA9ICZ0cHItPnJ4X3N0ZF9idWZmZXJzW2Rlc3RfaWR4XTsKIAkJaWYgKHNyY19pZHggPj0gMCkKLQkJCXNyY19tYXAgPSAmdHAtPnJ4X3N0ZF9idWZmZXJzW3NyY19pZHhdOwotCQlza2Jfc2l6ZSA9IHRwLT5yeF9wa3RfYnVmX3N6OworCQkJc3JjX21hcCA9ICZ0cHItPnJ4X3N0ZF9idWZmZXJzW3NyY19pZHhdOworCQlza2Jfc2l6ZSA9IHRwLT5yeF9wa3RfbWFwX3N6OwogCQlicmVhazsKIAogCWNhc2UgUlhEX09QQVFVRV9SSU5HX0pVTUJPOgogCQlkZXN0X2lkeCA9IGRlc3RfaWR4X3VubWFza2VkICUgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsKLQkJZGVzYyA9ICZ0cC0+cnhfanVtYm9bZGVzdF9pZHhdOwotCQltYXAgPSAmdHAtPnJ4X2p1bWJvX2J1ZmZlcnNbZGVzdF9pZHhdOworCQlkZXNjID0gJnRwci0+cnhfam1iW2Rlc3RfaWR4XS5zdGQ7CisJCW1hcCA9ICZ0cHItPnJ4X2ptYl9idWZmZXJzW2Rlc3RfaWR4XTsKIAkJaWYgKHNyY19pZHggPj0gMCkKLQkJCXNyY19tYXAgPSAmdHAtPnJ4X2p1bWJvX2J1ZmZlcnNbc3JjX2lkeF07Ci0JCXNrYl9zaXplID0gUlhfSlVNQk9fUEtUX0JVRl9TWjsKKwkJCXNyY19tYXAgPSAmdHByLT5yeF9qbWJfYnVmZmVyc1tzcmNfaWR4XTsKKwkJc2tiX3NpemUgPSBURzNfUlhfSk1CX01BUF9TWjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDMzMiwxNCArNDQ0MCwxMyBAQAogCSAqIENhbGxlcnMgZGVwZW5kIHVwb24gdGhpcyBiZWhhdmlvciBhbmQgYXNzdW1lIHRoYXQKIAkgKiB3ZSBsZWF2ZSBldmVyeXRoaW5nIHVuY2hhbmdlZCBpZiB3ZSBmYWlsLgogCSAqLwotCXNrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgc2tiX3NpemUpOworCXNrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgc2tiX3NpemUgKyB0cC0+cnhfb2Zmc2V0KTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJc2tiX3Jlc2VydmUoc2tiLCB0cC0+cnhfb2Zmc2V0KTsKIAotCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGRldiwgc2tiLT5kYXRhLAotCQkJCSBza2Jfc2l6ZSAtIHRwLT5yeF9vZmZzZXQsCisJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHRwLT5wZGV2LCBza2ItPmRhdGEsIHNrYl9zaXplLAogCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAJbWFwLT5za2IgPSBza2I7CkBAIC00MzU4LDI4ICs0NDY1LDMwIEBACiAgKiBtZW1iZXJzIG9mIHRoZSBSWCBkZXNjcmlwdG9yIGFyZSBpbnZhcmlhbnQuICBTZWUgbm90ZXMgYWJvdmUKICAqIHRnM19hbGxvY19yeF9za2IgZm9yIGZ1bGwgZGV0YWlscy4KICAqLwotc3RhdGljIHZvaWQgdGczX3JlY3ljbGVfcngoc3RydWN0IHRnMyAqdHAsIHUzMiBvcGFxdWVfa2V5LAorc3RhdGljIHZvaWQgdGczX3JlY3ljbGVfcngoc3RydWN0IHRnM19uYXBpICp0bmFwaSwgdTMyIG9wYXF1ZV9rZXksCiAJCQkgICBpbnQgc3JjX2lkeCwgdTMyIGRlc3RfaWR4X3VubWFza2VkKQogeworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOwogCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MgKnNyY19kZXNjLCAqZGVzdF9kZXNjOwogCXN0cnVjdCByaW5nX2luZm8gKnNyY19tYXAsICpkZXN0X21hcDsKIAlpbnQgZGVzdF9pZHg7CisJc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgKnRwciA9ICZ0cC0+cHJvZHJpbmdbMF07CiAKIAlzd2l0Y2ggKG9wYXF1ZV9rZXkpIHsKIAljYXNlIFJYRF9PUEFRVUVfUklOR19TVEQ6CiAJCWRlc3RfaWR4ID0gZGVzdF9pZHhfdW5tYXNrZWQgJSBURzNfUlhfUklOR19TSVpFOwotCQlkZXN0X2Rlc2MgPSAmdHAtPnJ4X3N0ZFtkZXN0X2lkeF07Ci0JCWRlc3RfbWFwID0gJnRwLT5yeF9zdGRfYnVmZmVyc1tkZXN0X2lkeF07Ci0JCXNyY19kZXNjID0gJnRwLT5yeF9zdGRbc3JjX2lkeF07Ci0JCXNyY19tYXAgPSAmdHAtPnJ4X3N0ZF9idWZmZXJzW3NyY19pZHhdOworCQlkZXN0X2Rlc2MgPSAmdHByLT5yeF9zdGRbZGVzdF9pZHhdOworCQlkZXN0X21hcCA9ICZ0cHItPnJ4X3N0ZF9idWZmZXJzW2Rlc3RfaWR4XTsKKwkJc3JjX2Rlc2MgPSAmdHByLT5yeF9zdGRbc3JjX2lkeF07CisJCXNyY19tYXAgPSAmdHByLT5yeF9zdGRfYnVmZmVyc1tzcmNfaWR4XTsKIAkJYnJlYWs7CiAKIAljYXNlIFJYRF9PUEFRVUVfUklOR19KVU1CTzoKIAkJZGVzdF9pZHggPSBkZXN0X2lkeF91bm1hc2tlZCAlIFRHM19SWF9KVU1CT19SSU5HX1NJWkU7Ci0JCWRlc3RfZGVzYyA9ICZ0cC0+cnhfanVtYm9bZGVzdF9pZHhdOwotCQlkZXN0X21hcCA9ICZ0cC0+cnhfanVtYm9fYnVmZmVyc1tkZXN0X2lkeF07Ci0JCXNyY19kZXNjID0gJnRwLT5yeF9qdW1ib1tzcmNfaWR4XTsKLQkJc3JjX21hcCA9ICZ0cC0+cnhfanVtYm9fYnVmZmVyc1tzcmNfaWR4XTsKKwkJZGVzdF9kZXNjID0gJnRwci0+cnhfam1iW2Rlc3RfaWR4XS5zdGQ7CisJCWRlc3RfbWFwID0gJnRwci0+cnhfam1iX2J1ZmZlcnNbZGVzdF9pZHhdOworCQlzcmNfZGVzYyA9ICZ0cHItPnJ4X2ptYltzcmNfaWR4XS5zdGQ7CisJCXNyY19tYXAgPSAmdHByLT5yeF9qbWJfYnVmZmVyc1tzcmNfaWR4XTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDM5NSwxMyArNDUwNCw2IEBACiAJc3JjX21hcC0+c2tiID0gTlVMTDsKIH0KIAotI2lmIFRHM19WTEFOX1RBR19VU0VECi1zdGF0aWMgaW50IHRnM192bGFuX3J4KHN0cnVjdCB0ZzMgKnRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbl90YWcpCi17Ci0JcmV0dXJuIHZsYW5fZ3JvX3JlY2VpdmUoJnRwLT5uYXBpLCB0cC0+dmxncnAsIHZsYW5fdGFnLCBza2IpOwotfQotI2VuZGlmCi0KIC8qIFRoZSBSWCByaW5nIHNjaGVtZSBpcyBjb21wb3NlZCBvZiBtdWx0aXBsZSByaW5ncyB3aGljaCBwb3N0IGZyZXNoCiAgKiBidWZmZXJzIHRvIHRoZSBjaGlwLCBhbmQgb25lIHNwZWNpYWwgcmluZyB0aGUgY2hpcCB1c2VzIHRvIHJlcG9ydAogICogc3RhdHVzIGJhY2sgdG8gdGhlIGhvc3QuCkBAIC00NDI2LDE0ICs0NTI4LDE2IEBACiAgKiBJZiBib3RoIHRoZSBob3N0IGFuZCBjaGlwIHdlcmUgdG8gd3JpdGUgaW50byB0aGUgc2FtZSByaW5nLCBjYWNoZSBsaW5lCiAgKiBldmljdGlvbiBjb3VsZCBvY2N1ciBzaW5jZSBib3RoIGVudGl0aWVzIHdhbnQgaXQgaW4gYW4gZXhjbHVzaXZlIHN0YXRlLgogICovCi1zdGF0aWMgaW50IHRnM19yeChzdHJ1Y3QgdGczICp0cCwgaW50IGJ1ZGdldCkKK3N0YXRpYyBpbnQgdGczX3J4KHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksIGludCBidWRnZXQpCiB7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CiAJdTMyIHdvcmtfbWFzaywgcnhfc3RkX3Bvc3RlZCA9IDA7Ci0JdTMyIHN3X2lkeCA9IHRwLT5yeF9yY2JfcHRyOworCXUzMiBzd19pZHggPSB0bmFwaS0+cnhfcmNiX3B0cjsKIAl1MTYgaHdfaWR4OwogCWludCByZWNlaXZlZDsKKwlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByID0gJnRwLT5wcm9kcmluZ1swXTsKIAotCWh3X2lkeCA9IHRwLT5od19zdGF0dXMtPmlkeFswXS5yeF9wcm9kdWNlcjsKKwlod19pZHggPSAqKHRuYXBpLT5yeF9yY2JfcHJvZF9pZHgpOwogCS8qCiAJICogV2UgbmVlZCB0byBvcmRlciB0aGUgcmVhZCBvZiBod19pZHggYW5kIHRoZSByZWFkIG9mCiAJICogdGhlIG9wYXF1ZSBjb29raWUuCkBAIC00NDQyLDcgKzQ1NDYsNyBAQAogCXdvcmtfbWFzayA9IDA7CiAJcmVjZWl2ZWQgPSAwOwogCXdoaWxlIChzd19pZHggIT0gaHdfaWR4ICYmIGJ1ZGdldCA+IDApIHsKLQkJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqZGVzYyA9ICZ0cC0+cnhfcmNiW3N3X2lkeF07CisJCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MgKmRlc2MgPSAmdG5hcGktPnJ4X3JjYltzd19pZHhdOwogCQl1bnNpZ25lZCBpbnQgbGVuOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlkbWFfYWRkcl90IGRtYV9hZGRyOwpAQCAtNDQ1MSwyNyArNDU1NSwyNSBAQAogCQlkZXNjX2lkeCA9IGRlc2MtPm9wYXF1ZSAmIFJYRF9PUEFRVUVfSU5ERVhfTUFTSzsKIAkJb3BhcXVlX2tleSA9IGRlc2MtPm9wYXF1ZSAmIFJYRF9PUEFRVUVfUklOR19NQVNLOwogCQlpZiAob3BhcXVlX2tleSA9PSBSWERfT1BBUVVFX1JJTkdfU1REKSB7Ci0JCQlkbWFfYWRkciA9IHBjaV91bm1hcF9hZGRyKCZ0cC0+cnhfc3RkX2J1ZmZlcnNbZGVzY19pZHhdLAotCQkJCQkJICBtYXBwaW5nKTsKLQkJCXNrYiA9IHRwLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0uc2tiOwotCQkJcG9zdF9wdHIgPSAmdHAtPnJ4X3N0ZF9wdHI7CisJCQlzdHJ1Y3QgcmluZ19pbmZvICpyaSA9ICZ0cHItPnJ4X3N0ZF9idWZmZXJzW2Rlc2NfaWR4XTsKKwkJCWRtYV9hZGRyID0gcGNpX3VubWFwX2FkZHIocmksIG1hcHBpbmcpOworCQkJc2tiID0gcmktPnNrYjsKKwkJCXBvc3RfcHRyID0gJnRwci0+cnhfc3RkX3B0cjsKIAkJCXJ4X3N0ZF9wb3N0ZWQrKzsKIAkJfSBlbHNlIGlmIChvcGFxdWVfa2V5ID09IFJYRF9PUEFRVUVfUklOR19KVU1CTykgewotCQkJZG1hX2FkZHIgPSBwY2lfdW5tYXBfYWRkcigmdHAtPnJ4X2p1bWJvX2J1ZmZlcnNbZGVzY19pZHhdLAotCQkJCQkJICBtYXBwaW5nKTsKLQkJCXNrYiA9IHRwLT5yeF9qdW1ib19idWZmZXJzW2Rlc2NfaWR4XS5za2I7Ci0JCQlwb3N0X3B0ciA9ICZ0cC0+cnhfanVtYm9fcHRyOwotCQl9Ci0JCWVsc2UgeworCQkJc3RydWN0IHJpbmdfaW5mbyAqcmkgPSAmdHByLT5yeF9qbWJfYnVmZmVyc1tkZXNjX2lkeF07CisJCQlkbWFfYWRkciA9IHBjaV91bm1hcF9hZGRyKHJpLCBtYXBwaW5nKTsKKwkJCXNrYiA9IHJpLT5za2I7CisJCQlwb3N0X3B0ciA9ICZ0cHItPnJ4X2ptYl9wdHI7CisJCX0gZWxzZQogCQkJZ290byBuZXh0X3BrdF9ub3Bvc3Q7Ci0JCX0KIAogCQl3b3JrX21hc2sgfD0gb3BhcXVlX2tleTsKIAogCQlpZiAoKGRlc2MtPmVycl92bGFuICYgUlhEX0VSUl9NQVNLKSAhPSAwICYmCiAJCSAgICAoZGVzYy0+ZXJyX3ZsYW4gIT0gUlhEX0VSUl9PRERfTklCQkxFX1JDVkRfTUlJKSkgewogCQlkcm9wX2l0OgotCQkJdGczX3JlY3ljbGVfcngodHAsIG9wYXF1ZV9rZXksCisJCQl0ZzNfcmVjeWNsZV9yeCh0bmFwaSwgb3BhcXVlX2tleSwKIAkJCQkgICAgICAgZGVzY19pZHgsICpwb3N0X3B0cik7CiAJCWRyb3BfaXRfbm9fcmVjeWNsZToKIAkJCS8qIE90aGVyIHN0YXRpc3RpY3Mga2VwdCB0cmFjayBvZiBieSBjYXJkLiAqLwpAQCAtNDQ5MSwyMCArNDU5MywxOSBAQAogCQkpIHsKIAkJCWludCBza2Jfc2l6ZTsKIAotCQkJc2tiX3NpemUgPSB0ZzNfYWxsb2Nfcnhfc2tiKHRwLCBvcGFxdWVfa2V5LAorCQkJc2tiX3NpemUgPSB0ZzNfYWxsb2Nfcnhfc2tiKHRuYXBpLCBvcGFxdWVfa2V5LAogCQkJCQkJICAgIGRlc2NfaWR4LCAqcG9zdF9wdHIpOwogCQkJaWYgKHNrYl9zaXplIDwgMCkKIAkJCQlnb3RvIGRyb3BfaXQ7CiAKLQkJCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsIGRtYV9hZGRyLAotCQkJCQkgc2tiX3NpemUgLSB0cC0+cnhfb2Zmc2V0LAorCQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwgZG1hX2FkZHIsIHNrYl9zaXplLAogCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQkJc2tiX3B1dChza2IsIGxlbik7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqY29weV9za2I7CiAKLQkJCXRnM19yZWN5Y2xlX3J4KHRwLCBvcGFxdWVfa2V5LAorCQkJdGczX3JlY3ljbGVfcngodG5hcGksIG9wYXF1ZV9rZXksCiAJCQkJICAgICAgIGRlc2NfaWR4LCAqcG9zdF9wdHIpOwogCiAJCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwKQEAgLTQ1NDEsMTEgKzQ2NDIsMTEgQEAKICNpZiBURzNfVkxBTl9UQUdfVVNFRAogCQlpZiAodHAtPnZsZ3JwICE9IE5VTEwgJiYKIAkJICAgIGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19WTEFOKSB7Ci0JCQl0ZzNfdmxhbl9yeCh0cCwgc2tiLAotCQkJCSAgICBkZXNjLT5lcnJfdmxhbiAmIFJYRF9WTEFOX01BU0spOworCQkJdmxhbl9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHRwLT52bGdycCwKKwkJCQkJIGRlc2MtPmVycl92bGFuICYgUlhEX1ZMQU5fTUFTSywgc2tiKTsKIAkJfSBlbHNlCiAjZW5kaWYKLQkJCW5hcGlfZ3JvX3JlY2VpdmUoJnRwLT5uYXBpLCBza2IpOworCQkJbmFwaV9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHNrYik7CiAKIAkJcmVjZWl2ZWQrKzsKIAkJYnVkZ2V0LS07CkBAIC00NTY3LDIzICs0NjY4LDIzIEBACiAKIAkJLyogUmVmcmVzaCBod19pZHggdG8gc2VlIGlmIHRoZXJlIGlzIG5ldyB3b3JrICovCiAJCWlmIChzd19pZHggPT0gaHdfaWR4KSB7Ci0JCQlod19pZHggPSB0cC0+aHdfc3RhdHVzLT5pZHhbMF0ucnhfcHJvZHVjZXI7CisJCQlod19pZHggPSAqKHRuYXBpLT5yeF9yY2JfcHJvZF9pZHgpOwogCQkJcm1iKCk7CiAJCX0KIAl9CiAKIAkvKiBBQ0sgdGhlIHN0YXR1cyByaW5nLiAqLwotCXRwLT5yeF9yY2JfcHRyID0gc3dfaWR4OwotCXR3MzJfcnhfbWJveChNQUlMQk9YX1JDVlJFVF9DT05fSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgc3dfaWR4KTsKKwl0bmFwaS0+cnhfcmNiX3B0ciA9IHN3X2lkeDsKKwl0dzMyX3J4X21ib3godG5hcGktPmNvbnNtYm94LCBzd19pZHgpOwogCiAJLyogUmVmaWxsIFJYIHJpbmcocykuICovCiAJaWYgKHdvcmtfbWFzayAmIFJYRF9PUEFRVUVfUklOR19TVEQpIHsKLQkJc3dfaWR4ID0gdHAtPnJ4X3N0ZF9wdHIgJSBURzNfUlhfUklOR19TSVpFOworCQlzd19pZHggPSB0cHItPnJ4X3N0ZF9wdHIgJSBURzNfUlhfUklOR19TSVpFOwogCQl0dzMyX3J4X21ib3goTUFJTEJPWF9SQ1ZfU1REX1BST0RfSURYICsgVEczXzY0QklUX1JFR19MT1csCiAJCQkgICAgIHN3X2lkeCk7CiAJfQogCWlmICh3b3JrX21hc2sgJiBSWERfT1BBUVVFX1JJTkdfSlVNQk8pIHsKLQkJc3dfaWR4ID0gdHAtPnJ4X2p1bWJvX3B0ciAlIFRHM19SWF9KVU1CT19SSU5HX1NJWkU7CisJCXN3X2lkeCA9IHRwci0+cnhfam1iX3B0ciAlIFRHM19SWF9KVU1CT19SSU5HX1NJWkU7CiAJCXR3MzJfcnhfbWJveChNQUlMQk9YX1JDVl9KVU1CT19QUk9EX0lEWCArIFRHM182NEJJVF9SRUdfTE9XLAogCQkJICAgICBzd19pZHgpOwogCX0KQEAgLTQ1OTIsOSArNDY5MywxMCBAQAogCXJldHVybiByZWNlaXZlZDsKIH0KIAotc3RhdGljIGludCB0ZzNfcG9sbF93b3JrKHN0cnVjdCB0ZzMgKnRwLCBpbnQgd29ya19kb25lLCBpbnQgYnVkZ2V0KQorc3RhdGljIGludCB0ZzNfcG9sbF93b3JrKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksIGludCB3b3JrX2RvbmUsIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0cC0+aHdfc3RhdHVzOworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOworCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdG5hcGktPmh3X3N0YXR1czsKIAogCS8qIGhhbmRsZSBsaW5rIGNoYW5nZSBhbmQgb3RoZXIgcGh5IGV2ZW50cyAqLwogCWlmICghKHRwLT50ZzNfZmxhZ3MgJgpAQCAtNDYxOCw4ICs0NzIwLDggQEAKIAl9CiAKIAkvKiBydW4gVFggY29tcGxldGlvbiB0aHJlYWQgKi8KLQlpZiAoc2Jsay0+aWR4WzBdLnR4X2NvbnN1bWVyICE9IHRwLT50eF9jb25zKSB7Ci0JCXRnM190eCh0cCk7CisJaWYgKHRuYXBpLT5od19zdGF0dXMtPmlkeFswXS50eF9jb25zdW1lciAhPSB0bmFwaS0+dHhfY29ucykgeworCQl0ZzNfdHgodG5hcGkpOwogCQlpZiAodW5saWtlbHkodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkcpKQogCQkJcmV0dXJuIHdvcmtfZG9uZTsKIAl9CkBAIC00NjI4LDIwICs0NzMwLDIxIEBACiAJICogQWxsIFJYICJsb2NraW5nIiBpcyBkb25lIGJ5IGVuc3VyaW5nIG91dHNpZGUKIAkgKiBjb2RlIHN5bmNocm9uaXplcyB3aXRoIHRnMy0+bmFwaS5wb2xsKCkKIAkgKi8KLQlpZiAoc2Jsay0+aWR4WzBdLnJ4X3Byb2R1Y2VyICE9IHRwLT5yeF9yY2JfcHRyKQotCQl3b3JrX2RvbmUgKz0gdGczX3J4KHRwLCBidWRnZXQgLSB3b3JrX2RvbmUpOworCWlmICgqKHRuYXBpLT5yeF9yY2JfcHJvZF9pZHgpICE9IHRuYXBpLT5yeF9yY2JfcHRyKQorCQl3b3JrX2RvbmUgKz0gdGczX3J4KHRuYXBpLCBidWRnZXQgLSB3b3JrX2RvbmUpOwogCiAJcmV0dXJuIHdvcmtfZG9uZTsKIH0KIAogc3RhdGljIGludCB0ZzNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IHRnMyAqdHAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHRnMywgbmFwaSk7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgdGczX25hcGksIG5hcGkpOworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOwogCWludCB3b3JrX2RvbmUgPSAwOwotCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdHAtPmh3X3N0YXR1czsKKwlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsayA9IHRuYXBpLT5od19zdGF0dXM7CiAKIAl3aGlsZSAoMSkgewotCQl3b3JrX2RvbmUgPSB0ZzNfcG9sbF93b3JrKHRwLCB3b3JrX2RvbmUsIGJ1ZGdldCk7CisJCXdvcmtfZG9uZSA9IHRnM19wb2xsX3dvcmsodG5hcGksIHdvcmtfZG9uZSwgYnVkZ2V0KTsKIAogCQlpZiAodW5saWtlbHkodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkcpKQogCQkJZ290byB0eF9yZWNvdmVyeTsKQEAgLTQ2NTAsMTkgKzQ3NTMsMTkgQEAKIAkJCWJyZWFrOwogCiAJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgewotCQkJLyogdHAtPmxhc3RfdGFnIGlzIHVzZWQgaW4gdGczX3Jlc3RhcnRfaW50cygpIGJlbG93CisJCQkvKiB0cC0+bGFzdF90YWcgaXMgdXNlZCBpbiB0ZzNfaW50X3JlZW5hYmxlKCkgYmVsb3cKIAkJCSAqIHRvIHRlbGwgdGhlIGh3IGhvdyBtdWNoIHdvcmsgaGFzIGJlZW4gcHJvY2Vzc2VkLAogCQkJICogc28gd2UgbXVzdCByZWFkIGl0IGJlZm9yZSBjaGVja2luZyBmb3IgbW9yZSB3b3JrLgogCQkJICovCi0JCQl0cC0+bGFzdF90YWcgPSBzYmxrLT5zdGF0dXNfdGFnOwotCQkJdHAtPmxhc3RfaXJxX3RhZyA9IHRwLT5sYXN0X3RhZzsKKwkJCXRuYXBpLT5sYXN0X3RhZyA9IHNibGstPnN0YXR1c190YWc7CisJCQl0bmFwaS0+bGFzdF9pcnFfdGFnID0gdG5hcGktPmxhc3RfdGFnOwogCQkJcm1iKCk7CiAJCX0gZWxzZQogCQkJc2Jsay0+c3RhdHVzICY9IH5TRF9TVEFUVVNfVVBEQVRFRDsKIAotCQlpZiAobGlrZWx5KCF0ZzNfaGFzX3dvcmsodHApKSkgeworCQlpZiAobGlrZWx5KCF0ZzNfaGFzX3dvcmsodG5hcGkpKSkgewogCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKLQkJCXRnM19yZXN0YXJ0X2ludHModHApOworCQkJdGczX2ludF9yZWVuYWJsZSh0bmFwaSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTQ2NzgsMTIgKzQ3ODEsMTUgQEAKIAogc3RhdGljIHZvaWQgdGczX2lycV9xdWllc2NlKHN0cnVjdCB0ZzMgKnRwKQogeworCWludCBpOworCiAJQlVHX09OKHRwLT5pcnFfc3luYyk7CiAKIAl0cC0+aXJxX3N5bmMgPSAxOwogCXNtcF9tYigpOwogCi0Jc3luY2hyb25pemVfaXJxKHRwLT5wZGV2LT5pcnEpOworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKQorCQlzeW5jaHJvbml6ZV9pcnEodHAtPm5hcGlbaV0uaXJxX3ZlYyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHRnM19pcnFfc3luYyhzdHJ1Y3QgdGczICp0cCkKQEAgLTQ3MTMsMTQgKzQ4MTksMTUgQEAKICAqLwogc3RhdGljIGlycXJldHVybl90IHRnM19tc2lfMXNob3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSBkZXZfaWQ7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CiAKLQlwcmVmZXRjaCh0cC0+aHdfc3RhdHVzKTsKLQlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOworCXByZWZldGNoKHRuYXBpLT5od19zdGF0dXMpOworCWlmICh0bmFwaS0+cnhfcmNiKQorCQlwcmVmZXRjaCgmdG5hcGktPnJ4X3JjYlt0bmFwaS0+cnhfcmNiX3B0cl0pOwogCiAJaWYgKGxpa2VseSghdGczX2lycV9zeW5jKHRwKSkpCi0JCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdG5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDczMSwxMSArNDgzOCwxMiBAQAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGczX21zaShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9IGRldl9pZDsKKwlzdHJ1Y3QgdGczICp0cCA9IHRuYXBpLT50cDsKIAotCXByZWZldGNoKHRwLT5od19zdGF0dXMpOwotCXByZWZldGNoKCZ0cC0+cnhfcmNiW3RwLT5yeF9yY2JfcHRyXSk7CisJcHJlZmV0Y2godG5hcGktPmh3X3N0YXR1cyk7CisJaWYgKHRuYXBpLT5yeF9yY2IpCisJCXByZWZldGNoKCZ0bmFwaS0+cnhfcmNiW3RuYXBpLT5yeF9yY2JfcHRyXSk7CiAJLyoKIAkgKiBXcml0aW5nIGFueSB2YWx1ZSB0byBpbnRyLW1ib3gtMCBjbGVhcnMgUENJIElOVEEjIGFuZAogCSAqIGNoaXAtaW50ZXJuYWwgaW50ZXJydXB0IHBlbmRpbmcgZXZlbnRzLgpAQCAtNDc0NSwxNiArNDg1MywxNiBAQAogCSAqLwogCXR3MzJfbWFpbGJveChNQUlMQk9YX0lOVEVSUlVQVF8wICsgVEczXzY0QklUX1JFR19MT1csIDB4MDAwMDAwMDEpOwogCWlmIChsaWtlbHkoIXRnM19pcnFfc3luYyh0cCkpKQotCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnRuYXBpLT5uYXBpKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKDEpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgdGczX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0cC0+aHdfc3RhdHVzOworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSBkZXZfaWQ7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CisJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0bmFwaS0+aHdfc3RhdHVzOwogCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMTsKIAogCS8qIEluIElOVHggbW9kZSwgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gYXJyaXZlIGF0CkBAIC00Nzg1LDkgKzQ4OTMsOSBAQAogCWlmICh0ZzNfaXJxX3N5bmModHApKQogCQlnb3RvIG91dDsKIAlzYmxrLT5zdGF0dXMgJj0gflNEX1NUQVRVU19VUERBVEVEOwotCWlmIChsaWtlbHkodGczX2hhc193b3JrKHRwKSkpIHsKLQkJcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKLQkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOworCWlmIChsaWtlbHkodGczX2hhc193b3JrKHRuYXBpKSkpIHsKKwkJcHJlZmV0Y2goJnRuYXBpLT5yeF9yY2JbdG5hcGktPnJ4X3JjYl9wdHJdKTsKKwkJbmFwaV9zY2hlZHVsZSgmdG5hcGktPm5hcGkpOwogCX0gZWxzZSB7CiAJCS8qIE5vIHdvcmssIHNoYXJlZCBpbnRlcnJ1cHQgcGVyaGFwcz8gIHJlLWVuYWJsZQogCQkgKiBpbnRlcnJ1cHRzLCBhbmQgZmx1c2ggdGhhdCBQQ0kgd3JpdGUKQEAgLTQ4MDEsOSArNDkwOSw5IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0ZzNfaW50ZXJydXB0X3RhZ2dlZChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0cC0+aHdfc3RhdHVzOworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSBkZXZfaWQ7CisJc3RydWN0IHRnMyAqdHAgPSB0bmFwaS0+dHA7CisJc3RydWN0IHRnM19od19zdGF0dXMgKnNibGsgPSB0bmFwaS0+aHdfc3RhdHVzOwogCXVuc2lnbmVkIGludCBoYW5kbGVkID0gMTsKIAogCS8qIEluIElOVHggbW9kZSwgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gYXJyaXZlIGF0CkBAIC00ODExLDcgKzQ5MTksNyBAQAogCSAqIFJlYWRpbmcgdGhlIFBDSSBTdGF0ZSByZWdpc3RlciB3aWxsIGNvbmZpcm0gd2hldGhlciB0aGUKIAkgKiBpbnRlcnJ1cHQgaXMgb3VycyBhbmQgd2lsbCBmbHVzaCB0aGUgc3RhdHVzIGJsb2NrLgogCSAqLwotCWlmICh1bmxpa2VseShzYmxrLT5zdGF0dXNfdGFnID09IHRwLT5sYXN0X2lycV90YWcpKSB7CisJaWYgKHVubGlrZWx5KHNibGstPnN0YXR1c190YWcgPT0gdG5hcGktPmxhc3RfaXJxX3RhZykpIHsKIAkJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkcpIHx8CiAJCSAgICAodHIzMihURzNQQ0lfUENJU1RBVEUpICYgUENJU1RBVEVfSU5UX05PVF9BQ1RJVkUpKSB7CiAJCQloYW5kbGVkID0gMDsKQEAgLTQ4MzgsMTQgKzQ5NDYsMTQgQEAKIAkgKiBzbyB0aGF0IHRoZSBhYm92ZSBjaGVjayBjYW4gcmVwb3J0IHRoYXQgdGhlIHNjcmVhbWluZyBpbnRlcnJ1cHRzCiAJICogYXJlIHVuaGFuZGxlZC4gIEV2ZW50dWFsbHkgdGhleSB3aWxsIGJlIHNpbGVuY2VkLgogCSAqLwotCXRwLT5sYXN0X2lycV90YWcgPSBzYmxrLT5zdGF0dXNfdGFnOworCXRuYXBpLT5sYXN0X2lycV90YWcgPSBzYmxrLT5zdGF0dXNfdGFnOwogCiAJaWYgKHRnM19pcnFfc3luYyh0cCkpCiAJCWdvdG8gb3V0OwogCi0JcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKKwlwcmVmZXRjaCgmdG5hcGktPnJ4X3JjYlt0bmFwaS0+cnhfcmNiX3B0cl0pOwogCi0JbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnRuYXBpLT5uYXBpKTsKIAogb3V0OgogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwpAQCAtNDg1NCw5ICs0OTYyLDkgQEAKIC8qIElTUiBmb3IgaW50ZXJydXB0IHRlc3QgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCB0ZzNfdGVzdF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdHAtPmh3X3N0YXR1czsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gZGV2X2lkOworCXN0cnVjdCB0ZzMgKnRwID0gdG5hcGktPnRwOworCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdG5hcGktPmh3X3N0YXR1czsKIAogCWlmICgoc2Jsay0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpIHx8CiAJICAgICEodHIzMihURzNQQ0lfUENJU1RBVEUpICYgUENJU1RBVEVfSU5UX05PVF9BQ1RJVkUpKSB7CkBAIC00ODg2LDcgKzQ5OTQsNyBAQAogCQl0ZzNfZnVsbF91bmxvY2sodHApOwogCQlkZWxfdGltZXJfc3luYygmdHAtPnRpbWVyKTsKIAkJdHAtPmlycV9zeW5jID0gMDsKLQkJbmFwaV9lbmFibGUoJnRwLT5uYXBpKTsKKwkJdGczX25hcGlfZW5hYmxlKHRwKTsKIAkJZGV2X2Nsb3NlKHRwLT5kZXYpOwogCQl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKIAl9CkBAIC00ODk2LDkgKzUwMDQsMTEgQEAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgdGczX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCBpOwogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXRnM19pbnRlcnJ1cHQodHAtPnBkZXYtPmlycSwgZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykKKwkJdGczX2ludGVycnVwdCh0cC0+bmFwaVtpXS5pcnFfdmVjLCBkZXYpOwogfQogI2VuZGlmCiAKQEAgLTQ5OTMsMTMgKzUxMDMsMTQgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCB0ZzNfc2V0X3R4ZChzdHJ1Y3QgdGczICosIGludCwgZG1hX2FkZHJfdCwgaW50LCB1MzIsIHUzMik7CitzdGF0aWMgdm9pZCB0ZzNfc2V0X3R4ZChzdHJ1Y3QgdGczX25hcGkgKiwgaW50LCBkbWFfYWRkcl90LCBpbnQsIHUzMiwgdTMyKTsKIAogLyogV29ya2Fyb3VuZCA0R0IgYW5kIDQwLWJpdCBoYXJkd2FyZSBETUEgYnVncy4gKi8KIHN0YXRpYyBpbnQgdGlnb24zX2RtYV9od2J1Z193b3JrYXJvdW5kKHN0cnVjdCB0ZzMgKnRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICB1MzIgbGFzdF9wbHVzX29uZSwgdTMyICpzdGFydCwKIAkJCQkgICAgICAgdTMyIGJhc2VfZmxhZ3MsIHUzMiBtc3MpCiB7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVswXTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKIAlkbWFfYWRkcl90IG5ld19hZGRyID0gMDsKIAl1MzIgZW50cnkgPSAqc3RhcnQ7CkBAIC01MDM0LDcgKzUxNDUsNyBAQAogCQkJZGV2X2tmcmVlX3NrYihuZXdfc2tiKTsKIAkJCW5ld19za2IgPSBOVUxMOwogCQl9IGVsc2UgewotCQkJdGczX3NldF90eGQodHAsIGVudHJ5LCBuZXdfYWRkciwgbmV3X3NrYi0+bGVuLAorCQkJdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBuZXdfYWRkciwgbmV3X3NrYi0+bGVuLAogCQkJCSAgICBiYXNlX2ZsYWdzLCAxIHwgKG1zcyA8PCAxKSk7CiAJCQkqc3RhcnQgPSBORVhUX1RYKGVudHJ5KTsKIAkJfQpAQCAtNTA0MywxMSArNTE1NCwxMCBAQAogCS8qIE5vdyBjbGVhbiB1cCB0aGUgc3cgcmluZyBlbnRyaWVzLiAqLwogCWkgPSAwOwogCXdoaWxlIChlbnRyeSAhPSBsYXN0X3BsdXNfb25lKSB7Ci0JCWlmIChpID09IDApIHsKLQkJCXRwLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBuZXdfc2tiOwotCQl9IGVsc2UgewotCQkJdHAtPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IE5VTEw7Ci0JCX0KKwkJaWYgKGkgPT0gMCkKKwkJCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBuZXdfc2tiOworCQllbHNlCisJCQl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKIAkJZW50cnkgPSBORVhUX1RYKGVudHJ5KTsKIAkJaSsrOwogCX0KQEAgLTUwNTgsMTEgKzUxNjgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCB0ZzNfc2V0X3R4ZChzdHJ1Y3QgdGczICp0cCwgaW50IGVudHJ5LAorc3RhdGljIHZvaWQgdGczX3NldF90eGQoc3RydWN0IHRnM19uYXBpICp0bmFwaSwgaW50IGVudHJ5LAogCQkJZG1hX2FkZHJfdCBtYXBwaW5nLCBpbnQgbGVuLCB1MzIgZmxhZ3MsCiAJCQl1MzIgbXNzX2FuZF9pc19lbmQpCiB7Ci0Jc3RydWN0IHRnM190eF9idWZmZXJfZGVzYyAqdHhkID0gJnRwLT50eF9yaW5nW2VudHJ5XTsKKwlzdHJ1Y3QgdGczX3R4X2J1ZmZlcl9kZXNjICp0eGQgPSAmdG5hcGktPnR4X3JpbmdbZW50cnldOwogCWludCBpc19lbmQgPSAobXNzX2FuZF9pc19lbmQgJiAweDEpOwogCXUzMiBtc3MgPSAobXNzX2FuZF9pc19lbmQgPj4gMSk7CiAJdTMyIHZsYW5fdGFnID0gMDsKQEAgLTUwODQsMjMgKzUxOTQsMjkgQEAKIC8qIGhhcmRfc3RhcnRfeG1pdCBmb3IgZGV2aWNlcyB0aGF0IGRvbid0IGhhdmUgYW55IGJ1Z3MgYW5kCiAgKiBzdXBwb3J0IFRHM19GTEcyX0hXX1RTT18yIG9ubHkuCiAgKi8KLXN0YXRpYyBpbnQgdGczX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB0ZzNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGxlbiwgZW50cnksIGJhc2VfZmxhZ3MsIG1zczsKIAlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzcDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CisJc3RydWN0IHRnM19uYXBpICp0bmFwaTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAKLQlsZW4gPSBza2JfaGVhZGxlbihza2IpOworCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisJdG5hcGkgPSAmdHAtPm5hcGlbc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpCisJCXRuYXBpKys7CiAKIAkvKiBXZSBhcmUgcnVubmluZyBpbiBCSCBkaXNhYmxlZCBjb250ZXh0IHdpdGggbmV0aWZfdHhfbG9jawogCSAqIGFuZCBUWCByZWNsYWltIHJ1bnMgdmlhIHRwLT5uYXBpLnBvbGwgaW5zaWRlIG9mIGEgc29mdHdhcmUKIAkgKiBpbnRlcnJ1cHQuICBGdXJ0aGVybW9yZSwgSVJRIHByb2Nlc3NpbmcgcnVucyBsb2NrbGVzcyBzbyB3ZSBoYXZlCiAJICogbm8gSVJRIGNvbnRleHQgZGVhZGxvY2tzIHRvIHdvcnJ5IGFib3V0IGVpdGhlci4gIFJlam9pY2UhCiAJICovCi0JaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkpIHsKLQkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRuYXBpKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgeworCQlpZiAoIW5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgeworCQkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwogCiAJCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLwogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gIgpAQCAtNTEwOSwxMSArNTIyNSwxMiBAQAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JZW50cnkgPSB0cC0+dHhfcHJvZDsKKwllbnRyeSA9IHRuYXBpLT50eF9wcm9kOwogCWJhc2VfZmxhZ3MgPSAwOwogCW1zcyA9IDA7CiAJaWYgKChtc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKSAhPSAwKSB7CiAJCWludCB0Y3Bfb3B0X2xlbiwgaXBfdGNwX2xlbjsKKwkJdTMyIGhkcmxlbjsKIAogCQlpZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSAmJgogCQkgICAgcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSB7CkBAIC01MTIyLDcgKzUyMzksNyBAQAogCQl9CiAKIAkJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2KQotCQkJbXNzIHw9IChza2JfaGVhZGxlbihza2IpIC0gRVRIX0hMRU4pIDw8IDk7CisJCQloZHJsZW4gPSBza2JfaGVhZGxlbihza2IpIC0gRVRIX0hMRU47CiAJCWVsc2UgewogCQkJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIApAQCAtNTEzMSw5ICs1MjQ4LDE3IEBACiAKIAkJCWlwaC0+Y2hlY2sgPSAwOwogCQkJaXBoLT50b3RfbGVuID0gaHRvbnMobXNzICsgaXBfdGNwX2xlbiArIHRjcF9vcHRfbGVuKTsKLQkJCW1zcyB8PSAoaXBfdGNwX2xlbiArIHRjcF9vcHRfbGVuKSA8PCA5OworCQkJaGRybGVuID0gaXBfdGNwX2xlbiArIHRjcF9vcHRfbGVuOwogCQl9CiAKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KSB7CisJCQltc3MgfD0gKGhkcmxlbiAmIDB4YykgPDwgMTI7CisJCQlpZiAoaGRybGVuICYgMHgxMCkKKwkJCQliYXNlX2ZsYWdzIHw9IDB4MDAwMDAwMTA7CisJCQliYXNlX2ZsYWdzIHw9IChoZHJsZW4gJiAweDNlMCkgPDwgNTsKKwkJfSBlbHNlCisJCQltc3MgfD0gaGRybGVuIDw8IDk7CisKIAkJYmFzZV9mbGFncyB8PSAoVFhEX0ZMQUdfQ1BVX1BSRV9ETUEgfAogCQkJICAgICAgIFRYRF9GTEFHX0NQVV9QT1NUX0RNQSk7CiAKQEAgLTUxNTcsOSArNTI4MiwxNSBAQAogCiAJbWFwcGluZyA9IHNwLT5kbWFfaGVhZDsKIAotCXRwLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBza2I7CisJdG5hcGktPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IHNrYjsKIAotCXRnM19zZXRfdHhkKHRwLCBlbnRyeSwgbWFwcGluZywgbGVuLCBiYXNlX2ZsYWdzLAorCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgJiYKKwkgICAgIW1zcyAmJiBza2ItPmxlbiA+IEVUSF9EQVRBX0xFTikKKwkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19KTUJfUEtUOworCisJdGczX3NldF90eGQodG5hcGksIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGJhc2VfZmxhZ3MsCiAJCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKSB8IChtc3MgPDwgMSkpOwogCiAJZW50cnkgPSBORVhUX1RYKGVudHJ5KTsKQEAgLTUxNzQsOSArNTMwNSw5IEBACiAKIAkJCWxlbiA9IGZyYWctPnNpemU7CiAJCQltYXBwaW5nID0gc3AtPmRtYV9tYXBzW2ldOwotCQkJdHAtPnR4X2J1ZmZlcnNbZW50cnldLnNrYiA9IE5VTEw7CisJCQl0bmFwaS0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKIAotCQkJdGczX3NldF90eGQodHAsIGVudHJ5LCBtYXBwaW5nLCBsZW4sCisJCQl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG1hcHBpbmcsIGxlbiwKIAkJCQkgICAgYmFzZV9mbGFncywgKGkgPT0gbGFzdCkgfCAobXNzIDw8IDEpKTsKIAogCQkJZW50cnkgPSBORVhUX1RYKGVudHJ5KTsKQEAgLTUxODQsMTMgKzUzMTUsMTMgQEAKIAl9CiAKIAkvKiBQYWNrZXRzIGFyZSByZWFkeSwgdXBkYXRlIFR4IHByb2R1Y2VyIGlkeCBsb2NhbCBhbmQgb24gY2FyZC4gKi8KLQl0dzMyX3R4X21ib3goKE1BSUxCT1hfU05ESE9TVF9QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1cpLCBlbnRyeSk7CisJdHczMl90eF9tYm94KHRuYXBpLT5wcm9kbWJveCwgZW50cnkpOwogCi0JdHAtPnR4X3Byb2QgPSBlbnRyeTsKLQlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRwKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKSkgewotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCWlmICh0ZzNfdHhfYXZhaWwodHApID4gVEczX1RYX1dBS0VVUF9USFJFU0godHApKQotCQkJbmV0aWZfd2FrZV9xdWV1ZSh0cC0+ZGV2KTsKKwl0bmFwaS0+dHhfcHJvZCA9IGVudHJ5OworCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodG5hcGkpIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CisJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKKwkJaWYgKHRnM190eF9hdmFpbCh0bmFwaSkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCh0bmFwaSkpCisJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CiAJfQogCiBvdXRfdW5sb2NrOgpAQCAtNTE5OSw3ICs1MzMwLDggQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgaW50IHRnM19zdGFydF94bWl0X2RtYV9idWcoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdGczX3N0YXJ0X3htaXRfZG1hX2J1ZyhzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICopOwogCiAvKiBVc2UgR1NPIHRvIHdvcmthcm91bmQgYSByYXJlIFRTTyBidWcgdGhhdCBtYXkgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlCiAgKiBUU08gaGVhZGVyIGlzIGdyZWF0ZXIgdGhhbiA4MCBieXRlcy4KQEAgLTUyMDcsMTEgKzUzMzksMTIgQEAKIHN0YXRpYyBpbnQgdGczX3Rzb19idWcoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuc2tiOworCXUzMiBmcmFnX2NudF9lc3QgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICogMzsKIAogCS8qIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgZnJhZ21lbnRzIGluIHRoZSB3b3JzdCBjYXNlICovCi0JaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKiAzKSkpIHsKKwlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKCZ0cC0+bmFwaVswXSkgPD0gZnJhZ19jbnRfZXN0KSkgewogCQluZXRpZl9zdG9wX3F1ZXVlKHRwLT5kZXYpOwotCQlpZiAodGczX3R4X2F2YWlsKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyAqIDMpKQorCQlpZiAodGczX3R4X2F2YWlsKCZ0cC0+bmFwaVswXSkgPD0gZnJhZ19jbnRfZXN0KQogCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCiAJCW5ldGlmX3dha2VfcXVldWUodHAtPmRldik7CkBAIC01MjM3LDEzICs1MzcwLDE1IEBACiAvKiBoYXJkX3N0YXJ0X3htaXQgZm9yIGRldmljZXMgdGhhdCBoYXZlIHRoZSA0RyBidWcgYW5kL29yIDQwLWJpdCBidWcgYW5kCiAgKiBzdXBwb3J0IFRHM19GTEcyX0hXX1RTT18xIG9yIGZpcm13YXJlIFRTTyBvbmx5LgogICovCi1zdGF0aWMgaW50IHRnM19zdGFydF94bWl0X2RtYV9idWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB0ZzNfc3RhcnRfeG1pdF9kbWFfYnVnKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGxlbiwgZW50cnksIGJhc2VfZmxhZ3MsIG1zczsKIAlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzcDsKIAlpbnQgd291bGRfaGl0X2h3YnVnOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpWzBdOwogCiAJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIApAQCAtNTI1Miw3ICs1Mzg3LDcgQEAKIAkgKiBpbnRlcnJ1cHQuICBGdXJ0aGVybW9yZSwgSVJRIHByb2Nlc3NpbmcgcnVucyBsb2NrbGVzcyBzbyB3ZSBoYXZlCiAJICogbm8gSVJRIGNvbnRleHQgZGVhZGxvY2tzIHRvIHdvcnJ5IGFib3V0IGVpdGhlci4gIFJlam9pY2UhCiAJICovCi0JaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkpIHsKKwlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRuYXBpKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgewogCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC01MjYzLDcgKzUzOTgsNyBAQAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JZW50cnkgPSB0cC0+dHhfcHJvZDsKKwllbnRyeSA9IHRuYXBpLT50eF9wcm9kOwogCWJhc2VfZmxhZ3MgPSAwOwogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQogCQliYXNlX2ZsYWdzIHw9IFRYRF9GTEFHX1RDUFVEUF9DU1VNOwpAQCAtNTMzMyw3ICs1NDY4LDcgQEAKIAogCW1hcHBpbmcgPSBzcC0+ZG1hX2hlYWQ7CiAKLQl0cC0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gc2tiOworCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBza2I7CiAKIAl3b3VsZF9oaXRfaHdidWcgPSAwOwogCkBAIC01MzQyLDcgKzU0NzcsNyBAQAogCWVsc2UgaWYgKHRnM180Z19vdmVyZmxvd190ZXN0KG1hcHBpbmcsIGxlbikpCiAJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKLQl0ZzNfc2V0X3R4ZCh0cCwgZW50cnksIG1hcHBpbmcsIGxlbiwgYmFzZV9mbGFncywKKwl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG1hcHBpbmcsIGxlbiwgYmFzZV9mbGFncywKIAkJICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID09IDApIHwgKG1zcyA8PCAxKSk7CiAKIAllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwpAQCAtNTM1OCw3ICs1NDkzLDcgQEAKIAkJCWxlbiA9IGZyYWctPnNpemU7CiAJCQltYXBwaW5nID0gc3AtPmRtYV9tYXBzW2ldOwogCi0JCQl0cC0+dHhfYnVmZmVyc1tlbnRyeV0uc2tiID0gTlVMTDsKKwkJCXRuYXBpLT50eF9idWZmZXJzW2VudHJ5XS5za2IgPSBOVUxMOwogCiAJCQlpZiAodGczXzRnX292ZXJmbG93X3Rlc3QobWFwcGluZywgbGVuKSkKIAkJCQl3b3VsZF9oaXRfaHdidWcgPSAxOwpAQCAtNTM2NywxMCArNTUwMiwxMCBAQAogCQkJCXdvdWxkX2hpdF9od2J1ZyA9IDE7CiAKIAkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykKLQkJCQl0ZzNfc2V0X3R4ZCh0cCwgZW50cnksIG1hcHBpbmcsIGxlbiwKKwkJCQl0ZzNfc2V0X3R4ZCh0bmFwaSwgZW50cnksIG1hcHBpbmcsIGxlbiwKIAkJCQkJICAgIGJhc2VfZmxhZ3MsIChpID09IGxhc3QpfChtc3MgPDwgMSkpOwogCQkJZWxzZQotCQkJCXRnM19zZXRfdHhkKHRwLCBlbnRyeSwgbWFwcGluZywgbGVuLAorCQkJCXRnM19zZXRfdHhkKHRuYXBpLCBlbnRyeSwgbWFwcGluZywgbGVuLAogCQkJCQkgICAgYmFzZV9mbGFncywgKGkgPT0gbGFzdCkpOwogCiAJCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwpAQCAtNTM5NSwxMiArNTUzMCwxMiBAQAogCX0KIAogCS8qIFBhY2tldHMgYXJlIHJlYWR5LCB1cGRhdGUgVHggcHJvZHVjZXIgaWR4IGxvY2FsIGFuZCBvbiBjYXJkLiAqLwotCXR3MzJfdHhfbWJveCgoTUFJTEJPWF9TTkRIT1NUX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVyksIGVudHJ5KTsKKwl0dzMyX3R4X21ib3goTUFJTEJPWF9TTkRIT1NUX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgZW50cnkpOwogCi0JdHAtPnR4X3Byb2QgPSBlbnRyeTsKLQlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRwKSA8PSAoTUFYX1NLQl9GUkFHUyArIDEpKSkgeworCXRuYXBpLT50eF9wcm9kID0gZW50cnk7CisJaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0bmFwaSkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlpZiAodGczX3R4X2F2YWlsKHRwKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKHRwKSkKKwkJaWYgKHRnM190eF9hdmFpbCh0bmFwaSkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCh0bmFwaSkpCiAJCQluZXRpZl93YWtlX3F1ZXVlKHRwLT5kZXYpOwogCX0KIApAQCAtNTQ2OCw2ICs1NjAzLDE4OCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIHRnM19yeF9wcm9kcmluZ19mcmVlKHN0cnVjdCB0ZzMgKnRwLAorCQkJCSBzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByKQoreworCWludCBpOworCXN0cnVjdCByaW5nX2luZm8gKnJ4cDsKKworCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfUklOR19TSVpFOyBpKyspIHsKKwkJcnhwID0gJnRwci0+cnhfc3RkX2J1ZmZlcnNbaV07CisKKwkJaWYgKHJ4cC0+c2tiID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wZGV2LAorCQkJCSBwY2lfdW5tYXBfYWRkcihyeHAsIG1hcHBpbmcpLAorCQkJCSB0cC0+cnhfcGt0X21hcF9zeiwKKwkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkocnhwLT5za2IpOworCQlyeHAtPnNrYiA9IE5VTEw7CisJfQorCisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfSlVNQk9fUklOR19TSVpFOyBpKyspIHsKKwkJCXJ4cCA9ICZ0cHItPnJ4X2ptYl9idWZmZXJzW2ldOworCisJCQlpZiAocnhwLT5za2IgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwKKwkJCQkJIHBjaV91bm1hcF9hZGRyKHJ4cCwgbWFwcGluZyksCisJCQkJCSBURzNfUlhfSk1CX01BUF9TWiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShyeHAtPnNrYik7CisJCQlyeHAtPnNrYiA9IE5VTEw7CisJCX0KKwl9Cit9CisKKy8qIEluaXRpYWxpemUgdHgvcnggcmluZ3MgZm9yIHBhY2tldCBwcm9jZXNzaW5nLgorICoKKyAqIFRoZSBjaGlwIGhhcyBiZWVuIHNodXQgZG93biBhbmQgdGhlIGRyaXZlciBkZXRhY2hlZCBmcm9tCisgKiB0aGUgbmV0d29ya2luZywgc28gbm8gaW50ZXJydXB0cyBvciBuZXcgdHggcGFja2V0cyB3aWxsCisgKiBlbmQgdXAgaW4gdGhlIGRyaXZlci4gIHRwLT57dHgsfWxvY2sgYXJlIGhlbGQgYW5kIHRodXMKKyAqIHdlIG1heSBub3Qgc2xlZXAuCisgKi8KK3N0YXRpYyBpbnQgdGczX3J4X3Byb2RyaW5nX2FsbG9jKHN0cnVjdCB0ZzMgKnRwLAorCQkJCSBzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByKQoreworCXUzMiBpLCByeF9wa3RfZG1hX3N6OworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbMF07CisKKwkvKiBaZXJvIG91dCBhbGwgZGVzY3JpcHRvcnMuICovCisJbWVtc2V0KHRwci0+cnhfc3RkLCAwLCBURzNfUlhfUklOR19CWVRFUyk7CisKKwlyeF9wa3RfZG1hX3N6ID0gVEczX1JYX1NURF9ETUFfU1o7CisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3ODBfQ0xBU1MpICYmCisJICAgIHRwLT5kZXYtPm10dSA+IEVUSF9EQVRBX0xFTikKKwkJcnhfcGt0X2RtYV9zeiA9IFRHM19SWF9KTUJfRE1BX1NaOworCXRwLT5yeF9wa3RfbWFwX3N6ID0gVEczX1JYX0RNQV9UT19NQVBfU1oocnhfcGt0X2RtYV9zeik7CisKKwkvKiBJbml0aWFsaXplIGludmFyaWFudHMgb2YgdGhlIHJpbmdzLCB3ZSBvbmx5IHNldCB0aGlzCisJICogc3R1ZmYgb25jZS4gIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgY2FyZCBkb2VzIG5vdAorCSAqIHdyaXRlIGludG8gdGhlIHJ4IGJ1ZmZlciBwb3N0aW5nIHJpbmdzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfUklOR19TSVpFOyBpKyspIHsKKwkJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqcnhkOworCisJCXJ4ZCA9ICZ0cHItPnJ4X3N0ZFtpXTsKKwkJcnhkLT5pZHhfbGVuID0gcnhfcGt0X2RtYV9zeiA8PCBSWERfTEVOX1NISUZUOworCQlyeGQtPnR5cGVfZmxhZ3MgPSAoUlhEX0ZMQUdfRU5EIDw8IFJYRF9GTEFHU19TSElGVCk7CisJCXJ4ZC0+b3BhcXVlID0gKFJYRF9PUEFRVUVfUklOR19TVEQgfAorCQkJICAgICAgIChpIDw8IFJYRF9PUEFRVUVfSU5ERVhfU0hJRlQpKTsKKwl9CisKKwkvKiBOb3cgYWxsb2NhdGUgZnJlc2ggU0tCcyBmb3IgZWFjaCByeCByaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCB0cC0+cnhfcGVuZGluZzsgaSsrKSB7CisJCWlmICh0ZzNfYWxsb2Nfcnhfc2tiKHRuYXBpLCBSWERfT1BBUVVFX1JJTkdfU1RELCAtMSwgaSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJICAgICAgICIlczogVXNpbmcgYSBzbWFsbGVyIFJYIHN0YW5kYXJkIHJpbmcsICIKKwkJCSAgICAgICAib25seSAlZCBvdXQgb2YgJWQgYnVmZmVycyB3ZXJlIGFsbG9jYXRlZCAiCisJCQkgICAgICAgInN1Y2Nlc3NmdWxseS5cbiIsCisJCQkgICAgICAgdHAtPmRldi0+bmFtZSwgaSwgdHAtPnJ4X3BlbmRpbmcpOworCQkJaWYgKGkgPT0gMCkKKwkJCQlnb3RvIGluaXRmYWlsOworCQkJdHAtPnJ4X3BlbmRpbmcgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkpCisJCWdvdG8gZG9uZTsKKworCW1lbXNldCh0cHItPnJ4X2ptYiwgMCwgVEczX1JYX0pVTUJPX1JJTkdfQllURVMpOworCisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkgeworCQlmb3IgKGkgPSAwOyBpIDwgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsgaSsrKSB7CisJCQlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjICpyeGQ7CisKKwkJCXJ4ZCA9ICZ0cHItPnJ4X2ptYltpXS5zdGQ7CisJCQlyeGQtPmlkeF9sZW4gPSBURzNfUlhfSk1CX0RNQV9TWiA8PCBSWERfTEVOX1NISUZUOworCQkJcnhkLT50eXBlX2ZsYWdzID0gKFJYRF9GTEFHX0VORCA8PCBSWERfRkxBR1NfU0hJRlQpIHwKKwkJCQlSWERfRkxBR19KVU1CTzsKKwkJCXJ4ZC0+b3BhcXVlID0gKFJYRF9PUEFRVUVfUklOR19KVU1CTyB8CisJCQkgICAgICAgKGkgPDwgUlhEX09QQVFVRV9JTkRFWF9TSElGVCkpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHRwLT5yeF9qdW1ib19wZW5kaW5nOyBpKyspIHsKKwkJCWlmICh0ZzNfYWxsb2Nfcnhfc2tiKHRuYXBpLCBSWERfT1BBUVVFX1JJTkdfSlVNQk8sCisJCQkJCSAgICAgLTEsIGkpIDwgMCkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkJICAgICAgICIlczogVXNpbmcgYSBzbWFsbGVyIFJYIGp1bWJvIHJpbmcsICIKKwkJCQkgICAgICAgIm9ubHkgJWQgb3V0IG9mICVkIGJ1ZmZlcnMgd2VyZSAiCisJCQkJICAgICAgICJhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5LlxuIiwKKwkJCQkgICAgICAgdHAtPmRldi0+bmFtZSwgaSwgdHAtPnJ4X2p1bWJvX3BlbmRpbmcpOworCQkJCWlmIChpID09IDApCisJCQkJCWdvdG8gaW5pdGZhaWw7CisJCQkJdHAtPnJ4X2p1bWJvX3BlbmRpbmcgPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCitkb25lOgorCXJldHVybiAwOworCitpbml0ZmFpbDoKKwl0ZzNfcnhfcHJvZHJpbmdfZnJlZSh0cCwgdHByKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgdGczX3J4X3Byb2RyaW5nX2Zpbmkoc3RydWN0IHRnMyAqdHAsCisJCQkJIHN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICp0cHIpCit7CisJa2ZyZWUodHByLT5yeF9zdGRfYnVmZmVycyk7CisJdHByLT5yeF9zdGRfYnVmZmVycyA9IE5VTEw7CisJa2ZyZWUodHByLT5yeF9qbWJfYnVmZmVycyk7CisJdHByLT5yeF9qbWJfYnVmZmVycyA9IE5VTEw7CisJaWYgKHRwci0+cnhfc3RkKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9SSU5HX0JZVEVTLAorCQkJCSAgICB0cHItPnJ4X3N0ZCwgdHByLT5yeF9zdGRfbWFwcGluZyk7CisJCXRwci0+cnhfc3RkID0gTlVMTDsKKwl9CisJaWYgKHRwci0+cnhfam1iKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9KVU1CT19SSU5HX0JZVEVTLAorCQkJCSAgICB0cHItPnJ4X2ptYiwgdHByLT5yeF9qbWJfbWFwcGluZyk7CisJCXRwci0+cnhfam1iID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGczX3J4X3Byb2RyaW5nX2luaXQoc3RydWN0IHRnMyAqdHAsCisJCQkJc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgKnRwcikKK3sKKwl0cHItPnJ4X3N0ZF9idWZmZXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJpbmdfaW5mbykgKgorCQkJCSAgICAgIFRHM19SWF9SSU5HX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghdHByLT5yeF9zdGRfYnVmZmVycykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cHItPnJ4X3N0ZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfUlhfUklOR19CWVRFUywKKwkJCQkJICAgJnRwci0+cnhfc3RkX21hcHBpbmcpOworCWlmICghdHByLT5yeF9zdGQpCisJCWdvdG8gZXJyX291dDsKKworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgeworCQl0cHItPnJ4X2ptYl9idWZmZXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJpbmdfaW5mbykgKgorCQkJCQkgICAgICBURzNfUlhfSlVNQk9fUklOR19TSVpFLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0cHItPnJ4X2ptYl9idWZmZXJzKQorCQkJZ290byBlcnJfb3V0OworCisJCXRwci0+cnhfam1iID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsCisJCQkJCQkgICBURzNfUlhfSlVNQk9fUklOR19CWVRFUywKKwkJCQkJCSAgICZ0cHItPnJ4X2ptYl9tYXBwaW5nKTsKKwkJaWYgKCF0cHItPnJ4X2ptYikKKwkJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwl0ZzNfcnhfcHJvZHJpbmdfZmluaSh0cCwgdHByKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogLyogRnJlZSB1cCBwZW5kaW5nIHBhY2tldHMgaW4gYWxsIHJ4L3R4IHJpbmdzLgogICoKICAqIFRoZSBjaGlwIGhhcyBiZWVuIHNodXQgZG93biBhbmQgdGhlIGRyaXZlciBkZXRhY2hlZCBmcm9tCkBAIC01NDc3LDU1ICs1Nzk0LDM3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHRnM19mcmVlX3JpbmdzKHN0cnVjdCB0ZzMgKnRwKQogewotCXN0cnVjdCByaW5nX2luZm8gKnJ4cDsKLQlpbnQgaTsKKwlpbnQgaSwgajsKIAotCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfUklOR19TSVpFOyBpKyspIHsKLQkJcnhwID0gJnRwLT5yeF9zdGRfYnVmZmVyc1tpXTsKKwlmb3IgKGogPSAwOyBqIDwgdHAtPmlycV9jbnQ7IGorKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2pdOwogCi0JCWlmIChyeHAtPnNrYiA9PSBOVUxMKQorCQlpZiAoIXRuYXBpLT50eF9idWZmZXJzKQogCQkJY29udGludWU7Ci0JCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsCi0JCQkJIHBjaV91bm1hcF9hZGRyKHJ4cCwgbWFwcGluZyksCi0JCQkJIHRwLT5yeF9wa3RfYnVmX3N6IC0gdHAtPnJ4X29mZnNldCwKLQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkocnhwLT5za2IpOwotCQlyeHAtPnNrYiA9IE5VTEw7Ci0JfQogCi0JZm9yIChpID0gMDsgaSA8IFRHM19SWF9KVU1CT19SSU5HX1NJWkU7IGkrKykgewotCQlyeHAgPSAmdHAtPnJ4X2p1bWJvX2J1ZmZlcnNbaV07CisJCWZvciAoaSA9IDA7IGkgPCBURzNfVFhfUklOR19TSVpFOyApIHsKKwkJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4cDsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJaWYgKHJ4cC0+c2tiID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJcGNpX3VubWFwX3NpbmdsZSh0cC0+cGRldiwKLQkJCQkgcGNpX3VubWFwX2FkZHIocnhwLCBtYXBwaW5nKSwKLQkJCQkgUlhfSlVNQk9fUEtUX0JVRl9TWiAtIHRwLT5yeF9vZmZzZXQsCi0JCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHJ4cC0+c2tiKTsKLQkJcnhwLT5za2IgPSBOVUxMOwotCX0KKwkJCXR4cCA9ICZ0bmFwaS0+dHhfYnVmZmVyc1tpXTsKKwkJCXNrYiA9IHR4cC0+c2tiOwogCi0JZm9yIChpID0gMDsgaSA8IFRHM19UWF9SSU5HX1NJWkU7ICkgewotCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICp0eHA7Ci0JCXN0cnVjdCBza19idWZmICpza2I7CisJCQlpZiAoc2tiID09IE5VTEwpIHsKKwkJCQlpKys7CisJCQkJY29udGludWU7CisJCQl9CiAKLQkJdHhwID0gJnRwLT50eF9idWZmZXJzW2ldOwotCQlza2IgPSB0eHAtPnNrYjsKKwkJCXNrYl9kbWFfdW5tYXAoJnRwLT5wZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSk7CiAKLQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQlpKys7Ci0JCQljb250aW51ZTsKKwkJCXR4cC0+c2tiID0gTlVMTDsKKworCQkJaSArPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJfQotCi0JCXNrYl9kbWFfdW5tYXAoJnRwLT5wZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSk7Ci0KLQkJdHhwLT5za2IgPSBOVUxMOwotCi0JCWkgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7Ci0KLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CisKKwl0ZzNfcnhfcHJvZHJpbmdfZnJlZSh0cCwgJnRwLT5wcm9kcmluZ1swXSk7CiB9CiAKIC8qIEluaXRpYWxpemUgdHgvcnggcmluZ3MgZm9yIHBhY2tldCBwcm9jZXNzaW5nLgpAQCAtNTUzNyw4NSArNTgzNiwzMSBAQAogICovCiBzdGF0aWMgaW50IHRnM19pbml0X3JpbmdzKHN0cnVjdCB0ZzMgKnRwKQogewotCXUzMiBpOworCWludCBpOwogCiAJLyogRnJlZSB1cCBhbGwgdGhlIFNLQnMuICovCiAJdGczX2ZyZWVfcmluZ3ModHApOwogCi0JLyogWmVybyBvdXQgYWxsIGRlc2NyaXB0b3JzLiAqLwotCW1lbXNldCh0cC0+cnhfc3RkLCAwLCBURzNfUlhfUklOR19CWVRFUyk7Ci0JbWVtc2V0KHRwLT5yeF9qdW1ibywgMCwgVEczX1JYX0pVTUJPX1JJTkdfQllURVMpOwotCW1lbXNldCh0cC0+cnhfcmNiLCAwLCBURzNfUlhfUkNCX1JJTkdfQllURVModHApKTsKLQltZW1zZXQodHAtPnR4X3JpbmcsIDAsIFRHM19UWF9SSU5HX0JZVEVTKTsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOwogCi0JdHAtPnJ4X3BrdF9idWZfc3ogPSBSWF9QS1RfQlVGX1NaOwotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSAmJgotCSAgICAodHAtPmRldi0+bXR1ID4gRVRIX0RBVEFfTEVOKSkKLQkJdHAtPnJ4X3BrdF9idWZfc3ogPSBSWF9KVU1CT19QS1RfQlVGX1NaOworCQl0bmFwaS0+bGFzdF90YWcgPSAwOworCQl0bmFwaS0+bGFzdF9pcnFfdGFnID0gMDsKKwkJdG5hcGktPmh3X3N0YXR1cy0+c3RhdHVzID0gMDsKKwkJdG5hcGktPmh3X3N0YXR1cy0+c3RhdHVzX3RhZyA9IDA7CisJCW1lbXNldCh0bmFwaS0+aHdfc3RhdHVzLCAwLCBURzNfSFdfU1RBVFVTX1NJWkUpOwogCi0JLyogSW5pdGlhbGl6ZSBpbnZhcmlhbnRzIG9mIHRoZSByaW5ncywgd2Ugb25seSBzZXQgdGhpcwotCSAqIHN0dWZmIG9uY2UuICBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGNhcmQgZG9lcyBub3QKLQkgKiB3cml0ZSBpbnRvIHRoZSByeCBidWZmZXIgcG9zdGluZyByaW5ncy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgVEczX1JYX1JJTkdfU0laRTsgaSsrKSB7Ci0JCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MgKnJ4ZDsKKwkJdG5hcGktPnR4X3Byb2QgPSAwOworCQl0bmFwaS0+dHhfY29ucyA9IDA7CisJCWlmICh0bmFwaS0+dHhfcmluZykKKwkJCW1lbXNldCh0bmFwaS0+dHhfcmluZywgMCwgVEczX1RYX1JJTkdfQllURVMpOwogCi0JCXJ4ZCA9ICZ0cC0+cnhfc3RkW2ldOwotCQlyeGQtPmlkeF9sZW4gPSAodHAtPnJ4X3BrdF9idWZfc3ogLSB0cC0+cnhfb2Zmc2V0IC0gNjQpCi0JCQk8PCBSWERfTEVOX1NISUZUOwotCQlyeGQtPnR5cGVfZmxhZ3MgPSAoUlhEX0ZMQUdfRU5EIDw8IFJYRF9GTEFHU19TSElGVCk7Ci0JCXJ4ZC0+b3BhcXVlID0gKFJYRF9PUEFRVUVfUklOR19TVEQgfAotCQkJICAgICAgIChpIDw8IFJYRF9PUEFRVUVfSU5ERVhfU0hJRlQpKTsKKwkJdG5hcGktPnJ4X3JjYl9wdHIgPSAwOworCQlpZiAodG5hcGktPnJ4X3JjYikKKwkJCW1lbXNldCh0bmFwaS0+cnhfcmNiLCAwLCBURzNfUlhfUkNCX1JJTkdfQllURVModHApKTsKIAl9CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfSlVNQk9fUklOR19TSVpFOyBpKyspIHsKLQkJCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MgKnJ4ZDsKLQotCQkJcnhkID0gJnRwLT5yeF9qdW1ib1tpXTsKLQkJCXJ4ZC0+aWR4X2xlbiA9IChSWF9KVU1CT19QS1RfQlVGX1NaIC0gdHAtPnJ4X29mZnNldCAtIDY0KQotCQkJCTw8IFJYRF9MRU5fU0hJRlQ7Ci0JCQlyeGQtPnR5cGVfZmxhZ3MgPSAoUlhEX0ZMQUdfRU5EIDw8IFJYRF9GTEFHU19TSElGVCkgfAotCQkJCVJYRF9GTEFHX0pVTUJPOwotCQkJcnhkLT5vcGFxdWUgPSAoUlhEX09QQVFVRV9SSU5HX0pVTUJPIHwKLQkJCSAgICAgICAoaSA8PCBSWERfT1BBUVVFX0lOREVYX1NISUZUKSk7Ci0JCX0KLQl9Ci0KLQkvKiBOb3cgYWxsb2NhdGUgZnJlc2ggU0tCcyBmb3IgZWFjaCByeCByaW5nLiAqLwotCWZvciAoaSA9IDA7IGkgPCB0cC0+cnhfcGVuZGluZzsgaSsrKSB7Ci0JCWlmICh0ZzNfYWxsb2Nfcnhfc2tiKHRwLCBSWERfT1BBUVVFX1JJTkdfU1RELCAtMSwgaSkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAotCQkJICAgICAgICIlczogVXNpbmcgYSBzbWFsbGVyIFJYIHN0YW5kYXJkIHJpbmcsICIKLQkJCSAgICAgICAib25seSAlZCBvdXQgb2YgJWQgYnVmZmVycyB3ZXJlIGFsbG9jYXRlZCAiCi0JCQkgICAgICAgInN1Y2Nlc3NmdWxseS5cbiIsCi0JCQkgICAgICAgdHAtPmRldi0+bmFtZSwgaSwgdHAtPnJ4X3BlbmRpbmcpOwotCQkJaWYgKGkgPT0gMCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCXRwLT5yeF9wZW5kaW5nID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkgewotCQlmb3IgKGkgPSAwOyBpIDwgdHAtPnJ4X2p1bWJvX3BlbmRpbmc7IGkrKykgewotCQkJaWYgKHRnM19hbGxvY19yeF9za2IodHAsIFJYRF9PUEFRVUVfUklOR19KVU1CTywKLQkJCQkJICAgICAtMSwgaSkgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCQkgICAgICAgIiVzOiBVc2luZyBhIHNtYWxsZXIgUlgganVtYm8gcmluZywgIgotCQkJCSAgICAgICAib25seSAlZCBvdXQgb2YgJWQgYnVmZmVycyB3ZXJlICIKLQkJCQkgICAgICAgImFsbG9jYXRlZCBzdWNjZXNzZnVsbHkuXG4iLAotCQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBpLCB0cC0+cnhfanVtYm9fcGVuZGluZyk7Ci0JCQkJaWYgKGkgPT0gMCkgewotCQkJCQl0ZzNfZnJlZV9yaW5ncyh0cCk7Ci0JCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCX0KLQkJCQl0cC0+cnhfanVtYm9fcGVuZGluZyA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHRnM19yeF9wcm9kcmluZ19hbGxvYyh0cCwgJnRwLT5wcm9kcmluZ1swXSk7CiB9CiAKIC8qCkBAIC01NjI0LDM4ICs1ODY5LDQyIEBACiAgKi8KIHN0YXRpYyB2b2lkIHRnM19mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHRnMyAqdHApCiB7Ci0Ja2ZyZWUodHAtPnJ4X3N0ZF9idWZmZXJzKTsKLQl0cC0+cnhfc3RkX2J1ZmZlcnMgPSBOVUxMOwotCWlmICh0cC0+cnhfc3RkKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9SSU5HX0JZVEVTLAotCQkJCSAgICB0cC0+cnhfc3RkLCB0cC0+cnhfc3RkX21hcHBpbmcpOwotCQl0cC0+cnhfc3RkID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CisJCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGkgPSAmdHAtPm5hcGlbaV07CisKKwkJaWYgKHRuYXBpLT50eF9yaW5nKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfVFhfUklOR19CWVRFUywKKwkJCQl0bmFwaS0+dHhfcmluZywgdG5hcGktPnR4X2Rlc2NfbWFwcGluZyk7CisJCQl0bmFwaS0+dHhfcmluZyA9IE5VTEw7CisJCX0KKworCQlrZnJlZSh0bmFwaS0+dHhfYnVmZmVycyk7CisJCXRuYXBpLT50eF9idWZmZXJzID0gTlVMTDsKKworCQlpZiAodG5hcGktPnJ4X3JjYikgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX1JDQl9SSU5HX0JZVEVTKHRwKSwKKwkJCQkJICAgIHRuYXBpLT5yeF9yY2IsCisJCQkJCSAgICB0bmFwaS0+cnhfcmNiX21hcHBpbmcpOworCQkJdG5hcGktPnJ4X3JjYiA9IE5VTEw7CisJCX0KKworCQlpZiAodG5hcGktPmh3X3N0YXR1cykgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX0hXX1NUQVRVU19TSVpFLAorCQkJCQkgICAgdG5hcGktPmh3X3N0YXR1cywKKwkJCQkJICAgIHRuYXBpLT5zdGF0dXNfbWFwcGluZyk7CisJCQl0bmFwaS0+aHdfc3RhdHVzID0gTlVMTDsKKwkJfQogCX0KLQlpZiAodHAtPnJ4X2p1bWJvKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9KVU1CT19SSU5HX0JZVEVTLAotCQkJCSAgICB0cC0+cnhfanVtYm8sIHRwLT5yeF9qdW1ib19tYXBwaW5nKTsKLQkJdHAtPnJ4X2p1bWJvID0gTlVMTDsKLQl9Ci0JaWYgKHRwLT5yeF9yY2IpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgVEczX1JYX1JDQl9SSU5HX0JZVEVTKHRwKSwKLQkJCQkgICAgdHAtPnJ4X3JjYiwgdHAtPnJ4X3JjYl9tYXBwaW5nKTsKLQkJdHAtPnJ4X3JjYiA9IE5VTEw7Ci0JfQotCWlmICh0cC0+dHhfcmluZykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfVFhfUklOR19CWVRFUywKLQkJCXRwLT50eF9yaW5nLCB0cC0+dHhfZGVzY19tYXBwaW5nKTsKLQkJdHAtPnR4X3JpbmcgPSBOVUxMOwotCX0KLQlpZiAodHAtPmh3X3N0YXR1cykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfSFdfU1RBVFVTX1NJWkUsCi0JCQkJICAgIHRwLT5od19zdGF0dXMsIHRwLT5zdGF0dXNfbWFwcGluZyk7Ci0JCXRwLT5od19zdGF0dXMgPSBOVUxMOwotCX0KKwogCWlmICh0cC0+aHdfc3RhdHMpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGRldiwgc2l6ZW9mKHN0cnVjdCB0ZzNfaHdfc3RhdHMpLAogCQkJCSAgICB0cC0+aHdfc3RhdHMsIHRwLT5zdGF0c19tYXBwaW5nKTsKIAkJdHAtPmh3X3N0YXRzID0gTlVMTDsKIAl9CisKKwl0ZzNfcnhfcHJvZHJpbmdfZmluaSh0cCwgJnRwLT5wcm9kcmluZ1swXSk7CiB9CiAKIC8qCkBAIC01NjY0LDU1ICs1OTEzLDgwIEBACiAgKi8KIHN0YXRpYyBpbnQgdGczX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHRnMyAqdHApCiB7Ci0JdHAtPnJ4X3N0ZF9idWZmZXJzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pICoKLQkJCQkgICAgICAoVEczX1JYX1JJTkdfU0laRSArCi0JCQkJICAgICAgIFRHM19SWF9KVU1CT19SSU5HX1NJWkUpKSArCi0JCQkJICAgICAoc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pICoKLQkJCQkgICAgICBURzNfVFhfUklOR19TSVpFKSwKLQkJCQkgICAgIEdGUF9LRVJORUwpOwotCWlmICghdHAtPnJ4X3N0ZF9idWZmZXJzKQorCWludCBpOworCisJaWYgKHRnM19yeF9wcm9kcmluZ19pbml0KHRwLCAmdHAtPnByb2RyaW5nWzBdKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQl0cC0+cnhfanVtYm9fYnVmZmVycyA9ICZ0cC0+cnhfc3RkX2J1ZmZlcnNbVEczX1JYX1JJTkdfU0laRV07Ci0JdHAtPnR4X2J1ZmZlcnMgPSAoc3RydWN0IHR4X3JpbmdfaW5mbyAqKQotCQkmdHAtPnJ4X2p1bWJvX2J1ZmZlcnNbVEczX1JYX0pVTUJPX1JJTkdfU0laRV07Ci0KLQl0cC0+cnhfc3RkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9SSU5HX0JZVEVTLAotCQkJCQkgICZ0cC0+cnhfc3RkX21hcHBpbmcpOwotCWlmICghdHAtPnJ4X3N0ZCkKLQkJZ290byBlcnJfb3V0OwotCi0JdHAtPnJ4X2p1bWJvID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9KVU1CT19SSU5HX0JZVEVTLAotCQkJCQkgICAgJnRwLT5yeF9qdW1ib19tYXBwaW5nKTsKLQotCWlmICghdHAtPnJ4X2p1bWJvKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQl0cC0+cnhfcmNiID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsIFRHM19SWF9SQ0JfUklOR19CWVRFUyh0cCksCi0JCQkJCSAgJnRwLT5yeF9yY2JfbWFwcGluZyk7Ci0JaWYgKCF0cC0+cnhfcmNiKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQl0cC0+dHhfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LCBURzNfVFhfUklOR19CWVRFUywKLQkJCQkJICAgJnRwLT50eF9kZXNjX21hcHBpbmcpOwotCWlmICghdHAtPnR4X3JpbmcpCi0JCWdvdG8gZXJyX291dDsKLQotCXRwLT5od19zdGF0dXMgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwKLQkJCQkJICAgICBURzNfSFdfU1RBVFVTX1NJWkUsCi0JCQkJCSAgICAgJnRwLT5zdGF0dXNfbWFwcGluZyk7Ci0JaWYgKCF0cC0+aHdfc3RhdHVzKQotCQlnb3RvIGVycl9vdXQ7Ci0KIAl0cC0+aHdfc3RhdHMgPSBwY2lfYWxsb2NfY29uc2lzdGVudCh0cC0+cGRldiwKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdGczX2h3X3N0YXRzKSwKIAkJCQkJICAgICZ0cC0+c3RhdHNfbWFwcGluZyk7CiAJaWYgKCF0cC0+aHdfc3RhdHMpCiAJCWdvdG8gZXJyX291dDsKIAotCW1lbXNldCh0cC0+aHdfc3RhdHVzLCAwLCBURzNfSFdfU1RBVFVTX1NJWkUpOwogCW1lbXNldCh0cC0+aHdfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgdGczX2h3X3N0YXRzKSk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCQlzdHJ1Y3QgdGczX2h3X3N0YXR1cyAqc2JsazsKKworCQl0bmFwaS0+aHdfc3RhdHVzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsCisJCQkJCQkJVEczX0hXX1NUQVRVU19TSVpFLAorCQkJCQkJCSZ0bmFwaS0+c3RhdHVzX21hcHBpbmcpOworCQlpZiAoIXRuYXBpLT5od19zdGF0dXMpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJbWVtc2V0KHRuYXBpLT5od19zdGF0dXMsIDAsIFRHM19IV19TVEFUVVNfU0laRSk7CisJCXNibGsgPSB0bmFwaS0+aHdfc3RhdHVzOworCisJCS8qCisJCSAqIFdoZW4gUlNTIGlzIGVuYWJsZWQsIHRoZSBzdGF0dXMgYmxvY2sgZm9ybWF0IGNoYW5nZXMKKwkJICogc2xpZ2h0bHkuICBUaGUgInJ4X2p1bWJvX2NvbnN1bWVyIiwgInJlc2VydmVkIiwKKwkJICogYW5kICJyeF9taW5pX2NvbnN1bWVyIiBtZW1iZXJzIGdldCBtYXBwZWQgdG8gdGhlCisJCSAqIG90aGVyIHRocmVlIHJ4IHJldHVybiByaW5nIHByb2R1Y2VyIGluZGV4ZXMuCisJCSAqLworCQlzd2l0Y2ggKGkpIHsKKwkJZGVmYXVsdDoKKwkJCXRuYXBpLT5yeF9yY2JfcHJvZF9pZHggPSAmc2Jsay0+aWR4WzBdLnJ4X3Byb2R1Y2VyOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXRuYXBpLT5yeF9yY2JfcHJvZF9pZHggPSAmc2Jsay0+cnhfanVtYm9fY29uc3VtZXI7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdG5hcGktPnJ4X3JjYl9wcm9kX2lkeCA9ICZzYmxrLT5yZXNlcnZlZDsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQl0bmFwaS0+cnhfcmNiX3Byb2RfaWR4ID0gJnNibGstPnJ4X21pbmlfY29uc3VtZXI7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIElmIG11bHRpdmVjdG9yIFJTUyBpcyBlbmFibGVkLCB2ZWN0b3IgMCBkb2VzIG5vdCBoYW5kbGUKKwkJICogcnggb3IgdHggaW50ZXJydXB0cy4gIERvbid0IGFsbG9jYXRlIGFueSByZXNvdXJjZXMgZm9yIGl0LgorCQkgKi8KKwkJaWYgKCFpICYmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpKQorCQkJY29udGludWU7CisKKwkJdG5hcGktPnJ4X3JjYiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHRwLT5wZGV2LAorCQkJCQkJICAgICBURzNfUlhfUkNCX1JJTkdfQllURVModHApLAorCQkJCQkJICAgICAmdG5hcGktPnJ4X3JjYl9tYXBwaW5nKTsKKwkJaWYgKCF0bmFwaS0+cnhfcmNiKQorCQkJZ290byBlcnJfb3V0OworCisJCW1lbXNldCh0bmFwaS0+cnhfcmNiLCAwLCBURzNfUlhfUkNCX1JJTkdfQllURVModHApKTsKKworCQl0bmFwaS0+dHhfYnVmZmVycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0eF9yaW5nX2luZm8pICoKKwkJCQkJICAgIFRHM19UWF9SSU5HX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIXRuYXBpLT50eF9idWZmZXJzKQorCQkJZ290byBlcnJfb3V0OworCisJCXRuYXBpLT50eF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBkZXYsCisJCQkJCQkgICAgICBURzNfVFhfUklOR19CWVRFUywKKwkJCQkJCSAgICAgICZ0bmFwaS0+dHhfZGVzY19tYXBwaW5nKTsKKwkJaWYgKCF0bmFwaS0+dHhfcmluZykKKwkJCWdvdG8gZXJyX291dDsKKwl9CisKIAlyZXR1cm4gMDsKIAogZXJyX291dDoKQEAgLTU4MjMsOCArNjA5NywxMSBAQAogCWVyciB8PSB0ZzNfc3RvcF9ibG9jayh0cCwgQlVGTUdSX01PREUsIEJVRk1HUl9NT0RFX0VOQUJMRSwgc2lsZW50KTsKIAllcnIgfD0gdGczX3N0b3BfYmxvY2sodHAsIE1FTUFSQl9NT0RFLCBNRU1BUkJfTU9ERV9FTkFCTEUsIHNpbGVudCk7CiAKLQlpZiAodHAtPmh3X3N0YXR1cykKLQkJbWVtc2V0KHRwLT5od19zdGF0dXMsIDAsIFRHM19IV19TVEFUVVNfU0laRSk7CisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspIHsKKwkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKKwkJaWYgKHRuYXBpLT5od19zdGF0dXMpCisJCQltZW1zZXQodG5hcGktPmh3X3N0YXR1cywgMCwgVEczX0hXX1NUQVRVU19TSVpFKTsKKwl9CiAJaWYgKHRwLT5od19zdGF0cykKIAkJbWVtc2V0KHRwLT5od19zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCB0ZzNfaHdfc3RhdHMpKTsKIApAQCAtNjExMSw3ICs2Mzg4LDcgQEAKIHsKIAl1MzIgdmFsOwogCXZvaWQgKCp3cml0ZV9vcCkoc3RydWN0IHRnMyAqLCB1MzIsIHUzMik7Ci0JaW50IGVycjsKKwlpbnQgaSwgZXJyOwogCiAJdGczX252cmFtX2xvY2sodHApOwogCkBAIC02MTUxLDE0ICs2NDI4LDI0IEBACiAJICogc2hhcmluZyBvciBpcnFwb2xsLgogCSAqLwogCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkc7Ci0JaWYgKHRwLT5od19zdGF0dXMpIHsKLQkJdHAtPmh3X3N0YXR1cy0+c3RhdHVzID0gMDsKLQkJdHAtPmh3X3N0YXR1cy0+c3RhdHVzX3RhZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspIHsKKwkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKKwkJaWYgKHRuYXBpLT5od19zdGF0dXMpIHsKKwkJCXRuYXBpLT5od19zdGF0dXMtPnN0YXR1cyA9IDA7CisJCQl0bmFwaS0+aHdfc3RhdHVzLT5zdGF0dXNfdGFnID0gMDsKKwkJfQorCQl0bmFwaS0+bGFzdF90YWcgPSAwOworCQl0bmFwaS0+bGFzdF9pcnFfdGFnID0gMDsKIAl9Ci0JdHAtPmxhc3RfdGFnID0gMDsKLQl0cC0+bGFzdF9pcnFfdGFnID0gMDsKIAlzbXBfbWIoKTsKLQlzeW5jaHJvbml6ZV9pcnEodHAtPnBkZXYtPmlycSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykKKwkJc3luY2hyb25pemVfaXJxKHRwLT5uYXBpW2ldLmlycV92ZWMpOworCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkgeworCQl2YWwgPSB0cjMyKFRHM19QQ0lFX0xOS0NUTCkgJiB+VEczX1BDSUVfTE5LQ1RMX0wxX1BMTF9QRF9FTjsKKwkJdHczMihURzNfUENJRV9MTktDVEwsIHZhbCB8IFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRElTKTsKKwl9CiAKIAkvKiBkbyB0aGUgcmVzZXQgKi8KIAl2YWwgPSBHUkNfTUlTQ19DRkdfQ09SRUNMS19SRVNFVDsKQEAgLTYyMTIsNiArNjQ5OSw4IEBACiAJdWRlbGF5KDEyMCk7CiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUENJX0VYUFJFU1MpICYmIHRwLT5wY2llX2NhcCkgeworCQl1MTYgdmFsMTY7CisKIAkJaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzUwX0EwKSB7CiAJCQlpbnQgaTsKIAkJCXUzMiBjZmdfdmFsOwpAQCAtNjIyNSwxMiArNjUxNCwyMiBAQAogCQkJCQkgICAgICAgY2ZnX3ZhbCB8ICgxIDw8IDE1KSk7CiAJCX0KIAotCQkvKiBTZXQgUENJRSBtYXggcGF5bG9hZCBzaXplIHRvIDEyOCBieXRlcyBhbmQKLQkJICogY2xlYXIgdGhlICJubyBzbm9vcCIgYW5kICJyZWxheGVkIG9yZGVyaW5nIiBiaXRzLgorCQkvKiBDbGVhciB0aGUgIm5vIHNub29wIiBhbmQgInJlbGF4ZWQgb3JkZXJpbmciIGJpdHMuICovCisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LAorCQkJCSAgICAgdHAtPnBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwsCisJCQkJICAgICAmdmFsMTYpOworCQl2YWwxNiAmPSB+KFBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOIHwKKwkJCSAgIFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4pOworCQkvKgorCQkgKiBPbGRlciBQQ0llIGRldmljZXMgb25seSBzdXBwb3J0IHRoZSAxMjggYnl0ZQorCQkgKiBNUFMgc2V0dGluZy4gIEVuZm9yY2UgdGhlIHJlc3RyaWN0aW9uLgogCQkgKi8KKwkJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0NQTVVfUFJFU0VOVCkgfHwKKwkJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCkpCisJCQl2YWwxNiAmPSB+UENJX0VYUF9ERVZDVExfUEFZTE9BRDsKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHRwLT5wZGV2LAogCQkJCSAgICAgIHRwLT5wY2llX2NhcCArIFBDSV9FWFBfREVWQ1RMLAotCQkJCSAgICAgIDApOworCQkJCSAgICAgIHZhbDE2KTsKIAogCQlwY2llX3NldF9yZWFkcnEodHAtPnBkZXYsIDQwOTYpOwogCkBAIC02Mjg4LDE2ICs2NTg3LDE4IEBACiAJCXR3MzJfZihNQUNfTU9ERSwgMCk7CiAJdWRlbGF5KDQwKTsKIAotCXRnM19tZGlvX3N0YXJ0KHRwKTsKLQogCXRnM19hcGVfdW5sb2NrKHRwLCBURzNfQVBFX0xPQ0tfR1JDKTsKIAogCWVyciA9IHRnM19wb2xsX2Z3KHRwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJdGczX21kaW9fc3RhcnQodHApOworCiAJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSAmJgotCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTc1MF9BMCkgeworCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTc1MF9BMCAmJgorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NSAmJgorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNykgewogCQl2YWwgPSB0cjMyKDB4N2MwMCk7CiAKIAkJdHczMigweDdjMDAsIHZhbCB8ICgxIDw8IDI1KSk7CkBAIC02NjQ3LDI0ICs2OTQ4LDE3NSBAQAogc3RhdGljIHZvaWQgX190ZzNfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBfX3RnM19zZXRfY29hbGVzY2Uoc3RydWN0IHRnMyAqdHAsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKIHsKLQl0dzMyKEhPU1RDQ19SWENPTF9USUNLUywgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKLQl0dzMyKEhPU1RDQ19UWENPTF9USUNLUywgZWMtPnR4X2NvYWxlc2NlX3VzZWNzKTsKLQl0dzMyKEhPU1RDQ19SWE1BWF9GUkFNRVMsIGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7Ci0JdHczMihIT1NUQ0NfVFhNQVhfRlJBTUVTLCBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOwotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkgewotCQl0dzMyKEhPU1RDQ19SWENPQUxfVElDS19JTlQsIGVjLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEpOwotCQl0dzMyKEhPU1RDQ19UWENPQUxfVElDS19JTlQsIGVjLT50eF9jb2FsZXNjZV91c2Vjc19pcnEpOworCWludCBpOworCisJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0lYKSkgeworCQl0dzMyKEhPU1RDQ19UWENPTF9USUNLUywgZWMtPnR4X2NvYWxlc2NlX3VzZWNzKTsKKwkJdHczMihIT1NUQ0NfVFhNQVhfRlJBTUVTLCBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOworCQl0dzMyKEhPU1RDQ19UWENPQUxfTUFYRl9JTlQsIGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpOworCisJCXR3MzIoSE9TVENDX1JYQ09MX1RJQ0tTLCBlYy0+cnhfY29hbGVzY2VfdXNlY3MpOworCQl0dzMyKEhPU1RDQ19SWE1BWF9GUkFNRVMsIGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyk7CisJCXR3MzIoSE9TVENDX1JYQ09BTF9NQVhGX0lOVCwgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSk7CisJfSBlbHNlIHsKKwkJdHczMihIT1NUQ0NfVFhDT0xfVElDS1MsIDApOworCQl0dzMyKEhPU1RDQ19UWE1BWF9GUkFNRVMsIDApOworCQl0dzMyKEhPU1RDQ19UWENPQUxfTUFYRl9JTlQsIDApOworCisJCXR3MzIoSE9TVENDX1JYQ09MX1RJQ0tTLCAwKTsKKwkJdHczMihIT1NUQ0NfUlhNQVhfRlJBTUVTLCAwKTsKKwkJdHczMihIT1NUQ0NfUlhDT0FMX01BWEZfSU5ULCAwKTsKIAl9Ci0JdHczMihIT1NUQ0NfUlhDT0FMX01BWEZfSU5ULCBlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxKTsKLQl0dzMyKEhPU1RDQ19UWENPQUxfTUFYRl9JTlQsIGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpOworCiAJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7CiAJCXUzMiB2YWwgPSBlYy0+c3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3M7CiAKKwkJdHczMihIT1NUQ0NfUlhDT0FMX1RJQ0tfSU5ULCBlYy0+cnhfY29hbGVzY2VfdXNlY3NfaXJxKTsKKwkJdHczMihIT1NUQ0NfVFhDT0FMX1RJQ0tfSU5ULCBlYy0+dHhfY29hbGVzY2VfdXNlY3NfaXJxKTsKKwogCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sodHAtPmRldikpCiAJCQl2YWwgPSAwOwogCiAJCXR3MzIoSE9TVENDX1NUQVRfQ09BTF9USUNLUywgdmFsKTsKIAl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQgLSAxOyBpKyspIHsKKwkJdTMyIHJlZzsKKworCQlyZWcgPSBIT1NUQ0NfUlhDT0xfVElDS1NfVkVDMSArIGkgKiAweDE4OworCQl0dzMyKHJlZywgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKKwkJcmVnID0gSE9TVENDX1RYQ09MX1RJQ0tTX1ZFQzEgKyBpICogMHgxODsKKwkJdHczMihyZWcsIGVjLT50eF9jb2FsZXNjZV91c2Vjcyk7CisJCXJlZyA9IEhPU1RDQ19SWE1BWF9GUkFNRVNfVkVDMSArIGkgKiAweDE4OworCQl0dzMyKHJlZywgZWMtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKTsKKwkJcmVnID0gSE9TVENDX1RYTUFYX0ZSQU1FU19WRUMxICsgaSAqIDB4MTg7CisJCXR3MzIocmVnLCBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOworCQlyZWcgPSBIT1NUQ0NfUlhDT0FMX01BWEZfSU5UX1ZFQzEgKyBpICogMHgxODsKKwkJdHczMihyZWcsIGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpOworCQlyZWcgPSBIT1NUQ0NfVFhDT0FMX01BWEZfSU5UX1ZFQzEgKyBpICogMHgxODsKKwkJdHczMihyZWcsIGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpOworCX0KKworCWZvciAoOyBpIDwgdHAtPmlycV9tYXggLSAxOyBpKyspIHsKKwkJdHczMihIT1NUQ0NfUlhDT0xfVElDS1NfVkVDMSArIGkgKiAweDE4LCAwKTsKKwkJdHczMihIT1NUQ0NfVFhDT0xfVElDS1NfVkVDMSArIGkgKiAweDE4LCAwKTsKKwkJdHczMihIT1NUQ0NfUlhNQVhfRlJBTUVTX1ZFQzEgKyBpICogMHgxOCwgMCk7CisJCXR3MzIoSE9TVENDX1RYTUFYX0ZSQU1FU19WRUMxICsgaSAqIDB4MTgsIDApOworCQl0dzMyKEhPU1RDQ19SWENPQUxfTUFYRl9JTlRfVkVDMSArIGkgKiAweDE4LCAwKTsKKwkJdHczMihIT1NUQ0NfVFhDT0FMX01BWEZfSU5UX1ZFQzEgKyBpICogMHgxOCwgMCk7CisJfQorfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX3JpbmdzX3Jlc2V0KHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpOworCXUzMiBzdGJsaywgdHhyY2IsIHJ4cmNiLCBsaW1pdDsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpWzBdOworCisJLyogRGlzYWJsZSBhbGwgdHJhbnNtaXQgcmluZ3MgYnV0IHRoZSBmaXJzdC4gKi8KKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCisJCWxpbWl0ID0gTklDX1NSQU1fU0VORF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiAxNjsKKwllbHNlCisJCWxpbWl0ID0gTklDX1NSQU1fU0VORF9SQ0IgKyBURzNfQkRJTkZPX1NJWkU7CisKKwlmb3IgKHR4cmNiID0gTklDX1NSQU1fU0VORF9SQ0IgKyBURzNfQkRJTkZPX1NJWkU7CisJICAgICB0eHJjYiA8IGxpbWl0OyB0eHJjYiArPSBURzNfQkRJTkZPX1NJWkUpCisJCXRnM193cml0ZV9tZW0odHAsIHR4cmNiICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsCisJCQkgICAgICBCRElORk9fRkxBR1NfRElTQUJMRUQpOworCisKKwkvKiBEaXNhYmxlIGFsbCByZWNlaXZlIHJldHVybiByaW5ncyBidXQgdGhlIGZpcnN0LiAqLworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwkJbGltaXQgPSBOSUNfU1JBTV9SQ1ZfUkVUX1JDQiArIFRHM19CRElORk9fU0laRSAqIDE3OworCWVsc2UgaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCQlsaW1pdCA9IE5JQ19TUkFNX1JDVl9SRVRfUkNCICsgVEczX0JESU5GT19TSVpFICogMTY7CisJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUpCisJCWxpbWl0ID0gTklDX1NSQU1fUkNWX1JFVF9SQ0IgKyBURzNfQkRJTkZPX1NJWkUgKiA0OworCWVsc2UKKwkJbGltaXQgPSBOSUNfU1JBTV9SQ1ZfUkVUX1JDQiArIFRHM19CRElORk9fU0laRTsKKworCWZvciAocnhyY2IgPSBOSUNfU1JBTV9SQ1ZfUkVUX1JDQiArIFRHM19CRElORk9fU0laRTsKKwkgICAgIHJ4cmNiIDwgbGltaXQ7IHJ4cmNiICs9IFRHM19CRElORk9fU0laRSkKKwkJdGczX3dyaXRlX21lbSh0cCwgcnhyY2IgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKKwkJCSAgICAgIEJESU5GT19GTEFHU19ESVNBQkxFRCk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwl0dzMyX21haWxib3hfZih0cC0+bmFwaVswXS5pbnRfbWJveCwgMSk7CisKKwkvKiBaZXJvIG1haWxib3ggcmVnaXN0ZXJzLiAqLworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0lYKSB7CisJCWZvciAoaSA9IDE7IGkgPCBURzNfSVJRX01BWF9WRUNTOyBpKyspIHsKKwkJCXRwLT5uYXBpW2ldLnR4X3Byb2QgPSAwOworCQkJdHAtPm5hcGlbaV0udHhfY29ucyA9IDA7CisJCQl0dzMyX21haWxib3godHAtPm5hcGlbaV0ucHJvZG1ib3gsIDApOworCQkJdHczMl9yeF9tYm94KHRwLT5uYXBpW2ldLmNvbnNtYm94LCAwKTsKKwkJCXR3MzJfbWFpbGJveF9mKHRwLT5uYXBpW2ldLmludF9tYm94LCAxKTsKKwkJfQorCX0gZWxzZSB7CisJCXRwLT5uYXBpWzBdLnR4X3Byb2QgPSAwOworCQl0cC0+bmFwaVswXS50eF9jb25zID0gMDsKKwkJdHczMl9tYWlsYm94KHRwLT5uYXBpWzBdLnByb2RtYm94LCAwKTsKKwkJdHczMl9yeF9tYm94KHRwLT5uYXBpWzBdLmNvbnNtYm94LCAwKTsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhlIE5JQy1iYXNlZCBzZW5kIEJEIHJpbmdzIGFyZSBkaXNhYmxlZC4gKi8KKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKKwkJdTMyIG1ib3ggPSBNQUlMQk9YX1NORE5JQ19QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1c7CisJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQkJdHczMl90eF9tYm94KG1ib3ggKyBpICogOCwgMCk7CisJfQorCisJdHhyY2IgPSBOSUNfU1JBTV9TRU5EX1JDQjsKKwlyeHJjYiA9IE5JQ19TUkFNX1JDVl9SRVRfUkNCOworCisJLyogQ2xlYXIgc3RhdHVzIGJsb2NrIGluIHJhbS4gKi8KKwltZW1zZXQodG5hcGktPmh3X3N0YXR1cywgMCwgVEczX0hXX1NUQVRVU19TSVpFKTsKKworCS8qIFNldCBzdGF0dXMgYmxvY2sgRE1BIGFkZHJlc3MgKi8KKwl0dzMyKEhPU1RDQ19TVEFUVVNfQkxLX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfSElHSCwKKwkgICAgICgodTY0KSB0bmFwaS0+c3RhdHVzX21hcHBpbmcgPj4gMzIpKTsKKwl0dzMyKEhPU1RDQ19TVEFUVVNfQkxLX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfTE9XLAorCSAgICAgKCh1NjQpIHRuYXBpLT5zdGF0dXNfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKKworCWlmICh0bmFwaS0+dHhfcmluZykgeworCQl0ZzNfc2V0X2JkaW5mbyh0cCwgdHhyY2IsIHRuYXBpLT50eF9kZXNjX21hcHBpbmcsCisJCQkgICAgICAgKFRHM19UWF9SSU5HX1NJWkUgPDwKKwkJCQlCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSwKKwkJCSAgICAgICBOSUNfU1JBTV9UWF9CVUZGRVJfREVTQyk7CisJCXR4cmNiICs9IFRHM19CRElORk9fU0laRTsKKwl9CisKKwlpZiAodG5hcGktPnJ4X3JjYikgeworCQl0ZzNfc2V0X2JkaW5mbyh0cCwgcnhyY2IsIHRuYXBpLT5yeF9yY2JfbWFwcGluZywKKwkJCSAgICAgICAoVEczX1JYX1JDQl9SSU5HX1NJWkUodHApIDw8CisJCQkJQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVCksIDApOworCQlyeHJjYiArPSBURzNfQkRJTkZPX1NJWkU7CisJfQorCisJc3RibGsgPSBIT1NUQ0NfU1RBVEJMQ0tfUklORzE7CisKKwlmb3IgKGkgPSAxLCB0bmFwaSsrOyBpIDwgdHAtPmlycV9jbnQ7IGkrKywgdG5hcGkrKykgeworCQl1NjQgbWFwcGluZyA9ICh1NjQpdG5hcGktPnN0YXR1c19tYXBwaW5nOworCQl0dzMyKHN0YmxrICsgVEczXzY0QklUX1JFR19ISUdILCBtYXBwaW5nID4+IDMyKTsKKwkJdHczMihzdGJsayArIFRHM182NEJJVF9SRUdfTE9XLCBtYXBwaW5nICYgMHhmZmZmZmZmZik7CisKKwkJLyogQ2xlYXIgc3RhdHVzIGJsb2NrIGluIHJhbS4gKi8KKwkJbWVtc2V0KHRuYXBpLT5od19zdGF0dXMsIDAsIFRHM19IV19TVEFUVVNfU0laRSk7CisKKwkJdGczX3NldF9iZGluZm8odHAsIHR4cmNiLCB0bmFwaS0+dHhfZGVzY19tYXBwaW5nLAorCQkJICAgICAgIChURzNfVFhfUklOR19TSVpFIDw8CisJCQkJQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVCksCisJCQkgICAgICAgTklDX1NSQU1fVFhfQlVGRkVSX0RFU0MpOworCisJCXRnM19zZXRfYmRpbmZvKHRwLCByeHJjYiwgdG5hcGktPnJ4X3JjYl9tYXBwaW5nLAorCQkJICAgICAgIChURzNfUlhfUkNCX1JJTkdfU0laRSh0cCkgPDwKKwkJCQlCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSwgMCk7CisKKwkJc3RibGsgKz0gODsKKwkJdHhyY2IgKz0gVEczX0JESU5GT19TSVpFOworCQlyeHJjYiArPSBURzNfQkRJTkZPX1NJWkU7CisJfQogfQogCiAvKiB0cC0+bG9jayBpcyBoZWxkLiAqLwpAQCAtNjY3Miw2ICs3MTI0LDcgQEAKIHsKIAl1MzIgdmFsLCByZG1hY19tb2RlOwogCWludCBpLCBlcnIsIGxpbWl0OworCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICp0cHIgPSAmdHAtPnByb2RyaW5nWzBdOwogCiAJdGczX2Rpc2FibGVfaW50cyh0cCk7CiAKQEAgLTY3MTksNiArNzE3MiwyMCBAQAogCQl2YWwgfD0gUENJRV9QV1JfTUdNVF9FWFRfQVNQTV9UTVJfRU4gfAogCQkgICAgICAgUENJRV9QV1JfTUdNVF9MMV9USFJFU0hfNE1TOwogCQl0dzMyKFBDSUVfUFdSX01HTVRfVEhSRVNILCB2YWwpOworCisJCXZhbCA9IHRyMzIoVEczX1BDSUVfRUlETEVfREVMQVkpICYgflRHM19QQ0lFX0VJRExFX0RFTEFZX01BU0s7CisJCXR3MzIoVEczX1BDSUVfRUlETEVfREVMQVksIHZhbCB8IFRHM19QQ0lFX0VJRExFX0RFTEFZXzEzX0NMS1MpOworCisJCXR3MzIoVEczX0NPUlJfRVJSX1NUQVQsIFRHM19DT1JSX0VSUl9TVEFUX0NMRUFSKTsKKwl9CisKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19UT0dHTEVfMTBfMTAwX0wxUExMUEQpIHsKKwkJdmFsID0gdHIzMihURzNfUENJRV9MTktDVEwpOworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19DTEtSRVFfQlVHKQorCQkJdmFsIHw9IFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRElTOworCQllbHNlCisJCQl2YWwgJj0gflRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRElTOworCQl0dzMyKFRHM19QQ0lFX0xOS0NUTCwgdmFsKTsKIAl9CiAKIAkvKiBUaGlzIHdvcmtzIGFyb3VuZCBhbiBpc3N1ZSB3aXRoIEF0aGxvbiBjaGlwc2V0cyBvbgpAQCAtNjc2Niw3ICs3MjMzLDggQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc4NCAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc2MSkgeworCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc2MSAmJgorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNykgewogCQkvKiBUaGlzIHZhbHVlIGlzIGRldGVybWluZWQgZHVyaW5nIHRoZSBwcm9iZSB0aW1lIERNQQogCQkgKiBlbmdpbmUgdGVzdCwgdGczX3Rlc3RfZG1hLgogCQkgKi8KQEAgLTY4ODYsMzUgKzczNTQsMzMgQEAKIAkgKiBjb25maWd1cmFibGUuCiAJICovCiAJdHczMihSQ1ZEQkRJX1NURF9CRCArIFRHM19CRElORk9fSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19ISUdILAotCSAgICAgKCh1NjQpIHRwLT5yeF9zdGRfbWFwcGluZyA+PiAzMikpOworCSAgICAgKCh1NjQpIHRwci0+cnhfc3RkX21hcHBpbmcgPj4gMzIpKTsKIAl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0xPVywKLQkgICAgICgodTY0KSB0cC0+cnhfc3RkX21hcHBpbmcgJiAweGZmZmZmZmZmKSk7CisJICAgICAoKHU2NCkgdHByLT5yeF9zdGRfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKIAl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19OSUNfQUREUiwKIAkgICAgIE5JQ19TUkFNX1JYX0JVRkZFUl9ERVNDKTsKIAotCS8qIERvbid0IGV2ZW4gdHJ5IHRvIHByb2dyYW0gdGhlIEpVTUJPL01JTkkgYnVmZmVyIGRlc2NyaXB0b3IKLQkgKiBjb25maWdzIG9uIDU3MDUuCi0JICovCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7Ci0JCXR3MzIoUkNWREJESV9TVERfQkQgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKLQkJICAgICBSWF9TVERfTUFYX1NJWkVfNTcwNSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKTsKLQl9IGVsc2UgewotCQl0dzMyKFJDVkRCRElfU1REX0JEICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsCi0JCSAgICAgUlhfU1REX01BWF9TSVpFIDw8IEJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpOwotCisJLyogRGlzYWJsZSB0aGUgbWluaSByaW5nICovCisJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQogCQl0dzMyKFJDVkRCRElfTUlOSV9CRCArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLAogCQkgICAgIEJESU5GT19GTEFHU19ESVNBQkxFRCk7CiAKKwkvKiBQcm9ncmFtIHRoZSBqdW1ibyBidWZmZXIgZGVzY3JpcHRvciByaW5nIGNvbnRyb2wKKwkgKiBibG9ja3Mgb24gdGhvc2UgZGV2aWNlcyB0aGF0IGhhdmUgdGhlbS4KKwkgKi8KKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19DQVBBQkxFKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKIAkJLyogU2V0dXAgcmVwbGVuaXNoIHRocmVzaG9sZC4gKi8KIAkJdHczMihSQ1ZCRElfSlVNQk9fVEhSRVNILCB0cC0+cnhfanVtYm9fcGVuZGluZyAvIDgpOwogCiAJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUpIHsKIAkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19ISUdILAotCQkJICAgICAoKHU2NCkgdHAtPnJ4X2p1bWJvX21hcHBpbmcgPj4gMzIpKTsKKwkJCSAgICAgKCh1NjQpIHRwci0+cnhfam1iX21hcHBpbmcgPj4gMzIpKTsKIAkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fSE9TVF9BRERSICsgVEczXzY0QklUX1JFR19MT1csCi0JCQkgICAgICgodTY0KSB0cC0+cnhfanVtYm9fbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKKwkJCSAgICAgKCh1NjQpIHRwci0+cnhfam1iX21hcHBpbmcgJiAweGZmZmZmZmZmKSk7CiAJCQl0dzMyKFJDVkRCRElfSlVNQk9fQkQgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKLQkJCSAgICAgUlhfSlVNQk9fTUFYX1NJWkUgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVCk7CisJCQkgICAgIChSWF9KVU1CT19NQVhfU0laRSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSB8CisJCQkgICAgIEJESU5GT19GTEFHU19VU0VfRVhUX1JFQ1YpOwogCQkJdHczMihSQ1ZEQkRJX0pVTUJPX0JEICsgVEczX0JESU5GT19OSUNfQUREUiwKIAkJCSAgICAgTklDX1NSQU1fUlhfSlVNQk9fQlVGRkVSX0RFU0MpOwogCQl9IGVsc2UgewpAQCAtNjkyMiw1NyArNzM4OCwzMSBAQAogCQkJICAgICBCRElORk9fRkxBR1NfRElTQUJMRUQpOwogCQl9CiAKLQl9CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwkJCXZhbCA9IChSWF9TVERfTUFYX1NJWkVfNTcwNSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSB8CisJCQkgICAgICAoUlhfU1REX01BWF9TSVpFIDw8IDIpOworCQllbHNlCisJCQl2YWwgPSBSWF9TVERfTUFYX1NJWkUgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVDsKKwl9IGVsc2UKKwkJdmFsID0gUlhfU1REX01BWF9TSVpFXzU3MDUgPDwgQkRJTkZPX0ZMQUdTX01BWExFTl9TSElGVDsKIAotCS8qIFRoZXJlIGlzIG9ubHkgb25lIHNlbmQgcmluZyBvbiA1NzA1LzU3NTAsIG5vIG5lZWQgdG8gZXhwbGljaXRseQotCSAqIGRpc2FibGUgdGhlIG90aGVycy4KLQkgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKLQkJLyogQ2xlYXIgb3V0IHNlbmQgUkNCIHJpbmcgaW4gU1JBTS4gKi8KLQkJZm9yIChpID0gTklDX1NSQU1fU0VORF9SQ0I7IGkgPCBOSUNfU1JBTV9SQ1ZfUkVUX1JDQjsgaSArPSBURzNfQkRJTkZPX1NJWkUpCi0JCQl0ZzNfd3JpdGVfbWVtKHRwLCBpICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsCi0JCQkJICAgICAgQkRJTkZPX0ZMQUdTX0RJU0FCTEVEKTsKLQl9CisJdHczMihSQ1ZEQkRJX1NURF9CRCArIFRHM19CRElORk9fTUFYTEVOX0ZMQUdTLCB2YWwpOwogCi0JdHAtPnR4X3Byb2QgPSAwOwotCXRwLT50eF9jb25zID0gMDsKLQl0dzMyX21haWxib3goTUFJTEJPWF9TTkRIT1NUX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMCk7Ci0JdHczMl90eF9tYm94KE1BSUxCT1hfU05ETklDX1BST0RfSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMCk7Ci0KLQl0ZzNfc2V0X2JkaW5mbyh0cCwgTklDX1NSQU1fU0VORF9SQ0IsCi0JCSAgICAgICB0cC0+dHhfZGVzY19tYXBwaW5nLAotCQkgICAgICAgKFRHM19UWF9SSU5HX1NJWkUgPDwKLQkJCUJESU5GT19GTEFHU19NQVhMRU5fU0hJRlQpLAotCQkgICAgICAgTklDX1NSQU1fVFhfQlVGRkVSX0RFU0MpOwotCi0JLyogVGhlcmUgaXMgb25seSBvbmUgcmVjZWl2ZSByZXR1cm4gcmluZyBvbiA1NzA1LzU3NTAsIG5vIG5lZWQKLQkgKiB0byBleHBsaWNpdGx5IGRpc2FibGUgdGhlIG90aGVycy4KLQkgKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKLQkJZm9yIChpID0gTklDX1NSQU1fUkNWX1JFVF9SQ0I7IGkgPCBOSUNfU1JBTV9TVEFUU19CTEs7Ci0JCSAgICAgaSArPSBURzNfQkRJTkZPX1NJWkUpIHsKLQkJCXRnM193cml0ZV9tZW0odHAsIGkgKyBURzNfQkRJTkZPX01BWExFTl9GTEFHUywKLQkJCQkgICAgICBCRElORk9fRkxBR1NfRElTQUJMRUQpOwotCQl9Ci0JfQotCi0JdHAtPnJ4X3JjYl9wdHIgPSAwOwotCXR3MzJfcnhfbWJveChNQUlMQk9YX1JDVlJFVF9DT05fSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMCk7Ci0KLQl0ZzNfc2V0X2JkaW5mbyh0cCwgTklDX1NSQU1fUkNWX1JFVF9SQ0IsCi0JCSAgICAgICB0cC0+cnhfcmNiX21hcHBpbmcsCi0JCSAgICAgICAoVEczX1JYX1JDQl9SSU5HX1NJWkUodHApIDw8Ci0JCQlCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSwKLQkJICAgICAgIDApOwotCi0JdHAtPnJ4X3N0ZF9wdHIgPSB0cC0+cnhfcGVuZGluZzsKKwl0cHItPnJ4X3N0ZF9wdHIgPSB0cC0+cnhfcGVuZGluZzsKIAl0dzMyX3J4X21ib3goTUFJTEJPWF9SQ1ZfU1REX1BST0RfSURYICsgVEczXzY0QklUX1JFR19MT1csCi0JCSAgICAgdHAtPnJ4X3N0ZF9wdHIpOworCQkgICAgIHRwci0+cnhfc3RkX3B0cik7CiAKLQl0cC0+cnhfanVtYm9fcHRyID0gKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkgPwotCQkJCQkJdHAtPnJ4X2p1bWJvX3BlbmRpbmcgOiAwOworCXRwci0+cnhfam1iX3B0ciA9ICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUpID8KKwkJCSAgdHAtPnJ4X2p1bWJvX3BlbmRpbmcgOiAwOwogCXR3MzJfcnhfbWJveChNQUlMQk9YX1JDVl9KVU1CT19QUk9EX0lEWCArIFRHM182NEJJVF9SRUdfTE9XLAotCQkgICAgIHRwLT5yeF9qdW1ib19wdHIpOworCQkgICAgIHRwci0+cnhfam1iX3B0cik7CisKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpIHsKKwkJdHczMihTVERfUkVQTEVOSVNIX0xXTSwgMzIpOworCQl0dzMyKEpNQl9SRVBMRU5JU0hfTFdNLCAxNik7CisJfQorCisJdGczX3JpbmdzX3Jlc2V0KHRwKTsKIAogCS8qIEluaXRpYWxpemUgTUFDIGFkZHJlc3MgYW5kIGJhY2tvZmYgc2VlZC4gKi8KIAlfX3RnM19zZXRfbWFjX2FkZHIodHAsIDApOwpAQCAtNzA2MSwxMiArNzUwMSw2IEBACiAKIAlfX3RnM19zZXRfY29hbGVzY2UodHAsICZ0cC0+Y29hbCk7CiAKLQkvKiBzZXQgc3RhdHVzIGJsb2NrIERNQSBhZGRyZXNzICovCi0JdHczMihIT1NUQ0NfU1RBVFVTX0JMS19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0hJR0gsCi0JICAgICAoKHU2NCkgdHAtPnN0YXR1c19tYXBwaW5nID4+IDMyKSk7Ci0JdHczMihIT1NUQ0NfU1RBVFVTX0JMS19IT1NUX0FERFIgKyBURzNfNjRCSVRfUkVHX0xPVywKLQkgICAgICgodTY0KSB0cC0+c3RhdHVzX21hcHBpbmcgJiAweGZmZmZmZmZmKSk7Ci0KIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKIAkJLyogU3RhdHVzL3N0YXRpc3RpY3MgYmxvY2sgYWRkcmVzcy4gIFNlZSB0ZzNfdGltZXIsCiAJCSAqIHRoZSB0ZzNfcGVyaW9kaWNfZmV0Y2hfc3RhdHMgY2FsbCB0aGVyZSwgYW5kCkBAIC03MDc3LDcgKzc1MTEsMTYgQEAKIAkJdHczMihIT1NUQ0NfU1RBVFNfQkxLX0hPU1RfQUREUiArIFRHM182NEJJVF9SRUdfTE9XLAogCQkgICAgICgodTY0KSB0cC0+c3RhdHNfbWFwcGluZyAmIDB4ZmZmZmZmZmYpKTsKIAkJdHczMihIT1NUQ0NfU1RBVFNfQkxLX05JQ19BRERSLCBOSUNfU1JBTV9TVEFUU19CTEspOworCiAJCXR3MzIoSE9TVENDX1NUQVRVU19CTEtfTklDX0FERFIsIE5JQ19TUkFNX1NUQVRVU19CTEspOworCisJCS8qIENsZWFyIHN0YXRpc3RpY3MgYW5kIHN0YXR1cyBibG9jayBtZW1vcnkgYXJlYXMgKi8KKwkJZm9yIChpID0gTklDX1NSQU1fU1RBVFNfQkxLOworCQkgICAgIGkgPCBOSUNfU1JBTV9TVEFUVVNfQkxLICsgVEczX0hXX1NUQVRVU19TSVpFOworCQkgICAgIGkgKz0gc2l6ZW9mKHUzMikpIHsKKwkJCXRnM193cml0ZV9tZW0odHAsIGksIDApOworCQkJdWRlbGF5KDQwKTsKKwkJfQogCX0KIAogCXR3MzIoSE9TVENDX01PREUsIEhPU1RDQ19NT0RFX0VOQUJMRSB8IHRwLT5jb2FsZXNjZV9tb2RlKTsKQEAgLTcwODcsMTUgKzc1MzAsNiBAQAogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKIAkJdHczMihSQ1ZMU0NfTU9ERSwgUkNWTFNDX01PREVfRU5BQkxFIHwgUkNWTFNDX01PREVfQVRUTl9FTkFCTEUpOwogCi0JLyogQ2xlYXIgc3RhdGlzdGljcy9zdGF0dXMgYmxvY2sgaW4gY2hpcCwgYW5kIHN0YXR1cyBibG9jayBpbiByYW0uICovCi0JZm9yIChpID0gTklDX1NSQU1fU1RBVFNfQkxLOwotCSAgICAgaSA8IE5JQ19TUkFNX1NUQVRVU19CTEsgKyBURzNfSFdfU1RBVFVTX1NJWkU7Ci0JICAgICBpICs9IHNpemVvZih1MzIpKSB7Ci0JCXRnM193cml0ZV9tZW0odHAsIGksIDApOwotCQl1ZGVsYXkoNDApOwotCX0KLQltZW1zZXQodHAtPmh3X3N0YXR1cywgMCwgVEczX0hXX1NUQVRVU19TSVpFKTsKLQogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpIHsKIAkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVDsKIAkJLyogcmVzZXQgdG8gcHJldmVudCBsb3NpbmcgMXN0IHJ4IHBhY2tldCBpbnRlcm1pdHRlbnRseSAqLwpAQCAtNzE0Nyw3ICs3NTgxLDExIEBACiAJdHczMl9mKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwpOwogCXVkZWxheSgxMDApOwogCi0JdHczMl9tYWlsYm94X2YoTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLCAwKTsKKwlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0lYKSB7CisJCXZhbCA9IHRyMzIoTVNHSU5UX01PREUpOworCQl2YWwgfD0gTVNHSU5UX01PREVfTVVMVElWRUNfRU4gfCBNU0dJTlRfTU9ERV9FTkFCTEU7CisJCXR3MzIoTVNHSU5UX01PREUsIHZhbCk7CisJfQogCiAJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKSB7CiAJCXR3MzJfZihETUFDX01PREUsIERNQUNfTU9ERV9FTkFCTEUpOwpAQCAtNzE2NCw3ICs3NjAyLDcgQEAKIAlpZiAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1ICYmCiAJICAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMCkgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTApIHsKLQkJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMRzJfVFNPX0NBUEFCTEUpICYmCisJCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkgJiYKIAkJICAgICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwNV9BMSB8fAogCQkgICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzA1X0EyKSkgewogCQkJLyogbm90aGluZyAqLwpAQCAtNzIxNyw3ICs3NjU1LDEwIEBACiAJdHczMihTTkREQVRBSV9NT0RFLCBTTkREQVRBSV9NT0RFX0VOQUJMRSk7CiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSFdfVFNPKQogCQl0dzMyKFNORERBVEFJX01PREUsIFNORERBVEFJX01PREVfRU5BQkxFIHwgMHg4KTsKLQl0dzMyKFNOREJESV9NT0RFLCBTTkRCRElfTU9ERV9FTkFCTEUgfCBTTkRCRElfTU9ERV9BVFROX0VOQUJMRSk7CisJdmFsID0gU05EQkRJX01PREVfRU5BQkxFIHwgU05EQkRJX01PREVfQVRUTl9FTkFCTEU7CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJWCkKKwkJdmFsIHw9IFNOREJESV9NT0RFX01VTFRJX1RYUV9FTjsKKwl0dzMyKFNOREJESV9NT0RFLCB2YWwpOwogCXR3MzIoU05EQkRTX01PREUsIFNOREJEU19NT0RFX0VOQUJMRSB8IFNOREJEU19NT0RFX0FUVE5fRU5BQkxFKTsKIAogCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMV9BMCkgewpAQCAtNzIzNiwxMCArNzY3Nyw0NiBAQAogCXR3MzJfZihNQUNfVFhfTU9ERSwgdHAtPnR4X21vZGUpOwogCXVkZWxheSgxMDApOwogCisJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykgeworCQl1MzIgcmVnID0gTUFDX1JTU19JTkRJUl9UQkxfMDsKKwkJdTggKmVudCA9ICh1OCAqKSZ2YWw7CisKKwkJLyogU2V0dXAgdGhlIGluZGlyZWN0aW9uIHRhYmxlICovCisJCWZvciAoaSA9IDA7IGkgPCBURzNfUlNTX0lORElSX1RCTF9TSVpFOyBpKyspIHsKKwkJCWludCBpZHggPSBpICUgc2l6ZW9mKHZhbCk7CisKKwkJCWVudFtpZHhdID0gaSAlICh0cC0+aXJxX2NudCAtIDEpOworCQkJaWYgKGlkeCA9PSBzaXplb2YodmFsKSAtIDEpIHsKKwkJCQl0dzMyKHJlZywgdmFsKTsKKwkJCQlyZWcgKz0gNDsKKwkJCX0KKwkJfQorCisJCS8qIFNldHVwIHRoZSAic2VjcmV0IiBoYXNoIGtleS4gKi8KKwkJdHczMihNQUNfUlNTX0hBU0hfS0VZXzAsIDB4NWY4NjU0MzcpOworCQl0dzMyKE1BQ19SU1NfSEFTSF9LRVlfMSwgMHhlNGFjNjJjYyk7CisJCXR3MzIoTUFDX1JTU19IQVNIX0tFWV8yLCAweDUwMTAzYTQ1KTsKKwkJdHczMihNQUNfUlNTX0hBU0hfS0VZXzMsIDB4MzY2MjE5ODUpOworCQl0dzMyKE1BQ19SU1NfSEFTSF9LRVlfNCwgMHhiZjE0YzBlOCk7CisJCXR3MzIoTUFDX1JTU19IQVNIX0tFWV81LCAweDFiYzI3YTFlKTsKKwkJdHczMihNQUNfUlNTX0hBU0hfS0VZXzYsIDB4ODRmNGI1NTYpOworCQl0dzMyKE1BQ19SU1NfSEFTSF9LRVlfNywgMHgwOTRlYTZmZSk7CisJCXR3MzIoTUFDX1JTU19IQVNIX0tFWV84LCAweDdkZGEwMWU3KTsKKwkJdHczMihNQUNfUlNTX0hBU0hfS0VZXzksIDB4YzA0ZDc0ODEpOworCX0KKwogCXRwLT5yeF9tb2RlID0gUlhfTU9ERV9FTkFCTEU7CiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKQogCQl0cC0+cnhfbW9kZSB8PSBSWF9NT0RFX0lQVjZfQ1NVTV9FTkFCTEU7CiAKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfUlNTKQorCQl0cC0+cnhfbW9kZSB8PSBSWF9NT0RFX1JTU19FTkFCTEUgfAorCQkJICAgICAgIFJYX01PREVfUlNTX0lUQkxfSEFTSF9CSVRTXzcgfAorCQkJICAgICAgIFJYX01PREVfUlNTX0lQVjZfSEFTSF9FTiB8CisJCQkgICAgICAgUlhfTU9ERV9SU1NfVENQX0lQVjZfSEFTSF9FTiB8CisJCQkgICAgICAgUlhfTU9ERV9SU1NfSVBWNF9IQVNIX0VOIHwKKwkJCSAgICAgICBSWF9NT0RFX1JTU19UQ1BfSVBWNF9IQVNIX0VOOworCiAJdHczMl9mKE1BQ19SWF9NT0RFLCB0cC0+cnhfbW9kZSk7CiAJdWRlbGF5KDEwKTsKIApAQCAtNzMwMiw3ICs3Nzc5LDcgQEAKIAkJCXJldHVybiBlcnI7CiAKIAkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSAmJgotCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYpIHsKKwkJICAgICEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSkgewogCQkJdTMyIHRtcDsKIAogCQkJLyogQ2xlYXIgQ1JDIHN0YXRzLiAqLwpAQCAtNzQ0OSwxMiArNzkyNiwxMiBAQAogCQkgKiBJUlEgc3RhdHVzIHRoZSBtYWlsYm94L3N0YXR1c19ibG9jayBwcm90b2NvbCB0aGUgY2hpcAogCQkgKiB1c2VzIHdpdGggdGhlIGNwdSBpcyByYWNlIHByb25lLgogCQkgKi8KLQkJaWYgKHRwLT5od19zdGF0dXMtPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSB7CisJCWlmICh0cC0+bmFwaVswXS5od19zdGF0dXMtPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSB7CiAJCQl0dzMyKEdSQ19MT0NBTF9DVFJMLAogCQkJICAgICB0cC0+Z3JjX2xvY2FsX2N0cmwgfCBHUkNfTENMQ1RSTF9TRVRJTlQpOwogCQl9IGVsc2UgewogCQkJdHczMihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxlc2NlX21vZGUgfAotCQkJICAgICAoSE9TVENDX01PREVfRU5BQkxFIHwgSE9TVENDX01PREVfTk9XKSk7CisJCQkgICAgIEhPU1RDQ19NT0RFX0VOQUJMRSB8IEhPU1RDQ19NT0RFX05PVyk7CiAJCX0KIAogCQlpZiAoISh0cjMyKFdETUFDX01PREUpICYgV0RNQUNfTU9ERV9FTkFCTEUpKSB7CkBAIC03NTU1LDEzICs4MDMyLDIyIEBACiAJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwogfQogCi1zdGF0aWMgaW50IHRnM19yZXF1ZXN0X2lycShzdHJ1Y3QgdGczICp0cCkKK3N0YXRpYyBpbnQgdGczX3JlcXVlc3RfaXJxKHN0cnVjdCB0ZzMgKnRwLCBpbnQgaXJxX251bSkKIHsKIAlpcnFfaGFuZGxlcl90IGZuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHRwLT5kZXY7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2lycV9udW1dOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7CisJaWYgKHRwLT5pcnFfY250ID09IDEpCisJCW5hbWUgPSB0cC0+ZGV2LT5uYW1lOworCWVsc2UgeworCQluYW1lID0gJnRuYXBpLT5pcnFfbGJsWzBdOworCQlzbnByaW50ZihuYW1lLCBJRk5BTVNJWiwgIiVzLSVkIiwgdHAtPmRldi0+bmFtZSwgaXJxX251bSk7CisJCW5hbWVbSUZOQU1TSVotMV0gPSAwOworCX0KKworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSV9PUl9NU0lYKSB7CiAJCWZuID0gdGczX21zaTsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfMVNIT1RfTVNJKQogCQkJZm4gPSB0ZzNfbXNpXzFzaG90OwpAQCAtNzU3MiwzNyArODA1OCw0OSBAQAogCQkJZm4gPSB0ZzNfaW50ZXJydXB0X3RhZ2dlZDsKIAkJZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTTsKIAl9Ci0JcmV0dXJuIChyZXF1ZXN0X2lycSh0cC0+cGRldi0+aXJxLCBmbiwgZmxhZ3MsIGRldi0+bmFtZSwgZGV2KSk7CisKKwlyZXR1cm4gcmVxdWVzdF9pcnEodG5hcGktPmlycV92ZWMsIGZuLCBmbGFncywgbmFtZSwgdG5hcGkpOwogfQogCiBzdGF0aWMgaW50IHRnM190ZXN0X2ludGVycnVwdChzdHJ1Y3QgdGczICp0cCkKIHsKKwlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpWzBdOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0cC0+ZGV2OwogCWludCBlcnIsIGksIGludHJfb2sgPSAwOworCXUzMiB2YWw7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl0ZzNfZGlzYWJsZV9pbnRzKHRwKTsKIAotCWZyZWVfaXJxKHRwLT5wZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEodG5hcGktPmlycV92ZWMsIHRuYXBpKTsKIAotCWVyciA9IHJlcXVlc3RfaXJxKHRwLT5wZGV2LT5pcnEsIHRnM190ZXN0X2lzciwKLQkJCSAgSVJRRl9TSEFSRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sIGRldi0+bmFtZSwgZGV2KTsKKwkvKgorCSAqIFR1cm4gb2ZmIE1TSSBvbmUgc2hvdCBtb2RlLiAgT3RoZXJ3aXNlIHRoaXMgdGVzdCBoYXMgbm8KKwkgKiBvYnNlcnZhYmxlIHdheSB0byBrbm93IHdoZXRoZXIgdGhlIGludGVycnVwdCB3YXMgZGVsaXZlcmVkLgorCSAqLworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyAmJgorCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpKSB7CisJCXZhbCA9IHRyMzIoTVNHSU5UX01PREUpIHwgTVNHSU5UX01PREVfT05FX1NIT1RfRElTQUJMRTsKKwkJdHczMihNU0dJTlRfTU9ERSwgdmFsKTsKKwl9CisKKwllcnIgPSByZXF1ZXN0X2lycSh0bmFwaS0+aXJxX3ZlYywgdGczX3Rlc3RfaXNyLAorCQkJICBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwgZGV2LT5uYW1lLCB0bmFwaSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXRwLT5od19zdGF0dXMtPnN0YXR1cyAmPSB+U0RfU1RBVFVTX1VQREFURUQ7CisJdG5hcGktPmh3X3N0YXR1cy0+c3RhdHVzICY9IH5TRF9TVEFUVVNfVVBEQVRFRDsKIAl0ZzNfZW5hYmxlX2ludHModHApOwogCiAJdHczMl9mKEhPU1RDQ19NT0RFLCB0cC0+Y29hbGVzY2VfbW9kZSB8IEhPU1RDQ19NT0RFX0VOQUJMRSB8Ci0JICAgICAgIEhPU1RDQ19NT0RFX05PVyk7CisJICAgICAgIHRuYXBpLT5jb2FsX25vdyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAJCXUzMiBpbnRfbWJveCwgbWlzY19ob3N0X2N0cmw7CiAKLQkJaW50X21ib3ggPSB0cjMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArCi0JCQkJCVRHM182NEJJVF9SRUdfTE9XKTsKKwkJaW50X21ib3ggPSB0cjMyX21haWxib3godG5hcGktPmludF9tYm94KTsKIAkJbWlzY19ob3N0X2N0cmwgPSB0cjMyKFRHM1BDSV9NSVNDX0hPU1RfQ1RSTCk7CiAKIAkJaWYgKChpbnRfbWJveCAhPSAwKSB8fApAQCAtNzYxNiwxNSArODExNCwyMiBAQAogCiAJdGczX2Rpc2FibGVfaW50cyh0cCk7CiAKLQlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHRuYXBpLT5pcnFfdmVjLCB0bmFwaSk7CiAKLQllcnIgPSB0ZzNfcmVxdWVzdF9pcnEodHApOworCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCwgMCk7CiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKGludHJfb2spCisJaWYgKGludHJfb2spIHsKKwkJLyogUmVlbmFibGUgTVNJIG9uZSBzaG90IG1vZGUuICovCisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNyAmJgorCQkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSkgeworCQkJdmFsID0gdHIzMihNU0dJTlRfTU9ERSkgJiB+TVNHSU5UX01PREVfT05FX1NIT1RfRElTQUJMRTsKKwkJCXR3MzIoTVNHSU5UX01PREUsIHZhbCk7CisJCX0KIAkJcmV0dXJuIDA7CisJfQogCiAJcmV0dXJuIC1FSU87CiB9CkBAIC03NjM0LDcgKzgxMzksNiBAQAogICovCiBzdGF0aWMgaW50IHRnM190ZXN0X21zaShzdHJ1Y3QgdGczICp0cCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtPmRldjsKIAlpbnQgZXJyOwogCXUxNiBwY2lfY21kOwogCkBAIC03NjY1LDEyICs4MTY5LDEzIEBACiAJICAgICAgICJ0aGUgUENJIG1haW50YWluZXIgYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iLAogCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CiAKLQlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHRwLT5uYXBpWzBdLmlycV92ZWMsICZ0cC0+bmFwaVswXSk7CisKIAlwY2lfZGlzYWJsZV9tc2kodHAtPnBkZXYpOwogCiAJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1VTSU5HX01TSTsKIAotCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCk7CisJZXJyID0gdGczX3JlcXVlc3RfaXJxKHRwLCAwKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC03Njg1LDcgKzgxOTAsNyBAQAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKIAlpZiAoZXJyKQotCQlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOworCQlmcmVlX2lycSh0cC0+bmFwaVswXS5pcnFfdmVjLCAmdHAtPm5hcGlbMF0pOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTc3MjEsMTAgKzgyMjYsOTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGJvb2wgdGczX2VuYWJsZV9tc2l4KHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpLCByYywgY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50W3RwLT5pcnFfbWF4XTsKKworCWlmIChjcHVzID09IDEpCisJCS8qIEp1c3QgZmFsbGJhY2sgdG8gdGhlIHNpbXBsZXIgTVNJIG1vZGUuICovCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2Ugd2FudCBhcyBtYW55IHJ4IHJpbmdzIGVuYWJsZWQgYXMgdGhlcmUgYXJlIGNwdXMuCisJICogVGhlIGZpcnN0IE1TSVggdmVjdG9yIG9ubHkgZGVhbHMgd2l0aCBsaW5rIGludGVycnVwdHMsIGV0YywKKwkgKiBzbyB3ZSBhZGQgb25lIHRvIHRoZSBudW1iZXIgb2YgdmVjdG9ycyB3ZSBhcmUgcmVxdWVzdGluZy4KKwkgKi8KKwl0cC0+aXJxX2NudCA9IG1pbl90KHVuc2lnbmVkLCBjcHVzICsgMSwgdHAtPmlycV9tYXgpOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfbWF4OyBpKyspIHsKKwkJbXNpeF9lbnRbaV0uZW50cnkgID0gaTsKKwkJbXNpeF9lbnRbaV0udmVjdG9yID0gMDsKKwl9CisKKwlyYyA9IHBjaV9lbmFibGVfbXNpeCh0cC0+cGRldiwgbXNpeF9lbnQsIHRwLT5pcnFfY250KTsKKwlpZiAocmMgIT0gMCkgeworCQlpZiAocmMgPCBURzNfUlNTX01JTl9OVU1fTVNJWF9WRUNTKQorCQkJcmV0dXJuIGZhbHNlOworCQlpZiAocGNpX2VuYWJsZV9tc2l4KHRwLT5wZGV2LCBtc2l4X2VudCwgcmMpKQorCQkJcmV0dXJuIGZhbHNlOworCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJICAgICAgICIlczogUmVxdWVzdGVkICVkIE1TSS1YIHZlY3RvcnMsIHJlY2VpdmVkICVkXG4iLAorCQkgICAgICAgdHAtPmRldi0+bmFtZSwgdHAtPmlycV9jbnQsIHJjKTsKKwkJdHAtPmlycV9jbnQgPSByYzsKKwl9CisKKwl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19FTkFCTEVfUlNTOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfbWF4OyBpKyspCisJCXRwLT5uYXBpW2ldLmlycV92ZWMgPSBtc2l4X2VudFtpXS52ZWN0b3I7CisKKwl0cC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSB0cC0+aXJxX2NudCAtIDE7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgdGczX2ludHNfaW5pdChzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TVVBQT1JUX01TSV9PUl9NU0lYKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSkgeworCQkvKiBBbGwgTVNJIHN1cHBvcnRpbmcgY2hpcHMgc2hvdWxkIHN1cHBvcnQgdGFnZ2VkCisJCSAqIHN0YXR1cy4gIEFzc2VydCB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuCisJCSAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IE1TSSB3aXRob3V0IFRBR0dFRD8gIgorCQkgICAgICAgIk5vdCB1c2luZyBNU0kuXG4iLCB0cC0+ZGV2LT5uYW1lKTsKKwkJZ290byBkZWZjZmc7CisJfQorCisJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0lYKSAmJiB0ZzNfZW5hYmxlX21zaXgodHApKQorCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9VU0lOR19NU0lYOworCWVsc2UgaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0kpICYmCisJCSBwY2lfZW5hYmxlX21zaSh0cC0+cGRldikgPT0gMCkKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfVVNJTkdfTVNJOworCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJX09SX01TSVgpIHsKKwkJdTMyIG1zaV9tb2RlID0gdHIzMihNU0dJTlRfTU9ERSk7CisJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpCisJCQltc2lfbW9kZSB8PSBNU0dJTlRfTU9ERV9NVUxUSVZFQ19FTjsKKwkJdHczMihNU0dJTlRfTU9ERSwgbXNpX21vZGUgfCBNU0dJTlRfTU9ERV9FTkFCTEUpOworCX0KK2RlZmNmZzoKKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpKSB7CisJCXRwLT5pcnFfY250ID0gMTsKKwkJdHAtPm5hcGlbMF0uaXJxX3ZlYyA9IHRwLT5wZGV2LT5pcnE7CisJCXRwLT5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZzNfaW50c19maW5pKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSVgpCisJCXBjaV9kaXNhYmxlX21zaXgodHAtPnBkZXYpOworCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKQorCQlwY2lfZGlzYWJsZV9tc2kodHAtPnBkZXYpOworCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0lfT1JfTVNJWDsKKwl0cC0+dGczX2ZsYWdzMyAmPSB+VEczX0ZMRzNfRU5BQkxFX1JTUzsKK30KKwogc3RhdGljIGludCB0ZzNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlpZiAodHAtPmZ3X25lZWRlZCkgewogCQllcnIgPSB0ZzNfcmVxdWVzdF9maXJtd2FyZSh0cCk7CkBAIC03NzU1LDQwICs4MzQ1LDMzIEBACiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogCisJLyoKKwkgKiBTZXR1cCBpbnRlcnJ1cHRzIGZpcnN0IHNvIHdlIGtub3cgaG93CisJICogbWFueSBOQVBJIHJlc291cmNlcyB0byBhbGxvY2F0ZQorCSAqLworCXRnM19pbnRzX2luaXQodHApOworCiAJLyogVGhlIHBsYWNlbWVudCBvZiB0aGlzIGNhbGwgaXMgdGllZAogCSAqIHRvIHRoZSBzZXR1cCBhbmQgdXNlIG9mIEhvc3QgVFggZGVzY3JpcHRvcnMuCiAJICovCiAJZXJyID0gdGczX2FsbG9jX2NvbnNpc3RlbnQodHApOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyX291dDE7CiAKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NVUFBPUlRfTVNJKSB7Ci0JCS8qIEFsbCBNU0kgc3VwcG9ydGluZyBjaGlwcyBzaG91bGQgc3VwcG9ydCB0YWdnZWQKLQkJICogc3RhdHVzLiAgQXNzZXJ0IHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4KLQkJICovCi0JCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UQUdHRURfU1RBVFVTKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBNU0kgd2l0aG91dCBUQUdHRUQ/ICIKLQkJCSAgICAgICAiTm90IHVzaW5nIE1TSS5cbiIsIHRwLT5kZXYtPm5hbWUpOwotCQl9IGVsc2UgaWYgKHBjaV9lbmFibGVfbXNpKHRwLT5wZGV2KSA9PSAwKSB7Ci0JCQl1MzIgbXNpX21vZGU7CisJdGczX25hcGlfZW5hYmxlKHRwKTsKIAotCQkJbXNpX21vZGUgPSB0cjMyKE1TR0lOVF9NT0RFKTsKLQkJCXR3MzIoTVNHSU5UX01PREUsIG1zaV9tb2RlIHwgTVNHSU5UX01PREVfRU5BQkxFKTsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1VTSU5HX01TSTsKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykgeworCQlzdHJ1Y3QgdGczX25hcGkgKnRuYXBpID0gJnRwLT5uYXBpW2ldOworCQllcnIgPSB0ZzNfcmVxdWVzdF9pcnEodHAsIGkpOworCQlpZiAoZXJyKSB7CisJCQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCisJCQkJZnJlZV9pcnEodG5hcGktPmlycV92ZWMsIHRuYXBpKTsKKwkJCWJyZWFrOwogCQl9CiAJfQotCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCk7CiAKLQlpZiAoZXJyKSB7Ci0JCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgewotCQkJcGNpX2Rpc2FibGVfbXNpKHRwLT5wZGV2KTsKLQkJCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9VU0lOR19NU0k7Ci0JCX0KLQkJdGczX2ZyZWVfY29uc2lzdGVudCh0cCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbmFwaV9lbmFibGUoJnRwLT5uYXBpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQyOwogCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKQEAgLTc4MTYsNDUgKzgzOTksMjggQEAKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKLQlpZiAoZXJyKSB7Ci0JCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwotCQlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOwotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKLQkJCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7Ci0JCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOwotCQl9Ci0JCXRnM19mcmVlX2NvbnNpc3RlbnQodHApOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQzOwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfVVNJTkdfTVNJKSB7CiAJCWVyciA9IHRnM190ZXN0X21zaSh0cCk7CiAKIAkJaWYgKGVycikgewogCQkJdGczX2Z1bGxfbG9jayh0cCwgMCk7Ci0KLQkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgewotCQkJCXBjaV9kaXNhYmxlX21zaSh0cC0+cGRldik7Ci0JCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1VTSU5HX01TSTsKLQkJCX0KIAkJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKIAkJCXRnM19mcmVlX3JpbmdzKHRwKTsKLQkJCXRnM19mcmVlX2NvbnNpc3RlbnQodHApOwotCiAJCQl0ZzNfZnVsbF91bmxvY2sodHApOwogCi0JCQluYXBpX2Rpc2FibGUoJnRwLT5uYXBpKTsKLQotCQkJcmV0dXJuIGVycjsKKwkJCWdvdG8gZXJyX291dDI7CiAJCX0KIAotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKLQkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzFTSE9UX01TSSkgewotCQkJCXUzMiB2YWwgPSB0cjMyKFBDSUVfVFJBTlNBQ1RJT05fQ0ZHKTsKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3ICYmCisJCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpICYmCisJCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpKSB7CisJCQl1MzIgdmFsID0gdHIzMihQQ0lFX1RSQU5TQUNUSU9OX0NGRyk7CiAKLQkJCQl0dzMyKFBDSUVfVFJBTlNBQ1RJT05fQ0ZHLAotCQkJCSAgICAgdmFsIHwgUENJRV9UUkFOU19DRkdfMVNIT1RfTVNJKTsKLQkJCX0KKwkJCXR3MzIoUENJRV9UUkFOU0FDVElPTl9DRkcsCisJCQkgICAgIHZhbCB8IFBDSUVfVFJBTlNfQ0ZHXzFTSE9UX01TSSk7CiAJCX0KIAl9CiAKQEAgLTc4NjgsOSArODQzNCwyMyBAQAogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIAotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9vdXQzOgorCWZvciAoaSA9IHRwLT5pcnFfY250IC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKKwkJZnJlZV9pcnEodG5hcGktPmlycV92ZWMsIHRuYXBpKTsKKwl9CisKK2Vycl9vdXQyOgorCXRnM19uYXBpX2Rpc2FibGUodHApOworCXRnM19mcmVlX2NvbnNpc3RlbnQodHApOworCitlcnJfb3V0MToKKwl0ZzNfaW50c19maW5pKHRwKTsKKwlyZXR1cm4gZXJyOwogfQogCiAjaWYgMApAQCAtNzg3OSw2ICs4NDU5LDcgQEAKIAl1MzIgdmFsMzIsIHZhbDMyXzIsIHZhbDMyXzMsIHZhbDMyXzQsIHZhbDMyXzU7CiAJdTE2IHZhbDE2OwogCWludCBpOworCXN0cnVjdCB0ZzNfaHdfc3RhdHVzICpzYmxrID0gdHAtPm5hcGlbMF0tPmh3X3N0YXR1czsKIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wZGV2LCBQQ0lfU1RBVFVTLCAmdmFsMTYpOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgVEczUENJX1BDSVNUQVRFLCAmdmFsMzIpOwpAQCAtODAzMSwxNCArODYxMiwxNSBAQAogCSAgICAgICB2YWwzMiwgdmFsMzJfMiwgdmFsMzJfMywgdmFsMzJfNCwgdmFsMzJfNSk7CiAKIAkvKiBTVyBzdGF0dXMgYmxvY2sgKi8KLQlwcmludGsoIkRFQlVHOiBIb3N0IHN0YXR1cyBibG9jayBbJTA4eDolMDh4OiglMDR4OiUwNHg6JTA0eCk6KCUwNHg6JTA0eCldXG4iLAotCSAgICAgICB0cC0+aHdfc3RhdHVzLT5zdGF0dXMsCi0JICAgICAgIHRwLT5od19zdGF0dXMtPnN0YXR1c190YWcsCi0JICAgICAgIHRwLT5od19zdGF0dXMtPnJ4X2p1bWJvX2NvbnN1bWVyLAotCSAgICAgICB0cC0+aHdfc3RhdHVzLT5yeF9jb25zdW1lciwKLQkgICAgICAgdHAtPmh3X3N0YXR1cy0+cnhfbWluaV9jb25zdW1lciwKLQkgICAgICAgdHAtPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyLAotCSAgICAgICB0cC0+aHdfc3RhdHVzLT5pZHhbMF0udHhfY29uc3VtZXIpOworCXByaW50ayhLRVJOX0RFQlVHCisJICJIb3N0IHN0YXR1cyBibG9jayBbJTA4eDolMDh4OiglMDR4OiUwNHg6JTA0eCk6KCUwNHg6JTA0eCldXG4iLAorCSAgICAgICBzYmxrLT5zdGF0dXMsCisJICAgICAgIHNibGstPnN0YXR1c190YWcsCisJICAgICAgIHNibGstPnJ4X2p1bWJvX2NvbnN1bWVyLAorCSAgICAgICBzYmxrLT5yeF9jb25zdW1lciwKKwkgICAgICAgc2Jsay0+cnhfbWluaV9jb25zdW1lciwKKwkgICAgICAgc2Jsay0+aWR4WzBdLnJ4X3Byb2R1Y2VyLAorCSAgICAgICBzYmxrLT5pZHhbMF0udHhfY29uc3VtZXIpOwogCiAJLyogU1cgc3RhdGlzdGljcyBibG9jayAqLwogCXByaW50aygiREVCVUc6IEhvc3Qgc3RhdGlzdGljcyBibG9jayBbJTA4eDolMDh4OiUwOHg6JTA4eF1cbiIsCkBAIC04MTA2LDEyICs4Njg4LDEzIEBACiAKIHN0YXRpYyBpbnQgdGczX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJaW50IGk7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JbmFwaV9kaXNhYmxlKCZ0cC0+bmFwaSk7CisJdGczX25hcGlfZGlzYWJsZSh0cCk7CiAJY2FuY2VsX3dvcmtfc3luYygmdHAtPnJlc2V0X3Rhc2spOwogCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOwogCiAJZGVsX3RpbWVyX3N5bmMoJnRwLT50aW1lcik7CiAKQEAgLTgxMjgsMTIgKzg3MTEsMTMgQEAKIAogCXRnM19mdWxsX3VubG9jayh0cCk7CiAKLQlmcmVlX2lycSh0cC0+cGRldi0+aXJxLCBkZXYpOwotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1VTSU5HX01TSSkgewotCQlwY2lfZGlzYWJsZV9tc2kodHAtPnBkZXYpOwotCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVVNJTkdfTVNJOworCWZvciAoaSA9IHRwLT5pcnFfY250IC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKKwkJZnJlZV9pcnEodG5hcGktPmlycV92ZWMsIHRuYXBpKTsKIAl9CiAKKwl0ZzNfaW50c19maW5pKHRwKTsKKwogCW1lbWNweSgmdHAtPm5ldF9zdGF0c19wcmV2LCB0ZzNfZ2V0X3N0YXRzKHRwLT5kZXYpLAogCSAgICAgICBzaXplb2YodHAtPm5ldF9zdGF0c19wcmV2KSk7CiAJbWVtY3B5KCZ0cC0+ZXN0YXRzX3ByZXYsIHRnM19nZXRfZXN0YXRzKHRwKSwKQEAgLTg2OTcsNyArOTI4MSw3IEBACiAJCWNtZC0+c3BlZWQgPSB0cC0+bGlua19jb25maWcuYWN0aXZlX3NwZWVkOwogCQljbWQtPmR1cGxleCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4OwogCX0KLQljbWQtPnBoeV9hZGRyZXNzID0gUEhZX0FERFI7CisJY21kLT5waHlfYWRkcmVzcyA9IHRwLT5waHlfYWRkcjsKIAljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKIAljbWQtPmF1dG9uZWcgPSB0cC0+bGlua19jb25maWcuYXV0b25lZzsKIAljbWQtPm1heHR4cGt0ID0gMDsKQEAgLTg4NzIsNyArOTQ1Niw4IEBACiAJCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0ICYmCiAJCQkgICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3ODRfQVgpIHx8CiAJCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKLQkJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwIHx8CisJCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCiAJCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19FQ047CiAJCX0gZWxzZQogCQkJZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfVFNPX0VDTik7CkBAIC04OTM0LDEzICs5NTE5LDEzIEBACiAJZWxzZQogCQllcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7CiAKLQllcmluZy0+dHhfcGVuZGluZyA9IHRwLT50eF9wZW5kaW5nOworCWVyaW5nLT50eF9wZW5kaW5nID0gdHAtPm5hcGlbMF0udHhfcGVuZGluZzsKIH0KIAogc3RhdGljIGludCB0ZzNfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaXJxX3N5bmMgPSAwLCBlcnIgPSAwOworCWludCBpLCBpcnFfc3luYyA9IDAsIGVyciA9IDA7CiAKIAlpZiAoKGVyaW5nLT5yeF9wZW5kaW5nID4gVEczX1JYX1JJTkdfU0laRSAtIDEpIHx8CiAJICAgIChlcmluZy0+cnhfanVtYm9fcGVuZGluZyA+IFRHM19SWF9KVU1CT19SSU5HX1NJWkUgLSAxKSB8fApAQCAtODk2NCw3ICs5NTQ5LDkgQEAKIAkgICAgdHAtPnJ4X3BlbmRpbmcgPiA2MykKIAkJdHAtPnJ4X3BlbmRpbmcgPSA2MzsKIAl0cC0+cnhfanVtYm9fcGVuZGluZyA9IGVyaW5nLT5yeF9qdW1ib19wZW5kaW5nOwotCXRwLT50eF9wZW5kaW5nID0gZXJpbmctPnR4X3BlbmRpbmc7CisKKwlmb3IgKGkgPSAwOyBpIDwgVEczX0lSUV9NQVhfVkVDUzsgaSsrKQorCQl0cC0+bmFwaVtpXS50eF9wZW5kaW5nID0gZXJpbmctPnR4X3BlbmRpbmc7CiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXRnM19oYWx0KHRwLCBSRVNFVF9LSU5EX1NIVVRET1dOLCAxKTsKQEAgLTk2NzIsMTIgKzEwMjU5LDIzIEBACiBzdGF0aWMgaW50IHRnM19ydW5fbG9vcGJhY2soc3RydWN0IHRnMyAqdHAsIGludCBsb29wYmFja19tb2RlKQogewogCXUzMiBtYWNfbW9kZSwgcnhfc3RhcnRfaWR4LCByeF9pZHgsIHR4X2lkeCwgb3BhcXVlX2tleTsKLQl1MzIgZGVzY19pZHg7CisJdTMyIGRlc2NfaWR4LCBjb2FsX25vdzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqcnhfc2tiOwogCXU4ICp0eF9kYXRhOwogCWRtYV9hZGRyX3QgbWFwOwogCWludCBudW1fcGt0cywgdHhfbGVuLCByeF9sZW4sIGksIGVycjsKIAlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjICpkZXNjOworCXN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksICpybmFwaTsKKwlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldCAqdHByID0gJnRwLT5wcm9kcmluZ1swXTsKKworCWlmICh0cC0+aXJxX2NudCA+IDEpIHsKKwkJdG5hcGkgPSAmdHAtPm5hcGlbMV07CisJCXJuYXBpID0gJnRwLT5uYXBpWzFdOworCX0gZWxzZSB7CisJCXRuYXBpID0gJnRwLT5uYXBpWzBdOworCQlybmFwaSA9ICZ0cC0+bmFwaVswXTsKKwl9CisJY29hbF9ub3cgPSB0bmFwaS0+Y29hbF9ub3cgfCBybmFwaS0+Y29hbF9ub3c7CiAKIAlpZiAobG9vcGJhY2tfbW9kZSA9PSBURzNfTUFDX0xPT1BCQUNLKSB7CiAJCS8qIEhXIGVycmF0YSAtIG1hYyBsb29wYmFjayBmYWlscyBpbiBzb21lIGNhc2VzIG9uIDU3ODAuCkBAIC05Njk5LDE4ICsxMDI5Nyw4IEBACiAJfSBlbHNlIGlmIChsb29wYmFja19tb2RlID09IFRHM19QSFlfTE9PUEJBQ0spIHsKIAkJdTMyIHZhbDsKIAotCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKLQkJCXUzMiBwaHl0ZXN0OwotCi0JCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0VQSFlfVEVTVCwgJnBoeXRlc3QpKSB7Ci0JCQkJdTMyIHBoeTsKLQotCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FUEhZX1RFU1QsCi0JCQkJCSAgICAgcGh5dGVzdCB8IE1JSV9URzNfRVBIWV9TSEFET1dfRU4pOwotCQkJCWlmICghdGczX3JlYWRwaHkodHAsIDB4MWIsICZwaHkpKQotCQkJCQl0ZzNfd3JpdGVwaHkodHAsIDB4MWIsIHBoeSAmIH4weDIwKTsKLQkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWV9URVNULCBwaHl0ZXN0KTsKLQkJCX0KKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgeworCQkJdGczX3BoeV9mZXRfdG9nZ2xlX2FwZCh0cCwgZmFsc2UpOwogCQkJdmFsID0gQk1DUl9MT09QQkFDSyB8IEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwOwogCQl9IGVsc2UKIAkJCXZhbCA9IEJNQ1JfTE9PUEJBQ0sgfCBCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMDA7CkBAIC05NzIxLDggKzEwMzA5LDkgQEAKIAkJdWRlbGF5KDQwKTsKIAogCQltYWNfbW9kZSA9IHRwLT5tYWNfbW9kZSAmIH5NQUNfTU9ERV9QT1JUX01PREVfTUFTSzsKLQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWV9QVEVTVCwgMHgxODAwKTsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgeworCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQorCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfUFRFU1QsIDB4MTgwMCk7CiAJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOwogCQl9IGVsc2UKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwpAQCAtOTc2NSwzNSArMTAzNTQsMzQgQEAKIAltYXAgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGRldiwgc2tiLT5kYXRhLCB0eF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJdHczMl9mKEhPU1RDQ19NT0RFLCB0cC0+Y29hbGVzY2VfbW9kZSB8IEhPU1RDQ19NT0RFX0VOQUJMRSB8Ci0JICAgICBIT1NUQ0NfTU9ERV9OT1cpOworCSAgICAgICBybmFwaS0+Y29hbF9ub3cpOwogCiAJdWRlbGF5KDEwKTsKIAotCXJ4X3N0YXJ0X2lkeCA9IHRwLT5od19zdGF0dXMtPmlkeFswXS5yeF9wcm9kdWNlcjsKKwlyeF9zdGFydF9pZHggPSBybmFwaS0+aHdfc3RhdHVzLT5pZHhbMF0ucnhfcHJvZHVjZXI7CiAKIAludW1fcGt0cyA9IDA7CiAKLQl0ZzNfc2V0X3R4ZCh0cCwgdHAtPnR4X3Byb2QsIG1hcCwgdHhfbGVuLCAwLCAxKTsKKwl0ZzNfc2V0X3R4ZCh0bmFwaSwgdG5hcGktPnR4X3Byb2QsIG1hcCwgdHhfbGVuLCAwLCAxKTsKIAotCXRwLT50eF9wcm9kKys7CisJdG5hcGktPnR4X3Byb2QrKzsKIAludW1fcGt0cysrOwogCi0JdHczMl90eF9tYm94KE1BSUxCT1hfU05ESE9TVF9QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1csCi0JCSAgICAgdHAtPnR4X3Byb2QpOwotCXRyMzJfbWFpbGJveChNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XKTsKKwl0dzMyX3R4X21ib3godG5hcGktPnByb2RtYm94LCB0bmFwaS0+dHhfcHJvZCk7CisJdHIzMl9tYWlsYm94KHRuYXBpLT5wcm9kbWJveCk7CiAKIAl1ZGVsYXkoMTApOwogCiAJLyogMjUwIHVzZWMgdG8gYWxsb3cgZW5vdWdoIHRpbWUgb24gc29tZSAxMC8xMDAgTWJwcyBkZXZpY2VzLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjU7IGkrKykgewogCQl0dzMyX2YoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwgSE9TVENDX01PREVfRU5BQkxFIHwKLQkJICAgICAgIEhPU1RDQ19NT0RFX05PVyk7CisJCSAgICAgICBjb2FsX25vdyk7CiAKIAkJdWRlbGF5KDEwKTsKIAotCQl0eF9pZHggPSB0cC0+aHdfc3RhdHVzLT5pZHhbMF0udHhfY29uc3VtZXI7Ci0JCXJ4X2lkeCA9IHRwLT5od19zdGF0dXMtPmlkeFswXS5yeF9wcm9kdWNlcjsKLQkJaWYgKCh0eF9pZHggPT0gdHAtPnR4X3Byb2QpICYmCisJCXR4X2lkeCA9IHRuYXBpLT5od19zdGF0dXMtPmlkeFswXS50eF9jb25zdW1lcjsKKwkJcnhfaWR4ID0gcm5hcGktPmh3X3N0YXR1cy0+aWR4WzBdLnJ4X3Byb2R1Y2VyOworCQlpZiAoKHR4X2lkeCA9PSB0bmFwaS0+dHhfcHJvZCkgJiYKIAkJICAgIChyeF9pZHggPT0gKHJ4X3N0YXJ0X2lkeCArIG51bV9wa3RzKSkpCiAJCQlicmVhazsKIAl9CkBAIC05ODAxLDEzICsxMDM4OSwxMyBAQAogCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsIG1hcCwgdHhfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlpZiAodHhfaWR4ICE9IHRwLT50eF9wcm9kKQorCWlmICh0eF9pZHggIT0gdG5hcGktPnR4X3Byb2QpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHJ4X2lkeCAhPSByeF9zdGFydF9pZHggKyBudW1fcGt0cykKIAkJZ290byBvdXQ7CiAKLQlkZXNjID0gJnRwLT5yeF9yY2Jbcnhfc3RhcnRfaWR4XTsKKwlkZXNjID0gJnJuYXBpLT5yeF9yY2Jbcnhfc3RhcnRfaWR4XTsKIAlkZXNjX2lkeCA9IGRlc2MtPm9wYXF1ZSAmIFJYRF9PUEFRVUVfSU5ERVhfTUFTSzsKIAlvcGFxdWVfa2V5ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9SSU5HX01BU0s7CiAJaWYgKG9wYXF1ZV9rZXkgIT0gUlhEX09QQVFVRV9SSU5HX1NURCkKQEAgLTk4MjEsOSArMTA0MDksOSBAQAogCWlmIChyeF9sZW4gIT0gdHhfbGVuKQogCQlnb3RvIG91dDsKIAotCXJ4X3NrYiA9IHRwLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0uc2tiOworCXJ4X3NrYiA9IHRwci0+cnhfc3RkX2J1ZmZlcnNbZGVzY19pZHhdLnNrYjsKIAotCW1hcCA9IHBjaV91bm1hcF9hZGRyKCZ0cC0+cnhfc3RkX2J1ZmZlcnNbZGVzY19pZHhdLCBtYXBwaW5nKTsKKwltYXAgPSBwY2lfdW5tYXBfYWRkcigmdHByLT5yeF9zdGRfYnVmZmVyc1tkZXNjX2lkeF0sIG1hcHBpbmcpOwogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0cC0+cGRldiwgbWFwLCByeF9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlmb3IgKGkgPSAxNDsgaSA8IHR4X2xlbjsgaSsrKSB7CkBAIC05OTk3LDcgKzEwNTg1LDcgQEAKIAogCXN3aXRjaChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgotCQlkYXRhLT5waHlfaWQgPSBQSFlfQUREUjsKKwkJZGF0YS0+cGh5X2lkID0gdHAtPnBoeV9hZGRyOwogCiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBTSU9DR01JSVJFRzogewpAQCAtMTAwMjIsOSArMTA2MTAsNiBAQAogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCiAJCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKIAkJCXJldHVybiAtRUFHQUlOOwogCkBAIC0xMDIzNiw4ICsxMDgyMSw3IEBACiAJbnZjZmcxID0gdHIzMihOVlJBTV9DRkcxKTsKIAlpZiAobnZjZmcxICYgTlZSQU1fQ0ZHMV9GTEFTSElGX0VOQUIpIHsKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCW52Y2ZnMSAmPSB+TlZSQU1fQ0ZHMV9DT01QQVRfQllQQVNTOwogCQl0dzMyKE5WUkFNX0NGRzEsIG52Y2ZnMSk7CiAJfQpAQCAtMTAyNDUsNDMgKzEwODI5LDY5IEBACiAJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MCkgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKIAkJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxX1ZFTkRPUl9NQVNLKSB7Ci0JCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9GTEFTSF9CVUZGRVJFRDoKLQkJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfU0laRTsKLQkJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF9WRU5ET1JfQVRNRUxfRkxBU0hfVU5CVUZGRVJFRDoKLQkJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNUY1MTJfUEFHRV9TSVpFOwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF9WRU5ET1JfQVRNRUxfRUVQUk9NOgotCQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotICAgICAgICAgICAgICAgICAgICAgICAgIAl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7Ci0JCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfVkVORE9SX1NUOgotCQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IFNUX000NVBFWDBfUEFHRV9TSVpFOwotCQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIX1ZFTkRPUl9TQUlGVU46Ci0JCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU0FJRlVOOwotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IFNBSUZVTl9TQTI1RjBYWF9QQUdFX1NJWkU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIX1ZFTkRPUl9TU1RfU01BTEw6Ci0JCQljYXNlIEZMQVNIX1ZFTkRPUl9TU1RfTEFSR0U6Ci0JCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1NUOwotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IFNTVF8yNVZGMFgwX1BBR0VfU0laRTsKLQkJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9WRU5ET1JfQVRNRUxfRkxBU0hfQlVGRkVSRUQ6CisJCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9TSVpFOworCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX1ZFTkRPUl9BVE1FTF9GTEFTSF9VTkJVRkZFUkVEOgorCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI1RjUxMl9QQUdFX1NJWkU7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9WRU5ET1JfQVRNRUxfRUVQUk9NOgorCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CisJCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfVkVORE9SX1NUOgorCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBTVF9NNDVQRVgwX1BBR0VfU0laRTsKKwkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCQlicmVhazsKKwkJY2FzZSBGTEFTSF9WRU5ET1JfU0FJRlVOOgorCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU0FJRlVOOworCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gU0FJRlVOX1NBMjVGMFhYX1BBR0VfU0laRTsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIX1ZFTkRPUl9TU1RfU01BTEw6CisJCWNhc2UgRkxBU0hfVkVORE9SX1NTVF9MQVJHRToKKwkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NTVDsKKwkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IFNTVF8yNVZGMFgwX1BBR0VfU0laRTsKKwkJCWJyZWFrOwogCQl9Ci0JfQotCWVsc2UgeworCX0gZWxzZSB7CiAJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwogCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfU0laRTsKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHN0cnVjdCB0ZzMgKnRwLCB1MzIgbnZtY2ZnMSkKK3sKKwlzd2l0Y2ggKG52bWNmZzEgJiBOVlJBTV9DRkcxXzU3NTJQQUdFX1NJWkVfTUFTSykgeworCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8yNTY6CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzUxMjoKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gNTEyOworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMUs6CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDEwMjQ7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8ySzoKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjA0ODsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzRLOgorCQl0cC0+bnZyYW1fcGFnZXNpemUgPSA0MDk2OworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMjY0OgorCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNjQ7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV81Mjg6CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDUyODsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX2dldF81NzUyX252cmFtX2luZm8oc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIG52Y2ZnMTsKQEAgLTEwMjkzLDQ4ICsxMDkwMywyOCBAQAogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QUk9URUNURURfTlZSQU07CiAKIAlzd2l0Y2ggKG52Y2ZnMSAmIE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLKSB7Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9FRVBST01fNjRLSFo6Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9FRVBST01fMzc2S0haOgotCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9GTEFTSF9CVUZGRVJFRDoKLQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTEwOgotCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMDoKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6Ci0JCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19TVDsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKLQkJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9BVE1FTF9FRVBST01fNjRLSFo6CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0VFUFJPTV8zNzZLSFo6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRkxBU0hfQlVGRkVSRUQ6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpIHsKLQkJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJQQUdFX1NJWkVfTUFTSykgewotCQkJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzI1NjoKLQkJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfNTEyOgotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDUxMjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8xSzoKLQkJCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAxMDI0OwotCQkJCWJyZWFrOwotCQkJY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzJLOgotCQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDIwNDg7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfNEs6Ci0JCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gNDA5NjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8yNjQ6Ci0JCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjY0OwotCQkJCWJyZWFrOwotCQl9Ci0JfQotCWVsc2UgeworCQl0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHRwLCBudmNmZzEpOworCX0gZWxzZSB7CiAJCS8qIEZvciBlZXByb20sIHNldCBwYWdlc2l6ZSB0byBtYXhpbXVtIGVlcHJvbSBzaXplICovCiAJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKIApAQCAtMTAzNTcsNDUgKzEwOTQ3LDQ1IEBACiAKIAludmNmZzEgJj0gTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0s7CiAJc3dpdGNoIChudmNmZzEpIHsKLQkJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzE6Ci0JCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8yOgotCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMzoKLQkJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzU6Ci0JCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKLQkJCWlmIChudmNmZzEgPT0gRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8xIHx8Ci0JCQkgICAgbnZjZmcxID09IEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfNSkKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8gMHgzZTIwMCA6Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzUxMktCKTsKLQkJCWVsc2UgaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzIpCi0JCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/IDB4MWYyMDAgOgotCQkJCQkJICBURzNfTlZSQU1fU0laRV8yNTZLQik7Ci0JCQllbHNlCi0JCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/IDB4MWYyMDAgOgotCQkJCQkJICBURzNfTlZSQU1fU0laRV8xMjhLQik7Ci0JCQlicmVhazsKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTIwOgotCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEU0MDoKLQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOwotCQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjU2OwotCQkJaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTApCi0JCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzY0S0IgOgotCQkJCQkJICBURzNfTlZSQU1fU0laRV8xMjhLQik7Ci0JCQllbHNlIGlmIChudmNmZzEgPT0gRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTIwKQotCQkJCXRwLT5udnJhbV9zaXplID0gKHByb3RlY3QgPwotCQkJCQkJICBURzNfTlZSQU1fU0laRV82NEtCIDoKLQkJCQkJCSAgVEczX05WUkFNX1NJWkVfMjU2S0IpOwotCQkJZWxzZQotCQkJCXRwLT5udnJhbV9zaXplID0gKHByb3RlY3QgPwotCQkJCQkJICBURzNfTlZSQU1fU0laRV8xMjhLQiA6Ci0JCQkJCQkgIFRHM19OVlJBTV9TSVpFXzUxMktCKTsKLQkJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8xOgorCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8yOgorCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8zOgorCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF81OgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKKwkJaWYgKG52Y2ZnMSA9PSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzEgfHwKKwkJICAgIG52Y2ZnMSA9PSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzUpCisJCQl0cC0+bnZyYW1fc2l6ZSA9IChwcm90ZWN0ID8gMHgzZTIwMCA6CisJCQkJCSAgVEczX05WUkFNX1NJWkVfNTEyS0IpOworCQllbHNlIGlmIChudmNmZzEgPT0gRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8yKQorCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/IDB4MWYyMDAgOgorCQkJCQkgIFRHM19OVlJBTV9TSVpFXzI1NktCKTsKKwkJZWxzZQorCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/IDB4MWYyMDAgOgorCQkJCQkgIFRHM19OVlJBTV9TSVpFXzEyOEtCKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjU2OworCQlpZiAobnZjZmcxID09IEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMCkKKwkJCXRwLT5udnJhbV9zaXplID0gKHByb3RlY3QgPworCQkJCQkgIFRHM19OVlJBTV9TSVpFXzY0S0IgOgorCQkJCQkgIFRHM19OVlJBTV9TSVpFXzEyOEtCKTsKKwkJZWxzZSBpZiAobnZjZmcxID09IEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUyMCkKKwkJCXRwLT5udnJhbV9zaXplID0gKHByb3RlY3QgPworCQkJCQkgIFRHM19OVlJBTV9TSVpFXzY0S0IgOgorCQkJCQkgIFRHM19OVlJBTV9TSVpFXzI1NktCKTsKKwkJZWxzZQorCQkJdHAtPm52cmFtX3NpemUgPSAocHJvdGVjdCA/CisJCQkJCSAgVEczX05WUkFNX1NJWkVfMTI4S0IgOgorCQkJCQkgIFRHM19OVlJBTV9TSVpFXzUxMktCKTsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC0xMDQwNiwzNCArMTA5OTYsMzQgQEAKIAludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOwogCiAJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgewotCQljYXNlIEZMQVNIXzU3ODdWRU5ET1JfQVRNRUxfRUVQUk9NXzY0S0haOgotCQljYXNlIEZMQVNIXzU3ODdWRU5ET1JfQVRNRUxfRUVQUk9NXzM3NktIWjoKLQkJY2FzZSBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV82NEtIWjoKLQkJY2FzZSBGTEFTSF81Nzg3VkVORE9SX01JQ1JPX0VFUFJPTV8zNzZLSFo6Ci0JCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQl0cC0+bnZyYW1fcGFnZXNpemUgPSBBVE1FTF9BVDI0QzUxMl9DSElQX1NJWkU7CisJY2FzZSBGTEFTSF81Nzg3VkVORE9SX0FUTUVMX0VFUFJPTV82NEtIWjoKKwljYXNlIEZMQVNIXzU3ODdWRU5ET1JfQVRNRUxfRUVQUk9NXzM3NktIWjoKKwljYXNlIEZMQVNIXzU3ODdWRU5ET1JfTUlDUk9fRUVQUk9NXzY0S0haOgorCWNhc2UgRkxBU0hfNTc4N1ZFTkRPUl9NSUNST19FRVBST01fMzc2S0haOgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOwogCi0JCQludmNmZzEgJj0gfk5WUkFNX0NGRzFfQ09NUEFUX0JZUEFTUzsKLQkJCXR3MzIoTlZSQU1fQ0ZHMSwgbnZjZmcxKTsKLQkJCWJyZWFrOwotCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfQVRNRUxfRkxBU0hfQlVGRkVSRUQ6Ci0JCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8xOgotCQljYXNlIEZMQVNIXzU3NTVWRU5ET1JfQVRNRUxfRkxBU0hfMjoKLQkJY2FzZSBGTEFTSF81NzU1VkVORE9SX0FUTUVMX0ZMQVNIXzM6Ci0JCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKLQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKLQkJCWJyZWFrOwotCQljYXNlIEZMQVNIXzU3NTJWRU5ET1JfU1RfTTQ1UEUxMDoKLQkJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6Ci0JCWNhc2UgRkxBU0hfNTc1MlZFTkRPUl9TVF9NNDVQRTQwOgotCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7Ci0JCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7Ci0JCQlicmVhazsKKwkJbnZjZmcxICY9IH5OVlJBTV9DRkcxX0NPTVBBVF9CWVBBU1M7CisJCXR3MzIoTlZSQU1fQ0ZHMSwgbnZjZmcxKTsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX0FUTUVMX0ZMQVNIX0JVRkZFUkVEOgorCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8xOgorCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8yOgorCWNhc2UgRkxBU0hfNTc1NVZFTkRPUl9BVE1FTF9GTEFTSF8zOgorCQl0cC0+bnZyYW1famVkZWNudW0gPSBKRURFQ19BVE1FTDsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKKwkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI2NDsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMTA6CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFMjA6CisJY2FzZSBGTEFTSF81NzUyVkVORE9SX1NUX000NVBFNDA6CisJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX1NUOworCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9GTEFTSDsKKwkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjU2OworCQlicmVhazsKIAl9CiB9CiAKQEAgLTEwNDUxLDYzICsxMTA0MSw2MyBAQAogCiAJbnZjZmcxICY9IE5WUkFNX0NGRzFfNTc1MlZFTkRPUl9NQVNLOwogCXN3aXRjaCAobnZjZmcxKSB7Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwMjFEOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDQxRDoKLQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX0FEQjA4MUQ6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIxNjFEOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDIxRDoKLQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjA0MUQ6Ci0JCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwODFEOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMTYxRDoKLQkJCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOwotCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19OVlJBTV9CVUZGRVJFRDsKLQkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOwotCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUzsKLQkJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDI1NjsKLQkJCWJyZWFrOwotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTIwOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTQwOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTgwOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTE2OgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTIwOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTQwOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTgwOgotCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTE2OgotCQkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7Ci0JCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNX0JVRkZFUkVEOwotCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfRkxBU0g7Ci0JCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7Ci0JCQlicmVhazsKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDIxRDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDQxRDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDgxRDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMTYxRDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDIxRDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDQxRDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDgxRDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMTYxRDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TOworCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFMjA6CisJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEU0MDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTgwOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFMTY6CisJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfTV9NNDVQRTQwOgorCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFODA6CisJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEUxNjoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7CisJCWJyZWFrOwogCX0KIAogCWlmIChwcm90ZWN0KSB7CiAJCXRwLT5udnJhbV9zaXplID0gdHIzMihOVlJBTV9BRERSX0xPQ0tPVVQpOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAobnZjZmcxKSB7Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMTYxRDoKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIxNjFEOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEUxNjoKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFMTY6Ci0JCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8yTUI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDgxRDoKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwODFEOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEU4MDoKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFODA6Ci0JCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV8xTUI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDQxRDoKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9NREIwNDFEOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEU0MDoKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFNDA6Ci0JCQkJdHAtPm52cmFtX3NpemUgPSBURzNfTlZSQU1fU0laRV81MTJLQjsKLQkJCQlicmVhazsKLQkJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwMjFEOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjAyMUQ6Ci0JCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfU1RfQV9NNDVQRTIwOgotCQkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEUyMDoKLQkJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzI1NktCOwotCQkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMTYxRDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjE2MUQ6CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFMTY6CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFMTY6CisJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzJNQjsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDgxRDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjA4MUQ6CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFODA6CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFODA6CisJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzFNQjsKKwkJCWJyZWFrOworCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfQURCMDQxRDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX0FUTUVMX01EQjA0MUQ6CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9BX000NVBFNDA6CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9TVF9NX000NVBFNDA6CisJCQl0cC0+bnZyYW1fc2l6ZSA9IFRHM19OVlJBTV9TSVpFXzUxMktCOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfNTc2MVZFTkRPUl9BVE1FTF9BREIwMjFEOgorCQljYXNlIEZMQVNIXzU3NjFWRU5ET1JfQVRNRUxfTURCMDIxRDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX0FfTTQ1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzYxVkVORE9SX1NUX01fTTQ1UEUyMDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7CisJCQlicmVhazsKIAkJfQogCX0KIH0KQEAgLTEwNTg2LDM0ICsxMTE3Niw4NCBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJQQUdFX1NJWkVfTUFTSykgewotCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8yNTY6CisJdGczX252cmFtX2dldF9wYWdlc2l6ZSh0cCwgbnZjZmcxKTsKKwlpZiAodHAtPm52cmFtX3BhZ2VzaXplICE9IDI2NCAmJiB0cC0+bnZyYW1fcGFnZXNpemUgIT0gNTI4KQogCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TOwotCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNTY7Cit9CisKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfNTcxN19udnJhbV9pbmZvKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiBudmNmZzE7CisKKwludmNmZzEgPSB0cjMyKE5WUkFNX0NGRzEpOworCisJc3dpdGNoIChudmNmZzEgJiBOVlJBTV9DRkcxXzU3NTJWRU5ET1JfTUFTSykgeworCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9FRVBST006CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX01JQ1JPX0VFUFJPTToKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT5udnJhbV9wYWdlc2l6ZSA9IEFUTUVMX0FUMjRDNTEyX0NISVBfU0laRTsKKworCQludmNmZzEgJj0gfk5WUkFNX0NGRzFfQ09NUEFUX0JZUEFTUzsKKwkJdHczMihOVlJBTV9DRkcxLCBudmNmZzEpOworCQlyZXR1cm47CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX01EQjAxMUQ6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAxMUI6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAxMUQ6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX01EQjAyMUQ6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAyMUI6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAyMUQ6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMXzQ1VVNQVDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfQVRNRUw7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCisJCXN3aXRjaCAobnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0spIHsKKwkJY2FzZSBGTEFTSF81NzE3VkVORE9SX0FUTUVMX01EQjAyMUQ6CisJCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9BREIwMjFCOgorCQljYXNlIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxRDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMTI4S0I7CisJCQlicmVhazsKKwkJfQogCQlicmVhazsKLQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfNTEyOgotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TOwotCQl0cC0+bnZyYW1fcGFnZXNpemUgPSA1MTI7CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX01fTTI1UEUxMDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NMjVQRTEwOgorCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9NX000NVBFMTA6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTQ1UEUxMDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NMjVQRTIwOgorCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF9BX00yNVBFMjA6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX01fTTQ1UEUyMDoKKwljYXNlIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NNDVQRTIwOgorCWNhc2UgRkxBU0hfNTcxN1ZFTkRPUl9TVF8yNVVTUFQ6CisJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUXzQ1VVNQVDoKKwkJdHAtPm52cmFtX2plZGVjbnVtID0gSkVERUNfU1Q7CisJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0ZMQVNIOworCisJCXN3aXRjaCAobnZjZmcxICYgTlZSQU1fQ0ZHMV81NzUyVkVORE9SX01BU0spIHsKKwkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX01fTTI1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTI1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX01fTTQ1UEUyMDoKKwkJY2FzZSBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTQ1UEUyMDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMjU2S0I7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRwLT5udnJhbV9zaXplID0gVEczX05WUkFNX1NJWkVfMTI4S0I7CisJCQlicmVhazsKKwkJfQogCQlicmVhazsKLQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMUs6Ci0JCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7Ci0JCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV8ySzoKLQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUzsKLQkJdHAtPm52cmFtX3BhZ2VzaXplID0gMjA0ODsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF81NzUyUEFHRV9TSVpFXzRLOgotCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19OT19OVlJBTV9BRERSX1RSQU5TOwotCQl0cC0+bnZyYW1fcGFnZXNpemUgPSA0MDk2OwotCQlicmVhazsKLQljYXNlIEZMQVNIXzU3NTJQQUdFX1NJWkVfMjY0OgotCQl0cC0+bnZyYW1fcGFnZXNpemUgPSAyNjQ7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hfNTc1MlBBR0VfU0laRV81Mjg6Ci0JCXRwLT5udnJhbV9wYWdlc2l6ZSA9IDUyODsKLQkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfTk9fTlZSQU07CisJCXJldHVybjsKIAl9CisKKwl0ZzNfbnZyYW1fZ2V0X3BhZ2VzaXplKHRwLCBudmNmZzEpOworCWlmICh0cC0+bnZyYW1fcGFnZXNpemUgIT0gMjY0ICYmIHRwLT5udnJhbV9wYWdlc2l6ZSAhPSA1MjgpCisJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlM7CiB9CiAKIC8qIENoaXBzIG90aGVyIHRoYW4gNTcwMC81NzAxIHVzZSB0aGUgTlZSQU0gZm9yIGZldGNoaW5nIGluZm8uICovCkBAIC0xMDY1OCw2ICsxMTI5OCw4IEBACiAJCQl0ZzNfZ2V0XzU5MDZfbnZyYW1faW5mbyh0cCk7CiAJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkKIAkJCXRnM19nZXRfNTc3ODBfbnZyYW1faW5mbyh0cCk7CisJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQorCQkJdGczX2dldF81NzE3X252cmFtX2luZm8odHApOwogCQllbHNlCiAJCQl0ZzNfZ2V0X252cmFtX2luZm8odHApOwogCkBAIC0xMTQ4NSw2ICsxMjEyNyw5IEBACiAJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwICYmCiAJCSB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkwKQogCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAiQkNNNTc3OTAiKTsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgJiYKKwkJIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3ODgpCisJCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJCQ001Nzc4OCIpOwogCWVsc2UKIAkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIm5vbmUiKTsKIH0KQEAgLTExNzY4LDggKzEyNDEzLDE3IEBACiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl9VU0VfUFJPRF9JRF9SRUcpIHsKIAkJdTMyIHByb2RfaWRfYXNpY19yZXY7CiAKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfUFJPRElEX0FTSUNSRVYsCi0JCQkJICAgICAgJnByb2RfaWRfYXNpY19yZXYpOworCQlpZiAodHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE3QyB8fAorCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE3UyB8fAorCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE4QyB8fAorCQkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181NzE4UykKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwKKwkJCQkJICAgICAgVEczUENJX0dFTjJfUFJPRElEX0FTSUNSRVYsCisJCQkJCSAgICAgICZwcm9kX2lkX2FzaWNfcmV2KTsKKwkJZWxzZQorCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfUFJPRElEX0FTSUNSRVYsCisJCQkJCSAgICAgICZwcm9kX2lkX2FzaWNfcmV2KTsKKwogCQl0cC0+cGNpX2NoaXBfcmV2X2lkID0gcHJvZF9pZF9hc2ljX3JldjsKIAl9CiAKQEAgLTExOTA3LDggKzEyNTYxLDkgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUlTQ19IT1NUX0NUUkwsCiAJCQkgICAgICAgdHAtPm1pc2NfaG9zdF9jdHJsKTsKIAotCWlmICgoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQpIHx8Ci0JICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNCkpCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA0IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE0IHx8CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQogCQl0cC0+cGRldl9wZWVyID0gdGczX2ZpbmRfcGVlcih0cCk7CiAKIAkvKiBJbnRlbnRpb25hbGx5IGV4Y2x1ZGUgQVNJQ19SRVZfNTkwNiAqLwpAQCAtMTE5MTcsNyArMTI1NzIsOCBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc2MSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKIAkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfNTc1NV9QTFVTOwogCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzUwIHx8CkBAIC0xMTk2NSw5ICsxMjYyMSwxOSBAQAogCQl9CiAJfQogCisJdHAtPmlycV9tYXggPSAxOworCisjaWZkZWYgVEczX05BUEkKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpIHsKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19TVVBQT1JUX01TSVg7CisJCXRwLT5pcnFfbWF4ID0gVEczX0lSUV9NQVhfVkVDUzsKKwl9CisjZW5kaWYKKwogCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB8fAotCSAgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpCi0JCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX0pVTUJPX0NBUEFCTEU7CisJICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19KVU1CT19DQVBBQkxFOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfUENJU1RBVEUsCiAJCQkgICAgICAmcGNpX3N0YXRlX3JlZyk7CkBAIC0xMjEwMCw3ICsxMjc2Niw2IEBACiAJCXRwLT53cml0ZTMyID0gdGczX3dyaXRlX2ZsdXNoX3JlZzMyOwogCX0KIAotCiAJaWYgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVFhEX01CT1hfSFdCVUcpIHx8CiAJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTUJPWF9XUklURV9SRU9SREVSKSkgewogCQl0cC0+d3JpdGUzMl90eF9tYm94ID0gdGczX3dyaXRlMzJfdHhfbWJveDsKQEAgLTEyMTU5LDcgKzEyODI0LDggQEAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODQgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NjEgfHwKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKQorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODAgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcpCiAJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQ1BNVV9QUkVTRU5UOwogCiAJLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCkBAIC0xMjIxNiwxMiArMTI4ODIsMTUgQEAKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19XT0xfU1BFRURfMTAwTUI7CiAJfQogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQorCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19QSFlfSVNfRkVUOworCiAJLyogQSBmZXcgYm9hcmRzIGRvbid0IHdhbnQgRXRoZXJuZXRAV2lyZVNwZWVkIHBoeSBmZWF0dXJlICovCiAJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMCkgfHwKIAkgICAgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNSkgJiYKIAkgICAgICh0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMCkgJiYKIAkgICAgICh0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTcwNV9BMSkpIHx8Ci0JICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgfHwKKwkgICAgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgfHwKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykpCiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVEOwogCkBAIC0xMjIzMiw5ICsxMjkwMSwxMCBAQAogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfNTcwNF9BMF9CVUc7CiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTkwNiAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUEhZX0lTX0ZFVCkgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODUgJiYKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NzgwKSB7CisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzc4MCAmJgorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNykgewogCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NTUgfHwKIAkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3IHx8CiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCB8fApAQCAtMTIyNjksNiArMTI5MzksMTEgQEAKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKQogCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19VU0VfUEhZTElCOwogCisJaWYgKCh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc3ODBfQTEgJiYKKwkgICAgIHRyMzIoUkNWTFBDX1NUQVRTX0VOQUJMRSkgJiBSQ1ZMUENfU1RBVFNFTkFCX0FTRl9GSVgpIHx8CisJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMCkKKwkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfVE9HR0xFXzEwXzEwMF9MMVBMTFBEOworCiAJZXJyID0gdGczX21kaW9faW5pdCh0cCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTEyMzUyLDcgKzEzMDI3LDcgQEAKIAkgICAgICB0cC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTNGIHx8CiAJICAgICAgdHAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3RikpIHx8CiAJICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTAgfHwKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCisJICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpKQogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHXzEwXzEwMF9PTkxZOwogCiAJZXJyID0gdGczX3BoeV9wcm9iZSh0cCk7CkBAIC0xMjQ3MSw4ICsxMzE0NiwxMCBAQAogCQkJdHczMl9mKE5WUkFNX0NNRCwgTlZSQU1fQ01EX1JFU0VUKTsKIAkJZWxzZQogCQkJdGczX252cmFtX3VubG9jayh0cCk7Ci0JfQotCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKKwl9IGVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KSB7CisJCWlmICh0cjMyKFRHM19DUE1VX1NUQVRVUykgJiBURzNfQ1BNVV9TVEFUVVNfUENJRV9GVU5DKQorCQkJbWFjX29mZnNldCA9IDB4Y2M7CisJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJbWFjX29mZnNldCA9IDB4MTA7CiAKIAkvKiBGaXJzdCB0cnkgdG8gZ2V0IGl0IGZyb20gTUFDIGFkZHJlc3MgbWFpbGJveC4gKi8KQEAgLTEyOTUzLDcgKzEzNjMwLDggQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19pbml0X2J1Zm1ncl9jb25maWcoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSB7CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3KSB7CiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfcmVhZF9kbWFfbG93X3dhdGVyID0KIAkJCURFRkFVTFRfTUJfUkRNQV9MT1dfV0FURVJfNTcwNTsKIAkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9tYWNfcnhfbG93X3dhdGVyID0KQEAgLTEzMTU4LDcgKzEzODM2LDggQEAKIAlzdGF0aWMgaW50IHRnM192ZXJzaW9uX3ByaW50ZWQgPSAwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHRnMyAqdHA7Ci0JaW50IGVyciwgcG1fY2FwOworCWludCBpLCBlcnIsIHBtX2NhcDsKKwl1MzIgc25kbWJ4LCByY3ZtYngsIGludG1ieDsKIAljaGFyIHN0cls0MF07CiAJdTY0IGRtYV9tYXNrLCBwZXJzaXN0X2RtYV9tYXNrOwogCkBAIC0xMzE5MCw3ICsxMzg2OSw3IEBACiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIAl9CiAKLQlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKnRwKSk7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCp0cCksIFRHM19JUlFfTUFYX1ZFQ1MpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTEzMjUyLDkgKzEzOTMxLDUyIEBACiAKIAl0cC0+cnhfcGVuZGluZyA9IFRHM19ERUZfUlhfUklOR19QRU5ESU5HOwogCXRwLT5yeF9qdW1ib19wZW5kaW5nID0gVEczX0RFRl9SWF9KVU1CT19SSU5HX1BFTkRJTkc7Ci0JdHAtPnR4X3BlbmRpbmcgPSBURzNfREVGX1RYX1JJTkdfUEVORElORzsKIAotCW5ldGlmX25hcGlfYWRkKGRldiwgJnRwLT5uYXBpLCB0ZzNfcG9sbCwgNjQpOworCWludG1ieCA9IE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVzsKKwlyY3ZtYnggPSBNQUlMQk9YX1JDVlJFVF9DT05fSURYXzAgKyBURzNfNjRCSVRfUkVHX0xPVzsKKwlzbmRtYnggPSBNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XOworCWZvciAoaSA9IDA7IGkgPCBURzNfSVJRX01BWF9WRUNTOyBpKyspIHsKKwkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKKworCQl0bmFwaS0+dHAgPSB0cDsKKwkJdG5hcGktPnR4X3BlbmRpbmcgPSBURzNfREVGX1RYX1JJTkdfUEVORElORzsKKworCQl0bmFwaS0+aW50X21ib3ggPSBpbnRtYng7CisJCWlmIChpIDwgNCkKKwkJCWludG1ieCArPSAweDg7CisJCWVsc2UKKwkJCWludG1ieCArPSAweDQ7CisKKwkJdG5hcGktPmNvbnNtYm94ID0gcmN2bWJ4OworCQl0bmFwaS0+cHJvZG1ib3ggPSBzbmRtYng7CisKKwkJaWYgKGkpCisJCQl0bmFwaS0+Y29hbF9ub3cgPSBIT1NUQ0NfTU9ERV9DT0FMX1ZFQzFfTk9XIDw8IChpIC0gMSk7CisJCWVsc2UKKwkJCXRuYXBpLT5jb2FsX25vdyA9IEhPU1RDQ19NT0RFX05PVzsKKworCQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1VQUE9SVF9NU0lYKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIElmIHdlIHN1cHBvcnQgTVNJWCwgd2UnbGwgYmUgdXNpbmcgUlNTLiAgSWYgd2UncmUgdXNpbmcKKwkJICogUlNTLCB0aGUgZmlyc3QgdmVjdG9yIG9ubHkgaGFuZGxlcyBsaW5rIGludGVycnVwdHMgYW5kIHRoZQorCQkgKiByZW1haW5pbmcgdmVjdG9ycyBoYW5kbGUgcnggYW5kIHR4IGludGVycnVwdHMuICBSZXVzZSB0aGUKKwkJICogbWFpbGJveCB2YWx1ZXMgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gIFRoZSB2YWx1ZXMgd2Ugc2V0dXAKKwkJICogYWJvdmUgYXJlIHN0aWxsIHVzZWZ1bCBmb3IgdGhlIHNpbmdsZSB2ZWN0b3JlZCBtb2RlLgorCQkgKi8KKwkJaWYgKCFpKQorCQkJY29udGludWU7CisKKwkJcmN2bWJ4ICs9IDB4ODsKKworCQlpZiAoc25kbWJ4ICYgMHg0KQorCQkJc25kbWJ4IC09IDB4NDsKKwkJZWxzZQorCQkJc25kbWJ4ICs9IDB4YzsKKwl9CisKKwluZXRpZl9uYXBpX2FkZChkZXYsICZ0cC0+bmFwaVswXS5uYXBpLCB0ZzNfcG9sbCwgNjQpOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmdGczX2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBURzNfVFhfVElNRU9VVDsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKQEAgLTEzMzQ4LDcgKzE0MDcwLDggQEAKIAkJICAgIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NCAmJgogCQkgICAgIEdFVF9DSElQX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBDSElQUkVWXzU3ODRfQVgpIHx8CiAJCQlHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSB8fAotCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwKQorCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwIHx8CisJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU09fRUNOOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmggYi9kcml2ZXJzL25ldC90ZzMuaAppbmRleCBiMzM0N2M0Li44MmI0NWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtNDMsNyArNDMsMTMgQEAKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzgwCSAweDE2OTIKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzYwCSAweDE2OTAKICNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzkwCSAweDE2OTQKLSNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzIwCSAweDE2OGMKKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzg4CSAweDE2OTEKKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3ODVfRwkgMHgxNjk5IC8qIEdQSFkgKi8KKyNkZWZpbmUgIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3ODVfRgkgMHgxNmEwIC8qIDEwLzEwMCBvbmx5ICovCisjZGVmaW5lICBURzNQQ0lfREVWSUNFX1RJR09OM181NzE3QwkgMHgxNjU1CisjZGVmaW5lICBURzNQQ0lfREVWSUNFX1RJR09OM181NzE3UwkgMHgxNjU2CisjZGVmaW5lICBURzNQQ0lfREVWSUNFX1RJR09OM181NzE4QwkgMHgxNjY1CisjZGVmaW5lICBURzNQQ0lfREVWSUNFX1RJR09OM181NzE4UwkgMHgxNjY2CiAvKiAweDA0IC0tPiAweDY0IHVudXNlZCAqLwogI2RlZmluZSBURzNQQ0lfTVNJX0RBVEEJCQkweDAwMDAwMDY0CiAvKiAweDY2IC0tPiAweDY4IHVudXNlZCAqLwpAQCAtMTE1LDYgKzEyMSw3IEBACiAjZGVmaW5lICAgQVNJQ19SRVZfNTc2MQkJCSAweDU3NjEKICNkZWZpbmUgICBBU0lDX1JFVl81Nzg1CQkJIDB4NTc4NQogI2RlZmluZSAgIEFTSUNfUkVWXzU3NzgwCQkgMHg1Nzc4MAorI2RlZmluZSAgIEFTSUNfUkVWXzU3MTcJCQkgMHg1NzE3CiAjZGVmaW5lICBHRVRfQ0hJUF9SRVYoQ0hJUF9SRVZfSUQpCSgoQ0hJUF9SRVZfSUQpID4+IDgpCiAjZGVmaW5lICAgQ0hJUFJFVl81NzAwX0FYCQkgMHg3MAogI2RlZmluZSAgIENISVBSRVZfNTcwMF9CWAkJIDB4NzEKQEAgLTIwMSwyMiArMjA4LDI0IEBACiAjZGVmaW5lIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUgkweDAwMDAwMDdjCiAjZGVmaW5lIFRHM1BDSV9SRUdfREFUQQkJCTB4MDAwMDAwODAKICNkZWZpbmUgVEczUENJX01FTV9XSU5fREFUQQkJMHgwMDAwMDA4NAotI2RlZmluZSBURzNQQ0lfTU9ERV9DVFJMCQkweDAwMDAwMDg4Ci0jZGVmaW5lIFRHM1BDSV9NSVNDX0NGRwkJCTB4MDAwMDAwOGMKICNkZWZpbmUgVEczUENJX01JU0NfTE9DQUxfQ1RSTAkJMHgwMDAwMDA5MAogLyogMHg5NCAtLT4gMHg5OCB1bnVzZWQgKi8KICNkZWZpbmUgVEczUENJX1NURF9SSU5HX1BST0RfSURYCTB4MDAwMDAwOTggLyogNjQtYml0ICovCiAjZGVmaW5lIFRHM1BDSV9SQ1ZfUkVUX1JJTkdfQ09OX0lEWAkweDAwMDAwMGEwIC8qIDY0LWJpdCAqLwotI2RlZmluZSBURzNQQ0lfU05EX1BST0RfSURYCQkweDAwMDAwMGE4IC8qIDY0LWJpdCAqLwotLyogMHhiMCAtLT4gMHhiOCB1bnVzZWQgKi8KKy8qIDB4YTAgLS0+IDB4YjggdW51c2VkICovCiAjZGVmaW5lIFRHM1BDSV9EVUFMX01BQ19DVFJMCQkweDAwMDAwMGI4CiAjZGVmaW5lICBEVUFMX01BQ19DVFJMX0NIX01BU0sJCSAweDAwMDAwMDAzCiAjZGVmaW5lICBEVUFMX01BQ19DVFJMX0lECQkgMHgwMDAwMDAwNAogI2RlZmluZSBURzNQQ0lfUFJPRElEX0FTSUNSRVYJCTB4MDAwMDAwYmMKICNkZWZpbmUgIFBST0RfSURfQVNJQ19SRVZfTUFTSwkJIDB4MGZmZmZmZmYKLS8qIDB4YzAgLS0+IDB4MTAwIHVudXNlZCAqLworLyogMHhjMCAtLT4gMHhmNCB1bnVzZWQgKi8KIAotLyogMHgxMDAgLS0+IDB4MjAwIHVudXNlZCAqLworI2RlZmluZSBURzNQQ0lfR0VOMl9QUk9ESURfQVNJQ1JFVgkweDAwMDAwMGY0CisvKiAweGY4IC0tPiAweDIwMCB1bnVzZWQgKi8KKworI2RlZmluZSBURzNfQ09SUl9FUlJfU1RBVAkJMHgwMDAwMDExMAorI2RlZmluZSAgVEczX0NPUlJfRVJSX1NUQVRfQ0xFQVIJMHhmZmZmZmZmZgorLyogMHgxMTQgLS0+IDB4MjAwIHVudXNlZCAqLwogCiAvKiBNYWlsYm94IHJlZ2lzdGVycyAqLwogI2RlZmluZSBNQUlMQk9YX0lOVEVSUlVQVF8wCQkweDAwMDAwMjAwIC8qIDY0LWJpdCAqLwpAQCAtNDQyLDYgKzQ1MSwxMiBAQAogI2RlZmluZSAgUlhfTU9ERV9QUk9NSVNDCQkgMHgwMDAwMDEwMAogI2RlZmluZSAgUlhfTU9ERV9OT19DUkNfQ0hFQ0sJCSAweDAwMDAwMjAwCiAjZGVmaW5lICBSWF9NT0RFX0tFRVBfVkxBTl9UQUcJCSAweDAwMDAwNDAwCisjZGVmaW5lICBSWF9NT0RFX1JTU19JUFY0X0hBU0hfRU4JIDB4MDAwMTAwMDAKKyNkZWZpbmUgIFJYX01PREVfUlNTX1RDUF9JUFY0X0hBU0hfRU4JIDB4MDAwMjAwMDAKKyNkZWZpbmUgIFJYX01PREVfUlNTX0lQVjZfSEFTSF9FTgkgMHgwMDA0MDAwMAorI2RlZmluZSAgUlhfTU9ERV9SU1NfVENQX0lQVjZfSEFTSF9FTgkgMHgwMDA4MDAwMAorI2RlZmluZSAgUlhfTU9ERV9SU1NfSVRCTF9IQVNIX0JJVFNfNwkgMHgwMDcwMDAwMAorI2RlZmluZSAgUlhfTU9ERV9SU1NfRU5BQkxFCQkgMHgwMDgwMDAwMAogI2RlZmluZSAgUlhfTU9ERV9JUFY2X0NTVU1fRU5BQkxFCSAweDAxMDAwMDAwCiAjZGVmaW5lIE1BQ19SWF9TVEFUVVMJCQkweDAwMDAwNDZjCiAjZGVmaW5lICBSWF9TVEFUVVNfUkVNT1RFX1RYX1hPRkZFRAkgMHgwMDAwMDAwMQpAQCAtNTIyLDYgKzUzNywxMCBAQAogLyogMHg1OTggLS0+IDB4NWEwIHVudXNlZCAqLwogI2RlZmluZSBNQUNfUEhZQ0ZHMQkJCTB4MDAwMDA1YTAKICNkZWZpbmUgIE1BQ19QSFlDRkcxX1JHTUlJX0lOVAkJIDB4MDAwMDAwMDEKKyNkZWZpbmUgIE1BQ19QSFlDRkcxX1JYQ0xLX1RPX01BU0sJIDB4MDAwMDFmZjAKKyNkZWZpbmUgIE1BQ19QSFlDRkcxX1JYQ0xLX1RJTUVPVVQJIDB4MDAwMDEwMDAKKyNkZWZpbmUgIE1BQ19QSFlDRkcxX1RYQ0xLX1RPX01BU0sJIDB4MDFmZjAwMDAKKyNkZWZpbmUgIE1BQ19QSFlDRkcxX1RYQ0xLX1RJTUVPVVQJIDB4MDEwMDAwMDAKICNkZWZpbmUgIE1BQ19QSFlDRkcxX1JHTUlJX0VYVF9SWF9ERUMJIDB4MDIwMDAwMDAKICNkZWZpbmUgIE1BQ19QSFlDRkcxX1JHTUlJX1NORF9TVEFUX0VOCSAweDA0MDAwMDAwCiAjZGVmaW5lICBNQUNfUEhZQ0ZHMV9UWENfRFJWCQkgMHgyMDAwMDAwMApAQCAtNjc1LDYgKzY5NCw3IEBACiAjZGVmaW5lICBTR19ESUdfUEFSVE5FUl9GVUxMX0RVUExFWAkgMHgwMDAyMDAwMCAvKiBJZiAhTVJBRFZfQ1JDMTZfU0VMRUNUICovCiAjZGVmaW5lICBTR19ESUdfUEFSVE5FUl9ORVhUX1BBR0UJIDB4MDAwMTAwMDAgLyogSWYgIU1SQURWX0NSQzE2X1NFTEVDVCAqLwogI2RlZmluZSAgU0dfRElHX0FVVE9ORUdfU1RBVEVfTUFTSwkgMHgwMDAwMGZmMAorI2RlZmluZSAgU0dfRElHX0lTX1NFUkRFUwkJIDB4MDAwMDAxMDAKICNkZWZpbmUgIFNHX0RJR19DT01NQV9ERVRFQ1RPUgkJIDB4MDAwMDAwMDgKICNkZWZpbmUgIFNHX0RJR19NQUNfQUNLX1NUQVRVUwkJIDB4MDAwMDAwMDQKICNkZWZpbmUgIFNHX0RJR19BVVRPTkVHX0NPTVBMRVRFCSAweDAwMDAwMDAyCkBAIC02ODIsNyArNzAyLDIyIEBACiAvKiAweDViOCAtLT4gMHg2MDAgdW51c2VkICovCiAjZGVmaW5lIE1BQ19UWF9NQUNfU1RBVEVfQkFTRQkJMHgwMDAwMDYwMCAvKiAxNiBieXRlcyAqLwogI2RlZmluZSBNQUNfUlhfTUFDX1NUQVRFX0JBU0UJCTB4MDAwMDA2MTAgLyogMjAgYnl0ZXMgKi8KLS8qIDB4NjI0IC0tPiAweDgwMCB1bnVzZWQgKi8KKy8qIDB4NjI0IC0tPiAweDY3MCB1bnVzZWQgKi8KKworI2RlZmluZSBNQUNfUlNTX0lORElSX1RCTF8wCQkweDAwMDAwNjMwCisKKyNkZWZpbmUgTUFDX1JTU19IQVNIX0tFWV8wCQkweDAwMDAwNjcwCisjZGVmaW5lIE1BQ19SU1NfSEFTSF9LRVlfMQkJMHgwMDAwMDY3NAorI2RlZmluZSBNQUNfUlNTX0hBU0hfS0VZXzIJCTB4MDAwMDA2NzgKKyNkZWZpbmUgTUFDX1JTU19IQVNIX0tFWV8zCQkweDAwMDAwNjdjCisjZGVmaW5lIE1BQ19SU1NfSEFTSF9LRVlfNAkJMHgwMDAwMDY4MAorI2RlZmluZSBNQUNfUlNTX0hBU0hfS0VZXzUJCTB4MDAwMDA2ODQKKyNkZWZpbmUgTUFDX1JTU19IQVNIX0tFWV82CQkweDAwMDAwNjg4CisjZGVmaW5lIE1BQ19SU1NfSEFTSF9LRVlfNwkJMHgwMDAwMDY4YworI2RlZmluZSBNQUNfUlNTX0hBU0hfS0VZXzgJCTB4MDAwMDA2OTAKKyNkZWZpbmUgTUFDX1JTU19IQVNIX0tFWV85CQkweDAwMDAwNjk0CisvKiAweDY5OCAtLT4gMHg4MDAgdW51c2VkICovCisKICNkZWZpbmUgTUFDX1RYX1NUQVRTX09DVEVUUwkJMHgwMDAwMDgwMAogI2RlZmluZSBNQUNfVFhfU1RBVFNfUkVTVjEJCTB4MDAwMDA4MDQKICNkZWZpbmUgTUFDX1RYX1NUQVRTX0NPTExJU0lPTlMJCTB4MDAwMDA4MDgKQEAgLTgxNCw2ICs4NDksNyBAQAogI2RlZmluZSAgU05EQkRJX01PREVfUkVTRVQJCSAweDAwMDAwMDAxCiAjZGVmaW5lICBTTkRCRElfTU9ERV9FTkFCTEUJCSAweDAwMDAwMDAyCiAjZGVmaW5lICBTTkRCRElfTU9ERV9BVFROX0VOQUJMRQkgMHgwMDAwMDAwNAorI2RlZmluZSAgU05EQkRJX01PREVfTVVMVElfVFhRX0VOCSAweDAwMDAwMDIwCiAjZGVmaW5lIFNOREJESV9TVEFUVVMJCQkweDAwMDAxODA0CiAjZGVmaW5lICBTTkRCRElfU1RBVFVTX0VSUk9SX0FUVE4JIDB4MDAwMDAwMDQKICNkZWZpbmUgU05EQkRJX0lOX1BST0RfSURYXzAJCTB4MDAwMDE4MDgKQEAgLTg2NCw2ICs5MDAsNyBAQAogI2RlZmluZSAgUkNWTFBDX1NUQVRTQ1RSTF9FTkFCTEUJIDB4MDAwMDAwMDEKICNkZWZpbmUgIFJDVkxQQ19TVEFUU0NUUkxfRkFTVFVQRAkgMHgwMDAwMDAwMgogI2RlZmluZSBSQ1ZMUENfU1RBVFNfRU5BQkxFCQkweDAwMDAyMDE4CisjZGVmaW5lICBSQ1ZMUENfU1RBVFNFTkFCX0FTRl9GSVgJIDB4MDAwMDAwMDIKICNkZWZpbmUgIFJDVkxQQ19TVEFUU0VOQUJfREFDS19GSVgJIDB4MDAwNDAwMDAKICNkZWZpbmUgIFJDVkxQQ19TVEFUU0VOQUJfTE5HQlJTVF9SRklYCSAweDAwNDAwMDAwCiAjZGVmaW5lIFJDVkxQQ19TVEFUU19JTkNNQVNLCQkweDAwMDAyMDFjCkBAIC05NDEsNyArOTc4LDExIEBACiAjZGVmaW5lIFJDVkJESV9NSU5JX1RIUkVTSAkJMHgwMDAwMmMxNAogI2RlZmluZSBSQ1ZCRElfU1REX1RIUkVTSAkJMHgwMDAwMmMxOAogI2RlZmluZSBSQ1ZCRElfSlVNQk9fVEhSRVNICQkweDAwMDAyYzFjCi0vKiAweDJjMjAgLS0+IDB4MzAwMCB1bnVzZWQgKi8KKy8qIDB4MmMyMCAtLT4gMHgyZDAwIHVudXNlZCAqLworCisjZGVmaW5lIFNURF9SRVBMRU5JU0hfTFdNCQkweDAwMDAyZDAwCisjZGVmaW5lIEpNQl9SRVBMRU5JU0hfTFdNCQkweDAwMDAyZDA0CisvKiAweDJkMDggLS0+IDB4MzAwMCB1bnVzZWQgKi8KIAogLyogUmVjZWl2ZSBCRCBDb21wbGV0aW9uIENvbnRyb2wgUmVnaXN0ZXJzICovCiAjZGVmaW5lIFJDVkNDX01PREUJCQkweDAwMDAzMDAwCkBAIC05ODcsOCArMTAyOCwxMCBAQAogI2RlZmluZSBURzNfQ1BNVV9IU1RfQUNDCQkweDAwMDAzNjFjCiAjZGVmaW5lICBDUE1VX0hTVF9BQ0NfTUFDQ0xLX01BU0sJIDB4MDAxZjAwMDAKICNkZWZpbmUgIENQTVVfSFNUX0FDQ19NQUNDTEtfNl8yNQkgMHgwMDEzMDAwMAotLyogMHgzNjIwIC0tPiAweDM2MzAgdW51c2VkICovCisvKiAweDM2MjAgLS0+IDB4MzYyYyB1bnVzZWQgKi8KIAorI2RlZmluZSBURzNfQ1BNVV9TVEFUVVMJCQkweDAwMDAzNjJjCisjZGVmaW5lICBURzNfQ1BNVV9TVEFUVVNfUENJRV9GVU5DCSAweDIwMDAwMDAwCiAjZGVmaW5lIFRHM19DUE1VX0NMQ0tfU1RBVAkJMHgwMDAwMzYzMAogI2RlZmluZSAgQ1BNVV9DTENLX1NUQVRfTUFDX0NMQ0tfTUFTSwkgMHgwMDFmMDAwMAogI2RlZmluZSAgQ1BNVV9DTENLX1NUQVRfTUFDX0NMQ0tfNjJfNQkgMHgwMDAwMDAwMApAQCAtMTAyMiw2ICsxMDY1LDcgQEAKICNkZWZpbmUgIEhPU1RDQ19NT0RFX0NMUlRJQ0tfVFhCRAkgMHgwMDAwMDQwMAogI2RlZmluZSAgSE9TVENDX01PREVfTk9JTlRfT05fTk9XCSAweDAwMDAwODAwCiAjZGVmaW5lICBIT1NUQ0NfTU9ERV9OT0lOVF9PTl9GT1JDRQkgMHgwMDAwMTAwMAorI2RlZmluZSAgSE9TVENDX01PREVfQ09BTF9WRUMxX05PVwkgMHgwMDAwMjAwMAogI2RlZmluZSBIT1NUQ0NfU1RBVFVTCQkJMHgwMDAwM2MwNAogI2RlZmluZSAgSE9TVENDX1NUQVRVU19FUlJPUl9BVFROCSAweDAwMDAwMDA0CiAjZGVmaW5lIEhPU1RDQ19SWENPTF9USUNLUwkJMHgwMDAwM2MwOApAQCAtMTEwNyw3ICsxMTUxLDE2IEBACiAjZGVmaW5lIEhPU1RDQ19TTkRfQ09OX0lEWF8xMwkJMHgwMDAwM2NmNAogI2RlZmluZSBIT1NUQ0NfU05EX0NPTl9JRFhfMTQJCTB4MDAwMDNjZjgKICNkZWZpbmUgSE9TVENDX1NORF9DT05fSURYXzE1CQkweDAwMDAzY2ZjCi0vKiAweDNkMDAgLS0+IDB4NDAwMCB1bnVzZWQgKi8KKyNkZWZpbmUgSE9TVENDX1NUQVRCTENLX1JJTkcxCQkweDAwMDAzZDAwCisvKiAweDNkMDAgLS0+IDB4M2Q4MCB1bnVzZWQgKi8KKworI2RlZmluZSBIT1NUQ0NfUlhDT0xfVElDS1NfVkVDMQkJMHgwMDAwM2Q4MAorI2RlZmluZSBIT1NUQ0NfVFhDT0xfVElDS1NfVkVDMQkJMHgwMDAwM2Q4NAorI2RlZmluZSBIT1NUQ0NfUlhNQVhfRlJBTUVTX1ZFQzEJMHgwMDAwM2Q4OAorI2RlZmluZSBIT1NUQ0NfVFhNQVhfRlJBTUVTX1ZFQzEJMHgwMDAwM2Q4YworI2RlZmluZSBIT1NUQ0NfUlhDT0FMX01BWEZfSU5UX1ZFQzEJMHgwMDAwM2Q5MAorI2RlZmluZSBIT1NUQ0NfVFhDT0FMX01BWEZfSU5UX1ZFQzEJMHgwMDAwM2Q5NAorLyogMHgzZDk4IC0tPiAweDQwMDAgdW51c2VkICovCiAKIC8qIE1lbW9yeSBhcmJpdGVyIGNvbnRyb2wgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE1FTUFSQl9NT0RFCQkJMHgwMDAwNDAwMApAQCAtMTQ0NSw2ICsxNDk4LDggQEAKICNkZWZpbmUgTVNHSU5UX01PREUJCQkweDAwMDA2MDAwCiAjZGVmaW5lICBNU0dJTlRfTU9ERV9SRVNFVAkJIDB4MDAwMDAwMDEKICNkZWZpbmUgIE1TR0lOVF9NT0RFX0VOQUJMRQkJIDB4MDAwMDAwMDIKKyNkZWZpbmUgIE1TR0lOVF9NT0RFX09ORV9TSE9UX0RJU0FCTEUJIDB4MDAwMDAwMjAKKyNkZWZpbmUgIE1TR0lOVF9NT0RFX01VTFRJVkVDX0VOCSAweDAwMDAwMDgwCiAjZGVmaW5lIE1TR0lOVF9TVEFUVVMJCQkweDAwMDA2MDA0CiAjZGVmaW5lIE1TR0lOVF9GSUZPCQkJMHgwMDAwNjAwOAogLyogMHg2MDBjIC0tPiAweDY0MDAgdW51c2VkICovCkBAIC0xNjQwLDYgKzE2OTUsMjUgQEAKICNkZWZpbmUgIEZMQVNIXzU3NzgwVkVORE9SX0FUTUVMX0FUNDVEQjAyMUIgMHgwMzQwMDAwMgogI2RlZmluZSAgRkxBU0hfNTc3ODBWRU5ET1JfQVRNRUxfQVQ0NURCMDQxRCAweDAwNDAwMDAxCiAjZGVmaW5lICBGTEFTSF81Nzc4MFZFTkRPUl9BVE1FTF9BVDQ1REIwNDFCIDB4MDM0MDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfRUVQUk9NCSAweDAyMDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX01JQ1JPX0VFUFJPTQkgMHgwMjAwMDAwMworI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9NREIwMTFECSAweDAxMDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX0FUTUVMX01EQjAyMUQJIDB4MDEwMDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NMjVQRTEwCSAweDAyMDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX1NUX01fTTI1UEUyMAkgMHgwMjAwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF9NX000NVBFMTAJIDB4MDAwMDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfU1RfTV9NNDVQRTIwCSAweDAwMDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAxMUIJIDB4MDE0MDAwMDAKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfQVRNRUxfQURCMDIxQgkgMHgwMTQwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9BVE1FTF9BREIwMTFECSAweDAxNDAwMDAxCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX0FUTUVMX0FEQjAyMUQJIDB4MDE0MDAwMDMKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NMjVQRTEwCSAweDAyNDAwMDAwCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX1NUX0FfTTI1UEUyMAkgMHgwMjQwMDAwMgorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF9BX000NVBFMTAJIDB4MDI0MDAwMDEKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfU1RfQV9NNDVQRTIwCSAweDAyNDAwMDAzCisjZGVmaW5lICBGTEFTSF81NzE3VkVORE9SX0FUTUVMXzQ1VVNQVAkgMHgwMzQwMDAwMAorI2RlZmluZSAgRkxBU0hfNTcxN1ZFTkRPUl9TVF8yNVVTUFQJIDB4MDM0MDAwMDIKKyNkZWZpbmUgIEZMQVNIXzU3MTdWRU5ET1JfU1RfNDVVU1BUCSAweDAzNDAwMDAxCiAjZGVmaW5lICBOVlJBTV9DRkcxXzU3NTJQQUdFX1NJWkVfTUFTSwkgMHg3MDAwMDAwMAogI2RlZmluZSAgRkxBU0hfNTc1MlBBR0VfU0laRV8yNTYJIDB4MDAwMDAwMDAKICNkZWZpbmUgIEZMQVNIXzU3NTJQQUdFX1NJWkVfNTEyCSAweDEwMDAwMDAwCkBAIC0xNjk2LDExICsxNzcwLDIzIEBACiAjZGVmaW5lIFBDSUVfVFJBTlNBQ1RJT05fQ0ZHCQkweDAwMDA3YzA0CiAjZGVmaW5lIFBDSUVfVFJBTlNfQ0ZHXzFTSE9UX01TSQkgMHgyMDAwMDAwMAogI2RlZmluZSBQQ0lFX1RSQU5TX0NGR19MT00JCSAweDAwMDAwMDIwCisvKiAweDdjMDggLS0+IDB4N2QyOCB1bnVzZWQgKi8KIAogI2RlZmluZSBQQ0lFX1BXUl9NR01UX1RIUkVTSAkJMHgwMDAwN2QyOAogI2RlZmluZSBQQ0lFX1BXUl9NR01UX0wxX1RIUkVTSF9NU0sJIDB4MDAwMGZmMDAKICNkZWZpbmUgUENJRV9QV1JfTUdNVF9MMV9USFJFU0hfNE1TCSAweDAwMDBmZjAwCiAjZGVmaW5lIFBDSUVfUFdSX01HTVRfRVhUX0FTUE1fVE1SX0VOCSAweDAxMDAwMDAwCisvKiAweDdkMmMgLS0+IDB4N2Q1NCB1bnVzZWQgKi8KKworI2RlZmluZSBURzNfUENJRV9MTktDVEwJCQkweDAwMDA3ZDU0CisjZGVmaW5lICBURzNfUENJRV9MTktDVExfTDFfUExMX1BEX0VOCSAweDAwMDAwMDA4CisjZGVmaW5lICBURzNfUENJRV9MTktDVExfTDFfUExMX1BEX0RJUwkgMHgwMDAwMDA4MAorLyogMHg3ZDU4IC0tPiAweDdlNzAgdW51c2VkICovCisKKyNkZWZpbmUgVEczX1BDSUVfRUlETEVfREVMQVkJCTB4MDAwMDdlNzAKKyNkZWZpbmUgIFRHM19QQ0lFX0VJRExFX0RFTEFZX01BU0sJIDB4MDAwMDAwMWYKKyNkZWZpbmUgIFRHM19QQ0lFX0VJRExFX0RFTEFZXzEzX0NMS1MJIDB4MDAwMDAwMGMKKy8qIDB4N2U3NCAtLT4gMHg4MDAwIHVudXNlZCAqLwogCiAKIC8qIE9UUCBiaXQgZGVmaW5pdGlvbnMgKi8KQEAgLTE4OTAsNyArMTk3Niw2IEBACiAKICNkZWZpbmUgTUlJX1RHM19EU1BfUldfUE9SVAkJMHgxNSAvKiBEU1AgY29lZmZpY2llbnQgcmVhZC93cml0ZSBwb3J0ICovCiAKLSNkZWZpbmUgTUlJX1RHM19FUEhZX1BURVNUCQkweDE3IC8qIDU5MDYgUEhZIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9URzNfRFNQX0FERFJFU1MJCTB4MTcgLyogRFNQIGFkZHJlc3MgcmVnaXN0ZXIgKi8KIAogI2RlZmluZSBNSUlfVEczX0RTUF9UQVAxCQkweDAwMDEKQEAgLTE5NTcsMTcgKzIwNDIsMjMgQEAKICNkZWZpbmUgTUlJX1RHM19NSVNDX1NIRFdfU0NSNV9MUEVECTB4MDAxMAogI2RlZmluZSBNSUlfVEczX01JU0NfU0hEV19TQ1I1X1NFTAkweDE0MDAKIAotCi0jZGVmaW5lIE1JSV9URzNfRVBIWV9URVNUCQkweDFmIC8qIDU5MDYgUEhZIHJlZ2lzdGVyICovCi0jZGVmaW5lIE1JSV9URzNfRVBIWV9TSEFET1dfRU4JCTB4ODAKLQotI2RlZmluZSBNSUlfVEczX0VQSFlUU1RfTUlTQ0NUUkwJMHgxMCAvKiA1OTA2IEVQSFkgbWlzYyBjdHJsIHNoYWRvdyByZWdpc3RlciAqLwotI2RlZmluZSBNSUlfVEczX0VQSFlUU1RfTUlTQ0NUUkxfTURJWAkweDQwMDAKLQogI2RlZmluZSBNSUlfVEczX1RFU1QxCQkJMHgxZQogI2RlZmluZSBNSUlfVEczX1RFU1QxX1RSSU1fRU4JCTB4MDAxMAogI2RlZmluZSBNSUlfVEczX1RFU1QxX0NSQ19FTgkJMHg4MDAwCiAKKworLyogRmFzdCBFdGhlcm5ldCBUcmFuY2VpdmVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE1JSV9URzNfRkVUX1BURVNUCQkweDE3CisjZGVmaW5lIE1JSV9URzNfRkVUX1RFU1QJCTB4MWYKKyNkZWZpbmUgIE1JSV9URzNfRkVUX1NIQURPV19FTgkJMHgwMDgwCisKKyNkZWZpbmUgTUlJX1RHM19GRVRfU0hEV19NSVNDQ1RSTAkweDEwCisjZGVmaW5lICBNSUlfVEczX0ZFVF9TSERXX01JU0NDVFJMX01ESVgJMHg0MDAwCisKKyNkZWZpbmUgTUlJX1RHM19GRVRfU0hEV19BVVhTVEFUMgkweDFiCisjZGVmaW5lICBNSUlfVEczX0ZFVF9TSERXX0FVWFNUQVQyX0FQRAkweDAwMjAKKworCiAvKiBBUEUgcmVnaXN0ZXJzLiAgQWNjZXNzaWJsZSB0aHJvdWdoIEJBUjEgKi8KICNkZWZpbmUgVEczX0FQRV9FVkVOVAkJCTB4MDAwYwogI2RlZmluZSAgQVBFX0VWRU5UXzEJCQkgMHgwMDAwMDAwMQpAQCAtMjA2NSw2ICsyMTU2LDcgQEAKICNkZWZpbmUgVFhEX0ZMQUdfSVBfQ1NVTQkJMHgwMDAyCiAjZGVmaW5lIFRYRF9GTEFHX0VORAkJCTB4MDAwNAogI2RlZmluZSBUWERfRkxBR19JUF9GUkFHCQkweDAwMDgKKyNkZWZpbmUgVFhEX0ZMQUdfSk1CX1BLVAkJMHgwMDA4CiAjZGVmaW5lIFRYRF9GTEFHX0lQX0ZSQUdfRU5ECQkweDAwMTAKICNkZWZpbmUgVFhEX0ZMQUdfVkxBTgkJCTB4MDA0MAogI2RlZmluZSBUWERfRkxBR19DT0FMX05PVwkJMHgwMDgwCkBAIC0yNDUwLDYgKzI1NDIsNDkgQEAKIAl1NjQJCW5pY190eF90aHJlc2hvbGRfaGl0OwogfTsKIAorc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgeworCXUzMgkJCQlyeF9zdGRfcHRyOworCXUzMgkJCQlyeF9qbWJfcHRyOworCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MJKnJ4X3N0ZDsKKwlzdHJ1Y3QgdGczX2V4dF9yeF9idWZmZXJfZGVzYwkqcnhfam1iOworCXN0cnVjdCByaW5nX2luZm8JCSpyeF9zdGRfYnVmZmVyczsKKwlzdHJ1Y3QgcmluZ19pbmZvCQkqcnhfam1iX2J1ZmZlcnM7CisJZG1hX2FkZHJfdAkJCXJ4X3N0ZF9tYXBwaW5nOworCWRtYV9hZGRyX3QJCQlyeF9qbWJfbWFwcGluZzsKK307CisKKyNkZWZpbmUgVEczX0lSUV9NQVhfVkVDUyA1CisKK3N0cnVjdCB0ZzNfbmFwaSB7CisJc3RydWN0IG5hcGlfc3RydWN0CQluYXBpCV9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwlzdHJ1Y3QgdGczCQkJKnRwOworCXN0cnVjdCB0ZzNfaHdfc3RhdHVzCQkqaHdfc3RhdHVzOworCisJdTMyCQkJCWxhc3RfdGFnOworCXUzMgkJCQlsYXN0X2lycV90YWc7CisJdTMyCQkJCWludF9tYm94OworCXUzMgkJCQljb2FsX25vdzsKKwl1MzIJCQkJdHhfcHJvZDsKKwl1MzIJCQkJdHhfY29uczsKKwl1MzIJCQkJdHhfcGVuZGluZzsKKwl1MzIJCQkJcHJvZG1ib3g7CisKKwl1MzIJCQkJY29uc21ib3g7CisJdTMyCQkJCXJ4X3JjYl9wdHI7CisJdTE2CQkJCSpyeF9yY2JfcHJvZF9pZHg7CisKKwlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjCSpyeF9yY2I7CisJc3RydWN0IHRnM190eF9idWZmZXJfZGVzYwkqdHhfcmluZzsKKwlzdHJ1Y3QgdHhfcmluZ19pbmZvCQkqdHhfYnVmZmVyczsKKworCWRtYV9hZGRyX3QJCQlzdGF0dXNfbWFwcGluZzsKKwlkbWFfYWRkcl90CQkJcnhfcmNiX21hcHBpbmc7CisJZG1hX2FkZHJfdAkJCXR4X2Rlc2NfbWFwcGluZzsKKworCWNoYXIJCQkJaXJxX2xibFtJRk5BTVNJWl07CisJdW5zaWduZWQgaW50CQkJaXJxX3ZlYzsKK307CisKIHN0cnVjdCB0ZzMgewogCS8qIGJlZ2luICJnZW5lcmFsLCBmcmVxdWVudGx5LXVzZWQgbWVtYmVycyIgY2FjaGVsaW5lIHNlY3Rpb24gKi8KIApAQCAtMjUwMiw1MCArMjYzNywyNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlCQkqZGV2OwogCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7CiAKLQlzdHJ1Y3QgdGczX2h3X3N0YXR1cwkJKmh3X3N0YXR1czsKLQlkbWFfYWRkcl90CQkJc3RhdHVzX21hcHBpbmc7Ci0JdTMyCQkJCWxhc3RfdGFnOwotCXUzMgkJCQlsYXN0X2lycV90YWc7Ci0KIAl1MzIJCQkJbXNnX2VuYWJsZTsKIAogCS8qIGJlZ2luICJ0eCB0aHJlYWQiIGNhY2hlbGluZSBzZWN0aW9uICovCiAJdm9pZAkJCQkoKndyaXRlMzJfdHhfbWJveCkgKHN0cnVjdCB0ZzMgKiwgdTMyLAogCQkJCQkJCSAgICB1MzIpOwotCXUzMgkJCQl0eF9wcm9kOwotCXUzMgkJCQl0eF9jb25zOwotCXUzMgkJCQl0eF9wZW5kaW5nOwotCi0Jc3RydWN0IHRnM190eF9idWZmZXJfZGVzYwkqdHhfcmluZzsKLQlzdHJ1Y3QgdHhfcmluZ19pbmZvCQkqdHhfYnVmZmVyczsKLQlkbWFfYWRkcl90CQkJdHhfZGVzY19tYXBwaW5nOwogCiAJLyogYmVnaW4gInJ4IHRocmVhZCIgY2FjaGVsaW5lIHNlY3Rpb24gKi8KLQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJCW5hcGk7CisJc3RydWN0IHRnM19uYXBpCQkJbmFwaVtURzNfSVJRX01BWF9WRUNTXTsKIAl2b2lkCQkJCSgqd3JpdGUzMl9yeF9tYm94KSAoc3RydWN0IHRnMyAqLCB1MzIsCiAJCQkJCQkJICAgIHUzMik7Ci0JdTMyCQkJCXJ4X3JjYl9wdHI7Ci0JdTMyCQkJCXJ4X3N0ZF9wdHI7Ci0JdTMyCQkJCXJ4X2p1bWJvX3B0cjsKIAl1MzIJCQkJcnhfcGVuZGluZzsKIAl1MzIJCQkJcnhfanVtYm9fcGVuZGluZzsKKwl1MzIJCQkJcnhfc3RkX21heF9wb3N0OworCXUzMgkJCQlyeF9wa3RfbWFwX3N6OwogI2lmIFRHM19WTEFOX1RBR19VU0VECiAJc3RydWN0IHZsYW5fZ3JvdXAJCSp2bGdycDsKICNlbmRpZgogCi0Jc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYwkqcnhfc3RkOwotCXN0cnVjdCByaW5nX2luZm8JCSpyeF9zdGRfYnVmZmVyczsKLQlkbWFfYWRkcl90CQkJcnhfc3RkX21hcHBpbmc7Ci0JdTMyCQkJCXJ4X3N0ZF9tYXhfcG9zdDsKKwlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldAlwcm9kcmluZ1sxXTsKIAotCXN0cnVjdCB0ZzNfcnhfYnVmZmVyX2Rlc2MJKnJ4X2p1bWJvOwotCXN0cnVjdCByaW5nX2luZm8JCSpyeF9qdW1ib19idWZmZXJzOwotCWRtYV9hZGRyX3QJCQlyeF9qdW1ib19tYXBwaW5nOwotCi0Jc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYwkqcnhfcmNiOwotCWRtYV9hZGRyX3QJCQlyeF9yY2JfbWFwcGluZzsKLQotCXUzMgkJCQlyeF9wa3RfYnVmX3N6OwogCiAJLyogYmVnaW4gImV2ZXJ5dGhpbmcgZWxzZSIgY2FjaGVsaW5lKHMpIHNlY3Rpb24gKi8KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkJbmV0X3N0YXRzOwpAQCAtMjU3NSw2ICsyNjg2LDEwIEBACiAjZGVmaW5lIFRHM19GTEFHX0VFUFJPTV9XUklURV9QUk9UCTB4MDAwMDEwMDAKICNkZWZpbmUgVEczX0ZMQUdfTlZSQU0JCQkweDAwMDAyMDAwCiAjZGVmaW5lIFRHM19GTEFHX05WUkFNX0JVRkZFUkVECQkweDAwMDA0MDAwCisjZGVmaW5lIFRHM19GTEFHX1NVUFBPUlRfTVNJCQkweDAwMDA4MDAwCisjZGVmaW5lIFRHM19GTEFHX1NVUFBPUlRfTVNJWAkJMHgwMDAxMDAwMAorI2RlZmluZSBURzNfRkxBR19TVVBQT1JUX01TSV9PUl9NU0lYCShURzNfRkxBR19TVVBQT1JUX01TSSB8IFwKKwkJCQkJIFRHM19GTEFHX1NVUFBPUlRfTVNJWCkKICNkZWZpbmUgVEczX0ZMQUdfUENJWF9NT0RFCQkweDAwMDIwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1BDSV9ISUdIX1NQRUVECQkweDAwMDQwMDAwCiAjZGVmaW5lIFRHM19GTEFHX1BDSV8zMkJJVAkJMHgwMDA4MDAwMApAQCAtMjU4Nyw3ICsyNzAyLDcgQEAKICNkZWZpbmUgVEczX0ZMQUdfQ1BNVV9QUkVTRU5UCQkweDA0MDAwMDAwCiAjZGVmaW5lIFRHM19GTEFHXzQwQklUX0RNQV9CVUcJCTB4MDgwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfQlJPS0VOX0NIRUNLU1VNUwkweDEwMDAwMDAwCi0jZGVmaW5lIFRHM19GTEFHX1NVUFBPUlRfTVNJCQkweDIwMDAwMDAwCisjZGVmaW5lIFRHM19GTEFHX0pVTUJPX0NBUEFCTEUJCTB4MjAwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfQ0hJUF9SRVNFVFRJTkcJCTB4NDAwMDAwMDAKICNkZWZpbmUgVEczX0ZMQUdfSU5JVF9DT01QTEVURQkJMHg4MDAwMDAwMAogCXUzMgkJCQl0ZzNfZmxhZ3MyOwpAQCAtMjYxMyw3ICsyNzI4LDkgQEAKICNkZWZpbmUgVEczX0ZMRzJfNTc1MF9QTFVTCQkweDAwMDgwMDAwCiAjZGVmaW5lIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTQkweDAwMTAwMDAwCiAjZGVmaW5lIFRHM19GTEcyX1VTSU5HX01TSQkJMHgwMDIwMDAwMAotI2RlZmluZSBURzNfRkxHMl9KVU1CT19DQVBBQkxFCQkweDAwNDAwMDAwCisjZGVmaW5lIFRHM19GTEcyX1VTSU5HX01TSVgJCTB4MDA0MDAwMDAKKyNkZWZpbmUgVEczX0ZMRzJfVVNJTkdfTVNJX09SX01TSVgJKFRHM19GTEcyX1VTSU5HX01TSSB8IFwKKwkJCQkJVEczX0ZMRzJfVVNJTkdfTVNJWCkKICNkZWZpbmUgVEczX0ZMRzJfTUlJX1NFUkRFUwkJMHgwMDgwMDAwMAogI2RlZmluZSBURzNfRkxHMl9BTllfU0VSREVTCQkoVEczX0ZMRzJfUEhZX1NFUkRFUyB8CVwKIAkJCQkJVEczX0ZMRzJfTUlJX1NFUkRFUykKQEAgLTI2NDEsNiArMjc1OCw5IEBACiAjZGVmaW5lIFRHM19GTEczX1BIWV9FTkFCTEVfQVBECQkweDAwMDAxMDAwCiAjZGVmaW5lIFRHM19GTEczXzU3NTVfUExVUwkJMHgwMDAwMjAwMAogI2RlZmluZSBURzNfRkxHM19OT19OVlJBTQkJMHgwMDAwNDAwMAorI2RlZmluZSBURzNfRkxHM19UT0dHTEVfMTBfMTAwX0wxUExMUEQJMHgwMDAwODAwMAorI2RlZmluZSBURzNfRkxHM19QSFlfSVNfRkVUCQkweDAwMDEwMDAwCisjZGVmaW5lIFRHM19GTEczX0VOQUJMRV9SU1MJCTB4MDAwMjAwMDAKIAogCXN0cnVjdCB0aW1lcl9saXN0CQl0aW1lcjsKIAl1MTYJCQkJdGltZXJfY291bnRlcjsKQEAgLTI2ODYsNiArMjgwNiw4IEBACiAJc3RydWN0IG1paV9idXMJCQkqbWRpb19idXM7CiAJaW50CQkJCW1kaW9faXJxW1BIWV9NQVhfQUREUl07CiAKKwl1OAkJCQlwaHlfYWRkcjsKKwogCS8qIFBIWSBpbmZvICovCiAJdTMyCQkJCXBoeV9pZDsKICNkZWZpbmUgUEhZX0lEX01BU0sJCQkweGZmZmZmZmYwCkBAIC0yNzg1LDYgKzI5MDcsOSBAQAogCiAjZGVmaW5lIFNTVF8yNVZGMFgwX1BBR0VfU0laRQkJNDA5OAogCisJdW5zaWduZWQgaW50CQkJaXJxX21heDsKKwl1bnNpZ25lZCBpbnQJCQlpcnFfY250OworCiAJc3RydWN0IGV0aHRvb2xfY29hbGVzY2UJCWNvYWw7CiAKIAkvKiBmaXJtd2FyZSBpbmZvICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90bGFuLmMgYi9kcml2ZXJzL25ldC90bGFuLmMKaW5kZXggMzg0Y2I1ZS4uM2QzMWI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3RsYW4uYwpAQCAtMjg5LDcgKzI4OSw3IEBACiBzdGF0aWMgdm9pZAlUTGFuX0Vpc2FfQ2xlYW51cCggdm9pZCApOwogc3RhdGljIGludCAgICAgIFRMYW5fSW5pdCggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludAlUTGFuX09wZW4oIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKTsKLXN0YXRpYyBpbnQJVExhbl9TdGFydFR4KCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBUTGFuX1N0YXJ0VHgoIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGlycXJldHVybl90IFRMYW5fSGFuZGxlSW50ZXJydXB0KCBpbnQsIHZvaWQgKik7CiBzdGF0aWMgaW50CVRMYW5fQ2xvc2UoIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHN0cnVjdAluZXRfZGV2aWNlX3N0YXRzICpUTGFuX0dldFN0YXRzKCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTEwMDQsOCArMTAwNCw2IEBACiAKIAogCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCXJldHVybiAtRVBFUk07CiAJCQlUTGFuX01paVdyaXRlUmVnKGRldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwKIAkJCQkJIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwogCQkJcmV0dXJuIDA7CkBAIC0xMDgzLDcgKzEwODEsNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IFRMYW5fU3RhcnRUeCggc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCitzdGF0aWMgbmV0ZGV2X3R4X3QgVExhbl9TdGFydFR4KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKIHsKIAlUTGFuUHJpdmF0ZUluZm8gKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWRtYV9hZGRyX3QJdGFpbF9saXN0X3BoeXM7CkBAIC0xMDk1LDExICsxMDkzLDExIEBACiAJCVRMQU5fREJHKCBUTEFOX0RFQlVHX1RYLCAiVFJBTlNNSVQ6ICAlcyBQSFkgaXMgbm90IHJlYWR5XG4iLAogCQkJICBkZXYtPm5hbWUgKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKHNrYl9wYWR0byhza2IsIFRMQU5fTUlOX0ZSQU1FX1NJWkUpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl0eGxlbiA9IG1heChza2ItPmxlbiwgKHVuc2lnbmVkIGludClUTEFOX01JTl9GUkFNRV9TSVpFKTsKIAogCXRhaWxfbGlzdCA9IHByaXYtPnR4TGlzdCArIHByaXYtPnR4VGFpbDsKQEAgLTExNTAsNyArMTE0OCw3IEBACiAJQ0lSQ19JTkMoIHByaXYtPnR4VGFpbCwgVExBTl9OVU1fVFhfTElTVFMgKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIH0gLyogVExhbl9TdGFydFR4ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKaW5kZXggYjQwYjZkZS4uNzI0MTU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogc3RhdGljIGludCB4bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB4bF9vcGVuX2h3KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIDsgIAogc3RhdGljIGludCB4bF9od19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsgCi1zdGF0aWMgaW50IHhsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgeGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHhsX2RuX2NvbXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7IAogc3RhdGljIGludCB4bF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHhsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTE5Myw3ICsxMTkzLDcgQEAKICAqCVR4IC0gUG9sbGluZyBjb25maWd1cmF0aW9uCiAgKi8KIAkKLXN0YXRpYyBpbnQgeGxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSAKK3N0YXRpYyBuZXRkZXZfdHhfdCB4bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHhsX3ByaXZhdGUgKnhsX3ByaXY9bmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgeGxfdHhfZGVzYyAqdHhkIDsgCkBAIC0xMjQwLDcgKzEyNDAsNyBAQAogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhsX3ByaXYtPnhsX2xvY2ssZmxhZ3MpIDsgCiAgCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0gZWxzZSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhsX3ByaXYtPnhsX2xvY2ssZmxhZ3MpIDsgCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKaW5kZXggMDhhNmM0MS4uNTI1YmJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKQEAgLTE5MSw3ICsxOTEsOCBAQAogc3RhdGljIHZvaWQJdG9rX29wZW5fYWRhcHRlcih1bnNpZ25lZCBsb25nIGRldl9hZGRyKTsKIHN0YXRpYyB2b2lkIAlvcGVuX3NhcCh1bnNpZ25lZCBjaGFyIHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgCXRva19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IAl0b2tfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdG9rX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgCXRva19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCB0b2tfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCAJaW5pdGlhbF90b2tfaW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTAyMiw3ICsxMDIzLDggQEAKIAogI2RlZmluZSBTVEFUSU9OX0lEX09GU1QgNAogCi1zdGF0aWMgaW50IHRva19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHRva19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdG9rX2luZm8gKnRpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDQxLDcgKzEwNDMsNyBAQAogCXdyaXRlYihDTURfSU5fU1JCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJih0aS0+bG9jayksIGZsYWdzKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCmluZGV4IGIzNzE1ZWYuLjI2ZGNhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCkBAIC0yMDMsNyArMjAzLDggQEAKIAogc3RhdGljIGludCBzdHJlYW1lcl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc3RyZWFtZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc3RyZWFtZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdHJlYW1lcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzdHJlYW1lcl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHN0cmVhbWVyX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IHN0cmVhbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwpAQCAtMTE0MSw3ICsxMTQyLDggQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgc3RyZWFtZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0cmVhbWVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc3RyZWFtZXJfcHJpdmF0ZSAqc3RyZWFtZXJfcHJpdiA9CiAJICAgIG5ldGRldl9wcml2KGRldik7CkBAIC0xMTgzLDcgKzExODUsNyBAQAogCiAJCXN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfZnJlZSA9IChzdHJlYW1lcl9wcml2LT50eF9yaW5nX2ZyZWUgKyAxKSAmIChTVFJFQU1FUl9UWF9SSU5HX1NJWkUgLSAxKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfbG9jayxmbGFncyk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0gZWxzZSB7CiAJICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9sb2NrLGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCmluZGV4IDQ1MWI1NDEuLmQ5ZWM3ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwpAQCAtMTgyLDcgKzE4Miw4IEBACiBzdGF0aWMgaW50IG9seW1waWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOyAKIHN0YXRpYyBpbnQgb2x5bXBpY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBvbHltcGljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IG9seW1waWNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBvbHltcGljX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgb2x5bXBpY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIG9seW1waWNfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBvbHltcGljX2ZyZWVtZW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikgOyAgCkBAIC0xMDMwLDcgKzEwMzEsOCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0JCiAKLXN0YXRpYyBpbnQgb2x5bXBpY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAorc3RhdGljIG5ldGRldl90eF90IG9seW1waWNfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9seW1waWNfcHJpdmF0ZSAqb2x5bXBpY19wcml2PW5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqb2x5bXBpY19tbWlvPW9seW1waWNfcHJpdi0+b2x5bXBpY19tbWlvOwpAQCAtMTA1Miw3ICsxMDU0LDcgQEAKIAkJd3JpdGV3KCgoKHJlYWR3KG9seW1waWNfbW1pbytUWEVOUV8xKSkgJiAweDgwMDApIF4gMHg4MDAwKSB8IDEsb2x5bXBpY19tbWlvK1RYRU5RXzEpOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9seW1waWNfcHJpdi0+b2x5bXBpY19sb2NrLGZsYWdzKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfSBlbHNlIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2x5bXBpY19wcml2LT5vbHltcGljX2xvY2ssZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCmluZGV4IDU0YWQ0ZWQuLmViZGE2MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jCkBAIC0yMzQsNyArMjM0LDggQEAKIAogLyogUyAqLwogc3RhdGljIGludCBzbWN0cl9zZW5kX2RhdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgc21jdHJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc21jdHJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNtY3RyX3NlbmRfbG9iZV9tZWRpYV90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzbWN0cl9zZW5kX3JwdF9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIE1BQ19IRUFERVIgKnJtZiwKICAgICAgICAgX191MTYgY29ycmVsYXRvcik7CkBAIC0zMDkxLDExICszMDkyLDcgQEAKICAgICAgICAgLyogU2V0dXAgdGhlIGxvYmUgbWVkaWEgdGVzdC4gKi8KICAgICAgICAgc21jdHJfbG9iZV9tZWRpYV90ZXN0X2NtZChkZXYpOwogICAgICAgICBpZihzbWN0cl93YWl0X2NtZChkZXYpKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc21jdHJfcmVzZXRfYWRhcHRlcihkZXYpOwotICAgICAgICAgICAgICAgIHRwLT5zdGF0dXMgPSBDTE9TRUQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChMT0JFX01FRElBX1RFU1RfRkFJTEVEKTsKLSAgICAgICAgfQorCQlnb3RvIGVycjsKIAogICAgICAgICAvKiBUeCBsb2JlIG1lZGlhIHRlc3QgZnJhbWVzLiAqLwogICAgICAgICBmb3IoaSA9IDA7IGkgPCAxNTAwOyArK2kpCkBAIC0zMTAzLDIwICszMTAwLDEyIEBACiAgICAgICAgICAgICAgICAgaWYoc21jdHJfc2VuZF9sb2JlX21lZGlhX3Rlc3QoZGV2KSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZihwZXJyb3IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtY3RyX3Jlc2V0X2FkYXB0ZXIoZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRlID0gQ0xPU0VEOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKExPQkVfTUVESUFfVEVTVF9GQUlMRUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJCWdvdG8gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzbWN0cl9sb2JlX21lZGlhX3Rlc3RfY21kKGRldikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWN0cl9yZXNldF9hZGFwdGVyKGRldik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRlID0gQ0xPU0VEOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTE9CRV9NRURJQV9URVNUX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJZ290byBlcnI7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMTI0LDI4ICszMTEzLDI0IEBACiAgICAgICAgIGlmKHNtY3RyX3NlbmRfZGF0KGRldikpCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZihzbWN0cl9zZW5kX2RhdChkZXYpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNtY3RyX3Jlc2V0X2FkYXB0ZXIoZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTE9CRV9NRURJQV9URVNUX0ZBSUxFRCk7Ci0gICAgICAgICAgICAgICAgfQorCQkJZ290byBlcnI7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBDaGVjayBpZiBhbnkgZnJhbWVzIHJlY2VpdmVkIGR1cmluZyB0ZXN0LiAqLwogICAgICAgICBpZigodHAtPnJ4X2ZjYl9jdXJyW01BQ19RVUVVRV0tPmZyYW1lX3N0YXR1cykKICAgICAgICAgICAgICAgICB8fCAodHAtPnJ4X2ZjYl9jdXJyW05PTl9NQUNfUVVFVUVdLT5mcmFtZV9zdGF0dXMpKQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc21jdHJfcmVzZXRfYWRhcHRlcihkZXYpOwotICAgICAgICAgICAgICAgIHRwLT5zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgICAgICAgICByZXR1cm4gKExPQkVfTUVESUFfVEVTVF9GQUlMRUQpOwotICAgICAgICB9CisJCQlnb3RvIGVycjsKIAogICAgICAgICAvKiBTZXQgcmVjZWl2ZSBtYXNrIHRvICJQcm9taXNjIiBtb2RlLiAqLwogICAgICAgICB0cC0+cmVjZWl2ZV9tYXNrID0gc2F2ZWRfcmN2X21hc2s7CiAKICAgICAgICAgc21jdHJfY2hnX3J4X21hc2soZGV2KTsKIAotICAgICAgICByZXR1cm4gKDApOworCSByZXR1cm4gMDsKK2VycjoKKwlzbWN0cl9yZXNldF9hZGFwdGVyKGRldik7CisJdHAtPnN0YXR1cyA9IENMT1NFRDsKKwlyZXR1cm4gTE9CRV9NRURJQV9URVNUX0ZBSUxFRDsKIH0KIAogc3RhdGljIGludCBzbWN0cl9sb2JlX21lZGlhX3Rlc3RfY21kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00NTg3LDcgKzQ1NzIsOCBAQAogLyoKICAqIEdldHMgc2tiIGZyb20gc3lzdGVtLCBxdWV1ZXMgaXQgYW5kIGNoZWNrcyBpZiBpdCBjYW4gYmUgc2VudAogICovCi1zdGF0aWMgaW50IHNtY3RyX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc21jdHJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICAgICAgc3RydWN0IG5ldF9sb2NhbCAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC00NjA5LDcgKzQ1OTUsNyBAQAogICAgICAgICBpZih0cC0+UXVldWVTa2IgPiAwKQogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCQotICAgICAgICByZXR1cm4gKDApOworICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHNtY3RyX3NlbmRfbG9iZV9tZWRpYV90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jCmluZGV4IGEyZWFiNzIuLmE3YjY4ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jCkBAIC0xNDQsOCArMTQ0LDggQEAKIC8qICJHIiAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp0bXMzODB0cl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvKiAiSCIgKi8KLXN0YXRpYyBpbnQgCXRtczM4MHRyX2hhcmR3YXJlX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCB0bXMzODB0cl9oYXJkd2FyZV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogLyogIkkiICovCiBzdGF0aWMgaW50IAl0bXMzODB0cl9pbml0X2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAJdG1zMzgwdHJfaW5pdF9pcGIoc3RydWN0IG5ldF9sb2NhbCAqdHApOwpAQCAtMTY1LDcgKzE2NSw4IEBACiBzdGF0aWMgdm9pZCAJdG1zMzgwdHJfcmVzZXRfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgCXRtczM4MHRyX3Jpbmdfc3RhdHVzX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIC8qICJTIiAqLwotc3RhdGljIGludCAJdG1zMzgwdHJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdG1zMzgwdHJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAJdG1zMzgwdHJfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludAl0bXMzODB0cl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7CiAvKiAiVCIgKi8KQEAgLTU5OSwyMSArNjAwLDIzIEBACiAvKgogICogR2V0cyBza2IgZnJvbSBzeXN0ZW0sIHF1ZXVlcyBpdCBhbmQgY2hlY2tzIGlmIGl0IGNhbiBiZSBzZW50CiAgKi8KLXN0YXRpYyBpbnQgdG1zMzgwdHJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB0bXMzODB0cl9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyOworCW5ldGRldl90eF90IHJjOwogCi0JZXJyID0gdG1zMzgwdHJfaGFyZHdhcmVfc2VuZF9wYWNrZXQoc2tiLCBkZXYpOworCXJjID0gdG1zMzgwdHJfaGFyZHdhcmVfc2VuZF9wYWNrZXQoc2tiLCBkZXYpOwogCWlmKHRwLT5UcGxGcmVlLT5OZXh0VFBMUHRyLT5CdXN5RmxhZykKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXJldHVybiAoZXJyKTsKKwlyZXR1cm4gcmM7CiB9CiAKIC8qCiAgKiBNb3ZlIGZyYW1lcyBpbnRvIGFkYXB0ZXIgdHggcXVldWUKICAqLwotc3RhdGljIGludCB0bXMzODB0cl9oYXJkd2FyZV9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHRtczM4MHRyX2hhcmR3YXJlX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlUUEwgKnRwbDsKIAlzaG9ydCBsZW5ndGg7CkBAIC02ODIsNyArNjg1LDcgQEAKIAl0bXMzODB0cl9leGVjX3NpZmNtZChkZXYsIENNRF9UWF9WQUxJRCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKaW5kZXggZWY0OTc0NC4uNzRlNWJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwpAQCAtNTk5LDcgKzU5OSw4IEBACiAJCW5ldGlmX3dha2VfcXVldWUoZGUtPmRldik7CiB9CiAKLXN0YXRpYyBpbnQgZGVfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBkZV9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkZV9wcml2YXRlICpkZSA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGVudHJ5LCB0eF9mcmVlOwpAQCAtNjUxLDcgKzY1Miw3IEBACiAJZHczMihUeFBvbGwsIE5vcm1hbFR4UG9sbCk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IGFjZmRjY2QuLmE4MzQ5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtODk1LDcgKzg5NSw4IEBACiAqKiBQdWJsaWMgRnVuY3Rpb25zCiAqLwogc3RhdGljIGludCAgICAgZGU0eDVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgICAgIGRlNHg1X3F1ZXVlX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBkZTR4NV9xdWV1ZV9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGRlNHg1X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIGludCAgICAgZGU0eDVfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0ICBuZXRfZGV2aWNlX3N0YXRzICpkZTR4NV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xNDU2LDE4ICsxNDU3LDE2IEBACiAvKgogKiogV3JpdGVzIGEgc29ja2V0IGJ1ZmZlciBhZGRyZXNzIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSB0cmFuc21pdCBkZXNjcmlwdG9yLgogKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogZGU0eDVfcXVldWVfcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgc3RydWN0IGRlNHg1X3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgaW50IHN0YXR1cyA9IE5FVERFVl9UWF9PSzsKICAgICB1X2xvbmcgZmxhZ3MgPSAwOwogCiAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgIGlmICghbHAtPnR4X2VuYWJsZSkgeyAgICAgICAgICAgICAgICAgICAvKiBDYW5ub3Qgc2VuZCBmb3Igbm93ICovCisgICAgaWYgKCFscC0+dHhfZW5hYmxlKSAgICAgICAgICAgICAgICAgICAvKiBDYW5ub3Qgc2VuZCBmb3Igbm93ICovCiAJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0gICAgfQogCiAgICAgLyoKICAgICAqKiBDbGVhbiBvdXQgdGhlIFRYIHJpbmcgYXN5bmNocm9ub3VzbHkgdG8gaW50ZXJydXB0cyAtIHNvbWV0aW1lcyB0aGUKQEAgLTE1MjEsNyArMTUyMCw3IEBACiAKICAgICBscC0+Y2FjaGUubG9jayA9IDA7CiAKLSAgICByZXR1cm4gc3RhdHVzOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKaW5kZXggOGU3OGYwMC4uYTQ1ZGVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAKIC8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgZG1mZV9vcGVuKHN0cnVjdCBERVZJQ0UgKik7Ci1zdGF0aWMgaW50IGRtZmVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgREVWSUNFICopOworc3RhdGljIG5ldGRldl90eF90IGRtZmVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgREVWSUNFICopOwogc3RhdGljIGludCBkbWZlX3N0b3Aoc3RydWN0IERFVklDRSAqKTsKIHN0YXRpYyB2b2lkIGRtZmVfc2V0X2ZpbHRlcl9tb2RlKHN0cnVjdCBERVZJQ0UgKik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKQEAgLTY2MSw3ICs2NjEsOCBAQAogICoJU2VuZCBhIHBhY2tldCB0byBtZWRpYSBmcm9tIHRoZSB1cHBlciBsYXllci4KICAqLwogCi1zdGF0aWMgaW50IGRtZmVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgREVWSUNFICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZG1mZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgREVWSUNFICpkZXYpCiB7CiAJc3RydWN0IGRtZmVfYm9hcmRfaW5mbyAqZGIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB0eF9kZXNjICp0eHB0cjsKQEAgLTY3Niw3ICs2NzcsNyBAQAogCWlmIChza2ItPmxlbiA+IE1BWF9QQUNLRVRfU0laRSkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogYmlnIHBhY2tldCA9ICVkXG4iLCAodTE2KXNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGItPmxvY2ssIGZsYWdzKTsKQEAgLTcyMiw3ICs3MjMsNyBAQAogCS8qIGZyZWUgdGhpcyBTS0IgKi8KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwppbmRleCA0Y2Y5YTY1Li42YjIzMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC0yNTYsNyArMjU2LDggQEAKIHN0YXRpYyB2b2lkIHR1bGlwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB0dWxpcF9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB0dWxpcF9mcmVlX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHR1bGlwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdHVsaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB0dWxpcF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHR1bGlwX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNjQ1LDcgKzY0Niw3IEBACiAJdHAtPnR4X3JpbmdbaS0xXS5idWZmZXIyID0gY3B1X3RvX2xlMzIodHAtPnR4X3JpbmdfZG1hKTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiB0dWxpcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTY5Myw3ICs2OTQsNyBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCB0dWxpcF9jbGVhbl90eF9yaW5nKHN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCkKQEAgLTkyMiw4ICs5MjMsNiBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgU0lPQ1NNSUlSRUc6CQkvKiBXcml0ZSBNSUkgUEhZIHJlZ2lzdGVyLiAqLwotCQlpZiAoIWNhcGFibGUgKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKIAkJaWYgKHJlZ251bSAmIH4weDFmKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChkYXRhLT5waHlfaWQgPT0gcGh5KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKaW5kZXggOTI3N2NlOC4uYzQ1N2EwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwpAQCAtMjE1LDcgKzIxNSw4IEBACiAKIC8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgdWxpNTI2eF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCB1bGk1MjZ4X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgdWxpNTI2eF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgdWxpNTI2eF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgdWxpNTI2eF9zZXRfZmlsdGVyX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKQEAgLTU2Nyw3ICs1NjgsOCBAQAogICoJU2VuZCBhIHBhY2tldCB0byBtZWRpYSBmcm9tIHRoZSB1cHBlciBsYXllci4KICAqLwogCi1zdGF0aWMgaW50IHVsaTUyNnhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHVsaTUyNnhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHR4X2Rlc2MgKnR4cHRyOwpAQCAtNTgyLDcgKzU4NCw3IEBACiAJaWYgKHNrYi0+bGVuID4gTUFYX1BBQ0tFVF9TSVpFKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBiaWcgcGFja2V0ID0gJWRcbiIsICh1MTYpc2tiLT5sZW4pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwpAQCAtNjI0LDcgKzYyNiw3IEBACiAJLyogZnJlZSB0aGlzIFNLQiAqLwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKaW5kZXggMGYxNTc3My4uYjM4ZDNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIHN0YXRpYyB2b2lkIHR4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGFsbG9jX3JpbmdkZXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZnJlZV9yaW5nZGVzYyhzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wKTsKLXN0YXRpYyBpbnQgIHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IGludHJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIHZvaWQgbmV0ZGV2X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3N0YXR1cyk7CiBzdGF0aWMgaW50ICBuZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC05OTcsNyArOTk3LDcgQEAKIAogfQogCi1zdGF0aWMgaW50IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBlbnRyeTsKQEAgLTEwNTgsNyArMTA1OCw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZnJhbWUgIyVkIHF1ZXVlZCBpbiBzbG90ICVkLlxuIiwKIAkJCSAgIGRldi0+bmFtZSwgbnAtPmN1cl90eCwgZW50cnkpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBuZXRkZXZfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTQ3MCw4ICsxNDcwLDYgQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKIAkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQltZGlvX3dyaXRlKGRldiwgZGF0YS0+cGh5X2lkICYgMHgxZiwgZGF0YS0+cmVnX251bSAmIDB4MWYsIGRhdGEtPnZhbF9pbik7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwppbmRleCBjMmNhOWY0Li4wZjJjYTU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKQEAgLTExMyw3ICsxMTMsOCBAQAogc3RhdGljIGludCB4aXJjb21fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCB4aXJjb21fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCB4aXJjb21faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7Ci1zdGF0aWMgaW50IHhpcmNvbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHhpcmNvbV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCB4aXJjb21fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgeGlyY29tX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgeGlyY29tX3VwKHN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZCk7CkBAIC0zODQsNyArMzg1LDggQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgeGlyY29tX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB4aXJjb21fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB4aXJjb21fcHJpdmF0ZSAqY2FyZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDM0LDcgKzQzNiw3IEBACiAJCQljYXJkLT50cmFuc21pdF91c2VkID0gbmV4dGRlc2NyaXB0b3I7CiAJCQlsZWF2ZSgieGlyY29tLXN0YXJ0X3htaXQgLSBzZW50Iik7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLGZsYWdzKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCA4NzIxNGEyLi4zZjVkMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMTAzLDEzICsxMDMsMTAgQEAKIAl1aWRfdAkJCW93bmVyOwogCWdpZF90CQkJZ3JvdXA7CiAKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXJlYWRxOwotCiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkqZmFzeW5jOwogCiAJc3RydWN0IHRhcF9maWx0ZXIgICAgICAgdHhmbHQ7Ci0Jc3RydWN0IHNvY2sJCSpzazsKIAlzdHJ1Y3Qgc29ja2V0CQlzb2NrZXQ7CiAKICNpZmRlZiBUVU5fREVCVUcKQEAgLTE0OCw3ICsxNDUsNyBAQAogCXRmaWxlLT50dW4gPSB0dW47CiAJdHVuLT50ZmlsZSA9IHRmaWxlOwogCWRldl9ob2xkKHR1bi0+ZGV2KTsKLQlzb2NrX2hvbGQodHVuLT5zayk7CisJc29ja19ob2xkKHR1bi0+c29ja2V0LnNrKTsKIAlhdG9taWNfaW5jKCZ0ZmlsZS0+Y291bnQpOwogCiBvdXQ6CkBAIC0xNjQsNyArMTYxLDcgQEAKIAluZXRpZl90eF91bmxvY2tfYmgodHVuLT5kZXYpOwogCiAJLyogRHJvcCByZWFkIHF1ZXVlICovCi0Jc2tiX3F1ZXVlX3B1cmdlKCZ0dW4tPnJlYWRxKTsKKwlza2JfcXVldWVfcHVyZ2UoJnR1bi0+c29ja2V0LnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAogCS8qIERyb3AgdGhlIGV4dHJhIGNvdW50IG9uIHRoZSBuZXQgZGV2aWNlICovCiAJZGV2X3B1dCh0dW4tPmRldik7CkBAIC0zMzMsNyArMzMwLDcgQEAKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXNvY2tfcHV0KHR1bi0+c2spOworCXNvY2tfcHV0KHR1bi0+c29ja2V0LnNrKTsKIH0KIAogLyogTmV0IGRldmljZSBvcGVuLiAqLwpAQCAtMzUxLDcgKzM0OCw3IEBACiB9CiAKIC8qIE5ldCBkZXZpY2Ugc3RhcnQgeG1pdCAqLwotc3RhdGljIGludCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB0dW5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMzY3LDcgKzM2NCw3IEBACiAJaWYgKCFjaGVja19maWx0ZXIoJnR1bi0+dHhmbHQsIHNrYikpCiAJCWdvdG8gZHJvcDsKIAotCWlmIChza2JfcXVldWVfbGVuKCZ0dW4tPnJlYWRxKSA+PSBkZXYtPnR4X3F1ZXVlX2xlbikgeworCWlmIChza2JfcXVldWVfbGVuKCZ0dW4tPnNvY2tldC5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkgPj0gZGV2LT50eF9xdWV1ZV9sZW4pIHsKIAkJaWYgKCEodHVuLT5mbGFncyAmIFRVTl9PTkVfUVVFVUUpKSB7CiAJCQkvKiBOb3JtYWwgcXVldWVpbmcgbW9kZS4gKi8KIAkJCS8qIFBhY2tldCBzY2hlZHVsZXIgaGFuZGxlcyBkcm9wcGluZyBvZiBmdXJ0aGVyIHBhY2tldHMuICovCkBAIC0zODQsMTkgKzM4MSwxOSBAQAogCX0KIAogCS8qIEVucXVldWUgcGFja2V0ICovCi0Jc2tiX3F1ZXVlX3RhaWwoJnR1bi0+cmVhZHEsIHNrYik7CisJc2tiX3F1ZXVlX3RhaWwoJnR1bi0+c29ja2V0LnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCiAJLyogTm90aWZ5IGFuZCB3YWtlIHVwIHJlYWRlciBwcm9jZXNzICovCiAJaWYgKHR1bi0+ZmxhZ3MgJiBUVU5fRkFTWU5DKQogCQlraWxsX2Zhc3luYygmdHVuLT5mYXN5bmMsIFNJR0lPLCBQT0xMX0lOKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR1bi0+c29ja2V0LndhaXQpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGRyb3A6CiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgdHVuX25ldF9tY2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQ4NSwxMyArNDgyLDEzIEBACiAJaWYgKCF0dW4pCiAJCXJldHVybiBQT0xMRVJSOwogCi0Jc2sgPSB0dW4tPnNrOworCXNrID0gdHVuLT5zb2NrZXQuc2s7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9wb2xsXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKIAlwb2xsX3dhaXQoZmlsZSwgJnR1bi0+c29ja2V0LndhaXQsIHdhaXQpOwogCi0JaWYgKCFza2JfcXVldWVfZW1wdHkoJnR1bi0+cmVhZHEpKQorCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCiAJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKIAogCWlmIChzb2NrX3dyaXRlYWJsZShzaykgfHwKQEAgLTUxMiw3ICs1MDksNyBAQAogCQkJCQkgICAgc2l6ZV90IHByZXBhZCwgc2l6ZV90IGxlbiwKIAkJCQkJICAgIHNpemVfdCBsaW5lYXIsIGludCBub2Jsb2NrKQogewotCXN0cnVjdCBzb2NrICpzayA9IHR1bi0+c2s7CisJc3RydWN0IHNvY2sgKnNrID0gdHVuLT5zb2NrZXQuc2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyOwogCkBAIC02MzQsNiArNjMxLDkgQEAKIAkJY2FzZSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY6CiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKIAkJCWJyZWFrOworCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19VRFA6CisJCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19VRFA7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXR1bi0+ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtNzE5LDYgKzcxOSw4IEBACiAJCQkJZ3NvLmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1RDUFY0OwogCQkJZWxzZSBpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BWNikKIAkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY7CisJCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1VEUCkKKwkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVURQOwogCQkJZWxzZQogCQkJCUJVRygpOwogCQkJaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQX0VDTikKQEAgLTc3NSw3ICs3NzcsNyBAQAogCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKIAogCQkvKiBSZWFkIGZyYW1lcyBmcm9tIHRoZSBxdWV1ZSAqLwotCQlpZiAoIShza2I9c2tiX2RlcXVldWUoJnR1bi0+cmVhZHEpKSkgeworCQlpZiAoIShza2I9c2tiX2RlcXVldWUoJnR1bi0+c29ja2V0LnNrLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKIAkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJYnJlYWs7CkBAIC04MTIsOCArODE0LDYgQEAKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnR1bi0+cmVhZHEpOwotCiAJdHVuLT5vd25lciA9IC0xOwogCXR1bi0+Z3JvdXAgPSAtMTsKIApAQCAtOTM0LDcgKzkzNCw3IEBACiAJCSAgICAgKHR1bi0+Z3JvdXAgIT0gLTEgJiYgIWluX2Vncm91cF9wKHR1bi0+Z3JvdXApKSkgJiYKIAkJICAgICFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJZXJyID0gc2VjdXJpdHlfdHVuX2Rldl9hdHRhY2godHVuLT5zayk7CisJCWVyciA9IHNlY3VyaXR5X3R1bl9kZXZfYXR0YWNoKHR1bi0+c29ja2V0LnNrKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCkBAIC05OTIsNyArOTkyLDYgQEAKIAkJc2stPnNrX3dyaXRlX3NwYWNlID0gdHVuX3NvY2tfd3JpdGVfc3BhY2U7CiAJCXNrLT5za19zbmRidWYgPSBJTlRfTUFYOwogCi0JCXR1bi0+c2sgPSBzazsKIAkJY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuID0gdHVuOwogCiAJCXNlY3VyaXR5X3R1bl9kZXZfcG9zdF9jcmVhdGUoc2spOwpAQCAtMTAwNSw3ICsxMDA0LDYgQEAKIAkJCQlnb3RvIGVycl9mcmVlX3NrOwogCQl9CiAKLQkJZXJyID0gLUVJTlZBTDsKIAkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycl9mcmVlX3NrOwpAQCAtMTA3Nyw3ICsxMDc1LDggQEAKIAlvbGRfZmVhdHVyZXMgPSBkZXYtPmZlYXR1cmVzOwogCS8qIFVuc2V0IGZlYXR1cmVzLCBzZXQgdGhlbSBhcyB3ZSBjaGV3IG9uIHRoZSBhcmcuICovCiAJZmVhdHVyZXMgPSAob2xkX2ZlYXR1cmVzICYgfihORVRJRl9GX0hXX0NTVU18TkVUSUZfRl9TR3xORVRJRl9GX0ZSQUdMSVNUCi0JCQkJICAgIHxORVRJRl9GX1RTT19FQ058TkVUSUZfRl9UU098TkVUSUZfRl9UU082KSk7CisJCQkJICAgIHxORVRJRl9GX1RTT19FQ058TkVUSUZfRl9UU098TkVUSUZfRl9UU082CisJCQkJICAgIHxORVRJRl9GX1VGTykpOwogCiAJaWYgKGFyZyAmIFRVTl9GX0NTVU0pIHsKIAkJZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVDsKQEAgLTEwOTQsNiArMTA5MywxMSBAQAogCQkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAkJCWFyZyAmPSB+KFRVTl9GX1RTTzR8VFVOX0ZfVFNPNik7CiAJCX0KKworCQlpZiAoYXJnICYgVFVOX0ZfVUZPKSB7CisJCQlmZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKKwkJCWFyZyAmPSB+VFVOX0ZfVUZPOworCQl9CiAJfQogCiAJLyogVGhpcyBnaXZlcyB0aGUgdXNlciBhIHdheSB0byB0ZXN0IGZvciBuZXcgZmVhdHVyZXMgaW4gZnV0dXJlIGJ5CkBAIC0xMjQ3LDcgKzEyNTEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVFVOR0VUU05EQlVGOgotCQlzbmRidWYgPSB0dW4tPnNrLT5za19zbmRidWY7CisJCXNuZGJ1ZiA9IHR1bi0+c29ja2V0LnNrLT5za19zbmRidWY7CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnNuZGJ1Ziwgc2l6ZW9mKHNuZGJ1ZikpKQogCQkJcmV0ID0gLUVGQVVMVDsKIAkJYnJlYWs7CkBAIC0xMjU4LDcgKzEyNjIsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQl0dW4tPnNrLT5za19zbmRidWYgPSBzbmRidWY7CisJCXR1bi0+c29ja2V0LnNrLT5za19zbmRidWYgPSBzbmRidWY7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTEzNDEsNyArMTM0NSw3IEBACiAKIAl0dW4gPSB0ZmlsZS0+dHVuOwogCWlmICh0dW4pCi0JCXNvY2tfcHV0KHR1bi0+c2spOworCQlzb2NrX3B1dCh0dW4tPnNvY2tldC5zayk7CiAKIAlwdXRfbmV0KHRmaWxlLT5uZXQpOwogCWtmcmVlKHRmaWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCBjZjI1ZWI0Li5kNmQzNDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC03NjIsNyArNzYyLDcgQEAKIAl0Y3BkLT5zdGF0dXMgPSAwOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHR5cGhvb25fc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtOTA5LDcgKzkwOSw3IEBACiAJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCmluZGV4IDhhN2I4YzcuLjQ0NjlmMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwpAQCAtMjA5LDkgKzIwOSwxMCBAQAogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYih1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5tYXhfcnhfYnVmX2xlbmd0aCArCi0JCQkJICBVQ0NfR0VUSF9SWF9EQVRBX0JVRl9BTElHTk1FTlQpOwotCisJc2tiID0gX19za2JfZGVxdWV1ZSgmdWdldGgtPnJ4X3JlY3ljbGUpOworCWlmICghc2tiKQorCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLm1heF9yeF9idWZfbGVuZ3RoICsKKwkJCQkgICAgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5UKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC00MzcsMzggKzQzOCw2IEBACiAJCSAgICAgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsIDApOwogfQogCi0jaWZkZWYgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVAotc3RhdGljIHZvaWQgbWFnaWNfcGFja2V0X2RldGVjdGlvbl9lbmFibGUoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQotewotCXN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICp1Y2NmOwotCXN0cnVjdCB1Y2NfZ2V0aCBfX2lvbWVtICp1Z19yZWdzOwotCi0JdWNjZiA9IHVnZXRoLT51Y2NmOwotCXVnX3JlZ3MgPSB1Z2V0aC0+dWdfcmVnczsKLQotCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBtYWdpYyBwYWNrZXQgZGV0ZWN0aW9uICovCi0Jc2V0Yml0czMyKHVjY2YtPnBfdWNjbSwgVUNDX0dFVEhfVUNDRV9NUEQpOwotCi0JLyogRW5hYmxlIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi8KLQlzZXRiaXRzMzIoJnVnX3JlZ3MtPm1hY2NmZzIsIE1BQ0NGRzJfTVBFKTsKLX0KLQotc3RhdGljIHZvaWQgbWFnaWNfcGFja2V0X2RldGVjdGlvbl9kaXNhYmxlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCkKLXsKLQlzdHJ1Y3QgdWNjX2Zhc3RfcHJpdmF0ZSAqdWNjZjsKLQlzdHJ1Y3QgdWNjX2dldGggX19pb21lbSAqdWdfcmVnczsKLQotCXVjY2YgPSB1Z2V0aC0+dWNjZjsKLQl1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgZm9yIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi8KLQljbHJiaXRzMzIodWNjZi0+cF91Y2NtLCBVQ0NfR0VUSF9VQ0NFX01QRCk7Ci0KLQkvKiBEaXNhYmxlIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi8KLQljbHJiaXRzMzIoJnVnX3JlZ3MtPm1hY2NmZzIsIE1BQ0NGRzJfTVBFKTsKLX0KLSNlbmRpZiAvKiBNQUdJQ19QQUNLRVQgKi8KLQogc3RhdGljIGlubGluZSBpbnQgY29tcGFyZV9hZGRyKHU4ICoqYWRkcjEsIHU4ICoqYWRkcjIpCiB7CiAJcmV0dXJuIG1lbWNtcChhZGRyMSwgYWRkcjIsIEVORVRfTlVNX09DVEVUU19QRVJfQUREUkVTUyk7CkBAIC0xNDQzLDE4MyArMTQxMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENhbGxlZCBldmVyeSB0aW1lIHRoZSBjb250cm9sbGVyIG1pZ2h0IG5lZWQgdG8gYmUgbWFkZQotICogYXdhcmUgb2YgbmV3IGxpbmsgc3RhdGUuICBUaGUgUEhZIGNvZGUgY29udmV5cyB0aGlzCi0gKiBpbmZvcm1hdGlvbiB0aHJvdWdoIHZhcmlhYmxlcyBpbiB0aGUgdWdldGggc3RydWN0dXJlLCBhbmQgdGhpcwotICogZnVuY3Rpb24gY29udmVydHMgdGhvc2UgdmFyaWFibGVzIGludG8gdGhlIGFwcHJvcHJpYXRlCi0gKiByZWdpc3RlciB2YWx1ZXMsIGFuZCBjYW4gYnJpbmcgZG93biB0aGUgZGV2aWNlIGlmIG5lZWRlZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBhZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHVjY19nZXRoIF9faW9tZW0gKnVnX3JlZ3M7Ci0Jc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7Ci0Jc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVnZXRoLT5waHlkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgbmV3X3N0YXRlID0gMDsKLQotCXVnX3JlZ3MgPSB1Z2V0aC0+dWdfcmVnczsKLQl1Zl9yZWdzID0gdWdldGgtPnVjY2YtPnVmX3JlZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdWdldGgtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwaHlkZXYtPmxpbmspIHsKLQkJdTMyIHRlbXB2YWwgPSBpbl9iZTMyKCZ1Z19yZWdzLT5tYWNjZmcyKTsKLQkJdTMyIHVwc21yID0gaW5fYmUzMigmdWZfcmVncy0+dXBzbXIpOwotCQkvKiBOb3cgd2UgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGJlIGluIGZ1bGwgZHVwbGV4IG1vZGUuCi0JCSAqIElmIG5vdCwgd2Ugb3BlcmF0ZSBpbiBoYWxmLWR1cGxleCBtb2RlLiAqLwotCQlpZiAocGh5ZGV2LT5kdXBsZXggIT0gdWdldGgtPm9sZGR1cGxleCkgewotCQkJbmV3X3N0YXRlID0gMTsKLQkJCWlmICghKHBoeWRldi0+ZHVwbGV4KSkKLQkJCQl0ZW1wdmFsICY9IH4oTUFDQ0ZHMl9GRFgpOwotCQkJZWxzZQotCQkJCXRlbXB2YWwgfD0gTUFDQ0ZHMl9GRFg7Ci0JCQl1Z2V0aC0+b2xkZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7Ci0JCX0KLQotCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSB1Z2V0aC0+b2xkc3BlZWQpIHsKLQkJCW5ld19zdGF0ZSA9IDE7Ci0JCQlzd2l0Y2ggKHBoeWRldi0+c3BlZWQpIHsKLQkJCWNhc2UgU1BFRURfMTAwMDoKLQkJCQl0ZW1wdmFsID0gKCh0ZW1wdmFsICYKLQkJCQkJICAgIH4oTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9NQVNLKSkgfAotCQkJCQkgICAgTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9CWVRFKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU1BFRURfMTAwOgotCQkJY2FzZSBTUEVFRF8xMDoKLQkJCQl0ZW1wdmFsID0gKCh0ZW1wdmFsICYKLQkJCQkJICAgIH4oTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9NQVNLKSkgfAotCQkJCQkgICAgTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9OSUJCTEUpOwotCQkJCS8qIGlmIHJlZHVjZWQgbW9kZSwgcmUtc2V0IFVQU01SLlIxME0gKi8KLQkJCQlpZiAoKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKSB8fAotCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJKSB8fAotCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEKSB8fAotCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQpIHx8Ci0JCQkJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRCkgfHwKLQkJCQkgICAgKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SVEJJKSkgewotCQkJCQlpZiAocGh5ZGV2LT5zcGVlZCA9PSBTUEVFRF8xMCkKLQkJCQkJCXVwc21yIHw9IFVDQ19HRVRIX1VQU01SX1IxME07Ci0JCQkJCWVsc2UKLQkJCQkJCXVwc21yICY9IH5VQ0NfR0VUSF9VUFNNUl9SMTBNOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJaWYgKG5ldGlmX21zZ19saW5rKHVnZXRoKSkKLQkJCQkJdWdldGhfd2FybigKLQkJCQkJCSIlczogQWNrISAgU3BlZWQgKCVkKSBpcyBub3QgMTAvMTAwLzEwMDAhIiwKLQkJCQkJCWRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQl1Z2V0aC0+b2xkc3BlZWQgPSBwaHlkZXYtPnNwZWVkOwotCQl9Ci0KLQkJb3V0X2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzIsIHRlbXB2YWwpOwotCQlvdXRfYmUzMigmdWZfcmVncy0+dXBzbXIsIHVwc21yKTsKLQotCQlpZiAoIXVnZXRoLT5vbGRsaW5rKSB7Ci0JCQluZXdfc3RhdGUgPSAxOwotCQkJdWdldGgtPm9sZGxpbmsgPSAxOwotCQl9Ci0JfSBlbHNlIGlmICh1Z2V0aC0+b2xkbGluaykgewotCQkJbmV3X3N0YXRlID0gMTsKLQkJCXVnZXRoLT5vbGRsaW5rID0gMDsKLQkJCXVnZXRoLT5vbGRzcGVlZCA9IDA7Ci0JCQl1Z2V0aC0+b2xkZHVwbGV4ID0gLTE7Ci0JfQotCi0JaWYgKG5ld19zdGF0ZSAmJiBuZXRpZl9tc2dfbGluayh1Z2V0aCkpCi0JCXBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVnZXRoLT5sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIEluaXRpYWxpemUgVEJJIFBIWSBpbnRlcmZhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUKLSAqIFNFUkRFUyBseW54IFBIWSBvbiB0aGUgY2hpcC4gIFdlIGNvbW11bmljYXRlIHdpdGggdGhpcyBQSFkKLSAqIHRocm91Z2ggdGhlIE1ESU8gYnVzIG9uIGVhY2ggY29udHJvbGxlciwgdHJlYXRpbmcgaXQgYXMgYQotICogIm5vcm1hbCIgUEhZIGF0IHRoZSBhZGRyZXNzIGZvdW5kIGluIHRoZSBVVEJJUEEgcmVnaXN0ZXIuICBXZSBhc3N1bWUKLSAqIHRoYXQgdGhlIFVUQklQQSByZWdpc3RlciBpcyB2YWxpZC4gIEVpdGhlciB0aGUgTURJTyBidXMgY29kZSB3aWxsIHNldAotICogaXQgdG8gYSB2YWx1ZSB0aGF0IGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciBQSFlzIG9uIHRoZSBidXMsIG9yIHRoZQotICogdmFsdWUgZG9lc24ndCBtYXR0ZXIsIGFzIHRoZXJlIGFyZSBubyBvdGhlciBQSFlzIG9uIHRoZSBidXMuCi0gKi8KLXN0YXRpYyB2b2lkIHVlY19jb25maWd1cmVfc2VyZGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgdWNjX2dldGhfaW5mbyAqdWdfaW5mbyA9IHVnZXRoLT51Z19pbmZvOwotCXN0cnVjdCBwaHlfZGV2aWNlICp0YmlwaHk7Ci0KLQlpZiAoIXVnX2luZm8tPnRiaV9ub2RlKSB7Ci0JCWRldl93YXJuKCZkZXYtPmRldiwgIlNHTUlJIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgZGV2aWNlICIKLQkJCSJ0cmVlIHNwZWNpZnkgYSB0YmktaGFuZGxlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXRiaXBoeSA9IG9mX3BoeV9maW5kX2RldmljZSh1Z19pbmZvLT50Ymlfbm9kZSk7Ci0JaWYgKCF0YmlwaHkpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJlcnJvcjogQ291bGQgbm90IGdldCBUQkkgZGV2aWNlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogSWYgdGhlIGxpbmsgaXMgYWxyZWFkeSB1cCwgd2UgbXVzdCBhbHJlYWR5IGJlIG9rLCBhbmQgZG9uJ3QgbmVlZCB0bwotCSAqIGNvbmZpZ3VyZSBhbmQgcmVzZXQgdGhlIFRCSTwtPlNlckRlcyBsaW5rLiAgTWF5YmUgVS1Cb290IGNvbmZpZ3VyZWQKLQkgKiBldmVyeXRoaW5nIGZvciB1cz8gIFJlc2V0dGluZyBpdCB0YWtlcyB0aGUgbGluayBkb3duIGFuZCByZXF1aXJlcwotCSAqIHNldmVyYWwgc2Vjb25kcyBmb3IgaXQgdG8gY29tZSBiYWNrLgotCSAqLwotCWlmIChwaHlfcmVhZCh0YmlwaHksIEVORVRfVEJJX01JSV9TUikgJiBUQklTUl9MU1RBVFVTKQotCQlyZXR1cm47Ci0KLQkvKiBTaW5nbGUgY2xrIG1vZGUsIG1paSBtb2RlIG9mZihmb3Igc2VyZGVzIGNvbW11bmljYXRpb24pICovCi0JcGh5X3dyaXRlKHRiaXBoeSwgRU5FVF9UQklfTUlJX0FOQSwgVEJJQU5BX1NFVFRJTkdTKTsKLQotCXBoeV93cml0ZSh0YmlwaHksIEVORVRfVEJJX01JSV9UQklDT04sIFRCSUNPTl9DTEtfU0VMRUNUKTsKLQotCXBoeV93cml0ZSh0YmlwaHksIEVORVRfVEJJX01JSV9DUiwgVEJJQ1JfU0VUVElOR1MpOwotfQotCi0vKiBDb25maWd1cmUgdGhlIFBIWSBmb3IgZGV2LgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MuICAtMSBpZiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQgaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHVjY19nZXRoX2luZm8gKnVnX2luZm8gPSBwcml2LT51Z19pbmZvOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0KLQlwcml2LT5vbGRsaW5rID0gMDsKLQlwcml2LT5vbGRzcGVlZCA9IDA7Ci0JcHJpdi0+b2xkZHVwbGV4ID0gLTE7Ci0KLQlwaHlkZXYgPSBvZl9waHlfY29ubmVjdChkZXYsIHVnX2luZm8tPnBoeV9ub2RlLCAmYWRqdXN0X2xpbmssIDAsCi0JCQkJcHJpdi0+cGh5X2ludGVyZmFjZSk7Ci0JaWYgKCFwaHlkZXYpCi0JCXBoeWRldiA9IG9mX3BoeV9jb25uZWN0X2ZpeGVkX2xpbmsoZGV2LCAmYWRqdXN0X2xpbmssCi0JCQkJCQkgICBwcml2LT5waHlfaW50ZXJmYWNlKTsKLQlpZiAoIXBoeWRldikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKHByaXYtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKQotCQl1ZWNfY29uZmlndXJlX3NlcmRlcyhkZXYpOwotCi0JcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKLQkJCQkgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAotCQkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAotCQkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpOwotCi0JaWYgKHByaXYtPm1heF9zcGVlZCA9PSBTUEVFRF8xMDAwKQotCQlwaHlkZXYtPnN1cHBvcnRlZCB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOwotCi0JcGh5ZGV2LT5hZHZlcnRpc2luZyA9IHBoeWRldi0+c3VwcG9ydGVkOwotCi0JcHJpdi0+cGh5ZGV2ID0gcGh5ZGV2OwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCiBzdGF0aWMgaW50IHVnZXRoX2dyYWNlZnVsX3N0b3BfdHgoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewogCXN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICp1Y2NmOwpAQCAtMTY1MCw3ICsxNDQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1Z2V0aF9ncmFjZWZ1bF9zdG9wX3J4KHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICogdWdldGgpCitzdGF0aWMgaW50IHVnZXRoX2dyYWNlZnVsX3N0b3Bfcngoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewogCXN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICp1Y2NmOwogCXUzMiBjZWNyX3N1YmJsb2NrOwpAQCAtMTc0Myw3ICsxNTM1LDcgQEAKIAogfQogCi1zdGF0aWMgaW50IHVnZXRoX2Rpc2FibGUoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKiB1Z2V0aCwgZW51bSBjb21tX2RpciBtb2RlKQorc3RhdGljIGludCB1Z2V0aF9kaXNhYmxlKHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCwgZW51bSBjb21tX2RpciBtb2RlKQogewogCXN0cnVjdCB1Y2NfZmFzdF9wcml2YXRlICp1Y2NmOwogCkBAIC0xNzY5LDYgKzE1NjEsMjA3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHVnZXRoX3F1aWVzY2Uoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQoreworCS8qIFdhaXQgZm9yIGFuZCBwcmV2ZW50IGFueSBmdXJ0aGVyIHhtaXRzLiAqLworCW5ldGlmX3R4X2Rpc2FibGUodWdldGgtPm5kZXYpOworCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0IHRvIGF2b2lkIE5BUEkgcmVzY2hlZHVsaW5nLiAqLworCWRpc2FibGVfaXJxKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmlycSk7CisKKwkvKiBTdG9wIE5BUEksIGFuZCBwb3NzaWJseSB3YWl0IGZvciBpdHMgY29tcGxldGlvbi4gKi8KKwluYXBpX2Rpc2FibGUoJnVnZXRoLT5uYXBpKTsKK30KKworc3RhdGljIHZvaWQgdWdldGhfYWN0aXZhdGUoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQoreworCW5hcGlfZW5hYmxlKCZ1Z2V0aC0+bmFwaSk7CisJZW5hYmxlX2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEpOworCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyh1Z2V0aC0+bmRldik7Cit9CisKKy8qIENhbGxlZCBldmVyeSB0aW1lIHRoZSBjb250cm9sbGVyIG1pZ2h0IG5lZWQgdG8gYmUgbWFkZQorICogYXdhcmUgb2YgbmV3IGxpbmsgc3RhdGUuICBUaGUgUEhZIGNvZGUgY29udmV5cyB0aGlzCisgKiBpbmZvcm1hdGlvbiB0aHJvdWdoIHZhcmlhYmxlcyBpbiB0aGUgdWdldGggc3RydWN0dXJlLCBhbmQgdGhpcworICogZnVuY3Rpb24gY29udmVydHMgdGhvc2UgdmFyaWFibGVzIGludG8gdGhlIGFwcHJvcHJpYXRlCisgKiByZWdpc3RlciB2YWx1ZXMsIGFuZCBjYW4gYnJpbmcgZG93biB0aGUgZGV2aWNlIGlmIG5lZWRlZC4KKyAqLworCitzdGF0aWMgdm9pZCBhZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19nZXRoIF9faW9tZW0gKnVnX3JlZ3M7CisJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVnZXRoLT5waHlkZXY7CisJaW50IG5ld19zdGF0ZSA9IDA7CisKKwl1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7CisJdWZfcmVncyA9IHVnZXRoLT51Y2NmLT51Zl9yZWdzOworCisJaWYgKHBoeWRldi0+bGluaykgeworCQl1MzIgdGVtcHZhbCA9IGluX2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzIpOworCQl1MzIgdXBzbXIgPSBpbl9iZTMyKCZ1Zl9yZWdzLT51cHNtcik7CisJCS8qIE5vdyB3ZSBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gYmUgaW4gZnVsbCBkdXBsZXggbW9kZS4KKwkJICogSWYgbm90LCB3ZSBvcGVyYXRlIGluIGhhbGYtZHVwbGV4IG1vZGUuICovCisJCWlmIChwaHlkZXYtPmR1cGxleCAhPSB1Z2V0aC0+b2xkZHVwbGV4KSB7CisJCQluZXdfc3RhdGUgPSAxOworCQkJaWYgKCEocGh5ZGV2LT5kdXBsZXgpKQorCQkJCXRlbXB2YWwgJj0gfihNQUNDRkcyX0ZEWCk7CisJCQllbHNlCisJCQkJdGVtcHZhbCB8PSBNQUNDRkcyX0ZEWDsKKwkJCXVnZXRoLT5vbGRkdXBsZXggPSBwaHlkZXYtPmR1cGxleDsKKwkJfQorCisJCWlmIChwaHlkZXYtPnNwZWVkICE9IHVnZXRoLT5vbGRzcGVlZCkgeworCQkJbmV3X3N0YXRlID0gMTsKKwkJCXN3aXRjaCAocGh5ZGV2LT5zcGVlZCkgeworCQkJY2FzZSBTUEVFRF8xMDAwOgorCQkJCXRlbXB2YWwgPSAoKHRlbXB2YWwgJgorCQkJCQkgICAgfihNQUNDRkcyX0lOVEVSRkFDRV9NT0RFX01BU0spKSB8CisJCQkJCSAgICBNQUNDRkcyX0lOVEVSRkFDRV9NT0RFX0JZVEUpOworCQkJCWJyZWFrOworCQkJY2FzZSBTUEVFRF8xMDA6CisJCQljYXNlIFNQRUVEXzEwOgorCQkJCXRlbXB2YWwgPSAoKHRlbXB2YWwgJgorCQkJCQkgICAgfihNQUNDRkcyX0lOVEVSRkFDRV9NT0RFX01BU0spKSB8CisJCQkJCSAgICBNQUNDRkcyX0lOVEVSRkFDRV9NT0RFX05JQkJMRSk7CisJCQkJLyogaWYgcmVkdWNlZCBtb2RlLCByZS1zZXQgVVBTTVIuUjEwTSAqLworCQkJCWlmICgodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpIHx8CisJCQkJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkpIHx8CisJCQkJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQpIHx8CisJCQkJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRCkgfHwKKwkJCQkgICAgKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9UWElEKSB8fAorCQkJCSAgICAodWdldGgtPnBoeV9pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JUQkkpKSB7CisJCQkJCWlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwKQorCQkJCQkJdXBzbXIgfD0gVUNDX0dFVEhfVVBTTVJfUjEwTTsKKwkJCQkJZWxzZQorCQkJCQkJdXBzbXIgJj0gflVDQ19HRVRIX1VQU01SX1IxME07CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAobmV0aWZfbXNnX2xpbmsodWdldGgpKQorCQkJCQl1Z2V0aF93YXJuKAorCQkJCQkJIiVzOiBBY2shICBTcGVlZCAoJWQpIGlzIG5vdCAxMC8xMDAvMTAwMCEiLAorCQkJCQkJZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXVnZXRoLT5vbGRzcGVlZCA9IHBoeWRldi0+c3BlZWQ7CisJCX0KKworCQkvKgorCQkgKiBUbyBjaGFuZ2UgdGhlIE1BQyBjb25maWd1cmF0aW9uIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGUKKwkJICogY29udHJvbGxlci4gVG8gZG8gc28sIHdlIGhhdmUgdG8gZWl0aGVyIGdyYWIgdWdldGgtPmxvY2ssCisJCSAqIHdoaWNoIGlzIGEgYmFkIGlkZWEgc2luY2UgJ2dyYWNlZnVsIHN0b3AnIGNvbW1hbmRzIG1pZ2h0CisJCSAqIHRha2UgcXVpdGUgYSB3aGlsZSwgb3Igd2UgY2FuIHF1aWVzY2UgZHJpdmVyJ3MgYWN0aXZpdHkuCisJCSAqLworCQl1Z2V0aF9xdWllc2NlKHVnZXRoKTsKKwkJdWdldGhfZGlzYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKworCQlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgdGVtcHZhbCk7CisJCW91dF9iZTMyKCZ1Zl9yZWdzLT51cHNtciwgdXBzbXIpOworCisJCXVnZXRoX2VuYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKwkJdWdldGhfYWN0aXZhdGUodWdldGgpOworCisJCWlmICghdWdldGgtPm9sZGxpbmspIHsKKwkJCW5ld19zdGF0ZSA9IDE7CisJCQl1Z2V0aC0+b2xkbGluayA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHVnZXRoLT5vbGRsaW5rKSB7CisJCQluZXdfc3RhdGUgPSAxOworCQkJdWdldGgtPm9sZGxpbmsgPSAwOworCQkJdWdldGgtPm9sZHNwZWVkID0gMDsKKwkJCXVnZXRoLT5vbGRkdXBsZXggPSAtMTsKKwl9CisKKwlpZiAobmV3X3N0YXRlICYmIG5ldGlmX21zZ19saW5rKHVnZXRoKSkKKwkJcGh5X3ByaW50X3N0YXR1cyhwaHlkZXYpOworfQorCisvKiBJbml0aWFsaXplIFRCSSBQSFkgaW50ZXJmYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlCisgKiBTRVJERVMgbHlueCBQSFkgb24gdGhlIGNoaXAuICBXZSBjb21tdW5pY2F0ZSB3aXRoIHRoaXMgUEhZCisgKiB0aHJvdWdoIHRoZSBNRElPIGJ1cyBvbiBlYWNoIGNvbnRyb2xsZXIsIHRyZWF0aW5nIGl0IGFzIGEKKyAqICJub3JtYWwiIFBIWSBhdCB0aGUgYWRkcmVzcyBmb3VuZCBpbiB0aGUgVVRCSVBBIHJlZ2lzdGVyLiAgV2UgYXNzdW1lCisgKiB0aGF0IHRoZSBVVEJJUEEgcmVnaXN0ZXIgaXMgdmFsaWQuICBFaXRoZXIgdGhlIE1ESU8gYnVzIGNvZGUgd2lsbCBzZXQKKyAqIGl0IHRvIGEgdmFsdWUgdGhhdCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggb3RoZXIgUEhZcyBvbiB0aGUgYnVzLCBvciB0aGUKKyAqIHZhbHVlIGRvZXNuJ3QgbWF0dGVyLCBhcyB0aGVyZSBhcmUgbm8gb3RoZXIgUEhZcyBvbiB0aGUgYnVzLgorICovCitzdGF0aWMgdm9pZCB1ZWNfY29uZmlndXJlX3NlcmRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHVjY19nZXRoX2luZm8gKnVnX2luZm8gPSB1Z2V0aC0+dWdfaW5mbzsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqdGJpcGh5OworCisJaWYgKCF1Z19pbmZvLT50Ymlfbm9kZSkgeworCQlkZXZfd2FybigmZGV2LT5kZXYsICJTR01JSSBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIGRldmljZSAiCisJCQkidHJlZSBzcGVjaWZ5IGEgdGJpLWhhbmRsZVxuIik7CisJCXJldHVybjsKKwl9CisKKwl0YmlwaHkgPSBvZl9waHlfZmluZF9kZXZpY2UodWdfaW5mby0+dGJpX25vZGUpOworCWlmICghdGJpcGh5KSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiZXJyb3I6IENvdWxkIG5vdCBnZXQgVEJJIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBsaW5rIGlzIGFscmVhZHkgdXAsIHdlIG11c3QgYWxyZWFkeSBiZSBvaywgYW5kIGRvbid0IG5lZWQgdG8KKwkgKiBjb25maWd1cmUgYW5kIHJlc2V0IHRoZSBUQkk8LT5TZXJEZXMgbGluay4gIE1heWJlIFUtQm9vdCBjb25maWd1cmVkCisJICogZXZlcnl0aGluZyBmb3IgdXM/ICBSZXNldHRpbmcgaXQgdGFrZXMgdGhlIGxpbmsgZG93biBhbmQgcmVxdWlyZXMKKwkgKiBzZXZlcmFsIHNlY29uZHMgZm9yIGl0IHRvIGNvbWUgYmFjay4KKwkgKi8KKwlpZiAocGh5X3JlYWQodGJpcGh5LCBFTkVUX1RCSV9NSUlfU1IpICYgVEJJU1JfTFNUQVRVUykKKwkJcmV0dXJuOworCisJLyogU2luZ2xlIGNsayBtb2RlLCBtaWkgbW9kZSBvZmYoZm9yIHNlcmRlcyBjb21tdW5pY2F0aW9uKSAqLworCXBoeV93cml0ZSh0YmlwaHksIEVORVRfVEJJX01JSV9BTkEsIFRCSUFOQV9TRVRUSU5HUyk7CisKKwlwaHlfd3JpdGUodGJpcGh5LCBFTkVUX1RCSV9NSUlfVEJJQ09OLCBUQklDT05fQ0xLX1NFTEVDVCk7CisKKwlwaHlfd3JpdGUodGJpcGh5LCBFTkVUX1RCSV9NSUlfQ1IsIFRCSUNSX1NFVFRJTkdTKTsKK30KKworLyogQ29uZmlndXJlIHRoZSBQSFkgZm9yIGRldi4KKyAqIHJldHVybnMgMCBpZiBzdWNjZXNzLiAgLTEgaWYgZmFpbHVyZQorICovCitzdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvID0gcHJpdi0+dWdfaW5mbzsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCisJcHJpdi0+b2xkbGluayA9IDA7CisJcHJpdi0+b2xkc3BlZWQgPSAwOworCXByaXYtPm9sZGR1cGxleCA9IC0xOworCisJcGh5ZGV2ID0gb2ZfcGh5X2Nvbm5lY3QoZGV2LCB1Z19pbmZvLT5waHlfbm9kZSwgJmFkanVzdF9saW5rLCAwLAorCQkJCXByaXYtPnBoeV9pbnRlcmZhY2UpOworCWlmICghcGh5ZGV2KQorCQlwaHlkZXYgPSBvZl9waHlfY29ubmVjdF9maXhlZF9saW5rKGRldiwgJmFkanVzdF9saW5rLAorCQkJCQkJICAgcHJpdi0+cGh5X2ludGVyZmFjZSk7CisJaWYgKCFwaHlkZXYpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwcml2LT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKKwkJdWVjX2NvbmZpZ3VyZV9zZXJkZXMoZGV2KTsKKworCXBoeWRldi0+c3VwcG9ydGVkICY9IChBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkJIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKTsKKworCWlmIChwcml2LT5tYXhfc3BlZWQgPT0gU1BFRURfMTAwMCkKKwkJcGh5ZGV2LT5zdXBwb3J0ZWQgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKworCXBoeWRldi0+YWR2ZXJ0aXNpbmcgPSBwaHlkZXYtPnN1cHBvcnRlZDsKKworCXByaXYtPnBoeWRldiA9IHBoeWRldjsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCB1Z2V0aF9kdW1wX3JlZ3Moc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoKQogewogI2lmZGVmIERFQlVHCkBAIC0xOTg2LDYgKzE5NzksOCBAQAogCQlpb3VubWFwKHVnZXRoLT51Z19yZWdzKTsKIAkJdWdldGgtPnVnX3JlZ3MgPSBOVUxMOwogCX0KKworCXNrYl9xdWV1ZV9wdXJnZSgmdWdldGgtPnJ4X3JlY3ljbGUpOwogfQogCiBzdGF0aWMgdm9pZCB1Y2NfZ2V0aF9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTIyMDIsNiArMjE5Nyw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnVnZXRoLT5yeF9yZWN5Y2xlKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zMTc0LDcgKzMxNzEsNyBAQAogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdWdldGgtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgdWNjX2dldGhfcngoc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoLCB1OCByeFEsIGludCByeF93b3JrX2xpbWl0KQpAQCAtMzIwOSw4ICszMjA2LDEwIEBACiAJCQlpZiAobmV0aWZfbXNnX3J4X2Vycih1Z2V0aCkpCiAJCQkJdWdldGhfZXJyKCIlcywgJWQ6IEVSUk9SISEhIHNrYiAtIDB4JTA4eCIsCiAJCQkJCSAgIF9fZnVuY19fLCBfX0xJTkVfXywgKHUzMikgc2tiKTsKLQkJCWlmIChza2IpCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWlmIChza2IpIHsKKwkJCQlza2ItPmRhdGEgPSBza2ItPmhlYWQgKyBORVRfU0tCX1BBRDsKKwkJCQlfX3NrYl9xdWV1ZV9oZWFkKCZ1Z2V0aC0+cnhfcmVjeWNsZSwgc2tiKTsKKwkJCX0KIAogCQkJdWdldGgtPnJ4X3NrYnVmZltyeFFdW3VnZXRoLT5za2JfY3VycnhbcnhRXV0gPSBOVUxMOwogCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CkBAIC0zMjY4LDYgKzMyNjcsOCBAQAogCiAJLyogTm9ybWFsIHByb2Nlc3NpbmcuICovCiAJd2hpbGUgKChiZF9zdGF0dXMgJiBUX1IpID09IDApIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwogCQkvKiBCRCBjb250YWlucyBhbHJlYWR5IHRyYW5zbWl0dGVkIGJ1ZmZlci4gICAqLwogCQkvKiBIYW5kbGUgdGhlIHRyYW5zbWl0dGVkIGJ1ZmZlciBhbmQgcmVsZWFzZSAqLwogCQkvKiB0aGUgQkQgdG8gYmUgdXNlZCB3aXRoIHRoZSBjdXJyZW50IGZyYW1lICAqLwpAQCAtMzI3Nyw5ICszMjc4LDE2IEBACiAKIAkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAKLQkJLyogRnJlZSB0aGUgc2sgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFR4QkQgKi8KLQkJZGV2X2tmcmVlX3NrYih1Z2V0aC0+Ci0JCQkJICB0eF9za2J1ZmZbdHhRXVt1Z2V0aC0+c2tiX2RpcnR5dHhbdHhRXV0pOworCQlza2IgPSB1Z2V0aC0+dHhfc2tidWZmW3R4UV1bdWdldGgtPnNrYl9kaXJ0eXR4W3R4UV1dOworCisJCWlmIChza2JfcXVldWVfbGVuKCZ1Z2V0aC0+cnhfcmVjeWNsZSkgPCBSWF9CRF9SSU5HX0xFTiAmJgorCQkJICAgICBza2JfcmVjeWNsZV9jaGVjayhza2IsCisJCQkJICAgIHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLm1heF9yeF9idWZfbGVuZ3RoICsKKwkJCQkgICAgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5UKSkKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJnVnZXRoLT5yeF9yZWN5Y2xlLCBza2IpOworCQllbHNlCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKIAkJdWdldGgtPnR4X3NrYnVmZlt0eFFdW3VnZXRoLT5za2JfZGlydHl0eFt0eFFdXSA9IE5VTEw7CiAJCXVnZXRoLT5za2JfZGlydHl0eFt0eFFdID0KIAkJICAgICh1Z2V0aC0+c2tiX2RpcnR5dHhbdHhRXSArCkBAIC0zMzA4LDE2ICszMzE2LDE2IEBACiAKIAl1Z19pbmZvID0gdWdldGgtPnVnX2luZm87CiAKLQlob3dtYW55ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgdWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykKLQkJaG93bWFueSArPSB1Y2NfZ2V0aF9yeCh1Z2V0aCwgaSwgYnVkZ2V0IC0gaG93bWFueSk7Ci0KIAkvKiBUeCBldmVudCBwcm9jZXNzaW5nICovCiAJc3Bpbl9sb2NrKCZ1Z2V0aC0+bG9jayk7CiAJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1R4OyBpKyspCiAJCXVjY19nZXRoX3R4KHVnZXRoLT5uZGV2LCBpKTsKIAlzcGluX3VubG9jaygmdWdldGgtPmxvY2spOwogCisJaG93bWFueSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1J4OyBpKyspCisJCWhvd21hbnkgKz0gdWNjX2dldGhfcngodWdldGgsIGksIGJ1ZGdldCAtIGhvd21hbnkpOworCiAJaWYgKGhvd21hbnkgPCBidWRnZXQpIHsKIAkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc2V0Yml0czMyKHVnZXRoLT51Y2NmLT5wX3VjY20sIFVDQ0VfUlhfRVZFTlRTIHwgVUNDRV9UWF9FVkVOVFMpOwpAQCAtMzQxNCw0NiArMzQyMiwyNSBAQAogCXJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgd2hlbiBzb21ldGhpbmcgbmVlZHMgdG8gdXNlIHRoZSBldGhlcm5ldCBkZXZpY2UgKi8KLS8qIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4gKi8KLXN0YXRpYyBpbnQgdWNjX2dldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCB1Y2NfZ2V0aF9pbml0X21hYyhzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGgpCiB7Ci0Jc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdWdldGgtPm5kZXY7CiAJaW50IGVycjsKIAotCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fZnVuY19fKTsKLQotCS8qIFRlc3Qgc3RhdGlvbiBhZGRyZXNzICovCi0JaWYgKGRldi0+ZGV2X2FkZHJbMF0gJiBFTkVUX0dST1VQX0FERFIpIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKLQkJCXVnZXRoX2VycigiJXM6IE11bHRpY2FzdCBhZGRyZXNzIHVzZWQgZm9yIHN0YXRpb24gYWRkcmVzcyIKLQkJCQkgICIgLSBpcyB0aGlzIHdoYXQgeW91IHdhbnRlZD8iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWVyciA9IGluaXRfcGh5KGRldik7Ci0JaWYgKGVycikgewotCQlpZiAobmV0aWZfbXNnX2lmdXAodWdldGgpKQotCQkJdWdldGhfZXJyKCIlczogQ2Fubm90IGluaXRpYWxpemUgUEhZLCBhYm9ydGluZy4iLAotCQkJCSAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KIAllcnIgPSB1Y2Nfc3RydWN0X2luaXQodWdldGgpOwogCWlmIChlcnIpIHsKIAkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKLQkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBjb25maWd1cmUgaW50ZXJuYWwgc3RydWN0LCBhYm9ydGluZy4iLCBkZXYtPm5hbWUpOwotCQlnb3RvIG91dF9lcnJfc3RvcDsKKwkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBjb25maWd1cmUgaW50ZXJuYWwgc3RydWN0LCAiCisJCQkJICAiYWJvcnRpbmcuIiwgZGV2LT5uYW1lKTsKKwkJZ290byBlcnI7CiAJfQogCi0JbmFwaV9lbmFibGUoJnVnZXRoLT5uYXBpKTsKLQogCWVyciA9IHVjY19nZXRoX3N0YXJ0dXAodWdldGgpOwogCWlmIChlcnIpIHsKIAkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKIAkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBjb25maWd1cmUgbmV0IGRldmljZSwgYWJvcnRpbmcuIiwKIAkJCQkgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0X2VycjsKKwkJZ290byBlcnI7CiAJfQogCiAJZXJyID0gYWRqdXN0X2VuZXRfaW50ZXJmYWNlKHVnZXRoKTsKQEAgLTM0NjEsNyArMzQ0OCw3IEBACiAJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCiAJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgY29uZmlndXJlIG5ldCBkZXZpY2UsIGFib3J0aW5nLiIsCiAJCQkJICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gZXJyOwogCX0KIAogCS8qICAgICAgIFNldCBNQUNTVE5BRERSMSwgTUFDU1ROQUREUjIgICAgICAgICAgICAgICAgKi8KQEAgLTM0NzUsMTMgKzM0NjIsNTEgQEAKIAkJCQkgICAmdWdldGgtPnVnX3JlZ3MtPm1hY3N0bmFkZHIxLAogCQkJCSAgICZ1Z2V0aC0+dWdfcmVncy0+bWFjc3RuYWRkcjIpOwogCi0JcGh5X3N0YXJ0KHVnZXRoLT5waHlkZXYpOwotCiAJZXJyID0gdWdldGhfZW5hYmxlKHVnZXRoLCBDT01NX0RJUl9SWF9BTkRfVFgpOwogCWlmIChlcnIpIHsKIAkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKIAkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBlbmFibGUgbmV0IGRldmljZSwgYWJvcnRpbmcuIiwgZGV2LT5uYW1lKTsKLQkJZ290byBvdXRfZXJyOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjoKKwl1Y2NfZ2V0aF9zdG9wKHVnZXRoKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBDYWxsZWQgd2hlbiBzb21ldGhpbmcgbmVlZHMgdG8gdXNlIHRoZSBldGhlcm5ldCBkZXZpY2UgKi8KKy8qIFJldHVybnMgMCBmb3Igc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQgdWNjX2dldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fZnVuY19fKTsKKworCS8qIFRlc3Qgc3RhdGlvbiBhZGRyZXNzICovCisJaWYgKGRldi0+ZGV2X2FkZHJbMF0gJiBFTkVUX0dST1VQX0FERFIpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKKwkJCXVnZXRoX2VycigiJXM6IE11bHRpY2FzdCBhZGRyZXNzIHVzZWQgZm9yIHN0YXRpb24gIgorCQkJCSAgImFkZHJlc3MgLSBpcyB0aGlzIHdoYXQgeW91IHdhbnRlZD8iLAorCQkJCSAgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSBpbml0X3BoeShkZXYpOworCWlmIChlcnIpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKKwkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBpbml0aWFsaXplIFBIWSwgYWJvcnRpbmcuIiwKKwkJCQkgIGRldi0+bmFtZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdWNjX2dldGhfaW5pdF9tYWModWdldGgpOworCWlmIChlcnIpIHsKKwkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKKwkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBpbml0aWFsaXplIE1BQywgYWJvcnRpbmcuIiwKKwkJCQkgIGRldi0+bmFtZSk7CisJCWdvdG8gZXJyOwogCX0KIAogCWVyciA9IHJlcXVlc3RfaXJxKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmlycSwgdWNjX2dldGhfaXJxX2hhbmRsZXIsCkBAIC0zNDkwLDE2ICszNTE1LDIwIEBACiAJCWlmIChuZXRpZl9tc2dfaWZ1cCh1Z2V0aCkpCiAJCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgZ2V0IElSUSBmb3IgbmV0IGRldmljZSwgYWJvcnRpbmcuIiwKIAkJCQkgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0X2VycjsKKwkJZ290byBlcnI7CiAJfQogCisJcGh5X3N0YXJ0KHVnZXRoLT5waHlkZXYpOworCW5hcGlfZW5hYmxlKCZ1Z2V0aC0+bmFwaSk7CiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAorCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoJmRldi0+ZGV2LAorCQkJcWVfYWxpdmVfZHVyaW5nX3NsZWVwKCkgfHwgdWdldGgtPnBoeWRldi0+aXJxKTsKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCB1Z2V0aC0+d29sX2VuKTsKKwogCXJldHVybiBlcnI7CiAKLW91dF9lcnI6Ci0JbmFwaV9kaXNhYmxlKCZ1Z2V0aC0+bmFwaSk7Ci1vdXRfZXJyX3N0b3A6CitlcnI6CiAJdWNjX2dldGhfc3RvcCh1Z2V0aCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTM1NjEsNiArMzU5MCw4NSBAQAogCXNjaGVkdWxlX3dvcmsoJnVnZXRoLT50aW1lb3V0X3dvcmspOwogfQogCisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCB1Y2NfZ2V0aF9zdXNwZW5kKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KG5kZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKQorCQlyZXR1cm4gMDsKKworCW5hcGlfZGlzYWJsZSgmdWdldGgtPm5hcGkpOworCisJLyoKKwkgKiBEaXNhYmxlIHRoZSBjb250cm9sbGVyLCBvdGhlcndpc2Ugd2UnbGwgd2FrZXVwIG9uIGFueSBuZXR3b3JrCisJICogYWN0aXZpdHkuCisJICovCisJdWdldGhfZGlzYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKworCWlmICh1Z2V0aC0+d29sX2VuICYgV0FLRV9NQUdJQykgeworCQlzZXRiaXRzMzIodWdldGgtPnVjY2YtPnBfdWNjbSwgVUNDX0dFVEhfVUNDRV9NUEQpOworCQlzZXRiaXRzMzIoJnVnZXRoLT51Z19yZWdzLT5tYWNjZmcyLCBNQUNDRkcyX01QRSk7CisJCXVjY19mYXN0X2VuYWJsZSh1Z2V0aC0+dWNjZiwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKwl9IGVsc2UgaWYgKCEodWdldGgtPndvbF9lbiAmIFdBS0VfUEhZKSkgeworCQlwaHlfc3RvcCh1Z2V0aC0+cGh5ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y2NfZ2V0aF9yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCXN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlICp1Z2V0aCA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBlcnI7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpCisJCXJldHVybiAwOworCisJaWYgKHFlX2FsaXZlX2R1cmluZ19zbGVlcCgpKSB7CisJCWlmICh1Z2V0aC0+d29sX2VuICYgV0FLRV9NQUdJQykgeworCQkJdWNjX2Zhc3RfZGlzYWJsZSh1Z2V0aC0+dWNjZiwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKwkJCWNscmJpdHMzMigmdWdldGgtPnVnX3JlZ3MtPm1hY2NmZzIsIE1BQ0NGRzJfTVBFKTsKKwkJCWNscmJpdHMzMih1Z2V0aC0+dWNjZi0+cF91Y2NtLCBVQ0NfR0VUSF9VQ0NFX01QRCk7CisJCX0KKwkJdWdldGhfZW5hYmxlKHVnZXRoLCBDT01NX0RJUl9SWF9BTkRfVFgpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEZ1bGwgcmVpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBpZiBRRSBzaHV0cyBkb3duCisJCSAqIGR1cmluZyBzbGVlcC4KKwkJICovCisJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKworCQllcnIgPSB1Y2NfZ2V0aF9pbml0X21hYyh1Z2V0aCk7CisJCWlmIChlcnIpIHsKKwkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBpbml0aWFsaXplIE1BQywgYWJvcnRpbmcuIiwKKwkJCQkgIG5kZXYtPm5hbWUpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXVnZXRoLT5vbGRsaW5rID0gMDsKKwl1Z2V0aC0+b2xkc3BlZWQgPSAwOworCXVnZXRoLT5vbGRkdXBsZXggPSAtMTsKKworCXBoeV9zdG9wKHVnZXRoLT5waHlkZXYpOworCXBoeV9zdGFydCh1Z2V0aC0+cGh5ZGV2KTsKKworCW5hcGlfZW5hYmxlKCZ1Z2V0aC0+bmFwaSk7CisJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgdWNjX2dldGhfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHVjY19nZXRoX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogc3RhdGljIHBoeV9pbnRlcmZhY2VfdCB0b19waHlfaW50ZXJmYWNlKGNvbnN0IGNoYXIgKnBoeV9jb25uZWN0aW9uX3R5cGUpCiB7CiAJaWYgKHN0cmNhc2VjbXAocGh5X2Nvbm5lY3Rpb25fdHlwZSwgIm1paSIpID09IDApCkBAIC0zODUyLDYgKzM5NjAsOCBAQAogCS5tYXRjaF90YWJsZQk9IHVjY19nZXRoX21hdGNoLAogCS5wcm9iZQkJPSB1Y2NfZ2V0aF9wcm9iZSwKIAkucmVtb3ZlCQk9IHVjY19nZXRoX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHVjY19nZXRoX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB1Y2NfZ2V0aF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1Y2NfZ2V0aF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaAppbmRleCAxOTVhYjI2Li4wM2E2Y2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTEyMTIsNiArMTIxMiw4IEBACiAJLyogaW5kZXggb2YgdGhlIGZpcnN0IHNrYiB3aGljaCBoYXNuJ3QgYmVlbiB0cmFuc21pdHRlZCB5ZXQuICovCiAJdTE2IHNrYl9kaXJ0eXR4W05VTV9UWF9RVUVVRVNdOwogCisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9yZWN5Y2xlOworCiAJc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbzsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCXBoeV9pbnRlcmZhY2VfdCBwaHlfaW50ZXJmYWNlOwpAQCAtMTIyMCw2ICsxMjIyLDcgQEAKIAlpbnQgb2xkc3BlZWQ7CiAJaW50IG9sZGR1cGxleDsKIAlpbnQgb2xkbGluazsKKwlpbnQgd29sX2VuOwogCiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwppbmRleCA2MWZlODBkLi43MDc1ZjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCkBAIC0zMTksOSArMzE5LDEzIEBACiAJaW50IGksIGogPSAwOwogCiAJaWYgKHN0YXRzX21vZGUgJiBVQ0NfR0VUSF9TVEFUSVNUSUNTX0dBVEhFUklOR19NT0RFX0hBUkRXQVJFKSB7Ci0JCWJhc2UgPSAodTMyIF9faW9tZW0gKikmdWdldGgtPnVnX3JlZ3MtPnR4NjQ7CisJCWlmICh1Z2V0aC0+dWdfcmVncykKKwkJCWJhc2UgPSAodTMyIF9faW9tZW0gKikmdWdldGgtPnVnX3JlZ3MtPnR4NjQ7CisJCWVsc2UKKwkJCWJhc2UgPSBOVUxMOworCiAJCWZvciAoaSA9IDA7IGkgPCBVRUNfSFdfU1RBVFNfTEVOOyBpKyspCi0JCQlkYXRhW2orK10gPSBpbl9iZTMyKCZiYXNlW2ldKTsKKwkJCWRhdGFbaisrXSA9IGJhc2UgPyBpbl9iZTMyKCZiYXNlW2ldKSA6IDA7CiAJfQogCWlmIChzdGF0c19tb2RlICYgVUNDX0dFVEhfU1RBVElTVElDU19HQVRIRVJJTkdfTU9ERV9GSVJNV0FSRV9UWCkgewogCQliYXNlID0gKHUzMiBfX2lvbWVtICopdWdldGgtPnBfdHhfZndfc3RhdGlzdGljc19wcmFtOwpAQCAtMzU1LDYgKzM1OSw0NCBAQAogCWRydmluZm8tPnJlZ2R1bXBfbGVuID0gdWVjX2dldF9yZWdzX2xlbihuZXRkZXYpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyB2b2lkIHVlY19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1Z2V0aC0+cGh5ZGV2OworCisJaWYgKHBoeWRldiAmJiBwaHlkZXYtPmlycSkKKwkJd29sLT5zdXBwb3J0ZWQgfD0gV0FLRV9QSFk7CisJaWYgKHFlX2FsaXZlX2R1cmluZ19zbGVlcCgpKQorCQl3b2wtPnN1cHBvcnRlZCB8PSBXQUtFX01BR0lDOworCisJd29sLT53b2xvcHRzID0gdWdldGgtPndvbF9lbjsKK30KKworc3RhdGljIGludCB1ZWNfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdWdldGgtPnBoeWRldjsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+KFdBS0VfUEhZIHwgV0FLRV9NQUdJQykpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfUEhZICYmICghcGh5ZGV2IHx8ICFwaHlkZXYtPmlycSkpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMgJiYgIXFlX2FsaXZlX2R1cmluZ19zbGVlcCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVnZXRoLT53b2xfZW4gPSB3b2wtPndvbG9wdHM7CisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZuZXRkZXYtPmRldiwgdWdldGgtPndvbF9lbik7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgdWVjX2dldF93b2wgTlVMTAorI2RlZmluZSB1ZWNfc2V0X3dvbCBOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdWVjX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgICAgICAgICAgID0gdWVjX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzICAgICAgICAgICA9IHVlY19zZXRfc2V0dGluZ3MsCkBAIC0zNzMsNiArNDE1LDggQEAKIAkuZ2V0X3NzZXRfY291bnQJCT0gdWVjX2dldF9zc2V0X2NvdW50LAogCS5nZXRfc3RyaW5ncyAgICAgICAgICAgID0gdWVjX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyAgICAgID0gdWVjX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfd29sCQk9IHVlY19nZXRfd29sLAorCS5zZXRfd29sCQk9IHVlY19zZXRfd29sLAogfTsKIAogdm9pZCB1ZWNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvYXNpeC5jIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwppbmRleCA4N2I0YTAyLi42Y2U3Zjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvYXNpeC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKQEAgLTczMSw3ICs3MzEsNyBAQAogLyogV2UgbmVlZCB0byBvdmVycmlkZSBzb21lIGV0aHRvb2xfb3BzIHNvIHdlIHJlcXVpcmUgb3VyCiAgICBvd24gc3RydWN0dXJlIHNvIHdlIGRvbid0IGludGVyZmVyZSB3aXRoIG90aGVyIHVzYm5ldAogICAgZGV2aWNlcyB0aGF0IG1heSBiZSBjb25uZWN0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi8KLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3Ml9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3Ml9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gYXNpeF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJCT0gYXNpeF9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCkBAIC04NzMsNyArODczLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODg3NzJfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODg3NzJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IGFzaXhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGFzaXhfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKaW5kZXggYjlkZDQyNS4uMmJlZDZiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NhdGMuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCkBAIC00MTEsNyArNDExLDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRjLT50eF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgY2F0Y19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgY2F0Y19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBjYXRjICpjYXRjID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDQ4LDcgKzQ0OSw3IEBACiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBjYXRjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTY5Nyw3ICs2OTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGNhdGNfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IGNhdGNfZ2V0X3NldHRpbmdzLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMgYi9kcml2ZXJzL25ldC91c2IvY2RjLXBob25ldC5jCmluZGV4IDc5MmFmNzIuLjk3ZTU0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3Bob25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bob25ldC5oPgogCiAjZGVmaW5lIFBOX01FRElBX1VTQgkweDFCCiAKQEAgLTU1LDcgKzU2LDcgQEAKIC8qCiAgKiBOZXR3b3JrIGRldmljZSBjYWxsYmFja3MKICAqLwotc3RhdGljIGludCB1c2Jwbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgdXNicG5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2Jwbl9kZXYgKnBuZCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHVyYiAqcmVxID0gTlVMTDsKQEAgLTgyLDEyICs4MywxMiBAQAogCWlmIChwbmQtPnR4X3F1ZXVlID49IGRldi0+dHhfcXVldWVfbGVuKQogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG5kLT50eF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZHJvcDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKQpAQCAtMjU2LDYgKzI1NywxOSBAQAogCXJldHVybiB1c2Jfc2V0X2ludGVyZmFjZShwbmQtPnVzYiwgbnVtLCAhcG5kLT5hY3RpdmVfc2V0dGluZyk7CiB9CiAKK3N0YXRpYyBpbnQgdXNicG5faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3RydWN0IGlmX3Bob25ldF9yZXEgKnJlcSA9IChzdHJ1Y3QgaWZfcGhvbmV0X3JlcSAqKWlmcjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DUE5HQVVUT0NPTkY6CisJCXJlcS0+aWZyX3Bob25ldF9hdXRvY29uZi5kZXZpY2UgPSBQTl9ERVZfUEM7CisJCXByaW50ayhLRVJOX0NSSVQiZGV2aWNlIGlzIFBOX0RFVl9QQ1xuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCiBzdGF0aWMgaW50IHVzYnBuX3NldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJaWYgKChuZXdfbXR1IDwgUEhPTkVUX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gUEhPTkVUX01BWF9NVFUpKQpAQCAtMjY5LDYgKzI4Myw3IEBACiAJLm5kb19vcGVuCT0gdXNicG5fb3BlbiwKIAkubmRvX3N0b3AJPSB1c2Jwbl9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQgPSB1c2Jwbl94bWl0LAorCS5uZG9fZG9faW9jdGwJPSB1c2Jwbl9pb2N0bCwKIAkubmRvX2NoYW5nZV9tdHUgPSB1c2Jwbl9zZXRfbXR1LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDFkMzczMGQuLjcyNDcwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCXJldHVybiBnZW5lcmljX21paV9pb2N0bCgmZGV2LT5taWksIGlmX21paShycSksIGNtZCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZG05NjAxX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBkbTk2MDFfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCT0gZG05NjAxX2dldF9kcnZpbmZvLAogCS5nZXRfbGluawk9IGRtOTYwMV9nZXRfbGluaywKIAkuZ2V0X21zZ2xldmVsCT0gdXNibmV0X2dldF9tc2dsZXZlbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCBmOGM2ZDdlLi5mYTRlNTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC03NzEsNyArNzcxLDggQEAKIH0KIAogLyogY2FsbGVkIGJ5IGtlcm5lbCB3aGVuIHdlIG5lZWQgdG8gdHJhbnNtaXQgYSBwYWNrZXQgKi8KLXN0YXRpYyBpbnQgaHNvX25ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaHNvX25ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBoc29fbmV0ICpvZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQgcmVzdWx0OwpAQCAtNzgwLDcgKzc4MSw3IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwogCWlmIChoc29fZ2V0X2FjdGl2aXR5KG9kZXYtPnBhcmVudCkgPT0gLUVBR0FJTikgewogCQlvZGV2LT5za2JfdHhfYnVmID0gc2tiOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBsb2cgaWYgYXNrZWQgKi8KQEAgLTgyOCw3ICs4MjksNyBAQAogCXVzYl9tYWtlX3BhdGgob2Rldi0+cGFyZW50LT51c2IsIGluZm8tPmJ1c19pbmZvLCBzaXplb2YgaW5mby0+YnVzX2luZm8pOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGhzb19nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rCiB9OwpAQCAtMjUzNCw2ICsyNTM1LDEwIEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGhzb190eXBlID0geworCS5uYW1lCT0gInd3YW4iLAorfTsKKwogLyogQ3JlYXRlcyBvdXIgbmV0d29yayBkZXZpY2UgKi8KIHN0YXRpYyBzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQkJCQlpbnQgcG9ydF9zcGVjKQpAQCAtMjU3NCw2ICsyNTc5LDcgQEAKIAkJZ290byBleGl0OwogCX0KIAlTRVRfTkVUREVWX0RFVihuZXQsICZpbnRlcmZhY2UtPmRldik7CisJU0VUX05FVERFVl9ERVZUWVBFKG5ldCwgJmhzb190eXBlKTsKIAogCS8qIHJlZ2lzdGVyaW5nIG91ciBuZXQgZGV2aWNlICovCiAJcmVzdWx0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKaW5kZXggMWY5ZWMyOS4uZTJhMzliOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwpAQCAtNzc4LDcgKzc3OCw3IEBACiAJcmV0dXJuIGthd2V0aC0+bGlua3N0YXRlOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbwk9IGthd2V0aF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsJPSBrYXdldGhfZ2V0X2xpbmsKIH07CkBAIC04MDMsNyArODAzLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAga2F3ZXRoX3N0YXJ0X3htaXQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBrYXdldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQorc3RhdGljIG5ldGRldl90eF90IGthd2V0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IGthd2V0aF9kZXZpY2UgKmthd2V0aCA9IG5ldGRldl9wcml2KG5ldCk7CiAJX19sZTE2ICpwcml2YXRlX2hlYWRlcjsKQEAgLTgyOSw3ICs4MzAsNyBAQAogCQkJa2F3ZXRoLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldCk7CiAJCQlzcGluX3VubG9ja19pcnEoJmthd2V0aC0+ZGV2aWNlX2xvY2spOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfQogCkBAIC04NjQsNyArODY1LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgma2F3ZXRoLT5kZXZpY2VfbG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYyBiL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKaW5kZXggN2FlOWFmZS4uMTA4NzNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYworKysgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCkBAIC00NDksNyArNDQ5LDcgQEAKIAltY3M3ODMwX2dldF9yZWcoZGV2LCAwLCByZWdzLT5sZW4sIGRhdGEpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG1jczc4MzBfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG1jczc4MzBfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG1jczc4MzBfZ2V0X2RydmluZm8sCiAJLmdldF9yZWdzX2xlbgkJPSBtY3M3ODMwX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3JlZ3MJCT0gbWNzNzgzMF9nZXRfcmVncywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCmluZGV4IDYzMWQyNjlhLi42ZmRhYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKQEAgLTg3Niw3ICs4NzYsOCBAQAogCXBlZ2FzdXMtPnN0YXRzLnR4X2Vycm9ycysrOwogfQogCi1zdGF0aWMgaW50IHBlZ2FzdXNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQorc3RhdGljIG5ldGRldl90eF90IHBlZ2FzdXNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOwogCWludCBjb3VudCA9ICgoc2tiLT5sZW4gKyAyKSAmIDB4M2YpID8gc2tiLT5sZW4gKyAyIDogc2tiLT5sZW4gKyAzOwpAQCAtOTE0LDcgKzkxNSw3IEBACiAJfQogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcGVnYXN1c19uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTExNzMsNyArMTE3NCw3IEBACiAJcGVnYXN1cy0+bXNnX2VuYWJsZSA9IHY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gcGVnYXN1c19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gcGVnYXN1c19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHBlZ2FzdXNfc2V0X3NldHRpbmdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggMjIzMjIzMi4uZDAzMmJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC02NSw2ICs2NSwzMiBAQAogRVhQT1JUX1NZTUJPTF9HUEwocm5kaXNfc3RhdHVzKTsKIAogLyoKKyAqIFJORElTIGluZGljYXRlIG1lc3NhZ2VzLgorICovCitzdGF0aWMgdm9pZCBybmRpc19tc2dfaW5kaWNhdGUoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgcm5kaXNfaW5kaWNhdGUgKm1zZywKKwkJCQlpbnQgYnVmbGVuKQoreworCXN0cnVjdCBjZGNfc3RhdGUgKmluZm8gPSAodm9pZCAqKSZkZXYtPmRhdGE7CisJc3RydWN0IGRldmljZSAqdWRldiA9ICZpbmZvLT5jb250cm9sLT5kZXY7CisKKwlpZiAoZGV2LT5kcml2ZXJfaW5mby0+aW5kaWNhdGlvbikgeworCQlkZXYtPmRyaXZlcl9pbmZvLT5pbmRpY2F0aW9uKGRldiwgbXNnLCBidWZsZW4pOworCX0gZWxzZSB7CisJCXN3aXRjaCAobXNnLT5zdGF0dXMpIHsKKwkJY2FzZSBSTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVDoKKwkJCWRldl9pbmZvKHVkZXYsICJybmRpcyBtZWRpYSBjb25uZWN0XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUOgorCQkJZGV2X2luZm8odWRldiwgInJuZGlzIG1lZGlhIGRpc2Nvbm5lY3RcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfaW5mbyh1ZGV2LCAicm5kaXMgaW5kaWNhdGlvbjogMHglMDh4XG4iLAorCQkJCQlsZTMyX3RvX2NwdShtc2ctPnN0YXR1cykpOworCQl9CisJfQorfQorCisvKgogICogUlBDIGRvbmUgUk5ESVMtc3R5bGUuICBDYWxsZXIgZ3VhcmFudGVlczoKICAqIC0gbWVzc2FnZSBpcyBwcm9wZXJseSBieXRlc3dhcHBlZAogICogLSB0aGVyZSdzIG5vIG90aGVyIHJlcXVlc3QgcGVuZGluZwpAQCAtMTQzLDI3ICsxNjksOSBAQAogCQkJCQlyZXF1ZXN0X2lkLCB4aWQpOwogCQkJCS8qIHRoZW4gbGlrZWx5IHJldHJ5ICovCiAJCQl9IGVsc2Ugc3dpdGNoIChidWYtPm1zZ190eXBlKSB7Ci0JCQljYXNlIFJORElTX01TR19JTkRJQ0FURTogewkvKiBmYXVsdC9ldmVudCAqLwotCQkJCXN0cnVjdCBybmRpc19pbmRpY2F0ZSAqbXNnID0gKHZvaWQgKilidWY7Ci0JCQkJaW50IHN0YXRlID0gMDsKKwkJCWNhc2UgUk5ESVNfTVNHX0lORElDQVRFOgkvKiBmYXVsdC9ldmVudCAqLworCQkJCXJuZGlzX21zZ19pbmRpY2F0ZShkZXYsICh2b2lkICopYnVmLCBidWZsZW4pOwogCi0JCQkJc3dpdGNoIChtc2ctPnN0YXR1cykgewotCQkJCWNhc2UgUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1Q6Ci0JCQkJCXN0YXRlID0gMTsKLQkJCQljYXNlIFJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUOgotCQkJCQlkZXZfaW5mbygmaW5mby0+Y29udHJvbC0+ZGV2LAotCQkJCQkJInJuZGlzIG1lZGlhICVzY29ubmVjdFxuIiwKLQkJCQkJCSFzdGF0ZT8iZGlzIjoiIik7Ci0JCQkJCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5saW5rX2NoYW5nZSkKLQkJCQkJCWRldi0+ZHJpdmVyX2luZm8tPmxpbmtfY2hhbmdlKAotCQkJCQkJCWRldiwgc3RhdGUpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlkZXZfaW5mbygmaW5mby0+Y29udHJvbC0+ZGV2LAotCQkJCQkJInJuZGlzIGluZGljYXRpb246IDB4JTA4eFxuIiwKLQkJCQkJCWxlMzJfdG9fY3B1KG1zZy0+c3RhdHVzKSk7Ci0JCQkJfQotCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgUk5ESVNfTVNHX0tFRVBBTElWRTogewkvKiBwaW5nICovCiAJCQkJc3RydWN0IHJuZGlzX2tlZXBhbGl2ZV9jICptc2cgPSAodm9pZCAqKWJ1ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGZjYzZmYTAuLmIwOTFlMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtNzI3LDcgKzcyNyw4IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwogfQogCi1zdGF0aWMgaW50IHJ0bDgxNTBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJ0bDgxNTBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaW50IGNvdW50LCByZXM7CkBAIC03NTMsNyArNzU0LDcgQEAKIAkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCkBAIC04NjQsNyArODY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBydGw4MTUwX2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBydGw4MTUwX2dldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCmluZGV4IGZlMDQ1ODkuLjkzOGZiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCkBAIC0yMjAsMTEgKzIyMCw2IEBACiAJZG8gewogCQlzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEUyUF9DTUQsICZ2YWwpOwogCi0JCWlmICghKHZhbCAmIEUyUF9DTURfTE9BREVEXykpIHsKLQkJCWRldndhcm4oZGV2LCAiTm8gRUVQUk9NIHByZXNlbnQiKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KIAkJaWYgKCEodmFsICYgRTJQX0NNRF9CVVNZXykpCiAJCQlyZXR1cm4gMDsKIApAQCAtNjMwLDcgKzYyNSw3IEBACiAJcmV0dXJuIHNtc2M5NXh4X3NldF9jc3VtcyhkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHNtc2M5NXh4X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzbXNjOTV4eF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsJPSB1c2JuZXRfZ2V0X2xpbmssCiAJLm53YXlfcmVzZXQJPSB1c2JuZXRfbndheV9yZXNldCwKIAkuZ2V0X2RydmluZm8JPSB1c2JuZXRfZ2V0X2RydmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggZWRmZDllMS4uMjRiMzZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMjMzLDYgKzIzMywxMSBAQAogewogCWludAlzdGF0dXM7CiAKKwlpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCAmZGV2LT5mbGFncykpIHsKKwkJc2tiX3F1ZXVlX3RhaWwoJmRldi0+cnhxX3BhdXNlLCBza2IpOworCQlyZXR1cm47CisJfQorCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zIChza2IsIGRldi0+bmV0KTsKIAlkZXYtPm5ldC0+c3RhdHMucnhfcGFja2V0cysrOwogCWRldi0+bmV0LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTUyNiw2ICs1MzEsNDEgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgdXNibmV0X3BhdXNlX3J4KHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlzZXRfYml0KEVWRU5UX1JYX1BBVVNFRCwgJmRldi0+ZmxhZ3MpOworCisJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMoZGV2KSkKKwkJZGV2ZGJnKGRldiwgInBhdXNlZCByeCBxdWV1ZSBlbmFibGVkIik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfcGF1c2VfcngpOworCit2b2lkIHVzYm5ldF9yZXN1bWVfcngoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IG51bSA9IDA7CisKKwljbGVhcl9iaXQoRVZFTlRfUlhfUEFVU0VELCAmZGV2LT5mbGFncyk7CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZkZXYtPnJ4cV9wYXVzZSkpICE9IE5VTEwpIHsKKwkJdXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpOworCQludW0rKzsKKwl9CisKKwl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPmJoKTsKKworCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKGRldikpCisJCWRldmRiZyhkZXYsICJwYXVzZWQgcnggcXVldWUgZGlzYWJsZWQsICVkIHNrYnMgcmVxdWV1ZWQiLCBudW0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3Jlc3VtZV9yeCk7CisKK3ZvaWQgdXNibmV0X3B1cmdlX3BhdXNlZF9yeHEoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXNrYl9xdWV1ZV9wdXJnZSgmZGV2LT5yeHFfcGF1c2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3B1cmdlX3BhdXNlZF9yeHEpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvLyB1bmxpbmsgcGVuZGluZyByeC90eDsgY29tcGxldGlvbiBoYW5kbGVycyBkbyBhbGwgb3RoZXIgY2xlYW51cAogCkBAIC01NzUsNyArNjE1LDkgQEAKIGludCB1c2JuZXRfc3RvcCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzdHJ1Y3QgZHJpdmVyX2luZm8JKmluZm8gPSBkZXYtPmRyaXZlcl9pbmZvOwogCWludAkJCXRlbXA7CisJaW50CQkJcmV0dmFsOwogCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0sgKHVubGlua193YWtldXApOwogCURFQ0xBUkVfV0FJVFFVRVVFICh3YWl0LCBjdXJyZW50KTsKIApAQCAtNTg3LDI0ICs2MjksNDIgQEAKIAkJCW5ldC0+c3RhdHMucnhfZXJyb3JzLCBuZXQtPnN0YXRzLnR4X2Vycm9ycwogCQkJKTsKIAotCS8vIGVuc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgdXJicwotCWFkZF93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOwotCWRldi0+d2FpdCA9ICZ1bmxpbmtfd2FrZXVwOwotCXRlbXAgPSB1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT50eHEpICsgdW5saW5rX3VyYnMgKGRldiwgJmRldi0+cnhxKTsKLQotCS8vIG1heWJlIHdhaXQgZm9yIGRlbGV0aW9ucyB0byBmaW5pc2guCi0Jd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmRldi0+cnhxKQotCQkJJiYgIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT50eHEpCi0JCQkmJiAhc2tiX3F1ZXVlX2VtcHR5KCZkZXYtPmRvbmUpKSB7Ci0JCW1zbGVlcChVTkxJTktfVElNRU9VVF9NUyk7Ci0JCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9ucyIsIHRlbXApOworCS8qIGFsbG93IG1pbmlkcml2ZXIgdG8gc3RvcCBjb3JyZWN0bHkgKHdpcmVsZXNzIGRldmljZXMgdG8gdHVybiBvZmYKKwkgKiByYWRpbyBldGMpICovCisJaWYgKGluZm8tPnN0b3ApIHsKKwkJcmV0dmFsID0gaW5mby0+c3RvcChkZXYpOworCQlpZiAocmV0dmFsIDwgMCAmJiBuZXRpZl9tc2dfaWZkb3duKGRldikpCisJCQlkZXZpbmZvKGRldiwKKwkJCQkic3RvcCBmYWlsICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXMiLAorCQkJCXJldHZhbCwKKwkJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJCQlpbmZvLT5kZXNjcmlwdGlvbik7CiAJfQotCWRldi0+d2FpdCA9IE5VTEw7Ci0JcmVtb3ZlX3dhaXRfcXVldWUgKCZ1bmxpbmtfd2FrZXVwLCAmd2FpdCk7CisKKwlpZiAoIShpbmZvLT5mbGFncyAmIEZMQUdfQVZPSURfVU5MSU5LX1VSQlMpKSB7CisJCS8qIGVuc3VyZSB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgdXJicyAqLworCQlhZGRfd2FpdF9xdWV1ZSgmdW5saW5rX3dha2V1cCwgJndhaXQpOworCQlkZXYtPndhaXQgPSAmdW5saW5rX3dha2V1cDsKKwkJdGVtcCA9IHVubGlua191cmJzKGRldiwgJmRldi0+dHhxKSArCisJCQl1bmxpbmtfdXJicyhkZXYsICZkZXYtPnJ4cSk7CisKKwkJLyogbWF5YmUgd2FpdCBmb3IgZGVsZXRpb25zIHRvIGZpbmlzaC4gKi8KKwkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmRldi0+cnhxKQorCQkJCSYmICFza2JfcXVldWVfZW1wdHkoJmRldi0+dHhxKQorCQkJCSYmICFza2JfcXVldWVfZW1wdHkoJmRldi0+ZG9uZSkpIHsKKwkJCW1zbGVlcChVTkxJTktfVElNRU9VVF9NUyk7CisJCQlpZiAobmV0aWZfbXNnX2lmZG93bihkZXYpKQorCQkJCWRldmRiZyhkZXYsICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9ucyIsCisJCQkJCXRlbXApOworCQl9CisJCWRldi0+d2FpdCA9IE5VTEw7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZ1bmxpbmtfd2FrZXVwLCAmd2FpdCk7CisJfQogCiAJdXNiX2tpbGxfdXJiKGRldi0+aW50ZXJydXB0KTsKIAorCXVzYm5ldF9wdXJnZV9wYXVzZWRfcnhxKGRldik7CisKIAkvKiBkZWZlcnJlZCB3b3JrICh0YXNrLCB0aW1lciwgc29mdGlycSkgbXVzdCBhbHNvIHN0b3AuCiAJICogY2FuJ3QgZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSB1bnRpbCB3ZSBkcm9wIHJ0bmwgKGxhdGVyKSwKIAkgKiBlbHNlIHdvcmtlcnMgY291bGQgZGVhZGxvY2s7IHNvIG1ha2Ugd29ya2VycyBhIE5PUC4KQEAgLTc5NCw3ICs4NTQsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NldF9tc2dsZXZlbCk7CiAKIC8qIGRyaXZlcnMgbWF5IG92ZXJyaWRlIGRlZmF1bHQgZXRodG9vbF9vcHMgaW4gdGhlaXIgYmluZCgpIHJvdXRpbmUgKi8KLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdXNibmV0X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB1c2JuZXRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSB1c2JuZXRfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gdXNibmV0X3NldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsJCT0gdXNibmV0X2dldF9saW5rLApAQCAtOTQ3LDE1ICsxMDA3LDE2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLWludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK25ldGRldl90eF90IHVzYm5ldF9zdGFydF94bWl0IChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGg7Ci0JaW50CQkJcmV0dmFsID0gTkVUX1hNSVRfU1VDQ0VTUzsKIAlzdHJ1Y3QgdXJiCQkqdXJiID0gTlVMTDsKIAlzdHJ1Y3Qgc2tiX2RhdGEJCSplbnRyeTsKIAlzdHJ1Y3QgZHJpdmVyX2luZm8JKmluZm8gPSBkZXYtPmRyaXZlcl9pbmZvOwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludCByZXR2YWw7CiAKIAkvLyBzb21lIGRldmljZXMgd2FudCBmdW5reSBVU0ItbGV2ZWwgZnJhbWluZywgZm9yCiAJLy8gd2luMzIgZHJpdmVyICh1c3VhbGx5KSBhbmQvb3IgaGFyZHdhcmUgcXVpcmtzCkBAIC0xMDE5LDcgKzEwODAsNiBAQAogCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKIAkJCWRldmRiZyAoZGV2LCAiZHJvcCwgY29kZSAlZCIsIHJldHZhbCk7CiBkcm9wOgotCQlyZXR2YWwgPSBORVRfWE1JVF9TVUNDRVNTOwogCQlkZXYtPm5ldC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlpZiAoc2tiKQogCQkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7CkBAIC0xMDI4LDcgKzEwODgsNyBAQAogCQlkZXZkYmcgKGRldiwgIj4gdHgsIGxlbiAlZCwgdHlwZSAweCV4IiwKIAkJCWxlbmd0aCwgc2tiLT5wcm90b2NvbCk7CiAJfQotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdGFydF94bWl0KTsKIApAQCAtMTA5NSw3ICsxMTU1LDYgQEAKIH0KIAogCi0MCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBVU0IgRGV2aWNlIERyaXZlciBzdXBwb3J0CkBAIC0xMTkyLDYgKzEyNTEsNyBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZkZXYtPnJ4cSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCAoJmRldi0+dHhxKTsKIAlza2JfcXVldWVfaGVhZF9pbml0ICgmZGV2LT5kb25lKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZkZXYtPnJ4cV9wYXVzZSk7CiAJZGV2LT5iaC5mdW5jID0gdXNibmV0X2JoOwogCWRldi0+YmguZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAJSU5JVF9XT1JLICgmZGV2LT5rZXZlbnQsIGtldmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMTA5N2M3Mi4uYWRlNWIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdmV0aF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdmV0aF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IHZldGhfZ2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSB2ZXRoX2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLApAQCAtMTQ4LDcgKzE0OCw3IEBACiAgKiB4bWl0CiAgKi8KIAotc3RhdGljIGludCB2ZXRoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB2ZXRoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmN2ID0gTlVMTDsKIAlzdHJ1Y3QgdmV0aF9wcml2ICpwcml2LCAqcmN2X3ByaXY7CkBAIC0xNzEsNiArMTcxLDcgQEAKIAlpZiAoc2tiLT5sZW4gPiAocmN2LT5tdHUgKyBNVFVfUEFEKSkKIAkJZ290byByeF9kcm9wOwogCisgICAgICAgIHNrYi0+dHN0YW1wLnR2NjQgPSAwOwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByY3YpOwogCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OT19DU1VNKQpAQCAtMTg5LDE3ICsxOTAsMTcgQEAKIAlyY3Zfc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAogCW5ldGlmX3J4KHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIHJ4X2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmN2X3N0YXRzLT5yeF9kcm9wcGVkKys7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggOTM0Zjc2Ny4uMWZkNzA1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTQwOCw3ICs0MDgsOCBAQAogc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSk7CiBzdGF0aWMgaW50ICByaGluZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcmhpbmVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgIHJoaW5lX3N0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IHJoaW5lX3N0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCByaGluZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKIHN0YXRpYyB2b2lkIHJoaW5lX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCByaGluZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpOwpAQCAtMTIxMyw3ICsxMjE0LDggQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgcmhpbmVfc3RhcnRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCByaGluZV9zdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CkBAIC0xMjI3LDcgKzEyMjksNyBAQAogCWVudHJ5ID0gcnAtPmN1cl90eCAlIFRYX1JJTkdfU0laRTsKIAogCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJcnAtPnR4X3NrYnVmZltlbnRyeV0gPSBza2I7CiAKQEAgLTEyMzksNyArMTI0MSw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlycC0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCiAJCS8qIFBhZGRpbmcgaXMgbm90IGNvcGllZCBhbmQgc28gbXVzdCBiZSByZWRvbmUuICovCkBAIC0xMjg3LDcgKzEyODksNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZC5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHJwLT5jdXJfdHgtMSwgZW50cnkpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBhbGwgb2YgdGhlIFJ4IHRocmVhZCB3b3JrIGFuZCBjbGVhbnMgdXAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggY2VlMDhhMS4uZTA0ZTViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTYxLDkgKzYxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CkBAIC04MSw3ICs4MSw3IEBACiAjaW5jbHVkZSAidmlhLXZlbG9jaXR5LmgiCiAKIAotc3RhdGljIGludCB2ZWxvY2l0eV9uaWNzID0gMDsKK3N0YXRpYyBpbnQgdmVsb2NpdHlfbmljczsKIHN0YXRpYyBpbnQgbXNnbGV2ZWwgPSBNU0dfTEVWRUxfSU5GTzsKIAogLyoqCkBAIC05Miw4ICs5Miw3IEBACiAgKglGZXRjaCB0aGUgbWFzayBiaXRzIG9mIHRoZSBzZWxlY3RlZCBDQU0gYW5kIHN0b3JlIHRoZW0gaW50byB0aGUKICAqCXByb3ZpZGVkIG1hc2sgYnVmZmVyLgogICovCi0KLXN0YXRpYyB2b2lkIG1hY19nZXRfY2FtX21hc2soc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzLCB1OCAqIG1hc2spCitzdGF0aWMgdm9pZCBtYWNfZ2V0X2NhbV9tYXNrKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzLCB1OCAqbWFzaykKIHsKIAlpbnQgaTsKIApAQCAtMTExLDcgKzExMCw2IEBACiAKIAkvKiBTZWxlY3QgbWFyICovCiAJQllURV9SRUdfQklUU19TRVQoQ0FNQ1JfUFNfTUFSLCBDQU1DUl9QUzEgfCBDQU1DUl9QUzAsICZyZWdzLT5DQU1DUik7Ci0KIH0KIAogCkBAIC0xMjIsOCArMTIwLDcgQEAKICAqCiAgKglTdG9yZSBhIG5ldyBtYXNrIGludG8gYSBDQU0KICAqLwotCi1zdGF0aWMgdm9pZCBtYWNfc2V0X2NhbV9tYXNrKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncywgdTggKiBtYXNrKQorc3RhdGljIHZvaWQgbWFjX3NldF9jYW1fbWFzayhzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgdTggKm1hc2spCiB7CiAJaW50IGk7CiAJLyogU2VsZWN0IENBTSBtYXNrICovCkBAIC0xMzEsOSArMTI4LDkgQEAKIAogCXdyaXRlYihDQU1BRERSX0NBTUVOLCAmcmVncy0+Q0FNQUREUik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJd3JpdGViKCptYXNrKyssICYocmVncy0+TUFSQ0FNW2ldKSk7Ci0JfQorCiAJLyogZGlzYWJsZSBDQU1FTiAqLwogCXdyaXRlYigwLCAmcmVncy0+Q0FNQUREUik7CiAKQEAgLTE0MSw3ICsxMzgsNyBAQAogCUJZVEVfUkVHX0JJVFNfU0VUKENBTUNSX1BTX01BUiwgQ0FNQ1JfUFMxIHwgQ0FNQ1JfUFMwLCAmcmVncy0+Q0FNQ1IpOwogfQogCi1zdGF0aWMgdm9pZCBtYWNfc2V0X3ZsYW5fY2FtX21hc2soc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzLCB1OCAqIG1hc2spCitzdGF0aWMgdm9pZCBtYWNfc2V0X3ZsYW5fY2FtX21hc2soc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MsIHU4ICptYXNrKQogewogCWludCBpOwogCS8qIFNlbGVjdCBDQU0gbWFzayAqLwpAQCAtMTQ5LDkgKzE0Niw5IEBACiAKIAl3cml0ZWIoQ0FNQUREUl9DQU1FTiB8IENBTUFERFJfVkNBTVNMLCAmcmVncy0+Q0FNQUREUik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJd3JpdGViKCptYXNrKyssICYocmVncy0+TUFSQ0FNW2ldKSk7Ci0JfQorCiAJLyogZGlzYWJsZSBDQU1FTiAqLwogCXdyaXRlYigwLCAmcmVncy0+Q0FNQUREUik7CiAKQEAgLTE2Nyw4ICsxNjQsNyBAQAogICoKICAqCUxvYWQgYW4gYWRkcmVzcyBvciB2bGFuIHRhZyBpbnRvIGEgQ0FNCiAgKi8KLQotc3RhdGljIHZvaWQgbWFjX3NldF9jYW0oc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzLCBpbnQgaWR4LCBjb25zdCB1OCAqYWRkcikKK3N0YXRpYyB2b2lkIG1hY19zZXRfY2FtKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzLCBpbnQgaWR4LCBjb25zdCB1OCAqYWRkcikKIHsKIAlpbnQgaTsKIApAQCAtMTc5LDkgKzE3NSw5IEBACiAKIAl3cml0ZWIoQ0FNQUREUl9DQU1FTiB8IGlkeCwgJnJlZ3MtPkNBTUFERFIpOwogCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCXdyaXRlYigqYWRkcisrLCAmKHJlZ3MtPk1BUkNBTVtpXSkpOwotCX0KKwogCUJZVEVfUkVHX0JJVFNfT04oQ0FNQ1JfQ0FNV1IsICZyZWdzLT5DQU1DUik7CiAKIAl1ZGVsYXkoMTApOwpAQCAtMTkyLDcgKzE4OCw3IEBACiAJQllURV9SRUdfQklUU19TRVQoQ0FNQ1JfUFNfTUFSLCBDQU1DUl9QUzEgfCBDQU1DUl9QUzAsICZyZWdzLT5DQU1DUik7CiB9CiAKLXN0YXRpYyB2b2lkIG1hY19zZXRfdmxhbl9jYW0oc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzLCBpbnQgaWR4LAorc3RhdGljIHZvaWQgbWFjX3NldF92bGFuX2NhbShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgaW50IGlkeCwKIAkJCSAgICAgY29uc3QgdTggKmFkZHIpCiB7CiAKQEAgLTIyMyw4ICsyMTksNyBAQAogICoJcmVzZXQgdGhlIFdha2Ugb24gbGFuIGZlYXR1cmVzLiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgcmVzdG9yZQogICoJdGhlIHJlc3Qgb2YgdGhlIGxvZ2ljIGZyb20gdGhlIHJlc3VsdCBvZiBzbGVlcC93YWtldXAKICAqLwotCi1zdGF0aWMgdm9pZCBtYWNfd29sX3Jlc2V0KHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncykKK3N0YXRpYyB2b2lkIG1hY193b2xfcmVzZXQoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MpCiB7CiAKIAkvKiBUdXJuIG9mZiBTV1BUQUcgcmlnaHQgYWZ0ZXIgbGVhdmluZyBwb3dlciBtb2RlICovCkBAIC0yNDIsNyArMjM3LDYgQEAKIAl3cml0ZXcoMHhGRkZGLCAmcmVncy0+V09MU1JDbHIpOwogfQogCi1zdGF0aWMgaW50IHZlbG9jaXR5X21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZlbG9jaXR5X2V0aHRvb2xfb3BzOwogCiAvKgpAQCAtMjUzLDEwICsyNDcsMTAgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVklBIE5ldHdvcmtpbmcgVmVsb2NpdHkgRmFtaWx5IEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlciBEcml2ZXIiKTsKIAotI2RlZmluZSBWRUxPQ0lUWV9QQVJBTShOLEQpIFwKLSAgICAgICAgc3RhdGljIGludCBOW01BWF9VTklUU109T1BUSU9OX0RFRkFVTFQ7XAorI2RlZmluZSBWRUxPQ0lUWV9QQVJBTShOLCBEKSBcCisJc3RhdGljIGludCBOW01BWF9VTklUU10gPSBPUFRJT05fREVGQVVMVDtcCiAJbW9kdWxlX3BhcmFtX2FycmF5KE4sIGludCwgTlVMTCwgMCk7IFwKLSAgICAgICAgTU9EVUxFX1BBUk1fREVTQyhOLCBEKTsKKwlNT0RVTEVfUEFSTV9ERVNDKE4sIEQpOwogCiAjZGVmaW5lIFJYX0RFU0NfTUlOICAgICA2NAogI2RlZmluZSBSWF9ERVNDX01BWCAgICAgMjU1CkBAIC0zMzYsOCArMzMwLDggQEAKICAgIDQ6IGluZGljYXRlIDEwTWJwcyBmdWxsIGR1cGxleCBtb2RlCiAKICAgIE5vdGU6Ci0gICAgICAgIGlmIEVFUFJPTSBoYXZlIGJlZW4gc2V0IHRvIHRoZSBmb3JjZSBtb2RlLCB0aGlzIG9wdGlvbiBpcyBpZ25vcmVkCi0gICAgICAgICAgICBieSBkcml2ZXIuCisgICBpZiBFRVBST00gaGF2ZSBiZWVuIHNldCB0byB0aGUgZm9yY2UgbW9kZSwgdGhpcyBvcHRpb24gaXMgaWdub3JlZAorICAgYnkgZHJpdmVyLgogKi8KIFZFTE9DSVRZX1BBUkFNKHNwZWVkX2R1cGxleCwgIlNldHRpbmcgdGhlIHNwZWVkIGFuZCBkdXBsZXggbW9kZSIpOwogCkBAIC0zNzAsNzYgKzM2NCwxNCBAQAogbW9kdWxlX3BhcmFtKHJ4X2NvcHlicmVhaywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocnhfY29weWJyZWFrLCAiQ29weSBicmVha3BvaW50IGZvciBjb3B5LW9ubHktdGlueS1mcmFtZXMiKTsKIAotc3RhdGljIHZvaWQgdmVsb2NpdHlfaW5pdF9pbmZvKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdmVsb2NpdHlfaW5mb190YmwgKmluZm8pOwotc3RhdGljIGludCB2ZWxvY2l0eV9nZXRfcGNpX2luZm8oc3RydWN0IHZlbG9jaXR5X2luZm8gKiwgc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotc3RhdGljIHZvaWQgdmVsb2NpdHlfcHJpbnRfaW5mbyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cik7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG10dSk7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaXJxcmV0dXJuX3QgdmVsb2NpdHlfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwotc3RhdGljIHZvaWQgdmVsb2NpdHlfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp2ZWxvY2l0eV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIGludCB2ZWxvY2l0eV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgdmVsb2NpdHlfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqLCBpbnQgaWR4KTsKLXN0YXRpYyBpbnQgdmVsb2NpdHlfYWxsb2NfcnhfYnVmKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICosIGludCBpZHgpOwotc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV9yZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKTsKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfdHhfYnVmKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqKTsKLXN0YXRpYyBpbnQgdmVsb2NpdHlfc29mdF9yZXNldChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cik7Ci1zdGF0aWMgdm9pZCBtaWlfaW5pdChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIG1paV9zdGF0dXMpOwotc3RhdGljIHUzMiB2ZWxvY2l0eV9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X29wdF9tZWRpYV9tb2RlKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKTsKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3ByaW50X2xpbmtfc3RhdHVzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKTsKLXN0YXRpYyB2b2lkIHNhZmVfZGlzYWJsZV9taWlfYXV0b3BvbGwoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzKTsKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3NodXRkb3duKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKTsKLXN0YXRpYyB2b2lkIGVuYWJsZV9mbG93X2NvbnRyb2xfYWJpbGl0eShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cik7Ci1zdGF0aWMgdm9pZCBlbmFibGVfbWlpX2F1dG9wb2xsKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyk7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X21paV9yZWFkKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICosIHU4IGJ5SWR4LCB1MTYgKiBwZGF0YSk7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X21paV93cml0ZShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqLCB1OCBieU1paUFkZHIsIHUxNiBkYXRhKTsKLXN0YXRpYyB1MzIgbWlpX2NoZWNrX21lZGlhX21vZGUoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzKTsKLXN0YXRpYyB1MzIgY2hlY2tfY29ubmVjdGlvbl90eXBlKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyk7Ci1zdGF0aWMgaW50IHZlbG9jaXR5X3NldF9tZWRpYV9tb2RlKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCB1MzIgbWlpX3N0YXR1cyk7Ci0KICNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCB2ZWxvY2l0eV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCB2ZWxvY2l0eV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlbG9jaXR5X2Rldl9saXN0X2xvY2spOwogc3RhdGljIExJU1RfSEVBRCh2ZWxvY2l0eV9kZXZfbGlzdCk7Ci0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX0lORVQpCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbm90aWZpY2F0aW9uLCB2b2lkICpwdHIpOwotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHZlbG9jaXR5X2luZXRhZGRyX25vdGlmaWVyID0gewotICAgICAgLm5vdGlmaWVyX2NhbGwJPSB2ZWxvY2l0eV9uZXRkZXZfZXZlbnQsCi19OwotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9yZWdpc3Rlcl9ub3RpZmllcih2b2lkKQotewotCXJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZ2ZWxvY2l0eV9pbmV0YWRkcl9ub3RpZmllcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3VucmVnaXN0ZXJfbm90aWZpZXIodm9pZCkKLXsKLQl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZ2ZWxvY2l0eV9pbmV0YWRkcl9ub3RpZmllcik7Ci19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgdmVsb2NpdHlfcmVnaXN0ZXJfbm90aWZpZXIoKQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgdmVsb2NpdHlfdW5yZWdpc3Rlcl9ub3RpZmllcigpCWRvIHt9IHdoaWxlICgwKQotCiAjZW5kaWYKIAogLyoKICAqCUludGVybmFsIGJvYXJkIHZhcmlhbnRzLiBBdCB0aGUgbW9tZW50IHdlIGhhdmUgb25seSBvbmUKICAqLwotCiBzdGF0aWMgc3RydWN0IHZlbG9jaXR5X2luZm9fdGJsIGNoaXBfaW5mb190YWJsZVtdID0gewogCXtDSElQX1RZUEVfVlQ2MTEwLCAiVklBIE5ldHdvcmtpbmcgVmVsb2NpdHkgRmFtaWx5IEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlciIsIDEsIDB4MDBGRkZGRkZVTH0sCiAJeyB9CkBAIC00NDksNyArMzgxLDYgQEAKICAqCURlc2NyaWJlIHRoZSBQQ0kgZGV2aWNlIGlkZW50aWZpZXJzIHRoYXQgd2Ugc3VwcG9ydCBpbiB0aGlzCiAgKglkZXZpY2UgZHJpdmVyLiBVc2VkIGZvciBob3RwbHVnIGF1dG9sb2FkaW5nLgogICovCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2ZWxvY2l0eV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV82MTJYKSB9LAogCXsgfQpAQCAtNDY0LDcgKzM5NSw2IEBACiAgKglHaXZlbiBhIGNoaXAgaWRlbnRpZmllciByZXR1cm4gYSBzdWl0YWJsZSBkZXNjcmlwdGlvbi4gUmV0dXJucwogICoJYSBwb2ludGVyIGEgc3RhdGljIHN0cmluZyB2YWxpZCB3aGlsZSB0aGUgZHJpdmVyIGlzIGxvYWRlZC4KICAqLwotCiBzdGF0aWMgY29uc3QgY2hhciBfX2RldmluaXQgKmdldF9jaGlwX25hbWUoZW51bSBjaGlwX3R5cGUgY2hpcF9pZCkKIHsKIAlpbnQgaTsKQEAgLTQ4Miw3ICs0MTIsNiBAQAogICoJdW5sb2FkIGZvciBlYWNoIGFjdGl2ZSBkZXZpY2UgdGhhdCBpcyBwcmVzZW50LiBEaXNjb25uZWN0cwogICoJdGhlIGRldmljZSBmcm9tIHRoZSBuZXR3b3JrIGxheWVyIGFuZCBmcmVlcyBhbGwgdGhlIHJlc291cmNlcwogICovCi0KIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2ZWxvY2l0eV9yZW1vdmUxKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC01MjAsNyArNDQ5LDYgQEAKICAqCWFsbCB0aGUgdmVyaWZpY2F0aW9uIGFuZCBjaGVja2luZyBhcyB3ZWxsIGFzIHJlcG9ydGluZyBzbyB0aGF0CiAgKgl3ZSBkb24ndCBkdXBsaWNhdGUgY29kZSBmb3IgZWFjaCBvcHRpb24uCiAgKi8KLQogc3RhdGljIHZvaWQgX19kZXZpbml0IHZlbG9jaXR5X3NldF9pbnRfb3B0KGludCAqb3B0LCBpbnQgdmFsLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgZGVmLCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXZuYW1lKQogewogCWlmICh2YWwgPT0gLTEpCkBAIC01NDksOCArNDc3LDcgQEAKICAqCWFsbCB0aGUgdmVyaWZpY2F0aW9uIGFuZCBjaGVja2luZyBhcyB3ZWxsIGFzIHJlcG9ydGluZyBzbyB0aGF0CiAgKgl3ZSBkb24ndCBkdXBsaWNhdGUgY29kZSBmb3IgZWFjaCBvcHRpb24uCiAgKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHZlbG9jaXR5X3NldF9ib29sX29wdCh1MzIgKiBvcHQsIGludCB2YWwsIGludCBkZWYsIHUzMiBmbGFnLCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkZXZuYW1lKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHZlbG9jaXR5X3NldF9ib29sX29wdCh1MzIgKm9wdCwgaW50IHZhbCwgaW50IGRlZiwgdTMyIGZsYWcsIGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRldm5hbWUpCiB7CiAJKCpvcHQpICY9ICh+ZmxhZyk7CiAJaWYgKHZhbCA9PSAtMSkKQEAgLTU3NSw3ICs1MDIsNiBAQAogICoJVHVybiB0aGUgbW9kdWxlIGFuZCBjb21tYW5kIG9wdGlvbnMgaW50byBhIHNpbmdsZSBzdHJ1Y3R1cmUKICAqCWZvciB0aGUgY3VycmVudCBkZXZpY2UKICAqLwotCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdmVsb2NpdHlfZ2V0X29wdGlvbnMoc3RydWN0IHZlbG9jaXR5X29wdCAqb3B0cywgaW50IGluZGV4LCBjb25zdCBjaGFyICpkZXZuYW1lKQogewogCkBAIC02MDEsMTAgKzUyNyw5IEBACiAgKglJbml0aWFsaXplIHRoZSBjb250ZW50IGFkZHJlc3NhYmxlIG1lbW9yeSB1c2VkIGZvciBmaWx0ZXJzLiBMb2FkCiAgKglhcHByb3ByaWF0ZWx5IGFjY29yZGluZyB0byB0aGUgcHJlc2VuY2Ugb2YgVkxBTgogICovCi0KIHN0YXRpYyB2b2lkIHZlbG9jaXR5X2luaXRfY2FtX2ZpbHRlcihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKLQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOwogCiAJLyogVHVybiBvbiBNQ0ZHX1BRRU4sIHR1cm4gb2ZmIE1DRkdfUlRHT1BUICovCiAJV09SRF9SRUdfQklUU19TRVQoTUNGR19QUUVOLCBNQ0ZHX1JUR09QVCwgJnJlZ3MtPk1DRkcpOwpAQCAtNjQ3LDE5ICs1NzIsMTkgQEAKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICAgICAgc3Bpbl9sb2NrX2lycSgmdnB0ci0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmdnB0ci0+bG9jayk7CiAJdmVsb2NpdHlfaW5pdF9jYW1fZmlsdGVyKHZwdHIpOwotICAgICAgICBzcGluX3VubG9ja19pcnEoJnZwdHItPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdnB0ci0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHZlbG9jaXR5X3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotICAgICAgICBzcGluX2xvY2tfaXJxKCZ2cHRyLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZ2cHRyLT5sb2NrKTsKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UodnB0ci0+dmxncnAsIHZpZCwgTlVMTCk7CiAJdmVsb2NpdHlfaW5pdF9jYW1fZmlsdGVyKHZwdHIpOwotICAgICAgICBzcGluX3VubG9ja19pcnEoJnZwdHItPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdnB0ci0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHZlbG9jaXR5X2luaXRfcnhfcmluZ19pbmRleGVzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQpAQCAtNjc0LDExICs1OTksMTAgQEAKICAqCVJlc2V0IHRoZSBvd25lcnNoaXAgYW5kIHN0YXR1cyBmb3IgdGhlIHJlY2VpdmUgcmluZyBzaWRlLgogICoJSGFuZCBhbGwgdGhlIHJlY2VpdmUgcXVldWUgdG8gdGhlIE5JQy4KICAqLwotCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9yeF9yZXNldChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKIAotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CiAJaW50IGk7CiAKIAl2ZWxvY2l0eV9pbml0X3J4X3JpbmdfaW5kZXhlcyh2cHRyKTsKQEAgLTY5Niw2ICs2MjAsNjQ3IEBACiB9CiAKIC8qKgorICoJdmVsb2NpdHlfZ2V0X29wdF9tZWRpYV9tb2RlCS0JZ2V0IG1lZGlhIHNlbGVjdGlvbgorICoJQHZwdHI6IHZlbG9jaXR5IGFkYXB0ZXIKKyAqCisgKglHZXQgdGhlIG1lZGlhIG1vZGUgc3RvcmVkIGluIEVFUFJPTSBvciBtb2R1bGUgb3B0aW9ucyBhbmQgbG9hZAorICoJbWlpX3N0YXR1cyBhY2NvcmRpbmdseS4gVGhlIHJlcXVlc3RlZCBsaW5rIHN0YXRlIGluZm9ybWF0aW9uCisgKglpcyBhbHNvIHJldHVybmVkLgorICovCitzdGF0aWMgdTMyIHZlbG9jaXR5X2dldF9vcHRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwl1MzIgc3RhdHVzID0gMDsKKworCXN3aXRjaCAodnB0ci0+b3B0aW9ucy5zcGRfZHB4KSB7CisJY2FzZSBTUERfRFBYX0FVVE86CisJCXN0YXR1cyA9IFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFOworCQlicmVhazsKKwljYXNlIFNQRF9EUFhfMTAwX0ZVTEw6CisJCXN0YXR1cyA9IFZFTE9DSVRZX1NQRUVEXzEwMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMOworCQlicmVhazsKKwljYXNlIFNQRF9EUFhfMTBfRlVMTDoKKwkJc3RhdHVzID0gVkVMT0NJVFlfU1BFRURfMTAgfCBWRUxPQ0lUWV9EVVBMRVhfRlVMTDsKKwkJYnJlYWs7CisJY2FzZSBTUERfRFBYXzEwMF9IQUxGOgorCQlzdGF0dXMgPSBWRUxPQ0lUWV9TUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2UgU1BEX0RQWF8xMF9IQUxGOgorCQlzdGF0dXMgPSBWRUxPQ0lUWV9TUEVFRF8xMDsKKwkJYnJlYWs7CisJfQorCXZwdHItPm1paV9zdGF0dXMgPSBzdGF0dXM7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKglzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsCS0JYXV0b3BvbGwgb2ZmCisgKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCisgKgorICoJVHVybiBvZmYgdGhlIGF1dG9wb2xsIGFuZCB3YWl0IGZvciBpdCB0byBkaXNhYmxlIG9uIHRoZSBjaGlwCisgKi8KK3N0YXRpYyB2b2lkIHNhZmVfZGlzYWJsZV9taWlfYXV0b3BvbGwoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MpCit7CisJdTE2IHd3OworCisJLyogIHR1cm4gb2ZmIE1BVVRPICovCisJd3JpdGViKDAsICZyZWdzLT5NSUlDUik7CisJZm9yICh3dyA9IDA7IHd3IDwgV19NQVhfVElNRU9VVDsgd3crKykgeworCQl1ZGVsYXkoMSk7CisJCWlmIChCWVRFX1JFR19CSVRTX0lTX09OKE1JSVNSX01JRExFLCAmcmVncy0+TUlJU1IpKQorCQkJYnJlYWs7CisJfQorfQorCisvKioKKyAqCWVuYWJsZV9taWlfYXV0b3BvbGwJLQl0dXJuIG9uIGF1dG9wb2xsaW5nCisgKglAcmVnczogdmVsb2NpdHkgcmVnaXN0ZXJzCisgKgorICoJRW5hYmxlIHRoZSBNSUkgbGluayBzdGF0dXMgYXV0b3BvbGwgZmVhdHVyZSBvbiB0aGUgVmVsb2NpdHkKKyAqCWhhcmR3YXJlLiBXYWl0IGZvciBpdCB0byBlbmFibGUuCisgKi8KK3N0YXRpYyB2b2lkIGVuYWJsZV9taWlfYXV0b3BvbGwoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MpCit7CisJaW50IGlpOworCisJd3JpdGViKDAsICYocmVncy0+TUlJQ1IpKTsKKwl3cml0ZWIoTUlJQURSX1NXTVBMLCAmcmVncy0+TUlJQURSKTsKKworCWZvciAoaWkgPSAwOyBpaSA8IFdfTUFYX1RJTUVPVVQ7IGlpKyspIHsKKwkJdWRlbGF5KDEpOworCQlpZiAoQllURV9SRUdfQklUU19JU19PTihNSUlTUl9NSURMRSwgJnJlZ3MtPk1JSVNSKSkKKwkJCWJyZWFrOworCX0KKworCXdyaXRlYihNSUlDUl9NQVVUTywgJnJlZ3MtPk1JSUNSKTsKKworCWZvciAoaWkgPSAwOyBpaSA8IFdfTUFYX1RJTUVPVVQ7IGlpKyspIHsKKwkJdWRlbGF5KDEpOworCQlpZiAoIUJZVEVfUkVHX0JJVFNfSVNfT04oTUlJU1JfTUlETEUsICZyZWdzLT5NSUlTUikpCisJCQlicmVhazsKKwl9CisKK30KKworLyoqCisgKgl2ZWxvY2l0eV9taWlfcmVhZAktCXJlYWQgTUlJIGRhdGEKKyAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKKyAqCUBpbmRleDogTUlJIHJlZ2lzdGVyIGluZGV4CisgKglAZGF0YTogYnVmZmVyIGZvciByZWNlaXZlZCBkYXRhCisgKgorICoJUGVyZm9ybSBhIHNpbmdsZSByZWFkIG9mIGFuIE1JSSAxNmJpdCByZWdpc3Rlci4gUmV0dXJucyB6ZXJvCisgKglvbiBzdWNjZXNzIG9yIC1FVElNRURPVVQgaWYgdGhlIFBIWSBkaWQgbm90IHJlc3BvbmQuCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfbWlpX3JlYWQoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MsIHU4IGluZGV4LCB1MTYgKmRhdGEpCit7CisJdTE2IHd3OworCisJLyoKKwkgKglEaXNhYmxlIE1JSUNSX01BVVRPLCBzbyB0aGF0IG1paSBhZGRyIGNhbiBiZSBzZXQgbm9ybWFsbHkKKwkgKi8KKwlzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOworCisJd3JpdGViKGluZGV4LCAmcmVncy0+TUlJQURSKTsKKworCUJZVEVfUkVHX0JJVFNfT04oTUlJQ1JfUkNNRCwgJnJlZ3MtPk1JSUNSKTsKKworCWZvciAod3cgPSAwOyB3dyA8IFdfTUFYX1RJTUVPVVQ7IHd3KyspIHsKKwkJaWYgKCEocmVhZGIoJnJlZ3MtPk1JSUNSKSAmIE1JSUNSX1JDTUQpKQorCQkJYnJlYWs7CisJfQorCisJKmRhdGEgPSByZWFkdygmcmVncy0+TUlJREFUQSk7CisKKwllbmFibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOworCWlmICh3dyA9PSBXX01BWF9USU1FT1VUKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqCW1paV9jaGVja19tZWRpYV9tb2RlCS0JY2hlY2sgbWVkaWEgc3RhdGUKKyAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKKyAqCisgKglDaGVjayB0aGUgY3VycmVudCBNSUkgc3RhdHVzIGFuZCBkZXRlcm1pbmUgdGhlIGxpbmsgc3RhdHVzCisgKglhY2NvcmRpbmdseQorICovCitzdGF0aWMgdTMyIG1paV9jaGVja19tZWRpYV9tb2RlKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzKQoreworCXUzMiBzdGF0dXMgPSAwOworCXUxNiBBTkFSOworCisJaWYgKCFNSUlfUkVHX0JJVFNfSVNfT04oQk1TUl9MTkssIE1JSV9SRUdfQk1TUiwgcmVncykpCisJCXN0YXR1cyB8PSBWRUxPQ0lUWV9MSU5LX0ZBSUw7CisKKwlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEcxMDAwQ1JfMTAwMEZELCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQorCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTAwMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMOworCWVsc2UgaWYgKE1JSV9SRUdfQklUU19JU19PTihHMTAwMENSXzEwMDAsIE1JSV9SRUdfRzEwMDBDUiwgcmVncykpCisJCXN0YXR1cyB8PSAoVkVMT0NJVFlfU1BFRURfMTAwMCk7CisJZWxzZSB7CisJCXZlbG9jaXR5X21paV9yZWFkKHJlZ3MsIE1JSV9SRUdfQU5BUiwgJkFOQVIpOworCQlpZiAoQU5BUiAmIEFOQVJfVFhGRCkKKwkJCXN0YXR1cyB8PSAoVkVMT0NJVFlfU1BFRURfMTAwIHwgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpOworCQllbHNlIGlmIChBTkFSICYgQU5BUl9UWCkKKwkJCXN0YXR1cyB8PSBWRUxPQ0lUWV9TUEVFRF8xMDA7CisJCWVsc2UgaWYgKEFOQVIgJiBBTkFSXzEwRkQpCisJCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwIHwgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpOworCQllbHNlCisJCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwKTsKKwl9CisKKwlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEJNQ1JfQVVUTywgTUlJX1JFR19CTUNSLCByZWdzKSkgeworCQl2ZWxvY2l0eV9taWlfcmVhZChyZWdzLCBNSUlfUkVHX0FOQVIsICZBTkFSKTsKKwkJaWYgKChBTkFSICYgKEFOQVJfVFhGRCB8IEFOQVJfVFggfCBBTkFSXzEwRkQgfCBBTkFSXzEwKSkKKwkJICAgID09IChBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpIHsKKwkJCWlmIChNSUlfUkVHX0JJVFNfSVNfT04oRzEwMDBDUl8xMDAwIHwgRzEwMDBDUl8xMDAwRkQsIE1JSV9SRUdfRzEwMDBDUiwgcmVncykpCisJCQkJc3RhdHVzIHw9IFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9taWlfd3JpdGUJLQl3cml0ZSBNSUkgZGF0YQorICoJQHJlZ3M6IHZlbG9jaXR5IHJlZ2lzdGVycworICoJQGluZGV4OiBNSUkgcmVnaXN0ZXIgaW5kZXgKKyAqCUBkYXRhOiAxNmJpdCBkYXRhIGZvciB0aGUgTUlJIHJlZ2lzdGVyCisgKgorICoJUGVyZm9ybSBhIHNpbmdsZSB3cml0ZSB0byBhbiBNSUkgMTZiaXQgcmVnaXN0ZXIuIFJldHVybnMgemVybworICoJb24gc3VjY2VzcyBvciAtRVRJTUVET1VUIGlmIHRoZSBQSFkgZGlkIG5vdCByZXNwb25kLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X21paV93cml0ZShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgdTggbWlpX2FkZHIsIHUxNiBkYXRhKQoreworCXUxNiB3dzsKKworCS8qCisJICoJRGlzYWJsZSBNSUlDUl9NQVVUTywgc28gdGhhdCBtaWkgYWRkciBjYW4gYmUgc2V0IG5vcm1hbGx5CisJICovCisJc2FmZV9kaXNhYmxlX21paV9hdXRvcG9sbChyZWdzKTsKKworCS8qIE1JSSByZWcgb2Zmc2V0ICovCisJd3JpdGViKG1paV9hZGRyLCAmcmVncy0+TUlJQURSKTsKKwkvKiBzZXQgTUlJIGRhdGEgKi8KKwl3cml0ZXcoZGF0YSwgJnJlZ3MtPk1JSURBVEEpOworCisJLyogdHVybiBvbiBNSUlDUl9XQ01EICovCisJQllURV9SRUdfQklUU19PTihNSUlDUl9XQ01ELCAmcmVncy0+TUlJQ1IpOworCisJLyogV19NQVhfVElNRU9VVCBpcyB0aGUgdGltZW91dCBwZXJpb2QgKi8KKwlmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7CisJCXVkZWxheSg1KTsKKwkJaWYgKCEocmVhZGIoJnJlZ3MtPk1JSUNSKSAmIE1JSUNSX1dDTUQpKQorCQkJYnJlYWs7CisJfQorCWVuYWJsZV9taWlfYXV0b3BvbGwocmVncyk7CisKKwlpZiAod3cgPT0gV19NQVhfVElNRU9VVCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJc2V0X21paV9mbG93X2NvbnRyb2wJLQlmbG93IGNvbnRyb2wgc2V0dXAKKyAqCUB2cHRyOiB2ZWxvY2l0eSBpbnRlcmZhY2UKKyAqCisgKglTZXQgdXAgdGhlIGZsb3cgY29udHJvbCBvbiB0aGlzIGludGVyZmFjZSBhY2NvcmRpbmcgdG8KKyAqCXRoZSBzdXBwbGllZCB1c2VyL2VlcHJvbSBvcHRpb25zLgorICovCitzdGF0aWMgdm9pZCBzZXRfbWlpX2Zsb3dfY29udHJvbChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwkvKkVuYWJsZSBvciBEaXNhYmxlIFBBVVNFIGluIEFOQVIgKi8KKwlzd2l0Y2ggKHZwdHItPm9wdGlvbnMuZmxvd19jbnRsKSB7CisJY2FzZSBGTE9XX0NOVExfVFg6CisJCU1JSV9SRUdfQklUU19PRkYoQU5BUl9QQVVTRSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CisJCU1JSV9SRUdfQklUU19PTihBTkFSX0FTTURJUiwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CisJCWJyZWFrOworCisJY2FzZSBGTE9XX0NOVExfUlg6CisJCU1JSV9SRUdfQklUU19PTihBTkFSX1BBVVNFLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJTUlJX1JFR19CSVRTX09OKEFOQVJfQVNNRElSLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIEZMT1dfQ05UTF9UWF9SWDoKKwkJTUlJX1JFR19CSVRTX09OKEFOQVJfUEFVU0UsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9BU01ESVIsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlicmVhazsKKworCWNhc2UgRkxPV19DTlRMX0RJU0FCTEU6CisJCU1JSV9SRUdfQklUU19PRkYoQU5BUl9QQVVTRSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CisJCU1JSV9SRUdfQklUU19PRkYoQU5BUl9BU01ESVIsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qKgorICoJbWlpX3NldF9hdXRvX29uCQktCWF1dG9uZWdvdGlhdGUgb24KKyAqCUB2cHRyOiB2ZWxvY2l0eQorICoKKyAqCUVuYWJsZSBhdXRvbmVnb3RhdGlvbiBvbiB0aGlzIGludGVyZmFjZQorICovCitzdGF0aWMgdm9pZCBtaWlfc2V0X2F1dG9fb24oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJaWYgKE1JSV9SRUdfQklUU19JU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpKQorCQlNSUlfUkVHX0JJVFNfT04oQk1DUl9SRUFVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOworCWVsc2UKKwkJTUlJX1JFR19CSVRTX09OKEJNQ1JfQVVUTywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7Cit9CisKK3N0YXRpYyB1MzIgY2hlY2tfY29ubmVjdGlvbl90eXBlKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzKQoreworCXUzMiBzdGF0dXMgPSAwOworCXU4IFBIWVNSMDsKKwl1MTYgQU5BUjsKKwlQSFlTUjAgPSByZWFkYigmcmVncy0+UEhZU1IwKTsKKworCS8qCisJICAgaWYgKCEoUEhZU1IwICYgUEhZU1IwX0xJTktHRCkpCisJICAgc3RhdHVzfD1WRUxPQ0lUWV9MSU5LX0ZBSUw7CisJICovCisKKwlpZiAoUEhZU1IwICYgUEhZU1IwX0ZEUFgpCisJCXN0YXR1cyB8PSBWRUxPQ0lUWV9EVVBMRVhfRlVMTDsKKworCWlmIChQSFlTUjAgJiBQSFlTUjBfU1BERykKKwkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwMDA7CisJZWxzZSBpZiAoUEhZU1IwICYgUEhZU1IwX1NQRDEwKQorCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTA7CisJZWxzZQorCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTAwOworCisJaWYgKE1JSV9SRUdfQklUU19JU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgcmVncykpIHsKKwkJdmVsb2NpdHlfbWlpX3JlYWQocmVncywgTUlJX1JFR19BTkFSLCAmQU5BUik7CisJCWlmICgoQU5BUiAmIChBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpCisJCSAgICA9PSAoQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTApKSB7CisJCQlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEcxMDAwQ1JfMTAwMCB8IEcxMDAwQ1JfMTAwMEZELCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQorCQkJCXN0YXR1cyB8PSBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRTsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKworCisvKioKKyAqCXZlbG9jaXR5X3NldF9tZWRpYV9tb2RlCQktCXNldCBtZWRpYSBtb2RlCisgKglAbWlpX3N0YXR1czogb2xkIE1JSSBsaW5rIHN0YXRlCisgKgorICoJQ2hlY2sgdGhlIG1lZGlhIGxpbmsgc3RhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgZmxvdyBjb250cm9sCisgKglQSFkgYW5kIGFsc28gdmVsb2NpdHkgaGFyZHdhcmUgc2V0dXAgYWNjb3JkaW5nbHkuIEluIHBhcnRpY3VsYXIKKyAqCXdlIG5lZWQgdG8gc2V0IHVwIENEIHBvbGxpbmcgYW5kIGZyYW1lIGJ1cnN0aW5nLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X3NldF9tZWRpYV9tb2RlKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCB1MzIgbWlpX3N0YXR1cykKK3sKKwl1MzIgY3Vycl9zdGF0dXM7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKworCXZwdHItPm1paV9zdGF0dXMgPSBtaWlfY2hlY2tfbWVkaWFfbW9kZSh2cHRyLT5tYWNfcmVncyk7CisJY3Vycl9zdGF0dXMgPSB2cHRyLT5taWlfc3RhdHVzICYgKH5WRUxPQ0lUWV9MSU5LX0ZBSUwpOworCisJLyogU2V0IG1paSBsaW5rIHN0YXR1cyAqLworCXNldF9taWlfZmxvd19jb250cm9sKHZwdHIpOworCisJLyoKKwkgICBDaGVjayBpZiBuZXcgc3RhdHVzIGlzIGNvbnNpc2VudCB3aXRoIGN1cnJlbnQgc3RhdHVzCisJICAgaWYgKCgobWlpX3N0YXR1cyAmIGN1cnJfc3RhdHVzKSAmIFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFKQorCSAgIHx8IChtaWlfc3RhdHVzPT1jdXJyX3N0YXR1cykpIHsKKwkgICB2cHRyLT5taWlfc3RhdHVzPW1paV9jaGVja19tZWRpYV9tb2RlKHZwdHItPm1hY19yZWdzKTsKKwkgICB2cHRyLT5taWlfc3RhdHVzPWNoZWNrX2Nvbm5lY3Rpb25fdHlwZSh2cHRyLT5tYWNfcmVncyk7CisJICAgVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiVmVsb2NpdHkgbGluayBubyBjaGFuZ2VcbiIpOworCSAgIHJldHVybiAwOworCSAgIH0KKwkgKi8KKworCWlmIChQSFlJRF9HRVRfUEhZX0lEKHZwdHItPnBoeV9pZCkgPT0gUEhZSURfQ0lDQURBX0NTODIwMSkKKwkJTUlJX1JFR19CSVRTX09OKEFVWENSX01EUFBTLCBNSUlfUkVHX0FVWENSLCB2cHRyLT5tYWNfcmVncyk7CisKKwkvKgorCSAqCUlmIGNvbm5lY3Rpb24gdHlwZSBpcyBBVVRPCisJICovCisJaWYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRSkgeworCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICJWZWxvY2l0eSBpcyBBVVRPIG1vZGVcbiIpOworCQkvKiBjbGVhciBmb3JjZSBNQUMgbW9kZSBiaXQgKi8KKwkJQllURV9SRUdfQklUU19PRkYoQ0hJUEdDUl9GQ01PREUsICZyZWdzLT5DSElQR0NSKTsKKwkJLyogc2V0IGR1cGxleCBtb2RlIG9mIE1BQyBhY2NvcmRpbmcgdG8gZHVwbGV4IG1vZGUgb2YgTUlJICovCisJCU1JSV9SRUdfQklUU19PTihBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CisJCU1JSV9SRUdfQklUU19PTihHMTAwMENSXzEwMDBGRCB8IEcxMDAwQ1JfMTAwMCwgTUlJX1JFR19HMTAwMENSLCB2cHRyLT5tYWNfcmVncyk7CisJCU1JSV9SRUdfQklUU19PTihCTUNSX1NQRUVEMUcsIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOworCisJCS8qIGVuYWJsZSBBVVRPLU5FR08gbW9kZSAqLworCQltaWlfc2V0X2F1dG9fb24odnB0cik7CisJfSBlbHNlIHsKKwkJdTE2IEFOQVI7CisJCXU4IENISVBHQ1I7CisKKwkJLyoKKwkJICogMS4gaWYgaXQncyAzMTE5LCBkaXNhYmxlIGZyYW1lIGJ1cnN0aW5nIGluIGhhbGZkdXBsZXggbW9kZQorCQkgKiAgICBhbmQgZW5hYmxlIGl0IGluIGZ1bGxkdXBsZXggbW9kZQorCQkgKiAyLiBzZXQgY29ycmVjdCBNSUkvR01JSSBhbmQgaGFsZi9mdWxsIGR1cGxleCBtb2RlIGluIENISVBHQ1IKKwkJICogMy4gb25seSBlbmFibGUgQ0QgaGVhcnQgYmVhdCBjb3VudGVyIGluIDEwSEQgbW9kZQorCQkgKi8KKworCQkvKiBzZXQgZm9yY2UgTUFDIG1vZGUgYml0ICovCisJCUJZVEVfUkVHX0JJVFNfT04oQ0hJUEdDUl9GQ01PREUsICZyZWdzLT5DSElQR0NSKTsKKworCQlDSElQR0NSID0gcmVhZGIoJnJlZ3MtPkNISVBHQ1IpOworCQlDSElQR0NSICY9IH5DSElQR0NSX0ZDR01JSTsKKworCQlpZiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKSB7CisJCQlDSElQR0NSIHw9IENISVBHQ1JfRkNGRFg7CisJCQl3cml0ZWIoQ0hJUEdDUiwgJnJlZ3MtPkNISVBHQ1IpOworCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAic2V0IFZlbG9jaXR5IHRvIGZvcmNlZCBmdWxsIG1vZGVcbiIpOworCQkJaWYgKHZwdHItPnJldl9pZCA8IFJFVl9JRF9WVDMyMTZfQTApCisJCQkJQllURV9SRUdfQklUU19PRkYoVENSX1RCMkJESVMsICZyZWdzLT5UQ1IpOworCQl9IGVsc2UgeworCQkJQ0hJUEdDUiAmPSB+Q0hJUEdDUl9GQ0ZEWDsKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgInNldCBWZWxvY2l0eSB0byBmb3JjZWQgaGFsZiBtb2RlXG4iKTsKKwkJCXdyaXRlYihDSElQR0NSLCAmcmVncy0+Q0hJUEdDUik7CisJCQlpZiAodnB0ci0+cmV2X2lkIDwgUkVWX0lEX1ZUMzIxNl9BMCkKKwkJCQlCWVRFX1JFR19CSVRTX09OKFRDUl9UQjJCRElTLCAmcmVncy0+VENSKTsKKwkJfQorCisJCU1JSV9SRUdfQklUU19PRkYoRzEwMDBDUl8xMDAwRkQgfCBHMTAwMENSXzEwMDAsIE1JSV9SRUdfRzEwMDBDUiwgdnB0ci0+bWFjX3JlZ3MpOworCisJCWlmICghKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkgJiYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMCkpCisJCQlCWVRFX1JFR19CSVRTX09GRihURVNUQ0ZHX0hCRElTLCAmcmVncy0+VEVTVENGRyk7CisJCWVsc2UKKwkJCUJZVEVfUkVHX0JJVFNfT04oVEVTVENGR19IQkRJUywgJnJlZ3MtPlRFU1RDRkcpOworCisJCS8qIE1JSV9SRUdfQklUU19PRkYoQk1DUl9TUEVFRDFHLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsgKi8KKwkJdmVsb2NpdHlfbWlpX3JlYWQodnB0ci0+bWFjX3JlZ3MsIE1JSV9SRUdfQU5BUiwgJkFOQVIpOworCQlBTkFSICY9ICh+KEFOQVJfVFhGRCB8IEFOQVJfVFggfCBBTkFSXzEwRkQgfCBBTkFSXzEwKSk7CisJCWlmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwKSB7CisJCQlpZiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQorCQkJCUFOQVIgfD0gQU5BUl9UWEZEOworCQkJZWxzZQorCQkJCUFOQVIgfD0gQU5BUl9UWDsKKwkJfSBlbHNlIHsKKwkJCWlmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpCisJCQkJQU5BUiB8PSBBTkFSXzEwRkQ7CisJCQllbHNlCisJCQkJQU5BUiB8PSBBTkFSXzEwOworCQl9CisJCXZlbG9jaXR5X21paV93cml0ZSh2cHRyLT5tYWNfcmVncywgTUlJX1JFR19BTkFSLCBBTkFSKTsKKwkJLyogZW5hYmxlIEFVVE8tTkVHTyBtb2RlICovCisJCW1paV9zZXRfYXV0b19vbih2cHRyKTsKKwkJLyogTUlJX1JFR19CSVRTX09OKEJNQ1JfQVVUTywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7ICovCisJfQorCS8qIHZwdHItPm1paV9zdGF0dXM9bWlpX2NoZWNrX21lZGlhX21vZGUodnB0ci0+bWFjX3JlZ3MpOyAqLworCS8qIHZwdHItPm1paV9zdGF0dXM9Y2hlY2tfY29ubmVjdGlvbl90eXBlKHZwdHItPm1hY19yZWdzKTsgKi8KKwlyZXR1cm4gVkVMT0NJVFlfTElOS19DSEFOR0U7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfcHJpbnRfbGlua19zdGF0dXMJLQlsaW5rIHN0YXR1cyByZXBvcnRpbmcKKyAqCUB2cHRyOiB2ZWxvY2l0eSB0byByZXBvcnQgb24KKyAqCisgKglUdXJuIHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgdmVsb2NpdHkgY2FyZCBpbnRvIGEga2VybmVsIGxvZworICoJZGVzY3JpcHRpb24gb2YgdGhlIG5ldyBsaW5rIHN0YXRlLCBkZXRhaWxpbmcgc3BlZWQgYW5kIGR1cGxleAorICoJc3RhdHVzCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3ByaW50X2xpbmtfc3RhdHVzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCisJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9MSU5LX0ZBSUwpIHsKKwkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX05PVElDRSAiJXM6IGZhaWxlZCB0byBkZXRlY3QgY2FibGUgbGlua1xuIiwgdnB0ci0+ZGV2LT5uYW1lKTsKKwl9IGVsc2UgaWYgKHZwdHItPm9wdGlvbnMuc3BkX2RweCA9PSBTUERfRFBYX0FVVE8pIHsKKwkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX05PVElDRSAiJXM6IExpbmsgYXV0by1uZWdvdGlhdGlvbiIsIHZwdHItPmRldi0+bmFtZSk7CisKKwkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMDAwKQorCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwMDBNIGJwcyIpOworCQllbHNlIGlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwKQorCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwME0gYnBzIik7CisJCWVsc2UKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxME0gYnBzIik7CisKKwkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBmdWxsIGR1cGxleFxuIik7CisJCWVsc2UKKwkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBoYWxmIGR1cGxleFxuIik7CisJfSBlbHNlIHsKKwkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX05PVElDRSAiJXM6IExpbmsgZm9yY2VkIiwgdnB0ci0+ZGV2LT5uYW1lKTsKKwkJc3dpdGNoICh2cHRyLT5vcHRpb25zLnNwZF9kcHgpIHsKKwkJY2FzZSBTUERfRFBYXzEwMF9IQUxGOgorCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwME0gYnBzIGhhbGYgZHVwbGV4XG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNQRF9EUFhfMTAwX0ZVTEw6CisJCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTAwTSBicHMgZnVsbCBkdXBsZXhcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgU1BEX0RQWF8xMF9IQUxGOgorCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwTSBicHMgaGFsZiBkdXBsZXhcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgU1BEX0RQWF8xMF9GVUxMOgorCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwTSBicHMgZnVsbCBkdXBsZXhcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoqCisgKgllbmFibGVfZmxvd19jb250cm9sX2FiaWxpdHkJLQlmbG93IGNvbnRyb2wKKyAqCUB2cHRyOiB2ZWxvaXR5IHRvIGNvbmZpZ3VyZQorICoKKyAqCVNldCB1cCBmbG93IGNvbnRyb2wgYWNjb3JkaW5nIHRvIHRoZSBmbG93IGNvbnRyb2wgb3B0aW9ucworICoJZGV0ZXJtaW5lZCBieSB0aGUgZWVwcm9tL2NvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGVuYWJsZV9mbG93X2NvbnRyb2xfYWJpbGl0eShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisKKwlzd2l0Y2ggKHZwdHItPm9wdGlvbnMuZmxvd19jbnRsKSB7CisKKwljYXNlIEZMT1dfQ05UTF9ERUZBVUxUOgorCQlpZiAoQllURV9SRUdfQklUU19JU19PTihQSFlTUjBfUlhGTEMsICZyZWdzLT5QSFlTUjApKQorCQkJd3JpdGVsKENSMF9GRFhSRkNFTiwgJnJlZ3MtPkNSMFNldCk7CisJCWVsc2UKKwkJCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBDbHIpOworCisJCWlmIChCWVRFX1JFR19CSVRTX0lTX09OKFBIWVNSMF9UWEZMQywgJnJlZ3MtPlBIWVNSMCkpCisJCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwU2V0KTsKKwkJZWxzZQorCQkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMENscik7CisJCWJyZWFrOworCisJY2FzZSBGTE9XX0NOVExfVFg6CisJCXdyaXRlbChDUjBfRkRYVEZDRU4sICZyZWdzLT5DUjBTZXQpOworCQl3cml0ZWwoQ1IwX0ZEWFJGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKKwkJYnJlYWs7CisKKwljYXNlIEZMT1dfQ05UTF9SWDoKKwkJd3JpdGVsKENSMF9GRFhSRkNFTiwgJnJlZ3MtPkNSMFNldCk7CisJCXdyaXRlbChDUjBfRkRYVEZDRU4sICZyZWdzLT5DUjBDbHIpOworCQlicmVhazsKKworCWNhc2UgRkxPV19DTlRMX1RYX1JYOgorCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwU2V0KTsKKwkJd3JpdGVsKENSMF9GRFhSRkNFTiwgJnJlZ3MtPkNSMFNldCk7CisJCWJyZWFrOworCisJY2FzZSBGTE9XX0NOVExfRElTQUJMRToKKwkJd3JpdGVsKENSMF9GRFhSRkNFTiwgJnJlZ3MtPkNSMENscik7CisJCXdyaXRlbChDUjBfRkRYVEZDRU4sICZyZWdzLT5DUjBDbHIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworfQorCisvKioKKyAqCXZlbG9jaXR5X3NvZnRfcmVzZXQJLQlzb2Z0IHJlc2V0CisgKglAdnB0cjogdmVsb2NpdHkgdG8gcmVzZXQKKyAqCisgKglLaWNrIG9mZiBhIHNvZnQgcmVzZXQgb2YgdGhlIHZlbG9jaXR5IGFkYXB0ZXIgYW5kIHRoZW4gcG9sbAorICoJdW50aWwgdGhlIHJlc2V0IHNlcXVlbmNlIGhhcyBjb21wbGV0ZWQgYmVmb3JlIHJldHVybmluZy4KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9zb2Z0X3Jlc2V0KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisJaW50IGkgPSAwOworCisJd3JpdGVsKENSMF9TRlJTVCwgJnJlZ3MtPkNSMFNldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgV19NQVhfVElNRU9VVDsgaSsrKSB7CisJCXVkZWxheSg1KTsKKwkJaWYgKCFEV09SRF9SRUdfQklUU19JU19PTihDUjBfU0ZSU1QsICZyZWdzLT5DUjBTZXQpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gV19NQVhfVElNRU9VVCkgeworCQl3cml0ZWwoQ1IwX0ZPUlNSU1QsICZyZWdzLT5DUjBTZXQpOworCQkvKiBGSVhNRTogUENJIFBPU1RJTkcgKi8KKwkJLyogZGVsYXkgMm1zICovCisJCW1kZWxheSgyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfc2V0X211bHRpCS0JZmlsdGVyIGxpc3QgY2hhbmdlIGNhbGxiYWNrCisgKglAZGV2OiBuZXR3b3JrIGRldmljZQorICoKKyAqCUNhbGxlZCBieSB0aGUgbmV0d29yayBsYXllciB3aGVuIHRoZSBmaWx0ZXIgbGlzdHMgbmVlZCB0byBjaGFuZ2UKKyAqCWZvciBhIHZlbG9jaXR5IGFkYXB0ZXIuIFJlbG9hZCB0aGUgQ0FNcyB3aXRoIHRoZSBuZXcgYWRkcmVzcworICoJZmlsdGVyIHJ1bGVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCXU4IHJ4X21vZGU7CisJaW50IGk7CisJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CS8qIFNldCBwcm9taXNjdW91cy4gKi8KKwkJd3JpdGVsKDB4ZmZmZmZmZmYsICZyZWdzLT5NQVJDQU1bMF0pOworCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVs0XSk7CisJCXJ4X21vZGUgPSAoUkNSX0FNIHwgUkNSX0FCIHwgUkNSX1BST00pOworCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiB2cHRyLT5tdWx0aWNhc3RfbGltaXQpCisJCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVswXSk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzRdKTsKKwkJcnhfbW9kZSA9IChSQ1JfQU0gfCBSQ1JfQUIpOworCX0gZWxzZSB7CisJCWludCBvZmZzZXQgPSBNQ0FNX1NJWkUgLSB2cHRyLT5tdWx0aWNhc3RfbGltaXQ7CisJCW1hY19nZXRfY2FtX21hc2socmVncywgdnB0ci0+bUNBTW1hc2spOworCisJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJbWFjX3NldF9jYW0ocmVncywgaSArIG9mZnNldCwgbWNsaXN0LT5kbWlfYWRkcik7CisJCQl2cHRyLT5tQ0FNbWFza1sob2Zmc2V0ICsgaSkgLyA4XSB8PSAxIDw8ICgob2Zmc2V0ICsgaSkgJiA3KTsKKwkJfQorCisJCW1hY19zZXRfY2FtX21hc2socmVncywgdnB0ci0+bUNBTW1hc2spOworCQlyeF9tb2RlID0gUkNSX0FNIHwgUkNSX0FCIHwgUkNSX0FQOworCX0KKwlpZiAoZGV2LT5tdHUgPiAxNTAwKQorCQlyeF9tb2RlIHw9IFJDUl9BTDsKKworCUJZVEVfUkVHX0JJVFNfT04ocnhfbW9kZSwgJnJlZ3MtPlJDUik7CisKK30KKworLyoKKyAqIE1JSSBhY2Nlc3MgLCBtZWRpYSBsaW5rIG1vZGUgc2V0dGluZyBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqCW1paV9pbml0CS0Jc2V0IHVwIE1JSQorICoJQHZwdHI6IHZlbG9jaXR5IGFkYXB0ZXIKKyAqCUBtaWlfc3RhdHVzOiAgbGlua3MgdGF0dXMKKyAqCisgKglTZXQgdXAgdGhlIFBIWSBmb3IgdGhlIGN1cnJlbnQgbGluayBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgbWlpX2luaXQoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHUzMiBtaWlfc3RhdHVzKQoreworCXUxNiBCTUNSOworCisJc3dpdGNoIChQSFlJRF9HRVRfUEhZX0lEKHZwdHItPnBoeV9pZCkpIHsKKwljYXNlIFBIWUlEX0NJQ0FEQV9DUzgyMDE6CisJCS8qCisJCSAqCVJlc2V0IHRvIGhhcmR3YXJlIGRlZmF1bHQKKwkJICovCisJCU1JSV9SRUdfQklUU19PRkYoKEFOQVJfQVNNRElSIHwgQU5BUl9QQVVTRSksIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQkvKgorCQkgKglUdXJuIG9uIEVDSE9ESVMgYml0IGluIE5XYXktZm9yY2VkIGZ1bGwgbW9kZSBhbmQgdHVybiBpdAorCQkgKglvZmYgaXQgaW4gTldheS1mb3JjZWQgaGFsZiBtb2RlIGZvciBOV2F5LWZvcmNlZCB2LnMuCisJCSAqCWxlZ2FjeS1mb3JjZWQgaXNzdWUuCisJCSAqLworCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQorCQkJTUlJX1JFR19CSVRTX09OKFRDU1JfRUNIT0RJUywgTUlJX1JFR19UQ1NSLCB2cHRyLT5tYWNfcmVncyk7CisJCWVsc2UKKwkJCU1JSV9SRUdfQklUU19PRkYoVENTUl9FQ0hPRElTLCBNSUlfUkVHX1RDU1IsIHZwdHItPm1hY19yZWdzKTsKKwkJLyoKKwkJICoJVHVybiBvbiBMaW5rL0FjdGl2aXR5IExFRCBlbmFibGUgYml0IGZvciBDSVM4MjAxCisJCSAqLworCQlNSUlfUkVHX0JJVFNfT04oUExFRF9MQUxCRSwgTUlJX1JFR19QTEVELCB2cHRyLT5tYWNfcmVncyk7CisJCWJyZWFrOworCWNhc2UgUEhZSURfVlQzMjE2XzMyQklUOgorCWNhc2UgUEhZSURfVlQzMjE2XzY0QklUOgorCQkvKgorCQkgKglSZXNldCB0byBoYXJkd2FyZSBkZWZhdWx0CisJCSAqLworCQlNSUlfUkVHX0JJVFNfT04oKEFOQVJfQVNNRElSIHwgQU5BUl9QQVVTRSksIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOworCQkvKgorCQkgKglUdXJuIG9uIEVDSE9ESVMgYml0IGluIE5XYXktZm9yY2VkIGZ1bGwgbW9kZSBhbmQgdHVybiBpdAorCQkgKglvZmYgaXQgaW4gTldheS1mb3JjZWQgaGFsZiBtb2RlIGZvciBOV2F5LWZvcmNlZCB2LnMuCisJCSAqCWxlZ2FjeS1mb3JjZWQgaXNzdWUKKwkJICovCisJCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpCisJCQlNSUlfUkVHX0JJVFNfT04oVENTUl9FQ0hPRElTLCBNSUlfUkVHX1RDU1IsIHZwdHItPm1hY19yZWdzKTsKKwkJZWxzZQorCQkJTUlJX1JFR19CSVRTX09GRihUQ1NSX0VDSE9ESVMsIE1JSV9SRUdfVENTUiwgdnB0ci0+bWFjX3JlZ3MpOworCQlicmVhazsKKworCWNhc2UgUEhZSURfTUFSVkVMTF8xMDAwOgorCWNhc2UgUEhZSURfTUFSVkVMTF8xMDAwUzoKKwkJLyoKKwkJICoJQXNzZXJ0IENSUyBvbiBUcmFuc21pdAorCQkgKi8KKwkJTUlJX1JFR19CSVRTX09OKFBTQ1JfQUNSU1RYLCBNSUlfUkVHX1BTQ1IsIHZwdHItPm1hY19yZWdzKTsKKwkJLyoKKwkJICoJUmVzZXQgdG8gaGFyZHdhcmUgZGVmYXVsdAorCQkgKi8KKwkJTUlJX1JFR19CSVRTX09OKChBTkFSX0FTTURJUiB8IEFOQVJfUEFVU0UpLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwl2ZWxvY2l0eV9taWlfcmVhZCh2cHRyLT5tYWNfcmVncywgTUlJX1JFR19CTUNSLCAmQk1DUik7CisJaWYgKEJNQ1IgJiBCTUNSX0lTTykgeworCQlCTUNSICY9IH5CTUNSX0lTTzsKKwkJdmVsb2NpdHlfbWlpX3dyaXRlKHZwdHItPm1hY19yZWdzLCBNSUlfUkVHX0JNQ1IsIEJNQ1IpOworCX0KK30KKworCisvKioKICAqCXZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzCS0JaW5pdGlhbGlzZSBNQUMgcmVnaXN0ZXJzCiAgKglAdnB0cjogdmVsb2NpdHkgdG8gaW5pdAogICoJQHR5cGU6IHR5cGUgb2YgaW5pdGlhbGlzYXRpb24gKGhvdCBvciBjb2xkKQpAQCAtNzAzLDExICsxMjY4LDEwIEBACiAgKglJbml0aWFsaXNlIHRoZSBNQUMgb24gYSByZXNldCBvciBvbiBmaXJzdCBzZXQgdXAgb24gdGhlCiAgKgloYXJkd2FyZS4KICAqLwotCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKIAkJCQkgICAgZW51bSB2ZWxvY2l0eV9pbml0X3R5cGUgdHlwZSkKIHsKLQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOwogCWludCBpLCBtaWlfc3RhdHVzOwogCiAJbWFjX3dvbF9yZXNldChyZWdzKTsKQEAgLTc1MCw5ICsxMzE0LDkgQEAKIAkJbWRlbGF5KDUpOwogCiAJCW1hY19lZXByb21fcmVsb2FkKHJlZ3MpOwotCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCQl3cml0ZWIodnB0ci0+ZGV2LT5kZXZfYWRkcltpXSwgJihyZWdzLT5QQVJbaV0pKTsKLQkJfQorCiAJCS8qCiAJCSAqCWNsZWFyIFByZV9BQ1BJIGJpdC4KIAkJICovCkBAIC04MTksMzYgKzEzODMsMTE2NiBAQAogCX0KIH0KIAotLyoqCi0gKgl2ZWxvY2l0eV9zb2Z0X3Jlc2V0CS0Jc29mdCByZXNldAotICoJQHZwdHI6IHZlbG9jaXR5IHRvIHJlc2V0Ci0gKgotICoJS2ljayBvZmYgYSBzb2Z0IHJlc2V0IG9mIHRoZSB2ZWxvY2l0eSBhZGFwdGVyIGFuZCB0aGVuIHBvbGwKLSAqCXVudGlsIHRoZSByZXNldCBzZXF1ZW5jZSBoYXMgY29tcGxldGVkIGJlZm9yZSByZXR1cm5pbmcuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9zb2Z0X3Jlc2V0KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQorc3RhdGljIHZvaWQgdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQogewotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCWludCBpID0gMDsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCWludCBhdmFpbCwgZGlydHksIHVudXNhYmxlOwogCi0Jd3JpdGVsKENSMF9TRlJTVCwgJnJlZ3MtPkNSMFNldCk7CisJLyoKKwkgKiBSRCBudW1iZXIgbXVzdCBiZSBlcXVhbCB0byA0WCBwZXIgaGFyZHdhcmUgc3BlYworCSAqIChwcm9ncmFtbWluZyBndWlkZSByZXYgMS4yMCwgcC4xMykKKwkgKi8KKwlpZiAodnB0ci0+cnguZmlsbGVkIDwgNCkKKwkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IFdfTUFYX1RJTUVPVVQ7IGkrKykgewotCQl1ZGVsYXkoNSk7Ci0JCWlmICghRFdPUkRfUkVHX0JJVFNfSVNfT04oQ1IwX1NGUlNULCAmcmVncy0+Q1IwU2V0KSkKLQkJCWJyZWFrOworCXdtYigpOworCisJdW51c2FibGUgPSB2cHRyLT5yeC5maWxsZWQgJiAweDAwMDM7CisJZGlydHkgPSB2cHRyLT5yeC5kaXJ0eSAtIHVudXNhYmxlOworCWZvciAoYXZhaWwgPSB2cHRyLT5yeC5maWxsZWQgJiAweGZmZmM7IGF2YWlsOyBhdmFpbC0tKSB7CisJCWRpcnR5ID0gKGRpcnR5ID4gMCkgPyBkaXJ0eSAtIDEgOiB2cHRyLT5vcHRpb25zLm51bXJ4IC0gMTsKKwkJdnB0ci0+cngucmluZ1tkaXJ0eV0ucmRlc2MwLmxlbiB8PSBPV05FRF9CWV9OSUM7CiAJfQogCi0JaWYgKGkgPT0gV19NQVhfVElNRU9VVCkgewotCQl3cml0ZWwoQ1IwX0ZPUlNSU1QsICZyZWdzLT5DUjBTZXQpOwotCQkvKiBGSVhNRTogUENJIFBPU1RJTkcgKi8KLQkJLyogZGVsYXkgMm1zICovCi0JCW1kZWxheSgyKTsKKwl3cml0ZXcodnB0ci0+cnguZmlsbGVkICYgMHhmZmZjLCAmcmVncy0+UkJSRFUpOworCXZwdHItPnJ4LmZpbGxlZCA9IHVudXNhYmxlOworfQorCisvKioKKyAqCXZlbG9jaXR5X2luaXRfZG1hX3JpbmdzCS0Jc2V0IHVwIERNQSByaW5ncworICoJQHZwdHI6IFZlbG9jaXR5IHRvIHNldCB1cAorICoKKyAqCUFsbG9jYXRlIFBDSSBtYXBwZWQgRE1BIHJpbmdzIGZvciB0aGUgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgbGF5ZXIKKyAqCXRvIHVzZS4KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9pbml0X2RtYV9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfb3B0ICpvcHQgPSAmdnB0ci0+b3B0aW9uczsKKwljb25zdCB1bnNpZ25lZCBpbnQgcnhfcmluZ19zaXplID0gb3B0LT5udW1yeCAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyk7CisJY29uc3QgdW5zaWduZWQgaW50IHR4X3Jpbmdfc2l6ZSA9IG9wdC0+bnVtdHggKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdnB0ci0+cGRldjsKKwlkbWFfYWRkcl90IHBvb2xfZG1hOworCXZvaWQgKnBvb2w7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGFsbCBSRC9URCByaW5ncyBhIHNpbmdsZSBwb29sLgorCSAqCisJICogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSBmdWxmaWxscyB0aGUgcmVxdWlyZW1lbnQgZm9yIDY0IGJ5dGVzCisJICogYWxpZ25tZW50CisJICovCisJcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4X3Jpbmdfc2l6ZSAqIHZwdHItPnR4Lm51bXEgKworCQkJCSAgICByeF9yaW5nX3NpemUsICZwb29sX2RtYSk7CisJaWYgKCFwb29sKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIDogRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCisJCQl2cHRyLT5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl2cHRyLT5yeC5yaW5nID0gcG9vbDsKKwl2cHRyLT5yeC5wb29sX2RtYSA9IHBvb2xfZG1hOworCisJcG9vbCArPSByeF9yaW5nX3NpemU7CisJcG9vbF9kbWEgKz0gcnhfcmluZ19zaXplOworCisJZm9yIChpID0gMDsgaSA8IHZwdHItPnR4Lm51bXE7IGkrKykgeworCQl2cHRyLT50eC5yaW5nc1tpXSA9IHBvb2w7CisJCXZwdHItPnR4LnBvb2xfZG1hW2ldID0gcG9vbF9kbWE7CisJCXBvb2wgKz0gdHhfcmluZ19zaXplOworCQlwb29sX2RtYSArPSB0eF9yaW5nX3NpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3NldF9yeGJ1ZnNpemUoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBtdHUpCit7CisJdnB0ci0+cnguYnVmX3N6ID0gKG10dSA8PSBFVEhfREFUQV9MRU4pID8gUEtUX0JVRl9TWiA6IG10dSArIDMyOworfQorCisvKioKKyAqCXZlbG9jaXR5X2FsbG9jX3J4X2J1ZgktCWFsbG9jYXRlIGFsaWduZWQgcmVjZWl2ZSBidWZmZXIKKyAqCUB2cHRyOiB2ZWxvY2l0eQorICoJQGlkeDogcmluZyBpbmRleAorICoKKyAqCUFsbG9jYXRlIGEgbmV3IGZ1bGwgc2l6ZWQgYnVmZmVyIGZvciB0aGUgcmVjZXB0aW9uIG9mIGEgZnJhbWUgYW5kCisgKgltYXAgaXQgaW50byBQQ0kgc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSB0byB1c2UuIFRoZSBoYXJkd2FyZQorICoJcmVxdWlyZXMgKjY0KiBieXRlIGFsaWdubWVudCBvZiB0aGUgYnVmZmVyIHdoaWNoIG1ha2VzIGxpZmUKKyAqCWxlc3MgZnVuIHRoYW4gd291bGQgYmUgaWRlYWwuCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfYWxsb2NfcnhfYnVmKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgaWR4KQoreworCXN0cnVjdCByeF9kZXNjICpyZCA9ICYodnB0ci0+cngucmluZ1tpZHhdKTsKKwlzdHJ1Y3QgdmVsb2NpdHlfcmRfaW5mbyAqcmRfaW5mbyA9ICYodnB0ci0+cnguaW5mb1tpZHhdKTsKKworCXJkX2luZm8tPnNrYiA9IGRldl9hbGxvY19za2IodnB0ci0+cnguYnVmX3N6ICsgNjQpOworCWlmIChyZF9pbmZvLT5za2IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqCURvIHRoZSBneW1uYXN0aWNzIHRvIGdldCB0aGUgYnVmZmVyIGhlYWQgZm9yIGRhdGEgYXQKKwkgKgk2NGJ5dGUgYWxpZ25tZW50LgorCSAqLworCXNrYl9yZXNlcnZlKHJkX2luZm8tPnNrYiwgKHVuc2lnbmVkIGxvbmcpIHJkX2luZm8tPnNrYi0+ZGF0YSAmIDYzKTsKKwlyZF9pbmZvLT5za2JfZG1hID0gcGNpX21hcF9zaW5nbGUodnB0ci0+cGRldiwgcmRfaW5mby0+c2tiLT5kYXRhLAorCQkJCQl2cHRyLT5yeC5idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkvKgorCSAqCUZpbGwgaW4gdGhlIGRlc2NyaXB0b3IgdG8gbWF0Y2gKKwkgKi8KKworCSooKHUzMiAqKSAmIChyZC0+cmRlc2MwKSkgPSAwOworCXJkLT5zaXplID0gY3B1X3RvX2xlMTYodnB0ci0+cnguYnVmX3N6KSB8IFJYX0lOVEVOOworCXJkLT5wYV9sb3cgPSBjcHVfdG9fbGUzMihyZF9pbmZvLT5za2JfZG1hKTsKKwlyZC0+cGFfaGlnaCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB2ZWxvY2l0eV9yeF9yZWZpbGwoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJaW50IGRpcnR5ID0gdnB0ci0+cnguZGlydHksIGRvbmUgPSAwOworCisJZG8geworCQlzdHJ1Y3QgcnhfZGVzYyAqcmQgPSB2cHRyLT5yeC5yaW5nICsgZGlydHk7CisKKwkJLyogRmluZSBmb3IgYW4gYWxsIHplcm8gUnggZGVzYyBhdCBpbml0IHRpbWUgYXMgd2VsbCAqLworCQlpZiAocmQtPnJkZXNjMC5sZW4gJiBPV05FRF9CWV9OSUMpCisJCQlicmVhazsKKworCQlpZiAoIXZwdHItPnJ4LmluZm9bZGlydHldLnNrYikgeworCQkJaWYgKHZlbG9jaXR5X2FsbG9jX3J4X2J1Zih2cHRyLCBkaXJ0eSkgPCAwKQorCQkJCWJyZWFrOworCQl9CisJCWRvbmUrKzsKKwkJZGlydHkgPSAoZGlydHkgPCB2cHRyLT5vcHRpb25zLm51bXJ4IC0gMSkgPyBkaXJ0eSArIDEgOiAwOworCX0gd2hpbGUgKGRpcnR5ICE9IHZwdHItPnJ4LmN1cnIpOworCisJaWYgKGRvbmUpIHsKKwkJdnB0ci0+cnguZGlydHkgPSBkaXJ0eTsKKwkJdnB0ci0+cnguZmlsbGVkICs9IGRvbmU7CisJfQorCisJcmV0dXJuIGRvbmU7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfZnJlZV9yZF9yaW5nCS0JZnJlZSByZWNlaXZlIHJpbmcKKyAqCUB2cHRyOiB2ZWxvY2l0eSB0byBjbGVhbiB1cAorICoKKyAqCUZyZWUgdGhlIHJlY2VpdmUgYnVmZmVycyBmb3IgZWFjaCByaW5nIHNsb3QgYW5kIGFueQorICoJYXR0YWNoZWQgc29ja2V0IGJ1ZmZlcnMgdGhhdCBuZWVkIHRvIGdvIGF3YXkuCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfcmRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlpbnQgaTsKKworCWlmICh2cHRyLT5yeC5pbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCB2cHRyLT5vcHRpb25zLm51bXJ4OyBpKyspIHsKKwkJc3RydWN0IHZlbG9jaXR5X3JkX2luZm8gKnJkX2luZm8gPSAmKHZwdHItPnJ4LmluZm9baV0pOworCQlzdHJ1Y3QgcnhfZGVzYyAqcmQgPSB2cHRyLT5yeC5yaW5nICsgaTsKKworCQltZW1zZXQocmQsIDAsIHNpemVvZigqcmQpKTsKKworCQlpZiAoIXJkX2luZm8tPnNrYikKKwkJCWNvbnRpbnVlOworCQlwY2lfdW5tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYl9kbWEsIHZwdHItPnJ4LmJ1Zl9zeiwKKwkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcmRfaW5mby0+c2tiX2RtYSA9IDA7CisKKwkJZGV2X2tmcmVlX3NrYihyZF9pbmZvLT5za2IpOworCQlyZF9pbmZvLT5za2IgPSBOVUxMOworCX0KKworCWtmcmVlKHZwdHItPnJ4LmluZm8pOworCXZwdHItPnJ4LmluZm8gPSBOVUxMOworfQorCisKKworLyoqCisgKgl2ZWxvY2l0eV9pbml0X3JkX3JpbmcJLQlzZXQgdXAgcmVjZWl2ZSByaW5nCisgKglAdnB0cjogdmVsb2NpdHkgdG8gY29uZmlndXJlCisgKgorICoJQWxsb2NhdGUgYW5kIHNldCB1cCB0aGUgcmVjZWl2ZSBidWZmZXJzIGZvciBlYWNoIHJpbmcgc2xvdCBhbmQKKyAqCWFzc2lnbiB0aGVtIHRvIHRoZSBuZXR3b3JrIGFkYXB0ZXIuCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF9yZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCWludCByZXQgPSAtRU5PTUVNOworCisJdnB0ci0+cnguaW5mbyA9IGtjYWxsb2ModnB0ci0+b3B0aW9ucy5udW1yeCwKKwkJCQlzaXplb2Yoc3RydWN0IHZlbG9jaXR5X3JkX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZwdHItPnJ4LmluZm8pCisJCWdvdG8gb3V0OworCisJdmVsb2NpdHlfaW5pdF9yeF9yaW5nX2luZGV4ZXModnB0cik7CisKKwlpZiAodmVsb2NpdHlfcnhfcmVmaWxsKHZwdHIpICE9IHZwdHItPm9wdGlvbnMubnVtcngpIHsKKwkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9FUlIsIEtFUk5fRVJSCisJCQkiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBSWCBidWZmZXIuXG4iLCB2cHRyLT5kZXYtPm5hbWUpOworCQl2ZWxvY2l0eV9mcmVlX3JkX3JpbmcodnB0cik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9pbml0X3RkX3JpbmcJLQlzZXQgdXAgdHJhbnNtaXQgcmluZworICoJQHZwdHI6CXZlbG9jaXR5CisgKgorICoJU2V0IHVwIHRoZSB0cmFuc21pdCByaW5nIGFuZCBjaGFpbiB0aGUgcmluZyBwb2ludGVycyB0b2dldGhlci4KKyAqCVJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgcG9zaXggZXJybm8gY29kZSBmb3IKKyAqCWZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF90ZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCWRtYV9hZGRyX3QgY3VycjsKKwlpbnQgajsKKworCS8qIEluaXQgdGhlIFREIHJpbmcgZW50cmllcyAqLworCWZvciAoaiA9IDA7IGogPCB2cHRyLT50eC5udW1xOyBqKyspIHsKKwkJY3VyciA9IHZwdHItPnR4LnBvb2xfZG1hW2pdOworCisJCXZwdHItPnR4LmluZm9zW2pdID0ga2NhbGxvYyh2cHRyLT5vcHRpb25zLm51bXR4LAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvKSwKKwkJCQkJICAgIEdGUF9LRVJORUwpOworCQlpZiAoIXZwdHItPnR4LmluZm9zW2pdKQl7CisJCQl3aGlsZSAoLS1qID49IDApCisJCQkJa2ZyZWUodnB0ci0+dHguaW5mb3Nbal0pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl2cHRyLT50eC50YWlsW2pdID0gdnB0ci0+dHguY3VycltqXSA9IHZwdHItPnR4LnVzZWRbal0gPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKgl2ZWxvY2l0eV9mcmVlX2RtYV9yaW5ncwktCWZyZWUgUENJIHJpbmcgcG9pbnRlcnMKKyAqCUB2cHRyOiBWZWxvY2l0eSB0byBmcmVlIGZyb20KKyAqCisgKglDbGVhbiB1cCB0aGUgUENJIHJpbmcgYnVmZmVycyBhbGxvY2F0ZWQgdG8gdGhpcyB2ZWxvY2l0eS4KKyAqLworc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV9kbWFfcmluZ3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJY29uc3QgaW50IHNpemUgPSB2cHRyLT5vcHRpb25zLm51bXJ4ICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKSArCisJCXZwdHItPm9wdGlvbnMubnVtdHggKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpICogdnB0ci0+dHgubnVtcTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQodnB0ci0+cGRldiwgc2l6ZSwgdnB0ci0+cngucmluZywgdnB0ci0+cngucG9vbF9kbWEpOworfQorCisKK3N0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IG10dSkKK3sKKwlpbnQgcmV0OworCisJdmVsb2NpdHlfc2V0X3J4YnVmc2l6ZSh2cHRyLCBtdHUpOworCisJcmV0ID0gdmVsb2NpdHlfaW5pdF9kbWFfcmluZ3ModnB0cik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gdmVsb2NpdHlfaW5pdF9yZF9yaW5nKHZwdHIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2RtYV9yaW5nc18wOworCisJcmV0ID0gdmVsb2NpdHlfaW5pdF90ZF9yaW5nKHZwdHIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX3JkX3JpbmdfMTsKK291dDoKKwlyZXR1cm4gcmV0OworCitlcnJfZnJlZV9yZF9yaW5nXzE6CisJdmVsb2NpdHlfZnJlZV9yZF9yaW5nKHZwdHIpOworZXJyX2ZyZWVfZG1hX3JpbmdzXzA6CisJdmVsb2NpdHlfZnJlZV9kbWFfcmluZ3ModnB0cik7CisJZ290byBvdXQ7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfZnJlZV90eF9idWYJLQlmcmVlIHRyYW5zbWl0IGJ1ZmZlcgorICoJQHZwdHI6IHZlbG9jaXR5CisgKglAdGRpbmZvOiBidWZmZXIKKyAqCisgKglSZWxlYXNlIGFuIHRyYW5zbWl0IGJ1ZmZlci4gSWYgdGhlIGJ1ZmZlciB3YXMgcHJlYWxsb2NhdGVkIHRoZW4KKyAqCXJlY3ljbGUgaXQsIGlmIG5vdCB0aGVuIHVubWFwIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfdHhfYnVmKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqdGRpbmZvKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB0ZGluZm8tPnNrYjsKKwlpbnQgaTsKKwlpbnQgcGt0bGVuOworCisJLyoKKwkgKglEb24ndCB1bm1hcCB0aGUgcHJlLWFsbG9jYXRlZCB0eF9idWZzCisJICovCisJaWYgKHRkaW5mby0+c2tiX2RtYSkgeworCisJCXBrdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgc2tiLT5sZW4sIEVUSF9aTEVOKTsKKwkJZm9yIChpID0gMDsgaSA8IHRkaW5mby0+bnNrYl9kbWE7IGkrKykgeworCQkJcGNpX3VubWFwX3NpbmdsZSh2cHRyLT5wZGV2LCB0ZGluZm8tPnNrYl9kbWFbaV0sIHBrdGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQl0ZGluZm8tPnNrYl9kbWFbaV0gPSAwOworCQl9CisJfQorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJdGRpbmZvLT5za2IgPSBOVUxMOworfQorCisKKy8qCisgKglGSVhNRTogY291bGQgd2UgbWVyZ2UgdGhpcyB3aXRoIHZlbG9jaXR5X2ZyZWVfdHhfYnVmID8KKyAqLworc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV90ZF9yaW5nX2VudHJ5KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLAorCQkJCQkJCSBpbnQgcSwgaW50IG4pCit7CisJc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkX2luZm8gPSAmKHZwdHItPnR4LmluZm9zW3FdW25dKTsKKwlpbnQgaTsKKworCWlmICh0ZF9pbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICh0ZF9pbmZvLT5za2IpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRkX2luZm8tPm5za2JfZG1hOyBpKyspIHsKKwkJCWlmICh0ZF9pbmZvLT5za2JfZG1hW2ldKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZSh2cHRyLT5wZGV2LCB0ZF9pbmZvLT5za2JfZG1hW2ldLAorCQkJCQl0ZF9pbmZvLT5za2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJdGRfaW5mby0+c2tiX2RtYVtpXSA9IDA7CisJCQl9CisJCX0KKwkJZGV2X2tmcmVlX3NrYih0ZF9pbmZvLT5za2IpOworCQl0ZF9pbmZvLT5za2IgPSBOVUxMOworCX0KK30KKworLyoqCisgKgl2ZWxvY2l0eV9mcmVlX3RkX3JpbmcJLQlmcmVlIHRkIHJpbmcKKyAqCUB2cHRyOiB2ZWxvY2l0eQorICoKKyAqCUZyZWUgdXAgdGhlIHRyYW5zbWl0IHJpbmcgZm9yIHRoaXMgcGFydGljdWxhciB2ZWxvY2l0eSBhZGFwdGVyLgorICoJV2UgZnJlZSB0aGUgcmluZyBjb250ZW50cyBidXQgbm90IHRoZSByaW5nIGl0c2VsZi4KKyAqLworc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV90ZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCWludCBpLCBqOworCisJZm9yIChqID0gMDsgaiA8IHZwdHItPnR4Lm51bXE7IGorKykgeworCQlpZiAodnB0ci0+dHguaW5mb3Nbal0gPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGkgPSAwOyBpIDwgdnB0ci0+b3B0aW9ucy5udW10eDsgaSsrKQorCQkJdmVsb2NpdHlfZnJlZV90ZF9yaW5nX2VudHJ5KHZwdHIsIGosIGkpOworCisJCWtmcmVlKHZwdHItPnR4LmluZm9zW2pdKTsKKwkJdnB0ci0+dHguaW5mb3Nbal0gPSBOVUxMOworCX0KK30KKworCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV9mcmVlX3JpbmdzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoreworCXZlbG9jaXR5X2ZyZWVfdGRfcmluZyh2cHRyKTsKKwl2ZWxvY2l0eV9mcmVlX3JkX3JpbmcodnB0cik7CisJdmVsb2NpdHlfZnJlZV9kbWFfcmluZ3ModnB0cik7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfZXJyb3IJLQloYW5kbGUgZXJyb3IgZnJvbSBjb250cm9sbGVyCisgKglAdnB0cjogdmVsb2NpdHkKKyAqCUBzdGF0dXM6IGNhcmQgc3RhdHVzCisgKgorICoJUHJvY2VzcyBhbiBlcnJvciByZXBvcnQgZnJvbSB0aGUgaGFyZHdhcmUgYW5kIGF0dGVtcHQgdG8gcmVjb3ZlcgorICoJdGhlIGNhcmQgaXRzZWxmLiBBdCB0aGUgbW9tZW50IHdlIGNhbm5vdCByZWNvdmVyIGZyb20gc29tZQorICoJdGhlb3JldGljYWxseSBpbXBvc3NpYmxlIGVycm9ycyBidXQgdGhpcyBjb3VsZCBiZSBmaXhlZCB1c2luZworICoJdGhlIHBjaV9kZXZpY2VfZmFpbGVkIGxvZ2ljIHRvIGJvdW5jZSB0aGUgaGFyZHdhcmUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2Vycm9yKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgc3RhdHVzKQoreworCisJaWYgKHN0YXR1cyAmIElTUl9UWFNUTEkpIHsKKwkJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKworCQlwcmludGsoS0VSTl9FUlIgIlREIHN0cnVjdHVyZSBlcnJvciBURGluZGV4PSVoeFxuIiwgcmVhZHcoJnJlZ3MtPlRESWR4WzBdKSk7CisJCUJZVEVfUkVHX0JJVFNfT04oVFhFU1JfVERTVFIsICZyZWdzLT5UWEVTUik7CisJCXdyaXRldyhUUkRDU1JfUlVOLCAmcmVncy0+VERDU1JDbHIpOworCQluZXRpZl9zdG9wX3F1ZXVlKHZwdHItPmRldik7CisKKwkJLyogRklYTUU6IHBvcnQgb3ZlciB0aGUgcGNpX2RldmljZV9mYWlsZWQgY29kZSBhbmQgdXNlIGl0CisJCSAgIGhlcmUgKi8KKwl9CisKKwlpZiAoc3RhdHVzICYgSVNSX1NSQ0kpIHsKKwkJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwkJaW50IGxpbmtlZDsKKworCQlpZiAodnB0ci0+b3B0aW9ucy5zcGRfZHB4ID09IFNQRF9EUFhfQVVUTykgeworCQkJdnB0ci0+bWlpX3N0YXR1cyA9IGNoZWNrX2Nvbm5lY3Rpb25fdHlwZShyZWdzKTsKKworCQkJLyoKKwkJCSAqCUlmIGl0IGlzIGEgMzExOSwgZGlzYWJsZSBmcmFtZSBidXJzdGluZyBpbgorCQkJICoJaGFsZmR1cGxleCBtb2RlIGFuZCBlbmFibGUgaXQgaW4gZnVsbGR1cGxleAorCQkJICoJIG1vZGUKKwkJCSAqLworCQkJaWYgKHZwdHItPnJldl9pZCA8IFJFVl9JRF9WVDMyMTZfQTApIHsKKwkJCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQorCQkJCQlCWVRFX1JFR19CSVRTX09OKFRDUl9UQjJCRElTLCAmcmVncy0+VENSKTsKKwkJCQllbHNlCisJCQkJCUJZVEVfUkVHX0JJVFNfT0ZGKFRDUl9UQjJCRElTLCAmcmVncy0+VENSKTsKKwkJCX0KKwkJCS8qCisJCQkgKglPbmx5IGVuYWJsZSBDRCBoZWFydCBiZWF0IGNvdW50ZXIgaW4gMTBIRCBtb2RlCisJCQkgKi8KKwkJCWlmICghKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkgJiYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMCkpCisJCQkJQllURV9SRUdfQklUU19PRkYoVEVTVENGR19IQkRJUywgJnJlZ3MtPlRFU1RDRkcpOworCQkJZWxzZQorCQkJCUJZVEVfUkVHX0JJVFNfT04oVEVTVENGR19IQkRJUywgJnJlZ3MtPlRFU1RDRkcpOworCQl9CisJCS8qCisJCSAqCUdldCBsaW5rIHN0YXR1cyBmcm9tIFBIWVNSMAorCQkgKi8KKwkJbGlua2VkID0gcmVhZGIoJnJlZ3MtPlBIWVNSMCkgJiBQSFlTUjBfTElOS0dEOworCisJCWlmIChsaW5rZWQpIHsKKwkJCXZwdHItPm1paV9zdGF0dXMgJj0gflZFTE9DSVRZX0xJTktfRkFJTDsKKwkJCW5ldGlmX2NhcnJpZXJfb24odnB0ci0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCXZwdHItPm1paV9zdGF0dXMgfD0gVkVMT0NJVFlfTElOS19GQUlMOworCQkJbmV0aWZfY2Fycmllcl9vZmYodnB0ci0+ZGV2KTsKKwkJfQorCisJCXZlbG9jaXR5X3ByaW50X2xpbmtfc3RhdHVzKHZwdHIpOworCQllbmFibGVfZmxvd19jb250cm9sX2FiaWxpdHkodnB0cik7CisKKwkJLyoKKwkJICoJUmUtZW5hYmxlIGF1dG8tcG9sbGluZyBiZWNhdXNlIFNSQ0kgd2lsbCBkaXNhYmxlCisJCSAqCWF1dG8tcG9sbGluZworCQkgKi8KKworCQllbmFibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOworCisJCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfTElOS19GQUlMKQorCQkJbmV0aWZfc3RvcF9xdWV1ZSh2cHRyLT5kZXYpOworCQllbHNlCisJCQluZXRpZl93YWtlX3F1ZXVlKHZwdHItPmRldik7CisKKwl9OworCWlmIChzdGF0dXMgJiBJU1JfTUlCRkkpCisJCXZlbG9jaXR5X3VwZGF0ZV9od19taWJzKHZwdHIpOworCWlmIChzdGF0dXMgJiBJU1JfTFNURUkpCisJCW1hY19yeF9xdWV1ZV93YWtlKHZwdHItPm1hY19yZWdzKTsKK30KKworLyoqCisgKgl0eF9zcnYJCS0JdHJhbnNtaXQgaW50ZXJydXB0IHNlcnZpY2UKKyAqCUB2cHRyOyBWZWxvY2l0eQorICoJQHN0YXR1czoKKyAqCisgKglTY2FuIHRoZSBxdWV1ZXMgbG9va2luZyBmb3IgdHJhbnNtaXR0ZWQgcGFja2V0cyB0aGF0CisgKgl3ZSBjYW4gY29tcGxldGUgYW5kIGNsZWFuIHVwLiBVcGRhdGUgYW55IHN0YXRpc3RpY3MgYXMKKyAqCW5lY2Vzc2FyeS8KKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV90eF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IHR4X2Rlc2MgKnRkOworCWludCBxbnVtOworCWludCBmdWxsID0gMDsKKwlpbnQgaWR4OworCWludCB3b3JrcyA9IDA7CisJc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkaW5mbzsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdnB0ci0+ZGV2LT5zdGF0czsKKworCWZvciAocW51bSA9IDA7IHFudW0gPCB2cHRyLT50eC5udW1xOyBxbnVtKyspIHsKKwkJZm9yIChpZHggPSB2cHRyLT50eC50YWlsW3FudW1dOyB2cHRyLT50eC51c2VkW3FudW1dID4gMDsKKwkJCWlkeCA9IChpZHggKyAxKSAlIHZwdHItPm9wdGlvbnMubnVtdHgpIHsKKworCQkJLyoKKwkJCSAqCUdldCBUeCBEZXNjcmlwdG9yCisJCQkgKi8KKwkJCXRkID0gJih2cHRyLT50eC5yaW5nc1txbnVtXVtpZHhdKTsKKwkJCXRkaW5mbyA9ICYodnB0ci0+dHguaW5mb3NbcW51bV1baWR4XSk7CisKKwkJCWlmICh0ZC0+dGRlc2MwLmxlbiAmIE9XTkVEX0JZX05JQykKKwkJCQlicmVhazsKKworCQkJaWYgKCh3b3JrcysrID4gMTUpKQorCQkJCWJyZWFrOworCisJCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX1RFUlIpIHsKKwkJCQlzdGF0cy0+dHhfZXJyb3JzKys7CisJCQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX0NESCkKKwkJCQkJc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX0NSUykKKwkJCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJaWYgKHRkLT50ZGVzYzAuVFNSICYgVFNSMF9BQlQpCisJCQkJCXN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCWlmICh0ZC0+dGRlc2MwLlRTUiAmIFRTUjBfT1dDKQorCQkJCQlzdGF0cy0+dHhfd2luZG93X2Vycm9ycysrOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0cy0+dHhfcGFja2V0cysrOworCQkJCXN0YXRzLT50eF9ieXRlcyArPSB0ZGluZm8tPnNrYi0+bGVuOworCQkJfQorCQkJdmVsb2NpdHlfZnJlZV90eF9idWYodnB0ciwgdGRpbmZvKTsKKwkJCXZwdHItPnR4LnVzZWRbcW51bV0tLTsKKwkJfQorCQl2cHRyLT50eC50YWlsW3FudW1dID0gaWR4OworCisJCWlmIChBVkFJTF9URCh2cHRyLCBxbnVtKSA8IDEpCisJCQlmdWxsID0gMTsKKwl9CisJLyoKKwkgKglMb29rIHRvIHNlZSBpZiB3ZSBzaG91bGQga2ljayB0aGUgdHJhbnNtaXQgbmV0d29yaworCSAqCWxheWVyIGZvciBtb3JlIHdvcmsuCisJICovCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQodnB0ci0+ZGV2KSAmJiAoZnVsbCA9PSAwKQorCSAgICAmJiAoISh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfTElOS19GQUlMKSkpIHsKKwkJbmV0aWZfd2FrZV9xdWV1ZSh2cHRyLT5kZXYpOworCX0KKwlyZXR1cm4gd29ya3M7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfcnhfY3N1bQktCWNoZWNrc3VtIHByb2Nlc3MKKyAqCUByZDogcmVjZWl2ZSBwYWNrZXQgZGVzY3JpcHRvcgorICoJQHNrYjogbmV0d29yayBsYXllciBwYWNrZXQgYnVmZmVyCisgKgorICoJUHJvY2VzcyB0aGUgc3RhdHVzIGJpdHMgZm9yIHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIGRldGVybWluZQorICoJaWYgdGhlIGNoZWNrc3VtIHdhcyBjb21wdXRlZCBhbmQgdmVyaWZpZWQgYnkgdGhlIGhhcmR3YXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZWxvY2l0eV9yeF9jc3VtKHN0cnVjdCByeF9kZXNjICpyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwlpZiAocmQtPnJkZXNjMS5DU00gJiBDU01fSVBLVCkgeworCQlpZiAocmQtPnJkZXNjMS5DU00gJiBDU01fSVBPSykgeworCQkJaWYgKChyZC0+cmRlc2MxLkNTTSAmIENTTV9UQ1BLVCkgfHwKKwkJCQkJKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX1VEUEtUKSkgeworCQkJCWlmICghKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX1RVUE9LKSkKKwkJCQkJcmV0dXJuOworCQkJfQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJfQorCX0KK30KKworLyoqCisgKgl2ZWxvY2l0eV9yeF9jb3B5CS0JaW4gcGxhY2UgUnggY29weSBmb3Igc21hbGwgcGFja2V0cworICoJQHJ4X3NrYjogbmV0d29yayBsYXllciBwYWNrZXQgYnVmZmVyIGNhbmRpZGF0ZQorICoJQHBrdF9zaXplOiByZWNlaXZlZCBkYXRhIHNpemUKKyAqCUByZDogcmVjZWl2ZSBwYWNrZXQgZGVzY3JpcHRvcgorICoJQGRldjogbmV0d29yayBkZXZpY2UKKyAqCisgKglSZXBsYWNlIHRoZSBjdXJyZW50IHNrYiB0aGF0IGlzIHNjaGVkdWxlZCBmb3IgUnggcHJvY2Vzc2luZyBieSBhCisgKglzaG9ydGVyLCBpbW1lZGlhdGx5IGFsbG9jYXRlZCBza2IsIGlmIHRoZSByZWNlaXZlZCBwYWNrZXQgaXMgc21hbGwKKyAqCWVub3VnaC4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhlIHJlY2VpdmVkCisgKglwYWNrZXQgaXMgdG9vIGJpZyBvciBpZiBtZW1vcnkgaXMgZXhoYXVzdGVkLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X3J4X2NvcHkoc3RydWN0IHNrX2J1ZmYgKipyeF9za2IsIGludCBwa3Rfc2l6ZSwKKwkJCSAgICBzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlpbnQgcmV0ID0gLTE7CisJaWYgKHBrdF9zaXplIDwgcnhfY29weWJyZWFrKSB7CisJCXN0cnVjdCBza19idWZmICpuZXdfc2tiOworCisJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHZwdHItPmRldiwgcGt0X3NpemUgKyAyKTsKKwkJaWYgKG5ld19za2IpIHsKKwkJCW5ld19za2ItPmlwX3N1bW1lZCA9IHJ4X3NrYlswXS0+aXBfc3VtbWVkOworCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgMik7CisJCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKCpyeF9za2IsIG5ld19za2ItPmRhdGEsIHBrdF9zaXplKTsKKwkJCSpyeF9za2IgPSBuZXdfc2tiOworCQkJcmV0ID0gMDsKKwkJfQorCisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfaXBoX3JlYWxpZ24JLQlJUCBoZWFkZXIgYWxpZ25tZW50CisgKglAdnB0cjogdmVsb2NpdHkgd2UgYXJlIGhhbmRsaW5nCisgKglAc2tiOiBuZXR3b3JrIGxheWVyIHBhY2tldCBidWZmZXIKKyAqCUBwa3Rfc2l6ZTogcmVjZWl2ZWQgZGF0YSBzaXplCisgKgorICoJQWxpZ24gSVAgaGVhZGVyIG9uIGEgMiBieXRlcyBib3VuZGFyeS4gVGhpcyBiZWhhdmlvciBjYW4gYmUKKyAqCWNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZWxvY2l0eV9pcGhfcmVhbGlnbihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBrdF9zaXplKQoreworCWlmICh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX0lQX0FMSUdOKSB7CisJCW1lbW1vdmUoc2tiLT5kYXRhICsgMiwgc2tiLT5kYXRhLCBwa3Rfc2l6ZSk7CisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJfQorfQorCisKKy8qKgorICoJdmVsb2NpdHlfcmVjZWl2ZV9mcmFtZQktCXJlY2VpdmVkIHBhY2tldCBwcm9jZXNzb3IKKyAqCUB2cHRyOiB2ZWxvY2l0eSB3ZSBhcmUgaGFuZGxpbmcKKyAqCUBpZHg6IHJpbmcgaW5kZXgKKyAqCisgKglBIHBhY2tldCBoYXMgYXJyaXZlZC4gV2UgcHJvY2VzcyB0aGUgcGFja2V0IGFuZCBpZiBhcHByb3ByaWF0ZQorICoJcGFzcyB0aGUgZnJhbWUgdXAgdGhlIG5ldHdvcmsgc3RhY2sKKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9yZWNlaXZlX2ZyYW1lKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgaWR4KQoreworCXZvaWQgKCpwY2lfYWN0aW9uKShzdHJ1Y3QgcGNpX2RldiAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnZwdHItPmRldi0+c3RhdHM7CisJc3RydWN0IHZlbG9jaXR5X3JkX2luZm8gKnJkX2luZm8gPSAmKHZwdHItPnJ4LmluZm9baWR4XSk7CisJc3RydWN0IHJ4X2Rlc2MgKnJkID0gJih2cHRyLT5yeC5yaW5nW2lkeF0pOworCWludCBwa3RfbGVuID0gbGUxNl90b19jcHUocmQtPnJkZXNjMC5sZW4pICYgMHgzZmZmOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAocmQtPnJkZXNjMC5SU1IgJiAoUlNSX1NUUCB8IFJTUl9FRFApKSB7CisJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfVkVSQk9TRSwgS0VSTl9FUlIgIiAlcyA6IHRoZSByZWNlaXZlZCBmcmFtZSBzcGFuIG11bHRwbGUgUkRzLlxuIiwgdnB0ci0+ZGV2LT5uYW1lKTsKKwkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX01BUikKKwkJc3RhdHMtPm11bHRpY2FzdCsrOworCisJc2tiID0gcmRfaW5mby0+c2tiOworCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYl9kbWEsCisJCQkJICAgIHZwdHItPnJ4LmJ1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCS8qCisJICoJRHJvcCBmcmFtZSBub3QgbWVldGluZyBJRUVFIDgwMi4zCisJICovCisKKwlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19WQUxfUEtUX0xFTikgeworCQlpZiAocmQtPnJkZXNjMC5SU1IgJiBSU1JfUkwpIHsKKwkJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXBjaV9hY3Rpb24gPSBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2U7CisKKwl2ZWxvY2l0eV9yeF9jc3VtKHJkLCBza2IpOworCisJaWYgKHZlbG9jaXR5X3J4X2NvcHkoJnNrYiwgcGt0X2xlbiwgdnB0cikgPCAwKSB7CisJCXZlbG9jaXR5X2lwaF9yZWFsaWduKHZwdHIsIHNrYiwgcGt0X2xlbik7CisJCXBjaV9hY3Rpb24gPSBwY2lfdW5tYXBfc2luZ2xlOworCQlyZF9pbmZvLT5za2IgPSBOVUxMOworCX0KKworCXBjaV9hY3Rpb24odnB0ci0+cGRldiwgcmRfaW5mby0+c2tiX2RtYSwgdnB0ci0+cnguYnVmX3N6LAorCQkgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJc2tiX3B1dChza2IsIHBrdF9sZW4gLSA0KTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB2cHRyLT5kZXYpOworCisJaWYgKHZwdHItPnZsZ3JwICYmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9ERVRBRykpIHsKKwkJdmxhbl9od2FjY2VsX3J4KHNrYiwgdnB0ci0+dmxncnAsCisJCQkJc3dhYjE2KGxlMTZfdG9fY3B1KHJkLT5yZGVzYzEuUFFUQUcpKSk7CisJfSBlbHNlCisJCW5ldGlmX3J4KHNrYik7CisKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gcGt0X2xlbjsKKworCXJldHVybiAwOworfQorCisKKy8qKgorICoJdmVsb2NpdHlfcnhfc3J2CQktCXNlcnZpY2UgUlggaW50ZXJydXB0CisgKglAdnB0cjogdmVsb2NpdHkKKyAqCUBzdGF0dXM6IGFkYXB0ZXIgc3RhdHVzICh1bnVzZWQpCisgKgorICoJV2FsayB0aGUgcmVjZWl2ZSByaW5nIG9mIHRoZSB2ZWxvY2l0eSBhZGFwdGVyIGFuZCByZW1vdmUKKyAqCWFueSByZWNlaXZlZCBwYWNrZXRzIGZyb20gdGhlIHJlY2VpdmUgcXVldWUuIEhhbmQgdGhlIHJpbmcKKyAqCXNsb3RzIGJhY2sgdG8gdGhlIGFkYXB0ZXIgZm9yIHJldXNlLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X3J4X3NydihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdnB0ci0+ZGV2LT5zdGF0czsKKwlpbnQgcmRfY3VyciA9IHZwdHItPnJ4LmN1cnI7CisJaW50IHdvcmtzID0gMDsKKworCWRvIHsKKwkJc3RydWN0IHJ4X2Rlc2MgKnJkID0gdnB0ci0+cngucmluZyArIHJkX2N1cnI7CisKKwkJaWYgKCF2cHRyLT5yeC5pbmZvW3JkX2N1cnJdLnNrYikKKwkJCWJyZWFrOworCisJCWlmIChyZC0+cmRlc2MwLmxlbiAmIE9XTkVEX0JZX05JQykKKwkJCWJyZWFrOworCisJCXJtYigpOworCisJCS8qCisJCSAqCURvbid0IGRyb3AgQ0Ugb3IgUkwgZXJyb3IgZnJhbWUgYWx0aG91Z2ggUlhPSyBpcyBvZmYKKwkJICovCisJCWlmIChyZC0+cmRlc2MwLlJTUiAmIChSU1JfUlhPSyB8IFJTUl9DRSB8IFJTUl9STCkpIHsKKwkJCWlmICh2ZWxvY2l0eV9yZWNlaXZlX2ZyYW1lKHZwdHIsIHJkX2N1cnIpIDwgMCkKKwkJCQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCQl9IGVsc2UgeworCQkJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX0NSQykKKwkJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQkJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX0ZBRSkKKwkJCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzKys7CisKKwkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCX0KKworCQlyZC0+c2l6ZSB8PSBSWF9JTlRFTjsKKworCQlyZF9jdXJyKys7CisJCWlmIChyZF9jdXJyID49IHZwdHItPm9wdGlvbnMubnVtcngpCisJCQlyZF9jdXJyID0gMDsKKwl9IHdoaWxlICgrK3dvcmtzIDw9IDE1KTsKKworCXZwdHItPnJ4LmN1cnIgPSByZF9jdXJyOworCisJaWYgKCh3b3JrcyA+IDApICYmICh2ZWxvY2l0eV9yeF9yZWZpbGwodnB0cikgPiAwKSkKKwkJdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHZwdHIpOworCisJVkFSX1VTRUQoc3RhdHMpOworCXJldHVybiB3b3JrczsKK30KKworCisvKioKKyAqCXZlbG9jaXR5X2ludHIJCS0JaW50ZXJydXB0IGNhbGxiYWNrCisgKglAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCisgKglAZGV2X2luc3RhbmNlOiBpbnRlcnJ1cHRpbmcgZGV2aWNlCisgKgorICoJQ2FsbGVkIHdoZW5ldmVyIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHZlbG9jaXR5CisgKglhZGFwdGVyIElSUSBsaW5lLiBXZSBtYXkgbm90IGJlIHRoZSBzb3VyY2Ugb2YgdGhlIGludGVycnVwdAorICoJYW5kIG5lZWQgdG8gaWRlbnRpZnkgaW5pdGlhbGx5IGlmIHdlIGFyZSwgYW5kIGlmIG5vdCBleGl0IGFzCisgKgllZmZpY2llbnRseSBhcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IHZlbG9jaXR5X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7CisJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBpc3Jfc3RhdHVzOworCWludCBtYXhfY291bnQgPSAwOworCisKKwlzcGluX2xvY2soJnZwdHItPmxvY2spOworCWlzcl9zdGF0dXMgPSBtYWNfcmVhZF9pc3IodnB0ci0+bWFjX3JlZ3MpOworCisJLyogTm90IHVzID8gKi8KKwlpZiAoaXNyX3N0YXR1cyA9PSAwKSB7CisJCXNwaW5fdW5sb2NrKCZ2cHRyLT5sb2NrKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCW1hY19kaXNhYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7CisKKwkvKgorCSAqCUtlZXAgcHJvY2Vzc2luZyB0aGUgSVNSIHVudGlsIHdlIGhhdmUgY29tcGxldGVkCisJICoJcHJvY2Vzc2luZyBhbmQgdGhlIGlzcl9zdGF0dXMgYmVjb21lcyB6ZXJvCisJICovCisKKwl3aGlsZSAoaXNyX3N0YXR1cyAhPSAwKSB7CisJCW1hY193cml0ZV9pc3IodnB0ci0+bWFjX3JlZ3MsIGlzcl9zdGF0dXMpOworCQlpZiAoaXNyX3N0YXR1cyAmICh+KElTUl9QUlhJIHwgSVNSX1BQUlhJIHwgSVNSX1BUWEkgfCBJU1JfUFBUWEkpKSkKKwkJCXZlbG9jaXR5X2Vycm9yKHZwdHIsIGlzcl9zdGF0dXMpOworCQlpZiAoaXNyX3N0YXR1cyAmIChJU1JfUFJYSSB8IElTUl9QUFJYSSkpCisJCQltYXhfY291bnQgKz0gdmVsb2NpdHlfcnhfc3J2KHZwdHIsIGlzcl9zdGF0dXMpOworCQlpZiAoaXNyX3N0YXR1cyAmIChJU1JfUFRYSSB8IElTUl9QUFRYSSkpCisJCQltYXhfY291bnQgKz0gdmVsb2NpdHlfdHhfc3J2KHZwdHIsIGlzcl9zdGF0dXMpOworCQlpc3Jfc3RhdHVzID0gbWFjX3JlYWRfaXNyKHZwdHItPm1hY19yZWdzKTsKKwkJaWYgKG1heF9jb3VudCA+IHZwdHItPm9wdGlvbnMuaW50X3dvcmtzKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXhjZXNzaXZlIHdvcmsgYXQgaW50ZXJydXB0LlxuIiwKKwkJCQlkZXYtPm5hbWUpOworCQkJbWF4X2NvdW50ID0gMDsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmdnB0ci0+bG9jayk7CisJbWFjX2VuYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKKworfQorCisvKioKKyAqCXZlbG9jaXR5X29wZW4JCS0JaW50ZXJmYWNlIGFjdGl2YXRpb24gY2FsbGJhY2sKKyAqCUBkZXY6IG5ldHdvcmsgbGF5ZXIgZGV2aWNlIHRvIG9wZW4KKyAqCisgKglDYWxsZWQgd2hlbiB0aGUgbmV0d29yayBsYXllciBicmluZ3MgdGhlIGludGVyZmFjZSB1cC4gUmV0dXJucworICoJYSBuZWdhdGl2ZSBwb3NpeCBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIG9yIHplcm8gb24gc3VjY2Vzcy4KKyAqCisgKglBbGwgdGhlIHJpbmcgYWxsb2NhdGlvbiBhbmQgc2V0IHVwIGlzIGRvbmUgb24gb3BlbiBmb3IgdGhpcworICoJYWRhcHRlciB0byBtaW5pbWlzZSBtZW1vcnkgdXNhZ2Ugd2hlbiBpbmFjdGl2ZQorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKworCXJldCA9IHZlbG9jaXR5X2luaXRfcmluZ3ModnB0ciwgZGV2LT5tdHUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIEVuc3VyZSBjaGlwIGlzIHJ1bm5pbmcgKi8KKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EMCk7CisKKwl2ZWxvY2l0eV9naXZlX21hbnlfcnhfZGVzY3ModnB0cik7CisKKwl2ZWxvY2l0eV9pbml0X3JlZ2lzdGVycyh2cHRyLCBWRUxPQ0lUWV9JTklUX0NPTEQpOworCisJcmV0ID0gcmVxdWVzdF9pcnEodnB0ci0+cGRldi0+aXJxLCAmdmVsb2NpdHlfaW50ciwgSVJRRl9TSEFSRUQsCisJCQkgIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQkvKiBQb3dlciBkb3duIHRoZSBjaGlwICovCisJCXBjaV9zZXRfcG93ZXJfc3RhdGUodnB0ci0+cGRldiwgUENJX0QzaG90KTsKKwkJdmVsb2NpdHlfZnJlZV9yaW5ncyh2cHRyKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWFjX2VuYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJdnB0ci0+ZmxhZ3MgfD0gVkVMT0NJVFlfRkxBR1NfT1BFTkVEOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfc2h1dGRvd24JLQlzaHV0IGRvd24gdGhlIGNoaXAKKyAqCUB2cHRyOiB2ZWxvY2l0eSB0byBkZWFjdGl2YXRlCisgKgorICoJU2h1dHMgZG93biB0aGUgaW50ZXJuYWwgb3BlcmF0aW9ucyBvZiB0aGUgdmVsb2NpdHkgYW5kCisgKglkaXNhYmxlcyBpbnRlcnJ1cHRzLCBhdXRvcG9sbGluZywgdHJhbnNtaXQgYW5kIHJlY2VpdmUKKyAqLworc3RhdGljIHZvaWQgdmVsb2NpdHlfc2h1dGRvd24oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCit7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwltYWNfZGlzYWJsZV9pbnQocmVncyk7CisJd3JpdGVsKENSMF9TVE9QLCAmcmVncy0+Q1IwU2V0KTsKKwl3cml0ZXcoMHhGRkZGLCAmcmVncy0+VERDU1JDbHIpOworCXdyaXRlYigweEZGLCAmcmVncy0+UkRDU1JDbHIpOworCXNhZmVfZGlzYWJsZV9taWlfYXV0b3BvbGwocmVncyk7CisJbWFjX2NsZWFyX2lzcihyZWdzKTsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9jaGFuZ2VfbXR1CS0JTVRVIGNoYW5nZSBjYWxsYmFjaworICoJQGRldjogbmV0d29yayBkZXZpY2UKKyAqCUBuZXdfbXR1OiBkZXNpcmVkIE1UVQorICoKKyAqCUhhbmRsZSByZXF1ZXN0cyBmcm9tIHRoZSBuZXR3b3JraW5nIGxheWVyIGZvciBNVFUgY2hhbmdlIG9uCisgKgl0aGlzIGludGVyZmFjZS4gSXQgZ2V0cyBjYWxsZWQgb24gYSBjaGFuZ2UgYnkgdGhlIG5ldHdvcmsgbGF5ZXIuCisgKglSZXR1cm4gemVybyBmb3Igc3VjY2VzcyBvciBuZWdhdGl2ZSBwb3NpeCBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IHZlbG9jaXR5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJaWYgKChuZXdfbXR1IDwgVkVMT0NJVFlfTUlOX01UVSkgfHwgbmV3X210dSA+IChWRUxPQ0lUWV9NQVhfTVRVKSkgeworCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0VSUiwgS0VSTl9OT1RJQ0UgIiVzOiBJbnZhbGlkIE1UVS5cbiIsCisJCQkJdnB0ci0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfMDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlkZXYtPm10dSA9IG5ld19tdHU7CisJCWdvdG8gb3V0XzA7CisJfQorCisJaWYgKGRldi0+bXR1ICE9IG5ld19tdHUpIHsKKwkJc3RydWN0IHZlbG9jaXR5X2luZm8gKnRtcF92cHRyOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzdHJ1Y3QgcnhfaW5mbyByeDsKKwkJc3RydWN0IHR4X2luZm8gdHg7CisKKwkJdG1wX3ZwdHIgPSBremFsbG9jKHNpemVvZigqdG1wX3ZwdHIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0bXBfdnB0cikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0XzA7CisJCX0KKworCQl0bXBfdnB0ci0+ZGV2ID0gZGV2OworCQl0bXBfdnB0ci0+cGRldiA9IHZwdHItPnBkZXY7CisJCXRtcF92cHRyLT5vcHRpb25zID0gdnB0ci0+b3B0aW9uczsKKwkJdG1wX3ZwdHItPnR4Lm51bXEgPSB2cHRyLT50eC5udW1xOworCisJCXJldCA9IHZlbG9jaXR5X2luaXRfcmluZ3ModG1wX3ZwdHIsIG5ld19tdHUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWVfdG1wX3ZwdHJfMTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdnB0ci0+bG9jaywgZmxhZ3MpOworCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJdmVsb2NpdHlfc2h1dGRvd24odnB0cik7CisKKwkJcnggPSB2cHRyLT5yeDsKKwkJdHggPSB2cHRyLT50eDsKKworCQl2cHRyLT5yeCA9IHRtcF92cHRyLT5yeDsKKwkJdnB0ci0+dHggPSB0bXBfdnB0ci0+dHg7CisKKwkJdG1wX3ZwdHItPnJ4ID0gcng7CisJCXRtcF92cHRyLT50eCA9IHR4OworCisJCWRldi0+bXR1ID0gbmV3X210dTsKKworCQl2ZWxvY2l0eV9naXZlX21hbnlfcnhfZGVzY3ModnB0cik7CisKKwkJdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9DT0xEKTsKKworCQltYWNfZW5hYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOworCisJCXZlbG9jaXR5X2ZyZWVfcmluZ3ModG1wX3ZwdHIpOworCitvdXRfZnJlZV90bXBfdnB0cl8xOgorCQlrZnJlZSh0bXBfdnB0cik7CisJfQorb3V0XzA6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKgl2ZWxvY2l0eV9taWlfaW9jdGwJCS0JTUlJIGlvY3RsIGhhbmRsZXIKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKglAaWZyOiB0aGUgaWZyZXEgYmxvY2sgZm9yIHRoZSBpb2N0bAorICoJQGNtZDogdGhlIGNvbW1hbmQKKyAqCisgKglQcm9jZXNzIE1JSSByZXF1ZXN0cyBtYWRlIHZpYSBpb2N0bCBmcm9tIHRoZSBuZXR3b3JrIGxheWVyLiBUaGVzZQorICoJYXJlIHVzZWQgYnkgdG9vbHMgbGlrZSBrdWR6dSB0byBpbnRlcnJvZ2F0ZSB0aGUgbGluayBzdGF0ZSBvZiB0aGUKKyAqCWhhcmR3YXJlCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfbWlpX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlkYXRhID0gaWZfbWlpKGlmcik7CisJaW50IGVycjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR01JSVBIWToKKwkJbWlpZGF0YS0+cGh5X2lkID0gcmVhZGIoJnJlZ3MtPk1JSUFEUikgJiAweDFmOworCQlicmVhazsKKwljYXNlIFNJT0NHTUlJUkVHOgorCQlpZiAodmVsb2NpdHlfbWlpX3JlYWQodnB0ci0+bWFjX3JlZ3MsIG1paWRhdGEtPnJlZ19udW0gJiAweDFmLCAmKG1paWRhdGEtPnZhbF9vdXQpKSA8IDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU01JSVJFRzoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKKwkJZXJyID0gdmVsb2NpdHlfbWlpX3dyaXRlKHZwdHItPm1hY19yZWdzLCBtaWlkYXRhLT5yZWdfbnVtICYgMHgxZiwgbWlpZGF0YS0+dmFsX2luKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOworCQljaGVja19jb25uZWN0aW9uX3R5cGUodnB0ci0+bWFjX3JlZ3MpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqCXZlbG9jaXR5X2lvY3RsCQktCWlvY3RsIGVudHJ5IHBvaW50CisgKglAZGV2OiBuZXR3b3JrIGRldmljZQorICoJQHJxOiBpbnRlcmZhY2UgcmVxdWVzdCBpb2N0bAorICoJQGNtZDogY29tbWFuZCBjb2RlCisgKgorICoJQ2FsbGVkIHdoZW4gdGhlIHVzZXIgaXNzdWVzIGFuIGlvY3RsIHJlcXVlc3QgdG8gdGhlIG5ldHdvcmsKKyAqCWRldmljZSBpbiBxdWVzdGlvbi4gVGhlIHZlbG9jaXR5IGludGVyZmFjZSBzdXBwb3J0cyBNSUkuCisgKi8KK3N0YXRpYyBpbnQgdmVsb2NpdHlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKworCS8qIElmIHdlIGFyZSBhc2tlZCBmb3IgaW5mb3JtYXRpb24gYW5kIHRoZSBkZXZpY2UgaXMgcG93ZXIKKwkgICBzYXZpbmcgdGhlbiB3ZSBuZWVkIHRvIGJyaW5nIHRoZSBkZXZpY2UgYmFjayB1cCB0byB0YWxrIHRvIGl0ICovCisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDApOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHTUlJUEhZOgkvKiBHZXQgYWRkcmVzcyBvZiBNSUkgUEhZIGluIHVzZS4gKi8KKwljYXNlIFNJT0NHTUlJUkVHOgkvKiBSZWFkIE1JSSBQSFkgcmVnaXN0ZXIuICovCisJY2FzZSBTSU9DU01JSVJFRzoJLyogV3JpdGUgdG8gTUlJIFBIWSByZWdpc3Rlci4gKi8KKwkJcmV0ID0gdmVsb2NpdHlfbWlpX2lvY3RsKGRldiwgcnEsIGNtZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EM2hvdCk7CisKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfZ2V0X3N0YXR1cwktCXN0YXRpc3RpY3MgY2FsbGJhY2sKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKgorICoJQ2FsbGJhY2sgZnJvbSB0aGUgbmV0d29yayBsYXllciB0byBhbGxvdyBkcml2ZXIgc3RhdGlzdGljcworICoJdG8gYmUgcmVzeW5jaHJvbml6ZWQgd2l0aCBoYXJkd2FyZSBjb2xsZWN0ZWQgc3RhdGUuIEluIHRoZQorICoJY2FzZSBvZiB0aGUgdmVsb2NpdHkgd2UgbmVlZCB0byBwdWxsIHRoZSBNSUIgY291bnRlcnMgZnJvbQorICoJdGhlIGhhcmR3YXJlIGludG8gdGhlIGNvdW50ZXJzIGJlZm9yZSBsZXR0aW5nIHRoZSBuZXR3b3JrCisgKglsYXllciBkaXNwbGF5IHRoZW0uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdmVsb2NpdHlfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogSWYgdGhlIGhhcmR3YXJlIGlzIGRvd24sIGRvbid0IHRvdWNoIE1JSSAqLworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gJmRldi0+c3RhdHM7CisKKwlzcGluX2xvY2tfaXJxKCZ2cHRyLT5sb2NrKTsKKwl2ZWxvY2l0eV91cGRhdGVfaHdfbWlicyh2cHRyKTsKKwlzcGluX3VubG9ja19pcnEoJnZwdHItPmxvY2spOworCisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzID0gdnB0ci0+bWliX2NvdW50ZXJbSFdfTUlCX2lmUnhBbGxQa3RzXTsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZlJ4RXJyb3JQa3RzXTsKKwlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPSB2cHRyLT5taWJfY291bnRlcltIV19NSUJfaWZJblJhbmdlTGVuZ3RoRXJyb3JzXTsKKworLy8gIHVuc2lnbmVkIGxvbmcgICByeF9kcm9wcGVkOyAgICAgLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycyAgICAqLworCWRldi0+c3RhdHMuY29sbGlzaW9ucyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZlR4RXRoZXJDb2xsaXNpb25zXTsKKwkvKiBkZXRhaWxlZCByeF9lcnJvcnM6ICovCisvLyAgdW5zaWduZWQgbG9uZyAgIHJ4X2xlbmd0aF9lcnJvcnM7CisvLyAgdW5zaWduZWQgbG9uZyAgIHJ4X292ZXJfZXJyb3JzOyAgICAgLyogcmVjZWl2ZXIgcmluZyBidWZmIG92ZXJmbG93ICAqLworCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZlJ4UGt0Q1JDRV07CisvLyAgdW5zaWduZWQgbG9uZyAgIHJ4X2ZyYW1lX2Vycm9yczsgICAgLyogcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvciAqLworLy8gIHVuc2lnbmVkIGxvbmcgICByeF9maWZvX2Vycm9yczsgICAgIC8qIHJlY3YnciBmaWZvIG92ZXJydW4gICAgICAqLworLy8gIHVuc2lnbmVkIGxvbmcgICByeF9taXNzZWRfZXJyb3JzOyAgIC8qIHJlY2VpdmVyIG1pc3NlZCBwYWNrZXQgICAqLworCisJLyogZGV0YWlsZWQgdHhfZXJyb3JzICovCisvLyAgdW5zaWduZWQgbG9uZyAgIHR4X2ZpZm9fZXJyb3JzOworCisJcmV0dXJuICZkZXYtPnN0YXRzOworfQorCisvKioKKyAqCXZlbG9jaXR5X2Nsb3NlCQktCWNsb3NlIGFkYXB0ZXIgY2FsbGJhY2sKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKgorICoJQ2FsbGJhY2sgZnJvbSB0aGUgbmV0d29yayBsYXllciB3aGVuIHRoZSB2ZWxvY2l0eSBpcyBiZWluZworICoJZGVhY3RpdmF0ZWQgYnkgdGhlIG5ldHdvcmsgbGF5ZXIKKyAqLworc3RhdGljIGludCB2ZWxvY2l0eV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl2ZWxvY2l0eV9zaHV0ZG93bih2cHRyKTsKKworCWlmICh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX1dPTF9FTkFCTEVEKQorCQl2ZWxvY2l0eV9nZXRfaXAodnB0cik7CisJaWYgKGRldi0+aXJxICE9IDApCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJLyogUG93ZXIgZG93biB0aGUgY2hpcCAqLworCXBjaV9zZXRfcG93ZXJfc3RhdGUodnB0ci0+cGRldiwgUENJX0QzaG90KTsKKworCXZlbG9jaXR5X2ZyZWVfcmluZ3ModnB0cik7CisKKwl2cHRyLT5mbGFncyAmPSAoflZFTE9DSVRZX0ZMQUdTX09QRU5FRCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfeG1pdAkJLQl0cmFuc21pdCBwYWNrZXQgY2FsbGJhY2sKKyAqCUBza2I6IGJ1ZmZlciB0byB0cmFuc21pdAorICoJQGRldjogbmV0d29yayBkZXZpY2UKKyAqCisgKglDYWxsZWQgYnkgdGhlIG5ldHdvciBsYXllciB0byByZXF1ZXN0IGEgcGFja2V0IGlzIHF1ZXVlZCB0bworICoJdGhlIHZlbG9jaXR5LiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIG5ldGRldl90eF90IHZlbG9jaXR5X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHFudW0gPSAwOworCXN0cnVjdCB0eF9kZXNjICp0ZF9wdHI7CisJc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKnRkaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwa3RsZW47CisJX19sZTE2IGxlbjsKKwlpbnQgaW5kZXg7CisKKwlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQorCQlnb3RvIG91dDsKKwlwa3RsZW4gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHNrYi0+bGVuLCBFVEhfWkxFTik7CisKKwlsZW4gPSBjcHVfdG9fbGUxNihwa3RsZW4pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKKworCWluZGV4ID0gdnB0ci0+dHguY3VycltxbnVtXTsKKwl0ZF9wdHIgPSAmKHZwdHItPnR4LnJpbmdzW3FudW1dW2luZGV4XSk7CisJdGRpbmZvID0gJih2cHRyLT50eC5pbmZvc1txbnVtXVtpbmRleF0pOworCisJdGRfcHRyLT50ZGVzYzEuVENSID0gVENSMF9USUM7CisJdGRfcHRyLT50ZF9idWZbMF0uc2l6ZSAmPSB+VERfUVVFVUU7CisKKwkvKgorCSAqCU1hcCB0aGUgbGluZWFyIG5ldHdvcmsgYnVmZmVyIGludG8gUENJIHNwYWNlIGFuZAorCSAqCWFkZCBpdCB0byB0aGUgdHJhbnNtaXQgcmluZy4KKwkgKi8KKwl0ZGluZm8tPnNrYiA9IHNrYjsKKwl0ZGluZm8tPnNrYl9kbWFbMF0gPSBwY2lfbWFwX3NpbmdsZSh2cHRyLT5wZGV2LCBza2ItPmRhdGEsIHBrdGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJdGRfcHRyLT50ZGVzYzAubGVuID0gbGVuOworCXRkX3B0ci0+dGRfYnVmWzBdLnBhX2xvdyA9IGNwdV90b19sZTMyKHRkaW5mby0+c2tiX2RtYVswXSk7CisJdGRfcHRyLT50ZF9idWZbMF0ucGFfaGlnaCA9IDA7CisJdGRfcHRyLT50ZF9idWZbMF0uc2l6ZSA9IGxlbjsKKwl0ZGluZm8tPm5za2JfZG1hID0gMTsKKworCXRkX3B0ci0+dGRlc2MxLmNtZCA9IFRDUExTX05PUk1BTCArICh0ZGluZm8tPm5za2JfZG1hICsgMSkgKiAxNjsKKworCWlmICh2cHRyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdGRfcHRyLT50ZGVzYzEudmxhbiA9IGNwdV90b19sZTE2KHZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJdGRfcHRyLT50ZGVzYzEuVENSIHw9IFRDUjBfVkVUQUc7CisJfQorCisJLyoKKwkgKglIYW5kbGUgaGFyZHdhcmUgY2hlY2tzdW0KKwkgKi8KKwlpZiAoKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfVFhfQ1NVTSkKKwkJCQkgJiYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7CisJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXAgPSBpcF9oZHIoc2tiKTsKKwkJaWYgKGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJCXRkX3B0ci0+dGRlc2MxLlRDUiB8PSBUQ1IwX1RDUENLOworCQllbHNlIGlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApCisJCQl0ZF9wdHItPnRkZXNjMS5UQ1IgfD0gKFRDUjBfVURQQ0spOworCQl0ZF9wdHItPnRkZXNjMS5UQ1IgfD0gVENSMF9JUENLOworCX0KKwl7CisKKwkJaW50IHByZXYgPSBpbmRleCAtIDE7CisKKwkJaWYgKHByZXYgPCAwKQorCQkJcHJldiA9IHZwdHItPm9wdGlvbnMubnVtdHggLSAxOworCQl0ZF9wdHItPnRkZXNjMC5sZW4gfD0gT1dORURfQllfTklDOworCQl2cHRyLT50eC51c2VkW3FudW1dKys7CisJCXZwdHItPnR4LmN1cnJbcW51bV0gPSAoaW5kZXggKyAxKSAlIHZwdHItPm9wdGlvbnMubnVtdHg7CisKKwkJaWYgKEFWQUlMX1REKHZwdHIsIHFudW0pIDwgMSkKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCQl0ZF9wdHIgPSAmKHZwdHItPnR4LnJpbmdzW3FudW1dW3ByZXZdKTsKKwkJdGRfcHRyLT50ZF9idWZbMF0uc2l6ZSB8PSBURF9RVUVVRTsKKwkJbWFjX3R4X3F1ZXVlX3dha2UodnB0ci0+bWFjX3JlZ3MsIHFudW0pOworCX0KKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CitvdXQ6CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZlbG9jaXR5X25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IHZlbG9jaXR5X29wZW4sCiAJLm5kb19zdG9wCQk9IHZlbG9jaXR5X2Nsb3NlLApAQCAtODY1LDYgKzI1NTksOTMgQEAKIH07CiAKIC8qKgorICoJdmVsb2NpdHlfaW5pdF9pbmZvCS0JaW5pdCBwcml2YXRlIGRhdGEKKyAqCUBwZGV2OiBQQ0kgZGV2aWNlCisgKglAdnB0cjogVmVsb2NpdHkgaW5mbworICoJQGluZm86IEJvYXJkIHR5cGUKKyAqCisgKglTZXQgdXAgdGhlIGluaXRpYWwgdmVsb2NpdHlfaW5mbyBzdHJ1Y3QgZm9yIHRoZSBkZXZpY2UgdGhhdCBoYXMgYmVlbgorICoJZGlzY292ZXJlZC4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHZlbG9jaXR5X2luaXRfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLAorCQkJCQkgY29uc3Qgc3RydWN0IHZlbG9jaXR5X2luZm9fdGJsICppbmZvKQoreworCW1lbXNldCh2cHRyLCAwLCBzaXplb2Yoc3RydWN0IHZlbG9jaXR5X2luZm8pKTsKKworCXZwdHItPnBkZXYgPSBwZGV2OworCXZwdHItPmNoaXBfaWQgPSBpbmZvLT5jaGlwX2lkOworCXZwdHItPnR4Lm51bXEgPSBpbmZvLT50eHF1ZXVlOworCXZwdHItPm11bHRpY2FzdF9saW1pdCA9IE1DQU1fU0laRTsKKwlzcGluX2xvY2tfaW5pdCgmdnB0ci0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnZwdHItPmxpc3QpOworfQorCisvKioKKyAqCXZlbG9jaXR5X2dldF9wY2lfaW5mbwktCXJldHJpZXZlIFBDSSBpbmZvIGZvciBkZXZpY2UKKyAqCUB2cHRyOiB2ZWxvY2l0eSBkZXZpY2UKKyAqCUBwZGV2OiBQQ0kgZGV2aWNlIGl0IG1hdGNoZXMKKyAqCisgKglSZXRyaWV2ZSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGF0YSB0aGF0IGludGVyZXN0cyB1cyBmcm9tCisgKgl0aGUga2VybmVsIFBDSSBsYXllcgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2ZWxvY2l0eV9nZXRfcGNpX2luZm8oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXZwdHItPnJldl9pZCA9IHBkZXYtPnJldmlzaW9uOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwl2cHRyLT5pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJdnB0ci0+bWVtYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKworCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfSU8pKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSAgICJyZWdpb24gIzAgaXMgbm90IGFuIEkvTyByZXNvdXJjZSwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMSkgJiBJT1JFU09VUkNFX0lPKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkgICAicmVnaW9uICMxIGlzIGFuIEkvTyByZXNvdXJjZSwgYWJvcnRpbmcuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkgPCBWRUxPQ0lUWV9JT19TSVpFKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lvbiAjMSBpcyB0b28gc21hbGwuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXZwdHItPnBkZXYgPSBwZGV2OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoJdmVsb2NpdHlfcHJpbnRfaW5mbwktCXBlciBkcml2ZXIgZGF0YQorICoJQHZwdHI6IHZlbG9jaXR5CisgKgorICoJUHJpbnQgcGVyIGRyaXZlciBkYXRhIGFzIHRoZSBrZXJuZWwgZHJpdmVyIGZpbmRzIFZlbG9jaXR5CisgKgloYXJkd2FyZQorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdmVsb2NpdHlfcHJpbnRfaW5mbyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdnB0ci0+ZGV2OworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBkZXYtPm5hbWUsIGdldF9jaGlwX25hbWUodnB0ci0+Y2hpcF9pZCkpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBFdGhlcm5ldCBBZGRyZXNzOiAlMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWFxuIiwKKwkJZGV2LT5uYW1lLAorCQlkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAorCQlkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdKTsKK30KKworc3RhdGljIHUzMiB2ZWxvY2l0eV9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCXJldHVybiBCWVRFX1JFR19CSVRTX0lTX09OKFBIWVNSMF9MSU5LR0QsICZyZWdzLT5QSFlTUjApID8gMSA6IDA7Cit9CisKKworLyoqCiAgKgl2ZWxvY2l0eV9mb3VuZDEJCS0Jc2V0IHVwIGRpc2NvdmVyZWQgdmVsb2NpdHkgY2FyZAogICoJQHBkZXY6IFBDSSBkZXZpY2UKICAqCUBlbnQ6IFBDSSBkZXZpY2UgdGFibGUgZW50cnkgdGhhdCBtYXRjaGVkCkBAIC04NzIsNyArMjY1Myw2IEBACiAgKglDb25maWd1cmUgYSBkaXNjb3ZlcmVkIGFkYXB0ZXIgZnJvbSBzY3JhdGNoLiBSZXR1cm4gYSBuZWdhdGl2ZQogICoJZXJybm8gZXJyb3IgY29kZSBvbiBmYWlsdXJlIHBhdGhzLgogICovCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IHZlbG9jaXR5X2ZvdW5kMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdGF0aWMgaW50IGZpcnN0ID0gMTsKQEAgLTg4MSw3ICsyNjYxLDcgQEAKIAljb25zdCBjaGFyICpkcnZfc3RyaW5nOwogCWNvbnN0IHN0cnVjdCB2ZWxvY2l0eV9pbmZvX3RibCAqaW5mbyA9ICZjaGlwX2luZm9fdGFibGVbZW50LT5kcml2ZXJfZGF0YV07CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHI7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzOworCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzOwogCWludCByZXQgPSAtRU5PTUVNOwogCiAJLyogRklYTUU6IHRoaXMgZHJpdmVyLCBsaWtlIGFsbW9zdCBhbGwgb3RoZXIgZXRoZXJuZXQgZHJpdmVycywKQEAgLTk3Niw5ICsyNzU2LDYgQEAKIAlkZXYtPm5ldGRldl9vcHMgPSAmdmVsb2NpdHlfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnZlbG9jaXR5X2V0aHRvb2xfb3BzOwogCi0jaWZkZWYgIFZFTE9DSVRZX1pFUk9fQ09QWV9TVVBQT1JUCi0JZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwotI2VuZGlmCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwKIAkJTkVUSUZfRl9IV19WTEFOX1JYOwogCkBAIC0xMDI0LDEzNzggKzI4MDEsMjY0IEBACiAJZ290byBvdXQ7CiB9CiAKKworI2lmZGVmIENPTkZJR19QTQogLyoqCi0gKgl2ZWxvY2l0eV9wcmludF9pbmZvCS0JcGVyIGRyaXZlciBkYXRhCi0gKglAdnB0cjogdmVsb2NpdHkKKyAqCXdvbF9jYWxjX2NyYwkJLQlXT0wgQ1JDCisgKglAcGF0dGVybjogZGF0YSBwYXR0ZXJuCisgKglAbWFza19wYXR0ZXJuOiBtYXNrCiAgKgotICoJUHJpbnQgcGVyIGRyaXZlciBkYXRhIGFzIHRoZSBrZXJuZWwgZHJpdmVyIGZpbmRzIFZlbG9jaXR5Ci0gKgloYXJkd2FyZQorICoJQ29tcHV0ZSB0aGUgd2FrZSBvbiBsYW4gY3JjIGhhc2hlcyBmb3IgdGhlIHBhY2tldCBoZWFkZXIKKyAqCXdlIGFyZSBpbnRlcmVzdGVkIGluLgogICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCB2ZWxvY2l0eV9wcmludF9pbmZvKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQorc3RhdGljIHUxNiB3b2xfY2FsY19jcmMoaW50IHNpemUsIHU4ICpwYXR0ZXJuLCB1OCAqbWFza19wYXR0ZXJuKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2cHRyLT5kZXY7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogJXNcbiIsIGRldi0+bmFtZSwgZ2V0X2NoaXBfbmFtZSh2cHRyLT5jaGlwX2lkKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEV0aGVybmV0IEFkZHJlc3M6ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlkZXYtPm5hbWUsCi0JCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCi0JCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2luaXRfaW5mbwktCWluaXQgcHJpdmF0ZSBkYXRhCi0gKglAcGRldjogUENJIGRldmljZQotICoJQHZwdHI6IFZlbG9jaXR5IGluZm8KLSAqCUBpbmZvOiBCb2FyZCB0eXBlCi0gKgotICoJU2V0IHVwIHRoZSBpbml0aWFsIHZlbG9jaXR5X2luZm8gc3RydWN0IGZvciB0aGUgZGV2aWNlIHRoYXQgaGFzIGJlZW4KLSAqCWRpc2NvdmVyZWQuCi0gKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IHZlbG9jaXR5X2luaXRfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkJIHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLAotCQkJCQkgY29uc3Qgc3RydWN0IHZlbG9jaXR5X2luZm9fdGJsICppbmZvKQotewotCW1lbXNldCh2cHRyLCAwLCBzaXplb2Yoc3RydWN0IHZlbG9jaXR5X2luZm8pKTsKLQotCXZwdHItPnBkZXYgPSBwZGV2OwotCXZwdHItPmNoaXBfaWQgPSBpbmZvLT5jaGlwX2lkOwotCXZwdHItPnR4Lm51bXEgPSBpbmZvLT50eHF1ZXVlOwotCXZwdHItPm11bHRpY2FzdF9saW1pdCA9IE1DQU1fU0laRTsKLQlzcGluX2xvY2tfaW5pdCgmdnB0ci0+bG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJnZwdHItPmxpc3QpOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2dldF9wY2lfaW5mbwktCXJldHJpZXZlIFBDSSBpbmZvIGZvciBkZXZpY2UKLSAqCUB2cHRyOiB2ZWxvY2l0eSBkZXZpY2UKLSAqCUBwZGV2OiBQQ0kgZGV2aWNlIGl0IG1hdGNoZXMKLSAqCi0gKglSZXRyaWV2ZSB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZGF0YSB0aGF0IGludGVyZXN0cyB1cyBmcm9tCi0gKgl0aGUga2VybmVsIFBDSSBsYXllcgotICovCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHZlbG9jaXR5X2dldF9wY2lfaW5mbyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0JdnB0ci0+cmV2X2lkID0gcGRldi0+cmV2aXNpb247Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCXZwdHItPmlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKLQl2cHRyLT5tZW1hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCi0JaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9JTykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJICAgInJlZ2lvbiAjMCBpcyBub3QgYW4gSS9PIHJlc291cmNlLCBhYm9ydGluZy5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAxKSAmIElPUkVTT1VSQ0VfSU8pKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSAgICJyZWdpb24gIzEgaXMgYW4gSS9PIHJlc291cmNlLCBhYm9ydGluZy5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSA8IFZFTE9DSVRZX0lPX1NJWkUpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaW9uICMxIGlzIHRvbyBzbWFsbC5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdnB0ci0+cGRldiA9IHBkZXY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9pbml0X2RtYV9yaW5ncwktCXNldCB1cCBETUEgcmluZ3MKLSAqCUB2cHRyOiBWZWxvY2l0eSB0byBzZXQgdXAKLSAqCi0gKglBbGxvY2F0ZSBQQ0kgbWFwcGVkIERNQSByaW5ncyBmb3IgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGxheWVyCi0gKgl0byB1c2UuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9pbml0X2RtYV9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQlzdHJ1Y3QgdmVsb2NpdHlfb3B0ICpvcHQgPSAmdnB0ci0+b3B0aW9uczsKLQljb25zdCB1bnNpZ25lZCBpbnQgcnhfcmluZ19zaXplID0gb3B0LT5udW1yeCAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyk7Ci0JY29uc3QgdW5zaWduZWQgaW50IHR4X3Jpbmdfc2l6ZSA9IG9wdC0+bnVtdHggKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdnB0ci0+cGRldjsKLQlkbWFfYWRkcl90IHBvb2xfZG1hOwotCXZvaWQgKnBvb2w7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIGFsbCBSRC9URCByaW5ncyBhIHNpbmdsZSBwb29sLgotCSAqCi0JICogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSBmdWxmaWxscyB0aGUgcmVxdWlyZW1lbnQgZm9yIDY0IGJ5dGVzCi0JICogYWxpZ25tZW50Ci0JICovCi0JcG9vbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4X3Jpbmdfc2l6ZSAqIHZwdHItPnR4Lm51bXEgKwotCQkJCSAgICByeF9yaW5nX3NpemUsICZwb29sX2RtYSk7Ci0JaWYgKCFwb29sKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIDogRE1BIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCi0JCQl2cHRyLT5kZXYtPm5hbWUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl2cHRyLT5yeC5yaW5nID0gcG9vbDsKLQl2cHRyLT5yeC5wb29sX2RtYSA9IHBvb2xfZG1hOwotCi0JcG9vbCArPSByeF9yaW5nX3NpemU7Ci0JcG9vbF9kbWEgKz0gcnhfcmluZ19zaXplOwotCi0JZm9yIChpID0gMDsgaSA8IHZwdHItPnR4Lm51bXE7IGkrKykgewotCQl2cHRyLT50eC5yaW5nc1tpXSA9IHBvb2w7Ci0JCXZwdHItPnR4LnBvb2xfZG1hW2ldID0gcG9vbF9kbWE7Ci0JCXBvb2wgKz0gdHhfcmluZ19zaXplOwotCQlwb29sX2RtYSArPSB0eF9yaW5nX3NpemU7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfZnJlZV9kbWFfcmluZ3MJLQlmcmVlIFBDSSByaW5nIHBvaW50ZXJzCi0gKglAdnB0cjogVmVsb2NpdHkgdG8gZnJlZSBmcm9tCi0gKgotICoJQ2xlYW4gdXAgdGhlIFBDSSByaW5nIGJ1ZmZlcnMgYWxsb2NhdGVkIHRvIHRoaXMgdmVsb2NpdHkuCi0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV9kbWFfcmluZ3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0JY29uc3QgaW50IHNpemUgPSB2cHRyLT5vcHRpb25zLm51bXJ4ICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKSArCi0JCXZwdHItPm9wdGlvbnMubnVtdHggKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpICogdnB0ci0+dHgubnVtcTsKLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQodnB0ci0+cGRldiwgc2l6ZSwgdnB0ci0+cngucmluZywgdnB0ci0+cngucG9vbF9kbWEpOwotfQotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9naXZlX21hbnlfcnhfZGVzY3Moc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKLQlpbnQgYXZhaWwsIGRpcnR5LCB1bnVzYWJsZTsKLQotCS8qCi0JICogUkQgbnVtYmVyIG11c3QgYmUgZXF1YWwgdG8gNFggcGVyIGhhcmR3YXJlIHNwZWMKLQkgKiAocHJvZ3JhbW1pbmcgZ3VpZGUgcmV2IDEuMjAsIHAuMTMpCi0JICovCi0JaWYgKHZwdHItPnJ4LmZpbGxlZCA8IDQpCi0JCXJldHVybjsKLQotCXdtYigpOwotCi0JdW51c2FibGUgPSB2cHRyLT5yeC5maWxsZWQgJiAweDAwMDM7Ci0JZGlydHkgPSB2cHRyLT5yeC5kaXJ0eSAtIHVudXNhYmxlOwotCWZvciAoYXZhaWwgPSB2cHRyLT5yeC5maWxsZWQgJiAweGZmZmM7IGF2YWlsOyBhdmFpbC0tKSB7Ci0JCWRpcnR5ID0gKGRpcnR5ID4gMCkgPyBkaXJ0eSAtIDEgOiB2cHRyLT5vcHRpb25zLm51bXJ4IC0gMTsKLQkJdnB0ci0+cngucmluZ1tkaXJ0eV0ucmRlc2MwLmxlbiB8PSBPV05FRF9CWV9OSUM7Ci0JfQotCi0Jd3JpdGV3KHZwdHItPnJ4LmZpbGxlZCAmIDB4ZmZmYywgJnJlZ3MtPlJCUkRVKTsKLQl2cHRyLT5yeC5maWxsZWQgPSB1bnVzYWJsZTsKLX0KLQotc3RhdGljIGludCB2ZWxvY2l0eV9yeF9yZWZpbGwoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0JaW50IGRpcnR5ID0gdnB0ci0+cnguZGlydHksIGRvbmUgPSAwOwotCi0JZG8gewotCQlzdHJ1Y3QgcnhfZGVzYyAqcmQgPSB2cHRyLT5yeC5yaW5nICsgZGlydHk7Ci0KLQkJLyogRmluZSBmb3IgYW4gYWxsIHplcm8gUnggZGVzYyBhdCBpbml0IHRpbWUgYXMgd2VsbCAqLwotCQlpZiAocmQtPnJkZXNjMC5sZW4gJiBPV05FRF9CWV9OSUMpCi0JCQlicmVhazsKLQotCQlpZiAoIXZwdHItPnJ4LmluZm9bZGlydHldLnNrYikgewotCQkJaWYgKHZlbG9jaXR5X2FsbG9jX3J4X2J1Zih2cHRyLCBkaXJ0eSkgPCAwKQotCQkJCWJyZWFrOwotCQl9Ci0JCWRvbmUrKzsKLQkJZGlydHkgPSAoZGlydHkgPCB2cHRyLT5vcHRpb25zLm51bXJ4IC0gMSkgPyBkaXJ0eSArIDEgOiAwOwotCX0gd2hpbGUgKGRpcnR5ICE9IHZwdHItPnJ4LmN1cnIpOwotCi0JaWYgKGRvbmUpIHsKLQkJdnB0ci0+cnguZGlydHkgPSBkaXJ0eTsKLQkJdnB0ci0+cnguZmlsbGVkICs9IGRvbmU7Ci0JfQotCi0JcmV0dXJuIGRvbmU7Ci19Ci0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3NldF9yeGJ1ZnNpemUoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBtdHUpCi17Ci0JdnB0ci0+cnguYnVmX3N6ID0gKG10dSA8PSBFVEhfREFUQV9MRU4pID8gUEtUX0JVRl9TWiA6IG10dSArIDMyOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2luaXRfcmRfcmluZwktCXNldCB1cCByZWNlaXZlIHJpbmcKLSAqCUB2cHRyOiB2ZWxvY2l0eSB0byBjb25maWd1cmUKLSAqCi0gKglBbGxvY2F0ZSBhbmQgc2V0IHVwIHRoZSByZWNlaXZlIGJ1ZmZlcnMgZm9yIGVhY2ggcmluZyBzbG90IGFuZAotICoJYXNzaWduIHRoZW0gdG8gdGhlIG5ldHdvcmsgYWRhcHRlci4KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X2luaXRfcmRfcmluZyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCXZwdHItPnJ4LmluZm8gPSBrY2FsbG9jKHZwdHItPm9wdGlvbnMubnVtcngsCi0JCQkJc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2cHRyLT5yeC5pbmZvKQotCQlnb3RvIG91dDsKLQotCXZlbG9jaXR5X2luaXRfcnhfcmluZ19pbmRleGVzKHZwdHIpOwotCi0JaWYgKHZlbG9jaXR5X3J4X3JlZmlsbCh2cHRyKSAhPSB2cHRyLT5vcHRpb25zLm51bXJ4KSB7Ci0JCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfRVJSLCBLRVJOX0VSUgotCQkJIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgUlggYnVmZmVyLlxuIiwgdnB0ci0+ZGV2LT5uYW1lKTsKLQkJdmVsb2NpdHlfZnJlZV9yZF9yaW5nKHZwdHIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSAwOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfZnJlZV9yZF9yaW5nCS0JZnJlZSByZWNlaXZlIHJpbmcKLSAqCUB2cHRyOiB2ZWxvY2l0eSB0byBjbGVhbiB1cAotICoKLSAqCUZyZWUgdGhlIHJlY2VpdmUgYnVmZmVycyBmb3IgZWFjaCByaW5nIHNsb3QgYW5kIGFueQotICoJYXR0YWNoZWQgc29ja2V0IGJ1ZmZlcnMgdGhhdCBuZWVkIHRvIGdvIGF3YXkuCi0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV9yZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCWludCBpOwotCi0JaWYgKHZwdHItPnJ4LmluZm8gPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IHZwdHItPm9wdGlvbnMubnVtcng7IGkrKykgewotCQlzdHJ1Y3QgdmVsb2NpdHlfcmRfaW5mbyAqcmRfaW5mbyA9ICYodnB0ci0+cnguaW5mb1tpXSk7Ci0JCXN0cnVjdCByeF9kZXNjICpyZCA9IHZwdHItPnJ4LnJpbmcgKyBpOwotCi0JCW1lbXNldChyZCwgMCwgc2l6ZW9mKCpyZCkpOwotCi0JCWlmICghcmRfaW5mby0+c2tiKQotCQkJY29udGludWU7Ci0JCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgcmRfaW5mby0+c2tiX2RtYSwgdnB0ci0+cnguYnVmX3N6LAotCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlyZF9pbmZvLT5za2JfZG1hID0gMDsKLQotCQlkZXZfa2ZyZWVfc2tiKHJkX2luZm8tPnNrYik7Ci0JCXJkX2luZm8tPnNrYiA9IE5VTEw7Ci0JfQotCi0Ja2ZyZWUodnB0ci0+cnguaW5mbyk7Ci0JdnB0ci0+cnguaW5mbyA9IE5VTEw7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfaW5pdF90ZF9yaW5nCS0Jc2V0IHVwIHRyYW5zbWl0IHJpbmcKLSAqCUB2cHRyOgl2ZWxvY2l0eQotICoKLSAqCVNldCB1cCB0aGUgdHJhbnNtaXQgcmluZyBhbmQgY2hhaW4gdGhlIHJpbmcgcG9pbnRlcnMgdG9nZXRoZXIuCi0gKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHBvc2l4IGVycm5vIGNvZGUgZm9yCi0gKglmYWlsdXJlLgotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF90ZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCWRtYV9hZGRyX3QgY3VycjsKLQlpbnQgajsKLQotCS8qIEluaXQgdGhlIFREIHJpbmcgZW50cmllcyAqLwotCWZvciAoaiA9IDA7IGogPCB2cHRyLT50eC5udW1xOyBqKyspIHsKLQkJY3VyciA9IHZwdHItPnR4LnBvb2xfZG1hW2pdOwotCi0JCXZwdHItPnR4LmluZm9zW2pdID0ga2NhbGxvYyh2cHRyLT5vcHRpb25zLm51bXR4LAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvKSwKLQkJCQkJICAgIEdGUF9LRVJORUwpOwotCQlpZiAoIXZwdHItPnR4LmluZm9zW2pdKQl7Ci0JCQl3aGlsZSgtLWogPj0gMCkKLQkJCQlrZnJlZSh2cHRyLT50eC5pbmZvc1tqXSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXZwdHItPnR4LnRhaWxbal0gPSB2cHRyLT50eC5jdXJyW2pdID0gdnB0ci0+dHgudXNlZFtqXSA9IDA7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICoJRklYTUU6IGNvdWxkIHdlIG1lcmdlIHRoaXMgd2l0aCB2ZWxvY2l0eV9mcmVlX3R4X2J1ZiA/Ci0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV90ZF9yaW5nX2VudHJ5KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLAotCQkJCQkJCSBpbnQgcSwgaW50IG4pCi17Ci0Jc3RydWN0IHZlbG9jaXR5X3RkX2luZm8gKiB0ZF9pbmZvID0gJih2cHRyLT50eC5pbmZvc1txXVtuXSk7Ci0JaW50IGk7Ci0KLQlpZiAodGRfaW5mbyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAodGRfaW5mby0+c2tiKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0ZF9pbmZvLT5uc2tiX2RtYTsgaSsrKQotCQl7Ci0JCQlpZiAodGRfaW5mby0+c2tiX2RtYVtpXSkgewotCQkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRfaW5mby0+c2tiX2RtYVtpXSwKLQkJCQkJdGRfaW5mby0+c2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJCXRkX2luZm8tPnNrYl9kbWFbaV0gPSAwOwotCQkJfQotCQl9Ci0JCWRldl9rZnJlZV9za2IodGRfaW5mby0+c2tiKTsKLQkJdGRfaW5mby0+c2tiID0gTlVMTDsKLQl9Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfZnJlZV90ZF9yaW5nCS0JZnJlZSB0ZCByaW5nCi0gKglAdnB0cjogdmVsb2NpdHkKLSAqCi0gKglGcmVlIHVwIHRoZSB0cmFuc21pdCByaW5nIGZvciB0aGlzIHBhcnRpY3VsYXIgdmVsb2NpdHkgYWRhcHRlci4KLSAqCVdlIGZyZWUgdGhlIHJpbmcgY29udGVudHMgYnV0IG5vdCB0aGUgcmluZyBpdHNlbGYuCi0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV90ZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQoteworCXUxNiBjcmMgPSAweEZGRkY7CisJdTggbWFzazsKIAlpbnQgaSwgajsKIAotCWZvciAoaiA9IDA7IGogPCB2cHRyLT50eC5udW1xOyBqKyspIHsKLQkJaWYgKHZwdHItPnR4LmluZm9zW2pdID09IE5VTEwpCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQltYXNrID0gbWFza19wYXR0ZXJuW2ldOworCisJCS8qIFNraXAgdGhpcyBsb29wIGlmIHRoZSBtYXNrIGVxdWFscyB0byB6ZXJvICovCisJCWlmIChtYXNrID09IDB4MDApCiAJCQljb250aW51ZTsKLQkJZm9yIChpID0gMDsgaSA8IHZwdHItPm9wdGlvbnMubnVtdHg7IGkrKykgewotCQkJdmVsb2NpdHlfZnJlZV90ZF9yaW5nX2VudHJ5KHZwdHIsIGosIGkpOwogCi0JCX0KLQkJa2ZyZWUodnB0ci0+dHguaW5mb3Nbal0pOwotCQl2cHRyLT50eC5pbmZvc1tqXSA9IE5VTEw7Ci0JfQotfQotCi0vKioKLSAqCXZlbG9jaXR5X3J4X3NydgkJLQlzZXJ2aWNlIFJYIGludGVycnVwdAotICoJQHZwdHI6IHZlbG9jaXR5Ci0gKglAc3RhdHVzOiBhZGFwdGVyIHN0YXR1cyAodW51c2VkKQotICoKLSAqCVdhbGsgdGhlIHJlY2VpdmUgcmluZyBvZiB0aGUgdmVsb2NpdHkgYWRhcHRlciBhbmQgcmVtb3ZlCi0gKglhbnkgcmVjZWl2ZWQgcGFja2V0cyBmcm9tIHRoZSByZWNlaXZlIHF1ZXVlLiBIYW5kIHRoZSByaW5nCi0gKglzbG90cyBiYWNrIHRvIHRoZSBhZGFwdGVyIGZvciByZXVzZS4KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X3J4X3NydihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IHN0YXR1cykKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdnB0ci0+ZGV2LT5zdGF0czsKLQlpbnQgcmRfY3VyciA9IHZwdHItPnJ4LmN1cnI7Ci0JaW50IHdvcmtzID0gMDsKLQotCWRvIHsKLQkJc3RydWN0IHJ4X2Rlc2MgKnJkID0gdnB0ci0+cngucmluZyArIHJkX2N1cnI7Ci0KLQkJaWYgKCF2cHRyLT5yeC5pbmZvW3JkX2N1cnJdLnNrYikKLQkJCWJyZWFrOwotCi0JCWlmIChyZC0+cmRlc2MwLmxlbiAmIE9XTkVEX0JZX05JQykKLQkJCWJyZWFrOwotCi0JCXJtYigpOwotCi0JCS8qCi0JCSAqCURvbid0IGRyb3AgQ0Ugb3IgUkwgZXJyb3IgZnJhbWUgYWx0aG91Z2ggUlhPSyBpcyBvZmYKLQkJICovCi0JCWlmIChyZC0+cmRlc2MwLlJTUiAmIChSU1JfUlhPSyB8IFJTUl9DRSB8IFJTUl9STCkpIHsKLQkJCWlmICh2ZWxvY2l0eV9yZWNlaXZlX2ZyYW1lKHZwdHIsIHJkX2N1cnIpIDwgMCkKLQkJCQlzdGF0cy0+cnhfZHJvcHBlZCsrOwotCQl9IGVsc2UgewotCQkJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX0NSQykKLQkJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOwotCQkJaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX0ZBRSkKLQkJCQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzKys7Ci0KLQkJCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci0JCX0KLQotCQlyZC0+c2l6ZSB8PSBSWF9JTlRFTjsKLQotCQlyZF9jdXJyKys7Ci0JCWlmIChyZF9jdXJyID49IHZwdHItPm9wdGlvbnMubnVtcngpCi0JCQlyZF9jdXJyID0gMDsKLQl9IHdoaWxlICgrK3dvcmtzIDw9IDE1KTsKLQotCXZwdHItPnJ4LmN1cnIgPSByZF9jdXJyOwotCi0JaWYgKCh3b3JrcyA+IDApICYmICh2ZWxvY2l0eV9yeF9yZWZpbGwodnB0cikgPiAwKSkKLQkJdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHZwdHIpOwotCi0JVkFSX1VTRUQoc3RhdHMpOwotCXJldHVybiB3b3JrczsKLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9yeF9jc3VtCS0JY2hlY2tzdW0gcHJvY2VzcwotICoJQHJkOiByZWNlaXZlIHBhY2tldCBkZXNjcmlwdG9yCi0gKglAc2tiOiBuZXR3b3JrIGxheWVyIHBhY2tldCBidWZmZXIKLSAqCi0gKglQcm9jZXNzIHRoZSBzdGF0dXMgYml0cyBmb3IgdGhlIHJlY2VpdmVkIHBhY2tldCBhbmQgZGV0ZXJtaW5lCi0gKglpZiB0aGUgY2hlY2tzdW0gd2FzIGNvbXB1dGVkIGFuZCB2ZXJpZmllZCBieSB0aGUgaGFyZHdhcmUKLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdmVsb2NpdHlfcnhfY3N1bShzdHJ1Y3QgcnhfZGVzYyAqcmQsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCi0JaWYgKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX0lQS1QpIHsKLQkJaWYgKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX0lQT0spIHsKLQkJCWlmICgocmQtPnJkZXNjMS5DU00gJiBDU01fVENQS1QpIHx8Ci0JCQkJCShyZC0+cmRlc2MxLkNTTSAmIENTTV9VRFBLVCkpIHsKLQkJCQlpZiAoIShyZC0+cmRlc2MxLkNTTSAmIENTTV9UVVBPSykpIHsKLQkJCQkJcmV0dXJuOwotCQkJCX0KKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJaWYgKChtYXNrICYgMHgwMSkgPT0gMCkgeworCQkJCW1hc2sgPj49IDE7CisJCQkJY29udGludWU7CiAJCQl9Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJbWFzayA+Pj0gMTsKKwkJCWNyYyA9IGNyY19jY2l0dChjcmMsICYocGF0dGVybltpICogOCArIGpdKSwgMSk7CiAJCX0KIAl9CisJLyoJRmluYWxseSwgaW52ZXJ0IHRoZSByZXN1bHQgb25jZSB0byBnZXQgdGhlIGNvcnJlY3QgZGF0YSAqLworCWNyYyA9IH5jcmM7CisJcmV0dXJuIGJpdHJldjMyKGNyYykgPj4gMTY7CiB9CiAKIC8qKgotICoJdmVsb2NpdHlfcnhfY29weQktCWluIHBsYWNlIFJ4IGNvcHkgZm9yIHNtYWxsIHBhY2tldHMKLSAqCUByeF9za2I6IG5ldHdvcmsgbGF5ZXIgcGFja2V0IGJ1ZmZlciBjYW5kaWRhdGUKLSAqCUBwa3Rfc2l6ZTogcmVjZWl2ZWQgZGF0YSBzaXplCi0gKglAcmQ6IHJlY2VpdmUgcGFja2V0IGRlc2NyaXB0b3IKLSAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKgl2ZWxvY2l0eV9zZXRfd29sCS0Jc2V0IHVwIGZvciB3YWtlIG9uIGxhbgorICoJQHZwdHI6IHZlbG9jaXR5IHRvIHNldCBXT0wgc3RhdHVzIG9uCiAgKgotICoJUmVwbGFjZSB0aGUgY3VycmVudCBza2IgdGhhdCBpcyBzY2hlZHVsZWQgZm9yIFJ4IHByb2Nlc3NpbmcgYnkgYQotICoJc2hvcnRlciwgaW1tZWRpYXRseSBhbGxvY2F0ZWQgc2tiLCBpZiB0aGUgcmVjZWl2ZWQgcGFja2V0IGlzIHNtYWxsCi0gKgllbm91Z2guIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZSByZWNlaXZlZAotICoJcGFja2V0IGlzIHRvbyBiaWcgb3IgaWYgbWVtb3J5IGlzIGV4aGF1c3RlZC4KKyAqCVNldCBhIGNhcmQgdXAgZm9yIHdha2Ugb24gbGFuIGVpdGhlciBieSB1bmljYXN0IG9yIGJ5CisgKglBUlAgcGFja2V0LgorICoKKyAqCUZJWE1FOiBjaGVjayBzdGF0aWMgYnVmZmVyIGlzIHNhZmUgaGVyZQogICovCi1zdGF0aWMgaW50IHZlbG9jaXR5X3J4X2NvcHkoc3RydWN0IHNrX2J1ZmYgKipyeF9za2IsIGludCBwa3Rfc2l6ZSwKLQkJCSAgICBzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKK3N0YXRpYyBpbnQgdmVsb2NpdHlfc2V0X3dvbChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKLQlpbnQgcmV0ID0gLTE7Ci0JaWYgKHBrdF9zaXplIDwgcnhfY29weWJyZWFrKSB7Ci0JCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwotCi0JCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHZwdHItPmRldiwgcGt0X3NpemUgKyAyKTsKLQkJaWYgKG5ld19za2IpIHsKLQkJCW5ld19za2ItPmlwX3N1bW1lZCA9IHJ4X3NrYlswXS0+aXBfc3VtbWVkOwotCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgMik7Ci0JCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKCpyeF9za2IsIG5ld19za2ItPmRhdGEsIHBrdF9zaXplKTsKLQkJCSpyeF9za2IgPSBuZXdfc2tiOwotCQkJcmV0ID0gMDsKLQkJfQotCi0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfaXBoX3JlYWxpZ24JLQlJUCBoZWFkZXIgYWxpZ25tZW50Ci0gKglAdnB0cjogdmVsb2NpdHkgd2UgYXJlIGhhbmRsaW5nCi0gKglAc2tiOiBuZXR3b3JrIGxheWVyIHBhY2tldCBidWZmZXIKLSAqCUBwa3Rfc2l6ZTogcmVjZWl2ZWQgZGF0YSBzaXplCi0gKgotICoJQWxpZ24gSVAgaGVhZGVyIG9uIGEgMiBieXRlcyBib3VuZGFyeS4gVGhpcyBiZWhhdmlvciBjYW4gYmUKLSAqCWNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZWxvY2l0eV9pcGhfcmVhbGlnbihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBrdF9zaXplKQotewotCWlmICh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX0lQX0FMSUdOKSB7Ci0JCW1lbW1vdmUoc2tiLT5kYXRhICsgMiwgc2tiLT5kYXRhLCBwa3Rfc2l6ZSk7Ci0JCXNrYl9yZXNlcnZlKHNrYiwgMik7Ci0JfQotfQotCi0vKioKLSAqCXZlbG9jaXR5X3JlY2VpdmVfZnJhbWUJLQlyZWNlaXZlZCBwYWNrZXQgcHJvY2Vzc29yCi0gKglAdnB0cjogdmVsb2NpdHkgd2UgYXJlIGhhbmRsaW5nCi0gKglAaWR4OiByaW5nIGluZGV4Ci0gKgotICoJQSBwYWNrZXQgaGFzIGFycml2ZWQuIFdlIHByb2Nlc3MgdGhlIHBhY2tldCBhbmQgaWYgYXBwcm9wcmlhdGUKLSAqCXBhc3MgdGhlIGZyYW1lIHVwIHRoZSBuZXR3b3JrIHN0YWNrCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9yZWNlaXZlX2ZyYW1lKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgaWR4KQotewotCXZvaWQgKCpwY2lfYWN0aW9uKShzdHJ1Y3QgcGNpX2RldiAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnZwdHItPmRldi0+c3RhdHM7Ci0Jc3RydWN0IHZlbG9jaXR5X3JkX2luZm8gKnJkX2luZm8gPSAmKHZwdHItPnJ4LmluZm9baWR4XSk7Ci0Jc3RydWN0IHJ4X2Rlc2MgKnJkID0gJih2cHRyLT5yeC5yaW5nW2lkeF0pOwotCWludCBwa3RfbGVuID0gbGUxNl90b19jcHUocmQtPnJkZXNjMC5sZW4pICYgMHgzZmZmOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlpZiAocmQtPnJkZXNjMC5SU1IgJiAoUlNSX1NUUCB8IFJTUl9FRFApKSB7Ci0JCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfVkVSQk9TRSwgS0VSTl9FUlIgIiAlcyA6IHRoZSByZWNlaXZlZCBmcmFtZSBzcGFuIG11bHRwbGUgUkRzLlxuIiwgdnB0ci0+ZGV2LT5uYW1lKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHJkLT5yZGVzYzAuUlNSICYgUlNSX01BUikKLQkJc3RhdHMtPm11bHRpY2FzdCsrOwotCi0Jc2tiID0gcmRfaW5mby0+c2tiOwotCi0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHZwdHItPnBkZXYsIHJkX2luZm8tPnNrYl9kbWEsCi0JCQkJICAgIHZwdHItPnJ4LmJ1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCS8qCi0JICoJRHJvcCBmcmFtZSBub3QgbWVldGluZyBJRUVFIDgwMi4zCi0JICovCi0KLQlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19WQUxfUEtUX0xFTikgewotCQlpZiAocmQtPnJkZXNjMC5SU1IgJiBSU1JfUkwpIHsKLQkJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCXBjaV9hY3Rpb24gPSBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2U7Ci0KLQl2ZWxvY2l0eV9yeF9jc3VtKHJkLCBza2IpOwotCi0JaWYgKHZlbG9jaXR5X3J4X2NvcHkoJnNrYiwgcGt0X2xlbiwgdnB0cikgPCAwKSB7Ci0JCXZlbG9jaXR5X2lwaF9yZWFsaWduKHZwdHIsIHNrYiwgcGt0X2xlbik7Ci0JCXBjaV9hY3Rpb24gPSBwY2lfdW5tYXBfc2luZ2xlOwotCQlyZF9pbmZvLT5za2IgPSBOVUxMOwotCX0KLQotCXBjaV9hY3Rpb24odnB0ci0+cGRldiwgcmRfaW5mby0+c2tiX2RtYSwgdnB0ci0+cnguYnVmX3N6LAotCQkgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCi0Jc2tiX3B1dChza2IsIHBrdF9sZW4gLSA0KTsKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB2cHRyLT5kZXYpOwotCi0JaWYgKHZwdHItPnZsZ3JwICYmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9ERVRBRykpIHsKLQkJdmxhbl9od2FjY2VsX3J4KHNrYiwgdnB0ci0+dmxncnAsCi0JCQkJc3dhYjE2KGxlMTZfdG9fY3B1KHJkLT5yZGVzYzEuUFFUQUcpKSk7Ci0JfSBlbHNlCi0JCW5ldGlmX3J4KHNrYik7Ci0KLQlzdGF0cy0+cnhfYnl0ZXMgKz0gcGt0X2xlbjsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2FsbG9jX3J4X2J1ZgktCWFsbG9jYXRlIGFsaWduZWQgcmVjZWl2ZSBidWZmZXIKLSAqCUB2cHRyOiB2ZWxvY2l0eQotICoJQGlkeDogcmluZyBpbmRleAotICoKLSAqCUFsbG9jYXRlIGEgbmV3IGZ1bGwgc2l6ZWQgYnVmZmVyIGZvciB0aGUgcmVjZXB0aW9uIG9mIGEgZnJhbWUgYW5kCi0gKgltYXAgaXQgaW50byBQQ0kgc3BhY2UgZm9yIHRoZSBoYXJkd2FyZSB0byB1c2UuIFRoZSBoYXJkd2FyZQotICoJcmVxdWlyZXMgKjY0KiBieXRlIGFsaWdubWVudCBvZiB0aGUgYnVmZmVyIHdoaWNoIG1ha2VzIGxpZmUKLSAqCWxlc3MgZnVuIHRoYW4gd291bGQgYmUgaWRlYWwuCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9hbGxvY19yeF9idWYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBpZHgpCi17Ci0Jc3RydWN0IHJ4X2Rlc2MgKnJkID0gJih2cHRyLT5yeC5yaW5nW2lkeF0pOwotCXN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvICpyZF9pbmZvID0gJih2cHRyLT5yeC5pbmZvW2lkeF0pOwotCi0JcmRfaW5mby0+c2tiID0gZGV2X2FsbG9jX3NrYih2cHRyLT5yeC5idWZfc3ogKyA2NCk7Ci0JaWYgKHJkX2luZm8tPnNrYiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qCi0JICoJRG8gdGhlIGd5bW5hc3RpY3MgdG8gZ2V0IHRoZSBidWZmZXIgaGVhZCBmb3IgZGF0YSBhdAotCSAqCTY0Ynl0ZSBhbGlnbm1lbnQuCi0JICovCi0Jc2tiX3Jlc2VydmUocmRfaW5mby0+c2tiLCAodW5zaWduZWQgbG9uZykgcmRfaW5mby0+c2tiLT5kYXRhICYgNjMpOwotCXJkX2luZm8tPnNrYl9kbWEgPSBwY2lfbWFwX3NpbmdsZSh2cHRyLT5wZGV2LCByZF9pbmZvLT5za2ItPmRhdGEsCi0JCQkJCXZwdHItPnJ4LmJ1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCS8qCi0JICoJRmlsbCBpbiB0aGUgZGVzY3JpcHRvciB0byBtYXRjaAotCSAqLwotCi0JKigodTMyICopICYgKHJkLT5yZGVzYzApKSA9IDA7Ci0JcmQtPnNpemUgPSBjcHVfdG9fbGUxNih2cHRyLT5yeC5idWZfc3opIHwgUlhfSU5URU47Ci0JcmQtPnBhX2xvdyA9IGNwdV90b19sZTMyKHJkX2luZm8tPnNrYl9kbWEpOwotCXJkLT5wYV9oaWdoID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKgl0eF9zcnYJCS0JdHJhbnNtaXQgaW50ZXJydXB0IHNlcnZpY2UKLSAqCUB2cHRyOyBWZWxvY2l0eQotICoJQHN0YXR1czoKLSAqCi0gKglTY2FuIHRoZSBxdWV1ZXMgbG9va2luZyBmb3IgdHJhbnNtaXR0ZWQgcGFja2V0cyB0aGF0Ci0gKgl3ZSBjYW4gY29tcGxldGUgYW5kIGNsZWFuIHVwLiBVcGRhdGUgYW55IHN0YXRpc3RpY3MgYXMKLSAqCW5lY2Vzc2FyeS8KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X3R4X3NydihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIHN0YXR1cykKLXsKLQlzdHJ1Y3QgdHhfZGVzYyAqdGQ7Ci0JaW50IHFudW07Ci0JaW50IGZ1bGwgPSAwOwotCWludCBpZHg7Ci0JaW50IHdvcmtzID0gMDsKLQlzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqdGRpbmZvOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ2cHRyLT5kZXYtPnN0YXRzOwotCi0JZm9yIChxbnVtID0gMDsgcW51bSA8IHZwdHItPnR4Lm51bXE7IHFudW0rKykgewotCQlmb3IgKGlkeCA9IHZwdHItPnR4LnRhaWxbcW51bV07IHZwdHItPnR4LnVzZWRbcW51bV0gPiAwOwotCQkJaWR4ID0gKGlkeCArIDEpICUgdnB0ci0+b3B0aW9ucy5udW10eCkgewotCi0JCQkvKgotCQkJICoJR2V0IFR4IERlc2NyaXB0b3IKLQkJCSAqLwotCQkJdGQgPSAmKHZwdHItPnR4LnJpbmdzW3FudW1dW2lkeF0pOwotCQkJdGRpbmZvID0gJih2cHRyLT50eC5pbmZvc1txbnVtXVtpZHhdKTsKLQotCQkJaWYgKHRkLT50ZGVzYzAubGVuICYgT1dORURfQllfTklDKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoKHdvcmtzKysgPiAxNSkpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmICh0ZC0+dGRlc2MwLlRTUiAmIFRTUjBfVEVSUikgewotCQkJCXN0YXRzLT50eF9lcnJvcnMrKzsKLQkJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwotCQkJCWlmICh0ZC0+dGRlc2MwLlRTUiAmIFRTUjBfQ0RIKQotCQkJCQlzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycysrOwotCQkJCWlmICh0ZC0+dGRlc2MwLlRTUiAmIFRTUjBfQ1JTKQotCQkJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJCQlpZiAodGQtPnRkZXNjMC5UU1IgJiBUU1IwX0FCVCkKLQkJCQkJc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQkJaWYgKHRkLT50ZGVzYzAuVFNSICYgVFNSMF9PV0MpCi0JCQkJCXN0YXRzLT50eF93aW5kb3dfZXJyb3JzKys7Ci0JCQl9IGVsc2UgewotCQkJCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JCQkJc3RhdHMtPnR4X2J5dGVzICs9IHRkaW5mby0+c2tiLT5sZW47Ci0JCQl9Ci0JCQl2ZWxvY2l0eV9mcmVlX3R4X2J1Zih2cHRyLCB0ZGluZm8pOwotCQkJdnB0ci0+dHgudXNlZFtxbnVtXS0tOwotCQl9Ci0JCXZwdHItPnR4LnRhaWxbcW51bV0gPSBpZHg7Ci0KLQkJaWYgKEFWQUlMX1REKHZwdHIsIHFudW0pIDwgMSkgewotCQkJZnVsbCA9IDE7Ci0JCX0KLQl9Ci0JLyoKLQkgKglMb29rIHRvIHNlZSBpZiB3ZSBzaG91bGQga2ljayB0aGUgdHJhbnNtaXQgbmV0d29yawotCSAqCWxheWVyIGZvciBtb3JlIHdvcmsuCi0JICovCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQodnB0ci0+ZGV2KSAmJiAoZnVsbCA9PSAwKQotCSAgICAmJiAoISh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfTElOS19GQUlMKSkpIHsKLQkJbmV0aWZfd2FrZV9xdWV1ZSh2cHRyLT5kZXYpOwotCX0KLQlyZXR1cm4gd29ya3M7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfcHJpbnRfbGlua19zdGF0dXMJLQlsaW5rIHN0YXR1cyByZXBvcnRpbmcKLSAqCUB2cHRyOiB2ZWxvY2l0eSB0byByZXBvcnQgb24KLSAqCi0gKglUdXJuIHRoZSBsaW5rIHN0YXR1cyBvZiB0aGUgdmVsb2NpdHkgY2FyZCBpbnRvIGEga2VybmVsIGxvZwotICoJZGVzY3JpcHRpb24gb2YgdGhlIG5ldyBsaW5rIHN0YXRlLCBkZXRhaWxpbmcgc3BlZWQgYW5kIGR1cGxleAotICoJc3RhdHVzCi0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfcHJpbnRfbGlua19zdGF0dXMoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0KLQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0xJTktfRkFJTCkgewotCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fTk9USUNFICIlczogZmFpbGVkIHRvIGRldGVjdCBjYWJsZSBsaW5rXG4iLCB2cHRyLT5kZXYtPm5hbWUpOwotCX0gZWxzZSBpZiAodnB0ci0+b3B0aW9ucy5zcGRfZHB4ID09IFNQRF9EUFhfQVVUTykgewotCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fTk9USUNFICIlczogTGluayBhdXRvLW5lZ290aWF0aW9uIiwgdnB0ci0+ZGV2LT5uYW1lKTsKLQotCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMDApCi0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTAwME0gYnBzIik7Ci0JCWVsc2UgaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMDApCi0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTAwTSBicHMiKTsKLQkJZWxzZQotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIHNwZWVkIDEwTSBicHMiKTsKLQotCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIGZ1bGwgZHVwbGV4XG4iKTsKLQkJZWxzZQotCQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiIGhhbGYgZHVwbGV4XG4iKTsKLQl9IGVsc2UgewotCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fTk9USUNFICIlczogTGluayBmb3JjZWQiLCB2cHRyLT5kZXYtPm5hbWUpOwotCQlzd2l0Y2ggKHZwdHItPm9wdGlvbnMuc3BkX2RweCkgewotCQljYXNlIFNQRF9EUFhfMTAwX0hBTEY6Ci0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTAwTSBicHMgaGFsZiBkdXBsZXhcbiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BEX0RQWF8xMDBfRlVMTDoKLQkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIiBzcGVlZCAxMDBNIGJwcyBmdWxsIGR1cGxleFxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBTUERfRFBYXzEwX0hBTEY6Ci0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTBNIGJwcyBoYWxmIGR1cGxleFxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBTUERfRFBYXzEwX0ZVTEw6Ci0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICIgc3BlZWQgMTBNIGJwcyBmdWxsIGR1cGxleFxuIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0vKioKLSAqCXZlbG9jaXR5X2Vycm9yCS0JaGFuZGxlIGVycm9yIGZyb20gY29udHJvbGxlcgotICoJQHZwdHI6IHZlbG9jaXR5Ci0gKglAc3RhdHVzOiBjYXJkIHN0YXR1cwotICoKLSAqCVByb2Nlc3MgYW4gZXJyb3IgcmVwb3J0IGZyb20gdGhlIGhhcmR3YXJlIGFuZCBhdHRlbXB0IHRvIHJlY292ZXIKLSAqCXRoZSBjYXJkIGl0c2VsZi4gQXQgdGhlIG1vbWVudCB3ZSBjYW5ub3QgcmVjb3ZlciBmcm9tIHNvbWUKLSAqCXRoZW9yZXRpY2FsbHkgaW1wb3NzaWJsZSBlcnJvcnMgYnV0IHRoaXMgY291bGQgYmUgZml4ZWQgdXNpbmcKLSAqCXRoZSBwY2lfZGV2aWNlX2ZhaWxlZCBsb2dpYyB0byBib3VuY2UgdGhlIGhhcmR3YXJlCi0gKgotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2Vycm9yKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBpbnQgc3RhdHVzKQotewotCi0JaWYgKHN0YXR1cyAmIElTUl9UWFNUTEkpIHsKLQkJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0KLQkJcHJpbnRrKEtFUk5fRVJSICJURCBzdHJ1Y3R1cmUgZXJyb3IgVERpbmRleD0laHhcbiIsIHJlYWR3KCZyZWdzLT5URElkeFswXSkpOwotCQlCWVRFX1JFR19CSVRTX09OKFRYRVNSX1REU1RSLCAmcmVncy0+VFhFU1IpOwotCQl3cml0ZXcoVFJEQ1NSX1JVTiwgJnJlZ3MtPlREQ1NSQ2xyKTsKLQkJbmV0aWZfc3RvcF9xdWV1ZSh2cHRyLT5kZXYpOwotCi0JCS8qIEZJWE1FOiBwb3J0IG92ZXIgdGhlIHBjaV9kZXZpY2VfZmFpbGVkIGNvZGUgYW5kIHVzZSBpdAotCQkgICBoZXJlICovCi0JfQotCi0JaWYgKHN0YXR1cyAmIElTUl9TUkNJKSB7Ci0JCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCQlpbnQgbGlua2VkOwotCi0JCWlmICh2cHRyLT5vcHRpb25zLnNwZF9kcHggPT0gU1BEX0RQWF9BVVRPKSB7Ci0JCQl2cHRyLT5taWlfc3RhdHVzID0gY2hlY2tfY29ubmVjdGlvbl90eXBlKHJlZ3MpOwotCi0JCQkvKgotCQkJICoJSWYgaXQgaXMgYSAzMTE5LCBkaXNhYmxlIGZyYW1lIGJ1cnN0aW5nIGluCi0JCQkgKgloYWxmZHVwbGV4IG1vZGUgYW5kIGVuYWJsZSBpdCBpbiBmdWxsZHVwbGV4Ci0JCQkgKgkgbW9kZQotCQkJICovCi0JCQlpZiAodnB0ci0+cmV2X2lkIDwgUkVWX0lEX1ZUMzIxNl9BMCkgewotCQkJCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpCi0JCQkJCUJZVEVfUkVHX0JJVFNfT04oVENSX1RCMkJESVMsICZyZWdzLT5UQ1IpOwotCQkJCWVsc2UKLQkJCQkJQllURV9SRUdfQklUU19PRkYoVENSX1RCMkJESVMsICZyZWdzLT5UQ1IpOwotCQkJfQotCQkJLyoKLQkJCSAqCU9ubHkgZW5hYmxlIENEIGhlYXJ0IGJlYXQgY291bnRlciBpbiAxMEhEIG1vZGUKLQkJCSAqLwotCQkJaWYgKCEodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKSAmJiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwKSkgewotCQkJCUJZVEVfUkVHX0JJVFNfT0ZGKFRFU1RDRkdfSEJESVMsICZyZWdzLT5URVNUQ0ZHKTsKLQkJCX0gZWxzZSB7Ci0JCQkJQllURV9SRUdfQklUU19PTihURVNUQ0ZHX0hCRElTLCAmcmVncy0+VEVTVENGRyk7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICoJR2V0IGxpbmsgc3RhdHVzIGZyb20gUEhZU1IwCi0JCSAqLwotCQlsaW5rZWQgPSByZWFkYigmcmVncy0+UEhZU1IwKSAmIFBIWVNSMF9MSU5LR0Q7Ci0KLQkJaWYgKGxpbmtlZCkgewotCQkJdnB0ci0+bWlpX3N0YXR1cyAmPSB+VkVMT0NJVFlfTElOS19GQUlMOwotCQkJbmV0aWZfY2Fycmllcl9vbih2cHRyLT5kZXYpOwotCQl9IGVsc2UgewotCQkJdnB0ci0+bWlpX3N0YXR1cyB8PSBWRUxPQ0lUWV9MSU5LX0ZBSUw7Ci0JCQluZXRpZl9jYXJyaWVyX29mZih2cHRyLT5kZXYpOwotCQl9Ci0KLQkJdmVsb2NpdHlfcHJpbnRfbGlua19zdGF0dXModnB0cik7Ci0JCWVuYWJsZV9mbG93X2NvbnRyb2xfYWJpbGl0eSh2cHRyKTsKLQotCQkvKgotCQkgKglSZS1lbmFibGUgYXV0by1wb2xsaW5nIGJlY2F1c2UgU1JDSSB3aWxsIGRpc2FibGUKLQkJICoJYXV0by1wb2xsaW5nCi0JCSAqLwotCi0JCWVuYWJsZV9taWlfYXV0b3BvbGwocmVncyk7Ci0KLQkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9MSU5LX0ZBSUwpCi0JCQluZXRpZl9zdG9wX3F1ZXVlKHZwdHItPmRldik7Ci0JCWVsc2UKLQkJCW5ldGlmX3dha2VfcXVldWUodnB0ci0+ZGV2KTsKLQotCX07Ci0JaWYgKHN0YXR1cyAmIElTUl9NSUJGSSkKLQkJdmVsb2NpdHlfdXBkYXRlX2h3X21pYnModnB0cik7Ci0JaWYgKHN0YXR1cyAmIElTUl9MU1RFSSkKLQkJbWFjX3J4X3F1ZXVlX3dha2UodnB0ci0+bWFjX3JlZ3MpOwotfQotCi0vKioKLSAqCXZlbG9jaXR5X2ZyZWVfdHhfYnVmCS0JZnJlZSB0cmFuc21pdCBidWZmZXIKLSAqCUB2cHRyOiB2ZWxvY2l0eQotICoJQHRkaW5mbzogYnVmZmVyCi0gKgotICoJUmVsZWFzZSBhbiB0cmFuc21pdCBidWZmZXIuIElmIHRoZSBidWZmZXIgd2FzIHByZWFsbG9jYXRlZCB0aGVuCi0gKglyZWN5Y2xlIGl0LCBpZiBub3QgdGhlbiB1bm1hcCB0aGUgYnVmZmVyLgotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2ZyZWVfdHhfYnVmKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqdGRpbmZvKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSB0ZGluZm8tPnNrYjsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCXN0YXRpYyB1OCBidWZbMjU2XTsKIAlpbnQgaTsKLQlpbnQgcGt0bGVuOworCisJc3RhdGljIHUzMiBtYXNrX3BhdHRlcm5bMl1bNF0gPSB7CisJCXsweDAwMjAzMDAwLCAweDAwMDAwM0MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDB9LCAvKiBBUlAgKi8KKwkJezB4ZmZmZmYwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwZmZmZn0JIC8qIE1hZ2ljIFBhY2tldCAqLworCX07CisKKwl3cml0ZXcoMHhGRkZGLCAmcmVncy0+V09MQ1JDbHIpOworCXdyaXRlYihXT0xDRkdfU0FCIHwgV09MQ0ZHX1NBTSwgJnJlZ3MtPldPTENGR1NldCk7CisJd3JpdGV3KFdPTENSX01BR0lDX0VOLCAmcmVncy0+V09MQ1JTZXQpOwogCiAJLyoKLQkgKglEb24ndCB1bm1hcCB0aGUgcHJlLWFsbG9jYXRlZCB0eF9idWZzCisJICAgaWYgKHZwdHItPndvbF9vcHRzICYgVkVMT0NJVFlfV09MX1BIWSkKKwkgICB3cml0ZXcoKFdPTENSX0xJTktPTl9FTnxXT0xDUl9MSU5LT0ZGX0VOKSwgJnJlZ3MtPldPTENSU2V0KTsKIAkgKi8KLQlpZiAodGRpbmZvLT5za2JfZG1hKSB7CiAKLQkJcGt0bGVuID0gbWF4X3QodW5zaWduZWQgaW50LCBza2ItPmxlbiwgRVRIX1pMRU4pOwotCQlmb3IgKGkgPSAwOyBpIDwgdGRpbmZvLT5uc2tiX2RtYTsgaSsrKSB7Ci0jaWZkZWYgVkVMT0NJVFlfWkVST19DT1BZX1NVUFBPUlQKLQkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRpbmZvLT5za2JfZG1hW2ldLCBsZTE2X3RvX2NwdSh0ZC0+dGRlc2MxLmxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwotI2Vsc2UKLQkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRpbmZvLT5za2JfZG1hW2ldLCBwa3RsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotI2VuZGlmCi0JCQl0ZGluZm8tPnNrYl9kbWFbaV0gPSAwOwotCQl9Ci0JfQotCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0JdGRpbmZvLT5za2IgPSBOVUxMOwotfQorCWlmICh2cHRyLT53b2xfb3B0cyAmIFZFTE9DSVRZX1dPTF9VQ0FTVCkKKwkJd3JpdGV3KFdPTENSX1VOSUNBU1RfRU4sICZyZWdzLT5XT0xDUlNldCk7CiAKLXN0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF9yaW5ncyhzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IG10dSkKLXsKLQlpbnQgcmV0OworCWlmICh2cHRyLT53b2xfb3B0cyAmIFZFTE9DSVRZX1dPTF9BUlApIHsKKwkJc3RydWN0IGFycF9wYWNrZXQgKmFycCA9IChzdHJ1Y3QgYXJwX3BhY2tldCAqKSBidWY7CisJCXUxNiBjcmM7CisJCW1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3QgYXJwX3BhY2tldCkgKyA3KTsKIAotCXZlbG9jaXR5X3NldF9yeGJ1ZnNpemUodnB0ciwgbXR1KTsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCXdyaXRlbChtYXNrX3BhdHRlcm5bMF1baV0sICZyZWdzLT5CeXRlTWFza1swXVtpXSk7CiAKLQlyZXQgPSB2ZWxvY2l0eV9pbml0X2RtYV9yaW5ncyh2cHRyKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7CisJCWFycC0+dHlwZSA9IGh0b25zKEVUSF9QX0FSUCk7CisJCWFycC0+YXJfb3AgPSBodG9ucygxKTsKIAotCXJldCA9IHZlbG9jaXR5X2luaXRfcmRfcmluZyh2cHRyKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZnJlZV9kbWFfcmluZ3NfMDsKKwkJbWVtY3B5KGFycC0+YXJfdGlwLCB2cHRyLT5pcF9hZGRyLCA0KTsKIAotCXJldCA9IHZlbG9jaXR5X2luaXRfdGRfcmluZyh2cHRyKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZnJlZV9yZF9yaW5nXzE7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwkJY3JjID0gd29sX2NhbGNfY3JjKChzaXplb2Yoc3RydWN0IGFycF9wYWNrZXQpICsgNykgLyA4LCBidWYsCisJCQkJKHU4ICopICYgbWFza19wYXR0ZXJuWzBdWzBdKTsKIAotZXJyX2ZyZWVfcmRfcmluZ18xOgotCXZlbG9jaXR5X2ZyZWVfcmRfcmluZyh2cHRyKTsKLWVycl9mcmVlX2RtYV9yaW5nc18wOgotCXZlbG9jaXR5X2ZyZWVfZG1hX3JpbmdzKHZwdHIpOwotCWdvdG8gb3V0OwotfQotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9mcmVlX3JpbmdzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCXZlbG9jaXR5X2ZyZWVfdGRfcmluZyh2cHRyKTsKLQl2ZWxvY2l0eV9mcmVlX3JkX3JpbmcodnB0cik7Ci0JdmVsb2NpdHlfZnJlZV9kbWFfcmluZ3ModnB0cik7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfb3BlbgkJLQlpbnRlcmZhY2UgYWN0aXZhdGlvbiBjYWxsYmFjawotICoJQGRldjogbmV0d29yayBsYXllciBkZXZpY2UgdG8gb3BlbgotICoKLSAqCUNhbGxlZCB3aGVuIHRoZSBuZXR3b3JrIGxheWVyIGJyaW5ncyB0aGUgaW50ZXJmYWNlIHVwLiBSZXR1cm5zCi0gKglhIG5lZ2F0aXZlIHBvc2l4IGVycm9yIGNvZGUgb24gZmFpbHVyZSwgb3IgemVybyBvbiBzdWNjZXNzLgotICoKLSAqCUFsbCB0aGUgcmluZyBhbGxvY2F0aW9uIGFuZCBzZXQgdXAgaXMgZG9uZSBvbiBvcGVuIGZvciB0aGlzCi0gKglhZGFwdGVyIHRvIG1pbmltaXNlIG1lbW9yeSB1c2FnZSB3aGVuIGluYWN0aXZlCi0gKi8KLQotc3RhdGljIGludCB2ZWxvY2l0eV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByZXQ7Ci0KLQlyZXQgPSB2ZWxvY2l0eV9pbml0X3JpbmdzKHZwdHIsIGRldi0+bXR1KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBFbnN1cmUgY2hpcCBpcyBydW5uaW5nICovCi0JcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDApOwotCi0JdmVsb2NpdHlfZ2l2ZV9tYW55X3J4X2Rlc2NzKHZwdHIpOwotCi0JdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9DT0xEKTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHZwdHItPnBkZXYtPmlycSwgJnZlbG9jaXR5X2ludHIsIElSUUZfU0hBUkVELAotCQkJICBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJLyogUG93ZXIgZG93biB0aGUgY2hpcCAqLwotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EM2hvdCk7Ci0JCXZlbG9jaXR5X2ZyZWVfcmluZ3ModnB0cik7Ci0JCWdvdG8gb3V0OworCQl3cml0ZXcoY3JjLCAmcmVncy0+UGF0dGVybkNSQ1swXSk7CisJCXdyaXRldyhXT0xDUl9BUlBfRU4sICZyZWdzLT5XT0xDUlNldCk7CiAJfQogCi0JbWFjX2VuYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JdnB0ci0+ZmxhZ3MgfD0gVkVMT0NJVFlfRkxBR1NfT1BFTkVEOwotb3V0OgotCXJldHVybiByZXQ7Ci19CisJQllURV9SRUdfQklUU19PTihQV0NGR19XT0xUWVBFLCAmcmVncy0+UFdDRkdTZXQpOworCUJZVEVfUkVHX0JJVFNfT04oUFdDRkdfTEVHQUNZX1dPTEVOLCAmcmVncy0+UFdDRkdTZXQpOwogCi0vKioKLSAqCXZlbG9jaXR5X2NoYW5nZV9tdHUJLQlNVFUgY2hhbmdlIGNhbGxiYWNrCi0gKglAZGV2OiBuZXR3b3JrIGRldmljZQotICoJQG5ld19tdHU6IGRlc2lyZWQgTVRVCi0gKgotICoJSGFuZGxlIHJlcXVlc3RzIGZyb20gdGhlIG5ldHdvcmtpbmcgbGF5ZXIgZm9yIE1UVSBjaGFuZ2Ugb24KLSAqCXRoaXMgaW50ZXJmYWNlLiBJdCBnZXRzIGNhbGxlZCBvbiBhIGNoYW5nZSBieSB0aGUgbmV0d29yayBsYXllci4KLSAqCVJldHVybiB6ZXJvIGZvciBzdWNjZXNzIG9yIG5lZ2F0aXZlIHBvc2l4IGVycm9yIGNvZGUuCi0gKi8KKwl3cml0ZXcoMHgwRkZGLCAmcmVncy0+V09MU1JDbHIpOwogCi1zdGF0aWMgaW50IHZlbG9jaXR5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByZXQgPSAwOworCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfQVVUT05FR19FTkFCTEUpIHsKKwkJaWYgKFBIWUlEX0dFVF9QSFlfSUQodnB0ci0+cGh5X2lkKSA9PSBQSFlJRF9DSUNBREFfQ1M4MjAxKQorCQkJTUlJX1JFR19CSVRTX09OKEFVWENSX01EUFBTLCBNSUlfUkVHX0FVWENSLCB2cHRyLT5tYWNfcmVncyk7CiAKLQlpZiAoKG5ld19tdHUgPCBWRUxPQ0lUWV9NSU5fTVRVKSB8fCBuZXdfbXR1ID4gKFZFTE9DSVRZX01BWF9NVFUpKSB7Ci0JCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfRVJSLCBLRVJOX05PVElDRSAiJXM6IEludmFsaWQgTVRVLlxuIiwKLQkJCQl2cHRyLT5kZXYtPm5hbWUpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF8wOworCQlNSUlfUkVHX0JJVFNfT0ZGKEcxMDAwQ1JfMTAwMEZEIHwgRzEwMDBDUl8xMDAwLCBNSUlfUkVHX0cxMDAwQ1IsIHZwdHItPm1hY19yZWdzKTsKIAl9CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JCWdvdG8gb3V0XzA7CisJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9TUEVFRF8xMDAwKQorCQlNSUlfUkVHX0JJVFNfT04oQk1DUl9SRUFVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOworCisJQllURV9SRUdfQklUU19PTihDSElQR0NSX0ZDTU9ERSwgJnJlZ3MtPkNISVBHQ1IpOworCisJeworCQl1OCBHQ1I7CisJCUdDUiA9IHJlYWRiKCZyZWdzLT5DSElQR0NSKTsKKwkJR0NSID0gKEdDUiAmIH5DSElQR0NSX0ZDR01JSSkgfCBDSElQR0NSX0ZDRkRYOworCQl3cml0ZWIoR0NSLCAmcmVncy0+Q0hJUEdDUik7CiAJfQogCi0JaWYgKGRldi0+bXR1ICE9IG5ld19tdHUpIHsKLQkJc3RydWN0IHZlbG9jaXR5X2luZm8gKnRtcF92cHRyOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlzdHJ1Y3QgcnhfaW5mbyByeDsKLQkJc3RydWN0IHR4X2luZm8gdHg7CisJQllURV9SRUdfQklUU19PRkYoSVNSX1BXRUksICZyZWdzLT5JU1IpOworCS8qIFR1cm4gb24gU1dQVEFHIGp1c3QgYmVmb3JlIGVudGVyaW5nIHBvd2VyIG1vZGUgKi8KKwlCWVRFX1JFR19CSVRTX09OKFNUSUNLSFdfU1dQVEFHLCAmcmVncy0+U1RJQ0tIVyk7CisJLyogR28gdG8gYmVkIC4uLi4uICovCisJQllURV9SRUdfQklUU19PTigoU1RJQ0tIV19EUzEgfCBTVElDS0hXX0RTMCksICZyZWdzLT5TVElDS0hXKTsKIAotCQl0bXBfdnB0ciA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBfdnB0ciksIEdGUF9LRVJORUwpOwotCQlpZiAoIXRtcF92cHRyKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfMDsKLQkJfQotCi0JCXRtcF92cHRyLT5kZXYgPSBkZXY7Ci0JCXRtcF92cHRyLT5wZGV2ID0gdnB0ci0+cGRldjsKLQkJdG1wX3ZwdHItPm9wdGlvbnMgPSB2cHRyLT5vcHRpb25zOwotCQl0bXBfdnB0ci0+dHgubnVtcSA9IHZwdHItPnR4Lm51bXE7Ci0KLQkJcmV0ID0gdmVsb2NpdHlfaW5pdF9yaW5ncyh0bXBfdnB0ciwgbmV3X210dSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfZnJlZV90bXBfdnB0cl8xOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7Ci0KLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQl2ZWxvY2l0eV9zaHV0ZG93bih2cHRyKTsKLQotCQlyeCA9IHZwdHItPnJ4OwotCQl0eCA9IHZwdHItPnR4OwotCi0JCXZwdHItPnJ4ID0gdG1wX3ZwdHItPnJ4OwotCQl2cHRyLT50eCA9IHRtcF92cHRyLT50eDsKLQotCQl0bXBfdnB0ci0+cnggPSByeDsKLQkJdG1wX3ZwdHItPnR4ID0gdHg7Ci0KLQkJZGV2LT5tdHUgPSBuZXdfbXR1OwotCi0JCXZlbG9jaXR5X2dpdmVfbWFueV9yeF9kZXNjcyh2cHRyKTsKLQotCQl2ZWxvY2l0eV9pbml0X3JlZ2lzdGVycyh2cHRyLCBWRUxPQ0lUWV9JTklUX0NPTEQpOwotCi0JCW1hY19lbmFibGVfaW50KHZwdHItPm1hY19yZWdzKTsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cHRyLT5sb2NrLCBmbGFncyk7Ci0KLQkJdmVsb2NpdHlfZnJlZV9yaW5ncyh0bXBfdnB0cik7Ci0KLW91dF9mcmVlX3RtcF92cHRyXzE6Ci0JCWtmcmVlKHRtcF92cHRyKTsKLQl9Ci1vdXRfMDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqCXZlbG9jaXR5X3NodXRkb3duCS0Jc2h1dCBkb3duIHRoZSBjaGlwCi0gKglAdnB0cjogdmVsb2NpdHkgdG8gZGVhY3RpdmF0ZQotICoKLSAqCVNodXRzIGRvd24gdGhlIGludGVybmFsIG9wZXJhdGlvbnMgb2YgdGhlIHZlbG9jaXR5IGFuZAotICoJZGlzYWJsZXMgaW50ZXJydXB0cywgYXV0b3BvbGxpbmcsIHRyYW5zbWl0IGFuZCByZWNlaXZlCi0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfc2h1dGRvd24oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0JbWFjX2Rpc2FibGVfaW50KHJlZ3MpOwotCXdyaXRlbChDUjBfU1RPUCwgJnJlZ3MtPkNSMFNldCk7Ci0Jd3JpdGV3KDB4RkZGRiwgJnJlZ3MtPlREQ1NSQ2xyKTsKLQl3cml0ZWIoMHhGRiwgJnJlZ3MtPlJEQ1NSQ2xyKTsKLQlzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsKHJlZ3MpOwotCW1hY19jbGVhcl9pc3IocmVncyk7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfY2xvc2UJCS0JY2xvc2UgYWRhcHRlciBjYWxsYmFjawotICoJQGRldjogbmV0d29yayBkZXZpY2UKLSAqCi0gKglDYWxsYmFjayBmcm9tIHRoZSBuZXR3b3JrIGxheWVyIHdoZW4gdGhlIHZlbG9jaXR5IGlzIGJlaW5nCi0gKglkZWFjdGl2YXRlZCBieSB0aGUgbmV0d29yayBsYXllcgotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JdmVsb2NpdHlfc2h1dGRvd24odnB0cik7Ci0KLQlpZiAodnB0ci0+ZmxhZ3MgJiBWRUxPQ0lUWV9GTEFHU19XT0xfRU5BQkxFRCkKLQkJdmVsb2NpdHlfZ2V0X2lwKHZwdHIpOwotCWlmIChkZXYtPmlycSAhPSAwKQotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQotCS8qIFBvd2VyIGRvd24gdGhlIGNoaXAgKi8KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EM2hvdCk7Ci0KLQl2ZWxvY2l0eV9mcmVlX3JpbmdzKHZwdHIpOwotCi0JdnB0ci0+ZmxhZ3MgJj0gKH5WRUxPQ0lUWV9GTEFHU19PUEVORUQpOwogCXJldHVybiAwOwogfQogCiAvKioKLSAqCXZlbG9jaXR5X3htaXQJCS0JdHJhbnNtaXQgcGFja2V0IGNhbGxiYWNrCi0gKglAc2tiOiBidWZmZXIgdG8gdHJhbnNtaXQKLSAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKgl2ZWxvY2l0eV9zYXZlX2NvbnRleHQJLQlzYXZlIHJlZ2lzdGVycworICoJQHZwdHI6IHZlbG9jaXR5CisgKglAY29udGV4dDogYnVmZmVyIGZvciBzdG9yZWQgY29udGV4dAogICoKLSAqCUNhbGxlZCBieSB0aGUgbmV0d29yIGxheWVyIHRvIHJlcXVlc3QgYSBwYWNrZXQgaXMgcXVldWVkIHRvCi0gKgl0aGUgdmVsb2NpdHkuIFJldHVybnMgemVybyBvbiBzdWNjZXNzLgorICoJUmV0cmlldmUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB2ZWxvY2l0eSBoYXJkd2FyZQorICoJYW5kIHN0YXNoIGl0IGluIHRoZSBjb250ZXh0IHN0cnVjdHVyZSwgZm9yIHVzZSBieSB0aGUgY29udGV4dAorICoJcmVzdG9yZSBmdW5jdGlvbnMuIFRoaXMgYWxsb3dzIHVzIHRvIHNhdmUgdGhpbmdzIHdlIG5lZWQgYWNyb3NzCisgKglwb3dlciBkb3duIHN0YXRlcwogICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdmVsb2NpdHlfc2F2ZV9jb250ZXh0KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBzdHJ1Y3QgdmVsb2NpdHlfY29udGV4dCAqY29udGV4dCkKIHsKKwlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncyA9IHZwdHItPm1hY19yZWdzOworCXUxNiBpOworCXU4IF9faW9tZW0gKnB0ciA9ICh1OCBfX2lvbWVtICopcmVnczsKKworCWZvciAoaSA9IE1BQ19SRUdfUEFSOyBpIDwgTUFDX1JFR19DUjBfQ0xSOyBpICs9IDQpCisJCSooKHUzMiAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSA9IHJlYWRsKHB0ciArIGkpOworCisJZm9yIChpID0gTUFDX1JFR19NQVI7IGkgPCBNQUNfUkVHX1REQ1NSX0NMUjsgaSArPSA0KQorCQkqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSkgPSByZWFkbChwdHIgKyBpKTsKKworCWZvciAoaSA9IE1BQ19SRUdfUkRCQVNFX0xPOyBpIDwgTUFDX1JFR19GSUZPX1RFU1QwOyBpICs9IDQpCisJCSooKHUzMiAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSA9IHJlYWRsKHB0ciArIGkpOworCit9CisKK3N0YXRpYyBpbnQgdmVsb2NpdHlfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBxbnVtID0gMDsKLQlzdHJ1Y3QgdHhfZGVzYyAqdGRfcHRyOwotCXN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvICp0ZGluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcGt0bGVuOwotCV9fbGUxNiBsZW47Ci0JaW50IGluZGV4OwogCi0KLQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQlnb3RvIG91dDsKLQlwa3RsZW4gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHNrYi0+bGVuLCBFVEhfWkxFTik7Ci0KLQlsZW4gPSBjcHVfdG9fbGUxNihwa3RsZW4pOwotCi0jaWZkZWYgVkVMT0NJVFlfWkVST19DT1BZX1NVUFBPUlQKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA+IDYgJiYgX19za2JfbGluZWFyaXplKHNrYikpIHsKLQkJa2ZyZWVfc2tiKHNrYik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKHZwdHItPmRldikpCiAJCXJldHVybiAwOwotCX0KLSNlbmRpZgorCisJbmV0aWZfZGV2aWNlX2RldGFjaCh2cHRyLT5kZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKLQotCWluZGV4ID0gdnB0ci0+dHguY3VycltxbnVtXTsKLQl0ZF9wdHIgPSAmKHZwdHItPnR4LnJpbmdzW3FudW1dW2luZGV4XSk7Ci0JdGRpbmZvID0gJih2cHRyLT50eC5pbmZvc1txbnVtXVtpbmRleF0pOwotCi0JdGRfcHRyLT50ZGVzYzEuVENSID0gVENSMF9USUM7Ci0JdGRfcHRyLT50ZF9idWZbMF0uc2l6ZSAmPSB+VERfUVVFVUU7Ci0KLSNpZmRlZiBWRUxPQ0lUWV9aRVJPX0NPUFlfU1VQUE9SVAotCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID4gMCkgewotCQlpbnQgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQkJdGRpbmZvLT5za2IgPSBza2I7Ci0JCWlmIChuZnJhZ3MgPiA2KSB7Ci0JCQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgdGRpbmZvLT5idWYsIHNrYi0+bGVuKTsKLQkJCXRkaW5mby0+c2tiX2RtYVswXSA9IHRkaW5mby0+YnVmX2RtYTsKLQkJCXRkX3B0ci0+dGRlc2MwLmxlbiA9IGxlbjsKLQkJCXRkX3B0ci0+dHguYnVmWzBdLnBhX2xvdyA9IGNwdV90b19sZTMyKHRkaW5mby0+c2tiX2RtYVswXSk7Ci0JCQl0ZF9wdHItPnR4LmJ1ZlswXS5wYV9oaWdoID0gMDsKLQkJCXRkX3B0ci0+dHguYnVmWzBdLnNpemUgPSBsZW47CS8qIHF1ZXVlIGlzIDAgYW55d2F5ICovCi0JCQl0ZGluZm8tPm5za2JfZG1hID0gMTsKLQkJfSBlbHNlIHsKLQkJCWludCBpID0gMDsKLQkJCXRkaW5mby0+bnNrYl9kbWEgPSAwOwotCQkJdGRpbmZvLT5za2JfZG1hW2ldID0gcGNpX21hcF9zaW5nbGUodnB0ci0+cGRldiwgc2tiLT5kYXRhLAotCQkJCQkJc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJCXRkX3B0ci0+dGRlc2MwLmxlbiA9IGxlbjsKLQotCQkJLyogRklYTUU6IHN1cHBvcnQgNDhiaXQgRE1BIGxhdGVyICovCi0JCQl0ZF9wdHItPnR4LmJ1ZltpXS5wYV9sb3cgPSBjcHVfdG9fbGUzMih0ZGluZm8tPnNrYl9kbWEpOwotCQkJdGRfcHRyLT50eC5idWZbaV0ucGFfaGlnaCA9IDA7Ci0JCQl0ZF9wdHItPnR4LmJ1ZltpXS5zaXplID0gY3B1X3RvX2xlMTYoc2tiX2hlYWRsZW4oc2tiKSk7Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBuZnJhZ3M7IGkrKykgewotCQkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQkJCQl2b2lkICphZGRyID0gKHZvaWQgKilwYWdlX2FkZHJlc3MoZnJhZy0+cGFnZSkgKyBmcmFnLT5wYWdlX29mZnNldDsKLQotCQkJCXRkaW5mby0+c2tiX2RtYVtpICsgMV0gPSBwY2lfbWFwX3NpbmdsZSh2cHRyLT5wZGV2LCBhZGRyLCBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCQkJCXRkX3B0ci0+dHguYnVmW2kgKyAxXS5wYV9sb3cgPSBjcHVfdG9fbGUzMih0ZGluZm8tPnNrYl9kbWFbaSArIDFdKTsKLQkJCQl0ZF9wdHItPnR4LmJ1ZltpICsgMV0ucGFfaGlnaCA9IDA7Ci0JCQkJdGRfcHRyLT50eC5idWZbaSArIDFdLnNpemUgPSBjcHVfdG9fbGUxNihmcmFnLT5zaXplKTsKLQkJCX0KLQkJCXRkaW5mby0+bnNrYl9kbWEgPSBpIC0gMTsKLQkJfQotCi0JfSBlbHNlCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisjaWZkZWYgRVRIVE9PTF9HV09MCisJaWYgKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfV09MX0VOQUJMRUQpIHsKKwkJdmVsb2NpdHlfZ2V0X2lwKHZwdHIpOworCQl2ZWxvY2l0eV9zYXZlX2NvbnRleHQodnB0ciwgJnZwdHItPmNvbnRleHQpOworCQl2ZWxvY2l0eV9zaHV0ZG93bih2cHRyKTsKKwkJdmVsb2NpdHlfc2V0X3dvbCh2cHRyKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKKwl9IGVsc2UgeworCQl2ZWxvY2l0eV9zYXZlX2NvbnRleHQodnB0ciwgJnZwdHItPmNvbnRleHQpOworCQl2ZWxvY2l0eV9zaHV0ZG93bih2cHRyKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwl9CisjZWxzZQorCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwogI2VuZGlmCi0JewotCQkvKgotCQkgKglNYXAgdGhlIGxpbmVhciBuZXR3b3JrIGJ1ZmZlciBpbnRvIFBDSSBzcGFjZSBhbmQKLQkJICoJYWRkIGl0IHRvIHRoZSB0cmFuc21pdCByaW5nLgotCQkgKi8KLQkJdGRpbmZvLT5za2IgPSBza2I7Ci0JCXRkaW5mby0+c2tiX2RtYVswXSA9IHBjaV9tYXBfc2luZ2xlKHZwdHItPnBkZXYsIHNrYi0+ZGF0YSwgcGt0bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJdGRfcHRyLT50ZGVzYzAubGVuID0gbGVuOwotCQl0ZF9wdHItPnRkX2J1ZlswXS5wYV9sb3cgPSBjcHVfdG9fbGUzMih0ZGluZm8tPnNrYl9kbWFbMF0pOwotCQl0ZF9wdHItPnRkX2J1ZlswXS5wYV9oaWdoID0gMDsKLQkJdGRfcHRyLT50ZF9idWZbMF0uc2l6ZSA9IGxlbjsKLQkJdGRpbmZvLT5uc2tiX2RtYSA9IDE7Ci0JfQotCXRkX3B0ci0+dGRlc2MxLmNtZCA9IFRDUExTX05PUk1BTCArICh0ZGluZm8tPm5za2JfZG1hICsgMSkgKiAxNjsKLQotCWlmICh2cHRyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJdGRfcHRyLT50ZGVzYzEudmxhbiA9IGNwdV90b19sZTE2KHZsYW5fdHhfdGFnX2dldChza2IpKTsKLQkJdGRfcHRyLT50ZGVzYzEuVENSIHw9IFRDUjBfVkVUQUc7Ci0JfQotCi0JLyoKLQkgKglIYW5kbGUgaGFyZHdhcmUgY2hlY2tzdW0KLQkgKi8KLQlpZiAoKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfVFhfQ1NVTSkKLQkJCQkgJiYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7Ci0JCWNvbnN0IHN0cnVjdCBpcGhkciAqaXAgPSBpcF9oZHIoc2tiKTsKLQkJaWYgKGlwLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKLQkJCXRkX3B0ci0+dGRlc2MxLlRDUiB8PSBUQ1IwX1RDUENLOwotCQllbHNlIGlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApCi0JCQl0ZF9wdHItPnRkZXNjMS5UQ1IgfD0gKFRDUjBfVURQQ0spOwotCQl0ZF9wdHItPnRkZXNjMS5UQ1IgfD0gVENSMF9JUENLOwotCX0KLQl7Ci0KLQkJaW50IHByZXYgPSBpbmRleCAtIDE7Ci0KLQkJaWYgKHByZXYgPCAwKQotCQkJcHJldiA9IHZwdHItPm9wdGlvbnMubnVtdHggLSAxOwotCQl0ZF9wdHItPnRkZXNjMC5sZW4gfD0gT1dORURfQllfTklDOwotCQl2cHRyLT50eC51c2VkW3FudW1dKys7Ci0JCXZwdHItPnR4LmN1cnJbcW51bV0gPSAoaW5kZXggKyAxKSAlIHZwdHItPm9wdGlvbnMubnVtdHg7Ci0KLQkJaWYgKEFWQUlMX1REKHZwdHIsIHFudW0pIDwgMSkKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCQl0ZF9wdHIgPSAmKHZwdHItPnR4LnJpbmdzW3FudW1dW3ByZXZdKTsKLQkJdGRfcHRyLT50ZF9idWZbMF0uc2l6ZSB8PSBURF9RVUVVRTsKLQkJbWFjX3R4X3F1ZXVlX3dha2UodnB0ci0+bWFjX3JlZ3MsIHFudW0pOwotCX0KLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cHRyLT5sb2NrLCBmbGFncyk7Ci1vdXQ6Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKgl2ZWxvY2l0eV9pbnRyCQktCWludGVycnVwdCBjYWxsYmFjawotICoJQGlycTogaW50ZXJydXB0IG51bWJlcgotICoJQGRldl9pbnN0YW5jZTogaW50ZXJydXB0aW5nIGRldmljZQorICoJdmVsb2NpdHlfcmVzdG9yZV9jb250ZXh0CS0JcmVzdG9yZSByZWdpc3RlcnMKKyAqCUB2cHRyOiB2ZWxvY2l0eQorICoJQGNvbnRleHQ6IGJ1ZmZlciBmb3Igc3RvcmVkIGNvbnRleHQKICAqCi0gKglDYWxsZWQgd2hlbmV2ZXIgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSB0aGUgdmVsb2NpdHkKLSAqCWFkYXB0ZXIgSVJRIGxpbmUuIFdlIG1heSBub3QgYmUgdGhlIHNvdXJjZSBvZiB0aGUgaW50ZXJydXB0Ci0gKglhbmQgbmVlZCB0byBpZGVudGlmeSBpbml0aWFsbHkgaWYgd2UgYXJlLCBhbmQgaWYgbm90IGV4aXQgYXMKLSAqCWVmZmljaWVudGx5IGFzIHBvc3NpYmxlLgorICoJUmVsb2FkIHRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIHZlbG9jaXR5IGNvbnRleHQKKyAqCWNyZWF0ZWQgYnkgdmVsb2NpdHlfc2F2ZV9jb250ZXh0LgogICovCi0KLXN0YXRpYyBpcnFyZXR1cm5fdCB2ZWxvY2l0eV9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKK3N0YXRpYyB2b2lkIHZlbG9jaXR5X3Jlc3RvcmVfY29udGV4dChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X2NvbnRleHQgKmNvbnRleHQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pbnN0YW5jZTsKLQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIGlzcl9zdGF0dXM7Ci0JaW50IG1heF9jb3VudCA9IDA7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKKwlpbnQgaTsKKwl1OCBfX2lvbWVtICpwdHIgPSAodTggX19pb21lbSAqKXJlZ3M7CiAKKwlmb3IgKGkgPSBNQUNfUkVHX1BBUjsgaSA8IE1BQ19SRUdfQ1IwX1NFVDsgaSArPSA0KQorCQl3cml0ZWwoKigodTMyICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpLCBwdHIgKyBpKTsKIAotCXNwaW5fbG9jaygmdnB0ci0+bG9jayk7Ci0JaXNyX3N0YXR1cyA9IG1hY19yZWFkX2lzcih2cHRyLT5tYWNfcmVncyk7Ci0KLQkvKiBOb3QgdXMgPyAqLwotCWlmIChpc3Jfc3RhdHVzID09IDApIHsKLQkJc3Bpbl91bmxvY2soJnZwdHItPmxvY2spOwotCQlyZXR1cm4gSVJRX05PTkU7CisJLyogSnVzdCBza2lwIGNyMCAqLworCWZvciAoaSA9IE1BQ19SRUdfQ1IxX1NFVDsgaSA8IE1BQ19SRUdfQ1IwX0NMUjsgaSsrKSB7CisJCS8qIENsZWFyICovCisJCXdyaXRlYih+KCooKHU4ICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpKSwgcHRyICsgaSArIDQpOworCQkvKiBTZXQgKi8KKwkJd3JpdGViKCooKHU4ICopIChjb250ZXh0LT5tYWNfcmVnICsgaSkpLCBwdHIgKyBpKTsKIAl9CiAKKwlmb3IgKGkgPSBNQUNfUkVHX01BUjsgaSA8IE1BQ19SRUdfSU1SOyBpICs9IDQpCisJCXdyaXRlbCgqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOworCisJZm9yIChpID0gTUFDX1JFR19SREJBU0VfTE87IGkgPCBNQUNfUkVHX0ZJRk9fVEVTVDA7IGkgKz0gNCkKKwkJd3JpdGVsKCooKHUzMiAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSwgcHRyICsgaSk7CisKKwlmb3IgKGkgPSBNQUNfUkVHX1REQ1NSX1NFVDsgaSA8PSBNQUNfUkVHX1JEQ1NSX1NFVDsgaSsrKQorCQl3cml0ZWIoKigodTggKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOworfQorCitzdGF0aWMgaW50IHZlbG9jaXR5X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHZwdHItPmRldikpCisJCXJldHVybiAwOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCAwLCAwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCW1hY193b2xfcmVzZXQodnB0ci0+bWFjX3JlZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKKwl2ZWxvY2l0eV9yZXN0b3JlX2NvbnRleHQodnB0ciwgJnZwdHItPmNvbnRleHQpOworCXZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHZwdHIsIFZFTE9DSVRZX0lOSVRfV09MKTsKIAltYWNfZGlzYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwogCi0JLyoKLQkgKglLZWVwIHByb2Nlc3NpbmcgdGhlIElTUiB1bnRpbCB3ZSBoYXZlIGNvbXBsZXRlZAotCSAqCXByb2Nlc3NpbmcgYW5kIHRoZSBpc3Jfc3RhdHVzIGJlY29tZXMgemVybwotCSAqLworCXZlbG9jaXR5X3R4X3Nydih2cHRyLCAwKTsKIAotCXdoaWxlIChpc3Jfc3RhdHVzICE9IDApIHsKLQkJbWFjX3dyaXRlX2lzcih2cHRyLT5tYWNfcmVncywgaXNyX3N0YXR1cyk7Ci0JCWlmIChpc3Jfc3RhdHVzICYgKH4oSVNSX1BSWEkgfCBJU1JfUFBSWEkgfCBJU1JfUFRYSSB8IElTUl9QUFRYSSkpKQotCQkJdmVsb2NpdHlfZXJyb3IodnB0ciwgaXNyX3N0YXR1cyk7Ci0JCWlmIChpc3Jfc3RhdHVzICYgKElTUl9QUlhJIHwgSVNSX1BQUlhJKSkKLQkJCW1heF9jb3VudCArPSB2ZWxvY2l0eV9yeF9zcnYodnB0ciwgaXNyX3N0YXR1cyk7Ci0JCWlmIChpc3Jfc3RhdHVzICYgKElTUl9QVFhJIHwgSVNSX1BQVFhJKSkKLQkJCW1heF9jb3VudCArPSB2ZWxvY2l0eV90eF9zcnYodnB0ciwgaXNyX3N0YXR1cyk7Ci0JCWlzcl9zdGF0dXMgPSBtYWNfcmVhZF9pc3IodnB0ci0+bWFjX3JlZ3MpOwotCQlpZiAobWF4X2NvdW50ID4gdnB0ci0+b3B0aW9ucy5pbnRfd29ya3MpCi0JCXsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBleGNlc3NpdmUgd29yayBhdCBpbnRlcnJ1cHQuXG4iLAotCQkJCWRldi0+bmFtZSk7Ci0JCQltYXhfY291bnQgPSAwOwotCQl9CisJZm9yIChpID0gMDsgaSA8IHZwdHItPnR4Lm51bXE7IGkrKykgeworCQlpZiAodnB0ci0+dHgudXNlZFtpXSkKKwkJCW1hY190eF9xdWV1ZV93YWtlKHZwdHItPm1hY19yZWdzLCBpKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnZwdHItPmxvY2spOworCiAJbWFjX2VuYWJsZV9pbnQodnB0ci0+bWFjX3JlZ3MpOwotCXJldHVybiBJUlFfSEFORExFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cHRyLT5sb2NrLCBmbGFncyk7CisJbmV0aWZfZGV2aWNlX2F0dGFjaCh2cHRyLT5kZXYpOwogCisJcmV0dXJuIDA7CiB9Ci0KLQotLyoqCi0gKgl2ZWxvY2l0eV9zZXRfbXVsdGkJLQlmaWx0ZXIgbGlzdCBjaGFuZ2UgY2FsbGJhY2sKLSAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlCi0gKgotICoJQ2FsbGVkIGJ5IHRoZSBuZXR3b3JrIGxheWVyIHdoZW4gdGhlIGZpbHRlciBsaXN0cyBuZWVkIHRvIGNoYW5nZQotICoJZm9yIGEgdmVsb2NpdHkgYWRhcHRlci4gUmVsb2FkIHRoZSBDQU1zIHdpdGggdGhlIG5ldyBhZGRyZXNzCi0gKglmaWx0ZXIgcnVsZXNldC4KLSAqLwotCi1zdGF0aWMgdm9pZCB2ZWxvY2l0eV9zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0JdTggcnhfbW9kZTsKLQlpbnQgaTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJLyogU2V0IHByb21pc2N1b3VzLiAqLwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVswXSk7Ci0JCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzRdKTsKLQkJcnhfbW9kZSA9IChSQ1JfQU0gfCBSQ1JfQUIgfCBSQ1JfUFJPTSk7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IHZwdHItPm11bHRpY2FzdF9saW1pdCkKLQkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7Ci0JCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzBdKTsKLQkJd3JpdGVsKDB4ZmZmZmZmZmYsICZyZWdzLT5NQVJDQU1bNF0pOwotCQlyeF9tb2RlID0gKFJDUl9BTSB8IFJDUl9BQik7Ci0JfSBlbHNlIHsKLQkJaW50IG9mZnNldCA9IE1DQU1fU0laRSAtIHZwdHItPm11bHRpY2FzdF9saW1pdDsKLQkJbWFjX2dldF9jYW1fbWFzayhyZWdzLCB2cHRyLT5tQ0FNbWFzayk7Ci0KLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQltYWNfc2V0X2NhbShyZWdzLCBpICsgb2Zmc2V0LCBtY2xpc3QtPmRtaV9hZGRyKTsKLQkJCXZwdHItPm1DQU1tYXNrWyhvZmZzZXQgKyBpKSAvIDhdIHw9IDEgPDwgKChvZmZzZXQgKyBpKSAmIDcpOwotCQl9Ci0KLQkJbWFjX3NldF9jYW1fbWFzayhyZWdzLCB2cHRyLT5tQ0FNbWFzayk7Ci0JCXJ4X21vZGUgPSBSQ1JfQU0gfCBSQ1JfQUIgfCBSQ1JfQVA7Ci0JfQotCWlmIChkZXYtPm10dSA+IDE1MDApCi0JCXJ4X21vZGUgfD0gUkNSX0FMOwotCi0JQllURV9SRUdfQklUU19PTihyeF9tb2RlLCAmcmVncy0+UkNSKTsKLQotfQotCi0vKioKLSAqCXZlbG9jaXR5X2dldF9zdGF0dXMJLQlzdGF0aXN0aWNzIGNhbGxiYWNrCi0gKglAZGV2OiBuZXR3b3JrIGRldmljZQotICoKLSAqCUNhbGxiYWNrIGZyb20gdGhlIG5ldHdvcmsgbGF5ZXIgdG8gYWxsb3cgZHJpdmVyIHN0YXRpc3RpY3MKLSAqCXRvIGJlIHJlc3luY2hyb25pemVkIHdpdGggaGFyZHdhcmUgY29sbGVjdGVkIHN0YXRlLiBJbiB0aGUKLSAqCWNhc2Ugb2YgdGhlIHZlbG9jaXR5IHdlIG5lZWQgdG8gcHVsbCB0aGUgTUlCIGNvdW50ZXJzIGZyb20KLSAqCXRoZSBoYXJkd2FyZSBpbnRvIHRoZSBjb3VudGVycyBiZWZvcmUgbGV0dGluZyB0aGUgbmV0d29yawotICoJbGF5ZXIgZGlzcGxheSB0aGVtLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdmVsb2NpdHlfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogSWYgdGhlIGhhcmR3YXJlIGlzIGRvd24sIGRvbid0IHRvdWNoIE1JSSAqLwotCWlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAmZGV2LT5zdGF0czsKLQotCXNwaW5fbG9ja19pcnEoJnZwdHItPmxvY2spOwotCXZlbG9jaXR5X3VwZGF0ZV9od19taWJzKHZwdHIpOwotCXNwaW5fdW5sb2NrX2lycSgmdnB0ci0+bG9jayk7Ci0KLQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSB2cHRyLT5taWJfY291bnRlcltIV19NSUJfaWZSeEFsbFBrdHNdOwotCWRldi0+c3RhdHMucnhfZXJyb3JzID0gdnB0ci0+bWliX2NvdW50ZXJbSFdfTUlCX2lmUnhFcnJvclBrdHNdOwotCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IHZwdHItPm1pYl9jb3VudGVyW0hXX01JQl9pZkluUmFuZ2VMZW5ndGhFcnJvcnNdOwotCi0vLyAgdW5zaWduZWQgbG9uZyAgIHJ4X2Ryb3BwZWQ7ICAgICAvKiBubyBzcGFjZSBpbiBsaW51eCBidWZmZXJzICAgICovCi0JZGV2LT5zdGF0cy5jb2xsaXNpb25zID0gdnB0ci0+bWliX2NvdW50ZXJbSFdfTUlCX2lmVHhFdGhlckNvbGxpc2lvbnNdOwotCS8qIGRldGFpbGVkIHJ4X2Vycm9yczogKi8KLS8vICB1bnNpZ25lZCBsb25nICAgcnhfbGVuZ3RoX2Vycm9yczsKLS8vICB1bnNpZ25lZCBsb25nICAgcnhfb3Zlcl9lcnJvcnM7ICAgICAvKiByZWNlaXZlciByaW5nIGJ1ZmYgb3ZlcmZsb3cgICovCi0JZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzID0gdnB0ci0+bWliX2NvdW50ZXJbSFdfTUlCX2lmUnhQa3RDUkNFXTsKLS8vICB1bnNpZ25lZCBsb25nICAgcnhfZnJhbWVfZXJyb3JzOyAgICAvKiByZWN2J2QgZnJhbWUgYWxpZ25tZW50IGVycm9yICovCi0vLyAgdW5zaWduZWQgbG9uZyAgIHJ4X2ZpZm9fZXJyb3JzOyAgICAgLyogcmVjdidyIGZpZm8gb3ZlcnJ1biAgICAgICovCi0vLyAgdW5zaWduZWQgbG9uZyAgIHJ4X21pc3NlZF9lcnJvcnM7ICAgLyogcmVjZWl2ZXIgbWlzc2VkIHBhY2tldCAgICovCi0KLQkvKiBkZXRhaWxlZCB0eF9lcnJvcnMgKi8KLS8vICB1bnNpZ25lZCBsb25nICAgdHhfZmlmb19lcnJvcnM7Ci0KLQlyZXR1cm4gJmRldi0+c3RhdHM7Ci19Ci0KLQotLyoqCi0gKgl2ZWxvY2l0eV9pb2N0bAkJLQlpb2N0bCBlbnRyeSBwb2ludAotICoJQGRldjogbmV0d29yayBkZXZpY2UKLSAqCUBycTogaW50ZXJmYWNlIHJlcXVlc3QgaW9jdGwKLSAqCUBjbWQ6IGNvbW1hbmQgY29kZQotICoKLSAqCUNhbGxlZCB3aGVuIHRoZSB1c2VyIGlzc3VlcyBhbiBpb2N0bCByZXF1ZXN0IHRvIHRoZSBuZXR3b3JrCi0gKglkZXZpY2UgaW4gcXVlc3Rpb24uIFRoZSB2ZWxvY2l0eSBpbnRlcmZhY2Ugc3VwcG9ydHMgTUlJLgotICovCi0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHJldDsKLQotCS8qIElmIHdlIGFyZSBhc2tlZCBmb3IgaW5mb3JtYXRpb24gYW5kIHRoZSBkZXZpY2UgaXMgcG93ZXIKLQkgICBzYXZpbmcgdGhlbiB3ZSBuZWVkIHRvIGJyaW5nIHRoZSBkZXZpY2UgYmFjayB1cCB0byB0YWxrIHRvIGl0ICovCi0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDApOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNJT0NHTUlJUEhZOgkvKiBHZXQgYWRkcmVzcyBvZiBNSUkgUEhZIGluIHVzZS4gKi8KLQljYXNlIFNJT0NHTUlJUkVHOgkvKiBSZWFkIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JY2FzZSBTSU9DU01JSVJFRzoJLyogV3JpdGUgdG8gTUlJIFBIWSByZWdpc3Rlci4gKi8KLQkJcmV0ID0gdmVsb2NpdHlfbWlpX2lvY3RsKGRldiwgcnEsIGNtZCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JfQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EM2hvdCk7Ci0KLQotCXJldHVybiByZXQ7Ci19CisjZW5kaWYKIAogLyoKICAqCURlZmluaXRpb24gZm9yIG91ciBkZXZpY2UgZHJpdmVyLiBUaGUgUENJIGxheWVyIGludGVyZmFjZQogICoJdXNlcyB0aGlzIHRvIGhhbmRsZSBhbGwgb3VyIGNhcmQgZGlzY292ZXIgYW5kIHBsdWdnaW5nCiAgKi8KLQogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZlbG9jaXR5X2RyaXZlciA9IHsKICAgICAgIC5uYW1lCT0gVkVMT0NJVFlfTkFNRSwKICAgICAgIC5pZF90YWJsZQk9IHZlbG9jaXR5X2lkX3RhYmxlLApAQCAtMjQwNyw1ODIgKzMwNzAsNiBAQAogI2VuZGlmCiB9OwogCi0vKioKLSAqCXZlbG9jaXR5X2luaXRfbW9kdWxlCS0JbG9hZCB0aW1lIGZ1bmN0aW9uCi0gKgotICoJQ2FsbGVkIHdoZW4gdGhlIHZlbG9jaXR5IG1vZHVsZSBpcyBsb2FkZWQuIFRoZSBQQ0kgZHJpdmVyCi0gKglpcyByZWdpc3RlcmVkIHdpdGggdGhlIFBDSSBsYXllciwgYW5kIGluIHR1cm4gd2lsbCBjYWxsCi0gKgl0aGUgcHJvYmUgZnVuY3Rpb25zIGZvciBlYWNoIHZlbG9jaXR5IGFkYXB0ZXIgaW5zdGFsbGVkCi0gKglpbiB0aGUgc3lzdGVtLgotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IHZlbG9jaXR5X2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXZlbG9jaXR5X3JlZ2lzdGVyX25vdGlmaWVyKCk7Ci0JcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdmVsb2NpdHlfZHJpdmVyKTsKLQlpZiAocmV0IDwgMCkKLQkJdmVsb2NpdHlfdW5yZWdpc3Rlcl9ub3RpZmllcigpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfY2xlYW51cAktCW1vZHVsZSB1bmxvYWQKLSAqCi0gKglXaGVuIHRoZSB2ZWxvY2l0eSBoYXJkd2FyZSBpcyB1bmxvYWRlZCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCUl0IHdpbGwgY2xlYW4gdXAgdGhlIG5vdGlmaWVycyBhbmQgdGhlIHVucmVnaXN0ZXIgdGhlIFBDSQotICoJZHJpdmVyIGludGVyZmFjZSBmb3IgdGhpcyBoYXJkd2FyZS4gVGhpcyBpbiB0dXJuIGNsZWFucyB1cAotICoJYWxsIGRpc2NvdmVyZWQgaW50ZXJmYWNlcyBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIGZ1bmN0aW9uCi0gKi8KLQotc3RhdGljIHZvaWQgX19leGl0IHZlbG9jaXR5X2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JdmVsb2NpdHlfdW5yZWdpc3Rlcl9ub3RpZmllcigpOwotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdmVsb2NpdHlfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodmVsb2NpdHlfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQodmVsb2NpdHlfY2xlYW51cF9tb2R1bGUpOwotCi0KLS8qCi0gKiBNSUkgYWNjZXNzICwgbWVkaWEgbGluayBtb2RlIHNldHRpbmcgZnVuY3Rpb25zCi0gKi8KLQotCi0vKioKLSAqCW1paV9pbml0CS0Jc2V0IHVwIE1JSQotICoJQHZwdHI6IHZlbG9jaXR5IGFkYXB0ZXIKLSAqCUBtaWlfc3RhdHVzOiAgbGlua3MgdGF0dXMKLSAqCi0gKglTZXQgdXAgdGhlIFBIWSBmb3IgdGhlIGN1cnJlbnQgbGluayBzdGF0ZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBtaWlfaW5pdChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIG1paV9zdGF0dXMpCi17Ci0JdTE2IEJNQ1I7Ci0KLQlzd2l0Y2ggKFBIWUlEX0dFVF9QSFlfSUQodnB0ci0+cGh5X2lkKSkgewotCWNhc2UgUEhZSURfQ0lDQURBX0NTODIwMToKLQkJLyoKLQkJICoJUmVzZXQgdG8gaGFyZHdhcmUgZGVmYXVsdAotCQkgKi8KLQkJTUlJX1JFR19CSVRTX09GRigoQU5BUl9BU01ESVIgfCBBTkFSX1BBVVNFKSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCS8qCi0JCSAqCVR1cm4gb24gRUNIT0RJUyBiaXQgaW4gTldheS1mb3JjZWQgZnVsbCBtb2RlIGFuZCB0dXJuIGl0Ci0JCSAqCW9mZiBpdCBpbiBOV2F5LWZvcmNlZCBoYWxmIG1vZGUgZm9yIE5XYXktZm9yY2VkIHYucy4KLQkJICoJbGVnYWN5LWZvcmNlZCBpc3N1ZS4KLQkJICovCi0JCWlmICh2cHRyLT5taWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpCi0JCQlNSUlfUkVHX0JJVFNfT04oVENTUl9FQ0hPRElTLCBNSUlfUkVHX1RDU1IsIHZwdHItPm1hY19yZWdzKTsKLQkJZWxzZQotCQkJTUlJX1JFR19CSVRTX09GRihUQ1NSX0VDSE9ESVMsIE1JSV9SRUdfVENTUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQkvKgotCQkgKglUdXJuIG9uIExpbmsvQWN0aXZpdHkgTEVEIGVuYWJsZSBiaXQgZm9yIENJUzgyMDEKLQkJICovCi0JCU1JSV9SRUdfQklUU19PTihQTEVEX0xBTEJFLCBNSUlfUkVHX1BMRUQsIHZwdHItPm1hY19yZWdzKTsKLQkJYnJlYWs7Ci0JY2FzZSBQSFlJRF9WVDMyMTZfMzJCSVQ6Ci0JY2FzZSBQSFlJRF9WVDMyMTZfNjRCSVQ6Ci0JCS8qCi0JCSAqCVJlc2V0IHRvIGhhcmR3YXJlIGRlZmF1bHQKLQkJICovCi0JCU1JSV9SRUdfQklUU19PTigoQU5BUl9BU01ESVIgfCBBTkFSX1BBVVNFKSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCS8qCi0JCSAqCVR1cm4gb24gRUNIT0RJUyBiaXQgaW4gTldheS1mb3JjZWQgZnVsbCBtb2RlIGFuZCB0dXJuIGl0Ci0JCSAqCW9mZiBpdCBpbiBOV2F5LWZvcmNlZCBoYWxmIG1vZGUgZm9yIE5XYXktZm9yY2VkIHYucy4KLQkJICoJbGVnYWN5LWZvcmNlZCBpc3N1ZQotCQkgKi8KLQkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKLQkJCU1JSV9SRUdfQklUU19PTihUQ1NSX0VDSE9ESVMsIE1JSV9SRUdfVENTUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQllbHNlCi0JCQlNSUlfUkVHX0JJVFNfT0ZGKFRDU1JfRUNIT0RJUywgTUlJX1JFR19UQ1NSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQSFlJRF9NQVJWRUxMXzEwMDA6Ci0JY2FzZSBQSFlJRF9NQVJWRUxMXzEwMDBTOgotCQkvKgotCQkgKglBc3NlcnQgQ1JTIG9uIFRyYW5zbWl0Ci0JCSAqLwotCQlNSUlfUkVHX0JJVFNfT04oUFNDUl9BQ1JTVFgsIE1JSV9SRUdfUFNDUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQkvKgotCQkgKglSZXNldCB0byBoYXJkd2FyZSBkZWZhdWx0Ci0JCSAqLwotCQlNSUlfUkVHX0JJVFNfT04oKEFOQVJfQVNNRElSIHwgQU5BUl9QQVVTRSksIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQk7Ci0JfQotCXZlbG9jaXR5X21paV9yZWFkKHZwdHItPm1hY19yZWdzLCBNSUlfUkVHX0JNQ1IsICZCTUNSKTsKLQlpZiAoQk1DUiAmIEJNQ1JfSVNPKSB7Ci0JCUJNQ1IgJj0gfkJNQ1JfSVNPOwotCQl2ZWxvY2l0eV9taWlfd3JpdGUodnB0ci0+bWFjX3JlZ3MsIE1JSV9SRUdfQk1DUiwgQk1DUik7Ci0JfQotfQotCi0vKioKLSAqCXNhZmVfZGlzYWJsZV9taWlfYXV0b3BvbGwJLQlhdXRvcG9sbCBvZmYKLSAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKLSAqCi0gKglUdXJuIG9mZiB0aGUgYXV0b3BvbGwgYW5kIHdhaXQgZm9yIGl0IHRvIGRpc2FibGUgb24gdGhlIGNoaXAKLSAqLwotCi1zdGF0aWMgdm9pZCBzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncykKLXsKLQl1MTYgd3c7Ci0KLQkvKiAgdHVybiBvZmYgTUFVVE8gKi8KLQl3cml0ZWIoMCwgJnJlZ3MtPk1JSUNSKTsKLQlmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7Ci0JCXVkZWxheSgxKTsKLQkJaWYgKEJZVEVfUkVHX0JJVFNfSVNfT04oTUlJU1JfTUlETEUsICZyZWdzLT5NSUlTUikpCi0JCQlicmVhazsKLQl9Ci19Ci0KLS8qKgotICoJZW5hYmxlX21paV9hdXRvcG9sbAktCXR1cm4gb24gYXV0b3BvbGxpbmcKLSAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKLSAqCi0gKglFbmFibGUgdGhlIE1JSSBsaW5rIHN0YXR1cyBhdXRvcG9sbCBmZWF0dXJlIG9uIHRoZSBWZWxvY2l0eQotICoJaGFyZHdhcmUuIFdhaXQgZm9yIGl0IHRvIGVuYWJsZS4KLSAqLwotCi1zdGF0aWMgdm9pZCBlbmFibGVfbWlpX2F1dG9wb2xsKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncykKLXsKLQlpbnQgaWk7Ci0KLQl3cml0ZWIoMCwgJihyZWdzLT5NSUlDUikpOwotCXdyaXRlYihNSUlBRFJfU1dNUEwsICZyZWdzLT5NSUlBRFIpOwotCi0JZm9yIChpaSA9IDA7IGlpIDwgV19NQVhfVElNRU9VVDsgaWkrKykgewotCQl1ZGVsYXkoMSk7Ci0JCWlmIChCWVRFX1JFR19CSVRTX0lTX09OKE1JSVNSX01JRExFLCAmcmVncy0+TUlJU1IpKQotCQkJYnJlYWs7Ci0JfQotCi0Jd3JpdGViKE1JSUNSX01BVVRPLCAmcmVncy0+TUlJQ1IpOwotCi0JZm9yIChpaSA9IDA7IGlpIDwgV19NQVhfVElNRU9VVDsgaWkrKykgewotCQl1ZGVsYXkoMSk7Ci0JCWlmICghQllURV9SRUdfQklUU19JU19PTihNSUlTUl9NSURMRSwgJnJlZ3MtPk1JSVNSKSkKLQkJCWJyZWFrOwotCX0KLQotfQotCi0vKioKLSAqCXZlbG9jaXR5X21paV9yZWFkCS0JcmVhZCBNSUkgZGF0YQotICoJQHJlZ3M6IHZlbG9jaXR5IHJlZ2lzdGVycwotICoJQGluZGV4OiBNSUkgcmVnaXN0ZXIgaW5kZXgKLSAqCUBkYXRhOiBidWZmZXIgZm9yIHJlY2VpdmVkIGRhdGEKLSAqCi0gKglQZXJmb3JtIGEgc2luZ2xlIHJlYWQgb2YgYW4gTUlJIDE2Yml0IHJlZ2lzdGVyLiBSZXR1cm5zIHplcm8KLSAqCW9uIHN1Y2Nlc3Mgb3IgLUVUSU1FRE9VVCBpZiB0aGUgUEhZIGRpZCBub3QgcmVzcG9uZC4KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X21paV9yZWFkKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzLCB1OCBpbmRleCwgdTE2ICpkYXRhKQotewotCXUxNiB3dzsKLQotCS8qCi0JICoJRGlzYWJsZSBNSUlDUl9NQVVUTywgc28gdGhhdCBtaWkgYWRkciBjYW4gYmUgc2V0IG5vcm1hbGx5Ci0JICovCi0Jc2FmZV9kaXNhYmxlX21paV9hdXRvcG9sbChyZWdzKTsKLQotCXdyaXRlYihpbmRleCwgJnJlZ3MtPk1JSUFEUik7Ci0KLQlCWVRFX1JFR19CSVRTX09OKE1JSUNSX1JDTUQsICZyZWdzLT5NSUlDUik7Ci0KLQlmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7Ci0JCWlmICghKHJlYWRiKCZyZWdzLT5NSUlDUikgJiBNSUlDUl9SQ01EKSkKLQkJCWJyZWFrOwotCX0KLQotCSpkYXRhID0gcmVhZHcoJnJlZ3MtPk1JSURBVEEpOwotCi0JZW5hYmxlX21paV9hdXRvcG9sbChyZWdzKTsKLQlpZiAod3cgPT0gV19NQVhfVElNRU9VVCkKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfbWlpX3dyaXRlCS0Jd3JpdGUgTUlJIGRhdGEKLSAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKLSAqCUBpbmRleDogTUlJIHJlZ2lzdGVyIGluZGV4Ci0gKglAZGF0YTogMTZiaXQgZGF0YSBmb3IgdGhlIE1JSSByZWdpc3RlcgotICoKLSAqCVBlcmZvcm0gYSBzaW5nbGUgd3JpdGUgdG8gYW4gTUlJIDE2Yml0IHJlZ2lzdGVyLiBSZXR1cm5zIHplcm8KLSAqCW9uIHN1Y2Nlc3Mgb3IgLUVUSU1FRE9VVCBpZiB0aGUgUEhZIGRpZCBub3QgcmVzcG9uZC4KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X21paV93cml0ZShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgdTggbWlpX2FkZHIsIHUxNiBkYXRhKQotewotCXUxNiB3dzsKLQotCS8qCi0JICoJRGlzYWJsZSBNSUlDUl9NQVVUTywgc28gdGhhdCBtaWkgYWRkciBjYW4gYmUgc2V0IG5vcm1hbGx5Ci0JICovCi0Jc2FmZV9kaXNhYmxlX21paV9hdXRvcG9sbChyZWdzKTsKLQotCS8qIE1JSSByZWcgb2Zmc2V0ICovCi0Jd3JpdGViKG1paV9hZGRyLCAmcmVncy0+TUlJQURSKTsKLQkvKiBzZXQgTUlJIGRhdGEgKi8KLQl3cml0ZXcoZGF0YSwgJnJlZ3MtPk1JSURBVEEpOwotCi0JLyogdHVybiBvbiBNSUlDUl9XQ01EICovCi0JQllURV9SRUdfQklUU19PTihNSUlDUl9XQ01ELCAmcmVncy0+TUlJQ1IpOwotCi0JLyogV19NQVhfVElNRU9VVCBpcyB0aGUgdGltZW91dCBwZXJpb2QgKi8KLQlmb3IgKHd3ID0gMDsgd3cgPCBXX01BWF9USU1FT1VUOyB3dysrKSB7Ci0JCXVkZWxheSg1KTsKLQkJaWYgKCEocmVhZGIoJnJlZ3MtPk1JSUNSKSAmIE1JSUNSX1dDTUQpKQotCQkJYnJlYWs7Ci0JfQotCWVuYWJsZV9taWlfYXV0b3BvbGwocmVncyk7Ci0KLQlpZiAod3cgPT0gV19NQVhfVElNRU9VVCkKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICoJdmVsb2NpdHlfZ2V0X29wdF9tZWRpYV9tb2RlCS0JZ2V0IG1lZGlhIHNlbGVjdGlvbgotICoJQHZwdHI6IHZlbG9jaXR5IGFkYXB0ZXIKLSAqCi0gKglHZXQgdGhlIG1lZGlhIG1vZGUgc3RvcmVkIGluIEVFUFJPTSBvciBtb2R1bGUgb3B0aW9ucyBhbmQgbG9hZAotICoJbWlpX3N0YXR1cyBhY2NvcmRpbmdseS4gVGhlIHJlcXVlc3RlZCBsaW5rIHN0YXRlIGluZm9ybWF0aW9uCi0gKglpcyBhbHNvIHJldHVybmVkLgotICovCi0KLXN0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X29wdF9tZWRpYV9tb2RlKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCXUzMiBzdGF0dXMgPSAwOwotCi0Jc3dpdGNoICh2cHRyLT5vcHRpb25zLnNwZF9kcHgpIHsKLQljYXNlIFNQRF9EUFhfQVVUTzoKLQkJc3RhdHVzID0gVkVMT0NJVFlfQVVUT05FR19FTkFCTEU7Ci0JCWJyZWFrOwotCWNhc2UgU1BEX0RQWF8xMDBfRlVMTDoKLQkJc3RhdHVzID0gVkVMT0NJVFlfU1BFRURfMTAwIHwgVkVMT0NJVFlfRFVQTEVYX0ZVTEw7Ci0JCWJyZWFrOwotCWNhc2UgU1BEX0RQWF8xMF9GVUxMOgotCQlzdGF0dXMgPSBWRUxPQ0lUWV9TUEVFRF8xMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMOwotCQlicmVhazsKLQljYXNlIFNQRF9EUFhfMTAwX0hBTEY6Ci0JCXN0YXR1cyA9IFZFTE9DSVRZX1NQRUVEXzEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBTUERfRFBYXzEwX0hBTEY6Ci0JCXN0YXR1cyA9IFZFTE9DSVRZX1NQRUVEXzEwOwotCQlicmVhazsKLQl9Ci0JdnB0ci0+bWlpX3N0YXR1cyA9IHN0YXR1czsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKioKLSAqCW1paV9zZXRfYXV0b19vbgkJLQlhdXRvbmVnb3RpYXRlIG9uCi0gKglAdnB0cjogdmVsb2NpdHkKLSAqCi0gKglFbmFibGUgYXV0b25lZ290YXRpb24gb24gdGhpcyBpbnRlcmZhY2UKLSAqLwotCi1zdGF0aWMgdm9pZCBtaWlfc2V0X2F1dG9fb24oc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0JaWYgKE1JSV9SRUdfQklUU19JU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpKQotCQlNSUlfUkVHX0JJVFNfT04oQk1DUl9SRUFVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOwotCWVsc2UKLQkJTUlJX1JFR19CSVRTX09OKEJNQ1JfQVVUTywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7Ci19Ci0KLQotLyoKLXN0YXRpYyB2b2lkIG1paV9zZXRfYXV0b19vZmYoc3RydWN0IHZlbG9jaXR5X2luZm8gKiB2cHRyKQotewotICAgIE1JSV9SRUdfQklUU19PRkYoQk1DUl9BVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsKLX0KLSovCi0KLS8qKgotICoJc2V0X21paV9mbG93X2NvbnRyb2wJLQlmbG93IGNvbnRyb2wgc2V0dXAKLSAqCUB2cHRyOiB2ZWxvY2l0eSBpbnRlcmZhY2UKLSAqCi0gKglTZXQgdXAgdGhlIGZsb3cgY29udHJvbCBvbiB0aGlzIGludGVyZmFjZSBhY2NvcmRpbmcgdG8KLSAqCXRoZSBzdXBwbGllZCB1c2VyL2VlcHJvbSBvcHRpb25zLgotICovCi0KLXN0YXRpYyB2b2lkIHNldF9taWlfZmxvd19jb250cm9sKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQotewotCS8qRW5hYmxlIG9yIERpc2FibGUgUEFVU0UgaW4gQU5BUiAqLwotCXN3aXRjaCAodnB0ci0+b3B0aW9ucy5mbG93X2NudGwpIHsKLQljYXNlIEZMT1dfQ05UTF9UWDoKLQkJTUlJX1JFR19CSVRTX09GRihBTkFSX1BBVVNFLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKLQkJTUlJX1JFR19CSVRTX09OKEFOQVJfQVNNRElSLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMT1dfQ05UTF9SWDoKLQkJTUlJX1JFR19CSVRTX09OKEFOQVJfUEFVU0UsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9BU01ESVIsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlicmVhazsKLQotCWNhc2UgRkxPV19DTlRMX1RYX1JYOgotCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9QQVVTRSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCU1JSV9SRUdfQklUU19PTihBTkFSX0FTTURJUiwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGTE9XX0NOVExfRElTQUJMRToKLQkJTUlJX1JFR19CSVRTX09GRihBTkFSX1BBVVNFLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKLQkJTUlJX1JFR19CSVRTX09GRihBTkFSX0FTTURJUiwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoqCi0gKgl2ZWxvY2l0eV9zZXRfbWVkaWFfbW9kZQkJLQlzZXQgbWVkaWEgbW9kZQotICoJQG1paV9zdGF0dXM6IG9sZCBNSUkgbGluayBzdGF0ZQotICoKLSAqCUNoZWNrIHRoZSBtZWRpYSBsaW5rIHN0YXRlIGFuZCBjb25maWd1cmUgdGhlIGZsb3cgY29udHJvbAotICoJUEhZIGFuZCBhbHNvIHZlbG9jaXR5IGhhcmR3YXJlIHNldHVwIGFjY29yZGluZ2x5LiBJbiBwYXJ0aWN1bGFyCi0gKgl3ZSBuZWVkIHRvIHNldCB1cCBDRCBwb2xsaW5nIGFuZCBmcmFtZSBidXJzdGluZy4KLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X3NldF9tZWRpYV9tb2RlKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCB1MzIgbWlpX3N0YXR1cykKLXsKLQl1MzIgY3Vycl9zdGF0dXM7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0KLQl2cHRyLT5taWlfc3RhdHVzID0gbWlpX2NoZWNrX21lZGlhX21vZGUodnB0ci0+bWFjX3JlZ3MpOwotCWN1cnJfc3RhdHVzID0gdnB0ci0+bWlpX3N0YXR1cyAmICh+VkVMT0NJVFlfTElOS19GQUlMKTsKLQotCS8qIFNldCBtaWkgbGluayBzdGF0dXMgKi8KLQlzZXRfbWlpX2Zsb3dfY29udHJvbCh2cHRyKTsKLQotCS8qCi0JICAgQ2hlY2sgaWYgbmV3IHN0YXR1cyBpcyBjb25zaXNlbnQgd2l0aCBjdXJyZW50IHN0YXR1cwotCSAgIGlmICgoKG1paV9zdGF0dXMgJiBjdXJyX3N0YXR1cykgJiBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRSkKLQkgICB8fCAobWlpX3N0YXR1cz09Y3Vycl9zdGF0dXMpKSB7Ci0JICAgdnB0ci0+bWlpX3N0YXR1cz1taWlfY2hlY2tfbWVkaWFfbW9kZSh2cHRyLT5tYWNfcmVncyk7Ci0JICAgdnB0ci0+bWlpX3N0YXR1cz1jaGVja19jb25uZWN0aW9uX3R5cGUodnB0ci0+bWFjX3JlZ3MpOwotCSAgIFZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgIlZlbG9jaXR5IGxpbmsgbm8gY2hhbmdlXG4iKTsKLQkgICByZXR1cm4gMDsKLQkgICB9Ci0JICovCi0KLQlpZiAoUEhZSURfR0VUX1BIWV9JRCh2cHRyLT5waHlfaWQpID09IFBIWUlEX0NJQ0FEQV9DUzgyMDEpIHsKLQkJTUlJX1JFR19CSVRTX09OKEFVWENSX01EUFBTLCBNSUlfUkVHX0FVWENSLCB2cHRyLT5tYWNfcmVncyk7Ci0JfQotCi0JLyoKLQkgKglJZiBjb25uZWN0aW9uIHR5cGUgaXMgQVVUTwotCSAqLwotCWlmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfQVVUT05FR19FTkFCTEUpIHsKLQkJVkVMT0NJVFlfUFJUKE1TR19MRVZFTF9JTkZPLCAiVmVsb2NpdHkgaXMgQVVUTyBtb2RlXG4iKTsKLQkJLyogY2xlYXIgZm9yY2UgTUFDIG1vZGUgYml0ICovCi0JCUJZVEVfUkVHX0JJVFNfT0ZGKENISVBHQ1JfRkNNT0RFLCAmcmVncy0+Q0hJUEdDUik7Ci0JCS8qIHNldCBkdXBsZXggbW9kZSBvZiBNQUMgYWNjb3JkaW5nIHRvIGR1cGxleCBtb2RlIG9mIE1JSSAqLwotCQlNSUlfUkVHX0JJVFNfT04oQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTAsIE1JSV9SRUdfQU5BUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlNSUlfUkVHX0JJVFNfT04oRzEwMDBDUl8xMDAwRkQgfCBHMTAwMENSXzEwMDAsIE1JSV9SRUdfRzEwMDBDUiwgdnB0ci0+bWFjX3JlZ3MpOwotCQlNSUlfUkVHX0JJVFNfT04oQk1DUl9TUEVFRDFHLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKTsKLQotCQkvKiBlbmFibGUgQVVUTy1ORUdPIG1vZGUgKi8KLQkJbWlpX3NldF9hdXRvX29uKHZwdHIpOwotCX0gZWxzZSB7Ci0JCXUxNiBBTkFSOwotCQl1OCBDSElQR0NSOwotCi0JCS8qCi0JCSAqIDEuIGlmIGl0J3MgMzExOSwgZGlzYWJsZSBmcmFtZSBidXJzdGluZyBpbiBoYWxmZHVwbGV4IG1vZGUKLQkJICogICAgYW5kIGVuYWJsZSBpdCBpbiBmdWxsZHVwbGV4IG1vZGUKLQkJICogMi4gc2V0IGNvcnJlY3QgTUlJL0dNSUkgYW5kIGhhbGYvZnVsbCBkdXBsZXggbW9kZSBpbiBDSElQR0NSCi0JCSAqIDMuIG9ubHkgZW5hYmxlIENEIGhlYXJ0IGJlYXQgY291bnRlciBpbiAxMEhEIG1vZGUKLQkJICovCi0KLQkJLyogc2V0IGZvcmNlIE1BQyBtb2RlIGJpdCAqLwotCQlCWVRFX1JFR19CSVRTX09OKENISVBHQ1JfRkNNT0RFLCAmcmVncy0+Q0hJUEdDUik7Ci0KLQkJQ0hJUEdDUiA9IHJlYWRiKCZyZWdzLT5DSElQR0NSKTsKLQkJQ0hJUEdDUiAmPSB+Q0hJUEdDUl9GQ0dNSUk7Ci0KLQkJaWYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkgewotCQkJQ0hJUEdDUiB8PSBDSElQR0NSX0ZDRkRYOwotCQkJd3JpdGViKENISVBHQ1IsICZyZWdzLT5DSElQR0NSKTsKLQkJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfSU5GTywgInNldCBWZWxvY2l0eSB0byBmb3JjZWQgZnVsbCBtb2RlXG4iKTsKLQkJCWlmICh2cHRyLT5yZXZfaWQgPCBSRVZfSURfVlQzMjE2X0EwKQotCQkJCUJZVEVfUkVHX0JJVFNfT0ZGKFRDUl9UQjJCRElTLCAmcmVncy0+VENSKTsKLQkJfSBlbHNlIHsKLQkJCUNISVBHQ1IgJj0gfkNISVBHQ1JfRkNGRFg7Ci0JCQlWRUxPQ0lUWV9QUlQoTVNHX0xFVkVMX0lORk8sICJzZXQgVmVsb2NpdHkgdG8gZm9yY2VkIGhhbGYgbW9kZVxuIik7Ci0JCQl3cml0ZWIoQ0hJUEdDUiwgJnJlZ3MtPkNISVBHQ1IpOwotCQkJaWYgKHZwdHItPnJldl9pZCA8IFJFVl9JRF9WVDMyMTZfQTApCi0JCQkJQllURV9SRUdfQklUU19PTihUQ1JfVEIyQkRJUywgJnJlZ3MtPlRDUik7Ci0JCX0KLQotCQlNSUlfUkVHX0JJVFNfT0ZGKEcxMDAwQ1JfMTAwMEZEIHwgRzEwMDBDUl8xMDAwLCBNSUlfUkVHX0cxMDAwQ1IsIHZwdHItPm1hY19yZWdzKTsKLQotCQlpZiAoIShtaWlfc3RhdHVzICYgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpICYmIChtaWlfc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTApKSB7Ci0JCQlCWVRFX1JFR19CSVRTX09GRihURVNUQ0ZHX0hCRElTLCAmcmVncy0+VEVTVENGRyk7Ci0JCX0gZWxzZSB7Ci0JCQlCWVRFX1JFR19CSVRTX09OKFRFU1RDRkdfSEJESVMsICZyZWdzLT5URVNUQ0ZHKTsKLQkJfQotCQkvKiBNSUlfUkVHX0JJVFNfT0ZGKEJNQ1JfU1BFRUQxRywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7ICovCi0JCXZlbG9jaXR5X21paV9yZWFkKHZwdHItPm1hY19yZWdzLCBNSUlfUkVHX0FOQVIsICZBTkFSKTsKLQkJQU5BUiAmPSAofihBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpOwotCQlpZiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMCkgewotCQkJaWYgKG1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKLQkJCQlBTkFSIHw9IEFOQVJfVFhGRDsKLQkJCWVsc2UKLQkJCQlBTkFSIHw9IEFOQVJfVFg7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobWlpX3N0YXR1cyAmIFZFTE9DSVRZX0RVUExFWF9GVUxMKQotCQkJCUFOQVIgfD0gQU5BUl8xMEZEOwotCQkJZWxzZQotCQkJCUFOQVIgfD0gQU5BUl8xMDsKLQkJfQotCQl2ZWxvY2l0eV9taWlfd3JpdGUodnB0ci0+bWFjX3JlZ3MsIE1JSV9SRUdfQU5BUiwgQU5BUik7Ci0JCS8qIGVuYWJsZSBBVVRPLU5FR08gbW9kZSAqLwotCQltaWlfc2V0X2F1dG9fb24odnB0cik7Ci0JCS8qIE1JSV9SRUdfQklUU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgdnB0ci0+bWFjX3JlZ3MpOyAqLwotCX0KLQkvKiB2cHRyLT5taWlfc3RhdHVzPW1paV9jaGVja19tZWRpYV9tb2RlKHZwdHItPm1hY19yZWdzKTsgKi8KLQkvKiB2cHRyLT5taWlfc3RhdHVzPWNoZWNrX2Nvbm5lY3Rpb25fdHlwZSh2cHRyLT5tYWNfcmVncyk7ICovCi0JcmV0dXJuIFZFTE9DSVRZX0xJTktfQ0hBTkdFOwotfQotCi0vKioKLSAqCW1paV9jaGVja19tZWRpYV9tb2RlCS0JY2hlY2sgbWVkaWEgc3RhdGUKLSAqCUByZWdzOiB2ZWxvY2l0eSByZWdpc3RlcnMKLSAqCi0gKglDaGVjayB0aGUgY3VycmVudCBNSUkgc3RhdHVzIGFuZCBkZXRlcm1pbmUgdGhlIGxpbmsgc3RhdHVzCi0gKglhY2NvcmRpbmdseQotICovCi0KLXN0YXRpYyB1MzIgbWlpX2NoZWNrX21lZGlhX21vZGUoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzKQotewotCXUzMiBzdGF0dXMgPSAwOwotCXUxNiBBTkFSOwotCi0JaWYgKCFNSUlfUkVHX0JJVFNfSVNfT04oQk1TUl9MTkssIE1JSV9SRUdfQk1TUiwgcmVncykpCi0JCXN0YXR1cyB8PSBWRUxPQ0lUWV9MSU5LX0ZBSUw7Ci0KLQlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEcxMDAwQ1JfMTAwMEZELCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQotCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTAwMCB8IFZFTE9DSVRZX0RVUExFWF9GVUxMOwotCWVsc2UgaWYgKE1JSV9SRUdfQklUU19JU19PTihHMTAwMENSXzEwMDAsIE1JSV9SRUdfRzEwMDBDUiwgcmVncykpCi0JCXN0YXR1cyB8PSAoVkVMT0NJVFlfU1BFRURfMTAwMCk7Ci0JZWxzZSB7Ci0JCXZlbG9jaXR5X21paV9yZWFkKHJlZ3MsIE1JSV9SRUdfQU5BUiwgJkFOQVIpOwotCQlpZiAoQU5BUiAmIEFOQVJfVFhGRCkKLQkJCXN0YXR1cyB8PSAoVkVMT0NJVFlfU1BFRURfMTAwIHwgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpOwotCQllbHNlIGlmIChBTkFSICYgQU5BUl9UWCkKLQkJCXN0YXR1cyB8PSBWRUxPQ0lUWV9TUEVFRF8xMDA7Ci0JCWVsc2UgaWYgKEFOQVIgJiBBTkFSXzEwRkQpCi0JCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwIHwgVkVMT0NJVFlfRFVQTEVYX0ZVTEwpOwotCQllbHNlCi0JCQlzdGF0dXMgfD0gKFZFTE9DSVRZX1NQRUVEXzEwKTsKLQl9Ci0KLQlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEJNQ1JfQVVUTywgTUlJX1JFR19CTUNSLCByZWdzKSkgewotCQl2ZWxvY2l0eV9taWlfcmVhZChyZWdzLCBNSUlfUkVHX0FOQVIsICZBTkFSKTsKLQkJaWYgKChBTkFSICYgKEFOQVJfVFhGRCB8IEFOQVJfVFggfCBBTkFSXzEwRkQgfCBBTkFSXzEwKSkKLQkJICAgID09IChBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpIHsKLQkJCWlmIChNSUlfUkVHX0JJVFNfSVNfT04oRzEwMDBDUl8xMDAwIHwgRzEwMDBDUl8xMDAwRkQsIE1JSV9SRUdfRzEwMDBDUiwgcmVncykpCi0JCQkJc3RhdHVzIHw9IFZFTE9DSVRZX0FVVE9ORUdfRU5BQkxFOwotCQl9Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHUzMiBjaGVja19jb25uZWN0aW9uX3R5cGUoc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzKQotewotCXUzMiBzdGF0dXMgPSAwOwotCXU4IFBIWVNSMDsKLQl1MTYgQU5BUjsKLQlQSFlTUjAgPSByZWFkYigmcmVncy0+UEhZU1IwKTsKLQotCS8qCi0JICAgaWYgKCEoUEhZU1IwICYgUEhZU1IwX0xJTktHRCkpCi0JICAgc3RhdHVzfD1WRUxPQ0lUWV9MSU5LX0ZBSUw7Ci0JICovCi0KLQlpZiAoUEhZU1IwICYgUEhZU1IwX0ZEUFgpCi0JCXN0YXR1cyB8PSBWRUxPQ0lUWV9EVVBMRVhfRlVMTDsKLQotCWlmIChQSFlTUjAgJiBQSFlTUjBfU1BERykKLQkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwMDA7Ci0JZWxzZSBpZiAoUEhZU1IwICYgUEhZU1IwX1NQRDEwKQotCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTA7Ci0JZWxzZQotCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTAwOwotCi0JaWYgKE1JSV9SRUdfQklUU19JU19PTihCTUNSX0FVVE8sIE1JSV9SRUdfQk1DUiwgcmVncykpIHsKLQkJdmVsb2NpdHlfbWlpX3JlYWQocmVncywgTUlJX1JFR19BTkFSLCAmQU5BUik7Ci0JCWlmICgoQU5BUiAmIChBTkFSX1RYRkQgfCBBTkFSX1RYIHwgQU5BUl8xMEZEIHwgQU5BUl8xMCkpCi0JCSAgICA9PSAoQU5BUl9UWEZEIHwgQU5BUl9UWCB8IEFOQVJfMTBGRCB8IEFOQVJfMTApKSB7Ci0JCQlpZiAoTUlJX1JFR19CSVRTX0lTX09OKEcxMDAwQ1JfMTAwMCB8IEcxMDAwQ1JfMTAwMEZELCBNSUlfUkVHX0cxMDAwQ1IsIHJlZ3MpKQotCQkJCXN0YXR1cyB8PSBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRTsKLQkJfQotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qKgotICoJZW5hYmxlX2Zsb3dfY29udHJvbF9hYmlsaXR5CS0JZmxvdyBjb250cm9sCi0gKglAdnB0cjogdmVsb2l0eSB0byBjb25maWd1cmUKLSAqCi0gKglTZXQgdXAgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgZmxvdyBjb250cm9sIG9wdGlvbnMKLSAqCWRldGVybWluZWQgYnkgdGhlIGVlcHJvbS9jb25maWd1cmF0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIGVuYWJsZV9mbG93X2NvbnRyb2xfYWJpbGl0eShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKLXsKLQotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCi0Jc3dpdGNoICh2cHRyLT5vcHRpb25zLmZsb3dfY250bCkgewotCi0JY2FzZSBGTE9XX0NOVExfREVGQVVMVDoKLQkJaWYgKEJZVEVfUkVHX0JJVFNfSVNfT04oUEhZU1IwX1JYRkxDLCAmcmVncy0+UEhZU1IwKSkKLQkJCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBTZXQpOwotCQllbHNlCi0JCQl3cml0ZWwoQ1IwX0ZEWFJGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKLQotCQlpZiAoQllURV9SRUdfQklUU19JU19PTihQSFlTUjBfVFhGTEMsICZyZWdzLT5QSFlTUjApKQotCQkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMFNldCk7Ci0JCWVsc2UKLQkJCXdyaXRlbChDUjBfRkRYVEZDRU4sICZyZWdzLT5DUjBDbHIpOwotCQlicmVhazsKLQotCWNhc2UgRkxPV19DTlRMX1RYOgotCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwU2V0KTsKLQkJd3JpdGVsKENSMF9GRFhSRkNFTiwgJnJlZ3MtPkNSMENscik7Ci0JCWJyZWFrOwotCi0JY2FzZSBGTE9XX0NOVExfUlg6Ci0JCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBTZXQpOwotCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZMT1dfQ05UTF9UWF9SWDoKLQkJd3JpdGVsKENSMF9GRFhURkNFTiwgJnJlZ3MtPkNSMFNldCk7Ci0JCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBTZXQpOwotCQlicmVhazsKLQotCWNhc2UgRkxPV19DTlRMX0RJU0FCTEU6Ci0JCXdyaXRlbChDUjBfRkRYUkZDRU4sICZyZWdzLT5DUjBDbHIpOwotCQl3cml0ZWwoQ1IwX0ZEWFRGQ0VOLCAmcmVncy0+Q1IwQ2xyKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLX0KLQogCiAvKioKICAqCXZlbG9jaXR5X2V0aHRvb2xfdXAJLQlwcmUgaG9vayBmb3IgZXRodG9vbApAQCAtMjk5MSw3ICszMDc4LDYgQEAKICAqCUNhbGxlZCBiZWZvcmUgYW4gZXRodG9vbCBvcGVyYXRpb24uIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZQogICoJY2hpcCBpcyBvdXQgb2YgRDMgc3RhdGUgYmVmb3JlIHdlIHBva2UgYXQgaXQuCiAgKi8KLQogc3RhdGljIGludCB2ZWxvY2l0eV9ldGh0b29sX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMzAwNyw3ICszMDkzLDYgQEAKICAqCUNhbGxlZCBhZnRlciBhbiBldGh0b29sIG9wZXJhdGlvbi4gUmVzdG9yZSB0aGUgY2hpcCBiYWNrIHRvIEQzCiAgKglzdGF0ZSBpZiBpdCBpc24ndCBydW5uaW5nLgogICovCi0KIHN0YXRpYyB2b2lkIHZlbG9jaXR5X2V0aHRvb2xfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTMwMTgsNyArMzEwMyw3IEBACiBzdGF0aWMgaW50IHZlbG9jaXR5X2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7CisJc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKnJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKIAl1MzIgc3RhdHVzOwogCXN0YXR1cyA9IGNoZWNrX2Nvbm5lY3Rpb25fdHlwZSh2cHRyLT5tYWNfcmVncyk7CiAKQEAgLTMwNzIsMTMgKzMxNTcsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0JcmV0dXJuIEJZVEVfUkVHX0JJVFNfSVNfT04oUEhZU1IwX0xJTktHRCwgJnJlZ3MtPlBIWVNSMCkgPyAxIDogMDsKLX0KLQogc3RhdGljIHZvaWQgdmVsb2NpdHlfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMTU3LDMxNyArMzIzNSw4IEBACiAJLmNvbXBsZXRlCT0JdmVsb2NpdHlfZXRodG9vbF9kb3duCiB9OwogCi0vKioKLSAqCXZlbG9jaXR5X21paV9pb2N0bAkJLQlNSUkgaW9jdGwgaGFuZGxlcgotICoJQGRldjogbmV0d29yayBkZXZpY2UKLSAqCUBpZnI6IHRoZSBpZnJlcSBibG9jayBmb3IgdGhlIGlvY3RsCi0gKglAY21kOiB0aGUgY29tbWFuZAotICoKLSAqCVByb2Nlc3MgTUlJIHJlcXVlc3RzIG1hZGUgdmlhIGlvY3RsIGZyb20gdGhlIG5ldHdvcmsgbGF5ZXIuIFRoZXNlCi0gKglhcmUgdXNlZCBieSB0b29scyBsaWtlIGt1ZHp1IHRvIGludGVycm9nYXRlIHRoZSBsaW5rIHN0YXRlIG9mIHRoZQotICoJaGFyZHdhcmUKLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKm1paWRhdGEgPSBpZl9taWkoaWZyKTsKLQlpbnQgZXJyOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNJT0NHTUlJUEhZOgotCQltaWlkYXRhLT5waHlfaWQgPSByZWFkYigmcmVncy0+TUlJQURSKSAmIDB4MWY7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ0dNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCWlmKHZlbG9jaXR5X21paV9yZWFkKHZwdHItPm1hY19yZWdzLCBtaWlkYXRhLT5yZWdfbnVtICYgMHgxZiwgJihtaWlkYXRhLT52YWxfb3V0KSkgPCAwKQotCQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JCWJyZWFrOwotCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7Ci0JCWVyciA9IHZlbG9jaXR5X21paV93cml0ZSh2cHRyLT5tYWNfcmVncywgbWlpZGF0YS0+cmVnX251bSAmIDB4MWYsIG1paWRhdGEtPnZhbF9pbik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwdHItPmxvY2ssIGZsYWdzKTsKLQkJY2hlY2tfY29ubmVjdGlvbl90eXBlKHZwdHItPm1hY19yZWdzKTsKLQkJaWYoZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogI2lmZGVmIENPTkZJR19QTQotCi0vKioKLSAqCXZlbG9jaXR5X3NhdmVfY29udGV4dAktCXNhdmUgcmVnaXN0ZXJzCi0gKglAdnB0cjogdmVsb2NpdHkKLSAqCUBjb250ZXh0OiBidWZmZXIgZm9yIHN0b3JlZCBjb250ZXh0Ci0gKgotICoJUmV0cmlldmUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB2ZWxvY2l0eSBoYXJkd2FyZQotICoJYW5kIHN0YXNoIGl0IGluIHRoZSBjb250ZXh0IHN0cnVjdHVyZSwgZm9yIHVzZSBieSB0aGUgY29udGV4dAotICoJcmVzdG9yZSBmdW5jdGlvbnMuIFRoaXMgYWxsb3dzIHVzIHRvIHNhdmUgdGhpbmdzIHdlIG5lZWQgYWNyb3NzCi0gKglwb3dlciBkb3duIHN0YXRlcwotICovCi0KLXN0YXRpYyB2b2lkIHZlbG9jaXR5X3NhdmVfY29udGV4dChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X2NvbnRleHQgKiBjb250ZXh0KQotewotCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCXUxNiBpOwotCXU4IF9faW9tZW0gKnB0ciA9ICh1OCBfX2lvbWVtICopcmVnczsKLQotCWZvciAoaSA9IE1BQ19SRUdfUEFSOyBpIDwgTUFDX1JFR19DUjBfQ0xSOyBpICs9IDQpCi0JCSooKHUzMiAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSA9IHJlYWRsKHB0ciArIGkpOwotCi0JZm9yIChpID0gTUFDX1JFR19NQVI7IGkgPCBNQUNfUkVHX1REQ1NSX0NMUjsgaSArPSA0KQotCQkqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSkgPSByZWFkbChwdHIgKyBpKTsKLQotCWZvciAoaSA9IE1BQ19SRUdfUkRCQVNFX0xPOyBpIDwgTUFDX1JFR19GSUZPX1RFU1QwOyBpICs9IDQpCi0JCSooKHUzMiAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSA9IHJlYWRsKHB0ciArIGkpOwotCi19Ci0KLS8qKgotICoJdmVsb2NpdHlfcmVzdG9yZV9jb250ZXh0CS0JcmVzdG9yZSByZWdpc3RlcnMKLSAqCUB2cHRyOiB2ZWxvY2l0eQotICoJQGNvbnRleHQ6IGJ1ZmZlciBmb3Igc3RvcmVkIGNvbnRleHQKLSAqCi0gKglSZWxvYWQgdGhlIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdmVsb2NpdHkgY29udGV4dAotICoJY3JlYXRlZCBieSB2ZWxvY2l0eV9zYXZlX2NvbnRleHQuCi0gKi8KLQotc3RhdGljIHZvaWQgdmVsb2NpdHlfcmVzdG9yZV9jb250ZXh0KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBzdHJ1Y3QgdmVsb2NpdHlfY29udGV4dCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKLQlpbnQgaTsKLQl1OCBfX2lvbWVtICpwdHIgPSAodTggX19pb21lbSAqKXJlZ3M7Ci0KLQlmb3IgKGkgPSBNQUNfUkVHX1BBUjsgaSA8IE1BQ19SRUdfQ1IwX1NFVDsgaSArPSA0KSB7Ci0JCXdyaXRlbCgqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOwotCX0KLQotCS8qIEp1c3Qgc2tpcCBjcjAgKi8KLQlmb3IgKGkgPSBNQUNfUkVHX0NSMV9TRVQ7IGkgPCBNQUNfUkVHX0NSMF9DTFI7IGkrKykgewotCQkvKiBDbGVhciAqLwotCQl3cml0ZWIofigqKCh1OCAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSksIHB0ciArIGkgKyA0KTsKLQkJLyogU2V0ICovCi0JCXdyaXRlYigqKCh1OCAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSwgcHRyICsgaSk7Ci0JfQotCi0JZm9yIChpID0gTUFDX1JFR19NQVI7IGkgPCBNQUNfUkVHX0lNUjsgaSArPSA0KSB7Ci0JCXdyaXRlbCgqKCh1MzIgKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOwotCX0KLQotCWZvciAoaSA9IE1BQ19SRUdfUkRCQVNFX0xPOyBpIDwgTUFDX1JFR19GSUZPX1RFU1QwOyBpICs9IDQpIHsKLQkJd3JpdGVsKCooKHUzMiAqKSAoY29udGV4dC0+bWFjX3JlZyArIGkpKSwgcHRyICsgaSk7Ci0JfQotCi0JZm9yIChpID0gTUFDX1JFR19URENTUl9TRVQ7IGkgPD0gTUFDX1JFR19SRENTUl9TRVQ7IGkrKykgewotCQl3cml0ZWIoKigodTggKikgKGNvbnRleHQtPm1hY19yZWcgKyBpKSksIHB0ciArIGkpOwotCX0KLQotfQotCi0vKioKLSAqCXdvbF9jYWxjX2NyYwkJLQlXT0wgQ1JDCi0gKglAcGF0dGVybjogZGF0YSBwYXR0ZXJuCi0gKglAbWFza19wYXR0ZXJuOiBtYXNrCi0gKgotICoJQ29tcHV0ZSB0aGUgd2FrZSBvbiBsYW4gY3JjIGhhc2hlcyBmb3IgdGhlIHBhY2tldCBoZWFkZXIKLSAqCXdlIGFyZSBpbnRlcmVzdGVkIGluLgotICovCi0KLXN0YXRpYyB1MTYgd29sX2NhbGNfY3JjKGludCBzaXplLCB1OCAqIHBhdHRlcm4sIHU4ICptYXNrX3BhdHRlcm4pCi17Ci0JdTE2IGNyYyA9IDB4RkZGRjsKLQl1OCBtYXNrOwotCWludCBpLCBqOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQltYXNrID0gbWFza19wYXR0ZXJuW2ldOwotCi0JCS8qIFNraXAgdGhpcyBsb29wIGlmIHRoZSBtYXNrIGVxdWFscyB0byB6ZXJvICovCi0JCWlmIChtYXNrID09IDB4MDApCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQlpZiAoKG1hc2sgJiAweDAxKSA9PSAwKSB7Ci0JCQkJbWFzayA+Pj0gMTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCW1hc2sgPj49IDE7Ci0JCQljcmMgPSBjcmNfY2NpdHQoY3JjLCAmKHBhdHRlcm5baSAqIDggKyBqXSksIDEpOwotCQl9Ci0JfQotCS8qCUZpbmFsbHksIGludmVydCB0aGUgcmVzdWx0IG9uY2UgdG8gZ2V0IHRoZSBjb3JyZWN0IGRhdGEgKi8KLQljcmMgPSB+Y3JjOwotCXJldHVybiBiaXRyZXYzMihjcmMpID4+IDE2OwotfQotCi0vKioKLSAqCXZlbG9jaXR5X3NldF93b2wJLQlzZXQgdXAgZm9yIHdha2Ugb24gbGFuCi0gKglAdnB0cjogdmVsb2NpdHkgdG8gc2V0IFdPTCBzdGF0dXMgb24KLSAqCi0gKglTZXQgYSBjYXJkIHVwIGZvciB3YWtlIG9uIGxhbiBlaXRoZXIgYnkgdW5pY2FzdCBvciBieQotICoJQVJQIHBhY2tldC4KLSAqCi0gKglGSVhNRTogY2hlY2sgc3RhdGljIGJ1ZmZlciBpcyBzYWZlIGhlcmUKLSAqLwotCi1zdGF0aWMgaW50IHZlbG9jaXR5X3NldF93b2woc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCi17Ci0Jc3RydWN0IG1hY19yZWdzIF9faW9tZW0gKiByZWdzID0gdnB0ci0+bWFjX3JlZ3M7Ci0Jc3RhdGljIHU4IGJ1ZlsyNTZdOwotCWludCBpOwotCi0Jc3RhdGljIHUzMiBtYXNrX3BhdHRlcm5bMl1bNF0gPSB7Ci0JCXsweDAwMjAzMDAwLCAweDAwMDAwM0MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDB9LCAvKiBBUlAgKi8KLQkJezB4ZmZmZmYwMDAsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4MDAwZmZmZn0JIC8qIE1hZ2ljIFBhY2tldCAqLwotCX07Ci0KLQl3cml0ZXcoMHhGRkZGLCAmcmVncy0+V09MQ1JDbHIpOwotCXdyaXRlYihXT0xDRkdfU0FCIHwgV09MQ0ZHX1NBTSwgJnJlZ3MtPldPTENGR1NldCk7Ci0Jd3JpdGV3KFdPTENSX01BR0lDX0VOLCAmcmVncy0+V09MQ1JTZXQpOwotCi0JLyoKLQkgICBpZiAodnB0ci0+d29sX29wdHMgJiBWRUxPQ0lUWV9XT0xfUEhZKQotCSAgIHdyaXRldygoV09MQ1JfTElOS09OX0VOfFdPTENSX0xJTktPRkZfRU4pLCAmcmVncy0+V09MQ1JTZXQpOwotCSAqLwotCi0JaWYgKHZwdHItPndvbF9vcHRzICYgVkVMT0NJVFlfV09MX1VDQVNUKSB7Ci0JCXdyaXRldyhXT0xDUl9VTklDQVNUX0VOLCAmcmVncy0+V09MQ1JTZXQpOwotCX0KLQotCWlmICh2cHRyLT53b2xfb3B0cyAmIFZFTE9DSVRZX1dPTF9BUlApIHsKLQkJc3RydWN0IGFycF9wYWNrZXQgKmFycCA9IChzdHJ1Y3QgYXJwX3BhY2tldCAqKSBidWY7Ci0JCXUxNiBjcmM7Ci0JCW1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3QgYXJwX3BhY2tldCkgKyA3KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQkJd3JpdGVsKG1hc2tfcGF0dGVyblswXVtpXSwgJnJlZ3MtPkJ5dGVNYXNrWzBdW2ldKTsKLQotCQlhcnAtPnR5cGUgPSBodG9ucyhFVEhfUF9BUlApOwotCQlhcnAtPmFyX29wID0gaHRvbnMoMSk7Ci0KLQkJbWVtY3B5KGFycC0+YXJfdGlwLCB2cHRyLT5pcF9hZGRyLCA0KTsKLQotCQljcmMgPSB3b2xfY2FsY19jcmMoKHNpemVvZihzdHJ1Y3QgYXJwX3BhY2tldCkgKyA3KSAvIDgsIGJ1ZiwKLQkJCQkodTggKikgJiBtYXNrX3BhdHRlcm5bMF1bMF0pOwotCi0JCXdyaXRldyhjcmMsICZyZWdzLT5QYXR0ZXJuQ1JDWzBdKTsKLQkJd3JpdGV3KFdPTENSX0FSUF9FTiwgJnJlZ3MtPldPTENSU2V0KTsKLQl9Ci0KLQlCWVRFX1JFR19CSVRTX09OKFBXQ0ZHX1dPTFRZUEUsICZyZWdzLT5QV0NGR1NldCk7Ci0JQllURV9SRUdfQklUU19PTihQV0NGR19MRUdBQ1lfV09MRU4sICZyZWdzLT5QV0NGR1NldCk7Ci0KLQl3cml0ZXcoMHgwRkZGLCAmcmVncy0+V09MU1JDbHIpOwotCi0JaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9BVVRPTkVHX0VOQUJMRSkgewotCQlpZiAoUEhZSURfR0VUX1BIWV9JRCh2cHRyLT5waHlfaWQpID09IFBIWUlEX0NJQ0FEQV9DUzgyMDEpCi0JCQlNSUlfUkVHX0JJVFNfT04oQVVYQ1JfTURQUFMsIE1JSV9SRUdfQVVYQ1IsIHZwdHItPm1hY19yZWdzKTsKLQotCQlNSUlfUkVHX0JJVFNfT0ZGKEcxMDAwQ1JfMTAwMEZEIHwgRzEwMDBDUl8xMDAwLCBNSUlfUkVHX0cxMDAwQ1IsIHZwdHItPm1hY19yZWdzKTsKLQl9Ci0KLQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMDApCi0JCU1JSV9SRUdfQklUU19PTihCTUNSX1JFQVVUTywgTUlJX1JFR19CTUNSLCB2cHRyLT5tYWNfcmVncyk7Ci0KLQlCWVRFX1JFR19CSVRTX09OKENISVBHQ1JfRkNNT0RFLCAmcmVncy0+Q0hJUEdDUik7Ci0KLQl7Ci0JCXU4IEdDUjsKLQkJR0NSID0gcmVhZGIoJnJlZ3MtPkNISVBHQ1IpOwotCQlHQ1IgPSAoR0NSICYgfkNISVBHQ1JfRkNHTUlJKSB8IENISVBHQ1JfRkNGRFg7Ci0JCXdyaXRlYihHQ1IsICZyZWdzLT5DSElQR0NSKTsKLQl9Ci0KLQlCWVRFX1JFR19CSVRTX09GRihJU1JfUFdFSSwgJnJlZ3MtPklTUik7Ci0JLyogVHVybiBvbiBTV1BUQUcganVzdCBiZWZvcmUgZW50ZXJpbmcgcG93ZXIgbW9kZSAqLwotCUJZVEVfUkVHX0JJVFNfT04oU1RJQ0tIV19TV1BUQUcsICZyZWdzLT5TVElDS0hXKTsKLQkvKiBHbyB0byBiZWQgLi4uLi4gKi8KLQlCWVRFX1JFR19CSVRTX09OKChTVElDS0hXX0RTMSB8IFNUSUNLSFdfRFMwKSwgJnJlZ3MtPlNUSUNLSFcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmVsb2NpdHlfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZighbmV0aWZfcnVubmluZyh2cHRyLT5kZXYpKQotCQlyZXR1cm4gMDsKLQotCW5ldGlmX2RldmljZV9kZXRhY2godnB0ci0+ZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2cHRyLT5sb2NrLCBmbGFncyk7Ci0JcGNpX3NhdmVfc3RhdGUocGRldik7Ci0jaWZkZWYgRVRIVE9PTF9HV09MCi0JaWYgKHZwdHItPmZsYWdzICYgVkVMT0NJVFlfRkxBR1NfV09MX0VOQUJMRUQpIHsKLQkJdmVsb2NpdHlfZ2V0X2lwKHZwdHIpOwotCQl2ZWxvY2l0eV9zYXZlX2NvbnRleHQodnB0ciwgJnZwdHItPmNvbnRleHQpOwotCQl2ZWxvY2l0eV9zaHV0ZG93bih2cHRyKTsKLQkJdmVsb2NpdHlfc2V0X3dvbCh2cHRyKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7Ci0JCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKLQl9IGVsc2UgewotCQl2ZWxvY2l0eV9zYXZlX2NvbnRleHQodnB0ciwgJnZwdHItPmNvbnRleHQpOwotCQl2ZWxvY2l0eV9zaHV0ZG93bih2cHRyKTsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQl9Ci0jZWxzZQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwotI2VuZGlmCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZlbG9jaXR5X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCi0JaWYoIW5ldGlmX3J1bm5pbmcodnB0ci0+ZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIDAsIDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwotCi0JbWFjX3dvbF9yZXNldCh2cHRyLT5tYWNfcmVncyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotCXZlbG9jaXR5X3Jlc3RvcmVfY29udGV4dCh2cHRyLCAmdnB0ci0+Y29udGV4dCk7Ci0JdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9XT0wpOwotCW1hY19kaXNhYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7Ci0KLQl2ZWxvY2l0eV90eF9zcnYodnB0ciwgMCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdnB0ci0+dHgubnVtcTsgaSsrKSB7Ci0JCWlmICh2cHRyLT50eC51c2VkW2ldKSB7Ci0JCQltYWNfdHhfcXVldWVfd2FrZSh2cHRyLT5tYWNfcmVncywgaSk7Ci0JCX0KLQl9Ci0KLQltYWNfZW5hYmxlX2ludCh2cHRyLT5tYWNfcmVncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnB0ci0+bG9jaywgZmxhZ3MpOwotCW5ldGlmX2RldmljZV9hdHRhY2godnB0ci0+ZGV2KTsKLQotCXJldHVybiAwOwotfQotCiAjaWZkZWYgQ09ORklHX0lORVQKLQogc3RhdGljIGludCB2ZWxvY2l0eV9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBub3RpZmljYXRpb24sIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSAoc3RydWN0IGluX2lmYWRkciAqKSBwdHI7CkBAIC0zNDg5LDYgKzMyNTgsNjMgQEAKIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KKyNlbmRpZgkvKiBDT05GSUdfSU5FVCAqLworI2VuZGlmCS8qIENPTkZJR19QTSAqLwogCi0jZW5kaWYKLSNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19JTkVUKQorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB2ZWxvY2l0eV9pbmV0YWRkcl9ub3RpZmllciA9IHsKKyAgICAgIC5ub3RpZmllcl9jYWxsCT0gdmVsb2NpdHlfbmV0ZGV2X2V2ZW50LAorfTsKKworc3RhdGljIHZvaWQgdmVsb2NpdHlfcmVnaXN0ZXJfbm90aWZpZXIodm9pZCkKK3sKKwlyZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmdmVsb2NpdHlfaW5ldGFkZHJfbm90aWZpZXIpOworfQorCitzdGF0aWMgdm9pZCB2ZWxvY2l0eV91bnJlZ2lzdGVyX25vdGlmaWVyKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9pbmV0YWRkcl9ub3RpZmllcigmdmVsb2NpdHlfaW5ldGFkZHJfbm90aWZpZXIpOworfQorCisjZWxzZQorCisjZGVmaW5lIHZlbG9jaXR5X3JlZ2lzdGVyX25vdGlmaWVyKCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHZlbG9jaXR5X3VucmVnaXN0ZXJfbm90aWZpZXIoKQlkbyB7fSB3aGlsZSAoMCkKKworI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19JTkVUKSAqLworCisvKioKKyAqCXZlbG9jaXR5X2luaXRfbW9kdWxlCS0JbG9hZCB0aW1lIGZ1bmN0aW9uCisgKgorICoJQ2FsbGVkIHdoZW4gdGhlIHZlbG9jaXR5IG1vZHVsZSBpcyBsb2FkZWQuIFRoZSBQQ0kgZHJpdmVyCisgKglpcyByZWdpc3RlcmVkIHdpdGggdGhlIFBDSSBsYXllciwgYW5kIGluIHR1cm4gd2lsbCBjYWxsCisgKgl0aGUgcHJvYmUgZnVuY3Rpb25zIGZvciBlYWNoIHZlbG9jaXR5IGFkYXB0ZXIgaW5zdGFsbGVkCisgKglpbiB0aGUgc3lzdGVtLgorICovCitzdGF0aWMgaW50IF9faW5pdCB2ZWxvY2l0eV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisKKwl2ZWxvY2l0eV9yZWdpc3Rlcl9ub3RpZmllcigpOworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnZlbG9jaXR5X2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXZlbG9jaXR5X3VucmVnaXN0ZXJfbm90aWZpZXIoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXZlbG9jaXR5X2NsZWFudXAJLQltb2R1bGUgdW5sb2FkCisgKgorICoJV2hlbiB0aGUgdmVsb2NpdHkgaGFyZHdhcmUgaXMgdW5sb2FkZWQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKglJdCB3aWxsIGNsZWFuIHVwIHRoZSBub3RpZmllcnMgYW5kIHRoZSB1bnJlZ2lzdGVyIHRoZSBQQ0kKKyAqCWRyaXZlciBpbnRlcmZhY2UgZm9yIHRoaXMgaGFyZHdhcmUuIFRoaXMgaW4gdHVybiBjbGVhbnMgdXAKKyAqCWFsbCBkaXNjb3ZlcmVkIGludGVyZmFjZXMgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBmdW5jdGlvbgorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdmVsb2NpdHlfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwl2ZWxvY2l0eV91bnJlZ2lzdGVyX25vdGlmaWVyKCk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2ZWxvY2l0eV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2ZWxvY2l0eV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdCh2ZWxvY2l0eV9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtdmVsb2NpdHkuaCBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oCmluZGV4IDRjZDNmNmMuLjJmMDBjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oCkBAIC05Niw4ICs5Niw4IEBACiAgKiBCaXRzIGluIHRoZSBDU00gcmVnaXN0ZXIKICAqLwogCi0jZGVmaW5lIENTTV9JUE9LICAgICAgICAgICAgMHg0MAkvL0lQIENoZWNrdXNtIHZhbGlkYXRpYW9uIG9rCi0jZGVmaW5lIENTTV9UVVBPSyAgICAgICAgICAgMHgyMAkvL1RDUC9VRFAgQ2hlY2t1c20gdmFsaWRhdGlhb24gb2sKKyNkZWZpbmUgQ1NNX0lQT0sgICAgICAgICAgICAweDQwCS8vSVAgQ2hlY2tzdW0gdmFsaWRhdGlvbiBvaworI2RlZmluZSBDU01fVFVQT0sgICAgICAgICAgIDB4MjAJLy9UQ1AvVURQIENoZWNrc3VtIHZhbGlkYXRpb24gb2sKICNkZWZpbmUgQ1NNX0ZSQUcgICAgICAgICAgICAweDEwCS8vRnJhZ21lbnQgSVAgZGF0YWdyYW0KICNkZWZpbmUgQ1NNX0lQS1QgICAgICAgICAgICAweDA0CS8vUmVjZWl2ZWQgYW4gSVAgcGFja2V0CiAjZGVmaW5lIENTTV9UQ1BLVCAgICAgICAgICAgMHgwMgkvL1JlY2VpdmVkIGEgVENQIHBhY2tldApAQCAtODE5LDcgKzgxOSw3IEBACiAgKglCaXRzIGluIHRoZSBFRUNTUiByZWdpc3RlcgogICovCiAKLSNkZWZpbmUgRUVDU1JfRU1CUCAgICAgICAgICAweDQwCS8qIGVlcHJvbSBlbWJlZGVkIHByb2dyYW1taW5nICovCisjZGVmaW5lIEVFQ1NSX0VNQlAgICAgICAgICAgMHg0MAkvKiBlZXByb20gZW1iZWRkZWQgcHJvZ3JhbW1pbmcgKi8KICNkZWZpbmUgRUVDU1JfUkVMT0FEICAgICAgICAweDIwCS8qIGVlcHJvbSBjb250ZW50IHJlbG9hZCAqLwogI2RlZmluZSBFRUNTUl9EUE0gICAgICAgICAgIDB4MTAJLyogZWVwcm9tIGRpcmVjdCBwcm9ncmFtbWluZyAqLwogI2RlZmluZSBFRUNTUl9FQ1MgICAgICAgICAgIDB4MDgJLyogZWVwcm9tIENTIHBpbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGJiZWRmMDMuLjMyMjY2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTU0Nyw3ICs1NDcsNyBAQAogCW5ldGlmX3R4X3VubG9ja19iaCh2aS0+ZGV2KTsKIH0KIAotc3RhdGljIGludCBzdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNzk4LDEwICs3OTgsMTEgQEAKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGtpbGwgVkxBTiBJRCAlZC5cbiIsIHZpZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdmlydG5ldF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdmlydG5ldF9ldGh0b29sX29wcyA9IHsKIAkuc2V0X3R4X2NzdW0gPSB2aXJ0bmV0X3NldF90eF9jc3VtLAogCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKKwkuc2V0X3VmbyA9IGV0aHRvb2xfb3Bfc2V0X3VmbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKIApAQCAtMTAzNiw3ICsxMDM3LDcgQEAKIAlWSVJUSU9fTkVUX0ZfR1NPLCBWSVJUSU9fTkVUX0ZfTUFDLAogCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQsIFZJUlRJT19ORVRfRl9IT1NUX1VGTywgVklSVElPX05FVF9GX0hPU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04sIFZJUlRJT19ORVRfRl9HVUVTVF9UU080LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiwKLQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOLCAvKiBXZSBkb24ndCB5ZXQgaGFuZGxlIFVGTyBpbnB1dC4gKi8KKwlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOLCBWSVJUSU9fTkVUX0ZfR1VFU1RfVUZPLAogCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYsIFZJUlRJT19ORVRfRl9TVEFUVVMsIFZJUlRJT19ORVRfRl9DVFJMX1ZRLAogCVZJUlRJT19ORVRfRl9DVFJMX1JYLCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOLAogCVZJUlRJT19GX05PVElGWV9PTl9FTVBUWSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCA1OGQyNTUxLi45ZTk0YzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0zMTMsMTQgKzMxMyw2IEBACiAJCWhsZGV2LT5rZGZjID0gKHU4IF9faW9tZW0gKikoaGxkZXYtPmJhcjAgKwogCQkJVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9PRkZTRVQodmFsNjQpKTsKIAkJYnJlYWs7Ci0JY2FzZSAyOgotCQlobGRldi0+a2RmYyA9ICh1OCBfX2lvbWVtICopKGhsZGV2LT5iYXIxICsKLQkJCVZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfT0ZGU0VUKHZhbDY0KSk7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJaGxkZXYtPmtkZmMgPSAodTggX19pb21lbSAqKShobGRldi0+YmFyMiArCi0JCQlWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX09GRlNFVCh2YWw2NCkpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC04MzEsOCArODIzLDYgQEAKIAkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcpKTsKIAogCWhsZGV2LT5iYXIwID0gYXR0ci0+YmFyMDsKLQlobGRldi0+YmFyMSA9IGF0dHItPmJhcjE7Ci0JaGxkZXYtPmJhcjIgPSBhdHRyLT5iYXIyOwogCWhsZGV2LT5wZGV2ID0gYXR0ci0+cGRldjsKIAogCWhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfdXAgPSBhdHRyLT51bGRfY2FsbGJhY2tzLmxpbmtfdXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKaW5kZXggYWZiZGY2Zi4uNjI3NzlhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuaApAQCAtNjgyLDggKzY4Miw2IEBACiAgKiBAbWFqb3JfcmV2aXNpb246IFBDSSBEZXZpY2UgbWFqb3IgcmV2aXNpb24KICAqIEBtaW5vcl9yZXZpc2lvbjogUENJIERldmljZSBtaW5vciByZXZpc2lvbgogICogQGJhcjA6IEJBUjAgdmlydHVhbCBhZGRyZXNzLgotICogQGJhcjE6IEJBUjEgdmlydHVhbCBhZGRyZXNzLgotICogQGJhcjI6IEJBUjIgdmlydHVhbCBhZGRyZXNzLgogICogQHBkZXY6IFBoeXNpY2FsIGRldmljZSBoYW5kbGUKICAqIEBjb25maWc6IENvbmZndXJhdGlvbiBwYXNzZWQgYnkgdGhlIExMIGRyaXZlciBhdCBpbml0aWFsaXphdGlvbgogICogQGxpbmtfc3RhdGU6IExpbmsgc3RhdGUKQEAgLTY5OCw4ICs2OTYsNiBAQAogCXU4CQkJCW1ham9yX3JldmlzaW9uOwogCXU4CQkJCW1pbm9yX3JldmlzaW9uOwogCXZvaWQgX19pb21lbQkJCSpiYXIwOwotCXZvaWQgX19pb21lbQkJCSpiYXIxOwotCXZvaWQgX19pb21lbQkJCSpiYXIyOwogCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UJCSpuZGV2OwogCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcJY29uZmlnOwpAQCAtNzg4LDE3ICs3ODQsMTMgQEAKIC8qKgogICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgLSBEZXZpY2UgbWVtb3J5IHNwYWNlcy4KICAqIEBiYXIwOiBCQVIwIHZpcnR1YWwgYWRkcmVzcy4KLSAqIEBiYXIxOiBCQVIxIHZpcnR1YWwgYWRkcmVzcy4KLSAqIEBiYXIyOiBCQVIyIHZpcnR1YWwgYWRkcmVzcy4KICAqIEBwZGV2OiBQQ0kgZGV2aWNlIG9iamVjdC4KICAqCi0gKiBEZXZpY2UgbWVtb3J5IHNwYWNlcy4gSW5jbHVkZXMgY29uZmlndXJhdGlvbiwgQkFSMCwgQkFSMSwgZXRjLiBwZXIgZGV2aWNlCisgKiBEZXZpY2UgbWVtb3J5IHNwYWNlcy4gSW5jbHVkZXMgY29uZmlndXJhdGlvbiwgQkFSMCBldGMuIHBlciBkZXZpY2UKICAqIG1hcHBlZCBtZW1vcmllcy4gQWxzbywgaW5jbHVkZXMgYSBwb2ludGVyIHRvIE9TLXNwZWNpZmljIFBDSSBkZXZpY2Ugb2JqZWN0LgogICovCiBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfYXR0ciB7CiAJdm9pZCBfX2lvbWVtCQkqYmFyMDsKLQl2b2lkIF9faW9tZW0JCSpiYXIxOwotCXZvaWQgX19pb21lbQkJKmJhcjI7CiAJc3RydWN0IHBjaV9kZXYgCQkqcGRldjsKIAlzdHJ1Y3QgdnhnZV9od191bGRfY2JzCXVsZF9jYWxsYmFja3M7CiB9OwpAQCAtOTg2LDcgKzk3OCw5IEBACiAJCQl2b2lkICp0eGRsaCwKIAkJCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwKIAkJCXZvaWQgKnVzZXJkYXRhLAotCQkJdm9pZCAqKnNrYl9wdHIpOworCQkJc3RydWN0IHNrX2J1ZmYgKioqc2tiX3B0ciwKKwkJCWludCBucl9za2IsCisJCQlpbnQgKm1vcmUpOwogCiAJdm9pZCAoKnR4ZGxfdGVybSkoCiAJCQl2b2lkICp0eGRsaCwKQEAgLTE3ODcsNyArMTc4MSw4IEBACiAJCQl2b2lkICp0eGRsaCwKIAkJCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwKIAkJCXZvaWQgKnVzZXJkYXRhLAotCQkJdm9pZCAqKnNrYl9wdHIpOworCQkJc3RydWN0IHNrX2J1ZmYgKioqc2tiX3B0ciwKKwkJCWludCBucl9za2IsIGludCAqbW9yZSk7CiAKIAl2b2lkICgqdHhkbF90ZXJtKSgKIAkJCXZvaWQgKnR4ZGxoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKaW5kZXggNjAzNDQ5Ny4uYjM3ODAzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCkBAIC04NywyMiArODcsMjUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYl9wdHIgPSBOVUxMOwotCXN0cnVjdCBza19idWZmICoqdGVtcCwgKmhlYWQsICpza2I7CisJc3RydWN0IHNrX2J1ZmYgKipza2JfcHRyID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnRlbXA7CisjZGVmaW5lIE5SX1NLQl9DT01QTEVURUQgMTI4CisJc3RydWN0IHNrX2J1ZmYgKmNvbXBsZXRlZFtOUl9TS0JfQ09NUExFVEVEXTsKKwlpbnQgbW9yZTsKIAotCWlmIChzcGluX3RyeWxvY2tfaXJxc2F2ZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpKSB7Ci0JCXZ4Z2VfaHdfdnBhdGhfcG9sbF90eChmaWZvLT5oYW5kbGUsICh2b2lkICoqKSZza2JfcHRyKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOwotCX0KLQkvKiBmcmVlIFNLQnMgKi8KLQloZWFkID0gc2tiX3B0cjsKLQl3aGlsZSAoaGVhZCkgewotCQlza2IgPSBoZWFkOwotCQl0ZW1wID0gKHN0cnVjdCBza19idWZmICoqKSZza2ItPmNiOwotCQloZWFkID0gKnRlbXA7Ci0JCSp0ZW1wID0gTlVMTDsKLQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLQl9CisJZG8geworCQltb3JlID0gMDsKKwkJc2tiX3B0ciA9IGNvbXBsZXRlZDsKKworCQlpZiAoc3Bpbl90cnlsb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKSkgeworCQkJdnhnZV9od192cGF0aF9wb2xsX3R4KGZpZm8tPmhhbmRsZSwgJnNrYl9wdHIsCisJCQkJCQlOUl9TS0JfQ09NUExFVEVELCAmbW9yZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJCX0KKwkJLyogZnJlZSBTS0JzICovCisJCWZvciAodGVtcCA9IGNvbXBsZXRlZDsgdGVtcCAhPSBza2JfcHRyOyB0ZW1wKyspCisJCQlkZXZfa2ZyZWVfc2tiX2lycSgqdGVtcCk7CisJfSB3aGlsZSAobW9yZSkgOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgVlhHRV9DT01QTEVURV9BTExfVFgoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCkBAIC0yODMsNiArMjg2LDcgQEAKIAlza2JfcmVzZXJ2ZShza2IsIFZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOKTsKIAogCXJ4X3ByaXYtPnNrYiA9IHNrYjsKKwlyeF9wcml2LT5za2JfZGF0YSA9IE5VTEw7CiAJcnhfcHJpdi0+ZGF0YV9zaXplID0gc2tiX3NpemU7CiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKIAkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTMwMiw3ICszMDYsOCBAQAogCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCXJ4X3ByaXYgPSB2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KGR0cmgpOwogCi0JZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCByeF9wcml2LT5za2ItPmRhdGEsCisJcnhfcHJpdi0+c2tiX2RhdGEgPSByeF9wcml2LT5za2ItPmRhdGE7CisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShyaW5nLT5wZGV2LCByeF9wcml2LT5za2JfZGF0YSwKIAkJCQlyeF9wcml2LT5kYXRhX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlpZiAoZG1hX2FkZHIgPT0gMCkgewpAQCAtMzc0LDEwICszNzksMTAgQEAKIAkJaWYgKHJpbmctPnZsZ3JwICYmIGV4dF9pbmZvLT52bGFuICYmCiAJCQkocmluZy0+dmxhbl90YWdfc3RyaXAgPT0KIAkJCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUpKQotCQkJdmxhbl9ncm9fcmVjZWl2ZSgmcmluZy0+bmFwaSwgcmluZy0+dmxncnAsCisJCQl2bGFuX2dyb19yZWNlaXZlKHJpbmctPm5hcGlfcCwgcmluZy0+dmxncnAsCiAJCQkJCWV4dF9pbmZvLT52bGFuLCBza2IpOwogCQllbHNlCi0JCQluYXBpX2dyb19yZWNlaXZlKCZyaW5nLT5uYXBpLCBza2IpOworCQkJbmFwaV9ncm9fcmVjZWl2ZShyaW5nLT5uYXBpX3AsIHNrYik7CiAJfSBlbHNlIHsKIAkJaWYgKHJpbmctPnZsZ3JwICYmIHZsYW4gJiYKIAkJCShyaW5nLT52bGFuX3RhZ19zdHJpcCA9PQpAQCAtNDQyLDEwICs0NDcsMTIgQEAKIAl2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHJpbmdoLCAwKTsKIAogCWRvIHsKKwkJcHJlZmV0Y2goKGNoYXIgKilkdHIgKyBMMV9DQUNIRV9CWVRFUyk7CiAJCXJ4X3ByaXYgPSB2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KGR0cik7CiAJCXNrYiA9IHJ4X3ByaXYtPnNrYjsKIAkJZGF0YV9zaXplID0gcnhfcHJpdi0+ZGF0YV9zaXplOwogCQlkYXRhX2RtYSA9IHJ4X3ByaXYtPmRhdGFfZG1hOworCQlwcmVmZXRjaChyeF9wcml2LT5za2JfZGF0YSk7CiAKIAkJdnhnZV9kZWJ1Z19yeChWWEdFX1RSQUNFLAogCQkJIiVzOiAlczolZCAgc2tiID0gMHglcCIsCkBAIC00NTQsNiArNDYxLDggQEAKIAkJdnhnZV9od19yaW5nX3J4ZF8xYl9nZXQocmluZ2gsIGR0ciwgJmRtYV9zaXplcyk7CiAJCXBrdF9sZW5ndGggPSBkbWFfc2l6ZXM7CiAKKwkJcGt0X2xlbmd0aCAtPSBFVEhfRkNTX0xFTjsKKwogCQl2eGdlX2RlYnVnX3J4KFZYR0VfVFJBQ0UsCiAJCQkiJXM6ICVzOiVkICBQYWNrZXQgTGVuZ3RoID0gJWQiLAogCQkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBwa3RfbGVuZ3RoKTsKQEAgLTU3OSw4ICs1ODgsNiBAQAogCWlmIChmaXJzdF9kdHIpCiAJCXZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0X3dtYihyaW5naCwgZmlyc3RfZHRyKTsKIAotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0KIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAogCQkJCSIlczolZCAgRXhpdGluZy4uLiIsCiAJCQkJX19mdW5jX18sIF9fTElORV9fKTsKQEAgLTU5OCwxMSArNjA1LDEwIEBACiBlbnVtIHZ4Z2VfaHdfc3RhdHVzCiB2eGdlX3htaXRfY29tcGwoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvX2h3LCB2b2lkICpkdHIsCiAJCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwgdm9pZCAqdXNlcmRhdGEsCi0JCXZvaWQgKipza2JfcHRyKQorCQlzdHJ1Y3Qgc2tfYnVmZiAqKipza2JfcHRyLCBpbnQgbnJfc2tiLCBpbnQgKm1vcmUpCiB7CiAJc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbyA9IChzdHJ1Y3QgdnhnZV9maWZvICopdXNlcmRhdGE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKmhlYWQgPSBOVUxMOwotCXN0cnVjdCBza19idWZmICoqdGVtcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqKmRvbmVfc2tiID0gKnNrYl9wdHI7CiAJaW50IHBrdF9jbnQgPSAwOwogCiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKQEAgLTY1NSw5ICs2NjEsMTIgQEAKIAkJZmlmby0+c3RhdHMudHhfZnJtcysrOwogCQlmaWZvLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCQl0ZW1wID0gKHN0cnVjdCBza19idWZmICoqKSZza2ItPmNiOwotCQkqdGVtcCA9IGhlYWQ7Ci0JCWhlYWQgPSBza2I7CisJCSpkb25lX3NrYisrID0gc2tiOworCisJCWlmICgtLW5yX3NrYiA8PSAwKSB7CisJCQkqbW9yZSA9IDE7CisJCQlicmVhazsKKwkJfQogCiAJCXBrdF9jbnQrKzsKIAkJaWYgKHBrdF9jbnQgPiBmaWZvLT5pbmRpY2F0ZV9tYXhfcGt0cykKQEAgLTY2NiwxMSArNjc1LDkgQEAKIAl9IHdoaWxlICh2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZChmaWZvX2h3LAogCQkJCSZkdHIsICZ0X2NvZGUpID09IFZYR0VfSFdfT0spOwogCisJKnNrYl9wdHIgPSBkb25lX3NrYjsKIAl2eGdlX3dha2VfdHhfcXVldWUoZmlmbywgc2tiKTsKIAotCWlmIChza2JfcHRyKQotCQkqc2tiX3B0ciA9ICh2b2lkICopIGhlYWQ7Ci0KIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAogCQkJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAogCQkJCWZpZm8tPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CkBAIC04MDMsNyArODEwLDcgQEAKICAqIE5PVEU6IHdoZW4gZGV2aWNlIGNhbnQgcXVldWUgdGhlIHBrdCwganVzdCB0aGUgdHJhbnNfc3RhcnQgdmFyaWFibGUgd2lsbAogICogbm90IGJlIHVwYWR0ZWQuCiAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiB2eGdlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdnhnZV9maWZvICpmaWZvID0gTlVMTDsKQEAgLTgxNyw3ICs4MjQsNiBAQAogCXU2NCBkbWFfcG9pbnRlcjsKIAlzdHJ1Y3QgdnhnZV90eF9wcml2ICp0eGRsX3ByaXYgPSBOVUxMOwogCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19odzsKLQl1MzIgbWF4X21zcyA9IDB4MDsKIAlpbnQgb2ZmbG9hZF90eXBlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCB2cGF0aF9ubyA9IDA7CkBAIC04OTQsNiArOTAwLDEyIEBACiAJCWdvdG8gX2V4aXQyOwogCX0KIAorCS8qIExhc3QgVFhEPyAgU3RvcCB0eCBxdWV1ZSB0byBhdm9pZCBkcm9wcGluZyBwYWNrZXRzLiAgVFgKKwkgKiBjb21wbGV0aW9uIHdpbGwgcmVzdW1lIHRoZSBxdWV1ZS4KKwkgKi8KKwlpZiAoYXZhaWwgPT0gMSkKKwkJdnhnZV9zdG9wX3R4X3F1ZXVlKGZpZm8pOworCiAJc3RhdHVzID0gdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZShmaWZvX2h3LCAmZHRyLCAmZHRyX3ByaXYpOwogCWlmICh1bmxpa2VseShzdGF0dXMgIT0gVlhHRV9IV19PSykpIHsKIAkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKQEAgLTk2OSwxMCArOTgxLDYgQEAKIAogCQlpbnQgbXNzID0gdnhnZV90Y3BfbXNzKHNrYik7CiAJCWlmIChtc3MpIHsKLQkJCW1heF9tc3MgPSBkZXYtPm10dSArIEVUSF9ITEVOIC0KLQkJCQlWWEdFX0hXX1RDUElQX0hFQURFUl9NQVhfU0laRTsKLQkJCWlmIChtc3MgPiBtYXhfbXNzKQotCQkJCW1zcyA9IG1heF9tc3M7CiAJCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCiAJCQkJIiVzOiAlczolZCBtc3MgPSAlZCIsCiAJCQkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sIG1zcyk7CkBAIC0xMDAwLDcgKzEwMDgsNyBAQAogCVZYR0VfQ09NUExFVEVfVlBBVEhfVFgoZmlmbyk7CiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCiAJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBfZXhpdDA6CiAJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLCAiJXM6IHBjaV9tYXBfcGFnZSBmYWlsZWQiLCBkZXYtPm5hbWUpOwpAQCAtMTAyNCw3ICsxMDMyLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CiAJVlhHRV9DT01QTEVURV9WUEFUSF9UWChmaWZvKTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qCkBAIC0xMDQ5LDYgKzEwNTcsNyBAQAogCQlyeF9wcml2LT5kYXRhX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlkZXZfa2ZyZWVfc2tiKHJ4X3ByaXYtPnNrYik7CisJcnhfcHJpdi0+c2tiX2RhdGEgPSBOVUxMOwogCiAJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKIAkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCkBAIC0yMTM3LDE2ICsyMTQ2LDE2IEBACiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCB2eGdlX2lzcl9uYXBpKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKWRldl9pZDsKLQlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKIAl1NjQgcmVhc29uOwogCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopIGRldl9pZDs7CiAKIAl2eGdlX2RlYnVnX2ludHIoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAotCWRldiA9IGhsZGV2LT5uZGV2OwotCXZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWRldiA9IHZkZXYtPm5kZXY7CisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKilwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CiAKIAlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZSh2ZGV2LT5wZGV2KSkKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtMjQxNywxNSArMjQyNiwxMyBAQAogI2VuZGlmCiAJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gSU5UQSkgewogCQkJc3luY2hyb25pemVfaXJxKHZkZXYtPnBkZXYtPmlycSk7Ci0JCQlmcmVlX2lycSh2ZGV2LT5wZGV2LT5pcnEsIGhsZGV2KTsKKwkJCWZyZWVfaXJxKHZkZXYtPnBkZXYtPmlycSwgdmRldik7CiAJfQogfQogCiBzdGF0aWMgaW50IHZ4Z2VfYWRkX2lzcihzdHJ1Y3QgdnhnZWRldiAqdmRldikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0KLQkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlpbnQgdnBfaWR4ID0gMCwgaW50cl9pZHggPSAwLCBpbnRyX2NudCA9IDAsIG1zaXhfaWR4ID0gMCwgaXJxX3JlcSA9IDA7CiAJdTY0IGZ1bmN0aW9uX21vZGUgPSB2ZGV2LT5jb25maWcuZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZTsKQEAgLTI1NzksNyArMjU4Niw3IEBACiAJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gSU5UQSkgewogCQlyZXQgPSByZXF1ZXN0X2lycSgoaW50KSB2ZGV2LT5wZGV2LT5pcnEsCiAJCQl2eGdlX2lzcl9uYXBpLAotCQkJSVJRRl9TSEFSRUQsIHZkZXYtPmRlc2NbMF0sIGhsZGV2KTsKKwkJCUlSUUZfU0hBUkVELCB2ZGV2LT5kZXNjWzBdLCB2ZGV2KTsKIAkJaWYgKHJldCkgewogCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJCSIlcyAlcy0lZDogSVNSIHJlZ2lzdHJhdGlvbiBmYWlsZWQiLApAQCAtMjcxMiwxMSArMjcxOSwxNSBAQAogCQluZXRpZl9uYXBpX2FkZChkZXYsICZ2ZGV2LT5uYXBpLCB2eGdlX3BvbGxfaW50YSwKIAkJCXZkZXYtPmNvbmZpZy5uYXBpX3dlaWdodCk7CiAJCW5hcGlfZW5hYmxlKCZ2ZGV2LT5uYXBpKTsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpX3AgPSAmdmRldi0+bmFwaTsKIAl9IGVsc2UgewogCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgewogCQkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSwKIAkJCSAgICB2eGdlX3BvbGxfbXNpeCwgdmRldi0+Y29uZmlnLm5hcGlfd2VpZ2h0KTsKIAkJCW5hcGlfZW5hYmxlKCZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpKTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGlfcCA9CisJCQkJJnZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGk7CiAJCX0KIAl9CiAKQEAgLTI4OTAsNiArMjkwMSw5IEBACiAJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CiAJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikgcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOwogCisJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKQorCQlyZXR1cm4gMDsKKwogCS8qIElmIHZ4Z2VfaGFuZGxlX2NyaXRfZXJyIHRhc2sgaXMgZXhlY3V0aW5nLAogCSAqIHdhaXQgdGlsbCBpdCBjb21wbGV0ZXMuICovCiAJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSkpCkBAIC0zOTU0LDYgKzM5NjgsOSBAQAogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOwogCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAJCS8qIEJyaW5nIGRvd24gdGhlIGNhcmQsIHdoaWxlIGF2b2lkaW5nIFBDSSBJL08gKi8KIAkJZG9fdnhnZV9jbG9zZShuZXRkZXYsIDApOwpAQCAtNDE1MiwxOCArNDE2OSw2IEBACiAJCWF0dHIuYmFyMCwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkpOwogCi0JYXR0ci5iYXIxID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDIpOwotCWlmICghYXR0ci5iYXIxKSB7Ci0JCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKLQkJCSIlcyA6IGNhbm5vdCByZW1hcCBpbyBtZW1vcnkgYmFyMiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBfZXhpdDM7Ci0JfQotCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCi0JCSJwY2kgaW9yZW1hcCBiYXIxOiAlcDoweCVsbHgiLAotCQlhdHRyLmJhcjEsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpKTsKLQogCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm9fZ2V0KGF0dHIuYmFyMCwKIAkJCSZsbF9jb25maWcuZGV2aWNlX2h3X2luZm8pOwogCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgewpAQCAtNDE3MSwxNyArNDE3NiwxNyBAQAogCQkJIiVzOiBSZWFkaW5nIG9mIGhhcmR3YXJlIGluZm8gZmFpbGVkLiIKIAkJCSJQbGVhc2UgdHJ5IHVwZ3JhZGluZyB0aGUgZmlybXdhcmUuIiwgVlhHRV9EUklWRVJfTkFNRSk7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gX2V4aXQ0OworCQlnb3RvIF9leGl0MzsKIAl9CiAKIAlpZiAobGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24ubWFqb3IgIT0KLQkJVlhHRV9EUklWRVJfVkVSU0lPTl9NQUpPUikgeworCQlWWEdFX0RSSVZFUl9GV19WRVJTSU9OX01BSk9SKSB7CiAJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKLQkJCSJGVyBWZXIuKG1haik6ICVkIG5vdCBkcml2ZXIncyBleHBlY3RlZCB2ZXJzaW9uOiAlZCIsCi0JCQlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi5tYWpvciwKLQkJCVZYR0VfRFJJVkVSX1ZFUlNJT05fTUFKT1IpOworCQkJIiVzOiBJbmNvcnJlY3QgZmlybXdhcmUgdmVyc2lvbi4iCisJCQkiUGxlYXNlIHVwZ3JhZGUgdGhlIGZpcm13YXJlIHRvIHZlcnNpb24gMS54LngiLAorCQkJVlhHRV9EUklWRVJfTkFNRSk7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gX2V4aXQ0OworCQlnb3RvIF9leGl0MzsKIAl9CiAKIAl2cGF0aF9tYXNrID0gbGxfY29uZmlnLmRldmljZV9od19pbmZvLnZwYXRoX21hc2s7CkBAIC00MTg5LDcgKzQxOTQsNyBAQAogCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAogCQkJIiVzOiBObyB2cGF0aHMgYXZhaWxhYmxlIGluIGRldmljZSIsIFZYR0VfRFJJVkVSX05BTUUpOwogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIF9leGl0NDsKKwkJZ290byBfZXhpdDM7CiAJfQogCiAJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKQEAgLTQyMjIsNyArNDIyNyw3IEBACiAJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfRVJSLAogCQkJIiVzOiBObyBtb3JlIHZwYXRocyB0byBjb25maWd1cmUiLCBWWEdFX0RSSVZFUl9OQU1FKTsKIAkJcmV0ID0gMDsKLQkJZ290byBfZXhpdDQ7CisJCWdvdG8gX2V4aXQzOwogCX0KIAogCS8qIFNldHRpbmcgZHJpdmVyIGNhbGxiYWNrcyAqLwpAQCAtNDIzNSw3ICs0MjQwLDcgQEAKIAkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAogCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZSAoJWQpIiwgc3RhdHVzKTsKIAkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIF9leGl0NDsKKwkJCWdvdG8gX2V4aXQzOwogCX0KIAogCXZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldChobGRldiwgVlhHRV9FUlIsIFZYR0VfQ09NUE9ORU5UX0xMKTsKQEAgLTQyNjAsNyArNDI2NSw3IEBACiAJaWYgKHZ4Z2VfZGV2aWNlX3JlZ2lzdGVyKGhsZGV2LCAmbGxfY29uZmlnLCBoaWdoX2RtYSwgbm9fb2ZfdnBhdGgsCiAJCSZ2ZGV2KSkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIF9leGl0NTsKKwkJZ290byBfZXhpdDQ7CiAJfQogCiAJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX1RSQUNFLCBWWEdFX0NPTVBPTkVOVF9MTCk7CkBAIC00MjcxLDcgKzQyNzYsNiBAQAogCWhsZGV2LT5uZGV2ID0gdmRldi0+bmRldjsKIAl2ZGV2LT5tdHUgPSBWWEdFX0hXX0RFRkFVTFRfTVRVOwogCXZkZXYtPmJhcjAgPSBhdHRyLmJhcjA7Ci0JdmRldi0+YmFyMSA9IGF0dHIuYmFyMTsKIAl2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkID0gbWF4X3ZwYXRoX3N1cHBvcnRlZDsKIAl2ZGV2LT5ub19vZl92cGF0aCA9IG5vX29mX3ZwYXRoOwogCkBAIC00MzM2LDYgKzQzNDAsMjcgQEAKIAkJbGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24udmVyc2lvbiwKIAkJbGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X2RhdGUuZGF0ZSk7CiAKKwlpZiAobmV3X2RldmljZSkgeworCQlzd2l0Y2ggKGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5mdW5jdGlvbl9tb2RlKSB7CisJCWNhc2UgVlhHRV9IV19GVU5DVElPTl9NT0RFX1NJTkdMRV9GVU5DVElPTjoKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBTaW5nbGUgRnVuY3Rpb24gTW9kZSBFbmFibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCQljYXNlIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NVUxUSV9GVU5DVElPTjoKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBNdWx0aSBGdW5jdGlvbiBNb2RlIEVuYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJCWNhc2UgVlhHRV9IV19GVU5DVElPTl9NT0RFX1NSSU9WOgorCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFNpbmdsZSBSb290IElPViBNb2RlIEVuYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJCWNhc2UgVlhHRV9IV19GVU5DVElPTl9NT0RFX01SSU9WOgorCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IE11bHRpIFJvb3QgSU9WIE1vZGUgRW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQlicmVhazsKKwkJfQorCX0KKwogCXZ4Z2VfcHJpbnRfcGFybSh2ZGV2LCB2cGF0aF9tYXNrKTsKIAogCS8qIFN0b3JlIHRoZSBmdyB2ZXJzaW9uIGZvciBldGh0dG9vbCBvcHRpb24gKi8KQEAgLTQzNTMsNyArNDM3OCw3IEBACiAJCQkJIiVzOiBtYWNfYWRkcl9saXN0IDogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiwKIAkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKIAkJCXJldCA9IC1FUEVSTTsKLQkJCWdvdG8gX2V4aXQ2OworCQkJZ290byBfZXhpdDU7CiAJCX0KIAkJbWFjYWRkciA9ICh1OCAqKSZlbnRyeS0+bWFjYWRkcjsKIAkJbWVtY3B5KG1hY2FkZHIsIHZkZXYtPm5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CkBAIC00MzYxLDYgKzQzODYsNyBAQAogCQl2ZGV2LT52cGF0aHNbaV0ubWFjX2FkZHJfY250ID0gMTsKIAl9CiAKKwlrZnJlZShkZXZpY2VfY29uZmlnKTsKIAl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwKIAkJdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKIApAQCAtNDM3MCwxNiArNDM5NiwxNCBAQAogCiAJcmV0dXJuIDA7CiAKLV9leGl0NjoKK19leGl0NToKIAlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKIAkJdnhnZV9mcmVlX21hY19hZGRfbGlzdCgmdmRldi0+dnBhdGhzW2ldKTsKIAogCXZ4Z2VfZGV2aWNlX3VucmVnaXN0ZXIoaGxkZXYpOwotX2V4aXQ1OgorX2V4aXQ0OgogCXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOwogCXZ4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZShobGRldik7Ci1fZXhpdDQ6Ci0JaW91bm1hcChhdHRyLmJhcjEpOwogX2V4aXQzOgogCWlvdW5tYXAoYXR0ci5iYXIwKTsKIF9leGl0MjoKQEAgLTQ0MzgsNyArNDQ2Miw2IEBACiAJa2ZyZWUodmRldi0+dnBhdGhzKTsKIAogCWlvdW5tYXAodmRldi0+YmFyMCk7Ci0JaW91bm1hcCh2ZGV2LT5iYXIxKTsKIAogCXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaAppbmRleCA5NzA0YjJiLi45YzM2YjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmgKQEAgLTIxLDcgKzIxLDcgQEAKIAogI2RlZmluZSBWWEdFX0RSSVZFUl9OQU1FCQkidnhnZSIKICNkZWZpbmUgVlhHRV9EUklWRVJfVkVORE9SCQkiTmV0ZXJpb24sIEluYyIKLSNkZWZpbmUgVlhHRV9EUklWRVJfVkVSU0lPTl9NQUpPUiAwCisjZGVmaW5lIFZYR0VfRFJJVkVSX0ZXX1ZFUlNJT05fTUFKT1IJMQogCiAjZGVmaW5lIERSVl9WRVJTSU9OCVZYR0VfVkVSU0lPTl9NQUpPUiIuIlZYR0VfVkVSU0lPTl9NSU5PUiIuIlwKIAlWWEdFX1ZFUlNJT05fRklYIi4iVlhHRV9WRVJTSU9OX0JVSUxEIi0iXApAQCAtMjYwLDYgKzI2MCw3IEBACiAJaW50IGdyb19lbmFibGU7CiAKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGlfcDsKIAogI2RlZmluZSBWWEdFX01BWF9NQUNfQUREUl9DT1VOVAkJMzAKIApAQCAtMzYzLDcgKzM2NCw2IEBACiAKIAlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBfaGFuZGxlc1tWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKIAl2b2lkIF9faW9tZW0gKmJhcjA7Ci0Jdm9pZCBfX2lvbWVtICpiYXIxOwogCXN0cnVjdCB2eGdlX3N3X3N0YXRzCXN0YXRzOwogCWludAkJbXR1OwogCS8qIEJlbG93IHZhcmlhYmxlcyBhcmUgdXNlZCBmb3IgdnBhdGggc2VsZWN0aW9uIHRvIHRyYW5zbWl0IGEgcGFja2V0ICovCkBAIC0zNzgsNiArMzc4LDcgQEAKIAogc3RydWN0IHZ4Z2VfcnhfcHJpdiB7CiAJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJdW5zaWduZWQgY2hhcgkJKnNrYl9kYXRhOwogCWRtYV9hZGRyX3QJCWRhdGFfZG1hOwogCWRtYV9hZGRyX3QJCWRhdGFfc2l6ZTsKIH07CkBAIC00MjgsNyArNDI5LDggQEAKIAogZW51bSB2eGdlX2h3X3N0YXR1cwogdnhnZV94bWl0X2NvbXBsKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19odywgdm9pZCAqZHRyLAotCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwgdm9pZCAqdXNlcmRhdGEsIHZvaWQgKipza2JfcHRyKTsKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGUsIHZvaWQgKnVzZXJkYXRhLAorCXN0cnVjdCBza19idWZmICoqKnNrYl9wdHIsIGludCBucl9za2JzLCBpbnQgKm1vcmUpOwogCiBpbnQgdnhnZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oCmluZGV4IDEwZjRkYTMuLjlhM2I4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1yZWcuaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtcmVnLmgKQEAgLTE3ODQsNyArMTc4NCw3IEBACiAjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19YTUFDSl9YTUFDX0ZTTV9FUlIJdnhnZV9tQklUKDYzKQogLyoweDAxZTE4Ki8JdTY0CXhtYWNfZ2VuX2Vycl9tYXNrOwogLyoweDAxZTIwKi8JdTY0CXhtYWNfZ2VuX2Vycl9hbGFybTsKLS8qMHgwMWUyOCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnRfcmVnWzJdOworLyoweDAxZTI4Ki8JdTY0CXhtYWNfbGlua19lcnJfcG9ydDBfcmVnOwogI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9ET1dOCXZ4Z2VfbUJJVCgzKQogI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9VUAl2eGdlX21CSVQoNykKICNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfV0VOVF9ET1dOCXZ4Z2VfbUJJVCgxMSkKQEAgLTE3OTgsOCArMTc5OCwxMSBAQAogI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfUkFURU1HTVRfTEFTSV9JTlYJdnhnZV9tQklUKDM5KQogI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1ESU9fTURJT19NR1JfQUNDRVNTX0NPTVBMRVRFIFwKIAkJCQkJCQkJdnhnZV9tQklUKDQ3KQotLyoweDAxZTMwKi8JdTY0CXhtYWNfbGlua19lcnJfcG9ydF9tYXNrWzJdOwotLyoweDAxZTM4Ki8JdTY0CXhtYWNfbGlua19lcnJfcG9ydF9hbGFybVsyXTsKKy8qMHgwMWUzMCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnQwX21hc2s7CisvKjB4MDFlMzgqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0MF9hbGFybTsKKy8qMHgwMWU0MCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnQxX3JlZzsKKy8qMHgwMWU0OCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnQxX21hc2s7CisvKjB4MDFlNTAqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0MV9hbGFybTsKIC8qMHgwMWU1OCovCXU2NAl4Z3hzX2dlbl9lcnJfcmVnOwogI2RlZmluZQlWWEdFX0hXX1hHWFNfR0VOX0VSUl9SRUdfWEdYU19YR1hTX0ZTTV9FUlIJdnhnZV9tQklUKDYzKQogLyoweDAxZTYwKi8JdTY0CXhneHNfZ2VuX2Vycl9tYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKaW5kZXggMzcwZjU1Yy4uZmUzYWU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCkBAIC03MzEsNiArNzMxLDcgQEAKIAl2eGdlX2Fzc2VydChjaGFubmVsLT5jb21wbF9pbmRleCA8IGNoYW5uZWwtPmxlbmd0aCk7CiAKIAkqZHRyaCA9CWNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPmNvbXBsX2luZGV4XTsKKwlwcmVmZXRjaCgqZHRyaCk7CiB9CiAKIC8qCkBAIC0xMDcwLDExICsxMDcxLDExIEBACiAJCVZYR0VfSFdfTk9EQldfR0VUX05PX1NOT09QKG5vX3Nub29wKSwKIAkJJmZpZm8tPm5vZmxfZGItPmNvbnRyb2xfMCk7CiAKLQl3bWIoKTsKKwltbWlvd2IoKTsKIAogCXdyaXRlcSh0eGRsX3B0ciwgJmZpZm8tPm5vZmxfZGItPnR4ZGxfcHRyKTsKLQl3bWIoKTsKIAorCW1taW93YigpOwogfQogCiAvKioKQEAgLTI1MDgsNyArMjUwOSw4IEBACiAgKiBTZWUgYWxzbzogdnhnZV9od192cGF0aF9wb2xsX3R4KCkuCiAgKi8KIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wb2xsX3R4KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywKLQkJCQkJdm9pZCAqKnNrYl9wdHIpCisJCQkJCXN0cnVjdCBza19idWZmICoqKnNrYl9wdHIsIGludCBucl9za2IsCisJCQkJCWludCAqbW9yZSkKIHsKIAllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB0X2NvZGU7CiAJdm9pZCAqZmlyc3RfdHhkbGg7CkBAIC0yNTIwLDggKzI1MjIsOCBAQAogCXN0YXR1cyA9IHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKGZpZm8sCiAJCQkJJmZpcnN0X3R4ZGxoLCAmdF9jb2RlKTsKIAlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spCi0JCWlmIChmaWZvLT5jYWxsYmFjayhmaWZvLCBmaXJzdF90eGRsaCwKLQkJCXRfY29kZSwgY2hhbm5lbC0+dXNlcmRhdGEsIHNrYl9wdHIpICE9IFZYR0VfSFdfT0spCisJCWlmIChmaWZvLT5jYWxsYmFjayhmaWZvLCBmaXJzdF90eGRsaCwgdF9jb2RlLAorCQkJY2hhbm5lbC0+dXNlcmRhdGEsIHNrYl9wdHIsIG5yX3NrYiwgbW9yZSkgIT0gVlhHRV9IV19PSykKIAkJCXN0YXR1cyA9IFZYR0VfSFdfQ09NUExFVElPTlNfUkVNQUlOOwogCiAJcmV0dXJuIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5oCmluZGV4IDc1NjdhMTEuLjQ2MTc0MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaApAQCAtMzUsOCArMzUsNiBAQAogCQkJVlhHRV9IV19IRUFERVJfVkxBTl9TSVpFICsgXAogCQkJVlhHRV9IV19IRUFERVJfU05BUF9TSVpFKQogCi0jZGVmaW5lIFZYR0VfSFdfVENQSVBfSEVBREVSX01BWF9TSVpFCSg2NCArIDY0KQotCiAvKiAzMmJpdCBhbGlnbm1lbnRzICovCiAjZGVmaW5lIFZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOCQkyCiAjZGVmaW5lIFZYR0VfSFdfSEVBREVSXzgwMl8yX1NOQVBfQUxJR04JCQkyCkBAIC0yMzI4LDcgKzIzMjYsNyBAQAogCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcG9sbF90eCgKIAlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9oLAotCXZvaWQgKipza2JfcHRyKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKipza2JfcHRyLCBpbnQgbnJfc2tiLCBpbnQgKm1vcmUpOwogCiBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcygKIAlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS12ZXJzaW9uLmgKaW5kZXggODI3ODZmZi4uOGZiY2U3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oCkBAIC0xNyw3ICsxNyw3IEBACiAKICNkZWZpbmUgVlhHRV9WRVJTSU9OX01BSk9SCSIyIgogI2RlZmluZSBWWEdFX1ZFUlNJT05fTUlOT1IJIjAiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjQiCi0jZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMTc3OTUiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9GSVgJIjUiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9CVUlMRAkiMTgwNTMiCiAjZGVmaW5lIFZYR0VfVkVSU0lPTl9GT1IJImsiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCmluZGV4IDYxNTgxZWUuLjY2MzYwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiBzdGF0aWMgaW50IGNvc2FfbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmQpOwogc3RhdGljIGludCBjb3NhX25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZCk7CiBzdGF0aWMgdm9pZCBjb3NhX25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkKTsKLXN0YXRpYyBpbnQgY29zYV9uZXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmQpOworc3RhdGljIG5ldGRldl90eF90IGNvc2FfbmV0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkKTsKIHN0YXRpYyBjaGFyICpjb3NhX25ldF9zZXR1cF9yeChzdHJ1Y3QgY2hhbm5lbF9kYXRhICpjaGFubmVsLCBpbnQgc2l6ZSk7CiBzdGF0aWMgaW50IGNvc2FfbmV0X3J4X2RvbmUoc3RydWN0IGNoYW5uZWxfZGF0YSAqY2hhbm5lbCk7CiBzdGF0aWMgaW50IGNvc2FfbmV0X3R4X2RvbmUoc3RydWN0IGNoYW5uZWxfZGF0YSAqY2hhbm5lbCwgaW50IHNpemUpOwpAQCAtNjcyLDcgKzY3Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29zYV9uZXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBjb3NhX25ldF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgY2hhbm5lbF9kYXRhICpjaGFuID0gZGV2X3RvX2NoYW4oZGV2KTsKIApAQCAtNjgwLDcgKzY4MSw3IEBACiAKIAljaGFuLT50eF9za2IgPSBza2I7CiAJY29zYV9zdGFydF90eChjaGFuLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBjb3NhX25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCmluZGV4IGY1MjVmOWYuLjI1NzNjMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X3gyNS5jCkBAIC0xMzksOCArMTM5LDggQEAKIAkJCQkgICAgICBjb25zdCB2b2lkICpkYWRkciwgY29uc3Qgdm9pZCAqc2FkZHIsCiAJCQkJICAgICAgdW5zaWduZWQgbGVuKTsKIHN0YXRpYyBpbnQgY3ljeF9uZXRkZXZpY2VfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgaW50IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgogCQkJY3ljeF9uZXRkZXZpY2VfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNTkzLDggKzU5Myw4IEBACiAgKiAgICBib3R0b20gaGFsZiIgKHdpdGggaW50ZXJydXB0cyBlbmFibGVkKS4KICAqIDIuIFNldHRpbmcgdGJ1c3kgZmxhZyB3aWxsIGluaGliaXQgZnVydGhlciB0cmFuc21pdCByZXF1ZXN0cyBmcm9tIHRoZQogICogICAgcHJvdG9jb2wgc3RhY2sgYW5kIGNhbiBiZSB1c2VkIGZvciBmbG93IGNvbnRyb2wgd2l0aCBwcm90b2NvbCBsYXllci4gKi8KLXN0YXRpYyBpbnQgY3ljeF9uZXRkZXZpY2VfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjeWN4X3gyNV9jaGFubmVsICpjaGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgY3ljeF9kZXZpY2UgKmNhcmQgPSBjaGFuLT5jYXJkOwpAQCAtNjYzLDcgKzY2Myw3IEBACiBmcmVlX3BhY2tldDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBHZXQgRXRoZXJuZXQtc3R5bGUgaW50ZXJmYWNlIHN0YXRpc3RpY3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZGxjaS5jIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwppbmRleCAyZmEyNzVhLi4xNWQzNTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZGxjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKQEAgLTE4Niw0NSArMTg2LDEzIEBACiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIGludCBkbGNpX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZGxjaV90cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkbGNpX2xvY2FsICpkbHA7Ci0JaW50CQkJCQlyZXQ7CisJc3RydWN0IGRsY2lfbG9jYWwgKmRscCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlyZXQgPSAwOwotCi0JaWYgKCFza2IgfHwgIWRldikKLQkJcmV0dXJuKDApOwotCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKLQlyZXQgPSBkbHAtPnNsYXZlLT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsIGRscC0+c2xhdmUpOwotCXN3aXRjaCAocmV0KQotCXsKLQkJY2FzZSBETENJX1JFVF9PSzoKLQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCQkJcmV0ID0gTkVUREVWX1RYX09LOwotCQkJYnJlYWs7Ci0JCQljYXNlIERMQ0lfUkVUX0VSUjoKLQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQlyZXQgPSBORVRERVZfVFhfT0s7Ci0JCQlicmVhazsKLQkJCWNhc2UgRExDSV9SRVRfRFJPUDoKLQkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJcmV0ID0gTkVUREVWX1RYX0JVU1k7Ci0JCQlicmVhazsKLQl9Ci0JLyogQWxhbiBDb3ggcmVjb21tZW5kcyBhbHdheXMgcmV0dXJuaW5nIDAsIGFuZCBhbHdheXMgZnJlZWluZyB0aGUgcGFja2V0ICovCi0JLyogZXhwZXJpZW5jZSBzdWdnZXN0IGEgc2xpZ2h0bHkgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm9hY2ggKi8KLQotCWlmICghcmV0KQotCXsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQotCXJldHVybihyZXQpOworCWlmIChza2IpCisJCWRscC0+c2xhdmUtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGxwLT5zbGF2ZSk7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBkbGNpX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGxjaV9jb25mIF9fdXNlciAqY29uZiwgaW50IGdldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggOGZhY2U1ZC4uODFjOGFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKQEAgLTM1OSw3ICszNTksOCBAQAogc3RhdGljIGludCBkc2NjNF9mb3VuZDEoc3RydWN0IHBjaV9kZXYgKiwgdm9pZCBfX2lvbWVtICppb2FkZHIpOwogc3RhdGljIGludCBkc2NjNF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIHN0YXRpYyBpbnQgZHNjYzRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgZHNjYzRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBkc2NjNF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGRzY2M0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBkc2NjNF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyBpbnQgZHNjYzRfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICopOwpAQCAtNjYzLDEyICs2NjQsMTIgQEAKIAl9IGVsc2UgewogCQlpZiAoc2tiLT5kYXRhW3BrdF9sZW5dICYgRnJhbWVSZG8pCiAJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCWVsc2UgaWYgKCEoc2tiLT5kYXRhW3BrdF9sZW5dIHwgfkZyYW1lQ3JjKSkKKwkJZWxzZSBpZiAoIShza2ItPmRhdGFbcGt0X2xlbl0gJiBGcmFtZUNyYykpCiAJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkJZWxzZSBpZiAoIShza2ItPmRhdGFbcGt0X2xlbl0gfCB+KEZyYW1lVmZyIHwgRnJhbWVSYWIpKSkKKwkJZWxzZSBpZiAoKHNrYi0+ZGF0YVtwa3RfbGVuXSAmIChGcmFtZVZmciB8IEZyYW1lUmFiKSkgIT0KKwkJCSAoRnJhbWVWZnIgfCBGcmFtZVJhYikpCiAJCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJZWxzZQotCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAl9CiByZWZpbGw6CkBAIC0xMTQ4LDcgKzExNDksOCBAQAogfQogI2VuZGlmIC8qIERTQ0M0X1BPTExJTkcgKi8KIAotc3RhdGljIGludCBkc2NjNF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgZHNjYzRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzY2M0X2Rldl9wcml2ICpkcHJpdiA9IGRzY2M0X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZHNjYzRfcGNpX3ByaXYgKnBwcml2ID0gZHByaXYtPnBjaV9wcml2OwpAQCAtMTE4Miw3ICsxMTg0LDcgQEAKIAlpZiAoZHNjYzRfdHhfcXVpZXNjZW50KGRwcml2LCBkZXYpKQogCQlkc2NjNF9kb190eChkcHJpdiwgZGV2KTsKIAotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgZHNjYzRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDI1YzllZjYuLjNlOTBlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtNzkyLDI1ICs3OTIsNiBAQAogCQkJICovCiAJCQlicmVhazsKIAkJfQotCi0JY2FzZSBORVRfUlhfQ05fTE9XOgotCQl7Ci0JCQlkYmcoREJHX0FTUywgIiVzOiBSZWNlaXZlIExvdyBDb25nZXN0aW9uXG4iLCBuYW1lKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQljYXNlIE5FVF9SWF9DTl9NT0Q6Ci0JCXsKLQkJCWRiZyhEQkdfQVNTLCAiJXM6IFJlY2VpdmUgTW9kZXJhdGUgQ29uZ2VzdGlvblxuIiwgbmFtZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBORVRfUlhfQ05fSElHSDoKLQkJewotCQkJZGJnKERCR19BU1MsICIlczogUmVjZWl2ZSBIaWdoIENvbmdlc3Rpb25cbiIsIG5hbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQogCWNhc2UgTkVUX1JYX0RST1A6CiAJCXsKIAkJCWRiZyhEQkdfQVNTLCAiJXM6IFJlY2VpdmVkIHBhY2tldCBkcm9wcGVkXG4iLCBuYW1lKTsKQEAgLTIyOTMsNyArMjI3NCw3IEBACiAJcG9ydC0+c3RhcnQgPSAwOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIGZzdF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzdF9jYXJkX2luZm8gKmNhcmQ7CkBAIC0yMzEzLDcgKzIyOTQsNyBAQAogCQlkYmcoREJHX0FTUywKIAkJICAgICJUcmllZCB0byB0cmFuc21pdCBidXQgbm8gY2FycmllciBvbiBjYXJkICVkIHBvcnQgJWRcbiIsCiAJCSAgICBjYXJkLT5jYXJkX25vLCBwb3J0LT5pbmRleCk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCS8qIERyb3AgaXQgaWYgaXQncyB0b28gYmlnISBNVFUgZmFpbHVyZSA/ICovCkBAIC0yMzIyLDcgKzIzMDMsNyBAQAogCQkgICAgTEVOX1RYX0JVRkZFUik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyoKQEAgLTIzNTYsNyArMjMzNyw3IEBACiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWRiZyhEQkdfQVNTLCAiVHggcXVldWUgb3ZlcmZsb3cgY2FyZCAlZCBwb3J0ICVkXG4iLAogCQkgICAgY2FyZC0+Y2FyZF9ubywgcG9ydC0+aW5kZXgpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKgpAQCAtMjM3Myw3ICsyMzU0LDcgQEAKIAlmc3RfcV93b3JrX2l0ZW0oJmZzdF93b3JrX3R4cSwgY2FyZC0+Y2FyZF9ubyk7CiAJdGFza2xldF9zY2hlZHVsZSgmZnN0X3R4X3Rhc2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcwLmMgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3MC5jCmluZGV4IDFlYTFlZjYuLjgwMTE0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzAuYwpAQCAtNjIwLDcgKzYyMCw3IEBACiAjZW5kaWYgLyogREVCVUdfUklOR1MgKi8KIAogCi1zdGF0aWMgaW50IHNjYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2NhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlwb3J0X3QgKnBvcnQgPSBkZXZfdG9fcG9ydChkZXYpOwogCWNhcmRfdCAqY2FyZCA9IHBvcnRfdG9fY2FyZChwb3J0KTsKQEAgLTY3NCw3ICs2NzQsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CiAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jIGIvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYwppbmRleCBmMDk5YzM0Li44NGYwMTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogI2VuZGlmIC8qIERFQlVHX1JJTkdTICovCiAKIAotc3RhdGljIGludCBzY2FfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNjYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcG9ydF90ICpwb3J0ID0gZGV2X3RvX3BvcnQoZGV2KTsKIAljYXJkX3QgKmNhcmQgPSBwb3J0LT5jYXJkOwpAQCAtNjAxLDcgKzYwMSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5sb2NrKTsKIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCmluZGV4IDc1OTZlYWUuLmNjMDcyMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwpAQCAtNjYsNyArNjYsNyBAQAogCXJldHVybiBoZGxjLT5wcm90by0+bmV0aWZfcngoc2tiKTsKIH0KIAotaW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwppbmRleCBiZmEwMTYxLi44NDBjZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKQEAgLTQwNyw3ICs0MDcsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHB2Y194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgcHZjX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlwdmNfZGV2aWNlICpwdmMgPSBkZXYtPm1sX3ByaXY7CiAKQEAgLTQyMSw3ICs0MjEsNyBAQAogCQkJCQkJCSAgICAgR0ZQX0FUT01JQykpIHsKIAkJCQkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJCQkJcmV0dXJuIDA7CisJCQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJCQl9CiAJCQkJc2tiX3B1dChza2IsIHBhZCk7CiAJCQkJbWVtc2V0KHNrYi0+ZGF0YSArIGxlbiwgMCwgcGFkKTsKQEAgLTQzNSwxMyArNDM1LDEzIEBACiAJCQkJZGV2LT5zdGF0cy50eF9jb21wcmVzc2VkKys7CiAJCQlza2ItPmRldiA9IHB2Yy0+ZnJhZDsKIAkJCWRldl9xdWV1ZV94bWl0KHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAl9CiAKIAlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZyX2xvZ19kbGNpX2FjdGl2ZShwdmNfZGV2aWNlICpwdmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3BwcC5jCmluZGV4IDcyYTdjZGEuLmI5YjlkNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3BwcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3BwcC5jCkBAIC0zODksNiArMzg5LDcgQEAKIAlmb3IgKG9wdCA9IGRhdGE7IGxlbjsgbGVuIC09IG9wdFsxXSwgb3B0ICs9IG9wdFsxXSkgewogCQlpZiAobGVuIDwgMiB8fCBsZW4gPCBvcHRbMV0pIHsKIAkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlrZnJlZShvdXQpOwogCQkJcmV0dXJuOyAvKiBiYWQgcGFja2V0LCBkcm9wIHNpbGVudGx5ICovCiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCmluZGV4IDQ5ZTY4ZjUuLjFiMzBmY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIGludCByYXdfZXRoX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKIAotc3RhdGljIGludCBldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcGFkID0gRVRIX1pMRU4gLSBza2ItPmxlbjsKIAlpZiAocGFkID4gMCkgewkJLyogUGFkIHRoZSBmcmFtZSB3aXRoIHplcm9zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3gyNS5jCmluZGV4IGIxZGMyOWUuLmFhOTI0OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3gyNS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3gyNS5jCkBAIC04Nyw3ICs4Nyw3IEBACiAKIAogCi1zdGF0aWMgaW50IHgyNV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgeDI1X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmVzdWx0OwogCkBAIC05OCw3ICs5OCw3IEBACiAJCXNrYl9wdWxsKHNrYiwgMSk7CiAJCWlmICgocmVzdWx0ID0gbGFwYl9kYXRhX3JlcXVlc3QoZGV2LCBza2IpKSAhPSBMQVBCX09LKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogCWNhc2UgMToKIAkJaWYgKChyZXN1bHQgPSBsYXBiX2Nvbm5lY3RfcmVxdWVzdChkZXYpKSE9IExBUEJfT0spIHsKQEAgLTEyOSw3ICsxMjksNyBAQAogCX0KIAogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwppbmRleCA1NjdkNGY1Li4xNTAwMmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCkBAIC0xNTYsNyArMTU2LDggQEAKICAqCVBhc3NlZCBuZXR3b3JrIGZyYW1lcywgZmlyZSB0aGVtIGRvd253aW5kLgogICovCiAKLXN0YXRpYyBpbnQgaG9zdGVzc19xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkKQorc3RhdGljIG5ldGRldl90eF90IGhvc3Rlc3NfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmQpCiB7CiAJcmV0dXJuIHo4NTMwX3F1ZXVlX3htaXQoJmRldl90b19zdihkKS0+Y2hhbkEsIHNrYik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jIGIvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYwppbmRleCBiYjcxOWI2Li5jNzA1MDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKQEAgLTE2Niw2ICsxNjYsMjkgQEAKICNkZWZpbmUgQ0xLNDZYX1NQRUVEXzQwOTZLSFoJKCggICAxNiA8PCAyMikgfCAoMjgwIDw8IDEyKSB8IDEwMjMpCiAjZGVmaW5lIENMSzQ2WF9TUEVFRF84MTkyS0haCSgoICAgIDggPDwgMjIpIHwgKDI4MCA8PCAxMikgfCAyMDQ3KQogCisvKgorICogSFNTX0NPTkZJR19DTE9DS19DUiByZWdpc3RlciBjb25zaXN0cyBvZiAzIHBhcnRzOgorICogICAgIEEgKDEwIGJpdHMpLCBCICgxMCBiaXRzKSBhbmQgQyAoMTIgYml0cykuCisgKiBJWFA0MnggSFNTIGNsb2NrIGdlbmVyYXRvciBvcGVyYXRpb24gKHZlcmlmaWVkIHdpdGggYW4gb3NjaWxsb3Njb3BlKToKKyAqIEVhY2ggY2xvY2sgYml0IHRha2VzIDcuNSBucyAoMSAvIDEzMy54eCBNSHopLgorICogVGhlIGNsb2NrIHNlcXVlbmNlIGNvbnNpc3RzIG9mIChDIC0gQikgc3RhdGVzIG9mIDBzIGFuZCAxcywgZWFjaCBzdGF0ZSBpcworICogQSBiaXRzIHdpZGUuIEl0J3MgZm9sbG93ZWQgYnkgKEIgKyAxKSBzdGF0ZXMgb2YgMHMgYW5kIDFzLCBlYWNoIHN0YXRlIGlzCisgKiAoQSArIDEpIGJpdHMgd2lkZS4KKyAqCisgKiBUaGUgcmVzdWx0aW5nIGF2ZXJhZ2UgY2xvY2sgZnJlcXVlbmN5IChhc3N1bWluZyAzMy4zMzMgTUh6IG9zY2lsbGF0b3IpIGlzOgorICogZnJlcSA9IDY2LjY2NiBNSHogLyAoQSArIChCICsgMSkgLyAoQyArIDEpKQorICogbWludW11bSBmcmVxID0gNjYuNjY2IE1IeiAvIChBICsgMSkKKyAqIG1heGltdW0gZnJlcSA9IDY2LjY2NiBNSHogLyBBCisgKgorICogRXhhbXBsZTogQSA9IDIsIEIgPSAyLCBDID0gNywgQ0xPQ0tfQ1IgcmVnaXN0ZXIgPSAyIDw8IDIyIHwgMiA8PCAxMiB8IDcKKyAqIGZyZXEgPSA2Ni42NjYgTUh6IC8gKDIgKyAoMiArIDEpIC8gKDcgKyAxKSkgPSAyOC4wNyBNSHogKE1iL3MpLgorICogVGhlIGNsb2NrIHNlcXVlbmNlIGlzOiAxMTAwMTEwMDExICg1IGRvdWJsZXMpIDAwMDExMTAwMCAoMyB0cmlwbGVzKS4KKyAqIFRoZSBzZXF1ZW5jZSB0YWtlcyAoQyAtIEIpICogQSArIChCICsgMSkgKiAoQSArIDEpID0gNSAqIDIgKyAzICogMyBiaXRzCisgKiA9IDE5IGJpdHMgKGVhY2ggNy41IG5zIGxvbmcpID0gMTQyLjUgbnMgKHRoZW4gdGhlIHNlcXVlbmNlIHJlcGVhdHMpLgorICogVGhlIHNlcXVlbmNlIGNvbnNpc3RzIG9mIDQgY29tcGxldGUgY2xvY2sgcGVyaW9kcywgdGh1cyB0aGUgYXZlcmFnZQorICogZnJlcXVlbmN5ICg9IGNsb2NrIHJhdGUpIGlzIDQgLyAxNDIuNSBucyA9IDI4LjA3IE1IeiAoTWIvcykuCisgKiAobWF4IHNwZWNpZmllZCBjbG9jayByYXRlIGZvciBJWFA0MnggSFNTIGlzIDguMTkyIE1iL3MpLgorICovCiAKIC8qIGhzc19jb25maWcsIExVVCBlbnRyaWVzICovCiAjZGVmaW5lIFRETU1BUF9VTkFTU0lHTkVECTAKQEAgLTIzOSw2ICsyNjIsNyBAQAogCXVuc2lnbmVkIGludCBjbG9ja190eXBlLCBjbG9ja19yYXRlLCBsb29wYmFjazsKIAl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQsIGNhcnJpZXI7CiAJdTggaGRsY19jZmc7CisJdTMyIGNsb2NrX3JlZzsKIH07CiAKIC8qIE5QRSBtZXNzYWdlIHN0cnVjdHVyZSAqLwpAQCAtMzkzLDcgKzQxNyw3IEBACiAJbXNnLmNtZCA9IFBPUlRfQ09ORklHX1dSSVRFOwogCW1zZy5oc3NfcG9ydCA9IHBvcnQtPmlkOwogCW1zZy5pbmRleCA9IEhTU19DT05GSUdfQ0xPQ0tfQ1I7Ci0JbXNnLmRhdGEzMiA9IENMSzQyWF9TUEVFRF8yMDQ4S0haIC8qIEZJWE1FICovOworCW1zZy5kYXRhMzIgPSBwb3J0LT5jbG9ja19yZWc7CiAJaHNzX25wZV9zZW5kKHBvcnQsICZtc2csICJIU1NfU0VUX0NMT0NLX0NSIik7CiAKIAltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOwpAQCAtMTE2MCw2ICsxMTg0LDYyIEBACiAJfQogfQogCitzdGF0aWMgdTMyIGNoZWNrX2Nsb2NrKHUzMiByYXRlLCB1MzIgYSwgdTMyIGIsIHUzMiBjLAorCQkgICAgICAgdTMyICpiZXN0LCB1MzIgKmJlc3RfZGlmZiwgdTMyICpyZWcpCit7CisJLyogYSBpcyAxMC1iaXQsIGIgaXMgMTAtYml0LCBjIGlzIDEyLWJpdCAqLworCXU2NCBuZXdfcmF0ZTsKKwl1MzIgbmV3X2RpZmY7CisKKwluZXdfcmF0ZSA9IGl4cDR4eF90aW1lcl9mcmVxICogKHU2NCkoYyArIDEpOworCWRvX2RpdihuZXdfcmF0ZSwgYSAqIChjICsgMSkgKyBiICsgMSk7CisJbmV3X2RpZmYgPSBhYnMoKHUzMiluZXdfcmF0ZSAtIHJhdGUpOworCisJaWYgKG5ld19kaWZmIDwgKmJlc3RfZGlmZikgeworCQkqYmVzdCA9IG5ld19yYXRlOworCQkqYmVzdF9kaWZmID0gbmV3X2RpZmY7CisJCSpyZWcgPSAoYSA8PCAyMikgfCAoYiA8PCAxMikgfCBjOworCX0KKwlyZXR1cm4gbmV3X2RpZmY7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfYmVzdF9jbG9jayh1MzIgcmF0ZSwgdTMyICpiZXN0LCB1MzIgKnJlZykKK3sKKwl1MzIgYSwgYiwgZGlmZiA9IDB4RkZGRkZGRkY7CisKKwlhID0gaXhwNHh4X3RpbWVyX2ZyZXEgLyByYXRlOworCisJaWYgKGEgPiAweDNGRikgeyAvKiAxMC1iaXQgdmFsdWUgLSB3ZSBjYW4gZ28gYXMgc2xvdyBhcyBjYS4gNjUga2IvcyAqLworCQljaGVja19jbG9jayhyYXRlLCAweDNGRiwgMSwgMSwgYmVzdCwgJmRpZmYsIHJlZyk7CisJCXJldHVybjsKKwl9CisJaWYgKGEgPT0gMCkgeyAvKiA+IDY2LjY2NiBNSHogKi8KKwkJYSA9IDE7IC8qIG1pbmltdW0gZGl2aWRlciBpcyAxIChhID0gMCwgYiA9IDEsIGMgPSAxKSAqLworCQlyYXRlID0gaXhwNHh4X3RpbWVyX2ZyZXE7CisJfQorCisJaWYgKHJhdGUgKiBhID09IGl4cDR4eF90aW1lcl9mcmVxKSB7IC8qIGRvbid0IGRpdmlkZSBieSAwIGxhdGVyICovCisJCWNoZWNrX2Nsb2NrKHJhdGUsIGEgLSAxLCAxLCAxLCBiZXN0LCAmZGlmZiwgcmVnKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoYiA9IDA7IGIgPCAweDQwMDsgYisrKSB7CisJCXU2NCBjID0gKGIgKyAxKSAqICh1NjQpcmF0ZTsKKwkJZG9fZGl2KGMsIGl4cDR4eF90aW1lcl9mcmVxIC0gcmF0ZSAqIGEpOworCQljLS07CisJCWlmIChjID49IDB4RkZGKSB7IC8qIDEyLWJpdCAtIG5vIG5lZWQgdG8gY2hlY2sgbW9yZSAnYidzICovCisJCQlpZiAoYiA9PSAwICYmIC8qIGFsc28gdHJ5IGEgYml0IGhpZ2hlciByYXRlICovCisJCQkgICAgIWNoZWNrX2Nsb2NrKHJhdGUsIGEgLSAxLCAxLCAxLCBiZXN0LCAmZGlmZiwgcmVnKSkKKwkJCQlyZXR1cm47CisJCQljaGVja19jbG9jayhyYXRlLCBhLCBiLCAweEZGRiwgYmVzdCwgJmRpZmYsIHJlZyk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKCFjaGVja19jbG9jayhyYXRlLCBhLCBiLCBjLCBiZXN0LCAmZGlmZiwgcmVnKSkKKwkJCXJldHVybjsKKwkJaWYgKCFjaGVja19jbG9jayhyYXRlLCBhLCBiLCBjICsgMSwgYmVzdCwgJmRpZmYsIHJlZykpCisJCQlyZXR1cm47CisJfQorfQogCiBzdGF0aWMgaW50IGhzc19oZGxjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewpAQCAtMTE4Miw3ICsxMjYyLDcgQEAKIAkJfQogCQltZW1zZXQoJm5ld19saW5lLCAwLCBzaXplb2YobmV3X2xpbmUpKTsKIAkJbmV3X2xpbmUuY2xvY2tfdHlwZSA9IHBvcnQtPmNsb2NrX3R5cGU7Ci0JCW5ld19saW5lLmNsb2NrX3JhdGUgPSAyMDQ4MDAwOyAvKiBGSVhNRSAqLworCQluZXdfbGluZS5jbG9ja19yYXRlID0gcG9ydC0+Y2xvY2tfcmF0ZTsKIAkJbmV3X2xpbmUubG9vcGJhY2sgPSBwb3J0LT5sb29wYmFjazsKIAkJaWYgKGNvcHlfdG9fdXNlcihsaW5lLCAmbmV3X2xpbmUsIHNpemUpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjA2LDcgKzEyODYsMTMgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXBvcnQtPmNsb2NrX3R5cGUgPSBjbGs7IC8qIFVwZGF0ZSBzZXR0aW5ncyAqLwotCQkvKiBGSVhNRSBwb3J0LT5jbG9ja19yYXRlID0gbmV3X2xpbmUuY2xvY2tfcmF0ZSAqLzsKKwkJaWYgKGNsayA9PSBDTE9DS19JTlQpCisJCQlmaW5kX2Jlc3RfY2xvY2sobmV3X2xpbmUuY2xvY2tfcmF0ZSwgJnBvcnQtPmNsb2NrX3JhdGUsCisJCQkJCSZwb3J0LT5jbG9ja19yZWcpOworCQllbHNlIHsKKwkJCXBvcnQtPmNsb2NrX3JhdGUgPSAwOworCQkJcG9ydC0+Y2xvY2tfcmVnID0gQ0xLNDJYX1NQRUVEXzIwNDhLSFo7CisJCX0KIAkJcG9ydC0+bG9vcGJhY2sgPSBuZXdfbGluZS5sb29wYmFjazsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBlX2xvY2ssIGZsYWdzKTsKQEAgLTEyNjYsNyArMTM1Miw4IEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJmhzc19oZGxjX29wczsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKIAlwb3J0LT5jbG9ja190eXBlID0gQ0xPQ0tfRVhUOwotCXBvcnQtPmNsb2NrX3JhdGUgPSAyMDQ4MDAwOworCXBvcnQtPmNsb2NrX3JhdGUgPSAwOworCXBvcnQtPmNsb2NrX3JlZyA9IENMSzQyWF9TUEVFRF8yMDQ4S0haOwogCXBvcnQtPmlkID0gcGRldi0+aWQ7CiAJcG9ydC0+ZGV2ID0gJnBkZXYtPmRldjsKIAlwb3J0LT5wbGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMgYi9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKaW5kZXggYWZmNGY2Yi4uZDFlM2M2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwpAQCAtMTQ3LDcgKzE0Nyw4IEBACiAvKgogICoJU2VuZCBhIExBUEIgZnJhbWUgdmlhIGFuIGV0aGVybmV0IGludGVyZmFjZQogICovCi1zdGF0aWMgaW50IGxhcGJldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGxhcGJldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IDQ1YjE4MjIuLjdlYTcxYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTg5LDcgKzg5LDggQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIAogCi1zdGF0aWMgaW50IGxtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIG5ldGRldl90eF90IGxtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsbWNfcnggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsbWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbG1jX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTQyMywxMiArMTQyNCwxMiBAQAogICAgIHJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCi1zdGF0aWMgaW50IGxtY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbG1jX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBsbWNfc29mdGNfdCAqc2MgPSBkZXZfdG9fc2MoZGV2KTsKICAgICB1MzIgZmxhZzsKICAgICBpbnQgZW50cnk7Ci0gICAgaW50IHJldCA9IDA7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgIGxtY190cmFjZShkZXYsICJsbWNfc3RhcnRfeG1pdCBpbiIpOwpAQCAtMTUxMCw3ICsxNTExLDcgQEAKICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+bG1jX2xvY2ssIGZsYWdzKTsKIAogICAgIGxtY190cmFjZShkZXYsICJsbWNfc3RhcnRfeG1pdF9vdXQiKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApAQCAtMTY1Nyw3ICsxNjU4LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KG5zYiwgbGVuKSwgbGVuKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbnNiLT5wcm90b2NvbCA9IGxtY19wcm90b190eXBlKHNjLCBza2IpOworICAgICAgICAgICAgbnNiLT5wcm90b2NvbCA9IGxtY19wcm90b190eXBlKHNjLCBuc2IpOwogICAgICAgICAgICAgc2tiX3Jlc2V0X21hY19oZWFkZXIobnNiKTsKICAgICAgICAgICAgIC8qIHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihuc2IpOyAqLwogICAgICAgICAgICAgbnNiLT5kZXYgPSBkZXY7CkBAIC0xODk3LDExICsxODk4LDEyIEBACiAgICAgLyoKICAgICAgKiBTZXRzIGVuZCBvZiByaW5nCiAgICAgICovCi0gICAgc2MtPmxtY19yeHJpbmdbaSAtIDFdLmxlbmd0aCB8PSAweDAyMDAwMDAwOyAvKiBTZXQgZW5kIG9mIGJ1ZmZlcnMgZmxhZyAqLwotICAgIHNjLT5sbWNfcnhyaW5nW2kgLSAxXS5idWZmZXIyID0gdmlydF90b19idXMgKCZzYy0+bG1jX3J4cmluZ1swXSk7IC8qIFBvaW50IGJhY2sgdG8gdGhlIHN0YXJ0ICovCisgICAgaWYgKGkgIT0gMCkgeworICAgICAgICBzYy0+bG1jX3J4cmluZ1tpIC0gMV0ubGVuZ3RoIHw9IDB4MDIwMDAwMDA7IC8qIFNldCBlbmQgb2YgYnVmZmVycyBmbGFnICovCisgICAgICAgIHNjLT5sbWNfcnhyaW5nW2kgLSAxXS5idWZmZXIyID0gdmlydF90b19idXMoJnNjLT5sbWNfcnhyaW5nWzBdKTsgLyogUG9pbnQgYmFjayB0byB0aGUgc3RhcnQgKi8KKyAgICB9CiAgICAgTE1DX0NTUl9XUklURSAoc2MsIGNzcl9yeGxpc3QsIHZpcnRfdG9fYnVzIChzYy0+bG1jX3J4cmluZykpOyAvKiB3cml0ZSBiYXNlIGFkZHJlc3MgKi8KIAotCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgdHJhbnNtaXQgcmluZ3MgYW5kIGJ1ZmZlcnMgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgTE1DX1RYREVTQ1M7IGkrKykKICAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggZTAzNWQ4Yy4uYTUyZjI5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtMzYwLDE1ICszNjAsNiBAQAogCSAgICAgICAiICV1IFJYIHBhY2tldHMgcmluZ3NcbiIsIHJhbXNpemUgLyAxMDI0LCByYW1waHlzLAogCSAgICAgICBwZGV2LT5pcnEsIGNhcmQtPnR4X3JpbmdfYnVmZmVycywgY2FyZC0+cnhfcmluZ19idWZmZXJzKTsKIAotCWlmIChwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUExYXzkwNTApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJEZXRlY3RlZCBQQ0kyMDBTWU4gY2FyZCB3aXRoIG9sZCAiCi0JCSAgICAgICAiY29uZmlndXJhdGlvbiBkYXRhLlxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiU2VlIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViLyIKLQkJICAgICAgICJsaW51eC91dGlscy9uZXQvaGRsYy9wY2kyMDBzeW4vPiBmb3IgdXBkYXRlLlxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiVGhlIGNhcmQgd2lsbCBzdG9wIHdvcmtpbmcgd2l0aCIKLQkJICAgICAgICIgZnV0dXJlIHZlcnNpb25zIG9mIExpbnV4IGlmIG5vdCB1cGRhdGVkLlxuIik7Ci0JfQotCiAJaWYgKGNhcmQtPnR4X3JpbmdfYnVmZmVycyA8IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwY2kyMDBzeW46IFJBTSB0ZXN0IGZhaWxlZFxuIik7CiAJCXBjaTIwMF9wY2lfcmVtb3ZlX29uZShwZGV2KTsKQEAgLTQyNyw4ICs0MTgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpMjAwX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsIFBDSV9WRU5ET1JfSURfUExYLAotCSAgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgMCwgMCwgMCB9LAotCXsgUENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAsIFBDSV9WRU5ET1JfSURfUExYLAogCSAgUENJX0RFVklDRV9JRF9QTFhfUENJMjAwU1lOLCAwLCAwLCAwIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYyBiL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKaW5kZXggZDE0ZTk1YS4uMWNjMjRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NibmkuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCkBAIC0xMTQsNyArMTE0LDggQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAgKnNibmlfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIGludCk7CiBzdGF0aWMgaW50ICBzYm5pX29wZW4oIHN0cnVjdCBuZXRfZGV2aWNlICogKTsKIHN0YXRpYyBpbnQgIHNibmlfY2xvc2UoIHN0cnVjdCBuZXRfZGV2aWNlICogKTsKLXN0YXRpYyBpbnQgIHNibmlfc3RhcnRfeG1pdCggc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiApOworc3RhdGljIG5ldGRldl90eF90IHNibmlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9pb2N0bCggc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCApOwogc3RhdGljIHZvaWQgIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCkBAIC00NDQsNyArNDQ1LDcgQEAKIAogI2lmZGVmIENPTkZJR19TQk5JX01VTFRJTElORQogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHNibmlfc3RhcnRfeG1pdCggc3RydWN0IHNrX2J1ZmYgICpza2IsICBzdHJ1Y3QgbmV0X2RldmljZSAgKmRldiApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgICpwOwpAQCAtNDYzLDcgKzQ2NCw3IEBACiAJCQlwcmVwYXJlX3RvX3NlbmQoIHNrYiwgcCApOwogCQkJc3Bpbl91bmxvY2soICZubC0+bG9jayApOwogCQkJbmV0aWZfc3RhcnRfcXVldWUoIGRldiApOwotCQkJcmV0dXJuICAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCX0KIApAQCAtNDcyLDcgKzQ3Myw3IEBACiAKICNlbHNlCS8qIENPTkZJR19TQk5JX01VTFRJTElORSAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgbmV0ZGV2X3R4X3QKIHNibmlfc3RhcnRfeG1pdCggc3RydWN0IHNrX2J1ZmYgICpza2IsICBzdHJ1Y3QgbmV0X2RldmljZSAgKmRldiApCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAgKm5sICA9IG5ldGRldl9wcml2KGRldik7CkBAIC00ODMsNyArNDg0LDcgQEAKIAlwcmVwYXJlX3RvX3NlbmQoIHNrYiwgZGV2ICk7CiAKIAlzcGluX3VubG9jayggJm5sLT5sb2NrICk7Ci0JcmV0dXJuICAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKICNlbmRpZgkvKiBDT05GSUdfU0JOSV9NVUxUSUxJTkUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMgYi9kcml2ZXJzL25ldC93YW4vc2RsYS5jCmluZGV4IDFkNjM3ZjQuLjJiMTVhN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NkbGEuYwpAQCAtNjUxLDcgKzY1MSw4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIE5PVEU6IHRoZSBETENJIGRyaXZlciBkZWFscyB3aXRoIGZyZWVpbmcgdGhlIFNLQiEhICovCi1zdGF0aWMgaW50IHNkbGFfdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzZGxhX3RyYW5zbWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZyYWRfbG9jYWwgKmZscDsKIAlpbnQgICAgICAgICAgICAgICByZXQsIGFkZHIsIGFjY2VwdCwgaTsKQEAgLTcxMSwyMyArNzEyLDIxIEBACiAJCQkJfQogCQkJCWJyZWFrOwogCQl9CisKIAkJc3dpdGNoIChyZXQpCiAJCXsKIAkJCWNhc2UgU0RMQV9SRVRfT0s6CiAJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQkJcmV0ID0gRExDSV9SRVRfT0s7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgU0RMQV9SRVRfQ0lSX09WRVJGTE9XOgogCQkJY2FzZSBTRExBX1JFVF9CVUZfT1ZFUlNJWkU6CiAJCQljYXNlIFNETEFfUkVUX05PX0JVRlM6CiAJCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQkJcmV0ID0gRExDSV9SRVRfRFJPUDsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJCXJldCA9IERMQ0lfUkVUX0VSUjsKIAkJCQlicmVhazsKIAkJfQogCX0KQEAgLTczNyw3ICs3MzYsOSBAQAogCQlpZihmbHAtPm1hc3RlcltpXSE9TlVMTCkKIAkJCW5ldGlmX3dha2VfcXVldWUoZmxwLT5tYXN0ZXJbaV0pOwogCX0JCQotCXJldHVybihyZXQpOworCisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIHNkbGFfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NlYWxldmVsLmMgYi9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYwppbmRleCAyM2IyNjkwLi4wYzUyNWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYwpAQCAtMTU2LDcgKzE1Niw4IEBACiAgKglQYXNzZWQgbmV0d29yayBmcmFtZXMsIGZpcmUgdGhlbSBkb3dud2luZC4KICAqLwogCi1zdGF0aWMgaW50IHNlYWxldmVsX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmQpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2VhbGV2ZWxfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkKQogewogCXJldHVybiB6ODUzMF9xdWV1ZV94bWl0KGRldl90b19jaGFuKGQpLT5jaGFuLCBza2IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMgYi9kcml2ZXJzL25ldC93YW4vd2FueGwuYwppbmRleCBlNGFkN2I2Li5kYWVlOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vd2FueGwuYworKysgYi9kcml2ZXJzL25ldC93YW4vd2FueGwuYwpAQCAtMjY4LDcgKzI2OCw3IEBACiAKIAogCi1zdGF0aWMgaW50IHdhbnhsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB3YW54bF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgICAgIHBvcnRfdCAqcG9ydCA9IGRldl90b19wb3J0KGRldik7CiAJZGVzY190ICpkZXNjOwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJfQogCiAJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYyBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKaW5kZXggZDY3ZTIwOC4uMjc5NDUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYworKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCkBAIC0yOTksNyArMjk5LDggQEAKIAogLyogRW5jYXBzdWxhdGUgYW4gSVAgZGF0YWdyYW0gYW5kIGtpY2sgaXQgaW50byBhIFRUWSBxdWV1ZS4gKi8KIAotc3RhdGljIGludCB4MjVfYXN5X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB4MjVfYXN5X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB4MjVfYXN5ICpzbCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKQEAgLTMwOCw3ICszMDksNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB4bWl0IGNhbGwgd2hlbiBpZmFjZSBpcyBkb3duXG4iLAogCQkJZGV2LT5uYW1lKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCXN3aXRjaCAoc2tiLT5kYXRhWzBdKSB7CkBAIC0zMTksMTQgKzMyMCwxNCBAQAogCQlpZiAoZXJyICE9IExBUEJfT0spCiAJCQlwcmludGsoS0VSTl9FUlIgIngyNV9hc3k6IGxhcGJfY29ubmVjdF9yZXF1ZXN0IGVycm9yIC0gJWRcbiIsIGVycik7CiAJCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAljYXNlIDB4MDI6IC8qIERpc2Nvbm5lY3QgcmVxdWVzdCAuLiBkbyBub3RoaW5nIC0gaGFuZyB1cCA/PyAqLwogCQllcnIgPSBsYXBiX2Rpc2Nvbm5lY3RfcmVxdWVzdChkZXYpOwogCQlpZiAoZXJyICE9IExBUEJfT0spCiAJCQlwcmludGsoS0VSTl9FUlIgIngyNV9hc3k6IGxhcGJfZGlzY29ubmVjdF9yZXF1ZXN0IGVycm9yIC0gJWRcbiIsIGVycik7CiAJZGVmYXVsdDoKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAgMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJc2tiX3B1bGwoc2tiLCAxKTsJLyogUmVtb3ZlIGNvbnRyb2wgYnl0ZSAqLwogCS8qCkBAIC0zNDQsOSArMzQ1LDkgQEAKIAlpZiAoZXJyICE9IExBUEJfT0spIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ4MjVfYXN5OiBsYXBiX2RhdGFfcmVxdWVzdCBlcnJvciAtICVkXG4iLCBlcnIpOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCmluZGV4IGFkNGU3OWMuLjBiZTdlYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworKysgYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKQEAgLTE3MjcsMTUgKzE3MjcsMTQgQEAKICAqCXBvaW50LgogICovCiAKLWludCB6ODUzMF9xdWV1ZV94bWl0KHN0cnVjdCB6ODUzMF9jaGFubmVsICpjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorbmV0ZGV2X3R4X3Qgejg1MzBfcXVldWVfeG1pdChzdHJ1Y3Qgejg1MzBfY2hhbm5lbCAqYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQogCW5ldGlmX3N0b3BfcXVldWUoYy0+bmV0ZGV2aWNlKTsKIAlpZihjLT50eF9uZXh0X3NrYikKLQl7Ci0JCXJldHVybiAxOwotCX0KKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCiAJCiAJLyogUEMgU1BFQ0lGSUMgLSBETUEgbGltaXRzICovCiAJCkBAIC0xNzY3LDcgKzE3NjYsNyBAQAogCXo4NTMwX3R4X2JlZ2luKGMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoYy0+bG9jaywgZmxhZ3MpOwogCQotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIEVYUE9SVF9TWU1CT0woejg1MzBfcXVldWVfeG1pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vejg1MjMwLmggYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmgKaW5kZXggODViM2U3OC4uZjI5ZDU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuaApAQCAtNDA2LDcgKzQwNiw4IEBACiBleHRlcm4gaW50IHo4NTMwX3N5bmNfdHhkbWFfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3Qgejg1MzBfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgejg1MzBfc3luY190eGRtYV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3Qgejg1MzBfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgejg1MzBfY2hhbm5lbF9sb2FkKHN0cnVjdCB6ODUzMF9jaGFubmVsICosIHU4ICopOwotZXh0ZXJuIGludCB6ODUzMF9xdWV1ZV94bWl0KHN0cnVjdCB6ODUzMF9jaGFubmVsICpjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBuZXRkZXZfdHhfdCB6ODUzMF9xdWV1ZV94bWl0KHN0cnVjdCB6ODUzMF9jaGFubmVsICpjLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQgejg1MzBfbnVsbF9yeChzdHJ1Y3Qgejg1MzBfY2hhbm5lbCAqYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCmluZGV4IDk2NTNmNDcuLjc5NjM5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKQEAgLTMzNCwxMiArMzM0LDEyIEBACiAgKiB0aGF0IHdpbGwgc2xlZXAuIFNlZSBpMjQwMG1fbmV0X3dha2VfdHgoKSBmb3IgZGV0YWlscy4KICAqLwogc3RhdGljCi1pbnQgaTI0MDBtX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCituZXRkZXZfdHhfdCBpMjQwMG1faGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKLQlpbnQgcmVzdWx0OwogCXN0cnVjdCBpMjQwMG0gKmkyNDAwbSA9IG5ldF9kZXZfdG9faTI0MDBtKG5ldF9kZXYpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlpbnQgcmVzdWx0OwogCiAJZF9mbnN0YXJ0KDMsIGRldiwgIihza2IgJXAgbmV0X2RldiAlcClcbiIsIHNrYiwgbmV0X2Rldik7CiAJaWYgKGkyNDAwbS0+c3RhdGUgPT0gSTI0MDBNX1NTX0lETEUpCkBAIC0zNTMsOSArMzUzLDkgQEAKIAkJbmV0X2Rldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJfQogCWtmcmVlX3NrYihza2IpOwotCXJlc3VsdCA9IE5FVERFVl9UWF9PSzsKLQlkX2ZuZW5kKDMsIGRldiwgIihza2IgJXAgbmV0X2RldiAlcCkgPSAlZFxuIiwgc2tiLCBuZXRfZGV2LCByZXN1bHQpOwotCXJldHVybiByZXN1bHQ7CisKKwlkX2ZuZW5kKDMsIGRldiwgIihza2IgJXAgbmV0X2RldiAlcClcbiIsIHNrYiwgbmV0X2Rldik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYwppbmRleCAyNTM4ODI1Li4yOTgxZTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKQEAgLTU4LDYgKzU4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgogI2luY2x1ZGUgImkyNDAwbS1zZGlvLmgiCkBAIC0zNzAsNiArMzcxLDEwIEBACiB9CiAKIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBpMjQwMG1zX3R5cGUgPSB7CisJLm5hbWUJPSAid2ltYXgiLAorfTsKKwogLyoKICAqIFByb2JlIGEgaTI0MDBtIGludGVyZmFjZSBhbmQgcmVnaXN0ZXIgaXQKICAqCkBAIC00MTEsNiArNDE2LDcgQEAKIAkJZ290byBlcnJvcl9hbGxvY19uZXRkZXY7CiAJfQogCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsIGRldik7CisJU0VUX05FVERFVl9ERVZUWVBFKG5ldF9kZXYsICZpMjQwMG1zX3R5cGUpOwogCWkyNDAwbSA9IG5ldF9kZXZfdG9faTI0MDBtKG5ldF9kZXYpOwogCWkyNDAwbXMgPSBjb250YWluZXJfb2YoaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtcywgaTI0MDBtKTsKIAlpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2ID0gbmV0X2RldjsKQEAgLTUwMSwxNSArNTA3LDEyIEBACiAJZF9mbmVuZCgzLCBkZXYsICJTRElPIGZ1bmMgJXBcbiIsIGZ1bmMpOwogfQogCi1lbnVtIHsKLQlJMjQwME1TX0lOVEVMX1ZJRCA9IDB4ODksCi19OwotCiBzdGF0aWMKIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBpMjQwMG1zX3NkaW9faWRzW10gPSB7Ci0JLyogSW50ZWw6IGkyNDAwbSBXaU1BWCBvdmVyIFNESU8gKi8KLQl7IFNESU9fREVWSUNFKEkyNDAwTVNfSU5URUxfVklELCAweDE0MDIpIH0sCi0JeyB9LCAJCQkvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8KKwkvKiBJbnRlbDogaTI0MDBtIFdpTUFYIChpd21jMzIwMCkgb3ZlciBTRElPICovCisJeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9JTlRFTCwKKwkJICAgICAgU0RJT19ERVZJQ0VfSURfSU5URUxfSVdNQzMyMDBXSU1BWCkgfSwKKwl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgaTI0MDBtc19zZGlvX2lkcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYwppbmRleCBjZmRhZjY5Li43ZWFkZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCkBAIC0zNTEsNiArMzUxLDEwIEBACiB9CiAKIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBpMjQwMG11X3R5cGUgPSB7CisJLm5hbWUJPSAid2ltYXgiLAorfTsKKwogLyoKICAqIFByb2JlIGEgaTI0MDBtIGludGVyZmFjZSBhbmQgcmVnaXN0ZXIgaXQKICAqCkBAIC0zODgsNiArMzkyLDcgQEAKIAkJZ290byBlcnJvcl9hbGxvY19uZXRkZXY7CiAJfQogCVNFVF9ORVRERVZfREVWKG5ldF9kZXYsIGRldik7CisJU0VUX05FVERFVl9ERVZUWVBFKG5ldF9kZXYsICZpMjQwMG11X3R5cGUpOwogCWkyNDAwbSA9IG5ldF9kZXZfdG9faTI0MDBtKG5ldF9kZXYpOwogCWkyNDAwbXUgPSBjb250YWluZXJfb2YoaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtdSwgaTI0MDBtKTsKIAlpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2ID0gbmV0X2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDViYzAwZGIuLmFkODlkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMiwxMCArMiwxOSBAQAogIyBXaXJlbGVzcyBMQU4gZGV2aWNlIGNvbmZpZ3VyYXRpb24KICMKIAotbWVudSAiV2lyZWxlc3MgTEFOIgorbWVudWNvbmZpZyBXTEFOCisJYm9vbCAiV2lyZWxlc3MgTEFOIgogCWRlcGVuZHMgb24gIVMzOTAKKwktLS1oZWxwLS0tCisJICBUaGlzIHNlY3Rpb24gY29udGFpbnMgYWxsIHRoZSBwcmUgODAyLjExIGFuZCA4MDIuMTEgd2lyZWxlc3MKKwkgIGRldmljZSBkcml2ZXJzLiBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIGRyaXZlcnMgYW5kIGRvY3VtZW50YXRpb24KKwkgIG9uIHRoZW0gcmVmZXIgdG8gdGhlIHdpcmVsZXNzIHdpa2k6CiAKLWNvbmZpZyBXTEFOX1BSRTgwMjExCisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzCisKK2lmIFdMQU4KKworbWVudWNvbmZpZyBXTEFOX1BSRTgwMjExCiAJYm9vbCAiV2lyZWxlc3MgTEFOIChwcmUtODAyLjExKSIKIAlkZXBlbmRzIG9uIE5FVERFVklDRVMKIAktLS1oZWxwLS0tCkBAIC0xMDEsNyArMTEwLDcgQEAKIAkgIGNhbGxlZCBuZXR3YXZlX2NzLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogCi1jb25maWcgV0xBTl84MDIxMQorbWVudWNvbmZpZyBXTEFOXzgwMjExCiAJYm9vbCAiV2lyZWxlc3MgTEFOIChJRUVFIDgwMi4xMSkiCiAJZGVwZW5kcyBvbiBORVRERVZJQ0VTCiAJLS0taGVscC0tLQpAQCAtMjY2LDUxICsyNzUsMjYgQEAKIAkgbWljcm8gc3VwcG9ydCBmb3IgZXRodG9vbC4KIAogY29uZmlnIFBSSVNNNTQKLQl0cmlzdGF0ZSAnSW50ZXJzaWwgUHJpc20gR1QvRHVldHRlL0luZGlnbyBQQ0kvQ2FyZGJ1cycgCisJdHJpc3RhdGUgJ0ludGVyc2lsIFByaXNtIEdUL0R1ZXR0ZS9JbmRpZ28gUENJL0NhcmRidXMgKERFUFJFQ0FURUQpJwogCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTCAmJiBXTEFOXzgwMjExCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCi0JICBFbmFibGUgUENJIGFuZCBDYXJkYnVzIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgY2hpcHNldCBiYXNlZCBjYXJkczoKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGdWxsTUFDIFBDSS9DYXJkYnVzIHByaXNtNTQgZGV2aWNlcy4gVGhpcworCSAgZHJpdmVyIGlzIG5vdyBkZXByZWNhdGVkIGluIGZhdm9yIGZvciB0aGUgU29mdE1BQyBkcml2ZXIsIHA1NHBjaS4KKwkgIHA1NHBjaSBzdXBwb3J0cyBGdWxsTUFDIFBDSS9DYXJkYnVzIGRldmljZXMgYXMgd2VsbC4gRm9yIGRldGFpbHMgb24KKwkgIHRoZSBzY2hlZHVsZWQgcmVtb3ZhbCBvZiB0aGlzIGRyaXZlciBvbiB0aGUga2VybmVsIHNlZSB0aGUgZmVhdHVyZQorCSAgcmVtb3ZhbCBzY2hlZHVsZToKIAotCSAgSVNMMzg4MCAtIFByaXNtIEdUICAgICAgICAgICAgODAyLjExIGIvZwotCSAgSVNMMzg3NyAtIFByaXNtIEluZGlnbyAgICAgICAgODAyLjExIGEKLQkgIElTTDM4OTAgLSBQcmlzbSBEdWV0dGUgICAgICAgIDgwMi4xMSBhL2IvZwotCSAgCi0JICBGb3IgYSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBjYXJkcyB2aXNpdCA8aHR0cDovL3ByaXNtNTQub3JnPi4KLQkgIEhlcmUgaXMgdGhlIGxhdGVzdCBjb25maXJtZWQgbGlzdCBvZiBzdXBwb3J0ZWQgY2FyZHM6CisJICBEb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKIAotCSAgM2NvbSBPZmZpY2VDb25uZWN0IDExZyBDYXJkYnVzIENhcmQgYWthIDNDUldFMTU0RzcyICh2ZXJzaW9uIDEpCi0JICBBbGxuZXQgQUxMMDI3MSBQQ0kgQ2FyZAotCSAgQ29tcGV4IFdMNTRHIENhcmRidXMgQ2FyZAotCSAgQ29yZWdhIENHLVdMQ0I1NEdUIENhcmRidXMgQ2FyZAotCSAgRC1MaW5rIEFpciBQbHVzIFh0cmVtZSBHIEExIENhcmRidXMgQ2FyZCBha2EgRFdMLWc2NTAKLQkgIEktTyBEYXRhIFdOLUc1NC9DQiBDYXJkYnVzIENhcmQKLQkgIEtvYmlzaGkgWEctMzAwIGFrYSBaLUNvbSBDYXJkYnVzIENhcmQKLQkgIE5ldGdlYXIgV0c1MTEgQ2FyZGJ1cyBDYXJkCi0JICBPdmlzbGluayBXTC01NDAwUENJIFBDSSBDYXJkCi0JICBQZWFiaXJkIFdMRy1QQ0kgUENJIENhcmQKLQkgIFNpdGVjb20gV0wtMTAwaSBDYXJkYnVzIENhcmQKLQkgIFNpdGVjb20gV0wtMTEwaSBQQ0kgQ2FyZAotCSAgU01DMjgwMlcgLSAgICBFWiBDb25uZWN0IGcgMi40R0h6IDU0IE1icHMgV2lyZWxlc3MgUENJIENhcmQKLQkgIFNNQzI4MzVXIC0gICAgRVogQ29ubmVjdCBnIDIuNEdIeiA1NCBNYnBzIFdpcmVsZXNzIENhcmRidXMgQ2FyZAotCSAgU01DMjgzNVctVjIgLSBFWiBDb25uZWN0IGcgMi40R0h6IDU0IE1icHMgV2lyZWxlc3MgQ2FyZGJ1cyBDYXJkCi0JICBaLUNvbSBYRy05MDAgUENJIENhcmQKLQkgIFp5eGVsIEctMTAwIENhcmRidXMgQ2FyZAorCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gdGhlIHA1NCB3aWtpOgogCi0JICBJZiB5b3UgZW5hYmxlIHRoaXMgeW91IHdpbGwgbmVlZCBhIGZpcm13YXJlIGZpbGUgYXMgd2VsbC4KLQkgIFlvdSB3aWxsIG5lZWQgdG8gY29weSB0aGlzIHRvIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUvaXNsMzg5MC4KLQkgIFlvdSBjYW4gZ2V0IHRoaXMgbm9uLUdQTCdkIGZpcm13YXJlIGZpbGUgZnJvbSB0aGUgUHJpc201NCBwcm9qZWN0IHBhZ2U6Ci0JICA8aHR0cDovL3ByaXNtNTQub3JnPgotCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRoZSAvZXRjL2hvdHBsdWcvZmlybXdhcmUuYWdlbnQgc2NyaXB0IGZyb20KLQkgIGEgY3VycmVudCBob3RwbHVnIHBhY2thZ2UuCisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL3A1NAogCi0JICBOb3RlOiBZb3UgbmVlZCBhIG1vdGhlcmJvYXJkIHdpdGggRE1BIHN1cHBvcnQgdG8gdXNlIGFueSBvZiB0aGVzZSBjYXJkcyAKLQkgIAotCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoIGNhbiBiZQotCSAgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLAotCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uCi0JICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHByaXNtNTQuCisJICBOb3RlOiBZb3UgbmVlZCBhIG1vdGhlcmJvYXJkIHdpdGggRE1BIHN1cHBvcnQgdG8gdXNlIGFueSBvZiB0aGVzZSBjYXJkcworCisJICBXaGVuIGJ1aWx0IGFzIG1vZHVsZSB5b3UgZ2V0IHRoZSBtb2R1bGUgcHJpc201NAogCiBjb25maWcgVVNCX1pEMTIwMQogCXRyaXN0YXRlICJVU0IgWkQxMjAxIGJhc2VkIFdpcmVsZXNzIGRldmljZSBzdXBwb3J0IgpAQCAtMzM3LDcgKzMyMSw2IEBACiAJc2VsZWN0IFVTQl9VU0JORVQKIAlzZWxlY3QgVVNCX05FVF9DRENFVEhFUgogCXNlbGVjdCBVU0JfTkVUX1JORElTX0hPU1QKLQlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3Igd2lyZWxlc3MgUk5ESVMgZGV2aWNlcy4KIAkgIFRoZXNlIGFyZSBVU0IgYmFzZWQgYWRhcHRlcnMgZm91bmQgaW4gZGV2aWNlcyBzdWNoIGFzOgpAQCAtNDI4LDEwICs0MTEsMTIgQEAKIAkgIE1pY3JvbmV0IFNQOTA3R0sgVjUKIAkgIEVuY29yZSBFTlVXSS1HMgogCSAgVHJlbmRuZXQgVEVXLTQyNFVCCi0JICBBU1VTIFA1QiBEZWx1eGUKKwkgIEFTVVMgUDVCIERlbHV4ZS9QNUsgUHJlbWl1bSBtb3RoZXJib2FyZHMKIAkgIFRvc2hpYmEgU2F0ZWxsaXRlIFBybyBzZXJpZXMgb2YgbGFwdG9wcwogCSAgQXN1cyBXaXJlbGVzcyBMaW5rCi0JICBMaW5rc3lzIFdVU0I1NEdDLUVVCisJICBMaW5rc3lzIFdVU0I1NEdDLUVVIHYyCisJICAgICh2MSA9IHJ0NzN1c2I7IHYzIGlzIHJ0MjA3MC1iYXNlZCwKKwkgICAgIHVzZSBzdGFnaW5nL3J0MzA3MCBvciB0cnkgcnQyODAwdXNiKQogCiAJICBUaGFua3MgdG8gUmVhbHRlayBmb3IgdGhlaXIgc3VwcG9ydCEKIApAQCAtNTA0LDQgKzQ4OSw0IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvS2NvbmZpZyIKIAotZW5kbWVudQorZW5kaWYgIyBXTEFOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKaW5kZXggMmI5ZTM3OS4uYjgwZjUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYwpAQCAtNDUyLDcgKzQ1Miw4IEBACiAJCQlyeF9zdGF0dXMuZnJlcSA9IGFkbTgyMTFfY2hhbm5lbHNbcHJpdi0+Y2hhbm5lbCAtIDFdLmNlbnRlcl9mcmVxOwogCQkJcnhfc3RhdHVzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCi0JCQlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYsIHNrYiwgJnJ4X3N0YXR1cyk7CisJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwkJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiKTsKIAkJfQogCiAJCWVudHJ5ID0gKCsrcHJpdi0+Y3VyX3J4KSAlIHByaXYtPnJ4X3Jpbmdfc2l6ZTsKQEAgLTEzMjcsMTYgKzEzMjgsMzkgQEAKIAl9CiB9CiAKK3N0YXRpYyB1NjQgYWRtODIxMV9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKK3sKKwl1bnNpZ25lZCBpbnQgYml0X25yLCBpOworCXUzMiBtY19maWx0ZXJbMl07CisKKwltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKKwkJaWYgKCFtY2xpc3QpCisJCQlicmVhazsKKwkJYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKKworCQliaXRfbnIgJj0gMHgzRjsKKwkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gbWNfZmlsdGVyWzBdIHwgKCh1NjQpKG1jX2ZpbHRlclsxXSkgPDwgMzIpOworfQorCiBzdGF0aWMgdm9pZCBhZG04MjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKKwkJCQkgICAgIHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RhdGljIGNvbnN0IHU4IGJjYXN0W0VUSF9BTEVOXSA9IHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiB9OwogCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JdW5zaWduZWQgaW50IGJpdF9uciwgbmV3X2ZsYWdzOworCXVuc2lnbmVkIGludCBuZXdfZmxhZ3M7CiAJdTMyIG1jX2ZpbHRlclsyXTsKLQlpbnQgaTsKKworCW1jX2ZpbHRlclswXSA9IG11bHRpY2FzdDsKKwltY19maWx0ZXJbMV0gPSBtdWx0aWNhc3QgPj4gMzI7CiAKIAluZXdfZmxhZ3MgPSAwOwogCkBAIC0xMzQ1LDIzICsxMzY5LDEzIEBACiAJCXByaXYtPm5hciB8PSBBRE04MjExX05BUl9QUjsKIAkJcHJpdi0+bmFyICY9IH5BRE04MjExX05BUl9NTTsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gfjA7Ci0JfSBlbHNlIGlmICgoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB8fCAobWNfY291bnQgPiAzMikpIHsKKwl9IGVsc2UgaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSB8fCBtdWx0aWNhc3QgPT0gfigwVUxMKSkgewogCQluZXdfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOwogCQlwcml2LT5uYXIgJj0gfkFETTgyMTFfTkFSX1BSOwogCQlwcml2LT5uYXIgfD0gQURNODIxMV9OQVJfTU07CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IH4wOwogCX0gZWxzZSB7CiAJCXByaXYtPm5hciAmPSB+KEFETTgyMTFfTkFSX01NIHwgQURNODIxMV9OQVJfUFIpOwotCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewotCQkJaWYgKCFtY2xpc3QpCi0JCQkJYnJlYWs7Ci0JCQliaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwotCi0JCQliaXRfbnIgJj0gMHgzRjsKLQkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOwotCQkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OwotCQl9CiAJfQogCiAJQURNODIxMV9JRExFX1JYKCk7CkBAIC0xNzU2LDYgKzE3NzAsNyBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gYWRtODIxMV9yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IGFkbTgyMTFfY29uZmlnLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gYWRtODIxMV9ic3NfaW5mb19jaGFuZ2VkLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IGFkbTgyMTFfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBhZG04MjExX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBhZG04MjExX2dldF9zdGF0cywKIAkuZ2V0X3R4X3N0YXRzCQk9IGFkbTgyMTFfZ2V0X3R4X3N0YXRzLApAQCAtMTk2MywxNCArMTk3OCw2IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGFkbTgyMTFfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYWRtODIxMV9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCi0JaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpIHsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGRldik7Ci0JCWFkbTgyMTFfc3RvcChkZXYpOwotCX0KLQogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwogCXJldHVybiAwOwpAQCAtMTk3OCwxNyArMTk4NSw4IEBACiAKIHN0YXRpYyBpbnQgYWRtODIxMV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0KIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0KLQlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkgewotCQlhZG04MjExX3N0YXJ0KGRldik7Ci0JCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYpOwotCX0KLQogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDhjZTVlNGMuLjcxMTZhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTE5MjAsMTQgKzE5MjAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcGlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbXBpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKIAlpbnQgbnBhY2tzLCBwZW5kaW5nOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPm1sX3ByaXY7CiAKIAlpZiAoIXNrYikgewogCQlhaXJvX3ByaW50X2VycihkZXYtPm5hbWUsICIlczogc2tiID09IE5VTEwhIixfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlucGFja3MgPSBza2JfcXVldWVfbGVuICgmYWktPnR4cSk7CiAKQEAgLTE5MzgsNyArMTk0MCw3IEBACiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJCX0KIAkJc2tiX3F1ZXVlX3RhaWwgKCZhaS0+dHhxLCBza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWktPmF1eF9sb2NrLCBmbGFncyk7CkBAIC0xOTUxLDcgKzE5NTMsNyBAQAogCQlzZXRfYml0KEZMQUdfUEVORElOR19YTUlULCAmYWktPmZsYWdzKTsKIAkJbXBpX3NlbmRfcGFja2V0IChkZXYpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpAQCAtMjExOSw3ICsyMTIxLDkgQEAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgYWlyb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKK3N0YXRpYyBuZXRkZXZfdHhfdCBhaXJvX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CiAJczE2IGxlbjsKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgYWlyb19pbmZvICpwcml2ID0gZGV2LT5tbF9wcml2OwpAQCAtMjEyNyw3ICsyMTMxLDcgQEAKIAogCWlmICggc2tiID09IE5VTEwgKSB7CiAJCWFpcm9fcHJpbnRfZXJyKGRldi0+bmFtZSwgIiVzOiBza2IgPT0gTlVMTCEiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCS8qIEZpbmQgYSB2YWNhbnQgRklEICovCkBAIC0yMTU1LDcgKzIxNTksNyBAQAogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPnRocl93YWl0KTsKIAl9IGVsc2UKIAkJYWlyb19lbmRfeG1pdChkZXYpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGFpcm9fZW5kX3htaXQxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CkBAIC0yMTg0LDcgKzIxODgsOSBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIGludCBhaXJvX3N0YXJ0X3htaXQxMShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CitzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb19zdGFydF94bWl0MTEoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKIAlzMTYgbGVuOwogCWludCBpLCBqOwogCXN0cnVjdCBhaXJvX2luZm8gKnByaXYgPSBkZXYtPm1sX3ByaXY7CkBAIC0yMTk5LDcgKzIyMDUsNyBAQAogCiAJaWYgKCBza2IgPT0gTlVMTCApIHsKIAkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiJXM6IHNrYiA9PSBOVUxMISIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJLyogRmluZCBhIHZhY2FudCBGSUQgKi8KQEAgLTIyMjcsNyArMjIzMyw3IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+dGhyX3dhaXQpOwogCX0gZWxzZQogCQlhaXJvX2VuZF94bWl0MTEoZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBhaXJvX3JlYWRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwppbmRleCBkODRjYWYxLi45MjFhMDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCkBAIC03Nyw3ICs3Nyw3IEBACiBzdGF0aWMgaW50IGFybGFuc19mb3VuZDsKIAogc3RhdGljICBpbnQgCWFybGFuX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgIGludCAJYXJsYW5fdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgIG5ldGRldl90eF90IGFybGFuX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljICBpcnFyZXR1cm5fdCBhcmxhbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyAgaW50IAlhcmxhbl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIAlBUkxBTl9ERUJVR19FTlRSWSgiYXJsYW5fbWFjX2FkZHIiKTsKIAlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUJVU1k7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCkBAIC0xMTY5LDcgKzExNjksNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgYXJsYW5fdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBhcmxhbl90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXNob3J0IGxlbmd0aDsKIAl1bnNpZ25lZCBjaGFyICpidWY7CkBAIC0xMTkzLDcgKzExOTMsNyBAQAogCiAJYXJsYW5fcHJvY2Vzc19pbnRlcnJ1cHQoZGV2KTsKIAlBUkxBTl9ERUJVR19FWElUKCJhcmxhbl90eCIpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGJhZF9lbmQ6CiAJYXJsYW5fcHJvY2Vzc19pbnRlcnJ1cHQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKaW5kZXggNGVmYmRiZS4uOGUxYTU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKQEAgLTE1NjgsNyArMTU2OCw4IEBACiAKIAlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICJjYWxsaW5nIGllZWU4MDIxMV9yeF9pcnFzYWZlKCk6ICVkLyVkIiwKIAkJIHByaXYtPnJ4X3NrYi0+bGVuLCBwcml2LT5yeF9za2ItPmRhdGFfbGVuKTsKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgcHJpdi0+cnhfc2tiLCAmcnhfc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHByaXYtPnJ4X3NrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgcHJpdi0+cnhfc2tiKTsKIAogCS8qIFVzZSBhIG5ldyBza2IgZm9yIHRoZSBuZXh0IHJlY2VpdmUgKi8KIAlwcml2LT5yeF9za2IgPSBOVUxMOwpAQCAtMTc3Miw2ICsxNzczLDkgQEAKIAogCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5kd29ya19od19zY2FuKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT53b3JrX3NldF9wcm9taXNjKTsKKwogCW11dGV4X2xvY2soJnByaXYtPm10eCk7CiAKIAlpZiAoIXByaXYtPmRldmljZV91bnBsdWdnZWQpIHsKQEAgLTE4NzEsOCArMTg3NSw4IEBACiAJLyogRklYTUU6IGFkZCBtYXhpbXVtIHRpbWUgZm9yIHNjYW4gdG8gY29tcGxldGUgKi8KIAogCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgewotCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPmR3b3JrX2h3X3NjYW4sCi0JCQkJICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5odywgJnByaXYtPmR3b3JrX2h3X3NjYW4sCisJCQkJCSAgICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOwogCQlyZXR1cm47CiAJfQpAQCAtMTkzMyw4ICsxOTM3LDggQEAKIAkJZ290byBleGl0OwogCX0KIAotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKLQkJCSAgIFNDQU5fUE9MTF9JTlRFUlZBTCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5odywgJnByaXYtPmR3b3JrX2h3X3NjYW4sCisJCQkJICAgICBTQ0FOX1BPTExfSU5URVJWQUwpOwogCiBleGl0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKQEAgLTE5NDYsOSArMTk1MCw4IEBACiB7CiAJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbm5lbCAlZCByYWRpbyAlZCIsCi0JCSBfX2Z1bmNfXywgaHctPmNvbmYuY2hhbm5lbC0+aHdfdmFsdWUsCi0JCSBody0+Y29uZi5yYWRpb19lbmFibGVkKTsKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiBjaGFubmVsICVkIiwKKwkJIF9fZnVuY19fLCBody0+Y29uZi5jaGFubmVsLT5od192YWx1ZSk7CiAJYXQ3Nl9kYmdfZHVtcChEQkdfTUFDODAyMTEsIHByaXYtPmJzc2lkLCBFVEhfQUxFTiwgImJzc2lkOiIpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKQEAgLTE5OTMsMTUgKzE5OTYsMTQgQEAKIC8qIG11c3QgYmUgYXRvbWljICovCiBzdGF0aWMgdm9pZCBhdDc2X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsIGludCBtY19jb3VudCwKLQkJCQkgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQorCQkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IGZsYWdzOwogCiAJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbmdlZF9mbGFncz0weCUwOHggIgotCQkgInRvdGFsX2ZsYWdzPTB4JTA4eCBtY19jb3VudD0lZCIsCi0JCSBfX2Z1bmNfXywgY2hhbmdlZF9mbGFncywgKnRvdGFsX2ZsYWdzLCBtY19jb3VudCk7CisJCSAidG90YWxfZmxhZ3M9MHglMDh4IiwKKwkJIF9fZnVuY19fLCBjaGFuZ2VkX2ZsYWdzLCAqdG90YWxfZmxhZ3MpOwogCiAJZmxhZ3MgPSBjaGFuZ2VkX2ZsYWdzICYgQVQ3Nl9TVVBQT1JURURfRklMVEVSUzsKIAkqdG90YWxfZmxhZ3MgPSBBVDc2X1NVUFBPUlRFRF9GSUxURVJTOwpAQCAtMjAyMyw3ICsyMDI1LDcgQEAKIAl9IGVsc2UKIAkJcmV0dXJuOwogCi0JcXVldWVfd29yayhody0+d29ya3F1ZXVlLCAmcHJpdi0+d29ya19zZXRfcHJvbWlzYyk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoaHcsICZwcml2LT53b3JrX3NldF9wcm9taXNjKTsKIH0KIAogc3RhdGljIGludCBhdDc2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLApAQCAtMjI5NCwxMSArMjI5Niw4IEBACiAKIAl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwogCi0JaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfaHdfc2Nhbik7Ci0JCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsKKwlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKIAkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOwotCX0KIAogCWlmIChwcml2LT50eF91cmIpIHsKIAkJdXNiX2tpbGxfdXJiKHByaXYtPnR4X3VyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnCmluZGV4IGViMDMzN2MuLjExZGVkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnCkBAIC0xLDkgKzEsMjIgQEAKLWNvbmZpZyBBVEhfQ09NTU9OCittZW51Y29uZmlnIEFUSF9DT01NT04KIAl0cmlzdGF0ZSAiQXRoZXJvcyBXaXJlbGVzcyBDYXJkcyIKIAlkZXBlbmRzIG9uIFdMQU5fODAyMTEKLQlkZXBlbmRzIG9uIEFUSDVLIHx8IEFUSDlLIHx8IEFSOTE3MF9VU0IKKwlkZXBlbmRzIG9uIENGRzgwMjExCisJLS0taGVscC0tLQorCSAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgc3VwcG9ydCBmb3IgdGhlIEF0aGVyb3Mgd2lyZWxlc3MgZHJpdmVycy4KKwkgIGF0aDVrLCBhdGg5ayBhbmQgYXI5MTcwIGRyaXZlcnMgc2hhcmUgc29tZSBjb21tb24gY29kZSwgdGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgdGhlIGNvbW1vbiBhdGgua28gbW9kdWxlIHdoaWNoIHNoYXJlcyBjb21tb24gaGVscGVycy4KIAorCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24gb24gdGhpcyBtb2R1bGUgeW91IGNhbiB2aXNpdDoKKworCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hdGgKKworCSAgRm9yIGluZm9ybWF0aW9uIG9uIGFsbCBBdGhlcm9zIHdpcmVsZXNzIGRyaXZlcnMgdmlzaXQ6CisKKwkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvQXRoZXJvcworCitpZiBBVEhfQ09NTU9OCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnIgotCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9LY29uZmlnCmluZGV4IGI5OWUzMjYuLjA1OTE4ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL0tjb25maWcKQEAgLTEsMTMgKzEsMTMgQEAKIGNvbmZpZyBBUjkxNzBfVVNCCiAJdHJpc3RhdGUgIkF0aGVyb3MgQVI5MTcwIDgwMi4xMW4gVVNCIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFVTQiAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExCiAJc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBBVEhfQ09NTU9OCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIEF0aGVyb3MgIm90dXMiIDgwMi4xMW4gVVNCIGRldmljZXMuCiAKIAkgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBhZGRpdGlvbmFsIGZpcm13YXJlICgyIGZpbGVzKS4KIAkgIEZvciBub3csIHRoZXNlIGZpbGVzIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaGVyZToKKwogCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hcjkxNzAKIAogCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGFyOTE3MHVzYi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCmluZGV4IGJiOTc5ODEuLjkxNGU0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaApAQCAtMTA5LDEzICsxMDksNTUgQEAKIAlib29sIGhhc19wbGNwOwogfTsKIAorI2RlZmluZSBBUjkxNzBfTlVNX01BWF9CQV9SRVRSWQk1CisjZGVmaW5lIEFSOTE3MF9OVU1fVElECTE2CisjZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0CisjZGVmaW5lIEFSOTE3MF9OVU1fTUFYX0FHR19MRU4JKDIgKiBXTUVfQkFfQk1QX1NJWkUpCisKKyNkZWZpbmUgV01FX0FDX0JFICAgMgorI2RlZmluZSBXTUVfQUNfQksgICAzCisjZGVmaW5lIFdNRV9BQ19WSSAgIDEKKyNkZWZpbmUgV01FX0FDX1ZPICAgMAorCisjZGVmaW5lIFRJRF9UT19XTUVfQUMoX3RpZCkJCQkJXAorCSgoKChfdGlkKSA9PSAwKSB8fCAoKF90aWQpID09IDMpKSA/IFdNRV9BQ19CRSA6CVwKKwkgKCgoX3RpZCkgPT0gMSkgfHwgKChfdGlkKSA9PSAyKSkgPyBXTUVfQUNfQksgOglcCisJICgoKF90aWQpID09IDQpIHx8ICgoX3RpZCkgPT0gNSkpID8gV01FX0FDX1ZJIDoJXAorCSBXTUVfQUNfVk8pCisKKyNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCisJKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiAweGZmZikgPCAoX2Jhd3N6KSkKKworZW51bSBhcjkxNzBfdGlkX3N0YXRlIHsKKwlBUjkxNzBfVElEX1NUQVRFX0lOVkFMSUQsCisJQVI5MTcwX1RJRF9TVEFURV9TSFVURE9XTiwKKwlBUjkxNzBfVElEX1NUQVRFX1BST0dSRVNTLAorCUFSOTE3MF9USURfU1RBVEVfQ09NUExFVEUsCit9OworCitzdHJ1Y3QgYXI5MTcwX3N0YV90aWQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHF1ZXVlOworCXU4IGFkZHJbRVRIX0FMRU5dOworCXUxNiBzc247CisJdTE2IHRpZDsKKwllbnVtIGFyOTE3MF90aWRfc3RhdGUgc3RhdGU7CisJYm9vbCBhY3RpdmU7CisJdTggcmV0cnk7Cit9OworCiAjZGVmaW5lIEFSOTE3MF9RVUVVRV9USU1FT1VUCQk2NAogI2RlZmluZSBBUjkxNzBfVFhfVElNRU9VVAkJOAorI2RlZmluZSBBUjkxNzBfQkFfVElNRU9VVAkJNAogI2RlZmluZSBBUjkxNzBfSkFOSVRPUl9ERUxBWQkJMTI4CiAjZGVmaW5lIEFSOTE3MF9UWF9JTlZBTElEX1JBVEUJCTB4ZmZmZmZmZmYKIAorI2RlZmluZSBBUjkxNzBfTlVNX1RYX1NUQVRVUwkJMTI4CisjZGVmaW5lIEFSOTE3MF9OVU1fVFhfQUdHX01BWAkJMzAKKwogc3RydWN0IGFyOTE3MCB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGF0aF9jb21tb24gY29tbW9uOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAllbnVtIGFyOTE3MF9kZXZpY2Vfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBiYWRfaHdfbmFnZ2VyOwpAQCAtMTM2LDYgKzE3OCw3IEBACiAJLyogYmVhY29uaW5nICovCiAJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3dvcms7CisJYm9vbCBlbmFibGVfYmVhY29uOwogCiAJLyogY3J5cHRvZ3JhcGhpYyBlbmdpbmUgKi8KIAl1NjQgdXNlZGtleXM7CkBAIC0xNDMsMTAgKzE4Niw4IEBACiAJYm9vbCBkaXNhYmxlX29mZmxvYWQ7CiAKIAkvKiBmaWx0ZXIgc2V0dGluZ3MgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmlsdGVyX2NvbmZpZ193b3JrOwotCXU2NCBjdXJfbWNfaGFzaCwgd2FudF9tY19oYXNoOwotCXUzMiBjdXJfZmlsdGVyLCB3YW50X2ZpbHRlcjsKLQl1bnNpZ25lZCBsb25nIGZpbHRlcl9jaGFuZ2VkOworCXU2NCBjdXJfbWNfaGFzaDsKKwl1MzIgY3VyX2ZpbHRlcjsKIAl1bnNpZ25lZCBpbnQgZmlsdGVyX3N0YXRlOwogCWJvb2wgc25pZmZlcl9lbmFibGVkOwogCkBAIC0xODEsMjAgKzIyMiwzMCBAQAogCiAJLyogRUVQUk9NICovCiAJc3RydWN0IGFyOTE3MF9lZXByb20gZWVwcm9tOwotCXN0cnVjdCBhdGhfcmVndWxhdG9yeSByZWd1bGF0b3J5OwogCiAJLyogdHggcXVldWVzIC0gYXMgc2VlbiBieSBodyAtICovCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9wZW5kaW5nW19fQVI5MTcwX05VTV9UWFFdOwogCXN0cnVjdCBza19idWZmX2hlYWQgdHhfc3RhdHVzW19fQVI5MTcwX05VTV9UWFFdOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgdHhfamFuaXRvcjsKKwkvKiB0eCBhbXBkdSAqLworCXN0cnVjdCBza19idWZmX2hlYWQgdHhfc3RhdHVzX2FtcGR1OworCXNwaW5sb2NrX3QgdHhfYW1wZHVfbGlzdF9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgdHhfYW1wZHVfbGlzdDsKKwl1bnNpZ25lZCBpbnQgdHhfYW1wZHVfcGVuZGluZzsKIAogCS8qIHJ4c3RyZWFtIG1wZHUgbWVyZ2UgKi8KIAlzdHJ1Y3QgYXI5MTcwX3J4c3RyZWFtX21wZHVfbWVyZ2UgcnhfbXBkdTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcnhfZmFpbG92ZXI7CiAJaW50IHJ4X2ZhaWxvdmVyX21pc3Npbmc7CisKKwkvKiAoY2FjaGVkKSBIVyBBLU1QRFUgc2V0dGluZ3MgKi8KKwl1OCBnbG9iYWxfYW1wZHVfZGVuc2l0eTsKKwl1OCBnbG9iYWxfYW1wZHVfZmFjdG9yOwogfTsKIAogc3RydWN0IGFyOTE3MF9zdGFfaW5mbyB7CisJc3RydWN0IGFyOTE3MF9zdGFfdGlkIGFnZ1tBUjkxNzBfTlVNX1RJRF07CisJdW5zaWduZWQgaW50IGFtcGR1X21heF9sZW47CiB9OwogCiAjZGVmaW5lIEFSOTE3MF9UWF9GTEFHX1dBSVRfRk9SX0FDSwlCSVQoMCkKQEAgLTIwOSwxMCArMjYwLDYgQEAKICNkZWZpbmUgSVNfU1RBUlRFRChhKQkJKCgoc3RydWN0IGFyOTE3MCAqKWEpLT5zdGF0ZSA+PSBBUjkxNzBfU1RBUlRFRCkKICNkZWZpbmUgSVNfQUNDRVBUSU5HX0NNRChhKQkoKChzdHJ1Y3QgYXI5MTcwICopYSktPnN0YXRlID49IEFSOTE3MF9JRExFKQogCi0jZGVmaW5lIEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9NT0RFCQlCSVQoMCkKLSNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01VTFRJQ0FTVAkJQklUKDEpCi0jZGVmaW5lIEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9GUkFNRUZJTFRFUglCSVQoMikKLQogLyogZXhwb3J0ZWQgaW50ZXJmYWNlICovCiB2b2lkICphcjkxNzBfYWxsb2Moc2l6ZV90IHByaXZfc2l6ZSk7CiBpbnQgYXI5MTcwX3JlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3QgZGV2aWNlICpwZGV2KTsKQEAgLTIyNiw4ICsyNzMsOCBAQAogaW50IGFyOTE3MF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgYXI5MTcwX2luaXRfbWFjKHN0cnVjdCBhcjkxNzAgKmFyKTsKIGludCBhcjkxNzBfc2V0X3FvcyhzdHJ1Y3QgYXI5MTcwICphcik7Ci1pbnQgYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3Qoc3RydWN0IGFyOTE3MCAqYXIpOwotaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTY0IG1jX2hhc3QpOworaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgZmlsdGVyKTsKIGludCBhcjkxNzBfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhcjkxNzAgKmFyKTsKIGludCBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoc3RydWN0IGFyOTE3MCAqYXIpOwogaW50IGFyOTE3MF9zZXRfZHluX3NpZnNfYWNrKHN0cnVjdCBhcjkxNzAgKmFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2xlZC5jCmluZGV4IDYzZmRhNmMuLjg2YzRlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9sZWQuYwpAQCAtOTAsOSArOTAsMTIgQEAKIAlhcjkxNzBfc2V0X2xlZHNfc3RhdGUoYXIsIGxlZF92YWwpOwogCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKIAotCWlmIChyZXJ1bikKLQkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPmxlZF93b3JrLAotCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoYmxpbmtfZGVsYXkpKTsKKwlpZiAoIXJlcnVuKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGFyLT5odywKKwkJCQkgICAgICZhci0+bGVkX3dvcmssCisJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKGJsaW5rX2RlbGF5KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTE3MF9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkLApAQCAtMTEwLDcgKzExMyw3IEBACiAJfQogCiAJaWYgKGxpa2VseShJU19BQ0NFUFRJTkdfQ01EKGFyKSAmJiBhcmwtPnRvZ2dsZWQpKQotCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+bGVkX3dvcmssIEhaLzEwKTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsICZhci0+bGVkX3dvcmssIEhaLzEwKTsKIH0KIAogc3RhdGljIGludCBhcjkxNzBfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhcjkxNzAgKmFyLCBpbnQgaSwgY2hhciAqbmFtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jCmluZGV4IGQ5ZjFmNDYuLjYxNGUzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYwpAQCAtMjM4LDM5ICsyMzgsMzEgQEAKIAlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOwogfQogCi1pbnQgYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3Qoc3RydWN0IGFyOTE3MCAqYXIpCitpbnQgYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3Qoc3RydWN0IGFyOTE3MCAqYXIsIGNvbnN0IHU2NCBtY19oYXNoKQogewogCWludCBlcnI7CiAKIAlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOwotCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9ILAotCQlhci0+d2FudF9tY19oYXNoID4+IDMyKTsKLQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfTCwKLQkJYXItPndhbnRfbWNfaGFzaCk7Ci0KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfSCwgbWNfaGFzaCA+PiAzMik7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0wsIG1jX2hhc2gpOwogCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKIAllcnIgPSBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Ci0KIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JYXItPmN1cl9tY19oYXNoID0gYXItPndhbnRfbWNfaGFzaDsKLQorCWFyLT5jdXJfbWNfaGFzaCA9IG1jX2hhc2g7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihzdHJ1Y3QgYXI5MTcwICphcikKK2ludCBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIGZpbHRlcikKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUiwKLQkJCSAgICAgICBhci0+d2FudF9maWx0ZXIpOwotCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfRlJBTUVUWVBFX0ZJTFRFUiwgZmlsdGVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JYXItPmN1cl9maWx0ZXIgPSBhci0+d2FudF9maWx0ZXI7Ci0KKwlhci0+Y3VyX2ZpbHRlciA9IGZpbHRlcjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzkxLDI0ICszODMsMjYgQEAKIAlpZiAoYXItPnZpZikgewogCQl2IHw9IGFyLT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQ7CiAKLQkJc3dpdGNoIChhci0+dmlmLT50eXBlKSB7Ci0JCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJCXYgfD0gQklUKDI1KTsKKwkJaWYgKGFyLT5lbmFibGVfYmVhY29uKSB7CisJCQlzd2l0Y2ggKGFyLT52aWYtPnR5cGUpIHsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQkJdiB8PSBCSVQoMjUpOworCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCQl2IHw9IEJJVCgyNCk7CisJCQkJcHJldGJ0dCA9IChhci0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50IC0gNikgPDwKKwkJCQkJICAxNjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CiAJCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJCXYgfD0gQklUKDI0KTsKLQkJCXByZXRidHQgPSAoYXItPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCAtIDYpIDw8IDE2OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwkJCX0KIAkJfQogCiAJCXYgfD0gYXItPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2QgPDwgMTY7CiAJfQogCiAJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKLQogCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19QUkVUQlRULCBwcmV0YnR0KTsKIAlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX1BFUklPRCwgdik7CiAJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwppbmRleCA4OGMzZDg1Li5jMWY4YzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYwpAQCAtNDksNiArNDksMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgYm9vbCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKIAorc3RhdGljIGludCBtb2RwYXJhbV9odDsKK21vZHVsZV9wYXJhbV9uYW1lZChodCwgbW9kcGFyYW1faHQsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhodCwgImVuYWJsZSBNUERVIGFnZ3JlZ2F0aW9uLiIpOworCiAjZGVmaW5lIFJBVEUoX2JpdHJhdGUsIF9od19yYXRlLCBfdHhwaWR4LCBfZmxhZ3MpIHsJXAogCS5iaXRyYXRlCT0gKF9iaXRyYXRlKSwJCQlcCiAJLmZsYWdzCQk9IChfZmxhZ3MpLAkJCVwKQEAgLTE0OCwxMiArMTUyLDE1IEBACiAJLmNhcAkJPSBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVSB8CQkJXAogCQkJICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CQlcCiAJCQkgIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwJCQlcCisJCQkgIElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8CQkJXAogCQkJICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MCB8CQkJXAogCQkJICBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTLAkJCVwKIAkuYW1wZHVfZmFjdG9yCT0gMywJCQkJCQlcCiAJLmFtcGR1X2RlbnNpdHkJPSA2LAkJCQkJCVwKIAkubWNzCQk9IHsJCQkJCQlcCi0JCS5yeF9tYXNrID0geyAweEZGLCAweEZGLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9LAlcCisJCS5yeF9tYXNrID0geyAweGZmLCAweGZmLCAwLCAwLCAweDEsIDAsIDAsIDAsIDAsIDAsIH0sCVwKKwkJLnJ4X2hpZ2hlc3QgPSBjcHVfdG9fbGUxNigzMDApLAkJCQlcCisJCS50eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQsCQlcCiAJfSwJCQkJCQkJCVwKIH0KIApAQCAtMTc0LDggKzE4MSwzMSBAQAogfTsKIAogc3RhdGljIHZvaWQgYXI5MTcwX3R4KHN0cnVjdCBhcjkxNzAgKmFyKTsKK3N0YXRpYyBib29sIGFyOTE3MF90eF9hbXBkdShzdHJ1Y3QgYXI5MTcwICphcik7CiAKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKK3N0YXRpYyBpbmxpbmUgdTE2IGFyOTE3MF9nZXRfc2VxX2goc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlyZXR1cm4gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCkgPj4gNDsKK30KKworc3RhdGljIGlubGluZSB1MTYgYXI5MTcwX2dldF9zZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwlyZXR1cm4gYXI5MTcwX2dldF9zZXFfaCgodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBhcjkxNzBfZ2V0X3RpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGE7CisKKwlyZXR1cm4gKGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpKVswXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworfQorCisjZGVmaW5lIEdFVF9ORVhUX1NFUShzZXEpCSgoc2VxICsgMSkgJiAweDBmZmYpCisjZGVmaW5lIEdFVF9ORVhUX1NFUV9GUk9NX1NLQihza2IpCShHRVRfTkVYVF9TRVEoYXI5MTcwX2dldF9zZXEoc2tiKSkpCisKKyNpZiAoZGVmaW5lZCBBUjkxNzBfUVVFVUVfREVCVUcpIHx8IChkZWZpbmVkIEFSOTE3MF9UWEFHR19ERUJVRykKIHN0YXRpYyB2b2lkIGFyOTE3MF9wcmludF90eGhlYWRlcihzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wgKnR4YyA9ICh2b2lkICopIHNrYi0+ZGF0YTsKQEAgLTE4MywxMCArMjEzLDEwIEBACiAJc3RydWN0IGFyOTE3MF90eF9pbmZvICphcmluZm8gPSAodm9pZCAqKSB0eGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogPT4gRlJBTUUgW3NrYjolcCwgcTolZCwgREE6WyVwTV0gZmxhZ3M6JXggIgorCXByaW50ayhLRVJOX0RFQlVHICIlczogPT4gRlJBTUUgW3NrYjolcCwgcTolZCwgREE6WyVwTV0gZmxhZ3M6JXggczolZCAiCiAJCQkgICJtYWNfY3RybDolMDR4LCBwaHlfY3RybDolMDh4LCB0aW1lb3V0OlslZCBtc11dXG4iLAogCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBza2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLAotCSAgICAgICBpZWVlODAyMTFfZ2V0X0RBKGhkciksIGFyaW5mby0+ZmxhZ3MsCisJICAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSwgYXJpbmZvLT5mbGFncywgYXI5MTcwX2dldF9zZXFfaChoZHIpLAogCSAgICAgICBsZTE2X3RvX2NwdSh0eGMtPm1hY19jb250cm9sKSwgbGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCksCiAJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoYXJpbmZvLT50aW1lb3V0IC0gamlmZmllcykpOwogfQpAQCAtMjEwLDcgKzI0MCw5IEBACiAJCSAgICAgICAibWlzbWF0Y2ggJWQgIT0gJWRcbiIsIHNrYl9xdWV1ZV9sZW4ocXVldWUpLCBpKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiLS0tWyBlbmQgXS0tLVxuIik7CiB9CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHIHx8IEFSOTE3MF9UWEFHR19ERUJVRyAqLwogCisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCiBzdGF0aWMgdm9pZCBhcjkxNzBfZHVtcF90eHF1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLAogCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlKQogewpAQCAtMjIwLDcgKzI1Miw5IEBACiAJX19hcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCBxdWV1ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGZsYWdzKTsKIH0KKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KIAorI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCiBzdGF0aWMgdm9pZCBfX2FyOTE3MF9kdW1wX3R4c3RhdHMoc3RydWN0IGFyOTE3MCAqYXIpCiB7CiAJaW50IGk7CkBAIC0yMjksMjAgKzI2MywyNyBAQAogCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWU6JWQgbGltaXQ6JWQgbGVuOiVkIHdhaXRhY2s6JWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpLCBhci0+dHhfc3RhdHNbaV0ubGltaXQsCi0JCSAgICAgICBhci0+dHhfc3RhdHNbaV0ubGVuLCBza2JfcXVldWVfbGVuKCZhci0+dHhfc3RhdHVzW2ldKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWU6JWQgbGltaXQ6JWQgbGVuOiVkIHdhaXRhY2s6JWQgIgorCQkgICAgICAgIiBzdG9wcGVkOiVkXG4iLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpLAorCQkgICAgICAgYXItPnR4X3N0YXRzW2ldLmxpbWl0LCBhci0+dHhfc3RhdHNbaV0ubGVuLAorCQkgICAgICAgc2tiX3F1ZXVlX2xlbigmYXItPnR4X3N0YXR1c1tpXSksCisJCSAgICAgICBpZWVlODAyMTFfcXVldWVfc3RvcHBlZChhci0+aHcsIGkpKTsKIH0KKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRyAqLwogCi1zdGF0aWMgdm9pZCBhcjkxNzBfZHVtcF90eHN0YXRzKHN0cnVjdCBhcjkxNzAgKmFyKQorI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworc3RhdGljIHZvaWQgYXI5MTcwX2R1bXBfdHhfc3RhdHVzX2FtcGR1KHN0cnVjdCBhcjkxNzAgKmFyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKLQlfX2FyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0dXNfYW1wZHUubG9jaywgZmxhZ3MpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogQS1NUERVIHR4X3N0YXR1cyBxdWV1ZSA9PiBcbiIsCisJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFyLT50eF9zdGF0dXNfYW1wZHUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0dXNfYW1wZHUubG9jaywgZmxhZ3MpOwogfQotI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLworCisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCiAKIC8qIGNhbGxlciBtdXN0IGd1YXJhbnRlZSBleGNsdXNpdmUgYWNjZXNzIGZvciBfYmluXyBxdWV1ZS4gKi8KIHN0YXRpYyB2b2lkIGFyOTE3MF9yZWN5Y2xlX2V4cGlyZWQoc3RydWN0IGFyOTE3MCAqYXIsCkBAIC0zMTUsNiArMzU2LDcwIEBACiAJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGFyLT5odywgc2tiKTsKIH0KIAorc3RhdGljIHZvaWQgYXI5MTcwX3R4X2Zha2VfYW1wZHVfc3RhdHVzKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCXN0cnVjdCBza19idWZmX2hlYWQgc3VjY2VzczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGxvbmcgcXVldWVfYml0bWFwID0gMDsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnN1Y2Nlc3MpOworCisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJmFyLT50eF9zdGF0dXNfYW1wZHUpID4gQVI5MTcwX05VTV9UWF9TVEFUVVMpCisJCV9fc2tiX3F1ZXVlX3RhaWwoJnN1Y2Nlc3MsIHNrYl9kZXF1ZXVlKCZhci0+dHhfc3RhdHVzX2FtcGR1KSk7CisKKwlhcjkxNzBfcmVjeWNsZV9leHBpcmVkKGFyLCAmYXItPnR4X3N0YXR1c19hbXBkdSwgJnN1Y2Nlc3MpOworCisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjb2xsZWN0ZWQgJWQgQS1NUERVIGZyYW1lcy5cbiIsCisJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHNrYl9xdWV1ZV9sZW4oJnN1Y2Nlc3MpKTsKKwlfX2FyOTE3MF9kdW1wX3R4cXVldWUoYXIsICZzdWNjZXNzKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKworCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmc3VjY2VzcykpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOworCisJCXF1ZXVlX2JpdG1hcCB8PSBCSVQoc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCisJCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aW5mbyk7CisKKwkJdHhpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCXR4aW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gMTsKKworCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgYXI5MTcwX3R4X2NvbnRyb2wpKTsKKwkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGFyLT5odywgc2tiKTsKKwl9CisKKwlmb3JfZWFjaF9iaXQoaSwgJnF1ZXVlX2JpdG1hcCwgQklUU19QRVJfQllURSkgeworI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogd2FrZSBxdWV1ZSAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGkpOworCQlfX2FyOTE3MF9kdW1wX3R4c3RhdHMoYXIpOworI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHICovCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGFyLT5odywgaSk7CisJfQorCisJaWYgKHF1ZXVlX2JpdG1hcCkKKwkJYXI5MTcwX3R4KGFyKTsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3R4X2FtcGR1X2NhbGxiYWNrKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCisJYXJpbmZvLT50aW1lb3V0ID0gamlmZmllcyArCisJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX0JBX1RJTUVPVVQpOworCisJc2tiX3F1ZXVlX3RhaWwoJmFyLT50eF9zdGF0dXNfYW1wZHUsIHNrYik7CisJYXI5MTcwX3R4X2Zha2VfYW1wZHVfc3RhdHVzKGFyKTsKKwlhci0+dHhfYW1wZHVfcGVuZGluZy0tOworCisJaWYgKCFsaXN0X2VtcHR5KCZhci0+dHhfYW1wZHVfbGlzdCkgJiYgIWFyLT50eF9hbXBkdV9wZW5kaW5nKQorCQlhcjkxNzBfdHhfYW1wZHUoYXIpOworfQorCiB2b2lkIGFyOTE3MF90eF9jYWxsYmFjayhzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CkBAIC0zMzYsNyArNDQxLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGFyaW5mby0+ZmxhZ3MgJiBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJYXI5MTcwX3R4X2FtcGR1X2NhbGxiYWNrKGFyLCBza2IpOwogCX0gZWxzZSBpZiAoYXJpbmZvLT5mbGFncyAmIEFSOTE3MF9UWF9GTEFHX1dBSVRfRk9SX0FDSykgewogCQlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKIAkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOwpAQCAtNDIwLDYgKzUyNSwzOCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBhcjkxNzBfaGFuZGxlX2Jsb2NrX2FjayhzdHJ1Y3QgYXI5MTcwICphciwgdTE2IGNvdW50LCB1MTYgcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOworCisJd2hpbGUgKGNvdW50KSB7CisJCXNrYiA9IGFyOTE3MF9nZXRfcXVldWVkX3NrYihhciwgTlVMTCwgJmFyLT50eF9zdGF0dXNfYW1wZHUsIHIpOworCQlpZiAoIXNrYikKKwkJCWJyZWFrOworCisJCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwkJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aW5mbyk7CisKKwkJLyogRklYTUU6IG1heWJlIG1vcmUgPyAqLworCQl0eGluZm8tPnN0YXR1cy5yYXRlc1swXS5jb3VudCA9IDE7CisKKwkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGFyOTE3MF90eF9jb250cm9sKSk7CisJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShhci0+aHcsIHNrYik7CisJCWNvdW50LS07CisJfQorCisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJaWYgKGNvdW50KSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZ290ICVkIG1vcmUgZmFpbGVkIG1wZHVzLCBidXQgbm8gbW9yZSAiCisJCSAgICAgICAic3VpdGFibGUgZnJhbWVzIGxlZnQgaW4gdHhfc3RhdHVzIHF1ZXVlLlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGNvdW50KTsKKworCQlhcjkxNzBfZHVtcF90eF9zdGF0dXNfYW1wZHUoYXIpOworCX0KKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KK30KKwogLyoKICAqIFRoaXMgd29ya2VyIHRyaWVzIHRvIGtlZXBzIGFuIG1haW50YWluIHR4X3N0YXR1cyBxdWV1ZXMuCiAgKiBTbyB3ZSBjYW4gZ3VhcmFudGVlIHRoYXQgaW5jb21pbmcgdHhfc3RhdHVzIHJlcG9ydHMgYXJlCkBAIC00NTYsMTAgKzU5MywxNCBAQAogCQkJcmVzY2hlZCA9IHRydWU7CiAJfQogCi0JaWYgKHJlc2NoZWQpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwKLQkJCQkgICAmYXItPnR4X2phbml0b3IsCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfSkFOSVRPUl9ERUxBWSkpOworCWFyOTE3MF90eF9mYWtlX2FtcGR1X3N0YXR1cyhhcik7CisKKwlpZiAoIXJlc2NoZWQpCisJCXJldHVybjsKKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LAorCQkJCSAgICAgJmFyLT50eF9qYW5pdG9yLAorCQkJCSAgICAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfSkFOSVRPUl9ERUxBWSkpOwogfQogCiB2b2lkIGFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgYXI5MTcwICphciwgdm9pZCAqYnVmLCB1MzIgbGVuKQpAQCAtNTA5LDcgKzY1MCw3IEBACiAJCSAqIHByZS1UQlRUIGV2ZW50CiAJCSAqLwogCQlpZiAoYXItPnZpZiAmJiBhci0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQkJcXVldWVfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT5iZWFjb25fd29yayk7CisJCQlpZWVlODAyMTFfcXVldWVfd29yayhhci0+aHcsICZhci0+YmVhY29uX3dvcmspOwogCQlicmVhazsKIAogCWNhc2UgMHhjMjoKQEAgLTUyOCw4ICs2NjksMTUgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDB4YzQ6CisJCS8qIEJsb2NrQUNLIGJpdG1hcCAqLworCQlicmVhazsKKwogCWNhc2UgMHhjNToKIAkJLyogQmxvY2tBQ0sgZXZlbnRzICovCisJCWFyOTE3MF9oYW5kbGVfYmxvY2tfYWNrKGFyLAorCQkJCQlsZTE2X3RvX2NwdShjbWQtPmJhX2ZhaWxfY250LmZhaWxlZCksCisJCQkJCWxlMTZfdG9fY3B1KGNtZC0+YmFfZmFpbF9jbnQucmF0ZSkpOworCQlhcjkxNzBfdHhfZmFrZV9hbXBkdV9zdGF0dXMoYXIpOwogCQlicmVhazsKIAogCWNhc2UgMHhjNjoKQEAgLTkxNyw4ICsxMDY1LDEwIEBACiAJCWFyOTE3MF9yeF9waHlfc3RhdHVzKGFyLCBwaHksICZzdGF0dXMpOwogCiAJc2tiID0gYXI5MTcwX3J4X2NvcHlfZGF0YShidWYsIG1wZHVfbGVuKTsKLQlpZiAobGlrZWx5KHNrYikpCi0JCWllZWU4MDIxMV9yeF9pcnFzYWZlKGFyLT5odywgc2tiLCAmc3RhdHVzKTsKKwlpZiAobGlrZWx5KHNrYikpIHsKKwkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGFyLT5odywgc2tiKTsKKwl9CiB9CiAKIHZvaWQgYXI5MTcwX3J4KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTA4Miw4ICsxMjMyLDYgQEAKIAogCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CiAKLQlhci0+ZmlsdGVyX2NoYW5nZWQgPSAwOwotCiAJLyogcmVpbml0aWFsaXplIHF1ZXVlcyBzdGF0aXN0aWNzICovCiAJbWVtc2V0KCZhci0+dHhfc3RhdHMsIDAsIHNpemVvZihhci0+dHhfc3RhdHMpKTsKIAlmb3IgKGkgPSAwOyBpIDwgX19BUjkxNzBfTlVNX1RYUTsgaSsrKQpAQCAtMTA5Niw2ICsxMjQ0LDEwIEBACiAJQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbM10sIDIsIDMsICAgICA3LCA0Nyk7IC8qIFZPSUNFICovCiAJQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbNF0sIDIsIDMsICAgICA3LCAgMCk7IC8qIFNQRUNJQUwgKi8KIAorCS8qIHNldCBzYW5lIEFNUERVIGRlZmF1bHRzICovCisJYXItPmdsb2JhbF9hbXBkdV9kZW5zaXR5ID0gNjsKKwlhci0+Z2xvYmFsX2FtcGR1X2ZhY3RvciA9IDM7CisKIAlhci0+YmFkX2h3X25hZ2dlciA9IGppZmZpZXM7CiAKIAllcnIgPSBhci0+b3Blbihhcik7CkBAIC0xMTM4LDExICsxMjkwLDEyIEBACiAJaWYgKElTX1NUQVJURUQoYXIpKQogCQlhci0+c3RhdGUgPSBBUjkxNzBfSURMRTsKIAotCWZsdXNoX3dvcmtxdWV1ZShhci0+aHctPndvcmtxdWV1ZSk7Ci0KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFyLT50eF9qYW5pdG9yKTsKLQljYW5jZWxfd29ya19zeW5jKCZhci0+ZmlsdGVyX2NvbmZpZ193b3JrKTsKKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFyLT5sZWRfd29yayk7CisjZW5kaWYKIAljYW5jZWxfd29ya19zeW5jKCZhci0+YmVhY29uX3dvcmspOworCiAJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKIAogCWlmIChJU19BQ0NFUFRJTkdfQ01EKGFyKSkgewpAQCAtMTE1Nyw5ICsxMzEwLDQwIEBACiAJCXNrYl9xdWV1ZV9wdXJnZSgmYXItPnR4X3BlbmRpbmdbaV0pOwogCQlza2JfcXVldWVfcHVyZ2UoJmFyLT50eF9zdGF0dXNbaV0pOwogCX0KKwlza2JfcXVldWVfcHVyZ2UoJmFyLT50eF9zdGF0dXNfYW1wZHUpOworCiAJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBhcjkxNzBfdHhfaW5kaWNhdGVfaW1tYmEoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7CisKKwl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfSU1NX0FNUERVKTsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3R4X2NvcHlfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqZHN0LAorCQkJICAgICAgIHN0cnVjdCBza19idWZmICpzcmMpCit7CisJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICpkc3RfdHhjLCAqc3JjX3R4YzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmRzdF9pbmZvLCAqc3JjX2luZm87CisJc3RydWN0IGFyOTE3MF90eF9pbmZvICpkc3RfYXJpbmZvLCAqc3JjX2FyaW5mbzsKKworCXNyY190eGMgPSAodm9pZCAqKSBzcmMtPmRhdGE7CisJc3JjX2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNyYyk7CisJc3JjX2FyaW5mbyA9ICh2b2lkICopIHNyY19pbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCisJZHN0X3R4YyA9ICh2b2lkICopIGRzdC0+ZGF0YTsKKwlkc3RfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZHN0KTsKKwlkc3RfYXJpbmZvID0gKHZvaWQgKikgZHN0X2luZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisKKwlkc3RfdHhjLT5waHlfY29udHJvbCA9IHNyY190eGMtPnBoeV9jb250cm9sOworCisJLyogc2FtZSBNQ1MgZm9yIHRoZSB3aG9sZSBhZ2dyZWdhdGUgKi8KKwltZW1jcHkoZHN0X2luZm8tPmRyaXZlcl9yYXRlcywgc3JjX2luZm8tPmRyaXZlcl9yYXRlcywKKwkgICAgICAgc2l6ZW9mKGRzdF9pbmZvLT5kcml2ZXJfcmF0ZXMpKTsKK30KKwogc3RhdGljIGludCBhcjkxNzBfdHhfcHJlcGFyZShzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwpAQCAtMTIyOCw2ICsxNDEyLDcgQEAKIAogCQkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX0FHR1IpOwogCQkJYXJpbmZvLT5mbGFncyA9IEFSOTE3MF9UWF9GTEFHX0JMT0NLX0FDSzsKKwogCQkJZ290byBvdXQ7CiAJCX0KIApAQCAtMTM1OCw2ICsxNTQzLDE1OSBAQAogCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoY2hhaW5zIDw8IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl9TSElGVCk7CiB9CiAKK3N0YXRpYyBib29sIGFyOTE3MF90eF9hbXBkdShzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFnZzsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV90aWQgKnRpZF9pbmZvID0gTlVMTCwgKnRtcDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqZmlyc3QgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGYyOworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1MTYgc2VxLCBxdWV1ZSwgdG1wc3NuOworCWJvb2wgcnVuID0gZmFsc2U7CisKKwlza2JfcXVldWVfaGVhZF9pbml0KCZhZ2cpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9hbXBkdV9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmYXItPnR4X2FtcGR1X2xpc3QpKSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogYWdncmVnYXRpb24gbGlzdCBpcyBlbXB0eS5cbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aWRfaW5mbywgdG1wLCAmYXItPnR4X2FtcGR1X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRpZF9pbmZvLT5zdGF0ZSAhPSBBUjkxNzBfVElEX1NUQVRFX0NPTVBMRVRFKSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRhbmdsaW5nIGFnZ3JlZ2F0aW9uIGVudHJ5IVxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCsraSA+IDY0KSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGVub3VnaCBmcmFtZXMgYWdncmVnYXRlZC5cbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisJCQlicmVhazsKKwkJfQorCisJCXF1ZXVlID0gVElEX1RPX1dNRV9BQyh0aWRfaW5mby0+dGlkKTsKKworCQlpZiAoc2tiX3F1ZXVlX2xlbigmYXItPnR4X3BlbmRpbmdbcXVldWVdKSA+PQorCQkgICAgQVI5MTcwX05VTV9UWF9BR0dfTUFYKSB7CisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHF1ZXVlICVkIGZ1bGwuXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHF1ZXVlKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbGlzdF9kZWxfaW5pdCgmdGlkX2luZm8tPmxpc3QpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0aWRfaW5mby0+cXVldWUubG9jaywgZjIpOworCQl0bXBzc24gPSBzZXEgPSB0aWRfaW5mby0+c3NuOworCQlmaXJzdCA9IHNrYl9wZWVrKCZ0aWRfaW5mby0+cXVldWUpOworCisJCWlmIChsaWtlbHkoZmlyc3QpKQorCQkJdG1wc3NuID0gYXI5MTcwX2dldF9zZXEoZmlyc3QpOworCisJCWlmICh1bmxpa2VseSh0bXBzc24gIT0gc2VxKSkgeworI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzc24gbWlzbWF0Y2ggWyVkICE9ICVkXVxuLiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgc2VxLCB0bXBzc24pOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQkJdGlkX2luZm8tPnNzbiA9IHRtcHNzbjsKKwkJfQorCisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZ2VuZXJhdGUgQS1NUERVIGZvciB0aWQ6JWQgc3NuOiVkIHdpdGggIgorCQkgICAgICAgIiVkIHF1ZXVlZCBmcmFtZXMuXG4iLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLAorCQkgICAgICAgdGlkX2luZm8tPnRpZCwgdGlkX2luZm8tPnNzbiwKKwkJICAgICAgIHNrYl9xdWV1ZV9sZW4oJnRpZF9pbmZvLT5xdWV1ZSkpOworCQlfX2FyOTE3MF9kdW1wX3R4cXVldWUoYXIsICZ0aWRfaW5mby0+cXVldWUpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCisJCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJnRpZF9pbmZvLT5xdWV1ZSkpKSB7CisJCQlpZiAodW5saWtlbHkoYXI5MTcwX2dldF9zZXEoc2tiKSAhPSBzZXEpKQorCQkJCWJyZWFrOworCisJCQlfX3NrYl91bmxpbmsoc2tiLCAmdGlkX2luZm8tPnF1ZXVlKTsKKwkJCXRpZF9pbmZvLT5zc24gPSBzZXEgPSBHRVRfTkVYVF9TRVEoc2VxKTsKKworCQkJaWYgKHVubGlrZWx5KHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpICE9IHF1ZXVlKSkgeworI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdGlkOiVkKHE6JWQpIHF1ZXVlOiVkICIKKwkJCQkgICAgICAgIiFtYXRjaC5cbiIsIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksCisJCQkJICAgICAgIHRpZF9pbmZvLT50aWQsCisJCQkJICAgICAgIFRJRF9UT19XTUVfQUModGlkX2luZm8tPnRpZCksCisJCQkJICAgICAgIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICh1bmxpa2VseShmaXJzdCA9PSBza2IpKSB7CisJCQkJYXI5MTcwX3R4X3ByZXBhcmVfcGh5KGFyLCBza2IpOworCQkJCV9fc2tiX3F1ZXVlX3RhaWwoJmFnZywgc2tiKTsKKwkJCQlmaXJzdCA9IHNrYjsKKwkJCX0gZWxzZSB7CisJCQkJYXI5MTcwX3R4X2NvcHlfcGh5KGFyLCBza2IsIGZpcnN0KTsKKwkJCQlfX3NrYl9xdWV1ZV90YWlsKCZhZ2csIHNrYik7CisJCQl9CisKKwkJCWlmICh1bmxpa2VseShza2JfcXVldWVfbGVuKCZhZ2cpID09CisJCQkgICAgQVI5MTcwX05VTV9UWF9BR0dfTUFYKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChza2JfcXVldWVfZW1wdHkoJnRpZF9pbmZvLT5xdWV1ZSkpCisJCQl0aWRfaW5mby0+YWN0aXZlID0gZmFsc2U7CisJCWVsc2UKKwkJCWxpc3RfYWRkX3RhaWwoJnRpZF9pbmZvLT5saXN0LAorCQkJCSAgICAgICZhci0+dHhfYW1wZHVfbGlzdCk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGlkX2luZm8tPnF1ZXVlLmxvY2ssIGYyKTsKKworCQlpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2VtcHR5KCZhZ2cpKSkgeworI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBxdWV1ZWQgZW1wdHkgbGlzdCFcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIHRlbGwgdGhlIEZXL0hXIHRoYXQgdGhpcyBpcyB0aGUgbGFzdCBmcmFtZSwKKwkJICogdGhhdCB3YXkgaXQgd2lsbCB3YWl0IGZvciB0aGUgaW1tZWRpYXRlIGJsb2NrIGFjay4KKwkJICovCisJCWlmIChsaWtlbHkoc2tiX3BlZWtfdGFpbCgmYWdnKSkpCisJCQlhcjkxNzBfdHhfaW5kaWNhdGVfaW1tYmEoYXIsIHNrYl9wZWVrX3RhaWwoJmFnZykpOworCisjaWZkZWYgQVI5MTcwX1RYQUdHX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZ2VuZXJhdGVkIEEtTVBEVSBsb29rcyBsaWtlIHRoaXM6XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFnZyk7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfcGVuZGluZ1txdWV1ZV0ubG9jaywgZmxhZ3MpOworCQlza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCgmYWdnLCAmYXItPnR4X3BlbmRpbmdbcXVldWVdKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3BlbmRpbmdbcXVldWVdLmxvY2ssIGZsYWdzKTsKKwkJcnVuID0gdHJ1ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCX0KKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJX19za2JfcXVldWVfcHVyZ2UoJmFnZyk7CisKKwlyZXR1cm4gcnVuOworfQorCiBzdGF0aWMgdm9pZCBhcjkxNzBfdHgoc3RydWN0IGFyOTE3MCAqYXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEzODIsMTEgKzE3MjAsMTcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWUgJWQgZnVsbFxuIiwKIAkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpKTsKIAotCQkJX19hcjkxNzBfZHVtcF90eHN0YXRzKGFyKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJzdHVjayBmcmFtZXM6ID09PT4gXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc3R1Y2sgZnJhbWVzOiA9PT0+IFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKIAkJCWFyOTE3MF9kdW1wX3R4cXVldWUoYXIsICZhci0+dHhfcGVuZGluZ1tpXSk7CiAJCQlhcjkxNzBfZHVtcF90eHF1ZXVlKGFyLCAmYXItPnR4X3N0YXR1c1tpXSk7CiAjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCisKKyNpZmRlZiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdG9wIHF1ZXVlICVkXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGkpOworCQkJX19hcjkxNzBfZHVtcF90eHN0YXRzKGFyKTsKKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRyAqLwogCQkJaWVlZTgwMjExX3N0b3BfcXVldWUoYXItPmh3LCBpKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKQEAgLTE0MDEsOCArMTc0NSw2IEBACiAJCQkgICAgICAgInJlbWFpbmluZyBzbG90czolZCwgbmVlZGVkOiVkXG4iLAogCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGksIHJlbWFpbmluZ19zcGFjZSwKIAkJCSAgICAgICBmcmFtZXMpOwotCi0JCQlhcjkxNzBfZHVtcF90eHN0YXRzKGFyKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KIAkJCWZyYW1lcyA9IHJlbWFpbmluZ19zcGFjZTsKIAkJfQpAQCAtMTQzMCw2ICsxNzcyLDkgQEAKIAkJCWFyaW5mby0+dGltZW91dCA9IGppZmZpZXMgKwogCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOwogCisJCQlpZiAoYXJpbmZvLT5mbGFncyA9PSBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spCisJCQkJYXItPnR4X2FtcGR1X3BlbmRpbmcrKzsKKwogI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZW5kIGZyYW1lIHE6JWQgPT5cbiIsCiAJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSk7CkBAIC0xNDM4LDYgKzE3ODMsOSBAQAogCiAJCQllcnIgPSBhci0+dHgoYXIsIHNrYik7CiAJCQlpZiAodW5saWtlbHkoZXJyKSkgeworCQkJCWlmIChhcmluZm8tPmZsYWdzID09IEFSOTE3MF9UWF9GTEFHX0JMT0NLX0FDSykKKwkJCQkJYXItPnR4X2FtcGR1X3BlbmRpbmctLTsKKwogCQkJCWZyYW1lc19mYWlsZWQrKzsKIAkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJfSBlbHNlIHsKQEAgLTE0NTksMjIgKzE4MDcsMTEzIEBACiAKIAkJaWYgKHVubGlrZWx5KGZyYW1lc19mYWlsZWQpKSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZyYW1lcyBmYWlsZWQgPT5cbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZyYW1lcyBmYWlsZWQgJWQgPT5cbiIsCiAJCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgZnJhbWVzX2ZhaWxlZCk7CiAjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCQkJYXItPnR4X3N0YXRzW2ldLmxlbiAtPSBmcmFtZXNfZmFpbGVkOwogCQkJYXItPnR4X3N0YXRzW2ldLmNvdW50IC09IGZyYW1lc19mYWlsZWQ7CisjaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogd2FrZSBxdWV1ZSAlZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpKTsKKwkJCV9fYXI5MTcwX2R1bXBfdHhzdGF0cyhhcik7CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcgKi8KIAkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGFyLT5odywgaSk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCQl9CiAJfQogCi0JaWYgKHNjaGVkdWxlX2dhcmJhZ2Vjb2xsZWN0b3IpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwKLQkJCQkgICAmYXItPnR4X2phbml0b3IsCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfSkFOSVRPUl9ERUxBWSkpOworCWlmICghc2NoZWR1bGVfZ2FyYmFnZWNvbGxlY3RvcikKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHcsCisJCQkJICAgICAmYXItPnR4X2phbml0b3IsCisJCQkJICAgICBtc2Vjc190b19qaWZmaWVzKEFSOTE3MF9KQU5JVE9SX0RFTEFZKSk7Cit9CisKK3N0YXRpYyBib29sIGFyOTE3MF90eF9hbXBkdV9xdWV1ZShzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbzsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfaW5mbzsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV90aWQgKmFnZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqaXRlcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBmMjsKKwl1bnNpZ25lZCBpbnQgbWF4OworCXUxNiB0aWQsIHNlcSwgcXNlcTsKKwlib29sIHJ1biA9IGZhbHNlLCBxdWV1ZSA9IGZhbHNlOworCisJdGlkID0gYXI5MTcwX2dldF90aWQoc2tiKTsKKwlzZXEgPSBhcjkxNzBfZ2V0X3NlcShza2IpOworCXR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdGFfaW5mbyA9ICh2b2lkICopIHR4aW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OworCWFnZyA9ICZzdGFfaW5mby0+YWdnW3RpZF07CisJbWF4ID0gc3RhX2luZm8tPmFtcGR1X21heF9sZW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KGFnZy0+c3RhdGUgIT0gQVI5MTcwX1RJRF9TVEFURV9DT01QTEVURSkpIHsKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBCbG9ja0FDSyBzZXNzaW9uIG5vdCBmdWxseSBpbml0aWFsaXplZCAiCisJCSAgICAgICAiZm9yIEVTUzolcE0gdGlkOiVkIHN0YXRlOiVkLlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGFnZy0+YWRkciwgYWdnLT50aWQsCisJCSAgICAgICBhZ2ctPnN0YXRlKTsKKyNlbmRpZiAvKiBBUjkxNzBfVFhBR0dfREVCVUcgKi8KKwkJZ290byBlcnJfdW5sb2NrOworCX0KKworCWlmICghYWdnLT5hY3RpdmUpIHsKKwkJYWdnLT5hY3RpdmUgPSB0cnVlOworCQlhZ2ctPnNzbiA9IHNlcTsKKwkJcXVldWUgPSB0cnVlOworCX0KKworCS8qIGNoZWNrIGlmIHNlcSBpcyB3aXRoaW4gdGhlIEJBIHdpbmRvdyAqLworCWlmICh1bmxpa2VseSghQkFXX1dJVEhJTihhZ2ctPnNzbiwgbWF4LCBzZXEpKSkgeworI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZyYW1lIHdpdGggdGlkOiVkIHNlcTolZCBkb2VzIG5vdCAiCisJCSAgICAgICAiZml0IGludG8gQkEgd2luZG93ICglZCAtICVkKVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHRpZCwgc2VxLCBhZ2ctPnNzbiwKKwkJICAgICAgIChhZ2ctPnNzbiArIG1heCkgJiAweGZmZik7CisjZW5kaWYgLyogQVI5MTcwX1RYQUdHX0RFQlVHICovCisJCWdvdG8gZXJyX3VubG9jazsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWdnLT5xdWV1ZS5sb2NrLCBmMik7CisKKwlza2JfcXVldWVfcmV2ZXJzZV93YWxrKCZhZ2ctPnF1ZXVlLCBpdGVyKSB7CisJCXFzZXEgPSBhcjkxNzBfZ2V0X3NlcShpdGVyKTsKKworCQlpZiAoR0VUX05FWFRfU0VRKHFzZXEpID09IHNlcSkgeworCQkJX19za2JfcXVldWVfYWZ0ZXIoJmFnZy0+cXVldWUsIGl0ZXIsIHNrYik7CisJCQlnb3RvIHF1ZXVlZDsKKwkJfQorCX0KKworCV9fc2tiX3F1ZXVlX2hlYWQoJmFnZy0+cXVldWUsIHNrYik7CisKK3F1ZXVlZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZ2ctPnF1ZXVlLmxvY2ssIGYyKTsKKworI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogbmV3IGFnZ3JlZ2F0ZSAlcCBxdWV1ZWQuXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBza2IpOworCV9fYXI5MTcwX2R1bXBfdHhxdWV1ZShhciwgJmFnZy0+cXVldWUpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCisJaWYgKHNrYl9xdWV1ZV9sZW4oJmFnZy0+cXVldWUpID49IEFSOTE3MF9OVU1fVFhfQUdHX01BWCkKKwkJcnVuID0gdHJ1ZTsKKworCWlmIChxdWV1ZSkKKwkJbGlzdF9hZGRfdGFpbCgmYWdnLT5saXN0LCAmYXItPnR4X2FtcGR1X2xpc3QpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCXJldHVybiBydW47CisKK2Vycl91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJcmV0dXJuIGZhbHNlOwogfQogCiBpbnQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTQ5MCw4ICsxOTI5LDEwIEBACiAKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKLQkJLyogZHJvcCBmcmFtZSwgd2UgZG8gbm90IGFsbG93IFRYIEEtTVBEVSBhZ2dyZWdhdGlvbiB5ZXQuICovCi0JCWdvdG8gZXJyX2ZyZWU7CisJCWJvb2wgcnVuID0gYXI5MTcwX3R4X2FtcGR1X3F1ZXVlKGFyLCBza2IpOworCisJCWlmIChydW4gfHwgIWFyLT50eF9hbXBkdV9wZW5kaW5nKQorCQkJYXI5MTcwX3R4X2FtcGR1KGFyKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBpbnQgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIApAQCAtMTUyOSw4ICsxOTcwLDcgQEAKIAl9CiAKIAlhci0+Y3VyX2ZpbHRlciA9IDA7Ci0JYXItPndhbnRfZmlsdGVyID0gQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTOwotCWVyciA9IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyKTsKKwllcnIgPSBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhciwgQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTKTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9jazsKIApAQCAtMTU0OCw4ICsxOTg4LDcgQEAKIAogCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CiAJYXItPnZpZiA9IE5VTEw7Ci0JYXItPndhbnRfZmlsdGVyID0gMDsKLQlhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhcik7CisJYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoYXIsIDApOwogCWFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhhcik7CiAJZGV2X2tmcmVlX3NrYihhci0+YmVhY29uKTsKIAlhci0+YmVhY29uID0gTlVMTDsKQEAgLTE1OTIsMTIgKzIwMzEsNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSB7Ci0JCWVyciA9IGFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhhcik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7CiAKIAkJLyogYWRqdXN0IHNsb3QgdGltZSBmb3IgNSBHSHogKi8KQEAgLTE2MjEsNDggKzIwNTQsMzcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBhcjkxNzBfc2V0X2ZpbHRlcnMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHU2NCBhcjkxNzBfb3BfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBtY19jb3VudCwKKwkJCQkgICAgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKIHsKLQlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLAotCQkJCQkgZmlsdGVyX2NvbmZpZ193b3JrKTsKLQlpbnQgZXJyOworCXU2NCBtY2hhc2g7CisJaW50IGk7CiAKLQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKLQkJcmV0dXJuIDsKKwkvKiBhbHdheXMgZ2V0IGJyb2FkY2FzdCBmcmFtZXMgKi8KKwltY2hhc2ggPSAxVUxMIDw8ICgweGZmID4+IDIpOwogCi0JbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9NT0RFLAotCQkJICAgICAgICZhci0+ZmlsdGVyX2NoYW5nZWQpKSB7Ci0JCWVyciA9IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byB1bmxvY2s7CisJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKKwkJaWYgKFdBUk5fT04oIW1jbGlzdCkpCisJCQlicmVhazsKKwkJbWNoYXNoIHw9IDFVTEwgPDwgKG1jbGlzdC0+ZG1pX2FkZHJbNV0gPj4gMik7CisJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKIAl9CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9NVUxUSUNBU1QsCi0JCQkgICAgICAgJmFyLT5maWx0ZXJfY2hhbmdlZCkpIHsKLQkJZXJyID0gYXI5MTcwX3VwZGF0ZV9tdWx0aWNhc3QoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byB1bmxvY2s7Ci0JfQotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBUjkxNzBfRklMVEVSX0NIQU5HRURfRlJBTUVGSUxURVIsCi0JCQkgICAgICAgJmFyLT5maWx0ZXJfY2hhbmdlZCkpIHsKLQkJZXJyID0gYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoYXIpOwotCQlpZiAoZXJyKQotCQkJZ290byB1bmxvY2s7Ci0JfQotCi11bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCXJldHVybiBtY2hhc2g7CiB9CiAKIHN0YXRpYyB2b2lkIGFyOTE3MF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCi0JCQkJICAgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCisJCQkJICAgICAgIHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKIAorCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQorCQlyZXR1cm4gOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwogCS8qIG1hc2sgc3VwcG9ydGVkIGZsYWdzICovCiAJKm5ld19mbGFncyAmPSBGSUZfQUxMTVVMVEkgfCBGSUZfQ09OVFJPTCB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwKIAkJICAgICAgRklGX1BST01JU0NfSU5fQlNTIHwgRklGX0ZDU0ZBSUwgfCBGSUZfUExDUEZBSUw7CkBAIC0xNjcyLDI2ICsyMDk0LDExIEBACiAJICogdGhlbiBjaGVja2luZyB0aGUgZXJyb3IgZmxhZ3MsIGxhdGVyLgogCSAqLwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHsKLQkJaWYgKCpuZXdfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHsKLQkJCWFyLT53YW50X21jX2hhc2ggPSB+MFVMTDsKLQkJfSBlbHNlIHsKLQkJCXU2NCBtY2hhc2g7Ci0JCQlpbnQgaTsKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSAmJiAqbmV3X2ZsYWdzICYgRklGX0FMTE1VTFRJKQorCQltdWx0aWNhc3QgPSB+MFVMTDsKIAotCQkJLyogYWx3YXlzIGdldCBicm9hZGNhc3QgZnJhbWVzICovCi0JCQltY2hhc2ggPSAxVUxMIDw8ICgweGZmID4+IDIpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewotCQkJCWlmIChXQVJOX09OKCFtY2xpc3QpKQotCQkJCQlicmVhazsKLQkJCQltY2hhc2ggfD0gMVVMTCA8PCAobWNsaXN0LT5kbWlfYWRkcls1XSA+PiAyKTsKLQkJCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7Ci0JCQl9Ci0JCWFyLT53YW50X21jX2hhc2ggPSBtY2hhc2g7Ci0JCX0KLQkJc2V0X2JpdChBUjkxNzBfRklMVEVSX0NIQU5HRURfTVVMVElDQVNULCAmYXItPmZpbHRlcl9jaGFuZ2VkKTsKLQl9CisJaWYgKG11bHRpY2FzdCAhPSBhci0+Y3VyX21jX2hhc2gpCisJCWFyOTE3MF91cGRhdGVfbXVsdGljYXN0KGFyLCBtdWx0aWNhc3QpOwogCiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgewogCQl1MzIgZmlsdGVyID0gQVI5MTcwX01BQ19SRUdfRlRGX1BTUE9MTCB8CkBAIC0xNzAyLDI0ICsyMTA5LDIyIEBACiAJCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DRkVfQUNLOwogCiAJCWlmICgqbmV3X2ZsYWdzICYgRklGX0NPTlRST0wpCi0JCQlhci0+d2FudF9maWx0ZXIgPSBhci0+Y3VyX2ZpbHRlciB8IGZpbHRlcjsKKwkJCWZpbHRlciB8PSBhci0+Y3VyX2ZpbHRlcjsKIAkJZWxzZQotCQkJYXItPndhbnRfZmlsdGVyID0gYXItPmN1cl9maWx0ZXIgJiB+ZmlsdGVyOworCQkJZmlsdGVyICY9ICh+YXItPmN1cl9maWx0ZXIpOwogCi0JCXNldF9iaXQoQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX0ZSQU1FRklMVEVSLAotCQkJJmFyLT5maWx0ZXJfY2hhbmdlZCk7CisJCWFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyLCBmaWx0ZXIpOwogCX0KIAogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB7CiAJCWFyLT5zbmlmZmVyX2VuYWJsZWQgPSAoKCpuZXdfZmxhZ3MpICYgRklGX1BST01JU0NfSU5fQlNTKSAhPSAwOwotCQlzZXRfYml0KEFSOTE3MF9GSUxURVJfQ0hBTkdFRF9NT0RFLAotCQkJJmFyLT5maWx0ZXJfY2hhbmdlZCk7CisJCWFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOwogCX0KIAotCWlmIChsaWtlbHkoSVNfU1RBUlRFRChhcikpKQotCQlxdWV1ZV93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPmZpbHRlcl9jb25maWdfd29yayk7CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOwogfQogCisKIHN0YXRpYyB2b2lkIGFyOTE3MF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKQEAgLTE3MzcsMTEgKzIxNDIsMTcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCWlmIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0JFQUNPTiB8IEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSkgeworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpCisJCWFyLT5lbmFibGVfYmVhY29uID0gYnNzX2NvbmYtPmVuYWJsZV9iZWFjb247CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgewogCQllcnIgPSBhcjkxNzBfdXBkYXRlX2JlYWNvbihhcik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKKwl9CiAKKwlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCB8IEJTU19DSEFOR0VEX0JFQUNPTiB8CisJCSAgICAgICBCU1NfQ0hBTkdFRF9CRUFDT05fSU5UKSkgewogCQllcnIgPSBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CkBAIC0xNzU0LDEyICsyMTY1LDYgQEAKICNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KIAl9CiAKLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpIHsKLQkJZXJyID0gYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfSFQpIHsKIAkJLyogVE9ETyAqLwogCQllcnIgPSAwOwpAQCAtMTkyOSw2ICsyMzM0LDUwIEBACiAJCQkgICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfaW5mbyA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJdW5zaWduZWQgaW50IGk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU1RBX05PVElGWV9BREQ6CisJCW1lbXNldChzdGFfaW5mbywgMCwgc2l6ZW9mKCpzdGFfaW5mbykpOworCisJCWlmICghc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPiBhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkpCisJCQlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OworCisJCWlmIChzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPCBhci0+Z2xvYmFsX2FtcGR1X2ZhY3RvcikKKwkJCWFyLT5nbG9iYWxfYW1wZHVfZmFjdG9yID0gc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOworCisJCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfTlVNX1RJRDsgaSsrKSB7CisJCQlzdGFfaW5mby0+YWdnW2ldLnN0YXRlID0gQVI5MTcwX1RJRF9TVEFURV9TSFVURE9XTjsKKwkJCXN0YV9pbmZvLT5hZ2dbaV0uYWN0aXZlID0gZmFsc2U7CisJCQlzdGFfaW5mby0+YWdnW2ldLnNzbiA9IDA7CisJCQlzdGFfaW5mby0+YWdnW2ldLnJldHJ5ID0gMDsKKwkJCXN0YV9pbmZvLT5hZ2dbaV0udGlkID0gaTsKKwkJCUlOSVRfTElTVF9IRUFEKCZzdGFfaW5mby0+YWdnW2ldLmxpc3QpOworCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc3RhX2luZm8tPmFnZ1tpXS5xdWV1ZSk7CisJCX0KKworCQlzdGFfaW5mby0+YW1wZHVfbWF4X2xlbiA9IDEgPDwgKDMgKyBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IpOworCQlicmVhazsKKworCWNhc2UgU1RBX05PVElGWV9SRU1PVkU6CisJCWlmICghc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCQkJYnJlYWs7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fVElEOyBpKyspIHsKKwkJCXN0YV9pbmZvLT5hZ2dbaV0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX0lOVkFMSUQ7CisJCQlza2JfcXVldWVfcHVyZ2UoJnN0YV9pbmZvLT5hZ2dbaV0ucXVldWUpOworCQl9CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgYXI5MTcwX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE5ODQsMTggKzI0MzMsNjUgQEAKIAkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pCiB7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfaW5mbyA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGFyOTE3MF9zdGFfdGlkICp0aWRfaW5mbyA9ICZzdGFfaW5mby0+YWdnW3RpZF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghbW9kcGFyYW1faHQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJCWlmICh0aWRfaW5mby0+c3RhdGUgIT0gQVI5MTcwX1RJRF9TVEFURV9TSFVURE9XTiB8fAorCQkgICAgIWxpc3RfZW1wdHkoJnRpZF9pbmZvLT5saXN0KSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworI2lmZGVmIEFSOTE3MF9UWEFHR19ERUJVRworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEEtTVBEVSBbRVNTOlslcE1dIHRpZDpbJWRdXSAiCisJCQkgICAgICAgImlzIGluIGEgdmVyeSBiYWQgc3RhdGUhXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgc3RhLT5hZGRyLCB0aWQpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCisJCSpzc24gPSB0aWRfaW5mby0+c3NuOworCQl0aWRfaW5mby0+c3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1BST0dSRVNTOworCQl0aWRfaW5mby0+YWN0aXZlID0gZmFsc2U7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9hbXBkdV9saXN0X2xvY2ssIGZsYWdzKTsKKwkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoaHcsIHN0YS0+YWRkciwgdGlkKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgorCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCQl0aWRfaW5mby0+c3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOOworCQlsaXN0X2RlbF9pbml0KCZ0aWRfaW5mby0+bGlzdCk7CisJCXRpZF9pbmZvLT5hY3RpdmUgPSBmYWxzZTsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZ0aWRfaW5mby0+cXVldWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoaHcsIHN0YS0+YWRkciwgdGlkKTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKKyNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEEtTVBEVSBmb3IgJXBNIFt0aWQ6JWRdIE9wZXJhdGlvbmFsLlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgc3RhLT5hZGRyLCB0aWQpOworI2VuZGlmIC8qIEFSOTE3MF9UWEFHR19ERUJVRyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXItPnR4X2FtcGR1X2xpc3RfbG9jaywgZmxhZ3MpOworCQlzdGFfaW5mby0+YWdnW3RpZF0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX0NPTVBMRVRFOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfYW1wZHVfbGlzdF9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKLQkJLyoKLQkJICogU29tZXRoaW5nIGdvZXMgd3JvbmcgLS0gUlggbG9ja3MgdXAKLQkJICogYWZ0ZXIgYSB3aGlsZSBvZiByZWNlaXZpbmcgYWdncmVnYXRlZAotCQkgKiBmcmFtZXMgLS0gbm90IGVuYWJsaW5nIGZvciBub3cuCi0JCSAqLwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCS8qIEhhbmRsZWQgYnkgZmlybXdhcmUgKi8KKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhcjkxNzBfb3BzID0gewpAQCAtMjAwNSw2ICsyNTAxLDcgQEAKIAkuYWRkX2ludGVyZmFjZQkJPSBhcjkxNzBfb3BfYWRkX2ludGVyZmFjZSwKIAkucmVtb3ZlX2ludGVyZmFjZQk9IGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IGFyOTE3MF9vcF9jb25maWcsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gYXI5MTcwX29wX3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gYXI5MTcwX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmNvbmZfdHgJCT0gYXI5MTcwX2NvbmZfdHgsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZCwKQEAgLTIwNDQsMTQgKzI1NDEsMTYgQEAKIAltdXRleF9pbml0KCZhci0+bXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZhci0+Y21kbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFyLT50eF9zdGF0c19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYXItPnR4X2FtcGR1X2xpc3RfbG9jayk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPnR4X3N0YXR1c19hbXBkdSk7CiAJZm9yIChpID0gMDsgaSA8IF9fQVI5MTcwX05VTV9UWFE7IGkrKykgewogCQlza2JfcXVldWVfaGVhZF9pbml0KCZhci0+dHhfc3RhdHVzW2ldKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPnR4X3BlbmRpbmdbaV0pOwogCX0KIAlhcjkxNzBfcnhfcmVzZXRfcnhfbXBkdShhcik7Ci0JSU5JVF9XT1JLKCZhci0+ZmlsdGVyX2NvbmZpZ193b3JrLCBhcjkxNzBfc2V0X2ZpbHRlcnMpOwogCUlOSVRfV09SSygmYXItPmJlYWNvbl93b3JrLCBhcjkxNzBfbmV3X2JlYWNvbik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmFyLT50eF9qYW5pdG9yLCBhcjkxNzBfdHhfamFuaXRvcik7CisJSU5JVF9MSVNUX0hFQUQoJmFyLT50eF9hbXBkdV9saXN0KTsKIAogCS8qIGFsbCBodyBzdXBwb3J0cyAyLjQgR0h6LCBzbyBzZXQgY2hhbm5lbCB0byAxIGJ5IGRlZmF1bHQgKi8KIAlhci0+Y2hhbm5lbCA9ICZhcjkxNzBfMmdoel9jaGFudGFibGVbMF07CkBAIC0yMDY1LDYgKzI1NjQsMTMgQEAKIAkJCSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCQkgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIAorCWlmIChtb2RwYXJhbV9odCkgeworCQlhci0+aHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKwl9IGVsc2UgeworCQlhcjkxNzBfYmFuZF8yR0h6Lmh0X2NhcC5odF9zdXBwb3J0ZWQgPSBmYWxzZTsKKwkJYXI5MTcwX2JhbmRfNUdIei5odF9jYXAuaHRfc3VwcG9ydGVkID0gZmFsc2U7CisJfQorCiAJYXItPmh3LT5xdWV1ZXMgPSBfX0FSOTE3MF9OVU1fVFhROwogCWFyLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSA4OwogCWFyLT5ody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvKTsKQEAgLTIwODYsMTAgKzI1OTIsMTEgQEAKIHsKICNkZWZpbmUgUlcJOAkvKiBudW1iZXIgb2Ygd29yZHMgdG8gcmVhZCBhdCBvbmNlICovCiAjZGVmaW5lIFJCCShzaXplb2YodTMyKSAqIFJXKQotCURFQ0xBUkVfTUFDX0JVRihtYnVmKTsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSAmYXItPmNvbW1vbi5yZWd1bGF0b3J5OwogCXU4ICplZXByb20gPSAodm9pZCAqKSZhci0+ZWVwcm9tOwogCXU4ICphZGRyID0gYXItPmVlcHJvbS5tYWNfYWRkcmVzczsKIAlfX2xlMzIgb2Zmc2V0c1tSV107CisJdW5zaWduZWQgaW50IHJ4X3N0cmVhbXMsIHR4X3N0cmVhbXMsIHR4X3BhcmFtcyA9IDA7CiAJaW50IGksIGosIGVyciwgYmFuZHMgPSAwOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihhci0+ZWVwcm9tKSAmIDMpOwpAQCAtMjEyNiw2ICsyNjMzLDIwIEBACiAJCWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmFyOTE3MF9iYW5kXzVHSHo7CiAJCWJhbmRzKys7CiAJfQorCisJcnhfc3RyZWFtcyA9IGh3ZWlnaHQ4KGFyLT5lZXByb20ucnhfbWFzayk7CisJdHhfc3RyZWFtcyA9IGh3ZWlnaHQ4KGFyLT5lZXByb20udHhfbWFzayk7CisKKwlpZiAocnhfc3RyZWFtcyAhPSB0eF9zdHJlYW1zKQorCQl0eF9wYXJhbXMgPSBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkY7CisKKwlpZiAodHhfc3RyZWFtcyA+PSAxICYmIHR4X3N0cmVhbXMgPD0gSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNUykKKwkJdHhfcGFyYW1zID0gKHR4X3N0cmVhbXMgLSAxKSA8PAorCQkJICAgIElFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQ7CisKKwlhcjkxNzBfYmFuZF8yR0h6Lmh0X2NhcC5tY3MudHhfcGFyYW1zIHw9IHR4X3BhcmFtczsKKwlhcjkxNzBfYmFuZF81R0h6Lmh0X2NhcC5tY3MudHhfcGFyYW1zIHw9IHR4X3BhcmFtczsKKwogCS8qCiAJICogSSBtZWFzdXJlZCB0aGlzLCBhIGJhbmRzd2l0Y2ggdGFrZXMgcm91Z2hseQogCSAqIDEzNSBtcyBhbmQgYSBmcmVxdWVuY3kgc3dpdGNoIGFib3V0IDgwLgpAQCAtMjEzOCw4ICsyNjU5LDggQEAKIAllbHNlCiAJCWFyLT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDgwICogMTAwMDsKIAotCWFyLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSBsZTE2X3RvX2NwdShhci0+ZWVwcm9tLnJlZ19kb21haW5bMF0pOwotCWFyLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmRfZXh0ID0gbGUxNl90b19jcHUoYXItPmVlcHJvbS5yZWdfZG9tYWluWzFdKTsKKwlyZWd1bGF0b3J5LT5jdXJyZW50X3JkID0gbGUxNl90b19jcHUoYXItPmVlcHJvbS5yZWdfZG9tYWluWzBdKTsKKwlyZWd1bGF0b3J5LT5jdXJyZW50X3JkX2V4dCA9IGxlMTZfdG9fY3B1KGFyLT5lZXByb20ucmVnX2RvbWFpblsxXSk7CiAKIAkvKiBzZWNvbmQgcGFydCBvZiB3aXBoeSBpbml0ICovCiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoYXItPmh3LCBhZGRyKTsKQEAgLTIxNTMsMTEgKzI2NzQsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CiAJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKIAotCXJldHVybiBhdGhfcmVnX25vdGlmaWVyX2FwcGx5KHdpcGh5LCByZXF1ZXN0LCAmYXItPnJlZ3VsYXRvcnkpOworCXJldHVybiBhdGhfcmVnX25vdGlmaWVyX2FwcGx5KHdpcGh5LCByZXF1ZXN0LCAmYXItPmNvbW1vbi5yZWd1bGF0b3J5KTsKIH0KIAogaW50IGFyOTE3MF9yZWdpc3RlcihzdHJ1Y3QgYXI5MTcwICphciwgc3RydWN0IGRldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSAmYXItPmNvbW1vbi5yZWd1bGF0b3J5OwogCWludCBlcnI7CiAKIAkvKiB0cnkgdG8gcmVhZCBFRVBST00sIGluaXQgTUFDIGFkZHIgKi8KQEAgLTIxNjUsNyArMjY4Nyw3IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCi0JZXJyID0gYXRoX3JlZ2RfaW5pdCgmYXItPnJlZ3VsYXRvcnksIGFyLT5ody0+d2lwaHksCisJZXJyID0gYXRoX3JlZ2RfaW5pdChyZWd1bGF0b3J5LCBhci0+aHctPndpcGh5LAogCQkJICAgIGFyOTE3MF9yZWdfbm90aWZpZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKQEAgLTIxNzQsOCArMjY5Niw4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCi0JaWYgKCFhdGhfaXNfd29ybGRfcmVnZCgmYXItPnJlZ3VsYXRvcnkpKQotCQlyZWd1bGF0b3J5X2hpbnQoYXItPmh3LT53aXBoeSwgYXItPnJlZ3VsYXRvcnkuYWxwaGEyKTsKKwlpZiAoIWF0aF9pc193b3JsZF9yZWdkKHJlZ3VsYXRvcnkpKQorCQlyZWd1bGF0b3J5X2hpbnQoYXItPmh3LT53aXBoeSwgcmVndWxhdG9yeS0+YWxwaGEyKTsKIAogCWVyciA9IGFyOTE3MF9pbml0X2xlZHMoYXIpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9waHkuYwppbmRleCBkZjg2ZjcwLi5iM2U1Y2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvcGh5LmMKQEAgLTM5Niw2ICszOTYsMTM2IEBACiAJeyAweDFjOTM4NCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgfQogfTsKIAorLyoKKyAqIGxvb2sgdXAgYSBjZXJ0YWluIHJlZ2lzdGVyIGluIGFyNTQxNl9waHlfaW5pdFtdIGFuZCByZXR1cm4gdGhlIGluaXQuIHZhbHVlCisgKiBmb3IgdGhlIGJhbmQgYW5kIGJhbmR3aWR0aCBnaXZlbi4gUmV0dXJuIDAgaWYgcmVnaXN0ZXIgYWRkcmVzcyBub3QgZm91bmQuCisgKi8KK3N0YXRpYyB1MzIgYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKHUzMiByZWcsIGJvb2wgaXNfMmdoeiwgYm9vbCBpc180MG1oeikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcjU0MTZfcGh5X2luaXQpOyBpKyspIHsKKwkJaWYgKGFyNTQxNl9waHlfaW5pdFtpXS5yZWcgIT0gcmVnKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzXzJnaHopIHsKKwkJCWlmIChpc180MG1oeikKKwkJCQlyZXR1cm4gYXI1NDE2X3BoeV9pbml0W2ldLl8yZ2h6XzQwOworCQkJZWxzZQorCQkJCXJldHVybiBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfMjA7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNfNDBtaHopCisJCQkJcmV0dXJuIGFyNTQxNl9waHlfaW5pdFtpXS5fNWdoel80MDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzIwOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKgorICogaW5pdGlhbGl6ZSBzb21lIHBoeSByZWdzIGZyb20gZWVwcm9tIHZhbHVlcyBpbiBtb2RhbF9oZWFkZXJbXQorICogYWNjLiB0byBiYW5kIGFuZCBiYW5kd2l0aAorICovCitzdGF0aWMgaW50IGFyOTE3MF9pbml0X3BoeV9mcm9tX2VlcHJvbShzdHJ1Y3QgYXI5MTcwICphciwKKwkJCQlib29sIGlzXzJnaHosIGJvb2wgaXNfNDBtaHopCit7CisJc3RhdGljIGNvbnN0IHU4IHhwZDJwZFsxNl0gPSB7CisJCTB4MiwgMHgyLCAweDIsIDB4MSwgMHgyLCAweDIsIDB4NiwgMHgyLAorCQkweDIsIDB4MywgMHg3LCAweDIsIDB4QiwgMHgyLCAweDIsIDB4MgorCX07CisJdTMyIGRlZnZhbCwgbmV3dmFsOworCS8qIHBvaW50ZXIgdG8gdGhlIG1vZGFsX2hlYWRlciBhY2MuIHRvIGJhbmQgKi8KKwlzdHJ1Y3QgYXI5MTcwX2VlcHJvbV9tb2RhbCAqbSA9ICZhci0+ZWVwcm9tLm1vZGFsX2hlYWRlcltpc18yZ2h6XTsKKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwkvKiBhbnQgY29tbW9uIGNvbnRyb2wgKGluZGV4IDApICovCisJbmV3dmFsID0gbGUzMl90b19jcHUobS0+YW50Q3RybENvbW1vbik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM1OTY0LCBuZXd2YWwpOworCisJLyogYW50IGNvbnRyb2wgY2hhaW4gMCAoaW5kZXggMSkgKi8KKwluZXd2YWwgPSBsZTMyX3RvX2NwdShtLT5hbnRDdHJsQ2hhaW5bMF0pOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNTk2MCwgbmV3dmFsKTsKKworCS8qIGFudCBjb250cm9sIGNoYWluIDIgKGluZGV4IDIpICovCisJbmV3dmFsID0gbGUzMl90b19jcHUobS0+YW50Q3RybENoYWluWzFdKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzc5NjAsIG5ld3ZhbCk7CisKKwkvKiBTd1NldHRsZSAoaW5kZXggMykgKi8KKwlpZiAoIWlzXzQwbWh6KSB7CisJCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNTg0NCwKKwkJCQkJCQlpc18yZ2h6LCBpc180MG1oeik7CisJCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHgzZjgwKSB8CisJCQkoKG0tPnN3aXRjaFNldHRsaW5nICYgMHg3ZikgPDwgNyk7CisJCWFyOTE3MF9yZWd3cml0ZSgweDFjNTg0NCwgbmV3dmFsKTsKKwl9CisKKwkvKiBhZGNEZXNpcmVkLCBwZGFEZXNpcmVkIChpbmRleCA0KSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNTg1MCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHhmZmZmKSB8ICgodTgpbS0+cGdhRGVzaXJlZFNpemUgPDwgOCkgfAorCQkoKHU4KW0tPmFkY0Rlc2lyZWRTaXplKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4NTAsIG5ld3ZhbCk7CisKKwkvKiBUeEVuZFRvWHBhT2ZmLCBUeEZyYW1lVG9YcGFPbiAoaW5kZXggNSkgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU4MzQsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAobS0+dHhFbmRUb1hwYU9mZiA8PCAyNCkgfCAobS0+dHhFbmRUb1hwYU9mZiA8PCAxNikgfAorCQkobS0+dHhGcmFtZVRvWHBhT24gPDwgOCkgfCBtLT50eEZyYW1lVG9YcGFPbjsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4MzQsIG5ld3ZhbCk7CisKKwkvKiBUeEVuZFRvUnhPbiAoaW5kZXggNikgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU4MjgsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAoZGVmdmFsICYgfjB4ZmYwMDAwKSB8IChtLT50eEVuZFRvUnhPbiA8PCAxNik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM1ODI4LCBuZXd2YWwpOworCisJLyogdGhyZXNoNjIgKGluZGV4IDcpICovCisJZGVmdmFsID0gYXI5MTcwX2dldF9kZWZhdWx0X3BoeV9yZWdfdmFsKDB4MWM4ODY0LCBpc18yZ2h6LCBpc180MG1oeik7CisJbmV3dmFsID0gKGRlZnZhbCAmIH4weDdmMDAwKSB8IChtLT50aHJlc2g2MiA8PCAxMik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM4ODY0LCBuZXd2YWwpOworCisJLyogdHgvcnggYXR0ZW51YXRpb24gY2hhaW4gMCAoaW5kZXggOCkgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU4NDgsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAoZGVmdmFsICYgfjB4M2YwMDApIHwgKChtLT50eFJ4QXR0ZW5DaFswXSAmIDB4M2YpIDw8IDEyKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4NDgsIG5ld3ZhbCk7CisKKwkvKiB0eC9yeCBhdHRlbnVhdGlvbiBjaGFpbiAyIChpbmRleCA5KSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNzg0OCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHgzZjAwMCkgfCAoKG0tPnR4UnhBdHRlbkNoWzFdICYgMHgzZikgPDwgMTIpOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNzg0OCwgbmV3dmFsKTsKKworCS8qIHR4L3J4IG1hcmdpbiBjaGFpbiAwIChpbmRleCAxMCkgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzYyMGMsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAoZGVmdmFsICYgfjB4ZmMwMDAwKSB8ICgobS0+cnhUeE1hcmdpbkNoWzBdICYgMHgzZikgPDwgMTgpOworCS8qIGJzdyBtYXJnaW4gY2hhaW4gMCBmb3IgNUdIeiBvbmx5ICovCisJaWYgKCFpc18yZ2h6KQorCQluZXd2YWwgPSAobmV3dmFsICYgfjB4M2MwMCkgfCAoKG0tPmJzd01hcmdpblswXSAmIDB4ZikgPDwgMTApOworCWFyOTE3MF9yZWd3cml0ZSgweDFjNjIwYywgbmV3dmFsKTsKKworCS8qIHR4L3J4IG1hcmdpbiBjaGFpbiAyIChpbmRleCAxMSkgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzgyMGMsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAoZGVmdmFsICYgfjB4ZmMwMDAwKSB8ICgobS0+cnhUeE1hcmdpbkNoWzFdICYgMHgzZikgPDwgMTgpOworCWFyOTE3MF9yZWd3cml0ZSgweDFjODIwYywgbmV3dmFsKTsKKworCS8qIGlxQ2FsbCwgaXFDYWxscSBjaGFpbiAwIChpbmRleCAxMikgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzU5MjAsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAoZGVmdmFsICYgfjB4N2ZmKSB8ICgoKHU4KW0tPmlxQ2FsSUNoWzBdICYgMHgzZikgPDwgNSkgfAorCQkoKHU4KW0tPmlxQ2FsUUNoWzBdICYgMHgxZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM1OTIwLCBuZXd2YWwpOworCisJLyogaXFDYWxsLCBpcUNhbGxxIGNoYWluIDIgKGluZGV4IDEzKSAqLworCWRlZnZhbCA9IGFyOTE3MF9nZXRfZGVmYXVsdF9waHlfcmVnX3ZhbCgweDFjNzkyMCwgaXNfMmdoeiwgaXNfNDBtaHopOworCW5ld3ZhbCA9IChkZWZ2YWwgJiB+MHg3ZmYpIHwgKCgodTgpbS0+aXFDYWxJQ2hbMV0gJiAweDNmKSA8PCA1KSB8CisJCSgodTgpbS0+aXFDYWxRQ2hbMV0gJiAweDFmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzc5MjAsIG5ld3ZhbCk7CisKKwkvKiB4cGQgZ2FpbiBtYXNrIChpbmRleCAxNCkgKi8KKwlkZWZ2YWwgPSBhcjkxNzBfZ2V0X2RlZmF1bHRfcGh5X3JlZ192YWwoMHgxYzYyNTgsIGlzXzJnaHosIGlzXzQwbWh6KTsKKwluZXd2YWwgPSAoZGVmdmFsICYgfjB4ZjAwMDApIHwgKHhwZDJwZFttLT54cGRHYWluICYgMHhmXSA8PCAxNik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWM2MjU4LCBuZXd2YWwpOworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKIGludCBhcjkxNzBfaW5pdF9waHkoc3RydWN0IGFyOTE3MCAqYXIsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlpbnQgaSwgZXJyOwpAQCAtNDI2LDcgKzU1Niw5IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qIFhYWDogdXNlIEVFUFJPTSBkYXRhIGhlcmUhICovCisJZXJyID0gYXI5MTcwX2luaXRfcGh5X2Zyb21fZWVwcm9tKGFyLCBpc18yZ2h6LCBpc180MG1oeik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IGFyOTE3MF9pbml0X3Bvd2VyX2NhbChhcik7CiAJaWYgKGVycikKQEAgLTk4Nyw2ICsxMTE5LDI4MiBAQAogI3VuZGVmIFNISUZUCiB9CiAKK3N0YXRpYyB1OCBhcjkxNzBfaW50ZXJwb2xhdGVfdmFsKHU4IHgsIHU4ICp4X2FycmF5LCB1OCAqeV9hcnJheSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWlmICh4IDw9IHhfYXJyYXlbaSArIDFdKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gYXI5MTcwX2ludGVycG9sYXRlX3U4KHgsCisJCQkJICAgICB4X2FycmF5W2ldLAorCQkJCSAgICAgeV9hcnJheVtpXSwKKwkJCQkgICAgIHhfYXJyYXlbaSArIDFdLAorCQkJCSAgICAgeV9hcnJheVtpICsgMV0pOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9zZXRfZnJlcV9jYWxfZGF0YShzdHJ1Y3QgYXI5MTcwICphciwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCXU4ICpjYWxfZnJlcV9waWVyOworCXU4IHZwZHNbMl1bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKKwl1OCBwd3JzWzJdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107CisJaW50IGNoYWluLCBpZHgsIGk7CisJdTggZjsKKworCXN3aXRjaCAoY2hhbm5lbC0+YmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJZiA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxIC0gMjMwMDsKKwkJY2FsX2ZyZXFfcGllciA9IGFyLT5lZXByb20uY2FsX2ZyZXFfcGllcl8yRzsKKwkJaSA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTIC0gMTsKKwkJYnJlYWs7CisKKwljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCWYgPSAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgLSA0ODAwKSAvIDU7CisJCWNhbF9mcmVxX3BpZXIgPSBhci0+ZWVwcm9tLmNhbF9mcmVxX3BpZXJfNUc7CisJCWkgPSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUyAtIDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWZvciAoOyBpID49IDA7IGktLSkgeworCQlpZiAoY2FsX2ZyZXFfcGllcltpXSAhPSAweGZmKQorCQkJYnJlYWs7CisJfQorCWlmIChpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZHggPSBhcjkxNzBfZmluZF9mcmVxX2lkeChpLCBjYWxfZnJlcV9waWVyLCBmKTsKKworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlmb3IgKGNoYWluID0gMDsgY2hhaW4gPCBBUjU0MTZfTUFYX0NIQUlOUzsgY2hhaW4rKykgeworCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X1BEX0dBSU5fSUNFUFRTOyBpKyspIHsKKwkJCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fZGF0YV9wZXJfZnJlcSAqY2FsX3BpZXJfZGF0YTsKKwkJCWludCBqOworCisJCQlzd2l0Y2ggKGNoYW5uZWwtPmJhbmQpIHsKKwkJCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJCQljYWxfcGllcl9kYXRhID0gJmFyLT5lZXByb20uCisJCQkJCWNhbF9waWVyX2RhdGFfMkdbY2hhaW5dW2lkeF07CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJCQljYWxfcGllcl9kYXRhID0gJmFyLT5lZXByb20uCisJCQkJCWNhbF9waWVyX2RhdGFfNUdbY2hhaW5dW2lkeF07CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKKwkJCQl2cGRzW2pdW2ldID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KGYsCisJCQkJCWNhbF9mcmVxX3BpZXJbaWR4XSwKKwkJCQkJY2FsX3BpZXJfZGF0YS0+dnBkX3BkZ1tqXVtpXSwKKwkJCQkJY2FsX2ZyZXFfcGllcltpZHggKyAxXSwKKwkJCQkJY2FsX3BpZXJfZGF0YVsxXS52cGRfcGRnW2pdW2ldKTsKKworCQkJCXB3cnNbal1baV0gPSBhcjkxNzBfaW50ZXJwb2xhdGVfdTgoZiwKKwkJCQkJY2FsX2ZyZXFfcGllcltpZHhdLAorCQkJCQljYWxfcGllcl9kYXRhLT5wd3JfcGRnW2pdW2ldLAorCQkJCQljYWxfZnJlcV9waWVyW2lkeCArIDFdLAorCQkJCQljYWxfcGllcl9kYXRhWzFdLnB3cl9wZGdbal1baV0pIC8gMjsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCA3NjsgaSsrKSB7CisJCQl1MzIgcGh5X2RhdGE7CisJCQl1OCB0bXA7CisKKwkJCWlmIChpIDwgMjUpIHsKKwkJCQl0bXAgPSBhcjkxNzBfaW50ZXJwb2xhdGVfdmFsKGksICZwd3JzWzBdWzBdLAorCQkJCQkJCSAgICAgJnZwZHNbMF1bMF0pOworCQkJfSBlbHNlIHsKKwkJCQl0bXAgPSBhcjkxNzBfaW50ZXJwb2xhdGVfdmFsKGkgLSAxMiwKKwkJCQkJCQkgICAgICZwd3JzWzFdWzBdLAorCQkJCQkJCSAgICAgJnZwZHNbMV1bMF0pOworCQkJfQorCisJCQlwaHlfZGF0YSB8PSB0bXAgPDwgKChpICYgMykgPDwgMyk7CisJCQlpZiAoKGkgJiAzKSA9PSAzKSB7CisJCQkJYXI5MTcwX3JlZ3dyaXRlKDB4MWM2MjgwICsgY2hhaW4gKiAweDEwMDAgKworCQkJCQkJKGkgJiB+MyksIHBoeV9kYXRhKTsKKwkJCQlwaHlfZGF0YSA9IDA7CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAxOTsgaSA8IDMyOyBpKyspCisJCQlhcjkxNzBfcmVnd3JpdGUoMHgxYzYyODAgKyBjaGFpbiAqIDB4MTAwMCArIChpIDw8IDIpLAorCQkJCQkweDApOworCX0KKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKwlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworfQorCitzdGF0aWMgdTggYXI5MTcwX2dldF9tYXhfZWRnZV9wb3dlcihzdHJ1Y3QgYXI5MTcwICphciwKKwkJCQkgICAgc3RydWN0IGFyOTE3MF9jYWxjdGxfZWRnZXMgZWRnZXNbXSwKKwkJCQkgICAgdTMyIGZyZXEpCit7CisvKiBUT0RPOiBtb3ZlIHNvbWV3aGVyZSBlbHNlICovCisjZGVmaW5lIEFSNTQxNl9NQVhfUkFURV9QT1dFUiAgICAgICAgNjMKKworCWludCBpOworCXU4IHJjID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCXU4IGY7CisJaWYgKGZyZXEgPCAzMDAwKQorCQlmID0gZnJlcSAtIDIzMDA7CisJZWxzZQorCQlmID0gKGZyZXEgLSA0ODAwKSAvIDU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X05VTV9CQU5EX0VER0VTOyBpKyspIHsKKwkJaWYgKGVkZ2VzW2ldLmNoYW5uZWwgPT0gMHhmZikKKwkJCWJyZWFrOworCQlpZiAoZiA9PSBlZGdlc1tpXS5jaGFubmVsKSB7CisJCQkvKiBleGFjdCBmcmVxIG1hdGNoICovCisJCQlyYyA9IGVkZ2VzW2ldLnBvd2VyX2ZsYWdzICYgfkFSOTE3MF9DQUxDVExfRURHRV9GTEFHUzsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpID4gMCAmJiBmIDwgZWRnZXNbaV0uY2hhbm5lbCkgeworCQkJaWYgKGYgPiBlZGdlc1tpLTFdLmNoYW5uZWwgJiYKKwkJCSAgICBlZGdlc1tpLTFdLnBvd2VyX2ZsYWdzICYgQVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTKSB7CisJCQkJLyogbG93ZXIgY2hhbm5lbCBoYXMgdGhlIGluYmFuZCBmbGFnIHNldCAqLworCQkJCXJjID0gZWRnZXNbaS0xXS5wb3dlcl9mbGFncyAmCisJCQkJCX5BUjkxNzBfQ0FMQ1RMX0VER0VfRkxBR1M7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IEFSNTQxNl9OVU1fQkFORF9FREdFUykgeworCQlpZiAoZiA+IGVkZ2VzW2ktMV0uY2hhbm5lbCAmJgorCQkgICAgZWRnZXNbaS0xXS5wb3dlcl9mbGFncyAmIEFSOTE3MF9DQUxDVExfRURHRV9GTEFHUykgeworCQkJLyogbG93ZXIgY2hhbm5lbCBoYXMgdGhlIGluYmFuZCBmbGFnIHNldCAqLworCQkJcmMgPSBlZGdlc1tpLTFdLnBvd2VyX2ZsYWdzICYKKwkJCQl+QVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTOworCQl9CisJfQorCXJldHVybiByYzsKK30KKworLyogY2FsY3VsYXRlIHRoZSBjb25mb3JtYW5jZSB0ZXN0IGxpbWl0cyBhbmQgYXBwbHkgdGhlbSB0byBhci0+cG93ZXIqCisgKiAoZGVyaXZlZCBmcm9tIG90dXMgaGFsL2hwbWFpbi5jLCBsaW5lIDM3MDYgZmYuKQorICovCitzdGF0aWMgdm9pZCBhcjkxNzBfY2FsY19jdGwoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiBmcmVxLCBlbnVtIGFyOTE3MF9idyBidykKK3sKKwl1OCBjdGxfZ3JwOyAvKiBDVEwgZ3JvdXAgKi8KKwl1OCBjdGxfaWR4OyAvKiBDVEwgaW5kZXggKi8KKwlpbnQgaSwgajsKKwlzdHJ1Y3QgY3RsX21vZGVzIHsKKwkJdTggY3RsX21vZGU7CisJCXU4IG1heF9wb3dlcjsKKwkJdTggKnB3cl9jYWxfZGF0YTsKKwkJaW50IHB3cl9jYWxfbGVuOworCX0gKm1vZGVzOworCisJLyogb3JkZXIgaXMgcmVsZXZhbnQgaW4gdGhlIG1vZGVfbGlzdF8qOiB3ZSBmYWxsIGJhY2sgdG8gdGhlCisJICogbG93ZXIgaW5kaWNlcyBpZiBhbnkgbW9kZSBpcyBtaXNzZWQgaW4gdGhlIEVFUFJPTS4KKwkgKi8KKwlzdHJ1Y3QgY3RsX21vZGVzIG1vZGVfbGlzdF8yZ2h6W10gPSB7CisJCXsgQ1RMXzExQiwgMCwgYXItPnBvd2VyXzJHX2NjaywgNCB9LAorCQl7IENUTF8xMUcsIDAsIGFyLT5wb3dlcl8yR19vZmRtLCA0IH0sCisJCXsgQ1RMXzJHSFQyMCwgMCwgYXItPnBvd2VyXzJHX2h0MjAsIDggfSwKKwkJeyBDVExfMkdIVDQwLCAwLCBhci0+cG93ZXJfMkdfaHQ0MCwgOCB9LAorCX07CisJc3RydWN0IGN0bF9tb2RlcyBtb2RlX2xpc3RfNWdoeltdID0geworCQl7IENUTF8xMUEsIDAsIGFyLT5wb3dlcl81R19sZWcsIDQgfSwKKwkJeyBDVExfNUdIVDIwLCAwLCBhci0+cG93ZXJfNUdfaHQyMCwgOCB9LAorCQl7IENUTF81R0hUNDAsIDAsIGFyLT5wb3dlcl81R19odDQwLCA4IH0sCisJfTsKKwlpbnQgbnJfbW9kZXM7CisKKyNkZWZpbmUgRURHRVMoYywgbikgKGFyLT5lZXByb20uY3RsX2RhdGFbY10uY29udHJvbF9lZGdlc1tuXSkKKworCS8qIFRPRE86IGludmVzdGlnYXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIE9UVVMnCisJICogaHByZWcuYzo6emZIcEdldFJlZ3VsYXRvcnlEb21haW4oKSBhbmQKKwkgKiBhdGgvcmVnZC5jOjphdGhfcmVnZF9nZXRfYmFuZF9jdGwoKSAtCisJICogZS5nLiBmb3IgRkNDM19XT1JMRCB0aGUgT1RVUyBwcm9jZWR1cmUKKwkgKiBhbHdheXMgcmV0dXJucyBDVExfRkNDLCB3aGlsZSB0aGUgb25lIGluIGF0aC8gZGVsaXZlcnMKKwkgKiBDVExfRVRTSSBmb3IgMkdIeiBhbmQgQ1RMX0ZDQyBmb3IgNUdIei4KKwkgKi8KKwljdGxfZ3JwID0gYXRoX3JlZ2RfZ2V0X2JhbmRfY3RsKCZhci0+Y29tbW9uLnJlZ3VsYXRvcnksCisJCQkJCWFyLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kKTsKKworCS8qIGN0bCBncm91cCBub3QgZm91bmQgLSBlaXRoZXIgaW52YWxpZCBiYW5kIChOT19DVEwpIG9yIHd3IHJvYW1pbmcgKi8KKwlpZiAoY3RsX2dycCA9PSBOT19DVEwgfHwgY3RsX2dycCA9PSBTRF9OT19DVEwpCisJCWN0bF9ncnAgPSBDVExfRkNDOworCisJaWYgKGN0bF9ncnAgIT0gQ1RMX0ZDQykKKwkJLyogc2tpcCBDVEwgYW5kIGhlYXZ5IGNsaXAgZm9yIENUTF9NS0sgYW5kIENUTF9FVFNJICovCisJCXJldHVybjsKKworCWlmIChhci0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCW1vZGVzID0gbW9kZV9saXN0XzJnaHo7CisJCW5yX21vZGVzID0gQVJSQVlfU0laRShtb2RlX2xpc3RfMmdoeik7CisJfSBlbHNlIHsKKwkJbW9kZXMgPSBtb2RlX2xpc3RfNWdoejsKKwkJbnJfbW9kZXMgPSBBUlJBWV9TSVpFKG1vZGVfbGlzdF81Z2h6KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfbW9kZXM7IGkrKykgeworCQl1OCBjID0gY3RsX2dycCB8IG1vZGVzW2ldLmN0bF9tb2RlOworCQlmb3IgKGN0bF9pZHggPSAwOyBjdGxfaWR4IDwgQVI1NDE2X05VTV9DVExTOyBjdGxfaWR4KyspCisJCQlpZiAoYyA9PSBhci0+ZWVwcm9tLmN0bF9pbmRleFtjdGxfaWR4XSkKKwkJCQlicmVhazsKKwkJaWYgKGN0bF9pZHggPCBBUjU0MTZfTlVNX0NUTFMpIHsKKwkJCWludCBmX29mZiA9IDA7CisKKwkJCS8qIGFkanVzdCBmcmVxIGZvciA0ME1IeiAqLworCQkJaWYgKG1vZGVzW2ldLmN0bF9tb2RlID09IENUTF8yR0hUNDAgfHwKKwkJCSAgICBtb2Rlc1tpXS5jdGxfbW9kZSA9PSBDVExfNUdIVDQwKSB7CisJCQkJaWYgKGJ3ID09IEFSOTE3MF9CV180MF9CRUxPVykKKwkJCQkJZl9vZmYgPSAtMTA7CisJCQkJZWxzZQorCQkJCQlmX29mZiA9IDEwOworCQkJfQorCisJCQltb2Rlc1tpXS5tYXhfcG93ZXIgPQorCQkJCWFyOTE3MF9nZXRfbWF4X2VkZ2VfcG93ZXIoYXIsIEVER0VTKGN0bF9pZHgsIDEpLAorCQkJCQkJCSAgZnJlcStmX29mZik7CisKKwkJCS8qIFRPRE86IGNoZWNrIGlmIHRoZSByZWd1bGF0b3J5IG1heC4gcG93ZXIgaXMKKwkJCSAqICBjb250cm9sbGVkIGJ5IGNmZzgwMjExIGZvciBERlMKKwkJCSAqIChocG1haW4gYXBwbGllcyBpdCB0byBtYXhfcG93ZXIgaXRzZWxmIGZvciBERlMgZnJlcSkKKwkJCSAqLworCisJCX0gZWxzZSB7CisJCQkvKiBXb3JrYXJvdW5kIGluIG90dXMgZHJpdmVyLCBocG1haW4uYywgbGluZSAzOTA2OgorCQkJICogaWYgbm8gZGF0YSBmb3IgNUdIVDIwIGFyZSBmb3VuZCwgdGFrZSB0aGUKKwkJCSAqIGxlZ2FjeSA1RyB2YWx1ZS4KKwkJCSAqIFdlIGV4dGVuZCB0aGlzIGhlcmUgdG8gZmFsbGJhY2sgZnJvbSBhbnkgb3RoZXIgKkhUIG9yCisJCQkgKiAxMUcsIHRvby4KKwkJCSAqLworCQkJaW50IGsgPSBpOworCisJCQltb2Rlc1tpXS5tYXhfcG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJCQl3aGlsZSAoay0tID4gMCkgeworCQkJCWlmIChtb2Rlc1trXS5tYXhfcG93ZXIgIT0KKwkJCQkgICAgQVI1NDE2X01BWF9SQVRFX1BPV0VSKSB7CisJCQkJCW1vZGVzW2ldLm1heF9wb3dlciA9IG1vZGVzW2tdLm1heF9wb3dlcjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogYXBwbHkgbWF4IHBvd2VyIHRvIHB3cl9jYWxfZGF0YSAoYXItPnBvd2VyXyopICovCisJCWZvciAoaiA9IDA7IGogPCBtb2Rlc1tpXS5wd3JfY2FsX2xlbjsgaisrKSB7CisJCQltb2Rlc1tpXS5wd3JfY2FsX2RhdGFbal0gPSBtaW4obW9kZXNbaV0ucHdyX2NhbF9kYXRhW2pdLAorCQkJCQkJICAgICAgIG1vZGVzW2ldLm1heF9wb3dlcik7CisJCX0KKwl9CisjdW5kZWYgRURHRVMKK30KKwogc3RhdGljIGludCBhcjkxNzBfc2V0X3Bvd2VyX2NhbChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGZyZXEsIGVudW0gYXI5MTcwX2J3IGJ3KQogewogCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSAqY3RwbDsKQEAgLTEwODksNiArMTQ5NywxMiBAQAogCQkJCQljdHBoW2lkeCArIDFdLnBvd2VyW25dKTsKIAl9CiAKKworCS8qIGNhbGMuIGNvbmZvcm1hbmNlIHRlc3QgbGltaXRzIGFuZCBhcHBseSB0byBhci0+cG93ZXIqW10gKi8KKwlhcjkxNzBfY2FsY19jdGwoYXIsIGZyZXEsIGJ3KTsKKworCS8qIFRPRE86IChoZWF2eSBjbGlwKSByZWd1bGF0b3J5IGRvbWFpbiBwb3dlciBsZXZlbCBmaW5lLXR1bmluZy4gKi8KKwogCS8qIHNldCBBQ0svQ1RTIFRYIHBvd2VyICovCiAJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKIApAQCAtMTIwNyw2ICsxNjIxLDEwIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWVyciA9IGFyOTE3MF9zZXRfZnJlcV9jYWxfZGF0YShhciwgY2hhbm5lbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWVyciA9IGFyOTE3MF9zZXRfcG93ZXJfY2FsKGFyLCBjaGFubmVsLT5jZW50ZXJfZnJlcSwgYncpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYwppbmRleCAwMDdlYjg1Li5lMDEzOGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMKQEAgLTc4Myw3ICs3ODMsNyBAQAogCWFydS0+cmVxX29uZV9zdGFnZV9mdyA9IGFyOTE3MF9yZXF1aXJlc19vbmVfc3RhZ2UoaWQpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBhcnUpOwotCVNFVF9JRUVFODAyMTFfREVWKGFyLT5odywgJnVkZXYtPmRldik7CisJU0VUX0lFRUU4MDIxMV9ERVYoYXItPmh3LCAmaW50Zi0+ZGV2KTsKIAogCWluaXRfdXNiX2FuY2hvcigmYXJ1LT5yeF9zdWJtaXR0ZWQpOwogCWluaXRfdXNiX2FuY2hvcigmYXJ1LT50eF9wZW5kaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjNlOTBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEFUSF9ICisjZGVmaW5lIEFUSF9ICisKKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nIHsKKwl1MTYgcmVnRG1uRW51bTsKKwl1MTYgcmVnXzVnaHpfY3RsOworCXUxNiByZWdfMmdoel9jdGw7Cit9OworCitzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgeworCWNoYXIgYWxwaGEyWzJdOworCXUxNiBjb3VudHJ5X2NvZGU7CisJdTE2IG1heF9wb3dlcl9sZXZlbDsKKwl1MzIgdHBfc2NhbGU7CisJdTE2IGN1cnJlbnRfcmQ7CisJdTE2IGN1cnJlbnRfcmRfZXh0OworCWludDE2X3QgcG93ZXJfbGltaXQ7CisJc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nICpyZWdwYWlyOworfTsKKworc3RydWN0IGF0aF9jb21tb24geworCXUxNiBjYWNoZWxzejsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgcmVndWxhdG9yeTsKK307CisKK3N0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKKwkJCQl1MzIgbGVuLAorCQkJCWdmcF90IGdmcF9tYXNrKTsKKworI2VuZGlmIC8qIEFUSF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnCmluZGV4IGRhZjBjODMuLjA2ZDAwNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIEFUSDVLCiAJdHJpc3RhdGUgIkF0aGVyb3MgNXh4eCB3aXJlbGVzcyBjYXJkcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEFUSF9DT01NT04KKwlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExCiAJc2VsZWN0IE1BQzgwMjExX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwogCXNlbGVjdCBORVdfTEVEUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0aDVrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaAppbmRleCA2MzU4MjMzLi42Y2Q1ZWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaApAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKLSNpbmNsdWRlICIuLi9yZWdkLmgiCi0KIC8qIFJYL1RYIGRlc2NyaXB0b3IgaHcgc3RydWN0cwogICogVE9ETzogRHJpdmVyIHBhcnQgc2hvdWxkIG9ubHkgc2VlIHN3IHN0cnVjdHMgKi8KICNpbmNsdWRlICJkZXNjLmgiCkBAIC0zMDgsNiArMzA2LDcgQEAKICNkZWZpbmUgQVI1S19TUkVWX0FSNTMxMUIJMHgzMCAvKiBTcGlyaXQgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTIxMQkweDQwIC8qIE9haHUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTIxMgkweDUwIC8qIFZlbmljZSAqLworI2RlZmluZSBBUjVLX1NSRVZfQVI1MjEyX1Y0CTB4NTQgLyogPz8/ICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjUyMTMJMHg1NSAvKiA/Pz8gKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSNTIxM0EJMHg1OSAvKiBIYWluYW4gKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSMjQxMwkweDc4IC8qIEdyaWZmaW4gbGl0ZSAqLwpAQCAtNzEzLDggKzcxMiw4IEBACiAgKiBVc2VkIGludGVybmFseSBmb3IgcmVzZXRfdHhfcXVldWUpLgogICogQWxzbyBzZWUgc3RydWN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbC4KICAqLwotI2RlZmluZSBJU19DSEFOX1hSKF9jKQkoKF9jLmh3X3ZhbHVlICYgQ0hBTk5FTF9YUikgIT0gMCkKLSNkZWZpbmUgSVNfQ0hBTl9CKF9jKQkoKF9jLmh3X3ZhbHVlICYgQ0hBTk5FTF9CKSAhPSAwKQorI2RlZmluZSBJU19DSEFOX1hSKF9jKQkoKF9jLT5od192YWx1ZSAmIENIQU5ORUxfWFIpICE9IDApCisjZGVmaW5lIElTX0NIQU5fQihfYykJKChfYy0+aHdfdmFsdWUgJiBDSEFOTkVMX0IpICE9IDApCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvIG1hcCAyR0h6IGNoYW5uZWxzIHRvCkBAIC05MTksNiArOTE4LDEyIEBACiAJQVI1S19JTlRfTk9DQVJECT0gMHhmZmZmZmZmZgogfTsKIAorLyogU29mdHdhcmUgaW50ZXJydXB0cyB1c2VkIGZvciBjYWxpYnJhdGlvbiAqLworZW51bSBhdGg1a19zb2Z0d2FyZV9pbnRlcnJ1cHQgeworCUFSNUtfU1dJX0ZVTExfQ0FMSUJSQVRJT04gPSAweDAxLAorCUFSNUtfU1dJX1NIT1JUX0NBTElCUkFUSU9OID0gMHgwMiwKK307CisKIC8qCiAgKiBQb3dlciBtYW5hZ2VtZW50CiAgKi8KQEAgLTEwMjksMTQgKzEwMzQsMTYgQEAKIAllbnVtIGF0aDVrX2ludAkJYWhfaW1yOwogCiAJZW51bSBubDgwMjExX2lmdHlwZQlhaF9vcF9tb2RlOwotCWVudW0gYXRoNWtfcG93ZXJfbW9kZQlhaF9wb3dlcl9tb2RlOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhaF9jdXJyZW50X2NoYW5uZWw7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICphaF9jdXJyZW50X2NoYW5uZWw7CiAJYm9vbAkJCWFoX3R1cmJvOwogCWJvb2wJCQlhaF9jYWxpYnJhdGlvbjsKLQlib29sCQkJYWhfcnVubmluZzsKIAlib29sCQkJYWhfc2luZ2xlX2NoaXA7CisJYm9vbAkJCWFoX2Flc19zdXBwb3J0OwogCWJvb2wJCQlhaF9jb21iaW5lZF9taWM7CiAKKwllbnVtIGF0aDVrX3ZlcnNpb24JYWhfdmVyc2lvbjsKKwllbnVtIGF0aDVrX3JhZGlvCWFoX3JhZGlvOworCXUzMgkJCWFoX3BoeTsKIAl1MzIJCQlhaF9tYWNfc3JldjsKIAl1MTYJCQlhaF9tYWNfdmVyc2lvbjsKIAl1MTYJCQlhaF9tYWNfcmV2aXNpb247CkBAIC0xMDQ0LDEzICsxMDUxLDYgQEAKIAl1MTYJCQlhaF9yYWRpb181Z2h6X3JldmlzaW9uOwogCXUxNgkJCWFoX3JhZGlvXzJnaHpfcmV2aXNpb247CiAKLQllbnVtIGF0aDVrX3ZlcnNpb24JYWhfdmVyc2lvbjsKLQllbnVtIGF0aDVrX3JhZGlvCWFoX3JhZGlvOwotCXUzMgkJCWFoX3BoeTsKLQotCWJvb2wJCQlhaF81Z2h6OwotCWJvb2wJCQlhaF8yZ2h6OwotCiAjZGVmaW5lIGFoX21vZGVzCQlhaF9jYXBhYmlsaXRpZXMuY2FwX21vZGUKICNkZWZpbmUgYWhfZWVfdmVyc2lvbgkJYWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb20uZWVfdmVyc2lvbgogCkBAIC0xMDU4LDcgKzEwNTgsNiBAQAogCXUzMgkJCWFoX2FpZnM7CiAJdTMyCQkJYWhfY3dfbWluOwogCXUzMgkJCWFoX2N3X21heDsKLQlib29sCQkJYWhfc29mdHdhcmVfcmV0cnk7CiAJdTMyCQkJYWhfbGltaXRfdHhfcmV0cmllczsKIAogCS8qIEFudGVubmEgQ29udHJvbCAqLwpAQCAtMTA2Niw2ICsxMDY1LDcgQEAKIAl1OAkJCWFoX2FudF9tb2RlOwogCXU4CQkJYWhfdHhfYW50OwogCXU4CQkJYWhfZGVmX2FudDsKKwlib29sCQkJYWhfc29mdHdhcmVfcmV0cnk7CiAKIAl1OAkJCWFoX3N0YV9pZFtFVEhfQUxFTl07CiAKQEAgLTEwNzUsMTAgKzEwNzUsOCBAQAogCXU4CQkJYWhfYnNzaWRbRVRIX0FMRU5dOwogCXU4CQkJYWhfYnNzaWRfbWFza1tFVEhfQUxFTl07CiAKLQl1MzIJCQlhaF9ncGlvW0FSNUtfTUFYX0dQSU9dOwogCWludAkJCWFoX2dwaW9fbnBpbnM7CiAKLQlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkJYWhfcmVndWxhdG9yeTsKIAlzdHJ1Y3QgYXRoNWtfY2FwYWJpbGl0aWVzIGFoX2NhcGFiaWxpdGllczsKIAogCXN0cnVjdCBhdGg1a190eHFfaW5mbwlhaF90eHFbQVI1S19OVU1fVFhfUVVFVUVTXTsKQEAgLTExMzAsNiArMTEyOCwxNSBAQAogCS8qIG5vaXNlIGZsb29yIGZyb20gbGFzdCBwZXJpb2RpYyBjYWxpYnJhdGlvbiAqLwogCXMzMgkJCWFoX25vaXNlX2Zsb29yOwogCisJLyogQ2FsaWJyYXRpb24gdGltZXN0YW1wICovCisJdW5zaWduZWQgbG9uZwkJYWhfY2FsX3RzdGFtcDsKKworCS8qIENhbGlicmF0aW9uIGludGVydmFsIChzZWNzKSAqLworCXU4CQkJYWhfY2FsX2ludHZhbDsKKworCS8qIFNvZnR3YXJlIGludGVycnVwdCBtYXNrICovCisJdTgJCQlhaF9zd2lfbWFzazsKKwogCS8qCiAJICogRnVuY3Rpb24gcG9pbnRlcnMKIAkgKi8KQEAgLTExNTMsNyArMTE2MCw3IEBACiAgKi8KIAogLyogQXR0YWNoL0RldGFjaCBGdW5jdGlvbnMgKi8KLWV4dGVybiBzdHJ1Y3QgYXRoNWtfaHcgKmF0aDVrX2h3X2F0dGFjaChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCB1OCBtYWNfdmVyc2lvbik7CitleHRlcm4gc3RydWN0IGF0aDVrX2h3ICphdGg1a19od19hdHRhY2goc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CiBleHRlcm4gdm9pZCBhdGg1a19od19kZXRhY2goc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKIC8qIExFRCBmdW5jdGlvbnMgKi8KQEAgLTExNjQsNiArMTE3MSw3IEBACiAKIC8qIFJlc2V0IEZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBhdGg1a19od19uaWNfd2FrZXVwKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBmbGFncywgYm9vbCBpbml0aWFsKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfb25faG9sZChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfcmVzZXQoc3RydWN0IGF0aDVrX2h3ICphaCwgZW51bSBubDgwMjExX2lmdHlwZSBvcF9tb2RlLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGJvb2wgY2hhbmdlX2NoYW5uZWwpOwogLyogUG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X3Bvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gYXRoNWtfcG93ZXJfbW9kZSBtb2RlLCBib29sIHNldF9jaGlwLCB1MTYgc2xlZXBfZHVyYXRpb24pOwpAQCAtMTI4Miw2ICsxMjkwLDcgQEAKIC8qIFBIWSBjYWxpYnJhdGlvbiAqLwogZXh0ZXJuIGludCBhdGg1a19od19waHlfY2FsaWJyYXRlKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKHN0cnVjdCBhdGg1a19odyAqYWgsIHNob3J0IGZyZXEpOworZXh0ZXJuIHZvaWQgYXRoNWtfaHdfY2FsaWJyYXRpb25fcG9sbChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIC8qIFNwdXIgbWl0aWdhdGlvbiAqLwogYm9vbCBhdGg1a19od19jaGFuX2hhc19zcHVyX25vaXNlKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYwppbmRleCBjNDFlZjU4Li43MWExYmQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2F0dGFjaC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdHRhY2guYwpAQCAtOTUsMTcgKzk1LDE3IEBACiAgKiBhdGg1a19od19hdHRhY2ggLSBDaGVjayBpZiBodyBpcyBzdXBwb3J0ZWQgYW5kIGluaXQgdGhlIG5lZWRlZCBzdHJ1Y3RzCiAgKgogICogQHNjOiBUaGUgJnN0cnVjdCBhdGg1a19zb2Z0YyB3ZSBnb3QgZnJvbSB0aGUgZHJpdmVyJ3MgYXR0YWNoIGZ1bmN0aW9uCi0gKiBAbWFjX3ZlcnNpb246IFRoZSBtYWMgdmVyc2lvbiBpZCAoY2hlY2sgb3V0IGF0aDVrLmgpIGJhc2VkIG9uIHBjaSBpZAogICoKICAqIENoZWNrIGlmIHRoZSBkZXZpY2UgaXMgc3VwcG9ydGVkLCBwZXJmb3JtIGEgUE9TVCBhbmQgaW5pdGlhbGl6ZSB0aGUgbmVlZGVkCiAgKiBzdHJ1Y3RzLiBSZXR1cm5zIC1FTk9NRU0gaWYgd2UgZG9uJ3QgaGF2ZSBtZW1vcnkgZm9yIHRoZSBuZWVkZWQgc3RydWN0cywKICAqIC1FTk9ERVYgaWYgdGhlIGRldmljZSBpcyBub3Qgc3VwcG9ydGVkIG9yIHByaW50cyBhbiBlcnJvciBtc2cgaWYgc29tZXRoaW5nCiAgKiBlbHNlIHdlbnQgd3JvbmcuCiAgKi8KLXN0cnVjdCBhdGg1a19odyAqYXRoNWtfaHdfYXR0YWNoKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHU4IG1hY192ZXJzaW9uKQorc3RydWN0IGF0aDVrX2h3ICphdGg1a19od19hdHRhY2goc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gc2MtPnBkZXY7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZTsKIAlpbnQgcmV0OwogCXUzMiBzcmV2OwogCkBAIC0xMzUsOSArMTM1LDE1IEBACiAJYWgtPmFoX3NvZnR3YXJlX3JldHJ5ID0gZmFsc2U7CiAKIAkvKgotCSAqIFNldCB0aGUgbWFjIHZlcnNpb24gYmFzZWQgb24gdGhlIHBjaSBpZAorCSAqIEZpbmQgdGhlIG1hYyB2ZXJzaW9uCiAJICovCi0JYWgtPmFoX3ZlcnNpb24gPSBtYWNfdmVyc2lvbjsKKwlzcmV2ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1JFVik7CisJaWYgKHNyZXYgPCBBUjVLX1NSRVZfQVI1MzExKQorCQlhaC0+YWhfdmVyc2lvbiA9IEFSNUtfQVI1MjEwOworCWVsc2UgaWYgKHNyZXYgPCBBUjVLX1NSRVZfQVI1MjEyKQorCQlhaC0+YWhfdmVyc2lvbiA9IEFSNUtfQVI1MjExOworCWVsc2UKKwkJYWgtPmFoX3ZlcnNpb24gPSBBUjVLX0FSNTIxMjsKIAogCS8qRmlsbCB0aGUgYXRoNWtfaHcgc3RydWN0IHdpdGggdGhlIG5lZWRlZCBmdW5jdGlvbnMqLwogCXJldCA9IGF0aDVrX2h3X2luaXRfZGVzY19mdW5jdGlvbnMoYWgpOwpAQCAtMTQ1LDEyICsxNTEsMTEgQEAKIAkJZ290byBlcnJfZnJlZTsKIAogCS8qIEJyaW5nIGRldmljZSBvdXQgb2Ygc2xlZXAgYW5kIHJlc2V0IGl0J3MgdW5pdHMgKi8KLQlyZXQgPSBhdGg1a19od19uaWNfd2FrZXVwKGFoLCBDSEFOTkVMX0IsIHRydWUpOworCXJldCA9IGF0aDVrX2h3X25pY193YWtldXAoYWgsIDAsIHRydWUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKIAkvKiBHZXQgTUFDLCBQSFkgYW5kIFJBRElPIHJldmlzaW9ucyAqLwotCXNyZXYgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TUkVWKTsKIAlhaC0+YWhfbWFjX3NyZXYgPSBzcmV2OwogCWFoLT5haF9tYWNfdmVyc2lvbiA9IEFSNUtfUkVHX01TKHNyZXYsIEFSNUtfU1JFVl9WRVIpOwogCWFoLT5haF9tYWNfcmV2aXNpb24gPSBBUjVLX1JFR19NUyhzcmV2LCBBUjVLX1NSRVZfUkVWKTsKQEAgLTI1MywyOCArMjU4LDYgQEAKIAl9CiAKIAkvKgotCSAqIFdyaXRlIFBDSS1FIHBvd2VyIHNhdmUgc2V0dGluZ3MKLQkgKi8KLQlpZiAoKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSAmJiAocGRldi0+aXNfcGNpZSkpIHsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDkyNDhmYzAwLCBBUjVLX1BDSUVfU0VSREVTKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDI0OTI0OTI0LCBBUjVLX1BDSUVfU0VSREVTKTsKLQkJLyogU2h1dCBvZmYgUlggd2hlbiBlbGVjaWRsZSBpcyBhc3NlcnRlZCAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MjgwMDAwMzksIEFSNUtfUENJRV9TRVJERVMpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4NTMxNjA4MjQsIEFSNUtfUENJRV9TRVJERVMpOwotCQkvKiBUT0RPOiBFRVBST00gd29yayAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4ZTU5ODA1NzksIEFSNUtfUENJRV9TRVJERVMpOwotCQkvKiBTaHV0IG9mZiBQTEwgYW5kIENMS1JFUSBhY3RpdmUgaW4gTDEgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMWRlZmZmLCBBUjVLX1BDSUVfU0VSREVTKTsKLQkJLyogUHJlc2VyY2Ugb3RoZXIgc2V0dGluZ3MgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFhYWFiZTQwLCBBUjVLX1BDSUVfU0VSREVTKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGJlMTA1NTU0LCBBUjVLX1BDSUVfU0VSREVTKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMGUzMDA3LCBBUjVLX1BDSUVfU0VSREVTKTsKLQkJLyogUmVzZXQgU0VSREVTIHRvIGxvYWQgbmV3IHNldHRpbmdzICovCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgQVI1S19QQ0lFX1NFUkRFU19SRVNFVCk7Ci0JCW1kZWxheSgxKTsKLQl9Ci0KLQkvKgogCSAqIFBPU1QKIAkgKi8KIAlyZXQgPSBhdGg1a19od19wb3N0KGFoKTsKQEAgLTI4Myw3ICsyNjYsNyBAQAogCiAJLyogRW5hYmxlIHBjaSBjb3JlIHJldHJ5IGZpeCBvbiBIYWluYW4gKDUyMTNBKSBhbmQgbGF0ZXIgY2hpcHMgKi8KIAlpZiAoc3JldiA+PSBBUjVLX1NSRVZfQVI1MjEzQSkKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BDSUNGR19SRVRSWV9GSVgsIEFSNUtfUENJQ0ZHKTsKKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLCBBUjVLX1BDSUNGR19SRVRSWV9GSVgpOwogCiAJLyoKIAkgKiBHZXQgY2FyZCBjYXBhYmlsaXRpZXMsIGNhbGlicmF0aW9uIHZhbHVlcyBldGMKQEAgLTI5NSw2ICsyNzgsNDAgQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKKwkvKgorCSAqIFdyaXRlIFBDSS1FIHBvd2VyIHNhdmUgc2V0dGluZ3MKKwkgKi8KKwlpZiAoKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSAmJiAocGRldi0+aXNfcGNpZSkpIHsKKwkJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDkyNDhmYzAwLCBBUjVLX1BDSUVfU0VSREVTKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDI0OTI0OTI0LCBBUjVLX1BDSUVfU0VSREVTKTsKKworCQkvKiBTaHV0IG9mZiBSWCB3aGVuIGVsZWNpZGxlIGlzIGFzc2VydGVkICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyODAwMDAzOSwgQVI1S19QQ0lFX1NFUkRFUyk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHg1MzE2MDgyNCwgQVI1S19QQ0lFX1NFUkRFUyk7CisKKwkJLyogSWYgc2VyZGVzIHByb2dyYW1pbmcgaXMgZW5hYmxlZCwgaW5jcmVhc2UgUENJLUUKKwkJICogdHggcG93ZXIgZm9yIHN5c3RlbXMgd2l0aCBsb25nIHRyYWNlIGZyb20gaG9zdAorCQkgKiB0byBtaW5pY2FyZCBjb25uZWN0b3IuICovCisJCWlmIChlZS0+ZWVfc2VyZGVzKQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGU1OTgwNTc5LCBBUjVLX1BDSUVfU0VSREVTKTsKKwkJZWxzZQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweGY2ODAwNTc5LCBBUjVLX1BDSUVfU0VSREVTKTsKKworCQkvKiBTaHV0IG9mZiBQTEwgYW5kIENMS1JFUSBhY3RpdmUgaW4gTDEgKi8KKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMWRlZmZmLCBBUjVLX1BDSUVfU0VSREVTKTsKKworCQkvKiBQcmVzZXJ2ZSBvdGhlciBzZXR0aW5ncyAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MWFhYWJlNDAsIEFSNUtfUENJRV9TRVJERVMpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4YmUxMDU1NTQsIEFSNUtfUENJRV9TRVJERVMpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwZTMwMDcsIEFSNUtfUENJRV9TRVJERVMpOworCisJCS8qIFJlc2V0IFNFUkRFUyB0byBsb2FkIG5ldyBzZXR0aW5ncyAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMDAsIEFSNUtfUENJRV9TRVJERVNfUkVTRVQpOworCQltZGVsYXkoMSk7CisJfQorCiAJLyogR2V0IG1pc2MgY2FwYWJpbGl0aWVzICovCiAJcmV0ID0gYXRoNWtfaHdfc2V0X2NhcGFiaWxpdGllcyhhaCk7CiAJaWYgKHJldCkgewpAQCAtMzAzLDYgKzMyMCwxMiBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAorCS8qIENyeXB0byBzZXR0aW5ncyAqLworCWVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlhaC0+YWhfYWVzX3N1cHBvcnQgPSBzcmV2ID49IEFSNUtfU1JFVl9BUjUyMTJfVjQgJiYKKwkJKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8wICYmCisJCSAhQVI1S19FRVBST01fQUVTX0RJUyhlZS0+ZWVfbWlzYzUpKTsKKwogCWlmIChzcmV2ID49IEFSNUtfU1JFVl9BUjI0MTQpIHsKIAkJYWgtPmFoX2NvbWJpbmVkX21pYyA9IHRydWU7CiAJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX01JU0NfTU9ERSwKQEAgLTMxOSw2ICszNDIsOSBAQAogCiAJYXRoNWtfaHdfcmZnYWluX29wdF9pbml0KGFoKTsKIAorCS8qIHR1cm4gb24gSFcgTEVEcyAqLworCWF0aDVrX2h3X3NldF9sZWRzdGF0ZShhaCwgQVI1S19MRURfSU5JVCk7CisKIAlyZXR1cm4gYWg7CiBlcnJfZnJlZToKIAlrZnJlZShhaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwppbmRleCAwMjljMWJjLi45YzZhYjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKQEAgLTU5LDcgKzU5LDcgQEAKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1zdGF0aWMgaW50IGF0aDVrX2NhbGludGVydmFsID0gMTA7IC8qIENhbGlicmF0ZSBQSFkgZXZlcnkgMTAgc2VjcyAoVE9ETzogRml4bWUpICovCitzdGF0aWMgdTggYXRoNWtfY2FsaW50ZXJ2YWwgPSAxMDsgLyogQ2FsaWJyYXRlIFBIWSBldmVyeSAxMCBzZWNzIChUT0RPOiBGaXhtZSkgKi8KIHN0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0OwogbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBib29sLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uLiIpOwpAQCAtODQsMjQgKzg0LDI0IEBACiAKIC8qIEtub3duIFBDSSBpZHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19wY2lfaWRfdGFibGVbXSA9IHsKLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDIwNyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEwIH0sIC8qIDUyMTAgZWFybHkgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAwNyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEwIH0sIC8qIDUyMTAgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMSksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjExIH0sIC8qIDUzMTEgLSB0aGlzIGlzIG9uIEFIQiBidXMgISovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTIpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMSB9LCAvKiA1MjExICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTMpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiA1MjEyICovCi0JeyBQQ0lfVkRFVklDRSgzQ09NXzIsICAweDAwMTMpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiAzY29tIDUyMTIgKi8KLQl7IFBDSV9WREVWSUNFKDNDT00sICAgIDB4MDAxMyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDNjb20gM0NSREFHNjc1IDUyMTIgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MTAxNCksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIElCTSBtaW5pcGNpIDUyMTIgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNCksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE1KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTYpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE4KSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTkpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KLQl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxYSksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEyIH0sIC8qIDI0MTMgR3JpZmZpbi1saXRlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWIpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiA1NDEzIEVhZ2xlICovCi0JeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWMpLCAuZHJpdmVyX2RhdGEgPSBBUjVLX0FSNTIxMiB9LCAvKiBQQ0ktRSBjYXJkcyAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFkKSwgLmRyaXZlcl9kYXRhID0gQVI1S19BUjUyMTIgfSwgLyogMjQxNyBOYWxhICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAyMDcpIH0sIC8qIDUyMTAgZWFybHkgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAwNykgfSwgLyogNTIxMCAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDExKSB9LCAvKiA1MzExIC0gdGhpcyBpcyBvbiBBSEIgYnVzICEqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDEyKSB9LCAvKiA1MjExICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTMpIH0sIC8qIDUyMTIgKi8KKwl7IFBDSV9WREVWSUNFKDNDT01fMiwgIDB4MDAxMykgfSwgLyogM2NvbSA1MjEyICovCisJeyBQQ0lfVkRFVklDRSgzQ09NLCAgICAweDAwMTMpIH0sIC8qIDNjb20gM0NSREFHNjc1IDUyMTIgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MTAxNCkgfSwgLyogSUJNIG1pbmlwY2kgNTIxMiAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE0KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxNSkgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTYpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDE3KSB9LCAvKiA1MjEyIGNvbWJhdGlibGUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxOCkgfSwgLyogNTIxMiBjb21iYXRpYmxlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTkpIH0sIC8qIDUyMTIgY29tYmF0aWJsZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFhKSB9LCAvKiAyNDEzIEdyaWZmaW4tbGl0ZSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDFiKSB9LCAvKiA1NDEzIEVhZ2xlICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWMpIH0sIC8qIFBDSS1FIGNhcmRzICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMWQpIH0sIC8qIDI0MTcgTmFsYSAqLwogCXsgMCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aDVrX3BjaV9pZF90YWJsZSk7CkBAIC0yMTgsNiArMjE4LDggQEAKICAqIFByb3RvdHlwZXMgLSBNQUMgODAyLjExIHN0YWNrIHJlbGF0ZWQgZnVuY3Rpb25zCiAgKi8KIHN0YXRpYyBpbnQgYXRoNWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIGludCBhdGg1a190eF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IGF0aDVrX3R4cSAqdHhxKTsKIHN0YXRpYyBpbnQgYXRoNWtfcmVzZXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKTsKIHN0YXRpYyBpbnQgYXRoNWtfcmVzZXRfd2FrZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyBpbnQgYXRoNWtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMjI3LDEwICsyMjksMTIgQEAKIHN0YXRpYyB2b2lkIGF0aDVrX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKTsKIHN0YXRpYyBpbnQgYXRoNWtfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7CitzdGF0aWMgdTY0IGF0aDVrX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOwogc3RhdGljIHZvaWQgYXRoNWtfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCXVuc2lnbmVkIGludCAqbmV3X2ZsYWdzLAotCQlpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KTsKKwkJdTY0IG11bHRpY2FzdCk7CiBzdGF0aWMgaW50IGF0aDVrX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCWVudW0gc2V0X2tleV9jbWQgY21kLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLApAQCAtMjQ4LDYgKzI1Miw4IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAogCQl1MzIgY2hhbmdlcyk7CitzdGF0aWMgdm9pZCBhdGg1a19zd19zY2FuX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGF0aDVrX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzID0gewogCS50eCAJCT0gYXRoNWtfdHgsCkBAIC0yNTYsNiArMjYyLDcgQEAKIAkuYWRkX2ludGVyZmFjZSAJPSBhdGg1a19hZGRfaW50ZXJmYWNlLAogCS5yZW1vdmVfaW50ZXJmYWNlID0gYXRoNWtfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnIAk9IGF0aDVrX2NvbmZpZywKKwkucHJlcGFyZV9tdWx0aWNhc3QgPSBhdGg1a19wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlciA9IGF0aDVrX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF9rZXkgCT0gYXRoNWtfc2V0X2tleSwKIAkuZ2V0X3N0YXRzIAk9IGF0aDVrX2dldF9zdGF0cywKQEAgLTI2NSw2ICsyNzIsOCBAQAogCS5zZXRfdHNmIAk9IGF0aDVrX3NldF90c2YsCiAJLnJlc2V0X3RzZiAJPSBhdGg1a19yZXNldF90c2YsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBhdGg1a19ic3NfaW5mb19jaGFuZ2VkLAorCS5zd19zY2FuX3N0YXJ0CT0gYXRoNWtfc3dfc2Nhbl9zdGFydCwKKwkuc3dfc2Nhbl9jb21wbGV0ZSA9IGF0aDVrX3N3X3NjYW5fY29tcGxldGUsCiB9OwogCiAvKgpAQCAtMjk3LDcgKzMwNiw4IEBACiBzdGF0aWMgaW50IAlhdGg1a19yeGJ1Zl9zZXR1cChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAogCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmKTsKIHN0YXRpYyBpbnQgCWF0aDVrX3R4YnVmX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCi0JCQkJc3RydWN0IGF0aDVrX2J1ZiAqYmYpOworCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmLAorCQkJCXN0cnVjdCBhdGg1a190eHEgKnR4cSk7CiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfdHhidWZfZnJlZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAogCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmKQogewpAQCAtMzY5LDcgKzM3OSw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoNWtfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQgCWF0aDVrX3Rhc2tsZXRfcmVzZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKIAotc3RhdGljIHZvaWQgCWF0aDVrX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgCWF0aDVrX3Rhc2tsZXRfY2FsaWJyYXRlKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIC8qCiAgKiBNb2R1bGUgaW5pdC9leGl0IGZ1bmN0aW9ucwpAQCAtNDY0LDcgKzQ3NCw3IEBACiAJCSAqIERNQSB0byB3b3JrIHNvIGZvcmNlIGEgcmVhc29uYWJsZSB2YWx1ZSBoZXJlIGlmIGl0CiAJCSAqIGNvbWVzIHVwIHplcm8uCiAJCSAqLwotCQljc3ogPSBMMV9DQUNIRV9CWVRFUyAvIHNpemVvZih1MzIpOworCQljc3ogPSBMMV9DQUNIRV9CWVRFUyA+PiAyOwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY3N6KTsKIAl9CiAJLyoKQEAgLTUxMiw2ICs1MjIsNyBAQAogCS8qIEluaXRpYWxpemUgZHJpdmVyIHByaXZhdGUgZGF0YSAqLwogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJICAgIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAogCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIApAQCAtNTM2LDcgKzU0Nyw3IEBACiAJX19zZXRfYml0KEFUSF9TVEFUX0lOVkFMSUQsIHNjLT5zdGF0dXMpOwogCiAJc2MtPmlvYmFzZSA9IG1lbTsgLyogU28gd2UgY2FuIHVubWFwIGl0IG9uIGRldGFjaCAqLwotCXNjLT5jYWNoZWxzeiA9IGNzeiAqIHNpemVvZih1MzIpOyAvKiBjb252ZXJ0IHRvIGJ5dGVzICovCisJc2MtPmNvbW1vbi5jYWNoZWxzeiA9IGNzeiA8PCAyOyAvKiBjb252ZXJ0IHRvIGJ5dGVzICovCiAJc2MtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJc2MtPmJpbnR2YWwgPSAxMDAwOwogCW11dGV4X2luaXQoJnNjLT5sb2NrKTsKQEAgLTU1NSw3ICs1NjYsNyBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgZGV2aWNlICovCi0Jc2MtPmFoID0gYXRoNWtfaHdfYXR0YWNoKHNjLCBpZC0+ZHJpdmVyX2RhdGEpOworCXNjLT5haCA9IGF0aDVrX2h3X2F0dGFjaChzYyk7CiAJaWYgKElTX0VSUihzYy0+YWgpKSB7CiAJCXJldCA9IFBUUl9FUlIoc2MtPmFoKTsKIAkJZ290byBlcnJfaXJxOwpAQCAtNjY2LDcgKzY3Nyw2IEBACiAKIAlhdGg1a19sZWRfb2ZmKHNjKTsKIAotCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CkBAIC02OTQsMTggKzcwNCw4IEBACiAJICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDApOwogCi0JZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGg1a19pbnRyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKTsKLQlpZiAoZXJyKSB7Ci0JCUFUSDVLX0VSUihzYywgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyX25vX2lycTsKLQl9Ci0KIAlhdGg1a19sZWRfZW5hYmxlKHNjKTsKIAlyZXR1cm4gMDsKLQotZXJyX25vX2lycToKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcmV0dXJuIGVycjsKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIApAQCAtNzE4LDkgKzcxOCw5IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOwogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZyA9ICZzYy0+YWgtPmFoX3JlZ3VsYXRvcnk7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gJnNjLT5jb21tb24ucmVndWxhdG9yeTsKIAotCXJldHVybiBhdGhfcmVnX25vdGlmaWVyX2FwcGx5KHdpcGh5LCByZXF1ZXN0LCByZWcpOworCXJldHVybiBhdGhfcmVnX25vdGlmaWVyX2FwcGx5KHdpcGh5LCByZXF1ZXN0LCByZWd1bGF0b3J5KTsKIH0KIAogc3RhdGljIGludApAQCAtNzI4LDYgKzcyOCw3IEBACiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gJnNjLT5jb21tb24ucmVndWxhdG9yeTsKIAl1OCBtYWNbRVRIX0FMRU5dID0ge307CiAJaW50IHJldDsKIApAQCAtNzg1LDE5ICs3ODYsMjUgQEAKIAkJZ290byBlcnJfZGVzYzsKIAl9CiAJc2MtPmJoYWxxID0gcmV0OworCXNjLT5jYWJxID0gYXRoNWtfdHhxX3NldHVwKHNjLCBBUjVLX1RYX1FVRVVFX0NBQiwgMCk7CisJaWYgKElTX0VSUihzYy0+Y2FicSkpIHsKKwkJQVRINUtfRVJSKHNjLCAiY2FuJ3Qgc2V0dXAgY2FiIHF1ZXVlXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihzYy0+Y2FicSk7CisJCWdvdG8gZXJyX2JoYWw7CisJfQogCiAJc2MtPnR4cSA9IGF0aDVrX3R4cV9zZXR1cChzYywgQVI1S19UWF9RVUVVRV9EQVRBLCBBUjVLX1dNRV9BQ19CSyk7CiAJaWYgKElTX0VSUihzYy0+dHhxKSkgewogCQlBVEg1S19FUlIoc2MsICJjYW4ndCBzZXR1cCB4bWl0IHF1ZXVlXG4iKTsKIAkJcmV0ID0gUFRSX0VSUihzYy0+dHhxKTsKLQkJZ290byBlcnJfYmhhbDsKKwkJZ290byBlcnJfcXVldWVzOwogCX0KIAogCXRhc2tsZXRfaW5pdCgmc2MtPnJ4dHEsIGF0aDVrX3Rhc2tsZXRfcngsICh1bnNpZ25lZCBsb25nKXNjKTsKIAl0YXNrbGV0X2luaXQoJnNjLT50eHRxLCBhdGg1a190YXNrbGV0X3R4LCAodW5zaWduZWQgbG9uZylzYyk7CiAJdGFza2xldF9pbml0KCZzYy0+cmVzdHEsIGF0aDVrX3Rhc2tsZXRfcmVzZXQsICh1bnNpZ25lZCBsb25nKXNjKTsKKwl0YXNrbGV0X2luaXQoJnNjLT5jYWxpYiwgYXRoNWtfdGFza2xldF9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKIAl0YXNrbGV0X2luaXQoJnNjLT5iZWFjb250cSwgYXRoNWtfdGFza2xldF9iZWFjb24sICh1bnNpZ25lZCBsb25nKXNjKTsKLQlzZXR1cF90aW1lcigmc2MtPmNhbGliX3RpbSwgYXRoNWtfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7CiAKIAlyZXQgPSBhdGg1a19lZXByb21fcmVhZF9tYWMoYWgsIG1hYyk7CiAJaWYgKHJldCkgewpAQCAtODExLDkgKzgxOCw4IEBACiAJbWVtc2V0KHNjLT5ic3NpZG1hc2ssIDB4ZmYsIEVUSF9BTEVOKTsKIAlhdGg1a19od19zZXRfYnNzaWRfbWFzayhzYy0+YWgsIHNjLT5ic3NpZG1hc2spOwogCi0JYWgtPmFoX3JlZ3VsYXRvcnkuY3VycmVudF9yZCA9Ci0JCWFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbS5lZV9yZWdkb21haW47Ci0JcmV0ID0gYXRoX3JlZ2RfaW5pdCgmYWgtPmFoX3JlZ3VsYXRvcnksIGh3LT53aXBoeSwgYXRoNWtfcmVnX25vdGlmaWVyKTsKKwlyZWd1bGF0b3J5LT5jdXJyZW50X3JkID0gYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX3JlZ2RvbWFpbjsKKwlyZXQgPSBhdGhfcmVnZF9pbml0KHJlZ3VsYXRvcnksIGh3LT53aXBoeSwgYXRoNWtfcmVnX25vdGlmaWVyKTsKIAlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihzYywgImNhbid0IGluaXRpYWxpemUgcmVndWxhdG9yeSBzeXN0ZW1cbiIpOwogCQlnb3RvIGVycl9xdWV1ZXM7CkBAIC04MjUsOCArODMxLDggQEAKIAkJZ290byBlcnJfcXVldWVzOwogCX0KIAotCWlmICghYXRoX2lzX3dvcmxkX3JlZ2QoJnNjLT5haC0+YWhfcmVndWxhdG9yeSkpCi0JCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIHNjLT5haC0+YWhfcmVndWxhdG9yeS5hbHBoYTIpOworCWlmICghYXRoX2lzX3dvcmxkX3JlZ2QocmVndWxhdG9yeSkpCisJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIHJlZ3VsYXRvcnktPmFscGhhMik7CiAKIAlhdGg1a19pbml0X2xlZHMoc2MpOwogCkBAIC0xMDY4LDEwICsxMDc0LDkgQEAKIH0KIAogLyoKLSAqIFNldC9jaGFuZ2UgY2hhbm5lbHMuICBJZiB0aGUgY2hhbm5lbCBpcyByZWFsbHkgYmVpbmcgY2hhbmdlZCwKLSAqIGl0J3MgZG9uZSBieSByZXNldGluZyB0aGUgY2hpcC4gIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtdXN0Ci0gKiBmaXJzdCBjbGVhbnVwIGFueSBwZW5kaW5nIERNQSwgdGhlbiByZXN0YXJ0IHN0dWZmIGFmdGVyIGEgbGEKLSAqIGF0aDVrX2luaXQuCisgKiBTZXQvY2hhbmdlIGNoYW5uZWxzLiBXZSBhbHdheXMgcmVzZXQgdGhlIGNoaXAuCisgKiBUbyBhY2NvbXBsaXNoIHRoaXMgd2UgbXVzdCBmaXJzdCBjbGVhbnVwIGFueSBwZW5kaW5nIERNQSwKKyAqIHRoZW4gcmVzdGFydCBzdHVmZiBhZnRlciBhIGxhICBhdGg1a19pbml0LgogICoKICAqIENhbGxlZCB3aXRoIHNjLT5sb2NrLgogICovCkBAIC0xMDgxLDE5ICsxMDg2LDEzIEBACiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgIigldSBNSHopIC0+ICgldSBNSHopXG4iLAogCQlzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEsIGNoYW4tPmNlbnRlcl9mcmVxKTsKIAotCWlmIChjaGFuLT5jZW50ZXJfZnJlcSAhPSBzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEgfHwKLQkJY2hhbi0+aHdfdmFsdWUgIT0gc2MtPmN1cmNoYW4tPmh3X3ZhbHVlKSB7Ci0KLQkJLyoKLQkJICogVG8gc3dpdGNoIGNoYW5uZWxzIGNsZWFyIGFueSBwZW5kaW5nIERNQSBvcGVyYXRpb25zOwotCQkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCi0JCSAqIGhhcmR3YXJlIGF0IHRoZSBuZXcgZnJlcXVlbmN5LCBhbmQgdGhlbiByZS1lbmFibGUKLQkJICogdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhlIGgvdy4KLQkJICovCi0JCXJldHVybiBhdGg1a19yZXNldChzYywgY2hhbik7Ci0JfQotCi0JcmV0dXJuIDA7CisJLyoKKwkgKiBUbyBzd2l0Y2ggY2hhbm5lbHMgY2xlYXIgYW55IHBlbmRpbmcgRE1BIG9wZXJhdGlvbnM7CisJICogd2FpdCBsb25nIGVub3VnaCBmb3IgdGhlIFJYIGZpZm8gdG8gZHJhaW4sIHJlc2V0IHRoZQorCSAqIGhhcmR3YXJlIGF0IHRoZSBuZXcgZnJlcXVlbmN5LCBhbmQgdGhlbiByZS1lbmFibGUKKwkgKiB0aGUgcmVsZXZhbnQgYml0cyBvZiB0aGUgaC93LgorCSAqLworCXJldHVybiBhdGg1a19yZXNldChzYywgY2hhbik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTE0LDYgKzExMTMsOCBAQAogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAJdTMyIHJmaWx0OwogCisJYWgtPmFoX29wX21vZGUgPSBzYy0+b3Btb2RlOworCiAJLyogY29uZmlndXJlIHJ4IGZpbHRlciAqLwogCXJmaWx0ID0gc2MtPmZpbHRlcl9mbGFnczsKIAlhdGg1a19od19zZXRfcnhfZmlsdGVyKGFoLCByZmlsdCk7CkBAIC0xMTUzLDI3ICsxMTU0LDIwIEBACiBzdHJ1Y3Qgc2tfYnVmZiAqYXRoNWtfcnhfc2tiX2FsbG9jKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIGRtYV9hZGRyX3QgKnNrYl9hZGRyKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IG9mZjsKIAogCS8qCiAJICogQWxsb2NhdGUgYnVmZmVyIHdpdGggaGVhZHJvb21fbmVlZGVkIHNwYWNlIGZvciB0aGUKIAkgKiBmYWtlIHBoeXNpY2FsIGxheWVyIGhlYWRlciBhdCB0aGUgc3RhcnQuCiAJICovCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzYy0+cnhidWZzaXplICsgc2MtPmNhY2hlbHN6IC0gMSk7CisJc2tiID0gYXRoX3J4YnVmX2FsbG9jKCZzYy0+Y29tbW9uLAorCQkJICAgICAgc2MtPnJ4YnVmc2l6ZSArIHNjLT5jb21tb24uY2FjaGVsc3ogLSAxLAorCQkJICAgICAgR0ZQX0FUT01JQyk7CiAKIAlpZiAoIXNrYikgewogCQlBVEg1S19FUlIoc2MsICJjYW4ndCBhbGxvYyBza2J1ZmYgb2Ygc2l6ZSAldVxuIiwKLQkJCQlzYy0+cnhidWZzaXplICsgc2MtPmNhY2hlbHN6IC0gMSk7CisJCQkJc2MtPnJ4YnVmc2l6ZSArIHNjLT5jb21tb24uY2FjaGVsc3ogLSAxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCS8qCi0JICogQ2FjaGUtbGluZS1hbGlnbi4gIFRoaXMgaXMgaW1wb3J0YW50IChmb3IgdGhlCi0JICogNTIxMCBhdCBsZWFzdCkgYXMgbm90IGRvaW5nIHNvIGNhdXNlcyBib2d1cyBkYXRhCi0JICogaW4gcngnZCBmcmFtZXMuCi0JICovCi0Jb2ZmID0gKCh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSkgJSBzYy0+Y2FjaGVsc3o7Ci0JaWYgKG9mZiAhPSAwKQotCQlza2JfcmVzZXJ2ZShza2IsIHNjLT5jYWNoZWxzeiAtIG9mZik7CiAKIAkqc2tiX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwKIAkJc2tiLT5kYXRhLCBzYy0+cnhidWZzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtMTIyOCwxMCArMTIyMiwxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1hdGg1a190eGJ1Zl9zZXR1cChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfYnVmICpiZikKK2F0aDVrX3R4YnVmX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsIHN0cnVjdCBhdGg1a19idWYgKmJmLAorCQkgIHN0cnVjdCBhdGg1a190eHEgKnR4cSkKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwotCXN0cnVjdCBhdGg1a190eHEgKnR4cSA9IHNjLT50eHE7CiAJc3RydWN0IGF0aDVrX2Rlc2MgKmRzID0gYmYtPmRlc2M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGJmLT5za2I7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwpAQCAtMTYxNSwxMCArMTYwOSwxMCBAQAogCXN0cnVjdCBhdGg1a19idWYgKmJmOwogCWludCByZXQ7CiAKLQlzYy0+cnhidWZzaXplID0gcm91bmR1cChJRUVFODAyMTFfTUFYX0xFTiwgc2MtPmNhY2hlbHN6KTsKKwlzYy0+cnhidWZzaXplID0gcm91bmR1cChJRUVFODAyMTFfTUFYX0xFTiwgc2MtPmNvbW1vbi5jYWNoZWxzeik7CiAKIAlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULCAiY2FjaGVsc3ogJXUgcnhidWZzaXplICV1XG4iLAotCQlzYy0+Y2FjaGVsc3osIHNjLT5yeGJ1ZnNpemUpOworCQlzYy0+Y29tbW9uLmNhY2hlbHN6LCBzYy0+cnhidWZzaXplKTsKIAogCXNwaW5fbG9ja19iaCgmc2MtPnJ4YnVmbG9jayk7CiAJc2MtPnJ4bGluayA9IE5VTEw7CkBAIC0xNzQ3LDcgKzE3NDEsNyBAQAogc3RhdGljIHZvaWQKIGF0aDVrX3Rhc2tsZXRfcngodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4cyA9IHt9OworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeHM7CiAJc3RydWN0IGF0aDVrX3J4X3N0YXR1cyBycyA9IHt9OwogCXN0cnVjdCBza19idWZmICpza2IsICpuZXh0X3NrYjsKIAlkbWFfYWRkcl90IG5leHRfc2tiX2FkZHI7CkBAIC0xNzU3LDYgKzE3NTEsNyBAQAogCWludCByZXQ7CiAJaW50IGhkcmxlbjsKIAlpbnQgcGFkc2l6ZTsKKwlpbnQgcnhfZmxhZzsKIAogCXNwaW5fbG9jaygmc2MtPnJ4YnVmbG9jayk7CiAJaWYgKGxpc3RfZW1wdHkoJnNjLT5yeGJ1ZikpIHsKQEAgLTE3NjQsNyArMTc1OSw3IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAlkbyB7Ci0JCXJ4cy5mbGFnID0gMDsKKwkJcnhfZmxhZyA9IDA7CiAKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+cnhidWYsIHN0cnVjdCBhdGg1a19idWYsIGxpc3QpOwogCQlCVUdfT04oYmYtPnNrYiA9PSBOVUxMKTsKQEAgLTE4MDgsNyArMTgwMyw3IEBACiAJCQkJCWdvdG8gYWNjZXB0OwogCQkJfQogCQkJaWYgKHJzLnJzX3N0YXR1cyAmIEFSNUtfUlhFUlJfTUlDKSB7Ci0JCQkJcnhzLmZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOworCQkJCXJ4X2ZsYWcgfD0gUlhfRkxBR19NTUlDX0VSUk9SOwogCQkJCWdvdG8gYWNjZXB0OwogCQkJfQogCkBAIC0xODQ2LDYgKzE4NDEsNyBAQAogCQkJbWVtbW92ZShza2ItPmRhdGEgKyBwYWRzaXplLCBza2ItPmRhdGEsIGhkcmxlbik7CiAJCQlza2JfcHVsbChza2IsIHBhZHNpemUpOwogCQl9CisJCXJ4cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCiAJCS8qCiAJCSAqIGFsd2F5cyBleHRlbmQgdGhlIG1hYyB0aW1lc3RhbXAsIHNpbmNlIHRoaXMgaW5mb3JtYXRpb24gaXMKQEAgLTE4NjcsNDEgKzE4NjMsNDEgQEAKIAkJICogaW1wb3NzaWJsZSB0byBjb21wbHkgdG8gdGhhdC4gVGhpcyBhZmZlY3RzIElCU1MgbWVyZ2Ugb25seQogCQkgKiByaWdodCBub3csIHNvIGl0J3Mgbm90IHRvbyBiYWQuLi4KIAkJICovCi0JCXJ4cy5tYWN0aW1lID0gYXRoNWtfZXh0ZW5kX3RzZihzYy0+YWgsIHJzLnJzX3RzdGFtcCk7Ci0JCXJ4cy5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsKKwkJcnhzLT5tYWN0aW1lID0gYXRoNWtfZXh0ZW5kX3RzZihzYy0+YWgsIHJzLnJzX3RzdGFtcCk7CisJCXJ4cy0+ZmxhZyA9IHJ4X2ZsYWcgfCBSWF9GTEFHX1RTRlQ7CiAKLQkJcnhzLmZyZXEgPSBzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXE7Ci0JCXJ4cy5iYW5kID0gc2MtPmN1cmJhbmQtPmJhbmQ7CisJCXJ4cy0+ZnJlcSA9IHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcTsKKwkJcnhzLT5iYW5kID0gc2MtPmN1cmJhbmQtPmJhbmQ7CiAKLQkJcnhzLm5vaXNlID0gc2MtPmFoLT5haF9ub2lzZV9mbG9vcjsKLQkJcnhzLnNpZ25hbCA9IHJ4cy5ub2lzZSArIHJzLnJzX3Jzc2k7CisJCXJ4cy0+bm9pc2UgPSBzYy0+YWgtPmFoX25vaXNlX2Zsb29yOworCQlyeHMtPnNpZ25hbCA9IHJ4cy0+bm9pc2UgKyBycy5yc19yc3NpOwogCiAJCS8qIEFuIHJzc2kgb2YgMzUgaW5kaWNhdGVzIHlvdSBzaG91bGQgYmUgYWJsZSB1c2UKIAkJICogNTQgTWJwcyByZWxpYWJseS4gQSBtb3JlIGVsYWJvcmF0ZSBzY2hlbWUgY2FuIGJlIHVzZWQKIAkJICogaGVyZSBidXQgaXQgcmVxdWlyZXMgYSBtYXAgb2YgU05SL3Rocm91Z2hwdXQgZm9yIGVhY2gKIAkJICogcG9zc2libGUgbW9kZSB1c2VkICovCi0JCXJ4cy5xdWFsID0gcnMucnNfcnNzaSAqIDEwMCAvIDM1OworCQlyeHMtPnF1YWwgPSBycy5yc19yc3NpICogMTAwIC8gMzU7CiAKIAkJLyogcnNzaSBjYW4gYmUgbW9yZSB0aGFuIDM1IHRob3VnaCwgYW55dGhpbmcgYWJvdmUgdGhhdAogCQkgKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhdCAxMDAlICovCi0JCWlmIChyeHMucXVhbCA+IDEwMCkKLQkJCXJ4cy5xdWFsID0gMTAwOworCQlpZiAocnhzLT5xdWFsID4gMTAwKQorCQkJcnhzLT5xdWFsID0gMTAwOwogCi0JCXJ4cy5hbnRlbm5hID0gcnMucnNfYW50ZW5uYTsKLQkJcnhzLnJhdGVfaWR4ID0gYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzYywgcnMucnNfcmF0ZSk7Ci0JCXJ4cy5mbGFnIHw9IGF0aDVrX3J4X2RlY3J5cHRlZChzYywgZHMsIHNrYiwgJnJzKTsKKwkJcnhzLT5hbnRlbm5hID0gcnMucnNfYW50ZW5uYTsKKwkJcnhzLT5yYXRlX2lkeCA9IGF0aDVrX2h3X3RvX2RyaXZlcl9yaXgoc2MsIHJzLnJzX3JhdGUpOworCQlyeHMtPmZsYWcgfD0gYXRoNWtfcnhfZGVjcnlwdGVkKHNjLCBkcywgc2tiLCAmcnMpOwogCi0JCWlmIChyeHMucmF0ZV9pZHggPj0gMCAmJiBycy5yc19yYXRlID09Ci0JCSAgICBzYy0+Y3VyYmFuZC0+Yml0cmF0ZXNbcnhzLnJhdGVfaWR4XS5od192YWx1ZV9zaG9ydCkKLQkJCXJ4cy5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CisJCWlmIChyeHMtPnJhdGVfaWR4ID49IDAgJiYgcnMucnNfcmF0ZSA9PQorCQkgICAgc2MtPmN1cmJhbmQtPmJpdHJhdGVzW3J4cy0+cmF0ZV9pZHhdLmh3X3ZhbHVlX3Nob3J0KQorCQkJcnhzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CiAKIAkJYXRoNWtfZGVidWdfZHVtcF9za2Ioc2MsIHNrYiwgIlJYICAiLCAwKTsKIAogCQkvKiBjaGVjayBiZWFjb25zIGluIElCU1MgbW9kZSAqLwogCQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCWF0aDVrX2NoZWNrX2lic3NfdHNmKHNjLCBza2IsICZyeHMpOworCQkJYXRoNWtfY2hlY2tfaWJzc190c2Yoc2MsIHNrYiwgcnhzKTsKIAotCQlfX2llZWU4MDIxMV9yeChzYy0+aHcsIHNrYiwgJnJ4cyk7CisJCWllZWU4MDIxMV9yeChzYy0+aHcsIHNrYik7CiAKIAkJYmYtPnNrYiA9IG5leHRfc2tiOwogCQliZi0+c2tiYWRkciA9IG5leHRfc2tiX2FkZHI7CkBAIC0xOTk0LDkgKzE5OTAsMTIgQEAKIHN0YXRpYyB2b2lkCiBhdGg1a190YXNrbGV0X3R4KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKKwlpbnQgaTsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gKHZvaWQgKilkYXRhOwogCi0JYXRoNWtfdHhfcHJvY2Vzc3Eoc2MsIHNjLT50eHEpOworCWZvciAoaT0wOyBpIDwgQVI1S19OVU1fVFhfUVVFVUVTOyBpKyspCisJCWlmIChzYy0+dHhxc1tpXS5zZXR1cCAmJiAoc2MtPmFoLT5haF90eHFfaXNyICYgQklUKGkpKSkKKwkJCWF0aDVrX3R4X3Byb2Nlc3NxKHNjLCAmc2MtPnR4cXNbaV0pOwogfQogCiAKQEAgLTIwNzgsMTMgKzIwNzcsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDVrX2JlYWNvbl9kaXNhYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0Jc2MtPmltYXNrICY9IH4oQVI1S19JTlRfQk1JU1MgfCBBUjVLX0lOVF9TV0JBKTsKLQlhdGg1a19od19zZXRfaW1yKHNjLT5haCwgc2MtPmltYXNrKTsKLQlhdGg1a19od19zdG9wX3R4X2RtYShzYy0+YWgsIHNjLT5iaGFscSk7Ci19Ci0KIC8qCiAgKiBUcmFuc21pdCBhIGJlYWNvbiBmcmFtZSBhdCBTV0JBLiAgRHluYW1pYyB1cGRhdGVzIHRvIHRoZQogICogZnJhbWUgY29udGVudHMgYXJlIGRvbmUgYXMgbmVlZGVkIGFuZCB0aGUgc2xvdCB0aW1lIGlzCkBAIC0yMDk4LDYgKzIwOTAsNyBAQAogewogCXN0cnVjdCBhdGg1a19idWYgKmJmID0gc2MtPmJidWY7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJQVRINUtfREJHX1VOTElNSVQoc2MsIEFUSDVLX0RFQlVHX0JFQUNPTiwgImluIGJlYWNvbl9zZW5kXG4iKTsKIApAQCAtMjE1MSw2ICsyMTQ0LDEyIEBACiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19CRUFDT04sICJUWERQWyV1XSA9ICVsbHggKCVwKVxuIiwKIAkJc2MtPmJoYWxxLCAodW5zaWduZWQgbG9uZyBsb25nKWJmLT5kYWRkciwgYmYtPmRlc2MpOwogCisJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHNjLT52aWYpOworCXdoaWxlIChza2IpIHsKKwkJYXRoNWtfdHhfcXVldWUoc2MtPmh3LCBza2IsIHNjLT5jYWJxKTsKKwkJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHNjLT52aWYpOworCX0KKwogCXNjLT5ic2VudCsrOwogfQogCkBAIC0yMjcxLDEzICsyMjcwLDExIEBACiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYXRoNWtfaHdfc2V0X2ltcihhaCwgMCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ibG9jaywgZmxhZ3MpOwogCXNjLT5ibWlzc2NvdW50ID0gMDsKIAlzYy0+aW1hc2sgJj0gfihBUjVLX0lOVF9CTUlTUyB8IEFSNUtfSU5UX1NXQkEpOwogCi0JaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJCXNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCB8fAotCQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChzYy0+ZW5hYmxlX2JlYWNvbikgewogCQkvKgogCQkgKiBJbiBJQlNTIG1vZGUgd2UgdXNlIGEgc2VsZi1saW5rZWQgdHggZGVzY3JpcHRvciBhbmQgbGV0IHRoZQogCQkgKiBoYXJkd2FyZSBzZW5kIHRoZSBiZWFjb25zIGF1dG9tYXRpY2FsbHkuIFdlIGhhdmUgdG8gbG9hZCBpdApAQCAtMjI5MCwxNiArMjI4NywxNyBAQAogCQlzYy0+aW1hc2sgfD0gQVI1S19JTlRfU1dCQTsKIAogCQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQkJaWYgKGF0aDVrX2h3X2hhc3Zlb2woYWgpKSB7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ibG9jaywgZmxhZ3MpOworCQkJaWYgKGF0aDVrX2h3X2hhc3Zlb2woYWgpKQogCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+YmxvY2ssIGZsYWdzKTsKLQkJCX0KIAkJfSBlbHNlCiAJCQlhdGg1a19iZWFjb25fdXBkYXRlX3RpbWVycyhzYywgLTEpOworCX0gZWxzZSB7CisJCWF0aDVrX2h3X3N0b3BfdHhfZG1hKHNjLT5haCwgc2MtPmJoYWxxKTsKIAl9CiAKIAlhdGg1a19od19zZXRfaW1yKGFoLCBzYy0+aW1hc2spOworCW1taW93YigpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5ibG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg1a190YXNrbGV0X2JlYWNvbih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0yMzYzLDcgKzIzNjEsNyBAQAogCXNjLT5jdXJiYW5kID0gJnNjLT5zYmFuZHNbc2MtPmN1cmNoYW4tPmJhbmRdOwogCXNjLT5pbWFzayA9IEFSNUtfSU5UX1JYT0sgfCBBUjVLX0lOVF9SWEVSUiB8IEFSNUtfSU5UX1JYRU9MIHwKIAkJQVI1S19JTlRfUlhPUk4gfCBBUjVLX0lOVF9UWERFU0MgfCBBUjVLX0lOVF9UWEVPTCB8Ci0JCUFSNUtfSU5UX0ZBVEFMIHwgQVI1S19JTlRfR0xPQkFMOworCQlBUjVLX0lOVF9GQVRBTCB8IEFSNUtfSU5UX0dMT0JBTCB8IEFSNUtfSU5UX1NXSTsKIAlyZXQgPSBhdGg1a19yZXNldChzYywgTlVMTCk7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwpAQCAtMjM4MCw4ICsyMzc4LDggQEAKIAkvKiBTZXQgYWNrIHRvIGJlIHNlbnQgYXQgbG93IGJpdC1yYXRlcyAqLwogCWF0aDVrX2h3X3NldF9hY2tfYml0cmF0ZV9oaWdoKGFoLCBmYWxzZSk7CiAKLQltb2RfdGltZXIoJnNjLT5jYWxpYl90aW0sIHJvdW5kX2ppZmZpZXMoamlmZmllcyArCi0JCQltc2Vjc190b19qaWZmaWVzKGF0aDVrX2NhbGludGVydmFsICogMTAwMCkpKTsKKwkvKiBTZXQgUEhZIGNhbGlicmF0aW9uIGludGV2YWwgKi8KKwlhaC0+YWhfY2FsX2ludHZhbCA9IGF0aDVrX2NhbGludGVydmFsOwogCiAJcmV0ID0gMDsKIGRvbmU6CkBAIC0yNDQ1LDM3ICsyNDQzLDM5IEBACiAJcmV0ID0gYXRoNWtfc3RvcF9sb2NrZWQoc2MpOwogCWlmIChyZXQgPT0gMCAmJiAhdGVzdF9iaXQoQVRIX1NUQVRfSU5WQUxJRCwgc2MtPnN0YXR1cykpIHsKIAkJLyoKLQkJICogU2V0IHRoZSBjaGlwIGluIGZ1bGwgc2xlZXAgbW9kZS4gIE5vdGUgdGhhdCB3ZSBhcmUKLQkJICogY2FyZWZ1bCB0byBkbyB0aGlzIG9ubHkgd2hlbiBicmluZ2luZyB0aGUgaW50ZXJmYWNlCi0JCSAqIGNvbXBsZXRlbHkgdG8gYSBzdG9wLiAgV2hlbiB0aGUgY2hpcCBpcyBpbiB0aGlzIHN0YXRlCi0JCSAqIGl0IG11c3QgYmUgY2FyZWZ1bGx5IHdva2VuIHVwIG9yIHJlZmVyZW5jZXMgdG8KLQkJICogcmVnaXN0ZXJzIGluIHRoZSBQQ0kgY2xvY2sgZG9tYWluIG1heSBmcmVlemUgdGhlIGJ1cwotCQkgKiAoYW5kIHN5c3RlbSkuICBUaGlzIHZhcmllcyBieSBjaGlwIGFuZCBpcyBtb3N0bHkgYW4KLQkJICogaXNzdWUgd2l0aCBuZXdlciBwYXJ0cyB0aGF0IGdvIHRvIHNsZWVwIG1vcmUgcXVpY2tseS4KLQkJICovCi0JCWlmIChzYy0+YWgtPmFoX21hY19zcmV2ID49IDB4NzgpIHsKLQkJCS8qCi0JCQkgKiBYWFgKLQkJCSAqIGRvbid0IHB1dCBuZXdlciBNQUMgcmV2aXNpb25zID4gNy44IHRvIHNsZWVwIGJlY2F1c2UKLQkJCSAqIG9mIHRoZSBhYm92ZSBtZW50aW9uZWQgcHJvYmxlbXMKLQkJCSAqLwotCQkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgIm1hYyB2ZXJzaW9uID4gNy44LCAiCi0JCQkJIm5vdCBwdXR0aW5nIGRldmljZSB0byBzbGVlcFxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX1JFU0VULAotCQkJCSJwdXR0aW5nIGRldmljZSB0byBmdWxsIHNsZWVwXG4iKTsKLQkJCWF0aDVrX2h3X3NldF9wb3dlcihzYy0+YWgsIEFSNUtfUE1fRlVMTF9TTEVFUCwgdHJ1ZSwgMCk7Ci0JCX0KKwkJICogRG9uJ3Qgc2V0IHRoZSBjYXJkIGluIGZ1bGwgc2xlZXAgbW9kZSEKKwkJICoKKwkJICogYSkgV2hlbiB0aGUgZGV2aWNlIGlzIGluIHRoaXMgc3RhdGUgaXQgbXVzdCBiZSBjYXJlZnVsbHkKKwkJICogd29rZW4gdXAgb3IgcmVmZXJlbmNlcyB0byByZWdpc3RlcnMgaW4gdGhlIFBDSSBjbG9jaworCQkgKiBkb21haW4gbWF5IGZyZWV6ZSB0aGUgYnVzIChhbmQgc3lzdGVtKS4gIFRoaXMgdmFyaWVzCisJCSAqIGJ5IGNoaXAgYW5kIGlzIG1vc3RseSBhbiBpc3N1ZSB3aXRoIG5ld2VyIHBhcnRzCisJCSAqIChtYWR3aWZpIHNvdXJjZXMgbWVudGlvbmVkIHNyZXYgPj0gMHg3OCkgdGhhdCBnbyB0bworCQkgKiBzbGVlcCBtb3JlIHF1aWNrbHkuCisJCSAqCisJCSAqIGIpIE9uIG9sZGVyIGNoaXBzIGZ1bGwgc2xlZXAgcmVzdWx0cyBhIHdlaXJkIGJlaGF2aW91cgorCQkgKiBkdXJpbmcgd2FrZXVwLiBJIHRlc3RlZCB2YXJpb3VzIGNhcmRzIHdpdGggc3JldiA8IDB4NzgKKwkJICogYW5kIHRoZXkgZG9uJ3Qgd2FrZSB1cCBhZnRlciBtb2R1bGUgcmVsb2FkLCBhIHNlY29uZAorCQkgKiBtb2R1bGUgcmVsb2FkIGlzIG5lZWRlZCB0byBicmluZyB0aGUgY2FyZCB1cCBhZ2Fpbi4KKwkJICoKKwkJICogVW50aWwgd2UgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gZG9uJ3QgZW5hYmxlCisJCSAqIGZ1bGwgY2hpcCByZXNldCBvbiBhbnkgY2hpcCAodGhpcyBpcyB3aGF0IExlZ2FjeSBIQUwKKwkJICogYW5kIFNhbSdzIEhBTCBkbyBhbnl3YXkpLiBJbnN0ZWFkIFBlcmZvcm0gYSBmdWxsIHJlc2V0CisJCSAqIG9uIHRoZSBkZXZpY2UgKHNhbWUgYXMgaW5pdGlhbCBzdGF0ZSBhZnRlciBhdHRhY2gpIGFuZAorCQkgKiBsZWF2ZSBpdCBpZGxlIChrZWVwIE1BQy9CQiBvbiB3YXJtIHJlc2V0KSAqLworCQlyZXQgPSBhdGg1a19od19vbl9ob2xkKHNjLT5haCk7CisKKwkJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwKKwkJCQkicHV0dGluZyBkZXZpY2UgdG8gc2xlZXBcbiIpOwogCX0KIAlhdGg1a190eGJ1Zl9mcmVlKHNjLCBzYy0+YmJ1Zik7CiAKIAltbWlvd2IoKTsKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKIAotCWRlbF90aW1lcl9zeW5jKCZzYy0+Y2FsaWJfdGltKTsKIAl0YXNrbGV0X2tpbGwoJnNjLT5yeHRxKTsKIAl0YXNrbGV0X2tpbGwoJnNjLT50eHRxKTsKIAl0YXNrbGV0X2tpbGwoJnNjLT5yZXN0cSk7CisJdGFza2xldF9raWxsKCZzYy0+Y2FsaWIpOwogCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKIAogCWF0aDVrX3Jma2lsbF9od19zdG9wKHNjLT5haCk7CkBAIC0yNTMxLDYgKzI1MzEsOSBAQAogCQkJaWYgKHN0YXR1cyAmIEFSNUtfSU5UX0JNSVNTKSB7CiAJCQkJLyogVE9ETyAqLwogCQkJfQorCQkJaWYgKHN0YXR1cyAmIEFSNUtfSU5UX1NXSSkgeworCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5jYWxpYik7CisJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfTUlCKSB7CiAJCQkJLyoKIAkJCQkgKiBUaGVzZSBzdGF0cyBhcmUgYWxzbyB1c2VkIGZvciBBTkkgaSB0aGluawpAQCAtMjU0Nyw2ICsyNTUwLDggQEAKIAlpZiAodW5saWtlbHkoIWNvdW50ZXIpKQogCQlBVEg1S19XQVJOKHNjLCAidG9vIG1hbnkgaW50ZXJydXB0cywgZ2l2aW5nIHVwIGZvciBub3dcbiIpOwogCisJYXRoNWtfaHdfY2FsaWJyYXRpb25fcG9sbChhaCk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTI1NjMsMTEgKzI1NjgsMTkgQEAKICAqIGZvciB0ZW1wZXJhdHVyZS9lbnZpcm9ubWVudCBjaGFuZ2VzLgogICovCiBzdGF0aWMgdm9pZAotYXRoNWtfY2FsaWJyYXRlKHVuc2lnbmVkIGxvbmcgZGF0YSkKK2F0aDVrX3Rhc2tsZXRfY2FsaWJyYXRlKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gKHZvaWQgKilkYXRhOwogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAKKwkvKiBPbmx5IGZ1bGwgY2FsaWJyYXRpb24gZm9yIG5vdyAqLworCWlmIChhaC0+YWhfc3dpX21hc2sgIT0gQVI1S19TV0lfRlVMTF9DQUxJQlJBVElPTikKKwkJcmV0dXJuOworCisJLyogU3RvcCBxdWV1ZXMgc28gdGhhdCBjYWxpYnJhdGlvbgorCSAqIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggdHggKi8KKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKKwogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQ0FMSUJSQVRFLCAiY2hhbm5lbCAldS8leFxuIiwKIAkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKHNjLT5jdXJjaGFuLT5jZW50ZXJfZnJlcSksCiAJCXNjLT5jdXJjaGFuLT5od192YWx1ZSk7CkBAIC0yNTg1LDggKzI1OTgsMTEgQEAKIAkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKIAkJCQlzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEpKTsKIAotCW1vZF90aW1lcigmc2MtPmNhbGliX3RpbSwgcm91bmRfamlmZmllcyhqaWZmaWVzICsKLQkJCW1zZWNzX3RvX2ppZmZpZXMoYXRoNWtfY2FsaW50ZXJ2YWwgKiAxMDAwKSkpOworCWFoLT5haF9zd2lfbWFzayA9IDA7CisKKwkvKiBXYWtlIHF1ZXVlcyAqLworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhzYy0+aHcpOworCiB9CiAKIApAQCAtMjU5OCw2ICsyNjE0LDE0IEBACiBhdGg1a190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisKKwlyZXR1cm4gYXRoNWtfdHhfcXVldWUoaHcsIHNrYiwgc2MtPnR4cSk7Cit9CisKK3N0YXRpYyBpbnQgYXRoNWtfdHhfcXVldWUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBhdGg1a190eHEgKnR4cSkKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJc3RydWN0IGF0aDVrX2J1ZiAqYmY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaGRybGVuOwpAQCAtMjY0MSw3ICsyNjY1LDcgQEAKIAogCWJmLT5za2IgPSBza2I7CiAKLQlpZiAoYXRoNWtfdHhidWZfc2V0dXAoc2MsIGJmKSkgeworCWlmIChhdGg1a190eGJ1Zl9zZXR1cChzYywgYmYsIHR4cSkpIHsKIAkJYmYtPnNrYiA9IE5VTEw7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+dHhidWZsb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmc2MtPnR4YnVmKTsKQEAgLTI2NzYsNyArMjcwMCw3IEBACiAJCXNjLT5jdXJjaGFuID0gY2hhbjsKIAkJc2MtPmN1cmJhbmQgPSAmc2MtPnNiYW5kc1tjaGFuLT5iYW5kXTsKIAl9Ci0JcmV0ID0gYXRoNWtfaHdfcmVzZXQoYWgsIHNjLT5vcG1vZGUsIHNjLT5jdXJjaGFuLCB0cnVlKTsKKwlyZXQgPSBhdGg1a19od19yZXNldChhaCwgc2MtPm9wbW9kZSwgc2MtPmN1cmNoYW4sIGNoYW4gIT0gTlVMTCk7CiAJaWYgKHJldCkgewogCQlBVEg1S19FUlIoc2MsICJjYW4ndCByZXNldCBoYXJkd2FyZSAoJWQpXG4iLCByZXQpOwogCQlnb3RvIGVycjsKQEAgLTI3NTcsNiArMjc4MSw3IEBACiAJfQogCiAJYXRoNWtfaHdfc2V0X2xsYWRkcihzYy0+YWgsIGNvbmYtPm1hY19hZGRyKTsKKwlhdGg1a19tb2RlX3NldHVwKHNjKTsKIAogCXJldCA9IDA7CiBlbmQ6CkBAIC0yNzc2LDcgKzI4MDEsNiBAQAogCQlnb3RvIGVuZDsKIAogCWF0aDVrX2h3X3NldF9sbGFkZHIoc2MtPmFoLCBtYWMpOwotCWF0aDVrX2JlYWNvbl9kaXNhYmxlKHNjKTsKIAlzYy0+dmlmID0gTlVMTDsKIGVuZDoKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKQEAgLTI3OTUsOSArMjgxOSwxMSBAQAogCiAJbXV0ZXhfbG9jaygmc2MtPmxvY2spOwogCi0JcmV0ID0gYXRoNWtfY2hhbl9zZXQoc2MsIGNvbmYtPmNoYW5uZWwpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIHVubG9jazsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7CisJCXJldCA9IGF0aDVrX2NoYW5fc2V0KHNjLCBjb25mLT5jaGFubmVsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHVubG9jazsKKwl9CiAKIAlpZiAoKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpICYmCiAJKHNjLT5wb3dlcl9sZXZlbCAhPSBjb25mLT5wb3dlcl9sZXZlbCkpIHsKQEAgLTI4MzEsNiArMjg1NywzNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1NjQgYXRoNWtfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQoreworCXUzMiBtZmlsdFsyXSwgdmFsOworCWludCBpOworCXU4IHBvczsKKworCW1maWx0WzBdID0gMDsKKwltZmlsdFsxXSA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQlpZiAoIW1jbGlzdCkKKwkJCWJyZWFrOworCQkvKiBjYWxjdWxhdGUgWE9SIG9mIGVpZ2h0IDYtYml0IHZhbHVlcyAqLworCQl2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMzIobWNsaXN0LT5kbWlfYWRkciArIDApOworCQlwb3MgPSAodmFsID4+IDE4KSBeICh2YWwgPj4gMTIpIF4gKHZhbCA+PiA2KSBeIHZhbDsKKwkJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTMyKG1jbGlzdC0+ZG1pX2FkZHIgKyAzKTsKKwkJcG9zIF49ICh2YWwgPj4gMTgpIF4gKHZhbCA+PiAxMikgXiAodmFsID4+IDYpIF4gdmFsOworCQlwb3MgJj0gMHgzZjsKKwkJbWZpbHRbcG9zIC8gMzJdIHw9ICgxIDw8IChwb3MgJSAzMikpOworCQkvKiBYWFg6IHdlIG1pZ2h0IGJlIGFibGUgdG8ganVzdCBkbyB0aGlzIGluc3RlYWQsCisJCSogYnV0IG5vdCBzdXJlLCBuZWVkcyB0ZXN0aW5nLCBpZiB3ZSBkbyB1c2UgdGhpcyB3ZSdkCisJCSogbmVldCB0byBpbmZvcm0gYmVsb3cgdG8gbm90IHJlc2V0IHRoZSBtY2FzdCAqLworCQkvKiBhdGg1a19od19zZXRfbWNhc3RfZmlsdGVyaW5kZXgoYWgsCisJCSAqICAgICAgbWNsaXN0LT5kbWlfYWRkcls1XSk7ICovCisJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gKCh1NjQpKG1maWx0WzFdKSA8PCAzMikgfCBtZmlsdFswXTsKK30KKwogI2RlZmluZSBTVVBQT1JURURfRklGX0ZMQUdTIFwKIAlGSUZfUFJPTUlTQ19JTl9CU1MgfCAgRklGX0FMTE1VTFRJIHwgRklGX0ZDU0ZBSUwgfCBcCiAJRklGX1BMQ1BGQUlMIHwgRklGX0NPTlRST0wgfCBGSUZfT1RIRVJfQlNTIHwgXApAQCAtMjg1NiwxNiArMjkxMywxNiBAQAogc3RhdGljIHZvaWQgYXRoNWtfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCXVuc2lnbmVkIGludCAqbmV3X2ZsYWdzLAotCQlpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQorCQl1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwotCXUzMiBtZmlsdFsyXSwgdmFsLCByZmlsdDsKLQl1OCBwb3M7Ci0JaW50IGk7CisJdTMyIG1maWx0WzJdLCByZmlsdDsKIAotCW1maWx0WzBdID0gMDsKLQltZmlsdFsxXSA9IDA7CisJbXV0ZXhfbG9jaygmc2MtPmxvY2spOworCisJbWZpbHRbMF0gPSBtdWx0aWNhc3Q7CisJbWZpbHRbMV0gPSBtdWx0aWNhc3QgPj4gMzI7CiAKIAkvKiBPbmx5IGRlYWwgd2l0aCBzdXBwb3J0ZWQgZmxhZ3MgKi8KIAljaGFuZ2VkX2ZsYWdzICY9IFNVUFBPUlRFRF9GSUZfRkxBR1M7CkBAIC0yODkxLDI0ICsyOTQ4LDYgQEAKIAlpZiAoKm5ld19mbGFncyAmIEZJRl9BTExNVUxUSSkgewogCQltZmlsdFswXSA9ICB+MDsKIAkJbWZpbHRbMV0gPSAgfjA7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKLQkJCWlmICghbWNsaXN0KQotCQkJCWJyZWFrOwotCQkJLyogY2FsY3VsYXRlIFhPUiBvZiBlaWdodCA2LWJpdCB2YWx1ZXMgKi8KLQkJCXZhbCA9IGdldF91bmFsaWduZWRfbGUzMihtY2xpc3QtPmRtaV9hZGRyICsgMCk7Ci0JCQlwb3MgPSAodmFsID4+IDE4KSBeICh2YWwgPj4gMTIpIF4gKHZhbCA+PiA2KSBeIHZhbDsKLQkJCXZhbCA9IGdldF91bmFsaWduZWRfbGUzMihtY2xpc3QtPmRtaV9hZGRyICsgMyk7Ci0JCQlwb3MgXj0gKHZhbCA+PiAxOCkgXiAodmFsID4+IDEyKSBeICh2YWwgPj4gNikgXiB2YWw7Ci0JCQlwb3MgJj0gMHgzZjsKLQkJCW1maWx0W3BvcyAvIDMyXSB8PSAoMSA8PCAocG9zICUgMzIpKTsKLQkJCS8qIFhYWDogd2UgbWlnaHQgYmUgYWJsZSB0byBqdXN0IGRvIHRoaXMgaW5zdGVhZCwKLQkJCSogYnV0IG5vdCBzdXJlLCBuZWVkcyB0ZXN0aW5nLCBpZiB3ZSBkbyB1c2UgdGhpcyB3ZSdkCi0JCQkqIG5lZXQgdG8gaW5mb3JtIGJlbG93IHRvIG5vdCByZXNldCB0aGUgbWNhc3QgKi8KLQkJCS8qIGF0aDVrX2h3X3NldF9tY2FzdF9maWx0ZXJpbmRleChhaCwKLQkJCSAqICAgICAgbWNsaXN0LT5kbWlfYWRkcls1XSk7ICovCi0JCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7Ci0JCX0KIAl9CiAKIAkvKiBUaGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyAqLwpAQCAtMjkzMiwyMiArMjk3MSwyNSBAQAogCiAJLyogWFhYIG1vdmUgdGhlc2UgdG8gbWFjODAyMTEsIGFuZCBhZGQgYSBiZWFjb24gSUZGIGZsYWcgdG8gbWFjODAyMTEgKi8KIAotCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX0NPTlRST0wgfCBBUjVLX1JYX0ZJTFRFUl9CRUFDT04gfAotCQkJQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfCBBUjVLX1JYX0ZJTFRFUl9QUk9NOwotCWlmIChzYy0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX1BST0JFUkVROwotCWlmIChzYy0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JCXNjLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCAmJgotCQl0ZXN0X2JpdChBVEhfU1RBVF9QUk9NSVNDLCBzYy0+c3RhdHVzKSkKLQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfUFJPTTsKLQlpZiAoKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJiBzYy0+YXNzb2MpIHx8Ci0JCXNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQkVBQ09OOwotCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX0NPTlRST0wgfCBBUjVLX1JYX0ZJTFRFUl9CRUFDT04gfAotCQkJQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfCBBUjVLX1JYX0ZJTFRFUl9QUk9NOworCXN3aXRjaCAoc2MtPm9wbW9kZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCXJmaWx0IHw9IEFSNUtfUlhfRklMVEVSX0NPTlRST0wgfAorCQkJIEFSNUtfUlhfRklMVEVSX0JFQUNPTiB8CisJCQkgQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfAorCQkJIEFSNUtfUlhfRklMVEVSX1BST007CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfUFJPQkVSRVEgfAorCQkJIEFSNUtfUlhfRklMVEVSX0JFQUNPTjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAoc2MtPmFzc29jKQorCQkJcmZpbHQgfD0gQVI1S19SWF9GSUxURVJfQkVBQ09OOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCS8qIFNldCBmaWx0ZXJzICovCiAJYXRoNWtfaHdfc2V0X3J4X2ZpbHRlcihhaCwgcmZpbHQpOwpAQCAtMjk1Nyw2ICsyOTk5LDggQEAKIAkvKiBTZXQgdGhlIGNhY2hlZCBodyBmaWx0ZXIgZmxhZ3MsIHRoaXMgd2lsbCBhbHRlciBhY3R1YWxseQogCSAqIGJlIHNldCBpbiBIVyAqLwogCXNjLT5maWx0ZXJfZmxhZ3MgPSByZmlsdDsKKworCW11dGV4X3VubG9jaygmc2MtPmxvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0yOTc4LDYgKzMwMjIsOSBAQAogCWNhc2UgQUxHX1RLSVA6CiAJCWJyZWFrOwogCWNhc2UgQUxHX0NDTVA6CisJCWlmIChzYy0+YWgtPmFoX2Flc19zdXBwb3J0KQorCQkJYnJlYWs7CisKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CkBAIC0zMTA4LDI1ICszMTU1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogIFVwZGF0ZSB0aGUgYmVhY29uIGFuZCByZWNvbmZpZ3VyZSB0aGUgYmVhY29uIHF1ZXVlcy4KLSAqLwotc3RhdGljIHZvaWQKLWF0aDVrX2JlYWNvbl9yZWNvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5ibG9jaywgZmxhZ3MpOwotCXJldCA9IGF0aDVrX2JlYWNvbl91cGRhdGUoaHcsIHZpZik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmJsb2NrLCBmbGFncyk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCWF0aDVrX2JlYWNvbl9jb25maWcoc2MpOwotCQltbWlvd2IoKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkCiBzZXRfYmVhY29uX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCiB7CkBAIC0zMTQ5LDYgKzMxNzcsNyBAQAogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7CiAJaWYgKFdBUk5fT04oc2MtPnZpZiAhPSB2aWYpKQpAQCAtMzE3MCwxNSArMzE5OSwzNyBAQAogCQlzYy0+YXNzb2MgPSBic3NfY29uZi0+YXNzb2M7CiAJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQlzZXRfYmVhY29uX2ZpbHRlcihodywgc2MtPmFzc29jKTsKKwkJYXRoNWtfaHdfc2V0X2xlZHN0YXRlKHNjLT5haCwgc2MtPmFzc29jID8KKwkJCUFSNUtfTEVEX0FTU09DIDogQVI1S19MRURfSU5JVCk7CiAJfQogCi0JaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT04gJiYKLQkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQgfHwKLQkgICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkpIHsKLQkJYXRoNWtfYmVhY29uX3JlY29uZmlnKGh3LCB2aWYpOworCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQkVBQ09OKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+YmxvY2ssIGZsYWdzKTsKKwkJYXRoNWtfYmVhY29uX3VwZGF0ZShodywgdmlmKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmJsb2NrLCBmbGFncyk7CiAJfQogCisJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkKKwkJc2MtPmVuYWJsZV9iZWFjb24gPSBic3NfY29uZi0+ZW5hYmxlX2JlYWNvbjsKKworCWlmIChjaGFuZ2VzICYgKEJTU19DSEFOR0VEX0JFQUNPTiB8IEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEIHwKKwkJICAgICAgIEJTU19DSEFOR0VEX0JFQUNPTl9JTlQpKQorCQlhdGg1a19iZWFjb25fY29uZmlnKHNjKTsKKwogIHVubG9jazoKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKIH0KKworc3RhdGljIHZvaWQgYXRoNWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CisJaWYgKCFzYy0+YXNzb2MpCisJCWF0aDVrX2h3X3NldF9sZWRzdGF0ZShzYy0+YWgsIEFSNUtfTEVEX1NDQU4pOworfQorCitzdGF0aWMgdm9pZCBhdGg1a19zd19zY2FuX2NvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlhdGg1a19od19zZXRfbGVkc3RhdGUoc2MtPmFoLCBzYy0+YXNzb2MgPworCQlBUjVLX0xFRF9BU1NPQyA6IEFSNUtfTEVEX0lOSVQpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKaW5kZXggZjliN2YyZi4uYTI4YzQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCkBAIC01MSw2ICs1MSw5IEBACiAjaW5jbHVkZSAiYXRoNWsuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCisjaW5jbHVkZSAiLi4vcmVnZC5oIgorI2luY2x1ZGUgIi4uL2F0aC5oIgorCiAjZGVmaW5lCUFUSF9SWEJVRgk0MAkJLyogbnVtYmVyIG9mIFJYIGJ1ZmZlcnMgKi8KICNkZWZpbmUJQVRIX1RYQlVGCTIwMAkJLyogbnVtYmVyIG9mIFRYIGJ1ZmZlcnMgKi8KICNkZWZpbmUgQVRIX0JDQlVGCTEJCS8qIG51bWJlciBvZiBiZWFjb24gYnVmZmVycyAqLwpAQCAtMTEyLDEwICsxMTUsMTAgQEAKICAqIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiBhIGRldmljZSAqLwogc3RydWN0IGF0aDVrX3NvZnRjIHsKIAlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7CQkvKiBmb3IgZG1hIG1hcHBpbmcgKi8KKwlzdHJ1Y3QgYXRoX2NvbW1vbgljb21tb247CiAJdm9pZCBfX2lvbWVtCQkqaW9iYXNlOwkvKiBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CQkvKiBkZXYtbGV2ZWwgbG9jayAqLwotCS8qIEZJWE1FOiBob3cgbWFueSBkb2VzIGl0IHJlYWxseSBuZWVkPyAqLwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbMTZdOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbQVI1S19OVU1fVFhfUVVFVUVTXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyBsbF9zdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3CSpodzsJCS8qIElFRUUgODAyLjExIGNvbW1vbiAqLwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwpAQCAtMTM1LDcgKzEzOCw2IEBACiAJc3RydWN0IGF0aDVrX2Rlc2MJKmRlc2M7CQkvKiBUWC9SWCBkZXNjcmlwdG9ycyAqLwogCWRtYV9hZGRyX3QJCWRlc2NfZGFkZHI7CS8qIERNQSAocGh5c2ljYWwpIGFkZHJlc3MgKi8KIAlzaXplX3QJCQlkZXNjX2xlbjsJLyogc2l6ZSBvZiBUWC9SWCBkZXNjcmlwdG9ycyAqLwotCXUxNgkJCWNhY2hlbHN6OwkvKiBjYWNoZSBsaW5lIHNpemUgKi8KIAogCURFQ0xBUkVfQklUTUFQKHN0YXR1cywgNSk7CiAjZGVmaW5lIEFUSF9TVEFUX0lOVkFMSUQJMAkJLyogZGlzYWJsZSBoYXJkd2FyZSBhY2Nlc3NlcyAqLwpAQCAtMTcxLDE0ICsxNzMsMTUgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXR4YnVmOwkJLyogdHJhbnNtaXQgYnVmZmVyICovCiAJc3BpbmxvY2tfdAkJdHhidWZsb2NrOwogCXVuc2lnbmVkIGludAkJdHhidWZfbGVuOwkvKiBidWYgY291bnQgaW4gdHhidWYgbGlzdCAqLwotCXN0cnVjdCBhdGg1a190eHEJdHhxc1syXTsJLyogYmVhY29uIGFuZCB0eCAqLwotCi0Jc3RydWN0IGF0aDVrX3R4cQkqdHhxOwkJLyogYmVhY29uIGFuZCB0eCovCisJc3RydWN0IGF0aDVrX3R4cQl0eHFzW0FSNUtfTlVNX1RYX1FVRVVFU107CS8qIHR4IHF1ZXVlcyAqLworCXN0cnVjdCBhdGg1a190eHEJKnR4cTsJCS8qIG1haW4gdHggcXVldWUgKi8KIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdHh0cTsJCS8qIHR4IGludHIgdGFza2xldCAqLwogCXN0cnVjdCBhdGg1a19sZWQJdHhfbGVkOwkJLyogdHggbGVkICovCiAKIAlzdHJ1Y3QgYXRoNWtfcmZraWxsCXJmX2tpbGw7CiAKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJY2FsaWI7CQkvKiBjYWxpYnJhdGlvbiB0YXNrbGV0ICovCisKIAlzcGlubG9ja190CQlibG9jazsJCS8qIHByb3RlY3RzIGJlYWNvbiAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAliZWFjb250cTsJLyogYmVhY29uIGludHIgdGFza2xldCAqLwogCXN0cnVjdCBhdGg1a19idWYJKmJidWY7CQkvKiBiZWFjb24gYnVmZmVyICovCkBAIC0xODcsMTAgKzE5MCwxMSBAQAogCQkJCWJpbnR2YWwsCS8qIGJlYWNvbiBpbnRlcnZhbCBpbiBUVSAqLwogCQkJCWJzZW50OwogCXVuc2lnbmVkIGludAkJbmV4dHRidHQ7CS8qIG5leHQgYmVhY29uIHRpbWUgaW4gVFUgKi8KKwlzdHJ1Y3QgYXRoNWtfdHhxCSpjYWJxOwkJLyogY29udGVudCBhZnRlciBiZWFjb24gKi8KIAotCXN0cnVjdCB0aW1lcl9saXN0CWNhbGliX3RpbTsJLyogY2FsaWJyYXRpb24gdGltZXIgKi8KIAlpbnQgCQkJcG93ZXJfbGV2ZWw7CS8qIFJlcXVlc3RlZCB0eCBwb3dlciBpbiBkYm0gKi8KIAlib29sCQkJYXNzb2M7CQkvKiBhc3NvY2F0ZSBzdGF0ZSAqLworCWJvb2wJCQllbmFibGVfYmVhY29uOwkvKiB0cnVlIGlmIGJlYWNvbnMgYXJlIG9uICovCiB9OwogCiAjZGVmaW5lIGF0aDVrX2h3X2hhc2Jzc2lkbWFzayhfYWgpIFwKQEAgLTE5OCw0ICsyMDIsMTUgQEAKICNkZWZpbmUgYXRoNWtfaHdfaGFzdmVvbChfYWgpIFwKIAkoYXRoNWtfaHdfZ2V0X2NhcGFiaWxpdHkoX2FoLCBBUjVLX0NBUF9WRU9MLCAwLCBOVUxMKSA9PSAwKQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGhfY29tbW9uICphdGg1a19od19jb21tb24oc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwlyZXR1cm4gJmFoLT5haF9zYy0+Y29tbW9uOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGhfcmVndWxhdG9yeSAqYXRoNWtfaHdfcmVndWxhdG9yeShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXJldHVybiAmKGF0aDVrX2h3X2NvbW1vbihhaCktPnJlZ3VsYXRvcnkpOworCit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuYwppbmRleCA0OTA0YTA3Li43NDc1MDhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZGVidWcuYwpAQCAtMzgwLDEzICszODAsMTUgQEAKIAlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSwKIAkJCQlhdGg1a19nbG9iYWxfZGVidWdmcyk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19kZWJ1ZyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRlYnVnIiwgU19JV1VTUiB8IFNfSVJVR08sCisJc2MtPmRlYnVnLmRlYnVnZnNfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZWJ1ZyIsCisJCQkJU19JV1VTUiB8IFNfSVJVU1IsCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfZGVidWcpOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfcmVnaXN0ZXJzID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVnaXN0ZXJzIiwgU19JUlVHTywKKwlzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVVNSLAogCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3JlZ2lzdGVycyk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc19iZWFjb24gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiZWFjb24iLCBTX0lXVVNSIHwgU19JUlVHTywKKwlzYy0+ZGVidWcuZGVidWdmc19iZWFjb24gPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJiZWFjb24iLAorCQkJCVNfSVdVU1IgfCBTX0lSVVNSLAogCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX2JlYWNvbik7CiAKIAlzYy0+ZGVidWcuZGVidWdmc19yZXNldCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlc2V0IiwgU19JV1VTUiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uYwppbmRleCBjNTZiNDk0Li42NDQ5NjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5jCkBAIC0xNjcsNiArMTY3LDE2IEBACiAJZWUtPmVlX3Jma2lsbF9waW4gPSAodTgpIEFSNUtfUkVHX01TKHZhbCwgQVI1S19FRVBST01fUkZLSUxMX0dQSU9fU0VMKTsKIAllZS0+ZWVfcmZraWxsX3BvbCA9IHZhbCAmIEFSNUtfRUVQUk9NX1JGS0lMTF9QT0xBUklUWSA/IHRydWUgOiBmYWxzZTsKIAorCS8qIENoZWNrIGlmIFBDSUVfT0ZGU0VUIHBvaW50cyB0byBQQ0lFX1NFUkRFU19TRUNUSU9OCisJICogYW5kIGVuYWJsZSBzZXJkZXMgcHJvZ3JhbW1pbmcgaWYgbmVlZGVkLgorCSAqCisJICogWFhYOiBTZXJkZXMgdmFsdWVzIHNlZW0gdG8gYmUgZml4ZWQgc28KKwkgKiBubyBuZWVkIHRvIHJlYWQgdGhlbSBoZXJlLCB3ZSB3cml0ZSB0aGVtCisJICogZHVyaW5nIGF0aDVrX2h3X2F0dGFjaCAqLworCUFSNUtfRUVQUk9NX1JFQUQoQVI1S19FRVBST01fUENJRV9PRkZTRVQsIHZhbCk7CisJZWUtPmVlX3NlcmRlcyA9ICh2YWwgPT0gQVI1S19FRVBST01fUENJRV9TRVJERVNfU0VDVElPTikgPworCQkJCQkJCXRydWUgOiBmYWxzZTsKKwogCXJldHVybiAwOwogfQogCkBAIC00MDQsMjcgKzQxNCwxMSBAQAogCQlicmVhazsKIAl9CiAKLWRvbmU6Ci0JLyogcmV0dXJuIG5ldyBvZmZzZXQgKi8KLQkqb2Zmc2V0ID0gbzsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVhZCB0dXJibyBtb2RlIGluZm9ybWF0aW9uIG9uIG5ld2VyIEVFUFJPTSB2ZXJzaW9ucwotICovCi1zdGF0aWMgaW50Ci1hdGg1a19lZXByb21fcmVhZF90dXJib19tb2RlcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQkJICAgICAgdTMyICpvZmZzZXQsIHVuc2lnbmVkIGludCBtb2RlKQotewotCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXUzMiBvID0gKm9mZnNldDsKLQl1MTYgdmFsOwotCWludCByZXQ7Ci0KKwkvKgorCSAqIFJlYWQgdHVyYm8gbW9kZSBpbmZvcm1hdGlvbiBvbiBuZXdlciBFRVBST00gdmVyc2lvbnMKKwkgKi8KIAlpZiAoZWUtPmVlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzVfMCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gZG9uZTsKIAogCXN3aXRjaCAobW9kZSl7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKQEAgLTQ1OCw2ICs0NTIsNyBAQAogCQlicmVhazsKIAl9CiAKK2RvbmU6CiAJLyogcmV0dXJuIG5ldyBvZmZzZXQgKi8KIAkqb2Zmc2V0ID0gbzsKIApAQCAtNDk0LDEwICs0ODksNiBAQAogCQlyZXQgPSBhdGg1a19lZXByb21fcmVhZF9tb2RlcyhhaCwgJm9mZnNldCwgbW9kZSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IGF0aDVrX2VlcHJvbV9yZWFkX3R1cmJvX21vZGVzKGFoLCAmb2Zmc2V0LCBtb2RlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogb3ZlcnJpZGUgZm9yIG9sZGVyIGVlcHJvbSB2ZXJzaW9ucyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZWVwcm9tLmgKaW5kZXggNjRiZTczYS4uMDEyM2YzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9lZXByb20uaApAQCAtMTksNiArMTksOSBAQAogLyoKICAqIENvbW1vbiBhcjV4eHggRUVQUk9NIGRhdGEgb2Zmc2V0cyAoc2V0IHRoZXNlIG9uIEFSNUtfRUVQUk9NX0JBU0UpCiAgKi8KKyNkZWZpbmUJQVI1S19FRVBST01fUENJRV9PRkZTRVQJCTB4MDIJLyogQ29udGFpbnMgb2Zmc2V0IHRvIFBDSS1FIGluZm9zICovCisjZGVmaW5lCUFSNUtfRUVQUk9NX1BDSUVfU0VSREVTX1NFQ1RJT04JMHg0MAkvKiBQQ0lFX09GRlNFVCBwb2ludHMgaGVyZSB3aGVuCisJCQkJCQkgKiBTRVJERVMgaW5mb3MgYXJlIHByZXNlbnQgKi8KICNkZWZpbmUgQVI1S19FRVBST01fTUFHSUMJCTB4MDAzZAkvKiBFRVBST00gTWFnaWMgbnVtYmVyICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX01BR0lDX1ZBTFVFCQkweDVhYTUJLyogRGVmYXVsdCAtIGZvdW5kIG9uIEVFUFJPTSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9NQUdJQ181MjEyCQkweDAwMDAxNDVjIC8qIDUyMTIgKi8KQEAgLTM5MSw2ICszOTQsNyBAQAogCXU4CWVlX3Jma2lsbF9waW47CiAJYm9vbAllZV9yZmtpbGxfcG9sOwogCWJvb2wJZWVfaXNfaGI2MzsKKwlib29sCWVlX3NlcmRlczsKIAl1MTYJZWVfbWlzYzA7CiAJdTE2CWVlX21pc2MxOwogCXUxNgllZV9taXNjMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYwppbmRleCA4NzY3MjVmLi5iNzY3YzNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jCkBAIC02OSw2ICs2OSw4IEBACiAJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0FaV0FWRSwgMHgxMDI2KSwgQVRIX0xFRCgzLCAwKSB9LAogCS8qIElCTSBUaGlua1BhZCBBUjVCWEI2IChsZWdvdmluaUBzcGlyby5maXNpY2EudW5pcGQuaXQpICovCiAJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX0lCTSwgMHgwNThhKSwgQVRIX0xFRCgxLCAwKSB9LAorCS8qIEhQIENvbXBhcSBDNzAwIChuaXRyb3VzbnJnQGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfSFAsIDB4MDEzN2IpLCBBVEhfTEVEKDMsIDEpIH0sCiAJLyogSUJNLXNwZWNpZmljIEFSNTIxMiAoYWxsIG90aGVycykgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTJfSUJNKSwgQVRIX0xFRCgwLCAwKSB9LAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCmluZGV4IGE4NzZjYTguLjFhMDM5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKQEAgLTc0MCwxMyArNzQwLDIyIEBACiAJCQkJCQlBUjVLX1JGX1hQRF9HQUlOLCB0cnVlKTsKIAogCQl9IGVsc2UgewotCQkJLyogVE9ETzogU2V0IGhpZ2ggYW5kIGxvdyBnYWluIGJpdHMgKi8KLQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKLQkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQl1OCAqcGRnX2N1cnZlX3RvX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W2VlX21vZGVdOworCQkJaWYgKGVlLT5lZV9wZF9nYWluc1tlZV9tb2RlXSA+IDEpIHsKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsCisJCQkJCQlwZGdfY3VydmVfdG9faWR4WzBdLAogCQkJCQkJQVI1S19SRl9QRF9HQUlOX0xPLCB0cnVlKTsKLQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKLQkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJcGRnX2N1cnZlX3RvX2lkeFsxXSwKIAkJCQkJCUFSNUtfUkZfUERfR0FJTl9ISSwgdHJ1ZSk7CisJCQl9IGVsc2UgeworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCXBkZ19jdXJ2ZV90b19pZHhbMF0sCisJCQkJCQlBUjVLX1JGX1BEX0dBSU5fTE8sIHRydWUpOworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCXBkZ19jdXJ2ZV90b19pZHhbMF0sCisJCQkJCQlBUjVLX1JGX1BEX0dBSU5fSEksIHRydWUpOworCQkJfQogCiAJCQkvKiBMb3dlciBzeW50aCB2b2x0YWdlIG9uIFJldiAyICovCiAJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDIsCkBAIC0xMDg1LDggKzEwOTQsNyBAQAogCQkJCUFSNUtfUEhZX0NDS1RYQ1RMX1dPUkxEKTsKIAl9CiAKLQlhaC0+YWhfY3VycmVudF9jaGFubmVsLmNlbnRlcl9mcmVxID0gY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0JYWgtPmFoX2N1cnJlbnRfY2hhbm5lbC5od192YWx1ZSA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCWFoLT5haF9jdXJyZW50X2NoYW5uZWwgPSBjaGFubmVsOwogCWFoLT5haF90dXJibyA9IGNoYW5uZWwtPmh3X3ZhbHVlID09IENIQU5ORUxfVCA/IHRydWUgOiBmYWxzZTsKIAogCXJldHVybiAwOwpAQCAtMTA5Niw2ICsxMTA0LDI5IEBACiAgIFBIWSBjYWxpYnJhdGlvbgogXCoqKioqKioqKioqKioqKioqLwogCit2b2lkCithdGg1a19od19jYWxpYnJhdGlvbl9wb2xsKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJLyogQ2FsaWJyYXRpb24gaW50ZXJ2YWwgaW4gamlmZmllcyAqLworCXVuc2lnbmVkIGxvbmcgY2FsX2ludHZhbDsKKworCWNhbF9pbnR2YWwgPSBtc2Vjc190b19qaWZmaWVzKGFoLT5haF9jYWxfaW50dmFsICogMTAwMCk7CisKKwkvKiBJbml0aWFsaXplIHRpbWVzdGFtcCBpZiBuZWVkZWQgKi8KKwlpZiAoIWFoLT5haF9jYWxfdHN0YW1wKQorCQlhaC0+YWhfY2FsX3RzdGFtcCA9IGppZmZpZXM7CisKKwkvKiBGb3Igbm93IHdlIGFsd2F5cyBkbyBmdWxsIGNhbGlicmF0aW9uCisJICogTWFyayBzb2Z0d2FyZSBpbnRlcnJ1cHQgbWFzayBhbmQgZmlyZSBzb2Z0d2FyZQorCSAqIGludGVycnVwdCAoYml0IGdldHMgYXV0by1jbGVhcmVkKSAqLworCWlmICh0aW1lX2lzX2JlZm9yZV9lcV9qaWZmaWVzKGFoLT5haF9jYWxfdHN0YW1wICsgY2FsX2ludHZhbCkpIHsKKwkJYWgtPmFoX2NhbF90c3RhbXAgPSBqaWZmaWVzOworCQlhaC0+YWhfc3dpX21hc2sgPSBBUjVLX1NXSV9GVUxMX0NBTElCUkFUSU9OOworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19DUiwgQVI1S19DUl9TV0kpOworCX0KKworfQorCiAvKioKICAqIGF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uIC0gcGVyZm9ybSBQSFkgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24KICAqCkBAIC0xNzMxLDcgKzE3NjIsNyBAQAogdm9pZAogYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBhbnRfbW9kZSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSAmYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBhaC0+YWhfY3VycmVudF9jaGFubmVsOwogCWJvb2wgdXNlX2RlZl9mb3JfdHgsIHVwZGF0ZV9kZWZfb25fdHgsIHVzZV9kZWZfZm9yX3J0cywgZmFzdF9kaXY7CiAJYm9vbCB1c2VfZGVmX2Zvcl9zZzsKIAl1OCBkZWZfYW50LCB0eF9hbnQsIGVlX21vZGU7CkBAIC0xODk3LDggKzE5MjgsOSBAQAogCXMxNiBtaW5fcHdyTCwgbWluX3B3clI7CiAJczE2IHB3cl9pOwogCi0JaWYgKFdBUk5fT04oc3RlcExbMF0gPT0gc3RlcExbMV0gfHwgc3RlcFJbMF0gPT0gc3RlcFJbMV0pKQotCQlyZXR1cm4gMDsKKwkvKiBTb21lIHZlbmRvcnMgd3JpdGUgdGhlIHNhbWUgcGNkYWMgdmFsdWUgdHdpY2UgISEhICovCisJaWYgKHN0ZXBMWzBdID09IHN0ZXBMWzFdIHx8IHN0ZXBSWzBdID09IHN0ZXBSWzFdKQorCQlyZXR1cm4gbWF4KHB3ckxbMF0sIHB3clJbMF0pOwogCiAJaWYgKHB3ckxbMF0gPT0gcHdyTFsxXSkKIAkJbWluX3B3ckwgPSBwd3JMWzBdOwpAQCAtMjE2Niw2ICsyMTk4LDcgQEAKIGF0aDVrX2dldF9tYXhfY3RsX3Bvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoNWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX2VkZ2VfcG93ZXIgKnJlcCA9IGVlLT5lZV9jdGxfcHdyOwogCXU4ICpjdGxfdmFsID0gZWUtPmVlX2N0bDsKQEAgLTIxNzYsNyArMjIwOSw3IEBACiAJdTggY3RsX2lkeCA9IDB4RkY7CiAJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCi0JY3RsX21vZGUgPSBhdGhfcmVnZF9nZXRfYmFuZF9jdGwoJmFoLT5haF9yZWd1bGF0b3J5LCBjaGFubmVsLT5iYW5kKTsKKwljdGxfbW9kZSA9IGF0aF9yZWdkX2dldF9iYW5kX2N0bChyZWd1bGF0b3J5LCBjaGFubmVsLT5iYW5kKTsKIAogCXN3aXRjaCAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX01PREVTKSB7CiAJY2FzZSBDSEFOTkVMX0E6CkBAIC0zMDExLDcgKzMwNDQsNyBAQAogaW50IGF0aDVrX2h3X3NldF90eHBvd2VyX2xpbWl0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IHR4cG93ZXIpCiB7CiAJLypKdXN0IGEgdHJ5IE0uRi4qLwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9ICZhaC0+YWhfY3VycmVudF9jaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CiAJdTggZWVfbW9kZTsKIAogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKaW5kZXggNzM0MDdiMy4uZWVlYmI5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYwpAQCAtMzYyLDcgKzM2Miw3IEBACiAJCX0KIAogCQlpZiAodHEtPnRxaV9yZWFkeV90aW1lICYmCi0JCSh0cS0+dHFpX3R5cGUgIT0gQVI1S19UWF9RVUVVRV9JRF9DQUIpKQorCQkodHEtPnRxaV90eXBlICE9IEFSNUtfVFhfUVVFVUVfQ0FCKSkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9yZWFkeV90aW1lLAogCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfSU5UVkFMKSB8CiAJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCkBAIC00MTEsNyArNDExLDYgQEAKIAkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAogCQkJCUFSNUtfUUNVX01JU0NfRlJTSEVEX0JDTl9TRU5UX0dUIHwKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9ESVMgfAotCQkJCUFSNUtfUUNVX01JU0NfUkRZX1ZFT0xfUE9MSUNZIHwKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9CQ05fRElTKTsKIAogCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKEFSNUtfVFVORV9CRUFDT05fSU5URVJWQUwgLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCmluZGV4IDY4MDliNTRhLi5kZWJhZDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3JlZy5oCkBAIC0zMzksOSArMzM5LDkgQEAKICNkZWZpbmUgQVI1S19TSVNSMgkJMHgwMDhjCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyBbNTIxMStdICovCiAjZGVmaW5lIEFSNUtfU0lTUjJfUUNVX1RYVVJOCTB4MDAwMDAzZmYJLyogTWFzayBmb3IgUUNVX1RYVVJOICovCiAjZGVmaW5lCUFSNUtfU0lTUjJfUUNVX1RYVVJOX1MJMAotI2RlZmluZQlBUjVLX1NJU1IyX01DQUJUCTB4MDAxMDAwMDAJLyogTWFzdGVyIEN5Y2xlIEFib3J0ICovCi0jZGVmaW5lCUFSNUtfU0lTUjJfU1NFUlIJMHgwMDIwMDAwMAkvKiBTaWduYWxlZCBTeXN0ZW0gRXJyb3IgKi8KLSNkZWZpbmUJQVI1S19TSVNSMl9EUEVSUgkweDAwNDAwMDAwCS8qIEJ1cyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUJQVI1S19TSVNSMl9NQ0FCVAkweDAwMDEwMDAwCS8qIE1hc3RlciBDeWNsZSBBYm9ydCAqLworI2RlZmluZQlBUjVLX1NJU1IyX1NTRVJSCTB4MDAwMjAwMDAJLyogU2lnbmFsZWQgU3lzdGVtIEVycm9yICovCisjZGVmaW5lCUFSNUtfU0lTUjJfRFBFUlIJMHgwMDA0MDAwMAkvKiBCdXMgcGFyaXR5IGVycm9yICovCiAjZGVmaW5lCUFSNUtfU0lTUjJfVElNCQkweDAxMDAwMDAwCS8qIFs1MjEyK10gKi8KICNkZWZpbmUJQVI1S19TSVNSMl9DQUJfRU5ECTB4MDIwMDAwMDAJLyogWzUyMTIrXSAqLwogI2RlZmluZQlBUjVLX1NJU1IyX0RUSU1fU1lOQwkweDA0MDAwMDAwCS8qIERUSU0gc3luYyBsb3N0IFs1MjEyK10gKi8KQEAgLTQzMCw5ICs0MzAsOSBAQAogI2RlZmluZSBBUjVLX1NJTVIyCQkweDAwYWMJCQkvKiBSZWdpc3RlciBBZGRyZXNzIFs1MjExK10gKi8KICNkZWZpbmUgQVI1S19TSU1SMl9RQ1VfVFhVUk4JMHgwMDAwMDNmZgkvKiBNYXNrIGZvciBRQ1VfVFhVUk4gKi8KICNkZWZpbmUgQVI1S19TSU1SMl9RQ1VfVFhVUk5fUwkwCi0jZGVmaW5lCUFSNUtfU0lNUjJfTUNBQlQJMHgwMDEwMDAwMAkvKiBNYXN0ZXIgQ3ljbGUgQWJvcnQgKi8KLSNkZWZpbmUJQVI1S19TSU1SMl9TU0VSUgkweDAwMjAwMDAwCS8qIFNpZ25hbGVkIFN5c3RlbSBFcnJvciAqLwotI2RlZmluZQlBUjVLX1NJTVIyX0RQRVJSCTB4MDA0MDAwMDAJLyogQnVzIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlBUjVLX1NJTVIyX01DQUJUCTB4MDAwMTAwMDAJLyogTWFzdGVyIEN5Y2xlIEFib3J0ICovCisjZGVmaW5lCUFSNUtfU0lNUjJfU1NFUlIJMHgwMDAyMDAwMAkvKiBTaWduYWxlZCBTeXN0ZW0gRXJyb3IgKi8KKyNkZWZpbmUJQVI1S19TSU1SMl9EUEVSUgkweDAwMDQwMDAwCS8qIEJ1cyBwYXJpdHkgZXJyb3IgKi8KICNkZWZpbmUJQVI1S19TSU1SMl9USU0JCTB4MDEwMDAwMDAJLyogWzUyMTIrXSAqLwogI2RlZmluZQlBUjVLX1NJTVIyX0NBQl9FTkQJMHgwMjAwMDAwMAkvKiBbNTIxMitdICovCiAjZGVmaW5lCUFSNUtfU0lNUjJfRFRJTV9TWU5DCTB4MDQwMDAwMDAJLyogRFRJTSBTeW5jIGxvc3QgWzUyMTIrXSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCBiZDBhOTdhLi4zNGUxM2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtMjU4LDI5ICsyNTgsMzUgQEAKIAkJaWYgKCFzZXRfY2hpcCkKIAkJCWdvdG8gY29tbWl0OwogCi0JCS8qIFByZXNlcnZlIHNsZWVwIGR1cmF0aW9uICovCiAJCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19TTEVFUF9DVEwpOworCisJCS8qIElmIGNhcmQgaXMgZG93biB3ZSAnbGwgZ2V0IDB4ZmZmZi4uLiBzbyB3ZQorCQkgKiBuZWVkIHRvIGNsZWFuIHRoaXMgdXAgYmVmb3JlIHdlIHdyaXRlIHRoZSByZWdpc3RlcgorCQkgKi8KIAkJaWYgKGRhdGEgJiAweGZmYzAwMDAwKQogCQkJZGF0YSA9IDA7CiAJCWVsc2UKLQkJCWRhdGEgPSBkYXRhICYgMHhmZmZjZmZmZjsKKwkJCS8qIFByZXNlcnZlIHNsZWVwIGR1cmF0aW9uIGV0YyAqLworCQkJZGF0YSA9IGRhdGEgJiB+QVI1S19TTEVFUF9DVExfU0xFOwogCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19TTEVFUF9DVEwpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEgfCBBUjVLX1NMRUVQX0NUTF9TTEVfV0FLRSwKKwkJCQkJCQlBUjVLX1NMRUVQX0NUTCk7CiAJCXVkZWxheSgxNSk7CiAKLQkJZm9yIChpID0gNTA7IGkgPiAwOyBpLS0pIHsKKwkJZm9yIChpID0gMjAwOyBpID4gMDsgaS0tKSB7CiAJCQkvKiBDaGVjayBpZiB0aGUgY2hpcCBkaWQgd2FrZSB1cCAqLwogCQkJaWYgKChhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYKIAkJCQkJQVI1S19QQ0lDRkdfU1BXUl9ETikgPT0gMCkKIAkJCQlicmVhazsKIAogCQkJLyogV2FpdCBhIGJpdCBhbmQgcmV0cnkgKi8KLQkJCXVkZWxheSgyMDApOwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1NMRUVQX0NUTCk7CisJCQl1ZGVsYXkoNTApOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhIHwgQVI1S19TTEVFUF9DVExfU0xFX1dBS0UsCisJCQkJCQkJQVI1S19TTEVFUF9DVEwpOwogCQl9CiAKIAkJLyogRmFpbCBpZiB0aGUgY2hpcCBkaWRuJ3Qgd2FrZSB1cCAqLwotCQlpZiAoaSA8PSAwKQorCQlpZiAoaSA9PSAwKQogCQkJcmV0dXJuIC1FSU87CiAKIAkJYnJlYWs7CkBAIC0yOTAsMTMgKzI5Niw3MCBAQAogCX0KIAogY29tbWl0OgotCWFoLT5haF9wb3dlcl9tb2RlID0gbW9kZTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHN0YWlkLCBBUjVLX1NUQV9JRDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCisgKiBQdXQgZGV2aWNlIG9uIGhvbGQKKyAqCisgKiBQdXQgTUFDIGFuZCBCYXNlYmFuZCBvbiB3YXJtIHJlc2V0IGFuZAorICoga2VlcCB0aGF0IHN0YXRlIChkb24ndCBjbGVhbiBzbGVlcCBjb250cm9sCisgKiByZWdpc3RlcikuIEFmdGVyIHRoaXMgTUFDIGFuZCBCYXNlYmFuZCBhcmUKKyAqIGRpc2FibGVkIGFuZCBhIGZ1bGwgcmVzZXQgaXMgbmVlZGVkIHRvIGNvbWUKKyAqIGJhY2suIFRoaXMgd2F5IHdlIHNhdmUgYXMgbXVjaCBwb3dlciBhcyBwb3NzaWJsZQorICogd2l0aG91dCBwdXRpbmcgdGhlIGNhcmQgb24gZnVsbCBzbGVlcC4KKyAqLworaW50IGF0aDVrX2h3X29uX2hvbGQoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFoLT5haF9zYy0+cGRldjsKKwl1MzIgYnVzX2ZsYWdzOworCWludCByZXQ7CisKKwkvKiBNYWtlIHN1cmUgZGV2aWNlIGlzIGF3YWtlICovCisJcmV0ID0gYXRoNWtfaHdfc2V0X3Bvd2VyKGFoLCBBUjVLX1BNX0FXQUtFLCB0cnVlLCAwKTsKKwlpZiAocmV0KSB7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJmYWlsZWQgdG8gd2FrZXVwIHRoZSBNQUMgQ2hpcFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBQdXQgY2hpcHNldCBvbiB3YXJtIHJlc2V0Li4uCisJICoKKwkgKiBOb3RlOiBwdXRpbmcgUENJIGNvcmUgb24gd2FybSByZXNldCBvbiBQQ0ktRSBjYXJkcworCSAqIHJlc3VsdHMgY2FyZCB0byBoYW5nIGFuZCBhbHdheXMgcmV0dXJuIDB4ZmZmZi4uLiBzbworCSAqIHdlIGluZ29yZSB0aGF0IGZsYWcgZm9yIFBDSS1FIGNhcmRzLiBPbiBQQ0kgY2FyZHMKKwkgKiB0aGlzIGZsYWcgZ2V0cyBjbGVhcmVkIGFmdGVyIDY0IFBDSSBjbG9ja3MuCisJICovCisJYnVzX2ZsYWdzID0gKHBkZXYtPmlzX3BjaWUpID8gMCA6IEFSNUtfUkVTRVRfQ1RMX1BDSTsKKworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgeworCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8CisJCQlBUjVLX1JFU0VUX0NUTF9NQUMgfCBBUjVLX1JFU0VUX0NUTF9ETUEgfAorCQkJQVI1S19SRVNFVF9DVExfUEhZIHwgQVI1S19SRVNFVF9DVExfUENJKTsKKwkJCW1kZWxheSgyKTsKKwl9IGVsc2UgeworCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8CisJCQlBUjVLX1JFU0VUX0NUTF9CQVNFQkFORCB8IGJ1c19mbGFncyk7CisJfQorCisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZmFpbGVkIHRvIHB1dCBkZXZpY2Ugb24gd2FybSByZXNldFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIC4uLndha2V1cCBhZ2FpbiEqLworCXJldCA9IGF0aDVrX2h3X3NldF9wb3dlcihhaCwgQVI1S19QTV9BV0FLRSwgdHJ1ZSwgMCk7CisJaWYgKHJldCkgeworCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZmFpbGVkIHRvIHB1dCBkZXZpY2Ugb24gaG9sZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIEJyaW5nIHVwIE1BQyArIFBIWSBDaGlwcyBhbmQgcHJvZ3JhbSBQTEwKICAqIFRPRE86IEhhbGYvUXVhcnRlciByYXRlIHN1cHBvcnQKICAqLwpAQCAtMzE5LDYgKzM4Miw1MCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qCisJICogUHV0IGNoaXBzZXQgb24gd2FybSByZXNldC4uLgorCSAqCisJICogTm90ZTogcHV0aW5nIFBDSSBjb3JlIG9uIHdhcm0gcmVzZXQgb24gUENJLUUgY2FyZHMKKwkgKiByZXN1bHRzIGNhcmQgdG8gaGFuZyBhbmQgYWx3YXlzIHJldHVybiAweGZmZmYuLi4gc28KKwkgKiB3ZSBpbmdvcmUgdGhhdCBmbGFnIGZvciBQQ0ktRSBjYXJkcy4gT24gUENJIGNhcmRzCisJICogdGhpcyBmbGFnIGdldHMgY2xlYXJlZCBhZnRlciA2NCBQQ0kgY2xvY2tzLgorCSAqLworCWJ1c19mbGFncyA9IChwZGV2LT5pc19wY2llKSA/IDAgOiBBUjVLX1JFU0VUX0NUTF9QQ0k7CisKKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApIHsKKwkJcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NUTF9QQ1UgfAorCQkJQVI1S19SRVNFVF9DVExfTUFDIHwgQVI1S19SRVNFVF9DVExfRE1BIHwKKwkJCUFSNUtfUkVTRVRfQ1RMX1BIWSB8IEFSNUtfUkVTRVRfQ1RMX1BDSSk7CisJCQltZGVsYXkoMik7CisJfSBlbHNlIHsKKwkJcmV0ID0gYXRoNWtfaHdfbmljX3Jlc2V0KGFoLCBBUjVLX1JFU0VUX0NUTF9QQ1UgfAorCQkJQVI1S19SRVNFVF9DVExfQkFTRUJBTkQgfCBidXNfZmxhZ3MpOworCX0KKworCWlmIChyZXQpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXNldCB0aGUgTUFDIENoaXBcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiAuLi53YWtldXAgYWdhaW4hLi4uKi8KKwlyZXQgPSBhdGg1a19od19zZXRfcG93ZXIoYWgsIEFSNUtfUE1fQVdBS0UsIHRydWUsIDApOworCWlmIChyZXQpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXN1bWUgdGhlIE1BQyBDaGlwXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiAuLi5jbGVhciByZXNldCBjb250cm9sIHJlZ2lzdGVyIGFuZCBwdWxsIGRldmljZSBvdXQgb2YKKwkgKiB3YXJtIHJlc2V0ICovCisJaWYgKGF0aDVrX2h3X25pY19yZXNldChhaCwgMCkpIHsKKwkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byB3YXJtIHJlc2V0IHRoZSBNQUMgQ2hpcFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIE9uIGluaXRpYWxpemF0aW9uIHNraXAgUExMIHByb2dyYW1taW5nIHNpbmNlIHdlIGRvbid0IGhhdmUKKwkgKiBhIGNoYW5uZWwgLyBtb2RlIHNldCB5ZXQgKi8KKwlpZiAoaW5pdGlhbCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKIAkJLyoKIAkJICogR2V0IGNoYW5uZWwgbW9kZSBmbGFncwpAQCAtMzg0LDM5ICs0OTEsNiBAQAogCQkJCQlBUjVLX1BIWV9UVVJCTyk7CiAJfQogCi0JLyogcmVzZXRpbmcgUENJIG9uIFBDSS1FIGNhcmRzIHJlc3VsdHMgY2FyZCB0byBoYW5nCi0JICogYW5kIGFsd2F5cyByZXR1cm4gMHhmZmZmLi4uIHNvIHdlIGluZ29yZSB0aGF0IGZsYWcKLQkgKiBmb3IgUENJLUUgY2FyZHMgKi8KLQlidXNfZmxhZ3MgPSAocGRldi0+aXNfcGNpZSkgPyAwIDogQVI1S19SRVNFVF9DVExfUENJOwotCi0JLyogUmVzZXQgY2hpcHNldCAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCkgewotCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8Ci0JCQlBUjVLX1JFU0VUX0NUTF9NQUMgfCBBUjVLX1JFU0VUX0NUTF9ETUEgfAotCQkJQVI1S19SRVNFVF9DVExfUEhZIHwgQVI1S19SRVNFVF9DVExfUENJKTsKLQkJCW1kZWxheSgyKTsKLQl9IGVsc2UgewotCQlyZXQgPSBhdGg1a19od19uaWNfcmVzZXQoYWgsIEFSNUtfUkVTRVRfQ1RMX1BDVSB8Ci0JCQlBUjVLX1JFU0VUX0NUTF9CQVNFQkFORCB8IGJ1c19mbGFncyk7Ci0JfQotCWlmIChyZXQpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXNldCB0aGUgTUFDIENoaXBcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiAuLi53YWtldXAgYWdhaW4hKi8KLQlyZXQgPSBhdGg1a19od19zZXRfcG93ZXIoYWgsIEFSNUtfUE1fQVdBS0UsIHRydWUsIDApOwotCWlmIChyZXQpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byByZXN1bWUgdGhlIE1BQyBDaGlwXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiAuLi5maW5hbCB3YXJtIHJlc2V0ICovCi0JaWYgKGF0aDVrX2h3X25pY19yZXNldChhaCwgMCkpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImZhaWxlZCB0byB3YXJtIHJlc2V0IHRoZSBNQUMgQ2hpcFxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewogCiAJCS8qIC4uLnVwZGF0ZSBQTEwgaWYgbmVlZGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCmluZGV4IDJkNzk2MTAuLmVmNWY1OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9LY29uZmlnCkBAIC0xLDEzICsxLDE4IEBACiBjb25maWcgQVRIOUsKIAl0cmlzdGF0ZSAiQXRoZXJvcyA4MDIuMTFuIHdpcmVsZXNzIGNhcmRzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMQotCXNlbGVjdCBBVEhfQ09NTU9OCiAJc2VsZWN0IE1BQzgwMjExX0xFRFMKIAlzZWxlY3QgTEVEU19DTEFTUwogCXNlbGVjdCBORVdfTEVEUwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3Igd2lyZWxlc3MgYWRhcHRlcnMgYmFzZWQgb24KLQkgIEF0aGVyb3MgSUVFRSA4MDIuMTFuIEFSNTAwOCBhbmQgQVI5MDAxIGZhbWlseSBvZiBjaGlwc2V0cy4KKwkgIEF0aGVyb3MgSUVFRSA4MDIuMTFuIEFSNTAwOCwgQVI5MDAxIGFuZCBBUjkwMDIgZmFtaWx5CisJICBvZiBjaGlwc2V0cy4gRm9yIGEgc3BlY2lmaWMgbGlzdCBvZiBzdXBwb3J0ZWQgZXh0ZXJuYWwKKwkgIGNhcmRzLCBsYXB0b3BzIHRoYXQgYWxyZWFkeSBzaGlwIHdpdGggdGhlc2UgY2FyZHMgYW5kCisJICBBUHMgdGhhdCBjb21lIHdpdGggdGhlc2UgY2FyZHMgcmVmZXIgdG8gdG8gYXRoOWsgd2lraQorCSAgcHJvZHVjdHMgcGFnZToKKworCSAgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9hdGg5ay9wcm9kdWN0cwogCiAJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgYXRoOWsuCiAKQEAgLTE4LDYgKzIzLDYgQEAKIAkgIFNheSBZLCBpZiB5b3UgbmVlZCBhdGg5ayB0byBkaXNwbGF5IGRlYnVnIG1lc3NhZ2VzLgogCSAgUGFzcyB0aGUgZGVidWcgbWFzayBhcyBhIG1vZHVsZSBwYXJhbWV0ZXI6CiAKLQkgIG1vZHByb2JlIGF0aDlrIGRlYnVnPTB4MDAwMDIwMDAKKwkgIG1vZHByb2JlIGF0aDlrIGRlYnVnPTB4MDAwMDAyMDAKIAotCSAgTG9vayBpbiBhdGg5ay9jb3JlLmggZm9yIHBvc3NpYmxlIGRlYnVnIG1hc2tzCisJICBMb29rIGluIGF0aDlrL2RlYnVnLmggZm9yIHBvc3NpYmxlIGRlYnVnIG1hc2tzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUKaW5kZXggNzgzYmMzOS4uZmYyYzlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZQpAQCAtMSw1ICsxLDggQEAKIGF0aDlrLXkgKz0JaHcubyBcCiAJCWVlcHJvbS5vIFwKKwkJZWVwcm9tX2RlZi5vIFwKKwkJZWVwcm9tXzRrLm8gXAorCQllZXByb21fOTI4Ny5vIFwKIAkJbWFjLm8gXAogCQljYWxpYi5vIFwKIAkJYW5pLm8gXApAQCAtOSw3ICsxMiw4IEBACiAJCXJlY3YubyBcCiAJCXhtaXQubyBcCiAJCXZpcnR1YWwubyBcCi0JCXJjLm8KKwkJcmMubyBcCisJCWJ0Y29leC5vCiAKIGF0aDlrLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KIGF0aDlrLSQoQ09ORklHX0FUSEVST1NfQVI3MVhYKSArPSBhaGIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCmluZGV4IDBlNjVjNTEuLjJhZDdkMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKQEAgLTExOSwxNyArMTE5LDE1IEBACiAJc2MtPmJ1c19vcHMgPSAmYXRoX2FoYl9idXNfb3BzOwogCXNjLT5pcnEgPSBpcnE7CiAKLQlyZXQgPSBhdGhfYXR0YWNoKEFSNTQxNl9BUjkxMDBfREVWSUQsIHNjKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGF0dGFjaCBkZXZpY2UsIGVycj0lZFxuIiwgcmV0KTsKLQkJcmV0ID0gLUVOT0RFVjsKKwlyZXQgPSBhdGhfaW5pdF9kZXZpY2UoQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MsIDB4MCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2VcbiIpOwogCQlnb3RvIGVycl9mcmVlX2h3OwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgZXJyPSVkXG4iLCByZXQpOwotCQlyZXQgPSAtRUlPOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycl9kZXRhY2g7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMKaW5kZXggYWFkMjU5Yi4uYTdjYmIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYwpAQCAtMjM2LDM2ICsyMzYsMzUgQEAKIAkJcmV0dXJuOwogCiAJYW5pU3RhdGUgPSBhaC0+Y3VyYW5pOwotCiAJYW5pU3RhdGUtPmxpc3RlblRpbWUgPSAwOwotCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7Ci0JCWlmIChhbmlTdGF0ZS0+b2ZkbVRyaWdIaWdoID4gQVJfUEhZX0NPVU5UTUFYKSB7Ci0JCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgPSAwOwotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAotCQkJCSJPRkRNIFRyaWdnZXIgaXMgdG9vIGhpZ2ggZm9yIGh3IGNvdW50ZXJzXG4iKTsKLQkJfSBlbHNlIHsKLQkJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSA9Ci0JCQkJQVJfUEhZX0NPVU5UTUFYIC0gYW5pU3RhdGUtPm9mZG1UcmlnSGlnaDsKLQkJfQotCQlpZiAoYW5pU3RhdGUtPmNja1RyaWdIaWdoID4gQVJfUEhZX0NPVU5UTUFYKSB7Ci0JCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSA9IDA7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkJIkNDSyBUcmlnZ2VyIGlzIHRvbyBoaWdoIGZvciBodyBjb3VudGVyc1xuIik7Ci0JCX0gZWxzZSB7Ci0JCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSA9Ci0JCQkJQVJfUEhZX0NPVU5UTUFYIC0gYW5pU3RhdGUtPmNja1RyaWdIaWdoOwotCQl9Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCSJXcml0aW5nIG9mZG1iYXNlPSV1ICAgY2NrYmFzZT0ldVxuIiwKLQkJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSwKLQkJCWFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzEsIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogCi0JCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CisJaWYgKGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggPiBBUl9QSFlfQ09VTlRNQVgpIHsKKwkJYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlID0gMDsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkJIk9GRE0gVHJpZ2dlciBpcyB0b28gaGlnaCBmb3IgaHcgY291bnRlcnNcbiIpOworCX0gZWxzZSB7CisJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSA9CisJCQlBUl9QSFlfQ09VTlRNQVggLSBhbmlTdGF0ZS0+b2ZkbVRyaWdIaWdoOwogCX0KKwlpZiAoYW5pU3RhdGUtPmNja1RyaWdIaWdoID4gQVJfUEhZX0NPVU5UTUFYKSB7CisJCWFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlID0gMDsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkJIkNDSyBUcmlnZ2VyIGlzIHRvbyBoaWdoIGZvciBodyBjb3VudGVyc1xuIik7CisJfSBlbHNlIHsKKwkJYW5pU3RhdGUtPmNja1BoeUVyckJhc2UgPQorCQkJQVJfUEhZX0NPVU5UTUFYIC0gYW5pU3RhdGUtPmNja1RyaWdIaWdoOworCX0KKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCSJXcml0aW5nIG9mZG1iYXNlPSV1ICAgY2NrYmFzZT0ldVxuIiwKKwkJYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlLAorCQlhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLCBBUl9QSFlfRVJSX09GRE1fVElNSU5HKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOworCisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwogCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSAwOwogCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IDA7CiB9CkBAIC01MzAsMzIgKzUyOSwyNiBAQAogCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsICE9IDApCiAJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpOwotCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7Ci0JCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCBhdGg5a19od19nZXRyeGZpbHRlcihhaCkgJgotCQkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwotCQlhdGg5a19hbmlfcmVzdGFydChhaCk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzEsIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogCi0JfSBlbHNlIHsKLQkJYXRoOWtfYW5pX3Jlc3RhcnQoYWgpOwotCQlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoYWgpIHwKLQkJCQkgICAgIEFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwotCX0KKwlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoYWgpICYKKwkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOworCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLCBBUl9QSFlfRVJSX09GRE1fVElNSU5HKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLCBBUl9QSFlfRVJSX0NDS19USU1JTkcpOwogfQogCiB2b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJaW50MzJfdCBsaXN0ZW5UaW1lOworCXUzMiBwaHlDbnQxLCBwaHlDbnQyOworCXUzMiBvZmRtUGh5RXJyQ250LCBjY2tQaHlFcnJDbnQ7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAogCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKLQlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWxpc3RlblRpbWUgPSBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKGFoKTsKIAlpZiAobGlzdGVuVGltZSA8IDApIHsKQEAgLTU2Niw1MSArNTU5LDQ2IEBACiAKIAlhbmlTdGF0ZS0+bGlzdGVuVGltZSArPSBsaXN0ZW5UaW1lOwogCi0JaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKLQkJdTMyIHBoeUNudDEsIHBoeUNudDI7Ci0JCXUzMiBvZmRtUGh5RXJyQ250LCBjY2tQaHlFcnJDbnQ7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKIAotCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOworCXBoeUNudDEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8xKTsKKwlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CiAKLQkJcGh5Q250MSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzEpOwotCQlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7Ci0KLQkJaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgfHwKLQkJICAgIHBoeUNudDIgPCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSkgewotCQkJaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkJCSJwaHlDbnQxIDB4JXgsIHJlc2V0dGluZyAiCi0JCQkJCSJjb3VudGVyIHZhbHVlIHRvIDB4JXhcbiIsCi0JCQkJCXBoeUNudDEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7Ci0JCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzEsCi0JCQkJCSAgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlKTsKLQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLAotCQkJCQkgIEFSX1BIWV9FUlJfT0ZETV9USU1JTkcpOwotCQkJfQotCQkJaWYgKHBoeUNudDIgPCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSkgewotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCQkJInBoeUNudDIgMHgleCwgcmVzZXR0aW5nICIKLQkJCQkJImNvdW50ZXIgdmFsdWUgdG8gMHgleFxuIiwKLQkJCQkJcGh5Q250MiwgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UpOwotCQkJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLAotCQkJCQkgIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKLQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18yLAotCQkJCQkgIEFSX1BIWV9FUlJfQ0NLX1RJTUlORyk7Ci0JCQl9Ci0JCQlyZXR1cm47CisJaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgfHwKKwkgICAgcGh5Q250MiA8IGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKSB7CisJCWlmIChwaHlDbnQxIDwgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkJInBoeUNudDEgMHgleCwgcmVzZXR0aW5nICIKKwkJCQkiY291bnRlciB2YWx1ZSB0byAweCV4XG4iLAorCQkJCXBoeUNudDEsIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwKKwkJCQkgIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLAorCQkJCSAgQVJfUEhZX0VSUl9PRkRNX1RJTUlORyk7CiAJCX0KLQotCQlvZmRtUGh5RXJyQ250ID0gcGh5Q250MSAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZTsKLQkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KLQkJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OwotCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gb2ZkbVBoeUVyckNudDsKLQotCQljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7Ci0JCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KLQkJCWNja1BoeUVyckNudCAtIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudDsKLQkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OworCQlpZiAocGh5Q250MiA8IGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkJInBoeUNudDIgMHgleCwgcmVzZXR0aW5nICIKKwkJCQkiY291bnRlciB2YWx1ZSB0byAweCV4XG4iLAorCQkJCXBoeUNudDIsIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLAorCQkJCSAgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwKKwkJCQkgIEFSX1BIWV9FUlJfQ0NLX1RJTUlORyk7CisJCX0KKwkJcmV0dXJuOwogCX0KIAorCW9mZG1QaHlFcnJDbnQgPSBwaHlDbnQxIC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlOworCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CisJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OworCWFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSBvZmRtUGh5RXJyQ250OworCisJY2NrUGh5RXJyQ250ID0gcGh5Q250MiAtIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlOworCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KKwkJY2NrUGh5RXJyQ250IC0gYW5pU3RhdGUtPmNja1BoeUVyckNvdW50OworCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IGNja1BoeUVyckNudDsKKwogCWlmIChhbmlTdGF0ZS0+bGlzdGVuVGltZSA+IDUgKiBhaC0+YW5pcGVyaW9kKSB7CiAJCWlmIChhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50IDw9IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5vZmRtVHJpZ0xvdyAvIDEwMDAgJiYKQEAgLTYzMiwxMSArNjIwLDYgQEAKIAl9CiB9CiAKLWJvb2wgYXRoOWtfaHdfcGh5Y291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpCi17Ci0JcmV0dXJuIGFoLT5oYXNfaHdfcGh5Y291bnRlcnMgPyB0cnVlIDogZmFsc2U7Ci19Ci0KIHZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJFbmFibGUgTUlCIGNvdW50ZXJzXG4iKTsKQEAgLTcwOCw4ICs2OTEsNyBAQAogICogYW55IG9mIHRoZSBNSUIgY291bnRlcnMgb3ZlcmZsb3cvdHJpZ2dlciBzbyBkb24ndCBhc3N1bWUgd2UncmUKICAqIGhlcmUgYmVjYXVzZSBhIFBIWSBlcnJvciBjb3VudGVyIHRyaWdnZXJlZC4KICAqLwotdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMpCit2b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcGh5Q250MSwgcGh5Q250MjsKIApAQCAtNzIxLDcgKzcwMyw2IEBACiAKIAkvKiBDbGVhciB0aGUgbWliIGNvdW50ZXJzIGFuZCBzYXZlIHRoZW0gaW4gdGhlIHN0YXRzICovCiAJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKLQlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWlmICghRE9fQU5JKGFoKSkKIAkJcmV0dXJuOwpAQCAtNzc3LDEzICs3NTgsMTEgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK3ZvaWQgYXRoOWtfaHdfYW5pX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJBdHRhY2ggQU5JXG4iKTsKLQotCWFoLT5oYXNfaHdfcGh5Y291bnRlcnMgPSAxOworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkluaXRpYWxpemUgQU5JXG4iKTsKIAogCW1lbXNldChhaC0+YW5pLCAwLCBzaXplb2YoYWgtPmFuaSkpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFoLT5hbmkpOyBpKyspIHsKQEAgLTc5OSwzNiArNzc4LDMyIEBACiAJCQlBVEg5S19BTklfQ0NLX1dFQUtfU0lHX1RIUjsKIAkJYWgtPmFuaVtpXS5zcHVySW1tdW5pdHlMZXZlbCA9IEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkw7CiAJCWFoLT5hbmlbaV0uZmlyc3RlcExldmVsID0gQVRIOUtfQU5JX0ZJUlNURVBfTFZMOwotCQlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewotCQkJYWgtPmFuaVtpXS5vZmRtUGh5RXJyQmFzZSA9Ci0JCQkJQVJfUEhZX0NPVU5UTUFYIC0gQVRIOUtfQU5JX09GRE1fVFJJR19ISUdIOwotCQkJYWgtPmFuaVtpXS5jY2tQaHlFcnJCYXNlID0KLQkJCQlBUl9QSFlfQ09VTlRNQVggLSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKLQkJfQorCQlhaC0+YW5pW2ldLm9mZG1QaHlFcnJCYXNlID0KKwkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKKwkJYWgtPmFuaVtpXS5jY2tQaHlFcnJCYXNlID0KKwkJCUFSX1BIWV9DT1VOVE1BWCAtIEFUSDlLX0FOSV9DQ0tfVFJJR19ISUdIOwogCX0KLQlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkiU2V0dGluZyBPZmRtRXJyQmFzZSA9IDB4JTA4eFxuIiwKLQkJCWFoLT5hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOwotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJTZXR0aW5nIGNja0VyckJhc2UgPSAweCUwOHhcbiIsCi0JCQlhaC0+YW5pWzBdLmNja1BoeUVyckJhc2UpOwogCi0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7Ci0JCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwotCX0KKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCSJTZXR0aW5nIE9mZG1FcnJCYXNlID0gMHglMDh4XG4iLAorCQlhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJTZXR0aW5nIGNja0VyckJhc2UgPSAweCUwOHhcbiIsCisJCWFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgYWgtPmFuaVswXS5vZmRtUGh5RXJyQmFzZSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisJYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhhaCk7CisKIAlhaC0+YW5pcGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKIAlpZiAoYWgtPmNvbmZpZy5lbmFibGVfYW5pKQogCQlhaC0+cHJvY19waHllcnIgfD0gSEFMX1BST0NFU1NfQU5JOwogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkRldGFjaCBBTklcbiIpOworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIkRpc2FibGluZyBBTklcbiIpOwogCi0JaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKLQkJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgMCk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCAwKTsKLQl9CisJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOworCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCAwKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmgKaW5kZXggMDhiNGU3ZS4uNGUxYWI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuaApAQCAtMTgsMTUgKzE4LDEwIEBACiAjZGVmaW5lIEFOSV9ICiAKICNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCiAKICNkZWZpbmUgRE9fQU5JKGFoKSAoKChhaCktPnByb2NfcGh5ZXJyICYgSEFMX1BST0NFU1NfQU5JKSkKIAotI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkJCQkJCQlcCi0JKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQotI2RlZmluZSBCRUFDT05fUlNTSShhaHApCQkJCQlcCi0JSEFMX0VQX1JORChhaHAtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksCVwKLQkJICAgQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQorI2RlZmluZSBCRUFDT05fUlNTSShhaHApIChhaHAtPnN0YXRzLmF2Z2Jyc3NpKQogCiAjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKICNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMApAQCAtNjUsMTMgKzYwLDYgQEAKIAl1MzIgYmVhY29uczsKIH07CiAKLXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIHsKLQl1MzIgbnNfYXZnYnJzc2k7Ci0JdTMyIG5zX2F2Z3Jzc2k7Ci0JdTMyIG5zX2F2Z3R4cnNzaTsKLQl1MzIgbnNfYXZndHhyYXRlOwotfTsKLQogc3RydWN0IGFyNTQxNkFuaVN0YXRlIHsKIAlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYzsKIAl1OCBub2lzZUltbXVuaXR5TGV2ZWw7CkBAIC0xMTUsMjQgKzEwMywyMSBAQAogCXUzMiBhc3RfYW5pX3Jlc2V0OwogCXUzMiBhc3RfYW5pX2x6ZXJvOwogCXUzMiBhc3RfYW5pX2xuZWc7CisJdTMyIGF2Z2Jyc3NpOwogCXN0cnVjdCBhdGg5a19taWJfc3RhdHMgYXN0X21pYnN0YXRzOwotCXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIGFzdF9ub2Rlc3RhdHM7CiB9OwogI2RlZmluZSBhaF9taWJTdGF0cyBzdGF0cy5hc3RfbWlic3RhdHMKIAogdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19hbmlfbW9uaXRvcihzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzLAogCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2Rpc2FibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHUzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyICpyeGNfcGNudCwKIAkJCQkgIHUzMiAqcnhmX3BjbnQsIHUzMiAqdHhmX3BjbnQpOwotdm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMpOwordm9pZCBhdGg5a19od19wcm9jbWliZXZlbnQoc3RydWN0IGF0aF9odyAqYWgpOwogdm9pZCBhdGg5a19od19hbmlfc2V0dXAoc3RydWN0IGF0aF9odyAqYWgpOwotdm9pZCBhdGg5a19od19hbmlfYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2FuaV9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpOwogCiAjZW5kaWYgLyogQU5JX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggNWVmYzkzNC4uMWQ1OWYxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlICJody5oIgogI2luY2x1ZGUgInJjLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKKyNpbmNsdWRlICIuLi9hdGguaCIKKyNpbmNsdWRlICJidGNvZXguaCIKIAogc3RydWN0IGF0aF9ub2RlOwogCkBAIC0xNjQsNyArMTY2LDYgQEAKICNkZWZpbmUgV01FX05VTV9USUQgICAgICAgICAgICAgMTYKICNkZWZpbmUgQVRIX1RYQlVGICAgICAgICAgICAgICAgNTEyCiAjZGVmaW5lIEFUSF9UWE1BWFRSWSAgICAgICAgICAgIDEzCi0jZGVmaW5lIEFUSF8xMU5fVFhNQVhUUlkgICAgICAgIDEwCiAjZGVmaW5lIEFUSF9NR1RfVFhNQVhUUlkgICAgICAgIDQKICNkZWZpbmUgV01FX0JBX0JNUF9TSVpFICAgICAgICAgNjQKICNkZWZpbmUgV01FX01BWF9CQSAgICAgICAgICAgICAgV01FX0JBX0JNUF9TSVpFCkBAIC0xOTEsMTIgKzE5Miw5IEBACiAjZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKICNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKICNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX01BWCAgICAgICAgKDY0ICogMTAyNCAtIDEpCi0jZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUICAgIEFUSF9BTVBEVV9MSU1JVF9NQVgKIAogI2RlZmluZSBJRUVFODAyMTFfU0VRX1NFUV9TSElGVCAgICA0CiAjZGVmaW5lIElFRUU4MDIxMV9TRVFfTUFYICAgICAgICAgIDQwOTYKLSNkZWZpbmUgSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgICAgMHg4Ci0jZGVmaW5lIElFRUU4MDIxMV9IVENBUF9NQVhSWEFNUERVX0ZBQ1RPUiAxMwogI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgICAzCiAjZGVmaW5lIElFRUU4MDIxMV9XRVBfS0lETEVOICAgICAgIDEKICNkZWZpbmUgSUVFRTgwMjExX1dFUF9DUkNMRU4gICAgICAgNApAQCAtMjI2LDYgKzIyNCw4IEBACiAjZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKICNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKIAorI2RlZmluZSBBVEhfVFhfQ09NUExFVEVfUE9MTF9JTlQJMTAwMAorCiBlbnVtIEFUSF9BR0dSX1NUQVRVUyB7CiAJQVRIX0FHR1JfRE9ORSwKIAlBVEhfQUdHUl9CQVdfQ0xPU0VELApAQCAtMjM5LDggKzIzOSw4IEBACiAJc3BpbmxvY2tfdCBheHFfbG9jazsKIAl1MzIgYXhxX2RlcHRoOwogCXU4IGF4cV9hZ2dyX2RlcHRoOwotCXUzMiBheHFfdG90YWxxdWV1ZWQ7CiAJYm9vbCBzdG9wcGVkOworCWJvb2wgYXhxX3R4X2lucHJvZ3Jlc3M7CiAJc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOwogCiAJLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCkBAIC0yNzIsNyArMjcyLDYgQEAKIAlpbnQgc2NoZWQ7CiAJaW50IHBhdXNlZDsKIAl1OCBzdGF0ZTsKLQlpbnQgYWRkYmFfZXhjaGFuZ2VhdHRlbXB0czsKIH07CiAKIHN0cnVjdCBhdGhfYXR4X2FjIHsKQEAgLTI5MiwxMiArMjkxLDI4IEBACiAjZGVmaW5lIEFUSF9UWF9YUkVUUlkgICAgICAgMHgwMgogI2RlZmluZSBBVEhfVFhfQkFSICAgICAgICAgIDB4MDQKIAorI2RlZmluZSBBVEhfUlNTSV9MUEZfTEVOIAkJMTAKKyNkZWZpbmUgUlNTSV9MUEZfVEhSRVNIT0xECQktMjAKKyNkZWZpbmUgQVRIOUtfUlNTSV9CQUQJCQkweDgwCisjZGVmaW5lIEFUSF9SU1NJX0VQX01VTFRJUExJRVIgICAgICgxPDw3KQorI2RlZmluZSBBVEhfRVBfTVVMKHgsIG11bCkgICAgICAgICAoKHgpICogKG11bCkpCisjZGVmaW5lIEFUSF9SU1NJX0lOKHgpICAgICAgICAgICAgIChBVEhfRVBfTVVMKCh4KSwgQVRIX1JTU0lfRVBfTVVMVElQTElFUikpCisjZGVmaW5lIEFUSF9MUEZfUlNTSSh4LCB5LCBsZW4pIFwKKyAgICAoKHggIT0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSKSA/ICgoKHgpICogKChsZW4pIC0gMSkgKyAoeSkpIC8gKGxlbikpIDogKHkpKQorI2RlZmluZSBBVEhfUlNTSV9MUEYoeCwgeSkgZG8geyAgICAgICAgICAgICAgICAgICAgIAkJCVwKKyAgICBpZiAoKHkpID49IFJTU0lfTFBGX1RIUkVTSE9MRCkgICAgICAgICAgICAgICAgICAgICAgICAgCQlcCisJeCA9IEFUSF9MUEZfUlNTSSgoeCksIEFUSF9SU1NJX0lOKCh5KSksIEFUSF9SU1NJX0xQRl9MRU4pOyAgCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIEFUSF9FUF9STkQoeCwgbXVsKSAJCQkJCQlcCisJKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQorCiBzdHJ1Y3QgYXRoX25vZGUgewogCXN0cnVjdCBhdGhfc29mdGMgKmFuX3NjOwogCXN0cnVjdCBhdGhfYXR4X3RpZCB0aWRbV01FX05VTV9USURdOwogCXN0cnVjdCBhdGhfYXR4X2FjIGFjW1dNRV9OVU1fQUNdOwogCXUxNiBtYXhhbXBkdTsKIAl1OCBtcGR1ZGVuc2l0eTsKKwlpbnQgbGFzdF9yc3NpOwogfTsKIAogc3RydWN0IGF0aF90eCB7CkBAIC0zNDgsOSArMzYzLDkgQEAKIHZvaWQgYXRoX3R4X3Rhc2tsZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKK3ZvaWQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgICB1MTYgdGlkLCB1MTYgKnNzbik7Cit2b2lkIGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOwogdm9pZCBhdGhfdHhfYWdncl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOwogCiAvKioqKioqKiovCkBAIC00NDAsNyArNDU1LDggQEAKIC8qICAgTEVEIENvbnRyb2wgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBBVEhfTEVEX1BJTgkxCisjZGVmaW5lIEFUSF9MRURfUElOX0RFRiAJCTEKKyNkZWZpbmUgQVRIX0xFRF9QSU5fOTI4NwkJOAogI2RlZmluZSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUJMzUwCS8qIGluIG1zZWNzICovCiAjZGVmaW5lIEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUJMjUwCS8qIGluIG1zZWNzICovCiAKQEAgLTUwNiw2ICs1MjIsOCBAQAogI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSBCSVQoMTcpCiAjZGVmaW5lIFNDX09QX1dBSVRfRk9SX1RYX0FDSyAgIEJJVCgxOCkKICNkZWZpbmUgU0NfT1BfQkVBQ09OX1NZTkMgICAgICAgQklUKDE5KQorI2RlZmluZSBTQ19PUF9CVENPRVhfRU5BQkxFRCAgICBCSVQoMjApCisjZGVmaW5lIFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEIEJJVCgyMSkKIAogc3RydWN0IGF0aF9idXNfb3BzIHsKIAl2b2lkCQkoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opOwpAQCAtNTE5LDYgKzUzNyw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCisJc3RydWN0IGF0aF9jb21tb24gY29tbW9uOworCiAJc3BpbmxvY2tfdCB3aXBoeV9sb2NrOyAvKiBzcGlubG9jayB0byBwcm90ZWN0IGF0aF93aXBoeSBkYXRhICovCiAJc3RydWN0IGF0aF93aXBoeSAqcHJpX3dpcGh5OwogCXN0cnVjdCBhdGhfd2lwaHkgKipzZWNfd2lwaHk7IC8qIHNlY29uZGFyeSB3aXBoeXMgKHZpcnR1YWwgcmFkaW9zKTsgbWF5CkBAIC01NDEsNiArNTYxLDggQEAKIAlpbnQgaXJxOwogCXNwaW5sb2NrX3Qgc2NfcmVzZXRsb2NrOwogCXNwaW5sb2NrX3Qgc2Nfc2VyaWFsX3J3OworCXNwaW5sb2NrX3QgYW5pX2xvY2s7CisJc3BpbmxvY2tfdCBzY19wbV9sb2NrOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAogCXU4IGN1cmJzc2lkW0VUSF9BTEVOXTsKQEAgLTU0OSw3ICs1NzEsNiBAQAogCXUzMiBzY19mbGFnczsgLyogU0NfT1BfKiAqLwogCXUxNiBjdXJ0eHBvdzsKIAl1MTYgY3VyYWlkOwotCXUxNiBjYWNoZWxzejsKIAl1OCBuYmNudmlmczsKIAl1MTYgbnZpZnM7CiAJdTggdHhfY2hhaW5tYXNrOwpAQCAtNTU3LDcgKzU3OCw4IEBACiAJdTMyIGtleW1heDsKIAlERUNMQVJFX0JJVE1BUChrZXltYXAsIEFUSF9LRVlNQVgpOwogCXU4IHNwbGl0bWljOwotCWF0b21pY190IHBzX3VzZWNvdW50OworCWJvb2wgcHNfZW5hYmxlZDsKKwl1bnNpZ25lZCBsb25nIHBzX3VzZWNvdW50OwogCWVudW0gYXRoOWtfaW50IGltYXNrOwogCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgaHRfZXh0cHJvdHNwYWNpbmc7CiAJZW51bSBhdGg5a19odF9tYWNtb2RlIHR4X2NoYW5fd2lkdGg7CkBAIC01ODQsMTIgKzYwNiwxMyBAQAogCWludCBiZWFjb25faW50ZXJ2YWw7CiAKIAlzdHJ1Y3QgYXRoX2FuaSBhbmk7Ci0Jc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgbm9kZXN0YXRzOwogI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRwogCXN0cnVjdCBhdGg5a19kZWJ1ZyBkZWJ1ZzsKICNlbmRpZgogCXN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wczsKIAlzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgY3VyX2JlYWNvbl9jb25mOworCXN0cnVjdCBkZWxheWVkX3dvcmsgdHhfY29tcGxldGVfd29yazsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvIGJ0Y29leF9pbmZvOwogfTsKIAogc3RydWN0IGF0aF93aXBoeSB7CkBAIC02MTEsNiArNjM0LDE2IEBACiBpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGhfY29tbW9uICphdGg5a19od19jb21tb24oc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICZhaC0+YWhfc2MtPmNvbW1vbjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKmF0aDlrX2h3X3JlZ3VsYXRvcnkoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICYoYXRoOWtfaHdfY29tbW9uKGFoKS0+cmVndWxhdG9yeSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQogewogCXNjLT5idXNfb3BzLT5yZWFkX2NhY2hlc2l6ZShzYywgY3N6KTsKQEAgLTYyNSw3ICs2NTgsNyBAQAogCiBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7CiB2b2lkIGF0aF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9pbml0X2RldmljZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQpOwogdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIGNvbnN0IGNoYXIgKmF0aF9tYWNfYmJfbmFtZSh1MzIgbWFjX2JiX3ZlcnNpb24pOwogY29uc3QgY2hhciAqYXRoX3JmX25hbWUodTE2IHJmX3ZlcnNpb24pOwpAQCAtNjU0LDI3ICs2ODcsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGF0aF9haGJfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfd2FrZXVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWlmIChhdG9taWNfaW5jX3JldHVybigmc2MtPnBzX3VzZWNvdW50KSA9PSAxKQotCQlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9ICBBVEg5S19QTV9BV0FLRSkgewotCQkJc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUgPSBzYy0+c2NfYWgtPnBvd2VyX21vZGU7Ci0JCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX0FXQUtFKTsKLQkJfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfcmVzdG9yZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2MtPnBzX3VzZWNvdW50KSkKLQkJaWYgKChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKLQkJICAgICEoc2MtPnNjX2ZsYWdzICYgKFNDX09QX1dBSVRfRk9SX0JFQUNPTiB8Ci0JCQkJICAgICAgU0NfT1BfV0FJVF9GT1JfQ0FCIHwKLQkJCQkgICAgICBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSB8Ci0JCQkJICAgICAgU0NfT1BfV0FJVF9GT1JfVFhfQUNLKSkpCi0JCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsCi0JCQkJCSAgc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUpOwotfQotCit2b2lkIGF0aDlrX3BzX3dha2V1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX3BzX3Jlc3RvcmUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogCiB2b2lkIGF0aDlrX3NldF9ic3NpZF9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGludCBhdGg5a193aXBoeV9hZGQoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwpAQCAtNjkwLDggKzcwNCwxMCBAQAogCQkJCSAgc3RydWN0IGF0aF93aXBoeSAqc2VsZWN0ZWQpOwogYm9vbCBhdGg5a193aXBoeV9zY2FubmluZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiB2b2lkIGF0aDlrX3dpcGh5X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2Jvb2wgYXRoOWtfYWxsX3dpcGh5c19pZGxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIAogdm9pZCBhdGg5a19pb3dyaXRlMzIoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWdfb2Zmc2V0LCB1MzIgdmFsKTsKIHVuc2lnbmVkIGludCBhdGg5a19pb3JlYWQzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQpOwogCitpbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKTsKICNlbmRpZiAvKiBBVEg5S19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKaW5kZXggMzYzOWEyZS4uNDVjNGVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYwpAQCAtNjc0LDEzICs2NzQsNiBAQAogCiAJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKIAotCS8qCi0JICogSXQgbG9va3MgbGlrZSBtYWM4MDIxMSBtYXkgZW5kIHVwIHVzaW5nIGJlYWNvbiBpbnRlcnZhbCBvZiB6ZXJvIGluCi0JICogc29tZSBjYXNlcyAoYXQgbGVhc3QgZm9yIG1lc2ggcG9pbnQpLiBBdm9pZCBnZXR0aW5nIGludG8gYW4KLQkgKiBpbmZpbml0ZSBsb29wIGJ5IHVzaW5nIGEgYml0IHNhZmVyIHZhbHVlIGluc3RlYWQuLgotCSAqLwotCWlmIChpbnR2YWwgPT0gMCkKLQkJaW50dmFsID0gMTAwOwogCiAJLyogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgVFNGICovCiAKQEAgLTc0NSw2ICs3MzgsMTQgQEAKIAkJaWZ0eXBlID0gc2MtPnNjX2FoLT5vcG1vZGU7CiAJfQogCisJLyoKKwkgKiBJdCBsb29rcyBsaWtlIG1hYzgwMjExIG1heSBlbmQgdXAgdXNpbmcgYmVhY29uIGludGVydmFsIG9mIHplcm8gaW4KKwkgKiBzb21lIGNhc2VzIChhdCBsZWFzdCBmb3IgbWVzaCBwb2ludCkuIEF2b2lkIGdldHRpbmcgaW50byBhbgorCSAqIGluZmluaXRlIGxvb3AgYnkgdXNpbmcgYSBiaXQgc2FmZXIgdmFsdWUgaW5zdGVhZC4gVG8gYmUgc2FmZSwKKwkgKiBkbyBzYW5pdHkgY2hlY2sgb24gYmVhY29uIGludGVydmFsIGZvciBhbGwgb3BlcmF0aW5nIG1vZGVzLgorCSAqLworCWlmIChjdXJfY29uZi0+YmVhY29uX2ludGVydmFsID09IDApCisJCWN1cl9jb25mLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CiAKIAlzd2l0Y2ggKGlmdHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmNjA3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXRoOWsuaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGhfYnRjb2V4X2NvbmZpZyBhdGhfYnRfY29uZmlnID0geyAwLCB0cnVlLCB0cnVlLAorCQkJQVRIX0JUX0NPRVhfTU9ERV9TTE9UVEVELCB0cnVlLCB0cnVlLCAyLCA1LCB0cnVlIH07CisKK3N0YXRpYyBjb25zdCB1MTYgYXRoX3N1YnN5c2lkX3RibFtdID0geworCUFSOTI4MF9DT0VYMldJUkVfU1VCU1lTSUQsCisJQVQ5Mjg1X0NPRVgzV0lSRV9TQV9TVUJTWVNJRCwKKwlBVDkyODVfQ09FWDNXSVJFX0RBX1NVQlNZU0lECit9OworCisvKgorICogQ2hlY2tzIHRoZSBzdWJzeXN0ZW0gaWQgb2YgdGhlIGRldmljZSB0byBzZWUgaWYgaXQKKyAqIHN1cHBvcnRzIGJ0Y29leAorICovCitib29sIGF0aF9idGNvZXhfc3VwcG9ydGVkKHUxNiBzdWJzeXNpZCkKK3sKKwlpbnQgaTsKKworCWlmICghc3Vic3lzaWQpCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0aF9zdWJzeXNpZF90YmwpOyBpKyspCisJCWlmIChzdWJzeXNpZCA9PSBhdGhfc3Vic3lzaWRfdGJsW2ldKQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEZXRlY3RzIGlmIHRoZXJlIGlzIGFueSBwcmlvcml0eSBidCB0cmFmZmljCisgKi8KK3N0YXRpYyB2b2lkIGF0aF9kZXRlY3RfYnRfcHJpb3JpdHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRpbmZvID0gJnNjLT5idGNvZXhfaW5mbzsKKworCWlmIChhdGg5a19od19ncGlvX2dldChzYy0+c2NfYWgsIGJ0aW5mby0+YnRwcmlvcml0eV9ncGlvKSkKKwkJYnRpbmZvLT5idF9wcmlvcml0eV9jbnQrKzsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGJ0aW5mby0+YnRfcHJpb3JpdHlfdGltZSArCisJCQltc2Vjc190b19qaWZmaWVzKEFUSF9CVF9QUklPUklUWV9USU1FX1RIUkVTSE9MRCkpKSB7CisJCWlmIChidGluZm8tPmJ0X3ByaW9yaXR5X2NudCA+PSBBVEhfQlRfQ05UX1RIUkVTSE9MRCkgeworCQkJRFBSSU5URihzYywgQVRIX0RCR19CVENPRVgsCisJCQkJIkJUIHByaW9yaXR5IHRyYWZmaWMgZGV0ZWN0ZWQiKTsKKwkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKKwkJfSBlbHNlIHsKKwkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQ7CisJCX0KKworCQlidGluZm8tPmJ0X3ByaW9yaXR5X2NudCA9IDA7CisJCWJ0aW5mby0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7CisJfQorfQorCisvKgorICogQ29uZmlndXJlcyBhcHByb3ByaWF0ZSB3ZWlnaHQgYmFzZWQgb24gc3RvbXAgdHlwZS4KKyAqLworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9idF9zdG9tcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGluZm8sCisJCQkJaW50IHN0b21wX3R5cGUpCit7CisKKwlzd2l0Y2ggKHN0b21wX3R5cGUpIHsKKwljYXNlIEFUSF9CVENPRVhfU1RPTVBfQUxMOgorCQlhdGhfYnRjb2V4X3NldF93ZWlnaHQoYnRpbmZvLCBBUl9CVF9DT0VYX1dHSFQsCisJCQkJICAgICAgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVCk7CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9MT1c6CisJCWF0aF9idGNvZXhfc2V0X3dlaWdodChidGluZm8sIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQkgICAgICBBUl9TVE9NUF9MT1dfV0xBTl9XR0hUKTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX05PTkU6CisJCWF0aF9idGNvZXhfc2V0X3dlaWdodChidGluZm8sIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQkgICAgICBBUl9TVE9NUF9OT05FX1dMQU5fV0dIVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEYoc2MsIEFUSF9EQkdfQlRDT0VYLCAiSW52YWxpZCBTdG9tcHR5cGVcbiIpOworCQlicmVhazsKKwl9CisKKwlhdGg5a19od19idGNvZXhfZW5hYmxlKHNjLT5zY19haCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXN0ZXIgYnQgY29leCB0aW1lciB3aGljaCBydW5zIGZvciBldmVyeQorICogNDVtcywgYnQgdHJhZmZpYyB3aWxsIGJlIGdpdmVuIHByaW9yaXR5IGR1cmluZyA1NSUgb2YgdGhpcworICogcGVyaW9kIHdoaWxlIHdsYW4gZ2V0cyByZW1haW5pbmcgNDUlCisgKi8KKworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9wZXJpb2RfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgZGF0YTsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGluZm8gPSAmc2MtPmJ0Y29leF9pbmZvOworCisJYXRoX2RldGVjdF9idF9wcmlvcml0eShzYyk7CisKKwlzcGluX2xvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworCisJYXRoX2J0Y29leF9idF9zdG9tcChzYywgYnRpbmZvLCBidGluZm8tPmJ0X3N0b21wX3R5cGUpOworCisJc3Bpbl91bmxvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworCisJaWYgKGJ0aW5mby0+YnRjb2V4X3BlcmlvZCAhPSBidGluZm8tPmJ0Y29leF9ub19zdG9tcCkgeworCQlpZiAoYnRpbmZvLT5od190aW1lcl9lbmFibGVkKQorCQkJYXRoX2dlbl90aW1lcl9zdG9wKHNjLT5zY19haCwgYnRpbmZvLT5ub19zdG9tcF90aW1lcik7CisKKwkJYXRoX2dlbl90aW1lcl9zdGFydChzYy0+c2NfYWgsCisJCQlidGluZm8tPm5vX3N0b21wX3RpbWVyLAorCQkJKGF0aDlrX2h3X2dldHRzZjMyKHNjLT5zY19haCkgKworCQkJCWJ0aW5mby0+YnRjb2V4X25vX3N0b21wKSwKKwkJCQlidGluZm8tPmJ0Y29leF9ub19zdG9tcCAqIDEwKTsKKwkJYnRpbmZvLT5od190aW1lcl9lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwltb2RfdGltZXIoJmJ0aW5mby0+cGVyaW9kX3RpbWVyLCBqaWZmaWVzICsKKwkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EKSk7Cit9CisKKy8qCisgKiBHZW5lcmljIHRzZiBiYXNlZCBodyB0aW1lciB3aGljaCBjb25maWd1cmVzIHdlaWdodAorICogcmVnaXN0ZXJzIHRvIHRpbWUgc2xpY2UgYmV0d2VlbiB3bGFuIGFuZCBidCB0cmFmZmljCisgKi8KKworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9ub19zdG9tcF90aW1lcih2b2lkICphcmcpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWFyZzsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGluZm8gPSAmc2MtPmJ0Y29leF9pbmZvOworCisJRFBSSU5URihzYywgQVRIX0RCR19CVENPRVgsICJubyBzdG9tcCB0aW1lciBydW5uaW5nIFxuIik7CisKKwlzcGluX2xvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworCisJaWYgKGJ0aW5mby0+YnRfc3RvbXBfdHlwZSA9PSBBVEhfQlRDT0VYX1NUT01QX0xPVykKKwkJYXRoX2J0Y29leF9idF9zdG9tcChzYywgYnRpbmZvLCBBVEhfQlRDT0VYX1NUT01QX05PTkUpOworCSBlbHNlIGlmIChidGluZm8tPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9BTEwpCisJCWF0aF9idGNvZXhfYnRfc3RvbXAoc2MsIGJ0aW5mbywgQVRIX0JUQ09FWF9TVE9NUF9MT1cpOworCisJc3Bpbl91bmxvY2tfYmgoJmJ0aW5mby0+YnRjb2V4X2xvY2spOworfQorCitzdGF0aWMgaW50IGF0aF9pbml0X2J0Y29leF9pbmZvKHN0cnVjdCBhdGhfaHcgKmh3LAorCQkJCXN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0Y29leF9pbmZvKQoreworCXUzMiBpOworCWludCBxbnVtOworCisJcW51bSA9IGF0aF90eF9nZXRfcW51bShody0+YWhfc2MsIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CRSk7CisKKwlidGNvZXhfaW5mby0+YnRfY29leF9tb2RlID0KKwkJKGJ0Y29leF9pbmZvLT5idF9jb2V4X21vZGUgJiBBUl9CVF9RQ1VfVEhSRVNIKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfdGltZV9leHRlbmQsIEFSX0JUX1RJTUVfRVhURU5EKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfdHhzdGF0ZV9leHRlbmQsIEFSX0JUX1RYU1RBVEVfRVhURU5EKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfdHhmcmFtZV9leHRlbmQsIEFSX0JUX1RYX0ZSQU1FX0VYVEVORCkgfAorCQlTTShhdGhfYnRfY29uZmlnLmJ0X21vZGUsIEFSX0JUX01PREUpIHwKKwkJU00oYXRoX2J0X2NvbmZpZy5idF9xdWlldF9jb2xsaXNpb24sIEFSX0JUX1FVSUVUKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfcnhjbGVhcl9wb2xhcml0eSwgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkpIHwKKwkJU00oYXRoX2J0X2NvbmZpZy5idF9wcmlvcml0eV90aW1lLCBBUl9CVF9QUklPUklUWV9USU1FKSB8CisJCVNNKGF0aF9idF9jb25maWcuYnRfZmlyc3Rfc2xvdF90aW1lLCBBUl9CVF9GSVJTVF9TTE9UX1RJTUUpIHwKKwkJU00ocW51bSwgQVJfQlRfUUNVX1RIUkVTSCk7CisKKwlidGNvZXhfaW5mby0+YnRfY29leF9tb2RlMiA9CisJCVNNKGF0aF9idF9jb25maWcuYnRfaG9sZF9yeF9jbGVhciwgQVJfQlRfSE9MRF9SWF9DTEVBUikgfAorCQlTTShBVEhfQlRDT0VYX0JNSVNTX1RIUkVTSCwgQVJfQlRfQkNOX01JU1NfVEhSRVNIKSB8CisJCUFSX0JUX0RJU0FCTEVfQlRfQU5UOworCisJYnRjb2V4X2luZm8tPmJ0X3N0b21wX3R5cGUgPSBBVEhfQlRDT0VYX1NUT01QX0xPVzsKKworCWJ0Y29leF9pbmZvLT5idGNvZXhfcGVyaW9kID0gQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICogMTAwMDsKKworCWJ0Y29leF9pbmZvLT5idGNvZXhfbm9fc3RvbXAgPSAoMTAwIC0gQVRIX0JUQ09FWF9ERUZfRFVUWV9DWUNMRSkgKgorCQlidGNvZXhfaW5mby0+YnRjb2V4X3BlcmlvZCAvIDEwMDsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQlody0+aHdfZ2VuX3RpbWVycy5nZW5fdGltZXJfaW5kZXhbKGRlYnJ1aWpuMzIgPDwgaSkgPj4gMjddID0gaTsKKworCXNldHVwX3RpbWVyKCZidGNvZXhfaW5mby0+cGVyaW9kX3RpbWVyLCBhdGhfYnRjb2V4X3BlcmlvZF90aW1lciwKKwkJCSh1bnNpZ25lZCBsb25nKSBody0+YWhfc2MpOworCisJYnRjb2V4X2luZm8tPm5vX3N0b21wX3RpbWVyID0gYXRoX2dlbl90aW1lcl9hbGxvYyhodywKKwkJCWF0aF9idGNvZXhfbm9fc3RvbXBfdGltZXIsCisJCQlhdGhfYnRjb2V4X25vX3N0b21wX3RpbWVyLAorCQkJKHZvaWQgKilody0+YWhfc2MsIEFSX0ZJUlNUX05EUF9USU1FUik7CisKKwlpZiAoYnRjb2V4X2luZm8tPm5vX3N0b21wX3RpbWVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmJ0Y29leF9pbmZvLT5idGNvZXhfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDlrX2h3X2J0Y29leF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0Y29leF9pbmZvID0gJmFoLT5haF9zYy0+YnRjb2V4X2luZm87CisJaW50IHJldCA9IDA7CisKKwlpZiAoYnRjb2V4X2luZm8tPmJ0Y29leF9zY2hlbWUgPT0gQVRIX0JUQ09FWF9DRkdfMldJUkUpIHsKKwkJLyogY29ubmVjdCBidF9hY3RpdmUgdG8gYmFzZWJhbmQgKi8KKwkJUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAorCQkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgfAorCQkJCSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9GUkVRVUVOQ1lfREVGKSk7CisKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAorCQkJCUFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQik7CisKKwkJLyogU2V0IGlucHV0IG11eCBmb3IgYnRfYWN0aXZlIHRvIGdwaW8gcGluICovCisJCVJFR19STVdfRklFTEQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMSwKKwkJCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAorCQkJCWJ0Y29leF9pbmZvLT5idGFjdGl2ZV9ncGlvKTsKKworCQkvKiBDb25maWd1cmUgdGhlIGRlc2lyZWQgZ3BpbyBwb3J0IGZvciBpbnB1dCAqLworCQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYnRjb2V4X2luZm8tPmJ0YWN0aXZlX2dwaW8pOworCX0gZWxzZSB7CisJCS8qIGJ0Y29leCAzLXdpcmUgKi8KKwkJUkVHX1NFVF9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAorCQkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9CQiB8CisJCQkJIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQikpOworCisJCS8qIFNldCBpbnB1dCBtdXggZm9yIGJ0X3Byb3JpdHlfYXN5bmMgYW5kCisJCSAqICAgICAgICAgICAgICAgICAgYnRfYWN0aXZlX2FzeW5jIHRvIEdQSU8gcGlucyAqLworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCisJCQkJQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRSwKKwkJCQlidGNvZXhfaW5mby0+YnRhY3RpdmVfZ3Bpbyk7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfR1BJT19JTlBVVF9NVVgxLAorCQkJCUFSX0dQSU9fSU5QVVRfTVVYMV9CVF9QUklPUklUWSwKKwkJCQlidGNvZXhfaW5mby0+YnRwcmlvcml0eV9ncGlvKTsKKworCQkvKiBDb25maWd1cmUgdGhlIGRlc2lyZWQgR1BJTyBwb3J0cyBmb3IgaW5wdXQgKi8KKworCQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYnRjb2V4X2luZm8tPmJ0YWN0aXZlX2dwaW8pOworCQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYnRjb2V4X2luZm8tPmJ0cHJpb3JpdHlfZ3Bpbyk7CisKKwkJcmV0ID0gYXRoX2luaXRfYnRjb2V4X2luZm8oYWgsIGJ0Y29leF9pbmZvKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGF0aDlrX2h3X2J0Y29leF9lbmFibGUoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRjb2V4X2luZm8gPSAmYWgtPmFoX3NjLT5idGNvZXhfaW5mbzsKKworCWlmIChidGNvZXhfaW5mby0+YnRjb2V4X3NjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18yV0lSRSkgeworCQkvKiBDb25maWd1cmUgdGhlIGRlc2lyZWQgR1BJTyBwb3J0IGZvciBUWF9GUkFNRSBvdXRwdXQgKi8KKwkJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYnRjb2V4X2luZm8tPndsYW5hY3RpdmVfZ3BpbywKKwkJCQlBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFByb2dyYW0gY29leCBtb2RlIGFuZCB3ZWlnaHQgcmVnaXN0ZXJzIHRvCisJCSAqIGVuYWJsZSBjb2V4IDMtd2lyZQorCQkgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX01PREUsIGJ0Y29leF9pbmZvLT5idF9jb2V4X21vZGUpOworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfV0VJR0hULCBidGNvZXhfaW5mby0+YnRfY29leF93ZWlnaHRzKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX01PREUyLCBidGNvZXhfaW5mby0+YnRfY29leF9tb2RlMik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUVVJRVQxLAorCQkJCUFSX1FVSUVUMV9RVUlFVF9BQ0tfQ1RTX0VOQUJMRSwgMSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BDVV9NSVNDLAorCQkJCUFSX1BDVV9CVF9BTlRfUFJFVkVOVF9SWCwgMCk7CisKKwkJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYnRjb2V4X2luZm8tPndsYW5hY3RpdmVfZ3BpbywKKwkJCQlBUl9HUElPX09VVFBVVF9NVVhfQVNfUlhfQ0xFQVJfRVhURVJOQUwpOworCX0KKworCVJFR19STVcoYWgsIEFSX0dQSU9fUERQVSwKKwkJKDB4MiA8PCAoYnRjb2V4X2luZm8tPmJ0YWN0aXZlX2dwaW8gKiAyKSksCisJCSgweDMgPDwgKGJ0Y29leF9pbmZvLT5idGFjdGl2ZV9ncGlvICogMikpKTsKKworCWFoLT5haF9zYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQlRDT0VYX0VOQUJMRUQ7Cit9CisKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRjb2V4X2luZm8gPSAmYWgtPmFoX3NjLT5idGNvZXhfaW5mbzsKKworCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBidGNvZXhfaW5mby0+d2xhbmFjdGl2ZV9ncGlvLCAwKTsKKworCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIGJ0Y29leF9pbmZvLT53bGFuYWN0aXZlX2dwaW8sCisJCQlBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKKworCWlmIChidGNvZXhfaW5mby0+YnRjb2V4X3NjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18zV0lSRSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX0JUX0NPRVhfTU9ERSwgQVJfQlRfUVVJRVQgfCBBUl9CVF9NT0RFKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9CVF9DT0VYX1dFSUdIVCwgMCk7CisJCVJFR19XUklURShhaCwgQVJfQlRfQ09FWF9NT0RFMiwgMCk7CisJfQorCisJYWgtPmFoX3NjLT5zY19mbGFncyAmPSB+U0NfT1BfQlRDT0VYX0VOQUJMRUQ7Cit9CisKKy8qCisgKiBQYXVzZSBidGNvZXggdGltZXIgYW5kIGJ0IGR1dHkgY3ljbGUgdGltZXIKKyAqLwordm9pZCBhdGhfYnRjb2V4X3RpbWVyX3BhdXNlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJICAgIHN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0aW5mbykKK3sKKworCWRlbF90aW1lcl9zeW5jKCZidGluZm8tPnBlcmlvZF90aW1lcik7CisKKwlpZiAoYnRpbmZvLT5od190aW1lcl9lbmFibGVkKQorCQlhdGhfZ2VuX3RpbWVyX3N0b3Aoc2MtPnNjX2FoLCBidGluZm8tPm5vX3N0b21wX3RpbWVyKTsKKworCWJ0aW5mby0+aHdfdGltZXJfZW5hYmxlZCA9IGZhbHNlOworfQorCisvKgorICogKFJlKXN0YXJ0IGJ0Y29leCB0aW1lcnMKKyAqLwordm9pZCBhdGhfYnRjb2V4X3RpbWVyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCSAgICAgc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRpbmZvKQoreworCisJRFBSSU5URihzYywgQVRIX0RCR19CVENPRVgsICJTdGFydGluZyBidGNvZXggdGltZXJzIik7CisKKwkvKiBtYWtlIHN1cmUgZHV0eSBjeWNsZSB0aW1lciBpcyBhbHNvIHN0b3BwZWQgd2hlbiByZXN1bWluZyAqLworCWlmIChidGluZm8tPmh3X3RpbWVyX2VuYWJsZWQpCisJCWF0aF9nZW5fdGltZXJfc3RvcChzYy0+c2NfYWgsIGJ0aW5mby0+bm9fc3RvbXBfdGltZXIpOworCisJYnRpbmZvLT5idF9wcmlvcml0eV9jbnQgPSAwOworCWJ0aW5mby0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKKworCW1vZF90aW1lcigmYnRpbmZvLT5wZXJpb2RfdGltZXIsIGppZmZpZXMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5N2IwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBCVENPRVhfSAorI2RlZmluZSBCVENPRVhfSAorCisjZGVmaW5lIEFUSF9XTEFOQUNUSVZFX0dQSU8JNQorI2RlZmluZSBBVEhfQlRBQ1RJVkVfR1BJTwk2CisjZGVmaW5lIEFUSF9CVFBSSU9SSVRZX0dQSU8JNworCisjZGVmaW5lIEFUSF9CVENPRVhfREVGX0JUX1BFUklPRCAgNDUKKyNkZWZpbmUgQVRIX0JUQ09FWF9ERUZfRFVUWV9DWUNMRSA1NQorI2RlZmluZSBBVEhfQlRDT0VYX0JNSVNTX1RIUkVTSCAgIDUwCisKKyNkZWZpbmUgQVRIX0JUX1BSSU9SSVRZX1RJTUVfVEhSRVNIT0xEIDEwMDAgLyogbXMgKi8KKyNkZWZpbmUgQVRIX0JUX0NOVF9USFJFU0hPTEQJICAgICAgIDMKKworZW51bSBhdGhfYnRjb2V4X3NjaGVtZSB7CisJQVRIX0JUQ09FWF9DRkdfTk9ORSwKKwlBVEhfQlRDT0VYX0NGR18yV0lSRSwKKwlBVEhfQlRDT0VYX0NGR18zV0lSRSwKK307CisKK2VudW0gYXRoX3N0b21wX3R5cGUgeworCUFUSF9CVENPRVhfTk9fU1RPTVAsCisJQVRIX0JUQ09FWF9TVE9NUF9BTEwsCisJQVRIX0JUQ09FWF9TVE9NUF9MT1csCisJQVRIX0JUQ09FWF9TVE9NUF9OT05FCit9OworCitlbnVtIGF0aF9idF9tb2RlIHsKKwlBVEhfQlRfQ09FWF9NT0RFX0xFR0FDWSwJLyogbGVnYWN5IHJ4X2NsZWFyIG1vZGUgKi8KKwlBVEhfQlRfQ09FWF9NT0RFX1VOU0xPVFRFRCwJLyogdW50aW1lZC91bnNsb3R0ZWQgbW9kZSAqLworCUFUSF9CVF9DT0VYX01PREVfU0xPVFRFRCwJLyogc2xvdHRlZCBtb2RlICovCisJQVRIX0JUX0NPRVhfTU9ERV9ESVNBTEJFRCwJLyogY29leGlzdGVuY2UgZGlzYWJsZWQgKi8KK307CisKK3N0cnVjdCBhdGhfYnRjb2V4X2NvbmZpZyB7CisJdTggYnRfdGltZV9leHRlbmQ7CisJYm9vbCBidF90eHN0YXRlX2V4dGVuZDsKKwlib29sIGJ0X3R4ZnJhbWVfZXh0ZW5kOworCWVudW0gYXRoX2J0X21vZGUgYnRfbW9kZTsgLyogY29leGlzdGVuY2UgbW9kZSAqLworCWJvb2wgYnRfcXVpZXRfY29sbGlzaW9uOworCWJvb2wgYnRfcnhjbGVhcl9wb2xhcml0eTsgLyogaW52ZXJ0IHJ4X2NsZWFyIGFzIFdMQU5fQUNUSVZFKi8KKwl1OCBidF9wcmlvcml0eV90aW1lOworCXU4IGJ0X2ZpcnN0X3Nsb3RfdGltZTsKKwlib29sIGJ0X2hvbGRfcnhfY2xlYXI7Cit9OworCitzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvIHsKKwllbnVtIGF0aF9idGNvZXhfc2NoZW1lIGJ0Y29leF9zY2hlbWU7CisJdTggd2xhbmFjdGl2ZV9ncGlvOworCXU4IGJ0YWN0aXZlX2dwaW87CisJdTggYnRwcmlvcml0eV9ncGlvOworCXU4IGJ0X2R1dHlfY3ljbGU7IAkvKiBCVCBkdXR5IGN5Y2xlIGluIHBlcmNlbnRhZ2UgKi8KKwlpbnQgYnRfc3RvbXBfdHlwZTsgCS8qIFR5cGVzIG9mIEJUIHN0b21waW5nICovCisJdTMyIGJ0X2NvZXhfbW9kZTsgCS8qIFJlZ2lzdGVyIHNldHRpbmcgZm9yIEFSX0JUX0NPRVhfTU9ERSAqLworCXUzMiBidF9jb2V4X3dlaWdodHM7IAkvKiBSZWdpc3RlciBzZXR0aW5nIGZvciBBUl9CVF9DT0VYX1dFSUdIVCAqLworCXUzMiBidF9jb2V4X21vZGUyOyAJLyogUmVnaXN0ZXIgc2V0dGluZyBmb3IgQVJfQlRfQ09FWF9NT0RFMiAqLworCXUzMiBidGNvZXhfbm9fc3RvbXA7ICAgLyogaW4gdXNlYyAqLworCXUzMiBidGNvZXhfcGVyaW9kOyAgICAgCS8qIGluIHVzZWMgKi8KKwl1MzIgYnRfcHJpb3JpdHlfY250OworCXVuc2lnbmVkIGxvbmcgYnRfcHJpb3JpdHlfdGltZTsKKwlib29sIGh3X3RpbWVyX2VuYWJsZWQ7CisJc3BpbmxvY2tfdCBidGNvZXhfbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBwZXJpb2RfdGltZXI7ICAgICAgLyogVGltZXIgZm9yIEJUIHBlcmlvZCAqLworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICpub19zdG9tcF90aW1lcjsgLypUaW1lciBmb3Igbm8gQlQgc3RvbXBpbmcqLworfTsKKworYm9vbCBhdGhfYnRjb2V4X3N1cHBvcnRlZCh1MTYgc3Vic3lzaWQpOworaW50IGF0aDlrX2h3X2J0Y29leF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2J0Y29leF9kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoX2J0Y29leF90aW1lcl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkgICAgIHN0cnVjdCBhdGhfYnRjb2V4X2luZm8gKmJ0aW5mbyk7Cit2b2lkIGF0aF9idGNvZXhfdGltZXJfcGF1c2Uoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkgICAgc3RydWN0IGF0aF9idGNvZXhfaW5mbyAqYnRpbmZvKTsKKworc3RhdGljIGlubGluZSB2b2lkIGF0aF9idGNvZXhfc2V0X3dlaWdodChzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGNvZXhfaW5mbywKKwkJCQkJIHUzMiBidF93ZWlnaHQsCisJCQkJCSB1MzIgd2xhbl93ZWlnaHQpCit7CisJYnRjb2V4X2luZm8tPmJ0X2NvZXhfd2VpZ2h0cyA9IFNNKGJ0X3dlaWdodCwgQVJfQlRDT0VYX0JUX1dHSFQpIHwKKwkJCQkgICAgICAgU00od2xhbl93ZWlnaHQsIEFSX0JUQ09FWF9XTF9XR0hUKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCmluZGV4IGEzMmQ3ZTcuLjMyMzQ5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkJCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKIAkJbmZhcnJheVsxXSA9IG5mOwogCi0JCWlmICghQVJfU1JFVl85MjgwKGFoKSkgeworCQlpZiAoIUFSX1NSRVZfOTI4MChhaCkgJiYgIUFSX1NSRVZfOTI4NyhhaCkpIHsKIAkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDJfQ0NBKSwKIAkJCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKIAkJCWlmIChuZiAmIDB4MTAwKQpAQCAtMTU0LDcgKzE1NCw3IEBACiAJCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDFdIGlzICVkXG4iLCBuZik7CiAJCW5mYXJyYXlbNF0gPSBuZjsKIAotCQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKKwkJaWYgKCFBUl9TUkVWXzkyODAoYWgpICYmICFBUl9TUkVWXzkyODcoYWgpKSB7CiAJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gyX0VYVF9DQ0EpLAogCQkJCQlBUl9QSFlfQ0gyX0VYVF9NSU5DQ0FfUFdSKTsKIAkJCWlmIChuZiAmIDB4MTAwKQpAQCAtNjEzLDcgKzYxMyw3IEBACiAKIAlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKIAkJY2hhaW5tYXNrID0gMHg5OwotCWVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkpCisJZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCBBUl9TUkVWXzkyODcoYWgpKQogCQljaGFpbm1hc2sgPSAweDFCOwogCWVsc2UKIAkJY2hhaW5tYXNrID0gMHgzRjsKQEAgLTY5MSwxNSArNjkxLDIyIEBACiB2b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGksIGo7CisJczE2IG5vaXNlX2Zsb29yOworCisJaWYgKEFSX1NSRVZfOTI4MChhaCkpCisJCW5vaXNlX2Zsb29yID0gQVJfUEhZX0NDQV9NQVhfQVI5MjgwX0dPT0RfVkFMVUU7CisJZWxzZSBpZiAoQVJfU1JFVl85Mjg1KGFoKSkKKwkJbm9pc2VfZmxvb3IgPSBBUl9QSFlfQ0NBX01BWF9BUjkyODVfR09PRF9WQUxVRTsKKwllbHNlCisJCW5vaXNlX2Zsb29yID0gQVJfUEhZX0NDQV9NQVhfQVI1NDE2X0dPT0RfVkFMVUU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX05GX1JFQURJTkdTOyBpKyspIHsKIAkJYWgtPm5mQ2FsSGlzdFtpXS5jdXJySW5kZXggPSAwOwotCQlhaC0+bmZDYWxIaXN0W2ldLnByaXZORiA9IEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7CisJCWFoLT5uZkNhbEhpc3RbaV0ucHJpdk5GID0gbm9pc2VfZmxvb3I7CiAJCWFoLT5uZkNhbEhpc3RbaV0uaW52YWxpZE5GY291bnQgPQogCQkJQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIOwogCQlmb3IgKGogPSAwOyBqIDwgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOyBqKyspIHsKLQkJCWFoLT5uZkNhbEhpc3RbaV0ubmZDYWxCdWZmZXJbal0gPQotCQkJCUFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7CisJCQlhaC0+bmZDYWxIaXN0W2ldLm5mQ2FsQnVmZmVyW2pdID0gbm9pc2VfZmxvb3I7CiAJCX0KIAl9CiB9CkBAIC03MjIsMzEgKzcyOSwxMzkgQEAKIHN0YXRpYyB2b2lkIGF0aDlrX29sY190ZW1wX2NvbXBlbnNhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcmRkYXRhLCBpOwotCWludCBkZWx0YSwgY3VyclBEQURDLCByZWd2YWw7CisJaW50IGRlbHRhLCBjdXJyUERBREMsIHJlZ3ZhbCwgc2xvcGU7CiAKIAlyZGRhdGEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw0KTsKLQogCWN1cnJQREFEQyA9IE1TKHJkZGF0YSwgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX09VVCk7CiAKLQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQUNfSFBXUl81RykpCi0JCWRlbHRhID0gKGN1cnJQREFEQyAtIGFoLT5pbml0UERBREMgKyA0KSAvIDg7Ci0JZWxzZQotCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNSkgLyAxMDsKIAotCWlmIChkZWx0YSAhPSBhaC0+UERBRENkZWx0YSkgewotCQlhaC0+UERBRENkZWx0YSA9IGRlbHRhOwotCQlmb3IgKGkgPSAxOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKSB7Ci0JCQlyZWd2YWwgPSBhaC0+b3JpZ2luYWxHYWluW2ldIC0gZGVsdGE7Ci0JCQlpZiAocmVndmFsIDwgMCkKLQkJCQlyZWd2YWwgPSAwOworCWlmIChPTENfRk9SX0FSOTI4N18xMF9MQVRFUikgeworCQlpZiAoYWgtPmluaXRQREFEQyA9PSAwIHx8IGN1cnJQREFEQyA9PSAwKSB7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlzbG9wZSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVEVNUFNFTlNFX1NMT1BFKTsKKwkJCWlmIChzbG9wZSA9PSAwKQorCQkJCWRlbHRhID0gMDsKKwkJCWVsc2UKKwkJCQlkZWx0YSA9ICgoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQykqNCkgLyBzbG9wZTsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DSDBfVFhfUFdSQ1RSTDExLAorCQkJCQlBUl9QSFlfVFhfUFdSQ1RSTF9PTFBDX1RFTVBfQ09NUCwgZGVsdGEpOworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NIMV9UWF9QV1JDVFJMMTEsCisJCQkJCUFSX1BIWV9UWF9QV1JDVFJMX09MUENfVEVNUF9DT01QLCBkZWx0YSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQUNfSFBXUl81RykpCisJCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNCkgLyA4OworCQllbHNlCisJCQlkZWx0YSA9IChjdXJyUERBREMgLSBhaC0+aW5pdFBEQURDICsgNSkgLyAxMDsKIAotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX0dBSU5fVEJMMSArIGkgKiA0LAotCQkJCQlBUl9QSFlfVFhfR0FJTiwgcmVndmFsKTsKKwkJaWYgKGRlbHRhICE9IGFoLT5QREFEQ2RlbHRhKSB7CisJCQlhaC0+UERBRENkZWx0YSA9IGRlbHRhOworCQkJZm9yIChpID0gMTsgaSA8IEFSOTI4MF9UWF9HQUlOX1RBQkxFX1NJWkU7IGkrKykgeworCQkJCXJlZ3ZhbCA9IGFoLT5vcmlnaW5hbEdhaW5baV0gLSBkZWx0YTsKKwkJCQlpZiAocmVndmFsIDwgMCkKKwkJCQkJcmVndmFsID0gMDsKKworCQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCwKKwkJCQkJCUFSX1BIWV9UWF9HQUlOLCByZWd2YWwpOworCQkJfQogCQl9CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfOTI4NV9wYV9jYWwoc3RydWN0IGF0aF9odyAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od185MjcxX3BhX2NhbChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgcmVnVmFsOworCXVuc2lnbmVkIGludCBpOworCXUzMiByZWdMaXN0IFtdWzJdID0geworCQl7IDB4Nzg2YywgMCB9LAorCQl7IDB4Nzg1NCwgMCB9LAorCQl7IDB4NzgyMCwgMCB9LAorCQl7IDB4NzgyNCwgMCB9LAorCQl7IDB4Nzg2OCwgMCB9LAorCQl7IDB4NzgzYywgMCB9LAorCQl7IDB4NzgzOCwgMCB9ICwKKwkJeyAweDc4MjgsIDAgfSAsCisJfTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ0xpc3QpOyBpKyspCisJCXJlZ0xpc3RbaV1bMV0gPSBSRUdfUkVBRChhaCwgcmVnTGlzdFtpXVswXSk7CisKKwlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHg3ODM0KTsKKwlyZWdWYWwgJj0gKH4oMHgxKSk7CisJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CisJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTgwOCk7CisJcmVnVmFsIHw9ICgweDEgPDwgMjcpOworCVJFR19XUklURShhaCwgMHg5ODA4LCByZWdWYWwpOworCisJLyogNzg2YyxiMjMsMSwgcHdkZGFjPTEgKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fVE9QMywgQVI5Mjg1X0FOX1RPUDNfUFdEREFDLCAxKTsKKwkvKiA3ODU0LCBiNSwxLCBwZHJ4dHhiYj0xICovCisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JYVFhCQjEsIEFSOTI4NV9BTl9SWFRYQkIxX1BEUlhUWEJCMSwgMSk7CisJLyogNzg1NCwgYjcsMSwgcGR2Mmk9MSAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SWFRYQkIxLCBBUjkyODVfQU5fUlhUWEJCMV9QRFYySSwgMSk7CisJLyogNzg1NCwgYjgsMSwgcGRkYWNpbnRlcmZhY2U9MSAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SWFRYQkIxLCBBUjkyODVfQU5fUlhUWEJCMV9QRERBQ0lGLCAxKTsKKwkvKiA3ODI0LGIxMiwwLCBvZmZjYWw9MCAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMiwgQVI5Mjg1X0FOX1JGMkcyX09GRkNBTCwgMCk7CisJLyogNzgzOCwgYjEsMCwgcHdkZGI9MCAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHNywgQVI5Mjg1X0FOX1JGMkc3X1BXRERCLCAwKTsKKwkvKiA3ODIwLGIxMSwwLCBlbnBhY2FsPTAgKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzEsIEFSOTI4NV9BTl9SRjJHMV9FTlBBQ0FMLCAwKTsKKwkvKiA3ODIwLGIyNSwxLCBwZHBhZHJ2MT0wICovCisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfUERQQURSVjEsIDApOworCS8qIDc4MjAsYjI0LDAsIHBkcGFkcnYyPTAgKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzEsQVI5Mjg1X0FOX1JGMkcxX1BEUEFEUlYyLDApOworCS8qIDc4MjAsYjIzLDAsIHBkcGFvdXQ9MCAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMSwgQVI5Mjg1X0FOX1JGMkcxX1BEUEFPVVQsIDApOworCS8qIDc4M2MsYjE0LTE2LDcsIHBhZHJ2Z24ydGFiXzA9NyAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHOCxBUjkyODVfQU5fUkYyRzhfUEFEUlZHTjJUQUIwLCA3KTsKKwkvKgorCSAqIDc4MzgsYjI5LTMxLDAsIHBhZHJ2Z24xdGFiXzA9MAorCSAqIGRvZXMgbm90IG1hdHRlciBzaW5jZSB3ZSB0dXJuIGl0IG9mZgorCSAqLworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHNyxBUjkyODVfQU5fUkYyRzdfUEFEUlZHTjJUQUIwLCAwKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMywgQVI5MjcxX0FOX1JGMkczX0NDT01QLCAweGZmZik7CisKKwkvKiBTZXQ6CisJICogbG9jYWxtb2RlPTEsYm1vZGU9MSxibW9kZXJ4dHg9MSxzeW50aG9uPTEsCisJICogdHhvbj0xLHBhb249MSxvc2Nvbj0xLHN5bnRob25fZm9yY2U9MQorCSAqLworCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDIsIDB4Y2EwMzU4YTApOworCXVkZWxheSgzMCk7CisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkc2LCBBUjkyNzFfQU5fUkYyRzZfT0ZGUywgMCk7CisKKwkvKiBmaW5kIG9mZl82XzE7ICovCisJZm9yIChpID0gNjsgaSA+PSAwOyBpLS0pIHsKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4NzgzNCk7CisJCXJlZ1ZhbCB8PSAoMSA8PCAoMjAgKyBpKSk7CisJCVJFR19XUklURShhaCwgMHg3ODM0LCByZWdWYWwpOworCQl1ZGVsYXkoMSk7CisJCS8vcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4NzgzNCk7CisJCXJlZ1ZhbCAmPSAofigweDEgPDwgKDIwICsgaSkpKTsKKwkJcmVnVmFsIHw9IChNUyhSRUdfUkVBRChhaCwgMHg3ODQwKSwgQVI5Mjg1X0FOX1JYVFhCQjFfU1BBUkU5KQorCQkJICAgIDw8ICgyMCArIGkpKTsKKwkJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CisJfQorCisJLyogIEVtcGlyaWNhbCBvZmZzZXQgY29ycmVjdGlvbiAgKi8KKyNpZiAwCisJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkc2LCBBUjkyNzFfQU5fUkYyRzZfT0ZGUywgMHgyMCk7CisjZW5kaWYKKworCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweDc4MzQpOworCXJlZ1ZhbCB8PSAweDE7CisJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CisJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTgwOCk7CisJcmVnVmFsICY9ICh+KDB4MSA8PCAyNykpOworCVJFR19XUklURShhaCwgMHg5ODA4LCByZWdWYWwpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVnTGlzdCk7IGkrKykKKwkJUkVHX1dSSVRFKGFoLCByZWdMaXN0W2ldWzBdLCByZWdMaXN0W2ldWzFdKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGlzX3Jlc2V0KQogewogCiAJdTMyIHJlZ1ZhbDsKQEAgLTc2Miw2ICs4NzcsMTMgQEAKIAkJeyAweDc4MzgsIDAgfSwKIAl9OwogCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAiUnVubmluZyBQQSBDYWxpYnJhdGlvblxuIik7CisKKwkvKiBQQSBDQUwgaXMgbm90IG5lZWRlZCBmb3IgaGlnaCBwb3dlciBzb2x1dGlvbiAqLworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1RYR0FJTl9UWVBFKSA9PQorCSAgICBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSKQorCQlyZXR1cm47CisKIAlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCAoQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCB8IDB4MTQpKTsKIAkJdWRlbGF5KDEwKTsKQEAgLTc4NCwxMyArOTA2LDEzIEBACiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcyLCBBUjkyODVfQU5fUkYyRzJfT0ZGQ0FMLCAwKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzcsIEFSOTI4NV9BTl9SRjJHN19QV0REQiwgMCk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfRU5QQUNBTCwgMCk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfUERQQURSVjEsIDEpOworCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHMSwgQVI5Mjg1X0FOX1JGMkcxX1BEUEFEUlYxLCAwKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzEsIEFSOTI4NV9BTl9SRjJHMV9QRFBBRFJWMiwgMCk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkcxLCBBUjkyODVfQU5fUkYyRzFfUERQQU9VVCwgMCk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkc4LCBBUjkyODVfQU5fUkYyRzhfUEFEUlZHTjJUQUIwLCA3KTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzcsIEFSOTI4NV9BTl9SRjJHN19QQURSVkdOMlRBQjAsIDApOwogCWNjb21wX29yZyA9IE1TKFJFR19SRUFEKGFoLCBBUjkyODVfQU5fUkYyRzYpLCBBUjkyODVfQU5fUkYyRzZfQ0NPTVApOwotCVJFR19STVdfRklFTEQoYWgsIEFSOTI4NV9BTl9SRjJHNiwgQVI5Mjg1X0FOX1JGMkc2X0NDT01QLCA3KTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzYsIEFSOTI4NV9BTl9SRjJHNl9DQ09NUCwgMHhmKTsKIAogCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDIsIDB4Y2EwMzU4YTApOwogCXVkZWxheSgzMCk7CkBAIC04MDIsNyArOTI0LDYgQEAKIAkJcmVnVmFsIHw9ICgxIDw8ICgxOSArIGkpKTsKIAkJUkVHX1dSSVRFKGFoLCAweDc4MzQsIHJlZ1ZhbCk7CiAJCXVkZWxheSgxKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4NzgzNCk7CiAJCXJlZ1ZhbCAmPSAofigweDEgPDwgKDE5ICsgaSkpKTsKIAkJcmVnX2ZpZWxkID0gTVMoUkVHX1JFQUQoYWgsIDB4Nzg0MCksIEFSOTI4NV9BTl9SWFRYQkIxX1NQQVJFOSk7CiAJCXJlZ1ZhbCB8PSAocmVnX2ZpZWxkIDw8ICgxOSArIGkpKTsKQEAgLTgyMSw2ICs5NDIsMTcgQEAKIAlvZmZzXzZfMSA9IG9mZnNldD4+MTsKIAlvZmZzXzAgPSBvZmZzZXQgJiAxOwogCisJaWYgKCghaXNfcmVzZXQpICYmIChhaC0+cGFjYWxfaW5mby5wcmV2X29mZnNldCA9PSBvZmZzZXQpKSB7CisJCWlmIChhaC0+cGFjYWxfaW5mby5tYXhfc2tpcGNvdW50IDwgTUFYX1BBQ0FMX1NLSVBDT1VOVCkKKwkJCWFoLT5wYWNhbF9pbmZvLm1heF9za2lwY291bnQgPQorCQkJCTIgKiBhaC0+cGFjYWxfaW5mby5tYXhfc2tpcGNvdW50OworCQlhaC0+cGFjYWxfaW5mby5za2lwY291bnQgPSBhaC0+cGFjYWxfaW5mby5tYXhfc2tpcGNvdW50OworCX0gZWxzZSB7CisJCWFoLT5wYWNhbF9pbmZvLm1heF9za2lwY291bnQgPSAxOworCQlhaC0+cGFjYWxfaW5mby5za2lwY291bnQgPSAwOworCQlhaC0+cGFjYWxfaW5mby5wcmV2X29mZnNldCA9IG9mZnNldDsKKwl9CisKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUjkyODVfQU5fUkYyRzYsIEFSOTI4NV9BTl9SRjJHNl9PRkZTLCBvZmZzXzZfMSk7CiAJUkVHX1JNV19GSUVMRChhaCwgQVI5Mjg1X0FOX1JGMkczLCBBUjkyODVfQU5fUkYyRzNfUERWQ0NPTVAsIG9mZnNfMCk7CiAKQEAgLTg2MiwxNCArOTk0LDMwIEBACiAJCX0KIAl9CiAKKwkvKiBEbyBORiBjYWwgb25seSBhdCBsb25nZXIgaW50ZXJ2YWxzICovCiAJaWYgKGxvbmdjYWwpIHsKLQkJaWYgKEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCi0JCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CisJCS8qIERvIHBlcmlvZGljIFBBT2Zmc2V0IENhbCAqLworCQlpZiAoQVJfU1JFVl85MjcxKGFoKSkKKwkJCWF0aDlrX2h3XzkyNzFfcGFfY2FsKGFoKTsKKwkJZWxzZSBpZiAoQVJfU1JFVl85Mjg1XzExX09SX0xBVEVSKGFoKSkgeworCQkJaWYgKCFhaC0+cGFjYWxfaW5mby5za2lwY291bnQpCisJCQkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgsIGZhbHNlKTsKKwkJCWVsc2UKKwkJCQlhaC0+cGFjYWxfaW5mby5za2lwY291bnQtLTsKKwkJfQogCi0JCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSIHx8IE9MQ19GT1JfQVI5Mjg3XzEwX0xBVEVSKQogCQkJYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKGFoKTsKKworCQkvKiBHZXQgdGhlIHZhbHVlIGZyb20gdGhlIHByZXZpb3VzIE5GIGNhbCBhbmQgdXBkYXRlIGhpc3RvcnkgYnVmZmVyICovCiAJCWF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKTsKKworCQkvKgorCQkgKiBMb2FkIHRoZSBORiBmcm9tIGhpc3RvcnkgYnVmZmVyIG9mIHRoZSBjdXJyZW50IGNoYW5uZWwuCisJCSAqIE5GIGlzIHNsb3cgdGltZS12YXJpYW50LCBzbyBpdCBpcyBPSyB0byB1c2UgYSBoaXN0b3JpY2FsIHZhbHVlLgorCQkgKi8KIAkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CisKIAkJYXRoOWtfaHdfc3RhcnRfbmZjYWwoYWgpOwogCX0KIApAQCAtOTIyLDggKzEwNzAsMTEgQEAKIAkJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewogCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKLQkJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJCQlpZiAoIUFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCisJCQkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLAorCQkJCQkgICAgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCSAgICBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOwogCQl9CiAKIAkJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KQEAgLTk0MSwxNCArMTA5MiwxNyBAQAogCQl9CiAKIAkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7Ci0JCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQkJaWYgKCFBUl9TUkVWXzkyODdfMTBfT1JfTEFURVIoYWgpKQorCQkJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwKKwkJCQkJICAgIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKIAkJfQogCX0KIAogCS8qIERvIFBBIENhbGlicmF0aW9uICovCiAJaWYgKEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihhaCkpCi0JCWF0aDlrX2h3XzkyODVfcGFfY2FsKGFoKTsKKwkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgsIHRydWUpOwogCiAJLyogRG8gTkYgQ2FsaWJyYXRpb24gYWZ0ZXIgREMgb2Zmc2V0IGFuZCBvdGhlciBjYWxpYnJhdGlvbnMgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jYWxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKaW5kZXggZmU1MzY3Zi4uMDE5YmNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NhbGliLmgKQEAgLTI1LDcgKzI1LDkgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXRoOWtfcGVyY2FsX2RhdGEgYWRjX2RjX2NhbF9zaW5nbGVfc2FtcGxlOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdGg5a19wZXJjYWxfZGF0YSBhZGNfaW5pdF9kY19jYWw7CiAKLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRSAgICAgIAkJLTg1CisjZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0FSNTQxNl9HT09EX1ZBTFVFCS04NQorI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9BUjkyODBfR09PRF9WQUxVRQktMTEyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUFYX0FSOTI4NV9HT09EX1ZBTFVFCS0xMTgKICNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCiAjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKICNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKQEAgLTEwOCw2ICsxMTAsMTMgQEAKIAl1OCBpbnZhbGlkTkZjb3VudDsKIH07CiAKKyNkZWZpbmUgTUFYX1BBQ0FMX1NLSVBDT1VOVCA4CitzdHJ1Y3QgYXRoOWtfcGFjYWxfaW5mb3sKKwlpbnQzMl90IHByZXZfb2Zmc2V0OwkvKiBQcmV2aW91cyB2YWx1ZSBvZiBQQSBvZmZzZXQgdmFsdWUgKi8KKwlpbnQ4X3QgbWF4X3NraXBjb3VudDsJLyogTWF4IE5vLiBvZiB0aW1lcyBQQUNBTCBjYW4gYmUgc2tpcHBlZCAqLworCWludDhfdCBza2lwY291bnQ7CS8qIE5vLiBvZiB0aW1lcyB0aGUgUEFDQUwgdG8gYmUgc2tpcHBlZCAqLworfTsKKwogYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCmluZGV4IDZkMjA3MjUuLjJiZTRjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCkBAIC05Myw2ICs5Myw4IEBACiAJaW50IGksIHFjdU9mZnNldCA9IDAsIGRjdU9mZnNldCA9IDA7CiAJdTMyICpxY3VCYXNlID0gJnZhbFswXSwgKmRjdUJhc2UgPSAmdmFsWzRdOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwogCVJFR19XUklURShhaCwgQVJfTUFDTUlTQywKIAkJICAoKEFSX01BQ01JU0NfRE1BX09CU19MSU5FXzggPDwgQVJfTUFDTUlTQ19ETUFfT0JTX1MpIHwKIAkJICAgKEFSX01BQ01JU0NfTUlTQ19PQlNfQlVTXzEgPDwKQEAgLTE1OSw2ICsxNjEsOCBAQAogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAogCQkJIkFSX0NSOiAweCV4IFxuIiwgUkVHX1JFQUQoYWgsIEFSX0NSKSk7CiAKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKKwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KIApAQCAtNDg2LDYgKzQ5MCw4MyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFCiB9OwogCisjZGVmaW5lIFBSKHN0ciwgZWxlbSkJCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwJCQlcCisJCQkJIiVzJTEzdSUxMXUlMTB1JTEwdVxuIiwgc3RyLAkJXAorCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfQkVdXS5lbGVtLCBcCisJCXNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3NjLT50eC5od3FfbWFwW0FUSDlLX1dNRV9BQ19CS11dLmVsZW0sIFwKKwkJc2MtPmRlYnVnLnN0YXRzLnR4c3RhdHNbc2MtPnR4Lmh3cV9tYXBbQVRIOUtfV01FX0FDX1ZJXV0uZWxlbSwgXAorCQlzYy0+ZGVidWcuc3RhdHMudHhzdGF0c1tzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dXS5lbGVtKTsgXAorfSB3aGlsZSgwKQorCitzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfeG1pdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGludCBsZW4gPSAwLCBzaXplID0gMjA0ODsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisKKwlidWYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWYsICIlMzBzICUxMHMlMTBzJTEwc1xuXG4iLCAiQkUiLCAiQksiLCAiVkkiLCAiVk8iKTsKKworCVBSKCJNUERVcyBRdWV1ZWQ6ICAgICIsIHF1ZXVlZCk7CisJUFIoIk1QRFVzIENvbXBsZXRlZDogIiwgY29tcGxldGVkKTsKKwlQUigiQWdncmVnYXRlczogICAgICAiLCBhX2FnZ3IpOworCVBSKCJBTVBEVXMgUXVldWVkOiAgICIsIGFfcXVldWVkKTsKKwlQUigiQU1QRFVzIENvbXBsZXRlZDoiLCBhX2NvbXBsZXRlZCk7CisJUFIoIkFNUERVcyBSZXRyaWVkOiAgIiwgYV9yZXRyaWVzKTsKKwlQUigiQU1QRFVzIFhSZXRyaWVkOiAiLCBhX3hyZXRyaWVzKTsKKwlQUigiRklGTyBVbmRlcnJ1bjogICAiLCBmaWZvX3VuZGVycnVuKTsKKwlQUigiVFhPUCBFeGNlZWRlZDogICAiLCB4dHhvcCk7CisJUFIoIlRYVElNRVIgRXhwaXJ5OiAgIiwgdGltZXJfZXhwKTsKKwlQUigiREVTQyBDRkcgRXJyb3I6ICAiLCBkZXNjX2NmZ19lcnIpOworCVBSKCJEQVRBIFVuZGVycnVuOiAgICIsIGRhdGFfdW5kZXJydW4pOworCVBSKCJERUxJTSBVbmRlcnJ1bjogICIsIGRlbGltX3VuZGVycnVuKTsKKworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCWtmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIGF0aF9kZWJ1Z19zdGF0X3R4KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAorCQkgICAgICAgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZi0+YmZfZGVzYzsKKworCWlmIChiZl9pc2FtcGR1KGJmKSkgeworCQlpZiAoYmZfaXN4cmV0cmllZChiZikpCisJCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBhX3hyZXRyaWVzKTsKKwkJZWxzZQorCQkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgYV9jb21wbGV0ZWQpOworCX0gZWxzZSB7CisJCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGNvbXBsZXRlZCk7CisJfQorCisJaWYgKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklGTykKKwkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgZmlmb191bmRlcnJ1bik7CisJaWYgKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfWFRYT1ApCisJCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIHh0eG9wKTsKKwlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9USU1FUl9FWFBJUkVEKQorCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCB0aW1lcl9leHApOworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICYgQVRIOUtfVFhfREVTQ19DRkdfRVJSKQorCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBkZXNjX2NmZ19lcnIpOworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICYgQVRIOUtfVFhfREFUQV9VTkRFUlJVTikKKwkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgZGF0YV91bmRlcnJ1bik7CisJaWYgKGRzLT5kc190eHN0YXQudHNfZmxhZ3MgJiBBVEg5S19UWF9ERUxJTV9VTkRFUlJVTikKKwkJVFhfU1RBVF9JTkModHhxLT5heHFfcW51bSwgZGVsaW1fdW5kZXJydW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3htaXQgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfeG1pdCwKKwkub3BlbiA9IGF0aDlrX2RlYnVnZnNfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRQorfTsKIAogaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CkBAIC01MDAsMzUgKzU4MSw0MiBAQAogCQlnb3RvIGVycjsKIAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RlYnVnID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZGVidWciLAotCQlTX0lSVUdPIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZGVidWcpOworCQlTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZGVidWcpOwogCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfZGVidWcpCiAJCWdvdG8gZXJyOwogCi0Jc2MtPmRlYnVnLmRlYnVnZnNfZG1hID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVHTywKKwlzYy0+ZGVidWcuZGVidWdmc19kbWEgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkbWEiLCBTX0lSVVNSLAogCQkJCSAgICAgICBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc19kbWEpOwogCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfZG1hKQogCQlnb3RvIGVycjsKIAogCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsCi0JCQkJCQkgICAgIFNfSVJVR08sCisJCQkJCQkgICAgIFNfSVJVU1IsCiAJCQkJCQkgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKIAkJCQkJCSAgICAgc2MsICZmb3BzX2ludGVycnVwdCk7CiAJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19pbnRlcnJ1cHQpCiAJCWdvdG8gZXJyOwogCiAJc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmNzdGF0IiwKLQkJCQkJCSAgU19JUlVHTywKKwkJCQkJCSAgU19JUlVTUiwKIAkJCQkJCSAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAogCQkJCQkJICBzYywgJmZvcHNfcmNzdGF0KTsKIAlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCkKIAkJZ290byBlcnI7CiAKIAlzYy0+ZGVidWcuZGVidWdmc193aXBoeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoCi0JCSJ3aXBoeSIsIFNfSVJVR08gfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAorCQkid2lwaHkiLCBTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKIAkJJmZvcHNfd2lwaHkpOwogCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpCiAJCWdvdG8gZXJyOwogCisJc2MtPmRlYnVnLmRlYnVnZnNfeG1pdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInhtaXQiLAorCQkJCQkJICAgICBTX0lSVVNSLAorCQkJCQkJICAgICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgICAgIHNjLCAmZm9wc194bWl0KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQpCisJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJYXRoOWtfZXhpdF9kZWJ1ZyhzYyk7CkBAIC01MzcsNiArNjI1LDcgQEAKIAogdm9pZCBhdGg5a19leGl0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogeworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3htaXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCmluZGV4IGVkZGExNWIuLjcyNDFmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCkBAIC0zMCwxMSArMzAsMjIgQEAKIAlBVEhfREJHX0NPTkZJRwkJPSAweDAwMDAwMjAwLAogCUFUSF9EQkdfRkFUQUwJCT0gMHgwMDAwMDQwMCwKIAlBVEhfREJHX1BTCQk9IDB4MDAwMDA4MDAsCisJQVRIX0RCR19IV1RJTUVSCQk9IDB4MDAwMDEwMDAsCisJQVRIX0RCR19CVENPRVgJCT0gMHgwMDAwMjAwMCwKIAlBVEhfREJHX0FOWQkJPSAweGZmZmZmZmZmCiB9OwogCiAjZGVmaW5lIERCR19ERUZBVUxUIChBVEhfREJHX0ZBVEFMKQogCitzdHJ1Y3QgYXRoX3R4cTsKK3N0cnVjdCBhdGhfYnVmOworCisjaWZkZWYgQ09ORklHX0FUSDlLX0RFQlVHCisjZGVmaW5lIFRYX1NUQVRfSU5DKHEsIGMpIHNjLT5kZWJ1Zy5zdGF0cy50eHN0YXRzW3FdLmMrKworI2Vsc2UKKyNkZWZpbmUgVFhfU1RBVF9JTkMocSwgYykgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKIAogLyoqCkBAIC04Nyw5ICs5OCw0NSBAQAogCXU4IHBlcjsKIH07CiAKKy8qKgorICogc3RydWN0IGF0aF90eF9zdGF0cyAtIFN0YXRpc3RpY3MgYWJvdXQgVFgKKyAqIEBxdWV1ZWQ6IFRvdGFsIE1QRFVzIChub24tYWdncikgcXVldWVkCisgKiBAY29tcGxldGVkOiBUb3RhbCBNUERVcyAobm9uLWFnZ3IpIGNvbXBsZXRlZAorICogQGFfYWdncjogVG90YWwgbm8uIG9mIGFnZ3JlZ2F0ZXMgcXVldWVkCisgKiBAYV9xdWV1ZWQ6IFRvdGFsIEFNUERVcyBxdWV1ZWQKKyAqIEBhX2NvbXBsZXRlZDogVG90YWwgQU1QRFVzIGNvbXBsZXRlZAorICogQGFfcmV0cmllczogTm8uIG9mIEFNUERVcyByZXRyaWVkIChTVykKKyAqIEBhX3hyZXRyaWVzOiBOby4gb2YgQU1QRFVzIGRyb3BwZWQgZHVlIHRvIHhyZXRyaWVzCisgKiBAZmlmb191bmRlcnJ1bjogRklGTyB1bmRlcnJ1biBvY2N1cnJlbmNlcworCVZhbGlkIG9ubHkgZm9yOgorCQktIG5vbi1hZ2dyZWdhdGUgY29uZGl0aW9uLgorCQktIGZpcnN0IHBhY2tldCBvZiBhZ2dyZWdhdGUuCisgKiBAeHR4b3A6IE5vLiBvZiBmcmFtZXMgZmlsdGVyZWQgYmVjYXVzZSBvZiBUWE9QIGxpbWl0CisgKiBAdGltZXJfZXhwOiBUcmFuc21pdCB0aW1lciBleHBpcnkKKyAqIEBkZXNjX2NmZ19lcnI6IERlc2NyaXB0b3IgY29uZmlndXJhdGlvbiBlcnJvcnMKKyAqIEBkYXRhX3VybjogVFggZGF0YSB1bmRlcnJ1biBlcnJvcnMKKyAqIEBkZWxpbV91cm46IFRYIGRlbGltaXRlciB1bmRlcnJ1biBlcnJvcnMKKyAqLworc3RydWN0IGF0aF90eF9zdGF0cyB7CisJdTMyIHF1ZXVlZDsKKwl1MzIgY29tcGxldGVkOworCXUzMiBhX2FnZ3I7CisJdTMyIGFfcXVldWVkOworCXUzMiBhX2NvbXBsZXRlZDsKKwl1MzIgYV9yZXRyaWVzOworCXUzMiBhX3hyZXRyaWVzOworCXUzMiBmaWZvX3VuZGVycnVuOworCXUzMiB4dHhvcDsKKwl1MzIgdGltZXJfZXhwOworCXUzMiBkZXNjX2NmZ19lcnI7CisJdTMyIGRhdGFfdW5kZXJydW47CisJdTMyIGRlbGltX3VuZGVycnVuOworfTsKKwogc3RydWN0IGF0aF9zdGF0cyB7CiAJc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgaXN0YXRzOwogCXN0cnVjdCBhdGhfcmNfc3RhdHMgcmNzdGF0c1tSQVRFX1RBQkxFX1NJWkVdOworCXN0cnVjdCBhdGhfdHhfc3RhdHMgdHhzdGF0c1tBVEg5S19OVU1fVFhfUVVFVUVTXTsKIH07CiAKIHN0cnVjdCBhdGg5a19kZWJ1ZyB7CkBAIC0xMDAsNiArMTQ3LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jjc3RhdDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3dpcGh5OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfeG1pdDsKIAlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwogfTsKIApAQCAtMTEwLDYgKzE1OCw4IEBACiB2b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpOwogdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGVudW0gYXRoOWtfaW50IHN0YXR1cyk7CiB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfdHgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCSAgICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpOwogdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAogCQkJICAgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcik7CiAKQEAgLTE0OCw2ICsxOTgsMTIgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X3R4KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCiAJCQkJCSAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcywgdTggcGVyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbS5jCmluZGV4IGNlMGU4NmMuLmI2ZTUyZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmMKQEAgLTE2LDkgKzE2LDE2IEBACiAKICNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgICAgIHUzMiByZWcsIHUzMiBtYXNrLAotCQkJCSAgICAgIHUzMiBzaGlmdCwgdTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdTE2IGF0aDlrX2h3X2ZiaW4yZnJlcSh1OCBmYmluLCBib29sIGlzMkdIeikKK3sKKwlpZiAoZmJpbiA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQorCQlyZXR1cm4gZmJpbjsKKworCXJldHVybiAodTE2KSAoKGlzMkdIeikgPyAoMjMwMCArIGZiaW4pIDogKDQ4MDAgKyA1ICogZmJpbikpOworfQorCit2b2lkIGF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLAorCQkJICAgICAgIHUzMiBzaGlmdCwgdTMyIHZhbCkKIHsKIAl1MzIgcmVnVmFsOwogCkBAIC0zMywxOSArNDAsOCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgYXRoOWtfaHdfZmJpbjJmcmVxKHU4IGZiaW4sIGJvb2wgaXMyR0h6KQotewotCi0JaWYgKGZiaW4gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKLQkJcmV0dXJuIGZiaW47Ci0KLQlyZXR1cm4gKHUxNikgKChpczJHSHopID8gKDIzMDAgKyBmYmluKSA6ICg0ODAwICsgNSAqIGZiaW4pKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQxNl90IGF0aDlrX2h3X2ludGVycG9sYXRlKHUxNiB0YXJnZXQsCi0JCQkJCSAgIHUxNiBzcmNMZWZ0LCB1MTYgc3JjUmlnaHQsCi0JCQkJCSAgIGludDE2X3QgdGFyZ2V0TGVmdCwKLQkJCQkJICAgaW50MTZfdCB0YXJnZXRSaWdodCkKK2ludDE2X3QgYXRoOWtfaHdfaW50ZXJwb2xhdGUodTE2IHRhcmdldCwgdTE2IHNyY0xlZnQsIHUxNiBzcmNSaWdodCwKKwkJCSAgICAgaW50MTZfdCB0YXJnZXRMZWZ0LCBpbnQxNl90IHRhcmdldFJpZ2h0KQogewogCWludDE2X3QgcnY7CiAKQEAgLTU5LDkgKzU1LDggQEAKIAlyZXR1cm4gcnY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgodTggdGFyZ2V0LCB1OCAqcExpc3QsCi0JCQkJCQkgIHUxNiBsaXN0U2l6ZSwgdTE2ICppbmRleEwsCi0JCQkJCQkgIHUxNiAqaW5kZXhSKQorYm9vbCBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgodTggdGFyZ2V0LCB1OCAqcExpc3QsIHUxNiBsaXN0U2l6ZSwKKwkJCQkgICAgdTE2ICppbmRleEwsIHUxNiAqaW5kZXhSKQogewogCXUxNiBpOwogCkBAIC04OCwxNiArODMsMTYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19udnJhbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFoLT5haF9zYzsKIAogCXJldHVybiBzYy0+YnVzX29wcy0+ZWVwcm9tX3JlYWQoYWgsIG9mZiwgZGF0YSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19maWxsX3ZwZF90YWJsZSh1OCBwd3JNaW4sIHU4IHB3ck1heCwgdTggKnBQd3JMaXN0LAotCQkJCQkgICB1OCAqcFZwZExpc3QsIHUxNiBudW1JbnRlcmNlcHRzLAotCQkJCQkgICB1OCAqcFJldFZwZExpc3QpCit2b2lkIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkgICAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkgICAgIHU4ICpwUmV0VnBkTGlzdCkKIHsKIAl1MTYgaSwgazsKIAl1OCBjdXJyUHdyID0gcHdyTWluOwpAQCAtMTIwLDE2ICsxMTUsMTQgQEAKIAkJcFJldFZwZExpc3RbaV0gPSAodTgpIGs7CiAJCWN1cnJQd3IgKz0gMjsKIAl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcG93SW5mbywKLQkJCQkgICAgICB1MTYgbnVtQ2hhbm5lbHMsCi0JCQkJICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwTmV3UG93ZXIsCi0JCQkJICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzRXh0VGFyZ2V0KQordm9pZCBhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCisJCQkJICAgICAgIHUxNiBudW1DaGFubmVscywKKwkJCQkgICAgICAgc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnICpwTmV3UG93ZXIsCisJCQkJICAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKIHsKIAlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CiAJdTE2IGNsbywgY2hpOwpAQCAtMTUwLDEwICsxNDMsMTAgQEAKIAkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CiAJCQkJbWF0Y2hJbmRleCA9IGk7CiAJCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgotCQkJCSAgIChmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAotCQkJCQkJICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKKwkJCX0gZWxzZSBpZiAoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJSVNfQ0hBTl8yR0haKGNoYW4pKSAmJiBpID4gMCAmJgorCQkJCSAgIGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCisJCQkJCQlJU19DSEFOXzJHSFooY2hhbikpKSB7CiAJCQkJbG93SW5kZXggPSBpIC0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE3OSw3NSArMTcyLDEyIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAotCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAotCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQotewotCXU4IHBjZGFjLCBpID0gMDsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKLQlib29sIG1hdGNoOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQotCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCi0JCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKLQkJCWJyZWFrOwotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCi0JCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAotCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOwotCWlmIChtYXRjaCkgewotCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07Ci0JCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKLQl9IGVsc2UgewotCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07Ci0JCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKwotCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOwotCX0KLQotCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKLQkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQotCQlpKys7Ci0KLQkqcGNkYWNJZHggPSBpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfb2xjX2dldF9wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJdTMyIGluaXRUeEdhaW4sCi0JCQkJaW50IHR4UG93ZXIsCi0JCQkJdTggKnBQREFEQ1ZhbHVlcykKLXsKLQl1MzIgaTsKLQl1MzIgb2Zmc2V0OwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCi0JCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAotCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKLQkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7Ci0KLQlvZmZzZXQgPSB0eFBvd2VyOwotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQotCQlpZiAoaSA8IG9mZnNldCkKLQkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKLQkJZWxzZQotCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKLX0KLQotCi0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKLQkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAotCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQordm9pZCBhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKKwkJCQl1MTYgbnVtQ2hhbm5lbHMsCisJCQkJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBOZXdQb3dlciwKKwkJCQl1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQogewogCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKIAl1MTYgY2xvLCBjaGk7CkBAIC0yNjgsMTAgKzE5OCwxMCBAQAogCQkJCW1hdGNoSW5kZXggPSBpOwogCQkJCWJyZWFrOwogCQkJfSBlbHNlCi0JCQkJaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgJiYKLQkJCQkgICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKKwkJCQlpZiAoZnJlcSA8IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJSVNfQ0hBTl8yR0haKGNoYW4pKSAmJiBpID4gMCAmJgorCQkJCSAgICBmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAorCQkJCQkJSVNfQ0hBTl8yR0haKGNoYW4pKSkgewogCQkJCQlsb3dJbmRleCA9IGkgLSAxOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC0yOTcsOSArMjI3LDggQEAKIAl9CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKLQkJCQkgICAgICAgYm9vbCBpczJHSHosIGludCBudW1fYmFuZF9lZGdlcykKK3UxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAorCQkJCWJvb2wgaXMyR0h6LCBpbnQgbnVtX2JhbmRfZWRnZXMpCiB7CiAJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwogCWludCBpOwpAQCAtMzI1LDI0NTEgKzI1NCwxNCBAQAogCXJldHVybiB0d2ljZU1heEVkZ2VQb3dlcjsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBFRVBST00gT3BlcmF0aW9ucyBmb3IgNEsgc2l6ZWQgY2FyZHMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IGF0aDlrX2h3XzRrX2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXJldHVybiAoKGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4Rik7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9yZXYoc3RydWN0IGF0aF9odyAqYWgpCi17Ci0JcmV0dXJuICgoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od180a19maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLSNkZWZpbmUgU0laRV9FRVBST01fNEsgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KSkKLQl1MTYgKmVlcF9kYXRhID0gKHUxNiAqKSZhaC0+ZWVwcm9tLm1hcDRrOwotCWludCBhZGRyLCBlZXBfc3RhcnRfbG9jID0gMDsKLQotCWVlcF9zdGFydF9sb2MgPSA2NDsKLQotCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiUmVhZGluZyBmcm9tIEVFUFJPTSwgbm90IGZsYXNoXG4iKTsKLQl9Ci0KLQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fNEs7IGFkZHIrKykgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIGFkZHIgKyBlZXBfc3RhcnRfbG9jLCBlZXBfZGF0YSkpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSAgICAgICAiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvbiBcbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCWVlcF9kYXRhKys7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci0jdW5kZWYgU0laRV9FRVBST01fNEsKLX0KLQotc3RhdGljIGludCBhdGg5a19od180a19jaGVja19lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCi17Ci0jZGVmaW5lIEVFUFJPTV80S19TSVpFIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9Ci0JCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqKSAmYWgtPmVlcHJvbS5tYXA0azsKLQl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7Ci0JdTMyIHN1bSA9IDAsIGVsOwotCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7Ci0JaW50IGksIGFkZHI7Ci0KLQotCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULAotCQkJCQkgJm1hZ2ljKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKLQotCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewotCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKLQotCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQkJbmVlZF9zd2FwID0gdHJ1ZTsKLQkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFoLT5lZXByb20pOwotCi0JCQkJZm9yIChhZGRyID0gMDsgYWRkciA8IEVFUFJPTV80S19TSVpFOyBhZGRyKyspIHsKLQkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7Ci0JCQkJCSplZXBkYXRhID0gdGVtcDsKLQkJCQkJZWVwZGF0YSsrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgotCQkJCQkiZW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfQotCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAotCQluZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKLQotCWlmIChuZWVkX3N3YXApCi0JCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCWVsc2UKLQkJZWwgPSBhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIubGVuZ3RoOwotCi0JaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSkKLQkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNik7Ci0JZWxzZQotCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7Ci0KLQllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZWw7IGkrKykKLQkJc3VtIF49ICplZXBkYXRhKys7Ci0KLQlpZiAobmVlZF9zd2FwKSB7Ci0JCXUzMiBpbnRlZ2VyOwotCQl1MTYgd29yZDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nXG4iKTsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKLQotCQlpbnRlZ2VyID0gc3dhYjMyKGVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENvbW1vbik7Ci0JCWVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENvbW1vbiA9IGludGVnZXI7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9FRVA0S19NQVhfQ0hBSU5TOyBpKyspIHsKLQkJCWludGVnZXIgPSBzd2FiMzIoZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ2hhaW5baV0pOwotCQkJZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQkJd29yZCA9IHN3YWIxNihlZXAtPm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7Ci0JCQllZXAtPm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbiA9IHdvcmQ7Ci0JCX0KLQl9Ci0KLQlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8Ci0JICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAotCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLSN1bmRlZiBFRVBST01fNEtfU0laRQotfQotCi1zdGF0aWMgdTMyIGF0aDlrX2h3XzRrX2dldF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIEVFUF9ORlRIUkVTSF8yOgotCQlyZXR1cm4gcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMF07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDApOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOwotCWNhc2UgQVJfRUVQUk9NX01BQygxKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMik6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07Ci0JY2FzZSBFRVBfUkVHXzA6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOwotCWNhc2UgRUVQX1JFR18xOgotCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKLQljYXNlIEVFUF9PUF9DQVA6Ci0JCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOwotCWNhc2UgRUVQX09QX01PREU6Ci0JCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKLQljYXNlIEVFUF9SRl9TSUxFTlQ6Ci0JCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbC0+b2JfMDE7Ci0JY2FzZSBFRVBfREJfMjoKLQkJcmV0dXJuIHBNb2RhbC0+ZGIxXzAxOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQljYXNlIEVFUF9GUkFDX05fNUc6Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKLQkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKLQkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKLQkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAotCQkJCXUxNiBudW1YcGRHYWlucykKLXsKLSNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUgXAotCSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7Ci0JaW50IGksIGosIGs7Ci0JaW50MTZfdCBzczsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKLQlzdGF0aWMgdTggdnBkVGFibGVMW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQlzdGF0aWMgdTggdnBkVGFibGVSW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCi0JCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKLQotCXU4ICpwVnBkTCwgKnBWcGRSLCAqcFB3ckwsICpwUHdyUjsKLQl1OCBtaW5Qd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKLQl1OCBtYXhQd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKLQlpbnQxNl90IHZwZFN0ZXA7Ci0JaW50MTZfdCB0bXBWYWw7Ci0JdTE2IHNpemVDdXJyVnBkVGFibGUsIG1heEluZGV4LCB0Z3RJbmRleDsKLQlib29sIG1hdGNoOwotCWludDE2X3QgbWluRGVsdGEgPSAwOwotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLSNkZWZpbmUgUERfR0FJTl9CT1VOREFSWV9ERUZBVUxUIDU4OwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCi0JCQkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCi0JCQkJCUlTX0NIQU5fMkdIWihjaGFuKSksIGJDaGFucywgbnVtUGllcnMsCi0JCQkJCSZpZHhMLCAmaWR4Uik7Ci0KLQlpZiAobWF0Y2gpIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOwotCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07Ci0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKLQkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAotCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCXZwZFRhYmxlSVtpXSk7Ci0JCX0KLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgewotCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07Ci0JCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKLQkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOwotCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07Ci0KLQkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7Ci0KLQkJCW1heFB3clQ0W2ldID0KLQkJCQltaW4ocFB3ckxbQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTIC0gMV0sCi0JCQkJICAgIHBQd3JSW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAtIDFdKTsKLQotCi0JCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCi0JCQkJCQlwUHdyTCwgcFZwZEwsCi0JCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCi0JCQkJCQl2cGRUYWJsZUxbaV0pOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3clIsIHBWcGRSLAotCQkJCQkJQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVSW2ldKTsKLQotCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKLQkJCQl2cGRUYWJsZUlbaV1bal0gPQotCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCi0JCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCi0JCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAotCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgotCQkJCQkJICAgICAgIChjaGFuKSksCi0JCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCi0JCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKLQkJCX0KLQkJfQotCX0KLQotCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKLQotCWsgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCi0JCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKLQkJZWxzZQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKLQotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9Ci0JCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKLQotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKLQkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7Ci0JCX0gZWxzZSB7Ci0JCQltaW5EZWx0YSA9IDA7Ci0JCX0KLQotCQlpZiAoaSA9PSAwKSB7Ci0JCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOwotCQkJZWxzZQotCQkJCXNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQotCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQotCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7Ci0JCX0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOwotCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7Ci0KLQkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKLQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKLQkJCXNzKys7Ci0JCX0KLQotCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOwotCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCi0JCQkJKG1pblB3clQ0W2ldIC8gMikpOwotCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KLQkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKLQotCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKQotCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107Ci0KLQkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdIC0KLQkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKLQotCQlpZiAodGd0SW5kZXggPj0gbWF4SW5kZXgpIHsKLQkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCi0JCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKLQkJCQl0bXBWYWwgPSAoaW50MTZfdCkgVE1QX1ZBTF9WUERfVEFCTEU7Ci0JCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KLQkJCQkJCQkgMjU1IDogdG1wVmFsKTsKLQkJCQlzcysrOwotCQkJfQotCQl9Ci0JfQotCi0Jd2hpbGUgKGkgPCBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSykgewotCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IFBEX0dBSU5fQk9VTkRBUllfREVGQVVMVDsKLQkJaSsrOwotCX0KLQotCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKLQkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKLQkJaysrOwotCX0KLQotCXJldHVybjsKLSN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQotewotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOwotCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFzZXQ7Ci0JdTggKnBDYWxCQ2hhbnMgPSBOVUxMOwotCXUxNiBwZEdhaW5PdmVybGFwX3QyOwotCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107Ci0JdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKLQl1MTYgbnVtUGllcnMsIGksIGo7Ci0JaW50MTZfdCB0TWluQ2FsUG93ZXI7Ci0JdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7Ci0JdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKLQl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7Ci0KLQl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47Ci0KLQlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCXBkR2Fpbk92ZXJsYXBfdDIgPQotCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyLnBkR2Fpbk92ZXJsYXA7Ci0JfSBlbHNlIHsKLQkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKLQkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7Ci0JfQotCi0JcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOwotCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7Ci0KLQludW1YcGRHYWluID0gMDsKLQotCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0s7IGkrKykgewotCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgewotCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUykKLQkJCQlicmVhazsKLQkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQotCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7Ci0JCQludW1YcGRHYWluKys7Ci0JCX0KLQl9Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAotCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKLQkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLCAwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCi0JCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCi0JCSAgICAoaSAhPSAwKSkgewotCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKLQkJfSBlbHNlCi0JCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7Ci0KLQkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7Ci0JCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOwotCi0JCQlhdGg5a19od19nZXRfNGtfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKLQkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAotCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKLQkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKLQotCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKLQkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCi0JCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7Ci0JCQl9Ci0KLQkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OwotCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKLQkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOwotCi0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAotCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAotCQkJCQlyZWczMik7Ci0JCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkiUERBREM6IENoYWluICVkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKLQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCi0JCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8XG4iLAotCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAotCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCi0JCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKLQkJCQkJNCAqIGogKyAzLAotCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKLQotCQkJCXJlZ09mZnNldCArPSA0OwotCQkJfQotCQl9Ci0JfQotCi0JKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJCQkgaW50MTZfdCAqcmF0ZXNBcnJheSwKLQkJCQkJCSB1MTYgY2ZnQ3RsLAotCQkJCQkJIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCQkJIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJCSB1MTYgcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0Jc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQotCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OwotCi0JaW50IGk7Ci0JaW50MTZfdCB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgKnJlcDsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfQotCX07Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbUV4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfSB9LCB0YXJnZXRQb3dlckNja0V4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwIH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0gewotCQkwLCB7MCwgMCwgMCwgMH0KLQl9OwotCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7Ci0JdTE2IGN0bE1vZGVzRm9yMTFnW10gPQotCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKLQkJICBDVExfMkdIVDQwCi0JCX07Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCWludCB0eF9jaGFpbm1hc2s7Ci0JdTE2IHR3aWNlTWluRWRnZVBvd2VyOwotCi0JdHhfY2hhaW5tYXNrID0gYWgtPnR4Y2hhaW5tYXNrOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlci5hbnRlbm5hR2FpbkNoWzBdOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbihBbnRlbm5hUmVkdWN0aW9uIC0KLQkJCQkJICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7Ci0KLQltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7Ci0KLQlpZiAoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7Ci0JCW1heFJlZ0FsbG93ZWRQb3dlciAtPQotCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUpXSAqIDIpOwotCX0KLQotCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7Ci0Jc2NhbGVkUG93ZXIgPSBtYXgoKHUxNikwLCBzY2FsZWRQb3dlcik7Ci0KLQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpIC0gU1VCX05VTV9DVExfTU9ERVNfQVRfMkdfNDA7Ci0JcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExZzsKLQotCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJDY2ssIDQsIGZhbHNlKTsKLQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKLQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKLQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQyMCwKLQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKTsKLQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDQwLAotCQkJCUFSNTQxNl9OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKLQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKLQkJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckNja0V4dCwgNCwgdHJ1ZSk7Ci0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKLQkJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkJJnRhcmdldFBvd2VyT2ZkbUV4dCwgNCwgdHJ1ZSk7Ci0JfQotCi0JZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKLQkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8Ci0JCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7Ci0JCWlmIChpc0h0NDBDdGxNb2RlKQotCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOwotCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKLQkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7Ci0JCWVsc2UKLQkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKLQkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKLQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCi0JCQkiRVhUX0FERElUSVZFICVkXG4iLAotCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCi0JCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKLQotCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9FRVA0S19OVU1fQ1RMUykgJiYKLQkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCSIgIExPT1AtQ3RsaWR4ICVkOiBjZmdDdGwgMHglMi4yeCAiCi0JCQkJInBDdGxNb2RlIDB4JTIuMnggY3RsSW5kZXggMHglMi4yeCAiCi0JCQkJImNoYW4gJWRcbiIsCi0JCQkJaSwgY2ZnQ3RsLCBwQ3RsTW9kZVtjdGxNb2RlXSwKLQkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV0sIGNoYW4tPmNoYW5uZWwpOwotCi0JCQlpZiAoKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICBwRWVwRGF0YS0+Y3RsSW5kZXhbaV0pIHx8Ci0JCQkgICAgKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICAoKHBFZXBEYXRhLT5jdGxJbmRleFtpXSAmIENUTF9NT0RFX00pIHwKLQkJCSAgICAgIFNEX05PX0NUTCkpKSB7Ci0JCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7Ci0KLQkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9Ci0JCQkJCWF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAotCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJCSh0eF9jaGFpbm1hc2spIC0gMV0sCi0JCQkJSVNfQ0hBTl8yR0haKGNoYW4pLAotCQkJCUFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyk7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJCSIgICAgTUFUQ0gtRUVfSURYICVkOiBjaCAlZCBpczIgJWQgIgotCQkJCQkiMnhNaW5FZGdlICVkIGNoYWlubWFzayAlZCBjaGFpbnMgJWRcbiIsCi0JCQkJCWksIGZyZXEsIElTX0NIQU5fMkdIWihjaGFuKSwKLQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIsIHR4X2NoYWlubWFzaywKLQkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJKHR4X2NoYWlubWFzaykpOwotCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9Ci0JCQkJCQltaW4odHdpY2VNYXhFZGdlUG93ZXIsCi0JCQkJCQkgICAgdHdpY2VNaW5FZGdlUG93ZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCW1pbkN0bFBvd2VyID0gKHU4KW1pbih0d2ljZU1heEVkZ2VQb3dlciwgc2NhbGVkUG93ZXIpOwotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSIgICAgU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkICIKLQkJCSIyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAotCQkJY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKLQotCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7Ci0JCWNhc2UgQ1RMXzExQjoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUc6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsKLQkJCQkJaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCi0JCQkJCSAgICBtaW5DdGxQb3dlcik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMkdIVDIwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQl9FWFQ6Ci0JCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdLAotCQkJCQltaW5DdGxQb3dlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMTFHX0VYVDoKLQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKLQkJCQkJbWluQ3RsUG93ZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzJHSFQ0MDoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOwotCQkJCQlpKyspIHsKLQkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyYXRlc0FycmF5W3JhdGU2bWJdID0gcmF0ZXNBcnJheVtyYXRlOW1iXSA9IHJhdGVzQXJyYXlbcmF0ZTEybWJdID0KLQkJcmF0ZXNBcnJheVtyYXRlMThtYl0gPSByYXRlc0FycmF5W3JhdGUyNG1iXSA9Ci0JCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07Ci0JcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOwotCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107Ci0JcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCi0JCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKLQotCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKLQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMV07Ci0JcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKLQlyYXRlc0FycmF5W3JhdGUxMXNdID0gcmF0ZXNBcnJheVtyYXRlMTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgewotCQkJcmF0ZXNBcnJheVtyYXRlSHQ0MF8wICsgaV0gPQotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07Ci0JCX0KLQkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKLQkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0gdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgdTE2IGNmZ0N0bCwKLQkJCQkgICB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkJICAgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkJICAgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKLQlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwotCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLQl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7Ci0JaW50IGk7Ci0KLQltZW1zZXQocmF0ZXNBcnJheSwgMCwgc2l6ZW9mKHJhdGVzQXJyYXkpKTsKLQotCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOwotCX0KLQotCWF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKLQkJCQkJICAgICAgICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCi0JCQkJCSAgICAgICB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkJCSAgICAgICB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJICAgICAgIHBvd2VyTGltaXQpOwotCi0JYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7Ci0JCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl9Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKLQkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiwKLQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF83XSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF82XSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF81XSwgOCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzRdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCi0JCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKLQl9Ci0KLQlpID0gcmF0ZTZtYjsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCWkgPSByYXRlSHQ0MF8wOwotCWVsc2UgaWYgKElTX0NIQU5fSFQyMChjaGFuKSkKLQkJaSA9IHJhdGVIdDIwXzA7Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0KLQkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7Ci0JZWxzZQotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOwotCi19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOwotCXU4IGJpYXNsZXZlbDsKLQotCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQotCQlyZXR1cm47Ci0KLQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCi0JCXJldHVybjsKLQotCXBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCi0JaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7Ci0JCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKLQkJSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDcsIDEpID0KLQkJICAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9nYWluKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSBzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsLAotCQkJCSBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwLAotCQkJCSB1OCB0eFJ4QXR0ZW5Mb2NhbCwgaW50IHJlZ0NoYWluT2Zmc2V0KQotewotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQpICYKLQkJICAgfihBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRiB8Ci0JCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpKSB8Ci0JCSAgU00ocE1vZGFsLT5pcUNhbElDaFswXSwgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKLQkJICBTTShwTW9kYWwtPmlxQ2FsUUNoWzBdLCBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRikpOwotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoWzBdOwotCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sIHBNb2RhbC0+YnN3TWFyZ2luWzBdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLCBwTW9kYWwtPmJzd0F0dGVuWzBdKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX01BUkdJTiwKLQkJCSAgICAgIHBNb2RhbC0+eGF0dGVuMk1hcmdpblswXSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOwotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKLQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwgdHhSeEF0dGVuTG9jYWwpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKLQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzBdKTsKLQotCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQotCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCAoQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCB8IDB4MTQpKTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfNGtfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOwotCXU4IHR4UnhBdHRlbkxvY2FsOwotCXU4IG9iWzVdLCBkYjFbNV0sIGRiMls1XTsKLQl1OCBhbnRfZGl2X2NvbnRyb2wxLCBhbnRfZGl2X2NvbnRyb2wyOwotCXUzMiByZWdWYWw7Ci0KLQlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQl0eFJ4QXR0ZW5Mb2NhbCA9IDIzOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwKLQkJICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbikpOwotCi0JLyogU2luZ2xlIGNoYWluIGZvciA0SyBFRVBST00qLwotCWF0aDlrX2h3XzRrX3NldF9nYWluKGFoLCBwTW9kYWwsIGVlcCwgdHhSeEF0dGVuTG9jYWwsIDApOwotCi0JLyogSW5pdGlhbGl6ZSBBbnQgRGl2ZXJzaXR5IHNldHRpbmdzIGZyb20gRUVQUk9NICovCi0JaWYgKHBNb2RhbC0+dmVyc2lvbiA9PSAzKSB7Ci0JCWFudF9kaXZfY29udHJvbDEgPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDEyKSAmIDB4Zik7Ci0JCWFudF9kaXZfY29udHJvbDIgPSAoKHBNb2RhbC0+ZGIxXzIzNCA+PiAxMikgJiAweGYpOwotCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHg5OWFjKTsKLQkJcmVnVmFsICY9ICh+KDB4N2YwMDAwMDApKTsKLQkJcmVnVmFsIHw9ICgoYW50X2Rpdl9jb250cm9sMSAmIDB4MSkgPDwgMjQpOwotCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMSA+PiAxKSAmIDB4MSkgPDwgMjkpOwotCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMSA+PiAyKSAmIDB4MSkgPDwgMzApOwotCQlyZWdWYWwgfD0gKChhbnRfZGl2X2NvbnRyb2wyICYgMHgzKSA8PCAyNSk7Ci0JCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wyID4+IDIpICYgMHgzKSA8PCAyNyk7Ci0JCVJFR19XUklURShhaCwgMHg5OWFjLCByZWdWYWwpOwotCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHg5OWFjKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4YTIwOCk7Ci0JCXJlZ1ZhbCAmPSAofigweDEgPDwgMTMpKTsKLQkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMykgJiAweDEpIDw8IDEzKTsKLQkJUkVHX1dSSVRFKGFoLCAweGEyMDgsIHJlZ1ZhbCk7Ci0JCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweGEyMDgpOwotCX0KLQotCWlmIChwTW9kYWwtPnZlcnNpb24gPj0gMikgewotCQlvYlswXSA9IChwTW9kYWwtPm9iXzAxICYgMHhmKTsKLQkJb2JbMV0gPSAocE1vZGFsLT5vYl8wMSA+PiA0KSAmIDB4ZjsKLQkJb2JbMl0gPSAocE1vZGFsLT5vYl8yMzQgJiAweGYpOwotCQlvYlszXSA9ICgocE1vZGFsLT5vYl8yMzQgPj4gNCkgJiAweGYpOwotCQlvYls0XSA9ICgocE1vZGFsLT5vYl8yMzQgPj4gOCkgJiAweGYpOwotCi0JCWRiMVswXSA9IChwTW9kYWwtPmRiMV8wMSAmIDB4Zik7Ci0JCWRiMVsxXSA9ICgocE1vZGFsLT5kYjFfMDEgPj4gNCkgJiAweGYpOwotCQlkYjFbMl0gPSAocE1vZGFsLT5kYjFfMjM0ICYgMHhmKTsKLQkJZGIxWzNdID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gNCkgJiAweGYpOwotCQlkYjFbNF0gPSAoKHBNb2RhbC0+ZGIxXzIzNCA+PiA4KSAmIDB4Zik7Ci0KLQkJZGIyWzBdID0gKHBNb2RhbC0+ZGIyXzAxICYgMHhmKTsKLQkJZGIyWzFdID0gKChwTW9kYWwtPmRiMl8wMSA+PiA0KSAmIDB4Zik7Ci0JCWRiMlsyXSA9IChwTW9kYWwtPmRiMl8yMzQgJiAweGYpOwotCQlkYjJbM10gPSAoKHBNb2RhbC0+ZGIyXzIzNCA+PiA0KSAmIDB4Zik7Ci0JCWRiMls0XSA9ICgocE1vZGFsLT5kYjJfMjM0ID4+IDgpICYgMHhmKTsKLQotCX0gZWxzZSBpZiAocE1vZGFsLT52ZXJzaW9uID09IDEpIHsKLQkJb2JbMF0gPSAocE1vZGFsLT5vYl8wMSAmIDB4Zik7Ci0JCW9iWzFdID0gb2JbMl0gPSBvYlszXSA9IG9iWzRdID0gKHBNb2RhbC0+b2JfMDEgPj4gNCkgJiAweGY7Ci0JCWRiMVswXSA9IChwTW9kYWwtPmRiMV8wMSAmIDB4Zik7Ci0JCWRiMVsxXSA9IGRiMVsyXSA9IGRiMVszXSA9Ci0JCQlkYjFbNF0gPSAoKHBNb2RhbC0+ZGIxXzAxID4+IDQpICYgMHhmKTsKLQkJZGIyWzBdID0gKHBNb2RhbC0+ZGIyXzAxICYgMHhmKTsKLQkJZGIyWzFdID0gZGIyWzJdID0gZGIyWzNdID0KLQkJCWRiMls0XSA9ICgocE1vZGFsLT5kYjJfMDEgPj4gNCkgJiAweGYpOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCQlvYltpXSA9IHBNb2RhbC0+b2JfMDE7Ci0JCQlkYjFbaV0gPSBwTW9kYWwtPmRiMV8wMTsKLQkJCWRiMltpXSA9IHBNb2RhbC0+ZGIxXzAxOwotCQl9Ci0JfQotCi0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzAsIEFSOTI4NV9BTl9SRjJHM19PQl8wX1MsIG9iWzBdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfMSwgQVI5Mjg1X0FOX1JGMkczX09CXzFfUywgb2JbMV0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl8yLCBBUjkyODVfQU5fUkYyRzNfT0JfMl9TLCBvYlsyXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzMsIEFSOTI4NV9BTl9SRjJHM19PQl8zX1MsIG9iWzNdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfNCwgQVI5Mjg1X0FOX1JGMkczX09CXzRfUywgb2JbNF0pOwotCi0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8wLCBBUjkyODVfQU5fUkYyRzNfREIxXzBfUywgZGIxWzBdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfREIxXzEsIEFSOTI4NV9BTl9SRjJHM19EQjFfMV9TLCBkYjFbMV0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMiwgQVI5Mjg1X0FOX1JGMkczX0RCMV8yX1MsIGRiMVsyXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMV8zLCBBUjkyODVfQU5fUkYyRzRfREIxXzNfUywgZGIxWzNdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIxXzQsIEFSOTI4NV9BTl9SRjJHNF9EQjFfNF9TLCBkYjFbNF0pOwotCi0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8wLCBBUjkyODVfQU5fUkYyRzRfREIyXzBfUywgZGIyWzBdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzEsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMV9TLCBkYjJbMV0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMiwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8yX1MsIGRiMlsyXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8zLCBBUjkyODVfQU5fUkYyRzRfREIyXzNfUywgZGIyWzNdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzQsIEFSOTI4NV9BTl9SRjJHNF9EQjJfNF9TLCBkYjJbNF0pOwotCi0KLQlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkKLQkJUkVHX1dSSVRFKGFoLCBBUjkyODVfQU5fVE9QNCwgQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCk7Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCi0JCSAgICAgIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLCBBUl9QSFlfREVTSVJFRF9TWl9BREMsCi0JCSAgICAgIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMNCwKLQkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFBX09GRikgfAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGKSB8Ci0JCSAgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQV9PTikgIHwKLQkJICBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwKLQkJICAgICAgcE1vZGFsLT50eEVuZFRvUnhPbik7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVI5MjgwX1BIWV9DQ0FfVEhSRVNINjIsCi0JCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBMCwgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyLAotCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQotCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJCQkJQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJULAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9QQV9PTiwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7Ci0JfQotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JCQkJCQlBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7Ci0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsCi0JCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJCQkgICAgICBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7Ci0JfQotfQotCi1zdGF0aWMgdTE2IGF0aDlrX2h3XzRrX2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7Ci0KLQlyZXR1cm4gcE1vZGFsLT5hbnRDdHJsQ29tbW9uICYgMHhGRkZGOwotfQotCi1zdGF0aWMgdTggYXRoOWtfaHdfNGtfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1MTYgYXRoOWtfaHdfNGtfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQotewotI2RlZmluZSBFRVBfTUFQNEtfU1BVUkNIQU4gXAotCShhaC0+ZWVwcm9tLm1hcDRrLm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbikKLQotCXUxNiBzcHVyX3ZhbCA9IEFSX05PX1NQVVI7Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCSJHZXR0aW5nIHNwdXIgaWR4ICVkIGlzMkdoei4gJWQgdmFsICV4XG4iLAotCQlpLCBpczJHSHosIGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel0pOwotCi0Jc3dpdGNoIChhaC0+Y29uZmlnLnNwdXJtb2RlKSB7Ci0JY2FzZSBTUFVSX0RJU0FCTEU6Ci0JCWJyZWFrOwotCWNhc2UgU1BVUl9FTkFCTEVfSU9DVEw6Ci0JCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAotCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOwotCQlicmVhazsKLQljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKLQkJc3B1cl92YWwgPSBFRVBfTUFQNEtfU1BVUkNIQU47Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBzcHVyX3ZhbDsKLQotI3VuZGVmIEVFUF9NQVA0S19TUFVSQ0hBTgotfQotCi1zdGF0aWMgc3RydWN0IGVlcHJvbV9vcHMgZWVwXzRrX29wcyA9IHsKLQkuY2hlY2tfZWVwcm9tCQk9IGF0aDlrX2h3XzRrX2NoZWNrX2VlcHJvbSwKLQkuZ2V0X2VlcHJvbQkJPSBhdGg5a19od180a19nZXRfZWVwcm9tLAotCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od180a19maWxsX2VlcHJvbSwKLQkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV92ZXIsCi0JLmdldF9lZXByb21fcmV2CQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fcmV2LAotCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od180a19nZXRfbnVtX2FudF9jb25maWcsCi0JLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnLAotCS5zZXRfYm9hcmRfdmFsdWVzCT0gYXRoOWtfaHdfNGtfc2V0X2JvYXJkX3ZhbHVlcywKLQkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3XzRrX3NldF9hZGRhYywKLQkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfNGtfc2V0X3R4cG93ZXIsCi0JLmdldF9zcHVyX2NoYW5uZWwJPSBhdGg5a19od180a19nZXRfc3B1cl9jaGFubmVsCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIG5vbi00SyAoRGVmYXVsdCkgY2FyZHMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyKHN0cnVjdCBhdGhfaHcgKmFoKQotewotCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlyZXR1cm4gKChhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19kZWZfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCi17Ci0jZGVmaW5lIFNJWkVfRUVQUk9NX0RFRiAoc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikgLyBzaXplb2YodTE2KSkKLQl1MTYgKmVlcF9kYXRhID0gKHUxNiAqKSZhaC0+ZWVwcm9tLmRlZjsKLQlpbnQgYWRkciwgYXI1NDE2X2VlcF9zdGFydF9sb2MgPSAweDEwMDsKLQotCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV9ERUY7IGFkZHIrKykgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIGFkZHIgKyBhcjU0MTZfZWVwX3N0YXJ0X2xvYywKLQkJCQkJIGVlcF9kYXRhKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb25cbiIpOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCWVlcF9kYXRhKys7Ci0JfQotCXJldHVybiB0cnVlOwotI3VuZGVmIFNJWkVfRUVQUk9NX0RFRgotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9jaGVja19lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCi17Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPQotCQkoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICopICZhaC0+ZWVwcm9tLmRlZjsKLQl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7Ci0JdTMyIHN1bSA9IDAsIGVsOwotCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7Ci0JaW50IGksIGFkZHIsIHNpemU7Ci0KLQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULCAmbWFnaWMpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLCAiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIlJlYWQgTWFnaWMgPSAweCUwNFhcbiIsIG1hZ2ljKTsKLQotCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgewotCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKLQotCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpOwotCQkJCW5lZWRfc3dhcCA9IHRydWU7Ci0JCQkJZWVwZGF0YSA9ICh1MTYgKikgKCZhaC0+ZWVwcm9tKTsKLQotCQkJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzaXplIC8gc2l6ZW9mKHUxNik7IGFkZHIrKykgewotCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKLQkJCQkJKmVlcGRhdGEgPSB0ZW1wOwotCQkJCQllZXBkYXRhKys7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKLQkJCQkJIkludmFsaWQgRUVQUk9NIE1hZ2ljLiAiCi0JCQkJCSJFbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sICJuZWVkX3N3YXAgPSAlcy5cbiIsCi0JCW5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOwotCi0JaWYgKG5lZWRfc3dhcCkKLQkJZWwgPSBzd2FiMTYoYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwotCWVsc2UKLQkJZWwgPSBhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKLQotCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpKQotCQllbCA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNik7Ci0JZWxzZQotCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7Ci0KLQllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZWw7IGkrKykKLQkJc3VtIF49ICplZXBkYXRhKys7Ci0KLQlpZiAobmVlZF9zd2FwKSB7Ci0JCXUzMiBpbnRlZ2VyLCBqOwotCQl1MTYgd29yZDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nLlxuIik7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24pOwotCQllZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQgPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMpOwotCQllZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyA9IHdvcmQ7Ci0KLQkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCA9IHdvcmQ7Ci0KLQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoZWVwLT5tb2RhbEhlYWRlcik7IGorKykgewotCQkJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCQkJJmVlcC0+bW9kYWxIZWFkZXJbal07Ci0JCQlpbnRlZ2VyID0gc3dhYjMyKHBNb2RhbC0+YW50Q3RybENvbW1vbik7Ci0JCQlwTW9kYWwtPmFudEN0cmxDb21tb24gPSBpbnRlZ2VyOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOwotCQkJCXBNb2RhbC0+YW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKLQkJCX0KLQotCQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQkJCXdvcmQgPSBzd2FiMTYocE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pOwotCQkJCXBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuID0gd29yZDsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChzdW0gIT0gMHhmZmZmIHx8IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKLQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKLQkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQotewotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOwotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPSBlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIEVFUF9ORlRIUkVTSF81OgotCQlyZXR1cm4gcE1vZGFsWzBdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEVFUF9ORlRIUkVTSF8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMCk6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDEpOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOwotCWNhc2UgQVJfRUVQUk9NX01BQygyKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKLQljYXNlIEVFUF9SRUdfMDoKLQkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07Ci0JY2FzZSBFRVBfUkVHXzE6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOwotCWNhc2UgRUVQX09QX0NBUDoKLQkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7Ci0JY2FzZSBFRVBfT1BfTU9ERToKLQkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOwotCWNhc2UgRUVQX1JGX1NJTEVOVDoKLQkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKLQljYXNlIEVFUF9PQl81OgotCQlyZXR1cm4gcE1vZGFsWzBdLm9iOwotCWNhc2UgRUVQX0RCXzU6Ci0JCXJldHVybiBwTW9kYWxbMF0uZGI7Ci0JY2FzZSBFRVBfT0JfMjoKLQkJcmV0dXJuIHBNb2RhbFsxXS5vYjsKLQljYXNlIEVFUF9EQl8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLmRiOwotCWNhc2UgRUVQX01JTk9SX1JFVjoKLQkJcmV0dXJuIEFSNTQxNl9WRVJfTUFTSzsKLQljYXNlIEVFUF9UWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKLQljYXNlIEVFUF9SWF9NQVNLOgotCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKLQljYXNlIEVFUF9SWEdBSU5fVFlQRToKLQkJcmV0dXJuIHBCYXNlLT5yeEdhaW5UeXBlOwotCWNhc2UgRUVQX1RYR0FJTl9UWVBFOgotCQlyZXR1cm4gcEJhc2UtPnR4R2FpblR5cGU7Ci0JY2FzZSBFRVBfT0xfUFdSQ1RSTDoKLQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkKLQkJCXJldHVybiBwQmFzZS0+b3Blbkxvb3BQd3JDbnRsID8gdHJ1ZSA6IGZhbHNlOwotCQllbHNlCi0JCQlyZXR1cm4gZmFsc2U7Ci0JY2FzZSBFRVBfUkNfQ0hBSU5fTUFTSzoKLQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkKLQkJCXJldHVybiBwQmFzZS0+cmNDaGFpbk1hc2s7Ci0JCWVsc2UKLQkJCXJldHVybiAwOwotCWNhc2UgRUVQX0RBQ19IUFdSXzVHOgotCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIwKQotCQkJcmV0dXJuIHBCYXNlLT5kYWNIaVB3ck1vZGVfNUc7Ci0JCWVsc2UKLQkJCXJldHVybiAwOwotCWNhc2UgRUVQX0ZSQUNfTl81RzoKLQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMikKLQkJCXJldHVybiBwQmFzZS0+ZnJhY19uXzVnOwotCQllbHNlCi0JCQlyZXR1cm4gMDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2RlZl9zZXRfZ2FpbihzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkgIHN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwsCi0JCQkJICBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCwKLQkJCQkgIHU4IHR4UnhBdHRlbkxvY2FsLCBpbnQgcmVnQ2hhaW5PZmZzZXQsIGludCBpKQotewotCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07Ci0KLQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sCi0JCQkgICAgICBwTW9kYWwtPmJzd01hcmdpbltpXSk7Ci0JCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfREIsCi0JCQkgICAgICBwTW9kYWwtPmJzd0F0dGVuW2ldKTsKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCi0JCQkgICAgICBwTW9kYWwtPnhhdHRlbjJNYXJnaW5baV0pOwotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLAotCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yRGJbaV0pOwotCQl9IGVsc2UgewotCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKQotCQkJICB8IFNNKHBNb2RhbC0+IGJzd01hcmdpbltpXSwKLQkJCSAgICAgICBBUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pKTsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCkgJgotCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKQotCQkJICB8IFNNKHBNb2RhbC0+YnN3QXR0ZW5baV0sCi0JCQkgICAgICAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pKTsKLQkJfQotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsCi0JCSAgICAgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKLQkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwgdHhSeEF0dGVuTG9jYWwpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkgICAgICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSk7Ci0JfSBlbHNlIHsKLQkJUkVHX1dSSVRFKGFoLAotCQkJICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+QVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKQotCQkJICB8IFNNKHR4UnhBdHRlbkxvY2FsLCBBUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pKTsKLQkJUkVHX1dSSVRFKGFoLAotCQkJICBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikgfAotCQkJICBTTShwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSwgQVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKLQlpbnQgaSwgcmVnQ2hhaW5PZmZzZXQ7Ci0JdTggdHhSeEF0dGVuTG9jYWw7Ci0KLQlwTW9kYWwgPSAmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0JdHhSeEF0dGVuTG9jYWwgPSBJU19DSEFOXzJHSFooY2hhbikgPyAyMyA6IDQ0OwotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwKLQkJICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbikpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKLQkJCWlmIChpID49IDIpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgKGFoLT5yeGNoYWlubWFzayA9PSA1IHx8IGFoLT50eGNoYWlubWFzayA9PSA1KSAmJiAoaSAhPSAwKSkKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7Ci0JCWVsc2UKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKLQotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICBwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkgICB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKLQkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpKSB8Ci0JCQkgIFNNKHBNb2RhbC0+aXFDYWxJQ2hbaV0sCi0JCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSB8Ci0JCQkgIFNNKHBNb2RhbC0+aXFDYWxRQ2hbaV0sCi0JCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7Ci0KLQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpCi0JCQlhdGg5a19od19kZWZfc2V0X2dhaW4oYWgsIHBNb2RhbCwgZWVwLCB0eFJ4QXR0ZW5Mb2NhbCwKLQkJCQkJICAgICAgcmVnQ2hhaW5PZmZzZXQsIGkpOwotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0JfUywKLQkJCQkJCSAgcE1vZGFsLT5vYik7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGIpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0IsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQl9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCX1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKLQkJfSBlbHNlIHsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gwX0RCNV9TLAotCQkJCQkJICBwTW9kYWwtPmRiKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX09CNV9TLAotCQkJCQkJICBwTW9kYWwtPm9iX2NoMSk7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjUsCi0JCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9EQjVfUywKLQkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOwotCQl9Ci0JCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCi0JCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTCwKLQkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MsCi0JCQkJCSAgcE1vZGFsLT54cGFCaWFzTHZsKTsKLQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBUywKLQkJCQkJICBBUl9BTl9UT1AyX0xPQ0FMQklBU19TLAotCQkJCQkgIHBNb2RhbC0+bG9jYWxfYmlhcyk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9YUEFfQ0ZHLCBBUl9QSFlfRk9SQ0VfWFBBX0NGRywKLQkJCSAgICAgIHBNb2RhbC0+Zm9yY2VfeHBhb24pOwotCX0KLQotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKLQkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLAotCQkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfUEdBLAotCQkJICAgICAgcE1vZGFsLT5wZ2FEZXNpcmVkU2l6ZSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAotCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUJfT0ZGKQotCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKLQkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pCi0JCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCi0JCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOwotCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVI5MjgwX1BIWV9DQ0FfVEhSRVNINjIsCi0JCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLAotCQkJICAgICAgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVJfUEhZX0NDQV9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQSwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfQotCi0JaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLAotCQkJICAgICAgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJULAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwgQVJfUEhZX1RYX0VORF9QQV9PTiwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvUGFPbik7Ci0JfQotCi0JaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7Ci0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCi0JCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsCi0JCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKLQkJCQkgICAgICBwTW9kYWwtPnN3U2V0dGxlSHQ0MCk7Ci0JfQotCi0JaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkgJiYKLQkgICAgQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NLX1RYX0NUUkwsCi0JCQkgICAgICBBUl9QSFlfQ0NLX1RYX0NUUkxfVFhfREFDX1NDQUxFX0NDSywKLQkJCSAgICAgIHBNb2RhbC0+bWlzY0JpdHMpOwotCi0KLQlpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSAmJiBBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjApIHsKLQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1RPUDEsIEFSX0FOX1RPUDFfREFDSVBNT0RFLAotCQkJCQllZXAtPmJhc2VFZXBIZWFkZXIuZGFjTHBNb2RlKTsKLQkJZWxzZSBpZiAoZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0hpUHdyTW9kZV81RykKLQkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1RPUDEsIEFSX0FOX1RPUDFfREFDSVBNT0RFLCAwKTsKLQkJZWxzZQotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCi0JCQkJICAgICAgZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0xwTW9kZSk7Ci0KLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0ZSQU1FX0NUTCwgQVJfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLAotCQkJICAgICAgcE1vZGFsLT5taXNjQml0cyA+PiAyKTsKLQotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDksCi0JCQkgICAgICBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0ssCi0JCQkgICAgICBlZXAtPmJhc2VFZXBIZWFkZXIuZGVzaXJlZFNjYWxlQ0NLKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2RlZl9zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0jZGVmaW5lIFhQQV9MVkxfRlJFUShjbnQpIChwTW9kYWwtPnhwYUJpYXNMdmxGcmVxW2NudF0pCi0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKLQl1OCBiaWFzbGV2ZWw7Ci0KLQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKLQkJcmV0dXJuOwotCi0JaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQotCQlyZXR1cm47Ci0KLQlwTW9kYWwgPSAmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0KLQlpZiAocE1vZGFsLT54cGFCaWFzTHZsICE9IDB4ZmYpIHsKLQkJYmlhc2xldmVsID0gcE1vZGFsLT54cGFCaWFzTHZsOwotCX0gZWxzZSB7Ci0JCXUxNiByZXNldEZyZXFCaW4sIGZyZXFCaW4sIGZyZXFDb3VudCA9IDA7Ci0JCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQotCQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQkJcmVzZXRGcmVxQmluID0gRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUSgwKSAmIDB4ZmY7Ci0JCWJpYXNsZXZlbCA9ICh1OCkgKFhQQV9MVkxfRlJFUSgwKSA+PiAxNCk7Ci0KLQkJZnJlcUNvdW50Kys7Ci0KLQkJd2hpbGUgKGZyZXFDb3VudCA8IDMpIHsKLQkJCWlmIChYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA9PSAweDApCi0JCQkJYnJlYWs7Ci0KLQkJCWZyZXFCaW4gPSBYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSAmIDB4ZmY7Ci0JCQlpZiAocmVzZXRGcmVxQmluID49IGZyZXFCaW4pCi0JCQkJYmlhc2xldmVsID0gKHU4KShYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA+PiAxNCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCQlmcmVxQ291bnQrKzsKLQkJfQotCX0KLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDcsIDEpID0gKElOSV9SQSgmYWgtPmluaUFkZGFjLAotCQkJCQk3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7Ci0JfSBlbHNlIHsKLQkJSU5JX1JBKCZhaC0+aW5pQWRkYWMsIDYsIDEpID0gKElOSV9SQSgmYWgtPmluaUFkZGFjLAotCQkJCQk2LCAxKSAmICh+MHhjMCkpIHwgYmlhc2xldmVsIDw8IDY7Ci0JfQotI3VuZGVmIFhQQV9MVkxfRlJFUQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxICpwUmF3RGF0YVNldCwKLQkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKLQkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKLQkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAotCQkJCXUxNiBudW1YcGRHYWlucykKLXsKLQlpbnQgaSwgaiwgazsKLQlpbnQxNl90IHNzOwotCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOwotCXN0YXRpYyB1OCB2cGRUYWJsZUxbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZVJbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCXN0YXRpYyB1OCB2cGRUYWJsZUlbQVI1NDE2X05VTV9QRF9HQUlOU10KLQkJW0FSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREJdOwotCi0JdTggKnBWcGRMLCAqcFZwZFIsICpwUHdyTCwgKnBQd3JSOwotCXU4IG1pblB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCXU4IG1heFB3clQ0W0FSNTQxNl9OVU1fUERfR0FJTlNdOwotCWludDE2X3QgdnBkU3RlcDsKLQlpbnQxNl90IHRtcFZhbDsKLQl1MTYgc2l6ZUN1cnJWcGRUYWJsZSwgbWF4SW5kZXgsIHRndEluZGV4OwotCWJvb2wgbWF0Y2g7Ci0JaW50MTZfdCBtaW5EZWx0YSA9IDA7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgewotCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQotCQkJYnJlYWs7Ci0JfQotCi0JbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoKHU4KUZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKLQkJCQkJCQkgICAgIElTX0NIQU5fMkdIWihjaGFuKSksCi0JCQkJCSAgICAgICBiQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOwotCi0JaWYgKG1hdGNoKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCQltaW5Qd3JUNFtpXSA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXVswXTsKLQkJCW1heFB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzRdOwotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQlwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV0sCi0JCQkJCXBSYXdEYXRhU2V0W2lkeExdLnZwZFBkZ1tpXSwKLQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQl2cGRUYWJsZUlbaV0pOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKLQkJCXBWcGRMID0gcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldOwotCQkJcFB3ckwgPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV07Ci0JCQlwVnBkUiA9IHBSYXdEYXRhU2V0W2lkeFJdLnZwZFBkZ1tpXTsKLQkJCXBQd3JSID0gcFJhd0RhdGFTZXRbaWR4Ul0ucHdyUGRnW2ldOwotCi0JCQltaW5Qd3JUNFtpXSA9IG1heChwUHdyTFswXSwgcFB3clJbMF0pOwotCi0JCQltYXhQd3JUNFtpXSA9Ci0JCQkJbWluKHBQd3JMW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdLAotCQkJCSAgICBwUHdyUltBUjU0MTZfUERfR0FJTl9JQ0VQVFMgLSAxXSk7Ci0KLQotCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAotCQkJCQkJcFB3ckwsIHBWcGRMLAotCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAotCQkJCQkJdnBkVGFibGVMW2ldKTsKLQkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKLQkJCQkJCXBQd3JSLCBwVnBkUiwKLQkJCQkJCUFSNTQxNl9QRF9HQUlOX0lDRVBUUywKLQkJCQkJCXZwZFRhYmxlUltpXSk7Ci0KLQkJCWZvciAoaiA9IDA7IGogPD0gKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMjsgaisrKSB7Ci0JCQkJdnBkVGFibGVJW2ldW2pdID0KLQkJCQkJKHU4KShhdGg5a19od19pbnRlcnBvbGF0ZSgodTE2KQotCQkJCQkgICAgIEZSRVEyRkJJTihjZW50ZXJzLgotCQkJCQkJICAgICAgIHN5bnRoX2NlbnRlciwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFoKLQkJCQkJCSAgICAgICAoY2hhbikpLAotCQkJCQkgICAgIGJDaGFuc1tpZHhMXSwgYkNoYW5zW2lkeFJdLAotCQkJCQkgICAgIHZwZFRhYmxlTFtpXVtqXSwgdnBkVGFibGVSW2ldW2pdKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqcE1pbkNhbFBvd2VyID0gKGludDE2X3QpKG1pblB3clQ0WzBdIC8gMik7Ci0KLQlrID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1YcGRHYWluczsgaSsrKSB7Ci0JCWlmIChpID09IChudW1YcGRHYWlucyAtIDEpKQotCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJCSh1MTYpKG1heFB3clQ0W2ldIC8gMik7Ci0JCWVsc2UKLQkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KLQkJCQkodTE2KSgobWF4UHdyVDRbaV0gKyBtaW5Qd3JUNFtpICsgMV0pIC8gNCk7Ci0KLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQotCQkJbWluKCh1MTYpQVI1NDE2X01BWF9SQVRFX1BPV0VSLCBwUGRHYWluQm91bmRhcmllc1tpXSk7Ci0KLQkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7Ci0JCQltaW5EZWx0YSA9IHBQZEdhaW5Cb3VuZGFyaWVzWzBdIC0gMjM7Ci0JCQlwUGRHYWluQm91bmRhcmllc1swXSA9IDIzOwotCQl9IGVsc2UgewotCQkJbWluRGVsdGEgPSAwOwotCQl9Ci0KLQkJaWYgKGkgPT0gMCkgewotCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCQkJc3MgPSAoaW50MTZfdCkoMCAtIChtaW5Qd3JUNFtpXSAvIDIpKTsKLQkJCWVsc2UKLQkJCQlzcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzcyA9IChpbnQxNl90KSgocFBkR2FpbkJvdW5kYXJpZXNbaSAtIDFdIC0KLQkJCQkJKG1pblB3clQ0W2ldIC8gMikpIC0KLQkJCQkgICAgICAgdFBkR2Fpbk92ZXJsYXAgKyAxICsgbWluRGVsdGEpOwotCQl9Ci0JCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzFdIC0gdnBkVGFibGVJW2ldWzBdKTsKLQkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwotCi0JCXdoaWxlICgoc3MgPCAwKSAmJiAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewotCQkJdG1wVmFsID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVswXSArIHNzICogdnBkU3RlcCk7Ci0JCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA8IDApID8gMCA6IHRtcFZhbCk7Ci0JCQlzcysrOwotCQl9Ci0KLQkJc2l6ZUN1cnJWcGRUYWJsZSA9ICh1OCkgKChtYXhQd3JUNFtpXSAtIG1pblB3clQ0W2ldKSAvIDIgKyAxKTsKLQkJdGd0SW5kZXggPSAodTgpKHBQZEdhaW5Cb3VuZGFyaWVzW2ldICsgdFBkR2Fpbk92ZXJsYXAgLQotCQkJCShtaW5Qd3JUNFtpXSAvIDIpKTsKLQkJbWF4SW5kZXggPSAodGd0SW5kZXggPCBzaXplQ3VyclZwZFRhYmxlKSA/Ci0JCQl0Z3RJbmRleCA6IHNpemVDdXJyVnBkVGFibGU7Ci0KLQkJd2hpbGUgKChzcyA8IG1heEluZGV4KSAmJiAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewotCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107Ci0JCX0KLQotCQl2cGRTdGVwID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gLQotCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKLQkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwotCi0JCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7Ci0JCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgotCQkJICAgICAgIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7Ci0JCQkJdG1wVmFsID0gKGludDE2X3QpKCh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdICsKLQkJCQkJCSAgICAoc3MgLSBtYXhJbmRleCArIDEpICogdnBkU3RlcCkpOwotCQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsID4gMjU1KSA/Ci0JCQkJCQkJIDI1NSA6IHRtcFZhbCk7Ci0JCQkJc3MrKzsKLQkJCX0KLQkJfQotCX0KLQotCXdoaWxlIChpIDwgQVI1NDE2X1BEX0dBSU5TX0lOX01BU0spIHsKLQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPSBwUGRHYWluQm91bmRhcmllc1tpIC0gMV07Ci0JCWkrKzsKLQl9Ci0KLQl3aGlsZSAoayA8IEFSNTQxNl9OVU1fUERBRENfVkFMVUVTKSB7Ci0JCXBQREFEQ1ZhbHVlc1trXSA9IHBQREFEQ1ZhbHVlc1trIC0gMV07Ci0JCWsrKzsKLQl9Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAotCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQotewotI2RlZmluZSBTTV9QRF9HQUlOKHgpIFNNKDB4MzgsIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8jI3gpCi0jZGVmaW5lIFNNX1BER0FJTl9CKHgsIHkpIFwKLQkJU00oKGdhaW5Cb3VuZGFyaWVzW3hdKSwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeSkKLQotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7Ci0Jc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxICpwUmF3RGF0YXNldDsKLQl1OCAqcENhbEJDaGFucyA9IE5VTEw7Ci0JdTE2IHBkR2Fpbk92ZXJsYXBfdDI7Ci0Jc3RhdGljIHU4IHBkYWRjVmFsdWVzW0FSNTQxNl9OVU1fUERBRENfVkFMVUVTXTsKLQl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI1NDE2X1BEX0dBSU5TX0lOX01BU0tdOwotCXUxNiBudW1QaWVycywgaSwgajsKLQlpbnQxNl90IHRNaW5DYWxQb3dlcjsKLQl1MTYgbnVtWHBkR2FpbiwgeHBkTWFzazsKLQl1MTYgeHBkR2FpblZhbHVlc1tBUjU0MTZfTlVNX1BEX0dBSU5TXSA9IHsgMCwgMCwgMCwgMCB9OwotCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKLQlpbnQxNl90IG1vZGFsSWR4OwotCi0JbW9kYWxJZHggPSBJU19DSEFOXzJHSFooY2hhbikgPyAxIDogMDsKLQl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyW21vZGFsSWR4XS54cGRHYWluOwotCi0JaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlwZEdhaW5PdmVybGFwX3QyID0KLQkJCXBFZXBEYXRhLT5tb2RhbEhlYWRlclttb2RhbElkeF0ucGRHYWluT3ZlcmxhcDsKLQl9IGVsc2UgewotCQlwZEdhaW5PdmVybGFwX3QyID0gKHUxNikoTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UUENSRzUpLAotCQkJCQkgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApKTsKLQl9Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKLQkJbnVtUGllcnMgPSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUzsKLQl9IGVsc2UgewotCQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyNUc7Ci0JCW51bVBpZXJzID0gQVI1NDE2X05VTV81R19DQUxfUElFUlM7Ci0JfQotCi0JaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSICYmIElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHWzBdOwotCQlhaC0+aW5pdFBEQURDID0gKChzdHJ1Y3QgY2FsRGF0YVBlckZyZXFPcExvb3AgKikKLQkJCQkgcFJhd0RhdGFzZXQpLT52cGRQZGdbMF1bMF07Ci0JfQotCi0JbnVtWHBkR2FpbiA9IDA7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKLQkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKLQkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9OVU1fUERfR0FJTlMpCi0JCQkJYnJlYWs7Ci0JCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOwotCQkJbnVtWHBkR2FpbisrOwotCQl9Ci0JfQotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9OVU1fUERfR0FJTiwKLQkJICAgICAgKG51bVhwZEdhaW4gLSAxKSAmIDB4Myk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzEsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMF0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8yLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzFdKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMywKLQkJICAgICAgeHBkR2FpblZhbHVlc1syXSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlpZiAoQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgKGFoLT5yeGNoYWlubWFzayA9PSA1IHx8IGFoLT50eGNoYWlubWFzayA9PSA1KSAmJgotCQkgICAgKGkgIT0gMCkpIHsKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7Ci0JCX0gZWxzZQotCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwotCi0JCWlmIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci50eE1hc2sgJiAoMSA8PCBpKSkgewotCQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkKLQkJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOwotCQkJZWxzZQotCQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhNUdbaV07Ci0KLQotCQkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7Ci0JCQkJdTggcGNkYWNJZHg7Ci0JCQkJdTggdHhQb3dlcjsKLQotCQkJCWF0aDlrX2dldF90eGdhaW5faW5kZXgoYWgsIGNoYW4sCi0JCQkJKHN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqKXBSYXdEYXRhc2V0LAotCQkJCXBDYWxCQ2hhbnMsIG51bVBpZXJzLCAmdHhQb3dlciwgJnBjZGFjSWR4KTsKLQkJCQlhdGg5a19vbGNfZ2V0X3BkYWRjcyhhaCwgcGNkYWNJZHgsCi0JCQkJCQkgICAgIHR4UG93ZXIvMiwgcGRhZGNWYWx1ZXMpOwotCQkJfSBlbHNlIHsKLQkJCQlhdGg5a19od19nZXRfZGVmX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsCi0JCQkJCQkJY2hhbiwgcFJhd0RhdGFzZXQsCi0JCQkJCQkJcENhbEJDaGFucywgbnVtUGllcnMsCi0JCQkJCQkJcGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJCQkmdE1pbkNhbFBvd2VyLAotCQkJCQkJCWdhaW5Cb3VuZGFyaWVzLAotCQkJCQkJCXBkYWRjVmFsdWVzLAotCQkJCQkJCW51bVhwZEdhaW4pOwotCQkJfQotCi0JCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewotCQkJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgewotCQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCQlBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlTTSgweDYsCi0JCQkJCQlBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkgfAotCQkJCQkJU01fUERfR0FJTigxKSB8IFNNX1BEX0dBSU4oMikgfAotCQkJCQkJU01fUERfR0FJTigzKSB8IFNNX1BEX0dBSU4oNCkpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVJFR19XUklURShhaCwKLQkJCQkJCUFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKLQkJCQkJCVNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCQlBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCl8Ci0JCQkJCQlTTV9QREdBSU5fQigwLCAxKSB8Ci0JCQkJCQlTTV9QREdBSU5fQigxLCAyKSB8Ci0JCQkJCQlTTV9QREdBSU5fQigyLCAzKSB8Ci0JCQkJCQlTTV9QREdBSU5fQigzLCA0KSk7Ci0JCQkJfQotCQkJfQotCi0JCQlyZWdPZmZzZXQgPSBBUl9QSFlfQkFTRSArICg2NzIgPDwgMikgKyByZWdDaGFpbk9mZnNldDsKLQkJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCQkJcmVnMzIgPSAoKHBkYWRjVmFsdWVzWzQgKiBqICsgMF0gJiAweEZGKSA8PCAwKSB8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAxXSAmIDB4RkYpIDw8IDgpIHwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDJdICYgMHhGRikgPDwgMTYpfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgM10gJiAweEZGKSA8PCAyNCk7Ci0JCQkJUkVHX1dSSVRFKGFoLCByZWdPZmZzZXQsIHJlZzMyKTsKLQotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJIlBEQURDICglZCwlNHgpOiAlNC40eCAlOC44eFxuIiwKLQkJCQkJaSwgcmVnQ2hhaW5PZmZzZXQsIHJlZ09mZnNldCwKLQkJCQkJcmVnMzIpOwotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkJIlBEQURDOiBDaGFpbiAlZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfCBQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8IFBEQURDICUzZCAiCi0JCQkJCSJWYWx1ZSAlM2QgfFxuIiwKLQkJCQkJaSwgNCAqIGosIHBkYWRjVmFsdWVzWzQgKiBqXSwKLQkJCQkJNCAqIGogKyAxLCBwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAotCQkJCQk0ICogaiArIDIsIHBkYWRjVmFsdWVzWzQgKiBqICsgMl0sCi0JCQkJCTQgKiBqICsgMywKLQkJCQkJcGRhZGNWYWx1ZXNbNCAqIGogKyAzXSk7Ci0KLQkJCQlyZWdPZmZzZXQgKz0gNDsKLQkJCX0KLQkJfQotCX0KLQotCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLSN1bmRlZiBTTV9QRF9HQUlOCi0jdW5kZWYgU01fUERHQUlOX0IKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKLQkJCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJCQkgIGludDE2X3QgKnJhdGVzQXJyYXksCi0JCQkJCQkgIHUxNiBjZmdDdGwsCi0JCQkJCQkgIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCQkJICB1MTYgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkJCQkgIHUxNiBwb3dlckxpbWl0KQotewotI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTiAgICAgNiAgLyogMTAqbG9nMTAoMikqMiAqLwotI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOICAgMTAgLyogMTAqbG9nMTAoMykqMiAqLwotCi0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0Jc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQotCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OwotCi0JaW50IGk7Ci0JaW50MTZfdCB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCXN0cnVjdCBjYWxfY3RsX2RhdGEgKnJlcDsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfQotCX07Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbUV4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfSB9LCB0YXJnZXRQb3dlckNja0V4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwIH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0gewotCQkwLCB7MCwgMCwgMCwgMH0KLQl9OwotCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7Ci0JdTE2IGN0bE1vZGVzRm9yMTFhW10gPQotCQl7IENUTF8xMUEsIENUTF81R0hUMjAsIENUTF8xMUFfRVhULCBDVExfNUdIVDQwIH07Ci0JdTE2IGN0bE1vZGVzRm9yMTFnW10gPQotCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKLQkJICBDVExfMkdIVDQwCi0JCX07Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCWludCB0eF9jaGFpbm1hc2s7Ci0JdTE2IHR3aWNlTWluRWRnZVBvd2VyOwotCi0JdHhfY2hhaW5tYXNrID0gYWgtPnR4Y2hhaW5tYXNrOwotCi0JYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IG1heCgKLQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyCi0JCQlbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzBdLAotCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXIKLQkJCVtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMV0pOwotCi0JdHdpY2VMYXJnZXN0QW50ZW5uYSA9IG1heCgodTgpdHdpY2VMYXJnZXN0QW50ZW5uYSwKLQkJCQkgIHBFZXBEYXRhLT5tb2RhbEhlYWRlcgotCQkJCSAgW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFsyXSk7Ci0KLQl0d2ljZUxhcmdlc3RBbnRlbm5hID0gKGludDE2X3QpbWluKEFudGVubmFSZWR1Y3Rpb24gLQotCQkJCQkgICB0d2ljZUxhcmdlc3RBbnRlbm5hLCAwKTsKLQotCW1heFJlZ0FsbG93ZWRQb3dlciA9IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyICsgdHdpY2VMYXJnZXN0QW50ZW5uYTsKLQotCWlmIChhaC0+cmVndWxhdG9yeS50cF9zY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKLQkJbWF4UmVnQWxsb3dlZFBvd2VyIC09Ci0JCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+cmVndWxhdG9yeS50cF9zY2FsZSldICogMik7Ci0JfQotCi0Jc2NhbGVkUG93ZXIgPSBtaW4ocG93ZXJMaW1pdCwgbWF4UmVnQWxsb3dlZFBvd2VyKTsKLQotCXN3aXRjaCAoYXI1NDE2X2dldF9udHhjaGFpbnModHhfY2hhaW5tYXNrKSkgewotCWNhc2UgMToKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlzY2FsZWRQb3dlciAtPSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOOwotCQlicmVhazsKLQl9Ci0KLQlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtCi0JCQlTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MDsKLQkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExZzsKLQotCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7Ci0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAotCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOwotCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQyMCwKLQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCSZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKLQotCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpOwotCQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDQwLAotCQkJCUFSNTQxNl9OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKLQkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOwotCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAotCQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKLQkJfQotCX0gZWxzZSB7Ci0JCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExYSkgLQotCQkJU1VCX05VTV9DVExfTU9ERVNfQVRfNUdfNDA7Ci0JCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWE7Ci0KLQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUcsCi0JCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7Ci0JCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUdIVDIwLAotCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOwotCi0JCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExYSk7Ci0JCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1R0hUNDAsCi0JCQkJQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOwotCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHLAotCQkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKLQkJfQotCX0KLQotCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7Ci0JCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAotCQkJKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOwotCQlpZiAoaXNIdDQwQ3RsTW9kZSkKLQkJCWZyZXEgPSBjZW50ZXJzLnN5bnRoX2NlbnRlcjsKLQkJZWxzZSBpZiAocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpCi0JCQlmcmVxID0gY2VudGVycy5leHRfY2VudGVyOwotCQllbHNlCi0JCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOwotCi0JCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpID09IDE0ICYmCi0JCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDw9IDIpCi0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiTE9PUC1Nb2RlIGN0bE1vZGUgJWQgPCAlZCwgaXNIdDQwQ3RsTW9kZSAlZCwgIgotCQkJIkVYVF9BRERJVElWRSAlZFxuIiwKLQkJCWN0bE1vZGUsIG51bUN0bE1vZGVzLCBpc0h0NDBDdGxNb2RlLAotCQkJKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKSk7Ci0KLQkJZm9yIChpID0gMDsgKGkgPCBBUjU0MTZfTlVNX0NUTFMpICYmIHBFZXBEYXRhLT5jdGxJbmRleFtpXTsgaSsrKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJIiAgTE9PUC1DdGxpZHggJWQ6IGNmZ0N0bCAweCUyLjJ4ICIKLQkJCQkicEN0bE1vZGUgMHglMi4yeCBjdGxJbmRleCAweCUyLjJ4ICIKLQkJCQkiY2hhbiAlZFxuIiwKLQkJCQlpLCBjZmdDdGwsIHBDdGxNb2RlW2N0bE1vZGVdLAotCQkJCXBFZXBEYXRhLT5jdGxJbmRleFtpXSwgY2hhbi0+Y2hhbm5lbCk7Ci0KLQkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAotCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09Ci0JCQkgICAgIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkgfHwKLQkJCSAgICAoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAotCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09Ci0JCQkgICAgICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYgQ1RMX01PREVfTSkgfCBTRF9OT19DVEwpKSkgewotCQkJCXJlcCA9ICYocEVlcERhdGEtPmN0bERhdGFbaV0pOwotCi0JCQkJdHdpY2VNaW5FZGdlUG93ZXIgPSBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoZnJlcSwKLQkJCQlyZXAtPmN0bEVkZ2VzW2FyNTQxNl9nZXRfbnR4Y2hhaW5zKHR4X2NoYWlubWFzaykgLSAxXSwKLQkJCQlJU19DSEFOXzJHSFooY2hhbiksIEFSNTQxNl9OVU1fQkFORF9FREdFUyk7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJCSIgICAgTUFUQ0gtRUVfSURYICVkOiBjaCAlZCBpczIgJWQgIgotCQkJCQkiMnhNaW5FZGdlICVkIGNoYWlubWFzayAlZCBjaGFpbnMgJWRcbiIsCi0JCQkJCWksIGZyZXEsIElTX0NIQU5fMkdIWihjaGFuKSwKLQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIsIHR4X2NoYWlubWFzaywKLQkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJKHR4X2NoYWlubWFzaykpOwotCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwKLQkJCQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCW1pbkN0bFBvd2VyID0gbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIiAgICBTRUwtTWluIGN0bE1vZGUgJWQgcEN0bE1vZGUgJWQgIgotCQkJIjJ4TWF4RWRnZSAlZCBzUCAlZCBtaW5DdGxQd3IgJWRcbiIsCi0JCQljdGxNb2RlLCBwQ3RsTW9kZVtjdGxNb2RlXSwgdHdpY2VNYXhFZGdlUG93ZXIsCi0JCQlzY2FsZWRQb3dlciwgbWluQ3RsUG93ZXIpOwotCi0JCXN3aXRjaCAocEN0bE1vZGVbY3RsTW9kZV0pIHsKLQkJY2FzZSBDVExfMTFCOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJDY2sudFBvdzJ4KTsgaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQToKLQkJY2FzZSBDVExfMTFHOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJPZmRtLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzVHSFQyMDoKLQkJY2FzZSBDVExfMkdIVDIwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExQl9FWFQ6Ci0JCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdLAotCQkJCQltaW5DdGxQb3dlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMTFBX0VYVDoKLQkJY2FzZSBDVExfMTFHX0VYVDoKLQkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKLQkJCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKLQkJCQkJbWluQ3RsUG93ZXIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzVHSFQ0MDoKLQkJY2FzZSBDVExfMkdIVDQwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgewotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJhdGVzQXJyYXlbcmF0ZTZtYl0gPSByYXRlc0FycmF5W3JhdGU5bWJdID0gcmF0ZXNBcnJheVtyYXRlMTJtYl0gPQotCQlyYXRlc0FycmF5W3JhdGUxOG1iXSA9IHJhdGVzQXJyYXlbcmF0ZTI0bWJdID0KLQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQlyYXRlc0FycmF5W3JhdGUzNm1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMV07Ci0JcmF0ZXNBcnJheVtyYXRlNDhtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzJdOwotCXJhdGVzQXJyYXlbcmF0ZTU0bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFszXTsKLQlyYXRlc0FycmF5W3JhdGVYcl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykKLQkJcmF0ZXNBcnJheVtyYXRlSHQyMF8wICsgaV0gPSB0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldOwotCi0JaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlyYXRlc0FycmF5W3JhdGUxbF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZTJzXSA9IHJhdGVzQXJyYXlbcmF0ZTJsXSA9Ci0JCQl0YXJnZXRQb3dlckNjay50UG93MnhbMV07Ci0JCXJhdGVzQXJyYXlbcmF0ZTVfNXNdID0gcmF0ZXNBcnJheVtyYXRlNV81bF0gPQotCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzJdOwotCQk7Ci0JCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0KLQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKLQkJOwotCX0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspIHsKLQkJCXJhdGVzQXJyYXlbcmF0ZUh0NDBfMCArIGldID0KLQkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldOwotCQl9Ci0JCXJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKLQkJcmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dID0gdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXTsKLQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQkJcmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSA9Ci0JCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICB1MTYgY2ZnQ3RsLAotCQkJCSAgICB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkJICAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCSAgICB1OCBwb3dlckxpbWl0KQotewotI2RlZmluZSBSVF9BUl9ERUxUQSh4KSAocmF0ZXNBcnJheVt4XSAtIGNja19vZmRtX2RlbHRhKQotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYocEVlcERhdGEtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07Ci0JaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOwotCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKLQlpbnQgaSwgY2NrX29mZG1fZGVsdGEgPSAwOwotCi0JbWVtc2V0KHJhdGVzQXJyYXksIDAsIHNpemVvZihyYXRlc0FycmF5KSk7Ci0KLQlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7Ci0JCWh0NDBQb3dlckluY0ZvclBkYWRjID0gcE1vZGFsLT5odDQwUG93ZXJJbmNGb3JQZGFkYzsKLQl9Ci0KLQlhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAotCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKLQkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkgICAgICAgcG93ZXJMaW1pdCk7Ci0KLQlhdGg5a19od19zZXRfZGVmX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYXRlc0FycmF5KTsgaSsrKSB7Ci0JCXJhdGVzQXJyYXlbaV0gPQkoaW50MTZfdCkodHhQb3dlckluZGV4T2Zmc2V0ICsgcmF0ZXNBcnJheVtpXSk7Ci0JCWlmIChyYXRlc0FycmF5W2ldID4gQVI1NDE2X01BWF9SQVRFX1BPV0VSKQotCQkJcmF0ZXNBcnJheVtpXSA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQl9Ci0KLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKLQkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCX0KLQotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUxLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxOG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTJtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTltYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNm1iXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7Ci0KLQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7Ci0JCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgewotCQkJY2NrX29mZG1fZGVsdGEgPSAyOwotCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCi0JCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUycyksIDI0KQotCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUybCksIDE2KQotCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKLQkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMWwpLCAwKSk7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKLQkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExcyksIDI0KQotCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMWwpLCAxNikKLQkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81cyksIDgpCi0JCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNWwpLCAwKSk7Ci0JCX0gZWxzZSB7Ci0JCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKLQkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQotCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAotCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKLQkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOwotCQl9Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTcsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzNdICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzJdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfN10gKwotCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzVdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7Ci0JCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgewotCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCi0JCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKLQkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlRXh0Q2NrKSwgMTYpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUR1cENjayksIDApKTsKLQkJfSBlbHNlIHsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAotCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCi0JCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOwotCQl9Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfU1VCLAotCQkgIEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yM0NoYWluLCA2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IyQ2hhaW4sIDApKTsKLQotCWkgPSByYXRlNm1iOwotCi0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJaSA9IHJhdGVIdDQwXzA7Ci0JZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQotCQlpID0gcmF0ZUh0MjBfMDsKLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgPQotCQkJcmF0ZXNBcnJheVtpXSArIEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKLQllbHNlCi0JCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07Ci0KLQlzd2l0Y2goYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSkgewotCWNhc2UgMToKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlhaC0+cmVndWxhdG9yeS5tYXhfcG93ZXJfbGV2ZWwgKz0gSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiSW52YWxpZCBjaGFpbm1hc2sgY29uZmlndXJhdGlvblxuIik7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHU4IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCi17Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9Ci0JCSYoZWVwLT5tb2RhbEhlYWRlcltBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPT0gZnJlcV9iYW5kXSk7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCXU4IG51bV9hbnRfY29uZmlnOwotCi0JbnVtX2FudF9jb25maWcgPSAxOwotCi0JaWYgKHBCYXNlLT52ZXJzaW9uID49IDB4MEUwRCkKLQkJaWYgKHBNb2RhbC0+dXNlQW50MSkKLQkJCW51bV9hbnRfY29uZmlnICs9IDE7Ci0KLQlyZXR1cm4gbnVtX2FudF9jb25maWc7Ci19Ci0KLXN0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKLXsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKLQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KLQkJJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCi0JcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKLX0KLQotc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQotewotI2RlZmluZSBFRVBfREVGX1NQVVJDSEFOIFwKLQkoYWgtPmVlcHJvbS5kZWYubW9kYWxIZWFkZXJbaXMyR0h6XS5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCi0KLQl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOwotCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAotCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKLQkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKLQotCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgewotCWNhc2UgU1BVUl9ESVNBQkxFOgotCQlicmVhazsKLQljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgotCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKLQkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSBTUFVSX0VOQUJMRV9FRVBST006Ci0JCXNwdXJfdmFsID0gRUVQX0RFRl9TUFVSQ0hBTjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHNwdXJfdmFsOwotCi0jdW5kZWYgRUVQX0RFRl9TUFVSQ0hBTgotfQotCi1zdGF0aWMgc3RydWN0IGVlcHJvbV9vcHMgZWVwX2RlZl9vcHMgPSB7Ci0JLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od19kZWZfY2hlY2tfZWVwcm9tLAotCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tLAotCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od19kZWZfZmlsbF9lZXByb20sCi0JLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3ZlciwKLQkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2LAotCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnLAotCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCi0JLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcywKLQkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3X2RlZl9zZXRfYWRkYWMsCi0JLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlciwKLQkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3X2RlZl9nZXRfc3B1cl9jaGFubmVsCi19OwotCi1pbnQgYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK2ludCBhdGg5a19od19lZXByb21faW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgc3RhdHVzOwogCi0JaWYgKEFSX1NSRVZfOTI4NShhaCkpIHsKKwlpZiAoQVJfU1JFVl85Mjg3KGFoKSkgeworCQlhaC0+ZWVwX21hcCA9IEVFUF9NQVBfQVI5Mjg3OworCQlhaC0+ZWVwX29wcyA9ICZlZXBfQVI5Mjg3X29wczsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkgewogCQlhaC0+ZWVwX21hcCA9IEVFUF9NQVBfNEtCSVRTOwogCQlhaC0+ZWVwX29wcyA9ICZlZXBfNGtfb3BzOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKaW5kZXggNjdiOGJkMTIuLjRmZTMzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tLmgKQEAgLTEwMCw2ICsxMDAsOCBAQAogI2RlZmluZSBBUjU0MTZfVkVSX01BU0sgKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykKICNkZWZpbmUgT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkgJiYgXAogCQkJCSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKQorI2RlZmluZSBPTENfRk9SX0FSOTI4N18xMF9MQVRFUiAoQVJfU1JFVl85Mjg3XzEwX09SX0xBVEVSKGFoKSAmJiBcCisJCQkJIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpCiAKICNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKICNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCkBAIC0xNzYsNiArMTc4LDU3IEBACiAKICNkZWZpbmUgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAyMgogCisjZGVmaW5lIEFSOTI4N19FRVBfVkVSICAgICAgICAgICAgICAgMHhFCisjZGVmaW5lIEFSOTI4N19FRVBfVkVSX01JTk9SX01BU0sgICAgMHhGRkYKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMSAgICAgICAweDEKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMiAgICAgICAweDIKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMyAgICAgICAweDMKKyNkZWZpbmUgQVI5Mjg3X0VFUF9NSU5PUl9WRVIgICAgICAgICBBUjkyODdfRUVQX01JTk9SX1ZFUl8zCisjZGVmaW5lIEFSOTI4N19FRVBfTUlOT1JfVkVSX2IgICAgICAgQVI5Mjg3X0VFUF9NSU5PUl9WRVIKKyNkZWZpbmUgQVI5Mjg3X0VFUF9OT19CQUNLX1ZFUiAgICAgICBBUjkyODdfRUVQX01JTk9SX1ZFUl8xCisKKyNkZWZpbmUgQVI5Mjg3X0VFUF9TVEFSVF9MT0MgICAgICAgICAgICAxMjgKKyNkZWZpbmUgQVI5Mjg3X05VTV8yR19DQUxfUElFUlMgICAgICAgICAzCisjZGVmaW5lIEFSOTI4N19OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjkyODdfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDMKKyNkZWZpbmUgQVI5Mjg3X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICAzCisjZGVmaW5lIEFSOTI4N19OVU1fQ1RMUyAgICAgICAgICAgICAgCTEyCisjZGVmaW5lIEFSOTI4N19OVU1fQkFORF9FREdFUyAgICAgICAgCTQKKyNkZWZpbmUgQVI5Mjg3X05VTV9QRF9HQUlOUyAgICAgICAgICAgICA0CisjZGVmaW5lIEFSOTI4N19QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAorI2RlZmluZSBBUjkyODdfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDEKKyNkZWZpbmUgQVI5Mjg3X0VFUFJPTV9NT0RBTF9TUFVSUyAgICAgICA1CisjZGVmaW5lIEFSOTI4N19NQVhfUkFURV9QT1dFUiAgICAgICAgICAgNjMKKyNkZWZpbmUgQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMgICAgICAgICAxMjgKKyNkZWZpbmUgQVI5Mjg3X05VTV9SQVRFUyAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBUjkyODdfQkNIQU5fVU5VU0VEICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgQVI5Mjg3X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQiA2NAorI2RlZmluZSBBUjkyODdfT1BGTEFHU18xMUEgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgQVI5Mjg3X09QRkxBR1NfMTFHICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFSOTI4N19PUEZMQUdTXzJHX0hUNDAgICAgICAgICAgMHgwOAorI2RlZmluZSBBUjkyODdfT1BGTEFHU18yR19IVDIwICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVI5Mjg3X09QRkxBR1NfNUdfSFQ0MCAgICAgICAgICAweDA0CisjZGVmaW5lIEFSOTI4N19PUEZMQUdTXzVHX0hUMjAgICAgICAgICAgMHgxMAorI2RlZmluZSBBUjkyODdfRUVQTUlTQ19CSUdfRU5ESUFOICAgICAgIDB4MDEKKyNkZWZpbmUgQVI5Mjg3X0VFUE1JU0NfV09XICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFSOTI4N19NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUjkyODdfQU5UXzE2UyAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIEFSOTI4N19jdXN0ZGF0YXNpemUgICAgICAgICAgICAgMjAKKworI2RlZmluZSBBUjkyODdfTlVNX0FOVF9DSEFJTl9GSUVMRFMgICAgIDYKKyNkZWZpbmUgQVI5Mjg3X05VTV9BTlRfQ09NTU9OX0ZJRUxEUyAgICA0CisjZGVmaW5lIEFSOTI4N19TSVpFX0FOVF9DSEFJTl9GSUVMRCAgICAgMgorI2RlZmluZSBBUjkyODdfU0laRV9BTlRfQ09NTU9OX0ZJRUxEICAgIDQKKyNkZWZpbmUgQVI5Mjg3X0FOVF9DSEFJTl9NQVNLICAgICAgICAgICAweDMKKyNkZWZpbmUgQVI5Mjg3X0FOVF9DT01NT05fTUFTSyAgICAgICAgICAweGYKKyNkZWZpbmUgQVI5Mjg3X0NIQUlOXzBfSURYICAgICAgICAgICAgICAwCisjZGVmaW5lIEFSOTI4N19DSEFJTl8xX0lEWCAgICAgICAgICAgICAgMQorI2RlZmluZSBBUjkyODdfREFUQV9TWiAgICAgICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIgIC01CisKKyNkZWZpbmUgQVI5Mjg3X0NIRUNLU1VNX0xPQ0FUSU9OIChBUjkyODdfRUVQX1NUQVJUX0xPQyArIDEpCisKIGVudW0gZWVwcm9tX3BhcmFtIHsKIAlFRVBfTkZUSFJFU0hfNSwKIAlFRVBfTkZUSFJFU0hfMiwKQEAgLTE5OSw3ICsyNTIsMTEgQEAKIAlFRVBfT0xfUFdSQ1RSTCwKIAlFRVBfUkNfQ0hBSU5fTUFTSywKIAlFRVBfREFDX0hQV1JfNUcsCi0JRUVQX0ZSQUNfTl81RworCUVFUF9GUkFDX05fNUcsCisJRUVQX0RFVl9UWVBFLAorCUVFUF9URU1QU0VOU0VfU0xPUEUsCisJRUVQX1RFTVBTRU5TRV9TTE9QRV9QQUxfT04sCisJRUVQX1BXUl9UQUJMRV9PRkZTRVQKIH07CiAKIGVudW0gYXI1NDE2X3JhdGVzIHsKQEAgLTMyOCw0NiArMzg1LDEyMyBAQAogfSBfX3BhY2tlZDsKIAogc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgewotCXUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1MzIgIGFudEN0cmxDb21tb247Ci0JdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHN3aXRjaFNldHRsaW5nOwotCXU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIGFkY0Rlc2lyZWRTaXplOwotCXU4ICAgcGdhRGVzaXJlZFNpemU7Ci0JdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHR4RW5kVG9YcGFPZmY7Ci0JdTggICB0eEVuZFRvUnhPbjsKLQl1OCAgIHR4RnJhbWVUb1hwYU9uOwotCXU4ICAgdGhyZXNoNjI7Ci0JdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgeHBkR2FpbjsKLQl1OCAgIHhwZDsKLQl1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHBkR2Fpbk92ZXJsYXA7Ci0JdTggICBvYl8wMTsKLQl1OCAgIGRiMV8wMTsKLQl1OCAgIHhwYUJpYXNMdmw7Ci0JdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7Ci0JdTggICB0eEZyYW1lVG9QYU9uOwotCXU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0JdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0JdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgc3dTZXR0bGVIdDQwOwotCXU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLQl1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotCXU4ICAgZGIyXzAxOwotCXU4ICAgdmVyc2lvbjsKLQl1MTYgIG9iXzIzNDsKLQl1MTYgIGRiMV8yMzQ7Ci0JdTE2ICBkYjJfMjM0OwotCXU4ICAgZnV0dXJlTW9kYWxbNF07Ci0KKwl1MzIgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1MzIgYW50Q3RybENvbW1vbjsKKwl1OCBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBzd2l0Y2hTZXR0bGluZzsKKwl1OCB0eFJ4QXR0ZW5DaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBhZGNEZXNpcmVkU2l6ZTsKKwl1OCBwZ2FEZXNpcmVkU2l6ZTsKKwl1OCB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCB0eEVuZFRvWHBhT2ZmOworCXU4IHR4RW5kVG9SeE9uOworCXU4IHR4RnJhbWVUb1hwYU9uOworCXU4IHRocmVzaDYyOworCXU4IG5vaXNlRmxvb3JUaHJlc2hDaFtBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggeHBkR2FpbjsKKwl1OCB4cGQ7CisJdTggaXFDYWxJQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4IGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBwZEdhaW5PdmVybGFwOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXU4IG9iXzE6NCwgb2JfMDo0OworCXU4IGRiMV8xOjQsIGRiMV8wOjQ7CisjZWxzZQorCXU4IG9iXzA6NCwgb2JfMTo0OworCXU4IGRiMV8wOjQsIGRiMV8xOjQ7CisjZW5kaWYKKwl1OCB4cGFCaWFzTHZsOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB4YXR0ZW4yRGJbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXU4IGRiMl8xOjQsIGRiMl8wOjQ7CisjZWxzZQorCXU4IGRiMl8wOjQsIGRiMl8xOjQ7CisjZW5kaWYKKwl1OCB2ZXJzaW9uOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorCXU4IG9iXzM6NCwgb2JfMjo0OworCXU4IGFudGRpdl9jdGwxOjQsIG9iXzQ6NDsKKwl1OCBkYjFfMzo0LCBkYjFfMjo0OworCXU4IGFudGRpdl9jdGwyOjQsIGRiMV80OjQ7CisJdTggZGIyXzI6NCwgZGIyXzM6NDsKKwl1OCByZXNlcnZlZDo0LCBkYjJfNDo0OworI2Vsc2UKKwl1OCBvYl8yOjQsIG9iXzM6NDsKKwl1OCBvYl80OjQsIGFudGRpdl9jdGwxOjQ7CisJdTggZGIxXzI6NCwgZGIxXzM6NDsKKwl1OCBkYjFfNDo0LCBhbnRkaXZfY3RsMjo0OworCXU4IGRiMl8yOjQsIGRiMl8zOjQ7CisJdTggZGIyXzQ6NCwgcmVzZXJ2ZWQ6NDsKKyNlbmRpZgorCXU4IGZ1dHVyZU1vZGFsWzRdOwogCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IGJhc2VfZWVwX2FyOTI4N19oZWFkZXIgeworCXUxNiBsZW5ndGg7CisJdTE2IGNoZWNrc3VtOworCXUxNiB2ZXJzaW9uOworCXU4IG9wQ2FwRmxhZ3M7CisJdTggZWVwTWlzYzsKKwl1MTYgcmVnRG1uWzJdOworCXU4IG1hY0FkZHJbNl07CisJdTggcnhNYXNrOworCXU4IHR4TWFzazsKKwl1MTYgcmZTaWxlbnQ7CisJdTE2IGJsdWVUb290aE9wdGlvbnM7CisJdTE2IGRldmljZUNhcDsKKwl1MzIgYmluQnVpbGROdW1iZXI7CisJdTggZGV2aWNlVHlwZTsKKwl1OCBvcGVuTG9vcFB3ckNudGw7CisJaW50OF90IHB3clRhYmxlT2Zmc2V0OworCWludDhfdCB0ZW1wU2Vuc1Nsb3BlOworCWludDhfdCB0ZW1wU2Vuc1Nsb3BlUGFsT247CisJdTggZnV0dXJlQmFzZVsyOV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbW9kYWxfZWVwX2FyOTI4N19oZWFkZXIgeworCXUzMiBhbnRDdHJsQ2hhaW5bQVI5Mjg3X01BWF9DSEFJTlNdOworCXUzMiBhbnRDdHJsQ29tbW9uOworCWludDhfdCBhbnRlbm5hR2FpbkNoW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwl1OCBzd2l0Y2hTZXR0bGluZzsKKwl1OCB0eFJ4QXR0ZW5DaFtBUjkyODdfTUFYX0NIQUlOU107CisJdTggcnhUeE1hcmdpbkNoW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwlpbnQ4X3QgYWRjRGVzaXJlZFNpemU7CisJdTggdHhFbmRUb1hwYU9mZjsKKwl1OCB0eEVuZFRvUnhPbjsKKwl1OCB0eEZyYW1lVG9YcGFPbjsKKwl1OCB0aHJlc2g2MjsKKwlpbnQ4X3Qgbm9pc2VGbG9vclRocmVzaENoW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwl1OCB4cGRHYWluOworCXU4IHhwZDsKKwlpbnQ4X3QgaXFDYWxJQ2hbQVI5Mjg3X01BWF9DSEFJTlNdOworCWludDhfdCBpcUNhbFFDaFtBUjkyODdfTUFYX0NIQUlOU107CisJdTggcGRHYWluT3ZlcmxhcDsKKwl1OCB4cGFCaWFzTHZsOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSOTI4N19NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI5Mjg3X01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB2ZXJzaW9uOworCXU4IGRiMTsKKwl1OCBkYjI7CisJdTggb2JfY2NrOworCXU4IG9iX3BzazsKKwl1OCBvYl9xYW07CisJdTggb2JfcGFsX29mZjsKKwl1OCBmdXR1cmVNb2RhbFszMF07CisJc3RydWN0IHNwdXJfY2hhbiBzcHVyQ2hhbnNbQVI5Mjg3X0VFUFJPTV9NT0RBTF9TUFVSU107Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgewogCXU4IHB3clBkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOwpAQCAtNDAyLDYgKzUzNiwyOCBAQAogfSBfX3BhY2tlZDsKICNlbmRpZgogCitzdHJ1Y3QgY2FsX2RhdGFfb3BfbG9vcF9hcjkyODcgeworCXU4IHB3clBkZ1syXVs1XTsKKwl1OCB2cGRQZGdbMl1bNV07CisJdTggcGNkYWNbMl1bNV07CisJdTggZW1wdHlbMl1bNV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3IHsKKwl1OCBwd3JQZGdbQVI5Mjg3X05VTV9QRF9HQUlOU11bQVI5Mjg3X1BEX0dBSU5fSUNFUFRTXTsKKwl1OCB2cGRQZGdbQVI5Mjg3X05VTV9QRF9HQUlOU11bQVI5Mjg3X1BEX0dBSU5fSUNFUFRTXTsKK30gX19wYWNrZWQ7CisKK3VuaW9uIGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4N191IHsKKwlzdHJ1Y3QgY2FsX2RhdGFfb3BfbG9vcF9hcjkyODcgY2FsRGF0YU9wZW47CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4NyBjYWxEYXRhQ2xvc2U7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX2N0bF9kYXRhX2FyOTI4NyB7CisJc3RydWN0IGNhbF9jdGxfZWRnZXMKKwljdGxFZGdlc1tBUjkyODdfTUFYX0NIQUlOU11bQVI5Mjg3X05VTV9CQU5EX0VER0VTXTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBjYWxfY3RsX2RhdGEgewogCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCiAJY3RsRWRnZXNbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fQkFORF9FREdFU107CkBAIC00NjEsNiArNjE3LDI2IEBACiAJdTggcGFkZGluZzsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBhcjkyODdfZWVwcm9tIHsKKwlzdHJ1Y3QgYmFzZV9lZXBfYXI5Mjg3X2hlYWRlciBiYXNlRWVwSGVhZGVyOworCXU4IGN1c3REYXRhW0FSOTI4N19EQVRBX1NaXTsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2FyOTI4N19oZWFkZXIgbW9kYWxIZWFkZXI7CisJdTggY2FsRnJlcVBpZXIyR1tBUjkyODdfTlVNXzJHX0NBTF9QSUVSU107CisJdW5pb24gY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3X3UKKwljYWxQaWVyRGF0YTJHW0FSOTI4N19NQVhfQ0hBSU5TXVtBUjkyODdfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXJDY2tbQVI5Mjg3X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXIyR1tBUjkyODdfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI5Mjg3X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSOTI4N19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107CisJdTggY3RsSW5kZXhbQVI5Mjg3X05VTV9DVExTXTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhX2FyOTI4NyBjdGxEYXRhW0FSOTI4N19OVU1fQ1RMU107CisJdTggcGFkZGluZzsKK30gX19wYWNrZWQ7CisKIGVudW0gcmVnX2V4dF9iaXRtYXAgewogCVJFR19FWFRfSkFQQU5fTUlEQkFORCA9IDEsCiAJUkVHX0VYVF9GQ0NfREZTX0hUNDAgPSAyLApAQCAtNDgwLDYgKzY1Niw3IEBACiBlbnVtIGF0aDlrX2VlcF9tYXAgewogCUVFUF9NQVBfREVGQVVMVCA9IDB4MCwKIAlFRVBfTUFQXzRLQklUUywKKwlFRVBfTUFQX0FSOTI4NywKIAlFRVBfTUFQX01BWAogfTsKIApAQCAtNTAwLDEwICs2NzcsMzkgQEAKIAl1MTYgKCpnZXRfc3B1cl9jaGFubmVsKShzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KTsKIH07CiAKK3ZvaWQgYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZywgdTMyIG1hc2ssCisJCQkgICAgICAgdTMyIHNoaWZ0LCB1MzIgdmFsKTsKK2ludDE2X3QgYXRoOWtfaHdfaW50ZXJwb2xhdGUodTE2IHRhcmdldCwgdTE2IHNyY0xlZnQsIHUxNiBzcmNSaWdodCwKKwkJCSAgICAgaW50MTZfdCB0YXJnZXRMZWZ0LAorCQkJICAgICBpbnQxNl90IHRhcmdldFJpZ2h0KTsKK2Jvb2wgYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KHU4IHRhcmdldCwgdTggKnBMaXN0LCB1MTYgbGlzdFNpemUsCisJCQkJICAgIHUxNiAqaW5kZXhMLCB1MTYgKmluZGV4Uik7Citib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSk7Cit2b2lkIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkgICAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkgICAgIHU4ICpwUmV0VnBkTGlzdCk7Cit2b2lkIGF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcG93SW5mbywKKwkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBOZXdQb3dlciwKKwkJCQkgICAgICAgdTE2IG51bVJhdGVzLCBib29sIGlzRXh0VGFyZ2V0KTsKK3ZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgKnBvd0luZm8sCisJCQkJdTE2IG51bUNoYW5uZWxzLAorCQkJCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0ICpwTmV3UG93ZXIsCisJCQkJdTE2IG51bVJhdGVzLCBib29sIGlzSHQ0MFRhcmdldCk7Cit1MTYgYXRoOWtfaHdfZ2V0X21heF9lZGdlX3Bvd2VyKHUxNiBmcmVxLCBzdHJ1Y3QgY2FsX2N0bF9lZGdlcyAqcFJkRWRnZXNQb3dlciwKKwkJCQlib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKTsKK2ludCBhdGg5a19od19lZXByb21faW5pdChzdHJ1Y3QgYXRoX2h3ICphaCk7CisKICNkZWZpbmUgYXI1NDE2X2dldF9udHhjaGFpbnMoX3R4Y2hhaW5tYXNrKQkJCVwKIAkoKChfdHhjaGFpbm1hc2sgPj4gMikgJiAxKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkgKChfdHhjaGFpbm1hc2sgPj4gMSkgJiAxKSArIChfdHhjaGFpbm1hc2sgJiAxKSkKIAotaW50IGF0aDlrX2h3X2VlcHJvbV9hdHRhY2goc3RydWN0IGF0aF9odyAqYWgpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF9kZWZfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF80a19vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGVlcHJvbV9vcHMgZWVwX0FSOTI4N19vcHM7CiAKICNlbmRpZiAvKiBFRVBST01fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZWNhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMKQEAgLTAsMCArMSwxMTg4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImF0aDlrLmgiCisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV92ZXIoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGKTsKK30KKworc3RhdGljIGludCBhdGg5a19od180a19nZXRfZWVwcm9tX3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3XzRrX2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworI2RlZmluZSBTSVpFX0VFUFJPTV80SyAoc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpKQorCXUxNiAqZWVwX2RhdGEgPSAodTE2ICopJmFoLT5lZXByb20ubWFwNGs7CisJaW50IGFkZHIsIGVlcF9zdGFydF9sb2MgPSAwOworCisJZWVwX3N0YXJ0X2xvYyA9IDY0OworCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJSZWFkaW5nIGZyb20gRUVQUk9NLCBub3QgZmxhc2hcbiIpOworCX0KKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV80SzsgYWRkcisrKSB7CisJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgYWRkciArIGVlcF9zdGFydF9sb2MsIGVlcF9kYXRhKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJICAgICAgICJVbmFibGUgdG8gcmVhZCBlZXByb20gcmVnaW9uIFxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWVwX2RhdGErKzsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKKyN1bmRlZiBTSVpFX0VFUFJPTV80SworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKyNkZWZpbmUgRUVQUk9NXzRLX1NJWkUgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KSkKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0KKwkJKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICopICZhaC0+ZWVwcm9tLm1hcDRrOworCXUxNiAqZWVwZGF0YSwgdGVtcCwgbWFnaWMsIG1hZ2ljMjsKKwl1MzIgc3VtID0gMCwgZWw7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlpbnQgaSwgYWRkcjsKKworCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsCisJCQkJCSAmbWFnaWMpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiUmVhZGluZyBNYWdpYyAjIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCisJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CisJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOworCisJCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCQluZWVkX3N3YXAgPSB0cnVlOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgRUVQUk9NXzRLX1NJWkU7IGFkZHIrKykgeworCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKKwkJCQkJKmVlcGRhdGEgPSB0ZW1wOworCQkJCQllZXBkYXRhKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkJIkludmFsaWQgRUVQUk9NIE1hZ2ljLiAiCisJCQkJCSJlbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sICJuZWVkX3N3YXAgPSAlcy5cbiIsCisJCW5lZWRfc3dhcCA/ICJUcnVlIiA6ICJGYWxzZSIpOworCisJaWYgKG5lZWRfc3dhcCkKKwkJZWwgPSBzd2FiMTYoYWgtPmVlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGg7CisKKwlpZiAoZWwgPiBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspKQorCQllbCA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80aykgLyBzaXplb2YodTE2KTsKKwllbHNlCisJCWVsID0gZWwgLyBzaXplb2YodTE2KTsKKworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJdTMyIGludGVnZXI7CisJCXUxNiB3b3JkOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmdcbiIpOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGggPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50KTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50ID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMgPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXAgPSB3b3JkOworCisJCWludGVnZXIgPSBzd2FiMzIoZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ29tbW9uKTsKKwkJZWVwLT5tb2RhbEhlYWRlci5hbnRDdHJsQ29tbW9uID0gaW50ZWdlcjsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUDRLX01BWF9DSEFJTlM7IGkrKykgeworCQkJaW50ZWdlciA9IHN3YWIzMihlZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDaGFpbltpXSk7CisJCQllZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDaGFpbltpXSA9IGludGVnZXI7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCQl3b3JkID0gc3dhYjE2KGVlcC0+bW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKKwkJCWVlcC0+bW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuID0gd29yZDsKKwkJfQorCX0KKworCWlmIChzdW0gIT0gMHhmZmZmIHx8IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgIT0gQVI1NDE2X0VFUF9WRVIgfHwKKwkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiQmFkIEVFUFJPTSBjaGVja3N1bSAweCV4IG9yIHJldmlzaW9uIDB4JTA0eFxuIiwKKwkJCXN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworI3VuZGVmIEVFUFJPTV80S19TSVpFCit9CisKK3N0YXRpYyB1MzIgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgRUVQX05GVEhSRVNIXzI6CisJCXJldHVybiBwTW9kYWwtPm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMCk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07CisJY2FzZSBBUl9FRVBST01fTUFDKDEpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOworCWNhc2UgQVJfRUVQUk9NX01BQygyKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKKwljYXNlIEVFUF9SRUdfMDoKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07CisJY2FzZSBFRVBfUkVHXzE6CisJCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOworCWNhc2UgRUVQX09QX0NBUDoKKwkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7CisJY2FzZSBFRVBfT1BfTU9ERToKKwkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOworCWNhc2UgRUVQX1JGX1NJTEVOVDoKKwkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKKwljYXNlIEVFUF9PQl8yOgorCQlyZXR1cm4gcE1vZGFsLT5vYl8wOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWwtPmRiMV8xOworCWNhc2UgRUVQX01JTk9SX1JFVjoKKwkJcmV0dXJuIHBCYXNlLT52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSzsKKwljYXNlIEVFUF9UWF9NQVNLOgorCQlyZXR1cm4gcEJhc2UtPnR4TWFzazsKKwljYXNlIEVFUF9SWF9NQVNLOgorCQlyZXR1cm4gcEJhc2UtPnJ4TWFzazsKKwljYXNlIEVFUF9GUkFDX05fNUc6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKKwkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKKwkJCQl1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKKwkJCQl1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAorCQkJCXUxNiBudW1YcGRHYWlucykKK3sKKyNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUgXAorCSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisJaW50IGksIGosIGs7CisJaW50MTZfdCBzczsKKwl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKKwlzdGF0aWMgdTggdnBkVGFibGVMW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVSW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKworCXU4ICpwVnBkTCwgKnBWcGRSLCAqcFB3ckwsICpwUHdyUjsKKwl1OCBtaW5Qd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKKwl1OCBtYXhQd3JUNFtBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TXTsKKwlpbnQxNl90IHZwZFN0ZXA7CisJaW50MTZfdCB0bXBWYWw7CisJdTE2IHNpemVDdXJyVnBkVGFibGUsIG1heEluZGV4LCB0Z3RJbmRleDsKKwlib29sIG1hdGNoOworCWludDE2X3QgbWluRGVsdGEgPSAwOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKyNkZWZpbmUgUERfR0FJTl9CT1VOREFSWV9ERUZBVUxUIDU4OworCisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCisJZm9yIChudW1QaWVycyA9IDA7IG51bVBpZXJzIDwgYXZhaWxQaWVyczsgbnVtUGllcnMrKykgeworCQlpZiAoYkNoYW5zW251bVBpZXJzXSA9PSBBUjU0MTZfQkNIQU5fVU5VU0VEKQorCQkJYnJlYWs7CisJfQorCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCUlTX0NIQU5fMkdIWihjaGFuKSksIGJDaGFucywgbnVtUGllcnMsCisJCQkJCSZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCQlBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMsCisJCQkJCQl2cGRUYWJsZUxbaV0pOworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQkJQVI1NDE2X0VFUDRLX1BEX0dBSU5fSUNFUFRTLAorCQkJCQkJdnBkVGFibGVSW2ldKTsKKworCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKKwkJCQl2cGRUYWJsZUlbaV1bal0gPQorCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCisJCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCisJCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgorCQkJCQkJICAgICAgIChjaGFuKSksCisJCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCisJCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKworCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCisJCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQorCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7CisJCX0gZWxzZSB7CisJCQltaW5EZWx0YSA9IDA7CisJCX0KKworCQlpZiAoaSA9PSAwKSB7CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQkJZWxzZQorCQkJCXNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQorCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisJCX0KKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKKwkJCXNzKys7CisJCX0KKworCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCisJCQkJKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKKworCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKQorCQkJcFBEQURDVmFsdWVzW2srK10gPSB2cGRUYWJsZUlbaV1bc3MrK107CisKKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDFdIC0KKwkJCQkgICAgdnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAyXSk7CisJCXZwZFN0ZXAgPSAoaW50MTZfdCkoKHZwZFN0ZXAgPCAxKSA/IDEgOiB2cGRTdGVwKTsKKworCQlpZiAodGd0SW5kZXggPj0gbWF4SW5kZXgpIHsKKwkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCisJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKKwkJCQl0bXBWYWwgPSAoaW50MTZfdCkgVE1QX1ZBTF9WUERfVEFCTEU7CisJCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KKwkJCQkJCQkgMjU1IDogdG1wVmFsKTsKKwkJCQlzcysrOworCQkJfQorCQl9CisJfQorCisJd2hpbGUgKGkgPCBBUjU0MTZfRUVQNEtfUERfR0FJTlNfSU5fTUFTSykgeworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IFBEX0dBSU5fQk9VTkRBUllfREVGQVVMVDsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKKwkJaysrOworCX0KKworCXJldHVybjsKKyN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFzZXQ7CisJdTggKnBDYWxCQ2hhbnMgPSBOVUxMOworCXUxNiBwZEdhaW5PdmVybGFwX3QyOworCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107CisJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKKwl1MTYgbnVtUGllcnMsIGksIGo7CisJaW50MTZfdCB0TWluQ2FsUG93ZXI7CisJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7CisJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKKwl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7CisKKwl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyLnBkR2Fpbk92ZXJsYXA7CisJfSBlbHNlIHsKKwkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKKwkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7CisJfQorCisJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOworCisJCQlhdGg5a19od19nZXRfNGtfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKKwkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAorCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKKwkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKKworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCisJCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAorCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCisJCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKKwkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCisJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJCQkgaW50MTZfdCAqcmF0ZXNBcnJheSwKKwkJCQkJCSB1MTYgY2ZnQ3RsLAorCQkJCQkJIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAorCQkJCQkJIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJCSB1MTYgcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgQ01QX1RFU1RfR1JQIFwKKwkoKChjZmdDdGwgJiB+Q1RMX01PREVfTSl8IChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQlcCisJIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkJCQkJCQlcCisJfHwgKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09IFwKKwkgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpCisKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlpbnQgaTsKKwlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CisJdTE2IHR3aWNlTWluRWRnZVBvd2VyOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwl1MTYgc2NhbGVkUG93ZXIgPSAwLCBtaW5DdGxQb3dlciwgbWF4UmVnQWxsb3dlZFBvd2VyOworCXUxNiBudW1DdGxNb2RlcywgKnBDdGxNb2RlLCBjdGxNb2RlLCBmcmVxOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrICpyZXA7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKnBFZXBEYXRhID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQorCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG0sIHRhcmdldFBvd2VyQ2NrID0geworCQkwLCB7IDAsIDAsIDAsIDB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDB9IH0sIHRhcmdldFBvd2VyQ2NrRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDAgfQorCX07CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLCB0YXJnZXRQb3dlckh0NDAgPSB7CisJCTAsIHswLCAwLCAwLCAwfQorCX07CisJdTE2IGN0bE1vZGVzRm9yMTFnW10gPQorCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKKwkJICBDVExfMkdIVDQwCisJCX07CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF07CisJdHdpY2VMYXJnZXN0QW50ZW5uYSA9IChpbnQxNl90KW1pbihBbnRlbm5hUmVkdWN0aW9uIC0KKwkJCQkJICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisJaWYgKHJlZ3VsYXRvcnktPnRwX3NjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgeworCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KKwkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKHJlZ3VsYXRvcnktPnRwX3NjYWxlKV0gKiAyKTsKKwl9CisKKwlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOworCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOworCisJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOworCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7CisKKwlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCisJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7CisJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7CisJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjAsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7CisKKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7CisJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQ0MCwKKwkJCQlBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7CisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCisJCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCQkmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOworCX0KKworCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7CisJCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAorCQkJKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOworCisJCWlmIChpc0h0NDBDdGxNb2RlKQorCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOworCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKKwkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7CisJCWVsc2UKKwkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKKwkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCisJCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X0VFUDRLX05VTV9DVExTKSAmJgorCQkJICAgICBwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgeworCisJCQlpZiAoQ01QX1RFU1RfR1JQKSB7CisJCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7CisKKwkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcigKKwkJCQkJZnJlcSwKKwkJCQkJcmVwLT5jdGxFZGdlc1sKKwkJCQkJYXI1NDE2X2dldF9udHhjaGFpbnMoYWgtPnR4Y2hhaW5tYXNrKSAtIDFdLAorCQkJCQlJU19DSEFOXzJHSFooY2hhbiksCisJCQkJCUFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyk7CisKKwkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpIHsKKwkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPQorCQkJCQkJbWluKHR3aWNlTWF4RWRnZVBvd2VyLAorCQkJCQkJICAgIHR3aWNlTWluRWRnZVBvd2VyKTsKKwkJCQl9IGVsc2UgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQltaW5DdGxQb3dlciA9ICh1OCltaW4odHdpY2VNYXhFZGdlUG93ZXIsIHNjYWxlZFBvd2VyKTsKKworCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CisJCWNhc2UgQ1RMXzExQjoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7IGkrKykgeworCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKKwkJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMkdIVDIwOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykgeworCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAorCQkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzExQl9FWFQ6CisJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPQorCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSwKKwkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzExR19FWFQ6CisJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdID0KKwkJCQltaW4oKHUxNil0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAorCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfMkdIVDQwOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgeworCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldLAorCQkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCXJhdGVzQXJyYXlbcmF0ZTZtYl0gPQorCXJhdGVzQXJyYXlbcmF0ZTltYl0gPQorCXJhdGVzQXJyYXlbcmF0ZTEybWJdID0KKwlyYXRlc0FycmF5W3JhdGUxOG1iXSA9CisJcmF0ZXNBcnJheVtyYXRlMjRtYl0gPQorCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisKKwlyYXRlc0FycmF5W3JhdGUzNm1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMV07CisJcmF0ZXNBcnJheVtyYXRlNDhtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzJdOworCXJhdGVzQXJyYXlbcmF0ZTU0bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFszXTsKKwlyYXRlc0FycmF5W3JhdGVYcl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykKKwkJcmF0ZXNBcnJheVtyYXRlSHQyMF8wICsgaV0gPSB0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldOworCisJcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOworCXJhdGVzQXJyYXlbcmF0ZTJzXSA9IHJhdGVzQXJyYXlbcmF0ZTJsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKKwlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzJdOworCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKKwkJfQorCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPSB0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07CisJfQorCisjdW5kZWYgQ01QX1RFU1RfR1JQCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKK3sKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7CisJaW50IGk7CisKKwltZW1zZXQocmF0ZXNBcnJheSwgMCwgc2l6ZW9mKHJhdGVzQXJyYXkpKTsKKworCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49CisJICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOworCX0KKworCWF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKKwkJCQkJICAgICAmcmF0ZXNBcnJheVswXSwgY2ZnQ3RsLAorCQkJCQkgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJICAgICB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJICAgICBwb3dlckxpbWl0KTsKKworCWF0aDlrX2h3X3NldF80a19wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0JKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSNTQxNl9NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJfQorCisKKwkvKiBVcGRhdGUgcmVndWxhdG9yeSAqLworCisJaSA9IHJhdGU2bWI7CisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJaSA9IHJhdGVIdDQwXzA7CisJZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQorCQlpID0gcmF0ZUh0MjBfMDsKKworCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQXI1NDE2UmF0ZVNpemU7IGkrKykKKwkJCXJhdGVzQXJyYXlbaV0gLT0gQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOworCX0KKworCS8qIE9GRE0gcG93ZXIgcGVyIHJhdGUgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNTRtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTQ4bWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUzNm1iXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOworCisJLyogQ0NLIHBvd2VyIHBlciByYXRlICovCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CisKKwkvKiBIVDIwIHBvd2VyIHBlciByYXRlICovCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKKworCS8qIEhUNDAgcG93ZXIgcGVyIHJhdGUgKi8KKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCisJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKKwkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCBiaWFzbGV2ZWw7CisKKwlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKKwkJcmV0dXJuOworCisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQorCQlyZXR1cm47CisKKwlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSA9CisJCSAgKElOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfZ2FpbihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCwKKwkJCQkgc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCwKKwkJCQkgdTggdHhSeEF0dGVuTG9jYWwpCit7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAsCisJCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5bMF0pOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApLAorCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSkgJgorCQkgICB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKKwkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJICBTTShwTW9kYWwtPmlxQ2FsSUNoWzBdLCBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikgfAorCQkgIFNNKHBNb2RhbC0+aXFDYWxRQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgeworCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbMF07CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sIHBNb2RhbC0+YnN3TWFyZ2luWzBdKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwgcE1vZGFsLT5ic3dBdHRlblswXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFosCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yTWFyZ2luWzBdKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOworCisJCS8qIFNldCB0aGUgYmxvY2sgMSB2YWx1ZSB0byBibG9jayAwIHZhbHVlICovCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyAweDEwMDAsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT5ic3dNYXJnaW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgMHgxMDAwLAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLCBwTW9kYWwtPmJzd0F0dGVuWzBdKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIDB4MTAwMCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCisJCQkgICAgICBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgMHgxMDAwLAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLAorCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yRGJbMF0pOworCX0KKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4sCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sIHR4UnhBdHRlbkxvY2FsKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOLAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbMF0pOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYR0FJTiArIDB4MTAwMCwKKwkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9BVFRFTiwgdHhSeEF0dGVuTG9jYWwpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyAweDEwMDAsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFswXSk7CisKKwlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkKKwkJUkVHX1dSSVRFKGFoLCBBUjkyODVfQU5fVE9QNCwgKEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQgfCAweDE0KSk7Cit9CisKKy8qCisgKiBSZWFkIEVFUFJPTSBoZWFkZXIgaW5mbyBhbmQgcHJvZ3JhbSB0aGUgZGV2aWNlIGZvciBjb3JyZWN0IG9wZXJhdGlvbgorICogZ2l2ZW4gdGhlIGNoYW5uZWwgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKwl1OCBvYls1XSwgZGIxWzVdLCBkYjJbNV07CisJdTggYW50X2Rpdl9jb250cm9sMSwgYW50X2Rpdl9jb250cm9sMjsKKwl1MzIgcmVnVmFsOworCisJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJdHhSeEF0dGVuTG9jYWwgPSAyMzsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCS8qIFNpbmdsZSBjaGFpbiBmb3IgNEsgRUVQUk9NKi8KKwlhdGg5a19od180a19zZXRfZ2FpbihhaCwgcE1vZGFsLCBlZXAsIHR4UnhBdHRlbkxvY2FsKTsKKworCS8qIEluaXRpYWxpemUgQW50IERpdmVyc2l0eSBzZXR0aW5ncyBmcm9tIEVFUFJPTSAqLworCWlmIChwTW9kYWwtPnZlcnNpb24gPj0gMykgeworCQlhbnRfZGl2X2NvbnRyb2wxID0gcE1vZGFsLT5hbnRkaXZfY3RsMTsKKwkJYW50X2Rpdl9jb250cm9sMiA9IHBNb2RhbC0+YW50ZGl2X2N0bDI7CisKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9NVUxUSUNIQUlOX0dBSU5fQ1RMKTsKKwkJcmVnVmFsICY9ICh+KEFSX1BIWV85Mjg1X0FOVF9ESVZfQ1RMX0FMTCkpOworCisJCXJlZ1ZhbCB8PSBTTShhbnRfZGl2X2NvbnRyb2wxLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX0NUTCk7CisJCXJlZ1ZhbCB8PSBTTShhbnRfZGl2X2NvbnRyb2wyLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX0FMVF9MTkFDT05GKTsKKwkJcmVnVmFsIHw9IFNNKChhbnRfZGl2X2NvbnRyb2wyID4+IDIpLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fTE5BQ09ORik7CisJCXJlZ1ZhbCB8PSBTTSgoYW50X2Rpdl9jb250cm9sMSA+PiAxKSwKKwkJCSAgICAgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfR0FJTlRCKTsKKwkJcmVnVmFsIHw9IFNNKChhbnRfZGl2X2NvbnRyb2wxID4+IDIpLAorCQkJICAgICBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fR0FJTlRCKTsKKworCisJCVJFR19XUklURShhaCwgQVJfUEhZX01VTFRJQ0hBSU5fR0FJTl9DVEwsIHJlZ1ZhbCk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfTVVMVElDSEFJTl9HQUlOX0NUTCk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NLX0RFVEVDVCk7CisJCXJlZ1ZhbCAmPSAofkFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpOworCQlyZWdWYWwgfD0gU00oKGFudF9kaXZfY29udHJvbDEgPj4gMyksCisJCQkgICAgIEFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX0NDS19ERVRFQ1QsIHJlZ1ZhbCk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0NLX0RFVEVDVCk7CisJfQorCisJaWYgKHBNb2RhbC0+dmVyc2lvbiA+PSAyKSB7CisJCW9iWzBdID0gcE1vZGFsLT5vYl8wOworCQlvYlsxXSA9IHBNb2RhbC0+b2JfMTsKKwkJb2JbMl0gPSBwTW9kYWwtPm9iXzI7CisJCW9iWzNdID0gcE1vZGFsLT5vYl8zOworCQlvYls0XSA9IHBNb2RhbC0+b2JfNDsKKworCQlkYjFbMF0gPSBwTW9kYWwtPmRiMV8wOworCQlkYjFbMV0gPSBwTW9kYWwtPmRiMV8xOworCQlkYjFbMl0gPSBwTW9kYWwtPmRiMV8yOworCQlkYjFbM10gPSBwTW9kYWwtPmRiMV8zOworCQlkYjFbNF0gPSBwTW9kYWwtPmRiMV80OworCisJCWRiMlswXSA9IHBNb2RhbC0+ZGIyXzA7CisJCWRiMlsxXSA9IHBNb2RhbC0+ZGIyXzE7CisJCWRiMlsyXSA9IHBNb2RhbC0+ZGIyXzI7CisJCWRiMlszXSA9IHBNb2RhbC0+ZGIyXzM7CisJCWRiMls0XSA9IHBNb2RhbC0+ZGIyXzQ7CisJfSBlbHNlIGlmIChwTW9kYWwtPnZlcnNpb24gPT0gMSkgeworCQlvYlswXSA9IHBNb2RhbC0+b2JfMDsKKwkJb2JbMV0gPSBvYlsyXSA9IG9iWzNdID0gb2JbNF0gPSBwTW9kYWwtPm9iXzE7CisJCWRiMVswXSA9IHBNb2RhbC0+ZGIxXzA7CisJCWRiMVsxXSA9IGRiMVsyXSA9IGRiMVszXSA9IGRiMVs0XSA9IHBNb2RhbC0+ZGIxXzE7CisJCWRiMlswXSA9IHBNb2RhbC0+ZGIyXzA7CisJCWRiMlsxXSA9IGRiMlsyXSA9IGRiMlszXSA9IGRiMls0XSA9IHBNb2RhbC0+ZGIyXzE7CisJfSBlbHNlIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJb2JbaV0gPSBwTW9kYWwtPm9iXzA7CisJCQlkYjFbaV0gPSBwTW9kYWwtPmRiMV8wOworCQkJZGIyW2ldID0gcE1vZGFsLT5kYjFfMDsKKwkJfQorCX0KKworCWlmIChBUl9TUkVWXzkyNzEoYWgpKSB7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19PQl9jY2ssCisJCQkJCSAgQVI5MjcxX0FOX1JGMkczX09CX2Nja19TLAorCQkJCQkgIG9iWzBdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzMsCisJCQkJCSAgQVI5MjcxX0FOX1JGMkczX09CX3BzaywKKwkJCQkJICBBUjkyNzFfQU5fUkYyRzNfT0JfcHNrX1MsCisJCQkJCSAgb2JbMV0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyNzFfQU5fUkYyRzNfT0JfcWFtLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19PQl9xYW1fUywKKwkJCQkJICBvYlsyXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19EQl8xLAorCQkJCQkgIEFSOTI3MV9BTl9SRjJHM19EQl8xX1MsCisJCQkJCSAgZGIxWzBdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzQsCisJCQkJCSAgQVI5MjcxX0FOX1JGMkc0X0RCXzIsCisJCQkJCSAgQVI5MjcxX0FOX1JGMkc0X0RCXzJfUywKKwkJCQkJICBkYjJbMF0pOworCX0gZWxzZSB7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8wLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8wX1MsCisJCQkJCSAgb2JbMF0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfMSwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfMV9TLAorCQkJCQkgIG9iWzFdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzMsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX09CXzIsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX09CXzJfUywKKwkJCQkJICBvYlsyXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8zLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19PQl8zX1MsCisJCQkJCSAgb2JbM10pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfT0JfNF9TLAorCQkJCQkgIG9iWzRdKTsKKworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfREIxXzAsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX0RCMV8wX1MsCisJCQkJCSAgZGIxWzBdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzMsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczX0RCMV8xLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19EQjFfMV9TLAorCQkJCQkgIGRiMVsxXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkczLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHM19EQjFfMiwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzNfREIxXzJfUywKKwkJCQkJICBkYjFbMl0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIxXzMsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMV8zX1MsCisJCQkJCSAgZGIxWzNdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzQsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMV80LAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjFfNF9TLCBkYjFbNF0pOworCisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0LAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjJfMCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzBfUywKKwkJCQkJICBkYjJbMF0pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzEsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMl8xX1MsCisJCQkJCSAgZGIyWzFdKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzQsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMl8yLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjJfMl9TLAorCQkJCQkgIGRiMlsyXSk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0LAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNF9EQjJfMywKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzNfUywKKwkJCQkJICBkYjJbM10pOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLAorCQkJCQkgIEFSOTI4NV9BTl9SRjJHNCwKKwkJCQkJICBBUjkyODVfQU5fUkYyRzRfREIyXzQsCisJCQkJCSAgQVI5Mjg1X0FOX1JGMkc0X0RCMl80X1MsCisJCQkJCSAgZGIyWzRdKTsKKwl9CisKKworCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQorCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCBBUjkyODVfQU5fVE9QNF9ERUZBVUxUKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJICAgICAgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osIEFSX1BIWV9ERVNJUkVEX1NaX0FEQywKKwkJICAgICAgcE1vZGFsLT5hZGNEZXNpcmVkU2l6ZSk7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRl9DVEw0LAorCQkgIFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGKSB8CisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpIHwKKwkJICBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKSAgfAorCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAorCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLCBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCisJaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49CisJCQkJCQlBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Cit9CisKK3N0YXRpYyB1OCBhdGg5a19od180a19nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfc3B1cl9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgaSwgYm9vbCBpczJHSHopCit7CisjZGVmaW5lIEVFUF9NQVA0S19TUFVSQ0hBTiBcCisJKGFoLT5lZXByb20ubWFwNGsubW9kYWxIZWFkZXIuc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCisJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKKwljYXNlIFNQVVJfRElTQUJMRToKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKKwkJc3B1cl92YWwgPSBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkiR2V0dGluZyBzcHVyIHZhbCBmcm9tIG5ldyBsb2MuICVkXG4iLCBzcHVyX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgU1BVUl9FTkFCTEVfRUVQUk9NOgorCQlzcHVyX3ZhbCA9IEVFUF9NQVA0S19TUFVSQ0hBTjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNwdXJfdmFsOworCisjdW5kZWYgRUVQX01BUDRLX1NQVVJDSEFOCit9CisKK2NvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF80a19vcHMgPSB7CisJLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od180a19jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbSwKKwkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZmlsbF9lZXByb20sCisJLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od180a19nZXRfZWVwcm9tX3JldiwKKwkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfNGtfZ2V0X251bV9hbnRfY29uZmlnLAorCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMsCisJLnNldF9hZGRhYwkJPSBhdGg5a19od180a19zZXRfYWRkYWMsCisJLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3XzRrX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfNGtfZ2V0X3NwdXJfY2hhbm5lbAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV85Mjg3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwYzIxYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCkBAIC0wLDAgKzEsMTE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgaW50IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX3JldihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkY7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X0FSOTI4N19maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20ubWFwOTI4NzsKKwl1MTYgKmVlcF9kYXRhOworCWludCBhZGRyLCBlZXBfc3RhcnRfbG9jID0gQVI5Mjg3X0VFUF9TVEFSVF9MT0M7CisJZWVwX2RhdGEgPSAodTE2ICopZWVwOworCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJSZWFkaW5nIGZyb20gRUVQUk9NLCBub3QgZmxhc2hcbiIpOworCX0KKworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzaXplb2Yoc3RydWN0IGFyOTI4N19lZXByb20pIC8gc2l6ZW9mKHUxNik7CisJCQlhZGRyKyspCXsKKwkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgZWVwX3N0YXJ0X2xvYywgZWVwX2RhdGEpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJIlVuYWJsZSB0byByZWFkIGVlcHJvbSByZWdpb24gXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQllZXBfZGF0YSsrOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBhdGg5a19od19BUjkyODdfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXUzMiBzdW0gPSAwLCBlbCwgaW50ZWdlcjsKKwl1MTYgdGVtcCwgd29yZCwgbWFnaWMsIG1hZ2ljMiwgKmVlcGRhdGE7CisJaW50IGksIGFkZHI7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqZWVwID0gJmFoLT5lZXByb20ubWFwOTI4NzsKKworCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgeworCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQKKwkJICAgIChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsICZtYWdpYykpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCQlpZiAobWFnaWMgIT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgeworCQkJbWFnaWMyID0gc3dhYjE2KG1hZ2ljKTsKKworCQkJaWYgKG1hZ2ljMiA9PSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CisJCQkJbmVlZF9zd2FwID0gdHJ1ZTsKKwkJCQllZXBkYXRhID0gKHUxNiAqKSgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOworCQkJCSAgICAgYWRkciA8IHNpemVvZihzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSkgLyBzaXplb2YodTE2KTsKKwkJCQkgICAgIGFkZHIrKykgeworCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKKwkJCQkJKmVlcGRhdGEgPSB0ZW1wOworCQkJCQllZXBkYXRhKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkJIkludmFsaWQgRUVQUk9NIE1hZ2ljLiAiCisJCQkJCSJlbmRpYW5uZXNzIG1pc21hdGNoLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLCBuZWVkX3N3YXAgPworCQkiVHJ1ZSIgOiAiRmFsc2UiKTsKKworCWlmIChuZWVkX3N3YXApCisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20ubWFwOTI4Ny5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKKworCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSkpCisJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjkyODdfZWVwcm9tKSAvIHNpemVvZih1MTYpOworCWVsc2UKKwkJZWwgPSBlbCAvIHNpemVvZih1MTYpOworCisJZWVwZGF0YSA9ICh1MTYgKikoJmFoLT5lZXByb20pOworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIuY2hlY2tzdW0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24pOworCQllZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQpOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmZTaWxlbnQgPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMpOworCQllZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCA9IHdvcmQ7CisKKwkJaW50ZWdlciA9IHN3YWIzMihlZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDb21tb24pOworCQllZXAtPm1vZGFsSGVhZGVyLmFudEN0cmxDb21tb24gPSBpbnRlZ2VyOworCisJCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKSB7CisJCQlpbnRlZ2VyID0gc3dhYjMyKGVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENoYWluW2ldKTsKKwkJCWVlcC0+bW9kYWxIZWFkZXIuYW50Q3RybENoYWluW2ldID0gaW50ZWdlcjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKKwkJCXdvcmQgPSBzd2FiMTYoZWVwLT5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pOworCQkJZWVwLT5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOworCQl9CisJfQorCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjkyODdfRUVQX1ZFUgorCSAgICB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAorCQkJIHN1bSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQoreworCXN0cnVjdCBhcjkyODdfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJc3RydWN0IGJhc2VfZWVwX2FyOTI4N19oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKKwl1MTYgdmVyX21pbm9yOworCisJdmVyX21pbm9yID0gcEJhc2UtPnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLOworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIEVFUF9ORlRIUkVTSF8yOgorCQlyZXR1cm4gcE1vZGFsLT5ub2lzZUZsb29yVGhyZXNoQ2hbMF07CisJY2FzZSBBUl9FRVBST01fTUFDKDApOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOworCWNhc2UgQVJfRUVQUk9NX01BQygxKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMik6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07CisJY2FzZSBFRVBfUkVHXzA6CisJCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOworCWNhc2UgRUVQX1JFR18xOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKKwljYXNlIEVFUF9PUF9DQVA6CisJCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOworCWNhc2UgRUVQX09QX01PREU6CisJCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKKwljYXNlIEVFUF9SRl9TSUxFTlQ6CisJCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7CisJY2FzZSBFRVBfTUlOT1JfUkVWOgorCQlyZXR1cm4gdmVyX21pbm9yOworCWNhc2UgRUVQX1RYX01BU0s6CisJCXJldHVybiBwQmFzZS0+dHhNYXNrOworCWNhc2UgRUVQX1JYX01BU0s6CisJCXJldHVybiBwQmFzZS0+cnhNYXNrOworCWNhc2UgRUVQX0RFVl9UWVBFOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZVR5cGU7CisJY2FzZSBFRVBfT0xfUFdSQ1RSTDoKKwkJcmV0dXJuIHBCYXNlLT5vcGVuTG9vcFB3ckNudGw7CisJY2FzZSBFRVBfVEVNUFNFTlNFX1NMT1BFOgorCQlpZiAodmVyX21pbm9yID49IEFSOTI4N19FRVBfTUlOT1JfVkVSXzIpCisJCQlyZXR1cm4gcEJhc2UtPnRlbXBTZW5zU2xvcGU7CisJCWVsc2UKKwkJCXJldHVybiAwOworCWNhc2UgRUVQX1RFTVBTRU5TRV9TTE9QRV9QQUxfT046CisJCWlmICh2ZXJfbWlub3IgPj0gQVI5Mjg3X0VFUF9NSU5PUl9WRVJfMykKKwkJCXJldHVybiBwQmFzZS0+dGVtcFNlbnNTbG9wZVBhbE9uOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X0FSOTI4N19nYWluX2JvdW5kYXJpZXNfcGRhZGNzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgIHN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV9hcjkyODcgKnBSYXdEYXRhU2V0LAorCQkJCSAgIHU4ICpiQ2hhbnMsICB1MTYgYXZhaWxQaWVycywKKwkJCQkgICB1MTYgdFBkR2Fpbk92ZXJsYXAsIGludDE2X3QgKnBNaW5DYWxQb3dlciwKKwkJCQkgICB1MTYgKnBQZEdhaW5Cb3VuZGFyaWVzLCB1OCAqcFBEQURDVmFsdWVzLAorCQkJCSAgIHUxNiBudW1YcGRHYWlucykKK3sKKyNkZWZpbmUgVE1QX1ZBTF9WUERfVEFCTEUgXAorCSgodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSArIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisKKwlpbnQgICAgICAgaSwgaiwgazsKKwlpbnQxNl90ICAgc3M7CisJdTE2ICBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCXU4ICAgKnBWcGRMLCAqcFZwZFIsICpwUHdyTCwgKnBQd3JSOworCXU4ICAgbWluUHdyVDRbQVI5Mjg3X05VTV9QRF9HQUlOU107CisJdTggICBtYXhQd3JUNFtBUjkyODdfTlVNX1BEX0dBSU5TXTsKKwlpbnQxNl90ICAgdnBkU3RlcDsKKwlpbnQxNl90ICAgdG1wVmFsOworCXUxNiAgc2l6ZUN1cnJWcGRUYWJsZSwgbWF4SW5kZXgsIHRndEluZGV4OworCWJvb2wgICAgbWF0Y2g7CisJaW50MTZfdCAgbWluRGVsdGEgPSAwOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlzdGF0aWMgdTggdnBkVGFibGVMW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVSW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKwlzdGF0aWMgdTggdnBkVGFibGVJW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdCisJCVtBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCXTsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspIHsKKwkJaWYgKGJDaGFuc1tudW1QaWVyc10gPT0gQVI5Mjg3X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCX0KKworCW1hdGNoID0gYXRoOWtfaHdfZ2V0X2xvd2VyX3VwcGVyX2luZGV4KAorCQkJCSAgICh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJICAgIElTX0NIQU5fMkdIWihjaGFuKSksIGJDaGFucywgbnVtUGllcnMsCisJCQkJICAgICZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsIHZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI5Mjg3X1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSOTI4N19QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCUFSOTI4N19QRF9HQUlOX0lDRVBUUywKKwkJCQkJdnBkVGFibGVMW2ldKTsKKwkJCWF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKG1pblB3clQ0W2ldLCBtYXhQd3JUNFtpXSwKKwkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQlBUjkyODdfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlUltpXSk7CisKKwkJCWZvciAoaiA9IDA7IGogPD0gKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMjsgaisrKSB7CisJCQkJdnBkVGFibGVJW2ldW2pdID0KKwkJCQkJKHU4KShhdGg5a19od19pbnRlcnBvbGF0ZSgodTE2KQorCQkJCQlGUkVRMkZCSU4oY2VudGVycy4gc3ludGhfY2VudGVyLAorCQkJCQlJU19DSEFOXzJHSFooY2hhbikpLAorCQkJCQliQ2hhbnNbaWR4TF0sIGJDaGFuc1tpZHhSXSwKKwkJCQkJdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKwkqcE1pbkNhbFBvd2VyID0gKGludDE2X3QpKG1pblB3clQ0WzBdIC8gMik7CisKKwlrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQlpZiAoaSA9PSAobnVtWHBkR2FpbnMgLSAxKSkKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPSAodTE2KSgobWF4UHdyVDRbaV0gKworCQkJCQkJICAgICAgbWluUHdyVDRbaSsxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IG1pbigodTE2KUFSNTQxNl9NQVhfUkFURV9QT1dFUiwKKwkJCQkJICAgIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCisJCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgeworCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOworCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKKwkJfSBlbHNlCisJCQltaW5EZWx0YSA9IDA7CisKKwkJaWYgKGkgPT0gMCkgeworCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCQkJc3MgPSAoaW50MTZfdCkoMCAtIChtaW5Qd3JUNFtpXSAvIDIpKTsKKwkJCWVsc2UKKwkJCQlzcyA9IDA7CisJCX0gZWxzZQorCQkJc3MgPSAoaW50MTZfdCkoKHBQZEdhaW5Cb3VuZGFyaWVzW2ktMV0gLQorCQkJCSAgICAgICAobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisKKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisJCXdoaWxlICgoc3MgPCAwKSAmJiAoayA8IChBUjkyODdfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkJeworCQkJdG1wVmFsID0gKGludDE2X3QpKHZwZFRhYmxlSVtpXVswXSArIHNzICogdnBkU3RlcCk7CisJCQlwUERBRENWYWx1ZXNbaysrXSA9ICh1OCkoKHRtcFZhbCA8IDApID8gMCA6IHRtcFZhbCk7CisJCQlzcysrOworCQl9CisKKwkJc2l6ZUN1cnJWcGRUYWJsZSA9ICh1OCkoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKworCQkJCXRQZEdhaW5PdmVybGFwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCSAgICB0Z3RJbmRleCA6IHNpemVDdXJyVnBkVGFibGU7CisKKwkJd2hpbGUgKChzcyA8IG1heEluZGV4KSAmJiAoayA8IChBUjkyODdfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gdnBkVGFibGVJW2ldW3NzKytdOworCisJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSAtCisJCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisJCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7CisJCQl3aGlsZSAoKHNzIDw9IHRndEluZGV4KSAmJgorCQkJCShrIDwgKEFSOTI4N19OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQkJdG1wVmFsID0gKGludDE2X3QpIFRNUF9WQUxfVlBEX1RBQkxFOworCQkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsID4gMjU1KSA/CisJCQkJCQkJICAyNTUgOiB0bXBWYWwpOworCQkJCXNzKys7CisJCQl9CisJCX0KKwl9CisKKwl3aGlsZSAoaSA8IEFSOTI4N19QRF9HQUlOU19JTl9NQVNLKSB7CisJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0gcFBkR2FpbkJvdW5kYXJpZXNbaS0xXTsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2stMV07CisJCWsrKzsKKwl9CisKKyN1bmRlZiBUTVBfVkFMX1ZQRF9UQUJMRQorfQorCitzdGF0aWMgdm9pZCBhcjkyODdfZWVwcm9tX2dldF90eF9nYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJICAgIHN0cnVjdCBjYWxfZGF0YV9vcF9sb29wX2FyOTI4NyAqcFJhd0RhdGFzZXRPcExvb3AsCisJCQkgICAgdTggKnBDYWxDaGFucywgIHUxNiBhdmFpbFBpZXJzLAorCQkJICAgIGludDhfdCAqcFB3cikKK3sKKwl1MTYgIGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7CisJYm9vbCBtYXRjaDsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7CisJCWlmIChwQ2FsQ2hhbnNbbnVtUGllcnNdID09IEFSOTI4N19CQ0hBTl9VTlVTRUQpCisJCQlicmVhazsKKwl9CisKKwltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgKKwkJCSh1OClGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsIElTX0NIQU5fMkdIWihjaGFuKSksCisJCQlwQ2FsQ2hhbnMsIG51bVBpZXJzLAorCQkJJmlkeEwsICZpZHhSKTsKKworCWlmIChtYXRjaCkgeworCQkqcFB3ciA9IChpbnQ4X3QpIHBSYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQkqcFB3ciA9ICgoaW50OF90KSBwUmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJICAgIChpbnQ4X3QpIHBSYXdEYXRhc2V0T3BMb29wW2lkeFJdLnB3clBkZ1swXVswXSkvMjsKKwl9CisKK30KKworc3RhdGljIHZvaWQgYXI5Mjg3X2VlcHJvbV9vbHBjX3NldF9wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSAgaW50MzJfdCB0eFBvd2VyLCB1MTYgY2hhaW4pCit7CisJdTMyIHRtcFZhbDsKKwl1MzIgYTsKKworCXRtcFZhbCA9IFJFR19SRUFEKGFoLCAweGEyNzApOworCXRtcFZhbCA9IHRtcFZhbCAmIDB4RkNGRkZGRkY7CisJdG1wVmFsID0gdG1wVmFsIHwgKDB4MyA8PCAyNCk7CisJUkVHX1dSSVRFKGFoLCAweGEyNzAsIHRtcFZhbCk7CisKKwl0bXBWYWwgPSBSRUdfUkVBRChhaCwgMHhiMjcwKTsKKwl0bXBWYWwgPSB0bXBWYWwgJiAweEZDRkZGRkZGOworCXRtcFZhbCA9IHRtcFZhbCB8ICgweDMgPDwgMjQpOworCVJFR19XUklURShhaCwgMHhiMjcwLCB0bXBWYWwpOworCisJaWYgKGNoYWluID09IDApIHsKKwkJdG1wVmFsID0gUkVHX1JFQUQoYWgsIDB4YTM5OCk7CisJCXRtcFZhbCA9IHRtcFZhbCAmIDB4ZmYwMGZmZmY7CisJCWEgPSAodHhQb3dlcikmMHhmZjsKKwkJdG1wVmFsID0gdG1wVmFsIHwgKGEgPDwgMTYpOworCQlSRUdfV1JJVEUoYWgsIDB4YTM5OCwgdG1wVmFsKTsKKwl9CisKKwlpZiAoY2hhaW4gPT0gMSkgeworCQl0bXBWYWwgPSBSRUdfUkVBRChhaCwgMHhiMzk4KTsKKwkJdG1wVmFsID0gdG1wVmFsICYgMHhmZjAwZmZmZjsKKwkJYSA9ICh0eFBvd2VyKSYweGZmOworCQl0bXBWYWwgPSB0bXBWYWwgfCAoYSA8PCAxNik7CisJCVJFR19XUklURShhaCwgMHhiMzk4LCB0bXBWYWwpOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkJCWludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCit7CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxX2FyOTI4NyAqcFJhd0RhdGFzZXQ7CisJc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICpwUmF3RGF0YXNldE9wZW5Mb29wOworCXU4ICAqcENhbEJDaGFucyA9IE5VTEw7CisJdTE2IHBkR2Fpbk92ZXJsYXBfdDI7CisJdTggIHBkYWRjVmFsdWVzW0FSOTI4N19OVU1fUERBRENfVkFMVUVTXTsKKwl1MTYgZ2FpbkJvdW5kYXJpZXNbQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0tdOworCXUxNiBudW1QaWVycyA9IDAsIGksIGo7CisJaW50MTZfdCAgdE1pbkNhbFBvd2VyOworCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOworCXUxNiB4cGRHYWluVmFsdWVzW0FSOTI4N19OVU1fUERfR0FJTlNdID0gezAsIDAsIDAsIDB9OworCXUzMiByZWczMiwgcmVnT2Zmc2V0LCByZWdDaGFpbk9mZnNldDsKKwlpbnQxNl90ICAgbW9kYWxJZHgsIGRpZmYgPSAwOworCXN0cnVjdCBhcjkyODdfZWVwcm9tICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CisJbW9kYWxJZHggPSBJU19DSEFOXzJHSFooY2hhbikgPyAxIDogMDsKKwl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI5Mjg3X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkJCUFSOTI4N19FRVBfTUlOT1JfVkVSXzIpCisJCXBkR2Fpbk92ZXJsYXBfdDIgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXIucGRHYWluT3ZlcmxhcDsKKwllbHNlCisJCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCisJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlwQ2FsQkNoYW5zID0gcEVlcERhdGEtPmNhbEZyZXFQaWVyMkc7CisJCW51bVBpZXJzID0gQVI5Mjg3X05VTV8yR19DQUxfUElFUlM7CisJCWlmIChhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbShhaCwgRUVQX09MX1BXUkNUUkwpKSB7CisJCQlwUmF3RGF0YXNldE9wZW5Mb29wID0KKwkJCQkoc3RydWN0IGNhbF9kYXRhX29wX2xvb3BfYXI5Mjg3ICopCisJCQkJcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCQlhaC0+aW5pdFBEQURDID0gcFJhd0RhdGFzZXRPcGVuTG9vcC0+dnBkUGRnWzBdWzBdOworCQl9CisJfQorCisJbnVtWHBkR2FpbiA9IDA7CisJZm9yIChpID0gMTsgaSA8PSBBUjkyODdfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7CisJCWlmICgoeHBkTWFzayA+PiAoQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0sgLSBpKSkgJiAxKSB7CisJCQlpZiAobnVtWHBkR2FpbiA+PSBBUjkyODdfTlVNX1BEX0dBSU5TKQorCQkJCWJyZWFrOworCQkJeHBkR2FpblZhbHVlc1tudW1YcGRHYWluXSA9CisJCQkJKHUxNikoQVI5Mjg3X1BEX0dBSU5TX0lOX01BU0staSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAorCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKQl7CisJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlwUmF3RGF0YXNldE9wZW5Mb29wID0gKHN0cnVjdCBjYWxfZGF0YV9vcF9sb29wX2FyOTI4NyAqKQorCQkJCQkgICAgICAgcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07CisJCQlpZiAoYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb20oYWgsIEVFUF9PTF9QV1JDVFJMKSkgeworCQkJCWludDhfdCB0eFBvd2VyOworCQkJCWFyOTI4N19lZXByb21fZ2V0X3R4X2dhaW5faW5kZXgoYWgsIGNoYW4sCisJCQkJCQkJICBwUmF3RGF0YXNldE9wZW5Mb29wLAorCQkJCQkJCSAgcENhbEJDaGFucywgbnVtUGllcnMsCisJCQkJCQkJICAmdHhQb3dlcik7CisJCQkJYXI5Mjg3X2VlcHJvbV9vbHBjX3NldF9wZGFkY3MoYWgsIHR4UG93ZXIsIGkpOworCQkJfSBlbHNlIHsKKwkJCQlwUmF3RGF0YXNldCA9CisJCQkJCShzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfYXI5Mjg3ICopCisJCQkJCXBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOworCQkJCWF0aDlrX2h3X2dldF9BUjkyODdfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcygKKwkJCQkJCSAgYWgsIGNoYW4sIHBSYXdEYXRhc2V0LAorCQkJCQkJICBwQ2FsQkNoYW5zLCBudW1QaWVycywKKwkJCQkJCSAgcGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCSAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKKwkJCX0KKworCQkJaWYgKGkgPT0gMCkgeworCQkJCWlmICghYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb20oCisJCQkJCSAgICBhaCwgRUVQX09MX1BXUkNUUkwpKSB7CisJCQkJCVJFR19XUklURShhaCwgQVJfUEhZX1RQQ1JHNSArCisJCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCSAgU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkgfAorCQkJCQkgIFNNKGdhaW5Cb3VuZGFyaWVzWzBdLAorCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMV0sCisJCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMikKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAorCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpCisJCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1szXSwKKwkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoKGludDMyX3QpQVI5Mjg3X1BXUl9UQUJMRV9PRkZTRVRfREIgIT0KKwkJCQkgICAgIHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnB3clRhYmxlT2Zmc2V0KSB7CisJCQkJZGlmZiA9ICh1MTYpCisJCQkJICAgICAgIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci5wd3JUYWJsZU9mZnNldAorCQkJCQktIChpbnQzMl90KUFSOTI4N19QV1JfVEFCTEVfT0ZGU0VUX0RCKTsKKwkJCQlkaWZmICo9IDI7CisKKwkJCQlmb3IgKGogPSAwOworCQkJCSAgICAgaiA8ICgodTE2KUFSOTI4N19OVU1fUERBRENfVkFMVUVTLWRpZmYpOworCQkJCSAgICAgaisrKQorCQkJCQlwZGFkY1ZhbHVlc1tqXSA9IHBkYWRjVmFsdWVzW2orZGlmZl07CisKKwkJCQlmb3IgKGogPSAodTE2KShBUjkyODdfTlVNX1BEQURDX1ZBTFVFUy1kaWZmKTsKKwkJCQkgICAgIGogPCBBUjkyODdfTlVNX1BEQURDX1ZBTFVFUzsgaisrKQorCQkJCQlwZGFkY1ZhbHVlc1tqXSA9CisJCQkJCSAgcGRhZGNWYWx1ZXNbCisJCQkJCSAgQVI5Mjg3X05VTV9QREFEQ19WQUxVRVMtZGlmZl07CisJCQl9CisKKwkJCWlmICghYXRoOWtfaHdfQVI5Mjg3X2dldF9lZXByb20oYWgsIEVFUF9PTF9QV1JDVFJMKSkgeworCQkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArCisJCQkJCQkJICAgcmVnQ2hhaW5PZmZzZXQ7CisJCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQkJcmVnMzIgPSAoKHBkYWRjVmFsdWVzWzQqaiArIDBdCisJCQkJCQkgICYgMHhGRikgPDwgMCkgIHwKKwkJCQkJCSgocGRhZGNWYWx1ZXNbNCpqICsgMV0KKwkJCQkJCSAgJiAweEZGKSA8PCA4KSAgfAorCQkJCQkJKChwZGFkY1ZhbHVlc1s0KmogKyAyXQorCQkJCQkJICAmIDB4RkYpIDw8IDE2KSB8CisJCQkJCQkoKHBkYWRjVmFsdWVzWzQqaiArIDNdCisJCQkJCQkgICYgMHhGRikgPDwgMjQpIDsKKwkJCQkJUkVHX1dSSVRFKGFoLCByZWdPZmZzZXQsIHJlZzMyKTsKKworCQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQkJaSwgcmVnQ2hhaW5PZmZzZXQsIHJlZ09mZnNldCwKKwkJCQkJCXJlZzMyKTsKKworCQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJCQkiUERBREM6IENoYWluICVkIHwgIgorCQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfFxuIiwKKwkJCQkJCWksIDQgKiBqLCBwZGFkY1ZhbHVlc1s0ICogal0sCisJCQkJCQk0ICogaiArIDEsCisJCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDFdLAorCQkJCQkJNCAqIGogKyAyLAorCQkJCQkJcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJCTQgKiBqICsgMywKKwkJCQkJCXBkYWRjVmFsdWVzWzQgKiBqICsgM10pOworCisJCQkJCXJlZ09mZnNldCArPSA0OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIGludDE2X3QgKnJhdGVzQXJyYXksIHUxNiBjZmdDdGwsCisJCXUxNiBBbnRlbm5hUmVkdWN0aW9uLCB1MTYgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCXUxNiBwb3dlckxpbWl0KQoreworI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RXT19DSEFJTiAgICAgNgorI2RlZmluZSBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOICAgMTAKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQorCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OworCWludCBpOworCWludDE2X3QgIHR3aWNlTGFyZ2VzdEFudGVubmE7CisJc3RydWN0IGNhbF9jdGxfZGF0YV9hcjkyODcgKnJlcDsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtID0gezAsIHswLCAwLCAwLCAwfSB9LAorCQkJCSAgICB0YXJnZXRQb3dlckNjayA9IHswLCB7MCwgMCwgMCwgMH0gfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0gezAsIHswLCAwLCAwLCAwfSB9LAorCQkJCSAgICB0YXJnZXRQb3dlckNja0V4dCA9IHswLCB7MCwgMCwgMCwgMH0gfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAgdGFyZ2V0UG93ZXJIdDIwLAorCQkJCSAgICB0YXJnZXRQb3dlckh0NDAgPSB7MCwgezAsIDAsIDAsIDB9IH07CisJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKKwl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9CisJCXtDVExfMTFCLCBDVExfMTFHLCBDVExfMkdIVDIwLAorCQkgQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULCBDVExfMkdIVDQwfTsKKwl1MTYgbnVtQ3RsTW9kZXMgPSAwLCAqcEN0bE1vZGUgPSBOVUxMLCBjdGxNb2RlLCBmcmVxOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwlpbnQgdHhfY2hhaW5tYXNrOworCXUxNiB0d2ljZU1pbkVkZ2VQb3dlcjsKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBtYXgocEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF0sCisJCQkJICBwRWVwRGF0YS0+bW9kYWxIZWFkZXIuYW50ZW5uYUdhaW5DaFsxXSk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gIChpbnQxNl90KW1pbigoQW50ZW5uYVJlZHVjdGlvbikgLQorCQkJCQkgICAgdHdpY2VMYXJnZXN0QW50ZW5uYSwgMCk7CisKKwltYXhSZWdBbGxvd2VkUG93ZXIgPSB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciArIHR3aWNlTGFyZ2VzdEFudGVubmE7CisJaWYgKHJlZ3VsYXRvcnktPnRwX3NjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkKKwkJbWF4UmVnQWxsb3dlZFBvd2VyIC09CisJCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhyZWd1bGF0b3J5LT50cF9zY2FsZSldICogMik7CisKKwlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOworCisJc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyh0eF9jaGFpbm1hc2spKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQlicmVhazsKKwljYXNlIDM6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWJyZWFrOworCX0KKwlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpCXsKKwkJbnVtQ3RsTW9kZXMgPQorCQkJQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZykgLSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MDsKKwkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExZzsKKworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJCQkgIHBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCQkJCSAgQVI5Mjg3X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCQkJCSAgJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7CisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQkJCSAgcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQkJCQkgIEFSOTI4N19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCQkJCSAgJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOworCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQkJICAgcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAorCQkJCQkgICBBUjkyODdfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkJCSAgICZ0YXJnZXRQb3dlckh0MjAsIDgsIGZhbHNlKTsKKworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQl7CisJCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpOworCQkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJCQkgICBwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCisJCQkJCQkgICBBUjkyODdfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJCQkgICAmdGFyZ2V0UG93ZXJIdDQwLCA4LCB0cnVlKTsKKwkJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQkJCSAgcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJCQkJICBBUjkyODdfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAorCQkJCQkJICAmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOworCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCQkJICBwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyRywKKwkJCQkJCSAgQVI5Mjg3X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCQkJICAmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKKwkJfQorCX0KKworCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7CisJCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAorCQkJCSAgICAgKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOworCQlpZiAoaXNIdDQwQ3RsTW9kZSkKKwkJCWZyZXEgPSBjZW50ZXJzLnN5bnRoX2NlbnRlcjsKKwkJZWxzZSBpZiAocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpCisJCQlmcmVxID0gY2VudGVycy5leHRfY2VudGVyOworCQllbHNlCisJCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOworCisJCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpID09IDE0ICYmCisJCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDw9IDIpCisJCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKworCQlmb3IgKGkgPSAwOyAoaSA8IEFSOTI4N19OVU1fQ1RMUykgJiYgcEVlcERhdGEtPmN0bEluZGV4W2ldOyBpKyspIHsKKwkJCWlmICgoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgIHBFZXBEYXRhLT5jdGxJbmRleFtpXSkgfHwKKwkJCSAgICAoKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgfAorCQkJICAgICAgKHBDdGxNb2RlW2N0bE1vZGVdICYgQ1RMX01PREVfTSkpID09CisJCQkgICAgICgocEVlcERhdGEtPmN0bEluZGV4W2ldICYKKwkJCSAgICAgICBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpKSB7CisKKwkJCQlyZXAgPSAmKHBFZXBEYXRhLT5jdGxEYXRhW2ldKTsKKwkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcigKKwkJCQkgICAgZnJlcSwKKwkJCQkgICAgcmVwLT5jdGxFZGdlc1thcjU0MTZfZ2V0X250eGNoYWlucygKKwkJCQkgICAgdHhfY2hhaW5tYXNrKSAtIDFdLAorCQkJCSAgICBJU19DSEFOXzJHSFooY2hhbiksIEFSNTQxNl9OVU1fQkFORF9FREdFUyk7CisKKwkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpCisJCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gbWluKAorCQkJCQkJCSAgICB0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQkJCQkgICAgdHdpY2VNaW5FZGdlUG93ZXIpOworCQkJCWVsc2UgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQltaW5DdGxQb3dlciA9ICh1OCltaW4odHdpY2VNYXhFZGdlUG93ZXIsIHNjYWxlZFBvd2VyKTsKKworCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CisJCWNhc2UgQ1RMXzExQjoKKwkJCWZvciAoaSA9IDA7CisJCQkgICAgIGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7CisJCQkgICAgIGkrKykgeworCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9ICh1OCltaW4oCisJCQkJCSh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFBOgorCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsKKwkJCSAgICAgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9ICh1OCltaW4oCisJCQkJCSh1MTYpdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSwKKwkJCQkJbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzVHSFQyMDoKKwkJY2FzZSBDVExfMkdIVDIwOgorCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7CisJCQkgICAgIGkrKykgeworCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPSAodTgpbWluKAorCQkJCQkodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUJfRVhUOgorCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdID0gKHU4KW1pbigKKwkJCQkgICAgKHUxNil0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCisJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUFfRVhUOgorCQljYXNlIENUTF8xMUdfRVhUOgorCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9ICh1OCltaW4oCisJCQkJICAgICh1MTYpdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKKwkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzVHSFQ0MDoKKwkJY2FzZSBDVExfMkdIVDQwOgorCQkJZm9yIChpID0gMDsKKwkJCSAgICAgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7CisJCQkgICAgIGkrKykgeworCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPSAodTgpbWluKAorCQkJCQkodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyYXRlc0FycmF5W3JhdGU2bWJdID0KKwlyYXRlc0FycmF5W3JhdGU5bWJdID0KKwlyYXRlc0FycmF5W3JhdGUxMm1iXSA9CisJcmF0ZXNBcnJheVtyYXRlMThtYl0gPQorCXJhdGVzQXJyYXlbcmF0ZTI0bWJdID0KKwl0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCisJcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOworCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKKwlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107CisJcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCisJCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpCXsKKwkJcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPQorCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzFdOworCQlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKKwkJcmF0ZXNBcnJheVtyYXRlMTFzXSA9IHJhdGVzQXJyYXlbcmF0ZTExbF0gPQorCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOworCX0KKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQl7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOyBpKyspCisJCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07CisKKwkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdICA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dID0gdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXTsKKwkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkKKwkJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPSB0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07CisJfQorCisjdW5kZWYgUkVEVUNFX1NDQUxFRF9QT1dFUl9CWV9UV09fQ0hBSU4KKyN1bmRlZiBSRURVQ0VfU0NBTEVEX1BPV0VSX0JZX1RIUkVFX0NIQUlOCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sIHUxNiBjZmdDdGwsCisJCQkJCXU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkJdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCQkJCXU4IHBvd2VyTGltaXQpCit7CisjZGVmaW5lIElOQ1JFQVNFX01BWFBPV19CWV9UV09fQ0hBSU4gICAgIDYKKyNkZWZpbmUgSU5DUkVBU0VfTUFYUE9XX0JZX1RIUkVFX0NIQUlOICAgMTAKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI5Mjg3X2VlcHJvbSAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgIHR4UG93ZXJJbmRleE9mZnNldCA9IDA7CisJdTggaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSAyOworCWludCBpOworCisJbWVtc2V0KHJhdGVzQXJyYXksIDAsIHNpemVvZihyYXRlc0FycmF5KSk7CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjkyODdfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjkyODdfRUVQX01JTk9SX1ZFUl8yKQorCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisKKwlhdGg5a19od19zZXRfQVI5Mjg3X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAorCQkJCQkJICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCisJCQkJCQkgdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCQkJIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkJIHBvd2VyTGltaXQpOworCisJYXRoOWtfaHdfc2V0X0FSOTI4N19wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0gKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSOTI4N19NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjkyODdfTUFYX1JBVEVfUE9XRVI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFyNTQxNlJhdGVTaXplOyBpKyspCisJCQlyYXRlc0FycmF5W2ldIC09IEFSOTI4N19QV1JfVEFCTEVfT0ZGU0VUX0RCICogMjsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUyLAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1NG1iXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNDhtYl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTM2bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTI0bWJdLCAwKSk7CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQl7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMnNdLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxbF0sIDApKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMXNdLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVsXSwgMCkpOworCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCXsKKwkJaWYgKGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfM10sIDI0KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSwgMTYpCisJCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzFdLCA4KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSwgMCkpOworCisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKKwkJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddLCAyNCkKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0sIDE2KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSwgOCkKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNF0sIDApKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfM10gKworCQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCisJCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCisJCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzBdICsKKwkJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKKwkJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKKwkJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKworCQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNV0gKworCQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQorCQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCisJCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKwkJfQorCisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRDY2tdLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0sIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwl9CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQlpID0gcmF0ZTFsOworCWVsc2UKKwkJaSA9IHJhdGU2bWI7CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0KKwkJCXJhdGVzQXJyYXlbaV0gKyBBUjkyODdfUFdSX1RBQkxFX09GRlNFVF9EQiAqIDI7CisJZWxzZQorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOworCisJc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyhhaC0+dHhjaGFpbm1hc2spKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbCArPQorCQkJSU5DUkVBU0VfTUFYUE9XX0JZX1RXT19DSEFJTjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgKz0KKwkJCUlOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIkludmFsaWQgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X0FSOTI4N19zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBhcjkyODdfZWVwcm9tICplZXAgPSAmYWgtPmVlcHJvbS5tYXA5Mjg3OworCXN0cnVjdCBtb2RhbF9lZXBfYXI5Mjg3X2hlYWRlciAqcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJdTE2IGFudFdyaXRlc1tBUjkyODdfQU5UXzE2U107CisJdTMyIHJlZ0NoYWluT2Zmc2V0OworCXU4IHR4UnhBdHRlbkxvY2FsOworCWludCBpLCBqLCBvZmZzZXRfbnVtOworCisJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisKKwlhbnRXcml0ZXNbMF0gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDI4KSAmIDB4Rik7CisJYW50V3JpdGVzWzFdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAyNCkgJiAweEYpOworCWFudFdyaXRlc1syXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gMjApICYgMHhGKTsKKwlhbnRXcml0ZXNbM10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ29tbW9uID4+IDE2KSAmIDB4Rik7CisJYW50V3JpdGVzWzRdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENvbW1vbiA+PiAxMikgJiAweEYpOworCWFudFdyaXRlc1s1XSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gOCkgJiAweEYpOworCWFudFdyaXRlc1s2XSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDb21tb24gPj4gNCkgICYgMHhGKTsKKwlhbnRXcml0ZXNbN10gPSAodTE2KShwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEYpOworCisJb2Zmc2V0X251bSA9IDg7CisKKwlmb3IgKGkgPSAwLCBqID0gb2Zmc2V0X251bTsgaSA8IEFSOTI4N19NQVhfQ0hBSU5TOyBpKyspIHsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gMjgpICYgMHhmKTsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gMTApICYgMHgzKTsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gOCkgJiAweDMpOworCQlhbnRXcml0ZXNbaisrXSA9IDA7CisJCWFudFdyaXRlc1tqKytdID0gKHUxNikoKHBNb2RhbC0+YW50Q3RybENoYWluW2ldID4+IDYpICYgMHgzKTsKKwkJYW50V3JpdGVzW2orK10gPSAodTE2KSgocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPj4gNCkgJiAweDMpOworCQlhbnRXcml0ZXNbaisrXSA9ICh1MTYpKChwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA+PiAyKSAmIDB4Myk7CisJCWFudFdyaXRlc1tqKytdID0gKHUxNikocE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gJiAweDMpOworCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkyODdfTUFYX0NIQUlOUzsgaSsrKQl7CisJCXJlZ0NoYWluT2Zmc2V0ID0gaSAqIDB4MTAwMDsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICBwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7CisKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KQorCQkJICAgJiB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKKwkJCSAgICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCQl0eFJ4QXR0ZW5Mb2NhbCA9IHBNb2RhbC0+dHhSeEF0dGVuQ2hbaV07CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3TWFyZ2luW2ldKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLAorCQkJICAgICAgcE1vZGFsLT5ic3dBdHRlbltpXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sCisJCQkgICAgICB0eFJ4QXR0ZW5Mb2NhbCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0pOworCX0KKworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwgcE1vZGFsLT5zd1NldHRsZUh0NDApOworCWVsc2UKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJICAgICAgQVJfUEhZX1NFVFRMSU5HX1NXSVRDSCwgcE1vZGFsLT5zd2l0Y2hTZXR0bGluZyk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKKwkJICAgICAgQVJfUEhZX0RFU0lSRURfU1pfQURDLCBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pCisJCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLCBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywKKwkJICAgICAgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwgcE1vZGFsLT50eEVuZFRvUnhPbik7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLAorCQkgICAgICBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwgcE1vZGFsLT50aHJlc2g2Mik7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLAorCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsIHBNb2RhbC0+dGhyZXNoNjIpOworCisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCwgQVI5Mjg3X0FOX1JGMkczX0RCMSwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19EQjFfUywgcE1vZGFsLT5kYjEpOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDAsIEFSOTI4N19BTl9SRjJHM19EQjIsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfREIyX1MsIHBNb2RhbC0+ZGIyKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gwLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX0NDSywKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9DQ0tfUywgcE1vZGFsLT5vYl9jY2spOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDAsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUFNLLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1BTS19TLCBwTW9kYWwtPm9iX3Bzayk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMCwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9RQU0sCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUUFNX1MsIHBNb2RhbC0+b2JfcWFtKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gwLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1BBTF9PRkYsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRl9TLAorCQkJCSAgcE1vZGFsLT5vYl9wYWxfb2ZmKTsKKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfREIxLCBBUjkyODdfQU5fUkYyRzNfREIxX1MsCisJCQkJICBwTW9kYWwtPmRiMSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMSwgQVI5Mjg3X0FOX1JGMkczX0RCMiwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19EQjJfUywgcE1vZGFsLT5kYjIpOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfQ0NLLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX0NDS19TLCBwTW9kYWwtPm9iX2Njayk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1JGMkczX0NIMSwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9QU0ssCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUFNLX1MsIHBNb2RhbC0+b2JfcHNrKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODdfQU5fUkYyRzNfQ0gxLAorCQkJCSAgQVI5Mjg3X0FOX1JGMkczX09CX1FBTSwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9RQU1fUywgcE1vZGFsLT5vYl9xYW0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4N19BTl9SRjJHM19DSDEsCisJCQkJICBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRiwKKwkJCQkgIEFSOTI4N19BTl9SRjJHM19PQl9QQUxfT0ZGX1MsCisJCQkJICBwTW9kYWwtPm9iX3BhbF9vZmYpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCisJCSAgICAgIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwgcE1vZGFsLT50eEZyYW1lVG9EYXRhU3RhcnQpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLAorCQkgICAgICBBUl9QSFlfVFhfRU5EX1BBX09OLCBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1RPUDIsCisJCQkJICBBUjkyODdfQU5fVE9QMl9YUEFCSUFTX0xWTCwKKwkJCQkgIEFSOTI4N19BTl9UT1AyX1hQQUJJQVNfTFZMX1MsCisJCQkJICBwTW9kYWwtPnhwYUJpYXNMdmwpOworfQorCitzdGF0aWMgdTggYXRoOWtfaHdfQVI5Mjg3X2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHUxNiBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyOTI4N19lZXByb20gKmVlcCA9ICZhaC0+ZWVwcm9tLm1hcDkyODc7CisJc3RydWN0IG1vZGFsX2VlcF9hcjkyODdfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfQVI5Mjg3X2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSAgICB1MTYgaSwgYm9vbCBpczJHSHopCit7CisjZGVmaW5lIEVFUF9NQVA5Mjg3X1NQVVJDSEFOIFwKKwkoYWgtPmVlcHJvbS5tYXA5Mjg3Lm1vZGFsSGVhZGVyLnNwdXJDaGFuc1tpXS5zcHVyQ2hhbikKKwl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOworCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKKwkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKKworCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgeworCWNhc2UgU1BVUl9ESVNBQkxFOgorCQlicmVhazsKKwljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgorCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJICAgICAgICJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006CisJCXNwdXJfdmFsID0gRUVQX01BUDkyODdfU1BVUkNIQU47CisJCWJyZWFrOworCX0KKworCXJldHVybiBzcHVyX3ZhbDsKKworI3VuZGVmIEVFUF9NQVA5Mjg3X1NQVVJDSEFOCit9CisKK2NvbnN0IHN0cnVjdCBlZXByb21fb3BzIGVlcF9BUjkyODdfb3BzID0geworCS5jaGVja19lZXByb20JCT0gYXRoOWtfaHdfQVI5Mjg3X2NoZWNrX2VlcHJvbSwKKwkuZ2V0X2VlcHJvbQkJPSBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbSwKKwkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfQVI5Mjg3X2ZpbGxfZWVwcm9tLAorCS5nZXRfZWVwcm9tX3ZlcgkJPSBhdGg5a19od19BUjkyODdfZ2V0X2VlcHJvbV92ZXIsCisJLmdldF9lZXByb21fcmV2CQk9IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX3JldiwKKwkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfQVI5Mjg3X2dldF9udW1fYW50X2NvbmZpZywKKwkuZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZwk9IGF0aDlrX2h3X0FSOTI4N19nZXRfZWVwcm9tX2FudGVubmFfY2ZnLAorCS5zZXRfYm9hcmRfdmFsdWVzCT0gYXRoOWtfaHdfQVI5Mjg3X3NldF9ib2FyZF92YWx1ZXMsCisJLnNldF9hZGRhYwkJPSBhdGg5a19od19BUjkyODdfc2V0X2FkZGFjLAorCS5zZXRfdHhwb3dlcgkJPSBhdGg5a19od19BUjkyODdfc2V0X3R4cG93ZXIsCisJLmdldF9zcHVyX2NoYW5uZWwJPSBhdGg5a19od19BUjkyODdfZ2V0X3NwdXJfY2hhbm5lbAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlN2ZiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCkBAIC0wLDAgKzEsMTM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAorCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQoreworCXU4IHBjZGFjLCBpID0gMDsKKwl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwLCBudW1QaWVyczsKKwlib29sIG1hdGNoOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCisJCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAorCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOworCWlmIChtYXRjaCkgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOworCX0KKworCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKKwkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQorCQlpKys7CisKKwkqcGNkYWNJZHggPSBpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfb2xjX2dldF9wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCisJCQkJdTMyIGluaXRUeEdhaW4sCisJCQkJaW50IHR4UG93ZXIsCisJCQkJdTggKnBQREFEQ1ZhbHVlcykKK3sKKwl1MzIgaTsKKwl1MzIgb2Zmc2V0OworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7CisKKwlvZmZzZXQgPSB0eFBvd2VyOworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQorCQlpZiAoaSA8IG9mZnNldCkKKwkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKKwkJZWxzZQorCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKK30KKworc3RhdGljIGludCBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV92ZXIoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4Rik7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbikgJiAweEZGRik7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKyNkZWZpbmUgU0laRV9FRVBST01fREVGIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpKQorCXUxNiAqZWVwX2RhdGEgPSAodTE2ICopJmFoLT5lZXByb20uZGVmOworCWludCBhZGRyLCBhcjU0MTZfZWVwX3N0YXJ0X2xvYyA9IDB4MTAwOworCisJZm9yIChhZGRyID0gMDsgYWRkciA8IFNJWkVfRUVQUk9NX0RFRjsgYWRkcisrKSB7CisJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgYWRkciArIGFyNTQxNl9lZXBfc3RhcnRfbG9jLAorCQkJCQkgZWVwX2RhdGEpKSB7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiVW5hYmxlIHRvIHJlYWQgZWVwcm9tIHJlZ2lvblxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZWVwX2RhdGErKzsKKwl9CisJcmV0dXJuIHRydWU7CisjdW5kZWYgU0laRV9FRVBST01fREVGCit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX2NoZWNrX2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9CisJCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKikgJmFoLT5lZXByb20uZGVmOworCXUxNiAqZWVwZGF0YSwgdGVtcCwgbWFnaWMsIG1hZ2ljMjsKKwl1MzIgc3VtID0gMCwgZWw7CisJYm9vbCBuZWVkX3N3YXAgPSBmYWxzZTsKKwlpbnQgaSwgYWRkciwgc2l6ZTsKKworCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgQVI1NDE2X0VFUFJPTV9NQUdJQ19PRkZTRVQsICZtYWdpYykpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsICJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOworCisJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CisJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOworCisJCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZik7CisJCQkJbmVlZF9zd2FwID0gdHJ1ZTsKKwkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFoLT5lZXByb20pOworCisJCQkJZm9yIChhZGRyID0gMDsgYWRkciA8IHNpemUgLyBzaXplb2YodTE2KTsgYWRkcisrKSB7CisJCQkJCXRlbXAgPSBzd2FiMTYoKmVlcGRhdGEpOworCQkJCQkqZWVwZGF0YSA9IHRlbXA7CisJCQkJCWVlcGRhdGErKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJCQkiSW52YWxpZCBFRVBST00gTWFnaWMuICIKKwkJCQkJIkVuZGlhbm5lc3MgbWlzbWF0Y2guXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwgIm5lZWRfc3dhcCA9ICVzLlxuIiwKKwkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CisKKwlpZiAobmVlZF9zd2FwKQorCQllbCA9IHN3YWIxNihhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJZWxzZQorCQllbCA9IGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIubGVuZ3RoOworCisJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCisJCWVsID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikgLyBzaXplb2YodTE2KTsKKwllbHNlCisJCWVsID0gZWwgLyBzaXplb2YodTE2KTsKKworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKKworCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQorCQlzdW0gXj0gKmVlcGRhdGErKzsKKworCWlmIChuZWVkX3N3YXApIHsKKwkJdTMyIGludGVnZXIsIGo7CisJCXUxNiB3b3JkOworCisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJFRVBST00gRW5kaWFubmVzcyBpcyBub3QgbmF0aXZlLi4gQ2hhbmdpbmcuXG4iKTsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOworCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5jaGVja3N1bSA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbik7CisJCWVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzBdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0pOworCQllZXAtPmJhc2VFZXBIZWFkZXIucmVnRG1uWzFdID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZlNpbGVudCA9IHdvcmQ7CisKKwkJd29yZCA9IHN3YWIxNihlZXAtPmJhc2VFZXBIZWFkZXIuYmx1ZVRvb3RoT3B0aW9ucyk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXApOworCQllZXAtPmJhc2VFZXBIZWFkZXIuZGV2aWNlQ2FwID0gd29yZDsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShlZXAtPm1vZGFsSGVhZGVyKTsgaisrKSB7CisJCQlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0KKwkJCQkmZWVwLT5tb2RhbEhlYWRlcltqXTsKKwkJCWludGVnZXIgPSBzd2FiMzIocE1vZGFsLT5hbnRDdHJsQ29tbW9uKTsKKwkJCXBNb2RhbC0+YW50Q3RybENvbW1vbiA9IGludGVnZXI7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDaGFpbltpXSk7CisJCQkJcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0gPSBpbnRlZ2VyOworCQkJfQorCisJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7CisJCQkJd29yZCA9IHN3YWIxNihwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbik7CisJCQkJcE1vZGFsLT5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4gPSB3b3JkOworCQkJfQorCQl9CisJfQorCisJaWYgKHN1bSAhPSAweGZmZmYgfHwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAorCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUikgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKKwkJCSJCYWQgRUVQUk9NIGNoZWNrc3VtIDB4JXggb3IgcmV2aXNpb24gMHglMDR4XG4iLAorCQkJc3VtLCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgYXRoOWtfaHdfZGVmX2dldF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9IGVlcC0+bW9kYWxIZWFkZXI7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgRUVQX05GVEhSRVNIXzU6CisJCXJldHVybiBwTW9kYWxbMF0ubm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgRUVQX05GVEhSRVNIXzI6CisJCXJldHVybiBwTW9kYWxbMV0ubm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgQVJfRUVQUk9NX01BQygwKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMSk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107CisJY2FzZSBBUl9FRVBST01fTUFDKDIpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOworCWNhc2UgRUVQX1JFR18wOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKKwljYXNlIEVFUF9SRUdfMToKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07CisJY2FzZSBFRVBfT1BfQ0FQOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKKwljYXNlIEVFUF9PUF9NT0RFOgorCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7CisJY2FzZSBFRVBfUkZfU0lMRU5UOgorCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OworCWNhc2UgRUVQX09CXzU6CisJCXJldHVybiBwTW9kYWxbMF0ub2I7CisJY2FzZSBFRVBfREJfNToKKwkJcmV0dXJuIHBNb2RhbFswXS5kYjsKKwljYXNlIEVFUF9PQl8yOgorCQlyZXR1cm4gcE1vZGFsWzFdLm9iOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWxbMV0uZGI7CisJY2FzZSBFRVBfTUlOT1JfUkVWOgorCQlyZXR1cm4gQVI1NDE2X1ZFUl9NQVNLOworCWNhc2UgRUVQX1RYX01BU0s6CisJCXJldHVybiBwQmFzZS0+dHhNYXNrOworCWNhc2UgRUVQX1JYX01BU0s6CisJCXJldHVybiBwQmFzZS0+cnhNYXNrOworCWNhc2UgRUVQX1JYR0FJTl9UWVBFOgorCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7CisJY2FzZSBFRVBfVFhHQUlOX1RZUEU6CisJCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKKwljYXNlIEVFUF9PTF9QV1JDVFJMOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5vcGVuTG9vcFB3ckNudGwgPyB0cnVlIDogZmFsc2U7CisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsKKwljYXNlIEVFUF9SQ19DSEFJTl9NQVNLOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5KQorCQkJcmV0dXJuIHBCYXNlLT5yY0NoYWluTWFzazsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJY2FzZSBFRVBfREFDX0hQV1JfNUc6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjApCisJCQlyZXR1cm4gcEJhc2UtPmRhY0hpUHdyTW9kZV81RzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIyKQorCQkJcmV0dXJuIHBCYXNlLT5mcmFjX25fNWc7CisJCWVsc2UKKwkJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9nYWluKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCwKKwkJCQkgIHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwLAorCQkJCSAgdTggdHhSeEF0dGVuTG9jYWwsIGludCByZWdDaGFpbk9mZnNldCwgaW50IGkpCit7CisJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7CisJCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFtpXTsKKworCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3TWFyZ2luW2ldKTsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwKKwkJCSAgICAgIHBNb2RhbC0+YnN3QXR0ZW5baV0pOworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX01BUkdJTiwKKwkJCSAgICAgIHBNb2RhbC0+eGF0dGVuMk1hcmdpbltpXSk7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsCisJCQkgICAgICBwTW9kYWwtPnhhdHRlbjJEYltpXSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19NQVJHSU4pCisJCQkgIHwgU00ocE1vZGFsLT4gYnN3TWFyZ2luW2ldLAorCQkJICAgICAgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0KSAmCisJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4pCisJCQkgIHwgU00ocE1vZGFsLT5ic3dBdHRlbltpXSwKKwkJCSAgICAgICBBUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikpOworCQl9CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwKKwkJICAgICAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLCB0eFJ4QXR0ZW5Mb2NhbCk7CisJCVJFR19STVdfRklFTEQoYWgsCisJCSAgICAgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJICAgICAgQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sIHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldKTsKKwl9IGVsc2UgeworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pCisJCQkgIHwgU00odHhSeEF0dGVuTG9jYWwsIEFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikpOworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSB8CisJCQkgIFNNKHBNb2RhbC0+cnhUeE1hcmdpbkNoW2ldLCBBUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCWludCBpLCByZWdDaGFpbk9mZnNldDsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKwl0eFJ4QXR0ZW5Mb2NhbCA9IElTX0NIQU5fMkdIWihjaGFuKSA/IDIzIDogNDQ7CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLAorCQkgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgeworCQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgeworCQkJaWYgKGkgPj0gMikKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmIChpICE9IDApKQorCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJZWxzZQorCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DSEFJTl8wICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgIHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbElDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKKwkJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFtpXSwKKwkJCSAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkKKwkJCWF0aDlrX2h3X2RlZl9zZXRfZ2FpbihhaCwgcE1vZGFsLCBlZXAsIHR4UnhBdHRlbkxvY2FsLAorCQkJCQkgICAgICByZWdDaGFpbk9mZnNldCwgaSk7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0IsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQl9TLAorCQkJCQkJICBwTW9kYWwtPm9iKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREJfUywKKwkJCQkJCSAgcE1vZGFsLT5kYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQiwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CX1MsCisJCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREJfUywKKwkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOworCQl9IGVsc2UgeworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1X1MsCisJCQkJCQkgIHBNb2RhbC0+b2IpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1X1MsCisJCQkJCQkgIHBNb2RhbC0+ZGIpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1X1MsCisJCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNSwKKwkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TLAorCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7CisJCX0KKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKKwkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMLAorCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkxfUywKKwkJCQkJICBwTW9kYWwtPnhwYUJpYXNMdmwpOworCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAorCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTLAorCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTX1MsCisJCQkJCSAgcE1vZGFsLT5sb2NhbF9iaWFzKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1hQQV9DRkcsIEFSX1BIWV9GT1JDRV9YUEFfQ0ZHLAorCQkJICAgICAgcE1vZGFsLT5mb3JjZV94cGFvbik7CisJfQorCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAorCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKworCWlmICghQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osCisJCQkgICAgICBBUl9QSFlfREVTSVJFRF9TWl9QR0EsCisJCQkgICAgICBwTW9kYWwtPnBnYURlc2lyZWRTaXplKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpCisJCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAorCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQV9PTikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwKKwkJICAgICAgcE1vZGFsLT50eEVuZFRvUnhPbik7CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUjkyODBfUEhZX0NDQV9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsCisJCQkgICAgICBBUl9QSFlfRVhUX0NDQTBfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9IGVsc2UgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfQ0NBLCBBUl9QSFlfQ0NBX1RIUkVTSDYyLAorCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBLAorCQkJICAgICAgQVJfUEhZX0VYVF9DQ0FfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCisJCQkgICAgICBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAorCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKKwl9CisKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TRVRUTElORywKKwkJCQkgICAgICBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkJCSAgICAgIHBNb2RhbC0+c3dTZXR0bGVIdDQwKTsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCSAgICBBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0tfVFhfQ1RSTCwKKwkJCSAgICAgIEFSX1BIWV9DQ0tfVFhfQ1RSTF9UWF9EQUNfU0NBTEVfQ0NLLAorCQkJICAgICAgcE1vZGFsLT5taXNjQml0cyk7CisKKworCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpICYmIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsCisJCQkJCWVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOworCQllbHNlIGlmIChlZXAtPmJhc2VFZXBIZWFkZXIuZGFjSGlQd3JNb2RlXzVHKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfQU5fVE9QMSwgQVJfQU5fVE9QMV9EQUNJUE1PREUsIDApOworCQllbHNlCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwKKwkJCQkgICAgICBlZXAtPmJhc2VFZXBIZWFkZXIuZGFjTHBNb2RlKTsKKworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRlJBTUVfQ1RMLCBBUl9QSFlfRlJBTUVfQ1RMX1RYX0NMSVAsCisJCQkgICAgICBwTW9kYWwtPm1pc2NCaXRzID4+IDIpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMOSwKKwkJCSAgICAgIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDSywKKwkJCSAgICAgIGVlcC0+YmFzZUVlcEhlYWRlci5kZXNpcmVkU2NhbGVDQ0spOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKyNkZWZpbmUgWFBBX0xWTF9GUkVRKGNudCkgKHBNb2RhbC0+eHBhQmlhc0x2bEZyZXFbY250XSkKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXU4IGJpYXNsZXZlbDsKKworCWlmIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQorCQlyZXR1cm47CisKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcpCisJCXJldHVybjsKKworCXBNb2RhbCA9ICYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJfSBlbHNlIHsKKwkJdTE2IHJlc2V0RnJlcUJpbiwgZnJlcUJpbiwgZnJlcUNvdW50ID0gMDsKKwkJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOworCisJCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKworCQlyZXNldEZyZXFCaW4gPSBGUkVRMkZCSU4oY2VudGVycy5zeW50aF9jZW50ZXIsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKDApICYgMHhmZjsKKwkJYmlhc2xldmVsID0gKHU4KSAoWFBBX0xWTF9GUkVRKDApID4+IDE0KTsKKworCQlmcmVxQ291bnQrKzsKKworCQl3aGlsZSAoZnJlcUNvdW50IDwgMykgeworCQkJaWYgKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID09IDB4MCkKKwkJCQlicmVhazsKKworCQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUShmcmVxQ291bnQpICYgMHhmZjsKKwkJCWlmIChyZXNldEZyZXFCaW4gPj0gZnJlcUJpbikKKwkJCQliaWFzbGV2ZWwgPSAodTgpKFhQQV9MVkxfRlJFUShmcmVxQ291bnQpID4+IDE0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJCWZyZXFDb3VudCsrOworCQl9CisJfQorCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNywgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKKwl9IGVsc2UgeworCQlJTklfUkEoJmFoLT5pbmlBZGRhYywgNiwgMSkgPSAoSU5JX1JBKCZhaC0+aW5pQWRkYWMsCisJCQkJCTYsIDEpICYgKH4weGMwKSkgfCBiaWFzbGV2ZWwgPDwgNjsKKwl9CisjdW5kZWYgWFBBX0xWTF9GUkVRCit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhU2V0LAorCQkJCXU4ICpiQ2hhbnMsIHUxNiBhdmFpbFBpZXJzLAorCQkJCXUxNiB0UGRHYWluT3ZlcmxhcCwgaW50MTZfdCAqcE1pbkNhbFBvd2VyLAorCQkJCXUxNiAqcFBkR2FpbkJvdW5kYXJpZXMsIHU4ICpwUERBRENWYWx1ZXMsCisJCQkJdTE2IG51bVhwZEdhaW5zKQoreworCWludCBpLCBqLCBrOworCWludDE2X3Qgc3M7CisJdTE2IGlkeEwgPSAwLCBpZHhSID0gMCwgbnVtUGllcnM7CisJc3RhdGljIHU4IHZwZFRhYmxlTFtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlUltBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisJc3RhdGljIHU4IHZwZFRhYmxlSVtBUjU0MTZfTlVNX1BEX0dBSU5TXQorCQlbQVI1NDE2X01BWF9QV1JfUkFOR0VfSU5fSEFMRl9EQl07CisKKwl1OCAqcFZwZEwsICpwVnBkUiwgKnBQd3JMLCAqcFB3clI7CisJdTggbWluUHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJdTggbWF4UHdyVDRbQVI1NDE2X05VTV9QRF9HQUlOU107CisJaW50MTZfdCB2cGRTdGVwOworCWludDE2X3QgdG1wVmFsOworCXUxNiBzaXplQ3VyclZwZFRhYmxlLCBtYXhJbmRleCwgdGd0SW5kZXg7CisJYm9vbCBtYXRjaDsKKwlpbnQxNl90IG1pbkRlbHRhID0gMDsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwlmb3IgKG51bVBpZXJzID0gMDsgbnVtUGllcnMgPCBhdmFpbFBpZXJzOyBudW1QaWVycysrKSB7CisJCWlmIChiQ2hhbnNbbnVtUGllcnNdID09IEFSNTQxNl9CQ0hBTl9VTlVTRUQpCisJCQlicmVhazsKKwl9CisKKwltYXRjaCA9IGF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleCgodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAorCQkJCQkJCSAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSwKKwkJCQkJICAgICAgIGJDaGFucywgbnVtUGllcnMsICZpZHhMLCAmaWR4Uik7CisKKwlpZiAobWF0Y2gpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJCW1pblB3clQ0W2ldID0gcFJhd0RhdGFTZXRbaWR4TF0ucHdyUGRnW2ldWzBdOworCQkJbWF4UHdyVDRbaV0gPSBwUmF3RGF0YVNldFtpZHhMXS5wd3JQZGdbaV1bNF07CisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCXBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXSwKKwkJCQkJcFJhd0RhdGFTZXRbaWR4TF0udnBkUGRnW2ldLAorCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCXZwZFRhYmxlSVtpXSk7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtWHBkR2FpbnM7IGkrKykgeworCQkJcFZwZEwgPSBwUmF3RGF0YVNldFtpZHhMXS52cGRQZGdbaV07CisJCQlwUHdyTCA9IHBSYXdEYXRhU2V0W2lkeExdLnB3clBkZ1tpXTsKKwkJCXBWcGRSID0gcFJhd0RhdGFTZXRbaWR4Ul0udnBkUGRnW2ldOworCQkJcFB3clIgPSBwUmF3RGF0YVNldFtpZHhSXS5wd3JQZGdbaV07CisKKwkJCW1pblB3clQ0W2ldID0gbWF4KHBQd3JMWzBdLCBwUHdyUlswXSk7CisKKwkJCW1heFB3clQ0W2ldID0KKwkJCQltaW4ocFB3ckxbQVI1NDE2X1BEX0dBSU5fSUNFUFRTIC0gMV0sCisJCQkJICAgIHBQd3JSW0FSNTQxNl9QRF9HQUlOX0lDRVBUUyAtIDFdKTsKKworCisJCQlhdGg5a19od19maWxsX3ZwZF90YWJsZShtaW5Qd3JUNFtpXSwgbWF4UHdyVDRbaV0sCisJCQkJCQlwUHdyTCwgcFZwZEwsCisJCQkJCQlBUjU0MTZfUERfR0FJTl9JQ0VQVFMsCisJCQkJCQl2cGRUYWJsZUxbaV0pOworCQkJYXRoOWtfaHdfZmlsbF92cGRfdGFibGUobWluUHdyVDRbaV0sIG1heFB3clQ0W2ldLAorCQkJCQkJcFB3clIsIHBWcGRSLAorCQkJCQkJQVI1NDE2X1BEX0dBSU5fSUNFUFRTLAorCQkJCQkJdnBkVGFibGVSW2ldKTsKKworCQkJZm9yIChqID0gMDsgaiA8PSAobWF4UHdyVDRbaV0gLSBtaW5Qd3JUNFtpXSkgLyAyOyBqKyspIHsKKwkJCQl2cGRUYWJsZUlbaV1bal0gPQorCQkJCQkodTgpKGF0aDlrX2h3X2ludGVycG9sYXRlKCh1MTYpCisJCQkJCSAgICAgRlJFUTJGQklOKGNlbnRlcnMuCisJCQkJCQkgICAgICAgc3ludGhfY2VudGVyLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWgorCQkJCQkJICAgICAgIChjaGFuKSksCisJCQkJCSAgICAgYkNoYW5zW2lkeExdLCBiQ2hhbnNbaWR4Ul0sCisJCQkJCSAgICAgdnBkVGFibGVMW2ldW2pdLCB2cGRUYWJsZVJbaV1bal0pKTsKKwkJCX0KKwkJfQorCX0KKworCSpwTWluQ2FsUG93ZXIgPSAoaW50MTZfdCkobWluUHdyVDRbMF0gLyAyKTsKKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bVhwZEdhaW5zOyBpKyspIHsKKwkJaWYgKGkgPT0gKG51bVhwZEdhaW5zIC0gMSkpCisJCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQkJKHUxNikobWF4UHdyVDRbaV0gLyAyKTsKKwkJZWxzZQorCQkJcFBkR2FpbkJvdW5kYXJpZXNbaV0gPQorCQkJCSh1MTYpKChtYXhQd3JUNFtpXSArIG1pblB3clQ0W2kgKyAxXSkgLyA0KTsKKworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CisJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKKworCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCW1pbkRlbHRhID0gcFBkR2FpbkJvdW5kYXJpZXNbMF0gLSAyMzsKKwkJCXBQZEdhaW5Cb3VuZGFyaWVzWzBdID0gMjM7CisJCX0gZWxzZSB7CisJCQltaW5EZWx0YSA9IDA7CisJCX0KKworCQlpZiAoaSA9PSAwKSB7CisJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCQlzcyA9IChpbnQxNl90KSgwIC0gKG1pblB3clQ0W2ldIC8gMikpOworCQkJZWxzZQorCQkJCXNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNzID0gKGludDE2X3QpKChwUGRHYWluQm91bmRhcmllc1tpIC0gMV0gLQorCQkJCQkobWluUHdyVDRbaV0gLyAyKSkgLQorCQkJCSAgICAgICB0UGRHYWluT3ZlcmxhcCArIDEgKyBtaW5EZWx0YSk7CisJCX0KKwkJdnBkU3RlcCA9IChpbnQxNl90KSh2cGRUYWJsZUlbaV1bMV0gLSB2cGRUYWJsZUlbaV1bMF0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJd2hpbGUgKChzcyA8IDApICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQl0bXBWYWwgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldWzBdICsgc3MgKiB2cGRTdGVwKTsKKwkJCXBQREFEQ1ZhbHVlc1trKytdID0gKHU4KSgodG1wVmFsIDwgMCkgPyAwIDogdG1wVmFsKTsKKwkJCXNzKys7CisJCX0KKworCQlzaXplQ3VyclZwZFRhYmxlID0gKHU4KSAoKG1heFB3clQ0W2ldIC0gbWluUHdyVDRbaV0pIC8gMiArIDEpOworCQl0Z3RJbmRleCA9ICh1OCkocFBkR2FpbkJvdW5kYXJpZXNbaV0gKyB0UGRHYWluT3ZlcmxhcCAtCisJCQkJKG1pblB3clQ0W2ldIC8gMikpOworCQltYXhJbmRleCA9ICh0Z3RJbmRleCA8IHNpemVDdXJyVnBkVGFibGUpID8KKwkJCXRndEluZGV4IDogc2l6ZUN1cnJWcGRUYWJsZTsKKworCQl3aGlsZSAoKHNzIDwgbWF4SW5kZXgpICYmIChrIDwgKEFSNTQxNl9OVU1fUERBRENfVkFMVUVTIC0gMSkpKSB7CisJCQlwUERBRENWYWx1ZXNbaysrXSA9IHZwZFRhYmxlSVtpXVtzcysrXTsKKwkJfQorCisJCXZwZFN0ZXAgPSAoaW50MTZfdCkodnBkVGFibGVJW2ldW3NpemVDdXJyVnBkVGFibGUgLSAxXSAtCisJCQkJICAgIHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMl0pOworCQl2cGRTdGVwID0gKGludDE2X3QpKCh2cGRTdGVwIDwgMSkgPyAxIDogdnBkU3RlcCk7CisKKwkJaWYgKHRndEluZGV4ID4gbWF4SW5kZXgpIHsKKwkJCXdoaWxlICgoc3MgPD0gdGd0SW5kZXgpICYmCisJCQkgICAgICAgKGsgPCAoQVI1NDE2X05VTV9QREFEQ19WQUxVRVMgLSAxKSkpIHsKKwkJCQl0bXBWYWwgPSAoaW50MTZfdCkoKHZwZFRhYmxlSVtpXVtzaXplQ3VyclZwZFRhYmxlIC0gMV0gKworCQkJCQkJICAgIChzcyAtIG1heEluZGV4ICsgMSkgKiB2cGRTdGVwKSk7CisJCQkJcFBEQURDVmFsdWVzW2srK10gPSAodTgpKCh0bXBWYWwgPiAyNTUpID8KKwkJCQkJCQkgMjU1IDogdG1wVmFsKTsKKwkJCQlzcysrOworCQkJfQorCQl9CisJfQorCisJd2hpbGUgKGkgPCBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSykgeworCQlwUGRHYWluQm91bmRhcmllc1tpXSA9IHBQZEdhaW5Cb3VuZGFyaWVzW2kgLSAxXTsKKwkJaSsrOworCX0KKworCXdoaWxlIChrIDwgQVI1NDE2X05VTV9QREFEQ19WQUxVRVMpIHsKKwkJcFBEQURDVmFsdWVzW2tdID0gcFBEQURDVmFsdWVzW2sgLSAxXTsKKwkJaysrOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpCit7CisjZGVmaW5lIFNNX1BEX0dBSU4oeCkgU00oMHgzOCwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeCkKKyNkZWZpbmUgU01fUERHQUlOX0IoeCwgeSkgXAorCQlTTSgoZ2FpbkJvdW5kYXJpZXNbeF0pLCBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfIyN5KQorCisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhc2V0OworCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKKwl1MTYgcGRHYWluT3ZlcmxhcF90MjsKKwlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOworCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107CisJdTE2IG51bVBpZXJzLCBpLCBqOworCWludDE2X3QgdE1pbkNhbFBvd2VyOworCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOworCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9OVU1fUERfR0FJTlNdID0geyAwLCAwLCAwLCAwIH07CisJdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0OworCWludDE2X3QgbW9kYWxJZHg7CisKKwltb2RhbElkeCA9IElTX0NIQU5fMkdIWihjaGFuKSA/IDEgOiAwOworCXhwZE1hc2sgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXJbbW9kYWxJZHhdLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyW21vZGFsSWR4XS5wZEdhaW5PdmVybGFwOworCX0gZWxzZSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCisJCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOworCX0KKworCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOworCX0gZWxzZSB7CisJCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXI1RzsKKwkJbnVtUGllcnMgPSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUzsKKwl9CisKKwlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIgJiYgSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbMF07CisJCWFoLT5pbml0UERBREMgPSAoKHN0cnVjdCBjYWxEYXRhUGVyRnJlcU9wTG9vcCAqKQorCQkJCSBwUmF3RGF0YXNldCktPnZwZFBkZ1swXVswXTsKKwl9CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLAorCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKQorCQkJCXBSYXdEYXRhc2V0ID0gcEVlcERhdGEtPmNhbFBpZXJEYXRhMkdbaV07CisJCQllbHNlCisJCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGE1R1tpXTsKKworCisJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQl1OCBwY2RhY0lkeDsKKwkJCQl1OCB0eFBvd2VyOworCisJCQkJYXRoOWtfZ2V0X3R4Z2Fpbl9pbmRleChhaCwgY2hhbiwKKwkJCQkoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopcFJhd0RhdGFzZXQsCisJCQkJcENhbEJDaGFucywgbnVtUGllcnMsICZ0eFBvd2VyLCAmcGNkYWNJZHgpOworCQkJCWF0aDlrX29sY19nZXRfcGRhZGNzKGFoLCBwY2RhY0lkeCwKKwkJCQkJCSAgICAgdHhQb3dlci8yLCBwZGFkY1ZhbHVlcyk7CisJCQl9IGVsc2UgeworCQkJCWF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwKKwkJCQkJCQljaGFuLCBwUmF3RGF0YXNldCwKKwkJCQkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywKKwkJCQkJCQlwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJCSZ0TWluQ2FsUG93ZXIsCisJCQkJCQkJZ2FpbkJvdW5kYXJpZXMsCisJCQkJCQkJcGRhZGNWYWx1ZXMsCisJCQkJCQkJbnVtWHBkR2Fpbik7CisJCQl9CisKKwkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CisJCQkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQkJCVJFR19XUklURShhaCwKKwkJCQkJCUFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJCVNNKDB4NiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSB8CisJCQkJCQlTTV9QRF9HQUlOKDEpIHwgU01fUERfR0FJTigyKSB8CisJCQkJCQlTTV9QRF9HQUlOKDMpIHwgU01fUERfR0FJTig0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00ocGRHYWluT3ZlcmxhcF90MiwKKwkJCQkJCUFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKXwKKwkJCQkJCVNNX1BER0FJTl9CKDAsIDEpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDEsIDIpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDIsIDMpIHwKKwkJCQkJCVNNX1BER0FJTl9CKDMsIDQpKTsKKwkJCQl9CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8IFBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgUERBREMgJTNkICIKKwkJCQkJIlZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworI3VuZGVmIFNNX1BEX0dBSU4KKyN1bmRlZiBTTV9QREdBSU5fQgorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkJCSAgaW50MTZfdCAqcmF0ZXNBcnJheSwKKwkJCQkJCSAgdTE2IGNmZ0N0bCwKKwkJCQkJCSAgdTE2IEFudGVubmFSZWR1Y3Rpb24sCisJCQkJCQkgIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJCSAgdTE2IHBvd2VyTGltaXQpCit7CisjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOICAgICA2ICAvKiAxMCpsb2cxMCgyKSoyICovCisjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCisKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9CisJCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CisKKwlpbnQgaTsKKwlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CisJc3RydWN0IGNhbF9jdGxfZGF0YSAqcmVwOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG0sIHRhcmdldFBvd2VyQ2NrID0geworCQkwLCB7IDAsIDAsIDAsIDB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDB9IH0sIHRhcmdldFBvd2VyQ2NrRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDAgfQorCX07CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLCB0YXJnZXRQb3dlckh0NDAgPSB7CisJCTAsIHswLCAwLCAwLCAwfQorCX07CisJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKKwl1MTYgY3RsTW9kZXNGb3IxMWFbXSA9CisJCXsgQ1RMXzExQSwgQ1RMXzVHSFQyMCwgQ1RMXzExQV9FWFQsIENUTF81R0hUNDAgfTsKKwl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9CisJCXsgQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCwgQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULAorCQkgIENUTF8yR0hUNDAKKwkJfTsKKwl1MTYgbnVtQ3RsTW9kZXMsICpwQ3RsTW9kZSwgY3RsTW9kZSwgZnJlcTsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisJaW50IHR4X2NoYWlubWFzazsKKwl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CisKKwl0eF9jaGFpbm1hc2sgPSBhaC0+dHhjaGFpbm1hc2s7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KAorCQlwRWVwRGF0YS0+bW9kYWxIZWFkZXIKKwkJCVtJU19DSEFOXzJHSFooY2hhbildLmFudGVubmFHYWluQ2hbMF0sCisJCXBFZXBEYXRhLT5tb2RhbEhlYWRlcgorCQkJW0lTX0NIQU5fMkdIWihjaGFuKV0uYW50ZW5uYUdhaW5DaFsxXSk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gbWF4KCh1OCl0d2ljZUxhcmdlc3RBbnRlbm5hLAorCQkJCSAgcEVlcERhdGEtPm1vZGFsSGVhZGVyCisJCQkJICBbSVNfQ0hBTl8yR0haKGNoYW4pXS5hbnRlbm5hR2FpbkNoWzJdKTsKKworCXR3aWNlTGFyZ2VzdEFudGVubmEgPSAoaW50MTZfdCltaW4oQW50ZW5uYVJlZHVjdGlvbiAtCisJCQkJCSAgIHR3aWNlTGFyZ2VzdEFudGVubmEsIDApOworCisJbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOworCisJaWYgKHJlZ3VsYXRvcnktPnRwX3NjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgeworCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KKwkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKHJlZ3VsYXRvcnktPnRwX3NjYWxlKV0gKiAyKTsKKwl9CisKKwlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOworCisJc3dpdGNoIChhcjU0MTZfZ2V0X250eGNoYWlucyh0eF9jaGFpbm1hc2spKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOOworCQlicmVhazsKKwljYXNlIDM6CisJCXNjYWxlZFBvd2VyIC09IFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU47CisJCWJyZWFrOworCX0KKworCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpIC0KKwkJCVNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOworCQlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFnOworCisJCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJDY2ssIDQsIGZhbHNlKTsKKwkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7CisJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAorCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOworCisJCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7CisJCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCisJCQkJQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOworCQkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlckNjaywKKwkJCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlckNja0V4dCwgNCwgdHJ1ZSk7CisJCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCisJCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOworCQl9CisJfSBlbHNlIHsKKwkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKSAtCisJCQlTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MDsKKwkJcEN0bE1vZGUgPSBjdGxNb2Rlc0ZvcjExYTsKKworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1RywKKwkJCUFSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlck9mZG0sIDQsIGZhbHNlKTsKKwkJYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXI1R0hUMjAsCisJCQlBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMsCisJCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7CisKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQkJbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFhKTsKKwkJCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjVHSFQ0MCwKKwkJCQlBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7CisJCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyNUcsCisJCQkJQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOworCQl9CisJfQorCisJZm9yIChjdGxNb2RlID0gMDsgY3RsTW9kZSA8IG51bUN0bE1vZGVzOyBjdGxNb2RlKyspIHsKKwkJYm9vbCBpc0h0NDBDdGxNb2RlID0gKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF81R0hUNDApIHx8CisJCQkocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzJHSFQ0MCk7CisJCWlmIChpc0h0NDBDdGxNb2RlKQorCQkJZnJlcSA9IGNlbnRlcnMuc3ludGhfY2VudGVyOworCQllbHNlIGlmIChwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkKKwkJCWZyZXEgPSBjZW50ZXJzLmV4dF9jZW50ZXI7CisJCWVsc2UKKwkJCWZyZXEgPSBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwkJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkgPT0gMTQgJiYKKwkJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPD0gMikKKwkJCXR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCisJCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X05VTV9DVExTKSAmJiBwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgeworCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAorCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8IFNEX05PX0NUTCkpKSB7CisJCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7CisKKwkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9IGF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAorCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnModHhfY2hhaW5tYXNrKSAtIDFdLAorCQkJCUlTX0NIQU5fMkdIWihjaGFuKSwgQVI1NDE2X05VTV9CQU5EX0VER0VTKTsKKworCQkJCWlmICgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pID09IFNEX05PX0NUTCkgeworCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IG1pbih0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQkJCQkJdHdpY2VNaW5FZGdlUG93ZXIpOworCQkJCX0gZWxzZSB7CisJCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0gdHdpY2VNaW5FZGdlUG93ZXI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCW1pbkN0bFBvd2VyID0gbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7CisKKwkJc3dpdGNoIChwQ3RsTW9kZVtjdGxNb2RlXSkgeworCQljYXNlIENUTF8xMUI6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckNjay50UG93MngpOyBpKyspIHsKKwkJCQl0YXJnZXRQb3dlckNjay50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckNjay50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFBOgorCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDIwOgorCQljYXNlIENUTF8yR0hUMjA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFCX0VYVDoKKwkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCisJCQkJCW1pbkN0bFBvd2VyKTsKKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUFfRVhUOgorCQljYXNlIENUTF8xMUdfRVhUOgorCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQorCQkJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfNUdIVDQwOgorCQljYXNlIENUTF8yR0hUNDA6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmF0ZXNBcnJheVtyYXRlNm1iXSA9IHJhdGVzQXJyYXlbcmF0ZTltYl0gPSByYXRlc0FycmF5W3JhdGUxMm1iXSA9CisJCXJhdGVzQXJyYXlbcmF0ZTE4bWJdID0gcmF0ZXNBcnJheVtyYXRlMjRtYl0gPQorCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOworCXJhdGVzQXJyYXlbcmF0ZTM2bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsxXTsKKwlyYXRlc0FycmF5W3JhdGU0OG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMl07CisJcmF0ZXNBcnJheVtyYXRlNTRtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzNdOworCXJhdGVzQXJyYXlbcmF0ZVhyXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsgaSsrKQorCQlyYXRlc0FycmF5W3JhdGVIdDIwXzAgKyBpXSA9IHRhcmdldFBvd2VySHQyMC50UG93MnhbaV07CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlMnNdID0gcmF0ZXNBcnJheVtyYXRlMmxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKKwkJcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9CisJCQl0YXJnZXRQb3dlckNjay50UG93MnhbMl07CisJCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0KKwkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKKwl9CisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7CisJCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9CisJCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKKwkJfQorCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07CisJCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07CisJCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPQorCQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKK3sKKyNkZWZpbmUgUlRfQVJfREVMVEEoeCkgKHJhdGVzQXJyYXlbeF0gLSBjY2tfb2ZkbV9kZWx0YSkKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKHBFZXBEYXRhLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKwlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOworCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKKwl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7CisJaW50IGksIGNja19vZmRtX2RlbHRhID0gMDsKKworCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOworCisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJfQorCisJYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShhaCwgY2hhbiwKKwkJCQkJICAgICAgICZyYXRlc0FycmF5WzBdLCBjZmdDdGwsCisJCQkJCSAgICAgICB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCisJCQkJCSAgICAgICB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkJICAgICAgIHBvd2VyTGltaXQpOworCisJYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9jYWxfdGFibGUoYWgsIGNoYW4sICZ0eFBvd2VySW5kZXhPZmZzZXQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0JKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSNTQxNl9NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFyNTQxNlJhdGVTaXplOyBpKyspCisJCQlyYXRlc0FycmF5W2ldIC09IEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNTRtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTQ4bWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUzNm1iXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCWNja19vZmRtX2RlbHRhID0gMjsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAorCQkJCUFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMnMpLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMmwpLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTFsKSwgMCkpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCQkJQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxMXMpLCAyNCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMTFsKSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTVfNXMpLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGU1XzVsKSwgMCkpOworCQl9IGVsc2UgeworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMmxdLCAxNikKKwkJCQl8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFzXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFsXSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81c10sIDgpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81bF0sIDApKTsKKwkJfQorCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU1LAorCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzNdLCAyNCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzFdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMF0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF83XSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF82XSwgMTYpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF81XSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzRdLCAwKSk7CisKKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU3LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8zXSArCisJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8yXSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMV0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMF0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTgsCisJCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzddICsKKwkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzZdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF81XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF80XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOworCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUV4dENjayksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGVEdXBDY2spLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwkJfQorCX0KKworCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1NVQiwKKwkJICBBVEg5S19QT1dfU00ocE1vZGFsLT5wd3JEZWNyZWFzZUZvcjNDaGFpbiwgNikKKwkJICB8IEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yMkNoYWluLCAwKSk7CisKKwlpID0gcmF0ZTZtYjsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpCisJCWkgPSByYXRlSHQ0MF8wOworCWVsc2UgaWYgKElTX0NIQU5fSFQyMChjaGFuKSkKKwkJaSA9IHJhdGVIdDIwXzA7CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsID0KKwkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7CisJZWxzZQorCQlyZWd1bGF0b3J5LT5tYXhfcG93ZXJfbGV2ZWwgPSByYXRlc0FycmF5W2ldOworCisJc3dpdGNoKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKGFoLT50eGNoYWlubWFzaykpIHsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9UV09fQ0hBSU47CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmVndWxhdG9yeS0+bWF4X3Bvd2VyX2xldmVsICs9IElOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIkludmFsaWQgY2hhaW5tYXNrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1OCBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKGVlcC0+bW9kYWxIZWFkZXJbQVRIOUtfSEFMX0ZSRVFfQkFORF8yR0haID09IGZyZXFfYmFuZF0pOworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKKwl1OCBudW1fYW50X2NvbmZpZzsKKworCW51bV9hbnRfY29uZmlnID0gMTsKKworCWlmIChwQmFzZS0+dmVyc2lvbiA+PSAweDBFMEQpCisJCWlmIChwTW9kYWwtPnVzZUFudDEpCisJCQludW1fYW50X2NvbmZpZyArPSAxOworCisJcmV0dXJuIG51bV9hbnRfY29uZmlnOworfQorCitzdGF0aWMgdTE2IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9CisJCSYoZWVwLT5tb2RhbEhlYWRlcltJU19DSEFOXzJHSFooY2hhbildKTsKKworCXJldHVybiBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Cit9CisKK3N0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKK3sKKyNkZWZpbmUgRUVQX0RFRl9TUFVSQ0hBTiBcCisJKGFoLT5lZXByb20uZGVmLm1vZGFsSGVhZGVyW2lzMkdIel0uc3B1ckNoYW5zW2ldLnNwdXJDaGFuKQorCisJdTE2IHNwdXJfdmFsID0gQVJfTk9fU1BVUjsKKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJIkdldHRpbmcgc3B1ciBpZHggJWQgaXMyR2h6LiAlZCB2YWwgJXhcbiIsCisJCWksIGlzMkdIeiwgYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XSk7CisKKwlzd2l0Y2ggKGFoLT5jb25maWcuc3B1cm1vZGUpIHsKKwljYXNlIFNQVVJfRElTQUJMRToKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9JT0NUTDoKKwkJc3B1cl92YWwgPSBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdOworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCisJCQkiR2V0dGluZyBzcHVyIHZhbCBmcm9tIG5ldyBsb2MuICVkXG4iLCBzcHVyX3ZhbCk7CisJCWJyZWFrOworCWNhc2UgU1BVUl9FTkFCTEVfRUVQUk9NOgorCQlzcHVyX3ZhbCA9IEVFUF9ERUZfU1BVUkNIQU47CisJCWJyZWFrOworCX0KKworCXJldHVybiBzcHVyX3ZhbDsKKworI3VuZGVmIEVFUF9ERUZfU1BVUkNIQU4KK30KKworY29uc3Qgc3RydWN0IGVlcHJvbV9vcHMgZWVwX2RlZl9vcHMgPSB7CisJLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od19kZWZfY2hlY2tfZWVwcm9tLAorCS5nZXRfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tLAorCS5maWxsX2VlcHJvbQkJPSBhdGg5a19od19kZWZfZmlsbF9lZXByb20sCisJLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3ZlciwKKwkuZ2V0X2VlcHJvbV9yZXYJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fcmV2LAorCS5nZXRfbnVtX2FudF9jb25maWcJPSBhdGg5a19od19kZWZfZ2V0X251bV9hbnRfY29uZmlnLAorCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcsCisJLnNldF9ib2FyZF92YWx1ZXMJPSBhdGg5a19od19kZWZfc2V0X2JvYXJkX3ZhbHVlcywKKwkuc2V0X2FkZGFjCQk9IGF0aDlrX2h3X2RlZl9zZXRfYWRkYWMsCisJLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlciwKKwkuZ2V0X3NwdXJfY2hhbm5lbAk9IGF0aDlrX2h3X2RlZl9nZXRfc3B1cl9jaGFubmVsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAzNDkzNWE4Li5iNmM2Y2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMTYsMTQgKzE2LDExIEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgImF0aDlrLmgiCiAjaW5jbHVkZSAiaW5pdHZhbHMuaCIKIAotc3RhdGljIGludCBidGNvZXhfZW5hYmxlOwotbW9kdWxlX3BhcmFtKGJ0Y29leF9lbmFibGUsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhidGNvZXhfZW5hYmxlLCAiRW5hYmxlIEJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0Iik7Ci0KICNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV9DQ0sJCTIyCiAjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNCTQwCiAjZGVmaW5lIEFUSDlLX0NMT0NLX1JBVEVfMkdIWl9PRkRNCTQ0CkBAIC0zODAsMTIgKzM3NywxNSBAQAogCQlyZXR1cm4gIkF0aGVyb3MgOTI4MCI7CiAJY2FzZSBBUjkyODVfREVWSURfUENJRToKIAkJcmV0dXJuICJBdGhlcm9zIDkyODUiOworCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6CisJY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6CisJCXJldHVybiAiQXRoZXJvcyA5Mjg3IjsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2RlZmF1bHRzKHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CiAKQEAgLTQwNCw3ICs0MDQsNyBAQAogCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKIAlhaC0+Y29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKIAlhaC0+Y29uZmlnLmVuYWJsZV9hbmkgPSAxOwotCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSAwOworCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSBBVEg5S19BTlRfVkFSSUFCTEU7CiAJYWgtPmNvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewpAQCAtNDM0LDM3ICs0MzQsMjQgQEAKIAkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9IFNFUl9SRUdfTU9ERV9BVVRPOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfbmV3c3RhdGUodTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJaW50ICpzdGF0dXMpCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2RlZmF1bHRzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaHcgKmFoOworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVndWxhdG9yeSA9IGF0aDlrX2h3X3JlZ3VsYXRvcnkoYWgpOwogCi0JYWggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2h3KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGFoID09IE5VTEwpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzdGF0ZSBibG9ja1xuIik7Ci0JCSpzdGF0dXMgPSAtRU5PTUVNOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJcmVndWxhdG9yeS0+Y291bnRyeV9jb2RlID0gQ1RSWV9ERUZBVUxUOworCXJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0ID0gTUFYX1JBVEVfUE9XRVI7CisJcmVndWxhdG9yeS0+dHBfc2NhbGUgPSBBVEg5S19UUF9TQ0FMRV9NQVg7CiAKLQlhaC0+YWhfc2MgPSBzYzsKIAlhaC0+aHdfdmVyc2lvbi5tYWdpYyA9IEFSNTQxNl9NQUdJQzsKLQlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX0RFRkFVTFQ7Ci0JYWgtPmh3X3ZlcnNpb24uZGV2aWQgPSBkZXZpZDsKIAlhaC0+aHdfdmVyc2lvbi5zdWJ2ZW5kb3JpZCA9IDA7CiAKIAlhaC0+YWhfZmxhZ3MgPSAwOwotCWlmICgoZGV2aWQgPT0gQVI1NDE2X0FSOTEwMF9ERVZJRCkpCisJaWYgKGFoLT5od192ZXJzaW9uLmRldmlkID09IEFSNTQxNl9BUjkxMDBfREVWSUQpCiAJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCWFoLT5haF9mbGFncyA9IEFIX1VTRV9FRVBST007CiAKLQlhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCA9IE1BWF9SQVRFX1BPV0VSOwotCWFoLT5yZWd1bGF0b3J5LnRwX3NjYWxlID0gQVRIOUtfVFBfU0NBTEVfTUFYOwogCWFoLT5hdGltX3dpbmRvdyA9IDA7Ci0JYWgtPmRpdmVyc2l0eV9jb250cm9sID0gYWgtPmNvbmZpZy5kaXZlcnNpdHlfY29udHJvbDsKLQlhaC0+YW50ZW5uYV9zd2l0Y2hfc3dhcCA9Ci0JCWFoLT5jb25maWcuYW50ZW5uYV9zd2l0Y2hfc3dhcDsKIAlhaC0+c3RhX2lkMV9kZWZhdWx0cyA9IEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwogCWFoLT5iZWFjb25faW50ZXJ2YWwgPSAxMDA7CiAJYWgtPmVuYWJsZV8zMmtIel9jbG9jayA9IERPTlRfVVNFXzMyS0haOwpAQCAtNDc1LDcgKzQ2Miw3IEBACiAKIAlhaC0+Z2JlYWNvbl9yYXRlID0gMDsKIAotCXJldHVybiBhaDsKKwlhaC0+cG93ZXJfbW9kZSA9IEFUSDlLX1BNX1VOREVGSU5FRDsKIH0KIAogc3RhdGljIGludCBhdGg5a19od19yZmF0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKQEAgLTU4OCw3ICs1NzUsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19od19wb3N0X2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcG9zdF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBlY29kZTsKIApAQCAtNTk5LDcgKzU4Niw3IEBACiAJaWYgKGVjb2RlICE9IDApCiAJCXJldHVybiBlY29kZTsKIAotCWVjb2RlID0gYXRoOWtfaHdfZWVwcm9tX2F0dGFjaChhaCk7CisJZWNvZGUgPSBhdGg5a19od19lZXByb21faW5pdChhaCk7CiAJaWYgKGVjb2RlICE9IDApCiAJCXJldHVybiBlY29kZTsKIApAQCAtNjEyLDcwICs1OTksNTIgQEAKIAogCWlmICghQVJfU1JFVl85MTAwKGFoKSkgewogCQlhdGg5a19od19hbmlfc2V0dXAoYWgpOwotCQlhdGg5a19od19hbmlfYXR0YWNoKGFoKTsKKwkJYXRoOWtfaHdfYW5pX2luaXQoYWgpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfZG9fYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJCSBpbnQgKnN0YXR1cykKK3N0YXRpYyBib29sIGF0aDlrX2h3X2RldmlkX3N1cHBvcnRlZCh1MTYgZGV2aWQpCiB7Ci0Jc3RydWN0IGF0aF9odyAqYWg7Ci0JaW50IGVjb2RlOwotCXUzMiBpLCBqOwotCi0JYWggPSBhdGg5a19od19uZXdzdGF0ZShkZXZpZCwgc2MsIHN0YXR1cyk7Ci0JaWYgKGFoID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JYXRoOWtfaHdfc2V0X2RlZmF1bHRzKGFoKTsKLQotCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKKwlzd2l0Y2ggKGRldmlkKSB7CisJY2FzZSBBUjU0MTZfREVWSURfUENJOgorCWNhc2UgQVI1NDE2X0RFVklEX1BDSUU6CisJY2FzZSBBUjU0MTZfQVI5MTAwX0RFVklEOgorCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKKwljYXNlIEFSOTI4MF9ERVZJRF9QQ0k6CisJY2FzZSBBUjkyODBfREVWSURfUENJRToKKwljYXNlIEFSOTI4NV9ERVZJRF9QQ0lFOgorCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6CisJY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KKwlyZXR1cm4gZmFsc2U7Cit9CiAKLQlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIkNvdWxkbid0IHdha2V1cCBjaGlwXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKK3N0YXRpYyBib29sIGF0aDlrX2h3X21hY3ZlcnNpb25fc3VwcG9ydGVkKHUzMiBtYWN2ZXJzaW9uKQoreworCXN3aXRjaCAobWFjdmVyc2lvbikgeworCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJOgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRToKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85MTYwOgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkxMDA6CisJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTI4MDoKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85Mjg1OgorCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzkyODc6CisJCXJldHVybiB0cnVlOworCS8qIE5vdCB5ZXQgKi8KKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85MjcxOgorCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KKwlyZXR1cm4gZmFsc2U7Cit9CiAKLQlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfQVVUTykgewotCQlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kgfHwKLQkJICAgIChBUl9TUkVWXzkyODAoYWgpICYmICFhaC0+aXNfcGNpZXhwcmVzcykpIHsKLQkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQotCQkJCVNFUl9SRUdfTU9ERV9PTjsKLQkJfSBlbHNlIHsKLQkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQotCQkJCVNFUl9SRUdfTU9ERV9PRkY7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAic2VyaWFsaXplX3JlZ21vZGUgaXMgJWRcbiIsCi0JCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUpOwotCi0JaWYgKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgJiYKLQkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkgJiYKLQkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCi0JICAgICghQVJfU1JFVl85MTAwKGFoKSkgJiYgKCFBUl9TUkVWXzkyODAoYWgpKSAmJiAoIUFSX1NSRVZfOTI4NShhaCkpKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBub3Qgc3VwcG9ydGVkIGJ5ICIKLQkJCSJ0aGlzIGRyaXZlclxuIiwgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKLQkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7Ci0JCWVjb2RlID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gYmFkOwotCX0KLQotCWlmIChBUl9TUkVWXzkxMDAoYWgpKSB7Ci0JCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJYWgtPnN1cHBfY2FscyA9IElRX01JU01BVENIX0NBTDsKLQkJYWgtPmlzX3BjaWV4cHJlc3MgPSBmYWxzZTsKLQl9Ci0JYWgtPmh3X3ZlcnNpb24ucGh5UmV2ID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DSElQX0lEKTsKLQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jYWxfc2V0dGluZ3Moc3RydWN0IGF0aF9odyAqYWgpCit7CiAJaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKIAkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKIAkJCWFoLT5pcV9jYWxkYXRhLmNhbERhdGEgPSAmaXFfY2FsX3NpbmdsZV9zYW1wbGU7CkBAIC02OTYsMTIgKzY2NSw0OSBAQAogCQl9CiAJCWFoLT5zdXBwX2NhbHMgPSBBRENfR0FJTl9DQUwgfCBBRENfRENfQ0FMIHwgSVFfTUlTTUFUQ0hfQ0FMOwogCX0KK30KIAotCWFoLT5hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOwotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQlhaC0+YW5pX2Z1bmN0aW9uICY9IH5BVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw7CitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X21vZGVfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlpZiAoQVJfU1JFVl85MjcxKGFoKSkgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyNzFNb2Rlc185MjcxXzFfMCwKKwkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI3MU1vZGVzXzkyNzFfMV8wKSwgNik7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyNzFDb21tb25fOTI3MV8xXzAsCisJCQkgICAgICAgQVJSQVlfU0laRShhcjkyNzFDb21tb25fOTI3MV8xXzApLCAyKTsKKwkJcmV0dXJuOworCX0KIAotCWlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CisJaWYgKEFSX1NSRVZfOTI4N18xMV9PUl9MQVRFUihhaCkpIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5Mjg3TW9kZXNfOTI4N18xXzEsCisJCQkJQVJSQVlfU0laRShhcjkyODdNb2Rlc185Mjg3XzFfMSksIDYpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg3Q29tbW9uXzkyODdfMV8xLAorCQkJCUFSUkFZX1NJWkUoYXI5Mjg3Q29tbW9uXzkyODdfMV8xKSwgMik7CisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAorCQkJYXI5Mjg3UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODdfMV8xLAorCQkJQVJSQVlfU0laRShhcjkyODdQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4N18xXzEpLCAyKTsKKwkJZWxzZQorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAorCQkJYXI5Mjg3UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODdfMV8xLAorCQkJQVJSQVlfU0laRShhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzEpLAorCQkJCQkyKTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5Mjg3TW9kZXNfOTI4N18xXzAsCisJCQkJQVJSQVlfU0laRShhcjkyODdNb2Rlc185Mjg3XzFfMCksIDYpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg3Q29tbW9uXzkyODdfMV8wLAorCQkJCUFSUkFZX1NJWkUoYXI5Mjg3Q29tbW9uXzkyODdfMV8wKSwgMik7CisKKwkJaWYgKGFoLT5jb25maWcucGNpZV9jbG9ja19yZXEpCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCisJCQlhcjkyODdQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4N18xXzAsCisJCQlBUlJBWV9TSVpFKGFyOTI4N1BjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg3XzFfMCksIDIpOworCQllbHNlCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCisJCQlhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzAsCisJCQlBUlJBWV9TSVpFKGFyOTI4N1BjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg3XzFfMCksCisJCQkJICAyKTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwogCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4NU1vZGVzXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NV8xXzIpLCA2KTsKQEAgLTgzMiwxNyArODM4LDMyIEBACiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWMpLCAyKTsKIAl9Cit9CiAKLQlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCi0JCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCk7Ci0JZWxzZQotCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X21vZGVfZ2Fpbl9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCWlmIChBUl9TUkVWXzkyODdfMTEoYWgpKQorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQlhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8xLAorCQlBUlJBWV9TSVpFKGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzEpLCA2KTsKKwllbHNlIGlmIChBUl9TUkVWXzkyODdfMTAoYWgpKQorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQlhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8wLAorCQlBUlJBWV9TSVpFKGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzApLCA2KTsKKwllbHNlIGlmIChBUl9TUkVWXzkyODBfMjAoYWgpKQorCQlhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoYWgpOwogCi0JZWNvZGUgPSBhdGg5a19od19wb3N0X2F0dGFjaChhaCk7Ci0JaWYgKGVjb2RlICE9IDApCi0JCWdvdG8gYmFkOwotCi0JaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwlpZiAoQVJfU1JFVl85Mjg3XzExKGFoKSkgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQlhcjkyODdNb2Rlc190eF9nYWluXzkyODdfMV8xLAorCQlBUlJBWV9TSVpFKGFyOTI4N01vZGVzX3R4X2dhaW5fOTI4N18xXzEpLCA2KTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4N18xMChhaCkpIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKKwkJYXI5Mjg3TW9kZXNfdHhfZ2Fpbl85Mjg3XzFfMCwKKwkJQVJSQVlfU0laRShhcjkyODdNb2Rlc190eF9nYWluXzkyODdfMV8wKSwgNik7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyODBfMjAoYWgpKSB7CisJCWF0aDlrX2h3X2luaXRfdHhnYWluX2luaShhaCk7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7CiAJCXUzMiB0eGdhaW5fdHlwZSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhHQUlOX1RZUEUpOwogCiAJCS8qIHR4Z2FpbiB0YWJsZSAqLwpAQCAtODU3LDE2ICs4NzgsMTEgQEAKIAkJfQogCiAJfQorfQogCi0JLyogcnhnYWluIHRhYmxlICovCi0JaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkpCi0JCWF0aDlrX2h3X2luaXRfcnhnYWluX2luaShhaCk7Ci0KLQkvKiB0eGdhaW4gdGFibGUgKi8KLQlpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSkKLQkJYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKGFoKTsKLQotCWF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oYWgpOworc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF8xMWFfZWVwcm9tX2ZpeChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgaSwgajsKIAogCWlmICgoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgJiYKIAkgICAgdGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgewpAQCAtODg1LDI5ICs5MDEsOTcgQEAKIAkJCX0KIAkJfQogCX0KK30KIAotCWVjb2RlID0gYXRoOWtfaHdfaW5pdF9tYWNhZGRyKGFoKTsKLQlpZiAoZWNvZGUgIT0gMCkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIE1BQyBhZGRyZXNzXG4iKTsKLQkJZ290byBiYWQ7CitpbnQgYXRoOWtfaHdfaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlpbnQgciA9IDA7CisKKwlpZiAoIWF0aDlrX2h3X2RldmlkX3N1cHBvcnRlZChhaC0+aHdfdmVyc2lvbi5kZXZpZCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWF0aDlrX2h3X2luaXRfZGVmYXVsdHMoYWgpOworCWF0aDlrX2h3X2luaXRfY29uZmlnKGFoKTsKKworCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLCAiQ291bGRuJ3QgcmVzZXQgY2hpcFxuIik7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChBUl9TUkVWXzkyODUoYWgpKQorCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwgIkNvdWxkbid0IHdha2V1cCBjaGlwXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKKwkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJIHx8CisJCSAgICAoQVJfU1JFVl85MjgwKGFoKSAmJiAhYWgtPmlzX3BjaWV4cHJlc3MpKSB7CisJCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwkJCQlTRVJfUkVHX01PREVfT047CisJCX0gZWxzZSB7CisJCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwkJCQlTRVJfUkVHX01PREVfT0ZGOworCQl9CisJfQorCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsICJzZXJpYWxpemVfcmVnbW9kZSBpcyAlZFxuIiwKKwkJYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSk7CisKKwlpZiAoIWF0aDlrX2h3X21hY3ZlcnNpb25fc3VwcG9ydGVkKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIk1hYyBDaGlwIFJldiAweCUwMnguJXggaXMgbm90IHN1cHBvcnRlZCBieSAiCisJCQkidGhpcyBkcml2ZXJcbiIsIGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24sCisJCQlhaC0+aHdfdmVyc2lvbi5tYWNSZXYpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKEFSX1NSRVZfOTEwMChhaCkpIHsKKwkJYWgtPmlxX2NhbGRhdGEuY2FsRGF0YSA9ICZpcV9jYWxfbXVsdGlfc2FtcGxlOworCQlhaC0+c3VwcF9jYWxzID0gSVFfTUlTTUFUQ0hfQ0FMOworCQlhaC0+aXNfcGNpZXhwcmVzcyA9IGZhbHNlOworCX0KKworCWlmIChBUl9TUkVWXzkyNzEoYWgpKQorCQlhaC0+aXNfcGNpZXhwcmVzcyA9IGZhbHNlOworCisJYWgtPmh3X3ZlcnNpb24ucGh5UmV2ID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9DSElQX0lEKTsKKworCWF0aDlrX2h3X2luaXRfY2FsX3NldHRpbmdzKGFoKTsKKworCWFoLT5hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlhaC0+YW5pX2Z1bmN0aW9uICY9IH5BVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw7CisKKwlhdGg5a19od19pbml0X21vZGVfcmVncyhhaCk7CisKKwlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCisJCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCk7CisJZWxzZQorCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CisKKwlyID0gYXRoOWtfaHdfcG9zdF9pbml0KGFoKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlhdGg5a19od19pbml0X21vZGVfZ2Fpbl9yZWdzKGFoKTsKKwlhdGg5a19od19maWxsX2NhcF9pbmZvKGFoKTsKKwlhdGg5a19od19pbml0XzExYV9lZXByb21fZml4KGFoKTsKKworCXIgPSBhdGg5a19od19pbml0X21hY2FkZHIoYWgpOworCWlmIChyKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIE1BQyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4NShhaCkgfHwgQVJfU1JFVl85MjcxKGFoKSkKIAkJYWgtPnR4X3RyaWdfbGV2ZWwgPSAoQVJfRlRSSUdfMjU2QiA+PiBBUl9GVFJJR19TKTsKIAllbHNlCiAJCWFoLT50eF90cmlnX2xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CiAKIAlhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKGFoKTsKIAotCXJldHVybiBhaDsKLWJhZDoKLQlpZiAoYWgpCi0JCWF0aDlrX2h3X2RldGFjaChhaCk7Ci0JaWYgKHN0YXR1cykKLQkJKnN0YXR1cyA9IGVjb2RlOwotCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfYmIoc3RydWN0IGF0aF9odyAqYWgsCkBAIC0xMTQ2LDMzICsxMjMwLDEyIEBACiB2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCi0JCWF0aDlrX2h3X2FuaV9kZXRhY2goYWgpOworCQlhdGg5a19od19hbmlfZGlzYWJsZShhaCk7CiAKLQlhdGg5a19od19yZmRldGFjaChhaCk7CisJYXRoOWtfaHdfcmZfZnJlZShhaCk7CiAJYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogCWtmcmVlKGFoKTsKLX0KLQotc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqZXJyb3IpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwotCi0Jc3dpdGNoIChkZXZpZCkgewotCWNhc2UgQVI1NDE2X0RFVklEX1BDSToKLQljYXNlIEFSNTQxNl9ERVZJRF9QQ0lFOgotCWNhc2UgQVI1NDE2X0FSOTEwMF9ERVZJRDoKLQljYXNlIEFSOTE2MF9ERVZJRF9QQ0k6Ci0JY2FzZSBBUjkyODBfREVWSURfUENJOgotCWNhc2UgQVI5MjgwX0RFVklEX1BDSUU6Ci0JY2FzZSBBUjkyODVfREVWSURfUENJRToKLQkJYWggPSBhdGg5a19od19kb19hdHRhY2goZGV2aWQsIHNjLCBlcnJvcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSplcnJvciA9IC1FTlhJTzsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGFoOworCWFoID0gTlVMTDsKIH0KIAogLyoqKioqKiovCkBAIC0xMTgyLDYgKzEyNDUsMjcgQEAKIHN0YXRpYyB2b2lkIGF0aDlrX2h3X292ZXJyaWRlX2luaShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogeworCXUzMiB2YWw7CisKKwlpZiAoQVJfU1JFVl85MjcxKGFoKSkgeworCQkvKgorCQkgKiBFbmFibGUgc3BlY3RyYWwgc2NhbiB0byBzb2x1dGlvbiBmb3IgaXNzdWVzIHdpdGggc3R1Y2sKKwkJICogYmVhY29ucyBvbiBBUjkyNzEgMS4wLiBUaGUgYmVhY29uIHN0dWNrIGlzc3VlIGlzIG5vdCBzZWVvbiBvbgorCQkgKiBBUjkyNzEgMS4xCisJCSAqLworCQlpZiAoQVJfU1JFVl85MjcxXzEwKGFoKSkgeworCQkJdmFsID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9TUEVDVFJBTF9TQ0FOKSB8IEFSX1BIWV9TUEVDVFJBTF9TQ0FOX0VOQUJMRTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1NQRUNUUkFMX1NDQU4sIHZhbCk7CisJCX0KKwkJZWxzZSBpZiAoQVJfU1JFVl85MjcxXzExKGFoKSkKKwkJCS8qCisJCQkgKiBjaGFuZ2UgQVJfUEhZX1JGX0NUTDMgc2V0dGluZyB0byBmaXggTUFDIGlzc3VlCisJCQkgKiBwcmVzZW50IG9uIEFSOTI3MSAxLjEKKwkJCSAqLworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMMywgMHgzYTAyMDAwMSk7CisJCXJldHVybjsKKwl9CisKIAkvKgogCSAqIFNldCB0aGUgUlhfQUJPUlQgYW5kIFJYX0RJUyBhbmQgY2xlYXIgaWYgb2ZmIG9ubHkgYWZ0ZXIKIAkgKiBSWEUgaXMgc2V0IGZvciBNQUMuIFRoaXMgcHJldmVudHMgZnJhbWVzIHdpdGggY29ycnVwdGVkCkBAIC0xMTkzLDcgKzEyNzcsMTAgQEAKIAlpZiAoIUFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgfHwKIAkgICAgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuOwotCisJLyoKKwkgKiBEaXNhYmxlIEJCIGNsb2NrIGdhdGluZworCSAqIE5lY2Vzc2FyeSB0byBhdm9pZCBpc3N1ZXMgb24gQVI1NDE2IDIuMAorCSAqLwogCVJFR19XUklURShhaCwgMHg5ODAwICsgKDY1MSA8PCAyKSwgMHgxMSk7CiB9CiAKQEAgLTEyNDUsMTEgKzEzMzIsMjEgQEAKIHsKIAl1MzIgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspCi0JCWFoLT5vcmlnaW5hbEdhaW5baV0gPQotCQkJTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCksCi0JCQkJCUFSX1BIWV9UWF9HQUlOKTsKLQlhaC0+UERBRENkZWx0YSA9IDA7CisJaWYgKE9MQ19GT1JfQVI5Mjg3XzEwX0xBVEVSKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDksCisJCQkJQVJfUEhZX1RYX1BXUkNUUkw5X1JFU19EQ19SRU1PVkFMKTsKKwkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg3X0FOX1RYUEMwLAorCQkJCUFSOTI4N19BTl9UWFBDMF9UWFBDTU9ERSwKKwkJCQlBUjkyODdfQU5fVFhQQzBfVFhQQ01PREVfUywKKwkJCQlBUjkyODdfQU5fVFhQQzBfVFhQQ01PREVfVEVNUFNFTlNFKTsKKwkJdWRlbGF5KDEwMCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSOTI4MF9UWF9HQUlOX1RBQkxFX1NJWkU7IGkrKykKKwkJCWFoLT5vcmlnaW5hbEdhaW5baV0gPQorCQkJCU1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQpLAorCQkJCQkJQVJfUEhZX1RYX0dBSU4pOworCQlhaC0+UERBRENkZWx0YSA9IDA7CisJfQogfQogCiBzdGF0aWMgdTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZywKQEAgLTEyNzEsNiArMTM2OCw3IEBACiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJaW50IGksIHJlZ1dyaXRlcyA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgbW9kZXNJbmRleCwgZnJlcUluZGV4OwpAQCAtMTM0MSwxMCArMTQzOSwxMSBAQAogCQlET19ERUxBWShyZWdXcml0ZXMpOwogCX0KIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQorCWlmIChBUl9TUkVWXzkyODAoYWgpIHx8IEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCiAJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkKKwlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpIHx8CisJICAgIEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCiAJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlDb21tb24uaWFfcm93czsgaSsrKSB7CkBAIC0xMzc2LDExICsxNDc1LDExIEBACiAJCWF0aDlrX29sY19pbml0KGFoKTsKIAogCWFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCQkgYXRoOWtfcmVnZF9nZXRfY3RsKCZhaC0+cmVndWxhdG9yeSwgY2hhbiksCisJCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bChyZWd1bGF0b3J5LCBjaGFuKSwKIAkJCQkgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCiAJCQkJIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCiAJCQkJIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKTsKKwkJCQkgKHUzMikgcmVndWxhdG9yeS0+cG93ZXJfbGltaXQpKTsKIAogCWlmICghYXRoOWtfaHdfc2V0X3JmX3JlZ3MoYWgsIGNoYW4sIGZyZXFJbmRleCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCkBAIC0xNDI0LDIzICsxNTIzLDQ4IEBACiB7CiAJdTMyIHJlZ3ZhbDsKIAorCS8qCisJICogc2V0IEFIQl9NT0RFIG5vdCB0byBkbyBjYWNoZWxpbmUgcHJlZmV0Y2hlcworCSovCiAJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX0FIQl9NT0RFKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0FIQl9NT0RFLCByZWd2YWwgfCBBUl9BSEJfUFJFRkVUQ0hfUkRfRU4pOwogCisJLyoKKwkgKiBsZXQgbWFjIGRtYSByZWFkcyBiZSBpbiAxMjggYnl0ZSBjaHVua3MKKwkgKi8KIAlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfVFhDRkcpICYgfkFSX1RYQ0ZHX0RNQVNaX01BU0s7CiAJUkVHX1dSSVRFKGFoLCBBUl9UWENGRywgcmVndmFsIHwgQVJfVFhDRkdfRE1BU1pfMTI4Qik7CiAKKwkvKgorCSAqIFJlc3RvcmUgVFggVHJpZ2dlciBMZXZlbCB0byBpdHMgcHJlLXJlc2V0IHZhbHVlLgorCSAqIFRoZSBpbml0aWFsIHZhbHVlIGRlcGVuZHMgb24gd2hldGhlciBhZ2dyZWdhdGlvbiBpcyBlbmFibGVkLCBhbmQgaXMKKwkgKiBhZGp1c3RlZCB3aGVuZXZlciB1bmRlcnJ1bnMgYXJlIGRldGVjdGVkLgorCSAqLwogCVJFR19STVdfRklFTEQoYWgsIEFSX1RYQ0ZHLCBBUl9GVFJJRywgYWgtPnR4X3RyaWdfbGV2ZWwpOwogCisJLyoKKwkgKiBsZXQgbWFjIGRtYSB3cml0ZXMgYmUgaW4gMTI4IGJ5dGUgY2h1bmtzCisJICovCiAJcmVndmFsID0gUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19ETUFTWl9NQVNLOwogCVJFR19XUklURShhaCwgQVJfUlhDRkcsIHJlZ3ZhbCB8IEFSX1JYQ0ZHX0RNQVNaXzEyOEIpOwogCisJLyoKKwkgKiBTZXR1cCByZWNlaXZlIEZJRk8gdGhyZXNob2xkIHRvIGhvbGQgb2ZmIFRYIGFjdGl2aXRpZXMKKwkgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1JYRklGT19DRkcsIDB4MjAwKTsKIAorCS8qCisJICogcmVkdWNlIHRoZSBudW1iZXIgb2YgdXNhYmxlIGVudHJpZXMgaW4gUENVIFRYQlVGIHRvIGF2b2lkCisJICogd3JhcCBhcm91bmQgaXNzdWVzLgorCSAqLwogCWlmIChBUl9TUkVWXzkyODUoYWgpKSB7CisJCS8qIEZvciBBUjkyODUgdGhlIG51bWJlciBvZiBGaWZvcyBhcmUgcmVkdWNlZCB0byBoYWxmLgorCQkgKiBTbyBzZXQgdGhlIHVzYWJsZSB0eCBidWYgc2l6ZSBhbHNvIHRvIGhhbGYgdG8KKwkJICogYXZvaWQgZGF0YS9kZWxpbWl0ZXIgdW5kZXJydW5zCisJCSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDVV9UWEJVRl9DVFJMLAogCQkJICBBUl85Mjg1X1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9TSVpFKTsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoIUFSX1NSRVZfOTI3MShhaCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ1VfVFhCVUZfQ1RSTCwKIAkJCSAgQVJfUENVX1RYQlVGX0NUUkxfVVNBQkxFX1NJWkUpOwogCX0KQEAgLTE1ODUsOCArMTcwOSwxNSBAQAogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCisJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKQorCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCBBUl9SQ19BSEIpOworCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVTRVQsIDApOwogCXVkZWxheSgyKTsKKworCWlmICghQVJfU1JFVl85MTAwKGFoKSkKKwkJUkVHX1dSSVRFKGFoLCBBUl9SQywgMCk7CisKIAlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRVNFVCwgMSk7CiAKIAlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsCkBAIC0xNjczLDYgKzE4MDQsNyBAQAogCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgc3ludGhEZWxheSwgcW51bTsKIApAQCAtMTcwNSwxMSArMTgzNywxMSBAQAogCX0KIAogCWFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKLQkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKCZhaC0+cmVndWxhdG9yeSwgY2hhbiksCisJCQkgICAgIGF0aDlrX3JlZ2RfZ2V0X2N0bChyZWd1bGF0b3J5LCBjaGFuKSwKIAkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCiAJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCiAJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCSAgICAgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKTsKKwkJCSAgICAgKHUzMikgcmVndWxhdG9yeS0+cG93ZXJfbGltaXQpKTsKIAogCXN5bnRoRGVsYXkgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1JYX0RFTEFZKSAmIEFSX1BIWV9SWF9ERUxBWV9ERUxBWTsKIAlpZiAoSVNfQ0hBTl9CKGNoYW4pKQpAQCAtMjI0NiwxNCArMjM3OCwzOSBAQAogCiAJYXRoOWtfaHdfbWFya19waHlfaW5hY3RpdmUoYWgpOwogCisJaWYgKEFSX1NSRVZfOTI3MShhaCkgJiYgYWgtPmh0Y19yZXNldF9pbml0KSB7CisJCVJFR19XUklURShhaCwKKwkJCSAgQVI5MjcxX1JFU0VUX1BPV0VSX0RPV05fQ09OVFJPTCwKKwkJCSAgQVI5MjcxX1JBRElPX1JGX1JTVCk7CisJCXVkZWxheSg1MCk7CisJfQorCiAJaWYgKCFhdGg5a19od19jaGlwX3Jlc2V0KGFoLCBjaGFuKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwgIkNoaXAgcmVzZXQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKEFSX1NSRVZfOTI3MShhaCkgJiYgYWgtPmh0Y19yZXNldF9pbml0KSB7CisJCWFoLT5odGNfcmVzZXRfaW5pdCA9IGZhbHNlOworCQlSRUdfV1JJVEUoYWgsCisJCQkgIEFSOTI3MV9SRVNFVF9QT1dFUl9ET1dOX0NPTlRST0wsCisJCQkgIEFSOTI3MV9HQVRFX01BQ19DVEwpOworCQl1ZGVsYXkoNTApOworCX0KKwogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQogCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsIEFSX0dQSU9fSlRBR19ESVNBQkxFKTsKIAorCWlmIChBUl9TUkVWXzkyODdfMTJfT1JfTEFURVIoYWgpKSB7CisJCS8qIEVuYWJsZSBBU1lOQyBGSUZPICovCisJCVJFR19TRVRfQklUKGFoLCBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHMywKKwkJCQlBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19EQVRBUEFUSF9TRUwpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX01PREUsIEFSX1BIWV9NT0RFX0FTWU5DRklGTyk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHMywKKwkJCQlBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19TT0ZUX1JFU0VUKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczLAorCQkJCUFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczX1NPRlRfUkVTRVQpOworCX0KIAlyID0gYXRoOWtfaHdfcHJvY2Vzc19pbmkoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0yMzMwLDYgKzI0ODcsMjcgQEAKIAogCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CiAKKwlpZiAoQVJfU1JFVl85Mjg3XzEyX09SX0xBVEVSKGFoKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX0RfR0JMX0lGU19TSUZTLAorCQkJICBBUl9EX0dCTF9JRlNfU0lGU19BU1lOQ19GSUZPX0RVUik7CisJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NMT1QsCisJCQkgIEFSX0RfR0JMX0lGU19TTE9UX0FTWU5DX0ZJRk9fRFVSKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9EX0dCTF9JRlNfRUlGUywKKwkJCSAgQVJfRF9HQkxfSUZTX0VJRlNfQVNZTkNfRklGT19EVVIpOworCisJCVJFR19XUklURShhaCwgQVJfVElNRV9PVVQsIEFSX1RJTUVfT1VUX0FDS19DVFNfQVNZTkNfRklGT19EVVIpOworCQlSRUdfV1JJVEUoYWgsIEFSX1VTRUMsIEFSX1VTRUNfQVNZTkNfRklGT19EVVIpOworCisJCVJFR19TRVRfQklUKGFoLCBBUl9NQUNfUENVX0xPR0lDX0FOQUxZWkVSLAorCQkJICAgIEFSX01BQ19QQ1VfTE9HSUNfQU5BTFlaRVJfRElTQlVHMjA3NjgpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BSEJfTU9ERSwgQVJfQUhCX0NVU1RPTV9CVVJTVF9FTiwKKwkJCSAgICAgIEFSX0FIQl9DVVNUT01fQlVSU1RfQVNZTkNfRklGT19WQUwpOworCX0KKwlpZiAoQVJfU1JFVl85Mjg3XzEyX09SX0xBVEVSKGFoKSkgeworCQlSRUdfU0VUX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTIsCisJCQkJQVJfUENVX01JU0NfTU9ERTJfRU5BQkxFX0FHR1dFUCk7CisJfQorCiAJUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLAogCQkgIFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKSB8IEFSX1NUQV9JRDFfUFJFU0VSVkVfU0VRTlVNKTsKIApAQCAtMjM0NSw3ICsyNTIzLDcgQEAKIAlhdGg5a19od19pbml0X2JiKGFoLCBjaGFuKTsKIAogCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKQotCQlyZXR1cm4gLUVJTzs7CisJCXJldHVybiAtRUlPOwogCiAJcnhfY2hhaW5tYXNrID0gYWgtPnJ4Y2hhaW5tYXNrOwogCWlmICgocnhfY2hhaW5tYXNrID09IDB4NSkgfHwgKHJ4X2NoYWlubWFzayA9PSAweDMpKSB7CkBAIC0yMzU1LDYgKzI1MzMsOSBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9DRkdfTEVELCBzYXZlTGVkU3RhdGUgfCBBUl9DRkdfU0NMS18zMktIWik7CiAKKwkvKgorCSAqIEZvciBiaWcgZW5kaWFuIHN5c3RlbXMgdHVybiBvbiBzd2FwcGluZyBmb3IgZGVzY3JpcHRvcnMKKwkgKi8KIAlpZiAoQVJfU1JFVl85MTAwKGFoKSkgewogCQl1MzIgbWFzazsKIAkJbWFzayA9IFJFR19SRUFEKGFoLCBBUl9DRkcpOwpAQCAtMjM2OSwxMSArMjU1MCwxOCBAQAogCQkJCSJTZXR0aW5nIENGRyAweCV4XG4iLCBSRUdfUkVBRChhaCwgQVJfQ0ZHKSk7CiAJCX0KIAl9IGVsc2UgeworCQkvKiBDb25maWd1cmUgQVI5MjcxIHRhcmdldCBXTEFOICovCisgICAgICAgICAgICAgICAgaWYgKEFSX1NSRVZfOTI3MShhaCkpCisJCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXUkIgfCBBUl9DRkdfU1dUQik7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JCVJFR19XUklURShhaCwgQVJfQ0ZHLCBBUl9DRkdfU1dURCB8IEFSX0NGR19TV1JEKTsKKyAgICAgICAgICAgICAgICBlbHNlCisJCQlSRUdfV1JJVEUoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXVEQgfCBBUl9DRkdfU1dSRCk7CiAjZW5kaWYKIAl9CiAKKwlpZiAoYWgtPmFoX3NjLT5zY19mbGFncyAmIFNDX09QX0JUQ09FWF9FTkFCTEVEKQorCQlhdGg5a19od19idGNvZXhfZW5hYmxlKGFoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNDEyLDkgKzI2MDAsNiBAQAogCiAJfQogCi0JaWYgKGFoLT5jdXJjaGFuID09IE5VTEwpCi0JCXJldHVybiB0cnVlOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI3MjgsNyArMjkxMyw4IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0cG93ZXJfbm9sb2NrKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpCiB7CiAJaW50IHN0YXR1cyA9IHRydWUsIHNldENoaXAgPSB0cnVlOwogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rlc1tdID0gewpAQCAtMjczOCw2ICsyOTI0LDkgQEAKIAkJIlVOREVGSU5FRCIKIAl9OwogCisJaWYgKGFoLT5wb3dlcl9tb2RlID09IG1vZGUpCisJCXJldHVybiBzdGF0dXM7CisKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgIiVzIC0+ICVzXG4iLAogCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdKTsKIApAQCAtMjc2Miw2ICsyOTUxLDUxIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorYm9vbCBhdGg5a19od19zZXRwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhaC0+YWhfc2MtPnNjX3BtX2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBhdGg5a19od19zZXRwb3dlcl9ub2xvY2soYWgsIG1vZGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhdGg5a19wc193YWtldXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworCWlmICgrK3NjLT5wc191c2Vjb3VudCAhPSAxKQorCQlnb3RvIHVubG9jazsKKworCWF0aDlrX2h3X3NldHBvd2VyX25vbG9jayhzYy0+c2NfYWgsIEFUSDlLX1BNX0FXQUtFKTsKKworIHVubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworfQorCit2b2lkIGF0aDlrX3BzX3Jlc3RvcmUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworCWlmICgtLXNjLT5wc191c2Vjb3VudCAhPSAwKQorCQlnb3RvIHVubG9jazsKKworCWlmIChzYy0+cHNfZW5hYmxlZCAmJgorCSAgICAhKHNjLT5zY19mbGFncyAmIChTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfAorCQkJICAgICAgU0NfT1BfV0FJVF9GT1JfQ0FCIHwKKwkJCSAgICAgIFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBIHwKKwkJCSAgICAgIFNDX09QX1dBSVRfRk9SX1RYX0FDSykpKQorCQlhdGg5a19od19zZXRwb3dlcl9ub2xvY2soc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKworIHVubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2NfcG1fbG9jaywgZmxhZ3MpOworfQorCiAvKgogICogSGVscGVyIGZvciBBU1BNIHN1cHBvcnQuCiAgKgpAQCAtMjc5MCw3ICszMDI0LDcgQEAKIAkJLyoKIAkJICogQVI5MjgwIDIuMCBvciBsYXRlciBjaGlwcyB1c2UgU2VyRGVzIHZhbHVlcyBmcm9tIHRoZQogCQkgKiBpbml0dmFscy5oIGluaXRpYWxpemVkIGRlcGVuZGluZyBvbiBjaGlwc2V0IGR1cmluZwotCQkgKiBhdGg5a19od19kb19hdHRhY2goKQorCQkgKiBhdGg5a19od19pbml0KCkKIAkJICovCiAJCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pUGNpZVNlcmRlcy5pYV9yb3dzOyBpKyspIHsKIAkJCVJFR19XUklURShhaCwgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlcywgaSwgMCksCkBAIC0yODUxLDcgKzMwODUsNyBAQAogCWlmIChhaC0+Y29uZmlnLnBjaWVfd2FlbikgewogCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+Y29uZmlnLnBjaWVfd2Flbik7CiAJfSBlbHNlIHsKLQkJaWYgKEFSX1NSRVZfOTI4NShhaCkpCisJCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI3MShhaCkgfHwgQVJfU1JFVl85Mjg3KGFoKSkKIAkJCVJFR19XUklURShhaCwgQVJfV0EsIEFSOTI4NV9XQV9ERUZBVUxUKTsKIAkJLyoKIAkJICogT24gQVI5MjgwIGNoaXBzIGJpdCAyMiBvZiAweDQwMDQgbmVlZHMgdG8gYmUgc2V0IHRvCkBAIC0yOTg1LDYgKzMyMTksMjMgQEAKIAlpZiAoQVJfU1JFVl85MTAwKGFoKSkKIAkJcmV0dXJuIHRydWU7CiAKKwlpZiAoaXNyICYgQVJfSVNSX0dFTlRNUikgeworCQl1MzIgczVfczsKKworCQlzNV9zID0gUkVHX1JFQUQoYWgsIEFSX0lTUl9TNV9TKTsKKwkJaWYgKGlzciAmIEFSX0lTUl9HRU5UTVIpIHsKKwkJCWFoLT5pbnRyX2dlbl90aW1lcl90cmlnZ2VyID0KKwkJCQlNUyhzNV9zLCBBUl9JU1JfUzVfR0VOVElNRVJfVFJJRyk7CisKKwkJCWFoLT5pbnRyX2dlbl90aW1lcl90aHJlc2ggPQorCQkJCU1TKHM1X3MsIEFSX0lTUl9TNV9HRU5USU1FUl9USFJFU0gpOworCisJCQlpZiAoYWgtPmludHJfZ2VuX3RpbWVyX3RyaWdnZXIpCisJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfR0VOVElNRVI7CisKKwkJfQorCX0KKwogCWlmIChzeW5jX2NhdXNlKSB7CiAJCWZhdGFsX2ludCA9CiAJCQkoc3luY19jYXVzZSAmCkBAIC0zMDIxLDExICszMjcyLDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2h3ICphaCkKLXsKLQlyZXR1cm4gYWgtPm1hc2tfcmVnOwotfQotCiBlbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgaW50cykKIHsKIAl1MzIgb21hc2sgPSBhaC0+bWFza19yZWc7CkBAIC0zMjYzLDI3ICszNTA5LDMwIEBACiB2b2lkIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKKwlzdHJ1Y3QgYXRoX2J0Y29leF9pbmZvICpidGNvZXhfaW5mbyA9ICZhaC0+YWhfc2MtPmJ0Y29leF9pbmZvOworCiAJdTE2IGNhcEZpZWxkID0gMCwgZWV2YWw7CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOwotCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSBlZXZhbDsKKwlyZWd1bGF0b3J5LT5jdXJyZW50X3JkID0gZWV2YWw7CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzEpOwogCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQogCQllZXZhbCB8PSBBUjkyODVfUkRFWFRfREVGQVVMVDsKLQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCA9IGVldmFsOworCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKIAljYXBGaWVsZCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKIAogCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCiAJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgewotCQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9PSAweDY0IHx8Ci0JCSAgICBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID09IDB4NjUpCi0JCQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkICs9IDU7Ci0JCWVsc2UgaWYgKGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPT0gMHg0MSkKLQkJCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSAweDQzOworCQlpZiAocmVndWxhdG9yeS0+Y3VycmVudF9yZCA9PSAweDY0IHx8CisJCSAgICByZWd1bGF0b3J5LT5jdXJyZW50X3JkID09IDB4NjUpCisJCQlyZWd1bGF0b3J5LT5jdXJyZW50X3JkICs9IDU7CisJCWVsc2UgaWYgKHJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPT0gMHg0MSkKKwkJCXJlZ3VsYXRvcnktPmN1cnJlbnRfcmQgPSAweDQzOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCk7CisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCByZWd1bGF0b3J5LT5jdXJyZW50X3JkKTsKIAl9CiAKIAllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CkBAIC0zMzA1LDcgKzM1NTQsNiBAQAogCX0KIAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExRykgewotCQlzZXRfYml0KEFUSDlLX01PREVfMTFCLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CiAJCXNldF9iaXQoQVRIOUtfTU9ERV8xMUcsIHBDYXAtPndpcmVsZXNzX21vZGVzKTsKIAkJaWYgKGFoLT5jb25maWcuaHRfZW5hYmxlKSB7CiAJCQlpZiAoIShlZXZhbCAmIEFSNTQxNl9PUEZMQUdTX05fMkdfSFQyMCkpCkBAIC0zMzIxLDEwICszNTY5LDE3IEBACiAJfQogCiAJcENhcC0+dHhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKKwkvKgorCSAqIEZvciBBUjkyNzEgd2Ugd2lsbCB0ZW1wb3JhcmlsbHkgdXNlcyB0aGUgcnggY2hhaW5tYXggYXMgcmVhZCBmcm9tCisJICogdGhlIEVFUFJPTS4KKwkgKi8KIAlpZiAoKGFoLT5od192ZXJzaW9uLmRldmlkID09IEFSNTQxNl9ERVZJRF9QQ0kpICYmCi0JICAgICEoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU18xMUEpKQorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSAmJgorCSAgICAhKEFSX1NSRVZfOTI3MShhaCkpKQorCQkvKiBDQjcxOiBHUElPIDAgaXMgcHVsbGVkIGRvd24gdG8gaW5kaWNhdGUgMyByeCBjaGFpbnMgKi8KIAkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OwogCWVsc2UKKwkJLyogVXNlIHJ4X2NoYWlubWFzayBmcm9tIEVFUFJPTS4gKi8KIAkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAogCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5od192ZXJzaW9uLm1hY1JldiA9PSAwKSkpCkBAIC0zNDEyLDcgKzM2NjcsNyBAQAogCWVsc2UKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlM7CiAKLQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZF9leHQgJiAoMSA8PCBSRUdfRVhUX0pBUEFOX01JREJBTkQpKSB7CisJaWYgKHJlZ3VsYXRvcnktPmN1cnJlbnRfcmRfZXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgewogCQlwQ2FwLT5yZWdfY2FwID0KIAkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBIHwKIAkJCUFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOIHwKQEAgLTM0MzEsMTYgKzM2ODYsMjYgQEAKIAlwQ2FwLT5udW1fYW50Y2ZnXzJnaHogPQogCQlhaC0+ZWVwX29wcy0+Z2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgYnRjb2V4X2VuYWJsZSkgewotCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9CVF9DT0VYOwotCQlhaC0+YnRhY3RpdmVfZ3BpbyA9IDY7Ci0JCWFoLT53bGFuYWN0aXZlX2dwaW8gPSA1OworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpICYmCisJICAgIGF0aF9idGNvZXhfc3VwcG9ydGVkKGFoLT5od192ZXJzaW9uLnN1YnN5c2lkKSkgeworCQlidGNvZXhfaW5mby0+YnRhY3RpdmVfZ3BpbyA9IEFUSF9CVEFDVElWRV9HUElPOworCQlidGNvZXhfaW5mby0+d2xhbmFjdGl2ZV9ncGlvID0gQVRIX1dMQU5BQ1RJVkVfR1BJTzsKKworCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkgeworCQkJYnRjb2V4X2luZm8tPmJ0Y29leF9zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18zV0lSRTsKKwkJCWJ0Y29leF9pbmZvLT5idHByaW9yaXR5X2dwaW8gPSBBVEhfQlRQUklPUklUWV9HUElPOworCQl9IGVsc2UgeworCQkJYnRjb2V4X2luZm8tPmJ0Y29leF9zY2hlbWUgPSBBVEhfQlRDT0VYX0NGR18yV0lSRTsKKwkJfQorCX0gZWxzZSB7CisJCWJ0Y29leF9pbmZvLT5idGNvZXhfc2NoZW1lID0gQVRIX0JUQ09FWF9DRkdfTk9ORTsKIAl9CiB9CiAKIGJvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKIAkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyICpyZXN1bHQpCiB7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWd1bGF0b3J5ID0gYXRoOWtfaHdfcmVndWxhdG9yeShhaCk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBBVEg5S19DQVBfQ0lQSEVSOgogCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKQEAgLTM0ODksMTMgKzM3NTQsMTMgQEAKIAkJY2FzZSAwOgogCQkJcmV0dXJuIDA7CiAJCWNhc2UgMToKLQkJCSpyZXN1bHQgPSBhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdDsKKwkJCSpyZXN1bHQgPSByZWd1bGF0b3J5LT5wb3dlcl9saW1pdDsKIAkJCXJldHVybiAwOwogCQljYXNlIDI6Ci0JCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsOworCQkJKnJlc3VsdCA9IHJlZ3VsYXRvcnktPm1heF9wb3dlcl9sZXZlbDsKIAkJCXJldHVybiAwOwogCQljYXNlIDM6Ci0JCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGU7CisJCQkqcmVzdWx0ID0gcmVndWxhdG9yeS0+dHBfc2NhbGU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CkBAIC0zNTk1LDcgKzM4NjAsOSBAQAogCWlmIChncGlvID49IGFoLT5jYXBzLm51bV9ncGlvX3BpbnMpCiAJCXJldHVybiAweGZmZmZmZmZmOwogCi0JaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTI4N18xMF9PUl9MQVRFUihhaCkpCisJCXJldHVybiBNU19SRUdfUkVBRChBUjkyODcsIGdwaW8pICE9IDA7CisJZWxzZSBpZiAoQVJfU1JFVl85Mjg1XzEwX09SX0xBVEVSKGFoKSkKIAkJcmV0dXJuIE1TX1JFR19SRUFEKEFSOTI4NSwgZ3BpbykgIT0gMDsKIAllbHNlIGlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQogCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVI5MjhYLCBncGlvKSAhPSAwOwpAQCAtMzY3Myw3ICszOTQwLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKLQkJYWgtPmRpdmVyc2l0eV9jb250cm9sID0gc2V0dGluZ3M7CisJCWFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wgPSBzZXR0aW5nczsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM3MDAsNyArMzk2Nyw4IEBACiB7CiAJdTMyIHBoeWJpdHM7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX1JYX0ZJTFRFUiwgKGJpdHMgJiAweGZmZmYpIHwgQVJfUlhfQ09NUFJfQkFSKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JYX0ZJTFRFUiwgYml0cyk7CisKIAlwaHliaXRzID0gMDsKIAlpZiAoYml0cyAmIEFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUikKIAkJcGh5Yml0cyB8PSBBUl9QSFlfRVJSX1JBREFSOwpAQCAtMzczMSwxNyArMzk5OSwxOCBAQAogCiB2b2lkIGF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBsaW1pdCkKIHsKKwlzdHJ1Y3QgYXRoX3JlZ3VsYXRvcnkgKnJlZ3VsYXRvcnkgPSBhdGg5a19od19yZWd1bGF0b3J5KGFoKTsKIAlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAKLQlhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCA9IG1pbihsaW1pdCwgKHUzMikgTUFYX1JBVEVfUE9XRVIpOworCXJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0ID0gbWluKGxpbWl0LCAodTMyKSBNQVhfUkFURV9QT1dFUik7CiAKIAlhaC0+ZWVwX29wcy0+c2V0X3R4cG93ZXIoYWgsIGNoYW4sCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bCgmYWgtPnJlZ3VsYXRvcnksIGNoYW4pLAorCQkJCSBhdGg5a19yZWdkX2dldF9jdGwocmVndWxhdG9yeSwgY2hhbiksCiAJCQkJIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAogCQkJCSBjaGFubmVsLT5tYXhfcG93ZXIgKiAyLAogCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICh1MzIpIGFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0KSk7CisJCQkJICh1MzIpIHJlZ3VsYXRvcnktPnBvd2VyX2xpbWl0KSk7CiB9CiAKIHZvaWQgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaHcgKmFoLCBjb25zdCB1OCAqbWFjKQpAQCAtMzc5MSwyOSArNDA2MCwyMiBAQAogCiB2b2lkIGF0aDlrX2h3X3Jlc2V0X3RzZihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlpbnQgY291bnQ7CisJYXRoOWtfcHNfd2FrZXVwKGFoLT5haF9zYyk7CisJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9TTFAzMl9NT0RFLCBBUl9TTFAzMl9UU0ZfV1JJVEVfU1RBVFVTLCAwLAorCQkJICAgQUhfVFNGX1dSSVRFX1RJTUVPVVQpKQorCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKKwkJCSJBUl9TTFAzMl9UU0ZfV1JJVEVfU1RBVFVTIGxpbWl0IGV4Y2VlZGVkXG4iKTsKIAotCWNvdW50ID0gMDsKLQl3aGlsZSAoUkVHX1JFQUQoYWgsIEFSX1NMUDMyX01PREUpICYgQVJfU0xQMzJfVFNGX1dSSVRFX1NUQVRVUykgewotCQljb3VudCsrOwotCQlpZiAoY291bnQgPiAxMCkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCi0JCQkJIkFSX1NMUDMyX1RTRl9XUklURV9TVEFUVVMgbGltaXQgZXhjZWVkZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdWRlbGF5KDEwKTsKLQl9CiAJUkVHX1dSSVRFKGFoLCBBUl9SRVNFVF9UU0YsIEFSX1JFU0VUX1RTRl9PTkNFKTsKKwlhdGg5a19wc19yZXN0b3JlKGFoLT5haF9zYyk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHNldHRpbmcpCit2b2lkIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBzZXR0aW5nKQogewogCWlmIChzZXR0aW5nKQogCQlhaC0+bWlzY19tb2RlIHw9IEFSX1BDVV9UWF9BRERfVFNGOwogCWVsc2UKIAkJYWgtPm1pc2NfbW9kZSAmPSB+QVJfUENVX1RYX0FERF9UU0Y7Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKQpAQCAtMzg0MiwyOSArNDEwNCwyMTAgQEAKIAlSRUdfV1JJVEUoYWgsIEFSXzIwNDBfTU9ERSwgbWFjbW9kZSk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgQmx1ZXRvb3RoIENvZXhpc3RlbmNlICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEhXIEdlbmVyaWMgdGltZXJzIGNvbmZpZ3VyYXRpb24gKi8KIAotdm9pZCBhdGg5a19od19idGNvZXhfZW5hYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQorc3RhdGljIGNvbnN0IHN0cnVjdCBhdGhfZ2VuX3RpbWVyX2NvbmZpZ3VyYXRpb24gZ2VuX3Rtcl9jb25maWd1cmF0aW9uW10gPQogewotCS8qIGNvbm5lY3QgYnRfYWN0aXZlIHRvIGJhc2ViYW5kICovCi0JUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfRU5fVkFMLAotCQkJKEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX1BSSU9SSVRZX0RFRiB8Ci0JCQkgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfRlJFUVVFTkNZX0RFRikpOworCXtBUl9ORVhUX05EUF9USU1FUiwgQVJfTkRQX1BFUklPRCwgQVJfVElNRVJfTU9ERSwgMHgwMDgwfSwKKwl7QVJfTkVYVF9ORFBfVElNRVIsIEFSX05EUF9QRVJJT0QsIEFSX1RJTUVSX01PREUsIDB4MDA4MH0sCisJe0FSX05FWFRfTkRQX1RJTUVSLCBBUl9ORFBfUEVSSU9ELCBBUl9USU1FUl9NT0RFLCAweDAwODB9LAorCXtBUl9ORVhUX05EUF9USU1FUiwgQVJfTkRQX1BFUklPRCwgQVJfVElNRVJfTU9ERSwgMHgwMDgwfSwKKwl7QVJfTkVYVF9ORFBfVElNRVIsIEFSX05EUF9QRVJJT0QsIEFSX1RJTUVSX01PREUsIDB4MDA4MH0sCisJe0FSX05FWFRfTkRQX1RJTUVSLCBBUl9ORFBfUEVSSU9ELCBBUl9USU1FUl9NT0RFLCAweDAwODB9LAorCXtBUl9ORVhUX05EUF9USU1FUiwgQVJfTkRQX1BFUklPRCwgQVJfVElNRVJfTU9ERSwgMHgwMDgwfSwKKwl7QVJfTkVYVF9ORFBfVElNRVIsIEFSX05EUF9QRVJJT0QsIEFSX1RJTUVSX01PREUsIDB4MDA4MH0sCisJe0FSX05FWFRfTkRQMl9USU1FUiwgQVJfTkRQMl9QRVJJT0QsIEFSX05EUDJfVElNRVJfTU9ERSwgMHgwMDAxfSwKKwl7QVJfTkVYVF9ORFAyX1RJTUVSICsgMSo0LCBBUl9ORFAyX1BFUklPRCArIDEqNCwKKwkJCQlBUl9ORFAyX1RJTUVSX01PREUsIDB4MDAwMn0sCisJe0FSX05FWFRfTkRQMl9USU1FUiArIDIqNCwgQVJfTkRQMl9QRVJJT0QgKyAyKjQsCisJCQkJQVJfTkRQMl9USU1FUl9NT0RFLCAweDAwMDR9LAorCXtBUl9ORVhUX05EUDJfVElNRVIgKyAzKjQsIEFSX05EUDJfUEVSSU9EICsgMyo0LAorCQkJCUFSX05EUDJfVElNRVJfTU9ERSwgMHgwMDA4fSwKKwl7QVJfTkVYVF9ORFAyX1RJTUVSICsgNCo0LCBBUl9ORFAyX1BFUklPRCArIDQqNCwKKwkJCQlBUl9ORFAyX1RJTUVSX01PREUsIDB4MDAxMH0sCisJe0FSX05FWFRfTkRQMl9USU1FUiArIDUqNCwgQVJfTkRQMl9QRVJJT0QgKyA1KjQsCisJCQkJQVJfTkRQMl9USU1FUl9NT0RFLCAweDAwMjB9LAorCXtBUl9ORVhUX05EUDJfVElNRVIgKyA2KjQsIEFSX05EUDJfUEVSSU9EICsgNio0LAorCQkJCUFSX05EUDJfVElNRVJfTU9ERSwgMHgwMDQwfSwKKwl7QVJfTkVYVF9ORFAyX1RJTUVSICsgNyo0LCBBUl9ORFAyX1BFUklPRCArIDcqNCwKKwkJCQlBUl9ORFAyX1RJTUVSX01PREUsIDB4MDA4MH0KK307CiAKLQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCi0JCQlBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkIpOworLyogSFcgZ2VuZXJpYyB0aW1lciBwcmltaXRpdmVzICovCiAKLQkvKiBTZXQgaW5wdXQgbXV4IGZvciBidF9hY3RpdmUgdG8gZ3BpbyBwaW4gKi8KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCi0JCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAotCQkJYWgtPmJ0YWN0aXZlX2dwaW8pOworLyogY29tcHV0ZSBhbmQgY2xlYXIgaW5kZXggb2YgcmlnaHRtb3N0IDEgKi8KK3N0YXRpYyB1MzIgcmlnaHRtb3N0X2luZGV4KHN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlICp0aW1lcl90YWJsZSwgdTMyICptYXNrKQoreworCXUzMiBiOwogCi0JLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIGdwaW8gcG9ydCBmb3IgaW5wdXQgKi8KLQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmJ0YWN0aXZlX2dwaW8pOworCWIgPSAqbWFzazsKKwliICY9ICgwLWIpOworCSptYXNrICY9IH5iOworCWIgKj0gZGVicnVpam4zMjsKKwliID4+PSAyNzsKIAotCS8qIENvbmZpZ3VyZSB0aGUgZGVzaXJlZCBHUElPIHBvcnQgZm9yIFRYX0ZSQU1FIG91dHB1dCAqLwotCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIGFoLT53bGFuYWN0aXZlX2dwaW8sCi0JCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1RYX0ZSQU1FKTsKKwlyZXR1cm4gdGltZXJfdGFibGUtPmdlbl90aW1lcl9pbmRleFtiXTsKK30KKwordTMyIGF0aDlrX2h3X2dldHRzZjMyKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiBSRUdfUkVBRChhaCwgQVJfVFNGX0wzMik7Cit9CisKK3N0cnVjdCBhdGhfZ2VuX3RpbWVyICphdGhfZ2VuX3RpbWVyX2FsbG9jKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHZvaWQgKCp0cmlnZ2VyKSh2b2lkICopLAorCQkJCQkgIHZvaWQgKCpvdmVyZmxvdykodm9pZCAqKSwKKwkJCQkJICB2b2lkICphcmcsCisJCQkJCSAgdTggdGltZXJfaW5kZXgpCit7CisJc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcjsKKworCXRpbWVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9nZW5fdGltZXIpLCBHRlBfS0VSTkVMKTsKKworCWlmICh0aW1lciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IgorCQkgICAgICAgImZvciBodyB0aW1lclslZF1cbiIsIHRpbWVyX2luZGV4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogYWxsb2NhdGUgYSBoYXJkd2FyZSBnZW5lcmljIHRpbWVyIHNsb3QgKi8KKwl0aW1lcl90YWJsZS0+dGltZXJzW3RpbWVyX2luZGV4XSA9IHRpbWVyOworCXRpbWVyLT5pbmRleCA9IHRpbWVyX2luZGV4OworCXRpbWVyLT50cmlnZ2VyID0gdHJpZ2dlcjsKKwl0aW1lci0+b3ZlcmZsb3cgPSBvdmVyZmxvdzsKKwl0aW1lci0+YXJnID0gYXJnOworCisJcmV0dXJuIHRpbWVyOworfQorCit2b2lkIGF0aF9nZW5fdGltZXJfc3RhcnQoc3RydWN0IGF0aF9odyAqYWgsCisJCQkgc3RydWN0IGF0aF9nZW5fdGltZXIgKnRpbWVyLAorCQkJIHUzMiB0aW1lcl9uZXh0LCB1MzIgdGltZXJfcGVyaW9kKQoreworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlICp0aW1lcl90YWJsZSA9ICZhaC0+aHdfZ2VuX3RpbWVyczsKKwl1MzIgdHNmOworCisJQlVHX09OKCF0aW1lcl9wZXJpb2QpOworCisJc2V0X2JpdCh0aW1lci0+aW5kZXgsICZ0aW1lcl90YWJsZS0+dGltZXJfbWFzay50aW1lcl9iaXRzKTsKKworCXRzZiA9IGF0aDlrX2h3X2dldHRzZjMyKGFoKTsKKworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0hXVElNRVIsICJjdXJlbnQgdHNmICV4IHBlcmlvZCAleCIKKwkJInRpbWVyX25leHQgJXhcbiIsIHRzZiwgdGltZXJfcGVyaW9kLCB0aW1lcl9uZXh0KTsKKworCS8qCisJICogUHVsbCB0aW1lcl9uZXh0IGZvcndhcmQgaWYgdGhlIGN1cnJlbnQgVFNGIGFscmVhZHkgcGFzc2VkIGl0CisJICogYmVjYXVzZSBvZiBzb2Z0d2FyZSBsYXRlbmN5CisJICovCisJaWYgKHRpbWVyX25leHQgPCB0c2YpCisJCXRpbWVyX25leHQgPSB0c2YgKyB0aW1lcl9wZXJpb2Q7CisKKwkvKgorCSAqIFByb2dyYW0gZ2VuZXJpYyB0aW1lciByZWdpc3RlcnMKKwkgKi8KKwlSRUdfV1JJVEUoYWgsIGdlbl90bXJfY29uZmlndXJhdGlvblt0aW1lci0+aW5kZXhdLm5leHRfYWRkciwKKwkJIHRpbWVyX25leHQpOworCVJFR19XUklURShhaCwgZ2VuX3Rtcl9jb25maWd1cmF0aW9uW3RpbWVyLT5pbmRleF0ucGVyaW9kX2FkZHIsCisJCSAgdGltZXJfcGVyaW9kKTsKKwlSRUdfU0VUX0JJVChhaCwgZ2VuX3Rtcl9jb25maWd1cmF0aW9uW3RpbWVyLT5pbmRleF0ubW9kZV9hZGRyLAorCQkgICAgZ2VuX3Rtcl9jb25maWd1cmF0aW9uW3RpbWVyLT5pbmRleF0ubW9kZV9tYXNrKTsKKworCS8qIEVuYWJsZSBib3RoIHRyaWdnZXIgYW5kIHRocmVzaCBpbnRlcnJ1cHQgbWFza3MgKi8KKwlSRUdfU0VUX0JJVChhaCwgQVJfSU1SX1M1LAorCQkoU00oQVJfR0VOVE1SX0JJVCh0aW1lci0+aW5kZXgpLCBBUl9JTVJfUzVfR0VOVElNRVJfVEhSRVNIKSB8CisJCVNNKEFSX0dFTlRNUl9CSVQodGltZXItPmluZGV4KSwgQVJfSU1SX1M1X0dFTlRJTUVSX1RSSUcpKSk7CisKKwlpZiAoKGFoLT5haF9zYy0+aW1hc2sgJiBBVEg5S19JTlRfR0VOVElNRVIpID09IDApIHsKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCQlhaC0+YWhfc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9HRU5USU1FUjsKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5haF9zYy0+aW1hc2spOworCX0KK30KKwordm9pZCBhdGhfZ2VuX3RpbWVyX3N0b3Aoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgYXRoX2dlbl90aW1lcl90YWJsZSAqdGltZXJfdGFibGUgPSAmYWgtPmh3X2dlbl90aW1lcnM7CisKKwlpZiAoKHRpbWVyLT5pbmRleCA8IEFSX0ZJUlNUX05EUF9USU1FUikgfHwKKwkJKHRpbWVyLT5pbmRleCA+PSBBVEhfTUFYX0dFTl9USU1FUikpIHsKKwkJcmV0dXJuOworCX0KKworCS8qIENsZWFyIGdlbmVyaWMgdGltZXIgZW5hYmxlIGJpdHMuICovCisJUkVHX0NMUl9CSVQoYWgsIGdlbl90bXJfY29uZmlndXJhdGlvblt0aW1lci0+aW5kZXhdLm1vZGVfYWRkciwKKwkJCWdlbl90bXJfY29uZmlndXJhdGlvblt0aW1lci0+aW5kZXhdLm1vZGVfbWFzayk7CisKKwkvKiBEaXNhYmxlIGJvdGggdHJpZ2dlciBhbmQgdGhyZXNoIGludGVycnVwdCBtYXNrcyAqLworCVJFR19DTFJfQklUKGFoLCBBUl9JTVJfUzUsCisJCShTTShBUl9HRU5UTVJfQklUKHRpbWVyLT5pbmRleCksIEFSX0lNUl9TNV9HRU5USU1FUl9USFJFU0gpIHwKKwkJU00oQVJfR0VOVE1SX0JJVCh0aW1lci0+aW5kZXgpLCBBUl9JTVJfUzVfR0VOVElNRVJfVFJJRykpKTsKKworCWNsZWFyX2JpdCh0aW1lci0+aW5kZXgsICZ0aW1lcl90YWJsZS0+dGltZXJfbWFzay50aW1lcl9iaXRzKTsKKworCS8qIGlmIG5vIHRpbWVyIGlzIGVuYWJsZWQsIHR1cm4gb2ZmIGludGVycnVwdCBtYXNrICovCisJaWYgKHRpbWVyX3RhYmxlLT50aW1lcl9tYXNrLnZhbCA9PSAwKSB7CisJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKKwkJYWgtPmFoX3NjLT5pbWFzayAmPSB+QVRIOUtfSU5UX0dFTlRJTUVSOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmFoX3NjLT5pbWFzayk7CisJfQorfQorCit2b2lkIGF0aF9nZW5fdGltZXJfZnJlZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9nZW5fdGltZXIgKnRpbWVyKQoreworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlICp0aW1lcl90YWJsZSA9ICZhaC0+aHdfZ2VuX3RpbWVyczsKKworCS8qIGZyZWUgdGhlIGhhcmR3YXJlIGdlbmVyaWMgdGltZXIgc2xvdCAqLworCXRpbWVyX3RhYmxlLT50aW1lcnNbdGltZXItPmluZGV4XSA9IE5VTEw7CisJa2ZyZWUodGltZXIpOworfQorCisvKgorICogR2VuZXJpYyBUaW1lciBJbnRlcnJ1cHRzIGhhbmRsaW5nCisgKi8KK3ZvaWQgYXRoX2dlbl90aW1lcl9pc3Ioc3RydWN0IGF0aF9odyAqYWgpCit7CisJc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcjsKKwl1MzIgdHJpZ2dlcl9tYXNrLCB0aHJlc2hfbWFzaywgaW5kZXg7CisKKwkvKiBnZXQgaGFyZHdhcmUgZ2VuZXJpYyB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzICovCisJdHJpZ2dlcl9tYXNrID0gYWgtPmludHJfZ2VuX3RpbWVyX3RyaWdnZXI7CisJdGhyZXNoX21hc2sgPSBhaC0+aW50cl9nZW5fdGltZXJfdGhyZXNoOworCXRyaWdnZXJfbWFzayAmPSB0aW1lcl90YWJsZS0+dGltZXJfbWFzay52YWw7CisJdGhyZXNoX21hc2sgJj0gdGltZXJfdGFibGUtPnRpbWVyX21hc2sudmFsOworCisJdHJpZ2dlcl9tYXNrICY9IH50aHJlc2hfbWFzazsKKworCXdoaWxlICh0aHJlc2hfbWFzaykgeworCQlpbmRleCA9IHJpZ2h0bW9zdF9pbmRleCh0aW1lcl90YWJsZSwgJnRocmVzaF9tYXNrKTsKKwkJdGltZXIgPSB0aW1lcl90YWJsZS0+dGltZXJzW2luZGV4XTsKKwkJQlVHX09OKCF0aW1lcik7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0hXVElNRVIsCisJCQkiVFNGIG92ZXJmbG93IGZvciBHZW4gdGltZXIgJWRcbiIsIGluZGV4KTsKKwkJdGltZXItPm92ZXJmbG93KHRpbWVyLT5hcmcpOworCX0KKworCXdoaWxlICh0cmlnZ2VyX21hc2spIHsKKwkJaW5kZXggPSByaWdodG1vc3RfaW5kZXgodGltZXJfdGFibGUsICZ0cmlnZ2VyX21hc2spOworCQl0aW1lciA9IHRpbWVyX3RhYmxlLT50aW1lcnNbaW5kZXhdOworCQlCVUdfT04oIXRpbWVyKTsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfSFdUSU1FUiwKKwkJCSJHZW4gdGltZXJbJWRdIHRyaWdnZXJcbiIsIGluZGV4KTsKKwkJdGltZXItPnRyaWdnZXIodGltZXItPmFyZyk7CisJfQorfQorCisvKgorICogUHJpbWl0aXZlIHRvIGRpc2FibGUgQVNQTQorICovCit2b2lkIGF0aF9wY2llX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoc2MtPmRldik7CisJdTggYXNwbTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIEFUSF9QQ0lFX0NBUF9MSU5LX0NUUkwsICZhc3BtKTsKKwlhc3BtICY9IH4oQVRIX1BDSUVfQ0FQX0xJTktfTDBTIHwgQVRIX1BDSUVfQ0FQX0xJTktfTDEpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBBVEhfUENJRV9DQVBfTElOS19DVFJMLCBhc3BtKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKaW5kZXggOWQwYjMxYS4uOTEwNmEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmgKQEAgLTQyLDYgKzQyLDEzIEBACiAjZGVmaW5lIEFSX1NVQlZFTkRPUl9JRF9ORVdfQQkweDcwNjUKICNkZWZpbmUgQVI1NDE2X01BR0lDCQkweDE5NjQxMDE0CiAKKyNkZWZpbmUgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0kgIDB4MDAyRAorI2RlZmluZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUUgMHgwMDJFCisKKyNkZWZpbmUgQVI5MjgwX0NPRVgyV0lSRV9TVUJTWVNJRAkweDMwOWIKKyNkZWZpbmUgQVQ5Mjg1X0NPRVgzV0lSRV9TQV9TVUJTWVNJRAkweDMwYWEKKyNkZWZpbmUgQVQ5Mjg1X0NPRVgzV0lSRV9EQV9TVUJTWVNJRAkweDMwYWIKKwogLyogUmVnaXN0ZXIgcmVhZC93cml0ZSBwcmltaXRpdmVzICovCiAjZGVmaW5lIFJFR19XUklURShfYWgsIF9yZWcsIF92YWwpIGF0aDlrX2lvd3JpdGUzMigoX2FoKSwgKF9yZWcpLCAoX3ZhbCkpCiAjZGVmaW5lIFJFR19SRUFEKF9haCwgX3JlZykgYXRoOWtfaW9yZWFkMzIoKF9haCksIChfcmVnKSkKQEAgLTc2LDYgKzgzLDcgQEAKICNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfQVRURU5USU9OX0xFRCAxCiAjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX1BPV0VSX0xFRCAgICAgMgogI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUgICAgICAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1JYX0NMRUFSX0VYVEVSTkFMICA0CiAjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfTkVUV09SS19MRUQgICAgNQogI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfTUFDX1BPV0VSX0xFRCAgICAgIDYKIApAQCAtOTUsNiArMTAzLDcgQEAKIAogI2RlZmluZSBNQVhfUkFURV9QT1dFUiAgICAgICAgICAgICAgNjMKICNkZWZpbmUgQUhfV0FJVF9USU1FT1VUICAgICAgICAgICAgIDEwMDAwMCAvKiAodXMpICovCisjZGVmaW5lIEFIX1RTRl9XUklURV9USU1FT1VUICAgICAgICAxMDAgICAgLyogKHVzKSAqLwogI2RlZmluZSBBSF9USU1FX1FVQU5UVU0gICAgICAgICAgICAgMTAKICNkZWZpbmUgQVJfS0VZVEFCTEVfU0laRSAgICAgICAgICAgIDEyOAogI2RlZmluZSBQT1dFUl9VUF9USU1FICAgICAgICAgICAgICAgMjAwMDAwCkBAIC0xMTMsMTUgKzEyMiwyMCBAQAogCiBlbnVtIHdpcmVsZXNzX21vZGUgewogCUFUSDlLX01PREVfMTFBID0gMCwKLQlBVEg5S19NT0RFXzExQiA9IDIsCi0JQVRIOUtfTU9ERV8xMUcgPSAzLAotCUFUSDlLX01PREVfMTFOQV9IVDIwID0gNiwKLQlBVEg5S19NT0RFXzExTkdfSFQyMCA9IDcsCi0JQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTID0gOCwKLQlBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTID0gOSwKLQlBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMgPSAxMCwKLQlBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTID0gMTEsCi0JQVRIOUtfTU9ERV9NQVgKKwlBVEg5S19NT0RFXzExRywKKwlBVEg5S19NT0RFXzExTkFfSFQyMCwKKwlBVEg5S19NT0RFXzExTkdfSFQyMCwKKwlBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVMsCisJQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUywKKwlBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUywKKwlBVEg5S19NT0RFX01BWCwKK307CisKK2VudW0gYXRoOWtfYW50X3NldHRpbmcgeworCUFUSDlLX0FOVF9WQVJJQUJMRSA9IDAsCisJQVRIOUtfQU5UX0ZJWEVEX0EsCisJQVRIOUtfQU5UX0ZJWEVEX0IKIH07CiAKIGVudW0gYXRoOWtfaHdfY2FwcyB7CkBAIC0xNDIsNyArMTU2LDYgQEAKIAlBVEg5S19IV19DQVBfRU5IQU5DRURQTSAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAogCUFUSDlLX0hXX0NBUF9BVVRPU0xFRVAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCiAJQVRIOUtfSFdfQ0FQXzRLQl9TUExJVFRSQU5TICAgICAgICAgICAgID0gQklUKDE2KSwKLQlBVEg5S19IV19DQVBfQlRfQ09FWAkJCT0gQklUKDE3KQogfTsKIAogZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgewpAQCAtMTg4LDcgKzIwMSw3IEBACiAJdTMyIGNja190cmlnX2hpZ2g7CiAJdTMyIGNja190cmlnX2xvdzsKIAl1MzIgZW5hYmxlX2FuaTsKLQl1MTYgZGl2ZXJzaXR5X2NvbnRyb2w7CisJZW51bSBhdGg5a19hbnRfc2V0dGluZyBkaXZlcnNpdHlfY29udHJvbDsKIAl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKIAlpbnQgc2VyaWFsaXplX3JlZ21vZGU7CiAJYm9vbCBpbnRyX21pdGlnYXRpb247CkBAIC0yMjksNiArMjQyLDcgQEAKIAlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCiAJQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCiAJQVRIOUtfSU5UX1RTRk9PUiA9IDB4MDQwMDAwMDAsCisJQVRIOUtfSU5UX0dFTlRJTUVSID0gMHgwODAwMDAwMCwKIAlBVEg5S19JTlRfQ1NUID0gMHgxMDAwMDAwMCwKIAlBVEg5S19JTlRfR1RUID0gMHgyMDAwMDAwMCwKIAlBVEg5S19JTlRfRkFUQUwgPSAweDQwMDAwMDAwLApAQCAtMzI3LDEyICszNDEsNiBAQAogCUFUSDlLX1BNX1VOREVGSU5FRAogfTsKIAotZW51bSBhdGg5a19hbnRfc2V0dGluZyB7Ci0JQVRIOUtfQU5UX1ZBUklBQkxFID0gMCwKLQlBVEg5S19BTlRfRklYRURfQSwKLQlBVEg5S19BTlRfRklYRURfQgotfTsKLQogZW51bSBhdGg5a190cF9zY2FsZSB7CiAJQVRIOUtfVFBfU0NBTEVfTUFYID0gMCwKIAlBVEg5S19UUF9TQ0FMRV81MCwKQEAgLTM4Niw2ICszOTQsNDIgQEAKIAl1MTYgcGh5UmV2OwogCXUxNiBhbmFsb2c1R2h6UmV2OwogCXUxNiBhbmFsb2cyR2h6UmV2OworCXUxNiBzdWJzeXNpZDsKK307CisKKy8qIEdlbmVyaWMgVFNGIHRpbWVyIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgQVRIX01BWF9HRU5fVElNRVIJMTYKKworI2RlZmluZSBBUl9HRU5UTVJfQklUKF9pbmRleCkJKDEgPDwgKF9pbmRleCkpCisKKy8qCisgKiBVc2luZyBkZSBCcnVpamluIHNlcXVlbmNlIHRvIHRvIGxvb2sgdXAgMSdzIGluZGV4IGluIGEgMzIgYml0IG51bWJlcgorICogZGVicnVpam4zMiA9IDAwMDAgMDExMSAwMTExIDExMDAgMTAxMSAwMTAxIDAwMTEgMDAwMQorICovCisjZGVmaW5lIGRlYnJ1aWpuMzIgMHgwNzdDQjUzMVVMCisKK3N0cnVjdCBhdGhfZ2VuX3RpbWVyX2NvbmZpZ3VyYXRpb24geworCXUzMiBuZXh0X2FkZHI7CisJdTMyIHBlcmlvZF9hZGRyOworCXUzMiBtb2RlX2FkZHI7CisJdTMyIG1vZGVfbWFzazsKK307CisKK3N0cnVjdCBhdGhfZ2VuX3RpbWVyIHsKKwl2b2lkICgqdHJpZ2dlcikodm9pZCAqYXJnKTsKKwl2b2lkICgqb3ZlcmZsb3cpKHZvaWQgKmFyZyk7CisJdm9pZCAqYXJnOworCXU4IGluZGV4OworfTsKKworc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgeworCXUzMiBnZW5fdGltZXJfaW5kZXhbMzJdOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcnNbQVRIX01BWF9HRU5fVElNRVJdOworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZyB0aW1lcl9iaXRzOworCQl1MTYgdmFsOworCX0gdGltZXJfbWFzazsKIH07CiAKIHN0cnVjdCBhdGhfaHcgewpAQCAtMzkzLDEzICs0MzcsMTMgQEAKIAlzdHJ1Y3QgYXRoOWtfaHdfdmVyc2lvbiBod192ZXJzaW9uOwogCXN0cnVjdCBhdGg5a19vcHNfY29uZmlnIGNvbmZpZzsKIAlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzIGNhcHM7Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5IHJlZ3VsYXRvcnk7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgY2hhbm5lbHNbMzhdOwogCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuOwogCiAJdW5pb24gewogCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgZGVmOwogCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayBtYXA0azsKKwkJc3RydWN0IGFyOTI4N19lZXByb20gbWFwOTI4NzsKIAl9IGVlcHJvbTsKIAljb25zdCBzdHJ1Y3QgZWVwcm9tX29wcyAqZWVwX29wczsKIAllbnVtIGF0aDlrX2VlcF9tYXAgZWVwX21hcDsKQEAgLTQxMSwxNSArNDU1LDE1IEBACiAJdTE2IHJmc2lsZW50OwogCXUzMiByZmtpbGxfZ3BpbzsKIAl1MzIgcmZraWxsX3BvbGFyaXR5OwotCXUzMiBidGFjdGl2ZV9ncGlvOwotCXUzMiB3bGFuYWN0aXZlX2dwaW87CiAJdTMyIGFoX2ZsYWdzOwogCisJYm9vbCBodGNfcmVzZXRfaW5pdDsKKwogCWVudW0gbmw4MDIxMV9pZnR5cGUgb3Btb2RlOwogCWVudW0gYXRoOWtfcG93ZXJfbW9kZSBwb3dlcl9tb2RlOwotCWVudW0gYXRoOWtfcG93ZXJfbW9kZSByZXN0b3JlX21vZGU7CiAKIAlzdHJ1Y3QgYXRoOWtfbmZjYWxfaGlzdCBuZkNhbEhpc3RbTlVNX05GX1JFQURJTkdTXTsKKwlzdHJ1Y3QgYXRoOWtfcGFjYWxfaW5mbyBwYWNhbF9pbmZvOwogCXN0cnVjdCBhcjU0MTZTdGF0cyBzdGF0czsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyB0eHFbQVRIOUtfTlVNX1RYX1FVRVVFU107CiAKQEAgLTQzMiw4ICs0NzYsNiBAQAogCXUzMiB0eHVybl9pbnRlcnJ1cHRfbWFzazsKIAlib29sIGNoaXBfZnVsbHNsZWVwOwogCXUzMiBhdGltX3dpbmRvdzsKLQl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKLQllbnVtIGF0aDlrX2FudF9zZXR0aW5nIGRpdmVyc2l0eV9jb250cm9sOwogCiAJLyogQ2FsaWJyYXRpb24gKi8KIAllbnVtIGF0aDlrX2NhbF90eXBlcyBzdXBwX2NhbHM7CkBAIC01MDIsNyArNTQ0LDYgQEAKIAogCS8qIEFOSSAqLwogCXUzMiBwcm9jX3BoeWVycjsKLQlib29sIGhhc19od19waHljb3VudGVyczsKIAl1MzIgYW5pcGVyaW9kOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqY3VyYW5pOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSBhbmlbMjU1XTsKQEAgLTUyMCw2ICs1NjEsNyBAQAogCXUzMiBvcmlnaW5hbEdhaW5bMjJdOwogCWludCBpbml0UERBREM7CiAJaW50IFBEQURDZGVsdGE7CisJdTggbGVkX3BpbjsKIAogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2RlczsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQ29tbW9uOwpAQCAtNTM2LDEzICs1NzgsMTcgQEAKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNBZGRpdGlvbmFsOwogCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc1J4R2FpbjsKIAlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pTW9kZXNUeEdhaW47CisKKwl1MzIgaW50cl9nZW5fdGltZXJfdHJpZ2dlcjsKKwl1MzIgaW50cl9nZW5fdGltZXJfdGhyZXNoOworCXN0cnVjdCBhdGhfZ2VuX3RpbWVyX3RhYmxlIGh3X2dlbl90aW1lcnM7CiB9OwogCi0vKiBBdHRhY2gsIERldGFjaCwgUmVzZXQgKi8KKy8qIEluaXRpYWxpemF0aW9uLCBEZXRhY2gsIFJlc2V0ICovCiBjb25zdCBjaGFyICphdGg5a19od19wcm9iZSh1MTYgdmVuZG9yaWQsIHUxNiBkZXZpZCk7CiB2b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Ci1zdHJ1Y3QgYXRoX2h3ICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICplcnJvcik7Ci12b2lkIGF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2ludCBhdGg5a19od19pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfcmZfZnJlZShzdHJ1Y3QgYXRoX2h3ICphaCk7CiBpbnQgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkgICBib29sIGJDaGFubmVsQ2hhbmdlKTsKIHZvaWQgYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgYXRoX2h3ICphaCk7CkBAIC01OTYsNyArNjQyLDcgQEAKIHU2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoLCB1NjQgdHNmNjQpOwogdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9odyAqYWgpOwotYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZyk7Cit2b2lkIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBzZXR0aW5nKTsKIGJvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cyk7CiB2b2lkIGF0aDlrX2h3X3NldDExbm1hYzIwNDAoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKTsKIHZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCk7CkBAIC02MDksOSArNjU1LDI0IEBACiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIGJvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpOwogYm9vbCBhdGg5a19od19nZXRpc3Ioc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2h3ICphaCk7CiBlbnVtIGF0aDlrX2ludCBhdGg5a19od19zZXRfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgaW50cyk7CiAKLXZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7CisvKiBHZW5lcmljIGh3IHRpbWVyIHByaW1pdGl2ZXMgKi8KK3N0cnVjdCBhdGhfZ2VuX3RpbWVyICphdGhfZ2VuX3RpbWVyX2FsbG9jKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHZvaWQgKCp0cmlnZ2VyKSh2b2lkICopLAorCQkJCQkgIHZvaWQgKCpvdmVyZmxvdykodm9pZCAqKSwKKwkJCQkJICB2b2lkICphcmcsCisJCQkJCSAgdTggdGltZXJfaW5kZXgpOwordm9pZCBhdGhfZ2VuX3RpbWVyX3N0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIsCisJCQkgdTMyIHRpbWVyX25leHQsIHUzMiB0aW1lcl9wZXJpb2QpOwordm9pZCBhdGhfZ2VuX3RpbWVyX3N0b3Aoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcik7Cit2b2lkIGF0aF9nZW5fdGltZXJfZnJlZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9nZW5fdGltZXIgKnRpbWVyKTsKK3ZvaWQgYXRoX2dlbl90aW1lcl9pc3Ioc3RydWN0IGF0aF9odyAqaHcpOwordTMyIGF0aDlrX2h3X2dldHRzZjMyKHN0cnVjdCBhdGhfaHcgKmFoKTsKIAorI2RlZmluZSBBVEhfUENJRV9DQVBfTElOS19DVFJMCTB4NzAKKyNkZWZpbmUgQVRIX1BDSUVfQ0FQX0xJTktfTDBTCTEKKyNkZWZpbmUgQVRIX1BDSUVfQ0FQX0xJTktfTDEJMgorCit2b2lkIGF0aF9wY2llX2FzcG1fZGlzYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXR2YWxzLmgKaW5kZXggZTJmMGEzNC4uODYyMjI2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXR2YWxzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXR2YWxzLmgKQEAgLTI3ODIsNyArMjc4Miw3IEBACiAgICAgeyAweDAwMDA4MzM4LCAweDAwZmYwMDAwIH0sCiAgICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzQwLCAweDAwMDEwN2ZmIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAwNTgxMDQzIH0sCisgICAgeyAweDAwMDA4MzQ0LCAweDAwNDgxMDQzIH0sCiAgICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODBjLCAweGFmYTY4ZTMwIH0sCiAgICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCkBAIC0zNDM5LDcgKzM0MzksNyBAQAogICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogQVI5Mjg1ICovCisvKiBBUjkyODUgUmV2c2lvbiAxMCovCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NU1vZGVzXzkyODVbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKQEAgLTM5NTUsNyArMzk1NSw3IEBACiAgICAgeyAweDAwMDA4MzM4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzQwLCAweDAwMDEwMzgwIH0sCi0gICAgeyAweDAwMDA4MzQ0LCAweDAwNTgxMDQzIH0sCisgICAgeyAweDAwMDA4MzQ0LCAweDAwNDgxMDQzIH0sCiAgICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODBjLCAweGFmZTY4ZTMwIH0sCiAgICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCkBAIC00MTIxLDggKzQxMjEsMjI1MiBAQAogICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogQVI5Mjg1IHYxXzIgUENJIFJlZ2lzdGVyIFdyaXRlcy4gIENyZWF0ZWQ6IDAzLzA0LzA5ICovCisvKiBBUjkyODUgdjFfMiBQQ0kgUmVnaXN0ZXIgV3JpdGVzLiAgQ3JlYXRlZDogMDQvMTMvMDkgKi8KIHN0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfOTI4NV8xXzJbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LAorICAgIHsgMHgwMDAwMTBmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwODAxNCwgMHgwM2U4MDNlOCwgMHgwN2QwMDdkMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMCB9LAorICAgIHsgMHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0ZiB9LAorICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MCB9LAorICAgIHsgMHgwMDAwOTgwNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMyB9LAorICAgIHsgMHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9LAorICAgIHsgMHgwMDAwOTgyNCwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgyOCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9LAorICAgIHsgMHgwMDAwOTgzNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgzOCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9LAorICAgIHsgMHgwMDAwOTg0MCwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSB9LAorICAgIHsgMHgwMDAwOTg0NCwgMHgwMzcyMTYxZSwgMHgwMzcyMTYxZSwgMHgwMzcyMTYyMCwgMHgwMzcyMTYyMCwgMHgwMzcyMTZhMCB9LAorICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA1MywgMHgwMDAwMTA1MywgMHgwMDAwMTA1OSB9LAorICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMTA2NiwgMHgwMDAwMTA2NiwgMHgwMDAwMTA1MywgMHgwMDAwMTA1MywgMHgwMDAwMTA1OSB9LAorICAgIHsgMHgwMDAwOTg1MCwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBlMiB9LAorICAgIHsgMHgwMDAwOTg1OCwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSB9LAorICAgIHsgMHgwMDAwOTg1YywgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM3NjA1ZSwgMHgzMTM5NjA1ZSB9LAorICAgIHsgMHgwMDAwOTg2MCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQxOCB9LAorICAgIHsgMHgwMDAwOTg2NCwgMHgwMDAwZmUwMCwgMHgwMDAwZmUwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9LAorICAgIHsgMHgwMDAwOTg2OCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCB9LAorICAgIHsgMHgwMDAwOTg2YywgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSB9LAorICAgIHsgMHgwMDAwOTkxNCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9LAorICAgIHsgMHgwMDAwOTkxOCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNiB9LAorICAgIHsgMHgwMDAwOTkyNCwgMHhkMDBhODAwNywgMHhkMDBhODAwNywgMHhkMDBhODAwZCwgMHhkMDBhODAwZCwgMHhkMDBhODAwZCB9LAorICAgIHsgMHgwMDAwOTk0NCwgMHhmZmJjMTAxMCwgMHhmZmJjMTAxMCwgMHhmZmJjMTAyMCwgMHhmZmJjMTAyMCwgMHhmZmJjMTAxMCB9LAorICAgIHsgMHgwMDAwOTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTk2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTliOCwgMHgwMDAwNDIxYywgMHgwMDAwNDIxYywgMHgwMDAwNDIxYywgMHgwMDAwNDIxYywgMHgwMDAwNDIxYyB9LAorICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAorICAgIHsgMHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAorICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NyB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiwgMHg2YWY2NTMyZiB9LAorICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCB9LAorICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCB9LAorICAgIHsgMHgwMDAwOTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTIwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9LAorICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCB9LAorICAgIHsgMHgwMDAwYjIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCB9LAorICAgIHsgMHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9LAorICAgIHsgMHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1MCwgMHgwMDA0ZjAwMCwgMHgwMDA0ZjAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCB9LAorICAgIHsgMHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVDb21tb25fOTI4NV8xXzJbXVsyXSA9IHsKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwNDUgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKKyAgICB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDQsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNGMsIDB4MDAwMDAwMTAgfSwKKyAgICB7IDB4MDAwMDAwNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNTQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNDAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNGMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNWMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwMzAsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwM2MsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwMjQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDQwNjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDcwMTAsIDB4MDAwMDAwMzEgfSwKKyAgICB7IDB4MDAwMDcwMzQsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDcwMzgsIDB4MDAwMDA0YzIgfSwKKyAgICB7IDB4MDAwMDgwMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMTgsIDB4MDAwMDA3MDAgfSwKKyAgICB7IDB4MDAwMDgwMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNWMsIDB4MDAwZmM3OGYgfSwKKyAgICB7IDB4MDAwMDgwNjAsIDB4MDAwMDAwMGYgfSwKKyAgICB7IDB4MDAwMDgwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwYzAsIDB4MmE4MDAwMWEgfSwKKyAgICB7IDB4MDAwMDgwYzQsIDB4MDVkYzAxZTAgfSwKKyAgICB7IDB4MDAwMDgwYzgsIDB4MWY0MDI3MTAgfSwKKyAgICB7IDB4MDAwMDgwY2MsIDB4MDFmNDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDAsIDB4MDAwMDFlMDAgfSwKKyAgICB7IDB4MDAwMDgwZDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDgsIDB4MDA0MDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZTAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTQsIDB4MDAwMGZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTgsIDB4MDAzZjNmM2YgfSwKKyAgICB7IDB4MDAwMDgwZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZmMsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDAsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDgxMDgsIDB4MDAwMDAwNTIgfSwKKyAgICB7IDB4MDAwMDgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKKyAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKKyAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKKyAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MTAgfSwKKyAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNDQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgxNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNzAsIDB4MzIxNDMzMjAgfSwKKyAgICB7IDB4MDAwMDgxNzQsIDB4ZmFhNGZhNTAgfSwKKyAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZDAsIDB4MDAwMDMyMGEgfSwKKyAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDAsIDB4MDAxMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDQsIDB4MDAxMGY0MDAgfSwKKyAgICB7IDB4MDAwMDgyNDgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgyNGMsIDB4MDAwMWU4MDAgfSwKKyAgICB7IDB4MDAwMDgyNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNWMsIDB4NDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgyNjAsIDB4MDAwODA5MjIgfSwKKyAgICB7IDB4MDAwMDgyNjQsIDB4ODhhMDAwMTAgfSwKKyAgICB7IDB4MDAwMDgyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzQsIDB4NDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzgsIDB4MDAzZTQxODAgfSwKKyAgICB7IDB4MDAwMDgyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyODQsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyODgsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyOGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMDAsIDB4MDAwMDAwNDAgfSwKKyAgICB7IDB4MDAwMDgzMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMmMsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDgzMzAsIDB4MDAwMDAzMDIgfSwKKyAgICB7IDB4MDAwMDgzMzQsIDB4MDAwMDBlMDAgfSwKKyAgICB7IDB4MDAwMDgzMzgsIDB4MDBmZjAwMDAgfSwKKyAgICB7IDB4MDAwMDgzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNDAsIDB4MDAwMTAzODAgfSwKKyAgICB7IDB4MDAwMDgzNDQsIDB4MDA0ODEwNDMgfSwKKyAgICB7IDB4MDAwMDk4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MGMsIDB4YWZlNjhlMzAgfSwKKyAgICB7IDB4MDAwMDk4MTAsIDB4ZmQxNGUwMDAgfSwKKyAgICB7IDB4MDAwMDk4MTQsIDB4OWMwYTlmNmIgfSwKKyAgICB7IDB4MDAwMDk4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MmMsIDB4MDAwMGEwMDAgfSwKKyAgICB7IDB4MDAwMDk4MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4M2MsIDB4MDAyMDA0MDAgfSwKKyAgICB7IDB4MDAwMDk4NGMsIDB4MDA0MDIzM2MgfSwKKyAgICB7IDB4MDAwMDk4NTQsIDB4MDAwMDAwNDQgfSwKKyAgICB7IDB4MDAwMDk5MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MTAsIDB4MDEwMDIzMTAgfSwKKyAgICB7IDB4MDAwMDk5MWMsIDB4MTAwMDBmZmYgfSwKKyAgICB7IDB4MDAwMDk5MjAsIDB4MDQ5MDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MjgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5MmMsIDB4MDAwMDAwMDQgfSwKKyAgICB7IDB4MDAwMDk5MzQsIDB4MWUxZjIwMjIgfSwKKyAgICB7IDB4MDAwMDk5MzgsIDB4MGEwYjBjMGQgfSwKKyAgICB7IDB4MDAwMDk5M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKKyAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKKyAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKKyAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKKyAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKKyAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKKyAgICB7IDB4MDAwMDk5NzAsIDB4MTkyYmI1MTQgfSwKKyAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ODQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ODgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5OWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKKyAgICB7IDB4MDAwMDk5YWMsIDB4MmRlZjA0MDAgfSwKKyAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKKyAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKKyAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTQsIDB4YWFhYWFhYWEgfSwKKyAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKKyAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKKyAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY4YzggfSwKKyAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKKyAgICB7IDB4MDAwMGEyMTQsIDB4MDAyMDZjMTAgfSwKKyAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKKyAgICB7IDB4MDAwMGEyMjAsIDB4MDE4MzQwNjEgfSwKKyAgICB7IDB4MDAwMGEyMjQsIDB4MDAwMDA0MDAgfSwKKyAgICB7IDB4MDAwMGEyMjgsIDB4MDAwMDAzYjUgfSwKKyAgICB7IDB4MDAwMGEyMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyMzQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyMzgsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyNDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNDgsIDB4ZmZmZmZmZmMgfSwKKyAgICB7IDB4MDAwMGEyNGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTgsIDB4MGNjYjUzODAgfSwKKyAgICB7IDB4MDAwMGEyNWMsIDB4MTUxNTE1MDEgfSwKKyAgICB7IDB4MDAwMGEyNjAsIDB4ZGZhOTBmMDEgfSwKKyAgICB7IDB4MDAwMGEyNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNmMsIDB4MGViYWU5ZTYgfSwKKyAgICB7IDB4MDAwMGQyNzAsIDB4MGQ4MjA4MjAgfSwKKyAgICB7IDB4MDAwMGQzNWMsIDB4MDdmZmZmZWYgfSwKKyAgICB7IDB4MDAwMGQzNjAsIDB4MGZmZmZmZTcgfSwKKyAgICB7IDB4MDAwMGQzNjQsIDB4MTdmZmZmZTUgfSwKKyAgICB7IDB4MDAwMGQzNjgsIDB4MWZmZmZmZTQgfSwKKyAgICB7IDB4MDAwMGQzNmMsIDB4MzdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzAsIDB4M2ZmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzQsIDB4NTdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzgsIDB4NWZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzN2MsIDB4N2ZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzODAsIDB4N2YzYzdiYmEgfSwKKyAgICB7IDB4MDAwMGQzODQsIDB4ZjMzMDdmZjAgfSwKKyAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMGEzYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzYzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKKyAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKKyAgICB7IDB4MDAwMDc4MDAsIDB4MDAxNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MDQsIDB4MGU0NTQ4ZDggfSwKKyAgICB7IDB4MDAwMDc4MDgsIDB4NTQyMTQ1MTQgfSwKKyAgICB7IDB4MDAwMDc4MGMsIDB4MDIwMjU4MzAgfSwKKyAgICB7IDB4MDAwMDc4MTAsIDB4NzFjMGQzODggfSwKKyAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTggfSwKKyAgICB7IDB4MDAwMDc4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MjQsIDB4MDBkODZmZmYgfSwKKyAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIgfSwKKyAgICB7IDB4MDAwMDc4MmMsIDB4NmUzNmQ5N2IgfSwKKyAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmUgfSwKKyAgICB7IDB4MDAwMDc4MzQsIDB4NzE0MDAwODcgfSwKKyAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUgfSwKKyAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAgfSwKKyAgICB7IDB4MDAwMDc4NDQsIDB4MDAwYzBkYjYgfSwKKyAgICB7IDB4MDAwMDc4NDgsIDB4NmRiNjFiNmYgfSwKKyAgICB7IDB4MDAwMDc4NGMsIDB4NmQ5YjY2ZGIgfSwKKyAgICB7IDB4MDAwMDc4NTAsIDB4NmQ4YzZkYmEgfSwKKyAgICB7IDB4MDAwMDc4NTQsIDB4MDAwNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4NTgsIDB4ZGIwMDMwMTIgfSwKKyAgICB7IDB4MDAwMDc4NWMsIDB4MDQ5MjQ5MTQgfSwKKyAgICB7IDB4MDAwMDc4NjAsIDB4MjEwODQyMTAgfSwKKyAgICB7IDB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGUgfSwKKyAgICB7IDB4MDAwMDc4NjgsIDB4YzIwMzQwODAgfSwKKyAgICB7IDB4MDAwMDc4NzAsIDB4MTAxNDJjMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDYyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgyMDEsIDB4MDAwMDgyMDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY2MDAsIDB4MDAwMGY2MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTI4MDAsIDB4MDAwMTI4MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTY4MDIsIDB4MDAwMTY4MDIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWI4MDUsIDB4MDAwMWI4MDUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjFhODAsIDB4MDAwMjFhODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjhiMDAsIDB4MDAwMjhiMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmFiNDAsIDB4MDAwMmFiNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmNkODAsIDB4MDAwMmNkODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMTY2NTIsIDB4MGEyMmE2NTIgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcsIDB4MDUwMzgwZTcgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcsIDB4MGU3MzljZTcgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcsIDB4MDAwMDAwZTcgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhNmM5LCAweDAwMDJhNmM5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4NzU4LCAweDAwMDM4NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0NzVlLCAweDAwMDQ0NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMltdWzJdID0geworICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmZCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAorICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NV8xXzJbXVsyXSA9IHsKKyAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmMgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKKyAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKK307CisKKy8qIEFSOTI4NyBSZXZpc2lvbiAxMCAqLworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdNb2Rlc185Mjg3XzFfMFtdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCisgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCisgICAgeyAweDAwMDAxMGIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCisgICAgeyAweDAwMDAxMGYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4IH0sCisgICAgeyAweDAwMDA4MDE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwODAxNjAwLCAweDA4NDAwYjAwLCAweDA2ZTAwNmUwIH0sCisgICAgeyAweDAwMDA4MDFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEyZTAwMDU3LCAweDEyZTAwMDJiLCAweDA5ODgwMDRmIH0sCisgICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODAwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwLCAweDA4ZjA0ODEwIH0sCisgICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjAwLCAweDAwMDAzMjAwLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhLCAweDAwMDAzMjBhIH0sCisgICAgeyAweDAwMDA4MzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA2ODgwLCAweDAwMDAzNDQwLCAweDAwMDA2ODgwIH0sCisgICAgeyAweDAwMDA5ODA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwM2M0LCAweDAwMDAwMzAwLCAweDAwMDAwMzAzIH0sCisgICAgeyAweDAwMDA5ODIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0sCisgICAgeyAweDAwMDA5ODI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlIH0sCisgICAgeyAweDAwMDA5ODI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0sCisgICAgeyAweDAwMDA5ODM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0sCisgICAgeyAweDAwMDA5ODM4LCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0sCisgICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMDJlLCAweDIwNmEwMDJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCisgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIwMDAwLCAweDAzNzIwMDAwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwLCAweDAzNzIxNmEwIH0sCisgICAgeyAweDAwMDA5ODUwLCAweDYwMDAwMDAwLCAweDYwMDAwMDAwLCAweDZkNDAwMGUyLCAweDZjNDAwMGUyLCAweDZjNDAwMGUyIH0sCisgICAgeyAweDAwMDA5ODU4LCAweDdjMDAwZDAwLCAweDdjMDAwZDAwLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCisgICAgeyAweDAwMDA5ODVjLCAweDMxMDAwMDVlLCAweDMxMDAwMDVlLCAweDMxMzk2MDVlLCAweDMxMzk1ZDVlLCAweDMxMzk1ZDVlIH0sCisgICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDAwLCAweDAwMDU4ZDAwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCisgICAgeyAweDAwMDA5ODY0LCAweDAwMDAwZTAwLCAweDAwMDAwZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCisgICAgeyAweDAwMDA5ODY4LCAweDAwMDA0MGMwLCAweDAwMDA0MGMwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCisgICAgeyAweDAwMDA5ODZjLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCisgICAgeyAweDAwMDA5OTE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAxMTMwLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0sCisgICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDE2LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCisgICAgeyAweDAwMDA5OTI0LCAweGQwMGE4YTAxLCAweGQwMGE4YTAxLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkLCAweGQwMGE4YTBkIH0sCisgICAgeyAweDAwMDA5OTQ0LCAweGVmYmMwMDAwLCAweGVmYmMwMDAwLCAweGVmYmMxMDEwLCAweGVmYmMxMDEwLCAweGVmYmMxMDEwIH0sCisgICAgeyAweDAwMDA5OTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCisgICAgeyAweDAwMDBhOTYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwIH0sCisgICAgeyAweDAwMDA5OTY0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwLCAweDAwMDAwMjEwIH0sCisgICAgeyAweDAwMDBjOTY4LCAweDAwMDAwMjAwLCAweDAwMDAwMjAwLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlIH0sCisgICAgeyAweDAwMDA5OWI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjIH0sCisgICAgeyAweDAwMDA5OWJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwLCAweDAwMDAwYzAwIH0sCisgICAgeyAweDAwMDA5OWMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0LCAweDA1ZWVhNmQ0IH0sCisgICAgeyAweDAwMDBhMjA0LCAweDAwMDAwNDQwLCAweDAwMDAwNDQwLCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0LCAweDAwMDAwNDQ0IH0sCisgICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMjFjLCAweDE4MDM4MDBhLCAweDE4MDM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCisgICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCisgICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCisgICAgeyAweDAwMDBhM2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4N0NvbW1vbl85Mjg3XzFfMFtdWzJdID0geworICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LAorICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDA0NCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwMDA0OCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwMDA0YywgMHgwMDAwMDAxMCB9LAorICAgIHsgMHgwMDAwMDA1MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDA1NCwgMHgwMDAwMDAxZiB9LAorICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgxYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMDgyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTA0MCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA0NCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA0OCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA0YywgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1MCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1NCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1OCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA1YywgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA2MCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTA2NCwgMHgwMDJmZmMwZiB9LAorICAgIHsgMHgwMDAwMTIzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTI3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTAzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTA3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTEzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTE3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTIzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTI3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTMzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTM3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQ3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTRiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTRmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTUzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTU3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTViOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTVmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTYzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTY3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTZiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTZmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTczOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTc3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTdmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTAzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTA3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTBmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTEzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTE3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTFmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTIzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTI3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTJmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTMzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTM3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNiYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTNmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwMTQ3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNDAzMCwgMHgwMDAwMDAwMiB9LAorICAgIHsgMHgwMDAwNDAzYywgMHgwMDAwMDAwMiB9LAorICAgIHsgMHgwMDAwNDAyNCwgMHgwMDAwMDAxZiB9LAorICAgIHsgMHgwMDAwNDA2MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNDA2NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzAxMCwgMHgwMDAwMDAzMyB9LAorICAgIHsgMHgwMDAwNzAyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzAzNCwgMHgwMDAwMDAwMiB9LAorICAgIHsgMHgwMDAwNzAzOCwgMHgwMDAwMDRjMiB9LAorICAgIHsgMHgwMDAwODAwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAxOCwgMHgwMDAwMDcwMCB9LAorICAgIHsgMHgwMDAwODAyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODAzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA0OCwgMHg0MDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA1NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA1OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA1YywgMHgwMDBmYzc4ZiB9LAorICAgIHsgMHgwMDAwODA2MCwgMHgwMDAwMDAwZiB9LAorICAgIHsgMHgwMDAwODA2NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODA3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBjMCwgMHgyYTgwMDAxYSB9LAorICAgIHsgMHgwMDAwODBjNCwgMHgwNWRjMDFlMCB9LAorICAgIHsgMHgwMDAwODBjOCwgMHgxZjQwMjcxMCB9LAorICAgIHsgMHgwMDAwODBjYywgMHgwMWY0MDAwMCB9LAorICAgIHsgMHgwMDAwODBkMCwgMHgwMDAwMWUwMCB9LAorICAgIHsgMHgwMDAwODBkNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBkOCwgMHgwMDQwMDAwMCB9LAorICAgIHsgMHgwMDAwODBlMCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODBlNCwgMHgwMDAwZmZmZiB9LAorICAgIHsgMHgwMDAwODBlOCwgMHgwMDNmM2YzZiB9LAorICAgIHsgMHgwMDAwODBlYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODBmYywgMHgwMDAyMDAwMCB9LAorICAgIHsgMHgwMDAwODEwMCwgMHgwMDAyMDAwMCB9LAorICAgIHsgMHgwMDAwODEwNCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwODEwOCwgMHgwMDAwMDA1MiB9LAorICAgIHsgMHgwMDAwODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAorICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAorICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAorICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODEzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODE0NCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODE2OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODE2YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODE3MCwgMHgxODQ4NzMyMCB9LAorICAgIHsgMHgwMDAwODE3NCwgMHhmYWE0ZmE1MCB9LAorICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAorICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFjMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFjNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFkNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODFmYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIxYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODIzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI0MCwgMHgwMDEwMDAwMCB9LAorICAgIHsgMHgwMDAwODI0NCwgMHgwMDEwZjQwMCB9LAorICAgIHsgMHgwMDAwODI0OCwgMHgwMDAwMDEwMCB9LAorICAgIHsgMHgwMDAwODI0YywgMHgwMDAxZTgwMCB9LAorICAgIHsgMHgwMDAwODI1MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI1NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI1OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI1YywgMHg0MDAwMDBmZiB9LAorICAgIHsgMHgwMDAwODI2MCwgMHgwMDA4MDkyMiB9LAorICAgIHsgMHgwMDAwODI2NCwgMHhhOGEwMDAxMCB9LAorICAgIHsgMHgwMDAwODI3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI3NCwgMHg0MDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI3OCwgMHgwMDNlNDE4MCB9LAorICAgIHsgMHgwMDAwODI3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI4NCwgMHgwMDAwMDAyYyB9LAorICAgIHsgMHgwMDAwODI4OCwgMHgwMDAwMDAyYyB9LAorICAgIHsgMHgwMDAwODI4YywgMHgwMDAwMDBmZiB9LAorICAgIHsgMHgwMDAwODI5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI5OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODI5YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODMwMCwgMHgwMDAwMDA0MCB9LAorICAgIHsgMHgwMDAwODMxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODMyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODMyYywgMHgwMDAwMDAwNyB9LAorICAgIHsgMHgwMDAwODMzMCwgMHgwMDAwMDMwMiB9LAorICAgIHsgMHgwMDAwODMzNCwgMHgwMDAwMGUwMCB9LAorICAgIHsgMHgwMDAwODMzOCwgMHgwMGZmMDAwMCB9LAorICAgIHsgMHgwMDAwODMzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM0MCwgMHgwMDAxMDdmZiB9LAorICAgIHsgMHgwMDAwODM0NCwgMHgwMWM4MTA0MyB9LAorICAgIHsgMHgwMDAwODM2MCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM2NCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM2OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM3MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM3NCwgMHgwMDAwMDBmZiB9LAorICAgIHsgMHgwMDAwODM3OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM4MCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM4NCwgMHhmZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM5MCwgMHgwZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM5NCwgMHgwZmZmZmZmZiB9LAorICAgIHsgMHgwMDAwODM5OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODM5YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwODNhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgwYywgMHhhZmU2OGUzMCB9LAorICAgIHsgMHgwMDAwOTgxMCwgMHhmZDE0ZTAwMCB9LAorICAgIHsgMHgwMDAwOTgxNCwgMHg5YzBhOWY2YiB9LAorICAgIHsgMHgwMDAwOTgxYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgyYywgMHgwMDAwYTAwMCB9LAorICAgIHsgMHgwMDAwOTgzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTgzYywgMHgwMDIwMDQwMCB9LAorICAgIHsgMHgwMDAwOTg0YywgMHgwMDQwMjMzYyB9LAorICAgIHsgMHgwMDAwYTg0YywgMHgwMDQwMjMzYyB9LAorICAgIHsgMHgwMDAwOTg1NCwgMHgwMDAwMDA0NCB9LAorICAgIHsgMHgwMDAwOTkwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkxMCwgMHgxMDAwMjMxMCB9LAorICAgIHsgMHgwMDAwOTkxYywgMHgxMDAwMGZmZiB9LAorICAgIHsgMHgwMDAwOTkyMCwgMHgwNDkwMDAwMCB9LAorICAgIHsgMHgwMDAwYTkyMCwgMHgwNDkwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkyOCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwOTkyYywgMHgwMDAwMDAwNCB9LAorICAgIHsgMHgwMDAwOTkzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTkzMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTkzNCwgMHgxZTFmMjAyMiB9LAorICAgIHsgMHgwMDAwOTkzOCwgMHgwYTBiMGMwZCB9LAorICAgIHsgMHgwMDAwOTkzYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTk0OCwgMHg5MjgwYzAwYSB9LAorICAgIHsgMHgwMDAwOTk0YywgMHgwMDAyMDAyOCB9LAorICAgIHsgMHgwMDAwOTk1NCwgMHg1ZjNjYTNkZSB9LAorICAgIHsgMHgwMDAwOTk1OCwgMHgwMTA4ZWNmZiB9LAorICAgIHsgMHgwMDAwOTk0MCwgMHgxNDc1MDYwNCB9LAorICAgIHsgMHgwMDAwYzk1YywgMHgwMDRiNmE4ZSB9LAorICAgIHsgMHgwMDAwOTk3MCwgMHg5OTBiYjUxNSB9LAorICAgIHsgMHgwMDAwOTk3NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTk3OCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwOTk3YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlhNCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwOTlhOCwgMHgyMDFmZmYwMCB9LAorICAgIHsgMHgwMDAwOTlhYywgMHgwYzZmMDAwMCB9LAorICAgIHsgMHgwMDAwOTliMCwgMHgwMzA1MTAwMCB9LAorICAgIHsgMHgwMDAwOTliNCwgMHgwMDAwMDgyMCB9LAorICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NyB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyOSB9LAorICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCB9LAorICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCB9LAorICAgIHsgMHgwMDAwOTlkYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTllMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTllNCwgMHhhYWFhYWFhYSB9LAorICAgIHsgMHgwMDAwOTllOCwgMHgzYzQ2NjQ3OCB9LAorICAgIHsgMHgwMDAwOTllYywgMHgwY2M4MGNhYSB9LAorICAgIHsgMHgwMDAwOTlmMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOTlmYywgMHgwMDAwMTA0MiB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMGZmZmVmZiB9LAorICAgIHsgMHgwMDAwYTFmOCwgMHgwMGY1ZjlmZiB9LAorICAgIHsgMHgwMDAwYTFmYywgMHhiNzlmNjQyNyB9LAorICAgIHsgMHgwMDAwYTIwOCwgMHg4MDNlNDc4OCB9LAorICAgIHsgMHgwMDAwYTIxMCwgMHg0MDgwYTMzMyB9LAorICAgIHsgMHgwMDAwYTIxNCwgMHg0MDIwNmMxMCB9LAorICAgIHsgMHgwMDAwYTIxOCwgMHgwMDljNDA2MCB9LAorICAgIHsgMHgwMDAwYTIyMCwgMHgwMTgzNDA2MSB9LAorICAgIHsgMHgwMDAwYTIyNCwgMHgwMDAwMDQwMCB9LAorICAgIHsgMHgwMDAwYTIyOCwgMHgwMDAwMDNiNSB9LAorICAgIHsgMHgwMDAwYTIyYywgMHgyMzNmNzE4MCB9LAorICAgIHsgMHgwMDAwYTIzNCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTIzOCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTIzYywgMHgxM2M4ODlhZiB9LAorICAgIHsgMHgwMDAwYTI0MCwgMHgzODQ5MGEyMCB9LAorICAgIHsgMHgwMDAwYTI0NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI0OCwgMHhmZmZmZmZmYyB9LAorICAgIHsgMHgwMDAwYTI0YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1OCwgMHgwY2RiZDM4MCB9LAorICAgIHsgMHgwMDAwYTI1YywgMHgwZjBmMGYwMSB9LAorICAgIHsgMHgwMDAwYTI2MCwgMHhkZmE5MWYwMSB9LAorICAgIHsgMHgwMDAwYTI2NCwgMHgwMDQxOGExMSB9LAorICAgIHsgMHgwMDAwYjI2NCwgMHgwMDQxOGExMSB9LAorICAgIHsgMHgwMDAwYTI2OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI2YywgMHgwZTc5ZTVjNiB9LAorICAgIHsgMHgwMDAwYjI2YywgMHgwZTc5ZTVjNiB9LAorICAgIHsgMHgwMDAwZDI3MCwgMHgwMDgyMDgyMCB9LAorICAgIHsgMHgwMDAwYTI3OCwgMHgxY2U3MzljZSB9LAorICAgIHsgMHgwMDAwYTI3YywgMHgwNTA3MDFjZSB9LAorICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAorICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAorICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LAorICAgIHsgMHgwMDAwZDM2OCwgMHgxZmZmZmZlNCB9LAorICAgIHsgMHgwMDAwZDM2YywgMHgzN2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3MCwgMHgzZmZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3NCwgMHg1N2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3OCwgMHg1ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM3YywgMHg3ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM4MCwgMHg3ZjNjN2JiYSB9LAorICAgIHsgMHgwMDAwZDM4NCwgMHhmMzMwN2ZmMCB9LAorICAgIHsgMHgwMDAwYTM4OCwgMHgwYzAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTM5NCwgMHgxY2U3MzljZSB9LAorICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDFjZSB9LAorICAgIHsgMHgwMDAwYjM5OCwgMHgwMDAwMDFjZSB9LAorICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwYTNjOCwgMHgwMDAwMDI0NiB9LAorICAgIHsgMHgwMDAwYTNjYywgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkMCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkNCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkYywgMHgxY2U3MzljZSB9LAorICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAorICAgIHsgMHgwMDAwYTNlNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTNlOCwgMHgxOGM0MzQzMyB9LAorICAgIHsgMHgwMDAwYTNlYywgMHgwMGY3MDA4MSB9LAorICAgIHsgMHgwMDAwYTNmMCwgMHgwMTAzNmExZSB9LAorICAgIHsgMHgwMDAwYTNmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYjNmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTdkOCwgMHgwMDAwMDAwMSB9LAorICAgIHsgMHgwMDAwNzgwMCwgMHgwMDAwMDgwMCB9LAorICAgIHsgMHgwMDAwNzgwNCwgMHg2YzM1ZmZiMCB9LAorICAgIHsgMHgwMDAwNzgwOCwgMHg2ZGI2YzAwMCB9LAorICAgIHsgMHgwMDAwNzgwYywgMHg2ZGI2Y2IzMCB9LAorICAgIHsgMHgwMDAwNzgxMCwgMHg2ZGI2Y2I2YyB9LAorICAgIHsgMHgwMDAwNzgxNCwgMHgwNTAxZTIwMCB9LAorICAgIHsgMHgwMDAwNzgxOCwgMHgwMDk0MTI4ZCB9LAorICAgIHsgMHgwMDAwNzgxYywgMHg5NzZlZTM5MiB9LAorICAgIHsgMHgwMDAwNzgyMCwgMHhmNzVmZjZmYyB9LAorICAgIHsgMHgwMDAwNzgyNCwgMHgwMDA0MDAwMCB9LAorICAgIHsgMHgwMDAwNzgyOCwgMHhkYjAwMzAxMiB9LAorICAgIHsgMHgwMDAwNzgyYywgMHgwNDkyNDkxNCB9LAorICAgIHsgMHgwMDAwNzgzMCwgMHgyMTA4NDIxMCB9LAorICAgIHsgMHgwMDAwNzgzNCwgMHgwMDE0MDAwMCB9LAorICAgIHsgMHgwMDAwNzgzOCwgMHgwZTQ1NDhkOCB9LAorICAgIHsgMHgwMDAwNzgzYywgMHg1NDIxNDUxNCB9LAorICAgIHsgMHgwMDAwNzg0MCwgMHgwMjAyNTgyMCB9LAorICAgIHsgMHgwMDAwNzg0NCwgMHg3MWMwZDM4OCB9LAorICAgIHsgMHgwMDAwNzg0OCwgMHg5MzQ5MzRhOCB9LAorICAgIHsgMHgwMDAwNzg1MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzg1NCwgMHgwMDAwMDgwMCB9LAorICAgIHsgMHgwMDAwNzg1OCwgMHg2YzM1ZmZiMCB9LAorICAgIHsgMHgwMDAwNzg1YywgMHg2ZGI2YzAwMCB9LAorICAgIHsgMHgwMDAwNzg2MCwgMHg2ZGI2Y2IyYyB9LAorICAgIHsgMHgwMDAwNzg2NCwgMHg2ZGI2Y2I2YyB9LAorICAgIHsgMHgwMDAwNzg2OCwgMHgwNTAxZTIwMCB9LAorICAgIHsgMHgwMDAwNzg2YywgMHgwMDk0MTI4ZCB9LAorICAgIHsgMHgwMDAwNzg3MCwgMHg5NzZlZTM5MiB9LAorICAgIHsgMHgwMDAwNzg3NCwgMHhmNzVmZjZmYyB9LAorICAgIHsgMHgwMDAwNzg3OCwgMHgwMDA0MDAwMCB9LAorICAgIHsgMHgwMDAwNzg3YywgMHhkYjAwMzAxMiB9LAorICAgIHsgMHgwMDAwNzg4MCwgMHgwNDkyNDkxNCB9LAorICAgIHsgMHgwMDAwNzg4NCwgMHgyMTA4NDIxMCB9LAorICAgIHsgMHgwMDAwNzg4OCwgMHgwMDFiNmRiMCB9LAorICAgIHsgMHgwMDAwNzg4YywgMHgwMDM3NmI2MyB9LAorICAgIHsgMHgwMDAwNzg5MCwgMHgwNmRiNmRiNiB9LAorICAgIHsgMHgwMDAwNzg5NCwgMHgwMDZkODAwMCB9LAorICAgIHsgMHgwMDAwNzg5OCwgMHg0ODEwMDAwMCB9LAorICAgIHsgMHgwMDAwNzg5YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzhhMCwgMHgwODAwMDAwMCB9LAorICAgIHsgMHgwMDAwNzhhNCwgMHgwMDA3ZmZkOCB9LAorICAgIHsgMHgwMDAwNzhhOCwgMHgwMDA3ZmZkOCB9LAorICAgIHsgMHgwMDAwNzhhYywgMHgwMDFjMDAyMCB9LAorICAgIHsgMHgwMDAwNzhiMCwgMHgwMDA2MTFlYiB9LAorICAgIHsgMHgwMDAwNzhiNCwgMHg0MDAwODA4MCB9LAorICAgIHsgMHgwMDAwNzhiOCwgMHgyYTg1MDE2MCB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdNb2Rlc190eF9nYWluXzkyODdfMV8wW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDQwMDIsIDB4MDAwMDQwMDIsIDB4MDAwMDQwMDIgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgwMDQsIDB4MDAwMDgwMDQsIDB4MDAwMDgwMDQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGMwMGEsIDB4MDAwMGMwMGEsIDB4MDAwMGMwMGEgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMGMsIDB4MDAwMTAwMGMsIDB4MDAwMTAwMGMgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQyMGIsIDB4MDAwMTQyMGIsIDB4MDAwMTQyMGIgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTgyNGEsIDB4MDAwMTgyNGEsIDB4MDAwMTgyNGEgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWM0NGEsIDB4MDAwMWM0NGEsIDB4MDAwMWM0NGEgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjA2NGEsIDB4MDAwMjA2NGEsIDB4MDAwMjA2NGEgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQ4NGEsIDB4MDAwMjQ4NGEsIDB4MDAwMjQ4NGEgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjhhNGEsIDB4MDAwMjhhNGEsIDB4MDAwMjhhNGEgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmNjNGEsIDB4MDAwMmNjNGEsIDB4MDAwMmNjNGEgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzBlNGEsIDB4MDAwMzBlNGEsIDB4MDAwMzBlNGEgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzRlOGEsIDB4MDAwMzRlOGEsIDB4MDAwMzRlOGEgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzhlOGMsIDB4MDAwMzhlOGMsIDB4MDAwMzhlOGMgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2NlY2MsIDB4MDAwM2NlY2MsIDB4MDAwM2NlY2MgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDBlZDQsIDB4MDAwNDBlZDQsIDB4MDAwNDBlZDQgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDRlZGMsIDB4MDAwNDRlZGMsIDB4MDAwNDRlZGMgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDhlZGUsIDB4MDAwNDhlZGUsIDB4MDAwNDhlZGUgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNGNmMWUsIDB4MDAwNGNmMWUsIDB4MDAwNGNmMWUgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTBmNWUsIDB4MDAwNTBmNWUsIDB4MDAwNTBmNWUgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNTRmOWUsIDB4MDAwNTRmOWUsIDB4MDAwNTRmOWUgfSwKKyAgICB7IDB4MDAwMGE3ODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSwKKyAgICB7IDB4MDAwMGE3ODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDQwNjIsIDB4MDAwMDQwNjIsIDB4MDAwMDQwNjIgfSwKKyAgICB7IDB4MDAwMGE3ODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDgwNjQsIDB4MDAwMDgwNjQsIDB4MDAwMDgwNjQgfSwKKyAgICB7IDB4MDAwMGE3OGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGMwYTQsIDB4MDAwMGMwYTQsIDB4MDAwMGMwYTQgfSwKKyAgICB7IDB4MDAwMGE3OTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAwYjAsIDB4MDAwMTAwYjAsIDB4MDAwMTAwYjAgfSwKKyAgICB7IDB4MDAwMGE3OTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQwYjIsIDB4MDAwMTQwYjIsIDB4MDAwMTQwYjIgfSwKKyAgICB7IDB4MDAwMGE3OTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTgwYjQsIDB4MDAwMTgwYjQsIDB4MDAwMTgwYjQgfSwKKyAgICB7IDB4MDAwMGE3OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWMwZjQsIDB4MDAwMWMwZjQsIDB4MDAwMWMwZjQgfSwKKyAgICB7IDB4MDAwMGE3YTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjAxMzQsIDB4MDAwMjAxMzQsIDB4MDAwMjAxMzQgfSwKKyAgICB7IDB4MDAwMGE3YTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjQwZmUsIDB4MDAwMjQwZmUsIDB4MDAwMjQwZmUgfSwKKyAgICB7IDB4MDAwMGE3YTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjgxM2UsIDB4MDAwMjgxM2UsIDB4MDAwMjgxM2UgfSwKKyAgICB7IDB4MDAwMGE3YWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmMxN2UsIDB4MDAwMmMxN2UsIDB4MDAwMmMxN2UgfSwKKyAgICB7IDB4MDAwMGE3YjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzAxYmUsIDB4MDAwMzAxYmUsIDB4MDAwMzAxYmUgfSwKKyAgICB7IDB4MDAwMGE3YjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3YzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3Y2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3ZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGE3ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUsIDB4MDAwMzQxZmUgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGExODAwMDAsIDB4MGExODAwMDAsIDB4MGExYWEwMDAsIDB4MGExYWEwMDAsIDB4MGExYWEwMDAgfSwKK307CisKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdNb2Rlc19yeF9nYWluXzkyODdfMV8wW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAgfSwKKyAgICB7IDB4MDAwMDlhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQgfSwKKyAgICB7IDB4MDAwMDlhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjgsIDB4MDAwMGExMjgsIDB4MDAwMGExMjggfSwKKyAgICB7IDB4MDAwMDlhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMgfSwKKyAgICB7IDB4MDAwMDlhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAgfSwKKyAgICB7IDB4MDAwMDlhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQgfSwKKyAgICB7IDB4MDAwMDlhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTgsIDB4MDAwMGExOTgsIDB4MDAwMGExOTggfSwKKyAgICB7IDB4MDAwMDlhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMgfSwKKyAgICB7IDB4MDAwMDlhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAgfSwKKyAgICB7IDB4MDAwMDlhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQgfSwKKyAgICB7IDB4MDAwMDlhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODgsIDB4MDAwMGEyODgsIDB4MDAwMGEyODggfSwKKyAgICB7IDB4MDAwMDlhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMgfSwKKyAgICB7IDB4MDAwMDlhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAgfSwKKyAgICB7IDB4MDAwMDlhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQgfSwKKyAgICB7IDB4MDAwMDlhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAgfSwKKyAgICB7IDB4MDAwMDlhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQgfSwKKyAgICB7IDB4MDAwMDlhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTggfSwKKyAgICB7IDB4MDAwMDlhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMgfSwKKyAgICB7IDB4MDAwMDlhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAgfSwKKyAgICB7IDB4MDAwMDlhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQgfSwKKyAgICB7IDB4MDAwMDlhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjggfSwKKyAgICB7IDB4MDAwMDlhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQgfSwKKyAgICB7IDB4MDAwMDlhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDggfSwKKyAgICB7IDB4MDAwMDlhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMgfSwKKyAgICB7IDB4MDAwMDlhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAgfSwKKyAgICB7IDB4MDAwMDlhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQgfSwKKyAgICB7IDB4MDAwMDlhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDggfSwKKyAgICB7IDB4MDAwMDlhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMgfSwKKyAgICB7IDB4MDAwMDlhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAgfSwKKyAgICB7IDB4MDAwMDlhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQgfSwKKyAgICB7IDB4MDAwMDlhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTggfSwKKyAgICB7IDB4MDAwMDlhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMgfSwKKyAgICB7IDB4MDAwMDlhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAgfSwKKyAgICB7IDB4MDAwMDlhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQgfSwKKyAgICB7IDB4MDAwMDlhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTggfSwKKyAgICB7IDB4MDAwMDlhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQgfSwKKyAgICB7IDB4MDAwMDlhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTggfSwKKyAgICB7IDB4MDAwMDlhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQgfSwKKyAgICB7IDB4MDAwMDlhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDggfSwKKyAgICB7IDB4MDAwMDlhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMgfSwKKyAgICB7IDB4MDAwMDlhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAgfSwKKyAgICB7IDB4MDAwMDlhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQgfSwKKyAgICB7IDB4MDAwMDlhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTggfSwKKyAgICB7IDB4MDAwMDlhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMgfSwKKyAgICB7IDB4MDAwMDlhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAgfSwKKyAgICB7IDB4MDAwMDlhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTggfSwKKyAgICB7IDB4MDAwMDlhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQgfSwKKyAgICB7IDB4MDAwMDlhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjggfSwKKyAgICB7IDB4MDAwMDlhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQgfSwKKyAgICB7IDB4MDAwMDlhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTggfSwKKyAgICB7IDB4MDAwMDlhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMgfSwKKyAgICB7IDB4MDAwMDlhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAgfSwKKyAgICB7IDB4MDAwMDlhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQgfSwKKyAgICB7IDB4MDAwMDlhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTggfSwKKyAgICB7IDB4MDAwMDlhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQgfSwKKyAgICB7IDB4MDAwMDlhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTggfSwKKyAgICB7IDB4MDAwMDlhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMgfSwKKyAgICB7IDB4MDAwMDlhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAgfSwKKyAgICB7IDB4MDAwMDlhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAgfSwKKyAgICB7IDB4MDAwMDlhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQgfSwKKyAgICB7IDB4MDAwMDlhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODgsIDB4MDAwMGYzODgsIDB4MDAwMGYzODggfSwKKyAgICB7IDB4MDAwMDlhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAgfSwKKyAgICB7IDB4MDAwMDlhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQgfSwKKyAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTggfSwKKyAgICB7IDB4MDAwMDliMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAgfSwKKyAgICB7IDB4MDAwMDliMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQgfSwKKyAgICB7IDB4MDAwMDliMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTggfSwKKyAgICB7IDB4MDAwMDliMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMgfSwKKyAgICB7IDB4MDAwMDliMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAgfSwKKyAgICB7IDB4MDAwMDliMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQgfSwKKyAgICB7IDB4MDAwMDliMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMgfSwKKyAgICB7IDB4MDAwMDliMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAgfSwKKyAgICB7IDB4MDAwMDliMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQgfSwKKyAgICB7IDB4MDAwMDliMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAgfSwKKyAgICB7IDB4MDAwMDliMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQgfSwKKyAgICB7IDB4MDAwMDliMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTggfSwKKyAgICB7IDB4MDAwMDliMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMgfSwKKyAgICB7IDB4MDAwMDliMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAgfSwKKyAgICB7IDB4MDAwMDliMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQgfSwKKyAgICB7IDB4MDAwMDliM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEgfSwKKyAgICB7IDB4MDAwMDliNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUgfSwKKyAgICB7IDB4MDAwMDliNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTksIDB4MDAwMGZmYTksIDB4MDAwMGZmYTkgfSwKKyAgICB7IDB4MDAwMDliNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQgfSwKKyAgICB7IDB4MDAwMDliNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEgfSwKKyAgICB7IDB4MDAwMDliNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUgfSwKKyAgICB7IDB4MDAwMDliNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjksIDB4MDAwMGZmYjksIDB4MDAwMGZmYjkgfSwKKyAgICB7IDB4MDAwMDliNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUgfSwKKyAgICB7IDB4MDAwMDliNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzksIDB4MDAwMGZmYzksIDB4MDAwMGZmYzkgfSwKKyAgICB7IDB4MDAwMDliNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QgfSwKKyAgICB7IDB4MDAwMDliNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEgfSwKKyAgICB7IDB4MDAwMDliNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUgfSwKKyAgICB7IDB4MDAwMDliNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIgfSwKKyAgICB7IDB4MDAwMDliNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYgfSwKKyAgICB7IDB4MDAwMDliNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EgfSwKKyAgICB7IDB4MDAwMDliNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UgfSwKKyAgICB7IDB4MDAwMDliN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIgfSwKKyAgICB7IDB4MDAwMDliODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYgfSwKKyAgICB7IDB4MDAwMDliODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEgfSwKKyAgICB7IDB4MDAwMDliODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcgfSwKKyAgICB7IDB4MDAwMDliOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IgfSwKKyAgICB7IDB4MDAwMDliOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YgfSwKKyAgICB7IDB4MDAwMDliOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMgfSwKKyAgICB7IDB4MDAwMDliOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcgfSwKKyAgICB7IDB4MDAwMDliOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDliZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAsIDB4MDAwMGExMjAgfSwKKyAgICB7IDB4MDAwMGFhMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQsIDB4MDAwMGExMjQgfSwKKyAgICB7IDB4MDAwMGFhMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMjgsIDB4MDAwMGExMjgsIDB4MDAwMGExMjggfSwKKyAgICB7IDB4MDAwMGFhMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMsIDB4MDAwMGExMmMgfSwKKyAgICB7IDB4MDAwMGFhMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAsIDB4MDAwMGExMzAgfSwKKyAgICB7IDB4MDAwMGFhMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQsIDB4MDAwMGExOTQgfSwKKyAgICB7IDB4MDAwMGFhMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGExOTgsIDB4MDAwMGExOTgsIDB4MDAwMGExOTggfSwKKyAgICB7IDB4MDAwMGFhMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMsIDB4MDAwMGEyMGMgfSwKKyAgICB7IDB4MDAwMGFhMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAsIDB4MDAwMGEyMTAgfSwKKyAgICB7IDB4MDAwMGFhMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQsIDB4MDAwMGEyODQgfSwKKyAgICB7IDB4MDAwMGFhMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyODgsIDB4MDAwMGEyODgsIDB4MDAwMGEyODggfSwKKyAgICB7IDB4MDAwMGFhMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMsIDB4MDAwMGEyOGMgfSwKKyAgICB7IDB4MDAwMGFhMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAsIDB4MDAwMGEyOTAgfSwKKyAgICB7IDB4MDAwMGFhMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQsIDB4MDAwMGEyOTQgfSwKKyAgICB7IDB4MDAwMGFhMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAsIDB4MDAwMGEyYTAgfSwKKyAgICB7IDB4MDAwMGFhM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQsIDB4MDAwMGEyYTQgfSwKKyAgICB7IDB4MDAwMGFhNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTgsIDB4MDAwMGEyYTggfSwKKyAgICB7IDB4MDAwMGFhNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMsIDB4MDAwMGEyYWMgfSwKKyAgICB7IDB4MDAwMGFhNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAsIDB4MDAwMGEyYjAgfSwKKyAgICB7IDB4MDAwMGFhNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQsIDB4MDAwMGEyYjQgfSwKKyAgICB7IDB4MDAwMGFhNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjgsIDB4MDAwMGEyYjggfSwKKyAgICB7IDB4MDAwMGFhNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQsIDB4MDAwMGEyYzQgfSwKKyAgICB7IDB4MDAwMGFhNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDgsIDB4MDAwMGE3MDggfSwKKyAgICB7IDB4MDAwMGFhNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMsIDB4MDAwMGE3MGMgfSwKKyAgICB7IDB4MDAwMGFhNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAsIDB4MDAwMGE3MTAgfSwKKyAgICB7IDB4MDAwMGFhNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQsIDB4MDAwMGFiMDQgfSwKKyAgICB7IDB4MDAwMGFhNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDgsIDB4MDAwMGFiMDggfSwKKyAgICB7IDB4MDAwMGFhNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMsIDB4MDAwMGFiMGMgfSwKKyAgICB7IDB4MDAwMGFhNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAsIDB4MDAwMGFiMTAgfSwKKyAgICB7IDB4MDAwMGFhNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQsIDB4MDAwMGFiMTQgfSwKKyAgICB7IDB4MDAwMGFhNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTgsIDB4MDAwMGFiMTggfSwKKyAgICB7IDB4MDAwMGFhN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMsIDB4MDAwMGFiOGMgfSwKKyAgICB7IDB4MDAwMGFhODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAsIDB4MDAwMGFiOTAgfSwKKyAgICB7IDB4MDAwMGFhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQsIDB4MDAwMGFiOTQgfSwKKyAgICB7IDB4MDAwMGFhODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTgsIDB4MDAwMGFiOTggfSwKKyAgICB7IDB4MDAwMGFhOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQsIDB4MDAwMGFiYTQgfSwKKyAgICB7IDB4MDAwMGFhOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTgsIDB4MDAwMGFiYTggfSwKKyAgICB7IDB4MDAwMGFhOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQsIDB4MDAwMGNiMDQgfSwKKyAgICB7IDB4MDAwMGFhOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDgsIDB4MDAwMGNiMDggfSwKKyAgICB7IDB4MDAwMGFhOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMsIDB4MDAwMGNiMGMgfSwKKyAgICB7IDB4MDAwMGFhYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAsIDB4MDAwMGNiMTAgfSwKKyAgICB7IDB4MDAwMGFhYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQsIDB4MDAwMGNiMTQgfSwKKyAgICB7IDB4MDAwMGFhYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTgsIDB4MDAwMGNiMTggfSwKKyAgICB7IDB4MDAwMGFhYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMsIDB4MDAwMGNiOGMgfSwKKyAgICB7IDB4MDAwMGFhYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAsIDB4MDAwMGNiOTAgfSwKKyAgICB7IDB4MDAwMGFhYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTgsIDB4MDAwMGNmMTggfSwKKyAgICB7IDB4MDAwMGFhYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQsIDB4MDAwMGNmMjQgfSwKKyAgICB7IDB4MDAwMGFhYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjgsIDB4MDAwMGNmMjggfSwKKyAgICB7IDB4MDAwMGFhYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQsIDB4MDAwMGQzMTQgfSwKKyAgICB7IDB4MDAwMGFhYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTgsIDB4MDAwMGQzMTggfSwKKyAgICB7IDB4MDAwMGFhYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMsIDB4MDAwMGQzOGMgfSwKKyAgICB7IDB4MDAwMGFhY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAsIDB4MDAwMGQzOTAgfSwKKyAgICB7IDB4MDAwMGFhZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQsIDB4MDAwMGQzOTQgfSwKKyAgICB7IDB4MDAwMGFhZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTgsIDB4MDAwMGQzOTggfSwKKyAgICB7IDB4MDAwMGFhZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQsIDB4MDAwMGQzYTQgfSwKKyAgICB7IDB4MDAwMGFhZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTgsIDB4MDAwMGQzYTggfSwKKyAgICB7IDB4MDAwMGFhZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMsIDB4MDAwMGQzYWMgfSwKKyAgICB7IDB4MDAwMGFhZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAsIDB4MDAwMGQzYjAgfSwKKyAgICB7IDB4MDAwMGFhZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAsIDB4MDAwMGYzODAgfSwKKyAgICB7IDB4MDAwMGFhZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQsIDB4MDAwMGYzODQgfSwKKyAgICB7IDB4MDAwMGFhZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGYzODgsIDB4MDAwMGYzODgsIDB4MDAwMGYzODggfSwKKyAgICB7IDB4MDAwMGFhZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAsIDB4MDAwMGY3MTAgfSwKKyAgICB7IDB4MDAwMGFhZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQsIDB4MDAwMGY3MTQgfSwKKyAgICB7IDB4MDAwMGFhZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTgsIDB4MDAwMGY3MTggfSwKKyAgICB7IDB4MDAwMGFiMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAsIDB4MDAwMGZiMTAgfSwKKyAgICB7IDB4MDAwMGFiMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQsIDB4MDAwMGZiMTQgfSwKKyAgICB7IDB4MDAwMGFiMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTgsIDB4MDAwMGZiMTggfSwKKyAgICB7IDB4MDAwMGFiMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMsIDB4MDAwMGZiOGMgfSwKKyAgICB7IDB4MDAwMGFiMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAsIDB4MDAwMGZiOTAgfSwKKyAgICB7IDB4MDAwMGFiMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQsIDB4MDAwMGZiOTQgfSwKKyAgICB7IDB4MDAwMGFiMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMsIDB4MDAwMGZmOGMgfSwKKyAgICB7IDB4MDAwMGFiMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAsIDB4MDAwMGZmOTAgfSwKKyAgICB7IDB4MDAwMGFiMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQsIDB4MDAwMGZmOTQgfSwKKyAgICB7IDB4MDAwMGFiMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAsIDB4MDAwMGZmYTAgfSwKKyAgICB7IDB4MDAwMGFiMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQsIDB4MDAwMGZmYTQgfSwKKyAgICB7IDB4MDAwMGFiMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTgsIDB4MDAwMGZmYTggfSwKKyAgICB7IDB4MDAwMGFiMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMsIDB4MDAwMGZmYWMgfSwKKyAgICB7IDB4MDAwMGFiMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAsIDB4MDAwMGZmYjAgfSwKKyAgICB7IDB4MDAwMGFiMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQsIDB4MDAwMGZmYjQgfSwKKyAgICB7IDB4MDAwMGFiM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEsIDB4MDAwMGZmYTEgfSwKKyAgICB7IDB4MDAwMGFiNDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUsIDB4MDAwMGZmYTUgfSwKKyAgICB7IDB4MDAwMGFiNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYTksIDB4MDAwMGZmYTksIDB4MDAwMGZmYTkgfSwKKyAgICB7IDB4MDAwMGFiNDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQsIDB4MDAwMGZmYWQgfSwKKyAgICB7IDB4MDAwMGFiNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEsIDB4MDAwMGZmYjEgfSwKKyAgICB7IDB4MDAwMGFiNTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUsIDB4MDAwMGZmYjUgfSwKKyAgICB7IDB4MDAwMGFiNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYjksIDB4MDAwMGZmYjksIDB4MDAwMGZmYjkgfSwKKyAgICB7IDB4MDAwMGFiNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUsIDB4MDAwMGZmYzUgfSwKKyAgICB7IDB4MDAwMGFiNWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzksIDB4MDAwMGZmYzksIDB4MDAwMGZmYzkgfSwKKyAgICB7IDB4MDAwMGFiNjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QsIDB4MDAwMGZmY2QgfSwKKyAgICB7IDB4MDAwMGFiNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEsIDB4MDAwMGZmZDEgfSwKKyAgICB7IDB4MDAwMGFiNjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUsIDB4MDAwMGZmZDUgfSwKKyAgICB7IDB4MDAwMGFiNmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIsIDB4MDAwMGZmYzIgfSwKKyAgICB7IDB4MDAwMGFiNzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYsIDB4MDAwMGZmYzYgfSwKKyAgICB7IDB4MDAwMGFiNzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EsIDB4MDAwMGZmY2EgfSwKKyAgICB7IDB4MDAwMGFiNzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UsIDB4MDAwMGZmY2UgfSwKKyAgICB7IDB4MDAwMGFiN2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIsIDB4MDAwMGZmZDIgfSwKKyAgICB7IDB4MDAwMGFiODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYsIDB4MDAwMGZmZDYgfSwKKyAgICB7IDB4MDAwMGFiODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEsIDB4MDAwMGZmZGEgfSwKKyAgICB7IDB4MDAwMGFiODgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcsIDB4MDAwMGZmYzcgfSwKKyAgICB7IDB4MDAwMGFiOGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IsIDB4MDAwMGZmY2IgfSwKKyAgICB7IDB4MDAwMGFiOTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YsIDB4MDAwMGZmY2YgfSwKKyAgICB7IDB4MDAwMGFiOTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMsIDB4MDAwMGZmZDMgfSwKKyAgICB7IDB4MDAwMGFiOTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcsIDB4MDAwMGZmZDcgfSwKKyAgICB7IDB4MDAwMGFiOWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiY2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMGFiZmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIsIDB4MDAwMGZmZGIgfSwKKyAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcgfSwKKyAgICB7IDB4MDAwMGE4NDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcsIDB4MDAwMDEwNjcgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODdfMV8wW11bMl0gPSB7CisgICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCisgICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCisgICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCisgICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZkIH0sCisgICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCisgICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCisgICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCisgICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4N1BjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg3XzFfMFtdWzJdID0geworICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmYyB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAorICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAorICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAorICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorfTsKKworLyogQVI5Mjg3IFJldmlzaW9uIDExICovCisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3TW9kZXNfOTI4N18xXzFbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAorICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LAorICAgIHsgMHgwMDAwMTBmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9LAorICAgIHsgMHgwMDAwODAxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMCB9LAorICAgIHsgMHgwMDAwODAxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0ZiB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCB9LAorICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIwMCwgMHgwMDAwMzIwMCwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSB9LAorICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MCB9LAorICAgIHsgMHgwMDAwOTgwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMyB9LAorICAgIHsgMHgwMDAwOTgyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9LAorICAgIHsgMHgwMDAwOTgyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSwgMHgwMTAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzYTAyMDAwMSwgMHgzYTAyMDAwMSwgMHgzYTAyMDAwMSB9LAorICAgIHsgMHgwMDAwOTgzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9LAorICAgIHsgMHgwMDAwOTgzOCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNyB9LAorICAgIHsgMHgwMDAwOTg0MCwgMHgyMDZhMDAyZSwgMHgyMDZhMDAyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSwgMHgyMDZhMDEyZSB9LAorICAgIHsgMHgwMDAwOTg0NCwgMHgwMzcyMDAwMCwgMHgwMzcyMDAwMCwgMHgwMzcyMTZhMCwgMHgwMzcyMTZhMCwgMHgwMzcyMTZhMCB9LAorICAgIHsgMHgwMDAwOTg1MCwgMHg2MDAwMDAwMCwgMHg2MDAwMDAwMCwgMHg2ZDQwMDBlMiwgMHg2YzQwMDBlMiwgMHg2YzQwMDBlMiB9LAorICAgIHsgMHgwMDAwOTg1OCwgMHg3YzAwMGQwMCwgMHg3YzAwMGQwMCwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSwgMHg3ZWM4NGQyZSB9LAorICAgIHsgMHgwMDAwOTg1YywgMHgzMTAwMDA1ZSwgMHgzMTAwMDA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NWQ1ZSwgMHgzMTM5NWQ1ZSB9LAorICAgIHsgMHgwMDAwOTg2MCwgMHgwMDA1OGQwMCwgMHgwMDA1OGQwMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQyMCwgMHgwMDA1OGQxOCB9LAorICAgIHsgMHgwMDAwOTg2NCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9LAorICAgIHsgMHgwMDAwOTg2OCwgMHgwMDAwNDBjMCwgMHgwMDAwNDBjMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCwgMHg1YWM2NDBkMCB9LAorICAgIHsgMHgwMDAwOTg2YywgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSwgMHgwNjkwMzg4MSB9LAorICAgIHsgMHgwMDAwOTkxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9LAorICAgIHsgMHgwMDAwOTkxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxNiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAxNiB9LAorICAgIHsgMHgwMDAwOTkyNCwgMHhkMDBhOGEwMSwgMHhkMDBhOGEwMSwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZCwgMHhkMDBhOGEwZCB9LAorICAgIHsgMHgwMDAwOTk0NCwgMHhlZmJjMDAwMCwgMHhlZmJjMDAwMCwgMHhlZmJjMTAxMCwgMHhlZmJjMTAxMCwgMHhlZmJjMTAxMCB9LAorICAgIHsgMHgwMDAwOTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9LAorICAgIHsgMHgwMDAwYTk2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9LAorICAgIHsgMHgwMDAwOTk2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDIxMCB9LAorICAgIHsgMHgwMDAwYzk2OCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSB9LAorICAgIHsgMHgwMDAwOTliOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYyB9LAorICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAorICAgIHsgMHgwMDAwOTljMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAorICAgIHsgMHgwMDAwYTIwNCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCwgMHgwMDAwMDQ0NCB9LAorICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYjIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTIxYywgMHgxODAzODAwYSwgMHgxODAzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9LAorICAgIHsgMHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCB9LAorICAgIHsgMHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSB9LAorICAgIHsgMHgwMDAwYTNkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdDb21tb25fOTI4N18xXzFbXVsyXSA9IHsKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwMTUgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKKyAgICB7IDB4MDAwMDAwNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDQsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSwKKyAgICB7IDB4MDAwMDAwNGMsIDB4MDAwMDAwMTAgfSwKKyAgICB7IDB4MDAwMDAwNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDAwNTQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDA4MjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNDAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNDgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNGMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNTgsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNWMsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjAsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEwNjQsIDB4MDAyZmZjMGYgfSwKKyAgICB7IDB4MDAwMDEyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE1ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE2ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3MzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3NzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3YjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE3ZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEwZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDExZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEyZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzYmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDEzZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDE0N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwMzAsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwM2MsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDQwMjQsIDB4MDAwMDAwMWYgfSwKKyAgICB7IDB4MDAwMDQwNjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDQwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDcwMTAsIDB4MDAwMDAwMzMgfSwKKyAgICB7IDB4MDAwMDcwMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDcwMzQsIDB4MDAwMDAwMDIgfSwKKyAgICB7IDB4MDAwMDcwMzgsIDB4MDAwMDA0YzIgfSwKKyAgICB7IDB4MDAwMDgwMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMTgsIDB4MDAwMDA3MDAgfSwKKyAgICB7IDB4MDAwMDgwMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNDgsIDB4NDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNWMsIDB4MDAwZmM3OGYgfSwKKyAgICB7IDB4MDAwMDgwNjAsIDB4MDAwMDAwMGYgfSwKKyAgICB7IDB4MDAwMDgwNjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwYzAsIDB4MmE4MDAwMWEgfSwKKyAgICB7IDB4MDAwMDgwYzQsIDB4MDVkYzAxZTAgfSwKKyAgICB7IDB4MDAwMDgwYzgsIDB4MWY0MDI3MTAgfSwKKyAgICB7IDB4MDAwMDgwY2MsIDB4MDFmNDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDAsIDB4MDAwMDFlMDAgfSwKKyAgICB7IDB4MDAwMDgwZDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZDgsIDB4MDA0MDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZTAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTQsIDB4MDAwMGZmZmYgfSwKKyAgICB7IDB4MDAwMDgwZTgsIDB4MDAzZjNmM2YgfSwKKyAgICB7IDB4MDAwMDgwZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgwZmMsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDAsIDB4MDAwMjAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMDQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDgxMDgsIDB4MDAwMDAwNTIgfSwKKyAgICB7IDB4MDAwMDgxMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKKyAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKKyAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKKyAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNDQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgxNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxNzAsIDB4MTg0ODczMjAgfSwKKyAgICB7IDB4MDAwMDgxNzQsIDB4ZmFhNGZhNTAgfSwKKyAgICB7IDB4MDAwMDgxNzgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgxN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxYzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgxZmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMmMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyMzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDAsIDB4MDAxMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNDQsIDB4MDAxMGY0MDAgfSwKKyAgICB7IDB4MDAwMDgyNDgsIDB4MDAwMDAxMDAgfSwKKyAgICB7IDB4MDAwMDgyNGMsIDB4MDAwMWU4MDAgfSwKKyAgICB7IDB4MDAwMDgyNTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNWMsIDB4NDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgyNjAsIDB4MDAwODA5MjIgfSwKKyAgICB7IDB4MDAwMDgyNjQsIDB4ODhhMDAwMTAgfSwKKyAgICB7IDB4MDAwMDgyNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzQsIDB4NDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyNzgsIDB4MDAzZTQxODAgfSwKKyAgICB7IDB4MDAwMDgyN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyODQsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyODgsIDB4MDAwMDAwMmMgfSwKKyAgICB7IDB4MDAwMDgyOGMsIDB4MDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgyOTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgyOWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMDAsIDB4MDAwMDAwNDAgfSwKKyAgICB7IDB4MDAwMDgzMTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzMmMsIDB4MDAwMDAwMDcgfSwKKyAgICB7IDB4MDAwMDgzMzAsIDB4MDAwMDAzMDIgfSwKKyAgICB7IDB4MDAwMDgzMzQsIDB4MDAwMDBlMDAgfSwKKyAgICB7IDB4MDAwMDgzMzgsIDB4MDBmZjAwMDAgfSwKKyAgICB7IDB4MDAwMDgzM2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNDAsIDB4MDAwMTA3ZmYgfSwKKyAgICB7IDB4MDAwMDgzNDQsIDB4MDFjODEwNDMgfSwKKyAgICB7IDB4MDAwMDgzNjAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzNjQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzNzQsIDB4MDAwMDAwZmYgfSwKKyAgICB7IDB4MDAwMDgzNzgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzN2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzODAsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzODQsIDB4ZmZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzOTAsIDB4MGZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzOTQsIDB4MGZmZmZmZmYgfSwKKyAgICB7IDB4MDAwMDgzOTgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzOWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDgzYTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MGMsIDB4YWZlNjhlMzAgfSwKKyAgICB7IDB4MDAwMDk4MTAsIDB4ZmQxNGUwMDAgfSwKKyAgICB7IDB4MDAwMDk4MTQsIDB4OWMwYTlmNmIgfSwKKyAgICB7IDB4MDAwMDk4MWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4MmMsIDB4MDAwMGEwMDAgfSwKKyAgICB7IDB4MDAwMDk4MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk4M2MsIDB4MDAyMDA0MDAgfSwKKyAgICB7IDB4MDAwMDk4NGMsIDB4MDA0MDIzM2MgfSwKKyAgICB7IDB4MDAwMGE4NGMsIDB4MDA0MDIzM2MgfSwKKyAgICB7IDB4MDAwMDk4NTQsIDB4MDAwMDAwNDQgfSwKKyAgICB7IDB4MDAwMDk5MDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MDgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MTAsIDB4MTAwMDIzMTAgfSwKKyAgICB7IDB4MDAwMDk5MWMsIDB4MTAwMDBmZmYgfSwKKyAgICB7IDB4MDAwMDk5MjAsIDB4MDQ5MDAwMDAgfSwKKyAgICB7IDB4MDAwMGE5MjAsIDB4MDQ5MDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MjgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5MmMsIDB4MDAwMDAwMDQgfSwKKyAgICB7IDB4MDAwMDk5MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGE5MzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5MzQsIDB4MWUxZjIwMjIgfSwKKyAgICB7IDB4MDAwMDk5MzgsIDB4MGEwYjBjMGQgfSwKKyAgICB7IDB4MDAwMDk5M2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKKyAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKKyAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKKyAgICB7IDB4MDAwMDk5NTgsIDB4MDEwOGVjZmYgfSwKKyAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKKyAgICB7IDB4MDAwMGM5NWMsIDB4MDA0YjZhOGUgfSwKKyAgICB7IDB4MDAwMDk5NzAsIDB4OTkwYmI1MTQgfSwKKyAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5N2MsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YTQsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMDk5YTgsIDB4MjAxZmZmMDAgfSwKKyAgICB7IDB4MDAwMDk5YWMsIDB4MGM2ZjAwMDAgfSwKKyAgICB7IDB4MDAwMDk5YjAsIDB4MDMwNTEwMDAgfSwKKyAgICB7IDB4MDAwMDk5YjQsIDB4MDAwMDA4MjAgfSwKKyAgICB7IDB4MDAwMDk5YzQsIDB4MDYzMzZmNzcgfSwKKyAgICB7IDB4MDAwMDk5YzgsIDB4NmFmNjUzMmYgfSwKKyAgICB7IDB4MDAwMDk5Y2MsIDB4MDhmMTg2YzggfSwKKyAgICB7IDB4MDAwMDk5ZDAsIDB4MDAwNDYzODQgfSwKKyAgICB7IDB4MDAwMDk5ZGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZTQsIDB4YWFhYWFhYWEgfSwKKyAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKKyAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKKyAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDk5ZmMsIDB4MDAwMDEwNDIgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDBmZmZlZmYgfSwKKyAgICB7IDB4MDAwMGExZjgsIDB4MDBmNWY5ZmYgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4Yjc5ZjY0MjcgfSwKKyAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTQ3ODggfSwKKyAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKKyAgICB7IDB4MDAwMGEyMTQsIDB4NDAyMDZjMTAgfSwKKyAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKKyAgICB7IDB4MDAwMGEyMjAsIDB4MDE4MzQwNjEgfSwKKyAgICB7IDB4MDAwMGEyMjQsIDB4MDAwMDA0MDAgfSwKKyAgICB7IDB4MDAwMGEyMjgsIDB4MDAwMDAzYjUgfSwKKyAgICB7IDB4MDAwMGEyMmMsIDB4MjMzZjcxODAgfSwKKyAgICB7IDB4MDAwMGEyMzQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyMzgsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEyM2MsIDB4MTNjODg5YWYgfSwKKyAgICB7IDB4MDAwMGEyNDAsIDB4Mzg0OTBhMjAgfSwKKyAgICB7IDB4MDAwMGEyNDQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNDgsIDB4ZmZmZmZmZmMgfSwKKyAgICB7IDB4MDAwMGEyNGMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNTgsIDB4MGNkYmQzODAgfSwKKyAgICB7IDB4MDAwMGEyNWMsIDB4MGYwZjBmMDEgfSwKKyAgICB7IDB4MDAwMGEyNjAsIDB4ZGZhOTFmMDEgfSwKKyAgICB7IDB4MDAwMGEyNjQsIDB4MDA0MThhMTEgfSwKKyAgICB7IDB4MDAwMGIyNjQsIDB4MDA0MThhMTEgfSwKKyAgICB7IDB4MDAwMGEyNjgsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEyNmMsIDB4MGU3OWU1YzYgfSwKKyAgICB7IDB4MDAwMGIyNmMsIDB4MGU3OWU1YzYgfSwKKyAgICB7IDB4MDAwMGQyNzAsIDB4MDA4MjA4MjAgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UgfSwKKyAgICB7IDB4MDAwMGQzNWMsIDB4MDdmZmZmZWYgfSwKKyAgICB7IDB4MDAwMGQzNjAsIDB4MGZmZmZmZTcgfSwKKyAgICB7IDB4MDAwMGQzNjQsIDB4MTdmZmZmZTUgfSwKKyAgICB7IDB4MDAwMGQzNjgsIDB4MWZmZmZmZTQgfSwKKyAgICB7IDB4MDAwMGQzNmMsIDB4MzdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzAsIDB4M2ZmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzQsIDB4NTdmZmZmZTMgfSwKKyAgICB7IDB4MDAwMGQzNzgsIDB4NWZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzN2MsIDB4N2ZmZmZmZTIgfSwKKyAgICB7IDB4MDAwMGQzODAsIDB4N2YzYzdiYmEgfSwKKyAgICB7IDB4MDAwMGQzODQsIDB4ZjMzMDdmZjAgfSwKKyAgICB7IDB4MDAwMGEzODgsIDB4MGMwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzOGMsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOTAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGIzOTgsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzOWMsIDB4MDAwMDAwMDEgfSwKKyAgICB7IDB4MDAwMGEzYzgsIDB4MDAwMDAyNDYgfSwKKyAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKKyAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKKyAgICB7IDB4MDAwMGEzZjAsIDB4MDEwMzZhMWUgfSwKKyAgICB7IDB4MDAwMGEzZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGIzZjQsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGE3ZDgsIDB4MDAwMDAzZjEgfSwKKyAgICB7IDB4MDAwMDc4MDAsIDB4MDAwMDA4MDAgfSwKKyAgICB7IDB4MDAwMDc4MDQsIDB4NmMzNWZmYzIgfSwKKyAgICB7IDB4MDAwMDc4MDgsIDB4NmRiNmMwMDAgfSwKKyAgICB7IDB4MDAwMDc4MGMsIDB4NmRiNmNiMzAgfSwKKyAgICB7IDB4MDAwMDc4MTAsIDB4NmRiNmNiNmMgfSwKKyAgICB7IDB4MDAwMDc4MTQsIDB4MDUwMWUyMDAgfSwKKyAgICB7IDB4MDAwMDc4MTgsIDB4MDA5NDEyOGQgfSwKKyAgICB7IDB4MDAwMDc4MWMsIDB4OTc2ZWUzOTIgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4Zjc1ZmY2ZmMgfSwKKyAgICB7IDB4MDAwMDc4MjQsIDB4MDAwNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MjgsIDB4ZGIwMDMwMTIgfSwKKyAgICB7IDB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTQgfSwKKyAgICB7IDB4MDAwMDc4MzAsIDB4MjEwODQyMTAgfSwKKyAgICB7IDB4MDAwMDc4MzQsIDB4MDAxNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4MGU0NTQ4ZDggfSwKKyAgICB7IDB4MDAwMDc4M2MsIDB4NTQyMTQ1MTQgfSwKKyAgICB7IDB4MDAwMDc4NDAsIDB4MDIwMjU4MzAgfSwKKyAgICB7IDB4MDAwMDc4NDQsIDB4NzFjMGQzODggfSwKKyAgICB7IDB4MDAwMDc4NDgsIDB4OTM0OTM0YTggfSwKKyAgICB7IDB4MDAwMDc4NTAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4NTQsIDB4MDAwMDA4MDAgfSwKKyAgICB7IDB4MDAwMDc4NTgsIDB4NmMzNWZmYzIgfSwKKyAgICB7IDB4MDAwMDc4NWMsIDB4NmRiNmMwMDAgfSwKKyAgICB7IDB4MDAwMDc4NjAsIDB4NmRiNmNiMzAgfSwKKyAgICB7IDB4MDAwMDc4NjQsIDB4NmRiNmNiNmMgfSwKKyAgICB7IDB4MDAwMDc4NjgsIDB4MDUwMWUyMDAgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDA5NDEyOGQgfSwKKyAgICB7IDB4MDAwMDc4NzAsIDB4OTc2ZWUzOTIgfSwKKyAgICB7IDB4MDAwMDc4NzQsIDB4Zjc1ZmY2ZmMgfSwKKyAgICB7IDB4MDAwMDc4NzgsIDB4MDAwNDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4N2MsIDB4ZGIwMDMwMTIgfSwKKyAgICB7IDB4MDAwMDc4ODAsIDB4MDQ5MjQ5MTQgfSwKKyAgICB7IDB4MDAwMDc4ODQsIDB4MjEwODQyMTAgfSwKKyAgICB7IDB4MDAwMDc4ODgsIDB4MDAxYjZkYjAgfSwKKyAgICB7IDB4MDAwMDc4OGMsIDB4MDAzNzZiNjMgfSwKKyAgICB7IDB4MDAwMDc4OTAsIDB4MDZkYjZkYjYgfSwKKyAgICB7IDB4MDAwMDc4OTQsIDB4MDA2ZDgwMDAgfSwKKyAgICB7IDB4MDAwMDc4OTgsIDB4NDgxMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4OWMsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4YTAsIDB4MDgwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4YTQsIDB4MDAwN2ZmZDggfSwKKyAgICB7IDB4MDAwMDc4YTgsIDB4MDAwN2ZmZDggfSwKKyAgICB7IDB4MDAwMDc4YWMsIDB4MDAxYzAwMjAgfSwKKyAgICB7IDB4MDAwMDc4YjAsIDB4MDAwNjBhZWIgfSwKKyAgICB7IDB4MDAwMDc4YjQsIDB4NDAwMDgwODAgfSwKKyAgICB7IDB4MDAwMDc4YjgsIDB4MmE4NTAxNjAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3TW9kZXNfdHhfZ2Fpbl85Mjg3XzFfMVtdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyLCAweDAwMDA0MDAyIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MDA0LCAweDAwMDA4MDA0LCAweDAwMDA4MDA0IH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjMDBhLCAweDAwMDBjMDBhLCAweDAwMDBjMDBhIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjLCAweDAwMDEwMDBjIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0MjBiLCAweDAwMDE0MjBiLCAweDAwMDE0MjBiIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MjRhLCAweDAwMDE4MjRhLCAweDAwMDE4MjRhIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhLCAweDAwMDFjNDRhIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIwNjRhLCAweDAwMDIwNjRhLCAweDAwMDIwNjRhIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0ODRhLCAweDAwMDI0ODRhLCAweDAwMDI0ODRhIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhLCAweDAwMDI4YTRhIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJjYzRhLCAweDAwMDJjYzRhLCAweDAwMDJjYzRhIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwZTRhLCAweDAwMDMwZTRhLCAweDAwMDMwZTRhIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhLCAweDAwMDM0ZThhIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4ZThjLCAweDAwMDM4ZThjLCAweDAwMDM4ZThjIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjZWNjLCAweDAwMDNjZWNjLCAweDAwMDNjZWNjIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0LCAweDAwMDQwZWQ0IH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0ZWRjLCAweDAwMDQ0ZWRjLCAweDAwMDQ0ZWRjIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4ZWRlLCAweDAwMDQ4ZWRlLCAweDAwMDQ4ZWRlIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlLCAweDAwMDRjZjFlIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDUwZjVlLCAweDAwMDUwZjVlLCAweDAwMDUwZjVlIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDU0ZjllLCAweDAwMDU0ZjllLCAweDAwMDU0ZjllIH0sCisgICAgeyAweDAwMDBhNzgwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyLCAweDAwMDAwMDYyIH0sCisgICAgeyAweDAwMDBhNzg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA0MDY0LCAweDAwMDA0MDY0LCAweDAwMDA0MDY0IH0sCisgICAgeyAweDAwMDBhNzg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MGE0LCAweDAwMDA4MGE0LCAweDAwMDA4MGE0IH0sCisgICAgeyAweDAwMDBhNzhjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhLCAweDAwMDBjMGFhIH0sCisgICAgeyAweDAwMDBhNzkwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMGFjLCAweDAwMDEwMGFjLCAweDAwMDEwMGFjIH0sCisgICAgeyAweDAwMDBhNzk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE0MGI0LCAweDAwMDE0MGI0LCAweDAwMDE0MGI0IH0sCisgICAgeyAweDAwMDBhNzk4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE4MGY0LCAweDAwMDE4MGY0LCAweDAwMDE4MGY0IH0sCisgICAgeyAweDAwMDBhNzljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFjMTM0LCAweDAwMDFjMTM0LCAweDAwMDFjMTM0IH0sCisgICAgeyAweDAwMDBhN2EwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIwMTc0LCAweDAwMDIwMTc0LCAweDAwMDIwMTc0IH0sCisgICAgeyAweDAwMDBhN2E0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjLCAweDAwMDI0MTdjIH0sCisgICAgeyAweDAwMDBhN2E4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDI4MTdlLCAweDAwMDI4MTdlLCAweDAwMDI4MTdlIH0sCisgICAgeyAweDAwMDBhN2FjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJjMWJlLCAweDAwMDJjMWJlLCAweDAwMDJjMWJlIH0sCisgICAgeyAweDAwMDBhN2IwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2I0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2I4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2JjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2M0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2M4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2NjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2QwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhN2Q0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlLCAweDAwMDMwMWZlIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMTgwMDAwLCAweDBhMTgwMDAwLCAweDBhMWFhMDAwLCAweDBhMWFhMDAwLCAweDBhMWFhMDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4N01vZGVzX3J4X2dhaW5fOTI4N18xXzFbXVs2XSA9IHsKKyAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLworICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAorICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAorICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAorICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAorICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAorICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAorICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAorICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAorICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAorICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAorICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAorICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAorICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAorICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAorICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAorICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAorICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAorICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAorICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAorICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAorICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAorICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAorICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAorICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAorICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAorICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAorICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAorICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAorICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAorICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAorICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAorICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAorICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAorICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAorICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAorICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAorICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAorICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAorICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAorICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAorICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAorICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAorICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAorICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAorICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAorICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAorICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAorICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAorICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAorICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAorICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAorICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAorICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAorICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAorICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAorICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAorICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAorICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAorICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAorICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAorICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAorICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAorICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAorICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAorICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAorICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAorICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAorICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAorICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAorICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAorICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAorICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAorICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAorICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAorICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAorICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAorICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAorICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAorICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAorICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAorICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAorICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAorICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAorICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAorICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAorICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAorICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAorICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAorICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAorICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAorICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAorICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAorICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAorICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAorICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAorICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAorICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAorICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAorICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAorICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAorICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAorICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAorICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAorICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCwgMHgwMDAwYTEyMCB9LAorICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCwgMHgwMDAwYTEyNCB9LAorICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCwgMHgwMDAwYTEyOCB9LAorICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEyYywgMHgwMDAwYTEyYywgMHgwMDAwYTEyYyB9LAorICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCwgMHgwMDAwYTEzMCB9LAorICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCwgMHgwMDAwYTE5NCB9LAorICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCwgMHgwMDAwYTE5OCB9LAorICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIwYywgMHgwMDAwYTIwYywgMHgwMDAwYTIwYyB9LAorICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCwgMHgwMDAwYTIxMCB9LAorICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCwgMHgwMDAwYTI4NCB9LAorICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCwgMHgwMDAwYTI4OCB9LAorICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI4YywgMHgwMDAwYTI4YywgMHgwMDAwYTI4YyB9LAorICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCwgMHgwMDAwYTI5MCB9LAorICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCwgMHgwMDAwYTI5NCB9LAorICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCwgMHgwMDAwYTJhMCB9LAorICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCwgMHgwMDAwYTJhNCB9LAorICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCwgMHgwMDAwYTJhOCB9LAorICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJhYywgMHgwMDAwYTJhYywgMHgwMDAwYTJhYyB9LAorICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCwgMHgwMDAwYTJiMCB9LAorICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCwgMHgwMDAwYTJiNCB9LAorICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCwgMHgwMDAwYTJiOCB9LAorICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCwgMHgwMDAwYTJjNCB9LAorICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCwgMHgwMDAwYTcwOCB9LAorICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcwYywgMHgwMDAwYTcwYywgMHgwMDAwYTcwYyB9LAorICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCwgMHgwMDAwYTcxMCB9LAorICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCwgMHgwMDAwYWIwNCB9LAorICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCwgMHgwMDAwYWIwOCB9LAorICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIwYywgMHgwMDAwYWIwYywgMHgwMDAwYWIwYyB9LAorICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCwgMHgwMDAwYWIxMCB9LAorICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCwgMHgwMDAwYWIxNCB9LAorICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCwgMHgwMDAwYWIxOCB9LAorICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI4YywgMHgwMDAwYWI4YywgMHgwMDAwYWI4YyB9LAorICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCwgMHgwMDAwYWI5MCB9LAorICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCwgMHgwMDAwYWI5NCB9LAorICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCwgMHgwMDAwYWI5OCB9LAorICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCwgMHgwMDAwYWJhNCB9LAorICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCwgMHgwMDAwYWJhOCB9LAorICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCwgMHgwMDAwY2IwNCB9LAorICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCwgMHgwMDAwY2IwOCB9LAorICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IwYywgMHgwMDAwY2IwYywgMHgwMDAwY2IwYyB9LAorICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCwgMHgwMDAwY2IxMCB9LAorICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCwgMHgwMDAwY2IxNCB9LAorICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCwgMHgwMDAwY2IxOCB9LAorICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I4YywgMHgwMDAwY2I4YywgMHgwMDAwY2I4YyB9LAorICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCwgMHgwMDAwY2I5MCB9LAorICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCwgMHgwMDAwY2YxOCB9LAorICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCwgMHgwMDAwY2YyNCB9LAorICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCwgMHgwMDAwY2YyOCB9LAorICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCwgMHgwMDAwZDMxNCB9LAorICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCwgMHgwMDAwZDMxOCB9LAorICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM4YywgMHgwMDAwZDM4YywgMHgwMDAwZDM4YyB9LAorICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCwgMHgwMDAwZDM5MCB9LAorICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCwgMHgwMDAwZDM5NCB9LAorICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCwgMHgwMDAwZDM5OCB9LAorICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCwgMHgwMDAwZDNhNCB9LAorICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCwgMHgwMDAwZDNhOCB9LAorICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNhYywgMHgwMDAwZDNhYywgMHgwMDAwZDNhYyB9LAorICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCwgMHgwMDAwZDNiMCB9LAorICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCwgMHgwMDAwZjM4MCB9LAorICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCwgMHgwMDAwZjM4NCB9LAorICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCwgMHgwMDAwZjM4OCB9LAorICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCwgMHgwMDAwZjcxMCB9LAorICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCwgMHgwMDAwZjcxNCB9LAorICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCwgMHgwMDAwZjcxOCB9LAorICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCwgMHgwMDAwZmIxMCB9LAorICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCwgMHgwMDAwZmIxNCB9LAorICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCwgMHgwMDAwZmIxOCB9LAorICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI4YywgMHgwMDAwZmI4YywgMHgwMDAwZmI4YyB9LAorICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCwgMHgwMDAwZmI5MCB9LAorICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCwgMHgwMDAwZmI5NCB9LAorICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY4YywgMHgwMDAwZmY4YywgMHgwMDAwZmY4YyB9LAorICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCwgMHgwMDAwZmY5MCB9LAorICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCwgMHgwMDAwZmY5NCB9LAorICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCwgMHgwMDAwZmZhMCB9LAorICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCwgMHgwMDAwZmZhNCB9LAorICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCwgMHgwMDAwZmZhOCB9LAorICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhYywgMHgwMDAwZmZhYywgMHgwMDAwZmZhYyB9LAorICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCwgMHgwMDAwZmZiMCB9LAorICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCwgMHgwMDAwZmZiNCB9LAorICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSwgMHgwMDAwZmZhMSB9LAorICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSwgMHgwMDAwZmZhNSB9LAorICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSwgMHgwMDAwZmZhOSB9LAorICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCwgMHgwMDAwZmZhZCB9LAorICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSwgMHgwMDAwZmZiMSB9LAorICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSwgMHgwMDAwZmZiNSB9LAorICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSwgMHgwMDAwZmZiOSB9LAorICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSwgMHgwMDAwZmZjNSB9LAorICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSwgMHgwMDAwZmZjOSB9LAorICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCwgMHgwMDAwZmZjZCB9LAorICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSwgMHgwMDAwZmZkMSB9LAorICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSwgMHgwMDAwZmZkNSB9LAorICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiwgMHgwMDAwZmZjMiB9LAorICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiwgMHgwMDAwZmZjNiB9LAorICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSwgMHgwMDAwZmZjYSB9LAorICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSwgMHgwMDAwZmZjZSB9LAorICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiwgMHgwMDAwZmZkMiB9LAorICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiwgMHgwMDAwZmZkNiB9LAorICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSwgMHgwMDAwZmZkYSB9LAorICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjNywgMHgwMDAwZmZjNywgMHgwMDAwZmZjNyB9LAorICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiwgMHgwMDAwZmZjYiB9LAorICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiwgMHgwMDAwZmZjZiB9LAorICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkMywgMHgwMDAwZmZkMywgMHgwMDAwZmZkMyB9LAorICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkNywgMHgwMDAwZmZkNywgMHgwMDAwZmZkNyB9LAorICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiwgMHgwMDAwZmZkYiB9LAorICAgIHsgMHgwMDAwOTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAorICAgIHsgMHgwMDAwYTg0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMTA2NywgMHgwMDAwMTA2NywgMHgwMDAwMTA2NyB9LAorfTsKKworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODdQY2llUGh5X2Nsa3JlcV9hbHdheXNfb25fTDFfOTI4N18xXzFbXVsyXSA9IHsKKyAgICB7MHgwMDAwNDA0MCwgIDB4OTI0OGZkMDAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MjQ5MjQ5MjQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YTgwMDAwMTkgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MTMxNjA4MjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4ZTU5ODA1NjAgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YzAxZGNmZmQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MWFhYWJlNDEgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4YmUxMDU1NTQgfSwKKyAgICB7MHgwMDAwNDA0MCwgIDB4MDAwNDMwMDcgfSwKKyAgICB7MHgwMDAwNDA0NCwgIDB4MDAwMDAwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg3UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODdfMV8xW11bMl0gPSB7CisgICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCisgICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCisgICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCisgICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCisgICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZjIH0sCisgICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCisgICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCisgICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCisgICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCit9OworCisKKy8qIEFSOTI3MSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgYXV0b21hdGljYWx5IGNyZWF0ZWQ6IDAzLzIzLzA5ICovCitzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI3MU1vZGVzXzkyNzFfMV8wW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMGIwLCAweDAwMDAwZTYwLCAweDAwMDAxY2MwLCAweDAwMDA3YzcwLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0sCkBAIC00MTM5LDEwICs2MzgzLDExIEBACiAgICAgeyAweDAwMDA5ODQwLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlLCAweDIwNmEwMTJlIH0sCiAgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxNjFlLCAweDAzNzIxNjFlLCAweDAzNzIxNjIwLCAweDAzNzIxNjIwLCAweDAzNzIxNmEwIH0sCiAgICAgeyAweDAwMDA5ODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCisgICAgeyAweDAwMDBhODQ4LCAweDAwMDAxMDY2LCAweDAwMDAxMDY2LCAweDAwMDAxMDUzLCAweDAwMDAxMDUzLCAweDAwMDAxMDU5IH0sCiAgICAgeyAweDAwMDA5ODUwLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGUyIH0sCiAgICAgeyAweDAwMDA5ODU4LCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlLCAweDdlYzg0ZDJlIH0sCiAgICAgeyAweDAwMDA5ODVjLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzc2MDVlLCAweDMxMzc2MDVlLCAweDMxMzk2MDVlIH0sCi0gICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDIwLCAweDAwMDU4ZDIwLCAweDAwMDU4ZDE4IH0sCisgICAgeyAweDAwMDA5ODYwLCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4LCAweDAwMDU4ZDE4IH0sCiAgICAgeyAweDAwMDA5ODY0LCAweDAwMDBmZTAwLCAweDAwMDBmZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0sCiAgICAgeyAweDAwMDA5ODY4LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzY0MGQwIH0sCiAgICAgeyAweDAwMDA5ODZjLCAweDA2OTAzMDgxLCAweDA2OTAzMDgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxLCAweDA2OTAzODgxIH0sCkBAIC00NDE5LDEzICs2NjY0LDMzIEBACiAgICAgeyAweDAwMDBhYmZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMGViN2RiLCAweDAwMGViN2RiLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0sCiAgICAgeyAweDAwMDBhMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCisgICAgeyAweDAwMDBiMjBjLCAweDAwMDAwMDE0LCAweDAwMDAwMDE0LCAweDAwMDFmMDAwLCAweDAwMDFmMDAwLCAweDAwMDFmMDAwIH0sCiAgICAgeyAweDAwMDBhMjFjLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0sCiAgICAgeyAweDAwMDBhMjMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjUwLCAweDAwMDRmMDAwLCAweDAwMDRmMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwLCAweDAwMDRhMDAwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjE4NjUyLCAweDBhMjE4NjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDFlNjEwLCAweDAwMDFlNjEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJkNmQwLCAweDAwMDJkNmQwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM5NzU4LCAweDAwMDM5NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNiNzU5LCAweDAwMDNiNzU5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNkNzVhLCAweDAwMDNkNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQxNzVjLCAweDAwMDQxNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ1NzVlLCAweDAwMDQ1NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ5NzlmLCAweDAwMDQ5NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDRkN2RmLCAweDAwMDRkN2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDM2OGRlLCAweDAwMDM2OGRlLCAweDAwMDM2OGRlLCAweDAwMDM2OGRlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMzU4LCAweDc5OTlhYTAyLCAweDc5OTlhYTAyLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlLCAweDc5OTlhYTBlIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NUNvbW1vbl85Mjg1XzFfMltdWzJdID0geworc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyNzFDb21tb25fOTI3MV8xXzBbXVsyXSA9IHsKICAgICB7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDAwMzAsIDB4MDAwMjAwNDUgfSwKICAgICB7IDB4MDAwMDAwMzQsIDB4MDAwMDAwMDUgfSwKQEAgLTQ1MTIsOSArNjc3Nyw2IEBACiAgICAgeyAweDAwMDA0MDI0LCAweDAwMDAwMDFmIH0sCiAgICAgeyAweDAwMDA0MDYwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA0MDY0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMxIH0sCi0gICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCi0gICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCiAgICAgeyAweDAwMDA4MDA0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDBjLCAweDAwMDAwMDAwIH0sCkBAIC00NTI0LDExICs2Nzg2LDE1IEBACiAgICAgeyAweDAwMDA4MDNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDQ4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDU0LCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MDU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MDU4LCAweDAyMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDVjLCAweDAwMGZjNzhmIH0sCiAgICAgeyAweDAwMDA4MDYwLCAweDAwMDAwMDBmIH0sCiAgICAgeyAweDAwMDA4MDY0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MDcwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGIwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGI0LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGI4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA4MGJjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MGMwLCAweDJhODAwMDFhIH0sCiAgICAgeyAweDAwMDA4MGM0LCAweDA1ZGMwMWUwIH0sCiAgICAgeyAweDAwMDA4MGM4LCAweDFmNDAyNzEwIH0sCkBAIC00NTUxLDcgKzY4MTcsNyBAQAogICAgIHsgMHgwMDAwODExMCwgMHgwMDAwMDE2OCB9LAogICAgIHsgMHgwMDAwODExOCwgMHgwMDAxMDBhYSB9LAogICAgIHsgMHgwMDAwODExYywgMHgwMDAwMzIxMCB9LAotICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgxMCB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgxNCB9LAogICAgIHsgMHgwMDAwODEyNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODEyYywgMHgwMDAwMDAwMCB9LApAQCAtNDYxOSw2ICs2ODg1LDM3IEBACiAgICAgeyAweDAwMDA4MzNjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MzQwLCAweDAwMDEwMzgwIH0sCiAgICAgeyAweDAwMDA4MzQ0LCAweDAwNTgxMDQzIH0sCisgICAgeyAweDAwMDA3MDEwLCAweDAwMDAwMDMwIH0sCisgICAgeyAweDAwMDA3MDM0LCAweDAwMDAwMDAyIH0sCisgICAgeyAweDAwMDA3MDM4LCAweDAwMDAwNGMyIH0sCisgICAgeyAweDAwMDA3ODAwLCAweDAwMTQwMDAwIH0sCisgICAgeyAweDAwMDA3ODA0LCAweDBlNDU0OGQ4IH0sCisgICAgeyAweDAwMDA3ODA4LCAweDU0MjE0NTE0IH0sCisgICAgeyAweDAwMDA3ODBjLCAweDAyMDI1ODIwIH0sCisgICAgeyAweDAwMDA3ODEwLCAweDcxYzBkMzg4IH0sCisgICAgeyAweDAwMDA3ODE0LCAweDkyNDkzNGE4IH0sCisgICAgeyAweDAwMDA3ODFjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDA3ODI0LCAweDAwZDg2YmZmIH0sCisgICAgeyAweDAwMDA3ODI4LCAweDY2OTY0MzAwIH0sCisgICAgeyAweDAwMDA3ODJjLCAweDhkYjZkOTYxIH0sCisgICAgeyAweDAwMDA3ODMwLCAweDhkYjZkOTZjIH0sCisgICAgeyAweDAwMDA3ODM0LCAweDYxNDAwMDhiIH0sCisgICAgeyAweDAwMDA3ODM4LCAweDAwMDAwMDI5IH0sCisgICAgeyAweDAwMDA3ODNjLCAweDcyZWUwYTcyIH0sCisgICAgeyAweDAwMDA3ODQwLCAweGJiZmZmZmZjIH0sCisgICAgeyAweDAwMDA3ODQ0LCAweDAwMGMwZGI2IH0sCisgICAgeyAweDAwMDA3ODQ4LCAweDZkYjYxYjZmIH0sCisgICAgeyAweDAwMDA3ODRjLCAweDZkOWI2NmRiIH0sCisgICAgeyAweDAwMDA3ODUwLCAweDZkOGM2ZGJhIH0sCisgICAgeyAweDAwMDA3ODU0LCAweDAwMDQwMDAwIH0sCisgICAgeyAweDAwMDA3ODU4LCAweGRiMDAzMDEyIH0sCisgICAgeyAweDAwMDA3ODVjLCAweDA0OTI0OTE0IH0sCisgICAgeyAweDAwMDA3ODYwLCAweDIxMDg0MjEwIH0sCisgICAgeyAweDAwMDA3ODY0LCAweGY3ZDdmZmRlIH0sCisgICAgeyAweDAwMDA3ODY4LCAweGMyMDM0MDgwIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODcwLCAweDEwMTQyYzAwIH0sCiAgICAgeyAweDAwMDA5ODA4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODBjLCAweGFmZTY4ZTMwIH0sCiAgICAgeyAweDAwMDA5ODEwLCAweGZkMTRlMDAwIH0sCkBAIC00NjMzLDcgKzY5MzAsNyBAQAogICAgIHsgMHgwMDAwOTkwNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTkwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTkwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOTkxMCwgMHgwMTAwMjMxMCB9LAorICAgIHsgMHgwMDAwOTkxMCwgMHgzMDAwMjMxMCB9LAogICAgIHsgMHgwMDAwOTkxYywgMHgxMDAwMGZmZiB9LAogICAgIHsgMHgwMDAwOTkyMCwgMHgwNDkwMDAwMCB9LAogICAgIHsgMHgwMDAwOTkyOCwgMHgwMDAwMDAwMSB9LApAQCAtNDY0NSw3ICs2OTQyLDcgQEAKICAgICB7IDB4MDAwMDk5NDgsIDB4OTI4MGMwMGEgfSwKICAgICB7IDB4MDAwMDk5NGMsIDB4MDAwMjAwMjggfSwKICAgICB7IDB4MDAwMDk5NTQsIDB4NWYzY2EzZGUgfSwKLSAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKKyAgICB7IDB4MDAwMDk5NTgsIDB4MDEwOGVjZmYgfSwKICAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKICAgICB7IDB4MDAwMDk5NzAsIDB4MTkyYmI1MTUgfSwKICAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKQEAgLTQ2NzEsNiArNjk2OCw5IEBACiAgICAgeyAweDAwMDA5OWU4LCAweDNjNDY2NDc4IH0sCiAgICAgeyAweDAwMDA5OWVjLCAweDBjYzgwY2FhIH0sCiAgICAgeyAweDAwMDA5OWYwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMWY4LCAweDcxNzMzZDAxIH0sCisgICAgeyAweDAwMDBhMWZjLCAweGQwYWQ1YzEyIH0sCiAgICAgeyAweDAwMDBhMjA4LCAweDgwM2U2OGM4IH0sCiAgICAgeyAweDAwMDBhMjEwLCAweDQwODBhMzMzIH0sCiAgICAgeyAweDAwMDBhMjE0LCAweDAwMjA2YzEwIH0sCkBAIC00NjkwLDIxICs2OTkwLDEzIEBACiAgICAgeyAweDAwMDBhMjYwLCAweGRmYTkwZjAxIH0sCiAgICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCi0gICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCi0gICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCi0gICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCi0gICAgeyAweDAwMDBkMzY4LCAweDFmZmZmZmU0IH0sCi0gICAgeyAweDAwMDBkMzZjLCAweDM3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzcwLCAweDNmZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc0LCAweDU3ZmZmZmUzIH0sCi0gICAgeyAweDAwMDBkMzc4LCAweDVmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzdjLCAweDdmZmZmZmUyIH0sCi0gICAgeyAweDAwMDBkMzgwLCAweDdmM2M3YmJhIH0sCi0gICAgeyAweDAwMDBkMzg0LCAweGYzMzA3ZmYwIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDNiZGVmN2JkIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGU4M2JkIH0sCiAgICAgeyAweDAwMDBhMzg4LCAweDBjMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMzhjLCAweDIwMjAyMDIwIH0sCiAgICAgeyAweDAwMDBhMzkwLCAweDIwMjAyMDIwIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDNiZGVmN2JkIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwM2JkIH0sCiAgICAgeyAweDAwMDBhMzljLCAweDAwMDAwMDAxIH0sCiAgICAgeyAweDAwMDBhM2EwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhM2E0LCAweDAwMDAwMDAwIH0sCkBAIC00NzE5LDEzMCArNzAxMSwyMyBAQAogICAgIHsgMHgwMDAwYTNjYywgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTNkMCwgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTNkNCwgMHgyMDIwMjAyMCB9LAorICAgIHsgMHgwMDAwYTNkYywgMHgzYmRlZjdiZCB9LAorICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDNiZCB9LAogICAgIHsgMHgwMDAwYTNlNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTNlOCwgMHgxOGM0MzQzMyB9LAogICAgIHsgMHgwMDAwYTNlYywgMHgwMGY3MDA4MSB9LAotICAgIHsgMHgwMDAwNzgwMCwgMHgwMDE0MDAwMCB9LAotICAgIHsgMHgwMDAwNzgwNCwgMHgwZTQ1NDhkOCB9LAotICAgIHsgMHgwMDAwNzgwOCwgMHg1NDIxNDUxNCB9LAotICAgIHsgMHgwMDAwNzgwYywgMHgwMjAyNTgyMCB9LAotICAgIHsgMHgwMDAwNzgxMCwgMHg3MWMwZDM4OCB9LAotICAgIHsgMHgwMDAwNzgxNCwgMHg5MjQ5MzRhOCB9LAotICAgIHsgMHgwMDAwNzgxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwNzgyNCwgMHgwMGQ4NmZmZiB9LAotICAgIHsgMHgwMDAwNzgyOCwgMHgyNmQyNDkxYiB9LAotICAgIHsgMHgwMDAwNzgyYywgMHg2ZTM2ZDk3YiB9LAotICAgIHsgMHgwMDAwNzgzMCwgMHhlZGI2ZDk2ZSB9LAotICAgIHsgMHgwMDAwNzgzNCwgMHg3MTQwMDA4NyB9LAotICAgIHsgMHgwMDAwNzgzYywgMHgwMDAxZmZmZSB9LAotICAgIHsgMHgwMDAwNzg0MCwgMHhmZmViMWEyMCB9LAotICAgIHsgMHgwMDAwNzg0NCwgMHgwMDBjMGRiNiB9LAotICAgIHsgMHgwMDAwNzg0OCwgMHg2ZGI2MWI2ZiB9LAotICAgIHsgMHgwMDAwNzg0YywgMHg2ZDliNjZkYiB9LAotICAgIHsgMHgwMDAwNzg1MCwgMHg2ZDhjNmRiYSB9LAotICAgIHsgMHgwMDAwNzg1NCwgMHgwMDA0MDAwMCB9LAotICAgIHsgMHgwMDAwNzg1OCwgMHhkYjAwMzAxMiB9LAotICAgIHsgMHgwMDAwNzg1YywgMHgwNDkyNDkxNCB9LAotICAgIHsgMHgwMDAwNzg2MCwgMHgyMTA4NDIxMCB9LAotICAgIHsgMHgwMDAwNzg2NCwgMHhmN2Q3ZmZkZSB9LAotICAgIHsgMHgwMDAwNzg2OCwgMHhjMjAzNDA4MCB9LAotICAgIHsgMHgwMDAwNzg3MCwgMHgxMDE0MmMwMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzJbXVs2XSA9IHsKLSAgICAvKiBBZGRyZXNzICAgICAgNUctSFQyMCAgICAgNUctSFQ0MCAgICAgMkctSFQ0MCAgICAgMkctSFQyMCAgICAgVHVyYm8gICAqLwotICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNTIwMCwgMHgwMDAwNTIwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNzIwMSwgMHgwMDAwNzIwMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwYjI0MCwgMHgwMDAwYjI0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZDI0MSwgMHgwMDAwZDI0MSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwZjQ0MCwgMHgwMDAwZjQ0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxNDY0MCwgMHgwMDAxNDY0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxODY4MCwgMHgwMDAxODY4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxOTg0MSwgMHgwMDAxOTg0MSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxY2E0MCwgMHgwMDAxY2E0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxZmE4MCwgMHgwMDAxZmE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyM2FjMCwgMHgwMDAyM2FjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYWI0MCwgMHgwMDAyYWI0MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzM2Q4MiwgMHgwMDAzM2Q4MiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0OCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0YywgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM1MCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM1NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwNzgzOCwgMHhmYWM2ODgwMywgMHhmYWM2ODgwMywgMHhmYWM2ODgwMywgMHhmYWM2ODgwMywgMHhmYWM2ODgwMyB9LAotICAgIHsgMHgwMDAwNzg2YywgMHgwODYwOWViZSwgMHgwODYwOWViZSwgMHgwODYwOWViZSwgMHgwODYwOWViZSwgMHgwODYwOWViZSB9LAotICAgIHsgMHgwMDAwNzgyMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAotICAgIHsgMHgwMDAwYTI3NCwgMHgwYTIyYTY1MiwgMHgwYTIyYTY1MiwgMHgwYTIxYTY1MiwgMHgwYTIxYTY1MiwgMHgwYTIyYTY1MiB9LAotICAgIHsgMHgwMDAwYTI3OCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTI3YywgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSwgMHgwNTA3MDFjZSB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSB9LAotICAgIHsgMHgwMDAwYTNkYywgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9LAotICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSB9LAotfTsKLQotc3RhdGljIGNvbnN0IHVfaW50MzJfdCBhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7Ci0gICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KLSAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDkyMDAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTAyMDgsIDB4MDAwMTAyMDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk2MDgsIDB4MDAwMTk2MDgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjI2MTgsIDB4MDAwMjI2MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmE2YzksIDB4MDAwMmE2YzksIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzE3MTAsIDB4MDAwMzE3MTAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzU3MTgsIDB4MDAwMzU3MTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzg3NTgsIDB4MDAwMzg3NTgsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwM2M3NWEsIDB4MDAwM2M3NWEsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDA3NWMsIDB4MDAwNDA3NWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDQ3NWUsIDB4MDAwNDQ3NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDY3OWYsIDB4MDAwNDY3OWYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwNDg3ZGYsIDB4MDAwNDg3ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEsIDB4ZmFjNjg4MDEgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQsIDB4NDg2MDllYjQgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQsIDB4MDAwMDBjMDQgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMWM2NTIsIDB4MGEyMWM2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMmE2NTIgfSwKLSAgICB7IDB4MDAwMGEyNzgsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEyN2MsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMsIDB4MDUwZTAzOWMgfSwKLSAgICB7IDB4MDAwMGEzOTQsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMsIDB4MzljZTczOWMgfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMsIDB4MDAwMDAzOWMgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODVfMV8yW11bMl0gPSB7Ci0gICAgezB4MDAwMDQwNDAsICAweDkyNDhmZDAwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDI0OTI0OTI0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweGE4MDAwMDE5IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDEzMTYwODIwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGU1OTgwNTYwIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGMwMWRjZmZkIH0sCi0gICAgezB4MDAwMDQwNDAsICAweDFhYWFiZTQxIH0sCi0gICAgezB4MDAwMDQwNDAsICAweGJlMTA1NTU0IH0sCi0gICAgezB4MDAwMDQwNDAsICAweDAwMDQzMDA3IH0sCi0gICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCi19OwotCi1zdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1XzFfMltdWzJdID0gewotICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhhODAwMDAxOSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxMzE2MDgyMCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhlNTk4MDU2MCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhjMDFkY2ZmYyB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgxYWFhYmU0MSB9LAotICAgIHsweDAwMDA0MDQwLCAgMHhiZTEwNTU1NCB9LAotICAgIHsweDAwMDA0MDQwLCAgMHgwMDA0MzAwNyB9LAotICAgIHsweDAwMDA0MDQ0LCAgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYTNmMCwgMHgwMTAzNmEyZiB9LAorICAgIHsgMHgwMDAwYTNmNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwZDI3MCwgMHgwZDgyMDgyMCB9LAorICAgIHsgMHgwMDAwZDM1YywgMHgwN2ZmZmZlZiB9LAorICAgIHsgMHgwMDAwZDM2MCwgMHgwZmZmZmZlNyB9LAorICAgIHsgMHgwMDAwZDM2NCwgMHgxN2ZmZmZlNSB9LAorICAgIHsgMHgwMDAwZDM2OCwgMHgxZmZmZmZlNCB9LAorICAgIHsgMHgwMDAwZDM2YywgMHgzN2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3MCwgMHgzZmZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3NCwgMHg1N2ZmZmZlMyB9LAorICAgIHsgMHgwMDAwZDM3OCwgMHg1ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM3YywgMHg3ZmZmZmZlMiB9LAorICAgIHsgMHgwMDAwZDM4MCwgMHg3ZjNjN2JiYSB9LAorICAgIHsgMHgwMDAwZDM4NCwgMHhmMzMwN2ZmMCB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwppbmRleCA4YWU0ZWMyLi44MDBiZmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCkBAIC00MCwyMCArNDAsMTUgQEAKIAlyZXR1cm4gUkVHX1JFQUQoYWgsIEFSX1FUWERQKHEpKTsKIH0KIAotYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQordm9pZCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQogewogCVJFR19XUklURShhaCwgQVJfUVRYRFAocSksIHR4ZHApOwotCi0JcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpCit2b2lkIGF0aDlrX2h3X3R4c3RhcnQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKQogewogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1FVRVVFLCAiRW5hYmxlIFRYRSBvbiBxdWV1ZTogJXVcbiIsIHEpOwotCiAJUkVHX1dSSVRFKGFoLCBBUl9RX1RYRSwgMSA8PCBxKTsKLQotCXJldHVybiB0cnVlOwogfQogCiB1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKQEAgLTE3OCw3ICsxNzMsNyBAQAogI3VuZGVmIEFUSDlLX1RJTUVfUVVBTlRVTQogfQogCi1ib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKIAkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKQogewpAQCAtMjAyLDggKzE5Nyw2IEBACiAJYWRzLT5kc190eHN0YXR1czQgPSBhZHMtPmRzX3R4c3RhdHVzNSA9IDA7CiAJYWRzLT5kc190eHN0YXR1czYgPSBhZHMtPmRzX3R4c3RhdHVzNyA9IDA7CiAJYWRzLT5kc190eHN0YXR1czggPSBhZHMtPmRzX3R4c3RhdHVzOSA9IDA7Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcykKQEAgLTgyNSwxMyArODE4LDI5IEBACiAJZHMtPmRzX3J4c3RhdC5yc19kYXRhbGVuID0gYWRzLmRzX3J4c3RhdHVzMSAmIEFSX0RhdGFMZW47CiAJZHMtPmRzX3J4c3RhdC5yc190c3RhbXAgPSBhZHMuQVJfUmN2VGltZXN0YW1wOwogCi0JZHMtPmRzX3J4c3RhdC5yc19yc3NpID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQ29tYmluZWQpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwwID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwgQVJfUnhSU1NJQW50MDApOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwxID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwgQVJfUnhSU1NJQW50MDEpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwyID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwgQVJfUnhSU1NJQW50MDIpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQwID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQW50MTApOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQxID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQW50MTEpOwotCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQyID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwgQVJfUnhSU1NJQW50MTIpOworCWlmIChhZHMuZHNfcnhzdGF0dXM4ICYgQVJfUG9zdERlbGltQ1JDRXJyKSB7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMCA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMSA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMiA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MCA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MSA9IEFUSDlLX1JTU0lfQkFEOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MiA9IEFUSDlLX1JTU0lfQkFEOworCX0gZWxzZSB7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IE1TKGFkcy5kc19yeHN0YXR1czQsIEFSX1J4UlNTSUNvbWJpbmVkKTsKKwkJZHMtPmRzX3J4c3RhdC5yc19yc3NpX2N0bDAgPSBNUyhhZHMuZHNfcnhzdGF0dXMwLAorCQkJCQkJQVJfUnhSU1NJQW50MDApOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfY3RsMSA9IE1TKGFkcy5kc19yeHN0YXR1czAsCisJCQkJCQlBUl9SeFJTU0lBbnQwMSk7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaV9jdGwyID0gTVMoYWRzLmRzX3J4c3RhdHVzMCwKKwkJCQkJCUFSX1J4UlNTSUFudDAyKTsKKwkJZHMtPmRzX3J4c3RhdC5yc19yc3NpX2V4dDAgPSBNUyhhZHMuZHNfcnhzdGF0dXM0LAorCQkJCQkJQVJfUnhSU1NJQW50MTApOworCQlkcy0+ZHNfcnhzdGF0LnJzX3Jzc2lfZXh0MSA9IE1TKGFkcy5kc19yeHN0YXR1czQsCisJCQkJCQlBUl9SeFJTU0lBbnQxMSk7CisJCWRzLT5kc19yeHN0YXQucnNfcnNzaV9leHQyID0gTVMoYWRzLmRzX3J4c3RhdHVzNCwKKwkJCQkJCUFSX1J4UlNTSUFudDEyKTsKKwl9CiAJaWYgKGFkcy5kc19yeHN0YXR1czggJiBBUl9SeEtleUlkeFZhbGlkKQogCQlkcy0+ZHNfcnhzdGF0LnJzX2tleWl4ID0gTVMoYWRzLmRzX3J4c3RhdHVzOCwgQVJfS2V5SWR4KTsKIAllbHNlCkBAIC04NzIsNyArODgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKQEAgLTg4NSw4ICs4OTQsNiBAQAogCWFkcy0+ZHNfcnhzdGF0dXM4ICY9IH5BUl9SeERvbmU7CiAJaWYgKCEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKQogCQltZW1zZXQoJihhZHMtPnUpLCAwLCBzaXplb2YoYWRzLT51KSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHNldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAppbmRleCAxMTc2YmNlLi5mNTZlNzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCkBAIC01NjgsNiArNTY4LDcgQEAKIAlBVEg5S19SWF9GSUxURVJfUFJPQkVSRVEgPSAweDAwMDAwMDgwLAogCUFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIgPSAweDAwMDAwMTAwLAogCUFUSDlLX1JYX0ZJTFRFUl9NWUJFQUNPTiA9IDB4MDAwMDAyMDAsCisJQVRIOUtfUlhfRklMVEVSX0NPTVBfQkFSID0gMHgwMDAwMDQwMCwKIAlBVEg5S19SWF9GSUxURVJfUFNQT0xMID0gMHgwMDAwNDAwMCwKIAlBVEg5S19SWF9GSUxURVJfUEhZUkFEQVIgPSAweDAwMDAyMDAwLAogCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEwgPSAweDAwMDA4MDAwLApAQCAtNjI4LDEyICs2MjksMTIgQEAKIHN0cnVjdCBhdGhfcmF0ZV90YWJsZTsKIAogdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSwgdTMyIHR4ZHApOwotYm9vbCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Cit2b2lkIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSwgdTMyIHR4ZHApOwordm9pZCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7CiB1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7CiBib29sIGF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIGJJbmNUcmlnTGV2ZWwpOwogYm9vbCBhdGg5a19od19zdG9wdHhkbWEoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKTsKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSB1MzIgc2VnTGVuLCBib29sIGZpcnN0U2VnLAogCQkJIGJvb2wgbGFzdFNlZywgY29uc3Qgc3RydWN0IGF0aF9kZXNjICpkczApOwogdm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7CkBAIC02NjgsNyArNjY5LDcgQEAKIGJvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7CiBpbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpOwotYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpOwogYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHNldCk7CiB2b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnhkcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCA2NmE2YzFmLi4zZGM3YjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTE3LDggKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSAiYXRoOWsuaCIKIAotI2RlZmluZSBBVEhfUENJX1ZFUlNJT04gIjAuMSIKLQogc3RhdGljIGNoYXIgKmRldl9pbmZvID0gImF0aDlrIjsKIAogTU9EVUxFX0FVVEhPUigiQXRoZXJvcyBDb21tdW5pY2F0aW9ucyIpOwpAQCAtMzQyLDYgKzM0MCw3IEBACiAJKiBkb24ndCBjYWxpYnJhdGUgd2hlbiB3ZSdyZSBzY2FubmluZy4KIAkqIHdlIGFyZSBtb3N0IGxpa2VseSBub3Qgb24gb3VyIGhvbWUgY2hhbm5lbC4KIAkqLworCXNwaW5fbG9jaygmc2MtPmFuaV9sb2NrKTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCiAJCWdvdG8gc2V0X3RpbWVyOwogCkBAIC0zODUsNyArMzg0LDcgQEAKIAlpZiAobG9uZ2NhbCB8fCBzaG9ydGNhbCB8fCBhbmlmbGFnKSB7CiAJCS8qIENhbGwgQU5JIHJvdXRpbmUgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChhbmlmbGFnKQotCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+bm9kZXN0YXRzLCBhaC0+Y3VyY2hhbik7CisJCQlhdGg5a19od19hbmlfbW9uaXRvcihhaCwgYWgtPmN1cmNoYW4pOwogCiAJCS8qIFBlcmZvcm0gY2FsaWJyYXRpb24gaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChsb25nY2FsIHx8IHNob3J0Y2FsKSB7CkBAIC00MDUsNiArNDA0LDcgQEAKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogc2V0X3RpbWVyOgorCXNwaW5fdW5sb2NrKCZzYy0+YW5pX2xvY2spOwogCS8qCiAJKiBTZXQgdGltZXIgaW50ZXJ2YWwgYmFzZWQgb24gcHJldmlvdXMgcmVzdWx0cy4KIAkqIFRoZSBpbnRlcnZhbCBtdXN0IGJlIHRoZSBzaG9ydGVzdCBuZWNlc3NhcnkgdG8gc2F0aXNmeSBBTkksCkBAIC00MzksOCArNDM5LDggQEAKICAqLwogdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQogewotCWlmIChpc19odCB8fAotCSAgICAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkpIHsKKwlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1NDQU5OSU5HKSB8fCBpc19odCB8fAorCSAgICAoc2MtPmJ0Y29leF9pbmZvLmJ0Y29leF9zY2hlbWUgIT0gQVRIX0JUQ09FWF9DRkdfTk9ORSkpIHsKIAkJc2MtPnR4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy50eF9jaGFpbm1hc2s7CiAJCXNjLT5yeF9jaGFpbm1hc2sgPSBzYy0+c2NfYWgtPmNhcHMucnhfY2hhaW5tYXNrOwogCX0gZWxzZSB7CkBAIC00NjAsOSArNDYwLDEwIEBACiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7CiAJCWF0aF90eF9ub2RlX2luaXQoc2MsIGFuKTsKLQkJYW4tPm1heGFtcGR1ID0gMSA8PCAoSUVFRTgwMjExX0hUQ0FQX01BWFJYQU1QRFVfRkFDVE9SICsKKwkJYW4tPm1heGFtcGR1ID0gMSA8PCAoSUVFRTgwMjExX0hUX01BWF9BTVBEVV9GQUNUT1IgKwogCQkJCSAgICAgc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yKTsKIAkJYW4tPm1wZHVkZW5zaXR5ID0gcGFyc2VfbXBkdWRlbnNpdHkoc3RhLT5odF9jYXAuYW1wZHVfZGVuc2l0eSk7CisJCWFuLT5sYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAJfQogfQogCkBAIC00OTYsOCArNDk3LDcgQEAKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RYKQogCQlhdGhfdHhfdGFza2xldChzYyk7CiAKLQlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmCi0JICAgIChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpIHsKKwlpZiAoKHN0YXR1cyAmIEFUSDlLX0lOVF9UU0ZPT1IpICYmIHNjLT5wc19lbmFibGVkKSB7CiAJCS8qCiAJCSAqIFRTRiBzeW5jIGRvZXMgbm90IGxvb2sgY29ycmVjdDsgcmVtYWluIGF3YWtlIHRvIHN5bmMgd2l0aAogCQkgKiB0aGUgbmV4dCBCZWFjb24uCkBAIC01MDYsNiArNTA2LDEwIEBACiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfCBTQ19PUF9CRUFDT05fU1lOQzsKIAl9CiAKKwlpZiAoc2MtPmJ0Y29leF9pbmZvLmJ0Y29leF9zY2hlbWUgPT0gQVRIX0JUQ09FWF9DRkdfM1dJUkUpCisJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfR0VOVElNRVIpCisJCQlhdGhfZ2VuX3RpbWVyX2lzcihzYy0+c2NfYWgpOworCiAJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKQEAgLTUyMSw3ICs1MjUsOCBAQAogCQlBVEg5S19JTlRfVFggfAkJCVwKIAkJQVRIOUtfSU5UX0JNSVNTIHwJCVwKIAkJQVRIOUtfSU5UX0NTVCB8CQkJXAotCQlBVEg5S19JTlRfVFNGT09SKQorCQlBVEg5S19JTlRfVFNGT09SIHwJCVwKKwkJQVRIOUtfSU5UX0dFTlRJTUVSKQogCiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBkZXY7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC01ODksNyArNTk0LDcgQEAKIAkJICogaXQgd2lsbCBjbGVhciB3aGF0ZXZlciBjb25kaXRpb24gY2F1c2VkCiAJCSAqIHRoZSBpbnRlcnJ1cHQuCiAJCSAqLwotCQlhdGg5a19od19wcm9jbWliZXZlbnQoYWgsICZzYy0+bm9kZXN0YXRzKTsKKwkJYXRoOWtfaHdfcHJvY21pYmV2ZW50KGFoKTsKIAkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5pbWFzayk7CiAJfQogCkBAIC04ODUsOCArODkwLDcgQEAKIHN0YXRpYyB2b2lkIHNldHVwX2h0X2NhcChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2luZm8pCiB7Ci0jZGVmaW5lCUFUSDlLX0hUX0NBUF9NQVhSWEFNUERVXzY1NTM2IDB4MwkvKiAyIF4gMTYgKi8KLSNkZWZpbmUJQVRIOUtfSFRfQ0FQX01QRFVERU5TSVRZXzggMHg2CQkvKiA4IHVzZWMgKi8KKwl1OCB0eF9zdHJlYW1zLCByeF9zdHJlYW1zOwogCiAJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gdHJ1ZTsKIAlodF9pbmZvLT5jYXAgPSBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCB8CkBAIC04OTQsNjQgKzg5OCw2MSBAQAogCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAogCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9EU1NTQ0NLNDA7CiAKLQlodF9pbmZvLT5hbXBkdV9mYWN0b3IgPSBBVEg5S19IVF9DQVBfTUFYUlhBTVBEVV82NTUzNjsKLQlodF9pbmZvLT5hbXBkdV9kZW5zaXR5ID0gQVRIOUtfSFRfQ0FQX01QRFVERU5TSVRZXzg7CisJaHRfaW5mby0+YW1wZHVfZmFjdG9yID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV82NEs7CisJaHRfaW5mby0+YW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfODsKIAogCS8qIHNldCB1cCBzdXBwb3J0ZWQgbWNzIHNldCAqLwogCW1lbXNldCgmaHRfaW5mby0+bWNzLCAwLCBzaXplb2YoaHRfaW5mby0+bWNzKSk7CisJdHhfc3RyZWFtcyA9ICEoc2MtPnR4X2NoYWlubWFzayAmIChzYy0+dHhfY2hhaW5tYXNrIC0gMSkpID8gMSA6IDI7CisJcnhfc3RyZWFtcyA9ICEoc2MtPnJ4X2NoYWlubWFzayAmIChzYy0+cnhfY2hhaW5tYXNrIC0gMSkpID8gMSA6IDI7CiAKLQlzd2l0Y2goc2MtPnJ4X2NoYWlubWFzaykgewotCWNhc2UgMToKLQkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMF0gPSAweGZmOwotCQlicmVhazsKLQljYXNlIDM6Ci0JY2FzZSA1OgotCWNhc2UgNzoKLQlkZWZhdWx0OgotCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7Ci0JCWh0X2luZm8tPm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKLQkJYnJlYWs7CisJaWYgKHR4X3N0cmVhbXMgIT0gcnhfc3RyZWFtcykgeworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIlRYIHN0cmVhbXMgJWQsIFJYIHN0cmVhbXM6ICVkXG4iLAorCQkJdHhfc3RyZWFtcywgcnhfc3RyZWFtcyk7CisJCWh0X2luZm8tPm1jcy50eF9wYXJhbXMgfD0gSUVFRTgwMjExX0hUX01DU19UWF9SWF9ESUZGOworCQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9ICgodHhfc3RyZWFtcyAtIDEpIDw8CisJCQkJSUVFRTgwMjExX0hUX01DU19UWF9NQVhfU1RSRUFNU19TSElGVCk7CiAJfQogCi0JaHRfaW5mby0+bWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKwlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJaWYgKHJ4X3N0cmVhbXMgPj0gMikKKwkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMV0gPSAweGZmOworCisJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSBJRUVFODAyMTFfSFRfTUNTX1RYX0RFRklORUQ7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX2Jzc19hc3NvY19pbmZvKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCiAJaWYgKGJzc19jb25mLT5hc3NvYykgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkJzcyBJbmZvIEFTU09DICVkLCBic3NpZDogJXBNXG4iLAogCQkJYnNzX2NvbmYtPmFpZCwgc2MtPmN1cmJzc2lkKTsKIAogCQkvKiBOZXcgYXNzb2NpYXRpb24sIHN0b3JlIGFpZCAqLwotCQlpZiAoYXZwLT5hdl9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJc2MtPmN1cmFpZCA9IGJzc19jb25mLT5haWQ7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjKTsKKwkJc2MtPmN1cmFpZCA9IGJzc19jb25mLT5haWQ7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCi0JCQkvKgotCQkJICogUmVxdWVzdCBhIHJlLWNvbmZpZ3VyYXRpb24gb2YgQmVhY29uIHJlbGF0ZWQgdGltZXJzCi0JCQkgKiBvbiB0aGUgcmVjZWlwdCBvZiB0aGUgZmlyc3QgQmVhY29uIGZyYW1lIChpLmUuLAotCQkJICogYWZ0ZXIgdGltZSBzeW5jIHdpdGggdGhlIEFQKS4KLQkJCSAqLwotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTl9TWU5DOwotCQl9CisJCS8qCisJCSAqIFJlcXVlc3QgYSByZS1jb25maWd1cmF0aW9uIG9mIEJlYWNvbiByZWxhdGVkIHRpbWVycworCQkgKiBvbiB0aGUgcmVjZWlwdCBvZiB0aGUgZmlyc3QgQmVhY29uIGZyYW1lIChpLmUuLAorCQkgKiBhZnRlciB0aW1lIHN5bmMgd2l0aCB0aGUgQVApLgorCQkgKi8KKwkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTl9TWU5DOwogCiAJCS8qIENvbmZpZ3VyZSB0aGUgYmVhY29uICovCiAJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOwogCiAJCS8qIFJlc2V0IHJzc2kgc3RhdHMgKi8KLQkJc2MtPm5vZGVzdGF0cy5uc19hdmdicnNzaSA9IEFUSF9SU1NJX0RVTU1ZX01BUktFUjsKLQkJc2MtPm5vZGVzdGF0cy5uc19hdmdyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3R4cnNzaSA9IEFUSF9SU1NJX0RVTU1ZX01BUktFUjsKLQkJc2MtPm5vZGVzdGF0cy5uc19hdmd0eHJhdGUgPSBBVEhfUkFURV9EVU1NWV9NQVJLRVI7CisJCXNjLT5zY19haC0+c3RhdHMuYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CiAKIAkJYXRoX3N0YXJ0X2FuaShzYyk7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJCc3MgSW5mbyBESVNBU1NPQ1xuIik7CiAJCXNjLT5jdXJhaWQgPSAwOworCQkvKiBTdG9wIEFOSSAqLworCQlkZWxfdGltZXJfc3luYygmc2MtPmFuaS50aW1lcik7CiAJfQogfQogCkBAIC05NjksMTUgKzk3MCwxNiBAQAogCiAJaWYgKChzYy0+bGVkX29uX2R1cmF0aW9uID09IEFUSF9MRURfT05fRFVSQVRJT05fSURMRSkgfHwKIAkgICAgKHNjLT5sZWRfb2ZmX2R1cmF0aW9uID09IEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUpKQotCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAwKTsKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDApOwogCWVsc2UKLQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sCiAJCQkJICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKSA/IDEgOiAwKTsKIAotCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssCi0JCQkgICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKSA/Ci0JCQkgICBtc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb2ZmX2R1cmF0aW9uKSA6Ci0JCQkgICBtc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb25fZHVyYXRpb24pKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywKKwkJCQkgICAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLAorCQkJCSAgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikgPworCQkJCQltc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb2ZmX2R1cmF0aW9uKSA6CisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vbl9kdXJhdGlvbikpOwogCiAJc2MtPmxlZF9vbl9kdXJhdGlvbiA9IHNjLT5sZWRfb25fY250ID8KIAkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSkgOgpAQCAtMTAwMiw3ICsxMDA0LDcgQEAKIAljYXNlIExFRF9PRkY6CiAJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MgfHwKIAkJICAgIGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgewotCQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLAogCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CiAJCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQpAQCAtMTAxNCwxMCArMTAxNiwxMCBAQAogCWNhc2UgTEVEX0ZVTEw6CiAJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKLQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwKLQkJCQkJICAgJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIDApOworCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsCisJCQkJCQkgICAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKIAkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDApOwogCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKIAkJfSBlbHNlIHsKIAkJCXNjLT5sZWRfb25fY250Kys7CkBAIC0xMDU3LDEzICsxMDU5LDEyIEBACiAKIHN0YXRpYyB2b2lkIGF0aF9kZWluaXRfbGVkcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOwogCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPmFzc29jX2xlZCk7CiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfQVNTT0NJQVRFRDsKIAlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT50eF9sZWQpOwogCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPnJ4X2xlZCk7CiAJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+cmFkaW9fbGVkKTsKLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKKwlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9pbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCkBAIC0xMDcxLDExICsxMDcyLDE2IEBACiAJY2hhciAqdHJpZ2dlcjsKIAlpbnQgcmV0OwogCisJaWYgKEFSX1NSRVZfOTI4NyhzYy0+c2NfYWgpKQorCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OworCWVsc2UKKwkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOworCiAJLyogQ29uZmlndXJlIGdwaW8gMSBmb3Igb3V0cHV0ICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIEFUSF9MRURfUElOLAorCWF0aDlrX2h3X2NmZ19vdXRwdXQoc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sCiAJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CiAJLyogTEVEIG9mZiwgYWN0aXZlIGxvdyAqLwotCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOworCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLCAxKTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+YXRoX2xlZF9ibGlua193b3JrLCBhdGhfbGVkX2JsaW5rX3dvcmspOwogCkBAIC0xMTE0LDYgKzExMjAsNyBAQAogCXJldHVybjsKIAogZmFpbDoKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOwogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKQEAgLTExNTMsOSArMTE2MCw5IEBACiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5pbWFzayk7CiAKIAkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgQVRIX0xFRF9QSU4sCisJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPmxlZF9waW4sCiAJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7Ci0JYXRoOWtfaHdfc2V0X2dwaW8oYWgsIEFUSF9MRURfUElOLCAwKTsKKwlhdGg5a19od19zZXRfZ3BpbyhhaCwgYWgtPmxlZF9waW4sIDApOwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKHNjLT5odyk7CiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CkBAIC0xMTcxLDggKzExNzgsOCBAQAogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOwogCiAJLyogRGlzYWJsZSBMRUQgKi8KLQlhdGg5a19od19zZXRfZ3BpbyhhaCwgQVRIX0xFRF9QSU4sIDEpOwotCWF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KGFoLCBBVEhfTEVEX1BJTik7CisJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIGFoLT5sZWRfcGluLCAxKTsKKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmxlZF9waW4pOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOwpAQCAtMTI1Myw4ICsxMjYwLDYgQEAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBBVEggaHdcbiIpOwogCiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKLQljYW5jZWxfd29ya19zeW5jKCZzYy0+Y2hhbl93b3JrKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CiAJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOwpAQCAtMTI3OSw5ICsxMjg0LDEzIEBACiAJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKIAkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOwogCisJaWYgKChzYy0+YnRjb2V4X2luZm8ubm9fc3RvbXBfdGltZXIpICYmCisJICAgIHNjLT5idGNvZXhfaW5mby5idGNvZXhfc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQlhdGhfZ2VuX3RpbWVyX2ZyZWUoc2MtPnNjX2FoLCBzYy0+YnRjb2V4X2luZm8ubm9fc3RvbXBfdGltZXIpOworCiAJYXRoOWtfaHdfZGV0YWNoKHNjLT5zY19haCk7CisJc2MtPnNjX2FoID0gTlVMTDsKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKLQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIGludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKQEAgLTEyOTAsMTYgKzEyOTksMjEgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWcgPSAmc2MtPnNjX2FoLT5yZWd1bGF0b3J5OworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gJnNjLT5jb21tb24ucmVndWxhdG9yeTsKIAogCXJldHVybiBhdGhfcmVnX25vdGlmaWVyX2FwcGx5KHdpcGh5LCByZXF1ZXN0LCByZWcpOwogfQogCi1zdGF0aWMgaW50IGF0aF9pbml0KHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpCisvKgorICogSW5pdGlhbGl6ZSBhbmQgZmlsbCBhdGhfc29mdGMsIGF0aF9zb2ZjdCBpcyB0aGUKKyAqICJTb2Z0d2FyZSBDYXJyaWVyIiBzdHJ1Y3QuIEhpc3RvcmljYWxseSBpdCBoYXMgZXhpc3RlZAorICogdG8gYWxsb3cgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBoYXJkd2FyZSBzcGVjaWZpYworICogdmFyaWFibGVzIChub3cgaW4gYXRoX2h3KSBhbmQgZHJpdmVyIHNwZWNpZmljIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIGludCBhdGhfaW5pdF9zb2Z0Yyh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwotCWludCBzdGF0dXM7Ci0JaW50IGVycm9yID0gMCwgaTsKKwlpbnQgciA9IDAsIGk7CiAJaW50IGNzeiA9IDA7CiAKIAkvKiBYWFg6IGhhcmR3YXJlIHdpbGwgbm90IGJlIHJlYWR5IHVudGlsIGF0aF9vcGVuKCkgYmVpbmcgY2FsbGVkICovCkBAIC0xMzExLDYgKzEzMjUsOCBAQAogCXNwaW5fbG9ja19pbml0KCZzYy0+d2lwaHlfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19yZXNldGxvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2Nfc2VyaWFsX3J3KTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPmFuaV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3BtX2xvY2spOwogCW11dGV4X2luaXQoJnNjLT5tdXRleCk7CiAJdGFza2xldF9pbml0KCZzYy0+aW50cl90cSwgYXRoOWtfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPmJjb25fdGFza2xldCwgYXRoX2JlYWNvbl90YXNrbGV0LApAQCAtMTMyMiwxNiArMTMzOCwyNiBAQAogCSAqLwogCWF0aF9yZWFkX2NhY2hlc2l6ZShzYywgJmNzeik7CiAJLyogWFhYIGFzc2VydCBjc3ogaXMgbm9uLXplcm8gKi8KLQlzYy0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLworCXNjLT5jb21tb24uY2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCi0JYWggPSBhdGg5a19od19hdHRhY2goZGV2aWQsIHNjLCAmc3RhdHVzKTsKLQlpZiAoYWggPT0gTlVMTCkgeworCWFoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9odyksIEdGUF9LRVJORUwpOworCWlmICghYWgpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gYmFkX25vX2FoOworCX0KKworCWFoLT5haF9zYyA9IHNjOworCWFoLT5od192ZXJzaW9uLmRldmlkID0gZGV2aWQ7CisJYWgtPmh3X3ZlcnNpb24uc3Vic3lzaWQgPSBzdWJzeXNpZDsKKwlzYy0+c2NfYWggPSBhaDsKKworCXIgPSBhdGg5a19od19pbml0KGFoKTsKKwlpZiAocikgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIlVuYWJsZSB0byBhdHRhY2ggaGFyZHdhcmU7IEhBTCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7Ci0JCWVycm9yID0gLUVOWElPOworCQkJIlVuYWJsZSB0byBpbml0aWFsaXplIGhhcmR3YXJlOyAiCisJCQkiaW5pdGlhbGl6YXRpb24gc3RhdHVzOiAlZFxuIiwgcik7CiAJCWdvdG8gYmFkOwogCX0KLQlzYy0+c2NfYWggPSBhaDsKIAogCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCiAJc2MtPmtleW1heCA9IGFoLT5jYXBzLmtleWNhY2hlX3NpemU7CkBAIC0xMzQ5LDkgKzEzNzUsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBzYy0+a2V5bWF4OyBpKyspCiAJCWF0aDlrX2h3X2tleXJlc2V0KGFoLCAodTE2KSBpKTsKIAotCWlmIChlcnJvcikKLQkJZ290byBiYWQ7Ci0KIAkvKiBkZWZhdWx0IHRvIE1PTklUT1IgbW9kZSAqLwogCXNjLT5zY19haC0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKIApAQCAtMTM3MSwxNCArMTM5NCwxNCBAQAogCWlmIChzYy0+YmVhY29uLmJlYWNvbnEgPT0gLTEpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJVbmFibGUgdG8gc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7Ci0JCWVycm9yID0gLUVJTzsKKwkJciA9IC1FSU87CiAJCWdvdG8gYmFkMjsKIAl9CiAJc2MtPmJlYWNvbi5jYWJxID0gYXRoX3R4cV9zZXR1cChzYywgQVRIOUtfVFhfUVVFVUVfQ0FCLCAwKTsKIAlpZiAoc2MtPmJlYWNvbi5jYWJxID09IE5VTEwpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOwotCQllcnJvciA9IC1FSU87CisJCXIgPSAtRUlPOwogCQlnb3RvIGJhZDI7CiAJfQogCkBAIC0xMzkzLDI2ICsxNDE2LDI2IEBACiAJaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19CSykpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJVbmFibGUgdG8gc2V0dXAgeG1pdCBxdWV1ZSBmb3IgQksgdHJhZmZpY1xuIik7Ci0JCWVycm9yID0gLUVJTzsKKwkJciA9IC1FSU87CiAJCWdvdG8gYmFkMjsKIAl9CiAKIAlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JFKSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCRSB0cmFmZmljXG4iKTsKLQkJZXJyb3IgPSAtRUlPOworCQlyID0gLUVJTzsKIAkJZ290byBiYWQyOwogCX0KIAlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZJKSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWSSB0cmFmZmljXG4iKTsKLQkJZXJyb3IgPSAtRUlPOworCQlyID0gLUVJTzsKIAkJZ290byBiYWQyOwogCX0KIAlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZPKSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWTyB0cmFmZmljXG4iKTsKLQkJZXJyb3IgPSAtRUlPOworCQlyID0gLUVJTzsKIAkJZ290byBiYWQyOwogCX0KIApAQCAtMTQ5Niw4ICsxNTE5LDExIEBACiAJCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKIAl9CiAKLQlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkKLQkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzYy0+c2NfYWgpOworCWlmIChzYy0+YnRjb2V4X2luZm8uYnRjb2V4X3NjaGVtZSAhPSBBVEhfQlRDT0VYX0NGR19OT05FKSB7CisJCXIgPSBhdGg5a19od19idGNvZXhfaW5pdChhaCk7CisJCWlmIChyKQorCQkJZ290byBiYWQyOworCX0KIAogCXJldHVybiAwOwogYmFkMjoKQEAgLTE1MDYsMTEgKzE1MzIsMTIgQEAKIAkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQogCQkJYXRoX3R4X2NsZWFudXBxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CiBiYWQ6Ci0JaWYgKGFoKQotCQlhdGg5a19od19kZXRhY2goYWgpOworCWF0aDlrX2h3X2RldGFjaChhaCk7CisJc2MtPnNjX2FoID0gTlVMTDsKK2JhZF9ub19haDoKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKIAotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gcjsKIH0KIAogdm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTE1MzYsNyArMTU2Myw4IEBACiAJaHctPm1heF9yYXRlcyA9IDQ7CiAJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOwogCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKKwkvKiBIYXJkd2FyZSBzdXBwb3J0cyAxMCBidXQgd2UgdXNlIDQgKi8KKwlody0+bWF4X3JhdGVfdHJpZXMgPSA0OwogCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfbm9kZSk7CiAJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aF92aWYpOwogCkBAIC0xNTQ5LDcgKzE1NzcsOCBAQAogCQkJJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiB9CiAKLWludCBhdGhfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpCisvKiBEZXZpY2UgZHJpdmVyIGNvcmUgaW5pdGlhbGl6YXRpb24gKi8KK2ludCBhdGhfaW5pdF9kZXZpY2UodTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTE2IHN1YnN5c2lkKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCWludCBlcnJvciA9IDAsIGk7CkBAIC0xNTU3LDcgKzE1ODYsNyBAQAogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJBdHRhY2ggQVRIIGh3XG4iKTsKIAotCWVycm9yID0gYXRoX2luaXQoZGV2aWQsIHNjKTsKKwllcnJvciA9IGF0aF9pbml0X3NvZnRjKGRldmlkLCBzYywgc3Vic3lzaWQpOwogCWlmIChlcnJvciAhPSAwKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTE1NjcsMTIgKzE1OTYsMTIgQEAKIAogCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKIAotCWVycm9yID0gYXRoX3JlZ2RfaW5pdCgmc2MtPnNjX2FoLT5yZWd1bGF0b3J5LCBzYy0+aHctPndpcGh5LAorCWVycm9yID0gYXRoX3JlZ2RfaW5pdCgmc2MtPmNvbW1vbi5yZWd1bGF0b3J5LCBzYy0+aHctPndpcGh5LAogCQkJICAgICAgYXRoOWtfcmVnX25vdGlmaWVyKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJlZyA9ICZzYy0+c2NfYWgtPnJlZ3VsYXRvcnk7CisJcmVnID0gJnNjLT5jb21tb24ucmVndWxhdG9yeTsKIAogCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgewogCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CkBAIC0xNjE1LDYgKzE2NDQsNyBAQAogCQkJYXRoX3R4X2NsZWFudXBxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CiAKIAlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKKwlzYy0+c2NfYWggPSBOVUxMOwogCWF0aDlrX2V4aXRfZGVidWcoc2MpOwogCiAJcmV0dXJuIGVycm9yOwpAQCAtMTg1MCw3ICsxODgwLDcgQEAKIAogCWlmIChjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9HOwotCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF8yR0haIHwgQ0hBTk5FTF9PRkRNIHwgQ0hBTk5FTF9HOwogCX0gZWxzZSB7CiAJCWljaGFuLT5jaGFubW9kZSA9IENIQU5ORUxfQTsKIAkJaWNoYW4tPmNoYW5uZWxGbGFncyA9IENIQU5ORUxfNUdIWiB8IENIQU5ORUxfT0ZETTsKQEAgLTE5NzMsNiArMjAwMywxOSBAQAogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKGh3KTsKIAorCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssIDApOworCisJaWYgKChzYy0+YnRjb2V4X2luZm8uYnRjb2V4X3NjaGVtZSAhPSBBVEhfQlRDT0VYX0NGR19OT05FKSAmJgorCSAgICAhKHNjLT5zY19mbGFncyAmIFNDX09QX0JUQ09FWF9FTkFCTEVEKSkgeworCQlhdGhfYnRjb2V4X3NldF93ZWlnaHQoJnNjLT5idGNvZXhfaW5mbywgQVJfQlRfQ09FWF9XR0hULAorCQkJCSAgICAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOworCQlhdGg5a19od19idGNvZXhfZW5hYmxlKHNjLT5zY19haCk7CisKKwkJYXRoX3BjaWVfYXNwbV9kaXNhYmxlKHNjKTsKKwkJaWYgKHNjLT5idGNvZXhfaW5mby5idGNvZXhfc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQkJYXRoX2J0Y29leF90aW1lcl9yZXN1bWUoc2MsICZzYy0+YnRjb2V4X2luZm8pOworCX0KKwogbXV0ZXhfdW5sb2NrOgogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIApAQCAtMTk5NCw3ICsyMDM3LDcgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWlmIChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgeworCWlmIChzYy0+cHNfZW5hYmxlZCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAkJLyoKIAkJICogbWFjODAyMTEgZG9lcyBub3Qgc2V0IFBNIGZpZWxkIGZvciBub3JtYWwgZGF0YSBmcmFtZXMsIHNvIHdlCkBAIC0yMDgzLDIyICsyMTI2LDM1IEBACiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfSU5BQ1RJVkU7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnR4X2NvbXBsZXRlX3dvcmspOworCisJaWYgKCFzYy0+bnVtX3NlY193aXBoeSkgeworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2MtPmNoYW5fd29yayk7CisJfQorCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKLQltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCi0JaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKLQogCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgewogCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAJCXJldHVybjsgLyogYW5vdGhlciB3aXBoeSBzdGlsbCBpbiB1c2UgKi8KIAl9CiAKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQlRDT0VYX0VOQUJMRUQpIHsKKwkJYXRoOWtfaHdfYnRjb2V4X2Rpc2FibGUoc2MtPnNjX2FoKTsKKwkJaWYgKHNjLT5idGNvZXhfaW5mby5idGNvZXhfc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQkJYXRoX2J0Y29leF90aW1lcl9wYXVzZShzYywgJnNjLT5idGNvZXhfaW5mbyk7CisJfQorCiAJLyogbWFrZSBzdXJlIGgvdyB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0CiAJICogYmVmb3JlIHNldHRpbmcgdGhlIGludmFsaWQgZmxhZy4gKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIDApOwpAQCAtMjExNSw2ICsyMTcxLDcgQEAKIAkvKiBkaXNhYmxlIEhBTCBhbmQgcHV0IGgvdyB0byBzbGVlcCAqLwogCWF0aDlrX2h3X2Rpc2FibGUoc2MtPnNjX2FoKTsKIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc2MtPnNjX2FoLCAxKTsKKwlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOwogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CiAKQEAgLTIxODksMTQgKzIyNDYsMTUgQEAKIAlpZiAoKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKIAkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CiAJICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKSB7Ci0JCWlmIChhdGg5a19od19waHljb3VudGVycyhzYy0+c2NfYWgpKQotCQkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9NSUI7CisJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfTUlCOwogCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RTRk9PUjsKIAl9CiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZiAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwlpZiAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAgICB8fAorCSAgICBjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJICAgIGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJYXRoX3N0YXJ0X2FuaShzYyk7CiAKIG91dDoKQEAgLTIyNDksOSArMjMwNywyOCBAQAogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCWJvb2wgYWxsX3dpcGh5c19pZGxlID0gZmFsc2UsIGRpc2FibGVfcmFkaW8gPSBmYWxzZTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKKwkvKiBMZWF2ZSB0aGlzIGFzIHRoZSBmaXJzdCBjaGVjayAqLworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUpIHsKKworCQlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJYWxsX3dpcGh5c19pZGxlID0gIGF0aDlrX2FsbF93aXBoeXNfaWRsZShzYyk7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSl7CisJCQlpZiAoYWxsX3dpcGh5c19pZGxlKQorCQkJCWRpc2FibGVfcmFkaW8gPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKGFsbF93aXBoeXNfaWRsZSkgeworCQkJYXRoX3JhZGlvX2VuYWJsZShzYyk7CisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCQkibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKKwkJfQorCX0KKwogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CiAJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CiAJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKQEAgLTIyNjMsOCArMjM0MCw5IEBACiAJCQkJfQogCQkJCWF0aDlrX2h3X3NldHJ4YWJvcnQoc2MtPnNjX2FoLCAxKTsKIAkJCX0KLQkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fTkVUV09SS19TTEVFUCk7CisJCQlzYy0+cHNfZW5hYmxlZCA9IHRydWU7CiAJCX0gZWxzZSB7CisJCQlzYy0+cHNfZW5hYmxlZCA9IGZhbHNlOwogCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9BV0FLRSk7CiAJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCSAgICAgIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CkBAIC0yMzE5LDYgKzIzOTcsMTEgQEAKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikKIAkJc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gMiAqIGNvbmYtPnBvd2VyX2xldmVsOwogCisJaWYgKGRpc2FibGVfcmFkaW8pIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJpZGxlOiBkaXNhYmxpbmcgcmFkaW9cbiIpOworCQlhdGhfcmFkaW9fZGlzYWJsZShzYyk7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0yMzI4LDYgKzI0MTEsNyBAQAogCShGSUZfUFJPTUlTQ19JTl9CU1MgfAkJCVwKIAlGSUZfQUxMTVVMVEkgfAkJCQlcCiAJRklGX0NPTlRST0wgfAkJCQlcCisJRklGX1BTUE9MTCB8CQkJCVwKIAlGSUZfT1RIRVJfQlNTIHwJCQkJXAogCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwJCVwKIAlGSUZfRkNTRkFJTCkKQEAgLTIzMzYsOCArMjQyMCw3IEBACiBzdGF0aWMgdm9pZCBhdGg5a19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCSAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICAgaW50IG1jX2NvdW50LAotCQkJCSAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQorCQkJCSAgIHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CkBAIC0yMzUyLDcgKzI0MzUsNyBAQAogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKHNjLT5zY19haCwgcmZpbHQpOwogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCi0JRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgUlggZmlsdGVyOiAweCV4XG4iLCBzYy0+cngucnhmaWx0ZXIpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IEhXIFJYIGZpbHRlcjogMHgleFxuIiwgcmZpbHQpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg5a19zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMjYzOCwxOSArMjcyMSwxMSBAQAogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgotCQlyZXQgPSBhdGhfdHhfYWdncl9zdGFydChzYywgc3RhLCB0aWQsIHNzbik7Ci0JCWlmIChyZXQgPCAwKQotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiVW5hYmxlIHRvIHN0YXJ0IFRYIGFnZ3JlZ2F0aW9uXG4iKTsKLQkJZWxzZQotCQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUoaHcsIHN0YS0+YWRkciwgdGlkKTsKKwkJYXRoX3R4X2FnZ3Jfc3RhcnQoc2MsIHN0YSwgdGlkLCBzc24pOworCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShodywgc3RhLT5hZGRyLCB0aWQpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QOgotCQlyZXQgPSBhdGhfdHhfYWdncl9zdG9wKHNjLCBzdGEsIHRpZCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCQkiVW5hYmxlIHRvIHN0b3AgVFggYWdncmVnYXRpb25cbiIpOwotCisJCWF0aF90eF9hZ2dyX3N0b3Aoc2MsIHN0YSwgdGlkKTsKIAkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShodywgc3RhLT5hZGRyLCB0aWQpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKQEAgLTI2NjgsNiArMjc0Myw3IEBACiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCiAJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKQEAgLTI2NzUsMTQgKzI3NTEsMTYgQEAKIAkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKIAkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCiAJCSAqLworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAJCXJldHVybjsKIAl9CiAKIAlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9TQ0FOOwogCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOwogCi0JbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlzcGluX2xvY2tfYmgoJnNjLT5hbmlfbG9jayk7CiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIApAQCAtMjY5Miw5ICsyNzcwLDEyIEBACiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1NDQU5OSU5HOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+YW5pX2xvY2spOworCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKQEAgLTI3MjgsNyArMjgwOSw4IEBACiAJeyBBUl9TUkVWX1ZFUlNJT05fOTEwMCwJCSI5MTAwIiB9LAogCXsgQVJfU1JFVl9WRVJTSU9OXzkxNjAsCQkiOTE2MCIgfSwKIAl7IEFSX1NSRVZfVkVSU0lPTl85MjgwLAkJIjkyODAiIH0sCi0JeyBBUl9TUkVWX1ZFUlNJT05fOTI4NSwJCSI5Mjg1IiB9CisJeyBBUl9TUkVWX1ZFUlNJT05fOTI4NSwJCSI5Mjg1IiB9LAorCXsgQVJfU1JFVl9WRVJTSU9OXzkyODcsICAgICAgICAgIjkyODciIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCmluZGV4IDE3MGM1YjMuLjkwM2RkOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKQEAgLTI1LDYgKzI1LDggQEAKIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyOSkgfSwgLyogUENJICAgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQSkgfSwgLyogUENJLUUgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQikgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRCkgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRSkgfSwgLyogUENJLUUgKi8KIAl7IDAgfQogfTsKIApAQCAtMzMsOCArMzUsNyBAQAogewogCXU4IHU4dG1wOwogCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUodG9fcGNpX2RldihzYy0+ZGV2KSwgUENJX0NBQ0hFX0xJTkVfU0laRSwKLQkJCSAgICAgKHU4ICopJnU4dG1wKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZSh0b19wY2lfZGV2KHNjLT5kZXYpLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmdTh0bXApOwogCSpjc3ogPSAoaW50KXU4dG1wOwogCiAJLyoKQEAgLTg3LDYgKzg4LDcgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAl1OCBjc3o7CisJdTE2IHN1YnN5c2lkOwogCXUzMiB2YWw7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGF0aF9odyAqYWg7CkBAIC0xNTgsOCArMTYwLDkgQEAKIAogCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZihzdHJ1Y3QgYXRoX3dpcGh5KSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBhdGhfc29mdGMpLCAmYXRoOWtfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0aF9wY2k6IG5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwlpZiAoIWh3KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBiYWQyOwogCX0KIApAQCAtMTc2LDE3ICsxNzksMTggQEAKIAlzYy0+bWVtID0gbWVtOwogCXNjLT5idXNfb3BzID0gJmF0aF9wY2lfYnVzX29wczsKIAotCWlmIChhdGhfYXR0YWNoKGlkLT5kZXZpY2UsIHNjKSAhPSAwKSB7Ci0JCXJldCA9IC1FTk9ERVY7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9JRCwgJnN1YnN5c2lkKTsKKwlyZXQgPSBhdGhfaW5pdF9kZXZpY2UoaWQtPmRldmljZSwgc2MsIHN1YnN5c2lkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZVxuIik7CiAJCWdvdG8gYmFkMzsKIAl9CiAKIAkvKiBzZXR1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCiAKLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQl3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlyZXQgPSAtRUlPOworCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAJCWdvdG8gYmFkNDsKIAl9CiAKQEAgLTIzNCw3ICsyMzgsNyBAQAogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCi0JYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMSk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDEpOwogCiAJcGNpX3NhdmVfc3RhdGUocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtMjUxLDEwICsyNTUsMTIgQEAKIAl1MzIgdmFsOwogCWludCBlcnI7CiAKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKIAkvKgogCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KIAkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCkBAIC0yNjUsOSArMjcxLDkgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKIAogCS8qIEVuYWJsZSBMRUQgKi8KLQlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCisJYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKIAkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKKwlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuYwppbmRleCBhYWE5NDE1Li42M2JmOWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5jCkBAIC0yNjQsNDQgKzI2NCwyMyBAQAogfQogCiB2b2lkCi1hdGg5a19od19yZmRldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKK2F0aDlrX2h3X3JmX2ZyZWUoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaWYgKGFoLT5hbmFsb2dCYW5rMERhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaC0+YW5hbG9nQmFuazBEYXRhKTsKLQkJYWgtPmFuYWxvZ0JhbmswRGF0YSA9IE5VTEw7Ci0JfQotCWlmIChhaC0+YW5hbG9nQmFuazFEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmsxRGF0YSk7Ci0JCWFoLT5hbmFsb2dCYW5rMURhdGEgPSBOVUxMOwotCX0KLQlpZiAoYWgtPmFuYWxvZ0JhbmsyRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFoLT5hbmFsb2dCYW5rMkRhdGEpOwotCQlhaC0+YW5hbG9nQmFuazJEYXRhID0gTlVMTDsKLQl9Ci0JaWYgKGFoLT5hbmFsb2dCYW5rM0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaC0+YW5hbG9nQmFuazNEYXRhKTsKLQkJYWgtPmFuYWxvZ0JhbmszRGF0YSA9IE5VTEw7Ci0JfQotCWlmIChhaC0+YW5hbG9nQmFuazZEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWgtPmFuYWxvZ0Jhbms2RGF0YSk7Ci0JCWFoLT5hbmFsb2dCYW5rNkRhdGEgPSBOVUxMOwotCX0KLQlpZiAoYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEpOwotCQlhaC0+YW5hbG9nQmFuazZUUENEYXRhID0gTlVMTDsKLQl9Ci0JaWYgKGFoLT5hbmFsb2dCYW5rN0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaC0+YW5hbG9nQmFuazdEYXRhKTsKLQkJYWgtPmFuYWxvZ0Jhbms3RGF0YSA9IE5VTEw7Ci0JfQotCWlmIChhaC0+YWRkYWM1NDE2XzIxICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWgtPmFkZGFjNTQxNl8yMSk7Ci0JCWFoLT5hZGRhYzU0MTZfMjEgPSBOVUxMOwotCX0KLQlpZiAoYWgtPmJhbms2VGVtcCAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFoLT5iYW5rNlRlbXApOwotCQlhaC0+YmFuazZUZW1wID0gTlVMTDsKLQl9CisjZGVmaW5lIEFUSF9GUkVFX0JBTksoYmFuaykgZG8geyBcCisJCWtmcmVlKGJhbmspOyBcCisJCWJhbmsgPSBOVUxMOyBcCisJfSB3aGlsZSAoMCk7CisKKwlBVEhfRlJFRV9CQU5LKGFoLT5hbmFsb2dCYW5rMERhdGEpOworCUFUSF9GUkVFX0JBTksoYWgtPmFuYWxvZ0JhbmsxRGF0YSk7CisJQVRIX0ZSRUVfQkFOSyhhaC0+YW5hbG9nQmFuazJEYXRhKTsKKwlBVEhfRlJFRV9CQU5LKGFoLT5hbmFsb2dCYW5rM0RhdGEpOworCUFUSF9GUkVFX0JBTksoYWgtPmFuYWxvZ0Jhbms2RGF0YSk7CisJQVRIX0ZSRUVfQkFOSyhhaC0+YW5hbG9nQmFuazZUUENEYXRhKTsKKwlBVEhfRlJFRV9CQU5LKGFoLT5hbmFsb2dCYW5rN0RhdGEpOworCUFUSF9GUkVFX0JBTksoYWgtPmFkZGFjNTQxNl8yMSk7CisJQVRIX0ZSRUVfQkFOSyhhaC0+YmFuazZUZW1wKTsKKyN1bmRlZiBBVEhfRlJFRV9CQU5LCiB9CiAKIGJvb2wgYXRoOWtfaHdfaW5pdF9yZihzdHJ1Y3QgYXRoX2h3ICphaCwgaW50ICpzdGF0dXMpCkBAIC0zNzQsMTggKzM1MywxNiBAQAogCXUzMiBiYW5rNlNlbE1hc2s7CiAJdTMyICpiYW5rNlRlbXAgPSBhaC0+YmFuazZUZW1wOwogCi0Jc3dpdGNoIChhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wpIHsKKwlzd2l0Y2ggKGFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2wpIHsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9BOgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFoLT4KLQkJICAgICBhbnRlbm5hX3N3aXRjaF9zd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMCA6Ci0JCSAgICBSRURVQ0VfQ0hBSU5fMTsKKwkJICAgIChhaC0+Y29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXAgJiBBTlRTV0FQX0FCKSA/CisJCQlSRURVQ0VfQ0hBSU5fMCA6IFJFRFVDRV9DSEFJTl8xOwogCQlicmVhazsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9COgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFoLT4KLQkJICAgICBhbnRlbm5hX3N3aXRjaF9zd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMSA6Ci0JCSAgICBSRURVQ0VfQ0hBSU5fMDsKKwkJICAgIChhaC0+Y29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXAgJiBBTlRTV0FQX0FCKSA/CisJCQlSRURVQ0VfQ0hBSU5fMSA6IFJFRFVDRV9DSEFJTl8wOwogCQlicmVhazsKIAljYXNlIEFUSDlLX0FOVF9WQVJJQUJMRToKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oCmluZGV4IGM3MGY1MzAuLmRmZGE2ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmgKQEAgLTE4NSw2ICsxODUsOSBAQAogI2RlZmluZSBBUl9QSFlfUExMX0NUTF80NF8yMTMzICAweGViCiAjZGVmaW5lIEFSX1BIWV9QTExfQ1RMXzQwXzIxMzMgIDB4ZWEKIAorI2RlZmluZSBBUl9QSFlfU1BFQ1RSQUxfU0NBTgkJMHg5OTEyCisjZGVmaW5lIEFSX1BIWV9TUEVDVFJBTF9TQ0FOX0VOQUJMRQkweDEKKwogI2RlZmluZSBBUl9QSFlfUlhfREVMQVkgICAgICAgICAgIDB4OTkxNAogI2RlZmluZSBBUl9QSFlfU0VBUkNIX1NUQVJUX0RFTEFZIDB4OTkxOAogI2RlZmluZSBBUl9QSFlfUlhfREVMQVlfREVMQVkgICAgIDB4MDAwMDNGRkYKQEAgLTMwOSw3ICszMTIsMjUgQEAKICNkZWZpbmUgQVJfUEhZX05FV19BRENfRENfR0FJTl9DT1JSKF9pKSAoMHg5OWI0ICsgKChfaSkgPDwgMTIpKQogI2RlZmluZSBBUl9QSFlfTkVXX0FEQ19HQUlOX0NPUlJfRU5BQkxFIDB4NDAwMDAwMDAKICNkZWZpbmUgQVJfUEhZX05FV19BRENfRENfT0ZGU0VUX0NPUlJfRU5BQkxFIDB4ODAwMDAwMDAKLSNkZWZpbmUgQVJfUEhZX01VTFRJQ0hBSU5fR0FJTl9DVEwgIDB4OTlhYworCisjZGVmaW5lIEFSX1BIWV9NVUxUSUNIQUlOX0dBSU5fQ1RMICAgICAgICAgIDB4OTlhYworI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0NUTF9BTEwgICAgICAgICAweDdmMDAwMDAwCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfQ1RMICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9DVExfUyAgICAgICAgICAgMjQKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfTE5BQ09ORiAgICAgMHgwNjAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0FMVF9MTkFDT05GX1MgICAyNQorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fTE5BQ09ORiAgICAweDE4MDAwMDAwCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfTUFJTl9MTkFDT05GX1MgIDI3CisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfQUxUX0dBSU5UQiAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9BTFRfR0FJTlRCX1MgICAgMjkKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9NQUlOX0dBSU5UQiAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX01BSU5fR0FJTlRCX1MgICAzMAorI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0xOQTEgICAgICAgICAgICAyCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfTE5BMiAgICAgICAgICAgIDEKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9MTkExX1BMVVNfTE5BMiAgMworI2RlZmluZSBBUl9QSFlfOTI4NV9BTlRfRElWX0xOQTFfTUlOVVNfTE5BMiAwCisjZGVmaW5lIEFSX1BIWV85Mjg1X0FOVF9ESVZfR0FJTlRCXzAgICAgICAgIDAKKyNkZWZpbmUgQVJfUEhZXzkyODVfQU5UX0RJVl9HQUlOVEJfMSAgICAgICAgMQogCiAjZGVmaW5lIEFSX1BIWV9FWFRfQ0NBMCAgICAgICAgICAgICAweDk5YjgKICNkZWZpbmUgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyICAgIDB4MDAwMDAwRkYKQEAgLTM3NSw2ICszOTYsNyBAQAogI2RlZmluZSBBUl9QSFlfQ0hBTl9JTkZPX0dBSU4gICAgICAgICAgMHg5Q0ZDCiAKICNkZWZpbmUgQVJfUEhZX01PREUgICAgICAgICAweEEyMDAKKyNkZWZpbmUgQVJfUEhZX01PREVfQVNZTkNGSUZPIDB4ODAKICNkZWZpbmUgQVJfUEhZX01PREVfQVIyMTMzICAweDA4CiAjZGVmaW5lIEFSX1BIWV9NT0RFX0FSNTExMSAgMHgwMAogI2RlZmluZSBBUl9QSFlfTU9ERV9BUjUxMTIgIDB4MDgKQEAgLTM5Nyw2ICs0MTksNyBAQAogI2RlZmluZSBBUl9QSFlfQ0NLX0RFVEVDVF9BTlRfU1dJVENIX1RJTUUgICAgICAgICAgIDB4MDAwMDFGQzAKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1RfQU5UX1NXSVRDSF9USU1FX1MgICAgICAgICA2CiAjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYgICAgMHgyMDAwCisjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVZfUyAgMTMKIAogI2RlZmluZSBBUl9QSFlfR0FJTl8yR0haICAgICAgICAgICAgICAgIDB4QTIwQwogI2RlZmluZSBBUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOICAgIDB4MDBGQzAwMDAKQEAgLTQ2NywxMSArNDkwLDE4IEBACiAjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOSAgICAgICAweGEyN0MKICNkZWZpbmUgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLICAgICAgICAweDAwMDA3QzAwCiAjZGVmaW5lIEFSX1BIWV9UWF9ERVNJUkVEX1NDQUxFX0NDS19TICAgICAgMTAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw5X1JFU19EQ19SRU1PVkFMICAweDgwMDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMOV9SRVNfRENfUkVNT1ZBTF9TIDMxCiAKICNkZWZpbmUgQVJfUEhZX1RYX0dBSU5fVEJMMSAgICAgIDB4YTMwMAogI2RlZmluZSBBUl9QSFlfVFhfR0FJTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0YwMDAKICNkZWZpbmUgQVJfUEhZX1RYX0dBSU5fUyAgICAgICAgICAgICAgICAgICAxMgogCisjZGVmaW5lIEFSX1BIWV9DSDBfVFhfUFdSQ1RSTDExICAweGEzOTgKKyNkZWZpbmUgQVJfUEhZX0NIMV9UWF9QV1JDVFJMMTEgIDB4YjM5OAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9PTFBDX1RFTVBfQ09NUCAgIDB4MDAwMEZDMDAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfT0xQQ19URU1QX0NPTVBfUyAxMAorCiAjZGVmaW5lIEFSX1BIWV9WSVRfTUFTSzJfTV80Nl82MSAweGEzYTAKICNkZWZpbmUgQVJfUEhZX01BU0syX01fMzFfNDUgICAgIDB4YTNhNAogI2RlZmluZSBBUl9QSFlfTUFTSzJfTV8xNl8zMCAgICAgMHhhM2E4CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCmluZGV4IGJhMDZlNzguLjE2YTI3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jCkBAIC0yMiwxMzMgKzIyLDEzMiBAQAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsIDEyLAotCQkJMCwgMiwgMSwgMCwgMCwgMCwgMCwgMCB9LAorCQkJMCwgMCwgMCwgMCwgMCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgOTAwMCwgLyogOSBNYiAqLwogCQkJNzgwMCwgIDB4MGYsIDB4MDAsIDE4LAotCQkJMCwgMywgMSwgMSwgMSwgMSwgMSwgMCB9LAorCQkJMCwgMSwgMSwgMSwgMSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDAwMCwgMHgwYSwgMHgwMCwgMjQsCi0JCQkyLCA0LCAyLCAyLCAyLCAyLCAyLCAwIH0sCisJCQkyLCAyLCAyLCAyLCAyLCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwgLyogMTggTWIgKi8KIAkJCTEzOTAwLCAweDBlLCAweDAwLCAzNiwKLQkJCTIsIDYsICAyLCAzLCAzLCAzLCAzLCAwIH0sCisJCQkyLCAgMywgMywgMywgMywgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMjQwMDAsIC8qIDI0IE1iICovCiAJCQkxNzMwMCwgMHgwOSwgMHgwMCwgNDgsCi0JCQk0LCAxMCwgMywgNCwgNCwgNCwgNCwgMCB9LAorCQkJNCwgIDQsIDQsIDQsIDQsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDM2MDAwLCAvKiAzNiBNYiAqLwogCQkJMjMwMDAsIDB4MGQsIDB4MDAsIDcyLAotCQkJNCwgMTQsIDMsIDUsIDUsIDUsIDUsIDAgfSwKKwkJCTQsICA1LCA1LCA1LCA1LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA0ODAwMCwgLyogNDggTWIgKi8KIAkJCTI3NDAwLCAweDA4LCAweDAwLCA5NiwKLQkJCTQsIDIwLCAzLCA2LCA2LCA2LCA2LCAwIH0sCisJCQk0LCAgNiwgNiwgNiwgNiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCiAJCQkyOTMwMCwgMHgwYywgMHgwMCwgMTA4LAotCQkJNCwgMjMsIDMsIDcsIDcsIDcsIDcsIDAgfSwKLQkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA2NTAwLCAvKiA2LjUgTWIgKi8KKwkJCTQsICA3LCA3LCA3LCA3LCAwIH0sCisJCXsgVkFMSURfMjA0MCwgVkFMSURfMjA0MCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAsIC8qIDYuNSBNYiAqLwogCQkJNjQwMCwgMHg4MCwgMHgwMCwgMCwKLQkJCTAsIDIsIDMsIDgsIDI0LCA4LCAyNCwgMzIxNiB9LAorCQkJMCwgOCwgMjQsIDgsIDI0LCAzMjE2IH0sCiAJCXsgVkFMSURfMjAsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMTMwMDAsIC8qIDEzIE1iICovCiAJCQkxMjcwMCwgMHg4MSwgMHgwMCwgMSwKLQkJCTIsIDQsIDMsIDksIDI1LCA5LCAyNSwgNjQzNCB9LAorCQkJMiwgOSwgMjUsIDksIDI1LCA2NDM0IH0sCiAJCXsgVkFMSURfMjAsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMTk1MDAsIC8qIDE5LjUgTWIgKi8KIAkJCTE4ODAwLCAweDgyLCAweDAwLCAyLAotCQkJMiwgNiwgMywgMTAsIDI2LCAxMCwgMjYsIDk2NTAgfSwKKwkJCTIsIDEwLCAyNiwgMTAsIDI2LCA5NjUwIH0sCiAJCXsgVkFMSURfMjAsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgMjYwMDAsIC8qIDI2IE1iICovCiAJCQkyNTAwMCwgMHg4MywgMHgwMCwgMywKLQkJCTQsIDEwLCAzLCAxMSwgMjcsIDExLCAyNywgMTI4NjggfSwKKwkJCTQsICAxMSwgMjcsIDExLCAyNywgMTI4NjggfSwKIAkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAzOTAwMCwgLyogMzkgTWIgKi8KIAkJCTM2NzAwLCAweDg0LCAweDAwLCA0LAotCQkJNCwgMTQsIDMsIDEyLCAyOCwgMTIsIDI4LCAxOTMwNCB9LAorCQkJNCwgIDEyLCAyOCwgMTIsIDI4LCAxOTMwNCB9LAogCQl7IElOVkFMSUQsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgNTIwMDAsIC8qIDUyIE1iICovCiAJCQk0ODEwMCwgMHg4NSwgMHgwMCwgNSwKLQkJCTQsIDIwLCAzLCAxMywgMjksIDEzLCAyOSwgMjU3NDAgfSwKKwkJCTQsICAxMywgMjksIDEzLCAyOSwgMjU3NDAgfSwKIAkJeyBJTlZBTElELCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDU4NTAwLCAvKiA1OC41IE1iICovCiAJCQk1MzUwMCwgMHg4NiwgMHgwMCwgNiwKLQkJCTQsIDIzLCAzLCAxNCwgMzAsIDE0LCAzMCwgIDI4OTU2IH0sCisJCQk0LCAgMTQsIDMwLCAxNCwgMzAsICAyODk1NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzIwLCBXTEFOX1JDX1BIWV9IVF8yMF9TUywgNjUwMDAsIC8qIDY1IE1iICovCiAJCQk1OTAwMCwgMHg4NywgMHgwMCwgNywKLQkJCTQsIDI1LCAzLCAxNSwgMzEsIDE1LCAzMiwgMzIxODAgfSwKKwkJCTQsICAxNSwgMzEsIDE1LCAzMiwgMzIxODAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTMwMDAsIC8qIDEzIE1iICovCiAJCQkxMjcwMCwgMHg4OCwgMHgwMCwKLQkJCTgsIDAsIDIsIDMsIDE2LCAzMywgMTYsIDMzLCA2NDMwIH0sCisJCQk4LCAzLCAxNiwgMzMsIDE2LCAzMywgNjQzMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAyNjAwMCwgLyogMjYgTWIgKi8KIAkJCTI0ODAwLCAweDg5LCAweDAwLCA5LAotCQkJMiwgNCwgMywgMTcsIDM0LCAxNywgMzQsIDEyODYwIH0sCisJCQkyLCAxNywgMzQsIDE3LCAzNCwgMTI4NjAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMzkwMDAsIC8qIDM5IE1iICovCiAJCQkzNjYwMCwgMHg4YSwgMHgwMCwgMTAsCi0JCQkyLCA2LCAzLCAxOCwgMzUsIDE4LCAzNSwgMTkzMDAgfSwKKwkJCTIsIDE4LCAzNSwgMTgsIDM1LCAxOTMwMCB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgNTIwMDAsIC8qIDUyIE1iICovCiAJCQk0ODEwMCwgMHg4YiwgMHgwMCwgMTEsCi0JCQk0LCAxMCwgMywgMTksIDM2LCAxOSwgMzYsIDI1NzM2IH0sCisJCQk0LCAgMTksIDM2LCAxOSwgMzYsIDI1NzM2IH0sCiAJCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCA3ODAwMCwgLyogNzggTWIgKi8KIAkJCTY5NTAwLCAweDhjLCAweDAwLCAxMiwKLQkJCTQsIDE0LCAzLCAyMCwgMzcsIDIwLCAzNywgMzg2MDAgfSwKKwkJCTQsICAyMCwgMzcsIDIwLCAzNywgMzg2MDAgfSwKIAkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEwNDAwMCwgLyogMTA0IE1iICovCiAJCQk4OTUwMCwgMHg4ZCwgMHgwMCwgMTMsCi0JCQk0LCAyMCwgMywgMjEsIDM4LCAyMSwgMzgsIDUxNDcyIH0sCisJCQk0LCAgMjEsIDM4LCAyMSwgMzgsIDUxNDcyIH0sCiAJCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMTcwMDAsIC8qIDExNyBNYiAqLwogCQkJOTg5MDAsIDB4OGUsIDB4MDAsIDE0LAotCQkJNCwgMjMsIDMsIDIyLCAzOSwgMjIsIDM5LCA1Nzg5MCB9LAorCQkJNCwgIDIyLCAzOSwgMjIsIDM5LCA1Nzg5MCB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTMwMDAwLCAvKiAxMzAgTWIgKi8KIAkJCTEwODMwMCwgMHg4ZiwgMHgwMCwgMTUsCi0JCQk0LCAyNSwgMywgMjMsIDQwLCAyMywgNDEsIDY0MzIwIH0sCisJCQk0LCAgMjMsIDQwLCAyMywgNDEsIDY0MzIwIH0sCiAJCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAsIC8qIDEzLjUgTWIgKi8KIAkJCTEzMjAwLCAweDgwLCAweDAwLCAwLAotCQkJMCwgMiwgMywgOCwgMjQsIDI0LCAyNCwgNjY4NCB9LAorCQkJMCwgOCwgMjQsIDI0LCAyNCwgNjY4NCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDI3NTAwLCAvKiAyNy4wIE1iICovCiAJCQkyNTkwMCwgMHg4MSwgMHgwMCwgMSwKLQkJCTIsIDQsIDMsIDksIDI1LCAyNSwgMjUsIDEzMzY4IH0sCisJCQkyLCA5LCAyNSwgMjUsIDI1LCAxMzM2OCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDQwNTAwLCAvKiA0MC41IE1iICovCiAJCQkzODYwMCwgMHg4MiwgMHgwMCwgMiwKLQkJCTIsIDYsIDMsIDEwLCAyNiwgMjYsIDI2LCAyMDA1MiB9LAorCQkJMiwgMTAsIDI2LCAyNiwgMjYsIDIwMDUyIH0sCiAJCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgNTQwMDAsIC8qIDU0IE1iICovCiAJCQk0OTgwMCwgMHg4MywgMHgwMCwgMywKLQkJCTQsIDEwLCAzLCAxMSwgMjcsIDI3LCAyNywgMjY3MzggfSwKKwkJCTQsICAxMSwgMjcsIDI3LCAyNywgMjY3MzggfSwKIAkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA4MTUwMCwgLyogODEgTWIgKi8KIAkJCTcyMjAwLCAweDg0LCAweDAwLCA0LAotCQkJNCwgMTQsIDMsIDEyLCAyOCwgMjgsIDI4LCA0MDEwNCB9LAorCQkJNCwgIDEyLCAyOCwgMjgsIDI4LCA0MDEwNCB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTA4MDAwLCAvKiAxMDggTWIgKi8KIAkJCTkyOTAwLCAweDg1LCAweDAwLCA1LAotCQkJNCwgMjAsIDMsIDEzLCAyOSwgMjksIDI5LCA1MzQ3NiB9LAorCQkJNCwgIDEzLCAyOSwgMjksIDI5LCA1MzQ3NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTIxNTAwLCAvKiAxMjEuNSBNYiAqLwogCQkJMTAyNzAwLCAweDg2LCAweDAwLCA2LAotCQkJNCwgMjMsIDMsIDE0LCAzMCwgMzAsIDMwLCA2MDE1NiB9LAorCQkJNCwgIDE0LCAzMCwgMzAsIDMwLCA2MDE1NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAwLCAvKiAxMzUgTWIgKi8KIAkJCTExMjAwMCwgMHg4NywgMHgwMCwgNywKLQkJCTQsIDI1LCAzLCAxNSwgMzEsIDMyLCAzMiwgNjY4NDAgfSwKKwkJCTQsICAxNSwgMzEsIDMyLCAzMiwgNjY4NDAgfSwKIAkJeyBJTlZBTElELCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLCAxNTAwMDAsIC8qIDE1MCBNYiAqLwogCQkJMTIyMDAwLCAweDg3LCAweDAwLCA3LAotCQkJNCwgMjUsIDMsIDE1LCAzMSwgMzIsIDMyLCA3NDIwMCB9LAorCQkJNCwgIDE1LCAzMSwgMzIsIDMyLCA3NDIwMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNzAwMCwgLyogMjcgTWIgKi8KIAkJCTI1ODAwLCAweDg4LCAweDAwLCA4LAotCQkJMCwgMiwgMywgMTYsIDMzLCAzMywgMzMsIDEzMzYwIH0sCisJCQkwLCAxNiwgMzMsIDMzLCAzMywgMTMzNjAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgNTQwMDAsIC8qIDU0IE1iICovCiAJCQk0OTgwMCwgMHg4OSwgMHgwMCwgOSwKLQkJCTIsIDQsIDMsIDE3LCAzNCwgMzQsIDM0LCAyNjcyMCB9LAorCQkJMiwgMTcsIDM0LCAzNCwgMzQsIDI2NzIwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDgxMDAwLCAvKiA4MSBNYiAqLwogCQkJNzE5MDAsIDB4OGEsIDB4MDAsIDEwLAotCQkJMiwgNiwgMywgMTgsIDM1LCAzNSwgMzUsIDQwMDgwIH0sCisJCQkyLCAxOCwgMzUsIDM1LCAzNSwgNDAwODAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDEwODAwMCwgLyogMTA4IE1iICovCiAJCQk5MjUwMCwgMHg4YiwgMHgwMCwgMTEsCi0JCQk0LCAxMCwgMywgMTksIDM2LCAzNiwgMzYsIDUzNDQwIH0sCisJCQk0LCAgMTksIDM2LCAzNiwgMzYsIDUzNDQwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAxNjIwMDAsIC8qIDE2MiBNYiAqLwogCQkJMTMwMzAwLCAweDhjLCAweDAwLCAxMiwKLQkJCTQsIDE0LCAzLCAyMCwgMzcsIDM3LCAzNywgODAxNjAgfSwKKwkJCTQsICAyMCwgMzcsIDM3LCAzNywgODAxNjAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDIxNjAwMCwgLyogMjE2IE1iICovCiAJCQkxNjI4MDAsIDB4OGQsIDB4MDAsIDEzLAotCQkJNCwgMjAsIDMsIDIxLCAzOCwgMzgsIDM4LCAxMDY4ODAgfSwKKwkJCTQsICAyMSwgMzgsIDM4LCAzOCwgMTA2ODgwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNDMwMDAsIC8qIDI0MyBNYiAqLwogCQkJMTc4MjAwLCAweDhlLCAweDAwLCAxNCwKLQkJCTQsIDIzLCAzLCAyMiwgMzksIDM5LCAzOSwgMTIwMjQwIH0sCisJCQk0LCAgMjIsIDM5LCAzOSwgMzksIDEyMDI0MCB9LAogCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMjcwMDAwLCAvKiAyNzAgTWIgKi8KIAkJCTE5MjEwMCwgMHg4ZiwgMHgwMCwgMTUsCi0JCQk0LCAyNSwgMywgMjMsIDQwLCA0MSwgNDEsIDEzMzYwMCB9LAorCQkJNCwgIDIzLCA0MCwgNDEsIDQxLCAxMzM2MDAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLCAzMDAwMDAsIC8qIDMwMCBNYiAqLwogCQkJMjA3MDAwLCAweDhmLCAweDAwLCAxNSwKLQkJCTQsIDI1LCAzLCAyMywgNDAsIDQxLCA0MSwgMTQ4NDAwIH0sCisJCQk0LCAgMjMsIDQwLCA0MSwgNDEsIDE0ODQwMCB9LAogCX0sCiAJNTAsICAvKiBwcm9iZSBpbnRlcnZhbCAqLwotCTUwLCAgLyogcnNzaSByZWR1Y2UgaW50ZXJ2YWwgKi8KIAlXTEFOX1JDX0hUX0ZMQUcsICAvKiBQaHkgcmF0ZXMgYWxsb3dlZCBpbml0aWFsbHkgKi8KIH07CiAKQEAgLTE2MCwxNDUgKzE1OSwxNDQgQEAKIAl7CiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLAotCQkJMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCB9LAorCQkJMCwgMCwgMCwgMCwgMCwgMCB9LAogCQl7IFZBTElEX0FMTCwgVkFMSURfQUxMLCBXTEFOX1JDX1BIWV9DQ0ssIDIwMDAsIC8qIDIgTWIgKi8KIAkJCTE5MDAsIDB4MWEsIDB4MDQsIDQsCi0JCQkxLCAxLCAxLCAxLCAxLCAxLCAxLCAwIH0sCisJCQkxLCAxLCAxLCAxLCAxLCAwIH0sCiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgNTUwMCwgLyogNS41IE1iICovCiAJCQk0OTAwLCAweDE5LCAweDA0LCAxMSwKLQkJCTIsIDIsIDIsIDIsIDIsIDIsIDIsIDAgfSwKKwkJCTIsIDIsIDIsIDIsIDIsIDAgfSwKIAkJeyBWQUxJRF9BTEwsIFZBTElEX0FMTCwgV0xBTl9SQ19QSFlfQ0NLLCAxMTAwMCwgLyogMTEgTWIgKi8KIAkJCTgxMDAsIDB4MTgsIDB4MDQsIDIyLAotCQkJMywgMywgMiwgMywgMywgMywgMywgMCB9LAorCQkJMywgMywgMywgMywgMywgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsIDEyLAotCQkJNCwgMiwgMSwgNCwgNCwgNCwgNCwgMCB9LAorCQkJNCwgNCwgNCwgNCwgNCwgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsIDB4MGYsIDB4MDAsIDE4LAotCQkJNCwgMywgMSwgNSwgNSwgNSwgNSwgMCB9LAorCQkJNCwgNSwgNSwgNSwgNSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDEwMCwgMHgwYSwgMHgwMCwgMjQsCi0JCQk2LCA0LCAxLCA2LCA2LCA2LCA2LCAwIH0sCisJCQk2LCA2LCA2LCA2LCA2LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwgLyogMTggTWIgKi8KIAkJCTE0MTAwLCAgMHgwZSwgMHgwMCwgMzYsCi0JCQk2LCA2LCAyLCA3LCA3LCA3LCA3LCAwIH0sCisJCQk2LCA3LCA3LCA3LCA3LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwgLyogMjQgTWIgKi8KIAkJCTE3NzAwLCAweDA5LCAweDAwLCA0OCwKLQkJCTgsIDEwLCAzLCA4LCA4LCA4LCA4LCAwIH0sCisJCQk4LCAgOCwgOCwgOCwgOCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMzYwMDAsIC8qIDM2IE1iICovCiAJCQkyMzcwMCwgMHgwZCwgMHgwMCwgNzIsCi0JCQk4LCAxNCwgMywgOSwgOSwgOSwgOSwgMCB9LAorCQkJOCwgIDksIDksIDksIDksIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDQ4MDAwLCAvKiA0OCBNYiAqLwogCQkJMjc0MDAsIDB4MDgsIDB4MDAsIDk2LAotCQkJOCwgMjAsIDMsIDEwLCAxMCwgMTAsIDEwLCAwIH0sCisJCQk4LCAgMTAsIDEwLCAxMCwgMTAsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDU0MDAwLCAvKiA1NCBNYiAqLwogCQkJMzA5MDAsIDB4MGMsIDB4MDAsIDEwOCwKLQkJCTgsIDIzLCAzLCAxMSwgMTEsIDExLCAxMSwgMCB9LAorCQkJOCwgIDExLCAxMSwgMTEsIDExLCAwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAsIC8qIDYuNSBNYiAqLwogCQkJNjQwMCwgMHg4MCwgMHgwMCwgMCwKLQkJCTQsIDIsIDMsIDEyLCAyOCwgMTIsIDI4LCAzMjE2IH0sCisJCQk0LCAxMiwgMjgsIDEyLCAyOCwgMzIxNiB9LAogCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDEzMDAwLCAvKiAxMyBNYiAqLwogCQkJMTI3MDAsIDB4ODEsIDB4MDAsIDEsCi0JCQk2LCA0LCAzLCAxMywgMjksIDEzLCAyOSwgNjQzNCB9LAorCQkJNiwgMTMsIDI5LCAxMywgMjksIDY0MzQgfSwKIAkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAxOTUwMCwgLyogMTkuNSBNYiAqLwogCQkJMTg4MDAsIDB4ODIsIDB4MDAsIDIsCi0JCQk2LCA2LCAzLCAxNCwgMzAsIDE0LCAzMCwgOTY1MCB9LAorCQkJNiwgMTQsIDMwLCAxNCwgMzAsIDk2NTAgfSwKIAkJeyBWQUxJRF8yMCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCAyNjAwMCwgLyogMjYgTWIgKi8KIAkJCTI1MDAwLCAweDgzLCAweDAwLCAzLAotCQkJOCwgMTAsIDMsIDE1LCAzMSwgMTUsIDMxLCAxMjg2OCB9LAorCQkJOCwgIDE1LCAzMSwgMTUsIDMxLCAxMjg2OCB9LAogCQl7IFZBTElEXzIwLCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDM5MDAwLCAvKiAzOSBNYiAqLwogCQkJMzY3MDAsIDB4ODQsIDB4MDAsIDQsCi0JCQk4LCAxNCwgMywgMTYsIDMyLCAxNiwgMzIsIDE5MzA0IH0sCisJCQk4LCAgMTYsIDMyLCAxNiwgMzIsIDE5MzA0IH0sCiAJCXsgSU5WQUxJRCwgVkFMSURfMjAsIFdMQU5fUkNfUEhZX0hUXzIwX1NTLCA1MjAwMCwgLyogNTIgTWIgKi8KIAkJCTQ4MTAwLCAweDg1LCAweDAwLCA1LAotCQkJOCwgMjAsIDMsIDE3LCAzMywgMTcsIDMzLCAyNTc0MCB9LAorCQkJOCwgIDE3LCAzMywgMTcsIDMzLCAyNTc0MCB9LAogCQl7IElOVkFMSUQsICBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDU4NTAwLCAvKiA1OC41IE1iICovCiAJCQk1MzUwMCwgMHg4NiwgMHgwMCwgNiwKLQkJCTgsIDIzLCAzLCAxOCwgMzQsIDE4LCAzNCwgMjg5NTYgfSwKKwkJCTgsICAxOCwgMzQsIDE4LCAzNCwgMjg5NTYgfSwKIAkJeyBJTlZBTElELCBWQUxJRF8yMCwgV0xBTl9SQ19QSFlfSFRfMjBfU1MsIDY1MDAwLCAvKiA2NSBNYiAqLwogCQkJNTkwMDAsIDB4ODcsIDB4MDAsIDcsCi0JCQk4LCAyNSwgMywgMTksIDM1LCAxOSwgMzYsIDMyMTgwIH0sCisJCQk4LCAgMTksIDM1LCAxOSwgMzYsIDMyMTgwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEzMDAwLCAvKiAxMyBNYiAqLwogCQkJMTI3MDAsIDB4ODgsIDB4MDAsIDgsCi0JCQk0LCAyLCAzLCAyMCwgMzcsIDIwLCAzNywgNjQzMCB9LAorCQkJNCwgMjAsIDM3LCAyMCwgMzcsIDY0MzAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMjYwMDAsIC8qIDI2IE1iICovCiAJCQkyNDgwMCwgMHg4OSwgMHgwMCwgOSwKLQkJCTYsIDQsIDMsIDIxLCAzOCwgMjEsIDM4LCAxMjg2MCB9LAorCQkJNiwgMjEsIDM4LCAyMSwgMzgsIDEyODYwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDM5MDAwLCAvKiAzOSBNYiAqLwogCQkJMzY2MDAsIDB4OGEsIDB4MDAsIDEwLAotCQkJNiwgNiwgMywgMjIsIDM5LCAyMiwgMzksIDE5MzAwIH0sCisJCQk2LCAyMiwgMzksIDIyLCAzOSwgMTkzMDAgfSwKIAkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDUyMDAwLCAvKiA1MiBNYiAqLwogCQkJNDgxMDAsIDB4OGIsIDB4MDAsIDExLAotCQkJOCwgMTAsIDMsIDIzLCA0MCwgMjMsIDQwLCAyNTczNiB9LAorCQkJOCwgIDIzLCA0MCwgMjMsIDQwLCAyNTczNiB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgNzgwMDAsIC8qIDc4IE1iICovCiAJCQk2OTUwMCwgMHg4YywgMHgwMCwgMTIsCi0JCQk4LCAxNCwgMywgMjQsIDQxLCAyNCwgNDEsIDM4NjAwIH0sCisJCQk4LCAgMjQsIDQxLCAyNCwgNDEsIDM4NjAwIH0sCiAJCXsgVkFMSURfMjAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzIwX0RTLCAxMDQwMDAsIC8qIDEwNCBNYiAqLwogCQkJODk1MDAsIDB4OGQsIDB4MDAsIDEzLAotCQkJOCwgMjAsIDMsIDI1LCA0MiwgMjUsIDQyLCA1MTQ3MiB9LAorCQkJOCwgIDI1LCA0MiwgMjUsIDQyLCA1MTQ3MiB9LAogCQl7IFZBTElEXzIwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF8yMF9EUywgMTE3MDAwLCAvKiAxMTcgTWIgKi8KIAkJCTk4OTAwLCAweDhlLCAweDAwLCAxNCwKLQkJCTgsIDIzLCAzLCAyNiwgNDMsIDI2LCA0NCwgNTc4OTAgfSwKKwkJCTgsICAyNiwgNDMsIDI2LCA0NCwgNTc4OTAgfSwKIAkJeyBWQUxJRF8yMCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfMjBfRFMsIDEzMDAwMCwgLyogMTMwIE1iICovCiAJCQkxMDgzMDAsIDB4OGYsIDB4MDAsIDE1LAotCQkJOCwgMjUsIDMsIDI3LCA0NCwgMjcsIDQ1LCA2NDMyMCB9LAorCQkJOCwgIDI3LCA0NCwgMjcsIDQ1LCA2NDMyMCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDEzNTAwLCAvKiAxMy41IE1iICovCiAJCQkxMzIwMCwgMHg4MCwgMHgwMCwgMCwKLQkJCTgsIDIsIDMsIDEyLCAyOCwgMjgsIDI4LCA2Njg0IH0sCisJCQk4LCAxMiwgMjgsIDI4LCAyOCwgNjY4NCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDI3NTAwLCAvKiAyNy4wIE1iICovCiAJCQkyNTkwMCwgMHg4MSwgMHgwMCwgMSwKLQkJCTgsIDQsIDMsIDEzLCAyOSwgMjksIDI5LCAxMzM2OCB9LAorCQkJOCwgMTMsIDI5LCAyOSwgMjksIDEzMzY4IH0sCiAJCXsgVkFMSURfNDAsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgNDA1MDAsIC8qIDQwLjUgTWIgKi8KIAkJCTM4NjAwLCAweDgyLCAweDAwLCAyLAotCQkJOCwgNiwgMywgMTQsIDMwLCAzMCwgMzAsIDIwMDUyIH0sCisJCQk4LCAxNCwgMzAsIDMwLCAzMCwgMjAwNTIgfSwKIAkJeyBWQUxJRF80MCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCA1NDAwMCwgLyogNTQgTWIgKi8KIAkJCTQ5ODAwLCAweDgzLCAweDAwLCAzLAotCQkJOCwgMTAsIDMsIDE1LCAzMSwgMzEsIDMxLCAyNjczOCB9LAorCQkJOCwgIDE1LCAzMSwgMzEsIDMxLCAyNjczOCB9LAogCQl7IFZBTElEXzQwLCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1MsIDgxNTAwLCAvKiA4MSBNYiAqLwogCQkJNzIyMDAsIDB4ODQsIDB4MDAsIDQsCi0JCQk4LCAxNCwgMywgMTYsIDMyLCAzMiwgMzIsIDQwMTA0IH0sCisJCQk4LCAgMTYsIDMyLCAzMiwgMzIsIDQwMTA0IH0sCiAJCXsgSU5WQUxJRCwgVkFMSURfNDAsIFdMQU5fUkNfUEhZX0hUXzQwX1NTLCAxMDgwMDAsIC8qIDEwOCBNYiAqLwogCQkJOTI5MDAsIDB4ODUsIDB4MDAsIDUsCi0JCQk4LCAyMCwgMywgMTcsIDMzLCAzMywgMzMsIDUzNDc2IH0sCisJCQk4LCAgMTcsIDMzLCAzMywgMzMsIDUzNDc2IH0sCiAJCXsgSU5WQUxJRCwgIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTIxNTAwLCAvKiAxMjEuNSBNYiAqLwogCQkJMTAyNzAwLCAweDg2LCAweDAwLCA2LAotCQkJOCwgMjMsIDMsIDE4LCAzNCwgMzQsIDM0LCA2MDE1NiB9LAorCQkJOCwgIDE4LCAzNCwgMzQsIDM0LCA2MDE1NiB9LAogCQl7IElOVkFMSUQsIFZBTElEXzQwLCBXTEFOX1JDX1BIWV9IVF80MF9TUywgMTM1MDAwLCAvKiAxMzUgTWIgKi8KIAkJCTExMjAwMCwgMHg4NywgMHgwMCwgNywKLQkJCTgsIDIzLCAzLCAxOSwgMzUsIDM2LCAzNiwgNjY4NDAgfSwKKwkJCTgsICAxOSwgMzUsIDM2LCAzNiwgNjY4NDAgfSwKIAkJeyBJTlZBTElELCBWQUxJRF80MCwgV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLCAxNTAwMDAsIC8qIDE1MCBNYiAqLwogCQkJMTIyMDAwLCAweDg3LCAweDAwLCA3LAotCQkJOCwgMjUsIDMsIDE5LCAzNSwgMzYsIDM2LCA3NDIwMCB9LAorCQkJOCwgIDE5LCAzNSwgMzYsIDM2LCA3NDIwMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNzAwMCwgLyogMjcgTWIgKi8KIAkJCTI1ODAwLCAweDg4LCAweDAwLCA4LAotCQkJOCwgMiwgMywgMjAsIDM3LCAzNywgMzcsIDEzMzYwIH0sCisJCQk4LCAyMCwgMzcsIDM3LCAzNywgMTMzNjAgfSwKIAkJeyBJTlZBTElELCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgNTQwMDAsIC8qIDU0IE1iICovCiAJCQk0OTgwMCwgMHg4OSwgMHgwMCwgOSwKLQkJCTgsIDQsIDMsIDIxLCAzOCwgMzgsIDM4LCAyNjcyMCB9LAorCQkJOCwgMjEsIDM4LCAzOCwgMzgsIDI2NzIwIH0sCiAJCXsgSU5WQUxJRCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDgxMDAwLCAvKiA4MSBNYiAqLwogCQkJNzE5MDAsIDB4OGEsIDB4MDAsIDEwLAotCQkJOCwgNiwgMywgMjIsIDM5LCAzOSwgMzksIDQwMDgwIH0sCisJCQk4LCAyMiwgMzksIDM5LCAzOSwgNDAwODAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDEwODAwMCwgLyogMTA4IE1iICovCiAJCQk5MjUwMCwgMHg4YiwgMHgwMCwgMTEsCi0JCQk4LCAxMCwgMywgMjMsIDQwLCA0MCwgNDAsIDUzNDQwIH0sCisJCQk4LCAgMjMsIDQwLCA0MCwgNDAsIDUzNDQwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAxNjIwMDAsIC8qIDE2MiBNYiAqLwogCQkJMTMwMzAwLCAweDhjLCAweDAwLCAxMiwKLQkJCTgsIDE0LCAzLCAyNCwgNDEsIDQxLCA0MSwgODAxNjAgfSwKKwkJCTgsICAyNCwgNDEsIDQxLCA0MSwgODAxNjAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFMsIDIxNjAwMCwgLyogMjE2IE1iICovCiAJCQkxNjI4MDAsIDB4OGQsIDB4MDAsIDEzLAotCQkJOCwgMjAsIDMsIDI1LCA0MiwgNDIsIDQyLCAxMDY4ODAgfSwKKwkJCTgsICAyNSwgNDIsIDQyLCA0MiwgMTA2ODgwIH0sCiAJCXsgVkFMSURfNDAsIElOVkFMSUQsIFdMQU5fUkNfUEhZX0hUXzQwX0RTLCAyNDMwMDAsIC8qIDI0MyBNYiAqLwogCQkJMTc4MjAwLCAweDhlLCAweDAwLCAxNCwKLQkJCTgsIDIzLCAzLCAyNiwgNDMsIDQzLCA0MywgMTIwMjQwIH0sCisJCQk4LCAgMjYsIDQzLCA0MywgNDMsIDEyMDI0MCB9LAogCQl7IFZBTElEXzQwLCBJTlZBTElELCBXTEFOX1JDX1BIWV9IVF80MF9EUywgMjcwMDAwLCAvKiAyNzAgTWIgKi8KIAkJCTE5MjEwMCwgMHg4ZiwgMHgwMCwgMTUsCi0JCQk4LCAyMywgMywgMjcsIDQ0LCA0NSwgNDUsIDEzMzYwMCB9LAorCQkJOCwgIDI3LCA0NCwgNDUsIDQ1LCAxMzM2MDAgfSwKIAkJeyBWQUxJRF80MCwgSU5WQUxJRCwgV0xBTl9SQ19QSFlfSFRfNDBfRFNfSEdJLCAzMDAwMDAsIC8qIDMwMCBNYiAqLwogCQkJMjA3MDAwLCAweDhmLCAweDAwLCAxNSwKLQkJCTgsIDI1LCAzLCAyNywgNDQsIDQ1LCA0NSwgMTQ4NDAwIH0sCisJCQk4LCAgMjcsIDQ0LCA0NSwgNDUsIDE0ODQwMCB9LAogCQl9LAogCTUwLCAgLyogcHJvYmUgaW50ZXJ2YWwgKi8KLQk1MCwgIC8qIHJzc2kgcmVkdWNlIGludGVydmFsICovCiAJV0xBTl9SQ19IVF9GTEFHLCAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCiB9OwogCkBAIC0zMDcsMzEgKzMwNSwzMCBAQAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsICgweDgwfDEyKSwKLQkJCTAsIDIsIDEsIDAsIDAgfSwKKwkJCTAsIDAsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsIDB4MGYsIDB4MDAsIDE4LAotCQkJMCwgMywgMSwgMSwgMCB9LAorCQkJMCwgMSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDAwMCwgMHgwYSwgMHgwMCwgKDB4ODB8MjQpLAotCQkJMiwgNCwgMiwgMiwgMCB9LAorCQkJMiwgMiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTgwMDAsIC8qIDE4IE1iICovCiAJCQkxMzkwMCwgMHgwZSwgMHgwMCwgMzYsCi0JCQkyLCA2LCAyLCAzLCAwIH0sCisJCQkyLCAzLCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAyNDAwMCwgLyogMjQgTWIgKi8KIAkJCTE3MzAwLCAweDA5LCAweDAwLCAoMHg4MHw0OCksCi0JCQk0LCAxMCwgMywgNCwgMCB9LAorCQkJNCwgIDQsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDM2MDAwLCAvKiAzNiBNYiAqLwogCQkJMjMwMDAsIDB4MGQsIDB4MDAsIDcyLAotCQkJNCwgMTQsIDMsIDUsIDAgfSwKKwkJCTQsICA1LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA0ODAwMCwgLyogNDggTWIgKi8KIAkJCTI3NDAwLCAweDA4LCAweDAwLCA5NiwKLQkJCTQsIDE5LCAzLCA2LCAwIH0sCisJCQk0LCAgNiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCiAJCQkyOTMwMCwgMHgwYywgMHgwMCwgMTA4LAotCQkJNCwgMjMsIDMsIDcsIDAgfSwKKwkJCTQsICA3LCAwIH0sCiAJfSwKIAk1MCwgIC8qIHByb2JlIGludGVydmFsICovCi0JNTAsICAvKiByc3NpIHJlZHVjZSBpbnRlcnZhbCAqLwogCTAsICAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCiB9OwogCkBAIC0zNDAsNjQgKzMzNyw0MiBAQAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLAotCQkJMCwgMCwgMSwgMCwgMCB9LAorCQkJMCwgMCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAyMDAwLCAvKiAyIE1iICovCiAJCQkxOTAwLCAweDFhLCAweDA0LCA0LAotCQkJMSwgMSwgMSwgMSwgMCB9LAorCQkJMSwgMSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCA1NTAwLCAvKiA1LjUgTWIgKi8KIAkJCTQ5MDAsIDB4MTksIDB4MDQsIDExLAotCQkJMiwgMiwgMiwgMiwgMCB9LAorCQkJMiwgMiwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMTAwMCwgLyogMTEgTWIgKi8KIAkJCTgxMDAsIDB4MTgsIDB4MDQsIDIyLAotCQkJMywgMywgMiwgMywgMCB9LAorCQkJMywgMywgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDYwMDAsIC8qIDYgTWIgKi8KIAkJCTU0MDAsIDB4MGIsIDB4MDAsIDEyLAotCQkJNCwgMiwgMSwgNCwgMCB9LAorCQkJNCwgNCwgMCB9LAogCQl7IElOVkFMSUQsIElOVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsIDB4MGYsIDB4MDAsIDE4LAotCQkJNCwgMywgMSwgNSwgMCB9LAorCQkJNCwgNSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgMTIwMDAsIC8qIDEyIE1iICovCiAJCQkxMDAwMCwgMHgwYSwgMHgwMCwgMjQsCi0JCQk2LCA0LCAxLCA2LCAwIH0sCisJCQk2LCA2LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAxODAwMCwgLyogMTggTWIgKi8KIAkJCTEzOTAwLCAweDBlLCAweDAwLCAzNiwKLQkJCTYsIDYsIDIsIDcsIDAgfSwKKwkJCTYsIDcsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDI0MDAwLCAvKiAyNCBNYiAqLwogCQkJMTczMDAsIDB4MDksIDB4MDAsIDQ4LAotCQkJOCwgMTAsIDMsIDgsIDAgfSwKKwkJCTgsICA4LCAwIH0sCiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCAzNjAwMCwgLyogMzYgTWIgKi8KIAkJCTIzMDAwLCAweDBkLCAweDAwLCA3MiwKLQkJCTgsIDE0LCAzLCA5LCAwIH0sCisJCQk4LCAgOSwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNDgwMDAsIC8qIDQ4IE1iICovCiAJCQkyNzQwMCwgMHgwOCwgMHgwMCwgOTYsCi0JCQk4LCAxOSwgMywgMTAsIDAgfSwKKwkJCTgsICAxMCwgMCB9LAogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNTQwMDAsIC8qIDU0IE1iICovCiAJCQkyOTMwMCwgMHgwYywgMHgwMCwgMTA4LAotCQkJOCwgMjMsIDMsIDExLCAwIH0sCisJCQk4LCAgMTEsIDAgfSwKIAl9LAogCTUwLCAgLyogcHJvYmUgaW50ZXJ2YWwgKi8KLQk1MCwgIC8qIHJzc2kgcmVkdWNlIGludGVydmFsICovCi0JMCwgICAvKiBQaHkgcmF0ZXMgYWxsb3dlZCBpbml0aWFsbHkgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYl9yYXRldGFibGUgPSB7Ci0JNCwKLQl7Ci0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9DQ0ssIDEwMDAsIC8qIDEgTWIgKi8KLQkJCTkwMCwgMHgxYiwgIDB4MDAsICgweDgwfDIpLAotCQkJMCwgMCwgMSwgMCwgMCB9LAotCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAyMDAwLCAvKiAyIE1iICovCi0JCQkxODAwLCAweDFhLCAweDA0LCAoMHg4MHw0KSwKLQkJCTEsIDEsIDEsIDEsIDAgfSwKLQkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgNTUwMCwgLyogNS41IE1iICovCi0JCQk0MzAwLCAweDE5LCAweDA0LCAoMHg4MHwxMSksCi0JCQkxLCAyLCAyLCAyLCAwIH0sCi0JCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9DQ0ssIDExMDAwLCAvKiAxMSBNYiAqLwotCQkJNzEwMCwgMHgxOCwgMHgwNCwgKDB4ODB8MjIpLAotCQkJMSwgNCwgMTAwLCAzLCAwIH0sCi0JfSwKLQkxMDAsIC8qIHByb2JlIGludGVydmFsICovCi0JMTAwLCAvKiByc3NpIHJlZHVjZSBpbnRlcnZhbCAqLwogCTAsICAgLyogUGh5IHJhdGVzIGFsbG93ZWQgaW5pdGlhbGx5ICovCiB9OwogCkBAIC00NTQsMTMgKzQyOSw2IEBACiAJYXRoX3JjX3ByaXYtPnZhbGlkX3JhdGVfaW5kZXhbaW5kZXhdID0gdmFsaWRfdHhfcmF0ZSA/IDEgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhdGhfcmNfaXN2YWxpZF90eG1hc2soc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAotCQkJCQl1OCBpbmRleCkKLXsKLQlBU1NFUlQoaW5kZXggPD0gYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZSk7Ci0JcmV0dXJuIGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2luZGV4XTsKLX0KLQogc3RhdGljIGlubGluZQogaW50IGF0aF9yY19nZXRfbmV4dHZhbGlkX3R4cmF0ZShjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCiAJCQkJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LApAQCAtNDk1LDE1ICs0NjMsMTMgQEAKIAlpZiAoIWlnbm9yZV9jdyAmJiBXTEFOX1JDX1BIWV9IVChwaHkpKQogCQlpZiAoV0xBTl9SQ19QSFlfNDAocGh5KSAmJiAhKGNhcGZsYWcgJiBXTEFOX1JDXzQwX0ZMQUcpKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghV0xBTl9SQ19QSFlfNDAocGh5KSAmJiAoY2FwZmxhZyAmIFdMQU5fUkNfNDBfRkxBRykpCi0JCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWF0aF9yY19nZXRfbmV4dGxvd2VydmFsaWRfdHhyYXRlKGNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSwKLQkJCQkgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAotCQkJCSB1OCBjdXJfdmFsaWRfdHhyYXRlLCB1OCAqbmV4dF9pZHgpCithdGhfcmNfZ2V0X2xvd2VyX3JpeChjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAorCQkgICAgIHU4IGN1cl92YWxpZF90eHJhdGUsIHU4ICpuZXh0X2lkeCkKIHsKIAlpbnQ4X3QgaTsKIApAQCAtNjI5LDUyICs1OTUsMjAgQEAKIAlyZXR1cm4gaGk7CiB9CiAKLXN0YXRpYyB1OCBhdGhfcmNfcmF0ZWZpbmRfaHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLAotCQkJICAgICBpbnQgKmlzX3Byb2JpbmcpCisvKiBGaW5kcyB0aGUgaGlnaGVzdCByYXRlIGluZGV4IHdlIGNhbiB1c2UgKi8KK3N0YXRpYyB1OCBhdGhfcmNfZ2V0X2hpZ2hlc3Rfcml4KHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJICAgICAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAorCQkJCSBjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCQkJIGludCAqaXNfcHJvYmluZykKIHsKLQl1MzIgZHQsIGJlc3RfdGhydXB1dCwgdGhpc190aHJ1cHV0LCBub3dfbXNlYzsKKwl1MzIgYmVzdF90aHJ1cHV0LCB0aGlzX3RocnVwdXQsIG5vd19tc2VjOwogCXU4IHJhdGUsIG5leHRfcmF0ZSwgYmVzdF9yYXRlLCBtYXhpbmRleCwgbWluaW5kZXg7Ci0JaW50OF90ICByc3NpX2xhc3QsIHJzc2lfcmVkdWNlID0gMCwgaW5kZXggPSAwOwotCi0JKmlzX3Byb2JpbmcgPSAwOwotCi0JcnNzaV9sYXN0ID0gbWVkaWFuKGF0aF9yY19wcml2LT5yc3NpX2xhc3QsCi0JCQkgICBhdGhfcmNfcHJpdi0+cnNzaV9sYXN0X3ByZXYsCi0JCQkgICBhdGhfcmNfcHJpdi0+cnNzaV9sYXN0X3ByZXYyKTsKLQotCS8qCi0JICogQWdlIChyZWR1Y2UpIGxhc3QgYWNrIHJzc2kgYmFzZWQgb24gaG93IG9sZCBpdCBpcy4KLQkgKiBUaGUgYml6YXJyZSBudW1iZXJzIGFyZSBzbyB0aGUgZGVsdGEgaXMgMTYwbXNlYywKLQkgKiBtZWFuaW5nIHdlIGRpdmlkZSBieSAxNi4KLQkgKiAgIDBtc2VjICAgPD0gZHQgPD0gMjVtc2VjOiAgIGRvbid0IGRlcmF0ZQotCSAqICAgMjVtc2VjICA8PSBkdCA8PSAxODVtc2VjOiAgZGVyYXRlIGxpbmVhcmx5IGZyb20gMCB0byAxMGRCCi0JICogICAxODVtc2VjIDw9IGR0OiAgICAgICAgICAgICBkZXJhdGUgYnkgMTBkQgotCSAqLworCWludDhfdCBpbmRleCA9IDA7CiAKIAlub3dfbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyk7Ci0JZHQgPSBub3dfbXNlYyAtIGF0aF9yY19wcml2LT5yc3NpX3RpbWU7Ci0KLQlpZiAoZHQgPj0gMTg1KQotCQlyc3NpX3JlZHVjZSA9IDEwOwotCWVsc2UgaWYgKGR0ID49IDI1KQotCQlyc3NpX3JlZHVjZSA9ICh1OCkoKGR0IC0gMjUpID4+IDQpOwotCi0JLyogTm93IHJlZHVjZSByc3NpX2xhc3QgYnkgcnNzaV9yZWR1Y2UgKi8KLQlpZiAocnNzaV9sYXN0IDwgcnNzaV9yZWR1Y2UpCi0JCXJzc2lfbGFzdCA9IDA7Ci0JZWxzZQotCQlyc3NpX2xhc3QgLT0gcnNzaV9yZWR1Y2U7Ci0KLQkvKgotCSAqIE5vdyBsb29rIHVwIHRoZSByYXRlIGluIHRoZSByc3NpIHRhYmxlIGFuZCByZXR1cm4gaXQuCi0JICogSWYgbm8gcmF0ZXMgbWF0Y2ggdGhlbiB3ZSByZXR1cm4gMCAobG93ZXN0IHJhdGUpCi0JICovCi0KKwkqaXNfcHJvYmluZyA9IDA7CiAJYmVzdF90aHJ1cHV0ID0gMDsKIAltYXhpbmRleCA9IGF0aF9yY19wcml2LT5tYXhfdmFsaWRfcmF0ZS0xOwotCiAJbWluaW5kZXggPSAwOwogCWJlc3RfcmF0ZSA9IG1pbmluZGV4OwogCkBAIC03MDAsNyArNjM0LDcgQEAKIAkJICogMTAtMTUgYW5kIHdlIHdvdWxkIGJlIHdvcnNlIG9mZiB0aGVuIHN0YXlpbmcKIAkJICogYXQgdGhlIGN1cnJlbnQgcmF0ZS4KIAkJICovCi0JCXBlcl90aHJlcyA9IGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5wZXI7CisJCXBlcl90aHJlcyA9IGF0aF9yY19wcml2LT5wZXJbcmF0ZV07CiAJCWlmIChwZXJfdGhyZXMgPCAxMikKIAkJCXBlcl90aHJlcyA9IDEyOwogCkBAIC03MTQsNyArNjQ4LDYgQEAKIAl9CiAKIAlyYXRlID0gYmVzdF9yYXRlOwotCWF0aF9yY19wcml2LT5yc3NpX2xhc3RfbG9va3VwID0gcnNzaV9sYXN0OwogCiAJLyoKIAkgKiBNdXN0IGNoZWNrIHRoZSBhY3R1YWwgcmF0ZSAocmF0ZWticHMpIHRvIGFjY291bnQgZm9yCkBAIC03NDEsMTAgKzY3NCwxOCBAQAogCWlmIChyYXRlID4gKGF0aF9yY19wcml2LT5yYXRlX3RhYmxlX3NpemUgLSAxKSkKIAkJcmF0ZSA9IGF0aF9yY19wcml2LT5yYXRlX3RhYmxlX3NpemUgLSAxOwogCi0JQVNTRVJUKChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnZhbGlkICYmCi0JCShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSkgfHwKLQkgICAgICAgKHJhdGVfdGFibGUtPmluZm9bcmF0ZV0udmFsaWRfc2luZ2xlX3N0cmVhbSAmJgotCQkhKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX0RTX0ZMQUcpKSk7CisJaWYgKHJhdGVfdGFibGUtPmluZm9bcmF0ZV0udmFsaWQgJiYKKwkgICAgKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX0RTX0ZMQUcpKQorCQlyZXR1cm4gcmF0ZTsKKworCWlmIChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnZhbGlkX3NpbmdsZV9zdHJlYW0gJiYKKwkgICAgIShhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19EU19GTEFHKSk7CisJCXJldHVybiByYXRlOworCisJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLworCVdBUk5fT04oMSk7CisKKwlyYXRlID0gYXRoX3JjX3ByaXYtPnZhbGlkX3JhdGVfaW5kZXhbMF07CiAKIAlyZXR1cm4gcmF0ZTsKIH0KQEAgLTc5Niw3ICs3MzcsNiBAQAogCSAqIGp1c3QgQ1RTLiAgTm90ZSB0aGF0IHRoaXMgaXMgb25seSBkb25lIGZvciBPRkRNL0hUIHVuaWNhc3QgZnJhbWVzLgogCSAqLwogCWlmICgoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJPVEVDVF9FTkFCTEUpICYmCi0JICAgICEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKIAkgICAgKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkgPT0gV0xBTl9SQ19QSFlfT0ZETSB8fAogCSAgICAgV0xBTl9SQ19QSFlfSFQocmF0ZV90YWJsZS0+aW5mb1tyaXhdLnBoeSkpKSB7CiAJCXJhdGVzWzBdLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1Q7CkBAIC04MDYsNTAgKzc0NiwzNyBAQAogCXR4X2luZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeCA9IGNpeDsKIH0KIAotc3RhdGljIHU4IGF0aF9yY19yYXRlX2dldGlkeChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAotCQkJICAgICBjb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCi0JCQkgICAgIHU4IHJpeCwgdTE2IHN0ZXBkb3duLAotCQkJICAgICB1MTYgbWluX3JhdGUpCitzdGF0aWMgdm9pZCBhdGhfZ2V0X3JhdGUodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEsCisJCQkgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCiB7Ci0JdTMyIGo7Ci0JdTggbmV4dGluZGV4ID0gMDsKLQotCWlmIChtaW5fcmF0ZSkgewotCQlmb3IgKGogPSBSQVRFX1RBQkxFX1NJWkU7IGogPiAwOyBqLS0pIHsKLQkJCWlmIChhdGhfcmNfZ2V0X25leHRsb3dlcnZhbGlkX3R4cmF0ZShyYXRlX3RhYmxlLAotCQkJCQkJYXRoX3JjX3ByaXYsIHJpeCwgJm5leHRpbmRleCkpCi0JCQkJcml4ID0gbmV4dGluZGV4OwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChqID0gc3RlcGRvd247IGogPiAwOyBqLS0pIHsKLQkJCWlmIChhdGhfcmNfZ2V0X25leHRsb3dlcnZhbGlkX3R4cmF0ZShyYXRlX3RhYmxlLAotCQkJCQkJYXRoX3JjX3ByaXYsIHJpeCwgJm5leHRpbmRleCkpCi0JCQkJcml4ID0gbmV4dGluZGV4OwotCQkJZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByaXg7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9yY19yYXRlZmluZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCSAgICBzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCi17CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBwcml2OworCXN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiA9IHByaXZfc3RhOwogCWNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhyYy0+c2tiOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+Y29udHJvbC5yYXRlczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQl1OCB0cnlfcGVyX3JhdGUgPSAwLCBpID0gMCwgcml4LCBucml4OworCXU4IHRyeV9wZXJfcmF0ZSwgaSA9IDAsIHJpeCwgbnJpeDsKIAlpbnQgaXNfcHJvYmUgPSAwOwogCisJaWYgKHJhdGVfY29udHJvbF9zZW5kX2xvdyhzdGEsIHByaXZfc3RhLCB0eHJjKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGb3IgTXVsdGkgUmF0ZSBSZXRyeSB3ZSB1c2UgYSBkaWZmZXJlbnQgbnVtYmVyIG9mCisJICogcmV0cnkgYXR0ZW1wdCBjb3VudHMuIFRoaXMgZW5kcyB1cCBsb29raW5nIGxpa2UgdGhpczoKKwkgKgorCSAqIE1SUlswXSA9IDIKKwkgKiBNUlJbMV0gPSAyCisJICogTVJSWzJdID0gMgorCSAqIE1SUlszXSA9IDQKKwkgKgorCSAqLworCXRyeV9wZXJfcmF0ZSA9IHNjLT5ody0+bWF4X3JhdGVfdHJpZXM7CisKIAlyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJpeCA9IGF0aF9yY19yYXRlZmluZF9odChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CisJcml4ID0gYXRoX3JjX2dldF9oaWdoZXN0X3JpeChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CiAJbnJpeCA9IHJpeDsKIAogCWlmIChpc19wcm9iZSkgewpAQCAtODU4LDE4ICs3ODUsMTUgQEAKIAkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKIAkJCQkgICAgICAgMSwgbnJpeCwgMCk7CiAKLQkJdHJ5X3Blcl9yYXRlID0gKEFUSF8xMU5fVFhNQVhUUlkvNCk7CiAJCS8qIEdldCB0aGUgbmV4dCB0cmllZC9hbGxvd2VkIHJhdGUuIE5vIFJUUyBmb3IgdGhlIG5leHQgc2VyaWVzCiAJCSAqIGFmdGVyIHRoZSBwcm9iZSByYXRlCiAJCSAqLwotCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKLQkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCAwKTsKKwkJYXRoX3JjX2dldF9sb3dlcl9yaXgocmF0ZV90YWJsZSwgYXRoX3JjX3ByaXYsIHJpeCwgJm5yaXgpOwogCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpKytdLCB0eHJjLAogCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOwogCiAJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFOwogCX0gZWxzZSB7Ci0JCXRyeV9wZXJfcmF0ZSA9IChBVEhfMTFOX1RYTUFYVFJZLzQpOwogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2krK10sIHR4cmMsCiAJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMCk7CkBAIC04NzcsMTggKzgwMSwxNCBAQAogCiAJLyogRmlsbCBpbiB0aGUgb3RoZXIgcmF0ZXMgZm9yIG11bHRpcmF0ZSByZXRyeSAqLwogCWZvciAoIDsgaSA8IDQ7IGkrKykgewotCQl1OCB0cnlfbnVtOwotCQl1OCBtaW5fcmF0ZTsKKwkJLyogVXNlIHR3aWNlIHRoZSBudW1iZXIgb2YgdHJpZXMgZm9yIHRoZSBsYXN0IE1SUiBzZWdtZW50LiAqLworCQlpZiAoaSArIDEgPT0gNCkKKwkJCXRyeV9wZXJfcmF0ZSA9IDQ7CiAKLQkJdHJ5X251bSA9ICgoaSArIDEpID09IDQpID8KLQkJCUFUSF8xMU5fVFhNQVhUUlkgLSAodHJ5X3Blcl9yYXRlICogaSkgOiB0cnlfcGVyX3JhdGUgOwotCQltaW5fcmF0ZSA9ICgoKGkgKyAxKSA9PSA0KSAmJiAwKTsKLQotCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKLQkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCBtaW5fcmF0ZSk7CisJCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LCByaXgsICZucml4KTsKIAkJLyogQWxsIG90aGVyIHJhdGVzIGluIHRoZSBzZXJpZXMgaGF2ZSBSVFMgZW5hYmxlZCAqLwogCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpXSwgdHhyYywKLQkJCQkgICAgICAgdHJ5X251bSwgbnJpeCwgMSk7CisJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMSk7CiAJfQogCiAJLyoKQEAgLTkyNSw5ICs4NDUsOCBAQAogCSAqCiAJICogRklYTUU6IEZpeCBkdXJhdGlvbgogCSAqLwotCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCi0JICAgIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykgfHwKLQkgICAgIChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSkgeworCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykgfHwKKwkgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpIHsKIAkJcmF0ZXNbMV0uY291bnQgPSByYXRlc1syXS5jb3VudCA9IHJhdGVzWzNdLmNvdW50ID0gMDsKIAkJcmF0ZXNbMV0uaWR4ID0gcmF0ZXNbMl0uaWR4ID0gcmF0ZXNbM10uaWR4ID0gMDsKIAkJcmF0ZXNbMF0uY291bnQgPSBBVEhfVFhNQVhUUlk7CkBAIC05NjAsMTMgKzg3OSwxMyBAQAogCQkxMDAgKiA5IC8gMTAKIAl9OwogCi0JbGFzdF9wZXIgPSBhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyOworCWxhc3RfcGVyID0gYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXTsKIAogCWlmICh4cmV0cmllcykgewogCQlpZiAoeHJldHJpZXMgPT0gMSkgewotCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlciArPSAzMDsKLQkJCWlmIChhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyID4gMTAwKQotCQkJCWF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIgPSAxMDA7CisJCQlhdGhfcmNfcHJpdi0+cGVyW3R4X3JhdGVdICs9IDMwOworCQkJaWYgKGF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV0gPiAxMDApCisJCQkJYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSA9IDEwMDsKIAkJfSBlbHNlIHsKIAkJCS8qIHhyZXRyaWVzID09IDIgKi8KIAkJCWNvdW50ID0gQVJSQVlfU0laRShucmV0cnlfdG9fcGVyX2xvb2t1cCk7CkBAIC05NzQsNyArODkzLDcgQEAKIAkJCQlyZXRyaWVzID0gY291bnQgLSAxOwogCiAJCQkvKiBuZXdfUEVSID0gNy84Km9sZF9QRVIgKyAxLzgqKGN1cnJlbnRQRVIpICovCi0JCQlhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyID0KKwkJCWF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV0gPQogCQkJCSh1OCkobGFzdF9wZXIgLSAobGFzdF9wZXIgPj4gMykgKyAoMTAwID4+IDMpKTsKIAkJfQogCkBAIC0xMDEwLDE4ICs5MjksMTQgQEAKIAkJCQluX2ZyYW1lcyA9IHR4X2luZm9fcHJpdi0+bl9mcmFtZXMgKiAocmV0cmllcyArIDEpOwogCQkJCWN1cl9wZXIgPSAoMTAwICogbl9iYWRfZnJhbWVzIC8gbl9mcmFtZXMpID4+IDM7CiAJCQkJbmV3X3BlciA9ICh1OCkobGFzdF9wZXIgLSAobGFzdF9wZXIgPj4gMykgKyBjdXJfcGVyKTsKLQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucGVyID0gbmV3X3BlcjsKKwkJCQlhdGhfcmNfcHJpdi0+cGVyW3R4X3JhdGVdID0gbmV3X3BlcjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIgPQorCQkJYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSA9CiAJCQkJKHU4KShsYXN0X3BlciAtIChsYXN0X3BlciA+PiAzKSArCiAJCQkJICAgICAobnJldHJ5X3RvX3Blcl9sb29rdXBbcmV0cmllc10gPj4gMykpOwogCQl9CiAKLQkJYXRoX3JjX3ByaXYtPnJzc2lfbGFzdF9wcmV2MiA9IGF0aF9yY19wcml2LT5yc3NpX2xhc3RfcHJldjsKLQkJYXRoX3JjX3ByaXYtPnJzc2lfbGFzdF9wcmV2ICA9IGF0aF9yY19wcml2LT5yc3NpX2xhc3Q7Ci0JCWF0aF9yY19wcml2LT5yc3NpX2xhc3QgPSB0eF9pbmZvX3ByaXYtPnR4LnRzX3Jzc2k7Ci0JCWF0aF9yY19wcml2LT5yc3NpX3RpbWUgPSBub3dfbXNlYzsKIAogCQkvKgogCQkgKiBJZiB3ZSBnb3QgYXQgbW9zdCBvbmUgcmV0cnkgdGhlbiBpbmNyZWFzZSB0aGUgbWF4IHJhdGUgaWYKQEAgLTEwNDUsOCArOTYwLDggQEAKIAkJCQkJYXRoX3JjX3ByaXYtPnByb2JlX3JhdGU7CiAJCQkJcHJvYmVfcmF0ZSA9IGF0aF9yY19wcml2LT5wcm9iZV9yYXRlOwogCi0JCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtwcm9iZV9yYXRlXS5wZXIgPiAzMCkKLQkJCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3Byb2JlX3JhdGVdLnBlciA9IDIwOworCQkJCWlmIChhdGhfcmNfcHJpdi0+cGVyW3Byb2JlX3JhdGVdID4gMzApCisJCQkJCWF0aF9yY19wcml2LT5wZXJbcHJvYmVfcmF0ZV0gPSAyMDsKIAogCQkJCWF0aF9yY19wcml2LT5wcm9iZV9yYXRlID0gMDsKIApAQCAtMTA2NSwxOCArOTgwLDkgQEAKIAkJCS8qCiAJCQkgKiBEb24ndCB1cGRhdGUgYW55dGhpbmcuICBXZSBkb24ndCBrbm93IGlmCiAJCQkgKiB0aGlzIHdhcyBiZWNhdXNlIG9mIGNvbGxpc2lvbnMgb3IgcG9vciBzaWduYWwuCi0JCQkgKgotCQkJICogTGF0ZXI6IGlmIHJzc2lfYWNrIGlzIGNsb3NlIHRvCi0JCQkgKiBhdGhfcmNfcHJpdi0+c3RhdGVbdHhSYXRlXS5yc3NpX3RocmVzIGFuZCB3ZSBzZWUgbG90cwotCQkJICogb2YgcmV0cmllcywgdGhlbiB3ZSBjb3VsZCBpbmNyZWFzZQotCQkJICogYXRoX3JjX3ByaXYtPnN0YXRlW3R4UmF0ZV0ucnNzaV90aHJlcy4KIAkJCSAqLwogCQkJYXRoX3JjX3ByaXYtPmh3X21heHJldHJ5X3BrdGNudCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlpbnQzMl90IHJzc2lfYWNrQXZnOwotCQkJaW50OF90IHJzc2lfdGhyZXM7Ci0JCQlpbnQ4X3QgcnNzaV9hY2tfdm1pbjsKLQogCQkJLyoKIAkJCSAqIEl0IHdvcmtlZCB3aXRoIG5vIHJldHJpZXMuIEZpcnN0IGlnbm9yZSBib2d1cyAoc21hbGwpCiAJCQkgKiByc3NpX2FjayB2YWx1ZXMuCkBAIC0xMDg2LDQzICs5OTIsOSBAQAogCQkJCWF0aF9yY19wcml2LT5od19tYXhyZXRyeV9wa3RjbnQrKzsKIAkJCX0KIAotCQkJaWYgKHR4X2luZm9fcHJpdi0+dHgudHNfcnNzaSA8Ci0JCQkgICAgcmF0ZV90YWJsZS0+aW5mb1t0eF9yYXRlXS5yc3NpX2Fja192YWxpZG1pbikKLQkJCQlnb3RvIGV4aXQ7Ci0KLQkJCS8qIEF2ZXJhZ2UgdGhlIHJzc2kgKi8KLQkJCWlmICh0eF9yYXRlICE9IGF0aF9yY19wcml2LT5yc3NpX3N1bV9yYXRlKSB7Ci0JCQkJYXRoX3JjX3ByaXYtPnJzc2lfc3VtX3JhdGUgPSB0eF9yYXRlOwotCQkJCWF0aF9yY19wcml2LT5yc3NpX3N1bSA9Ci0JCQkJCWF0aF9yY19wcml2LT5yc3NpX3N1bV9jbnQgPSAwOwotCQkJfQotCi0JCQlhdGhfcmNfcHJpdi0+cnNzaV9zdW0gKz0gdHhfaW5mb19wcml2LT50eC50c19yc3NpOwotCQkJYXRoX3JjX3ByaXYtPnJzc2lfc3VtX2NudCsrOwotCi0JCQlpZiAoYXRoX3JjX3ByaXYtPnJzc2lfc3VtX2NudCA8IDQpCi0JCQkJZ290byBleGl0OwotCi0JCQlyc3NpX2Fja0F2ZyA9Ci0JCQkJKGF0aF9yY19wcml2LT5yc3NpX3N1bSArIDIpIC8gNDsKLQkJCXJzc2lfdGhyZXMgPQotCQkJCWF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5yc3NpX3RocmVzOwotCQkJcnNzaV9hY2tfdm1pbiA9Ci0JCQkJcmF0ZV90YWJsZS0+aW5mb1t0eF9yYXRlXS5yc3NpX2Fja192YWxpZG1pbjsKLQotCQkJYXRoX3JjX3ByaXYtPnJzc2lfc3VtID0KLQkJCQlhdGhfcmNfcHJpdi0+cnNzaV9zdW1fY250ID0gMDsKLQotCQkJLyogTm93IHJlZHVjZSB0aGUgY3VycmVudCByc3NpIHRocmVzaG9sZCAqLwotCQkJaWYgKChyc3NpX2Fja0F2ZyA8IHJzc2lfdGhyZXMgKyAyKSAmJgotCQkJICAgIChyc3NpX3RocmVzID4gcnNzaV9hY2tfdm1pbikpIHsKLQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbdHhfcmF0ZV0ucnNzaV90aHJlcy0tOwotCQkJfQotCi0JCQlzdGF0ZV9jaGFuZ2UgPSB0cnVlOwogCQl9CiAJfQotZXhpdDoKKwogCXJldHVybiBzdGF0ZV9jaGFuZ2U7CiB9CiAKQEAgLTExMzQsMTEgKzEwMDYsNiBAQAogCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2LAogCQkJICAgICBpbnQgdHhfcmF0ZSwgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcykKIHsKLSNkZWZpbmUgQ0hLX1JTU0kocmF0ZSkJCQkJCVwKLQkoKGF0aF9yY19wcml2LT5zdGF0ZVsocmF0ZSldLnJzc2lfdGhyZXMgKwlcCi0JICByYXRlX3RhYmxlLT5pbmZvWyhyYXRlKV0ucnNzaV9hY2tfZGVsdGFtaW4pID4gXAotCSBhdGhfcmNfcHJpdi0+c3RhdGVbKHJhdGUpKzFdLnJzc2lfdGhyZXMpCi0KIAl1MzIgbm93X21zZWMgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwogCWludCByYXRlOwogCXU4IGxhc3RfcGVyOwpAQCAtMTE0OSwxNCArMTAxNiw3IEBACiAJaWYgKCh0eF9yYXRlIDwgMCkgfHwgKHR4X3JhdGUgPiByYXRlX3RhYmxlLT5yYXRlX2NudCkpCiAJCXJldHVybjsKIAotCS8qIFRvIGNvbXBlbnNhdGUgZm9yIHNvbWUgaW1iYWxhbmNlIGJldHdlZW4gY3RybCBhbmQgZXh0LiBjaGFubmVsICovCi0KLQlpZiAoV0xBTl9SQ19QSFlfNDAocmF0ZV90YWJsZS0+aW5mb1t0eF9yYXRlXS5waHkpKQotCQl0eF9pbmZvX3ByaXYtPnR4LnRzX3Jzc2kgPQotCQkJdHhfaW5mb19wcml2LT50eC50c19yc3NpIDwgMyA/IDAgOgotCQkJdHhfaW5mb19wcml2LT50eC50c19yc3NpIC0gMzsKLQotCWxhc3RfcGVyID0gYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlcjsKKwlsYXN0X3BlciA9IGF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV07CiAKIAkvKiBVcGRhdGUgUEVSIGZpcnN0ICovCiAJc3RhdGVfY2hhbmdlID0gYXRoX3JjX3VwZGF0ZV9wZXIoc2MsIHJhdGVfdGFibGUsIGF0aF9yY19wcml2LApAQCAtMTE2NywxMTQgKzEwMjcsNTIgQEAKIAkgKiBJZiB0aGlzIHJhdGUgbG9va3MgYmFkIChoaWdoIFBFUikgdGhlbiBzdG9wIHVzaW5nIGl0IGZvcgogCSAqIGEgd2hpbGUgKGV4Y2VwdCBpZiB3ZSBhcmUgcHJvYmluZykuCiAJICovCi0JaWYgKGF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIgPj0gNTUgJiYgdHhfcmF0ZSA+IDAgJiYKKwlpZiAoYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSA+PSA1NSAmJiB0eF9yYXRlID4gMCAmJgogCSAgICByYXRlX3RhYmxlLT5pbmZvW3R4X3JhdGVdLnJhdGVrYnBzIDw9CiAJICAgIHJhdGVfdGFibGUtPmluZm9bYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeV0ucmF0ZWticHMpIHsKLQkJYXRoX3JjX2dldF9uZXh0bG93ZXJ2YWxpZF90eHJhdGUocmF0ZV90YWJsZSwgYXRoX3JjX3ByaXYsCi0JCQkJICh1OCl0eF9yYXRlLCAmYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSk7CisJCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LAorCQkJCSAgICAgKHU4KXR4X3JhdGUsICZhdGhfcmNfcHJpdi0+cmF0ZV9tYXhfcGh5KTsKIAogCQkvKiBEb24ndCBwcm9iZSBmb3IgYSBsaXR0bGUgd2hpbGUuICovCiAJCWF0aF9yY19wcml2LT5wcm9iZV90aW1lID0gbm93X21zZWM7CiAJfQogCi0JaWYgKHN0YXRlX2NoYW5nZSkgewotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIHJhdGVzIGFib3ZlIHRoaXMgaGF2ZSBoaWdoZXIgcnNzaSB0aHJlc2hvbGRzLgotCQkgKiAoTm90ZTogIE1vbm90b25pY2l0eSBpcyBrZXB0IHdpdGhpbiB0aGUgT0ZETSByYXRlcyBhbmQKLQkJICogICAgICAgICB3aXRoaW4gdGhlIENDSyByYXRlcy4gSG93ZXZlciwgbm8gYWRqdXN0bWVudCBpcwotCQkgKiAgICAgICAgIG1hZGUgdG8ga2VlcCB0aGUgcnNzaSB0aHJlc2hvbGRzIG1vbm90b25pY2FsbHkKLQkJICogICAgICAgICBpbmNyZWFzaW5nIGJldHdlZW4gdGhlIENDSyBhbmQgT0ZETSByYXRlcy4pCi0JCSAqLwotCQlmb3IgKHJhdGUgPSB0eF9yYXRlOyByYXRlIDwgc2l6ZSAtIDE7IHJhdGUrKykgewotCQkJaWYgKHJhdGVfdGFibGUtPmluZm9bcmF0ZSsxXS5waHkgIT0KLQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3R4X3JhdGVdLnBoeSkKLQkJCQlicmVhazsKLQotCQkJaWYgKENIS19SU1NJKHJhdGUpKSB7Ci0JCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucnNzaV90aHJlcyA9Ci0JCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzICsKLQkJCQkJcmF0ZV90YWJsZS0+aW5mb1tyYXRlXS5yc3NpX2Fja19kZWx0YW1pbjsKLQkJCX0KLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSB0aGUgcmF0ZXMgYmVsb3cgdGhpcyBoYXZlIGxvd2VyIHJzc2kgdGhyZXNob2xkcy4gKi8KLQkJZm9yIChyYXRlID0gdHhfcmF0ZSAtIDE7IHJhdGUgPj0gMDsgcmF0ZS0tKSB7Ci0JCQlpZiAocmF0ZV90YWJsZS0+aW5mb1tyYXRlXS5waHkgIT0KLQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3R4X3JhdGVdLnBoeSkKLQkJCQlicmVhazsKLQotCQkJaWYgKENIS19SU1NJKHJhdGUpKSB7Ci0JCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlKzFdLnJzc2lfdGhyZXMgPAotCQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnJzc2lfYWNrX2RlbHRhbWluKQotCQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucnNzaV90aHJlcyA9IDA7Ci0JCQkJZWxzZSB7Ci0JCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzID0KLQkJCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucnNzaV90aHJlcyAtCi0JCQkJCXJhdGVfdGFibGUtPmluZm9bcmF0ZV0ucnNzaV9hY2tfZGVsdGFtaW47Ci0JCQkJfQotCi0JCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzIDwKLQkJCQkgICAgcmF0ZV90YWJsZS0+aW5mb1tyYXRlXS5yc3NpX2Fja192YWxpZG1pbikgewotCQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucnNzaV90aHJlcyA9Ci0JCQkJCXJhdGVfdGFibGUtPmluZm9bcmF0ZV0ucnNzaV9hY2tfdmFsaWRtaW47Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCiAJLyogTWFrZSBzdXJlIHRoZSByYXRlcyBiZWxvdyB0aGlzIGhhdmUgbG93ZXIgUEVSICovCiAJLyogTW9ub3RvbmljaXR5IGlzIGtlcHQgb25seSBmb3IgcmF0ZXMgYmVsb3cgdGhlIGN1cnJlbnQgcmF0ZS4gKi8KLQlpZiAoYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlciA8IGxhc3RfcGVyKSB7CisJaWYgKGF0aF9yY19wcml2LT5wZXJbdHhfcmF0ZV0gPCBsYXN0X3BlcikgewogCQlmb3IgKHJhdGUgPSB0eF9yYXRlIC0gMTsgcmF0ZSA+PSAwOyByYXRlLS0pIHsKLQkJCWlmIChyYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnBoeSAhPQotCQkJICAgIHJhdGVfdGFibGUtPmluZm9bdHhfcmF0ZV0ucGh5KQotCQkJCWJyZWFrOwogCi0JCQlpZiAoYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGVdLnBlciA+Ci0JCQkgICAgYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucGVyKSB7Ci0JCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGVdLnBlciA9Ci0JCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlKzFdLnBlcjsKKwkJCWlmIChhdGhfcmNfcHJpdi0+cGVyW3JhdGVdID4KKwkJCSAgICBhdGhfcmNfcHJpdi0+cGVyW3JhdGUrMV0pIHsKKwkJCQlhdGhfcmNfcHJpdi0+cGVyW3JhdGVdID0KKwkJCQkJYXRoX3JjX3ByaXYtPnBlcltyYXRlKzFdOwogCQkJfQogCQl9CiAJfQogCiAJLyogTWFpbnRhaW4gbW9ub3RvbmljaXR5IGZvciByYXRlcyBhYm92ZSB0aGUgY3VycmVudCByYXRlICovCiAJZm9yIChyYXRlID0gdHhfcmF0ZTsgcmF0ZSA8IHNpemUgLSAxOyByYXRlKyspIHsKLQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlKzFdLnBlciA8Ci0JCSAgICBhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucGVyKQotCQkJYXRoX3JjX3ByaXYtPnN0YXRlW3JhdGUrMV0ucGVyID0KLQkJCQlhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucGVyOwotCX0KLQotCS8qIEV2ZXJ5IHNvIG9mdGVuLCB3ZSByZWR1Y2UgdGhlIHRocmVzaG9sZHMgYW5kCi0JICogUEVSIChkaWZmZXJlbnQgZm9yIENDSyBhbmQgT0ZETSkuICovCi0JaWYgKG5vd19tc2VjIC0gYXRoX3JjX3ByaXYtPnJzc2lfZG93bl90aW1lID49Ci0JICAgIHJhdGVfdGFibGUtPnJzc2lfcmVkdWNlX2ludGVydmFsKSB7Ci0KLQkJZm9yIChyYXRlID0gMDsgcmF0ZSA8IHNpemU7IHJhdGUrKykgewotCQkJaWYgKGF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzID4KLQkJCSAgICByYXRlX3RhYmxlLT5pbmZvW3JhdGVdLnJzc2lfYWNrX3ZhbGlkbWluKQotCQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5yc3NpX3RocmVzIC09IDE7Ci0JCX0KLQkJYXRoX3JjX3ByaXYtPnJzc2lfZG93bl90aW1lID0gbm93X21zZWM7CisJCWlmIChhdGhfcmNfcHJpdi0+cGVyW3JhdGUrMV0gPAorCQkgICAgYXRoX3JjX3ByaXYtPnBlcltyYXRlXSkKKwkJCWF0aF9yY19wcml2LT5wZXJbcmF0ZSsxXSA9CisJCQkJYXRoX3JjX3ByaXYtPnBlcltyYXRlXTsKIAl9CiAKIAkvKiBFdmVyeSBzbyBvZnRlbiwgd2UgcmVkdWNlIHRoZSB0aHJlc2hvbGRzCiAJICogYW5kIFBFUiAoZGlmZmVyZW50IGZvciBDQ0sgYW5kIE9GRE0pLiAqLwogCWlmIChub3dfbXNlYyAtIGF0aF9yY19wcml2LT5wZXJfZG93bl90aW1lID49Ci0JICAgIHJhdGVfdGFibGUtPnJzc2lfcmVkdWNlX2ludGVydmFsKSB7CisJICAgIHJhdGVfdGFibGUtPnByb2JlX2ludGVydmFsKSB7CiAJCWZvciAocmF0ZSA9IDA7IHJhdGUgPCBzaXplOyByYXRlKyspIHsKLQkJCWF0aF9yY19wcml2LT5zdGF0ZVtyYXRlXS5wZXIgPQotCQkJCTcgKiBhdGhfcmNfcHJpdi0+c3RhdGVbcmF0ZV0ucGVyIC8gODsKKwkJCWF0aF9yY19wcml2LT5wZXJbcmF0ZV0gPQorCQkJCTcgKiBhdGhfcmNfcHJpdi0+cGVyW3JhdGVdIC8gODsKIAkJfQogCiAJCWF0aF9yY19wcml2LT5wZXJfZG93bl90aW1lID0gbm93X21zZWM7CiAJfQogCiAJYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzYywgdHhfcmF0ZSwgeHJldHJpZXMsIHJldHJpZXMsCi0JCQkgICAgICAgYXRoX3JjX3ByaXYtPnN0YXRlW3R4X3JhdGVdLnBlcik7CisJCQkgICAgICAgYXRoX3JjX3ByaXYtPnBlclt0eF9yYXRlXSk7CiAKLSN1bmRlZiBDSEtfUlNTSQogfQogCiBzdGF0aWMgaW50IGF0aF9yY19nZXRfcmF0ZWluZGV4KGNvbnN0IHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSwKQEAgLTE0MTAsOSArMTIwOCw3IEBACiAKIAkvKiBJbml0aWFsaXplIHRocmVzaG9sZHMgYWNjb3JkaW5nIHRvIHRoZSBnbG9iYWwgcmF0ZSB0YWJsZSAqLwogCWZvciAoaSA9IDAgOyBpIDwgYXRoX3JjX3ByaXYtPnJhdGVfdGFibGVfc2l6ZTsgaSsrKSB7Ci0JCWF0aF9yY19wcml2LT5zdGF0ZVtpXS5yc3NpX3RocmVzID0KLQkJCXJhdGVfdGFibGUtPmluZm9baV0ucnNzaV9hY2tfdmFsaWRtaW47Ci0JCWF0aF9yY19wcml2LT5zdGF0ZVtpXS5wZXIgPSAwOworCQlhdGhfcmNfcHJpdi0+cGVyW2ldID0gMDsKIAl9CiAKIAkvKiBEZXRlcm1pbmUgdGhlIHZhbGlkIHJhdGVzICovCkBAIC0xNTIxLDcgKzEzMTcsNyBAQAogCS8qCiAJICogSWYgdW5kZXJydW4gZXJyb3IgaXMgc2VlbiBhc3N1bWUgaXQgYXMgYW4gZXhjZXNzaXZlIHJldHJ5IG9ubHkKIAkgKiBpZiBwcmVmZXRjaCB0cmlnZ2VyIGxldmVsIGhhdmUgcmVhY2hlZCB0aGUgbWF4ICgweDNmIGZvciA1NDE2KQotCSAqIEFkanVzdCB0aGUgbG9uZyByZXRyeSBhcyBpZiB0aGUgZnJhbWUgd2FzIHRyaWVkIEFUSF8xMU5fVFhNQVhUUlkKKwkgKiBBZGp1c3QgdGhlIGxvbmcgcmV0cnkgYXMgaWYgdGhlIGZyYW1lIHdhcyB0cmllZCBody0+bWF4X3JhdGVfdHJpZXMKIAkgKiB0aW1lcy4gVGhpcyBhZmZlY3RzIGhvdyByYXRlY3RybCB1cGRhdGVzIFBFUiBmb3IgdGhlIGZhaWxlZCByYXRlLgogCSAqLwogCWlmICh0eF9pbmZvX3ByaXYtPnR4LnRzX2ZsYWdzICYKQEAgLTE1MzYsNyArMTMzMiw3IEBACiAJCXR4X3N0YXR1cyA9IDE7CiAKIAlhdGhfcmNfdHhfc3RhdHVzKHNjLCBhdGhfcmNfcHJpdiwgdHhfaW5mbywgZmluYWxfdHNfaWR4LCB0eF9zdGF0dXMsCi0JCQkgKGlzX3VuZGVycnVuKSA/IEFUSF8xMU5fVFhNQVhUUlkgOgorCQkJIChpc191bmRlcnJ1bikgPyBzYy0+aHctPm1heF9yYXRlX3RyaWVzIDoKIAkJCSB0eF9pbmZvX3ByaXYtPnR4LnRzX2xvbmdyZXRyeSk7CiAKIAkvKiBDaGVjayBpZiBhZ2dyZWdhdGlvbiBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyB0aWQgKi8KQEAgLTE1NjAsMzEgKzEzNTYsNiBAQAogCWtmcmVlKHR4X2luZm9fcHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9nZXRfcmF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9IHR4cmMtPnNiYW5kOwotCXN0cnVjdCBza19idWZmICpza2IgPSB0eHJjLT5za2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBwcml2OwotCXN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiA9IHByaXZfc3RhOwotCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCS8qIGxvd2VzdCByYXRlIGZvciBtYW5hZ2VtZW50IGFuZCBOT19BQ0sgZnJhbWVzICovCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YShmYykgfHwKLQkgICAgdHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fCAhc3RhKSB7Ci0JCXR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIHN0YSk7Ci0JCXR4X2luZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQotCQkJKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8KLQkJCQkxIDogQVRIX01HVF9UWE1BWFRSWTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIEZpbmQgdHggcmF0ZSBmb3IgdW5pY2FzdCBmcmFtZXMgKi8KLQlhdGhfcmNfcmF0ZWZpbmQoc2MsIGF0aF9yY19wcml2LCB0eHJjKTsKLX0KLQogc3RhdGljIHZvaWQgYXRoX3JhdGVfaW5pdCh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqcHJpdl9zdGEpCiB7CkBAIC0xNjk3LDcgKzE0NjgsNiBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyYXRlX3ByaXYtPnJzc2lfZG93bl90aW1lID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKIAlyYXRlX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXggPSBzYy0+c2NfYWgtPmNhcHMudHhfdHJpZ2xldmVsX21heDsKIAogCXJldHVybiByYXRlX3ByaXY7CkBAIC0xNzI1LDggKzE0OTUsNiBAQAogCiB2b2lkIGF0aF9yYXRlX2F0dGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExQl0gPQotCQkmYXI1NDE2XzExYl9yYXRldGFibGU7CiAJc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMUFdID0KIAkJJmFyNTQxNl8xMWFfcmF0ZXRhYmxlOwogCXNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFHXSA9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCmluZGV4IGUzYWJkNzYuLmZhMjFhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oCkBAIC0xMTIsOCArMTEyLDYgQEAKIAkJdTggc2hvcnRfcHJlYW1ibGU7CiAJCXU4IGRvdDExcmF0ZTsKIAkJdTggY3RybF9yYXRlOwotCQlpbnQ4X3QgcnNzaV9hY2tfdmFsaWRtaW47Ci0JCWludDhfdCByc3NpX2Fja19kZWx0YW1pbjsKIAkJdTggYmFzZV9pbmRleDsKIAkJdTggY3c0MGluZGV4OwogCQl1OCBzZ2lfaW5kZXg7CkBAIC0xMjEsMTUgKzExOSw5IEBACiAJCXUzMiBtYXhfNG1zX2ZyYW1lbGVuOwogCX0gaW5mb1tSQVRFX1RBQkxFX1NJWkVdOwogCXUzMiBwcm9iZV9pbnRlcnZhbDsKLQl1MzIgcnNzaV9yZWR1Y2VfaW50ZXJ2YWw7CiAJdTggaW5pdGlhbF9yYXRlbWF4OwogfTsKIAotc3RydWN0IGF0aF90eF9yYXRlY3RybF9zdGF0ZSB7Ci0JaW50OF90IHJzc2lfdGhyZXM7CS8qIHJlcXVpcmVkIHJzc2kgZm9yIHRoaXMgcmF0ZSAoZEIpICovCi0JdTggcGVyOwkJCS8qIHJlY2VudCBlc3RpbWF0ZSBvZiBwYWNrZXQgZXJyb3IgcmF0ZSAoJSkgKi8KLX07Ci0KIHN0cnVjdCBhdGhfcmF0ZXNldCB7CiAJdTggcnNfbnJhdGVzOwogCXU4IHJzX3JhdGVzW0FUSF9SQVRFX01BWF07CkBAIC0xMzgsMjIgKzEzMCwxNCBAQAogLyoqCiAgKiBzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAtIFJhdGUgQ29udHJvbCBwcml2IGRhdGEKICAqIEBzdGF0ZTogUkMgc3RhdGUKLSAqIEByc3NpX2xhc3Q6IGxhc3QgQUNLIHJzc2kKLSAqIEByc3NpX2xhc3RfbG9va3VwOiBsYXN0IEFDSyByc3NpIHVzZWQgZm9yIGxvb2t1cAotICogQHJzc2lfbGFzdF9wcmV2OiBwcmV2aW91cyBsYXN0IEFDSyByc3NpCi0gKiBAcnNzaV9sYXN0X3ByZXYyOiAybmQgcHJldmlvdXMgbGFzdCBBQ0sgcnNzaQotICogQHJzc2lfc3VtX2NudDogY291bnQgb2YgcnNzaV9zdW0gZm9yIGF2ZXJhZ2luZwotICogQHJzc2lfc3VtX3JhdGU6IHJhdGUgdGhhdCB3ZSBhcmUgYXZlcmFnaW5nCi0gKiBAcnNzaV9zdW06IHJ1bm5pbmcgc3VtIG9mIHJzc2kgZm9yIGF2ZXJhZ2luZwogICogQHByb2JlX3JhdGU6IHJhdGUgd2UgYXJlIHByb2JpbmcgYXQKLSAqIEByc3NpX3RpbWU6IG1zZWMgdGltZXN0YW1wIGZvciBsYXN0IGFjayByc3NpCi0gKiBAcnNzaV9kb3duX3RpbWU6IG1zZWMgdGltZXN0YW1wIGZvciBsYXN0IGRvd24gc3RlcAogICogQHByb2JlX3RpbWU6IG1zZWMgdGltZXN0YW1wIGZvciBsYXN0IHByb2JlCiAgKiBAaHdfbWF4cmV0cnlfcGt0Y250OiBudW0gb2YgcGFja2V0cyBzaW5jZSB3ZSBnb3QgSFcgbWF4IHJldHJ5IGVycm9yCiAgKiBAbWF4X3ZhbGlkX3JhdGU6IG1heGltdW0gbnVtYmVyIG9mIHZhbGlkIHJhdGUKICAqIEBwZXJfZG93bl90aW1lOiBtc2VjIHRpbWVzdGFtcCBmb3IgbGFzdCBQRVIgZG93biBzdGVwCiAgKiBAdmFsaWRfcGh5X3JhdGVjbnQ6IHZhbGlkIHJhdGUgY291bnQKICAqIEByYXRlX21heF9waHk6IHBoeSBpbmRleCBmb3IgdGhlIG1heCByYXRlCisgKiBAcGVyOiBQRVIgZm9yIGV2ZXJ5IHZhbGlkIHJhdGUgaW4gJQogICogQHByb2JlX2ludGVydmFsOiBpbnRlcnZhbCBmb3IgcmF0ZWN0cmwgdG8gcHJvYmUgZm9yIG90aGVyIHJhdGVzCiAgKiBAcHJldl9kYXRhX3JpeDogcmF0ZSBpZHggb2YgbGFzdCBkYXRhIGZyYW1lCiAgKiBAaHRfY2FwOiBIVCBjYXBhYmlsaXRpZXMKQEAgLTE2MSwxMyArMTQ1LDYgQEAKICAqIEBuZWdfaHRfcmF0ZXM6IE5lZ290aWF0ZWQgSFQgcmF0ZXMKICAqLwogc3RydWN0IGF0aF9yYXRlX3ByaXYgewotCWludDhfdCByc3NpX2xhc3Q7Ci0JaW50OF90IHJzc2lfbGFzdF9sb29rdXA7Ci0JaW50OF90IHJzc2lfbGFzdF9wcmV2OwotCWludDhfdCByc3NpX2xhc3RfcHJldjI7Ci0JaW50MzJfdCByc3NpX3N1bV9jbnQ7Ci0JaW50MzJfdCByc3NpX3N1bV9yYXRlOwotCWludDMyX3QgcnNzaV9zdW07CiAJdTggcmF0ZV90YWJsZV9zaXplOwogCXU4IHByb2JlX3JhdGU7CiAJdTggaHdfbWF4cmV0cnlfcGt0Y250OwpAQCAtMTc3LDE0ICsxNTQsMTIgQEAKIAl1OCB2YWxpZF9waHlfcmF0ZWNudFtXTEFOX1JDX1BIWV9NQVhdOwogCXU4IHZhbGlkX3BoeV9yYXRlaWR4W1dMQU5fUkNfUEhZX01BWF1bUkFURV9UQUJMRV9TSVpFXTsKIAl1OCByYXRlX21heF9waHk7Ci0JdTMyIHJzc2lfdGltZTsKLQl1MzIgcnNzaV9kb3duX3RpbWU7CisJdTggcGVyW1JBVEVfVEFCTEVfU0laRV07CiAJdTMyIHByb2JlX3RpbWU7CiAJdTMyIHBlcl9kb3duX3RpbWU7CiAJdTMyIHByb2JlX2ludGVydmFsOwogCXUzMiBwcmV2X2RhdGFfcml4OwogCXUzMiB0eF90cmlnbGV2ZWxfbWF4OwotCXN0cnVjdCBhdGhfdHhfcmF0ZWN0cmxfc3RhdGUgc3RhdGVbUkFURV9UQUJMRV9TSVpFXTsKIAlzdHJ1Y3QgYXRoX3JhdGVzZXQgbmVnX3JhdGVzOwogCXN0cnVjdCBhdGhfcmF0ZXNldCBuZWdfaHRfcmF0ZXM7CiAJc3RydWN0IGF0aF9yYXRlX3NvZnRjICphc2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCBjZWNlMWM0Li5lYzBhYmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKQEAgLTEwMCwzOCArMTAwLDYgQEAKIAlyZXR1cm4gKHRzZiAmIH4weDdmZmYpIHwgcnN0YW1wOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgb2ZmOwotCi0JLyoKLQkgKiBDYWNoZS1saW5lLWFsaWduLiAgVGhpcyBpcyBpbXBvcnRhbnQgKGZvciB0aGUKLQkgKiA1MjEwIGF0IGxlYXN0KSBhcyBub3QgZG9pbmcgc28gY2F1c2VzIGJvZ3VzIGRhdGEKLQkgKiBpbiByeCdkIGZyYW1lcy4KLQkgKi8KLQotCS8qIE5vdGU6IHRoZSBrZXJuZWwgY2FuIGFsbG9jYXRlIGEgdmFsdWUgZ3JlYXRlciB0aGFuCi0JICogd2hhdCB3ZSBhc2sgaXQgdG8gZ2l2ZSB1cy4gV2UgcmVhbGx5IG9ubHkgbmVlZCA0IEtCIGFzIHRoYXQKLQkgKiBpcyB0aGlzIGhhcmR3YXJlIHN1cHBvcnRzIGFuZCBpbiBmYWN0IHdlIG5lZWQgYXQgbGVhc3QgMzg0OQotCSAqIGFzIHRoYXQgaXMgdGhlIE1BWCBBTVNEVSBzaXplIHRoaXMgaGFyZHdhcmUgc3VwcG9ydHMuCi0JICogVW5mb3J0dW5hdGVseSB0aGlzIG1lYW5zIHdlIG1heSBnZXQgOCBLQiBoZXJlIGZyb20gdGhlCi0JICoga2VybmVsLi4uIGFuZCB0aGF0IGlzIGFjdHVhbGx5IHdoYXQgaXMgb2JzZXJ2ZWQgb24gc29tZQotCSAqIHN5c3RlbXMgOiggKi8KLQlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgc2MtPmNhY2hlbHN6IC0gMSwgZ2ZwX21hc2spOwotCWlmIChza2IgIT0gTlVMTCkgewotCQlvZmYgPSAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJSBzYy0+Y2FjaGVsc3o7Ci0JCWlmIChvZmYgIT0gMCkKLQkJCXNrYl9yZXNlcnZlKHNrYiwgc2MtPmNhY2hlbHN6IC0gb2ZmKTsKLQl9IGVsc2UgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJInNrYnVmZiBhbGxvYyBvZiBzaXplICV1IGZhaWxlZFxuIiwgbGVuKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIHNrYjsKLX0KLQogLyoKICAqIEZvciBEZWNyeXB0IG9yIERlbWljIGVycm9ycywgd2Ugb25seSBtYXJrIHBhY2tldCBzdGF0dXMgaGVyZSBhbmQgYWx3YXlzIHB1c2gKICAqIHVwIHRoZSBmcmFtZSB1cCB0byBsZXQgbWFjODAyMTEgaGFuZGxlIHRoZSBhY3R1YWwgZXJyb3IgY2FzZSwgYmUgaXQgbm8KQEAgLTE0NSw2ICsxMTMsMTAgQEAKIAl1OCByYXRlY29kZTsKIAlfX2xlMTYgZmM7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOworCWludCBsYXN0X3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKQEAgLTIyOSwxNyArMjAxLDYxIEBACiAJCX0KIAl9CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHNjLT5odywgaGRyLT5hZGRyMik7CisJaWYgKHN0YSkgeworCQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKikgc3RhLT5kcnZfcHJpdjsKKwkJaWYgKGRzLT5kc19yeHN0YXQucnNfcnNzaSAhPSBBVEg5S19SU1NJX0JBRCAmJgorCQkgICAhZHMtPmRzX3J4c3RhdC5yc19tb3JlYWdncikKKwkJCUFUSF9SU1NJX0xQRihhbi0+bGFzdF9yc3NpLCBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2kpOworCQlsYXN0X3Jzc2kgPSBhbi0+bGFzdF9yc3NpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChsaWtlbHkobGFzdF9yc3NpICE9IEFUSF9SU1NJX0RVTU1ZX01BUktFUikpCisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IEFUSF9FUF9STkQobGFzdF9yc3NpLAorCQkJCQlBVEhfUlNTSV9FUF9NVUxUSVBMSUVSKTsKKwlpZiAoZHMtPmRzX3J4c3RhdC5yc19yc3NpIDwgMCkKKwkJZHMtPmRzX3J4c3RhdC5yc19yc3NpID0gMDsKKwllbHNlIGlmIChkcy0+ZHNfcnhzdGF0LnJzX3Jzc2kgPiAxMjcpCisJCWRzLT5kc19yeHN0YXQucnNfcnNzaSA9IDEyNzsKKworCS8qIFVwZGF0ZSBCZWFjb24gUlNTSSwgdGhpcyBpcyB1c2VkIGJ5IEFOSS4gKi8KKwlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihmYykpCisJCXNjLT5zY19haC0+c3RhdHMuYXZnYnJzc2kgPSBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CisKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSBhdGhfZXh0ZW5kX3RzZihzYywgZHMtPmRzX3J4c3RhdC5yc190c3RhbXApOwogCXJ4X3N0YXR1cy0+YmFuZCA9IGh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7CiAJcnhfc3RhdHVzLT5mcmVxID0gaHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAJcnhfc3RhdHVzLT5ub2lzZSA9IHNjLT5hbmkubm9pc2VfZmxvb3I7Ci0Jcnhfc3RhdHVzLT5zaWduYWwgPSByeF9zdGF0dXMtPm5vaXNlICsgZHMtPmRzX3J4c3RhdC5yc19yc3NpOworCXJ4X3N0YXR1cy0+c2lnbmFsID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgKyBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gZHMtPmRzX3J4c3RhdC5yc19hbnRlbm5hOwogCi0JLyogYXQgNDUgeW91IHdpbGwgYmUgYWJsZSB0byB1c2UgTUNTIDE1IHJlbGlhYmx5LiBBIG1vcmUgZWxhYm9yYXRlCi0JICogc2NoZW1lIGNhbiBiZSB1c2VkIGhlcmUgYnV0IGl0IHJlcXVpcmVzIHRhYmxlcyBvZiBTTlIvdGhyb3VnaHB1dCBmb3IKLQkgKiBlYWNoIHBvc3NpYmxlIG1vZGUgdXNlZC4gKi8KLQlyeF9zdGF0dXMtPnF1YWwgPSAgZHMtPmRzX3J4c3RhdC5yc19yc3NpICogMTAwIC8gNDU7CisJLyoKKwkgKiBUaGVvcnkgZm9yIHJlcG9ydGluZyBxdWFsaXR5OgorCSAqCisJICogQXQgYSBoYXJkd2FyZSBSU1NJIG9mIDQ1IHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIE1DUyA3ICByZWxpYWJseS4KKwkgKiBBdCBhIGhhcmR3YXJlIFJTU0kgb2YgNDUgeW91IHdpbGwgYmUgYWJsZSB0byB1c2UgTUNTIDE1IHJlbGlhYmx5LgorCSAqIEF0IGEgaGFyZHdhcmUgUlNTSSBvZiAzNSB5b3Ugc2hvdWxkIGJlIGFibGUgdXNlIDU0IE1icHMgcmVsaWFibHkuCisJICoKKwkgKiBNQ1MgNyAgaXMgdGhlIGhpZ2hldHMgTUNTIGluZGV4IHVzYWJsZSBieSBhIDEtc3RyZWFtIGRldmljZS4KKwkgKiBNQ1MgMTUgaXMgdGhlIGhpZ2hlc3QgTUNTIGluZGV4IHVzYWJsZSBieSBhIDItc3RyZWFtIGRldmljZS4KKwkgKgorCSAqIEFsbCBhdGg5ayBkZXZpY2VzIGFyZSBlaXRoZXIgMS1zdHJlYW0gb3IgMi1zdHJlYW0uCisJICoKKwkgKiBIb3cgbWFueSBiYXJzIHlvdSBzZWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBxdWFsIHJlcG9ydGluZy4KKwkgKgorCSAqIEEgbW9yZSBlbGFib3JhdGUgc2NoZW1lIGNhbiBiZSB1c2VkIGhlcmUgYnV0IGl0IHJlcXVpcmVzIHRhYmxlcworCSAqIG9mIFNOUi90aHJvdWdocHV0IGZvciBlYWNoIHBvc3NpYmxlIG1vZGUgdXNlZC4gRm9yIHRoZSBNQ1MgdGFibGUKKwkgKiB5b3UgY2FuIHJlZmVyIHRvIHRoZSB3aXJlbGVzcyB3aWtpOgorCSAqCisJICogaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vZGV2ZWxvcGVycy9Eb2N1bWVudGF0aW9uL2llZWU4MDIxMS84MDIuMTFuCisJICoKKwkgKi8KKwlpZiAoY29uZl9pc19odCgmaHctPmNvbmYpKQorCQlyeF9zdGF0dXMtPnF1YWwgPSAgZHMtPmRzX3J4c3RhdC5yc19yc3NpICogMTAwIC8gNDU7CisJZWxzZQorCQlyeF9zdGF0dXMtPnF1YWwgPSAgZHMtPmRzX3J4c3RhdC5yc19yc3NpICogMTAwIC8gMzU7CiAKIAkvKiByc3NpIGNhbiBiZSBtb3JlIHRoYW4gNDUgdGhvdWdoLCBhbnl0aGluZyBhYm92ZSB0aGF0CiAJICogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXQgMTAwJSAqLwpAQCAtMjg4LDEwICszMDQsMTAgQEAKIAlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4LnJ4YnVmbG9jayk7CiAKIAlzYy0+cnguYnVmc2l6ZSA9IHJvdW5kdXAoSUVFRTgwMjExX01BWF9NUERVX0xFTiwKLQkJCQkgbWluKHNjLT5jYWNoZWxzeiwgKHUxNik2NCkpOworCQkJCSBtaW4oc2MtPmNvbW1vbi5jYWNoZWxzeiwgKHUxNik2NCkpOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJjYWNoZWxzeiAldSByeGJ1ZnNpemUgJXVcbiIsCi0JCXNjLT5jYWNoZWxzeiwgc2MtPnJ4LmJ1ZnNpemUpOworCQlzYy0+Y29tbW9uLmNhY2hlbHN6LCBzYy0+cnguYnVmc2l6ZSk7CiAKIAkvKiBJbml0aWFsaXplIHJ4IGRlc2NyaXB0b3JzICovCiAKQEAgLTMwNCw3ICszMjAsNyBAQAogCX0KIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKLQkJc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXNrYiA9IGF0aF9yeGJ1Zl9hbGxvYygmc2MtPmNvbW1vbiwgc2MtPnJ4LmJ1ZnNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCWVycm9yID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyOwpAQCAtNDA0LDE1ICs0MjAsMTggQEAKIAllbHNlCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9CRUFDT047CiAKLQkvKiBJZiBpbiBIT1NUQVAgbW9kZSwgd2FudCB0byBlbmFibGUgcmVjZXB0aW9uIG9mIFBTUE9MTCBmcmFtZXMgKi8KLQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJaWYgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9QU1BPTEwpCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QU1BPTEw7CiAKLQlpZiAoc2MtPnNlY193aXBoeSkgeworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfQ09NUF9CQVI7CisKKwlpZiAoc2MtPnNlY193aXBoeSB8fCAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX09USEVSX0JTUykpIHsKIAkJLyogVE9ETzogb25seSBuZWVkZWQgaWYgbW9yZSB0aGFuIG9uZSBCU1NJRCBpcyBpbiB1c2UgaW4KIAkJICogc3RhdGlvbi9hZGhvYyBtb2RlICovCi0JCS8qIFRPRE86IGZvciBvbGRlciBjaGlwcywgbWF5IG5lZWQgdG8gYWRkIEFUSDlLX1JYX0ZJTFRFUl9QUk9NCi0JCSAqLworCQkvKiBUaGUgZm9sbG93aW5nIG1heSBhbHNvIGJlIG5lZWRlZCBmb3Igb3RoZXIgb2xkZXIgY2hpcHMgKi8KKwkJaWYgKHNjLT5zY19haC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MTYwKQorCQkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX1BST007CiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9NQ0FTVF9CQ0FTVF9BTEw7CiAJfQogCkBAIC01MDUsMTEgKzUyNCw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBhdGhfcnhfcHNfYmFja190b19zbGVlcChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlzYy0+c2NfZmxhZ3MgJj0gfihTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfCBTQ19PUF9XQUlUX0ZPUl9DQUIpOwotfQotCiBzdGF0aWMgdm9pZCBhdGhfcnhfcHNfYmVhY29uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKQEAgLTUyMSw2ICs1MzUsOCBAQAogCWlmIChtZW1jbXAoc2MtPmN1cmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsgLyogbm90IGZyb20gb3VyIGN1cnJlbnQgQVAgKi8KIAorCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTl9TWU5DKSB7CiAJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQkVBQ09OX1NZTkM7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfUFMsICJSZWNvbmZpZ3VyZSBCZWFjb24gdGltZXJzIGJhc2VkIG9uICIKQEAgLTUyOCwxNCArNTQ0LDYgQEAKIAkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwogCX0KIAotCWlmICghKHNjLT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSkgewotCQkvKiBXZSBhcmUgbm90IGluIFBTIG1vZGUgYW55bW9yZTsgcmVtYWluIGF3YWtlICovCi0JCURQUklOVEYoc2MsIEFUSF9EQkdfUFMsICJOb3QgaW4gUFMgbW9kZSBhbnltb3JlLCByZW1haW4gIgotCQkJImF3YWtlXG4iKTsKLQkJc2MtPnNjX2ZsYWdzICY9IH4oU0NfT1BfV0FJVF9GT1JfQkVBQ09OIHwgU0NfT1BfV0FJVF9GT1JfQ0FCKTsKLQkJcmV0dXJuOwotCX0KLQogCWlmIChhdGhfYmVhY29uX2R0aW1fcGVuZGluZ19jYWIoc2tiKSkgewogCQkvKgogCQkgKiBSZW1haW4gYXdha2Ugd2FpdGluZyBmb3IgYnVmZmVyZWQgYnJvYWRjYXN0L211bHRpY2FzdApAQCAtNTU2LDExICs1NjQsOSBAQAogCQkgKiBmYWlscyB0byBzZW5kIGEgZnJhbWUgaW5kaWNhdGluZyB0aGF0IGFsbCBDQUIgZnJhbWVzIGhhdmUKIAkJICogYmVlbiBkZWxpdmVyZWQuCiAJCSAqLworCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1dBSVRfRk9SX0NBQjsKIAkJRFBSSU5URihzYywgQVRIX0RCR19QUywgIlBTIHdhaXQgZm9yIENBQiBmcmFtZXMgdGltZWQgb3V0XG4iKTsKIAl9Ci0KLQkvKiBObyBtb3JlIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWVzIHRvIGJlIHJlY2VpdmVkIGF0IHRoaXMgcG9pbnQuICovCi0JYXRoX3J4X3BzX2JhY2tfdG9fc2xlZXAoc2MpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcnhfcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC01NzgsMTMgKzU4NCwxMyBAQAogCQkgIGllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSkgJiYKIAkJIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCiAJCSAhaWVlZTgwMjExX2hhc19tb3JlZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfUFMsICJBbGwgUFMgQ0FCIGZyYW1lcyByZWNlaXZlZCwgYmFjayB0byAiCi0JCQkic2xlZXBcbiIpOwogCQkvKgogCQkgKiBObyBtb3JlIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWVzIHRvIGJlIHJlY2VpdmVkIGF0IHRoaXMKIAkJICogcG9pbnQuCiAJCSAqLwotCQlhdGhfcnhfcHNfYmFja190b19zbGVlcChzYyk7CisJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQ0FCOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1BTLCAiQWxsIFBTIENBQiBmcmFtZXMgcmVjZWl2ZWQsIGJhY2sgdG8gIgorCQkJInNsZWVwXG4iKTsKIAl9IGVsc2UgaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSkgJiYKIAkJICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCiAJCSAgICFpZWVlODAyMTFfaGFzX21vcmVmcmFncyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CkBAIC02MTksMTMgKzYyNSwxOCBAQAogCQkJaWYgKGFwaHkgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAkJCW5za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOwotCQkJaWYgKG5za2IpCi0JCQkJX19pZWVlODAyMTFfcngoYXBoeS0+aHcsIG5za2IsIHJ4X3N0YXR1cyk7CisJCQlpZiAobnNrYikgeworCQkJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IobnNrYiksIHJ4X3N0YXR1cywKKwkJCQkJc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwkJCQlpZWVlODAyMTFfcngoYXBoeS0+aHcsIG5za2IpOworCQkJfQogCQl9Ci0JCV9faWVlZTgwMjExX3J4KHNjLT5odywgc2tiLCByeF9zdGF0dXMpOworCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwkJaWVlZTgwMjExX3J4KHNjLT5odywgc2tiKTsKIAl9IGVsc2UgewogCQkvKiBEZWxpdmVyIHVuaWNhc3QgZnJhbWVzIGJhc2VkIG9uIHJlY2VpdmVyIGFkZHJlc3MgKi8KLQkJX19pZWVlODAyMTFfcngoYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpLCBza2IsIHJ4X3N0YXR1cyk7CisJCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgcnhfc3RhdHVzLCBzaXplb2YoKnJ4X3N0YXR1cykpOworCQlpZWVlODAyMTFfcngoYXRoX2dldF92aXJ0X2h3KHNjLCBoZHIpLCBza2IpOwogCX0KIH0KIApAQCAtNzM4LDcgKzc0OSw3IEBACiAKIAkJLyogRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGFuIHNrYiB0byByZXF1ZXVlIG9uY2Ugd2UgYXJlIGRvbmUKIAkJICogcHJvY2Vzc2luZyB0aGUgY3VycmVudCBidWZmZXIncyBza2IgKi8KLQkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2Moc2MsIHNjLT5yeC5idWZzaXplLCBHRlBfQVRPTUlDKTsKKwkJcmVxdWV1ZV9za2IgPSBhdGhfcnhidWZfYWxsb2MoJnNjLT5jb21tb24sIHNjLT5yeC5idWZzaXplLCBHRlBfQVRPTUlDKTsKIAogCQkvKiBJZiB0aGVyZSBpcyBubyBtZW1vcnkgd2UgaWdub3JlIHRoZSBjdXJyZW50IFJYJ2QgZnJhbWUsCiAJCSAqIHRlbGwgaGFyZHdhcmUgaXQgY2FuIGdpdmUgdXMgYSBuZXcgZnJhbWUgdXNpbmcgdGhlIG9sZApAQCAtNzUzLDcgKzc2NCw2IEBACiAJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJc2tiX3B1dChza2IsIGRzLT5kc19yeHN0YXQucnNfZGF0YWxlbik7Ci0JCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9DT05UUk9MKTsKIAogCQkvKiBzZWUgaWYgYW55IHBhZGRpbmcgaXMgZG9uZSBieSB0aGUgaHcgYW5kIHJlbW92ZSBpdCAqLwogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKaW5kZXggNTI2MDUyNC4uZTVjMjllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaApAQCAtMjM0LDcgKzIzNCwxNSBAQAogI2RlZmluZSBBUl9JTVJfUzUgICAgICAgICAgICAgICAgICAgMHgwMGI4CiAjZGVmaW5lIEFSX0lNUl9TNV9USU1fVElNRVIgICAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIEFSX0lNUl9TNV9EVElNX1RJTUVSICAgICAgICAweDAwMDAwMDIwCi0KKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RSSUcgICAgIDB4MDAwMEZGODAKKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RSSUdfUyAgIDAKKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RIUkVTSCAgIDB4RkY4MDAwMDAKKyNkZWZpbmUgQVJfSVNSX1M1X0dFTlRJTUVSX1RIUkVTSF9TIDE2CisjZGVmaW5lIEFSX0lTUl9TNV9TICAgICAgICAgICAgICAgICAweDAwZDgKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RSSUcgICAgIDB4MDAwMEZGODAKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RSSUdfUyAgIDAKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RIUkVTSCAgIDB4RkY4MDAwMDAKKyNkZWZpbmUgQVJfSU1SX1M1X0dFTlRJTUVSX1RIUkVTSF9TIDE2CiAKICNkZWZpbmUgQVJfSU1SICAgICAgICAgICAgICAgMHgwMGEwCiAjZGVmaW5lIEFSX0lNUl9SWE9LICAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTU3NCw2ICs1ODIsNyBAQAogCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TSUZTICAgICAgICAgMHgxMDMwCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TSUZTX00gICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBBUl9EX0dCTF9JRlNfU0lGU19BU1lOQ19GSUZPX0RVUiAweDAwMDAwM0FCCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TSUZTX1JFU1YwICAgMHhGRkZGRkZGRgogCiAjZGVmaW5lIEFSX0RfVFhCTEtfQkFTRSAgICAgICAgICAgIDB4MTAzOApAQCAtNTg5LDEwICs1OTgsMTIgQEAKICNkZWZpbmUgQVJfRF9HQkxfSUZTX1NMT1QgICAgICAgICAweDEwNzAKICNkZWZpbmUgQVJfRF9HQkxfSUZTX1NMT1RfTSAgICAgICAweDAwMDBGRkZGCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19TTE9UX1JFU1YwICAgMHhGRkZGMDAwMAorI2RlZmluZSBBUl9EX0dCTF9JRlNfU0xPVF9BU1lOQ19GSUZPX0RVUiAgIDB4MDAwMDA0MjAKIAogI2RlZmluZSBBUl9EX0dCTF9JRlNfRUlGUyAgICAgICAgIDB4MTBiMAogI2RlZmluZSBBUl9EX0dCTF9JRlNfRUlGU19NICAgICAgIDB4MDAwMEZGRkYKICNkZWZpbmUgQVJfRF9HQkxfSUZTX0VJRlNfUkVTVjAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFSX0RfR0JMX0lGU19FSUZTX0FTWU5DX0ZJRk9fRFVSICAgMHgwMDAwQTVFQgogCiAjZGVmaW5lIEFSX0RfR0JMX0lGU19NSVNDICAgICAgICAweDEwZjAKICNkZWZpbmUgQVJfRF9HQkxfSUZTX01JU0NfTEZTUl9TTElDRV9TRUwgICAgICAgIDB4MDAwMDAwMDcKQEAgLTczOCw2ICs3NDksMTMgQEAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzEwICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSAgICAgICAgICAgICAgMQogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkyODcgICAgICAgICAgICAgICAgICAweDE4MAorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzExICAgICAgICAgICAgICAxCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4N18xMiAgICAgICAgICAgICAgMgorI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTI3MQkJCTB4MTQwCisjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI3MV8xMAkJMAorI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyNzFfMTEJCTEKIAogI2RlZmluZSBBUl9TUkVWXzU0MTYoX2FoKSBcCiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgfHwgXApAQCAtNzk0LDYgKzgxMiwzNiBAQAogCSAoQVJfU1JFVl85Mjg1KGFoKSAmJiAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IFwKIAkJCSAgICAgICBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKSkKIAorI2RlZmluZSBBUl9TUkVWXzkyODcoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg3KSkKKyNkZWZpbmUgQVJfU1JFVl85Mjg3XzEwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4NykpCisjZGVmaW5lIEFSX1NSRVZfOTI4N18xMChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODcpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTApKQorI2RlZmluZSBBUl9TUkVWXzkyODdfMTEoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg3KSAmJiBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzExKSkKKyNkZWZpbmUgQVJfU1JFVl85Mjg3XzExX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg3KSB8fCBcCisJICgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4NykgJiYgXAorCSAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODdfMTEpKSkKKyNkZWZpbmUgQVJfU1JFVl85Mjg3XzEyKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTI4NykgJiYgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4N18xMikpCisjZGVmaW5lIEFSX1NSRVZfOTI4N18xMl9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPiBBUl9TUkVWX1ZFUlNJT05fOTI4NykgfHwgXAorCSAoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODcpICYmIFwKKwkgICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85Mjg3XzEyKSkpCisjZGVmaW5lIEFSX1NSRVZfOTI3MShfYWgpIFwKKyAgICAoKChfYWgpKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjcxKQorI2RlZmluZSBBUl9TUkVWXzkyNzFfMTAoX2FoKSBcCisgICAgKEFSX1NSRVZfOTI3MShfYWgpICYmIFwKKyAgICAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyNzFfMTApKQorI2RlZmluZSBBUl9TUkVWXzkyNzFfMTEoX2FoKSBcCisgICAgKEFSX1NSRVZfOTI3MShfYWgpICYmIFwKKyAgICAgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyNzFfMTEpKQorCiAjZGVmaW5lIEFSX1JBRElPX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgICAgMHhmMAogI2RlZmluZSBBUl9SQUQ1MTMzX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgIDB4YzAKICNkZWZpbmUgQVJfUkFEMjEzM19TUkVWX01BSk9SICAgICAgICAgICAgICAgICAweGQwCkBAIC04MDksNiArODU3LDkgQEAKICNkZWZpbmUgQVJfQUhCX1BBR0VfU0laRV8xSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEFSX0FIQl9QQUdFX1NJWkVfMksgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAogI2RlZmluZSBBUl9BSEJfUEFHRV9TSVpFXzRLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgQVJfQUhCX0NVU1RPTV9CVVJTVF9FTiAgICAgICAgICAgICAgICAweDAwMDAwMEMwCisjZGVmaW5lIEFSX0FIQl9DVVNUT01fQlVSU1RfRU5fUyAgICAgICAgICAgICAgNgorI2RlZmluZSBBUl9BSEJfQ1VTVE9NX0JVUlNUX0FTWU5DX0ZJRk9fVkFMICAgIDMKIAogI2RlZmluZSBBUl9JTlRSX1JUQ19JUlEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVJfSU5UUl9NQUNfSVJRICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCkBAIC04ODUsNiArOTM2LDcgQEAKICNkZWZpbmUgQVJfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDEwCiAjZGVmaW5lIEFSOTI4NV9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVI5Mjg3X05VTV9HUElPICAgICAgICAgICAgICAgICAgICAgICAgICAxMQogCiAjZGVmaW5lIEFSX0dQSU9fSU5fT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDQ4CiAjZGVmaW5lIEFSX0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGQzAwMApAQCAtODkzLDYgKzk0NSw4IEBACiAjZGVmaW5lIEFSOTI4WF9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTAKICNkZWZpbmUgQVI5Mjg1X0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwRkZGMDAwCiAjZGVmaW5lIEFSOTI4NV9HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVI5Mjg3X0dQSU9fSU5fVkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwM0ZGODAwCisjZGVmaW5lIEFSOTI4N19HUElPX0lOX1ZBTF9TICAgICAgICAgICAgICAgICAgICAgMTEKIAogI2RlZmluZSBBUl9HUElPX09FX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0YwogI2RlZmluZSBBUl9HUElPX09FX09VVF9EUlYgICAgICAgICAgICAgICAgICAgICAgIDB4MwpAQCAtOTE2LDYgKzk3MCw4IEBACiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0RFRl9TICAgICAgNwogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkIgICAgICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfQUNUSVZFX0JCX1MgICAgICAxMgorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9CQiAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfQkJfUyAgICAxCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0JCICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQl9TICAgICAgIDE1CiAjZGVmaW5lIEFSX0dQSU9fUlRDX1JFU0VUX09WRVJSSURFX0VOQUJMRSAgICAgICAgMHgwMDAxMDAwMApAQCAtOTI0LDYgKzk4MCw4IEBACiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMSAgICAgICAgICAgICAgICAgICAgICAgMHg0MDU4CiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9BQ1RJVkUgICAgICAgICAgICAgMHgwMDBmMDAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFX1MgICAgICAgICAgIDE2CisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMV9CVF9QUklPUklUWSAgICAgICAgICAgMHgwMDAwMGYwMAorI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfUFJJT1JJVFlfUyAgICAgICAgIDgKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDIgICAgICAgICAgICAgICAgICAgICAgIDB4NDA1YwogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDJfQ0xLMjUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKQEAgLTk0OSw2ICsxMDA3LDggQEAKIAogI2RlZmluZSBBUl9PQlMgICAgICAgICAgICAgICAgICAweDQwODAKIAorI2RlZmluZSBBUl9HUElPX1BEUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA4OAorCiAjZGVmaW5lIEFSX1BDSUVfTVNJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDk0CiAjZGVmaW5lIEFSX1BDSUVfTVNJX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogCkBAIC0xMTE1LDEyICsxMTc1LDMyIEBACiAjZGVmaW5lIEFSOTI4NV9BTl9SRjJHNF9EQjJfNCAgICAweDAwMDAzODAwCiAjZGVmaW5lIEFSOTI4NV9BTl9SRjJHNF9EQjJfNF9TICAgIDExCiAKKy8qIEFSOTI3MSA6IDB4NzgyOCwgMHg3ODJjIGRpZmZlcmVudCBzZXR0aW5nIGZyb20gQVI5Mjg1ICovCisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19PQl9jY2sJCTB4MDAxQzAwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX09CX2Nja19TCTE4CisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19PQl9wc2sJCTB4MDAwMzgwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX09CX3Bza19TCTE1CisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19PQl9xYW0JCTB4MDAwMDcwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX09CX3FhbV9TCTEyCisKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX0RCXzEJCTB4MDBFMDAwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkczX0RCXzFfUwkJMjEKKworI2RlZmluZSBBUjkyNzFfQU5fUkYyRzNfQ0NPTVAJCTB4RkZGCisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHM19DQ09NUF9TCQkwCisKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkc0X0RCXzIJCTB4RTAwMDAwMDAKKyNkZWZpbmUgQVI5MjcxX0FOX1JGMkc0X0RCXzJfUwkJMjkKKwogI2RlZmluZSBBUjkyODVfQU5fUkYyRzYgICAgICAgICAgICAgICAgIDB4NzgzNAogI2RlZmluZSBBUjkyODVfQU5fUkYyRzZfQ0NPTVAgICAgICAgICAgIDB4MDAwMDc4MDAKICNkZWZpbmUgQVI5Mjg1X0FOX1JGMkc2X0NDT01QX1MgICAgICAgICAxMQogI2RlZmluZSBBUjkyODVfQU5fUkYyRzZfT0ZGUyAgICAgICAgICAgIDB4MDNmMDAwMDAKICNkZWZpbmUgQVI5Mjg1X0FOX1JGMkc2X09GRlNfUyAgICAgICAgICAyMAogCisjZGVmaW5lIEFSOTI3MV9BTl9SRjJHNl9PRkZTICAgICAgICAgICAgMHgwN2YwMDAwMAorI2RlZmluZSBBUjkyNzFfQU5fUkYyRzZfT0ZGU19TICAgICAgICAgICAgMjAKKwogI2RlZmluZSBBUjkyODVfQU5fUkYyRzcgICAgICAgICAgICAgICAgIDB4NzgzOAogI2RlZmluZSBBUjkyODVfQU5fUkYyRzdfUFdEREIgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgQVI5Mjg1X0FOX1JGMkc3X1BXRERCX1MgICAgICAgICAxCkBAIC0xMTU0LDYgKzEyMzQsMzggQEAKICNkZWZpbmUgQVI5Mjg1X0FOX1RPUDQgICAgICAgICAgIDB4Nzg3MAogI2RlZmluZSBBUjkyODVfQU5fVE9QNF9ERUZBVUxUICAgMHgxMDE0MmMwMAogCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19DSDAgICAgICAgICAgICAgMHg3ODA4CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19DSDEgICAgICAgICAgICAgMHg3ODVjCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19EQjEgICAgICAgICAgICAgMHhFMDAwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfREIxX1MgICAgICAgICAgIDI5CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19EQjIgICAgICAgICAgICAgMHgxQzAwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfREIyX1MgICAgICAgICAgIDI2CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9DQ0sgICAgICAgICAgMHgwMzgwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfQ0NLX1MgICAgICAgIDIzCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9QU0sgICAgICAgICAgMHgwMDcwMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfUFNLX1MgICAgICAgIDIwCisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9RQU0gICAgICAgICAgMHgwMDBFMDAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfUUFNX1MgICAgICAgIDE3CisjZGVmaW5lIEFSOTI4N19BTl9SRjJHM19PQl9QQUxfT0ZGICAgICAgMHgwMDAxQzAwMAorI2RlZmluZSBBUjkyODdfQU5fUkYyRzNfT0JfUEFMX09GRl9TICAgIDE0CisKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwICAgICAgICAgICAgICAgICAweDc4OTgKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwX1RYUENNT0RFICAgICAgICAweDAwMDBDMDAwCisjZGVmaW5lIEFSOTI4N19BTl9UWFBDMF9UWFBDTU9ERV9TICAgICAgMTQKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwX1RYUENNT0RFX05PUk1BTCAgICAwCisjZGVmaW5lIEFSOTI4N19BTl9UWFBDMF9UWFBDTU9ERV9URVNUICAgICAgMQorI2RlZmluZSBBUjkyODdfQU5fVFhQQzBfVFhQQ01PREVfVEVNUFNFTlNFIDIKKyNkZWZpbmUgQVI5Mjg3X0FOX1RYUEMwX1RYUENNT0RFX0FUQlRFU1QgICAzCisKKyNkZWZpbmUgQVI5Mjg3X0FOX1RPUDIgICAgICAgICAgICAgICAgICAweDc4YjQKKyNkZWZpbmUgQVI5Mjg3X0FOX1RPUDJfWFBBQklBU19MVkwgICAgICAweEMwMDAwMDAwCisjZGVmaW5lIEFSOTI4N19BTl9UT1AyX1hQQUJJQVNfTFZMX1MgICAgMzAKKworLyogQVI5MjcxIHNwZWNpZmljIHN0dWZmICovCisjZGVmaW5lIEFSOTI3MV9SRVNFVF9QT1dFUl9ET1dOX0NPTlRST0wJCTB4NTAwNDQKKyNkZWZpbmUgQVI5MjcxX1JBRElPX1JGX1JTVAkJCTB4MjAKKyNkZWZpbmUgQVI5MjcxX0dBVEVfTUFDX0NUTAkJCTB4NDAwMAorCiAjZGVmaW5lIEFSX1NUQV9JRDAgICAgICAgICAgICAgICAgIDB4ODAwMAogI2RlZmluZSBBUl9TVEFfSUQxICAgICAgICAgICAgICAgICAweDgwMDQKICNkZWZpbmUgQVJfU1RBX0lEMV9TQURIX01BU0sgICAgICAgMHgwMDAwRkZGRgpAQCAtMTE4OCw2ICsxMzAwLDcgQEAKICNkZWZpbmUgQVJfVElNRV9PVVRfQUNLX1MgICAgMAogI2RlZmluZSBBUl9USU1FX09VVF9DVFMgICAgICAweDNGRkYwMDAwCiAjZGVmaW5lIEFSX1RJTUVfT1VUX0NUU19TICAgIDE2CisjZGVmaW5lIEFSX1RJTUVfT1VUX0FDS19DVFNfQVNZTkNfRklGT19EVVIgICAgMHgxNjAwMUQ1NgogCiAjZGVmaW5lIEFSX1JTU0lfVEhSICAgICAgICAgIDB4ODAxOAogI2RlZmluZSBBUl9SU1NJX1RIUl9NQVNLICAgICAweDAwMDAwMEZGCkBAIC0xMjAzLDYgKzEzMTYsNyBAQAogI2RlZmluZSBBUl9VU0VDX1RYX0xBVF9TICAgICAxNAogI2RlZmluZSBBUl9VU0VDX1JYX0xBVCAgICAgICAweDFGODAwMDAwCiAjZGVmaW5lIEFSX1VTRUNfUlhfTEFUX1MgICAgIDIzCisjZGVmaW5lIEFSX1VTRUNfQVNZTkNfRklGT19EVVIgICAgMHgxMmUwMDA3NAogCiAjZGVmaW5lIEFSX1JFU0VUX1RTRiAgICAgICAgMHg4MDIwCiAjZGVmaW5lIEFSX1JFU0VUX1RTRl9PTkNFICAgMHgwMTAwMDAwMApAQCAtMTIxMSw3ICsxMzI1LDYgQEAKICNkZWZpbmUgQVJfQ0ZQX1ZBTCAgICAgICAgICAweDAwMDBGRkZGCiAKICNkZWZpbmUgQVJfUlhfRklMVEVSICAgICAgICAweDgwM0MKLSNkZWZpbmUgQVJfUlhfQ09NUFJfQkFSICAgICAweDAwMDAwNDAwCiAKICNkZWZpbmUgQVJfTUNBU1RfRklMMCAgICAgICAweDgwNDAKICNkZWZpbmUgQVJfTUNBU1RfRklMMSAgICAgICAweDgwNDQKQEAgLTEzMjgsNiArMTQ0MSw3IEBACiAjZGVmaW5lIEFSX1FVSUVUMV9ORVhUX1FVSUVUX00gICAgICAgICAweDAwMDBmZmZmCiAjZGVmaW5lIEFSX1FVSUVUMV9RVUlFVF9FTkFCTEUgICAgICAgICAweDAwMDEwMDAwCiAjZGVmaW5lIEFSX1FVSUVUMV9RVUlFVF9BQ0tfQ1RTX0VOQUJMRSAweDAwMDIwMDAwCisjZGVmaW5lIEFSX1FVSUVUMV9RVUlFVF9BQ0tfQ1RTX0VOQUJMRV9TIDE3CiAjZGVmaW5lIEFSX1FVSUVUMiAgICAgICAgICAweDgxMDAKICNkZWZpbmUgQVJfUVVJRVQyX1FVSUVUX1BFUklPRF9TICAgICAgIDAKICNkZWZpbmUgQVJfUVVJRVQyX1FVSUVUX1BFUklPRF9NICAgICAgIDB4MDAwMGZmZmYKQEAgLTEzNzMsNiArMTQ4Nyw4IEBACiAjZGVmaW5lIEFSX1BDVV9DTEVBUl9WTUYgICAgICAgICAgIDB4MDEwMDAwMDAKICNkZWZpbmUgQVJfUENVX0NMRUFSX0JBX1ZBTElEICAgICAgMHgwNDAwMDAwMAogCisjZGVmaW5lIEFSX1BDVV9CVF9BTlRfUFJFVkVOVF9SWCAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQVJfUENVX0JUX0FOVF9QUkVWRU5UX1JYX1MgMjAKIAogI2RlZmluZSBBUl9GSUxUX09GRE0gICAgICAgICAgIDB4ODEyNAogI2RlZmluZSBBUl9GSUxUX09GRE1fQ09VTlQgICAgIDB4MDBGRkZGRkYKQEAgLTE0MDAsNiArMTUxNiw0NiBAQAogI2RlZmluZSBBUl9QSFlfRVJSXzNfQ09VTlQgICAgIDB4MDBGRkZGRkYKICNkZWZpbmUgQVJfUEhZX0VSUl9NQVNLXzMgICAgICAweDgxNmMKIAorI2RlZmluZSBBUl9CVF9DT0VYX01PREUgICAgICAgICAgICAweDgxNzAKKyNkZWZpbmUgQVJfQlRfVElNRV9FWFRFTkQgICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9CVF9USU1FX0VYVEVORF9TICAgICAgICAwCisjZGVmaW5lIEFSX0JUX1RYU1RBVEVfRVhURU5EICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVJfQlRfVFhTVEFURV9FWFRFTkRfUyAgICAgOAorI2RlZmluZSBBUl9CVF9UWF9GUkFNRV9FWFRFTkQgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIEFSX0JUX1RYX0ZSQU1FX0VYVEVORF9TICAgIDkKKyNkZWZpbmUgQVJfQlRfTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBBUl9CVF9NT0RFX1MgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBUl9CVF9RVUlFVCAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX0JUX1FVSUVUX1MgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFSX0JUX1FDVV9USFJFU0ggICAgICAgICAgIDB4MDAwMWUwMDAKKyNkZWZpbmUgQVJfQlRfUUNVX1RIUkVTSF9TICAgICAgICAgMTMKKyNkZWZpbmUgQVJfQlRfUlhfQ0xFQVJfUE9MQVJJVFkgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBUl9CVF9SWF9DTEVBUl9QT0xBUklUWV9TICAxNworI2RlZmluZSBBUl9CVF9QUklPUklUWV9USU1FICAgICAgICAweDAwZmMwMDAwCisjZGVmaW5lIEFSX0JUX1BSSU9SSVRZX1RJTUVfUyAgICAgIDE4CisjZGVmaW5lIEFSX0JUX0ZJUlNUX1NMT1RfVElNRSAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfQlRfRklSU1RfU0xPVF9USU1FX1MgICAgMjQKKworI2RlZmluZSBBUl9CVF9DT0VYX1dFSUdIVCAgICAgICAgICAweDgxNzQKKyNkZWZpbmUgQVJfQlRfQ09FWF9XR0hUCQkgICAweGZmNTUKKyNkZWZpbmUgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVAkgICAweGZmY2MKKyNkZWZpbmUgQVJfU1RPTVBfTE9XX1dMQU5fV0dIVAkgICAweGFhYTgKKyNkZWZpbmUgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQJICAgMHhhYTAwCisjZGVmaW5lIEFSX0JUQ09FWF9CVF9XR0hUICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVJfQlRDT0VYX0JUX1dHSFRfUyAgICAgICAgMAorI2RlZmluZSBBUl9CVENPRVhfV0xfV0dIVCAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIEFSX0JUQ09FWF9XTF9XR0hUX1MgICAgICAgIDE2CisKKyNkZWZpbmUgQVJfQlRfQ09FWF9NT0RFMiAgICAgICAgICAgMHg4MTdjCisjZGVmaW5lIEFSX0JUX0JDTl9NSVNTX1RIUkVTSCAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfQlRfQkNOX01JU1NfVEhSRVNIX1MgICAgMAorI2RlZmluZSBBUl9CVF9CQ05fTUlTU19DTlQgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX0JUX0JDTl9NSVNTX0NOVF9TICAgICAgIDgKKyNkZWZpbmUgQVJfQlRfSE9MRF9SWF9DTEVBUiAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9CVF9IT0xEX1JYX0NMRUFSX1MgICAgICAxNgorI2RlZmluZSBBUl9CVF9ESVNBQkxFX0JUX0FOVCAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEFSX0JUX0RJU0FCTEVfQlRfQU5UX1MgICAgIDIwCisKICNkZWZpbmUgQVJfVFhTSUZTICAgICAgICAgICAgICAweDgxZDAKICNkZWZpbmUgQVJfVFhTSUZTX1RJTUUgICAgICAgICAweDAwMDAwMEZGCiAjZGVmaW5lIEFSX1RYU0lGU19UWF9MQVRFTkNZICAgMHgwMDAwMEYwMApAQCAtMTQxNiw3ICsxNTcyLDEwIEBACiAjZGVmaW5lIEFSX1RYT1BfOF8xMSAgIDB4ODFmOAogI2RlZmluZSBBUl9UWE9QXzEyXzE1ICAweDgxZmMKIAotCisjZGVmaW5lIEFSX05FWFRfTkRQMl9USU1FUiAgICAgICAgICAgICAgICAgIDB4ODE4MAorI2RlZmluZSBBUl9GSVJTVF9ORFBfVElNRVIgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIEFSX05EUDJfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgIDB4ODFhMAorI2RlZmluZSBBUl9ORFAyX1RJTUVSX01PREUgICAgICAgICAgICAgICAgICAweDgxYzAKICNkZWZpbmUgQVJfTkVYVF9UQlRUX1RJTUVSICAgICAgICAgICAgICAgICAgMHg4MjAwCiAjZGVmaW5lIEFSX05FWFRfRE1BX0JFQUNPTl9BTEVSVCAgICAgICAgICAgIDB4ODIwNAogI2RlZmluZSBBUl9ORVhUX1NXQkEgICAgICAgICAgICAgICAgICAgICAgICAweDgyMDgKQEAgLTE0NjgsNiArMTYyNywxMCBAQAogI2RlZmluZSBBUl9TTFBfTUlCX0NMRUFSICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9TTFBfTUlCX1BFTkRJTkcgMHgwMDAwMDAwMgogCisjZGVmaW5lIEFSX01BQ19QQ1VfTE9HSUNfQU5BTFlaRVIgICAgICAgICAgICAgICAweDgyNjQKKyNkZWZpbmUgQVJfTUFDX1BDVV9MT0dJQ19BTkFMWVpFUl9ESVNCVUcyMDc2OCAgIDB4MjAwMDAwMDAKKworCiAjZGVmaW5lIEFSXzIwNDBfTU9ERSAgICAgICAgICAgICAgICAweDgzMTgKICNkZWZpbmUgQVJfMjA0MF9KT0lORURfUlhfQ0xFQVIgMHgwMDAwMDAwMQogCkBAIC0xNDg1LDYgKzE2NDgsMzkgQEAKICNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfTUdNVF9DUllQVE9fRU5BQkxFICAgICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX05PX0NSWVBUT19GT1JfTk9OX0RBVEFfUEtUICAgMHgwMDAwMDAwNAogCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzOAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9BREhPQ19NQ0FTVF9LRVlJRF9FTkFCTEUgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfQ0ZQX0lHTk9SRSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX01HTVRfUU9TICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX1FPU19TICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfRU5BQkxFX0xPQURfTkFWX0JFQUNPTl9EVVJBVElPTiAweDAwMDEwMDAwCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX0VOQUJMRV9BR0dXRVAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9IV1dBUjEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfSFdXQVIyICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEFSX1BDVV9NSVNDX01PREUyX1JFU0VSVkVEMiAgICAgICAgICAgICAgICAgICAgMHhGRkZFMDAwMAorCisjZGVmaW5lIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczICAgICAgICAgICAgICAgICAgICAgMHg4MzU4CisjZGVmaW5lIEFSX01BQ19QQ1VfQVNZTkNfRklGT19SRUczX0RBVEFQQVRIX1NFTCAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBUl9NQUNfUENVX0FTWU5DX0ZJRk9fUkVHM19TT0ZUX1JFU0VUICAgICAgICAgIDB4ODAwMDAwMDAKKworCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0swICAgICAgIDB4ODA1YworI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMF9GQyAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0swX1FPUyAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgQVJfQUVTX01VVEVfTUFTSzBfUU9TX1MgMTYKKworI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMSAgICAgICAgICAgICAgMHg4MDYwCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX1NFUSAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX1NFUV9TICAgICAgICAwCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVRfUyAgICAxNgorCisjZGVmaW5lIEFSX1JBVEVfRFVSQVRJT05fMCAgICAgIDB4ODcwMAorI2RlZmluZSBBUl9SQVRFX0RVUkFUSU9OXzMxICAgICAweDg3Q0MKKyNkZWZpbmUgQVJfUkFURV9EVVJBVElPTl8zMiAgICAgMHg4NzgwCisjZGVmaW5lIEFSX1JBVEVfRFVSQVRJT04oX24pICAgIChBUl9SQVRFX0RVUkFUSU9OXzAgKyAoKF9uKTw8MikpCisKKwogI2RlZmluZSBBUl9LRVlUQUJMRV8wICAgICAgICAgICAweDg4MDAKICNkZWZpbmUgQVJfS0VZVEFCTEUoX24pICAgICAgICAgKEFSX0tFWVRBQkxFXzAgKyAoKF9uKSozMikpCiAjZGVmaW5lIEFSX0tFWV9DQUNIRV9TSVpFICAgICAgIDEyOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay92aXJ0dWFsLmMKaW5kZXggMWZmNDI5Yi4uMTliODhmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvdmlydHVhbC5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJCSAqIERyb3AgZnJvbSB0YXNrbGV0IHRvIHdvcmsgdG8gYWxsb3cgbXV0ZXggZm9yIGNoYW5uZWwKIAkJCSAqIGNoYW5nZS4KIAkJCSAqLwotCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGFwaHktPnNjLT5odywKIAkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CiAJCX0KIAl9CkBAIC0zNjcsNyArMzY3LDcgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKIAlpZiAoIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhzYykpCi0JCXF1ZXVlX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+Y2hhbl93b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoc2MtPmh3LCAmc2MtPmNoYW5fd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDlrX3BhdXNlX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKQEAgLTUyMSw3ICs1MjEsNyBAQAogCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKIAkJCWF0aF9yYWRpb19kaXNhYmxlKHNjKTsKIAkJCWF0aF9yYWRpb19lbmFibGUoc2MpOwotCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKGFwaHktPnNjLT5odywKIAkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CiAJCQlyZXR1cm4gLUVCVVNZOyAvKiBwcmV2aW91cyBzZWxlY3Qgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KIAkJfQpAQCAtNTQxLDcgKzU0MSw3IEBACiAKIAlpZiAobm93KSB7CiAJCS8qIFJlYWR5IHRvIHJlcXVlc3QgY2hhbm5lbCBjaGFuZ2UgaW1tZWRpYXRlbHkgKi8KLQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwgJmFwaHktPnNjLT5jaGFuX3dvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yayhhcGh5LT5zYy0+aHcsICZhcGh5LT5zYy0+Y2hhbl93b3JrKTsKIAl9CiAKIAkvKgpAQCAtNjQ4LDggKzY0OCw5IEBACiAJCSAgICAgICAiY2hhbmdlXG4iKTsKIAl9CiAKLQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+d2lwaHlfd29yaywKLQkJCSAgIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywKKwkJCQkgICAgICZzYy0+d2lwaHlfd29yaywKKwkJCQkgICAgIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKIH0KIAogdm9pZCBhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1bnNpZ25lZCBpbnQgbXNlY19pbnQpCkBAIC02NTcsNiArNjU4LDIzIEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+d2lwaHlfd29yayk7CiAJc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQgPSBtc2Vjc190b19qaWZmaWVzKG1zZWNfaW50KTsKIAlpZiAoc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT53aXBoeV93b3JrLAotCQkJCSAgIHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsICZzYy0+d2lwaHlfd29yaywKKwkJCQkJICAgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworYm9vbCBhdGg5a19hbGxfd2lwaHlzX2lkbGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJdW5zaWduZWQgaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoIWFwaHkpCisJCQljb250aW51ZTsKKwkJaWYgKGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCA0Y2NmNDhlLi40MjU1MWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTU5LDYgKzU5LDcgQEAKIAkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAogCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CiBzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IGF0aF90eHEgKnR4cSwKIAkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAogCQkJCWludCB0eG9rLCBpbnQgc2VuZGJhcik7CiBzdGF0aWMgdm9pZCBhdGhfdHhfdHhxYWRkYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLApAQCAtNzMsMTggKzc0LDYgQEAKIC8qIEFnZ3JlZ2F0aW9uIGxvZ2ljICovCiAvKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IGF0aF9hZ2dyX3F1ZXJ5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubykKLXsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKLQotCWlmICh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSB8fAotCSAgICB0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9QUk9HUkVTUykKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgYXRoX3R4X3F1ZXVlX3RpZChzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWMgPSB0aWQtPmFjOwpAQCAtMjI0LDcgKzIxMyw3IEBACiAJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOwogCiAJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKLQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsIDAsIDApOwogCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOwogCX0KIApAQCAtMjMyLDEzICsyMjEsMTUgQEAKIAl0aWQtPmJhd190YWlsID0gdGlkLT5iYXdfaGVhZDsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQorc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgICAgc3RydWN0IGF0aF9idWYgKmJmKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKIAliZi0+YmZfcmV0cmllcysrOworCVRYX1NUQVRfSU5DKHR4cS0+YXhxX3FudW0sIGFfcmV0cmllcyk7CiAKIAlza2IgPSBiZi0+YmZfbXBkdTsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CkBAIC0yNTAsNyArMjQxLDEwIEBACiAJc3RydWN0IGF0aF9idWYgKnRiZjsKIAogCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOworCWlmIChXQVJOX09OKGxpc3RfZW1wdHkoJnNjLT50eC50eGJ1ZikpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCWxpc3RfZGVsKCZ0YmYtPmxpc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKQEAgLTMzNyw3ICszMzEsNyBAQAogCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKIAkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKIAkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKLQkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOworCQkJCQlhdGhfdHhfc2V0X3JldHJ5KHNjLCB0eHEsIGJmKTsKIAkJCQkJdHhwZW5kaW5nID0gMTsKIAkJCQl9IGVsc2UgewogCQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwpAQCAtMzg0LDEzICszNzgsMzEgQEAKIAkJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCwgdHhvaywgZmFsc2UpOwogCQkJfQogCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOworCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOwogCQl9IGVsc2UgewogCQkJLyogcmV0cnkgdGhlIHVuLWFja2VkIG9uZXMgKi8KIAkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmIGJmX2xhc3QtPmJmX3N0YWxlKSB7CiAJCQkJc3RydWN0IGF0aF9idWYgKnRiZjsKIAogCQkJCXRiZiA9IGF0aF9jbG9uZV90eGJ1ZihzYywgYmZfbGFzdCk7CisJCQkJLyoKKwkJCQkgKiBVcGRhdGUgdHggYmF3IGFuZCBjb21wbGV0ZSB0aGUgZnJhbWUgd2l0aAorCQkJCSAqIGZhaWxlZCBzdGF0dXMgaWYgd2UgcnVuIG91dCBvZiB0eCBidWYKKwkJCQkgKi8KKwkJCQlpZiAoIXRiZikgeworCQkJCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLAorCQkJCQkJCSAgYmYtPmJmX3NlcW5vKTsKKwkJCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJCWF0aF90eF9yY19zdGF0dXMoYmYsIGRzLCBuYmFkLAorCQkJCQkJCSAwLCBmYWxzZSk7CisJCQkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCB0eHEsCisJCQkJCQkJICAgICZiZl9oZWFkLCAwLCAwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCiAJCQkJYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc2MtPnNjX2FoLCB0YmYtPmJmX2Rlc2MpOwogCQkJCWxpc3RfYWRkX3RhaWwoJnRiZi0+bGlzdCwgJmJmX2hlYWQpOwogCQkJfSBlbHNlIHsKQEAgLTQxNCw3ICs0MjYsNiBAQAogCWlmICh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSB7CiAJCWlmICh0aWQtPmJhd19oZWFkID09IHRpZC0+YmF3X3RhaWwpIHsKIAkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwogCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOwogCiAJCQkvKiBzZW5kIGJ1ZmZlcmVkIGZyYW1lcyBhcyBzaW5nbGVzICovCkBAIC00NDcsNyArNDU4LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzOwogCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXY7CiAJdTMyIG1heF80bXNfZnJhbWVsZW4sIGZybWxlbjsKLQl1MTYgYWdncl9saW1pdCwgbGVnYWN5ID0gMCwgbWF4YW1wZHU7CisJdTE2IGFnZ3JfbGltaXQsIGxlZ2FjeSA9IDA7CiAJaW50IGk7CiAKIAlza2IgPSBiZi0+YmZfbXBkdTsKQEAgLTQ4MiwxNiArNDkzLDIwIEBACiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkUgfHwgbGVnYWN5KQogCQlyZXR1cm4gMDsKIAotCWFnZ3JfbGltaXQgPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgKHUzMilBVEhfQU1QRFVfTElNSVRfREVGQVVMVCk7CisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEKQorCQlhZ2dyX2xpbWl0ID0gbWluKChtYXhfNG1zX2ZyYW1lbGVuICogMykgLyA4LAorCQkJCSAodTMyKUFUSF9BTVBEVV9MSU1JVF9NQVgpOworCWVsc2UKKwkJYWdncl9saW1pdCA9IG1pbihtYXhfNG1zX2ZyYW1lbGVuLAorCQkJCSAodTMyKUFUSF9BTVBEVV9MSU1JVF9NQVgpOwogCiAJLyoKIAkgKiBoL3cgY2FuIGFjY2VwdCBhZ2dyZWdhdGVzIHVwdG8gMTYgYml0IGxlbmd0aHMgKDY1NTM1KS4KIAkgKiBUaGUgSUUsIGhvd2V2ZXIgY2FuIGhvbGQgdXB0byA2NTUzNiwgd2hpY2ggc2hvd3MgdXAgaGVyZQogCSAqIGFzIHplcm8uIElnbm9yZSA2NTUzNiBzaW5jZSB3ZSAgYXJlIGNvbnN0cmFpbmVkIGJ5IGh3LgogCSAqLwotCW1heGFtcGR1ID0gdGlkLT5hbi0+bWF4YW1wZHU7Ci0JaWYgKG1heGFtcGR1KQotCQlhZ2dyX2xpbWl0ID0gbWluKGFnZ3JfbGltaXQsIG1heGFtcGR1KTsKKwlpZiAodGlkLT5hbi0+bWF4YW1wZHUpCisJCWFnZ3JfbGltaXQgPSBtaW4oYWdncl9saW1pdCwgdGlkLT5hbi0+bWF4YW1wZHUpOwogCiAJcmV0dXJuIGFnZ3JfbGltaXQ7CiB9CkBAIC00OTksNyArNTE0LDYgQEAKIC8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVsaW1pdGVycyB0byBiZSBhZGRlZCB0bwogICogbWVldCB0aGUgbWluaW11bSByZXF1aXJlZCBtcGR1ZGVuc2l0eS4KLSAqIGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJhdGUgaXMgSFQgcmF0ZSAuCiAgKi8KIHN0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJCQkJICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHUxNiBmcm1sZW4pCkBAIC01MDcsNyArNTIxLDcgQEAKIAljb25zdCBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwogCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JdTMyIG5zeW1iaXRzLCBuc3ltYm9scywgbXBkdWRlbnNpdHk7CisJdTMyIG5zeW1iaXRzLCBuc3ltYm9sczsKIAl1MTYgbWlubGVuOwogCXU4IHJjLCBmbGFncywgcml4OwogCWludCB3aWR0aCwgaGFsZl9naSwgbmRlbGltLCBtaW5kZWxpbTsKQEAgLTUyOSwxNCArNTQzLDEyIEBACiAJICogb24gaGlnaGVzdCByYXRlIGluIHJhdGUgc2VyaWVzIChpLmUuIGZpcnN0IHJhdGUpIHRvIGRldGVybWluZQogCSAqIHJlcXVpcmVkIG1pbmltdW0gbGVuZ3RoIGZvciBzdWJmcmFtZS4gVGFrZSBpbnRvIGFjY291bnQKIAkgKiB3aGV0aGVyIGhpZ2ggcmF0ZSBpcyAyMCBvciA0ME1oeiBhbmQgaGFsZiBvciBmdWxsIEdJLgotCSAqLwotCW1wZHVkZW5zaXR5ID0gdGlkLT5hbi0+bXBkdWRlbnNpdHk7Ci0KLQkvKgorCSAqCiAJICogSWYgdGhlcmUgaXMgbm8gbXBkdSBkZW5zaXR5IHJlc3RyaWN0aW9uLCBubyBmdXJ0aGVyIGNhbGN1bGF0aW9uCiAJICogaXMgbmVlZGVkLgogCSAqLwotCWlmIChtcGR1ZGVuc2l0eSA9PSAwKQorCisJaWYgKHRpZC0+YW4tPm1wZHVkZW5zaXR5ID09IDApCiAJCXJldHVybiBuZGVsaW07CiAKIAlyaXggPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeDsKQEAgLTU0Niw5ICs1NTgsOSBAQAogCWhhbGZfZ2kgPSAoZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpID8gMSA6IDA7CiAKIAlpZiAoaGFsZl9naSkKLQkJbnN5bWJvbHMgPSBOVU1fU1lNQk9MU19QRVJfVVNFQ19IQUxGR0kobXBkdWRlbnNpdHkpOworCQluc3ltYm9scyA9IE5VTV9TWU1CT0xTX1BFUl9VU0VDX0hBTEZHSSh0aWQtPmFuLT5tcGR1ZGVuc2l0eSk7CiAJZWxzZQotCQluc3ltYm9scyA9IE5VTV9TWU1CT0xTX1BFUl9VU0VDKG1wZHVkZW5zaXR5KTsKKwkJbnN5bWJvbHMgPSBOVU1fU1lNQk9MU19QRVJfVVNFQyh0aWQtPmFuLT5tcGR1ZGVuc2l0eSk7CiAKIAlpZiAobnN5bWJvbHMgPT0gMCkKIAkJbnN5bWJvbHMgPSAxOwpAQCAtNTY1LDYgKzU3Nyw3IEBACiB9CiAKIHN0YXRpYyBlbnVtIEFUSF9BR0dSX1NUQVRVUyBhdGhfdHhfZm9ybV9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCQkgICAgIHN0cnVjdCBhdGhfdHhxICp0eHEsCiAJCQkJCSAgICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfcSkKIHsKQEAgLTYyOSw2ICs2NDIsNyBAQAogCQkJYmZfcHJldi0+YmZfZGVzYy0+ZHNfbGluayA9IGJmLT5iZl9kYWRkcjsKIAkJfQogCQliZl9wcmV2ID0gYmY7CisKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpOwogCiAJYmZfZmlyc3QtPmJmX2FsID0gYWw7CkBAIC02NTEsNyArNjY1LDcgQEAKIAogCQlJTklUX0xJU1RfSEVBRCgmYmZfcSk7CiAKLQkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSk7CisJCXN0YXR1cyA9IGF0aF90eF9mb3JtX2FnZ3Ioc2MsIHR4cSwgdGlkLCAmYmZfcSk7CiAKIAkJLyoKIAkJICogbm8gZnJhbWVzIHBpY2tlZCB1cCB0byBiZSBhZ2dyZWdhdGVkOwpAQCAtNjgyLDMwICs2OTYsMjYgQEAKIAogCQl0eHEtPmF4cV9hZ2dyX2RlcHRoKys7CiAJCWF0aF90eF90eHFhZGRidWYoc2MsIHR4cSwgJmJmX3EpOworCQlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBhX2FnZ3IpOwogCiAJfSB3aGlsZSAodHhxLT5heHFfZGVwdGggPCBBVEhfQUdHUl9NSU5fUURFUFRIICYmCiAJCSBzdGF0dXMgIT0gQVRIX0FHR1JfQkFXX0NMT1NFRCk7CiB9CiAKLWludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCit2b2lkIGF0aF90eF9hZ2dyX3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCiB7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZDsKIAlzdHJ1Y3QgYXRoX25vZGUgKmFuOwogCiAJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpIHsKLQkJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7Ci0JCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX1BST0dSRVNTOwotCQlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7Ci0JCSpzc24gPSB0eHRpZC0+c2VxX3N0YXJ0OwotCX0KLQotCXJldHVybiAwOworCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOworCXR4dGlkLT5zdGF0ZSB8PSBBR0dSX0FEREJBX1BST0dSRVNTOworCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKKwkqc3NuID0gdHh0aWQtPnNlcV9zdGFydDsKIH0KIAotaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit2b2lkIGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCiB7CiAJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwogCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7CkBAIC03MTUsMTIgKzcyNSwxMSBAQAogCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAogCWlmICh0eHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKIAlpZiAoISh0eHRpZC0+c3RhdGUgJiBBR0dSX0FEREJBX0NPTVBMRVRFKSkgewogCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7Ci0JCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAKIAlhdGhfdHhfcGF1c2VfdGlkKHNjLCB0eHRpZCk7CkBAIC03MzksNyArNzQ4LDcgQEAKIAkJfQogCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKIAkJYXRoX3R4X3VwZGF0ZV9iYXcoc2MsIHR4dGlkLCBiZi0+YmZfc2Vxbm8pOwotCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOworCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgdHhxLCAmYmZfaGVhZCwgMCwgMCk7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIApAQCAtNzQ3LDExICs3NTYsOCBAQAogCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9DTEVBTlVQOwogCX0gZWxzZSB7CiAJCXR4dGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKLQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwogCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0eHRpZCk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQpAQCAtNzgwLDE0ICs3ODYsOCBAQAogCiAJdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKIAotCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7Ci0JCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfUFJPR1JFU1MpICYmCi0JCSAgICAodHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPCBBRERCQV9FWENIQU5HRV9BVFRFTVBUUykpIHsKLQkJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzKys7CisJaWYgKCEodHh0aWQtPnN0YXRlICYgKEFHR1JfQUREQkFfQ09NUExFVEUgfCBBR0dSX0FEREJBX1BST0dSRVNTKSkpCiAJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtODcwLDE0ICs4NzAsMTQgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJnR4cS0+YXhxX2xvY2spOwogCQl0eHEtPmF4cV9kZXB0aCA9IDA7CiAJCXR4cS0+YXhxX2FnZ3JfZGVwdGggPSAwOwotCQl0eHEtPmF4cV90b3RhbHF1ZXVlZCA9IDA7CiAJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOworCQl0eHEtPmF4cV90eF9pbnByb2dyZXNzID0gZmFsc2U7CiAJCXNjLT50eC50eHFzZXR1cCB8PSAxPDxxbnVtOwogCX0KIAlyZXR1cm4gJnNjLT50eC50eHFbcW51bV07CiB9CiAKLXN0YXRpYyBpbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKQoraW50IGF0aF90eF9nZXRfcW51bShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgaGFsdHlwZSkKIHsKIAlpbnQgcW51bTsKIApAQCAtMTAzNSw5ICsxMDM1LDEzIEBACiAJCWlmIChiZl9pc2FtcGR1KGJmKSkKIAkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgMCk7CiAJCWVsc2UKLQkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7CisJCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgdHhxLCAmYmZfaGVhZCwgMCwgMCk7CiAJfQogCisJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl0eHEtPmF4cV90eF9pbnByb2dyZXNzID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCiAJLyogZmx1c2ggYW55IHBlbmRpbmcgZnJhbWVzIGlmIGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQgKi8KIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7CiAJCWlmICghcmV0cnlfdHgpIHsKQEAgLTExMTgsOCArMTEyMiw3IEBACiAJCWlmICh0aWQtPnBhdXNlZCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgodHhxLT5heHFfZGVwdGggJSAyKSA9PSAwKQotCQkJYXRoX3R4X3NjaGVkX2FnZ3Ioc2MsIHR4cSwgdGlkKTsKKwkJYXRoX3R4X3NjaGVkX2FnZ3Ioc2MsIHR4cSwgdGlkKTsKIAogCQkvKgogCQkgKiBhZGQgdGlkIHRvIHJvdW5kLXJvYmluIHF1ZXVlIGlmIG1vcmUgZnJhbWVzCkBAIC0xMTgzLDcgKzExODYsNiBAQAogCiAJbGlzdF9zcGxpY2VfdGFpbF9pbml0KGhlYWQsICZ0eHEtPmF4cV9xKTsKIAl0eHEtPmF4cV9kZXB0aCsrOwotCXR4cS0+YXhxX3RvdGFscXVldWVkKys7CiAJdHhxLT5heHFfbGlua2J1ZiA9IGxpc3RfZW50cnkodHhxLT5heHFfcS5wcmV2LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1FVRVVFLApAQCAtMTIzMSw2ICsxMjMzLDcgQEAKIAogCWJmID0gbGlzdF9maXJzdF9lbnRyeShiZl9oZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0FNUERVOworCVRYX1NUQVRfSU5DKHR4Y3RsLT50eHEtPmF4cV9xbnVtLCBhX3F1ZXVlZCk7CiAKIAkvKgogCSAqIERvIG5vdCBxdWV1ZSB0byBoL3cgd2hlbiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6CkBAIC0xMjc3LDYgKzEyODAsNyBAQAogCWJmLT5iZl9sYXN0YmYgPSBiZjsKIAlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CiAJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKKwlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBxdWV1ZWQpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCkBAIC0xMjkwLDYgKzEyOTQsNyBAQAogCWJmLT5iZl9uZnJhbWVzID0gMTsKIAlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CiAJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKKwlUWF9TVEFUX0lOQyh0eHEtPmF4cV9xbnVtLCBxdWV1ZWQpOwogfQogCiBzdGF0aWMgZW51bSBhdGg5a19wa3RfdHlwZSBnZXRfaHdfcGFja2V0X3R5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE2MzYsNyArMTY0MSw3IEBACiAJCQlnb3RvIHR4X2RvbmU7CiAJCX0KIAotCQlpZiAoYXRoX2FnZ3JfcXVlcnkoc2MsIGFuLCBiZi0+YmZfdGlkbm8pKSB7CisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKIAkJCS8qCiAJCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQogCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgpAQCAtMTgxNSw2ICsxODIwLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJCXN0cnVjdCBhdGhfdHhxICp0eHEsCiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKIAkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpCiB7CkBAIC0xODIyLDcgKzE4MjgsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHR4X2ZsYWdzID0gMDsKIAotCiAJaWYgKHNlbmRiYXIpCiAJCXR4X2ZsYWdzID0gQVRIX1RYX0JBUjsKIApAQCAtMTgzNSw2ICsxODQwLDcgQEAKIAogCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgdHhfZmxhZ3MpOworCWF0aF9kZWJ1Z19zdGF0X3R4KHNjLCB0eHEsIGJmKTsKIAogCS8qCiAJICogUmV0dXJuIHRoZSBsaXN0IG9mIGF0aF9idWYgb2YgdGhpcyBtcGR1IHRvIGZyZWUgcXVldWUKQEAgLTE5NjIsMTkgKzE5NjgsNyBAQAogCQlpZiAoYmYtPmJmX3N0YWxlKSB7CiAJCQliZl9oZWxkID0gYmY7CiAJCQlpZiAobGlzdF9pc19sYXN0KCZiZl9oZWxkLT5saXN0LCAmdHhxLT5heHFfcSkpIHsKLQkJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKLQkJCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKIAkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJCQkvKgotCQkJCSAqIFRoZSBob2xkaW5nIGRlc2NyaXB0b3IgaXMgdGhlIGxhc3QKLQkJCQkgKiBkZXNjcmlwdG9yIGluIHF1ZXVlLiBJdCdzIHNhZmUgdG8gcmVtb3ZlCi0JCQkJICogdGhlIGxhc3QgaG9sZGluZyBkZXNjcmlwdG9yIGluIEJIIGNvbnRleHQuCi0JCQkJICovCi0JCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCiAJCQkJYnJlYWs7CiAJCQl9IGVsc2UgewogCQkJCWJmID0gbGlzdF9lbnRyeShiZl9oZWxkLT5saXN0Lm5leHQsCkBAIC0yMDExLDYgKzIwMDUsNyBAQAogCQkJdHhxLT5heHFfYWdncl9kZXB0aC0tOwogCiAJCXR4b2sgPSAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCk7CisJCXR4cS0+YXhxX3R4X2lucHJvZ3Jlc3MgPSBmYWxzZTsKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJCWlmIChiZl9oZWxkKSB7CkBAIC0yMDMzLDcgKzIwMjgsNyBAQAogCQlpZiAoYmZfaXNhbXBkdShiZikpCiAJCQlhdGhfdHhfY29tcGxldGVfYWdncihzYywgdHhxLCBiZiwgJmJmX2hlYWQsIHR4b2spOwogCQllbHNlCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIHR4b2ssIDApOworCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsIHR4cSwgJmJmX2hlYWQsIHR4b2ssIDApOwogCiAJCWF0aF93YWtlX21hYzgwMjExX3F1ZXVlKHNjLCB0eHEpOwogCkBAIC0yMDQ0LDYgKzIwMzksNDAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsCisJCQl0eF9jb21wbGV0ZV93b3JrLndvcmspOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IGk7CisJYm9vbCBuZWVkcmVzZXQgPSBmYWxzZTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgeworCQkJdHhxID0gJnNjLT50eC50eHFbaV07CisJCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJaWYgKHR4cS0+YXhxX2RlcHRoKSB7CisJCQkJaWYgKHR4cS0+YXhxX3R4X2lucHJvZ3Jlc3MpIHsKKwkJCQkJbmVlZHJlc2V0ID0gdHJ1ZTsKKwkJCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQl0eHEtPmF4cV90eF9pbnByb2dyZXNzID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCX0KKworCWlmIChuZWVkcmVzZXQpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwgInR4IGh1bmcsIHJlc2V0dGluZyB0aGUgY2hpcFxuIik7CisJCWF0aF9yZXNldChzYywgZmFsc2UpOworCX0KKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCisJCQltc2Vjc190b19qaWZmaWVzKEFUSF9UWF9DT01QTEVURV9QT0xMX0lOVCkpOworfQorCisKIAogdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKQEAgLTIwODQsNiArMjExMyw4IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+dHhfY29tcGxldGVfd29yaywgYXRoX3R4X2NvbXBsZXRlX3BvbGxfd29yayk7CisKIGVycjoKIAlpZiAoZXJyb3IgIT0gMCkKIAkJYXRoX3R4X2NsZWFudXAoc2MpOwpAQCAtMjEyMiw3ICsyMTUzLDYgQEAKIAkJdGlkLT5hYyA9ICZhbi0+YWNbYWNub107CiAJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CiAJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7Ci0JCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CiAJfQogCiAJZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOwpAQCAtMjE3OSw3ICsyMjA5LDYgQEAKIAkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOwogCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7CiAJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CiAJCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL21haW4uYwppbmRleCA5OTQ5YjExLi40ODcxOTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9tYWluLmMKQEAgLTE3LDYgKzE3LDQyIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKKyNpbmNsdWRlICJhdGguaCIKKwogTU9EVUxFX0FVVEhPUigiQXRoZXJvcyBDb21tdW5pY2F0aW9ucyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFyZWQgbGlicmFyeSBmb3IgQXRoZXJvcyB3aXJlbGVzcyBMQU4gY2FyZHMuIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKK3N0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwKKwkJCQl1MzIgbGVuLAorCQkJCWdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIG9mZjsKKworCS8qCisJICogQ2FjaGUtbGluZS1hbGlnbi4gIFRoaXMgaXMgaW1wb3J0YW50IChmb3IgdGhlCisJICogNTIxMCBhdCBsZWFzdCkgYXMgbm90IGRvaW5nIHNvIGNhdXNlcyBib2d1cyBkYXRhCisJICogaW4gcngnZCBmcmFtZXMuCisJICovCisKKwkvKiBOb3RlOiB0aGUga2VybmVsIGNhbiBhbGxvY2F0ZSBhIHZhbHVlIGdyZWF0ZXIgdGhhbgorCSAqIHdoYXQgd2UgYXNrIGl0IHRvIGdpdmUgdXMuIFdlIHJlYWxseSBvbmx5IG5lZWQgNCBLQiBhcyB0aGF0CisJICogaXMgdGhpcyBoYXJkd2FyZSBzdXBwb3J0cyBhbmQgaW4gZmFjdCB3ZSBuZWVkIGF0IGxlYXN0IDM4NDkKKwkgKiBhcyB0aGF0IGlzIHRoZSBNQVggQU1TRFUgc2l6ZSB0aGlzIGhhcmR3YXJlIHN1cHBvcnRzLgorCSAqIFVuZm9ydHVuYXRlbHkgdGhpcyBtZWFucyB3ZSBtYXkgZ2V0IDggS0IgaGVyZSBmcm9tIHRoZQorCSAqIGtlcm5lbC4uLiBhbmQgdGhhdCBpcyBhY3R1YWxseSB3aGF0IGlzIG9ic2VydmVkIG9uIHNvbWUKKwkgKiBzeXN0ZW1zIDooICovCisJc2tiID0gX19kZXZfYWxsb2Nfc2tiKGxlbiArIGNvbW1vbi0+Y2FjaGVsc3ogLSAxLCBnZnBfbWFzayk7CisJaWYgKHNrYiAhPSBOVUxMKSB7CisJCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIGNvbW1vbi0+Y2FjaGVsc3o7CisJCWlmIChvZmYgIT0gMCkKKwkJCXNrYl9yZXNlcnZlKHNrYiwgY29tbW9uLT5jYWNoZWxzeiAtIG9mZik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJza2J1ZmYgYWxsb2Mgb2Ygc2l6ZSAldSBmYWlsZWRcbiIsIGxlbik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBza2I7Cit9CitFWFBPUlRfU1lNQk9MKGF0aF9yeGJ1Zl9hbGxvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYwppbmRleCBiZjNkMjViLi4wNzdiY2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKQEAgLTU4Niw3ICs1ODYsNSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiBOT19DVEw7CiAJfQotCi0JcmV0dXJuIE5PX0NUTDsKIH0KIEVYUE9SVF9TWU1CT0woYXRoX3JlZ2RfZ2V0X2JhbmRfY3RsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5oCmluZGV4IDA3MjkxY2MuLmMxZGQ4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuaApAQCAtMTgsOSArMTgsMTYgQEAKICNkZWZpbmUgUkVHRF9ICiAKICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+Ci0KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KIAorI2luY2x1ZGUgImF0aC5oIgorCitlbnVtIGN0bF9ncm91cCB7CisJQ1RMX0ZDQyA9IDB4MTAsCisJQ1RMX01LSyA9IDB4NDAsCisJQ1RMX0VUU0kgPSAweDMwLAorfTsKKwogI2RlZmluZSBOT19DVEwgMHhmZgogI2RlZmluZSBTRF9OT19DVEwgICAgICAgICAgICAgICAweEUwCiAjZGVmaW5lIE5PX0NUTCAgICAgICAgICAgICAgICAgIDB4ZmYKQEAgLTQ3LDI5ICs1NCwxMiBAQAogI2RlZmluZSBDSEFOTkVMX0hBTEZfQlcgICAgICAgICAxMAogI2RlZmluZSBDSEFOTkVMX1FVQVJURVJfQlcgICAgICA1CiAKLXN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyB7Ci0JdTE2IHJlZ0RtbkVudW07Ci0JdTE2IHJlZ181Z2h6X2N0bDsKLQl1MTYgcmVnXzJnaHpfY3RsOwotfTsKLQogc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkIHsKIAl1MTYgY291bnRyeUNvZGU7CiAJdTE2IHJlZ0RtbkVudW07CiAJY29uc3QgY2hhciAqaXNvTmFtZTsKIH07CiAKLXN0cnVjdCBhdGhfcmVndWxhdG9yeSB7Ci0JY2hhciBhbHBoYTJbMl07Ci0JdTE2IGNvdW50cnlfY29kZTsKLQl1MTYgbWF4X3Bvd2VyX2xldmVsOwotCXUzMiB0cF9zY2FsZTsKLQl1MTYgY3VycmVudF9yZDsKLQl1MTYgY3VycmVudF9yZF9leHQ7Ci0JaW50MTZfdCBwb3dlcl9saW1pdDsKLQlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7Ci19OwotCiBlbnVtIENvdW50cnlDb2RlIHsKIAlDVFJZX0FMQkFOSUEgPSA4LAogCUNUUllfQUxHRVJJQSA9IDEyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2RfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaAppbmRleCA0ZDBlMjk4Li45ODQ3YWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaApAQCAtMTU0LDEyICsxNTQsNiBAQAogCURFQlVHX1JFR19ETU4gPSAweDAxZmYsCiB9OwogCi1lbnVtIGN0bF9ncm91cCB7Ci0JQ1RMX0ZDQyA9IDB4MTAsCi0JQ1RMX01LSyA9IDB4NDAsCi0JQ1RMX0VUU0kgPSAweDMwLAotfTsKLQogLyogUmVncGFpciB0byBDVEwgYmFuZCBtYXBwaW5nICovCiBzdGF0aWMgc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nIHJlZ0RvbWFpblBhaXJzW10gPSB7CiAJLyogcmVncGFpciwgNSBHSHogQ1RMLCAyIEdIeiBDVEwgKi8KQEAgLTQ1MCw3ICs0NDQsNyBAQAogCXtDVFJZX1NXSVRaRVJMQU5ELCBFVFNJMV9XT1JMRCwgIkNIIn0sCiAJe0NUUllfU1lSSUEsIE5VTEwxX1dPUkxELCAiU1kifSwKIAl7Q1RSWV9UQUlXQU4sIEFQTDNfRkNDQSwgIlRXIn0sCi0Je0NUUllfVEhBSUxBTkQsIE5VTEwxX1dPUkxELCAiVEgifSwKKwl7Q1RSWV9USEFJTEFORCwgRkNDM19XT1JMRCwgIlRIIn0sCiAJe0NUUllfVFJJTklEQURfWV9UT0JBR08sIEVUU0k0X1dPUkxELCAiVFQifSwKIAl7Q1RSWV9UVU5JU0lBLCBFVFNJM19XT1JMRCwgIlROIn0sCiAJe0NUUllfVFVSS0VZLCBFVFNJM19XT1JMRCwgIlRSIn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCAyOTFhOTRiLi5hM2IzNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTc4MSw3ICs3ODEsNyBAQAogCXByaXYtPnR4X2ZyZWVfbWVtIC09IGxlbjsKIH0KIAotc3RhdGljIGludCBzdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIGNvbnN0IHU4IFNOQVBfUkZDMTAyNFs2XSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTc5MywxMyArNzkzLDEzIEBACiAJICAgICEoKnByaXYtPnByZXNlbnRfY2FsbGJhY2spKHByaXYtPmNhcmQpKSB7CiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKHByaXYtPnN0YXRpb25fc3RhdGUgIT0gU1RBVElPTl9TVEFURV9SRUFEWSkgewogCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCS8qIGZpcnN0IGVuc3VyZSB0aGUgdGltZXIgZnVuYyBjYW5ub3QgcnVuICovCkBAIC04NTYsNyArODU2LDcgQEAKIAlzcGluX3VubG9ja19iaCgmcHJpdi0+dGltZXJsb2NrKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCBhdG1lbF90cmFuc21pdF9tYW5hZ2VtZW50X2ZyYW1lKHN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwppbmRleCA2N2Y1NjRlLi44M2UzODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwpAQCAtNDIsOCArNDIsOCBAQAogCWRlZmF1bHQgeQogCiBjb25maWcgQjQzX1BDTUNJQQotCWJvb2wgIkJyb2FkY29tIDQzeHggUENNQ0lBIGRldmljZSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQjQzICYmIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIkJyb2FkY29tIDQzeHggUENNQ0lBIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQjQzICYmIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFCiAJc2VsZWN0IFNTQl9QQ01DSUFIT1NUCiAJLS0taGVscC0tLQogCSAgQnJvYWRjb20gNDN4eCBQQ01DSUEgZGV2aWNlIHN1cHBvcnQuCkBAIC04MCwxNiArODAsMTQgQEAKIAkgIFNBWSBOLgogCiBjb25maWcgQjQzX1BIWV9MUAotCWJvb2wgIklFRUUgODAyLjExZyBMUC1QSFkgc3VwcG9ydCAoQlJPS0VOKSIKLQlkZXBlbmRzIG9uIEI0MyAmJiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCisJYm9vbCAiU3VwcG9ydCBmb3IgbG93LXBvd2VyIChMUC1QSFkpIGRldmljZXMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBCNDMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIExQLVBIWS4KLQkgIFRoZSBMUC1QSFkgaXMgYW4gSUVFRSA4MDIuMTFnIGJhc2VkIFBIWSBidWlsdCBpbnRvIHNvbWUgbm90ZWJvb2tzCi0JICBhbmQgZW1iZWRkZWQgZGV2aWNlcy4KLQotCSAgVEhJUyBJUyBCUk9LRU4gQU5EIERPRVMgTk9UIFdPUksgWUVULgotCi0JICBTQVkgTi4KKwkgIFRoZSBMUC1QSFkgaXMgYSBsb3ctcG93ZXIgUEhZIGJ1aWx0IGludG8gc29tZSBub3RlYm9va3MKKwkgIGFuZCBlbWJlZGRlZCBkZXZpY2VzLiBJdCBzdXBwb3J0cyA4MDIuMTFhL2cKKwkgICg4MDIuMTFhIHN1cHBvcnQgaXMgb3B0aW9uYWwsIGFuZCBjdXJyZW50bHkgZGlzYWJsZWQpLgogCiAjIFRoaXMgY29uZmlnIG9wdGlvbiBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgYjQzIExFRFMgc3VwcG9ydCwKICMgaWYgaXQncyBwb3NzaWJsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAppbmRleCA0MDQ0ODA2Li4wOWNmZTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCkBAIC0xNDIsNiArMTQyLDE3IEBACiAjZGVmaW5lIEI0M19CRkxfQlRDTU9ECQkJMHg0MDAwCS8qIEJGTF9CVENPRVhJU1QgaXMgZ2l2ZW4gaW4gYWx0ZXJuYXRlIEdQSU9zICovCiAjZGVmaW5lIEI0M19CRkxfQUxUSVEJCQkweDgwMDAJLyogYWx0ZXJuYXRlIEkvUSBzZXR0aW5ncyAqLwogCisvKiBTUFJPTSBib2FyZGZsYWdzX2hpIHZhbHVlcyAqLworI2RlZmluZSBCNDNfQkZIX05PUEEJCQkweDAwMDEJLyogaGFzIG5vIFBBICovCisjZGVmaW5lIEI0M19CRkhfUlNTSUlOVgkJCTB4MDAwMgkvKiBSU1NJIHVzZXMgcG9zaXRpdmUgc2xvcGUgKG5vdCBUU1NJKSAqLworI2RlZmluZSBCNDNfQkZIX1BBUkVGCQkJMHgwMDA0CS8qIHVzZXMgdGhlIFBBUmVmIExETyAqLworI2RlZmluZSBCNDNfQkZIXzNUU1dJVENICQkweDAwMDgJLyogdXNlcyBhIHRyaXBsZSB0aHJvdyBzd2l0Y2ggc2hhcmVkCisJCQkJCQkgKiB3aXRoIGJsdWV0b290aCAqLworI2RlZmluZSBCNDNfQkZIX1BIQVNFU0hJRlQJCTB4MDAxMAkvKiBjYW4gc3VwcG9ydCBwaGFzZSBzaGlmdGVyICovCisjZGVmaW5lIEI0M19CRkhfQlVDS0JPT1NUCQkweDAwMjAJLyogaGFzIGJ1Y2svYm9vc3RlciAqLworI2RlZmluZSBCNDNfQkZIX0ZFTV9CVAkJCTB4MDA0MAkvKiBoYXMgRkVNIGFuZCBzd2l0Y2ggdG8gc2hhcmUgYW50ZW5uYQorCQkJCQkJICogd2l0aCBibHVldG9vdGggKi8KKwogLyogR1BJTyByZWdpc3RlciBvZmZzZXQsIGluIGJvdGggQ2hpcENvbW1vbiBhbmQgUENJIGNvcmUuICovCiAjZGVmaW5lIEI0M19HUElPX0NPTlRST0wJCTB4NmMKIApAQCAtNDgyLDYgKzQ5MywxMCBAQAogCiAvKiBNYXggc2l6ZSBvZiBhIHNlY3VyaXR5IGtleSAqLwogI2RlZmluZSBCNDNfU0VDX0tFWVNJWkUJCQkxNgorLyogTWF4IG51bWJlciBvZiBncm91cCBrZXlzICovCisjZGVmaW5lIEI0M19OUl9HUk9VUF9LRVlTCQk0CisvKiBNYXggbnVtYmVyIG9mIHBhaXJ3aXNlIGtleXMgKi8KKyNkZWZpbmUgQjQzX05SX1BBSVJXSVNFX0tFWVMJCTUwCiAvKiBTZWN1cml0eSBhbGdvcml0aG1zLiAqLwogZW51bSB7CiAJQjQzX1NFQ19BTEdPX05PTkUgPSAwLAkvKiB1bmVuY3J5cHRlZCwgYXMgb2YgVFggaGVhZGVyLiAqLwpAQCAtNjAxLDYgKzYxNiwxMiBAQAogCS8qIFBvaW50ZXIgdG8gdGhlIGllZWU4MDIxMSBoYXJkd2FyZSBkYXRhIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCisJLyogR2xvYmFsIGRyaXZlciBtdXRleC4gRXZlcnkgb3BlcmF0aW9uIG11c3QgcnVuIHdpdGggdGhpcyBtdXRleCBsb2NrZWQuICovCisJc3RydWN0IG11dGV4IG11dGV4OworCS8qIEhhcmQtSVJRIHNwaW5sb2NrLiBUaGlzIGxvY2sgcHJvdGVjdHMgdGhpbmdzIHVzZWQgaW4gdGhlIGhhcmQtSVJRCisJICogaGFuZGxlciwgb25seS4gVGhpcyBiYXNpY2FsbHkgaXMganVzdCB0aGUgSVJRIG1hc2sgcmVnaXN0ZXIuICovCisJc3BpbmxvY2tfdCBoYXJkaXJxX2xvY2s7CisKIAkvKiBUaGUgbnVtYmVyIG9mIHF1ZXVlcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0KIAkgKiBpbml0aWFsbHkuIFRoaXMgaXMgYSBiYWNrdXAgY29weSBvZiBody0+cXVldWVzIGluIGNhc2UgaHctPnF1ZXVlcyBoYXMKIAkgKiB0byBiZSBkeW5hbWljYWxseSBsb3dlcmVkIGF0IHJ1bnRpbWUgKEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgUW9TKS4KQEAgLTYwOCwxNiArNjI5LDEyIEBACiAJICogZnJvbSB0aGUgbWFjODAyMTEgc3Vic3lzdGVtLiAqLwogCXUxNiBtYWM4MDIxMV9pbml0aWFsbHlfcmVnaXN0ZXJlZF9xdWV1ZXM7CiAKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3BpbmxvY2tfdCBpcnFfbG9jazsKIAkvKiBSL1cgbG9jayBmb3IgZGF0YSB0cmFuc21pc3Npb24uCiAJICogVHJhbnNtaXNzaW9ucyBvbiAyKyBxdWV1ZXMgY2FuIHJ1biBjb25jdXJyZW50bHksIGJ1dCBzb21lYm9keSBlbHNlCiAJICogbWlnaHQgc3luYyB3aXRoIFRYIGJ5IHdyaXRlX2xvY2tfaXJxc2F2ZSgpJ2luZy4gKi8KIAlyd2xvY2tfdCB0eF9sb2NrOwogCS8qIExvY2sgZm9yIExFRHMgYWNjZXNzLiAqLwogCXNwaW5sb2NrX3QgbGVkc19sb2NrOwotCS8qIExvY2sgZm9yIFNITSBhY2Nlc3MuICovCi0Jc3BpbmxvY2tfdCBzaG1fbG9jazsKIAogCS8qIFdlIGNhbiBvbmx5IGhhdmUgb25lIG9wZXJhdGluZyBpbnRlcmZhY2UgKDgwMi4xMSBjb3JlKQogCSAqIGF0IGEgdGltZS4gR2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGludGVyZmFjZSBmb2xsb3dzLgpAQCAtNjI4LDcgKzY0NSw3IEBACiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCS8qIEN1cnJlbnQgQlNTSUQgKi8KIAl1OCBic3NpZFtFVEhfQUxFTl07Ci0JLyogSW50ZXJmYWNlIHR5cGUuIChJRUVFODAyMTFfSUZfVFlQRV9YWFgpICovCisJLyogSW50ZXJmYWNlIHR5cGUuIChOTDgwMjExX0lGVFlQRV9YWFgpICovCiAJaW50IGlmX3R5cGU7CiAJLyogSXMgdGhlIGNhcmQgb3BlcmF0aW5nIGluIEFQLCBTVEEgb3IgSUJTUyBtb2RlPyAqLwogCWJvb2wgb3BlcmF0aW5nOwpAQCAtNjUwLDggKzY2Nyw3IEBACiAJYm9vbCByYWRpb3RhcF9lbmFibGVkOwogCWJvb2wgcmFkaW9fZW5hYmxlZDsKIAotCS8qIFRoZSBiZWFjb24gd2UgYXJlIGN1cnJlbnRseSB1c2luZyAoQVAgb3IgSUJTUyBtb2RlKS4KLQkgKiBUaGlzIGJlYWNvbiBzdHVmZiBpcyBwcm90ZWN0ZWQgYnkgdGhlIGlycV9sb2NrLiAqLworCS8qIFRoZSBiZWFjb24gd2UgYXJlIGN1cnJlbnRseSB1c2luZyAoQVAgb3IgSUJTUyBtb2RlKS4gKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqY3VycmVudF9iZWFjb247CiAJYm9vbCBiZWFjb24wX3VwbG9hZGVkOwogCWJvb2wgYmVhY29uMV91cGxvYWRlZDsKQEAgLTY2NSw2ICs2ODEsMTEgQEAKIAkgKiBUaGlzIGlzIHNjaGVkdWxlZCB3aGVuIHdlIGRldGVybWluZSB0aGF0IHRoZSBhY3R1YWwgVFggb3V0cHV0CiAJICogcG93ZXIgZG9lc24ndCBtYXRjaCB3aGF0IHdlIHdhbnQuICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHR4cG93ZXJfYWRqdXN0X3dvcms7CisKKwkvKiBQYWNrZXQgdHJhbnNtaXQgd29yayAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOworCS8qIFF1ZXVlIG9mIHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQuICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKIH07CiAKIC8qIFRoZSB0eXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlLiAqLwpAQCAtNzM5LDE0ICs3NjAsNiBAQAogCQlzbXBfd21iKCk7CQkJCQlcCiAJCQkJCX0gd2hpbGUgKDApCiAKLS8qIFhYWC0tLSAgIEhPVyBMT0NLSU5HIFdPUktTIElOIEI0MyAgIC0tLVhYWAotICoKLSAqIFlvdSBzaG91bGQgYWx3YXlzIGFjcXVpcmUgYm90aCwgd2wtPm11dGV4IGFuZCB3bC0+aXJxX2xvY2sgdW5sZXNzOgotICogLSBZb3UgZG9uJ3QgbmVlZCB0byBhY3F1aXJlIHdsLT5pcnFfbG9jaywgaWYgdGhlIGludGVyZmFjZSBpcyBzdG9wcGVkLgotICogLSBZb3UgZG9uJ3QgbmVlZCB0byBhY3F1aXJlIHdsLT5tdXRleCBpbiB0aGUgSVJRIGhhbmRsZXIsIElSUSB0YXNrbGV0Ci0gKiAgIGFuZCBwYWNrZXQgVFggcGF0aCAoYW5kIF9PTkxZXyB0aGVyZS4pCi0gKi8KLQogLyogRGF0YSBzdHJ1Y3R1cmUgZm9yIG9uZSB3aXJlbGVzcyBkZXZpY2UgKDgwMi4xMSBjb3JlKSAqLwogc3RydWN0IGI0M193bGRldiB7CiAJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKQEAgLTc5MiwxNCArODA1LDEyIEBACiAJdTMyIGRtYV9yZWFzb25bNl07CiAJLyogVGhlIGN1cnJlbnRseSBhY3RpdmUgZ2VuZXJpYy1pbnRlcnJ1cHQgbWFzay4gKi8KIAl1MzIgaXJxX21hc2s7CisKIAkvKiBMaW5rIFF1YWxpdHkgY2FsY3VsYXRpb24gY29udGV4dC4gKi8KIAlzdHJ1Y3QgYjQzX25vaXNlX2NhbGN1bGF0aW9uIG5vaXNlY2FsYzsKIAkvKiBpZiA+IDAgTUFDIGlzIHN1c3BlbmRlZC4gaWYgPT0gMCBNQUMgaXMgZW5hYmxlZC4gKi8KIAlpbnQgbWFjX3N1c3BlbmRlZDsKIAotCS8qIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUgdGFza2xldCAoYm90dG9tLWhhbGYpICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGlzcl90YXNrbGV0OwotCiAJLyogUGVyaW9kaWMgdGFza3MgKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHBlcmlvZGljX3dvcms7CiAJdW5zaWduZWQgaW50IHBlcmlvZGljX3N0YXRlOwpAQCAtODA4LDggKzgxOSw3IEBACiAKIAkvKiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gKi8KIAl1MTYga3RwOwkJLyogS2V5IHRhYmxlIHBvaW50ZXIgKi8KLQl1OCBtYXhfbnJfa2V5czsKLQlzdHJ1Y3QgYjQzX2tleSBrZXlbNThdOworCXN0cnVjdCBiNDNfa2V5IGtleVtCNDNfTlJfR1JPVVBfS0VZUyAqIDIgKyBCNDNfTlJfUEFJUldJU0VfS0VZU107CiAKIAkvKiBGaXJtd2FyZSBkYXRhICovCiAJc3RydWN0IGI0M19maXJtd2FyZSBmdzsKQEAgLTgzNCw3ICs4NDQsNyBAQAogCXJldHVybiBzc2JfZ2V0X2RydmRhdGEoc3NiX2Rldik7CiB9CiAKLS8qIElzIHRoZSBkZXZpY2Ugb3BlcmF0aW5nIGluIGEgc3BlY2lmaWVkIG1vZGUgKElFRUU4MDIxMV9JRl9UWVBFX1hYWCkuICovCisvKiBJcyB0aGUgZGV2aWNlIG9wZXJhdGluZyBpbiBhIHNwZWNpZmllZCBtb2RlIChOTDgwMjExX0lGVFlQRV9YWFgpLiAqLwogc3RhdGljIGlubGluZSBpbnQgYjQzX2lzX21vZGUoc3RydWN0IGI0M193bCAqd2wsIGludCB0eXBlKQogewogCXJldHVybiAod2wtPm9wZXJhdGluZyAmJiB3bC0+aWZfdHlwZSA9PSB0eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCmluZGV4IDQ1ZTNkNmEuLjhmNjQ5NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYwpAQCAtNDYsOCArNDYsNiBAQAogCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wczsKIAkvKiBPZmZzZXQgb2Ygc3RydWN0IGI0M19kZnNfZmlsZSBpbiBzdHJ1Y3QgYjQzX2Rmc2VudHJ5ICovCiAJc2l6ZV90IGZpbGVfc3RydWN0X29mZnNldDsKLQkvKiBUYWtlIHdsLT5pcnFfbG9jayBiZWZvcmUgY2FsbGluZyByZWFkL3dyaXRlPyAqLwotCWJvb2wgdGFrZV9pcnFsb2NrOwogfTsKIAogc3RhdGljIGlubGluZQpAQCAtMTI3LDcgKzEyNSw2IEBACiAJdW5zaWduZWQgaW50IHJvdXRpbmcsIGFkZHIsIG1hc2ssIHNldDsKIAl1MTYgdmFsOwogCWludCByZXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJlcyA9IHNzY2FuZihidWYsICIweCVYIDB4JVggMHglWCAweCVYIiwKIAkJICAgICAmcm91dGluZywgJmFkZHIsICZtYXNrLCAmc2V0KTsKQEAgLTE0NCwxNSArMTQxLDEzIEBACiAJaWYgKChtYXNrID4gMHhGRkZGKSB8fCAoc2V0ID4gMHhGRkZGKSkKIAkJcmV0dXJuIC1FMkJJRzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPndsLT5zaG1fbG9jaywgZmxhZ3MpOwogCWlmIChtYXNrID09IDApCiAJCXZhbCA9IDA7CiAJZWxzZQotCQl2YWwgPSBfX2I0M19zaG1fcmVhZDE2KGRldiwgcm91dGluZywgYWRkcik7CisJCXZhbCA9IGI0M19zaG1fcmVhZDE2KGRldiwgcm91dGluZywgYWRkcik7CiAJdmFsICY9IG1hc2s7CiAJdmFsIHw9IHNldDsKLQlfX2I0M19zaG1fd3JpdGUxNihkZXYsIHJvdXRpbmcsIGFkZHIsIHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT53bC0+c2htX2xvY2ssIGZsYWdzKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCByb3V0aW5nLCBhZGRyLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDYsNyArMjAxLDYgQEAKIAl1bnNpZ25lZCBpbnQgcm91dGluZywgYWRkciwgbWFzaywgc2V0OwogCXUzMiB2YWw7CiAJaW50IHJlczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmVzID0gc3NjYW5mKGJ1ZiwgIjB4JVggMHglWCAweCVYIDB4JVgiLAogCQkgICAgICZyb3V0aW5nLCAmYWRkciwgJm1hc2ssICZzZXQpOwpAQCAtMjIzLDE1ICsyMTcsMTMgQEAKIAlpZiAoKG1hc2sgPiAweEZGRkZGRkZGKSB8fCAoc2V0ID4gMHhGRkZGRkZGRikpCiAJCXJldHVybiAtRTJCSUc7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT53bC0+c2htX2xvY2ssIGZsYWdzKTsKIAlpZiAobWFzayA9PSAwKQogCQl2YWwgPSAwOwogCWVsc2UKLQkJdmFsID0gX19iNDNfc2htX3JlYWQzMihkZXYsIHJvdXRpbmcsIGFkZHIpOworCQl2YWwgPSBiNDNfc2htX3JlYWQzMihkZXYsIHJvdXRpbmcsIGFkZHIpOwogCXZhbCAmPSBtYXNrOwogCXZhbCB8PSBzZXQ7Ci0JX19iNDNfc2htX3dyaXRlMzIoZGV2LCByb3V0aW5nLCBhZGRyLCB2YWwpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+d2wtPnNobV9sb2NrLCBmbGFncyk7CisJYjQzX3NobV93cml0ZTMyKGRldiwgcm91dGluZywgYWRkciwgdmFsKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzcyLDE0ICszNjQsMTIgQEAKIHsKIAlzdHJ1Y3QgYjQzX3R4c3RhdHVzX2xvZyAqbG9nID0gJmRldi0+ZGZzZW50cnktPnR4c3RhdGxvZzsKIAlzc2l6ZV90IGNvdW50ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBpZHg7CiAJc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2ctPmxvY2ssIGZsYWdzKTsKIAlpZiAobG9nLT5lbmQgPCAwKSB7CiAJCWZhcHBlbmQoIk5vdGhpbmcgdHJhbnNtaXR0ZWQsIHlldFxuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXQ7CiAJfQogCWZhcHBlbmQoImI0MyBUWCBzdGF0dXMgcmVwb3J0czpcblxuIgogCQkiaW5kZXggfCBjb29raWUgfCBzZXEgfCBwaHlfc3RhdCB8IGZyYW1lX2NvdW50IHwgIgpAQCAtNDA5LDEzICszOTksMTEgQEAKIAkJCWJyZWFrOwogCQlpKys7CiAJfQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2ctPmxvY2ssIGZsYWdzKTsKK291dDoKIAogCXJldHVybiBjb3VudDsKIH0KIAotLyogd2wtPmlycV9sb2NrIGlzIGxvY2tlZCAqLwogc3RhdGljIGludCByZXN0YXJ0X3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CkBAIC01NTYsMTIgKzU0NCw3IEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAkJbWVtc2V0KGJ1ZiwgMCwgYnVmc2l6ZSk7Ci0JCWlmIChkZm9wcy0+dGFrZV9pcnFsb2NrKSB7Ci0JCQlzcGluX2xvY2tfaXJxKCZkZXYtPndsLT5pcnFfbG9jayk7Ci0JCQlyZXQgPSBkZm9wcy0+cmVhZChkZXYsIGJ1ZiwgYnVmc2l6ZSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmRldi0+d2wtPmlycV9sb2NrKTsKLQkJfSBlbHNlCi0JCQlyZXQgPSBkZm9wcy0+cmVhZChkZXYsIGJ1ZiwgYnVmc2l6ZSk7CisJCXJldCA9IGRmb3BzLT5yZWFkKGRldiwgYnVmLCBidWZzaXplKTsKIAkJaWYgKHJldCA8PSAwKSB7CiAJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWJ1ZiwgYnVmb3JkZXIpOwogCQkJZXJyID0gcmV0OwpAQCAtNjIzLDEyICs2MDYsNyBAQAogCQllcnIgPSAtRUZBVUxUOwogCQlnb3RvIG91dF9mcmVlcGFnZTsKIAl9Ci0JaWYgKGRmb3BzLT50YWtlX2lycWxvY2spIHsKLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT53bC0+aXJxX2xvY2spOwotCQllcnIgPSBkZm9wcy0+d3JpdGUoZGV2LCBidWYsIGNvdW50KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPndsLT5pcnFfbG9jayk7Ci0JfSBlbHNlCi0JCWVyciA9IGRmb3BzLT53cml0ZShkZXYsIGJ1ZiwgY291bnQpOworCWVyciA9IGRmb3BzLT53cml0ZShkZXYsIGJ1ZiwgY291bnQpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWVwYWdlOwogCkBAIC02NDEsNyArNjE5LDcgQEAKIH0KIAogCi0jZGVmaW5lIEI0M19ERUJVR0ZTX0ZPUFMobmFtZSwgX3JlYWQsIF93cml0ZSwgX3Rha2VfaXJxbG9jaykJXAorI2RlZmluZSBCNDNfREVCVUdGU19GT1BTKG5hbWUsIF9yZWFkLCBfd3JpdGUpCQkJXAogCXN0YXRpYyBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyBmb3BzXyMjbmFtZSA9IHsJCVwKIAkJLnJlYWQJPSBfcmVhZCwJCQkJXAogCQkud3JpdGUJPSBfd3JpdGUsCQkJCVwKQEAgLTY1MiwyMCArNjMwLDE5IEBACiAJCX0sCQkJCQkJXAogCQkuZmlsZV9zdHJ1Y3Rfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGI0M19kZnNlbnRyeSwgXAogCQkJCQkgICAgICAgZmlsZV8jI25hbWUpLAlcCi0JCS50YWtlX2lycWxvY2sJPSBfdGFrZV9pcnFsb2NrLAkJXAogCX0KIAotQjQzX0RFQlVHRlNfRk9QUyhzaG0xNnJlYWQsIHNobTE2cmVhZF9fcmVhZF9maWxlLCBzaG0xNnJlYWRfX3dyaXRlX2ZpbGUsIDEpOwotQjQzX0RFQlVHRlNfRk9QUyhzaG0xNndyaXRlLCBOVUxMLCBzaG0xNndyaXRlX193cml0ZV9maWxlLCAxKTsKLUI0M19ERUJVR0ZTX0ZPUFMoc2htMzJyZWFkLCBzaG0zMnJlYWRfX3JlYWRfZmlsZSwgc2htMzJyZWFkX193cml0ZV9maWxlLCAxKTsKLUI0M19ERUJVR0ZTX0ZPUFMoc2htMzJ3cml0ZSwgTlVMTCwgc2htMzJ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8xNnJlYWQsIG1taW8xNnJlYWRfX3JlYWRfZmlsZSwgbW1pbzE2cmVhZF9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8xNndyaXRlLCBOVUxMLCBtbWlvMTZ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8zMnJlYWQsIG1taW8zMnJlYWRfX3JlYWRfZmlsZSwgbW1pbzMycmVhZF9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKG1taW8zMndyaXRlLCBOVUxMLCBtbWlvMzJ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKHR4c3RhdCwgdHhzdGF0X3JlYWRfZmlsZSwgTlVMTCwgMCk7Ci1CNDNfREVCVUdGU19GT1BTKHJlc3RhcnQsIE5VTEwsIHJlc3RhcnRfd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKGxvY3RscywgbG9jdGxzX3JlYWRfZmlsZSwgTlVMTCwgMCk7CitCNDNfREVCVUdGU19GT1BTKHNobTE2cmVhZCwgc2htMTZyZWFkX19yZWFkX2ZpbGUsIHNobTE2cmVhZF9fd3JpdGVfZmlsZSk7CitCNDNfREVCVUdGU19GT1BTKHNobTE2d3JpdGUsIE5VTEwsIHNobTE2d3JpdGVfX3dyaXRlX2ZpbGUpOworQjQzX0RFQlVHRlNfRk9QUyhzaG0zMnJlYWQsIHNobTMycmVhZF9fcmVhZF9maWxlLCBzaG0zMnJlYWRfX3dyaXRlX2ZpbGUpOworQjQzX0RFQlVHRlNfRk9QUyhzaG0zMndyaXRlLCBOVUxMLCBzaG0zMndyaXRlX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzE2cmVhZCwgbW1pbzE2cmVhZF9fcmVhZF9maWxlLCBtbWlvMTZyZWFkX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzE2d3JpdGUsIE5VTEwsIG1taW8xNndyaXRlX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzMycmVhZCwgbW1pbzMycmVhZF9fcmVhZF9maWxlLCBtbWlvMzJyZWFkX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobW1pbzMyd3JpdGUsIE5VTEwsIG1taW8zMndyaXRlX193cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFModHhzdGF0LCB0eHN0YXRfcmVhZF9maWxlLCBOVUxMKTsKK0I0M19ERUJVR0ZTX0ZPUFMocmVzdGFydCwgTlVMTCwgcmVzdGFydF93cml0ZV9maWxlKTsKK0I0M19ERUJVR0ZTX0ZPUFMobG9jdGxzLCBsb2N0bHNfcmVhZF9maWxlLCBOVUxMKTsKIAogCiBib29sIGI0M19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGVudW0gYjQzX2R5bmRiZyBmZWF0dXJlKQpAQCAtNzM4LDcgKzcxNSw2IEBACiAJCXJldHVybjsKIAl9CiAJbG9nLT5lbmQgPSAtMTsKLQlzcGluX2xvY2tfaW5pdCgmbG9nLT5sb2NrKTsKIAogCWRldi0+ZGZzZW50cnkgPSBlOwogCkBAIC04MjIsNyArNzk4LDYgQEAKIAlrZnJlZShlKTsKIH0KIAotLyogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZC4gKi8KIHZvaWQgYjQzX2RlYnVnZnNfbG9nX3R4c3RhdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgY29uc3Qgc3RydWN0IGI0M190eHN0YXR1cyAqc3RhdHVzKQogewpAQCAtODM0LDE0ICs4MDksMTIgQEAKIAlpZiAoIWUpCiAJCXJldHVybjsKIAlsb2cgPSAmZS0+dHhzdGF0bG9nOwotCXNwaW5fbG9jaygmbG9nLT5sb2NrKTsgLyogSVJRcyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAlpID0gbG9nLT5lbmQgKyAxOwogCWlmIChpID09IEI0M19OUl9MT0dHRURfVFhTVEFUVVMpCiAJCWkgPSAwOwogCWxvZy0+ZW5kID0gaTsKIAljdXIgPSAmKGxvZy0+bG9nW2ldKTsKIAltZW1jcHkoY3VyLCBzdGF0dXMsIHNpemVvZigqY3VyKSk7Ci0Jc3Bpbl91bmxvY2soJmxvZy0+bG9jayk7CiB9CiAKIHZvaWQgYjQzX2RlYnVnZnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmgKaW5kZXggYjlkNGRlNC4uZTQ3YjRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCkBAIC0yMyw5ICsyMywxMCBAQAogI2RlZmluZSBCNDNfTlJfTE9HR0VEX1RYU1RBVFVTCTEwMAogCiBzdHJ1Y3QgYjQzX3R4c3RhdHVzX2xvZyB7CisJLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJvdGVjdGVkIGJ5IHdsLT5tdXRleCAqLworCiAJc3RydWN0IGI0M190eHN0YXR1cyAqbG9nOwogCWludCBlbmQ7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RydWN0IGI0M19kZnNfZmlsZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggNzk2NGNjMy4uYTQ2N2VlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtODU2LDcgKzg1Niw2IEBACiAJCX0gZWxzZQogCQkJQjQzX1dBUk5fT04oMSk7CiAJfQotCXNwaW5fbG9ja19pbml0KCZyaW5nLT5sb2NrKTsKICNpZmRlZiBDT05GSUdfQjQzX0RFQlVHCiAJcmluZy0+bGFzdF9pbmplY3RlZF9vdmVyZmxvdyA9IGppZmZpZXM7CiAjZW5kaWYKQEAgLTExODgsNyArMTE4Nyw3IEBACiAJaGVhZGVyID0gJihyaW5nLT50eGhkcl9jYWNoZVsoc2xvdCAvIFRYX1NMT1RTX1BFUl9GUkFNRSkgKiBoZHJzaXplXSk7CiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHJpbmcsIHNsb3QpOwogCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihyaW5nLT5kZXYsIGhlYWRlciwKLQkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgaW5mbywgY29va2llKTsKKwkJCQkgc2tiLCBpbmZvLCBjb29raWUpOwogCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCXJpbmctPmN1cnJlbnRfc2xvdCA9IG9sZF90b3Bfc2xvdDsKIAkJcmluZy0+dXNlZF9zbG90cyA9IG9sZF91c2VkX3Nsb3RzOwpAQCAtMTMxNSw3ICsxMzE0LDYgQEAKIAlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmc7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKQEAgLTEzMzEsMTggKzEzMjksMjUgQEAKIAkJCWRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0KIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwotCS8qIENoZWNrIGlmIHRoZSBxdWV1ZSB3YXMgc3RvcHBlZCBpbiBtYWM4MDIxMSwKLQkgKiBidXQgd2UgZ290IGNhbGxlZCBuZXZlcnRoZWxlc3MuCi0JICogVGhhdCB3b3VsZCBiZSBhIG1hYzgwMjExIGJ1Zy4gKi8KLQlCNDNfV0FSTl9PTihyaW5nLT5zdG9wcGVkKTsKIAotCWlmICh1bmxpa2VseShmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKSkgewotCQliNDN3YXJuKGRldi0+d2wsICJETUEgcXVldWUgb3ZlcmZsb3dcbiIpOworCWlmICh1bmxpa2VseShyaW5nLT5zdG9wcGVkKSkgeworCQkvKiBXZSBnZXQgaGVyZSBvbmx5IGJlY2F1c2Ugb2YgYSBidWcgaW4gbWFjODAyMTEuCisJCSAqIEJlY2F1c2Ugb2YgYSByYWNlLCBvbmUgcGFja2V0IG1heSBiZSBxdWV1ZWQgYWZ0ZXIKKwkJICogdGhlIHF1ZXVlIGlzIHN0b3BwZWQsIHRodXMgd2UgZ290IGNhbGxlZCB3aGVuIHdlIHNob3VsZG4ndC4KKwkJICogRm9yIG5vdywganVzdCByZWZ1c2UgdGhlIHRyYW5zbWl0LiAqLworCQlpZiAoYjQzX2RlYnVnKGRldiwgQjQzX0RCR19ETUFWRVJCT1NFKSkKKwkJCWI0M2VycihkZXYtPndsLCAiUGFja2V0IGFmdGVyIHF1ZXVlIHN0b3BwZWRcbiIpOwogCQllcnIgPSAtRU5PU1BDOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseShXQVJOX09OKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpKSkgeworCQkvKiBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBhIHJlYWwgZXJyb3Igd2l0aCB0aGUgcXVldWUKKwkJICogZnVsbCwgYnV0IHF1ZXVlcyBub3Qgc3RvcHBlZC4gKi8KKwkJYjQzZXJyKGRldi0+d2wsICJETUEgcXVldWUgb3ZlcmZsb3dcbiIpOworCQllcnIgPSAtRU5PU1BDOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCkBAIC0xMzU2LDExICsxMzYxLDExIEBACiAJCSAqIGFueW1vcmUgYW5kIG11c3Qgbm90IHRyYW5zbWl0IGl0IHVuZW5jcnlwdGVkLiAqLwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllcnIgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAodW5saWtlbHkoZXJyKSkgewogCQliNDNlcnIoZGV2LT53bCwgIkRNQSB0eCBtYXBwaW5nIGZhaWx1cmVcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlyaW5nLT5ucl90eF9wYWNrZXRzKys7CiAJaWYgKChmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKSB8fApAQCAtMTM3MiwxMyArMTM3NywxMSBAQAogCQkJYjQzZGJnKGRldi0+d2wsICJTdG9wcGVkIFRYIHJpbmcgJWRcbiIsIHJpbmctPmluZGV4KTsKIAkJfQogCX0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOworb3V0OgogCiAJcmV0dXJuIGVycjsKIH0KIAotLyogQ2FsbGVkIHdpdGggSVJRcyBkaXNhYmxlZC4gKi8KIHZvaWQgYjQzX2RtYV9oYW5kbGVfdHhzdGF0dXMoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJICAgICBjb25zdCBzdHJ1Y3QgYjQzX3R4c3RhdHVzICpzdGF0dXMpCiB7CkBAIC0xMzkzLDggKzEzOTYsNiBAQAogCWlmICh1bmxpa2VseSghcmluZykpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmcmluZy0+bG9jayk7IC8qIElSUXMgYXJlIGFscmVhZHkgZGlzYWJsZWQuICovCi0KIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwogCW9wcyA9IHJpbmctPm9wczsKIAl3aGlsZSAoMSkgewpAQCAtMTQ1Myw4ICsxNDU0LDYgQEAKIAkJCWI0M2RiZyhkZXYtPndsLCAiV29rZSB1cCBUWCByaW5nICVkXG4iLCByaW5nLT5pbmRleCk7CiAJCX0KIAl9Ci0KLQlzcGluX3VubG9jaygmcmluZy0+bG9jayk7CiB9CiAKIHZvaWQgYjQzX2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtMTQ2MiwxNyArMTQ2MSwxNCBAQAogewogCWNvbnN0IGludCBucl9xdWV1ZXMgPSBkZXYtPndsLT5ody0+cXVldWVzOwogCXN0cnVjdCBiNDNfZG1hcmluZyAqcmluZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3F1ZXVlczsgaSsrKSB7CiAJCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eShkZXYsIGkpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUU7CiAJCXN0YXRzW2ldLmxpbWl0ID0gcmluZy0+bnJfc2xvdHMgLyBUWF9TTE9UU19QRVJfRlJBTUU7CiAJCXN0YXRzW2ldLmNvdW50ID0gcmluZy0+bnJfdHhfcGFja2V0czsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtMTU4MywyMiArMTU3OSwxNCBAQAogCiBzdGF0aWMgdm9pZCBiNDNfZG1hX3R4X3N1c3BlbmRfcmluZyhzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmcpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJQjQzX1dBUk5fT04oIXJpbmctPnR4KTsKIAlyaW5nLT5vcHMtPnR4X3N1c3BlbmQocmluZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfZG1hX3R4X3Jlc3VtZV9yaW5nKHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKIAlCNDNfV0FSTl9PTighcmluZy0+dHgpOwogCXJpbmctPm9wcy0+dHhfcmVzdW1lKHJpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBiNDNfZG1hX3R4X3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IDA1ZGRlNjQuLmYwYjA4MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIEI0M19ETUFfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKICNpbmNsdWRlICJiNDMuaCIKIApAQCAtMjQ0LDggKzI0Myw2IEBACiAJLyogVGhlIFFPUyBwcmlvcml0eSBhc3NpZ25lZCB0byB0aGlzIHJpbmcuIE9ubHkgdXNlZCBmb3IgVFggcmluZ3MuCiAJICogVGhpcyBpcyB0aGUgbWFjODAyMTEgInF1ZXVlIiB2YWx1ZS4gKi8KIAl1OCBxdWV1ZV9wcmlvOwotCS8qIExvY2ssIG9ubHkgdXNlZCBmb3IgVFguICovCi0Jc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKICNpZmRlZiBDT05GSUdfQjQzX0RFQlVHCiAJLyogTWF4aW11bSBudW1iZXIgb2YgdXNlZCBzbG90cy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9sby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMKaW5kZXggMjJkMGZiZC4uOTc2MTA0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCX0gZWxzZQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4MDgwMik7CiAJaWYgKHBoeS0+cmV2ID49IDIpCi0JCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2KTsKKwkJYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYsIGZhbHNlLCB0cnVlKTsKIAliNDNfZ3BoeV9jaGFubmVsX3N3aXRjaChkZXYsIDYsIDApOwogCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUxKTsJLyogZHVtbXkgcmVhZCAqLwogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCmluZGV4IGU3MWM4ZDkuLjdhOWEzZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwpAQCAtNTgsNiArNTgsNyBAQAogTU9EVUxFX0FVVEhPUigiTWFydGluIExhbmdlciIpOwogTU9EVUxFX0FVVEhPUigiU3RlZmFubyBCcml2aW8iKTsKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgQnVlc2NoIik7CitNT0RVTEVfQVVUSE9SKCJHw6Fib3IgU3RlZmFuaWsiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogTU9EVUxFX0ZJUk1XQVJFKEI0M19TVVBQT1JURURfRklSTVdBUkVfSUQpOwpAQCAtODAsMTMgKzgxLDE3IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKIAorc3RhdGljIGludCBtb2RwYXJhbV9od3RraXA7Cittb2R1bGVfcGFyYW1fbmFtZWQoaHd0a2lwLCBtb2RwYXJhbV9od3RraXAsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGh3dGtpcCwgIkVuYWJsZSBoYXJkd2FyZSB0a2lwLiIpOworCiBzdGF0aWMgaW50IG1vZHBhcmFtX3FvcyA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQocW9zLCBtb2RwYXJhbV9xb3MsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHFvcywgIkVuYWJsZSBRT1Mgc3VwcG9ydCAoZGVmYXVsdCBvbikiKTsKIAogc3RhdGljIGludCBtb2RwYXJhbV9idGNvZXggPSAxOwogbW9kdWxlX3BhcmFtX25hbWVkKGJ0Y29leCwgbW9kcGFyYW1fYnRjb2V4LCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhidGNvZXgsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RhbmNlIChkZWZhdWx0IG9uKSIpOworTU9EVUxFX1BBUk1fREVTQyhidGNvZXgsICJFbmFibGUgQmx1ZXRvb3RoIGNvZXhpc3RlbmNlIChkZWZhdWx0IG9uKSIpOwogCiBpbnQgYjQzX21vZHBhcmFtX3ZlcmJvc2UgPSBCNDNfVkVSQk9TSVRZX0RFRkFVTFQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQodmVyYm9zZSwgYjQzX21vZHBhcmFtX3ZlcmJvc2UsIGludCwgMDY0NCk7CkBAIC0yODYsNyArMjkxLDcgQEAKIAogc3RhdGljIHZvaWQgYjQzX3dpcmVsZXNzX2NvcmVfZXhpdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogc3RhdGljIGludCBiNDNfd2lyZWxlc3NfY29yZV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Ci1zdGF0aWMgdm9pZCBiNDNfd2lyZWxlc3NfY29yZV9zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CitzdGF0aWMgc3RydWN0IGI0M193bGRldiAqIGI0M193aXJlbGVzc19jb3JlX3N0b3Aoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHN0YXRpYyBpbnQgYjQzX3dpcmVsZXNzX2NvcmVfc3RhcnQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAogc3RhdGljIGludCBiNDNfcmF0ZWxpbWl0KHN0cnVjdCBiNDNfd2wgKndsKQpAQCAtMzg1LDcgKzM5MCw3IEBACiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19TSE1fQ09OVFJPTCwgY29udHJvbCk7CiB9CiAKLXUzMiBfX2I0M19zaG1fcmVhZDMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpCit1MzIgYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKIHsKIAl1MzIgcmV0OwogCkBAIC0zOTUsOSArNDAwLDggQEAKIAkJCS8qIFVuYWxpZ25lZCBhY2Nlc3MgKi8KIAkJCWI0M19zaG1fY29udHJvbF93b3JkKGRldiwgcm91dGluZywgb2Zmc2V0ID4+IDIpOwogCQkJcmV0ID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1NITV9EQVRBX1VOQUxJR05FRCk7Ci0JCQlyZXQgPDw9IDE2OwogCQkJYjQzX3NobV9jb250cm9sX3dvcmQoZGV2LCByb3V0aW5nLCAob2Zmc2V0ID4+IDIpICsgMSk7Ci0JCQlyZXQgfD0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1NITV9EQVRBKTsKKwkJCXJldCB8PSAoKHUzMiliNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEpKSA8PCAxNjsKIAogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTQwOSwyMCArNDEzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi11MzIgYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKLXsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCXJldCA9IF9fYjQzX3NobV9yZWFkMzIoZGV2LCByb3V0aW5nLCBvZmZzZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdTE2IF9fYjQzX3NobV9yZWFkMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKK3UxNiBiNDNfc2htX3JlYWQxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KQogewogCXUxNiByZXQ7CiAKQEAgLTQ0MywyMCArNDM0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi11MTYgYjQzX3NobV9yZWFkMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCkKLXsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MTYgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCXJldCA9IF9fYjQzX3NobV9yZWFkMTYoZGV2LCByb3V0aW5nLCBvZmZzZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBfX2I0M19zaG1fd3JpdGUzMihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCit2b2lkIGI0M19zaG1fd3JpdGUzMihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MzIgdmFsdWUpCiB7CiAJaWYgKHJvdXRpbmcgPT0gQjQzX1NITV9TSEFSRUQpIHsKIAkJQjQzX1dBUk5fT04ob2Zmc2V0ICYgMHgwMDAxKTsKQEAgLTQ2NCw5ICs0NDIsMTAgQEAKIAkJCS8qIFVuYWxpZ25lZCBhY2Nlc3MgKi8KIAkJCWI0M19zaG1fY29udHJvbF93b3JkKGRldiwgcm91dGluZywgb2Zmc2V0ID4+IDIpOwogCQkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19TSE1fREFUQV9VTkFMSUdORUQsCi0JCQkJICAgICh2YWx1ZSA+PiAxNikgJiAweGZmZmYpOworCQkJCSAgICB2YWx1ZSAmIDB4RkZGRik7CiAJCQliNDNfc2htX2NvbnRyb2xfd29yZChkZXYsIHJvdXRpbmcsIChvZmZzZXQgPj4gMikgKyAxKTsKLQkJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsIHZhbHVlICYgMHhmZmZmKTsKKwkJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsCisJCQkJICAgICh2YWx1ZSA+PiAxNikgJiAweEZGRkYpOwogCQkJcmV0dXJuOwogCQl9CiAJCW9mZnNldCA+Pj0gMjsKQEAgLTQ3NSwxNyArNDU0LDcgQEAKIAliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1NITV9EQVRBLCB2YWx1ZSk7CiB9CiAKLXZvaWQgYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+c2htX2xvY2ssIGZsYWdzKTsKLQlfX2I0M19zaG1fd3JpdGUzMihkZXYsIHJvdXRpbmcsIG9mZnNldCwgdmFsdWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIF9fYjQzX3NobV93cml0ZTE2KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKK3ZvaWQgYjQzX3NobV93cml0ZTE2KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUxNiB2YWx1ZSkKIHsKIAlpZiAocm91dGluZyA9PSBCNDNfU0hNX1NIQVJFRCkgewogCQlCNDNfV0FSTl9PTihvZmZzZXQgJiAweDAwMDEpOwpAQCAtNTAxLDE2ICs0NzAsNiBAQAogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fU0hNX0RBVEEsIHZhbHVlKTsKIH0KIAotdm9pZCBiNDNfc2htX3dyaXRlMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCwgdTE2IHZhbHVlKQotewotCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5zaG1fbG9jaywgZmxhZ3MpOwotCV9fYjQzX3NobV93cml0ZTE2KGRldiwgcm91dGluZywgb2Zmc2V0LCB2YWx1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPnNobV9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qIFJlYWQgSG9zdEZsYWdzICovCiB1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewpAQCAtNjgwLDIyICs2MzksMTEgQEAKIAliNDNfc2V0X3Nsb3RfdGltZShkZXYsIDIwKTsKIH0KIAotLyogU3luY2hyb25pemUgSVJRIHRvcC0gYW5kIGJvdHRvbS1oYWxmLgotICogSVJRcyBtdXN0IGJlIG1hc2tlZCBiZWZvcmUgY2FsbGluZyB0aGlzLgotICogVGhpcyBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCB0aGUgaXJxX2xvY2sgaGVsZC4KLSAqLwotc3RhdGljIHZvaWQgYjQzX3N5bmNocm9uaXplX2lycShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci0Jc3luY2hyb25pemVfaXJxKGRldi0+ZGV2LT5pcnEpOwotCXRhc2tsZXRfa2lsbCgmZGV2LT5pc3JfdGFza2xldCk7Ci19Ci0KIC8qIER1bW15VHJhbnNtaXNzaW9uIGZ1bmN0aW9uLCBhcyBkb2N1bWVudGVkIG9uCi0gKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvRHVtbXlUcmFuc21pc3Npb24KKyAqIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvRHVtbXlUcmFuc21pc3Npb24KICAqLwotdm9pZCBiNDNfZHVtbXlfdHJhbnNtaXNzaW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3ZvaWQgYjQzX2R1bW15X3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb2ZkbSwgYm9vbCBwYV9vbikKIHsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAl1bnNpZ25lZCBpbnQgaSwgbWF4X2xvb3A7CiAJdTE2IHZhbHVlOwpAQCAtNzA3LDQxICs2NTUsNDYgQEAKIAkJMHgwMDAwMDAwMCwKIAl9OwogCi0Jc3dpdGNoIChwaHktPnR5cGUpIHsKLQljYXNlIEI0M19QSFlUWVBFX0E6CisJaWYgKG9mZG0pIHsKIAkJbWF4X2xvb3AgPSAweDFFOwogCQlidWZmZXJbMF0gPSAweDAwMDIwMUNDOwotCQlicmVhazsKLQljYXNlIEI0M19QSFlUWVBFX0I6Ci0JY2FzZSBCNDNfUEhZVFlQRV9HOgorCX0gZWxzZSB7CiAJCW1heF9sb29wID0gMHhGQTsKIAkJYnVmZmVyWzBdID0gMHgwMDBCODQ2RTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQjQzX1dBUk5fT04oMSk7Ci0JCXJldHVybjsKIAl9CiAKLQlzcGluX2xvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwotCXdyaXRlX2xvY2soJndsLT50eF9sb2NrKTsKLQogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCiAJCWI0M19yYW1fd3JpdGUoZGV2LCBpICogNCwgYnVmZmVyW2ldKTsKIAotCS8qIENvbW1pdCB3cml0ZXMgKi8KLQliNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fTUFDQ1RMKTsKLQogCWI0M193cml0ZTE2KGRldiwgMHgwNTY4LCAweDAwMDApOwotCWI0M193cml0ZTE2KGRldiwgMHgwN0MwLCAweDAwMDApOwotCXZhbHVlID0gKChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkgPyAxIDogMCk7CisJaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8IDExKQorCQliNDNfd3JpdGUxNihkZXYsIDB4MDdDMCwgMHgwMDAwKTsKKwllbHNlCisJCWI0M193cml0ZTE2KGRldiwgMHgwN0MwLCAweDAxMDApOworCXZhbHVlID0gKG9mZG0gPyAweDQxIDogMHg0MCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MEMsIHZhbHVlKTsKKwlpZiAoKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9OKSB8fCAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0xQKSkKKwkJYjQzX3dyaXRlMTYoZGV2LCAweDA1MTQsIDB4MUEwMik7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MDgsIDB4MDAwMCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MEEsIDB4MDAwMCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1NEMsIDB4MDAwMCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1NkEsIDB4MDAxNCk7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1NjgsIDB4MDgyNik7CiAJYjQzX3dyaXRlMTYoZGV2LCAweDA1MDAsIDB4MDAwMCk7Ci0JYjQzX3dyaXRlMTYoZGV2LCAweDA1MDIsIDB4MDAzMCk7CisJaWYgKCFwYV9vbiAmJiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX04pKSB7CisJCS8vU1BFQyBUT0RPCisJfQorCisJc3dpdGNoIChwaHktPnR5cGUpIHsKKwljYXNlIEI0M19QSFlUWVBFX046CisJCWI0M193cml0ZTE2KGRldiwgMHgwNTAyLCAweDAwRDApOworCQlicmVhazsKKwljYXNlIEI0M19QSFlUWVBFX0xQOgorCQliNDNfd3JpdGUxNihkZXYsIDB4MDUwMiwgMHgwMDUwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYjQzX3dyaXRlMTYoZGV2LCAweDA1MDIsIDB4MDAzMCk7CisJfQogCiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA8PSAweDUpCiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDUxLCAweDAwMTcpOwpAQCAtNzY1LDkgKzcxOCw2IEBACiAJfQogCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5yYWRpb19yZXYgPD0gMHg1KQogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MSwgMHgwMDM3KTsKLQotCXdyaXRlX3VubG9jaygmd2wtPnR4X2xvY2spOwotCXNwaW5fdW5sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQga2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTc5NiwxOCArNzQ2LDE5IEBACiBzdGF0aWMgdm9pZCBrZXltYWNfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCwgY29uc3QgdTggKmFkZHIpCiB7CiAJdTMyIGFkZHJ0bXBbMl0gPSB7IDAsIDAsIH07Ci0JdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKKwl1OCBwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVMgKiAyOwogCiAJaWYgKGI0M19uZXdfa2lkeF9hcGkoZGV2KSkKLQkJcGVyX3N0YV9rZXlzX3N0YXJ0ID0gNDsKKwkJcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTOwogCi0JQjQzX1dBUk5fT04oaW5kZXggPCBwZXJfc3RhX2tleXNfc3RhcnQpOwotCS8qIFdlIGhhdmUgdHdvIGRlZmF1bHQgVFgga2V5cyBhbmQgcG9zc2libHkgdHdvIGRlZmF1bHQgUlgga2V5cy4KKwlCNDNfV0FSTl9PTihpbmRleCA8IHBhaXJ3aXNlX2tleXNfc3RhcnQpOworCS8qIFdlIGhhdmUgZm91ciBkZWZhdWx0IFRYIGtleXMgYW5kIHBvc3NpYmx5IGZvdXIgZGVmYXVsdCBSWCBrZXlzLgogCSAqIFBoeXNpY2FsIG1hYyAwIGlzIG1hcHBlZCB0byBwaHlzaWNhbCBrZXkgNCBvciA4LCBkZXBlbmRpbmcKIAkgKiBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbi4KIAkgKiBTbyB3ZSBtdXN0IGFkanVzdCB0aGUgaW5kZXggaGVyZS4KIAkgKi8KLQlpbmRleCAtPSBwZXJfc3RhX2tleXNfc3RhcnQ7CisJaW5kZXggLT0gcGFpcndpc2Vfa2V5c19zdGFydDsKKwlCNDNfV0FSTl9PTihpbmRleCA+PSBCNDNfTlJfUEFJUldJU0VfS0VZUyk7CiAKIAlpZiAoYWRkcikgewogCQlhZGRydG1wWzBdID0gYWRkclswXTsKQEAgLTgxOCwyNyArNzY5LDkwIEBACiAJCWFkZHJ0bXBbMV0gfD0gKCh1MzIpIChhZGRyWzVdKSA8PCA4KTsKIAl9CiAKLQlpZiAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDUpIHsKLQkJLyogUmVjZWl2ZSBtYXRjaCB0cmFuc21pdHRlciBhZGRyZXNzIG1lY2hhbmlzbSAqLwotCQliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1JDTVRBLAotCQkJCShpbmRleCAqIDIpICsgMCwgYWRkcnRtcFswXSk7Ci0JCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fUkNNVEEsCi0JCQkJKGluZGV4ICogMikgKyAxLCBhZGRydG1wWzFdKTsKLQl9IGVsc2UgewotCQkvKiBSWEUgKFJlY2VpdmUgRW5naW5lKSBhbmQKLQkJICogUFNNIChQcm9ncmFtbWFibGUgU3RhdGUgTWFjaGluZSkgbWVjaGFuaXNtCi0JCSAqLwotCQlpZiAoaW5kZXggPCA4KSB7Ci0JCQkvKiBUT0RPIHdyaXRlIHRvIFJDTSAxNiwgMTksIDIyIGFuZCAyNSAqLwotCQl9IGVsc2UgewotCQkJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsCi0JCQkJCUI0M19TSE1fU0hfUFNNICsgKGluZGV4ICogNikgKyAwLAotCQkJCQlhZGRydG1wWzBdKTsKLQkJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAotCQkJCQlCNDNfU0hNX1NIX1BTTSArIChpbmRleCAqIDYpICsgNCwKLQkJCQkJYWRkcnRtcFsxXSk7Ci0JCX0KKwkvKiBSZWNlaXZlIG1hdGNoIHRyYW5zbWl0dGVyIGFkZHJlc3MgKFJDTVRBKSBtZWNoYW5pc20gKi8KKwliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1JDTVRBLAorCQkJKGluZGV4ICogMikgKyAwLCBhZGRydG1wWzBdKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1JDTVRBLAorCQkJKGluZGV4ICogMikgKyAxLCBhZGRydG1wWzFdKTsKK30KKworLyogVGhlIHVjb2RlIHdpbGwgdXNlIHBoYXNlMSBrZXkgd2l0aCBURUsga2V5IHRvIGRlY3J5cHQgcnggcGFja2V0cy4KKyAqIFdoZW4gYSBwYWNrZXQgaXMgcmVjZWl2ZWQsIHRoZSBpdjMyIGlzIGNoZWNrZWQuCisgKiAtIGlmIGl0IGRvZXNuJ3QgdGhlIHBhY2tldCBpcyByZXR1cm5lZCB3aXRob3V0IG1vZGlmaWNhdGlvbiAoYW5kIHNvZnR3YXJlCisgKiAgIGRlY3J5cHRpb24gY2FuIGJlIGRvbmUpLiBUaGF0J3Mgd2hhdCBoYXBwZW4gd2hlbiBpdjE2IHdyYXAuCisgKiAtIGlmIGl0IGRvZXMsIHRoZSByYzQga2V5IGlzIGNvbXB1dGVkLCBhbmQgZGVjcnlwdGlvbiBpcyB0cmllZC4KKyAqICAgRWl0aGVyIGl0IHdpbGwgc3VjY2VzcyBhbmQgQjQzX1JYX01BQ19ERUMgaXMgcmV0dXJuZWQsCisgKiAgIGVpdGhlciBpdCBmYWlscyBhbmQgQjQzX1JYX01BQ19ERUN8QjQzX1JYX01BQ19ERUNFUlIgaXMgcmV0dXJuZWQKKyAqICAgYW5kIHRoZSBwYWNrZXQgaXMgbm90IHVzYWJsZSAoaXQgZ290IG1vZGlmaWVkIGJ5IHRoZSB1Y29kZSkuCisgKiBTbyBpbiBvcmRlciB0byBuZXZlciBoYXZlIEI0M19SWF9NQUNfREVDRVJSLCB3ZSBzaG91bGQgcHJvdmlkZQorICogYSBpdjMyIGFuZCBwaGFzZTFrZXkgdGhhdCBtYXRjaC4gQmVjYXVzZSB3ZSBkcm9wIHBhY2tldHMgaW4gY2FzZSBvZgorICogQjQzX1JYX01BQ19ERUNFUlIsIGlmIHdlIGhhdmUgYSBjb3JyZWN0IGl2MzIgYnV0IGEgd3JvbmcgcGhhc2Uxa2V5LCBhbGwKKyAqIHBhY2tldHMgd2lsbCBiZSBsb3N0IHdpdGhvdXQgaGlnaGVyIGxheWVyIGtub3dpbmcgKGllIG5vIHJlc3luYyBwb3NzaWJsZQorICogdW50aWwgbmV4dCB3cmFwKS4KKyAqCisgKiBOT1RFIDogdGhpcyBzaG91bGQgc3VwcG9ydCA1MCBrZXkgbGlrZSBSQ01UQSBiZWNhdXNlCisgKiAoQjQzX1NITV9TSF9LRVlJRFhCTE9DSyAtIEI0M19TSE1fU0hfVEtJUFRTQ1RUQUspLzE0ID0gNTAKKyAqLworc3RhdGljIHZvaWQgcnhfdGtpcF9waGFzZTFfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCwgdTMyIGl2MzIsCisJCXUxNiAqcGhhc2Uxa2V5KQoreworCXVuc2lnbmVkIGludCBpOworCXUzMiBvZmZzZXQ7CisJdTggcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTICogMjsKKworCWlmICghbW9kcGFyYW1faHd0a2lwKQorCQlyZXR1cm47CisKKwlpZiAoYjQzX25ld19raWR4X2FwaShkZXYpKQorCQlwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVM7CisKKwlCNDNfV0FSTl9PTihpbmRleCA8IHBhaXJ3aXNlX2tleXNfc3RhcnQpOworCS8qIFdlIGhhdmUgZm91ciBkZWZhdWx0IFRYIGtleXMgYW5kIHBvc3NpYmx5IGZvdXIgZGVmYXVsdCBSWCBrZXlzLgorCSAqIFBoeXNpY2FsIG1hYyAwIGlzIG1hcHBlZCB0byBwaHlzaWNhbCBrZXkgNCBvciA4LCBkZXBlbmRpbmcKKwkgKiBvbiB0aGUgZmlybXdhcmUgdmVyc2lvbi4KKwkgKiBTbyB3ZSBtdXN0IGFkanVzdCB0aGUgaW5kZXggaGVyZS4KKwkgKi8KKwlpbmRleCAtPSBwYWlyd2lzZV9rZXlzX3N0YXJ0OworCUI0M19XQVJOX09OKGluZGV4ID49IEI0M19OUl9QQUlSV0lTRV9LRVlTKTsKKworCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX0tFWVMpKSB7CisJCWI0M2RiZyhkZXYtPndsLCAicnhfdGtpcF9waGFzZTFfd3JpdGUgOiBpZHggMHgleCwgaXYzMiAweCV4XG4iLAorCQkJCWluZGV4LCBpdjMyKTsKIAl9CisJLyogV3JpdGUgdGhlIGtleSB0byB0aGUgIFJYIHRraXAgc2hhcmVkIG1lbSAqLworCW9mZnNldCA9IEI0M19TSE1fU0hfVEtJUFRTQ1RUQUsgKyBpbmRleCAqICgxMCArIDQpOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSArPSAyKSB7CisJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBvZmZzZXQgKyBpLAorCQkJCXBoYXNlMWtleSA/IHBoYXNlMWtleVtpIC8gMl0gOiAwKTsKKwl9CisJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIG9mZnNldCArIGksIGl2MzIpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBvZmZzZXQgKyBpICsgMiwgaXYzMiA+PiAxNik7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19vcF91cGRhdGVfdGtpcF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLCBjb25zdCB1OCAqYWRkciwKKwkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCWludCBpbmRleCA9IGtleWNvbmYtPmh3X2tleV9pZHg7CisKKwlpZiAoQjQzX1dBUk5fT04oIW1vZHBhcmFtX2h3dGtpcCkpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfSU5JVElBTElaRUQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWtleW1hY193cml0ZShkZXYsIGluZGV4LCBOVUxMKTsJLyogRmlyc3QgemVybyBvdXQgbWFjIHRvIGF2b2lkIHJhY2UgKi8KKworCXJ4X3RraXBfcGhhc2UxX3dyaXRlKGRldiwgaW5kZXgsIGl2MzIsIHBoYXNlMWtleSk7CisJa2V5bWFjX3dyaXRlKGRldiwgaW5kZXgsIGFkZHIpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgZG9fa2V5X3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTg0NiwyMCArODYwLDMzIEBACiAJCQkgY29uc3QgdTggKmtleSwgc2l6ZV90IGtleV9sZW4sIGNvbnN0IHU4ICptYWNfYWRkcikKIHsKIAl1OCBidWZbQjQzX1NFQ19LRVlTSVpFXSA9IHsgMCwgfTsKLQl1OCBwZXJfc3RhX2tleXNfc3RhcnQgPSA4OworCXU4IHBhaXJ3aXNlX2tleXNfc3RhcnQgPSBCNDNfTlJfR1JPVVBfS0VZUyAqIDI7CiAKIAlpZiAoYjQzX25ld19raWR4X2FwaShkZXYpKQotCQlwZXJfc3RhX2tleXNfc3RhcnQgPSA0OworCQlwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVM7CiAKLQlCNDNfV0FSTl9PTihpbmRleCA+PSBkZXYtPm1heF9ucl9rZXlzKTsKKwlCNDNfV0FSTl9PTihpbmRleCA+PSBBUlJBWV9TSVpFKGRldi0+a2V5KSk7CiAJQjQzX1dBUk5fT04oa2V5X2xlbiA+IEI0M19TRUNfS0VZU0laRSk7CiAKLQlpZiAoaW5kZXggPj0gcGVyX3N0YV9rZXlzX3N0YXJ0KQorCWlmIChpbmRleCA+PSBwYWlyd2lzZV9rZXlzX3N0YXJ0KQogCQlrZXltYWNfd3JpdGUoZGV2LCBpbmRleCwgTlVMTCk7CS8qIEZpcnN0IHplcm8gb3V0IG1hYy4gKi8KKwlpZiAoYWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQKSB7CisJCS8qCisJCSAqIFdlIHNob3VsZCBwcm92aWRlIGFuIGluaXRpYWwgaXYzMiwgcGhhc2Uxa2V5IHBhaXIuCisJCSAqIFdlIGNvdWxkIHN0YXJ0IHdpdGggaXYzMj0wIGFuZCBjb21wdXRlIHRoZSBjb3JyZXNwb25kaW5nCisJCSAqIHBoYXNlMWtleSwgYnV0IHRoaXMgbWVhbnMgY2FsbGluZyBpZWVlODAyMTFfZ2V0X3RraXBfa2V5CisJCSAqIHdpdGggYSBmYWtlIHNrYiAob3IgZXhwb3J0IG90aGVyIHRraXAgZnVuY3Rpb24pLgorCQkgKiBCZWNhdXNlIHdlIGFyZSBsYXp5IHdlIGhvcGUgaXYzMiB3b24ndCBzdGFydCB3aXRoCisJCSAqIDB4ZmZmZmZmZmYgYW5kIGxldCdzIGI0M19vcF91cGRhdGVfdGtpcF9rZXkgcHJvdmlkZSBhCisJCSAqIGNvcnJlY3QgcGFpci4KKwkJICovCisJCXJ4X3RraXBfcGhhc2UxX3dyaXRlKGRldiwgaW5kZXgsIDB4ZmZmZmZmZmYsICh1MTYqKWJ1Zik7CisJfSBlbHNlIGlmIChpbmRleCA+PSBwYWlyd2lzZV9rZXlzX3N0YXJ0KSAvKiBjbGVhciBpdCAqLworCQlyeF90a2lwX3BoYXNlMV93cml0ZShkZXYsIGluZGV4LCAwLCBOVUxMKTsKIAlpZiAoa2V5KQogCQltZW1jcHkoYnVmLCBrZXksIGtleV9sZW4pOwogCWtleV93cml0ZShkZXYsIGluZGV4LCBhbGdvcml0aG0sIGJ1Zik7Ci0JaWYgKGluZGV4ID49IHBlcl9zdGFfa2V5c19zdGFydCkKKwlpZiAoaW5kZXggPj0gcGFpcndpc2Vfa2V5c19zdGFydCkKIAkJa2V5bWFjX3dyaXRlKGRldiwgaW5kZXgsIG1hY19hZGRyKTsKIAogCWRldi0+a2V5W2luZGV4XS5hbGdvcml0aG0gPSBhbGdvcml0aG07CkBAIC04NzIsMjEgKzg5OSwzMyBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYpCiB7CiAJaW50IGk7Ci0JaW50IHN0YV9rZXlzX3N0YXJ0OworCWludCBwYWlyd2lzZV9rZXlzX3N0YXJ0OwogCisJLyogRm9yIEFMR19US0lQIHRoZSBrZXkgaXMgZW5jb2RlZCBhcyBhIDI1Ni1iaXQgKDMyIGJ5dGUpIGRhdGEgYmxvY2s6CisJICogCS0gVGVtcG9yYWwgRW5jcnlwdGlvbiBLZXkgKDEyOCBiaXRzKQorCSAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgVHggTUlDIEtleSAoNjQgYml0cykKKwkgKiAJLSBUZW1wb3JhbCBBdXRoZW50aWNhdG9yIFJ4IE1JQyBLZXkgKDY0IGJpdHMpCisJICoKKwkgKiAJSGFyZHdhcmUgb25seSBzdG9yZSBURUsKKwkgKi8KKwlpZiAoYWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQICYmIGtleV9sZW4gPT0gMzIpCisJCWtleV9sZW4gPSAxNjsKIAlpZiAoa2V5X2xlbiA+IEI0M19TRUNfS0VZU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChpID0gMDsgaSA8IGRldi0+bWF4X25yX2tleXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+a2V5KTsgaSsrKSB7CiAJCS8qIENoZWNrIHRoYXQgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIHRoaXMga2V5LiAqLwogCQlCNDNfV0FSTl9PTihkZXYtPmtleVtpXS5rZXljb25mID09IGtleWNvbmYpOwogCX0KIAlpZiAoaW5kZXggPCAwKSB7CiAJCS8qIFBhaXJ3aXNlIGtleS4gR2V0IGFuIGVtcHR5IHNsb3QgZm9yIHRoZSBrZXkuICovCiAJCWlmIChiNDNfbmV3X2tpZHhfYXBpKGRldikpCi0JCQlzdGFfa2V5c19zdGFydCA9IDQ7CisJCQlwYWlyd2lzZV9rZXlzX3N0YXJ0ID0gQjQzX05SX0dST1VQX0tFWVM7CiAJCWVsc2UKLQkJCXN0YV9rZXlzX3N0YXJ0ID0gODsKLQkJZm9yIChpID0gc3RhX2tleXNfc3RhcnQ7IGkgPCBkZXYtPm1heF9ucl9rZXlzOyBpKyspIHsKKwkJCXBhaXJ3aXNlX2tleXNfc3RhcnQgPSBCNDNfTlJfR1JPVVBfS0VZUyAqIDI7CisJCWZvciAoaSA9IHBhaXJ3aXNlX2tleXNfc3RhcnQ7CisJCSAgICAgaSA8IHBhaXJ3aXNlX2tleXNfc3RhcnQgKyBCNDNfTlJfUEFJUldJU0VfS0VZUzsKKwkJICAgICBpKyspIHsKKwkJCUI0M19XQVJOX09OKGkgPj0gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCQkJaWYgKCFkZXYtPmtleVtpXS5rZXljb25mKSB7CiAJCQkJLyogZm91bmQgZW1wdHkgKi8KIAkJCQlpbmRleCA9IGk7CkBAIC05MTQsNyArOTUzLDcgQEAKIAogc3RhdGljIGludCBiNDNfa2V5X2NsZWFyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGluZGV4KQogewotCWlmIChCNDNfV0FSTl9PTigoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gZGV2LT5tYXhfbnJfa2V5cykpKQorCWlmIChCNDNfV0FSTl9PTigoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gQVJSQVlfU0laRShkZXYtPmtleSkpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZG9fa2V5X3dyaXRlKGRldiwgaW5kZXgsIEI0M19TRUNfQUxHT19OT05FLAogCQkgICAgIE5VTEwsIEI0M19TRUNfS0VZU0laRSwgTlVMTCk7CkBAIC05MjksMTYgKzk2OCwxOSBAQAogCiBzdGF0aWMgdm9pZCBiNDNfY2xlYXJfa2V5cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JaW50IGk7CisJaW50IGksIGNvdW50OwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bWF4X25yX2tleXM7IGkrKykKKwlpZiAoYjQzX25ld19raWR4X2FwaShkZXYpKQorCQljb3VudCA9IEI0M19OUl9HUk9VUF9LRVlTICsgQjQzX05SX1BBSVJXSVNFX0tFWVM7CisJZWxzZQorCQljb3VudCA9IEI0M19OUl9HUk9VUF9LRVlTICogMiArIEI0M19OUl9QQUlSV0lTRV9LRVlTOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCQliNDNfa2V5X2NsZWFyKGRldiwgaSk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19kdW1wX2tleW1lbW9yeShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JdW5zaWduZWQgaW50IGksIGluZGV4LCBvZmZzZXQ7Ci0JREVDTEFSRV9NQUNfQlVGKG1hY2J1Zik7CisJdW5zaWduZWQgaW50IGksIGluZGV4LCBjb3VudCwgb2Zmc2V0LCBwYWlyd2lzZV9rZXlzX3N0YXJ0OwogCXU4IG1hY1tFVEhfQUxFTl07CiAJdTE2IGFsZ287CiAJdTMyIHJjbXRhMDsKQEAgLTk1Miw3ICs5OTQsMTQgQEAKIAloZiA9IGI0M19oZl9yZWFkKGRldik7CiAJYjQzZGJnKGRldi0+d2wsICJIYXJkd2FyZSBrZXkgbWVtb3J5IGR1bXA6ICBVU0VERUZLRVlTPSV1XG4iLAogCSAgICAgICAhIShoZiAmIEI0M19IRl9VU0VERUZLRVlTKSk7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZGV2LT5tYXhfbnJfa2V5czsgaW5kZXgrKykgeworCWlmIChiNDNfbmV3X2tpZHhfYXBpKGRldikpIHsKKwkJcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTOworCQljb3VudCA9IEI0M19OUl9HUk9VUF9LRVlTICsgQjQzX05SX1BBSVJXSVNFX0tFWVM7CisJfSBlbHNlIHsKKwkJcGFpcndpc2Vfa2V5c19zdGFydCA9IEI0M19OUl9HUk9VUF9LRVlTICogMjsKKwkJY291bnQgPSBCNDNfTlJfR1JPVVBfS0VZUyAqIDIgKyBCNDNfTlJfUEFJUldJU0VfS0VZUzsKKwl9CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KyspIHsKIAkJa2V5ID0gJihkZXYtPmtleVtpbmRleF0pOwogCQlwcmludGsoS0VSTl9ERUJVRyAiS2V5IHNsb3QgJTAydTogJXMiLAogCQkgICAgICAgaW5kZXgsIChrZXktPmtleWNvbmYgPT0gTlVMTCkgPyAiICIgOiAiKiIpOwpAQCAtOTY2LDE1ICsxMDE1LDIyIEBACiAJCQkJICAgICAgQjQzX1NITV9TSF9LRVlJRFhCTE9DSyArIChpbmRleCAqIDIpKTsKIAkJcHJpbnRrKCIgICBBbGdvOiAlMDRYLyUwMlgiLCBhbGdvLCBrZXktPmFsZ29yaXRobSk7CiAKLQkJaWYgKGluZGV4ID49IDQpIHsKKwkJaWYgKGluZGV4ID49IHBhaXJ3aXNlX2tleXNfc3RhcnQpIHsKKwkJCWlmIChrZXktPmFsZ29yaXRobSA9PSBCNDNfU0VDX0FMR09fVEtJUCkgeworCQkJCXByaW50aygiICAgVEtJUDogIik7CisJCQkJb2Zmc2V0ID0gQjQzX1NITV9TSF9US0lQVFNDVFRBSyArIChpbmRleCAtIDQpICogKDEwICsgNCk7CisJCQkJZm9yIChpID0gMDsgaSA8IDE0OyBpICs9IDIpIHsKKwkJCQkJdTE2IHRtcCA9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TSEFSRUQsIG9mZnNldCArIGkpOworCQkJCQlwcmludGsoIiUwMlglMDJYIiwgKHRtcCAmIDB4RkYpLCAoKHRtcCA+PiA4KSAmIDB4RkYpKTsKKwkJCQl9CisJCQl9CiAJCQlyY210YTAgPSBiNDNfc2htX3JlYWQzMihkZXYsIEI0M19TSE1fUkNNVEEsCi0JCQkJCQkoKGluZGV4IC0gNCkgKiAyKSArIDApOworCQkJCQkJKChpbmRleCAtIHBhaXJ3aXNlX2tleXNfc3RhcnQpICogMikgKyAwKTsKIAkJCXJjbXRhMSA9IGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9SQ01UQSwKLQkJCQkJCSgoaW5kZXggLSA0KSAqIDIpICsgMSk7CisJCQkJCQkoKGluZGV4IC0gcGFpcndpc2Vfa2V5c19zdGFydCkgKiAyKSArIDEpOwogCQkJKigoX19sZTMyICopKCZtYWNbMF0pKSA9IGNwdV90b19sZTMyKHJjbXRhMCk7CiAJCQkqKChfX2xlMTYgKikoJm1hY1s0XSkpID0gY3B1X3RvX2xlMTYocmNtdGExKTsKLQkJCXByaW50aygiICAgTUFDOiAlcyIsCi0JCQkgICAgICAgcHJpbnRfbWFjKG1hY2J1ZiwgbWFjKSk7CisJCQlwcmludGsoIiAgIE1BQzogJXBNIiwgbWFjKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoIiAgIERFRkFVTFQgS0VZIik7CiAJCXByaW50aygiXG4iKTsKQEAgLTEzMzgsNyArMTM5NCw4IEBACiAJCXJldHVybiBCNDNfVFhIX1BIWV9BTlQyOwogCWNhc2UgQjQzX0FOVEVOTkEzOgogCQlyZXR1cm4gQjQzX1RYSF9QSFlfQU5UMzsKLQljYXNlIEI0M19BTlRFTk5BX0FVVE86CisJY2FzZSBCNDNfQU5URU5OQV9BVVRPMDoKKwljYXNlIEI0M19BTlRFTk5BX0FVVE8xOgogCQlyZXR1cm4gQjQzX1RYSF9QSFlfQU5UMDFBVVRPOwogCX0KIAlCNDNfV0FSTl9PTigxKTsKQEAgLTE0MzEsMTEzICsxNDg4LDYgQEAKIAliNDNkYmcoZGV2LT53bCwgIlVwZGF0ZWQgYmVhY29uIHRlbXBsYXRlIGF0IDB4JXhcbiIsIHJhbV9vZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBiNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICB1MTYgc2htX29mZnNldCwgdTE2IHNpemUsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQotewotCXN0cnVjdCBiNDNfcGxjcF9oZHI0IHBsY3A7Ci0JdTMyIHRtcDsKLQlfX2xlMTYgZHVyOwotCi0JcGxjcC5kYXRhID0gMDsKLQliNDNfZ2VuZXJhdGVfcGxjcF9oZHIoJnBsY3AsIHNpemUgKyBGQ1NfTEVOLCByYXRlLT5od192YWx1ZSk7Ci0JZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LT53bC0+aHcsCi0JCQkJCSAgICAgICBkZXYtPndsLT52aWYsIHNpemUsCi0JCQkJCSAgICAgICByYXRlKTsKLQkvKiBXcml0ZSBQTENQIGluIHR3byBwYXJ0cyBhbmQgdGltaW5nIGZvciBwYWNrZXQgdHJhbnNmZXIgKi8KLQl0bXAgPSBsZTMyX3RvX2NwdShwbGNwLmRhdGEpOwotCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBzaG1fb2Zmc2V0LCB0bXAgJiAweEZGRkYpOwotCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBzaG1fb2Zmc2V0ICsgMiwgdG1wID4+IDE2KTsKLQliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgc2htX29mZnNldCArIDYsIGxlMTZfdG9fY3B1KGR1cikpOwotfQotCi0vKiBJbnN0ZWFkIG9mIHVzaW5nIGN1c3RvbSBwcm9iZSByZXNwb25zZSB0ZW1wbGF0ZSwgdGhpcyBmdW5jdGlvbgotICoganVzdCBwYXRjaGVzIGN1c3RvbSBiZWFjb24gdGVtcGxhdGUgYnk6Ci0gKiAxKSBDaGFuZ2luZyBwYWNrZXQgdHlwZQotICogMikgUGF0Y2hpbmcgZHVyYXRpb24gZmllbGQKLSAqIDMpIFN0cmlwcGluZyBUSU0KLSAqLwotc3RhdGljIGNvbnN0IHU4ICpiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCSB1MTYgKmRlc3Rfc2l6ZSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKLXsKLQljb25zdCB1OCAqc3JjX2RhdGE7Ci0JdTggKmRlc3RfZGF0YTsKLQl1MTYgc3JjX3NpemUsIGVsZW1fc2l6ZSwgc3JjX3BvcywgZGVzdF9wb3M7Ci0JX19sZTE2IGR1cjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCXNpemVfdCBpZV9zdGFydDsKLQotCXNyY19zaXplID0gZGV2LT53bC0+Y3VycmVudF9iZWFjb24tPmxlbjsKLQlzcmNfZGF0YSA9IChjb25zdCB1OCAqKWRldi0+d2wtPmN1cnJlbnRfYmVhY29uLT5kYXRhOwotCi0JLyogR2V0IHRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIHZhcmlhYmxlIElFcyBpbiB0aGUgcGFja2V0LiAqLwotCWllX3N0YXJ0ID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LnByb2JlX3Jlc3AudmFyaWFibGUpOwotCUI0M19XQVJOX09OKGllX3N0YXJ0ICE9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpKTsKLQotCWlmIChCNDNfV0FSTl9PTihzcmNfc2l6ZSA8IGllX3N0YXJ0KSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkZXN0X2RhdGEgPSBrbWFsbG9jKHNyY19zaXplLCBHRlBfQVRPTUlDKTsKLQlpZiAodW5saWtlbHkoIWRlc3RfZGF0YSkpCi0JCXJldHVybiBOVUxMOwotCi0JLyogQ29weSB0aGUgc3RhdGljIGRhdGEgYW5kIGFsbCBJbmZvcm1hdGlvbiBFbGVtZW50cywgZXhjZXB0IHRoZSBUSU0uICovCi0JbWVtY3B5KGRlc3RfZGF0YSwgc3JjX2RhdGEsIGllX3N0YXJ0KTsKLQlzcmNfcG9zID0gaWVfc3RhcnQ7Ci0JZGVzdF9wb3MgPSBpZV9zdGFydDsKLQlmb3IgKCA7IHNyY19wb3MgPCBzcmNfc2l6ZSAtIDI7IHNyY19wb3MgKz0gZWxlbV9zaXplKSB7Ci0JCWVsZW1fc2l6ZSA9IHNyY19kYXRhW3NyY19wb3MgKyAxXSArIDI7Ci0JCWlmIChzcmNfZGF0YVtzcmNfcG9zXSA9PSA1KSB7Ci0JCQkvKiBUaGlzIGlzIHRoZSBUSU0uICovCi0JCQljb250aW51ZTsKLQkJfQotCQltZW1jcHkoZGVzdF9kYXRhICsgZGVzdF9wb3MsIHNyY19kYXRhICsgc3JjX3BvcywKLQkJICAgICAgIGVsZW1fc2l6ZSk7Ci0JCWRlc3RfcG9zICs9IGVsZW1fc2l6ZTsKLQl9Ci0JKmRlc3Rfc2l6ZSA9IGRlc3RfcG9zOwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWRlc3RfZGF0YTsKLQotCS8qIFNldCB0aGUgZnJhbWUgY29udHJvbC4gKi8KLQloZHItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7Ci0JZHVyID0gaWVlZTgwMjExX2dlbmVyaWNfZnJhbWVfZHVyYXRpb24oZGV2LT53bC0+aHcsCi0JCQkJCSAgICAgICBkZXYtPndsLT52aWYsICpkZXN0X3NpemUsCi0JCQkJCSAgICAgICByYXRlKTsKLQloZHItPmR1cmF0aW9uX2lkID0gZHVyOwotCi0JcmV0dXJuIGRlc3RfZGF0YTsKLX0KLQotc3RhdGljIHZvaWQgYjQzX3dyaXRlX3Byb2JlX3Jlc3BfdGVtcGxhdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgIHUxNiByYW1fb2Zmc2V0LAotCQkJCQkgIHUxNiBzaG1fc2l6ZV9vZmZzZXQsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlKQotewotCWNvbnN0IHU4ICpwcm9iZV9yZXNwX2RhdGE7Ci0JdTE2IHNpemU7Ci0KLQlzaXplID0gZGV2LT53bC0+Y3VycmVudF9iZWFjb24tPmxlbjsKLQlwcm9iZV9yZXNwX2RhdGEgPSBiNDNfZ2VuZXJhdGVfcHJvYmVfcmVzcChkZXYsICZzaXplLCByYXRlKTsKLQlpZiAodW5saWtlbHkoIXByb2JlX3Jlc3BfZGF0YSkpCi0JCXJldHVybjsKLQotCS8qIExvb2tzIGxpa2UgUExDUCBoZWFkZXJzIHBsdXMgcGFja2V0IHRpbWluZ3MgYXJlIHN0b3JlZCBmb3IKLQkgKiBhbGwgcG9zc2libGUgYmFzaWMgcmF0ZXMKLQkgKi8KLQliNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzMUEsIHNpemUsICZiNDNfYl9yYXRldGFibGVbMF0pOwotCWI0M193cml0ZV9wcm9iZV9yZXNwX3BsY3AoZGV2LCAweDMyQywgc2l6ZSwgJmI0M19iX3JhdGV0YWJsZVsxXSk7Ci0JYjQzX3dyaXRlX3Byb2JlX3Jlc3BfcGxjcChkZXYsIDB4MzNFLCBzaXplLCAmYjQzX2JfcmF0ZXRhYmxlWzJdKTsKLQliNDNfd3JpdGVfcHJvYmVfcmVzcF9wbGNwKGRldiwgMHgzNTAsIHNpemUsICZiNDNfYl9yYXRldGFibGVbM10pOwotCi0Jc2l6ZSA9IG1pbigoc2l6ZV90KSBzaXplLCAweDIwMCAtIHNpemVvZihzdHJ1Y3QgYjQzX3BsY3BfaGRyNikpOwotCWI0M193cml0ZV90ZW1wbGF0ZV9jb21tb24oZGV2LCBwcm9iZV9yZXNwX2RhdGEsCi0JCQkJICBzaXplLCByYW1fb2Zmc2V0LCBzaG1fc2l6ZV9vZmZzZXQsCi0JCQkJICByYXRlLT5od192YWx1ZSk7Ci0Ja2ZyZWUocHJvYmVfcmVzcF9kYXRhKTsKLX0KLQogc3RhdGljIHZvaWQgYjQzX3VwbG9hZF9iZWFjb24wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGRldi0+d2w7CkBAIC0xNTQ1LDEwICsxNDk1LDYgQEAKIAlpZiAod2wtPmJlYWNvbjBfdXBsb2FkZWQpCiAJCXJldHVybjsKIAliNDNfd3JpdGVfYmVhY29uX3RlbXBsYXRlKGRldiwgMHg2OCwgMHgxOCk7Ci0JLyogRklYTUU6IFByb2JlIHJlc3AgdXBsb2FkIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLAotCSAqICAgICAgICBidXQgd2UgZG9uJ3QgdXNlIHRoYXQgZmVhdHVyZSBhbnl3YXkuICovCi0JYjQzX3dyaXRlX3Byb2JlX3Jlc3BfdGVtcGxhdGUoZGV2LCAweDI2OCwgMHg0QSwKLQkJCQkgICAgICAmX19iNDNfcmF0ZXRhYmxlWzNdKTsKIAl3bC0+YmVhY29uMF91cGxvYWRlZCA9IDE7CiB9CiAKQEAgLTE2MTEsNiArMTU1NywyNyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYjQzX2RvX2JlYWNvbl91cGRhdGVfdHJpZ2dlcl93b3JrKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwl1MzIgb2xkX2lycV9tYXNrID0gZGV2LT5pcnFfbWFzazsKKworCS8qIHVwZGF0ZSBiZWFjb24gcmlnaHQgYXdheSBvciBkZWZlciB0byBpcnEgKi8KKwloYW5kbGVfaXJxX2JlYWNvbihkZXYpOworCWlmIChvbGRfaXJxX21hc2sgIT0gZGV2LT5pcnFfbWFzaykgeworCQkvKiBUaGUgaGFuZGxlciB1cGRhdGVkIHRoZSBJUlEgbWFzay4gKi8KKwkJQjQzX1dBUk5fT04oIWRldi0+aXJxX21hc2spOworCQlpZiAoYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSykpIHsKKwkJCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fR0VOX0lSUV9NQVNLLCBkZXYtPmlycV9tYXNrKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERldmljZSBpbnRlcnJ1cHRzIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuIFRoYXQgbWVhbnMKKwkJCSAqIHdlIGp1c3QgcmFuIHRoZSBoYXJkaXJxIGhhbmRsZXIgYW5kIHNjaGVkdWxlZCB0aGUKKwkJCSAqIElSUSB0aHJlYWQuIFRoZSB0aHJlYWQgd2lsbCB3cml0ZSB0aGUgSVJRIG1hc2sgd2hlbgorCQkJICogaXQgZmluaXNoZWQsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlLiBXcml0aW5nCisJCQkgKiB0aGUgbWFzayBfaGVyZV8gd291bGQgaW5jb3JyZWN0bHkgcmUtZW5hYmxlIElSUXMuICovCisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIGI0M19iZWFjb25fdXBkYXRlX3RyaWdnZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGI0M193bCwKQEAgLTE2MjAsMTkgKzE1ODcsMjIgQEAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAlpZiAobGlrZWx5KGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkpIHsKLQkJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKLQkJLyogdXBkYXRlIGJlYWNvbiByaWdodCBhd2F5IG9yIGRlZmVyIHRvIGlycSAqLwotCQloYW5kbGVfaXJxX2JlYWNvbihkZXYpOwotCQkvKiBUaGUgaGFuZGxlciBtaWdodCBoYXZlIHVwZGF0ZWQgdGhlIElSUSBtYXNrLiAqLwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSywgZGV2LT5pcnFfbWFzayk7Ci0JCW1taW93YigpOwotCQlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJCWlmICgwIC8qRklYTUUgZGV2LT5kZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9TRElPKi8pIHsKKwkJCS8qIHdsLT5tdXRleCBpcyBlbm91Z2guICovCisJCQliNDNfZG9fYmVhY29uX3VwZGF0ZV90cmlnZ2VyX3dvcmsoZGV2KTsKKwkJCW1taW93YigpOworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycSgmd2wtPmhhcmRpcnFfbG9jayk7CisJCQliNDNfZG9fYmVhY29uX3VwZGF0ZV90cmlnZ2VyX3dvcmsoZGV2KTsKKwkJCW1taW93YigpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aGFyZGlycV9sb2NrKTsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CiAKIC8qIEFzeW5jaHJvbm91c2x5IHVwZGF0ZSB0aGUgcGFja2V0IHRlbXBsYXRlcyBpbiB0ZW1wbGF0ZSBSQU0uCi0gKiBMb2NraW5nOiBSZXF1aXJlcyB3bC0+aXJxX2xvY2sgdG8gYmUgbG9ja2VkLiAqLworICogTG9ja2luZzogUmVxdWlyZXMgd2wtPm11dGV4IHRvIGJlIGxvY2tlZC4gKi8KIHN0YXRpYyB2b2lkIGI0M191cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNfd2wgKndsKQogewogCXN0cnVjdCBza19idWZmICpiZWFjb247CkBAIC0xNjU2LDcgKzE2MjYsNyBAQAogCXdsLT5jdXJyZW50X2JlYWNvbiA9IGJlYWNvbjsKIAl3bC0+YmVhY29uMF91cGxvYWRlZCA9IDA7CiAJd2wtPmJlYWNvbjFfdXBsb2FkZWQgPSAwOwotCXF1ZXVlX3dvcmsod2wtPmh3LT53b3JrcXVldWUsICZ3bC0+YmVhY29uX3VwZGF0ZV90cmlnZ2VyKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayh3bC0+aHcsICZ3bC0+YmVhY29uX3VwZGF0ZV90cmlnZ2VyKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3NldF9iZWFjb25faW50KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IGJlYWNvbl9pbnQpCkBAIC0xNzY5LDE4ICsxNzM5LDE1IEBACiAJCQlCNDNfREVCVUdJUlFfUkVBU09OX1JFRywgQjQzX0RFQlVHSVJRX0FDSyk7CiB9CiAKLS8qIEludGVycnVwdCBoYW5kbGVyIGJvdHRvbS1oYWxmICovCi1zdGF0aWMgdm9pZCBiNDNfaW50ZXJydXB0X3Rhc2tsZXQoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgYjQzX2RvX2ludGVycnVwdF90aHJlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXUzMiByZWFzb247CiAJdTMyIGRtYV9yZWFzb25bQVJSQVlfU0laRShkZXYtPmRtYV9yZWFzb24pXTsKIAl1MzIgbWVyZ2VkX2RtYV9yZWFzb24gPSAwOwogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT53bC0+aXJxX2xvY2ssIGZsYWdzKTsKLQotCUI0M19XQVJOX09OKGI0M19zdGF0dXMoZGV2KSAhPSBCNDNfU1RBVF9TVEFSVEVEKTsKKwlpZiAodW5saWtlbHkoYjQzX3N0YXR1cyhkZXYpICE9IEI0M19TVEFUX1NUQVJURUQpKQorCQlyZXR1cm47CiAKIAlyZWFzb24gPSBkZXYtPmlycV9yZWFzb247CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1hX3JlYXNvbik7IGkrKykgewpAQCAtMTgxMyw4ICsxNzgwLDYgQEAKIAkJCSAgICAgICBkbWFfcmVhc29uWzJdLCBkbWFfcmVhc29uWzNdLAogCQkJICAgICAgIGRtYV9yZWFzb25bNF0sIGRtYV9yZWFzb25bNV0pOwogCQkJYjQzX2NvbnRyb2xsZXJfcmVzdGFydChkZXYsICJETUEgZXJyb3IiKTsKLQkJCW1taW93YigpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT53bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAobWVyZ2VkX2RtYV9yZWFzb24gJiBCNDNfRE1BSVJRX05PTkZBVEFMTUFTSykgewpAQCAtMTg1OCw0NyArMTgyMywzNiBAQAogCWlmIChyZWFzb24gJiBCNDNfSVJRX1RYX09LKQogCQloYW5kbGVfaXJxX3RyYW5zbWl0X3N0YXR1cyhkZXYpOwogCisJLyogUmUtZW5hYmxlIGludGVycnVwdHMgb24gdGhlIGRldmljZSBieSByZXN0b3JpbmcgdGhlIGN1cnJlbnQgaW50ZXJydXB0IG1hc2suICovCiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0ssIGRldi0+aXJxX21hc2spOwotCW1taW93YigpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+d2wtPmlycV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGI0M19pbnRlcnJ1cHRfYWNrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIHJlYXNvbikKKy8qIEludGVycnVwdCB0aHJlYWQgaGFuZGxlci4gSGFuZGxlcyBkZXZpY2UgaW50ZXJydXB0cyBpbiB0aHJlYWQgY29udGV4dC4gKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBiNDNfaW50ZXJydXB0X3RocmVhZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfUkVBU09OLCByZWFzb24pOwotCi0JYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEwX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzBdKTsKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTFfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bMV0pOwotCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fRE1BMl9SRUFTT04sIGRldi0+ZG1hX3JlYXNvblsyXSk7Ci0JYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEzX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzNdKTsKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTRfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNF0pOwotLyogVW51c2VkIHJpbmcKLQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTVfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNV0pOwotKi8KLX0KLQotLyogSW50ZXJydXB0IGhhbmRsZXIgdG9wLWhhbGYgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBiNDNfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IGRldl9pZDsKKworCW11dGV4X2xvY2soJmRldi0+d2wtPm11dGV4KTsKKwliNDNfZG9faW50ZXJydXB0X3RocmVhZChkZXYpOworCW1taW93YigpOworCW11dGV4X3VubG9jaygmZGV2LT53bC0+bXV0ZXgpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYjQzX2RvX2ludGVycnVwdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CiAJdTMyIHJlYXNvbjsKIAotCUI0M19XQVJOX09OKCFkZXYpOworCS8qIFRoaXMgY29kZSBydW5zIHVuZGVyIHdsLT5oYXJkaXJxX2xvY2ssIGJ1dCBfb25seV8gb24gbm9uLVNESU8gYnVzc2VzLgorCSAqIE9uIFNESU8sIHRoaXMgcnVucyB1bmRlciB3bC0+bXV0ZXguICovCiAKLQlzcGluX2xvY2soJmRldi0+d2wtPmlycV9sb2NrKTsKLQotCWlmICh1bmxpa2VseShiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9TVEFSVEVEKSkgewotCQkvKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBvbiBzaGFyZWQgSVJRIGxpbmVzLiAqLwotCQlnb3RvIG91dDsKLQl9CiAJcmVhc29uID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfUkVBU09OKTsKIAlpZiAocmVhc29uID09IDB4ZmZmZmZmZmYpCS8qIHNoYXJlZCBJUlEgKi8KLQkJZ290byBvdXQ7Ci0JcmV0ID0gSVJRX0hBTkRMRUQ7CisJCXJldHVybiBJUlFfTk9ORTsKIAlyZWFzb24gJj0gZGV2LT5pcnFfbWFzazsKIAlpZiAoIXJlYXNvbikKLQkJZ290byBvdXQ7CisJCXJldHVybiBJUlFfSEFORExFRDsKIAogCWRldi0+ZG1hX3JlYXNvblswXSA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19ETUEwX1JFQVNPTikKIAkgICAgJiAweDAwMDFEQzAwOwpAQCAtMTkxNSwxNSArMTg2OSwzOCBAQAogCSAgICAmIDB4MDAwMERDMDA7CiAqLwogCi0JYjQzX2ludGVycnVwdF9hY2soZGV2LCByZWFzb24pOwotCS8qIGRpc2FibGUgYWxsIElSUXMuIFRoZXkgYXJlIGVuYWJsZWQgYWdhaW4gaW4gdGhlIGJvdHRvbSBoYWxmLiAqLworCS8qIEFDSyB0aGUgaW50ZXJydXB0LiAqLworCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fR0VOX0lSUV9SRUFTT04sIHJlYXNvbik7CisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEwX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzBdKTsKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTFfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bMV0pOworCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fRE1BMl9SRUFTT04sIGRldi0+ZG1hX3JlYXNvblsyXSk7CisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19ETUEzX1JFQVNPTiwgZGV2LT5kbWFfcmVhc29uWzNdKTsKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTRfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNF0pOworLyogVW51c2VkIHJpbmcKKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0RNQTVfUkVBU09OLCBkZXYtPmRtYV9yZWFzb25bNV0pOworKi8KKworCS8qIERpc2FibGUgSVJRcyBvbiB0aGUgZGV2aWNlLiBUaGUgSVJRIHRocmVhZCBoYW5kbGVyIHdpbGwgcmUtZW5hYmxlIHRoZW0uICovCiAJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0ssIDApOwotCS8qIHNhdmUgdGhlIHJlYXNvbiBjb2RlIGFuZCBjYWxsIG91ciBib3R0b20gaGFsZi4gKi8KKwkvKiBTYXZlIHRoZSByZWFzb24gYml0bWFza3MgZm9yIHRoZSBJUlEgdGhyZWFkIGhhbmRsZXIuICovCiAJZGV2LT5pcnFfcmVhc29uID0gcmVhc29uOwotCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+aXNyX3Rhc2tsZXQpOwotb3V0OgorCisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKworLyogSW50ZXJydXB0IGhhbmRsZXIgdG9wLWhhbGYuIFRoaXMgcnVucyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYjQzX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSBkZXZfaWQ7CisJaXJxcmV0dXJuX3QgcmV0OworCisJaWYgKHVubGlrZWx5KGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2soJmRldi0+d2wtPmhhcmRpcnFfbG9jayk7CisJcmV0ID0gYjQzX2RvX2ludGVycnVwdChkZXYpOwogCW1taW93YigpOwotCXNwaW5fdW5sb2NrKCZkZXYtPndsLT5pcnFfbG9jayk7CisJc3Bpbl91bmxvY2soJmRldi0+d2wtPmhhcmRpcnFfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjA2MSw4ICsyMDM4LDEyIEBACiAJCWZpbGVuYW1lID0gInVjb2RlNSI7CiAJZWxzZSBpZiAoKHJldiA+PSAxMSkgJiYgKHJldiA8PSAxMikpCiAJCWZpbGVuYW1lID0gInVjb2RlMTEiOwotCWVsc2UgaWYgKHJldiA+PSAxMykKKwllbHNlIGlmIChyZXYgPT0gMTMpCiAJCWZpbGVuYW1lID0gInVjb2RlMTMiOworCWVsc2UgaWYgKHJldiA9PSAxNCkKKwkJZmlsZW5hbWUgPSAidWNvZGUxNCI7CisJZWxzZSBpZiAocmV2ID49IDE1KQorCQlmaWxlbmFtZSA9ICJ1Y29kZTE1IjsKIAllbHNlCiAJCWdvdG8gZXJyX25vX3Vjb2RlOwogCWVyciA9IGI0M19kb19yZXF1ZXN0X2Z3KGN0eCwgZmlsZW5hbWUsICZmdy0+dWNvZGUpOwpAQCAtMjExMCw2ICsyMDkxLDE2IEBACiAJCWVsc2UKIAkJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCQlicmVhazsKKwljYXNlIEI0M19QSFlUWVBFX0xQOgorCQlpZiAocmV2ID09IDEzKQorCQkJZmlsZW5hbWUgPSAibHAwaW5pdHZhbHMxMyI7CisJCWVsc2UgaWYgKHJldiA9PSAxNCkKKwkJCWZpbGVuYW1lID0gImxwMGluaXR2YWxzMTQiOworCQllbHNlIGlmIChyZXYgPj0gMTUpCisJCQlmaWxlbmFtZSA9ICJscDBpbml0dmFsczE1IjsKKwkJZWxzZQorCQkJZ290byBlcnJfbm9faW5pdHZhbHM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCX0KQEAgLTIxNDQsNiArMjEzNSwxNiBAQAogCQllbHNlCiAJCQlnb3RvIGVycl9ub19pbml0dmFsczsKIAkJYnJlYWs7CisJY2FzZSBCNDNfUEhZVFlQRV9MUDoKKwkJaWYgKHJldiA9PSAxMykKKwkJCWZpbGVuYW1lID0gImxwMGJzaW5pdHZhbHMxMyI7CisJCWVsc2UgaWYgKHJldiA9PSAxNCkKKwkJCWZpbGVuYW1lID0gImxwMGJzaW5pdHZhbHMxNCI7CisJCWVsc2UgaWYgKHJldiA+PSAxNSkKKwkJCWZpbGVuYW1lID0gImxwMGJzaW5pdHZhbHMxNSI7CisJCWVsc2UKKwkJCWdvdG8gZXJyX25vX2luaXR2YWxzOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlnb3RvIGVycl9ub19pbml0dmFsczsKIAl9CkBAIC0yNjcxLDYgKzI2NzIsNyBAQAogCWNhc2UgQjQzX1BIWVRZUEVfQToKIAljYXNlIEI0M19QSFlUWVBFX0c6CiAJY2FzZSBCNDNfUEhZVFlQRV9OOgorCWNhc2UgQjQzX1BIWVRZUEVfTFA6CiAJCWI0M19yYXRlX21lbW9yeV93cml0ZShkZXYsIEI0M19PRkRNX1JBVEVfNk1CLCAxKTsKIAkJYjQzX3JhdGVfbWVtb3J5X3dyaXRlKGRldiwgQjQzX09GRE1fUkFURV8xMk1CLCAxKTsKIAkJYjQzX3JhdGVfbWVtb3J5X3dyaXRlKGRldiwgQjQzX09GRE1fUkFURV8xOE1CLCAxKTsKQEAgLTI5MTYsNyArMjkxOCw3IEBACiAJCWRlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MCk7CiAJZWxzZQogCQlkZWxheSA9IHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFogKiAxNSk7Ci0JcXVldWVfZGVsYXllZF93b3JrKHdsLT5ody0+d29ya3F1ZXVlLCAmZGV2LT5wZXJpb2RpY193b3JrLCBkZWxheSk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayh3bC0+aHcsICZkZXYtPnBlcmlvZGljX3dvcmssIGRlbGF5KTsKIG91dDoKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CkBAIC0yOTI3LDE1ICsyOTI5LDE2IEBACiAKIAlkZXYtPnBlcmlvZGljX3N0YXRlID0gMDsKIAlJTklUX0RFTEFZRURfV09SSyh3b3JrLCBiNDNfcGVyaW9kaWNfd29ya19oYW5kbGVyKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53bC0+aHctPndvcmtxdWV1ZSwgd29yaywgMCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndsLT5odywgd29yaywgMCk7CiB9CiAKIC8qIENoZWNrIGlmIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZGV2aWNlIHdvcmtzIGNvcnJlY3RseS4gKi8KIHN0YXRpYyBpbnQgYjQzX3ZhbGlkYXRlX2NoaXBhY2Nlc3Moc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCXUzMiB2LCBiYWNrdXA7CisJdTMyIHYsIGJhY2t1cDAsIGJhY2t1cDQ7CiAKLQliYWNrdXAgPSBiNDNfc2htX3JlYWQzMihkZXYsIEI0M19TSE1fU0hBUkVELCAwKTsKKwliYWNrdXAwID0gYjQzX3NobV9yZWFkMzIoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMCk7CisJYmFja3VwNCA9IGI0M19zaG1fcmVhZDMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDQpOwogCiAJLyogQ2hlY2sgZm9yIHJlYWQvd3JpdGUgYW5kIGVuZGlhbm5lc3MgcHJvYmxlbXMuICovCiAJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDAsIDB4NTVBQUFBNTUpOwpAQCAtMjk0NSw3ICsyOTQ4LDIzIEBACiAJaWYgKGI0M19zaG1fcmVhZDMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDApICE9IDB4QUE1NTU1QUEpCiAJCWdvdG8gZXJyb3I7CiAKLQliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMCwgYmFja3VwKTsKKwkvKiBDaGVjayBpZiB1bmFsaWduZWQgMzJiaXQgU0hNX1NIQVJFRCBhY2Nlc3Mgd29ya3MgcHJvcGVybHkuCisJICogSG93ZXZlciwgZG9uJ3QgYmFpbCBvdXQgb24gZmFpbHVyZSwgYmVjYXVzZSBpdCdzIG5vbmNyaXRpY2FsLiAqLworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAwLCAweDExMjIpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCAyLCAweDMzNDQpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCA0LCAweDU1NjYpOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCA2LCAweDc3ODgpOworCWlmIChiNDNfc2htX3JlYWQzMihkZXYsIEI0M19TSE1fU0hBUkVELCAyKSAhPSAweDU1NjYzMzQ0KQorCQliNDN3YXJuKGRldi0+d2wsICJVbmFsaWduZWQgMzJiaXQgU0hNIHJlYWQgYWNjZXNzIGlzIGJyb2tlblxuIik7CisJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDIsIDB4QUFCQkNDREQpOworCWlmIChiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELCAwKSAhPSAweDExMjIgfHwKKwkgICAgYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMikgIT0gMHhDQ0REIHx8CisJICAgIGI0M19zaG1fcmVhZDE2KGRldiwgQjQzX1NITV9TSEFSRUQsIDQpICE9IDB4QUFCQiB8fAorCSAgICBiNDNfc2htX3JlYWQxNihkZXYsIEI0M19TSE1fU0hBUkVELCA2KSAhPSAweDc3ODgpCisJCWI0M3dhcm4oZGV2LT53bCwgIlVuYWxpZ25lZCAzMmJpdCBTSE0gd3JpdGUgYWNjZXNzIGlzIGJyb2tlblxuIik7CisKKwliNDNfc2htX3dyaXRlMzIoZGV2LCBCNDNfU0hNX1NIQVJFRCwgMCwgYmFja3VwMCk7CisJYjQzX3NobV93cml0ZTMyKGRldiwgQjQzX1NITV9TSEFSRUQsIDQsIGJhY2t1cDQpOwogCiAJaWYgKChkZXYtPmRldi0+aWQucmV2aXNpb24gPj0gMykgJiYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpIHsKIAkJLyogVGhlIDMyYml0IHJlZ2lzdGVyIHNoYWRvd3MgdGhlIHR3byAxNmJpdCByZWdpc3RlcnMKQEAgLTI5NzIsMTcgKzI5OTEsMTQgQEAKIAogc3RhdGljIHZvaWQgYjQzX3NlY3VyaXR5X2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWRldi0+bWF4X25yX2tleXMgPSAoZGV2LT5kZXYtPmlkLnJldmlzaW9uID49IDUpID8gNTggOiAyMDsKLQlCNDNfV0FSTl9PTihkZXYtPm1heF9ucl9rZXlzID4gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCWRldi0+a3RwID0gYjQzX3NobV9yZWFkMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9LVFApOwogCS8qIEtUUCBpcyBhIHdvcmQgYWRkcmVzcywgYnV0IHdlIGFkZHJlc3MgU0hNIGJ5dGV3aXNlLgogCSAqIFNvIG11bHRpcGx5IGJ5IHR3by4KIAkgKi8KIAlkZXYtPmt0cCAqPSAyOwotCWlmIChkZXYtPmRldi0+aWQucmV2aXNpb24gPj0gNSkgewotCQkvKiBOdW1iZXIgb2YgUkNNVEEgYWRkcmVzcyBzbG90cyAqLwotCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1JDTVRBX0NPVU5ULCBkZXYtPm1heF9ucl9rZXlzIC0gOCk7Ci0JfQorCS8qIE51bWJlciBvZiBSQ01UQSBhZGRyZXNzIHNsb3RzICovCisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19SQ01UQV9DT1VOVCwgQjQzX05SX1BBSVJXSVNFX0tFWVMpOworCS8qIENsZWFyIHRoZSBrZXkgbWVtb3J5LiAqLwogCWI0M19jbGVhcl9rZXlzKGRldik7CiB9CiAKQEAgLTI5OTAsMTUgKzMwMDYsMTIgQEAKIHN0YXRpYyBpbnQgYjQzX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKmRhdGEpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSAoc3RydWN0IGI0M193bCAqKXJuZy0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogRG9uJ3QgdGFrZSB3bC0+bXV0ZXggaGVyZSwgYXMgaXQgY291bGQgZGVhZGxvY2sgd2l0aAotCSAqIGh3cm5nIGludGVybmFsIGxvY2tpbmcuIEl0J3Mgbm90IG5lZWRlZCB0byB0YWtlCi0JICogd2wtPm11dGV4IGhlcmUsIGFueXdheS4gKi8KKwkvKiBGSVhNRTogV2UgbmVlZCB0byB0YWtlIHdsLT5tdXRleCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlCisJICogaXMgbm90IGdvaW5nIGF3YXkgZnJvbSB1bmRlciBvdXIgYXNzLiBIb3dldmVyIGl0IGNvdWxkIGRlYWRsb2NrCisJICogd2l0aCBod3JuZyBpbnRlcm5hbCBsb2NraW5nLiAqLwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCSpkYXRhID0gYjQzX3JlYWQxNih3bC0+Y3VycmVudF9kZXYsIEI0M19NTUlPX1JORyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gKHNpemVvZih1MTYpKTsKIH0KQEAgLTMwMzQsNDYgKzMwNDcsNTIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGI0M19vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgYjQzX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKLQlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZXJyOworCXN0cnVjdCBiNDNfd2wgKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiNDNfd2wsIHR4X3dvcmspOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnIgPSAwOwogCi0JaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMiArIDIgKyA2KSkgewotCQkvKiBUb28gc2hvcnQsIHRoaXMgY2FuJ3QgYmUgYSB2YWxpZCBmcmFtZS4gKi8KLQkJZ290byBkcm9wX3BhY2tldDsKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAodW5saWtlbHkoIWRldiB8fCBiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9TVEFSVEVEKSkgeworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCXJldHVybjsKIAl9Ci0JQjQzX1dBUk5fT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7Ci0JaWYgKHVubGlrZWx5KCFkZXYpKQotCQlnb3RvIGRyb3BfcGFja2V0OwogCi0JLyogVHJhbnNtaXNzaW9ucyBvbiBzZXBlcmF0ZSBxdWV1ZXMgY2FuIHJ1biBjb25jdXJyZW50bHkuICovCi0JcmVhZF9sb2NrX2lycXNhdmUoJndsLT50eF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJndsLT50eF9xdWV1ZSkpIHsKKwkJc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSk7CiAKLQllcnIgPSAtRU5PREVWOwotCWlmIChsaWtlbHkoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQpKSB7CiAJCWlmIChiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQogCQkJZXJyID0gYjQzX3Bpb190eChkZXYsIHNrYik7CiAJCWVsc2UKIAkJCWVyciA9IGI0M19kbWFfdHgoZGV2LCBza2IpOworCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsgLyogRHJvcCBpdCAqLwogCX0KIAotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJndsLT50eF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQogCi0JaWYgKHVubGlrZWx5KGVycikpCi0JCWdvdG8gZHJvcF9wYWNrZXQ7Ci0JcmV0dXJuIE5FVERFVl9UWF9PSzsKK3N0YXRpYyBpbnQgYjQzX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCi1kcm9wX3BhY2tldDoKLQkvKiBXZSBjYW4gbm90IHRyYW5zbWl0IHRoaXMgcGFja2V0LiBEcm9wIGl0LiAqLwotCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMiArIDIgKyA2KSkgeworCQkvKiBUb28gc2hvcnQsIHRoaXMgY2FuJ3QgYmUgYSB2YWxpZCBmcmFtZS4gKi8KKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisJQjQzX1dBUk5fT04oc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7CisKKwlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT50eF93b3JrKTsKKwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKLS8qIExvY2tpbmc6IHdsLT5pcnFfbG9jayAqLwogc3RhdGljIHZvaWQgYjQzX3Fvc19wYXJhbXNfdXBsb2FkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwLAogCQkJCSAgdTE2IHNobV9vZmZzZXQpCkBAIC0zMDgyLDYgKzMxMDEsOSBAQAogCWludCBic2xvdHMsIHRtcDsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghZGV2LT5xb3NfZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJYnNsb3RzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1JORykgJiBwLT5jd19taW47CiAKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwpAQCAtMzEyNyw2ICszMTQ5LDkgQEAKIAlzdHJ1Y3QgYjQzX3Fvc19wYXJhbXMgKnBhcmFtczsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghZGV2LT5xb3NfZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoYjQzX3Fvc19zaG1fb2Zmc2V0cykgIT0KIAkJICAgICBBUlJBWV9TSVpFKHdsLT5xb3NfcGFyYW1zKSk7CiAKQEAgLTMxODYsNiArMzIxMSwxNiBAQAogLyogSW5pdGlhbGl6ZSB0aGUgY29yZSdzIFFPUyBjYXBhYmlsaXRpZXMgKi8KIHN0YXRpYyB2b2lkIGI0M19xb3NfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CisJaWYgKCFkZXYtPnFvc19lbmFibGVkKSB7CisJCS8qIERpc2FibGUgUU9TIHN1cHBvcnQuICovCisJCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgJiB+QjQzX0hGX0VEQ0YpOworCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX0lGU0NUTCwKKwkJCSAgICBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fSUZTQ1RMKQorCQkJICAgICYgfkI0M19NTUlPX0lGU0NUTF9VU0VfRURDRik7CisJCWI0M2RiZyhkZXYtPndsLCAiUW9TIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFVwbG9hZCB0aGUgY3VycmVudCBRT1MgcGFyYW1ldGVycy4gKi8KIAliNDNfcW9zX3VwbG9hZF9hbGwoZGV2KTsKIApAQCAtMzE5NCw2ICszMjI5LDcgQEAKIAliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX0lGU0NUTCwKIAkJICAgIGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19JRlNDVEwpCiAJCSAgICB8IEI0M19NTUlPX0lGU0NUTF9VU0VfRURDRik7CisJYjQzZGJnKGRldi0+d2wsICJRb1MgZW5hYmxlZFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYjQzX29wX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBfcXVldWUsCkBAIC0zMjM1LDIyICszMjcxLDIwIEBACiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwotCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAotCWlmICghZGV2KQotCQlnb3RvIG91dDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpa2VseShiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfU1RBUlRFRCkpIHsKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9TVEFSVEVEKSB7CiAJCWlmIChiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhkZXYpKQogCQkJYjQzX3Bpb19nZXRfdHhfc3RhdHMoZGV2LCBzdGF0cyk7CiAJCWVsc2UKIAkJCWI0M19kbWFfZ2V0X3R4X3N0YXRzKGRldiwgc3RhdHMpOwogCQllcnIgPSAwOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKLW91dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMjU4LDExICszMjkyLDEwIEBACiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJbWVtY3B5KHN0YXRzLCAmd2wtPmllZWVfc3RhdHMsIHNpemVvZigqc3RhdHMpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNzQsNyArMzMwNyw2IEBACiAJdTY0IHRzZjsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAKIAlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKQpAQCAtMzI4Miw3ICszMzE0LDYgQEAKIAllbHNlCiAJCXRzZiA9IDA7CiAKLQlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJcmV0dXJuIHRzZjsKQEAgLTMyOTQsMTMgKzMzMjUsMTEgQEAKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCiAJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKIAkJYjQzX3RzZl93cml0ZShkZXYsIHRzZik7CiAKLQlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCkBAIC0zMzg2LDcgKzM0MTUsNyBAQAogCXByZXZfc3RhdHVzID0gYjQzX3N0YXR1cyhkb3duX2Rldik7CiAJLyogU2h1dGRvd24gdGhlIGN1cnJlbnRseSBydW5uaW5nIGNvcmUuICovCiAJaWYgKHByZXZfc3RhdHVzID49IEI0M19TVEFUX1NUQVJURUQpCi0JCWI0M193aXJlbGVzc19jb3JlX3N0b3AoZG93bl9kZXYpOworCQlkb3duX2RldiA9IGI0M193aXJlbGVzc19jb3JlX3N0b3AoZG93bl9kZXYpOwogCWlmIChwcmV2X3N0YXR1cyA+PSBCNDNfU1RBVF9JTklUSUFMSVpFRCkKIAkJYjQzX3dpcmVsZXNzX2NvcmVfZXhpdChkb3duX2Rldik7CiAKQEAgLTM0NTAsNyArMzQ3OSw2IEBACiAJc3RydWN0IGI0M193bGRldiAqZGV2OwogCXN0cnVjdCBiNDNfcGh5ICpwaHk7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGFudGVubmE7CiAJaW50IGVyciA9IDA7CiAKQEAgLTM0ODEsMTMgKzM1MDksMTEgQEAKIAogCS8qIEFkanVzdCB0aGUgZGVzaXJlZCBUWCBwb3dlciBsZXZlbC4gKi8KIAlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gMCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAJCWlmIChjb25mLT5wb3dlcl9sZXZlbCAhPSBwaHktPmRlc2lyZWRfdHhwb3dlcikgewogCQkJcGh5LT5kZXNpcmVkX3R4cG93ZXIgPSBjb25mLT5wb3dlcl9sZXZlbDsKIAkJCWI0M19waHlfdHhwb3dlcl9jaGVjayhkZXYsIEI0M19UWFBXUl9JR05PUkVfVElNRSB8CiAJCQkJCQkgICBCNDNfVFhQV1JfSUdOT1JFX1RTU0kpOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCX0KIAogCS8qIEFudGVubmFzIGZvciBSWCBhbmQgbWFuYWdlbWVudCBmcmFtZSBUWC4gKi8KQEAgLTM1NzIsNyArMzU5OCw2IEBACiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIApAQCAtMzU4Miw3ICszNjA3LDYgQEAKIAogCUI0M19XQVJOX09OKHdsLT52aWYgIT0gdmlmKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7CiAJCWlmIChjb25mLT5ic3NpZCkKIAkJCW1lbWNweSh3bC0+YnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CkBAIC0zNjAwLDcgKzM2MjQsNiBAQAogCQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKQogCQkJYjQzX3dyaXRlX21hY19ic3NpZF90ZW1wbGF0ZXMoZGV2KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKIAliNDNfbWFjX3N1c3BlbmQoZGV2KTsKIApAQCAtMzY0MSwxNSArMzY2NCw2IEBACiAJCXJldHVybiAtRU5PU1BDOyAvKiBVc2VyIGRpc2FibGVkIEhXLWNyeXB0byAqLwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwotCXdyaXRlX2xvY2soJndsLT50eF9sb2NrKTsKLQkvKiBXaHkgZG8gd2UgbmVlZCBhbGwgdGhpcyBsb2NraW5nIGhlcmU/Ci0JICogbXV0ZXggICAgIC0+IEV2ZXJ5IGNvbmZpZyBvcGVyYXRpb24gbXVzdCB0YWtlIGl0LgotCSAqIGlycV9sb2NrICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAotCSAqICAgICAgICAgICAgICBpbiB0aGUgSVJRIGhhbmRsZXJzLgotCSAqIHR4X2xvY2sgICAtPiBXZSBtb2RpZnkgdGhlIGRldi0+a2V5IGFycmF5LCB3aGljaCBpcyBhY2Nlc3NlZAotCSAqICAgICAgICAgICAgICBpbiB0aGUgVFggaGFuZGxlci4KLQkgKi8KIAogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAllcnIgPSAtRU5PREVWOwpAQCAtMzY4Nyw4ICszNzAxLDEwIEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0VUX0tFWToKLQkJaWYgKGFsZ29yaXRobSA9PSBCNDNfU0VDX0FMR09fVEtJUCkgewotCQkJLyogRklYTUU6IE5vIFRLSVAgaGFyZHdhcmUgZW5jcnlwdGlvbiBmb3Igbm93LiAqLworCQlpZiAoYWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQICYmCisJCSAgICAoIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB8fAorCQkgICAgIW1vZHBhcmFtX2h3dGtpcCkpIHsKKwkJCS8qIFdlIHN1cHBvcnQgb25seSBwYWlyd2lzZSBrZXkgKi8KIAkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CkBAIC0zNzE4LDYgKzM3MzQsOCBAQAogCQkJCSAgICAgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfVVNFREVGS0VZUyk7CiAJCX0KIAkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJCWlmIChhbGdvcml0aG0gPT0gQjQzX1NFQ19BTEdPX1RLSVApCisJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOiB7CiAJCWVyciA9IGI0M19rZXlfY2xlYXIoZGV2LCBrZXktPmh3X2tleV9pZHgpOwpAQCAtMzczNyw4ICszNzU1LDYgQEAKIAkJICAgICAgIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIpOwogCQliNDNfZHVtcF9rZXltZW1vcnkoZGV2KTsKIAl9Ci0Jd3JpdGVfdW5sb2NrKCZ3bC0+dHhfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAogCXJldHVybiBlcnI7CkBAIC0zNzQ2LDE4ICszNzYyLDE4IEBACiAKIHN0YXRpYyB2b2lkIGI0M19vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZCwgdW5zaWduZWQgaW50ICpmZmxhZ3MsCi0JCQkJICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCisJCQkJICAgIHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwotCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKIAorCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCWlmICghZGV2KSB7CiAJCSpmZmxhZ3MgPSAwOwotCQlyZXR1cm47CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAJKmZmbGFncyAmPSBGSUZfUFJPTUlTQ19JTl9CU1MgfAogCQkgIEZJRl9BTExNVUxUSSB8CiAJCSAgRklGX0ZDU0ZBSUwgfApAQCAtMzc3OCw0MSArMzc5NCw3MCBAQAogCiAJaWYgKGNoYW5nZWQgJiYgYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKQogCQliNDNfYWRqdXN0X29wbW9kZShkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAotLyogTG9ja2luZzogd2wtPm11dGV4ICovCi1zdGF0aWMgdm9pZCBiNDNfd2lyZWxlc3NfY29yZV9zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKKy8qIExvY2tpbmc6IHdsLT5tdXRleAorICogUmV0dXJucyB0aGUgY3VycmVudCBkZXYuIFRoaXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhlIHBhc3NlZCBpbiBkZXYsCisgKiBiZWNhdXNlIHRoZSBjb3JlIG1pZ2h0IGJlIGdvbmUgYXdheSB3aGlsZSB3ZSB1bmxvY2tlZCB0aGUgbXV0ZXguICovCitzdGF0aWMgc3RydWN0IGI0M193bGRldiAqIGI0M193aXJlbGVzc19jb3JlX3N0b3Aoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gZGV2LT53bDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiNDNfd2xkZXYgKm9yaWdfZGV2OwogCi0JaWYgKGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpCi0JCXJldHVybjsKK3JlZG86CisJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfU1RBUlRFRCkKKwkJcmV0dXJuIGRldjsKIAotCS8qIERpc2FibGUgYW5kIHN5bmMgaW50ZXJydXB0cy4gV2UgbXVzdCBkbyB0aGlzIGJlZm9yZSB0aGFuCi0JICogc2V0dGluZyB0aGUgc3RhdHVzIHRvIElOSVRJQUxJWkVELCBhcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIKLQkgKiB3b24ndCBjYXJlIGFib3V0IElSUXMgdGhlbi4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7Ci0JYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0ssIDApOwotCWI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOwkvKiBmbHVzaCAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotCWI0M19zeW5jaHJvbml6ZV9pcnEoZGV2KTsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmd2wtPnR4X2xvY2ssIGZsYWdzKTsKLQliNDNfc2V0X3N0YXR1cyhkZXYsIEI0M19TVEFUX0lOSVRJQUxJWkVEKTsKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPnR4X2xvY2ssIGZsYWdzKTsKLQotCWI0M19waW9fc3RvcChkZXYpOworCS8qIENhbmNlbCB3b3JrLiBVbmxvY2sgdG8gYXZvaWQgZGVhZGxvY2tzLiAqLwogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQkvKiBNdXN0IHVubG9jayBhcyBpdCB3b3VsZCBvdGhlcndpc2UgZGVhZGxvY2suIE5vIHJhY2VzIGhlcmUuCi0JICogQ2FuY2VsIHRoZSBwb3NzaWJseSBydW5uaW5nIHNlbGYtcmVhcm1pbmcgcGVyaW9kaWMgd29yay4gKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+cGVyaW9kaWNfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmd2wtPnR4X3dvcmspOwogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCWlmICghZGV2IHx8IGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpIHsKKwkJLyogV2hvb3BzLCBhbGllbnMgYXRlIHVwIHRoZSBkZXZpY2Ugd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZC4gKi8KKwkJcmV0dXJuIGRldjsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgb24gdGhlIGRldmljZS4gKi8KKwliNDNfc2V0X3N0YXR1cyhkZXYsIEI0M19TVEFUX0lOSVRJQUxJWkVEKTsKKwlpZiAoMCAvKkZJWE1FIGRldi0+ZGV2LT5idXMtPmJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfU0RJTyovKSB7CisJCS8qIHdsLT5tdXRleCBpcyBsb2NrZWQuIFRoYXQgaXMgZW5vdWdoLiAqLworCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSywgMCk7CisJCWI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOwkvKiBGbHVzaCAqLworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoJndsLT5oYXJkaXJxX2xvY2spOworCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX0dFTl9JUlFfTUFTSywgMCk7CisJCWI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spOwkvKiBGbHVzaCAqLworCQlzcGluX3VubG9ja19pcnEoJndsLT5oYXJkaXJxX2xvY2spOworCX0KKwkvKiBTeW5jaHJvbml6ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXJzLiBVbmxvY2sgdG8gYXZvaWQgZGVhZGxvY2tzLiAqLworCW9yaWdfZGV2ID0gZGV2OworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlzeW5jaHJvbml6ZV9pcnEoZGV2LT5kZXYtPmlycSk7CisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKCFkZXYpCisJCXJldHVybiBkZXY7CisJaWYgKGRldiAhPSBvcmlnX2RldikgeworCQlpZiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX1NUQVJURUQpCisJCQlnb3RvIHJlZG87CisJCXJldHVybiBkZXY7CisJfQorCUI0M19XQVJOX09OKGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19HRU5fSVJRX01BU0spKTsKKworCS8qIERyYWluIHRoZSBUWCBxdWV1ZSAqLworCXdoaWxlIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpKQorCQlkZXZfa2ZyZWVfc2tiKHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpKTsKIAogCWI0M19tYWNfc3VzcGVuZChkZXYpOwogCWZyZWVfaXJxKGRldi0+ZGV2LT5pcnEsIGRldik7CiAJYjQzZGJnKHdsLCAiV2lyZWxlc3MgaW50ZXJmYWNlIHN0b3BwZWRcbiIpOworCisJcmV0dXJuIGRldjsKIH0KIAogLyogTG9ja2luZzogd2wtPm11dGV4ICovCkBAIC0zODIzLDggKzM4NjgsOSBAQAogCUI0M19XQVJOX09OKGI0M19zdGF0dXMoZGV2KSAhPSBCNDNfU1RBVF9JTklUSUFMSVpFRCk7CiAKIAlkcmFpbl90eHN0YXR1c19xdWV1ZShkZXYpOwotCWVyciA9IHJlcXVlc3RfaXJxKGRldi0+ZGV2LT5pcnEsIGI0M19pbnRlcnJ1cHRfaGFuZGxlciwKLQkJCSAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBkZXYpOworCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGRldi0+ZGV2LT5pcnEsIGI0M19pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCQkgICBiNDNfaW50ZXJydXB0X3RocmVhZF9oYW5kbGVyLAorCQkJCSAgIElSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWI0M2VycihkZXYtPndsLCAiQ2Fubm90IHJlcXVlc3QgSVJRLSVkXG4iLCBkZXYtPmRldi0+aXJxKTsKIAkJZ290byBvdXQ7CkBAIC0zODg1LDcgKzM5MzEsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0I0M19QSFlfTFAKIAljYXNlIEI0M19QSFlUWVBFX0xQOgotCQlpZiAocGh5X3JldiA+IDEpCisJCWlmIChwaHlfcmV2ID4gMikKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTM5NDIsNyArMzk4OCw3IEBACiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTFA6Ci0JCWlmIChyYWRpb192ZXIgIT0gMHgyMDYyKQorCQlpZiAocmFkaW9fdmVyICE9IDB4MjA2MiAmJiByYWRpb192ZXIgIT0gMHgyMDYzKQogCQkJdW5zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNDA0NiwxNiArNDA5MiwyMCBAQAogCSAgICBidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSA1KSB7CiAJCS8qIElNQ0ZHTE8gdGltZW91dHMgd29ya2Fyb3VuZC4gKi8KIAkJdG1wID0gc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX0lNQ0ZHTE8pOwotCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOwotCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwogCQlzd2l0Y2ggKGJ1cy0+YnVzdHlwZSkgewogCQljYXNlIFNTQl9CVVNUWVBFX1BDSToKIAkJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CisJCQl0bXAgJj0gflNTQl9JTUNGR0xPX1JFUVRPOworCQkJdG1wICY9IH5TU0JfSU1DRkdMT19TRVJUTzsKIAkJCXRtcCB8PSAweDMyOwogCQkJYnJlYWs7CiAJCWNhc2UgU1NCX0JVU1RZUEVfU1NCOgorCQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKKwkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87CiAJCQl0bXAgfD0gMHg1MzsKIAkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJc3NiX3dyaXRlMzIoZGV2LT5kZXYsIFNTQl9JTUNGR0xPLCB0bXApOwogCX0KQEAgLTQxMDMsOCArNDE1Myw4IEBACiB7CiAJdTMyIG1hY2N0bDsKIAotCUI0M19XQVJOX09OKGI0M19zdGF0dXMoZGV2KSA+IEI0M19TVEFUX0lOSVRJQUxJWkVEKTsKLQlpZiAoYjQzX3N0YXR1cyhkZXYpICE9IEI0M19TVEFUX0lOSVRJQUxJWkVEKQorCUI0M19XQVJOX09OKGRldiAmJiBiNDNfc3RhdHVzKGRldikgPiBCNDNfU1RBVF9JTklUSUFMSVpFRCk7CisJaWYgKCFkZXYgfHwgYjQzX3N0YXR1cyhkZXYpICE9IEI0M19TVEFUX0lOSVRJQUxJWkVEKQogCQlyZXR1cm47CiAJYjQzX3NldF9zdGF0dXMoZGV2LCBCNDNfU1RBVF9VTklOSVQpOwogCkBAIC00MjU3LDcgKzQzMDcsNiBAQAogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKIAkvKiBUT0RPOiBhbGxvdyBXRFMvQVAgZGV2aWNlcyB0byBjb2V4aXN0ICovCkBAIC00MjgxLDEyICs0MzMwLDEwIEBACiAJd2wtPmlmX3R5cGUgPSBjb25mLT50eXBlOwogCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAJYjQzX2FkanVzdF9vcG1vZGUoZGV2KTsKIAliNDNfc2V0X3ByZXRidHQoZGV2KTsKIAliNDNfc2V0X3N5bnRoX3B1X2RlbGF5KGRldiwgMCk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAogCWVyciA9IDA7CiAgb3V0X211dGV4X3VubG9jazoKQEAgLTQzMDAsNyArNDM0Nyw2IEBACiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYjQzZGJnKHdsLCAiUmVtb3ZpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOwogCkBAIC00MzEyLDExICs0MzU4LDkgQEAKIAogCXdsLT5vcGVyYXRpbmcgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCWI0M19hZGp1c3Rfb3Btb2RlKGRldik7CiAJbWVtc2V0KHdsLT5tYWNfYWRkciwgMCwgRVRIX0FMRU4pOwogCWI0M191cGxvYWRfY2FyZF9tYWNhZGRyZXNzKGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CiAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CkBAIC00Mzc2LDEwICs0NDIwLDE1IEBACiAJY2FuY2VsX3dvcmtfc3luYygmKHdsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JaWYgKGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9TVEFSVEVEKQotCQliNDNfd2lyZWxlc3NfY29yZV9zdG9wKGRldik7CisJaWYgKGI0M19zdGF0dXMoZGV2KSA+PSBCNDNfU1RBVF9TVEFSVEVEKSB7CisJCWRldiA9IGI0M193aXJlbGVzc19jb3JlX3N0b3AoZGV2KTsKKwkJaWYgKCFkZXYpCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQogCWI0M193aXJlbGVzc19jb3JlX2V4aXQoZGV2KTsKIAl3bC0+cmFkaW9fZW5hYmxlZCA9IDA7CisKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCiAJY2FuY2VsX3dvcmtfc3luYygmKHdsLT50eHBvd2VyX2FkanVzdF93b3JrKSk7CkBAIC00Mzg5LDExICs0NDM4LDEwIEBACiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGJvb2wgc2V0KQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJYjQzX3VwZGF0ZV90ZW1wbGF0ZXMod2wpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQ0NSw2ICs0NDkzLDcgQEAKIAkuYnNzX2luZm9fY2hhbmdlZAk9IGI0M19vcF9ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25maWd1cmVfZmlsdGVyCT0gYjQzX29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCisJLnVwZGF0ZV90a2lwX2tleQk9IGI0M19vcF91cGRhdGVfdGtpcF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKQEAgLTQ0NzMsOCArNDUyMiwxMyBAQAogCiAJcHJldl9zdGF0dXMgPSBiNDNfc3RhdHVzKGRldik7CiAJLyogQnJpbmcgdGhlIGRldmljZSBkb3duLi4uICovCi0JaWYgKHByZXZfc3RhdHVzID49IEI0M19TVEFUX1NUQVJURUQpCi0JCWI0M193aXJlbGVzc19jb3JlX3N0b3AoZGV2KTsKKwlpZiAocHJldl9zdGF0dXMgPj0gQjQzX1NUQVRfU1RBUlRFRCkgeworCQlkZXYgPSBiNDNfd2lyZWxlc3NfY29yZV9zdG9wKGRldik7CisJCWlmICghZGV2KSB7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAJaWYgKHByZXZfc3RhdHVzID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKQogCQliNDNfd2lyZWxlc3NfY29yZV9leGl0KGRldik7CiAKQEAgLTQ1ODAsOSArNDYzNCwxMiBAQAogCQljYXNlIEI0M19QSFlUWVBFX0E6CiAJCQloYXZlXzVnaHpfcGh5ID0gMTsKIAkJCWJyZWFrOworCQljYXNlIEI0M19QSFlUWVBFX0xQOiAvL0ZJWE1FIG5vdCBhbHdheXMhCisjaWYgMCAvL0ZJWE1FIGVuYWJsaW5nIDVHSHogY2F1c2VzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlCisJCQloYXZlXzVnaHpfcGh5ID0gMTsKKyNlbmRpZgogCQljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWNhc2UgQjQzX1BIWVRZUEVfTjoKLQkJY2FzZSBCNDNfUEhZVFlQRV9MUDoKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NTk3LDcgKzQ2NTQsOCBAQAogCX0KIAlpZiAoMSAvKiBkaXNhYmxlIEEtUEhZICovKSB7CiAJCS8qIEZJWE1FOiBGb3Igbm93IHdlIGRpc2FibGUgdGhlIEEtUEhZIG9uIG11bHRpLVBIWSBkZXZpY2VzLiAqLwotCQlpZiAoZGV2LT5waHkudHlwZSAhPSBCNDNfUEhZVFlQRV9OKSB7CisJCWlmIChkZXYtPnBoeS50eXBlICE9IEI0M19QSFlUWVBFX04gJiYKKwkJICAgIGRldi0+cGh5LnR5cGUgIT0gQjQzX1BIWVRZUEVfTFApIHsKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJaGF2ZV81Z2h6X3BoeSA9IDA7CiAJCX0KQEAgLTQ2ODUsOSArNDc0Myw2IEBACiAJd2xkZXYtPndsID0gd2w7CiAJYjQzX3NldF9zdGF0dXMod2xkZXYsIEI0M19TVEFUX1VOSU5JVCk7CiAJd2xkZXYtPmJhZF9mcmFtZXNfcHJlZW1wdCA9IG1vZHBhcmFtX2JhZF9mcmFtZXNfcHJlZW1wdDsKLQl0YXNrbGV0X2luaXQoJndsZGV2LT5pc3JfdGFza2xldCwKLQkJICAgICAodm9pZCAoKikodW5zaWduZWQgbG9uZykpYjQzX2ludGVycnVwdF90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXdsZGV2KTsKIAlJTklUX0xJU1RfSEVBRCgmd2xkZXYtPmxpc3QpOwogCiAJZXJyID0gYjQzX3dpcmVsZXNzX2NvcmVfYXR0YWNoKHdsZGV2KTsKQEAgLTQ3ODQsMTQgKzQ4MzksMTQgQEAKIAogCS8qIEluaXRpYWxpemUgc3RydWN0IGI0M193bCAqLwogCXdsLT5odyA9IGh3OwotCXNwaW5fbG9ja19pbml0KCZ3bC0+aXJxX2xvY2spOwotCXJ3bG9ja19pbml0KCZ3bC0+dHhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJndsLT5sZWRzX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZ3bC0+c2htX2xvY2spOwogCW11dGV4X2luaXQoJndsLT5tdXRleCk7CisJc3Bpbl9sb2NrX2luaXQoJndsLT5oYXJkaXJxX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ3bC0+ZGV2bGlzdCk7CiAJSU5JVF9XT1JLKCZ3bC0+YmVhY29uX3VwZGF0ZV90cmlnZ2VyLCBiNDNfYmVhY29uX3VwZGF0ZV90cmlnZ2VyX3dvcmspOwogCUlOSVRfV09SSygmd2wtPnR4cG93ZXJfYWRqdXN0X3dvcmssIGI0M19waHlfdHhwb3dlcl9hZGp1c3Rfd29yayk7CisJSU5JVF9XT1JLKCZ3bC0+dHhfd29yaywgYjQzX3R4X3dvcmspOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndsLT50eF9xdWV1ZSk7CiAKIAlzc2Jfc2V0X2RldnR5cGVkYXRhKGRldiwgd2wpOwogCWI0M2luZm8od2wsICJCcm9hZGNvbSAlMDRYIFdMQU4gZm91bmQgKGNvcmUgcmV2aXNpb24gJXUpXG4iLApAQCAtNDg3Myw3ICs0OTI4LDcgQEAKIAlpZiAoYjQzX3N0YXR1cyhkZXYpIDwgQjQzX1NUQVRfSU5JVElBTElaRUQpCiAJCXJldHVybjsKIAliNDNpbmZvKGRldi0+d2wsICJDb250cm9sbGVyIFJFU0VUICglcykgLi4uXG4iLCByZWFzb24pOwotCXF1ZXVlX3dvcmsoZGV2LT53bC0+aHctPndvcmtxdWV1ZSwgJmRldi0+cmVzdGFydF93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhkZXYtPndsLT5odywgJmRldi0+cmVzdGFydF93b3JrKTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNDg4OSw4ICs0OTQ0LDggQEAKIAl3bGRldi0+c3VzcGVuZF9pbl9wcm9ncmVzcyA9IHRydWU7CiAJd2xkZXYtPnN1c3BlbmRfaW5pdF9zdGF0dXMgPSBiNDNfc3RhdHVzKHdsZGV2KTsKIAlpZiAod2xkZXYtPnN1c3BlbmRfaW5pdF9zdGF0dXMgPj0gQjQzX1NUQVRfU1RBUlRFRCkKLQkJYjQzX3dpcmVsZXNzX2NvcmVfc3RvcCh3bGRldik7Ci0JaWYgKHdsZGV2LT5zdXNwZW5kX2luaXRfc3RhdHVzID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKQorCQl3bGRldiA9IGI0M193aXJlbGVzc19jb3JlX3N0b3Aod2xkZXYpOworCWlmICh3bGRldiAmJiB3bGRldi0+c3VzcGVuZF9pbml0X3N0YXR1cyA+PSBCNDNfU1RBVF9JTklUSUFMSVpFRCkKIAkJYjQzX3dpcmVsZXNzX2NvcmVfZXhpdCh3bGRldik7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaAppbmRleCA5NTBmYjFiLi40MGRiMDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKQEAgLTExMiwxOCArMTEyLDE0IEBACiB2b2lkIGI0M190c2Zfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgdHNmKTsKIAogdTMyIGI0M19zaG1fcmVhZDMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQpOwotdTMyIF9fYjQzX3NobV9yZWFkMzIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCk7CiB1MTYgYjQzX3NobV9yZWFkMTYoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcm91dGluZywgdTE2IG9mZnNldCk7Ci11MTYgX19iNDNfc2htX3JlYWQxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0KTsKIHZvaWQgYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7Ci12b2lkIF9fYjQzX3NobV93cml0ZTMyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJvdXRpbmcsIHUxNiBvZmZzZXQsIHUzMiB2YWx1ZSk7CiB2b2lkIGI0M19zaG1fd3JpdGUxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpOwotdm9pZCBfX2I0M19zaG1fd3JpdGUxNihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByb3V0aW5nLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpOwogCiB1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX2hmX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0IHZhbHVlKTsKIAotdm9pZCBiNDNfZHVtbXlfdHJhbnNtaXNzaW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGI0M19kdW1teV90cmFuc21pc3Npb24oc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIG9mZG0sIGJvb2wgcGFfb24pOwogCiB2b2lkIGI0M193aXJlbGVzc19jb3JlX3Jlc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwppbmRleCA4MTZlMDI4Li5kOTAyMTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwpAQCAtNTE4LDU4ICs1MTgsNDAgQEAKIHN0YXRpYyB2b2lkIGI0M19hcGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCiB7Ly9UT0RPCiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQl1NjQgaGY7CiAJdTE2IHRtcDsKIAlpbnQgYXV0b2RpdiA9IDA7CiAKIAlpZiAoYW50ZW5uYSA9PSBCNDNfQU5URU5OQV9BVVRPMCB8fCBhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8xKQogCQlhdXRvZGl2ID0gMTsKIAotCWhmID0gYjQzX2hmX3JlYWQoZGV2KTsKLQloZiAmPSB+QjQzX0hGX0FOVERJVkhFTFA7Ci0JYjQzX2hmX3dyaXRlKGRldiwgaGYpOworCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgJiB+QjQzX0hGX0FOVERJVkhFTFApOwogCi0JdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9CQkFORENGRyk7Ci0JdG1wICY9IH5CNDNfUEhZX0JCQU5EQ0ZHX1JYQU5UOwotCXRtcCB8PSAoYXV0b2RpdiA/IEI0M19BTlRFTk5BX0FVVE8wIDogYW50ZW5uYSkKLQkgICAgPDwgQjQzX1BIWV9CQkFORENGR19SWEFOVF9TSElGVDsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9CQkFORENGRywgdG1wKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0JCQU5EQ0ZHLCB+QjQzX1BIWV9CQkFORENGR19SWEFOVCwKKwkJCShhdXRvZGl2ID8gQjQzX0FOVEVOTkFfQVVUTzEgOiBhbnRlbm5hKSA8PAorCQkJQjQzX1BIWV9CQkFORENGR19SWEFOVF9TSElGVCk7CiAKIAlpZiAoYXV0b2RpdikgewogCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVERXRUxMKTsKLQkJaWYgKGFudGVubmEgPT0gQjQzX0FOVEVOTkFfQVVUTzApCisJCWlmIChhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8xKQogCQkJdG1wICY9IH5CNDNfUEhZX0FOVERXRUxMX0FVVE9ESVYxOwogCQllbHNlCiAJCQl0bXAgfD0gQjQzX1BIWV9BTlREV0VMTF9BVVRPRElWMTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsIHRtcCk7CiAJfQotCWlmIChwaHktPnJldiA8IDMpIHsKLQkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCk7Ci0JCXRtcCA9ICh0bXAgJiAweEZGMDApIHwgMHgyNDsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsIHRtcCk7Ci0JfSBlbHNlIHsKLQkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNNjEpOwotCQl0bXAgfD0gMHgxMDsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETTYxLCB0bXApOwotCQlpZiAocGh5LT5hbmFsb2cgPT0gMykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xJUFBXUkRPV05ULAotCQkJCSAgICAgIDB4MUQpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsCi0JCQkJICAgICAgOCk7CisJaWYgKHBoeS0+cmV2IDwgMykKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlREV0VMTCwgMHhGRjAwLCAweDI0KTsKKwllbHNlIHsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX09GRE02MSwgMHgxMCk7CisJCWlmIChwaHktPnJldiA9PSAzKSB7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DTElQUFdSRE9XTlQsIDB4MUQpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsIDgpOwogCQl9IGVsc2UgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xJUFBXUkRPV05ULAotCQkJCSAgICAgIDB4M0EpOwotCQkJdG1wID0KLQkJCSAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgQjQzX1BIWV9BRElWUkVMQVRFRCk7Ci0JCQl0bXAgPSAodG1wICYgMHhGRjAwKSB8IDg7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BRElWUkVMQVRFRCwKLQkJCQkgICAgICB0bXApOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xJUFBXUkRPV05ULCAweDNBKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsIDB4RkYwMCwgOCk7CiAJCX0KIAl9CiAKLQloZiB8PSBCNDNfSEZfQU5URElWSEVMUDsKLQliNDNfaGZfd3JpdGUoZGV2LCBoZik7CisJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9BTlRESVZIRUxQKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2FwaHlfb3BfYWRqdXN0X3R4cG93ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMKaW5kZXggNmQyNDE2Mi4uNzViMjZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jCkBAIC0yNDAsMjIgKzI0MCw0NCBAQAogCWRldi0+cGh5Lm9wcy0+cGh5X3dyaXRlKGRldiwgcmVnLCB2YWx1ZSk7CiB9CiAKK3ZvaWQgYjQzX3BoeV9jb3B5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IGRlc3RyZWcsIHUxNiBzcmNyZWcpCit7CisJYXNzZXJ0X21hY19zdXNwZW5kZWQoZGV2KTsKKwlkZXYtPnBoeS5vcHMtPnBoeV93cml0ZShkZXYsIGRlc3RyZWcsCisJCWRldi0+cGh5Lm9wcy0+cGh5X3JlYWQoZGV2LCBzcmNyZWcpKTsKK30KKwogdm9pZCBiNDNfcGh5X21hc2soc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgbWFzaykKIHsKLQliNDNfcGh5X3dyaXRlKGRldiwgb2Zmc2V0LAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBvZmZzZXQpICYgbWFzayk7CisJaWYgKGRldi0+cGh5Lm9wcy0+cGh5X21hc2tzZXQpIHsKKwkJYXNzZXJ0X21hY19zdXNwZW5kZWQoZGV2KTsKKwkJZGV2LT5waHkub3BzLT5waHlfbWFza3NldChkZXYsIG9mZnNldCwgbWFzaywgMCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIG9mZnNldCwKKwkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIG9mZnNldCkgJiBtYXNrKTsKKwl9CiB9CiAKIHZvaWQgYjQzX3BoeV9zZXQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgc2V0KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBvZmZzZXQsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIG9mZnNldCkgfCBzZXQpOworCWlmIChkZXYtPnBoeS5vcHMtPnBoeV9tYXNrc2V0KSB7CisJCWFzc2VydF9tYWNfc3VzcGVuZGVkKGRldik7CisJCWRldi0+cGh5Lm9wcy0+cGh5X21hc2tzZXQoZGV2LCBvZmZzZXQsIDB4RkZGRiwgc2V0KTsKKwl9IGVsc2UgeworCQliNDNfcGh5X3dyaXRlKGRldiwgb2Zmc2V0LAorCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgb2Zmc2V0KSB8IHNldCk7CisJfQogfQogCiB2b2lkIGI0M19waHlfbWFza3NldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBvZmZzZXQsIHUxNiBtYXNrLCB1MTYgc2V0KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBvZmZzZXQsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBvZmZzZXQpICYgbWFzaykgfCBzZXQpOworCWlmIChkZXYtPnBoeS5vcHMtPnBoeV9tYXNrc2V0KSB7CisJCWFzc2VydF9tYWNfc3VzcGVuZGVkKGRldik7CisJCWRldi0+cGh5Lm9wcy0+cGh5X21hc2tzZXQoZGV2LCBvZmZzZXQsIG1hc2ssIHNldCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIG9mZnNldCwKKwkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBvZmZzZXQpICYgbWFzaykgfCBzZXQpOworCX0KIH0KIAogaW50IGI0M19zd2l0Y2hfY2hhbm5lbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHVuc2lnbmVkIGludCBuZXdfY2hhbm5lbCkKQEAgLTMyNSw3ICszNDcsNiBAQAogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAotLyogQ2FsbGVkIHdpdGggd2wtPmlycV9sb2NrIGxvY2tlZCAqLwogdm9pZCBiNDNfcGh5X3R4cG93ZXJfY2hlY2soc3RydWN0IGI0M193bGRldiAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKQEAgLTM1Miw3ICszNzMsNyBAQAogCiAJLyogV2UgbXVzdCBhZGp1c3QgdGhlIHRyYW5zbWlzc2lvbiBwb3dlciBpbiBoYXJkd2FyZS4KIAkgKiBTY2hlZHVsZSBiNDNfcGh5X3R4cG93ZXJfYWRqdXN0X3dvcmsoKS4gKi8KLQlxdWV1ZV93b3JrKGRldi0+d2wtPmh3LT53b3JrcXVldWUsICZkZXYtPndsLT50eHBvd2VyX2FkanVzdF93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhkZXYtPndsLT5odywgJmRldi0+d2wtPnR4cG93ZXJfYWRqdXN0X3dvcmspOwogfQogCiBpbnQgYjQzX3BoeV9zaG1fdHNzaV9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHNobV9vZmZzZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaAppbmRleCA0NGNjOTE4Li45ZWRkNGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmgKQEAgLTQ5LDExICs0OSwxMSBAQAogCiAvKiBBbnRlbm5hIGlkZW50aWZpZXJzICovCiBlbnVtIHsKLQlCNDNfQU5URU5OQTAsCQkvKiBBbnRlbm5hIDAgKi8KLQlCNDNfQU5URU5OQTEsCQkvKiBBbnRlbm5hIDAgKi8KLQlCNDNfQU5URU5OQV9BVVRPMSwJLyogQXV0b21hdGljLCBzdGFydGluZyB3aXRoIGFudGVubmEgMSAqLwotCUI0M19BTlRFTk5BX0FVVE8wLAkvKiBBdXRvbWF0aWMsIHN0YXJ0aW5nIHdpdGggYW50ZW5uYSAwICovCi0JQjQzX0FOVEVOTkEyLAorCUI0M19BTlRFTk5BMCA9IDAsCS8qIEFudGVubmEgMCAqLworCUI0M19BTlRFTk5BMSA9IDEsCS8qIEFudGVubmEgMSAqLworCUI0M19BTlRFTk5BX0FVVE8wID0gMiwJLyogQXV0b21hdGljLCBzdGFydGluZyB3aXRoIGFudGVubmEgMCAqLworCUI0M19BTlRFTk5BX0FVVE8xID0gMywJLyogQXV0b21hdGljLCBzdGFydGluZyB3aXRoIGFudGVubmEgMSAqLworCUI0M19BTlRFTk5BMiA9IDQsCiAJQjQzX0FOVEVOTkEzID0gOCwKIAogCUI0M19BTlRFTk5BX0FVVE8gPSBCNDNfQU5URU5OQV9BVVRPMCwKQEAgLTk1LDYgKzk1LDggQEAKICAqIAkJCU11c3Qgbm90IGJlIE5VTEwuCiAgKiBAcGh5X3dyaXRlOgkJV3JpdGUgdG8gYSBQSFkgcmVnaXN0ZXIuCiAgKiAJCQlNdXN0IG5vdCBiZSBOVUxMLgorICogQHBoeV9tYXNrc2V0OglNYXNrc2V0IGEgUEhZIHJlZ2lzdGVyLCB0YWtpbmcgc2hvcnRjdXRzLgorICoJCQlJZiBpdCBpcyBOVUxMLCBhIGdlbmVyaWMgYWxnb3JpdGhtIGlzIHVzZWQuCiAgKiBAcmFkaW9fcmVhZDoJCVJlYWQgZnJvbSBhIFJhZGlvIHJlZ2lzdGVyLgogICogCQkJTXVzdCBub3QgYmUgTlVMTC4KICAqIEByYWRpb193cml0ZToJV3JpdGUgdG8gYSBSYWRpbyByZWdpc3Rlci4KQEAgLTEyOSw3ICsxMzEsNyBAQAogICogCQkJSWYgdGhlIHBhcmFtZXRlciAiaWdub3JlX3Rzc2kiIGlzIHRydWUsIHRoZSBUU1NJIHZhbHVlcyBzaG91bGQKICAqIAkJCWJlIGlnbm9yZWQgYW5kIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgcG93ZXIgc2V0dGluZ3Mgc2hvdWxkIGJlCiAgKiAJCQlkb25lIGV2ZW4gaWYgdGhlIFRTU0kgdmFsdWVzIGRpZCBub3QgY2hhbmdlLgotICogCQkJVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB3bC0+aXJxX2xvY2sgaGVsZCBhbmQgbXVzdCBub3Qgc2xlZXAuCisgKiAJCQlUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCwgYnV0IHNob3VsZCBub3QuCiAgKiAJCQlNdXN0IG5vdCBiZSBOVUxMLgogICogQGFkanVzdF90eHBvd2VyOglXcml0ZSB0aGUgcHJldmlvdXNseSBjYWxjdWxhdGVkIFRYIHBvd2VyIHNldHRpbmdzCiAgKiAJCQkoZnJvbSBAcmVjYWxjX3R4cG93ZXIpIHRvIHRoZSBoYXJkd2FyZS4KQEAgLTE1NCw2ICsxNTYsNyBAQAogCS8qIFJlZ2lzdGVyIGFjY2VzcyAqLwogCXUxNiAoKnBoeV9yZWFkKShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcpOwogCXZvaWQgKCpwaHlfd3JpdGUpKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZywgdTE2IHZhbHVlKTsKKwl2b2lkICgqcGh5X21hc2tzZXQpKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZywgdTE2IG1hc2ssIHUxNiBzZXQpOwogCXUxNiAoKnJhZGlvX3JlYWQpKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZyk7CiAJdm9pZCAoKnJhZGlvX3dyaXRlKShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CiAKQEAgLTI5MSw2ICsyOTQsMTEgQEAKIHZvaWQgYjQzX3BoeV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcsIHUxNiB2YWx1ZSk7CiAKIC8qKgorICogYjQzX3BoeV9jb3B5IC0gY29weSBjb250ZW50cyBvZiAxNmJpdCBQSFkgcmVnaXN0ZXIgdG8gYW5vdGhlcgorICovCit2b2lkIGI0M19waHlfY29weShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBkZXN0cmVnLCB1MTYgc3JjcmVnKTsKKworLyoqCiAgKiBiNDNfcGh5X21hc2sgLSBNYXNrIGEgUEhZIHJlZ2lzdGVyIHdpdGggYSBtYXNrCiAgKi8KIHZvaWQgYjQzX3BoeV9tYXNrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgdTE2IG1hc2spOwpAQCAtMzcxLDcgKzM3OSw2IEBACiAgKgogICogQ29tcGFyZSB0aGUgY3VycmVudCBUWCBwb3dlciBvdXRwdXQgdG8gdGhlIGRlc2lyZWQgcG93ZXIgZW1pc3Npb24KICAqIGFuZCBzY2hlZHVsZSBhbiBhZGp1c3RtZW50IGluIGNhc2UgaXQgbWlzbWF0Y2hlcy4KLSAqIFJlcXVpcmVzIHdsLT5pcnFfbG9jayBsb2NrZWQuCiAgKgogICogQGZsYWdzOglPUidlZCBlbnVtIGI0M19waHlfdHhwb3dlcl9jaGVja19mbGFncyBmbGFncy4KICAqIAkJU2VlIHRoZSBkb2NzIGJlbG93LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9nLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwppbmRleCA1MzAwMjMyLi4zODI4MjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMSwgMHhCRkJGLCB0bXApOwogCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4QkZCRiwgdG1wKTsKIAl9Ci0JYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzY1LDcgKzM2NSw3IEBACiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEJGQkYsIDB4NDA0MCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEJGQkYsIDB4NDA0MCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEJGQkYsIDB4NDAwMCk7Ci0JYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCBmYWxzZSwgdHJ1ZSk7CiB9CiAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9OUlNTSUxvb2t1cFRhYmxlICovCkBAIC0xOTY0LDcgKzE5NjQsNyBAQAogCQkJfQogCQkJYjQzX3NldF90eHBvd2VyX2coZGV2LCAmYmJhdHQsICZyZmF0dCwgMCk7CiAJCX0KLQkJYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCQliNDNfZHVtbXlfdHJhbnNtaXNzaW9uKGRldiwgZmFsc2UsIHRydWUpOwogCQlncGh5LT5jdXJfaWRsZV90c3NpID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9JVFNTSSk7CiAJCWlmIChCNDNfREVCVUcpIHsKIAkJCS8qIEN1cnJlbnQtSWRsZS1UU1NJIHNhbml0eSBjaGVjay4gKi8KQEAgLTI2NTEsNjUgKzI2NTEsNTQgQEAKIHN0YXRpYyB2b2lkIGI0M19ncGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKLQl1NjQgaGY7CiAJdTE2IHRtcDsKIAlpbnQgYXV0b2RpdiA9IDA7CiAKIAlpZiAoYW50ZW5uYSA9PSBCNDNfQU5URU5OQV9BVVRPMCB8fCBhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8xKQogCQlhdXRvZGl2ID0gMTsKIAotCWhmID0gYjQzX2hmX3JlYWQoZGV2KTsKLQloZiAmPSB+QjQzX0hGX0FOVERJVkhFTFA7Ci0JYjQzX2hmX3dyaXRlKGRldiwgaGYpOworCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgJiB+QjQzX0hGX0FOVERJVkhFTFApOwogCi0JdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9CQkFORENGRyk7Ci0JdG1wICY9IH5CNDNfUEhZX0JCQU5EQ0ZHX1JYQU5UOwotCXRtcCB8PSAoYXV0b2RpdiA/IEI0M19BTlRFTk5BX0FVVE8wIDogYW50ZW5uYSkKLQkJCTw8IEI0M19QSFlfQkJBTkRDRkdfUlhBTlRfU0hJRlQ7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQkJBTkRDRkcsIHRtcCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9CQkFORENGRywgfkI0M19QSFlfQkJBTkRDRkdfUlhBTlQsCisJCQkoYXV0b2RpdiA/IEI0M19BTlRFTk5BX0FVVE8xIDogYW50ZW5uYSkgPDwKKwkJCUI0M19QSFlfQkJBTkRDRkdfUlhBTlRfU0hJRlQpOwogCiAJaWYgKGF1dG9kaXYpIHsKIAkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCk7Ci0JCWlmIChhbnRlbm5hID09IEI0M19BTlRFTk5BX0FVVE8wKQorCQlpZiAoYW50ZW5uYSA9PSBCNDNfQU5URU5OQV9BVVRPMSkKIAkJCXRtcCAmPSB+QjQzX1BIWV9BTlREV0VMTF9BVVRPRElWMTsKIAkJZWxzZQogCQkJdG1wIHw9IEI0M19QSFlfQU5URFdFTExfQVVUT0RJVjE7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVERXRUxMLCB0bXApOwogCX0KKwogCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5UV1JTRVRUKTsKIAlpZiAoYXV0b2RpdikKIAkJdG1wIHw9IEI0M19QSFlfQU5UV1JTRVRUX0FSWERJVjsKIAllbHNlCiAJCXRtcCAmPSB+QjQzX1BIWV9BTlRXUlNFVFRfQVJYRElWOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVFdSU0VUVCwgdG1wKTsKKworCWlmIChhdXRvZGl2KQorCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5UV1JTRVRULCBCNDNfUEhZX0FOVFdSU0VUVF9BUlhESVYpOworCWVsc2UgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOVFdSU0VUVCwKKwkJCSAgICAgQjQzX1BIWV9BTlRXUlNFVFRfQVJYRElWKTsKKwl9CisKIAlpZiAocGh5LT5yZXYgPj0gMikgewotCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE02MSk7Ci0JCXRtcCB8PSBCNDNfUEhZX09GRE02MV8xMDsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETTYxLCB0bXApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETTYxLCBCNDNfUEhZX09GRE02MV8xMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfRElWU1JDSEdBSU5CQUNLLCAweEZGMDAsIDB4MTUpOwogCi0JCXRtcCA9Ci0JCSAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hHQUlOQkFDSyk7Ci0JCXRtcCA9ICh0bXAgJiAweEZGMDApIHwgMHgxNTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRElWU1JDSEdBSU5CQUNLLAotCQkJICAgICAgdG1wKTsKLQotCQlpZiAocGh5LT5yZXYgPT0gMikgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsCi0JCQkJICAgICAgOCk7Ci0JCX0gZWxzZSB7Ci0JCQl0bXAgPQotCQkJICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSBCNDNfUEhZX0FESVZSRUxBVEVEKTsKLQkJCXRtcCA9ICh0bXAgJiAweEZGMDApIHwgODsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FESVZSRUxBVEVELAotCQkJCSAgICAgIHRtcCk7Ci0JCX0KKwkJaWYgKHBoeS0+cmV2ID09IDIpCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BRElWUkVMQVRFRCwgOCk7CisJCWVsc2UKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQURJVlJFTEFURUQsIDB4RkYwMCwgOCk7CiAJfQogCWlmIChwaHktPnJldiA+PSA2KQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNOUIsIDB4REMpOwogCi0JaGYgfD0gQjQzX0hGX0FOVERJVkhFTFA7Ci0JYjQzX2hmX3dyaXRlKGRldiwgaGYpOworCWI0M19oZl93cml0ZShkZXYsIGI0M19oZl9yZWFkKGRldikgfCBCNDNfSEZfQU5URElWSEVMUCk7CiB9CiAKIHN0YXRpYyBpbnQgYjQzX2dwaHlfb3BfaW50ZXJmX21pdGlnYXRpb24oc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtMjgzNCw4ICsyODIzLDYgQEAKIAogCWI0M19tYWNfc3VzcGVuZChkZXYpOwogCi0Jc3Bpbl9sb2NrX2lycSgmZGV2LT53bC0+aXJxX2xvY2spOwotCiAJLyogQ2FsY3VsYXRlIHRoZSBuZXcgYXR0ZW51YXRpb24gdmFsdWVzLiAqLwogCWJiYXR0ID0gZ3BoeS0+YmJhdHQuYXR0OwogCWJiYXR0ICs9IGdwaHktPmJiYXR0X2RlbHRhOwpAQCAtMjg3NSwxMSArMjg2Miw2IEBACiAJZ3BoeS0+cmZhdHQuYXR0ID0gcmZhdHQ7CiAJZ3BoeS0+YmJhdHQuYXR0ID0gYmJhdHQ7CiAKLQkvKiBXZSBkcm9wIHRoZSBsb2NrIGVhcmx5LCBzbyB3ZSBjYW4gc2xlZXAgZHVyaW5nIGhhcmR3YXJlCi0JICogYWRqdXN0bWVudC4gUG9zc2libGUgcmFjZXMgd2l0aCBvcF9yZWNhbGNfdHhwb3dlciBhcmUgaGFybWxlc3MsCi0JICogYXMgd2Ugd2lsbCBiZSBjYWxsZWQgb25jZSBhZ2FpbiBpbiBjYXNlIHdlIHJhY2VkLiAqLwotCXNwaW5fdW5sb2NrX2lycSgmZGV2LT53bC0+aXJxX2xvY2spOwotCiAJaWYgKGI0M19kZWJ1ZyhkZXYsIEI0M19EQkdfWE1JVFBPV0VSKSkKIAkJYjQzZGJnKGRldi0+d2wsICJBZGp1c3RpbmcgVFggcG93ZXJcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCmluZGV4IDcxODk0N2YuLjg1NjlmZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5oCkBAIC0xNDEsOCArMTQxLDcgQEAKIAlpbnQgdGd0X2lkbGVfdHNzaTsKIAkvKiBDdXJyZW50IGlkbGUgVFNTSSAqLwogCWludCBjdXJfaWRsZV90c3NpOwotCS8qIFRoZSBjdXJyZW50IGF2ZXJhZ2UgVFNTSS4KLQkgKiBOZWVkcyBpcnFfbG9jaywgYXMgaXQncyB1cGRhdGVkIGluIHRoZSBJUlEgcGF0aC4gKi8KKwkvKiBUaGUgY3VycmVudCBhdmVyYWdlIFRTU0kuICovCiAJdTggYXZlcmFnZV90c3NpOwogCS8qIEN1cnJlbnQgVFggcG93ZXIgbGV2ZWwgYXR0ZW51YXRpb24gY29udHJvbCB2YWx1ZXMgKi8KIAlzdHJ1Y3QgYjQzX2JiYXR0IGJiYXR0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCmluZGV4IGVhMGQzYTMuLjNlMDJkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKQEAgLTEsOSArMSwxMCBAQAogLyoKIAogICBCcm9hZGNvbSBCNDMgd2lyZWxlc3MgZHJpdmVyCi0gIElFRUUgODAyLjExZyBMUC1QSFkgZHJpdmVyCisgIElFRUUgODAyLjExYS9nIExQLVBIWSBkcml2ZXIKIAogICBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICBDb3B5cmlnaHQgKGMpIDIwMDkgR8OhYm9yIFN0ZWZhbmlrIDxuZXRyb2xsbGVyLjNkQGdtYWlsLmNvbT4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjksNiArMzAsMjUgQEAKICNpbmNsdWRlICJ0YWJsZXNfbHBwaHkuaCIKIAogCitzdGF0aWMgaW5saW5lIHUxNiBjaGFubmVsMmZyZXFfbHAodTggY2hhbm5lbCkKK3sKKwlpZiAoY2hhbm5lbCA8IDE0KQorCQlyZXR1cm4gKDI0MDcgKyA1ICogY2hhbm5lbCk7CisJZWxzZSBpZiAoY2hhbm5lbCA9PSAxNCkKKwkJcmV0dXJuIDI0ODQ7CisJZWxzZSBpZiAoY2hhbm5lbCA8IDE4NCkKKwkJcmV0dXJuICg1MDAwICsgNSAqIGNoYW5uZWwpOworCWVsc2UKKwkJcmV0dXJuICg0MDAwICsgNSAqIGNoYW5uZWwpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGI0M19scHBoeV9vcF9nZXRfZGVmYXVsdF9jaGFuKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMzY7Cit9CisKIHN0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2FsbG9jYXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHk7CkBAIC01OSwxNCArNzksMzI1IEBACiAJZGV2LT5waHkubHAgPSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBscHBoeV9yZWFkX2JhbmRfc3Byb20oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOworCXUxNiBjY2twbywgbWF4cHdyOworCXUzMiBvZmRtcG87CisJaW50IGk7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWxwcGh5LT50eF9pc29sYXRpb25fbWVkX2JhbmQgPSBidXMtPnNwcm9tLnRyaTJnOworCQlscHBoeS0+YnhfYXJjaCA9IGJ1cy0+c3Byb20uYnhhMmc7CisJCWxwcGh5LT5yeF9wd3Jfb2Zmc2V0ID0gYnVzLT5zcHJvbS5yeHBvMmc7CisJCWxwcGh5LT5yc3NpX3ZmID0gYnVzLT5zcHJvbS5yc3Npc21mMmc7CisJCWxwcGh5LT5yc3NpX3ZjID0gYnVzLT5zcHJvbS5yc3Npc21jMmc7CisJCWxwcGh5LT5yc3NpX2dzID0gYnVzLT5zcHJvbS5yc3Npc2F2Mmc7CisJCWxwcGh5LT50eHBhWzBdID0gYnVzLT5zcHJvbS5wYTBiMDsKKwkJbHBwaHktPnR4cGFbMV0gPSBidXMtPnNwcm9tLnBhMGIxOworCQlscHBoeS0+dHhwYVsyXSA9IGJ1cy0+c3Byb20ucGEwYjI7CisJCW1heHB3ciA9IGJ1cy0+c3Byb20ubWF4cHdyX2JnOworCQlscHBoeS0+bWF4X3R4X3B3cl9tZWRfYmFuZCA9IG1heHB3cjsKKwkJY2NrcG8gPSBidXMtPnNwcm9tLmNjazJncG87CisJCW9mZG1wbyA9IGJ1cy0+c3Byb20ub2ZkbTJncG87CisJCWlmIChjY2twbykgeworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJCWxwcGh5LT50eF9tYXhfcmF0ZVtpXSA9CisJCQkJCW1heHB3ciAtIChvZmRtcG8gJiAweEYpICogMjsKKwkJCQlvZmRtcG8gPj49IDQ7CisJCQl9CisJCQlvZmRtcG8gPSBidXMtPnNwcm9tLm9mZG0yZ3BvOworCQkJZm9yIChpID0gNDsgaSA8IDE1OyBpKyspIHsKKwkJCQlscHBoeS0+dHhfbWF4X3JhdGVbaV0gPQorCQkJCQltYXhwd3IgLSAob2ZkbXBvICYgMHhGKSAqIDI7CisJCQkJb2ZkbXBvID4+PSA0OworCQkJfQorCQl9IGVsc2UgeworCQkJb2ZkbXBvICY9IDB4RkY7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJCWxwcGh5LT50eF9tYXhfcmF0ZVtpXSA9IG1heHB3cjsKKwkJCWZvciAoaSA9IDQ7IGkgPCAxNTsgaSsrKQorCQkJCWxwcGh5LT50eF9tYXhfcmF0ZVtpXSA9IG1heHB3ciAtIG9mZG1wbzsKKwkJfQorCX0gZWxzZSB7IC8qIDVHSHogKi8KKwkJbHBwaHktPnR4X2lzb2xhdGlvbl9sb3dfYmFuZCA9IGJ1cy0+c3Byb20udHJpNWdsOworCQlscHBoeS0+dHhfaXNvbGF0aW9uX21lZF9iYW5kID0gYnVzLT5zcHJvbS50cmk1ZzsKKwkJbHBwaHktPnR4X2lzb2xhdGlvbl9oaV9iYW5kID0gYnVzLT5zcHJvbS50cmk1Z2g7CisJCWxwcGh5LT5ieF9hcmNoID0gYnVzLT5zcHJvbS5ieGE1ZzsKKwkJbHBwaHktPnJ4X3B3cl9vZmZzZXQgPSBidXMtPnNwcm9tLnJ4cG81ZzsKKwkJbHBwaHktPnJzc2lfdmYgPSBidXMtPnNwcm9tLnJzc2lzbWY1ZzsKKwkJbHBwaHktPnJzc2lfdmMgPSBidXMtPnNwcm9tLnJzc2lzbWM1ZzsKKwkJbHBwaHktPnJzc2lfZ3MgPSBidXMtPnNwcm9tLnJzc2lzYXY1ZzsKKwkJbHBwaHktPnR4cGFbMF0gPSBidXMtPnNwcm9tLnBhMWIwOworCQlscHBoeS0+dHhwYVsxXSA9IGJ1cy0+c3Byb20ucGExYjE7CisJCWxwcGh5LT50eHBhWzJdID0gYnVzLT5zcHJvbS5wYTFiMjsKKwkJbHBwaHktPnR4cGFsWzBdID0gYnVzLT5zcHJvbS5wYTFsb2IwOworCQlscHBoeS0+dHhwYWxbMV0gPSBidXMtPnNwcm9tLnBhMWxvYjE7CisJCWxwcGh5LT50eHBhbFsyXSA9IGJ1cy0+c3Byb20ucGExbG9iMjsKKwkJbHBwaHktPnR4cGFoWzBdID0gYnVzLT5zcHJvbS5wYTFoaWIwOworCQlscHBoeS0+dHhwYWhbMV0gPSBidXMtPnNwcm9tLnBhMWhpYjE7CisJCWxwcGh5LT50eHBhaFsyXSA9IGJ1cy0+c3Byb20ucGExaGliMjsKKwkJbWF4cHdyID0gYnVzLT5zcHJvbS5tYXhwd3JfYWw7CisJCW9mZG1wbyA9IGJ1cy0+c3Byb20ub2ZkbTVnbHBvOworCQlscHBoeS0+bWF4X3R4X3B3cl9sb3dfYmFuZCA9IG1heHB3cjsKKwkJZm9yIChpID0gNDsgaSA8IDEyOyBpKyspIHsKKwkJCWxwcGh5LT50eF9tYXhfcmF0ZWxbaV0gPSBtYXhwd3IgLSAob2ZkbXBvICYgMHhGKSAqIDI7CisJCQlvZmRtcG8gPj49IDQ7CisJCX0KKwkJbWF4cHdyID0gYnVzLT5zcHJvbS5tYXhwd3JfYTsKKwkJb2ZkbXBvID0gYnVzLT5zcHJvbS5vZmRtNWdwbzsKKwkJbHBwaHktPm1heF90eF9wd3JfbWVkX2JhbmQgPSBtYXhwd3I7CisJCWZvciAoaSA9IDQ7IGkgPCAxMjsgaSsrKSB7CisJCQlscHBoeS0+dHhfbWF4X3JhdGVbaV0gPSBtYXhwd3IgLSAob2ZkbXBvICYgMHhGKSAqIDI7CisJCQlvZmRtcG8gPj49IDQ7CisJCX0KKwkJbWF4cHdyID0gYnVzLT5zcHJvbS5tYXhwd3JfYWg7CisJCW9mZG1wbyA9IGJ1cy0+c3Byb20ub2ZkbTVnaHBvOworCQlscHBoeS0+bWF4X3R4X3B3cl9oaV9iYW5kID0gbWF4cHdyOworCQlmb3IgKGkgPSA0OyBpIDwgMTI7IGkrKykgeworCQkJbHBwaHktPnR4X21heF9yYXRlaFtpXSA9IG1heHB3ciAtIChvZmRtcG8gJiAweEYpICogMjsKKwkJCW9mZG1wbyA+Pj0gNDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfYWRqdXN0X2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgZnJlcSkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MTYgdGVtcFszXTsKKwl1MTYgaXNvbGF0aW9uOworCisJQjQzX1dBUk5fT04oZGV2LT5waHkucmV2ID49IDIpOworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJaXNvbGF0aW9uID0gbHBwaHktPnR4X2lzb2xhdGlvbl9tZWRfYmFuZDsKKwllbHNlIGlmIChmcmVxIDw9IDUzMjApCisJCWlzb2xhdGlvbiA9IGxwcGh5LT50eF9pc29sYXRpb25fbG93X2JhbmQ7CisJZWxzZSBpZiAoZnJlcSA8PSA1NzAwKQorCQlpc29sYXRpb24gPSBscHBoeS0+dHhfaXNvbGF0aW9uX21lZF9iYW5kOworCWVsc2UKKwkJaXNvbGF0aW9uID0gbHBwaHktPnR4X2lzb2xhdGlvbl9oaV9iYW5kOworCisJdGVtcFswXSA9ICgoaXNvbGF0aW9uIC0gMjYpIC8gMTIpIDw8IDEyOworCXRlbXBbMV0gPSB0ZW1wWzBdICsgMHgxMDAwOworCXRlbXBbMl0gPSB0ZW1wWzBdICsgMHgyMDAwOworCisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxMywgMCksIDMsIHRlbXApOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTIsIDApLCAzLCB0ZW1wKTsKK30KKwogc3RhdGljIHZvaWQgbHBwaHlfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JLy9UT0RPCisJdTMyIGZyZXEgPSBjaGFubmVsMmZyZXFfbHAoYjQzX2xwcGh5X29wX2dldF9kZWZhdWx0X2NoYW4oZGV2KSk7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikKKwkJbHBwaHlfcmV2MF8xX3RhYmxlX2luaXQoZGV2KTsKKwllbHNlCisJCWxwcGh5X3JldjJwbHVzX3RhYmxlX2luaXQoZGV2KTsKKworCWxwcGh5X2luaXRfdHhfZ2Fpbl90YWJsZShkZXYpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIpCisJCWxwcGh5X2FkanVzdF9nYWluX3RhYmxlKGRldiwgZnJlcSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjBfMV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQlCNDNfV0FSTl9PTigxKTsvL1RPRE8gcmV2IDwgMiBub3Qgc3VwcG9ydGVkLCB5ZXQuCisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJdTE2IHRtcCwgdG1wMjsKKworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHhGN0ZGKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9DVEwsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHgwMDA0KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gwLCAweEZGMDAsIDB4MDA3OCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4ODNGRiwgMHg1ODAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FEQ19DT01QRU5TQVRJT05fQ1RMLCAweDAwMTYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfQURDX0NUTF8wLCAweEZGRjgsIDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIsIDB4MDBGRiwgMHg1NDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSElHQUlOREIsIDB4MDBGRiwgMHgyNDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTE9XR0FJTkRCLCAweDAwRkYsIDB4MjEwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIsIDB4RkYwMCwgMHgwMDA2KTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUlhfUkFESU9fQ1RMLCAweEZGRkUpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZGRTAsIDB4MDAwNSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4RkMxRiwgMHgwMTgwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHg4M0ZGLCAweDNDMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIDB4RkZGMCwgMHgwMDA1KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTl9NSVNNQVRDSF9MSU1JVCwgMHhGRkMwLCAweDAwMUEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweEZGMDAsIDB4MDBCMyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU19FRF9USFJFU0gsIDB4MDBGRiwgMHhBRDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSU5QVVRfUFdSREIsCisJCQkweEZGMDAsIGxwcGh5LT5yeF9wd3Jfb2Zmc2V0KTsKKwlpZiAoKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfRkVNKSAmJgorCSAgICgoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKSB8fAorCSAgIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX1BBUkVGKSkpIHsKKwkJc3NiX3BtdV9zZXRfbGRvX3ZvbHRhZ2UoJmJ1cy0+Y2hpcGNvLCBMRE9fUEFSRUYsIDB4MjgpOworCQlzc2JfcG11X3NldF9sZG9fcGFyZWYoJmJ1cy0+Y2hpcGNvLCB0cnVlKTsKKwkJaWYgKGRldi0+cGh5LnJldiA9PSAwKSB7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTFBfUkZfU0lHTkFMX0xVVCwKKwkJCQkJMHhGRkNGLCAweDAwMTApOworCQl9CisJCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjE2KDExLCA3KSwgNjApOworCX0gZWxzZSB7CisJCXNzYl9wbXVfc2V0X2xkb19wYXJlZigmYnVzLT5jaGlwY28sIGZhbHNlKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xQX1JGX1NJR05BTF9MVVQsCisJCQkJMHhGRkNGLCAweDAwMjApOworCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigxMSwgNyksIDEwMCk7CisJfQorCXRtcCA9IGxwcGh5LT5yc3NpX3ZmIHwgbHBwaHktPnJzc2lfdmMgPDwgNCB8IDB4QTAwMDsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8wLCB0bXApOworCWlmIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX1JTU0lJTlYpCisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfUlNTSV9DVExfMSwgMHhGMDAwLCAweDBBQUEpOworCWVsc2UKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xLCAweEYwMDAsIDB4MDJBQSk7CisJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMTEsIDEpLCAyNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JYX1JBRElPX0NUTCwKKwkJCTB4RkZGOSwgKGxwcGh5LT5ieF9hcmNoIDw8IDEpKTsKKwlpZiAoZGV2LT5waHkucmV2ID09IDEgJiYKKwkgICAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2hpICYgQjQzX0JGSF9GRU1fQlQpKSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMSwgMHhGRkMwLCAweDAwMEEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDB4M0YwMCwgMHgwOTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8yLCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMiwgMHhDMEZGLCAweDBCMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzMsIDB4RkZDMCwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8zLCAweEMwRkYsIDB4MDQwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNCwgMHhGRkMwLCAweDAwMEEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzQsIDB4QzBGRiwgMHgwQjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF81LCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNSwgMHhDMEZGLCAweDA5MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzYsIDB4RkZDMCwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF82LCAweEMwRkYsIDB4MEIwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNywgMHhGRkMwLCAweDAwMEEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzcsIDB4QzBGRiwgMHgwOTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF84LCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfOCwgMHhDMEZGLCAweDBCMDApOworCX0gZWxzZSBpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haIHx8CisJCSAgKGJ1cy0+Ym9hcmRpbmZvLnR5cGUgPT0gMHgwNDhBKSB8fCAoKGRldi0+cGh5LnJldiA9PSAwKSAmJgorCQkgIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0ZFTSkpKSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMSwgMHhGRkMwLCAweDAwMDEpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDB4QzBGRiwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8yLCAweEZGQzAsIDB4MDAwMSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMiwgMHhDMEZGLCAweDA1MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzMsIDB4RkZDMCwgMHgwMDAyKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8zLCAweEMwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNCwgMHhGRkMwLCAweDAwMDIpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzQsIDB4QzBGRiwgMHgwQTAwKTsKKwl9IGVsc2UgaWYgKGRldi0+cGh5LnJldiA9PSAxIHx8CisJCSAgKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfRkVNKSkgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDB4RkZDMCwgMHgwMDA0KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAweEMwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMiwgMHhGRkMwLCAweDAwMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzIsIDB4QzBGRiwgMHgwQzAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8zLCAweEZGQzAsIDB4MDAwMik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMywgMHhDMEZGLCAweDAxMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzQsIDB4RkZDMCwgMHgwMDAyKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF80LCAweEMwRkYsIDB4MDMwMCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAweEZGQzAsIDB4MDAwQSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMSwgMHhDMEZGLCAweDA5MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzIsIDB4RkZDMCwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8yLCAweEMwRkYsIDB4MEIwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfMywgMHhGRkMwLCAweDAwMDYpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzMsIDB4QzBGRiwgMHgwNTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF80LCAweEZGQzAsIDB4MDAwNik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNCwgMHhDMEZGLCAweDA3MDApOworCX0KKwlpZiAoZGV2LT5waHkucmV2ID09IDEgJiYgKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19oaSAmIEI0M19CRkhfUEFSRUYpKSB7CisJCWI0M19waHlfY29weShkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfNSwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xKTsKKwkJYjQzX3BoeV9jb3B5KGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF82LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzIpOworCQliNDNfcGh5X2NvcHkoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzcsIEI0M19MUFBIWV9UUl9MT09LVVBfMyk7CisJCWI0M19waHlfY29weShkZXYsIEI0M19MUFBIWV9UUl9MT09LVVBfOCwgQjQzX0xQUEhZX1RSX0xPT0tVUF80KTsKKwl9CisJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX0ZFTV9CVCkgJiYKKwkgICAgKGJ1cy0+Y2hpcF9pZCA9PSAweDUzNTQpICYmCisJICAgIChidXMtPmNoaXBfcGFja2FnZSA9PSBTU0JfQ0hJUFBBQ0tfQkNNNDcxMlMpKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDAwMDYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0dQSU9fU0VMRUNULCAweDAwMDUpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0dQSU9fT1VURU4sIDB4RkZGRik7CisJCS8vRklYTUUgdGhlIEJyb2FkY29tIGRyaXZlciBjYWNoZXMgJiBkZWxheXMgdGhpcyBIRiB3cml0ZSEKKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9QUjQ1OTYwVyk7CisJfQorCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHg4MDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIDB4MDA0MCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHhBNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEYwRkYsIDB4MEIwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9TWU5DUEVBS0NOVCwgMHhGRkY4LCAweDAwMDcpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRFNTU19DT05GSVJNX0NOVCwgMHhGRkY4LCAweDAwMDMpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRFNTU19DT05GSVJNX0NOVCwgMHhGRkM3LCAweDAwMjApOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfSURMRUFGVEVSUEtUUlhUTywgMHgwMEZGKTsKKwl9IGVsc2UgeyAvKiA1R0h6ICovCisJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9MUF9QSFlfQ1RMLCAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIDB4RkZCRik7CisJfQorCWlmIChkZXYtPnBoeS5yZXYgPT0gMSkgeworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCk7CisJCXRtcDIgPSAodG1wICYgMHgwM0UwKSA+PiA1OworCQl0bXAyIHw9IHRtcDIgPDwgNTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV80QzMsIHRtcDIpOworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENIKTsKKwkJdG1wMiA9ICh0bXAgJiAweDFGMDApID4+IDg7CisJCXRtcDIgfD0gdG1wMiA8PCA1OworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZXzRDNCwgdG1wMik7CisJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCKTsKKwkJdG1wMiA9IHRtcCAmIDB4MDBGRjsKKwkJdG1wMiB8PSB0bXAgPDwgODsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV80QzUsIHRtcDIpOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfc2F2ZV9kaWdfZmx0X3N0YXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdGF0aWMgY29uc3QgdTE2IGFkZHJbXSA9IHsKKwkJQjQzX1BIWV9PRkRNKDB4QzEpLAorCQlCNDNfUEhZX09GRE0oMHhDMiksCisJCUI0M19QSFlfT0ZETSgweEMzKSwKKwkJQjQzX1BIWV9PRkRNKDB4QzQpLAorCQlCNDNfUEhZX09GRE0oMHhDNSksCisJCUI0M19QSFlfT0ZETSgweEM2KSwKKwkJQjQzX1BIWV9PRkRNKDB4QzcpLAorCQlCNDNfUEhZX09GRE0oMHhDOCksCisJCUI0M19QSFlfT0ZETSgweENGKSwKKwl9OworCisJc3RhdGljIGNvbnN0IHUxNiBjb2Vmc1tdID0geworCQkweERFNUUsIDB4RTgzMiwgMHhFMzMxLCAweDREMjYsCisJCTB4MDAyNiwgMHgxNDIwLCAweDAwMjAsIDB4RkUwOCwKKwkJMHgwMDA4LAorCX07CisKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkZHIpOyBpKyspIHsKKwkJbHBwaHktPmRpZ19mbHRfc3RhdGVbaV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBhZGRyW2ldKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIGFkZHJbaV0sIGNvZWZzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3Jlc3RvcmVfZGlnX2ZsdF9zdGF0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RhdGljIGNvbnN0IHUxNiBhZGRyW10gPSB7CisJCUI0M19QSFlfT0ZETSgweEMxKSwKKwkJQjQzX1BIWV9PRkRNKDB4QzIpLAorCQlCNDNfUEhZX09GRE0oMHhDMyksCisJCUI0M19QSFlfT0ZETSgweEM0KSwKKwkJQjQzX1BIWV9PRkRNKDB4QzUpLAorCQlCNDNfUEhZX09GRE0oMHhDNiksCisJCUI0M19QSFlfT0ZETSgweEM3KSwKKwkJQjQzX1BIWV9PRkRNKDB4QzgpLAorCQlCNDNfUEhZX09GRE0oMHhDRiksCisJfTsKKworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRkcik7IGkrKykKKwkJYjQzX3BoeV93cml0ZShkZXYsIGFkZHJbaV0sIGxwcGh5LT5kaWdfZmx0X3N0YXRlW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgbHBwaHlfYmFzZWJhbmRfcmV2MnBsdXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC04Myw3ICs0MTQsNyBAQAogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhGOSksIDApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVFJfTE9PS1VQXzEsIDApOwogCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0FEQ19DT01QRU5TQVRJT05fQ1RMLCAweDEwKTsKLQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gwLCAweEZGMDAsIDB4NzgpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9PRkRNU1lOQ1RIUkVTSDAsIDB4RkYwMCwgMHhCNCk7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0RDT0ZGU0VUVFJBTlNJRU5ULCAweEY4RkYsIDB4MjAwKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRENPRkZTRVRUUkFOU0lFTlQsIDB4RkYwMCwgMHg3Rik7CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0dBSU5ESVJFQ1RNSVNNQVRDSCwgMHhGRjBGLCAweDQwKTsKQEAgLTkxLDcgKzQyMiwxMiBAQAogCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgfjB4NDAwMCk7CiAJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHgyMDAwKTsKIAliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4MSk7Ci0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwlpZiAoYnVzLT5ib2FyZGluZm8ucmV2ID49IDB4MTgpIHsKKwkJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMzIoMTcsIDY1KSwgMHhFQyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4RkYwMSwgMHgxNCk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwl9CiAJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4REYpLCAweEZGMDAsIDB4RjQpOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweERGKSwgMHgwMEZGLCAweEYxMDApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQ0xJUFRIUkVTSCwgMHg0OCk7CkBAIC0xMDAsNyArNDM2LDcgQEAKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUFdSX1RIUkVTSDEsIDB4RkZGMCwgMHg5KTsKIAliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENILCB+MHhGKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVkVSWUxPV0dBSU5EQiwgMHgwMEZGLCAweDU1MDApOwotCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEY4MUYsIDB4QTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZDMUYsIDB4QTApOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIDB4RTBGRiwgMHgzMDApOwogCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9ISUdBSU5EQiwgMHgwMEZGLCAweDJBMDApOwogCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKQEAgLTEyMSw4ICs0NTcsMTAgQEAKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHhGRkUwLCAweDEyKTsKIAliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTk1JU01BVENILCAweDBGRkYsIDB4OTAwMCk7CiAKLQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDE0KSwgMCk7Ci0JYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMHgwOCwgMHgxMiksIDB4NDApOworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKKwkJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMHgwOCwgMHgxNCksIDApOworCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDEyKSwgMHg0MCk7CisJfQogCiAJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewogCQliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgMHg0MCk7CkBAIC0xMzAsNiArNDY4LDcgQEAKIAkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1NZTkNQRUFLQ05ULCAweEZGRjgsIDB4Nik7CiAJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHg5RDAwKTsKIAkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX01JTlBXUl9MRVZFTCwgMHhGRjAwLCAweEExKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0lETEVBRlRFUlBLVFJYVE8sIDB4MDBGRik7CiAJfSBlbHNlIC8qIDVHSHogKi8KIAkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHg0MCk7CiAKQEAgLTE0Miw2ICs0ODEsMTQgQEAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xLAogCQkgICAgICAweDIwMDAgfCAoKHUxNilscHBoeS0+cnNzaV9ncyA8PCAxMCkgfAogCQkgICAgICAoKHUxNilscHBoeS0+cnNzaV92YyA8PCA0KSB8IGxwcGh5LT5yc3NpX3ZmKTsKKworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0FEQ19DVExfMCwgMHgxQyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfQ1RMLCAweDAwRkYsIDB4ODgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfQURDX0NUTF8xLCAweEZDM0MsIDB4MDQwMCk7CisJfQorCisJbHBwaHlfc2F2ZV9kaWdfZmx0X3N0YXRlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMTYxLDggKzUwOCw5IEBACiAvKiBJbml0aWFsaXplIHRoZSAyMDYyIHJhZGlvLiAqLwogc3RhdGljIHZvaWQgbHBwaHlfMjA2Ml9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKIAlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKLQl1MzIgY3J5c3RhbGZyZXEsIHBkaXYsIHRtcCwgcmVmOworCXUzMiBjcnlzdGFsZnJlcSwgdG1wLCByZWY7CiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3Qgc3RydWN0IGIyMDYyX2ZyZXFkYXRhICpmZCA9IE5VTEw7CiAKQEAgLTE4NiwxMCArNTM0LDE1IEBACiAJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEwzLCAwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX0NUTDQsIDApOwogCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fVFhfQ1RMNSwgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEw2LCAwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1BETl9DVEwwLCAweDQwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1BETl9DVEwwLCAwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0NBTElCX1RTLCAweDEwKTsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0NBTElCX1RTLCAwKTsKKwlpZiAoZGV2LT5waHkucmV2ID4gMCkgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX0JHX0NUTDEsCisJCQkoYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2Ml9OX0NPTU0yKSA+PiAxKSB8IDB4ODApOworCX0KIAlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQogCQliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfTl9UU1NJX0NUTDAsIDB4MSk7CiAJZWxzZQpAQCAtMjAxLDIzICs1NTQsMjcgQEAKIAlCNDNfV0FSTl9PTighKGJ1cy0+Y2hpcGNvLmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BNVSkpOwogCUI0M19XQVJOX09OKGNyeXN0YWxmcmVxID09IDApOwogCi0JaWYgKGNyeXN0YWxmcmVxID49IDMwMDAwMDAwKSB7Ci0JCXBkaXYgPSAxOworCWlmIChjcnlzdGFsZnJlcSA8PSAzMDAwMDAwMCkgeworCQlscHBoeS0+cGRpdiA9IDE7CiAJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweEZGRkIpOwogCX0gZWxzZSB7Ci0JCXBkaXYgPSAyOworCQlscHBoeS0+cGRpdiA9IDI7CiAJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDEsIDB4NCk7CiAJfQogCi0JdG1wID0gKDgwMDAwMDAwMCAqIHBkaXYgKyBjcnlzdGFsZnJlcSkgLyAoMzIwMDAwMDAgKiBwZGl2KTsKLQl0bXAgPSAodG1wIC0gMSkgJiAweEZGOworCXRtcCA9ICgoKDgwMDAwMDAwMCAqIGxwcGh5LT5wZGl2ICsgY3J5c3RhbGZyZXEpIC8KKwkgICAgICAoMiAqIGNyeXN0YWxmcmVxKSkgLSA4KSAmIDB4RkY7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEw3LCB0bXApOworCisJdG1wID0gKCgoMTAwICogY3J5c3RhbGZyZXEgKyAxNjAwMDAwMCAqIGxwcGh5LT5wZGl2KSAvCisJICAgICAgKDMyMDAwMDAwICogbHBwaHktPnBkaXYpKSAtIDEpICYgMHhGRjsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE4LCB0bXApOwogCi0JdG1wID0gKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBwZGl2KSAvICgyMDAwMDAwICogcGRpdik7Ci0JdG1wID0gKCh0bXAgJiAweEZGKSAtIDEpICYgMHhGRkZGOworCXRtcCA9ICgoKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBscHBoeS0+cGRpdikgLworCSAgICAgICgyMDAwMDAwICogbHBwaHktPnBkaXYpKSAtIDEpICYgMHhGRjsKIAliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE5LCB0bXApOwogCi0JcmVmID0gKDEwMDAgKiBwZGl2ICsgMiAqIGNyeXN0YWxmcmVxKSAvICgyMDAwICogcGRpdik7CisJcmVmID0gKDEwMDAgKiBscHBoeS0+cGRpdiArIDIgKiBjcnlzdGFsZnJlcSkgLyAoMjAwMCAqIGxwcGh5LT5wZGl2KTsKIAlyZWYgJj0gMHhGRkZGOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYik7IGkrKykgewogCQlpZiAocmVmIDwgZnJlcWRhdGFfdGFiW2ldLmZyZXEpIHsKQEAgLTI0MSwxMiArNTk4LDc4IEBACiAvKiBJbml0aWFsaXplIHRoZSAyMDYzIHJhZGlvLiAqLwogc3RhdGljIHZvaWQgbHBwaHlfMjA2M19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQkvL1RPRE8KKwliMjA2M191cGxvYWRfaW5pdF90YWJsZShkZXYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX0xPR0VOX1NQNSwgMCk7CisJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX0NPTU04LCAweDM4KTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SRUdfU1AxLCAweDU2KTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDYzX1JYX0JCX0NUTDIsIH4weDIpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX1NQNywgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfVFhfUkZfU1A2LCAweDIwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19UWF9SRl9TUDksIDB4NDApOworCWlmIChkZXYtPnBoeS5yZXYgPT0gMikgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9TUDMsIDB4YTApOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9TUDQsIDB4YTApOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9TUDIsIDB4MTgpOworCX0gZWxzZSB7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX1NQMywgMHgyMCk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX1NQMiwgMHgyMCk7CisJfQogfQogCitzdHJ1Y3QgbHBwaHlfc3R4X3RhYmxlX2VudHJ5IHsKKwl1MTYgcGh5X29mZnNldDsKKwl1MTYgcGh5X3NoaWZ0OworCXUxNiByZl9hZGRyOworCXUxNiByZl9zaGlmdDsKKwl1MTYgbWFzazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbHBwaHlfc3R4X3RhYmxlX2VudHJ5IGxwcGh5X3N0eF90YWJsZVtdID0geworCXsgLnBoeV9vZmZzZXQgPSAyLCAucGh5X3NoaWZ0ID0gNiwgLnJmX2FkZHIgPSAweDNkLCAucmZfc2hpZnQgPSAzLCAubWFzayA9IDB4MDEsIH0sCisJeyAucGh5X29mZnNldCA9IDEsIC5waHlfc2hpZnQgPSAxMiwgLnJmX2FkZHIgPSAweDRjLCAucmZfc2hpZnQgPSAxLCAubWFzayA9IDB4MDEsIH0sCisJeyAucGh5X29mZnNldCA9IDEsIC5waHlfc2hpZnQgPSA4LCAucmZfYWRkciA9IDB4NTAsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHg3ZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMCwgLnBoeV9zaGlmdCA9IDgsIC5yZl9hZGRyID0gMHg0NCwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweGZmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAxLCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDRhLCAucmZfc2hpZnQgPSAwLCAubWFzayA9IDB4ZmYsIH0sCisJeyAucGh5X29mZnNldCA9IDAsIC5waHlfc2hpZnQgPSA0LCAucmZfYWRkciA9IDB4NGQsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHhmZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMSwgLnBoeV9zaGlmdCA9IDQsIC5yZl9hZGRyID0gMHg0ZSwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweGZmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAwLCAucGh5X3NoaWZ0ID0gMTIsIC5yZl9hZGRyID0gMHg0ZiwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDBmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAxLCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDRmLCAucmZfc2hpZnQgPSA0LCAubWFzayA9IDB4MGYsIH0sCisJeyAucGh5X29mZnNldCA9IDMsIC5waHlfc2hpZnQgPSAwLCAucmZfYWRkciA9IDB4NDksIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHgwZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gNCwgLnBoeV9zaGlmdCA9IDMsIC5yZl9hZGRyID0gMHg0NiwgLnJmX3NoaWZ0ID0gNCwgLm1hc2sgPSAweDA3LCB9LAorCXsgLnBoeV9vZmZzZXQgPSAzLCAucGh5X3NoaWZ0ID0gMTUsIC5yZl9hZGRyID0gMHg0NiwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA0LCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDQ2LCAucmZfc2hpZnQgPSAxLCAubWFzayA9IDB4MDcsIH0sCisJeyAucGh5X29mZnNldCA9IDMsIC5waHlfc2hpZnQgPSA4LCAucmZfYWRkciA9IDB4NDgsIC5yZl9zaGlmdCA9IDQsIC5tYXNrID0gMHgwNywgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMywgLnBoeV9zaGlmdCA9IDExLCAucmZfYWRkciA9IDB4NDgsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHgwZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gMywgLnBoeV9zaGlmdCA9IDQsIC5yZl9hZGRyID0gMHg0OSwgLnJmX3NoaWZ0ID0gNCwgLm1hc2sgPSAweDBmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAyLCAucGh5X3NoaWZ0ID0gMTUsIC5yZl9hZGRyID0gMHg0NSwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA1LCAucGh5X3NoaWZ0ID0gMTMsIC5yZl9hZGRyID0gMHg1MiwgLnJmX3NoaWZ0ID0gNCwgLm1hc2sgPSAweDA3LCB9LAorCXsgLnBoeV9vZmZzZXQgPSA2LCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDUyLCAucmZfc2hpZnQgPSA3LCAubWFzayA9IDB4MDEsIH0sCisJeyAucGh5X29mZnNldCA9IDUsIC5waHlfc2hpZnQgPSAzLCAucmZfYWRkciA9IDB4NDEsIC5yZl9zaGlmdCA9IDUsIC5tYXNrID0gMHgwNywgfSwKKwl7IC5waHlfb2Zmc2V0ID0gNSwgLnBoeV9zaGlmdCA9IDYsIC5yZl9hZGRyID0gMHg0MSwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDBmLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA1LCAucGh5X3NoaWZ0ID0gMTAsIC5yZl9hZGRyID0gMHg0MiwgLnJmX3NoaWZ0ID0gNSwgLm1hc2sgPSAweDA3LCB9LAorCXsgLnBoeV9vZmZzZXQgPSA0LCAucGh5X3NoaWZ0ID0gMTUsIC5yZl9hZGRyID0gMHg0MiwgLnJmX3NoaWZ0ID0gMCwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSA1LCAucGh5X3NoaWZ0ID0gMCwgLnJmX2FkZHIgPSAweDQyLCAucmZfc2hpZnQgPSAxLCAubWFzayA9IDB4MDcsIH0sCisJeyAucGh5X29mZnNldCA9IDQsIC5waHlfc2hpZnQgPSAxMSwgLnJmX2FkZHIgPSAweDQzLCAucmZfc2hpZnQgPSA0LCAubWFzayA9IDB4MGYsIH0sCisJeyAucGh5X29mZnNldCA9IDQsIC5waHlfc2hpZnQgPSA3LCAucmZfYWRkciA9IDB4NDMsIC5yZl9zaGlmdCA9IDAsIC5tYXNrID0gMHgwZiwgfSwKKwl7IC5waHlfb2Zmc2V0ID0gNCwgLnBoeV9zaGlmdCA9IDYsIC5yZl9hZGRyID0gMHg0NSwgLnJmX3NoaWZ0ID0gMSwgLm1hc2sgPSAweDAxLCB9LAorCXsgLnBoeV9vZmZzZXQgPSAyLCAucGh5X3NoaWZ0ID0gNywgLnJmX2FkZHIgPSAweDQwLCAucmZfc2hpZnQgPSA0LCAubWFzayA9IDB4MGYsIH0sCisJeyAucGh5X29mZnNldCA9IDIsIC5waHlfc2hpZnQgPSAxMSwgLnJmX2FkZHIgPSAweDQwLCAucmZfc2hpZnQgPSAwLCAubWFzayA9IDB4MGYsIH0sCit9OworCiBzdGF0aWMgdm9pZCBscHBoeV9zeW5jX3N0eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JLy9UT0RPCisJY29uc3Qgc3RydWN0IGxwcGh5X3N0eF90YWJsZV9lbnRyeSAqZTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MTYgdG1wOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHBwaHlfc3R4X3RhYmxlKTsgaSsrKSB7CisJCWUgPSAmbHBwaHlfc3R4X3RhYmxlW2ldOworCQl0bXAgPSBiNDNfcmFkaW9fcmVhZChkZXYsIGUtPnJmX2FkZHIpOworCQl0bXAgPj49IGUtPnJmX3NoaWZ0OworCQl0bXAgPDw9IGUtPnBoeV9zaGlmdDsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RjIgKyBlLT5waHlfb2Zmc2V0KSwKKwkJCQl+KGUtPm1hc2sgPDwgZS0+cGh5X3NoaWZ0KSwgdG1wKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGxwcGh5X3JhZGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMjU3LDE3ICs2ODAsMzgxIEBACiAJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0ZPVVJXSVJFX0NUTCwgMHhGRkZEKTsKIAl1ZGVsYXkoMSk7CiAKLQlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCWlmIChkZXYtPnBoeS5yYWRpb192ZXIgPT0gMHgyMDYyKSB7CiAJCWxwcGh5XzIwNjJfaW5pdChkZXYpOwogCX0gZWxzZSB7CiAJCWxwcGh5XzIwNjNfaW5pdChkZXYpOwogCQlscHBoeV9zeW5jX3N0eChkZXYpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjApLCAweDVGODApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjEpLCAwKTsKLQkJLy9UT0RPIERvIHNvbWV0aGluZyBvbiB0aGUgYmFja3BsYW5lCisJCWlmIChkZXYtPmRldi0+YnVzLT5jaGlwX2lkID09IDB4NDMyNSkgeworCQkJLy8gVE9ETyBTU0IgUE1VIHJlY2FsaWJyYXRpb24KKwkJfQogCX0KIH0KIAorc3RydWN0IGxwcGh5X2lxX2VzdCB7IHUzMiBpcV9wcm9kLCBpX3B3ciwgcV9wd3I7IH07CisKK3N0YXRpYyB2b2lkIGxwcGh5X3NldF9yY19jYXAoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJdTggcmNfY2FwID0gKGxwcGh5LT5yY19jYXAgJiAweDFGKSA+PiAxOworCisJaWYgKGRldi0+cGh5LnJldiA9PSAxKSAvL0ZJWE1FIGNoZWNrIGNoYW5uZWwgMTQhCisJCXJjX2NhcCA9IG1pbl90KHU4LCByY19jYXAgKyA1LCAxNSk7CisKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1JYQkJfQ0FMSUIyLAorCQkJbWF4X3QodTgsIGxwcGh5LT5yY19jYXAgLSA0LCAweDgwKSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVExfQSwgcmNfY2FwIHwgMHg4MCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SWEdfQ05UMTYsCisJCQkoKGxwcGh5LT5yY19jYXAgJiAweDFGKSA+PiAyKSB8IDB4ODApOworfQorCitzdGF0aWMgdTggbHBwaHlfZ2V0X2JiX211bHQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXJldHVybiAoYjQzX2xwdGFiX3JlYWQoZGV2LCBCNDNfTFBUQUIxNigwLCA4NykpICYgMHhGRjAwKSA+PiA4OworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfYmJfbXVsdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGJiX211bHQpCit7CisJYjQzX2xwdGFiX3dyaXRlKGRldiwgQjQzX0xQVEFCMTYoMCwgODcpLCAodTE2KWJiX211bHQgPDwgOCk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3NldF9kZWFmKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB1c2VyKQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJaWYgKHVzZXIpCisJCWxwcGh5LT5jcnNfdXNyX2Rpc2FibGUgPSAxOworCWVsc2UKKwkJbHBwaHktPmNyc19zeXNfZGlzYWJsZSA9IDE7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEZGMUYsIDB4ODApOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9jbGVhcl9kZWFmKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB1c2VyKQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJaWYgKHVzZXIpCisJCWxwcGh5LT5jcnNfdXNyX2Rpc2FibGUgPSAwOworCWVsc2UKKwkJbHBwaHktPmNyc19zeXNfZGlzYWJsZSA9IDA7CisKKwlpZiAoIWxwcGh5LT5jcnNfdXNyX2Rpc2FibGUgJiYgIWxwcGh5LT5jcnNfc3lzX2Rpc2FibGUpIHsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwKKwkJCQkJMHhGRjFGLCAweDYwKTsKKwkJZWxzZQorCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLAorCQkJCQkweEZGMUYsIDB4MjApOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfZGlzYWJsZV9jcnMoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIHVzZXIpCit7CisJbHBwaHlfc2V0X2RlYWYoZGV2LCB1c2VyKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4RkZGQywgMHgxKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDMpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgMHhGRkZCKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDQpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgMHhGRkY3KTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDgpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweDEwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCAweDEwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4RkZERik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHgyMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEZGQkYpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4NDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLCAweDcpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLCAweDM4KTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIDB4RkYzRik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIDB4MTAwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIDB4RkRGRik7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMSwgMSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMiwgMHgyMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLCAweEZCRkYpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGN0ZGKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SWF9HQUlOX0NUTF9PVkVSUklERV9WQUwsIDB4NDVBRik7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweDNGRik7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3Jlc3RvcmVfY3JzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB1c2VyKQoreworCWxwcGh5X2NsZWFyX2RlYWYoZGV2LCB1c2VyKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHhGRjgwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHhGQzAwKTsKK30KKworc3RydWN0IGxwcGh5X3R4X2dhaW5zIHsgdTE2IGdtLCBwZ2EsIHBhZCwgZGFjOyB9OworCitzdGF0aWMgc3RydWN0IGxwcGh5X3R4X2dhaW5zIGxwcGh5X2dldF90eF9nYWlucyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGxwcGh5X3R4X2dhaW5zIGdhaW5zOworCXUxNiB0bXA7CisKKwlnYWlucy5kYWMgPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX0FGRV9EQUNfQ1RMKSAmIDB4MzgwKSA+PiA3OworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsCisJCQkJICAgQjQzX0xQUEhZX1RYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTCkgJiAweDdGRjsKKwkJZ2FpbnMuZ20gPSB0bXAgJiAweDAwMDc7CisJCWdhaW5zLnBnYSA9ICh0bXAgJiAweDAwNzgpID4+IDM7CisJCWdhaW5zLnBhZCA9ICh0bXAgJiAweDc4MCkgPj4gNzsKKwl9IGVsc2UgeworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVFhfR0FJTl9DVExfT1ZFUlJJREVfVkFMKTsKKwkJZ2FpbnMucGFkID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4RkIpKSAmIDB4RkY7CisJCWdhaW5zLmdtID0gdG1wICYgMHhGRjsKKwkJZ2FpbnMucGdhID0gKHRtcCA+PiA4KSAmIDB4RkY7CisJfQorCisJcmV0dXJuIGdhaW5zOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfZGFjX2dhaW4oc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgZGFjKQoreworCXUxNiBjdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQUZFX0RBQ19DVEwpICYgMHhDN0Y7CisJY3RsIHw9IGRhYyA8PCA3OworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHhGMDAwLCBjdGwpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfZ2FpbnMoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBscHBoeV90eF9nYWlucyBnYWlucykKK3sKKwl1MTYgcmZfZ2FpbiwgcGFfZ2FpbjsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCXJmX2dhaW4gPSAoZ2FpbnMucGFkIDw8IDcpIHwgKGdhaW5zLnBnYSA8PCAzKSB8IGdhaW5zLmdtOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFhfR0FJTl9DVExfT1ZFUlJJREVfVkFMLAorCQkJCTB4RjgwMCwgcmZfZ2Fpbik7CisJfSBlbHNlIHsKKwkJcGFfZ2FpbiA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEZCKSkgJiAweDFGQzA7CisJCXBhX2dhaW4gPDw9IDI7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVFhfR0FJTl9DVExfT1ZFUlJJREVfVkFMLAorCQkJICAgICAgKGdhaW5zLnBnYSA8PCA4KSB8IGdhaW5zLmdtKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RkIpLAorCQkJCTB4ODAwMCwgZ2FpbnMucGFkIHwgcGFfZ2Fpbik7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhGQyksCisJCQkgICAgICAoZ2FpbnMucGdhIDw8IDgpIHwgZ2FpbnMuZ20pOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRCksCisJCQkJMHg4MDAwLCBnYWlucy5wYWQgfCBwYV9nYWluKTsKKwl9CisJbHBwaHlfc2V0X2RhY19nYWluKGRldiwgZ2FpbnMuZGFjKTsKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHhGRUZGLCAxIDw8IDgpOworCX0gZWxzZSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEZGN0YsIDEgPDwgNyk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEJGRkYsIDEgPDwgMTQpOworCX0KKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDB4RkZCRiwgMSA8PCA2KTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcmV2MF8xX3NldF9yeF9nYWluKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGdhaW4pCit7CisJdTE2IHRyc3cgPSBnYWluICYgMHgxOworCXUxNiBsbmEgPSAoZ2FpbiAmIDB4RkZGQykgfCAoKGdhaW4gJiAweEMpID4+IDIpOworCXUxNiBleHRfbG5hID0gKGdhaW4gJiAyKSA+PiAxOworCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEZGRkUsIHRyc3cpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwKKwkJCTB4RkJGRiwgZXh0X2xuYSA8PCAxMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLAorCQkJMHhGN0ZGLCBleHRfbG5hIDw8IDExKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1JYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTCwgbG5hKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcmV2MnBsdXNfc2V0X3J4X2dhaW4oc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgZ2FpbikKK3sKKwl1MTYgbG93X2dhaW4gPSBnYWluICYgMHhGRkZGOworCXUxNiBoaWdoX2dhaW4gPSAoZ2FpbiA+PiAxNikgJiAweEY7CisJdTE2IGV4dF9sbmEgPSAoZ2FpbiA+PiAyMSkgJiAweDE7CisJdTE2IHRyc3cgPSB+KGdhaW4gPj4gMjApICYgMHgxOworCXUxNiB0bXA7CisKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4RkZGRSwgdHJzdyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzJfVkFMLAorCQkJMHhGREZGLCBleHRfbG5hIDw8IDkpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwKKwkJCTB4RkJGRiwgZXh0X2xuYSA8PCAxMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SWF9HQUlOX0NUTF9PVkVSUklERV9WQUwsIGxvd19nYWluKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4RkZGMCwgaGlnaF9nYWluKTsKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCXRtcCA9IChnYWluID4+IDIpICYgMHgzOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsCisJCQkJMHhFN0ZGLCB0bXA8PDExKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RTYpLCAweEZGRTcsIHRtcCA8PCAzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Rpc2FibGVfcnhfZ2Fpbl9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RkZGRSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RkZFRik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RkZCRik7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEZFRkYpOworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHhGQkZGKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEU1KSwgMHhGRkY3KTsKKwkJfQorCX0gZWxzZSB7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweEZERkYpOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfZW5hYmxlX3J4X2dhaW5fb3ZlcnJpZGUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4MSk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHgxMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHg0MCk7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzIsIDB4MTAwKTsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMiwgMHg0MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhFNSksIDB4OCk7CisJCX0KKwl9IGVsc2UgeworCQliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAweDIwMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfcnhfZ2FpbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBnYWluKQoreworCWlmIChkZXYtPnBoeS5yZXYgPCAyKQorCQlscHBoeV9yZXYwXzFfc2V0X3J4X2dhaW4oZGV2LCBnYWluKTsKKwllbHNlCisJCWxwcGh5X3JldjJwbHVzX3NldF9yeF9nYWluKGRldiwgZ2Fpbik7CisJbHBwaHlfZW5hYmxlX3J4X2dhaW5fb3ZlcnJpZGUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfc2V0X3J4X2dhaW5fYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgaWR4KQoreworCXUzMiBnYWluID0gYjQzX2xwdGFiX3JlYWQoZGV2LCBCNDNfTFBUQUIxNigxMiwgaWR4KSk7CisJbHBwaHlfc2V0X3J4X2dhaW4oZGV2LCBnYWluKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfc3RvcF9kZGZzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4RkZGRCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0xQX1BIWV9DVEwsIDB4RkZERik7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3J1bl9kZGZzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGlfb24sIGludCBxX29uLAorCQkJICAgaW50IGluY3IxLCBpbnQgaW5jcjIsIGludCBzY2FsZV9pZHgpCit7CisJbHBwaHlfc3RvcF9kZGZzKGRldik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0FGRV9EREZTX1BPSU5URVJfSU5JVCwgMHhGRjgwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQUZFX0RERlNfUE9JTlRFUl9JTklULCAweDgwRkYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfRERGU19JTkNSX0lOSVQsIDB4RkY4MCwgaW5jcjEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9BRkVfRERGU19JTkNSX0lOSVQsIDB4ODBGRiwgaW5jcjIgPDwgOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9EREZTLCAweEZGRjcsIGlfb24gPDwgMyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9EREZTLCAweEZGRUYsIHFfb24gPDwgNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0FGRV9EREZTLCAweEZGOUYsIHNjYWxlX2lkeCA8PCA1KTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4RkZGQik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0RERlMsIDB4Mik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHgyMCk7Cit9CisKK3N0YXRpYyBib29sIGxwcGh5X3J4X2lxX2VzdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBzYW1wbGVzLCB1OCB0aW1lLAorCQkJICAgc3RydWN0IGxwcGh5X2lxX2VzdCAqaXFfZXN0KQoreworCWludCBpOworCisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEZGRjcpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfSVFfTlVNX1NNUExTX0FERFIsIHNhbXBsZXMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIsIDB4RkYwMCwgdGltZSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0lRX0VOQUJMRV9XQUlUX1RJTUVfQUREUiwgMHhGRUZGKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIsIDB4MjAwKTsKKworCWZvciAoaSA9IDA7IGkgPCA1MDA7IGkrKykgeworCQlpZiAoIShiNDNfcGh5X3JlYWQoZGV2LAorCQkJCUI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIpICYgMHgyMDApKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoKGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9JUV9FTkFCTEVfV0FJVF9USU1FX0FERFIpICYgMHgyMDApKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDgpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaXFfZXN0LT5pcV9wcm9kID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX0lRX0FDQ19ISV9BRERSKTsKKwlpcV9lc3QtPmlxX3Byb2QgPDw9IDE2OworCWlxX2VzdC0+aXFfcHJvZCB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfSVFfQUNDX0xPX0FERFIpOworCisJaXFfZXN0LT5pX3B3ciA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9JUV9JX1BXUl9BQ0NfSElfQUREUik7CisJaXFfZXN0LT5pX3B3ciA8PD0gMTY7CisJaXFfZXN0LT5pX3B3ciB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfSVFfSV9QV1JfQUNDX0xPX0FERFIpOworCisJaXFfZXN0LT5xX3B3ciA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9JUV9RX1BXUl9BQ0NfSElfQUREUik7CisJaXFfZXN0LT5xX3B3ciA8PD0gMTY7CisJaXFfZXN0LT5xX3B3ciB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfSVFfUV9QV1JfQUNDX0xPX0FERFIpOworCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIDB4OCk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgbHBwaHlfbG9vcGJhY2soc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBscHBoeV9pcV9lc3QgaXFfZXN0OworCWludCBpLCBpbmRleCA9IC0xOworCXUzMiB0bXA7CisKKwltZW1zZXQoJmlxX2VzdCwgMCwgc2l6ZW9mKGlxX2VzdCkpOworCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEZGRkMsIDB4Myk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHgzKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRkVfQ1RMX09WUiwgMSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0FGRV9DVExfT1ZSVkFMLCAweEZGRkUpOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4ODAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgMHg4MDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4OCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4OCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVExfQSwgMHg4MCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMHg4MCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAsIDB4ODApOworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWxwcGh5X3NldF9yeF9nYWluX2J5X2luZGV4KGRldiwgaSk7CisJCWxwcGh5X3J1bl9kZGZzKGRldiwgMSwgMSwgNSwgNSwgMCk7CisJCWlmICghKGxwcGh5X3J4X2lxX2VzdChkZXYsIDEwMDAsIDMyLCAmaXFfZXN0KSkpCisJCQljb250aW51ZTsKKwkJdG1wID0gKGlxX2VzdC5pX3B3ciArIGlxX2VzdC5xX3B3cikgLyAxMDAwOworCQlpZiAoKHRtcCA+IDQwMDApICYmICh0bXAgPCAxMDAwMCkpIHsKKwkJCWluZGV4ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWxwcGh5X3N0b3BfZGRmcyhkZXYpOworCXJldHVybiBpbmRleDsKK30KKworLyogRml4ZWQtcG9pbnQgZGl2aXNpb24gYWxnb3JpdGhtIHVzaW5nIG9ubHkgaW50ZWdlciBtYXRoLiAqLworc3RhdGljIHUzMiBscHBoeV9xZGl2X3JvdW5kdXAodTMyIGRpdmlkZW5kLCB1MzIgZGl2aXNvciwgdTggcHJlY2lzaW9uKQoreworCXUzMiBxdW90aWVudCwgcmVtYWluZGVyOworCisJaWYgKGRpdmlzb3IgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlxdW90aWVudCA9IGRpdmlkZW5kIC8gZGl2aXNvcjsKKwlyZW1haW5kZXIgPSBkaXZpZGVuZCAlIGRpdmlzb3I7CisKKwl3aGlsZSAocHJlY2lzaW9uID4gMCkgeworCQlxdW90aWVudCA8PD0gMTsKKwkJaWYgKHJlbWFpbmRlciA8PCAxID49IGRpdmlzb3IpIHsKKwkJCXF1b3RpZW50Kys7CisJCQlyZW1haW5kZXIgPSAocmVtYWluZGVyIDw8IDEpIC0gZGl2aXNvcjsKKwkJfQorCQlwcmVjaXNpb24tLTsKKwl9CisKKwlpZiAocmVtYWluZGVyIDw8IDEgPj0gZGl2aXNvcikKKwkJcXVvdGllbnQrKzsKKworCXJldHVybiBxdW90aWVudDsKK30KKwogLyogUmVhZCB0aGUgVFggcG93ZXIgY29udHJvbCBtb2RlIGZyb20gaGFyZHdhcmUuICovCiBzdGF0aWMgdm9pZCBscHBoeV9yZWFkX3R4X3BjdGxfbW9kZV9mcm9tX2hhcmR3YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKQEAgLTMyMiw5ICsxMTA5LDkgQEAKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKIAllbnVtIGI0M19scHBoeV90eHBjdGxfbW9kZSBvbGRtb2RlOwogCi0Jb2xkbW9kZSA9IGxwcGh5LT50eHBjdGxfbW9kZTsKIAlscHBoeV9yZWFkX3R4X3BjdGxfbW9kZV9mcm9tX2hhcmR3YXJlKGRldik7Ci0JaWYgKGxwcGh5LT50eHBjdGxfbW9kZSA9PSBtb2RlKQorCW9sZG1vZGUgPSBscHBoeS0+dHhwY3RsX21vZGU7CisJaWYgKG9sZG1vZGUgPT0gbW9kZSkKIAkJcmV0dXJuOwogCWxwcGh5LT50eHBjdGxfbW9kZSA9IG1vZGU7CiAKQEAgLTM0NSwxMyArMTEzMiwxODYgQEAKIAl9CiAJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CiAJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpCi0JCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhEMCksIDB4RkQsIDB4Mik7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHgyKTsKIAkJZWxzZQotCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RDApLCAweEZELCAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHhGRkZEKTsKIAl9CiAJbHBwaHlfd3JpdGVfdHhfcGN0bF9tb2RlX3RvX2hhcmR3YXJlKGRldik7CiB9CiAKK3N0YXRpYyBpbnQgYjQzX2xwcGh5X29wX3N3aXRjaF9jaGFubmVsKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG5ld19jaGFubmVsKTsKKworc3RhdGljIHZvaWQgbHBwaHlfcmV2MF8xX3JjX2NhbGliKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwlzdHJ1Y3QgbHBwaHlfaXFfZXN0IGlxX2VzdDsKKwlzdHJ1Y3QgbHBwaHlfdHhfZ2FpbnMgdHhfZ2FpbnM7CisJc3RhdGljIGNvbnN0IHUzMiBpZGVhbF9wd3JfdGFibGVbMjFdID0geworCQkweDEwMDAwLCAweDEwNTU3LCAweDEwZTJkLCAweDExM2UwLCAweDEwZjIyLCAweDBmZjY0LAorCQkweDBlZGEyLCAweDBlNWQ0LCAweDBlZmQxLCAweDBmYmU4LCAweDBiN2I4LCAweDA0YjM1LAorCQkweDAxYTVlLCAweDAwYTBiLCAweDAwNDQ0LCAweDAwMWZkLCAweDAwMGZmLCAweDAwMDg4LAorCQkweDAwMDRjLCAweDAwMDJjLCAweDAwMDFhLAorCX07CisJYm9vbCBvbGRfdHhnX292cjsKKwl1OCBvbGRfYmJtdWx0OworCXUxNiBvbGRfcmZfb3ZyLCBvbGRfcmZfb3ZydmFsLCBvbGRfYWZlX292ciwgb2xkX2FmZV9vdnJ2YWwsCisJICAgIG9sZF9yZjJfb3ZyLCBvbGRfcmYyX292cnZhbCwgb2xkX3BoeV9jdGw7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgb2xkX3R4cGN0bDsKKwl1MzIgbm9ybWFsX3B3ciwgaWRlYWxfcHdyLCBtZWFuX3NxX3B3ciwgdG1wID0gMCwgbWVhbl9zcV9wd3JfbWluID0gMDsKKwlpbnQgbG9vcGJhY2ssIGksIGosIGlubmVyX3N1bSwgZXJyOworCisJbWVtc2V0KCZpcV9lc3QsIDAsIHNpemVvZihpcV9lc3QpKTsKKworCWVyciA9IGI0M19scHBoeV9vcF9zd2l0Y2hfY2hhbm5lbChkZXYsIDcpOworCWlmIChlcnIpIHsKKwkJYjQzZGJnKGRldi0+d2wsCisJCSAgICAgICAiUkMgY2FsaWI6IEZhaWxlZCB0byBzd2l0Y2ggdG8gY2hhbm5lbCA3LCBlcnJvciA9ICVkXG4iLAorCQkgICAgICAgZXJyKTsKKwl9CisJb2xkX3R4Z19vdnIgPSAhIShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIpICYgMHg0MCk7CisJb2xkX2JibXVsdCA9IGxwcGh5X2dldF9iYl9tdWx0KGRldik7CisJaWYgKG9sZF90eGdfb3ZyKQorCQl0eF9nYWlucyA9IGxwcGh5X2dldF90eF9nYWlucyhkZXYpOworCW9sZF9yZl9vdnIgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCk7CisJb2xkX3JmX292cnZhbCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCk7CisJb2xkX2FmZV9vdnIgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIpOworCW9sZF9hZmVfb3ZydmFsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX0FGRV9DVExfT1ZSVkFMKTsKKwlvbGRfcmYyX292ciA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yKTsKKwlvbGRfcmYyX292cnZhbCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCk7CisJb2xkX3BoeV9jdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCk7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCW9sZF90eHBjdGwgPSBscHBoeS0+dHhwY3RsX21vZGU7CisKKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfT0ZGKTsKKwlscHBoeV9kaXNhYmxlX2NycyhkZXYsIHRydWUpOworCWxvb3BiYWNrID0gbHBwaHlfbG9vcGJhY2soZGV2KTsKKwlpZiAobG9vcGJhY2sgPT0gLTEpCisJCWdvdG8gZmluaXNoOworCWxwcGh5X3NldF9yeF9nYWluX2J5X2luZGV4KGRldiwgbG9vcGJhY2spOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9MUF9QSFlfQ1RMLCAweEZGQkYsIDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGRkY4LCAweDEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGRkM3LCAweDgpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTCwgMHhGRjNGLCAweEMwKTsKKwlmb3IgKGkgPSAxMjg7IGkgPD0gMTU5OyBpKyspIHsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9SWEJCX0NBTElCMiwgaSk7CisJCWlubmVyX3N1bSA9IDA7CisJCWZvciAoaiA9IDU7IGogPD0gMjU7IGorKykgeworCQkJbHBwaHlfcnVuX2RkZnMoZGV2LCAxLCAxLCBqLCBqLCAwKTsKKwkJCWlmICghKGxwcGh5X3J4X2lxX2VzdChkZXYsIDEwMDAsIDMyLCAmaXFfZXN0KSkpCisJCQkJZ290byBmaW5pc2g7CisJCQltZWFuX3NxX3B3ciA9IGlxX2VzdC5pX3B3ciArIGlxX2VzdC5xX3B3cjsKKwkJCWlmIChqID09IDUpCisJCQkJdG1wID0gbWVhbl9zcV9wd3I7CisJCQlpZGVhbF9wd3IgPSAoKGlkZWFsX3B3cl90YWJsZVtqLTVdID4+IDMpICsgMSkgPj4gMTsKKwkJCW5vcm1hbF9wd3IgPSBscHBoeV9xZGl2X3JvdW5kdXAobWVhbl9zcV9wd3IsIHRtcCwgMTIpOworCQkJbWVhbl9zcV9wd3IgPSBpZGVhbF9wd3IgLSBub3JtYWxfcHdyOworCQkJbWVhbl9zcV9wd3IgKj0gbWVhbl9zcV9wd3I7CisJCQlpbm5lcl9zdW0gKz0gbWVhbl9zcV9wd3I7CisJCQlpZiAoKGkgPT0gMTI4KSB8fCAoaW5uZXJfc3VtIDwgbWVhbl9zcV9wd3JfbWluKSkgeworCQkJCWxwcGh5LT5yY19jYXAgPSBpOworCQkJCW1lYW5fc3FfcHdyX21pbiA9IGlubmVyX3N1bTsKKwkJCX0KKwkJfQorCX0KKwlscHBoeV9zdG9wX2RkZnMoZGV2KTsKKworZmluaXNoOgorCWxwcGh5X3Jlc3RvcmVfY3JzKGRldiwgdHJ1ZSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV9WQUxfMCwgb2xkX3JmX292cnZhbCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8wLCBvbGRfcmZfb3ZyKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9DVExfT1ZSVkFMLCBvbGRfYWZlX292cnZhbCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfQ1RMX09WUiwgb2xkX2FmZV9vdnIpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMl9WQUwsIG9sZF9yZjJfb3ZydmFsKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzIsIG9sZF9yZjJfb3ZyKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0xQX1BIWV9DVEwsIG9sZF9waHlfY3RsKTsKKworCWxwcGh5X3NldF9iYl9tdWx0KGRldiwgb2xkX2JibXVsdCk7CisJaWYgKG9sZF90eGdfb3ZyKSB7CisJCS8qCisJCSAqIFNQRUMgRklYTUU6IFRoZSBzcGVjcyBzYXkgImdldF90eF9nYWlucyIgaGVyZSwgd2hpY2ggaXMKKwkJICogaWxsb2dpY2FsLiBBY2NvcmRpbmcgdG8gbHdmaW5nZXIsIHZlbmRvciBkcml2ZXIgdjQuMTUwLjEwLjUKKwkJICogaGFzIGEgU2V0IGhlcmUsIHdoaWxlIHY0LjE3NC42NC4xOSBoYXMgYSBHZXQgLSByZWdyZXNzaW9uIGluCisJCSAqIHRoZSB2ZW5kb3IgZHJpdmVyPyBUaGlzIHNob3VsZCBiZSB0ZXN0ZWQgdGhpcyBvbmNlIHRoZSBjb2RlCisJCSAqIGlzIHRlc3RhYmxlLgorCQkgKi8KKwkJbHBwaHlfc2V0X3R4X2dhaW5zKGRldiwgdHhfZ2FpbnMpOworCX0KKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIG9sZF90eHBjdGwpOworCWlmIChscHBoeS0+cmNfY2FwKQorCQlscHBoeV9zZXRfcmNfY2FwKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JldjJwbHVzX3JjX2NhbGliKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbF9mcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKwl1OCB0bXAgPSBiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JYX0JCX1NQOCkgJiAweEZGOworCWludCBpOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUlhfQkJfU1A4LCAweDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDEsIDB4N0UpOworCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjNfUExMX1NQMSwgMHhGNyk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMSwgMHg3Qyk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMiwgMHgxNSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMywgMHg3MCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgMHg1Mik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNSwgMHgxKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwxLCAweDdEKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisJCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoIShiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKSkKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUlhfQkJfU1A4LCB0bXApOworCisJdG1wID0gYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2M19UWF9CQl9TUDMpICYgMHhGRjsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1RYX0JCX1NQMywgMHgwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwxLCAweDdFKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwxLCAweDdDKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwyLCAweDU1KTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19SQ19DQUxJQl9DVEwzLCAweDc2KTsKKworCWlmIChjcnlzdGFsX2ZyZXEgPT0gMjQwMDAwMDApIHsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgMHhGQyk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDUsIDB4MCk7CisJfSBlbHNlIHsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgMHgxMyk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDUsIDB4MSk7CisJfQorCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUEFfU1A3LCAweDdEKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisJCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoIShiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX1JDX0NBTElCX0NUTDYpICYgMHgyKSkKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfVFhfQkJfU1AzLCB0bXApOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUkNfQ0FMSUJfQ1RMMSwgMHg3RSk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2NhbGlicmF0ZV9yYyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDIpIHsKKwkJbHBwaHlfcmV2MnBsdXNfcmNfY2FsaWIoZGV2KTsKKwl9IGVsc2UgaWYgKCFscHBoeS0+cmNfY2FwKSB7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlscHBoeV9yZXYwXzFfcmNfY2FsaWIoZGV2KTsKKwl9IGVsc2UgeworCQlscHBoeV9zZXRfcmNfY2FwKGRldik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCkKIHsKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKQEAgLTQyMywzNCArMTM4MywxMTIgQEAKIAliNDNfbWFjX2VuYWJsZShkZXYpOwogfQogCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHNzaV9tdXgoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIHRzc2lfbXV4X21vZGUgbW9kZSkKK3sKKwlpZiAobW9kZSAhPSBUU1NJX01VWF9FWFQpIHsKKwkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX1BBX1NQMSwgMHgyKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGMyksIDB4MTAwMCk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BBX0NUTDEwLCAweDUxKTsKKwkJaWYgKG1vZGUgPT0gVFNTSV9NVVhfUE9TVFBBKSB7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDYzX1BBX1NQMSwgMHhGRkZFKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9BRkVfQ1RMX09WUlZBTCwgMHhGRkM3KTsKKwkJfSBlbHNlIHsKKwkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNjNfUEFfU1AxLCAweEZGRkUsIDB4MSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlJWQUwsCisJCQkJCTB4RkZDNywgMHgyMCk7CisJCX0KKwl9IGVsc2UgeworCQlCNDNfV0FSTl9PTigxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3R4X3BjdGxfaW5pdF9odyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2IHRtcDsKKwlpbnQgaTsKKworCS8vU1BFQyBUT0RPIENhbGwgTFAgUEhZIENsZWFyIFRYIFBvd2VyIG9mZnNldHMKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworCQlpZiAoZGV2LT5waHkucmV2ID49IDIpCisJCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIzMig3LCBpICsgMSksIGkpOworCQllbHNlCisJCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIzMigxMCwgaSArIDEpLCBpKTsKKwl9CisKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9OTlVNLCAweEZGMDAsIDB4RkYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX05OVU0sIDB4OEZGRiwgMHg1MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9JRExFVFNTSSwgMHhGRkMwLCAweDFGKTsKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHhFRkZGKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xQX1BIWV9DVEwsIDB4REZGRiwgMHgyMDAwKTsKKwl9IGVsc2UgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgxMDMpLCAweEZGRkUpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMDMpLCAweEZGRkIsIDB4NCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwMyksIDB4RkZFRiwgMHgxMCk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNjNfSVFfQ0FMSUJfQ1RMMiwgMHhGMywgMHgxKTsKKwkJbHBwaHlfc2V0X3Rzc2lfbXV4KGRldiwgVFNTSV9NVVhfUE9TVFBBKTsKKwl9CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfSURMRVRTU0ksIDB4N0ZGRiwgMHg4MDAwKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9ERUxUQVBXUl9MSU1JVCwgMHhGRik7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0RFTFRBUFdSX0xJTUlULCAweEEpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLAorCQkJQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfT0ZGKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9OTlVNLCAweEY4RkYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLAorCQkJQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfU1cpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RUZGRiwgMHgxMDAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFX1ZBTF8wLCAweEVGRkYpOworCX0gZWxzZSB7CisJCWxwcGh5X3NldF90eF9wb3dlcl9ieV9pbmRleChkZXYsIDB4N0YpOworCX0KKworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCB0cnVlLCB0cnVlKTsKKworCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX1NUQVQpOworCWlmICh0bXAgJiAweDgwMDApIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfSURMRVRTU0ksCisJCQkJMHhGRkMwLCAodG1wICYgMHhGRikgLSAzMik7CisJfQorCisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAsIDB4RUZGRik7CisKKwkvLyAoU1BFQz8pIFRPRE8gU2V0ICJUYXJnZXQgVFggZnJlcXVlbmN5IiB2YXJpYWJsZSB0byAwCisJLy8gU1BFQyBGSVhNRSAiU2V0IEJCIE11bHRpcGxpZXIgdG8gMHhFMDAwIiBpbXBvc3NpYmxlIC0gYmJfbXVsdCBpcyB1OCEKK30KKworc3RhdGljIHZvaWQgbHBwaHlfdHhfcGN0bF9pbml0X3N3KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgbHBwaHlfdHhfZ2FpbnMgZ2FpbnM7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWdhaW5zLmdtID0gNDsKKwkJZ2FpbnMucGFkID0gMTI7CisJCWdhaW5zLnBnYSA9IDEyOworCQlnYWlucy5kYWMgPSAwOworCX0gZWxzZSB7CisJCWdhaW5zLmdtID0gNzsKKwkJZ2FpbnMucGFkID0gMTQ7CisJCWdhaW5zLnBnYSA9IDE1OworCQlnYWlucy5kYWMgPSAwOworCX0KKwlscHBoeV9zZXRfdHhfZ2FpbnMoZGV2LCBnYWlucyk7CisJbHBwaHlfc2V0X2JiX211bHQoZGV2LCAxNTApOworfQorCiAvKiBJbml0aWFsaXplIFRYIHBvd2VyIGNvbnRyb2wgKi8KIHN0YXRpYyB2b2lkIGxwcGh5X3R4X3BjdGxfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJaWYgKDAvKkZJWE1FIEhXUENUTCBjYXBhYmxlICovKSB7Ci0JCS8vVE9ETworCQlscHBoeV90eF9wY3RsX2luaXRfaHcoZGV2KTsKIAl9IGVsc2UgeyAvKiBUaGlzIGRldmljZSBpcyBvbmx5IHNvZnR3YXJlIFRYIHBvd2VyIGNvbnRyb2wgY2FwYWJsZS4gKi8KLQkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewotCQkJLy9UT0RPCi0JCX0gZWxzZSB7Ci0JCQkvL1RPRE8KLQkJfQotCQkvL1RPRE8gc2V0IEJCIG11bHRpcGxpZXIgdG8gMHgwMDk2CisJCWxwcGh5X3R4X3BjdGxfaW5pdF9zdyhkZXYpOwogCX0KIH0KIAotc3RhdGljIGludCBiNDNfbHBwaHlfb3BfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci0JLyogVE9ETzogYmFuZCBTUFJPTSAqLwotCWxwcGh5X2Jhc2ViYW5kX2luaXQoZGV2KTsKLQlscHBoeV9yYWRpb19pbml0KGRldik7Ci0JLy9UT0RPIGNhbGlicmF0ZSBSQwotCS8vVE9ETyBzZXQgY2hhbm5lbAotCWxwcGh5X3R4X3BjdGxfaW5pdChkZXYpOwotCS8vVE9ETyBmdWxsIGNhbGliCi0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHUxNiBiNDNfbHBwaHlfb3BfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcpCiB7CiAJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFlfQ09OVFJPTCwgcmVnKTsKQEAgLTQ2Myw2ICsxNTAxLDE0IEBACiAJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFlfREFUQSwgdmFsdWUpOwogfQogCitzdGF0aWMgdm9pZCBiNDNfbHBwaHlfb3BfbWFza3NldChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiByZWcsIHUxNiBtYXNrLAorCQkJCSB1MTYgc2V0KQoreworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX0NPTlRST0wsIHJlZyk7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFlfREFUQSwKKwkJICAgIChiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fUEhZX0RBVEEpICYgbWFzaykgfCBzZXQpOworfQorCiBzdGF0aWMgdTE2IGI0M19scHBoeV9vcF9yYWRpb19yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZykKIHsKIAkvKiBSZWdpc3RlciAxIGlzIGEgMzItYml0IHJlZ2lzdGVyLiAqLwpAQCAtNDkzLDIzICsxNTM5LDY4MSBAQAogCS8vVE9ETwogfQogCi1zdGF0aWMgaW50IGI0M19scHBoeV9vcF9zd2l0Y2hfY2hhbm5lbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBuZXdfY2hhbm5lbCkKK3N0cnVjdCBiMjA2eF9jaGFubmVsIHsKKwl1OCBjaGFubmVsOworCXUxNiBmcmVxOworCXU4IGRhdGFbMTJdOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA2eF9jaGFubmVsIGIyMDYyX2NoYW50YmxbXSA9IHsKKwl7IC5jaGFubmVsID0gMSwgLmZyZXEgPSAyNDEyLCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDIsIC5mcmVxID0gMjQxNywgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSAzLCAuZnJlcSA9IDI0MjIsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNCwgLmZyZXEgPSAyNDI3LCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDUsIC5mcmVxID0gMjQzMiwgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA2LCAuZnJlcSA9IDI0MzcsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNywgLmZyZXEgPSAyNDQyLCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDgsIC5mcmVxID0gMjQ0NywgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA5LCAuZnJlcSA9IDI0NTIsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMTAsIC5mcmVxID0gMjQ1NywgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSAxMSwgLmZyZXEgPSAyNDYyLCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyLCAuZnJlcSA9IDI0NjcsIC5kYXRhWzBdID0gMHhGRiwgLmRhdGFbMV0gPSAweEZGLAorCSAgLmRhdGFbMl0gPSAweEI1LCAuZGF0YVszXSA9IDB4MUIsIC5kYXRhWzRdID0gMHgyNCwgLmRhdGFbNV0gPSAweDMyLAorCSAgLmRhdGFbNl0gPSAweDMyLCAuZGF0YVs3XSA9IDB4ODgsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMTMsIC5mcmVxID0gMjQ3MiwgLmRhdGFbMF0gPSAweEZGLCAuZGF0YVsxXSA9IDB4RkYsCisJICAuZGF0YVsyXSA9IDB4QjUsIC5kYXRhWzNdID0gMHgxQiwgLmRhdGFbNF0gPSAweDI0LCAuZGF0YVs1XSA9IDB4MzIsCisJICAuZGF0YVs2XSA9IDB4MzIsIC5kYXRhWzddID0gMHg4OCwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSAxNCwgLmZyZXEgPSAyNDg0LCAuZGF0YVswXSA9IDB4RkYsIC5kYXRhWzFdID0gMHhGRiwKKwkgIC5kYXRhWzJdID0gMHhCNSwgLmRhdGFbM10gPSAweDFCLCAuZGF0YVs0XSA9IDB4MjQsIC5kYXRhWzVdID0gMHgzMiwKKwkgIC5kYXRhWzZdID0gMHgzMiwgLmRhdGFbN10gPSAweDg4LCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDM0LCAuZnJlcSA9IDUxNzAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDIyLAorCSAgLmRhdGFbMl0gPSAweDIwLCAuZGF0YVszXSA9IDB4ODQsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMzgsIC5mcmVxID0gNTE5MCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MTEsCisJICAuZGF0YVsyXSA9IDB4MTAsIC5kYXRhWzNdID0gMHg4MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA0MiwgLmZyZXEgPSA1MjEwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgxMSwKKwkgIC5kYXRhWzJdID0gMHgxMCwgLmRhdGFbM10gPSAweDgzLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDQ2LCAuZnJlcSA9IDUyMzAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDAwLAorCSAgLmRhdGFbMl0gPSAweDAwLCAuZGF0YVszXSA9IDB4ODMsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gMzYsIC5mcmVxID0gNTE4MCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MTEsCisJICAuZGF0YVsyXSA9IDB4MjAsIC5kYXRhWzNdID0gMHg4MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA0MCwgLmZyZXEgPSA1MjAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgxMSwKKwkgIC5kYXRhWzJdID0gMHgxMCwgLmRhdGFbM10gPSAweDg0LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDQ0LCAuZnJlcSA9IDUyMjAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDExLAorCSAgLmRhdGFbMl0gPSAweDAwLCAuZGF0YVszXSA9IDB4ODMsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNDgsIC5mcmVxID0gNTI0MCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MDAsCisJICAuZGF0YVsyXSA9IDB4MDAsIC5kYXRhWzNdID0gMHg4MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA1MiwgLmZyZXEgPSA1MjYwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDgzLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDU2LCAuZnJlcSA9IDUyODAsIC5kYXRhWzBdID0gMHgwMCwgLmRhdGFbMV0gPSAweDAwLAorCSAgLmRhdGFbMl0gPSAweDAwLCAuZGF0YVszXSA9IDB4ODMsIC5kYXRhWzRdID0gMHgzQywgLmRhdGFbNV0gPSAweDc3LAorCSAgLmRhdGFbNl0gPSAweDM1LCAuZGF0YVs3XSA9IDB4RkYsIC5kYXRhWzhdID0gMHg4OCwgfSwKKwl7IC5jaGFubmVsID0gNjAsIC5mcmVxID0gNTMwMCwgLmRhdGFbMF0gPSAweDAwLCAuZGF0YVsxXSA9IDB4MDAsCisJICAuZGF0YVsyXSA9IDB4MDAsIC5kYXRhWzNdID0gMHg2MywgLmRhdGFbNF0gPSAweDNDLCAuZGF0YVs1XSA9IDB4NzcsCisJICAuZGF0YVs2XSA9IDB4MzUsIC5kYXRhWzddID0gMHhGRiwgLmRhdGFbOF0gPSAweDg4LCB9LAorCXsgLmNoYW5uZWwgPSA2NCwgLmZyZXEgPSA1MzIwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDYyLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEwMCwgLmZyZXEgPSA1NTAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDMwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEwNCwgLmZyZXEgPSA1NTIwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDIwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEwOCwgLmZyZXEgPSA1NTQwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDIwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDExMiwgLmZyZXEgPSA1NTYwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDIwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDExNiwgLmZyZXEgPSA1NTgwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDEwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyMCwgLmZyZXEgPSA1NjAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyNCwgLmZyZXEgPSA1NjIwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEyOCwgLmZyZXEgPSA1NjQwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEzMiwgLmZyZXEgPSA1NjYwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDEzNiwgLmZyZXEgPSA1NjgwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE0MCwgLmZyZXEgPSA1NzAwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE0OSwgLmZyZXEgPSA1NzQ1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE1MywgLmZyZXEgPSA1NzY1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE1NywgLmZyZXEgPSA1Nzg1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE2MSwgLmZyZXEgPSA1ODA1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE2NSwgLmZyZXEgPSA1ODI1LCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHgwMCwKKwkgIC5kYXRhWzJdID0gMHgwMCwgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNywgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDE4NCwgLmZyZXEgPSA0OTIwLCAuZGF0YVswXSA9IDB4NTUsIC5kYXRhWzFdID0gMHg3NywKKwkgIC5kYXRhWzJdID0gMHg5MCwgLmRhdGFbM10gPSAweEY3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDE4OCwgLmZyZXEgPSA0OTQwLCAuZGF0YVswXSA9IDB4NDQsIC5kYXRhWzFdID0gMHg3NywKKwkgIC5kYXRhWzJdID0gMHg4MCwgLmRhdGFbM10gPSAweEU3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDE5MiwgLmZyZXEgPSA0OTYwLCAuZGF0YVswXSA9IDB4NDQsIC5kYXRhWzFdID0gMHg2NiwKKwkgIC5kYXRhWzJdID0gMHg4MCwgLmRhdGFbM10gPSAweEU3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDE5NiwgLmZyZXEgPSA0OTgwLCAuZGF0YVswXSA9IDB4MzMsIC5kYXRhWzFdID0gMHg2NiwKKwkgIC5kYXRhWzJdID0gMHg3MCwgLmRhdGFbM10gPSAweEM3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIwMCwgLmZyZXEgPSA1MDAwLCAuZGF0YVswXSA9IDB4MjIsIC5kYXRhWzFdID0gMHg1NSwKKwkgIC5kYXRhWzJdID0gMHg2MCwgLmRhdGFbM10gPSAweEQ3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIwNCwgLmZyZXEgPSA1MDIwLCAuZGF0YVswXSA9IDB4MjIsIC5kYXRhWzFdID0gMHg1NSwKKwkgIC5kYXRhWzJdID0gMHg2MCwgLmRhdGFbM10gPSAweEM3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIwOCwgLmZyZXEgPSA1MDQwLCAuZGF0YVswXSA9IDB4MjIsIC5kYXRhWzFdID0gMHg0NCwKKwkgIC5kYXRhWzJdID0gMHg1MCwgLmRhdGFbM10gPSAweEM3LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4RkYsIH0sCisJeyAuY2hhbm5lbCA9IDIxMiwgLmZyZXEgPSA1MDYwLCAuZGF0YVswXSA9IDB4MTEsIC5kYXRhWzFdID0gMHg0NCwKKwkgIC5kYXRhWzJdID0gMHg1MCwgLmRhdGFbM10gPSAweEE1LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCisJeyAuY2hhbm5lbCA9IDIxNiwgLmZyZXEgPSA1MDgwLCAuZGF0YVswXSA9IDB4MDAsIC5kYXRhWzFdID0gMHg0NCwKKwkgIC5kYXRhWzJdID0gMHg0MCwgLmRhdGFbM10gPSAweEI2LCAuZGF0YVs0XSA9IDB4M0MsIC5kYXRhWzVdID0gMHg3NywKKwkgIC5kYXRhWzZdID0gMHgzNSwgLmRhdGFbN10gPSAweEZGLCAuZGF0YVs4XSA9IDB4ODgsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDZ4X2NoYW5uZWwgYjIwNjNfY2hhbnRibFtdID0geworCXsgLmNoYW5uZWwgPSAxLCAuZnJlcSA9IDI0MTIsIC5kYXRhWzBdID0gMHg2RiwgLmRhdGFbMV0gPSAweDNDLAorCSAgLmRhdGFbMl0gPSAweDNDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gMiwgLmZyZXEgPSAyNDE3LCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgzQywKKwkgIC5kYXRhWzJdID0gMHgzQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDMsIC5mcmVxID0gMjQyMiwgLmRhdGFbMF0gPSAweDZGLCAuZGF0YVsxXSA9IDB4M0MsCisJICAuZGF0YVsyXSA9IDB4M0MsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSA0LCAuZnJlcSA9IDI0MjcsIC5kYXRhWzBdID0gMHg2RiwgLmRhdGFbMV0gPSAweDJDLAorCSAgLmRhdGFbMl0gPSAweDJDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gNSwgLmZyZXEgPSAyNDMyLCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgyQywKKwkgIC5kYXRhWzJdID0gMHgyQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDYsIC5mcmVxID0gMjQzNywgLmRhdGFbMF0gPSAweDZGLCAuZGF0YVsxXSA9IDB4MkMsCisJICAuZGF0YVsyXSA9IDB4MkMsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSA3LCAuZnJlcSA9IDI0NDIsIC5kYXRhWzBdID0gMHg2RiwgLmRhdGFbMV0gPSAweDJDLAorCSAgLmRhdGFbMl0gPSAweDJDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gOCwgLmZyZXEgPSAyNDQ3LCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgyQywKKwkgIC5kYXRhWzJdID0gMHgyQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDksIC5mcmVxID0gMjQ1MiwgLmRhdGFbMF0gPSAweDZGLCAuZGF0YVsxXSA9IDB4MUMsCisJICAuZGF0YVsyXSA9IDB4MUMsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSAxMCwgLmZyZXEgPSAyNDU3LCAuZGF0YVswXSA9IDB4NkYsIC5kYXRhWzFdID0gMHgxQywKKwkgIC5kYXRhWzJdID0gMHgxQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDExLCAuZnJlcSA9IDI0NjIsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDFDLAorCSAgLmRhdGFbMl0gPSAweDFDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gMTIsIC5mcmVxID0gMjQ2NywgLmRhdGFbMF0gPSAweDZFLCAuZGF0YVsxXSA9IDB4MUMsCisJICAuZGF0YVsyXSA9IDB4MUMsIC5kYXRhWzNdID0gMHgwNCwgLmRhdGFbNF0gPSAweDA1LCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MDUsIC5kYXRhWzddID0gMHgwNSwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDgwLCAuZGF0YVsxMV0gPSAweDcwLCB9LAorCXsgLmNoYW5uZWwgPSAxMywgLmZyZXEgPSAyNDcyLCAuZGF0YVswXSA9IDB4NkUsIC5kYXRhWzFdID0gMHgxQywKKwkgIC5kYXRhWzJdID0gMHgxQywgLmRhdGFbM10gPSAweDA0LCAuZGF0YVs0XSA9IDB4MDUsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwNSwgLmRhdGFbN10gPSAweDA1LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4ODAsIC5kYXRhWzExXSA9IDB4NzAsIH0sCisJeyAuY2hhbm5lbCA9IDE0LCAuZnJlcSA9IDI0ODQsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDQsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA1LAorCSAgLmRhdGFbNl0gPSAweDA1LCAuZGF0YVs3XSA9IDB4MDUsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHg4MCwgLmRhdGFbMTFdID0gMHg3MCwgfSwKKwl7IC5jaGFubmVsID0gMzQsIC5mcmVxID0gNTE3MCwgLmRhdGFbMF0gPSAweDZBLCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAyLCAuZGF0YVs1XSA9IDB4MDUsCisJICAuZGF0YVs2XSA9IDB4MEQsIC5kYXRhWzddID0gMHgwRCwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4ODAsCisJICAuZGF0YVsxMF0gPSAweDIwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSAzNiwgLmZyZXEgPSA1MTgwLCAuZGF0YVswXSA9IDB4NkEsIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDEsIC5kYXRhWzVdID0gMHgwNSwKKwkgIC5kYXRhWzZdID0gMHgwRCwgLmRhdGFbN10gPSAweDBDLCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg4MCwKKwkgIC5kYXRhWzEwXSA9IDB4MjAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDM4LCAuZnJlcSA9IDUxOTAsIC5kYXRhWzBdID0gMHg2QSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMSwgLmRhdGFbNV0gPSAweDA0LAorCSAgLmRhdGFbNl0gPSAweDBDLCAuZGF0YVs3XSA9IDB4MEMsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDgwLAorCSAgLmRhdGFbMTBdID0gMHgyMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gNDAsIC5mcmVxID0gNTIwMCwgLmRhdGFbMF0gPSAweDY5LCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAxLCAuZGF0YVs1XSA9IDB4MDQsCisJICAuZGF0YVs2XSA9IDB4MEMsIC5kYXRhWzddID0gMHgwQywgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4NzAsCisJICAuZGF0YVsxMF0gPSAweDIwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSA0MiwgLmZyZXEgPSA1MjEwLCAuZGF0YVswXSA9IDB4NjksIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDEsIC5kYXRhWzVdID0gMHgwNCwKKwkgIC5kYXRhWzZdID0gMHgwQiwgLmRhdGFbN10gPSAweDBDLCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg3MCwKKwkgIC5kYXRhWzEwXSA9IDB4MjAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDQ0LCAuZnJlcSA9IDUyMjAsIC5kYXRhWzBdID0gMHg2OSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDA0LAorCSAgLmRhdGFbNl0gPSAweDBCLCAuZGF0YVs3XSA9IDB4MEIsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDYwLAorCSAgLmRhdGFbMTBdID0gMHgyMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gNDYsIC5mcmVxID0gNTIzMCwgLmRhdGFbMF0gPSAweDY5LCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAwLCAuZGF0YVs1XSA9IDB4MDMsCisJICAuZGF0YVs2XSA9IDB4MEEsIC5kYXRhWzddID0gMHgwQiwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4NjAsCisJICAuZGF0YVsxMF0gPSAweDIwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSA0OCwgLmZyZXEgPSA1MjQwLCAuZGF0YVswXSA9IDB4NjksIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDAsIC5kYXRhWzVdID0gMHgwMywKKwkgIC5kYXRhWzZdID0gMHgwQSwgLmRhdGFbN10gPSAweDBBLCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg2MCwKKwkgIC5kYXRhWzEwXSA9IDB4MjAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDUyLCAuZnJlcSA9IDUyNjAsIC5kYXRhWzBdID0gMHg2OCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAyLAorCSAgLmRhdGFbNl0gPSAweDA5LCAuZGF0YVs3XSA9IDB4MDksIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDYwLAorCSAgLmRhdGFbMTBdID0gMHgyMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gNTYsIC5mcmVxID0gNTI4MCwgLmRhdGFbMF0gPSAweDY4LCAuZGF0YVsxXSA9IDB4MEMsCisJICAuZGF0YVsyXSA9IDB4MEMsIC5kYXRhWzNdID0gMHgwMCwgLmRhdGFbNF0gPSAweDAwLCAuZGF0YVs1XSA9IDB4MDEsCisJICAuZGF0YVs2XSA9IDB4MDgsIC5kYXRhWzddID0gMHgwOCwgLmRhdGFbOF0gPSAweDc3LCAuZGF0YVs5XSA9IDB4NTAsCisJICAuZGF0YVsxMF0gPSAweDEwLCAuZGF0YVsxMV0gPSAweDAwLCB9LAorCXsgLmNoYW5uZWwgPSA2MCwgLmZyZXEgPSA1MzAwLCAuZGF0YVswXSA9IDB4NjgsIC5kYXRhWzFdID0gMHgwQywKKwkgIC5kYXRhWzJdID0gMHgwQywgLmRhdGFbM10gPSAweDAwLCAuZGF0YVs0XSA9IDB4MDAsIC5kYXRhWzVdID0gMHgwMSwKKwkgIC5kYXRhWzZdID0gMHgwOCwgLmRhdGFbN10gPSAweDA4LCAuZGF0YVs4XSA9IDB4NzcsIC5kYXRhWzldID0gMHg1MCwKKwkgIC5kYXRhWzEwXSA9IDB4MTAsIC5kYXRhWzExXSA9IDB4MDAsIH0sCisJeyAuY2hhbm5lbCA9IDY0LCAuZnJlcSA9IDUzMjAsIC5kYXRhWzBdID0gMHg2NywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDA4LCAuZGF0YVs3XSA9IDB4MDgsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDUwLAorCSAgLmRhdGFbMTBdID0gMHgxMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTAwLCAuZnJlcSA9IDU1MDAsIC5kYXRhWzBdID0gMHg2NCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAyLCAuZGF0YVs3XSA9IDB4MDEsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDIwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTA0LCAuZnJlcSA9IDU1MjAsIC5kYXRhWzBdID0gMHg2NCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAxLCAuZGF0YVs3XSA9IDB4MDEsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDIwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTA4LCAuZnJlcSA9IDU1NDAsIC5kYXRhWzBdID0gMHg2MywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAxLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDEwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTEyLCAuZnJlcSA9IDU1NjAsIC5kYXRhWzBdID0gMHg2MywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDEwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTE2LCAuZnJlcSA9IDU1ODAsIC5kYXRhWzBdID0gMHg2MiwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDEwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTIwLCAuZnJlcSA9IDU2MDAsIC5kYXRhWzBdID0gMHg2MiwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTI0LCAuZnJlcSA9IDU2MjAsIC5kYXRhWzBdID0gMHg2MiwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTI4LCAuZnJlcSA9IDU2NDAsIC5kYXRhWzBdID0gMHg2MSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTMyLCAuZnJlcSA9IDU2NjAsIC5kYXRhWzBdID0gMHg2MSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTM2LCAuZnJlcSA9IDU2ODAsIC5kYXRhWzBdID0gMHg2MSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTQwLCAuZnJlcSA9IDU3MDAsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTQ5LCAuZnJlcSA9IDU3NDUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTUzLCAuZnJlcSA9IDU3NjUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTU3LCAuZnJlcSA9IDU3ODUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTYxLCAuZnJlcSA9IDU4MDUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTY1LCAuZnJlcSA9IDU4MjUsIC5kYXRhWzBdID0gMHg2MCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwMCwgLmRhdGFbNV0gPSAweDAwLAorCSAgLmRhdGFbNl0gPSAweDAwLCAuZGF0YVs3XSA9IDB4MDAsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDAwLAorCSAgLmRhdGFbMTBdID0gMHgwMCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTg0LCAuZnJlcSA9IDQ5MjAsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOSwgLmRhdGFbNV0gPSAweDBFLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEMwLAorCSAgLmRhdGFbMTBdID0gMHg1MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTg4LCAuZnJlcSA9IDQ5NDAsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOSwgLmRhdGFbNV0gPSAweDBELAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEIwLAorCSAgLmRhdGFbMTBdID0gMHg1MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTkyLCAuZnJlcSA9IDQ5NjAsIC5kYXRhWzBdID0gMHg2RSwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBDLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEIwLAorCSAgLmRhdGFbMTBdID0gMHg1MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMTk2LCAuZnJlcSA9IDQ5ODAsIC5kYXRhWzBdID0gMHg2RCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBDLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEEwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjAwLCAuZnJlcSA9IDUwMDAsIC5kYXRhWzBdID0gMHg2RCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBCLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEEwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjA0LCAuZnJlcSA9IDUwMjAsIC5kYXRhWzBdID0gMHg2RCwgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwOCwgLmRhdGFbNV0gPSAweDBBLAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweEEwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjA4LCAuZnJlcSA9IDUwNDAsIC5kYXRhWzBdID0gMHg2QywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwNywgLmRhdGFbNV0gPSAweDA5LAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDkwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjEyLCAuZnJlcSA9IDUwNjAsIC5kYXRhWzBdID0gMHg2QywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwNiwgLmRhdGFbNV0gPSAweDA4LAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDkwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKKwl7IC5jaGFubmVsID0gMjE2LCAuZnJlcSA9IDUwODAsIC5kYXRhWzBdID0gMHg2QywgLmRhdGFbMV0gPSAweDBDLAorCSAgLmRhdGFbMl0gPSAweDBDLCAuZGF0YVszXSA9IDB4MDAsIC5kYXRhWzRdID0gMHgwNSwgLmRhdGFbNV0gPSAweDA4LAorCSAgLmRhdGFbNl0gPSAweDBGLCAuZGF0YVs3XSA9IDB4MEYsIC5kYXRhWzhdID0gMHg3NywgLmRhdGFbOV0gPSAweDkwLAorCSAgLmRhdGFbMTBdID0gMHg0MCwgLmRhdGFbMTFdID0gMHgwMCwgfSwKK307CisKK3N0YXRpYyB2b2lkIGxwcGh5X2IyMDYyX3Jlc2V0X3BsbF9iaWFzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQkvL1RPRE8KKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMiwgMHhGRik7CisJdWRlbGF5KDIwKTsKKwlpZiAoYnVzLT5jaGlwX2lkID09IDB4NTM1NCkgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0NPTU0xLCA0KTsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyLCA0KTsKKwl9IGVsc2UgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDIsIDApOworCX0KKwl1ZGVsYXkoNSk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2IyMDYyX3Zjb19jYWxpYihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyMSwgMHg0Mik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyMSwgMHg2Mik7CisJdWRlbGF5KDIwMCk7Cit9CisKK3N0YXRpYyBpbnQgbHBwaHlfYjIwNjJfdHVuZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkgICAgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisJY29uc3Qgc3RydWN0IGIyMDZ4X2NoYW5uZWwgKmNoYW5kYXRhID0gTlVMTDsKKwl1MzIgY3J5c3RhbF9mcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKwl1MzIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNywgdG1wOCwgdG1wOTsKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGIyMDYyX2NoYW50YmwpOyBpKyspIHsKKwkJaWYgKGIyMDYyX2NoYW50YmxbaV0uY2hhbm5lbCA9PSBjaGFubmVsKSB7CisJCQljaGFuZGF0YSA9ICZiMjA2Ml9jaGFudGJsW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoQjQzX1dBUk5fT04oIWNoYW5kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfU19SRlBMTF9DVEwxNCwgMHgwNCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9MR0VOQV9UVU5FMCwgY2hhbmRhdGEtPmRhdGFbMF0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fTEdFTkFfVFVORTIsIGNoYW5kYXRhLT5kYXRhWzFdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX0xHRU5BX1RVTkUzLCBjaGFuZGF0YS0+ZGF0YVsyXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9UVU5FLCBjaGFuZGF0YS0+ZGF0YVszXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19MR0VOR19DVEwxLCBjaGFuZGF0YS0+ZGF0YVs0XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9MR0VOQV9DVEw1LCBjaGFuZGF0YS0+ZGF0YVs1XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9MR0VOQV9DVEw2LCBjaGFuZGF0YS0+ZGF0YVs2XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9QR0EsIGNoYW5kYXRhLT5kYXRhWzddKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX1BBRCwgY2hhbmRhdGEtPmRhdGFbOF0pOworCisJdG1wMSA9IGNyeXN0YWxfZnJlcSAvIDEwMDA7CisJdG1wMiA9IGxwcGh5LT5wZGl2ICogMTAwMDsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDMzLCAweENDKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDM0LCAweDA3KTsKKwlscHBoeV9iMjA2Ml9yZXNldF9wbGxfYmlhcyhkZXYpOworCXRtcDMgPSB0bXAyICogY2hhbm5lbDJmcmVxX2xwKGNoYW5uZWwpOworCWlmIChjaGFubmVsMmZyZXFfbHAoY2hhbm5lbCkgPCA0MDAwKQorCQl0bXAzICo9IDI7CisJdG1wNCA9IDQ4ICogdG1wMTsKKwl0bXA2ID0gdG1wMyAvIHRtcDQ7CisJdG1wNyA9IHRtcDMgJSB0bXA0OworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjYsIHRtcDYpOworCXRtcDUgPSB0bXA3ICogMHgxMDA7CisJdG1wNiA9IHRtcDUgLyB0bXA0OworCXRtcDcgPSB0bXA1ICUgdG1wNDsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDI3LCB0bXA2KTsKKwl0bXA1ID0gdG1wNyAqIDB4MTAwOworCXRtcDYgPSB0bXA1IC8gdG1wNDsKKwl0bXA3ID0gdG1wNSAlIHRtcDQ7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEwyOCwgdG1wNik7CisJdG1wNSA9IHRtcDcgKiAweDEwMDsKKwl0bXA2ID0gdG1wNSAvIHRtcDQ7CisJdG1wNyA9IHRtcDUgJSB0bXA0OworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjksIHRtcDYgKyAoKDIgKiB0bXA3KSAvIHRtcDQpKTsKKwl0bXA4ID0gYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE5KTsKKwl0bXA5ID0gKCgyICogdG1wMyAqICh0bXA4ICsgMSkpICsgKDMgKiB0bXAxKSkgLyAoNiAqIHRtcDEpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjMsICh0bXA5ID4+IDgpICsgMTYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMjQsIHRtcDkgJiAweEZGKTsKKworCWxwcGh5X2IyMDYyX3Zjb19jYWxpYihkZXYpOworCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMykgJiAweDEwKSB7CisJCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMzMsIDB4RkMpOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDM0LCAwKTsKKwkJbHBwaHlfYjIwNjJfcmVzZXRfcGxsX2JpYXMoZGV2KTsKKwkJbHBwaHlfYjIwNjJfdmNvX2NhbGliKGRldik7CisJCWlmIChiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMykgJiAweDEwKQorCQkJZXJyID0gLUVJTzsKKwl9CisKKwliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTQsIH4weDA0KTsKKwlyZXR1cm4gZXJyOworfQorCisKKy8qIFRoaXMgd2FzIHByZXZpb3VzbHkgY2FsbGVkIGxwcGh5X2phcGFuX2ZpbHRlciAqLworc3RhdGljIHZvaWQgbHBwaHlfc2V0X2FuYWxvZ19maWx0ZXIoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MTYgdG1wID0gKGNoYW5uZWwgPT0gMTQpOyAvL1NQRUMgRklYTUUgY2hlY2sgamFwYW53aWRlZmlsdGVyIQorCisJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsgLy9TUEVDIEZJWE1FIElzbid0IHRoaXMgcmV2MC8xLXNwZWNpZmljPworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTFBfUEhZX0NUTCwgMHhGQ0ZGLCB0bXAgPDwgOSk7CisJCWlmICgoZGV2LT5waHkucmV2ID09IDEpICYmIChscHBoeS0+cmNfY2FwKSkKKwkJCWxwcGh5X3NldF9yY19jYXAoZGV2KTsKKwl9IGVsc2UgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19UWF9CQl9TUDMsIDB4M0YpOworCX0KK30KKworc3RhdGljIHZvaWQgbHBwaHlfYjIwNjNfdmNvX2NhbGliKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwl1MTYgdG1wOworCisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfU1AxLCB+MHg0MCk7CisJdG1wID0gYjQzX3JhZGlvX3JlYWQoZGV2LCBCMjA2M19QTExfSlRBR19DQUxOUlNUKSAmIDB4Rjg7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wKTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wIHwgMHg0KTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wIHwgMHg2KTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfQ0FMTlJTVCwgdG1wIHwgMHg3KTsKKwl1ZGVsYXkoMzAwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjNfUExMX1NQMSwgMHg0MCk7Cit9CisKK3N0YXRpYyBpbnQgbHBwaHlfYjIwNjNfdHVuZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkgICAgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDZ4X2NoYW5uZWwgKmNoYW5kYXRhID0gTlVMTDsKKwl1MzIgY3J5c3RhbF9mcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKwl1MzIgZnJlcXJlZiwgdmNvX2ZyZXEsIHZhbDEsIHZhbDIsIHZhbDMsIHRpbWVvdXQsIHRpbWVvdXRyZWYsIGNvdW50OworCXUxNiBvbGRfY29tbTE1LCBzY2FsZTsKKwl1MzIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNjsKKwlpbnQgaSwgZGl2ID0gKGNyeXN0YWxfZnJlcSA8PSAyNjAwMDAwMCA/IDEgOiAyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGIyMDYzX2NoYW50YmwpOyBpKyspIHsKKwkJaWYgKGIyMDYzX2NoYW50YmxbaV0uY2hhbm5lbCA9PSBjaGFubmVsKSB7CisJCQljaGFuZGF0YSA9ICZiMjA2M19jaGFudGJsW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoQjQzX1dBUk5fT04oIWNoYW5kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19MT0dFTl9WQ09CVUYxLCBjaGFuZGF0YS0+ZGF0YVswXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfTE9HRU5fTUlYRVIyLCBjaGFuZGF0YS0+ZGF0YVsxXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfTE9HRU5fQlVGMiwgY2hhbmRhdGEtPmRhdGFbMl0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX0xPR0VOX1JDQ1IxLCBjaGFuZGF0YS0+ZGF0YVszXSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8xU1QzLCBjaGFuZGF0YS0+ZGF0YVs0XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8yTkQxLCBjaGFuZGF0YS0+ZGF0YVs1XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8yTkQ0LCBjaGFuZGF0YS0+ZGF0YVs2XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF8yTkQ3LCBjaGFuZGF0YS0+ZGF0YVs3XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfQV9SWF9QUzYsIGNoYW5kYXRhLT5kYXRhWzhdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19UWF9SRl9DVEwyLCBjaGFuZGF0YS0+ZGF0YVs5XSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfVFhfUkZfQ1RMNSwgY2hhbmRhdGEtPmRhdGFbMTBdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QQV9DVEwxMSwgY2hhbmRhdGEtPmRhdGFbMTFdKTsKKworCW9sZF9jb21tMTUgPSBiNDNfcmFkaW9fcmVhZChkZXYsIEIyMDYzX0NPTU0xNSk7CisJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX0NPTU0xNSwgMHgxRSk7CisKKwlpZiAoY2hhbmRhdGEtPmZyZXEgPiA0MDAwKSAvKiBzcGVjIHNheXMgMjQ4NCwgYnV0IDQwMDAgaXMgc2FmZXIgKi8KKwkJdmNvX2ZyZXEgPSBjaGFuZGF0YS0+ZnJlcSA8PCAxOworCWVsc2UKKwkJdmNvX2ZyZXEgPSBjaGFuZGF0YS0+ZnJlcSA8PCAyOworCisJZnJlcXJlZiA9IGNyeXN0YWxfZnJlcSAqIDM7CisJdmFsMSA9IGxwcGh5X3FkaXZfcm91bmR1cChjcnlzdGFsX2ZyZXEsIDEwMDAwMDAsIDE2KTsKKwl2YWwyID0gbHBwaHlfcWRpdl9yb3VuZHVwKGNyeXN0YWxfZnJlcSwgMTAwMDAwMCAqIGRpdiwgMTYpOworCXZhbDMgPSBscHBoeV9xZGl2X3JvdW5kdXAodmNvX2ZyZXEsIDMsIDE2KTsKKwl0aW1lb3V0ID0gKCgoKDggKiBjcnlzdGFsX2ZyZXEpIC8gKGRpdiAqIDUwMDAwMDApKSArIDEpID4+IDEpIC0gMTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCMywgMHgyKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI2LAorCQkJICAweEZGRjgsIHRpbWVvdXQgPj4gMik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNywKKwkJCSAgMHhGRjlGLHRpbWVvdXQgPDwgNSk7CisKKwl0aW1lb3V0cmVmID0gKCgoKDggKiBjcnlzdGFsX2ZyZXEpIC8gKGRpdiAqICh0aW1lb3V0ICsgMSkpKSArCisJCQkJCQk5OTk5OTkpIC8gMTAwMDAwMCkgKyAxOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI1LCB0aW1lb3V0cmVmKTsKKworCWNvdW50ID0gbHBwaHlfcWRpdl9yb3VuZHVwKHZhbDMsIHZhbDIgKyAxNiwgMTYpOworCWNvdW50ICo9ICh0aW1lb3V0ICsgMSkgKiAodGltZW91dHJlZiArIDEpOworCWNvdW50LS07CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNywKKwkJCQkJCTB4RjAsIGNvdW50ID4+IDgpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI4LCBjb3VudCAmIDB4RkYpOworCisJdG1wMSA9ICgodmFsMyAqIDYyNTAwKSAvIGZyZXFyZWYpIDw8IDQ7CisJdG1wMiA9ICgodmFsMyAqIDYyNTAwKSAlIGZyZXFyZWYpIDw8IDQ7CisJd2hpbGUgKHRtcDIgPj0gZnJlcXJlZikgeworCQl0bXAxKys7CisJCXRtcDIgLT0gZnJlcXJlZjsKKwl9CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfU0cxLCAweEZGRTAsIHRtcDEgPj4gNCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfU0cyLCAweEZFMEYsIHRtcDEgPDwgNCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfU0cyLCAweEZGRjAsIHRtcDEgPj4gMTYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9TRzMsICh0bXAyID4+IDgpICYgMHhGRik7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX1NHNCwgdG1wMiAmIDB4RkYpOworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGMSwgMHhCOSk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGMiwgMHg4OCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGMywgMHgyOCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0xGNCwgMHg2Myk7CisKKwl0bXAzID0gKCg0MSAqICh2YWwzIC0gMzAwMCkpIC8xMjAwKSArIDI3OworCXRtcDQgPSBscHBoeV9xZGl2X3JvdW5kdXAoMTMyMDAwICogdG1wMSwgODQ1MSwgMTYpOworCisJaWYgKCh0bXA0ICsgdG1wMyAtIDEpIC8gdG1wMyA+IDYwKSB7CisJCXNjYWxlID0gMTsKKwkJdG1wNSA9ICgodG1wNCArIHRtcDMpIC8gKHRtcDMgPDwgMSkpIC0gODsKKwl9IGVsc2UgeworCQlzY2FsZSA9IDA7CisJCXRtcDUgPSAoKHRtcDQgKyAodG1wMyA+PiAxKSkgLyB0bXAzKSAtIDg7CisJfQorCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNjNfUExMX0pUQUdfUExMX0NQMiwgMHhGRkMwLCB0bXA1KTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9DUDIsIDB4RkZCRiwgc2NhbGUgPDwgNik7CisKKwl0bXA2ID0gbHBwaHlfcWRpdl9yb3VuZHVwKDEwMCAqIHZhbDEsIHZhbDMsIDE2KTsKKwl0bXA2ICo9ICh0bXA1ICogOCkgKiAoc2NhbGUgKyAxKTsKKwlpZiAodG1wNiA+IDE1MCkKKwkJdG1wNiA9IDA7CisKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9DUDMsIDB4RkZFMCwgdG1wNik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfQ1AzLCAweEZGREYsIHNjYWxlIDw8IDUpOworCisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCBCMjA2M19QTExfSlRBR19QTExfWFRBTF8xMiwgMHhGRkZCLCAweDQpOworCWlmIChjcnlzdGFsX2ZyZXEgPiAyNjAwMDAwMCkKKwkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9YVEFMXzEyLCAweDIpOworCWVsc2UKKwkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfSlRBR19QTExfWFRBTF8xMiwgMHhGRCk7CisKKwlpZiAodmFsMSA9PSA0NSkKKwkJYjQzX3JhZGlvX3NldChkZXYsIEIyMDYzX1BMTF9KVEFHX1BMTF9WQ08xLCAweDIpOworCWVsc2UKKwkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfSlRBR19QTExfVkNPMSwgMHhGRCk7CisKKwliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjNfUExMX1NQMiwgMHgzKTsKKwl1ZGVsYXkoMSk7CisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA2M19QTExfU1AyLCAweEZGRkMpOworCWxwcGh5X2IyMDYzX3Zjb19jYWxpYihkZXYpOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYzX0NPTU0xNSwgb2xkX2NvbW0xNSk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBiNDNfbHBwaHlfb3BfZ2V0X2RlZmF1bHRfY2hhbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCitzdGF0aWMgaW50IGI0M19scHBoeV9vcF9zd2l0Y2hfY2hhbm5lbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBuZXdfY2hhbm5lbCkKIHsKLQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMzY7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJaW50IGVycjsKKworCWlmIChkZXYtPnBoeS5yYWRpb192ZXIgPT0gMHgyMDYzKSB7CisJCWVyciA9IGxwcGh5X2IyMDYzX3R1bmUoZGV2LCBuZXdfY2hhbm5lbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IGxwcGh5X2IyMDYyX3R1bmUoZGV2LCBuZXdfY2hhbm5lbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlscHBoeV9zZXRfYW5hbG9nX2ZpbHRlcihkZXYsIG5ld19jaGFubmVsKTsKKwkJbHBwaHlfYWRqdXN0X2dhaW5fdGFibGUoZGV2LCBjaGFubmVsMmZyZXFfbHAobmV3X2NoYW5uZWwpKTsKKwl9CisKKwlscHBoeS0+Y2hhbm5lbCA9IG5ld19jaGFubmVsOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTCwgbmV3X2NoYW5uZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWludCBlcnI7CisKKwlscHBoeV9yZWFkX2JhbmRfc3Byb20oZGV2KTsgLy9GSVhNRSBzaG91bGQgdGhpcyBiZSBpbiBwcmVwYXJlX3N0cnVjdHM/CisJbHBwaHlfYmFzZWJhbmRfaW5pdChkZXYpOworCWxwcGh5X3JhZGlvX2luaXQoZGV2KTsKKwlscHBoeV9jYWxpYnJhdGVfcmMoZGV2KTsKKwllcnIgPSBiNDNfbHBwaHlfb3Bfc3dpdGNoX2NoYW5uZWwoZGV2LCA3KTsKKwlpZiAoZXJyKSB7CisJCWI0M2RiZyhkZXYtPndsLCAiU3dpdGNoIHRvIGNoYW5uZWwgNyBmYWlsZWQsIGVycm9yID0gJWQuXG4iLAorCQkgICAgICAgZXJyKTsKKwl9CisJbHBwaHlfdHhfcGN0bF9pbml0KGRldik7CisJbHBwaHlfY2FsaWJyYXRpb24oZGV2KTsKKwkvL1RPRE8gQUNJIGluaXQKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfbHBwaHlfb3Bfc2V0X3J4X2FudGVubmEoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgYW50ZW5uYSkKIHsKLQkvL1RPRE8KKwlpZiAoZGV2LT5waHkucmV2ID49IDIpCisJCXJldHVybjsgLy8gcmV2MisgZG9lc24ndCBzdXBwb3J0IGFudGVubmEgZGl2ZXJzaXR5CisKKwlpZiAoQjQzX1dBUk5fT04oYW50ZW5uYSA+IEI0M19BTlRFTk5BX0FVVE8xKSkKKwkJcmV0dXJuOworCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEZGRkQsIGFudGVubmEgJiAweDIpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgMHhGRkZFLCBhbnRlbm5hICYgMHgxKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2xwcGh5X29wX2FkanVzdF90eHBvd2VyKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTUyNCw3ICsyMjI4LDYgQEAKIAlyZXR1cm4gQjQzX1RYUFdSX1JFU19ET05FOwogfQogCi0KIGNvbnN0IHN0cnVjdCBiNDNfcGh5X29wZXJhdGlvbnMgYjQzX3BoeW9wc19scCA9IHsKIAkuYWxsb2NhdGUJCT0gYjQzX2xwcGh5X29wX2FsbG9jYXRlLAogCS5mcmVlCQkJPSBiNDNfbHBwaHlfb3BfZnJlZSwKQEAgLTUzMiw2ICsyMjM1LDcgQEAKIAkuaW5pdAkJCT0gYjQzX2xwcGh5X29wX2luaXQsCiAJLnBoeV9yZWFkCQk9IGI0M19scHBoeV9vcF9yZWFkLAogCS5waHlfd3JpdGUJCT0gYjQzX2xwcGh5X29wX3dyaXRlLAorCS5waHlfbWFza3NldAkJPSBiNDNfbHBwaHlfb3BfbWFza3NldCwKIAkucmFkaW9fcmVhZAkJPSBiNDNfbHBwaHlfb3BfcmFkaW9fcmVhZCwKIAkucmFkaW9fd3JpdGUJCT0gYjQzX2xwcGh5X29wX3JhZGlvX3dyaXRlLAogCS5zb2Z0d2FyZV9yZmtpbGwJPSBiNDNfbHBwaHlfb3Bfc29mdHdhcmVfcmZraWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oCmluZGV4IDE4MzcwYjQuLmMzMjMyYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmgKQEAgLTI3MywxMiArMjczLDE5IEBACiAjZGVmaW5lIEI0M19MUFBIWV9BRkVfRERGU19QT0lOVEVSX0lOSVQJCUI0M19QSFlfT0ZETSgweEI4KSAvKiBBRkUgRERGUyBwb2ludGVyIGluaXQgKi8KICNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EREZTX0lOQ1JfSU5JVAkJQjQzX1BIWV9PRkRNKDB4QjkpIC8qIEFGRSBEREZTIGluY3IgaW5pdCAqLwogI2RlZmluZSBCNDNfTFBQSFlfTVJDTk9JU0VSRURVQ1RJT04JCUI0M19QSFlfT0ZETSgweEJBKSAvKiBtcmNOb2lzZVJlZHVjdGlvbiAqLwotI2RlZmluZSBCNDNfTFBQSFlfVFJMT09LVVAzCQkJQjQzX1BIWV9PRkRNKDB4QkIpIC8qIFRSTG9va3VwMyAqLwotI2RlZmluZSBCNDNfTFBQSFlfVFJMT09LVVA0CQkJQjQzX1BIWV9PRkRNKDB4QkMpIC8qIFRSTG9va3VwNCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzMJCQlCNDNfUEhZX09GRE0oMHhCQikgLyogVFIgTG9va3VwIDMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF80CQkJQjQzX1BIWV9PRkRNKDB4QkMpIC8qIFRSIExvb2t1cCA0ICovCiAjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9GSUZPX1NUQVQJCUI0M19QSFlfT0ZETSgweEJEKSAvKiBSYWRhciBGSUZPIFN0YXR1cyAqLwogI2RlZmluZSBCNDNfTFBQSFlfR1BJT19PVVRFTgkJCUI0M19QSFlfT0ZETSgweEJFKSAvKiBHUElPIE91dCBlbmFibGUgKi8KICNkZWZpbmUgQjQzX0xQUEhZX0dQSU9fU0VMRUNUCQkJQjQzX1BIWV9PRkRNKDB4QkYpIC8qIEdQSU8gU2VsZWN0ICovCiAjZGVmaW5lIEI0M19MUFBIWV9HUElPX09VVAkJCUI0M19QSFlfT0ZETSgweEMwKSAvKiBHUElPIE91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfNEMzCQkJCUI0M19QSFlfT0ZETSgweEMzKSAvKiB1bmtub3duLCB1c2VkIGR1cmluZyBCQiBpbml0ICovCisjZGVmaW5lIEI0M19MUFBIWV80QzQJCQkJQjQzX1BIWV9PRkRNKDB4QzQpIC8qIHVua25vd24sIHVzZWQgZHVyaW5nIEJCIGluaXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZXzRDNQkJCQlCNDNfUEhZX09GRE0oMHhDNSkgLyogdW5rbm93biwgdXNlZCBkdXJpbmcgQkIgaW5pdCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzUJCQlCNDNfUEhZX09GRE0oMHhDNykgLyogVFIgTG9va3VwIDUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF82CQkJQjQzX1BIWV9PRkRNKDB4QzgpIC8qIFRSIExvb2t1cCA2ICovCisjZGVmaW5lIEI0M19MUFBIWV9UUl9MT09LVVBfNwkJCUI0M19QSFlfT0ZETSgweEM5KSAvKiBUUiBMb29rdXAgNyAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzgJCQlCNDNfUEhZX09GRE0oMHhDQSkgLyogVFIgTG9va3VwIDggKi8KIAogCiAKQEAgLTgxOCwxNCArODI1LDMwIEBACiAJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgdHhwY3RsX21vZGU7CiAKIAkvKiBUcmFuc21pdCBpc29sYXRpb24gbWVkaXVtIGJhbmQgKi8KLQl1OCB0eF9pc29sYXRpb25fbWVkX2JhbmQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJdTggdHhfaXNvbGF0aW9uX21lZF9iYW5kOwogCS8qIFRyYW5zbWl0IGlzb2xhdGlvbiBsb3cgYmFuZCAqLwotCXU4IHR4X2lzb2xhdGlvbl9sb3dfYmFuZDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwl1OCB0eF9pc29sYXRpb25fbG93X2JhbmQ7CiAJLyogVHJhbnNtaXQgaXNvbGF0aW9uIGhpZ2ggYmFuZCAqLwotCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOworCisJLyogTWF4IHRyYW5zbWl0IHBvd2VyIG1lZGl1bSBiYW5kICovCisJdTE2IG1heF90eF9wd3JfbWVkX2JhbmQ7CisJLyogTWF4IHRyYW5zbWl0IHBvd2VyIGxvdyBiYW5kICovCisJdTE2IG1heF90eF9wd3JfbG93X2JhbmQ7CisJLyogTWF4IHRyYW5zbWl0IHBvd2VyIGhpZ2ggYmFuZCAqLworCXUxNiBtYXhfdHhfcHdyX2hpX2JhbmQ7CisKKwkvKiBGSVhNRSBXaGF0IGFyZSB0aGVzZSB1c2VkIGZvcj8gKi8KKwkvKiBGSVhNRSBJcyAxNSB0aGUgY29ycmVjdCBhcnJheSBzaXplPyAqLworCXUxNiB0eF9tYXhfcmF0ZVsxNV07CisJdTE2IHR4X21heF9yYXRlbFsxNV07CisJdTE2IHR4X21heF9yYXRlaFsxNV07CisKKwkvKiBUcmFuc21pdCBwb3dlciBhcnJheXMgKi8KKwlzMTYgdHhwYVszXSwgdHhwYWxbM10sIHR4cGFoWzNdOwogCiAJLyogUmVjZWl2ZSBwb3dlciBvZmZzZXQgKi8KLQl1OCByeF9wd3Jfb2Zmc2V0OyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IHJ4X3B3cl9vZmZzZXQ7CiAKIAkvKiBUU1NJIHRyYW5zbWl0IGNvdW50ICovCiAJdTE2IHRzc2lfdHhfY291bnQ7CkBAIC04NDEsMTYgKzg2NCwxNiBAQAogCXM4IHR4X3B3cl9pZHhfb3ZlcjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KIAogCS8qIFJTU0kgdmYgKi8KLQl1OCByc3NpX3ZmOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IHJzc2lfdmY7CiAJLyogUlNTSSB2YyAqLwotCXU4IHJzc2lfdmM7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJdTggcnNzaV92YzsKIAkvKiBSU1NJIGdzICovCi0JdTggcnNzaV9nczsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwl1OCByc3NpX2dzOwogCiAJLyogUkMgY2FwICovCiAJdTggcmNfY2FwOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLwogCS8qIEJYIGFyY2ggKi8KLQl1OCBieF9hcmNoOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCXU4IGJ4X2FyY2g7CiAKIAkvKiBGdWxsIGNhbGlicmF0aW9uIGNoYW5uZWwgKi8KIAl1OCBmdWxsX2NhbGliX2NoYW47IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCkBAIC04NTgsOCArODgxLDIzIEBACiAJLyogVHJhbnNtaXQgaXFsb2NhbCBiZXN0IGNvZWZmcyAqLwogCWJvb2wgdHhfaXFsb2NfYmVzdF9jb2VmZnNfdmFsaWQ7CiAJdTggdHhfaXFsb2NfYmVzdF9jb2VmZnNbMTFdOworCisJLyogVXNlZCBmb3IgIlNhdmUvUmVzdG9yZSBEaWcgRmlsdCBTdGF0ZSIgKi8KKwl1MTYgZGlnX2ZsdF9zdGF0ZVs5XTsKKworCWJvb2wgY3JzX3Vzcl9kaXNhYmxlLCBjcnNfc3lzX2Rpc2FibGU7CisKKwl1bnNpZ25lZCBpbnQgcGRpdjsKKworCS8qIFRoZSBjaGFubmVsIHdlIGFyZSB0dW5lZCB0byAqLworCXU4IGNoYW5uZWw7CiB9OwogCitlbnVtIHRzc2lfbXV4X21vZGUgeworCVRTU0lfTVVYX1BSRVBBLAorCVRTU0lfTVVYX1BPU1RQQSwKKwlUU1NJX01VWF9FWFQsCit9OwogCiBzdHJ1Y3QgYjQzX3BoeV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBiNDNfcGh5X29wZXJhdGlvbnMgYjQzX3BoeW9wc19scDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKaW5kZXggYmU3YjU2MC4uOTkyMzE4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKQEAgLTEzNyw3ICsxMzcsOCBAQAogCiAJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9NQVNURVIxLCAweEZGRjMpOwogCW1zbGVlcCgxKTsKLQlpZiAoKHNwcm9tLT5yZXZpc2lvbiAhPSA0KSB8fCAhKHNwcm9tLT5ib2FyZGZsYWdzX2hpICYgMHgwMDAyKSkgeworCWlmICgoc3Byb20tPnJldmlzaW9uICE9IDQpIHx8CisJICAgIShzcHJvbS0+Ym9hcmRmbGFnc19oaSAmIEI0M19CRkhfUlNTSUlOVikpIHsKIAkJaWYgKChiaW5mby0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQlJPQURDT00pIHx8CiAJCSAgICAoYmluZm8tPnR5cGUgIT0gMHg0NkQpIHx8CiAJCSAgICAoYmluZm8tPnJldiA8IDB4NDEpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKaW5kZXggNjkxMzhlOC4uMzQ5OGI2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwpAQCAtMzIsOSArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKIAotc3RhdGljIHZvaWQgYjQzX3Bpb19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLQogc3RhdGljIHUxNiBnZW5lcmF0ZV9jb29raWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSwKIAkJCSAgIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwYWNrKQogewpAQCAtMTQ0LDcgKzE0MSw2IEBACiAJcSA9IGt6YWxsb2Moc2l6ZW9mKCpxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFxKQogCQlyZXR1cm4gTlVMTDsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiAJcS0+ZGV2ID0gZGV2OwogCXEtPnJldiA9IGRldi0+ZGV2LT5pZC5yZXZpc2lvbjsKIAlxLT5tbWlvX2Jhc2UgPSBpbmRleF90b19waW9xdWV1ZV9iYXNlKGRldiwgaW5kZXgpICsKQEAgLTE3OSwxMiArMTc1LDEwIEBACiAJcSA9IGt6YWxsb2Moc2l6ZW9mKCpxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFxKQogCQlyZXR1cm4gTlVMTDsKLQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiAJcS0+ZGV2ID0gZGV2OwogCXEtPnJldiA9IGRldi0+ZGV2LT5pZC5yZXZpc2lvbjsKIAlxLT5tbWlvX2Jhc2UgPSBpbmRleF90b19waW9xdWV1ZV9iYXNlKGRldiwgaW5kZXgpICsKIAkJICAgICAgIHBpb19yeHF1ZXVlX29mZnNldChkZXYpOwotCUlOSVRfV09SSygmcS0+cnhfd29yaywgYjQzX3Bpb19yeF93b3JrKTsKIAogCS8qIEVuYWJsZSBEaXJlY3QgRklGTyBSWCAoUElPKSBvbiB0aGUgZW5naW5lLiAqLwogCWI0M19kbWFfZGlyZWN0X2ZpZm9fcngoZGV2LCBpbmRleCwgMSk7CkBAIC0yNDksMTMgKzI0Myw2IEBACiAJZGVzdHJveV9xdWV1ZV90eChwaW8sIHR4X3F1ZXVlX0FDX0JLKTsKIH0KIAotdm9pZCBiNDNfcGlvX3N0b3Aoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotCWlmICghYjQzX3VzaW5nX3Bpb190cmFuc2ZlcnMoZGV2KSkKLQkJcmV0dXJuOwotCWNhbmNlbF93b3JrX3N5bmMoJmRldi0+cGlvLnJ4X3F1ZXVlLT5yeF93b3JrKTsKLX0KLQogaW50IGI0M19waW9faW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJc3RydWN0IGI0M19waW8gKnBpbyA9ICZkZXYtPnBpbzsKQEAgLTQ2MSw4ICs0NDgsOCBAQAogCiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHEsIHBhY2spOwogCWhkcmxlbiA9IGI0M190eGhkcl9zaXplKHEtPmRldik7Ci0JZXJyID0gYjQzX2dlbmVyYXRlX3R4aGRyKHEtPmRldiwgKHU4ICopJnR4aGRyLCBza2ItPmRhdGEsCi0JCQkJIHNrYi0+bGVuLCBpbmZvLCBjb29raWUpOworCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihxLT5kZXYsICh1OCAqKSZ0eGhkciwgc2tiLAorCQkJCSBpbmZvLCBjb29raWUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQ5NCw3ICs0ODEsNiBAQAogewogCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBoZHJsZW4sIHRvdGFsX2xlbjsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CkBAIC01MTIsMjAgKzQ5OCwxOCBAQAogCQlxID0gc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Ci0KIAloZHJsZW4gPSBiNDNfdHhoZHJfc2l6ZShkZXYpOwogCXRvdGFsX2xlbiA9IHJvdW5kdXAoc2tiLT5sZW4gKyBoZHJsZW4sIDQpOwogCiAJaWYgKHVubGlrZWx5KHRvdGFsX2xlbiA+IHEtPmJ1ZmZlcl9zaXplKSkgewogCQllcnIgPSAtRU5PQlVGUzsKIAkJYjQzZGJnKGRldi0+d2wsICJQSU86IFRYIHBhY2tldCBsb25nZXIgdGhhbiBxdWV1ZS5cbiIpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlpZiAodW5saWtlbHkocS0+ZnJlZV9wYWNrZXRfc2xvdHMgPT0gMCkpIHsKIAkJZXJyID0gLUVOT0JVRlM7CiAJCWI0M3dhcm4oZGV2LT53bCwgIlBJTzogVFggcGFja2V0IG92ZXJmbG93LlxuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXQ7CiAJfQogCUI0M19XQVJOX09OKHEtPmJ1ZmZlcl91c2VkID4gcS0+YnVmZmVyX3NpemUpOwogCkBAIC01MzQsNyArNTE4LDcgQEAKIAkJZXJyID0gLUVCVVNZOwogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShkZXYtPndsLT5odywgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCQlxLT5zdG9wcGVkID0gMTsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCkBAIC01NDgsMTEgKzUzMiwxMSBAQAogCQkgKiBhbnltb3JlIGFuZCBtdXN0IG5vdCB0cmFuc21pdCBpdCB1bmVuY3J5cHRlZC4gKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZXJyID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dDsKIAl9CiAJaWYgKHVubGlrZWx5KGVycikpIHsKIAkJYjQzZXJyKGRldi0+d2wsICJQSU8gdHJhbnNtaXNzaW9uIGZhaWx1cmVcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0OwogCX0KIAlxLT5ucl90eF9wYWNrZXRzKys7CiAKQEAgLTU2NCwxMyArNTQ4LDEwIEBACiAJCXEtPnN0b3BwZWQgPSAxOwogCX0KIAotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0KK291dDoKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLiAqLwogdm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cykKIHsKQEAgLTU4NCw4ICs1NjUsNiBAQAogCQlyZXR1cm47CiAJQjQzX1dBUk5fT04oIXBhY2spOwogCi0Jc3Bpbl9sb2NrKCZxLT5sb2NrKTsgLyogSVJRcyBhcmUgYWxyZWFkeSBkaXNhYmxlZC4gKi8KLQogCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHBhY2stPnNrYik7CiAKIAliNDNfZmlsbF90eHN0YXR1c19yZXBvcnQoZGV2LCBpbmZvLCBzdGF0dXMpOwpAQCAtNjAzLDggKzU4Miw2IEBACiAJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldi0+d2wtPmh3LCBxLT5xdWV1ZV9wcmlvKTsKIAkJcS0+c3RvcHBlZCA9IDA7CiAJfQotCi0Jc3Bpbl91bmxvY2soJnEtPmxvY2spOwogfQogCiB2b2lkIGI0M19waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKQEAgLTYxMiwxNyArNTg5LDE0IEBACiB7CiAJY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3F1ZXVlczsgaSsrKSB7CiAJCXEgPSBzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoZGV2LCBpKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwogCQlzdGF0c1tpXS5sZW4gPSBCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFMgLSBxLT5mcmVlX3BhY2tldF9zbG90czsKIAkJc3RhdHNbaV0ubGltaXQgPSBCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFM7CiAJCXN0YXRzW2ldLmNvdW50ID0gcS0+bnJfdHhfcGFja2V0czsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNzYwLDM3ICs3MzQsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyogUlggd29ya3F1ZXVlLiBXZSBjYW4gc2xlZXAsIHlheSEgKi8KLXN0YXRpYyB2b2lkIGI0M19waW9fcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlLAotCQkJCQkJIHJ4X3dvcmspOwotCXVuc2lnbmVkIGludCBidWRnZXQgPSA1MDsKLQlib29sIHN0b3A7Ci0KLQlkbyB7Ci0JCXNwaW5fbG9ja19pcnEoJnEtPmxvY2spOwotCQlzdG9wID0gKHBpb19yeF9mcmFtZShxKSA9PSAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZxLT5sb2NrKTsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JCWlmIChzdG9wKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1idWRnZXQpOwotfQotCi0vKiBDYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLiAqLwogdm9pZCBiNDNfcGlvX3J4KHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEpCiB7Ci0JLyogRHVlIHRvIGxhdGVuY3kgaXNzdWVzIHdlIG11c3QgcnVuIHRoZSBSWCBwYXRoIGluCi0JICogYSB3b3JrcXVldWUgdG8gYmUgYWJsZSB0byBzY2hlZHVsZSBiZXR3ZWVuIHBhY2tldHMuICovCi0JcXVldWVfd29yayhxLT5kZXYtPndsLT5ody0+d29ya3F1ZXVlLCAmcS0+cnhfd29yayk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlib29sIHN0b3A7CisKKwl3aGlsZSAoMSkgeworCQlzdG9wID0gKHBpb19yeF9mcmFtZShxKSA9PSAwKTsKKwkJaWYgKHN0b3ApCisJCQlicmVhazsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWlmIChXQVJOX09OX09OQ0UoKytjb3VudCA+IDEwMDAwKSkKKwkJCWJyZWFrOworCX0KIH0KIAogc3RhdGljIHZvaWQgYjQzX3Bpb190eF9zdXNwZW5kX3F1ZXVlKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7CiAJaWYgKHEtPnJldiA+PSA4KSB7CiAJCWI0M19waW90eF93cml0ZTMyKHEsIEI0M19QSU84X1RYQ1RMLAogCQkJCSAgYjQzX3Bpb3R4X3JlYWQzMihxLCBCNDNfUElPOF9UWENUTCkKQEAgLTgwMCwxNCArNzYwLDEwIEBACiAJCQkJICBiNDNfcGlvdHhfcmVhZDE2KHEsIEI0M19QSU9fVFhDVEwpCiAJCQkJICB8IEI0M19QSU9fVFhDVExfU1VTUFJFUSk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3Bpb190eF9yZXN1bWVfcXVldWUoc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIAlpZiAocS0+cmV2ID49IDgpIHsKIAkJYjQzX3Bpb3R4X3dyaXRlMzIocSwgQjQzX1BJTzhfVFhDVEwsCiAJCQkJICBiNDNfcGlvdHhfcmVhZDMyKHEsIEI0M19QSU84X1RYQ1RMKQpAQCAtODE3LDcgKzc3Myw2IEBACiAJCQkJICBiNDNfcGlvdHhfcmVhZDE2KHEsIEI0M19QSU9fVFhDVEwpCiAJCQkJICAmIH5CNDNfUElPX1RYQ1RMX1NVU1BSRVEpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQgYjQzX3Bpb190eF9zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaAppbmRleCA2YzE3NGM5Li43ZGQ2NDljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaApAQCAtNzAsNyArNzAsNiBAQAogCiBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCXUxNiBtbWlvX2Jhc2U7CiAKIAkvKiBUaGUgZGV2aWNlIHF1ZXVlIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAqLwpAQCAtMTAzLDEyICsxMDIsOCBAQAogCiBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlIHsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0Jc3BpbmxvY2tfdCBsb2NrOwogCXUxNiBtbWlvX2Jhc2U7CiAKLQkvKiBXb3JrIHRvIHJlZHVjZSBsYXRlbmN5IGlzc3VlcyBvbiBSWC4gKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcnhfd29yazsKLQogCS8qIFNob3J0Y3V0IHRvIHRoZSA4MDIuMTEgY29yZSByZXZpc2lvbi4gVGhpcyBpcyB0bwogCSAqIGF2b2lkIGhvcnJpYmxlIHBvaW50ZXIgZGVyZWZlcmVuY2luZyBpbiB0aGUgZmFzdHBhdGhzLiAqLwogCXU4IHJldjsKQEAgLTE2Miw3ICsxNTcsNiBAQAogCiAKIGludCBiNDNfcGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKLXZvaWQgYjQzX3Bpb19zdG9wKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19waW9fZnJlZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCiBpbnQgYjQzX3Bpb190eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYwppbmRleCA1YWRhYTM2Li5mMWFlNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvc3lzZnMuYwpAQCAtOTQsNyArOTQsNiBAQAogCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGI0M193bGRldiAqd2xkZXYgPSBkZXZfdG9fYjQzX3dsZGV2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCWludCBtb2RlOwogCkBAIC0xMjAsNyArMTE5LDYgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZ3bGRldi0+d2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2xkZXYtPndsLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHdsZGV2LT5waHkub3BzLT5pbnRlcmZfbWl0aWdhdGlvbikgewogCQllcnIgPSB3bGRldi0+cGh5Lm9wcy0+aW50ZXJmX21pdGlnYXRpb24od2xkZXYsIG1vZGUpOwpAQCAtMTMyLDcgKzEzMCw2IEBACiAJCWVyciA9IC1FTk9TWVM7CiAKIAltbWlvd2IoKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bGRldi0+d2wtPmlycV9sb2NrLCBmbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZ3bGRldi0+d2wtPm11dGV4KTsKIAogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYwppbmRleCA0ZWE3MzRkLi42MTAyN2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5jCkBAIC0xLDkgKzEsMTAgQEAKIC8qCiAKICAgQnJvYWRjb20gQjQzIHdpcmVsZXNzIGRyaXZlcgotICBJRUVFIDgwMi4xMWcgTFAtUEhZIGFuZCByYWRpbyBkZXZpY2UgZGF0YSB0YWJsZXMKKyAgSUVFRSA4MDIuMTFhL2cgTFAtUEhZIGFuZCByYWRpbyBkZXZpY2UgZGF0YSB0YWJsZXMKIAogICBDb3B5cmlnaHQgKGMpIDIwMDkgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KKyAgQ29weXJpZ2h0IChjKSAyMDA5IEfDoWJvciBTdGVmYW5payA8bmV0cm9sbGxlci4zZEBnbWFpbC5jb20+CiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI4LDIyICsyOSwyMiBAQAogI2luY2x1ZGUgInBoeV9scC5oIgogCiAKLS8qIEVudHJ5IG9mIHRoZSAyMDYyIHJhZGlvIGluaXQgdGFibGUgKi8KLXN0cnVjdCBiMjA2Ml9pbml0X3RhYl9lbnRyeSB7CisvKiBFbnRyeSBvZiB0aGUgMjA2Mi8yMDYzIHJhZGlvIGluaXQgdGFibGUgKi8KK3N0cnVjdCBiMjA2eF9pbml0X3RhYl9lbnRyeSB7CiAJdTE2IG9mZnNldDsKIAl1MTYgdmFsdWVfYTsKIAl1MTYgdmFsdWVfZzsKIAl1OCBmbGFnczsKIH07Ci0jZGVmaW5lIEIyMDYyX0ZMQUdfQQkweDAxIC8qIEZsYWc6IEluaXQgaW4gQSBtb2RlICovCi0jZGVmaW5lIEIyMDYyX0ZMQUdfRwkweDAyIC8qIEZsYWc6IEluaXQgaW4gRyBtb2RlICovCisjZGVmaW5lIEIyMDZYX0ZMQUdfQQkweDAxIC8qIEZsYWc6IEluaXQgaW4gQSBtb2RlICovCisjZGVmaW5lIEIyMDZYX0ZMQUdfRwkweDAyIC8qIEZsYWc6IEluaXQgaW4gRyBtb2RlICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNjJfaW5pdF90YWJfZW50cnkgYjIwNjJfaW5pdF90YWJbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjIwNnhfaW5pdF90YWJfZW50cnkgYjIwNjJfaW5pdF90YWJbXSA9IHsKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gMHgwMDAxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU00LCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU00LCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU01LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTcsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTU2LDQyICs1Nyw0MiBAQAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BETl9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMiwgLnZhbHVlX2EgPSAweDAwMTgsIC52YWx1ZV9nID0gMHgwMDE4LCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fR0VOX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0lRX0NBTElCLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EsIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9MUEYsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0JJQVMwLCAudmFsdWVfYSA9IDB4MDA0MSwgLnZhbHVlX2cgPSAweDAwNDEsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR05FQV9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUyLCAudmFsdWVfYSA9IDB4MDBERCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwQjUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTIsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTMsIC52YWx1ZV9hID0gMHgwMDc3LCAudmFsdWVfZyA9IDB4MDBCNSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw0LCAudmFsdWVfYSA9IDB4MDAxRiwgLnZhbHVlX2cgPSAweDAwMUYsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw1LCAudmFsdWVfYSA9IDB4MDAzMiwgLnZhbHVlX2cgPSAweDAwMzIsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw2LCAudmFsdWVfYSA9IDB4MDAzMiwgLnZhbHVlX2cgPSAweDAwMzIsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9DVEw3LCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDcsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDAsIC52YWx1ZV9hID0gMHgwMDA5LCAudmFsdWVfZyA9IDB4MDAwOSwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwyLCAudmFsdWVfYSA9IDB4MDAxOCwgLnZhbHVlX2cgPSAweDAwMTgsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMMywgLnZhbHVlX2EgPSAweDAwMjcsIC52YWx1ZV9nID0gMHgwMDI3LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDQsIC52YWx1ZV9hID0gMHgwMDI4LCAudmFsdWVfZyA9IDB4MDAyOCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEw1LCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDcsIC52YWx1ZV9hID0gMHgwMDA4LCAudmFsdWVfZyA9IDB4MDAwOCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ1RMMCwgLnZhbHVlX2EgPSAweDAwODIsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NUTDAsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjEsIC52YWx1ZV9hID0gMHgwMDA0LCAudmFsdWVfZyA9IDB4MDAwNCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4xLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMCwgLnZhbHVlX2EgPSAweDAwNDMsIC52YWx1ZV9nID0gMHgwMDQzLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLwpAQCAtMTEyLDggKzExMyw4IEBACiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEwyLCAudmFsdWVfYSA9IDB4MDA4NCwgLnZhbHVlX2cgPSAweDAwODQsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw0LCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDUsIC52YWx1ZV9hID0gMHgwMDAyLCAudmFsdWVfZyA9IDB4MDAwMiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMiwgLnZhbHVlX2cgPSAweDAwMDIsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDcsIC52YWx1ZV9hID0gMHgwMDU4LCAudmFsdWVfZyA9IDB4MDA1OCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDgsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MiwgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTEyMSw3ICsxMjIsNyBAQAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMX0EsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0dDMkcsIC52YWx1ZV9hID0gMHgwMEZGLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0dDNUcsIC52YWx1ZV9hID0gMHgwMEZGLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1RVTkUsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDAxQiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfVFVORSwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDFCLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9QQUQsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BHQSwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfUEFEQVVYLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCkBAIC0xNTAsNyArMTUxLDcgQEAKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JBRElPX0lEX0NPREUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU02LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwpAQCAtMTYyLDI0ICsxNjMsMjQgQEAKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwwLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwwLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMiwgLnZhbHVlX2EgPSAweDAwOEUsIC52YWx1ZV9nID0gMHgwMDhFLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUERTX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0JHX0NUTDAsIC52YWx1ZV9hID0gMHgwMDA2LCAudmFsdWVfZyA9IDB4MDAwNiwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0JHX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0JHX0NUTDIsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDAsIC52YWx1ZV9hID0gMHgwMEY4LCAudmFsdWVfZyA9IDB4MDBEOCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMSwgLnZhbHVlX2EgPSAweDAwM0MsIC52YWx1ZV9nID0gMHgwMDI0LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwwLCAudmFsdWVfYSA9IDB4MDBGOCwgLnZhbHVlX2cgPSAweDAwRDgsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEsIC52YWx1ZV9hID0gMHgwMDNDLCAudmFsdWVfZyA9IDB4MDAyNCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMywgLnZhbHVlX2EgPSAweDAwNDEsIC52YWx1ZV9nID0gMHgwMDQxLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMOCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEw4LCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDksIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEwLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEwLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDEsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTE5OCw0MSArMTk5LDQxIEBACiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTQsIC52YWx1ZV9hID0gMHgwMDc1LCAudmFsdWVfZyA9IDB4MDA3NSwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxNSwgLnZhbHVlX2EgPSAweDAwQjQsIC52YWx1ZV9nID0gMHgwMEI0LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDE2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwwLCAudmFsdWVfYSA9IDB4MDA5OCwgLnZhbHVlX2cgPSAweDAwOTgsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDEsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwOTgsIC52YWx1ZV9nID0gMHgwMDk4LCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDUsIC52YWx1ZV9hID0gMHgwMDQzLCAudmFsdWVfZyA9IDB4MDA0MywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNiwgLnZhbHVlX2EgPSAweDAwNDcsIC52YWx1ZV9nID0gMHgwMDQ3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDAwQywgLnZhbHVlX2cgPSAweDAwMEMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDgsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMEUsIC52YWx1ZV9nID0gMHgwMDBFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMiwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMEEsIC52YWx1ZV9nID0gMHgwMDBBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw1LCAudmFsdWVfYSA9IDB4MDA0MywgLnZhbHVlX2cgPSAweDAwNDMsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDYsIC52YWx1ZV9hID0gMHgwMDQ3LCAudmFsdWVfZyA9IDB4MDA0NywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNywgLnZhbHVlX2EgPSAweDAwMEMsIC52YWx1ZV9nID0gMHgwMDBDLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw4LCAudmFsdWVfYSA9IDB4MDAxMSwgLnZhbHVlX2cgPSAweDAwMTEsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDksIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTAsIC52YWx1ZV9hID0gMHgwMDBFLCAudmFsdWVfZyA9IDB4MDAwRSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTEsIC52YWx1ZV9hID0gMHgwMDA4LCAudmFsdWVfZyA9IDB4MDAwOCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTIsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTMsIC52YWx1ZV9hID0gMHgwMDBBLCAudmFsdWVfZyA9IDB4MDAwQSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTQsIC52YWx1ZV9hID0gMHgwMDA2LCAudmFsdWVfZyA9IDB4MDAwNiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDE2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTgsIC52YWx1ZV9hID0gMHgwMDNFLCAudmFsdWVfZyA9IDB4MDAzRSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTksIC52YWx1ZV9hID0gMHgwMDEzLCAudmFsdWVfZyA9IDB4MDAxMywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTgsIC52YWx1ZV9hID0gMHgwMDNFLCAudmFsdWVfZyA9IDB4MDAzRSwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTksIC52YWx1ZV9hID0gMHgwMDEzLCAudmFsdWVfZyA9IDB4MDAxMywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIxLCAudmFsdWVfYSA9IDB4MDA2MiwgLnZhbHVlX2cgPSAweDAwNjIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIyLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIzLCAudmFsdWVfYSA9IDB4MDAxNiwgLnZhbHVlX2cgPSAweDAwMTYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI0LCAudmFsdWVfYSA9IDB4MDA1QywgLnZhbHVlX2cgPSAweDAwNUMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKLQl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI1LCAudmFsdWVfYSA9IDB4MDA5NSwgLnZhbHVlX2cgPSAweDAwOTUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIxLCAudmFsdWVfYSA9IDB4MDA2MiwgLnZhbHVlX2cgPSAweDAwNjIsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIyLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIzLCAudmFsdWVfYSA9IDB4MDAxNiwgLnZhbHVlX2cgPSAweDAwMTYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI0LCAudmFsdWVfYSA9IDB4MDA1QywgLnZhbHVlX2cgPSAweDAwNUMsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI1LCAudmFsdWVfYSA9IDB4MDA5NSwgLnZhbHVlX2cgPSAweDAwOTUsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMSwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMSwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzMsIC52YWx1ZV9hID0gMHgwMENDLCAudmFsdWVfZyA9IDB4MDBDQywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAotCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzQsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzMsIC52YWx1ZV9hID0gMHgwMENDLCAudmFsdWVfZyA9IDB4MDBDQywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMzQsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDAsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwpAQCAtMjQxLDcgKzI0Miw3IEBACiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UNSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDYsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KIAkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ3LCAudmFsdWVfYSA9IDB4MDAwNSwgLnZhbHVlX2cgPSAweDAwMDUsIC5mbGFncyA9IDAsIH0sICovCi0JeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UOCwgLnZhbHVlX2EgPSAweDAwMEYsIC52YWx1ZV9nID0gMHgwMDBGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UOCwgLnZhbHVlX2EgPSAweDAwMEYsIC52YWx1ZV9nID0gMHgwMDBGLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EsIH0sCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UOSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLwogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEwLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCiAJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTEsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KQEAgLTI1MywxOSArMjU0LDMzNyBAQAogCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDE3LCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDZ4X2luaXRfdGFiX2VudHJ5IGIyMDYzX2luaXRfdGFiW10gPSB7CisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19DT01NNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU01LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU04LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMTAsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19BLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0NPTU0xNSwgLnZhbHVlX2EgPSAweDAwMGYsIC52YWx1ZV9nID0gMHgwMDBmLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0NPTU0xNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTE3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMTgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0NPTU0xOSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTIwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMjEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0NPTU0yMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQ09NTTIzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19DT01NMjQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BXUl9TV0lUQ0hfQ1RMLCAudmFsdWVfYSA9IDB4MDA3ZiwgLnZhbHVlX2cgPSAweDAwN2YsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX1NQMSwgLnZhbHVlX2EgPSAweDAwM2YsIC52YWx1ZV9nID0gMHgwMDNmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9TUDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9TUDEsIC52YWx1ZV9hID0gMHgwMGU4LCAudmFsdWVfZyA9IDB4MDBkNCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX1NQMiwgLnZhbHVlX2EgPSAweDAwYTcsIC52YWx1ZV9nID0gMHgwMDUzLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1AzLCAudmFsdWVfYSA9IDB4MDBmZiwgLnZhbHVlX2cgPSAweDAwZmYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1A0LCAudmFsdWVfYSA9IDB4MDBmMCwgLnZhbHVlX2cgPSAweDAwMGYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9TUDUsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQMSwgLnZhbHVlX2EgPSAweDAwMWYsIC52YWx1ZV9nID0gMHgwMDVlLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDIsIC52YWx1ZV9hID0gMHgwMDdmLCAudmFsdWVfZyA9IDB4MDA3ZSwgLmZsYWdzID0gQjIwNlhfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0dfUlhfU1AzLCAudmFsdWVfYSA9IDB4MDAzMCwgLnZhbHVlX2cgPSAweDAwZjAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQNCwgLnZhbHVlX2EgPSAweDAwMzUsIC52YWx1ZV9nID0gMHgwMDM1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfU1A1LCAudmFsdWVfYSA9IDB4MDAzZiwgLnZhbHVlX2cgPSAweDAwM2YsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQNywgLnZhbHVlX2EgPSAweDAwN2YsIC52YWx1ZV9nID0gMHgwMDdmLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1NQOSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0dfUlhfU1AxMCwgLnZhbHVlX2EgPSAweDAwMGMsIC52YWx1ZV9nID0gMHgwMDBjLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUDExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9TUDEsIC52YWx1ZV9hID0gMHgwMDNjLCAudmFsdWVfZyA9IDB4MDAzZiwgLmZsYWdzID0gQjIwNlhfRkxBR19BLCB9LAorCXsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1AyLCAudmFsdWVfYSA9IDB4MDBmYywgLnZhbHVlX2cgPSAweDAwZmUsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1NQMywgLnZhbHVlX2EgPSAweDAwZmYsIC52YWx1ZV9nID0gMHgwMGZmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1A0LCAudmFsdWVfYSA9IDB4MDBmZiwgLnZhbHVlX2cgPSAweDAwZmYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9TUDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1NQNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1A3LCAudmFsdWVfYSA9IDB4MDAwOCwgLnZhbHVlX2cgPSAweDAwMDgsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDEsIC52YWx1ZV9hID0gMHgwMDBmLCAudmFsdWVfZyA9IDB4MDAwZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDIsIC52YWx1ZV9hID0gMHgwMDIyLCAudmFsdWVfZyA9IDB4MDAyMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDMsIC52YWx1ZV9hID0gMHgwMGE4LCAudmFsdWVfZyA9IDB4MDBhOCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9TUDQsIC52YWx1ZV9hID0gMHgwMDYwLCAudmFsdWVfZyA9IDB4MDA2MCwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQNSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX1NQOCwgLnZhbHVlX2EgPSAweDAwMzAsIC52YWx1ZV9nID0gMHgwMDMwLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AxLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AyLCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AzLCAudmFsdWVfYSA9IDB4MDAwYywgLnZhbHVlX2cgPSAweDAwMGIsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDQsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAwZiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQNSwgLnZhbHVlX2EgPSAweDAwMGYsIC52YWx1ZV9nID0gMHgwMDBmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQNiwgLnZhbHVlX2EgPSAweDAwODAsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQNywgLnZhbHVlX2EgPSAweDAwNjgsIC52YWx1ZV9nID0gMHgwMDY4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQOCwgLnZhbHVlX2EgPSAweDAwNjgsIC52YWx1ZV9nID0gMHgwMDY4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQOSwgLnZhbHVlX2EgPSAweDAwODAsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQMTAsIC52YWx1ZV9hID0gMHgwMGZmLCAudmFsdWVfZyA9IDB4MDBmZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDExLCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AxMiwgLnZhbHVlX2EgPSAweDAwMzgsIC52YWx1ZV9nID0gMHgwMDM4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQMTMsIC52YWx1ZV9hID0gMHgwMGZmLCAudmFsdWVfZyA9IDB4MDBmZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDE0LCAudmFsdWVfYSA9IDB4MDAzOCwgLnZhbHVlX2cgPSAweDAwMzgsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfU1AxNSwgLnZhbHVlX2EgPSAweDAwYzAsIC52YWx1ZV9nID0gMHgwMGMwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX1NQMTYsIC52YWx1ZV9hID0gMHgwMGZmLCAudmFsdWVfZyA9IDB4MDBmZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9TUDE3LCAudmFsdWVfYSA9IDB4MDBmZiwgLnZhbHVlX2cgPSAweDAwZmYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfUEFfU1AxLCAudmFsdWVfYSA9IDB4MDAzZCwgLnZhbHVlX2cgPSAweDAwZmQsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDIsIC52YWx1ZV9hID0gMHgwMDBjLCAudmFsdWVfZyA9IDB4MDAwYywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDMsIC52YWx1ZV9hID0gMHgwMDk2LCAudmFsdWVfZyA9IDB4MDA5NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDQsIC52YWx1ZV9hID0gMHgwMDVhLCAudmFsdWVfZyA9IDB4MDA1YSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDUsIC52YWx1ZV9hID0gMHgwMDdmLCAudmFsdWVfZyA9IDB4MDA3ZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDYsIC52YWx1ZV9hID0gMHgwMDdmLCAudmFsdWVfZyA9IDB4MDA3ZiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9TUDcsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19UWF9CQl9TUDEsIC52YWx1ZV9hID0gMHgwMDAyLCAudmFsdWVfZyA9IDB4MDAwMiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX0JCX1NQMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX0JCX1NQMywgLnZhbHVlX2EgPSAweDAwMzAsIC52YWx1ZV9nID0gMHgwMDMwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JFR19TUDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2M19CQU5ER0FQX0NUTDEsIC52YWx1ZV9hID0gMHgwMDU2LCAudmFsdWVfZyA9IDB4MDA1NiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0JBTkRHQVBfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xQT19DVEwxLCAudmFsdWVfYSA9IDB4MDAwZSwgLnZhbHVlX2cgPSAweDAwMGUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwN2UsIC52YWx1ZV9nID0gMHgwMDdlLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JDX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAxNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SQ19DQUxJQl9DVEwzLCAudmFsdWVfYSA9IDB4MDAwZiwgLnZhbHVlX2cgPSAweDAwMGYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JDX0NBTElCX0NUTDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SQ19DQUxJQl9DVEw2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JDX0NBTElCX0NUTDgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SQ19DQUxJQl9DVEw5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUkNfQ0FMSUJfQ1RMMTAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19DQUxOUlNULCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfSU5fUExMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX0lOX1BMTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfQ1AxLCAudmFsdWVfYSA9IDB4MDBjZiwgLnZhbHVlX2cgPSAweDAwY2YsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX0NQMiwgLnZhbHVlX2EgPSAweDAwNTksIC52YWx1ZV9nID0gMHgwMDU5LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9DUDMsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfQ1A0LCAudmFsdWVfYSA9IDB4MDA0MiwgLnZhbHVlX2cgPSAweDAwNDIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfTEYxLCAudmFsdWVfYSA9IDB4MDBkYiwgLnZhbHVlX2cgPSAweDAwZGIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX0xGMiwgLnZhbHVlX2EgPSAweDAwOTQsIC52YWx1ZV9nID0gMHgwMDk0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9MRjMsIC52YWx1ZV9hID0gMHgwMDI4LCAudmFsdWVfZyA9IDB4MDAyOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfTEY0LCAudmFsdWVfYSA9IDB4MDA2MywgLnZhbHVlX2cgPSAweDAwNjMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1NHMSwgLnZhbHVlX2EgPSAweDAwMDcsIC52YWx1ZV9nID0gMHgwMDA3LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9TRzIsIC52YWx1ZV9hID0gMHgwMGQzLCAudmFsdWVfZyA9IDB4MDBkMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfU0czLCAudmFsdWVfYSA9IDB4MDBiMSwgLnZhbHVlX2cgPSAweDAwYjEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1NHNCwgLnZhbHVlX2EgPSAweDAwM2IsIC52YWx1ZV9nID0gMHgwMDNiLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9TRzUsIC52YWx1ZV9hID0gMHgwMDA2LCAudmFsdWVfZyA9IDB4MDAwNiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPMSwgLnZhbHVlX2EgPSAweDAwNTgsIC52YWx1ZV9nID0gMHgwMDU4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ08yLCAudmFsdWVfYSA9IDB4MDBmNywgLnZhbHVlX2cgPSAweDAwZjcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUIyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1ZDT19DQUxJQjMsIC52YWx1ZV9hID0gMHgwMDAyLCAudmFsdWVfZyA9IDB4MDAwMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI1LCAudmFsdWVfYSA9IDB4MDAwOSwgLnZhbHVlX2cgPSAweDAwMDksIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1ZDT19DQUxJQjYsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCNywgLnZhbHVlX2EgPSAweDAwMTYsIC52YWx1ZV9nID0gMHgwMDE2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9WQ09fQ0FMSUI4LCAudmFsdWVfYSA9IDB4MDA2YiwgLnZhbHVlX2cgPSAweDAwNmIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUExMX0pUQUdfUExMX1ZDT19DQUxJQjksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfVkNPX0NBTElCMTAsIC52YWx1ZV9hID0gMHgwMGIzLCAudmFsdWVfZyA9IDB4MDBiMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QTExfSlRBR19QTExfWFRBTF8xMiwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BMTF9KVEFHX1BMTF9YVEFMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0FDTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9BQ0wyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQUNMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0FDTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9BQ0w1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfSU5QVVRTLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfV0FJVENOVCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX09WUjEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9PVlIyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfT1ZBTDEsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9PVkFMMiwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX09WQUwzLCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfT1ZBTDQsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9PVkFMNSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX09WQUw2LCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfT1ZBTDcsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DQUxWTEQxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ0FMVkxEMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NWQUwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ1ZBTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DVkFMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NWQUw0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9fQ0FMSUJfQ1ZBTDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT19DQUxJQl9DVkFMNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPX0NBTElCX0NWQUw3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQ0FMSUJfRU4sIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9QRUFLREVUMSwgLnZhbHVlX2EgPSAweDAwZmYsIC52YWx1ZV9nID0gMHgwMGZmLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX1JDQ1IxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fVkNPQlVGMSwgLnZhbHVlX2EgPSAweDAwNjAsIC52YWx1ZV9nID0gMHgwMDYwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX01JWEVSMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX01JWEVSMiwgLnZhbHVlX2EgPSAweDAwMGMsIC52YWx1ZV9nID0gMHgwMDBjLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0JVRjEsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9CVUYyLCAudmFsdWVfYSA9IDB4MDAwYywgLnZhbHVlX2cgPSAweDAwMGMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fRElWMSwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0RJVjIsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9ESVYzLCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQ0JVRlJYMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0NCVUZSWDIsIC52YWx1ZV9hID0gMHgwMDY2LCAudmFsdWVfZyA9IDB4MDA2NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19MT0dFTl9DQlVGVFgxLCAudmFsdWVfYSA9IDB4MDA2NiwgLnZhbHVlX2cgPSAweDAwNjYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fQ0JVRlRYMiwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0xPR0VOX0lEQUMxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1BBUkUxLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1BBUkUyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfTE9HRU5fU1BBUkUzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8xU1QxLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8xU1QyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8xU1QzLCAudmFsdWVfYSA9IDB4MDAwNSwgLnZhbHVlX2cgPSAweDAwMDUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQxLCAudmFsdWVfYSA9IDB4MDAzMCwgLnZhbHVlX2cgPSAweDAwMzAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQyLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQzLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ1LCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ3LCAudmFsdWVfYSA9IDB4MDAzNSwgLnZhbHVlX2cgPSAweDAwMzUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF8yTkQ4LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9QUzEsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1BTMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfUFMzLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9QUzQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1BTNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfTUlYMSwgLnZhbHVlX2EgPSAweDAwNDQsIC52YWx1ZV9nID0gMHgwMDQ0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0dfUlhfTUlYMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0dfUlhfTUlYMywgLnZhbHVlX2EgPSAweDAwNzEsIC52YWx1ZV9nID0gMHgwMDcxLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9NSVg0LCAudmFsdWVfYSA9IDB4MDA3MSwgLnZhbHVlX2cgPSAweDAwNzEsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDUsIC52YWx1ZV9hID0gMHgwMDAzLCAudmFsdWVfZyA9IDB4MDAwMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDYsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDcsIC52YWx1ZV9hID0gMHgwMDQ0LCAudmFsdWVfZyA9IDB4MDA0NCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX01JWDgsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19HX1JYX1BERVQxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUEFSRVMxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUEFSRVMyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR19SWF9TUEFSRVMzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF8xU1QxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF8xU1QyLCAudmFsdWVfYSA9IDB4MDBmMCwgLnZhbHVlX2cgPSAweDAwMzAsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzFTVDMsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzFTVDQsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzFTVDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDEsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDQsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYXzJORDcsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1BTMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfUFMyLCAudmFsdWVfYSA9IDB4MDAzMywgLnZhbHVlX2cgPSAweDAwMzMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9QUzMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1BTNCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfUFM1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9QUzYsIC52YWx1ZV9hID0gMHgwMDc3LCAudmFsdWVfZyA9IDB4MDA3NywgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYMSwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYMywgLnZhbHVlX2EgPSAweDAwNDQsIC52YWx1ZV9nID0gMHgwMDQ0LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9NSVg1LCAudmFsdWVfYSA9IDB4MDAwZiwgLnZhbHVlX2cgPSAweDAwMGYsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2M19BX1JYX01JWDYsIC52YWx1ZV9hID0gMHgwMDBmLCAudmFsdWVfZyA9IDB4MDAwZiwgLmZsYWdzID0gQjIwNlhfRkxBR19BIHwgQjIwNlhfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYNywgLnZhbHVlX2EgPSAweDAwNDQsIC52YWx1ZV9nID0gMHgwMDQ0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfTUlYOCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfUFdSREVUMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0FfUlhfU1BBUkUxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfQV9SWF9TUEFSRTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BX1JYX1NQQVJFMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1JYX1RJQV9DVEwxLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwNzcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9USUFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwNTgsIC52YWx1ZV9nID0gMHgwMDU4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1JYX1RJQV9DVEwzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwNzcsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9USUFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwNTgsIC52YWx1ZV9nID0gMHgwMDU4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX1RJQV9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfVElBX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9DVEwxLCAudmFsdWVfYSA9IDB4MDA3NCwgLnZhbHVlX2cgPSAweDAwNzQsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDQsIC52YWx1ZV9nID0gMHgwMDA0LCAuZmxhZ3MgPSBCMjA2WF9GTEFHX0EgfCBCMjA2WF9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMMywgLnZhbHVlX2EgPSAweDAwYTIsIC52YWx1ZV9nID0gMHgwMGEyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX0NUTDQsIC52YWx1ZV9hID0gMHgwMGFhLCAudmFsdWVfZyA9IDB4MDBhYSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9DVEw1LCAudmFsdWVfYSA9IDB4MDAyNCwgLnZhbHVlX2cgPSAweDAwMjQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMNiwgLnZhbHVlX2EgPSAweDAwYTksIC52YWx1ZV9nID0gMHgwMGE5LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1JYX0JCX0NUTDcsIC52YWx1ZV9hID0gMHgwMDI4LCAudmFsdWVfZyA9IDB4MDAyOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19SWF9CQl9DVEw4LCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUlhfQkJfQ1RMOSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDEsIC52YWx1ZV9hID0gMHgwMDgwLCAudmFsdWVfZyA9IDB4MDA4MCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX1JGX0ksIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX1JGX1EsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX0JCX0ksIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9JREFDX0xPX0JCX1EsIC52YWx1ZV9hID0gMHgwMDg4LCAudmFsdWVfZyA9IDB4MDA4OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEwyLCAudmFsdWVfYSA9IDB4MDA4MCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMMywgLnZhbHVlX2EgPSAweDAwMzgsIC52YWx1ZV9nID0gMHgwMDM4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDQsIC52YWx1ZV9hID0gMHgwMGI4LCAudmFsdWVfZyA9IDB4MDBiOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEw1LCAudmFsdWVfYSA9IDB4MDA4MCwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMzgsIC52YWx1ZV9nID0gMHgwMDM4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDcsIC52YWx1ZV9hID0gMHgwMDc4LCAudmFsdWVfZyA9IDB4MDA3OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEw4LCAudmFsdWVfYSA9IDB4MDBjMCwgLnZhbHVlX2cgPSAweDAwYzAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX1JGX0NUTDEwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUkZfQ1RMMTQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9SRl9DVEwxNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwNCwgLmZsYWdzID0gQjIwNlhfRkxBR19BLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDIsIC52YWx1ZV9hID0gMHgwMDBjLCAudmFsdWVfZyA9IDB4MDAwYywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDUsIC52YWx1ZV9hID0gMHgwMDk2LCAudmFsdWVfZyA9IDB4MDA5NiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEw2LCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwNzcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMNywgLnZhbHVlX2EgPSAweDAwNWEsIC52YWx1ZV9nID0gMHgwMDVhLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEw5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMMTAsIC52YWx1ZV9hID0gMHgwMDIxLCAudmFsdWVfZyA9IDB4MDAyMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19QQV9DVEwxMSwgLnZhbHVlX2EgPSAweDAwNzAsIC52YWx1ZV9nID0gMHgwMDcwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1BBX0NUTDEyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfUEFfQ1RMMTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9CQl9DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfQkJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwYjMsIC52YWx1ZV9nID0gMHgwMGIzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RYX0JCX0NUTDMsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19UWF9CQl9DVEw0LCAudmFsdWVfYSA9IDB4MDAwYiwgLnZhbHVlX2cgPSAweDAwMGIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfR1BJT19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjNfVlJFR19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMywgLnZhbHVlX2cgPSAweDAwMDMsIC5mbGFncyA9IEIyMDZYX0ZMQUdfQSB8IEIyMDZYX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BTVVYX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19JUV9DQUxJQl9HVkFSLCAudmFsdWVfYSA9IDB4MDBiMywgLnZhbHVlX2cgPSAweDAwYjMsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfSVFfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0lRX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDMwLCAudmFsdWVfZyA9IDB4MDAzMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19URU1QU0VOU0VfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNDYsIC52YWx1ZV9nID0gMHgwMDQ2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX1RFTVBTRU5TRV9DVEwyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUlhfTE9PUEJBQ0sxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfVFhfUlhfTE9PUEJBQ0syLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjNfRVhUX1RTU0lfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMjEsIC52YWx1ZV9nID0gMHgwMDIxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYzX0VYVF9UU1NJX0NUTDIsIC52YWx1ZV9hID0gMHgwMDIzLCAudmFsdWVfZyA9IDB4MDAyMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2M19BRkVfQ1RMICwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworfTsKKwogdm9pZCBiMjA2Ml91cGxvYWRfaW5pdF90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5ICplOworCWNvbnN0IHN0cnVjdCBiMjA2eF9pbml0X3RhYl9lbnRyeSAqZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGIyMDYyX2luaXRfdGFiKTsgaSsrKSB7CiAJCWUgPSAmYjIwNjJfaW5pdF90YWJbaV07CiAJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJCWlmICghKGUtPmZsYWdzICYgQjIwNjJfRkxBR19HKSkKKwkJCWlmICghKGUtPmZsYWdzICYgQjIwNlhfRkxBR19HKSkKIAkJCQljb250aW51ZTsKIAkJCWI0M19yYWRpb193cml0ZShkZXYsIGUtPm9mZnNldCwgZS0+dmFsdWVfZyk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoIShlLT5mbGFncyAmIEIyMDYyX0ZMQUdfQSkpCisJCQlpZiAoIShlLT5mbGFncyAmIEIyMDZYX0ZMQUdfQSkpCisJCQkJY29udGludWU7CisJCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBlLT5vZmZzZXQsIGUtPnZhbHVlX2EpOworCQl9CisJfQorfQorCit2b2lkIGIyMDYzX3VwbG9hZF9pbml0X3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgYjIwNnhfaW5pdF90YWJfZW50cnkgKmU7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiMjA2M19pbml0X3RhYik7IGkrKykgeworCQllID0gJmIyMDYzX2luaXRfdGFiW2ldOworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCQlpZiAoIShlLT5mbGFncyAmIEIyMDZYX0ZMQUdfRykpCisJCQkJY29udGludWU7CisJCQliNDNfcmFkaW9fd3JpdGUoZGV2LCBlLT5vZmZzZXQsIGUtPnZhbHVlX2cpOworCQl9IGVsc2UgeworCQkJaWYgKCEoZS0+ZmxhZ3MgJiBCMjA2WF9GTEFHX0EpKQogCQkJCWNvbnRpbnVlOwogCQkJYjQzX3JhZGlvX3dyaXRlKGRldiwgZS0+b2Zmc2V0LCBlLT52YWx1ZV9hKTsKIAkJfQpAQCAtMzA2LDMwICs2MjUsMzUgQEAKIHZvaWQgYjQzX2xwdGFiX3JlYWRfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCiAJCQkgdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCB2b2lkICpfZGF0YSkKIHsKLQl1MzIgdHlwZSwgdmFsdWU7CisJdTMyIHR5cGU7CiAJdTggKmRhdGEgPSBfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXR5cGUgPSBvZmZzZXQgJiBCNDNfTFBUQUJfVFlQRU1BU0s7CisJb2Zmc2V0ICY9IH5CNDNfTFBUQUJfVFlQRU1BU0s7CisJQjQzX1dBUk5fT04ob2Zmc2V0ID4gMHhGRkZGKTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwogCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7Ci0JCXZhbHVlID0gYjQzX2xwdGFiX3JlYWQoZGV2LCBvZmZzZXQpOwogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBCNDNfTFBUQUJfOEJJVDoKLQkJCSpkYXRhID0gdmFsdWU7CisJCQkqZGF0YSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTykgJiAweEZGOwogCQkJZGF0YSsrOwogCQkJYnJlYWs7CiAJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgotCQkJKigodTE2ICopZGF0YSkgPSB2YWx1ZTsKKwkJCSooKHUxNiAqKWRhdGEpID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPKTsKIAkJCWRhdGEgKz0gMjsKIAkJCWJyZWFrOwogCQljYXNlIEI0M19MUFRBQl8zMkJJVDoKLQkJCSooKHUzMiAqKWRhdGEpID0gdmFsdWU7CisJCQkqKCh1MzIgKilkYXRhKSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSk7CisJCQkqKCh1MzIgKilkYXRhKSA8PD0gMTY7CisJCQkqKCh1MzIgKilkYXRhKSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8pOwogCQkJZGF0YSArPSA0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlCNDNfV0FSTl9PTigxKTsKIAkJfQotCQlvZmZzZXQrKzsKIAl9CiB9CiAKQEAgLTM3MCwyNSArNjk0LDE3NjQgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXR5cGUgPSBvZmZzZXQgJiBCNDNfTFBUQUJfVFlQRU1BU0s7CisJb2Zmc2V0ICY9IH5CNDNfTFBUQUJfVFlQRU1BU0s7CisJQjQzX1dBUk5fT04ob2Zmc2V0ID4gMHhGRkZGKTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwogCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIEI0M19MUFRBQl84QklUOgogCQkJdmFsdWUgPSAqZGF0YTsKIAkJCWRhdGErKzsKKwkJCUI0M19XQVJOX09OKHZhbHVlICYgfjB4RkYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTywgdmFsdWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgogCQkJdmFsdWUgPSAqKCh1MTYgKilkYXRhKTsKIAkJCWRhdGEgKz0gMjsKKwkJCUI0M19XQVJOX09OKHZhbHVlICYgfjB4RkZGRik7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CiAJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOwogCQkJZGF0YSArPSA0OworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSwgdmFsdWUgPj4gMTYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTywgdmFsdWUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlCNDNfV0FSTl9PTigxKTsKLQkJCXZhbHVlID0gMDsKIAkJfQotCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBvZmZzZXQsIHZhbHVlKTsKLQkJb2Zmc2V0Kys7CisJfQorfQorCitzdGF0aWMgY29uc3QgdTggbHBwaHlfbWluX3NpZ19zcV90YWJsZVtdID0geworCTB4ZGUsIDB4ZGMsIDB4ZGEsIDB4ZDgsIDB4ZDYsIDB4ZDQsIDB4ZDIsIDB4Y2YsIDB4Y2QsCisJMHhjYSwgMHhjNywgMHhjNCwgMHhjMSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwKKwkweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweGJlLCAweDAwLAorCTB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsIDB4YmUsCisJMHhiZSwgMHhiZSwgMHhiZSwgMHhiZSwgMHhjMSwgMHhjNCwgMHhjNywgMHhjYSwgMHhjZCwKKwkweGNmLCAweGQyLCAweGQ0LCAweGQ2LCAweGQ4LCAweGRhLCAweGRjLCAweGRlLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9yZXYwMV9ub2lzZV9zY2FsZV90YWJsZVtdID0geworCTB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsCisJMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0MDAsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwKKwkweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHhhNGE0LCAweGE0YTQsIDB4YTRhNCwgMHgwMGE0LAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg0YzAwLCAweDJkMzYsCisJMHgwMDAwLCAweDAwMDAsIDB4NGMwMCwgMHgyZDM2LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9yZXYycGx1c19ub2lzZV9zY2FsZV90YWJsZVtdID0geworCTB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsCisJMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwKKwkweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMDAwLAorCTB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsCisJMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwKKwkweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsIDB4MDBhNCwgMHgwMGE0LCAweDAwYTQsCisJMHgwMGE0LAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9jcnNfZ2Fpbl9uZnRfdGFibGVbXSA9IHsKKwkweDAzNjYsIDB4MDM2YSwgMHgwMzZmLCAweDAzNjQsIDB4MDM2NywgMHgwMzZkLCAweDAzNzQsIDB4MDM3ZiwgMHgwMzZmLAorCTB4MDM3YiwgMHgwMzhhLCAweDAzNzgsIDB4MDM2NywgMHgwMzZkLCAweDAzNzUsIDB4MDM4MSwgMHgwMzc0LCAweDAzODEsCisJMHgwMzkyLCAweDAzYTksIDB4MDNjNCwgMHgwM2UxLCAweDAwMDEsIDB4MDAxZiwgMHgwMDQwLCAweDAwNWUsIDB4MDA3ZiwKKwkweDAwOWUsIDB4MDBiZCwgMHgwMGRkLCAweDAwZmQsIDB4MDExZCwgMHgwMTNkLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9yZXYwMV9maWx0ZXJfY29udHJvbF90YWJsZVtdID0geworCTB4YTBmYywgMHgxMGZjLCAweDEwZGIsIDB4MjBiNywgMHhmZjkzLCAweDEwYmYsIDB4MTA5YiwgMHgyMDc3LCAweGZmNTMsCisJMHgwMTI3LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBscHBoeV9yZXYycGx1c19maWx0ZXJfY29udHJvbF90YWJsZVtdID0geworCTB4MDAwMTQxZmMsIDB4MDAwMDIxZmMsIDB4MDAwMDIxYjcsIDB4MDAwMDQxNmYsIDB4MDAwMWZmMjcsIDB4MDAwMDIxN2YsCisJMHgwMDAwMjEzNywgMHgwMDAwNDBlZiwgMHgwMDAxZmVhNywgMHgwMDAwMDI0ZiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfcmV2MDFfcHNfY29udHJvbF90YWJsZVtdID0geworCTB4MDAwMTAwMDAsIDB4MDAwMDAwYTAsIDB4MDAwNDAwMDAsIDB4MDAwMDAwNDgsIDB4MDgwODAxMDEsIDB4MDAwMDAwODAsCisJMHgwODA4MDEwMSwgMHgwMDAwMDA0MCwgMHgwODA4MDEwMSwgMHgwMDAwMDBjMCwgMHgwOGE4MTUwMSwgMHgwMDAwMDBjMCwKKwkweDBmZThmZDAxLCAweDAwMDAwMGMwLCAweDA4MzAwMTA1LCAweDAwMDAwMGMwLCAweDA4MDgwMjAxLCAweDAwMDAwMGMwLAorCTB4MDgyODAyMDUsIDB4MDAwMDAwYzAsIDB4ZTgwODAyZmUsIDB4MDAwMDAwYzcsIDB4MjgwODAyMDYsIDB4MDAwMDAwYzAsCisJMHgwODA4MDIwMiwgMHgwMDAwMDBjMCwgMHgwYmE4NzYwMiwgMHgwMDAwMDBjMCwgMHgxMDY4MDEzZCwgMHgwMDAwMDBjMCwKKwkweDEwMjgwMTA1LCAweDAwMDAwMGMwLCAweDA4ODgwMTAyLCAweDAwMDAwMGMwLCAweDA4MjgwMTA2LCAweDAwMDAwMGMwLAorCTB4ZTgwODAxZmQsIDB4MDAwMDAwYzcsIDB4YTgwODAxMTUsIDB4MDAwMDAwYzAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X3JldjJwbHVzX3BzX2NvbnRyb2xfdGFibGVbXSA9IHsKKwkweDAwZTM4ZTA4LCAweDAwZTA4ZTM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAyMDgwLAorCTB4MDAwMDYxODAsIDB4MDAwMDMwMDIsIDB4MDAwMDAwNDAsIDB4MDAwMDIwNDIsIDB4MDAxODAwNDcsIDB4MDAwODAwNDMsCisJMHgwMDAwMDA0MSwgMHgwMDAwMjBjMSwgMHgwMDA0NjAwNiwgMHgwMDA0MjAwMiwgMHgwMDA0MDAwMCwgMHgwMDAwMjAwMywKKwkweDAwMTgwMDA2LCAweDAwMDgwMDAyLAorfTsKKworc3RhdGljIGNvbnN0IHU4IGxwcGh5X3BsbF9mcmFjdGlvbl90YWJsZVtdID0geworCTB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsCisJMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwgMHg4MCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfaXFsb19jYWxfdGFibGVbXSA9IHsKKwkweDAyMDAsIDB4MDMwMCwgMHgwNDAwLCAweDA2MDAsIDB4MDgwMCwgMHgwYjAwLCAweDEwMDAsIDB4MTAwMSwgMHgxMDAyLAorCTB4MTAwMywgMHgxMDA0LCAweDEwMDUsIDB4MTAwNiwgMHgxMDA3LCAweDE3MDcsIDB4MjAwNywgMHgyZDA3LCAweDQwMDcsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMjAwLCAweDAzMDAsIDB4MDQwMCwgMHgwNjAwLAorCTB4MDgwMCwgMHgwYjAwLCAweDEwMDAsIDB4MTAwMSwgMHgxMDAyLCAweDEwMDMsIDB4MTAwNCwgMHgxMDA1LCAweDEwMDYsCisJMHgxMDA3LCAweDE3MDcsIDB4MjAwNywgMHgyZDA3LCAweDQwMDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDQwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfcmV2MF9vZmRtX2Nja19nYWluX3RhYmxlW10gPSB7CisJMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDEwMDEsIDB4MjAwMSwgMHgzMDAxLCAweDQwMDEsIDB4NTAwMSwKKwkweDYwMDEsIDB4NzAwMSwgMHg3MDExLCAweDcwMjEsIDB4MjAzNSwgMHgyMDQ1LCAweDIwNTUsIDB4MjA2NSwgMHgyMDc1LAorCTB4MDA2ZCwgMHgwMDdkLCAweDAxNGQsIDB4MDE1ZCwgMHgxMTVkLCAweDAzNWQsIDB4MTM1ZCwgMHgwNTVkLCAweDE1NWQsCisJMHgwZDVkLCAweDFkNWQsIDB4MmQ1ZCwgMHg1NTVkLCAweDY1NWQsIDB4NzU1ZCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfcmV2MV9vZmRtX2Nja19nYWluX3RhYmxlW10gPSB7CisJMHg1MDAwLCAweDYwMDAsIDB4NzAwMCwgMHgwMDAxLCAweDEwMDEsIDB4MjAwMSwgMHgzMDAxLCAweDQwMDEsIDB4NTAwMSwKKwkweDYwMDEsIDB4NzAwMSwgMHg3MDExLCAweDcwMjEsIDB4MjAzNSwgMHgyMDQ1LCAweDIwNTUsIDB4MjA2NSwgMHgyMDc1LAorCTB4MDA2ZCwgMHgwMDdkLCAweDAxNGQsIDB4MDE1ZCwgMHgxMTVkLCAweDAzNWQsIDB4MTM1ZCwgMHgwNTVkLCAweDE1NWQsCisJMHgwZDVkLCAweDFkNWQsIDB4MmQ1ZCwgMHg1NTVkLCAweDY1NWQsIDB4NzU1ZCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfZ2Fpbl9kZWx0YV90YWJsZVtdID0geworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X3R4X3Bvd2VyX2NvbnRyb2xfdGFibGVbXSA9IHsKKwkweDAwMDAwMDUwLCAweDAwMDAwMDRmLCAweDAwMDAwMDRlLCAweDAwMDAwMDRkLCAweDAwMDAwMDRjLCAweDAwMDAwMDRiLAorCTB4MDAwMDAwNGEsIDB4MDAwMDAwNDksIDB4MDAwMDAwNDgsIDB4MDAwMDAwNDcsIDB4MDAwMDAwNDYsIDB4MDAwMDAwNDUsCisJMHgwMDAwMDA0NCwgMHgwMDAwMDA0MywgMHgwMDAwMDA0MiwgMHgwMDAwMDA0MSwgMHgwMDAwMDA0MCwgMHgwMDAwMDAzZiwKKwkweDAwMDAwMDNlLCAweDAwMDAwMDNkLCAweDAwMDAwMDNjLCAweDAwMDAwMDNiLCAweDAwMDAwMDNhLCAweDAwMDAwMDM5LAorCTB4MDAwMDAwMzgsIDB4MDAwMDAwMzcsIDB4MDAwMDAwMzYsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzMsCisJMHgwMDAwMDAzMiwgMHgwMDAwMDAzMSwgMHgwMDAwMDAzMCwgMHgwMDAwMDAyZiwgMHgwMDAwMDAyZSwgMHgwMDAwMDAyZCwKKwkweDAwMDAwMDJjLCAweDAwMDAwMDJiLCAweDAwMDAwMDJhLCAweDAwMDAwMDI5LCAweDAwMDAwMDI4LCAweDAwMDAwMDI3LAorCTB4MDAwMDAwMjYsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjMsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjEsCisJMHgwMDAwMDAyMCwgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZSwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxYywgMHgwMDAwMDAxYiwKKwkweDAwMDAwMDFhLCAweDAwMDAwMDE5LCAweDAwMDAwMDE4LCAweDAwMDAwMDE3LCAweDAwMDAwMDE2LCAweDAwMDAwMDE1LAorCTB4MDAwMDAwMTQsIDB4MDAwMDAwMTMsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwNzVhMCwgMHgwMDAwNzVhMCwgMHgwMDAwNzVhMSwgMHgwMDAwNzVhMSwgMHgwMDAwNzVhMiwgMHgwMDAwNzVhMiwKKwkweDAwMDA3NWEzLCAweDAwMDA3NWEzLCAweDAwMDA3NGIwLCAweDAwMDA3NGIwLCAweDAwMDA3NGIxLCAweDAwMDA3NGIxLAorCTB4MDAwMDc0YjIsIDB4MDAwMDc0YjIsIDB4MDAwMDc0YjMsIDB4MDAwMDc0YjMsIDB4MDAwMDZkMjAsIDB4MDAwMDZkMjAsCisJMHgwMDAwNmQyMSwgMHgwMDAwNmQyMSwgMHgwMDAwNmQyMiwgMHgwMDAwNmQyMiwgMHgwMDAwNmQyMywgMHgwMDAwNmQyMywKKwkweDAwMDA0NjYwLCAweDAwMDA0NjYwLCAweDAwMDA0NjYxLCAweDAwMDA0NjYxLCAweDAwMDA0NjYyLCAweDAwMDA0NjYyLAorCTB4MDAwMDQ2NjMsIDB4MDAwMDQ2NjMsIDB4MDAwMDNlNjAsIDB4MDAwMDNlNjAsIDB4MDAwMDNlNjEsIDB4MDAwMDNlNjEsCisJMHgwMDAwM2U2MiwgMHgwMDAwM2U2MiwgMHgwMDAwM2U2MywgMHgwMDAwM2U2MywgMHgwMDAwMzY2MCwgMHgwMDAwMzY2MCwKKwkweDAwMDAzNjYxLCAweDAwMDAzNjYxLCAweDAwMDAzNjYyLCAweDAwMDAzNjYyLCAweDAwMDAzNjYzLCAweDAwMDAzNjYzLAorCTB4MDAwMDJlNjAsIDB4MDAwMDJlNjAsIDB4MDAwMDJlNjEsIDB4MDAwMDJlNjEsIDB4MDAwMDJlNjIsIDB4MDAwMDJlNjIsCisJMHgwMDAwMmU2MywgMHgwMDAwMmU2MywgMHgwMDAwMjY2MCwgMHgwMDAwMjY2MCwgMHgwMDAwMjY2MSwgMHgwMDAwMjY2MSwKKwkweDAwMDAyNjYyLCAweDAwMDAyNjYyLCAweDAwMDAyNjYzLCAweDAwMDAyNjYzLCAweDAwMDAyNWUwLCAweDAwMDAyNWUwLAorCTB4MDAwMDI1ZTEsIDB4MDAwMDI1ZTEsIDB4MDAwMDI1ZTIsIDB4MDAwMDI1ZTIsIDB4MDAwMDI1ZTMsIDB4MDAwMDI1ZTMsCisJMHgwMDAwMWRlMCwgMHgwMDAwMWRlMCwgMHgwMDAwMWRlMSwgMHgwMDAwMWRlMSwgMHgwMDAwMWRlMiwgMHgwMDAwMWRlMiwKKwkweDAwMDAxZGUzLCAweDAwMDAxZGUzLCAweDAwMDAxZDYwLCAweDAwMDAxZDYwLCAweDAwMDAxZDYxLCAweDAwMDAxZDYxLAorCTB4MDAwMDFkNjIsIDB4MDAwMDFkNjIsIDB4MDAwMDFkNjMsIDB4MDAwMDFkNjMsIDB4MDAwMDE1NjAsIDB4MDAwMDE1NjAsCisJMHgwMDAwMTU2MSwgMHgwMDAwMTU2MSwgMHgwMDAwMTU2MiwgMHgwMDAwMTU2MiwgMHgwMDAwMTU2MywgMHgwMDAwMTU2MywKKwkweDAwMDAwZDYwLCAweDAwMDAwZDYwLCAweDAwMDAwZDYxLCAweDAwMDAwZDYxLCAweDAwMDAwZDYyLCAweDAwMDAwZDYyLAorCTB4MDAwMDBkNjMsIDB4MDAwMDBkNjMsIDB4MDAwMDBjZTAsIDB4MDAwMDBjZTAsIDB4MDAwMDBjZTEsIDB4MDAwMDBjZTEsCisJMHgwMDAwMGNlMiwgMHgwMDAwMGNlMiwgMHgwMDAwMGNlMywgMHgwMDAwMGNlMywgMHgwMDAwMGUxMCwgMHgwMDAwMGUxMCwKKwkweDAwMDAwZTExLCAweDAwMDAwZTExLCAweDAwMDAwZTEyLCAweDAwMDAwZTEyLCAweDAwMDAwZTEzLCAweDAwMDAwZTEzLAorCTB4MDAwMDBiZjAsIDB4MDAwMDBiZjAsIDB4MDAwMDBiZjEsIDB4MDAwMDBiZjEsIDB4MDAwMDBiZjIsIDB4MDAwMDBiZjIsCisJMHgwMDAwMGJmMywgMHgwMDAwMGJmMywgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwKKwkweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLCAweDA0MjAwMDAwLCAweDA0MDAwMDAwLAorCTB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDQyMDAwMDAsIDB4MDQwMDAwMDAsCisJMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDIwMDAwMCwgMHgwNDAwMDAwMCwgMHgwMDAwMDBmZiwgMHgwMDAwMDJmYywKKwkweDAwMDBmYTA4LCAweDAwMDAwMzA1LCAweDAwMDAwMjA2LCAweDAwMDAwMzA0LCAweDAwMDBmYjA0LCAweDAwMDBmY2ZmLAorCTB4MDAwMDA1ZmIsIDB4MDAwMGZkMDEsIDB4MDAwMDA0MDEsIDB4MDAwMDAwMDYsIDB4MDAwMGZmMDMsIDB4MDAwMDA3ZmMsCisJMHgwMDAwZmMwOCwgMHgwMDAwMDIwMywgMHgwMDAwZmZmYiwgMHgwMDAwMDYwMCwgMHgwMDAwZmEwMSwgMHgwMDAwZmMwMywKKwkweDAwMDBmZTA2LCAweDAwMDBmZTAwLCAweDAwMDAwMTAyLCAweDAwMDAwN2ZkLCAweDAwMDAwNGZiLCAweDAwMDAwNmZmLAorCTB4MDAwMDA0ZmQsIDB4MDAwMGZkZmEsIDB4MDAwMDA3ZmIsIDB4MDAwMGZkZmEsIDB4MDAwMGZhMDYsIDB4MDAwMDA1MDAsCisJMHgwMDAwZjkwMiwgMHgwMDAwMDdmYSwgMHgwMDAwZmFmYSwgMHgwMDAwMDUwMCwgMHgwMDAwMDdmYSwgMHgwMDAwMDcwMCwKKwkweDAwMDAwMzA1LCAweDAwMDAwNGZmLCAweDAwMDAwODAxLCAweDAwMDAwNTAzLCAweDAwMDAwNWY5LCAweDAwMDAwNDA0LAorCTB4MDAwMGZiMDgsIDB4MDAwMDA1ZmQsIDB4MDAwMDA1MDEsIDB4MDAwMDA0MDUsIDB4MDAwMGZiMDMsIDB4MDAwMDA3ZmMsCisJMHgwMDAwMDQwMywgMHgwMDAwMDMwMywgMHgwMDAwMDQwMiwgMHgwMDAwZmFmZiwgMHgwMDAwZmUwNSwgMHgwMDAwMDVmZCwKKwkweDAwMDBmZTAxLCAweDAwMDAwN2ZhLCAweDAwMDAwMjAyLCAweDAwMDAwNTA0LCAweDAwMDAwMTAyLCAweDAwMDAwOGZlLAorCTB4MDAwMGZhMDQsIDB4MDAwMGZhZmMsIDB4MDAwMGZlMDgsIDB4MDAwMDAwZjksIDB4MDAwMDAyZmEsIDB4MDAwMDAzZmUsCisJMHgwMDAwMDMwNCwgMHgwMDAwMDRmOSwgMHgwMDAwMDEwMCwgMHgwMDAwZmQwNiwgMHgwMDAwMDhmYywgMHgwMDAwMDcwMSwKKwkweDAwMDAwNTA0LCAweDAwMDBmZGZlLCAweDAwMDBmZGZjLCAweDAwMDAwM2ZlLCAweDAwMDAwNzA0LCAweDAwMDAwMmZjLAorCTB4MDAwMDA0ZjksIDB4MDAwMGZkZmQsIDB4MDAwMGZhMDcsIDB4MDAwMDAyMDUsIDB4MDAwMDAzZmQsIDB4MDAwMDA1ZmIsCisJMHgwMDAwMDRmOSwgMHgwMDAwMDgwNCwgMHgwMDAwZmMwNiwgMHgwMDAwZmNmOSwgMHgwMDAwMDEwMCwgMHgwMDAwZmUwNSwKKwkweDAwMDAwNDA4LCAweDAwMDBmYjAyLCAweDAwMDAwMzA0LCAweDAwMDAwNmZlLCAweDAwMDAwNGZhLCAweDAwMDAwMzA1LAorCTB4MDAwMDA4ZmMsIDB4MDAwMDAxMDIsIDB4MDAwMDAxZmQsIDB4MDAwMDA0ZmMsIDB4MDAwMGZlMDMsIDB4MDAwMDA3MDEsCisJMHgwMDAwMDFmYiwgMHgwMDAwMDFmOSwgMHgwMDAwMDIwNiwgMHgwMDAwMDZmZCwgMHgwMDAwMDUwOCwgMHgwMDAwMDcwMCwKKwkweDAwMDAwMzA0LCAweDAwMDAwNWZlLCAweDAwMDAwNWZmLCAweDAwMDBmYTA0LCAweDAwMDAwMzAzLCAweDAwMDBmZWZiLAorCTB4MDAwMDA3ZjksIDB4MDAwMGZlZmMsIDB4MDAwMDA0ZmQsIDB4MDAwMDA1ZmMsIDB4MDAwMGZmZmQsIDB4MDAwMGZjMDgsCisJMHgwMDAwZmJmOSwgMHgwMDAwZmQwNywgMHgwMDAwMDhmYiwgMHgwMDAwZmUwMiwgMHgwMDAwMDZmYiwgMHgwMDAwMDcwMiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfZ2Fpbl9pZHhfdGFibGVbXSA9IHsKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDEwMDAwMDAxLCAweDAwMDAwMDAwLCAweDIwMDAwMDgyLCAweDAwMDAwMDAwLCAweDQwMDAwMTA0LCAweDAwMDAwMDAwLAorCTB4NjAwMDQyMDcsIDB4MDAwMDAwMDEsIDB4NzAwMDgzOGEsIDB4MDAwMDAwMDEsIDB4ZDAyMTA1MGQsIDB4MDAwMDAwMDEsCisJMHhlMDQxYzY4MywgMHgwMDAwMDAwMSwgMHg1MDgyODgwNSwgMHgwMDAwMDAwMCwgMHg4MGUzNDI4OCwgMHgwMDAwMDAwMCwKKwkweGIxNDQwNDBiLCAweDAwMDAwMDAwLCAweGUxYTYwNThlLCAweDAwMDAwMDAwLCAweDEyMDY0NzExLCAweDAwMDAwMDAxLAorCTB4YjBhMTg2MTIsIDB4MDAwMDAwMTAsIDB4ZTEwMjQ3OTQsIDB4MDAwMDAwMTAsIDB4MTE2MzA5MTUsIDB4MDAwMDAwMTEsCisJMHgzMWMzY2ExYiwgMHgwMDAwMDAxMSwgMHhjMTg0OGE5YywgMHgwMDAwMDAxOCwgMHhmMWU1MGRhMCwgMHgwMDAwMDAxOCwKKwkweDIyNDY4ZTIxLCAweDAwMDAwMDE5LCAweDQyODZkMDIzLCAweDAwMDAwMDE5LCAweGEzNDdkMGE0LCAweDAwMDAwMDE5LAorCTB4YjM2ODExYTYsIDB4MDAwMDAwMTksIDB4ZjNlODkyMjcsIDB4MDAwMDAwMTksIDB4MDQwOGQzMjksIDB4MDAwMDAwMWEsCisJMHgyNDQ5NTNhYSwgMHgwMDAwMDAxYSwgMHgzNDY5OTRhYiwgMHgwMDAwMDAxYSwgMHg1NGFhMTUyYywgMHgwMDAwMDAxYSwKKwkweDY0Y2E1NWFkLCAweDAwMDAwMDFhLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDEwMDAwMDAxLCAweDAwMDAwMDAwLCAweDIwMDAwMDgyLCAweDAwMDAwMDAwLAorCTB4NDAwMDAxMDQsIDB4MDAwMDAwMDAsIDB4NjAwMDQyMDcsIDB4MDAwMDAwMDEsIDB4NzAwMDgzOGEsIDB4MDAwMDAwMDEsCisJMHhkMDIxMDUwZCwgMHgwMDAwMDAwMSwgMHhlMDQxYzY4MywgMHgwMDAwMDAwMSwgMHg1MDgyODgwNSwgMHgwMDAwMDAwMCwKKwkweDgwZTM0Mjg4LCAweDAwMDAwMDAwLCAweGIxNDQwNDBiLCAweDAwMDAwMDAwLCAweGUxYTYwNThlLCAweDAwMDAwMDAwLAorCTB4MTIwNjQ3MTEsIDB4MDAwMDAwMDEsIDB4YjBhMTg2MTIsIDB4MDAwMDAwMTAsIDB4ZTEwMjQ3OTQsIDB4MDAwMDAwMTAsCisJMHgxMTYzMDkxNSwgMHgwMDAwMDAxMSwgMHgzMWMzY2ExYiwgMHgwMDAwMDAxMSwgMHhjMTg0OGE5YywgMHgwMDAwMDAxOCwKKwkweGYxZTUwZGEwLCAweDAwMDAwMDE4LCAweDIyNDY4ZTIxLCAweDAwMDAwMDE5LCAweDQyODZkMDIzLCAweDAwMDAwMDE5LAorCTB4YTM0N2QwYTQsIDB4MDAwMDAwMTksIDB4YjM2ODExYTYsIDB4MDAwMDAwMTksIDB4ZjNlODkyMjcsIDB4MDAwMDAwMTksCisJMHgwNDA4ZDMyOSwgMHgwMDAwMDAxYSwgMHgyNDQ5NTNhYSwgMHgwMDAwMDAxYSwgMHgzNDY5OTRhYiwgMHgwMDAwMDAxYSwKKwkweDU0YWExNTJjLCAweDAwMDAwMDFhLCAweDY0Y2E1NWFkLCAweDAwMDAwMDFhLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9hdXhfZ2Fpbl9pZHhfdGFibGVbXSA9IHsKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMSwgMHgwMDAyLCAweDAwMDQsIDB4MDAxNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDA0LCAweDAwMTYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X2dhaW5fdmFsdWVfdGFibGVbXSA9IHsKKwkweDAwMDAwMDA4LCAweDAwMDAwMDBlLCAweDAwMDAwMDE0LCAweDAwMDAwMDFhLCAweDAwMDAwMGZiLCAweDAwMDAwMDA0LAorCTB4MDAwMDAwMDgsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGEsCisJMHgwMDAwMDAwZCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxNSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNiwKKwkweDAwMDAwMDBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEyLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMWUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwNiwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwYywgMHgwMDAwMDAwZiwKKwkweDAwMDAwMDEyLCAweDAwMDAwMDE1LCAweDAwMDAwMDE4LCAweDAwMDAwMDFiLCAweDAwMDAwMDFlLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDksIDB4MDAwMDAwZjEsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgbHBwaHlfZ2Fpbl90YWJsZVtdID0geworCTB4MDAwMCwgMHgwNDAwLCAweDA4MDAsIDB4MDgwMiwgMHgwODA0LCAweDA4MDYsIDB4MDgwNywgMHgwODA4LCAweDA4MGEsCisJMHgwODBiLCAweDA4MGMsIDB4MDgwZSwgMHgwODBmLCAweDA4MTAsIDB4MDgxMiwgMHgwODEzLCAweDA4MTQsIDB4MDgxNiwKKwkweDA4MTcsIDB4MDgxYSwgMHgwODFiLCAweDA4MWYsIDB4MDgyMCwgMHgwODI0LCAweDA4MzAsIDB4MDgzNCwgMHgwODM3LAorCTB4MDgzYiwgMHgwODNmLCAweDA4NDAsIDB4MDg0NCwgMHgwODU3LCAweDA4NWIsIDB4MDg1ZiwgMHgwOGQ3LCAweDA4ZGIsCisJMHgwOGRmLCAweDA5NTcsIDB4MDk1YiwgMHgwOTVmLCAweDBiNTcsIDB4MGI1YiwgMHgwYjVmLCAweDBmNWYsIDB4MTM1ZiwKKwkweDE3NWYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfYTBfZ2Fpbl9pZHhfdGFibGVbXSA9IHsKKwkweDAwMTExMWUwLCAweDAwNjUyMDUxLCAweDAwNjA2MDU1LCAweDAwNWIwMDVhLCAweDAwNTU1MDYwLCAweDAwNTExMDY1LAorCTB4MDA0YzgwNmIsIDB4MDA0N2QwNzIsIDB4MDA0NDQwNzgsIDB4MDA0MDAwODAsIDB4MDAzY2EwODcsIDB4MDAzOTQwOGYsCisJMHgwMDM1ZTA5OCwgMHgwMDMyZTBhMSwgMHgwMDMwMzBhYSwgMHgwMDJkODBiNCwgMHgwMDJhZTBiZiwgMHgwMDI4ODBjYSwKKwkweDAwMjY0MGQ2LCAweDAwMjQxMGUzLCAweDAwMjIyMGYwLCAweDAwMjAyMGZmLCAweDAwMWU1MTBlLCAweDAwMWNhMTFlLAorCTB4MDAxYjAxMmYsIDB4MDAxOTkxNDAsIDB4MDAxODIxNTMsIDB4MDAxNmMxNjgsIDB4MDAxNTgxN2QsIDB4MDAxNDUxOTMsCisJMHgwMDEzMjFhYiwgMHgwMDEyMTFjNSwgMHgwMDExMTFlMCwgMHgwMDEwMjFmYywgMHgwMDBmMzIxYSwgMHgwMDBlNTIzYSwKKwkweDAwMGQ5MjVjLCAweDAwMGNkMjdmLCAweDAwMGMxMmE1LCAweDAwMGI2MmNkLCAweDAwMGFjMmY4LCAweDAwMGEyMzI1LAorCTB4MDAwOTkzNTUsIDB4MDAwOTEzODcsIDB4MDAwODgzYmQsIDB4MDAwODEzZjUsIDB4MDAwN2E0MzIsIDB4MDAwNzM0NzEsCisJMHgwMDA2YzRiNSwgMHgwMDA2NjRmYywgMHgwMDA2MTU0NywgMHgwMDA1YjU5OCwgMHgwMDA1NjVlYywgMHgwMDA1MTY0NiwKKwkweDAwMDRkNmE1LCAweDAwMDQ4NzBhLCAweDAwMDQ0Nzc1LCAweDAwMDQwN2U2LCAweDAwMDNkODVlLCAweDAwMDM5OGRkLAorCTB4MDAwMzY5NjMsIDB4MDAwMzM5ZjIsIDB4MDAwMzBhODksIDB4MDAwMmRiMjgsCit9OworCitzdGF0aWMgY29uc3QgdTE2IGxwcGh5X2EwX2F1eF9nYWluX2lkeF90YWJsZVtdID0geworCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMiwgMHgwMDE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDIsIDB4MDAxNCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgbHBwaHlfYTBfZ2Fpbl92YWx1ZV90YWJsZVtdID0geworCTB4MDAwMDAwMDgsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMWEsIDB4MDAwMDAwZmIsIDB4MDAwMDAwMDQsCisJMHgwMDAwMDAwOCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwYSwKKwkweDAwMDAwMDBkLCAweDAwMDAwMDEwLCAweDAwMDAwMDEyLCAweDAwMDAwMDE1LCAweDAwMDAwMDAwLCAweDAwMDAwMDA2LAorCTB4MDAwMDAwMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAxZSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDA2LCAweDAwMDAwMDA5LCAweDAwMDAwMDBjLCAweDAwMDAwMDBmLAorCTB4MDAwMDAwMTIsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMWIsIDB4MDAwMDAwMWUsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwZiwgMHgwMDAwMDBmNywKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9hMF9nYWluX3RhYmxlW10gPSB7CisJMHgwMDAwLCAweDAwMDIsIDB4MDAwNCwgMHgwMDA2LCAweDAwMDcsIDB4MDAwOCwgMHgwMDBhLCAweDAwMGIsIDB4MDAwYywKKwkweDAwMGUsIDB4MDAwZiwgMHgwMDEwLCAweDAwMTIsIDB4MDAxMywgMHgwMDE0LCAweDAwMTYsIDB4MDAxNywgMHgwMDFhLAorCTB4MDAxYiwgMHgwMDFmLCAweDAwMjAsIDB4MDAyNCwgMHgwMDMwLCAweDAwMzQsIDB4MDAzNywgMHgwMDNiLCAweDAwM2YsCisJMHgwMDQwLCAweDAwNDQsIDB4MDA1NywgMHgwMDViLCAweDAwNWYsIDB4MDBkNywgMHgwMGRiLCAweDAwZGYsIDB4MDE1NywKKwkweDAxNWIsIDB4MDE1ZiwgMHgwMzU3LCAweDAzNWIsIDB4MDM1ZiwgMHgwNzVmLCAweDBiNWYsIDB4MGY1ZiwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorCTB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKwkweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUxNiBscHBoeV9zd19jb250cm9sX3RhYmxlW10gPSB7CisJMHgwMTI4LCAweDAxMjgsIDB4MDAwOSwgMHgwMDA5LCAweDAwMjgsIDB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDEyOCwKKwkweDAxMjgsIDB4MDAwOSwgMHgwMDA5LCAweDAwMjgsIDB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDAwOSwgMHgwMDA5LAorCTB4MDAwOSwgMHgwMDA5LCAweDAwMDksIDB4MDAwOSwgMHgwMDA5LCAweDAwMDksIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsCisJMHgwMDE4LCAweDAwMTgsIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsIDB4MDEyOCwgMHgwMTI4LCAweDAwMDksIDB4MDAwOSwKKwkweDAwMjgsIDB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDEyOCwgMHgwMTI4LCAweDAwMDksIDB4MDAwOSwgMHgwMDI4LAorCTB4MDAyOCwgMHgwMDI4LCAweDAwMjgsIDB4MDAwOSwgMHgwMDA5LCAweDAwMDksIDB4MDAwOSwgMHgwMDA5LCAweDAwMDksCisJMHgwMDA5LCAweDAwMDksIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsIDB4MDAxOCwgMHgwMDE4LCAweDAwMTgsIDB4MDAxOCwKKwkweDAwMTgsCit9OworCitzdGF0aWMgY29uc3QgdTggbHBwaHlfaGZfdGFibGVbXSA9IHsKKwkweDRiLCAweDM2LCAweDI0LCAweDE4LCAweDQ5LCAweDM0LCAweDIzLCAweDE3LCAweDQ4LAorCTB4MzMsIDB4MjMsIDB4MTcsIDB4NDgsIDB4MzMsIDB4MjMsIDB4MTcsCit9OworCitzdGF0aWMgY29uc3QgdTMyIGxwcGh5X3BhcGRfZXBzX3RhYmxlW10gPSB7CisJMHgwMDAwMDAwMCwgMHgwMDAxM2ZmYywgMHgwMDAxZGZmMywgMHgwMDAxYmZmMCwgMHgwMDAyM2ZlOSwgMHgwMDAyMWZkZiwKKwkweDAwMDI4ZmRmLCAweDAwMDMzZmQyLCAweDAwMDM5ZmNiLCAweDAwMDQzZmM3LCAweDAwMDRlZmMyLCAweDAwMDU1ZmI1LAorCTB4MDAwNWNmYjAsIDB4MDAwNjNmYTgsIDB4MDAwNjhmYTMsIDB4MDAwNzFmOTgsIDB4MDAwN2VmOTIsIDB4MDAwODRmOGIsCisJMHgwMDA4ZGY4MiwgMHgwMDA5N2Y3NywgMHgwMDA5ZGY2OSwgMHgwMDBhM2Y2MiwgMHgwMDBhZGY1NywgMHgwMDBiNmY0YywKKwkweDAwMGJmZjQxLCAweDAwMGM5ZjM5LCAweDAwMGNmZjMwLCAweDAwMGRiZjI3LCAweDAwMGU0ZjFlLCAweDAwMGVkZjE2LAorCTB4MDAwZjdmMTMsIDB4MDAxMDJmMTEsIDB4MDAxMTBmMTAsIDB4MDAxMWRmMTEsIDB4MDAxMmVmMTUsIDB4MDAxNDNmMWMsCisJMHgwMDE1OGYyNywgMHgwMDE3MmYzNSwgMHgwMDE5M2Y0NywgMHgwMDFiYWY1ZiwgMHgwMDFlNmY3ZSwgMHgwMDIxY2ZhNCwKKwkweDAwMjViZmQyLCAweDAwMmEyMDA4LCAweDAwMmZiMDQ3LCAweDAwMzYwMDkwLCAweDAwM2Q0MGUwLCAweDAwNDVjMTM1LAorCTB4MDA0ZmIxODksIDB4MDA1YWUxZDcsIDB4MDA2NzIyMWQsIDB4MDA3NTAyNWEsIDB4MDA3ZmYyOTEsIDB4MDA3ZmYyYmYsCisJMHgwMDdmZjJlMywgMHgwMDdmZjJmZiwgMHgwMDdmZjMxNSwgMHgwMDdmZjMyOSwgMHgwMDdmZjMzZiwgMHgwMDdmZjM1NiwKKwkweDAwN2ZmMzZlLCAweDAwN2ZmMzljLCAweDAwN2ZmNDQxLCAweDAwN2ZmNTA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBscHBoeV9wYXBkX211bHRfdGFibGVbXSA9IHsKKwkweDAwMTExMWUwLCAweDAwNjUyMDUxLCAweDAwNjA2MDU1LCAweDAwNWIwMDVhLCAweDAwNTU1MDYwLCAweDAwNTExMDY1LAorCTB4MDA0YzgwNmIsIDB4MDA0N2QwNzIsIDB4MDA0NDQwNzgsIDB4MDA0MDAwODAsIDB4MDAzY2EwODcsIDB4MDAzOTQwOGYsCisJMHgwMDM1ZTA5OCwgMHgwMDMyZTBhMSwgMHgwMDMwMzBhYSwgMHgwMDJkODBiNCwgMHgwMDJhZTBiZiwgMHgwMDI4ODBjYSwKKwkweDAwMjY0MGQ2LCAweDAwMjQxMGUzLCAweDAwMjIyMGYwLCAweDAwMjAyMGZmLCAweDAwMWU1MTBlLCAweDAwMWNhMTFlLAorCTB4MDAxYjAxMmYsIDB4MDAxOTkxNDAsIDB4MDAxODIxNTMsIDB4MDAxNmMxNjgsIDB4MDAxNTgxN2QsIDB4MDAxNDUxOTMsCisJMHgwMDEzMjFhYiwgMHgwMDEyMTFjNSwgMHgwMDExMTFlMCwgMHgwMDEwMjFmYywgMHgwMDBmMzIxYSwgMHgwMDBlNTIzYSwKKwkweDAwMGQ5MjVjLCAweDAwMGNkMjdmLCAweDAwMGMxMmE1LCAweDAwMGI2MmNkLCAweDAwMGFjMmY4LCAweDAwMGEyMzI1LAorCTB4MDAwOTkzNTUsIDB4MDAwOTEzODcsIDB4MDAwODgzYmQsIDB4MDAwODEzZjUsIDB4MDAwN2E0MzIsIDB4MDAwNzM0NzEsCisJMHgwMDA2YzRiNSwgMHgwMDA2NjRmYywgMHgwMDA2MTU0NywgMHgwMDA1YjU5OCwgMHgwMDA1NjVlYywgMHgwMDA1MTY0NiwKKwkweDAwMDRkNmE1LCAweDAwMDQ4NzBhLCAweDAwMDQ0Nzc1LCAweDAwMDQwN2U2LCAweDAwMDNkODVlLCAweDAwMDM5OGRkLAorCTB4MDAwMzY5NjMsIDB4MDAwMzM5ZjIsIDB4MDAwMzBhODksIDB4MDAwMmRiMjgsCit9OworCitzdGF0aWMgc3RydWN0IGxwcGh5X3R4X2dhaW5fdGFibGVfZW50cnkgbHBwaHlfcmV2MF9ub3BhX3R4X2dhaW5fdGFibGVbXSA9IHsKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxNTIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTQ3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE0MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwMSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA5MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA4MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEzLCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEyLCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDExLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDEwLCAuZGFjID0gMCwgLmJiX211bHQgPSA1NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcxLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjBfMmdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDczLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY3LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA1LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDksIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA5LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOSwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDgsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA4LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOCwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDgsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA4LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gOCwgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDgsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDcsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDcsIC5wYWQgPSA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDcsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA3LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNywgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDYsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA2LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNiwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDYsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA2LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNSwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDUsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA1LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNSwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDUsIC5wYWQgPSAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA1LCAucGFkID0gMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNSwgLnBhZCA9IDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDQsIC5wYWQgPSAyLCAuZGFjID0gMCwgLmJiX211bHQgPSA4MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA0LCAucGFkID0gMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNCwgLnBhZCA9IDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDQsIC5wYWQgPSAyLCAuZGFjID0gMCwgLmJiX211bHQgPSA3NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSA0LCAucGFkID0gMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gNCwgLnBhZCA9IDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjBfNWdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjFfbm9wYV90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTUyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE0NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxNDMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzNSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyNCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExNCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwNCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDE0LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDczLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSBscHBoeV9yZXYxXzJnaHpfdHhfZ2Fpbl90YWJsZVtdID0geworCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDkwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDg4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDg1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gMTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDczLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY3LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY5LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NSwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYzLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcyLCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNCwgLnBnYSA9IDEwLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA0LCAucGdhID0gMTAsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDQsIC5wZ2EgPSAxMCwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjFfNWdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSAxMCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTUsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNSwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjUsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxNCwgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTQsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTMsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMywgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzAsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY2LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYxLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA1NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjgsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjIsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTIsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMiwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU5LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEyLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNTcsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA3MCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY4LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYyLCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjEsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA3LCAuZGFjID0gMCwgLmJiX211bHQgPSA1OSwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDU3LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjksIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NywgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY1LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDExLCAucGFkID0gNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjMsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMTEsIC5wYWQgPSA2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2MiwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAxMSwgLnBhZCA9IDYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDYwLCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjJfbm9wYV90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE1MiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTQ3LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxNDMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzOSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM1LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyOCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDk5LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA5NiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDkwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA4OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgzLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA4MSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc2LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA3NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjAzLCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTk3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE5MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxODYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTgxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE3NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNzEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTY2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE2MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTUyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE0OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTQwLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEzNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTI4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEyNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTE3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDExNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEwNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gOTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQ4LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQ4LCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQxLCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjQxLCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjM0LCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjM0LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjI3LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjI3LCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjIxLCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjIxLCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjE1LCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjE1LCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjA4LCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjA4LCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjAzLCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjAzLCAucGFkID0gNTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTk3LCAucGFkID0gNTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTk3LCAucGFkID0gNDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTkxLCAucGFkID0gNDksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTkxLCAucGFkID0gNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTg2LCAucGFkID0gNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTg2LCAucGFkID0gNDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTgxLCAucGFkID0gNDcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTgxLCAucGFkID0gNDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTc1LCAucGFkID0gNDUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTc1LCAucGFkID0gNDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTcwLCAucGFkID0gNDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTcwLCAucGFkID0gNDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTY2LCAucGFkID0gNDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTY2LCAucGFkID0gNDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTYxLCAucGFkID0gNDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTYxLCAucGFkID0gNDAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTU2LCAucGFkID0gNDAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTU2LCAucGFkID0gMzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTUyLCAucGFkID0gMzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTUyLCAucGFkID0gMzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQ4LCAucGFkID0gMzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQ4LCAucGFkID0gMzcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQzLCAucGFkID0gMzcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTQzLCAucGFkID0gMzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM5LCAucGFkID0gMzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM5LCAucGFkID0gMzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM1LCAucGFkID0gMzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTM1LCAucGFkID0gMzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTMyLCAucGFkID0gMzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTMyLCAucGFkID0gMzMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI4LCAucGFkID0gMzMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI4LCAucGFkID0gMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI0LCAucGFkID0gMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTI0LCAucGFkID0gMzEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTIxLCAucGFkID0gMzEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTIxLCAucGFkID0gMzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE3LCAucGFkID0gMzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE3LCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE0LCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTE0LCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMTExLCAucGFkID0gMjksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjJfMmdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSA3LCAucGdhID0gOTksIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDk2LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA5MywgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gOTAsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDg4LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA4NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gODMsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDgxLCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA3OCwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNzYsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDc0LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA3MiwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNzAsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDY4LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA2NiwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNjQsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDY0LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA2MiwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNjIsIC5wYWQgPSAyNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDYwLCAucGFkID0gMjQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA2MCwgLnBhZCA9IDI0MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTksIC5wYWQgPSAyNDEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDU5LCAucGFkID0gMjM0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1NywgLnBhZCA9IDIzNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTcsIC5wYWQgPSAyMjcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDU1LCAucGFkID0gMjI3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1NSwgLnBhZCA9IDIyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTQsIC5wYWQgPSAyMjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDU0LCAucGFkID0gMjE1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1MiwgLnBhZCA9IDIxNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNTIsIC5wYWQgPSAyMDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDUxLCAucGFkID0gMjA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA1MSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDksIC5wYWQgPSAyMDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQ5LCAucGFkID0gMTk3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0OCwgLnBhZCA9IDE5NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDgsIC5wYWQgPSAxOTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQ3LCAucGFkID0gMTkxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0NywgLnBhZCA9IDE4NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDUsIC5wYWQgPSAxODYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQ1LCAucGFkID0gMTgxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0NCwgLnBhZCA9IDE4MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDQsIC5wYWQgPSAxNzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQzLCAucGFkID0gMTc1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0MywgLnBhZCA9IDE3MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDIsIC5wYWQgPSAxNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDQyLCAucGFkID0gMTY2LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSA0MCwgLnBhZCA9IDE2NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gNDAsIC5wYWQgPSAxNjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM5LCAucGFkID0gMTYxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzOSwgLnBhZCA9IDE1NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzgsIC5wYWQgPSAxNTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM4LCAucGFkID0gMTUyLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzNywgLnBhZCA9IDE1MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzcsIC5wYWQgPSAxNDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM2LCAucGFkID0gMTQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzNiwgLnBhZCA9IDE0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzUsIC5wYWQgPSAxNDMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDM1LCAucGFkID0gMTM5LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzNCwgLnBhZCA9IDEzOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzQsIC5wYWQgPSAxMzUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDMzLCAucGFkID0gMTM1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzMywgLnBhZCA9IDEzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzIsIC5wYWQgPSAxMzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDMyLCAucGFkID0gMTI4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzMSwgLnBhZCA9IDEyOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMzEsIC5wYWQgPSAxMjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDMwLCAucGFkID0gMTI0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAzMCwgLnBhZCA9IDEyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjksIC5wYWQgPSAxMjEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI5LCAucGFkID0gMTE3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyOSwgLnBhZCA9IDExNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjksIC5wYWQgPSAxMTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI4LCAucGFkID0gMTE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyOCwgLnBhZCA9IDExMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjcsIC5wYWQgPSAxMTEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI3LCAucGFkID0gMTA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyNiwgLnBhZCA9IDEwOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjYsIC5wYWQgPSAxMDQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI1LCAucGFkID0gMTA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDcsIC5wZ2EgPSAyNSwgLnBhZCA9IDEwMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSA3LCAucGdhID0gMjUsIC5wYWQgPSAxMDIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI1LCAucGFkID0gOTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI0LCAucGFkID0gOTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDI0LCAucGFkID0gOTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIzLCAucGFkID0gOTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIyLCAucGFkID0gOTAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIyLCAucGFkID0gODgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIxLCAucGFkID0gODMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gODMsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDIwLCAucGFkID0gNzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE5LCAucGFkID0gNzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE4LCAucGFkID0gNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNzAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE3LCAucGFkID0gNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE2LCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNjIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNjAsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE1LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDE0LCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gNTQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gNywgLnBnYSA9IDEzLCAucGFkID0gNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGxwcGh5X3JldjJfNWdoel90eF9nYWluX3RhYmxlW10gPSB7CisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDE1MiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTQ3LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxNDMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEzOSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTM1LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMzEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEyOCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTI0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMjEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDExNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTE0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMTEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDEwNywgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gMTA0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSAxMDEsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDk5LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA5NiwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gOTMsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDkwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA4OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gODUsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDgzLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA4MSwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzgsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDc2LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA3NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNzIsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDcwLCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjU1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2OCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjYsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyNTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDI0MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMzQsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjI3LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAyMTUsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMjA4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDIwMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxOTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTkxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE4NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxODEsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTc1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE3MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNjYsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTYxLCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE1NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxNTIsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTQ4LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDE0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMzksIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTM1LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMjgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTI0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEyMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMTcsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTE0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDExMSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSAxMDgsIC5kYWMgPSAwLCAuYmJfbXVsdCA9IDY0LCB9LAorCXsgLmdtID0gMjU1LCAucGdhID0gMjU1LCAucGFkID0gMTA0LCAuZGFjID0gMCwgLmJiX211bHQgPSA2NCwgfSwKKwl7IC5nbSA9IDI1NSwgLnBnYSA9IDI1NSwgLnBhZCA9IDEwMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA5MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA4MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA3MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2NiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNTUsIC5wYWQgPSA2MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDgsIC5wYWQgPSA2MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDgsIC5wYWQgPSA2MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDEsIC5wYWQgPSA2MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyNDEsIC5wYWQgPSA1OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMzQsIC5wYWQgPSA1OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMzQsIC5wYWQgPSA1NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjcsIC5wYWQgPSA1NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjcsIC5wYWQgPSA1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjEsIC5wYWQgPSA1NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMjEsIC5wYWQgPSA1NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMTUsIC5wYWQgPSA1NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMTUsIC5wYWQgPSA1MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDgsIC5wYWQgPSA1MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDgsIC5wYWQgPSA1MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDMsIC5wYWQgPSA1MSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAyMDMsIC5wYWQgPSA0OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTcsIC5wYWQgPSA0OSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTcsIC5wYWQgPSA0OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTEsIC5wYWQgPSA0OCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxOTEsIC5wYWQgPSA0NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODYsIC5wYWQgPSA0NywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODYsIC5wYWQgPSA0NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODEsIC5wYWQgPSA0NSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxODEsIC5wYWQgPSA0NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzUsIC5wYWQgPSA0NCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzUsIC5wYWQgPSA0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzAsIC5wYWQgPSA0MywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNzAsIC5wYWQgPSA0MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjYsIC5wYWQgPSA0MiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjYsIC5wYWQgPSA0MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjEsIC5wYWQgPSA0MCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNjEsIC5wYWQgPSAzOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTYsIC5wYWQgPSAzOSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTYsIC5wYWQgPSAzOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTIsIC5wYWQgPSAzOCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNTIsIC5wYWQgPSAzNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDgsIC5wYWQgPSAzNywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDgsIC5wYWQgPSAzNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDMsIC5wYWQgPSAzNiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxNDMsIC5wYWQgPSAzNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzksIC5wYWQgPSAzNSwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzksIC5wYWQgPSAzNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzUsIC5wYWQgPSAzNCwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzUsIC5wYWQgPSAzMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzIsIC5wYWQgPSAzMywgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMzIsIC5wYWQgPSAzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCisJeyAuZ20gPSAyNTUsIC5wZ2EgPSAxMjgsIC5wYWQgPSAzMiwgLmRhYyA9IDAsIC5iYl9tdWx0ID0gNjQsIH0sCit9OworCit2b2lkIGxwcGh5X3JldjBfMV90YWJsZV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlCNDNfV0FSTl9PTihkZXYtPnBoeS5yZXYgPj0gMik7CisKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjgoMiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfbWluX3NpZ19zcV90YWJsZSksIGxwcGh5X21pbl9zaWdfc3FfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MDFfbm9pc2Vfc2NhbGVfdGFibGUpLCBscHBoeV9yZXYwMV9ub2lzZV9zY2FsZV90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxNCwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfY3JzX2dhaW5fbmZ0X3RhYmxlKSwgbHBwaHlfY3JzX2dhaW5fbmZ0X3RhYmxlKTsKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDgsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X3JldjAxX2ZpbHRlcl9jb250cm9sX3RhYmxlKSwgbHBwaHlfcmV2MDFfZmlsdGVyX2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoOSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MDFfcHNfY29udHJvbF90YWJsZSksIGxwcGh5X3JldjAxX3BzX2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCOCg2LCAwKSwKKwkJQVJSQVlfU0laRShscHBoeV9wbGxfZnJhY3Rpb25fdGFibGUpLCBscHBoeV9wbGxfZnJhY3Rpb25fdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMCwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfaXFsb19jYWxfdGFibGUpLCBscHBoeV9pcWxvX2NhbF90YWJsZSk7CisJaWYgKGRldi0+cGh5LnJldiA9PSAwKSB7CisJCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTMsIDApLAorCQkJQVJSQVlfU0laRShscHBoeV9yZXYwX29mZG1fY2NrX2dhaW5fdGFibGUpLCBscHBoeV9yZXYwX29mZG1fY2NrX2dhaW5fdGFibGUpOworCQliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDEyLCAwKSwKKwkJCUFSUkFZX1NJWkUobHBwaHlfcmV2MF9vZmRtX2Nja19nYWluX3RhYmxlKSwgbHBwaHlfcmV2MF9vZmRtX2Nja19nYWluX3RhYmxlKTsKKwl9IGVsc2UgeworCQliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDEzLCAwKSwKKwkJCUFSUkFZX1NJWkUobHBwaHlfcmV2MV9vZmRtX2Nja19nYWluX3RhYmxlKSwgbHBwaHlfcmV2MV9vZmRtX2Nja19nYWluX3RhYmxlKTsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxMiwgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X3JldjFfb2ZkbV9jY2tfZ2Fpbl90YWJsZSksIGxwcGh5X3JldjFfb2ZkbV9jY2tfZ2Fpbl90YWJsZSk7Cit9CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxNSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfZ2Fpbl9kZWx0YV90YWJsZSksIGxwcGh5X2dhaW5fZGVsdGFfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTAsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X3R4X3Bvd2VyX2NvbnRyb2xfdGFibGUpLCBscHBoeV90eF9wb3dlcl9jb250cm9sX3RhYmxlKTsKK30KKwordm9pZCBscHBoeV9yZXYycGx1c190YWJsZV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwlpbnQgaTsKKworCUI0M19XQVJOX09OKGRldi0+cGh5LnJldiA8IDIpOworCisJZm9yIChpID0gMDsgaSA8IDcwNDsgaSsrKQorCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIzMig3LCBpKSwgMCk7CisKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjgoMiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfbWluX3NpZ19zcV90YWJsZSksIGxwcGh5X21pbl9zaWdfc3FfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MnBsdXNfbm9pc2Vfc2NhbGVfdGFibGUpLCBscHBoeV9yZXYycGx1c19ub2lzZV9zY2FsZV90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MnBsdXNfZmlsdGVyX2NvbnRyb2xfdGFibGUpLCBscHBoeV9yZXYycGx1c19maWx0ZXJfY29udHJvbF90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcmV2MnBsdXNfcHNfY29udHJvbF90YWJsZSksIGxwcGh5X3JldjJwbHVzX3BzX2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTMsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2dhaW5faWR4X3RhYmxlKSwgbHBwaHlfZ2Fpbl9pZHhfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTQsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2F1eF9nYWluX2lkeF90YWJsZSksIGxwcGh5X2F1eF9nYWluX2lkeF90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxNSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfc3dfY29udHJvbF90YWJsZSksIGxwcGh5X3N3X2NvbnRyb2xfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCOCgxNiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfaGZfdGFibGUpLCBscHBoeV9oZl90YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxNywgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfZ2Fpbl92YWx1ZV90YWJsZSksIGxwcGh5X2dhaW5fdmFsdWVfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMTYoMTgsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2dhaW5fdGFibGUpLCBscHBoeV9nYWluX3RhYmxlKTsKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjgoNiwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcGxsX2ZyYWN0aW9uX3RhYmxlKSwgbHBwaHlfcGxsX2ZyYWN0aW9uX3RhYmxlKTsKKwliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDAsIDApLAorCQlBUlJBWV9TSVpFKGxwcGh5X2lxbG9fY2FsX3RhYmxlKSwgbHBwaHlfaXFsb19jYWxfdGFibGUpOworCWI0M19scHRhYl93cml0ZV9idWxrKGRldiwgQjQzX0xQVEFCMzIoOSwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcGFwZF9lcHNfdGFibGUpLCBscHBoeV9wYXBkX2Vwc190YWJsZSk7CisJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMCwgMCksCisJCUFSUkFZX1NJWkUobHBwaHlfcGFwZF9tdWx0X3RhYmxlKSwgbHBwaHlfcGFwZF9tdWx0X3RhYmxlKTsKKworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NDMyNSkgJiYgKGJ1cy0+Y2hpcF9yZXYgPT0gMCkpIHsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxMywgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X2EwX2dhaW5faWR4X3RhYmxlKSwgbHBwaHlfYTBfZ2Fpbl9pZHhfdGFibGUpOworCQliNDNfbHB0YWJfd3JpdGVfYnVsayhkZXYsIEI0M19MUFRBQjE2KDE0LCAwKSwKKwkJCUFSUkFZX1NJWkUobHBwaHlfYTBfYXV4X2dhaW5faWR4X3RhYmxlKSwgbHBwaHlfYTBfYXV4X2dhaW5faWR4X3RhYmxlKTsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIzMigxNywgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X2EwX2dhaW5fdmFsdWVfdGFibGUpLCBscHBoeV9hMF9nYWluX3ZhbHVlX3RhYmxlKTsKKwkJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNigxOCwgMCksCisJCQlBUlJBWV9TSVpFKGxwcGh5X2EwX2dhaW5fdGFibGUpLCBscHBoeV9hMF9nYWluX3RhYmxlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JldjBfMV93cml0ZV9nYWluX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IG9mZnNldCwKKwkJCQlzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSBkYXRhKQoreworCXUzMiB0bXA7CisKKwlCNDNfV0FSTl9PTihkZXYtPnBoeS5yZXYgPj0gMik7CisKKwl0bXAgID0gZGF0YS5wYWQgPDwgMTE7CisJdG1wIHw9IGRhdGEucGdhIDw8IDc7CisJdG1wIHw9IGRhdGEuZ20gIDw8IDQ7CisJdG1wIHw9IGRhdGEuZGFjOworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDEwLCAweEMwICsgb2Zmc2V0KSwgdG1wKTsKKwl0bXAgID0gZGF0YS5iYl9tdWx0IDw8IDIwOworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDEwLCAweDE0MCArIG9mZnNldCksIHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JldjJwbHVzX3dyaXRlX2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgb2Zmc2V0LAorCQkJCXN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGRhdGEpCit7CisJdTMyIHRtcDsKKworCUI0M19XQVJOX09OKGRldi0+cGh5LnJldiA8IDIpOworCisJdG1wICA9IGRhdGEucGFkIDw8IDE2OworCXRtcCB8PSBkYXRhLnBnYSA8PCA4OworCXRtcCB8PSBkYXRhLmdtOworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJdG1wIHw9IDB4MTAgPDwgMjQ7CisJCWVsc2UKKwkJCXRtcCB8PSAweDcwIDw8IDI0OworCX0gZWxzZSB7CisJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQl0bXAgfD0gMHgxNCA8PCAyNDsKKwkJZWxzZQorCQkJdG1wIHw9IDB4N0YgPDwgMjQ7CisJfQorCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDcsIDB4QzAgKyBvZmZzZXQpLCB0bXApOworCXRtcCAgPSBkYXRhLmJiX211bHQgPDwgMjA7CisJdG1wIHw9IGRhdGEuZGFjIDw8IDI4OworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjMyKDcsIDB4MTQwICsgb2Zmc2V0KSwgdG1wKTsKK30KKwordm9pZCBscHBoeV93cml0ZV9nYWluX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IG9mZnNldCwKKwkJCSAgICBzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSBkYXRhKQoreworCWlmIChkZXYtPnBoeS5yZXYgPj0gMikKKwkJbHBwaHlfcmV2MnBsdXNfd3JpdGVfZ2Fpbl90YWJsZShkZXYsIG9mZnNldCwgZGF0YSk7CisJZWxzZQorCQlscHBoeV9yZXYwXzFfd3JpdGVfZ2Fpbl90YWJsZShkZXYsIG9mZnNldCwgZGF0YSk7Cit9CisKK3ZvaWQgbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IG9mZnNldCwgaW50IGNvdW50LAorCQkJCSBzdHJ1Y3QgbHBwaHlfdHhfZ2Fpbl90YWJsZV9lbnRyeSAqdGFibGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBvZmZzZXQ7IGkgPCBjb3VudDsgaSsrKQorCQlscHBoeV93cml0ZV9nYWluX3RhYmxlKGRldiwgaSwgdGFibGVbaV0pOworfQorCit2b2lkIGxwcGh5X2luaXRfdHhfZ2Fpbl90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisKKwlzd2l0Y2ggKGRldi0+cGh5LnJldikgeworCWNhc2UgMDoKKwkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX05PUEEpIHx8CisJCSAgICAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9IR1BBKSkKKwkJCWxwcGh5X3dyaXRlX2dhaW5fdGFibGVfYnVsayhkZXYsIDAsIDEyOCwKKwkJCQkJbHBwaHlfcmV2MF9ub3BhX3R4X2dhaW5fdGFibGUpOworCQllbHNlIGlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoZGV2LCAwLCAxMjgsCisJCQkJCWxwcGh5X3JldjBfMmdoel90eF9nYWluX3RhYmxlKTsKKwkJZWxzZQorCQkJbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKGRldiwgMCwgMTI4LAorCQkJCQlscHBoeV9yZXYwXzVnaHpfdHhfZ2Fpbl90YWJsZSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX05PUEEpIHx8CisJCSAgICAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9IR1BBKSkKKwkJCWxwcGh5X3dyaXRlX2dhaW5fdGFibGVfYnVsayhkZXYsIDAsIDEyOCwKKwkJCQkJbHBwaHlfcmV2MV9ub3BhX3R4X2dhaW5fdGFibGUpOworCQllbHNlIGlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoZGV2LCAwLCAxMjgsCisJCQkJCWxwcGh5X3JldjFfMmdoel90eF9nYWluX3RhYmxlKTsKKwkJZWxzZQorCQkJbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKGRldiwgMCwgMTI4LAorCQkJCQlscHBoeV9yZXYxXzVnaHpfdHhfZ2Fpbl90YWJsZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfaGkgJiBCNDNfQkZIX05PUEEpCisJCQlscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoZGV2LCAwLCAxMjgsCisJCQkJCWxwcGh5X3JldjJfbm9wYV90eF9nYWluX3RhYmxlKTsKKwkJZWxzZSBpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQkJbHBwaHlfd3JpdGVfZ2Fpbl90YWJsZV9idWxrKGRldiwgMCwgMTI4LAorCQkJCQlscHBoeV9yZXYyXzJnaHpfdHhfZ2Fpbl90YWJsZSk7CisJCWVsc2UKKwkJCWxwcGh5X3dyaXRlX2dhaW5fdGFibGVfYnVsayhkZXYsIDAsIDEyOCwKKwkJCQkJbHBwaHlfcmV2Ml81Z2h6X3R4X2dhaW5fdGFibGUpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuaAppbmRleCAwYjhkMDI4Li44NGYxZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oCkBAIC0yNiw2ICsyNiwxOSBAQAogCQkJICB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIGNvbnN0IHZvaWQgKmRhdGEpOwogCiB2b2lkIGIyMDYyX3VwbG9hZF9pbml0X3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7Cit2b2lkIGIyMDYzX3VwbG9hZF9pbml0X3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiAKK3N0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IHsKKwl1OCBnbSwgIHBnYSwgIHBhZCwgIGRhYywgIGJiX211bHQ7Cit9OworCit2b2lkIGxwcGh5X3dyaXRlX2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgb2Zmc2V0LAorCQkJICAgIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5IGRhdGEpOwordm9pZCBscHBoeV93cml0ZV9nYWluX3RhYmxlX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsCisJCQkJIHN0cnVjdCBscHBoeV90eF9nYWluX3RhYmxlX2VudHJ5ICp0YWJsZSk7CisKK3ZvaWQgbHBwaHlfcmV2MF8xX3RhYmxlX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKK3ZvaWQgbHBwaHlfcmV2MnBsdXNfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBscHBoeV9pbml0X3R4X2dhaW5fdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAogI2VuZGlmIC8qIEI0M19UQUJMRVNfTFBQSFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My93YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMKaW5kZXggZTFlMjBmNi4uOTdjNzkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAliYWNrdXAgPSBiNDNfb2ZkbXRhYl9yZWFkMTYoZGV2LCBCNDNfT0ZETVRBQl9QV1JEWU4yLCAwKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfUFdSRFlOMiwgMCwgNyk7CiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX1VOS05PV05fQVBIWSwgMCwgMCk7Ci0JYjQzX2R1bW15X3RyYW5zbWlzc2lvbihkZXYpOworCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2LCB0cnVlLCB0cnVlKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfUFdSRFlOMiwgMCwgYmFja3VwKTsKIH0KIApAQCAtNjI4LDcgKzYyOCw3IEBACiAJCQlCNDNfV0FSTl9PTigxKTsKIAkJfQogCQliNDNfd2FfYm9hcmRzX2coZGV2KTsKLQl9IGVsc2UgeyAvKiBObyBOIFBIWSBzdXBwb3J0IHNvIGZhciAqLworCX0gZWxzZSB7IC8qIE5vIE4gUEhZIHN1cHBvcnQgc28gZmFyLCBMUCBQSFkgaXMgaW4gcGh5X2xwLmMgKi8KIAkJQjQzX1dBUk5fT04oMSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCA1NWYzNmE3Li4xNGY1NDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTE4MCwxMSArMTgwLDEyIEBACiAvKiBHZW5lcmF0ZSBhIFRYIGRhdGEgaGVhZGVyLiAqLwogaW50IGI0M19nZW5lcmF0ZV90eGhkcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCSAgICAgICB1OCAqX3R4aGRyLAotCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJhZ21lbnRfZGF0YSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBmcmFnbWVudF9sZW4sCisJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWcsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCSAgICAgICB1MTYgY29va2llKQogeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyYWdtZW50X2RhdGEgPSBza2JfZnJhZy0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgZnJhZ21lbnRfbGVuID0gc2tiX2ZyYWctPmxlbjsKIAlzdHJ1Y3QgYjQzX3R4aGRyICp0eGhkciA9IChzdHJ1Y3QgYjQzX3R4aGRyICopX3R4aGRyOwogCWNvbnN0IHN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9oZHIgKndsaGRyID0KQEAgLTIzNyw3ICsyMzgsNyBAQAogCQlpbnQgd2xoZHJfbGVuOwogCQlzaXplX3QgaXZfbGVuOwogCi0JCUI0M19XQVJOX09OKGtleV9pZHggPj0gZGV2LT5tYXhfbnJfa2V5cyk7CisJCUI0M19XQVJOX09OKGtleV9pZHggPj0gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCQlrZXkgPSAmKGRldi0+a2V5W2tleV9pZHhdKTsKIAogCQlpZiAodW5saWtlbHkoIWtleS0+a2V5Y29uZikpIHsKQEAgLTI1OCw5ICsyNTksMjYgQEAKIAkJbWFjX2N0bCB8PSAoa2V5LT5hbGdvcml0aG0gPDwgQjQzX1RYSF9NQUNfS0VZQUxHX1NISUZUKSAmCiAJCQkgICBCNDNfVFhIX01BQ19LRVlBTEc7CiAJCXdsaGRyX2xlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7Ci0JCWl2X2xlbiA9IG1pbigoc2l6ZV90KSBpbmZvLT5jb250cm9sLmh3X2tleS0+aXZfbGVuLAotCQkJICAgICBBUlJBWV9TSVpFKHR4aGRyLT5pdikpOwotCQltZW1jcHkodHhoZHItPml2LCAoKHU4ICopIHdsaGRyKSArIHdsaGRyX2xlbiwgaXZfbGVuKTsKKwkJaWYgKGtleS0+YWxnb3JpdGhtID09IEI0M19TRUNfQUxHT19US0lQKSB7CisJCQl1MTYgcGhhc2Uxa2V5WzVdOworCQkJaW50IGk7CisJCQkvKiB3ZSBnaXZlIHRoZSBwaGFzZTFrZXkgYW5kIGl2MTYgaGVyZSwgdGhlIGtleSBpcyBzdG9yZWQgaW4KKwkJCSAqIHNobS4gV2l0aCB0aGF0IHRoZSBoYXJkd2FyZSBjYW4gZG8gcGhhc2UgMiBhbmQgZW5jcnlwdGlvbi4KKwkJCSAqLworCQkJaWVlZTgwMjExX2dldF90a2lwX2tleShpbmZvLT5jb250cm9sLmh3X2tleSwgc2tiX2ZyYWcsCisJCQkJCUlFRUU4MDIxMV9US0lQX1AxX0tFWSwgKHU4KilwaGFzZTFrZXkpOworCQkJLyogcGhhc2Uxa2V5IGlzIGluIGhvc3QgZW5kaWFuLiBDb3B5IHRvIGxpdHRsZS1lbmRpYW4gdHhoZHItPml2LiAqLworCQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJCXR4aGRyLT5pdltpICogMiArIDBdID0gcGhhc2Uxa2V5W2ldOworCQkJCXR4aGRyLT5pdltpICogMiArIDFdID0gcGhhc2Uxa2V5W2ldID4+IDg7CisJCQl9CisJCQkvKiBpdjE2ICovCisJCQltZW1jcHkodHhoZHItPml2ICsgMTAsICgodTggKikgd2xoZHIpICsgd2xoZHJfbGVuLCAzKTsKKwkJfSBlbHNlIHsKKwkJCWl2X2xlbiA9IG1pbigoc2l6ZV90KSBpbmZvLT5jb250cm9sLmh3X2tleS0+aXZfbGVuLAorCQkJCSAgICAgQVJSQVlfU0laRSh0eGhkci0+aXYpKTsKKwkJCW1lbWNweSh0eGhkci0+aXYsICgodTggKikgd2xoZHIpICsgd2xoZHJfbGVuLCBpdl9sZW4pOworCQl9CiAJfQogCWlmIChiNDNfaXNfb2xkX3R4aGRyX2Zvcm1hdChkZXYpKSB7CiAJCWI0M19nZW5lcmF0ZV9wbGNwX2hkcigoc3RydWN0IGI0M19wbGNwX2hkcjQgKikoJnR4aGRyLT5vbGRfZm9ybWF0LnBsY3ApLApAQCAtNTc4LDcgKzU5Niw3IEBACiAJCSAqIGtleSBpbmRleCwgYnV0IHRoZSB1Y29kZSBwYXNzZWQgaXQgc2xpZ2h0bHkgZGlmZmVyZW50LgogCQkgKi8KIAkJa2V5aWR4ID0gYjQzX2tpZHhfdG9fcmF3KGRldiwga2V5aWR4KTsKLQkJQjQzX1dBUk5fT04oa2V5aWR4ID49IGRldi0+bWF4X25yX2tleXMpOworCQlCNDNfV0FSTl9PTihrZXlpZHggPj0gQVJSQVlfU0laRShkZXYtPmtleSkpOwogCiAJCWlmIChkZXYtPmtleVtrZXlpZHhdLmFsZ29yaXRobSAhPSBCNDNfU0VDX0FMR09fTk9ORSkgewogCQkJd2xoZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmY3RsKTsKQEAgLTY1NSw2ICs2NzMsNyBAQAogCQlzdGF0dXMuZnJlcSA9IGNoYW5pZCArIDI0MDA7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwljYXNlIEI0M19QSFlUWVBFX0xQOgogCQkvKiBjaGFuaWQgaXMgdGhlIFNITSBjaGFubmVsIGNvb2tpZS4gV2hpY2ggaXMgdGhlIHBsYWluCiAJCSAqIGNoYW5uZWwgbnVtYmVyIGluIGI0My4gKi8KIAkJaWYgKGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fNUdIWikgewpAQCAtNjcwLDcgKzY4OSw4IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYtPndsLT5odywgc2tiLCAmc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYtPndsLT5odywgc2tiKTsKIAogCXJldHVybjsKIGRyb3A6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuaAppbmRleCA0ZmIyYTE5Li4zNTMwZGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmgKQEAgLTE3Niw4ICsxNzYsNyBAQAogCiBpbnQgYjQzX2dlbmVyYXRlX3R4aGRyKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkJICAgICAgIHU4ICogdHhoZHIsCi0JCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcmFnbWVudF9kYXRhLAotCQkgICAgICAgdW5zaWduZWQgaW50IGZyYWdtZW50X2xlbiwKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2JfZnJhZywKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhjdGwsIHUxNiBjb29raWUpOwogCiAvKiBUcmFuc21pdCBTdGF0dXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYwppbmRleCAyZjkwZmI5Li44NjY0MDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jCkBAIC0xMzY2LDE1ICsxMzY2LDI1IEBACiAJcmluZyA9IHByaW9yaXR5X3RvX3R4cmluZyhkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOwogCUI0M2xlZ2FjeV9XQVJOX09OKCFyaW5nLT50eCk7Ci0JaWYgKHVubGlrZWx5KGZyZWVfc2xvdHMocmluZykgPCBTTE9UU19QRVJfUEFDS0VUKSkgewotCQliNDNsZWdhY3l3YXJuKGRldi0+d2wsICJETUEgcXVldWUgb3ZlcmZsb3dcbiIpOworCisJaWYgKHVubGlrZWx5KHJpbmctPnN0b3BwZWQpKSB7CisJCS8qIFdlIGdldCBoZXJlIG9ubHkgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBtYWM4MDIxMS4KKwkJICogQmVjYXVzZSBvZiBhIHJhY2UsIG9uZSBwYWNrZXQgbWF5IGJlIHF1ZXVlZCBhZnRlcgorCQkgKiB0aGUgcXVldWUgaXMgc3RvcHBlZCwgdGh1cyB3ZSBnb3QgY2FsbGVkIHdoZW4gd2Ugc2hvdWxkbid0LgorCQkgKiBGb3Igbm93LCBqdXN0IHJlZnVzZSB0aGUgdHJhbnNtaXQuICovCisJCWlmIChiNDNsZWdhY3lfZGVidWcoZGV2LCBCNDNsZWdhY3lfREJHX0RNQVZFUkJPU0UpKQorCQkJYjQzbGVnYWN5ZXJyKGRldi0+d2wsICJQYWNrZXQgYWZ0ZXIgcXVldWUgc3RvcHBlZFxuIik7CiAJCWVyciA9IC1FTk9TUEM7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JLyogQ2hlY2sgaWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGluIG1hYzgwMjExLAotCSAqIGJ1dCB3ZSBnb3QgY2FsbGVkIG5ldmVydGhlbGVzcy4KLQkgKiBUaGF0IHdvdWxkIGJlIGEgbWFjODAyMTEgYnVnLiAqLwotCUI0M2xlZ2FjeV9CVUdfT04ocmluZy0+c3RvcHBlZCk7CisKKwlpZiAodW5saWtlbHkoV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkpKSB7CisJCS8qIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGEgcmVhbCBlcnJvciB3aXRoIHRoZSBxdWV1ZQorCQkgKiBmdWxsLCBidXQgcXVldWVzIG5vdCBzdG9wcGVkLiAqLworCQliNDNsZWdhY3llcnIoZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7CisJCWVyciA9IC1FTk9TUEM7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAllcnIgPSBkbWFfdHhfZnJhZ21lbnQocmluZywgc2tiKTsKIAlpZiAodW5saWtlbHkoZXJyID09IC1FTk9LRVkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCBjNDk3M2MxLi4xZDkyMjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTEyNTIsNyArMTI1Miw3IEBACiAJd2wtPmN1cnJlbnRfYmVhY29uID0gYmVhY29uOwogCXdsLT5iZWFjb24wX3VwbG9hZGVkID0gMDsKIAl3bC0+YmVhY29uMV91cGxvYWRlZCA9IDA7Ci0JcXVldWVfd29yayh3bC0+aHctPndvcmtxdWV1ZSwgJndsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpOwogfQogCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfc2V0X2JlYWNvbl9pbnQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LApAQCAtMjMwMCw3ICsyMzAwLDcgQEAKIAkJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDUwKTsKIAllbHNlCiAJCWRlbGF5ID0gcm91bmRfamlmZmllc19yZWxhdGl2ZShIWiAqIDE1KTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsod2wtPmh3LT53b3JrcXVldWUsICZkZXYtPnBlcmlvZGljX3dvcmssIGRlbGF5KTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJmRldi0+cGVyaW9kaWNfd29yaywgZGVsYXkpOwogb3V0OgogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KQEAgLTIzMTEsNyArMjMxMSw3IEBACiAKIAlkZXYtPnBlcmlvZGljX3N0YXRlID0gMDsKIAlJTklUX0RFTEFZRURfV09SSyh3b3JrLCBiNDNsZWdhY3lfcGVyaW9kaWNfd29ya19oYW5kbGVyKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53bC0+aHctPndvcmtxdWV1ZSwgd29yaywgMCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndsLT5odywgd29yaywgMCk7CiB9CiAKIC8qIFZhbGlkYXRlIGFjY2VzcyB0byB0aGUgY2hpcCAoU0hNKSAqLwpAQCAtMjgzNiw5ICsyODM2LDcgQEAKIAogc3RhdGljIHZvaWQgYjQzbGVnYWN5X29wX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgdW5zaWduZWQgaW50IGNoYW5nZWQsCi0JCQkJCSAgdW5zaWduZWQgaW50ICpmZmxhZ3MsCi0JCQkJCSAgaW50IG1jX2NvdW50LAotCQkJCQkgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQorCQkJCQkgIHVuc2lnbmVkIGludCAqZmZsYWdzLHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wgPSBod190b19iNDNsZWdhY3lfd2woaHcpOwogCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKQEAgLTMxMDgsMTYgKzMxMDYsMjAgQEAKIAkgICAgYnVzLT5wY2ljb3JlLmRldi0+aWQucmV2aXNpb24gPD0gNSkgewogCQkvKiBJTUNGR0xPIHRpbWVvdXRzIHdvcmthcm91bmQuICovCiAJCXRtcCA9IHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9JTUNGR0xPKTsKLQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKLQkJdG1wICY9IH5TU0JfSU1DRkdMT19TRVJUTzsKIAkJc3dpdGNoIChidXMtPmJ1c3R5cGUpIHsKIAkJY2FzZSBTU0JfQlVTVFlQRV9QQ0k6CiAJCWNhc2UgU1NCX0JVU1RZUEVfUENNQ0lBOgorCQkJdG1wICY9IH5TU0JfSU1DRkdMT19SRVFUTzsKKwkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fU0VSVE87CiAJCQl0bXAgfD0gMHgzMjsKIAkJCWJyZWFrOwogCQljYXNlIFNTQl9CVVNUWVBFX1NTQjoKKwkJCXRtcCAmPSB+U1NCX0lNQ0ZHTE9fUkVRVE87CisJCQl0bXAgJj0gflNTQl9JTUNGR0xPX1NFUlRPOwogCQkJdG1wIHw9IDB4NTM7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOwogCQl9CiAJCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfSU1DRkdMTywgdG1wKTsKIAl9CkBAIC0zODg1LDcgKzM4ODcsNyBAQAogCWlmIChiNDNsZWdhY3lfc3RhdHVzKGRldikgPCBCNDNsZWdhY3lfU1RBVF9JTklUSUFMSVpFRCkKIAkJcmV0dXJuOwogCWI0M2xlZ2FjeWluZm8oZGV2LT53bCwgIkNvbnRyb2xsZXIgUkVTRVQgKCVzKSAuLi5cbiIsIHJlYXNvbik7Ci0JcXVldWVfd29yayhkZXYtPndsLT5ody0+d29ya3F1ZXVlLCAmZGV2LT5yZXN0YXJ0X3dvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKGRldi0+d2wtPmh3LCAmZGV2LT5yZXN0YXJ0X3dvcmspOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3htaXQuYwppbmRleCBiOGUzOWRkLi4xMDNmM2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS94bWl0LmMKQEAgLTU5MCw4ICs1OTAsOCBAQAogCQkgICAgICAgY2hhbnN0YXQpOwogCX0KIAotCWRldi0+c3RhdHMubGFzdF9yeCA9IGppZmZpZXM7Ci0JaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LT53bC0+aHcsIHNrYiwgJnN0YXR1cyk7CisJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LT53bC0+aHcsIHNrYik7CiAKIAlyZXR1cm47CiBkcm9wOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCmluZGV4IDJlOWZiMGYuLjdmOWQ4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiBzdHJ1Y3QgaG9zdGFwX2llZWU4MDIxMV9tZ210IHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKQEAgLTg1LDggKzg2LDExIEBACiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cyk7CiAKIHZvaWQgaG9zdGFwX2R1bXBfdHhfODAyMTEoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaG9zdGFwX2RhdGFfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWludCBob3N0YXBfbWdtdF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZiAvKiBIT1NUQVBfODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCmluZGV4IGQzMTNiMDAuLjkwMTA4YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKQEAgLTUzLDcgKzUzLDggQEAKIC8qIGhhcmRfc3RhcnRfeG1pdCBmdW5jdGlvbiBmb3IgZGF0YSBpbnRlcmZhY2VzICh3bGFuIywgd2xhbiN3ZHMjLCB3bGFuI3N0YSkKICAqIENvbnZlcnQgRXRoZXJuZXQgaGVhZGVyIGludG8gYSBzdWl0YWJsZSBJRUVFIDgwMi4xMSBoZWFkZXIgZGVwZW5kaW5nIG9uCiAgKiBkZXZpY2UgY29uZmlndXJhdGlvbi4gKi8KLWludCBob3N0YXBfZGF0YV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCBob3N0YXBfZGF0YV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKQEAgLTc1LDcgKzc2LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfZGF0YV9zdGFydF94bWl0OiBzaG9ydCBza2IgIgogCQkgICAgICAgIihsZW49JWQpXG4iLCBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmIChsb2NhbC0+ZGRldiAhPSBkZXYpIHsKQEAgLTg5LDE0ICs5MCwxNCBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcmlzbTJfdHg6IHRyeWluZyB0byB1c2UgIgogCQkJICAgICAgICJBUCBkZXZpY2Ugd2l0aCBFdGhlcm5ldCBuZXQgZGV2XG4iLCBkZXYtPm5hbWUpOwogCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAobG9jYWwtPml3X21vZGUgPT0gSVdfTU9ERV9SRVBFQVQpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcHJpc20yX3R4OiB0cnlpbmcgdG8gdXNlICIKIAkJCSAgICAgICAibm9uLVdEUyBsaW5rIGluIFJlcGVhdGVyIG1vZGVcbiIsIGRldi0+bmFtZSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfSBlbHNlIGlmIChsb2NhbC0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBICYmCiAJCQkgICAobG9jYWwtPndkc190eXBlICYgSE9TVEFQX1dEU19BUF9DTElFTlQpICYmCiAJCQkgICBtZW1jbXAoc2tiLT5kYXRhICsgRVRIX0FMRU4sIGRldi0+ZGV2X2FkZHIsCkBAIC0yMTAsMTMgKzIxMSwxMyBAQAogCQlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCBuZWVkX2hlYWRyb29tLCBuZWVkX3RhaWxyb29tLAogCQkJCSAgICAgR0ZQX0FUT01JQykpIHsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCX0gZWxzZSBpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBuZWVkX2hlYWRyb29tKSB7CiAJCXN0cnVjdCBza19idWZmICp0bXAgPSBza2I7CkBAIC0yMjQsMTMgKzIyNSwxMyBAQAogCQlrZnJlZV9za2IodG1wKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQlpZmFjZS0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfSBlbHNlIHsKIAkJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQlpZmFjZS0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfQogCkBAIC0yNTYsMTIgKzI1NywxMyBAQAogCS8qIFNlbmQgSUVFRSA4MDIuMTEgZW5jYXBzdWxhdGVkIGZyYW1lIHVzaW5nIHRoZSBtYXN0ZXIgcmFkaW8gZGV2aWNlICovCiAJc2tiLT5kZXYgPSBsb2NhbC0+ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCiAvKiBoYXJkX3N0YXJ0X3htaXQgZnVuY3Rpb24gZm9yIGhvc3RhcGQgd2xhbiNhcCBpbnRlcmZhY2VzICovCi1pbnQgaG9zdGFwX21nbXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgaG9zdGFwX21nbXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CkBAIC0yNzYsNyArMjc4LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfbWdtdF9zdGFydF94bWl0OiBzaG9ydCBza2IgIgogCQkgICAgICAgIihsZW49JWQpXG4iLCBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmYWNlLT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0zMDEsNyArMzAzLDcgQEAKIAkvKiBTZW5kIElFRUUgODAyLjExIGVuY2Fwc3VsYXRlZCBmcmFtZSB1c2luZyB0aGUgbWFzdGVyIHJhZGlvIGRldmljZSAqLwogCXNrYi0+ZGV2ID0gbG9jYWwtPmRldjsKIAlkZXZfcXVldWVfeG1pdChza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIApAQCAtMzczLDExICszNzUsMTIgQEAKIC8qIGhhcmRfc3RhcnRfeG1pdCBmdW5jdGlvbiBmb3IgbWFzdGVyIHJhZGlvIGludGVyZmFjZSB3aWZpIy4KICAqIEFQIHByb2Nlc3NpbmcgKFRYIHJhdGUgY29udHJvbCwgcG93ZXIgc2F2ZSBidWZmZXJpbmcsIGV0Yy4pLgogICogVXNlIGhhcmR3YXJlIFRYIGZ1bmN0aW9uIHRvIHNlbmQgdGhlIGZyYW1lLiAqLwotaW50IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgaG9zdGFwX21hc3Rlcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCWludCByZXQgPSBORVRERVZfVFhfQlVTWTsKKwluZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfQlVTWTsKIAl1MTYgZmM7CiAJc3RydWN0IGhvc3RhcF90eF9kYXRhIHR4OwogCWFwX3R4X3JldCB0eF9yZXQ7CkBAIC0zOTYsNyArMzk5LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnZhbGlkIHNrYi0+Y2IgbWFnaWMgKDB4JTA4eCwgIgogCQkgICAgICAgImV4cGVjdGVkIDB4JTA4eClcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIG1ldGEtPm1hZ2ljLCBIT1NUQVBfU0tCX1RYX0RBVEFfTUFHSUMpOwotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC00MTQsNyArNDE3LDcgQEAKIAlpZiAoc2tiLT5sZW4gPCAyNCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhvc3RhcF9tYXN0ZXJfc3RhcnRfeG1pdDogc2hvcnQgc2tiICIKIAkJICAgICAgICIobGVuPSVkKVxuIiwgZGV2LT5uYW1lLCBza2ItPmxlbik7Ci0JCXJldCA9IDA7CisJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZ290byBmYWlsOwogCX0KQEAgLTQ0MSwxMyArNDQ0LDEzIEBACiAJCQkgICAgICAgZGV2LT5uYW1lLCBtZXRhLT5ldGhlcnR5cGUpOwogCQkJaG9zdGFwX2R1bXBfdHhfODAyMTEoZGV2LT5uYW1lLCBza2IpOwogCi0JCQlyZXQgPSAwOyAvKiBkcm9wIHBhY2tldCAqLworCQkJcmV0ID0gTkVUREVWX1RYX09LOyAvKiBkcm9wIHBhY2tldCAqLwogCQkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQlicmVhazsKIAljYXNlIEFQX1RYX0RST1A6Ci0JCXJldCA9IDA7IC8qIGRyb3AgcGFja2V0ICovCisJCXJldCA9IE5FVERFVl9UWF9PSzsgLyogZHJvcCBwYWNrZXQgKi8KIAkJaWZhY2UtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZ290byBmYWlsOwogCWNhc2UgQVBfVFhfUkVUUlk6CkBAIC00NTUsNyArNDU4LDcgQEAKIAljYXNlIEFQX1RYX0JVRkZFUkVEOgogCQkvKiBkbyBub3QgZnJlZSBza2IgaGVyZSwgaXQgd2lsbCBiZSBmcmVlZCB3aGVuIHRoZQogCQkgKiBidWZmZXJlZCBmcmFtZSBpcyBzZW50L3RpbWVkIG91dCAqLwotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWdvdG8gdHhfZXhpdDsKIAl9CiAKQEAgLTUwMSw3ICs1MDQsNyBAQAogCQkJICAgICAgICJmcmFtZSAoZHJvcF91bmVuY3J5cHRlZD0xKVxuIiwgZGV2LT5uYW1lKTsKIAkJfQogCQlpZmFjZS0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWdvdG8gZmFpbDsKIAl9CiAKQEAgLTUxMCw3ICs1MTMsNyBAQAogCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVFggLSBlbmNyeXB0aW9uIGZhaWxlZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJcmV0ID0gMDsKKwkJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKQEAgLTUxOSwyMyArNTIyLDIzIEBACiAJCQkgICAgICAgImV4cGVjdGVkIDB4JTA4eCkgYWZ0ZXIgaG9zdGFwX3R4X2VuY3J5cHRcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lLCBtZXRhLT5tYWdpYywKIAkJCSAgICAgICBIT1NUQVBfU0tCX1RYX0RBVEFfTUFHSUMpOwotCQkJcmV0ID0gMDsKKwkJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlnb3RvIGZhaWw7CiAJCX0KIAl9CiAKIAlpZiAobG9jYWwtPmZ1bmMtPnR4ID09IE5VTEwgfHwgbG9jYWwtPmZ1bmMtPnR4KHNrYiwgZGV2KSkgewotCQlyZXQgPSAwOworCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCWlmYWNlLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJfSBlbHNlIHsKLQkJcmV0ID0gMDsKKwkJcmV0ID0gTkVUREVWX1RYX09LOwogCQlpZmFjZS0+c3RhdHMudHhfcGFja2V0cysrOwogCQlpZmFjZS0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJfQogCiAgZmFpbDoKLQlpZiAoIXJldCAmJiBza2IpCisJaWYgKHJldCA9PSBORVRERVZfVFhfT0sgJiYgc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAgdHhfZXhpdDoKIAlpZiAodHguc3RhX3B0cikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwppbmRleCA2MzM3NDAyLi5hZDhlYWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC02NjYsNyArNjY2LDggQEAKIAkgKiBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgogCSAqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpIHsKLQkJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkUgfCBJUlFfSEFORExFX1BSRVNFTlQ7CisJCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwKKwkJCQkgICAgICAgSVJRX0hBTkRMRV9QUkVTRU5UOwogCQlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJCWxpbmstPmlycS5IYW5kbGVyID0gcHJpc20yX2ludGVycnVwdDsKIAkJbGluay0+aXJxLkluc3RhbmNlID0gZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCmluZGV4IDg1Y2M3OTkuLmE4MTMxMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKQEAgLTQsNyArNCw3IEBACiAKIGNvbmZpZyBJUFcyMTAwCiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAyMTAwIE5ldHdvcmsgQ29ubmVjdGlvbiIKLQlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTl84MDIxMSAmJiBDRkc4MDIxMQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IExJQjgwMjExCkBAIC02Myw3ICs2Myw3IEBACiAKIGNvbmZpZyBJUFcyMjAwCiAJdHJpc3RhdGUgIkludGVsIFBSTy9XaXJlbGVzcyAyMjAwQkcgYW5kIDI5MTVBQkcgTmV0d29yayBDb25uZWN0aW9uIgotCWRlcGVuZHMgb24gUENJICYmIFdMQU5fODAyMTEKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOXzgwMjExICYmIENGRzgwMjExCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgTElCODAyMTEKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiBjb25maWcgTElCSVBXCiAJdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTl84MDIxMSAmJiBDRkc4MDIxMQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19BUkM0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA3NTVjMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4NyArMCwwIEBACi0vKgotICogTWVyZ2VkIHdpdGggbWFpbmxpbmUgaWVlZTgwMjExLmggaW4gQXVnIDIwMDQuICBPcmlnaW5hbCBpZWVlODAyXzExCi0gKiByZW1haW5zIGNvcHlyaWdodCBieSB0aGUgb3JpZ2luYWwgYXV0aG9ycwotICoKLSAqIFBvcnRpb25zIG9mIHRoZSBtZXJnZWQgY29kZSBhcmUgYmFzZWQgb24gSG9zdCBBUCAoc29mdHdhcmUgd2lyZWxlc3MKLSAqIExBTiBhY2Nlc3MgcG9pbnQpIGRyaXZlciBmb3IgSW50ZXJzaWwgUHJpc20yLzIuNS8zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLCBTU0ggQ29tbXVuaWNhdGlvbnMgU2VjdXJpdHkgQ29ycCBhbmQgSm91bmkgTWFsaW5lbgotICogPGpAdzEuZmk+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KLSAqCi0gKiBBZGFwdGlvbiB0byBhIGdlbmVyaWMgSUVFRSA4MDIuMTEgc3RhY2sgYnkgSmFtZXMgS2V0cmVub3MKLSAqIDxqa2V0cmVub0BsaW51eC5pbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSwgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBTZWUgUkVBRE1FIGFuZCBDT1BZSU5HIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIEFQSSBWZXJzaW9uIEhpc3RvcnkKLSAqIDEuMC54IC0tIEluaXRpYWwgdmVyc2lvbgotICogMS4xLnggLS0gQWRkZWQgcmFkaW90YXAsIFFvUywgVElNLCBpZWVlODAyMTFfZ2VvIEFQSXMsCi0gKiAgICAgICAgICB2YXJpb3VzIHN0cnVjdHVyZSBjaGFuZ2VzLCBhbmQgY3J5cHRvIEFQSSBpbml0IG1ldGhvZAotICovCi0jaWZuZGVmIElFRUU4MDIxMV9ICi0jZGVmaW5lIElFRUU4MDIxMV9ICi0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4JLyogRVRIX0FMRU4gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogQVJSQVlfU0laRSAqLwotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+Ci0KLSNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLQotI2RlZmluZSBJRUVFODAyMTFfVkVSU0lPTiAiZ2l0LTEuMS4xMyIKLQotI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4JCTIzMDQKLS8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KLSAgIDYuMi4xLjEuMi4KLQotICAgVGhlIGZpZ3VyZSBpbiBzZWN0aW9uIDcuMS4yIHN1Z2dlc3RzIGEgYm9keSBzaXplIG9mIHVwIHRvIDIzMTIKLSAgIGJ5dGVzIGlzIGFsbG93ZWQsIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2luZywgSSBzdXNwZWN0IHRoaXMKLSAgIHJlcHJlc2VudHMgdGhlIDIzMDQgYnl0ZXMgb2YgcmVhbCBkYXRhLCBwbHVzIGEgcG9zc2libGUgOCBieXRlcyBvZgotICAgV0VQIElWIGFuZCBJQ1YuICh0aGlzIGludGVycHJldGF0aW9uIHN1Z2dlc3RlZCBieSBSYW1pcm8gQmFycmVpcm8pICovCi0KLSNkZWZpbmUgSUVFRTgwMjExXzFBRERSX0xFTiAxMAotI2RlZmluZSBJRUVFODAyMTFfMkFERFJfTEVOIDE2Ci0jZGVmaW5lIElFRUU4MDIxMV8zQUREUl9MRU4gMjQKLSNkZWZpbmUgSUVFRTgwMjExXzRBRERSX0xFTiAzMAotI2RlZmluZSBJRUVFODAyMTFfRkNTX0xFTiAgICA0Ci0jZGVmaW5lIElFRUU4MDIxMV9ITEVOCQkJKElFRUU4MDIxMV80QUREUl9MRU4pCi0jZGVmaW5lIElFRUU4MDIxMV9GUkFNRV9MRU4JCShJRUVFODAyMTFfREFUQV9MRU4gKyBJRUVFODAyMTFfSExFTikKLQotI2RlZmluZSBNSU5fRlJBR19USFJFU0hPTEQgICAgIDI1NlUKLSNkZWZpbmUJTUFYX0ZSQUdfVEhSRVNIT0xEICAgICAyMzQ2VQotCi0vKiBRT1MgY29udHJvbCAqLwotI2RlZmluZSBJRUVFODAyMTFfUUNUTF9USUQJCTB4MDAwRgotCi0vKiBkZWJ1ZyBtYWNyb3MgKi8KLQotI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKLWV4dGVybiB1MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsOwotI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgKGxldmVsKSkgXAotICBwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExOiAlYyAlcyAiIGZtdCwgXAotICAgICAgICAgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi1zdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JhdGVsaW1pdF9kZWJ1Zyh1MzIgbGV2ZWwpCi17Ci0JcmV0dXJuIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiBsZXZlbCkgJiYgbmV0X3JhdGVsaW1pdCgpOwotfQotI2Vsc2UKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yYXRlbGltaXRfZGVidWcodTMyIGxldmVsKQotewotCXJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCi0KLS8qCi0gKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbToKLSAqCi0gKiBJZiB5b3UgYXJlIGRlZmluaW5nIGEgbmV3IGRlYnVnIGNsYXNzaWZpY2F0aW9uLCBzaW1wbHkgYWRkIGl0IHRvIHRoZSAjZGVmaW5lCi0gKiBsaXN0IGhlcmUgaW4gdGhlIGZvcm0gb2Y6Ci0gKgotICogI2RlZmluZSBJRUVFODAyMTFfRExfeHh4eCBWQUxVRQotICoKLSAqIHNoaWZ0aW5nIHZhbHVlIHRvIHRoZSBsZWZ0IG9uZSBiaXQgZnJvbSB0aGUgcHJldmlvdXMgZW50cnkuICB4eHh4IHNob3VsZCBiZQotICogdGhlIG5hbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIChmb3IgZXhhbXBsZSwgV0VQKQotICoKLSAqIFlvdSB0aGVuIG5lZWQgdG8gZWl0aGVyIGFkZCBhIElFRUU4MDIxMV94eHh4X0RFQlVHKCkgbWFjcm8gZGVmaW5pdGlvbiBmb3IgeW91cgotICogY2xhc3NpZmljYXRpb24sIG9yIHVzZSBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX3h4eHgsIC4uLikgd2hlbmV2ZXIgeW91IHdhbnQKLSAqIHRvIHNlbmQgb3V0cHV0IHRvIHRoYXQgY2xhc3NpZmljYXRpb24uCi0gKgotICogVG8gYWRkIHlvdXIgZGVidWcgbGV2ZWwgdG8gdGhlIGxpc3Qgb2YgbGV2ZWxzIHNlZW4gd2hlbiB5b3UgcGVyZm9ybQotICoKLSAqICUgY2F0IC9wcm9jL25ldC9pZWVlODAyMTEvZGVidWdfbGV2ZWwKLSAqCi0gKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGllZWU4MDIxMV9kZWJ1Z19sZXZlbCBhcnJheS4KLSAqCi0gKiBJZiB5b3UgZG8gbm90IHNlZSBkZWJ1Z19sZXZlbCBpbiAvcHJvYy9uZXQvaWVlZTgwMjExIHRoZW4geW91IGRvIG5vdCBoYXZlCi0gKiBDT05GSUdfTElCSVBXX0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICoKLSAqLwotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9JTkZPICAgICAgICAgICgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfRExfV1ggICAgICAgICAgICAoMTw8MSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1NDQU4gICAgICAgICAgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9TVEFURSAgICAgICAgICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfRExfTUdNVCAgICAgICAgICAoMTw8NCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX0ZSQUcgICAgICAgICAgKDE8PDUpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9EUk9QICAgICAgICAgICgxPDw3KQotCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9UWCAgICAgICAgICAgICgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfRExfUlggICAgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1FPUyAgICAgICAgICAgKDE8PDMxKQotCi0jZGVmaW5lIElFRUU4MDIxMV9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgImllZWU4MDIxMTogIiBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJpZWVlODAyMTE6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0lORk8oZiwgYS4uLikgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0lORk8sIGYsICMjIGEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1dYKGYsIGEuLi4pICAgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1dYLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfU0NBTihmLCBhLi4uKSAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfU0NBTiwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1NUQVRFKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1NUQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfTUdNVChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9NR01ULCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRlJBRyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9GUkFHLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfRFJPUChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfVFgoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFgsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19SWChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1FPUyhmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9RT1MsIGYsICMjIGEpCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CS8qIEFSUEhSRF9FVEhFUiAqLwotCi0jaWZuZGVmIFdJUkVMRVNTX1NQWQotI2RlZmluZSBXSVJFTEVTU19TUFkJCS8qIGVuYWJsZSBpd3NweSBzdXBwb3J0ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvKiBuZXcgZHJpdmVyIEFQSSAqLwotCi0jZGVmaW5lIEVUSF9QX1BSRUFVVEggMHg4OEM3CS8qIElFRUUgODAyLjExaSBwcmUtYXV0aGVudGljYXRpb24gKi8KLQotI2lmbmRlZiBFVEhfUF84MDIxMV9SQVcKLSNkZWZpbmUgRVRIX1BfODAyMTFfUkFXIChFVEhfUF9FQ09ORVQgKyAxKQotI2VuZGlmCi0KLS8qIElFRUUgODAyLjExIGRlZmluZXMgKi8KLQotI2RlZmluZSBQODAyMTFfT1VJX0xFTiAzCi0KLXN0cnVjdCBpZWVlODAyMTFfc25hcF9oZHIgewotCi0JdTggZHNhcDsJCS8qIGFsd2F5cyAweEFBICovCi0JdTggc3NhcDsJCS8qIGFsd2F5cyAweEFBICovCi0JdTggY3RybDsJCS8qIGFsd2F5cyAweDAzICovCi0JdTggb3VpW1A4MDIxMV9PVUlfTEVOXTsJLyogb3JnYW5pemF0aW9uYWwgdW5pdmVyc2FsIGlkICovCi0KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFNOQVBfU0laRSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkcikKLQotI2RlZmluZSBXTEFOX0ZDX0dFVF9WRVJTKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpCi0jZGVmaW5lIFdMQU5fRkNfR0VUX1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpCi0jZGVmaW5lIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKQotCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkFHKHNlcSkgKChzZXEpICYgSUVFRTgwMjExX1NDVExfRlJBRykKLSNkZWZpbmUgV0xBTl9HRVRfU0VRX1NFUShzZXEpICAoKChzZXEpICYgSUVFRTgwMjExX1NDVExfU0VRKSA+PiA0KQotCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJICgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0UgKDE8PDIpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19SQVRFICgxPDwzKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfV0VNQVNLIDB4NwotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTiAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9CQU5EICAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0JBTkQgICAgICgxPDwxKQotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xTUIJCSAgICAgICAgMHgwMgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CCQkgICAgICAgIDB4MDQKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzVNQgkJICAgICAgICAweDBCCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CCQkgICAgICAgIDB4MTYKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV82TUIJCSAgICAgICAgMHgwQwotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQgkJICAgICAgICAweDEyCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQgkJMHgxOAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUIJCTB4MjQKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CCQkweDMwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQgkJMHg0OAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUIJCTB4NjAKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV81NE1CCQkweDZDCi0jZGVmaW5lIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sJCTB4ODAKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sJCSgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0sJCSgxPDwxKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0sJCSgxPDwyKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLCQkoMTw8MykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSwkJKDE8PDQpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sJCSgxPDw1KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSwkJKDE8PDYpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLCQkoMTw8NykKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0sJCSgxPDw4KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSwkJKDE8PDkpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLCQkoMTw8MTApCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLCQkoMTw8MTEpCi0KLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFU19NQVNLCSAgICAgICAgMHgwMDAwMDAwRgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX0JBU0lDX1JBVEVTX01BU0sJKElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLCShJRUVFODAyMTFfQ0NLX0JBU0lDX1JBVEVTX01BU0sgfCBcCi0gICAgICAgIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSyB8IFwKLSAgICAgICAgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSykKLQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFU19NQVNLCQkweDAwMDAwRkYwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0JBU0lDX1JBVEVTX01BU0sJKElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX0RFRkFVTFRfUkFURVNfTUFTSwkoSUVFRTgwMjExX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLICB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSyB8IFwKLQlJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSykKLSNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSyAoSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRUVFODAyMTFfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSykKLQotI2RlZmluZSBJRUVFODAyMTFfTlVNX09GRE1fUkFURVMJICAgIDgKLSNkZWZpbmUgSUVFRTgwMjExX05VTV9DQ0tfUkFURVMJICAgICAgICAgICAgNAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9TSElGVF9NQVNLX0EgICAgICAgICA0Ci0KLS8qIE5PVEU6IFRoaXMgZGF0YSBpcyBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXM7IG5vdCBhbGwgaGFyZHdhcmUgcHJvdmlkZXMgdGhpcwotICogICAgICAgaW5mb3JtYXRpb24gZm9yIGZyYW1lcyByZWNlaXZlZC4KLSAqICAgICAgIEZvciBpZWVlODAyMTFfcnhfbWd0LCB5b3UgbmVlZCB0byBzZXQgYXQgbGVhc3QgdGhlICdsZW4nIHBhcmFtZXRlci4KLSAqLwotc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyB7Ci0JdTMyIG1hY190aW1lOwotCXM4IHJzc2k7Ci0JdTggc2lnbmFsOwotCXU4IG5vaXNlOwotCXUxNiByYXRlOwkJLyogaW4gMTAwIGticHMgKi8KLQl1OCByZWNlaXZlZF9jaGFubmVsOwotCXU4IGNvbnRyb2w7Ci0JdTggbWFzazsKLQl1OCBmcmVxOwotCXUxNiBsZW47Ci0JdTY0IHRzZjsKLQl1MzIgYmVhY29uX3RpbWU7Ci19OwotCi0vKiBJRUVFIDgwMi4xMSByZXF1aXJlcyB0aGF0IFNUQSBzdXBwb3J0cyBjb25jdXJyZW50IHJlY2VwdGlvbiBvZiBhdCBsZWFzdAotICogdGhyZWUgZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgZGVmaW5lIGNhbiBiZSBpbmNyZWFzZWQgdG8gc3VwcG9ydCBtb3JlCi0gKiBjb25jdXJyZW50IGZyYW1lcywgYnV0IGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IGVhY2ggZW50cnkgY2FuIGNvbnN1bWUgYWJvdXQKLSAqIDIga0Igb2YgUkFNIGFuZCBpbmNyZWFzaW5nIGNhY2hlIHNpemUgd2lsbCBzbG93IGRvd24gZnJhbWUgcmVhc3NlbWJseS4gKi8KLSNkZWZpbmUgSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOIDQKLQotc3RydWN0IGllZWU4MDIxMV9mcmFnX2VudHJ5IHsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X2ZyYWdfdGltZTsKLQl1bnNpZ25lZCBpbnQgc2VxOwotCXVuc2lnbmVkIGludCBsYXN0X2ZyYWc7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1OCBzcmNfYWRkcltFVEhfQUxFTl07Ci0JdTggZHN0X2FkZHJbRVRIX0FMRU5dOwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9zdGF0cyB7Ci0JdW5zaWduZWQgaW50IHR4X3VuaWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9mcmFnbWVudHM7Ci0JdW5zaWduZWQgaW50IHR4X3VuaWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCB0eF9kZWZlcnJlZF90cmFuc21pc3Npb25zOwotCXVuc2lnbmVkIGludCB0eF9zaW5nbGVfcmV0cnlfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9tdWx0aXBsZV9yZXRyeV9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHR4X3JldHJ5X2xpbWl0X2V4Y2VlZGVkOwotCXVuc2lnbmVkIGludCB0eF9kaXNjYXJkczsKLQl1bnNpZ25lZCBpbnQgcnhfdW5pY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X211bHRpY2FzdF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X2ZyYWdtZW50czsKLQl1bnNpZ25lZCBpbnQgcnhfdW5pY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHJ4X211bHRpY2FzdF9vY3RldHM7Ci0JdW5zaWduZWQgaW50IHJ4X2Zjc19lcnJvcnM7Ci0JdW5zaWduZWQgaW50IHJ4X2Rpc2NhcmRzX25vX2J1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgdHhfZGlzY2FyZHNfd3Jvbmdfc2E7Ci0JdW5zaWduZWQgaW50IHJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGU7Ci0JdW5zaWduZWQgaW50IHJ4X21lc3NhZ2VfaW5fbXNnX2ZyYWdtZW50czsKLQl1bnNpZ25lZCBpbnQgcnhfbWVzc2FnZV9pbl9iYWRfbXNnX2ZyYWdtZW50czsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlOwotCi0jZGVmaW5lIFNFQ19LRVlfMQkJKDE8PDApCi0jZGVmaW5lIFNFQ19LRVlfMgkJKDE8PDEpCi0jZGVmaW5lIFNFQ19LRVlfMwkJKDE8PDIpCi0jZGVmaW5lIFNFQ19LRVlfNAkJKDE8PDMpCi0jZGVmaW5lIFNFQ19BQ1RJVkVfS0VZCQkoMTw8NCkKLSNkZWZpbmUgU0VDX0FVVEhfTU9ERQkJKDE8PDUpCi0jZGVmaW5lIFNFQ19VTklDQVNUX0dST1VQCSgxPDw2KQotI2RlZmluZSBTRUNfTEVWRUwJCSgxPDw3KQotI2RlZmluZSBTRUNfRU5BQkxFRAkJKDE8PDgpCi0jZGVmaW5lIFNFQ19FTkNSWVBUCQkoMTw8OSkKLQotI2RlZmluZSBTRUNfTEVWRUxfMAkJMAkvKiBOb25lICovCi0jZGVmaW5lIFNFQ19MRVZFTF8xCQkxCS8qIFdFUCA0MCBhbmQgMTA0IGJpdCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMgkJMgkvKiBMZXZlbCAxICsgVEtJUCAqLwotI2RlZmluZSBTRUNfTEVWRUxfMl9DS0lQCTMJLyogTGV2ZWwgMSArIENLSVAgKi8KLSNkZWZpbmUgU0VDX0xFVkVMXzMJCTQJLyogTGV2ZWwgMiArIENDTVAgKi8KLQotI2RlZmluZSBTRUNfQUxHX05PTkUJCTAKLSNkZWZpbmUgU0VDX0FMR19XRVAJCTEKLSNkZWZpbmUgU0VDX0FMR19US0lQCQkyCi0jZGVmaW5lIFNFQ19BTEdfQ0NNUAkJMwotCi0jZGVmaW5lIFdFUF9LRVlTCQk0Ci0jZGVmaW5lIFdFUF9LRVlfTEVOCQkxMwotI2RlZmluZSBTQ01fS0VZX0xFTgkJMzIKLSNkZWZpbmUgU0NNX1RFTVBPUkFMX0tFWV9MRU5HVEgJMTYKLQotc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSB7Ci0JdTE2IGFjdGl2ZV9rZXk6MiwgZW5hYmxlZDoxLCB1bmljYXN0X3VzZXNfZ3JvdXA6MSwgZW5jcnlwdDoxOwotCXU4IGF1dGhfbW9kZTsKLQl1OCBlbmNvZGVfYWxnW1dFUF9LRVlTXTsKLQl1OCBrZXlfc2l6ZXNbV0VQX0tFWVNdOwotCXU4IGtleXNbV0VQX0tFWVNdW1NDTV9LRVlfTEVOXTsKLQl1OCBsZXZlbDsKLQl1MTYgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLQotIDgwMi4xMSBkYXRhIGZyYW1lIGZyb20gQVAKLQotICAgICAgLC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi1CeXRlcyB8ICAyICAgfCAgMiAgIHwgICAgNiAgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgIDIgICB8IDAuLjIzMTIgfCAgIDQgIHwKLSAgICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tfAotRGVzYy4gfCBjdHJsIHwgZHVyYSB8ICBEQS9SQSAgfCAgIFRBICAgIHwgICAgU0EgICB8IFNlcXUgfCAgZnJhbWUgIHwgIGZjcyB8Ci0gICAgICB8ICAgICAgfCB0aW9uIHwgKEJTU0lEKSB8ICAgICAgICAgfCAgICAgICAgIHwgZW5jZSB8ICBkYXRhICAgfCAgICAgIHwKLSAgICAgIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJwotCi1Ub3RhbDogMjgtMjM0MCBieXRlcwotCi0qLwotCi0jZGVmaW5lIEJFQUNPTl9QUk9CRV9TU0lEX0lEX1BPU0lUSU9OIDEyCi0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8yYWRkciB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBhZGRyNFtFVEhfQUxFTl07Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyB7Ci0JX19sZTE2IGZyYW1lX2N0bDsKLQlfX2xlMTYgZHVyYXRpb25faWQ7Ci0JdTggYWRkcjFbRVRIX0FMRU5dOwotCXU4IGFkZHIyW0VUSF9BTEVOXTsKLQl1OCBhZGRyM1tFVEhfQUxFTl07Ci0JX19sZTE2IHNlcV9jdGw7Ci0JdTggcGF5bG9hZFswXTsKLQlfX2xlMTYgcW9zX2N0bDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZGF0YSB0eXBlcyB0aGF0IGNhbiBtYWtlIHVwIG1hbmFnZW1lbnQgcGFja2V0cwotICoKLQl1MTYgYXV0aF9hbGdvcml0aG07Ci0JdTE2IGF1dGhfc2VxdWVuY2U7Ci0JdTE2IGJlYWNvbl9pbnRlcnZhbDsKLQl1MTYgY2FwYWJpbGl0eTsKLQl1OCBjdXJyZW50X2FwW0VUSF9BTEVOXTsKLQl1MTYgbGlzdGVuX2ludGVydmFsOwotCXN0cnVjdCB7Ci0JCXUxNiBhc3NvY2lhdGlvbl9pZDoxNCwgcmVzZXJ2ZWQ6MjsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQl1MzIgdGltZV9zdGFtcFsyXTsKLQl1MTYgcmVhc29uOwotCXUxNiBzdGF0dXM7Ci0qLwotCi1zdHJ1Y3QgaWVlZTgwMjExX2F1dGggewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgYWxnb3JpdGhtOwotCV9fbGUxNiB0cmFuc2FjdGlvbjsKLQlfX2xlMTYgc3RhdHVzOwotCS8qIGNoYWxsZW5nZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoIHsKLQl1OCBpZDsKLQl1OCBsZW47Ci0JdTggbW9kZTsKLQl1OCBjaGFubmVsOwotCXU4IGNvdW50OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfYWN0aW9uIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JdTggY2F0ZWdvcnk7Ci0JdTggYWN0aW9uOwotCXVuaW9uIHsKLQkJc3RydWN0IGllZWU4MDIxMV9hY3Rpb25fZXhjaGFuZ2UgewotCQkJdTggdG9rZW47Ci0JCQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci0JCX0gZXhjaGFuZ2U7Ci0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggY2hhbm5lbF9zd2l0Y2g7Ci0KLQl9IGZvcm1hdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBBbGlhcyBkZWF1dGggZm9yIGRpc2Fzc29jICovCi0jZGVmaW5lIGllZWU4MDIxMV9kZWF1dGggaWVlZTgwMjExX2Rpc2Fzc29jCi0KLXN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTMyIHRpbWVfc3RhbXBbMl07Ci0JX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIEZIIHBhcmFtcywgRFMgcGFyYW1zLAotCSAqIENGIHBhcmFtcywgSUJTUyBwYXJhbXMsIFRJTSAoaWYgYmVhY29uKSwgUlNOICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIEFsaWFzIGJlYWNvbiBmb3IgcHJvYmVfcmVzcG9uc2UgKi8KLSNkZWZpbmUgaWVlZTgwMjExX2JlYWNvbiBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UKLQotc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMsIFJTTiAqLwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiBjYXBhYmlsaXR5OwotCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTggY3VycmVudF9hcFtFVEhfQUxFTl07Ci0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQlfX2xlMTYgc3RhdHVzOwotCV9fbGUxNiBhaWQ7Ci0JLyogc3VwcG9ydGVkIHJhdGVzICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfdHhiIHsKLQl1OCBucl9mcmFnczsKLQl1OCBlbmNyeXB0ZWQ7Ci0JdTggcnRzX2luY2x1ZGVkOwotCXU4IHJlc2VydmVkOwotCXUxNiBmcmFnX3NpemU7Ci0JdTE2IHBheWxvYWRfc2l6ZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ21lbnRzWzBdOwotfTsKLQotLyogU1dFRVAgVEFCTEUgRU5UUklFUyBOVU1CRVIgKi8KLSNkZWZpbmUgTUFYX1NXRUVQX1RBQl9FTlRSSUVTCQkgIDQyCi0jZGVmaW5lIE1BWF9TV0VFUF9UQUJfRU5UUklFU19QRVJfUEFDS0VUICA3Ci0vKiBNQVhfUkFURVNfTEVOR1RIIG5lZWRzIHRvIGJlIDEyLiAgVGhlIHNwZWMgc2F5cyA4LCBhbmQgbWFueSBBUHMKLSAqIG9ubHkgdXNlIDgsIGFuZCB0aGVuIHVzZSBleHRlbmRlZCByYXRlcyBmb3IgdGhlIHJlbWFpbmluZyBzdXBwb3J0ZWQKLSAqIHJhdGVzLiAgT3RoZXIgQVBzLCBob3dldmVyLCBzdGljayBhbGwgb2YgdGhlaXIgc3VwcG9ydGVkIHJhdGVzIG9uIHRoZQotICogbWFpbiByYXRlcyBpbmZvcm1hdGlvbiBlbGVtZW50Li4uICovCi0jZGVmaW5lIE1BWF9SQVRFU19MRU5HVEggICAgICAgICAgICAgICAgICAoKHU4KTEyKQotI2RlZmluZSBNQVhfUkFURVNfRVhfTEVOR1RIICAgICAgICAgICAgICAgKCh1OCkxNikKLSNkZWZpbmUgTUFYX05FVFdPUktfQ09VTlQgICAgICAgICAgICAgICAgICAxMjgKLQotI2RlZmluZSBDUkNfTEVOR1RIICAgICAgICAgICAgICAgICA0VQotCi0jZGVmaW5lIE1BWF9XUEFfSUVfTEVOIDY0Ci0KLSNkZWZpbmUgTkVUV09SS19IQVNfT0ZETSAgICAgICAoMTw8MSkKLSNkZWZpbmUgTkVUV09SS19IQVNfQ0NLICAgICAgICAoMTw8MikKLQotLyogUW9TIHN0cnVjdHVyZSAqLwotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUyAgICAgICgxPDwzKQotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT04gICAgICgxPDw0KQotI2RlZmluZSBORVRXT1JLX0hBU19RT1NfTUFTSyAgICAgICAgICAgIChORVRXT1JLX0hBU19RT1NfUEFSQU1FVEVSUyB8IFwKLQkJCQkJIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTikKLQotLyogODAyLjExaCAqLwotI2RlZmluZSBORVRXT1JLX0hBU19QT1dFUl9DT05TVFJBSU5UICAgICgxPDw1KQotI2RlZmluZSBORVRXT1JLX0hBU19DU0EgICAgICAgICAgICAgICAgICgxPDw2KQotI2RlZmluZSBORVRXT1JLX0hBU19RVUlFVCAgICAgICAgICAgICAgICgxPDw3KQotI2RlZmluZSBORVRXT1JLX0hBU19JQlNTX0RGUyAgICAgICAgICAgICgxPDw4KQotI2RlZmluZSBORVRXT1JLX0hBU19UUENfUkVQT1JUICAgICAgICAgICgxPDw5KQotCi0jZGVmaW5lIE5FVFdPUktfSEFTX0VSUF9WQUxVRSAgICAgICAgICAgKDE8PDEwKQotCi0jZGVmaW5lIFFPU19RVUVVRV9OVU0gICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBRT1NfT1VJX0xFTiAgICAgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgUU9TX09VSV9UWVBFICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFFPU19FTEVNRU5UX0lEICAgICAgICAgICAgICAgICAgMjIxCi0jZGVmaW5lIFFPU19PVUlfSU5GT19TVUJfVFlQRSAgICAgICAgICAgMAotI2RlZmluZSBRT1NfT1VJX1BBUkFNX1NVQl9UWVBFICAgICAgICAgIDEKLSNkZWZpbmUgUU9TX1ZFUlNJT05fMSAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFFPU19BSUZTTl9NSU5fVkFMVUUgICAgICAgICAgICAgMgotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHsKLQl1OCBlbGVtZW50SUQ7Ci0JdTggbGVuZ3RoOwotCXU4IHF1aVtRT1NfT1VJX0xFTl07Ci0JdTggcXVpX3R5cGU7Ci0JdTggcXVpX3N1YnR5cGU7Ci0JdTggdmVyc2lvbjsKLQl1OCBhY19pbmZvOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX2FjX3BhcmFtZXRlciB7Ci0JdTggYWNpX2FpZnNuOwotCXU4IGVjd19taW5fbWF4OwotCV9fbGUxNiB0eF9vcF9saW1pdDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJfaW5mbyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudCBpbmZvX2VsZW1lbnQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfYWNfcGFyYW1ldGVyIGFjX3BhcmFtc19yZWNvcmRbUU9TX1FVRVVFX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyB7Ci0JX19sZTE2IGN3X21pbltRT1NfUVVFVUVfTlVNXTsKLQlfX2xlMTYgY3dfbWF4W1FPU19RVUVVRV9OVU1dOwotCXU4IGFpZnNbUU9TX1FVRVVFX05VTV07Ci0JdTggZmxhZ1tRT1NfUVVFVUVfTlVNXTsKLQlfX2xlMTYgdHhfb3BfbGltaXRbUU9TX1FVRVVFX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfZGF0YSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotCWludCBhY3RpdmU7Ci0JaW50IHN1cHBvcnRlZDsKLQl1OCBwYXJhbV9jb3VudDsKLQl1OCBvbGRfcGFyYW1fY291bnQ7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX3RpbV9wYXJhbWV0ZXJzIHsKLQl1OCB0aW1fY291bnQ7Ci0JdTggdGltX3BlcmlvZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotZW51bSB7CQkJCS8qIGllZWU4MDIxMV9iYXNpY19yZXBvcnQubWFwICovCi0JSUVFRTgwMjExX0JBU0lDX01BUF9CU1MgPSAoMSA8PCAwKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX09GRE0gPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOSURFTlRJRklFRCA9ICgxIDw8IDIpLAotCUlFRUU4MDIxMV9CQVNJQ19NQVBfUkFEQVIgPSAoMSA8PCAzKSwKLQlJRUVFODAyMTFfQkFTSUNfTUFQX1VOTUVBU1VSRUQgPSAoMSA8PCA0KSwKLQkvKiBCaXRzIDUtNyBhcmUgcmVzZXJ2ZWQgKi8KLQotfTsKLXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IHsKLQl1OCBjaGFubmVsOwotCV9fbGU2NCBzdGFydF90aW1lOwotCV9fbGUxNiBkdXJhdGlvbjsKLQl1OCBtYXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSB7CQkJCS8qIGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXF1ZXN0Lm1vZGUgKi8KLQkvKiBCaXQgMCBpcyByZXNlcnZlZCAqLwotCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9FTkFCTEUgPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfTUVBU1VSRU1FTlRfUkVRVUVTVCA9ICgxIDw8IDIpLAotCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9SRVBPUlQgPSAoMSA8PCAzKSwKLQkvKiBCaXRzIDQtNyBhcmUgcmVzZXJ2ZWQgKi8KLX07Ci0KLWVudW0gewotCUlFRUU4MDIxMV9SRVBPUlRfQkFTSUMgPSAwLAkvKiByZXF1aXJlZCAqLwotCUlFRUU4MDIxMV9SRVBPUlRfQ0NBID0gMSwJLyogb3B0aW9uYWwgKi8KLQlJRUVFODAyMTFfUkVQT1JUX1JQSSA9IDIsCS8qIG9wdGlvbmFsICovCi0JLyogMy0yNTUgcmVzZXJ2ZWQgKi8KLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHsKLQl1OCBjaGFubmVsOwotCV9fbGU2NCBzdGFydF90aW1lOwotCV9fbGUxNiBkdXJhdGlvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IHRva2VuOwotCXU4IG1vZGU7Ci0JdTggdHlwZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3BhcmFtcyBwYXJhbXNbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9yZXBvcnQgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IHRva2VuOwotCXU4IG1vZGU7Ci0JdTggdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfYmFzaWNfcmVwb3J0IGJhc2ljWzBdOwotCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3RwY19yZXBvcnQgewotCXU4IHRyYW5zbWl0X3Bvd2VyOwotCXU4IGxpbmtfbWFyZ2luOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9tYXAgewotCXU4IGNoYW5uZWw7Ci0JdTggbWFwOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaWJzc19kZnMgewotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGllOwotCXU4IG93bmVyW0VUSF9BTEVOXTsKLQl1OCByZWNvdmVyeV9pbnRlcnZhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfbWFwIGNoYW5uZWxfbWFwWzBdOwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9jc2EgewotCXU4IG1vZGU7Ci0JdTggY2hhbm5lbDsKLQl1OCBjb3VudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3F1aWV0IHsKLQl1OCBjb3VudDsKLQl1OCBwZXJpb2Q7Ci0JdTggZHVyYXRpb247Ci0JdTggb2Zmc2V0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayB7Ci0JLyogVGhlc2UgZW50cmllcyBhcmUgdXNlZCB0byBpZGVudGlmeSBhIHVuaXF1ZSBuZXR3b3JrICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXU4IGNoYW5uZWw7Ci0JLyogRW5zdXJlIG51bGwtdGVybWluYXRlZCBmb3IgYW55IGRlYnVnIG1zZ3MgKi8KLQl1OCBzc2lkW0lXX0VTU0lEX01BWF9TSVpFICsgMV07Ci0JdTggc3NpZF9sZW47Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIHFvc19kYXRhOwotCi0JLyogVGhlc2UgYXJlIG5ldHdvcmsgc3RhdGlzdGljcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgc3RhdHM7Ci0JdTE2IGNhcGFiaWxpdHk7Ci0JdTggcmF0ZXNbTUFYX1JBVEVTX0xFTkdUSF07Ci0JdTggcmF0ZXNfbGVuOwotCXU4IHJhdGVzX2V4W01BWF9SQVRFU19FWF9MRU5HVEhdOwotCXU4IHJhdGVzX2V4X2xlbjsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZDsKLQl1OCBtb2RlOwotCXUzMiBmbGFnczsKLQl1MzIgbGFzdF9hc3NvY2lhdGU7Ci0JdTMyIHRpbWVfc3RhbXBbMl07Ci0JdTE2IGJlYWNvbl9pbnRlcnZhbDsKLQl1MTYgbGlzdGVuX2ludGVydmFsOwotCXUxNiBhdGltX3dpbmRvdzsKLQl1OCBlcnBfdmFsdWU7Ci0JdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKLQlzaXplX3Qgd3BhX2llX2xlbjsKLQl1OCByc25faWVbTUFYX1dQQV9JRV9MRU5dOwotCXNpemVfdCByc25faWVfbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfdGltX3BhcmFtZXRlcnMgdGltOwotCi0JLyogODAyLjExaCBpbmZvICovCi0KLQkvKiBQb3dlciBDb25zdHJhaW50IC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCi0JdTggcG93ZXJfY29uc3RyYWludDsKLQotCS8qIFRQQyBSZXBvcnQgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3RwY19yZXBvcnQgdHBjX3JlcG9ydDsKLQotCS8qIElCU1MgREZTIC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkIGFuZCBJQlNTCi0JICogTk9URTogVGhpcyBpcyB2YXJpYWJsZSBsZW5ndGggYW5kIHNvIG11c3QgYmUgYWxsb2NhdGVkIGR5bmFtaWNhbGx5ICovCi0Jc3RydWN0IGllZWU4MDIxMV9pYnNzX2RmcyAqaWJzc19kZnM7Ci0KLQkvKiBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgLSBvcHRpb25hbCBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLwotCXN0cnVjdCBpZWVlODAyMTFfY3NhIGNzYTsKLQotCS8qIFF1aWV0IC0gb3B0aW9uYWwgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3F1aWV0IHF1aWV0OwotCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotZW51bSBpZWVlODAyMTFfc3RhdGUgewotCUlFRUU4MDIxMV9VTklOSVRJQUxJWkVEID0gMCwKLQlJRUVFODAyMTFfSU5JVElBTElaRUQsCi0JSUVFRTgwMjExX0FTU09DSUFUSU5HLAotCUlFRUU4MDIxMV9BU1NPQ0lBVEVELAotCUlFRUU4MDIxMV9BVVRIRU5USUNBVElORywKLQlJRUVFODAyMTFfQVVUSEVOVElDQVRFRCwKLQlJRUVFODAyMTFfU0hVVERPV04KLX07Ci0KLSNkZWZpbmUgREVGQVVMVF9NQVhfU0NBTl9BR0UgKDE1ICogSFopCi0jZGVmaW5lIERFRkFVTFRfRlRTIDIzNDYKLQotI2RlZmluZSBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTICgxPDwwKQotI2RlZmluZSBDRkdfSUVFRTgwMjExX0NPTVBVVEVfRkNTICgxPDwxKQotI2RlZmluZSBDRkdfSUVFRTgwMjExX1JUUyAoMTw8MikKLQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfTUlOX0NIQU5ORUwgMQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfTUFYX0NIQU5ORUwgMTQKLSNkZWZpbmUgSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTIChJRUVFODAyMTFfMjRHSFpfTUFYX0NIQU5ORUwgLSBcCi0JCQkJICBJRUVFODAyMTFfMjRHSFpfTUlOX0NIQU5ORUwgKyAxKQotCi0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NSU5fQ0hBTk5FTCAzNAotI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgMTY1Ci0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9DSEFOTkVMUyAoSUVFRTgwMjExXzUyR0haX01BWF9DSEFOTkVMIC0gXAotCQkJCSAgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMICsgMSkKLQotZW51bSB7Ci0JSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSA9ICgxIDw8IDApLAotCUlFRUU4MDIxMV9DSF84MDIxMUhfUlVMRVMgPSAoMSA8PCAxKSwKLQlJRUVFODAyMTFfQ0hfQl9PTkxZID0gKDEgPDwgMiksCi0JSUVFRTgwMjExX0NIX05PX0lCU1MgPSAoMSA8PCAzKSwKLQlJRUVFODAyMTFfQ0hfVU5JRk9STV9TUFJFQURJTkcgPSAoMSA8PCA0KSwKLQlJRUVFODAyMTFfQ0hfUkFEQVJfREVURUNUID0gKDEgPDwgNSksCi0JSUVFRTgwMjExX0NIX0lOVkFMSUQgPSAoMSA8PCA2KSwKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB7Ci0JdTMyIGZyZXE7CS8qIGluIE1IeiAqLwotCXU4IGNoYW5uZWw7Ci0JdTggZmxhZ3M7Ci0JdTggbWF4X3Bvd2VyOwkvKiBpbiBkQm0gKi8KLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfZ2VvIHsKLQl1OCBuYW1lWzRdOwotCXU4IGJnX2NoYW5uZWxzOwotCXU4IGFfY2hhbm5lbHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGJnW0lFRUU4MDIxMV8yNEdIWl9DSEFOTkVMU107Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFbSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTXTsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjOwotCi0JLyogQm9va2tlZXBpbmcgc3RydWN0dXJlcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfc3RhdHMgaWVlZV9zdGF0czsKLQotCXN0cnVjdCBpZWVlODAyMTFfZ2VvIGdlbzsKLQotCS8qIFByb2JlIC8gQmVhY29uIG1hbmFnZW1lbnQgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfZnJlZV9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29ya3M7Ci0JaW50IHNjYW5zOwotCWludCBzY2FuX2FnZTsKLQotCWludCBpd19tb2RlOwkJLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KLQlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7CS8qIGl3c3B5IHN1cHBvcnQgKi8KLQotCXNwaW5sb2NrX3QgbG9jazsKLQotCWludCB0eF9oZWFkcm9vbTsJLyogU2V0IHRvIHNpemUgb2YgYW55IGFkZGl0aW9uYWwgcm9vbSBuZWVkZWQgYXQgZnJvbnQKLQkJCQkgKiBvZiBhbGxvY2F0ZWQgVHggU0tCcyAqLwotCXUzMiBjb25maWc7Ci0KLQkvKiBXRVAgYW5kIG90aGVyIGVuY3J5cHRpb24gcmVsYXRlZCBzZXR0aW5ncyBhdCB0aGUgZGV2aWNlIGxldmVsICovCi0JaW50IG9wZW5fd2VwOwkJLyogU2V0IHRvIDEgdG8gYWxsb3cgdW5lbmNyeXB0ZWQgZnJhbWVzICovCi0KLQlpbnQgcmVzZXRfb25fa2V5Y2hhbmdlOwkvKiBTZXQgdG8gMSBpZiB0aGUgSFcgbmVlZHMgdG8gYmUgcmVzZXQgb24KLQkJCQkgKiBXRVAga2V5IGNoYW5nZXMgKi8KLQotCS8qIElmIHRoZSBob3N0IHBlcmZvcm1zIHtlbixkZX1jcnlwdGlvbiwgdGhlbiBzZXQgdG8gMSAqLwotCWludCBob3N0X2VuY3J5cHQ7Ci0JaW50IGhvc3RfZW5jcnlwdF9tc2R1OwotCWludCBob3N0X2RlY3J5cHQ7Ci0JLyogaG9zdCBwZXJmb3JtcyBtdWx0aWNhc3QgZGVjcnlwdGlvbiAqLwotCWludCBob3N0X21jX2RlY3J5cHQ7Ci0KLQkvKiBob3N0IHNob3VsZCBzdHJpcCBJViBhbmQgSUNWIGZyb20gcHJvdGVjdGVkIGZyYW1lcyAqLwotCS8qIG1lYW5pbmdmdWwgb25seSB3aGVuIGhhcmR3YXJlIGRlY3J5cHRpb24gaXMgYmVpbmcgdXNlZCAqLwotCWludCBob3N0X3N0cmlwX2l2X2ljdjsKLQotCWludCBob3N0X29wZW5fZnJhZzsKLQlpbnQgaG9zdF9idWlsZF9pdjsKLQlpbnQgaWVlZTgwMl8xeDsJCS8qIGlzIElFRUUgODAyLjFYIHVzZWQgKi8KLQotCS8qIFdQQSBkYXRhICovCi0JaW50IHdwYV9lbmFibGVkOwotCWludCBkcm9wX3VuZW5jcnlwdGVkOwotCWludCBwcml2YWN5X2ludm9rZWQ7Ci0Jc2l6ZV90IHdwYV9pZV9sZW47Ci0JdTggKndwYV9pZTsKLQotCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9pbmZvIGNyeXB0X2luZm87Ci0KLQlpbnQgYmNyeF9zdGFfa2V5OwkvKiB1c2UgaW5kaXZpZHVhbCBrZXlzIHRvIG92ZXJyaWRlIGRlZmF1bHQga2V5cyBldmVuCi0JCQkJICogd2l0aCBSWCBvZiBicm9hZC9tdWx0aWNhc3QgZnJhbWVzICovCi0KLQkvKiBGcmFnbWVudGF0aW9uIHN0cnVjdHVyZXMgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgZnJhZ19jYWNoZVtJRUVFODAyMTFfRlJBR19DQUNIRV9MRU5dOwotCXVuc2lnbmVkIGludCBmcmFnX25leHRfaWR4OwotCXUxNiBmdHM7CQkvKiBGcmFnbWVudGF0aW9uIFRocmVzaG9sZCAqLwotCXUxNiBydHM7CQkvKiBSVFMgdGhyZXNob2xkICovCi0KLQkvKiBBc3NvY2lhdGlvbiBpbmZvICovCi0JdTggYnNzaWRbRVRIX0FMRU5dOwotCi0JZW51bSBpZWVlODAyMTFfc3RhdGUgc3RhdGU7Ci0KLQlpbnQgbW9kZTsJCS8qIEEsIEIsIEcgKi8KLQlpbnQgbW9kdWxhdGlvbjsJCS8qIENDSywgT0ZETSAqLwotCWludCBmcmVxX2JhbmQ7CQkvKiAyLjRHaHosIDUuMkdoeiwgTWl4ZWQgKi8KLQlpbnQgYWJnX3RydWU7CQkvKiBBQkcgZmxhZyAgICAgICAgICAgICAgKi8KLQotCWludCBwZXJmZWN0X3Jzc2k7Ci0JaW50IHdvcnN0X3Jzc2k7Ci0KLQl1MTYgcHJldl9zZXFfY3RsOwkvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLwotCi0JLyogQ2FsbGJhY2sgZnVuY3Rpb25zICovCi0Jdm9pZCAoKnNldF9zZWN1cml0eSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqIHNlYyk7Ci0JaW50ICgqaGFyZF9zdGFydF94bWl0KSAoc3RydWN0IGllZWU4MDIxMV90eGIgKiB0eGIsCi0JCQkJc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBwcmkpOwotCWludCAoKnJlc2V0X3BvcnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Ci0JaW50ICgqaXNfcXVldWVfZnVsbCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgcHJpKTsKLQotCWludCAoKmhhbmRsZV9tYW5hZ2VtZW50KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKiBuZXR3b3JrLCB1MTYgdHlwZSk7Ci0JaW50ICgqaXNfcW9zX2FjdGl2ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotCi0JLyogVHlwaWNhbCBTVEEgbWV0aG9kcyAqLwotCWludCAoKmhhbmRsZV9hdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9hdXRoICogYXV0aCk7Ci0JaW50ICgqaGFuZGxlX2RlYXV0aCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9kZWF1dGggKiBhdXRoKTsKLQlpbnQgKCpoYW5kbGVfYWN0aW9uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbiAqIGFjdGlvbiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKiBzdGF0cyk7Ci0JaW50ICgqaGFuZGxlX2Rpc2Fzc29jKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqIGFzc29jKTsKLQlpbnQgKCpoYW5kbGVfYmVhY29uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiAqIGJlYWNvbiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmspOwotCWludCAoKmhhbmRsZV9wcm9iZV9yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKiByZXNwLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmspOwotCWludCAoKmhhbmRsZV9wcm9iZV9yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgKiByZXEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICogc3RhdHMpOwotCWludCAoKmhhbmRsZV9hc3NvY19yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmspOwotCi0JLyogVHlwaWNhbCBBUCBtZXRob2RzICovCi0JaW50ICgqaGFuZGxlX2Fzc29jX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Ci0JaW50ICgqaGFuZGxlX3JlYXNzb2NfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqIHJlcSk7Ci0KLQkvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgaXRlbSBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgZGF0YQotCSAqIGFsbG9jYXRlZCBiZXlvbmQgdGhpcyBzdHJ1Y3R1cmUgYnkgYWxsb2NfaWVlZTgwMjExICovCi0JdTggcHJpdlswXTsKLX07Ci0KLSNkZWZpbmUgSUVFRV9BICAgICAgICAgICAgKDE8PDApCi0jZGVmaW5lIElFRUVfQiAgICAgICAgICAgICgxPDwxKQotI2RlZmluZSBJRUVFX0cgICAgICAgICAgICAoMTw8MikKLSNkZWZpbmUgSUVFRV9NT0RFX01BU0sgICAgKElFRUVfQXxJRUVFX0J8SUVFRV9HKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmllZWU4MDIxMV9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiluZXRkZXZfcHJpdihkZXYpKS0+cHJpdjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX21vZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJCSAgaW50IG1vZGUpCi17Ci0JLyoKLQkgKiBJdCBpcyBwb3NzaWJsZSBmb3IgYm90aCBhY2Nlc3MgcG9pbnRzIGFuZCBvdXIgZGV2aWNlIHRvIHN1cHBvcnQKLQkgKiBjb21iaW5hdGlvbnMgb2YgbW9kZXMsIHNvIGFzIGxvbmcgYXMgdGhlcmUgaXMgb25lIHZhbGlkIGNvbWJpbmF0aW9uCi0JICogb2YgYXAvZGV2aWNlIHN1cHBvcnRlZCBtb2RlcywgdGhlbiByZXR1cm4gc3VjY2VzcwotCSAqCi0JICovCi0JaWYgKChtb2RlICYgSUVFRV9BKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JaWYgKChtb2RlICYgSUVFRV9HKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pICYmCi0JICAgIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkpCi0JCXJldHVybiAxOwotCi0JaWYgKChtb2RlICYgSUVFRV9CKSAmJgotCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTikgJiYKLQkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2dldF9oZHJsZW4odTE2IGZjKQotewotCWludCBoZHJsZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOwotCXUxNiBzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKLQotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKLQkJCWhkcmxlbiA9IElFRUU4MDIxMV80QUREUl9MRU47Ci0JCWlmIChzdHlwZSAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkKLQkJCWhkcmxlbiArPSAyOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gSUVFRTgwMjExXzFBRERSX0xFTjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaGRybGVuID0gSUVFRTgwMjExXzJBRERSX0xFTjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBoZHJsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggKmllZWU4MDIxMV9nZXRfcGF5bG9hZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQotewotCXN3aXRjaCAoaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKLQljYXNlIElFRUU4MDIxMV8xQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzFhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV8yQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV8zQUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopaGRyKS0+cGF5bG9hZDsKLQljYXNlIElFRUU4MDIxMV80QUREUl9MRU46Ci0JCXJldHVybiAoKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopaGRyKS0+cGF5bG9hZDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19vZmRtX3JhdGUodTggcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUgJiB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgewotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUI6Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfY2NrX3JhdGUodTggcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUgJiB+SUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgewotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzFNQjoKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8yTUI6Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUI6Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogaWVlZTgwMjExLmMgKi8KLWV4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpOwotCi1leHRlcm4gdm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0KLS8qIGllZWU4MDIxMV90eC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwotCi0vKiBpZWVlODAyMTFfcnguYyAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X2FueShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKLS8qIG1ha2Ugc3VyZSB0byBzZXQgc3RhdHMtPmxlbiAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX25ldHdvcmtfcmVzZXQoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKTsKLQotLyogaWVlZTgwMjExX2dlby5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmllZWU4MDIxMV9nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlCi0JCQkJCQkgICAgICppZWVlKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3NldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8pOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICAgICB1OCBjaGFubmVsKTsKLWV4dGVybiB1OCBpZWVlODAyMTFfZnJlcV90b19jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1MzIgZnJlcSk7Ci1leHRlcm4gdTggaWVlZTgwMjExX2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaWVlZTgwMjExX2dldF9jaGFubmVsKHN0cnVjdAotCQkJCQkJCSAgICAgaWVlZTgwMjExX2RldmljZQotCQkJCQkJCSAgICAgKmllZWUsIHU4IGNoYW5uZWwpOwotZXh0ZXJuIHUzMiBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSwKLQkJCQkgICAgICB1OCBjaGFubmVsKTsKLQotLyogaWVlZTgwMjExX3d4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2luY3JlbWVudF9zY2FucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLQlpZWVlLT5zY2FucysrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotCXJldHVybiBpZWVlLT5zY2FuczsKLX0KLQotI2VuZGlmCQkJCS8qIElFRUU4MDIxMV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDc0MjQzMjMuLjI0MGNmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAgSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgorICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAgIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgYmFzZWQgb24gdGhlIHNhbXBsZV8qIGZpbGVzIHByb3ZpZGVkIGJ5IFdpcmVsZXNzCkBAIC0xODUsNyArMTg1LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7Ci1zdGF0aWMgaW50IG1vZGUgPSAwOworc3RhdGljIGludCBuZXR3b3JrX21vZGUgPSAwOwogc3RhdGljIGludCBjaGFubmVsID0gMDsKIHN0YXRpYyBpbnQgYXNzb2NpYXRlID0gMDsKIHN0YXRpYyBpbnQgZGlzYWJsZSA9IDA7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0obW9kZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChtb2RlLCBuZXR3b3JrX21vZGUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oY2hhbm5lbCwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbShhc3NvY2lhdGUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0oZGlzYWJsZSwgaW50LCAwNDQ0KTsKQEAgLTE2NzMsNyArMTY3Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvIGlwd19nZW9zW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gaXB3X2dlb3NbXSA9IHsKIAl7CQkJLyogUmVzdHJpY3RlZCAqLwogCSAiLS0tIiwKIAkgLmJnX2NoYW5uZWxzID0gMTQsCkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogCiAJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCiAJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgewotCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCWxpYmlwd19uZXR3b3Jrc19hZ2UocHJpdi0+aWVlZSwgcHJpdi0+c3VzcGVuZF90aW1lKTsKIAkJcHJpdi0+c3VzcGVuZF90aW1lID0gMDsKIAl9CiAKQEAgLTE3NTIsMTEgKzE3NTIsMTEgQEAKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBnZW8gKi8KLQlpZiAoaWVlZTgwMjExX3NldF9nZW8ocHJpdi0+aWVlZSwgJmlwd19nZW9zWzBdKSkgeworCWlmIChsaWJpcHdfc2V0X2dlbyhwcml2LT5pZWVlLCAmaXB3X2dlb3NbMF0pKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIkNvdWxkIG5vdCBzZXQgZ2VvXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCXByaXYtPmllZWUtPmZyZXFfYmFuZCA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOworCXByaXYtPmllZWUtPmZyZXFfYmFuZCA9IExJQklQV18yNEdIWl9CQU5EOwogCiAJbG9jayA9IExPQ0tfTk9ORTsKIAlpZiAoaXB3MjEwMF9zZXRfb3JkaW5hbChwcml2LCBJUFdfT1JEX1BFUlNfREJfTE9DSywgJmxvY2ssICZvcmRfbGVuKSkgewpAQCAtMTgxNyw3ICsxODE3LDcgQEAKIC8qIENhbGxlZCBieSByZWdpc3Rlcl9uZXRkZXYoKSAqLwogc3RhdGljIGludCBpcHcyMTAwX25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJcmV0dXJuIGlwdzIxMDBfdXAocHJpdiwgMSk7CiB9CiAKQEAgLTIzNDAsOCArMjM0MCw4IEBACiAgKgogICogV2hlbiBwYWNrZXQgaXMgcHJvdmlkZWQgYnkgdGhlIGZpcm13YXJlLCBpdCBjb250YWlucyB0aGUgZm9sbG93aW5nOgogICoKLSAqIC4gIGllZWU4MDIxMV9oZHIKLSAqIC4gIGllZWU4MDIxMV9zbmFwX2hkcgorICogLiAgbGliaXB3X2hkcgorICogLiAgbGliaXB3X3NuYXBfaGRyCiAgKgogICogVGhlIHNpemUgb2YgdGhlIGNvbnN0cnVjdGVkIGV0aGVybmV0CiAgKgpAQCAtMjM5Niw3ICsyMzk2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgaXNyX3J4KHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKKwkJCSAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5ldF9kZXY7CiAJc3RydWN0IGlwdzIxMDBfc3RhdHVzICpzdGF0dXMgPSAmcHJpdi0+c3RhdHVzX3F1ZXVlLmRydltpXTsKQEAgLTI0MzUsMTMgKzI0MzUsMTMgQEAKIAogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkvKiBNYWtlIGEgY29weSBvZiB0aGUgZnJhbWUgc28gd2UgY2FuIGR1bXAgaXQgdG8gdGhlIGxvZ3MgaWYKLQkgKiBpZWVlODAyMTFfcnggZmFpbHMgKi8KKwkgKiBsaWJpcHdfcnggZmFpbHMgKi8KIAlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHBhY2tldC0+c2tiLCBwYWNrZXRfZGF0YSwKIAkJCQkgIG1pbl90KHUzMiwgc3RhdHVzLT5mcmFtZV9zaXplLAogCQkJCQkgICAgIElQV19SWF9OSUNfQlVGRkVSX0xFTkdUSCkpOwogI2VuZGlmCiAKLQlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7CisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkJSVBXX0RFQlVHX0RST1AoIiVzOiBOb24gY29uc3VtZWQgcGFja2V0OlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtMjQ0OSw3ICsyNDQ5LDcgQEAKICNlbmRpZgogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCi0JCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KKwkJLyogbGliaXB3X3J4IGZhaWxlZCwgc28gaXQgZGlkbid0IGZyZWUgdGhlIFNLQiAqLwogCQlkZXZfa2ZyZWVfc2tiX2FueShwYWNrZXQtPnNrYik7CiAJCXBhY2tldC0+c2tiID0gTlVMTDsKIAl9CkBAIC0yNDcwLDcgKzI0NzAsNyBAQAogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKIAogc3RhdGljIHZvaWQgaXNyX3J4X21vbml0b3Ioc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGksCi0JCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQorCQkgICBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwpAQCAtMjUyOCwxMCArMjUyOCwxMCBAQAogCiAJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSk7CiAKLQlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7CisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCi0JCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KKwkJLyogbGliaXB3X3J4IGZhaWxlZCwgc28gaXQgZGlkbid0IGZyZWUgdGhlIFNLQiAqLwogCQlkZXZfa2ZyZWVfc2tiX2FueShwYWNrZXQtPnNrYik7CiAJCXBhY2tldC0+c2tiID0gTlVMTDsKIAl9CkBAIC0yNjE1LDcgKzI2MTUsNyBAQAogCXUxNiBmcmFtZV90eXBlOwogCXUzMiByLCB3LCBpLCBzOwogCXN0cnVjdCBpcHcyMTAwX3J4ICp1OwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgc3RhdHMgPSB7CisJc3RydWN0IGxpYmlwd19yeF9zdGF0cyBzdGF0cyA9IHsKIAkJLm1hY190aW1lID0gamlmZmllcywKIAl9OwogCkBAIC0yNjYxLDggKzI2NjEsOCBAQAogCiAJCXN0YXRzLm1hc2sgPSAwOwogCQlpZiAoc3RhdHMucnNzaSAhPSAwKQotCQkJc3RhdHMubWFzayB8PSBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSTsKLQkJc3RhdHMuZnJlcSA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOworCQkJc3RhdHMubWFzayB8PSBMSUJJUFdfU1RBVE1BU0tfUlNTSTsKKwkJc3RhdHMuZnJlcSA9IExJQklQV18yNEdIWl9CQU5EOwogCiAJCUlQV19ERUJVR19SWCgiJXM6ICclcycgZnJhbWUgdHlwZSByZWNlaXZlZCAoJWQpLlxuIiwKIAkJCSAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwgZnJhbWVfdHlwZXNbZnJhbWVfdHlwZV0sCkBAIC0yNjg2LDExICsyNjg2LDExIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAjZW5kaWYKLQkJCWlmIChzdGF0cy5sZW4gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKQorCQkJaWYgKHN0YXRzLmxlbiA8IHNpemVvZihzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkcikpCiAJCQkJYnJlYWs7CiAJCQlzd2l0Y2ggKFdMQU5fRkNfR0VUX1RZUEUobGUxNl90b19jcHUodS0+cnhfZGF0YS5oZWFkZXIuZnJhbWVfY3RsKSkpIHsKIAkJCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6Ci0JCQkJaWVlZTgwMjExX3J4X21ndChwcml2LT5pZWVlLAorCQkJCWxpYmlwd19yeF9tZ3QocHJpdi0+aWVlZSwKIAkJCQkJCSAmdS0+cnhfZGF0YS5oZWFkZXIsICZzdGF0cyk7CiAJCQkJYnJlYWs7CiAKQEAgLTI4NDQsNyArMjg0NCw3IEBACiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogCXsKLQkJaW50IGkgPSB0eHEtPm9sZGVzdDsKKwkJaSA9IHR4cS0+b2xkZXN0OwogCQlJUFdfREVCVUdfVFgoIlRYJWQgVj0lcCBQPSUwNFggVD0lMDRYIEw9JWRcbiIsIGksCiAJCQkgICAgICZ0eHEtPmRydltpXSwKIAkJCSAgICAgKHUzMikgKHR4cS0+bmljICsgaSAqIHNpemVvZihzdHJ1Y3QgaXB3MjEwMF9iZCkpLApAQCAtMjg4NCw3ICsyODg0LDcgQEAKIAkJCQkJIHRiZC0+YnVmX2xlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CiAJCX0KIAotCQlpZWVlODAyMTFfdHhiX2ZyZWUocGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yik7CisJCWxpYmlwd190eGJfZnJlZShwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiKTsKIAkJcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4YiA9IE5VTEw7CiAKIAkJbGlzdF9hZGRfdGFpbChlbGVtZW50LCAmcHJpdi0+dHhfZnJlZV9saXN0KTsKQEAgLTMwMjgsNyArMzAyOCw3IEBACiAJaW50IG5leHQgPSB0eHEtPm5leHQ7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBpcHcyMTAwX2RhdGFfaGVhZGVyICppcHdfaGRyOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKmhkcjsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+dHhfcGVuZF9saXN0KSkgewogCQkvKiBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgaW4gVEJEIHF1ZXVlLCB0aGVuCkBAIC0zMDYyLDcgKzMwNjIsNyBAQAogCQlwYWNrZXQtPmluZGV4ID0gdHhxLT5uZXh0OwogCiAJCWlwd19oZHIgPSBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QuZGF0YTsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICopcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+CisJCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciAqKXBhY2tldC0+aW5mby5kX3N0cnVjdC50eGItPgogCQkgICAgZnJhZ21lbnRzWzBdLT5kYXRhOwogCiAJCWlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpIHsKQEAgLTMwODYsNyArMzA4Niw3IEBACiAJCWlmIChwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5ucl9mcmFncyA+IDEpCiAJCQlpcHdfaGRyLT5mcmFnbWVudF9zaXplID0KIAkJCSAgICBwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiLT5mcmFnX3NpemUgLQotCQkJICAgIElFRUU4MDIxMV8zQUREUl9MRU47CisJCQkgICAgTElCSVBXXzNBRERSX0xFTjsKIAkJZWxzZQogCQkJaXB3X2hkci0+ZnJhZ21lbnRfc2l6ZSA9IDA7CiAKQEAgLTMxMTksMTMgKzMxMTksMTMgQEAKIAkJCQkgICAgSVBXX0JEX1NUQVRVU19UWF9GUkFNRV9OT1RfTEFTVF9GUkFHTUVOVDsKIAogCQkJdGJkLT5idWZfbGVuZ3RoID0gcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yi0+Ci0JCQkgICAgZnJhZ21lbnRzW2ldLT5sZW4gLSBJRUVFODAyMTFfM0FERFJfTEVOOworCQkJICAgIGZyYWdtZW50c1tpXS0+bGVuIC0gTElCSVBXXzNBRERSX0xFTjsKIAogCQkJdGJkLT5ob3N0X2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAogCQkJCQkJCXBhY2tldC0+aW5mby5kX3N0cnVjdC4KIAkJCQkJCQl0eGItPmZyYWdtZW50c1tpXS0+CiAJCQkJCQkJZGF0YSArCi0JCQkJCQkJSUVFRTgwMjExXzNBRERSX0xFTiwKKwkJCQkJCQlMSUJJUFdfM0FERFJfTEVOLAogCQkJCQkJCXRiZC0+YnVmX2xlbmd0aCwKIAkJCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIApAQCAtMzMzMCwxMCArMzMzMCwxMCBAQAogCXJldHVybiBJUlFfTk9ORTsKIH0KIAotc3RhdGljIGludCBpcHcyMTAwX3R4KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgIGludCBwcmkpCitzdGF0aWMgbmV0ZGV2X3R4X3QgaXB3MjEwMF90eChzdHJ1Y3QgbGliaXB3X3R4YiAqdHhiLAorCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwogCXN0cnVjdCBpcHcyMTAwX3R4X3BhY2tldCAqcGFja2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMzY5LDEyICszMzY5LDEyIEBACiAJaXB3MjEwMF90eF9zZW5kX2RhdGEocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb3dfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKLSAgICAgIGZhaWxfdW5sb2NrOgorZmFpbF91bmxvY2s6CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvd19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfbXNnX2FsbG9jYXRlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYpCkBAIC00NDg4LDcgKzQ0ODgsNyBAQAogCQkvKiBXZSBzaW1wbHkgZHJvcCBhbnkgU0tCcyB0aGF0IGhhdmUgYmVlbiBxdWV1ZWQgZm9yCiAJCSAqIHRyYW5zbWl0ICovCiAJCWlmIChwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiKSB7Ci0JCQlpZWVlODAyMTFfdHhiX2ZyZWUocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LgorCQkJbGliaXB3X3R4Yl9mcmVlKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC4KIAkJCQkJICAgdHhiKTsKIAkJCXByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC50eGIgPSBOVUxMOwogCQl9CkBAIC00NTI3LDcgKzQ1MjcsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IFRYX1BFTkRFRF9RVUVVRV9MRU5HVEg7IGkrKykgewogCQlpZiAocHJpdi0+dHhfYnVmZmVyc1tpXS5pbmZvLmRfc3RydWN0LnR4YikgewotCQkJaWVlZTgwMjExX3R4Yl9mcmVlKHByaXYtPnR4X2J1ZmZlcnNbaV0uaW5mby5kX3N0cnVjdC4KKwkJCWxpYmlwd190eGJfZnJlZShwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QuCiAJCQkJCSAgIHR4Yik7CiAJCQlwcml2LT50eF9idWZmZXJzW2ldLmluZm8uZF9zdHJ1Y3QudHhiID0gTlVMTDsKIAkJfQpAQCAtNTU1OCw5ICs1NTU4LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgc2hpbV9fc2V0X3NlY3VyaXR5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqc2VjKQorCQkJICAgICAgIHN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgKnNlYykKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgaSwgZm9yY2VfdXBkYXRlID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CkBAIC01NzUzLDcgKzU3NTMsNyBAQAogICogbWV0aG9kIGFzIHdlbGwpIHRvIHRhbGsgdG8gdGhlIGZpcm13YXJlICovCiBzdGF0aWMgaW50IGlwdzIxMDBfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCWludCBlcnIgPSAwOwogCkBAIC01NzgxLDcgKzU3ODEsNyBAQAogCiBzdGF0aWMgaW50IGlwdzIxMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJSVBXX0RFQlVHX0lORk8oImRldi0+b3BlblxuIik7CiAKQEAgLTU3OTcsNyArNTc5Nyw3IEBACiAKIHN0YXRpYyBpbnQgaXB3MjEwMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKIAlzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQgKnBhY2tldDsKQEAgLTU4MTgsNyArNTgxOCw3IEBACiAJCWxpc3RfZGVsKGVsZW1lbnQpOwogCQlERUNfU1RBVCgmcHJpdi0+dHhfcGVuZF9zdGF0KTsKIAotCQlpZWVlODAyMTFfdHhiX2ZyZWUocGFja2V0LT5pbmZvLmRfc3RydWN0LnR4Yik7CisJCWxpYmlwd190eGJfZnJlZShwYWNrZXQtPmluZm8uZF9zdHJ1Y3QudHhiKTsKIAkJcGFja2V0LT5pbmZvLmRfc3RydWN0LnR4YiA9IE5VTEw7CiAKIAkJbGlzdF9hZGRfdGFpbChlbGVtZW50LCAmcHJpdi0+dHhfZnJlZV9saXN0KTsKQEAgLTU4MzYsNyArNTgzNiw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGlwdzIxMDBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIApAQCAtNTg2MSw4ICs1ODYxLDggQEAKIHN0YXRpYyBpbnQgaXB3MjEwMF93cGFfc2V0X2F1dGhfYWxncyhzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2LCBpbnQgdmFsdWUpCiB7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgc2VjID0gewogCQkuZmxhZ3MgPSBTRUNfQVVUSF9NT0RFLAogCX07CiAJaW50IHJldCA9IDA7CkBAIC01OTA3LDcgKzU5MDcsNyBAQAogc3RhdGljIHZvaWQgaXB3X2V0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAljaGFyIGZ3X3Zlcls2NF0sIHVjb2RlX3Zlcls2NF07CiAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CkBAIC01OTI0LDcgKzU5MjQsNyBAQAogCiBzdGF0aWMgdTMyIGlwdzIxMDBfZXRodG9vbF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXJldHVybiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpID8gMSA6IDA7CiB9CiAKQEAgLTYwMTEsOCArNjAxMSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwdzIxMDBfbmV0ZGV2X29wcyA9IHsKIAkubmRvX29wZW4JCT0gaXB3MjEwMF9vcGVuLAogCS5uZG9fc3RvcAkJPSBpcHcyMTAwX2Nsb3NlLAotCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKLQkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGxpYmlwd194bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBsaWJpcHdfY2hhbmdlX210dSwKIAkubmRvX2luaXQJCT0gaXB3MjEwMF9uZXRfaW5pdCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gaXB3MjEwMF90eF90aW1lb3V0LAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaXB3MjEwMF9zZXRfYWRkcmVzcywKQEAgLTYwMjksMTAgKzYwMjksMTAgQEAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3ByaXYpKTsKKwlkZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3ByaXYpLCAwKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7Ci0JcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJcHJpdi0+aWVlZSA9IG5ldGRldl9wcml2KGRldik7CiAJcHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CiAJcHJpdi0+bmV0X2RldiA9IGRldjsKQEAgLTYwNDYsNyArNjA0Niw3IEBACiAJZGV2LT5uZXRkZXZfb3BzID0gJmlwdzIxMDBfbmV0ZGV2X29wczsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmlwdzIxMDBfZXRodG9vbF9vcHM7CiAJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpcHcyMTAwX3d4X2hhbmRsZXJfZGVmOwotCXByaXYtPndpcmVsZXNzX2RhdGEuaWVlZTgwMjExID0gcHJpdi0+aWVlZTsKKwlwcml2LT53aXJlbGVzc19kYXRhLmxpYmlwdyA9IHByaXYtPmllZWU7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDMgKiBIWjsKIAlkZXYtPmlycSA9IDA7CkBAIC02MDc2LDcgKzYwNzYsNyBAQAogCXByaXYtPmllZWUtPmllZWU4MDJfMXggPSAxOwogCiAJLyogU2V0IG1vZHVsZSBwYXJhbWV0ZXJzICovCi0Jc3dpdGNoIChtb2RlKSB7CisJc3dpdGNoIChuZXR3b3JrX21vZGUpIHsKIAljYXNlIDE6CiAJCXByaXYtPmllZWUtPml3X21vZGUgPSBJV19NT0RFX0FESE9DOwogCQlicmVhazsKQEAgLTYyMDIsNyArNjIwMiw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgcHJpdik7CkBAIC02MzQyLDcgKzYzNDIsNyBAQAogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBjaV9kZXYtPmRldi5rb2JqLAogCQkJCSAgICZpcHcyMTAwX2F0dHJpYnV0ZV9ncm91cCk7CiAKLQkJZnJlZV9pZWVlODAyMTEoZGV2KTsKKwkJZnJlZV9pZWVlODAyMTEoZGV2LCAwKTsKIAkJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOwogCX0KIApAQCAtNjQwMCw3ICs2NDAwLDcgQEAKIAkJaWYgKGRldi0+YmFzZV9hZGRyKQogCQkJaW91bm1hcCgodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHIpOwogCi0JCWZyZWVfaWVlZTgwMjExKGRldik7CisJCWZyZWVfaWVlZTgwMjExKGRldiwgMCk7CiAJfQogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lfZGV2KTsKQEAgLTY2MjksNyArNjYyOSw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKIAkJc3RyY3B5KHdycXUtPm5hbWUsICJ1bmFzc29jaWF0ZWQiKTsKIAllbHNlCkBAIC02NjQzLDcgKzY2NDMsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X2ZyZXEgKmZ3cnEgPSAmd3JxdS0+ZnJlcTsKIAlpbnQgZXJyID0gMDsKIApAQCAtNjY5Myw3ICs2NjkzLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAl3cnF1LT5mcmVxLmUgPSAwOwogCkBAIC02NzE0LDcgKzY3MTQsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAlJUFdfREVCVUdfV1goIlNFVCBNb2RlIC0+ICVkIFxuIiwgd3JxdS0+bW9kZSk7CkBAIC02NzU3LDcgKzY3NTcsNyBAQAogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCiAJICovCiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCXdycXUtPm1vZGUgPSBwcml2LT5pZWVlLT5pd19tb2RlOwogCUlQV19ERUJVR19XWCgiR0VUIE1vZGUgLT4gJWRcbiIsIHdycXUtPm1vZGUpOwpAQCAtNjc5Miw3ICs2NzkyLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKIAl1MTYgdmFsOwogCWludCBpLCBsZXZlbDsKQEAgLTY5MTMsNyArNjkxMyw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhbnlbXSA9IHsKQEAgLTY5NjIsNyArNjk2Miw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJLyogSWYgd2UgYXJlIGFzc29jaWF0ZWQsIHRyeWluZyB0byBhc3NvY2lhdGUsIG9yIGhhdmUgYSBzdGF0aWNhbGx5CiAJICogY29uZmlndXJlZCBCU1NJRCB0aGVuIHJldHVybiB0aGF0OyBvdGhlcndpc2UgcmV0dXJuIEFOWSAqLwpAQCAtNjk4MCw3ICs2OTgwLDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWNoYXIgKmVzc2lkID0gIiI7CS8qIEFOWSAqLwogCWludCBsZW5ndGggPSAwOwogCWludCBlcnIgPSAwOwpAQCAtNzAzNSw3ICs3MDM1LDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQpAQCAtNzA2Myw3ICs3MDYzLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKIAkJcmV0dXJuIC1FMkJJRzsKQEAgLTcwODUsNyArNzA4NSw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljayk7CiAJbWVtY3B5KGV4dHJhLCBwcml2LT5uaWNrLCB3cnF1LT5kYXRhLmxlbmd0aCk7CkBAIC03MTAwLDcgKzcxMDAsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJdTMyIHRhcmdldF9yYXRlID0gd3JxdS0+Yml0cmF0ZS52YWx1ZTsKIAl1MzIgcmF0ZTsKIAlpbnQgZXJyID0gMDsKQEAgLTcxNDAsNyArNzE0MCw3IEBACiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgdmFsOwogCXVuc2lnbmVkIGludCBsZW4gPSBzaXplb2YodmFsKTsKIAlpbnQgZXJyID0gMDsKQEAgLTcxOTIsNyArNzE5Miw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IHZhbHVlLCBlcnI7CiAKIAkvKiBBdXRvIFJUUyBub3QgeWV0IHN1cHBvcnRlZCAqLwpAQCAtNzIzMSw3ICs3MjMxLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAl3cnF1LT5ydHMudmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkICYgflJUU19ESVNBQkxFRDsKIAl3cnF1LT5ydHMuZml4ZWQgPSAxOwkvKiBubyBhdXRvIHNlbGVjdCAqLwpAQCAtNzI0OCw3ICs3MjQ4LDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIgPSAwLCB2YWx1ZTsKIAkKIAlpZiAoaXB3X3JhZGlvX2tpbGxfc3cocHJpdiwgd3JxdS0+dHhwb3dlci5kaXNhYmxlZCkpCkBAIC03MjkzLDcgKzcyOTMsNyBAQAogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCiAJICovCiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCXdycXUtPnR4cG93ZXIuZGlzYWJsZWQgPSAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykgPyAxIDogMDsKIApAQCAtNzMyMCw3ICs3MzIwLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAoIXdycXUtPmZyYWcuZml4ZWQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzM1MCw3ICs3MzUwLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJd3JxdS0+ZnJhZy52YWx1ZSA9IHByaXYtPmZyYWdfdGhyZXNob2xkICYgfkZSQUdfRElTQUJMRUQ7CiAJd3JxdS0+ZnJhZy5maXhlZCA9IDA7CS8qIG5vIGF1dG8gc2VsZWN0ICovCiAJd3JxdS0+ZnJhZy5kaXNhYmxlZCA9IChwcml2LT5mcmFnX3RocmVzaG9sZCAmIEZSQUdfRElTQUJMRUQpID8gMSA6IDA7CkBAIC03MzY0LDcgKzczNjQsNyBAQAogCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MSUZFVElNRSB8fCB3cnF1LT5yZXRyeS5kaXNhYmxlZCkKQEAgLTc0MTIsNyArNzQxMiw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJd3JxdS0+cmV0cnkuZGlzYWJsZWQgPSAwOwkvKiBjYW4ndCBiZSBkaXNhYmxlZCAqLwogCkBAIC03NDQwLDcgKzc0NDAsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwpAQCAtNzQ3Miw4ICs3NDcyLDggQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfc2Nhbihwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJcmV0dXJuIGxpYmlwd193eF9nZXRfc2Nhbihwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKIC8qCkBAIC03NDg3LDggKzc0ODcsOCBAQAogCSAqIE5vIGNoZWNrIG9mIFNUQVRVU19JTklUSUFMSVpFRCByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJcmV0dXJuIGxpYmlwd193eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3MjEwMF93eF9nZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC03NDk5LDE1ICs3NDk5LDE1IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOworCXJldHVybiBsaWJpcHdfd3hfZ2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOwogfQogCiBzdGF0aWMgaW50IGlwdzIxMDBfd3hfc2V0X3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAogCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CkBAIC03NTU2LDcgKzc1NTYsNyBAQAogCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZS4gIE5vIGFjdGlvbiBsb2NrIHJlcXVpcmVkCiAJICovCiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCWlmICghKHByaXYtPnBvd2VyX21vZGUgJiBJUFdfUE9XRVJfRU5BQkxFRCkpCiAJCXdycXUtPnBvd2VyLmRpc2FibGVkID0gMTsKQEAgLTc1ODAsOCArNzU4MCw4IEBACiAJCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXU4ICpidWY7CiAKIAlpZiAoIWllZWUtPndwYV9lbmFibGVkKQpAQCAtNzYxNSw4ICs3NjE1LDggQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CiAKIAlpZiAoaWVlZS0+d3BhX2llX2xlbiA9PSAwIHx8IGllZWUtPndwYV9pZSA9PSBOVUxMKSB7CiAJCXdycXUtPmRhdGEubGVuZ3RoID0gMDsKQEAgLTc2MzcsOCArNzYzNyw4IEBACiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CiAJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NjgyLDcgKzc2ODIsNyBAQAogCQkJICogY2FuIHVzZSB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgQ0FQX1BSSVZBQ1lfT04gYml0IHNob3VsZAogCQkJICogYmUgc2V0LgogCQkJICovCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKKwkJCXN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgc2VjID0gewogCQkJCS5mbGFncyA9IFNFQ19FTkFCTEVELAogCQkJCS5lbmFibGVkID0gcGFyYW0tPnZhbHVlLAogCQkJfTsKQEAgLTc3MzAsOCArNzczMCw4IEBACiAJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCWludCByZXQgPSAwOwpAQCAtNzc5Miw4ICs3NzkyLDggQEAKIAkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9zZXRfZW5jb2RlZXh0KHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlyZXR1cm4gbGliaXB3X3d4X3NldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOwogfQogCiAvKiBTSU9DR0lXRU5DT0RFRVhUICovCkBAIC03ODAxLDggKzc4MDEsOCBAQAogCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlyZXR1cm4gaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOworCXJldHVybiBsaWJpcHdfd3hfZ2V0X2VuY29kZWV4dChwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKIC8qIFNJT0NTSVdNTE1FICovCkBAIC03ODEwLDcgKzc4MTAsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKIAlfX2xlMTYgcmVhc29uOwogCkBAIC03ODQxLDcgKzc4NDEsNyBAQAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCAqcGFybXMgPSAoaW50ICopZXh0cmE7CiAJaW50IGVuYWJsZSA9IChwYXJtc1swXSA+IDApOwogCWludCBlcnIgPSAwOwpAQCAtNzg3Miw3ICs3ODcyLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfSU5JVElBTElaRUQpCiAJCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogCXJldHVybiAwOwpAQCAtNzg4NCw3ICs3ODg0LDcgQEAKIAkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciA9IDAsIG1vZGUgPSAqKGludCAqKWV4dHJhOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKQEAgLTc5MTIsNyArNzkxMiw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBsZXZlbCA9IElQV19QT1dFUl9MRVZFTChwcml2LT5wb3dlcl9tb2RlKTsKIAlzMzIgdGltZW91dCwgcGVyaW9kOwogCkBAIC03OTQ4LDcgKzc5NDgsNyBAQAogCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGVyciwgbW9kZSA9ICooaW50ICopZXh0cmE7CiAKIAltdXRleF9sb2NrKCZwcml2LT5hY3Rpb25fbXV0ZXgpOwpAQCAtNzk4MSw3ICs3OTgxLDcgQEAKIAkgKiBUaGlzIGNhbiBiZSBjYWxsZWQgYXQgYW55IHRpbWUuICBObyBhY3Rpb24gbG9jayByZXF1aXJlZAogCSAqLwogCi0Jc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0xPTkdfUFJFQU1CTEUpCiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAibG9uZyAoMSkiKTsKQEAgLTc5OTYsNyArNzk5Niw3IEBACiAJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIsIG1vZGUgPSAqKGludCAqKWV4dHJhOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+YWN0aW9uX211dGV4KTsKQEAgLTgwMjgsNyArODAyOCw3IEBACiAJICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lLiAgTm8gYWN0aW9uIGxvY2sgcmVxdWlyZWQKIAkgKi8KIAotCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0spCiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiQ1JDIGNoZWNrZWQgKDEpIik7CkBAIC04MTc5LDEwICs4MTc5LDExIEBACiAJaW50IHJzc2lfcXVhbDsKIAlpbnQgdHhfcXVhbDsKIAlpbnQgYmVhY29uX3F1YWw7CisJaW50IHF1YWxpdHk7CiAKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzOwotCXUzMiByc3NpLCBxdWFsaXR5LCB0eF9yZXRyaWVzLCBtaXNzZWRfYmVhY29ucywgdHhfZmFpbHVyZXM7CisJdTMyIHJzc2ksIHR4X3JldHJpZXMsIG1pc3NlZF9iZWFjb25zLCB0eF9mYWlsdXJlczsKIAl1MzIgb3JkX2xlbiA9IHNpemVvZih1MzIpOwogCiAJaWYgKCFwcml2KQpAQCAtODI2NSw3ICs4MjY2LDggQEAKIAkJCWJlYWNvbl9xdWFsID0gKDIwIC0gbWlzc2VkX2JlYWNvbnMpICoKIAkJCSAgICAoUEVSRkVDVCAtIFZFUllfR09PRCkgLyAyMCArIFZFUllfR09PRDsKIAotCQlxdWFsaXR5ID0gbWluKGJlYWNvbl9xdWFsLCBtaW4odHhfcXVhbCwgcnNzaV9xdWFsKSk7CisJCXF1YWxpdHkgPSBtaW4odHhfcXVhbCwgcnNzaV9xdWFsKTsKKwkJcXVhbGl0eSA9IG1pbihiZWFjb25fcXVhbCwgcXVhbGl0eSk7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogCQlpZiAoYmVhY29uX3F1YWwgPT0gcXVhbGl0eSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKaW5kZXggZjE4M2Q5NS4uMWVhYjBkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAibGliaXB3LmgiCiAKIHN0cnVjdCBpcHcyMTAwX3ByaXY7CiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQ7CkBAIC0zNDMsNyArMzQzLDcgQEAKIAkJc3RydWN0IHsJLyogREFUQSAqLwogCQkJc3RydWN0IGlwdzIxMDBfZGF0YV9oZWFkZXIgKmRhdGE7CiAJCQlkbWFfYWRkcl90IGRhdGFfcGh5czsKLQkJCXN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGI7CisJCQlzdHJ1Y3QgbGliaXB3X3R4YiAqdHhiOwogCQl9IGRfc3RydWN0OwogCX0gaW5mbzsKIAlpbnQgamlmZnlfc3RhcnQ7CkBAIC00OTIsNyArNDkyLDcgQEAKIAlpbnQgc3RvcF9oYW5nX2NoZWNrOwkvKiBTZXQgMSB3aGVuIHNodXR0aW5nIGRvd24gdG8ga2lsbCBoYW5nX2NoZWNrICovCiAJaW50IHN0b3BfcmZfa2lsbDsJLyogU2V0IDEgd2hlbiBzaHV0dGluZyBkb3duIHRvIGtpbGwgcmZfa2lsbCAqLwogCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWU7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWU7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBjb25maWc7CiAJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXR5OwpAQCAtNzg4LDcgKzc4OCw3IEBACiAjZGVmaW5lIElQV19DQVJEX0RJU0FCTEVfUEhZX09GRl9DT01QTEVURV9XQUlUCSAgICAxMDAJLy8gMTAwIG1pbGxpCiAjZGVmaW5lIElQV19QUkVQQVJFX1BPV0VSX0RPV05fQ09NUExFVEVfV0FJVAkgICAgMTAwCS8vIDEwMCBtaWxsaQogCi0jZGVmaW5lIElQV19IRUFERVJfODAyXzExX1NJWkUJCSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpCisjZGVmaW5lIElQV19IRUFERVJfODAyXzExX1NJWkUJCSBzaXplb2Yoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIpCiAjZGVmaW5lIElQV19NQVhfODAyMTFfUEFZTE9BRF9TSVpFICAgICAgICAgICAgICAyMzA0VQogI2RlZmluZSBJUFdfTUFYXzgwMl8xMV9QQVlMT0FEX0xFTkdUSAkJMjMxMgogI2RlZmluZSBJUFdfTUFYX0FDQ0VQVEFCTEVfVFhfRlJBTUVfTEVOR1RICTE1MzYKQEAgLTgwMywxMyArODAzLDEzIEBACiAJCUlQV184MDJfMTFfRkNTX0xFTkdUSCkKIAogI2RlZmluZSBJUFdfODAyXzExX1BBWUxPQURfT0ZGU0VUIFwKLSAgICAgICAgKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyBcCi0gICAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkcikpCisgICAgICAgIChzaXplb2Yoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIpICsgXAorICAgICAgICAgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfc25hcF9oZHIpKQogCiBzdHJ1Y3QgaXB3MjEwMF9yeCB7CiAJdW5pb24gewogCQl1bnNpZ25lZCBjaGFyIHBheWxvYWRbSVBXX1JYX05JQ19CVUZGRVJfTEVOR1RIXTsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGVhZGVyOworCQlzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciBoZWFkZXI7CiAJCXUzMiBzdGF0dXM7CiAJCXN0cnVjdCBpcHcyMTAwX25vdGlmaWNhdGlvbiBub3RpZmljYXRpb247CiAJCXN0cnVjdCBpcHcyMTAwX2NtZF9oZWFkZXIgY29tbWFuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggZjU5M2ZiYi4uOGQ1OGU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTgzLDEzICs4MywxMyBAQAogCiBzdGF0aWMgaW50IGNtZGxvZyA9IDA7CiBzdGF0aWMgaW50IGRlYnVnID0gMDsKLXN0YXRpYyBpbnQgY2hhbm5lbCA9IDA7Ci1zdGF0aWMgaW50IG1vZGUgPSAwOworc3RhdGljIGludCBkZWZhdWx0X2NoYW5uZWwgPSAwOworc3RhdGljIGludCBuZXR3b3JrX21vZGUgPSAwOwogCiBzdGF0aWMgdTMyIGlwd19kZWJ1Z19sZXZlbDsKIHN0YXRpYyBpbnQgYXNzb2NpYXRlOwogc3RhdGljIGludCBhdXRvX2NyZWF0ZSA9IDE7Ci1zdGF0aWMgaW50IGxlZCA9IDA7CitzdGF0aWMgaW50IGxlZF9zdXBwb3J0ID0gMDsKIHN0YXRpYyBpbnQgZGlzYWJsZSA9IDA7CiBzdGF0aWMgaW50IGJ0X2NvZXhpc3QgPSAwOwogc3RhdGljIGludCBod2NyeXB0byA9IDA7CkBAIC0xMDMsNiArMTAzLDI1IEBACiBzdGF0aWMgaW50IHJ0YXBfaWZhY2UgPSAwOyAgICAgLyogZGVmOiAwIC0tIGRvIG5vdCBjcmVhdGUgcnRhcCBpbnRlcmZhY2UgKi8KICNlbmRpZgogCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGlwdzIyMDBfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDYwIH0sCisJeyAuYml0cmF0ZSA9IDkwIH0sCisJeyAuYml0cmF0ZSA9IDEyMCB9LAorCXsgLmJpdHJhdGUgPSAxODAgfSwKKwl7IC5iaXRyYXRlID0gMjQwIH0sCisJeyAuYml0cmF0ZSA9IDM2MCB9LAorCXsgLmJpdHJhdGUgPSA0ODAgfSwKKwl7IC5iaXRyYXRlID0gNTQwIH0KK307CisKKyNkZWZpbmUgaXB3MjIwMF9hX3JhdGVzCQkoaXB3MjIwMF9yYXRlcyArIDQpCisjZGVmaW5lIGlwdzIyMDBfbnVtX2FfcmF0ZXMJOAorI2RlZmluZSBpcHcyMjAwX2JnX3JhdGVzCShpcHcyMjAwX3JhdGVzICsgMCkKKyNkZWZpbmUgaXB3MjIwMF9udW1fYmdfcmF0ZXMJMTIKIAogI2lmZGVmIENPTkZJR19JUFcyMjAwX1FPUwogc3RhdGljIGludCBxb3NfZW5hYmxlID0gMDsKQEAgLTExMSw3ICsxMzAsNyBAQAogc3RhdGljIGludCBidXJzdF9kdXJhdGlvbl9DQ0sgPSAwOwogc3RhdGljIGludCBidXJzdF9kdXJhdGlvbl9PRkRNID0gMDsKIAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgZGVmX3Fvc19wYXJhbWV0ZXJzX09GRE0gPSB7CitzdGF0aWMgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBkZWZfcW9zX3BhcmFtZXRlcnNfT0ZETSA9IHsKIAl7UU9TX1RYMF9DV19NSU5fT0ZETSwgUU9TX1RYMV9DV19NSU5fT0ZETSwgUU9TX1RYMl9DV19NSU5fT0ZETSwKIAkgUU9TX1RYM19DV19NSU5fT0ZETX0sCiAJe1FPU19UWDBfQ1dfTUFYX09GRE0sIFFPU19UWDFfQ1dfTUFYX09GRE0sIFFPU19UWDJfQ1dfTUFYX09GRE0sCkBAIC0xMjIsNyArMTQxLDcgQEAKIAkgUU9TX1RYMl9UWE9QX0xJTUlUX09GRE0sIFFPU19UWDNfVFhPUF9MSU1JVF9PRkRNfQogfTsKIAotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMgZGVmX3Fvc19wYXJhbWV0ZXJzX0NDSyA9IHsKK3N0YXRpYyBzdHJ1Y3QgbGliaXB3X3Fvc19wYXJhbWV0ZXJzIGRlZl9xb3NfcGFyYW1ldGVyc19DQ0sgPSB7CiAJe1FPU19UWDBfQ1dfTUlOX0NDSywgUU9TX1RYMV9DV19NSU5fQ0NLLCBRT1NfVFgyX0NXX01JTl9DQ0ssCiAJIFFPU19UWDNfQ1dfTUlOX0NDS30sCiAJe1FPU19UWDBfQ1dfTUFYX0NDSywgUU9TX1RYMV9DV19NQVhfQ0NLLCBRT1NfVFgyX0NXX01BWF9DQ0ssCkBAIC0xMzMsNyArMTUyLDcgQEAKIAkgUU9TX1RYM19UWE9QX0xJTUlUX0NDS30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIGRlZl9wYXJhbWV0ZXJzX09GRE0gPSB7CitzdGF0aWMgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19PRkRNID0gewogCXtERUZfVFgwX0NXX01JTl9PRkRNLCBERUZfVFgxX0NXX01JTl9PRkRNLCBERUZfVFgyX0NXX01JTl9PRkRNLAogCSBERUZfVFgzX0NXX01JTl9PRkRNfSwKIAl7REVGX1RYMF9DV19NQVhfT0ZETSwgREVGX1RYMV9DV19NQVhfT0ZETSwgREVGX1RYMl9DV19NQVhfT0ZETSwKQEAgLTE0NCw3ICsxNjMsNyBAQAogCSBERUZfVFgyX1RYT1BfTElNSVRfT0ZETSwgREVGX1RYM19UWE9QX0xJTUlUX09GRE19CiB9OwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19DQ0sgPSB7CitzdGF0aWMgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBkZWZfcGFyYW1ldGVyc19DQ0sgPSB7CiAJe0RFRl9UWDBfQ1dfTUlOX0NDSywgREVGX1RYMV9DV19NSU5fQ0NLLCBERUZfVFgyX0NXX01JTl9DQ0ssCiAJIERFRl9UWDNfQ1dfTUlOX0NDS30sCiAJe0RFRl9UWDBfQ1dfTUFYX0NDSywgREVGX1RYMV9DV19NQVhfQ0NLLCBERUZfVFgyX0NXX01BWF9DQ0ssCkBAIC0xNjQsOSArMTgzLDkgQEAKIAogc3RhdGljIHUzMiBpcHdfcW9zX2dldF9idXJzdF9kdXJhdGlvbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpOwogCi1zdGF0aWMgaW50IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycwogCQkJCSAgICAgICAqcW9zX3BhcmFtKTsKLXN0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX2luZm9fY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKIAkJCQkgICAgICpxb3NfcGFyYW0pOwogI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCkBAIC0xODMwLDcgKzE4NDksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgY2hhbm5lbCkpCisJCWlmIChsaWJpcHdfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkKIAkJCXByaXYtPnNwZWVkX3NjYW5bcG9zKytdID0gY2hhbm5lbDsKIAkJZWxzZQogCQkJSVBXX1dBUk5JTkcoIlNraXBwaW5nIGludmFsaWQgY2hhbm5lbCByZXF1ZXN0OiAlZFxuIiwKQEAgLTE4ODIsNyArMTkwMSw3IEBACiAJCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCWNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8gPSBsaWJpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKIAlpbnQgbGVuID0gMCwgaTsKIAogCWxlbiA9IHNwcmludGYoJmJ1ZltsZW5dLApAQCAtMTg5MiwxNCArMTkxMSwxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBnZW8tPmJnX2NoYW5uZWxzOyBpKyspIHsKIAkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJWQ6IEJTUyVzJXMsICVzLCBCYW5kICVzLlxuIiwKIAkJCSAgICAgICBnZW8tPmJnW2ldLmNoYW5uZWwsCi0JCQkgICAgICAgZ2VvLT5iZ1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9SQURBUl9ERVRFQ1QgPworCQkJICAgICAgIGdlby0+YmdbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUkFEQVJfREVURUNUID8KIAkJCSAgICAgICAiIChyYWRhciBzcGVjdHJ1bSkiIDogIiIsCi0JCQkgICAgICAgKChnZW8tPmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX05PX0lCU1MpIHx8Ci0JCQkJKGdlby0+YmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUkFEQVJfREVURUNUKSkKKwkJCSAgICAgICAoKGdlby0+YmdbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfTk9fSUJTUykgfHwKKwkJCQkoZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9SQURBUl9ERVRFQ1QpKQogCQkJICAgICAgID8gIiIgOiAiLCBJQlNTIiwKLQkJCSAgICAgICBnZW8tPmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSA/CisJCQkgICAgICAgZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9QQVNTSVZFX09OTFkgPwogCQkJICAgICAgICJwYXNzaXZlIG9ubHkiIDogImFjdGl2ZS9wYXNzaXZlIiwKLQkJCSAgICAgICBnZW8tPmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX0JfT05MWSA/CisJCQkgICAgICAgZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9CX09OTFkgPwogCQkJICAgICAgICJCIiA6ICJCL0ciKTsKIAl9CiAKQEAgLTE5MDksMTIgKzE5MjgsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5hX2NoYW5uZWxzOyBpKyspIHsKIAkJbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiJWQ6IEJTUyVzJXMsICVzLlxuIiwKIAkJCSAgICAgICBnZW8tPmFbaV0uY2hhbm5lbCwKLQkJCSAgICAgICBnZW8tPmFbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUkFEQVJfREVURUNUID8KKwkJCSAgICAgICBnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUkFEQVJfREVURUNUID8KIAkJCSAgICAgICAiIChyYWRhciBzcGVjdHJ1bSkiIDogIiIsCi0JCQkgICAgICAgKChnZW8tPmFbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfTk9fSUJTUykgfHwKLQkJCQkoZ2VvLT5hW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX1JBREFSX0RFVEVDVCkpCisJCQkgICAgICAgKChnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfTk9fSUJTUykgfHwKKwkJCQkoZ2VvLT5hW2ldLmZsYWdzICYgTElCSVBXX0NIX1JBREFSX0RFVEVDVCkpCiAJCQkgICAgICAgPyAiIiA6ICIsIElCU1MiLAotCQkJICAgICAgIGdlby0+YVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPworCQkJICAgICAgIGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9QQVNTSVZFX09OTFkgPwogCQkJICAgICAgICJwYXNzaXZlIG9ubHkiIDogImFjdGl2ZS9wYXNzaXZlIik7CiAJfQogCkBAIC0yNDI5LDcgKzI0NDgsNyBAQAogCiBzdGF0aWMgaW50IGlwd19zZXRfdHhfcG93ZXIoc3RydWN0IGlwd19wcml2ICpwcml2KQogewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwljb25zdCBzdHJ1Y3QgbGliaXB3X2dlbyAqZ2VvID0gbGliaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CiAJc3RydWN0IGlwd190eF9wb3dlciB0eF9wb3dlcjsKIAlzOCBtYXhfcG93ZXI7CiAJaW50IGk7CkBAIC0yOTQyLDEyICsyOTYxLDEyIEBACiBzdGF0aWMgdm9pZCBpcHdfcmVtb3ZlX2N1cnJlbnRfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudCwgKnNhZmU7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfc2FmZShlbGVtZW50LCBzYWZlLCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0KSB7Ci0JCW5ldHdvcmsgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaywgbGlzdCk7CisJCW5ldHdvcmsgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBsaWJpcHdfbmV0d29yaywgbGlzdCk7CiAJCWlmICghbWVtY21wKG5ldHdvcmstPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKSB7CiAJCQlsaXN0X2RlbChlbGVtZW50KTsKIAkJCWxpc3RfYWRkX3RhaWwoJm5ldHdvcmstPmxpc3QsCkBAIC0zNzY1LDcgKzM3ODQsNyBAQAogCQkJCSBsZTE2X3RvX2NwdShiZC0+dS5kYXRhLmNodW5rX2xlbltpXSksCiAJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAodHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0pIHsKLQkJCWllZWU4MDIxMV90eGJfZnJlZSh0eHEtPnR4Ylt0eHEtPnEubGFzdF91c2VkXSk7CisJCQlsaWJpcHdfdHhiX2ZyZWUodHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0pOwogCQkJdHhxLT50eGJbdHhxLT5xLmxhc3RfdXNlZF0gPSBOVUxMOwogCQl9CiAJfQpAQCAtNDA4NCw3ICs0MTAzLDcgQEAKIAkvKiBJZiBjdXJyZW50bHkgYXNzb2NpYXRlZCBpbiBCIG1vZGUsIHJlc3RyaWN0IHRoZSBtYXhpbXVtCiAJICogcmF0ZSBtYXRjaCB0byBCIHJhdGVzICovCiAJaWYgKHByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlID09IElQV19CX01PREUpCi0JCW1hc2sgJj0gSUVFRTgwMjExX0NDS19SQVRFU19NQVNLOworCQltYXNrICY9IExJQklQV19DQ0tfUkFURVNfTUFTSzsKIAogCS8qIFRPRE86IFZlcmlmeSB0aGF0IHRoZSByYXRlIGlzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCByYXRlcwogCSAqIGxpc3QuICovCkBAIC00MDkyLDI5ICs0MTExLDI5IEBACiAJd2hpbGUgKGkgJiYgIShtYXNrICYgaSkpCiAJCWkgPj49IDE7CiAJc3dpdGNoIChpKSB7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0s6CisJY2FzZSBMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0s6CiAJCXJldHVybiAxMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLOgorCWNhc2UgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLOgogCQlyZXR1cm4gMjAwMDAwMDsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSzoKKwljYXNlIExJQklQV19DQ0tfUkFURV81TUJfTUFTSzoKIAkJcmV0dXJuIDU1MDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLOgorCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUJfTUFTSzoKIAkJcmV0dXJuIDYwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLOgorCWNhc2UgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSzoKIAkJcmV0dXJuIDkwMDAwMDA7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLOgorCWNhc2UgTElCSVBXX0NDS19SQVRFXzExTUJfTUFTSzoKIAkJcmV0dXJuIDExMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzEyTUJfTUFTSzoKIAkJcmV0dXJuIDEyMDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzE4TUJfTUFTSzoKIAkJcmV0dXJuIDE4MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzI0TUJfTUFTSzoKIAkJcmV0dXJuIDI0MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzM2TUJfTUFTSzoKIAkJcmV0dXJuIDM2MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUJfTUFTSzoKIAkJcmV0dXJuIDQ4MDAwMDAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0s6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSzoKIAkJcmV0dXJuIDU0MDAwMDAwOwogCX0KIApAQCAtNDI3OSw5ICs0Mjk4LDEwIEBACiAJSVBXX0RFQlVHX1NUQVRTKCJTaWduYWwgbGV2ZWwgOiAlM2QlJSAoJWQgZEJtKVxuIiwKIAkJCXNpZ25hbF9xdWFsaXR5LCByc3NpKTsKIAotCXF1YWxpdHkgPSBtaW4oYmVhY29uX3F1YWxpdHksCi0JCSAgICAgIG1pbihyYXRlX3F1YWxpdHksCi0JCQkgIG1pbih0eF9xdWFsaXR5LCBtaW4ocnhfcXVhbGl0eSwgc2lnbmFsX3F1YWxpdHkpKSkpOworCXF1YWxpdHkgPSBtaW4ocnhfcXVhbGl0eSwgc2lnbmFsX3F1YWxpdHkpOworCXF1YWxpdHkgPSBtaW4odHhfcXVhbGl0eSwgcXVhbGl0eSk7CisJcXVhbGl0eSA9IG1pbihyYXRlX3F1YWxpdHksIHF1YWxpdHkpOworCXF1YWxpdHkgPSBtaW4oYmVhY29uX3F1YWxpdHksIHF1YWxpdHkpOwogCWlmIChxdWFsaXR5ID09IGJlYWNvbl9xdWFsaXR5KQogCQlJUFdfREVCVUdfU1RBVFMoIlF1YWxpdHkgKCVkJSUpOiBDbGFtcGVkIHRvIG1pc3NlZCBiZWFjb25zLlxuIiwKIAkJCQlxdWFsaXR5KTsKQEAgLTQ0MjUsNyArNDQ0NSw2IEBACiB7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAl1MTYgc2l6ZSA9IGxlMTZfdG9fY3B1KG5vdGlmLT5zaXplKTsKLQlub3RpZi0+c2l6ZSA9IGxlMTZfdG9fY3B1KG5vdGlmLT5zaXplKTsKIAogCUlQV19ERUJVR19OT1RJRigidHlwZSA9ICVpICglZCBieXRlcylcbiIsIG5vdGlmLT5zdWJ0eXBlLCBzaXplKTsKIApAQCAtNDQ4MCwxMSArNDQ5OSwxMSBAQAogCQkJCQkgICAgID09IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKSkgewogCQkJCQkJaWYgKChzaXplb2YKIAkJCQkJCSAgICAgKHN0cnVjdAotCQkJCQkJICAgICAgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlKQorCQkJCQkJICAgICAgbGliaXB3X2Fzc29jX3Jlc3BvbnNlKQogCQkJCQkJICAgICA8PSBzaXplKQogCQkJCQkJICAgICYmIChzaXplIDw9IDIzMTQpKSB7CiAJCQkJCQkJc3RydWN0Ci0JCQkJCQkJaWVlZTgwMjExX3J4X3N0YXRzCisJCQkJCQkJbGliaXB3X3J4X3N0YXRzCiAJCQkJCQkJICAgIHN0YXRzID0gewogCQkJCQkJCQkubGVuID0gc2l6ZSAtIDEsCiAJCQkJCQkJfTsKQEAgLTQ0OTIsMTAgKzQ1MTEsMTAgQEAKIAkJCQkJCQlJUFdfREVCVUdfUU9TCiAJCQkJCQkJICAgICgiUW9TIEFzc29jaWF0ZSAiCiAJCQkJCQkJICAgICAic2l6ZSAlZFxuIiwgc2l6ZSk7Ci0JCQkJCQkJaWVlZTgwMjExX3J4X21ndChwcml2LT4KKwkJCQkJCQlsaWJpcHdfcnhfbWd0KHByaXYtPgogCQkJCQkJCQkJIGllZWUsCiAJCQkJCQkJCQkgKHN0cnVjdAotCQkJCQkJCQkJICBpZWVlODAyMTFfaGRyXzRhZGRyCisJCQkJCQkJCQkgIGxpYmlwd19oZHJfNGFkZHIKIAkJCQkJCQkJCSAgKikKIAkJCQkJCQkJCSAmbm90aWYtPnUucmF3LCAmc3RhdHMpOwogCQkJCQkJfQpAQCAtNDU1MSwxMSArNDU3MCwxMSBAQAogCQkJY2FzZSBDTUFTX0lOSVQ6ewogCQkJCQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FVVEgpIHsKIAkJCQkJCXN0cnVjdAotCQkJCQkJICAgIGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQorCQkJCQkJICAgIGxpYmlwd19hc3NvY19yZXNwb25zZQogCQkJCQkJKnJlc3A7CiAJCQkJCQlyZXNwID0KIAkJCQkJCSAgICAoc3RydWN0Ci0JCQkJCQkgICAgIGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQorCQkJCQkJICAgICBsaWJpcHdfYXNzb2NfcmVzcG9uc2UKIAkJCQkJCSAgICAgKikmbm90aWYtPnUucmF3OwogCQkJCQkJSVBXX0RFQlVHKElQV19ETF9OT1RJRiB8CiAJCQkJCQkJICBJUFdfRExfU1RBVEUgfApAQCAtNTI0MSwzMyArNTI2MCwzMyBAQAogCiBzdGF0aWMgaW50IGlwd19pc19yYXRlX2luX21hc2soc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgaWVlZV9tb2RlLCB1OCByYXRlKQogewotCXJhdGUgJj0gfklFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0s7CisJcmF0ZSAmPSB+TElCSVBXX0JBU0lDX1JBVEVfTUFTSzsKIAlpZiAoaWVlZV9tb2RlID09IElFRUVfQSkgewogCQlzd2l0Y2ggKHJhdGUpIHsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjoKLQkJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyA/CisJCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUI6CisJCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfNk1CX01BU0sgPwogCQkJICAgIDEgOiAwOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgotCQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLID8KKwkJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzlNQjoKKwkJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyA/CiAJCQkgICAgMSA6IDA7Ci0JCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgorCQljYXNlIExJQklQV19PRkRNX1JBVEVfMTJNQjoKIAkJCXJldHVybiBwcml2LT4KLQkJCSAgICByYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0sgPyAxIDogMDsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6CisJCQkgICAgcmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLID8gMSA6IDA7CisJCWNhc2UgTElCSVBXX09GRE1fUkFURV8xOE1COgogCQkJcmV0dXJuIHByaXYtPgotCQkJICAgIHJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSyA/IDEgOiAwOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKKwkJCSAgICByYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0sgPyAxIDogMDsKKwkJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzI0TUI6CiAJCQlyZXR1cm4gcHJpdi0+Ci0JCQkgICAgcmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQl9NQVNLID8gMSA6IDA7Ci0JCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgorCQkJICAgIHJhdGVzX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzI0TUJfTUFTSyA/IDEgOiAwOworCQljYXNlIExJQklQV19PRkRNX1JBVEVfMzZNQjoKIAkJCXJldHVybiBwcml2LT4KLQkJCSAgICByYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0sgPyAxIDogMDsKLQkJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6CisJCQkgICAgcmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMzZNQl9NQVNLID8gMSA6IDA7CisJCWNhc2UgTElCSVBXX09GRE1fUkFURV80OE1COgogCQkJcmV0dXJuIHByaXYtPgotCQkJICAgIHJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSyA/IDEgOiAwOwotCQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKKwkJCSAgICByYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV80OE1CX01BU0sgPyAxIDogMDsKKwkJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzU0TUI6CiAJCQlyZXR1cm4gcHJpdi0+Ci0JCQkgICAgcmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLID8gMSA6IDA7CisJCQkgICAgcmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfNTRNQl9NQVNLID8gMSA6IDA7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNTI3NSwxNCArNTI5NCwxNCBAQAogCiAJLyogQiBhbmQgRyBtaXhlZCAqLwogCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzFNQjoKLQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sgPyAxIDogMDsKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8yTUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLID8gMSA6IDA7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgotCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX0NDS19SQVRFXzFNQjoKKwkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0sgPyAxIDogMDsKKwljYXNlIExJQklQV19DQ0tfUkFURV8yTUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLID8gMSA6IDA7CisJY2FzZSBMSUJJUFdfQ0NLX1JBVEVfNU1COgorCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19DQ0tfUkFURV81TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX0NDS19SQVRFXzExTUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX0NDS19SQVRFXzExTUJfTUFTSyA/IDEgOiAwOwogCX0KIAogCS8qIElmIHdlIGFyZSBsaW1pdGVkIHRvIEIgbW9kdWxhdGlvbnMsIGJhaWwgYXQgdGhpcyBwb2ludCAqLwpAQCAtNTI5MSwyOSArNTMxMCwyOSBAQAogCiAJLyogRyAqLwogCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV85TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgotCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLID8gMSA6IDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0sgPyAxIDogMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKLQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSyA/IDEgOiAwOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgotCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLID8gMSA6IDA7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6Ci0JCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0sgPyAxIDogMDsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKLQkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV82TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV85TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV8xMk1COgorCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLID8gMSA6IDA7CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzE4TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0sgPyAxIDogMDsKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMjRNQjoKKwkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzI0TUJfTUFTSyA/IDEgOiAwOworCWNhc2UgTElCSVBXX09GRE1fUkFURV8zNk1COgorCQlyZXR1cm4gcHJpdi0+cmF0ZXNfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMzZNQl9NQVNLID8gMSA6IDA7CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUI6CisJCXJldHVybiBwcml2LT5yYXRlc19tYXNrICYgTElCSVBXX09GRE1fUkFURV80OE1CX01BU0sgPyAxIDogMDsKKwljYXNlIExJQklQV19PRkRNX1JBVEVfNTRNQjoKKwkJcmV0dXJuIHByaXYtPnJhdGVzX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSyA/IDEgOiAwOwogCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlwd19jb21wYXRpYmxlX3JhdGVzKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCisJCQkJY29uc3Qgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrLAogCQkJCXN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzICpyYXRlcykKIHsKIAlpbnQgbnVtX3JhdGVzLCBpOwpAQCAtNTMyNSw3ICs1MzQ0LDcgQEAKIAkJaWYgKCFpcHdfaXNfcmF0ZV9pbl9tYXNrKHByaXYsIG5ldHdvcmstPm1vZGUsCiAJCQkJCSBuZXR3b3JrLT5yYXRlc1tpXSkpIHsKIAotCQkJaWYgKG5ldHdvcmstPnJhdGVzW2ldICYgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgeworCQkJaWYgKG5ldHdvcmstPnJhdGVzW2ldICYgTElCSVBXX0JBU0lDX1JBVEVfTUFTSykgewogCQkJCUlQV19ERUJVR19TQ0FOKCJBZGRpbmcgbWFza2VkIG1hbmRhdG9yeSAiCiAJCQkJCSAgICAgICAicmF0ZSAlMDJYXG4iLAogCQkJCQkgICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOwpAQCAtNTM0Nyw3ICs1MzY2LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3JhdGVzOyBpKyspIHsKIAkJaWYgKCFpcHdfaXNfcmF0ZV9pbl9tYXNrKHByaXYsIG5ldHdvcmstPm1vZGUsCiAJCQkJCSBuZXR3b3JrLT5yYXRlc19leFtpXSkpIHsKLQkJCWlmIChuZXR3b3JrLT5yYXRlc19leFtpXSAmIElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0spIHsKKwkJCWlmIChuZXR3b3JrLT5yYXRlc19leFtpXSAmIExJQklQV19CQVNJQ19SQVRFX01BU0spIHsKIAkJCQlJUFdfREVCVUdfU0NBTigiQWRkaW5nIG1hc2tlZCBtYW5kYXRvcnkgIgogCQkJCQkgICAgICAgInJhdGUgJTAyWFxuIiwKIAkJCQkJICAgICAgIG5ldHdvcmstPnJhdGVzX2V4W2ldKTsKQEAgLTUzODMsNzMgKzU0MDIsNzMgQEAKIHN0YXRpYyB2b2lkIGlwd19hZGRfY2NrX3NjYW5fcmF0ZXMoc3RydWN0IGlwd19zdXBwb3J0ZWRfcmF0ZXMgKnJhdGVzLAogCQkJCSAgIHU4IG1vZHVsYXRpb24sIHUzMiByYXRlX21hc2spCiB7Ci0JdTggYmFzaWNfbWFzayA9IChJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OID09IG1vZHVsYXRpb24pID8KLQkgICAgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyA6IDA7CisJdTggYmFzaWNfbWFzayA9IChMSUJJUFdfT0ZETV9NT0RVTEFUSU9OID09IG1vZHVsYXRpb24pID8KKwkgICAgTElCSVBXX0JBU0lDX1JBVEVfTUFTSyA6IDA7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0spCiAJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9Ci0JCSAgICBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwkJICAgIExJQklQV19CQVNJQ19SQVRFX01BU0sgfCBMSUJJUFdfQ0NLX1JBVEVfMU1COwogCi0JaWYgKHJhdGVfbWFzayAmIElFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPQotCQkgICAgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV8yTUI7CisJCSAgICBMSUJJUFdfQkFTSUNfUkFURV9NQVNLIHwgTElCSVBXX0NDS19SQVRFXzJNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19DQ0tfUkFURV81TUJfTUFTSykKIAkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0gYmFzaWNfbWFzayB8Ci0JCSAgICBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COworCQkgICAgTElCSVBXX0NDS19SQVRFXzVNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfQ0NLX1JBVEVfMTFNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COworCQkgICAgTElCSVBXX0NDS19SQVRFXzExTUI7CiB9CiAKIHN0YXRpYyB2b2lkIGlwd19hZGRfb2ZkbV9zY2FuX3JhdGVzKHN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzICpyYXRlcywKIAkJCQkgICAgdTggbW9kdWxhdGlvbiwgdTMyIHJhdGVfbWFzaykKIHsKLQl1OCBiYXNpY19tYXNrID0gKElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gPT0gbW9kdWxhdGlvbikgPwotCSAgICBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIDogMDsKKwl1OCBiYXNpY19tYXNrID0gKExJQklQV19PRkRNX01PRFVMQVRJT04gPT0gbW9kdWxhdGlvbikgPworCSAgICBMSUJJUFdfQkFTSUNfUkFURV9NQVNLIDogMDsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COworCQkgICAgTElCSVBXX09GRE1fUkFURV82TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX09GRE1fUkFURV85TUJfTUFTSykKIAkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0KLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COworCQkgICAgTElCSVBXX09GRE1fUkFURV85TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwkJICAgIExJQklQV19PRkRNX1JBVEVfMTJNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0spCiAJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9Ci0JCSAgICBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI7CisJCSAgICBMSUJJUFdfT0ZETV9SQVRFXzE4TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV8yNE1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPSBiYXNpY19tYXNrIHwKLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKKwkJICAgIExJQklQV19PRkRNX1JBVEVfMjRNQjsKIAotCWlmIChyYXRlX21hc2sgJiBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUJfTUFTSykKKwlpZiAocmF0ZV9tYXNrICYgTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0spCiAJCXJhdGVzLT5zdXBwb3J0ZWRfcmF0ZXNbcmF0ZXMtPm51bV9yYXRlcysrXSA9Ci0JCSAgICBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI7CisJCSAgICBMSUJJUFdfT0ZETV9SQVRFXzM2TUI7CiAKLQlpZiAocmF0ZV9tYXNrICYgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0spCisJaWYgKHJhdGVfbWFzayAmIExJQklQV19PRkRNX1JBVEVfNDhNQl9NQVNLKQogCQlyYXRlcy0+c3VwcG9ydGVkX3JhdGVzW3JhdGVzLT5udW1fcmF0ZXMrK10gPQotCQkgICAgSUVFRTgwMjExX09GRE1fUkFURV80OE1COworCQkgICAgTElCSVBXX09GRE1fUkFURV80OE1COwogCi0JaWYgKHJhdGVfbWFzayAmIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLKQorCWlmIChyYXRlX21hc2sgJiBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSykKIAkJcmF0ZXMtPnN1cHBvcnRlZF9yYXRlc1tyYXRlcy0+bnVtX3JhdGVzKytdID0KLQkJICAgIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKwkJICAgIExJQklQV19PRkRNX1JBVEVfNTRNQjsKIH0KIAogc3RydWN0IGlwd19uZXR3b3JrX21hdGNoIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcms7CisJc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrOwogCXN0cnVjdCBpcHdfc3VwcG9ydGVkX3JhdGVzIHJhdGVzOwogfTsKIAogc3RhdGljIGludCBpcHdfZmluZF9hZGhvY19uZXR3b3JrKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBpcHdfbmV0d29ya19tYXRjaCAqbWF0Y2gsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmssCisJCQkJICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmssCiAJCQkJICBpbnQgcm9hbWluZykKIHsKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyByYXRlczsKQEAgLTU1NzAsNyArNTU4OSw3IEBACiAJfQogCiAJLyogRmlsdGVyIG91dCBhbnkgaW5jb21wYXRpYmxlIGZyZXEgLyBtb2RlIGNvbWJpbmF0aW9ucyAqLwotCWlmICghaWVlZTgwMjExX2lzX3ZhbGlkX21vZGUocHJpdi0+aWVlZSwgbmV0d29yay0+bW9kZSkpIHsKKwlpZiAoIWxpYmlwd19pc192YWxpZF9tb2RlKHByaXYtPmllZWUsIG5ldHdvcmstPm1vZGUpKSB7CiAJCUlQV19ERUJVR19NRVJHRSgiTmV0d29yayAnJXMgKCVwTSknIGV4Y2x1ZGVkICIKIAkJCQkiYmVjYXVzZSBvZiBpbnZhbGlkIGZyZXF1ZW5jeS9tb2RlICIKIAkJCQkiY29tYmluYXRpb24uXG4iLApAQCAtNTYyMCw3ICs1NjM5LDcgQEAKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXB3X3ByaXYsIG1lcmdlX25ldHdvcmtzKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CiAJc3RydWN0IGlwd19uZXR3b3JrX21hdGNoIG1hdGNoID0gewogCQkubmV0d29yayA9IHByaXYtPmFzc29jX25ldHdvcmsKIAl9OwpAQCAtNTY2Miw3ICs1NjgxLDcgQEAKIAogc3RhdGljIGludCBpcHdfYmVzdF9uZXR3b3JrKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgaXB3X25ldHdvcmtfbWF0Y2ggKm1hdGNoLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaywgaW50IHJvYW1pbmcpCisJCQkgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrLCBpbnQgcm9hbWluZykKIHsKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyByYXRlczsKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwpAQCAtNTc5Niw3ICs1ODE1LDcgQEAKIAl9CiAKIAkvKiBGaWx0ZXIgb3V0IGFueSBpbmNvbXBhdGlibGUgZnJlcSAvIG1vZGUgY29tYmluYXRpb25zICovCi0JaWYgKCFpZWVlODAyMTFfaXNfdmFsaWRfbW9kZShwcml2LT5pZWVlLCBuZXR3b3JrLT5tb2RlKSkgeworCWlmICghbGliaXB3X2lzX3ZhbGlkX21vZGUocHJpdi0+aWVlZSwgbmV0d29yay0+bW9kZSkpIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoJXBNKScgZXhjbHVkZWQgIgogCQkJCSJiZWNhdXNlIG9mIGludmFsaWQgZnJlcXVlbmN5L21vZGUgIgogCQkJCSJjb21iaW5hdGlvbi5cbiIsCkBAIC01ODA3LDcgKzU4MjYsNyBAQAogCX0KIAogCS8qIEZpbHRlciBvdXQgaW52YWxpZCBjaGFubmVsIGluIGN1cnJlbnQgR0VPICovCi0JaWYgKCFpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBuZXR3b3JrLT5jaGFubmVsKSkgeworCWlmICghbGliaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgbmV0d29yay0+Y2hhbm5lbCkpIHsKIAkJSVBXX0RFQlVHX0FTU09DKCJOZXR3b3JrICclcyAoJXBNKScgZXhjbHVkZWQgIgogCQkJCSJiZWNhdXNlIG9mIGludmFsaWQgY2hhbm5lbCBpbiBjdXJyZW50IEdFT1xuIiwKIAkJCQlwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCkBAIC01ODUzLDkgKzU4NzIsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBpcHdfYWRob2NfY3JlYXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJICAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmspCiB7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCWNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8gPSBsaWJpcHdfZ2V0X2dlbyhwcml2LT5pZWVlKTsKIAlpbnQgaTsKIAogCS8qCkBAIC01ODcwLDI1ICs1ODg5LDI1IEBACiAJICogRlcgZmF0YWwgZXJyb3IuCiAJICoKIAkgKi8KLQlzd2l0Y2ggKGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7Ci0JY2FzZSBJRUVFODAyMTFfNTJHSFpfQkFORDoKKwlzd2l0Y2ggKGxpYmlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7CisJY2FzZSBMSUJJUFdfNTJHSFpfQkFORDoKIAkJbmV0d29yay0+bW9kZSA9IElFRUVfQTsKLQkJaSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOworCQlpID0gbGliaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7CiAJCUJVR19PTihpID09IC0xKTsKLQkJaWYgKGdlby0+YVtpXS5mbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkpIHsKKwkJaWYgKGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9QQVNTSVZFX09OTFkpIHsKIAkJCUlQV19XQVJOSU5HKCJPdmVycmlkaW5nIGludmFsaWQgY2hhbm5lbFxuIik7CiAJCQlwcml2LT5jaGFubmVsID0gZ2VvLT5hWzBdLmNoYW5uZWw7CiAJCX0KIAkJYnJlYWs7CiAKLQljYXNlIElFRUU4MDIxMV8yNEdIWl9CQU5EOgorCWNhc2UgTElCSVBXXzI0R0haX0JBTkQ6CiAJCWlmIChwcml2LT5pZWVlLT5tb2RlICYgSUVFRV9HKQogCQkJbmV0d29yay0+bW9kZSA9IElFRUVfRzsKIAkJZWxzZQogCQkJbmV0d29yay0+bW9kZSA9IElFRUVfQjsKLQkJaSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOworCQlpID0gbGliaXB3X2NoYW5uZWxfdG9faW5kZXgocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCk7CiAJCUJVR19PTihpID09IC0xKTsKLQkJaWYgKGdlby0+YmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSB7CisJCWlmIChnZW8tPmJnW2ldLmZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSkgewogCQkJSVBXX1dBUk5JTkcoIk92ZXJyaWRpbmcgaW52YWxpZCBjaGFubmVsXG4iKTsKIAkJCXByaXYtPmNoYW5uZWwgPSBnZW8tPmJnWzBdLmNoYW5uZWw7CiAJCX0KQEAgLTYxMTUsNzAgKzYxMzQsNzEgQEAKIHN0YXRpYyB2b2lkIGlwd19zZXRfZml4ZWRfcmF0ZShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCBtb2RlKQogewogCS8qIFRPRE86IFZlcmlmeSB0aGF0IHRoaXMgd29ya3MuLi4gKi8KLQlzdHJ1Y3QgaXB3X2ZpeGVkX3JhdGUgZnIgPSB7Ci0JCS50eF9yYXRlcyA9IHByaXYtPnJhdGVzX21hc2sKLQl9OworCXN0cnVjdCBpcHdfZml4ZWRfcmF0ZSBmcjsKIAl1MzIgcmVnOwogCXUxNiBtYXNrID0gMDsKKwl1MTYgbmV3X3R4X3JhdGVzID0gcHJpdi0+cmF0ZXNfbWFzazsKIAogCS8qIElkZW50aWZ5ICdjdXJyZW50IEZXIGJhbmQnIGFuZCBtYXRjaCBpdCB3aXRoIHRoZSBmaXhlZAogCSAqIFR4IHJhdGVzICovCiAKIAlzd2l0Y2ggKHByaXYtPmllZWUtPmZyZXFfYmFuZCkgewotCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CS8qIEEgb25seSAqLworCWNhc2UgTElCSVBXXzUyR0haX0JBTkQ6CS8qIEEgb25seSAqLwogCQkvKiBJRUVFX0EgKi8KLQkJaWYgKHByaXYtPnJhdGVzX21hc2sgJiB+SUVFRTgwMjExX09GRE1fUkFURVNfTUFTSykgeworCQlpZiAocHJpdi0+cmF0ZXNfbWFzayAmIH5MSUJJUFdfT0ZETV9SQVRFU19NQVNLKSB7CiAJCQkvKiBJbnZhbGlkIGZpeGVkIHJhdGUgbWFzayAqLwogCQkJSVBXX0RFQlVHX1dYCiAJCQkgICAgKCJpbnZhbGlkIGZpeGVkIHJhdGUgbWFzayBpbiBpcHdfc2V0X2ZpeGVkX3JhdGVcbiIpOwotCQkJZnIudHhfcmF0ZXMgPSAwOworCQkJbmV3X3R4X3JhdGVzID0gMDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJZnIudHhfcmF0ZXMgPj49IElFRUU4MDIxMV9PRkRNX1NISUZUX01BU0tfQTsKKwkJbmV3X3R4X3JhdGVzID4+PSBMSUJJUFdfT0ZETV9TSElGVF9NQVNLX0E7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoJCS8qIDIuNEdoeiBvciBNaXhlZCAqLwogCQkvKiBJRUVFX0IgKi8KIAkJaWYgKG1vZGUgPT0gSUVFRV9CKSB7Ci0JCQlpZiAoZnIudHhfcmF0ZXMgJiB+SUVFRTgwMjExX0NDS19SQVRFU19NQVNLKSB7CisJCQlpZiAobmV3X3R4X3JhdGVzICYgfkxJQklQV19DQ0tfUkFURVNfTUFTSykgewogCQkJCS8qIEludmFsaWQgZml4ZWQgcmF0ZSBtYXNrICovCiAJCQkJSVBXX0RFQlVHX1dYCiAJCQkJICAgICgiaW52YWxpZCBmaXhlZCByYXRlIG1hc2sgaW4gaXB3X3NldF9maXhlZF9yYXRlXG4iKTsKLQkJCQlmci50eF9yYXRlcyA9IDA7CisJCQkJbmV3X3R4X3JhdGVzID0gMDsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogSUVFRV9HICovCi0JCWlmIChmci50eF9yYXRlcyAmIH4oSUVFRTgwMjExX0NDS19SQVRFU19NQVNLIHwKLQkJCQkgICAgSUVFRTgwMjExX09GRE1fUkFURVNfTUFTSykpIHsKKwkJaWYgKG5ld190eF9yYXRlcyAmIH4oTElCSVBXX0NDS19SQVRFU19NQVNLIHwKKwkJCQkgICAgTElCSVBXX09GRE1fUkFURVNfTUFTSykpIHsKIAkJCS8qIEludmFsaWQgZml4ZWQgcmF0ZSBtYXNrICovCiAJCQlJUFdfREVCVUdfV1gKIAkJCSAgICAoImludmFsaWQgZml4ZWQgcmF0ZSBtYXNrIGluIGlwd19zZXRfZml4ZWRfcmF0ZVxuIik7Ci0JCQlmci50eF9yYXRlcyA9IDA7CisJCQluZXdfdHhfcmF0ZXMgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyAmIGZyLnR4X3JhdGVzKSB7Ci0JCQltYXNrIHw9IChJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLID4+IDEpOwotCQkJZnIudHhfcmF0ZXMgJj0gfklFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0s7CisJCWlmIChMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLICYgbmV3X3R4X3JhdGVzKSB7CisJCQltYXNrIHw9IChMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLID4+IDEpOworCQkJbmV3X3R4X3JhdGVzICY9IH5MSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLOwogCQl9CiAKLQkJaWYgKElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sgJiBmci50eF9yYXRlcykgewotCQkJbWFzayB8PSAoSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSyA+PiAxKTsKLQkJCWZyLnR4X3JhdGVzICY9IH5JRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLOworCQlpZiAoTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyAmIG5ld190eF9yYXRlcykgeworCQkJbWFzayB8PSAoTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyA+PiAxKTsKKwkJCW5ld190eF9yYXRlcyAmPSB+TElCSVBXX09GRE1fUkFURV85TUJfTUFTSzsKIAkJfQogCi0JCWlmIChJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSyAmIGZyLnR4X3JhdGVzKSB7Ci0JCQltYXNrIHw9IChJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSyA+PiAxKTsKLQkJCWZyLnR4X3JhdGVzICY9IH5JRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSzsKKwkJaWYgKExJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLICYgbmV3X3R4X3JhdGVzKSB7CisJCQltYXNrIHw9IChMSUJJUFdfT0ZETV9SQVRFXzEyTUJfTUFTSyA+PiAxKTsKKwkJCW5ld190eF9yYXRlcyAmPSB+TElCSVBXX09GRE1fUkFURV8xMk1CX01BU0s7CiAJCX0KIAotCQlmci50eF9yYXRlcyB8PSBtYXNrOworCQluZXdfdHhfcmF0ZXMgfD0gbWFzazsKIAkJYnJlYWs7CiAJfQogCisJZnIudHhfcmF0ZXMgPSBjcHVfdG9fbGUxNihuZXdfdHhfcmF0ZXMpOworCiAJcmVnID0gaXB3X3JlYWQzMihwcml2LCBJUFdfTUVNX0ZJWEVEX09WRVJSSURFKTsKIAlpcHdfd3JpdGVfcmVnMzIocHJpdiwgcmVnLCAqKHUzMiAqKSAmIGZyKTsKIH0KQEAgLTYyMDMsMTIgKzYyMjMsMTIgQEAKIAkJCQkgIGludCBzY2FuX3R5cGUpCiB7CiAJaW50IGNoYW5uZWxfaW5kZXggPSAwOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW87CisJY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmdlbzsKIAlpbnQgaTsKIAotCWdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCWdlbyA9IGxpYmlwd19nZXRfZ2VvKHByaXYtPmllZWUpOwogCi0JaWYgKHByaXYtPmllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKSB7CisJaWYgKHByaXYtPmllZWUtPmZyZXFfYmFuZCAmIExJQklQV181MkdIWl9CQU5EKSB7CiAJCWludCBzdGFydCA9IGNoYW5uZWxfaW5kZXg7CiAJCWZvciAoaSA9IDA7IGkgPCBnZW8tPmFfY2hhbm5lbHM7IGkrKykgewogCQkJaWYgKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKQEAgLTYyMTgsNyArNjIzOCw3IEBACiAJCQlzY2FuLT5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0gZ2VvLT5hW2ldLmNoYW5uZWw7CiAJCQlpcHdfc2V0X3NjYW5fdHlwZShzY2FuLCBjaGFubmVsX2luZGV4LAogCQkJCQkgIGdlby0+YVtpXS4KLQkJCQkJICBmbGFncyAmIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFkgPworCQkJCQkgIGZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSA/CiAJCQkJCSAgSVBXX1NDQU5fUEFTU0lWRV9GVUxMX0RXRUxMX1NDQU4gOgogCQkJCQkgIHNjYW5fdHlwZSk7CiAJCX0KQEAgLTYyMzAsMTEgKzYyNTAsMTEgQEAKIAkJfQogCX0KIAotCWlmIChwcml2LT5pZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfMjRHSFpfQkFORCkgeworCWlmIChwcml2LT5pZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfMjRHSFpfQkFORCkgewogCQlpbnQgc3RhcnQgPSBjaGFubmVsX2luZGV4OwogCQlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NQRUVEX1NDQU4pIHsKIAkJCWludCBpbmRleDsKLQkJCXU4IGNoYW5uZWxzW0lFRUU4MDIxMV8yNEdIWl9DSEFOTkVMU10gPSB7CisJCQl1OCBjaGFubmVsc1tMSUJJUFdfMjRHSFpfQ0hBTk5FTFNdID0gewogCQkJCS8qIG5vcCBvdXQgdGhlIGxpc3QgKi8KIAkJCQlbMF0gPSAwCiAJCQl9OwpAQCAtNjI2NiwxMSArNjI4NiwxMSBAQAogCQkJCWNoYW5uZWxfaW5kZXgrKzsKIAkJCQlzY2FuLT5jaGFubmVsc19saXN0W2NoYW5uZWxfaW5kZXhdID0gY2hhbm5lbDsKIAkJCQlpbmRleCA9Ci0JCQkJICAgIGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIGNoYW5uZWwpOworCQkJCSAgICBsaWJpcHdfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBjaGFubmVsKTsKIAkJCQlpcHdfc2V0X3NjYW5fdHlwZShzY2FuLCBjaGFubmVsX2luZGV4LAogCQkJCQkJICBnZW8tPmJnW2luZGV4XS4KIAkJCQkJCSAgZmxhZ3MgJgotCQkJCQkJICBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID8KKwkJCQkJCSAgTElCSVBXX0NIX1BBU1NJVkVfT05MWSA/CiAJCQkJCQkgIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOCiAJCQkJCQkgIDogc2Nhbl90eXBlKTsKIAkJCX0KQEAgLTYyODUsNyArNjMwNSw3IEBACiAJCQkJaXB3X3NldF9zY2FuX3R5cGUoc2NhbiwgY2hhbm5lbF9pbmRleCwKIAkJCQkJCSAgZ2VvLT5iZ1tpXS4KIAkJCQkJCSAgZmxhZ3MgJgotCQkJCQkJICBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID8KKwkJCQkJCSAgTElCSVBXX0NIX1BBU1NJVkVfT05MWSA/CiAJCQkJCQkgIElQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOCiAJCQkJCQkgIDogc2Nhbl90eXBlKTsKIAkJCX0KQEAgLTYzNTIsNyArNjM3Miw3IEBACiAJfQogCiAJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc2NhbikpOwotCXNjYW4uZnVsbF9zY2FuX2luZGV4ID0gY3B1X3RvX2xlMzIoaWVlZTgwMjExX2dldF9zY2Fucyhwcml2LT5pZWVlKSk7CisJc2Nhbi5mdWxsX3NjYW5faW5kZXggPSBjcHVfdG9fbGUzMihsaWJpcHdfZ2V0X3NjYW5zKHByaXYtPmllZWUpKTsKIAogCWlmICh0eXBlID09IElXX1NDQU5fVFlQRV9QQVNTSVZFKSB7CiAJCUlQV19ERUJVR19XWCgidXNlIHBhc3NpdmUgc2Nhbm5pbmdcbiIpOwpAQCAtNjM4MywxMyArNjQwMywxMyBAQAogCQl1OCBjaGFubmVsOwogCQl1OCBiYW5kID0gMDsKIAotCQlzd2l0Y2ggKGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7Ci0JCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CisJCXN3aXRjaCAobGliaXB3X2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCkpIHsKKwkJY2FzZSBMSUJJUFdfNTJHSFpfQkFORDoKIAkJCWJhbmQgPSAodTgpIChJUFdfQV9NT0RFIDw8IDYpIHwgMTsKIAkJCWNoYW5uZWwgPSBwcml2LT5jaGFubmVsOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBJRUVFODAyMTFfMjRHSFpfQkFORDoKKwkJY2FzZSBMSUJJUFdfMjRHSFpfQkFORDoKIAkJCWJhbmQgPSAodTgpIChJUFdfQl9NT0RFIDw8IDYpIHwgMTsKIAkJCWNoYW5uZWwgPSBwcml2LT5jaGFubmVsOwogCQkJYnJlYWs7CkBAIC02NTEwLDggKzY1MzAsOCBAQAogCiBzdGF0aWMgaW50IGlwd193cGFfc2V0X2F1dGhfYWxncyhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBsaWJpcHdfc2VjdXJpdHkgc2VjID0gewogCQkuZmxhZ3MgPSBTRUNfQVVUSF9NT0RFLAogCX07CiAJaW50IHJldCA9IDA7CkBAIC02NTYxLDggKzY1ODEsOCBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU7CiAJdTggKmJ1ZjsKIAlpbnQgZXJyID0gMDsKIApAQCAtNjU5Nyw4ICs2NjE3LDggQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCWludCBlcnIgPSAwOwogCiAJaWYgKGllZWUtPndwYV9pZV9sZW4gPT0gMCB8fCBpZWVlLT53cGFfaWUgPT0gTlVMTCkgewpAQCAtNjY0MCw4ICs2NjYwLDggQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOworCXN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjY5Miw3ICs2NzEyLDcgQEAKIAkJCSAqIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhlIENBUF9QUklWQUNZX09OIGJpdCBzaG91bGQKIAkJCSAqIGJlIHNldC4KIAkJCSAqLwotCQkJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJCQlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5IHNlYyA9IHsKIAkJCQkuZmxhZ3MgPSBTRUNfRU5BQkxFRCwKIAkJCQkuZW5hYmxlZCA9IHBhcmFtLT52YWx1ZSwKIAkJCX07CkBAIC02NzQwLDggKzY3NjAsOCBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCWludCByZXQgPSAwOwpAQCAtNjc5OSw3ICs2ODE5LDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CiAKIAlpZiAoaHdjcnlwdG8pIHsKQEAgLTY4MjEsNyArNjg0MSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOworCXJldHVybiBsaWJpcHdfd3hfc2V0X2VuY29kZWV4dChwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiB9CiAKIC8qIFNJT0NHSVdFTkNPREVFWFQgKi8KQEAgLTY4MjksOCArNjg0OSw4IEBACiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZWV4dChwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlyZXR1cm4gbGliaXB3X3d4X2dldF9lbmNvZGVleHQocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwgZXh0cmEpOwogfQogCiAvKiBTSU9DU0lXTUxNRSAqLwpAQCAtNjgzOCw3ICs2ODU4LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKIAlfX2xlMTYgcmVhc29uOwogCkBAIC02ODg4LDkgKzY5MDgsOSBAQAogKi8KIHN0YXRpYyBpbnQgaXB3X3Fvc19oYW5kbGVfcHJvYmVfcmVzcG9uc2Uoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCQkgaW50IGFjdGl2ZV9uZXR3b3JrLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJCQkgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewotCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMpOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMpOwogCiAJaWYgKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykKIAkJbmV0d29yay0+cW9zX2RhdGEuYWN0aXZlID0gbmV0d29yay0+cW9zX2RhdGEuc3VwcG9ydGVkOwpAQCAtNjk0OCwxMiArNjk2OCwxMiBAQAogKiBJUFdfQ01EX1FPU19QQVJBTUVURVJTIGFuZCBJUFdfQ01EX1dNRV9JTkZPCiAqLwogc3RhdGljIGludCBpcHdfcW9zX2FjdGl2YXRlKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhICpxb3NfbmV0d29ya19kYXRhKQorCQkJICAgIHN0cnVjdCBsaWJpcHdfcW9zX2RhdGEgKnFvc19uZXR3b3JrX2RhdGEpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHFvc19wYXJhbWV0ZXJzW1FPU19RT1NfU0VUU107Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqYWN0aXZlX29uZSA9IE5VTEw7Ci0JdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyk7CisJc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyBxb3NfcGFyYW1ldGVyc1tRT1NfUU9TX1NFVFNdOworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKmFjdGl2ZV9vbmUgPSBOVUxMOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMpOwogCXUzMiBidXJzdF9kdXJhdGlvbjsKIAlpbnQgaTsKIAl1OCB0eXBlOwpAQCAtNzAxNCw3ICs3MDM0LDcgQEAKIAogCUlQV19ERUJVR19RT1MoIlFvUyBzZW5kaW5nIElQV19DTURfUU9TX1BBUkFNRVRFUlNcbiIpOwogCWVyciA9IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChwcml2LAotCQkJCQkgIChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICopCisJCQkJCSAgKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKikKIAkJCQkJICAmKHFvc19wYXJhbWV0ZXJzWzBdKSk7CiAJaWYgKGVycikKIAkJSVBXX0RFQlVHX1FPUygiUW9TIElQV19DTURfUU9TX1BBUkFNRVRFUlMgZmFpbGVkXG4iKTsKQEAgLTcwMjgsMTMgKzcwNDgsMTMgQEAKIHN0YXRpYyBpbnQgaXB3X3Fvc19zZXRfaW5mb19lbGVtZW50KHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHFvc19pbmZvOworCXN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgcW9zX2luZm87CiAKIAlpZiAocHJpdiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKIAlxb3NfaW5mby5lbGVtZW50SUQgPSBRT1NfRUxFTUVOVF9JRDsKLQlxb3NfaW5mby5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudCkgLSAyOworCXFvc19pbmZvLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgbGliaXB3X3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50KSAtIDI7CiAKIAlxb3NfaW5mby52ZXJzaW9uID0gUU9TX1ZFUlNJT05fMTsKIAlxb3NfaW5mby5hY19pbmZvID0gMDsKQEAgLTcwNTQsMTEgKzcwNzQsMTEgQEAKICogU2V0IHRoZSBRb1MgcGFyYW1ldGVyIHdpdGggdGhlIGFzc29jaWF0aW9uIHJlcXVlc3Qgc3RydWN0dXJlCiAqLwogc3RhdGljIGludCBpcHdfcW9zX2Fzc29jaWF0aW9uKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkgICAgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgKnFvc19kYXRhID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIGlic3NfZGF0YSA9IHsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19kYXRhICpxb3NfZGF0YSA9IE5VTEw7CisJc3RydWN0IGxpYmlwd19xb3NfZGF0YSBpYnNzX2RhdGEgPSB7CiAJCS5zdXBwb3J0ZWQgPSAxLAogCQkuYWN0aXZlID0gMSwKIAl9OwpAQCAtNzEwMCwxMSArNzEyMCwxMSBAQAogKiBzZXR0aW5nCiAqLwogc3RhdGljIGludCBpcHdfcW9zX2Fzc29jaWF0aW9uX3Jlc3Aoc3RydWN0IGlwd19wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkJICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yaykKIHsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMpOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMpOwogCWludCBzZXRfcW9zX3BhcmFtID0gMDsKIAogCWlmICgocHJpdiA9PSBOVUxMKSB8fCAobmV0d29yayA9PSBOVUxMKSB8fApAQCAtNzEyMCw3ICs3MTQwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aWVlZS0+bG9jaywgZmxhZ3MpOwogCWlmIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTKSB7CiAJCW1lbWNweSgmcHJpdi0+YXNzb2NfbmV0d29yay0+cW9zX2RhdGEsICZuZXR3b3JrLT5xb3NfZGF0YSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhKSk7CisJCSAgICAgICBzaXplb2Yoc3RydWN0IGxpYmlwd19xb3NfZGF0YSkpOwogCQlwcml2LT5hc3NvY19uZXR3b3JrLT5xb3NfZGF0YS5hY3RpdmUgPSAxOwogCQlpZiAoKG5ldHdvcmstPnFvc19kYXRhLm9sZF9wYXJhbV9jb3VudCAhPQogCQkgICAgIG5ldHdvcmstPnFvc19kYXRhLnBhcmFtX2NvdW50KSkgewpAQCAtNzE1Niw3ICs3MTc2LDcgQEAKIAlpZiAoKHByaXYgPT0gTlVMTCkpCiAJCXJldHVybiAwOwogCi0JaWYgKCEocHJpdi0+aWVlZS0+bW9kdWxhdGlvbiAmIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04pKQorCWlmICghKHByaXYtPmllZWUtPm1vZHVsYXRpb24gJiBMSUJJUFdfT0ZETV9NT0RVTEFUSU9OKSkKIAkJcmV0ID0gcHJpdi0+cW9zX2RhdGEuYnVyc3RfZHVyYXRpb25fQ0NLOwogCWVsc2UKIAkJcmV0ID0gcHJpdi0+cW9zX2RhdGEuYnVyc3RfZHVyYXRpb25fT0ZETTsKQEAgLTcyMDgsOCArNzIyOCw4IEBACiBzdGF0aWMgaW50IGlwd19pc19xb3NfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhICpxb3NfZGF0YSA9IE5VTEw7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19kYXRhICpxb3NfZGF0YSA9IE5VTEw7CiAJaW50IGFjdGl2ZSwgc3VwcG9ydGVkOwogCXU4ICpkYWRkciA9IHNrYi0+ZGF0YSArIEVUSF9BTEVOOwogCWludCB1bmljYXN0ID0gIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGRhZGRyKTsKQEAgLTcyNjQsOSArNzI4NCw2IEBACiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcHdfcHJpdiwgcW9zX2FjdGl2YXRlKTsKIAotCWlmIChwcml2ID09IE5VTEwpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkKQEAgLTcyNzYsMTAgKzcyOTMsMTAgQEAKIH0KIAogc3RhdGljIGludCBpcHdfaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlICpyZXNwLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJCSAgICAgc3RydWN0IGxpYmlwd19wcm9iZV9yZXNwb25zZSAqcmVzcCwKKwkJCQkgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yaykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IGFjdGl2ZV9uZXR3b3JrID0gKChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgJiYKIAkJCSAgICAgIChuZXR3b3JrID09IHByaXYtPmFzc29jX25ldHdvcmspKTsKIApAQCAtNzI4OSwxMCArNzMwNiwxMCBAQAogfQogCiBzdGF0aWMgaW50IGlwd19oYW5kbGVfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICpyZXNwLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkgICAgIHN0cnVjdCBsaWJpcHdfYmVhY29uICpyZXNwLAorCQkJICAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmspCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBhY3RpdmVfbmV0d29yayA9ICgocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpICYmCiAJCQkgICAgICAobmV0d29yayA9PSBwcml2LT5hc3NvY19uZXR3b3JrKSk7CiAKQEAgLTczMDIsMjIgKzczMTksMjIgQEAKIH0KIAogc3RhdGljIGludCBpcHdfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICpyZXNwLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQorCQkJCSAgICAgc3RydWN0IGxpYmlwd19hc3NvY19yZXNwb25zZSAqcmVzcCwKKwkJCQkgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yaykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaXB3X3Fvc19hc3NvY2lhdGlvbl9yZXNwKHByaXYsIG5ldHdvcmspOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKK3N0YXRpYyBpbnQgaXB3X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycwogCQkJCSAgICAgICAqcW9zX3BhcmFtKQogewogCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfUU9TX1BBUkFNRVRFUlMsCiAJCQkJc2l6ZW9mKCpxb3NfcGFyYW0pICogMywgcW9zX3BhcmFtKTsKIH0KIAotc3RhdGljIGludCBpcHdfc2VuZF9xb3NfaW5mb19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudAorc3RhdGljIGludCBpcHdfc2VuZF9xb3NfaW5mb19jb21tYW5kKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGxpYmlwd19xb3NfaW5mb3JtYXRpb25fZWxlbWVudAogCQkJCSAgICAgKnFvc19wYXJhbSkKIHsKIAlyZXR1cm4gaXB3X3NlbmRfY21kX3BkdShwcml2LCBJUFdfQ01EX1dNRV9JTkZPLCBzaXplb2YoKnFvc19wYXJhbSksCkBAIC03MzI3LDcgKzczNDQsNyBAQAogI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX1FPUyAqLwogCiBzdGF0aWMgaW50IGlwd19hc3NvY2lhdGVfbmV0d29yayhzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaywKKwkJCQkgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrLAogCQkJCSBzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyAqcmF0ZXMsIGludCByb2FtaW5nKQogewogCWludCBlcnI7CkBAIC03NTA5LDcgKzc1MjYsNyBAQAogc3RhdGljIHZvaWQgaXB3X3JvYW0odm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CisJc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKIAlzdHJ1Y3QgaXB3X25ldHdvcmtfbWF0Y2ggbWF0Y2ggPSB7CiAJCS5uZXR3b3JrID0gcHJpdi0+YXNzb2NfbmV0d29yawogCX07CkBAIC03NTg0LDcgKzc2MDEsNyBAQAogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRhdGE7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yayA9IE5VTEw7CiAJc3RydWN0IGlwd19uZXR3b3JrX21hdGNoIG1hdGNoID0gewogCQkubmV0d29yayA9IE5VTEwKIAl9OwpAQCAtNzYzOCw4ICs3NjU1LDggQEAKIAkgICAgcHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19DSEFOTkVMKSB7CiAJCS8qIFVzZSBvbGRlc3QgbmV0d29yayBpZiB0aGUgZnJlZSBsaXN0IGlzIGVtcHR5ICovCiAJCWlmIChsaXN0X2VtcHR5KCZwcml2LT5pZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdCkpIHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqb2xkZXN0ID0gTlVMTDsKLQkJCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OworCQkJc3RydWN0IGxpYmlwd19uZXR3b3JrICpvbGRlc3QgPSBOVUxMOworCQkJc3RydWN0IGxpYmlwd19uZXR3b3JrICp0YXJnZXQ7CiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkodGFyZ2V0LCAmcHJpdi0+aWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CiAJCQkJaWYgKChvbGRlc3QgPT0gTlVMTCkgfHwKQEAgLTc2NjAsNyArNzY3Nyw3IEBACiAJCX0KIAogCQllbGVtZW50ID0gcHJpdi0+aWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dDsKLQkJbmV0d29yayA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrLCBsaXN0KTsKKwkJbmV0d29yayA9IGxpc3RfZW50cnkoZWxlbWVudCwgc3RydWN0IGxpYmlwd19uZXR3b3JrLCBsaXN0KTsKIAkJaXB3X2FkaG9jX2NyZWF0ZShwcml2LCBuZXR3b3JrKTsKIAkJcmF0ZXMgPSAmcHJpdi0+cmF0ZXM7CiAJCWxpc3RfZGVsKGVsZW1lbnQpOwpAQCAtNzcxNiwxOCArNzczMywxOCBAQAogCXN3aXRjaCAocHJpdi0+aWVlZS0+c2VjLmxldmVsKSB7CiAJY2FzZSBTRUNfTEVWRUxfMzoKIAkJLyogUmVtb3ZlIENDTVAgSERSICovCi0JCW1lbW1vdmUoc2tiLT5kYXRhICsgSUVFRTgwMjExXzNBRERSX0xFTiwKLQkJCXNrYi0+ZGF0YSArIElFRUU4MDIxMV8zQUREUl9MRU4gKyA4LAotCQkJc2tiLT5sZW4gLSBJRUVFODAyMTFfM0FERFJfTEVOIC0gOCk7CisJCW1lbW1vdmUoc2tiLT5kYXRhICsgTElCSVBXXzNBRERSX0xFTiwKKwkJCXNrYi0+ZGF0YSArIExJQklQV18zQUREUl9MRU4gKyA4LAorCQkJc2tiLT5sZW4gLSBMSUJJUFdfM0FERFJfTEVOIC0gOCk7CiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSAxNik7CS8qIENDTVBfSERSX0xFTiArIENDTVBfTUlDX0xFTiAqLwogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8yOgogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8xOgogCQkvKiBSZW1vdmUgSVYgKi8KLQkJbWVtbW92ZShza2ItPmRhdGEgKyBJRUVFODAyMTFfM0FERFJfTEVOLAotCQkJc2tiLT5kYXRhICsgSUVFRTgwMjExXzNBRERSX0xFTiArIDQsCi0JCQlza2ItPmxlbiAtIElFRUU4MDIxMV8zQUREUl9MRU4gLSA0KTsKKwkJbWVtbW92ZShza2ItPmRhdGEgKyBMSUJJUFdfM0FERFJfTEVOLAorCQkJc2tiLT5kYXRhICsgTElCSVBXXzNBRERSX0xFTiArIDQsCisJCQlza2ItPmxlbiAtIExJQklQV18zQUREUl9MRU4gLSA0KTsKIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDgpOwkvKiBJViArIElDViAqLwogCQlicmVhazsKIAljYXNlIFNFQ19MRVZFTF8wOgpAQCAtNzc0MSwxMCArNzc1OCwxMCBAQAogCiBzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX2RhdGFfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKKwkJCQkgICBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHI7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KQEAgLTc3NzQsMTUgKzc3OTEsMTUgQEAKIAlJUFdfREVCVUdfUlgoIlJ4IHBhY2tldCBvZiAlZCBieXRlcy5cbiIsIHJ4Yi0+c2tiLT5sZW4pOwogCiAJLyogSFcgZGVjcnlwdCB3aWxsIG5vdCBjbGVhciB0aGUgV0VQIGJpdCwgTUlDLCBQTiwgZXRjLiAqLwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXJ4Yi0+c2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqKXJ4Yi0+c2tiLT5kYXRhOwogCWlmIChwcml2LT5pZWVlLT5pd19tb2RlICE9IElXX01PREVfTU9OSVRPUiAmJgogCSAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgPwogCSAgICAgIXByaXYtPmllZWUtPmhvc3RfbWNfZGVjcnlwdCA6ICFwcml2LT5pZWVlLT5ob3N0X2RlY3J5cHQpKQogCQlpcHdfcmVidWlsZF9kZWNyeXB0ZWRfc2tiKHByaXYsIHJ4Yi0+c2tiKTsKIAotCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcnhiLT5za2IsIHN0YXRzKSkKIAkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQllbHNlIHsJCQkvKiBpZWVlODAyMTFfcnggc3VjY2VlZGVkLCBzbyBpdCBub3cgb3ducyB0aGUgU0tCICovCisJZWxzZSB7CQkJLyogbGliaXB3X3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CiAJCV9faXB3X2xlZF9hY3Rpdml0eV9vbihwcml2KTsKIAl9CkBAIC03NzkxLDcgKzc4MDgsNyBAQAogI2lmZGVmIENPTkZJR19JUFcyMjAwX1JBRElPVEFQCiBzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX2RhdGFfcGFja2V0X21vbml0b3Ioc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCQkgICBzdHJ1Y3QgaXB3X3J4X21lbV9idWZmZXIgKnJ4YiwKLQkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCisJCQkJCSAgIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnN0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpcHdfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGlwd19yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKQEAgLTc4NjcsNyArNzg4NCw3IEBACiAKIAkvKiBDb252ZXJ0IHNpZ25hbCB0byBEQk0gKi8KIAlpcHdfcnQtPnJ0X2RibXNpZ25hbCA9IGFudHNpZ25hbDsKLQlpcHdfcnQtPnJ0X2RibW5vaXNlID0gZnJhbWUtPm5vaXNlOworCWlwd19ydC0+cnRfZGJtbm9pc2UgPSAoczgpIGxlMTZfdG9fY3B1KGZyYW1lLT5ub2lzZSk7CiAKIAkvKiBDb252ZXJ0IHRoZSBjaGFubmVsIGRhdGEgYW5kIHNldCB0aGUgZmxhZ3MgKi8KIAlpcHdfcnQtPnJ0X2NoYW5uZWwgPSBjcHVfdG9fbGUxNihpZWVlODAyMTFjaGFuMm1oeihyZWNlaXZlZF9jaGFubmVsKSk7CkBAIC03OTM3LDkgKzc5NTQsOSBAQAogCiAJSVBXX0RFQlVHX1JYKCJSeCBwYWNrZXQgb2YgJWQgYnl0ZXMuXG4iLCByeGItPnNrYi0+bGVuKTsKIAotCWlmICghaWVlZTgwMjExX3J4KHByaXYtPmllZWUsIHJ4Yi0+c2tiLCBzdGF0cykpCisJaWYgKCFsaWJpcHdfcngocHJpdi0+aWVlZSwgcnhiLT5za2IsIHN0YXRzKSkKIAkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQllbHNlIHsJCQkvKiBpZWVlODAyMTFfcnggc3VjY2VlZGVkLCBzbyBpdCBub3cgb3ducyB0aGUgU0tCICovCisJZWxzZSB7CQkJLyogbGliaXB3X3J4IHN1Y2NlZWRlZCwgc28gaXQgbm93IG93bnMgdGhlIFNLQiAqLwogCQlyeGItPnNrYiA9IE5VTEw7CiAJCS8qIG5vIExFRCBkdXJpbmcgY2FwdHVyZSAqLwogCX0KQEAgLTc5NDcsMjggKzc5NjQsMjggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMKLSNkZWZpbmUgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3BvbnNlKGZjKSBcCisjZGVmaW5lIGxpYmlwd19pc19wcm9iZV9yZXNwb25zZShmYykgXAogICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJiBcCiAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQICkKIAotI2RlZmluZSBpZWVlODAyMTFfaXNfbWFuYWdlbWVudChmYykgXAorI2RlZmluZSBsaWJpcHdfaXNfbWFuYWdlbWVudChmYykgXAogICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCkKIAotI2RlZmluZSBpZWVlODAyMTFfaXNfY29udHJvbChmYykgXAorI2RlZmluZSBsaWJpcHdfaXNfY29udHJvbChmYykgXAogICAgKChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSBJRUVFODAyMTFfRlRZUEVfQ1RMKQogCi0jZGVmaW5lIGllZWU4MDIxMV9pc19kYXRhKGZjKSBcCisjZGVmaW5lIGxpYmlwd19pc19kYXRhKGZjKSBcCiAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKQogCi0jZGVmaW5lIGllZWU4MDIxMV9pc19hc3NvY19yZXF1ZXN0KGZjKSBcCisjZGVmaW5lIGxpYmlwd19pc19hc3NvY19yZXF1ZXN0KGZjKSBcCiAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpCiAKLSNkZWZpbmUgaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxdWVzdChmYykgXAorI2RlZmluZSBsaWJpcHdfaXNfcmVhc3NvY19yZXF1ZXN0KGZjKSBcCiAgICAoKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID09IElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSkKIAogc3RhdGljIHZvaWQgaXB3X2hhbmRsZV9wcm9taXNjdW91c19yeChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCiAJCQkJICAgICAgc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGIsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCisJCQkJICAgICAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPnByb21fbmV0X2RldjsKIAlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CkBAIC03OTgxLDcgKzc5OTgsNyBAQAogCXUxNiBjaGFubmVsID0gZnJhbWUtPnJlY2VpdmVkX2NoYW5uZWw7CiAJdTggcGh5X2ZsYWdzID0gZnJhbWUtPmFudGVubmFBbmRQaHk7CiAJczggc2lnbmFsID0gZnJhbWUtPnJzc2lfZGJtIC0gSVBXX1JTU0lfVE9fREJNOwotCXM4IG5vaXNlID0gZnJhbWUtPm5vaXNlOworCXM4IG5vaXNlID0gKHM4KSBsZTE2X3RvX2NwdShmcmFtZS0+bm9pc2UpOwogCXU4IHJhdGUgPSBmcmFtZS0+cmF0ZTsKIAlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUubGVuZ3RoKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtODAxOCwxNyArODAzNSwxNyBAQAogCX0KIAogCWhkciA9ICh2b2lkICopcnhiLT5za2ItPmRhdGEgKyBJUFdfUlhfRlJBTUVfU0laRTsKLQlpZiAoaWVlZTgwMjExX2lzX21hbmFnZW1lbnQobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwlpZiAobGliaXB3X2lzX21hbmFnZW1lbnQobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX01HTVQpCiAJCQlyZXR1cm47CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9NR01UX0hFQURFUl9PTkxZKQogCQkJaGRyX29ubHkgPSAxOwotCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2NvbnRyb2wobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwl9IGVsc2UgaWYgKGxpYmlwd19pc19jb250cm9sKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19DVEwpCiAJCQlyZXR1cm47CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9DVExfSEVBREVSX09OTFkpCiAJCQloZHJfb25seSA9IDE7Ci0JfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YShsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCX0gZWxzZSBpZiAobGliaXB3X2lzX2RhdGEobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX0RBVEEpCiAJCQlyZXR1cm47CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9EQVRBX0hFQURFUl9PTkxZKQpAQCAtODA0Niw3ICs4MDYzLDcgQEAKIAlpcHdfcnQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKIAogCWlmIChoZHJfb25seSkKLQkJbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSk7CisJCWxlbiA9IGxpYmlwd19nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpOwogCiAJbWVtY3B5KGlwd19ydC0+cGF5bG9hZCwgaGRyLCBsZW4pOwogCkBAIC04MTQzLDcgKzgxNjAsNyBAQAogCiAJSVBXX0RFQlVHX1JYKCJSeCBwYWNrZXQgb2YgJWQgYnl0ZXMuXG4iLCBza2ItPmxlbik7CiAKLQlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5wcm9tX3ByaXYtPmllZWUsIHNrYiwgc3RhdHMpKSB7CisJaWYgKCFsaWJpcHdfcngocHJpdi0+cHJvbV9wcml2LT5pZWVlLCBza2IsIHN0YXRzKSkgewogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KQEAgLTgxNTEsNyArODE2OCw3IEBACiAjZW5kaWYKIAogc3RhdGljIGludCBpc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIpCisJCQkJICAgIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZWFkZXIpCiB7CiAJLyogRmlsdGVyIGluY29taW5nIHBhY2tldHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHRhcmdldHRlZCB0b3dhcmQKIAkgKiB0aGlzIG5ldHdvcmssIGRpc2NhcmRpbmcgcGFja2V0cyBjb21pbmcgZnJvbSBvdXJzZWx2ZXMgKi8KQEAgLTgxODksNyArODIwNiw3IEBACiAjZGVmaW5lIElQV19QQUNLRVRfUkVUUllfVElNRSBIWgogCiBzdGF0aWMgIGludCBpc19kdXBsaWNhdGVfcGFja2V0KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyKQorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZWFkZXIpCiB7CiAJdTE2IHNjID0gbGUxNl90b19jcHUoaGVhZGVyLT5zZXFfY3RsKTsKIAl1MTYgc2VxID0gV0xBTl9HRVRfU0VRX1NFUShzYyk7CkBAIC04MjYzLDE0ICs4MjgwLDE0IEBACiAKIHN0YXRpYyB2b2lkIGlwd19oYW5kbGVfbWdtdF9wYWNrZXQoc3RydWN0IGlwd19wcml2ICpwcml2LAogCQkJCSAgIHN0cnVjdCBpcHdfcnhfbWVtX2J1ZmZlciAqcnhiLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQorCQkJCSAgIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnN0YXRzKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSByeGItPnNrYjsKIAlzdHJ1Y3QgaXB3X3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpcHdfcnhfcGFja2V0ICopc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikKKwlzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqaGVhZGVyID0gKHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICopCiAJICAgIChza2ItPmRhdGEgKyBJUFdfUlhfRlJBTUVfU0laRSk7CiAKLQlpZWVlODAyMTFfcnhfbWd0KHByaXYtPmllZWUsIGhlYWRlciwgc3RhdHMpOworCWxpYmlwd19yeF9tZ3QocHJpdi0+aWVlZSwgaGVhZGVyLCBzdGF0cyk7CiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DICYmCiAJICAgICgoV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUoaGVhZGVyLT5mcmFtZV9jdGwpKSA9PQpAQCAtODI5MiwxMiArODMwOSwxMiBAQAogCQkvKiBBZHZhbmNlIHBhc3QgdGhlIGlwdyBwYWNrZXQgaGVhZGVyIHRvIHRoZSA4MDIuMTEgZnJhbWUgKi8KIAkJc2tiX3B1bGwoc2tiLCBJUFdfUlhfRlJBTUVfU0laRSk7CiAKLQkJLyogUHVzaCB0aGUgaWVlZTgwMjExX3J4X3N0YXRzIGJlZm9yZSB0aGUgODAyLjExIGZyYW1lICovCisJCS8qIFB1c2ggdGhlIGxpYmlwd19yeF9zdGF0cyBiZWZvcmUgdGhlIDgwMi4xMSBmcmFtZSAqLwogCQltZW1jcHkoc2tiX3B1c2goc2tiLCBzaXplb2YoKnN0YXRzKSksIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CiAKIAkJc2tiLT5kZXYgPSBwcml2LT5pZWVlLT5kZXY7CiAKLQkJLyogUG9pbnQgcmF3IGF0IHRoZSBpZWVlODAyMTFfc3RhdHMgKi8KKwkJLyogUG9pbnQgcmF3IGF0IHRoZSBsaWJpcHdfc3RhdHMgKi8KIAkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAogCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKQEAgLTgzMTcsNyArODMzNCw3IEBACiB7CiAJc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyICpyeGI7CiAJc3RydWN0IGlwd19yeF9wYWNrZXQgKnBrdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZWFkZXI7CiAJdTMyIHIsIHcsIGk7CiAJdTggbmV0d29ya19wYWNrZXQ7CiAJdTggZmlsbF9yeCA9IDA7CkBAIC04MzQ4LDExICs4MzY1LDExIEBACiAKIAkJc3dpdGNoIChwa3QtPmhlYWRlci5tZXNzYWdlX3R5cGUpIHsKIAkJY2FzZSBSWF9GUkFNRV9UWVBFOgkvKiA4MDIuMTEgZnJhbWUgKi8gIHsKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHN0YXRzID0geworCQkJCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgc3RhdHMgPSB7CiAJCQkJCS5yc3NpID0gcGt0LT51LmZyYW1lLnJzc2lfZGJtIC0KIAkJCQkJICAgIElQV19SU1NJX1RPX0RCTSwKIAkJCQkJLnNpZ25hbCA9Ci0JCQkJCSAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUucnNzaV9kYm0pIC0KKwkJCQkJICAgIHBrdC0+dS5mcmFtZS5yc3NpX2RibSAtCiAJCQkJCSAgICBJUFdfUlNTSV9UT19EQk0gKyAweDEwMCwKIAkJCQkJLm5vaXNlID0KIAkJCQkJICAgIGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5ub2lzZSksCkBAIC04MzYzLDE5ICs4MzgwLDE5IEBACiAJCQkJCS5mcmVxID0KIAkJCQkJICAgIChwa3QtPnUuZnJhbWUuCiAJCQkJCSAgICAgY29udHJvbCAmICgxIDw8IDApKSA/Ci0JCQkJCSAgICBJRUVFODAyMTFfMjRHSFpfQkFORCA6Ci0JCQkJCSAgICBJRUVFODAyMTFfNTJHSFpfQkFORCwKKwkJCQkJICAgIExJQklQV18yNEdIWl9CQU5EIDoKKwkJCQkJICAgIExJQklQV181MkdIWl9CQU5ELAogCQkJCQkubGVuID0gbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCksCiAJCQkJfTsKIAogCQkJCWlmIChzdGF0cy5yc3NpICE9IDApCi0JCQkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JTU0k7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX1JTU0k7CiAJCQkJaWYgKHN0YXRzLnNpZ25hbCAhPSAwKQotCQkJCQlzdGF0cy5tYXNrIHw9IElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUw7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX1NJR05BTDsKIAkJCQlpZiAoc3RhdHMubm9pc2UgIT0gMCkKLQkJCQkJc3RhdHMubWFzayB8PSBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0U7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX05PSVNFOwogCQkJCWlmIChzdGF0cy5yYXRlICE9IDApCi0JCQkJCXN0YXRzLm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JBVEU7CisJCQkJCXN0YXRzLm1hc2sgfD0gTElCSVBXX1NUQVRNQVNLX1JBVEU7CiAKIAkJCQlwcml2LT5yeF9wYWNrZXRzKys7CiAKQEAgLTg0MDAsNyArODQxNyw3IEBACiAjZW5kaWYKIAogCQkJCWhlYWRlciA9Ci0JCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKShyeGItPnNrYi0+CisJCQkJICAgIChzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqKShyeGItPnNrYi0+CiAJCQkJCQkJCSAgIGRhdGEgKwogCQkJCQkJCQkgICBJUFdfUlhfRlJBTUVfU0laRSk7CiAJCQkJLyogVE9ETzogQ2hlY2sgQWQtSG9jIGRlc3Qvc291cmNlIGFuZCBtYWtlIHN1cmUKQEAgLTg0MjMsNyArODQ0MCw3IEBACiAJCQkJCSAgICAgbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCkpOwogCiAJCQkJaWYgKGxlMTZfdG9fY3B1KHBrdC0+dS5mcmFtZS5sZW5ndGgpIDwKLQkJCQkgICAgaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoCisJCQkJICAgIGxpYmlwd19nZXRfaGRybGVuKGxlMTZfdG9fY3B1KAogCQkJCQkJICAgIGhlYWRlci0+ZnJhbWVfY3RsKSkpIHsKIAkJCQkJSVBXX0RFQlVHX0RST1AKIAkJCQkJICAgICgiUmVjZWl2ZWQgcGFja2V0IGlzIHRvbyBzbWFsbC4gIgpAQCAtODUzNCw3ICs4NTUxLDcgQEAKIAogCS8qIFdlIGRlZmF1bHQgdG8gZGlzYWJsaW5nIHRoZSBMRUQgY29kZSBhcyByaWdodCBub3cgaXQgY2F1c2VzCiAJICogdG9vIG1hbnkgc3lzdGVtcyB0byBsb2NrIHVwLi4uICovCi0JaWYgKCFsZWQpCisJaWYgKCFsZWRfc3VwcG9ydCkKIAkJcHJpdi0+Y29uZmlnIHw9IENGR19OT19MRUQ7CiAKIAlpZiAoYXNzb2NpYXRlKQpAQCAtODU1NiwxMCArODU3MywxMCBAQAogCQlJUFdfREVCVUdfSU5GTygiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKLQlpZiAoY2hhbm5lbCAhPSAwKSB7CisJaWYgKGRlZmF1bHRfY2hhbm5lbCAhPSAwKSB7CiAJCXByaXYtPmNvbmZpZyB8PSBDRkdfU1RBVElDX0NIQU5ORUw7Ci0JCXByaXYtPmNoYW5uZWwgPSBjaGFubmVsOwotCQlJUFdfREVCVUdfSU5GTygiQmluZCB0byBzdGF0aWMgY2hhbm5lbCAlZFxuIiwgY2hhbm5lbCk7CisJCXByaXYtPmNoYW5uZWwgPSBkZWZhdWx0X2NoYW5uZWw7CisJCUlQV19ERUJVR19JTkZPKCJCaW5kIHRvIHN0YXRpYyBjaGFubmVsICVkXG4iLCBkZWZhdWx0X2NoYW5uZWwpOwogCQkvKiBUT0RPOiBWYWxpZGF0ZSB0aGF0IHByb3ZpZGVkIGNoYW5uZWwgaXMgaW4gcmFuZ2UgKi8KIAl9CiAjaWZkZWYgQ09ORklHX0lQVzIyMDBfUU9TCkBAIC04NTY3LDcgKzg1ODQsNyBAQAogCQkgICAgIGJ1cnN0X2R1cmF0aW9uX0NDSywgYnVyc3RfZHVyYXRpb25fT0ZETSk7CiAjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKLQlzd2l0Y2ggKG1vZGUpIHsKKwlzd2l0Y2ggKG5ldHdvcmtfbW9kZSkgewogCWNhc2UgMToKIAkJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfQURIT0M7CiAJCXByaXYtPm5ldF9kZXYtPnR5cGUgPSBBUlBIUkRfRVRIRVI7CkBAIC04NjA4LDkgKzg2MjUsOSBAQAogCQkJICAgICAgICI6IERldGVjdGVkIEludGVsIFBSTy9XaXJlbGVzcyAyOTE1QUJHIE5ldHdvcmsgIgogCQkJICAgICAgICJDb25uZWN0aW9uXG4iKTsKIAkJcHJpdi0+aWVlZS0+YWJnX3RydWUgPSAxOwotCQliYW5kID0gSUVFRTgwMjExXzUyR0haX0JBTkQgfCBJRUVFODAyMTFfMjRHSFpfQkFORDsKLQkJbW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gfAotCQkgICAgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OOworCQliYW5kID0gTElCSVBXXzUyR0haX0JBTkQgfCBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiA9IExJQklQV19PRkRNX01PRFVMQVRJT04gfAorCQkgICAgTElCSVBXX0NDS19NT0RVTEFUSU9OOwogCQlwcml2LT5hZGFwdGVyID0gSVBXXzI5MTVBQkc7CiAJCXByaXYtPmllZWUtPm1vZGUgPSBJRUVFX0EgfCBJRUVFX0cgfCBJRUVFX0I7CiAJfSBlbHNlIHsKQEAgLTg2MjAsOSArODYzNyw5IEBACiAJCQkgICAgICAgIkNvbm5lY3Rpb25cbiIpOwogCiAJCXByaXYtPmllZWUtPmFiZ190cnVlID0gMDsKLQkJYmFuZCA9IElFRUU4MDIxMV8yNEdIWl9CQU5EOwotCQltb2R1bGF0aW9uID0gSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTiB8Ci0JCSAgICBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT047CisJCWJhbmQgPSBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiA9IExJQklQV19PRkRNX01PRFVMQVRJT04gfAorCQkgICAgTElCSVBXX0NDS19NT0RVTEFUSU9OOwogCQlwcml2LT5hZGFwdGVyID0gSVBXXzIyMDBCRzsKIAkJcHJpdi0+aWVlZS0+bW9kZSA9IElFRUVfRyB8IElFRUVfQjsKIAl9CkBAIC04NjMwLDcgKzg2NDcsNyBAQAogCXByaXYtPmllZWUtPmZyZXFfYmFuZCA9IGJhbmQ7CiAJcHJpdi0+aWVlZS0+bW9kdWxhdGlvbiA9IG1vZHVsYXRpb247CiAKLQlwcml2LT5yYXRlc19tYXNrID0gSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSzsKKwlwcml2LT5yYXRlc19tYXNrID0gTElCSVBXX0RFRkFVTFRfUkFURVNfTUFTSzsKIAogCXByaXYtPmRpc2Fzc29jaWF0ZV90aHJlc2hvbGQgPSBJUFdfTUJfRElTQVNTT0NJQVRFX1RIUkVTSE9MRF9ERUZBVUxUOwogCXByaXYtPnJvYW1pbmdfdGhyZXNob2xkID0gSVBXX01CX1JPQU1JTkdfVEhSRVNIT0xEX0RFRkFVTFQ7CkBAIC04NjU2LDI0ICs4NjczLDYgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBpcHdfd3hfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlpZiAocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykKLQkJc3RyY3B5KHdycXUtPm5hbWUsICJyYWRpbyBvZmYiKTsKLQllbHNlIGlmICghKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSkKLQkJc3RyY3B5KHdycXUtPm5hbWUsICJ1bmFzc29jaWF0ZWQiKTsKLQllbHNlCi0JCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTElYyIsCi0JCQkgaXB3X21vZGVzW3ByaXYtPmFzc29jX3JlcXVlc3QuaWVlZV9tb2RlXSk7Ci0JSVBXX0RFQlVHX1dYKCJOYW1lOiAlc1xuIiwgd3JxdS0+bmFtZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgaXB3X3NldF9jaGFubmVsKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgdTggY2hhbm5lbCkKIHsKIAlpZiAoY2hhbm5lbCA9PSAwKSB7CkBAIC04NzMwLDggKzg3MjksOCBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyA9IGllZWU4MDIxMV9nZXRfZ2VvKHByaXYtPmllZWUpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmdlbyA9IGxpYmlwd19nZXRfZ2VvKHByaXYtPmllZWUpOwogCXN0cnVjdCBpd19mcmVxICpmd3JxID0gJndycXUtPmZyZXE7CiAJaW50IHJldCA9IDAsIGk7CiAJdTggY2hhbm5lbCwgZmxhZ3M7CkBAIC04NzQ2LDIzICs4NzQ1LDIzIEBACiAJfQogCS8qIGlmIHNldHRpbmcgYnkgZnJlcSBjb252ZXJ0IHRvIGNoYW5uZWwgKi8KIAlpZiAoZndycS0+ZSA9PSAxKSB7Ci0JCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcV90b19jaGFubmVsKHByaXYtPmllZWUsIGZ3cnEtPm0pOworCQljaGFubmVsID0gbGliaXB3X2ZyZXFfdG9fY2hhbm5lbChwcml2LT5pZWVlLCBmd3JxLT5tKTsKIAkJaWYgKGNoYW5uZWwgPT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZQogCQljaGFubmVsID0gZndycS0+bTsKIAotCWlmICghKGJhbmQgPSBpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBjaGFubmVsKSkpCisJaWYgKCEoYmFuZCA9IGxpYmlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIGNoYW5uZWwpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7Ci0JCWkgPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBjaGFubmVsKTsKKwkJaSA9IGxpYmlwd19jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIGNoYW5uZWwpOwogCQlpZiAoaSA9PSAtMSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWZsYWdzID0gKGJhbmQgPT0gSUVFRTgwMjExXzI0R0haX0JBTkQpID8KKwkJZmxhZ3MgPSAoYmFuZCA9PSBMSUJJUFdfMjRHSFpfQkFORCkgPwogCQkgICAgZ2VvLT5iZ1tpXS5mbGFncyA6IGdlby0+YVtpXS5mbGFnczsKLQkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkgeworCQlpZiAoZmxhZ3MgJiBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZKSB7CiAJCQlJUFdfREVCVUdfV1goIkludmFsaWQgQWQtSG9jIGNoYW5uZWwgZm9yIDgwMi4xMWFcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTg3NzksNyArODc3OCw3IEBACiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJd3JxdS0+ZnJlcS5lID0gMDsKIApAQCAtODc5MCwxNiArODc4OSwxNiBAQAogCSAgICBwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFUSU5HIHwgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCWludCBpOwogCi0JCWkgPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKTsKKwkJaSA9IGxpYmlwd19jaGFubmVsX3RvX2luZGV4KHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpOwogCQlCVUdfT04oaSA9PSAtMSk7CiAJCXdycXUtPmZyZXEuZSA9IDE7CiAKLQkJc3dpdGNoIChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKSkgewotCQljYXNlIElFRUU4MDIxMV81MkdIWl9CQU5EOgorCQlzd2l0Y2ggKGxpYmlwd19pc192YWxpZF9jaGFubmVsKHByaXYtPmllZWUsIHByaXYtPmNoYW5uZWwpKSB7CisJCWNhc2UgTElCSVBXXzUyR0haX0JBTkQ6CiAJCQl3cnF1LT5mcmVxLm0gPSBwcml2LT5pZWVlLT5nZW8uYVtpXS5mcmVxICogMTAwMDAwOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBJRUVFODAyMTFfMjRHSFpfQkFORDoKKwkJY2FzZSBMSUJJUFdfMjRHSFpfQkFORDoKIAkJCXdycXUtPmZyZXEubSA9IHByaXYtPmllZWUtPmdlby5iZ1tpXS5mcmVxICogMTAwMDAwOwogCQkJYnJlYWs7CiAKQEAgLTg4MTgsNyArODgxNyw3IEBACiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCiAJSVBXX0RFQlVHX1dYKCJTZXQgTU9ERTogJWRcbiIsIHdycXUtPm1vZGUpOwpAQCAtODg3MCw3ICs4ODY5LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPm1vZGUgPSBwcml2LT5pZWVlLT5pd19tb2RlOwogCUlQV19ERUJVR19XWCgiR2V0IE1PREUgLT4gJWRcbiIsIHdycXUtPm1vZGUpOwpAQCAtODg5OSw5ICs4ODk4LDkgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8gPSBpZWVlODAyMTFfZ2V0X2dlbyhwcml2LT5pZWVlKTsKKwljb25zdCBzdHJ1Y3QgbGliaXB3X2dlbyAqZ2VvID0gbGliaXB3X2dldF9nZW8ocHJpdi0+aWVlZSk7CiAJaW50IGkgPSAwLCBqOwogCiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBzaXplb2YoKnJhbmdlKTsKQEAgLTg5NDUsNyArODk0NCw3IEBACiAJaWYgKHByaXYtPmllZWUtPm1vZGUgJiAoSUVFRV9CIHwgSUVFRV9HKSkgewogCQlmb3IgKGogPSAwOyBqIDwgZ2VvLT5iZ19jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBqKyspIHsKIAkJCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJgotCQkJICAgIChnZW8tPmJnW2pdLmZsYWdzICYgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWSkpCisJCQkgICAgKGdlby0+Ymdbal0uZmxhZ3MgJiBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZKSkKIAkJCQljb250aW51ZTsKIAogCQkJcmFuZ2UtPmZyZXFbaV0uaSA9IGdlby0+Ymdbal0uY2hhbm5lbDsKQEAgLTg5NTgsNyArODk1Nyw3IEBACiAJaWYgKHByaXYtPmllZWUtPm1vZGUgJiBJRUVFX0EpIHsKIAkJZm9yIChqID0gMDsgaiA8IGdlby0+YV9jaGFubmVscyAmJiBpIDwgSVdfTUFYX0ZSRVFVRU5DSUVTOyBqKyspIHsKIAkJCWlmICgocHJpdi0+aWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJgotCQkJICAgIChnZW8tPmFbal0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZKSkKKwkJCSAgICAoZ2VvLT5hW2pdLmZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSkpCiAJCQkJY29udGludWU7CiAKIAkJCXJhbmdlLT5mcmVxW2ldLmkgPSBnZW8tPmFbal0uY2hhbm5lbDsKQEAgLTg5OTMsNyArODk5Miw3IEBACiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFueVtdID0gewogCQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCkBAIC05MDQyLDcgKzkwNDEsNyBAQAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAkvKiBJZiB3ZSBhcmUgYXNzb2NpYXRlZCwgdHJ5aW5nIHRvIGFzc29jaWF0ZSwgb3IgaGF2ZSBhIHN0YXRpY2FsbHkKIAkgKiBjb25maWd1cmVkIEJTU0lEIHRoZW4gcmV0dXJuIHRoYXQ7IG90aGVyd2lzZSByZXR1cm4gQU5ZICovCkBAIC05MDY0LDcgKzkwNjMsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogICAgICAgICBpbnQgbGVuZ3RoOwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAKQEAgLTkxMTAsNyArOTEwOSw3IEBACiAJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAogCS8qIElmIHdlIGFyZSBhc3NvY2lhdGVkLCB0cnlpbmcgdG8gYXNzb2NpYXRlLCBvciBoYXZlIGEgc3RhdGljYWxseQpAQCAtOTEzNiw3ICs5MTM1LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAKIAlJUFdfREVCVUdfV1goIlNldHRpbmcgbmljayB0byAnJXMnXG4iLCBleHRyYSk7CiAJaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCkBAIC05MTU1LDcgKzkxNTQsNyBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlJUFdfREVCVUdfV1goIkdldHRpbmcgbmlja1xuIik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmRhdGEubGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spOwpAQCAtOTE2OSw3ICs5MTY4LDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgZXJyID0gMDsKIAogCUlQV19ERUJVR19XWCgiU2V0dGluZyByb2FtaW5nIHRocmVzaG9sZCB0byAlZFxuIiwgd3JxdS0+c2Vucy52YWx1ZSk7CkBAIC05MTk5LDcgKzkxOTgsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5zZW5zLmZpeGVkID0gMTsKIAl3cnF1LT5zZW5zLnZhbHVlID0gcHJpdi0+cm9hbWluZ190aHJlc2hvbGQ7CkBAIC05MjE2LDcgKzkyMTUsNyBAQAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJLyogVE9ETzogV2Ugc2hvdWxkIHVzZSBzZW1hcGhvcmVzIG9yIGxvY2tzIGZvciBhY2Nlc3MgdG8gcHJpdiAqLwotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAl1MzIgdGFyZ2V0X3JhdGUgPSB3cnF1LT5iaXRyYXRlLnZhbHVlOwogCXUzMiBmaXhlZCwgbWFzazsKIApAQCAtOTIyNiw3ICs5MjI1LDcgQEAKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAtMSkgewogCQlmaXhlZCA9IDA7Ci0JCW1hc2sgPSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLOworCQltYXNrID0gTElCSVBXX0RFRkFVTFRfUkFURVNfTUFTSzsKIAkJLyogTm93IHdlIHNob3VsZCByZWFzc29jaWF0ZSAqLwogCQlnb3RvIGFwcGx5OwogCX0KQEAgLTkyMzUsNjIgKzkyMzQsNjIgQEAKIAlmaXhlZCA9IHdycXUtPmJpdHJhdGUuZml4ZWQ7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMTAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLOworCQltYXNrIHw9IExJQklQV19DQ0tfUkFURV8xTUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMTAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAyMDAwMDAwIHx8ICFmaXhlZCkKLQkJbWFzayB8PSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSAyMDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDU1MDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfQ0NLX1JBVEVfNU1CX01BU0s7CiAJaWYgKHRhcmdldF9yYXRlID09IDU1MDAwMDApCiAJCWdvdG8gYXBwbHk7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gNjAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSA2MDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDkwMDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX09GRE1fUkFURV85TUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gOTAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAxMTAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfQ0NLX1JBVEVfMTFNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSAxMTAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAxMjAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX09GRE1fUkFURV8xMk1CX01BU0s7CiAJaWYgKHRhcmdldF9yYXRlID09IDEyMDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDE4MDAwMDAwIHx8ICFmaXhlZCkKLQkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfT0ZETV9SQVRFXzE4TUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMTgwMDAwMDApCiAJCWdvdG8gYXBwbHk7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gMjQwMDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQl9NQVNLOworCQltYXNrIHw9IExJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSAyNDAwMDAwMCkKIAkJZ290byBhcHBseTsKIAogCWlmICh0YXJnZXRfcmF0ZSA9PSAzNjAwMDAwMCB8fCAhZml4ZWQpCi0JCW1hc2sgfD0gSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0s7CisJCW1hc2sgfD0gTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0s7CiAJaWYgKHRhcmdldF9yYXRlID09IDM2MDAwMDAwKQogCQlnb3RvIGFwcGx5OwogCiAJaWYgKHRhcmdldF9yYXRlID09IDQ4MDAwMDAwIHx8ICFmaXhlZCkKLQkJbWFzayB8PSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSzsKKwkJbWFzayB8PSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUJfTUFTSzsKIAlpZiAodGFyZ2V0X3JhdGUgPT0gNDgwMDAwMDApCiAJCWdvdG8gYXBwbHk7CiAKIAlpZiAodGFyZ2V0X3JhdGUgPT0gNTQwMDAwMDAgfHwgIWZpeGVkKQotCQltYXNrIHw9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLOworCQltYXNrIHw9IExJQklQV19PRkRNX1JBVEVfNTRNQl9NQVNLOwogCWlmICh0YXJnZXRfcmF0ZSA9PSA1NDAwMDAwMCkKIAkJZ290byBhcHBseTsKIApAQCAtOTMwMSw3ICs5MzAwLDcgQEAKIAlJUFdfREVCVUdfV1goIlNldHRpbmcgcmF0ZSBtYXNrIHRvIDB4JTA4WCBbJXNdXG4iLAogCQkgICAgIG1hc2ssIGZpeGVkID8gImZpeGVkIiA6ICJzdWItcmF0ZXMiKTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKG1hc2sgPT0gSUVFRTgwMjExX0RFRkFVTFRfUkFURVNfTUFTSykgeworCWlmIChtYXNrID09IExJQklQV19ERUZBVUxUX1JBVEVTX01BU0spIHsKIAkJcHJpdi0+Y29uZmlnICY9IH5DRkdfRklYRURfUkFURTsKIAkJaXB3X3NldF9maXhlZF9yYXRlKHByaXYsIHByaXYtPmllZWUtPm1vZGUpOwogCX0gZWxzZQpAQCAtOTMyOCw3ICs5MzI3LDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmJpdHJhdGUudmFsdWUgPSBwcml2LT5sYXN0X3JhdGU7CiAJd3JxdS0+Yml0cmF0ZS5maXhlZCA9IChwcml2LT5jb25maWcgJiBDRkdfRklYRURfUkFURSkgPyAxIDogMDsKQEAgLTkzNDEsNyArOTM0MCw3IEBACiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHdycXUtPnJ0cy5kaXNhYmxlZCB8fCAhd3JxdS0+cnRzLmZpeGVkKQogCQlwcml2LT5ydHNfdGhyZXNob2xkID0gREVGQVVMVF9SVFNfVEhSRVNIT0xEOwpAQCAtOTM2NCw3ICs5MzYzLDcgQEAKIAkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5ydHMudmFsdWUgPSBwcml2LT5ydHNfdGhyZXNob2xkOwogCXdycXUtPnJ0cy5maXhlZCA9IDA7CS8qIG5vIGF1dG8gc2VsZWN0ICovCkBAIC05Mzc4LDcgKzkzNzcsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtOTQxMiw3ICs5NDExLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJd3JxdS0+cG93ZXIudmFsdWUgPSBwcml2LT50eF9wb3dlcjsKIAl3cnF1LT5wb3dlci5maXhlZCA9IDE7CkBAIC05NDMwLDcgKzk0MjksNyBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHdycXUtPmZyYWcuZGlzYWJsZWQgfHwgIXdycXUtPmZyYWcuZml4ZWQpCiAJCXByaXYtPmllZWUtPmZ0cyA9IERFRkFVTFRfRlRTOwpAQCAtOTQ1NCw3ICs5NDUzLDcgQEAKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXdycXUtPmZyYWcudmFsdWUgPSBwcml2LT5pZWVlLT5mdHM7CiAJd3JxdS0+ZnJhZy5maXhlZCA9IDA7CS8qIG5vIGF1dG8gc2VsZWN0ICovCkBAIC05NDY5LDcgKzk0NjgsNyBAQAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCiAJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElGRVRJTUUgfHwgd3JxdS0+cmV0cnkuZGlzYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTUwMiw3ICs5NTAxLDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAl3cnF1LT5yZXRyeS5kaXNhYmxlZCA9IDA7CkBAIC05NTMzLDcgKzk1MzIsNyBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0gTlVMTDsKIApAQCAtOTU2OSwyMCArOTU2OCwyMCBAQAogCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuIGllZWU4MDIxMV93eF9nZXRfc2Nhbihwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKKwlyZXR1cm4gbGliaXB3X3d4X2dldF9zY2FuKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKIH0KIAogc3RhdGljIGludCBpcHdfd3hfc2V0X2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCByZXQ7CiAJdTMyIGNhcCA9IHByaXYtPmNhcGFiaWxpdHk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9lbmNvZGUocHJpdi0+aWVlZSwgaW5mbywgd3JxdSwga2V5KTsKKwlyZXQgPSBsaWJpcHdfd3hfc2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOwogCiAJLyogSW4gSUJTUyBtb2RlLCB3ZSBuZWVkIHRvIG5vdGlmeSB0aGUgZmlybXdhcmUgdG8gdXBkYXRlCiAJICogdGhlIGJlYWNvbiBpbmZvIGFmdGVyIHdlIGNoYW5nZWQgdGhlIGNhcGFiaWxpdHkuICovCkBAIC05NTk5LDE1ICs5NTk4LDE1IEBACiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXJldHVybiBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCB3cnF1LCBrZXkpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJcmV0dXJuIGxpYmlwd193eF9nZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sIHdycXUsIGtleSk7CiB9CiAKIHN0YXRpYyBpbnQgaXB3X3d4X3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBlcnI7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmICh3cnF1LT5wb3dlci5kaXNhYmxlZCkgewpAQCAtOTY1OCw3ICs5NjU3LDcgQEAKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKCEocHJpdi0+cG93ZXJfbW9kZSAmIElQV19QT1dFUl9FTkFCTEVEKSkKIAkJd3JxdS0+cG93ZXIuZGlzYWJsZWQgPSAxOwpAQCAtOTY3NSw3ICs5Njc0LDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgbW9kZSA9ICooaW50ICopZXh0cmE7CiAJaW50IGVycjsKIApAQCAtOTcwMSw3ICs5NzAwLDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgbGV2ZWwgPSBJUFdfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSk7CiAJY2hhciAqcCA9IGV4dHJhOwogCkBAIC05NzMzLDcgKzk3MzIsNyBAQAogCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJaW50IG1vZGUgPSAqKGludCAqKWV4dHJhOwogCXU4IGJhbmQgPSAwLCBtb2R1bGF0aW9uID0gMDsKIApAQCAtOTc0NSw4ICs5NzQ0LDggQEAKIAlpZiAocHJpdi0+YWRhcHRlciA9PSBJUFdfMjkxNUFCRykgewogCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDE7CiAJCWlmIChtb2RlICYgSUVFRV9BKSB7Ci0JCQliYW5kIHw9IElFRUU4MDIxMV81MkdIWl9CQU5EOwotCQkJbW9kdWxhdGlvbiB8PSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OOworCQkJYmFuZCB8PSBMSUJJUFdfNTJHSFpfQkFORDsKKwkJCW1vZHVsYXRpb24gfD0gTElCSVBXX09GRE1fTU9EVUxBVElPTjsKIAkJfSBlbHNlCiAJCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDA7CiAJfSBlbHNlIHsKQEAgLTk3NjEsMTQgKzk3NjAsMTQgQEAKIAl9CiAKIAlpZiAobW9kZSAmIElFRUVfQikgewotCQliYW5kIHw9IElFRUU4MDIxMV8yNEdIWl9CQU5EOwotCQltb2R1bGF0aW9uIHw9IElFRUU4MDIxMV9DQ0tfTU9EVUxBVElPTjsKKwkJYmFuZCB8PSBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiB8PSBMSUJJUFdfQ0NLX01PRFVMQVRJT047CiAJfSBlbHNlCiAJCXByaXYtPmllZWUtPmFiZ190cnVlID0gMDsKIAogCWlmIChtb2RlICYgSUVFRV9HKSB7Ci0JCWJhbmQgfD0gSUVFRTgwMjExXzI0R0haX0JBTkQ7Ci0JCW1vZHVsYXRpb24gfD0gSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTjsKKwkJYmFuZCB8PSBMSUJJUFdfMjRHSFpfQkFORDsKKwkJbW9kdWxhdGlvbiB8PSBMSUJJUFdfT0ZETV9NT0RVTEFUSU9OOwogCX0gZWxzZQogCQlwcml2LT5pZWVlLT5hYmdfdHJ1ZSA9IDA7CiAKQEAgLTk3OTgsNyArOTc5Nyw3IEBACiAJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJc3dpdGNoIChwcml2LT5pZWVlLT5tb2RlKSB7CiAJY2FzZSBJRUVFX0E6CkBAIC05ODM5LDcgKzk4MzgsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCBtb2RlID0gKihpbnQgKilleHRyYTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJLyogU3dpdGNoaW5nIGZyb20gU0hPUlQgLT4gTE9ORyByZXF1aXJlcyBhIGRpc2Fzc29jaWF0aW9uICovCkBAIC05ODcyLDcgKzk4NzEsNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1BSRUFNQkxFX0xPTkcpCiAJCXNucHJpbnRmKHdycXUtPm5hbWUsIElGTkFNU0laLCAibG9uZyAoMSkiKTsKQEAgLTk4ODcsNyArOTg4Niw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCWludCAqcGFybXMgPSAoaW50ICopZXh0cmE7CiAJaW50IGVuYWJsZSA9IChwYXJtc1swXSA+IDApOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTk5MjEsNyArOTkyMCw3IEBACiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCUlQV19ERUJVR19XWCgiUkVTRVRcbiIpOwogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWRhcHRlcl9yZXN0YXJ0KTsKIAlyZXR1cm4gMDsKQEAgLTk5MzEsNyArOTkzMCw3IEBACiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdV9zZWMgPSB7CiAJCS5lbmNvZGluZyA9IHsKIAkJCSAgICAgLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVELApAQCAtOTk1NCw3ICs5OTUzLDcgQEAKIAlpcHdfcmFkaW9fa2lsbF9zdyhwcml2LCBwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9TVyk7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpZWVlODAyMTFfd3hfc2V0X2VuY29kZShwcml2LT5pZWVlLCBpbmZvLCAmd3JxdV9zZWMsIE5VTEwpOworCWxpYmlwd193eF9zZXRfZW5jb2RlKHByaXYtPmllZWUsIGluZm8sICZ3cnF1X3NlYywgTlVMTCk7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfTUFTSykpIHsKQEAgLTk5NzMsNyArOTk3Miw3IEBACiAvKiBSZWJhc2UgdGhlIFdFIElPQ1RMcyB0byB6ZXJvIGZvciB0aGUgaGFuZGxlciBhcnJheSAqLwogI2RlZmluZSBJV19JT0NUTCh4KSBbKHgpLVNJT0NTSVdDT01NSVRdCiBzdGF0aWMgaXdfaGFuZGxlciBpcHdfd3hfaGFuZGxlcnNbXSA9IHsKLQlJV19JT0NUTChTSU9DR0lXTkFNRSkgPSBpcHdfd3hfZ2V0X25hbWUsCisJSVdfSU9DVEwoU0lPQ0dJV05BTUUpID0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bmFtZSwKIAlJV19JT0NUTChTSU9DU0lXRlJFUSkgPSBpcHdfd3hfc2V0X2ZyZXEsCiAJSVdfSU9DVEwoU0lPQ0dJV0ZSRVEpID0gaXB3X3d4X2dldF9mcmVxLAogCUlXX0lPQ1RMKFNJT0NTSVdNT0RFKSA9IGlwd193eF9zZXRfbW9kZSwKQEAgLTEwMDk5LDcgKzEwMDk4LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICppcHdfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBsaWJpcHdfcHJpdihkZXYpOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHM7CiAKIAl3c3RhdHMgPSAmcHJpdi0+d3N0YXRzOwpAQCAtMTAxODAsMTMgKzEwMTc5LDEzIEBACiB0b2RvOgogCiBtb2RpZnkgdG8gc2VuZCBvbmUgdGZkIHBlciBmcmFnbWVudCBpbnN0ZWFkIG9mIHVzaW5nIGNodW5raW5nLiAgb3RoZXJ3aXNlCi13ZSBuZWVkIHRvIGhlYXZpbHkgbW9kaWZ5IHRoZSBpZWVlODAyMTFfc2tiX3RvX3R4Yi4KK3dlIG5lZWQgdG8gaGVhdmlseSBtb2RpZnkgdGhlIGxpYmlwd19za2JfdG9fdHhiLgogKi8KIAotc3RhdGljIGludCBpcHdfdHhfc2tiKHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YiwKK3N0YXRpYyBpbnQgaXB3X3R4X3NrYihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHN0cnVjdCBsaWJpcHdfdHhiICp0eGIsCiAJCQkgICAgIGludCBwcmkpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKQorCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRycW9zICpoZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfM2FkZHJxb3MgKikKIAkgICAgdHhiLT5mcmFnbWVudHNbMF0tPmRhdGE7CiAJaW50IGkgPSAwOwogCXN0cnVjdCB0ZmRfZnJhbWUgKnRmZDsKQEAgLTEwMTk4LDEzICsxMDE5NywxMiBAQAogI2VuZGlmCiAJc3RydWN0IGNseDJfcXVldWUgKnEgPSAmdHhxLT5xOwogCXU4IGlkLCBoZHJfbGVuLCB1bmljYXN0OwotCXUxNiByZW1haW5pbmdfYnl0ZXM7CiAJaW50IGZjOwogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKQogCQlnb3RvIGRyb3A7CiAKLQloZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKKwloZHJfbGVuID0gbGliaXB3X2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKIAlzd2l0Y2ggKHByaXYtPmllZWUtPml3X21vZGUpIHsKIAljYXNlIElXX01PREVfQURIT0M6CiAJCXVuaWNhc3QgPSAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSk7CkBAIC0xMDIzNyw3ICsxMDIzNSw2IEBACiAKIAl0ZmQtPnUuZGF0YS5jbWRfaWQgPSBESU5PX0NNRF9UWDsKIAl0ZmQtPnUuZGF0YS5sZW4gPSBjcHVfdG9fbGUxNih0eGItPnBheWxvYWRfc2l6ZSk7Ci0JcmVtYWluaW5nX2J5dGVzID0gdHhiLT5wYXlsb2FkX3NpemU7CiAKIAlpZiAocHJpdi0+YXNzb2NfcmVxdWVzdC5pZWVlX21vZGUgPT0gSVBXX0JfTU9ERSkKIAkJdGZkLT51LmRhdGEudHhfZmxhZ3NfZXh0IHw9IERDVF9GTEFHX0VYVF9NT0RFX0NDSzsKQEAgLTEwMzc0LDEzICsxMDM3MSwxMyBAQAogCiAgICAgICBkcm9wOgogCUlQV19ERUJVR19EUk9QKCJTaWxlbnRseSBkcm9wcGluZyBUeCBwYWNrZXQuXG4iKTsKLQlpZWVlODAyMTFfdHhiX2ZyZWUodHhiKTsKKwlsaWJpcHdfdHhiX2ZyZWUodHhiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGlwd19uZXRfaXNfcXVldWVfZnVsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcHJpKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9RT1MKIAlpbnQgdHhfaWQgPSBpcHdfZ2V0X3R4X3F1ZXVlX251bWJlcihwcml2LCBwcmkpOwogCXN0cnVjdCBjbHgyX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4X2lkXTsKQEAgLTEwMzk2LDkgKzEwMzkzLDkgQEAKIAogI2lmZGVmIENPTkZJR19JUFcyMjAwX1BST01JU0NVT1VTCiBzdGF0aWMgdm9pZCBpcHdfaGFuZGxlX3Byb21pc2N1b3VzX3R4KHN0cnVjdCBpcHdfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiKQorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfdHhiICp0eGIpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyBkdW1teXN0YXRzOworCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgZHVtbXlzdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4IG47CiAJdTE2IGZpbHRlciA9IHByaXYtPnByb21fcHJpdi0+ZmlsdGVyOwpAQCAtMTA0MTEsMTcgKzEwNDA4LDE3IEBACiAKIAkvKiBGaWx0ZXJpbmcgb2YgZnJhZ21lbnQgY2hhaW5zIGlzIGRvbmUgYWdhaW5zIHRoZSBmaXJzdCBmcmFnbWVudCAqLwogCWhkciA9ICh2b2lkICopdHhiLT5mcmFnbWVudHNbMF0tPmRhdGE7Ci0JaWYgKGllZWU4MDIxMV9pc19tYW5hZ2VtZW50KGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJaWYgKGxpYmlwd19pc19tYW5hZ2VtZW50KGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19NR01UKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTUdNVF9IRUFERVJfT05MWSkKIAkJCWhkcl9vbmx5ID0gMTsKLQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19jb250cm9sKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJfSBlbHNlIGlmIChsaWJpcHdfaXNfY29udHJvbChsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgewogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fQ1RMKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fQ1RMX0hFQURFUl9PTkxZKQogCQkJaGRyX29ubHkgPSAxOwotCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwl9IGVsc2UgaWYgKGxpYmlwd19pc19kYXRhKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19EQVRBKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fREFUQV9IRUFERVJfT05MWSkKQEAgLTEwNDM2LDcgKzEwNDMzLDcgQEAKIAogCQlpZiAoaGRyX29ubHkpIHsKIAkJCWhkciA9ICh2b2lkICopc3JjLT5kYXRhOwotCQkJbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSk7CisJCQlsZW4gPSBsaWJpcHdfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKTsKIAkJfSBlbHNlCiAJCQlsZW4gPSBzcmMtPmxlbjsKIApAQCAtMTA0NzAsMTggKzEwNDY3LDE4IEBACiAKIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShzcmMsIHNrYl9wdXQoZHN0LCBsZW4pLCBsZW4pOwogCi0JCWlmICghaWVlZTgwMjExX3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgZHN0LCAmZHVtbXlzdGF0cykpCisJCWlmICghbGliaXB3X3J4KHByaXYtPnByb21fcHJpdi0+aWVlZSwgZHN0LCAmZHVtbXlzdGF0cykpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShkc3QpOwogCX0KIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGlwd19uZXRfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIsCi0JCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByaSkKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcHdfbmV0X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3QgbGliaXB3X3R4YiAqdHhiLAorCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcHJpKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7CisJbmV0ZGV2X3R4X3QgcmV0OwogCiAJSVBXX0RFQlVHX1RYKCJkZXYtPnhtaXQoJWQgYnl0ZXMpXG4iLCB0eGItPnBheWxvYWRfc2l6ZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTEwNTA2LDcgKzEwNTAzLDcgQEAKIAogc3RhdGljIGludCBpcHdfbmV0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQpAQCAtMTA1MjQsNyArMTA1MjEsNyBAQAogc3RhdGljIHZvaWQgaXB3X2V0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnAgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGxpYmlwd19wcml2KGRldik7CiAJY2hhciB2ZXJzWzY0XTsKIAljaGFyIGRhdGVbMzJdOwogCXUzMiBsZW47CkBAIC0xMDU0NSw3ICsxMDU0Miw3IEBACiAKIHN0YXRpYyB1MzIgaXB3X2V0aHRvb2xfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJcmV0dXJuIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfQVNTT0NJQVRFRCkgIT0gMDsKIH0KIApAQCAtMTA1NTcsNyArMTA1NTQsNyBAQAogc3RhdGljIGludCBpcHdfZXRodG9vbF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKiBieXRlcykKIHsKLQlzdHJ1Y3QgaXB3X3ByaXYgKnAgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGxpYmlwd19wcml2KGRldik7CiAKIAlpZiAoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbiA+IElQV19FRVBST01fSU1BR0VfU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDU3MCw3ICsxMDU2Nyw3IEBACiBzdGF0aWMgaW50IGlwd19ldGh0b29sX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqIGJ5dGVzKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcCA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAogCWlmIChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuID4gSVBXX0VFUFJPTV9JTUFHRV9TSVpFKQpAQCAtMTA3ODYsOSArMTA3ODMsOSBAQAogfQogCiBzdGF0aWMgdm9pZCBzaGltX19zZXRfc2VjdXJpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5ICpzZWMpCisJCQkgICAgICAgc3RydWN0IGxpYmlwd19zZWN1cml0eSAqc2VjKQogewotCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcml2ICpwcml2ID0gbGliaXB3X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmIChzZWMtPmZsYWdzICYgKDEgPDwgaSkpIHsKQEAgLTEwODczLDIxICsxMDg3MCwyMSBAQAogCW1lbXNldChyYXRlcywgMCwgc2l6ZW9mKCpyYXRlcykpOwogCS8qIGNvbmZpZ3VyZSBzdXBwb3J0ZWQgcmF0ZXMgKi8KIAlzd2l0Y2ggKHByaXYtPmllZWUtPmZyZXFfYmFuZCkgewotCWNhc2UgSUVFRTgwMjExXzUyR0haX0JBTkQ6CisJY2FzZSBMSUJJUFdfNTJHSFpfQkFORDoKIAkJcmF0ZXMtPmllZWVfbW9kZSA9IElQV19BX01PREU7CiAJCXJhdGVzLT5wdXJwb3NlID0gSVBXX1JBVEVfQ0FQQUJJTElUSUVTOwotCQlpcHdfYWRkX29mZG1fc2Nhbl9yYXRlcyhyYXRlcywgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OLAotCQkJCQlJRUVFODAyMTFfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0spOworCQlpcHdfYWRkX29mZG1fc2Nhbl9yYXRlcyhyYXRlcywgTElCSVBXX0NDS19NT0RVTEFUSU9OLAorCQkJCQlMSUJJUFdfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0spOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CQkvKiBNaXhlZCBvciAyLjRHaHogKi8KIAkJcmF0ZXMtPmllZWVfbW9kZSA9IElQV19HX01PREU7CiAJCXJhdGVzLT5wdXJwb3NlID0gSVBXX1JBVEVfQ0FQQUJJTElUSUVTOwotCQlpcHdfYWRkX2Nja19zY2FuX3JhdGVzKHJhdGVzLCBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04sCi0JCQkJICAgICAgIElFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLKTsKLQkJaWYgKHByaXYtPmllZWUtPm1vZHVsYXRpb24gJiBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OKSB7Ci0JCQlpcHdfYWRkX29mZG1fc2Nhbl9yYXRlcyhyYXRlcywgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OLAotCQkJCQkJSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLKTsKKwkJaXB3X2FkZF9jY2tfc2Nhbl9yYXRlcyhyYXRlcywgTElCSVBXX0NDS19NT0RVTEFUSU9OLAorCQkJCSAgICAgICBMSUJJUFdfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSyk7CisJCWlmIChwcml2LT5pZWVlLT5tb2R1bGF0aW9uICYgTElCSVBXX09GRE1fTU9EVUxBVElPTikgeworCQkJaXB3X2FkZF9vZmRtX3NjYW5fcmF0ZXMocmF0ZXMsIExJQklQV19DQ0tfTU9EVUxBVElPTiwKKwkJCQkJCUxJQklQV19PRkRNX0RFRkFVTFRfUkFURVNfTUFTSyk7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtMTA5OTMsNyArMTA5OTAsNyBAQAogICogdGFibGUuCiAgKgogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gaXB3X2dlb3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGliaXB3X2dlbyBpcHdfZ2Vvc1tdID0gewogCXsJCQkvKiBSZXN0cmljdGVkICovCiAJICItLS0iLAogCSAuYmdfY2hhbm5lbHMgPSAxMSwKQEAgLTExMDE1LDEwICsxMTAxMiwxMCBAQAogCSAgICAgICB7NTIwMCwgNDB9LAogCSAgICAgICB7NTIyMCwgNDR9LAogCSAgICAgICB7NTI0MCwgNDh9LAotCSAgICAgICB7NTI2MCwgNTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTI4MCwgNTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMwMCwgNjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMyMCwgNjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgICAgICAgezUyNjAsIDUyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIH0sCiAKIAl7CQkJLyogUmVzdCBvZiBXb3JsZCAqLwpAQCAtMTEwNDMsMTAgKzExMDQwLDEwIEBACiAJICAgICAgIHs1MjAwLCA0MH0sCiAJICAgICAgIHs1MjIwLCA0NH0sCiAJICAgICAgIHs1MjQwLCA0OH0sCi0JICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjYwLCA1MiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCiAJICAgICAgIHs1NzQ1LCAxNDl9LAogCSAgICAgICB7NTc2NSwgMTUzfSwKIAkgICAgICAgezU3ODUsIDE1N30sCkBAIC0xMTA2NiwxNSArMTEwNjMsMTUgQEAKIAkgICAgICAgezUyMDAsIDQwfSwKIAkgICAgICAgezUyMjAsIDQ0fSwKIAkgICAgICAgezUyNDAsIDQ4fSwKLQkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3NDUsIDE0OSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NzY1LCAxNTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTc4NSwgMTU3LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU4MDUsIDE2MSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1ODI1LCAxNjUsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkgICAgICAgezUyNjAsIDUyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUyODAsIDU2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMDAsIDYwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezUzMjAsIDY0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3NDUsIDE0OSwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzY1LCAxNTMsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc4NSwgMTU3LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU4MDUsIDE2MSwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODI1LCAxNjUsIExJQklQV19DSF9QQVNTSVZFX09OTFl9fSwKIAkgfSwKIAogCXsJCQkvKiBDdXN0b20gSmFwYW4gKi8KQEAgLTExMTExLDIxICsxMTEwOCwyMSBAQAogCSAgICAgICB7NTIwMCwgNDB9LAogCSAgICAgICB7NTIyMCwgNDR9LAogCSAgICAgICB7NTI0MCwgNDh9LAotCSAgICAgICB7NTI2MCwgNTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTI4MCwgNTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMwMCwgNjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTMyMCwgNjQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTUwMCwgMTAwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1MjAsIDEwNCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NTQwLCAxMDgsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTU2MCwgMTEyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1ODAsIDExNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NjAwLCAxMjAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTYyMCwgMTI0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU2NDAsIDEyOCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NjYwLCAxMzIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTY4MCwgMTM2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3MDAsIDE0MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCSAgICAgICB7NTI2MCwgNTIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI4MCwgNTYsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMwMCwgNjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMyMCwgNjQsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTUwMCwgMTAwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1MjAsIDEwNCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTQwLCAxMDgsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU2MCwgMTEyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1ODAsIDExNiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjAwLCAxMjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTYyMCwgMTI0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2NDAsIDEyOCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjYwLCAxMzIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY4MCwgMTM2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3MDAsIDE0MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX19LAogCSB9LAogCiAJewkJCS8qIEN1c3RvbSBKYXBhbiAqLwpAQCAtMTExMzUsNyArMTExMzIsNyBAQAogCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAogCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAogCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LCB7MjQ2NywgMTJ9LAotCQl7MjQ3MiwgMTN9LCB7MjQ4NCwgMTQsIElFRUU4MDIxMV9DSF9CX09OTFl9fSwKKwkJezI0NzIsIDEzfSwgezI0ODQsIDE0LCBMSUJJUFdfQ0hfQl9PTkxZfX0sCiAJIC5hX2NoYW5uZWxzID0gNCwKIAkgLmEgPSB7ezUxNzAsIDM0fSwgezUxOTAsIDM4fSwKIAkgICAgICAgezUyMTAsIDQyfSwgezUyMzAsIDQ2fX0sCkBAIC0xMTE0OCw4ICsxMTE0NSw4IEBACiAJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCiAJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCiAJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sIHsyNDY3LCAxMn0sCi0JCXsyNDcyLCAxM30sIHsyNDg0LCAxNCwgSUVFRTgwMjExX0NIX0JfT05MWSB8Ci0JCQkgICAgIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkJezI0NzIsIDEzfSwgezI0ODQsIDE0LCBMSUJJUFdfQ0hfQl9PTkxZIHwKKwkJCSAgICAgTElCSVBXX0NIX1BBU1NJVkVfT05MWX19LAogCSB9LAogCiAJewkJCS8qIEhpZ2ggQmFuZCAqLwpAQCAtMTExNTksOCArMTExNTYsOCBAQAogCQl7MjQyNywgNH0sIHsyNDMyLCA1fSwgezI0MzcsIDZ9LAogCQl7MjQ0MiwgN30sIHsyNDQ3LCA4fSwgezI0NTIsIDl9LAogCQl7MjQ1NywgMTB9LCB7MjQ2MiwgMTF9LAotCQl7MjQ2NywgMTIsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCQl7MjQ3MiwgMTMsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9fSwKKwkJezI0NjcsIDEyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkJezI0NzIsIDEzLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIC5hX2NoYW5uZWxzID0gNCwKIAkgLmEgPSB7ezU3NDUsIDE0OX0sIHs1NzY1LCAxNTN9LAogCSAgICAgICB7NTc4NSwgMTU3fSwgezU4MDUsIDE2MX19LApAQCAtMTExODYsMzMgKzExMTgzLDMzIEBACiAJCXsyNDI3LCA0fSwgezI0MzIsIDV9LCB7MjQzNywgNn0sCiAJCXsyNDQyLCA3fSwgezI0NDcsIDh9LCB7MjQ1MiwgOX0sCiAJCXsyNDU3LCAxMH0sIHsyNDYyLCAxMX0sCi0JCXsyNDY3LCAxMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JCXsyNDcyLCAxMywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCQl7MjQ2NywgMTIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCQl7MjQ3MiwgMTMsIExJQklQV19DSF9QQVNTSVZFX09OTFl9fSwKIAkgLmFfY2hhbm5lbHMgPSAyNCwKLQkgLmEgPSB7ezUxODAsIDM2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyMDAsIDQwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyMjAsIDQ0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyNDAsIDQ4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyNjAsIDUyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUyODAsIDU2LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMDAsIDYwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezUzMjAsIDY0LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1MDAsIDEwMCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NTIwLCAxMDQsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTU0MCwgMTA4LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU1NjAsIDExMiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NTgwLCAxMTYsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTYwMCwgMTIwLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU2MjAsIDEyNCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NjQwLCAxMjgsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTY2MCwgMTMyLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU2ODAsIDEzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NzAwLCAxNDAsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTc0NSwgMTQ5LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3NjUsIDE1MywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1Nzg1LCAxNTcsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTgwNSwgMTYxLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU4MjUsIDE2NSwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX19LAorCSAuYSA9IHt7NTE4MCwgMzYsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTIwMCwgNDAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTIyMCwgNDQsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI0MCwgNDgsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI2MCwgNTIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTI4MCwgNTYsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMwMCwgNjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTMyMCwgNjQsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTUwMCwgMTAwLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1MjAsIDEwNCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NTQwLCAxMDgsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTU2MCwgMTEyLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU1ODAsIDExNiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjAwLCAxMjAsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTYyMCwgMTI0LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU2NDAsIDEyOCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NjYwLCAxMzIsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTY4MCwgMTM2LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3MDAsIDE0MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzQ1LCAxNDksIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc2NSwgMTUzLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3ODUsIDE1NywgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODA1LCAxNjEsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTgyNSwgMTY1LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIH0sCiAKIAl7CQkJLyogRXVyb3BlICovCkBAIC0xMTIyMywxOSArMTEyMjAsMTkgQEAKIAkJezI0NDIsIDd9LCB7MjQ0NywgOH0sIHsyNDUyLCA5fSwKIAkJezI0NTcsIDEwfSwgezI0NjIsIDExfX0sCiAJIC5hX2NoYW5uZWxzID0gMTMsCi0JIC5hID0ge3s1MTgwLCAzNiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjAwLCA0MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjIwLCA0NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjQwLCA0OCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjYwLCA1MiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MjgwLCA1NiwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzAwLCA2MCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1MzIwLCA2NCwgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1NzQ1LCAxNDksIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTc2NSwgMTUzLCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfSwKLQkgICAgICAgezU3ODUsIDE1NywgSUVFRTgwMjExX0NIX1BBU1NJVkVfT05MWX0sCi0JICAgICAgIHs1ODA1LCAxNjEsIElFRUU4MDIxMV9DSF9QQVNTSVZFX09OTFl9LAotCSAgICAgICB7NTgyNSwgMTY1LCBJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZfX0sCisJIC5hID0ge3s1MTgwLCAzNiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjAwLCA0MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjIwLCA0NCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjQwLCA0OCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjYwLCA1MiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MjgwLCA1NiwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzAwLCA2MCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1MzIwLCA2NCwgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1NzQ1LCAxNDksIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTc2NSwgMTUzLCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfSwKKwkgICAgICAgezU3ODUsIDE1NywgTElCSVBXX0NIX1BBU1NJVkVfT05MWX0sCisJICAgICAgIHs1ODA1LCAxNjEsIExJQklQV19DSF9QQVNTSVZFX09OTFl9LAorCSAgICAgICB7NTgyNSwgMTY1LCBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZfX0sCiAJIH0KIH07CiAKQEAgLTExMjQ2LDcgKzExMjQzLDcgQEAKIAogCS8qIEFnZSBzY2FuIGxpc3QgZW50cmllcyBmb3VuZCBiZWZvcmUgc3VzcGVuZCAqLwogCWlmIChwcml2LT5zdXNwZW5kX3RpbWUpIHsKLQkJaWVlZTgwMjExX25ldHdvcmtzX2FnZShwcml2LT5pZWVlLCBwcml2LT5zdXNwZW5kX3RpbWUpOworCQlsaWJpcHdfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CiAJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CiAJfQogCkBAIC0xMTI5MSw3ICsxMTI4OCw3IEBACiAJCQkJICAgIHByaXYtPmVlcHJvbVtFRVBST01fQ09VTlRSWV9DT0RFICsgMl0pOwogCQkJaiA9IDA7CiAJCX0KLQkJaWYgKGllZWU4MDIxMV9zZXRfZ2VvKHByaXYtPmllZWUsICZpcHdfZ2Vvc1tqXSkpIHsKKwkJaWYgKGxpYmlwd19zZXRfZ2VvKHByaXYtPmllZWUsICZpcHdfZ2Vvc1tqXSkpIHsKIAkJCUlQV19XQVJOSU5HKCJDb3VsZCBub3Qgc2V0IGdlb2dyYXBoeS4iKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC0xMTQxOSwxNiArMTE0MTYsMTAwIEBACiAvKiBDYWxsZWQgYnkgcmVnaXN0ZXJfbmV0ZGV2KCkgKi8KIHN0YXRpYyBpbnQgaXB3X25ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlpbnQgaSwgcmMgPSAwOworCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGxpYmlwd19wcml2KGRldik7CisJY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmdlbyA9IGxpYmlwd19nZXRfZ2VvKHByaXYtPmllZWUpOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSAmcHJpdi0+aWVlZS0+d2RldjsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoaXB3X3VwKHByaXYpKSB7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKIAl9CiAKKwltZW1jcHkod2Rldi0+d2lwaHktPnBlcm1fYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCS8qIGZpbGwtb3V0IHByaXYtPmllZWUtPmJnX2JhbmQgKi8KKwlpZiAoZ2VvLT5iZ19jaGFubmVscykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiZ19iYW5kID0gJnByaXYtPmllZWUtPmJnX2JhbmQ7CisKKwkJYmdfYmFuZC0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJCWJnX2JhbmQtPm5fY2hhbm5lbHMgPSBnZW8tPmJnX2NoYW5uZWxzOworCQliZ19iYW5kLT5jaGFubmVscyA9CisJCQlremFsbG9jKGdlby0+YmdfY2hhbm5lbHMgKgorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpLCBHRlBfS0VSTkVMKTsKKwkJLyogdHJhbnNsYXRlIGdlby0+YmcgdG8gYmdfYmFuZC5jaGFubmVscyAqLworCQlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5iZ19jaGFubmVsczsgaSsrKSB7CisJCQliZ19iYW5kLT5jaGFubmVsc1tpXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwkJCWJnX2JhbmQtPmNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxID0gZ2VvLT5iZ1tpXS5mcmVxOworCQkJYmdfYmFuZC0+Y2hhbm5lbHNbaV0uaHdfdmFsdWUgPSBnZW8tPmJnW2ldLmNoYW5uZWw7CisJCQliZ19iYW5kLT5jaGFubmVsc1tpXS5tYXhfcG93ZXIgPSBnZW8tPmJnW2ldLm1heF9wb3dlcjsKKwkJCWlmIChnZW8tPmJnW2ldLmZsYWdzICYgTElCSVBXX0NIX1BBU1NJVkVfT05MWSkKKwkJCQliZ19iYW5kLT5jaGFubmVsc1tpXS5mbGFncyB8PQorCQkJCQlJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCQlpZiAoZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9OT19JQlNTKQorCQkJCWJnX2JhbmQtPmNoYW5uZWxzW2ldLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0lCU1M7CisJCQlpZiAoZ2VvLT5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9SQURBUl9ERVRFQ1QpCisJCQkJYmdfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fUkFEQVI7CisJCQkvKiBObyBlcXVpdmFsZW50IGZvciBMSUJJUFdfQ0hfODAyMTFIX1JVTEVTLAorCQkJICAgTElCSVBXX0NIX1VOSUZPUk1fU1BSRUFESU5HLCBvcgorCQkJICAgTElCSVBXX0NIX0JfT05MWS4uLiAqLworCQl9CisJCS8qIHBvaW50IGF0IGJpdHJhdGUgaW5mbyAqLworCQliZ19iYW5kLT5iaXRyYXRlcyA9IGlwdzIyMDBfYmdfcmF0ZXM7CisJCWJnX2JhbmQtPm5fYml0cmF0ZXMgPSBpcHcyMjAwX251bV9iZ19yYXRlczsKKworCQl3ZGV2LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSBiZ19iYW5kOworCX0KKworCS8qIGZpbGwtb3V0IHByaXYtPmllZWUtPmFfYmFuZCAqLworCWlmIChnZW8tPmFfY2hhbm5lbHMpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYV9iYW5kID0gJnByaXYtPmllZWUtPmFfYmFuZDsKKworCQlhX2JhbmQtPmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOworCQlhX2JhbmQtPm5fY2hhbm5lbHMgPSBnZW8tPmFfY2hhbm5lbHM7CisJCWFfYmFuZC0+Y2hhbm5lbHMgPQorCQkJa3phbGxvYyhnZW8tPmFfY2hhbm5lbHMgKgorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpLCBHRlBfS0VSTkVMKTsKKwkJLyogdHJhbnNsYXRlIGdlby0+YmcgdG8gYV9iYW5kLmNoYW5uZWxzICovCisJCWZvciAoaSA9IDA7IGkgPCBnZW8tPmFfY2hhbm5lbHM7IGkrKykgeworCQkJYV9iYW5kLT5jaGFubmVsc1tpXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXEgPSBnZW8tPmFbaV0uZnJlcTsKKwkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uaHdfdmFsdWUgPSBnZW8tPmFbaV0uY2hhbm5lbDsKKwkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0ubWF4X3Bvd2VyID0gZ2VvLT5hW2ldLm1heF9wb3dlcjsKKwkJCWlmIChnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUEFTU0lWRV9PTkxZKQorCQkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJaWYgKGdlby0+YVtpXS5mbGFncyAmIExJQklQV19DSF9OT19JQlNTKQorCQkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJCWlmIChnZW8tPmFbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfUkFEQVJfREVURUNUKQorCQkJCWFfYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX0NIQU5fUkFEQVI7CisJCQkvKiBObyBlcXVpdmFsZW50IGZvciBMSUJJUFdfQ0hfODAyMTFIX1JVTEVTLAorCQkJICAgTElCSVBXX0NIX1VOSUZPUk1fU1BSRUFESU5HLCBvcgorCQkJICAgTElCSVBXX0NIX0JfT05MWS4uLiAqLworCQl9CisJCS8qIHBvaW50IGF0IGJpdHJhdGUgaW5mbyAqLworCQlhX2JhbmQtPmJpdHJhdGVzID0gaXB3MjIwMF9hX3JhdGVzOworCQlhX2JhbmQtPm5fYml0cmF0ZXMgPSBpcHcyMjAwX251bV9hX3JhdGVzOworCisJCXdkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9IGFfYmFuZDsKKwl9CisKKwlzZXRfd2lwaHlfZGV2KHdkZXYtPndpcGh5LCAmcHJpdi0+cGNpX2Rldi0+ZGV2KTsKKworCS8qIFdpdGggdGhhdCBpbmZvcm1hdGlvbiBpbiBwbGFjZSwgd2UgY2FuIG5vdyByZWdpc3RlciB0aGUgd2lwaHkuLi4gKi8KKwlpZiAod2lwaHlfcmVnaXN0ZXIod2Rldi0+d2lwaHkpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiAvKiBQQ0kgZHJpdmVyIHN0dWZmICovCkBAIC0xMTQ1MCwxMSArMTE1MzEsMTEgQEAKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIDB4Mjc1NCwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4MTA0MywgMHg4MDg2LCAweDI3NjEsIDAsIDAsIDB9LAogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwNDMsIDB4ODA4NiwgMHgyNzYyLCAwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQkcgKi8KLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQkcgKi8KLQl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg0MjIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwJLyogQUJHICovCi0Je1BDSV9WRU5ET1JfSURfSU5URUwsIDB4NDIyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCS8qIEFCRyAqLworCXtQQ0lfVkRFVklDRShJTlRFTCwgMHgxMDRmKSwgMH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCAweDQyMjApLCAwfSwJLyogQkcgKi8KKwl7UENJX1ZERVZJQ0UoSU5URUwsIDB4NDIyMSksIDB9LAkvKiBCRyAqLworCXtQQ0lfVkRFVklDRShJTlRFTCwgMHg0MjIzKSwgMH0sCS8qIEFCRyAqLworCXtQQ0lfVkRFVklDRShJTlRFTCwgMHg0MjI0KSwgMH0sCS8qIEFCRyAqLwogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KQEAgLTExNDk4LDcgKzExNTc5LDcgQEAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUwogc3RhdGljIGludCBpcHdfcHJvbV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OwogCiAJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5vcGVuXG4iKTsKQEAgLTExNTE4LDcgKzExNTk5LDcgQEAKIAogc3RhdGljIGludCBpcHdfcHJvbV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGxpYmlwd19wcml2KGRldik7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcHJvbV9wcml2LT5wcml2OwogCiAJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT5zdG9wXG4iKTsKQEAgLTExNTM1LDcgKzExNjE2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJSVBXX0RFQlVHX0lORk8oInByb20gZGV2LT54bWl0XG4iKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0xMTU0Niw3ICsxMTYyOCw3IEBACiAJLm5kb19vcGVuIAkJPSBpcHdfcHJvbV9vcGVuLAogCS5uZG9fc3RvcAkJPSBpcHdfcHJvbV9zdG9wLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpcHdfcHJvbV9oYXJkX3N0YXJ0X3htaXQsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fY2hhbmdlX210dQkJPSBsaWJpcHdfY2hhbmdlX210dSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwpAQCAtMTE1NTgsMTEgKzExNjQwLDExIEBACiAJaWYgKHByaXYtPnByb21fbmV0X2RldikKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXByaXYtPnByb21fbmV0X2RldiA9IGFsbG9jX2llZWU4MDIxMShzaXplb2Yoc3RydWN0IGlwd19wcm9tX3ByaXYpKTsKKwlwcml2LT5wcm9tX25ldF9kZXYgPSBhbGxvY19pZWVlODAyMTEoc2l6ZW9mKHN0cnVjdCBpcHdfcHJvbV9wcml2KSwgMSk7CiAJaWYgKHByaXYtPnByb21fbmV0X2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KHByaXYtPnByb21fbmV0X2Rldik7CisJcHJpdi0+cHJvbV9wcml2ID0gbGliaXB3X3ByaXYocHJpdi0+cHJvbV9uZXRfZGV2KTsKIAlwcml2LT5wcm9tX3ByaXYtPmllZWUgPSBuZXRkZXZfcHJpdihwcml2LT5wcm9tX25ldF9kZXYpOwogCXByaXYtPnByb21fcHJpdi0+cHJpdiA9IHByaXY7CiAKQEAgLTExNTc3LDcgKzExNjU5LDcgQEAKIAogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7CiAJaWYgKHJjKSB7Ci0JCWZyZWVfaWVlZTgwMjExKHByaXYtPnByb21fbmV0X2Rldik7CisJCWZyZWVfaWVlZTgwMjExKHByaXYtPnByb21fbmV0X2RldiwgMSk7CiAJCXByaXYtPnByb21fbmV0X2RldiA9IE5VTEw7CiAJCXJldHVybiByYzsKIAl9CkBAIC0xMTU5MSw3ICsxMTY3Myw3IEBACiAJCXJldHVybjsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPnByb21fbmV0X2Rldik7Ci0JZnJlZV9pZWVlODAyMTEocHJpdi0+cHJvbV9uZXRfZGV2KTsKKwlmcmVlX2llZWU4MDIxMShwcml2LT5wcm9tX25ldF9kZXYsIDEpOwogCiAJcHJpdi0+cHJvbV9uZXRfZGV2ID0gTlVMTDsKIH0KQEAgLTExNjA0LDggKzExNjg2LDggQEAKIAkubmRvX3N0b3AJCT0gaXB3X25ldF9zdG9wLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gaXB3X25ldF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBpcHdfbmV0X3NldF9tYWNfYWRkcmVzcywKLQkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3htaXQsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSBsaWJpcHdfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gbGliaXB3X2NoYW5nZV9tdHUsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiB9OwogCkBAIC0xMTYxOSwxMyArMTE3MDEsMTMgQEAKIAlzdHJ1Y3QgaXB3X3ByaXYgKnByaXY7CiAJaW50IGk7CiAKLQluZXRfZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgaXB3X3ByaXYpKTsKKwluZXRfZGV2ID0gYWxsb2NfaWVlZTgwMjExKHNpemVvZihzdHJ1Y3QgaXB3X3ByaXYpLCAwKTsKIAlpZiAobmV0X2RldiA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAotCXByaXYgPSBpZWVlODAyMTFfcHJpdihuZXRfZGV2KTsKKwlwcml2ID0gbGliaXB3X3ByaXYobmV0X2Rldik7CiAJcHJpdi0+aWVlZSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCiAJcHJpdi0+bmV0X2RldiA9IG5ldF9kZXY7CkBAIC0xMTc2Nyw3ICsxMTg0OSw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKICAgICAgIG91dF9mcmVlX2llZWU4MDIxMToKLQlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2KTsKKwlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2LCAwKTsKICAgICAgIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTE4MzQsNyArMTE5MTYsNyBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2KTsKKwlmcmVlX2llZWU4MDIxMShwcml2LT5uZXRfZGV2LCAwKTsKIAlmcmVlX2Zpcm13YXJlKCk7CiB9CiAKQEAgLTExOTYzLDEzICsxMjA0NSwxMyBAQAogbW9kdWxlX3BhcmFtKGF1dG9fY3JlYXRlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhhdXRvX2NyZWF0ZSwgImF1dG8gY3JlYXRlIGFkaG9jIG5ldHdvcmsgKGRlZmF1bHQgb24pIik7CiAKLW1vZHVsZV9wYXJhbShsZWQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQobGVkLCBsZWRfc3VwcG9ydCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobGVkLCAiZW5hYmxlIGxlZCBjb250cm9sIG9uIHNvbWUgc3lzdGVtcyAoZGVmYXVsdCAwIG9mZikiKTsKIAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7CiAKLW1vZHVsZV9wYXJhbShjaGFubmVsLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGNoYW5uZWwsIGRlZmF1bHRfY2hhbm5lbCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoY2hhbm5lbCwgImNoYW5uZWwgdG8gbGltaXQgYXNzb2NpYXRlIHRvIChkZWZhdWx0IDAgW0FOWV0pIik7CiAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUwpAQCAtMTE5OTUsMTAgKzEyMDc3LDEwIEBACiAjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfUU9TICovCiAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCi1tb2R1bGVfcGFyYW0obW9kZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9uYW1lZChtb2RlLCBuZXR3b3JrX21vZGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1vZGUsICJuZXR3b3JrIG1vZGUgKDA9QlNTLDE9SUJTUywyPU1vbml0b3IpIik7CiAjZWxzZQotbW9kdWxlX3BhcmFtKG1vZGUsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQobW9kZSwgbmV0d29ya19tb2RlLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtb2RlLCAibmV0d29yayBtb2RlICgwPUJTUywxPUlCU1MpIik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAppbmRleCAwNWU4Y2NmLi5iZjBlZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaApAQCAtMTksNyArMTksNyBAQAogICBmaWxlIGNhbGxlZCBMSUNFTlNFLgogCiAgIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gIEphbWVzIFAuIEtldHJlbm9zIDxpcHcyMTAwLWFkbWluQGxpbnV4LmludGVsLmNvbT4KKyAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+CiAgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTUsNyArNTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAogLyogQXV0aGVudGljYXRpb24gIGFuZCBBc3NvY2lhdGlvbiBTdGF0ZXMgKi8KIGVudW0gY29ubmVjdGlvbl9tYW5hZ2VyX2Fzc29jX3N0YXRlcyB7CkBAIC0zNjUsOCArMzY1LDggQEAKIC8qIFFvUyBzdHVyY3R1cmVzICovCiBzdHJ1Y3QgaXB3X3Fvc19pbmZvIHsKIAlpbnQgcW9zX2VuYWJsZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICpkZWZfcW9zX3Bhcm1fT0ZETTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICpkZWZfcW9zX3Bhcm1fQ0NLOworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKmRlZl9xb3NfcGFybV9PRkRNOworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgKmRlZl9xb3NfcGFybV9DQ0s7CiAJdTMyIGJ1cnN0X2R1cmF0aW9uX0NDSzsKIAl1MzIgYnVyc3RfZHVyYXRpb25fT0ZETTsKIAl1MTYgcW9zX25vX2Fja19tYXNrOwpAQCAtNTM0LDcgKzUzNCw3IEBACiBzdHJ1Y3QgY2x4Ml90eF9xdWV1ZSB7CiAJc3RydWN0IGNseDJfcXVldWUgcTsKIAlzdHJ1Y3QgdGZkX2ZyYW1lICpiZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqKnR4YjsKKwlzdHJ1Y3QgbGliaXB3X3R4YiAqKnR4YjsKIH07CiAKIC8qCkBAIC0xMTQ0LDcgKzExNDQsNyBAQAogc3RydWN0IGlwd19wcml2Owogc3RydWN0IGlwd19wcm9tX3ByaXYgewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZTsKIAllbnVtIGlwd19wcm9tX2ZpbHRlciBmaWx0ZXI7CiAJaW50IHR4X3BhY2tldHM7CiAJaW50IHJ4X3BhY2tldHM7CkBAIC0xMTc1LDcgKzExNzUsNyBAQAogCiBzdHJ1Y3QgaXB3X3ByaXYgewogCS8qIGllZWUgZGV2aWNlIHVzZWQgYnkgZ2VuZXJpYyBpZWVlIHByb2Nlc3NpbmcgY29kZSAqLwotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlOworCXN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlOwogCiAJc3BpbmxvY2tfdCBsb2NrOwogCXNwaW5sb2NrX3QgaXJxX2xvY2s7CkBAIC0xMjIyLDcgKzEyMjIsNyBAQAogCXUzMiByb2FtaW5nX3RocmVzaG9sZDsKIAogCXN0cnVjdCBpcHdfYXNzb2NpYXRlIGFzc29jX3JlcXVlc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICphc3NvY19uZXR3b3JrOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqYXNzb2NfbmV0d29yazsKIAogCXVuc2lnbmVkIGxvbmcgdHNfc2Nhbl9hYm9ydDsKIAlzdHJ1Y3QgaXB3X3N1cHBvcnRlZF9yYXRlcyByYXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDUzOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwdy5oCkBAIC0wLDAgKzEsMTA5MiBAQAorLyoKKyAqIE1lcmdlZCB3aXRoIG1haW5saW5lIGllZWU4MDIxMS5oIGluIEF1ZyAyMDA0LiAgT3JpZ2luYWwgaWVlZTgwMl8xMQorICogcmVtYWlucyBjb3B5cmlnaHQgYnkgdGhlIG9yaWdpbmFsIGF1dGhvcnMKKyAqCisgKiBQb3J0aW9ucyBvZiB0aGUgbWVyZ2VkIGNvZGUgYXJlIGJhc2VkIG9uIEhvc3QgQVAgKHNvZnR3YXJlIHdpcmVsZXNzCisgKiBMQU4gYWNjZXNzIHBvaW50KSBkcml2ZXIgZm9yIEludGVyc2lsIFByaXNtMi8yLjUvMy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiwgU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5IENvcnAgYW5kIEpvdW5pIE1hbGluZW4KKyAqIDxqQHcxLmZpPgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKgorICogQWRhcHRpb24gdG8gYSBnZW5lcmljIElFRUUgODAyLjExIHN0YWNrIGJ5IEphbWVzIEtldHJlbm9zCisgKiA8amtldHJlbm9AbGludXguaW50ZWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsIEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gU2VlIFJFQURNRSBhbmQgQ09QWUlORyBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBBUEkgVmVyc2lvbiBIaXN0b3J5CisgKiAxLjAueCAtLSBJbml0aWFsIHZlcnNpb24KKyAqIDEuMS54IC0tIEFkZGVkIHJhZGlvdGFwLCBRb1MsIFRJTSwgbGliaXB3X2dlbyBBUElzLAorICogICAgICAgICAgdmFyaW91cyBzdHJ1Y3R1cmUgY2hhbmdlcywgYW5kIGNyeXB0byBBUEkgaW5pdCBtZXRob2QKKyAqLworI2lmbmRlZiBMSUJJUFdfSAorI2RlZmluZSBMSUJJUFdfSAorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CS8qIEVUSF9BTEVOICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIEFSUkFZX1NJWkUgKi8KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorCisjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisKKyNkZWZpbmUgTElCSVBXX1ZFUlNJT04gImdpdC0xLjEuMTMiCisKKyNkZWZpbmUgTElCSVBXX0RBVEFfTEVOCQkyMzA0CisvKiBNYXhpbXVtIHNpemUgZm9yIHRoZSBNQS1VTklUREFUQSBwcmltaXRpdmUsIDgwMi4xMSBzdGFuZGFyZCBzZWN0aW9uCisgICA2LjIuMS4xLjIuCisKKyAgIFRoZSBmaWd1cmUgaW4gc2VjdGlvbiA3LjEuMiBzdWdnZXN0cyBhIGJvZHkgc2l6ZSBvZiB1cCB0byAyMzEyCisgICBieXRlcyBpcyBhbGxvd2VkLCB3aGljaCBpcyBhIGJpdCBjb25mdXNpbmcsIEkgc3VzcGVjdCB0aGlzCisgICByZXByZXNlbnRzIHRoZSAyMzA0IGJ5dGVzIG9mIHJlYWwgZGF0YSwgcGx1cyBhIHBvc3NpYmxlIDggYnl0ZXMgb2YKKyAgIFdFUCBJViBhbmQgSUNWLiAodGhpcyBpbnRlcnByZXRhdGlvbiBzdWdnZXN0ZWQgYnkgUmFtaXJvIEJhcnJlaXJvKSAqLworCisjZGVmaW5lIExJQklQV18xQUREUl9MRU4gMTAKKyNkZWZpbmUgTElCSVBXXzJBRERSX0xFTiAxNgorI2RlZmluZSBMSUJJUFdfM0FERFJfTEVOIDI0CisjZGVmaW5lIExJQklQV180QUREUl9MRU4gMzAKKyNkZWZpbmUgTElCSVBXX0ZDU19MRU4gICAgNAorI2RlZmluZSBMSUJJUFdfSExFTgkJCShMSUJJUFdfNEFERFJfTEVOKQorI2RlZmluZSBMSUJJUFdfRlJBTUVfTEVOCQkoTElCSVBXX0RBVEFfTEVOICsgTElCSVBXX0hMRU4pCisKKyNkZWZpbmUgTUlOX0ZSQUdfVEhSRVNIT0xEICAgICAyNTZVCisjZGVmaW5lCU1BWF9GUkFHX1RIUkVTSE9MRCAgICAgMjM0NlUKKworLyogUU9TIGNvbnRyb2wgKi8KKyNkZWZpbmUgTElCSVBXX1FDVExfVElECQkweDAwMEYKKworLyogZGVidWcgbWFjcm9zICovCisKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCitleHRlcm4gdTMyIGxpYmlwd19kZWJ1Z19sZXZlbDsKKyNkZWZpbmUgTElCSVBXX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKK2RvIHsgaWYgKGxpYmlwd19kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKKyAgcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMTogJWMgJXMgIiBmbXQsIFwKKyAgICAgICAgIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSBib29sIGxpYmlwd19yYXRlbGltaXRfZGVidWcodTMyIGxldmVsKQoreworCXJldHVybiAobGliaXB3X2RlYnVnX2xldmVsICYgbGV2ZWwpICYmIG5ldF9yYXRlbGltaXQoKTsKK30KKyNlbHNlCisjZGVmaW5lIExJQklQV19ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBsaWJpcHdfcmF0ZWxpbWl0X2RlYnVnKHUzMiBsZXZlbCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLworCisvKgorICogVG8gdXNlIHRoZSBkZWJ1ZyBzeXN0ZW06CisgKgorICogSWYgeW91IGFyZSBkZWZpbmluZyBhIG5ldyBkZWJ1ZyBjbGFzc2lmaWNhdGlvbiwgc2ltcGx5IGFkZCBpdCB0byB0aGUgI2RlZmluZQorICogbGlzdCBoZXJlIGluIHRoZSBmb3JtIG9mOgorICoKKyAqICNkZWZpbmUgTElCSVBXX0RMX3h4eHggVkFMVUUKKyAqCisgKiBzaGlmdGluZyB2YWx1ZSB0byB0aGUgbGVmdCBvbmUgYml0IGZyb20gdGhlIHByZXZpb3VzIGVudHJ5LiAgeHh4eCBzaG91bGQgYmUKKyAqIHRoZSBuYW1lIG9mIHRoZSBjbGFzc2lmaWNhdGlvbiAoZm9yIGV4YW1wbGUsIFdFUCkKKyAqCisgKiBZb3UgdGhlbiBuZWVkIHRvIGVpdGhlciBhZGQgYSBMSUJJUFdfeHh4eF9ERUJVRygpIG1hY3JvIGRlZmluaXRpb24gZm9yIHlvdXIKKyAqIGNsYXNzaWZpY2F0aW9uLCBvciB1c2UgTElCSVBXX0RFQlVHKExJQklQV19ETF94eHh4LCAuLi4pIHdoZW5ldmVyIHlvdSB3YW50CisgKiB0byBzZW5kIG91dHB1dCB0byB0aGF0IGNsYXNzaWZpY2F0aW9uLgorICoKKyAqIFRvIGFkZCB5b3VyIGRlYnVnIGxldmVsIHRvIHRoZSBsaXN0IG9mIGxldmVscyBzZWVuIHdoZW4geW91IHBlcmZvcm0KKyAqCisgKiAlIGNhdCAvcHJvYy9uZXQvaWVlZTgwMjExL2RlYnVnX2xldmVsCisgKgorICogeW91IHNpbXBseSBuZWVkIHRvIGFkZCB5b3VyIGVudHJ5IHRvIHRoZSBsaWJpcHdfZGVidWdfbGV2ZWwgYXJyYXkuCisgKgorICogSWYgeW91IGRvIG5vdCBzZWUgZGVidWdfbGV2ZWwgaW4gL3Byb2MvbmV0L2llZWU4MDIxMSB0aGVuIHlvdSBkbyBub3QgaGF2ZQorICogQ09ORklHX0xJQklQV19ERUJVRyBkZWZpbmVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KKyAqCisgKi8KKworI2RlZmluZSBMSUJJUFdfRExfSU5GTyAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgTElCSVBXX0RMX1dYICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIExJQklQV19ETF9TQ0FOICAgICAgICAgICgxPDwyKQorI2RlZmluZSBMSUJJUFdfRExfU1RBVEUgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTElCSVBXX0RMX01HTVQgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIExJQklQV19ETF9GUkFHICAgICAgICAgICgxPDw1KQorI2RlZmluZSBMSUJJUFdfRExfRFJPUCAgICAgICAgICAoMTw8NykKKworI2RlZmluZSBMSUJJUFdfRExfVFggICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgTElCSVBXX0RMX1JYICAgICAgICAgICAgKDE8PDkpCisjZGVmaW5lIExJQklQV19ETF9RT1MgICAgICAgICAgICgxPDwzMSkKKworI2RlZmluZSBMSUJJUFdfRVJST1IoZiwgYS4uLikgcHJpbnRrKEtFUk5fRVJSICJpZWVlODAyMTE6ICIgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX1dBUk5JTkcoZiwgYS4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiaWVlZTgwMjExOiAiIGYsICMjIGEpCisjZGVmaW5lIExJQklQV19ERUJVR19JTkZPKGYsIGEuLi4pICAgTElCSVBXX0RFQlVHKExJQklQV19ETF9JTkZPLCBmLCAjIyBhKQorCisjZGVmaW5lIExJQklQV19ERUJVR19XWChmLCBhLi4uKSAgICAgTElCSVBXX0RFQlVHKExJQklQV19ETF9XWCwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX1NDQU4oZiwgYS4uLikgICBMSUJJUFdfREVCVUcoTElCSVBXX0RMX1NDQU4sIGYsICMjIGEpCisjZGVmaW5lIExJQklQV19ERUJVR19TVEFURShmLCBhLi4uKSAgTElCSVBXX0RFQlVHKExJQklQV19ETF9TVEFURSwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX01HTVQoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfTUdNVCwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX0ZSQUcoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfRlJBRywgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX0RST1AoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgTElCSVBXX0RFQlVHX1RYKGYsIGEuLi4pICBMSUJJUFdfREVCVUcoTElCSVBXX0RMX1RYLCBmLCAjIyBhKQorI2RlZmluZSBMSUJJUFdfREVCVUdfUlgoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfUlgsIGYsICMjIGEpCisjZGVmaW5lIExJQklQV19ERUJVR19RT1MoZiwgYS4uLikgIExJQklQV19ERUJVRyhMSUJJUFdfRExfUU9TLCBmLCAjIyBhKQorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfRVRIRVIgKi8KKworI2lmbmRlZiBXSVJFTEVTU19TUFkKKyNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvKiBlbmFibGUgaXdzcHkgc3VwcG9ydCAqLworI2VuZGlmCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLyogbmV3IGRyaXZlciBBUEkgKi8KKworI2RlZmluZSBFVEhfUF9QUkVBVVRIIDB4ODhDNwkvKiBJRUVFIDgwMi4xMWkgcHJlLWF1dGhlbnRpY2F0aW9uICovCisKKyNpZm5kZWYgRVRIX1BfODAyMTFfUkFXCisjZGVmaW5lIEVUSF9QXzgwMjExX1JBVyAoRVRIX1BfRUNPTkVUICsgMSkKKyNlbmRpZgorCisvKiBJRUVFIDgwMi4xMSBkZWZpbmVzICovCisKKyNkZWZpbmUgUDgwMjExX09VSV9MRU4gMworCitzdHJ1Y3QgbGliaXB3X3NuYXBfaGRyIHsKKworCXU4IGRzYXA7CQkvKiBhbHdheXMgMHhBQSAqLworCXU4IHNzYXA7CQkvKiBhbHdheXMgMHhBQSAqLworCXU4IGN0cmw7CQkvKiBhbHdheXMgMHgwMyAqLworCXU4IG91aVtQODAyMTFfT1VJX0xFTl07CS8qIG9yZ2FuaXphdGlvbmFsIHVuaXZlcnNhbCBpZCAqLworCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBTTkFQX1NJWkUgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfc25hcF9oZHIpCisKKyNkZWZpbmUgV0xBTl9GQ19HRVRfVkVSUyhmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9WRVJTKQorI2RlZmluZSBXTEFOX0ZDX0dFVF9UWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKQorI2RlZmluZSBXTEFOX0ZDX0dFVF9TVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkKKworI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJBRyhzZXEpICgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCisjZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKKworI2RlZmluZSBMSUJJUFdfU1RBVE1BU0tfU0lHTkFMICgxPDwwKQorI2RlZmluZSBMSUJJUFdfU1RBVE1BU0tfUlNTSSAoMTw8MSkKKyNkZWZpbmUgTElCSVBXX1NUQVRNQVNLX05PSVNFICgxPDwyKQorI2RlZmluZSBMSUJJUFdfU1RBVE1BU0tfUkFURSAoMTw8MykKKyNkZWZpbmUgTElCSVBXX1NUQVRNQVNLX1dFTUFTSyAweDcKKworI2RlZmluZSBMSUJJUFdfQ0NLX01PRFVMQVRJT04gICAgKDE8PDApCisjZGVmaW5lIExJQklQV19PRkRNX01PRFVMQVRJT04gICAoMTw8MSkKKworI2RlZmluZSBMSUJJUFdfMjRHSFpfQkFORCAgICAgKDE8PDApCisjZGVmaW5lIExJQklQV181MkdIWl9CQU5EICAgICAoMTw8MSkKKworI2RlZmluZSBMSUJJUFdfQ0NLX1JBVEVfMU1CCQkgICAgICAgIDB4MDIKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzJNQgkJICAgICAgICAweDA0CisjZGVmaW5lIExJQklQV19DQ0tfUkFURV81TUIJCSAgICAgICAgMHgwQgorI2RlZmluZSBMSUJJUFdfQ0NLX1JBVEVfMTFNQgkJICAgICAgICAweDE2CisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfNk1CCQkgICAgICAgIDB4MEMKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV85TUIJCSAgICAgICAgMHgxMgorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzEyTUIJCTB4MTgKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV8xOE1CCQkweDI0CisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfMjRNQgkJMHgzMAorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzM2TUIJCTB4NDgKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV80OE1CCQkweDYwCisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfNTRNQgkJMHg2QworI2RlZmluZSBMSUJJUFdfQkFTSUNfUkFURV9NQVNLCQkweDgwCisKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzFNQl9NQVNLCQkoMTw8MCkKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLCQkoMTw8MSkKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzVNQl9NQVNLCQkoMTw8MikKKyNkZWZpbmUgTElCSVBXX0NDS19SQVRFXzExTUJfTUFTSwkJKDE8PDMpCisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfNk1CX01BU0sJCSgxPDw0KQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzlNQl9NQVNLCQkoMTw8NSkKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV8xMk1CX01BU0sJCSgxPDw2KQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzE4TUJfTUFTSwkJKDE8PDcpCisjZGVmaW5lIExJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLCQkoMTw8OCkKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0sJCSgxPDw5KQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzQ4TUJfTUFTSwkJKDE8PDEwKQorI2RlZmluZSBMSUJJUFdfT0ZETV9SQVRFXzU0TUJfTUFTSwkJKDE8PDExKQorCisjZGVmaW5lIExJQklQV19DQ0tfUkFURVNfTUFTSwkgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgTElCSVBXX0NDS19CQVNJQ19SQVRFU19NQVNLCShMSUJJUFdfQ0NLX1JBVEVfMU1CX01BU0sgfCBcCisJTElCSVBXX0NDS19SQVRFXzJNQl9NQVNLKQorI2RlZmluZSBMSUJJUFdfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSwkoTElCSVBXX0NDS19CQVNJQ19SQVRFU19NQVNLIHwgXAorICAgICAgICBMSUJJUFdfQ0NLX1JBVEVfNU1CX01BU0sgfCBcCisgICAgICAgIExJQklQV19DQ0tfUkFURV8xMU1CX01BU0spCisKKyNkZWZpbmUgTElCSVBXX09GRE1fUkFURVNfTUFTSwkJMHgwMDAwMEZGMAorI2RlZmluZSBMSUJJUFdfT0ZETV9CQVNJQ19SQVRFU19NQVNLCShMSUJJUFdfT0ZETV9SQVRFXzZNQl9NQVNLIHwgXAorCUxJQklQV19PRkRNX1JBVEVfMTJNQl9NQVNLIHwgXAorCUxJQklQV19PRkRNX1JBVEVfMjRNQl9NQVNLKQorI2RlZmluZSBMSUJJUFdfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0sJKExJQklQV19PRkRNX0JBU0lDX1JBVEVTX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV85TUJfTUFTSyAgfCBcCisJTElCSVBXX09GRE1fUkFURV8xOE1CX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV8zNk1CX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV80OE1CX01BU0sgfCBcCisJTElCSVBXX09GRE1fUkFURV81NE1CX01BU0spCisjZGVmaW5lIExJQklQV19ERUZBVUxUX1JBVEVTX01BU0sgKExJQklQV19PRkRNX0RFRkFVTFRfUkFURVNfTUFTSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSVBXX0NDS19ERUZBVUxUX1JBVEVTX01BU0spCisKKyNkZWZpbmUgTElCSVBXX05VTV9PRkRNX1JBVEVTCSAgICA4CisjZGVmaW5lIExJQklQV19OVU1fQ0NLX1JBVEVTCSAgICAgICAgICAgIDQKKyNkZWZpbmUgTElCSVBXX09GRE1fU0hJRlRfTUFTS19BICAgICAgICAgNAorCisvKiBOT1RFOiBUaGlzIGRhdGEgaXMgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzOyBub3QgYWxsIGhhcmR3YXJlIHByb3ZpZGVzIHRoaXMKKyAqICAgICAgIGluZm9ybWF0aW9uIGZvciBmcmFtZXMgcmVjZWl2ZWQuCisgKiAgICAgICBGb3IgbGliaXB3X3J4X21ndCwgeW91IG5lZWQgdG8gc2V0IGF0IGxlYXN0IHRoZSAnbGVuJyBwYXJhbWV0ZXIuCisgKi8KK3N0cnVjdCBsaWJpcHdfcnhfc3RhdHMgeworCXUzMiBtYWNfdGltZTsKKwlzOCByc3NpOworCXU4IHNpZ25hbDsKKwl1OCBub2lzZTsKKwl1MTYgcmF0ZTsJCS8qIGluIDEwMCBrYnBzICovCisJdTggcmVjZWl2ZWRfY2hhbm5lbDsKKwl1OCBjb250cm9sOworCXU4IG1hc2s7CisJdTggZnJlcTsKKwl1MTYgbGVuOworCXU2NCB0c2Y7CisJdTMyIGJlYWNvbl90aW1lOworfTsKKworLyogSUVFRSA4MDIuMTEgcmVxdWlyZXMgdGhhdCBTVEEgc3VwcG9ydHMgY29uY3VycmVudCByZWNlcHRpb24gb2YgYXQgbGVhc3QKKyAqIHRocmVlIGZyYWdtZW50ZWQgZnJhbWVzLiBUaGlzIGRlZmluZSBjYW4gYmUgaW5jcmVhc2VkIHRvIHN1cHBvcnQgbW9yZQorICogY29uY3VycmVudCBmcmFtZXMsIGJ1dCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBlYWNoIGVudHJ5IGNhbiBjb25zdW1lIGFib3V0CisgKiAyIGtCIG9mIFJBTSBhbmQgaW5jcmVhc2luZyBjYWNoZSBzaXplIHdpbGwgc2xvdyBkb3duIGZyYW1lIHJlYXNzZW1ibHkuICovCisjZGVmaW5lIExJQklQV19GUkFHX0NBQ0hFX0xFTiA0CisKK3N0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSB7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9mcmFnX3RpbWU7CisJdW5zaWduZWQgaW50IHNlcTsKKwl1bnNpZ25lZCBpbnQgbGFzdF9mcmFnOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTggc3JjX2FkZHJbRVRIX0FMRU5dOworCXU4IGRzdF9hZGRyW0VUSF9BTEVOXTsKK307CisKK3N0cnVjdCBsaWJpcHdfc3RhdHMgeworCXVuc2lnbmVkIGludCB0eF91bmljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfZnJhZ21lbnRzOworCXVuc2lnbmVkIGludCB0eF91bmljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgdHhfZGVmZXJyZWRfdHJhbnNtaXNzaW9uczsKKwl1bnNpZ25lZCBpbnQgdHhfc2luZ2xlX3JldHJ5X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfbXVsdGlwbGVfcmV0cnlfZnJhbWVzOworCXVuc2lnbmVkIGludCB0eF9yZXRyeV9saW1pdF9leGNlZWRlZDsKKwl1bnNpZ25lZCBpbnQgdHhfZGlzY2FyZHM7CisJdW5zaWduZWQgaW50IHJ4X3VuaWNhc3RfZnJhbWVzOworCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3RfZnJhbWVzOworCXVuc2lnbmVkIGludCByeF9mcmFnbWVudHM7CisJdW5zaWduZWQgaW50IHJ4X3VuaWNhc3Rfb2N0ZXRzOworCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3Rfb2N0ZXRzOworCXVuc2lnbmVkIGludCByeF9mY3NfZXJyb3JzOworCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc19ub19idWZmZXI7CisJdW5zaWduZWQgaW50IHR4X2Rpc2NhcmRzX3dyb25nX3NhOworCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc191bmRlY3J5cHRhYmxlOworCXVuc2lnbmVkIGludCByeF9tZXNzYWdlX2luX21zZ19mcmFnbWVudHM7CisJdW5zaWduZWQgaW50IHJ4X21lc3NhZ2VfaW5fYmFkX21zZ19mcmFnbWVudHM7Cit9OworCitzdHJ1Y3QgbGliaXB3X2RldmljZTsKKworI2RlZmluZSBTRUNfS0VZXzEJCSgxPDwwKQorI2RlZmluZSBTRUNfS0VZXzIJCSgxPDwxKQorI2RlZmluZSBTRUNfS0VZXzMJCSgxPDwyKQorI2RlZmluZSBTRUNfS0VZXzQJCSgxPDwzKQorI2RlZmluZSBTRUNfQUNUSVZFX0tFWQkJKDE8PDQpCisjZGVmaW5lIFNFQ19BVVRIX01PREUJCSgxPDw1KQorI2RlZmluZSBTRUNfVU5JQ0FTVF9HUk9VUAkoMTw8NikKKyNkZWZpbmUgU0VDX0xFVkVMCQkoMTw8NykKKyNkZWZpbmUgU0VDX0VOQUJMRUQJCSgxPDw4KQorI2RlZmluZSBTRUNfRU5DUllQVAkJKDE8PDkpCisKKyNkZWZpbmUgU0VDX0xFVkVMXzAJCTAJLyogTm9uZSAqLworI2RlZmluZSBTRUNfTEVWRUxfMQkJMQkvKiBXRVAgNDAgYW5kIDEwNCBiaXQgKi8KKyNkZWZpbmUgU0VDX0xFVkVMXzIJCTIJLyogTGV2ZWwgMSArIFRLSVAgKi8KKyNkZWZpbmUgU0VDX0xFVkVMXzJfQ0tJUAkzCS8qIExldmVsIDEgKyBDS0lQICovCisjZGVmaW5lIFNFQ19MRVZFTF8zCQk0CS8qIExldmVsIDIgKyBDQ01QICovCisKKyNkZWZpbmUgU0VDX0FMR19OT05FCQkwCisjZGVmaW5lIFNFQ19BTEdfV0VQCQkxCisjZGVmaW5lIFNFQ19BTEdfVEtJUAkJMgorI2RlZmluZSBTRUNfQUxHX0NDTVAJCTMKKworI2RlZmluZSBXRVBfS0VZUwkJNAorI2RlZmluZSBXRVBfS0VZX0xFTgkJMTMKKyNkZWZpbmUgU0NNX0tFWV9MRU4JCTMyCisjZGVmaW5lIFNDTV9URU1QT1JBTF9LRVlfTEVOR1RICTE2CisKK3N0cnVjdCBsaWJpcHdfc2VjdXJpdHkgeworCXUxNiBhY3RpdmVfa2V5OjIsIGVuYWJsZWQ6MSwgdW5pY2FzdF91c2VzX2dyb3VwOjEsIGVuY3J5cHQ6MTsKKwl1OCBhdXRoX21vZGU7CisJdTggZW5jb2RlX2FsZ1tXRVBfS0VZU107CisJdTgga2V5X3NpemVzW1dFUF9LRVlTXTsKKwl1OCBrZXlzW1dFUF9LRVlTXVtTQ01fS0VZX0xFTl07CisJdTggbGV2ZWw7CisJdTE2IGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisKKyA4MDIuMTEgZGF0YSBmcmFtZSBmcm9tIEFQCisKKyAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorQnl0ZXMgfCAgMiAgIHwgIDIgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgICAgNiAgICB8ICAyICAgfCAwLi4yMzEyIHwgICA0ICB8CisgICAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwKK0Rlc2MuIHwgY3RybCB8IGR1cmEgfCAgREEvUkEgIHwgICBUQSAgICB8ICAgIFNBICAgfCBTZXF1IHwgIGZyYW1lICB8ICBmY3MgfAorICAgICAgfCAgICAgIHwgdGlvbiB8IChCU1NJRCkgfCAgICAgICAgIHwgICAgICAgICB8IGVuY2UgfCAgZGF0YSAgIHwgICAgICB8CisgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKworVG90YWw6IDI4LTIzNDAgYnl0ZXMKKworKi8KKworI2RlZmluZSBCRUFDT05fUFJPQkVfU1NJRF9JRF9QT1NJVElPTiAxMgorCitzdHJ1Y3QgbGliaXB3X2hkcl8xYWRkciB7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19oZHJfMmFkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciB7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IGFkZHIyW0VUSF9BTEVOXTsKKwl1OCBhZGRyM1tFVEhfQUxFTl07CisJX19sZTE2IHNlcV9jdGw7CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciB7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IGFkZHIyW0VUSF9BTEVOXTsKKwl1OCBhZGRyM1tFVEhfQUxFTl07CisJX19sZTE2IHNlcV9jdGw7CisJdTggYWRkcjRbRVRIX0FMRU5dOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19oZHJfM2FkZHJxb3MgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IHBheWxvYWRbMF07CisJX19sZTE2IHFvc19jdGw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQgeworCXU4IGlkOworCXU4IGxlbjsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGRhdGEgdHlwZXMgdGhhdCBjYW4gbWFrZSB1cCBtYW5hZ2VtZW50IHBhY2tldHMKKyAqCisJdTE2IGF1dGhfYWxnb3JpdGhtOworCXUxNiBhdXRoX3NlcXVlbmNlOworCXUxNiBiZWFjb25faW50ZXJ2YWw7CisJdTE2IGNhcGFiaWxpdHk7CisJdTggY3VycmVudF9hcFtFVEhfQUxFTl07CisJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwlzdHJ1Y3QgeworCQl1MTYgYXNzb2NpYXRpb25faWQ6MTQsIHJlc2VydmVkOjI7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisJdTMyIHRpbWVfc3RhbXBbMl07CisJdTE2IHJlYXNvbjsKKwl1MTYgc3RhdHVzOworKi8KKworc3RydWN0IGxpYmlwd19hdXRoIHsKKwlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGFsZ29yaXRobTsKKwlfX2xlMTYgdHJhbnNhY3Rpb247CisJX19sZTE2IHN0YXR1czsKKwkvKiBjaGFsbGVuZ2UgKi8KKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19jaGFubmVsX3N3aXRjaCB7CisJdTggaWQ7CisJdTggbGVuOworCXU4IG1vZGU7CisJdTggY2hhbm5lbDsKKwl1OCBjb3VudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2FjdGlvbiB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCXU4IGNhdGVnb3J5OworCXU4IGFjdGlvbjsKKwl1bmlvbiB7CisJCXN0cnVjdCBsaWJpcHdfYWN0aW9uX2V4Y2hhbmdlIHsKKwkJCXU4IHRva2VuOworCQkJc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworCQl9IGV4Y2hhbmdlOworCQlzdHJ1Y3QgbGliaXB3X2NoYW5uZWxfc3dpdGNoIGNoYW5uZWxfc3dpdGNoOworCisJfSBmb3JtYXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19kaXNhc3NvYyB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiByZWFzb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQWxpYXMgZGVhdXRoIGZvciBkaXNhc3NvYyAqLworI2RlZmluZSBsaWJpcHdfZGVhdXRoIGxpYmlwd19kaXNhc3NvYworCitzdHJ1Y3QgbGliaXB3X3Byb2JlX3JlcXVlc3QgeworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyIGhlYWRlcjsKKwkvKiBTU0lELCBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19wcm9iZV9yZXNwb25zZSB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUzMiB0aW1lX3N0YW1wWzJdOworCV9fbGUxNiBiZWFjb25faW50ZXJ2YWw7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBGSCBwYXJhbXMsIERTIHBhcmFtcywKKwkgKiBDRiBwYXJhbXMsIElCU1MgcGFyYW1zLCBUSU0gKGlmIGJlYWNvbiksIFJTTiAqLworCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBBbGlhcyBiZWFjb24gZm9yIHByb2JlX3Jlc3BvbnNlICovCisjZGVmaW5lIGxpYmlwd19iZWFjb24gbGliaXB3X3Byb2JlX3Jlc3BvbnNlCisKK3N0cnVjdCBsaWJpcHdfYXNzb2NfcmVxdWVzdCB7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBjYXBhYmlsaXR5OworCV9fbGUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzLCBSU04gKi8KKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19yZWFzc29jX3JlcXVlc3QgeworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgY2FwYWJpbGl0eTsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOworCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2Fzc29jX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJX19sZTE2IHN0YXR1czsKKwlfX2xlMTYgYWlkOworCS8qIHN1cHBvcnRlZCByYXRlcyAqLworCXN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X3R4YiB7CisJdTggbnJfZnJhZ3M7CisJdTggZW5jcnlwdGVkOworCXU4IHJ0c19pbmNsdWRlZDsKKwl1OCByZXNlcnZlZDsKKwl1MTYgZnJhZ19zaXplOworCXUxNiBwYXlsb2FkX3NpemU7CisJc3RydWN0IHNrX2J1ZmYgKmZyYWdtZW50c1swXTsKK307CisKKy8qIFNXRUVQIFRBQkxFIEVOVFJJRVMgTlVNQkVSICovCisjZGVmaW5lIE1BWF9TV0VFUF9UQUJfRU5UUklFUwkJICA0MgorI2RlZmluZSBNQVhfU1dFRVBfVEFCX0VOVFJJRVNfUEVSX1BBQ0tFVCAgNworLyogTUFYX1JBVEVTX0xFTkdUSCBuZWVkcyB0byBiZSAxMi4gIFRoZSBzcGVjIHNheXMgOCwgYW5kIG1hbnkgQVBzCisgKiBvbmx5IHVzZSA4LCBhbmQgdGhlbiB1c2UgZXh0ZW5kZWQgcmF0ZXMgZm9yIHRoZSByZW1haW5pbmcgc3VwcG9ydGVkCisgKiByYXRlcy4gIE90aGVyIEFQcywgaG93ZXZlciwgc3RpY2sgYWxsIG9mIHRoZWlyIHN1cHBvcnRlZCByYXRlcyBvbiB0aGUKKyAqIG1haW4gcmF0ZXMgaW5mb3JtYXRpb24gZWxlbWVudC4uLiAqLworI2RlZmluZSBNQVhfUkFURVNfTEVOR1RIICAgICAgICAgICAgICAgICAgKCh1OCkxMikKKyNkZWZpbmUgTUFYX1JBVEVTX0VYX0xFTkdUSCAgICAgICAgICAgICAgICgodTgpMTYpCisjZGVmaW5lIE1BWF9ORVRXT1JLX0NPVU5UICAgICAgICAgICAgICAgICAgMTI4CisKKyNkZWZpbmUgQ1JDX0xFTkdUSCAgICAgICAgICAgICAgICAgNFUKKworI2RlZmluZSBNQVhfV1BBX0lFX0xFTiA2NAorCisjZGVmaW5lIE5FVFdPUktfSEFTX09GRE0gICAgICAgKDE8PDEpCisjZGVmaW5lIE5FVFdPUktfSEFTX0NDSyAgICAgICAgKDE8PDIpCisKKy8qIFFvUyBzdHJ1Y3R1cmUgKi8KKyNkZWZpbmUgTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgICAgICAoMTw8MykKKyNkZWZpbmUgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OICAgICAoMTw8NCkKKyNkZWZpbmUgTkVUV09SS19IQVNfUU9TX01BU0sgICAgICAgICAgICAoTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlMgfCBcCisJCQkJCSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT04pCisKKy8qIDgwMi4xMWggKi8KKyNkZWZpbmUgTkVUV09SS19IQVNfUE9XRVJfQ09OU1RSQUlOVCAgICAoMTw8NSkKKyNkZWZpbmUgTkVUV09SS19IQVNfQ1NBICAgICAgICAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgTkVUV09SS19IQVNfUVVJRVQgICAgICAgICAgICAgICAoMTw8NykKKyNkZWZpbmUgTkVUV09SS19IQVNfSUJTU19ERlMgICAgICAgICAgICAoMTw8OCkKKyNkZWZpbmUgTkVUV09SS19IQVNfVFBDX1JFUE9SVCAgICAgICAgICAoMTw8OSkKKworI2RlZmluZSBORVRXT1JLX0hBU19FUlBfVkFMVUUgICAgICAgICAgICgxPDwxMCkKKworI2RlZmluZSBRT1NfUVVFVUVfTlVNICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUU9TX09VSV9MRU4gICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFFPU19PVUlfVFlQRSAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBRT1NfRUxFTUVOVF9JRCAgICAgICAgICAgICAgICAgIDIyMQorI2RlZmluZSBRT1NfT1VJX0lORk9fU1VCX1RZUEUgICAgICAgICAgIDAKKyNkZWZpbmUgUU9TX09VSV9QQVJBTV9TVUJfVFlQRSAgICAgICAgICAxCisjZGVmaW5lIFFPU19WRVJTSU9OXzEgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBRT1NfQUlGU05fTUlOX1ZBTFVFICAgICAgICAgICAgIDIKKworc3RydWN0IGxpYmlwd19xb3NfaW5mb3JtYXRpb25fZWxlbWVudCB7CisJdTggZWxlbWVudElEOworCXU4IGxlbmd0aDsKKwl1OCBxdWlbUU9TX09VSV9MRU5dOworCXU4IHF1aV90eXBlOworCXU4IHF1aV9zdWJ0eXBlOworCXU4IHZlcnNpb247CisJdTggYWNfaW5mbzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X3Fvc19hY19wYXJhbWV0ZXIgeworCXU4IGFjaV9haWZzbjsKKwl1OCBlY3dfbWluX21heDsKKwlfX2xlMTYgdHhfb3BfbGltaXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVyX2luZm8geworCXN0cnVjdCBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgaW5mb19lbGVtZW50OworCXU4IHJlc2VydmVkOworCXN0cnVjdCBsaWJpcHdfcW9zX2FjX3BhcmFtZXRlciBhY19wYXJhbXNfcmVjb3JkW1FPU19RVUVVRV9OVU1dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgeworCV9fbGUxNiBjd19taW5bUU9TX1FVRVVFX05VTV07CisJX19sZTE2IGN3X21heFtRT1NfUVVFVUVfTlVNXTsKKwl1OCBhaWZzW1FPU19RVUVVRV9OVU1dOworCXU4IGZsYWdbUU9TX1FVRVVFX05VTV07CisJX19sZTE2IHR4X29wX2xpbWl0W1FPU19RVUVVRV9OVU1dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsaWJpcHdfcW9zX2RhdGEgeworCXN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKwlpbnQgYWN0aXZlOworCWludCBzdXBwb3J0ZWQ7CisJdTggcGFyYW1fY291bnQ7CisJdTggb2xkX3BhcmFtX2NvdW50OworfTsKKworc3RydWN0IGxpYmlwd190aW1fcGFyYW1ldGVycyB7CisJdTggdGltX2NvdW50OworCXU4IHRpbV9wZXJpb2Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2VudW0gewkJCQkvKiBsaWJpcHdfYmFzaWNfcmVwb3J0Lm1hcCAqLworCUxJQklQV19CQVNJQ19NQVBfQlNTID0gKDEgPDwgMCksCisJTElCSVBXX0JBU0lDX01BUF9PRkRNID0gKDEgPDwgMSksCisJTElCSVBXX0JBU0lDX01BUF9VTklERU5USUZJRUQgPSAoMSA8PCAyKSwKKwlMSUJJUFdfQkFTSUNfTUFQX1JBREFSID0gKDEgPDwgMyksCisJTElCSVBXX0JBU0lDX01BUF9VTk1FQVNVUkVEID0gKDEgPDwgNCksCisJLyogQml0cyA1LTcgYXJlIHJlc2VydmVkICovCisKK307CitzdHJ1Y3QgbGliaXB3X2Jhc2ljX3JlcG9ydCB7CisJdTggY2hhbm5lbDsKKwlfX2xlNjQgc3RhcnRfdGltZTsKKwlfX2xlMTYgZHVyYXRpb247CisJdTggbWFwOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gewkJCQkvKiBsaWJpcHdfbWVhc3VyZW1lbnRfcmVxdWVzdC5tb2RlICovCisJLyogQml0IDAgaXMgcmVzZXJ2ZWQgKi8KKwlMSUJJUFdfTUVBU1VSRU1FTlRfRU5BQkxFID0gKDEgPDwgMSksCisJTElCSVBXX01FQVNVUkVNRU5UX1JFUVVFU1QgPSAoMSA8PCAyKSwKKwlMSUJJUFdfTUVBU1VSRU1FTlRfUkVQT1JUID0gKDEgPDwgMyksCisJLyogQml0cyA0LTcgYXJlIHJlc2VydmVkICovCit9OworCitlbnVtIHsKKwlMSUJJUFdfUkVQT1JUX0JBU0lDID0gMCwJLyogcmVxdWlyZWQgKi8KKwlMSUJJUFdfUkVQT1JUX0NDQSA9IDEsCS8qIG9wdGlvbmFsICovCisJTElCSVBXX1JFUE9SVF9SUEkgPSAyLAkvKiBvcHRpb25hbCAqLworCS8qIDMtMjU1IHJlc2VydmVkICovCit9OworCitzdHJ1Y3QgbGliaXB3X21lYXN1cmVtZW50X3BhcmFtcyB7CisJdTggY2hhbm5lbDsKKwlfX2xlNjQgc3RhcnRfdGltZTsKKwlfX2xlMTYgZHVyYXRpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19tZWFzdXJlbWVudF9yZXF1ZXN0IHsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpZTsKKwl1OCB0b2tlbjsKKwl1OCBtb2RlOworCXU4IHR5cGU7CisJc3RydWN0IGxpYmlwd19tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBsaWJpcHdfbWVhc3VyZW1lbnRfcmVwb3J0IHsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpZTsKKwl1OCB0b2tlbjsKKwl1OCBtb2RlOworCXU4IHR5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgbGliaXB3X2Jhc2ljX3JlcG9ydCBiYXNpY1swXTsKKwl9IHU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd190cGNfcmVwb3J0IHsKKwl1OCB0cmFuc21pdF9wb3dlcjsKKwl1OCBsaW5rX21hcmdpbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2NoYW5uZWxfbWFwIHsKKwl1OCBjaGFubmVsOworCXU4IG1hcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X2lic3NfZGZzIHsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCBpZTsKKwl1OCBvd25lcltFVEhfQUxFTl07CisJdTggcmVjb3ZlcnlfaW50ZXJ2YWw7CisJc3RydWN0IGxpYmlwd19jaGFubmVsX21hcCBjaGFubmVsX21hcFswXTsKK307CisKK3N0cnVjdCBsaWJpcHdfY3NhIHsKKwl1OCBtb2RlOworCXU4IGNoYW5uZWw7CisJdTggY291bnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGxpYmlwd19xdWlldCB7CisJdTggY291bnQ7CisJdTggcGVyaW9kOworCXU4IGR1cmF0aW9uOworCXU4IG9mZnNldDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgbGliaXB3X25ldHdvcmsgeworCS8qIFRoZXNlIGVudHJpZXMgYXJlIHVzZWQgdG8gaWRlbnRpZnkgYSB1bmlxdWUgbmV0d29yayAqLworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBjaGFubmVsOworCS8qIEVuc3VyZSBudWxsLXRlcm1pbmF0ZWQgZm9yIGFueSBkZWJ1ZyBtc2dzICovCisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCXU4IHNzaWRfbGVuOworCisJc3RydWN0IGxpYmlwd19xb3NfZGF0YSBxb3NfZGF0YTsKKworCS8qIFRoZXNlIGFyZSBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzIHN0YXRzOworCXUxNiBjYXBhYmlsaXR5OworCXU4IHJhdGVzW01BWF9SQVRFU19MRU5HVEhdOworCXU4IHJhdGVzX2xlbjsKKwl1OCByYXRlc19leFtNQVhfUkFURVNfRVhfTEVOR1RIXTsKKwl1OCByYXRlc19leF9sZW47CisJdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQ7CisJdTggbW9kZTsKKwl1MzIgZmxhZ3M7CisJdTMyIGxhc3RfYXNzb2NpYXRlOworCXUzMiB0aW1lX3N0YW1wWzJdOworCXUxNiBiZWFjb25faW50ZXJ2YWw7CisJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1MTYgYXRpbV93aW5kb3c7CisJdTggZXJwX3ZhbHVlOworCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07CisJc2l6ZV90IHdwYV9pZV9sZW47CisJdTggcnNuX2llW01BWF9XUEFfSUVfTEVOXTsKKwlzaXplX3QgcnNuX2llX2xlbjsKKwlzdHJ1Y3QgbGliaXB3X3RpbV9wYXJhbWV0ZXJzIHRpbTsKKworCS8qIDgwMi4xMWggaW5mbyAqLworCisJLyogUG93ZXIgQ29uc3RyYWludCAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLworCXU4IHBvd2VyX2NvbnN0cmFpbnQ7CisKKwkvKiBUUEMgUmVwb3J0IC0gbWFuZGF0b3J5IGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCisJc3RydWN0IGxpYmlwd190cGNfcmVwb3J0IHRwY19yZXBvcnQ7CisKKwkvKiBJQlNTIERGUyAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCBhbmQgSUJTUworCSAqIE5PVEU6IFRoaXMgaXMgdmFyaWFibGUgbGVuZ3RoIGFuZCBzbyBtdXN0IGJlIGFsbG9jYXRlZCBkeW5hbWljYWxseSAqLworCXN0cnVjdCBsaWJpcHdfaWJzc19kZnMgKmlic3NfZGZzOworCisJLyogQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IC0gb3B0aW9uYWwgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KKwlzdHJ1Y3QgbGliaXB3X2NzYSBjc2E7CisKKwkvKiBRdWlldCAtIG9wdGlvbmFsIGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCisJc3RydWN0IGxpYmlwd19xdWlldCBxdWlldDsKKworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK2VudW0gbGliaXB3X3N0YXRlIHsKKwlMSUJJUFdfVU5JTklUSUFMSVpFRCA9IDAsCisJTElCSVBXX0lOSVRJQUxJWkVELAorCUxJQklQV19BU1NPQ0lBVElORywKKwlMSUJJUFdfQVNTT0NJQVRFRCwKKwlMSUJJUFdfQVVUSEVOVElDQVRJTkcsCisJTElCSVBXX0FVVEhFTlRJQ0FURUQsCisJTElCSVBXX1NIVVRET1dOCit9OworCisjZGVmaW5lIERFRkFVTFRfTUFYX1NDQU5fQUdFICgxNSAqIEhaKQorI2RlZmluZSBERUZBVUxUX0ZUUyAyMzQ2CisKKyNkZWZpbmUgQ0ZHX0xJQklQV19SRVNFUlZFX0ZDUyAoMTw8MCkKKyNkZWZpbmUgQ0ZHX0xJQklQV19DT01QVVRFX0ZDUyAoMTw8MSkKKyNkZWZpbmUgQ0ZHX0xJQklQV19SVFMgKDE8PDIpCisKKyNkZWZpbmUgTElCSVBXXzI0R0haX01JTl9DSEFOTkVMIDEKKyNkZWZpbmUgTElCSVBXXzI0R0haX01BWF9DSEFOTkVMIDE0CisjZGVmaW5lIExJQklQV18yNEdIWl9DSEFOTkVMUyAoTElCSVBXXzI0R0haX01BWF9DSEFOTkVMIC0gXAorCQkJCSAgTElCSVBXXzI0R0haX01JTl9DSEFOTkVMICsgMSkKKworI2RlZmluZSBMSUJJUFdfNTJHSFpfTUlOX0NIQU5ORUwgMzQKKyNkZWZpbmUgTElCSVBXXzUyR0haX01BWF9DSEFOTkVMIDE2NQorI2RlZmluZSBMSUJJUFdfNTJHSFpfQ0hBTk5FTFMgKExJQklQV181MkdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIExJQklQV181MkdIWl9NSU5fQ0hBTk5FTCArIDEpCisKK2VudW0geworCUxJQklQV19DSF9QQVNTSVZFX09OTFkgPSAoMSA8PCAwKSwKKwlMSUJJUFdfQ0hfODAyMTFIX1JVTEVTID0gKDEgPDwgMSksCisJTElCSVBXX0NIX0JfT05MWSA9ICgxIDw8IDIpLAorCUxJQklQV19DSF9OT19JQlNTID0gKDEgPDwgMyksCisJTElCSVBXX0NIX1VOSUZPUk1fU1BSRUFESU5HID0gKDEgPDwgNCksCisJTElCSVBXX0NIX1JBREFSX0RFVEVDVCA9ICgxIDw8IDUpLAorCUxJQklQV19DSF9JTlZBTElEID0gKDEgPDwgNiksCit9OworCitzdHJ1Y3QgbGliaXB3X2NoYW5uZWwgeworCXUzMiBmcmVxOwkvKiBpbiBNSHogKi8KKwl1OCBjaGFubmVsOworCXU4IGZsYWdzOworCXU4IG1heF9wb3dlcjsJLyogaW4gZEJtICovCit9OworCitzdHJ1Y3QgbGliaXB3X2dlbyB7CisJdTggbmFtZVs0XTsKKwl1OCBiZ19jaGFubmVsczsKKwl1OCBhX2NoYW5uZWxzOworCXN0cnVjdCBsaWJpcHdfY2hhbm5lbCBiZ1tMSUJJUFdfMjRHSFpfQ0hBTk5FTFNdOworCXN0cnVjdCBsaWJpcHdfY2hhbm5lbCBhW0xJQklQV181MkdIWl9DSEFOTkVMU107Cit9OworCitzdHJ1Y3QgbGliaXB3X2RldmljZSB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2IHdkZXY7CisJc3RydWN0IGxpYmlwd19zZWN1cml0eSBzZWM7CisKKwkvKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmVzICovCisJc3RydWN0IGxpYmlwd19zdGF0cyBpZWVlX3N0YXRzOworCisJc3RydWN0IGxpYmlwd19nZW8gZ2VvOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmdfYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGFfYmFuZDsKKworCS8qIFByb2JlIC8gQmVhY29uIG1hbmFnZW1lbnQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG5ldHdvcmtfZnJlZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19saXN0OworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29ya3M7CisJaW50IHNjYW5zOworCWludCBzY2FuX2FnZTsKKworCWludCBpd19tb2RlOwkJLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KKwlzdHJ1Y3QgaXdfc3B5X2RhdGEgc3B5X2RhdGE7CS8qIGl3c3B5IHN1cHBvcnQgKi8KKworCXNwaW5sb2NrX3QgbG9jazsKKworCWludCB0eF9oZWFkcm9vbTsJLyogU2V0IHRvIHNpemUgb2YgYW55IGFkZGl0aW9uYWwgcm9vbSBuZWVkZWQgYXQgZnJvbnQKKwkJCQkgKiBvZiBhbGxvY2F0ZWQgVHggU0tCcyAqLworCXUzMiBjb25maWc7CisKKwkvKiBXRVAgYW5kIG90aGVyIGVuY3J5cHRpb24gcmVsYXRlZCBzZXR0aW5ncyBhdCB0aGUgZGV2aWNlIGxldmVsICovCisJaW50IG9wZW5fd2VwOwkJLyogU2V0IHRvIDEgdG8gYWxsb3cgdW5lbmNyeXB0ZWQgZnJhbWVzICovCisKKwlpbnQgcmVzZXRfb25fa2V5Y2hhbmdlOwkvKiBTZXQgdG8gMSBpZiB0aGUgSFcgbmVlZHMgdG8gYmUgcmVzZXQgb24KKwkJCQkgKiBXRVAga2V5IGNoYW5nZXMgKi8KKworCS8qIElmIHRoZSBob3N0IHBlcmZvcm1zIHtlbixkZX1jcnlwdGlvbiwgdGhlbiBzZXQgdG8gMSAqLworCWludCBob3N0X2VuY3J5cHQ7CisJaW50IGhvc3RfZW5jcnlwdF9tc2R1OworCWludCBob3N0X2RlY3J5cHQ7CisJLyogaG9zdCBwZXJmb3JtcyBtdWx0aWNhc3QgZGVjcnlwdGlvbiAqLworCWludCBob3N0X21jX2RlY3J5cHQ7CisKKwkvKiBob3N0IHNob3VsZCBzdHJpcCBJViBhbmQgSUNWIGZyb20gcHJvdGVjdGVkIGZyYW1lcyAqLworCS8qIG1lYW5pbmdmdWwgb25seSB3aGVuIGhhcmR3YXJlIGRlY3J5cHRpb24gaXMgYmVpbmcgdXNlZCAqLworCWludCBob3N0X3N0cmlwX2l2X2ljdjsKKworCWludCBob3N0X29wZW5fZnJhZzsKKwlpbnQgaG9zdF9idWlsZF9pdjsKKwlpbnQgaWVlZTgwMl8xeDsJCS8qIGlzIElFRUUgODAyLjFYIHVzZWQgKi8KKworCS8qIFdQQSBkYXRhICovCisJaW50IHdwYV9lbmFibGVkOworCWludCBkcm9wX3VuZW5jcnlwdGVkOworCWludCBwcml2YWN5X2ludm9rZWQ7CisJc2l6ZV90IHdwYV9pZV9sZW47CisJdTggKndwYV9pZTsKKworCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9pbmZvIGNyeXB0X2luZm87CisKKwlpbnQgYmNyeF9zdGFfa2V5OwkvKiB1c2UgaW5kaXZpZHVhbCBrZXlzIHRvIG92ZXJyaWRlIGRlZmF1bHQga2V5cyBldmVuCisJCQkJICogd2l0aCBSWCBvZiBicm9hZC9tdWx0aWNhc3QgZnJhbWVzICovCisKKwkvKiBGcmFnbWVudGF0aW9uIHN0cnVjdHVyZXMgKi8KKwlzdHJ1Y3QgbGliaXB3X2ZyYWdfZW50cnkgZnJhZ19jYWNoZVtMSUJJUFdfRlJBR19DQUNIRV9MRU5dOworCXVuc2lnbmVkIGludCBmcmFnX25leHRfaWR4OworCXUxNiBmdHM7CQkvKiBGcmFnbWVudGF0aW9uIFRocmVzaG9sZCAqLworCXUxNiBydHM7CQkvKiBSVFMgdGhyZXNob2xkICovCisKKwkvKiBBc3NvY2lhdGlvbiBpbmZvICovCisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJZW51bSBsaWJpcHdfc3RhdGUgc3RhdGU7CisKKwlpbnQgbW9kZTsJCS8qIEEsIEIsIEcgKi8KKwlpbnQgbW9kdWxhdGlvbjsJCS8qIENDSywgT0ZETSAqLworCWludCBmcmVxX2JhbmQ7CQkvKiAyLjRHaHosIDUuMkdoeiwgTWl4ZWQgKi8KKwlpbnQgYWJnX3RydWU7CQkvKiBBQkcgZmxhZyAgICAgICAgICAgICAgKi8KKworCWludCBwZXJmZWN0X3Jzc2k7CisJaW50IHdvcnN0X3Jzc2k7CisKKwl1MTYgcHJldl9zZXFfY3RsOwkvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLworCisJLyogQ2FsbGJhY2sgZnVuY3Rpb25zICovCisJdm9pZCAoKnNldF9zZWN1cml0eSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJICAgICAgc3RydWN0IGxpYmlwd19zZWN1cml0eSAqIHNlYyk7CisJbmV0ZGV2X3R4X3QgKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3QgbGliaXB3X3R4YiAqIHR4YiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBwcmkpOworCWludCAoKnJlc2V0X3BvcnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CisJaW50ICgqaXNfcXVldWVfZnVsbCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgcHJpKTsKKworCWludCAoKmhhbmRsZV9tYW5hZ2VtZW50KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKiBuZXR3b3JrLCB1MTYgdHlwZSk7CisJaW50ICgqaXNfcW9zX2FjdGl2ZSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCisJLyogVHlwaWNhbCBTVEEgbWV0aG9kcyAqLworCWludCAoKmhhbmRsZV9hdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgc3RydWN0IGxpYmlwd19hdXRoICogYXV0aCk7CisJaW50ICgqaGFuZGxlX2RlYXV0aCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJICAgICAgc3RydWN0IGxpYmlwd19kZWF1dGggKiBhdXRoKTsKKwlpbnQgKCpoYW5kbGVfYWN0aW9uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgbGliaXB3X2FjdGlvbiAqIGFjdGlvbiwKKwkJCSAgICAgIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKiBzdGF0cyk7CisJaW50ICgqaGFuZGxlX2Rpc2Fzc29jKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJc3RydWN0IGxpYmlwd19kaXNhc3NvYyAqIGFzc29jKTsKKwlpbnQgKCpoYW5kbGVfYmVhY29uKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgbGliaXB3X2JlYWNvbiAqIGJlYWNvbiwKKwkJCSAgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqIG5ldHdvcmspOworCWludCAoKmhhbmRsZV9wcm9iZV9yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfcHJvYmVfcmVzcG9uc2UgKiByZXNwLAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqIG5ldHdvcmspOworCWludCAoKmhhbmRsZV9wcm9iZV9yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICBzdHJ1Y3QgbGliaXB3X3Byb2JlX3JlcXVlc3QgKiByZXEsCisJCQkJICAgICBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICogc3RhdHMpOworCWludCAoKmhhbmRsZV9hc3NvY19yZXNwb25zZSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAorCQkJCSAgICAgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqIG5ldHdvcmspOworCisJLyogVHlwaWNhbCBBUCBtZXRob2RzICovCisJaW50ICgqaGFuZGxlX2Fzc29jX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CisJaW50ICgqaGFuZGxlX3JlYXNzb2NfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgbGliaXB3X3JlYXNzb2NfcmVxdWVzdCAqIHJlcSk7CisKKwkvKiBUaGlzIG11c3QgYmUgdGhlIGxhc3QgaXRlbSBzbyB0aGF0IGl0IHBvaW50cyB0byB0aGUgZGF0YQorCSAqIGFsbG9jYXRlZCBiZXlvbmQgdGhpcyBzdHJ1Y3R1cmUgYnkgYWxsb2NfaWVlZTgwMjExICovCisJdTggcHJpdlswXTsKK307CisKKyNkZWZpbmUgSUVFRV9BICAgICAgICAgICAgKDE8PDApCisjZGVmaW5lIElFRUVfQiAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBJRUVFX0cgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgSUVFRV9NT0RFX01BU0sgICAgKElFRUVfQXxJRUVFX0J8SUVFRV9HKQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmxpYmlwd19wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuICgoc3RydWN0IGxpYmlwd19kZXZpY2UgKiluZXRkZXZfcHJpdihkZXYpKS0+cHJpdjsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGliaXB3X2lzX3ZhbGlkX21vZGUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJCSAgaW50IG1vZGUpCit7CisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSBmb3IgYm90aCBhY2Nlc3MgcG9pbnRzIGFuZCBvdXIgZGV2aWNlIHRvIHN1cHBvcnQKKwkgKiBjb21iaW5hdGlvbnMgb2YgbW9kZXMsIHNvIGFzIGxvbmcgYXMgdGhlcmUgaXMgb25lIHZhbGlkIGNvbWJpbmF0aW9uCisJICogb2YgYXAvZGV2aWNlIHN1cHBvcnRlZCBtb2RlcywgdGhlbiByZXR1cm4gc3VjY2VzcworCSAqCisJICovCisJaWYgKChtb2RlICYgSUVFRV9BKSAmJgorCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIExJQklQV19PRkRNX01PRFVMQVRJT04pICYmCisJICAgIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfNTJHSFpfQkFORCkpCisJCXJldHVybiAxOworCisJaWYgKChtb2RlICYgSUVFRV9HKSAmJgorCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIExJQklQV19PRkRNX01PRFVMQVRJT04pICYmCisJICAgIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfMjRHSFpfQkFORCkpCisJCXJldHVybiAxOworCisJaWYgKChtb2RlICYgSUVFRV9CKSAmJgorCSAgICAoaWVlZS0+bW9kdWxhdGlvbiAmIExJQklQV19DQ0tfTU9EVUxBVElPTikgJiYKKwkgICAgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV18yNEdIWl9CQU5EKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGliaXB3X2dldF9oZHJsZW4odTE2IGZjKQoreworCWludCBoZHJsZW4gPSBMSUJJUFdfM0FERFJfTEVOOworCXUxNiBzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjKTsKKworCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgorCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKKwkJCWhkcmxlbiA9IExJQklQV180QUREUl9MRU47CisJCWlmIChzdHlwZSAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkKKwkJCWhkcmxlbiArPSAyOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6CisJCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgorCQkJaGRybGVuID0gTElCSVBXXzFBRERSX0xFTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGRybGVuID0gTElCSVBXXzJBRERSX0xFTjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiBoZHJsZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggKmxpYmlwd19nZXRfcGF5bG9hZChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXN3aXRjaCAobGliaXB3X2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwljYXNlIExJQklQV18xQUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzFhZGRyICopaGRyKS0+cGF5bG9hZDsKKwljYXNlIExJQklQV18yQUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzJhZGRyICopaGRyKS0+cGF5bG9hZDsKKwljYXNlIExJQklQV18zQUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyICopaGRyKS0+cGF5bG9hZDsKKwljYXNlIExJQklQV180QUREUl9MRU46CisJCXJldHVybiAoKHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICopaGRyKS0+cGF5bG9hZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpYmlwd19pc19vZmRtX3JhdGUodTggcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUgJiB+TElCSVBXX0JBU0lDX1JBVEVfTUFTSykgeworCWNhc2UgTElCSVBXX09GRE1fUkFURV82TUI6CisJY2FzZSBMSUJJUFdfT0ZETV9SQVRFXzlNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMTJNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMThNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMjRNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfMzZNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfNDhNQjoKKwljYXNlIExJQklQV19PRkRNX1JBVEVfNTRNQjoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaWJpcHdfaXNfY2NrX3JhdGUodTggcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUgJiB+TElCSVBXX0JBU0lDX1JBVEVfTUFTSykgeworCWNhc2UgTElCSVBXX0NDS19SQVRFXzFNQjoKKwljYXNlIExJQklQV19DQ0tfUkFURV8yTUI6CisJY2FzZSBMSUJJUFdfQ0NLX1JBVEVfNU1COgorCWNhc2UgTElCSVBXX0NDS19SQVRFXzExTUI6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogaWVlZTgwMjExLmMgKi8KK2V4dGVybiB2b2lkIGZyZWVfaWVlZTgwMjExKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtb25pdG9yKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdiwgaW50IG1vbml0b3IpOworZXh0ZXJuIGludCBsaWJpcHdfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CisKK2V4dGVybiB2b2lkIGxpYmlwd19uZXR3b3Jrc19hZ2Uoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2Vjcyk7CisKK2V4dGVybiBpbnQgbGliaXB3X3NldF9lbmNyeXB0aW9uKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKTsKKworLyogbGliaXB3X3R4LmMgKi8KK2V4dGVybiBuZXRkZXZfdHhfdCBsaWJpcHdfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgbGliaXB3X3R4Yl9mcmVlKHN0cnVjdCBsaWJpcHdfdHhiICopOworCisvKiBsaWJpcHdfcnguYyAqLworZXh0ZXJuIHZvaWQgbGliaXB3X3J4X2FueShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cyk7CitleHRlcm4gaW50IGxpYmlwd19yeChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKKy8qIG1ha2Ugc3VyZSB0byBzZXQgc3RhdHMtPmxlbiAqLworZXh0ZXJuIHZvaWQgbGliaXB3X3J4X21ndChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJCSAgICAgc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKmhlYWRlciwKKwkJCSAgICAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpOworZXh0ZXJuIHZvaWQgbGliaXB3X25ldHdvcmtfcmVzZXQoc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKTsKKworLyogbGliaXB3X2dlby5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmxpYmlwd19nZXRfZ2VvKHN0cnVjdCBsaWJpcHdfZGV2aWNlCisJCQkJCQkgICAgICppZWVlKTsKK2V4dGVybiBpbnQgbGliaXB3X3NldF9nZW8oc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8pOworCitleHRlcm4gaW50IGxpYmlwd19pc192YWxpZF9jaGFubmVsKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworZXh0ZXJuIGludCBsaWJpcHdfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJCQkgICAgICB1OCBjaGFubmVsKTsKK2V4dGVybiB1OCBsaWJpcHdfZnJlcV90b19jaGFubmVsKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCB1MzIgZnJlcSk7CitleHRlcm4gdTggbGliaXB3X2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsaWJpcHdfY2hhbm5lbCAqbGliaXB3X2dldF9jaGFubmVsKHN0cnVjdAorCQkJCQkJCSAgICAgbGliaXB3X2RldmljZQorCQkJCQkJCSAgICAgKmllZWUsIHU4IGNoYW5uZWwpOworZXh0ZXJuIHUzMiBsaWJpcHdfY2hhbm5lbF90b19mcmVxKHN0cnVjdCBsaWJpcHdfZGV2aWNlICogaWVlZSwKKwkJCQkgICAgICB1OCBjaGFubmVsKTsKKworLyogbGliaXB3X3d4LmMgKi8KK2V4dGVybiBpbnQgbGliaXB3X3d4X2dldF9zY2FuKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOworZXh0ZXJuIGludCBsaWJpcHdfd3hfc2V0X2VuY29kZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7CitleHRlcm4gaW50IGxpYmlwd193eF9nZXRfZW5jb2RlKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKK2V4dGVybiBpbnQgbGliaXB3X3d4X3NldF9lbmNvZGVleHQoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IGxpYmlwd193eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbGliaXB3X2luY3JlbWVudF9zY2FucyhzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSkKK3sKKwlpZWVlLT5zY2FucysrOworfQorCitzdGF0aWMgaW5saW5lIGludCBsaWJpcHdfZ2V0X3NjYW5zKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKQoreworCXJldHVybiBpZWVlLT5zY2FuczsKK30KKworI2VuZGlmCQkJCS8qIExJQklQV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCmluZGV4IDlkZmJiODcuLjY1ZThjMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCkBAIC0xOSw3ICsxOSw3IEBACiAgIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAgSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgorICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MSw5ICs0MSw5IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAibGliaXB3LmgiCiAKLWludCBpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggY2hhbm5lbCkKK2ludCBsaWJpcHdfaXNfdmFsaWRfY2hhbm5lbChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwgdTggY2hhbm5lbCkKIHsKIAlpbnQgaTsKIApAQCAtNTIsMjcgKzUyLDI3IEBACiAJaWYgKGllZWUtPmdlby5iZ19jaGFubmVscyA9PSAwICYmIGllZWUtPmdlby5hX2NoYW5uZWxzID09IDApCiAJCXJldHVybiAwOwogCi0JaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKQorCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfMjRHSFpfQkFORCkKIAkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5iZ19jaGFubmVsczsgaSsrKQogCQkJLyogTk9URTogSWYgRyBtb2RlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnV0CiAJCQkgKiB0aGlzIGlzIGEgQiBvbmx5IGNoYW5uZWwsIHdlIGRvbid0IHNlZSBpdAogCQkJICogYXMgdmFsaWQuICovCiAJCQlpZiAoKGllZWUtPmdlby5iZ1tpXS5jaGFubmVsID09IGNoYW5uZWwpICYmCi0JCQkgICAgIShpZWVlLT5nZW8uYmdbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hfSU5WQUxJRCkgJiYKKwkJCSAgICAhKGllZWUtPmdlby5iZ1tpXS5mbGFncyAmIExJQklQV19DSF9JTlZBTElEKSAmJgogCQkJICAgICghKGllZWUtPm1vZGUgJiBJRUVFX0cpIHx8Ci0JCQkgICAgICEoaWVlZS0+Z2VvLmJnW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX0JfT05MWSkpKQotCQkJCXJldHVybiBJRUVFODAyMTFfMjRHSFpfQkFORDsKKwkJCSAgICAgIShpZWVlLT5nZW8uYmdbaV0uZmxhZ3MgJiBMSUJJUFdfQ0hfQl9PTkxZKSkpCisJCQkJcmV0dXJuIExJQklQV18yNEdIWl9CQU5EOwogCi0JaWYgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKQorCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBMSUJJUFdfNTJHSFpfQkFORCkKIAkJZm9yIChpID0gMDsgaSA8IGllZWUtPmdlby5hX2NoYW5uZWxzOyBpKyspCiAJCQlpZiAoKGllZWUtPmdlby5hW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkgJiYKLQkJCSAgICAhKGllZWUtPmdlby5hW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIX0lOVkFMSUQpKQotCQkJCXJldHVybiBJRUVFODAyMTFfNTJHSFpfQkFORDsKKwkJCSAgICAhKGllZWUtPmdlby5hW2ldLmZsYWdzICYgTElCSVBXX0NIX0lOVkFMSUQpKQorCQkJCXJldHVybiBMSUJJUFdfNTJHSFpfQkFORDsKIAogCXJldHVybiAwOwogfQogCi1pbnQgaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCitpbnQgbGliaXB3X2NoYW5uZWxfdG9faW5kZXgoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCiB7CiAJaW50IGk7CiAKQEAgLTgxLDEyICs4MSwxMiBAQAogCWlmIChpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPT0gMCAmJiBpZWVlLT5nZW8uYV9jaGFubmVscyA9PSAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV18yNEdIWl9CQU5EKQogCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCiAJCQlpZiAoaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKIAkJCQlyZXR1cm4gaTsKIAotCWlmIChpZWVlLT5mcmVxX2JhbmQgJiBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgTElCSVBXXzUyR0haX0JBTkQpCiAJCWZvciAoaSA9IDA7IGkgPCBpZWVlLT5nZW8uYV9jaGFubmVsczsgaSsrKQogCQkJaWYgKGllZWUtPmdlby5hW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKIAkJCQlyZXR1cm4gaTsKQEAgLTk0LDIyICs5NCwyMiBAQAogCXJldHVybiAtMTsKIH0KIAotdTMyIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXEoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLCB1OCBjaGFubmVsKQordTMyIGxpYmlwd19jaGFubmVsX3RvX2ZyZXEoc3RydWN0IGxpYmlwd19kZXZpY2UgKiBpZWVlLCB1OCBjaGFubmVsKQogewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqIGNoOworCWNvbnN0IHN0cnVjdCBsaWJpcHdfY2hhbm5lbCAqIGNoOwogCiAJLyogRHJpdmVyIG5lZWRzIHRvIGluaXRpYWxpemUgdGhlIGdlb2dyYXBoeSBtYXAgYmVmb3JlIHVzaW5nCiAJICogdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyAqLwogCWlmIChpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPT0gMCAmJiBpZWVlLT5nZW8uYV9jaGFubmVscyA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWNoID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGllZWUsIGNoYW5uZWwpOworCWNoID0gbGliaXB3X2dldF9jaGFubmVsKGllZWUsIGNoYW5uZWwpOwogCWlmICghY2gtPmNoYW5uZWwpCiAJCXJldHVybiAwOwogCXJldHVybiBjaC0+ZnJlcTsKIH0KIAotdTggaWVlZTgwMjExX2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGllZWUsIHUzMiBmcmVxKQordTggbGliaXB3X2ZyZXFfdG9fY2hhbm5lbChzdHJ1Y3QgbGliaXB3X2RldmljZSAqIGllZWUsIHUzMiBmcmVxKQogewogCWludCBpOwogCkBAIC0xMjAsMTIgKzEyMCwxMiBAQAogCiAJZnJlcSAvPSAxMDAwMDA7CiAKLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV18yNEdIWl9CQU5EKQogCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmJnX2NoYW5uZWxzOyBpKyspCiAJCQlpZiAoaWVlZS0+Z2VvLmJnW2ldLmZyZXEgPT0gZnJlcSkKIAkJCQlyZXR1cm4gaWVlZS0+Z2VvLmJnW2ldLmNoYW5uZWw7CiAKLQlpZiAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzUyR0haX0JBTkQpCisJaWYgKGllZWUtPmZyZXFfYmFuZCAmIExJQklQV181MkdIWl9CQU5EKQogCQlmb3IgKGkgPSAwOyBpIDwgaWVlZS0+Z2VvLmFfY2hhbm5lbHM7IGkrKykKIAkJCWlmIChpZWVlLT5nZW8uYVtpXS5mcmVxID09IGZyZXEpCiAJCQkJcmV0dXJuIGllZWUtPmdlby5hW2ldLmNoYW5uZWw7CkBAIC0xMzMsNjMgKzEzMyw2MyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaWVlZTgwMjExX3NldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8pCitpbnQgbGliaXB3X3NldF9nZW8oc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBsaWJpcHdfZ2VvICpnZW8pCiB7CiAJbWVtY3B5KGllZWUtPmdlby5uYW1lLCBnZW8tPm5hbWUsIDMpOwogCWllZWUtPmdlby5uYW1lWzNdID0gJ1wwJzsKIAlpZWVlLT5nZW8uYmdfY2hhbm5lbHMgPSBnZW8tPmJnX2NoYW5uZWxzOwogCWllZWUtPmdlby5hX2NoYW5uZWxzID0gZ2VvLT5hX2NoYW5uZWxzOwogCW1lbWNweShpZWVlLT5nZW8uYmcsIGdlby0+YmcsIGdlby0+YmdfY2hhbm5lbHMgKgotCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7CisJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X2NoYW5uZWwpKTsKIAltZW1jcHkoaWVlZS0+Z2VvLmEsIGdlby0+YSwgaWVlZS0+Z2VvLmFfY2hhbm5lbHMgKgotCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7CisJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X2NoYW5uZWwpKTsKIAlyZXR1cm4gMDsKIH0KIAotY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmllZWU4MDIxMV9nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQorY29uc3Qgc3RydWN0IGxpYmlwd19nZW8gKmxpYmlwd19nZXRfZ2VvKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKQogewogCXJldHVybiAmaWVlZS0+Z2VvOwogfQogCi11OCBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLCB1OCBjaGFubmVsKQordTggbGliaXB3X2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBsaWJpcHdfZGV2aWNlICogaWVlZSwgdTggY2hhbm5lbCkKIHsKLQlpbnQgaW5kZXggPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChpZWVlLCBjaGFubmVsKTsKKwlpbnQgaW5kZXggPSBsaWJpcHdfY2hhbm5lbF90b19pbmRleChpZWVlLCBjaGFubmVsKTsKIAogCWlmIChpbmRleCA9PSAtMSkKLQkJcmV0dXJuIElFRUU4MDIxMV9DSF9JTlZBTElEOworCQlyZXR1cm4gTElCSVBXX0NIX0lOVkFMSUQ7CiAKLQlpZiAoY2hhbm5lbCA8PSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMpCisJaWYgKGNoYW5uZWwgPD0gTElCSVBXXzI0R0haX0NIQU5ORUxTKQogCQlyZXR1cm4gaWVlZS0+Z2VvLmJnW2luZGV4XS5mbGFnczsKIAogCXJldHVybiBpZWVlLT5nZW8uYVtpbmRleF0uZmxhZ3M7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYmFkX2NoYW5uZWwgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxpYmlwd19jaGFubmVsIGJhZF9jaGFubmVsID0gewogCS5jaGFubmVsID0gMCwKLQkuZmxhZ3MgPSBJRUVFODAyMTFfQ0hfSU5WQUxJRCwKKwkuZmxhZ3MgPSBMSUJJUFdfQ0hfSU5WQUxJRCwKIAkubWF4X3Bvd2VyID0gMCwKIH07CiAKLWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaWVlZTgwMjExX2dldF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlCitjb25zdCBzdHJ1Y3QgbGliaXB3X2NoYW5uZWwgKmxpYmlwd19nZXRfY2hhbm5lbChzdHJ1Y3QgbGliaXB3X2RldmljZQogCQkJCQkJICAgICAgKmllZWUsIHU4IGNoYW5uZWwpCiB7Ci0JaW50IGluZGV4ID0gaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgoaWVlZSwgY2hhbm5lbCk7CisJaW50IGluZGV4ID0gbGliaXB3X2NoYW5uZWxfdG9faW5kZXgoaWVlZSwgY2hhbm5lbCk7CiAKIAlpZiAoaW5kZXggPT0gLTEpCiAJCXJldHVybiAmYmFkX2NoYW5uZWw7CiAKLQlpZiAoY2hhbm5lbCA8PSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMpCisJaWYgKGNoYW5uZWwgPD0gTElCSVBXXzI0R0haX0NIQU5ORUxTKQogCQlyZXR1cm4gJmllZWUtPmdlby5iZ1tpbmRleF07CiAKIAlyZXR1cm4gJmllZWUtPmdlby5hW2luZGV4XTsKIH0KIAotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NoYW5uZWwpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3MpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfaXNfdmFsaWRfY2hhbm5lbCk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2NoYW5uZWxfdG9faW5kZXgpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2V0X2dlbyk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9nZXRfZ2VvKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2dldF9jaGFubmVsKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2dldF9jaGFubmVsX2ZsYWdzKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2lzX3ZhbGlkX2NoYW5uZWwpOworRVhQT1JUX1NZTUJPTChsaWJpcHdfZnJlcV90b19jaGFubmVsKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2NoYW5uZWxfdG9fZnJlcSk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd19jaGFubmVsX3RvX2luZGV4KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3NldF9nZW8pOworRVhQT1JUX1NZTUJPTChsaWJpcHdfZ2V0X2dlbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCmluZGV4IDhjZTZlOTYuLmEwZTlmNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCkBAIC0yNSw3ICsyNSw3IEBACiAgIGZpbGUgY2FsbGVkIExJQ0VOU0UuCiAKICAgQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAgSmFtZXMgUC4gS2V0cmVub3MgPGlwdzIxMDAtYWRtaW5AbGludXguaW50ZWwuY29tPgorICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTAsMTEgKzUwLDExIEBACiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04gIjgwMi4xMSBkYXRhL21hbmFnZW1lbnQvY29udHJvbCBzdGFjayIKICNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpZWVlODAyMTEiCi0jZGVmaW5lIERSVl9WRVJTSU9OCUlFRUU4MDIxMV9WRVJTSU9OCisjZGVmaW5lIERSVl9WRVJTSU9OCUxJQklQV19WRVJTSU9OCiAjZGVmaW5lIERSVl9DT1BZUklHSFQgICAiQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgSW50ZWwgQ29ycG9yYXRpb24gPGprZXRyZW5vQGxpbnV4LmludGVsLmNvbT4iCiAKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKQEAgLTYyLDEzICs2MiwxNiBAQAogTU9EVUxFX0FVVEhPUihEUlZfQ09QWVJJR0hUKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIGludCBpZWVlODAyMTFfbmV0d29ya3NfYWxsb2NhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCitzdHJ1Y3QgY2ZnODAyMTFfb3BzIGxpYmlwd19jb25maWdfb3BzID0geyB9Owordm9pZCAqbGliaXB3X3dpcGh5X3ByaXZpZCA9ICZsaWJpcHdfd2lwaHlfcHJpdmlkOworCitzdGF0aWMgaW50IGxpYmlwd19uZXR3b3Jrc19hbGxvY2F0ZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSkKIHsKIAlpZiAoaWVlZS0+bmV0d29ya3MpCiAJCXJldHVybiAwOwogCiAJaWVlZS0+bmV0d29ya3MgPQotCSAgICBremFsbG9jKE1BWF9ORVRXT1JLX0NPVU5UICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayksCisJICAgIGt6YWxsb2MoTUFYX05FVFdPUktfQ09VTlQgKiBzaXplb2Yoc3RydWN0IGxpYmlwd19uZXR3b3JrKSwKIAkJICAgIEdGUF9LRVJORUwpOwogCWlmICghaWVlZS0+bmV0d29ya3MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBiZWFjb25zXG4iLApAQCAtNzksNyArODIsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGllZWU4MDIxMV9uZXR3b3JrX3Jlc2V0KHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKK3ZvaWQgbGliaXB3X25ldHdvcmtfcmVzZXQoc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCWlmICghbmV0d29yaykKIAkJcmV0dXJuOwpAQCAtOTAsNyArOTMsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19mcmVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQorc3RhdGljIGlubGluZSB2b2lkIGxpYmlwd19uZXR3b3Jrc19mcmVlKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlKQogewogCWludCBpOwogCkBAIC0xMDUsMTAgKzEwOCwxMCBAQAogCWllZWUtPm5ldHdvcmtzID0gTlVMTDsKIH0KIAotdm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAordm9pZCBsaWJpcHdfbmV0d29ya3NfYWdlKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmsgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBhZ2VfamlmZmllcyA9IG1zZWNzX3RvX2ppZmZpZXMoYWdlX3NlY3MgKiBNU0VDX1BFUl9TRUMpOwogCkBAIC0xMTgsOSArMTIxLDkgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbmV0d29ya3NfYWdlKTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X25ldHdvcmtzX2FnZSk7CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19pbml0aWFsaXplKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQorc3RhdGljIHZvaWQgbGliaXB3X25ldHdvcmtzX2luaXRpYWxpemUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUpCiB7CiAJaW50IGk7CiAKQEAgLTEzMSwzOCArMTM0LDU5IEBACiAJCQkgICAgICAmaWVlZS0+bmV0d29ya19mcmVlX2xpc3QpOwogfQogCi1pbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCitpbnQgbGliaXB3X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0JaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gSUVFRTgwMjExX0RBVEFfTEVOKSkKKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBMSUJJUFdfREFUQV9MRU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYtPm10dSA9IG5ld19tdHU7CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jaGFuZ2VfbXR1KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X2NoYW5nZV9tdHUpOwogCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdikKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19pZWVlODAyMTEoaW50IHNpemVvZl9wcml2LCBpbnQgbW9uaXRvcikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnI7CiAKLQlJRUVFODAyMTFfREVCVUdfSU5GTygiSW5pdGlhbGl6aW5nLi4uXG4iKTsKKwlMSUJJUFdfREVCVUdfSU5GTygiSW5pdGlhbGl6aW5nLi4uXG4iKTsKIAotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSkgKyBzaXplb2ZfcHJpdik7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBsaWJpcHdfZGV2aWNlKSArIHNpemVvZl9wcml2KTsKIAlpZiAoIWRldikgewotCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZS5cbiIpOworCQlMSUJJUFdfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZS5cbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZWVlLT5kZXYgPSBkZXY7CiAKLQllcnIgPSBpZWVlODAyMTFfbmV0d29ya3NfYWxsb2NhdGUoaWVlZSk7Ci0JaWYgKGVycikgewotCQlJRUVFODAyMTFfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBiZWFjb24gc3RvcmFnZTogJWRcbiIsIGVycik7Ci0JCWdvdG8gZmFpbGVkX2ZyZWVfbmV0ZGV2OworCWlmICghbW9uaXRvcikgeworCQlpZWVlLT53ZGV2LndpcGh5ID0gd2lwaHlfbmV3KCZsaWJpcHdfY29uZmlnX29wcywgMCk7CisJCWlmICghaWVlZS0+d2Rldi53aXBoeSkgeworCQkJTElCSVBXX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgd2lwaHkuXG4iKTsKKwkJCWdvdG8gZmFpbGVkX2ZyZWVfbmV0ZGV2OworCQl9CisKKwkJaWVlZS0+ZGV2LT5pZWVlODAyMTFfcHRyID0gJmllZWUtPndkZXY7CisJCWllZWUtPndkZXYuaWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCQkvKiBGaWxsLW91dCB3aXBoeSBzdHJ1Y3R1cmUgYml0cyB3ZSBrbm93Li4uICBOb3QgZW5vdWdoIGluZm8KKwkJICAgaGVyZSB0byBjYWxsIHNldF93aXBoeV9kZXYgb3Igc2V0IE1BQyBhZGRyZXNzIG9yIGNoYW5uZWwgaW5mbworCQkgICAtLSBoYXZlIHRvIGRvIHRoYXQgaW4gLT5uZG9faW5pdC4uLiAqLworCQlpZWVlLT53ZGV2LndpcGh5LT5wcml2aWQgPSBsaWJpcHdfd2lwaHlfcHJpdmlkOworCisJCWllZWUtPndkZXYud2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwkJaWVlZS0+d2Rldi53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gMDsKKwkJaWVlZS0+d2Rldi53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJCQl8IEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAJfQotCWllZWU4MDIxMV9uZXR3b3Jrc19pbml0aWFsaXplKGllZWUpOworCisJZXJyID0gbGliaXB3X25ldHdvcmtzX2FsbG9jYXRlKGllZWUpOworCWlmIChlcnIpIHsKKwkJTElCSVBXX0VSUk9SKCJVbmFibGUgdG8gYWxsb2NhdGUgYmVhY29uIHN0b3JhZ2U6ICVkXG4iLCBlcnIpOworCQlnb3RvIGZhaWxlZF9mcmVlX3dpcGh5OworCX0KKwlsaWJpcHdfbmV0d29ya3NfaW5pdGlhbGl6ZShpZWVlKTsKIAogCS8qIERlZmF1bHQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgaXMgbWF4aW11bSBwYXlsb2FkIHNpemUgKi8KIAlpZWVlLT5mdHMgPSBERUZBVUxUX0ZUUzsKQEAgLTE5MywzMyArMjE3LDQ1IEBACiAKIAlyZXR1cm4gZGV2OwogCitmYWlsZWRfZnJlZV93aXBoeToKKwlpZiAoIW1vbml0b3IpCisJCXdpcGh5X2ZyZWUoaWVlZS0+d2Rldi53aXBoeSk7CiBmYWlsZWRfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYoZGV2KTsKIGZhaWxlZDoKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBmcmVlX2llZWU4MDIxMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbW9uaXRvcikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJbGliODAyMTFfY3J5cHRfaW5mb19mcmVlKCZpZWVlLT5jcnlwdF9pbmZvKTsKIAotCWllZWU4MDIxMV9uZXR3b3Jrc19mcmVlKGllZWUpOworCWxpYmlwd19uZXR3b3Jrc19mcmVlKGllZWUpOworCisJLyogZnJlZSBjZmc4MDIxMSByZXNvdXJjZXMgKi8KKwlpZiAoIW1vbml0b3IpIHsKKwkJd2lwaHlfdW5yZWdpc3RlcihpZWVlLT53ZGV2LndpcGh5KTsKKwkJa2ZyZWUoaWVlZS0+YV9iYW5kLmNoYW5uZWxzKTsKKwkJa2ZyZWUoaWVlZS0+YmdfYmFuZC5jaGFubmVscyk7CisJCXdpcGh5X2ZyZWUoaWVlZS0+d2Rldi53aXBoeSk7CisJfQorCiAJZnJlZV9uZXRkZXYoZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAogc3RhdGljIGludCBkZWJ1ZyA9IDA7Ci11MzIgaWVlZTgwMjExX2RlYnVnX2xldmVsID0gMDsKLUVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCk7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICppZWVlODAyMTFfcHJvYyA9IE5VTEw7Cit1MzIgbGliaXB3X2RlYnVnX2xldmVsID0gMDsKK0VYUE9SVF9TWU1CT0xfR1BMKGxpYmlwd19kZWJ1Z19sZXZlbCk7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpsaWJpcHdfcHJvYyA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgc2hvd19kZWJ1Z19sZXZlbChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKIAkJCSAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCXJldHVybiBzbnByaW50ZihwYWdlLCBjb3VudCwgIjB4JTA4WFxuIiwgaWVlZTgwMjExX2RlYnVnX2xldmVsKTsKKwlyZXR1cm4gc25wcmludGYocGFnZSwgY291bnQsICIweCUwOFhcbiIsIGxpYmlwd19kZWJ1Z19sZXZlbCk7CiB9CiAKIHN0YXRpYyBpbnQgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLApAQCAtMjM2LDI5ICsyNzIsMjkgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQogCQkgICAgICAgIjogJXMgaXMgbm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOwogCWVsc2UKLQkJaWVlZTgwMjExX2RlYnVnX2xldmVsID0gdmFsOworCQlsaWJpcHdfZGVidWdfbGV2ZWwgPSB2YWw7CiAKIAlyZXR1cm4gc3RybmxlbihidWYsIGxlbik7CiB9CiAjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbGliaXB3X2luaXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCi0JaWVlZTgwMjExX2RlYnVnX2xldmVsID0gZGVidWc7Ci0JaWVlZTgwMjExX3Byb2MgPSBwcm9jX21rZGlyKERSVl9OQU1FLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JaWYgKGllZWU4MDIxMV9wcm9jID09IE5VTEwpIHsKLQkJSUVFRTgwMjExX0VSUk9SKCJVbmFibGUgdG8gY3JlYXRlICIgRFJWX05BTUUKKwlsaWJpcHdfZGVidWdfbGV2ZWwgPSBkZWJ1ZzsKKwlsaWJpcHdfcHJvYyA9IHByb2NfbWtkaXIoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKKwlpZiAobGliaXB3X3Byb2MgPT0gTlVMTCkgeworCQlMSUJJUFdfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgIiBEUlZfTkFNRQogCQkJCSIgcHJvYyBkaXJlY3RvcnlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJCSAgICAgIGllZWU4MDIxMV9wcm9jKTsKKwkJCSAgICAgIGxpYmlwd19wcm9jKTsKIAlpZiAoIWUpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKLQkJaWVlZTgwMjExX3Byb2MgPSBOVUxMOworCQlsaWJpcHdfcHJvYyA9IE5VTEw7CiAJCXJldHVybiAtRUlPOwogCX0KIAllLT5yZWFkX3Byb2MgPSBzaG93X2RlYnVnX2xldmVsOwpAQCAtMjcyLDEzICszMDgsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgbGliaXB3X2V4aXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCi0JaWYgKGllZWU4MDIxMV9wcm9jKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJkZWJ1Z19sZXZlbCIsIGllZWU4MDIxMV9wcm9jKTsKKwlpZiAobGliaXB3X3Byb2MpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgbGliaXB3X3Byb2MpOwogCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwotCQlpZWVlODAyMTFfcHJvYyA9IE5VTEw7CisJCWxpYmlwd19wcm9jID0gTlVMTDsKIAl9CiAjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogfQpAQCAtMjg5LDggKzMyNSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKICNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCiAKLW1vZHVsZV9leGl0KGllZWU4MDIxMV9leGl0KTsKLW1vZHVsZV9pbml0KGllZWU4MDIxMV9pbml0KTsKK21vZHVsZV9leGl0KGxpYmlwd19leGl0KTsKK21vZHVsZV9pbml0KGxpYmlwd19pbml0KTsKIAogRVhQT1JUX1NZTUJPTChhbGxvY19pZWVlODAyMTEpOwogRVhQT1JUX1NZTUJPTChmcmVlX2llZWU4MDIxMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYwppbmRleCBkYWU0YjhlLi4yODJiMWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKQEAgLTM0LDE4ICszNCwxOCBAQAogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX21vbml0b3Jfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitzdGF0aWMgdm9pZCBsaWJpcHdfbW9uaXRvcl9yeChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCisJCQkJCXN0cnVjdCBsaWJpcHdfcnhfc3RhdHMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCXNrYi0+ZGV2ID0gaWVlZS0+ZGV2OwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0Jc2tiX3B1bGwoc2tiLCBpZWVlODAyMTFfZ2V0X2hkcmxlbihmYykpOworCXNrYl9wdWxsKHNrYiwgbGliaXB3X2dldF9oZHJsZW4oZmMpKTsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMTFfUkFXKTsKIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKQEAgLTUzLDIyICs1MywyMiBAQAogfQogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgKmllZWU4MDIxMV9mcmFnX2NhY2hlX2ZpbmQoc3RydWN0Ci0JCQkJCQkJICAgICAgaWVlZTgwMjExX2RldmljZQorc3RhdGljIHN0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSAqbGliaXB3X2ZyYWdfY2FjaGVfZmluZChzdHJ1Y3QKKwkJCQkJCQkgICAgICBsaWJpcHdfZGV2aWNlCiAJCQkJCQkJICAgICAgKmllZWUsCiAJCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHNlcSwKIAkJCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZnJhZywKIAkJCQkJCQkgICAgICB1OCAqIHNyYywKIAkJCQkJCQkgICAgICB1OCAqIGRzdCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSAqZW50cnk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX0ZSQUdfQ0FDSEVfTEVOOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTElCSVBXX0ZSQUdfQ0FDSEVfTEVOOyBpKyspIHsKIAkJZW50cnkgPSAmaWVlZS0+ZnJhZ19jYWNoZVtpXTsKIAkJaWYgKGVudHJ5LT5za2IgIT0gTlVMTCAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBlbnRyeS0+Zmlyc3RfZnJhZ190aW1lICsgMiAqIEhaKSkgewotCQkJSUVFRTgwMjExX0RFQlVHX0ZSQUcoImV4cGlyaW5nIGZyYWdtZW50IGNhY2hlIGVudHJ5ICIKKwkJCUxJQklQV19ERUJVR19GUkFHKCJleHBpcmluZyBmcmFnbWVudCBjYWNoZSBlbnRyeSAiCiAJCQkJCSAgICAgInNlcT0ldSBsYXN0X2ZyYWc9JXVcbiIsCiAJCQkJCSAgICAgZW50cnktPnNlcSwgZW50cnktPmxhc3RfZnJhZyk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShlbnRyeS0+c2tiKTsKQEAgLTg2LDEzICs4NiwxMyBAQAogfQogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX2ZyYWdfY2FjaGVfZ2V0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbGliaXB3X2ZyYWdfY2FjaGVfZ2V0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAorCQkJCQkJc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKmhkcikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgc2M7CiAJdW5zaWduZWQgaW50IGZyYWcsIHNlcTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBsaWJpcHdfZnJhZ19lbnRyeSAqZW50cnk7CiAKIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCk7CiAJZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKQEAgLTEwMSw3ICsxMDEsNyBAQAogCWlmIChmcmFnID09IDApIHsKIAkJLyogUmVzZXJ2ZSBlbm91Z2ggc3BhY2UgdG8gZml0IG1heGltdW0gZnJhbWUgbGVuZ3RoICovCiAJCXNrYiA9IGRldl9hbGxvY19za2IoaWVlZS0+ZGV2LT5tdHUgKwotCQkJCSAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIpICsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyKSArCiAJCQkJICAgIDggLyogTExDICovICArCiAJCQkJICAgIDIgLyogYWxpZ25tZW50ICovICArCiAJCQkJICAgIDggLyogV0VQICovICArIEVUSF9BTEVOIC8qIFdEUyAqLyApOwpAQCAtMTEwLDcgKzExMCw3IEBACiAKIAkJZW50cnkgPSAmaWVlZS0+ZnJhZ19jYWNoZVtpZWVlLT5mcmFnX25leHRfaWR4XTsKIAkJaWVlZS0+ZnJhZ19uZXh0X2lkeCsrOwotCQlpZiAoaWVlZS0+ZnJhZ19uZXh0X2lkeCA+PSBJRUVFODAyMTFfRlJBR19DQUNIRV9MRU4pCisJCWlmIChpZWVlLT5mcmFnX25leHRfaWR4ID49IExJQklQV19GUkFHX0NBQ0hFX0xFTikKIAkJCWllZWUtPmZyYWdfbmV4dF9pZHggPSAwOwogCiAJCWlmIChlbnRyeS0+c2tiICE9IE5VTEwpCkBAIC0xMjUsNyArMTI1LDcgQEAKIAl9IGVsc2UgewogCQkvKiByZWNlaXZlZCBhIGZyYWdtZW50IG9mIGEgZnJhbWUgZm9yIHdoaWNoIHRoZSBoZWFkIGZyYWdtZW50CiAJCSAqIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWNlaXZlZCAqLwotCQllbnRyeSA9IGllZWU4MDIxMV9mcmFnX2NhY2hlX2ZpbmQoaWVlZSwgc2VxLCBmcmFnLCBoZHItPmFkZHIyLAorCQllbnRyeSA9IGxpYmlwd19mcmFnX2NhY2hlX2ZpbmQoaWVlZSwgc2VxLCBmcmFnLCBoZHItPmFkZHIyLAogCQkJCQkJICBoZHItPmFkZHIxKTsKIAkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKIAkJCWVudHJ5LT5sYXN0X2ZyYWcgPSBmcmFnOwpAQCAtMTM3LDIxICsxMzcsMjEgQEAKIH0KIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9mcmFnX2NhY2hlX2ludmFsaWRhdGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpCitzdGF0aWMgaW50IGxpYmlwd19mcmFnX2NhY2hlX2ludmFsaWRhdGUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCisJCQkJCSAgIHN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHIpCiB7CiAJdTE2IHNjOwogCXVuc2lnbmVkIGludCBzZXE7Ci0Jc3RydWN0IGllZWU4MDIxMV9mcmFnX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgbGliaXB3X2ZyYWdfZW50cnkgKmVudHJ5OwogCiAJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpOwogCXNlcSA9IFdMQU5fR0VUX1NFUV9TRVEoc2MpOwogCi0JZW50cnkgPSBpZWVlODAyMTFfZnJhZ19jYWNoZV9maW5kKGllZWUsIHNlcSwgLTEsIGhkci0+YWRkcjIsCisJZW50cnkgPSBsaWJpcHdfZnJhZ19jYWNoZV9maW5kKGllZWUsIHNlcSwgLTEsIGhkci0+YWRkcjIsCiAJCQkJCSAgaGRyLT5hZGRyMSk7CiAKIAlpZiAoZW50cnkgPT0gTlVMTCkgewotCQlJRUVFODAyMTFfREVCVUdfRlJBRygiY291bGQgbm90IGludmFsaWRhdGUgZnJhZ21lbnQgY2FjaGUgIgorCQlMSUJJUFdfREVCVUdfRlJBRygiY291bGQgbm90IGludmFsaWRhdGUgZnJhZ21lbnQgY2FjaGUgIgogCQkJCSAgICAgImVudHJ5IChzZXE9JXUpXG4iLCBzZXEpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTYxLDE0ICsxNjEsMTQgQEAKIH0KIAogI2lmZGVmIE5PVF9ZRVQKLS8qIGllZWU4MDIxMV9yeF9mcmFtZV9tZ3RtdAorLyogbGliaXB3X3J4X2ZyYW1lX21ndG10CiAgKgogICogUmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIG1hbmFnZW1lbnQgY29udHJvbCBmcmFtZXMKICAqCi0gKiBDYWxsZWQgYnkgaWVlZTgwMjExX3J4ICovCisgKiBDYWxsZWQgYnkgbGliaXB3X3J4ICovCiBzdGF0aWMgaW50Ci1pZWVlODAyMTFfcnhfZnJhbWVfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzLCB1MTYgdHlwZSwKK2xpYmlwd19yeF9mcmFtZV9tZ210KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqcnhfc3RhdHMsIHUxNiB0eXBlLAogCQkJdTE2IHN0eXBlKQogewogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKSB7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJICAgICAgIGllZWUtPmRldi0+bmFtZSk7CiAJCXJldHVybiAwOwogLyoKLSAgaG9zdGFwX3VwZGF0ZV9zdGFfcHMoaWVlZSwgKHN0cnVjdCBob3N0YXBfaWVlZTgwMjExX2hkcl80YWRkciAqKQorICBob3N0YXBfdXBkYXRlX3N0YV9wcyhpZWVlLCAoc3RydWN0IGhvc3RhcF9saWJpcHdfaGRyXzRhZGRyICopCiAgIHNrYi0+ZGF0YSk7Ki8KIAl9CiAKQEAgLTIxOSwyNiArMjE5LDI3IEBACiAKIC8qIFNlZSBJRUVFIDgwMi4xSCBmb3IgTExDL1NOQVAgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uICovCiAvKiBFdGhlcm5ldC1JSSBzbmFwIGhlYWRlciAoUkZDMTA0MiBmb3IgbW9zdCBFdGhlclR5cGVzKSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgcmZjMTA0Ml9oZWFkZXJbXSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgbGliaXB3X3JmYzEwNDJfaGVhZGVyW10gPQorICAgIHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCiAvKiBCcmlkZ2UtVHVubmVsIGhlYWRlciAoZm9yIEV0aGVyVHlwZXMgRVRIX1BfQUFSUCBhbmQgRVRIX1BfSVBYKSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgYnJpZGdlX3R1bm5lbF9oZWFkZXJbXSA9CitzdGF0aWMgdW5zaWduZWQgY2hhciBsaWJpcHdfYnJpZGdlX3R1bm5lbF9oZWFkZXJbXSA9CiAgICAgeyAweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweGY4IH07CiAvKiBObyBlbmNhcHN1bGF0aW9uIGhlYWRlciBpZiBFdGhlclR5cGUgPCAweDYwMCAoPWxlbmd0aCkgKi8KIAotLyogQ2FsbGVkIGJ5IGllZWU4MDIxMV9yeF9mcmFtZV9kZWNyeXB0ICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKy8qIENhbGxlZCBieSBsaWJpcHdfcnhfZnJhbWVfZGVjcnlwdCAqLworc3RhdGljIGludCBsaWJpcHdfaXNfZWFwb2xfZnJhbWUoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKIAl1MTYgZmMsIGV0aGVydHlwZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyICpoZHI7CiAJdTggKnBvczsKIAogCWlmIChza2ItPmxlbiA8IDI0KQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKilza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CiAKIAkvKiBjaGVjayB0aGF0IHRoZSBmcmFtZSBpcyB1bmljYXN0IGZyYW1lIHRvIHVzICovCkBAIC0yNjYsMjggKzI2NywyOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSksIGJ5IGllZWU4MDIxMV9yeCAqLworLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLCBieSBsaWJpcHdfcnggKi8KIHN0YXRpYyBpbnQKLWllZWU4MDIxMV9yeF9mcmFtZV9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorbGliaXB3X3J4X2ZyYW1lX2RlY3J5cHQoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKmhkcjsKKwlzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciAqaGRyOwogCWludCByZXMsIGhkcmxlbjsKIAogCWlmIChjcnlwdCA9PSBOVUxMIHx8IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXBkdSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOworCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkciAqKXNrYi0+ZGF0YTsKKwloZHJsZW4gPSBsaWJpcHdfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOwogCiAJYXRvbWljX2luYygmY3J5cHQtPnJlZmNudCk7CiAJcmVzID0gY3J5cHQtPm9wcy0+ZGVjcnlwdF9tcGR1KHNrYiwgaGRybGVuLCBjcnlwdC0+cHJpdik7CiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKLQkJSUVFRTgwMjExX0RFQlVHX0RST1AoImRlY3J5cHRpb24gZmFpbGVkIChTQT0lcE0pIHJlcz0lZFxuIiwKKwkJTElCSVBXX0RFQlVHX0RST1AoImRlY3J5cHRpb24gZmFpbGVkIChTQT0lcE0pIHJlcz0lZFxuIiwKIAkJCQkgICAgIGhkci0+YWRkcjIsIHJlcyk7CiAJCWlmIChyZXMgPT0gLTIpCi0JCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiRGVjcnlwdGlvbiBmYWlsZWQgSUNWICIKKwkJCUxJQklQV19ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCBJQ1YgIgogCQkJCQkgICAgICJtaXNtYXRjaCAoa2V5ICVkKVxuIiwKIAkJCQkJICAgICBza2ItPmRhdGFbaGRybGVuICsgM10gPj4gNik7CiAJCWllZWUtPmllZWVfc3RhdHMucnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZSsrOwpAQCAtMjk3LDIwICsyOTgsMjAgQEAKIAlyZXR1cm4gcmVzOwogfQogCi0vKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSksIGJ5IGllZWU4MDIxMV9yeCAqLworLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLCBieSBsaWJpcHdfcnggKi8KIHN0YXRpYyBpbnQKLWllZWU4MDIxMV9yeF9mcmFtZV9kZWNyeXB0X21zZHUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitsaWJpcHdfcnhfZnJhbWVfZGVjcnlwdF9tc2R1KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCBrZXlpZHgsCiAJCQkJc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKmNyeXB0KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKmhkcjsKIAlpbnQgcmVzLCBoZHJsZW47CiAKIAlpZiAoY3J5cHQgPT0gTlVMTCB8fCBjcnlwdC0+b3BzLT5kZWNyeXB0X21zZHUgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilza2ItPmRhdGE7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfM2FkZHIgKilza2ItPmRhdGE7CisJaGRybGVuID0gbGliaXB3X2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKIAogCWF0b21pY19pbmMoJmNyeXB0LT5yZWZjbnQpOwogCXJlcyA9IGNyeXB0LT5vcHMtPmRlY3J5cHRfbXNkdShza2IsIGtleWlkeCwgaGRybGVuLCBjcnlwdC0+cHJpdik7CkBAIC0zMjgsMTEgKzMyOSwxMSBAQAogLyogQWxsIHJlY2VpdmVkIGZyYW1lcyBhcmUgc2VudCB0byB0aGlzIGZ1bmN0aW9uLiBAc2tiIGNvbnRhaW5zIHRoZSBmcmFtZSBpbgogICogSUVFRSA4MDIuMTEgZm9ybWF0LCBpLmUuLCBpbiB0aGUgZm9ybWF0IGl0IHdhcyBzZW50IG92ZXIgYWlyLgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkuICovCi1pbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpCitpbnQgbGliaXB3X3J4KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHI7CiAJc2l6ZV90IGhkcmxlbjsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlLCBzYzsKIAl1bnNpZ25lZCBpbnQgZnJhZzsKQEAgLTM1Miw3ICszNTMsNyBAQAogCWludCBrZXlpZHggPSAwOwogCWludCBjYW5fYmVfZGVjcnlwdGVkID0gMDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAJaWYgKHNrYi0+bGVuIDwgMTApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNLQiBsZW5ndGggPCAxMFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byByeF9kcm9wcGVkOwpAQCAtMzYzLDcgKzM2NCw3IEBACiAJc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7CiAJc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpOwogCWZyYWcgPSBXTEFOX0dFVF9TRVFfRlJBRyhzYyk7Ci0JaGRybGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4oZmMpOworCWhkcmxlbiA9IGxpYmlwd19nZXRfaGRybGVuKGZjKTsKIAogCWlmIChza2ItPmxlbiA8IGhkcmxlbikgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBTS0IgbGVuZ3RoICVkXG4iLApAQCAtMzgwLDE5ICszODEsMTkgQEAKIAkJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOwogCiAJCXdzdGF0cy51cGRhdGVkID0gMDsKLQkJaWYgKHJ4X3N0YXRzLT5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1JTU0kpIHsKKwkJaWYgKHJ4X3N0YXRzLT5tYXNrICYgTElCSVBXX1NUQVRNQVNLX1JTU0kpIHsKIAkJCXdzdGF0cy5sZXZlbCA9IHJ4X3N0YXRzLT5zaWduYWw7CiAJCQl3c3RhdHMudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CiAJCX0gZWxzZQogCQkJd3N0YXRzLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9JTlZBTElEOwogCi0JCWlmIChyeF9zdGF0cy0+bWFzayAmIElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRSkgeworCQlpZiAocnhfc3RhdHMtPm1hc2sgJiBMSUJJUFdfU1RBVE1BU0tfTk9JU0UpIHsKIAkJCXdzdGF0cy5ub2lzZSA9IHJ4X3N0YXRzLT5ub2lzZTsKIAkJCXdzdGF0cy51cGRhdGVkIHw9IElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKIAkJfSBlbHNlCiAJCQl3c3RhdHMudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CiAKLQkJaWYgKHJ4X3N0YXRzLT5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCkgeworCQlpZiAocnhfc3RhdHMtPm1hc2sgJiBMSUJJUFdfU1RBVE1BU0tfU0lHTkFMKSB7CiAJCQl3c3RhdHMucXVhbCA9IHJ4X3N0YXRzLT5zaWduYWw7CiAJCQl3c3RhdHMudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKIAkJfSBlbHNlCkBAIC00MTEsNyArNDEyLDcgQEAKIAlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKIAkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWllZWU4MDIxMV9tb25pdG9yX3J4KGllZWUsIHNrYiwgcnhfc3RhdHMpOworCQlsaWJpcHdfbW9uaXRvcl9yeChpZWVlLCBza2IsIHJ4X3N0YXRzKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC00NTcsNyArNDU4LDcgQEAKIAkJCSAqIGZyYW1lcyBmcm9tIG90aGVyIHRoYW4gY3VycmVudCBCU1MsIHNvIGp1c3QgZHJvcCB0aGUKIAkJCSAqIGZyYW1lcyBzaWxlbnRseSBpbnN0ZWFkIG9mIGZpbGxpbmcgc3lzdGVtIGxvZyB3aXRoCiAJCQkgKiB0aGVzZSByZXBvcnRzLiAqLwotCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIkRlY3J5cHRpb24gZmFpbGVkIChub3Qgc2V0KSIKKwkJCUxJQklQV19ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCAobm90IHNldCkiCiAJCQkJCSAgICAgIiAoU0E9JXBNKVxuIiwgaGRyLT5hZGRyMik7CiAJCQlpZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGUrKzsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTQ3NSw3ICs0NzYsNyBAQAogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CiAKLQkJaWYgKGllZWU4MDIxMV9yeF9mcmFtZV9tZ210KGllZWUsIHNrYiwgcnhfc3RhdHMsIHR5cGUsIHN0eXBlKSkKKwkJaWYgKGxpYmlwd19yeF9mcmFtZV9tZ210KGllZWUsIHNrYiwgcnhfc3RhdHMsIHR5cGUsIHN0eXBlKSkKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJZWxzZQogCQkJZ290byByeF9leGl0OwpAQCAtNDg4LDcgKzQ4OSw3IEBACiAJCWllZWUtPnByZXZfc2VxX2N0bCA9IHNjOwogCiAJLyogRGF0YSBmcmFtZSAtIGV4dHJhY3Qgc3JjL2RzdCBhZGRyZXNzZXMgKi8KLQlpZiAoc2tiLT5sZW4gPCBJRUVFODAyMTFfM0FERFJfTEVOKQorCWlmIChza2ItPmxlbiA8IExJQklQV18zQUREUl9MRU4pCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAogCXN3aXRjaCAoZmMgJiAoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUykpIHsKQEAgLTUwMSw3ICs1MDIsNyBAQAogCQltZW1jcHkoc3JjLCBoZHItPmFkZHIyLCBFVEhfQUxFTik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUzoKLQkJaWYgKHNrYi0+bGVuIDwgSUVFRTgwMjExXzRBRERSX0xFTikKKwkJaWYgKHNrYi0+bGVuIDwgTElCSVBXXzRBRERSX0xFTikKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJbWVtY3B5KGRzdCwgaGRyLT5hZGRyMywgRVRIX0FMRU4pOwogCQltZW1jcHkoc3JjLCBoZHItPmFkZHI0LCBFVEhfQUxFTik7CkBAIC01NjAsNyArNTYxLDcgQEAKIAkgICAgc3R5cGUgIT0gSUVFRTgwMjExX1NUWVBFX0RBVEFfQ0ZQT0xMICYmCiAJICAgIHN0eXBlICE9IElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGQUNLUE9MTCkgewogCQlpZiAoc3R5cGUgIT0gSUVFRTgwMjExX1NUWVBFX05VTExGVU5DKQotCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIlJYOiBkcm9wcGVkIGRhdGEgZnJhbWUgIgorCQkJTElCSVBXX0RFQlVHX0RST1AoIlJYOiBkcm9wcGVkIGRhdGEgZnJhbWUgIgogCQkJCQkgICAgICJ3aXRoIG5vIGRhdGEgKHR5cGU9MHglMDJ4LCAiCiAJCQkJCSAgICAgInN1YnR5cGU9MHglMDJ4LCBsZW49JWQpXG4iLAogCQkJCQkgICAgIHR5cGUsIHN0eXBlLCBza2ItPmxlbik7CkBAIC01NzAsMjEgKzU3MSwyMSBAQAogCS8qIHNrYjogaGRyICsgKHBvc3NpYmx5IGZyYWdtZW50ZWQsIHBvc3NpYmx5IGVuY3J5cHRlZCkgcGF5bG9hZCAqLwogCiAJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYgY2FuX2JlX2RlY3J5cHRlZCAmJgotCSAgICAoa2V5aWR4ID0gaWVlZTgwMjExX3J4X2ZyYW1lX2RlY3J5cHQoaWVlZSwgc2tiLCBjcnlwdCkpIDwgMCkKKwkgICAgKGtleWlkeCA9IGxpYmlwd19yeF9mcmFtZV9kZWNyeXB0KGllZWUsIHNrYiwgY3J5cHQpKSA8IDApCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAKIAkvKiBza2I6IGhkciArIChwb3NzaWJseSBmcmFnbWVudGVkKSBwbGFpbnRleHQgcGF5bG9hZCAqLwogCS8vIFBSOiBGSVhNRTogaG9zdGFwIGhhcyBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgaW4gdGhlICJpZiIgYmVsb3c6CiAJLy8gaWVlZS0+aG9zdF9kZWNyeXB0ICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCkgJiYKIAlpZiAoKGZyYWcgIT0gMCkgfHwgKGZjICYgSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKSkgewogCQlpbnQgZmxlbjsKLQkJc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiID0gaWVlZTgwMjExX2ZyYWdfY2FjaGVfZ2V0KGllZWUsIGhkcik7Ci0JCUlFRUU4MDIxMV9ERUJVR19GUkFHKCJSeCBGcmFnbWVudCByZWNlaXZlZCAoJXUpXG4iLCBmcmFnKTsKKwkJc3RydWN0IHNrX2J1ZmYgKmZyYWdfc2tiID0gbGliaXB3X2ZyYWdfY2FjaGVfZ2V0KGllZWUsIGhkcik7CisJCUxJQklQV19ERUJVR19GUkFHKCJSeCBGcmFnbWVudCByZWNlaXZlZCAoJXUpXG4iLCBmcmFnKTsKIAogCQlpZiAoIWZyYWdfc2tiKSB7Ci0JCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JYIHwgSUVFRTgwMjExX0RMX0ZSQUcsCisJCQlMSUJJUFdfREVCVUcoTElCSVBXX0RMX1JYIHwgTElCSVBXX0RMX0ZSQUcsCiAJCQkJCSJSeCBjYW5ub3QgZ2V0IHNrYiBmcm9tIGZyYWdtZW50ICIKIAkJCQkJImNhY2hlIChtb3JlZnJhZz0lZCBzZXE9JXUgZnJhZz0ldSlcbiIsCiAJCQkJCShmYyAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykgIT0gMCwKQEAgLTYwMCw3ICs2MDEsNyBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGhvc3QgZGVjcnlwdGVkIGFuZCAiCiAJCQkgICAgICAgInJlYXNzZW1ibGVkIGZyYW1lIGRpZCBub3QgZml0IHNrYlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJaWVlZTgwMjExX2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShpZWVlLCBoZHIpOworCQkJbGliaXB3X2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShpZWVlLCBoZHIpOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CiAKQEAgLTYyNywyNCArNjI4LDI0IEBACiAJCS8qIHRoaXMgd2FzIHRoZSBsYXN0IGZyYWdtZW50IGFuZCB0aGUgZnJhbWUgd2lsbCBiZQogCQkgKiBkZWxpdmVyZWQsIHNvIHJlbW92ZSBza2IgZnJvbSBmcmFnbWVudCBjYWNoZSAqLwogCQlza2IgPSBmcmFnX3NrYjsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopc2tiLT5kYXRhOwotCQlpZWVlODAyMTFfZnJhZ19jYWNoZV9pbnZhbGlkYXRlKGllZWUsIGhkcik7CisJCWhkciA9IChzdHJ1Y3QgbGliaXB3X2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwkJbGliaXB3X2ZyYWdfY2FjaGVfaW52YWxpZGF0ZShpZWVlLCBoZHIpOwogCX0KIAogCS8qIHNrYjogaGRyICsgKHBvc3NpYmxlIHJlYXNzZW1ibGVkKSBmdWxsIE1TRFUgcGF5bG9hZDsgcG9zc2libHkgc3RpbGwKIAkgKiBlbmNyeXB0ZWQvYXV0aGVudGljYXRlZCAqLwogCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmIGNhbl9iZV9kZWNyeXB0ZWQgJiYKLQkgICAgaWVlZTgwMjExX3J4X2ZyYW1lX2RlY3J5cHRfbXNkdShpZWVlLCBza2IsIGtleWlkeCwgY3J5cHQpKQorCSAgICBsaWJpcHdfcnhfZnJhbWVfZGVjcnlwdF9tc2R1KGllZWUsIHNrYiwga2V5aWR4LCBjcnlwdCkpCiAJCWdvdG8gcnhfZHJvcHBlZDsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAJaWYgKGNyeXB0ICYmICEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmICFpZWVlLT5vcGVuX3dlcCkgewogCQlpZiAoCQkvKmllZWUtPmllZWU4MDJfMXggJiYgKi8KLQkJCSAgIGllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShpZWVlLCBza2IpKSB7CisJCQkgICBsaWJpcHdfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiKSkgewogCQkJLyogcGFzcyB1bmVuY3J5cHRlZCBFQVBPTCBmcmFtZXMgZXZlbiBpZiBlbmNyeXB0aW9uIGlzCiAJCQkgKiBjb25maWd1cmVkICovCiAJCX0gZWxzZSB7Ci0JCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiZW5jcnlwdGlvbiBjb25maWd1cmVkLCBidXQgUlggIgorCQkJTElCSVBXX0RFQlVHX0RST1AoImVuY3J5cHRpb24gY29uZmlndXJlZCwgYnV0IFJYICIKIAkJCQkJICAgICAiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXBNKVxuIiwKIAkJCQkJICAgICBoZHItPmFkZHIyKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTY1Miw4ICs2NTMsOCBAQAogCX0KIAogCWlmIChjcnlwdCAmJiAhKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSAmJiAhaWVlZS0+b3Blbl93ZXAgJiYKLQkgICAgIWllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShpZWVlLCBza2IpKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJkcm9wcGVkIHVuZW5jcnlwdGVkIFJYIGRhdGEgIgorCSAgICAhbGliaXB3X2lzX2VhcG9sX2ZyYW1lKGllZWUsIHNrYikpIHsKKwkJTElCSVBXX0RFQlVHX0RST1AoImRyb3BwZWQgdW5lbmNyeXB0ZWQgUlggZGF0YSAiCiAJCQkJICAgICAiZnJhbWUgZnJvbSAlcE0gKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCiAJCQkJICAgICBoZHItPmFkZHIyKTsKIAkJZ290byByeF9kcm9wcGVkOwpAQCAtNzM2LDkgKzczNyw5IEBACiAKIAkvKiBjb252ZXJ0IGhkciArIHBvc3NpYmxlIExMQyBoZWFkZXJzIGludG8gRXRoZXJuZXQgaGVhZGVyICovCiAJaWYgKHNrYi0+bGVuIC0gaGRybGVuID49IDggJiYKLQkgICAgKChtZW1jbXAocGF5bG9hZCwgcmZjMTA0Ml9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCAmJgorCSAgICAoKG1lbWNtcChwYXlsb2FkLCBsaWJpcHdfcmZjMTA0Ml9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCAmJgogCSAgICAgIGV0aGVydHlwZSAhPSBFVEhfUF9BQVJQICYmIGV0aGVydHlwZSAhPSBFVEhfUF9JUFgpIHx8Ci0JICAgICBtZW1jbXAocGF5bG9hZCwgYnJpZGdlX3R1bm5lbF9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCkpIHsKKwkgICAgIG1lbWNtcChwYXlsb2FkLCBsaWJpcHdfYnJpZGdlX3R1bm5lbF9oZWFkZXIsIFNOQVBfU0laRSkgPT0gMCkpIHsKIAkJLyogcmVtb3ZlIFJGQzEwNDIgb3IgQnJpZGdlLVR1bm5lbCBlbmNhcHN1bGF0aW9uIGFuZAogCQkgKiByZXBsYWNlIEV0aGVyVHlwZSAqLwogCQlza2JfcHVsbChza2IsIGhkcmxlbiArIFNOQVBfU0laRSk7CkBAIC04MDcsNyArODA4LDcgQEAKIAkJCS8qIG5ldGlmX3J4IGFsd2F5cyBzdWNjZWVkcywgYnV0IGl0IG1pZ2h0IGRyb3AKIAkJCSAqIHRoZSBwYWNrZXQuICBJZiBpdCBkcm9wcyB0aGUgcGFja2V0LCB3ZSBsb2cgdGhhdAogCQkJICogaW4gb3VyIHN0YXRzLiAqLwotCQkJSUVFRTgwMjExX0RFQlVHX0RST1AKKwkJCUxJQklQV19ERUJVR19EUk9QCiAJCQkgICAgKCJSWDogbmV0aWZfcnggZHJvcHBlZCB0aGUgcGFja2V0XG4iKTsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9CkBAIC04MjksMTggKzgzMCwxOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBGaWx0ZXIgb3V0IHVucmVsYXRlZCBwYWNrZXRzLCBjYWxsIGllZWU4MDIxMV9yeFtfbWd0XQorLyogRmlsdGVyIG91dCB1bnJlbGF0ZWQgcGFja2V0cywgY2FsbCBsaWJpcHdfcnhbX21ndF0KICAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgb3ZlciB0aGUgc2tiLCBpdCBzaG91bGQgbm90IGJlIHVzZWQgYWdhaW4gYWZ0ZXIgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbi4gKi8KLXZvaWQgaWVlZTgwMjExX3J4X2FueShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3ZvaWQgbGliaXB3X3J4X2FueShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBsaWJpcHdfaGRyXzRhZGRyICpoZHI7CiAJaW50IGlzX3BhY2tldF9mb3JfdXM7CiAJdTE2IGZjOwogCiAJaWYgKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCWlmICghaWVlZTgwMjExX3J4KGllZWUsIHNrYiwgc3RhdHMpKQorCQlpZiAoIWxpYmlwd19yeChpZWVlLCBza2IsIHN0YXRzKSkKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC04NDgsNyArODQ5LDcgQEAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKQogCQlnb3RvIGRyb3BfZnJlZTsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CiAKIAlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfVkVSUykgIT0gMCkKQEAgLTg1Niw5ICs4NTcsOSBAQAogCiAJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkKKwkJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRyKSkKIAkJCWdvdG8gZHJvcF9mcmVlOwotCQlpZWVlODAyMTFfcnhfbWd0KGllZWUsIGhkciwgc3RhdHMpOworCQlsaWJpcHdfcnhfbWd0KGllZWUsIGhkciwgc3RhdHMpOwogCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQlyZXR1cm47CiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKQEAgLTkxMCw3ICs5MTEsNyBAQAogCX0KIAogCWlmIChpc19wYWNrZXRfZm9yX3VzKQotCQlpZiAoIWllZWU4MDIxMV9yeChpZWVlLCBza2IsIHN0YXRzKSkKKwkJaWYgKCFsaWJpcHdfcngoaWVlZSwgc2tiLCBzdGF0cykpCiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCXJldHVybjsKIApAQCAtOTI4LDcgKzkyOSw3IEBACiAqIE1ha2UgdGhlciBzdHJ1Y3R1cmUgd2UgcmVhZCBmcm9tIHRoZSBiZWFjb24gcGFja2V0IGhhcwogKiB0aGUgcmlnaHQgdmFsdWVzCiAqLwotc3RhdGljIGludCBpZWVlODAyMTFfdmVyaWZ5X3Fvc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKK3N0YXRpYyBpbnQgbGliaXB3X3ZlcmlmeV9xb3NfaW5mbyhzdHJ1Y3QgbGliaXB3X3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50CiAJCQkJICAgICAqaW5mb19lbGVtZW50LCBpbnQgc3ViX3R5cGUpCiB7CiAKQEAgLTk0NywxMiArOTQ4LDEyIEBACiAvKgogICogUGFyc2UgYSBRb1MgcGFyYW1ldGVyIGVsZW1lbnQKICAqLwotc3RhdGljIGludCBpZWVlODAyMTFfcmVhZF9xb3NfcGFyYW1fZWxlbWVudChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJfaW5mbwotCQkJCQkgICAgKmVsZW1lbnRfcGFyYW0sIHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50CitzdGF0aWMgaW50IGxpYmlwd19yZWFkX3Fvc19wYXJhbV9lbGVtZW50KHN0cnVjdCBsaWJpcHdfcW9zX3BhcmFtZXRlcl9pbmZvCisJCQkJCSAgICAqZWxlbWVudF9wYXJhbSwgc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQKIAkJCQkJICAgICppbmZvX2VsZW1lbnQpCiB7CiAJaW50IHJldCA9IDA7Ci0JdTE2IHNpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVyX2luZm8pIC0gMjsKKwl1MTYgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbGliaXB3X3Fvc19wYXJhbWV0ZXJfaW5mbykgLSAyOwogCiAJaWYgKChpbmZvX2VsZW1lbnQgPT0gTlVMTCkgfHwgKGVsZW1lbnRfcGFyYW0gPT0gTlVMTCkpCiAJCXJldHVybiAtMTsKQEAgLTk2NSw3ICs5NjYsNyBAQAogCX0gZWxzZQogCQlyZXQgPSAtMTsKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IGllZWU4MDIxMV92ZXJpZnlfcW9zX2luZm8oJmVsZW1lbnRfcGFyYW0tPmluZm9fZWxlbWVudCwKKwkJcmV0ID0gbGliaXB3X3ZlcmlmeV9xb3NfaW5mbygmZWxlbWVudF9wYXJhbS0+aW5mb19lbGVtZW50LAogCQkJCQkJUU9TX09VSV9QQVJBTV9TVUJfVFlQRSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTk3MywxMyArOTc0LDEzIEBACiAvKgogICogUGFyc2UgYSBRb1MgaW5mb3JtYXRpb24gZWxlbWVudAogICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9yZWFkX3Fvc19pbmZvX2VsZW1lbnQoc3RydWN0Ci0JCQkJCSAgIGllZWU4MDIxMV9xb3NfaW5mb3JtYXRpb25fZWxlbWVudAotCQkJCQkgICAqZWxlbWVudF9pbmZvLCBzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudAorc3RhdGljIGludCBsaWJpcHdfcmVhZF9xb3NfaW5mb19lbGVtZW50KHN0cnVjdAorCQkJCQkgICBsaWJpcHdfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQKKwkJCQkJICAgKmVsZW1lbnRfaW5mbywgc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQKIAkJCQkJICAgKmluZm9fZWxlbWVudCkKIHsKIAlpbnQgcmV0ID0gMDsKLQl1MTYgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50KSAtIDI7CisJdTE2IHNpemUgPSBzaXplb2Yoc3RydWN0IGxpYmlwd19xb3NfaW5mb3JtYXRpb25fZWxlbWVudCkgLSAyOwogCiAJaWYgKGVsZW1lbnRfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC05OTUsNyArOTk2LDcgQEAKIAkJcmV0ID0gLTE7CiAKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IGllZWU4MDIxMV92ZXJpZnlfcW9zX2luZm8oZWxlbWVudF9pbmZvLAorCQlyZXQgPSBsaWJpcHdfdmVyaWZ5X3Fvc19pbmZvKGVsZW1lbnRfaW5mbywKIAkJCQkJCVFPU19PVUlfSU5GT19TVUJfVFlQRSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMDMsMTUgKzEwMDQsMTUgQEAKIC8qCiAgKiBXcml0ZSBRb1MgcGFyYW1ldGVycyBmcm9tIHRoZSBhYyBwYXJhbWV0ZXJzLgogICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV9xb3NfY29udmVydF9hY190b19wYXJhbWV0ZXJzKHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcl9pbmZvCitzdGF0aWMgaW50IGxpYmlwd19xb3NfY29udmVydF9hY190b19wYXJhbWV0ZXJzKHN0cnVjdAorCQkJCQkJICBsaWJpcHdfcW9zX3BhcmFtZXRlcl9pbmZvCiAJCQkJCQkgICpwYXJhbV9lbG0sIHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcnMKKwkJCQkJCSAgbGliaXB3X3Fvc19wYXJhbWV0ZXJzCiAJCQkJCQkgICpxb3NfcGFyYW0pCiB7CiAJaW50IHJjID0gMDsKIAlpbnQgaTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19hY19wYXJhbWV0ZXIgKmFjX3BhcmFtczsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19hY19wYXJhbWV0ZXIgKmFjX3BhcmFtczsKIAl1MzIgdHhvcDsKIAl1OCBjd19taW47CiAJdTggY3dfbWF4OwpAQCAtMTA0MiwyNyArMTA0MywyNyBAQAogICogcGFyYW1ldGVycyBlbGVtZW50LiBjaGVjayB0aGUgaW5mb3JtYXRpb24gZWxlbWVudCBsZW5ndGggdG8gZGVjaWRlCiAgKiB3aGljaCB0eXBlIHRvIHJlYWQKICAqLwotc3RhdGljIGludCBpZWVlODAyMTFfcGFyc2VfcW9zX2luZm9fcGFyYW1fSUUoc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQKK3N0YXRpYyBpbnQgbGliaXB3X3BhcnNlX3Fvc19pbmZvX3BhcmFtX0lFKHN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50CiAJCQkJCSAgICAgKmluZm9fZWxlbWVudCwKLQkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkJCSAgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCWludCByYyA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVycyAqcW9zX3BhcmFtID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHFvc19pbmZvX2VsZW1lbnQ7CisJc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVycyAqcW9zX3BhcmFtID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IHFvc19pbmZvX2VsZW1lbnQ7CiAKLQlyYyA9IGllZWU4MDIxMV9yZWFkX3Fvc19pbmZvX2VsZW1lbnQoJnFvc19pbmZvX2VsZW1lbnQsIGluZm9fZWxlbWVudCk7CisJcmMgPSBsaWJpcHdfcmVhZF9xb3NfaW5mb19lbGVtZW50KCZxb3NfaW5mb19lbGVtZW50LCBpbmZvX2VsZW1lbnQpOwogCiAJaWYgKHJjID09IDApIHsKIAkJbmV0d29yay0+cW9zX2RhdGEucGFyYW1fY291bnQgPSBxb3NfaW5mb19lbGVtZW50LmFjX2luZm8gJiAweDBGOwogCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19RT1NfSU5GT1JNQVRJT047CiAJfSBlbHNlIHsKLQkJc3RydWN0IGllZWU4MDIxMV9xb3NfcGFyYW1ldGVyX2luZm8gcGFyYW1fZWxlbWVudDsKKwkJc3RydWN0IGxpYmlwd19xb3NfcGFyYW1ldGVyX2luZm8gcGFyYW1fZWxlbWVudDsKIAotCQlyYyA9IGllZWU4MDIxMV9yZWFkX3Fvc19wYXJhbV9lbGVtZW50KCZwYXJhbV9lbGVtZW50LAorCQlyYyA9IGxpYmlwd19yZWFkX3Fvc19wYXJhbV9lbGVtZW50KCZwYXJhbV9lbGVtZW50LAogCQkJCQkJICAgICAgaW5mb19lbGVtZW50KTsKIAkJaWYgKHJjID09IDApIHsKIAkJCXFvc19wYXJhbSA9ICYobmV0d29yay0+cW9zX2RhdGEucGFyYW1ldGVycyk7Ci0JCQlpZWVlODAyMTFfcW9zX2NvbnZlcnRfYWNfdG9fcGFyYW1ldGVycygmcGFyYW1fZWxlbWVudCwKKwkJCWxpYmlwd19xb3NfY29udmVydF9hY190b19wYXJhbWV0ZXJzKCZwYXJhbV9lbGVtZW50LAogCQkJCQkJCSAgICAgICBxb3NfcGFyYW0pOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfUU9TX1BBUkFNRVRFUlM7CiAJCQluZXR3b3JrLT5xb3NfZGF0YS5wYXJhbV9jb3VudCA9CkBAIC0xMDcxLDcgKzEwNzIsNyBAQAogCX0KIAogCWlmIChyYyA9PSAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19RT1MoIlFvUyBpcyBzdXBwb3J0ZWRcbiIpOworCQlMSUJJUFdfREVCVUdfUU9TKCJRb1MgaXMgc3VwcG9ydGVkXG4iKTsKIAkJbmV0d29yay0+cW9zX2RhdGEuc3VwcG9ydGVkID0gMTsKIAl9CiAJcmV0dXJuIHJjOwpAQCAtMTExNiw5ICsxMTE3LDkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9wYXJzZV9pbmZvX3BhcmFtKHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50CitzdGF0aWMgaW50IGxpYmlwd19wYXJzZV9pbmZvX3BhcmFtKHN0cnVjdCBsaWJpcHdfaW5mb19lbGVtZW50CiAJCQkJICAgICAgKmluZm9fZWxlbWVudCwgdTE2IGxlbmd0aCwKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCisJCQkJICAgICAgc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrKQogewogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAJdTggaTsKQEAgLTExMjksNyArMTEzMCw3IEBACiAKIAl3aGlsZSAobGVuZ3RoID49IHNpemVvZigqaW5mb19lbGVtZW50KSkgewogCQlpZiAoc2l6ZW9mKCppbmZvX2VsZW1lbnQpICsgaW5mb19lbGVtZW50LT5sZW4gPiBsZW5ndGgpIHsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJJbmZvIGVsZW06IHBhcnNlIGZhaWxlZDogIgorCQkJTElCSVBXX0RFQlVHX01HTVQoIkluZm8gZWxlbTogcGFyc2UgZmFpbGVkOiAiCiAJCQkJCSAgICAgImluZm9fZWxlbWVudC0+bGVuICsgMiA+IGxlZnQgOiAiCiAJCQkJCSAgICAgImluZm9fZWxlbWVudC0+bGVuKzI9JXpkIGxlZnQ9JWQsIGlkPSVkLlxuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbiArCkBAIC0xMTUxLDcgKzExNTIsNyBAQAogCQkJCW1lbXNldChuZXR3b3JrLT5zc2lkICsgbmV0d29yay0+c3NpZF9sZW4sIDAsCiAJCQkJICAgICAgIElXX0VTU0lEX01BWF9TSVpFIC0gbmV0d29yay0+c3NpZF9sZW4pOwogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfU1NJRDogJyVzJyBsZW49JWQuXG4iLAorCQkJTElCSVBXX0RFQlVHX01HTVQoIldMQU5fRUlEX1NTSUQ6ICclcycgbGVuPSVkLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKTsKQEAgLTExNzAsMTcgKzExNzEsMTcgQEAKIAkJCQkJICAgICAgKHAgLSByYXRlc19zdHIpLCAiJTAyWCAiLAogCQkJCQkgICAgICBuZXR3b3JrLT5yYXRlc1tpXSk7CiAjZW5kaWYKLQkJCQlpZiAoaWVlZTgwMjExX2lzX29mZG1fcmF0ZQorCQkJCWlmIChsaWJpcHdfaXNfb2ZkbV9yYXRlCiAJCQkJICAgIChpbmZvX2VsZW1lbnQtPmRhdGFbaV0pKSB7CiAJCQkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX09GRE07CiAJCQkJCWlmIChpbmZvX2VsZW1lbnQtPmRhdGFbaV0gJgotCQkJCQkgICAgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykKKwkJCQkJICAgIExJQklQV19CQVNJQ19SQVRFX01BU0spCiAJCQkJCQluZXR3b3JrLT5mbGFncyAmPQogCQkJCQkJICAgIH5ORVRXT1JLX0hBU19DQ0s7CiAJCQkJfQogCQkJfQogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfU1VQUF9SQVRFUzogJyVzJyAoJWQpXG4iLAorCQkJTElCSVBXX0RFQlVHX01HTVQoIldMQU5fRUlEX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2xlbik7CiAJCQlicmVhazsKIApAQCAtMTE5Nyw2MSArMTE5OCw2MSBAQAogCQkJCQkgICAgICAocCAtIHJhdGVzX3N0ciksICIlMDJYICIsCiAJCQkJCSAgICAgIG5ldHdvcmstPnJhdGVzW2ldKTsKICNlbmRpZgotCQkJCWlmIChpZWVlODAyMTFfaXNfb2ZkbV9yYXRlCisJCQkJaWYgKGxpYmlwd19pc19vZmRtX3JhdGUKIAkJCQkgICAgKGluZm9fZWxlbWVudC0+ZGF0YVtpXSkpIHsKIAkJCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfT0ZETTsKIAkJCQkJaWYgKGluZm9fZWxlbWVudC0+ZGF0YVtpXSAmCi0JCQkJCSAgICBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKQorCQkJCQkgICAgTElCSVBXX0JBU0lDX1JBVEVfTUFTSykKIAkJCQkJCW5ldHdvcmstPmZsYWdzICY9CiAJCQkJCQkgICAgfk5FVFdPUktfSEFTX0NDSzsKIAkJCQl9CiAJCQl9CiAKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzogJyVzJyAoJWQpXG4iLAorCQkJTElCSVBXX0RFQlVHX01HTVQoIldMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOiAnJXMnICglZClcbiIsCiAJCQkJCSAgICAgcmF0ZXNfc3RyLCBuZXR3b3JrLT5yYXRlc19leF9sZW4pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9EU19QQVJBTVM6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfRFNfUEFSQU1TOiAlZFxuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9EU19QQVJBTVM6ICVkXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXSk7CiAJCQluZXR3b3JrLT5jaGFubmVsID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9GSF9QQVJBTVM6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfRkhfUEFSQU1TOiBpZ25vcmVkXG4iKTsKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9GSF9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9DRl9QQVJBTVM6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfQ0ZfUEFSQU1TOiBpZ25vcmVkXG4iKTsKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9DRl9QQVJBTVM6IGlnbm9yZWRcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9USU06CiAJCQluZXR3b3JrLT50aW0udGltX2NvdW50ID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+dGltLnRpbV9wZXJpb2QgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CisJCQlMSUJJUFdfREVCVUdfTUdNVCgiV0xBTl9FSURfVElNOiBwYXJ0aWFsbHkgaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAogCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgogCQkJbmV0d29yay0+ZXJwX3ZhbHVlID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfRVJQX1ZBTFVFOwotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9FUlBfU0VUOiAlZFxuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJNRklFX1RZUEVfRVJQX1NFVDogJWRcbiIsCiAJCQkJCSAgICAgbmV0d29yay0+ZXJwX3ZhbHVlKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CiAJCQluZXR3b3JrLT5hdGltX3dpbmRvdyA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9JQlNTX1BBUkFNUzogJWRcbiIsCisJCQlMSUJJUFdfREVCVUdfTUdNVCgiV0xBTl9FSURfSUJTU19QQVJBTVM6ICVkXG4iLAogCQkJCQkgICAgIG5ldHdvcmstPmF0aW1fd2luZG93KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgV0xBTl9FSURfQ0hBTExFTkdFOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CisJCQlMSUJJUFdfREVCVUdfTUdNVCgiV0xBTl9FSURfQ0hBTExFTkdFOiBpZ25vcmVkXG4iKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgV0xBTl9FSURfR0VORVJJQzoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9HRU5FUklDOiAlZCBieXRlc1xuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9HRU5FUklDOiAlZCBieXRlc1xuIiwKIAkJCQkJICAgICBpbmZvX2VsZW1lbnQtPmxlbik7Ci0JCQlpZiAoIWllZWU4MDIxMV9wYXJzZV9xb3NfaW5mb19wYXJhbV9JRShpbmZvX2VsZW1lbnQsCisJCQlpZiAoIWxpYmlwd19wYXJzZV9xb3NfaW5mb19wYXJhbV9JRShpbmZvX2VsZW1lbnQsCiAJCQkJCQkJICAgICAgIG5ldHdvcmspKQogCQkJCWJyZWFrOwogCkBAIC0xMjY4LDcgKzEyNjksNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBXTEFOX0VJRF9SU046Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfUlNOOiAlZCBieXRlc1xuIiwKKwkJCUxJQklQV19ERUJVR19NR01UKCJXTEFOX0VJRF9SU046ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCW5ldHdvcmstPnJzbl9pZV9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4gKyAyLAogCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7CkBAIC0xMzE4LDcgKzEzMTksNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UCisJCQlMSUJJUFdfREVCVUdfTUdNVAogCQkJICAgICgiVW5zdXBwb3J0ZWQgaW5mbyBlbGVtZW50OiAlcyAoJWQpXG4iLAogCQkJICAgICBnZXRfaW5mb19lbGVtZW50X3N0cmluZyhpbmZvX2VsZW1lbnQtPmlkKSwKIAkJCSAgICAgaW5mb19lbGVtZW50LT5pZCk7CkBAIC0xMzI3LDIwICsxMzI4LDIwIEBACiAKIAkJbGVuZ3RoIC09IHNpemVvZigqaW5mb19lbGVtZW50KSArIGluZm9fZWxlbWVudC0+bGVuOwogCQlpbmZvX2VsZW1lbnQgPQotCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICopJmluZm9fZWxlbWVudC0+CisJCSAgICAoc3RydWN0IGxpYmlwd19pbmZvX2VsZW1lbnQgKikmaW5mb19lbGVtZW50LT4KIAkJICAgIGRhdGFbaW5mb19lbGVtZW50LT5sZW5dOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9oYW5kbGVfYXNzb2NfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZQotCQkJCSAgICAgICAqZnJhbWUsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQorc3RhdGljIGludCBsaWJpcHdfaGFuZGxlX2Fzc29jX3Jlc3Aoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsIHN0cnVjdCBsaWJpcHdfYXNzb2NfcmVzcG9uc2UKKwkJCQkgICAgICAgKmZyYW1lLCBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgbmV0d29ya19yZXNwID0geworCXN0cnVjdCBsaWJpcHdfbmV0d29yayBuZXR3b3JrX3Jlc3AgPSB7CiAJCS5pYnNzX2RmcyA9IE5VTEwsCiAJfTsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmsgPSAmbmV0d29ya19yZXNwOworCXN0cnVjdCBsaWJpcHdfbmV0d29yayAqbmV0d29yayA9ICZuZXR3b3JrX3Jlc3A7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKIAogCW5ldHdvcmstPmZsYWdzID0gMDsKQEAgLTEzNjEsNyArMTM2Miw3IEBACiAJbmV0d29yay0+ZXJwX3ZhbHVlID0KIAkgICAgKG5ldHdvcmstPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykgPyAweDMgOiAweDA7CiAKLQlpZiAoc3RhdHMtPmZyZXEgPT0gSUVFRTgwMjExXzUyR0haX0JBTkQpIHsKKwlpZiAoc3RhdHMtPmZyZXEgPT0gTElCSVBXXzUyR0haX0JBTkQpIHsKIAkJLyogZm9yIEEgYmFuZCAoTm8gRFMgaW5mbykgKi8KIAkJbmV0d29yay0+Y2hhbm5lbCA9IHN0YXRzLT5yZWNlaXZlZF9jaGFubmVsOwogCX0gZWxzZQpAQCAtMTM3MCwxMiArMTM3MSwxMiBAQAogCW5ldHdvcmstPndwYV9pZV9sZW4gPSAwOwogCW5ldHdvcmstPnJzbl9pZV9sZW4gPSAwOwogCi0JaWYgKGllZWU4MDIxMV9wYXJzZV9pbmZvX3BhcmFtCisJaWYgKGxpYmlwd19wYXJzZV9pbmZvX3BhcmFtCiAJICAgIChmcmFtZS0+aW5mb19lbGVtZW50LCBzdGF0cy0+bGVuIC0gc2l6ZW9mKCpmcmFtZSksIG5ldHdvcmspKQogCQlyZXR1cm4gMTsKIAogCW5ldHdvcmstPm1vZGUgPSAwOwotCWlmIChzdGF0cy0+ZnJlcSA9PSBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwlpZiAoc3RhdHMtPmZyZXEgPT0gTElCSVBXXzUyR0haX0JBTkQpCiAJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0E7CiAJZWxzZSB7CiAJCWlmIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX09GRE0pCkBAIC0xMzk0LDEwICsxMzk1LDEwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX25ldHdvcmtfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZQorc3RhdGljIGludCBsaWJpcHdfbmV0d29ya19pbml0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLCBzdHJ1Y3QgbGliaXB3X3Byb2JlX3Jlc3BvbnNlCiAJCQkJCSAqYmVhY29uLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCisJCQkJCSBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmssCisJCQkJCSBzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzICpzdGF0cykKIHsKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwogCkBAIC0xNDIzLDcgKzE0MjQsNyBAQAogCW5ldHdvcmstPmVycF92YWx1ZSA9IChuZXR3b3JrLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpID8KIAkgICAgMHgzIDogMHgwOwogCi0JaWYgKHN0YXRzLT5mcmVxID09IElFRUU4MDIxMV81MkdIWl9CQU5EKSB7CisJaWYgKHN0YXRzLT5mcmVxID09IExJQklQV181MkdIWl9CQU5EKSB7CiAJCS8qIGZvciBBIGJhbmQgKE5vIERTIGluZm8pICovCiAJCW5ldHdvcmstPmNoYW5uZWwgPSBzdGF0cy0+cmVjZWl2ZWRfY2hhbm5lbDsKIAl9IGVsc2UKQEAgLTE0MzIsMTIgKzE0MzMsMTIgQEAKIAluZXR3b3JrLT53cGFfaWVfbGVuID0gMDsKIAluZXR3b3JrLT5yc25faWVfbGVuID0gMDsKIAotCWlmIChpZWVlODAyMTFfcGFyc2VfaW5mb19wYXJhbQorCWlmIChsaWJpcHdfcGFyc2VfaW5mb19wYXJhbQogCSAgICAoYmVhY29uLT5pbmZvX2VsZW1lbnQsIHN0YXRzLT5sZW4gLSBzaXplb2YoKmJlYWNvbiksIG5ldHdvcmspKQogCQlyZXR1cm4gMTsKIAogCW5ldHdvcmstPm1vZGUgPSAwOwotCWlmIChzdGF0cy0+ZnJlcSA9PSBJRUVFODAyMTFfNTJHSFpfQkFORCkKKwlpZiAoc3RhdHMtPmZyZXEgPT0gTElCSVBXXzUyR0haX0JBTkQpCiAJCW5ldHdvcmstPm1vZGUgPSBJRUVFX0E7CiAJZWxzZSB7CiAJCWlmIChuZXR3b3JrLT5mbGFncyAmIE5FVFdPUktfSEFTX09GRE0pCkBAIC0xNDQ3LDcgKzE0NDgsNyBAQAogCX0KIAogCWlmIChuZXR3b3JrLT5tb2RlID09IDApIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKKwkJTElCSVBXX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKIAkJCQkgICAgICJuZXR3b3JrLlxuIiwKIAkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgbmV0d29yay0+c3NpZCwKIAkJCQkJCSBuZXR3b3JrLT5zc2lkX2xlbiksCkBAIC0xNDYwLDggKzE0NjEsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19zYW1lX25ldHdvcmsoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpzcmMsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKmRzdCkKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3NhbWVfbmV0d29yayhzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKnNyYywKKwkJCQkgIHN0cnVjdCBsaWJpcHdfbmV0d29yayAqZHN0KQogewogCS8qIEEgbmV0d29yayBpcyBvbmx5IGEgZHVwbGljYXRlIGlmIHRoZSBjaGFubmVsLCBCU1NJRCwgYW5kIEVTU0lECiAJICogYWxsIG1hdGNoLiAgV2UgdHJlYXQgYWxsIDxoaWRkZW4+IHdpdGggdGhlIHNhbWUgQlNTSUQgYW5kIGNoYW5uZWwKQEAgLTE0NzIsMTMgKzE0NzMsMTMgQEAKIAkJIW1lbWNtcChzcmMtPnNzaWQsIGRzdC0+c3NpZCwgc3JjLT5zc2lkX2xlbikpOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfbmV0d29yayhzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKmRzdCwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqc3JjKQorc3RhdGljIHZvaWQgdXBkYXRlX25ldHdvcmsoc3RydWN0IGxpYmlwd19uZXR3b3JrICpkc3QsCisJCQkJICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKnNyYykKIHsKIAlpbnQgcW9zX2FjdGl2ZTsKIAl1OCBvbGRfcGFyYW07CiAKLQlpZWVlODAyMTFfbmV0d29ya19yZXNldChkc3QpOworCWxpYmlwd19uZXR3b3JrX3Jlc2V0KGRzdCk7CiAJZHN0LT5pYnNzX2RmcyA9IHNyYy0+aWJzc19kZnM7CiAKIAkvKiBXZSBvbmx5IHVwZGF0ZSB0aGUgc3RhdGlzdGljcyBpZiB0aGV5IHdlcmUgY3JlYXRlZCBieSByZWNlaXZpbmcKQEAgLTE0ODgsOSArMTQ4OSw5IEBACiAJICogZG93biB0aGUgc2lnbmFsIGxldmVsIG9mIGFuIEFQLiAqLwogCWlmIChkc3QtPmNoYW5uZWwgPT0gc3JjLT5zdGF0cy5yZWNlaXZlZF9jaGFubmVsKQogCQltZW1jcHkoJmRzdC0+c3RhdHMsICZzcmMtPnN0YXRzLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMpKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X3J4X3N0YXRzKSk7CiAJZWxzZQotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiTmV0d29yayAlcE0gaW5mbyByZWNlaXZlZCAiCisJCUxJQklQV19ERUJVR19TQ0FOKCJOZXR3b3JrICVwTSBpbmZvIHJlY2VpdmVkICIKIAkJCSJvZmYgY2hhbm5lbCAoJWQgdnMuICVkKVxuIiwgc3JjLT5ic3NpZCwKIAkJCWRzdC0+Y2hhbm5lbCwgc3JjLT5zdGF0cy5yZWNlaXZlZF9jaGFubmVsKTsKIApAQCAtMTUyMSw3ICsxNTIyLDcgQEAKIAlvbGRfcGFyYW0gPSBkc3QtPnFvc19kYXRhLm9sZF9wYXJhbV9jb3VudDsKIAlpZiAoZHN0LT5mbGFncyAmIE5FVFdPUktfSEFTX1FPU19NQVNLKQogCQltZW1jcHkoJmRzdC0+cW9zX2RhdGEsICZzcmMtPnFvc19kYXRhLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEpKTsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbGliaXB3X3Fvc19kYXRhKSk7CiAJZWxzZSB7CiAJCWRzdC0+cW9zX2RhdGEuc3VwcG9ydGVkID0gc3JjLT5xb3NfZGF0YS5zdXBwb3J0ZWQ7CiAJCWRzdC0+cW9zX2RhdGEucGFyYW1fY291bnQgPSBzcmMtPnFvc19kYXRhLnBhcmFtX2NvdW50OwpAQCAtMTUyOSwxMSArMTUzMCwxMSBAQAogCiAJaWYgKGRzdC0+cW9zX2RhdGEuc3VwcG9ydGVkID09IDEpIHsKIAkJaWYgKGRzdC0+c3NpZF9sZW4pCi0JCQlJRUVFODAyMTFfREVCVUdfUU9TCisJCQlMSUJJUFdfREVCVUdfUU9TCiAJCQkgICAgKCJRb1MgdGhlIG5ldHdvcmsgJXMgaXMgUW9TIHN1cHBvcnRlZFxuIiwKIAkJCSAgICAgZHN0LT5zc2lkKTsKIAkJZWxzZQotCQkJSUVFRTgwMjExX0RFQlVHX1FPUworCQkJTElCSVBXX0RFQlVHX1FPUwogCQkJICAgICgiUW9TIHRoZSBuZXR3b3JrIGlzIFFvUyBzdXBwb3J0ZWRcbiIpOwogCX0KIAlkc3QtPnFvc19kYXRhLmFjdGl2ZSA9IHFvc19hY3RpdmU7CkBAIC0xNTQ3LDI1ICsxNTQ4LDI1IEBACiAJcmV0dXJuIChXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdShmYykpID09IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19wcm9iZV9yZXNwb25zZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZQorc3RhdGljIHZvaWQgbGliaXB3X3Byb2Nlc3NfcHJvYmVfcmVzcG9uc2Uoc3RydWN0IGxpYmlwd19kZXZpY2UKIAkJCQkJCSAgICAqaWVlZSwgc3RydWN0Ci0JCQkJCQkgICAgaWVlZTgwMjExX3Byb2JlX3Jlc3BvbnNlCi0JCQkJCQkgICAgKmJlYWNvbiwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cworCQkJCQkJICAgIGxpYmlwd19wcm9iZV9yZXNwb25zZQorCQkJCQkJICAgICpiZWFjb24sIHN0cnVjdCBsaWJpcHdfcnhfc3RhdHMKIAkJCQkJCSAgICAqc3RhdHMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgbmV0d29yayA9IHsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgbmV0d29yayA9IHsKIAkJLmlic3NfZGZzID0gTlVMTCwKIAl9OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqdGFyZ2V0OwotCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqb2xkZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKnRhcmdldDsKKwlzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm9sZGVzdCA9IE5VTEw7CiAjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50ICppbmZvX2VsZW1lbnQgPSBiZWFjb24tPmluZm9fZWxlbWVudDsKKwlzdHJ1Y3QgbGliaXB3X2luZm9fZWxlbWVudCAqaW5mb19lbGVtZW50ID0gYmVhY29uLT5pbmZvX2VsZW1lbnQ7CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAKLQlJRUVFODAyMTFfREVCVUdfU0NBTigiJyVzJyAoJXBNIgorCUxJQklQV19ERUJVR19TQ0FOKCInJXMnICglcE0iCiAJCSAgICAgIik6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAogCQkgICAgIHByaW50X3NzaWQoc3NpZCwgaW5mb19lbGVtZW50LT5kYXRhLCBpbmZvX2VsZW1lbnQtPmxlbiksCiAJCSAgICAgYmVhY29uLT5oZWFkZXIuYWRkcjMsCkBAIC0xNTg2LDggKzE1ODcsOCBAQAogCQkgICAgIChiZWFjb24tPmNhcGFiaWxpdHkgJiBjcHVfdG9fbGUxNigxIDw8IDB4MSkpID8gJzEnIDogJzAnLAogCQkgICAgIChiZWFjb24tPmNhcGFiaWxpdHkgJiBjcHVfdG9fbGUxNigxIDw8IDB4MCkpID8gJzEnIDogJzAnKTsKIAotCWlmIChpZWVlODAyMTFfbmV0d29ya19pbml0KGllZWUsIGJlYWNvbiwgJm5ldHdvcmssIHN0YXRzKSkgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRHJvcHBlZCAnJXMnICglcE0pIHZpYSAlcy5cbiIsCisJaWYgKGxpYmlwd19uZXR3b3JrX2luaXQoaWVlZSwgYmVhY29uLCAmbmV0d29yaywgc3RhdHMpKSB7CisJCUxJQklQV19ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgaW5mb19lbGVtZW50LT5kYXRhLAogCQkJCQkJIGluZm9fZWxlbWVudC0+bGVuKSwKIAkJCQkgICAgIGJlYWNvbi0+aGVhZGVyLmFkZHIzLApAQCAtMTYyNCwyMSArMTYyNSwyMSBAQAogCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2xvdHMsIGV4cGlyZSB0aGUgb2xkZXN0ICovCiAJCQlsaXN0X2RlbCgmb2xkZXN0LT5saXN0KTsKIAkJCXRhcmdldCA9IG9sZGVzdDsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCVwTSkgZnJvbSAiCisJCQlMSUJJUFdfREVCVUdfU0NBTigiRXhwaXJlZCAnJXMnICglcE0pIGZyb20gIgogCQkJCQkgICAgICJuZXR3b3JrIGxpc3QuXG4iLAogCQkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgdGFyZ2V0LT5zc2lkLAogCQkJCQkJCSB0YXJnZXQtPnNzaWRfbGVuKSwKIAkJCQkJICAgICB0YXJnZXQtPmJzc2lkKTsKLQkJCWllZWU4MDIxMV9uZXR3b3JrX3Jlc2V0KHRhcmdldCk7CisJCQlsaWJpcHdfbmV0d29ya19yZXNldCh0YXJnZXQpOwogCQl9IGVsc2UgewogCQkJLyogT3RoZXJ3aXNlIGp1c3QgcHVsbCBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KIAkJCXRhcmdldCA9IGxpc3RfZW50cnkoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaywgbGlzdCk7CisJCQkJCSAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmssIGxpc3QpOwogCQkJbGlzdF9kZWwoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCk7CiAJCX0KIAogI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCisJCUxJQklQV19ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgcHJpbnRfc3NpZChzc2lkLCBuZXR3b3JrLnNzaWQsCiAJCQkJCQkgbmV0d29yay5zc2lkX2xlbiksCiAJCQkJICAgICBuZXR3b3JrLmJzc2lkLApAQCAtMTY0OSw3ICsxNjUwLDcgQEAKIAkJbmV0d29yay5pYnNzX2RmcyA9IE5VTEw7CiAJCWxpc3RfYWRkX3RhaWwoJnRhcmdldC0+bGlzdCwgJmllZWUtPm5ldHdvcmtfbGlzdCk7CiAJfSBlbHNlIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKKwkJTElCSVBXX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgdGFyZ2V0LT5zc2lkLAogCQkJCQkJIHRhcmdldC0+c3NpZF9sZW4pLAogCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCwKQEAgLTE2NzAsMTIxICsxNjcxLDEyMSBAQAogCX0KIH0KIAotdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKK3ZvaWQgbGliaXB3X3J4X21ndChzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKKwkJICAgICAgc3RydWN0IGxpYmlwd19oZHJfNGFkZHIgKmhlYWRlciwKKwkJICAgICAgc3RydWN0IGxpYmlwd19yeF9zdGF0cyAqc3RhdHMpCiB7CiAJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdShoZWFkZXItPmZyYW1lX2N0bCkpKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIEFTU09DSUFUSU9OIFJFU1BPTlNFICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBBU1NPQ0lBVElPTiBSRVNQT05TRSAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7Ci0JCWllZWU4MDIxMV9oYW5kbGVfYXNzb2NfcmVzcChpZWVlLAotCQkJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKikKKwkJbGliaXB3X2hhbmRsZV9hc3NvY19yZXNwKGllZWUsCisJCQkJCSAgICAoc3RydWN0IGxpYmlwd19hc3NvY19yZXNwb25zZSAqKQogCQkJCQkgICAgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgUkVBU1NPQ0lBVElPTiBSRVNQT05TRSAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgUkVBU1NPQ0lBVElPTiBSRVNQT05TRSAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgYXV0aCAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgYXV0aCAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAKIAkJaWYgKGllZWUtPmhhbmRsZV9wcm9iZV9yZXF1ZXN0ICE9IE5VTEwpCiAJCQlpZWVlLT5oYW5kbGVfcHJvYmVfcmVxdWVzdChpZWVlLT5kZXYsCiAJCQkJCQkgICAoc3RydWN0Ci0JCQkJCQkgICAgaWVlZTgwMjExX3Byb2JlX3JlcXVlc3QgKikKKwkJCQkJCSAgICBsaWJpcHdfcHJvYmVfcmVxdWVzdCAqKQogCQkJCQkJICAgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIFBST0JFIFJFU1BPTlNFICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBQUk9CRSBSRVNQT05TRSAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJQcm9iZSByZXNwb25zZVxuIik7Ci0JCWllZWU4MDIxMV9wcm9jZXNzX3Byb2JlX3Jlc3BvbnNlKGllZWUsCisJCUxJQklQV19ERUJVR19TQ0FOKCJQcm9iZSByZXNwb25zZVxuIik7CisJCWxpYmlwd19wcm9jZXNzX3Byb2JlX3Jlc3BvbnNlKGllZWUsCiAJCQkJCQkgKHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKikKKwkJCQkJCSAgbGliaXB3X3Byb2JlX3Jlc3BvbnNlICopCiAJCQkJCQkgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgQkVBQ09OICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBCRUFDT04gKCVkKVxuIiwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1CiAJCQkJCQkgICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOwotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQmVhY29uXG4iKTsKLQkJaWVlZTgwMjExX3Byb2Nlc3NfcHJvYmVfcmVzcG9uc2UoaWVlZSwKKwkJTElCSVBXX0RFQlVHX1NDQU4oIkJlYWNvblxuIik7CisJCWxpYmlwd19wcm9jZXNzX3Byb2JlX3Jlc3BvbnNlKGllZWUsCiAJCQkJCQkgKHN0cnVjdAotCQkJCQkJICBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKikKKwkJCQkJCSAgbGliaXB3X3Byb2JlX3Jlc3BvbnNlICopCiAJCQkJCQkgaGVhZGVyLCBzdGF0cyk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CiAKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIGF1dGggKCVkKVxuIiwKKwkJTElCSVBXX0RFQlVHX01HTVQoInJlY2VpdmVkIGF1dGggKCVkKVxuIiwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGxlMTZfdG9fY3B1CiAJCQkJCQkgICAgICAgKGhlYWRlci0+ZnJhbWVfY3RsKSkpOwogCiAJCWlmIChpZWVlLT5oYW5kbGVfYXV0aCAhPSBOVUxMKQogCQkJaWVlZS0+aGFuZGxlX2F1dGgoaWVlZS0+ZGV2LAotCQkJCQkgIChzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKiloZWFkZXIpOworCQkJCQkgIChzdHJ1Y3QgbGliaXB3X2F1dGggKiloZWFkZXIpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgogCQlpZiAoaWVlZS0+aGFuZGxlX2Rpc2Fzc29jICE9IE5VTEwpCiAJCQlpZWVlLT5oYW5kbGVfZGlzYXNzb2MoaWVlZS0+ZGV2LAotCQkJCQkgICAgICAoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqKQorCQkJCQkgICAgICAoc3RydWN0IGxpYmlwd19kaXNhc3NvYyAqKQogCQkJCQkgICAgICBoZWFkZXIpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIkFDVElPTlxuIik7CisJCUxJQklQV19ERUJVR19NR01UKCJBQ1RJT05cbiIpOwogCQlpZiAoaWVlZS0+aGFuZGxlX2FjdGlvbikKIAkJCWllZWUtPmhhbmRsZV9hY3Rpb24oaWVlZS0+ZGV2LAotCQkJCQkgICAgKHN0cnVjdCBpZWVlODAyMTFfYWN0aW9uICopCisJCQkJCSAgICAoc3RydWN0IGxpYmlwd19hY3Rpb24gKikKIAkJCQkJICAgIGhlYWRlciwgc3RhdHMpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVROgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgcmVhc3NvYyAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgcmVhc3NvYyAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIiVzOiBJRUVFODAyMTFfUkVBU1NPQ19SRVEgcmVjZWl2ZWRcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCIlczogTElCSVBXX1JFQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAogCQkJCSAgICAgaWVlZS0+ZGV2LT5uYW1lKTsKIAkJaWYgKGllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QgIT0gTlVMTCkKIAkJCWllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QoaWVlZS0+ZGV2LAotCQkJCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX3JlYXNzb2NfcmVxdWVzdCAqKQorCQkJCQkJICAgIChzdHJ1Y3QgbGliaXB3X3JlYXNzb2NfcmVxdWVzdCAqKQogCQkJCQkJICAgICBoZWFkZXIpOwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUToKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoInJlY2VpdmVkIGFzc29jICglZClcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCJyZWNlaXZlZCBhc3NvYyAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7CiAKLQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIiVzOiBJRUVFODAyMTFfQVNTT0NfUkVRIHJlY2VpdmVkXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgiJXM6IExJQklQV19BU1NPQ19SRVEgcmVjZWl2ZWRcbiIsCiAJCQkJICAgICBpZWVlLT5kZXYtPm5hbWUpOwogCQlpZiAoaWVlZS0+aGFuZGxlX2Fzc29jX3JlcXVlc3QgIT0gTlVMTCkKIAkJCWllZWUtPmhhbmRsZV9hc3NvY19yZXF1ZXN0KGllZWUtPmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiREVBVVRIXG4iKTsKKwkJTElCSVBXX0RFQlVHX01HTVQoIkRFQVVUSFxuIik7CiAJCWlmIChpZWVlLT5oYW5kbGVfZGVhdXRoICE9IE5VTEwpCiAJCQlpZWVlLT5oYW5kbGVfZGVhdXRoKGllZWUtPmRldiwKLQkJCQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqKQorCQkJCQkgICAgKHN0cnVjdCBsaWJpcHdfZGVhdXRoICopCiAJCQkJCSAgICBoZWFkZXIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgVU5LTk9XTiAoJWQpXG4iLAorCQlMSUJJUFdfREVCVUdfTUdNVCgicmVjZWl2ZWQgVU5LTk9XTiAoJWQpXG4iLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUobGUxNl90b19jcHUKIAkJCQkJCSAgICAgICAoaGVhZGVyLT5mcmFtZV9jdGwpKSk7Ci0JCUlFRUU4MDIxMV9ERUJVR19NR01UKCIlczogVW5rbm93biBtYW5hZ2VtZW50IHBhY2tldDogJWRcbiIsCisJCUxJQklQV19ERUJVR19NR01UKCIlczogVW5rbm93biBtYW5hZ2VtZW50IHBhY2tldDogJWRcbiIsCiAJCQkJICAgICBpZWVlLT5kZXYtPm5hbWUsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShsZTE2X3RvX2NwdQogCQkJCQkJICAgICAgIChoZWFkZXItPmZyYW1lX2N0bCkpKTsKQEAgLTE3OTIsNiArMTc5Myw2IEBACiAJfQogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfcnhfYW55KTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X21ndCk7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeCk7CitFWFBPUlRfU1lNQk9MX0dQTChsaWJpcHdfcnhfYW55KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3J4X21ndCk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd19yeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwppbmRleCBkYTJhZDU0Li5kYThiZWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJsaWJpcHcuaCIKIAogLyoKIApAQCAtMTI2LDEyICsxMjYsMTIgQEAKIHN0YXRpYyB1OCBQODAyXzFIX09VSVtQODAyMTFfT1VJX0xFTl0gPSB7IDB4MDAsIDB4MDAsIDB4ZjggfTsKIHN0YXRpYyB1OCBSRkMxMDQyX09VSVtQODAyMTFfT1VJX0xFTl0gPSB7IDB4MDAsIDB4MDAsIDB4MDAgfTsKIAotc3RhdGljIGludCBpZWVlODAyMTFfY29weV9zbmFwKHU4ICogZGF0YSwgX19iZTE2IGhfcHJvdG8pCitzdGF0aWMgaW50IGxpYmlwd19jb3B5X3NuYXAodTggKiBkYXRhLCBfX2JlMTYgaF9wcm90bykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3NuYXBfaGRyICpzbmFwOworCXN0cnVjdCBsaWJpcHdfc25hcF9oZHIgKnNuYXA7CiAJdTggKm91aTsKIAotCXNuYXAgPSAoc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkciAqKWRhdGE7CisJc25hcCA9IChzdHJ1Y3QgbGliaXB3X3NuYXBfaGRyICopZGF0YTsKIAlzbmFwLT5kc2FwID0gMHhhYTsKIAlzbmFwLT5zc2FwID0gMHhhYTsKIAlzbmFwLT5jdHJsID0gMHgwMzsKQEAgLTE0OSw3ICsxNDksNyBAQAogCXJldHVybiBTTkFQX1NJWkUgKyBzaXplb2YodTE2KTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfZW5jcnlwdF9mcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKK3N0YXRpYyBpbnQgbGliaXB3X2VuY3J5cHRfZnJhZ21lbnQoc3RydWN0IGxpYmlwd19kZXZpY2UgKmllZWUsCiAJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKmZyYWcsIGludCBoZHJfbGVuKQogewogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9CkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKnR4YikKK3ZvaWQgbGliaXB3X3R4Yl9mcmVlKHN0cnVjdCBsaWJpcHdfdHhiICp0eGIpCiB7CiAJaW50IGk7CiAJaWYgKHVubGlrZWx5KCF0eGIpKQpAQCAtMTg4LDE3ICsxODgsMTcgQEAKIAlrZnJlZSh0eGIpOwogfQogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV90eGIgKmllZWU4MDIxMV9hbGxvY190eGIoaW50IG5yX2ZyYWdzLCBpbnQgdHhiX3NpemUsCitzdGF0aWMgc3RydWN0IGxpYmlwd190eGIgKmxpYmlwd19hbGxvY190eGIoaW50IG5yX2ZyYWdzLCBpbnQgdHhiX3NpemUsCiAJCQkJCQkgaW50IGhlYWRyb29tLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqdHhiOworCXN0cnVjdCBsaWJpcHdfdHhiICp0eGI7CiAJaW50IGk7Ci0JdHhiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eGIpICsgKHNpemVvZih1OCAqKSAqIG5yX2ZyYWdzKSwKKwl0eGIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGliaXB3X3R4YikgKyAoc2l6ZW9mKHU4ICopICogbnJfZnJhZ3MpLAogCQkgICAgICBnZnBfbWFzayk7CiAJaWYgKCF0eGIpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KHR4YiwgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhiKSk7CisJbWVtc2V0KHR4YiwgMCwgc2l6ZW9mKHN0cnVjdCBsaWJpcHdfdHhiKSk7CiAJdHhiLT5ucl9mcmFncyA9IG5yX2ZyYWdzOwogCXR4Yi0+ZnJhZ19zaXplID0gdHhiX3NpemU7CiAKQEAgLTIyMCw3ICsyMjAsNyBAQAogCXJldHVybiB0eGI7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NsYXNzaWZ5KHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGxpYmlwd19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBldGhoZHIgKmV0aDsKIAlzdHJ1Y3QgaXBoZHIgKmlwOwpAQCAtMjUyLDExICsyNTIsMTEgQEAKIAogLyogSW5jb21pbmcgc2tiIGlzIGNvbnZlcnRlZCB0byBhIHR4YiB3aGljaCBjb25zaXN0cyBvZgogICogYSBibG9jayBvZiA4MDIuMTEgZnJhZ21lbnQgcGFja2V0cyAoc3RvcmVkIGFzIHNrYnMpICovCi1pbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGxpYmlwd194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhiICp0eGIgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICpmcmFnX2hkcjsKKwlzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGxpYmlwd190eGIgKnR4YiA9IE5VTEw7CisJc3RydWN0IGxpYmlwd19oZHJfM2FkZHJxb3MgKmZyYWdfaGRyOwogCWludCBpLCBieXRlc19wZXJfZnJhZywgbnJfZnJhZ3MsIGJ5dGVzX2xhc3RfZnJhZywgZnJhZ19zaXplLAogCSAgICBydHNfcmVxdWlyZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCV9fYmUxNiBldGhlcl90eXBlOwogCWludCBieXRlcywgZmMsIGhkcl9sZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9mcmFnOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zIGhlYWRlciA9IHsvKiBFbnN1cmUgemVybyBpbml0aWFsaXplZCAqLworCXN0cnVjdCBsaWJpcHdfaGRyXzNhZGRycW9zIGhlYWRlciA9IHsvKiBFbnN1cmUgemVybyBpbml0aWFsaXplZCAqLwogCQkuZHVyYXRpb25faWQgPSAwLAogCQkuc2VxX2N0bCA9IDAsCiAJCS5xb3NfY3RsID0gMApAQCAtMzMxLDE0ICszMzEsMTQgQEAKIAkJbWVtY3B5KGhlYWRlci5hZGRyMiwgc3JjLCBFVEhfQUxFTik7CiAJCW1lbWNweShoZWFkZXIuYWRkcjMsIGllZWUtPmJzc2lkLCBFVEhfQUxFTik7CiAJfQotCWhkcl9sZW4gPSBJRUVFODAyMTFfM0FERFJfTEVOOworCWhkcl9sZW4gPSBMSUJJUFdfM0FERFJfTEVOOwogCiAJaWYgKGllZWUtPmlzX3Fvc19hY3RpdmUgJiYgaWVlZS0+aXNfcW9zX2FjdGl2ZShkZXYsIHNrYikpIHsKIAkJZmMgfD0gSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBOwogCQloZHJfbGVuICs9IDI7CiAKLQkJc2tiLT5wcmlvcml0eSA9IGllZWU4MDIxMV9jbGFzc2lmeShza2IpOwotCQloZWFkZXIucW9zX2N0bCB8PSBjcHVfdG9fbGUxNihza2ItPnByaW9yaXR5ICYgSUVFRTgwMjExX1FDVExfVElEKTsKKwkJc2tiLT5wcmlvcml0eSA9IGxpYmlwd19jbGFzc2lmeShza2IpOworCQloZWFkZXIucW9zX2N0bCB8PSBjcHVfdG9fbGUxNihza2ItPnByaW9yaXR5ICYgTElCSVBXX1FDVExfVElEKTsKIAl9CiAJaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKIApAQCAtMzYyLDEyICszNjIsMTIgQEAKIAkJc2tiX3Jlc2VydmUoc2tiX25ldywgY3J5cHQtPm9wcy0+ZXh0cmFfbXNkdV9wcmVmaXhfbGVuKTsKIAkJbWVtY3B5KHNrYl9wdXQoc2tiX25ldywgaGRyX2xlbiksICZoZWFkZXIsIGhkcl9sZW4pOwogCQlzbmFwcGVkID0gMTsKLQkJaWVlZTgwMjExX2NvcHlfc25hcChza2JfcHV0KHNrYl9uZXcsIFNOQVBfU0laRSArIHNpemVvZih1MTYpKSwKKwkJbGliaXB3X2NvcHlfc25hcChza2JfcHV0KHNrYl9uZXcsIFNOQVBfU0laRSArIHNpemVvZih1MTYpKSwKIAkJCQkgICAgZXRoZXJfdHlwZSk7CiAJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBza2JfcHV0KHNrYl9uZXcsIHNrYi0+bGVuKSwgc2tiLT5sZW4pOwogCQlyZXMgPSBjcnlwdC0+b3BzLT5lbmNyeXB0X21zZHUoc2tiX25ldywgaGRyX2xlbiwgY3J5cHQtPnByaXYpOwogCQlpZiAocmVzIDwgMCkgewotCQkJSUVFRTgwMjExX0VSUk9SKCJtc2R1IGVuY3J5cHRpb24gZmFpbGVkXG4iKTsKKwkJCUxJQklQV19FUlJPUigibXNkdSBlbmNyeXB0aW9uIGZhaWxlZFxuIik7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2JfbmV3KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CkBAIC0zOTMsOCArMzkzLDggQEAKIAkJICogZm9yIGl0IHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvZiBwYXlsb2FkIHNwYWNlLiAqLwogCQlieXRlc19wZXJfZnJhZyA9IGZyYWdfc2l6ZSAtIGhkcl9sZW47CiAJCWlmIChpZWVlLT5jb25maWcgJgotCQkgICAgKENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgfCBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTKSkKLQkJCWJ5dGVzX3Blcl9mcmFnIC09IElFRUU4MDIxMV9GQ1NfTEVOOworCQkgICAgKENGR19MSUJJUFdfQ09NUFVURV9GQ1MgfCBDRkdfTElCSVBXX1JFU0VSVkVfRkNTKSkKKwkJCWJ5dGVzX3Blcl9mcmFnIC09IExJQklQV19GQ1NfTEVOOwogCiAJCS8qIEVhY2ggZnJhZ21lbnQgbWF5IG5lZWQgdG8gaGF2ZSByb29tIGZvciBlbmNyeXB0aW9uZwogCQkgKiBwcmUvcG9zdGZpeCAqLwpAQCAtNDE3LDE0ICs0MTcsMTQgQEAKIAl9CiAKIAlydHNfcmVxdWlyZWQgPSAoZnJhZ19zaXplID4gaWVlZS0+cnRzCi0JCQkmJiBpZWVlLT5jb25maWcgJiBDRkdfSUVFRTgwMjExX1JUUyk7CisJCQkmJiBpZWVlLT5jb25maWcgJiBDRkdfTElCSVBXX1JUUyk7CiAJaWYgKHJ0c19yZXF1aXJlZCkKIAkJbnJfZnJhZ3MrKzsKIAogCS8qIFdoZW4gd2UgYWxsb2NhdGUgdGhlIFRYQiB3ZSBhbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSByZXNlcnZlCiAJICogYW5kIGZ1bGwgZnJhZ21lbnQgYnl0ZXMgKGJ5dGVzX3Blcl9mcmFnIGRvZXNuJ3QgaW5jbHVkZSBwcmVmaXgsCiAJICogcG9zdGZpeCwgaGVhZGVyLCBGQ1MsIGV0Yy4pICovCi0JdHhiID0gaWVlZTgwMjExX2FsbG9jX3R4Yihucl9mcmFncywgZnJhZ19zaXplLAorCXR4YiA9IGxpYmlwd19hbGxvY190eGIobnJfZnJhZ3MsIGZyYWdfc2l6ZSwKIAkJCQkgIGllZWUtPnR4X2hlYWRyb29tLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIXR4YikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBUWEJcbiIsCkBAIC00NDEsNyArNDQxLDcgQEAKIAlpZiAocnRzX3JlcXVpcmVkKSB7CiAJCXNrYl9mcmFnID0gdHhiLT5mcmFnbWVudHNbMF07CiAJCWZyYWdfaGRyID0KLQkJICAgIChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKXNrYl9wdXQoc2tiX2ZyYWcsIGhkcl9sZW4pOworCQkgICAgKHN0cnVjdCBsaWJpcHdfaGRyXzNhZGRycW9zICopc2tiX3B1dChza2JfZnJhZywgaGRyX2xlbik7CiAKIAkJLyoKIAkJICogU2V0IGhlYWRlciBmcmFtZV9jdGwgdG8gdGhlIFJUUy4KQEAgLTQ1Niw3ICs0NTYsNyBAQAogCQloZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOwogCiAJCWlmIChpZWVlLT5jb25maWcgJgotCQkgICAgKENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgfCBDRkdfSUVFRTgwMjExX1JFU0VSVkVfRkNTKSkKKwkJICAgIChDRkdfTElCSVBXX0NPTVBVVEVfRkNTIHwgQ0ZHX0xJQklQV19SRVNFUlZFX0ZDUykpCiAJCQlza2JfcHV0KHNrYl9mcmFnLCA0KTsKIAogCQl0eGItPnJ0c19pbmNsdWRlZCA9IDE7CkBAIC00NzIsNyArNDcyLDcgQEAKIAkJCQkgICAgY3J5cHQtPm9wcy0+ZXh0cmFfbXBkdV9wcmVmaXhfbGVuKTsKIAogCQlmcmFnX2hkciA9Ci0JCSAgICAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHJxb3MgKilza2JfcHV0KHNrYl9mcmFnLCBoZHJfbGVuKTsKKwkJICAgIChzdHJ1Y3QgbGliaXB3X2hkcl8zYWRkcnFvcyAqKXNrYl9wdXQoc2tiX2ZyYWcsIGhkcl9sZW4pOwogCQltZW1jcHkoZnJhZ19oZHIsICZoZWFkZXIsIGhkcl9sZW4pOwogCiAJCS8qIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IGZyYWdtZW50LCB0aGVuIGFkZCB0aGUgTU9SRUZSQUdTCkBAIC00ODcsNyArNDg3LDcgQEAKIAkJfQogCiAJCWlmIChpID09IDAgJiYgIXNuYXBwZWQpIHsKLQkJCWllZWU4MDIxMV9jb3B5X3NuYXAoc2tiX3B1dAorCQkJbGliaXB3X2NvcHlfc25hcChza2JfcHV0CiAJCQkJCSAgICAoc2tiX2ZyYWcsIFNOQVBfU0laRSArIHNpemVvZih1MTYpKSwKIAkJCQkJICAgIGV0aGVyX3R5cGUpOwogCQkJYnl0ZXMgLT0gU05BUF9TSVpFICsgc2l6ZW9mKHUxNik7CkBAIC01MDEsNyArNTAxLDcgQEAKIAkJLyogRW5jcnlwdGlvbiByb3V0aW5lIHdpbGwgbW92ZSB0aGUgaGVhZGVyIGZvcndhcmQgaW4gb3JkZXIKIAkJICogdG8gaW5zZXJ0IHRoZSBJViBiZXR3ZWVuIHRoZSBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkICovCiAJCWlmIChob3N0X2VuY3J5cHQpCi0JCQlpZWVlODAyMTFfZW5jcnlwdF9mcmFnbWVudChpZWVlLCBza2JfZnJhZywgaGRyX2xlbik7CisJCQlsaWJpcHdfZW5jcnlwdF9mcmFnbWVudChpZWVlLCBza2JfZnJhZywgaGRyX2xlbik7CiAJCWVsc2UgaWYgKGhvc3RfYnVpbGRfaXYpIHsKIAkJCWF0b21pY19pbmMoJmNyeXB0LT5yZWZjbnQpOwogCQkJaWYgKGNyeXB0LT5vcHMtPmJ1aWxkX2l2KQpAQCAtNTEzLDcgKzUxMyw3IEBACiAJCX0KIAogCQlpZiAoaWVlZS0+Y29uZmlnICYKLQkJICAgIChDRkdfSUVFRTgwMjExX0NPTVBVVEVfRkNTIHwgQ0ZHX0lFRUU4MDIxMV9SRVNFUlZFX0ZDUykpCisJCSAgICAoQ0ZHX0xJQklQV19DT01QVVRFX0ZDUyB8IENGR19MSUJJUFdfUkVTRVJWRV9GQ1MpKQogCQkJc2tiX3B1dChza2JfZnJhZywgNCk7CiAJfQogCkBAIC01MjMsMTcgKzUyMywxNyBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAlpZiAodHhiKSB7Ci0JCWludCByZXQgPSAoKmllZWUtPmhhcmRfc3RhcnRfeG1pdCkgKHR4YiwgZGV2LCBwcmlvcml0eSk7Ci0JCWlmIChyZXQgPT0gMCkgeworCQluZXRkZXZfdHhfdCByZXQgPSAoKmllZWUtPmhhcmRfc3RhcnRfeG1pdCkodHhiLCBkZXYsIHByaW9yaXR5KTsKKwkJaWYgKHJldCA9PSBORVRERVZfVFhfT0spIHsKIAkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSB0eGItPnBheWxvYWRfc2l6ZTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCi0JCWllZWU4MDIxMV90eGJfZnJlZSh0eGIpOworCQlsaWJpcHdfdHhiX2ZyZWUodHhiKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgICAgICBmYWlsZWQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwpAQCAtNTQxLDYgKzU0MSw2IEBACiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV94bWl0KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3htaXQpOwogCi1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV90eGJfZnJlZSk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd190eGJfZnJlZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwppbmRleCAzYzA4MTJkLi40ZDg5ZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMKQEAgLTI1LDcgKzI1LDcgQEAKICAgZmlsZSBjYWxsZWQgTElDRU5TRS4KIAogICBDb250YWN0IEluZm9ybWF0aW9uOgotICBKYW1lcyBQLiBLZXRyZW5vcyA8aXB3MjEwMC1hZG1pbkBsaW51eC5pbnRlbC5jb20+CisgIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM3LDkgKzM3LDkgQEAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAibGliaXB3LmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyICppZWVlODAyMTFfbW9kZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpsaWJpcHdfbW9kZXNbXSA9IHsKIAkiPyIsICJhIiwgImIiLCAiYWIiLCAiZyIsICJhZyIsICJiZyIsICJhYmciCiB9OwogCkBAIC01NCw5ICs1NCw5IEBACiB9CiAKICNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKLXN0YXRpYyBjaGFyICppZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitzdGF0aWMgY2hhciAqbGliaXB3X3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJCSAgICAgIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaywKKwkJCQkgICAgICBzdHJ1Y3QgbGliaXB3X25ldHdvcmsgKm5ldHdvcmssCiAJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbykKIHsKIAljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07CkBAIC04NCw3ICs4NCw3IEBACiAJLyogQWRkIHRoZSBwcm90b2NvbCBuYW1lICovCiAJaXdlLmNtZCA9IFNJT0NHSVdOQU1FOwogCXNucHJpbnRmKGl3ZS51Lm5hbWUsIElGTkFNU0laLCAiSUVFRSA4MDIuMTElcyIsCi0JCSBpZWVlODAyMTFfbW9kZXNbbmV0d29yay0+bW9kZV0pOworCQkgbGliaXB3X21vZGVzW25ldHdvcmstPm1vZGVdKTsKIAlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9DSEFSX0xFTik7CiAKIAkvKiBBZGQgbW9kZSAqLwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwogCS8qIE5vdGUgOiB1c2Vyc3BhY2UgYXV0b21hdGljYWxseSBjb21wdXRlcyBjaGFubmVsIHVzaW5nIGl3cmFuZ2UgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcShpZWVlLCBuZXR3b3JrLT5jaGFubmVsKTsKKwlpd2UudS5mcmVxLm0gPSBsaWJpcHdfY2hhbm5lbF90b19mcmVxKGllZWUsIG5ldHdvcmstPmNoYW5uZWwpOwogCWl3ZS51LmZyZXEuZSA9IDY7CiAJaXdlLnUuZnJlcS5pID0gMDsKIAlzdGFydCA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIHN0YXJ0LCBzdG9wLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CkBAIC0xNTUsNyArMTU1LDcgQEAKIAlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRCB8IElXX1FVQUxfTEVWRUxfVVBEQVRFRCB8CiAJICAgIElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKIAotCWlmICghKG5ldHdvcmstPnN0YXRzLm1hc2sgJiBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSSkpIHsKKwlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgTElCSVBXX1NUQVRNQVNLX1JTU0kpKSB7CiAJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRCB8CiAJCSAgICBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CiAJCWl3ZS51LnF1YWwucXVhbCA9IDA7CkBAIC0xODAsMTQgKzE4MCwxNCBAQAogCQkJaXdlLnUucXVhbC5xdWFsID0gMDsKIAl9CiAKLQlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX05PSVNFKSkgeworCWlmICghKG5ldHdvcmstPnN0YXRzLm1hc2sgJiBMSUJJUFdfU1RBVE1BU0tfTk9JU0UpKSB7CiAJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CiAJCWl3ZS51LnF1YWwubm9pc2UgPSAwOwogCX0gZWxzZSB7CiAJCWl3ZS51LnF1YWwubm9pc2UgPSBuZXR3b3JrLT5zdGF0cy5ub2lzZTsKIAl9CiAKLQlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCkpIHsKKwlpZiAoIShuZXR3b3JrLT5zdGF0cy5tYXNrICYgTElCSVBXX1NUQVRNQVNLX1NJR05BTCkpIHsKIAkJaXdlLnUucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKIAkJaXdlLnUucXVhbC5sZXZlbCA9IDA7CiAJfSBlbHNlIHsKQEAgLTIzNywxNCArMjM3LDE0IEBACiAJcCA9IGN1c3RvbTsKIAlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLCAiIENoYW5uZWwgZmxhZ3M6ICIpOwogCi0JaWYgKGllZWU4MDIxMV9nZXRfY2hhbm5lbF9mbGFncyhpZWVlLCBuZXR3b3JrLT5jaGFubmVsKSAmCi0JICAgIElFRUU4MDIxMV9DSF9JTlZBTElEKSB7CisJaWYgKGxpYmlwd19nZXRfY2hhbm5lbF9mbGFncyhpZWVlLCBuZXR3b3JrLT5jaGFubmVsKSAmCisJICAgIExJQklQV19DSF9JTlZBTElEKSB7CiAJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCQlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLCAiSU5WQUxJRCAiKTsKIAl9CiAKLQlpZiAoaWVlZTgwMjExX2dldF9jaGFubmVsX2ZsYWdzKGllZWUsIG5ldHdvcmstPmNoYW5uZWwpICYKLQkgICAgSUVFRTgwMjExX0NIX1JBREFSX0RFVEVDVCkgeworCWlmIChsaWJpcHdfZ2V0X2NoYW5uZWxfZmxhZ3MoaWVlZSwgbmV0d29yay0+Y2hhbm5lbCkgJgorCSAgICBMSUJJUFdfQ0hfUkFEQVJfREVURUNUKSB7CiAJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwogCQlwICs9IHNucHJpbnRmKHAsIE1BWF9DVVNUT01fTEVOIC0gKHAgLSBjdXN0b20pLCAiREZTICIpOwogCX0KQEAgLTI1OSwxMSArMjU5LDExIEBACiAKICNkZWZpbmUgU0NBTl9JVEVNX1NJWkUgMTI4CiAKLWludCBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCitpbnQgbGliaXB3X3d4X2dldF9zY2FuKHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcms7CisJc3RydWN0IGxpYmlwd19uZXR3b3JrICpuZXR3b3JrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAKQEAgLTI3Miw3ICsyNzIsNyBAQAogCWludCBpID0gMDsKIAlERUNMQVJFX1NTSURfQlVGKHNzaWQpOwogCi0JSUVFRTgwMjExX0RFQlVHX1dYKCJHZXR0aW5nIHNjYW5cbiIpOworCUxJQklQV19ERUJVR19XWCgiR2V0dGluZyBzY2FuXG4iKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI4NSwxMCArMjg1LDEwIEBACiAKIAkJaWYgKGllZWUtPnNjYW5fYWdlID09IDAgfHwKIAkJICAgIHRpbWVfYWZ0ZXIobmV0d29yay0+bGFzdF9zY2FubmVkICsgaWVlZS0+c2Nhbl9hZ2UsIGppZmZpZXMpKQotCQkJZXYgPSBpZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oaWVlZSwgZXYsIHN0b3AsIG5ldHdvcmssCisJCQlldiA9IGxpYmlwd190cmFuc2xhdGVfc2NhbihpZWVlLCBldiwgc3RvcCwgbmV0d29yaywKIAkJCQkJCSAgICAgIGluZm8pOwogCQllbHNlIHsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJOb3Qgc2hvd2luZyBuZXR3b3JrICclcyAoIgorCQkJTElCSVBXX0RFQlVHX1NDQU4oIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCiAJCQkJCSAgICAgIiVwTSknIGR1ZSB0byBhZ2UgKCV1bXMpLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJIG5ldHdvcmstPnNzaWRfbGVuKSwKQEAgLTMwMywxOCArMzAzLDE4IEBACiAJd3JxdS0+ZGF0YS5sZW5ndGggPSBldiAtIGV4dHJhOwogCXdycXUtPmRhdGEuZmxhZ3MgPSAwOwogCi0JSUVFRTgwMjExX0RFQlVHX1dYKCJleGl0OiAlZCBuZXR3b3JrcyByZXR1cm5lZC5cbiIsIGkpOworCUxJQklQV19ERUJVR19XWCgiZXhpdDogJWQgbmV0d29ya3MgcmV0dXJuZWQuXG4iLCBpKTsKIAogCXJldHVybiBlcnI7CiB9CiAKLWludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKK2ludCBsaWJpcHdfd3hfc2V0X2VuY29kZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleWJ1ZikKIHsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVycSA9ICYod3JxdS0+ZW5jb2RpbmcpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWMgPSB7CisJc3RydWN0IGxpYmlwd19zZWN1cml0eSBzZWMgPSB7CiAJCS5mbGFncyA9IDAKIAl9OwogCWludCBpLCBrZXksIGtleV9wcm92aWRlZCwgbGVuOwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJaW50IGhvc3RfY3J5cHRvID0gaWVlZS0+aG9zdF9lbmNyeXB0IHx8IGllZWUtPmhvc3RfZGVjcnlwdCB8fCBpZWVlLT5ob3N0X2J1aWxkX2l2OwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAKLQlJRUVFODAyMTFfREVCVUdfV1goIlNFVF9FTkNPREVcbiIpOworCUxJQklQV19ERUJVR19XWCgiU0VUX0VOQ09ERVxuIik7CiAKIAlrZXkgPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogCWlmIChrZXkpIHsKQEAgLTMzNSwxOCArMzM1LDE4IEBACiAJCWtleSA9IGllZWUtPmNyeXB0X2luZm8udHhfa2V5aWR4OwogCX0KIAotCUlFRUU4MDIxMV9ERUJVR19XWCgiS2V5OiAlZCBbJXNdXG4iLCBrZXksIGtleV9wcm92aWRlZCA/CisJTElCSVBXX0RFQlVHX1dYKCJLZXk6ICVkIFslc11cbiIsIGtleSwga2V5X3Byb3ZpZGVkID8KIAkJCSAgICJwcm92aWRlZCIgOiAiZGVmYXVsdCIpOwogCiAJY3J5cHQgPSAmaWVlZS0+Y3J5cHRfaW5mby5jcnlwdFtrZXldOwogCiAJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKIAkJaWYgKGtleV9wcm92aWRlZCAmJiAqY3J5cHQpIHsKLQkJCUlFRUU4MDIxMV9ERUJVR19XWCgiRGlzYWJsaW5nIGVuY3J5cHRpb24gb24ga2V5ICVkLlxuIiwKKwkJCUxJQklQV19ERUJVR19XWCgiRGlzYWJsaW5nIGVuY3J5cHRpb24gb24ga2V5ICVkLlxuIiwKIAkJCQkJICAga2V5KTsKIAkJCWxpYjgwMjExX2NyeXB0X2RlbGF5ZWRfZGVpbml0KCZpZWVlLT5jcnlwdF9pbmZvLCBjcnlwdCk7CiAJCX0gZWxzZQotCQkJSUVFRTgwMjExX0RFQlVHX1dYKCJEaXNhYmxpbmcgZW5jcnlwdGlvbi5cbiIpOworCQkJTElCSVBXX0RFQlVHX1dYKCJEaXNhYmxpbmcgZW5jcnlwdGlvbi5cbiIpOwogCiAJCS8qIENoZWNrIGFsbCB0aGUga2V5cyB0byBzZWUgaWYgYW55IGFyZSBzdGlsbCBjb25maWd1cmVkLAogCQkgKiBhbmQgaWYgbm8ga2V5IGluZGV4IHdhcyBwcm92aWRlZCwgZGUtaW5pdCB0aGVtIGFsbCAqLwpAQCAtNDEwLDcgKzQxMCw3IEBACiAKIAkvKiBJZiBhIG5ldyBrZXkgd2FzIHByb3ZpZGVkLCBzZXQgaXQgdXAgKi8KIAlpZiAoZXJxLT5sZW5ndGggPiAwKSB7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKICNlbmRpZgogCkBAIC00MTksNyArNDE5LDcgQEAKIAkJaWYgKGxlbiA+IGVycS0+bGVuZ3RoKQogCQkJbWVtc2V0KHNlYy5rZXlzW2tleV0gKyBlcnEtPmxlbmd0aCwgMCwKIAkJCSAgICAgICBsZW4gLSBlcnEtPmxlbmd0aCk7Ci0JCUlFRUU4MDIxMV9ERUJVR19XWCgiU2V0dGluZyBrZXkgJWQgdG8gJyVzJyAoJWQ6JWQgYnl0ZXMpXG4iLAorCQlMSUJJUFdfREVCVUdfV1goIlNldHRpbmcga2V5ICVkIHRvICclcycgKCVkOiVkIGJ5dGVzKVxuIiwKIAkJCQkgICBrZXksIHByaW50X3NzaWQoc3NpZCwgc2VjLmtleXNba2V5XSwgbGVuKSwKIAkJCQkgICBlcnEtPmxlbmd0aCwgbGVuKTsKIAkJc2VjLmtleV9zaXplc1trZXldID0gbGVuOwpAQCAtNDM4LDcgKzQzOCw3IEBACiAJCQkJCQkgICAgIE5VTEwsICgqY3J5cHQpLT5wcml2KTsKIAkJCWlmIChsZW4gPT0gMCkgewogCQkJCS8qIFNldCBhIGRlZmF1bHQga2V5IG9mIGFsbCAwICovCi0JCQkJSUVFRTgwMjExX0RFQlVHX1dYKCJTZXR0aW5nIGtleSAlZCB0byBhbGwgIgorCQkJCUxJQklQV19ERUJVR19XWCgiU2V0dGluZyBrZXkgJWQgdG8gYWxsICIKIAkJCQkJCSAgICJ6ZXJvLlxuIiwga2V5KTsKIAkJCQltZW1zZXQoc2VjLmtleXNba2V5XSwgMCwgMTMpOwogCQkJCSgqY3J5cHQpLT5vcHMtPnNldF9rZXkoc2VjLmtleXNba2V5XSwgMTMsIE5VTEwsCkBAIC00NDksNyArNDQ5LDcgQEAKIAkJfQogCQkvKiBObyBrZXkgZGF0YSAtIGp1c3Qgc2V0IHRoZSBkZWZhdWx0IFRYIGtleSBpbmRleCAqLwogCQlpZiAoa2V5X3Byb3ZpZGVkKSB7Ci0JCQlJRUVFODAyMTFfREVCVUdfV1goIlNldHRpbmcga2V5ICVkIHRvIGRlZmF1bHQgVHggIgorCQkJTElCSVBXX0RFQlVHX1dYKCJTZXR0aW5nIGtleSAlZCB0byBkZWZhdWx0IFR4ICIKIAkJCQkJICAgImtleS5cbiIsIGtleSk7CiAJCQlpZWVlLT5jcnlwdF9pbmZvLnR4X2tleWlkeCA9IGtleTsKIAkJCXNlYy5hY3RpdmVfa2V5ID0ga2V5OwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAJCXNlYy5hdXRoX21vZGUgPSBpZWVlLT5vcGVuX3dlcCA/IFdMQU5fQVVUSF9PUEVOIDoKIAkJICAgIFdMQU5fQVVUSF9TSEFSRURfS0VZOwogCQlzZWMuZmxhZ3MgfD0gU0VDX0FVVEhfTU9ERTsKLQkJSUVFRTgwMjExX0RFQlVHX1dYKCJBdXRoOiAlc1xuIiwKKwkJTElCSVBXX0RFQlVHX1dYKCJBdXRoOiAlc1xuIiwKIAkJCQkgICBzZWMuYXV0aF9tb2RlID09IFdMQU5fQVVUSF9PUEVOID8KIAkJCQkgICAiT1BFTiIgOiAiU0hBUkVEIEtFWSIpOwogCX0KQEAgLTQ5MCwxNiArNDkwLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpZWVlODAyMTFfd3hfZ2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKK2ludCBsaWJpcHdfd3hfZ2V0X2VuY29kZShzdHJ1Y3QgbGliaXB3X2RldmljZSAqaWVlZSwKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleWJ1ZikKIHsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVycSA9ICYod3JxdS0+ZW5jb2RpbmcpOwogCWludCBsZW4sIGtleTsKIAlzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqY3J5cHQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqc2VjID0gJmllZWUtPnNlYzsKKwlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5ICpzZWMgPSAmaWVlZS0+c2VjOwogCi0JSUVFRTgwMjExX0RFQlVHX1dYKCJHRVRfRU5DT0RFXG4iKTsKKwlMSUJJUFdfREVCVUdfV1goIkdFVF9FTkNPREVcbiIpOwogCiAJa2V5ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAlpZiAoa2V5KSB7CkBAIC01MzIsNyArNTMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAoraW50IGxpYmlwd193eF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CkBAIC01NDUsNyArNTQ1LDcgQEAKIAlzdHJ1Y3QgbGliODAyMTFfY3J5cHRvX29wcyAqb3BzOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7CiAKLQlzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHNlYyA9IHsKKwlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5IHNlYyA9IHsKIAkJLmZsYWdzID0gMCwKIAl9OwogCkBAIC02MTEsNyArNjExLDcgQEAKIAkJbW9kdWxlID0gImxpYjgwMjExX2NyeXB0X2NjbXAiOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCisJCUxJQklQV19ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKIAkJCQkgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwpAQCAtNjIzLDcgKzYyMyw3IEBACiAJCW9wcyA9IGxpYjgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7CiAJfQogCWlmIChvcHMgPT0gTlVMTCkgewotCQlJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCisJCUxJQklQV19ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKIAkJCQkgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBkb25lOwpAQCAtNjUzLDcgKzY1Myw3IEBACiAJaWYgKGV4dC0+a2V5X2xlbiA+IDAgJiYgKCpjcnlwdCktPm9wcy0+c2V0X2tleSAmJgogCSAgICAoKmNyeXB0KS0+b3BzLT5zZXRfa2V5KGV4dC0+a2V5LCBleHQtPmtleV9sZW4sIGV4dC0+cnhfc2VxLAogCQkJCSAgICgqY3J5cHQpLT5wcml2KSA8IDApIHsKLQkJSUVFRTgwMjExX0RFQlVHX1dYKCIlczoga2V5IHNldHRpbmcgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQlMSUJJUFdfREVCVUdfV1goIiVzOiBrZXkgc2V0dGluZyBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC03MDAsMjAgKzcwMCwyMCBAQAogCWlmIChpZWVlLT5yZXNldF9vbl9rZXljaGFuZ2UgJiYKIAkgICAgaWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBICYmCiAJICAgIGllZWUtPnJlc2V0X3BvcnQgJiYgaWVlZS0+cmVzZXRfcG9ydChkZXYpKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHJlc2V0X3BvcnQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQlMSUJJUFdfREVCVUdfV1goIiVzOiByZXNldF9wb3J0IGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAoraW50IGxpYmlwd193eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBsaWJpcHdfZGV2aWNlICppZWVlLAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqc2VjID0gJmllZWUtPnNlYzsKKwlzdHJ1Y3QgbGliaXB3X3NlY3VyaXR5ICpzZWMgPSAmaWVlZS0+c2VjOwogCWludCBpZHgsIG1heF9rZXlfbGVuOwogCiAJbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOwpAQCAtNzYzLDkgKzc2Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQpOwotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfd3hfZ2V0X2VuY29kZWV4dCk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd193eF9zZXRfZW5jb2RlZXh0KTsKK0VYUE9SVF9TWU1CT0wobGliaXB3X3d4X2dldF9lbmNvZGVleHQpOwogCi1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9nZXRfc2Nhbik7Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKTsKLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3d4X2dldF9lbmNvZGUpOworRVhQT1JUX1NZTUJPTChsaWJpcHdfd3hfZ2V0X3NjYW4pOworRVhQT1JUX1NZTUJPTChsaWJpcHdfd3hfc2V0X2VuY29kZSk7CitFWFBPUlRfU1lNQk9MKGxpYmlwd193eF9nZXRfZW5jb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwppbmRleCBlMDkyYWYwLi45OTMxMGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCkBAIC05LDYgKzksOSBAQAogY29uZmlnIElXTFdJRklfTEVEUwogCWJvb2wgIkVuYWJsZSBMRUQgc3VwcG9ydCBpbiBpd2xhZ24gYW5kIGl3bDM5NDUgZHJpdmVycyIKIAlkZXBlbmRzIG9uIElXTFdJRkkKKwlkZWZhdWx0IHkKKwktLS1oZWxwLS0tCisJICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCBMRUQgc3VwcG9ydC4KIAogY29uZmlnIElXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsYWduIGRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwppbmRleCA3ZGE1MmYxLi5hOTVjYWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSAiaXdsLTUwMDAtaHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgSVdMMTAwMF9VQ09ERV9BUElfTUFYIDIKKyNkZWZpbmUgSVdMMTAwMF9VQ09ERV9BUElfTUFYIDMKIAogLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NSU4gMQpAQCAtNTUsMTkgKzU1LDEwOSBAQAogI2RlZmluZSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0wxMDAwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAjZGVmaW5lIElXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDEwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKIAorCisvKgorICogRm9yIDEwMDAsIHVzZSBhZHZhbmNlIHRoZXJtYWwgdGhyb3R0bGluZyBjcml0aWNhbCB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQsCisgKiBidXQgbGVnYWN5IHRoZXJtYWwgbWFuYWdlbWVudCBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LgorICogVGhpcyBpcyBmb3IgdGhlIHJlYXNvbiBvZiAxMDAwIHVDb2RlIHVzaW5nIGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nIEFQSQorICogYnV0IG5vdCBpbXBsZW1lbnQgY3Rfa2lsbF9leGl0IGJhc2VkIG9uIGN0X2tpbGwgZXhpdCB0ZW1wZXJhdHVyZQorICogc28gdGhlIHRoZXJtYWwgdGhyb3R0bGluZyB3aWxsIHN0aWxsIGJhc2VkIG9uIGxlZ2FjeSB0aGVybWFsIHRocm90dGxpbmcKKyAqIG1hbmFnZW1lbnQuCisgKiBUaGUgY29kZSBoZXJlIG5lZWQgdG8gYmUgbW9kaWZpZWQgb25jZSAxMDAwIHVDb2RlIGhhcyB0aGUgYWR2YW5jZWQgdGhlcm1hbAorICogdGhyb3R0bGluZyBhbGdvcml0aG0gaW4gcGxhY2UKKyAqLworc3RhdGljIHZvaWQgaXdsMTAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwkvKiB3YW50IENlbHNpdXMgKi8KKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRF9MRUdBQ1k7CisJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfZXhpdF90aHJlc2hvbGQgPSBDVF9LSUxMX0VYSVRfVEhSRVNIT0xEOworfQorCisvKiBOSUMgY29uZmlndXJhdGlvbiBmb3IgMTAwMCBzZXJpZXMgKi8KK3N0YXRpYyB2b2lkIGl3bDEwMDBfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaXdsNTAwMF9uaWNfY29uZmlnKHByaXYpOworCisJLyogU2V0dGluZyBkaWdpdGFsIFNWUiBmb3IgMTAwMCBjYXJkIHRvIDEuMzJWICovCisJLyogbG9ja2luZyBpcyBhY3F1aXJlZCBpbiBpd2xfc2V0X2JpdHNfbWFza19wcnBoKCkgZnVuY3Rpb24gKi8KKwlpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIEFQTUdfRElHSVRBTF9TVlJfUkVHLAorCQkJCUFQTUdfU1ZSX0RJR0lUQUxfVk9MVEFHRV8xXzMyLAorCQkJCX5BUE1HX1NWUl9WT0xUQUdFX0NPTkZJR19CSVRfTVNLKTsKK30KKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wxMDAwX2xpYiA9IHsKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAorCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAorCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAorCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCisJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAorCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAorCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAorCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAorCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKKwkuc2VuZF90eF9wb3dlciA9IGl3bDUwMDBfc2VuZF90eF9wb3dlciwKKwkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKKwkuYXBtX29wcyA9IHsKKwkJLmluaXQgPQlpd2w1MDAwX2FwbV9pbml0LAorCQkucmVzZXQgPSBpd2w1MDAwX2FwbV9yZXNldCwKKwkJLnN0b3AgPSBpd2w1MDAwX2FwbV9zdG9wLAorCQkuY29uZmlnID0gaXdsMTAwMF9uaWNfY29uZmlnLAorCQkuc2V0X3B3cl9zcmMgPSBpd2xfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8xX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLmNhbGliX3ZlcnNpb24JPSBpd2w1MDAwX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAorCQkucXVlcnlfYWRkciA9IGl3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIsCisJfSwKKwkucG9zdF9hc3NvY2lhdGUgPSBpd2xfcG9zdF9hc3NvY2lhdGUsCisJLmlzciA9IGl3bF9pc3JfaWN0LAorCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAorCS50ZW1wX29wcyA9IHsKKwkJLnRlbXBlcmF0dXJlID0gaXdsNTAwMF90ZW1wZXJhdHVyZSwKKwkJLnNldF9jdF9raWxsID0gaXdsMTAwMF9zZXRfY3RfdGhyZXNob2xkLAorCSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0geworCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAorCS5saWIgPSAmaXdsMTAwMF9saWIsCisJLmhjbWQgPSAmaXdsNTAwMF9oY21kLAorCS51dGlscyA9ICZpd2w1MDAwX2hjbWRfdXRpbHMsCit9OworCiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmcgPSB7CiAJLm5hbWUgPSAiMTAwMCBTZXJpZXMgQkdOIiwKIAkuZndfbmFtZV9wcmUgPSBJV0wxMDAwX0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDEwMDBfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDEwMDBfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKLQkub3BzID0gJml3bDUwMDBfb3BzLAotCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkub3BzID0gJml3bDEwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IE9UUF9MT1dfSU1BR0VfU0laRSwKIAkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAogCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKIAkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAogCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzEwMDAsCisJLnNoYWRvd19yYW1fc3VwcG9ydCA9IGZhbHNlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCmluZGV4IDczZjkzYTAuLjE2NzcyNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKQEAgLTE3Niw3ICsxNzYsNyBAQAogICogaW4gRUVQUk9NIGNvbnRhaW5pbmcgRUVQUk9NX0NIQU5ORUxfKiB1c2FnZSBmbGFncyAoTFNCKSBhbmQgbWF4IHJlZ3VsYXRvcnkKICAqIHR4cG93ZXIgKE1TQikuCiAgKgotICogRW50cmllcyBpbW1lZGlhdGVseSBiZWxvdyBhcmUgZm9yIDIwIE1IeiBjaGFubmVsIHdpZHRoLiAgRkFUICg0MCBNSHopCisgKiBFbnRyaWVzIGltbWVkaWF0ZWx5IGJlbG93IGFyZSBmb3IgMjAgTUh6IGNoYW5uZWwgd2lkdGguICBIVDQwICg0MCBNSHopCiAgKiBjaGFubmVscyAob25seSBmb3IgNDk2NSwgbm90IHN1cHBvcnRlZCBieSAzOTQ1KSBhcHBlYXIgbGF0ZXIgaW4gdGhlIEVFUFJPTS4KICAqCiAgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNApAQCAtMjMyLDkgKzIzMiw4IEBACiAjZGVmaW5lIFBDSV9DRkdfUkVWX0lEX0JJVF9CQVNJQ19TS1UgICAgICAgICAgICAgICAgKDB4NDApCS8qIGJpdCA2ICAgICovCiAjZGVmaW5lIFBDSV9DRkdfUkVWX0lEX0JJVF9SVFAgICAgICAgICAgICAgICAgICAgICAgKDB4ODApCS8qIGJpdCA3ICAgICovCiAKLSNkZWZpbmUgVEZEX1FVRVVFX01JTiAgICAgICAgICAgMAotI2RlZmluZSBURkRfUVVFVUVfTUFYICAgICAgICAgICA1CS8qIDQgREFUQSArIDEgQ01EICovCi0KKy8qIDQgREFUQSArIDEgQ01ELiBUaGVyZSBhcmUgMiBIQ0NBIHF1ZXVlcyB0aGF0IGFyZSBub3QgdXNlZC4gKi8KKyNkZWZpbmUgSVdMMzlfTlVNX1FVRVVFUyAgICAgICAgNQogI2RlZmluZSBJV0xfTlVNX1NDQU5fUkFURVMgICAgICAgICAoMikKIAogI2RlZmluZSBJV0xfREVGQVVMVF9UWF9SRVRSWSAgMTUKQEAgLTI4MCw4ICsyNzksNiBAQAogLyogU2l6ZSBvZiB1Q29kZSBpbnN0cnVjdGlvbiBtZW1vcnkgaW4gYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUgKi8KICNkZWZpbmUgSVdMMzlfTUFYX0JTTV9TSVpFIElXTDM5X1JUQ19JTlNUX1NJWkUKIAotI2RlZmluZSBJV0wzOV9NQVhfTlVNX1FVRVVFUwk4Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKIAlyZXR1cm4gKGFkZHIgPj0gSVdMMzlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwppbmRleCAyMjVlNWY4Li44YzI5ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKQEAgLTc5LDExICs3OSwxMCBAQAogI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkgLypFeGNsdWRlIFNvbGlkIG9uKi8KICNkZWZpbmUgSVdMX1NPTElEX0JMSU5LX0lEWCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkKIAotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9sZWRfY21kX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9icmlnaHRuZXNzX3RvX2lkeChlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCkBAIC05OSw4ICs5OCw4IEBACiAJCS5pZCA9IFJFUExZX0xFRFNfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGVkX2NtZCksCiAJCS5kYXRhID0gbGVkX2NtZCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCi0JCS5tZXRhLnUuY2FsbGJhY2sgPSBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2ssCisJCS5mbGFncyA9IENNRF9BU1lOQywKKwkJLmNhbGxiYWNrID0gaXdsMzk0NV9sZWRfY21kX2NhbGxiYWNrLAogCX07CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCmluZGV4IDVlYjUzOGQuLmExNmJkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKQEAgLTY3MywzMyArNjczLDE3IEBACiAJczggc2NhbGVfYWN0aW9uID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JdTE2IGZjOwotCXUxNiByYXRlX21hc2sgPSAwOworCXUxNiByYXRlX21hc2sgPSBzdGEgPyBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdIDogMDsKIAlzOCBtYXhfcmF0ZV9pZHggPSAtMTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoc3RhKQotCQlyYXRlX21hc2sgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOwotCi0JLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgTk9fQUNLIGRhdGEgdXNpbmcgbG93ZXN0IHJhdGUuICovCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKLQkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAotCSAgICAhc3RhIHx8ICFwcml2X3N0YSkgewotCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7Ci0JCWlmICghcmF0ZV9tYXNrKQotCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPQotCQkJCQlyYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgTlVMTCk7Ci0JCWVsc2UKLQkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0KLQkJCQkJcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIHN0YSk7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQotCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCA9IDE7CisJaWYgKHJhdGVfY29udHJvbF9zZW5kX2xvdyhzdGEsIHByaXZfc3RhLCB0eHJjKSkKIAkJcmV0dXJuOwotCX0KKworCXJhdGVfbWFzayA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CiAKIAkvKiBnZXQgdXNlciBtYXggcmF0ZSBpZiBzZXQgKi8KIAltYXhfcmF0ZV9pZHggPSB0eHJjLT5tYXhfcmF0ZV9pZHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKaW5kZXggNDYyODhlNy4uZTlhNjg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtMzQ5LDEyICszNDksMTMgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit2b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCiAJCSAgICAgKGludClzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyksCi0JCSAgICAgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKKwkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKIAogCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljc18zOSwgcGt0LT51LnJhdywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3NfMzkpKTsKIApAQCAtNTA5LDcgKzUxMCw3IEBACiAJCSAgICAgIHN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIsIGludCBncm91cDEwMCkKIHsKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpCisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfUlgpCiAJCV9pd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIGdyb3VwMTAwKTsKIH0KIApAQCAtNTQ0LDkgKzU0NSw3IEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7Ci0jZW5kaWYKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgKnJ4X2VuZCA9IElXTF9SWF9FTkQocGt0KTsKIAlzaG9ydCBsZW4gPSBsZTE2X3RvX2NwdShyeF9oZHItPmxlbik7CkBAIC01NzcsNyArNTc2LDEwIEBACiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXByaXYtPnJ4dHhwYWNrZXRzICs9IGxlbjsKICNlbmRpZgotCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCByeGItPnNrYiwgc3RhdHMpOworCWl3bF91cGRhdGVfc3RhdHMocHJpdiwgZmFsc2UsIGhkci0+ZnJhbWVfY29udHJvbCwgbGVuKTsKKworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IocnhiLT5za2IpLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCByeGItPnNrYik7CiAJcnhiLT5za2IgPSBOVUxMOwogfQogCkBAIC02NzgsNiArNjgwLDcgQEAKIAogCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLwogCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7CisJaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShwcml2LCBsZTE2X3RvX2NwdShyeF9oZHItPmxlbiksIGhlYWRlcik7CiAKIAlpZiAobmV0d29ya19wYWNrZXQpIHsKIAkJcHJpdi0+bGFzdF9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHJ4X2VuZC0+YmVhY29uX3RpbWVzdGFtcCk7CkBAIC03NDgsOCArNzUxLDggQEAKIAkvKiBVbm1hcCB0eF9jbWQgKi8KIAlpZiAoY291bnRlcikKIAkJcGNpX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJcGNpX3VubWFwX2FkZHIoJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbWFwcGluZyksCi0JCQkJcGNpX3VubWFwX2xlbigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBsZW4pLAorCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbaW5kZXhdLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbaW5kZXhdLCBsZW4pLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJLyogdW5tYXAgY2h1bmtzIGlmIGFueSAqLwpAQCAtNzczLDkgKzc3NiwxMSBAQAogICogaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZSAtIEFkZCByYXRlIHBvcnRpb24gdG8gVFhfQ01EOgogICoKICovCi12b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQordm9pZCBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCQkgIGludCBzdGFfaWQsIGludCB0eF9pZCkKIHsKIAl1MTYgaHdfdmFsdWUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZTsKIAl1MTYgcmF0ZV9pbmRleCA9IG1pbihod192YWx1ZSAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKQEAgLTk2Miw3ICs5NjcsNyBAQAogCQlnb3RvIGVycm9yOwogCiAJLyogVHggcXVldWUocykgKi8KLQlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8PSBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKSB7CisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKSB7CiAJCXNsb3RzX251bSA9ICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pID8KIAkJCQlURkRfQ01EX1NMT1RTIDogVEZEX1RYX0NNRF9TTE9UUzsKIAkJcmMgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKQEAgLTExMzksNyArMTE0NCw3IEBACiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW07IHR4cV9pZCsrKQogCQlpZiAodHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKQogCQkJaXdsX2NtZF9xdWV1ZV9mcmVlKHByaXYpOwogCQllbHNlCkBAIC0xMTU1LDcgKzExNjAsNyBAQAogCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOwogCiAJLyogcmVzZXQgVEZEIHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKKwlmb3IgKHR4cV9pZCA9IDA7IHR4cV9pZCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKIAkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfVENTUl9DT05GSUcodHhxX2lkKSwgMHgwKTsKIAkJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSDM5X1RTU1JfVFhfU1RBVFVTLAogCQkJCUZIMzlfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUodHhxX2lkKSwKQEAgLTE4NTcsNyArMTg2Miw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1JYT05fQVNTT0MsCiAJCS5sZW4gPSBzaXplb2Yocnhvbl9hc3NvYyksCi0JCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAorCQkuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCiAJCS5kYXRhID0gJnJ4b25fYXNzb2MsCiAJfTsKIAljb25zdCBzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uMSA9ICZwcml2LT5zdGFnaW5nX3J4b247CkBAIC0xODgxLDE0ICsxODg2LDE0IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhPTl9BU1NPQyBjb21tYW5kXG4iKTsKIAkJcmMgPSAtRUlPOwogCX0KIAogCXByaXYtPmFsbG9jX3J4Yl9za2ItLTsKLQlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLnJlcGx5X3NrYik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xOTg2LDcgKzE5OTEsNyBAQAogCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ0ID0gMDsKIAlzdGFnaW5nX3J4b24tPnJlc2VydmVkNSA9IDA7CiAKLQlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgIXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pOworCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAhaXdsMzk0NV9tb2RfcGFyYW1zLnN3X2NyeXB0byk7CiAKIAkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KIAlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKQEAgLTI1NTEsNyArMjU1Niw3IEBACiAJfQogCiAJLyogQXNzaWduIG51bWJlciBvZiBVc2FibGUgVFggcXVldWVzICovCi0JcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gVEZEX1FVRVVFX01BWDsKKwlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBJV0wzOV9OVU1fUVVFVUVTOwogCiAJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3RmZCk7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplID0gSVdMX1JYX0JVRl9TSVpFXzNLOwpAQCAtMjU2Miw2ICsyNTY3LDcgQEAKIAlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMMzk0NV9CUk9BRENBU1RfSUQ7CiAKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSDM5X1JTQ1NSX0NITkwwX1dQVFI7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9iZWFjb25faXRydmwgPSBJV0wzOV9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzg0LDExICsyNzkwLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgSVdMMzk0NV9VQ09ERV9HRVQoaXRlbSkJCQkJCQlcCitzdGF0aWMgdTMyIGl3bDM5NDVfdWNvZGVfZ2V0XyMjaXRlbShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsXAorCQkJCSAgICB1MzIgYXBpX3ZlcikJCQlcCit7CQkJCQkJCQkJXAorCXJldHVybiBsZTMyX3RvX2NwdSh1Y29kZS0+dS52MS5pdGVtKTsJCQkJXAorfQorCitzdGF0aWMgdTMyIGl3bDM5NDVfdWNvZGVfZ2V0X2hlYWRlcl9zaXplKHUzMiBhcGlfdmVyKQoreworCXJldHVybiBVQ09ERV9IRUFERVJfU0laRSgxKTsKK30KK3N0YXRpYyB1MzIgaXdsMzk0NV91Y29kZV9nZXRfYnVpbGQoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKnVjb2RlLAorCQkJCSAgIHUzMiBhcGlfdmVyKQoreworCXJldHVybiAwOworfQorc3RhdGljIHU4ICppd2wzOTQ1X3Vjb2RlX2dldF9kYXRhKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICp1Y29kZSwKKwkJCQkgIHUzMiBhcGlfdmVyKQoreworCXJldHVybiAodTggKikgdWNvZGUtPnUudjEuZGF0YTsKK30KKworSVdMMzk0NV9VQ09ERV9HRVQoaW5zdF9zaXplKTsKK0lXTDM5NDVfVUNPREVfR0VUKGRhdGFfc2l6ZSk7CitJV0wzOTQ1X1VDT0RFX0dFVChpbml0X3NpemUpOworSVdMMzk0NV9VQ09ERV9HRVQoaW5pdF9kYXRhX3NpemUpOworSVdMMzk0NV9VQ09ERV9HRVQoYm9vdF9zaXplKTsKKwogc3RhdGljIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsMzk0NV9oY21kID0gewogCS5yeG9uX2Fzc29jID0gaXdsMzk0NV9zZW5kX3J4b25fYXNzb2MsCiAJLmNvbW1pdF9yeG9uID0gaXdsMzk0NV9jb21taXRfcnhvbiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaXdsX3Vjb2RlX29wcyBpd2wzOTQ1X3Vjb2RlID0geworCS5nZXRfaGVhZGVyX3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9oZWFkZXJfc2l6ZSwKKwkuZ2V0X2J1aWxkID0gaXdsMzk0NV91Y29kZV9nZXRfYnVpbGQsCisJLmdldF9pbnN0X3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9pbnN0X3NpemUsCisJLmdldF9kYXRhX3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9kYXRhX3NpemUsCisJLmdldF9pbml0X3NpemUgPSBpd2wzOTQ1X3Vjb2RlX2dldF9pbml0X3NpemUsCisJLmdldF9pbml0X2RhdGFfc2l6ZSA9IGl3bDM5NDVfdWNvZGVfZ2V0X2luaXRfZGF0YV9zaXplLAorCS5nZXRfYm9vdF9zaXplID0gaXdsMzk0NV91Y29kZV9nZXRfYm9vdF9zaXplLAorCS5nZXRfZGF0YSA9IGl3bDM5NDVfdWNvZGVfZ2V0X2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDM5NDVfbGliID0gewogCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKIAkudHhxX2ZyZWVfdGZkID0gaXdsMzk0NV9od190eHFfZnJlZV90ZmQsCkBAIC0yODA4LDggKzI4NTMsOCBAQAogCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF8zX0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF80X0NIQU5ORUxTLAogCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF81X0NIQU5ORUxTLAotCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQsCi0JCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCwKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCwKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCwKIAkJfSwKIAkJLnZlcmlmeV9zaWduYXR1cmUgID0gaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZSwKIAkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsMzk0NV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCkBAIC0yODI5LDYgKzI4NzQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDM5NDVfb3BzID0geworCS51Y29kZSA9ICZpd2wzOTQ1X3Vjb2RlLAogCS5saWIgPSAmaXdsMzk0NV9saWIsCiAJLmhjbWQgPSAmaXdsMzk0NV9oY21kLAogCS51dGlscyA9ICZpd2wzOTQ1X2hjbWRfdXRpbHMsCkBAIC0yODQ0LDcgKzI4OTAsOCBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04sCiAJLm9wcyA9ICZpd2wzOTQ1X29wcywKIAkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMsCi0JLnVzZV9pc3JfbGVnYWN5ID0gdHJ1ZQorCS51c2VfaXNyX2xlZ2FjeSA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IGZhbHNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfY2ZnIGl3bDM5NDVfYWJnX2NmZyA9IHsKQEAgLTI4NTcsNyArMjkwNCw4IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTiwKIAkub3BzID0gJml3bDM5NDVfb3BzLAogCS5tb2RfcGFyYW1zID0gJml3bDM5NDVfbW9kX3BhcmFtcywKLQkudXNlX2lzcl9sZWdhY3kgPSB0cnVlCisJLnVzZV9pc3JfbGVnYWN5ID0gdHJ1ZSwKKwkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gZmFsc2UsCiB9OwogCiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKaW5kZXggMmRlNjQ3MS4uZjI0MDM2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaApAQCAtMTExLDkgKzExMSw2IEBACiAjZGVmaW5lIElXTF9UWF9GSUZPX0hDQ0FfMgk2CiAjZGVmaW5lIElXTF9UWF9GSUZPX05PTkUJNwogCi0vKiBNaW5pbXVtIG51bWJlciBvZiBxdWV1ZXMuIE1BWF9OVU0gaXMgZGVmaW5lZCBpbiBodyBzcGVjaWZpYyBmaWxlcyAqLwotI2RlZmluZSBJV0wzOV9NSU5fTlVNX1FVRVVFUwk0Ci0KICNkZWZpbmUgSUVFRTgwMjExX0RBVEFfTEVOICAgICAgICAgICAgICAyMzA0CiAjZGVmaW5lIElFRUU4MDIxMV80QUREUl9MRU4gICAgICAgICAgICAgMzAKICNkZWZpbmUgSUVFRTgwMjExX0hMRU4gICAgICAgICAgICAgICAgICAoSUVFRTgwMjExXzRBRERSX0xFTikKQEAgLTI1NywxMCArMjU0LDExIEBACiAJCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSk7Ci12b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKLQkJCQkgICAgIGludCBzdGFfaWQsIGludCB0eF9pZCk7Cit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJCSAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKIGV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpOwogZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAppbmRleCBhNzFhNDg5Li5iMzQzMjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCkBAIC0xODgsNyArMTg4LDcgQEAKICAqCiAgKiAxKSAgUmVndWxhdG9yeSBpbmZvcm1hdGlvbiAobWF4IHR4cG93ZXIgYW5kIGNoYW5uZWwgdXNhZ2UgZmxhZ3MpIGlzIHByb3ZpZGVkCiAgKiAgICAgc2VwYXJhdGVseSBmb3IgZWFjaCBjaGFubmVsIHRoYXQgY2FuIHBvc3NpYmx5IHN1cHBvcnRlZCBieSA0OTY1LgotICogICAgIDQwIE1IeiB3aWRlICguMTFuIGZhdCkgY2hhbm5lbHMgYXJlIGxpc3RlZCBzZXBhcmF0ZWx5IGZyb20gMjAgTUh6CisgKiAgICAgNDAgTUh6IHdpZGUgKC4xMW4gSFQ0MCkgY2hhbm5lbHMgYXJlIGxpc3RlZCBzZXBhcmF0ZWx5IGZyb20gMjAgTUh6CiAgKiAgICAgKGxlZ2FjeSkgY2hhbm5lbHMuCiAgKgogICogICAgIFNlZSBzdHJ1Y3QgaXdsNDk2NV9lZXByb21fY2hhbm5lbCBmb3IgZm9ybWF0LCBhbmQgc3RydWN0IGl3bDQ5NjVfZWVwcm9tCkBAIC0yNTEsOCArMjUxLDggQEAKICAqICAgICBubyByZWR1Y3Rpb24gKHN1Y2ggYXMgd2l0aCByZWd1bGF0b3J5IHR4cG93ZXIgbGltaXRzKSBpcyByZXF1aXJlZC4KICAqCiAgKiAgICAgU2F0dXJhdGlvbiBhbmQgQmFja29mZiB2YWx1ZXMgYXBwbHkgZXF1YWxseSB0byAyMCBNaHogKGxlZ2FjeSkgY2hhbm5lbAotICogICAgIHdpZHRocyBhbmQgNDAgTWh6ICguMTFuIGZhdCkgY2hhbm5lbCB3aWR0aHM7IHRoZXJlIGlzIG5vIHNlcGFyYXRlCi0gKiAgICAgZmFjdG9yeSBtZWFzdXJlbWVudCBmb3IgZmF0IGNoYW5uZWxzLgorICogICAgIHdpZHRocyBhbmQgNDAgTWh6ICguMTFuIEhUNDApIGNoYW5uZWwgd2lkdGhzOyB0aGVyZSBpcyBubyBzZXBhcmF0ZQorICogICAgIGZhY3RvcnkgbWVhc3VyZW1lbnQgZm9yIGh0NDAgY2hhbm5lbHMuCiAgKgogICogICAgIFRoZSByZXN1bHQgb2YgdGhpcyBzdGVwIGlzIHRoZSBmaW5hbCB0YXJnZXQgdHhwb3dlci4gIFRoZSByZXN0IG9mCiAgKiAgICAgdGhlIHN0ZXBzIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBzZXR0aW5ncyBmb3IgdGhlIGRldmljZSB0byBhY2hpZXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggOGYzZDRiYy4uNmExM2JmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKIAogc3RhdGljIGludCBpd2w0OTY1X3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLXN0YXRpYyBpbnQgaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3N0YXRpYyBpbnQgaXdsNDk2NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgSVdMNDk2NV9VQ09ERV9BUElfTUFYIDIKQEAgLTI5Myw3ICsyOTMsNyBAQAogCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiB9CiAKLXN0YXRpYyBib29sIGlzX2ZhdF9jaGFubmVsKF9fbGUzMiByeG9uX2ZsYWdzKQorc3RhdGljIGJvb2wgaXNfaHQ0MF9jaGFubmVsKF9fbGUzMiByeG9uX2ZsYWdzKQogewogCWludCBjaGFuX21vZCA9IGxlMzJfdG9fY3B1KHJ4b25fZmxhZ3MgJiBSWE9OX0ZMR19DSEFOTkVMX01PREVfTVNLKQogCQkJCSAgICA+PiBSWE9OX0ZMR19DSEFOTkVMX01PREVfUE9TOwpAQCAtNzI4LDcgKzcyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyBpd2w0OTY1X3NlbnNpdGl2aXR5ID0gewogCS5taW5fbnJnX2NjayA9IDk3LAotCS5tYXhfbnJnX2NjayA9IDAsCisJLm1heF9ucmdfY2NrID0gMCwgLyogbm90IHVzZWQsIHNldCB0byAwICovCiAKIAkuYXV0b19jb3JyX21pbl9vZmRtID0gODUsCiAJLmF1dG9fY29ycl9taW5fb2ZkbV9tcmMgPSAxNzAsCkBAIC03NTIsNyArNzUyLDggQEAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfc2V0X2N0X3RocmVzaG9sZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogd2FudCBLZWx2aW4gKi8KLQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDRUxTSVVTX1RPX0tFTFZJTihDVF9LSUxMX1RIUkVTSE9MRCk7CisJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfdGhyZXNob2xkID0KKwkJQ0VMU0lVU19UT19LRUxWSU4oQ1RfS0lMTF9USFJFU0hPTERfTEVHQUNZKTsKIH0KIAogLyoqCkBAIC03ODEsNyArNzgyLDcgQEAKIAlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDQ5X1JUQ19EQVRBX1NJWkU7CiAJcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w0OV9SVENfSU5TVF9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSBCU01fU1JBTV9TSVpFOwotCXByaXYtPmh3X3BhcmFtcy5mYXRfY2hhbm5lbCA9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKKwlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOwogCiAJcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnID0gRkhfUlNDU1JfQ0hOTDBfV1BUUjsKIApAQCAtMTI0MSw3ICsxMjQyLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggYmFuZCwgdTE2IGNoYW5uZWwsCi0JCQkJICAgIHU4IGlzX2ZhdCwgdTggY3RybF9jaGFuX2hpZ2gsCisJCQkJICAgIHU4IGlzX2h0NDAsIHU4IGN0cmxfY2hhbl9oaWdoLAogCQkJCSAgICBzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiAqdHhfcG93ZXJfdGJsKQogewogCXU4IHNhdHVyYXRpb25fcG93ZXI7CkBAIC0xMjczLDggKzEyNzQsOCBAQAogCXVzZXJfdGFyZ2V0X3Bvd2VyID0gMiAqIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10OwogCiAJLyogR2V0IGN1cnJlbnQgKFJYT04pIGNoYW5uZWwsIGJhbmQsIHdpZHRoICovCi0JSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW4gJWQgYmFuZCAlZCBpc19mYXQgJWRcbiIsIGNoYW5uZWwsIGJhbmQsCi0JCQkgIGlzX2ZhdCk7CisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNoYW4gJWQgYmFuZCAlZCBpc19odDQwICVkXG4iLCBjaGFubmVsLCBiYW5kLAorCQkJICBpc19odDQwKTsKIAogCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKIApAQCAtMTI5Myw3ICsxMjk0LDcgQEAKIAlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbm5lbCAlZCBiZWxvbmdzIHRvIHR4YXR0ZW4gZ3JvdXAgJWRcbiIsCiAJCQkgIGNoYW5uZWwsIHR4YXR0ZW5fZ3JwKTsKIAotCWlmIChpc19mYXQpIHsKKwlpZiAoaXNfaHQ0MCkgewogCQlpZiAoY3RybF9jaGFuX2hpZ2gpCiAJCQljaGFubmVsIC09IDI7CiAJCWVsc2UKQEAgLTEzMTcsOCArMTMxOCw4IEBACiAKIAkvKiByZWd1bGF0b3J5IHR4cG93ZXIgbGltaXRzIC4uLiByZWdfbGltaXQgdmFsdWVzIGFyZSBpbiBoYWxmLWRCbSwKIAkgKiAgIG1heF9wb3dlcl9hdmcgdmFsdWVzIGFyZSBpbiBkQm0sIGNvbnZlcnQgKiAyICovCi0JaWYgKGlzX2ZhdCkKLQkJcmVnX2xpbWl0ID0gY2hfaW5mby0+ZmF0X21heF9wb3dlcl9hdmcgKiAyOworCWlmIChpc19odDQwKQorCQlyZWdfbGltaXQgPSBjaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgKiAyOwogCWVsc2UKIAkJcmVnX2xpbWl0ID0gY2hfaW5mby0+bWF4X3Bvd2VyX2F2ZyAqIDI7CiAKQEAgLTE0ODQsNyArMTQ4NSw3IEBACiAvKioKICAqIGl3bDQ5NjVfc2VuZF90eF9wb3dlciAtIENvbmZpZ3VyZSB0aGUgVFhQT1dFUiBsZXZlbCB1c2VyIGxpbWl0CiAgKgotICogVXNlcyB0aGUgYWN0aXZlIFJYT04gZm9yIGNoYW5uZWwsIGJhbmQsIGFuZCBjaGFyYWN0ZXJpc3RpY3MgKGZhdCwgaGlnaCkKKyAqIFVzZXMgdGhlIGFjdGl2ZSBSWE9OIGZvciBjaGFubmVsLCBiYW5kLCBhbmQgY2hhcmFjdGVyaXN0aWNzIChodDQwLCBoaWdoKQogICogVGhlIHBvd2VyIGxpbWl0IGlzIHRha2VuIGZyb20gcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQuCiAgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9zZW5kX3R4X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKQEAgLTE0OTIsNyArMTQ5Myw3IEBACiAJc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCBjbWQgPSB7IDAgfTsKIAlpbnQgcmV0OwogCXU4IGJhbmQgPSAwOwotCWJvb2wgaXNfZmF0ID0gZmFsc2U7CisJYm9vbCBpc19odDQwID0gZmFsc2U7CiAJdTggY3RybF9jaGFuX2hpZ2ggPSAwOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKQEAgLTE1MDUsOSArMTUwNiw5IEBACiAKIAliYW5kID0gcHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwogCi0JaXNfZmF0ID0gIGlzX2ZhdF9jaGFubmVsKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzKTsKKwlpc19odDQwID0gIGlzX2h0NDBfY2hhbm5lbChwcml2LT5hY3RpdmVfcnhvbi5mbGFncyk7CiAKLQlpZiAoaXNfZmF0ICYmCisJaWYgKGlzX2h0NDAgJiYKIAkgICAgKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzICYgUlhPTl9GTEdfQ1RSTF9DSEFOTkVMX0xPQ19ISV9NU0spKQogCQljdHJsX2NoYW5faGlnaCA9IDE7CiAKQEAgLTE1MTYsNyArMTUxNyw3IEBACiAKIAlyZXQgPSBpd2w0OTY1X2ZpbGxfdHhwb3dlcl90YmwocHJpdiwgYmFuZCwKIAkJCQlsZTE2X3RvX2NwdShwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSwKLQkJCQlpc19mYXQsIGN0cmxfY2hhbl9oaWdoLCAmY21kLnR4X3Bvd2VyKTsKKwkJCQlpc19odDQwLCBjdHJsX2NoYW5faGlnaCwgJmNtZC50eF9wb3dlcik7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKQEAgLTE1NzAsNyArMTU3MSw3IEBACiB7CiAJaW50IHJjOwogCXU4IGJhbmQgPSAwOwotCWJvb2wgaXNfZmF0ID0gZmFsc2U7CisJYm9vbCBpc19odDQwID0gZmFsc2U7CiAJdTggY3RybF9jaGFuX2hpZ2ggPSAwOwogCXN0cnVjdCBpd2w0OTY1X2NoYW5uZWxfc3dpdGNoX2NtZCBjbWQgPSB7IDAgfTsKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKQEAgLTE1NzksOSArMTU4MCw5IEBACiAKIAljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwgY2hhbm5lbCk7CiAKLQlpc19mYXQgPSBpc19mYXRfY2hhbm5lbChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MpOworCWlzX2h0NDAgPSBpc19odDQwX2NoYW5uZWwocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzKTsKIAotCWlmIChpc19mYXQgJiYKKwlpZiAoaXNfaHQ0MCAmJgogCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19DVFJMX0NIQU5ORUxfTE9DX0hJX01TSykpCiAJCWN0cmxfY2hhbl9oaWdoID0gMTsKIApAQCAtMTU5Niw3ICsxNTk3LDcgQEAKIAllbHNlCiAJCWNtZC5leHBlY3RfYmVhY29uID0gMTsKIAotCXJjID0gaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHByaXYsIGJhbmQsIGNoYW5uZWwsIGlzX2ZhdCwKKwlyYyA9IGl3bDQ5NjVfZmlsbF90eHBvd2VyX3RibChwcml2LCBiYW5kLCBjaGFubmVsLCBpc19odDQwLAogCQkJCSAgICAgIGN0cmxfY2hhbl9oaWdoLCAmY21kLnR4X3Bvd2VyKTsKIAlpZiAocmMpIHsKIAkJSVdMX0RFQlVHXzExSChwcml2LCAiZXJyb3I6JWQgIGZpbGwgdHhwb3dlcl90YmxcbiIsIHJjKTsKQEAgLTE2NTUsNyArMTY1Niw3IEBACiAgKgogICogQSByZXR1cm4gb2YgPDAgaW5kaWNhdGVzIGJvZ3VzIGRhdGEgaW4gdGhlIHN0YXRpc3RpY3MKICAqLwotc3RhdGljIGludCBpd2w0OTY1X2h3X2dldF90ZW1wZXJhdHVyZShjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDQ5NjVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzMzIgdGVtcGVyYXR1cmU7CiAJczMyIHZ0OwpAQCAtMTY2Myw4ICsxNjY0LDggQEAKIAl1MzIgUjQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1RFTVBFUkFUVVJFLCAmcHJpdi0+c3RhdHVzKSAmJgotCQkocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLKSkgewotCQlJV0xfREVCVUdfVEVNUChwcml2LCAiUnVubmluZyBGQVQgdGVtcGVyYXR1cmUgY2FsaWJyYXRpb25cbiIpOworCQkocHJpdi0+c3RhdGlzdGljcy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykpIHsKKwkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlJ1bm5pbmcgSFQ0MCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CiAJCVIxID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjFbMV0pOwogCQlSMiA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IyWzFdKTsKIAkJUjMgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yM1sxXSk7CkBAIC0xNzcyLDYgKzE3NzMsNyBAQAogCX0KIAogCXByaXYtPnRlbXBlcmF0dXJlID0gdGVtcDsKKwlpd2xfdHRfaGFuZGxlcihwcml2KTsKIAlzZXRfYml0KFNUQVRVU19URU1QRVJBVFVSRSwgJnByaXYtPnN0YXR1cyk7CiAKIAlpZiAoIXByaXYtPmRpc2FibGVfdHhfcG93ZXJfY2FsICYmCkBAIC0yMjIxLDEyICsyMjIzLDUwIEBACiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+dHhwb3dlcl93b3JrKTsKIH0KIAorI2RlZmluZSBJV0w0OTY1X1VDT0RFX0dFVChpdGVtKQkJCQkJCVwKK3N0YXRpYyB1MzIgaXdsNDk2NV91Y29kZV9nZXRfIyNpdGVtKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICp1Y29kZSxcCisJCQkJICAgIHUzMiBhcGlfdmVyKQkJCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIGxlMzJfdG9fY3B1KHVjb2RlLT51LnYxLml0ZW0pOwkJCQlcCit9CisKK3N0YXRpYyB1MzIgaXdsNDk2NV91Y29kZV9nZXRfaGVhZGVyX3NpemUodTMyIGFwaV92ZXIpCit7CisJcmV0dXJuIFVDT0RFX0hFQURFUl9TSVpFKDEpOworfQorc3RhdGljIHUzMiBpd2w0OTY1X3Vjb2RlX2dldF9idWlsZChjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsCisJCQkJICAgdTMyIGFwaV92ZXIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdTggKml3bDQ5NjVfdWNvZGVfZ2V0X2RhdGEoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKnVjb2RlLAorCQkJCSAgdTMyIGFwaV92ZXIpCit7CisJcmV0dXJuICh1OCAqKSB1Y29kZS0+dS52MS5kYXRhOworfQorCitJV0w0OTY1X1VDT0RFX0dFVChpbnN0X3NpemUpOworSVdMNDk2NV9VQ09ERV9HRVQoZGF0YV9zaXplKTsKK0lXTDQ5NjVfVUNPREVfR0VUKGluaXRfc2l6ZSk7CitJV0w0OTY1X1VDT0RFX0dFVChpbml0X2RhdGFfc2l6ZSk7CitJV0w0OTY1X1VDT0RFX0dFVChib290X3NpemUpOworCiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX29wcyBpd2w0OTY1X2hjbWQgPSB7CiAJLnJ4b25fYXNzb2MgPSBpd2w0OTY1X3NlbmRfcnhvbl9hc3NvYywKIAkuY29tbWl0X3J4b24gPSBpd2xfY29tbWl0X3J4b24sCiAJLnNldF9yeG9uX2NoYWluID0gaXdsX3NldF9yeG9uX2NoYWluLAogfTsKIAorc3RhdGljIHN0cnVjdCBpd2xfdWNvZGVfb3BzIGl3bDQ5NjVfdWNvZGUgPSB7CisJLmdldF9oZWFkZXJfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2hlYWRlcl9zaXplLAorCS5nZXRfYnVpbGQgPSBpd2w0OTY1X3Vjb2RlX2dldF9idWlsZCwKKwkuZ2V0X2luc3Rfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2luc3Rfc2l6ZSwKKwkuZ2V0X2RhdGFfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2RhdGFfc2l6ZSwKKwkuZ2V0X2luaXRfc2l6ZSA9IGl3bDQ5NjVfdWNvZGVfZ2V0X2luaXRfc2l6ZSwKKwkuZ2V0X2luaXRfZGF0YV9zaXplID0gaXdsNDk2NV91Y29kZV9nZXRfaW5pdF9kYXRhX3NpemUsCisJLmdldF9ib290X3NpemUgPSBpd2w0OTY1X3Vjb2RlX2dldF9ib290X3NpemUsCisJLmdldF9kYXRhID0gaXdsNDk2NV91Y29kZV9nZXRfZGF0YSwKK307CiBzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w0OTY1X2hjbWRfdXRpbHMgPSB7CiAJLmdldF9oY21kX3NpemUgPSBpd2w0OTY1X2dldF9oY21kX3NpemUsCiAJLmJ1aWxkX2FkZHN0YV9oY21kID0gaXdsNDk2NV9idWlsZF9hZGRzdGFfaGNtZCwKQEAgLTIyNjYsOCArMjMwNiw4IEBACiAJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzNfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzRfQ0hBTk5FTFMsCiAJCQlFRVBST01fUkVHVUxBVE9SWV9CQU5EXzVfQ0hBTk5FTFMsCi0JCQlFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfMjRfRkFUX0NIQU5ORUxTLAotCQkJRUVQUk9NXzQ5NjVfUkVHVUxBVE9SWV9CQU5EXzUyX0ZBVF9DSEFOTkVMUworCQkJRUVQUk9NXzQ5NjVfUkVHVUxBVE9SWV9CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCisJCQlFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwogCQl9LAogCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAogCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKQEAgLTIyODcsNiArMjMyNyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNDk2NV9vcHMgPSB7CisJLnVjb2RlID0gJml3bDQ5NjVfdWNvZGUsCiAJLmxpYiA9ICZpd2w0OTY1X2xpYiwKIAkuaGNtZCA9ICZpd2w0OTY1X2hjbWQsCiAJLnV0aWxzID0gJml3bDQ5NjVfaGNtZF91dGlscywKQEAgLTIzMDMsNyArMjM0NCw4IEBACiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNDk2NV9UWF9QT1dFUl9WRVJTSU9OLAogCS5vcHMgPSAmaXdsNDk2NV9vcHMsCiAJLm1vZF9wYXJhbXMgPSAmaXdsNDk2NV9tb2RfcGFyYW1zLAotCS51c2VfaXNyX2xlZ2FjeSA9IHRydWUKKwkudXNlX2lzcl9sZWdhY3kgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSBmYWxzZSwKIH07CiAKIC8qIE1vZHVsZSBmaXJtd2FyZSAqLwpAQCAtMjMxMyw4ICsyMzU1LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYW50ZW5uYSwgInNlbGVjdCBhbnRlbm5hICgxPU1haW4sIDI9QXV4LCBkZWZhdWx0IDAgW2JvdGhdKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHN3Y3J5cHRvLCBpd2w0OTY1X21vZF9wYXJhbXMuc3dfY3J5cHRvLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bywgInVzaW5nIGNyeXB0byBpbiBzb2Z0d2FyZSAoZGVmYXVsdCAwIFtoYXJkd2FyZV0pIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDQ5NjVfbW9kX3BhcmFtcy5kZWJ1ZywgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCgKIAlkaXNhYmxlX2h3X3NjYW4sIGl3bDQ5NjVfbW9kX3BhcmFtcy5kaXNhYmxlX2h3X3NjYW4sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfaHdfc2NhbiwgImRpc2FibGUgaGFyZHdhcmUgc2Nhbm5pbmcgKGRlZmF1bHQgMCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCBiM2M2NDhjLi4xZDUzOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC05MSw3ICs5MSw3IEBACiB9CiAKIAotc3RhdGljIGludCBpd2w1MDAwX2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2w1MDAwX2FwbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTM3LDcgKzEzNyw3IEBACiB9CiAKIC8qIEZJWE1FOiB0aGlzIGlzIGlkZW50aWNhbCB0byA0OTY1ICovCi1zdGF0aWMgdm9pZCBpd2w1MDAwX2FwbV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNTAwMF9hcG1fc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTU2LDcgKzE1Niw3IEBACiB9CiAKIAotc3RhdGljIGludCBpd2w1MDAwX2FwbV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsNTAwMF9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCkBAIC0xOTgsNyArMTk4LDggQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBpd2w1MDAwX25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQorLyogTklDIGNvbmZpZ3VyYXRpb24gZm9yIDUwMDAgc2VyaWVzIGFuZCB1cCAqLwordm9pZCBpd2w1MDAwX25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IHJhZGlvX2NmZzsKQEAgLTIzOSwxMSArMjQwLDExIEBACiAJCQkJQVBNR19QU19DVFJMX0VBUkxZX1BXUl9PRkZfUkVTRVRfRElTLAogCQkJCX5BUE1HX1BTX0NUUkxfRUFSTFlfUFdSX09GRl9SRVNFVF9ESVMpOwogCisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKIAotCiAvKgogICogRUVQUk9NCiAgKi8KQEAgLTI4Myw3ICsyODQsNyBAQAogCXJldHVybiAoYWRkcmVzcyAmIEFERFJFU1NfTVNLKSArIChvZmZzZXQgPDwgMSk7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNTAwMF9lZXByb21fY2FsaWJfdmVyc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit1MTYgaXdsNTAwMF9lZXByb21fY2FsaWJfdmVyc2lvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9lZXByb21fY2FsaWJfaGRyIHsKIAkJdTggdmVyc2lvbjsKQEAgLTM4OCw3ICszODksNyBAQAogCiBzdGF0aWMgc3RydWN0IGl3bF9zZW5zaXRpdml0eV9yYW5nZXMgaXdsNTAwMF9zZW5zaXRpdml0eSA9IHsKIAkubWluX25yZ19jY2sgPSA5NSwKLQkubWF4X25yZ19jY2sgPSAwLAorCS5tYXhfbnJnX2NjayA9IDAsIC8qIG5vdCB1c2VkLCBzZXQgdG8gMCAqLwogCS5hdXRvX2NvcnJfbWluX29mZG0gPSA5MCwKIAkuYXV0b19jb3JyX21pbl9vZmRtX21yYyA9IDE3MCwKIAkuYXV0b19jb3JyX21pbl9vZmRtX3gxID0gMTIwLApAQCAtNDA3LDcgKzQwOCwyOSBAQAogCS5ucmdfdGhfb2ZkbSA9IDk1LAogfTsKIAotc3RhdGljIGNvbnN0IHU4ICppd2w1MDAwX2VlcHJvbV9xdWVyeV9hZGRyKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3N0YXRpYyBzdHJ1Y3QgaXdsX3NlbnNpdGl2aXR5X3JhbmdlcyBpd2w1MTUwX3NlbnNpdGl2aXR5ID0geworCS5taW5fbnJnX2NjayA9IDk1LAorCS5tYXhfbnJnX2NjayA9IDAsIC8qIG5vdCB1c2VkLCBzZXQgdG8gMCAqLworCS5hdXRvX2NvcnJfbWluX29mZG0gPSA5MCwKKwkuYXV0b19jb3JyX21pbl9vZmRtX21yYyA9IDE3MCwKKwkuYXV0b19jb3JyX21pbl9vZmRtX3gxID0gMTA1LAorCS5hdXRvX2NvcnJfbWluX29mZG1fbXJjX3gxID0gMjIwLAorCisJLmF1dG9fY29ycl9tYXhfb2ZkbSA9IDEyMCwKKwkuYXV0b19jb3JyX21heF9vZmRtX21yYyA9IDIxMCwKKwkvKiBtYXggPSBtaW4gZm9yIHBlcmZvcm1hbmNlIGJ1ZyBpbiA1MTUwIERTUCAqLworCS5hdXRvX2NvcnJfbWF4X29mZG1feDEgPSAxMDUsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEgPSAyMjAsCisKKwkuYXV0b19jb3JyX21pbl9jY2sgPSAxMjUsCisJLmF1dG9fY29ycl9tYXhfY2NrID0gMjAwLAorCS5hdXRvX2NvcnJfbWluX2Nja19tcmMgPSAxNzAsCisJLmF1dG9fY29ycl9tYXhfY2NrX21yYyA9IDQwMCwKKwkubnJnX3RoX2NjayA9IDk1LAorCS5ucmdfdGhfb2ZkbSA9IDk1LAorfTsKKworY29uc3QgdTggKml3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgICBzaXplX3Qgb2Zmc2V0KQogewogCXUzMiBhZGRyZXNzID0gZWVwcm9tX2luZGlyZWN0X2FkZHJlc3MocHJpdiwgb2Zmc2V0KTsKQEAgLTQxOCw3ICs0NDEsNyBAQAogc3RhdGljIHZvaWQgaXdsNTE1MF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAljb25zdCBzMzIgdm9sdDJ0ZW1wX2NvZWYgPSBJV0xfNTE1MF9WT0xUQUdFX1RPX1RFTVBFUkFUVVJFX0NPRUZGOwotCXMzMiB0aHJlc2hvbGQgPSAoczMyKUNFTFNJVVNfVE9fS0VMVklOKENUX0tJTExfVEhSRVNIT0xEKSAtCisJczMyIHRocmVzaG9sZCA9IChzMzIpQ0VMU0lVU19UT19LRUxWSU4oQ1RfS0lMTF9USFJFU0hPTERfTEVHQUNZKSAtCiAJCQlpd2xfdGVtcF9jYWxpYl90b19vZmZzZXQocHJpdik7CiAKIAlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSB0aHJlc2hvbGQgKiB2b2x0MnRlbXBfY29lZjsKQEAgLTQyNyw3ICs0NTAsNyBAQAogc3RhdGljIHZvaWQgaXdsNTAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiB3YW50IENlbHNpdXMgKi8KLQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRF9MRUdBQ1k7CiB9CiAKIC8qCkBAIC00NzEsNyArNDk0LDcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsX2NhbGliX2hkciAqaGRyID0gKHN0cnVjdCBpd2xfY2FsaWJfaGRyICopcGt0LT51LnJhdzsKLQlpbnQgbGVuID0gbGUzMl90b19jcHUocGt0LT5sZW4pICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CisJaW50IGxlbiA9IGxlMzJfdG9fY3B1KHBrdC0+bGVuX25fZmxhZ3MpICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CiAJaW50IGluZGV4OwogCiAJLyogcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBsZW5ndGggZmllbGQgaXRzZWxmICovCkBAIC02MDIsNyArNjI1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bDUwMDBfbG9hZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsNTAwMF9sb2FkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNjI5LDcgKzY1Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtNzA1LDcgKzcyOCw3IEBACiAJCQkJc2l6ZW9mKGNvZXhfY21kKSwgJmNvZXhfY21kKTsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX2FsaXZlX25vdGlmeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitpbnQgaXdsNTAwMF9hbGl2ZV9ub3RpZnkoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXUzMiBhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03OTIsNyArODE1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaWYgKChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPiBJV0w1MF9OVU1fUVVFVUVTKSB8fAogCSAgICAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewpAQCAtODIyLDEyICs4NDUsMTAgQEAKIAl9CiAKIAlwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplID0gMDsKLQlwcml2LT5od19wYXJhbXMuZmF0X2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKKwlwcml2LT5od19wYXJhbXMuaHQ0MF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOwogCi0JcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNTAwMF9zZW5zaXRpdml0eTsKLQogCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3R4X2FudCk7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KTsKIAlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQ7CkBAIC04MzYsOSArODU3LDExIEBACiAJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnRlbXBfb3BzLnNldF9jdF9raWxsKQogCQlwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy5zZXRfY3Rfa2lsbChwcml2KTsKIAorCS8qIFNldCBpbml0aWFsIHNlbnNpdGl2aXR5IHBhcmFtZXRlcnMgKi8KIAkvKiBTZXQgaW5pdGlhbCBjYWxpYnJhdGlvbiBzZXQgKi8KIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgorCQlwcml2LT5od19wYXJhbXMuc2VucyA9ICZpd2w1MTUwX3NlbnNpdGl2aXR5OwogCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9EQykJCXwKIAkJCUJJVChJV0xfQ0FMSUJfTE8pCQl8CkBAIC04NDcsNiArODcwLDcgQEAKIAogCQlicmVhazsKIAlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMuc2VucyA9ICZpd2w1MDAwX3NlbnNpdGl2aXR5OwogCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAogCQkJQklUKElXTF9DQUxJQl9MTykJCXwKQEAgLTg2Miw3ICs4ODYsNyBAQAogLyoqCiAgKiBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsIC0gU2V0IHVwIGVudHJ5IGluIFR4IGJ5dGUtY291bnQgYXJyYXkKICAqLwotc3RhdGljIHZvaWQgaXdsNTAwMF90eHFfdXBkYXRlX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit2b2lkIGl3bDUwMDBfdHhxX3VwZGF0ZV9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAogCQkJCQkgICAgdTE2IGJ5dGVfY250KQogewpAQCAtOTAyLDcgKzkyNiw3IEBACiAJCQl0ZmRfb2Zmc2V0W1RGRF9RVUVVRV9TSVpFX01BWCArIHdyaXRlX3B0cl0gPSBiY19lbnQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit2b2lkIGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKIHsKIAlzdHJ1Y3QgaXdsNTAwMF9zY2RfYmNfdGJsICpzY2RfYmNfdGJsID0gcHJpdi0+c2NkX2JjX3RibHMuYWRkcjsKQEAgLTk1Nyw3ICs5ODEsNyBAQAogCQkoMSA8PCBJV0w1MF9TQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1NDRF9BQ1RfRU4pKTsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwKK2ludCBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwKIAkJCQkgIGludCB0eF9maWZvLCBpbnQgc3RhX2lkLCBpbnQgdGlkLCB1MTYgc3NuX2lkeCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTAxOCw3ICsxMDQyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2w1MDAwX3R4cV9hZ2dfZGlzYWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiB0eHFfaWQsCitpbnQgaXdsNTAwMF90eHFfYWdnX2Rpc2FibGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgdHhxX2lkLAogCQkJCSAgIHUxNiBzc25faWR4LCB1OCB0eF9maWZvKQogewogCWlmICgoSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUgPiB0eHFfaWQpIHx8CkBAIC0xMDYxLDcgKzEwODUsNyBAQAogICogQWN0aXZhdGUvRGVhY3RpdmF0ZSBUeCBETUEvRklGTyBjaGFubmVscyBhY2NvcmRpbmcgdHggZmlmb3MgbWFzawogICogbXVzdCBiZSBjYWxsZWQgdW5kZXIgcHJpdi0+bG9jayBhbmQgbWFjIGFjY2VzcwogICovCi1zdGF0aWMgdm9pZCBpd2w1MDAwX3R4cV9zZXRfc2NoZWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzaykKK3ZvaWQgaXdsNTAwMF90eHFfc2V0X3NjaGVkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG1hc2spCiB7CiAJaXdsX3dyaXRlX3BycGgocHJpdiwgSVdMNTBfU0NEX1RYRkFDVCwgbWFzayk7CiB9CkBAIC0xMjgyLDEzICsxMzA2LDEzIEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHZvaWQgaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBpbiA1MDAwIHRoZSB0eCBwb3dlciBjYWxpYnJhdGlvbiBpcyBkb25lIGluIHVDb2RlICovCiAJcHJpdi0+ZGlzYWJsZV90eF9wb3dlcl9jYWwgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBpd2w1MDAwX3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2w1MDAwX3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIGluaXQgY2FsaWJyYXRpb24gaGFuZGxlcnMgKi8KIAlwcml2LT5yeF9oYW5kbGVyc1tDQUxJQlJBVElPTl9SRVNfTk9USUZJQ0FUSU9OXSA9CkBAIC0xMjk5LDcgKzEzMjMsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQoraW50IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKIAlyZXR1cm4gKGFkZHIgPj0gSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCiAJCShhZGRyIDwgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQpOwpAQCAtMTM1MSw3ICsxMzc1LDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci1zdGF0aWMgaW50ICBpd2w1MDAwX3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50ICBpd2w1MDAwX3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBpd2w1MDAwX3R4X3Bvd2VyX2RibV9jbWQgdHhfcG93ZXJfY21kOwogCXU4IHR4X2FudF9jZmdfY21kOwpAQCAtMTM3MSwxMCArMTM5NSwxMSBAQAogCQkJCSAgICAgICBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsNTAwMF90ZW1wZXJhdHVyZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit2b2lkIGl3bDUwMDBfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCS8qIHN0b3JlIHRlbXBlcmF0dXJlIGZyb20gc3RhdGlzdGljcyAoaW4gQ2Vsc2l1cykgKi8KIAlwcml2LT50ZW1wZXJhdHVyZSA9IGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSk7CisJaXdsX3R0X2hhbmRsZXIocHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDUxNTBfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtMTM4Niw2ICsxNDExLDcgQEAKIAl2dCA9IHZ0IC8gSVdMXzUxNTBfVk9MVEFHRV9UT19URU1QRVJBVFVSRV9DT0VGRiArIG9mZnNldDsKIAkvKiBub3cgdnQgaG9sZCB0aGUgdGVtcGVyYXR1cmUgaW4gS2VsdmluICovCiAJcHJpdi0+dGVtcGVyYXR1cmUgPSBLRUxWSU5fVE9fQ0VMU0lVUyh2dCk7CisJaXdsX3R0X2hhbmRsZXIocHJpdik7CiB9CiAKIC8qIENhbGMgbWF4IHNpZ25hbCBsZXZlbCAoZEJtKSBhbW9uZyAzIHBvc3NpYmxlIHJlY2VpdmVycyAqLwpAQCAtMTQyNiw2ICsxNDUyLDQ0IEBACiAJcmV0dXJuIG1heF9yc3NpIC0gYWdjIC0gSVdMNDlfUlNTSV9PRkZTRVQ7CiB9CiAKKyNkZWZpbmUgSVdMNTAwMF9VQ09ERV9HRVQoaXRlbSkJCQkJCQlcCitzdGF0aWMgdTMyIGl3bDUwMDBfdWNvZGVfZ2V0XyMjaXRlbShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsXAorCQkJCSAgICB1MzIgYXBpX3ZlcikJCQlcCit7CQkJCQkJCQkJXAorCWlmIChhcGlfdmVyIDw9IDIpCQkJCQkJXAorCQlyZXR1cm4gbGUzMl90b19jcHUodWNvZGUtPnUudjEuaXRlbSk7CQkJXAorCXJldHVybiBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5pdGVtKTsJCQkJXAorfQorCitzdGF0aWMgdTMyIGl3bDUwMDBfdWNvZGVfZ2V0X2hlYWRlcl9zaXplKHUzMiBhcGlfdmVyKQoreworCWlmIChhcGlfdmVyIDw9IDIpCisJCXJldHVybiBVQ09ERV9IRUFERVJfU0laRSgxKTsKKwlyZXR1cm4gVUNPREVfSEVBREVSX1NJWkUoMik7Cit9CisKK3N0YXRpYyB1MzIgaXdsNTAwMF91Y29kZV9nZXRfYnVpbGQoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKnVjb2RlLAorCQkJCSAgIHUzMiBhcGlfdmVyKQoreworCWlmIChhcGlfdmVyIDw9IDIpCisJCXJldHVybiAwOworCXJldHVybiBsZTMyX3RvX2NwdSh1Y29kZS0+dS52Mi5idWlsZCk7Cit9CisKK3N0YXRpYyB1OCAqaXdsNTAwMF91Y29kZV9nZXRfZGF0YShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGUsCisJCQkJICB1MzIgYXBpX3ZlcikKK3sKKwlpZiAoYXBpX3ZlciA8PSAyKQorCQlyZXR1cm4gKHU4ICopIHVjb2RlLT51LnYxLmRhdGE7CisJcmV0dXJuICh1OCAqKSB1Y29kZS0+dS52Mi5kYXRhOworfQorCitJV0w1MDAwX1VDT0RFX0dFVChpbnN0X3NpemUpOworSVdMNTAwMF9VQ09ERV9HRVQoZGF0YV9zaXplKTsKK0lXTDUwMDBfVUNPREVfR0VUKGluaXRfc2l6ZSk7CitJV0w1MDAwX1VDT0RFX0dFVChpbml0X2RhdGFfc2l6ZSk7CitJV0w1MDAwX1VDT0RFX0dFVChib290X3NpemUpOworCiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZCA9IHsKIAkucnhvbl9hc3NvYyA9IGl3bDUwMDBfc2VuZF9yeG9uX2Fzc29jLAogCS5jb21taXRfcnhvbiA9IGl3bF9jb21taXRfcnhvbiwKQEAgLTE0NDEsNiArMTUwNSwxNyBAQAogCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKIH07CiAKK3N0cnVjdCBpd2xfdWNvZGVfb3BzIGl3bDUwMDBfdWNvZGUgPSB7CisJLmdldF9oZWFkZXJfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2hlYWRlcl9zaXplLAorCS5nZXRfYnVpbGQgPSBpd2w1MDAwX3Vjb2RlX2dldF9idWlsZCwKKwkuZ2V0X2luc3Rfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2luc3Rfc2l6ZSwKKwkuZ2V0X2RhdGFfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2RhdGFfc2l6ZSwKKwkuZ2V0X2luaXRfc2l6ZSA9IGl3bDUwMDBfdWNvZGVfZ2V0X2luaXRfc2l6ZSwKKwkuZ2V0X2luaXRfZGF0YV9zaXplID0gaXdsNTAwMF91Y29kZV9nZXRfaW5pdF9kYXRhX3NpemUsCisJLmdldF9ib290X3NpemUgPSBpd2w1MDAwX3Vjb2RlX2dldF9ib290X3NpemUsCisJLmdldF9kYXRhID0gaXdsNTAwMF91Y29kZV9nZXRfZGF0YSwKK307CisKIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLApAQCAtMTQ3Myw4ICsxNTQ4LDggQEAKIAkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCiAJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAogCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKLQkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0ZBVF9DSEFOTkVMUywKLQkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzUyX0ZBVF9DSEFOTkVMUworCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzUyX0hUNDBfQ0hBTk5FTFMKIAkJfSwKIAkJLnZlcmlmeV9zaWduYXR1cmUgID0gaXdsY29yZV9lZXByb21fdmVyaWZ5X3NpZ25hdHVyZSwKIAkJLmFjcXVpcmVfc2VtYXBob3JlID0gaXdsY29yZV9lZXByb21fYWNxdWlyZV9zZW1hcGhvcmUsCkBAIC0xNTIzLDggKzE1OTgsOCBAQAogCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfM19DSEFOTkVMUywKIAkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzRfQ0hBTk5FTFMsCiAJCQlFRVBST01fNTAwMF9SRUdfQkFORF81X0NIQU5ORUxTLAotCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMjRfRkFUX0NIQU5ORUxTLAotCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfRkFUX0NIQU5ORUxTCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8yNF9IVDQwX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfSFQ0MF9DSEFOTkVMUwogCQl9LAogCQkudmVyaWZ5X3NpZ25hdHVyZSAgPSBpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlLAogCQkuYWNxdWlyZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZSwKQEAgLTE1NDIsMTIgKzE2MTcsMTQgQEAKIH07CiAKIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzID0geworCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsNTAwMF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLAogCS51dGlscyA9ICZpd2w1MDAwX2hjbWRfdXRpbHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTE1MF9vcHMgPSB7CisJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCiAJLmxpYiA9ICZpd2w1MTUwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCiAJLnV0aWxzID0gJml3bDUwMDBfaGNtZF91dGlscywKQEAgLTE1NzYsNiArMTY1Myw3IEBACiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLm5lZWRfcGxsX2NmZyA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2JnX2NmZyA9IHsKQEAgLTE1OTIsNiArMTY3MCw3IEBACiAJLnZhbGlkX3R4X2FudCA9IEFOVF9CLAogCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCiAJLm5lZWRfcGxsX2NmZyA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2FiZ19jZmcgPSB7CkBAIC0xNjA4LDYgKzE2ODcsNyBAQAogCS52YWxpZF90eF9hbnQgPSBBTlRfQiwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hZ25fY2ZnID0gewpAQCAtMTYyNCw2ICsxNzA0LDcgQEAKIAkudmFsaWRfdHhfYW50ID0gQU5UX0IsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKIAkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKKwkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUzNTBfYWduX2NmZyA9IHsKQEAgLTE2NDAsNiArMTcyMSw3IEBACiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLm5lZWRfcGxsX2NmZyA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmcgPSB7CkBAIC0xNjU2LDYgKzE3MzgsNyBAQAogCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDUwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDUwMDBfVUNPREVfQVBJX01BWCkpOwpAQCAtMTY2NCw4ICsxNzQ3LDYgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChzd2NyeXB0bzUwLCBpd2w1MF9tb2RfcGFyYW1zLnN3X2NyeXB0bywgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHN3Y3J5cHRvNTAsCiAJCSAgInVzaW5nIHNvZnR3YXJlIGNyeXB0byBlbmdpbmUgKGRlZmF1bHQgMCBbaGFyZHdhcmVdKVxuIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWc1MCwgaXdsNTBfbW9kX3BhcmFtcy5kZWJ1ZywgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnNTAsICI1MFhYIGRlYnVnIG91dHB1dCBtYXNrIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bTUwLCBpd2w1MF9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHF1ZXVlc19udW01MCwgIm51bWJlciBvZiBodyBxdWV1ZXMgaW4gNTB4eCBzZXJpZXMiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZCgxMW5fZGlzYWJsZTUwLCBpd2w1MF9tb2RfcGFyYW1zLmRpc2FibGVfMTFuLCBpbnQsIDA0NDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCmluZGV4IGJkNDM4ZDguLjgyYjljOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTQ2LDggKzQ2LDggQEAKICNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgogCiAvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwotI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggMgotI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NQVggMgorI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggNAorI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NQVggNAogCiAvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCiAjZGVmaW5lIElXTDYwMDBfVUNPREVfQVBJX01JTiAxCkBAIC02MSw2ICs2MSw4MiBAQAogI2RlZmluZSBfSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCiAjZGVmaW5lIElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKIAorc3RhdGljIHZvaWQgaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwkvKiB3YW50IENlbHNpdXMgKi8KKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKKwlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF9leGl0X3RocmVzaG9sZCA9IENUX0tJTExfRVhJVF9USFJFU0hPTEQ7Cit9CisKKy8qIE5JQyBjb25maWd1cmF0aW9uIGZvciA2MDAwIHNlcmllcyAqLworc3RhdGljIHZvaWQgaXdsNjAwMF9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpd2w1MDAwX25pY19jb25maWcocHJpdik7CisKKwkvKiBubyBsb2NraW5nIHJlcXVpcmVkIGZvciByZWdpc3RlciB3cml0ZSAqLworCWlmIChwcml2LT5jZmctPnBhX3R5cGUgPT0gSVdMX1BBX0hZQlJJRCkgeworCQkvKiAyeDIgaHlicmlkIHBoeSB0eXBlICovCisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAorCQkJICAgICBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9IWUIpOworCX0gZWxzZSBpZiAocHJpdi0+Y2ZnLT5wYV90eXBlID09IElXTF9QQV9JTlRFUk5BTCkgeworCQkvKiAyeDIgSVBBIHBoeSB0eXBlICovCisJCWl3bF93cml0ZTMyKHByaXYsIENTUl9HUF9EUklWRVJfUkVHLAorCQkJICAgICBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9JUEEpOworCX0KKwkvKiBlbHNlIGRvIG5vdGhpbmcsIHVDb2RlIGNvbmZpZ3VyZWQgKi8KK30KKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w2MDAwX2xpYiA9IHsKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAorCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAorCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAorCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCisJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAorCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAorCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAorCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAorCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKKwkuc2VuZF90eF9wb3dlciA9IGl3bDUwMDBfc2VuZF90eF9wb3dlciwKKwkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKKwkuYXBtX29wcyA9IHsKKwkJLmluaXQgPQlpd2w1MDAwX2FwbV9pbml0LAorCQkucmVzZXQgPSBpd2w1MDAwX2FwbV9yZXNldCwKKwkJLnN0b3AgPSBpd2w1MDAwX2FwbV9zdG9wLAorCQkuY29uZmlnID0gaXdsNjAwMF9uaWNfY29uZmlnLAorCQkuc2V0X3B3cl9zcmMgPSBpd2xfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8xX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLmNhbGliX3ZlcnNpb24JPSBpd2w1MDAwX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAorCQkucXVlcnlfYWRkciA9IGl3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIsCisJCS51cGRhdGVfZW5oYW5jZWRfdHhwb3dlciA9IGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXIsCisJfSwKKwkucG9zdF9hc3NvY2lhdGUgPSBpd2xfcG9zdF9hc3NvY2lhdGUsCisJLmlzciA9IGl3bF9pc3JfaWN0LAorCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAorCS50ZW1wX29wcyA9IHsKKwkJLnRlbXBlcmF0dXJlID0gaXdsNTAwMF90ZW1wZXJhdHVyZSwKKwkJLnNldF9jdF9raWxsID0gaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkLAorCSB9LAorfTsKKwogc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNjAwMF9oY21kX3V0aWxzID0gewogCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAogCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCkBAIC02OSw0MSArMTQ1LDU3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7Ci0JLmxpYiA9ICZpd2w1MDAwX2xpYiwKKwkudWNvZGUgPSAmaXdsNTAwMF91Y29kZSwKKwkubGliID0gJml3bDYwMDBfbGliLAogCS5oY21kID0gJml3bDUwMDBfaGNtZCwKIAkudXRpbHMgPSAmaXdsNjAwMF9oY21kX3V0aWxzLAogfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnID0gewotCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBRyIsCi0JLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCi0JLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCi0JLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCi0JLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCi0JLm9wcyA9ICZpd2w2MDAwX29wcywKLQkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCi0JLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKLQkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCi0JLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKLQkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAotCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCi0JLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAotfTsKIAotc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZyA9IHsKKy8qCisgKiAiaCI6IEh5YnJpZCBjb25maWd1cmF0aW9uLCB1c2UgYm90aCBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgUG93ZXIgQW1wbGlmaWVyCisgKi8KK3N0cnVjdCBpd2xfY2ZnIGl3bDYwMDBoXzJhZ25fY2ZnID0gewogCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBR04iLAogCS5md19uYW1lX3ByZSA9IElXTDYwMDBfRldfUFJFLAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNjAwMF9VQ09ERV9BUElfTUFYLAogCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKIAkub3BzID0gJml3bDYwMDBfb3BzLAotCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKIAkudmFsaWRfdHhfYW50ID0gQU5UX0FCLAogCS52YWxpZF9yeF9hbnQgPSBBTlRfQUIsCiAJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX0hZQlJJRCwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAorfTsKKworLyoKKyAqICJpIjogSW50ZXJuYWwgY29uZmlndXJhdGlvbiwgdXNlIGludGVybmFsIFBvd2VyIEFtcGxpZmllcgorICovCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwaV8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX0lOVEVSTkFMLAorCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCisJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnID0gewpAQCAtMTEzLDEzICsyMDUsMTcgQEAKIAkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCiAJLm9wcyA9ICZpd2w2MDAwX29wcywKLQkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV9zaXplID0gT1RQX0xPV19JTUFHRV9TSVpFLAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAogCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKKwkucGFfdHlwZSA9IElXTF9QQV9TWVNURU0sCisJLm1heF9sbF9pdGVtcyA9IE9UUF9NQVhfTExfSVRFTVNfNngwMCwKKwkuc2hhZG93X3JhbV9zdXBwb3J0ID0gdHJ1ZSwKKwkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfM2Fnbl9jZmcgPSB7CkBAIC0xMjksMTMgKzIyNSwxNyBAQAogCS51Y29kZV9hcGlfbWluID0gSVdMNjAwMF9VQ09ERV9BUElfTUlOLAogCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKIAkub3BzID0gJml3bDYwMDBfb3BzLAotCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3NpemUgPSBPVFBfTE9XX0lNQUdFX1NJWkUsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKIAkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKIAkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKIAkubmVlZF9wbGxfY2ZnID0gZmFsc2UsCisJLnBhX3R5cGUgPSBJV0xfUEFfU1lTVEVNLAorCS5tYXhfbGxfaXRlbXMgPSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAsCisJLnNoYWRvd19yYW1fc3VwcG9ydCA9IHRydWUsCisJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzNhZ25fY2ZnID0gewpAQCAtMTQ1LDEzICsyNDUsMTcgQEAKIAkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCiAJLm9wcyA9ICZpd2w2MDAwX29wcywKLQkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV9zaXplID0gT1RQX0xPV19JTUFHRV9TSVpFLAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCiAJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorCS5wYV90eXBlID0gSVdMX1BBX1NZU1RFTSwKKwkubWF4X2xsX2l0ZW1zID0gT1RQX01BWF9MTF9JVEVNU182eDAwLAorCS5zaGFkb3dfcmFtX3N1cHBvcnQgPSB0cnVlLAorCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSB0cnVlLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfTU9EVUxFX0ZJUk1XQVJFKElXTDYwMDBfVUNPREVfQVBJX01BWCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCBmZjIwZTUwNC4uNDBiMjA3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAllbnVtIGl3bF90YWJsZV90eXBlIGxxX3R5cGU7CiAJdTggYW50X3R5cGU7CiAJdTggaXNfU0dJOwkvKiAxID0gc2hvcnQgZ3VhcmQgaW50ZXJ2YWwgKi8KLQl1OCBpc19mYXQ7CS8qIDEgPSA0MCBNSHogY2hhbm5lbCB3aWR0aCAqLworCXU4IGlzX2h0NDA7CS8qIDEgPSA0MCBNSHogY2hhbm5lbCB3aWR0aCAqLwogCXU4IGlzX2R1cDsJLyogMSA9IGR1cGxpY2F0ZWQgZGF0YSBzdHJlYW1zICovCiAJdTggYWN0aW9uOwkvKiBjaGFuZ2UgbW9kdWxhdGlvbjsgSVdMX1tMRUdBQ1kvU0lTTy9NSU1PXV9TV0lUQ0hfKiAqLwogCXU4IG1heF9zZWFyY2g7CS8qIG1heGltdW4gbnVtYmVyIG9mIHRhYmxlcyB3ZSBjYW4gc2VhcmNoICovCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkJICAgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSk7Ci1zdGF0aWMgdm9pZCByc19maWxsX2xpbmtfY21kKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIHJzX2ZpbGxfbGlua19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICBzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhLCB1MzIgcmF0ZV9uX2ZsYWdzKTsKIAogCkBAIC0zMzIsNiArMzMyLDkgQEAKIAl9IGVsc2UKIAkJcmV0dXJuIE1BWF9USURfQ09VTlQ7CiAKKwlpZiAodW5saWtlbHkodGlkID49IFRJRF9NQVhfTE9BRF9DT1VOVCkpCisJCXJldHVybiBNQVhfVElEX0NPVU5UOworCiAJdGwgPSAmbHFfZGF0YS0+bG9hZFt0aWRdOwogCiAJY3Vycl90aW1lIC09IGN1cnJfdGltZSAlIFRJRF9ST1VORF9WQUxVRTsKQEAgLTUzOSwxMSArNTQyLDExIEBACiAJCQkJCQkgICAgIFJBVEVfTUNTX0FOVF9BQkNfTVNLKTsKIAogCWlmIChpc19IdCh0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmICh0YmwtPmlzX2ZhdCkgeworCQlpZiAodGJsLT5pc19odDQwKSB7CiAJCQlpZiAodGJsLT5pc19kdXApCiAJCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0RVUF9NU0s7CiAJCQllbHNlCi0JCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0ZBVF9NU0s7CisJCQkJcmF0ZV9uX2ZsYWdzIHw9IFJBVEVfTUNTX0hUNDBfTVNLOwogCQl9CiAJCWlmICh0YmwtPmlzX1NHSSkKIAkJCXJhdGVfbl9mbGFncyB8PSBSQVRFX01DU19TR0lfTVNLOwpAQCAtNTc5LDcgKzU4Miw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAl0YmwtPmlzX1NHSSA9IDA7CS8qIGRlZmF1bHQgbGVnYWN5IHNldHVwICovCi0JdGJsLT5pc19mYXQgPSAwOworCXRibC0+aXNfaHQ0MCA9IDA7CiAJdGJsLT5pc19kdXAgPSAwOwogCXRibC0+YW50X3R5cGUgPSAoYW50X21zayA+PiBSQVRFX01DU19BTlRfUE9TKTsKIAl0YmwtPmxxX3R5cGUgPSBMUV9OT05FOwpAQCAtNTk4LDkgKzYwMSw5IEBACiAJCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19TR0lfTVNLKQogCQkJdGJsLT5pc19TR0kgPSAxOwogCi0JCWlmICgocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfRkFUX01TSykgfHwKKwkJaWYgKChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVDQwX01TSykgfHwKIAkJICAgIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19EVVBfTVNLKSkKLQkJCXRibC0+aXNfZmF0ID0gMTsKKwkJCXRibC0+aXNfaHQ0MCA9IDE7CiAKIAkJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0RVUF9NU0spCiAJCQl0YmwtPmlzX2R1cCA9IDE7CkBAIC02NTQsMTkgKzY1NywxNSBAQAogCXJldHVybiAxOwogfQogCi0vKiBpbiA0OTY1IHdlIGRvbid0IHVzZSBncmVlbmZpZWxkIGF0IGFsbCAqLwotc3RhdGljIGlubGluZSB1OCByc191c2VfZ3JlZW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQorLyoqCisgKiBHcmVlbi1maWVsZCBtb2RlIGlzIHZhbGlkIGlmIHRoZSBzdGF0aW9uIHN1cHBvcnRzIGl0IGFuZAorICogdGhlcmUgYXJlIG5vIG5vbi1HRiBzdGF0aW9ucyBwcmVzZW50IGluIHRoZSBCU1MuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTggcnNfdXNlX2dyZWVuKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2NvbmYpCiB7Ci0JdTggaXNfZ3JlZW47Ci0KLQlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KQotCQlpc19ncmVlbiA9IDA7Ci0JZWxzZQotCQlpc19ncmVlbiA9IChjb25mX2lzX2h0KGNvbmYpICYmCi0JCQkgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19ncmVlbl9maWVsZCAmJgotCQkJICAgIXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLm5vbl9HRl9TVEFfcHJlc2VudCk7Ci0JcmV0dXJuIGlzX2dyZWVuOworCXJldHVybiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEKSAmJgorCQkhKGh0X2NvbmYtPm5vbl9HRl9TVEFfcHJlc2VudCk7CiB9CiAKIC8qKgpAQCAtNzc2LDcgKzc3NSw3IEBACiAJCWlmIChudW1fb2ZfYW50KHRibC0+YW50X3R5cGUpID4gMSkKIAkJCXRibC0+YW50X3R5cGUgPSBBTlRfQTsvKkZJWE1FOlJTKi8KIAotCQl0YmwtPmlzX2ZhdCA9IDA7CisJCXRibC0+aXNfaHQ0MCA9IDA7CiAJCXRibC0+aXNfU0dJID0gMDsKIAkJdGJsLT5tYXhfc2VhcmNoID0gSVdMX01BWF9TRUFSQ0g7CiAJfQpAQCAtODE5LDE1ICs4MTgsMTUgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXU4IHJldHJpZXM7Ci0JaW50IHJzX2luZGV4LCBpbmRleCA9IDA7CisJaW50IHJzX2luZGV4LCBtYWNfaW5kZXgsIGluZGV4ID0gMDsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGl3bF9saW5rX3F1YWxpdHlfY21kICp0YWJsZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdyA9IE5VTEw7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKnNlYXJjaF93aW4gPSBOVUxMOworCWVudW0gbWFjODAyMTFfcmF0ZV9jb250cm9sX2ZsYWdzIG1hY19mbGFnczsKIAl1MzIgdHhfcmF0ZTsKIAlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvIHRibF90eXBlOwogCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gKmN1cnJfdGJsLCAqc2VhcmNoX3RibDsKQEAgLTg3NywxNyArODc2LDI0IEBACiAJcnNfZ2V0X3RibF9pbmZvX2Zyb21fbWNzKHR4X3JhdGUsIHByaXYtPmJhbmQsICZ0YmxfdHlwZSwgJnJzX2luZGV4KTsKIAlpZiAocHJpdi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQogCQlyc19pbmRleCAtPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCW1hY19mbGFncyA9IGluZm8tPnN0YXR1cy5yYXRlc1swXS5mbGFnczsKKwltYWNfaW5kZXggPSBpbmZvLT5zdGF0dXMucmF0ZXNbMF0uaWR4OworCS8qIEZvciBIVCBwYWNrZXRzLCBtYXAgTUNTIHRvIFBMQ1AgKi8KKwlpZiAobWFjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgeworCQltYWNfaW5kZXggJj0gUkFURV9NQ1NfQ09ERV9NU0s7CS8qIFJlbW92ZSAjIG9mIHN0cmVhbXMgKi8KKwkJaWYgKG1hY19pbmRleCA+PSAoSVdMX1JBVEVfOU1fSU5ERVggLSBJV0xfRklSU1RfT0ZETV9SQVRFKSkKKwkJCW1hY19pbmRleCsrOworCX0KIAotCWlmICgoaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA8IDApIHx8Ci0JICAgICh0YmxfdHlwZS5pc19TR0kgIT0gISEoaW5mby0+c3RhdHVzLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSkgfHwKLQkgICAgKHRibF90eXBlLmlzX2ZhdCAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSkgfHwKLQkgICAgKHRibF90eXBlLmlzX2R1cCAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpKSB8fAorCWlmICgobWFjX2luZGV4IDwgMCkgfHwKKwkgICAgKHRibF90eXBlLmlzX1NHSSAhPSAhIShtYWNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpKSB8fAorCSAgICAodGJsX3R5cGUuaXNfaHQ0MCAhPSAhIShtYWNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSkgfHwKKwkgICAgKHRibF90eXBlLmlzX2R1cCAhPSAhIShtYWNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEEpKSB8fAogCSAgICAodGJsX3R5cGUuYW50X3R5cGUgIT0gaW5mby0+YW50ZW5uYV9zZWxfdHgpIHx8Ci0JICAgICghISh0eF9yYXRlICYgUkFURV9NQ1NfSFRfTVNLKSAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkgfHwKLQkgICAgKCEhKHR4X3JhdGUgJiBSQVRFX01DU19HRl9NU0spICE9ICEhKGluZm8tPnN0YXR1cy5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkpIHx8Ci0JICAgIChody0+d2lwaHktPmJhbmRzW3ByaXYtPmJhbmRdLT5iaXRyYXRlc1tyc19pbmRleF0uYml0cmF0ZSAhPQotCSAgICAgaHctPndpcGh5LT5iYW5kc1tpbmZvLT5iYW5kXS0+Yml0cmF0ZXNbaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeF0uYml0cmF0ZSkpIHsKLQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImluaXRpYWwgcmF0ZSBkb2VzIG5vdCBtYXRjaCAweCV4XG4iLCB0eF9yYXRlKTsKKwkgICAgKCEhKHR4X3JhdGUgJiBSQVRFX01DU19IVF9NU0spICE9ICEhKG1hY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKSB8fAorCSAgICAoISEodHhfcmF0ZSAmIFJBVEVfTUNTX0dGX01TSykgIT0gISEobWFjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKSkgfHwKKwkgICAgKHJzX2luZGV4ICE9IG1hY19pbmRleCkpIHsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImluaXRpYWwgcmF0ZSAlZCBkb2VzIG5vdCBtYXRjaCAlZCAoMHgleClcbiIsIG1hY19pbmRleCwgcnNfaW5kZXgsIHR4X3JhdGUpOwogCQkvKiB0aGUgbGFzdCBMUSBjb21tYW5kIGNvdWxkIGZhaWxlZCBzbyB0aGUgTFEgaW4gdWNvZGUgbm90CiAJCSAqIHRoZSBzYW1lIGluIGRyaXZlciBzeW5jIHVwCiAJCSAqLwpAQCAtMTA0OSw3ICsxMDU1LDcgQEAKIAkJZWxzZQogCQkJdGJsLT5leHBlY3RlZF90cHQgPSBleHBlY3RlZF90cHRfQTsKIAl9IGVsc2UgaWYgKGlzX3Npc28odGJsLT5scV90eXBlKSkgewotCQlpZiAodGJsLT5pc19mYXQgJiYgIWxxX3N0YS0+aXNfZHVwKQorCQlpZiAodGJsLT5pc19odDQwICYmICFscV9zdGEtPmlzX2R1cCkKIAkJCWlmICh0YmwtPmlzX1NHSSkKIAkJCQl0YmwtPmV4cGVjdGVkX3RwdCA9IGV4cGVjdGVkX3RwdF9zaXNvNDBNSHpTR0k7CiAJCQllbHNlCkBAIC0xMDU5LDcgKzEwNjUsNyBAQAogCQllbHNlCiAJCQl0YmwtPmV4cGVjdGVkX3RwdCA9IGV4cGVjdGVkX3RwdF9zaXNvMjBNSHo7CiAJfSBlbHNlIGlmIChpc19taW1vMih0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmICh0YmwtPmlzX2ZhdCAmJiAhbHFfc3RhLT5pc19kdXApCisJCWlmICh0YmwtPmlzX2h0NDAgJiYgIWxxX3N0YS0+aXNfZHVwKQogCQkJaWYgKHRibC0+aXNfU0dJKQogCQkJCXRibC0+ZXhwZWN0ZWRfdHB0ID0gZXhwZWN0ZWRfdHB0X21pbW8yXzQwTUh6U0dJOwogCQkJZWxzZQpAQCAtMTA2OSw3ICsxMDc1LDcgQEAKIAkJZWxzZQogCQkJdGJsLT5leHBlY3RlZF90cHQgPSBleHBlY3RlZF90cHRfbWltbzJfMjBNSHo7CiAJfSBlbHNlIGlmIChpc19taW1vMyh0YmwtPmxxX3R5cGUpKSB7Ci0JCWlmICh0YmwtPmlzX2ZhdCAmJiAhbHFfc3RhLT5pc19kdXApCisJCWlmICh0YmwtPmlzX2h0NDAgJiYgIWxxX3N0YS0+aXNfZHVwKQogCQkJaWYgKHRibC0+aXNfU0dJKQogCQkJCXRibC0+ZXhwZWN0ZWRfdHB0ID0gZXhwZWN0ZWRfdHB0X21pbW8zXzQwTUh6U0dJOwogCQkJZWxzZQpAQCAtMTIxNywyMiArMTIyMywxMCBAQAogCXRibC0+bWF4X3NlYXJjaCA9IElXTF9NQVhfU0VBUkNIOwogCXJhdGVfbWFzayA9IGxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGU7CiAKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsICZzdGEtPmh0X2NhcCkpCi0JCXRibC0+aXNfZmF0ID0gMTsKKwlpZiAoaXdsX2lzX2h0NDBfdHhfYWxsb3dlZChwcml2LCAmc3RhLT5odF9jYXApKQorCQl0YmwtPmlzX2h0NDAgPSAxOwogCWVsc2UKLQkJdGJsLT5pc19mYXQgPSAwOwotCi0JLyogRklYTUU6IC0gZG9uJ3QgdG9nZ2xlIFNHSSBoZXJlCi0JaWYgKHRibC0+aXNfZmF0KSB7Ci0JCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV80ME1IWl9PTkxZKQotCQkJdGJsLT5pc19TR0kgPSAxOwotCQllbHNlCi0JCQl0YmwtPmlzX1NHSSA9IDA7Ci0JfSBlbHNlIGlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV8yME1IWl9PTkxZKQotCQl0YmwtPmlzX1NHSSA9IDE7Ci0JZWxzZQotCQl0YmwtPmlzX1NHSSA9IDA7Ci0JKi8KKwkJdGJsLT5pc19odDQwID0gMDsKIAogCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCB0YmwpOwogCkBAIC0xMjgzLDIyICsxMjc3LDEwIEBACiAJdGJsLT5tYXhfc2VhcmNoID0gSVdMX01BWF8xMU5fTUlNTzNfU0VBUkNIOwogCXJhdGVfbWFzayA9IGxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGU7CiAKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsICZzdGEtPmh0X2NhcCkpCi0JCXRibC0+aXNfZmF0ID0gMTsKKwlpZiAoaXdsX2lzX2h0NDBfdHhfYWxsb3dlZChwcml2LCAmc3RhLT5odF9jYXApKQorCQl0YmwtPmlzX2h0NDAgPSAxOwogCWVsc2UKLQkJdGJsLT5pc19mYXQgPSAwOwotCi0JLyogRklYTUU6IC0gZG9uJ3QgdG9nZ2xlIFNHSSBoZXJlCi0JaWYgKHRibC0+aXNfZmF0KSB7Ci0JCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV80ME1IWl9PTkxZKQotCQkJdGJsLT5pc19TR0kgPSAxOwotCQllbHNlCi0JCQl0YmwtPmlzX1NHSSA9IDA7Ci0JfSBlbHNlIGlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJiBIVF9TSE9SVF9HSV8yME1IWl9PTkxZKQotCQl0YmwtPmlzX1NHSSA9IDE7Ci0JZWxzZQotCQl0YmwtPmlzX1NHSSA9IDA7Ci0JKi8KKwkJdGJsLT5pc19odDQwID0gMDsKIAogCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCB0YmwpOwogCkBAIC0xMzQyLDIyICsxMzI0LDEwIEBACiAJdGJsLT5tYXhfc2VhcmNoID0gSVdMX01BWF9TRUFSQ0g7CiAJcmF0ZV9tYXNrID0gbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlOwogCi0JaWYgKGl3bF9pc19mYXRfdHhfYWxsb3dlZChwcml2LCAmc3RhLT5odF9jYXApKQotCQl0YmwtPmlzX2ZhdCA9IDE7CisJaWYgKGl3bF9pc19odDQwX3R4X2FsbG93ZWQocHJpdiwgJnN0YS0+aHRfY2FwKSkKKwkJdGJsLT5pc19odDQwID0gMTsKIAllbHNlCi0JCXRibC0+aXNfZmF0ID0gMDsKLQotCS8qIEZJWE1FOiAtIGRvbid0IHRvZ2dsZSBTR0kgaGVyZQotCWlmICh0YmwtPmlzX2ZhdCkgewotCQlpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYgSFRfU0hPUlRfR0lfNDBNSFpfT05MWSkKLQkJCXRibC0+aXNfU0dJID0gMTsKLQkJZWxzZQotCQkJdGJsLT5pc19TR0kgPSAwOwotCX0gZWxzZSBpZiAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYgSFRfU0hPUlRfR0lfMjBNSFpfT05MWSkKLQkJdGJsLT5pc19TR0kgPSAxOwotCWVsc2UKLQkJdGJsLT5pc19TR0kgPSAwOwotCSovCisJCXRibC0+aXNfaHQ0MCA9IDA7CiAKIAlpZiAoaXNfZ3JlZW4pCiAJCXRibC0+aXNfU0dJID0gMDsgLyoxMW4gc3BlYzogbm8gU0dJIGluIFNJU08rR3JlZW5maWVsZCovCkBAIC0xMzk4LDYgKzEzNjgsMTIgQEAKIAlpbnQgcmV0ID0gMDsKIAl1OCB1cGRhdGVfc2VhcmNoX3RibF9jb3VudGVyID0gMDsKIAorCWlmICghaXdsX2h0X2VuYWJsZWQocHJpdikpCisJCS8qIHN0YXkgaW4gTGVnYWN5ICovCisJCXRibC0+YWN0aW9uID0gSVdMX0xFR0FDWV9TV0lUQ0hfQU5URU5OQTE7CisJZWxzZSBpZiAoaXdsX3R4X2FudF9yZXN0cmljdGlvbihwcml2KSA9PSBJV0xfQU5UX09LX1NJTkdMRSAmJgorCQkgICB0YmwtPmFjdGlvbiA+IElXTF9MRUdBQ1lfU1dJVENIX1NJU08pCisJCXRibC0+YWN0aW9uID0gSVdMX0xFR0FDWV9TV0lUQ0hfU0lTTzsKIAlmb3IgKDsgOykgewogCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKQEAgLTE1MjEsNiArMTQ5Nyw3IEBACiAJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqc2VhcmNoX3RibCA9CiAJCQkJJihscV9zdGEtPmxxX2luZm9bKDEgLSBscV9zdGEtPmFjdGl2ZV90YmwpXSk7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAl1MzIgc3ogPSAoc2l6ZW9mKHN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8pIC0KIAkJICAoc2l6ZW9mKHN0cnVjdCBpd2xfcmF0ZV9zY2FsZV9kYXRhKSAqIElXTF9SQVRFX0NPVU5UKSk7CiAJdTggc3RhcnRfYWN0aW9uID0gdGJsLT5hY3Rpb247CkBAIC0xNTI5LDYgKzE1MDYsMTEgQEAKIAl1OCB1cGRhdGVfc2VhcmNoX3RibF9jb3VudGVyID0gMDsKIAlpbnQgcmV0OwogCisJaWYgKGl3bF90eF9hbnRfcmVzdHJpY3Rpb24ocHJpdikgPT0gSVdMX0FOVF9PS19TSU5HTEUgJiYKKwkgICAgdGJsLT5hY3Rpb24gPiBJV0xfU0lTT19TV0lUQ0hfQU5URU5OQTIpIHsKKwkJLyogc3RheSBpbiBTSVNPICovCisJCXRibC0+YWN0aW9uID0gSVdMX1NJU09fU1dJVENIX0FOVEVOTkExOworCX0KIAlmb3IgKDs7KSB7CiAJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIrKzsKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewpAQCAtMTU3NSwxMyArMTU1NywxMSBAQAogCQkJCWdvdG8gb3V0OwogCQkJYnJlYWs7CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0dJOgotCQkJaWYgKCF0YmwtPmlzX2ZhdCAmJgotCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKLQkJCQkJCUhUX1NIT1JUX0dJXzIwTUhaKSkKKwkJCWlmICghdGJsLT5pc19odDQwICYmICEoaHRfY2FwLT5jYXAgJgorCQkJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApKQogCQkJCWJyZWFrOwotCQkJaWYgKHRibC0+aXNfZmF0ICYmCi0JCQkJIShwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJgotCQkJCQkJSFRfU0hPUlRfR0lfNDBNSFopKQorCQkJaWYgKHRibC0+aXNfaHQ0MCAmJiAhKGh0X2NhcC0+Y2FwICYKKwkJCQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSkKIAkJCQlicmVhazsKIAogCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTSVNPIHRvZ2dsZSBTR0kvTkdJXG4iKTsKQEAgLTE2NTUsNiArMTYzNSw3IEBACiAJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqc2VhcmNoX3RibCA9CiAJCQkJJihscV9zdGEtPmxxX2luZm9bKDEgLSBscV9zdGEtPmFjdGl2ZV90YmwpXSk7CiAJc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEgKndpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAl1MzIgc3ogPSAoc2l6ZW9mKHN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8pIC0KIAkJICAoc2l6ZW9mKHN0cnVjdCBpd2xfcmF0ZV9zY2FsZV9kYXRhKSAqIElXTF9SQVRFX0NPVU5UKSk7CiAJdTggc3RhcnRfYWN0aW9uID0gdGJsLT5hY3Rpb247CkBAIC0xNjYzLDYgKzE2NDQsMTIgQEAKIAl1OCB1cGRhdGVfc2VhcmNoX3RibF9jb3VudGVyID0gMDsKIAlpbnQgcmV0OwogCisJaWYgKChpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKHByaXYpID09IElXTF9BTlRfT0tfU0lOR0xFKSAmJgorCSAgICAodGJsLT5hY3Rpb24gPCBJV0xfTUlNTzJfU1dJVENIX1NJU09fQSB8fAorCSAgICAgdGJsLT5hY3Rpb24gPiBJV0xfTUlNTzJfU1dJVENIX1NJU09fQykpIHsKKwkJLyogc3dpdGNoIGluIFNJU08gKi8KKwkJdGJsLT5hY3Rpb24gPSBJV0xfTUlNTzJfU1dJVENIX1NJU09fQTsKKwl9CiAJZm9yICg7OykgewogCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKQEAgLTE3MDksMTMgKzE2OTYsMTEgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9HSToKLQkJCWlmICghdGJsLT5pc19mYXQgJiYKLQkJCQkhKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNnZiAmCi0JCQkJCQlIVF9TSE9SVF9HSV8yME1IWikpCisJCQlpZiAoIXRibC0+aXNfaHQ0MCAmJiAhKGh0X2NhcC0+Y2FwICYKKwkJCQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSkKIAkJCQlicmVhazsKLQkJCWlmICh0YmwtPmlzX2ZhdCAmJgotCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKLQkJCQkJCUhUX1NIT1JUX0dJXzQwTUhaKSkKKwkJCWlmICh0YmwtPmlzX2h0NDAgJiYgIShodF9jYXAtPmNhcCAmCisJCQkJCQlJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkpCiAJCQkJYnJlYWs7CiAKIAkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTzIgdG9nZ2xlIFNHSS9OR0lcbiIpOwpAQCAtMTc5MSw2ICsxNzc2LDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICpzZWFyY2hfdGJsID0KIAkJCQkmKGxxX3N0YS0+bHFfaW5mb1soMSAtIGxxX3N0YS0+YWN0aXZlX3RibCldKTsKIAlzdHJ1Y3QgaXdsX3JhdGVfc2NhbGVfZGF0YSAqd2luZG93ID0gJih0YmwtPndpbltpbmRleF0pOworCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwID0gJnN0YS0+aHRfY2FwOwogCXUzMiBzeiA9IChzaXplb2Yoc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbykgLQogCQkgIChzaXplb2Yoc3RydWN0IGl3bF9yYXRlX3NjYWxlX2RhdGEpICogSVdMX1JBVEVfQ09VTlQpKTsKIAl1OCBzdGFydF9hY3Rpb24gPSB0YmwtPmFjdGlvbjsKQEAgLTE3OTksNiArMTc4NSwxMiBAQAogCWludCByZXQ7CiAJdTggdXBkYXRlX3NlYXJjaF90YmxfY291bnRlciA9IDA7CiAKKwlpZiAoKGl3bF90eF9hbnRfcmVzdHJpY3Rpb24ocHJpdikgPT0gSVdMX0FOVF9PS19TSU5HTEUpICYmCisJICAgICh0YmwtPmFjdGlvbiA8IElXTF9NSU1PM19TV0lUQ0hfU0lTT19BIHx8CisJICAgICB0YmwtPmFjdGlvbiA+IElXTF9NSU1PM19TV0lUQ0hfU0lTT19DKSkgeworCQkvKiBzd2l0Y2ggaW4gU0lTTyAqLworCQl0YmwtPmFjdGlvbiA9IElXTF9NSU1PM19TV0lUQ0hfU0lTT19BOworCX0KIAlmb3IgKDs7KSB7CiAJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIrKzsKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewpAQCAtMTg2NywxMyArMTg1OSwxMSBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJV0xfTUlNTzNfU1dJVENIX0dJOgotCQkJaWYgKCF0YmwtPmlzX2ZhdCAmJgotCQkJCSEocHJpdi0+Y3VycmVudF9odF9jb25maWcuc2dmICYKLQkJCQkJCUhUX1NIT1JUX0dJXzIwTUhaKSkKKwkJCWlmICghdGJsLT5pc19odDQwICYmICEoaHRfY2FwLT5jYXAgJgorCQkJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApKQogCQkJCWJyZWFrOwotCQkJaWYgKHRibC0+aXNfZmF0ICYmCi0JCQkJIShwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zZ2YgJgotCQkJCQkJSFRfU0hPUlRfR0lfNDBNSFopKQorCQkJaWYgKHRibC0+aXNfaHQ0MCAmJiAhKGh0X2NhcC0+Y2FwICYKKwkJCQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSkKIAkJCQlicmVhazsKIAogCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBNSU1PMyB0b2dnbGUgU0dJL05HSVxuIik7CkBAIC0yMDAzLDYgKzE5OTMsMjUgQEAKIH0KIAogLyoKKyAqIHNldHVwIHJhdGUgdGFibGUgaW4gdUNvZGUKKyAqIHJldHVybiByYXRlX25fZmxhZ3MgYXMgdXNlZCBpbiB0aGUgdGFibGUKKyAqLworc3RhdGljIHUzMiByc191cGRhdGVfcmF0ZV90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEsCisJCQkJc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAorCQkJCWludCBpbmRleCwgdTggaXNfZ3JlZW4pCit7CisJdTMyIHJhdGU7CisKKwkvKiBVcGRhdGUgdUNvZGUncyByYXRlIHRhYmxlLiAqLworCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCByYXRlKTsKKwlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CisKKwlyZXR1cm4gcmF0ZTsKK30KKworLyoKICAqIERvIHJhdGUgc2NhbGluZyBhbmQgc2VhcmNoIGZvciBuZXcgbW9kdWxhdGlvbiBtb2RlLgogICovCiBzdGF0aWMgdm9pZCByc19yYXRlX3NjYWxlX3BlcmZvcm0oc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMjA2Niw3ICsyMDc1LDcgQEAKIAlpZiAoaXNfbGVnYWN5KHRibC0+bHFfdHlwZSkpCiAJCWxxX3N0YS0+aXNfZ3JlZW4gPSAwOwogCWVsc2UKLQkJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihwcml2LCBjb25mKTsKKwkJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihzdGEsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CiAJaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCiAJLyogY3VycmVudCB0eCByYXRlICovCkBAIC0yMDk4LDYgKzIxMDcsMTYgQEAKIAogCWlmICghKCgxIDw8IGluZGV4KSAmIHJhdGVfc2NhbGVfaW5kZXhfbXNrKSkgewogCQlJV0xfRVJSKHByaXYsICJDdXJyZW50IFJhdGUgaXMgbm90IHZhbGlkXG4iKTsKKwkJaWYgKGxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwpIHsKKwkJCS8qIHJldmVydCB0byBhY3RpdmUgdGFibGUgaWYgc2VhcmNoIHRhYmxlIGlzIG5vdCB2YWxpZCovCisJCQl0YmwtPmxxX3R5cGUgPSBMUV9OT05FOworCQkJbHFfc3RhLT5zZWFyY2hfYmV0dGVyX3RibCA9IDA7CisJCQl0YmwgPSAmKGxxX3N0YS0+bHFfaW5mb1tscV9zdGEtPmFjdGl2ZV90YmxdKTsKKwkJCS8qIGdldCAiYWN0aXZlIiByYXRlIGluZm8gKi8KKwkJCWluZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh0YmwtPmN1cnJlbnRfcmF0ZSk7CisJCQlyYXRlID0gcnNfdXBkYXRlX3JhdGVfdGJsKHByaXYsIGxxX3N0YSwKKwkJCQkJCSAgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNDksOCArMjE2OCw4IEBACiAJCQl0YmwtPmV4cGVjdGVkX3RwdFtpbmRleF0gKyA2NCkgLyAxMjgpKTsKIAogCS8qIElmIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGJldHRlciBtb2R1bGF0aW9uIG1vZGUsIGNoZWNrIHN1Y2Nlc3MuICovCi0JaWYgKGxxX3N0YS0+c2VhcmNoX2JldHRlcl90YmwpIHsKLQorCWlmIChscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsICYmCisJICAgIChpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKHByaXYpID09IElXTF9BTlRfT0tfTVVMVEkpKSB7CiAJCS8qIElmIGdvb2Qgc3VjY2VzcywgY29udGludWUgdXNpbmcgdGhlICJzZWFyY2giIG1vZGU7CiAJCSAqIG5vIG5lZWQgdG8gc2VuZCBuZXcgbGluayBxdWFsaXR5IGNvbW1hbmQsIHNpbmNlIHdlJ3JlCiAJCSAqIGNvbnRpbnVpbmcgdG8gdXNlIHRoZSBzZXR1cCB0aGF0IHdlJ3ZlIGJlZW4gdHJ5aW5nLiAqLwpAQCAtMjI3OCw3ICsyMjk3LDExIEBACiAJCSAgICAoKHNyID4gSVdMX1JBVEVfSElHSF9USCkgfHwKIAkJICAgICAoY3VycmVudF90cHQgPiAoMTAwICogdGJsLT5leHBlY3RlZF90cHRbbG93XSkpKSkKIAkJc2NhbGVfYWN0aW9uID0gMDsKLQorCWlmICghaXdsX2h0X2VuYWJsZWQocHJpdikgJiYgIWlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKQorCQlzY2FsZV9hY3Rpb24gPSAtMTsKKwlpZiAoaXdsX3R4X2FudF9yZXN0cmljdGlvbihwcml2KSAhPSBJV0xfQU5UX09LX01VTFRJICYmCisJCShpc19taW1vMih0YmwtPmxxX3R5cGUpIHx8IGlzX21pbW8zKHRibC0+bHFfdHlwZSkpKQorCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAlzd2l0Y2ggKHNjYWxlX2FjdGlvbikgewogCWNhc2UgLTE6CiAJCS8qIERlY3JlYXNlIHN0YXJ0aW5nIHJhdGUsIHVwZGF0ZSB1Q29kZSdzIHJhdGUgdGFibGUgKi8KQEAgLTIzMDgsMTUgKzIzMzEsMTUgQEAKIAogbHFfdXBkYXRlOgogCS8qIFJlcGxhY2UgdUNvZGUncyByYXRlIHRhYmxlIGZvciB0aGUgZGVzdGluYXRpb24gc3RhdGlvbi4gKi8KLQlpZiAodXBkYXRlX2xxKSB7Ci0JCXJhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCBpbmRleCwgaXNfZ3JlZW4pOwotCQlyc19maWxsX2xpbmtfY21kKHByaXYsIGxxX3N0YSwgcmF0ZSk7Ci0JCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwlpZiAodXBkYXRlX2xxKQorCQlyYXRlID0gcnNfdXBkYXRlX3JhdGVfdGJsKHByaXYsIGxxX3N0YSwKKwkJCQkJICB0YmwsIGluZGV4LCBpc19ncmVlbik7CisKKwlpZiAoaXdsX3R4X2FudF9yZXN0cmljdGlvbihwcml2KSA9PSBJV0xfQU5UX09LX01VTFRJKSB7CisJCS8qIFNob3VsZCB3ZSBzdGF5IHdpdGggdGhpcyBtb2R1bGF0aW9uIG1vZGUsCisJCSAqIG9yIHNlYXJjaCBmb3IgYSBuZXcgb25lPyAqLworCQlyc19zdGF5X2luX3RhYmxlKGxxX3N0YSk7CiAJfQotCi0JLyogU2hvdWxkIHdlIHN0YXkgd2l0aCB0aGlzIG1vZHVsYXRpb24gbW9kZSwgb3Igc2VhcmNoIGZvciBhIG5ldyBvbmU/ICovCi0JcnNfc3RheV9pbl90YWJsZShscV9zdGEpOwotCiAJLyoKIAkgKiBTZWFyY2ggZm9yIG5ldyBtb2R1bGF0aW9uIG1vZGUgaWYgd2UncmU6CiAJICogMSkgIE5vdCBjaGFuZ2luZyByYXRlcyByaWdodCBub3cKQEAgLTIzNzMsNyArMjM5Niw4IEBACiAJCSAqIGhhdmUgYmVlbiB0cmllZCBhbmQgY29tcGFyZWQsIHN0YXkgaW4gdGhpcyBiZXN0IG1vZHVsYXRpb24KIAkJICogbW9kZSBmb3IgYSB3aGlsZSBiZWZvcmUgbmV4dCByb3VuZCBvZiBtb2RlIGNvbXBhcmlzb25zLiAqLwogCQlpZiAobHFfc3RhLT5lbmFibGVfY291bnRlciAmJgotCQkgICAgKGxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPj0gdGJsMS0+bWF4X3NlYXJjaCkpIHsKKwkJICAgIChscV9zdGEtPmFjdGlvbl9jb3VudGVyID49IHRibDEtPm1heF9zZWFyY2gpICYmCisJCSAgICBpd2xfaHRfZW5hYmxlZChwcml2KSkgewogCQkJaWYgKChscV9zdGEtPmxhc3RfdHB0ID4gSVdMX0FHR19UUFRfVEhSRUhPTEQpICYmCiAJCQkgICAgKGxxX3N0YS0+dHhfYWdnX3RpZF9lbiAmICgxIDw8IHRpZCkpICYmCiAJCQkgICAgKHRpZCAhPSBNQVhfVElEX0NPVU5UKSkgewpAQCAtMjQwOSw3ICsyNDMzLDcgQEAKIAlpbnQgcmF0ZV9pZHg7CiAJaW50IGk7CiAJdTMyIHJhdGU7Ci0JdTggdXNlX2dyZWVuID0gcnNfdXNlX2dyZWVuKHByaXYsIGNvbmYpOworCXU4IHVzZV9ncmVlbiA9IHJzX3VzZV9ncmVlbihzdGEsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CiAJdTggYWN0aXZlX3RibCA9IDA7CiAJdTggdmFsaWRfdHhfYW50OwogCkBAIC0yNDYyLDExICsyNDg2LDExIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSB0eHJjLT5zYmFuZDsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZwcml2LT5ody0+Y29uZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7CiAJaW50IHJhdGVfaWR4OwotCXU2NCBtYXNrX2JpdCA9IDA7CiAKIAlJV0xfREVCVUdfUkFURV9MSU1JVChwcml2LCAicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CiAKQEAgLTI0ODEsMjIgKzI1MDUsOSBAQAogCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggPSAtMTsKIAl9CiAKLQlpZiAoc3RhKQotCQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07Ci0KIAkvKiBTZW5kIG1hbmFnZW1lbnQgZnJhbWVzIGFuZCBOT19BQ0sgZGF0YSB1c2luZyBsb3dlc3QgcmF0ZS4gKi8KLQlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKLQkgICAgaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fCAhc3RhIHx8ICFscV9zdGEpIHsKLQkJaWYgKCFtYXNrX2JpdCkKLQkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0KLQkJCQkJcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIE5VTEwpOwotCQllbHNlCi0JCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9Ci0JCQkJCXJhdGVfbG93ZXN0X2luZGV4KHNiYW5kLCBzdGEpOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPSAxOworCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCiAJCXJldHVybjsKLQl9CiAKIAlyYXRlX2lkeCAgPSBscV9zdGEtPmxhc3RfdHhyYXRlX2lkeDsKIApAQCAtMjUwOCw3ICsyNTE5LDcgQEAKIAkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogQUREIHN0YXRpb24gJXBNXG4iLAogCQkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJCXN0YV9pZCA9IGl3bF9hZGRfc3RhdGlvbihwcml2LCBoZHItPmFkZHIxLAotCQkJCQkJZmFsc2UsIENNRF9BU1lOQywgTlVMTCk7CisJCQkJCQlmYWxzZSwgQ01EX0FTWU5DLCBodF9jYXApOwogCQl9CiAJCWlmICgoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pKSB7CiAJCQlscV9zdGEtPmxxLnN0YV9pZCA9IHN0YV9pZDsKQEAgLTI1MzMsMTUgKzI1NDQsMjAgQEAKIAkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOwogCQlpZiAobHFfc3RhLT5sYXN0X3JhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0RVUF9NU0spCiAJCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19EVVBfREFUQTsKLQkJaWYgKGxxX3N0YS0+bGFzdF9yYXRlX25fZmxhZ3MgJiBSQVRFX01DU19GQVRfTVNLKQorCQlpZiAobHFfc3RhLT5sYXN0X3JhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUNDBfTVNLKQogCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIOwogCQlpZiAobHFfc3RhLT5sYXN0X3JhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0dGX01TSykKIAkJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEOwogCX0gZWxzZSB7Ci0JCWlmIChyYXRlX2lkeCA8IDAgfHwgcmF0ZV9pZHggPiBJV0xfUkFURV9DT1VOVCkKKwkJLyogQ2hlY2sgZm9yIGludmFsaWQgcmF0ZXMgKi8KKwkJaWYgKChyYXRlX2lkeCA8IDApIHx8IChyYXRlX2lkeCA+PSBJV0xfUkFURV9DT1VOVF9MRUdBQ1kpIHx8CisJCQkJKChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJgorCQkJCSAocmF0ZV9pZHggPCBJV0xfRklSU1RfT0ZETV9SQVRFKSkpCiAJCQlyYXRlX2lkeCA9IHJhdGVfbG93ZXN0X2luZGV4KHNiYW5kLCBzdGEpOworCQkvKiBPbiB2YWxpZCA1IEdIeiByYXRlLCBhZGp1c3QgaW5kZXggKi8KIAkJZWxzZSBpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKIAkJCXJhdGVfaWR4IC09IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uZmxhZ3MgPSAwOwogCX0KIAlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHJhdGVfaWR4OwogCkBAIC0yNTc3LDEwICsyNTkzLDggQEAKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZwcml2LT5ody0+Y29uZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gcHJpdl9zdGE7Ci0JdTE2IG1hc2tfYml0ID0gMDsKLQlpbnQgY291bnQ7Ci0JaW50IHN0YXJ0X3JhdGUgPSAwOwogCiAJbHFfc3RhLT5mbHVzaF90aW1lciA9IDA7CiAJbHFfc3RhLT5zdXBwX3JhdGVzID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKQEAgLTI2MDUsNyArMjYxOSw3IEBACiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewogCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsIHN0YS0+YWRkcik7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb24ocHJpdiwgc3RhLT5hZGRyLCBmYWxzZSwKLQkJCQkJCUNNRF9BU1lOQywgTlVMTCk7CisJCQkJCQlDTURfQVNZTkMsIGh0X2NhcCk7CiAJCX0KIAkJaWYgKChzdGFfaWQgIT0gSVdMX0lOVkFMSURfU1RBVElPTikpIHsKIAkJCWxxX3N0YS0+bHEuc3RhX2lkID0gc3RhX2lkOwpAQCAtMjYxOCw3ICsyNjMyLDcgQEAKIAlscV9zdGEtPmlzX2R1cCA9IDA7CiAJbHFfc3RhLT5tYXhfcmF0ZV9pZHggPSAtMTsKIAlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSBJV0xfTUlTU0VEX1JBVEVfTUFYOwotCWxxX3N0YS0+aXNfZ3JlZW4gPSByc191c2VfZ3JlZW4ocHJpdiwgY29uZik7CisJbHFfc3RhLT5pc19ncmVlbiA9IHJzX3VzZV9ncmVlbihzdGEsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CiAJbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGUgPSBwcml2LT5hY3RpdmVfcmF0ZSAmIH4oMHgxMDAwKTsKIAlscV9zdGEtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWM7CiAJbHFfc3RhLT5iYW5kID0gcHJpdi0+YmFuZDsKQEAgLTI2MjYsMTkgKzI2NDAsMTkgQEAKIAkgKiBhY3RpdmVfc2lzb19yYXRlIG1hc2sgaW5jbHVkZXMgOSBNQml0cyAoYml0IDUpLCBhbmQgQ0NLIChiaXRzIDAtMyksCiAJICogc3VwcF9yYXRlc1tdIGRvZXMgbm90OyBzaGlmdCB0byBjb252ZXJ0IGZvcm1hdCwgZm9yY2UgOSBNQml0cyBvZmYuCiAJICovCi0JbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPDwgMTsKLQlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgfD0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gJiAweDE7CisJbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlID0gaHRfY2FwLT5tY3MucnhfbWFza1swXSA8PCAxOworCWxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSB8PSBodF9jYXAtPm1jcy5yeF9tYXNrWzBdICYgMHgxOwogCWxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSAmPSB+KCh1MTYpMHgyKTsKIAlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKIAkvKiBTYW1lIGhlcmUgKi8KLQlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMV0gPDwgMTsKLQlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlIHw9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdICYgMHgxOworCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgPSBodF9jYXAtPm1jcy5yeF9tYXNrWzFdIDw8IDE7CisJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSB8PSBodF9jYXAtPm1jcy5yeF9tYXNrWzFdICYgMHgxOwogCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgJj0gfigodTE2KTB4Mik7CiAJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSA8PD0gSVdMX0ZJUlNUX09GRE1fUkFURTsKIAotCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1syXSA8PCAxOwotCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgfD0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMl0gJiAweDE7CisJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSA9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMl0gPDwgMTsKKwlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlIHw9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMl0gJiAweDE7CiAJbHFfc3RhLT5hY3RpdmVfbWltbzNfcmF0ZSAmPSB+KCh1MTYpMHgyKTsKIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCkBAIC0yNjU1LDI1ICsyNjY5LDE1IEBACiAJbHFfc3RhLT50eF9hZ2dfdGlkX2VuID0gSVdMX0FHR19BTExfVElEOwogCWxxX3N0YS0+ZHJ2ID0gcHJpdjsKIAotCS8qIEZpbmQgaGlnaGVzdCB0eCByYXRlIHN1cHBvcnRlZCBieSBoYXJkd2FyZSBhbmQgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCW1hc2tfYml0ID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKLQljb3VudCA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCWlmIChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCWNvdW50ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0JCXN0YXJ0X3JhdGUgPSBJV0xfRklSU1RfT0ZETV9SQVRFOwotCQltYXNrX2JpdCA8PD0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQl9Ci0KLQltYXNrX2JpdCA9IG1hc2tfYml0ICYgbHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGU7Ci0JbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSA0OwotCWZvciAoaSA9IHN0YXJ0X3JhdGU7IGkgPCBjb3VudDsgaSsrKQotCQlpZiAobWFza19iaXQgJiBCSVQoaSkpCi0JCQlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IGk7CisJLyogU2V0IGxhc3RfdHhyYXRlX2lkeCB0byBsb3dlc3QgcmF0ZSAqLworCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgoc2JhbmQsIHN0YSk7CisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKIAlyc19pbml0aWFsaXplX2xxKHByaXYsIGNvbmYsIHN0YSwgbHFfc3RhKTsKIH0KIAotc3RhdGljIHZvaWQgcnNfZmlsbF9saW5rX2NtZChjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCByc19maWxsX2xpbmtfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSwgdTMyIG5ld19yYXRlKQogewogCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gdGJsX3R5cGU7CkBAIC0yOTIwLDcgKzI5MjQsNyBAQAogCQkgICAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpKSA/ICJTSVNPIiA6CiAJCSAgICgoaXNfbWltbzIodGJsLT5scV90eXBlKSkgPyAiTUlNTzIiIDogIk1JTU8zIikpOwogCQkgICBkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKLQkJICAgKHRibC0+aXNfZmF0KSA/ICI0ME1IeiIgOiAiMjBNSHoiKTsKKwkJICAgKHRibC0+aXNfaHQ0MCkgPyAiNDBNSHoiIDogIjIwTUh6Iik7CiAJCSAgIGRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXMgJXNcbiIsICh0YmwtPmlzX1NHSSkgPyAiU0dJIiA6ICIiLAogCQkgICAobHFfc3RhLT5pc19ncmVlbikgPyAiR0YgZW5hYmxlZCIgOiAiIik7CiAJfQpAQCAtMjk4NSwxMiArMjk4OSwxMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZvciAoaSA9IDA7IGkgPCBMUV9TSVpFOyBpKyspIHsKLQkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiVzIHR5cGU9JWQgU0dJPSVkIEZBVD0lZCBEVVA9JWQgR0Y9JWRcbiIKKwkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywKKwkJCQkiJXMgdHlwZT0lZCBTR0k9JWQgSFQ0MD0lZCBEVVA9JWQgR0Y9JWRcbiIKIAkJCQkicmF0ZT0weCVYXG4iLAogCQkJCWxxX3N0YS0+YWN0aXZlX3RibCA9PSBpID8gIioiIDogIngiLAogCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS5scV90eXBlLAogCQkJCWxxX3N0YS0+bHFfaW5mb1tpXS5pc19TR0ksCi0JCQkJbHFfc3RhLT5scV9pbmZvW2ldLmlzX2ZhdCwKKwkJCQlscV9zdGEtPmxxX2luZm9baV0uaXNfaHQ0MCwKIAkJCQlscV9zdGEtPmxxX2luZm9baV0uaXNfZHVwLAogCQkJCWxxX3N0YS0+aXNfZ3JlZW4sCiAJCQkJbHFfc3RhLT5scV9pbmZvW2ldLmN1cnJlbnRfcmF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCmluZGV4IDI1MDUwYmYuLjlmYWM1MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCkBAIC03Myw2ICs3Myw3IEBACiAJSVdMX1JBVEVfNTRNX0lOREVYLAogCUlXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfUkFURV9DT1VOVCwgLypGSVhNRTpSUzpjaGFuZ2UgdG8gSVdMX1JBVEVfSU5ERVhfQ09VTlQsKi8KKwlJV0xfUkFURV9DT1VOVF9MRUdBQ1kgPSBJV0xfUkFURV9DT1VOVCAtIDEsCS8qIEV4Y2x1ZGluZyA2ME0gKi8KIAlJV0xfUkFURV9DT1VOVF8zOTQ1ID0gSVdMX1JBVEVfQ09VTlQgLSAxLAogCUlXTF9SQVRFX0lOVk1fSU5ERVggPSBJV0xfUkFURV9DT1VOVCwKIAlJV0xfUkFURV9JTlZBTElEID0gSVdMX1JBVEVfQ09VTlQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDM1NWY1MGUuLjAwNDU3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSwKIAkJICAgICAgIHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyKTsKIAotCWl3bF9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAhcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byk7CisJaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHByaXYsICFwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0byk7CiAKIAkvKiBBcHBseSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24KIAkgKiBSWE9OIHVuYXNzb2MgY2xlYXJzIHRoZSBzdGF0aW9uIHRhYmxlIGluIHVDb2RlLCBzZW5kIGl0IGJlZm9yZQpAQCAtNDQyLDggKzQ0Miw4IEBACiAJLyogVW5tYXAgdHhfY21kICovCiAJaWYgKG51bV90YnMpCiAJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAotCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAotCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5tZXRhW2luZGV4XSwgbWFwcGluZyksCisJCQkJcGNpX3VubWFwX2xlbigmdHhxLT5tZXRhW2luZGV4XSwgbGVuKSwKIAkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuICovCkBAIC01MTIsNzAgKzUxMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE1pc2MuIGludGVybmFsIHN0YXRlIGFuZCBoZWxwZXIgZnVuY3Rpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTQwOTYKLQotc3RhdGljIHUxNiBpd2xfYWRqdXN0X2JlYWNvbl9pbnRlcnZhbCh1MTYgYmVhY29uX3ZhbCkKLXsKLQl1MTYgbmV3X3ZhbCA9IDA7Ci0JdTE2IGJlYWNvbl9mYWN0b3IgPSAwOwotCi0JYmVhY29uX2ZhY3RvciA9IChiZWFjb25fdmFsICsgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTCkKLQkJCQkJLyBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwotCW5ld192YWwgPSBiZWFjb25fdmFsIC8gYmVhY29uX2ZhY3RvcjsKLQotCWlmICghbmV3X3ZhbCkKLQkJbmV3X3ZhbCA9IE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7Ci0KLQlyZXR1cm4gbmV3X3ZhbDsKLX0KLQotc3RhdGljIHZvaWQgaXdsX3NldHVwX3J4b25fdGltaW5nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQl1NjQgdHNmOwotCXMzMiBpbnRlcnZhbF90bSwgcmVtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKLQl1MTYgYmVhY29uX2ludCA9IDA7Ci0KLQljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wID0gY3B1X3RvX2xlNjQocHJpdi0+dGltZXN0YW1wKTsKLQlwcml2LT5yeG9uX3RpbWluZy5saXN0ZW5faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNihjb25mLT5saXN0ZW5faW50ZXJ2YWwpOwotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQliZWFjb25faW50ID0gaXdsX2FkanVzdF9iZWFjb25faW50ZXJ2YWwocHJpdi0+YmVhY29uX2ludCk7Ci0JCXByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93ID0gMDsKLQl9IGVsc2UgewotCQliZWFjb25faW50ID0gaXdsX2FkanVzdF9iZWFjb25faW50ZXJ2YWwoCi0JCQlwcml2LT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOwotCi0JCS8qIFRPRE86IHdlIG5lZWQgdG8gZ2V0IGF0aW1fd2luZG93IGZyb20gdXBwZXIgc3RhY2sKLQkJICogZm9yIG5vdyB3ZSBzZXQgdG8gMCAqLwotCQlwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdyA9IDA7Ci0JfQotCi0JcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMTYoYmVhY29uX2ludCk7Ci0KLQl0c2YgPSBwcml2LT50aW1lc3RhbXA7IC8qIHRzZiBpcyBtb2RpZmVkIGJ5IGRvX2RpdjogY29weSBpdCAqLwotCWludGVydmFsX3RtID0gYmVhY29uX2ludCAqIDEwMjQ7Ci0JcmVtID0gZG9fZGl2KHRzZiwgaW50ZXJ2YWxfdG0pOwotCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9IGNwdV90b19sZTMyKGludGVydmFsX3RtIC0gcmVtKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfQVNTT0MocHJpdiwgImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKLQkJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCksCi0JCQlsZTMyX3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwpLAotCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEdlbmVyaWMgUlggaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMKQEAgLTY5Nyw3ICs2MzMsNiBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CiAKIAlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCiAJCQkgIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIiwKQEAgLTcxNywxOSArNjUyLDEyIEBACiAJCQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAJCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01CWF9DLAogCQkJCQlIQlVTX1RBUkdfTUJYX0NfUkVHX0JJVF9DTURfQkxPQ0tFRCk7Ci0KIAkJfQotCi0JCWlmIChmbGFncyAmIFJGX0NBUkRfRElTQUJMRUQpIHsKLQkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKLQkJCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfUkVHX0JJVF9DVF9LSUxMX0VYSVQpOwotCQkJaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmVnX2xvY2ssIHJlZ19mbGFncyk7Ci0JCQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpCi0JCQkJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOwotCQl9CisJCWlmIChmbGFncyAmIFJGX0NBUkRfRElTQUJMRUQpCisJCQlpd2xfdHRfZW50ZXJfY3Rfa2lsbChwcml2KTsKIAl9CisJaWYgKCEoZmxhZ3MgJiBSRl9DQVJEX0RJU0FCTEVEKSkKKwkJaXdsX3R0X2V4aXRfY3Rfa2lsbChwcml2KTsKIAogCWlmIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpCiAJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtOTY0LDcgKzg5Miw3IEBACiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfSVNSKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfSVNSKSB7CiAJCS8qIGp1c3QgZm9yIGRlYnVnICovCiAJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKIAkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCkBAIC05ODMsNyArOTExLDcgQEAKIAogCS8qIE5vdyBzZXJ2aWNlIGFsbCBpbnRlcnJ1cHQgYml0cyBkaXNjb3ZlcmVkIGFib3ZlLiAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfSFdfRVJSKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSGFyZHdhcmUgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CiAKIAkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CkBAIC05OTksNyArOTI3LDcgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgKElXTF9ETF9JU1IpKSB7CiAJCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KIAkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpIHsKIAkJCUlXTF9ERUJVR19JU1IocHJpdiwgIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCkBAIC0xMDI0LDcgKzk1Miw3IEBACiAJCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpKQogCQkJaHdfcmZfa2lsbCA9IDE7CiAKLQkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfV0FSTihwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCiAJCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKIAogCQlwcml2LT5pc3Jfc3RhdHMucmZraWxsKys7CkBAIC0xMTEzLDcgKzEwNDEsNyBAQAogCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgKElXTF9ETF9JU1IpKSB7CiAJCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOwogCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7CiAJCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKQEAgLTExNDQsNyArMTA3Miw3IEBACiAJaW50YSA9IHByaXYtPmludGE7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9JU1IpIHsKIAkJLyoganVzdCBmb3IgZGVidWcgKi8KIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHhcbiAiLApAQCAtMTE1Niw3ICsxMDg0LDcgQEAKIAogCS8qIE5vdyBzZXJ2aWNlIGFsbCBpbnRlcnJ1cHQgYml0cyBkaXNjb3ZlcmVkIGFib3ZlLiAqLwogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfSFdfRVJSKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSGFyZHdhcmUgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CiAKIAkJLyogVGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CkBAIC0xMTcyLDcgKzExMDAsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkgewogCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKQEAgLTExOTcsNyArMTEyNSw3IEBACiAJCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0hXX1JGX0tJTExfU1cpKQogCQkJaHdfcmZfa2lsbCA9IDE7CiAKLQkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfV0FSTihwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCiAJCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKIAogCQlwcml2LT5pc3Jfc3RhdHMucmZraWxsKys7CkBAIC0xMzQ4LDcgKzEyNzYsNyBAQAogICovCiBzdGF0aWMgaW50IGl3bF9yZWFkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsX3Vjb2RlICp1Y29kZTsKKwlzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqdWNvZGU7CiAJaW50IHJldCA9IC1FSU5WQUwsIGluZGV4OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3OwogCWNvbnN0IGNoYXIgKm5hbWVfcHJlID0gcHJpdi0+Y2ZnLT5md19uYW1lX3ByZTsKQEAgLTEzNTcsNyArMTI4NSw5IEBACiAJY2hhciBidWZbMjVdOwogCXU4ICpzcmM7CiAJc2l6ZV90IGxlbjsKLQl1MzIgYXBpX3ZlciwgaW5zdF9zaXplLCBkYXRhX3NpemUsIGluaXRfc2l6ZSwgaW5pdF9kYXRhX3NpemUsIGJvb3Rfc2l6ZTsKKwl1MzIgYXBpX3ZlciwgYnVpbGQ7CisJdTMyIGluc3Rfc2l6ZSwgZGF0YV9zaXplLCBpbml0X3NpemUsIGluaXRfZGF0YV9zaXplLCBib290X3NpemU7CisJdTE2IGVlcHJvbV92ZXI7CiAKIAkvKiBBc2sga2VybmVsIGZpcm13YXJlX2NsYXNzIG1vZHVsZSB0byBnZXQgdGhlIGJvb3QgZmlybXdhcmUgb2ZmIGRpc2suCiAJICogcmVxdWVzdF9maXJtd2FyZSgpIGlzIHN5bmNocm9ub3VzLCBmaWxlIGlzIGluIG1lbW9yeSBvbiByZXR1cm4uICovCkBAIC0xMzg3LDIzICsxMzE3LDI2IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KLQlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKKwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3QgdGhlIHYxIGhlYWRlciEgKi8KKwlpZiAodWNvZGVfcmF3LT5zaXplIDwgcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaGVhZGVyX3NpemUoMSkpIHsKIAkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAkvKiBEYXRhIGZyb20gdWNvZGUgZmlsZTogIGhlYWRlciBmb2xsb3dlZCBieSB1Q29kZSBpbWFnZXMgKi8KLQl1Y29kZSA9ICh2b2lkICopdWNvZGVfcmF3LT5kYXRhOworCXVjb2RlID0gKHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICopdWNvZGVfcmF3LT5kYXRhOwogCiAJcHJpdi0+dWNvZGVfdmVyID0gbGUzMl90b19jcHUodWNvZGUtPnZlcik7CiAJYXBpX3ZlciA9IElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKTsKLQlpbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5zdF9zaXplKTsKLQlkYXRhX3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+ZGF0YV9zaXplKTsKLQlpbml0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5pdF9zaXplKTsKLQlpbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT5pbml0X2RhdGFfc2l6ZSk7Ci0JYm9vdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPmJvb3Rfc2l6ZSk7CisJYnVpbGQgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9idWlsZCh1Y29kZSwgYXBpX3Zlcik7CisJaW5zdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaW5zdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlkYXRhX3NpemUgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhX3NpemUodWNvZGUsIGFwaV92ZXIpOworCWluaXRfc2l6ZSA9IHByaXYtPmNmZy0+b3BzLT51Y29kZS0+Z2V0X2luaXRfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJaW5pdF9kYXRhX3NpemUgPQorCQlwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9pbml0X2RhdGFfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJYm9vdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfYm9vdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlzcmMgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhKHVjb2RlLCBhcGlfdmVyKTsKIAogCS8qIGFwaV92ZXIgc2hvdWxkIG1hdGNoIHRoZSBhcGkgdmVyc2lvbiBmb3JtaW5nIHBhcnQgb2YgdGhlCiAJICogZmlybXdhcmUgZmlsZW5hbWUgLi4uIGJ1dCB3ZSBkb24ndCBjaGVjayBmb3IgdGhhdCBhbmQgb25seSByZWx5CkBAIC0xNDI5LDYgKzEzNjIsMTQgQEAKIAkgICAgICAgSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpLAogCSAgICAgICBJV0xfVUNPREVfU0VSSUFMKHByaXYtPnVjb2RlX3ZlcikpOwogCisJaWYgKGJ1aWxkKQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQnVpbGQgJXVcbiIsIGJ1aWxkKTsKKworCWVlcHJvbV92ZXIgPSBpd2xfZWVwcm9tX3F1ZXJ5MTYocHJpdiwgRUVQUk9NX1ZFUlNJT04pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJOVk0gVHlwZTogJXMsIHZlcnNpb246IDB4JXhcbiIsCisJCSAgICAgICAocHJpdi0+bnZtX2RldmljZV90eXBlID09IE5WTV9ERVZJQ0VfVFlQRV9PVFApCisJCSAgICAgICA/ICJPVFAiIDogIkVFUFJPTSIsIGVlcHJvbV92ZXIpOworCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciB1Y29kZSB2ZXJzaW9uIHJhdyA9IDB4JXhcbiIsCiAJCSAgICAgICBwcml2LT51Y29kZV92ZXIpOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBpbnN0IHNpemUgPSAldVxuIiwKQEAgLTE0NDMsMTIgKzEzODQsMTQgQEAKIAkJICAgICAgIGJvb3Rfc2l6ZSk7CiAKIAkvKiBWZXJpZnkgc2l6ZSBvZiBmaWxlIHZzLiBpbWFnZSBzaXplIGluZm8gaW4gZmlsZSdzIGhlYWRlciAqLwotCWlmICh1Y29kZV9yYXctPnNpemUgPCBzaXplb2YoKnVjb2RlKSArCisJaWYgKHVjb2RlX3Jhdy0+c2l6ZSAhPQorCQlwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9oZWFkZXJfc2l6ZShhcGlfdmVyKSArCiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCi0JCQkgICAgICAgKGludCl1Y29kZV9yYXctPnNpemUpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkJInVDb2RlIGZpbGUgc2l6ZSAlZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBzaXplXG4iLAorCQkJKGludCl1Y29kZV9yYXctPnNpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTE1MjgsNDIgKzE0NzEsNDIgQEAKIAkvKiBDb3B5IGltYWdlcyBpbnRvIGJ1ZmZlcnMgZm9yIGNhcmQncyBidXMtbWFzdGVyIHJlYWRzIC4uLiAqLwogCiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbMF07Ci0JbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47CisJbGVuID0gaW5zdF9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCBzcmMsIGxlbik7CisJc3JjICs9IGxlbjsKKwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKIAkJcHJpdi0+dWNvZGVfY29kZS52X2FkZHIsICh1MzIpcHJpdi0+dWNvZGVfY29kZS5wX2FkZHIpOwogCiAJLyogUnVudGltZSBkYXRhICgybmQgYmxvY2spCiAJICogTk9URTogIENvcHkgaW50byBiYWNrdXAgYnVmZmVyIHdpbGwgYmUgZG9uZSBpbiBpd2xfdXAoKSAgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplXTsKLQlsZW4gPSBwcml2LT51Y29kZV9kYXRhLmxlbjsKKwlsZW4gPSBkYXRhX3NpemU7CiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJVpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIsIHNyYywgbGVuKTsKKwlzcmMgKz0gbGVuOwogCiAJLyogSW5pdGlhbGl6YXRpb24gaW5zdHJ1Y3Rpb25zICgzcmQgYmxvY2spICovCiAJaWYgKGluaXRfc2l6ZSkgewotCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplXTsKLQkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CisJCWxlbiA9IGluaXRfc2l6ZTsKIAkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAogCQkJCWxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOworCQlzcmMgKz0gbGVuOwogCX0KIAogCS8qIEluaXRpYWxpemF0aW9uIGRhdGEgKDR0aCBibG9jaykgKi8KIAlpZiAoaW5pdF9kYXRhX3NpemUpIHsKLQkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZV07Ci0JCWxlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47CisJCWxlbiA9IGluaXRfZGF0YV9zaXplOwogCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVaZFxuIiwKIAkJCSAgICAgICBsZW4pOwogCQltZW1jcHkocHJpdi0+dWNvZGVfaW5pdF9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOworCQlzcmMgKz0gbGVuOwogCX0KIAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwotCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCWxlbiA9IGJvb3Rfc2l6ZTsKIAlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBzcmMsIGxlbik7CiAKQEAgLTE2NjMsNyArMTYwNiw3IEBACiAJc2V0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAotCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCAxKTsKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSk7CiAKIAkvKiByZWFzc29jaWF0ZSBmb3IgQURIT0MgbW9kZSAqLwogCWlmIChwcml2LT52aWYgJiYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSB7CkBAIC0xODEyLDYgKzE3NTUsMTEgQEAKIAogCUlXTF9ERUJVR19JTkZPKHByaXYsICJpd2xfcHJlcGFyZV9jYXJkX2h3IGVudGVyIFxuIik7CiAKKwlyZXQgPSBpd2xfc2V0X2h3X3JlYWR5KHByaXYpOworCWlmIChwcml2LT5od19yZWFkeSkKKwkJcmV0dXJuIHJldDsKKworCS8qIElmIEhXIGlzIG5vdCByZWFkeSwgcHJlcGFyZSB0aGUgY29uZGl0aW9ucyB0byBjaGVjayBhZ2FpbiAqLwogCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkJQ1NSX0hXX0lGX0NPTkZJR19SRUdfUFJFUEFSRSk7CiAKQEAgLTE4MTksNiArMTc2Nyw3IEBACiAJCQl+Q1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX05JQ19QUkVQQVJFX0RPTkUsCiAJCQlDU1JfSFdfSUZfQ09ORklHX1JFR19CSVRfTklDX1BSRVBBUkVfRE9ORSwgMTUwMDAwKTsKIAorCS8qIEhXIHNob3VsZCBiZSByZWFkeSBieSBub3csIGNoZWNrIGFnYWluLiAqLwogCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKIAkJaXdsX3NldF9od19yZWFkeShwcml2KTsKIApAQCAtMjEyNiw3ICsyMDc1LDcgQEAKIAkgKiBJZiBjaGFpbiBub2lzZSBoYXMgYWxyZWFkeSBiZWVuIHJ1biwgdGhlbiB3ZSBuZWVkIHRvIGVuYWJsZQogCSAqIHBvd2VyIG1hbmFnZW1lbnQgaGVyZSAqLwogCWlmIChwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9ET05FKQotCQlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisJCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCBmYWxzZSk7CiAKIAkvKiBFbmFibGUgUnggZGlmZmVyZW50aWFsIGdhaW4gYW5kIHNlbnNpdGl2aXR5IGNhbGlicmF0aW9ucyAqLwogCWl3bF9jaGFpbl9ub2lzZV9yZXNldChwcml2KTsKQEAgLTIyMDYsNyArMjE1NSw3IEBACiAKIAlwcml2LT5pc19vcGVuID0gMDsKIAotCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpIHx8IHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewogCQkvKiBzdG9wIG1hYywgY2FuY2VsIGFueSBzY2FuIHJlcXVlc3QgYW5kIGNsZWFyCiAJCSAqIFJYT05fRklMVEVSX0FTU09DX01TSyBCSVQKIAkJICovCkBAIC0yMzMxLDcgKzIyODAsNyBAQAogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAocHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0bykgeworCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0bykgewogCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaHdjcnlwdG8gZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMjQ1NSwxNCArMjQwNCwxNiBAQAogICogdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGRlYnVnIGxldmVsLgogICoKICAqIFNlZSB0aGUgbGV2ZWwgZGVmaW5pdGlvbnMgaW4gaXdsIGZvciBkZXRhaWxzLgorICoKKyAqIFRoZSBkZWJ1Z19sZXZlbCBiZWluZyBtYW5hZ2VkIHVzaW5nIHN5c2ZzIGJlbG93IGlzIGEgcGVyIGRldmljZSBkZWJ1ZworICogbGV2ZWwgdGhhdCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlIGdsb2JhbCBkZWJ1ZyBsZXZlbCBpZiBpdCAodGhlIHBlcgorICogZGV2aWNlIGRlYnVnIGxldmVsKSBpcyBzZXQuCiAgKi8KLQogc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBwcml2LT5kZWJ1Z19sZXZlbCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yNDc1LDkgKzI0MjYsMTIgQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCiAJCUlXTF9FUlIocHJpdiwgIiVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKLQllbHNlCisJZWxzZSB7CiAJCXByaXYtPmRlYnVnX2xldmVsID0gdmFsOwotCisJCWlmIChpd2xfYWxsb2NfdHJhZmZpY19tZW0ocHJpdikpCisJCQlJV0xfRVJSKHByaXYsCisJCQkJIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGdlbmVyYXRlIHRyYWZmaWMgbG9nXG4iKTsKKwl9CiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CiAKQEAgLTI0ODgsMzkgKzI0NDIsNiBAQAogI2VuZGlmIC8qIENPTkZJR19JV0xXSUZJX0RFQlVHICovCiAKIAotc3RhdGljIHNzaXplX3Qgc2hvd192ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7Ci0Jc3RydWN0IGl3bF9hbGl2ZV9yZXNwICpwYWxpdmUgPSAmcHJpdi0+Y2FyZF9hbGl2ZTsKLQlzc2l6ZV90IHBvcyA9IDA7Ci0JdTE2IGVlcHJvbV92ZXI7Ci0KLQlpZiAocGFsaXZlLT5pc192YWxpZCkKLQkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLAotCQkJCSJmdyB2ZXJzaW9uOiAweCUwMVguMHglMDFYLjB4JTAxWC4weCUwMVhcbiIKLQkJCQkiZncgdHlwZTogMHglMDFYIDB4JTAxWFxuIiwKLQkJCQlwYWxpdmUtPnVjb2RlX21ham9yLCBwYWxpdmUtPnVjb2RlX21pbm9yLAotCQkJCXBhbGl2ZS0+c3dfcmV2WzBdLCBwYWxpdmUtPnN3X3JldlsxXSwKLQkJCQlwYWxpdmUtPnZlcl90eXBlLCBwYWxpdmUtPnZlcl9zdWJ0eXBlKTsKLQllbHNlCi0JCXBvcyArPSBzcHJpbnRmKGJ1ZiArIHBvcywgImZ3IG5vdCBsb2FkZWRcbiIpOwotCi0JaWYgKHByaXYtPmVlcHJvbSkgewotCQllZXByb21fdmVyID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9WRVJTSU9OKTsKLQkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLCAiTlZNIFR5cGU6ICVzLCB2ZXJzaW9uOiAweCV4XG4iLAotCQkJICAgICAgIChwcml2LT5udm1fZGV2aWNlX3R5cGUgPT0gTlZNX0RFVklDRV9UWVBFX09UUCkKLQkJCSAgICAgICA/ICJPVFAiIDogIkVFUFJPTSIsIGVlcHJvbV92ZXIpOwotCi0JfSBlbHNlIHsKLQkJcG9zICs9IHNwcmludGYoYnVmICsgcG9zLCAiRUVQUk9NIG5vdCBpbml0aWFsemVkXG4iKTsKLQl9Ci0KLQlyZXR1cm4gcG9zOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIodmVyc2lvbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdmVyc2lvbiwgTlVMTCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcGVyYXR1cmUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjU1NiwxMCArMjQ3NywxNSBAQAogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOwogCWlmIChyZXQpCiAJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKLQllbHNlCi0JCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgdmFsLCBmYWxzZSk7Ci0KLQlyZXR1cm4gY291bnQ7CisJZWxzZSB7CisJCXJldCA9IGl3bF9zZXRfdHhfcG93ZXIocHJpdiwgdmFsLCBmYWxzZSk7CisJCWlmIChyZXQpCisJCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgc2V0dGluZyB0eCBwb3dlciAoMHglZCkuXG4iLAorCQkJCXJldCk7CisJCWVsc2UKKwkJCXJldCA9IGNvdW50OworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIodHhfcG93ZXIsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3R4X3Bvd2VyLCBzdG9yZV90eF9wb3dlcik7CkBAIC0yNjQ0LDY3ICsyNTcwLDYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihmaWx0ZXJfZmxhZ3MsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ZpbHRlcl9mbGFncywKIAkJICAgc3RvcmVfZmlsdGVyX2ZsYWdzKTsKIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgbW9kZTsKLQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1vZGUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgbW9kZSk7Ci0JaWYgKHJldCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IGNvdW50OwotCi0gb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgbGV2ZWwgPSBwcml2LT5wb3dlcl9kYXRhLnBvd2VyX21vZGU7Ci0JY2hhciAqcCA9IGJ1ZjsKLQotCXAgKz0gc3ByaW50ZihwLCAiJWRcbiIsIGxldmVsKTsKLQlyZXR1cm4gcCAtIGJ1ZiArIDE7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9sZXZlbCwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcG93ZXJfbGV2ZWwsCi0JCSAgIHN0b3JlX3Bvd2VyX2xldmVsKTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd19xb3Moc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQljaGFyICpwID0gYnVmOwotCWludCAgIHE7Ci0KLQlmb3IgKHEgPSAwOyBxIDwgQUNfTlVNOyBxKyspIHsKLQkJcCArPSBzcHJpbnRmKHAsICJcdGN3X21pblx0Y3dfbWF4XHRhaWZzblx0dHhvcFxuIik7Ci0JCXAgKz0gc3ByaW50ZihwLCAiQUNbJWRdXHQldVx0JXVcdCV1XHQldVxuIiwgcSwKLQkJCSAgICAgcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmN3X21pbiwKLQkJCSAgICAgcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmN3X21heCwKLQkJCSAgICAgcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW3FdLmFpZnNuLAotCQkJICAgICBwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbcV0uZWRjYV90eG9wKTsKLQl9Ci0KLQlyZXR1cm4gcCAtIGJ1ZiArIDE7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihxb3MsIFNfSVJVR08sIHNob3dfcW9zLCBOVUxMKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0aXN0aWNzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTI3OTcsMTUgKzI2NjIsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppd2xfc3lzZnNfZW50cmllc1tdID0gewogCSZkZXZfYXR0cl9mbGFncy5hdHRyLAogCSZkZXZfYXR0cl9maWx0ZXJfZmxhZ3MuYXR0ciwKLQkmZGV2X2F0dHJfcG93ZXJfbGV2ZWwuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdGlzdGljcy5hdHRyLAogCSZkZXZfYXR0cl90ZW1wZXJhdHVyZS5hdHRyLAogCSZkZXZfYXR0cl90eF9wb3dlci5hdHRyLAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJJmRldl9hdHRyX2RlYnVnX2xldmVsLmF0dHIsCiAjZW5kaWYKLQkmZGV2X2F0dHJfdmVyc2lvbi5hdHRyLAotCSZkZXZfYXR0cl9xb3MuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC0yODQ5LDcgKzI3MTEsNyBAQAogCS8qIERpc2FibGluZyBoYXJkd2FyZSBzY2FuIG1lYW5zIHRoYXQgbWFjODAyMTEgd2lsbCBwZXJmb3JtIHNjYW5zCiAJICogInRoZSBoYXJkIHdheSIsIHJhdGhlciB0aGFuIHVzaW5nIGRldmljZSdzIHNjYW4uICovCiAJaWYgKGNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV9od19zY2FuKSB7Ci0JCWlmIChjZmctPm1vZF9wYXJhbXMtPmRlYnVnICYgSVdMX0RMX0lORk8pCisJCWlmIChpd2xfZGVidWdfbGV2ZWwgJiBJV0xfRExfSU5GTykKIAkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJihwZGV2LT5kZXYpLAogCQkJCSAgICJEaXNhYmxpbmcgaHdfc2NhblxuIik7CiAJCWl3bF9od19vcHMuaHdfc2NhbiA9IE5VTEw7CkBAIC0yODcxLDkgKzI3MzMsMTAgQEAKIAlwcml2LT5pbnRhX21hc2sgPSBDU1JfSU5JX1NFVF9NQVNLOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlwcml2LT5kZWJ1Z19sZXZlbCA9IHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGVidWc7CiAJYXRvbWljX3NldCgmcHJpdi0+cmVzdHJpY3RfcmVmY250LCAwKTsKICNlbmRpZgorCWlmIChpd2xfYWxsb2NfdHJhZmZpY19tZW0ocHJpdikpCisJCUlXTF9FUlIocHJpdiwgIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGdlbmVyYXRlIHRyYWZmaWMgbG9nXG4iKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDIuIEluaXRpYWxpemluZyBQQ0kgYnVzCkBAIC0zMDM0LDYgKzI4OTcsNyBAQAogCQl0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpOwogCiAJaXdsX3Bvd2VyX2luaXRpYWxpemUocHJpdik7CisJaXdsX3R0X2luaXRpYWxpemUocHJpdik7CiAJcmV0dXJuIDA7CiAKICBvdXRfcmVtb3ZlX3N5c2ZzOgpAQCAtMzA1Nyw2ICsyOTIxLDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAgb3V0X2llZWU4MDIxMV9mcmVlX2h3OgogCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKKwlpd2xfZnJlZV90cmFmZmljX21lbShwcml2KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTMwODYsNiArMjk1MSw4IEBACiAJCWl3bF9kb3duKHByaXYpOwogCX0KIAorCWl3bF90dF9leGl0KHByaXYpOworCiAJLyogbWFrZSBzdXJlIHdlIGZsdXNoIGFueSBwZW5kaW5nIGlycSBvcgogCSAqIHRhc2tsZXQgZm9yIHRoZSBkcml2ZXIKIAkgKi8KQEAgLTMxMTMsNiArMjk4MCw3IEBACiAJICogdW50aWwgbm93Li4uICovCiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOworCWl3bF9mcmVlX3RyYWZmaWNfbWVtKHByaXYpOwogCiAJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKIAlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CkBAIC0zMTYzLDE1ICszMDMxLDEyIEBACiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIzQywgUENJX0FOWV9JRCwgaXdsNTE1MF9hZ25fY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIzRCwgUENJX0FOWV9JRCwgaXdsNTE1MF9hZ25fY2ZnKX0sCiAvKiA2MDAwLzYwNTAgU2VyaWVzICovCi0Je0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMTAyLCBpd2w2MDAwXzJhZ19jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCAweDExMTIsIGl3bDYwMDBfMmFnX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIDB4MTEyMiwgaXdsNjAwMF8yYWdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4RCwgUENJX0FOWV9JRCwgaXdsNjAwMGhfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDhFLCBQQ0lfQU5ZX0lELCBpd2w2MDAwaF8yYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDQyMkIsIFBDSV9BTllfSUQsIGl3bDYwMDBfM2Fnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHg0MjJDLCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzJhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIyQywgUENJX0FOWV9JRCwgaXdsNjAwMGlfMmFnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjM4LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCi0Je0lXTF9QQ0lfREVWSUNFKDB4NDIzOSwgUENJX0FOWV9JRCwgaXdsNjAwMF8yYWduX2NmZyl9LAotCXtJV0xfUENJX0RFVklDRSgweDAwODIsIFBDSV9BTllfSUQsIGl3bDYwMDBfMmFnbl9jZmcpfSwKLQl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOSwgUENJX0FOWV9JRCwgaXdsNjAwMGlfMmFnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg2LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzNhZ25fY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NywgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDAwODgsIFBDSV9BTllfSUQsIGl3bDYwNTBfM2Fnbl9jZmcpfSwKQEAgLTMyMzEsMyArMzA5NiwxMSBAQAogCiBtb2R1bGVfZXhpdChpd2xfZXhpdCk7CiBtb2R1bGVfaW5pdChpd2xfaW5pdCk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnNTAsIGl3bF9kZWJ1Z19sZXZlbCwgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnNTAsICI1MFhYIGRlYnVnIG91dHB1dCBtYXNrIChkZXByZWNhdGVkKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpd2xfZGVidWdfbGV2ZWwsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggYTVkNjM2Ny4uYzRiNTY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC04Niw3ICs4Niw3IEBACiAKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGhjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCi0JCS5tZXRhLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9DQUxJQl9NQVg7IGkrKykgewpAQCAtMjUxLDEyICsyNTEsNyBAQAogCiAJCS8qIGluY3JlYXNlIGVuZXJneSB0aHJlc2hvbGQgKHJlZHVjZSBucmcgdmFsdWUpCiAJCSAqICAgdG8gZGVjcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KLQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPgotCQkJKHJhbmdlcy0+bWF4X25yZ19jY2sgKyBOUkdfU1RFUF9DQ0spKQotCQkJZGF0YS0+bnJnX3RoX2NjayA9IGRhdGEtPm5yZ190aF9jY2sKLQkJCQkJCSAtIE5SR19TVEVQX0NDSzsKLQkJZWxzZQotCQkJZGF0YS0+bnJnX3RoX2NjayA9IHJhbmdlcy0+bWF4X25yZ19jY2s7CisJCWRhdGEtPm5yZ190aF9jY2sgPSBkYXRhLT5ucmdfdGhfY2NrIC0gTlJHX1NURVBfQ0NLOwogCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KIAl9IGVsc2UgaWYgKGZhbHNlX2FsYXJtcyA8IG1pbl9mYWxzZV9hbGFybXMpIHsKIAkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfVE9PX0ZFVzsKQEAgLTQyNCw3ICs0MTksNyBAQAogCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kX291dCA9IHsKIAkJLmlkID0gU0VOU0lUSVZJVFlfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfY21kKSwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCisJCS5mbGFncyA9IENNRF9BU1lOQywKIAkJLmRhdGEgPSAmY21kLAogCX07CiAKQEAgLTg1Nyw3ICs4NTIsNyBAQAogCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7CiAKIAlkYXRhLT5zdGF0ZSA9IElXTF9DSEFJTl9OT0lTRV9ET05FOwotCWl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCAwKTsKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgZmFsc2UpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfY2hhaW5fbm9pc2VfY2FsaWJyYXRpb24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBjODcwMzNiLi4yYzVjODhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTI4Myw3ICsyODMsNyBAQAogICogICAgICAgIDEpICBEdWFsIHN0cmVhbSAoTUlNTykKICAqICAgICAgICAyKSAgVHJpcGxlIHN0cmVhbSAoTUlNTykKICAqCi0gKiAgICA1OiAgVmFsdWUgb2YgMHgyMCBpbiBiaXRzIDc6MCBpbmRpY2F0ZXMgNiBNYnBzIEZBVCBkdXBsaWNhdGUgZGF0YQorICogICAgNTogIFZhbHVlIG9mIDB4MjAgaW4gYml0cyA3OjAgaW5kaWNhdGVzIDYgTWJwcyBIVDQwIGR1cGxpY2F0ZSBkYXRhCiAgKgogICogTGVnYWN5IE9GRE0gcmF0ZSBmb3JtYXQgZm9yIGJpdHMgNzowIChiaXQgOCBtdXN0IGJlICIwIiwgYml0IDkgIjAiKToKICAqICAzLTA6ICAweEQpICAgNiBNYnBzCkBAIC0zMjAsMTEgKzMyMCwxMSBAQAogI2RlZmluZSBSQVRFX01DU19HRl9QT1MgMTAKICNkZWZpbmUgUkFURV9NQ1NfR0ZfTVNLIDB4NDAwCiAKLS8qIEJpdCAxMTogKDEpIFVzZSA0ME1oeiBGQVQgY2hubCB3aWR0aCwgKDApIHVzZSAyMCBNSHogbGVnYWN5IGNobmwgd2lkdGggKi8KLSNkZWZpbmUgUkFURV9NQ1NfRkFUX1BPUyAxMQotI2RlZmluZSBSQVRFX01DU19GQVRfTVNLIDB4ODAwCisvKiBCaXQgMTE6ICgxKSBVc2UgNDBNaHogSFQ0MCBjaG5sIHdpZHRoLCAoMCkgdXNlIDIwIE1IeiBsZWdhY3kgY2hubCB3aWR0aCAqLworI2RlZmluZSBSQVRFX01DU19IVDQwX1BPUyAxMQorI2RlZmluZSBSQVRFX01DU19IVDQwX01TSyAweDgwMAogCi0vKiBCaXQgMTI6ICgxKSBEdXBsaWNhdGUgZGF0YSBvbiBib3RoIDIwTUh6IGNobmxzLiAgRkFUIChiaXQgMTEpIG11c3QgYmUgc2V0LiAqLworLyogQml0IDEyOiAoMSkgRHVwbGljYXRlIGRhdGEgb24gYm90aCAyME1IeiBjaG5scy4gSFQ0MCAoYml0IDExKSBtdXN0IGJlIHNldC4gKi8KICNkZWZpbmUgUkFURV9NQ1NfRFVQX1BPUyAxMgogI2RlZmluZSBSQVRFX01DU19EVVBfTVNLIDB4MTAwMAogCkBAIC00NTksNyArNDU5LDcgQEAKIAogCS8qIGNhbGlicmF0aW9uIHZhbHVlcyBmcm9tICJpbml0aWFsaXplIiB1Q29kZSAqLwogCV9fbGUzMiB2b2x0YWdlOwkJLyogc2lnbmVkLCBoaWdoZXIgdmFsdWUgaXMgbG93ZXIgdm9sdGFnZSAqLwotCV9fbGUzMiB0aGVybV9yMVsyXTsJLyogc2lnbmVkLCAxc3QgZm9yIG5vcm1hbCwgMm5kIGZvciBGQVQgY2hhbm5lbCovCisJX19sZTMyIHRoZXJtX3IxWzJdOwkvKiBzaWduZWQsIDFzdCBmb3Igbm9ybWFsLCAybmQgZm9yIEhUNDAgKi8KIAlfX2xlMzIgdGhlcm1fcjJbMl07CS8qIHNpZ25lZCAqLwogCV9fbGUzMiB0aGVybV9yM1syXTsJLyogc2lnbmVkICovCiAJX19sZTMyIHRoZXJtX3I0WzJdOwkvKiBzaWduZWQgKi8KQEAgLTYxMCw3ICs2MTAsNyBAQAogI2RlZmluZSBSWE9OX0ZMR19IVF9PUEVSQVRJTkdfTU9ERV9QT1MJCSgyMykKIAogI2RlZmluZSBSWE9OX0ZMR19IVF9QUk9UX01TSwkJCWNwdV90b19sZTMyKDB4MSA8PCAyMykKLSNkZWZpbmUgUlhPTl9GTEdfRkFUX1BST1RfTVNLCQkJY3B1X3RvX2xlMzIoMHgyIDw8IDIzKQorI2RlZmluZSBSWE9OX0ZMR19IVDQwX1BST1RfTVNLCQkJY3B1X3RvX2xlMzIoMHgyIDw8IDIzKQogCiAjZGVmaW5lIFJYT05fRkxHX0NIQU5ORUxfTU9ERV9QT1MJCSgyNSkKICNkZWZpbmUgUlhPTl9GTEdfQ0hBTk5FTF9NT0RFX01TSwkJY3B1X3RvX2xlMzIoMHgzIDw8IDI1KQpAQCAtNzY1LDYgKzc2NSw4IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBJV0xfQ09OTl9NQVhfTElTVEVOX0lOVEVSVkFMCTEwCisjZGVmaW5lIElXTF9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTQgLyogNDA5NiAqLworI2RlZmluZSBJV0wzOV9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTEgLyogMTAyNCAqLwogCiAvKgogICogUkVQTFlfUlhPTl9USU1JTkcgPSAweDE0IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCkBAIC04ODQsMTIgKzg4NiwxMSBAQAogCiAjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMik7CiAjZGVmaW5lIFNUQV9GTEdfUFdSX1NBVkVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDgpOwotI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKICNkZWZpbmUgU1RBX0ZMR19NQVhfQUdHX1NJWkVfUE9TCSgxOSkKICNkZWZpbmUgU1RBX0ZMR19NQVhfQUdHX1NJWkVfTVNLCWNwdV90b19sZTMyKDMgPDwgMTkpCi0jZGVmaW5lIFNUQV9GTEdfRkFUX0VOX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyMSkKKyNkZWZpbmUgU1RBX0ZMR19IVDQwX0VOX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyMSkKICNkZWZpbmUgU1RBX0ZMR19NSU1PX0RJU19NU0sJCWNwdV90b19sZTMyKDEgPDwgMjIpCiAjZGVmaW5lIFNUQV9GTEdfQUdHX01QRFVfREVOU0lUWV9QT1MJKDIzKQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVX0RFTlNJVFlfTVNLCWNwdV90b19sZTMyKDcgPDwgMjMpCkBAIC0xMTU0LDYgKzExNTUsNyBAQAogI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwljcHVfdG9fbGUxNigxIDw8IDIpCiAjZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCWNwdV90b19sZTE2KDEgPDwgMykKICNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJY3B1X3RvX2xlMTYoMHhmMCkKKyNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX1BPUwkJNAogCiAjZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTVNLCSgweDcgPDwgOCkKICNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9OT05FCSgweDAgPDwgOCkKQEAgLTE5MjIsNyArMTkyNCw3IEBACiAjZGVmaW5lIExJTktfUVVBTF9BR0dfRElTQUJMRV9TVEFSVF9NSU4JKDApCiAKICNkZWZpbmUgTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9ERUYJKDMxKQotI2RlZmluZSBMSU5LX1FVQUxfQUdHX0ZSQU1FX0xJTUlUX01BWAkoNjQpCisjZGVmaW5lIExJTktfUVVBTF9BR0dfRlJBTUVfTElNSVRfTUFYCSg2MykKICNkZWZpbmUgTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9NSU4JKDApCiAKIC8qKgpAQCAtMTk4MiwxMCArMTk4NCwxMCBAQAogICogICAgIGEpIFVzZSB0aGlzIHNhbWUgaW5pdGlhbCByYXRlIGZvciBmaXJzdCAzIGVudHJpZXMuCiAgKiAgICAgYikgRmluZCBuZXh0IGxvd2VyIGF2YWlsYWJsZSByYXRlIHVzaW5nIHNhbWUgbW9kZSAoU0lTTyBvciBNSU1PKSwKICAqICAgICAgICB1c2UgZm9yIG5leHQgMyBlbnRyaWVzLiAgSWYgbm8gbG93ZXIgcmF0ZSBhdmFpbGFibGUsIHN3aXRjaCB0bwotICogICAgICAgIGxlZ2FjeSBtb2RlIChubyBGQVQgY2hhbm5lbCwgbm8gTUlNTywgbm8gc2hvcnQgZ3VhcmQgaW50ZXJ2YWwpLgorICogICAgICAgIGxlZ2FjeSBtb2RlIChubyBIVDQwIGNoYW5uZWwsIG5vIE1JTU8sIG5vIHNob3J0IGd1YXJkIGludGVydmFsKS4KICAqICAgICBjKSBJZiB1c2luZyBNSU1PLCBzZXQgY29tbWFuZCdzIG1pbW9fZGVsaW1pdGVyIHRvIG51bWJlciBvZiBlbnRyaWVzCiAgKiAgICAgICAgdXNpbmcgTUlNTyAoMyBvciA2KS4KLSAqICAgICBkKSBBZnRlciB0cnlpbmcgMiBIVCByYXRlcywgc3dpdGNoIHRvIGxlZ2FjeSBtb2RlIChubyBGQVQgY2hhbm5lbCwKKyAqICAgICBkKSBBZnRlciB0cnlpbmcgMiBIVCByYXRlcywgc3dpdGNoIHRvIGxlZ2FjeSBtb2RlIChubyBIVDQwIGNoYW5uZWwsCiAgKiAgICAgICAgbm8gTUlNTywgbm8gc2hvcnQgZ3VhcmQgaW50ZXJ2YWwpLCBhdCB0aGUgbmV4dCBsb3dlciBiaXQgcmF0ZQogICogICAgICAgIChlLmcuIGlmIHNlY29uZCBIVCBiaXQgcmF0ZSB3YXMgNTQsIHRyeSA0OCBsZWdhY3kpLCBhbmQgZm9sbG93CiAgKiAgICAgICAgbGVnYWN5IHByb2NlZHVyZSBmb3IgcmVtYWluaW5nIHRhYmxlIGVudHJpZXMuCkBAIC0yMzExLDE1ICsyMzEzLDIyIEBACiAgKiBQTSBhbGxvdzoKICAqICAgYml0IDAgLSAnMCcgRHJpdmVyIG5vdCBhbGxvdyBwb3dlciBtYW5hZ2VtZW50CiAgKiAgICAgICAgICAgJzEnIERyaXZlciBhbGxvdyBQTSAodXNlIHJlc3Qgb2YgcGFyYW1ldGVycykKKyAqCiAgKiB1Q29kZSBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbnM6CiAgKiAgIGJpdCAxIC0gJzAnIERvbid0IHNlbmQgc2xlZXAgbm90aWZpY2F0aW9uCiAgKiAgICAgICAgICAgJzEnIHNlbmQgc2xlZXAgbm90aWZpY2F0aW9uIChTRU5EX1BNX05PVElGSUNBVElPTikKKyAqCiAgKiBTbGVlcCBvdmVyIERUSU0KICAqICAgYml0IDIgLSAnMCcgUE0gaGF2ZSB0byB3YWxrIHVwIGV2ZXJ5IERUSU0KICAqICAgICAgICAgICAnMScgUE0gY291bGQgc2xlZXAgb3ZlciBEVElNIHRpbGwgbGlzdGVuIEludGVydmFsLgorICoKICAqIFBDSSBwb3dlciBtYW5hZ2VkCiAgKiAgIGJpdCAzIC0gJzAnIChQQ0lfQ0ZHX0xJTktfQ1RSTCAmIDB4MSkKICAqICAgICAgICAgICAnMScgIShQQ0lfQ0ZHX0xJTktfQ1RSTCAmIDB4MSkKKyAqCisgKiBGYXN0IFBECisgKiAgIGJpdCA0IC0gJzEnIFB1dCByYWRpbyB0byBzbGVlcCB3aGVuIHJlY2VpdmluZyBmcmFtZSBmb3Igb3RoZXJzCisgKgogICogRm9yY2Ugc2xlZXAgTW9kZXMKICAqICAgYml0IDMxLzMwLSAnMDAnIHVzZSBib3RoIG1hYy94dGFsIHNsZWVwcwogICogICAgICAgICAgICAgICcwMScgZm9yY2UgTWFjIHNsZWVwCkBAIC0yNDExLDYgKzI0MjAsMTMgQEAKIAlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9SOwogfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiAxMDAwLCBhbmQgNngwMCAqLworc3RydWN0IGl3bF9jdF9raWxsX3Rocm90dGxpbmdfY29uZmlnIHsKKwlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9leGl0OworCV9fbGUzMiAgIHJlc2VydmVkOworCV9fbGUzMiAgIGNyaXRpY2FsX3RlbXBlcmF0dXJlX2VudGVyOworfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAoOCkKICAqIFNjYW4gQ29tbWFuZHMsIFJlc3BvbnNlcywgTm90aWZpY2F0aW9uczoKQEAgLTI5MTMsNiArMjkyOSwyMCBAQAogCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSBvZmRtX2h0OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qKgorICogc3RydWN0IHN0YXRpc3RpY3NfdHhfcG93ZXIgLSBjdXJyZW50IHR4IHBvd2VyCisgKgorICogQGFudF9hOiBjdXJyZW50IHR4IHBvd2VyIG9uIGNoYWluIGEgaW4gMS8yIGRCIHN0ZXAKKyAqIEBhbnRfYjogY3VycmVudCB0eCBwb3dlciBvbiBjaGFpbiBiIGluIDEvMiBkQiBzdGVwCisgKiBAYW50X2M6IGN1cnJlbnQgdHggcG93ZXIgb24gY2hhaW4gYyBpbiAxLzIgZEIgc3RlcAorICovCitzdHJ1Y3Qgc3RhdGlzdGljc190eF9wb3dlciB7CisJdTggYW50X2E7CisJdTggYW50X2I7CisJdTggYW50X2M7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IHN0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgewogCV9fbGUzMiBiYV90aW1lb3V0OwogCV9fbGUzMiBiYV9yZXNjaGVkdWxlX2ZyYW1lczsKQEAgLTI5MjQsOCArMjk1NCw2IEBACiAJX19sZTMyIHVuZGVycnVuOwogCV9fbGUzMiBidF9wcmlvX2tpbGw7CiAJX19sZTMyIHJ4X2JhX3JzcF9jbnQ7Ci0JX19sZTMyIHJlc2VydmVkMjsKLQlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBzdGF0aXN0aWNzX3R4IHsKQEAgLTI5NDQsNiArMjk3Miw4IEBACiAJX19sZTMyIGN0c190aW1lb3V0X2NvbGxpc2lvbjsKIAlfX2xlMzIgYWNrX29yX2JhX3RpbWVvdXRfY29sbGlzaW9uOwogCXN0cnVjdCBzdGF0aXN0aWNzX3R4X25vbl9waHlfYWdnIGFnZzsKKwlzdHJ1Y3Qgc3RhdGlzdGljc190eF9wb3dlciB0eF9wb3dlcjsKKwlfX2xlMzIgcmVzZXJ2ZWQxOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIApAQCAtMzAwOCw3ICszMDM4LDcgQEAKICAqIG9uZSBjaGFubmVsIHRoYXQgaGFzIGp1c3QgYmVlbiBzY2FubmVkLgogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4MikKLSNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHg4KQorI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19IVDQwX01PREVfTVNLICAgICAgICBjcHVfdG9fbGUzMigweDgpCiAKIHN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgewogCV9fbGUzMiBmbGFnOwpAQCAtMzQ2NSw3ICszNDk1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGl3bF9yeF9wYWNrZXQgewotCV9fbGUzMiBsZW47CisJX19sZTMyIGxlbl9uX2ZsYWdzOwogCXN0cnVjdCBpd2xfY21kX2hlYWRlciBoZHI7CiAJdW5pb24gewogCQlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSByeF9mcmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCAxOGIxMzVmLi5hY2ZkN2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC01OSw2ICs1OSw5IEBACiAJCQkJICAgIElXTF9SQVRFXyMjcHAjI01fSU5ERVgsICAgIFwKIAkJCQkgICAgSVdMX1JBVEVfIyNucCMjTV9JTkRFWCB9CiAKK3UzMiBpd2xfZGVidWdfbGV2ZWw7CitFWFBPUlRfU1lNQk9MKGl3bF9kZWJ1Z19sZXZlbCk7CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpOwogCiAvKgpAQCAtOTMsNyArOTYsNiBAQAogdm9pZCBpd2xfaHdyYXRlX3RvX3R4X2NvbnRyb2woc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmF0ZV9uX2ZsYWdzLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKQogewotCWludCByYXRlX2luZGV4OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqciA9ICZpbmZvLT5jb250cm9sLnJhdGVzWzBdOwogCiAJaW5mby0+YW50ZW5uYV9zZWxfdHggPQpAQCAtMTAyLDE2ICsxMDQsMTMgQEAKIAkJci0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKIAlpZiAocmF0ZV9uX2ZsYWdzICYgUkFURV9NQ1NfR0ZfTVNLKQogCQlyLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQ7Ci0JaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0ZBVF9NU0spCisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUNDBfTVNLKQogCQlyLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIOwogCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19EVVBfTVNLKQogCQlyLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfRFVQX0RBVEE7CiAJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX1NHSV9NU0spCiAJCXItPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTsKLQlyYXRlX2luZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeChyYXRlX25fZmxhZ3MpOwotCWlmIChpbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXJhdGVfaW5kZXggLT0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQlyLT5pZHggPSByYXRlX2luZGV4OworCXItPmlkeCA9IGl3bF9od3JhdGVfdG9fbWFjODAyMTFfaWR4KHJhdGVfbl9mbGFncywgaW5mby0+YmFuZCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9od3JhdGVfdG9fdHhfY29udHJvbCk7CiAKQEAgLTE0Niw2ICsxNDUsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2h3cmF0ZV90b19wbGNwX2lkeCk7CiAKK2ludCBpd2xfaHdyYXRlX3RvX21hYzgwMjExX2lkeCh1MzIgcmF0ZV9uX2ZsYWdzLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJaW50IGlkeCA9IDA7CisJaW50IGJhbmRfb2Zmc2V0ID0gMDsKKworCS8qIEhUIHJhdGUgZm9ybWF0OiBtYWM4MDIxMSB3YW50cyBhbiBNQ1MgbnVtYmVyLCB3aGljaCBpcyBqdXN0IExTQiAqLworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVF9NU0spIHsKKwkJaWR4ID0gKHJhdGVfbl9mbGFncyAmIDB4ZmYpOworCQlyZXR1cm4gaWR4OworCS8qIExlZ2FjeSByYXRlIGZvcm1hdCwgc2VhcmNoIGZvciBtYXRjaCBpbiB0YWJsZSAqLworCX0gZWxzZSB7CisJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQliYW5kX29mZnNldCA9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCWZvciAoaWR4ID0gYmFuZF9vZmZzZXQ7IGlkeCA8IElXTF9SQVRFX0NPVU5UX0xFR0FDWTsgaWR4KyspCisJCQlpZiAoaXdsX3JhdGVzW2lkeF0ucGxjcCA9PSAocmF0ZV9uX2ZsYWdzICYgMHhGRikpCisJCQkJcmV0dXJuIGlkeCAtIGJhbmRfb2Zmc2V0OworCX0KKworCXJldHVybiAtMTsKK30KKwogdTggaXdsX3RvZ2dsZV90eF9hbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhbnQpCiB7CiAJaW50IGk7CkBAIC0zOTEsMTMgKzQxMSwxNCBAQAogCiAJaHRfaW5mby0+aHRfc3VwcG9ydGVkID0gdHJ1ZTsKIAotCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQ7CisJaWYgKHByaXYtPmNmZy0+aHRfZ3JlZW5maWVsZF9zdXBwb3J0KQorCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEOwogCWh0X2luZm8tPmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMDsKIAlodF9pbmZvLT5jYXAgfD0gKElFRUU4MDIxMV9IVF9DQVBfU01fUFMgJgogCQkJICAgICAoV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQgPDwgMikpOwogCiAJbWF4X2JpdF9yYXRlID0gTUFYX0JJVF9SQVRFXzIwX01IWjsKLQlpZiAocHJpdi0+aHdfcGFyYW1zLmZhdF9jaGFubmVsICYgQklUKGJhbmQpKSB7CisJaWYgKHByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgJiBCSVQoYmFuZCkpIHsKIAkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwogCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CiAJCWh0X2luZm8tPm1jcy5yeF9tYXNrWzRdID0gMHgwMTsKQEAgLTQzNSwxMiArNDU2LDEyIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF9MRUdBQ1k7IGkrKykgewogCQlyYXRlc1tpXS5iaXRyYXRlID0gaXdsX3JhdGVzW2ldLmllZWUgKiA1OwogCQlyYXRlc1tpXS5od192YWx1ZSA9IGk7IC8qIFJhdGUgc2NhbGluZyB3aWxsIHdvcmsgb24gaW5kZXhlcyAqLwogCQlyYXRlc1tpXS5od192YWx1ZV9zaG9ydCA9IGk7CiAJCXJhdGVzW2ldLmZsYWdzID0gMDsKLQkJaWYgKChpID4gSVdMX0xBU1RfT0ZETV9SQVRFKSB8fCAoaSA8IElXTF9GSVJTVF9PRkRNX1JBVEUpKSB7CisJCWlmICgoaSA+PSBJV0xfRklSU1RfQ0NLX1JBVEUpICYmIChpIDw9IElXTF9MQVNUX0NDS19SQVRFKSkgewogCQkJLyoKIAkJCSAqIElmIENDSyAhPSAxTSB0aGVuIHNldCBzaG9ydCBwcmVhbWJsZSByYXRlIGZsYWcuCiAJCQkgKi8KQEAgLTQ3Niw3ICs0OTcsNyBAQAogCWlmICghY2hhbm5lbHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmF0ZXMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYXRlKSAqIChJV0xfUkFURV9DT1VOVCArIDEpKSwKKwlyYXRlcyA9IGt6YWxsb2MoKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JhdGUpICogSVdMX1JBVEVfQ09VTlRfTEVHQUNZKSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghcmF0ZXMpIHsKIAkJa2ZyZWUoY2hhbm5lbHMpOwpAQCAtNDg4LDcgKzUwOSw3IEBACiAJc2JhbmQtPmNoYW5uZWxzID0gJmNoYW5uZWxzW0FSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzEpXTsKIAkvKiBqdXN0IE9GRE0gKi8KIAlzYmFuZC0+Yml0cmF0ZXMgPSAmcmF0ZXNbSVdMX0ZJUlNUX09GRE1fUkFURV07Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVCAtIElXTF9GSVJTVF9PRkRNX1JBVEU7CisJc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVF9MRUdBQ1kgLSBJV0xfRklSU1RfT0ZETV9SQVRFOwogCiAJaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9OKQogCQlpd2xjb3JlX2luaXRfaHRfaHdfY2FwYWIocHJpdiwgJnNiYW5kLT5odF9jYXAsCkBAIC00OTgsNyArNTE5LDcgQEAKIAlzYmFuZC0+Y2hhbm5lbHMgPSBjaGFubmVsczsKIAkvKiBPRkRNICYgQ0NLICovCiAJc2JhbmQtPmJpdHJhdGVzID0gcmF0ZXM7Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVDsKKwlzYmFuZC0+bl9iaXRyYXRlcyA9IElXTF9SQVRFX0NPVU5UX0xFR0FDWTsKIAogCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKIAkJaXdsY29yZV9pbml0X2h0X2h3X2NhcGFiKHByaXYsICZzYmFuZC0+aHRfY2FwLApAQCAtNTM3LDE3ICs1NTgsMTQgQEAKIAkJCWlmIChjaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikKIAkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1JBREFSOwogCi0JCQlnZW9fY2gtPmZsYWdzIHw9IGNoLT5mYXRfZXh0ZW5zaW9uX2NoYW5uZWw7CisJCQlnZW9fY2gtPmZsYWdzIHw9IGNoLT5odDQwX2V4dGVuc2lvbl9jaGFubmVsOwogCi0JCQlpZiAoY2gtPm1heF9wb3dlcl9hdmcgPiBwcml2LT50eF9wb3dlcl9jaGFubmVsX2xtdCkKLQkJCQlwcml2LT50eF9wb3dlcl9jaGFubmVsX2xtdCA9IGNoLT5tYXhfcG93ZXJfYXZnOworCQkJaWYgKGNoLT5tYXhfcG93ZXJfYXZnID4gcHJpdi0+dHhfcG93ZXJfZGV2aWNlX2xtdCkKKwkJCQlwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10ID0gY2gtPm1heF9wb3dlcl9hdmc7CiAJCX0gZWxzZSB7CiAJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOwogCQl9CiAKLQkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwotCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwotCiAJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MHglWFxuIiwKIAkJCQljaC0+Y2hhbm5lbCwgZ2VvX2NoLT5jZW50ZXJfZnJlcSwKIAkJCQlpc19jaGFubmVsX2FfYmFuZChjaCkgPyAgIjUuMiIgOiAiMi40IiwKQEAgLTYwNCwxNiArNjIyLDE2IEBACiAJCXJldHVybiAwOwogCiAJaWYgKGV4dGVuc2lvbl9jaGFuX29mZnNldCA9PSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRSkKLQkJcmV0dXJuICEoY2hfaW5mby0+ZmF0X2V4dGVuc2lvbl9jaGFubmVsICYKKwkJcmV0dXJuICEoY2hfaW5mby0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbCAmCiAJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKTsKIAllbHNlIGlmIChleHRlbnNpb25fY2hhbl9vZmZzZXQgPT0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1cpCi0JCXJldHVybiAhKGNoX2luZm8tPmZhdF9leHRlbnNpb25fY2hhbm5lbCAmCisJCXJldHVybiAhKGNoX2luZm8tPmh0NDBfZXh0ZW5zaW9uX2NoYW5uZWwgJgogCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXU4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit1OCBpd2xfaXNfaHQ0MF90eF9hbGxvd2VkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpCiB7CiAJc3RydWN0IGl3bF9odF9pbmZvICppd2xfaHRfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKQEAgLTYyOSwxMSArNjQ3LDcyIEBACiAJCWlmICghc3RhX2h0X2luZi0+aHRfc3VwcG9ydGVkKQogCQkJcmV0dXJuIDA7CiAJfQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRpc2FibGVfaHQ0MCkKKwkJcmV0dXJuIDA7CisjZW5kaWYKIAlyZXR1cm4gaXdsX2lzX2NoYW5uZWxfZXh0ZW5zaW9uKHByaXYsIHByaXYtPmJhbmQsCiAJCQlsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCksCiAJCQlpd2xfaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0KTsKIH0KLUVYUE9SVF9TWU1CT0woaXdsX2lzX2ZhdF90eF9hbGxvd2VkKTsKK0VYUE9SVF9TWU1CT0woaXdsX2lzX2h0NDBfdHhfYWxsb3dlZCk7CisKK3N0YXRpYyB1MTYgaXdsX2FkanVzdF9iZWFjb25faW50ZXJ2YWwodTE2IGJlYWNvbl92YWwsIHUxNiBtYXhfYmVhY29uX3ZhbCkKK3sKKwl1MTYgbmV3X3ZhbCA9IDA7CisJdTE2IGJlYWNvbl9mYWN0b3IgPSAwOworCisJYmVhY29uX2ZhY3RvciA9IChiZWFjb25fdmFsICsgbWF4X2JlYWNvbl92YWwpIC8gbWF4X2JlYWNvbl92YWw7CisJbmV3X3ZhbCA9IGJlYWNvbl92YWwgLyBiZWFjb25fZmFjdG9yOworCisJaWYgKCFuZXdfdmFsKQorCQluZXdfdmFsID0gbWF4X2JlYWNvbl92YWw7CisKKwlyZXR1cm4gbmV3X3ZhbDsKK30KKwordm9pZCBpd2xfc2V0dXBfcnhvbl90aW1pbmcoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXU2NCB0c2Y7CisJczMyIGludGVydmFsX3RtLCByZW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSBOVUxMOworCXUxNiBiZWFjb25faW50OworCisJY29uZiA9IGllZWU4MDIxMV9nZXRfaHdfY29uZihwcml2LT5odyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXByaXYtPnJ4b25fdGltaW5nLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KHByaXYtPnRpbWVzdGFtcCk7CisJcHJpdi0+cnhvbl90aW1pbmcubGlzdGVuX2ludGVydmFsID0gY3B1X3RvX2xlMTYoY29uZi0+bGlzdGVuX2ludGVydmFsKTsKKworCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJYmVhY29uX2ludCA9IHByaXYtPmJlYWNvbl9pbnQ7CisJCXByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93ID0gMDsKKwl9IGVsc2UgeworCQliZWFjb25faW50ID0gcHJpdi0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50OworCisJCS8qIFRPRE86IHdlIG5lZWQgdG8gZ2V0IGF0aW1fd2luZG93IGZyb20gdXBwZXIgc3RhY2sKKwkJICogZm9yIG5vdyB3ZSBzZXQgdG8gMCAqLworCQlwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdyA9IDA7CisJfQorCisJYmVhY29uX2ludCA9IGl3bF9hZGp1c3RfYmVhY29uX2ludGVydmFsKGJlYWNvbl9pbnQsCisJCQkJcHJpdi0+aHdfcGFyYW1zLm1heF9iZWFjb25faXRydmwgKiAxMDI0KTsKKwlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUxNihiZWFjb25faW50KTsKKworCXRzZiA9IHByaXYtPnRpbWVzdGFtcDsgLyogdHNmIGlzIG1vZGlmZWQgYnkgZG9fZGl2OiBjb3B5IGl0ICovCisJaW50ZXJ2YWxfdG0gPSBiZWFjb25faW50ICogMTAyNDsKKwlyZW0gPSBkb19kaXYodHNmLCBpbnRlcnZhbF90bSk7CisJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsID0gY3B1X3RvX2xlMzIoaW50ZXJ2YWxfdG0gLSByZW0pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCUlXTF9ERUJVR19BU1NPQyhwcml2LAorCQkJImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKKwkJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbnRlcnZhbCksCisJCQlsZTMyX3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwpLAorCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldHVwX3J4b25fdGltaW5nKTsKIAogdm9pZCBpd2xfc2V0X3J4b25faHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgaHdfZGVjcnlwdCkKIHsKQEAgLTgwNSw3ICs4ODQsNyBAQAogCWlmICghaHRfaW5mby0+aXNfaHQpIHsKIAkJcnhvbi0+ZmxhZ3MgJj0gfihSWE9OX0ZMR19DSEFOTkVMX01PREVfTVNLIHwKIAkJCVJYT05fRkxHX0NUUkxfQ0hBTk5FTF9MT0NfSElfTVNLIHwKLQkJCVJYT05fRkxHX0ZBVF9QUk9UX01TSyB8CisJCQlSWE9OX0ZMR19IVDQwX1BST1RfTVNLIHwKIAkJCVJYT05fRkxHX0hUX1BST1RfTVNLKTsKIAkJcmV0dXJuOwogCX0KQEAgLTgxNiwxMiArODk1LDEyIEBACiAJcnhvbi0+ZmxhZ3MgfD0gY3B1X3RvX2xlMzIoaHRfaW5mby0+aHRfcHJvdGVjdGlvbiA8PCBSWE9OX0ZMR19IVF9PUEVSQVRJTkdfTU9ERV9QT1MpOwogCiAJLyogU2V0IHVwIGNoYW5uZWwgYmFuZHdpZHRoOgotCSAqIDIwIE1IeiBvbmx5LCAyMC80MCBtaXhlZCBvciBwdXJlIDQwIGlmIGZhdCBvayAqLworCSAqIDIwIE1IeiBvbmx5LCAyMC80MCBtaXhlZCBvciBwdXJlIDQwIGlmIGh0NDAgb2sgKi8KIAkvKiBjbGVhciB0aGUgSFQgY2hhbm5lbCBtb2RlIGJlZm9yZSBzZXQgdGhlIG1vZGUgKi8KIAlyeG9uLT5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NU0sgfAogCQkJIFJYT05fRkxHX0NUUkxfQ0hBTk5FTF9MT0NfSElfTVNLKTsKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsIE5VTEwpKSB7Ci0JCS8qIHB1cmUgNDAgZmF0ICovCisJaWYgKGl3bF9pc19odDQwX3R4X2FsbG93ZWQocHJpdiwgTlVMTCkpIHsKKwkJLyogcHVyZSBodDQwICovCiAJCWlmIChodF9pbmZvLT5odF9wcm90ZWN0aW9uID09IElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fMjBNSFopIHsKIAkJCXJ4b24tPmZsYWdzIHw9IFJYT05fRkxHX0NIQU5ORUxfTU9ERV9QVVJFXzQwOwogCQkJLyogTm90ZTogY29udHJvbCBjaGFubmVsIGlzIG9wcG9zaXRlIG9mIGV4dGVuc2lvbiBjaGFubmVsICovCkBAIC0xMDc2LDcgKzExNTUsNiBAQAogCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7CiAJfQogfQotRVhQT1JUX1NZTUJPTChpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKTsKIAogLyoKICAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQpAQCAtMTE3MCw3ICsxMjQ4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7CiAJCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7Ci0JCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQorCQlpZiAocmF0ZS0+aHdfdmFsdWUgPCBJV0xfUkFURV9DT1VOVF9MRUdBQ1kpCiAJCQlwcml2LT5hY3RpdmVfcmF0ZSB8PSAoMSA8PCByYXRlLT5od192YWx1ZSk7CiAJfQogCkBAIC0xMjMxLDggKzEzMDksMTkwIEBACiAJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOwogCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOwogfQotI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cF90ZXh0W10gPSB7CisJIk9LIiwKKwkiRkFJTCIsCisJIkJBRF9QQVJBTSIsCisJIkJBRF9DSEVDS1NVTSIsCisJIk5NSV9JTlRFUlJVUFRfV0RHIiwKKwkiU1lTQVNTRVJUIiwKKwkiRkFUQUxfRVJST1IiLAorCSJCQURfQ09NTUFORCIsCisJIkhXX0VSUk9SX1RVTkVfTE9DSyIsCisJIkhXX0VSUk9SX1RFTVBFUkFUVVJFIiwKKwkiSUxMRUdBTF9DSEFOX0ZSRVEiLAorCSJWQ0NfTk9UX1NUQUJMRSIsCisJIkZIX0VSUk9SIiwKKwkiTk1JX0lOVEVSUlVQVF9IT1NUIiwKKwkiTk1JX0lOVEVSUlVQVF9BQ1RJT05fUFQiLAorCSJOTUlfSU5URVJSVVBUX1VOS05PV04iLAorCSJVQ09ERV9WRVJTSU9OX01JU01BVENIIiwKKwkiSFdfRVJST1JfQUJTX0xPQ0siLAorCSJIV19FUlJPUl9DQUxfTE9DS19GQUlMIiwKKwkiTk1JX0lOVEVSUlVQVF9JTlNUX0FDVElPTl9QVCIsCisJIk5NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFQiLAorCSJOTUlfVFJNX0hXX0VSIiwKKwkiTk1JX0lOVEVSUlVQVF9UUk0iLAorCSJOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UIgorCSJERUJVR18wIiwKKwkiREVCVUdfMSIsCisJIkRFQlVHXzIiLAorCSJERUJVR18zIiwKKwkiVU5LTk9XTiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKK3sKKwlpbnQgbWF4ID0gQVJSQVlfU0laRShkZXNjX2xvb2t1cF90ZXh0KSAtIDE7CisKKwlpZiAoaSA8IDAgfHwgaSA+IG1heCkKKwkJaSA9IG1heDsKKworCXJldHVybiBkZXNjX2xvb2t1cF90ZXh0W2ldOworfQorCisjZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKKyNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQorCitzdGF0aWMgdm9pZCBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MzIgZGF0YTIsIGxpbmU7CisJdTMyIGRlc2MsIHRpbWUsIGNvdW50LCBiYXNlLCBkYXRhMTsKKwl1MzIgYmxpbmsxLCBibGluazIsIGlsaW5rMSwgaWxpbmsyOworCisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5lcnJvcl9ldmVudF90YWJsZV9wdHIpOworCWVsc2UKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKKworCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgeworCQlJV0xfRVJSKHByaXYsICJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CisKKwlpZiAoRVJST1JfU1RBUlRfT0ZGU0VUIDw9IGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSB7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOworCQlJV0xfRVJSKHByaXYsICJTdGF0dXM6IDB4JTA4bFgsIGNvdW50OiAlZFxuIiwKKwkJCXByaXYtPnN0YXR1cywgY291bnQpOworCX0KKworCWRlc2MgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMSAqIHNpemVvZih1MzIpKTsKKwlibGluazEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMyAqIHNpemVvZih1MzIpKTsKKwlibGluazIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNCAqIHNpemVvZih1MzIpKTsKKwlpbGluazEgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNSAqIHNpemVvZih1MzIpKTsKKwlpbGluazIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgNiAqIHNpemVvZih1MzIpKTsKKwlkYXRhMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA3ICogc2l6ZW9mKHUzMikpOworCWRhdGEyID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDggKiBzaXplb2YodTMyKSk7CisJbGluZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA5ICogc2l6ZW9mKHUzMikpOworCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgMTEgKiBzaXplb2YodTMyKSk7CisKKwlJV0xfRVJSKHByaXYsICJEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUgICAgICAgIgorCQkiZGF0YTEgICAgICBkYXRhMiAgICAgIGxpbmVcbiIpOworCUlXTF9FUlIocHJpdiwgIiUtMjhzICgjJTAyZCkgJTAxMHUgMHglMDhYIDB4JTA4WCAldVxuIiwKKwkJZGVzY19sb29rdXAoZGVzYyksIGRlc2MsIHRpbWUsIGRhdGExLCBkYXRhMiwgbGluZSk7CisJSVdMX0VSUihwcml2LCAiYmxpbmsxICBibGluazIgIGlsaW5rMSAgaWxpbmsyXG4iKTsKKwlJV0xfRVJSKHByaXYsICIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAorCQlpbGluazEsIGlsaW5rMik7CisKK30KKworI2RlZmluZSBFVkVOVF9TVEFSVF9PRkZTRVQgICg0ICogc2l6ZW9mKHUzMikpCisKKy8qKgorICogaXdsX3ByaW50X2V2ZW50X2xvZyAtIER1bXAgZXJyb3IgZXZlbnQgbG9nIHRvIHN5c2xvZworICoKKyAqLworc3RhdGljIHZvaWQgaXdsX3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCisJCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQoreworCXUzMiBpOworCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCisJdTMyIGV2ZW50X3NpemU7IC8qIDIgdTMycywgb3IgMyB1MzJzIGlmIHRpbWVzdGFtcCByZWNvcmRlZCAqLworCXUzMiBwdHI7ICAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBsb2cgZGF0YSAqLworCXUzMiBldiwgdGltZSwgZGF0YTsgLyogZXZlbnQgbG9nIGRhdGEgKi8KKworCWlmIChudW1fZXZlbnRzID09IDApCisJCXJldHVybjsKKwlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQorCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOworCWVsc2UKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CisKKwlpZiAobW9kZSA9PSAwKQorCQlldmVudF9zaXplID0gMiAqIHNpemVvZih1MzIpOworCWVsc2UKKwkJZXZlbnRfc2l6ZSA9IDMgKiBzaXplb2YodTMyKTsKKworCXB0ciA9IGJhc2UgKyBFVkVOVF9TVEFSVF9PRkZTRVQgKyAoc3RhcnRfaWR4ICogZXZlbnRfc2l6ZSk7CisKKwkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCisJKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKKwkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlwdHIgKz0gc2l6ZW9mKHUzMik7CisJCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOworCQlwdHIgKz0gc2l6ZW9mKHUzMik7CisJCWlmIChtb2RlID09IDApIHsKKwkJCS8qIGRhdGEsIGV2ICovCisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJCXB0ciArPSBzaXplb2YodTMyKTsKKwkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAorCQkJCQl0aW1lLCBkYXRhLCBldik7CisJCX0KKwl9Cit9CisKK3ZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KKwl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLworCXUzMiBtb2RlOyAgICAgICAvKiAwIC0gbm8gdGltZXN0YW1wLCAxIC0gdGltZXN0YW1wIHJlY29yZGVkICovCisJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCisJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLworCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLworCisJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKKwkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKKwllbHNlCisJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOworCisJaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGV2ZW50IGxvZyBoZWFkZXIgKi8KKwljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOworCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOworCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CisJbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CisKKwlzaXplID0gbnVtX3dyYXBzID8gY2FwYWNpdHkgOiBuZXh0X2VudHJ5OworCisJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KKwlpZiAoc2l6ZSA9PSAwKSB7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOworCQlyZXR1cm47CisJfQorCisJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKKwkJCXNpemUsIG51bV93cmFwcyk7CisKKwkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCisJICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuICovCisJaWYgKG51bV93cmFwcykKKwkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAorCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOworCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KKwlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOworCit9CisjZW5kaWYKIC8qKgogICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKICAqLwpAQCAtMTI0NSw3ICsxNTA1LDcgQEAKIAljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0ZXX0VSUk9SUykgeworCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykgewogCQlpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKHByaXYpOwogCQlpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYpOwogCQlpd2xfcHJpbnRfcnhfY29uZmlnX2NtZChwcml2KTsKQEAgLTEyNzEsNyArMTUzMSw3IEBACiB2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCSAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKKwkJCSAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlfX2xlMzIgKmZpbHRlcl9mbGFncyA9ICZwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwpAQCAtMTMyNSw3ICsxNTg1LDkgQEAKIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTiB8Ci0JCSAgICBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVDsKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CkBAIC0xMzM1LDYgKzE1OTcsMTIgQEAKIAkvKiBGaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgKi8KIAlody0+d2lwaHktPmRpc2FibGVfYmVhY29uX2hpbnRzID0gdHJ1ZTsKIAorCS8qCisJICogRm9yIG5vdywgZGlzYWJsZSBQUyBieSBkZWZhdWx0IGJlY2F1c2UgaXQgYWZmZWN0cworCSAqIFJYIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHkuCisJICovCisJaHctPndpcGh5LT5wc19kZWZhdWx0ID0gZmFsc2U7CisKIAlody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gUFJPQkVfT1BUSU9OX01BWDsKIAkvKiB3ZSBjcmVhdGUgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGEgemVyby1sZW5ndGggU1NJRCBlbGVtZW50ICovCiAJaHctPndpcGh5LT5tYXhfc2Nhbl9pZV9sZW4gPSBJV0xfTUFYX1BST0JFX1JFUVVFU1QgLSAyNCAtIDI7CkBAIC0xMzY0LDcgKzE2MzIsNiBAQAogCiBpbnQgaXdsX3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8gPSBwcml2LT5jZmctPm1vZF9wYXJhbXMtPnN3X2NyeXB0bzsKIAlwcml2LT5od19wYXJhbXMubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKIAlwcml2LT5od19wYXJhbXMubWF4X3J4cV9sb2cgPSBSWF9RVUVVRV9TSVpFX0xPRzsKIAlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5hbXNkdV9zaXplXzhLKQpAQCAtMTM3Myw2ICsxNjQwLDggQEAKIAkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplID0gSVdMX1JYX0JVRl9TSVpFXzRLOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfcGt0X3NpemUgPSBwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgLSAyNTY7CiAKKwlwcml2LT5od19wYXJhbXMubWF4X2JlYWNvbl9pdHJ2bCA9IElXTF9NQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOworCiAJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+ZGlzYWJsZV8xMW4pCiAJCXByaXYtPmNmZy0+c2t1ICY9IH5JV0xfU0tVX047CiAKQEAgLTE0MTksOSArMTY4OCwxMCBAQAogCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKIAogCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLwotCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKKwkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBsb3dlc3QgcG93ZXIgbGV2ZWwKKwkgKiB0aGlzIHZhbHVlIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIGJ5IGNoYW5uZWwgbWF4IHBvd2VyIGF2ZworCSAqIGZyb20gZWVwcm9tICovCisJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTjsKIAogCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwogCWlmIChyZXQpIHsKQEAgLTE0NDgsNiArMTcxOCw4IEBACiBpbnQgaXdsX3NldF90eF9wb3dlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHM4IHR4X3Bvd2VyLCBib29sIGZvcmNlKQogewogCWludCByZXQgPSAwOworCXM4IHByZXZfdHhfcG93ZXIgPSBwcml2LT50eF9wb3dlcl91c2VyX2xtdDsKKwogCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7CiAJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxvd2VyIGxpbWl0ICVkLlxuIiwKIAkJCSB0eF9wb3dlciwKQEAgLTE0NTUsMjUgKzE3MjcsMzcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHR4X3Bvd2VyID4gSVdMX1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NQVgpIHsKLQkJSVdMX1dBUk4ocHJpdiwgIlJlcXVlc3RlZCB1c2VyIFRYUE9XRVIgJWQgYWJvdmUgdXBwZXIgbGltaXQgJWQuXG4iLAotCQkJIHR4X3Bvd2VyLAotCQkJIElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKTsKKwlpZiAodHhfcG93ZXIgPiBwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10KSB7CisJCUlXTF9XQVJOKHByaXYsCisJCQkiUmVxdWVzdGVkIHVzZXIgVFhQT1dFUiAlZCBhYm92ZSB1cHBlciBsaW1pdCAlZC5cbiIsCisJCQkgdHhfcG93ZXIsIHByaXYtPnR4X3Bvd2VyX2RldmljZV9sbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgIT0gdHhfcG93ZXIpCiAJCWZvcmNlID0gdHJ1ZTsKIAotCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gdHhfcG93ZXI7Ci0KIAkvKiBpZiBuaWMgaXMgbm90IHVwIGRvbid0IHNlbmQgY29tbWFuZCAqLwotCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQotCQlyZXR1cm4gcmV0OworCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSB0eF9wb3dlcjsKKwkJaWYgKGZvcmNlICYmIHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCisJCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5zZW5kX3R4X3Bvd2VyKHByaXYpOworCQllbHNlIGlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcikKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkvKgorCQkgKiBpZiBmYWlsIHRvIHNldCB0eF9wb3dlciwgcmVzdG9yZSB0aGUgb3JpZy4gdHggcG93ZXIKKwkJICovCisJCWlmIChyZXQpCisJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IHByZXZfdHhfcG93ZXI7CisJfQogCi0JaWYgKGZvcmNlICYmIHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCi0JCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7Ci0KKwkvKgorCSAqIEV2ZW4gdGhpcyBpcyBhbiBhc3luYyBob3N0IGNvbW1hbmQsIHRoZSBjb21tYW5kCisJICogd2lsbCBhbHdheXMgcmVwb3J0IHN1Y2Nlc3MgZnJvbSB1Q29kZQorCSAqIFNvIG9uY2UgZHJpdmVyIGNhbiBwbGFjaW5nIHRoZSBjb21tYW5kIGludG8gdGhlIHF1ZXVlCisJICogc3VjY2Vzc2Z1bGx5LCBkcml2ZXIgY2FuIHVzZSBwcml2LT50eF9wb3dlcl91c2VyX2xtdAorCSAqIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgdHggcG93ZXIKKwkgKi8KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3R4X3Bvd2VyKTsKQEAgLTE0ODcsMzEgKzE3NzEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfdW5pbml0X2Rydik7CiAKLQotdm9pZCBpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQljbGVhcl9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIGRpc2FibGUgaW50ZXJydXB0cyBmcm9tIHVDb2RlL05JQyB0byBob3N0ICovCi0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKLQotCS8qIGFja25vd2xlZGdlL2NsZWFyL3Jlc2V0IGFueSBpbnRlcnJ1cHRzIHN0aWxsIHBlbmRpbmcKLQkgKiBmcm9tIHVDb2RlIG9yIGZsb3cgaGFuZGxlciAoUngvVHggRE1BKSAqLwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4ZmZmZmZmZmYpOwotCWl3bF93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAweGZmZmZmZmZmKTsKLQlJV0xfREVCVUdfSVNSKHByaXYsICJEaXNhYmxlZCBpbnRlcnJ1cHRzXG4iKTsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX2Rpc2FibGVfaW50ZXJydXB0cyk7Ci0KLXZvaWQgaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXRfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBwcml2LT5pbnRhX21hc2spOwotfQotRVhQT1JUX1NZTUJPTChpd2xfZW5hYmxlX2ludGVycnVwdHMpOwotCi0KICNkZWZpbmUgSUNUX0NPVU5UIChQQUdFX1NJWkUvc2l6ZW9mKHUzMikpCiAKIC8qIEZyZWUgZHJhbSB0YWJsZSAqLwpAQCAtMTU4MSw3ICsxODQwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKLQltZW1zZXQoJnByaXYtPmljdF90YmxbMF0sMCwgc2l6ZW9mKHUzMikgKiBJQ1RfQ09VTlQpOworCW1lbXNldCgmcHJpdi0+aWN0X3RibFswXSwgMCwgc2l6ZW9mKHUzMikgKiBJQ1RfQ09VTlQpOwogCiAJdmFsID0gcHJpdi0+YWxpZ25lZF9pY3RfdGJsX2RtYSA+PiBQQUdFX1NISUZUOwogCkBAIC0xNjU5LDEzICsxOTE4LDEzIEBACiAJLyogcmVhZCBhbGwgZW50cmllcyB0aGF0IG5vdCAwIHN0YXJ0IHdpdGggaWN0X2luZGV4ICovCiAJd2hpbGUgKHByaXYtPmljdF90YmxbcHJpdi0+aWN0X2luZGV4XSkgewogCi0JCXZhbCB8PSBwcml2LT5pY3RfdGJsW3ByaXYtPmljdF9pbmRleF07CisJCXZhbCB8PSBsZTMyX3RvX2NwdShwcml2LT5pY3RfdGJsW3ByaXYtPmljdF9pbmRleF0pOwogCQlJV0xfREVCVUdfSVNSKHByaXYsICJJQ1QgaW5kZXggJWQgdmFsdWUgMHglMDhYXG4iLAotCQkJCQlwcml2LT5pY3RfaW5kZXgsCi0JCQkJCXByaXYtPmljdF90YmxbcHJpdi0+aWN0X2luZGV4XSk7CisJCQkJcHJpdi0+aWN0X2luZGV4LAorCQkJCWxlMzJfdG9fY3B1KHByaXYtPmljdF90YmxbcHJpdi0+aWN0X2luZGV4XSkpOwogCQlwcml2LT5pY3RfdGJsW3ByaXYtPmljdF9pbmRleF0gPSAwOwogCQlwcml2LT5pY3RfaW5kZXggPSBpd2xfcXVldWVfaW5jX3dyYXAocHJpdi0+aWN0X2luZGV4LAotCQkJCQkJCQlJQ1RfQ09VTlQpOworCQkJCQkJICAgICBJQ1RfQ09VTlQpOwogCiAJfQogCkBAIC0xNzQ1LDcgKzIwMDQsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKIAkJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwogCQlJV0xfREVCVUdfSVNSKHByaXYsICJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCAiCiAJCQkgICAgICAiZmggMHglMDh4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwpAQCAtMTg1Miw3ICsyMTExLDcgQEAKIAl1MzIgc3RhdF9mbGFncyA9IDA7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NUQVRJU1RJQ1NfQ01ELAotCQkubWV0YS5mbGFncyA9IGZsYWdzLAorCQkuZmxhZ3MgPSBmbGFncywKIAkJLmxlbiA9IHNpemVvZihzdGF0X2ZsYWdzKSwKIAkJLmRhdGEgPSAodTggKikgJnN0YXRfZmxhZ3MsCiAJfTsKQEAgLTE5ODQsMTk0ICsyMjQzLDEwIEBACiBFWFBPUlRfU1lNQk9MKGl3bF92ZXJpZnlfdWNvZGUpOwogCiAKLXN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cF90ZXh0W10gPSB7Ci0JIk9LIiwKLQkiRkFJTCIsCi0JIkJBRF9QQVJBTSIsCi0JIkJBRF9DSEVDS1NVTSIsCi0JIk5NSV9JTlRFUlJVUFRfV0RHIiwKLQkiU1lTQVNTRVJUIiwKLQkiRkFUQUxfRVJST1IiLAotCSJCQURfQ09NTUFORCIsCi0JIkhXX0VSUk9SX1RVTkVfTE9DSyIsCi0JIkhXX0VSUk9SX1RFTVBFUkFUVVJFIiwKLQkiSUxMRUdBTF9DSEFOX0ZSRVEiLAotCSJWQ0NfTk9UX1NUQUJMRSIsCi0JIkZIX0VSUk9SIiwKLQkiTk1JX0lOVEVSUlVQVF9IT1NUIiwKLQkiTk1JX0lOVEVSUlVQVF9BQ1RJT05fUFQiLAotCSJOTUlfSU5URVJSVVBUX1VOS05PV04iLAotCSJVQ09ERV9WRVJTSU9OX01JU01BVENIIiwKLQkiSFdfRVJST1JfQUJTX0xPQ0siLAotCSJIV19FUlJPUl9DQUxfTE9DS19GQUlMIiwKLQkiTk1JX0lOVEVSUlVQVF9JTlNUX0FDVElPTl9QVCIsCi0JIk5NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFQiLAotCSJOTUlfVFJNX0hXX0VSIiwKLQkiTk1JX0lOVEVSUlVQVF9UUk0iLAotCSJOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UIgotCSJERUJVR18wIiwKLQkiREVCVUdfMSIsCi0JIkRFQlVHXzIiLAotCSJERUJVR18zIiwKLQkiVU5LTk9XTiIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKLXsKLQlpbnQgbWF4ID0gQVJSQVlfU0laRShkZXNjX2xvb2t1cF90ZXh0KSAtIDE7Ci0KLQlpZiAoaSA8IDAgfHwgaSA+IG1heCkKLQkJaSA9IG1heDsKLQotCXJldHVybiBkZXNjX2xvb2t1cF90ZXh0W2ldOwotfQotCi0jZGVmaW5lIEVSUk9SX1NUQVJUX09GRlNFVCAgKDEgKiBzaXplb2YodTMyKSkKLSNkZWZpbmUgRVJST1JfRUxFTV9TSVpFICAgICAoNyAqIHNpemVvZih1MzIpKQotCi12b2lkIGl3bF9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXUzMiBkYXRhMiwgbGluZTsKLQl1MzIgZGVzYywgdGltZSwgY291bnQsIGJhc2UsIGRhdGExOwotCXUzMiBibGluazEsIGJsaW5rMiwgaWxpbmsxLCBpbGluazI7Ci0KLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmVycm9yX2V2ZW50X3RhYmxlX3B0cik7Ci0JZWxzZQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5lcnJvcl9ldmVudF90YWJsZV9wdHIpOwotCi0JaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlIocHJpdiwgIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwotCQlyZXR1cm47Ci0JfQotCi0JY291bnQgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKLQotCWlmIChFUlJPUl9TVEFSVF9PRkZTRVQgPD0gY291bnQgKiBFUlJPUl9FTEVNX1NJWkUpIHsKLQkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7Ci0JCUlXTF9FUlIocHJpdiwgIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLAotCQkJcHJpdi0+c3RhdHVzLCBjb3VudCk7Ci0JfQotCi0JZGVzYyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAzICogc2l6ZW9mKHUzMikpOwotCWJsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA0ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA1ICogc2l6ZW9mKHUzMikpOwotCWlsaW5rMiA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyA2ICogc2l6ZW9mKHUzMikpOwotCWRhdGExID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDcgKiBzaXplb2YodTMyKSk7Ci0JZGF0YTIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOCAqIHNpemVvZih1MzIpKTsKLQlsaW5lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDkgKiBzaXplb2YodTMyKSk7Ci0JdGltZSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxMSAqIHNpemVvZih1MzIpKTsKLQotCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCi0JCSJkYXRhMSAgICAgIGRhdGEyICAgICAgbGluZVxuIik7Ci0JSVdMX0VSUihwcml2LCAiJS0yOHMgKCMlMDJkKSAlMDEwdSAweCUwOFggMHglMDhYICV1XG4iLAotCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgZGF0YTEsIGRhdGEyLCBsaW5lKTsKLQlJV0xfRVJSKHByaXYsICJibGluazEgIGJsaW5rMiAgaWxpbmsxICBpbGluazJcbiIpOwotCUlXTF9FUlIocHJpdiwgIjB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WFxuIiwgYmxpbmsxLCBibGluazIsCi0JCWlsaW5rMSwgaWxpbmsyKTsKLQotfQotRVhQT1JUX1NZTUJPTChpd2xfZHVtcF9uaWNfZXJyb3JfbG9nKTsKLQotI2RlZmluZSBFVkVOVF9TVEFSVF9PRkZTRVQgICg0ICogc2l6ZW9mKHUzMikpCi0KLS8qKgotICogaXdsX3ByaW50X2V2ZW50X2xvZyAtIER1bXAgZXJyb3IgZXZlbnQgbG9nIHRvIHN5c2xvZwotICoKLSAqLwotc3RhdGljIHZvaWQgaXdsX3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCi0JCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQotewotCXUzMiBpOwotCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCi0JdTMyIGV2ZW50X3NpemU7IC8qIDIgdTMycywgb3IgMyB1MzJzIGlmIHRpbWVzdGFtcCByZWNvcmRlZCAqLwotCXUzMiBwdHI7ICAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBsb2cgZGF0YSAqLwotCXUzMiBldiwgdGltZSwgZGF0YTsgLyogZXZlbnQgbG9nIGRhdGEgKi8KLQotCWlmIChudW1fZXZlbnRzID09IDApCi0JCXJldHVybjsKLQlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQotCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOwotCWVsc2UKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7Ci0KLQlpZiAobW9kZSA9PSAwKQotCQlldmVudF9zaXplID0gMiAqIHNpemVvZih1MzIpOwotCWVsc2UKLQkJZXZlbnRfc2l6ZSA9IDMgKiBzaXplb2YodTMyKTsKLQotCXB0ciA9IGJhc2UgKyBFVkVOVF9TVEFSVF9PRkZTRVQgKyAoc3RhcnRfaWR4ICogZXZlbnRfc2l6ZSk7Ci0KLQkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCi0JKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLiAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKLQkJZXYgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwotCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwotCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCWlmIChtb2RlID09IDApIHsKLQkJCS8qIGRhdGEsIGV2ICovCi0JCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7Ci0JCX0gZWxzZSB7Ci0JCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKLQkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAotCQkJCQl0aW1lLCBkYXRhLCBldik7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KLQl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLwotCXUzMiBtb2RlOyAgICAgICAvKiAwIC0gbm8gdGltZXN0YW1wLCAxIC0gdGltZXN0YW1wIHJlY29yZGVkICovCi0JdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCi0JdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLwotCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLwotCi0JaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKLQkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKLQllbHNlCi0JCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwotCi0JaWYgKCFwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGV2ZW50IGxvZyBoZWFkZXIgKi8KLQljYXBhY2l0eSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwotCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOwotCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7Ci0JbmV4dF9lbnRyeSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7Ci0KLQlzaXplID0gbnVtX3dyYXBzID8gY2FwYWNpdHkgOiBuZXh0X2VudHJ5OwotCi0JLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KLQlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKLQkJCXNpemUsIG51bV93cmFwcyk7Ci0KLQkvKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csIHN0YXJ0IGF0IHRoZSBvbGRlc3QgZW50cnksCi0JICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuICovCi0JaWYgKG51bV93cmFwcykKLQkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5LAotCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUpOwotCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KLQlpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUpOwotCi19Ci1FWFBPUlRfU1lNQk9MKGl3bF9kdW1wX25pY19ldmVudF9sb2cpOwotCiB2b2lkIGl3bF9yZl9raWxsX2N0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9jdF9raWxsX2NvbmZpZyBjbWQ7CisJc3RydWN0IGl3bF9jdF9raWxsX3Rocm90dGxpbmdfY29uZmlnIGFkdl9jbWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjE3OSwxOCArMjI1NCw0NCBAQAogCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX1JFR19CSVRfQ1RfS0lMTF9FWElUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX3RvZ2dsZSA9IGZhbHNlOwogCi0JY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IgPQotCQljcHVfdG9fbGUzMihwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQpOworCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgeworCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzEwMDA6CisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNngwMDoKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDUwOgorCQlhZHZfY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX2VudGVyID0KKwkJCWNwdV90b19sZTMyKHByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCk7CisJCWFkdl9jbWQuY3JpdGljYWxfdGVtcGVyYXR1cmVfZXhpdCA9CisJCQljcHVfdG9fbGUzMihwcml2LT5od19wYXJhbXMuY3Rfa2lsbF9leGl0X3RocmVzaG9sZCk7CiAKLQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKLQkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7Ci0JaWYgKHJldCkKLQkJSVdMX0VSUihwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIGZhaWxlZFxuIik7Ci0JZWxzZQotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgotCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAotCQkJY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IpOworCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKKwkJCQkgICAgICAgc2l6ZW9mKGFkdl9jbWQpLCAmYWR2X2NtZCk7CisJCWlmIChyZXQpCisJCQlJV0xfRVJSKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKKwkJZWxzZQorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0NUX0tJTExfQ09ORklHX0NNRCAiCisJCQkJCSJzdWNjZWVkZWQsICIKKwkJCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGVudGVyIGlzICVkLCIKKwkJCQkJImV4aXQgaXMgJWRcbiIsCisJCQkJICAgICAgIHByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCwKKwkJCQkgICAgICAgcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfZXhpdF90aHJlc2hvbGQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljbWQuY3JpdGljYWxfdGVtcGVyYXR1cmVfUiA9CisJCQljcHVfdG9fbGUzMihwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQpOworCisJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01ELAorCQkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7CisJCWlmIChyZXQpCisJCQlJV0xfRVJSKHByaXYsICJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKKwkJZWxzZQorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0NUX0tJTExfQ09ORklHX0NNRCAiCisJCQkJCSJzdWNjZWVkZWQsICIKKwkJCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAorCQkJCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQpOworCQlicmVhazsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yZl9raWxsX2N0X2NvbmZpZyk7CiAKQEAgLTIyMTEsMTIgKzIzMTIsMTEgQEAKIAkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCiAJCS5sZW4gPSBzaXplb2YodTMyKSwKIAkJLmRhdGEgPSAmZmxhZ3MsCi0JCS5tZXRhLmZsYWdzID0gbWV0YV9mbGFnLAorCQkuZmxhZ3MgPSBtZXRhX2ZsYWcsCiAJfTsKIAogCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NhcmRfc3RhdGUpOwogCiB2b2lkIGl3bF9yeF9wbV9zbGVlcF9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKQEAgLTIyMzQsMTAgKzIzMzQsMTEgQEAKIAkJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CisJdTMyIGxlbiA9IGxlMzJfdG9fY3B1KHBrdC0+bGVuX25fZmxhZ3MpICYgRkhfUlNDU1JfRlJBTUVfU0laRV9NU0s7CiAJSVdMX0RFQlVHX1JBRElPKHByaXYsICJEdW1waW5nICVkIGJ5dGVzIG9mIHVuaGFuZGxlZCAiCi0JCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsCi0JCQlsZTMyX3RvX2NwdShwa3QtPmxlbiksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOwotCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlMzJfdG9fY3B1KHBrdC0+bGVuKSk7CisJCQkibm90aWZpY2F0aW9uIGZvciAlczpcbiIsIGxlbiwKKwkJCWdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCkpOworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKTsKIApAQCAtMjI2MCw3ICsyMzYxLDYgQEAKIHsKIAltZW1zZXQoJnByaXYtPmlzcl9zdGF0cywgMCwgc2l6ZW9mKHByaXYtPmlzcl9zdGF0cykpOwogfQotRVhQT1JUX1NZTUJPTChpd2xfY2xlYXJfaXNyX3N0YXRzKTsKIAogaW50IGl3bF9tYWNfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKQEAgLTIzMzMsMzkgKzI0MzMsMTAgQEAKIAl9CiAJaHRfY29uZiA9ICZzdGEtPmh0X2NhcDsKIAotCWlmIChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCkKLQkJaXdsX2NvbmYtPnNnZiB8PSBIVF9TSE9SVF9HSV8yME1IWjsKLQlpZiAoaHRfY29uZi0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApCi0JCWl3bF9jb25mLT5zZ2YgfD0gSFRfU0hPUlRfR0lfNDBNSFo7Ci0KLQlpd2xfY29uZi0+aXNfZ3JlZW5fZmllbGQgPSAhIShodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpOwotCWl3bF9jb25mLT5tYXhfYW1zZHVfc2l6ZSA9Ci0JCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfTUFYX0FNU0RVKTsKLQotCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9Ci0JCSEhKGh0X2NvbmYtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKTsKLQotCS8qCi0JICogWFhYOiBUaGUgSFQgY29uZmlndXJhdGlvbiBuZWVkcyB0byBiZSBtb3ZlZCBpbnRvIGl3bF9tYWNfY29uZmlnKCkKLQkgKgl0byBiZSBkb25lIHRoZXJlIGNvcnJlY3RseS4KLQkgKi8KLQotCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOwotCWlmIChjb25mX2lzX2h0NDBfbWludXMoJnByaXYtPmh3LT5jb25mKSkKLQkJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOwotCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9wbHVzKCZwcml2LT5ody0+Y29uZikpCi0JCWl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRTsKLQotCS8qIElmIG5vIGFib3ZlIG9yIGJlbG93IGNoYW5uZWwgc3VwcGxpZWQgZGlzYWJsZSBGQVQgY2hhbm5lbCAqLwotCWlmIChpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ICE9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0FCT1ZFICYmCi0JICAgIGl3bF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgIT0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1cpCi0JCWl3bF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9IDA7Ci0KIAlpd2xfY29uZi0+c21fcHMgPSAodTgpKChodF9jb25mLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTKSA+PiAyKTsKIAogCW1lbWNweSgmaXdsX2NvbmYtPm1jcywgJmh0X2NvbmYtPm1jcywgMTYpOwogCi0JaXdsX2NvbmYtPnR4X2NoYW5fd2lkdGggPSBpd2xfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggIT0gMDsKIAlpd2xfY29uZi0+aHRfcHJvdGVjdGlvbiA9CiAJCWJzc19jb25mLT5odF9vcGVyYXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT047CiAJaXdsX2NvbmYtPm5vbl9HRl9TVEFfcHJlc2VudCA9CkBAIC0yNDkyLDcgKzI1NjMsNiBAQAogCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCQlwcml2LT5hc3NvY19pZCA9IGJzc19jb25mLT5haWQ7CiAJCQlwcml2LT5iZWFjb25faW50ID0gYnNzX2NvbmYtPmJlYWNvbl9pbnQ7Ci0JCQlwcml2LT5wb3dlcl9kYXRhLmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOwogCQkJcHJpdi0+dGltZXN0YW1wID0gYnNzX2NvbmYtPnRpbWVzdGFtcDsKIAkJCXByaXYtPmFzc29jX2NhcGFiaWxpdHkgPSBic3NfY29uZi0+YXNzb2NfY2FwYWJpbGl0eTsKIApAQCAtMjY3OSw2ICsyNzQ5LDcgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RydWN0IGl3bF9odF9pbmZvICpodF9jb25mID0gJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCByZXQgPSAwOwogCXUxNiBjaDsKQEAgLTI3MjAsMTAgKzI3OTEsMzIgQEAKIAkJCWdvdG8gc2V0X2NoX291dDsKIAkJfQogCi0JCXByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0ID0gY29uZl9pc19odChjb25mKTsKLQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCisJCS8qIENvbmZpZ3VyZSBIVDQwIGNoYW5uZWxzICovCisJCWh0X2NvbmYtPmlzX2h0ID0gY29uZl9pc19odChjb25mKTsKKwkJaWYgKGh0X2NvbmYtPmlzX2h0KSB7CisJCQlpZiAoY29uZl9pc19odDQwX21pbnVzKGNvbmYpKSB7CisJCQkJaHRfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0KKwkJCQkJSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1c7CisJCQkJaHRfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggPQorCQkJCQlJV0xfQ0hBTk5FTF9XSURUSF80ME1IWjsKKwkJCX0gZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpIHsKKwkJCQlodF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPQorCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRTsKKwkJCQlodF9jb25mLT5zdXBwb3J0ZWRfY2hhbl93aWR0aCA9CisJCQkJCUlXTF9DSEFOTkVMX1dJRFRIXzQwTUhaOworCQkJfSBlbHNlIHsKKwkJCQlodF9jb25mLT5leHRlbnNpb25fY2hhbl9vZmZzZXQgPQorCQkJCQlJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19OT05FOworCQkJCWh0X2NvbmYtPnN1cHBvcnRlZF9jaGFuX3dpZHRoID0KKwkJCQkJSVdMX0NIQU5ORUxfV0lEVEhfMjBNSFo7CisJCQl9CisJCX0gZWxzZQorCQkJaHRfY29uZi0+c3VwcG9ydGVkX2NoYW5fd2lkdGggPSBJV0xfQ0hBTk5FTF9XSURUSF8yME1IWjsKKwkJLyogRGVmYXVsdCB0byBubyBwcm90ZWN0aW9uLiBQcm90ZWN0aW9uIG1vZGUgd2lsbCBsYXRlciBiZSBzZXQKKwkJICogZnJvbSBCU1MgY29uZmlnIGluIGl3bF9odF9jb25mICovCisJCWh0X2NvbmYtPmh0X3Byb3RlY3Rpb24gPSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkU7CiAKIAkJLyogaWYgd2UgYXJlIHN3aXRjaGluZyBmcm9tIGh0IHRvIDIuNCBjbGVhciBmbGFncwogCQkgKiBmcm9tIGFueSBodCByZWxhdGVkIGluZm8gc2luY2UgMi40IGRvZXMgbm90CkBAIC0yNzQyLDEzICsyODM1LDEwIEBACiAJCWl3bF9zZXRfcmF0ZShwcml2KTsKIAl9CiAKLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyAmJgotCSAgICBwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9kaXNhYmxlZCA9Ci0JCQkhKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpOwotCQlyZXQgPSBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKKwkJcmV0ID0gaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKHByaXYsIGZhbHNlKTsKIAkJaWYgKHJldCkKLQkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVycm9yIHNldHRpbmcgc2xlZXAgbGV2ZWxcbiIpOwogCX0KIAogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CkBAIC0yODgxLDYgKzI5NzEsMjQ4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9tYWNfcmVzZXRfdHNmKTsKIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKworI2RlZmluZSBJV0xfVFJBRkZJQ19EVU1QX1NJWkUJKElXTF9UUkFGRklDX0VOVFJZX1NJWkUgKiBJV0xfVFJBRkZJQ19FTlRSSUVTKQorCit2b2lkIGl3bF9yZXNldF90cmFmZmljX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcHJpdi0+dHhfdHJhZmZpY19pZHggPSAwOworCXByaXYtPnJ4X3RyYWZmaWNfaWR4ID0gMDsKKwlpZiAocHJpdi0+dHhfdHJhZmZpYykKKwkJbWVtc2V0KHByaXYtPnR4X3RyYWZmaWMsIDAsIElXTF9UUkFGRklDX0RVTVBfU0laRSk7CisJaWYgKHByaXYtPnJ4X3RyYWZmaWMpCisJCW1lbXNldChwcml2LT5yeF90cmFmZmljLCAwLCBJV0xfVFJBRkZJQ19EVU1QX1NJWkUpOworfQorCitpbnQgaXdsX2FsbG9jX3RyYWZmaWNfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwl1MzIgdHJhZmZpY19zaXplID0gSVdMX1RSQUZGSUNfRFVNUF9TSVpFOworCisJaWYgKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9UWCkgeworCQlpZiAoIXByaXYtPnR4X3RyYWZmaWMpIHsKKwkJCXByaXYtPnR4X3RyYWZmaWMgPQorCQkJCWt6YWxsb2ModHJhZmZpY19zaXplLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcHJpdi0+dHhfdHJhZmZpYykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlpZiAoaXdsX2RlYnVnX2xldmVsICYgSVdMX0RMX1JYKSB7CisJCWlmICghcHJpdi0+cnhfdHJhZmZpYykgeworCQkJcHJpdi0+cnhfdHJhZmZpYyA9CisJCQkJa3phbGxvYyh0cmFmZmljX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFwcml2LT5yeF90cmFmZmljKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCWl3bF9yZXNldF90cmFmZmljX2xvZyhwcml2KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2FsbG9jX3RyYWZmaWNfbWVtKTsKKwordm9pZCBpd2xfZnJlZV90cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJa2ZyZWUocHJpdi0+dHhfdHJhZmZpYyk7CisJcHJpdi0+dHhfdHJhZmZpYyA9IE5VTEw7CisKKwlrZnJlZShwcml2LT5yeF90cmFmZmljKTsKKwlwcml2LT5yeF90cmFmZmljID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2ZyZWVfdHJhZmZpY19tZW0pOworCit2b2lkIGl3bF9kYmdfbG9nX3R4X2RhdGFfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICB1MTYgbGVuZ3RoLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoreworCV9fbGUxNiBmYzsKKwl1MTYgbGVuOworCisJaWYgKGxpa2VseSghKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9UWCkpKQorCQlyZXR1cm47CisKKwlpZiAoIXByaXYtPnR4X3RyYWZmaWMpCisJCXJldHVybjsKKworCWZjID0gaGVhZGVyLT5mcmFtZV9jb250cm9sOworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJbGVuID0gKGxlbmd0aCA+IElXTF9UUkFGRklDX0VOVFJZX1NJWkUpCisJCSAgICAgICA/IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgOiBsZW5ndGg7CisJCW1lbWNweSgocHJpdi0+dHhfdHJhZmZpYyArCisJCSAgICAgICAocHJpdi0+dHhfdHJhZmZpY19pZHggKiBJV0xfVFJBRkZJQ19FTlRSWV9TSVpFKSksCisJCSAgICAgICBoZWFkZXIsIGxlbik7CisJCXByaXYtPnR4X3RyYWZmaWNfaWR4ID0KKwkJCShwcml2LT50eF90cmFmZmljX2lkeCArIDEpICUgSVdMX1RSQUZGSUNfRU5UUklFUzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kYmdfbG9nX3R4X2RhdGFfZnJhbWUpOworCit2b2lkIGl3bF9kYmdfbG9nX3J4X2RhdGFfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICB1MTYgbGVuZ3RoLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyKQoreworCV9fbGUxNiBmYzsKKwl1MTYgbGVuOworCisJaWYgKGxpa2VseSghKGl3bF9kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkpKQorCQlyZXR1cm47CisKKwlpZiAoIXByaXYtPnJ4X3RyYWZmaWMpCisJCXJldHVybjsKKworCWZjID0gaGVhZGVyLT5mcmFtZV9jb250cm9sOworCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKKwkJbGVuID0gKGxlbmd0aCA+IElXTF9UUkFGRklDX0VOVFJZX1NJWkUpCisJCSAgICAgICA/IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgOiBsZW5ndGg7CisJCW1lbWNweSgocHJpdi0+cnhfdHJhZmZpYyArCisJCSAgICAgICAocHJpdi0+cnhfdHJhZmZpY19pZHggKiBJV0xfVFJBRkZJQ19FTlRSWV9TSVpFKSksCisJCSAgICAgICBoZWFkZXIsIGxlbik7CisJCXByaXYtPnJ4X3RyYWZmaWNfaWR4ID0KKwkJCShwcml2LT5yeF90cmFmZmljX2lkeCArIDEpICUgSVdMX1RSQUZGSUNfRU5UUklFUzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kYmdfbG9nX3J4X2RhdGFfZnJhbWUpOworCitjb25zdCBjaGFyICpnZXRfbWdtdF9zdHJpbmcoaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCQlJV0xfQ01EKE1BTkFHRU1FTlRfQVNTT0NfUkVRKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0FTU09DX1JFU1ApOworCQlJV0xfQ01EKE1BTkFHRU1FTlRfUkVBU1NPQ19SRVEpOworCQlJV0xfQ01EKE1BTkFHRU1FTlRfUkVBU1NPQ19SRVNQKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX1BST0JFX1JFUSk7CisJCUlXTF9DTUQoTUFOQUdFTUVOVF9QUk9CRV9SRVNQKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0JFQUNPTik7CisJCUlXTF9DTUQoTUFOQUdFTUVOVF9BVElNKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0RJU0FTU09DKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0FVVEgpOworCQlJV0xfQ01EKE1BTkFHRU1FTlRfREVBVVRIKTsKKwkJSVdMX0NNRChNQU5BR0VNRU5UX0FDVElPTik7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOIjsKKworCX0KK30KKworY29uc3QgY2hhciAqZ2V0X2N0cmxfc3RyaW5nKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwkJSVdMX0NNRChDT05UUk9MX0JBQ0tfUkVRKTsKKwkJSVdMX0NNRChDT05UUk9MX0JBQ0spOworCQlJV0xfQ01EKENPTlRST0xfUFNQT0xMKTsKKwkJSVdMX0NNRChDT05UUk9MX1JUUyk7CisJCUlXTF9DTUQoQ09OVFJPTF9DVFMpOworCQlJV0xfQ01EKENPTlRST0xfQUNLKTsKKwkJSVdMX0NNRChDT05UUk9MX0NGRU5EKTsKKwkJSVdMX0NNRChDT05UUk9MX0NGRU5EQUNLKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVOS05PV04iOworCisJfQorfQorCit2b2lkIGl3bF9jbGVhcl90eF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJbWVtc2V0KCZwcml2LT50eF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCB0cmFmZmljX3N0YXRzKSk7CisKK30KKwordm9pZCBpd2xfY2xlYXJfcnhfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCW1lbXNldCgmcHJpdi0+cnhfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgdHJhZmZpY19zdGF0cykpOworfQorCisvKgorICogaWYgQ09ORklHX0lXTFdJRklfREVCVUdGUyBkZWZpbmVkLCBpd2xfdXBkYXRlX3N0YXRzIGZ1bmN0aW9uIHdpbGwKKyAqIHJlY29yZCBhbGwgdGhlIE1HTVQsIENUUkwgYW5kIERBVEEgcGt0IGZvciBib3RoIFRYIGFuZCBSeCBwYXNzLgorICogVXNlIGRlYnVnRnMgdG8gZGlzcGxheSB0aGUgcngvcnhfc3RhdGlzdGljcworICogaWYgQ09ORklHX0lXTFdJRklfREVCVUdGUyBub3QgYmVpbmcgZGVmaW5lZCwgdGhlbiBubyBNR01UIGFuZCBDVFJMCisgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIHJlY29yZGVkLCBidXQgREFUQSBwa3Qgc3RpbGwgd2lsbCBiZSByZWNvcmRlZAorICogZm9yIHRoZSByZWFzb24gb2YgaXdsX2xlZC5jIG5lZWQgdG8gY29udHJvbCB0aGUgbGVkIGJsaW5raW5nIGJhc2VkIG9uCisgKiBudW1iZXIgb2YgdHggYW5kIHJ4IGRhdGEuCisgKgorICovCit2b2lkIGl3bF91cGRhdGVfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGlzX3R4LCBfX2xlMTYgZmMsIHUxNiBsZW4pCit7CisJc3RydWN0IHRyYWZmaWNfc3RhdHMJKnN0YXRzOworCisJaWYgKGlzX3R4KQorCQlzdGF0cyA9ICZwcml2LT50eF9zdGF0czsKKwllbHNlCisJCXN0YXRzID0gJnByaXYtPnJ4X3N0YXRzOworCisJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkgeworCQlzd2l0Y2ggKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfU1RZUEUpKSB7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX0FTU09DX1JFUV0rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfQVNTT0NfUkVTUF0rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX1JFQVNTT0NfUkVRXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUCk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX1JFQVNTT0NfUkVTUF0rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOgorCQkJc3RhdHMtPm1nbXRbTUFOQUdFTUVOVF9QUk9CRV9SRVFdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX1BST0JFX1JFU1BdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQkVBQ09OKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfQkVBQ09OXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FUSU0pOgorCQkJc3RhdHMtPm1nbXRbTUFOQUdFTUVOVF9BVElNXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfRElTQVNTT0NdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX0FVVEhdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfREVBVVRIKToKKwkJCXN0YXRzLT5tZ210W01BTkFHRU1FTlRfREVBVVRIXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FDVElPTik6CisJCQlzdGF0cy0+bWdtdFtNQU5BR0VNRU5UX0FDVElPTl0rKzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfY3RsKGZjKSkgeworCQlzd2l0Y2ggKGZjICYgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfU1RZUEUpKSB7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0JBQ0tfUkVRKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfQkFDS19SRVFdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQkFDSyk6CisJCQlzdGF0cy0+Y3RybFtDT05UUk9MX0JBQ0tdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFNQT0xMKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfUFNQT0xMXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1JUUyk6CisJCQlzdGF0cy0+Y3RybFtDT05UUk9MX1JUU10rKzsKKwkJCWJyZWFrOworCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9DVFMpOgorCQkJc3RhdHMtPmN0cmxbQ09OVFJPTF9DVFNdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQUNLKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfQUNLXSsrOworCQkJYnJlYWs7CisJCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0NGRU5EKToKKwkJCXN0YXRzLT5jdHJsW0NPTlRST0xfQ0ZFTkRdKys7CisJCQlicmVhazsKKwkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0spOgorCQkJc3RhdHMtPmN0cmxbQ09OVFJPTF9DRkVOREFDS10rKzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZGF0YSAqLworCQlzdGF0cy0+ZGF0YV9jbnQrKzsKKwkJc3RhdHMtPmRhdGFfYnl0ZXMgKz0gbGVuOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3VwZGF0ZV9zdGF0cyk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QTQogCiBpbnQgaXdsX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKaW5kZXggZGFiZjY2My4uYzA0ZDJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaApAQCAtODMsNiArODMsOCBAQAogI2RlZmluZSBJV0xfU0tVX0EgICAgICAgMHgyCiAjZGVmaW5lIElXTF9TS1VfTiAgICAgICAweDgKIAorI2RlZmluZSBJV0xfQ01EKHgpIGNhc2UgeDogcmV0dXJuICN4CisKIHN0cnVjdCBpd2xfaGNtZF9vcHMgewogCWludCAoKnJ4b25fYXNzb2MpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAJaW50ICgqY29tbWl0X3J4b24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0xMTYsNiArMTE4LDE3IEBACiAJdm9pZCAoKnNldF9jdF9raWxsKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogfTsKIAorc3RydWN0IGl3bF91Y29kZV9vcHMgeworCXUzMiAoKmdldF9oZWFkZXJfc2l6ZSkodTMyKTsKKwl1MzIgKCpnZXRfYnVpbGQpKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICosIHUzMik7CisJdTMyICgqZ2V0X2luc3Rfc2l6ZSkoY29uc3Qgc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgKiwgdTMyKTsKKwl1MzIgKCpnZXRfZGF0YV9zaXplKShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqLCB1MzIpOworCXUzMiAoKmdldF9pbml0X3NpemUpKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICosIHUzMik7CisJdTMyICgqZ2V0X2luaXRfZGF0YV9zaXplKShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqLCB1MzIpOworCXUzMiAoKmdldF9ib290X3NpemUpKGNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICosIHUzMik7CisJdTggKiAoKmdldF9kYXRhKShjb25zdCBzdHJ1Y3QgaXdsX3Vjb2RlX2hlYWRlciAqLCB1MzIpOworfTsKKwogc3RydWN0IGl3bF9saWJfb3BzIHsKIAkvKiBzZXQgaHcgZGVwZW5kZW50IHBhcmFtZXRlcnMgKi8KIAlpbnQgKCpzZXRfaHdfcGFyYW1zKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpAQCAtMTcxLDYgKzE4NCw3IEBACiB9OwogCiBzdHJ1Y3QgaXdsX29wcyB7CisJY29uc3Qgc3RydWN0IGl3bF91Y29kZV9vcHMgKnVjb2RlOwogCWNvbnN0IHN0cnVjdCBpd2xfbGliX29wcyAqbGliOwogCWNvbnN0IHN0cnVjdCBpd2xfaGNtZF9vcHMgKmhjbWQ7CiAJY29uc3Qgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyAqdXRpbHM7CkBAIC0xNzgsNyArMTkyLDYgQEAKIAogc3RydWN0IGl3bF9tb2RfcGFyYW1zIHsKIAlpbnQgc3dfY3J5cHRvOwkJLyogZGVmOiAwID0gdXNpbmcgaGFyZHdhcmUgZW5jcnlwdGlvbiAqLwotCXUzMiBkZWJ1ZzsJCS8qIGRlZjogMCA9IG1pbmltYWwgZGVidWcgbG9nIG1lc3NhZ2VzICovCiAJaW50IGRpc2FibGVfaHdfc2NhbjsJLyogZGVmOiAwID0gdXNlIGgvdyBzY2FuICovCiAJaW50IG51bV9vZl9xdWV1ZXM7CS8qIGRlZjogSFcgZGVwZW5kZW50ICovCiAJaW50IG51bV9vZl9hbXBkdV9xdWV1ZXM7LyogZGVmOiBIVyBkZXBlbmRlbnQgKi8KQEAgLTE5NSw2ICsyMDgsOSBAQAogICogCWZpbGVuYW1lIGlzIGNvbnN0cnVjdGVkIGFzIGZ3X25hbWVfcHJlPGFwaT4udWNvZGUuCiAgKiBAdWNvZGVfYXBpX21heDogSGlnaGVzdCB2ZXJzaW9uIG9mIHVDb2RlIEFQSSBzdXBwb3J0ZWQgYnkgZHJpdmVyLgogICogQHVjb2RlX2FwaV9taW46IExvd2VzdCB2ZXJzaW9uIG9mIHVDb2RlIEFQSSBzdXBwb3J0ZWQgYnkgZHJpdmVyLgorICogQHBhX3R5cGU6IHVzZWQgYnkgNjAwMCBzZXJpZXMgb25seSB0byBpZGVudGlmeSB0aGUgdHlwZSBvZiBQb3dlciBBbXBsaWZpZXIKKyAqIEBtYXhfbGxfaXRlbXM6IG1heCBudW1iZXIgb2YgT1RQIGJsb2NrcworICogQHNoYWRvd19yYW1fc3VwcG9ydDogc2hhZG93IHN1cHBvcnQgZm9yIE9UUCBtZW1vcnkKICAqCiAgKiBXZSBlbmFibGUgdGhlIGRyaXZlciB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdydCBBUEkgdmVyc2lvbi4gVGhlCiAgKiBkcml2ZXIgc3BlY2lmaWVzIHdoaWNoIEFQSXMgaXQgc3VwcG9ydHMgKHdpdGggQHVjb2RlX2FwaV9tYXggYmVpbmcgdGhlCkBAIC0yMTUsNiArMjMxLDcgQEAKICAqIGl3bF9oY21kX3V0aWxzX29wcyBldGMuIHdlIGFjY29tbW9kYXRlIGRpZmZlcmVudCBjb21tYW5kIHN0cnVjdHVyZXMKICAqIGFuZCBmbG93cyBiZXR3ZWVuIGhhcmR3YXJlIHZlcnNpb25zICg0OTY1LzUwMDApIGFzIHdlbGwgYXMgdGhlaXIgQVBJCiAgKiB2ZXJzaW9ucy4KKyAqCiAgKi8KIHN0cnVjdCBpd2xfY2ZnIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMjMxLDYgKzI0OCwxMCBAQAogCXU4ICAgdmFsaWRfcnhfYW50OwogCWJvb2wgbmVlZF9wbGxfY2ZnOwogCWJvb2wgdXNlX2lzcl9sZWdhY3k7CisJZW51bSBpd2xfcGFfdHlwZSBwYV90eXBlOworCWNvbnN0IHUxNiBtYXhfbGxfaXRlbXM7CisJY29uc3QgYm9vbCBzaGFkb3dfcmFtX3N1cHBvcnQ7CisJY29uc3QgYm9vbCBodF9ncmVlbmZpZWxkX3N1cHBvcnQ7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTAsNyArMjcxLDcgQEAKIHZvaWQgaXdsX3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoKTsKIHZvaWQgaXdsX3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKTsKLXU4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCit1OCBpd2xfaXNfaHQ0MF90eF9hbGxvd2VkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKnN0YV9odF9pbmYpOwogdm9pZCBpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIHZvaWQgaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSk7CkBAIC0yNjEsOCArMjgyLDcgQEAKIHZvaWQgaXdsX2lycV9oYW5kbGVfZXJyb3Ioc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KTsKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IG11bHRpY2FzdCk7CiBpbnQgaXdsX2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0yODYsNyArMzA2LDU1IEBACiBpbnQgaXdsX21hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogdm9pZCBpd2xfbWFjX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUworaW50IGl3bF9hbGxvY190cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfZnJlZV90cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2xfcmVzZXRfdHJhZmZpY19sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2RiZ19sb2dfdHhfZGF0YV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJdTE2IGxlbmd0aCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlcik7Cit2b2lkIGl3bF9kYmdfbG9nX3J4X2RhdGFfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXUxNiBsZW5ndGgsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpOworY29uc3QgY2hhciAqZ2V0X21nbXRfc3RyaW5nKGludCBjbWQpOworY29uc3QgY2hhciAqZ2V0X2N0cmxfc3RyaW5nKGludCBjbWQpOwordm9pZCBpd2xfY2xlYXJfdHhfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2NsZWFyX3J4X3N0YXRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF91cGRhdGVfc3RhdHMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGlzX3R4LCBfX2xlMTYgZmMsCisJCSAgICAgIHUxNiBsZW4pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGl3bF9hbGxvY190cmFmZmljX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2ZyZWVfdHJhZmZpY19tZW0oc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGl3bF9yZXNldF90cmFmZmljX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2RiZ19sb2dfdHhfZGF0YV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHUxNiBsZW5ndGgsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCSAgICAgIHUxNiBsZW5ndGgsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgaXNfdHgsCisJCQkJICAgIF9fbGUxNiBmYywgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgdHJhZmZpY19zdGF0cwkqc3RhdHM7CiAKKwlpZiAoaXNfdHgpCisJCXN0YXRzID0gJnByaXYtPnR4X3N0YXRzOworCWVsc2UKKwkJc3RhdHMgPSAmcHJpdi0+cnhfc3RhdHM7CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CisJCS8qIGRhdGEgKi8KKwkJc3RhdHMtPmRhdGFfYnl0ZXMgKz0gbGVuOworCX0KK30KKyNlbmRpZgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSWCBoYW5kbGVycy4KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzU1LDYgKzQyMyw3IEBACiB2b2lkIGl3bF9od3JhdGVfdG9fdHhfY29udHJvbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByYXRlX25fZmxhZ3MsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8pOwogaW50IGl3bF9od3JhdGVfdG9fcGxjcF9pZHgodTMyIHJhdGVfbl9mbGFncyk7CitpbnQgaXdsX2h3cmF0ZV90b19tYWM4MDIxMV9pZHgodTMyIHJhdGVfbl9mbGFncywgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIAogdTggaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKQEAgLTM4NCw3ICs0NTMsNiBAQAogdm9pZCBpd2xfaW5pdF9zY2FuX3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zY2FuX2NhbmNlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBtcyk7Ci1pbnQgaXdsX3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiB1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKIAkJICAgICAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgaW50IGxlZnQpOwpAQCAtMzk4LDcgKzQ2Niw2IEBACiB2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9iZ19zY2FuX2NvbXBsZXRlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci1pbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCiAgKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCkBAIC00MzcsOSArNTA0LDkgQEAKIAkJCQkgIHUxNiBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpOwogaW50IGl3bF9zZW5kX2NtZF9wZHVfYXN5bmMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBpZCwgdTE2IGxlbiwKIAkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkgICBpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQkgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAotCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7CisJCQkgICB2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOwogCiBpbnQgaXdsX2VucXVldWVfaGNtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCk7CiAKQEAgLTQ0OSw4ICs1MTYsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBQQ0kJCQkJCQkgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotdm9pZCBpd2xfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGlycXJldHVybl90IGl3bF9pc3JfbGVnYWN5KGludCBpcnEsIHZvaWQgKmRhdGEpOwogaW50IGl3bF9yZXNldF9pY3Qoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2Rpc2FibGVfaWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC00NzQsNyArNTM5LDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgRXJyb3IgSGFuZGxpbmcgRGVidWdnaW5nCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGl3bF9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfY2xlYXJfaXNyX3N0YXRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKQEAgLTU1Niw2ICs2MjAsNyBAQAogdm9pZCBpd2xfcnhfcmVwbHlfY29tcHJlc3NlZF9iYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIAordm9pZCBpd2xfc2V0dXBfcnhvbl90aW1pbmcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9zZW5kX3J4b25fYXNzb2Moc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiBwcml2LT5jZmctPm9wcy0+aGNtZC0+cnhvbl9hc3NvYyhwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKaW5kZXggZjAzZGFlMS4uMDY0MzdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKQEAgLTkxLDcgKzkxLDggQEAKICNkZWZpbmUgQ1NSX0VFUFJPTV9HUCAgICAgICAgICAgKENTUl9CQVNFKzB4MDMwKQogI2RlZmluZSBDU1JfT1RQX0dQX1JFRyAgIAkoQ1NSX0JBU0UrMHgwMzQpCiAjZGVmaW5lIENTUl9HSU9fUkVHCQkoQ1NSX0JBU0UrMHgwM0MpCi0jZGVmaW5lIENTUl9HUF9VQ09ERQkJKENTUl9CQVNFKzB4MDQ0KQorI2RlZmluZSBDU1JfR1BfVUNPREVfUkVHCShDU1JfQkFTRSsweDA0OCkKKyNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUcJKENTUl9CQVNFKzB4MDUwKQogI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMSAgICAgICAoQ1NSX0JBU0UrMHgwNTQpCiAjZGVmaW5lIENTUl9VQ09ERV9EUlZfR1AxX1NFVCAgIChDU1JfQkFTRSsweDA1OCkKICNkZWZpbmUgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSICAgKENTUl9CQVNFKzB4MDVjKQpAQCAtMjQ1LDYgKzI0NiwxMyBAQAogI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQgICAgICAgICAgICgweDAwMDAwMDA0KQogI2RlZmluZSBDU1JfVUNPREVfRFJWX0dQMV9SRUdfQklUX0NUX0tJTExfRVhJVCAgICAgICgweDAwMDAwMDA4KQogCisvKiBHUCBEcml2ZXIgKi8KKyNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX1JBRElPX1NLVV9NU0sJICAgICgweDAwMDAwMDAzKQorI2RlZmluZSBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzN4M19IWUIJICAgICgweDAwMDAwMDAwKQorI2RlZmluZSBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9IWUIJICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBDU1JfR1BfRFJJVkVSX1JFR19CSVRfUkFESU9fU0tVXzJ4Ml9JUEEJICAgICgweDAwMDAwMDAyKQorCisKIC8qIEdJIENoaWNrZW4gQml0cyAqLwogI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0wxQV9OT19MMFNfUlggICgweDAwODAwMDAwKQogI2RlZmluZSBDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUiAgKDB4MjAwMDAwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAppbmRleCAyY2YwMTRmLi5jYmM2MjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTMwLDE2ICszMCwyMyBAQAogI2RlZmluZSBfX2l3bF9kZWJ1Z19oX18KIAogc3RydWN0IGl3bF9wcml2OworZXh0ZXJuIHUzMiBpd2xfZGVidWdfbGV2ZWw7CiAKICNkZWZpbmUgSVdMX0VSUihwLCBmLCBhLi4uKSBkZXZfZXJyKCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQogI2RlZmluZSBJV0xfV0FSTihwLCBmLCBhLi4uKSBkZXZfd2FybigmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKICNkZWZpbmUgSVdMX0lORk8ocCwgZiwgYS4uLikgZGV2X2luZm8oJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCiAjZGVmaW5lIElXTF9DUklUKHAsIGYsIGEuLi4pIGRldl9jcml0KCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQogCisjZGVmaW5lIGl3bF9wcmludF9oZXhfZXJyb3IocHJpdiwgcCwgbGVuKSAJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIml3bCBkYXRhOiAiLAkJCQlcCisJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLCBwLCBsZW4sIDEpOwkJXAorfSB3aGlsZSAoMCkKKwogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAjZGVmaW5lIElXTF9ERUJVRyhfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaWYgKF9fcHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKQkJCQlcCisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwoX19wcml2KSAmIChsZXZlbCkpCQkJCQlcCiAJCWRldl9wcmludGsoS0VSTl9FUlIsICYoX19wcml2LT5ody0+d2lwaHktPmRldiksCQlcCiAJCQkgIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAogCQkJX19mdW5jX18gLCAjIyBhcmdzKTsJCQkJXApAQCAtNDcsNyArNTQsNyBAQAogCiAjZGVmaW5lIElXTF9ERUJVR19MSU1JVChfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoKF9fcHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSAmJiBuZXRfcmF0ZWxpbWl0KCkpCQlcCisJaWYgKChpd2xfZ2V0X2RlYnVnX2xldmVsKF9fcHJpdikgJiAobGV2ZWwpKSAmJiBuZXRfcmF0ZWxpbWl0KCkpCQlcCiAJCWRldl9wcmludGsoS0VSTl9FUlIsICYoX19wcml2LT5ody0+d2lwaHktPmRldiksCQlcCiAJCQkiJWMgJXMgIiBmbXQsIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLAlcCiAJCQkgX19mdW5jX18gLCAjIyBhcmdzKTsJCQkJXApAQCAtNTUsNyArNjIsNyBAQAogCiAjZGVmaW5lIGl3bF9wcmludF9oZXhfZHVtcChwcml2LCBsZXZlbCwgcCwgbGVuKSAJCQlcCiBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCi0JaWYgKHByaXYtPmRlYnVnX2xldmVsICYgbGV2ZWwpICAgICAgICAgIAkJCVwKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIGxldmVsKSAJCQkJXAogCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiaXdsIGRhdGE6ICIsCQlcCiAJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwgcCwgbGVuLCAxKTsJXAogfSB3aGlsZSAoMCkKQEAgLTY1LDIzICs3Miw0MyBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJc3RydWN0IGRlbnRyeSAqZGlyX2RydjsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGF0YTsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXJfZGVidWc7CiAJc3RydWN0IGRlbnRyeSAqZGlyX3JmOwogCXN0cnVjdCBkaXJfZGF0YV9maWxlcyB7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3JhbTsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9udm07CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfc3RhdGlvbnM7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfcnhfc3RhdGlzdGljczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOwogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xvZ19ldmVudDsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9jaGFubmVsczsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0dXM7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfaW50ZXJydXB0OworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3FvczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV90aGVybWFsX3Rocm90dGxpbmc7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xlZDsKKyNlbmRpZgorCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfaHQ0MDsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9zbGVlcF9sZXZlbF9vdmVycmlkZTsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9jdXJyZW50X3NsZWVwX2NvbW1hbmQ7CiAJfSBkYmdmc19kYXRhX2ZpbGVzOwogCXN0cnVjdCBkaXJfcmZfZmlsZXMgewogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHk7CiAJCXN0cnVjdCBkZW50cnkgKmZpbGVfZGlzYWJsZV9jaGFpbl9ub2lzZTsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX3R4X3Bvd2VyOwogCX0gZGJnZnNfcmZfZmlsZXM7CisJc3RydWN0IGRpcl9kZWJ1Z19maWxlcyB7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfcnhfc3RhdGlzdGljczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3RyYWZmaWNfbG9nOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3J4X3F1ZXVlOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3R4X3F1ZXVlOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX3J4X3N0YXRzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX3R4X3N0YXRzOworCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX2dlbmVyYWxfc3RhdHM7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfc2Vuc2l0aXZpdHk7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfY2hhaW5fbm9pc2U7CisJCXN0cnVjdCBkZW50cnkgKmZpbGVfdHhfcG93ZXI7CisJfSBkYmdmc19kZWJ1Z19maWxlczsKIAl1MzIgc3JhbV9vZmZzZXQ7CiAJdTMyIHNyYW1fbGVuOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwppbmRleCBjYTAwY2M4Li5mYjg0NDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSAiaXdsLWRlYnVnLmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKICNpbmNsdWRlICJpd2wtaW8uaCIKLQorI2luY2x1ZGUgIml3bC1jYWxpYi5oIgogCiAvKiBjcmVhdGUgYW5kIHJlbW92ZSBvZiBmaWxlcyAqLwogI2RlZmluZSBERUJVR0ZTX0FERF9ESVIobmFtZSwgcGFyZW50KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNDksNyArNDksOCBAQAogCiAjZGVmaW5lIERFQlVHRlNfQUREX0ZJTEUobmFtZSwgcGFyZW50KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNjQ0LCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwcml2LCAgICAgXAorCWRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIFNfSVdVU1IgfCBTX0lSVVNSLCAgICAgICAgICAgICAgICAgICBcCisJCQkJZGJnZnMtPmRpcl8jI3BhcmVudCwgcHJpdiwgICAgICAgICAgICAgIFwKIAkJCQkmaXdsX2RiZ2ZzXyMjbmFtZSMjX29wcyk7ICAgICAgICAgICAgICAgXAogCWlmICghKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKSkgICAgICAgICAgICAgICBcCiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTcsNyArNTgsOCBAQAogCiAjZGVmaW5lIERFQlVHRlNfQUREX0JPT0wobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCNuYW1lLCAwNjQ0LCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgICAgXAorCWRlYnVnZnNfY3JlYXRlX2Jvb2woI25hbWUsIFNfSVdVU1IgfCBTX0lSVVNSLCAgICAgICAgICAgICAgICAgICBcCisJCQkgICAgZGJnZnMtPmRpcl8jI3BhcmVudCwgcHRyKTsgICAgICAgICAgICAgICAgICBcCiAJaWYgKElTX0VSUihkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJCVwKIAkJCXx8ICFkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJXAogCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY1LDcgKzY3LDcgQEAKIAogI2RlZmluZSBERUJVR0ZTX0FERF9YMzIobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCiAJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV94MzIoI25hbWUsIDA0NDQsIGRiZ2ZzLT5kaXJfIyNwYXJlbnQsIHB0cik7ICAgICBcCisJZGVidWdmc19jcmVhdGVfeDMyKCNuYW1lLCBTX0lSVVNSLCBkYmdmcy0+ZGlyXyMjcGFyZW50LCBwdHIpOyAgIFwKIAlpZiAoSVNfRVJSKGRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQkJXAogCQkJfHwgIWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lKQlcCiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTI0LDE4ICsxMjYsNTggQEAKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzI1Nl07CisJY2hhciAqYnVmOwogCWludCBwb3MgPSAwOwotCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwogCi0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibWdtdDogJXVcbiIsCi0JCQkJCQlwcml2LT50eF9zdGF0c1swXS5jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImN0cmw6ICV1XG4iLAotCQkJCQkJcHJpdi0+dHhfc3RhdHNbMV0uY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkYXRhOiAldVxuIiwKLQkJCQkJCXByaXYtPnR4X3N0YXRzWzJdLmNudCk7CisJaW50IGNudDsKKwlzc2l6ZV90IHJldDsKKwljb25zdCBzaXplX3QgYnVmc3ogPSAxMDAgKyBzaXplb2YoY2hhcikgKiAyNCAqIChNQU5BR0VNRU5UX01BWCArIENPTlRST0xfTUFYKTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiTWFuYWdlbWVudDpcbiIpOworCWZvciAoY250ID0gMDsgY250IDwgTUFOQUdFTUVOVF9NQVg7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIlx0JXNcdFx0OiAldVxuIiwKKwkJCQkgZ2V0X21nbXRfc3RyaW5nKGNudCksCisJCQkJIHByaXYtPnR4X3N0YXRzLm1nbXRbY250XSk7CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkNvbnRyb2xcbiIpOworCWZvciAoY250ID0gMDsgY250IDwgQ09OVFJPTF9NQVg7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIlx0JXNcdFx0OiAldVxuIiwKKwkJCQkgZ2V0X2N0cmxfc3RyaW5nKGNudCksCisJCQkJIHByaXYtPnR4X3N0YXRzLmN0cmxbY250XSk7CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkRhdGE6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcdGNudDogJXVcbiIsCisJCQkgcHJpdi0+dHhfc3RhdHMuZGF0YV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlx0Ynl0ZXM6ICVsbHVcbiIsCisJCQkgcHJpdi0+dHhfc3RhdHMuZGF0YV9ieXRlcyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQogCi0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3R4X3N0YXRpc3RpY3Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXUzMiBjbGVhcl9mbGFnOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAgMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNzY2FuZihidWYsICIleCIsICZjbGVhcl9mbGFnKSAhPSAxKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoY2xlYXJfZmxhZyA9PSAxKQorCQlpd2xfY2xlYXJfdHhfc3RhdHMocHJpdik7CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19yeF9zdGF0aXN0aWNzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCkBAIC0xNDMsMTggKzE4NSw1OSBAQAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMjU2XTsKKwljaGFyICpidWY7CiAJaW50IHBvcyA9IDA7Ci0JY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJaW50IGNudDsKKwlzc2l6ZV90IHJldDsKKwljb25zdCBzaXplX3QgYnVmc3ogPSAxMDAgKworCQlzaXplb2YoY2hhcikgKiAyNCAqIChNQU5BR0VNRU5UX01BWCArIENPTlRST0xfTUFYKTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJtZ210OiAldVxuIiwKLQkJCQkJCXByaXYtPnJ4X3N0YXRzWzBdLmNudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3RybDogJXVcbiIsCi0JCQkJCQlwcml2LT5yeF9zdGF0c1sxXS5jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRhdGE6ICV1XG4iLAotCQkJCQkJcHJpdi0+cnhfc3RhdHNbMl0uY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJNYW5hZ2VtZW50OlxuIik7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQU5BR0VNRU5UX01BWDsgY250KyspIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSAiXHQlc1x0XHQ6ICV1XG4iLAorCQkJCSBnZXRfbWdtdF9zdHJpbmcoY250KSwKKwkJCQkgcHJpdi0+cnhfc3RhdHMubWdtdFtjbnRdKTsKKwl9CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiQ29udHJvbDpcbiIpOworCWZvciAoY250ID0gMDsgY250IDwgQ09OVFJPTF9NQVg7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIlx0JXNcdFx0OiAldVxuIiwKKwkJCQkgZ2V0X2N0cmxfc3RyaW5nKGNudCksCisJCQkJIHByaXYtPnJ4X3N0YXRzLmN0cmxbY250XSk7CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIkRhdGE6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcdGNudDogJXVcbiIsCisJCQkgcHJpdi0+cnhfc3RhdHMuZGF0YV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlx0Ynl0ZXM6ICVsbHVcbiIsCisJCQkgcHJpdi0+cnhfc3RhdHMuZGF0YV9ieXRlcyk7CiAKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcnhfc3RhdGlzdGljc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTMyIGNsZWFyX2ZsYWc7CisJY2hhciBidWZbOF07CisJaW50IGJ1Zl9zaXplOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiV4IiwgJmNsZWFyX2ZsYWcpICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChjbGVhcl9mbGFnID09IDEpCisJCWl3bF9jbGVhcl9yeF9zdGF0cyhwcml2KTsKKwlyZXR1cm4gY291bnQ7CiB9CiAKICNkZWZpbmUgQllURTFfTUFTSyAweDAwMDAwMGZmOwpAQCAtNTY2LDE2ICs2NDksOTgyIEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcW9zX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMCwgaTsKKwljaGFyIGJ1ZlsyNTZdOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXNzaXplX3QgcmV0OworCisJZm9yIChpID0gMDsgaSA8IEFDX05VTTsgaSsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJcdGN3X21pblx0Y3dfbWF4XHRhaWZzblx0dHhvcFxuIik7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiQUNbJWRdXHQldVx0JXVcdCV1XHQldVxuIiwgaSwKKwkJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluLAorCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXgsCisJCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuLAorCQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3ApOworCX0KKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2xlZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBwb3MgPSAwOworCWNoYXIgYnVmWzI1Nl07CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3NpemVfdCByZXQ7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkgImFsbG93IGJsaW5raW5nOiAlc1xuIiwKKwkJCSAocHJpdi0+YWxsb3dfYmxpbmtpbmcpID8gIlRydWUiIDogIkZhbHNlIik7CisJaWYgKHByaXYtPmFsbG93X2JsaW5raW5nKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkgIkxlZCBibGlua2luZyByYXRlOiAldVxuIiwKKwkJCQkgcHJpdi0+bGFzdF9ibGlua19yYXRlKTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSAiTGFzdCBibGluayB0aW1lOiAlbHVcbiIsCisJCQkJIHByaXYtPmxhc3RfYmxpbmtfdGltZSk7CisJfQorCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdGhlcm1hbF90aHJvdHRsaW5nX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCXN0cnVjdCBpd2xfdHRfcmVzdHJpY3Rpb24gKnJlc3RyaWN0aW9uOworCWNoYXIgYnVmWzEwMF07CisJaW50IHBvcyA9IDA7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3NpemVfdCByZXQ7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiVGhlcm1hbCBUaHJvdHRsaW5nIE1vZGU6ICVzXG4iLAorCQkJdHQtPmFkdmFuY2VkX3R0ID8gIkFkdmFuY2UiIDogIkxlZ2FjeSIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJUaGVybWFsIFRocm90dGxpbmcgU3RhdGU6ICVkXG4iLAorCQkJdHQtPnN0YXRlKTsKKwlpZiAodHQtPmFkdmFuY2VkX3R0KSB7CisJCXJlc3RyaWN0aW9uID0gdHQtPnJlc3RyaWN0aW9uICsgdHQtPnN0YXRlOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIlR4IG1vZGU6ICVkXG4iLAorCQkJCXJlc3RyaWN0aW9uLT50eF9zdHJlYW0pOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIlJ4IG1vZGU6ICVkXG4iLAorCQkJCXJlc3RyaWN0aW9uLT5yeF9zdHJlYW0pOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIkhUIG1vZGU6ICVkXG4iLAorCQkJCXJlc3RyaWN0aW9uLT5pc19odCk7CisJfQorCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19kaXNhYmxlX2h0NDBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbOF07CisJaW50IGJ1Zl9zaXplOworCWludCBodDQwOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmh0NDApICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCisJCXByaXYtPmRpc2FibGVfaHQ0MCA9IGh0NDAgPyB0cnVlIDogZmFsc2U7CisJZWxzZSB7CisJCUlXTF9FUlIocHJpdiwgIlN0YSBhc3NvY2lhdGVkIHdpdGggQVAgLSAiCisJCQkiQ2hhbmdlIHRvIDQwTUh6IGNoYW5uZWwgc3VwcG9ydCBpcyBub3QgYWxsb3dlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2Rpc2FibGVfaHQ0MF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsxMDBdOworCWludCBwb3MgPSAwOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXNzaXplX3QgcmV0OworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIjExbiA0ME1IeiBNb2RlOiAlc1xuIiwKKwkJCXByaXYtPmRpc2FibGVfaHQ0MCA/ICJEaXNhYmxlZCIgOiAiRW5hYmxlZCIpOworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19zbGVlcF9sZXZlbF9vdmVycmlkZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgdmFsdWU7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZ2YWx1ZSkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIE91ciB1c2VycyBleHBlY3QgMCB0byBiZSAiQ0FNIiwgYnV0IDAgaXNuJ3QgYWN0dWFsbHkKKwkgKiB2YWxpZCBoZXJlLiBIb3dldmVyLCBsZXQncyBub3QgY29uZnVzZSB0aGVtIGFuZCBwcmVzZW50CisJICogSVdMX1BPV0VSX0lOREVYXzEgYXMgIjEiLCBub3QgIjAiLgorCSAqLworCWlmICh2YWx1ZSA+IDApCisJCXZhbHVlIC09IDE7CisKKwlpZiAodmFsdWUgIT0gLTEgJiYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSBJV0xfUE9XRVJfTlVNKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5wb3dlcl9kYXRhLmRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlID0gdmFsdWU7CisKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgZmFsc2UpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc2xlZXBfbGV2ZWxfb3ZlcnJpZGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCSAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTBdOworCWludCBwb3MsIHZhbHVlOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCisJLyogc2VlIHRoZSB3cml0ZSBmdW5jdGlvbiAqLworCXZhbHVlID0gcHJpdi0+cG93ZXJfZGF0YS5kZWJ1Z19zbGVlcF9sZXZlbF9vdmVycmlkZTsKKwlpZiAodmFsdWUgPj0gMCkKKwkJdmFsdWUgKz0gMTsKKworCXBvcyA9IHNjbnByaW50ZihidWYsIGJ1ZnN6LCAiJWRcbiIsIHZhbHVlKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19jdXJyZW50X3NsZWVwX2NvbW1hbmRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCSAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsyMDBdOworCWludCBwb3MgPSAwLCBpOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCA9ICZwcml2LT5wb3dlcl9kYXRhLnNsZWVwX2NtZDsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSAiZmxhZ3M6ICUjLjJ4XG4iLCBsZTE2X3RvX2NwdShjbWQtPmZsYWdzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJICJSWC9UWCB0aW1lb3V0OiAlZC8lZCB1c2VjXG4iLAorCQkJIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSwKKwkJCSBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOworCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfVkVDX1NJWkU7IGkrKykKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSAic2xlZXBfaW50ZXJ2YWxbJWRdOiAlZFxuIiwgaSwKKwkJCQkgbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFtpXSkpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworfQogCiBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoc3JhbSk7CiBERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGxvZ19ldmVudCk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMobnZtKTsKIERFQlVHRlNfUkVBRF9GSUxFX09QUyhzdGF0aW9ucyk7Ci1ERUJVR0ZTX1JFQURfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7Ci1ERUJVR0ZTX1JFQURfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoY2hhbm5lbHMpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHN0YXR1cyk7CiBERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoaW50ZXJydXB0KTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhxb3MpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhsZWQpOworI2VuZGlmCitERUJVR0ZTX1JFQURfRklMRV9PUFModGhlcm1hbF90aHJvdHRsaW5nKTsKK0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhkaXNhYmxlX2h0NDApOworREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHNsZWVwX2xldmVsX292ZXJyaWRlKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhjdXJyZW50X3NsZWVwX2NvbW1hbmQpOworCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdHJhZmZpY19sb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMCwgb2ZzID0gMDsKKwlpbnQgY250ID0gMCwgZW50cnk7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOworCXN0cnVjdCBpd2xfcXVldWUgKnE7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKChJV0xfVFJBRkZJQ19FTlRSSUVTICogSVdMX1RSQUZGSUNfRU5UUllfU0laRSAqIDY0KSAqIDIpICsKKwkJKElXTF9NQVhfTlVNX1FVRVVFUyAqIDMyICogOCkgKyA0MDA7CisJY29uc3QgdTggKnB0cjsKKwlzc2l6ZV90IHJldDsKKworCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlR4IFF1ZXVlXG4iKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgY250KyspIHsKKwkJdHhxID0gJnByaXYtPnR4cVtjbnRdOworCQlxID0gJnR4cS0+cTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJxWyVkXTogcmVhZF9wdHI6ICV1LCB3cml0ZV9wdHI6ICV1XG4iLAorCQkJCWNudCwgcS0+cmVhZF9wdHIsIHEtPndyaXRlX3B0cik7CisJfQorCWlmIChwcml2LT50eF90cmFmZmljICYmIChpd2xfZGVidWdfbGV2ZWwgJiBJV0xfRExfVFgpKSB7CisJCXB0ciA9IHByaXYtPnR4X3RyYWZmaWM7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiVHggVHJhZmZpYyBpZHg6ICV1XG4iLAlwcml2LT50eF90cmFmZmljX2lkeCk7CisJCWZvciAoY250ID0gMCwgb2ZzID0gMDsgY250IDwgSVdMX1RSQUZGSUNfRU5UUklFUzsgY250KyspIHsKKwkJCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgLyAxNjsKKwkJCSAgICAgZW50cnkrKywgIG9mcyArPSAxNikgeworCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIweCUuNHggIiwgb2ZzKTsKKwkJCQloZXhfZHVtcF90b19idWZmZXIocHRyICsgb2ZzLCAxNiwgMTYsIDIsCisJCQkJCQkgICBidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAwKTsKKwkJCQlwb3MgKz0gc3RybGVuKGJ1Zik7CisJCQkJaWYgKGJ1ZnN6IC0gcG9zID4gMCkKKwkJCQkJYnVmW3BvcysrXSA9ICdcbic7CisJCQl9CisJCX0KKwl9CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJSeCBRdWV1ZVxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJInJlYWQ6ICV1LCB3cml0ZTogJXVcbiIsCisJCQkgcnhxLT5yZWFkLCByeHEtPndyaXRlKTsKKworCWlmIChwcml2LT5yeF90cmFmZmljICYmIChpd2xfZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKSB7CisJCXB0ciA9IHByaXYtPnJ4X3RyYWZmaWM7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiUnggVHJhZmZpYyBpZHg6ICV1XG4iLAlwcml2LT5yeF90cmFmZmljX2lkeCk7CisJCWZvciAoY250ID0gMCwgb2ZzID0gMDsgY250IDwgSVdMX1RSQUZGSUNfRU5UUklFUzsgY250KyspIHsKKwkJCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IElXTF9UUkFGRklDX0VOVFJZX1NJWkUgLyAxNjsKKwkJCSAgICAgZW50cnkrKywgIG9mcyArPSAxNikgeworCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIweCUuNHggIiwgb2ZzKTsKKwkJCQloZXhfZHVtcF90b19idWZmZXIocHRyICsgb2ZzLCAxNiwgMTYsIDIsCisJCQkJCQkgICBidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAwKTsKKwkJCQlwb3MgKz0gc3RybGVuKGJ1Zik7CisJCQkJaWYgKGJ1ZnN6IC0gcG9zID4gMCkKKwkJCQkJYnVmW3BvcysrXSA9ICdcbic7CisJCQl9CisJCX0KKwl9CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc190cmFmZmljX2xvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IHRyYWZmaWNfbG9nOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnRyYWZmaWNfbG9nKSAhPSAxKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAodHJhZmZpY19sb2cgPT0gMCkKKwkJaXdsX3Jlc2V0X3RyYWZmaWNfbG9nKHByaXYpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdHhfcXVldWVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxOworCWNoYXIgKmJ1ZjsKKwlpbnQgcG9zID0gMDsKKwlpbnQgY250OworCWludCByZXQ7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGNoYXIpICogNjAgKiBJV0xfTUFYX05VTV9RVUVVRVM7CisKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgY250KyspIHsKKwkJdHhxID0gJnByaXYtPnR4cVtjbnRdOworCQlxID0gJnR4cS0+cTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJod3EgJS4yZDogcmVhZD0ldSB3cml0ZT0ldSBzdG9wPSVkIgorCQkJCSIgc3dxX2lkPSUjLjJ4IChhYyAlZC9od3EgJWQpXG4iLAorCQkJCWNudCwgcS0+cmVhZF9wdHIsIHEtPndyaXRlX3B0ciwKKwkJCQkhIXRlc3RfYml0KGNudCwgcHJpdi0+cXVldWVfc3RvcHBlZCksCisJCQkJdHhxLT5zd3FfaWQsCisJCQkJdHhxLT5zd3FfaWQgJiAweDgwID8gdHhxLT5zd3FfaWQgJiAzIDoKKwkJCQl0eHEtPnN3cV9pZCwKKwkJCQl0eHEtPnN3cV9pZCAmIDB4ODAgPyAodHhxLT5zd3FfaWQgPj4gMikgJgorCQkJCTB4MWYgOiB0eHEtPnN3cV9pZCk7CisJCWlmIChjbnQgPj0gNCkKKwkJCWNvbnRpbnVlOworCQkvKiBmb3IgdGhlIEFDcywgZGlzcGxheSB0aGUgc3RvcCBjb3VudCB0b28gKi8KKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSIgICAgICAgIHN0b3AtY291bnQ6ICVkXG4iLAorCQkJCWF0b21pY19yZWFkKCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2NudF0pKTsKKwl9CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcnhfcXVldWVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJY2hhciBidWZbMjU2XTsKKwlpbnQgcG9zID0gMDsKKwljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInJlYWQ6ICV1XG4iLAorCQkJCQkJcnhxLT5yZWFkKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ3cml0ZTogJXVcbiIsCisJCQkJCQlyeHEtPndyaXRlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmcmVlX2NvdW50OiAldVxuIiwKKwkJCQkJCXJ4cS0+ZnJlZV9jb3VudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2xvc2VkX3JiX251bTogJXVcbiIsCisJCQkgbGUxNl90b19jcHUocnhxLT5yYl9zdHRzLT5jbG9zZWRfcmJfbnVtKSAmICAweDBGRkYpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KKworI2RlZmluZSBVQ09ERV9TVEFUSVNUSUNTX0NMRUFSX01TSwkJKDB4MSA8PCAwKQorI2RlZmluZSBVQ09ERV9TVEFUSVNUSUNTX0ZSRVFVRU5DWV9NU0sJCSgweDEgPDwgMSkKKyNkZWZpbmUgVUNPREVfU1RBVElTVElDU19OQVJST1dfQkFORF9NU0sJKDB4MSA8PCAyKQorCitzdGF0aWMgaW50IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjaGFyICpidWYsCisJCQkJICAgICBpbnQgYnVmc3opCit7CisJaW50IHAgPSAwOworCisJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLAorCQkiU3RhdGlzdGljcyBGbGFnKDB4JVgpOlxuIiwKKwkJbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5mbGFnKSk7CisJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZmxhZykgJiBVQ09ERV9TVEFUSVNUSUNTX0NMRUFSX01TSykKKwkJcCArPSBzY25wcmludGYoYnVmICsgcCwgYnVmc3ogLSBwLAorCQkiXHRTdGF0aXN0aWNzIGhhdmUgYmVlbiBjbGVhcmVkXG4iKTsKKwlwICs9IHNjbnByaW50ZihidWYgKyBwLCBidWZzeiAtIHAsCisJCSJcdE9wZXJhdGlvbmFsIEZyZXF1ZW5jeTogJXNcbiIsCisJCShsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLmZsYWcpICYKKwkJVUNPREVfU1RBVElTVElDU19GUkVRVUVOQ1lfTVNLKQorCQkgPyAiMi40IEdIeiIgOiAiNS4yIEdIeiIpOworCXAgKz0gc2NucHJpbnRmKGJ1ZiArIHAsIGJ1ZnN6IC0gcCwKKwkJIlx0VEdqIE5hcnJvdyBCYW5kOiAlc1xuIiwKKwkJKGxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZmxhZykgJgorCQlVQ09ERV9TVEFUSVNUSUNTX05BUlJPV19CQU5EX01TSykKKwkJID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CisJcmV0dXJuIHA7Cit9CisKKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3J4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSkgKiAyMCArCisJCXNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5KSAqIDIwICsKKwkJc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSkgKiAyMCArIDQwMDsKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKm9mZG07CisJc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpjY2s7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZ2VuZXJhbDsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKmh0OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJLyogbWFrZSByZXF1ZXN0IHRvIHVDb2RlIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gKi8KKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiRXJyb3Igc2VuZGluZyBzdGF0aXN0aWNzIHJlcXVlc3Q6ICV6ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwlvZmRtID0gJnByaXYtPnN0YXRpc3RpY3Mucngub2ZkbTsKKwljY2sgPSAmcHJpdi0+c3RhdGlzdGljcy5yeC5jY2s7CisJZ2VuZXJhbCA9ICZwcml2LT5zdGF0aXN0aWNzLnJ4LmdlbmVyYWw7CisJaHQgPSAmcHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtX2h0OworCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfUnggLSBPRkRNOlxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiaW5hX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+aW5hX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZpbmFfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInBsY3BfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5wbGNwX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAib3ZlcnJ1bl9lcnI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPm92ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZWFybHlfb3ZlcnJ1bl9lcnI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmVhcmx5X292ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZ29vZDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZ29vZCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZhbHNlX2FsYXJtX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+ZmFsc2VfYWxhcm1fY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmluYV9zeW5jX2Vycl9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfc3luY19lcnJfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2ZkX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNmZF90aW1lb3V0KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmluYV90aW1lb3V0OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ1bnJlc3BvbmRlZF9ydHM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnVucmVzcG9uZGVkX3J0cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJyeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bjogJXVcbiIsCisJCQlsZTMyX3RvX2NwdShvZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInNlbnRfYWNrX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUob2ZkbS0+c2VudF9hY2tfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2VudF9jdHNfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5zZW50X2N0c19jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJzZW50X2JhX3JzcF9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNlbnRfYmFfcnNwX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRzcF9zZWxmX2tpbGw6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmRzcF9zZWxmX2tpbGwpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJtaF9mb3JtYXRfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5taF9mb3JtYXRfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicmVfYWNxX21haW5fcnNzaV9zdW06ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtKSk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gQ0NLOlxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiaW5hX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5pbmFfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmluYV9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJwbGNwX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5wbGNwX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5jcmMzMl9lcnIpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJvdmVycnVuX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5vdmVycnVuX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImVhcmx5X292ZXJydW5fZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmVhcmx5X292ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZ29vZDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5jcmMzMl9nb29kKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZmFsc2VfYWxhcm1fY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmZhbHNlX2FsYXJtX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZpbmFfc3luY19lcnJfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmZpbmFfc3luY19lcnJfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2ZkX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+c2ZkX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmaW5hX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV90aW1lb3V0KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAidW5yZXNwb25kZWRfcnRzOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnVucmVzcG9uZGVkX3J0cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJyeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bjogJXVcbiIsCisJCQlsZTMyX3RvX2NwdShjY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2VudF9hY2tfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfYWNrX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInNlbnRfY3RzX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2N0c19jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJzZW50X2JhX3JzcF9jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+c2VudF9iYV9yc3BfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZHNwX3NlbGZfa2lsbDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5kc3Bfc2VsZl9raWxsKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibWhfZm9ybWF0X2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5taF9mb3JtYXRfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicmVfYWNxX21haW5fcnNzaV9zdW06ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+cmVfYWNxX21haW5fcnNzaV9zdW0pKTsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfUnggLSBHRU5FUkFMOlxuIik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYm9ndXNfY3RzOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5ib2d1c19jdHMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJib2d1c19hY2s6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJvZ3VzX2FjaykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5vbl9ic3NpZF9mcmFtZXM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmaWx0ZXJlZF9mcmFtZXM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5vbl9jaGFubmVsX2JlYWNvbnM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPm5vbl9jaGFubmVsX2JlYWNvbnMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjaGFubmVsX2JlYWNvbnM6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmNoYW5uZWxfYmVhY29ucykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm51bV9taXNzZWRfYmNvbjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bnVtX21pc3NlZF9iY29uKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJImFkY19yeF9zYXR1cmF0aW9uX3RpbWU6ICV1XG4iLAorCQkJbGUzMl90b19jcHUoZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJpbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lOiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KGdlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJiZWFjb25fc2lsZW5jZV9yc3NpX2E6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX3NpbGVuY2VfcnNzaV9jOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiaW50ZXJmZXJlbmNlX2RhdGFfZmxhZzogJXVcbiIsCisJCQlsZTMyX3RvX2NwdShnZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2hhbm5lbF9sb2FkOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5jaGFubmVsX2xvYWQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkc3BfZmFsc2VfYWxhcm1zOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5kc3BfZmFsc2VfYWxhcm1zKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX3Jzc2lfYTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJlYWNvbl9yc3NpX2I6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2IpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJiZWFjb25fcnNzaV9jOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9jKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX2VuZXJneV9hOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2EpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJiZWFjb25fZW5lcmd5X2I6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJlYWNvbl9lbmVyZ3lfYzogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jKSk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gT0ZETV9IVDpcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInBsY3BfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShodC0+cGxjcF9lcnIpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJvdmVycnVuX2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm92ZXJydW5fZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiZWFybHlfb3ZlcnJ1bl9lcnI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5lYXJseV9vdmVycnVuX2VycikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2dvb2Q6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5jcmMzMl9nb29kKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZXJyOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShodC0+Y3JjMzJfZXJyKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibWhfZm9ybWF0X2VycjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPm1oX2Zvcm1hdF9lcnIpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2dfY3JjMzJfZ29vZDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jcmMzMl9nb29kKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnX21wZHVfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShodC0+YWdnX21wZHVfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jbnQpKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3R4X3N0YXRzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gKHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc190eCkgKiAyNCkgKyAyNTA7CisJc3NpemVfdCByZXQ7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXJldHVybiAtRUFHQUlOOworCisJLyogbWFrZSByZXF1ZXN0IHRvIHVDb2RlIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gKi8KKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCisJaWYgKHJldCkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiRXJyb3Igc2VuZGluZyBzdGF0aXN0aWNzIHJlcXVlc3Q6ICV6ZFxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWJ1ZiA9IGt6YWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCUlXTF9FUlIocHJpdiwgIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogdGhlIHN0YXRpc3RpYyBpbmZvcm1hdGlvbiBkaXNwbGF5IGhlcmUgaXMgYmFzZWQgb24KKwkgKiB0aGUgbGFzdCBzdGF0aXN0aWNzIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlCisJICogbWlnaHQgbm90IHJlZmxlY3QgdGhlIGN1cnJlbnQgdUNvZGUgYWN0aXZpdHkKKwkgKi8KKwl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OworCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfVHg6XG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJwcmVhbWJsZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPnByZWFtYmxlX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInJ4X2RldGVjdGVkX2NudDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPnJ4X2RldGVjdGVkX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJ0X3ByaW9fZGVmZXJfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YnRfcHJpb19kZWZlcl9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJidF9wcmlvX2tpbGxfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YnRfcHJpb19raWxsX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZld19ieXRlc19jbnQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5mZXdfYnl0ZXNfY250KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3RzX3RpbWVvdXQ6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5jdHNfdGltZW91dCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFja190aW1lb3V0OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWNrX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJleHBlY3RlZF9hY2tfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZXhwZWN0ZWRfYWNrX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFjdHVhbF9hY2tfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWN0dWFsX2Fja19jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkdW1wX21zZHVfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+ZHVtcF9tc2R1X2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJidXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudDogJXVcbiIsCisJCQlsZTMyX3RvX2NwdSh0eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudDogJXVcbiIsCisJCQlsZTMyX3RvX2NwdSh0eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImN0c190aW1lb3V0X2NvbGxpc2lvbjogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPmN0c190aW1lb3V0X2NvbGxpc2lvbikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJhY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb246ICV1XG4iLAorCQkJbGUzMl90b19jcHUodHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbikpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFnZyBiYV90aW1lb3V0OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmJhX3RpbWVvdXQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYWdnIGJhX3Jlc2NoZWR1bGVfZnJhbWVzOiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KHR4LT5hZ2cuYmFfcmVzY2hlZHVsZV9mcmFtZXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYWdnIHNjZF9xdWVyeV9hZ2dfZnJhbWVfY250OiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2cgc2NkX3F1ZXJ5X25vX2FnZzogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnIHNjZF9xdWVyeV9hZ2c6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X2FnZykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJhZ2cgc2NkX3F1ZXJ5X21pc21hdGNoOiAldVxuIiwKKwkJCWxlMzJfdG9fY3B1KHR4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYWdnIGZyYW1lX25vdF9yZWFkeTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUodHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2cgdW5kZXJydW46ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cudW5kZXJydW4pKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2cgYnRfcHJpb19raWxsOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmJ0X3ByaW9fa2lsbCkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFnZyByeF9iYV9yc3BfY250OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnJ4X2JhX3JzcF9jbnQpKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX2dlbmVyYWxfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBwb3MgPSAwOworCWNoYXIgKmJ1ZjsKKwlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCkgKiA0ICsgMjUwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgKmdlbmVyYWw7CisJc3RydWN0IHN0YXRpc3RpY3NfZGJnICpkYmc7CisJc3RydWN0IHN0YXRpc3RpY3NfZGl2ICpkaXY7CisKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgMCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAocmV0KSB7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLCByZXQpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB0aGUgc3RhdGlzdGljIGluZm9ybWF0aW9uIGRpc3BsYXkgaGVyZSBpcyBiYXNlZCBvbgorCSAqIHRoZSBsYXN0IHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIGZyb20gdUNvZGUKKwkgKiBtaWdodCBub3QgcmVmbGVjdCB0aGUgY3VycmVudCB1Q29kZSBhY3Rpdml0eQorCSAqLworCWdlbmVyYWwgPSAmcHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsOworCWRiZyA9ICZwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwuZGJnOworCWRpdiA9ICZwcml2LT5zdGF0aXN0aWNzLmdlbmVyYWwuZGl2OworCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfR2VuZXJhbDpcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInRlbXBlcmF0dXJlOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT50ZW1wZXJhdHVyZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInRlbXBlcmF0dXJlX206ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnRlbXBlcmF0dXJlX20pKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJidXJzdF9jaGVjazogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZGJnLT5idXJzdF9jaGVjaykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImJ1cnN0X2NvdW50OiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NvdW50KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2xlZXBfdGltZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xlZXBfdGltZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInNsb3RzX291dDogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xvdHNfb3V0KSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic2xvdHNfaWRsZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+c2xvdHNfaWRsZSkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInR0bF90aW1lc3RhbXA6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnR0bF90aW1lc3RhbXApKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0eF9vbl9hOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2EpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJ0eF9vbl9iOiAldVxuIiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2IpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJleGVjX3RpbWU6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+ZXhlY190aW1lKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicHJvYmVfdGltZTogJXVcbiIsCisJCQkgbGUzMl90b19jcHUoZGl2LT5wcm9iZV90aW1lKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicnhfZW5hYmxlX2NvdW50ZXI6ICV1XG4iLAorCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKSk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc2Vuc2l0aXZpdHlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwlpbnQgY250ID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSkgKiA0ICsgMTAwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfZGF0YSAqZGF0YTsKKworCWRhdGEgPSAmcHJpdi0+c2Vuc2l0aXZpdHlfZGF0YTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImF1dG9fY29ycl9vZmRtOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmF1dG9fY29ycl9vZmRtKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkiYXV0b19jb3JyX29mZG1fbXJjOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV9tcmMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImF1dG9fY29ycl9vZmRtX3gxOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbV94MSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJImF1dG9fY29ycl9vZmRtX21yY194MTpcdFx0ICV1XG4iLAorCQkJZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjX3gxKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhdXRvX2NvcnJfY2NrOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmF1dG9fY29ycl9jY2spOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImF1dG9fY29ycl9jY2tfbXJjOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5hdXRvX2NvcnJfY2NrX21yYyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJImxhc3RfYmFkX3BsY3BfY250X29mZG06XHRcdCAldVxuIiwKKwkJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X29mZG0pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImxhc3RfZmFfY250X29mZG06XHRcdCAldVxuIiwKKwkJCWRhdGEtPmxhc3RfZmFfY250X29mZG0pOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCSJsYXN0X2JhZF9wbGNwX2NudF9jY2s6XHRcdCAldVxuIiwKKwkJCWRhdGEtPmxhc3RfYmFkX3BsY3BfY250X2Njayk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibGFzdF9mYV9jbnRfY2NrOlx0XHQgJXVcbiIsCisJCQlkYXRhLT5sYXN0X2ZhX2NudF9jY2spOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ19jdXJyX3N0YXRlOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPm5yZ19jdXJyX3N0YXRlKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJucmdfcHJldl9zdGF0ZTpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5ucmdfcHJldl9zdGF0ZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibnJnX3ZhbHVlOlx0XHRcdCIpOworCWZvciAoY250ID0gMDsgY250IDwgMTA7IGNudCsrKSB7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiAldSIsCisJCQkJZGF0YS0+bnJnX3ZhbHVlW2NudF0pOworCX0KKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ19zaWxlbmNlX3Jzc2k6XHRcdCIpOworCWZvciAoY250ID0gMDsgY250IDwgTlJHX05VTV9QUkVWX1NUQVRfTDsgY250KyspIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiICV1IiwKKwkJCQlkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2NudF0pOworCX0KKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ19zaWxlbmNlX3JlZjpcdFx0ICV1XG4iLAorCQkJZGF0YS0+bnJnX3NpbGVuY2VfcmVmKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJucmdfZW5lcmd5X2lkeDpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5ucmdfZW5lcmd5X2lkeCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAibnJnX3NpbGVuY2VfaWR4Olx0XHQgJXVcbiIsCisJCQlkYXRhLT5ucmdfc2lsZW5jZV9pZHgpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ190aF9jY2s6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+bnJnX3RoX2Njayk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJIm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmOlx0ICV1XG4iLAorCQkJZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm51bV9pbl9jY2tfbm9fZmE6XHRcdCAldVxuIiwKKwkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5yZ190aF9vZmRtOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPm5yZ190aF9vZmRtKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfY2hhaW5fbm9pc2VfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwlpbnQgY250ID0gMDsKKwljaGFyICpidWY7CisJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSkgKiA0ICsgMTAwOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBpd2xfY2hhaW5fbm9pc2VfZGF0YSAqZGF0YTsKKworCWRhdGEgPSAmcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YTsKKwlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImFjdGl2ZV9jaGFpbnM6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+YWN0aXZlX2NoYWlucyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2hhaW5fbm9pc2VfYTpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5jaGFpbl9ub2lzZV9hKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjaGFpbl9ub2lzZV9iOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmNoYWluX25vaXNlX2IpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNoYWluX25vaXNlX2M6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+Y2hhaW5fbm9pc2VfYyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY2hhaW5fc2lnbmFsX2E6XHRcdFx0ICV1XG4iLAorCQkJZGF0YS0+Y2hhaW5fc2lnbmFsX2EpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNoYWluX3NpZ25hbF9iOlx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmNoYWluX3NpZ25hbF9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjaGFpbl9zaWduYWxfYzpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5jaGFpbl9zaWduYWxfYyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiYmVhY29uX2NvdW50Olx0XHRcdCAldVxuIiwKKwkJCWRhdGEtPmJlYWNvbl9jb3VudCk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJkaXNjb25uX2FycmF5Olx0XHRcdCIpOworCWZvciAoY250ID0gMDsgY250IDwgTlVNX1JYX0NIQUlOUzsgY250KyspIHsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiICV1IiwKKwkJCQlkYXRhLT5kaXNjb25uX2FycmF5W2NudF0pOworCX0KKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJcbiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImRlbHRhX2dhaW5fY29kZTpcdFx0Iik7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBOVU1fUlhfQ0hBSU5TOyBjbnQrKykgeworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIgJXUiLAorCQkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtjbnRdKTsKKwl9CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiXG4iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJyYWRpb193cml0ZTpcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5yYWRpb193cml0ZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic3RhdGU6XHRcdFx0XHQgJXVcbiIsCisJCQlkYXRhLT5zdGF0ZSk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc190eF9wb3dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzEyOF07CisJaW50IHBvcyA9IDA7CisJc3NpemVfdCByZXQ7CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4OworCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIk4vQVxuIik7CisJZWxzZSB7CisJCS8qIG1ha2UgcmVxdWVzdCB0byB1Q29kZSB0byByZXRyaWV2ZSBzdGF0aXN0aWNzIGluZm9ybWF0aW9uICovCisJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwkJcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIDApOworCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCQlpZiAocmV0KSB7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLAorCQkJCXJldCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OworCQlpZiAodHgtPnR4X3Bvd2VyLmFudF9hIHx8CisJCSAgICB0eC0+dHhfcG93ZXIuYW50X2IgfHwKKwkJICAgIHR4LT50eF9wb3dlci5hbnRfYykgeworCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJ0eCBwb3dlcjogKDEvMiBkQiBzdGVwKVxuIik7CisJCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0EpICYmCisJCQkgICAgdHgtPnR4X3Bvd2VyLmFudF9hKQorCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJcdGFudGVubmEgQTogMHglWFxuIiwKKwkJCQkJCXR4LT50eF9wb3dlci5hbnRfYSk7CisJCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0IpICYmCisJCQkgICAgdHgtPnR4X3Bvd2VyLmFudF9iKQorCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJcdGFudGVubmEgQjogMHglWFxuIiwKKwkJCQkJCXR4LT50eF9wb3dlci5hbnRfYik7CisJCQlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ICYgQU5UX0MpICYmCisJCQkgICAgdHgtPnR4X3Bvd2VyLmFudF9jKQorCQkJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJcdGFudGVubmEgQzogMHglWFxuIiwKKwkJCQkJCXR4LT50eF9wb3dlci5hbnRfYyk7CisJCX0gZWxzZQorCQkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiTi9BXG4iKTsKKwl9CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworfQorCitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFModHJhZmZpY19sb2cpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHJ4X3F1ZXVlKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyh0eF9xdWV1ZSk7CitERUJVR0ZTX1JFQURfRklMRV9PUFModWNvZGVfcnhfc3RhdHMpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHVjb2RlX3R4X3N0YXRzKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyh1Y29kZV9nZW5lcmFsX3N0YXRzKTsKK0RFQlVHRlNfUkVBRF9GSUxFX09QUyhzZW5zaXRpdml0eSk7CitERUJVR0ZTX1JFQURfRklMRV9PUFMoY2hhaW5fbm9pc2UpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHR4X3Bvd2VyKTsKIAogLyoKICAqIENyZWF0ZSB0aGUgZGVidWdmcyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMKQEAgLTYwMywxOSArMTY1Miw0MiBAQAogCiAJREVCVUdGU19BRERfRElSKGRhdGEsIGRiZ2ZzLT5kaXJfZHJ2KTsKIAlERUJVR0ZTX0FERF9ESVIocmYsIGRiZ2ZzLT5kaXJfZHJ2KTsKKwlERUJVR0ZTX0FERF9ESVIoZGVidWcsIGRiZ2ZzLT5kaXJfZHJ2KTsKIAlERUJVR0ZTX0FERF9GSUxFKG52bSwgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRShzcmFtLCBkYXRhKTsKIAlERUJVR0ZTX0FERF9GSUxFKGxvZ19ldmVudCwgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRShzdGF0aW9ucywgZGF0YSk7Ci0JREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkYXRhKTsKLQlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoY2hhbm5lbHMsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUoc3RhdHVzLCBkYXRhKTsKIAlERUJVR0ZTX0FERF9GSUxFKGludGVycnVwdCwgZGF0YSk7CisJREVCVUdGU19BRERfRklMRShxb3MsIGRhdGEpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKKwlERUJVR0ZTX0FERF9GSUxFKGxlZCwgZGF0YSk7CisjZW5kaWYKKwlERUJVR0ZTX0FERF9GSUxFKHNsZWVwX2xldmVsX292ZXJyaWRlLCBkYXRhKTsKKwlERUJVR0ZTX0FERF9GSUxFKGN1cnJlbnRfc2xlZXBfY29tbWFuZCwgZGF0YSk7CisJREVCVUdGU19BRERfRklMRSh0aGVybWFsX3Rocm90dGxpbmcsIGRhdGEpOworCURFQlVHRlNfQUREX0ZJTEUoZGlzYWJsZV9odDQwLCBkYXRhKTsKKwlERUJVR0ZTX0FERF9GSUxFKHJ4X3N0YXRpc3RpY3MsIGRlYnVnKTsKKwlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRlYnVnKTsKKwlERUJVR0ZTX0FERF9GSUxFKHRyYWZmaWNfbG9nLCBkZWJ1Zyk7CisJREVCVUdGU19BRERfRklMRShyeF9xdWV1ZSwgZGVidWcpOworCURFQlVHRlNfQUREX0ZJTEUodHhfcXVldWUsIGRlYnVnKTsKKwlERUJVR0ZTX0FERF9GSUxFKHR4X3Bvd2VyLCBkZWJ1Zyk7CisJaWYgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSAhPSBDU1JfSFdfUkVWX1RZUEVfMzk0NSkgeworCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3J4X3N0YXRzLCBkZWJ1Zyk7CisJCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfdHhfc3RhdHMsIGRlYnVnKTsKKwkJREVCVUdGU19BRERfRklMRSh1Y29kZV9nZW5lcmFsX3N0YXRzLCBkZWJ1Zyk7CisJCURFQlVHRlNfQUREX0ZJTEUoc2Vuc2l0aXZpdHksIGRlYnVnKTsKKwkJREVCVUdGU19BRERfRklMRShjaGFpbl9ub2lzZSwgZGVidWcpOworCX0KIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfc2Vuc2l0aXZpdHksIHJmLCAmcHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCk7CiAJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX2NoYWluX25vaXNlLCByZiwKIAkJCSAmcHJpdi0+ZGlzYWJsZV9jaGFpbl9ub2lzZV9jYWwpOwotCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV90eF9wb3dlciwgcmYsICZwcml2LT5kaXNhYmxlX3R4X3Bvd2VyX2NhbCk7CisJaWYgKCgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpIHx8CisJICAgICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpKQorCQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfdHhfcG93ZXIsIHJmLAorCQkJCSZwcml2LT5kaXNhYmxlX3R4X3Bvd2VyX2NhbCk7CiAJcmV0dXJuIDA7CiAKIGVycjoKQEAgLTYzNCwxOSArMTcwNiw0NiBAQAogCWlmICghcHJpdi0+ZGJnZnMpCiAJCXJldHVybjsKIAorCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY3VycmVudF9zbGVlcF9jb21tYW5kKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX252bSk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9yeF9zdGF0aXN0aWNzKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3R4X3N0YXRpc3RpY3MpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3JhbSk7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9sb2dfZXZlbnQpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdGlvbnMpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY2hhbm5lbHMpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdHVzKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2ludGVycnVwdCk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9xb3MpOworI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2xlZCk7CisjZW5kaWYKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3RoZXJtYWxfdGhyb3R0bGluZyk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9kaXNhYmxlX2h0NDApOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZGF0YSk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfcnhfc3RhdGlzdGljcyk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHhfc3RhdGlzdGljcyk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHJhZmZpY19sb2cpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy5maWxlX3J4X3F1ZXVlKTsKKwlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV90eF9xdWV1ZSk7CisJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfdHhfcG93ZXIpOworCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgIT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpIHsKKwkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgorCQkJZmlsZV91Y29kZV9yeF9zdGF0cyk7CisJCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KKwkJCWZpbGVfdWNvZGVfdHhfc3RhdHMpOworCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCisJCQlmaWxlX3Vjb2RlX2dlbmVyYWxfc3RhdHMpOworCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCisJCQlmaWxlX3NlbnNpdGl2aXR5KTsKKwkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgorCQkJZmlsZV9jaGFpbl9ub2lzZSk7CisJfQorCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZGVidWcpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHkpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfY2hhaW5fbm9pc2UpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfdHhfcG93ZXIpOworCWlmICgoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KSB8fAorCSAgICAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV8zOTQ1KSkKKwkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX3JmX2ZpbGVzLmZpbGVfZGlzYWJsZV90eF9wb3dlcik7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9yZik7CiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9kcnYpOwogCWtmcmVlKHByaXYtPmRiZ2ZzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKaW5kZXggNjUwZTIwYS4uMDI4ZDUwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmgKQEAgLTU2LDE2ICs1NiwxOSBAQAogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWJnX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2Fnbl9jZmc7Ci1leHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnOwotZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGhfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmFnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZzsKIGV4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfM2Fnbl9jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ25fY2ZnOwogCitzdHJ1Y3QgaXdsX3R4X3F1ZXVlOworCiAvKiBzaGFyZWQgc3RydWN0dXJlcyBmcm9tIGl3bC01MDAwLmMgKi8KIGV4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsNTBfbW9kX3BhcmFtczsKIGV4dGVybiBzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wczsKK2V4dGVybiBzdHJ1Y3QgaXdsX3Vjb2RlX29wcyBpd2w1MDAwX3Vjb2RlOwogZXh0ZXJuIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYjsKIGV4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZDsKIGV4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlsczsKQEAgLTc4LDkgKzgxLDM3IEBACiAJCQkJICAgIF9fbGUzMiAqdHhfZmxhZ3MpOwogZXh0ZXJuIGludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCk7CitleHRlcm4gaW50IGl3bDUwMDBfYXBtX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfYXBtX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsNTAwMF9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHUxNiBpd2w1MDAwX2VlcHJvbV9jYWxpYl92ZXJzaW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gY29uc3QgdTggKml3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIoY29uc3Qgc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzaXplX3Qgb2Zmc2V0KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfdHhxX3VwZGF0ZV9ieXRlX2NudF90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCQkgICAgdTE2IGJ5dGVfY250KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfdHhxX2ludmFsX2J5dGVfY250X3RibChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gaW50IGl3bDUwMDBfbG9hZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDUwMDBfYWxpdmVfbm90aWZ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w1MDAwX3R4cV9hZ2dfZW5hYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCwKKwkJCSAgIGludCB0eF9maWZvLCBpbnQgc3RhX2lkLCBpbnQgdGlkLCB1MTYgc3NuX2lkeCk7CitleHRlcm4gaW50IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IHR4cV9pZCwKKwkJCSAgICB1MTYgc3NuX2lkeCwgdTggdHhfZmlmbyk7CitleHRlcm4gdm9pZCBpd2w1MDAwX3R4cV9zZXRfc2NoZWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgbWFzayk7CitleHRlcm4gdm9pZCBpd2w1MDAwX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2w1MDAwX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpOworZXh0ZXJuIGludCBpd2w1MDAwX3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDUwMDBfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAogLyogQ1QtS0lMTCBjb25zdGFudHMgKi8KLSNkZWZpbmUgQ1RfS0lMTF9USFJFU0hPTEQJMTEwIC8qIGluIENlbHNpdXMgKi8KKyNkZWZpbmUgQ1RfS0lMTF9USFJFU0hPTERfTEVHQUNZICAgMTEwIC8qIGluIENlbHNpdXMgKi8KKyNkZWZpbmUgQ1RfS0lMTF9USFJFU0hPTEQJICAgMTE0IC8qIGluIENlbHNpdXMgKi8KKyNkZWZpbmUgQ1RfS0lMTF9FWElUX1RIUkVTSE9MRCAgICAgOTUgIC8qIGluIENlbHNpdXMgKi8KIAogLyogRGVmYXVsdCBub2lzZSBsZXZlbCB0byByZXBvcnQgd2hlbiBub2lzZSBtZWFzdXJlbWVudCBpcyBub3QgYXZhaWxhYmxlLgogICogICBUaGlzIG1heSBiZSBiZWNhdXNlIHdlJ3JlOgpAQCAtMTE5LDYgKzE1MCwzMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKKy8qIGRlZmluZWQgYmVsb3cgKi8KK3N0cnVjdCBpd2xfZGV2aWNlX2NtZDsKKworc3RydWN0IGl3bF9jbWRfbWV0YSB7CisJLyogb25seSBmb3IgU1lOQyBjb21tYW5kcywgaWZmIHRoZSByZXBseSBza2IgaXMgd2FudGVkICovCisJc3RydWN0IGl3bF9ob3N0X2NtZCAqc291cmNlOworCS8qCisJICogb25seSBmb3IgQVNZTkMgY29tbWFuZHMKKwkgKiAod2hpY2ggaXMgc29tZXdoYXQgc3R1cGlkIC0tIGxvb2sgYXQgaXdsLXN0YS5jIGZvciBpbnN0YW5jZQorCSAqIHdoaWNoIGR1cGxpY2F0ZXMgYSBidW5jaCBvZiBjb2RlIGJlY2F1c2UgdGhlIGNhbGxiYWNrIGlzbid0CisJICogaW52b2tlZCBmb3IgU1lOQyBjb21tYW5kcywgaWYgaXQgd2VyZSBhbmQgaXRzIHJlc3VsdCBwYXNzZWQKKwkgKiB0aHJvdWdoIGl0IHdvdWxkIGJlIHNpbXBsZXIuLi4pCisJICovCisJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQsCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiBUaGUgQ01EX1NJWkVfSFVHRSBmbGFnIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZAorCSAqIHN0cnVjdHVyZSBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhcmVkIHF1ZXVlIG1lbW9yeS4gKi8KKwl1MzIgZmxhZ3M7CisKKwlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpCisJREVDTEFSRV9QQ0lfVU5NQVBfTEVOKGxlbikKK307CisKIC8qCiAgKiBHZW5lcmljIHF1ZXVlIHN0cnVjdHVyZQogICoKQEAgLTE0Niw3ICsyMDIsOCBAQAogICogc3RydWN0IGl3bF90eF9xdWV1ZSAtIFR4IFF1ZXVlIGZvciBETUEKICAqIEBxOiBnZW5lcmljIFJ4L1R4IHF1ZXVlIGRlc2NyaXB0b3IKICAqIEBiZDogYmFzZSBvZiBjaXJjdWxhciBidWZmZXIgb2YgVEZEcwotICogQGNtZDogYXJyYXkgb2YgY29tbWFuZC9UeCBidWZmZXJzCisgKiBAY21kOiBhcnJheSBvZiBjb21tYW5kL1RYIGJ1ZmZlciBwb2ludGVycworICogQG1ldGE6IGFycmF5IG9mIG1ldGEgZGF0YSBmb3IgZWFjaCBjb21tYW5kL3R4IGJ1ZmZlcgogICogQGRtYV9hZGRyX2NtZDogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQvdHggYnVmZmVyIGFycmF5CiAgKiBAdHhiOiBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhCiAgKiBAbmVlZF91cGRhdGU6IGluZGljYXRlcyBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4CkBAIC0xNjEsNyArMjE4LDggQEAKIHN0cnVjdCBpd2xfdHhfcXVldWUgewogCXN0cnVjdCBpd2xfcXVldWUgcTsKIAl2b2lkICp0ZmRzOwotCXN0cnVjdCBpd2xfY21kICpjbWRbVEZEX1RYX0NNRF9TTE9UU107CisJc3RydWN0IGl3bF9kZXZpY2VfY21kICoqY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm1ldGE7CiAJc3RydWN0IGl3bF90eF9pbmZvICp0eGI7CiAJdTggbmVlZF91cGRhdGU7CiAJdTggc2NoZWRfcmV0cnk7CkBAIC0yMTksOCArMjc3LDggQEAKIAlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnZF9pbmZvIHRnZDsKIAlzdHJ1Y3QgaXdsNDk2NV9jaGFubmVsX3RnaF9pbmZvIHRnaDsKIAlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGVlcHJvbTsJLyogRUVQUk9NIHJlZ3VsYXRvcnkgbGltaXQgKi8KLQlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGZhdF9lZXByb207CS8qIEVFUFJPTSByZWd1bGF0b3J5IGxpbWl0IGZvcgotCQkJCQkJICogRkFUIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGh0NDBfZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCBmb3IKKwkJCQkJCSAqIEhUNDAgY2hhbm5lbCAqLwogCiAJdTggY2hhbm5lbDsJICAvKiBjaGFubmVsIG51bWJlciAqLwogCXU4IGZsYWdzOwkgIC8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwpAQCAtMjMzLDEzICsyOTEsMTMgQEAKIAl1OCBiYW5kX2luZGV4OwkgIC8qIDAtNCwgbWFwcyBjaGFubmVsIHRvIGJhbmQxLzIvMy80LzUgKi8KIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAKLQkvKiBGQVQgY2hhbm5lbCBpbmZvICovCi0JczggZmF0X21heF9wb3dlcl9hdmc7CS8qIChkQm0pIHJlZ3VsLiBlZXByb20sIG5vcm1hbCBUeCwgYW55IHJhdGUgKi8KLQlzOCBmYXRfY3Vycl90eHBvdzsJLyogKGRCbSkgcmVndWxhdG9yeS9zcGVjdHJ1bS91c2VyIChub3QgaC93KSAqLwotCXM4IGZhdF9taW5fcG93ZXI7CS8qIGFsd2F5cyAwICovCi0JczggZmF0X3NjYW5fcG93ZXI7CS8qIChkQm0pIGVlcHJvbSwgZGlyZWN0IHNjYW5zLCBhbnkgcmF0ZSAqLwotCXU4IGZhdF9mbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwotCXU4IGZhdF9leHRlbnNpb25fY2hhbm5lbDsgLyogSFRfSUVfRVhUX0NIQU5ORUxfKiAqLworCS8qIEhUNDAgY2hhbm5lbCBpbmZvICovCisJczggaHQ0MF9tYXhfcG93ZXJfYXZnOwkvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBub3JtYWwgVHgsIGFueSByYXRlICovCisJczggaHQ0MF9jdXJyX3R4cG93OwkvKiAoZEJtKSByZWd1bGF0b3J5L3NwZWN0cnVtL3VzZXIgKG5vdCBoL3cpICovCisJczggaHQ0MF9taW5fcG93ZXI7CS8qIGFsd2F5cyAwICovCisJczggaHQ0MF9zY2FuX3Bvd2VyOwkvKiAoZEJtKSBlZXByb20sIGRpcmVjdCBzY2FucywgYW55IHJhdGUgKi8KKwl1OCBodDQwX2ZsYWdzOwkJLyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCisJdTggaHQ0MF9leHRlbnNpb25fY2hhbm5lbDsgLyogSFRfSUVfRVhUX0NIQU5ORUxfKiAqLwogCiAJLyogUmFkaW8vRFNQIGdhaW4gc2V0dGluZ3MgZm9yIGVhY2ggIm5vcm1hbCIgZGF0YSBUeCByYXRlLgogCSAqIFRoZXNlIGluY2x1ZGUsIGluIGFkZGl0aW9uIHRvIFJGIGFuZCBEU1AgZ2FpbiwgYSBmZXcgZmllbGRzIGZvcgpAQCAtMjk4LDM1ICszNTYsMTYgQEAKIAlDTURfV0FOVF9TS0IgPSAoMSA8PCAyKSwKIH07CiAKLXN0cnVjdCBpd2xfY21kOwotc3RydWN0IGl3bF9wcml2OwotCi1zdHJ1Y3QgaXdsX2NtZF9tZXRhIHsKLQlzdHJ1Y3QgaXdsX2NtZF9tZXRhICpzb3VyY2U7Ci0JdW5pb24gewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHU7Ci0KLQkvKiBUaGUgQ01EX1NJWkVfSFVHRSBmbGFnIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tbWFuZAotCSAqIHN0cnVjdHVyZSBpcyBzdG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgc2hhcmVkIHF1ZXVlIG1lbW9yeS4gKi8KLQl1MzIgZmxhZ3M7Ci0JREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKQotCURFQ0xBUkVfUENJX1VOTUFQX0xFTihsZW4pCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBJV0xfQ01EX01BWF9QQVlMT0FEIDMyMAogCiAvKioKLSAqIHN0cnVjdCBpd2xfY21kCisgKiBzdHJ1Y3QgaXdsX2RldmljZV9jbWQKICAqCiAgKiBGb3IgYWxsb2NhdGlvbiBvZiB0aGUgY29tbWFuZCBhbmQgdHggcXVldWVzLCB0aGlzIGVzdGFibGlzaGVzIHRoZSBvdmVyYWxsCiAgKiBzaXplIG9mIHRoZSBsYXJnZXN0IGNvbW1hbmQgd2Ugc2VuZCB0byB1Q29kZSwgZXhjZXB0IGZvciBhIHNjYW4gY29tbWFuZAogICogKHdoaWNoIGlzIHJlbGF0aXZlbHkgaHVnZTsgc3BhY2UgaXMgYWxsb2NhdGVkIHNlcGFyYXRlbHkpLgogICovCi1zdHJ1Y3QgaXdsX2NtZCB7Ci0Jc3RydWN0IGl3bF9jbWRfbWV0YSBtZXRhOwkvKiBkcml2ZXIgZGF0YSAqLworc3RydWN0IGl3bF9kZXZpY2VfY21kIHsKIAlzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIgaGRyOwkvKiB1Q29kZSBBUEkgKi8KIAl1bmlvbiB7CiAJCXUzMiBmbGFnczsKQEAgLTMzOCwxNyArMzc3LDIwIEBACiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY21kOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNkZWZpbmUgVEZEX01BWF9QQVlMT0FEX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXdsX2RldmljZV9jbWQpKQorCiAKIHN0cnVjdCBpd2xfaG9zdF9jbWQgewotCXU4IGlkOwotCXUxNiBsZW47Ci0Jc3RydWN0IGl3bF9jbWRfbWV0YSBtZXRhOwogCWNvbnN0IHZvaWQgKmRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnJlcGx5X3NrYjsKKwl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl1MzIgZmxhZ3M7CisJdTE2IGxlbjsKKwl1OCBpZDsKIH07CiAKLSNkZWZpbmUgVEZEX01BWF9QQVlMT0FEX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9jbWRfbWV0YSkpCi0KIC8qCiAgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwogICovCkBAIC00NDksMjMgKzQ5MSwyNSBAQAogfTsKIAogI2RlZmluZSBDRkdfSFRfUlhfQU1QRFVfRkFDVE9SX0RFRiAgKDB4MykKLSNkZWZpbmUgQ0ZHX0hUX01QRFVfREVOU0lUWV8yVVNFQyAgICgweDUpCi0jZGVmaW5lIENGR19IVF9NUERVX0RFTlNJVFlfREVGIENGR19IVF9NUERVX0RFTlNJVFlfMlVTRUMKKworLyoKKyAqIE1heGltYWwgTVBEVSBkZW5zaXR5IGZvciBUWCBhZ2dyZWdhdGlvbgorICogNCAtIDJ1cyBkZW5zaXR5CisgKiA1IC0gNHVzIGRlbnNpdHkKKyAqIDYgLSA4dXMgZGVuc2l0eQorICogNyAtIDE2dXMgZGVuc2l0eQorICovCisjZGVmaW5lIENGR19IVF9NUERVX0RFTlNJVFlfNFVTRUMgICAoMHg1KQorI2RlZmluZSBDRkdfSFRfTVBEVV9ERU5TSVRZX0RFRiBDRkdfSFRfTVBEVV9ERU5TSVRZXzRVU0VDCiAKIHN0cnVjdCBpd2xfaHRfaW5mbyB7CiAJLyogc2VsZiBjb25maWd1cmF0aW9uIGRhdGEgKi8KIAl1OCBpc19odDsKIAl1OCBzdXBwb3J0ZWRfY2hhbl93aWR0aDsKIAl1OCBzbV9wczsKLQl1OCBpc19ncmVlbl9maWVsZDsKLQl1OCBzZ2Y7CQkJLyogSFRfU0hPUlRfR0lfKiBzaG9ydCBndWFyZCBpbnRlcnZhbCAqLwotCXU4IG1heF9hbXNkdV9zaXplOwotCXU4IGFtcGR1X2ZhY3RvcjsKLQl1OCBtcGR1X2RlbnNpdHk7CiAJc3RydWN0IGllZWU4MDIxMV9tY3NfaW5mbyBtY3M7CiAJLyogQlNTIHJlbGF0ZWQgZGF0YSAqLwogCXU4IGV4dGVuc2lvbl9jaGFuX29mZnNldDsKLQl1OCB0eF9jaGFuX3dpZHRoOwogCXU4IGh0X3Byb3RlY3Rpb247CiAJdTggbm9uX0dGX1NUQV9wcmVzZW50OwogfTsKQEAgLTUyNSwxNSArNTY5LDI5IEBACiB9OwogCiAvKiB1Q29kZSBmaWxlIGxheW91dCAqLwotc3RydWN0IGl3bF91Y29kZSB7Ci0JX19sZTMyIHZlcjsJCS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KLQlfX2xlMzIgaW5zdF9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBkYXRhX3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgZGF0YSAqLwotCV9fbGUzMiBpbml0X3NpemU7CS8qIGJ5dGVzIG9mIGluaXRpYWxpemF0aW9uIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBpbml0X2RhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCV9fbGUzMiBib290X3NpemU7CS8qIGJ5dGVzIG9mIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KLQl1OCBkYXRhWzBdOwkJLyogZGF0YSBpbiBzYW1lIG9yZGVyIGFzICJzaXplIiBlbGVtZW50cyAqLworc3RydWN0IGl3bF91Y29kZV9oZWFkZXIgeworCV9fbGUzMiB2ZXI7CS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgaW5zdF9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGNvZGUgKi8KKwkJCV9fbGUzMiBkYXRhX3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgZGF0YSAqLworCQkJX19sZTMyIGluaXRfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdCBjb2RlICovCisJCQlfX2xlMzIgaW5pdF9kYXRhX3NpemU7CS8qIGJ5dGVzIG9mIGluaXQgZGF0YSAqLworCQkJX19sZTMyIGJvb3Rfc2l6ZTsJLyogYnl0ZXMgb2YgYm9vdHN0cmFwIGNvZGUgKi8KKwkJCXU4IGRhdGFbMF07CQkvKiBpbiBzYW1lIG9yZGVyIGFzIHNpemVzICovCisJCX0gdjE7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgYnVpbGQ7CQkvKiBidWlsZCBudW1iZXIgKi8KKwkJCV9fbGUzMiBpbnN0X3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgY29kZSAqLworCQkJX19sZTMyIGRhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgcnVudGltZSBkYXRhICovCisJCQlfX2xlMzIgaW5pdF9zaXplOwkvKiBieXRlcyBvZiBpbml0IGNvZGUgKi8KKwkJCV9fbGUzMiBpbml0X2RhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdCBkYXRhICovCisJCQlfX2xlMzIgYm9vdF9zaXplOwkvKiBieXRlcyBvZiBib290c3RyYXAgY29kZSAqLworCQkJdTggZGF0YVswXTsJCS8qIGluIHNhbWUgb3JkZXIgYXMgc2l6ZXMgKi8KKwkJfSB2MjsKKwl9IHU7CiB9OworI2RlZmluZSBVQ09ERV9IRUFERVJfU0laRSh2ZXIpICgodmVyKSA9PSAxID8gMjQgOiAyOCkKIAogc3RydWN0IGl3bDQ5NjVfaWJzc19zZXEgewogCXU4IG1hY1tFVEhfQUxFTl07CkBAIC01ODUsNyArNjQzLDcgQEAKICAqIEByeF93cnRfcHRyX3JlZzogRkh7Mzl9X1JTQ1NSX0NITkwwX1dQVFIKICAqIEBtYXhfc3RhdGlvbnM6CiAgKiBAYmNhc3Rfc3RhX2lkOgotICogQGZhdF9jaGFubmVsOiBpcyA0ME1IeiB3aWR0aCBwb3NzaWJsZSBpbiBiYW5kIDIuNAorICogQGh0NDBfY2hhbm5lbDogaXMgNDBNSHogd2lkdGggcG9zc2libGUgaW4gYmFuZCAyLjQKICAqIEJJVChJRUVFODAyMTFfQkFORF81R0haKSBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWikKICAqIEBzd19jcnlwdG86IDAgZm9yIGh3LCAxIGZvciBzdwogICogQG1heF94eHhfc2l6ZTogZm9yIHVjb2RlIHVzZXMKQEAgLTYwOSwxMiArNjY3LDE0IEBACiAJdTMyIG1heF9wa3Rfc2l6ZTsKIAl1OCAgbWF4X3N0YXRpb25zOwogCXU4ICBiY2FzdF9zdGFfaWQ7Ci0JdTggZmF0X2NoYW5uZWw7Ci0JdTggc3dfY3J5cHRvOworCXU4ICBodDQwX2NoYW5uZWw7CisJdTggIG1heF9iZWFjb25faXRydmw7CS8qIGluIDEwMjQgbXMgKi8KIAl1MzIgbWF4X2luc3Rfc2l6ZTsKIAl1MzIgbWF4X2RhdGFfc2l6ZTsKIAl1MzIgbWF4X2JzbV9zaXplOwogCXUzMiBjdF9raWxsX3RocmVzaG9sZDsgLyogdmFsdWUgaW4gaHctZGVwZW5kZW50IHVuaXRzICovCisJdTMyIGN0X2tpbGxfZXhpdF90aHJlc2hvbGQ7IC8qIHZhbHVlIGluIGh3LWRlcGVuZGVudCB1bml0cyAqLworCQkJCSAgICAvKiBmb3IgMTAwMCwgNjAwMCBzZXJpZXMgYW5kIHVwICovCiAJdTMyIGNhbGliX2luaXRfY2ZnOwogCWNvbnN0IHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzICpzZW5zOwogfTsKQEAgLTY2Niw5ICs3MjYsNiBAQAogCXNpemVfdCBzaXplOwogfTsKIAotI2RlZmluZSBIVF9TSE9SVF9HSV8yME1IWgkoMSA8PCAwKQotI2RlZmluZSBIVF9TSE9SVF9HSV80ME1IWgkoMSA8PCAxKQotCiAjZGVmaW5lIElXTF9DSEFOTkVMX1dJRFRIXzIwTUhaICAgMAogI2RlZmluZSBJV0xfQ0hBTk5FTF9XSURUSF80ME1IWiAgIDEKIApAQCAtODA5LDYgKzg2Niw4IEBACiAjZGVmaW5lCUVFUFJPTV9TRU1fVElNRU9VVCAxMAkJLyogbWlsbGlzZWNvbmRzICovCiAjZGVmaW5lIEVFUFJPTV9TRU1fUkVUUllfTElNSVQgMTAwMAkvKiBudW1iZXIgb2YgYXR0ZW1wdHMgKG5vdCB0aW1lKSAqLwogCisjZGVmaW5lIElXTF9UUkFGRklDX0VOVFJJRVMJKDI1NikKKyNkZWZpbmUgSVdMX1RSQUZGSUNfRU5UUllfU0laRSAgKDY0KQogCiBlbnVtIHsKIAlNRUFTVVJFTUVOVF9SRUFEWSA9ICgxIDw8IDApLApAQCAtODIwLDYgKzg3OSwzMCBAQAogCU5WTV9ERVZJQ0VfVFlQRV9PVFAsCiB9OwogCisvKgorICogVHdvIHR5cGVzIG9mIE9UUCBtZW1vcnkgYWNjZXNzIG1vZGVzCisgKiAgIElXTF9PVFBfQUNDRVNTX0FCU09MVVRFIC0gYWJzb2x1dGUgYWRkcmVzcyBtb2RlLAorICogCQkJICAgICAgICBiYXNlZCBvbiBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzc2luZworICogICBJV0xfT1RQX0FDQ0VTU19SRUxBVElWRSAtIHJlbGF0aXZlIGFkZHJlc3MgbW9kZSwKKyAqIAkJCSAgICAgICBiYXNlZCBvbiBsb2dpY2FsIG1lbW9yeSBhZGRyZXNzaW5nCisgKi8KK2VudW0gaXdsX2FjY2Vzc19tb2RlIHsKKwlJV0xfT1RQX0FDQ0VTU19BQlNPTFVURSwKKwlJV0xfT1RQX0FDQ0VTU19SRUxBVElWRSwKK307CisKKy8qKgorICogZW51bSBpd2xfcGFfdHlwZSAtIFBvd2VyIEFtcGxpZmllciB0eXBlCisgKiBASVdMX1BBX1NZU1RFTTogIGJhc2VkIG9uIHVDb2RlIGNvbmZpZ3VyYXRpb24KKyAqIEBJV0xfUEFfSFlCUklEOiB1c2UgYm90aCBJbnRlcm5hbCBhbmQgZXh0ZXJuYWwgUEEKKyAqIEBJV0xfUEFfSU5URVJOQUw6IHVzZSBJbnRlcm5hbCBvbmx5CisgKi8KK2VudW0gaXdsX3BhX3R5cGUgeworCUlXTF9QQV9TWVNURU0gPSAwLAorCUlXTF9QQV9IWUJSSUQgPSAxLAorCUlXTF9QQV9JTlRFUk5BTCA9IDIsCit9OworCiAvKiBpbnRlcnJ1cHQgc3RhdGlzdGljcyAqLwogc3RydWN0IGlzcl9zdGF0aXN0aWNzIHsKIAl1MzIgaHc7CkBAIC04MzYsNiArOTE5LDQ4IEBACiAJdTMyIHVuaGFuZGxlZDsKIH07CiAKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCisvKiBtYW5hZ2VtZW50IHN0YXRpc3RpY3MgKi8KK2VudW0gaXdsX21nbXRfc3RhdHMgeworCU1BTkFHRU1FTlRfQVNTT0NfUkVRID0gMCwKKwlNQU5BR0VNRU5UX0FTU09DX1JFU1AsCisJTUFOQUdFTUVOVF9SRUFTU09DX1JFUSwKKwlNQU5BR0VNRU5UX1JFQVNTT0NfUkVTUCwKKwlNQU5BR0VNRU5UX1BST0JFX1JFUSwKKwlNQU5BR0VNRU5UX1BST0JFX1JFU1AsCisJTUFOQUdFTUVOVF9CRUFDT04sCisJTUFOQUdFTUVOVF9BVElNLAorCU1BTkFHRU1FTlRfRElTQVNTT0MsCisJTUFOQUdFTUVOVF9BVVRILAorCU1BTkFHRU1FTlRfREVBVVRILAorCU1BTkFHRU1FTlRfQUNUSU9OLAorCU1BTkFHRU1FTlRfTUFYLAorfTsKKy8qIGNvbnRyb2wgc3RhdGlzdGljcyAqLworZW51bSBpd2xfY3RybF9zdGF0cyB7CisJQ09OVFJPTF9CQUNLX1JFUSA9ICAwLAorCUNPTlRST0xfQkFDSywKKwlDT05UUk9MX1BTUE9MTCwKKwlDT05UUk9MX1JUUywKKwlDT05UUk9MX0NUUywKKwlDT05UUk9MX0FDSywKKwlDT05UUk9MX0NGRU5ELAorCUNPTlRST0xfQ0ZFTkRBQ0ssCisJQ09OVFJPTF9NQVgsCit9OworCitzdHJ1Y3QgdHJhZmZpY19zdGF0cyB7CisJdTMyIG1nbXRbTUFOQUdFTUVOVF9NQVhdOworCXUzMiBjdHJsW0NPTlRST0xfTUFYXTsKKwl1MzIgZGF0YV9jbnQ7CisJdTY0IGRhdGFfYnl0ZXM7Cit9OworI2Vsc2UKK3N0cnVjdCB0cmFmZmljX3N0YXRzIHsKKwl1NjQgZGF0YV9ieXRlczsKK307CisjZW5kaWYKKwogI2RlZmluZSBJV0xfTUFYX05VTV9RVUVVRVMJMjAgLyogRklYTUU6IGRvIGR5bmFtaWMgYWxsb2NhdGlvbiAqLwogCiBzdHJ1Y3QgaXdsX3ByaXYgewpAQCAtOTgxLDE1ICsxMTA2LDE0IEBACiAJaW50IGxhc3Rfcnhfbm9pc2U7CS8qIEZyb20gYmVhY29uIHN0YXRpc3RpY3MgKi8KIAogCS8qIGNvdW50cyBtZ210LCBjdGwsIGFuZCBkYXRhIHBhY2tldHMgKi8KLQlzdHJ1Y3QgdHJhZmZpY19zdGF0cyB7Ci0JCXUzMiBjbnQ7Ci0JCXU2NCBieXRlczsKLQl9IHR4X3N0YXRzWzNdLCByeF9zdGF0c1szXTsKKwlzdHJ1Y3QgdHJhZmZpY19zdGF0cyB0eF9zdGF0czsKKwlzdHJ1Y3QgdHJhZmZpY19zdGF0cyByeF9zdGF0czsKIAogCS8qIGNvdW50cyBpbnRlcnJ1cHRzICovCiAJc3RydWN0IGlzcl9zdGF0aXN0aWNzIGlzcl9zdGF0czsKIAogCXN0cnVjdCBpd2xfcG93ZXJfbWdyIHBvd2VyX2RhdGE7CisJc3RydWN0IGl3bF90dF9tZ210IHRoZXJtYWxfdGhyb3R0bGU7CiAKIAlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfc3RhdGlzdGljc190aW1lOwpAQCAtOTk3LDcgKzExMjEsNiBAQAogCS8qIGNvbnRleHQgaW5mb3JtYXRpb24gKi8KIAl1MTYgcmF0ZXNfbWFzazsKIAotCXUzMiBwb3dlcl9tb2RlOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1MTYgcnRzX3RocmVzaG9sZDsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CkBAIC0xMDQ3LDcgKzExNzAsNyBAQAogCXN0cnVjdCBpd2xfaHdfcGFyYW1zIGh3X3BhcmFtczsKIAogCS8qIElOVCBJQ1QgVGFibGUgKi8KLQl1MzIgKmljdF90Ymw7CisJX19sZTMyICppY3RfdGJsOwogCWRtYV9hZGRyX3QgaWN0X3RibF9kbWE7CiAJZG1hX2FkZHJfdCBhbGlnbmVkX2ljdF90YmxfZG1hOwogCWludCBpY3RfaW5kZXg7CkBAIC0xMDc2LDYgKzExOTksOSBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXBvcnRfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVxdWVzdF9zY2FuOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fdXBkYXRlOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0dF93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjdF9lbnRlcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3RfZXhpdDsKIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKIApAQCAtMTA4OSwxNiArMTIxNSwyMiBAQAogCiAJLyogVFggUG93ZXIgKi8KIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKLQlzOCB0eF9wb3dlcl9jaGFubmVsX2xtdDsKKwlzOCB0eF9wb3dlcl9kZXZpY2VfbG10OwogCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCS8qIGRlYnVnZ2luZyBpbmZvICovCi0JdTMyIGRlYnVnX2xldmVsOworCXUzMiBkZWJ1Z19sZXZlbDsgLyogcGVyIGRldmljZSBkZWJ1Z2dpbmcgd2lsbCBvdmVycmlkZSBnbG9iYWwKKwkJCSAgICBpd2xfZGVidWdfbGV2ZWwgaWYgc2V0ICovCiAJdTMyIGZyYW1lY250X3RvX3VzOwogCWF0b21pY190IHJlc3RyaWN0X3JlZmNudDsKKwlib29sIGRpc2FibGVfaHQ0MDsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCiAJLyogZGVidWdmcyAqLworCXUxNiB0eF90cmFmZmljX2lkeDsKKwl1MTYgcnhfdHJhZmZpY19pZHg7CisJdTggKnR4X3RyYWZmaWM7CisJdTggKnJ4X3RyYWZmaWM7CiAJc3RydWN0IGl3bF9kZWJ1Z2ZzICpkYmdmczsKICNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTICovCiAjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KQEAgLTExMzAsOCArMTI2MiwyNyBAQAogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIGNvbnN0IGNoYXIgKml3bF9nZXRfdHhfZmFpbF9yZWFzb24odTMyIHN0YXR1cyk7CisvKgorICogaXdsX2dldF9kZWJ1Z19sZXZlbDogUmV0dXJuIGFjdGl2ZSBkZWJ1ZyBsZXZlbCBmb3IgZGV2aWNlCisgKgorICogVXNpbmcgc3lzZnMgaXQgaXMgcG9zc2libGUgdG8gc2V0IHBlciBkZXZpY2UgZGVidWcgbGV2ZWwuIFRoaXMgZGVidWcKKyAqIGxldmVsIHdpbGwgYmUgdXNlZCBpZiBzZXQsIG90aGVyd2lzZSB0aGUgZ2xvYmFsIGRlYnVnIGxldmVsIHdoaWNoIGNhbiBiZQorICogc2V0IHZpYSBtb2R1bGUgcGFyYW1ldGVyIGlzIHVzZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIGl3bF9nZXRfZGVidWdfbGV2ZWwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCkKKwkJcmV0dXJuIHByaXYtPmRlYnVnX2xldmVsOworCWVsc2UKKwkJcmV0dXJuIGl3bF9kZWJ1Z19sZXZlbDsKK30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKml3bF9nZXRfdHhfZmFpbF9yZWFzb24odTMyIHN0YXR1cykgeyByZXR1cm4gIiI7IH0KKworc3RhdGljIGlubGluZSB1MzIgaXdsX2dldF9kZWJ1Z19sZXZlbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuIGl3bF9kZWJ1Z19sZXZlbDsKK30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKaW5kZXggN2Q3NTU0YS4uM2QyYjkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMKQEAgLTEyNywxNCArMTI3LDg2IEBACiAJMTQ1LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQogfTsKIAotc3RhdGljIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF82W10gPSB7ICAgICAgIC8qIDIuNCBGQVQgY2hhbm5lbCAqLworc3RhdGljIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF82W10gPSB7ICAgICAgIC8qIDIuNCBodDQwIGNoYW5uZWwgKi8KIAkxLCAyLCAzLCA0LCA1LCA2LCA3CiB9OwogCi1zdGF0aWMgY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzdbXSA9IHsgICAgICAgLyogNS4yIEZBVCBjaGFubmVsICovCitzdGF0aWMgY29uc3QgdTggaXdsX2VlcHJvbV9iYW5kXzdbXSA9IHsgICAgICAgLyogNS4yIGh0NDAgY2hhbm5lbCAqLwogCTM2LCA0NCwgNTIsIDYwLCAxMDAsIDEwOCwgMTE2LCAxMjQsIDEzMiwgMTQ5LCAxNTcKIH07CiAKKy8qKgorICogc3RydWN0IGl3bF90eHB3cl9zZWN0aW9uOiBlZXByb20gc2VjdGlvbiBpbmZvcm1hdGlvbgorICogQG9mZnNldDogaW5kaXJlY3QgYWRkcmVzcyBpbnRvIGVlcHJvbSBpbWFnZQorICogQGNvdW50OiBudW1iZXIgb2YgInN0cnVjdCBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyIiBpbiB0aGlzIHNlY3Rpb24KKyAqIEBiYW5kOiBiYW5kIHR5cGUgZm9yIHRoZSBzZWN0aW9uCisgKiBAaXNfY29tbW9uIC0gdHJ1ZTogY29tbW9uIHNlY3Rpb24sIGZhbHNlOiBjaGFubmVsIHNlY3Rpb24KKyAqIEBpc19jY2sgLSB0cnVlOiBjY2sgc2VjdGlvbiwgZmFsc2U6IG5vdCBjY2sgc2VjdGlvbgorICogQGlzX2h0XzQwIC0gdHJ1ZTogYWxsIGNoYW5uZWwgaW4gdGhlIHNlY3Rpb24gYXJlIEhUNDAgY2hhbm5lbCwKKyAqIAkgICAgICAgZmFsc2U6IGxlZ2FjeSBvciBIVCAyMCBNSHoKKyAqCSAgICAgICBpZ25vcmUgaWYgaXQgaXMgY29tbW9uIHNlY3Rpb24KKyAqIEBpd2xfZWVwcm9tX3NlY3Rpb25fY2hhbm5lbDogY2hhbm5lbCBhcnJheSBpbiB0aGUgc2VjdGlvbiwKKyAqCSAgICAgICBpZ25vcmUgaWYgY29tbW9uIHNlY3Rpb24KKyAqLworc3RydWN0IGl3bF90eHB3cl9zZWN0aW9uIHsKKwl1MzIgb2Zmc2V0OworCXU4IGNvdW50OworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwlib29sIGlzX2NvbW1vbjsKKwlib29sIGlzX2NjazsKKwlib29sIGlzX2h0NDA7CisJdTggaXdsX2VlcHJvbV9zZWN0aW9uX2NoYW5uZWxbRUVQUk9NX01BWF9UWFBPV0VSX1NFQ1RJT05fRUxFTUVOVFNdOworfTsKKworLyoqCisgKiBzZWN0aW9uIDEgLSAzIGFyZSByZWd1bGF0b3J5IHR4IHBvd2VyIGFwcGx5IHRvIGFsbCBjaGFubmVscyBiYXNlZCBvbgorICogICAgbW9kdWxhdGlvbjogQ0NLLCBPRkRNCisgKiAgICBCYW5kOiAyLjRHSHosIDUuMkdIegorICogc2VjdGlvbiA0IC0gMTAgYXJlIHJlZ3VsYXRvcnkgdHggcG93ZXIgYXBwbHkgdG8gc3BlY2lmaWVkIGNoYW5uZWxzCisgKiAgICBGb3IgZXhhbXBsZToKKyAqCTFMIC0gQ2hhbm5lbCAxIExlZ2FjeQorICoJMUhUIC0gQ2hhbm5lbCAxIEhUCisgKgkoMSwrMSkgLSBDaGFubmVsIDEgSFQ0MCAiX2Fib3ZlXyIKKyAqCisgKiBTZWN0aW9uIDE6IGFsbCBDQ0sgY2hhbm5lbHMKKyAqIFNlY3Rpb24gMjogYWxsIDIuNCBHSHogT0ZETSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gMzogYWxsIDUuMiBHSHogT0ZETSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gNDogMi40IEdIeiAyME1IeiBjaGFubmVsczogMUwsIDFIVCwgMkwsIDJIVCwgMTBMLCAxMEhULCAxMUwsIDExSFQKKyAqIFNlY3Rpb24gNTogMi40IEdIeiA0ME1IeiBjaGFubmVsczogKDEsKzEpICgyLCsxKSAoNiwrMSkgKDcsKzEpICg5LCsxKQorICogU2VjdGlvbiA2OiA1LjIgR0h6IDIwTUh6IGNoYW5uZWxzOiAzNkwsIDY0TCwgMTAwTCwgMzZIVCwgNjRIVCwgMTAwSFQKKyAqIFNlY3Rpb24gNzogNS4yIEdIeiA0ME1IeiBjaGFubmVsczogKDM2LCsxKSAoNjAsKzEpICgxMDAsKzEpCisgKiBTZWN0aW9uIDg6IDIuNCBHSHogY2hhbm5lbDogMTNMLCAxM0hUCisgKiBTZWN0aW9uIDk6IDIuNCBHSHogY2hhbm5lbDogMTQwTCwgMTQwSFQKKyAqIFNlY3Rpb24gMTA6IDIuNCBHSHogNDBNSHogY2hhbm5lbHM6ICgxMzIsKzEpICAoNDQsKzEpCisgKgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF90eHB3cl9zZWN0aW9uIGVuaGluZm9bXSA9IHsKKwl7IEVFUFJPTV9MQl9DQ0tfMjBfQ09NTU9OLCAxLCBJRUVFODAyMTFfQkFORF8yR0haLCB0cnVlLCB0cnVlLCBmYWxzZSB9LAorCXsgRUVQUk9NX0xCX09GRE1fQ09NTU9OLCAzLCBJRUVFODAyMTFfQkFORF8yR0haLCB0cnVlLCBmYWxzZSwgZmFsc2UgfSwKKwl7IEVFUFJPTV9IQl9PRkRNX0NPTU1PTiwgMywgSUVFRTgwMjExX0JBTkRfNUdIWiwgdHJ1ZSwgZmFsc2UsIGZhbHNlIH0sCisJeyBFRVBST01fTEJfT0ZETV8yMF9CQU5ELCA4LCBJRUVFODAyMTFfQkFORF8yR0haLAorCQlmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQl7MSwgMSwgMiwgMiwgMTAsIDEwLCAxMSwgMTEgfSB9LAorCXsgRUVQUk9NX0xCX09GRE1fSFQ0MF9CQU5ELCA1LCBJRUVFODAyMTFfQkFORF8yR0haLAorCQlmYWxzZSwgZmFsc2UsIHRydWUsCisJCXsgMSwgMiwgNiwgNywgOSB9IH0sCisJeyBFRVBST01fSEJfT0ZETV8yMF9CQU5ELCA2LCBJRUVFODAyMTFfQkFORF81R0haLAorCQlmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQl7IDM2LCA2NCwgMTAwLCAzNiwgNjQsIDEwMCB9IH0sCisJeyBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkQsIDMsIElFRUU4MDIxMV9CQU5EXzVHSFosCisJCWZhbHNlLCBmYWxzZSwgdHJ1ZSwKKwkJeyAzNiwgNjAsIDEwMCB9IH0sCisJeyBFRVBST01fTEJfT0ZETV8yMF9DSEFOTkVMXzEzLCAyLCBJRUVFODAyMTFfQkFORF8yR0haLAorCQlmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQl7IDEzLCAxMyB9IH0sCisJeyBFRVBST01fSEJfT0ZETV8yMF9DSEFOTkVMXzE0MCwgMiwgSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJeyAxNDAsIDE0MCB9IH0sCisJeyBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkRfMSwgMiwgSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJZmFsc2UsIGZhbHNlLCB0cnVlLAorCQl7IDEzMiwgNDQgfSB9LAorfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEVFUFJPTSByZWxhdGVkIGZ1bmN0aW9ucwpAQCAtMTUyLDYgKzIyNCwxOSBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xjb3JlX2VlcHJvbV92ZXJpZnlfc2lnbmF0dXJlKTsKIAorc3RhdGljIHZvaWQgaXdsX3NldF9vdHBfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgZW51bSBpd2xfYWNjZXNzX21vZGUgbW9kZSkKK3sKKwl1MzIgb3RwZ3A7CisKKwlvdHBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX09UUF9HUF9SRUcpOworCWlmIChtb2RlID09IElXTF9PVFBfQUNDRVNTX0FCU09MVVRFKQorCQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9PVFBfR1BfUkVHLAorCQkJCUNTUl9PVFBfR1BfUkVHX09UUF9BQ0NFU1NfTU9ERSk7CisJZWxzZQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfT1RQX0dQX1JFRywKKwkJCQlDU1JfT1RQX0dQX1JFR19PVFBfQUNDRVNTX01PREUpOworfQorCiBzdGF0aWMgaW50IGl3bGNvcmVfZ2V0X252bV90eXBlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgb3RwZ3A7CkBAIC0xNTksNiArMjQ0LDkgQEAKIAogCS8qIE9UUCBvbmx5IHZhbGlkIGZvciBDUC9QUCBhbmQgYWZ0ZXIgKi8KIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV9OT05FOgorCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGhhcmR3YXJlIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKIAljYXNlIENTUl9IV19SRVZfVFlQRV8zOTQ1OgogCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzQ5NjU6CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTMwMDoKQEAgLTI0OSw2ICszMzcsMTI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpd2xfcmVhZF9vdHBfd29yZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBhZGRyLCB1MTYgKmVlcHJvbV9kYXRhKQoreworCWludCByZXQgPSAwOworCXUzMiByOworCXUzMiBvdHBncDsKKworCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKKwkJICAgICBDU1JfRUVQUk9NX1JFR19NU0tfQUREUiAmIChhZGRyIDw8IDEpKTsKKwlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9FRVBST01fUkVHLAorCQkJCSAgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCisJCQkJICBJV0xfRUVQUk9NX0FDQ0VTU19USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlJV0xfRVJSKHByaXYsICJUaW1lIG91dCByZWFkaW5nIE9UUFslZF1cbiIsIGFkZHIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKKwkvKiBjaGVjayBmb3IgRUNDIGVycm9yczogKi8KKwlvdHBncCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX09UUF9HUF9SRUcpOworCWlmIChvdHBncCAmIENTUl9PVFBfR1BfUkVHX0VDQ19VTkNPUlJfU1RBVFVTX01TSykgeworCQkvKiBzdG9wIGluIHRoaXMgY2FzZSAqLworCQkvKiBzZXQgdGhlIHVuY29ycmVjdGFibGUgT1RQIEVDQyBiaXQgZm9yIGFja25vd2xlZGdlbWVudCAqLworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfT1RQX0dQX1JFRywKKwkJCUNTUl9PVFBfR1BfUkVHX0VDQ19VTkNPUlJfU1RBVFVTX01TSyk7CisJCUlXTF9FUlIocHJpdiwgIlVuY29ycmVjdGFibGUgT1RQIEVDQyBlcnJvciwgYWJvcnQgT1RQIHJlYWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKG90cGdwICYgQ1NSX09UUF9HUF9SRUdfRUNDX0NPUlJfU1RBVFVTX01TSykgeworCQkvKiBjb250aW51ZSBpbiB0aGlzIGNhc2UgKi8KKwkJLyogc2V0IHRoZSBjb3JyZWN0YWJsZSBPVFAgRUNDIGJpdCBmb3IgYWNrbm93bGVkZ2VtZW50ICovCisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9PVFBfR1BfUkVHLAorCQkJCUNTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0spOworCQlJV0xfRVJSKHByaXYsICJDb3JyZWN0YWJsZSBPVFAgRUNDIGVycm9yLCBjb250aW51ZSByZWFkXG4iKTsKKwl9CisJKmVlcHJvbV9kYXRhID0gbGUxNl90b19jcHUoKF9fZm9yY2UgX19sZTE2KShyID4+IDE2KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpd2xfaXNfb3RwX2VtcHR5OiBjaGVjayBmb3IgZW1wdHkgT1RQCisgKi8KK3N0YXRpYyBib29sIGl3bF9pc19vdHBfZW1wdHkoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXUxNiBuZXh0X2xpbmtfYWRkciA9IDAsIGxpbmtfdmFsdWU7CisJYm9vbCBpc19lbXB0eSA9IGZhbHNlOworCisJLyogbG9jYXRlIHRoZSBiZWdpbm5pbmcgb2YgT1RQIGxpbmsgbGlzdCAqLworCWlmICghaXdsX3JlYWRfb3RwX3dvcmQocHJpdiwgbmV4dF9saW5rX2FkZHIsICZsaW5rX3ZhbHVlKSkgeworCQlpZiAoIWxpbmtfdmFsdWUpIHsKKwkJCUlXTF9FUlIocHJpdiwgIk9UUCBpcyBlbXB0eVxuIik7CisJCQlpc19lbXB0eSA9IHRydWU7CisJCX0KKwl9IGVsc2UgeworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gcmVhZCBmaXJzdCBibG9jayBvZiBPVFAgbGlzdC5cbiIpOworCQlpc19lbXB0eSA9IHRydWU7CisJfQorCisJcmV0dXJuIGlzX2VtcHR5OworfQorCisKKy8qCisgKiBpd2xfZmluZF9vdHBfaW1hZ2U6IGZpbmQgRUVQUk9NIGltYWdlIGluIE9UUAorICogICBmaW5kaW5nIHRoZSBPVFAgYmxvY2sgdGhhdCBjb250YWlucyB0aGUgRUVQUk9NIGltYWdlLgorICogICB0aGUgbGFzdCB2YWxpZCBibG9jayBvbiB0aGUgbGluayBsaXN0ICh0aGUgYmxvY2sgX2JlZm9yZV8gdGhlIGxhc3QgYmxvY2spCisgKiAgIGlzIHRoZSBibG9jayB3ZSBzaG91bGQgcmVhZCBhbmQgdXNlZCB0byBjb25maWd1cmUgdGhlIGRldmljZS4KKyAqICAgSWYgYWxsIHRoZSBhdmFpbGFibGUgT1RQIGJsb2NrcyBhcmUgZnVsbCwgdGhlIGxhc3QgYmxvY2sgd2lsbCBiZSB0aGUgYmxvY2sKKyAqICAgd2Ugc2hvdWxkIHJlYWQgYW5kIHVzZWQgdG8gY29uZmlndXJlIHRoZSBkZXZpY2UuCisgKiAgIG9ubHkgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBpZiBzaGFkb3cgUkFNIGlzIGRpc2FibGVkCisgKi8KK3N0YXRpYyBpbnQgaXdsX2ZpbmRfb3RwX2ltYWdlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJdTE2ICp2YWxpZGJsb2NrYWRkcikKK3sKKwl1MTYgbmV4dF9saW5rX2FkZHIgPSAwLCBsaW5rX3ZhbHVlID0gMCwgdmFsaWRfYWRkcjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgdXNlZGJsb2NrcyA9IDA7CisKKwkvKiBzZXQgYWRkcmVzc2luZyBtb2RlIHRvIGFic29sdXRlIHRvIHRyYXZlcnNlIHRoZSBsaW5rIGxpc3QgKi8KKwlpd2xfc2V0X290cF9hY2Nlc3MocHJpdiwgSVdMX09UUF9BQ0NFU1NfQUJTT0xVVEUpOworCisJLyogY2hlY2tpbmcgZm9yIGVtcHR5IE9UUCBvciBlcnJvciAqLworCWlmIChpd2xfaXNfb3RwX2VtcHR5KHByaXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogc3RhcnQgdHJhdmVyc2UgbGluayBsaXN0CisJICogdW50aWwgcmVhY2ggdGhlIG1heCBudW1iZXIgb2YgT1RQIGJsb2NrcworCSAqIGRpZmZlcmVudCBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IG51bWJlciBvZiBPVFAgYmxvY2tzCisJICovCisJZG8geworCQkvKiBzYXZlIGN1cnJlbnQgdmFsaWQgYmxvY2sgYWRkcmVzcworCQkgKiBjaGVjayBmb3IgbW9yZSBibG9jayBvbiB0aGUgbGluayBsaXN0CisJCSAqLworCQl2YWxpZF9hZGRyID0gbmV4dF9saW5rX2FkZHI7CisJCW5leHRfbGlua19hZGRyID0gbGlua192YWx1ZTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk9UUCBibG9ja3MgJWQgYWRkciAweCV4XG4iLAorCQkJICAgICAgIHVzZWRibG9ja3MsIG5leHRfbGlua19hZGRyKTsKKwkJaWYgKGl3bF9yZWFkX290cF93b3JkKHByaXYsIG5leHRfbGlua19hZGRyLCAmbGlua192YWx1ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFsaW5rX3ZhbHVlKSB7CisJCQkvKgorCQkJICogcmVhY2ggdGhlIGVuZCBvZiBsaW5rIGxpc3QsCisJCQkgKiBzZXQgYWRkcmVzcyBwb2ludCB0byB0aGUgc3RhcnRpbmcgYWRkcmVzcworCQkJICogb2YgdGhlIGltYWdlCisJCQkgKi8KKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBtb3JlIGluIHRoZSBsaW5rIGxpc3QsIGNvbnRpbnVlICovCisJCXVzZWRibG9ja3MrKzsKKwl9IHdoaWxlICh1c2VkYmxvY2tzIDwgcHJpdi0+Y2ZnLT5tYXhfbGxfaXRlbXMpOworCS8qIE9UUCBmdWxsLCB1c2UgbGFzdCBibG9jayAqLworCUlXTF9ERUJVR19JTkZPKHByaXYsICJPVFAgaXMgZnVsbCwgdXNlIGxhc3QgYmxvY2tcbiIpOworZG9uZToKKwkqdmFsaWRibG9ja2FkZHIgPSB2YWxpZF9hZGRyOworCS8qIHNraXAgZmlyc3QgMiBieXRlcyAobGluayBsaXN0IHBvaW50ZXIpICovCisJKnZhbGlkYmxvY2thZGRyICs9IDI7CisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiBpd2xfZWVwcm9tX2luaXQgLSByZWFkIEVFUFJPTSBjb250ZW50cwogICoKQEAgLTI2MywxNCArNDY5LDE0IEBACiAJaW50IHN6OwogCWludCByZXQ7CiAJdTE2IGFkZHI7Ci0JdTMyIG90cGdwOworCXUxNiB2YWxpZGJsb2NrYWRkciA9IDA7CisJdTE2IGNhY2hlX2FkZHIgPSAwOwogCiAJcHJpdi0+bnZtX2RldmljZV90eXBlID0gaXdsY29yZV9nZXRfbnZtX3R5cGUocHJpdik7Ci0KKwlpZiAocHJpdi0+bnZtX2RldmljZV90eXBlID09IC1FTk9FTlQpCisJCXJldHVybiAtRU5PRU5UOwogCS8qIGFsbG9jYXRlIGVlcHJvbSAqLwotCWlmIChwcml2LT5udm1fZGV2aWNlX3R5cGUgPT0gTlZNX0RFVklDRV9UWVBFX09UUCkKLQkJcHJpdi0+Y2ZnLT5lZXByb21fc2l6ZSA9Ci0JCQlPVFBfQkxPQ0tfU0laRSAqIE9UUF9MT1dFUl9CTE9DS1NfVE9UQUw7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5WTSBzaXplID0gJWRcbiIsIHByaXYtPmNmZy0+ZWVwcm9tX3NpemUpOwogCXN6ID0gcHJpdi0+Y2ZnLT5lZXByb21fc2l6ZTsKIAlwcml2LT5lZXByb20gPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPmVlcHJvbSkgewpAQCAtMjk4LDQ2ICs1MDQsMzEgQEAKIAkJaWYgKHJldCkgewogCQkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgT1RQIGFjY2Vzcy5cbiIpOwogCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gZXJyOworCQkJZ290byBkb25lOwogCQl9CiAJCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX0dQLAogCQkJICAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApICYKIAkJCSAgICAgfkNTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKLQkJLyogY2xlYXIgKi8KLQkJX2l3bF93cml0ZTMyKHByaXYsIENTUl9PVFBfR1BfUkVHLAotCQkJICAgICBpd2xfcmVhZDMyKHByaXYsIENTUl9PVFBfR1BfUkVHKSB8CisKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX09UUF9HUF9SRUcsCiAJCQkgICAgIENTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0sgfAogCQkJICAgICBDU1JfT1RQX0dQX1JFR19FQ0NfVU5DT1JSX1NUQVRVU19NU0spOwotCi0JCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzejsgYWRkciArPSBzaXplb2YodTE2KSkgewotCQkJdTMyIHI7Ci0KLQkJCV9pd2xfd3JpdGUzMihwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJCQkgICAgIENTUl9FRVBST01fUkVHX01TS19BRERSICYgKGFkZHIgPDwgMSkpOwotCi0JCQlyZXQgPSBpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9FRVBST01fUkVHLAotCQkJCQkJICBDU1JfRUVQUk9NX1JFR19SRUFEX1ZBTElEX01TSywKLQkJCQkJCSAgSVdMX0VFUFJPTV9BQ0NFU1NfVElNRU9VVCk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCUlXTF9FUlIocHJpdiwgIlRpbWUgb3V0IHJlYWRpbmcgT1RQWyVkXVxuIiwgYWRkcik7CisJCS8qIHRyYXZlcnNpbmcgdGhlIGxpbmtlZCBsaXN0IGlmIG5vIHNoYWRvdyByYW0gc3VwcG9ydGVkICovCisJCWlmICghcHJpdi0+Y2ZnLT5zaGFkb3dfcmFtX3N1cHBvcnQpIHsKKwkJCWlmIChpd2xfZmluZF9vdHBfaW1hZ2UocHJpdiwgJnZhbGlkYmxvY2thZGRyKSkgeworCQkJCXJldCA9IC1FTk9FTlQ7CiAJCQkJZ290byBkb25lOwogCQkJfQotCQkJciA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBDU1JfRUVQUk9NX1JFRyk7Ci0JCQkvKiBjaGVjayBmb3IgRUNDIGVycm9yczogKi8KLQkJCW90cGdwID0gaXdsX3JlYWQzMihwcml2LCBDU1JfT1RQX0dQX1JFRyk7Ci0JCQlpZiAob3RwZ3AgJiBDU1JfT1RQX0dQX1JFR19FQ0NfVU5DT1JSX1NUQVRVU19NU0spIHsKLQkJCQkvKiBzdG9wIGluIHRoaXMgY2FzZSAqLwotCQkJCUlXTF9FUlIocHJpdiwgIlVuY29ycmVjdGFibGUgT1RQIEVDQyBlcnJvciwgQWJvcnQgT1RQIHJlYWRcbiIpOworCQl9CisJCWZvciAoYWRkciA9IHZhbGlkYmxvY2thZGRyOyBhZGRyIDwgdmFsaWRibG9ja2FkZHIgKyBzejsKKwkJICAgICBhZGRyICs9IHNpemVvZih1MTYpKSB7CisJCQl1MTYgZWVwcm9tX2RhdGE7CisKKwkJCXJldCA9IGl3bF9yZWFkX290cF93b3JkKHByaXYsIGFkZHIsICZlZXByb21fZGF0YSk7CisJCQlpZiAocmV0KQogCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWlmIChvdHBncCAmIENTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0spIHsKLQkJCQkvKiBjb250aW51ZSBpbiB0aGlzIGNhc2UgKi8KLQkJCQlfaXdsX3dyaXRlMzIocHJpdiwgQ1NSX09UUF9HUF9SRUcsCi0JCQkJCSAgICAgaXdsX3JlYWQzMihwcml2LCBDU1JfT1RQX0dQX1JFRykgfAotCQkJCQkgICAgIENTUl9PVFBfR1BfUkVHX0VDQ19DT1JSX1NUQVRVU19NU0spOwotCQkJCUlXTF9FUlIocHJpdiwgIkNvcnJlY3RhYmxlIE9UUCBFQ0MgZXJyb3IsIGNvbnRpbnVlIHJlYWRcbiIpOwotCQkJfQotCQkJZVthZGRyIC8gMl0gPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpKHIgPj4gMTYpKTsKKwkJCWVbY2FjaGVfYWRkciAvIDJdID0gZWVwcm9tX2RhdGE7CisJCQljYWNoZV9hZGRyICs9IHNpemVvZih1MTYpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogZWVwcm9tIGlzIGFuIGFycmF5IG9mIDE2Yml0IHZhbHVlcyAqLwpAQCAtNDU4LDEzICs2NDksMTMgQEAKIAkJCQlpd2xfZWVwcm9tX3F1ZXJ5X2FkZHIocHJpdiwgb2Zmc2V0KTsKIAkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bF9lZXByb21fYmFuZF81OwogCQlicmVhazsKLQljYXNlIDY6CQkvKiAyLjRHSHogRkFUIGNoYW5uZWxzICovCisJY2FzZSA2OgkJLyogMi40R0h6IGh0NDAgY2hhbm5lbHMgKi8KIAkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzYpOwogCQkqZWVwcm9tX2NoX2luZm8gPSAoc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKQogCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwogCQkqZWVwcm9tX2NoX2luZGV4ID0gaXdsX2VlcHJvbV9iYW5kXzY7CiAJCWJyZWFrOwotCWNhc2UgNzoJCS8qIDUgR0h6IEZBVCBjaGFubmVscyAqLworCWNhc2UgNzoJCS8qIDUgR0h6IGh0NDAgY2hhbm5lbHMgKi8KIAkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzcpOwogCQkqZWVwcm9tX2NoX2luZm8gPSAoc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCAqKQogCQkJCWl3bF9lZXByb21fcXVlcnlfYWRkcihwcml2LCBvZmZzZXQpOwpAQCAtNDgwLDE0ICs2NzEsMTQgQEAKIAkJCSAgICA/ICMgeCAiICIgOiAiIikKIAogLyoqCi0gKiBpd2xfc2V0X2ZhdF9jaGFuX2luZm8gLSBDb3B5IGZhdCBjaGFubmVsIGluZm8gaW50byBkcml2ZXIncyBwcml2LgorICogaXdsX21vZF9odDQwX2NoYW5faW5mbyAtIENvcHkgaHQ0MCBjaGFubmVsIGluZm8gaW50byBkcml2ZXIncyBwcml2LgogICoKICAqIERvZXMgbm90IHNldCB1cCBhIGNvbW1hbmQsIG9yIHRvdWNoIGhhcmR3YXJlLgogICovCi1zdGF0aWMgaW50IGl3bF9zZXRfZmF0X2NoYW5faW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitzdGF0aWMgaW50IGl3bF9tb2RfaHQ0MF9jaGFuX2luZm8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLCB1MTYgY2hhbm5lbCwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgKmVlcHJvbV9jaCwKLQkJCSAgICAgIHU4IGZhdF9leHRlbnNpb25fY2hhbm5lbCkKKwkJCSAgICAgIHU4IGNsZWFyX2h0NDBfZXh0ZW5zaW9uX2NoYW5uZWwpCiB7CiAJc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAKQEAgLTQ5Nyw3ICs2ODgsNyBAQAogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKIAkJcmV0dXJuIC0xOwogCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZBVCBDaC4gJWQgWyVzR0h6XSAlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCUlXTF9ERUJVR19JTkZPKHByaXYsICJIVDQwIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC01MTMsMTcgKzcwNCwxODkgQEAKIAkJCSAmJiAhKGVlcHJvbV9jaC0+ZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikpID8KIAkJCSIiIDogIm5vdCAiKTsKIAotCWNoX2luZm8tPmZhdF9lZXByb20gPSAqZWVwcm9tX2NoOwotCWNoX2luZm8tPmZhdF9tYXhfcG93ZXJfYXZnID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwotCWNoX2luZm8tPmZhdF9jdXJyX3R4cG93ID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwotCWNoX2luZm8tPmZhdF9taW5fcG93ZXIgPSAwOwotCWNoX2luZm8tPmZhdF9zY2FuX3Bvd2VyID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOwotCWNoX2luZm8tPmZhdF9mbGFncyA9IGVlcHJvbV9jaC0+ZmxhZ3M7Ci0JY2hfaW5mby0+ZmF0X2V4dGVuc2lvbl9jaGFubmVsID0gZmF0X2V4dGVuc2lvbl9jaGFubmVsOworCWNoX2luZm8tPmh0NDBfZWVwcm9tID0gKmVlcHJvbV9jaDsKKwljaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgPSBlZXByb21fY2gtPm1heF9wb3dlcl9hdmc7CisJY2hfaW5mby0+aHQ0MF9jdXJyX3R4cG93ID0gZWVwcm9tX2NoLT5tYXhfcG93ZXJfYXZnOworCWNoX2luZm8tPmh0NDBfbWluX3Bvd2VyID0gMDsKKwljaF9pbmZvLT5odDQwX3NjYW5fcG93ZXIgPSBlZXByb21fY2gtPm1heF9wb3dlcl9hdmc7CisJY2hfaW5mby0+aHQ0MF9mbGFncyA9IGVlcHJvbV9jaC0+ZmxhZ3M7CisJY2hfaW5mby0+aHQ0MF9leHRlbnNpb25fY2hhbm5lbCAmPSB+Y2xlYXJfaHQ0MF9leHRlbnNpb25fY2hhbm5lbDsKIAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnIC0gZ2V0IHRoZSBoaWdoZXN0IHR4IHBvd2VyIGZyb20gYWxsIGNoYWlucy4KKyAqICAgICBmaW5kIHRoZSBoaWdoZXN0IHR4IHBvd2VyIGZyb20gYWxsIGNoYWlucyBmb3IgdGhlIGNoYW5uZWwKKyAqLworc3RhdGljIHM4IGl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKmVuaGFuY2VkX3R4cG93ZXIsIGludCBlbGVtZW50KQoreworCXM4IG1heF90eHBvd2VyX2F2ZyA9IDA7IC8qIChkQm0pICovCisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJWQgLSAiCisJCQkiY2hhaW5fYTogJWQgZEIgY2hhaW5fYjogJWQgZEIgIgorCQkJImNoYWluX2M6ICVkIGRCIG1pbW8yOiAlZCBkQiBtaW1vMzogJWQgZEJcbiIsCisJCQllbGVtZW50LAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9hX21heCA+PiAxLAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9iX21heCA+PiAxLAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9jX21heCA+PiAxLAorCQkJZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5taW1vMl9tYXggPj4gMSwKKwkJCWVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0ubWltbzNfbWF4ID4+IDEpOworCS8qIFRha2UgdGhlIGhpZ2hlc3QgdHggcG93ZXIgZnJvbSBhbnkgdmFsaWQgY2hhaW5zICovCisJaWYgKChwcml2LT5jZmctPnZhbGlkX3R4X2FudCAmIEFOVF9BKSAmJgorCSAgICAoZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9hX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0uY2hhaW5fYV9tYXg7CisJaWYgKChwcml2LT5jZmctPnZhbGlkX3R4X2FudCAmIEFOVF9CKSAmJgorCSAgICAoZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9iX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0uY2hhaW5fYl9tYXg7CisJaWYgKChwcml2LT5jZmctPnZhbGlkX3R4X2FudCAmIEFOVF9DKSAmJgorCSAgICAoZW5oYW5jZWRfdHhwb3dlcltlbGVtZW50XS5jaGFpbl9jX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0uY2hhaW5fY19tYXg7CisJaWYgKCgocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQgPT0gQU5UX0FCKSB8CisJICAgIChwcml2LT5jZmctPnZhbGlkX3R4X2FudCA9PSBBTlRfQkMpIHwKKwkgICAgKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ID09IEFOVF9BQykpICYmCisJICAgIChlbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLm1pbW8yX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9ICBlbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLm1pbW8yX21heDsKKwlpZiAoKHByaXYtPmNmZy0+dmFsaWRfdHhfYW50ID09IEFOVF9BQkMpICYmCisJICAgIChlbmhhbmNlZF90eHBvd2VyW2VsZW1lbnRdLm1pbW8zX21heCA+IG1heF90eHBvd2VyX2F2ZykpCisJCW1heF90eHBvd2VyX2F2ZyA9IGVuaGFuY2VkX3R4cG93ZXJbZWxlbWVudF0ubWltbzNfbWF4OworCisJLyogbWF4LiB0eCBwb3dlciBpbiBFRVBST00gaXMgaW4gMS8yIGRCbSBmb3JtYXQKKwkgKiBjb252ZXJ0IGZyb20gMS8yIGRCbSB0byBkQm0KKwkgKi8KKwlyZXR1cm4gbWF4X3R4cG93ZXJfYXZnID4+IDE7Cit9CisKKy8qKgorICogaXdsX3VwZGF0ZV9jb21tb25fdHhwb3dlcjogdXBkYXRlIGNoYW5uZWwgdHggcG93ZXIKKyAqICAgICB1cGRhdGUgdHggcG93ZXIgcGVyIGJhbmQgYmFzZWQgb24gRUVQUk9NIGVuaGFuY2VkIHR4IHBvd2VyIGluZm8uCisgKi8KK3N0YXRpYyBzOCBpd2xfdXBkYXRlX2NvbW1vbl90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJc3RydWN0IGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3IgKmVuaGFuY2VkX3R4cG93ZXIsCisJCWludCBzZWN0aW9uLCBpbnQgZWxlbWVudCkKK3sKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKKwlpbnQgY2g7CisJYm9vbCBpc19odDQwID0gZmFsc2U7CisJczggbWF4X3R4cG93ZXJfYXZnOyAvKiAoZEJtKSAqLworCisJLyogaXQgaXMgY29tbW9uIHNlY3Rpb24sIGNvbnRhaW4gYWxsIHR5cGUgKExlZ2FjeSwgSFQgYW5kIEhUNDApCisJICogYmFzZWQgb24gdGhlIGVsZW1lbnQgaW4gdGhlIHNlY3Rpb24gdG8gZGV0ZXJtaW5lCisJICogaXMgaXQgSFQgNDAgb3Igbm90CisJICovCisJaWYgKGVsZW1lbnQgPT0gRUVQUk9NX1RYUE9XRVJfQ09NTU9OX0hUNDBfSU5ERVgpCisJCWlzX2h0NDAgPSB0cnVlOworCW1heF90eHBvd2VyX2F2ZyA9CisJCWl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHByaXYsIGVuaGFuY2VkX3R4cG93ZXIsIGVsZW1lbnQpOworCWNoX2luZm8gPSBwcml2LT5jaGFubmVsX2luZm87CisKKwlmb3IgKGNoID0gMDsgY2ggPCBwcml2LT5jaGFubmVsX2NvdW50OyBjaCsrKSB7CisJCS8qIGZpbmQgbWF0Y2hpbmcgYmFuZCBhbmQgdXBkYXRlIHR4IHBvd2VyIGlmIG5lZWRlZCAqLworCQlpZiAoKGNoX2luZm8tPmJhbmQgPT0gZW5oaW5mb1tzZWN0aW9uXS5iYW5kKSAmJgorCQkgICAgKGNoX2luZm8tPm1heF9wb3dlcl9hdmcgPCBtYXhfdHhwb3dlcl9hdmcpICYmICghaXNfaHQ0MCkpIHsKKwkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KKwkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBjaF9pbmZvLT5jdXJyX3R4cG93ID0KKwkJCSAgICBtYXhfdHhwb3dlcl9hdmc7CisJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gbWF4X3R4cG93ZXJfYXZnOworCQl9CisJCWlmICgoY2hfaW5mby0+YmFuZCA9PSBlbmhpbmZvW3NlY3Rpb25dLmJhbmQpICYmIGlzX2h0NDAgJiYKKwkJICAgIGNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZyAmJgorCQkgICAgKGNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZyA8IG1heF90eHBvd2VyX2F2ZykpIHsKKwkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KKwkJCWNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZyA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCWNoX2luZm8tPmh0NDBfY3Vycl90eHBvdyA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCWNoX2luZm8tPmh0NDBfc2Nhbl9wb3dlciA9IG1heF90eHBvd2VyX2F2ZzsKKwkJfQorCQljaF9pbmZvKys7CisJfQorCXJldHVybiBtYXhfdHhwb3dlcl9hdmc7Cit9CisKKy8qKgorICogaXdsX3VwZGF0ZV9jaGFubmVsX3R4cG93ZXI6IHVwZGF0ZSBjaGFubmVsIHR4IHBvd2VyCisgKiAgICAgIHVwZGF0ZSBjaGFubmVsIHR4IHBvd2VyIGJhc2VkIG9uIEVFUFJPTSBlbmhhbmNlZCB0eCBwb3dlciBpbmZvLgorICovCitzdGF0aWMgczggaXdsX3VwZGF0ZV9jaGFubmVsX3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQlzdHJ1Y3QgaXdsX2VlcHJvbV9lbmhhbmNlZF90eHB3ciAqZW5oYW5jZWRfdHhwb3dlciwKKwkJaW50IHNlY3Rpb24sIGludCBlbGVtZW50KQoreworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCWludCBjaDsKKwl1OCBjaGFubmVsOworCXM4IG1heF90eHBvd2VyX2F2ZzsgLyogKGRCbSkgKi8KKworCWNoYW5uZWwgPSBlbmhpbmZvW3NlY3Rpb25dLml3bF9lZXByb21fc2VjdGlvbl9jaGFubmVsW2VsZW1lbnRdOworCW1heF90eHBvd2VyX2F2ZyA9CisJCWl3bF9nZXRfbWF4X3R4cG93ZXJfYXZnKHByaXYsIGVuaGFuY2VkX3R4cG93ZXIsIGVsZW1lbnQpOworCisJY2hfaW5mbyA9IHByaXYtPmNoYW5uZWxfaW5mbzsKKwlmb3IgKGNoID0gMDsgY2ggPCBwcml2LT5jaGFubmVsX2NvdW50OyBjaCsrKSB7CisJCS8qIGZpbmQgbWF0Y2hpbmcgY2hhbm5lbCBhbmQgdXBkYXRlIHR4IHBvd2VyIGlmIG5lZWRlZCAqLworCQlpZiAoY2hfaW5mby0+Y2hhbm5lbCA9PSBjaGFubmVsKSB7CisJCQlpZiAoKGNoX2luZm8tPm1heF9wb3dlcl9hdmcgPCBtYXhfdHhwb3dlcl9hdmcpICYmCisJCQkgICAgKCFlbmhpbmZvW3NlY3Rpb25dLmlzX2h0NDApKSB7CisJCQkJLyogVXBkYXRlIHJlZ3VsYXRvcnktYmFzZWQgcnVuLXRpbWUgZGF0YSAqLworCQkJCWNoX2luZm8tPm1heF9wb3dlcl9hdmcgPSBtYXhfdHhwb3dlcl9hdmc7CisJCQkJY2hfaW5mby0+Y3Vycl90eHBvdyA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gbWF4X3R4cG93ZXJfYXZnOworCQkJfQorCQkJaWYgKChlbmhpbmZvW3NlY3Rpb25dLmlzX2h0NDApICYmCisJCQkgICAgKGNoX2luZm8tPmh0NDBfbWF4X3Bvd2VyX2F2ZykgJiYKKwkJCSAgICAoY2hfaW5mby0+aHQ0MF9tYXhfcG93ZXJfYXZnIDwgbWF4X3R4cG93ZXJfYXZnKSkgeworCQkJCS8qIFVwZGF0ZSByZWd1bGF0b3J5LWJhc2VkIHJ1bi10aW1lIGRhdGEgKi8KKwkJCQljaF9pbmZvLT5odDQwX21heF9wb3dlcl9hdmcgPSBtYXhfdHhwb3dlcl9hdmc7CisJCQkJY2hfaW5mby0+aHQ0MF9jdXJyX3R4cG93ID0gbWF4X3R4cG93ZXJfYXZnOworCQkJCWNoX2luZm8tPmh0NDBfc2Nhbl9wb3dlciA9IG1heF90eHBvd2VyX2F2ZzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNoX2luZm8rKzsKKwl9CisJcmV0dXJuIG1heF90eHBvd2VyX2F2ZzsKK30KKworLyoqCisgKiBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyOiBwcm9jZXNzIGVuaGFuY2VkIHR4IHBvd2VyIGluZm8KKyAqLwordm9pZCBpd2xjb3JlX2VlcHJvbV9lbmhhbmNlZF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgZWVwcm9tX3NlY3Rpb25fY291bnQgPSAwOworCWludCBzZWN0aW9uLCBlbGVtZW50OworCXN0cnVjdCBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyICplbmhhbmNlZF90eHBvd2VyOworCXUzMiBvZmZzZXQ7CisJczggbWF4X3R4cG93ZXJfYXZnOyAvKiAoZEJtKSAqLworCisJLyogTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VjdGlvbnMKKwkgKiBhZGp1c3QgYmFuZHMgYW5kIGNoYW5uZWwncyBtYXggdHggcG93ZXIKKwkgKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBoaWdoZXN0IHBvd2VyCisJICogc3VwcG9ydGVkIGJ5IGFueSBjaGFubmVscyBhbmQgY2hhaW5zCisJICovCisJZm9yIChzZWN0aW9uID0gMDsgc2VjdGlvbiA8IEFSUkFZX1NJWkUoZW5oaW5mbyk7IHNlY3Rpb24rKykgeworCQllZXByb21fc2VjdGlvbl9jb3VudCA9IGVuaGluZm9bc2VjdGlvbl0uY291bnQ7CisJCW9mZnNldCA9IGVuaGluZm9bc2VjdGlvbl0ub2Zmc2V0OworCQllbmhhbmNlZF90eHBvd2VyID0gKHN0cnVjdCBpd2xfZWVwcm9tX2VuaGFuY2VkX3R4cHdyICopCisJCQkJaXdsX2VlcHJvbV9xdWVyeV9hZGRyKHByaXYsIG9mZnNldCk7CisKKwkJZm9yIChlbGVtZW50ID0gMDsgZWxlbWVudCA8IGVlcHJvbV9zZWN0aW9uX2NvdW50OyBlbGVtZW50KyspIHsKKwkJCWlmIChlbmhpbmZvW3NlY3Rpb25dLmlzX2NvbW1vbikKKwkJCQltYXhfdHhwb3dlcl9hdmcgPQorCQkJCQlpd2xfdXBkYXRlX2NvbW1vbl90eHBvd2VyKHByaXYsCisJCQkJCWVuaGFuY2VkX3R4cG93ZXIsIHNlY3Rpb24sIGVsZW1lbnQpOworCQkJZWxzZQorCQkJCW1heF90eHBvd2VyX2F2ZyA9CisJCQkJCWl3bF91cGRhdGVfY2hhbm5lbF90eHBvd2VyKHByaXYsCisJCQkJCWVuaGFuY2VkX3R4cG93ZXIsIHNlY3Rpb24sIGVsZW1lbnQpOworCisJCQkvKiBVcGRhdGUgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBoaWdoZXN0IHBvd2VyCisJCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KKwkJCWlmIChtYXhfdHhwb3dlcl9hdmcgPiBwcml2LT50eF9wb3dlcl91c2VyX2xtdCkKKwkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IG1heF90eHBvd2VyX2F2ZzsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsY29yZV9lZXByb21fZW5oYW5jZWRfdHhwb3dlcik7CisKICNkZWZpbmUgQ0hFQ0tfQU5EX1BSSU5UX0koeCkgKChlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF8jI3gpIFwKIAkJCSAgICA/ICMgeCAiICIgOiAiIikKIApAQCAtNTg1LDExICs5NDgsMTAgQEAKIAkJCS8qIENvcHkgdGhlIHJ1bi10aW1lIGZsYWdzIHNvIHRoZXkgYXJlIHRoZXJlIGV2ZW4gb24KIAkJCSAqIGludmFsaWQgY2hhbm5lbHMgKi8KIAkJCWNoX2luZm8tPmZsYWdzID0gZWVwcm9tX2NoX2luZm9bY2hdLmZsYWdzOwotCQkJLyogRmlyc3Qgd3JpdGUgdGhhdCBmYXQgaXMgbm90IGVuYWJsZWQsIGFuZCB0aGVuIGVuYWJsZQorCQkJLyogRmlyc3Qgd3JpdGUgdGhhdCBodDQwIGlzIG5vdCBlbmFibGVkLCBhbmQgdGhlbiBlbmFibGUKIAkJCSAqIG9uZSBieSBvbmUgKi8KLQkJCWNoX2luZm8tPmZhdF9leHRlbnNpb25fY2hhbm5lbCA9Ci0JCQkJKElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTIHwKLQkJCQkgSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTKTsKKwkJCWNoX2luZm8tPmh0NDBfZXh0ZW5zaW9uX2NoYW5uZWwgPQorCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19IVDQwOwogCiAJCQlpZiAoIShpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSkgewogCQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgRmxhZ3MgJXggWyVzR0h6XSAtICIKQEAgLTYzOCwxNyArMTAwMCwxNiBAQAogCQl9CiAJfQogCi0JLyogQ2hlY2sgaWYgd2UgZG8gaGF2ZSBGQVQgY2hhbm5lbHMgKi8KKwkvKiBDaGVjayBpZiB3ZSBkbyBoYXZlIEhUNDAgY2hhbm5lbHMgKi8KIAlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzWzVdID09Ci0JICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFUICYmCisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCAmJgogCSAgICBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnJlZ3VsYXRvcnlfYmFuZHNbNl0gPT0KLQkgICAgRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQpCisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fSFQ0MCkKIAkJcmV0dXJuIDA7CiAKLQkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCisJLyogVHdvIGFkZGl0aW9uYWwgRUVQUk9NIGJhbmRzIGZvciAyLjQgYW5kIDUgR0h6IEhUNDAgY2hhbm5lbHMgKi8KIAlmb3IgKGJhbmQgPSA2OyBiYW5kIDw9IDc7IGJhbmQrKykgewogCQllbnVtIGllZWU4MDIxMV9iYW5kIGllZWViYW5kOwotCQl1OCBmYXRfZXh0ZW5zaW9uX2NoYW47CiAKIAkJaXdsX2luaXRfYmFuZF9yZWZlcmVuY2UocHJpdiwgYmFuZCwgJmVlcHJvbV9jaF9jb3VudCwKIAkJCQkJJmVlcHJvbV9jaF9pbmZvLCAmZWVwcm9tX2NoX2luZGV4KTsKQEAgLTY1OSwzMSArMTAyMCwyOCBAQAogCiAJCS8qIExvb3AgdGhyb3VnaCBlYWNoIGJhbmQgYWRkaW5nIGVhY2ggb2YgdGhlIGNoYW5uZWxzICovCiAJCWZvciAoY2ggPSAwOyBjaCA8IGVlcHJvbV9jaF9jb3VudDsgY2grKykgewotCi0JCQlpZiAoKGJhbmQgPT0gNikgJiYKLQkJCQkoKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNSkgfHwKLQkJCQkgKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNikgfHwKLQkJCQkgKGVlcHJvbV9jaF9pbmRleFtjaF0gPT0gNykpKQotCQkJCS8qIGJvdGggYXJlIGFsbG93ZWQ6IGFib3ZlIGFuZCBiZWxvdyAqLwotCQkJCWZhdF9leHRlbnNpb25fY2hhbiA9IDA7Ci0JCQllbHNlCi0JCQkJZmF0X2V4dGVuc2lvbl9jaGFuID0KLQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTOwotCiAJCQkvKiBTZXQgdXAgZHJpdmVyJ3MgaW5mbyBmb3IgbG93ZXIgaGFsZiAqLwotCQkJaXdsX3NldF9mYXRfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAorCQkJaXdsX21vZF9odDQwX2NoYW5faW5mbyhwcml2LCBpZWVlYmFuZCwKIAkJCQkJCWVlcHJvbV9jaF9pbmRleFtjaF0sCi0JCQkJCQkmKGVlcHJvbV9jaF9pbmZvW2NoXSksCi0JCQkJCQlmYXRfZXh0ZW5zaW9uX2NoYW4pOworCQkJCQkJJmVlcHJvbV9jaF9pbmZvW2NoXSwKKwkJCQkJCUlFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKTsKIAogCQkJLyogU2V0IHVwIGRyaXZlcidzIGluZm8gZm9yIHVwcGVyIGhhbGYgKi8KLQkJCWl3bF9zZXRfZmF0X2NoYW5faW5mbyhwcml2LCBpZWVlYmFuZCwKLQkJCQkJCShlZXByb21fY2hfaW5kZXhbY2hdICsgNCksCi0JCQkJCQkmKGVlcHJvbV9jaF9pbmZvW2NoXSksCi0JCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUyk7CisJCQlpd2xfbW9kX2h0NDBfY2hhbl9pbmZvKHByaXYsIGllZWViYW5kLAorCQkJCQkJZWVwcm9tX2NoX2luZGV4W2NoXSArIDQsCisJCQkJCQkmZWVwcm9tX2NoX2luZm9bY2hdLAorCQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTKTsKIAkJfQogCX0KIAorCS8qIGZvciBuZXdlciBkZXZpY2UgKDYwMDAgc2VyaWVzIGFuZCB1cCkKKwkgKiBFRVBST00gY29udGFpbiBlbmhhbmNlZCB0eCBwb3dlciBpbmZvcm1hdGlvbgorCSAqIGRyaXZlciBuZWVkIHRvIHByb2Nlc3MgYWRkaXRpb24gaW5mb3JtYXRpb24KKwkgKiB0byBkZXRlcm1pbmUgdGhlIG1heCBjaGFubmVsIHR4IHBvd2VyIGxpbWl0cworCSAqLworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLnVwZGF0ZV9lbmhhbmNlZF90eHBvd2VyKHByaXYpOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9pbml0X2NoYW5uZWxfbWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggMTk1YjRlZi4uNmI2OGRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTg4LDEwICs4OCwxMCBAQAogICogcmVxdWlyZW1lbnQgZm9yIGVzdGFibGlzaGluZyBhIG5ldyBuZXR3b3JrIGZvciBsZWdhbCBvcGVyYXRpb24gb24gY2hhbm5lbHMKICAqIHJlcXVpcmluZyBSQURBUiBkZXRlY3Rpb24gb3IgcmVzdHJpY3RpbmcgQUNUSVZFIHNjYW5uaW5nLgogICoKLSAqIE5PVEU6ICAiV0lERSIgZmxhZyBkb2VzIG5vdCBpbmRpY2F0ZSBhbnl0aGluZyBhYm91dCAiRkFUIiA0MCBNSHogY2hhbm5lbHMuCi0gKiAgICAgICAgSXQgb25seSBpbmRpY2F0ZXMgdGhhdCAyMCBNSHogY2hhbm5lbCB1c2UgaXMgc3VwcG9ydGVkOyBGQVQgY2hhbm5lbAorICogTk9URTogICJXSURFIiBmbGFnIGRvZXMgbm90IGluZGljYXRlIGFueXRoaW5nIGFib3V0ICJIVDQwIiA0MCBNSHogY2hhbm5lbHMuCisgKiAgICAgICAgSXQgb25seSBpbmRpY2F0ZXMgdGhhdCAyMCBNSHogY2hhbm5lbCB1c2UgaXMgc3VwcG9ydGVkOyBIVDQwIGNoYW5uZWwKICAqICAgICAgICB1c2FnZSBpcyBpbmRpY2F0ZWQgYnkgYSBzZXBhcmF0ZSBzZXQgb2YgcmVndWxhdG9yeSBmbGFncyBmb3IgZWFjaAotICogICAgICAgIEZBVCBjaGFubmVsIHBhaXIuCisgKiAgICAgICAgSFQ0MCBjaGFubmVsIHBhaXIuCiAgKgogICogTk9URTogIFVzaW5nIGEgY2hhbm5lbCBpbmFwcHJvcHJpYXRlbHkgd2lsbCByZXN1bHQgaW4gYSB1Q29kZSBlcnJvciEKICAqLwpAQCAtMTEyLDEyICsxMTIsMzYgQEAKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfSFdfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMSkKIAogLyogKnJlZ3VsYXRvcnkqIGNoYW5uZWwgZGF0YSBmb3JtYXQgaW4gZWVwcm9tLCBvbmUgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBlbnRyaWVzIGZvciBGQVQgKDQwIE1IeikgdnMuIG5vcm1hbCAoMjAgTUh6KSBjaGFubmVscy4gKi8KKyAqIFRoZXJlIGFyZSBzZXBhcmF0ZSBlbnRyaWVzIGZvciBIVDQwICg0MCBNSHopIHZzLiBub3JtYWwgKDIwIE1IeikgY2hhbm5lbHMuICovCiBzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIHsKIAl1OCBmbGFnczsJCS8qIEVFUFJPTV9DSEFOTkVMXyogZmxhZ3MgY29waWVkIGZyb20gRUVQUk9NICovCiAJczggbWF4X3Bvd2VyX2F2ZzsJLyogbWF4IHBvd2VyIChkQm0pIG9uIHRoaXMgY2hubCwgbGltaXQgMzEgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKioKKyAqIGl3bF9lZXByb21fZW5oYW5jZWRfdHhwd3Igc3RydWN0dXJlCisgKiAgICBUaGlzIHN0cnVjdHVyZSBwcmVzZW50cyB0aGUgZW5oYW5jZWQgcmVndWxhdG9yeSB0eCBwb3dlciBsaW1pdCBsYXlvdXQKKyAqICAgIGluIGVlcHJvbSBpbWFnZQorICogICAgRW5oYW5jZWQgcmVndWxhdG9yeSB0eCBwb3dlciBwb3J0aW9uIG9mIGVlcHJvbSBpbWFnZSBjYW4gYmUgYnJva2VuIGRvd24KKyAqICAgIGludG8gaW5kaXZpZHVhbCBzdHJ1Y3R1cmVzOyBlYWNoIG9uZSBpcyA4IGJ5dGVzIGluIHNpemUgYW5kIGNvbnRhaW4gdGhlCisgKiAgICBmb2xsb3dpbmcgaW5mb3JtYXRpb24KKyAqIEBjaGFpbl9hX21heF9wd3I6IGNoYWluIGEgbWF4IHBvd2VyIGluIDEvMiBkQm0KKyAqIEBjaGFpbl9iX21heF9wd3I6IGNoYWluIGIgbWF4IHBvd2VyIGluIDEvMiBkQm0KKyAqIEBjaGFpbl9jX21heF9wd3I6IGNoYWluIGMgbWF4IHBvd2VyIGluIDEvMiBkQm0KKyAqIEBtaW1vMl9tYXhfcHdyOiBtaW1vMiBtYXggcG93ZXIgaW4gMS8yIGRCbQorICogQG1pbW8zX21heF9wd3I6IG1pbW8zIG1heCBwb3dlciBpbiAxLzIgZEJtCisgKgorICovCitzdHJ1Y3QgaXdsX2VlcHJvbV9lbmhhbmNlZF90eHB3ciB7CisJdTE2IHJlc2VydmVkOworCXM4IGNoYWluX2FfbWF4OworCXM4IGNoYWluX2JfbWF4OworCXM4IGNoYWluX2NfbWF4OworCXM4IHJlc2VydmVkMTsKKwlzOCBtaW1vMl9tYXg7CisJczggbWltbzNfbWF4OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIDM5NDUgU3BlY2lmaWMgKi8KICNkZWZpbmUgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04JKDB4MmYpCiAKQEAgLTE3MCwxOCArMTk0LDc3IEBACiAJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjIgYnl0ZXMgKi8KICNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUyAgICAgICAoKDB4NzQpXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDEyIGJ5dGVzICovCi0jZGVmaW5lIEVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0ZBVF9DSEFOTkVMUyAgKCgweDgyKVwKKyNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfMjRfSFQ0MF9DSEFOTkVMUyAgKCgweDgyKVwKIAkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNCAgYnl0ZXMgKi8KLSNkZWZpbmUgRUVQUk9NXzUwMDBfUkVHX0JBTkRfNTJfRkFUX0NIQU5ORUxTICAoKDB4OTIpXAorI2RlZmluZSBFRVBST01fNTAwMF9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTICAoKDB4OTIpXAogCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDIyICBieXRlcyAqLwogCisvKiA2MDAwIGFuZCB1cCByZWd1bGF0b3J5IHR4IHBvd2VyIC0gaW5kaXJlY3QgYWNjZXNzICovCisvKiBtYXguIGVsZW1lbnRzIHBlciBzZWN0aW9uICovCisjZGVmaW5lIEVFUFJPTV9NQVhfVFhQT1dFUl9TRUNUSU9OX0VMRU1FTlRTCSg4KQorI2RlZmluZSBFRVBST01fVFhQT1dFUl9DT01NT05fSFQ0MF9JTkRFWAkoMikKKworLyoqCisgKiBQYXJ0aXRpb24gdGhlIGVuaGFuY2VkIHR4IHBvd2VyIHBvcnRpb24gb2YgZWVwcm9tIGltYWdlIGludG8KKyAqIDEwIHNlY3Rpb25zIGJhc2VkIG9uIGJhbmQsIG1vZHVsYXRpb24sIGZyZXF1ZW5jeSBhbmQgY2hhbm5lbAorICoKKyAqIFNlY3Rpb24gMTogYWxsIENDSyBjaGFubmVscworICogU2VjdGlvbiAyOiBhbGwgMi40IEdIeiBPRkRNIChMZWdhY3ksIEhUIGFuZCBIVDQwICkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gMzogYWxsIDUuMiBHSHogT0ZETSAoTGVnYWN5LCBIVCBhbmQgSFQ0MCkgY2hhbm5lbHMKKyAqIFNlY3Rpb24gNDogMi40IEdIeiAyME1IeiBjaGFubmVsczogMSwgMiwgMTAsIDExLiBCb3RoIExlZ2FjeSBhbmQgSFQKKyAqIFNlY3Rpb24gNTogMi40IEdIeiA0ME1IeiBjaGFubmVsczogMSwgMiwgNiwgNywgOSwgKF9hYm92ZV8pCisgKiBTZWN0aW9uIDY6IDUuMiBHSHogMjBNSHogY2hhbm5lbHM6IDM2LCA2NCwgMTAwLCBib3RoIExlZ2FjeSBhbmQgSFQKKyAqIFNlY3Rpb24gNzogNS4yIEdIeiA0ME1IeiBjaGFubmVsczogMzYsIDYwLCAxMDAgKF9hYm92ZV8pCisgKiBTZWN0aW9uIDg6IDIuNCBHSHogY2hhbm5lbCAxMywgQm90aCBMZWdhY3kgYW5kIEhUCisgKiBTZWN0aW9uIDk6IDIuNCBHSHogY2hhbm5lbCAxNDAsIEJvdGggTGVnYWN5IGFuZCBIVAorICogU2VjdGlvbiAxMDogMi40IEdIeiA0ME1IeiBjaGFubmVsczogMTMyLCA0NCAoX2Fib3ZlXykKKyAqLworLyogMi40IEdIeiBiYW5kOiBDQ0sgKi8KKyNkZWZpbmUgRUVQUk9NX0xCX0NDS18yMF9DT01NT04gICAgICAgKCgweEFBKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA4IGJ5dGVzICovCisvKiAyLjQgR0h6IGJhbmQ6IDIwTUh6LUxlZ2FjeSwgMjBNSHotSFQsIDQwTUh6LUhUICovCisjZGVmaW5lIEVFUFJPTV9MQl9PRkRNX0NPTU1PTiAgICAgICAoKDB4QjIpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI0IGJ5dGVzICovCisvKiA1LjIgR0h6IGJhbmQ6IDIwTUh6LUxlZ2FjeSwgMjBNSHotSFQsIDQwTUh6LUhUICovCisjZGVmaW5lIEVFUFJPTV9IQl9PRkRNX0NPTU1PTiAgICAgICAoKDB4Q0EpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDI0IGJ5dGVzICovCisvKiAyLjRHSHogYmFuZCBjaGFubmVsczoKKyAqCTFMZWdhY3ksIDFIVCwgMkxlZ2FjeSwgMkhULCAxMExlZ2FjeSwgMTBIVCwgMTFMZWdhY3ksIDExSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQkFORCAgICAgICAoKDB4RTIpXAorCQl8IElORElSRUNUX0FERFJFU1MgfCBJTkRJUkVDVF9SRUdVTEFUT1JZKSAgIC8qIDY0IGJ5dGVzICovCisvKiAyLjQgR0h6IGJhbmQgSFQ0MCBjaGFubmVsczogKDEsKzEpICgyLCsxKSAoNiwrMSkgKDcsKzEpICg5LCsxKSAqLworI2RlZmluZSBFRVBST01fTEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDEyMilcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogNDAgYnl0ZXMgKi8KKy8qIDUuMkdIeiBiYW5kIGNoYW5uZWxzOiAzNkxlZ2FjeSwgMzZIVCwgNjRMZWdhY3ksIDY0SFQsIDEwMExlZ2FjeSwgMTAwSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQkFORCAgICAgICAoKDB4MTRBKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiA0OCBieXRlcyAqLworLyogNS4yIEdIeiBiYW5kIEhUNDAgY2hhbm5lbHM6ICgzNiwrMSkgKDYwLCsxKSAoMTAwLCsxKSAqLworI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkQgICAgICAgKCgweDE3QSlcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMjQgYnl0ZXMgKi8KKy8qIDIuNCBHSHogYmFuZCwgY2hhbm5uZWwgMTM6IExlZ2FjeSwgSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0xCX09GRE1fMjBfQ0hBTk5FTF8xMyAgICAgICAoKDB4MTkyKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNiBieXRlcyAqLworLyogNS4yIEdIeiBiYW5kLCBjaGFubm5lbCAxNDA6IExlZ2FjeSwgSFQgKi8KKyNkZWZpbmUgRUVQUk9NX0hCX09GRE1fMjBfQ0hBTk5FTF8xNDAgICAgICAgKCgweDFBMilcCisJCXwgSU5ESVJFQ1RfQUREUkVTUyB8IElORElSRUNUX1JFR1VMQVRPUlkpICAgLyogMTYgYnl0ZXMgKi8KKy8qIDUuMiBHSHogYmFuZCwgSFQ0MCBjaGFubm5lbHMgKDEzMiwrMSkgKDQ0LCsxKSAqLworI2RlZmluZSBFRVBST01fSEJfT0ZETV9IVDQwX0JBTkRfMSAgICAgICAoKDB4MUIyKVwKKwkJfCBJTkRJUkVDVF9BRERSRVNTIHwgSU5ESVJFQ1RfUkVHVUxBVE9SWSkgICAvKiAxNiBieXRlcyAqLworCisKIC8qIDUwNTAgU3BlY2lmaWMgKi8KICNkZWZpbmUgRUVQUk9NXzUwNTBfVFhfUE9XRVJfVkVSU0lPTiAgICAoNCkKICNkZWZpbmUgRUVQUk9NXzUwNTBfRUVQUk9NX1ZFUlNJT04JKDB4MjFFKQogCiAvKiBPVFAgKi8KLSNkZWZpbmUgT1RQX0xPV0VSX0JMT0NLU19UT1RBTAkJKDMpCi0jZGVmaW5lIE9UUF9CTE9DS19TSVpFCQkJKDB4NDAwKQorLyogbG93ZXIgYmxvY2tzIGNvbnRhaW4gRUVQUk9NIGltYWdlIGFuZCBjYWxpYnJhdGlvbiBkYXRhICovCisjZGVmaW5lIE9UUF9MT1dfSU1BR0VfU0laRQkJKDIgKiA1MTIgKiBzaXplb2YodTE2KSkgLyogMiBLQiAqLworLyogaGlnaCBibG9ja3MgY29udGFpbiBQQVBEIGRhdGEgKi8KKyNkZWZpbmUgT1RQX0hJR0hfSU1BR0VfU0laRV82eDAwICAgICAgICAoNiAqIDUxMiAqIHNpemVvZih1MTYpKSAvKiA2IEtCICovCisjZGVmaW5lIE9UUF9ISUdIX0lNQUdFX1NJWkVfMTAwMCAgICAgICAgKDB4MjAwICogc2l6ZW9mKHUxNikpIC8qIDEwMjQgYnl0ZXMgKi8KKyNkZWZpbmUgT1RQX01BWF9MTF9JVEVNU18xMDAwCQkoMykJLyogT1RQIGJsb2NrcyBmb3IgMTAwMCAqLworI2RlZmluZSBPVFBfTUFYX0xMX0lURU1TXzZ4MDAJCSg0KQkvKiBPVFAgYmxvY2tzIGZvciA2eDAwICovCisjZGVmaW5lIE9UUF9NQVhfTExfSVRFTVNfNng1MAkJKDcpCS8qIE9UUCBibG9ja3MgZm9yIDZ4NTAgKi8KIAogLyogMi40IEdIeiAqLwogZXh0ZXJuIGNvbnN0IHU4IGl3bF9lZXByb21fYmFuZF8xWzE0XTsKQEAgLTMxMyw3ICszOTYsNyBAQAogICogaW4gRUVQUk9NIGNvbnRhaW5pbmcgRUVQUk9NX0NIQU5ORUxfKiB1c2FnZSBmbGFncyAoTFNCKSBhbmQgbWF4IHJlZ3VsYXRvcnkKICAqIHR4cG93ZXIgKE1TQikuCiAgKgotICogRW50cmllcyBpbW1lZGlhdGVseSBiZWxvdyBhcmUgZm9yIDIwIE1IeiBjaGFubmVsIHdpZHRoLiAgRkFUICg0MCBNSHopCisgKiBFbnRyaWVzIGltbWVkaWF0ZWx5IGJlbG93IGFyZSBmb3IgMjAgTUh6IGNoYW5uZWwgd2lkdGguICBIVDQwICg0MCBNSHopCiAgKiBjaGFubmVscyAob25seSBmb3IgNDk2NSwgbm90IHN1cHBvcnRlZCBieSAzOTQ1KSBhcHBlYXIgbGF0ZXIgaW4gdGhlIEVFUFJPTS4KICAqCiAgKiAyLjQgR0h6IGNoYW5uZWxzIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNApAQCAtMzUyLDI5ICs0MzUsMjkgQEAKICNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF81X0NIQU5ORUxTICAgKDIqMHg5OSkJLyogMTIgYnl0ZXMgKi8KIAogLyoKLSAqIDIuNCBHSHogRkFUIGNoYW5uZWxzIDEgKDUpLCAyICg2KSwgMyAoNyksIDQgKDgpLCA1ICg5KSwgNiAoMTApLCA3ICgxMSkKKyAqIDIuNCBHSHogSFQ0MCBjaGFubmVscyAxICg1KSwgMiAoNiksIDMgKDcpLCA0ICg4KSwgNSAoOSksIDYgKDEwKSwgNyAoMTEpCiAgKgogICogVGhlIGNoYW5uZWwgbGlzdGVkIGlzIHRoZSBjZW50ZXIgb2YgdGhlIGxvd2VyIDIwIE1IeiBoYWxmIG9mIHRoZSBjaGFubmVsLgogICogVGhlIG92ZXJhbGwgY2VudGVyIGZyZXF1ZW5jeSBpcyBhY3R1YWxseSAyIGNoYW5uZWxzICgxMCBNSHopIGFib3ZlIHRoYXQsCi0gKiBhbmQgdGhlIHVwcGVyIGhhbGYgb2YgZWFjaCBGQVQgY2hhbm5lbCBpcyBjZW50ZXJlZCA0IGNoYW5uZWxzICgyMCBNSHopIGF3YXkKLSAqIGZyb20gdGhlIGxvd2VyIGhhbGY7IGUuZy4gdGhlIHVwcGVyIGhhbGYgb2YgRkFUIGNoYW5uZWwgMSBpcyBjaGFubmVsIDUsCi0gKiBhbmQgdGhlIG92ZXJhbGwgRkFUIGNoYW5uZWwgd2lkdGggY2VudGVycyBvbiBjaGFubmVsIDMuCisgKiBhbmQgdGhlIHVwcGVyIGhhbGYgb2YgZWFjaCBIVDQwIGNoYW5uZWwgaXMgY2VudGVyZWQgNCBjaGFubmVscyAoMjAgTUh6KSBhd2F5CisgKiBmcm9tIHRoZSBsb3dlciBoYWxmOyBlLmcuIHRoZSB1cHBlciBoYWxmIG9mIEhUNDAgY2hhbm5lbCAxIGlzIGNoYW5uZWwgNSwKKyAqIGFuZCB0aGUgb3ZlcmFsbCBIVDQwIGNoYW5uZWwgd2lkdGggY2VudGVycyBvbiBjaGFubmVsIDMuCiAgKgogICogTk9URTogIFRoZSBSWE9OIGNvbW1hbmQgdXNlcyAyMCBNSHogY2hhbm5lbCBudW1iZXJzIHRvIHNwZWNpZnkgdGhlCiAgKiAgICAgICAgY29udHJvbCBjaGFubmVsIHRvIHdoaWNoIHRvIHR1bmUuICBSWE9OIGFsc28gc3BlY2lmaWVzIHdoZXRoZXIgdGhlCi0gKiAgICAgICAgY29udHJvbCBjaGFubmVsIGlzIHRoZSB1cHBlciBvciBsb3dlciBoYWxmIG9mIGEgRkFUIGNoYW5uZWwuCisgKiAgICAgICAgY29udHJvbCBjaGFubmVsIGlzIHRoZSB1cHBlciBvciBsb3dlciBoYWxmIG9mIGEgSFQ0MCBjaGFubmVsLgogICoKLSAqIE5PVEU6ICA0OTY1IGRvZXMgbm90IHN1cHBvcnQgRkFUIGNoYW5uZWxzIG9uIDIuNCBHSHouCisgKiBOT1RFOiAgNDk2NSBkb2VzIG5vdCBzdXBwb3J0IEhUNDAgY2hhbm5lbHMgb24gMi40IEdIei4KICAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfMjRfRkFUX0NIQU5ORUxTICgyKjB4QTApCS8qIDE0IGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF8yNF9IVDQwX0NIQU5ORUxTICgyKjB4QTApCS8qIDE0IGJ5dGVzICovCiAKIC8qCi0gKiA1LjIgR0h6IEZBVCBjaGFubmVscyAzNiAoNDApLCA0NCAoNDgpLCA1MiAoNTYpLCA2MCAoNjQpLAorICogNS4yIEdIeiBIVDQwIGNoYW5uZWxzIDM2ICg0MCksIDQ0ICg0OCksIDUyICg1NiksIDYwICg2NCksCiAgKiAxMDAgKDEwNCksIDEwOCAoMTEyKSwgMTE2ICgxMjApLCAxMjQgKDEyOCksIDEzMiAoMTM2KSwgMTQ5ICgxNTMpLCAxNTcgKDE2MSkKICAqLwotI2RlZmluZSBFRVBST01fNDk2NV9SRUdVTEFUT1JZX0JBTkRfNTJfRkFUX0NIQU5ORUxTICgyKjB4QTgpCS8qIDIyIGJ5dGVzICovCisjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9IVDQwX0NIQU5ORUxTICgyKjB4QTgpCS8qIDIyIGJ5dGVzICovCiAKLSNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQJCQkoMCkKKyNkZWZpbmUgRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19IVDQwCQkJKDApCiAKIHN0cnVjdCBpd2xfZWVwcm9tX29wcyB7CiAJY29uc3QgdTMyIHJlZ3VsYXRvcnlfYmFuZHNbN107CkBAIC0zODMsNiArNDY2LDcgQEAKIAl2b2lkICgqcmVsZWFzZV9zZW1hcGhvcmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCXUxNiAoKmNhbGliX3ZlcnNpb24pIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCWNvbnN0IHU4KiAoKnF1ZXJ5X2FkZHIpIChjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOworCXZvaWQgKCp1cGRhdGVfZW5oYW5jZWRfdHhwb3dlcikgKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCiAKQEAgLTM5Nyw3ICs0ODEsNyBAQAogaW50IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bGNvcmVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBjb25zdCB1OCAqaXdsY29yZV9lZXByb21fcXVlcnlfYWRkcihjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHNpemVfdCBvZmZzZXQpOwotCit2b2lkIGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfaW5pdF9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZnJlZV9jaGFubmVsX21hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bF9nZXRfY2hhbm5lbF9pbmZvKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDE3ZDYxYWMuLjUzMmM4ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlICJpd2wtY29yZS5oIgogCiAKLSNkZWZpbmUgSVdMX0NNRCh4KSBjYXNlIHg6IHJldHVybiAjeAotCiBjb25zdCBjaGFyICpnZXRfY21kX3N0cmluZyh1OCBjbWQpCiB7CiAJc3dpdGNoIChjbWQpIHsKQEAgLTEwMywyMiArMTAxLDIzIEBACiAKICNkZWZpbmUgSE9TVF9DT01QTEVURV9USU1FT1VUIChIWiAvIDIpCiAKLXN0YXRpYyBpbnQgaXdsX2dlbmVyaWNfY21kX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGl3bF9nZW5lcmljX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IE5VTEw7CiAKIAlpZiAoIXNrYikgewogCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAlcy5cbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAJcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopc2tiLT5kYXRhOwogCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gJXMgKDB4JTA4WClcbiIsCiAJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTEyNywyOSArMTI2LDI2IEBACiAJY2FzZSBTRU5TSVRJVklUWV9DTUQ6CiAJCUlXTF9ERUJVR19IQ19EVU1QKHByaXYsICJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSwgcGt0LT5oZHIuZmxhZ3MpOwotCQkJCWJyZWFrOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlJV0xfREVCVUdfSEMocHJpdiwgImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CiAJfQogI2VuZGlmCi0KLQkvKiBMZXQgaXdsX3R4X2NvbXBsZXRlIGZyZWUgdGhlIHJlc3BvbnNlIHNrYiAqLwotCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGl3bF9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCkKIHsKIAlpbnQgcmV0OwogCi0JQlVHX09OKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSk7CisJQlVHX09OKCEoY21kLT5mbGFncyAmIENNRF9BU1lOQykpOwogCiAJLyogQW4gYXN5bmNocm9ub3VzIGNvbW1hbmQgY2FuIG5vdCBleHBlY3QgYW4gU0tCIHRvIGJlIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKTsKKwlCVUdfT04oY21kLT5mbGFncyAmIENNRF9XQU5UX1NLQik7CiAKIAkvKiBBc3NpZ24gYSBnZW5lcmljIGNhbGxiYWNrIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgKi8KLQlpZiAoIWNtZC0+bWV0YS51LmNhbGxiYWNrKQotCQljbWQtPm1ldGEudS5jYWxsYmFjayA9IGl3bF9nZW5lcmljX2NtZF9jYWxsYmFjazsKKwlpZiAoIWNtZC0+Y2FsbGJhY2spCisJCWNtZC0+Y2FsbGJhY2sgPSBpd2xfZ2VuZXJpY19jbWRfY2FsbGJhY2s7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAtRUJVU1k7CkBAIC0xNjgsMTAgKzE2NCwxMCBAQAogCWludCBjbWRfaWR4OwogCWludCByZXQ7CiAKLQlCVUdfT04oY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKTsKKwlCVUdfT04oY21kLT5mbGFncyAmIENNRF9BU1lOQyk7CiAKIAkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KLQlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CisJQlVHX09OKGNtZC0+Y2FsbGJhY2spOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7CiAJCUlXTF9FUlIocHJpdiwKQEAgLTE4Myw5ICsxNzksNiBAQAogCiAJc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCi0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikKLQkJY21kLT5tZXRhLnNvdXJjZSA9ICZjbWQtPm1ldGE7Ci0KIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwpAQCAtMjIyLDcgKzIxNSw3IEBACiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZmFpbDsKIAl9Ci0JaWYgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPm1ldGEudS5za2IpIHsKKwlpZiAoKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpICYmICFjbWQtPnJlcGx5X3NrYikgewogCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAnJXMnXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7CiAJCXJldCA9IC1FSU87CkBAIC0yMzMsMjAgKzIyNiwyMCBAQAogCWdvdG8gb3V0OwogCiBjYW5jZWw6Ci0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikgewotCQlzdHJ1Y3QgaXdsX2NtZCAqcWNtZDsKLQotCQkvKiBDYW5jZWwgdGhlIENNRF9XQU5UX1NLQiBmbGFnIGZvciB0aGUgY21kIGluIHRoZQorCWlmIChjbWQtPmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7CisJCS8qCisJCSAqIENhbmNlbCB0aGUgQ01EX1dBTlRfU0tCIGZsYWcgZm9yIHRoZSBjbWQgaW4gdGhlCiAJCSAqIFRYIGNtZCBxdWV1ZS4gT3RoZXJ3aXNlIGluIGNhc2UgdGhlIGNtZCBjb21lcwogCQkgKiBpbiBsYXRlciwgaXQgd2lsbCBwb3NzaWJseSBzZXQgYW4gaW52YWxpZAotCQkgKiBhZGRyZXNzIChjbWQtPm1ldGEuc291cmNlKS4gKi8KLQkJcWNtZCA9IHByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pZHhdOwotCQlxY21kLT5tZXRhLmZsYWdzICY9IH5DTURfV0FOVF9TS0I7CisJCSAqIGFkZHJlc3MgKGNtZC0+bWV0YS5zb3VyY2UpLgorCQkgKi8KKwkJcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5tZXRhW2NtZF9pZHhdLmZsYWdzICY9CisJCQkJCQkJfkNNRF9XQU5UX1NLQjsKIAl9CiBmYWlsOgotCWlmIChjbWQtPm1ldGEudS5za2IpIHsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kLT5tZXRhLnUuc2tiKTsKLQkJY21kLT5tZXRhLnUuc2tiID0gTlVMTDsKKwlpZiAoY21kLT5yZXBseV9za2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoY21kLT5yZXBseV9za2IpOworCQljbWQtPnJlcGx5X3NrYiA9IE5VTEw7CiAJfQogb3V0OgogCWNsZWFyX2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7CkBAIC0yNTYsNyArMjQ5LDcgQEAKIAogaW50IGl3bF9zZW5kX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCkKIHsKLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKQorCWlmIChjbWQtPmZsYWdzICYgQ01EX0FTWU5DKQogCQlyZXR1cm4gaXdsX3NlbmRfY21kX2FzeW5jKHByaXYsIGNtZCk7CiAKIAlyZXR1cm4gaXdsX3NlbmRfY21kX3N5bmMocHJpdiwgY21kKTsKQEAgLTI3Nyw5ICsyNzAsOSBAQAogCiBpbnQgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICB1OCBpZCwgdTE2IGxlbiwgY29uc3Qgdm9pZCAqZGF0YSwKLQkJCSAgIGludCAoKmNhbGxiYWNrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgIHN0cnVjdCBpd2xfY21kICpjbWQsCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpKQorCQkJICAgdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSAgICBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpKQogewogCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBpZCwKQEAgLTI4Nyw4ICsyODAsOCBAQAogCQkuZGF0YSA9IGRhdGEsCiAJfTsKIAotCWNtZC5tZXRhLmZsYWdzIHw9IENNRF9BU1lOQzsKLQljbWQubWV0YS51LmNhbGxiYWNrID0gY2FsbGJhY2s7CisJY21kLmZsYWdzIHw9IENNRF9BU1lOQzsKKwljbWQuY2FsbGJhY2sgPSBjYWxsYmFjazsKIAogCXJldHVybiBpd2xfc2VuZF9jbWRfYXN5bmMocHJpdiwgJmNtZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKaW5kZXggYTEzMjhjMy4uYmQwYjEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaApAQCAtMTQ1LDQgKzE0NSwyNSBAQAogI2RlZmluZSBpZWVlODAyMTFfc3RvcF9xdWV1ZSBET19OT1RfVVNFX2llZWU4MDIxMV9zdG9wX3F1ZXVlCiAjZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlIERPX05PVF9VU0VfaWVlZTgwMjExX3dha2VfcXVldWUKIAorc3RhdGljIGlubGluZSB2b2lkIGl3bF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWNsZWFyX2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gdUNvZGUvTklDIHRvIGhvc3QgKi8KKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOworCisJLyogYWNrbm93bGVkZ2UvY2xlYXIvcmVzZXQgYW55IGludGVycnVwdHMgc3RpbGwgcGVuZGluZworCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhmZmZmZmZmZik7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkRpc2FibGVkIGludGVycnVwdHNcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlJV0xfREVCVUdfSVNSKHByaXYsICJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKKwlzZXRfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCBwcml2LT5pbnRhX21hc2spOworfQorCiAjZW5kaWYJCQkJLyogX19pd2xfaGVscGVyc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKaW5kZXggNWU2NDI1Mi4uZjQyMGM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKLQl1MTYgdHB0OworCXUxNiB0cHQ7CS8qIE1iL3MgKi8KIAl1OCBvbl90aW1lOwogCXU4IG9mZl90aW1lOwogfSBibGlua190YmxbXSA9CkBAIC05MSw4ICs5MSw4IEBACiAJCS5pZCA9IFJFUExZX0xFRFNfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGVkX2NtZCksCiAJCS5kYXRhID0gbGVkX2NtZCwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfQVNZTkMsCi0JCS5tZXRhLnUuY2FsbGJhY2sgPSBOVUxMLAorCQkuZmxhZ3MgPSBDTURfQVNZTkMsCisJCS5jYWxsYmFjayA9IE5VTEwsCiAJfTsKIAl1MzIgcmVnOwogCkBAIC0xMDQsNyArMTA0LDcgQEAKIH0KIAogLyogU2V0IGxlZCBwYXR0ZXJuIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfcGF0dGVybihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQsCitzdGF0aWMgaW50IGl3bF9sZWRfcGF0dGVybihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgaXdsX2xlZF9jbWQgbGVkX2NtZCA9IHsKQEAgLTEyMSw3ICsxMjEsNyBAQAogfQogCiAvKiBTZXQgbGVkIHJlZ2lzdGVyIG9mZiAqLwotc3RhdGljIGludCBpd2w0OTY1X2xlZF9vbl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQorc3RhdGljIGludCBpd2xfbGVkX29uX3JlZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9uICVkXG4iLCBsZWRfaWQpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09OKTsKQEAgLTEzMCw3ICsxMzAsNyBAQAogCiAjaWYgMAogLyogU2V0IGxlZCBvbiBjb21tYW5kICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsX2xlZF9vbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJc3RydWN0IGl3bF9sZWRfY21kIGxlZF9jbWQgPSB7CiAJCS5pZCA9IGxlZF9pZCwKQEAgLTE0Miw3ICsxNDIsNyBAQAogfQogCiAvKiBTZXQgbGVkIG9mZiBjb21tYW5kICovCi1pbnQgaXdsNDk2NV9sZWRfb2ZmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK2ludCBpd2xfbGVkX29mZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJc3RydWN0IGl3bF9sZWRfY21kIGxlZF9jbWQgPSB7CiAJCS5pZCA9IGxlZF9pZCwKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAKIC8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCi1zdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQorc3RhdGljIGludCBpd2xfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewogCUlXTF9ERUJVR19MRUQocHJpdiwgIkxFRCBSZWcgb2ZmXG4iKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfTEVEX1JFRywgQ1NSX0xFRF9SRUdfVFJVTl9PRkYpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiB7CiAJSVdMX0RFQlVHX0xFRChwcml2LCAiQXNzb2NpYXRlZFxuIik7CiAJcHJpdi0+YWxsb3dfYmxpbmtpbmcgPSAxOwotCXJldHVybiBpd2w0OTY1X2xlZF9vbl9yZWcocHJpdiwgbGVkX2lkKTsKKwlyZXR1cm4gaXdsX2xlZF9vbl9yZWcocHJpdiwgbGVkX2lkKTsKIH0KIHN0YXRpYyBpbnQgaXdsX2xlZF9kaXNhc3NvY2lhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewpAQCAtMjY0LDEzICsyNjQsMTYgQEAKIAogCiAvKgotICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3QgMiBzZWMgVHgvUnggYWN0aXZpdGllcworICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3Qgc2Vjb25kIFR4L1J4IGFjdGl2aXRpZXMKICAqLwogc3RhdGljIGludCBpd2xfZ2V0X2JsaW5rX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCBpOwotCXU2NCBjdXJyZW50X3RwdCA9IHByaXYtPnR4X3N0YXRzWzJdLmJ5dGVzOwotCS8qIEZJWE1FOiArIHByaXYtPnJ4X3N0YXRzWzJdLmJ5dGVzOyAqLworCS8qIGNvdW50IGJvdGggdHggYW5kIHJ4IHRyYWZmaWMgdG8gYmUgYWJsZSB0bworCSAqIGhhbmRsZSB0cmFmZmljIGluIGVpdGhlciBkaXJlY3Rpb24KKwkgKi8KKwl1NjQgY3VycmVudF90cHQgPSBwcml2LT50eF9zdGF0cy5kYXRhX2J5dGVzICsKKwkJCSAgcHJpdi0+cnhfc3RhdHMuZGF0YV9ieXRlczsKIAlzNjQgdHB0ID0gY3VycmVudF90cHQgLSBwcml2LT5sZWRfdHB0OwogCiAJaWYgKHRwdCA8IDApIC8qIHdyYXBhcm91bmQgKi8KQEAgLTMxNCw3ICszMTcsNyBAQAogCQlwcml2LT5sYXN0X2JsaW5rX3RpbWUgPSAwOwogCQlpZiAocHJpdi0+bGFzdF9ibGlua19yYXRlICE9IElXTF9TT0xJRF9CTElOS19JRFgpIHsKIAkJCXByaXYtPmxhc3RfYmxpbmtfcmF0ZSA9IElXTF9TT0xJRF9CTElOS19JRFg7Ci0JCQlpd2w0OTY1X2xlZF9wYXR0ZXJuKHByaXYsIElXTF9MRURfTElOSywKKwkJCWl3bF9sZWRfcGF0dGVybihwcml2LCBJV0xfTEVEX0xJTkssCiAJCQkJCSAgICBJV0xfU09MSURfQkxJTktfSURYKTsKIAkJfQogCQlyZXR1cm47CkBAIC0zMjgsMTIgKzMzMSwxMSBAQAogCiAJLyogY2FsbCBvbmx5IGlmIGJsaW5rIHJhdGUgY2hhbmdlICovCiAJaWYgKGJsaW5rX2lkeCAhPSBwcml2LT5sYXN0X2JsaW5rX3JhdGUpCi0JCWl3bDQ5NjVfbGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLCBibGlua19pZHgpOworCQlpd2xfbGVkX3BhdHRlcm4ocHJpdiwgSVdMX0xFRF9MSU5LLCBibGlua19pZHgpOwogCiAJcHJpdi0+bGFzdF9ibGlua190aW1lID0gamlmZmllczsKIAlwcml2LT5sYXN0X2JsaW5rX3JhdGUgPSBibGlua19pZHg7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bF9sZWRzX2JhY2tncm91bmQpOwogCiAvKiBSZWdpc3RlciBhbGwgbGVkIGhhbmRsZXIgKi8KIGludCBpd2xfbGVkc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC0zNTEsOCArMzUzLDggQEAKIAkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOjpyYWRpbyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCi0JcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2w0OTY1X2xlZF9vbl9yZWc7Ci0JcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb2ZmID0gaXdsNDk2NV9sZWRfb2ZmX3JlZzsKKwlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bF9sZWRfb25fcmVnOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubGVkX29mZiA9IGl3bF9sZWRfb2ZmX3JlZzsKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9wYXR0ZXJuID0gTlVMTDsKIAogCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXSwKQEAgLTM4Niw3ICszODgsNyBAQAogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfb24gPSBpd2xfbGVkX2Fzc29jaWF0ZWQ7CiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5sZWRfb2ZmID0gaXdsX2xlZF9hc3NvY2lhdGVkOwotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX3BhdHRlcm4gPSBpd2w0OTY1X2xlZF9wYXR0ZXJuOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubGVkX3BhdHRlcm4gPSBpd2xfbGVkX3BhdHRlcm47CiAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXRfZmFpbDsKQEAgLTQwMSw3ICs0MDMsNyBAQAogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfb24gPSBpd2xfbGVkX2Fzc29jaWF0ZWQ7CiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5sZWRfb2ZmID0gaXdsX2xlZF9hc3NvY2lhdGVkOwotCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX3BhdHRlcm4gPSBpd2w0OTY1X2xlZF9wYXR0ZXJuOworCXByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubGVkX3BhdHRlcm4gPSBpd2xfbGVkX3BhdHRlcm47CiAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXRfZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCmluZGV4IGYyZWEzZjAuLjRlYzZhODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwpAQCAtMzYsMjUgKzM2LDQxIEBACiAjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgogI2luY2x1ZGUgIml3bC1kZXYuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1pby5oIgogI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1wb3dlci5oIgogCiAvKgotICogU2V0dGluZyBwb3dlciBsZXZlbCBhbGxvdyB0aGUgY2FyZCB0byBnbyB0byBzbGVlcCB3aGVuIG5vdCBidXN5LgorICogU2V0dGluZyBwb3dlciBsZXZlbCBhbGxvd3MgdGhlIGNhcmQgdG8gZ28gdG8gc2xlZXAgd2hlbiBub3QgYnVzeS4KICAqCi0gKiBUaGUgcG93ZXIgbGV2ZWwgaXMgc2V0IHRvIElOREVYXzEgKHRoZSBsZWFzdCBkZWVwIHN0YXRlKSBieQotICogZGVmYXVsdCwgYW5kIHdpbGwsIGluIHRoZSBmdXR1cmUsIGJlIHRoZSBkZWVwZXN0IHN0YXRlIHVubGVzcwotICogb3RoZXJ3aXNlIHJlcXVpcmVkIGJ5IHBtX3FvcyBuZXR3b3JrIGxhdGVuY3kgcmVxdWlyZW1lbnRzLgotICoKLSAqIFVzaW5nIElOREVYXzEgd2l0aG91dCBwbV9xb3MgaXMgb2sgYmVjYXVzZSBtYWM4MDIxMSB3aWxsIGRpc2FibGUKLSAqIFBTIHdoZW4gZXZlbiBjaGVja2luZyBldmVyeSBiZWFjb24gZm9yIHRoZSBUSU0gYml0IHdvdWxkIGV4Y2VlZAotICogdGhlIHJlcXVpcmVkIGxhdGVuY3kuCisgKiBXZSBjYWxjdWxhdGUgYSBzbGVlcCBjb21tYW5kIGJhc2VkIG9uIHRoZSByZXF1aXJlZCBsYXRlbmN5LCB3aGljaAorICogd2UgZ2V0IGZyb20gbWFjODAyMTEuIEluIG9yZGVyIHRvIGhhbmRsZSB0aGVybWFsIHRocm90dGxpbmcsIHdlIGNhbgorICogYWxzbyB1c2UgcHJlLWRlZmluZWQgcG93ZXIgbGV2ZWxzLgogICovCiAKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzBfTUFYICAoMikKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzFfTUFYICAoMTApCisvKgorICogRm9yIG5vdywga2VlcCB1c2luZyBwb3dlciBsZXZlbCAxIGluc3RlYWQgb2YgYXV0b21hdGljYWxseQorICogYWRqdXN0aW5nIC4uLgorICovCitib29sIG5vX3NsZWVwX2F1dG9hZGp1c3QgPSB0cnVlOworbW9kdWxlX3BhcmFtKG5vX3NsZWVwX2F1dG9hZGp1c3QsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhub19zbGVlcF9hdXRvYWRqdXN0LAorCQkgImRvbid0IGF1dG9tYXRpY2FsbHkgYWRqdXN0IHNsZWVwIGxldmVsICIKKwkJICJhY2NvcmRpbmcgdG8gbWF4aW11bSBuZXR3b3JrIGxhdGVuY3kiKTsKIAorLyoKKyAqIFRoaXMgZGVmaW5lcyB0aGUgb2xkIHBvd2VyIGxldmVscy4gVGhleSBhcmUgc3RpbGwgdXNlZCBieSBkZWZhdWx0CisgKiAobGV2ZWwgMSkgYW5kIGZvciB0aGVybWFsIHRocm90dGxlIChsZXZlbHMgMyB0aHJvdWdoIDUpCisgKi8KKworc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkgeworCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgY21kOworCXU4IG5vX2R0aW07Cit9OworCisjZGVmaW5lIElXTF9EVElNX1JBTkdFXzBfTUFYCTIKKyNkZWZpbmUgSVdMX0RUSU1fUkFOR0VfMV9NQVgJMTAKIAogI2RlZmluZSBOT1NMUCBjcHVfdG9fbGUxNigwKSwgMCwgMAogI2RlZmluZSBTTFAgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0ssIDAsIDAKQEAgLTY2LDkgKzgyLDggQEAKIAkJCQkgICAgIGNwdV90b19sZTMyKFgzKSwgXAogCQkJCSAgICAgY3B1X3RvX2xlMzIoWDQpfQogLyogZGVmYXVsdCBwb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIpIHRhYmxlIHZhbHVlcyAqLwotLyogZm9yIERUSU0gcGVyaW9kIDAgdGhyb3VnaCBJV0xfUE9XRVJfUkFOR0VfMF9NQVggKi8KKy8qIGZvciBEVElNIHBlcmlvZCAwIHRocm91Z2ggSVdMX0RUSU1fUkFOR0VfMF9NQVggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8wW0lXTF9QT1dFUl9OVU1dID0gewotCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAogCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDIsIDIsIDB4RkYpfSwgMH0sCiAJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMSwgMiwgMiwgMiwgMHhGRil9LCAwfSwKIAl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDIsIDIsIDIsIDB4RkYpfSwgMH0sCkBAIC03Nyw5ICs5Miw4IEBACiB9OwogCiAKLS8qIGZvciBEVElNIHBlcmlvZCBJV0xfUE9XRVJfUkFOR0VfMF9NQVggKyAxIHRocm91Z2ggSVdMX1BPV0VSX1JBTkdFXzFfTUFYICovCisvKiBmb3IgRFRJTSBwZXJpb2QgSVdMX0RUSU1fUkFOR0VfMF9NQVggKyAxIHRocm91Z2ggSVdMX0RUSU1fUkFOR0VfMV9NQVggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8xW0lXTF9QT1dFUl9OVU1dID0gewotCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAogCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDMsIDQsIDQpfSwgMH0sCiAJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMSwgMiwgMywgNCwgNyl9LCAwfSwKIAl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDQsIDYsIDcsIDkpfSwgMH0sCkBAIC04Nyw5ICsxMDEsOCBAQAogCXt7U0xQLCBTTFBfVE9VVCgyNSksIFNMUF9UT1VUKDI1KSwgU0xQX1ZFQygyLCA0LCA3LCAxMCwgMTApfSwgMn0KIH07CiAKLS8qIGZvciBEVElNIHBlcmlvZCA+IElXTF9QT1dFUl9SQU5HRV8xX01BWCAqLworLyogZm9yIERUSU0gcGVyaW9kID4gSVdMX0RUSU1fUkFOR0VfMV9NQVggKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSByYW5nZV8yW0lXTF9QT1dFUl9OVU1dID0gewotCXt7Tk9TTFAsIFNMUF9UT1VUKDApLCBTTFBfVE9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAogCXt7U0xQLCBTTFBfVE9VVCgyMDApLCBTTFBfVE9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDMsIDQsIDB4RkYpfSwgMH0sCiAJe3tTTFAsIFNMUF9UT1VUKDIwMCksIFNMUF9UT1VUKDMwMCksIFNMUF9WRUMoMiwgNCwgNiwgNywgMHhGRil9LCAwfSwKIAl7e1NMUCwgU0xQX1RPVVQoNTApLCBTTFBfVE9VVCgxMDApLCBTTFBfVkVDKDIsIDcsIDksIDksIDB4RkYpfSwgMH0sCkBAIC05Nyw4MCArMTEwLDI5IEBACiAJe3tTTFAsIFNMUF9UT1VUKDI1KSwgU0xQX1RPVVQoMjUpLCBTTFBfVkVDKDQsIDcsIDEwLCAxMCwgMHhGRil9LCAwfQogfTsKIAotCi0vKiBzZXQgY2FyZCBwb3dlciBjb21tYW5kICovCi1zdGF0aWMgaW50IGl3bF9zZXRfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCB2b2lkICpjbWQpCitzdGF0aWMgdm9pZCBpd2xfc3RhdGljX3NsZWVwX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCwKKwkJCQkgZW51bSBpd2xfcG93ZXJfbGV2ZWwgbHZsLCBpbnQgcGVyaW9kKQogewotCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFBPV0VSX1RBQkxFX0NNRCwKLQkJCQlzaXplb2Yoc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCksIGNtZCk7Ci19Ci0KLS8qIGluaXRpYWxpemUgdG8gZGVmYXVsdCAqLwotc3RhdGljIHZvaWQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7Ci0JaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF9wb3dlcl92ZWNfZW50cnkpICogSVdMX1BPV0VSX05VTTsKLQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQ7Ci0JaW50IGk7Ci0JdTE2IGxjdGw7Ci0KLQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKLQotCXBvd19kYXRhID0gJnByaXYtPnBvd2VyX2RhdGE7Ci0KLQltZW1zZXQocG93X2RhdGEsIDAsIHNpemVvZigqcG93X2RhdGEpKTsKLQotCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8wWzBdLCAmcmFuZ2VfMFswXSwgc2l6ZSk7Ci0JbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKLQltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMlswXSwgJnJhbmdlXzJbMF0sIHNpemUpOwotCi0JbGN0bCA9IGl3bF9wY2llX2xpbmtfY3RsKHByaXYpOwotCi0JSVdMX0RFQlVHX1BPV0VSKHByaXYsICJhZGp1c3QgcG93ZXIgY29tbWFuZCBmbGFnc1xuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX05VTTsgaSsrKSB7Ci0JCWNtZCA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbaV0uY21kOwotCi0JCWlmIChsY3RsICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTikKLQkJCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9QQ0lfUE1fTVNLOwotCQllbHNlCi0JCQljbWQtPmZsYWdzIHw9IElXTF9QT1dFUl9QQ0lfUE1fTVNLOwotCX0KLX0KLQotLyogYWRqdXN0IHBvd2VyIGNvbW1hbmQgYWNjb3JkaW5nIHRvIERUSU0gcGVyaW9kIGFuZCBwb3dlciBsZXZlbCovCi1zdGF0aWMgaW50IGl3bF91cGRhdGVfcG93ZXJfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQsIHUxNiBtb2RlKQotewotCXN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5ICpyYW5nZTsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7Ci0JaW50IGk7Ci0JdTMyIG1heF9zbGVlcCA9IDA7Ci0JdTggcGVyaW9kOworCWNvbnN0IHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5ICp0YWJsZTsKKwlpbnQgbWF4X3NsZWVwLCBpOwogCWJvb2wgc2tpcDsKIAotCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXRhYmxlID0gcmFuZ2VfMjsKKwlpZiAocGVyaW9kIDwgSVdMX0RUSU1fUkFOR0VfMV9NQVgpCisJCXRhYmxlID0gcmFuZ2VfMTsKKwlpZiAocGVyaW9kIDwgSVdMX0RUSU1fUkFOR0VfMF9NQVgpCisJCXRhYmxlID0gcmFuZ2VfMDsKIAotCXBvd19kYXRhID0gJnByaXYtPnBvd2VyX2RhdGE7CisJQlVHX09OKGx2bCA8IDAgfHwgbHZsID49IElXTF9QT1dFUl9OVU0pOwogCi0JaWYgKHBvd19kYXRhLT5kdGltX3BlcmlvZCA8PSBJV0xfUE9XRVJfUkFOR0VfMF9NQVgpCi0JCXJhbmdlID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFswXTsKLQllbHNlIGlmIChwb3dfZGF0YS0+ZHRpbV9wZXJpb2QgPD0gSVdMX1BPV0VSX1JBTkdFXzFfTUFYKQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF07Ci0JZWxzZQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzJbMF07Ci0KLQlwZXJpb2QgPSBwb3dfZGF0YS0+ZHRpbV9wZXJpb2Q7Ci0JbWVtY3B5KGNtZCwgJnJhbmdlW21vZGVdLmNtZCwgc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQpKTsKKwkqY21kID0gdGFibGVbbHZsXS5jbWQ7CiAKIAlpZiAocGVyaW9kID09IDApIHsKLQkJcGVyaW9kID0gMTsKIAkJc2tpcCA9IGZhbHNlOworCQlwZXJpb2QgPSAxOwogCX0gZWxzZSB7Ci0JCXNraXAgPSAhIXJhbmdlW21vZGVdLm5vX2R0aW07CisJCXNraXAgPSAhIXRhYmxlW2x2bF0ubm9fZHRpbTsKIAl9CiAKIAlpZiAoc2tpcCkgewpAQCAtMTc4LDcgKzE0MCw3IEBACiAJCW1heF9zbGVlcCA9IGxlMzJfdG9fY3B1KHNscF9pdHJ2bCk7CiAJCWlmIChtYXhfc2xlZXAgPT0gMHhGRikKIAkJCW1heF9zbGVlcCA9IHBlcmlvZCAqIChza2lwICsgMSk7Ci0JCWVsc2UgaWYgKG1heF9zbGVlcCA+ICBwZXJpb2QpCisJCWVsc2UgaWYgKG1heF9zbGVlcCA+IHBlcmlvZCkKIAkJCW1heF9zbGVlcCA9IChsZTMyX3RvX2NwdShzbHBfaXRydmwpIC8gcGVyaW9kKSAqIHBlcmlvZDsKIAkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKIAl9IGVsc2UgewpAQCAtMTkwLDYgKzE1MiwxMTIgQEAKIAkJaWYgKGxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0pID4gbWF4X3NsZWVwKQogCQkJY21kLT5zbGVlcF9pbnRlcnZhbFtpXSA9IGNwdV90b19sZTMyKG1heF9zbGVlcCk7CiAKKwlpZiAocHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0pCisJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CisJZWxzZQorCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfUENJX1BNX01TSzsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiU2xlZXAgY29tbWFuZCBmb3IgaW5kZXggJWRcbiIsIGx2bCArIDEpOworfQorCisvKiBkZWZhdWx0IFRoZXJtYWwgVGhyb3R0bGluZyB0cmFuc2FjdGlvbiB0YWJsZQorICogQ3VycmVudCBzdGF0ZSAgIHwgICAgICAgICBUaHJvdHRsaW5nIERvd24gICAgICAgICAgICAgICB8ICBUaHJvdHRsaW5nIFVwCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIE54dCBTdGF0ZSAgQ29uZGl0aW9uIE54dCBTdGF0ZSBDb25kaXRpb24gTnh0IFN0YXRlCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgSVdMX1RJXzAgICAgIFQgPj0gMTE1ICAgQ1RfS0lMTCAgMTE1PlQ+PTEwNSAgIFRJXzEgICAgICBOL0EgICAgICBOL0EKKyAqICAgICBJV0xfVElfMSAgICAgVCA+PSAxMTUgICBDVF9LSUxMICAxMTU+VD49MTEwICAgVElfMiAgICAgVDw9OTUgICAgIFRJXzAKKyAqICAgICBJV0xfVElfMiAgICAgVCA+PSAxMTUgICBDVF9LSUxMICAgICAgICAgICAgICAgICAgICAgICAgVDw9MTAwICAgIFRJXzEKKyAqICAgIElXTF9DVF9LSUxMICAgICAgTi9BICAgICAgIE4vQSAgICAgICBOL0EgICAgICAgIE4vQSAgICAgVDw9OTUgICAgIFRJXzAKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfdHRfdHJhbnMgdHRfcmFuZ2VfMFtJV0xfVElfU1RBVEVfTUFYIC0gMV0gPSB7CisJe0lXTF9USV8wLCBJV0xfQUJTT0xVVEVfWkVSTywgMTA0fSwKKwl7SVdMX1RJXzEsIDEwNSwgQ1RfS0lMTF9USFJFU0hPTER9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9USFJFU0hPTEQgKyAxLCBJV0xfQUJTT0xVVEVfTUFYfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3R0X3RyYW5zIHR0X3JhbmdlXzFbSVdMX1RJX1NUQVRFX01BWCAtIDFdID0geworCXtJV0xfVElfMCwgSVdMX0FCU09MVVRFX1pFUk8sIDk1fSwKKwl7SVdMX1RJXzIsIDExMCwgQ1RfS0lMTF9USFJFU0hPTER9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9USFJFU0hPTEQgKyAxLCBJV0xfQUJTT0xVVEVfTUFYfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3R0X3RyYW5zIHR0X3JhbmdlXzJbSVdMX1RJX1NUQVRFX01BWCAtIDFdID0geworCXtJV0xfVElfMSwgSVdMX0FCU09MVVRFX1pFUk8sIDEwMH0sCisJe0lXTF9USV9DVF9LSUxMLCBDVF9LSUxMX1RIUkVTSE9MRCArIDEsIElXTF9BQlNPTFVURV9NQVh9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9USFJFU0hPTEQgKyAxLCBJV0xfQUJTT0xVVEVfTUFYfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX3R0X3RyYW5zIHR0X3JhbmdlXzNbSVdMX1RJX1NUQVRFX01BWCAtIDFdID0geworCXtJV0xfVElfMCwgSVdMX0FCU09MVVRFX1pFUk8sIENUX0tJTExfRVhJVF9USFJFU0hPTER9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9FWElUX1RIUkVTSE9MRCArIDEsIElXTF9BQlNPTFVURV9NQVh9LAorCXtJV0xfVElfQ1RfS0lMTCwgQ1RfS0lMTF9FWElUX1RIUkVTSE9MRCArIDEsIElXTF9BQlNPTFVURV9NQVh9Cit9OworCisvKiBBZHZhbmNlIFRoZXJtYWwgVGhyb3R0bGluZyBkZWZhdWx0IHJlc3RyaWN0aW9uIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiByZXN0cmljdGlvbl9yYW5nZVtJV0xfVElfU1RBVEVfTUFYXSA9IHsKKwl7SVdMX0FOVF9PS19NVUxUSSwgSVdMX0FOVF9PS19NVUxUSSwgdHJ1ZSB9LAorCXtJV0xfQU5UX09LX1NJTkdMRSwgSVdMX0FOVF9PS19NVUxUSSwgdHJ1ZSB9LAorCXtJV0xfQU5UX09LX1NJTkdMRSwgSVdMX0FOVF9PS19TSU5HTEUsIGZhbHNlIH0sCisJe0lXTF9BTlRfT0tfTk9ORSwgSVdMX0FOVF9PS19OT05FLCBmYWxzZSB9Cit9OworCisKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9zbGVlcF9jYW1fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kKQoreworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisKKwlpZiAocHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0pCisJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CisKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNsZWVwIGNvbW1hbmQgZm9yIENBTVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9maWxsX3NsZWVwX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQsCisJCQkJICAgICBpbnQgZHlucHNfbXMsIGludCB3YWtldXBfcGVyaW9kKQoreworCS8qCisJICogVGhlc2UgYXJlIHRoZSBvcmlnaW5hbCBwb3dlciBsZXZlbCAzIHNsZWVwIHN1Y2Nlc3Npb25zLiBUaGUKKwkgKiBkZXZpY2UgbWF5IGJlaGF2ZSBiZXR0ZXIgd2l0aCBzdWNoIHN1Y2Nlc3Npb24gYW5kIHdhcyBhbHNvCisJICogb25seSB0ZXN0ZWQgd2l0aCB0aGF0LiBKdXN0IGxpa2UgdGhlIG9yaWdpbmFsIHNsZWVwIGNvbW1hbmRzLAorCSAqIGFsc28gYWRqdXN0IHRoZSBzdWNjZXNzaW9uIGhlcmUgdG8gdGhlIHdha2V1cF9wZXJpb2QgYmVsb3cuCisJICogVGhlIHJhbmdlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBzbGVlcCBjb21tYW5kcywgMC0yLCAzLTkKKwkgKiBhbmQgPjEwLCB3aGljaCBpcyBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgRFRJTSBpbnRlcnZhbCBmb3IKKwkgKiB0aGUgc2xlZXAgaW5kZXggYnV0IGhlcmUgd2UgdXNlIHRoZSB3YWtldXAgcGVyaW9kIHNpbmNlIHRoYXQKKwkgKiBpcyB3aGF0IHdlIG5lZWQgdG8gZG8gZm9yIHRoZSBsYXRlbmN5IHJlcXVpcmVtZW50cy4KKwkgKi8KKwlzdGF0aWMgY29uc3QgdTggc2xwX3N1Y2NfcjBbSVdMX1BPV0VSX1ZFQ19TSVpFXSA9IHsgMiwgMiwgMiwgMiwgMiB9OworCXN0YXRpYyBjb25zdCB1OCBzbHBfc3VjY19yMVtJV0xfUE9XRVJfVkVDX1NJWkVdID0geyAyLCA0LCA2LCA3LCA5IH07CisJc3RhdGljIGNvbnN0IHU4IHNscF9zdWNjX3IyW0lXTF9QT1dFUl9WRUNfU0laRV0gPSB7IDIsIDcsIDksIDksIDB4RkYgfTsKKwljb25zdCB1OCAqc2xwX3N1Y2MgPSBzbHBfc3VjY19yMDsKKwlpbnQgaTsKKworCWlmICh3YWtldXBfcGVyaW9kID4gSVdMX0RUSU1fUkFOR0VfMF9NQVgpCisJCXNscF9zdWNjID0gc2xwX3N1Y2NfcjE7CisJaWYgKHdha2V1cF9wZXJpb2QgPiBJV0xfRFRJTV9SQU5HRV8xX01BWCkKKwkJc2xwX3N1Y2MgPSBzbHBfc3VjY19yMjsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisKKwljbWQtPmZsYWdzID0gSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sgfAorCQkgICAgIElXTF9QT1dFUl9GQVNUX1BEOyAvKiBubyB1c2Ugc2VlaW5nIGZyYW1lcyBmb3Igb3RoZXJzICovCisKKwlpZiAocHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0pCisJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CisKKwljbWQtPnJ4X2RhdGFfdGltZW91dCA9IGNwdV90b19sZTMyKDEwMDAgKiBkeW5wc19tcyk7CisJY21kLT50eF9kYXRhX3RpbWVvdXQgPSBjcHVfdG9fbGUzMigxMDAwICogZHlucHNfbXMpOworCisJZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9WRUNfU0laRTsgaSsrKQorCQljbWQtPnNsZWVwX2ludGVydmFsW2ldID0KKwkJCWNwdV90b19sZTMyKG1pbl90KGludCwgc2xwX3N1Y2NbaV0sIHdha2V1cF9wZXJpb2QpKTsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQXV0b21hdGljIHNsZWVwIGNvbW1hbmRcbiIpOworfQorCitzdGF0aWMgaW50IGl3bF9zZXRfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kICpjbWQpCit7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTZW5kaW5nIHBvd2VyL3NsZWVwIGNvbW1hbmRcbiIpOwogCUlXTF9ERUJVR19QT1dFUihwcml2LCAiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwogCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwogCUlXTF9ERUJVR19QT1dFUihwcml2LCAiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwpAQCAtMjAwLDc5ICsyNjgsNTg3IEBACiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzNdKSwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbNF0pKTsKIAotCXJldHVybiAwOworCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFBPV0VSX1RBQkxFX0NNRCwKKwkJCQlzaXplb2Yoc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCksIGNtZCk7CiB9CiAKIAotLyoKLSAqIGNvbXB1dGUgdGhlIGZpbmFsIHBvd2VyIG1vZGUgaW5kZXgKLSAqLwogaW50IGl3bF9wb3dlcl91cGRhdGVfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZm9yY2UpCiB7Ci0Jc3RydWN0IGl3bF9wb3dlcl9tZ3IgKnNldHRpbmcgPSAmKHByaXYtPnBvd2VyX2RhdGEpOwogCWludCByZXQgPSAwOwotCXUxNiB1bmluaXRpYWxpemVkX3ZhcihmaW5hbF9tb2RlKTsKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJYm9vbCBlbmFibGVkID0gKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkJCShwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKTsKIAlib29sIHVwZGF0ZV9jaGFpbnM7CisJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCBjbWQ7CisJaW50IGR0aW1wZXI7CiAKIAkvKiBEb24ndCB1cGRhdGUgdGhlIFJYIGNoYWluIHdoZW4gY2hhaW4gbm9pc2UgY2FsaWJyYXRpb24gaXMgcnVubmluZyAqLwogCXVwZGF0ZV9jaGFpbnMgPSBwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9ET05FIHx8CiAJCQlwcml2LT5jaGFpbl9ub2lzZV9kYXRhLnN0YXRlID09IElXTF9DSEFJTl9OT0lTRV9BTElWRTsKIAotCWZpbmFsX21vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKKwlpZiAocHJpdi0+dmlmKQorCQlkdGltcGVyID0gcHJpdi0+dmlmLT5ic3NfY29uZi5kdGltX3BlcmlvZDsKKwllbHNlCisJCWR0aW1wZXIgPSAxOwogCi0JaWYgKHNldHRpbmctPnBvd2VyX2Rpc2FibGVkKQotCQlmaW5hbF9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOworCS8qIFRUIHBvd2VyIHNldHRpbmcgb3ZlcndyaXRlcyBldmVyeXRoaW5nICovCisJaWYgKHR0LT5zdGF0ZSA+PSBJV0xfVElfMSkKKwkJaXdsX3N0YXRpY19zbGVlcF9jbWQocHJpdiwgJmNtZCwgdHQtPnR0X3Bvd2VyX21vZGUsIGR0aW1wZXIpOworCWVsc2UgaWYgKCFlbmFibGVkKQorCQlpd2xfcG93ZXJfc2xlZXBfY2FtX2NtZChwcml2LCAmY21kKTsKKwllbHNlIGlmIChwcml2LT5wb3dlcl9kYXRhLmRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlID49IDApCisJCWl3bF9zdGF0aWNfc2xlZXBfY21kKHByaXYsICZjbWQsCisJCQkJICAgICBwcml2LT5wb3dlcl9kYXRhLmRlYnVnX3NsZWVwX2xldmVsX292ZXJyaWRlLAorCQkJCSAgICAgZHRpbXBlcik7CisJZWxzZSBpZiAobm9fc2xlZXBfYXV0b2FkanVzdCkKKwkJaXdsX3N0YXRpY19zbGVlcF9jbWQocHJpdiwgJmNtZCwgSVdMX1BPV0VSX0lOREVYXzEsIGR0aW1wZXIpOworCWVsc2UKKwkJaXdsX3Bvd2VyX2ZpbGxfc2xlZXBfY21kKHByaXYsICZjbWQsCisJCQkJCSBwcml2LT5ody0+Y29uZi5keW5hbWljX3BzX3RpbWVvdXQsCisJCQkJCSBwcml2LT5ody0+Y29uZi5tYXhfc2xlZXBfcGVyaW9kKTsKIAogCWlmIChpd2xfaXNfcmVhZHlfcmYocHJpdikgJiYKLQkgICAgKChzZXR0aW5nLT5wb3dlcl9tb2RlICE9IGZpbmFsX21vZGUpIHx8IGZvcmNlKSkgewotCQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kIGNtZDsKLQotCQlpZiAoZmluYWxfbW9kZSAhPSBJV0xfUE9XRVJfTU9ERV9DQU0pCisJICAgIChtZW1jbXAoJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kLCAmY21kLCBzaXplb2YoY21kKSkgfHwgZm9yY2UpKSB7CisJCWlmIChjbWQuZmxhZ3MgJiBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSykKIAkJCXNldF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7CiAKLQkJaXdsX3VwZGF0ZV9wb3dlcl9jbWQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7Ci0JCWNtZC5rZWVwX2FsaXZlX2JlYWNvbnMgPSAwOwotCi0JCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9JTkRFWF81KQotCQkJY21kLmZsYWdzIHw9IElXTF9QT1dFUl9GQVNUX1BEOwotCiAJCXJldCA9IGl3bF9zZXRfcG93ZXIocHJpdiwgJmNtZCk7CisJCWlmICghcmV0KSB7CisJCQlpZiAoIShjbWQuZmxhZ3MgJiBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSykpCisJCQkJY2xlYXJfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwogCi0JCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9NT0RFX0NBTSkKLQkJCWNsZWFyX2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKLQotCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dXBkYXRlX2NoYWluX2ZsYWdzICYmIHVwZGF0ZV9jaGFpbnMpCi0JCQlwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MocHJpdik7Ci0JCWVsc2UKLQkJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQ2Fubm90IHVwZGF0ZSB0aGUgcG93ZXIsIGNoYWluIG5vaXNlICIKKwkJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MgJiYKKwkJCSAgICB1cGRhdGVfY2hhaW5zKQorCQkJCXByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncyhwcml2KTsKKwkJCWVsc2UgaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncykKKwkJCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCQkJIkNhbm5vdCB1cGRhdGUgdGhlIHBvd2VyLCBjaGFpbiBub2lzZSAiCiAJCQkJCSJjYWxpYnJhdGlvbiBydW5uaW5nOiAlZFxuIiwKIAkJCQkJcHJpdi0+Y2hhaW5fbm9pc2VfZGF0YS5zdGF0ZSk7Ci0JCWlmICghcmV0KQotCQkJc2V0dGluZy0+cG93ZXJfbW9kZSA9IGZpbmFsX21vZGU7CisJCQltZW1jcHkoJnByaXYtPnBvd2VyX2RhdGEuc2xlZXBfY21kLCAmY21kLCBzaXplb2YoY21kKSk7CisJCX0gZWxzZQorCQkJSVdMX0VSUihwcml2LCAic2V0IHBvd2VyIGZhaWwsIHJldCA9ICVkIiwgcmV0KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfdXBkYXRlX21vZGUpOwogCi0vKiBzZXQgdXNlcl9wb3dlcl9zZXR0aW5nICovCi1pbnQgaXdsX3Bvd2VyX3NldF91c2VyX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgbW9kZSkKK2Jvb2wgaXdsX2h0X2VuYWJsZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWlmIChtb2RlID49IElXTF9QT1dFUl9OVU0pCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKKwlzdHJ1Y3QgaXdsX3R0X3Jlc3RyaWN0aW9uICpyZXN0cmljdGlvbjsKIAotCXByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nID0gbW9kZTsKLQotCXJldHVybiBpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgMCk7CisJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXN0cmljdGlvbiA9IHR0LT5yZXN0cmljdGlvbiArIHR0LT5zdGF0ZTsKKwlyZXR1cm4gcmVzdHJpY3Rpb24tPmlzX2h0OwogfQotRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZSk7CitFWFBPUlRfU1lNQk9MKGl3bF9odF9lbmFibGVkKTsKKworZW51bSBpd2xfYW50ZW5uYV9vayBpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiAqcmVzdHJpY3Rpb247CisKKwlpZiAoIXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuYWR2YW5jZWRfdHQpCisJCXJldHVybiBJV0xfQU5UX09LX01VTFRJOworCXJlc3RyaWN0aW9uID0gdHQtPnJlc3RyaWN0aW9uICsgdHQtPnN0YXRlOworCXJldHVybiByZXN0cmljdGlvbi0+dHhfc3RyZWFtOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHhfYW50X3Jlc3RyaWN0aW9uKTsKKworZW51bSBpd2xfYW50ZW5uYV9vayBpd2xfcnhfYW50X3Jlc3RyaWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiAqcmVzdHJpY3Rpb247CisKKwlpZiAoIXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuYWR2YW5jZWRfdHQpCisJCXJldHVybiBJV0xfQU5UX09LX01VTFRJOworCXJlc3RyaWN0aW9uID0gdHQtPnJlc3RyaWN0aW9uICsgdHQtPnN0YXRlOworCXJldHVybiByZXN0cmljdGlvbi0+cnhfc3RyZWFtOworfQorCisjZGVmaW5lIENUX0tJTExfRVhJVF9EVVJBVElPTiAoNSkJLyogNSBzZWNvbmRzIGR1cmF0aW9uICovCisKKy8qCisgKiB0b2dnbGUgdGhlIGJpdCB0byB3YWtlIHVwIHVDb2RlIGFuZCBjaGVjayB0aGUgdGVtcGVyYXR1cmUKKyAqIGlmIHRoZSB0ZW1wZXJhdHVyZSBpcyBiZWxvdyBDVCwgdUNvZGUgd2lsbCBzdGF5IGF3YWtlIGFuZCBzZW5kIGNhcmQKKyAqIHN0YXRlIG5vdGlmaWNhdGlvbiB3aXRoIENUX0tJTEwgYml0IGNsZWFyIHRvIGluZm9ybSBUaGVybWFsIFRocm90dGxpbmcKKyAqIE1hbmFnZW1lbnQgdG8gY2hhbmdlIHN0YXRlLiBPdGhlcndpc2UsIHVDb2RlIHdpbGwgZ28gYmFjayB0byBzbGVlcAorICogd2l0aG91dCBkb2luZyBhbnl0aGluZywgZHJpdmVyIHNob3VsZCBjb250aW51ZSB0aGUgNSBzZWNvbmRzIHRpbWVyCisgKiB0byB3YWtlIHVwIHVDb2RlIGZvciB0ZW1wZXJhdHVyZSBjaGVjayB1bnRpbCB0ZW1wZXJhdHVyZSBkcm9wIGJlbG93IENUCisgKi8KK3N0YXRpYyB2b2lkIGl3bF90dF9jaGVja19leGl0X2N0X2tpbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkYXRhOworCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAodHQtPnN0YXRlID09IElXTF9USV9DVF9LSUxMKSB7CisJCWlmIChwcml2LT50aGVybWFsX3Rocm90dGxlLmN0X2tpbGxfdG9nZ2xlKSB7CisJCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCisJCQkJICAgIENTUl9VQ09ERV9EUlZfR1AxX1JFR19CSVRfQ1RfS0lMTF9FWElUKTsKKwkJCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF90b2dnbGUgPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKKwkJCQkgICAgQ1NSX1VDT0RFX0RSVl9HUDFfUkVHX0JJVF9DVF9LSUxMX0VYSVQpOworCQkJcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX3RvZ2dsZSA9IHRydWU7CisJCX0KKwkJaXdsX3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpCisJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgZmxhZ3MpOworCisJCS8qIFJlc2NoZWR1bGUgdGhlIGN0X2tpbGwgdGltZXIgdG8gb2NjdXIgaW4KKwkJICogQ1RfS0lMTF9FWElUX0RVUkFUSU9OIHNlY29uZHMgdG8gZW5zdXJlIHdlIGdldCBhCisJCSAqIHRoZXJtYWwgdXBkYXRlICovCisJCW1vZF90aW1lcigmcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX2V4aXRfdG0sIGppZmZpZXMgKworCQkJICBDVF9LSUxMX0VYSVRfRFVSQVRJT04gKiBIWik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpd2xfcGVyZm9ybV9jdF9raWxsX3Rhc2soc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgYm9vbCBzdG9wKQoreworCWlmIChzdG9wKSB7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiU3RvcCBhbGwgcXVldWVzXG4iKTsKKwkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMocHJpdi0+aHcpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCQkiU2NoZWR1bGUgNSBzZWNvbmRzIENUX0tJTEwgVGltZXJcbiIpOworCQltb2RfdGltZXIoJnByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLCBqaWZmaWVzICsKKwkJCSAgQ1RfS0lMTF9FWElUX0RVUkFUSU9OICogSFopOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiV2FrZSBhbGwgcXVldWVzXG4iKTsKKwkJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworCX0KK30KKworI2RlZmluZSBJV0xfTUlOSU1BTF9QT1dFUl9USFJFU0hPTEQJCShDVF9LSUxMX1RIUkVTSE9MRF9MRUdBQ1kpCisjZGVmaW5lIElXTF9SRURVQ0VEX1BFUkZPUk1BTkNFX1RIUkVTSE9MRF8yCSgxMDApCisjZGVmaW5lIElXTF9SRURVQ0VEX1BFUkZPUk1BTkNFX1RIUkVTSE9MRF8xCSg5MCkKKworLyoKKyAqIExlZ2FjeSB0aGVybWFsIHRocm90dGxpbmcKKyAqIDEpIEF2b2lkIE5JQyBkZXN0cnVjdGlvbiBkdWUgdG8gaGlnaCB0ZW1wZXJhdHVyZXMKKyAqCUNoaXAgd2lsbCBpZGVudGlmeSBkYW5nZXJvdXNseSBoaWdoIHRlbXBlcmF0dXJlcyB0aGF0IGNhbgorICoJaGFybSB0aGUgZGV2aWNlIGFuZCB3aWxsIHBvd2VyIGRvd24KKyAqIDIpIEF2b2lkIHRoZSBOSUMgcG93ZXIgZG93biBkdWUgdG8gaGlnaCB0ZW1wZXJhdHVyZQorICoJVGhyb3R0bGUgZWFybHkgZW5vdWdoIHRvIGxvd2VyIHRoZSBwb3dlciBjb25zdW1wdGlvbiBiZWZvcmUKKyAqCWRyYXN0aWMgc3RlcHMgYXJlIG5lZWRlZAorICovCitzdGF0aWMgdm9pZCBpd2xfbGVnYWN5X3R0X2hhbmRsZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzMzIgdGVtcCkKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJZW51bSBpd2xfdHRfc3RhdGUgb2xkX3N0YXRlOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAoKHR0LT50dF9wcmV2aW91c190ZW1wKSAmJgorCSAgICAodGVtcCA+IHR0LT50dF9wcmV2aW91c190ZW1wKSAmJgorCSAgICAoKHRlbXAgLSB0dC0+dHRfcHJldmlvdXNfdGVtcCkgPgorCSAgICBJV0xfVFRfSU5DUkVBU0VfTUFSR0lOKSkgeworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCSJUZW1wZXJhdHVyZSBpbmNyZWFzZSAlZCBkZWdyZWUgQ2Vsc2l1c1xuIiwKKwkJCSh0ZW1wIC0gdHQtPnR0X3ByZXZpb3VzX3RlbXApKTsKKwl9CisjZW5kaWYKKwlvbGRfc3RhdGUgPSB0dC0+c3RhdGU7CisJLyogaW4gQ2Vsc2l1cyAqLworCWlmICh0ZW1wID49IElXTF9NSU5JTUFMX1BPV0VSX1RIUkVTSE9MRCkKKwkJdHQtPnN0YXRlID0gSVdMX1RJX0NUX0tJTEw7CisJZWxzZSBpZiAodGVtcCA+PSBJV0xfUkVEVUNFRF9QRVJGT1JNQU5DRV9USFJFU0hPTERfMikKKwkJdHQtPnN0YXRlID0gSVdMX1RJXzI7CisJZWxzZSBpZiAodGVtcCA+PSBJV0xfUkVEVUNFRF9QRVJGT1JNQU5DRV9USFJFU0hPTERfMSkKKwkJdHQtPnN0YXRlID0gSVdMX1RJXzE7CisJZWxzZQorCQl0dC0+c3RhdGUgPSBJV0xfVElfMDsKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJdHQtPnR0X3ByZXZpb3VzX3RlbXAgPSB0ZW1wOworI2VuZGlmCisJaWYgKHR0LT5zdGF0ZSAhPSBvbGRfc3RhdGUpIHsKKwkJc3dpdGNoICh0dC0+c3RhdGUpIHsKKwkJY2FzZSBJV0xfVElfMDoKKwkJCS8qCisJCQkgKiBXaGVuIHRoZSBzeXN0ZW0gaXMgcmVhZHkgdG8gZ28gYmFjayB0byBJV0xfVElfMAorCQkJICogd2Ugb25seSBoYXZlIHRvIGNhbGwgaXdsX3Bvd2VyX3VwZGF0ZV9tb2RlKCkgdG8KKwkJCSAqIGRvIHNvLgorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBJV0xfVElfMToKKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzM7CisJCQlicmVhazsKKwkJY2FzZSBJV0xfVElfMjoKKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzU7CisJCQlicmVhazsKKwkJfQorCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWlmIChpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSkpIHsKKwkJCS8qIFRUIHN0YXRlIG5vdCB1cGRhdGVkCisJCQkgKiB0cnkgYWdhaW4gZHVyaW5nIG5leHQgdGVtcGVyYXR1cmUgcmVhZAorCQkJICovCisJCQl0dC0+c3RhdGUgPSBvbGRfc3RhdGU7CisJCQlJV0xfRVJSKHByaXYsICJDYW5ub3QgdXBkYXRlIHBvd2VyIG1vZGUsICIKKwkJCQkJIlRUIHN0YXRlIG5vdCB1cGRhdGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0dC0+c3RhdGUgPT0gSVdMX1RJX0NUX0tJTEwpCisJCQkJaXdsX3BlcmZvcm1fY3Rfa2lsbF90YXNrKHByaXYsIHRydWUpOworCQkJZWxzZSBpZiAob2xkX3N0YXRlID09IElXTF9USV9DVF9LSUxMICYmCisJCQkJIHR0LT5zdGF0ZSAhPSBJV0xfVElfQ1RfS0lMTCkKKwkJCQlpd2xfcGVyZm9ybV9jdF9raWxsX3Rhc2socHJpdiwgZmFsc2UpOworCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUZW1wZXJhdHVyZSBzdGF0ZSBjaGFuZ2VkICV1XG4iLAorCQkJCQl0dC0+c3RhdGUpOworCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJQb3dlciBJbmRleCBjaGFuZ2UgdG8gJXVcbiIsCisJCQkJCXR0LT50dF9wb3dlcl9tb2RlKTsKKwkJfQorCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwl9Cit9CisKKy8qCisgKiBBZHZhbmNlIHRoZXJtYWwgdGhyb3R0bGluZworICogMSkgQXZvaWQgTklDIGRlc3RydWN0aW9uIGR1ZSB0byBoaWdoIHRlbXBlcmF0dXJlcworICoJQ2hpcCB3aWxsIGlkZW50aWZ5IGRhbmdlcm91c2x5IGhpZ2ggdGVtcGVyYXR1cmVzIHRoYXQgY2FuCisgKgloYXJtIHRoZSBkZXZpY2UgYW5kIHdpbGwgcG93ZXIgZG93bgorICogMikgQXZvaWQgdGhlIE5JQyBwb3dlciBkb3duIGR1ZSB0byBoaWdoIHRlbXBlcmF0dXJlCisgKglUaHJvdHRsZSBlYXJseSBlbm91Z2ggdG8gbG93ZXIgdGhlIHBvd2VyIGNvbnN1bXB0aW9uIGJlZm9yZQorICoJZHJhc3RpYyBzdGVwcyBhcmUgbmVlZGVkCisgKglBY3Rpb25zIGluY2x1ZGUgcmVsYXhpbmcgdGhlIHBvd2VyIGRvd24gc2xlZXAgdGhyZXNob2xkcyBhbmQKKyAqCWRlY3JlYXNpbmcgdGhlIG51bWJlciBvZiBUWCBzdHJlYW1zCisgKiAzKSBBdm9pZCB0aHJvdWdocHV0IHBlcmZvcm1hbmNlIGltcGFjdCBhcyBtdWNoIGFzIHBvc3NpYmxlCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICAgICAgICAgICAgIENvbmRpdGlvbiBOeHQgU3RhdGUgIENvbmRpdGlvbiBOeHQgU3RhdGUgQ29uZGl0aW9uIE54dCBTdGF0ZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgIElXTF9USV8wICAgICBUID49IDExNSAgIENUX0tJTEwgIDExNT5UPj0xMDUgICBUSV8xICAgICAgTi9BICAgICAgTi9BCisgKiAgICAgSVdMX1RJXzEgICAgIFQgPj0gMTE1ICAgQ1RfS0lMTCAgMTE1PlQ+PTExMCAgIFRJXzIgICAgIFQ8PTk1ICAgICBUSV8wCisgKiAgICAgSVdMX1RJXzIgICAgIFQgPj0gMTE1ICAgQ1RfS0lMTCAgICAgICAgICAgICAgICAgICAgICAgIFQ8PTEwMCAgICBUSV8xCisgKiAgICBJV0xfQ1RfS0lMTCAgICAgIE4vQSAgICAgICBOL0EgICAgICAgTi9BICAgICAgICBOL0EgICAgIFQ8PTk1ICAgICBUSV8wCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyB2b2lkIGl3bF9hZHZhbmNlX3R0X2hhbmRsZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzMzIgdGVtcCkKK3sKKwlzdHJ1Y3QgaXdsX3R0X21nbXQgKnR0ID0gJnByaXYtPnRoZXJtYWxfdGhyb3R0bGU7CisJaW50IGk7CisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisJZW51bSBpd2xfdHRfc3RhdGUgb2xkX3N0YXRlOworCXN0cnVjdCBpd2xfdHRfdHJhbnMgKnRyYW5zYWN0aW9uOworCisJb2xkX3N0YXRlID0gdHQtPnN0YXRlOworCWZvciAoaSA9IDA7IGkgPCBJV0xfVElfU1RBVEVfTUFYIC0gMTsgaSsrKSB7CisJCS8qIGJhc2VkIG9uIHRoZSBjdXJyZW50IFRUIHN0YXRlLAorCQkgKiBmaW5kIHRoZSBjdXJyZXNwb25kaW5nIHRyYW5zYWN0aW9uIHRhYmxlCisJCSAqIGVhY2ggdGFibGUgaGFzIChJV0xfVElfU1RBVEVfTUFYIC0gMSkgZW50cmllcworCQkgKiB0dC0+dHJhbnNhY3Rpb24gKyAoKG9sZF9zdGF0ZSAqIChJV0xfVElfU1RBVEVfTUFYIC0gMSkpCisJCSAqIHdpbGwgYWR2YW5jZSB0byB0aGUgY29ycmVjdCB0YWJsZS4KKwkJICogdGhlbiBiYXNlZCBvbiB0aGUgY3VycmVudCB0ZW1wZXJhdHVyZQorCQkgKiBmaW5kIHRoZSBuZXh0IHN0YXRlIG5lZWQgdG8gdHJhbnNhY3Rpb24gdG8KKwkJICogZ28gdGhyb3VnaCBhbGwgdGhlIHBvc3NpYmxlIChJV0xfVElfU1RBVEVfTUFYIC0gMSkgZW50cmllcworCQkgKiBpbiB0aGUgY3VycmVudCB0YWJsZSB0byBzZWUgaWYgdHJhbnNhY3Rpb24gaXMgbmVlZGVkCisJCSAqLworCQl0cmFuc2FjdGlvbiA9IHR0LT50cmFuc2FjdGlvbiArCisJCQkoKG9sZF9zdGF0ZSAqIChJV0xfVElfU1RBVEVfTUFYIC0gMSkpICsgaSk7CisJCWlmICh0ZW1wID49IHRyYW5zYWN0aW9uLT50dF9sb3cgJiYKKwkJICAgIHRlbXAgPD0gdHJhbnNhY3Rpb24tPnR0X2hpZ2gpIHsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCQkJaWYgKCh0dC0+dHRfcHJldmlvdXNfdGVtcCkgJiYKKwkJCSAgICAodGVtcCA+IHR0LT50dF9wcmV2aW91c190ZW1wKSAmJgorCQkJICAgICgodGVtcCAtIHR0LT50dF9wcmV2aW91c190ZW1wKSA+CisJCQkgICAgSVdMX1RUX0lOQ1JFQVNFX01BUkdJTikpIHsKKwkJCQlJV0xfREVCVUdfUE9XRVIocHJpdiwKKwkJCQkJIlRlbXBlcmF0dXJlIGluY3JlYXNlICVkICIKKwkJCQkJImRlZ3JlZSBDZWxzaXVzXG4iLAorCQkJCQkodGVtcCAtIHR0LT50dF9wcmV2aW91c190ZW1wKSk7CisJCQl9CisJCQl0dC0+dHRfcHJldmlvdXNfdGVtcCA9IHRlbXA7CisjZW5kaWYKKwkJCWlmIChvbGRfc3RhdGUgIT0KKwkJCSAgICB0cmFuc2FjdGlvbi0+bmV4dF9zdGF0ZSkgeworCQkJCWNoYW5nZWQgPSB0cnVlOworCQkJCXR0LT5zdGF0ZSA9CisJCQkJCXRyYW5zYWN0aW9uLT5uZXh0X3N0YXRlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGNoYW5nZWQpIHsKKwkJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CisKKwkJaWYgKHR0LT5zdGF0ZSA+PSBJV0xfVElfMSkgeworCQkJLyogZm9yY2UgUEkgPSBJV0xfUE9XRVJfSU5ERVhfNSBpbiB0aGUgY2FzZSBvZiBUSSA+IDAgKi8KKwkJCXR0LT50dF9wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0lOREVYXzU7CisJCQlpZiAoIWl3bF9odF9lbmFibGVkKHByaXYpKQorCQkJCS8qIGRpc2FibGUgSFQgKi8KKwkJCQlyeG9uLT5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NU0sgfAorCQkJCQlSWE9OX0ZMR19DVFJMX0NIQU5ORUxfTE9DX0hJX01TSyB8CisJCQkJCVJYT05fRkxHX0hUNDBfUFJPVF9NU0sgfAorCQkJCQlSWE9OX0ZMR19IVF9QUk9UX01TSyk7CisJCQllbHNlIHsKKwkJCQkvKiBjaGVjayBIVCBjYXBhYmlsaXR5IGFuZCBzZXQKKwkJCQkgKiBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSBIVCBjYXBhYmlsaXR5CisJCQkJICogaW4gY2FzZSBnZXQgZGlzYWJsZWQgYmVmb3JlICovCisJCQkJaXdsX3NldF9yeG9uX2h0KHByaXYsICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZyk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiByZXN0b3JlIHN5c3RlbSBwb3dlciBzZXR0aW5nIC0tIGl0IHdpbGwgYmUKKwkJCSAqIHJlY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5LgorCQkJICovCisKKwkJCS8qIGNoZWNrIEhUIGNhcGFiaWxpdHkgYW5kIHNldAorCQkJICogYWNjb3JkaW5nIHRvIHRoZSBzeXN0ZW0gSFQgY2FwYWJpbGl0eQorCQkJICogaW4gY2FzZSBnZXQgZGlzYWJsZWQgYmVmb3JlICovCisJCQlpd2xfc2V0X3J4b25faHQocHJpdiwgJnByaXYtPmN1cnJlbnRfaHRfY29uZmlnKTsKKwkJfQorCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWlmIChpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSkpIHsKKwkJCS8qIFRUIHN0YXRlIG5vdCB1cGRhdGVkCisJCQkgKiB0cnkgYWdhaW4gZHVyaW5nIG5leHQgdGVtcGVyYXR1cmUgcmVhZAorCQkJICovCisJCQlJV0xfRVJSKHByaXYsICJDYW5ub3QgdXBkYXRlIHBvd2VyIG1vZGUsICIKKwkJCQkJIlRUIHN0YXRlIG5vdCB1cGRhdGVkXG4iKTsKKwkJCXR0LT5zdGF0ZSA9IG9sZF9zdGF0ZTsKKwkJfSBlbHNlIHsKKwkJCUlXTF9ERUJVR19QT1dFUihwcml2LAorCQkJCQkiVGhlcm1hbCBUaHJvdHRsaW5nIHRvIG5ldyBzdGF0ZTogJXVcbiIsCisJCQkJCXR0LT5zdGF0ZSk7CisJCQlpZiAob2xkX3N0YXRlICE9IElXTF9USV9DVF9LSUxMICYmCisJCQkgICAgdHQtPnN0YXRlID09IElXTF9USV9DVF9LSUxMKSB7CisJCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJFbnRlciBJV0xfVElfQ1RfS0lMTFxuIik7CisJCQkJaXdsX3BlcmZvcm1fY3Rfa2lsbF90YXNrKHByaXYsIHRydWUpOworCisJCQl9IGVsc2UgaWYgKG9sZF9zdGF0ZSA9PSBJV0xfVElfQ1RfS0lMTCAmJgorCQkJCSAgdHQtPnN0YXRlICE9IElXTF9USV9DVF9LSUxMKSB7CisJCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJFeGl0IElXTF9USV9DVF9LSUxMXG4iKTsKKwkJCQlpd2xfcGVyZm9ybV9jdF9raWxsX3Rhc2socHJpdiwgZmFsc2UpOworCQkJfQorCQl9CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCX0KK30KKworLyogQ2FyZCBTdGF0ZSBOb3RpZmljYXRpb24gaW5kaWNhdGVkIHJlYWNoIGNyaXRpY2FsIHRlbXBlcmF0dXJlCisgKiBpZiBQU1Agbm90IGVuYWJsZSwgbm8gVGhlcm1hbCBUaHJvdHRsaW5nIGZ1bmN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkCisgKiBqdXN0IHNldCB0aGUgR1AxIGJpdCB0byBhY2tub3dsZWRnZSB0aGUgZXZlbnQKKyAqIG90aGVyd2lzZSwgZ28gaW50byBJV0xfVElfQ1RfS0lMTCBzdGF0ZQorICogc2luY2UgQ2FyZCBTdGF0ZSBOb3RpZmljYXRpb24gd2lsbCBub3QgcHJvdmlkZSBhbnkgdGVtcGVyYXR1cmUgcmVhZGluZworICogZm9yIExlZ2FjeSBtb2RlCisgKiBzbyBqdXN0IHBhc3MgdGhlIENUX0tJTEwgdGVtcGVyYXR1cmUgdG8gaXdsX2xlZ2FjeV90dF9oYW5kbGVyKCkKKyAqIGZvciBhZHZhbmNlIG1vZGUKKyAqIHBhc3MgQ1RfS0lMTF9USFJFU0hPTEQrMSB0byBtYWtlIHN1cmUgbW92ZSBpbnRvIElXTF9USV9DVF9LSUxMIHN0YXRlCisgKi8KK3N0YXRpYyB2b2lkIGl3bF9iZ19jdF9lbnRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgY3RfZW50ZXIpOworCXN0cnVjdCBpd2xfdHRfbWdtdCAqdHQgPSAmcHJpdi0+dGhlcm1hbF90aHJvdHRsZTsKKworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpCisJCXJldHVybjsKKworCWlmICh0dC0+c3RhdGUgIT0gSVdMX1RJX0NUX0tJTEwpIHsKKwkJSVdMX0VSUihwcml2LCAiRGV2aWNlIHJlYWNoZWQgY3JpdGljYWwgdGVtcGVyYXR1cmUgIgorCQkJICAgICAgIi0gdWNvZGUgZ29pbmcgdG8gc2xlZXAhXG4iKTsKKwkJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQkJaXdsX2xlZ2FjeV90dF9oYW5kbGVyKHByaXYsCisJCQkJCSAgICAgIElXTF9NSU5JTUFMX1BPV0VSX1RIUkVTSE9MRCk7CisJCWVsc2UKKwkJCWl3bF9hZHZhbmNlX3R0X2hhbmRsZXIocHJpdiwKKwkJCQkJICAgICAgIENUX0tJTExfVEhSRVNIT0xEICsgMSk7CisJfQorfQorCisvKiBDYXJkIFN0YXRlIE5vdGlmaWNhdGlvbiBpbmRpY2F0ZWQgb3V0IG9mIGNyaXRpY2FsIHRlbXBlcmF0dXJlCisgKiBzaW5jZSBDYXJkIFN0YXRlIE5vdGlmaWNhdGlvbiB3aWxsIG5vdCBwcm92aWRlIGFueSB0ZW1wZXJhdHVyZSByZWFkaW5nCisgKiBzbyBwYXNzIHRoZSBJV0xfUkVEVUNFRF9QRVJGT1JNQU5DRV9USFJFU0hPTERfMiB0ZW1wZXJhdHVyZQorICogdG8gaXdsX2xlZ2FjeV90dF9oYW5kbGVyKCkgdG8gZ2V0IG91dCBvZiBJV0xfQ1RfS0lMTCBzdGF0ZQorICovCitzdGF0aWMgdm9pZCBpd2xfYmdfY3RfZXhpdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgY3RfZXhpdCk7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkKKwkJcmV0dXJuOworCisJLyogc3RvcCBjdF9raWxsX2V4aXRfdG0gdGltZXIgKi8KKwlkZWxfdGltZXJfc3luYygmcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX2V4aXRfdG0pOworCisJaWYgKHR0LT5zdGF0ZSA9PSBJV0xfVElfQ1RfS0lMTCkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiRGV2aWNlIHRlbXBlcmF0dXJlIGJlbG93IGNyaXRpY2FsIgorCQkJIi0gdWNvZGUgYXdha2UhXG4iKTsKKwkJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQkJaXdsX2xlZ2FjeV90dF9oYW5kbGVyKHByaXYsCisJCQkJCUlXTF9SRURVQ0VEX1BFUkZPUk1BTkNFX1RIUkVTSE9MRF8yKTsKKwkJZWxzZQorCQkJaXdsX2FkdmFuY2VfdHRfaGFuZGxlcihwcml2LCBDVF9LSUxMX0VYSVRfVEhSRVNIT0xEKTsKKwl9Cit9CisKK3ZvaWQgaXdsX3R0X2VudGVyX2N0X2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJRdWV1ZWluZyBjcml0aWNhbCB0ZW1wZXJhdHVyZSBlbnRlci5cbiIpOworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+Y3RfZW50ZXIpOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHRfZW50ZXJfY3Rfa2lsbCk7CisKK3ZvaWQgaXdsX3R0X2V4aXRfY3Rfa2lsbChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlF1ZXVlaW5nIGNyaXRpY2FsIHRlbXBlcmF0dXJlIGV4aXQuXG4iKTsKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmN0X2V4aXQpOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHRfZXhpdF9jdF9raWxsKTsKKworc3RhdGljIHZvaWQgaXdsX2JnX3R0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIHR0X3dvcmspOworCXMzMiB0ZW1wID0gcHJpdi0+dGVtcGVyYXR1cmU7IC8qIGRlZ3JlZXMgQ0VMU0lVUyBleGNlcHQgNDk2NSAqLworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KQorCQl0ZW1wID0gS0VMVklOX1RPX0NFTFNJVVMocHJpdi0+dGVtcGVyYXR1cmUpOworCisJaWYgKCFwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0KQorCQlpd2xfbGVnYWN5X3R0X2hhbmRsZXIocHJpdiwgdGVtcCk7CisJZWxzZQorCQlpd2xfYWR2YW5jZV90dF9oYW5kbGVyKHByaXYsIHRlbXApOworfQorCit2b2lkIGl3bF90dF9oYW5kbGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiUXVldWVpbmcgdGhlcm1hbCB0aHJvdHRsaW5nIHdvcmsuXG4iKTsKKwlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnR0X3dvcmspOworfQorRVhQT1JUX1NZTUJPTChpd2xfdHRfaGFuZGxlcik7CisKKy8qIFRoZXJtYWwgdGhyb3R0bGluZyBpbml0aWFsaXphdGlvbgorICogRm9yIGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nOgorICogICAgIEluaXRpYWxpemUgVGhlcm1hbCBJbmRleCBhbmQgdGVtcGVyYXR1cmUgdGhyZXNob2xkIHRhYmxlCisgKiAgICAgSW5pdGlhbGl6ZSB0aGVybWFsIHRocm90dGxpbmcgcmVzdHJpY3Rpb24gdGFibGUKKyAqLwordm9pZCBpd2xfdHRfaW5pdGlhbGl6ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdHRfdHJhbnMpICogKElXTF9USV9TVEFURV9NQVggLSAxKTsKKwlzdHJ1Y3QgaXdsX3R0X3RyYW5zICp0cmFuc2FjdGlvbjsKKworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiSW5pdGlhbGl6ZSBUaGVybWFsIFRocm90dGxpbmcgXG4iKTsKKworCW1lbXNldCh0dCwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHRfbWdtdCkpOworCisJdHQtPnN0YXRlID0gSVdMX1RJXzA7CisJaW5pdF90aW1lcigmcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX2V4aXRfdG0pOworCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLmZ1bmN0aW9uID0gaXdsX3R0X2NoZWNrX2V4aXRfY3Rfa2lsbDsKKworCS8qIHNldHVwIGRlZmVycmVkIGN0IGtpbGwgd29yayAqLworCUlOSVRfV09SSygmcHJpdi0+dHRfd29yaywgaXdsX2JnX3R0X3dvcmspOworCUlOSVRfV09SSygmcHJpdi0+Y3RfZW50ZXIsIGl3bF9iZ19jdF9lbnRlcik7CisJSU5JVF9XT1JLKCZwcml2LT5jdF9leGl0LCBpd2xfYmdfY3RfZXhpdCk7CisKKwlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDAwOgorCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzZ4NTA6CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQWR2YW5jZWQgVGhlcm1hbCBUaHJvdHRsaW5nXG4iKTsKKwkJdHQtPnJlc3RyaWN0aW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbikgKgorCQkJCQkgSVdMX1RJX1NUQVRFX01BWCwgR0ZQX0tFUk5FTCk7CisJCXR0LT50cmFuc2FjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfdHRfdHJhbnMpICoKKwkJCUlXTF9USV9TVEFURV9NQVggKiAoSVdMX1RJX1NUQVRFX01BWCAtIDEpLAorCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghdHQtPnJlc3RyaWN0aW9uIHx8ICF0dC0+dHJhbnNhY3Rpb24pIHsKKwkJCUlXTF9FUlIocHJpdiwgIkZhbGxiYWNrIHRvIExlZ2FjeSBUaHJvdHRsaW5nXG4iKTsKKwkJCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuYWR2YW5jZWRfdHQgPSBmYWxzZTsKKwkJCWtmcmVlKHR0LT5yZXN0cmljdGlvbik7CisJCQl0dC0+cmVzdHJpY3Rpb24gPSBOVUxMOworCQkJa2ZyZWUodHQtPnRyYW5zYWN0aW9uKTsKKwkJCXR0LT50cmFuc2FjdGlvbiA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQl0cmFuc2FjdGlvbiA9IHR0LT50cmFuc2FjdGlvbiArCisJCQkJKElXTF9USV8wICogKElXTF9USV9TVEFURV9NQVggLSAxKSk7CisJCQltZW1jcHkodHJhbnNhY3Rpb24sICZ0dF9yYW5nZV8wWzBdLCBzaXplKTsKKwkJCXRyYW5zYWN0aW9uID0gdHQtPnRyYW5zYWN0aW9uICsKKwkJCQkoSVdMX1RJXzEgKiAoSVdMX1RJX1NUQVRFX01BWCAtIDEpKTsKKwkJCW1lbWNweSh0cmFuc2FjdGlvbiwgJnR0X3JhbmdlXzFbMF0sIHNpemUpOworCQkJdHJhbnNhY3Rpb24gPSB0dC0+dHJhbnNhY3Rpb24gKworCQkJCShJV0xfVElfMiAqIChJV0xfVElfU1RBVEVfTUFYIC0gMSkpOworCQkJbWVtY3B5KHRyYW5zYWN0aW9uLCAmdHRfcmFuZ2VfMlswXSwgc2l6ZSk7CisJCQl0cmFuc2FjdGlvbiA9IHR0LT50cmFuc2FjdGlvbiArCisJCQkJKElXTF9USV9DVF9LSUxMICogKElXTF9USV9TVEFURV9NQVggLSAxKSk7CisJCQltZW1jcHkodHJhbnNhY3Rpb24sICZ0dF9yYW5nZV8zWzBdLCBzaXplKTsKKwkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbikgKgorCQkJCUlXTF9USV9TVEFURV9NQVg7CisJCQltZW1jcHkodHQtPnJlc3RyaWN0aW9uLAorCQkJCSZyZXN0cmljdGlvbl9yYW5nZVswXSwgc2l6ZSk7CisJCQlwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0ID0gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkxlZ2FjeSBUaGVybWFsIFRocm90dGxpbmdcbiIpOworCQlwcml2LT50aGVybWFsX3Rocm90dGxlLmFkdmFuY2VkX3R0ID0gZmFsc2U7CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3R0X2luaXRpYWxpemUpOworCisvKiBjbGVhbnVwIHRoZXJtYWwgdGhyb3R0bGluZyBtYW5hZ2VtZW50IHJlbGF0ZWQgbWVtb3J5IGFuZCB0aW1lciAqLwordm9pZCBpd2xfdHRfZXhpdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOworCisJLyogc3RvcCBjdF9raWxsX2V4aXRfdG0gdGltZXIgaWYgYWN0aXZhdGVkICovCisJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT50dF93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5jdF9lbnRlcik7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+Y3RfZXhpdCk7CisKKwlpZiAocHJpdi0+dGhlcm1hbF90aHJvdHRsZS5hZHZhbmNlZF90dCkgeworCQkvKiBmcmVlIGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nIG1lbW9yeSAqLworCQlrZnJlZSh0dC0+cmVzdHJpY3Rpb24pOworCQl0dC0+cmVzdHJpY3Rpb24gPSBOVUxMOworCQlrZnJlZSh0dC0+dHJhbnNhY3Rpb24pOworCQl0dC0+dHJhbnNhY3Rpb24gPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0woaXdsX3R0X2V4aXQpOwogCiAvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KIHZvaWQgaXdsX3Bvd2VyX2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWl3bF9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKLQlwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZyA9IElXTF9QT1dFUl9JTkRFWF8xOwotCS8qIGRlZmF1bHQgdG8gZGlzYWJsZWQgdW50aWwgbWFjODAyMTEgc2F5cyBvdGhlcndpc2UgKi8KLQlwcml2LT5wb3dlcl9kYXRhLnBvd2VyX2Rpc2FibGVkID0gMTsKKwl1MTYgbGN0bCA9IGl3bF9wY2llX2xpbmtfY3RsKHByaXYpOworCisJcHJpdi0+cG93ZXJfZGF0YS5wY2lfcG0gPSAhKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDBTX0VOKTsKKworCXByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUgPSAtMTsKKworCW1lbXNldCgmcHJpdi0+cG93ZXJfZGF0YS5zbGVlcF9jbWQsIDAsCisJCXNpemVvZihwcml2LT5wb3dlcl9kYXRhLnNsZWVwX2NtZCkpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfcG93ZXJfaW5pdGlhbGl6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaAppbmRleCAzN2JhM2JiLi5kZjZmNmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKQEAgLTI4LDEzICsyOCw5MSBAQAogI2lmbmRlZiBfX2l3bF9wb3dlcl9zZXR0aW5nX2hfXwogI2RlZmluZSBfX2l3bF9wb3dlcl9zZXR0aW5nX2hfXwogCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAKLXN0cnVjdCBpd2xfcHJpdjsKKyNkZWZpbmUgSVdMX0FCU09MVVRFX1pFUk8JCTAKKyNkZWZpbmUgSVdMX0FCU09MVVRFX01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBJV0xfVFRfSU5DUkVBU0VfTUFSR0lOCTUKIAotZW51bSB7Ci0JSVdMX1BPV0VSX01PREVfQ0FNLCAvKiBDb250aW51b3VzbHkgQXdhcmUgTW9kZSwgYWx3YXlzIG9uICovCitlbnVtIGl3bF9hbnRlbm5hX29rIHsKKwlJV0xfQU5UX09LX05PTkUsCisJSVdMX0FOVF9PS19TSU5HTEUsCisJSVdMX0FOVF9PS19NVUxUSSwKK307CisKKy8qIFRoZXJtYWwgVGhyb3R0bGluZyBTdGF0ZSBNYWNoaW5lIHN0YXRlcyAqLworZW51bSAgaXdsX3R0X3N0YXRlIHsKKwlJV0xfVElfMCwJLyogbm9ybWFsIHRlbXBlcmF0dXJlLCBzeXN0ZW0gcG93ZXIgc3RhdGUgKi8KKwlJV0xfVElfMSwJLyogaGlnaCB0ZW1wZXJhdHVyZSBkZXRlY3QsIGxvdyBwb3dlciBzdGF0ZSAqLworCUlXTF9USV8yLAkvKiBoaWdoZXIgdGVtcGVyYXR1cmUgZGV0ZWN0ZWQsIGxvd2VyIHBvd2VyIHN0YXRlICovCisJSVdMX1RJX0NUX0tJTEwsIC8qIGNyaXRpY2FsIHRlbXBlcmF0dXJlIGRldGVjdGVkLCBsb3dlc3QgcG93ZXIgc3RhdGUgKi8KKwlJV0xfVElfU1RBVEVfTUFYCit9OworCisvKioKKyAqIHN0cnVjdCBpd2xfdHRfcmVzdHJpY3Rpb24gLSBUaGVybWFsIFRocm90dGxpbmcgcmVzdHJpY3Rpb24gdGFibGUKKyAqIEB0eF9zdHJlYW06IG51bWJlciBvZiB0eCBzdHJlYW0gYWxsb3dlZAorICogQGlzX2h0OiBodCBlbmFibGUvZGlzYWJsZQorICogQHJ4X3N0cmVhbTogbnVtYmVyIG9mIHJ4IHN0cmVhbSBhbGxvd2VkCisgKgorICogVGhpcyB0YWJsZSBpcyB1c2VkIGJ5IGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsaW5nIG1hbmFnZW1lbnQKKyAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRoZXJtYWwgdGhyb3R0bGluZyBzdGF0ZSwgYW5kIGRldGVybWluZXMKKyAqIHRoZSBudW1iZXIgb2YgdHgvcnggc3RyZWFtcyBhbmQgdGhlIHN0YXR1cyBvZiBIVCBvcGVyYXRpb24uCisgKi8KK3N0cnVjdCBpd2xfdHRfcmVzdHJpY3Rpb24geworCWVudW0gaXdsX2FudGVubmFfb2sgdHhfc3RyZWFtOworCWVudW0gaXdsX2FudGVubmFfb2sgcnhfc3RyZWFtOworCWJvb2wgaXNfaHQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBpd2xfdHRfdHJhbnMgLSBUaGVybWFsIFRocm90dGxpbmcgdHJhbnNhY3Rpb24gdGFibGUKKyAqIEBuZXh0X3N0YXRlOiAgbmV4dCB0aGVybWFsIHRocm90dGxpbmcgbW9kZQorICogQHR0X2xvdzogbG93IHRlbXBlcmF0dXJlIHRocmVzaG9sZCB0byBjaGFuZ2Ugc3RhdGUKKyAqIEB0dF9oaWdoOiBoaWdoIHRlbXBlcmF0dXJlIHRocmVzaG9sZCB0byBjaGFuZ2Ugc3RhdGUKKyAqCisgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIGFkdmFuY2VkIHRoZXJtYWwgdGhyb3R0bGluZyBhbGdvcml0aG0KKyAqIHRvIGRldGVybWluZSB0aGUgbmV4dCB0aGVybWFsIHN0YXRlIHRvIGdvIGJhc2VkIG9uIHRoZQorICogY3VycmVudCB0ZW1wZXJhdHVyZS4KKyAqLworc3RydWN0IGl3bF90dF90cmFucyB7CisJZW51bSBpd2xfdHRfc3RhdGUgbmV4dF9zdGF0ZTsKKwl1MzIgdHRfbG93OworCXUzMiB0dF9oaWdoOworfTsKKworLyoqCisgKiBzdHJ1Y3QgaXdsX3R0X21nbnQgLSBUaGVybWFsIFRocm90dGxpbmcgTWFuYWdlbWVudCBzdHJ1Y3R1cmUKKyAqIEBhZHZhbmNlZF90dDogICAgYWR2YW5jZWQgdGhlcm1hbCB0aHJvdHRsZSByZXF1aXJlZAorICogQHN0YXRlOiAgICAgICAgICBjdXJyZW50IFRoZXJtYWwgVGhyb3R0bGluZyBzdGF0ZQorICogQHR0X3Bvd2VyX21vZGU6ICBUaGVybWFsIFRocm90dGxpbmcgcG93ZXIgbW9kZSBpbmRleAorICoJCSAgICBiZWluZyB1c2VkIHRvIHNldCBwb3dlciBsZXZlbCB3aGVuCisgKiAJCSAgICB3aGVuIHRoZXJtYWwgdGhyb3R0bGluZyBzdGF0ZSAhPSBJV0xfVElfMAorICoJCSAgICB0aGUgdHRfcG93ZXJfbW9kZSBzaG91bGQgc2V0IHRvIGRpZmZlcmVudAorICoJCSAgICBwb3dlciBtb2RlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHR0IHN0YXRlCisgKiBAdHRfcHJldmlvdXNfdGVtcGVyYXR1cmU6IGxhc3QgbWVhc3VyZWQgdGVtcGVyYXR1cmUKKyAqIEBpd2xfdHRfcmVzdHJpY3Rpb246IHB0ciB0byByZXN0cmljdGlvbiB0YmwsIHVzZWQgYnkgYWR2YW5jZQorICoJCSAgICB0aGVybWFsIHRocm90dGxpbmcgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IHR4L3J4IHN0cmVhbXMKKyAqCQkgICAgc2hvdWxkIGJlIHVzZWQgaW4gdHQgc3RhdGU7IGFuZCBjYW4gSFQgYmUgZW5hYmxlZCBvciBub3QKKyAqIEBpd2xfdHRfdHJhbnM6IHB0ciB0byBhZHYgdHJhbnMgdGFibGUsIHVzZWQgYnkgYWR2YW5jZSB0aGVybWFsIHRocm90dGxpbmcKKyAqCQkgICAgc3RhdGUgdHJhbnNhY3Rpb24KKyAqIEBjdF9raWxsX3RvZ2dsZTogdXNlZCB0byB0b2dnbGUgdGhlIENTUiBiaXQgd2hlbiBjaGVja2luZyB1Q29kZSB0ZW1wZXJhdHVyZQorICogQGN0X2tpbGxfZXhpdF90bTogdGltZXIgdG8gZXhpdCB0aGVybWFsIGtpbGwKKyAqLworc3RydWN0IGl3bF90dF9tZ210IHsKKwllbnVtIGl3bF90dF9zdGF0ZSBzdGF0ZTsKKwlib29sIGFkdmFuY2VkX3R0OworCXU4IHR0X3Bvd2VyX21vZGU7CisJYm9vbCBjdF9raWxsX3RvZ2dsZTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXMzMiB0dF9wcmV2aW91c190ZW1wOworI2VuZGlmCisJc3RydWN0IGl3bF90dF9yZXN0cmljdGlvbiAqcmVzdHJpY3Rpb247CisJc3RydWN0IGl3bF90dF90cmFucyAqdHJhbnNhY3Rpb247CisJc3RydWN0IHRpbWVyX2xpc3QgY3Rfa2lsbF9leGl0X3RtOworfTsKKworZW51bSBpd2xfcG93ZXJfbGV2ZWwgewogCUlXTF9QT1dFUl9JTkRFWF8xLAogCUlXTF9QT1dFUl9JTkRFWF8yLAogCUlXTF9QT1dFUl9JTkRFWF8zLApAQCAtNDMsMjYgKzEyMSwyMyBAQAogCUlXTF9QT1dFUl9OVU0KIH07CiAKLS8qIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlcikgc3RydWN0dXJlcyAqLwotCi1zdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSB7Ci0Jc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0JdTggbm9fZHRpbTsKLX07Ci0KIHN0cnVjdCBpd2xfcG93ZXJfbWdyIHsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMFtJV0xfUE9XRVJfTlVNXTsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMVtJV0xfUE9XRVJfTlVNXTsKLQlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMltJV0xfUE9XRVJfTlVNXTsKLQl1MzIgZHRpbV9wZXJpb2Q7Ci0JLyogZmluYWwgcG93ZXIgbGV2ZWwgdGhhdCB1c2VkIHRvIGNhbGN1bGF0ZSBmaW5hbCBwb3dlciBjb21tYW5kICovCi0JdTggcG93ZXJfbW9kZTsKLQl1OCB1c2VyX3Bvd2VyX3NldHRpbmc7IC8qIHNldCBieSB1c2VyIHRocm91Z2ggc3lzZnMgKi8KLQl1OCBwb3dlcl9kaXNhYmxlZDsgLyogc2V0IGJ5IG1hYzgwMjExJ3MgQ09ORl9QUyAqLworCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgc2xlZXBfY21kOworCWludCBkZWJ1Z19zbGVlcF9sZXZlbF9vdmVycmlkZTsKKwlib29sIHBjaV9wbTsKIH07CiAKIGludCBpd2xfcG93ZXJfdXBkYXRlX21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZvcmNlKTsKLWludCBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBtb2RlKTsKK2Jvb2wgaXdsX2h0X2VuYWJsZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2VudW0gaXdsX2FudGVubmFfb2sgaXdsX3R4X2FudF9yZXN0cmljdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZW51bSBpd2xfYW50ZW5uYV9vayBpd2xfcnhfYW50X3Jlc3RyaWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF90dF9lbnRlcl9jdF9raWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF90dF9leGl0X2N0X2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3R0X2hhbmRsZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3R0X2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3R0X2V4aXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3Bvd2VyX2luaXRpYWxpemUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAorZXh0ZXJuIGJvb2wgbm9fc2xlZXBfYXV0b2FkanVzdDsKKwogI2VuZGlmICAvKiBfX2l3bF9wb3dlcl9zZXR0aW5nX2hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCmluZGV4IDNiOWNhYzMuLmQzOTNlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTgwLDYgKzgwLDggQEAKICNkZWZpbmUgQVBNR19SRktJTExfUkVHCQkJKEFQTUdfQkFTRSArIDB4MDAxNCkKICNkZWZpbmUgQVBNR19SVENfSU5UX1NUVF9SRUcJCShBUE1HX0JBU0UgKyAweDAwMWMpCiAjZGVmaW5lIEFQTUdfUlRDX0lOVF9NU0tfUkVHCQkoQVBNR19CQVNFICsgMHgwMDIwKQorI2RlZmluZSBBUE1HX0RJR0lUQUxfU1ZSX1JFRwkJKEFQTUdfQkFTRSArIDB4MDA1OCkKKyNkZWZpbmUgQVBNR19BTkFMT0dfU1ZSX1JFRwkJKEFQTUdfQkFTRSArIDB4MDA2QykKIAogI2RlZmluZSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQJKDB4MDAwMDAyMDApCiAjZGVmaW5lIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVAkoMHgwMDAwMDgwMCkKQEAgLTkxLDcgKzkzLDggQEAKICNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX1ZNQUlOCQkoMHgwMDAwMDAwMCkKICNkZWZpbmUgQVBNR19QU19DVFJMX1ZBTF9QV1JfU1JDX01BWAkJKDB4MDEwMDAwMDApIC8qIDM5NDUgb25seSAqLwogI2RlZmluZSBBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWAkJKDB4MDIwMDAwMDApCi0KKyNkZWZpbmUgQVBNR19TVlJfVk9MVEFHRV9DT05GSUdfQklUX01TSwkoMHgwMDAwMDFFMCkgLyogYml0IDg6NSAqLworI2RlZmluZSBBUE1HX1NWUl9ESUdJVEFMX1ZPTFRBR0VfMV8zMgkJKDB4MDAwMDAwNjApCiAKICNkZWZpbmUgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTCQkoMHgwMDAwMDgwMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggMmI4ZDQwYi4uODE1MGM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC00MDYsNyArNDA2LDYgQEAKIAlyeHEtPmZyZWVfY291bnQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChpd2xfcnhfcXVldWVfcmVzZXQpOwogCiBpbnQgaXdsX3J4X2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpCiB7CkBAIC01NDAsMTMgKzUzOSwxNCBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAogCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCi0JCSAgICAgKGludClzaXplb2YocHJpdi0+c3RhdGlzdGljcyksIHBrdC0+bGVuKTsKKwkJICAgICAoaW50KXNpemVvZihwcml2LT5zdGF0aXN0aWNzKSwKKwkJICAgICBsZTMyX3RvX2NwdShwa3QtPmxlbl9uX2ZsYWdzKSAmIEZIX1JTQ1NSX0ZSQU1FX1NJWkVfTVNLKTsKIAogCWNoYW5nZSA9ICgocHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlICE9CiAJCSAgIHBrdC0+dS5zdGF0cy5nZW5lcmFsLnRlbXBlcmF0dXJlKSB8fAogCQkgICgocHJpdi0+c3RhdGlzdGljcy5mbGFnICYKLQkJICAgIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSykgIT0KLQkJICAgKHBrdC0+dS5zdGF0cy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLKSkpOworCQkgICAgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykgIT0KKwkJICAgKHBrdC0+dS5zdGF0cy5mbGFnICYgU1RBVElTVElDU19SRVBMWV9GTEdfSFQ0MF9NT0RFX01TSykpKTsKIAogCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcywgJnBrdC0+dS5zdGF0cywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpKTsKIApAQCAtNjQ2LDcgKzY0Niw3IEBACiAJdTMyIHRzZl9sb3c7CiAJaW50IHJzc2k7CiAKLQlpZiAobGlrZWx5KCEocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKSkKKwlpZiAobGlrZWx5KCEoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9SWCkpKQogCQlyZXR1cm47CiAKIAkvKiBNQUMgaGVhZGVyICovCkBAIC03NDYsMTQgKzc0Niw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaXdsX3VwZGF0ZV9yeF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmYywgdTE2IGxlbikKLXsKLQkvKiAwIC0gbWdtdCwgMSAtIGNudCwgMiAtIGRhdGEgKi8KLQlpbnQgaWR4ID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDI7Ci0JcHJpdi0+cnhfc3RhdHNbaWR4XS5jbnQrKzsKLQlwcml2LT5yeF9zdGF0c1tpZHhdLmJ5dGVzICs9IGxlbjsKLX0KLQogLyoKICAqIHJldHVybnMgbm9uLXplcm8gaWYgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkCiAgKi8KQEAgLTg2Miw2MSArODU0LDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgIGludCBpbmNsdWRlX3BoeSwKLQkJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCQkJdTE2IGxlbiwKKwkJCQkJdTMyIGFtcGR1X3N0YXR1cywKKwkJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKIHsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9yeF9waHlfcmVzICpyeF9zdGFydCA9IChpbmNsdWRlX3BoeSkgPwotCSAgICAoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJihwa3QtPnUucmF3WzBdKSA6IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQl1MTYgbGVuOwotCV9fbGUzMiAqcnhfZW5kOwotCXVuc2lnbmVkIGludCBza2JsZW47Ci0JdTMyIGFtcGR1X3N0YXR1czsKLQl1MzIgYW1wZHVfc3RhdHVzX2xlZ2FjeTsKLQotCWlmICghaW5jbHVkZV9waHkgJiYgcHJpdi0+bGFzdF9waHlfcmVzWzBdKQotCQlyeF9zdGFydCA9IChzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKikmcHJpdi0+bGFzdF9waHlfcmVzWzFdOwotCi0JaWYgKCFyeF9zdGFydCkgewotCQlJV0xfRVJSKHByaXYsICJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGluY2x1ZGVfcGh5KSB7Ci0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSgodTggKikgJnJ4X3N0YXJ0WzFdICsKLQkJCQkJICAgICAgIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7Ci0KLQkJbGVuID0gbGUxNl90b19jcHUocnhfc3RhcnQtPmJ5dGVfY291bnQpOwotCi0JCXJ4X2VuZCA9IChfX2xlMzIgKikoKHU4ICopICZwa3QtPnUucmF3WzBdICsKLQkJCQkgIHNpemVvZihzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMpICsKLQkJCQkgIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCArIGxlbik7Ci0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgaXdsNDk2NV9yeF9tcGR1X3Jlc19zdGFydCAqYW1zZHUgPQotCQkgICAgKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICopcGt0LT51LnJhdzsKLQotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikocGt0LT51LnJhdyArCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0KSk7Ci0JCWxlbiA9ICBsZTE2X3RvX2NwdShhbXNkdS0+Ynl0ZV9jb3VudCk7Ci0JCXJ4X3N0YXJ0LT5ieXRlX2NvdW50ID0gYW1zZHUtPmJ5dGVfY291bnQ7Ci0JCXJ4X2VuZCA9IChfX2xlMzIgKikgKCgodTggKikgaGRyKSArIGxlbik7Ci0JfQotCi0JYW1wZHVfc3RhdHVzID0gbGUzMl90b19jcHUoKnJ4X2VuZCk7Ci0Jc2tibGVuID0gKCh1OCAqKSByeF9lbmQgLSAodTggKikgJnBrdC0+dS5yYXdbMF0pICsgc2l6ZW9mKHUzMik7Ci0KLQlpZiAoIWluY2x1ZGVfcGh5KSB7Ci0JCS8qIE5ldyBzdGF0dXMgc2NoZW1lLCBuZWVkIHRvIHRyYW5zbGF0ZSAqLwotCQlhbXBkdV9zdGF0dXNfbGVnYWN5ID0gYW1wZHVfc3RhdHVzOwotCQlhbXBkdV9zdGF0dXMgPSBpd2xfdHJhbnNsYXRlX3J4X3N0YXR1cyhwcml2LCBhbXBkdV9zdGF0dXMpOwotCX0KLQotCS8qIHN0YXJ0IGZyb20gTUFDICovCi0Jc2tiX3Jlc2VydmUocnhiLT5za2IsICh2b2lkICopaGRyIC0gKHZvaWQgKilwa3QpOwotCXNrYl9wdXQocnhiLT5za2IsIGxlbik7CS8qIGVuZCB3aGVyZSBkYXRhIGVuZHMgKi8KLQogCS8qIFdlIG9ubHkgcHJvY2VzcyBkYXRhIHBhY2tldHMgaWYgdGhlIGludGVyZmFjZSBpcyBvcGVuICovCiAJaWYgKHVubGlrZWx5KCFwcml2LT5pc19vcGVuKSkgewogCQlJV0xfREVCVUdfRFJPUF9MSU1JVChwcml2LApAQCAtOTI0LDE1ICs4NjcsMTggQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4Yi0+c2tiLT5kYXRhOwotCi0JLyogIGluIGNhc2Ugb2YgSFcgYWNjZWxlcmF0ZWQgY3J5cHRvIGFuZCBiYWQgZGVjcnlwdGlvbiwgZHJvcCAqLwotCWlmICghcHJpdi0+aHdfcGFyYW1zLnN3X2NyeXB0byAmJgorCS8qIEluIGNhc2Ugb2YgSFcgYWNjZWxlcmF0ZWQgY3J5cHRvIGFuZCBiYWQgZGVjcnlwdGlvbiwgZHJvcCAqLworCWlmICghcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5zd19jcnlwdG8gJiYKIAkgICAgaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LCBoZHIsIGFtcGR1X3N0YXR1cywgc3RhdHMpKQogCQlyZXR1cm47CiAKLQlpd2xfdXBkYXRlX3J4X3N0YXRzKHByaXYsIGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCksIGxlbik7Ci0JaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHJ4Yi0+c2tiLCBzdGF0cyk7CisJLyogUmVzaXplIFNLQiBmcm9tIG1hYyBoZWFkZXIgdG8gZW5kIG9mIHBhY2tldCAqLworCXNrYl9yZXNlcnZlKHJ4Yi0+c2tiLCAodm9pZCAqKWhkciAtICh2b2lkICopcnhiLT5za2ItPmRhdGEpOworCXNrYl9wdXQocnhiLT5za2IsIGxlbik7CisKKwlpd2xfdXBkYXRlX3N0YXRzKHByaXYsIGZhbHNlLCBoZHItPmZyYW1lX2NvbnRyb2wsIGxlbik7CisJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihyeGItPnNrYiksIHN0YXRzLCBzaXplb2YoKnN0YXRzKSk7CisJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHJ4Yi0+c2tiKTsKIAlwcml2LT5hbGxvY19yeGJfc2tiLS07CiAJcnhiLT5za2IgPSBOVUxMOwogfQpAQCAtOTYzLDgyICs5MDksODAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0JLyogVXNlIHBoeSBkYXRhIChSeCBzaWduYWwgc3RyZW5ndGgsIGV0Yy4pIGNvbnRhaW5lZCB3aXRoaW4KLQkgKiAgIHRoaXMgcnggcGFja2V0IGZvciBsZWdhY3kgZnJhbWVzLAotCSAqICAgb3IgcGh5IGRhdGEgY2FjaGVkIGZyb20gUkVQTFlfUlhfUEhZX0NNRCBmb3IgSFQgZnJhbWVzLiAqLwotCWludCBpbmNsdWRlX3BoeSA9IChwa3QtPmhkci5jbWQgPT0gUkVQTFlfUlgpOwotCXN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfc3RhcnQgPSAoaW5jbHVkZV9waHkpID8KLQkJKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKSYocGt0LT51LnJhd1swXSkgOgotCQkoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKLQlfX2xlMzIgKnJ4X2VuZDsKLQl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlzdHJ1Y3QgaXdsX3J4X3BoeV9yZXMgKnBoeV9yZXM7CisJX19sZTMyIHJ4X3BrdF9zdGF0dXM7CisJc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKmFtc2R1OworCXUzMiBsZW47CisJdTMyIGFtcGR1X3N0YXR1czsKIAl1MTYgZmM7Ci0JdTggbmV0d29ya19wYWNrZXQ7CisJdTMyIHJhdGVfbl9mbGFnczsKIAotCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUocnhfc3RhcnQtPnRpbWVzdGFtcCk7CisJLyoqCisJICogUkVQTFlfUlggYW5kIFJFUExZX1JYX01QRFVfQ01EIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LgorCSAqCVJFUExZX1JYOiBwaHlzaWNhbCBsYXllciBpbmZvIGlzIGluIHRoaXMgYnVmZmVyCisJICoJUkVQTFlfUlhfTVBEVV9DTUQ6IHBoeXNpY2FsIGxheWVyIGluZm8gd2FzIHNlbnQgaW4gc2VwYXJhdGUKKwkgKgkJY29tbWFuZCBhbmQgY2FjaGVkIGluIHByaXYtPmxhc3RfcGh5X3JlcworCSAqCisJICogSGVyZSB3ZSBzZXQgdXAgbG9jYWwgdmFyaWFibGVzIGRlcGVuZGluZyBvbiB3aGljaCBjb21tYW5kIGlzCisJICogcmVjZWl2ZWQuCisJICovCisJaWYgKHBrdC0+aGRyLmNtZCA9PSBSRVBMWV9SWCkgeworCQlwaHlfcmVzID0gKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKXBrdC0+dS5yYXc7CisJCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKShwa3QtPnUucmF3ICsgc2l6ZW9mKCpwaHlfcmVzKQorCQkJCSsgcGh5X3Jlcy0+Y2ZnX3BoeV9jbnQpOworCisJCWxlbiA9IGxlMTZfdG9fY3B1KHBoeV9yZXMtPmJ5dGVfY291bnQpOworCQlyeF9wa3Rfc3RhdHVzID0gKihfX2xlMzIgKikocGt0LT51LnJhdyArIHNpemVvZigqcGh5X3JlcykgKworCQkJCXBoeV9yZXMtPmNmZ19waHlfY250ICsgbGVuKTsKKwkJYW1wZHVfc3RhdHVzID0gbGUzMl90b19jcHUocnhfcGt0X3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKCFwcml2LT5sYXN0X3BoeV9yZXNbMF0pIHsKKwkJCUlXTF9FUlIocHJpdiwgIk1QRFUgZnJhbWUgd2l0aG91dCBjYWNoZWQgUEhZIGRhdGFcbiIpOworCQkJcmV0dXJuOworCQl9CisJCXBoeV9yZXMgPSAoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKKwkJYW1zZHUgPSAoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKilwa3QtPnUucmF3OworCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikocGt0LT51LnJhdyArIHNpemVvZigqYW1zZHUpKTsKKwkJbGVuID0gbGUxNl90b19jcHUoYW1zZHUtPmJ5dGVfY291bnQpOworCQlyeF9wa3Rfc3RhdHVzID0gKihfX2xlMzIgKikocGt0LT51LnJhdyArIHNpemVvZigqYW1zZHUpICsgbGVuKTsKKwkJYW1wZHVfc3RhdHVzID0gaXdsX3RyYW5zbGF0ZV9yeF9zdGF0dXMocHJpdiwKKwkJCQlsZTMyX3RvX2NwdShyeF9wa3Rfc3RhdHVzKSk7CisJfQorCisJaWYgKCh1bmxpa2VseShwaHlfcmVzLT5jZmdfcGh5X2NudCA+IDIwKSkpIHsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICVkL24iLAorCQkJCXBoeV9yZXMtPmNmZ19waHlfY250KTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKHJ4X3BrdF9zdGF0dXMgJiBSWF9SRVNfU1RBVFVTX05PX0NSQzMyX0VSUk9SKSB8fAorCSAgICAhKHJ4X3BrdF9zdGF0dXMgJiBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVykpIHsKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsCisJCQkJbGUzMl90b19jcHUocnhfcGt0X3N0YXR1cykpOworCQlyZXR1cm47CisJfQorCisJLyogVGhpcyB3aWxsIGJlIHVzZWQgaW4gc2V2ZXJhbCBwbGFjZXMgbGF0ZXIgKi8KKwlyYXRlX25fZmxhZ3MgPSBsZTMyX3RvX2NwdShwaHlfcmVzLT5yYXRlX25fZmxhZ3MpOworCisJLyogcnhfc3RhdHVzIGNhcnJpZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhY2tldCB0byBtYWM4MDIxMSAqLworCXJ4X3N0YXR1cy5tYWN0aW1lID0gbGU2NF90b19jcHUocGh5X3Jlcy0+dGltZXN0YW1wKTsKIAlyeF9zdGF0dXMuZnJlcSA9Ci0JCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShsZTE2X3RvX2NwdShyeF9zdGFydC0+Y2hhbm5lbCkpOwotCXJ4X3N0YXR1cy5iYW5kID0gKHJ4X3N0YXJ0LT5waHlfZmxhZ3MgJiBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLKSA/CisJCWllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShsZTE2X3RvX2NwdShwaHlfcmVzLT5jaGFubmVsKSk7CisJcnhfc3RhdHVzLmJhbmQgPSAocGh5X3Jlcy0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19CQU5EXzI0X01TSykgPwogCQkJCUlFRUU4MDIxMV9CQU5EXzJHSFogOiBJRUVFODAyMTFfQkFORF81R0haOwogCXJ4X3N0YXR1cy5yYXRlX2lkeCA9Ci0JCWl3bF9od3JhdGVfdG9fcGxjcF9pZHgobGUzMl90b19jcHUocnhfc3RhcnQtPnJhdGVfbl9mbGFncykpOwotCWlmIChyeF9zdGF0dXMuYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQlyeF9zdGF0dXMucmF0ZV9pZHggLT0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQorCQlpd2xfaHdyYXRlX3RvX21hYzgwMjExX2lkeChyYXRlX25fZmxhZ3MsIHJ4X3N0YXR1cy5iYW5kKTsKIAlyeF9zdGF0dXMuZmxhZyA9IDA7CiAKIAkvKiBUU0YgaXNuJ3QgcmVsaWFibGUuIEluIG9yZGVyIHRvIGFsbG93IHNtb290aCB1c2VyIGV4cGVyaWVuY2UsCiAJICogdGhpcyBXL0EgZG9lc24ndCBwcm9wYWdhdGUgaXQgdG8gdGhlIG1hYzgwMjExICovCiAJLypyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ki8KIAotCWlmICgodW5saWtlbHkocnhfc3RhcnQtPmNmZ19waHlfY250ID4gMjApKSkgewotCQlJV0xfREVCVUdfRFJPUChwcml2LCAiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCi0JCQkJcnhfc3RhcnQtPmNmZ19waHlfY250KTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghaW5jbHVkZV9waHkpIHsKLQkJaWYgKHByaXYtPmxhc3RfcGh5X3Jlc1swXSkKLQkJCXJ4X3N0YXJ0ID0gKHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqKQotCQkJCSZwcml2LT5sYXN0X3BoeV9yZXNbMV07Ci0JCWVsc2UKLQkJCXJ4X3N0YXJ0ID0gTlVMTDsKLQl9Ci0KLQlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlIocHJpdiwgIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChpbmNsdWRlX3BoeSkgewotCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoKHU4ICopICZyeF9zdGFydFsxXQotCQkJCQkJICArIHJ4X3N0YXJ0LT5jZmdfcGh5X2NudCk7Ci0KLQkJbGVuID0gbGUxNl90b19jcHUocnhfc3RhcnQtPmJ5dGVfY291bnQpOwotCQlyeF9lbmQgPSAoX19sZTMyICopKHBrdC0+dS5yYXcgKyByeF9zdGFydC0+Y2ZnX3BoeV9jbnQgKwotCQkJCSAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhfcGh5X3JlcykgKyBsZW4pOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0ICphbXNkdSA9Ci0JCQkoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQgKilwa3QtPnUucmF3OwotCi0JCWhlYWRlciA9ICh2b2lkICopKHBrdC0+dS5yYXcgKwotCQkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X3J4X21wZHVfcmVzX3N0YXJ0KSk7Ci0JCWxlbiA9IGxlMTZfdG9fY3B1KGFtc2R1LT5ieXRlX2NvdW50KTsKLQkJcnhfZW5kID0gKF9fbGUzMiAqKSAocGt0LT51LnJhdyArCi0JCQlzaXplb2Yoc3RydWN0IGl3bDQ5NjVfcnhfbXBkdV9yZXNfc3RhcnQpICsgbGVuKTsKLQl9Ci0KLQlpZiAoISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUikgfHwKLQkgICAgISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19SWEVfT1ZFUkZMT1cpKSB7Ci0JCUlXTF9ERUJVR19SWChwcml2LCAiQmFkIENSQyBvciBGSUZPOiAweCUwOFguXG4iLAotCQkJCWxlMzJfdG9fY3B1KCpyeF9lbmQpKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYtPnVjb2RlX2JlYWNvbl90aW1lID0gbGUzMl90b19jcHUocnhfc3RhcnQtPmJlYWNvbl90aW1lX3N0YW1wKTsKKwlwcml2LT51Y29kZV9iZWFjb25fdGltZSA9IGxlMzJfdG9fY3B1KHBoeV9yZXMtPmJlYWNvbl90aW1lX3N0YW1wKTsKIAogCS8qIEZpbmQgbWF4IHNpZ25hbCBzdHJlbmd0aCAoZEJtKSBhbW9uZyAzIGFudGVubmEvcmVjZWl2ZXIgY2hhaW5zICovCi0Jcnhfc3RhdHVzLnNpZ25hbCA9IGl3bF9jYWxjX3Jzc2kocHJpdiwgcnhfc3RhcnQpOworCXJ4X3N0YXR1cy5zaWduYWwgPSBpd2xfY2FsY19yc3NpKHByaXYsIHBoeV9yZXMpOwogCiAJLyogTWVhbmluZ2Z1bCBub2lzZSB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBvbmx5IGZyb20gYmVhY29uIHN0YXRpc3RpY3MsCiAJICogICB3aGljaCBhcmUgZ2F0aGVyZWQgb25seSB3aGVuIGFzc29jaWF0ZWQsIGFuZCBpbmRpY2F0ZSBub2lzZQpAQCAtMTA1OCwxMyArMTAwMiwxNCBAQAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCXByaXYtPmxhc3Rfcnhfbm9pc2UgPSBJV0xfTk9JU0VfTUVBU19OT1RfQVZBSUxBQkxFOwogCi0JLyogU2V0ICIxIiB0byByZXBvcnQgZ29vZCBkYXRhIGZyYW1lcyBpbiBncm91cHMgb2YgMTAwICovCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAodW5saWtlbHkocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfUlgpKQotCQlpd2xfZGJnX3JlcG9ydF9mcmFtZShwcml2LCByeF9zdGFydCwgbGVuLCBoZWFkZXIsIDEpOworCS8qIFNldCAiMSIgdG8gcmVwb3J0IGdvb2QgZGF0YSBmcmFtZXMgaW4gZ3JvdXBzIG9mIDEwMCAqLworCWlmICh1bmxpa2VseShpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX1JYKSkKKwkJaXdsX2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGh5X3JlcywgbGVuLCBoZWFkZXIsIDEpOwogI2VuZGlmCisJaXdsX2RiZ19sb2dfcnhfZGF0YV9mcmFtZShwcml2LCBsZW4sIGhlYWRlcik7CiAJSVdMX0RFQlVHX1NUQVRTX0xJTUlUKHByaXYsICJSc3NpICVkLCBub2lzZSAlZCwgcXVhbCAlZCwgVFNGICVsbHVcbiIsCi0JCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnNpZ25hbCwKKwkJcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMucXVhbCwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylyeF9zdGF0dXMubWFjdGltZSk7CiAKIAkvKgpAQCAtMTA4MCwxOCArMTAyNSwyNiBAQAogCSAqIG5ldyA4MDIuMTFuIHJhZGlvdGFwIGZpZWxkICJSWCBjaGFpbnMiIHRoYXQgaXMgZGVmaW5lZAogCSAqIGFzIGEgYml0bWFzay4KIAkgKi8KLQlyeF9zdGF0dXMuYW50ZW5uYSA9IGxlMTZfdG9fY3B1KHJ4X3N0YXJ0LT5waHlfZmxhZ3MgJgotCQkJCQlSWF9SRVNfUEhZX0ZMQUdTX0FOVEVOTkFfTVNLKSA+PiA0OworCXJ4X3N0YXR1cy5hbnRlbm5hID0KKwkJbGUxNl90b19jcHUocGh5X3Jlcy0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSykKKwkJPj4gUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX1BPUzsKIAogCS8qIHNldCB0aGUgcHJlYW1ibGUgZmxhZyBpZiBhcHByb3ByaWF0ZSAqLwotCWlmIChyeF9zdGFydC0+cGh5X2ZsYWdzICYgUlhfUkVTX1BIWV9GTEFHU19TSE9SVF9QUkVBTUJMRV9NU0spCisJaWYgKHBoeV9yZXMtPnBoeV9mbGFncyAmIFJYX1JFU19QSFlfRkxBR1NfU0hPUlRfUFJFQU1CTEVfTVNLKQogCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOwogCi0JbmV0d29ya19wYWNrZXQgPSBpd2xfaXNfbmV0d29ya19wYWNrZXQocHJpdiwgaGVhZGVyKTsKLQlpZiAobmV0d29ya19wYWNrZXQpIHsKKwkvKiBTZXQgdXAgdGhlIEhUIHBoeSBmbGFncyAqLworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19IVF9NU0spCisJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfSFQ7CisJaWYgKHJhdGVfbl9mbGFncyAmIFJBVEVfTUNTX0hUNDBfTVNLKQorCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHXzQwTUhaOworCWlmIChyYXRlX25fZmxhZ3MgJiBSQVRFX01DU19TR0lfTVNLKQorCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUX0dJOworCisJaWYgKGl3bF9pc19uZXR3b3JrX3BhY2tldChwcml2LCBoZWFkZXIpKSB7CiAJCXByaXYtPmxhc3RfcnhfcnNzaSA9IHJ4X3N0YXR1cy5zaWduYWw7CiAJCXByaXYtPmxhc3RfYmVhY29uX3RpbWUgPSAgcHJpdi0+dWNvZGVfYmVhY29uX3RpbWU7Ci0JCXByaXYtPmxhc3RfdHNmID0gbGU2NF90b19jcHUocnhfc3RhcnQtPnRpbWVzdGFtcCk7CisJCXByaXYtPmxhc3RfdHNmID0gbGU2NF90b19jcHUocGh5X3Jlcy0+dGltZXN0YW1wKTsKIAl9CiAKIAlmYyA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY29udHJvbCk7CkBAIC0xMTAzLDggKzEwNTYsOCBAQAogCQkJCQkJaGVhZGVyLT5hZGRyMik7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6Ci0JCQlpd2xfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEocHJpdiwgaW5jbHVkZV9waHksIHJ4YiwKLQkJCQkgICAmcnhfc3RhdHVzKTsKKwkJaXdsX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHByaXYsIGhlYWRlciwgbGVuLCBhbXBkdV9zdGF0dXMsCisJCQkJcnhiLCAmcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKaW5kZXggZTI2ODc1ZC4uNGYzYTEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwpAQCAtMTA5LDEzICsxMDksMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQpOwogCi1pbnQgaXdsX3NlbmRfc2Nhbl9hYm9ydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bF9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXM7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NDQU5fQUJPUlRfQ01ELAotCQkubWV0YS5mbGFncyA9IENNRF9XQU5UX1NLQiwKKwkJLmZsYWdzID0gQ01EX1dBTlRfU0tCLAogCX07CiAKIAkvKiBJZiB0aGVyZSBpc24ndCBhIHNjYW4gYWN0aXZlbHkgZ29pbmcgb24gaW4gdGhlIGhhcmR3YXJlCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPnUuc3RhdHVzICE9IENBTl9BQk9SVF9TVEFUVVMpIHsKIAkJLyogVGhlIHNjYW4gYWJvcnQgd2lsbCByZXR1cm4gMSBmb3Igc3VjY2VzcyBvcgogCQkgKiAyIGZvciAiZmFpbHVyZSIuICBBIGZhaWx1cmUgY29uZGl0aW9uIGNhbiBiZQpAQCAtMTQ2LDExICsxNDYsMTAgQEAKIAl9CiAKIAlwcml2LT5hbGxvY19yeGJfc2tiLS07Ci0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOworCWRldl9rZnJlZV9za2JfYW55KGNtZC5yZXBseV9za2IpOwogCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woaXdsX3NlbmRfc2Nhbl9hYm9ydCk7CiAKIC8qIFNlcnZpY2UgcmVzcG9uc2UgdG8gUkVQTFlfU0NBTl9DTUQgKDB4ODApICovCiBzdGF0aWMgdm9pZCBpd2xfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0zMjIsNyArMzIxLDcgQEAKIAkJCQkgICAgIHU4IGlzX2FjdGl2ZSwgdTggbl9wcm9iZXMsCiAJCQkJICAgICBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbCAqc2Nhbl9jaCkKIHsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwpAQCAtMzM0LDIwICszMzMsMTkgQEAKIAlpZiAoIXNiYW5kKQogCQlyZXR1cm4gMDsKIAotCWNoYW5uZWxzID0gc2JhbmQtPmNoYW5uZWxzOwotCiAJYWN0aXZlX2R3ZWxsID0gaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kLCBuX3Byb2Jlcyk7CiAJcGFzc2l2ZV9kd2VsbCA9IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwogCiAJaWYgKHBhc3NpdmVfZHdlbGwgPD0gYWN0aXZlX2R3ZWxsKQogCQlwYXNzaXZlX2R3ZWxsID0gYWN0aXZlX2R3ZWxsICsgMTsKIAotCWZvciAoaSA9IDAsIGFkZGVkID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGNoYW5uZWxzW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2hhbiA9IHByaXYtPnNjYW5fcmVxdWVzdC0+Y2hhbm5lbHNbaV07CisKKwkJaWYgKGNoYW4tPmJhbmQgIT0gYmFuZCkKIAkJCWNvbnRpbnVlOwogCi0JCWNoYW5uZWwgPQotCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxKTsKKwkJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCXNjYW5fY2gtPmNoYW5uZWwgPSBjcHVfdG9fbGUxNihjaGFubmVsKTsKIAogCQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCk7CkBAIC0zNTgsNyArMzU2LDcgQEAKIAkJfQogCiAJCWlmICghaXNfYWN0aXZlIHx8IGlzX2NoYW5uZWxfcGFzc2l2ZShjaF9pbmZvKSB8fAotCQkgICAgKGNoYW5uZWxzW2ldLmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKSkKKwkJICAgIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpCiAJCQlzY2FuX2NoLT50eXBlID0gU0NBTl9DSEFOTkVMX1RZUEVfUEFTU0lWRTsKIAkJZWxzZQogCQkJc2Nhbl9jaC0+dHlwZSA9IFNDQU5fQ0hBTk5FTF9UWVBFX0FDVElWRTsKQEAgLTQwNSw3ICs0MDMsNyBAQAogCQlwcml2LT5zY2FuX3R4X2FudFtJRUVFODAyMTFfQkFORF8yR0haXSA9IGFudF9pZHg7CiB9CiAKLWludCBpd2xfc2Nhbl9pbml0aWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewogCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7CkBAIC00MjMsMTAgKzQyMSw2IEBACiAJfQogCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOwotCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfRykKLQkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7Ci0JaWYgKHByaXYtPmNmZy0+c2t1ICYgSVdMX1NLVV9BKQotCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CiAJcHJpdi0+c2Nhbl9zdGFydCA9IGppZmZpZXM7CiAJcHJpdi0+c2Nhbl9wYXNzX3N0YXJ0ID0gcHJpdi0+c2Nhbl9zdGFydDsKQEAgLTQzNSw3ICs0MjksNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKGl3bF9zY2FuX2luaXRpYXRlKTsKIAogI2RlZmluZSBJV0xfREVMQVlfTkVYVF9TQ0FOIChIWioyKQogCkBAIC00NDQsNyArNDM3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCkBAIC00NzgsNiArNDcxLDEwIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKKwlwcml2LT5zY2FuX2JhbmRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5uX2NoYW5uZWxzOyBpKyspCisJCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKHJlcS0+Y2hhbm5lbHNbaV0tPmJhbmQpOworCiAJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gcmVxOwogCiAJcmV0ID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7CkBAIC01NzAsNyArNTY3LDcgQEAKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU0NBTl9DTUQsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9zY2FuX2NtZCksCi0JCS5tZXRhLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKKwkJLmZsYWdzID0gQ01EX1NJWkVfSFVHRSwKIAl9OwogCXN0cnVjdCBpd2xfc2Nhbl9jbWQgKnNjYW47CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKQEAgLTc5OSw3ICs3OTYsOCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGFib3J0X3NjYW4pOwogCi0JaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpIHx8CisJICAgICF0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IGZmZDVjNjEuLmEyYjllYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC05Nyw4ICs5Nyw5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBpd2xfYWRkX3N0YV9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bF9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGl3bF9hZGRfc3RhX2NhbGxiYWNrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CiAJc3RydWN0IGl3bF9hZGRzdGFfY21kICphZGRzdGEgPQpAQCAtMTA3LDE0ICsxMDgsMTQgQEAKIAogCWlmICghc2tiKSB7CiAJCUlXTF9FUlIocHJpdiwgIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAl9CiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7CiAJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAogCQkJICByZXMtPmhkci5mbGFncyk7Ci0JCXJldHVybiAxOworCQlyZXR1cm47CiAJfQogCiAJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKQEAgLTEyNiw5ICsxMjcsNiBAQAogCQkJICAgICByZXMtPnUuYWRkX3N0YS5zdGF0dXMpOwogCQlicmVhazsKIAl9Ci0KLQkvKiBXZSBkaWRuJ3QgY2FjaGUgdGhlIFNLQjsgbGV0IHRoZSBjYWxsZXIgZnJlZSBpdCAqLwotCXJldHVybiAxOwogfQogCiBpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xMzksMTQgKzEzNywxNCBAQAogCXU4IGRhdGFbc2l6ZW9mKCpzdGEpXTsKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfQUREX1NUQSwKLQkJLm1ldGEuZmxhZ3MgPSBmbGFncywKKwkJLmZsYWdzID0gZmxhZ3MsCiAJCS5kYXRhID0gZGF0YSwKIAl9OwogCiAJaWYgKGZsYWdzICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsX2FkZF9zdGFfY2FsbGJhY2s7CisJCWNtZC5jYWxsYmFjayA9IGl3bF9hZGRfc3RhX2NhbGxiYWNrOwogCWVsc2UKLQkJY21kLm1ldGEuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOworCQljbWQuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOwogCiAJY21kLmxlbiA9IHByaXYtPmNmZy0+b3BzLT51dGlscy0+YnVpbGRfYWRkc3RhX2hjbWQoc3RhLCBkYXRhKTsKIAlyZXQgPSBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CkBAIC0xNTQsNyArMTUyLDcgQEAKIAlpZiAocmV0IHx8IChmbGFncyAmIENNRF9BU1lOQykpCiAJCXJldHVybiByZXQ7CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKIAkJCSAgcmVzLT5oZHIuZmxhZ3MpOwpAQCAtMTc1LDcgKzE3Myw3IEBACiAJfQogCiAJcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShjbWQucmVwbHlfc2tiKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMTYsMTAgKzIxNCwxMCBAQAogCXN0YV9mbGFncyB8PSBjcHVfdG9fbGUzMigKIAkgICAgICAodTMyKXN0YV9odF9pbmYtPmFtcGR1X2RlbnNpdHkgPDwgU1RBX0ZMR19BR0dfTVBEVV9ERU5TSVRZX1BPUyk7CiAKLQlpZiAoaXdsX2lzX2ZhdF90eF9hbGxvd2VkKHByaXYsIHN0YV9odF9pbmYpKQotCQlzdGFfZmxhZ3MgfD0gU1RBX0ZMR19GQVRfRU5fTVNLOworCWlmIChpd2xfaXNfaHQ0MF90eF9hbGxvd2VkKHByaXYsIHN0YV9odF9pbmYpKQorCQlzdGFfZmxhZ3MgfD0gU1RBX0ZMR19IVDQwX0VOX01TSzsKIAllbHNlCi0JCXN0YV9mbGFncyAmPSB+U1RBX0ZMR19GQVRfRU5fTVNLOworCQlzdGFfZmxhZ3MgJj0gflNUQV9GTEdfSFQ0MF9FTl9NU0s7CiAKIAlwcml2LT5zdGF0aW9uc1tpbmRleF0uc3RhLnN0YXRpb25fZmxhZ3MgPSBzdGFfZmxhZ3M7CiAgZG9uZToKQEAgLTMyNCw4ICszMjIsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3JlbW92ZV9zdGFfY2FsbGJhY2soc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIHN0cnVjdCBpd2xfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBpd2xfcmVtb3ZlX3N0YV9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAorCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwogCXN0cnVjdCBpd2xfcmVtX3N0YV9jbWQgKnJtX3N0YSA9CkBAIC0zMzQsMTQgKzMzMywxNCBAQAogCiAJaWYgKCFza2IpIHsKIAkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfUkVNT1ZFX1NUQS5cbiIpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuOwogCX0KIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKIAkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCXJlcy0+aGRyLmZsYWdzKTsKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAl9CiAKIAlzd2l0Y2ggKHJlcy0+dS5yZW1fc3RhLnN0YXR1cykgewpAQCAtMzUyLDkgKzM1MSw2IEBACiAJCUlXTF9FUlIocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKIAkJYnJlYWs7CiAJfQotCi0JLyogV2UgZGlkbid0IGNhY2hlIHRoZSBTS0I7IGxldCB0aGUgY2FsbGVyIGZyZWUgaXQgKi8KLQlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBpd2xfc2VuZF9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IHU4ICphZGRyLApAQCAtMzY4LDcgKzM2NCw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1JFTU9WRV9TVEEsCiAJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9yZW1fc3RhX2NtZCksCi0JCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5mbGFncyA9IGZsYWdzLAogCQkuZGF0YSA9ICZybV9zdGFfY21kLAogCX07CiAKQEAgLTM3NywxNSArMzczLDE1IEBACiAJbWVtY3B5KCZybV9zdGFfY21kLmFkZHIsIGFkZHIgLCBFVEhfQUxFTik7CiAKIAlpZiAoZmxhZ3MgJiBDTURfQVNZTkMpCi0JCWNtZC5tZXRhLnUuY2FsbGJhY2sgPSBpd2xfcmVtb3ZlX3N0YV9jYWxsYmFjazsKKwkJY21kLmNhbGxiYWNrID0gaXdsX3JlbW92ZV9zdGFfY2FsbGJhY2s7CiAJZWxzZQotCQljbWQubWV0YS5mbGFncyB8PSBDTURfV0FOVF9TS0I7CisJCWNtZC5mbGFncyB8PSBDTURfV0FOVF9TS0I7CiAJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWQpOwogCiAJaWYgKHJldCB8fCAoZmxhZ3MgJiBDTURfQVNZTkMpKQogCQlyZXR1cm4gcmV0OwogCi0JcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLm1ldGEudS5za2ItPmRhdGE7CisJcmVzID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLnJlcGx5X3NrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKIAkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCQkgIHJlcy0+aGRyLmZsYWdzKTsKQEAgLTQwNiw3ICs0MDIsNyBAQAogCX0KIAogCXByaXYtPmFsbG9jX3J4Yl9za2ItLTsKLQlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLnJlcGx5X3NrYik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDY4LDcgKzQ2NCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChpd2xfcmVtb3ZlX3N0YXRpb24pOwogCiAvKioKICAqIGl3bF9jbGVhcl9zdGF0aW9uc190YWJsZSAtIENsZWFyIHRoZSBkcml2ZXIncyBzdGF0aW9uIHRhYmxlCkBAIC01MjUsNyArNTIwLDcgQEAKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfV0VQS0VZLAogCQkuZGF0YSA9IHdlcF9jbWQsCi0JCS5tZXRhLmZsYWdzID0gQ01EX0FTWU5DLAorCQkuZmxhZ3MgPSBDTURfU1lOQywKIAl9OwogCiAJbWVtc2V0KHdlcF9jbWQsIDAsIGNtZF9zaXplICsKQEAgLTkzMCw3ICs5MjUsNyBAQAogCXN0cnVjdCBpd2xfaG9zdF9jbWQgY21kID0gewogCQkuaWQgPSBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCksCi0JCS5tZXRhLmZsYWdzID0gZmxhZ3MsCisJCS5mbGFncyA9IGZsYWdzLAogCQkuZGF0YSA9IGxxLAogCX07CiAKQEAgLTEwNTYsMTEgKzEwNTEsMTAgQEAKIGludCBpd2xfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJaW50IHN0YV9pZDsKLQl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogCS8qIElmIHRoaXMgZnJhbWUgaXMgYnJvYWRjYXN0IG9yIG1hbmFnZW1lbnQsIHVzZSBicm9hZGNhc3Qgc3RhdGlvbiBpZCAqLwotCWlmICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB8fAotCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSB8fCAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCiAJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3dpdGNoIChwcml2LT5pd19tb2RlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCAyZTg5MDQwLi5hNzQyMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQogCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKIAotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgKiBxLT5uX3dpbmRvdzsKKwlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9kZXZpY2VfY21kKSAqIHEtPm5fd2luZG93OwogCiAJLyogRGUtYWxsb2MgYXJyYXkgb2YgY29tbWFuZC90eCBidWZmZXJzICovCiAJZm9yIChpID0gMDsgaSA8IFRGRF9UWF9DTURfU0xPVFM7IGkrKykKQEAgLTE1Niw2ICsxNTYsMTIgQEAKIAlrZnJlZSh0eHEtPnR4Yik7CiAJdHhxLT50eGIgPSBOVUxMOwogCisJLyogZGVhbGxvY2F0ZSBhcnJheXMgKi8KKwlrZnJlZSh0eHEtPmNtZCk7CisJa2ZyZWUodHhxLT5tZXRhKTsKKwl0eHEtPmNtZCA9IE5VTEw7CisJdHhxLT5tZXRhID0gTlVMTDsKKwogCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwogCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7CiB9CkBAIC0xNzksNyArMTg1LDcgQEAKIAlpZiAocS0+bl9iZCA9PSAwKQogCQlyZXR1cm47CiAKLQlsZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9jbWQpICogcS0+bl93aW5kb3c7CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCkgKiBxLT5uX3dpbmRvdzsKIAlsZW4gKz0gSVdMX01BWF9TQ0FOX1NJWkU7CiAKIAkvKiBEZS1hbGxvYyBhcnJheSBvZiBjb21tYW5kL3R4IGJ1ZmZlcnMgKi8KQEAgLTMxOCw2ICszMjQsNyBAQAogewogCWludCBpLCBsZW47CiAJaW50IHJldDsKKwlpbnQgYWN0dWFsX3Nsb3RzID0gc2xvdHNfbnVtOwogCiAJLyoKIAkgKiBBbGxvYyBidWZmZXIgYXJyYXkgZm9yIGNvbW1hbmRzIChUeCBvciBvdGhlciB0eXBlcyBvZiBjb21tYW5kcykuCkBAIC0zMjcsMTQgKzMzNCwyMiBAQAogCSAqIEZvciBub3JtYWwgVHggcXVldWVzIChhbGwgb3RoZXIgcXVldWVzKSwgbm8gc3VwZXItc2l6ZSBjb21tYW5kCiAJICogc3BhY2UgaXMgbmVlZGVkLgogCSAqLwotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCk7Ci0JZm9yIChpID0gMDsgaSA8PSBzbG90c19udW07IGkrKykgewotCQlpZiAoaSA9PSBzbG90c19udW0pIHsKLQkJCWlmICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCi0JCQkJbGVuICs9IElXTF9NQVhfU0NBTl9TSVpFOwotCQkJZWxzZQotCQkJCWNvbnRpbnVlOwotCQl9CisJaWYgKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKKwkJYWN0dWFsX3Nsb3RzKys7CisKKwl0eHEtPm1ldGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsX2NtZF9tZXRhKSAqIGFjdHVhbF9zbG90cywKKwkJCSAgICBHRlBfS0VSTkVMKTsKKwl0eHEtPmNtZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqKSAqIGFjdHVhbF9zbG90cywKKwkJCSAgIEdGUF9LRVJORUwpOworCisJaWYgKCF0eHEtPm1ldGEgfHwgIXR4cS0+Y21kKQorCQlnb3RvIG91dF9mcmVlX2FycmF5czsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2RldmljZV9jbWQpOworCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfc2xvdHM7IGkrKykgeworCQkvKiBvbmx5IGhhcHBlbnMgZm9yIGNtZCBxdWV1ZSAqLworCQlpZiAoaSA9PSBzbG90c19udW0pCisJCQlsZW4gKz0gSVdMX01BWF9TQ0FOX1NJWkU7CiAKIAkJdHhxLT5jbWRbaV0gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdHhxLT5jbWRbaV0pCkBAIC0zNDgsNiArMzYzLDEwIEBACiAKIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKIAorCS8qIGFnZ3JlZ2F0aW9uIFRYIHF1ZXVlcyB3aWxsIGdldCB0aGVpciBJRCB3aGVuIGFnZ3JlZ2F0aW9uIGJlZ2lucyAqLworCWlmICh0eHFfaWQgPD0gSVdMX1RYX0ZJRk9fQUMzKQorCQl0eHEtPnN3cV9pZCA9IHR4cV9pZDsKKwogCS8qIFRGRF9RVUVVRV9TSVpFX01BWCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKIAkgKiBpd2xfcXVldWVfaW5jX3dyYXAgYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwogCUJVSUxEX0JVR19PTihURkRfUVVFVUVfU0laRV9NQVggJiAoVEZEX1FVRVVFX1NJWkVfTUFYIC0gMSkpOwpAQCAtMzYwLDE1ICszNzksMTIgQEAKIAogCXJldHVybiAwOwogZXJyOgotCWZvciAoaSA9IDA7IGkgPCBzbG90c19udW07IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfc2xvdHM7IGkrKykKIAkJa2ZyZWUodHhxLT5jbWRbaV0pOwotCQl0eHEtPmNtZFtpXSA9IE5VTEw7Ci0JfQorb3V0X2ZyZWVfYXJyYXlzOgorCWtmcmVlKHR4cS0+bWV0YSk7CisJa2ZyZWUodHhxLT5jbWQpOwogCi0JaWYgKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkgewotCQlrZnJlZSh0eHEtPmNtZFtzbG90c19udW1dKTsKLQkJdHhxLT5jbWRbc2xvdHNfbnVtXSA9IE5VTEw7Ci0JfQogCXJldHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTChpd2xfdHhfcXVldWVfaW5pdCk7CkBAIC01NTAsNjIgKzU2Niw4MSBAQAogc3RhdGljIHZvaWQgaXdsX3R4X2NtZF9idWlsZF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2xfdHhfY21kICp0eF9jbWQsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkgICAgICBfX2xlMTYgZmMsIGludCBzdGFfaWQsCi0JCQkgICAgICBpbnQgaXNfaGNjYSkKKwkJCSAgICAgIF9fbGUxNiBmYywgaW50IGlzX2hjY2EpCiB7Ci0JdTMyIHJhdGVfZmxhZ3MgPSAwOworCXUzMiByYXRlX2ZsYWdzOwogCWludCByYXRlX2lkeDsKLQl1OCBydHNfcmV0cnlfbGltaXQgPSAwOwotCXU4IGRhdGFfcmV0cnlfbGltaXQgPSAwOworCXU4IHJ0c19yZXRyeV9saW1pdDsKKwl1OCBkYXRhX3JldHJ5X2xpbWl0OwogCXU4IHJhdGVfcGxjcDsKIAotCXJhdGVfaWR4ID0gbWluKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShwcml2LT5odywgaW5mbyktPmh3X3ZhbHVlICYgMHhmZmZmLAotCQkJSVdMX1JBVEVfQ09VTlQgLSAxKTsKLQotCXJhdGVfcGxjcCA9IGl3bF9yYXRlc1tyYXRlX2lkeF0ucGxjcDsKLQotCXJ0c19yZXRyeV9saW1pdCA9IChpc19oY2NhKSA/Ci0JICAgIFJUU19IQ0NBX1JFVFJZX0xJTUlUIDogUlRTX0RGQVVMVF9SRVRSWV9MSU1JVDsKLQotCWlmICgocmF0ZV9pZHggPj0gSVdMX0ZJUlNUX0NDS19SQVRFKSAmJiAocmF0ZV9pZHggPD0gSVdMX0xBU1RfQ0NLX1JBVEUpKQotCQlyYXRlX2ZsYWdzIHw9IFJBVEVfTUNTX0NDS19NU0s7Ci0KLQotCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpIHsKLQkJZGF0YV9yZXRyeV9saW1pdCA9IDM7Ci0JCWlmIChkYXRhX3JldHJ5X2xpbWl0IDwgcnRzX3JldHJ5X2xpbWl0KQotCQkJcnRzX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQl9IGVsc2UKLQkJZGF0YV9yZXRyeV9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1JFVFJZOwotCisJLyogU2V0IHJldHJ5IGxpbWl0IG9uIERBVEEgcGFja2V0cyBhbmQgUHJvYmUgUmVzcG9uc2VzKi8KIAlpZiAocHJpdi0+ZGF0YV9yZXRyeV9saW1pdCAhPSAtMSkKIAkJZGF0YV9yZXRyeV9saW1pdCA9IHByaXYtPmRhdGFfcmV0cnlfbGltaXQ7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQorCQlkYXRhX3JldHJ5X2xpbWl0ID0gMzsKKwllbHNlCisJCWRhdGFfcmV0cnlfbGltaXQgPSBJV0xfREVGQVVMVF9UWF9SRVRSWTsKKwl0eF9jbWQtPmRhdGFfcmV0cnlfbGltaXQgPSBkYXRhX3JldHJ5X2xpbWl0OwogCisJLyogU2V0IHJldHJ5IGxpbWl0IG9uIFJUUyBwYWNrZXRzICovCisJcnRzX3JldHJ5X2xpbWl0ID0gKGlzX2hjY2EpID8gIFJUU19IQ0NBX1JFVFJZX0xJTUlUIDoKKwkJUlRTX0RGQVVMVF9SRVRSWV9MSU1JVDsKKwlpZiAoZGF0YV9yZXRyeV9saW1pdCA8IHJ0c19yZXRyeV9saW1pdCkKKwkJcnRzX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKKwl0eF9jbWQtPnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKIAorCS8qIERBVEEgcGFja2V0cyB3aWxsIHVzZSB0aGUgdUNvZGUgc3RhdGlvbiB0YWJsZSBmb3IgcmF0ZS9hbnRlbm5hCisJICogc2VsZWN0aW9uICovCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgewogCQl0eF9jbWQtPmluaXRpYWxfcmF0ZV9pbmRleCA9IDA7CiAJCXR4X2NtZC0+dHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19TVEFfUkFURV9NU0s7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChmYyAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1NUWVBFKSkgewotCQljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BVVRIKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfREVBVVRIKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKToKLQkJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOgotCQkJaWYgKHR4X2NtZC0+dHhfZmxhZ3MgJiBUWF9DTURfRkxHX1JUU19NU0spIHsKLQkJCQl0eF9jbWQtPnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1JUU19NU0s7Ci0JCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0NUU19NU0s7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcHJpdi0+bWdtdF90eF9hbnQgPSBpd2xfdG9nZ2xlX3R4X2FudChwcml2LCBwcml2LT5tZ210X3R4X2FudCk7Ci0JCXJhdGVfZmxhZ3MgfD0gaXdsX2FudF9pZHhfdG9fZmxhZ3MocHJpdi0+bWdtdF90eF9hbnQpOworCQlyZXR1cm47CiAJfQogCi0JdHhfY21kLT5ydHNfcmV0cnlfbGltaXQgPSBydHNfcmV0cnlfbGltaXQ7Ci0JdHhfY21kLT5kYXRhX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKKwkvKioKKwkgKiBJZiB0aGUgY3VycmVudCBUWCByYXRlIHN0b3JlZCBpbiBtYWM4MDIxMSBoYXMgdGhlIE1DUyBiaXQgc2V0LCBpdCdzCisJICogbm90IHJlYWxseSBhIFRYIHJhdGUuICBUaHVzLCB3ZSB1c2UgdGhlIGxvd2VzdCBzdXBwb3J0ZWQgcmF0ZSBmb3IKKwkgKiB0aGlzIGJhbmQuICBBbHNvIHVzZSB0aGUgbG93ZXN0IHN1cHBvcnRlZCByYXRlIGlmIHRoZSBzdG9yZWQgcmF0ZQorCSAqIGluZGV4IGlzIGludmFsaWQuCisJICovCisJcmF0ZV9pZHggPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeDsKKwlpZiAoaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MgfHwKKwkJCShyYXRlX2lkeCA8IDApIHx8IChyYXRlX2lkeCA+IElXTF9SQVRFX0NPVU5UX0xFR0FDWSkpCisJCXJhdGVfaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgoJnByaXYtPmJhbmRzW2luZm8tPmJhbmRdLAorCQkJCWluZm8tPmNvbnRyb2wuc3RhKTsKKwkvKiBGb3IgNSBHSFogYmFuZCwgcmVtYXAgbWFjODAyMTEgcmF0ZSBpbmRpY2VzIGludG8gZHJpdmVyIGluZGljZXMgKi8KKwlpZiAoaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQlyYXRlX2lkeCArPSBJV0xfRklSU1RfT0ZETV9SQVRFOworCS8qIEdldCBQTENQIHJhdGUgZm9yIHR4X2NtZC0+cmF0ZV9uX2ZsYWdzICovCisJcmF0ZV9wbGNwID0gaXdsX3JhdGVzW3JhdGVfaWR4XS5wbGNwOworCS8qIFplcm8gb3V0IGZsYWdzIGZvciB0aGlzIHBhY2tldCAqLworCXJhdGVfZmxhZ3MgPSAwOworCisJLyogU2V0IENDSyBmbGFnIGFzIG5lZWRlZCAqLworCWlmICgocmF0ZV9pZHggPj0gSVdMX0ZJUlNUX0NDS19SQVRFKSAmJiAocmF0ZV9pZHggPD0gSVdMX0xBU1RfQ0NLX1JBVEUpKQorCQlyYXRlX2ZsYWdzIHw9IFJBVEVfTUNTX0NDS19NU0s7CisKKwkvKiBTZXQgdXAgUlRTIGFuZCBDVFMgZmxhZ3MgZm9yIGNlcnRhaW4gcGFja2V0cyAqLworCXN3aXRjaCAoZmMgJiBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9TVFlQRSkpIHsKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BVVRIKToKKwljYXNlIGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ERUFVVEgpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUSk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOgorCQlpZiAodHhfY21kLT50eF9mbGFncyAmIFRYX0NNRF9GTEdfUlRTX01TSykgeworCQkJdHhfY21kLT50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19SVFNfTVNLOworCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0NUU19NU0s7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHVwIGFudGVubmFzICovCisJcHJpdi0+bWdtdF90eF9hbnQgPSBpd2xfdG9nZ2xlX3R4X2FudChwcml2LCBwcml2LT5tZ210X3R4X2FudCk7CisJcmF0ZV9mbGFncyB8PSBpd2xfYW50X2lkeF90b19mbGFncyhwcml2LT5tZ210X3R4X2FudCk7CisKKwkvKiBTZXQgdGhlIHJhdGUgaW4gdGhlIFRYIGNtZCAqLwogCXR4X2NtZC0+cmF0ZV9uX2ZsYWdzID0gaXdsX2h3X3NldF9yYXRlX25fZmxhZ3MocmF0ZV9wbGNwLCByYXRlX2ZsYWdzKTsKIH0KIApAQCAtNjUyLDE0ICs2ODcsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsX3VwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBmYywgdTE2IGxlbikKLXsKLQkvKiAwIC0gbWdtdCwgMSAtIGNudCwgMiAtIGRhdGEgKi8KLQlpbnQgaWR4ID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDI7Ci0JcHJpdi0+dHhfc3RhdHNbaWR4XS5jbnQrKzsKLQlwcml2LT50eF9zdGF0c1tpZHhdLmJ5dGVzICs9IGxlbjsKLX0KLQogLyoKICAqIHN0YXJ0IFJFUExZX1RYIGNvbW1hbmQgcHJvY2VzcwogICovCkBAIC02NjksNyArNjk2LDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpd2xfcXVldWUgKnE7Ci0Jc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CisJc3RydWN0IGl3bF9kZXZpY2VfY21kICpvdXRfY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCXN0cnVjdCBpd2xfdHhfY21kICp0eF9jbWQ7CiAJaW50IHN3cV9pZCwgdHhxX2lkOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwpAQCAtNjkyLDEyICs3MjAsNiBAQAogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIAotCWlmICgoaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWUgJiAweEZGKSA9PQotCSAgICAgSVdMX0lOVkFMSURfUkFURSkgewotCQlJV0xfRVJSKHByaXYsICJFUlJPUjogTm8gVFggcmF0ZSBhdmFpbGFibGUuXG4iKTsKLQkJZ290byBkcm9wX3VubG9jazsKLQl9Ci0KIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC03MDksMTAgKzczMSw5IEBACiAJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBSRUFTU09DIGZyYW1lXG4iKTsKICNlbmRpZgogCi0JLyogZHJvcCBhbGwgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KKwkvKiBkcm9wIGFsbCBub24taW5qZWN0ZWQgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmCi0JICAgICghaXdsX2lzX21vbml0b3JfbW9kZShwcml2KSB8fAotCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpICYmIC8qIHBhY2tldCBpbmplY3Rpb24gKi8KKwkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpICYmCiAJICAgICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwKIAkgICAgICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJiAhcHJpdi0+YXNzb2NfaWQpIHx8CiAJICAgICAhcHJpdi0+YXNzb2Nfc3RhdGlvbl9hZGRlZCkpIHsKQEAgLTcyMyw3ICs3NDQsMTAgQEAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkKKwkJc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKKwllbHNlCisJCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwpAQCAtNzMyLDExICs3NTYsMTIgQEAKIAogCUlXTF9ERUJVR19UWChwcml2LCAic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKIAotCXN3cV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCXR4cV9pZCA9IHN3cV9pZDsKKwl0eHFfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewogCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwogCQl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCQlpZiAodW5saWtlbHkodGlkID49IE1BWF9USURfQ09VTlQpKQorCQkJZ290byBkcm9wX3VubG9jazsKIAkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlcjsKIAkJc2VxX251bWJlciAmPSBJRUVFODAyMTFfU0NUTF9TRVE7CiAJCWhkci0+c2VxX2N0cmwgPSBoZHItPnNlcV9jdHJsICYKQEAgLTc0NCwxNSArNzY5LDEzIEBACiAJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2VxX251bWJlcik7CiAJCXNlcV9udW1iZXIgKz0gMHgxMDsKIAkJLyogYWdncmVnYXRpb24gaXMgb24gZm9yIHRoaXMgPHN0YSx0aWQ+ICovCi0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKIAkJCXR4cV9pZCA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnR4cV9pZDsKLQkJCXN3cV9pZCA9IGl3bF92aXJ0dWFsX2FnZ19xdWV1ZV9udW0oc3dxX2lkLCB0eHFfaWQpOwotCQl9CiAJfQogCiAJdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOworCXN3cV9pZCA9IHR4cS0+c3dxX2lkOwogCXEgPSAmdHhxLT5xOwotCXR4cS0+c3dxX2lkID0gc3dxX2lkOwogCiAJaWYgKHVubGlrZWx5KGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykpCiAJCWdvdG8gZHJvcF91bmxvY2s7CkBAIC03NjYsNiArNzg5LDcgQEAKIAogCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBlbnRyeSBpbiBxdWV1ZSdzIGFycmF5IG9mIFR4L2NtZCBidWZmZXJzICovCiAJb3V0X2NtZCA9IHR4cS0+Y21kW3EtPndyaXRlX3B0cl07CisJb3V0X21ldGEgPSAmdHhxLT5tZXRhW3EtPndyaXRlX3B0cl07CiAJdHhfY21kID0gJm91dF9jbWQtPmNtZC50eDsKIAltZW1zZXQoJm91dF9jbWQtPmhkciwgMCwgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwogCW1lbXNldCh0eF9jbWQsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2NtZCkpOwpAQCAtNzkzLDEyICs4MTcsMTIgQEAKIAogCS8qIFRPRE8gbmVlZCB0aGlzIGZvciBidXJzdCBtb2RlIGxhdGVyIG9uICovCiAJaXdsX3R4X2NtZF9idWlsZF9iYXNpYyhwcml2LCB0eF9jbWQsIGluZm8sIGhkciwgc3RhX2lkKTsKKwlpd2xfZGJnX2xvZ190eF9kYXRhX2ZyYW1lKHByaXYsIGxlbiwgaGRyKTsKIAogCS8qIHNldCBpc19oY2NhIHRvIDA7IGl0IHByb2JhYmx5IHdpbGwgbmV2ZXIgYmUgaW1wbGVtZW50ZWQgKi8KLQlpd2xfdHhfY21kX2J1aWxkX3JhdGUocHJpdiwgdHhfY21kLCBpbmZvLCBmYywgc3RhX2lkLCAwKTsKKwlpd2xfdHhfY21kX2J1aWxkX3JhdGUocHJpdiwgdHhfY21kLCBpbmZvLCBmYywgMCk7CiAKLQlpd2xfdXBkYXRlX3R4X3N0YXRzKHByaXYsIGxlMTZfdG9fY3B1KGZjKSwgbGVuKTsKLQorCWl3bF91cGRhdGVfc3RhdHMocHJpdiwgdHJ1ZSwgZmMsIGxlbik7CiAJLyoKIAkgKiBVc2UgdGhlIGZpcnN0IGVtcHR5IGVudHJ5IGluIHRoaXMgcXVldWUncyBjb21tYW5kIGJ1ZmZlciBhcnJheQogCSAqIHRvIGNvbnRhaW4gdGhlIFR4IGNvbW1hbmQgYW5kIE1BQyBoZWFkZXIgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyCkBAIC04MjgsOCArODUyLDggQEAKIAl0eGNtZF9waHlzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKIAkJCQkgICAgJm91dF9jbWQtPmhkciwgbGVuLAogCQkJCSAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwotCXBjaV91bm1hcF9hZGRyX3NldCgmb3V0X2NtZC0+bWV0YSwgbWFwcGluZywgdHhjbWRfcGh5cyk7Ci0JcGNpX3VubWFwX2xlbl9zZXQoJm91dF9jbWQtPm1ldGEsIGxlbiwgbGVuKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQob3V0X21ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOworCXBjaV91bm1hcF9sZW5fc2V0KG91dF9tZXRhLCBsZW4sIGxlbik7CiAJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKIAkgKiBmaXJzdCBlbnRyeSAqLwogCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCkBAIC05MjIsNyArOTQ2LDggQEAKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZDsKKwlzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKm91dF9jbWQ7CisJc3RydWN0IGl3bF9jbWRfbWV0YSAqb3V0X21ldGE7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbGVuLCByZXQ7CkBAIC05MzYsMjUgKzk2MSwzMiBAQAogCSAqIHRoZSBURkRfTUFYX1BBWUxPQURfU0laRSwgYW5kIGl0IHNlbnQgYXMgYSAnc21hbGwnIGNvbW1hbmQgdGhlbgogCSAqIHdlIHdpbGwgbmVlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgVEZEIGVudHJpZXMgKi8KIAlCVUdfT04oKGZpeF9zaXplID4gVEZEX01BWF9QQVlMT0FEX1NJWkUpICYmCi0JICAgICAgICEoY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOworCSAgICAgICAhKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGl3bF9xdWV1ZV9zcGFjZShxKSA8ICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSA/IDIgOiAxKSkgeworCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7CiAJCUlXTF9FUlIocHJpdiwgIk5vIHNwYWNlIGZvciBUeFxuIik7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5oY21kX2xvY2ssIGZsYWdzKTsKIAotCWlkeCA9IGdldF9jbWRfaW5kZXgocSwgcS0+d3JpdGVfcHRyLCBjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKTsKKwlpZHggPSBnZXRfY21kX2luZGV4KHEsIHEtPndyaXRlX3B0ciwgY21kLT5mbGFncyAmIENNRF9TSVpFX0hVR0UpOwogCW91dF9jbWQgPSB0eHEtPmNtZFtpZHhdOworCW91dF9tZXRhID0gJnR4cS0+bWV0YVtpZHhdOworCisJbWVtc2V0KG91dF9tZXRhLCAwLCBzaXplb2YoKm91dF9tZXRhKSk7CS8qIHJlLWluaXRpYWxpemUgdG8gTlVMTCAqLworCW91dF9tZXRhLT5mbGFncyA9IGNtZC0+ZmxhZ3M7CisJaWYgKGNtZC0+ZmxhZ3MgJiBDTURfV0FOVF9TS0IpCisJCW91dF9tZXRhLT5zb3VyY2UgPSBjbWQ7CisJaWYgKGNtZC0+ZmxhZ3MgJiBDTURfQVNZTkMpCisJCW91dF9tZXRhLT5jYWxsYmFjayA9IGNtZC0+Y2FsbGJhY2s7CiAKIAlvdXRfY21kLT5oZHIuY21kID0gY21kLT5pZDsKLQltZW1jcHkoJm91dF9jbWQtPm1ldGEsICZjbWQtPm1ldGEsIHNpemVvZihjbWQtPm1ldGEpKTsKIAltZW1jcHkoJm91dF9jbWQtPmNtZC5wYXlsb2FkLCBjbWQtPmRhdGEsIGNtZC0+bGVuKTsKIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBvdXRfY21kIG5vdyBoYXMgYWxsIG9mIHRoZSBpbmNvbWluZyBjbWQKQEAgLTk2Myw5ICs5OTUsOSBAQAogCW91dF9jbWQtPmhkci5mbGFncyA9IDA7CiAJb3V0X2NtZC0+aGRyLnNlcXVlbmNlID0gY3B1X3RvX2xlMTYoUVVFVUVfVE9fU0VRKElXTF9DTURfUVVFVUVfTlVNKSB8CiAJCQlJTkRFWF9UT19TRVEocS0+d3JpdGVfcHRyKSk7Ci0JaWYgKG91dF9jbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKQorCWlmIChjbWQtPmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKIAkJb3V0X2NtZC0+aGRyLnNlcXVlbmNlIHw9IFNFUV9IVUdFX0ZSQU1FOwotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsX2NtZCkgLSBzaXplb2Yoc3RydWN0IGl3bF9jbWRfbWV0YSk7CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCk7CiAJbGVuICs9IChpZHggPT0gVEZEX0NNRF9TTE9UUykgPyAgSVdMX01BWF9TQ0FOX1NJWkUgOiAwOwogCiAKQEAgLTk5Nyw4ICsxMDI5LDggQEAKIAogCXBoeXNfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsICZvdXRfY21kLT5oZHIsCiAJCQkJICAgZml4X3NpemUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0JcGNpX3VubWFwX2FkZHJfc2V0KCZvdXRfY21kLT5tZXRhLCBtYXBwaW5nLCBwaHlzX2FkZHIpOwotCXBjaV91bm1hcF9sZW5fc2V0KCZvdXRfY21kLT5tZXRhLCBsZW4sIGZpeF9zaXplKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQob3V0X21ldGEsIG1hcHBpbmcsIHBoeXNfYWRkcik7CisJcGNpX3VubWFwX2xlbl9zZXQob3V0X21ldGEsIGxlbiwgZml4X3NpemUpOwogCiAJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKIAkJCQkJCSAgIHBoeXNfYWRkciwgZml4X3NpemUsIDEsCkBAIC0xMDY3LDggKzEwOTksOCBAQAogCX0KIAogCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKLQkJcGNpX3VubWFwX2FkZHIoJnR4cS0+Y21kW2NtZF9pZHhdLT5tZXRhLCBtYXBwaW5nKSwKLQkJcGNpX3VubWFwX2xlbigmdHhxLT5jbWRbY21kX2lkeF0tPm1ldGEsIGxlbiksCisJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPm1ldGFbY21kX2lkeF0sIG1hcHBpbmcpLAorCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPm1ldGFbY21kX2lkeF0sIGxlbiksCiAJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAKIAlmb3IgKGlkeCA9IGl3bF9xdWV1ZV9pbmNfd3JhcChpZHgsIHEtPm5fYmQpOyBxLT5yZWFkX3B0ciAhPSBpZHg7CkBAIC0xMDk5LDcgKzExMzEsOCBAQAogCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7CiAJaW50IGNtZF9pbmRleDsKIAlib29sIGh1Z2UgPSAhIShwa3QtPmhkci5zZXF1ZW5jZSAmIFNFUV9IVUdFX0ZSQU1FKTsKLQlzdHJ1Y3QgaXdsX2NtZCAqY21kOworCXN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm1ldGE7CiAKIAkvKiBJZiBhIFR4IGNvbW1hbmQgaXMgYmVpbmcgaGFuZGxlZCBhbmQgaXQgaXNuJ3QgaW4gdGhlIGFjdHVhbAogCSAqIGNvbW1hbmQgcXVldWUgdGhlbiB0aGVyZSBhIGNvbW1hbmQgcm91dGluZyBidWcgaGFzIGJlZW4gaW50cm9kdWNlZApAQCAtMTEwOSwyNCArMTE0MiwyNCBAQAogCQkgIHR4cV9pZCwgc2VxdWVuY2UsCiAJCSAgcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLnJlYWRfcHRyLAogCQkgIHByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0ucS53cml0ZV9wdHIpKSB7Ci0JCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfSU5GTyAsIHJ4YiwgMzIpOworCQlpd2xfcHJpbnRfaGV4X2Vycm9yKHByaXYsIHBrdCwgMzIpOwogCQlyZXR1cm47CiAJfQogCiAJY21kX2luZGV4ID0gZ2V0X2NtZF9pbmRleCgmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5xLCBpbmRleCwgaHVnZSk7CiAJY21kID0gcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXS5jbWRbY21kX2luZGV4XTsKKwltZXRhID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0ubWV0YVtjbWRfaW5kZXhdOwogCiAJLyogSW5wdXQgZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSB3aGVuIGNvbW1hbmRzIGFyZSBhZGRlZCB0byBxdWV1ZS4gKi8KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCWNtZC0+bWV0YS5zb3VyY2UtPnUuc2tiID0gcnhiLT5za2I7CisJaWYgKG1ldGEtPmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7CisJCW1ldGEtPnNvdXJjZS0+cmVwbHlfc2tiID0gcnhiLT5za2I7CiAJCXJ4Yi0+c2tiID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNtZC0+bWV0YS51LmNhbGxiYWNrICYmCi0JCSAgICFjbWQtPm1ldGEudS5jYWxsYmFjayhwcml2LCBjbWQsIHJ4Yi0+c2tiKSkKLQkJcnhiLT5za2IgPSBOVUxMOworCX0gZWxzZSBpZiAobWV0YS0+Y2FsbGJhY2spCisJCW1ldGEtPmNhbGxiYWNrKHByaXYsIGNtZCwgcnhiLT5za2IpOwogCiAJaXdsX2hjbWRfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4LCBjbWRfaW5kZXgpOwogCi0JaWYgKCEoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKSkgeworCWlmICghKG1ldGEtPmZsYWdzICYgQ01EX0FTWU5DKSkgewogCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCX0KQEAgLTExODksNiArMTIyMiw3IEBACiAJdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKIAkqc3NuID0gU0VRX1RPX1NOKHRpZF9kYXRhLT5zZXFfbnVtYmVyKTsKIAl0aWRfZGF0YS0+YWdnLnR4cV9pZCA9IHR4cV9pZDsKKwlwcml2LT50eHFbdHhxX2lkXS5zd3FfaWQgPSBpd2xfdmlydHVhbF9hZ2dfcXVldWVfbnVtKHR4X2ZpZm8sIHR4cV9pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hZ2dfZW5hYmxlKHByaXYsIHR4cV9pZCwgdHhfZmlmbywKQEAgLTEyMjEsNiArMTI1NSw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICh1bmxpa2VseSh0aWQgPj0gTUFYX1RJRF9DT1VOVCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKGxpa2VseSh0aWQgPCBBUlJBWV9TSVpFKGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm8pKSkKIAkJdHhfZmlmb19pZCA9IGRlZmF1bHRfdGlkX3RvX3R4X2ZpZm9bdGlkXTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCA1MjM4NDMzLi4yMjM4YzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAogIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsMzk0NV9tb2RfcGFyYW1zID0gewotCS5udW1fb2ZfcXVldWVzID0gSVdMMzlfTUFYX05VTV9RVUVVRVMsCisJLm51bV9vZl9xdWV1ZXMgPSBJV0wzOV9OVU1fUVVFVUVTLCAvKiBOb3QgdXNlZCAqLwogCS5zd19jcnlwdG8gPSAxLAogCS5yZXN0YXJ0X2Z3ID0gMSwKIAkvKiB0aGUgcmVzdCBhcmUgMCBieSBkZWZhdWx0ICovCkBAIC0zNjEsNzkgKzM2MSw5IEBACiAJCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIH0KIAotI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTEwMjQKLSNkZWZpbmUgSU5URUxfQ09OTl9MSVNURU5fSU5URVJWQUwJY3B1X3RvX2xlMTYoMHhBKQotCi1zdGF0aWMgX19sZTE2IGl3bDM5NDVfYWRqdXN0X2JlYWNvbl9pbnRlcnZhbCh1MTYgYmVhY29uX3ZhbCkKLXsKLQl1MTYgbmV3X3ZhbCA9IDA7Ci0JdTE2IGJlYWNvbl9mYWN0b3IgPSAwOwotCi0JYmVhY29uX2ZhY3RvciA9Ci0JICAgIChiZWFjb25fdmFsICsgTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTCkKLQkJLyBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMOwotCW5ld192YWwgPSBiZWFjb25fdmFsIC8gYmVhY29uX2ZhY3RvcjsKLQotCXJldHVybiBjcHVfdG9fbGUxNihuZXdfdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCi17Ci0JdTY0IGludGVydmFsX3RtX3VuaXQ7Ci0JdTY0IHRzZiwgcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gTlVMTDsKLQl1MTYgYmVhY29uX2ludCA9IDA7Ci0KLQljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wID0gY3B1X3RvX2xlNjQocHJpdi0+dGltZXN0YW1wKTsKLQlwcml2LT5yeG9uX3RpbWluZy5saXN0ZW5faW50ZXJ2YWwgPSBJTlRFTF9DT05OX0xJU1RFTl9JTlRFUlZBTDsKLQotCXRzZiA9IHByaXYtPnRpbWVzdGFtcDsKLQotCWJlYWNvbl9pbnQgPSBwcml2LT5iZWFjb25faW50OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJaWYgKGJlYWNvbl9pbnQgPT0gMCkgewotCQkJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0gY3B1X3RvX2xlMTYoMTAwKTsKLQkJCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9IGNwdV90b19sZTMyKDEwMjQwMCk7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwgPQotCQkJCWNwdV90b19sZTE2KGJlYWNvbl9pbnQpOwotCQkJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0KLQkJCSAgICBpd2wzOTQ1X2FkanVzdF9iZWFjb25faW50ZXJ2YWwoCi0JCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSk7Ci0JCX0KLQotCQlwcml2LT5yeG9uX3RpbWluZy5hdGltX3dpbmRvdyA9IDA7Ci0JfSBlbHNlIHsKLQkJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsID0KLQkJCWl3bDM5NDVfYWRqdXN0X2JlYWNvbl9pbnRlcnZhbCgKLQkJCQlwcml2LT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOwotCQkvKiBUT0RPOiB3ZSBuZWVkIHRvIGdldCBhdGltX3dpbmRvdyBmcm9tIHVwcGVyIHN0YWNrCi0JCSAqIGZvciBub3cgd2Ugc2V0IHRvIDAgKi8KLQkJcHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cgPSAwOwotCX0KLQotCWludGVydmFsX3RtX3VuaXQgPQotCQkobGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSAqIDEwMjQpOwotCXJlc3VsdCA9IGRvX2Rpdih0c2YsIGludGVydmFsX3RtX3VuaXQpOwotCXByaXYtPnJ4b25fdGltaW5nLmJlYWNvbl9pbml0X3ZhbCA9Ci0JICAgIGNwdV90b19sZTMyKCh1MzIpICgodTY0KSBpbnRlcnZhbF90bV91bml0IC0gcmVzdWx0KSk7Ci0KLQlJV0xfREVCVUdfQVNTT0MocHJpdiwKLQkJImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKLQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSwKLQkJbGUzMl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsKSwKLQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKLQkJCQkgICAgICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAorCQkJCSAgICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kLAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2JfZnJhZywKIAkJCQkgICAgICBpbnQgc3RhX2lkKQogewpAQCAtNDczLDcgKzQwMyw3IEBACiAgKiBoYW5kbGUgYnVpbGQgUkVQTFlfVFggY29tbWFuZCBub3RpZmljYXRpb24uCiAgKi8KIHN0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgIHN0cnVjdCBpd2xfY21kICpjbWQsCisJCQkJICBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHU4IHN0ZF9pZCkKIHsKQEAgLTU0Niw3ICs0NzYsOCBAQAogCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHg7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gTlVMTDsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gTlVMTDsKLQlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZCA9IE5VTEw7CisJc3RydWN0IGl3bF9kZXZpY2VfY21kICpvdXRfY21kOworCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCWRtYV9hZGRyX3QgdHhjbWRfcGh5czsKIAlpbnQgdHhxX2lkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CkBAIC01ODcsOSArNTE4LDkgQEAKIAkJSVdMX0RFQlVHX1RYKHByaXYsICJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOwogI2VuZGlmCiAKLQkvKiBkcm9wIGFsbCBkYXRhIGZyYW1lIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLworCS8qIGRyb3AgYWxsIG5vbi1pbmplY3RlZCBkYXRhIGZyYW1lIGlmIHdlIGFyZSBub3QgYXNzb2NpYXRlZCAqLwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgJiYKLQkgICAgKCFpd2xfaXNfbW9uaXRvcl9tb2RlKHByaXYpKSAmJiAvKiBwYWNrZXQgaW5qZWN0aW9uICovCisJICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSAmJgogCSAgICAoIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpIHx8CiAJICAgICAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYgIXByaXYtPmFzc29jX2lkKSkpIHsKIAkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gIWl3bF9pc19hc3NvY2lhdGVkXG4iKTsKQEAgLTYwMSw3ICs1MzIsMTAgQEAKIAloZHJfbGVuID0gaWVlZTgwMjExX2hkcmxlbihmYyk7CiAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwotCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkKKwkJc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKKwllbHNlCisJCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CiAJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAogCQkJICAgICAgIGhkci0+YWRkcjEpOwpAQCAtNjEzLDYgKzU0Nyw4IEBACiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKKwkJaWYgKHVubGlrZWx5KHRpZCA+PSBNQVhfVElEX0NPVU5UKSkKKwkJCWdvdG8gZHJvcDsKIAkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCiAJCQkJSUVFRTgwMjExX1NDVExfU0VROwogCQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoc2VxX251bWJlcikgfApAQCAtNjM1LDYgKzU3MSw3IEBACiAKIAkvKiBJbml0IGZpcnN0IGVtcHR5IGVudHJ5IGluIHF1ZXVlJ3MgYXJyYXkgb2YgVHgvY21kIGJ1ZmZlcnMgKi8KIAlvdXRfY21kID0gdHhxLT5jbWRbaWR4XTsKKwlvdXRfbWV0YSA9ICZ0eHEtPm1ldGFbaWR4XTsKIAl0eCA9IChzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKilvdXRfY21kLT5jbWQucGF5bG9hZDsKIAltZW1zZXQoJm91dF9jbWQtPmhkciwgMCwgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwogCW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwpAQCAtNjY2LDcgKzYwMyw4IEBACiAJbGVuID0gKHUxNilza2ItPmxlbjsKIAl0eC0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKIAotCisJaXdsX2RiZ19sb2dfdHhfZGF0YV9mcmFtZShwcml2LCBsZW4sIGhkcik7CisJaXdsX3VwZGF0ZV9zdGF0cyhwcml2LCB0cnVlLCBmYywgbGVuKTsKIAl0eC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0FfTVNLOwogCXR4LT50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQl9NU0s7CiAKQEAgLTcxMiw4ICs2NTAsOCBAQAogCQkJCSAgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCS8qIHdlIGRvIG5vdCBtYXAgbWV0YSBkYXRhIC4uLiBzbyB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBhZGRyZXNzIHRvCiAJICogcHJvdmlkZSB0byB1bm1hcCBjb21tYW5kKi8KLQlwY2lfdW5tYXBfYWRkcl9zZXQoJm91dF9jbWQtPm1ldGEsIG1hcHBpbmcsIHR4Y21kX3BoeXMpOwotCXBjaV91bm1hcF9sZW5fc2V0KCZvdXRfY21kLT5tZXRhLCBsZW4sIGxlbik7CisJcGNpX3VubWFwX2FkZHJfc2V0KG91dF9tZXRhLCBtYXBwaW5nLCB0eGNtZF9waHlzKTsKKwlwY2lfdW5tYXBfbGVuX3NldChvdXRfbWV0YSwgbGVuLCBsZW4pOwogCiAJLyogQWRkIGJ1ZmZlciBjb250YWluaW5nIFR4IGNvbW1hbmQgYW5kIE1BQyghKSBoZWFkZXIgdG8gVEZEJ3MKIAkgKiBmaXJzdCBlbnRyeSAqLwpAQCAtODIzLDcgKzc2MSw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCwKIAkJLmRhdGEgPSAodm9pZCAqKSZzcGVjdHJ1bSwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfV0FOVF9TS0IsCisJCS5mbGFncyA9IENNRF9XQU5UX1NLQiwKIAl9OwogCXUzMiBhZGRfdGltZSA9IGxlNjRfdG9fY3B1KHBhcmFtcy0+c3RhcnRfdGltZSk7CiAJaW50IHJjOwpAQCAtODY0LDcgKzgwMiw3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKKwlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQucmVwbHlfc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewogCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CiAJCXJjID0gLUVJTzsKQEAgLTg4Nyw3ICs4MjUsNyBAQAogCQlicmVhazsKIAl9CiAKLQlkZXZfa2ZyZWVfc2tiX2FueShjbWQubWV0YS51LnNrYik7CisJZGV2X2tmcmVlX3NrYl9hbnkoY21kLnJlcGx5X3NrYik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC05OTYsNyArOTM0LDcgQEAKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCisJSVdMX1dBUk4ocHJpdiwgIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAogCQkJICAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIsCiAJCQkgIChmbGFncyAmIFNXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIik7CiAKQEAgLTE0MzUsNyArMTM3Myw3IEBACiAJCWZpbGxfcnggPSAxOwogCS8qIFJ4IGludGVycnVwdCwgYnV0IG5vdGhpbmcgc2VudCBmcm9tIHVDb2RlICovCiAJaWYgKGkgPT0gcikKLQkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9SWCB8IElXTF9ETF9JU1IsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CisJCUlXTF9ERUJVR19SWChwcml2LCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOwogCiAJd2hpbGUgKGkgIT0gcikgewogCQlyeGIgPSByeHEtPnF1ZXVlW2ldOwpAQCAtMTQ2NiwxNSArMTQwNCwxMyBAQAogCQkgKiAgIGhhbmRsZSB0aG9zZSB0aGF0IG5lZWQgaGFuZGxpbmcgdmlhIGZ1bmN0aW9uIGluCiAJCSAqICAgcnhfaGFuZGxlcnMgdGFibGUuICBTZWUgaXdsMzk0NV9zZXR1cF9yeF9oYW5kbGVycygpICovCiAJCWlmIChwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdKSB7Ci0JCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0hDTUQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAotCQkJCSJyID0gJWQsIGkgPSAlZCwgJXMsIDB4JTAyeFxuIiwgciwgaSwKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsIGksCiAJCQkJZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCQlwcml2LT5pc3Jfc3RhdHMucnhfaGFuZGxlcnNbcGt0LT5oZHIuY21kXSsrOwogCQl9IGVsc2UgewogCQkJLyogTm8gaGFuZGxpbmcgbmVlZGVkICovCi0JCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0hDTUQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAotCQkJCSJyICVkIGkgJWQgTm8gaGFuZGxlciBuZWVkZWQgZm9yICVzLCAweCUwMnhcbiIsCisJCQlJV0xfREVCVUdfUlgocHJpdiwgInIgJWQgaSAlZCBObyBoYW5kbGVyIG5lZWRlZCBmb3IgJXMsIDB4JTAyeFxuIiwKIAkJCQlyLCBpLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpLAogCQkJCXBrdC0+aGRyLmNtZCk7CiAJCX0KQEAgLTE3MTQsNyArMTY1MCw3IEBACiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfSVNSKSB7CisJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfSVNSKSB7CiAJCS8qIGp1c3QgZm9yIGRlYnVnICovCiAJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKIAkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCkBAIC0xNzMzLDcgKzE2NjksNyBAQAogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUihwcml2LCAiTWljcm9jb2RlIEhXIGVycm9yIGRldGVjdGVkLiAgUmVzdGFydGluZy5cbiIpOworCQlJV0xfRVJSKHByaXYsICJIYXJkd2FyZSBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKQEAgLTE3NDksNyArMTY4NSw3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIChJV0xfRExfSVNSKSkgewogCQkvKiBOSUMgZmlyZXMgdGhpcywgYnV0IHdlIGRvbid0IHVzZSBpdCwgcmVkdW5kYW50IHdpdGggV0FLRVVQICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfU0NEKSB7CiAJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgpAQCAtMTgyOCw3ICsxNzY0LDcgQEAKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKKwlpZiAoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIChJV0xfRExfSVNSKSkgewogCQlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CkBAIC0xODQ0LDcgKzE3ODAsNyBAQAogCQkJCSAgICAgdTggaXNfYWN0aXZlLCB1OCBuX3Byb2JlcywKIAkJCQkgICAgIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCAqc2Nhbl9jaCkKIHsKLQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwpAQCAtMTg1NSwxOSArMTc5MSwxOSBAQAogCWlmICghc2JhbmQpCiAJCXJldHVybiAwOwogCi0JY2hhbm5lbHMgPSBzYmFuZC0+Y2hhbm5lbHM7Ci0KIAlhY3RpdmVfZHdlbGwgPSBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQsIG5fcHJvYmVzKTsKIAlwYXNzaXZlX2R3ZWxsID0gaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CiAKIAlpZiAocGFzc2l2ZV9kd2VsbCA8PSBhY3RpdmVfZHdlbGwpCiAJCXBhc3NpdmVfZHdlbGwgPSBhY3RpdmVfZHdlbGwgKyAxOwogCi0JZm9yIChpID0gMCwgYWRkZWQgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewotCQlpZiAoY2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwlmb3IgKGkgPSAwLCBhZGRlZCA9IDA7IGkgPCBwcml2LT5zY2FuX3JlcXVlc3QtPm5fY2hhbm5lbHM7IGkrKykgeworCQljaGFuID0gcHJpdi0+c2Nhbl9yZXF1ZXN0LT5jaGFubmVsc1tpXTsKKworCQlpZiAoY2hhbi0+YmFuZCAhPSBiYW5kKQogCQkJY29udGludWU7CiAKLQkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNoYW5uZWxzW2ldLmh3X3ZhbHVlOworCQlzY2FuX2NoLT5jaGFubmVsID0gY2hhbi0+aHdfdmFsdWU7CiAKIAkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIHNjYW5fY2gtPmNoYW5uZWwpOwogCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKQEAgLTE4ODIsNyArMTgxOCw3IEBACiAJCSAqICBhbmQgdXNlIGxvbmcgYWN0aXZlX2R3ZWxsIHRpbWUuCiAJCSAqLwogCQlpZiAoIWlzX2FjdGl2ZSB8fCBpc19jaGFubmVsX3Bhc3NpdmUoY2hfaW5mbykgfHwKLQkJICAgIChjaGFubmVsc1tpXS5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpIHsKKwkJICAgIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikpIHsKIAkJCXNjYW5fY2gtPnR5cGUgPSAwOwkvKiBwYXNzaXZlICovCiAJCQlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID09IDEpCiAJCQkJc2Nhbl9jaC0+YWN0aXZlX2R3ZWxsID0gY3B1X3RvX2xlMTYocGFzc2l2ZV9kd2VsbCAtIDEpOwpAQCAtMjExMSw3ICsyMDQ3LDcgQEAKICAqLwogc3RhdGljIGludCBpd2wzOTQ1X3JlYWRfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2xfdWNvZGUgKnVjb2RlOworCWNvbnN0IHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICp1Y29kZTsKIAlpbnQgcmV0ID0gLUVJTlZBTCwgaW5kZXg7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXc7CiAJLyogZmlybXdhcmUgZmlsZSBuYW1lIGNvbnRhaW5zIHVDb2RlL2RyaXZlciBjb21wYXRpYmlsaXR5IHZlcnNpb24gKi8KQEAgLTIxNTIsMjIgKzIwODgsMjQgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGdvdCBhdCBsZWFzdCBvdXIgaGVhZGVyISAqLwotCWlmICh1Y29kZV9yYXctPnNpemUgPCBzaXplb2YoKnVjb2RlKSkgeworCWlmICh1Y29kZV9yYXctPnNpemUgPCAgcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaGVhZGVyX3NpemUoMSkpIHsKIAkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKIAkvKiBEYXRhIGZyb20gdWNvZGUgZmlsZTogIGhlYWRlciBmb2xsb3dlZCBieSB1Q29kZSBpbWFnZXMgKi8KLQl1Y29kZSA9ICh2b2lkICopdWNvZGVfcmF3LT5kYXRhOworCXVjb2RlID0gKHN0cnVjdCBpd2xfdWNvZGVfaGVhZGVyICopdWNvZGVfcmF3LT5kYXRhOwogCiAJcHJpdi0+dWNvZGVfdmVyID0gbGUzMl90b19jcHUodWNvZGUtPnZlcik7CiAJYXBpX3ZlciA9IElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKTsKLQlpbnN0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5zdF9zaXplKTsKLQlkYXRhX3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+ZGF0YV9zaXplKTsKLQlpbml0X3NpemUgPSBsZTMyX3RvX2NwdSh1Y29kZS0+aW5pdF9zaXplKTsKLQlpbml0X2RhdGFfc2l6ZSA9IGxlMzJfdG9fY3B1KHVjb2RlLT5pbml0X2RhdGFfc2l6ZSk7Ci0JYm9vdF9zaXplID0gbGUzMl90b19jcHUodWNvZGUtPmJvb3Rfc2l6ZSk7CisJaW5zdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfaW5zdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlkYXRhX3NpemUgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhX3NpemUodWNvZGUsIGFwaV92ZXIpOworCWluaXRfc2l6ZSA9IHByaXYtPmNmZy0+b3BzLT51Y29kZS0+Z2V0X2luaXRfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJaW5pdF9kYXRhX3NpemUgPQorCQlwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9pbml0X2RhdGFfc2l6ZSh1Y29kZSwgYXBpX3Zlcik7CisJYm9vdF9zaXplID0gcHJpdi0+Y2ZnLT5vcHMtPnVjb2RlLT5nZXRfYm9vdF9zaXplKHVjb2RlLCBhcGlfdmVyKTsKKwlzcmMgPSBwcml2LT5jZmctPm9wcy0+dWNvZGUtPmdldF9kYXRhKHVjb2RlLCBhcGlfdmVyKTsKIAogCS8qIGFwaV92ZXIgc2hvdWxkIG1hdGNoIHRoZSBhcGkgdmVyc2lvbiBmb3JtaW5nIHBhcnQgb2YgdGhlCiAJICogZmlybXdhcmUgZmlsZW5hbWUgLi4uIGJ1dCB3ZSBkb24ndCBjaGVjayBmb3IgdGhhdCBhbmQgb25seSByZWx5CkBAIC0yMjA4LDEyICsyMTQ2LDEzIEBACiAKIAogCS8qIFZlcmlmeSBzaXplIG9mIGZpbGUgdnMuIGltYWdlIHNpemUgaW5mbyBpbiBmaWxlJ3MgaGVhZGVyICovCi0JaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IHNpemVvZigqdWNvZGUpICsKKwlpZiAodWNvZGVfcmF3LT5zaXplICE9IHByaXYtPmNmZy0+b3BzLT51Y29kZS0+Z2V0X2hlYWRlcl9zaXplKGFwaV92ZXIpICsKIAkJaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsKIAkJaW5pdF9kYXRhX3NpemUgKyBib290X3NpemUpIHsKIAotCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgZmlsZSBzaXplICV6ZCB0b28gc21hbGxcbiIsCi0JCQkgICAgICAgdWNvZGVfcmF3LT5zaXplKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJ1Q29kZSBmaWxlIHNpemUgJXpkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHNpemVcbiIsCisJCQl1Y29kZV9yYXctPnNpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTIyOTYsNDQgKzIyMzUsNDQgQEAKIAkvKiBDb3B5IGltYWdlcyBpbnRvIGJ1ZmZlcnMgZm9yIGNhcmQncyBidXMtbWFzdGVyIHJlYWRzIC4uLiAqLwogCiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KLQlzcmMgPSAmdWNvZGUtPmRhdGFbMF07Ci0JbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47CisJbGVuID0gaW5zdF9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCBzcmMsIGxlbik7CisJc3JjICs9IGxlbjsKKwogCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKIAkJcHJpdi0+dWNvZGVfY29kZS52X2FkZHIsICh1MzIpcHJpdi0+dWNvZGVfY29kZS5wX2FkZHIpOwogCiAJLyogUnVudGltZSBkYXRhICgybmQgYmxvY2spCiAJICogTk9URTogIENvcHkgaW50byBiYWNrdXAgYnVmZmVyIHdpbGwgYmUgZG9uZSBpbiBpd2wzOTQ1X3VwKCkgICovCi0Jc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZV07Ci0JbGVuID0gcHJpdi0+dWNvZGVfZGF0YS5sZW47CisJbGVuID0gZGF0YV9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyLCBzcmMsIGxlbik7CisJc3JjICs9IGxlbjsKIAogCS8qIEluaXRpYWxpemF0aW9uIGluc3RydWN0aW9ucyAoM3JkIGJsb2NrKSAqLwogCWlmIChpbml0X3NpemUpIHsKLQkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZV07Ci0JCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOworCQlsZW4gPSBpbml0X3NpemU7CiAJCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOworCQlzcmMgKz0gbGVuOwogCX0KIAogCS8qIEluaXRpYWxpemF0aW9uIGRhdGEgKDR0aCBibG9jaykgKi8KIAlpZiAoaW5pdF9kYXRhX3NpemUpIHsKLQkJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZV07Ci0JCWxlbiA9IHByaXYtPnVjb2RlX2luaXRfZGF0YS5sZW47CisJCWxlbiA9IGluaXRfZGF0YV9zaXplOwogCQlJV0xfREVCVUdfSU5GTyhwcml2LAogCQkJIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlemRcbiIsIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0X2RhdGEudl9hZGRyLCBzcmMsIGxlbik7CisJCXNyYyArPSBsZW47CiAJfQogCiAJLyogQm9vdHN0cmFwIGluc3RydWN0aW9ucyAoNXRoIGJsb2NrKSAqLwotCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemUgKyBpbml0X2RhdGFfc2l6ZV07Ci0JbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47CisJbGVuID0gYm9vdF9zaXplOwogCUlXTF9ERUJVR19JTkZPKHByaXYsCiAJCSJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfYm9vdC52X2FkZHIsIHNyYywgbGVuKTsKQEAgLTI3ODQsNyArMjcyMyw3IEBACiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NDQU5fQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NjYW5fY21kKSwKLQkJLm1ldGEuZmxhZ3MgPSBDTURfU0laRV9IVUdFLAorCQkuZmxhZ3MgPSBDTURfU0laRV9IVUdFLAogCX07CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCAqc2NhbjsKQEAgLTMwNjYsNyArMzAwNSw3IEBACiAJaXdsY29yZV9jb21taXRfcnhvbihwcml2KTsKIAogCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fdGltZV9jbWQpKTsKLQlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOworCWl3bF9zZXR1cF9yeG9uX3RpbWluZyhwcml2KTsKIAlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCiAJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCWlmIChyYykKQEAgLTMyNjEsNyArMzIwMCw3IEBACiAKIAkJLyogUlhPTiBUaW1pbmcgKi8KIAkJbWVtc2V0KCZwcml2LT5yeG9uX3RpbWluZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl90aW1lX2NtZCkpOwotCQlpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHByaXYpOworCQlpd2xfc2V0dXBfcnhvbl90aW1pbmcocHJpdik7CiAJCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLAogCQkJCSAgICAgICZwcml2LT5yeG9uX3RpbWluZyk7CkBAIC0zMzc1LDEzICszMzE0LDE2IEBACiAgKiB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZGVidWcgbGV2ZWwuCiAgKgogICogU2VlIHRoZSBsZXZlbCBkZWZpbml0aW9ucyBpbiBpd2wgZm9yIGRldGFpbHMuCisgKgorICogVGhlIGRlYnVnX2xldmVsIGJlaW5nIG1hbmFnZWQgdXNpbmcgc3lzZnMgYmVsb3cgaXMgYSBwZXIgZGV2aWNlIGRlYnVnCisgKiBsZXZlbCB0aGF0IGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIGRlYnVnIGxldmVsIGlmIGl0ICh0aGUgcGVyCisgKiBkZXZpY2UgZGVidWcgbGV2ZWwpIGlzIHNldC4KICAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBwcml2LT5kZWJ1Z19sZXZlbCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDhYXG4iLCBpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0zMzk0LDkgKzMzMzYsMTIgQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOwogCWlmIChyZXQpCiAJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7Ci0JZWxzZQorCWVsc2UgewogCQlwcml2LT5kZWJ1Z19sZXZlbCA9IHZhbDsKLQorCQlpZiAoaXdsX2FsbG9jX3RyYWZmaWNfbWVtKHByaXYpKQorCQkJSVdMX0VSUihwcml2LAorCQkJCSJOb3QgZW5vdWdoIG1lbW9yeSB0byBnZW5lcmF0ZSB0cmFmZmljIGxvZ1xuIik7CisJfQogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCkBAIC0zNjEyLDY1ICszNTU3LDYgQEAKIAkJICAgc3RvcmVfcmV0cnlfcmF0ZSk7CiAKIAotc3RhdGljIHNzaXplX3Qgc3RvcmVfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgbW9kZTsKLQotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJm1vZGUpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgbW9kZSk7Ci0JaWYgKHJldCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImZhaWxlZCBzZXR0aW5nIHBvd2VyIG1vZGUuXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IGNvdW50OwotCi0gb3V0OgotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcG93ZXJfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKLQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgbGV2ZWwgPSBwcml2LT5wb3dlcl9kYXRhLnBvd2VyX21vZGU7Ci0JY2hhciAqcCA9IGJ1ZjsKLQotCXAgKz0gc3ByaW50ZihwLCAiJWRcbiIsIGxldmVsKTsKLQlyZXR1cm4gcCAtIGJ1ZiArIDE7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihwb3dlcl9sZXZlbCwgU19JV1VTUiB8IFNfSVJVU1IsCi0JCSAgIHNob3dfcG93ZXJfbGV2ZWwsIHN0b3JlX3Bvd2VyX2xldmVsKTsKLQotI2RlZmluZSBNQVhfV1hfU1RSSU5HIDgwCi0KLS8qIFZhbHVlcyBhcmUgaW4gbWljcm9zZWNvbmQgKi8KLXN0YXRpYyBjb25zdCBzMzIgdGltZW91dF9kdXJhdGlvbltdID0gewotCTM1MDAwMCwKLQkyNTAwMDAsCi0JNzUwMDAsCi0JMzcwMDAsCi0JMjUwMDAsCi19Owotc3RhdGljIGNvbnN0IHMzMiBwZXJpb2RfZHVyYXRpb25bXSA9IHsKLQk0MDAwMDAsCi0JNzAwMDAwLAotCTEwMDAwMDAsCi0JMTAwMDAwMCwKLQkxMDAwMDAwCi19OwotCiBzdGF0aWMgc3NpemVfdCBzaG93X2NoYW5uZWxzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zODQ3LDcgKzM3MzMsNiBAQAogI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCiAJJmRldl9hdHRyX21lYXN1cmVtZW50LmF0dHIsCiAjZW5kaWYKLQkmZGV2X2F0dHJfcG93ZXJfbGV2ZWwuYXR0ciwKIAkmZGV2X2F0dHJfcmV0cnlfcmF0ZS5hdHRyLAogCSZkZXZfYXR0cl9zdGF0aXN0aWNzLmF0dHIsCiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLApAQCAtMzkxMiw4ICszNzk3LDYgQEAKIAlwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnZhbCA9IDA7CiAKIAlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7Ci0JLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQ0FNIG1vZGUgKi8KLQlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOwogCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CiAKIAlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKQEAgLTM5NjAsNyArMzg0Myw5IEBACiAJLyogVGVsbCBtYWM4MDIxMSBvdXIgY2hhcmFjdGVyaXN0aWNzICovCiAJaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgSUVFRTgwMjExX0hXX05PSVNFX0RCTSB8Ci0JCSAgICBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVDsKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJCSAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKIAogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KIAkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKQEAgLTQwMjAsMTUgKzM5MDUsNiBAQAogCXByaXYgPSBody0+cHJpdjsKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CiAKLQlpZiAoKGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzID4gSVdMMzlfTUFYX05VTV9RVUVVRVMpIHx8Ci0JICAgICAoaXdsMzk0NV9tb2RfcGFyYW1zLm51bV9vZl9xdWV1ZXMgPCBJV0wzOV9NSU5fTlVNX1FVRVVFUykpIHsKLQkJSVdMX0VSUihwcml2LAotCQkJImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJSVdMMzlfTUlOX05VTV9RVUVVRVMsIElXTDM5X01BWF9OVU1fUVVFVUVTKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXRfaWVlZTgwMjExX2ZyZWVfaHc7Ci0JfQotCiAJLyoKIAkgKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucwogCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLgpAQCAtNDA0NSw5ICszOTIxLDEwIEBACiAJcHJpdi0+aW50YV9tYXNrID0gQ1NSX0lOSV9TRVRfTUFTSzsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0JcHJpdi0+ZGVidWdfbGV2ZWwgPSBpd2wzOTQ1X21vZF9wYXJhbXMuZGVidWc7CiAJYXRvbWljX3NldCgmcHJpdi0+cmVzdHJpY3RfcmVmY250LCAwKTsKICNlbmRpZgorCWlmIChpd2xfYWxsb2NfdHJhZmZpY19tZW0ocHJpdikpCisJCUlXTF9FUlIocHJpdiwgIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGdlbmVyYXRlIHRyYWZmaWMgbG9nXG4iKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiAyLiBJbml0aWFsaXppbmcgUENJIGJ1cwpAQCAtNDIxMCw2ICs0MDg3LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAgb3V0X2llZWU4MDIxMV9mcmVlX2h3OgogCWllZWU4MDIxMV9mcmVlX2h3KHByaXYtPmh3KTsKKwlpd2xfZnJlZV90cmFmZmljX21lbShwcml2KTsKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQyNjUsNiArNDE0Myw3IEBACiAJICogdW50aWwgbm93Li4uICovCiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOworCWl3bF9mcmVlX3RyYWZmaWNfbWVtKHByaXYpOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlwY2lfZGlzYWJsZV9tc2kocGRldik7CkBAIC00MzQxLDE0ICs0MjIwLDEyIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoc3djcnlwdG8sIGl3bDM5NDVfbW9kX3BhcmFtcy5zd19jcnlwdG8sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHN3Y3J5cHRvLAogCQkgInVzaW5nIHNvZnR3YXJlIGNyeXB0byAoZGVmYXVsdCAxIFtzb2Z0d2FyZV0pXG4iKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgaXdsMzk0NV9tb2RfcGFyYW1zLmRlYnVnLCB1aW50LCAwNDQ0KTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBpd2xfZGVidWdfbGV2ZWwsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIG91dHB1dCBtYXNrIik7CisjZW5kaWYKIG1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX2h3X3NjYW4sIGl3bDM5NDVfbW9kX3BhcmFtcy5kaXNhYmxlX2h3X3NjYW4sIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfaHdfc2NhbiwgImRpc2FibGUgaGFyZHdhcmUgc2Nhbm5pbmcgKGRlZmF1bHQgMCkiKTsKLQotbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlc19udW0sIGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhxdWV1ZXNfbnVtLCAibnVtYmVyIG9mIGh3IHF1ZXVlcy4iKTsKLQogbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQzOTQ1LCBpd2wzOTQ1X21vZF9wYXJhbXMucmVzdGFydF9mdywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZndfcmVzdGFydDM5NDUsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvS2NvbmZpZwppbmRleCAwMzA0MDFkLi5jNjJkYTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvS2NvbmZpZwpAQCAtMiw3ICsyLDYgQEAKIAl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgTXVsdGljb21tIDMyMDAgV2lGaSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBNTUMgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKIAlkZXBlbmRzIG9uIENGRzgwMjExCi0Jc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBUaGUgSW50ZWwgV2lyZWxlc3MgTXVsdGljb21tIDMyMDAgaGFyZHdhcmUgaXMgYSBjb21ibwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL01ha2VmaWxlCmluZGV4IDkyN2YwMjIuLmQzNDI5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBvYmotJChDT05GSUdfSVdNKSA6PSBpd21jMzIwMHdpZmkubwogaXdtYzMyMDB3aWZpLW9ianMgKz0gbWFpbi5vIG5ldGRldi5vIHJ4Lm8gdHgubyBzZGlvLm8gaGFsLm8gZncubwotaXdtYzMyMDB3aWZpLW9ianMgKz0gY29tbWFuZHMubyB3ZXh0Lm8gY2ZnODAyMTEubyBlZXByb20ubworaXdtYzMyMDB3aWZpLW9ianMgKz0gY29tbWFuZHMubyBjZmc4MDIxMS5vIGVlcHJvbS5vCiAKIGl3bWMzMjAwd2lmaS0kKENPTkZJR19JV01fREVCVUcpICs9IGRlYnVnZnMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwppbmRleCA5NmY3MTRlLi5hNTZhMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYwpAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgpAQCAtMTMwLDYgKzEzMSwxMzQgQEAKIAkubl9iaXRyYXRlcyA9IGl3bV9hX3JhdGVzX3NpemUsCiB9OwogCitzdGF0aWMgaW50IGl3bV9rZXlfaW5pdChzdHJ1Y3QgaXdtX2tleSAqa2V5LCB1OCBrZXlfaW5kZXgsCisJCQljb25zdCB1OCAqbWFjX2FkZHIsIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCit7CisJa2V5LT5oZHIua2V5X2lkeCA9IGtleV9pbmRleDsKKwlpZiAoIW1hY19hZGRyIHx8IGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKG1hY19hZGRyKSkgeworCQlrZXktPmhkci5tdWx0aWNhc3QgPSAxOworCQltZW1zZXQoa2V5LT5oZHIubWFjLCAweGZmLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJa2V5LT5oZHIubXVsdGljYXN0ID0gMDsKKwkJbWVtY3B5KGtleS0+aGRyLm1hYywgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKwl9CisKKwlpZiAocGFyYW1zKSB7CisJCWlmIChwYXJhbXMtPmtleV9sZW4gPiBXTEFOX01BWF9LRVlfTEVOIHx8CisJCSAgICBwYXJhbXMtPnNlcV9sZW4gPiBJV19FTkNPREVfU0VRX01BWF9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJa2V5LT5jaXBoZXIgPSBwYXJhbXMtPmNpcGhlcjsKKwkJa2V5LT5rZXlfbGVuID0gcGFyYW1zLT5rZXlfbGVuOworCQlrZXktPnNlcV9sZW4gPSBwYXJhbXMtPnNlcV9sZW47CisJCW1lbWNweShrZXktPmtleSwgcGFyYW1zLT5rZXksIGtleS0+a2V5X2xlbik7CisJCW1lbWNweShrZXktPnNlcSwgcGFyYW1zLT5zZXEsIGtleS0+c2VxX2xlbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkJc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKG5kZXYpOworCXN0cnVjdCBpd21fa2V5ICprZXkgPSAmaXdtLT5rZXlzW2tleV9pbmRleF07CisJaW50IHJldDsKKworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIkFkZGluZyBrZXkgZm9yICVwTVxuIiwgbWFjX2FkZHIpOworCisJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpd21fa2V5KSk7CisJcmV0ID0gaXdtX2tleV9pbml0KGtleSwga2V5X2luZGV4LCBtYWNfYWRkciwgcGFyYW1zKTsKKwlpZiAocmV0IDwgMCkgeworCQlJV01fRVJSKGl3bSwgIkludmFsaWQga2V5X3BhcmFtc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgMCwga2V5KTsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfZ2V0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCQl1OCBrZXlfaW5kZXgsIGNvbnN0IHU4ICptYWNfYWRkciwgdm9pZCAqY29va2llLAorCQkJCXZvaWQgKCpjYWxsYmFjaykodm9pZCAqY29va2llLAorCQkJCQkJIHN0cnVjdCBrZXlfcGFyYW1zKikpCit7CisJc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShuZGV2KTsKKwlzdHJ1Y3QgaXdtX2tleSAqa2V5ID0gJml3bS0+a2V5c1trZXlfaW5kZXhdOworCXN0cnVjdCBrZXlfcGFyYW1zIHBhcmFtczsKKworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIkdldHRpbmcga2V5ICVkXG4iLCBrZXlfaW5kZXgpOworCisJbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKworCXBhcmFtcy5jaXBoZXIgPSBrZXktPmNpcGhlcjsKKwlwYXJhbXMua2V5X2xlbiA9IGtleS0+a2V5X2xlbjsKKwlwYXJhbXMuc2VxX2xlbiA9IGtleS0+c2VxX2xlbjsKKwlwYXJhbXMuc2VxID0ga2V5LT5zZXE7CisJcGFyYW1zLmtleSA9IGtleS0+a2V5OworCisJY2FsbGJhY2soY29va2llLCAmcGFyYW1zKTsKKworCXJldHVybiBrZXktPmtleV9sZW4gPyAwIDogLUVOT0VOVDsKK30KKworCitzdGF0aWMgaW50IGl3bV9jZmc4MDIxMV9kZWxfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCXU4IGtleV9pbmRleCwgY29uc3QgdTggKm1hY19hZGRyKQoreworCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20obmRldik7CisJc3RydWN0IGl3bV9rZXkgKmtleSA9ICZpd20tPmtleXNba2V5X2luZGV4XTsKKworCWlmICghaXdtLT5rZXlzW2tleV9pbmRleF0ua2V5X2xlbikgeworCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJLZXkgJWQgbm90IHVzZWRcbiIsIGtleV9pbmRleCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChrZXlfaW5kZXggPT0gaXdtLT5kZWZhdWx0X2tleSkKKwkJaXdtLT5kZWZhdWx0X2tleSA9IC0xOworCisJcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgMSwga2V5KTsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCQl1OCBrZXlfaW5kZXgpCit7CisJc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShuZGV2KTsKKworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIkRlZmF1bHQga2V5IGluZGV4IGlzOiAlZFxuIiwga2V5X2luZGV4KTsKKworCWlmICghaXdtLT5rZXlzW2tleV9pbmRleF0ua2V5X2xlbikgeworCQlJV01fRVJSKGl3bSwgIktleSAlZCBub3QgdXNlZFxuIiwga2V5X2luZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaXdtLT5kZWZhdWx0X2tleSA9IGtleV9pbmRleDsKKworCXJldHVybiBpd21fc2V0X3R4X2tleShpd20sIGtleV9pbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2dldF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCSAgICB1OCAqbWFjLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKG5kZXYpOworCisJaWYgKG1lbWNtcChtYWMsIGl3bS0+YnNzaWQsIEVUSF9BTEVOKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOworCXNpbmZvLT50eHJhdGUubGVnYWN5ID0gaXdtLT5yYXRlICogMTA7CisKKwlpZiAodGVzdF9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVEVELCAmaXdtLT5zdGF0dXMpKSB7CisJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKwkJc2luZm8tPnNpZ25hbCA9IGl3bS0+d3N0YXRzLnF1YWwubGV2ZWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKwogaW50IGl3bV9jZmc4MDIxMV9pbmZvcm1fYnNzKHN0cnVjdCBpd21fcHJpdiAqaXdtKQogewogCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBpd21fdG9fd2lwaHkoaXdtKTsKQEAgLTE2NywyMCArMjk2LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2NoYW5nZV9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgaWZpbmRleCwKK3N0YXRpYyBpbnQgaXdtX2NmZzgwMjExX2NoYW5nZV9pZmFjZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAJc3RydWN0IGl3bV9wcml2ICppd207CiAJdTMyIG9sZF9tb2RlOwogCi0JLyogd2UncmUgdW5kZXIgUlROTCAqLwotCW5kZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKLQlpZiAoIW5kZXYpCi0JCXJldHVybiAtRU5PREVWOwotCiAJd2RldiA9IG5kZXYtPmllZWU4MDIxMV9wdHI7CiAJaXdtID0gbmRldl90b19pd20obmRldik7CiAJb2xkX21vZGUgPSBpd20tPmNvbmYubW9kZTsKQEAgLTIwMywxMSArMzI3LDggQEAKIAogCWl3bS0+dW1hY19wcm9maWxlLT5tb2RlID0gY3B1X3RvX2xlMzIoaXdtLT5jb25mLm1vZGUpOwogCi0JaWYgKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSkgewotCQlpbnQgcmV0ID0gaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBpbnZhbGlkYXRlIHByb2ZpbGVcbiIpOwotCX0KKwlpZiAoaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKQorCQlpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoaXdtKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzI5LDEyICs0NTAsMzAwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXdtX3NldF9hdXRoX3R5cGUoc3RydWN0IGl3bV9wcml2ICppd20sCisJCQkgICAgIGVudW0gbmw4MDIxMV9hdXRoX3R5cGUgc21lX2F1dGhfdHlwZSkKK3sKKwl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOworCisJc3dpdGNoIChzbWVfYXV0aF90eXBlKSB7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX0FVVE9NQVRJQzoKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06CisJCUlXTV9EQkdfV0VYVChpd20sIERCRywgIk9QRU4gYXV0aFxuIik7CisJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9PUEVOOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWToKKwkJaWYgKGl3bS0+dW1hY19wcm9maWxlLT5zZWMuZmxhZ3MgJgorCQkgICAgKFVNQUNfU0VDX0ZMR19XUEFfT05fTVNLIHwgVU1BQ19TRUNfRkxHX1JTTkFfT05fTVNLKSkgeworCQkJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiV1BBIGF1dGggYWxnXG4iKTsKKwkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9SU05BX1BTSzsKKwkJfSBlbHNlIHsKKwkJCUlXTV9EQkdfV0VYVChpd20sIERCRywgIldFUCBzaGFyZWQga2V5IGF1dGggYWxnXG4iKTsKKwkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOworCQl9CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdNX0VSUihpd20sICJVbnN1cHBvcnRlZCBhdXRoIGFsZzogMHgleFxuIiwgc21lX2F1dGhfdHlwZSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdtX3NldF93cGFfdmVyc2lvbihzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTMyIHdwYV92ZXJzaW9uKQoreworCUlXTV9EQkdfV0VYVChpd20sIERCRywgIndwYV92ZXJzaW9uOiAlZFxuIiwgd3BhX3ZlcnNpb24pOworCisJaWYgKCF3cGFfdmVyc2lvbikgeworCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzID0gVU1BQ19TRUNfRkxHX0xFR0FDWV9QUk9GSUxFOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzIpCisJCWl3bS0+dW1hY19wcm9maWxlLT5zZWMuZmxhZ3MgPSBVTUFDX1NFQ19GTEdfUlNOQV9PTl9NU0s7CisKKwlpZiAod3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzEpCisJCWl3bS0+dW1hY19wcm9maWxlLT5zZWMuZmxhZ3MgfD0gVU1BQ19TRUNfRkxHX1dQQV9PTl9NU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd21fc2V0X2NpcGhlcihzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTMyIGNpcGhlciwgYm9vbCB1Y2FzdCkKK3sKKwl1OCAqcHJvZmlsZV9jaXBoZXIgPSB1Y2FzdCA/ICZpd20tPnVtYWNfcHJvZmlsZS0+c2VjLnVjYXN0X2NpcGhlciA6CisJCSZpd20tPnVtYWNfcHJvZmlsZS0+c2VjLm1jYXN0X2NpcGhlcjsKKworCWlmICghY2lwaGVyKSB7CisJCSpwcm9maWxlX2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfTk9ORTsKKwkJcmV0dXJuIDA7CisJfQorCisJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiJWNjYXN0IGNpcGhlciBpcyAweCV4XG4iLCB1Y2FzdCA/ICd1JyA6ICdtJywKKwkJICAgICBjaXBoZXIpOworCisJc3dpdGNoIChjaXBoZXIpIHsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX05PTkU6CisJCSpwcm9maWxlX2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfTk9ORTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKKwkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfNDA7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgorCQkqcHJvZmlsZV9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF8xMDQ7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9US0lQOworCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCSpwcm9maWxlX2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfQ0NNUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdNX0VSUihpd20sICJVbnN1cHBvcnRlZCBjaXBoZXI6IDB4JXhcbiIsIGNpcGhlcik7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdtX3NldF9rZXlfbWd0KHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1MzIga2V5X21ndCkKK3sKKwl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOworCisJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5X21ndDogMHgleFxuIiwga2V5X21ndCk7CisKKwlpZiAoa2V5X21ndCA9PSBXTEFOX0FLTV9TVUlURV84MDIxWCkKKwkJKmF1dGhfdHlwZSA9IFVNQUNfQVVUSF9UWVBFXzgwMjFYOworCWVsc2UgaWYgKGtleV9tZ3QgPT0gV0xBTl9BS01fU1VJVEVfUFNLKSB7CisJCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzICYKKwkJICAgIChVTUFDX1NFQ19GTEdfV1BBX09OX01TSyB8IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSykpCisJCQkqYXV0aF90eXBlID0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0s7CisJCWVsc2UKKwkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOworCX0gZWxzZSB7CisJCUlXTV9FUlIoaXdtLCAiSW52YWxpZCBrZXkgbWd0OiAweCV4XG4iLCBrZXlfbWd0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IHdpcGh5X3RvX2l3bSh3aXBoeSk7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gc21lLT5jaGFubmVsOworCXN0cnVjdCBrZXlfcGFyYW1zIGtleV9wYXJhbTsKKwlpbnQgcmV0OworCisJaWYgKCF0ZXN0X2JpdChJV01fU1RBVFVTX1JFQURZLCAmaXdtLT5zdGF0dXMpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICghc21lLT5zc2lkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpIHsKKwkJcmV0ID0gaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7CisJCWlmIChyZXQpIHsKKwkJCUlXTV9FUlIoaXdtLCAiQ291bGRuJ3QgaW52YWxpZGF0ZSBwcm9maWxlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAoY2hhbikKKwkJaXdtLT5jaGFubmVsID0KKwkJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFuLT5jZW50ZXJfZnJlcSk7CisKKwlpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkX2xlbiA9IHNtZS0+c3NpZF9sZW47CisJbWVtY3B5KGl3bS0+dW1hY19wcm9maWxlLT5zc2lkLnNzaWQsIHNtZS0+c3NpZCwgc21lLT5zc2lkX2xlbik7CisKKwlpZiAoc21lLT5ic3NpZCkgeworCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJCU1NJRDogJXBNXG4iLCBzbWUtPmJzc2lkKTsKKwkJbWVtY3B5KCZpd20tPnVtYWNfcHJvZmlsZS0+YnNzaWRbMF0sIHNtZS0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJaXdtLT51bWFjX3Byb2ZpbGUtPmJzc19udW0gPSAxOworCX0gZWxzZSB7CisJCW1lbXNldCgmaXdtLT51bWFjX3Byb2ZpbGUtPmJzc2lkWzBdLCAwLCBFVEhfQUxFTik7CisJCWl3bS0+dW1hY19wcm9maWxlLT5ic3NfbnVtID0gMDsKKwl9CisKKwlyZXQgPSBpd21fc2V0X3dwYV92ZXJzaW9uKGl3bSwgc21lLT5jcnlwdG8ud3BhX3ZlcnNpb25zKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGl3bV9zZXRfYXV0aF90eXBlKGl3bSwgc21lLT5hdXRoX3R5cGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHNtZS0+Y3J5cHRvLm5fY2lwaGVyc19wYWlyd2lzZSkgeworCQlyZXQgPSBpd21fc2V0X2NpcGhlcihpd20sIHNtZS0+Y3J5cHRvLmNpcGhlcnNfcGFpcndpc2VbMF0sCisJCQkJICAgICB0cnVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGl3bV9zZXRfY2lwaGVyKGl3bSwgc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoc21lLT5jcnlwdG8ubl9ha21fc3VpdGVzKSB7CisJCXJldCA9IGl3bV9zZXRfa2V5X21ndChpd20sIHNtZS0+Y3J5cHRvLmFrbV9zdWl0ZXNbMF0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBXZSBzYXZlIHRoZSBXRVAga2V5IGluIGNhc2Ugd2Ugd2FudCB0byBkbyBzaGFyZWQgYXV0aGVudGljYXRpb24uCisJICogV2UgaGF2ZSB0byBkbyBpdCBzbyBiZWNhdXNlIFVNQUMgd2lsbCBhc3NlcnQgd2hlbmV2ZXIgaXQgZ2V0cyBhCisJICoga2V5IGJlZm9yZSBhIHByb2ZpbGUuCisJICovCisJaWYgKHNtZS0+a2V5KSB7CisJCWtleV9wYXJhbS5rZXkgPSBrbWVtZHVwKHNtZS0+a2V5LCBzbWUtPmtleV9sZW4sIEdGUF9LRVJORUwpOworCQlpZiAoa2V5X3BhcmFtLmtleSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWtleV9wYXJhbS5rZXlfbGVuID0gc21lLT5rZXlfbGVuOworCQlrZXlfcGFyYW0uc2VxX2xlbiA9IDA7CisJCWtleV9wYXJhbS5jaXBoZXIgPSBzbWUtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlWzBdOworCisJCXJldCA9IGl3bV9rZXlfaW5pdCgmaXdtLT5rZXlzW3NtZS0+a2V5X2lkeF0sIHNtZS0+a2V5X2lkeCwKKwkJCQkgICBOVUxMLCAma2V5X3BhcmFtKTsKKwkJa2ZyZWUoa2V5X3BhcmFtLmtleSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlJV01fRVJSKGl3bSwgIkludmFsaWQga2V5X3BhcmFtc1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaXdtLT5kZWZhdWx0X2tleSA9IHNtZS0+a2V5X2lkeDsKKwl9CisKKwlyZXQgPSBpd21fc2VuZF9tbG1lX3Byb2ZpbGUoaXdtKTsKKworCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmF1dGhfdHlwZSAhPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLIHx8CisJICAgIHNtZS0+a2V5ID09IE5VTEwpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFdlIHdhbnQgdG8gZG8gc2hhcmVkIGF1dGguCisJICogV2UgbmVlZCB0byBhY3R1YWxseSBzZXQgdGhlIGtleSB3ZSBwcmV2aW91c2x5IGNhY2hlZCwKKwkgKiBhbmQgdGhlbiB0ZWxsIHRoZSBVTUFDIGl0J3MgdGhlIGRlZmF1bHQgb25lLgorCSAqIFRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBhdXRoK2Fzc29jIFVNQUMgbWFjaGluZXJ5LCBhbmQgYWdhaW4sCisJICogdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgc2V0dGluZyB0aGUgcHJvZmlsZS4KKwkgKi8KKwlyZXQgPSBpd21fc2V0X2tleShpd20sIDAsICZpd20tPmtleXNbc21lLT5rZXlfaWR4XSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gaXdtX3NldF90eF9rZXkoaXdtLCBpd20tPmRlZmF1bHRfa2V5KTsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfZGlzY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHUxNiByZWFzb25fY29kZSkKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IHdpcGh5X3RvX2l3bSh3aXBoeSk7CisKKwlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJBY3RpdmU6ICVkXG4iLCBpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpOworCisJaWYgKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSkKKwkJaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfc2V0X3R4cG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgZW51bSB0eF9wb3dlcl9zZXR0aW5nIHR5cGUsIGludCBkYm0pCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBUWF9QT1dFUl9BVVRPTUFUSUM6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpd21fY2ZnODAyMTFfZ2V0X3R4cG93ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50ICpkYm0pCit7CisJc3RydWN0IGl3bV9wcml2ICppd20gPSB3aXBoeV90b19pd20od2lwaHkpOworCisJKmRibSA9IGl3bS0+dHhwb3dlcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl3bV9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBib29sIGVuYWJsZWQsIGludCB0aW1lb3V0KQoreworCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gd2lwaHlfdG9faXdtKHdpcGh5KTsKKwl1MzIgcG93ZXJfaW5kZXg7CisKKwlpZiAoZW5hYmxlZCkKKwkJcG93ZXJfaW5kZXggPSBJV01fUE9XRVJfSU5ERVhfREVGQVVMVDsKKwllbHNlCisJCXBvd2VyX2luZGV4ID0gSVdNX1BPV0VSX0lOREVYX01JTjsKKworCWlmIChwb3dlcl9pbmRleCA9PSBpd20tPmNvbmYucG93ZXJfaW5kZXgpCisJCXJldHVybiAwOworCisJaXdtLT5jb25mLnBvd2VyX2luZGV4ID0gcG93ZXJfaW5kZXg7CisKKwlyZXR1cm4gaXdtX3VtYWNfc2V0X2NvbmZpZ19maXgoaXdtLCBVTUFDX1BBUkFNX1RCTF9DRkdfRklYLAorCQkJCSAgICAgICBDRkdfUE9XRVJfSU5ERVgsIGl3bS0+Y29uZi5wb3dlcl9pbmRleCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIGl3bV9jZmc4MDIxMV9vcHMgPSB7CiAJLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBpd21fY2ZnODAyMTFfY2hhbmdlX2lmYWNlLAorCS5hZGRfa2V5ID0gaXdtX2NmZzgwMjExX2FkZF9rZXksCisJLmdldF9rZXkgPSBpd21fY2ZnODAyMTFfZ2V0X2tleSwKKwkuZGVsX2tleSA9IGl3bV9jZmc4MDIxMV9kZWxfa2V5LAorCS5zZXRfZGVmYXVsdF9rZXkgPSBpd21fY2ZnODAyMTFfc2V0X2RlZmF1bHRfa2V5LAorCS5nZXRfc3RhdGlvbiA9IGl3bV9jZmc4MDIxMV9nZXRfc3RhdGlvbiwKIAkuc2NhbiA9IGl3bV9jZmc4MDIxMV9zY2FuLAogCS5zZXRfd2lwaHlfcGFyYW1zID0gaXdtX2NmZzgwMjExX3NldF93aXBoeV9wYXJhbXMsCisJLmNvbm5lY3QgPSBpd21fY2ZnODAyMTFfY29ubmVjdCwKKwkuZGlzY29ubmVjdCA9IGl3bV9jZmc4MDIxMV9kaXNjb25uZWN0LAogCS5qb2luX2lic3MgPSBpd21fY2ZnODAyMTFfam9pbl9pYnNzLAogCS5sZWF2ZV9pYnNzID0gaXdtX2NmZzgwMjExX2xlYXZlX2lic3MsCisJLnNldF90eF9wb3dlciA9IGl3bV9jZmc4MDIxMV9zZXRfdHhwb3dlciwKKwkuZ2V0X3R4X3Bvd2VyID0gaXdtX2NmZzgwMjExX2dldF90eHBvd2VyLAorCS5zZXRfcG93ZXJfbWdtdCA9IGl3bV9jZmc4MDIxMV9zZXRfcG93ZXJfbWdtdCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY2lwaGVyX3N1aXRlc1tdID0geworCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwLAorCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCwKKwlXTEFOX0NJUEhFUl9TVUlURV9US0lQLAorCVdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAsCiB9OwogCiBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICppd21fd2Rldl9hbGxvYyhpbnQgc2l6ZW9mX2J1cywgc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMzc5LDYgKzc4OCw5IEBACiAJd2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJml3bV9iYW5kXzVnaHo7CiAJd2Rldi0+d2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOwogCisJd2Rldi0+d2lwaHktPmNpcGhlcl9zdWl0ZXMgPSBjaXBoZXJfc3VpdGVzOworCXdkZXYtPndpcGh5LT5uX2NpcGhlcl9zdWl0ZXMgPSBBUlJBWV9TSVpFKGNpcGhlcl9zdWl0ZXMpOworCiAJcmV0ID0gd2lwaHlfcmVnaXN0ZXIod2Rldi0+d2lwaHkpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgcmVnaXN0ZXIgd2lwaHkgZGV2aWNlXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKaW5kZXggZTIzMzRkMS4uMjNiNTJmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKQEAgLTcwLDE0ICs3MCwyNyBAQAogaW50IGl3bV9zZW5kX3dpZmlfaWZfY21kKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9zaXplLAogCQkJIGJvb2wgcmVzcCkKIHsKKwlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZiAqaGRyID0gKHN0cnVjdCBpd21fdW1hY193aWZpX2lmICopcGF5bG9hZDsKIAlzdHJ1Y3QgaXdtX3VkbWFfd2lmaV9jbWQgdWRtYV9jbWQgPSBVRE1BX1VNQUNfSU5JVDsKIAlzdHJ1Y3QgaXdtX3VtYWNfY21kIHVtYWNfY21kOworCWludCByZXQ7CisJdTggb2lkID0gaGRyLT5vaWQ7CiAKIAl1bWFjX2NtZC5pZCA9IFVNQUNfQ01EX09QQ09ERV9XSUZJX0lGX1dSQVBQRVI7CiAJdW1hY19jbWQucmVzcCA9IHJlc3A7CiAKLQlyZXR1cm4gaXdtX2hhbF9zZW5kX3VtYWNfY21kKGl3bSwgJnVkbWFfY21kLCAmdW1hY19jbWQsCi0JCQkJICAgICBwYXlsb2FkLCBwYXlsb2FkX3NpemUpOworCXJldCA9IGl3bV9oYWxfc2VuZF91bWFjX2NtZChpd20sICZ1ZG1hX2NtZCwgJnVtYWNfY21kLAorCQkJCSAgICBwYXlsb2FkLCBwYXlsb2FkX3NpemUpOworCisJaWYgKHJlc3ApIHsKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaXdtLT53aWZpX250ZnlfcXVldWUsCisJCQkJICAgdGVzdF9hbmRfY2xlYXJfYml0KG9pZCwgJml3bS0+d2lmaV9udGZ5WzBdKSwKKwkJCQkgICAzICogSFopOworCisJCXJldHVybiByZXQgPyAwIDogLUVCVVNZOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29leF9ldmVudCBpd21fc3RhX3hvcl9wcmlvX3RibFtDT0VYX0VWRU5UU19OVU1dID0KQEAgLTEwNiw3ICsxMTksNyBAQAogCXs0LCAzLCAwLCBDT0VYX1VOQVNTT0NfTUFOVUFMX1NDQU5fRkxBR1N9LAogCXszLCAzLCAwLCBDT0VYX1VOQVNTT0NfQVVUT19TQ0FOX0ZMQUdTfSwKIAl7NSwgNSwgMCwgQ09FWF9DQUxJQlJBVElPTl9GTEFHU30sCi0JezQsIDQsIDAsIENPRVhfUEVSSU9ESUNfQ0FMSUJSQVRJT05fRkxBR1N9LAorCXszLCAzLCAwLCBDT0VYX1BFUklPRElDX0NBTElCUkFUSU9OX0ZMQUdTfSwKIAl7NSwgNCwgMCwgQ09FWF9DT05ORUNUSU9OX0VTVEFCX0ZMQUdTfSwKIAl7NCwgNCwgMCwgQ09FWF9BU1NPQ0lBVEVEX0lETEVfRkxBR1N9LAogCXs0LCA0LCAwLCBDT0VYX0FTU09DX01BTlVBTF9TQ0FOX0ZMQUdTfSwKQEAgLTMzMiw4ICszNDUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBpd21fc2VuZF91bWFjX2NvbmZpZyhzdHJ1Y3QgaXdtX3ByaXYgKml3bSwKLQkJCSBfX2xlMzIgcmVzZXRfZmxhZ3MpCitpbnQgaXdtX3NlbmRfdW1hY19jb25maWcoc3RydWN0IGl3bV9wcml2ICppd20sIF9fbGUzMiByZXNldF9mbGFncykKIHsKIAlpbnQgcmV0OwogCkBAIC0zNjEsNiArMzczLDEyIEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBpd21fdW1hY19zZXRfY29uZmlnX2ZpeChpd20sIFVNQUNfUEFSQU1fVEJMX0NGR19GSVgsCisJCQkJICAgICAgQ0ZHX1dJUkVMRVNTX01PREUsCisJCQkJICAgICAgaXdtLT5jb25mLndpcmVsZXNzX21vZGUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaXdtX3VtYWNfc2V0X2NvbmZpZ19maXgoaXdtLCBVTUFDX1BBUkFNX1RCTF9DRkdfRklYLAogCQkJCSAgICAgIENGR19DT0VYX01PREUsIGl3bS0+Y29uZi5jb2V4aXN0X21vZGUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtNDAyLDcgKzQyMCw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBpd21fdW1hY19zZXRfY29uZmlnX2ZpeChpd20sIFVNQUNfUEFSQU1fVEJMX0NGR19GSVgsCi0JCQkJICAgICAgQ0ZHX1BNX0NUUkxfRkxBR1MsIDB4MzAwMDEpOworCQkJCSAgICAgIENGR19QTV9DVFJMX0ZMQUdTLCAweDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC00NjIsOCArNDgwLDEwIEBACiAJdGFyZ2V0X2NtZC5lb3AgPSAxOwogCiAJcmV0ID0gaXdtX2hhbF9zZW5kX3RhcmdldF9jbWQoaXdtLCAmdGFyZ2V0X2NtZCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKIAkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBzZW5kIFJFQUQgY29tbWFuZFxuIik7CisJCXJldHVybiByZXQ7CisJfQogCiAJLyogV2hlbiBzdWNjZWRpbmcsIHRoZSBzZW5kX3RhcmdldCByb3V0aW5lIHJldHVybnMgdGhlIHNlcSBudW1iZXIgKi8KIAlzZXFfbnVtID0gcmV0OwpAQCAtNDgzLDcgKzUwMyw3IEBACiAKIAlrZnJlZShjbWQpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGl3bV9yZWFkX21hYyhzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTggKm1hYykKQEAgLTQ5Myw3ICs1MTMsNyBAQAogCiAJcmV0ID0gaXdtX3RhcmdldF9yZWFkKGl3bSwgY3B1X3RvX2xlMzIoV0lDT19NQUNfQUREUkVTU19BRERSKSwKIAkJCSAgICAgIG1hY19hbGlnbiwgc2l6ZW9mKG1hY19hbGlnbikpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNfYWxpZ24pKQpAQCAtNTA3LDIyICs1MjcsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXdtX3NldF90eF9rZXkoc3RydWN0IGl3bV9wcml2ICppd20sIHU4IGtleV9pZHgpCi17Ci0Jc3RydWN0IGl3bV91bWFjX3R4X2tleV9pZCB0eF9rZXlfaWQ7Ci0KLQlpZiAoIWl3bS0+ZGVmYXVsdF9rZXkgfHwgIWl3bS0+ZGVmYXVsdF9rZXktPmluX3VzZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0eF9rZXlfaWQuaGRyLm9pZCA9IFVNQUNfV0lGSV9JRl9DTURfR0xPQkFMX1RYX0tFWV9JRDsKLQl0eF9rZXlfaWQuaGRyLmJ1Zl9zaXplID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBpd21fdW1hY190eF9rZXlfaWQpIC0KLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaWYpKTsKLQotCXR4X2tleV9pZC5rZXlfaWR4ID0ga2V5X2lkeDsKLQotCXJldHVybiBpd21fc2VuZF93aWZpX2lmX2NtZChpd20sICZ0eF9rZXlfaWQsIHNpemVvZih0eF9rZXlfaWQpLCAxKTsKLX0KLQogc3RhdGljIGludCBpd21fY2hlY2tfcHJvZmlsZShzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKIHsKIAlpZiAoIWl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSkKQEAgLTU1NiwxMCArNTYwLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd21fc2V0X2tleShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgYm9vbCByZW1vdmUsIGJvb2wgc2V0X3R4X2tleSwKLQkJc3RydWN0IGl3bV9rZXkgKmtleSkKK2ludCBpd21fc2V0X3R4X2tleShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTgga2V5X2lkeCkKIHsKKwlzdHJ1Y3QgaXdtX3VtYWNfdHhfa2V5X2lkIHR4X2tleV9pZDsKIAlpbnQgcmV0OworCisJcmV0ID0gaXdtX2NoZWNrX3Byb2ZpbGUoaXdtKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFVNQUMgb25seSBhbGxvd3MgdG8gc2V0IGRlZmF1bHQga2V5IGZvciBXRVAgYW5kIGF1dGggdHlwZSBpcworCSAqIE5PVCA4MDIuMVggb3IgUlNOQS4gKi8KKwlpZiAoKGl3bS0+dW1hY19wcm9maWxlLT5zZWMudWNhc3RfY2lwaGVyICE9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzQwICYmCisJICAgICBpd20tPnVtYWNfcHJvZmlsZS0+c2VjLnVjYXN0X2NpcGhlciAhPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF8xMDQpIHx8CisJICAgIGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlID09IFVNQUNfQVVUSF9UWVBFXzgwMjFYIHx8CisJICAgIGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlID09IFVNQUNfQVVUSF9UWVBFX1JTTkFfUFNLKQorCQlyZXR1cm4gMDsKKworCXR4X2tleV9pZC5oZHIub2lkID0gVU1BQ19XSUZJX0lGX0NNRF9HTE9CQUxfVFhfS0VZX0lEOworCXR4X2tleV9pZC5oZHIuYnVmX3NpemUgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGl3bV91bWFjX3R4X2tleV9pZCkgLQorCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pZikpOworCisJdHhfa2V5X2lkLmtleV9pZHggPSBrZXlfaWR4OworCisJcmV0dXJuIGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJnR4X2tleV9pZCwgc2l6ZW9mKHR4X2tleV9pZCksIDEpOworfQorCitpbnQgaXdtX3NldF9rZXkoc3RydWN0IGl3bV9wcml2ICppd20sIGJvb2wgcmVtb3ZlLCBzdHJ1Y3QgaXdtX2tleSAqa2V5KQoreworCWludCByZXQgPSAwOwogCXU4IGNtZFs2NF0sICpzdGFfYWRkciwgKmtleV9kYXRhLCBrZXlfbGVuOwogCXM4IGtleV9pZHg7CiAJdTE2IGNtZF9zaXplID0gMDsKQEAgLTU2OSwxNSArNTk4LDYgQEAKIAlzdHJ1Y3QgaXdtX3VtYWNfa2V5X3RraXAgKnRraXAgPSAoc3RydWN0IGl3bV91bWFjX2tleV90a2lwICopY21kOwogCXN0cnVjdCBpd21fdW1hY19rZXlfY2NtcCAqY2NtcCA9IChzdHJ1Y3QgaXdtX3VtYWNfa2V5X2NjbXAgKiljbWQ7CiAKLQlpZiAoc2V0X3R4X2tleSkKLQkJaXdtLT5kZWZhdWx0X2tleSA9IGtleTsKLQotCS8qCi0JICogV2UgY2hlY2sgaWYgb3VyIGN1cnJlbnQgcHJvZmlsZSBpcyB2YWxpZC4KLQkgKiBJZiBub3QsIHdlIGRvbnQgcHVzaCB0aGUga2V5LCB3ZSBqdXN0IGNhY2hlIHRoZW0sCi0JICogc28gdGhhdCB3aXRoIHRoZSBuZXh0IHNpd3Nlc3NpZCBjYWxsLCB0aGUga2V5cwotCSAqIHdpbGwgYmUgYWN0dWFsbHkgcHVzaGVkLgotCSAqLwogCWlmICghcmVtb3ZlKSB7CiAJCXJldCA9IGl3bV9jaGVja19wcm9maWxlKGl3bSk7CiAJCWlmIChyZXQgPCAwKQpAQCAtNTkwLDggKzYxMCw5IEBACiAJa2V5X2lkeCA9IGtleS0+aGRyLmtleV9pZHg7CiAKIAlpZiAoIXJlbW92ZSkgewotCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJrZXlfaWR4OiVkIHNldCB0eCBrZXk6JWRcbiIsCi0JCQkgICAgIGtleV9pZHgsIHNldF90eF9rZXkpOworCQl1OCBhdXRoX3R5cGUgPSBpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmF1dGhfdHlwZTsKKworCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJrZXlfaWR4OiVkXG4iLCBrZXlfaWR4KTsKIAkJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5X2xlbjolZFxuIiwga2V5X2xlbik7CiAJCUlXTV9EQkdfV0VYVChpd20sIERCRywgIk1BQzolcE0sIGlkeDolZCwgbXVsdGljYXN0OiVkXG4iLAogCQkgICAgICAga2V5X2hkci0+bWFjLCBrZXlfaGRyLT5rZXlfaWR4LCBrZXlfaGRyLT5tdWx0aWNhc3QpOwpAQCAtNjAzLDggKzYyNCw4IEBACiAJCQkgICAgIGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlLAogCQkJICAgICBpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzKTsKIAotCQlzd2l0Y2ggKGtleS0+YWxnKSB7Ci0JCWNhc2UgVU1BQ19DSVBIRVJfVFlQRV9XRVBfNDA6CisJCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJCXdlcDQwLT5oZHIub2lkID0gVU1BQ19XSUZJX0lGX0NNRF9BRERfV0VQNDBfS0VZOwogCQkJd2VwNDAtPmhkci5idWZfc2l6ZSA9CiAJCQkJY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfd2VwNDApIC0KQEAgLTYxMywxMiArNjM0LDE0IEBACiAJCQltZW1jcHkoJndlcDQwLT5rZXlfaGRyLCBrZXlfaGRyLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfa2V5X2hkcikpOwogCQkJbWVtY3B5KHdlcDQwLT5rZXksIGtleV9kYXRhLCBrZXlfbGVuKTsKLQkJCXdlcDQwLT5zdGF0aWNfa2V5ID0gMTsKKwkJCXdlcDQwLT5zdGF0aWNfa2V5ID0KKwkJCQkhISgoYXV0aF90eXBlICE9IFVNQUNfQVVUSF9UWVBFXzgwMjFYKSAmJgorCQkJCSAgIChhdXRoX3R5cGUgIT0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0spKTsKIAogCQkJY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bV91bWFjX2tleV93ZXA0MCk7CiAJCQlicmVhazsKIAotCQljYXNlIFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzEwNDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CiAJCQl3ZXAxMDQtPmhkci5vaWQgPSBVTUFDX1dJRklfSUZfQ01EX0FERF9XRVAxMDRfS0VZOwogCQkJd2VwMTA0LT5oZHIuYnVmX3NpemUgPQogCQkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfa2V5X3dlcDEwNCkgLQpAQCAtNjI3LDEyICs2NTAsMTQgQEAKIAkJCW1lbWNweSgmd2VwMTA0LT5rZXlfaGRyLCBrZXlfaGRyLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfa2V5X2hkcikpOwogCQkJbWVtY3B5KHdlcDEwNC0+a2V5LCBrZXlfZGF0YSwga2V5X2xlbik7Ci0JCQl3ZXAxMDQtPnN0YXRpY19rZXkgPSAxOworCQkJd2VwMTA0LT5zdGF0aWNfa2V5ID0KKwkJCQkhISgoYXV0aF90eXBlICE9IFVNQUNfQVVUSF9UWVBFXzgwMjFYKSAmJgorCQkJCSAgIChhdXRoX3R5cGUgIT0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0spKTsKIAogCQkJY21kX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bV91bWFjX2tleV93ZXAxMDQpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBVTUFDX0NJUEhFUl9UWVBFX0NDTVA6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKIAkJCWtleV9oZHItPmtleV9pZHgrKzsKIAkJCWNjbXAtPmhkci5vaWQgPSBVTUFDX1dJRklfSUZfQ01EX0FERF9DQ01QX0tFWTsKIAkJCWNjbXAtPmhkci5idWZfc2l6ZSA9CkBAIC02NDQsMTMgKzY2OSwxMyBAQAogCiAJCQltZW1jcHkoY2NtcC0+a2V5LCBrZXlfZGF0YSwga2V5X2xlbik7CiAKLQkJCWlmIChrZXktPmZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCi0JCQkJbWVtY3B5KGNjbXAtPml2X2NvdW50LCBrZXktPnJ4X3NlcSwgNik7CisJCQlpZiAoa2V5LT5zZXFfbGVuKQorCQkJCW1lbWNweShjY21wLT5pdl9jb3VudCwga2V5LT5zZXEsIGtleS0+c2VxX2xlbik7CiAKIAkJCWNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfY2NtcCk7CiAJCQlicmVhazsKIAotCQljYXNlIFVNQUNfQ0lQSEVSX1RZUEVfVEtJUDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQkJa2V5X2hkci0+a2V5X2lkeCsrOwogCQkJdGtpcC0+aGRyLm9pZCA9IFVNQUNfV0lGSV9JRl9DTURfQUREX1RLSVBfS0VZOwogCQkJdGtpcC0+aGRyLmJ1Zl9zaXplID0KQEAgLTY2Nyw4ICs2OTIsOCBAQAogCQkJICAgICAgIGtleV9kYXRhICsgSVdNX1RLSVBfS0VZX1NJWkUgKyBJV01fVEtJUF9NSUNfU0laRSwKIAkJCSAgICAgICBJV01fVEtJUF9NSUNfU0laRSk7CiAKLQkJCWlmIChrZXktPmZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCi0JCQkJbWVtY3B5KGNjbXAtPml2X2NvdW50LCBrZXktPnJ4X3NlcSwgNik7CisJCQlpZiAoa2V5LT5zZXFfbGVuKQorCQkJCW1lbWNweShjY21wLT5pdl9jb3VudCwga2V5LT5zZXEsIGtleS0+c2VxX2xlbik7CiAKIAkJCWNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfdGtpcCk7CiAJCQlicmVhazsKQEAgLTY3Nyw4ICs3MDIsOCBAQAogCQkJcmV0dXJuIC1FTk9UU1VQUDsKIAkJfQogCi0JCWlmICgoa2V5LT5hbGcgPT0gVU1BQ19DSVBIRVJfVFlQRV9DQ01QKSB8fAotCQkgICAgKGtleS0+YWxnID09IFVNQUNfQ0lQSEVSX1RZUEVfVEtJUCkpCisJCWlmICgoa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgfHwKKwkJICAgIChrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKSkKIAkJCS8qCiAJCQkgKiBVR0xZX1VHTFlfVUdMWQogCQkJICogQ29waWVkIEhBQ0sgZnJvbSB0aGUgTVdHIGRyaXZlci4KQEAgLTY4OSwyMyArNzE0LDExIEBACiAJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodXNlY3NfdG9famlmZmllcygzMDApKTsKIAogCQlyZXQgPSAgaXdtX3NlbmRfd2lmaV9pZl9jbWQoaXdtLCBjbWQsIGNtZF9zaXplLCAxKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjsKLQotCQkvKgotCQkgKiBXZSBuZWVkIGEgZGVmYXVsdCBrZXkgb25seSBpZiBpdCBpcyBzZXQgYW5kCi0JCSAqIGlmIHdlJ3JlIGRvaW5nIFdFUC4KLQkJICovCi0JCWlmIChpd20tPmRlZmF1bHRfa2V5ID09IGtleSAmJgotCQkJKChrZXktPmFsZyA9PSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MCkgfHwKLQkJCSAoa2V5LT5hbGcgPT0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfMTA0KSkpIHsKLQkJCXJldCA9IGl3bV9zZXRfdHhfa2V5KGl3bSwga2V5X2lkeCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIGVycjsKLQkJfQogCX0gZWxzZSB7CiAJCXN0cnVjdCBpd21fdW1hY19rZXlfcmVtb3ZlIGtleV9yZW1vdmU7CiAKKwkJSVdNX0RCR19XRVhUKGl3bSwgRVJSLCAiUmVtb3Zpbmcga2V5X2lkeDolZFxuIiwga2V5X2lkeCk7CisKIAkJa2V5X3JlbW92ZS5oZHIub2lkID0gVU1BQ19XSUZJX0lGX0NNRF9SRU1PVkVfS0VZOwogCQlrZXlfcmVtb3ZlLmhkci5idWZfc2l6ZSA9CiAJCQljcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGl3bV91bWFjX2tleV9yZW1vdmUpIC0KQEAgLTcxNiwyMyArNzI5LDE5IEBACiAJCXJldCA9ICBpd21fc2VuZF93aWZpX2lmX2NtZChpd20sICZrZXlfcmVtb3ZlLAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19rZXlfcmVtb3ZlKSwKIAkJCQkJICAgIDEpOwotCQlpZiAocmV0IDwgMCkKKwkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJaXdtLT5rZXlzW2tleV9pZHhdLmluX3VzZSA9IDA7CisJCWl3bS0+a2V5c1trZXlfaWR4XS5rZXlfbGVuID0gMDsKIAl9CiAKLQlyZXR1cm4gMDsKLQotIGVycjoKLQlrZnJlZShrZXkpOwogCXJldHVybiByZXQ7CiB9CiAKIAogaW50IGl3bV9zZW5kX21sbWVfcHJvZmlsZShzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKIHsKLQlpbnQgcmV0LCBpOworCWludCByZXQ7CiAJc3RydWN0IGl3bV91bWFjX3Byb2ZpbGUgcHJvZmlsZTsKIAogCW1lbWNweSgmcHJvZmlsZSwgaXdtLT51bWFjX3Byb2ZpbGUsIHNpemVvZihwcm9maWxlKSk7CkBAIC03NDIsNDUgKzc1MSwxOSBAQAogCQkJCQkgICBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaWYpKTsKIAogCXJldCA9IGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJnByb2ZpbGUsIHNpemVvZihwcm9maWxlKSwgMSk7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0KSB7CiAJCUlXTV9FUlIoaXdtLCAiU2VuZCBwcm9maWxlIGNvbW1hbmQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBXYWl0IGZvciB0aGUgcHJvZmlsZSB0byBiZSBhY3RpdmUgKi8KLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpd20tPm1sbWVfcXVldWUsCi0JCQkJCSAgICAgICBpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUgPT0gMSwKLQkJCQkJICAgICAgIDMgKiBIWik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQotCWZvciAoaSA9IDA7IGkgPCBJV01fTlVNX0tFWVM7IGkrKykKLQkJaWYgKGl3bS0+a2V5c1tpXS5pbl91c2UpIHsKLQkJCWludCBkZWZhdWx0X2tleSA9IDA7Ci0JCQlzdHJ1Y3QgaXdtX2tleSAqa2V5ID0gJml3bS0+a2V5c1tpXTsKLQotCQkJaWYgKGtleSA9PSBpd20tPmRlZmF1bHRfa2V5KQotCQkJCWRlZmF1bHRfa2V5ID0gMTsKLQotCQkJLyogV2FpdCBmb3IgdGhlIHByb2ZpbGUgYmVmb3JlIHNlbmRpbmcgdGhlIGtleXMgKi8KLQkJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGl3bS0+bWxtZV9xdWV1ZSwKLQkJCSAgICAgKHRlc3RfYml0KElXTV9TVEFUVVNfQVNTT0NJQVRJTkcsICZpd20tPnN0YXR1cykgfHwKLQkJCSAgICAgIHRlc3RfYml0KElXTV9TVEFUVVNfQVNTT0NJQVRFRCwgJml3bS0+c3RhdHVzKSksCi0JCQkJCQkJIDMgKiBIWik7Ci0KLQkJCXJldCA9IGl3bV9zZXRfa2V5KGl3bSwgMCwgZGVmYXVsdF9rZXksIGtleSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQl9Ci0KKwlzZXRfYml0KElXTV9TVEFUVVNfU01FX0NPTk5FQ1RJTkcsICZpd20tPnN0YXR1cyk7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoc3RydWN0IGl3bV9wcml2ICppd20pCiB7Ci0JaW50IHJldDsKIAlzdHJ1Y3QgaXdtX3VtYWNfaW52YWxpZGF0ZV9wcm9maWxlIGludmFsaWQ7CisJaW50IHJldDsKIAogCWludmFsaWQuaGRyLm9pZCA9IFVNQUNfV0lGSV9JRl9DTURfSU5WQUxJREFURV9QUk9GSUxFOwogCWludmFsaWQuaGRyLmJ1Zl9zaXplID0KQEAgLTc5MCwxNiArNzczLDEzIEBACiAJaW52YWxpZC5yZWFzb24gPSBXTEFOX1JFQVNPTl9VTlNQRUNJRklFRDsKIAogCXJldCA9IGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJmludmFsaWQsIHNpemVvZihpbnZhbGlkKSwgMSk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGl3bS0+bWxtZV9xdWV1ZSwKLQkJCQkgKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSA9PSAwKSwKLQkJCQkJICAgICAgIDIgKiBIWik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiAtRUJVU1k7CisJCQkJKGl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSA9PSAwKSwgMiAqIEhaKTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQgPyAwIDogLUVCVVNZOwogfQogCiBpbnQgaXdtX3NlbmRfdW1hY19zdGF0c19yZXEoc3RydWN0IGl3bV9wcml2ICppd20sIHUzMiBmbGFncykKQEAgLTg4Miw3ICs4NjIsNyBAQAogCX0KIAogCXJldCA9IGl3bV9zZW5kX3dpZmlfaWZfY21kKGl3bSwgJnJlcSwgc2l6ZW9mKHJlcSksIDApOwotCWlmIChyZXQgPCAwKSB7CisJaWYgKHJldCkgewogCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IHNlbmQgc2NhbiByZXF1ZXN0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY29tbWFuZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCmluZGV4IDM2YjEzYTEuLmUyNGQ1YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5oCkBAIC0xMDYsOCArMTA2LDcgQEAKIAlDRkdfVExDX1NQQVRJQUxfU1RSRUFNX1NVUFBPUlRFRCwKIAlDRkdfVExDX1JFVFJZX1BFUl9SQVRFLAogCUNGR19UTENfUkVUUllfUEVSX0hUX1JBVEUsCi0JQ0ZHX1RMQ19GSVhFRF9SQVRFLAotCUNGR19UTENfRklYRURfUkFURV9GTEFHUywKKwlDRkdfVExDX0ZJWEVEX01DUywKIAlDRkdfVExDX0NPTlRST0xfRkxBR1MsCiAJQ0ZHX1RMQ19TUl9NSU5fRkFJTCwKIAlDRkdfVExDX1NSX01JTl9QQVNTLApAQCAtMjMyLDYgKzIzMSw3IEBACiAvKiBXaXJlbGVzcyBtb2RlICovCiAjZGVmaW5lIFdJUkVMRVNTX01PREVfMTFBICAweDEKICNkZWZpbmUgV0lSRUxFU1NfTU9ERV8xMUcgIDB4MgorI2RlZmluZSBXSVJFTEVTU19NT0RFXzExTiAgMHg0CiAKICNkZWZpbmUgVU1BQ19QUk9GSUxFX0VYX0lFX1JFUVVJUkVECTB4MQogI2RlZmluZSBVTUFDX1BST0ZJTEVfUU9TX0FMTE9XRUQJMHgyCkBAIC00MDYsOCArNDA2LDcgQEAKIGludCBpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoc3RydWN0IGl3bV9wcml2ICppd20pOwogaW50IGl3bV9zZW5kX3BhY2tldChzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHBvb2xfaWQpOwogaW50IGl3bV9zZXRfdHhfa2V5KHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCBrZXlfaWR4KTsKLWludCBpd21fc2V0X2tleShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgYm9vbCByZW1vdmUsIGJvb2wgc2V0X3R4X2tleSwKLQkJc3RydWN0IGl3bV9rZXkgKmtleSk7CitpbnQgaXdtX3NldF9rZXkoc3RydWN0IGl3bV9wcml2ICppd20sIGJvb2wgcmVtb3ZlLCBzdHJ1Y3QgaXdtX2tleSAqa2V5KTsKIGludCBpd21fc2VuZF91bWFjX3N0YXRzX3JlcShzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTMyIGZsYWdzKTsKIGludCBpd21fc2VuZF91bWFjX2NoYW5uZWxfbGlzdChzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CiBpbnQgaXdtX3NjYW5fc3NpZHMoc3RydWN0IGl3bV9wcml2ICppd20sIHN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnLmgKaW5kZXggOGZiYjQyZC4uZTM1YzliNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnLmgKQEAgLTEwOCw2ICsxMDgsOCBAQAogCXN0cnVjdCBkZW50cnkgKnR4cV9kZW50cnk7CiAJc3RydWN0IGRlbnRyeSAqdHhfY3JlZGl0X2RlbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpyeF90aWNrZXRfZGVudHJ5OworCisJc3RydWN0IGRlbnRyeSAqZndfZXJyX2RlbnRyeTsKIH07CiAKICNpZmRlZiBDT05GSUdfSVdNX0RFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnZnMuYwppbmRleCAwZmE3YjkxLi4xNDY1Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9kZWJ1Z2ZzLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJCWl3bV9kZWJ1Z2ZzX3UzMl9yZWFkLCBpd21fZGVidWdmc19kYmdfbW9kdWxlc193cml0ZSwKIAkJCSIlbGx1XG4iKTsKIAotc3RhdGljIGludCBpd21fdHhyeF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQorc3RhdGljIGludCBpd21fZ2VuZXJpY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmV0dXJuIDA7CkBAIC0yODksMjUgKzI4OSwxMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBpd21fZGVidWdmc19md19lcnJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCWludCBidWZfbGVuID0gNTEyOworCXNpemVfdCBsZW4gPSAwOworCisJaWYgKCpwcG9zICE9IDApCisJCXJldHVybiAwOworCWlmIChjb3VudCA8IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICghaXdtLT5sYXN0X2Z3X2VycikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoaXdtLT5sYXN0X2Z3X2Vyci0+bGluZV9udW0gPT0gMCkKKwkJZ290byBvdXQ7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLCAiJWNNQUMgRlcgRVJST1I6XG4iLAorCSAgICAgKGxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPmNhdGVnb3J5KSA9PSBVTUFDX1NZU19FUlJfQ0FUX0xNQUMpCisJCQk/ICdMJyA6ICdVJyk7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSJcdENhdGVnb3J5OiAgICAlZFxuIiwKKwkJCWxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPmNhdGVnb3J5KSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0U3RhdHVzOiAgICAgIDB4JXhcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5zdGF0dXMpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkiXHRQQzogICAgICAgICAgMHgleFxuIiwKKwkJCWxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPnBjKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0YmxpbmsxOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+YmxpbmsxKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0YmxpbmsyOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+YmxpbmsyKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0aWxpbmsxOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+aWxpbmsxKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0aWxpbmsyOiAgICAgICVkXG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+aWxpbmsyKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0RGF0YTE6ICAgICAgIDB4JXhcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5kYXRhMSkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSJcdERhdGEyOiAgICAgICAweCV4XG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+ZGF0YTIpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkiXHRMaW5lIG51bWJlcjogJWRcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5saW5lX251bSkpOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSJcdFVNQUMgc3RhdHVzOiAweCV4XG4iLAorCQkJbGUzMl90b19jcHUoaXdtLT5sYXN0X2Z3X2Vyci0+dW1hY19zdGF0dXMpKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkiXHRMTUFDIHN0YXR1czogMHgleFxuIiwKKwkJCWxlMzJfdG9fY3B1KGl3bS0+bGFzdF9md19lcnItPmxtYWNfc3RhdHVzKSk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJIlx0U0RJTyBzdGF0dXM6IDB4JXhcbiIsCisJCQlsZTMyX3RvX2NwdShpd20tPmxhc3RfZndfZXJyLT5zZGlvX3N0YXR1cykpOworCitvdXQ6CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBsZW4sIHBwb3MsIGJ1ZiwgYnVmX2xlbik7Cit9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX3R4cV9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCWl3bV90eHJ4X29wZW4sCisJLm9wZW4gPQkJaXdtX2dlbmVyaWNfb3BlbiwKIAkucmVhZCA9CQlpd21fZGVidWdmc190eHFfcmVhZCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX3R4X2NyZWRpdF9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCWl3bV90eHJ4X29wZW4sCisJLm9wZW4gPQkJaXdtX2dlbmVyaWNfb3BlbiwKIAkucmVhZCA9CQlpd21fZGVidWdmc190eF9jcmVkaXRfcmVhZCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX3J4X3RpY2tldF9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5vcGVuID0JCWl3bV90eHJ4X29wZW4sCisJLm9wZW4gPQkJaXdtX2dlbmVyaWNfb3BlbiwKIAkucmVhZCA9CQlpd21fZGVidWdmc19yeF90aWNrZXRfcmVhZCwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGl3bV9kZWJ1Z2ZzX2Z3X2Vycl9mb3BzID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5vcGVuID0JCWl3bV9nZW5lcmljX29wZW4sCisJLnJlYWQgPQkJaXdtX2RlYnVnZnNfZndfZXJyX3JlYWQsCit9OworCiBpbnQgaXdtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKIHsKIAlpbnQgaSwgcmVzdWx0OwpAQCAtNDIzLDYgKzUwOSwxNiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAorCWl3bS0+ZGJnLmZ3X2Vycl9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsYXN0X2Z3X2VyciIsIDAyMDAsCisJCQkJCQkgICAgIGl3bS0+ZGJnLmRiZ2RpciwgaXdtLAorCQkJCQkJICAgICAmaXdtX2RlYnVnZnNfZndfZXJyX2ZvcHMpOworCXJlc3VsdCA9IFBUUl9FUlIoaXdtLT5kYmcuZndfZXJyX2RlbnRyeSk7CisJaWYgKElTX0VSUihpd20tPmRiZy5md19lcnJfZGVudHJ5KSAmJiAocmVzdWx0ICE9IC1FTk9ERVYpKSB7CisJCUlXTV9FUlIoaXdtLCAiQ291bGRuJ3QgY3JlYXRlIGxhc3QgRlcgZXJyOiAlZFxuIiwgcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwogCXJldHVybiAwOwogCiAgZXJyb3I6CkBAIC00NDEsNiArNTM3LDcgQEAKIAlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy50eHFfZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy50eF9jcmVkaXRfZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy5yeF90aWNrZXRfZGVudHJ5KTsKKwlkZWJ1Z2ZzX3JlbW92ZShpd20tPmRiZy5md19lcnJfZGVudHJ5KTsKIAlpZiAoaXdtLT5idXNfb3BzLT5kZWJ1Z2ZzX2V4aXQpCiAJCWl3bS0+YnVzX29wcy0+ZGVidWdmc19leGl0KGl3bSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9lZXByb20uYwppbmRleCAwZjM0Yjg0Li4zNjU5MTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2VlcHJvbS5jCkBAIC0xNTYsMTAgKzE1Niw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChpID0gSVdNX0VFUFJPTV9GSVJTVDsgaSA8IElXTV9FRVBST01fTEFTVDsgaSsrKSB7Ci0jaWZkZWYgQ09ORklHX0lXTV9CMF9IV19TVVBQT1JUCi0JCWlmIChpd20tPmNvbmYuaHdfYjAgJiYgKGkgPj0gSVdNX0VFUFJPTV9JTkRJUkVDVF9PRkZTRVQpKQotCQkJYnJlYWs7Ci0jZW5kaWYKIAkJcmV0ID0gaXdtX2VlcHJvbV9yZWFkKGl3bSwgaSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IHJlYWQgZWVwcm9tIGVudHJ5ICMlZDogJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZncuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9mdy5jCmluZGV4IGVjMWExNWEuLjZiMGJjYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9mdy5jCkBAIC0yNjEsNiArMjYxLDMzIEBACiAJCQljcHVfdG9fbGUzMihVTUFDX1JTVF9DVFJMX0ZMR19MQVJDX0NMS19FTiksIDApOwogfQogCitzdGF0aWMgaW50IGl3bV9pbml0X2NhbGliKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1bnNpZ25lZCBsb25nIGNmZ19iaXRtYXAsCisJCQkgIHVuc2lnbmVkIGxvbmcgZXhwZWN0ZWRfYml0bWFwLCB1OCByeF9pcV9jbWQpCit7CisJLyogUmVhZCBSWCBJUSBjYWxpYnJhdGlvbiByZXN1bHQgZnJvbSBFRVBST00gKi8KKwlpZiAodGVzdF9iaXQocnhfaXFfY21kLCAmY2ZnX2JpdG1hcCkpIHsKKwkJaXdtX3N0b3JlX3J4aXFfY2FsaWJfcmVzdWx0KGl3bSk7CisJCXNldF9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsICZpd20tPmNhbGliX2RvbmVfbWFwKTsKKwl9CisKKwlpd21fc2VuZF9wcmlvX3RhYmxlKGl3bSk7CisJaXdtX3NlbmRfaW5pdF9jYWxpYl9jZmcoaXdtLCBjZmdfYml0bWFwKTsKKworCXdoaWxlIChpd20tPmNhbGliX2RvbmVfbWFwICE9IGV4cGVjdGVkX2JpdG1hcCkgeworCQlpZiAoaXdtX25vdGlmX2hhbmRsZShpd20sIENBTElCUkFUSU9OX1JFU19OT1RJRklDQVRJT04sCisJCQkJICAgICBJV01fU1JDX0xNQUMsIFdBSVRfTk9USUZfVElNRU9VVCkpIHsKKwkJCUlXTV9EQkdfRlcoaXdtLCBEQkcsICJJbml0aWFsIGNhbGlicmF0aW9uIHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQlJV01fREJHX0ZXKGl3bSwgREJHLCAiR290IGNhbGlicmF0aW9uIHJlc3VsdC4gY2FsaWJfZG9uZV9tYXA6ICIKKwkJCSAgICIweCVseCwgZXhwZWN0ZWQgY2FsaWJyYXRpb25zOiAweCVseFxuIiwKKwkJCSAgIGl3bS0+Y2FsaWJfZG9uZV9tYXAsIGV4cGVjdGVkX2JpdG1hcCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBsb2FkIDMgRldzOgogICogMSkgVGhlIFVNQUMgKFVwcGVyIE1BQykuCkBAIC0yNzUsNiArMzAyLDggQEAKICAqLwogaW50IGl3bV9sb2FkX2Z3KHN0cnVjdCBpd21fcHJpdiAqaXdtKQogeworCXVuc2lnbmVkIGxvbmcgaW5pdF9jYWxpYl9tYXAsIHBlcmlvZGljX2NhbGliX21hcDsKKwl1bnNpZ25lZCBsb25nIGV4cGVjdGVkX2NhbGliX21hcDsKIAlpbnQgcmV0OwogCiAJLyogV2UgZmlyc3Qgc3RhcnQgZG93bmxvYWRpbmcgdGhlIFVNQUMgKi8KQEAgLTMxNSwzMiArMzQ0LDIyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0jaWZkZWYgQ09ORklHX0lXTV9CMF9IV19TVVBQT1JUCi0JaWYgKGl3bS0+Y29uZi5od19iMCkgewotCQljbGVhcl9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsICZpd20tPmNvbmYuaW5pdF9jYWxpYl9tYXApOwotCQljbGVhcl9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsCi0JCQkgICZpd20tPmNvbmYucGVyaW9kaWNfY2FsaWJfbWFwKTsKLQl9Ci0jZW5kaWYKLQkvKiBSZWFkIFJYIElRIGNhbGlicmF0aW9uIHJlc3VsdCBmcm9tIEVFUFJPTSAqLwotCWlmICh0ZXN0X2JpdChQSFlfQ0FMSUJSQVRFX1JYX0lRX0NNRCwgJml3bS0+Y29uZi5pbml0X2NhbGliX21hcCkpIHsKLQkJaXdtX3N0b3JlX3J4aXFfY2FsaWJfcmVzdWx0KGl3bSk7Ci0JCXNldF9iaXQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQsICZpd20tPmNhbGliX2RvbmVfbWFwKTsKLQl9CisJaW5pdF9jYWxpYl9tYXAgPSBpd20tPmNvbmYuY2FsaWJfbWFwICYgSVdNX0NBTElCX01BUF9JTklUX01TSzsKKwlleHBlY3RlZF9jYWxpYl9tYXAgPSBpd20tPmNvbmYuZXhwZWN0ZWRfY2FsaWJfbWFwICYKKwkJSVdNX0NBTElCX01BUF9JTklUX01TSzsKKwlwZXJpb2RpY19jYWxpYl9tYXAgPSBJV01fQ0FMSUJfTUFQX1BFUl9MTUFDKGl3bS0+Y29uZi5jYWxpYl9tYXApOwogCi0JaXdtX3NlbmRfcHJpb190YWJsZShpd20pOwotCWl3bV9zZW5kX2luaXRfY2FsaWJfY2ZnKGl3bSwgaXdtLT5jb25mLmluaXRfY2FsaWJfbWFwKTsKLQotCXdoaWxlIChpd20tPmNhbGliX2RvbmVfbWFwICE9IGl3bS0+Y29uZi5pbml0X2NhbGliX21hcCkgewotCQlyZXQgPSBpd21fbm90aWZfaGFuZGxlKGl3bSwgQ0FMSUJSQVRJT05fUkVTX05PVElGSUNBVElPTiwKLQkJCQkgICAgICAgSVdNX1NSQ19MTUFDLCBXQUlUX05PVElGX1RJTUVPVVQpOwotCQlpZiAocmV0KSB7Ci0JCQlJV01fRVJSKGl3bSwgIldhaXQgZm9yIGNhbGlicmF0aW9uIHJlc3VsdCB0aW1lb3V0XG4iKTsKKwlyZXQgPSBpd21faW5pdF9jYWxpYihpd20sIGluaXRfY2FsaWJfbWFwLCBleHBlY3RlZF9jYWxpYl9tYXAsCisJCQkgICAgIENBTElCX0NGR19SWF9JUV9JRFgpOworCWlmIChyZXQgPCAwKSB7CisJCS8qIExldCdzIHRyeSB0aGUgb2xkIHdheSAqLworCQlyZXQgPSBpd21faW5pdF9jYWxpYihpd20sIGV4cGVjdGVkX2NhbGliX21hcCwKKwkJCQkgICAgIGV4cGVjdGVkX2NhbGliX21hcCwKKwkJCQkgICAgIFBIWV9DQUxJQlJBVEVfUlhfSVFfQ01EKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCUlXTV9FUlIoaXdtLCAiQ2FsaWJyYXRpb24gcmVzdWx0IHRpbWVvdXRcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJSVdNX0RCR19GVyhpd20sIERCRywgIkdvdCBjYWxpYnJhdGlvbiByZXN1bHQuIGNhbGliX2RvbmVfbWFwOiAiCi0JCQkgICAiMHglbHgsIHJlcXVlc3RlZCBjYWxpYnJhdGlvbnM6IDB4JWx4XG4iLAotCQkJICAgaXdtLT5jYWxpYl9kb25lX21hcCwgaXdtLT5jb25mLmluaXRfY2FsaWJfbWFwKTsKIAl9CiAKIAkvKiBIYW5kbGUgTE1BQyBDQUxJQlJBVElPTl9DT01QTEVURSBub3RpZmljYXRpb24gKi8KQEAgLTM3OCw3ICszOTcsNyBAQAogCiAJaXdtX3NlbmRfcHJpb190YWJsZShpd20pOwogCWl3bV9zZW5kX2NhbGliX3Jlc3VsdHMoaXdtKTsKLQlpd21fc2VuZF9wZXJpb2RpY19jYWxpYl9jZmcoaXdtLCBpd20tPmNvbmYucGVyaW9kaWNfY2FsaWJfbWFwKTsKKwlpd21fc2VuZF9wZXJpb2RpY19jYWxpYl9jZmcoaXdtLCBwZXJpb2RpY19jYWxpYl9tYXApOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYwppbmRleCBlZTEyN2ZlNC4uYzQzMDQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2hhbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9oYWwuYwpAQCAtMTA1LDkgKzEwNSw5IEBACiAjaW5jbHVkZSAidW1hYy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKLXN0YXRpYyB2b2lkIGl3bV9ub253aWZpX2NtZF9pbml0KHN0cnVjdCBpd21fcHJpdiAqaXdtLAotCQkJCSBzdHJ1Y3QgaXdtX25vbndpZmlfY21kICpjbWQsCi0JCQkJIHN0cnVjdCBpd21fdWRtYV9ub253aWZpX2NtZCAqdWRtYV9jbWQpCitzdGF0aWMgaW50IGl3bV9ub253aWZpX2NtZF9pbml0KHN0cnVjdCBpd21fcHJpdiAqaXdtLAorCQkJCXN0cnVjdCBpd21fbm9ud2lmaV9jbWQgKmNtZCwKKwkJCQlzdHJ1Y3QgaXdtX3VkbWFfbm9ud2lmaV9jbWQgKnVkbWFfY21kKQogewogCUlOSVRfTElTVF9IRUFEKCZjbWQtPnBlbmRpbmcpOwogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAljbWQtPnNlcV9udW0gPSBpd20tPm5vbndpZmlfc2VxX251bTsKIAl1ZG1hX2NtZC0+c2VxX251bSA9IGNwdV90b19sZTE2KGNtZC0+c2VxX251bSk7CiAKLQljbWQtPnNlcV9udW0gPSBpd20tPm5vbndpZmlfc2VxX251bSsrOworCWl3bS0+bm9ud2lmaV9zZXFfbnVtKys7CiAJaXdtLT5ub253aWZpX3NlcV9udW0gJT0gVU1BQ19OT05XSUZJX1NFUV9OVU1fTUFYOwogCiAJaWYgKHVkbWFfY21kLT5yZXNwKQpAQCAtMTMwLDYgKzEzMCw4IEBACiAJY21kLT5idWYubGVuID0gMDsKIAogCW1lbWNweSgmY21kLT51ZG1hX2NtZCwgdWRtYV9jbWQsIHNpemVvZigqdWRtYV9jbWQpKTsKKworCXJldHVybiBjbWQtPnNlcV9udW07CiB9CiAKIHUxNiBpd21fYWxsb2Nfd2lmaV9jbWRfc2VxKHN0cnVjdCBpd21fcHJpdiAqaXdtKQpAQCAtMzY5LDcgKzM3MSw3IEBACiAJCQkgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgaXdtX25vbndpZmlfY21kICpjbWQ7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBzZXFfbnVtOwogCiAJY21kID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bV9ub253aWZpX2NtZCksIEdGUF9LRVJORUwpOwogCWlmICghY21kKSB7CkBAIC0zNzcsNyArMzc5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaXdtX25vbndpZmlfY21kX2luaXQoaXdtLCBjbWQsIHVkbWFfY21kKTsKKwlzZXFfbnVtID0gaXdtX25vbndpZmlfY21kX2luaXQoaXdtLCBjbWQsIHVkbWFfY21kKTsKIAogCWlmIChjbWQtPnVkbWFfY21kLm9wY29kZSA9PSBVTUFDX0hESV9PVVRfT1BDT0RFX1dSSVRFIHx8CiAJICAgIGNtZC0+dWRtYV9jbWQub3Bjb2RlID09IFVNQUNfSERJX09VVF9PUENPREVfV1JJVEVfUEVSU0lTVEVOVCkgewpAQCAtMzkzLDcgKzM5NSw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gY21kLT5zZXFfbnVtOworCXJldHVybiBzZXFfbnVtOwogfQogCiBzdGF0aWMgdm9pZCBpd21fYnVpbGRfbG1hY19oZHIoc3RydWN0IGl3bV9wcml2ICppd20sIHN0cnVjdCBpd21fbG1hY19oZHIgKmhkciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaAppbmRleCA3N2MzMzlmLi4xYjAyYTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oCkBAIC01Miw4ICs1Miw2IEBACiAjZGVmaW5lIElXTV9DT1BZUklHSFQgIkNvcHlyaWdodChjKSAyMDA5IEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBJV01fQVVUSE9SICI8aWx3QGxpbnV4LmludGVsLmNvbT4iCiAKLSNkZWZpbmUgQ09ORklHX0lXTV9CMF9IV19TVVBQT1JUCTEKLQogI2RlZmluZSBJV01fU1JDX0xNQUMJVU1BQ19IRElfSU5fU09VUkNFX0ZIUlgKICNkZWZpbmUgSVdNX1NSQ19VRE1BCVVNQUNfSERJX0lOX1NPVVJDRV9VRE1BCiAjZGVmaW5lIElXTV9TUkNfVU1BQwlVTUFDX0hESV9JTl9TT1VSQ0VfRlcKQEAgLTY1LDggKzYzLDggQEAKIAogc3RydWN0IGl3bV9jb25mIHsKIAl1MzIgc2Rpb19pb3JfdGltZW91dDsKLQl1bnNpZ25lZCBsb25nIGluaXRfY2FsaWJfbWFwOwotCXVuc2lnbmVkIGxvbmcgcGVyaW9kaWNfY2FsaWJfbWFwOworCXVuc2lnbmVkIGxvbmcgY2FsaWJfbWFwOworCXVuc2lnbmVkIGxvbmcgZXhwZWN0ZWRfY2FsaWJfbWFwOwogCWJvb2wgcmVzZXRfb25fZmF0YWxfZXJyOwogCWJvb2wgYXV0b19jb25uZWN0OwogCWJvb2wgd2ltYXhfbm90X3ByZXNlbnQ7CkBAIC04Nyw5ICs4NSw2IEBACiAJdTggaWJzc19jaGFubmVsOwogCiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwotI2lmZGVmIENPTkZJR19JV01fQjBfSFdfU1VQUE9SVAotCWJvb2wgaHdfYjA7Ci0jZW5kaWYKIH07CiAKIGVudW0gewpAQCAtMTYyLDEzICsxNTcsMTEgQEAKIAogc3RydWN0IGl3bV9rZXkgewogCXN0cnVjdCBpd21fdW1hY19rZXlfaGRyIGhkcjsKLQl1OCBpbl91c2U7Ci0JdTggYWxnOwotCXUzMiBmbGFnczsKLQl1OCB0eF9zZXFbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Ci0JdTggcnhfc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwotCXU4IGtleV9sZW47Ci0JdTgga2V5WzMyXTsKKwl1MzIgY2lwaGVyOworCXU4IGtleVtXTEFOX01BWF9LRVlfTEVOXTsKKwl1OCBzZXFbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJaW50IGtleV9sZW47CisJaW50IHNlcV9sZW47CiB9OwogCiAjZGVmaW5lIElXTV9SWF9JRF9IQVNIICAweGZmCkBAIC0xODMsMTIgKzE3Niw5IEBACiAjZGVmaW5lIElXTV9TVEFUVVNfUkVBRFkJCTAKICNkZWZpbmUgSVdNX1NUQVRVU19TQ0FOTklORwkJMQogI2RlZmluZSBJV01fU1RBVFVTX1NDQU5fQUJPUlRJTkcJMgotI2RlZmluZSBJV01fU1RBVFVTX0FTU09DSUFUSU5HCQkzCisjZGVmaW5lIElXTV9TVEFUVVNfU01FX0NPTk5FQ1RJTkcJMwogI2RlZmluZSBJV01fU1RBVFVTX0FTU09DSUFURUQJCTQKLQotI2RlZmluZSBJV01fUkFESU9fUkZLSUxMX09GRgkJMAotI2RlZmluZSBJV01fUkFESU9fUkZLSUxMX0hXCQkxCi0jZGVmaW5lIElXTV9SQURJT19SRktJTExfU1cJCTIKKyNkZWZpbmUgSVdNX1NUQVRVU19SRVNFVFRJTkcJCTUKIAogc3RydWN0IGl3bV90eF9xdWV1ZSB7CiAJaW50IGlkOwpAQCAtMjIzLDcgKzIxMyw2IEBACiAJc3RydWN0IGl3bV9jb25mIGNvbmY7CiAKIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIHJhZGlvOwogCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX25vdGlmOwogCXdhaXRfcXVldWVfaGVhZF90IG5vdGlmX3F1ZXVlOwpAQCAtMjQyLDYgKzIzMSw3IEBACiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXU4IGNoYW5uZWw7CiAJdTE2IHJhdGU7CisJdTMyIHR4cG93ZXI7CiAKIAlzdHJ1Y3QgaXdtX3N0YV9pbmZvIHN0YV90YWJsZVtJV01fU1RBX1RBQkxFX05VTV07CiAJc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKQEAgLTI3NiwxMiArMjY2LDE2IEBACiAJc3RydWN0IGl3bV90eF9xdWV1ZSB0eHFbSVdNX1RYX1FVRVVFU107CiAKIAlzdHJ1Y3QgaXdtX2tleSBrZXlzW0lXTV9OVU1fS0VZU107Ci0Jc3RydWN0IGl3bV9rZXkgKmRlZmF1bHRfa2V5OworCXM4IGRlZmF1bHRfa2V5OworCisJREVDTEFSRV9CSVRNQVAod2lmaV9udGZ5LCBXSUZJX0lGX05URllfTUFYKTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3aWZpX250ZnlfcXVldWU7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBtbG1lX3F1ZXVlOwogCiAJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfcmVxdWVzdDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRpc2Nvbm5lY3Q7CiAKIAlzdHJ1Y3QgaXdtX2RlYnVnZnMgZGJnOwogCkBAIC0yODksNyArMjgzLDEzIEBACiAJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2c7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcmtlcjsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0Jc3RydWN0IHJma2lsbCAqcmZraWxsOworCisJdTggKnJlcV9pZTsKKwlpbnQgcmVxX2llX2xlbjsKKwl1OCAqcmVzcF9pZTsKKwlpbnQgcmVzcF9pZV9sZW47CisKKwlzdHJ1Y3QgaXdtX2Z3X2Vycm9yX2hkciAqbGFzdF9md19lcnI7CiAKIAljaGFyIHByaXZhdGVbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTkVUREVWX0FMSUdOKSkpOwogfTsKQEAgLTMxMSw4ICszMTEsNiBAQAogI2RlZmluZSBza2JfdG9fcnhfaW5mbyhzKSAoKHN0cnVjdCBpd21fcnhfaW5mbyAqKShzLT5jYikpCiAjZGVmaW5lIHNrYl90b190eF9pbmZvKHMpICgoc3RydWN0IGl3bV90eF9pbmZvICopcy0+Y2IpCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaXdtX2l3X2hhbmRsZXJfZGVmOwotCiB2b2lkICppd21faWZfYWxsb2MoaW50IHNpemVvZl9idXMsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IGl3bV9pZl9vcHMgKmlmX29wcyk7CiB2b2lkIGl3bV9pZl9mcmVlKHN0cnVjdCBpd21fcHJpdiAqaXdtKTsKQEAgLTMyMiw2ICszMjAsNyBAQAogaW50IGl3bV9wcml2X2luaXQoc3RydWN0IGl3bV9wcml2ICppd20pOwogdm9pZCBpd21fcHJpdl9kZWluaXQoc3RydWN0IGl3bV9wcml2ICppd20pOwogdm9pZCBpd21fcmVzZXQoc3RydWN0IGl3bV9wcml2ICppd20pOwordm9pZCBpd21fcmVzZXR0aW5nKHN0cnVjdCBpd21fcHJpdiAqaXdtKTsKIHZvaWQgaXdtX3R4X2NyZWRpdF9pbml0X3Bvb2xzKHN0cnVjdCBpd21fcHJpdiAqaXdtLAogCQkJICAgICAgc3RydWN0IGl3bV91bWFjX25vdGlmX2FsaXZlICphbGl2ZSk7CiBpbnQgaXdtX3R4X2NyZWRpdF9hbGxvYyhzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgaW50IGlkLCBpbnQgbmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2xtYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9sbWFjLmgKaW5kZXggZGIyZTVlZS4uNmMxYTE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2xtYWMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbG1hYy5oCkBAIC0zOTYsNiArMzk2LDI1IEBACiAJQ0FMSUJSQVRJT05fQ01EX05VTSwKIH07CiAKK2VudW0geworCUNBTElCX0NGR19SWF9CQl9JRFggICAgICAgPSAwLAorCUNBTElCX0NGR19EQ19JRFggICAgICAgICAgPSAxLAorCUNBTElCX0NGR19MT19JRFggICAgICAgICAgPSAyLAorCUNBTElCX0NGR19UWF9JUV9JRFggICAgICAgPSAzLAorCUNBTElCX0NGR19SWF9JUV9JRFggICAgICAgPSA0LAorCUNBTElCX0NGR19OT0lTRV9JRFggICAgICAgPSA1LAorCUNBTElCX0NGR19DUllTVEFMX0lEWCAgICAgPSA2LAorCUNBTElCX0NGR19URU1QRVJBVFVSRV9JRFggPSA3LAorCUNBTElCX0NGR19QQVBEX0lEWCAgICAgICAgPSA4LAorCUNBTElCX0NGR19MQVNUX0lEWCAgICAgICAgPSBDQUxJQl9DRkdfUEFQRF9JRFgsCisJQ0FMSUJfQ0ZHX01PRFVMRV9OVU0sCit9OworCisjZGVmaW5lIElXTV9DQUxJQl9NQVBfSU5JVF9NU0sJCTB4RkZGRgorI2RlZmluZSBJV01fQ0FMSUJfTUFQX1BFUl9MTUFDKG0pCSgobSAmIDB4RkYwMDAwKSA+PiAxNikKKyNkZWZpbmUgSVdNX0NBTElCX01BUF9QRVJfVU1BQyhtKQkoKG0gJiAweEZGMDAwMDAwKSA+PiAyNCkKKyNkZWZpbmUgSVdNX0NBTElCX09QQ09ERV9UT19JTkRFWChvcCkgICAob3AgLSBQSFlfQ0FMSUJSQVRFX09QQ09ERVNfTlVNKQorCiBzdHJ1Y3QgaXdtX2xtYWNfY2FsaWJfaGRyIHsKIAl1OCBvcGNvZGU7CiAJdTggZmlyc3RfZ3JwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMKaW5kZXggOGJlMjA2ZC4uZDY2OGU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jCkBAIC01MywxMSArNTMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaXdtX2NvbmYgZGVmX2l3bV9jb25mID0gewogCiAJLnNkaW9faW9yX3RpbWVvdXQJPSA1MDAwLAotCS5pbml0X2NhbGliX21hcAkJPSBCSVQoUEhZX0NBTElCUkFURV9EQ19DTUQpCXwKLQkJCQkgIEJJVChQSFlfQ0FMSUJSQVRFX0xPX0NNRCkJfAotCQkJCSAgQklUKFBIWV9DQUxJQlJBVEVfVFhfSVFfQ01EKQl8Ci0JCQkJICBCSVQoUEhZX0NBTElCUkFURV9SWF9JUV9DTUQpLAotCS5wZXJpb2RpY19jYWxpYl9tYXAJPSBCSVQoUEhZX0NBTElCUkFURV9EQ19DTUQpCXwKKwkuY2FsaWJfbWFwCQk9IEJJVChDQUxJQl9DRkdfRENfSURYKQl8CisJCQkJICBCSVQoQ0FMSUJfQ0ZHX0xPX0lEWCkJfAorCQkJCSAgQklUKENBTElCX0NGR19UWF9JUV9JRFgpCXwKKwkJCQkgIEJJVChDQUxJQl9DRkdfUlhfSVFfSURYKQl8CisJCQkJICBCSVQoU0hJTE9IX1BIWV9DQUxJQlJBVEVfQkFTRV9CQU5EX0NNRCksCisJLmV4cGVjdGVkX2NhbGliX21hcAk9IEJJVChQSFlfQ0FMSUJSQVRFX0RDX0NNRCkJfAogCQkJCSAgQklUKFBIWV9DQUxJQlJBVEVfTE9fQ01EKQl8CiAJCQkJICBCSVQoUEhZX0NBTElCUkFURV9UWF9JUV9DTUQpCXwKIAkJCQkgIEJJVChQSFlfQ0FMSUJSQVRFX1JYX0lRX0NNRCkJfApAQCAtMTEyLDggKzExMywyOCBAQAogCWl3bV9zZW5kX3VtYWNfc3RhdHNfcmVxKGl3bSwgMCk7CiB9CiAKLWludCBfX2l3bV91cChzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7Ci1pbnQgX19pd21fZG93bihzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CitzdGF0aWMgdm9pZCBpd21fZGlzY29ubmVjdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdtX3ByaXYsIGRpc2Nvbm5lY3Qud29yayk7CisKKwlpZiAoaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKQorCQlpd21faW52YWxpZGF0ZV9tbG1lX3Byb2ZpbGUoaXdtKTsKKworCWNsZWFyX2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cyk7CisJaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlID0gMDsKKwltZW1zZXQoaXdtLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCWl3bS0+Y2hhbm5lbCA9IDA7CisKKwlpd21fbGlua19vZmYoaXdtKTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaXdtLT5tbG1lX3F1ZXVlKTsKKworCWNmZzgwMjExX2Rpc2Nvbm5lY3RlZChpd21fdG9fbmRldihpd20pLCAwLCBOVUxMLCAwLCBHRlBfS0VSTkVMKTsKK30KKworc3RhdGljIGludCBfX2l3bV91cChzdHJ1Y3QgaXdtX3ByaXYgKml3bSk7CitzdGF0aWMgaW50IF9faXdtX2Rvd24oc3RydWN0IGl3bV9wcml2ICppd20pOwogCiBzdGF0aWMgdm9pZCBpd21fcmVzZXRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTE2Niw3ICsxODcsOCBAQAogCQltZW1jcHkoaXdtLT51bWFjX3Byb2ZpbGUsIHByb2ZpbGUsIHNpemVvZigqcHJvZmlsZSkpOwogCQlpd21fc2VuZF9tbG1lX3Byb2ZpbGUoaXdtKTsKIAkJa2ZyZWUocHJvZmlsZSk7Ci0JfQorCX0gZWxzZQorCQljbGVhcl9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cyk7CiAKICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZpd20tPm11dGV4KTsKQEAgLTE3OSw3ICsyMDEsNyBAQAogCUlXTV9XQVJOKGl3bSwgIldhdGNoZG9nIGV4cGlyZWQ6IFVNQUMgc3RhbGxzIVxuIik7CiAKIAlpZiAobW9kcGFyYW1fcmVzZXQpCi0JCXNjaGVkdWxlX3dvcmsoJml3bS0+cmVzZXRfd29ya2VyKTsKKwkJaXdtX3Jlc2V0dGluZyhpd20pOwogfQogCiBpbnQgaXdtX3ByaXZfaW5pdChzdHJ1Y3QgaXdtX3ByaXYgKml3bSkKQEAgLTE5MSw2ICsyMTMsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZpd20tPnBlbmRpbmdfbm90aWYpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJml3bS0+bm90aWZfcXVldWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJml3bS0+bm9ud2lmaV9xdWV1ZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaXdtLT53aWZpX250ZnlfcXVldWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJml3bS0+bWxtZV9xdWV1ZSk7CiAJbWVtY3B5KCZpd20tPmNvbmYsICZkZWZfaXdtX2NvbmYsIHNpemVvZihzdHJ1Y3QgaXdtX2NvbmYpKTsKIAlzcGluX2xvY2tfaW5pdCgmaXdtLT50eF9jcmVkaXQubG9jayk7CkBAIC0yMDEsNiArMjI0LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmaXdtLT5jbWRfbG9jayk7CiAJaXdtLT5zY2FuX2lkID0gMTsKIAlJTklUX0RFTEFZRURfV09SSygmaXdtLT5zdGF0c19yZXF1ZXN0LCBpd21fc3RhdGlzdGljc19yZXF1ZXN0KTsKKwlJTklUX0RFTEFZRURfV09SSygmaXdtLT5kaXNjb25uZWN0LCBpd21fZGlzY29ubmVjdF93b3JrKTsKIAlJTklUX1dPUksoJml3bS0+cmVzZXRfd29ya2VyLCBpd21fcmVzZXRfd29ya2VyKTsKIAlJTklUX0xJU1RfSEVBRCgmaXdtLT5ic3NfbGlzdCk7CiAKQEAgLTIyOSwxMyArMjUzLDE4IEBACiAJZm9yIChpID0gMDsgaSA8IElXTV9OVU1fS0VZUzsgaSsrKQogCQltZW1zZXQoJml3bS0+a2V5c1tpXSwgMCwgc2l6ZW9mKHN0cnVjdCBpd21fa2V5KSk7CiAKLQlpd20tPmRlZmF1bHRfa2V5ID0gTlVMTDsKKwlpd20tPmRlZmF1bHRfa2V5ID0gLTE7CiAKIAlpbml0X3RpbWVyKCZpd20tPndhdGNoZG9nKTsKIAlpd20tPndhdGNoZG9nLmZ1bmN0aW9uID0gaXdtX3dhdGNoZG9nOwogCWl3bS0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWl3bTsKIAltdXRleF9pbml0KCZpd20tPm11dGV4KTsKIAorCWl3bS0+bGFzdF9md19lcnIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdtX2Z3X2Vycm9yX2hkciksCisJCQkJICAgR0ZQX0tFUk5FTCk7CisJaWYgKGl3bS0+bGFzdF9md19lcnIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ3LDYgKzI3Niw3IEBACiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGl3bS0+dHhxW2ldLndxKTsKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKGl3bS0+cnhfd3EpOworCWtmcmVlKGl3bS0+bGFzdF9md19lcnIpOwogfQogCiAvKgpAQCAtMjYxLDcgKzI5MSwxMSBAQAogCWlmICh0ZXN0X2JpdChJV01fU1RBVFVTX1JFQURZLCAmaXdtLT5zdGF0dXMpKQogCQlpd21fdGFyZ2V0X3Jlc2V0KGl3bSk7CiAKLQlpd20tPnN0YXR1cyA9IDA7CisJaWYgKHRlc3RfYml0KElXTV9TVEFUVVNfUkVTRVRUSU5HLCAmaXdtLT5zdGF0dXMpKSB7CisJCWl3bS0+c3RhdHVzID0gMDsKKwkJc2V0X2JpdChJV01fU1RBVFVTX1JFU0VUVElORywgJml3bS0+c3RhdHVzKTsKKwl9IGVsc2UKKwkJaXdtLT5zdGF0dXMgPSAwOwogCWl3bS0+c2Nhbl9pZCA9IDE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm90aWYsIG5leHQsICZpd20tPnBlbmRpbmdfbm90aWYsIHBlbmRpbmcpIHsKQEAgLTI3Nyw2ICszMTEsMTMgQEAKIAlpd21fbGlua19vZmYoaXdtKTsKIH0KIAordm9pZCBpd21fcmVzZXR0aW5nKHN0cnVjdCBpd21fcHJpdiAqaXdtKQoreworCXNldF9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cyk7CisKKwlzY2hlZHVsZV93b3JrKCZpd20tPnJlc2V0X3dvcmtlcik7Cit9CisKIC8qCiAgKiBOb3RpZmljYXRpb24gY29kZToKICAqCkBAIC01MDAsNiArNTQxLDEzIEBACiAJbWVtc2V0KHdzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKSk7CiAJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9JTlZBTElEOwogCisJa2ZyZWUoaXdtLT5yZXFfaWUpOworCWl3bS0+cmVxX2llID0gTlVMTDsKKwlpd20tPnJlcV9pZV9sZW4gPSAwOworCWtmcmVlKGl3bS0+cmVzcF9pZSk7CisJaXdtLT5yZXNwX2llID0gTlVMTDsKKwlpd20tPnJlc3BfaWVfbGVuID0gMDsKKwogCWRlbF90aW1lcl9zeW5jKCZpd20tPndhdGNoZG9nKTsKIH0KIApAQCAtNTE4LDEzICs1NjYsNiBAQAogewogCWludCByZXQ7CiAKLSNpZmRlZiBDT05GSUdfSVdNX0IwX0hXX1NVUFBPUlQKLQlpZiAoaXdtLT5jb25mLmh3X2IwKSB7Ci0JCUlXTV9JTkZPKGl3bSwgIldvcmthcm91bmQgRUVQUk9NIGNoYW5uZWxzIGZvciBCMCBoYXJkd2FyZVxuIik7Ci0JCXJldHVybiAwOwotCX0KLSNlbmRpZgotCiAJcmV0ID0gaXdtX3NlbmRfdW1hY19jaGFubmVsX2xpc3QoaXdtKTsKIAlpZiAocmV0KSB7CiAJCUlXTV9FUlIoaXdtLCAiU2VuZCBjaGFubmVsIGxpc3QgZmFpbGVkXG4iKTsKQEAgLTU0MSw3ICs1ODIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pd21fdXAoc3RydWN0IGl3bV9wcml2ICppd20pCitzdGF0aWMgaW50IF9faXdtX3VwKHN0cnVjdCBpd21fcHJpdiAqaXdtKQogewogCWludCByZXQ7CiAJc3RydWN0IGl3bV9ub3RpZiAqbm90aWZfcmVib290LCAqbm90aWZfYWNrID0gTlVMTDsKQEAgLTY0MiwxOSArNjgzLDEwIEBACiAJCX0KIAl9CiAKLQlpd20tPnVtYWNfcHJvZmlsZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpd21fdW1hY19wcm9maWxlKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpd20tPnVtYWNfcHJvZmlsZSkgewotCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IGFsbG9jIG1lbW9yeSBmb3IgcHJvZmlsZVxuIik7Ci0JCWdvdG8gZXJyX2Z3OwotCX0KLQotCWl3bV9pbml0X2RlZmF1bHRfcHJvZmlsZShpd20sIGl3bS0+dW1hY19wcm9maWxlKTsKLQogCXJldCA9IGl3bV9jaGFubmVsc19pbml0KGl3bSk7CiAJaWYgKHJldCA8IDApIHsKIAkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBpbml0IGNoYW5uZWxzXG4iKTsKLQkJZ290byBlcnJfcHJvZmlsZTsKKwkJZ290byBlcnJfZnc7CiAJfQogCiAJLyogU2V0IHRoZSBSRUFEWSBiaXQgdG8gaW5kaWNhdGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgdXAgc3VjY2Vzc2Z1bGx5ICovCkBAIC02NjIsMTAgKzY5NCw2IEBACiAKIAlyZXR1cm4gMDsKIAotIGVycl9wcm9maWxlOgotCWtmcmVlKGl3bS0+dW1hY19wcm9maWxlKTsKLQlpd20tPnVtYWNfcHJvZmlsZSA9IE5VTEw7Ci0KICBlcnJfZnc6CiAJaXdtX2VlcHJvbV9leGl0KGl3bSk7CiAKQEAgLTY4OCw3ICs3MTYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2l3bV9kb3duKHN0cnVjdCBpd21fcHJpdiAqaXdtKQorc3RhdGljIGludCBfX2l3bV9kb3duKHN0cnVjdCBpd21fcHJpdiAqaXdtKQogewogCWludCByZXQ7CiAKQEAgLTcwNCwxMSArNzMyLDEwIEBACiAJY2xlYXJfYml0KElXTV9TVEFUVVNfUkVBRFksICZpd20tPnN0YXR1cyk7CiAKIAlpd21fZWVwcm9tX2V4aXQoaXdtKTsKLQlrZnJlZShpd20tPnVtYWNfcHJvZmlsZSk7Ci0JaXdtLT51bWFjX3Byb2ZpbGUgPSBOVUxMOwogCWl3bV9ic3NfbGlzdF9jbGVhbihpd20pOwotCi0JaXdtLT5kZWZhdWx0X2tleSA9IE5VTEw7CisJaXdtX2luaXRfZGVmYXVsdF9wcm9maWxlKGl3bSwgaXdtLT51bWFjX3Byb2ZpbGUpOworCWl3bS0+dW1hY19wcm9maWxlX2FjdGl2ZSA9IGZhbHNlOworCWl3bS0+ZGVmYXVsdF9rZXkgPSAtMTsKIAlpd20tPmNvcmVfZW5hYmxlZCA9IDA7CiAKIAlyZXQgPSBpd21fYnVzX2Rpc2FibGUoaXdtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9uZXRkZXYuYwppbmRleCBiZjI5NGU0Li4zNWVjMDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL25ldGRldi5jCkBAIC00OCwyOSArNDgsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2luY2x1ZGUgIml3bS5oIgorI2luY2x1ZGUgImNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiY2ZnODAyMTEuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCiBzdGF0aWMgaW50IGl3bV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20obmRldik7Ci0JaW50IHJldCA9IDA7CiAKLQlpZiAoIXRlc3RfYml0KElXTV9SQURJT19SRktJTExfU1csICZpd20tPnJhZGlvKSkKLQkJcmV0ID0gaXdtX3VwKGl3bSk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBpd21fdXAoaXdtKTsKIH0KIAogc3RhdGljIGludCBpd21fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKG5kZXYpOwotCWludCByZXQgPSAwOwogCi0JaWYgKCF0ZXN0X2JpdChJV01fUkFESU9fUkZLSUxMX1NXLCAmaXdtLT5yYWRpbykpCi0JCXJldCA9IGl3bV9kb3duKGl3bSk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBpd21fZG93bihpd20pOwogfQogCiAvKgpAQCAtMTI4LDEzICsxMjEsMjQgQEAKIAl9CiAKIAluZGV2LT5uZXRkZXZfb3BzID0gJml3bV9uZXRkZXZfb3BzOwotCW5kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJml3bV9pd19oYW5kbGVyX2RlZjsKIAluZGV2LT5pZWVlODAyMTFfcHRyID0gd2RldjsKIAlTRVRfTkVUREVWX0RFVihuZGV2LCB3aXBoeV9kZXYod2Rldi0+d2lwaHkpKTsKIAl3ZGV2LT5uZXRkZXYgPSBuZGV2OwogCisJaXdtLT51bWFjX3Byb2ZpbGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfcHJvZmlsZSksCisJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghaXdtLT51bWFjX3Byb2ZpbGUpIHsKKwkJZGV2X2VycihkZXYsICJDb3VsZG4ndCBhbGxvYyBtZW1vcnkgZm9yIHByb2ZpbGVcbiIpOworCQlnb3RvIG91dF9wcm9maWxlOworCX0KKworCWl3bV9pbml0X2RlZmF1bHRfcHJvZmlsZShpd20sIGl3bS0+dW1hY19wcm9maWxlKTsKKwogCXJldHVybiBpd207CiAKKyBvdXRfcHJvZmlsZToKKwlmcmVlX25ldGRldihuZGV2KTsKKwogIG91dF9wcml2OgogCWl3bV9wcml2X2RlaW5pdChpd20pOwogCkBAIC0xNTAsNiArMTU0LDggQEAKIAogCWZyZWVfbmV0ZGV2KGl3bV90b19uZGV2KGl3bSkpOwogCWl3bV9wcml2X2RlaW5pdChpd20pOworCWtmcmVlKGl3bS0+dW1hY19wcm9maWxlKTsKKwlpd20tPnVtYWNfcHJvZmlsZSA9IE5VTEw7CiAJaXdtX3dkZXZfZnJlZShpd20pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCmluZGV4IGQ3M2NmOTYuLjQwZGJjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAllcnJvciA9IChzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfZXJyb3IgKilidWY7CiAJZndfZXJyID0gJmVycm9yLT5lcnI7CiAKKwltZW1jcHkoaXdtLT5sYXN0X2Z3X2VyciwgZndfZXJyLCBzaXplb2Yoc3RydWN0IGl3bV9md19lcnJvcl9oZHIpKTsKIAogCUlXTV9FUlIoaXdtLCAiJWNNQUMgRlcgRVJST1I6XG4iLAogCSAobGUzMl90b19jcHUoZndfZXJyLT5jYXRlZ29yeSkgPT0gVU1BQ19TWVNfRVJSX0NBVF9MTUFDKSA/ICdMJyA6ICdVJyk7CkBAIC0xMTksNiArMTIwLDggQEAKIAlJV01fRVJSKGl3bSwgIlx0TE1BQyBzdGF0dXM6IDB4JXhcbiIsIGxlMzJfdG9fY3B1KGZ3X2Vyci0+bG1hY19zdGF0dXMpKTsKIAlJV01fRVJSKGl3bSwgIlx0U0RJTyBzdGF0dXM6IDB4JXhcbiIsIGxlMzJfdG9fY3B1KGZ3X2Vyci0+c2Rpb19zdGF0dXMpKTsKIAorCWl3bV9yZXNldHRpbmcoaXdtKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNDMsMTcgKzE0NiwxOCBAQAogCQkJCSB1bnNpZ25lZCBsb25nIGJ1Zl9zaXplLAogCQkJCSBzdHJ1Y3QgaXdtX3dpZmlfY21kICpjbWQpCiB7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGl3bV90b193aXBoeShpd20pOwogCXN0cnVjdCBpd21fdW1hY19ub3RpZl9pbml0X2NvbXBsZXRlICppbml0X2NvbXBsZXRlID0KIAkJCShzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfaW5pdF9jb21wbGV0ZSAqKShidWYpOwogCXUxNiBzdGF0dXMgPSBsZTE2X3RvX2NwdShpbml0X2NvbXBsZXRlLT5zdGF0dXMpOworCWJvb2wgYmxvY2tlZCA9IChzdGF0dXMgPT0gVU1BQ19OVEZZX0lOSVRfQ09NUExFVEVfU1RBVFVTX0VSUik7CiAKLQlpZiAoc3RhdHVzID09IFVNQUNfTlRGWV9JTklUX0NPTVBMRVRFX1NUQVRVU19FUlIpIHsKKwlpZiAoYmxvY2tlZCkKIAkJSVdNX0RCR19OVEYoaXdtLCBEQkcsICJIYXJkd2FyZSByZiBraWxsIGlzIG9uIChyYWRpbyBvZmYpXG4iKTsKLQkJc2V0X2JpdChJV01fUkFESU9fUkZLSUxMX0hXLCAmaXdtLT5yYWRpbyk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiSGFyZHdhcmUgcmYga2lsbCBpcyBvZmYgKHJhZGlvIG9uKVxuIik7Ci0JCWNsZWFyX2JpdChJV01fUkFESU9fUkZLSUxMX0hXLCAmaXdtLT5yYWRpbyk7Ci0JfQorCisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZSh3aXBoeSwgYmxvY2tlZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxOCwxNyArMjIyLDE3IEBACiAJCShidWYgKyBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyKSk7CiAJaGRyID0gKHN0cnVjdCBpd21fdW1hY193aWZpX2luX2hkciAqKWJ1ZjsKIAotCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiUkVQTFlfVFgsIGJ1ZiBzaXplOiAlbHVcbiIsIGJ1Zl9zaXplKTsKKwlJV01fREJHX1RYKGl3bSwgREJHLCAiUkVQTFlfVFgsIGJ1ZiBzaXplOiAlbHVcbiIsIGJ1Zl9zaXplKTsKIAotCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiU2VxbnVtOiAlZFxuIiwKLQkJICAgIGxlMTZfdG9fY3B1KGhkci0+c3dfaGRyLmNtZC5zZXFfbnVtKSk7Ci0JSVdNX0RCR19OVEYoaXdtLCBEQkcsICJcdEZyYW1lIGNudDogJWRcbiIsIHR4X3Jlc3AtPmZyYW1lX2NudCk7Ci0JSVdNX0RCR19OVEYoaXdtLCBEQkcsICJcdFJldHJ5IGNudDogJWRcbiIsCi0JCSAgICBsZTE2X3RvX2NwdSh0eF9yZXNwLT5yZXRyeV9jbnQpKTsKLQlJV01fREJHX05URihpd20sIERCRywgIlx0U2VxIGN0bDogJWRcbiIsIGxlMTZfdG9fY3B1KHR4X3Jlc3AtPnNlcV9jdGwpKTsKLQlJV01fREJHX05URihpd20sIERCRywgIlx0Qnl0ZSBjbnQ6ICVkXG4iLAotCQkgICAgbGUxNl90b19jcHUodHhfcmVzcC0+Ynl0ZV9jbnQpKTsKLQlJV01fREJHX05URihpd20sIERCRywgIlx0U3RhdHVzOiAweCV4XG4iLCBsZTMyX3RvX2NwdSh0eF9yZXNwLT5zdGF0dXMpKTsKKwlJV01fREJHX1RYKGl3bSwgREJHLCAiU2VxbnVtOiAlZFxuIiwKKwkJICAgbGUxNl90b19jcHUoaGRyLT5zd19oZHIuY21kLnNlcV9udW0pKTsKKwlJV01fREJHX1RYKGl3bSwgREJHLCAiXHRGcmFtZSBjbnQ6ICVkXG4iLCB0eF9yZXNwLT5mcmFtZV9jbnQpOworCUlXTV9EQkdfVFgoaXdtLCBEQkcsICJcdFJldHJ5IGNudDogJWRcbiIsCisJCSAgIGxlMTZfdG9fY3B1KHR4X3Jlc3AtPnJldHJ5X2NudCkpOworCUlXTV9EQkdfVFgoaXdtLCBEQkcsICJcdFNlcSBjdGw6ICVkXG4iLCBsZTE2X3RvX2NwdSh0eF9yZXNwLT5zZXFfY3RsKSk7CisJSVdNX0RCR19UWChpd20sIERCRywgIlx0Qnl0ZSBjbnQ6ICVkXG4iLAorCQkgICBsZTE2X3RvX2NwdSh0eF9yZXNwLT5ieXRlX2NudCkpOworCUlXTV9EQkdfVFgoaXdtLCBEQkcsICJcdFN0YXR1czogMHgleFxuIiwgbGUzMl90b19jcHUodHhfcmVzcC0+c3RhdHVzKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQxOCw4ICs0MjIsOCBAQAogCQkJaWYgKElTX0VSUih0aWNrZXRfbm9kZSkpCiAJCQkJcmV0dXJuIFBUUl9FUlIodGlja2V0X25vZGUpOwogCi0JCQlJV01fREJHX05URihpd20sIERCRywgIlRJQ0tFVCBSRUxFQVNFKCVkKVxuIiwKLQkJCQkgICAgdGlja2V0LT5pZCk7CisJCQlJV01fREJHX1JYKGl3bSwgREJHLCAiVElDS0VUIFJFTEVBU0UoJWQpXG4iLAorCQkJCSAgIHRpY2tldC0+aWQpOwogCQkJbGlzdF9hZGRfdGFpbCgmdGlja2V0X25vZGUtPm5vZGUsICZpd20tPnJ4X3RpY2tldHMpOwogCiAJCQkvKgpAQCAtNDU0LDE1ICs0NTgsMTUgQEAKIAl1MTYgaWQsIGJ1Zl9vZmZzZXQ7CiAJdTMyIHBhY2tldF9zaXplOwogCi0JSVdNX0RCR19OVEYoaXdtLCBEQkcsICJcbiIpOworCUlXTV9EQkdfUlgoaXdtLCBEQkcsICJcbiIpOwogCiAJd2lmaV9oZHIgPSAoc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyICopYnVmOwogCWlkID0gbGUxNl90b19jcHUod2lmaV9oZHItPnN3X2hkci5jbWQuc2VxX251bSk7CiAJYnVmX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pbl9oZHIpOwogCXBhY2tldF9zaXplID0gYnVmX3NpemUgLSBzaXplb2Yoc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyKTsKIAotCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiQ01EOjB4JXgsIHNlcW51bTogJWQsIHBhY2tldCBzaXplOiAlZFxuIiwKLQkJICAgIHdpZmlfaGRyLT5zd19oZHIuY21kLmNtZCwgaWQsIHBhY2tldF9zaXplKTsKKwlJV01fREJHX1JYKGl3bSwgREJHLCAiQ01EOjB4JXgsIHNlcW51bTogJWQsIHBhY2tldCBzaXplOiAlZFxuIiwKKwkJICAgd2lmaV9oZHItPnN3X2hkci5jbWQuY21kLCBpZCwgcGFja2V0X3NpemUpOwogCUlXTV9EQkdfUlgoaXdtLCBEQkcsICJQYWNrZXQgaWQ6ICVkXG4iLCBpZCk7CiAJSVdNX0hFWERVTVAoaXdtLCBEQkcsIFJYLCAiUEFDS0VUOiAiLCBidWYgKyBidWZfb2Zmc2V0LCBwYWNrZXRfc2l6ZSk7CiAKQEAgLTQ4Nyw4ICs0OTEsNiBAQAogCiAJc3RhcnQgPSAoc3RydWN0IGl3bV91bWFjX25vdGlmX2Fzc29jX3N0YXJ0ICopYnVmOwogCi0Jc2V0X2JpdChJV01fU1RBVFVTX0FTU09DSUFUSU5HLCAmaXdtLT5zdGF0dXMpOwotCiAJSVdNX0RCR19NTE1FKGl3bSwgSU5GTywgIkFzc29jaWF0aW9uIHdpdGggJXBNIFN0YXJ0ZWQsIHJlYXNvbjogJWRcbiIsCiAJCSAgICAgc3RhcnQtPmJzc2lkLCBsZTMyX3RvX2NwdShzdGFydC0+cm9hbV9yZWFzb24pKTsKIApAQCAtNTAzLDQzICs1MDUsODQgQEAKIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfYXNzb2NfY29tcGxldGUgKmNvbXBsZXRlID0KIAkJKHN0cnVjdCBpd21fdW1hY19ub3RpZl9hc3NvY19jb21wbGV0ZSAqKWJ1ZjsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAlJV01fREJHX01MTUUoaXdtLCBJTkZPLCAiQXNzb2NpYXRpb24gd2l0aCAlcE0gY29tcGxldGVkLCBzdGF0dXM6ICVkXG4iLAogCQkgICAgIGNvbXBsZXRlLT5ic3NpZCwgY29tcGxldGUtPnN0YXR1cyk7CiAKLQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0KLQljbGVhcl9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVElORywgJml3bS0+c3RhdHVzKTsKLQogCXN3aXRjaCAobGUzMl90b19jcHUoY29tcGxldGUtPnN0YXR1cykpIHsKIAljYXNlIFVNQUNfQVNTT0NfQ09NUExFVEVfU1VDQ0VTUzoKIAkJc2V0X2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cyk7CiAJCW1lbWNweShpd20tPmJzc2lkLCBjb21wbGV0ZS0+YnNzaWQsIEVUSF9BTEVOKTsKIAkJaXdtLT5jaGFubmVsID0gY29tcGxldGUtPmNoYW5uZWw7CiAKKwkJLyogSW50ZXJuYWwgcm9hbWluZyBzdGF0ZSwgYXZvaWQgbm90aWZ5aW5nIFNNRS4gKi8KKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKQorCQkgICAgJiYgaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0JTUykgeworCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXdtLT5kaXNjb25uZWN0KTsKKwkJCWNmZzgwMjExX3JvYW1lZChpd21fdG9fbmRldihpd20pLAorCQkJCQljb21wbGV0ZS0+YnNzaWQsCisJCQkJCWl3bS0+cmVxX2llLCBpd20tPnJlcV9pZV9sZW4sCisJCQkJCWl3bS0+cmVzcF9pZSwgaXdtLT5yZXNwX2llX2xlbiwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlicmVhazsKKwkJfQorCiAJCWl3bV9saW5rX29uKGl3bSk7CiAKLQkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBjb21wbGV0ZS0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJaWYgKGl3bS0+Y29uZi5tb2RlID09IFVNQUNfTU9ERV9JQlNTKQorCQkJZ290byBpYnNzOworCisJCWlmICghdGVzdF9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cykpCisJCQljZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChpd21fdG9fbmRldihpd20pLAorCQkJCQkJY29tcGxldGUtPmJzc2lkLAorCQkJCQkJaXdtLT5yZXFfaWUsIGl3bS0+cmVxX2llX2xlbiwKKwkJCQkJCWl3bS0+cmVzcF9pZSwgaXdtLT5yZXNwX2llX2xlbiwKKwkJCQkJCVdMQU5fU1RBVFVTX1NVQ0NFU1MsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJZWxzZQorCQkJY2ZnODAyMTFfcm9hbWVkKGl3bV90b19uZGV2KGl3bSksCisJCQkJCWNvbXBsZXRlLT5ic3NpZCwKKwkJCQkJaXdtLT5yZXFfaWUsIGl3bS0+cmVxX2llX2xlbiwKKwkJCQkJaXdtLT5yZXNwX2llLCBpd20tPnJlc3BfaWVfbGVuLAorCQkJCQlHRlBfS0VSTkVMKTsKIAkJYnJlYWs7CiAJY2FzZSBVTUFDX0FTU09DX0NPTVBMRVRFX0ZBSUxVUkU6CiAJCWNsZWFyX2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cyk7CiAJCW1lbXNldChpd20tPmJzc2lkLCAwLCBFVEhfQUxFTik7CiAJCWl3bS0+Y2hhbm5lbCA9IDA7CiAKKwkJLyogSW50ZXJuYWwgcm9hbWluZyBzdGF0ZSwgYXZvaWQgbm90aWZ5aW5nIFNNRS4gKi8KKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKQorCQkgICAgJiYgaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0JTUykgeworCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmaXdtLT5kaXNjb25uZWN0KTsKKwkJCWJyZWFrOworCQl9CisKIAkJaXdtX2xpbmtfb2ZmKGl3bSk7CisKKwkJaWYgKGl3bS0+Y29uZi5tb2RlID09IFVNQUNfTU9ERV9JQlNTKQorCQkJZ290byBpYnNzOworCisJCWlmICghdGVzdF9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cykpCisJCQljZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChpd21fdG9fbmRldihpd20pLAorCQkJCQkJY29tcGxldGUtPmJzc2lkLAorCQkJCQkJTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJCVdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJZWxzZQorCQkJY2ZnODAyMTFfZGlzY29ubmVjdGVkKGl3bV90b19uZGV2KGl3bSksIDAsIE5VTEwsIDAsCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKLQlpZiAoaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0lCU1MpIHsKLQkJY2ZnODAyMTFfaWJzc19qb2luZWQoaXdtX3RvX25kZXYoaXdtKSwgaXdtLT5ic3NpZCwgR0ZQX0tFUk5FTCk7Ci0JCXJldHVybiAwOwotCX0KKwljbGVhcl9iaXQoSVdNX1NUQVRVU19SRVNFVFRJTkcsICZpd20tPnN0YXR1cyk7CisJcmV0dXJuIDA7CiAKLQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoaXdtX3RvX25kZXYoaXdtKSwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Ci0KKyBpYnNzOgorCWNmZzgwMjExX2lic3Nfam9pbmVkKGl3bV90b19uZGV2KGl3bSksIGl3bS0+YnNzaWQsIEdGUF9LRVJORUwpOworCWNsZWFyX2JpdChJV01fU1RBVFVTX1JFU0VUVElORywgJml3bS0+c3RhdHVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTQ4LDEzICs1OTEsMjAgQEAKIAkJCQkgICAgICAgc3RydWN0IGl3bV93aWZpX2NtZCAqY21kKQogewogCXN0cnVjdCBpd21fdW1hY19ub3RpZl9wcm9maWxlX2ludmFsaWRhdGUgKmludmFsaWQ7CisJdTMyIHJlYXNvbjsKIAogCWludmFsaWQgPSAoc3RydWN0IGl3bV91bWFjX25vdGlmX3Byb2ZpbGVfaW52YWxpZGF0ZSAqKWJ1ZjsKKwlyZWFzb24gPSBsZTMyX3RvX2NwdShpbnZhbGlkLT5yZWFzb24pOwogCi0JSVdNX0RCR19NTE1FKGl3bSwgSU5GTywgIlByb2ZpbGUgSW52YWxpZGF0ZWQuIFJlYXNvbjogJWRcbiIsCi0JCSAgICAgbGUzMl90b19jcHUoaW52YWxpZC0+cmVhc29uKSk7CisJSVdNX0RCR19NTE1FKGl3bSwgSU5GTywgIlByb2ZpbGUgSW52YWxpZGF0ZWQuIFJlYXNvbjogJWRcbiIsIHJlYXNvbik7CiAKLQljbGVhcl9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVElORywgJml3bS0+c3RhdHVzKTsKKwlpZiAocmVhc29uICE9IFVNQUNfUFJPRklMRV9JTlZBTElEX1JFUVVFU1QgJiYKKwkgICAgdGVzdF9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKSkKKwkJY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoaXdtX3RvX25kZXYoaXdtKSwgTlVMTCwgTlVMTCwgMCwgTlVMTCwKKwkJCQkJMCwgV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisKKwljbGVhcl9iaXQoSVdNX1NUQVRVU19TTUVfQ09OTkVDVElORywgJml3bS0+c3RhdHVzKTsKIAljbGVhcl9iaXQoSVdNX1NUQVRVU19BU1NPQ0lBVEVELCAmaXdtLT5zdGF0dXMpOwogCiAJaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlID0gMDsKQEAgLTU2OCw2ICs2MTgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBJV01fRElTQ09OTkVDVF9JTlRFUlZBTAkoNSAqIEhaKQorCitzdGF0aWMgaW50IGl3bV9tbG1lX2Nvbm5lY3Rpb25fdGVybWluYXRlZChzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTggKmJ1ZiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGJ1Zl9zaXplLAorCQkJCQkgIHN0cnVjdCBpd21fd2lmaV9jbWQgKmNtZCkKK3sKKwlJV01fREJHX01MTUUoaXdtLCBEQkcsICJDb25uZWN0aW9uIHRlcm1pbmF0ZWRcbiIpOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpd20tPmRpc2Nvbm5lY3QsIElXTV9ESVNDT05ORUNUX0lOVEVSVkFMKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGl3bV9tbG1lX3NjYW5fY29tcGxldGUoc3RydWN0IGl3bV9wcml2ICppd20sIHU4ICpidWYsCiAJCQkJICB1bnNpZ25lZCBsb25nIGJ1Zl9zaXplLAogCQkJCSAgc3RydWN0IGl3bV93aWZpX2NtZCAqY21kKQpAQCAtNzY5LDM3ICs4MzIsNDcgQEAKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYnVmX3NpemUsIHN0cnVjdCBpd21fd2lmaV9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfbWd0X2ZyYW1lICptZ3RfZnJhbWUgPQotCShzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfbWd0X2ZyYW1lICopYnVmOworCQkJKHN0cnVjdCBpd21fdW1hY19ub3RpZl9tZ3RfZnJhbWUgKilidWY7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ3QgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopbWd0X2ZyYW1lLT5mcmFtZTsKIAl1OCAqaWU7Ci0JdW5zaWduZWQgaW50IGV2ZW50OwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAogCUlXTV9IRVhEVU1QKGl3bSwgREJHLCBNTE1FLCAiTUdUOiAiLCBtZ3RfZnJhbWUtPmZyYW1lLAogCQkgICAgbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pKTsKIAogCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJaWUgPSBtZ3QtPnUuYXNzb2NfcmVxLnZhcmlhYmxlOzsKLQkJZXZlbnQgPSBJV0VWQVNTT0NSRVFJRTsKKwkJaXdtLT5yZXFfaWVfbGVuID0KKwkJCQlsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikgLSAoaWUgLSAodTggKiltZ3QpOworCQlrZnJlZShpd20tPnJlcV9pZSk7CisJCWl3bS0+cmVxX2llID0ga21lbWR1cChtZ3QtPnUuYXNzb2NfcmVxLnZhcmlhYmxlLAorCQkJCSAgICAgIGl3bS0+cmVxX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEobWd0LT5mcmFtZV9jb250cm9sKSkgewogCQlpZSA9IG1ndC0+dS5yZWFzc29jX3JlcS52YXJpYWJsZTs7Ci0JCWV2ZW50ID0gSVdFVkFTU09DUkVRSUU7CisJCWl3bS0+cmVxX2llX2xlbiA9CisJCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJa2ZyZWUoaXdtLT5yZXFfaWUpOworCQlpd20tPnJlcV9pZSA9IGttZW1kdXAobWd0LT51LnJlYXNzb2NfcmVxLnZhcmlhYmxlLAorCQkJCSAgICAgIGl3bS0+cmVxX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVzcChtZ3QtPmZyYW1lX2NvbnRyb2wpKSB7CiAJCWllID0gbWd0LT51LmFzc29jX3Jlc3AudmFyaWFibGU7OwotCQlldmVudCA9IElXRVZBU1NPQ1JFU1BJRTsKKwkJaXdtLT5yZXNwX2llX2xlbiA9CisJCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJa2ZyZWUoaXdtLT5yZXNwX2llKTsKKwkJaXdtLT5yZXNwX2llID0ga21lbWR1cChtZ3QtPnUuYXNzb2NfcmVzcC52YXJpYWJsZSwKKwkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJaWUgPSBtZ3QtPnUucmVhc3NvY19yZXNwLnZhcmlhYmxlOzsKLQkJZXZlbnQgPSBJV0VWQVNTT0NSRVNQSUU7CisJCWl3bS0+cmVzcF9pZV9sZW4gPQorCQkJCWxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSAtIChpZSAtICh1OCAqKW1ndCk7CisJCWtmcmVlKGl3bS0+cmVzcF9pZSk7CisJCWl3bS0+cmVzcF9pZSA9IGttZW1kdXAobWd0LT51LnJlYXNzb2NfcmVzcC52YXJpYWJsZSwKKwkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIHsKLQkJSVdNX0VSUihpd20sICJVbnN1cHBvcnRlZCBtYW5hZ2VtZW50IGZyYW1lIik7CisJCUlXTV9FUlIoaXdtLCAiVW5zdXBwb3J0ZWQgbWFuYWdlbWVudCBmcmFtZTogMHgleCIsCisJCQlsZTE2X3RvX2NwdShtZ3QtPmZyYW1lX2NvbnRyb2wpKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jd3JxdS5kYXRhLmxlbmd0aCA9IGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSAtIChpZSAtICh1OCAqKW1ndCk7Ci0KLQlJV01fSEVYRFVNUChpd20sIERCRywgTUxNRSwgIkVWVDogIiwgaWUsIHdycXUuZGF0YS5sZW5ndGgpOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoaXdtX3RvX25kZXYoaXdtKSwgZXZlbnQsICZ3cnF1LCBpZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODE3LDggKzg5MCw3IEBACiAJY2FzZSBXSUZJX0lGX05URllfUFJPRklMRV9JTlZBTElEQVRFX0NPTVBMRVRFOgogCQlyZXR1cm4gaXdtX21sbWVfcHJvZmlsZV9pbnZhbGlkYXRlKGl3bSwgYnVmLCBidWZfc2l6ZSwgY21kKTsKIAljYXNlIFdJRklfSUZfTlRGWV9DT05ORUNUSU9OX1RFUk1JTkFURUQ6Ci0JCUlXTV9EQkdfTUxNRShpd20sIERCRywgIkNvbm5lY3Rpb24gdGVybWluYXRlZFxuIik7Ci0JCWJyZWFrOworCQlyZXR1cm4gaXdtX21sbWVfY29ubmVjdGlvbl90ZXJtaW5hdGVkKGl3bSwgYnVmLCBidWZfc2l6ZSwgY21kKTsKIAljYXNlIFdJRklfSUZfTlRGWV9TQ0FOX0NPTVBMRVRFOgogCQlyZXR1cm4gaXdtX21sbWVfc2Nhbl9jb21wbGV0ZShpd20sIGJ1ZiwgYnVmX3NpemUsIGNtZCk7CiAJY2FzZSBXSUZJX0lGX05URllfU1RBX1RBQkxFX0NIQU5HRToKQEAgLTg3NSw2ICs5NDcsNyBAQAogCQkvKiBVTUFDIHBhc3NlcyByYXRlIGluZm8gbXVsdGlwbGllcyBieSAyICovCiAJCWl3bS0+cmF0ZSA9IG1heF9yYXRlID4+IDE7CiAJfQorCWl3bS0+dHhwb3dlciA9IGxlMzJfdG9fY3B1KHN0YXRzLT50eF9wb3dlcik7CiAKIAl3c3RhdHMtPnN0YXR1cyA9IDA7CiAKQEAgLTkyMiwxMyArOTk1LDYgQEAKIAlpZiAoKGhkcl9vZmZzZXQgKyBoZHJfbGVuKSA+IElXTV9FRVBST01fTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmZGVmIENPTkZJR19JV01fQjBfSFdfU1VQUE9SVAotCWlmIChoZHJfb2Zmc2V0ID09IElXTV9FRVBST01fU0tVX0NBUF9PRkYpIHsKLQkJaWYgKGVlcHJvbV9wcm94eS0+YnVmWzBdID09IDB4ZmYpCi0JCQlpd20tPmNvbmYuaHdfYjAgPSAxOwotCX0KLSNlbmRpZgotCiAJc3dpdGNoIChoZHJfdHlwZSkgewogCWNhc2UgSVdNX1VNQUNfQ01EX0VFUFJPTV9UWVBFX1JFQUQ6CiAJCW1lbWNweShpd20tPmVlcHJvbSArIGhkcl9vZmZzZXQsIGVlcHJvbV9wcm94eS0+YnVmLCBoZHJfbGVuKTsKQEAgLTk5MywxMiArMTA1OSwxNyBAQAogCQkJKHN0cnVjdCBpd21fdW1hY193aWZpX2lmICopY21kLT5idWYucGF5bG9hZDsKIAogCUlXTV9EQkdfTlRGKGl3bSwgREJHLCAiV0lGSV9JRl9XUkFQUEVSIGNtZCBpcyBkZWxpdmVyZWQgdG8gVU1BQzogIgotCQkgICAgIm9pZCBpcyAlZFxuIiwgaGRyLT5vaWQpOworCQkgICAgIm9pZCBpcyAweCV4XG4iLCBoZHItPm9pZCk7CisKKwlpZiAoaGRyLT5vaWQgPD0gV0lGSV9JRl9OVEZZX01BWCkgeworCQlzZXRfYml0KGhkci0+b2lkLCAmaXdtLT53aWZpX250ZnlbMF0pOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJml3bS0+d2lmaV9udGZ5X3F1ZXVlKTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGhkci0+b2lkKSB7CiAJY2FzZSBVTUFDX1dJRklfSUZfQ01EX1NFVF9QUk9GSUxFOgogCQlpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUgPSAxOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJml3bS0+bWxtZV9xdWV1ZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTAxMCw2ICsxMDgxLDcgQEAKIHN0YXRpYyBpbnQgaXdtX250Zl9jYXJkX3N0YXRlKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCAqYnVmLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBidWZfc2l6ZSwgc3RydWN0IGl3bV93aWZpX2NtZCAqY21kKQogeworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBpd21fdG9fd2lwaHkoaXdtKTsKIAlzdHJ1Y3QgaXdtX2xtYWNfY2FyZF9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IGl3bV9sbWFjX2NhcmRfc3RhdGUgKikKIAkJCQkoYnVmICsgc2l6ZW9mKHN0cnVjdCBpd21fdW1hY193aWZpX2luX2hkcikpOwogCXUzMiBmbGFncyA9IGxlMzJfdG9fY3B1KHN0YXRlLT5mbGFncyk7CkBAIC0xMDE4LDEwICsxMDkwLDcgQEAKIAkJIGZsYWdzICYgSVdNX0NBUkRfU1RBVEVfSFdfRElTQUJMRUQgPyAiT04iIDogIk9GRiIsCiAJCSBmbGFncyAmIElXTV9DQVJEX1NUQVRFX0NUS0lMTF9ESVNBQkxFRCA/ICJPTiIgOiAiT0ZGIik7CiAKLQlpZiAoZmxhZ3MgJiBJV01fQ0FSRF9TVEFURV9IV19ESVNBQkxFRCkKLQkJc2V0X2JpdChJV01fUkFESU9fUkZLSUxMX0hXLCAmaXdtLT5yYWRpbyk7Ci0JZWxzZQotCQljbGVhcl9iaXQoSVdNX1JBRElPX1JGS0lMTF9IVywgJml3bS0+cmFkaW8pOworCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUod2lwaHksIGZsYWdzICYgSVdNX0NBUkRfU1RBVEVfSFdfRElTQUJMRUQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzYyLDEzICsxNDMxLDEzIEBACiAKIAkJc2tiLT5kZXYgPSBpd21fdG9fbmRldihpd20pOwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAogCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCi0JCWlmIChuZXRpZl9yeChza2IpID09IE5FVF9SWF9EUk9QKSB7CisJCWlmIChuZXRpZl9yeF9uaShza2IpID09IE5FVF9SWF9EUk9QKSB7CiAJCQlJV01fRVJSKGl3bSwgIlBhY2tldCBkcm9wcGVkXG4iKTsKIAkJCW5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9zZGlvLmMKaW5kZXggOTE2NjgxODMuLjhiMWRlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9zZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3NkaW8uYwpAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2Rpby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KIApAQCAtNDkyLDcgKzQ5Myw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgaXdtX3NkaW9faWRzW10gPSB7Ci0JeyBTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9JTlRFTCwgU0RJT19ERVZJQ0VfSURfSVdNKSB9LAorCXsgU0RJT19ERVZJQ0UoU0RJT19WRU5ET1JfSURfSU5URUwsCisJCSAgICAgIFNESU9fREVWSUNFX0lEX0lOVEVMX0lXTUMzMjAwV0lGSSkgfSwKIAl7IC8qIGVuZDogYWxsIHplcm9lcyAqLwl9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgaXdtX3NkaW9faWRzKTsKQEAgLTUwNiwxMSArNTA4LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXdtX3NkaW9faW5pdF9tb2R1bGUodm9pZCkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoJml3bV9zZGlvX2RyaXZlcik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzZGlvX3JlZ2lzdGVyX2RyaXZlcigmaXdtX3NkaW9fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl3bV9zZGlvX2V4aXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3NkaW8uaAppbmRleCBiM2MxNTZiLi5hYWI2YjY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvc2Rpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9zZGlvLmgKQEAgLTM5LDkgKzM5LDYgQEAKICNpZm5kZWYgX19JV01fU0RJT19IX18KICNkZWZpbmUgX19JV01fU0RJT19IX18KIAotI2RlZmluZSBTRElPX1ZFTkRPUl9JRF9JTlRFTCAweDg5Ci0jZGVmaW5lIFNESU9fREVWSUNFX0lEX0lXTSAgIDB4MTQwMwotCiAjZGVmaW5lIElXTV9TRElPX0RBVEFfQUREUiAgICAgICAgICAgMHgwCiAjZGVmaW5lIElXTV9TRElPX0lOVFJfRU5BQkxFX0FERFIgICAgMHgxNAogI2RlZmluZSBJV01fU0RJT19JTlRSX1NUQVRVU19BRERSICAgIDB4MTMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS91bWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvdW1hYy5oCmluZGV4IDRhOTVjY2UuLmM1YTE0YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS91bWFjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3VtYWMuaApAQCAtNDk1LDYgKzQ5NSw4IEBACiAjZGVmaW5lIFdJRklfREJHX0lGX05URllfQ09FWF9IQU5ETEVfRU5WRUxPUAkJMHhFOAogI2RlZmluZSBXSUZJX0RCR19JRl9OVEZZX0NPRVhfSEFORExFX1JFTEVBU0VfRU5WRUxPUAkweEU5CiAKKyNkZWZpbmUgV0lGSV9JRl9OVEZZX01BWCAweGZmCisKIC8qIE5vdGlmaWNhdGlvbiBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfd2lmaV9pZiB7CiAJc3RydWN0IGl3bV91bWFjX3dpZmlfaW5faGRyIGhkcjsKQEAgLTYxMyw2ICs2MTUsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9pbml0X2NvbXBsZXRlIHsKKwlzdHJ1Y3QgaXdtX3VtYWNfd2lmaV9pbl9oZHIgaGRyOwogCV9fbGUxNiBzdGF0dXM7CiAJX19sZTE2IHJlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC02NDEsNiArNjQ0LDExIEBACiAJX19sZTMyIHVtYWNfc3RhdHVzOwogCV9fbGUzMiBsbWFjX3N0YXR1czsKIAlfX2xlMzIgc2Rpb19zdGF0dXM7CisJX19sZTMyIGRibV9zYW1wbGVfY3RybDsKKwlfX2xlMzIgZGJtX2J1Zl9iYXNlOworCV9fbGUzMiBkYm1fYnVmX2VuZDsKKwlfX2xlMzIgZGJtX2J1Zl93cml0ZV9wdHI7CisJX19sZTMyIGRibV9idWZfY3ljbGVfY250OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd21fdW1hY19ub3RpZl9lcnJvciB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3dleHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg0Yzk0ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvd2V4dC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzIzICswLDAgQEAKLS8qCi0gKiBJbnRlbCBXaXJlbGVzcyBNdWx0aWNvbW0gMzIwMCBXaUZpIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIFNhbXVlbCBPcnRpeiA8c2FtdWVsLm9ydGl6QGludGVsLmNvbT4KLSAqIFpodSBZaSA8eWkuemh1QGludGVsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCi0gKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotI2luY2x1ZGUgIml3bS5oIgotI2luY2x1ZGUgInVtYWMuaCIKLSNpbmNsdWRlICJjb21tYW5kcy5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaXdtX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJml3bS0+d3N0YXRzOwotCi0JaWYgKCF0ZXN0X2JpdChJV01fU1RBVFVTX0FTU09DSUFURUQsICZpd20tPnN0YXR1cykpIHsKLQkJbWVtc2V0KHdzdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKSk7Ci0JCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfSU5WQUxJRDsKLQl9Ci0KLQlyZXR1cm4gd3N0YXRzOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlpZiAoZnJlcS0+ZmxhZ3MgPT0gSVdfRlJFUV9BVVRPKQotCQlyZXR1cm4gMDsKLQotCS8qIGZyZXF1ZW5jeS9jaGFubmVsIGNhbiBvbmx5IGJlIHNldCBpbiBJQlNTIG1vZGUgKi8KLQlpZiAoaXdtLT5jb25mLm1vZGUgIT0gVU1BQ19NT0RFX0lCU1MpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZnJlcShkZXYsIGluZm8sIGZyZXEsIGV4dHJhKTsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShkZXYpOwotCi0JaWYgKGl3bS0+Y29uZi5tb2RlID09IFVNQUNfTU9ERV9JQlNTKQotCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2dpd2ZyZXEoZGV2LCBpbmZvLCBmcmVxLCBleHRyYSk7Ci0KLQlmcmVxLT5lID0gMDsKLQlmcmVxLT5tID0gaXdtLT5jaGFubmVsOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlpZiAoaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0lCU1MpCi0JCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7Ci0KLQlpZiAoIXRlc3RfYml0KElXTV9TVEFUVVNfUkVBRFksICZpd20tPnN0YXR1cykpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhcF9hZGRyLT5zYV9kYXRhKSB8fAotCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhcF9hZGRyLT5zYV9kYXRhKSkgewotCQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJjbGVhciBtYW5kYXRvcnkgYnNzaWQgJXBNXG4iLAotCQkJICAgICBpd20tPnVtYWNfcHJvZmlsZS0+YnNzaWRbMF0pOwotCQltZW1zZXQoJml3bS0+dW1hY19wcm9maWxlLT5ic3NpZFswXSwgMCwgRVRIX0FMRU4pOwotCQlpd20tPnVtYWNfcHJvZmlsZS0+YnNzX251bSA9IDA7Ci0JfSBlbHNlIHsKLQkJSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiYWRkIG1hbmRhdG9yeSBic3NpZCAlcE1cbiIsCi0JCQkgICAgIGFwX2FkZHItPnNhX2RhdGEpOwotCQltZW1jcHkoJml3bS0+dW1hY19wcm9maWxlLT5ic3NpZFswXSwgYXBfYWRkci0+c2FfZGF0YSwKLQkJICAgICAgIEVUSF9BTEVOKTsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPmJzc19udW0gPSAxOwotCX0KLQotCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpIHsKLQkJaWYgKCFtZW1jbXAoJml3bS0+dW1hY19wcm9maWxlLT5ic3NpZFswXSwgaXdtLT5ic3NpZCwgRVRIX0FMRU4pKQotCQkJcmV0dXJuIDA7Ci0KLQkJaXdtX2ludmFsaWRhdGVfbWxtZV9wcm9maWxlKGl3bSk7Ci0JfQotCi0JaWYgKGl3bS0+dW1hY19wcm9maWxlLT5zc2lkLnNzaWRfbGVuKQotCQlyZXR1cm4gaXdtX3NlbmRfbWxtZV9wcm9maWxlKGl3bSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQotCXN3aXRjaCAoaXdtLT5jb25mLm1vZGUpIHsKLQljYXNlIFVNQUNfTU9ERV9JQlNTOgotCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2dpd2FwKGRldiwgaW5mbywgYXBfYWRkciwgZXh0cmEpOwotCWNhc2UgVU1BQ19NT0RFX0JTUzoKLQkJaWYgKHRlc3RfYml0KElXTV9TVEFUVVNfQVNTT0NJQVRFRCwgJml3bS0+c3RhdHVzKSkgewotCQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBpd20tPmJzc2lkLCBFVEhfQUxFTik7Ci0JCX0gZWxzZQotCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpCi17Ci0Jc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShkZXYpOwotCXNpemVfdCBsZW4gPSBkYXRhLT5sZW5ndGg7Ci0JaW50IHJldDsKLQotCWlmIChpd20tPmNvbmYubW9kZSA9PSBVTUFDX01PREVfSUJTUykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9zaXdlc3NpZChkZXYsIGluZm8sIGRhdGEsIHNzaWQpOwotCi0JaWYgKCF0ZXN0X2JpdChJV01fU1RBVFVTX1JFQURZLCAmaXdtLT5zdGF0dXMpKQotCQlyZXR1cm4gLUVJTzsKLQotCWlmIChsZW4gPiAwICYmIHNzaWRbbGVuIC0gMV0gPT0gJ1wwJykKLQkJbGVuLS07Ci0KLQlpZiAoaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKSB7Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkX2xlbiA9PSBsZW4gJiYKLQkJICAgICFtZW1jbXAoaXdtLT51bWFjX3Byb2ZpbGUtPnNzaWQuc3NpZCwgc3NpZCwgbGVuKSkKLQkJCXJldHVybiAwOwotCi0JCXJldCA9IGl3bV9pbnZhbGlkYXRlX21sbWVfcHJvZmlsZShpd20pOwotCQlpZiAocmV0IDwgMCkgewotCQkJSVdNX0VSUihpd20sICJDb3VsZG4ndCBpbnZhbGlkYXRlIHByb2ZpbGVcbiIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCWl3bS0+dW1hY19wcm9maWxlLT5zc2lkLnNzaWRfbGVuID0gbGVuOwotCW1lbWNweShpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkLCBzc2lkLCBsZW4pOwotCi0JcmV0dXJuIGl3bV9zZW5kX21sbWVfcHJvZmlsZShpd20pOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlpZiAoaXdtLT5jb25mLm1vZGUgPT0gVU1BQ19NT0RFX0lCU1MpCi0JCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZXNzaWQoZGV2LCBpbmZvLCBkYXRhLCBzc2lkKTsKLQotCWlmICghdGVzdF9iaXQoSVdNX1NUQVRVU19SRUFEWSwgJml3bS0+c3RhdHVzKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlkYXRhLT5sZW5ndGggPSBpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkX2xlbjsKLQlpZiAoZGF0YS0+bGVuZ3RoKSB7Ci0JCW1lbWNweShzc2lkLCBpd20tPnVtYWNfcHJvZmlsZS0+c3NpZC5zc2lkLCBkYXRhLT5sZW5ndGgpOwotCQlkYXRhLT5mbGFncyA9IDE7Ci0JfSBlbHNlCi0JCWRhdGEtPmZsYWdzID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGl3bV9rZXkgKgotaXdtX2tleV9pbml0KHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCBrZXlfaWR4LCBib29sIGluX3VzZSwKLQkgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQsIHU4IGFsZykKLXsKLQlzdHJ1Y3QgaXdtX2tleSAqa2V5ID0gJml3bS0+a2V5c1trZXlfaWR4XTsKLQotCW1lbXNldChrZXksIDAsIHNpemVvZihzdHJ1Y3QgaXdtX2tleSkpOwotCW1lbWNweShrZXktPmhkci5tYWMsIGV4dC0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7Ci0Ja2V5LT5oZHIua2V5X2lkeCA9IGtleV9pZHg7Ci0JaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGV4dC0+YWRkci5zYV9kYXRhKSkKLQkJa2V5LT5oZHIubXVsdGljYXN0ID0gMTsKLQotCWtleS0+aW5fdXNlID0gaW5fdXNlOwotCWtleS0+ZmxhZ3MgPSBleHQtPmV4dF9mbGFnczsKLQlrZXktPmFsZyA9IGFsZzsKLQlrZXktPmtleV9sZW4gPSBleHQtPmtleV9sZW47Ci0JbWVtY3B5KGtleS0+a2V5LCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKLQotCXJldHVybiBrZXk7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfZ2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0KLQlyYXRlLT52YWx1ZSA9IGl3bS0+cmF0ZSAqIDEwMDAwMDA7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5X2J1ZikKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0Jc3RydWN0IGl3bV9rZXkgKnVuaW5pdGlhbGl6ZWRfdmFyKGtleSk7Ci0JaW50IGlkeCwgaSwgdW5pbml0aWFsaXplZF92YXIoYWxnKSwgcmVtb3ZlID0gMCwgcmV0OwotCi0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5IGxlbjogJWRcbiIsIGVycS0+bGVuZ3RoKTsKLQlJV01fREJHX1dFWFQoaXdtLCBEQkcsICJmbGFnczogMHgleFxuIiwgZXJxLT5mbGFncyk7Ci0KLQlpZiAoIWl3bS0+dW1hY19wcm9maWxlKSB7Ci0JCUlXTV9FUlIoaXdtLCAiVU1BQyBwcm9maWxlIG5vdCBhbGxvY2F0ZWQgeWV0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKGVycS0+bGVuZ3RoID09IFdMQU5fS0VZX0xFTl9XRVA0MCkgewotCQlhbGcgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy51Y2FzdF9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5tY2FzdF9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQl9IGVsc2UgaWYgKGVycS0+bGVuZ3RoID09IFdMQU5fS0VZX0xFTl9XRVAxMDQpIHsKLQkJYWxnID0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfMTA0OwotCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLnVjYXN0X2NpcGhlciA9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzEwNDsKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5tY2FzdF9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF8xMDQ7Ci0JfQotCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5hdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOwotCWVsc2UKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5hdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9PUEVOOwotCi0JaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4ID09IDApIHsKLQkJaWYgKGl3bS0+ZGVmYXVsdF9rZXkpCi0JCQlmb3IgKGkgPSAwOyBpIDwgSVdNX05VTV9LRVlTOyBpKyspIHsKLQkJCQlpZiAoaXdtLT5kZWZhdWx0X2tleSA9PSAmaXdtLT5rZXlzW2ldKSB7Ci0JCQkJCWlkeCA9IGk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJZWxzZQotCQkJaXdtLT5kZWZhdWx0X2tleSA9ICZpd20tPmtleXNbaWR4XTsKLQl9IGVsc2UgaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UKLQkJaWR4LS07Ci0KLQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKLQkJcmVtb3ZlID0gMTsKLQllbHNlIGlmIChlcnEtPmxlbmd0aCA9PSAwKSB7Ci0JCWlmICghaXdtLT5rZXlzW2lkeF0uaW5fdXNlKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWl3bS0+ZGVmYXVsdF9rZXkgPSAmaXdtLT5rZXlzW2lkeF07Ci0JfQotCi0JaWYgKGVycS0+bGVuZ3RoKSB7Ci0JCWtleSA9ICZpd20tPmtleXNbaWR4XTsKLQkJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpd21fa2V5KSk7Ci0JCW1lbXNldChrZXktPmhkci5tYWMsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJa2V5LT5oZHIua2V5X2lkeCA9IGlkeDsKLQkJa2V5LT5oZHIubXVsdGljYXN0ID0gMTsKLQkJa2V5LT5pbl91c2UgPSAhcmVtb3ZlOwotCQlrZXktPmFsZyA9IGFsZzsKLQkJa2V5LT5rZXlfbGVuID0gZXJxLT5sZW5ndGg7Ci0JCW1lbWNweShrZXktPmtleSwga2V5X2J1ZiwgZXJxLT5sZW5ndGgpOwotCi0JCUlXTV9EQkdfV0VYVChpd20sIERCRywgIlNldHRpbmcga2V5ICVkLCBkZWZhdWx0OiAlZFxuIiwKLQkJCSAgICAgaWR4LCAhIWl3bS0+ZGVmYXVsdF9rZXkpOwotCX0KLQotCWlmIChyZW1vdmUpIHsKLQkJaWYgKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSB8fCAoZXJxLT5sZW5ndGggPT0gMCkpIHsKLQkJCWludCBqOwotCQkJZm9yIChqID0gMDsgaiA8IElXTV9OVU1fS0VZUzsgaisrKQotCQkJCWlmIChpd20tPmtleXNbal0uaW5fdXNlKSB7Ci0JCQkJCXN0cnVjdCBpd21fa2V5ICprID0gJml3bS0+a2V5c1tqXTsKLQotCQkJCQlrLT5pbl91c2UgPSAwOwotCQkJCQlyZXQgPSBpd21fc2V0X2tleShpd20sIHJlbW92ZSwgMCwgayk7Ci0JCQkJCWlmIChyZXQgPCAwKQotCQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9Ci0KLQkJCWl3bS0+dW1hY19wcm9maWxlLT5zZWMudWNhc3RfY2lwaGVyID0KLQkJCQkJCQlVTUFDX0NJUEhFUl9UWVBFX05PTkU7Ci0JCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLm1jYXN0X2NpcGhlciA9Ci0JCQkJCQkJVU1BQ19DSVBIRVJfVFlQRV9OT05FOwotCQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5hdXRoX3R5cGUgPQotCQkJCQkJCVVNQUNfQVVUSF9UWVBFX09QRU47Ci0KLQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJa2V5LT5pbl91c2UgPSAwOwotCQkJcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgcmVtb3ZlLCAwLCBrZXkpOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJZiB3ZSBoYXZlbnQgc2V0IGEgcHJvZmlsZSB5ZXQsIHdlIGNhbnQgc2V0IGtleXMuCi0JICogS2V5cyB3aWxsIGJlIHB1c2hlZCBhZnRlciB3ZSdyZSBhc3NvY2lhdGVkLgotCSAqLwotCWlmICghaXdtLT51bWFjX3Byb2ZpbGVfYWN0aXZlKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgdGhlcmUgaXMgYSBjdXJyZW50IGFjdGl2ZSBwcm9maWxlLCBidXQgbm8KLQkgKiBkZWZhdWx0IGtleSwgaXQncyBub3Qgd29ydGggdHJ5aW5nIHRvIGFzc29jaWF0ZSBhZ2Fpbi4KLQkgKi8KLQlpZiAoIWl3bS0+ZGVmYXVsdF9rZXkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBIZXJlIHdlIGhhdmUgYW4gYWN0aXZlIHByb2ZpbGUsIGJ1dCBhIGtleSBzZXR0aW5nIGNoYW5nZWQuCi0JICogV2UgdGh1cyBoYXZlIHRvIGludmFsaWRhdGUgdGhlIGN1cnJlbnQgcHJvZmlsZSwgYW5kIHB1c2ggdGhlCi0JICogbmV3IG9uZS4gS2V5cyB3aWxsIGJlIHB1c2hlZCB3aGVuIGFzc29jaWF0aW9uIHRha2VzIHBsYWNlLgotCSAqLwotCXJldCA9IGl3bV9pbnZhbGlkYXRlX21sbWVfcHJvZmlsZShpd20pOwotCWlmIChyZXQgPCAwKSB7Ci0JCUlXTV9FUlIoaXdtLCAiQ291bGRuJ3QgaW52YWxpZGF0ZSBwcm9maWxlXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gaXdtX3NlbmRfbWxtZV9wcm9maWxlKGl3bSk7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfZ2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmtleSkKLXsKLQlzdHJ1Y3QgaXdtX3ByaXYgKml3bSA9IG5kZXZfdG9faXdtKGRldik7Ci0JaW50IGlkeCwgaTsKLQotCWlkeCA9IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7Ci0JaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgewotCQlpZHggPSAtMTsKLQkJaWYgKCFpd20tPmRlZmF1bHRfa2V5KSB7Ci0JCQllcnEtPmxlbmd0aCA9IDA7Ci0JCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9OT0tFWTsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UKLQkJCWZvciAoaSA9IDA7IGkgPCBJV01fTlVNX0tFWVM7IGkrKykgewotCQkJCWlmIChpd20tPmRlZmF1bHRfa2V5ID09ICZpd20tPmtleXNbaV0pIHsKLQkJCQkJaWR4ID0gaTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZQotCQlpZHgtLTsKLQotCWVycS0+ZmxhZ3MgPSBpZHggKyAxOwotCi0JaWYgKCFpd20tPmtleXNbaWR4XS5pbl91c2UpIHsKLQkJZXJxLT5sZW5ndGggPSAwOwotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbWVtY3B5KGtleSwgaXdtLT5rZXlzW2lkeF0ua2V5LAotCSAgICAgICBtaW5fdChpbnQsIGVycS0+bGVuZ3RoLCBpd20tPmtleXNbaWR4XS5rZXlfbGVuKSk7Ci0JZXJxLT5sZW5ndGggPSBpd20tPmtleXNbaWR4XS5rZXlfbGVuOwotCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0KLQlpZiAoaXdtLT51bWFjX3Byb2ZpbGUtPm1vZGUgPT0gVU1BQ19NT0RFX0JTUykgewotCQlzd2l0Y2ggKGl3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlKSB7Ci0JCWNhc2UgVU1BQ19BVVRIX1RZUEVfT1BFTjoKLQkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bV9zZXRfd3BhX3ZlcnNpb24oc3RydWN0IGl3bV9wcml2ICppd20sIHU4IHdwYV92ZXJzaW9uKQotewotCWlmICh3cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikKLQkJaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5mbGFncyA9IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSzsKLQllbHNlIGlmICh3cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKQotCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzID0gVU1BQ19TRUNfRkxHX1dQQV9PTl9NU0s7Ci0JZWxzZQotCQlpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzID0gVU1BQ19TRUNfRkxHX0xFR0FDWV9QUk9GSUxFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3dleHRfc2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgc3RydWN0IGl3X3BhcmFtICp3cnEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQl1MzIgcG93ZXJfaW5kZXg7Ci0KLQlpZiAod3JxLT5kaXNhYmxlZCkgewotCQlwb3dlcl9pbmRleCA9IElXTV9QT1dFUl9JTkRFWF9NSU47Ci0JCWdvdG8gc2V0OwotCX0gZWxzZQotCQlwb3dlcl9pbmRleCA9IElXTV9QT1dFUl9JTkRFWF9ERUZBVUxUOwotCi0Jc3dpdGNoICh3cnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgewotCWNhc2UgSVdfUE9XRVJfT046Ci0JY2FzZSBJV19QT1dFUl9NT0RFOgotCWNhc2UgSVdfUE9XRVJfQUxMX1I6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotIHNldDoKLQlpZiAocG93ZXJfaW5kZXggPT0gaXdtLT5jb25mLnBvd2VyX2luZGV4KQotCQlyZXR1cm4gMDsKLQotCWl3bS0+Y29uZi5wb3dlcl9pbmRleCA9IHBvd2VyX2luZGV4OwotCi0JcmV0dXJuIGl3bV91bWFjX3NldF9jb25maWdfZml4KGl3bSwgVU1BQ19QQVJBTV9UQkxfQ0ZHX0ZJWCwKLQkJCQkgICAgICAgQ0ZHX1BPV0VSX0lOREVYLCBpd20tPmNvbmYucG93ZXJfaW5kZXgpOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X2dpd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQotCXdycXUtPnBvd2VyLmRpc2FibGVkID0gKGl3bS0+Y29uZi5wb3dlcl9pbmRleCA9PSBJV01fUE9XRVJfSU5ERVhfTUlOKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bV9zZXRfa2V5X21ndChzdHJ1Y3QgaXdtX3ByaXYgKml3bSwgdTgga2V5X21ndCkKLXsKLQl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOwotCi0JaWYgKGtleV9tZ3QgPT0gSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgpCi0JCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV84MDIxWDsKLQllbHNlIGlmIChrZXlfbWd0ID09IElXX0FVVEhfS0VZX01HTVRfUFNLKSB7Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzICYKLQkJICAgIChVTUFDX1NFQ19GTEdfV1BBX09OX01TSyB8IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSykpCi0JCQkqYXV0aF90eXBlID0gVU1BQ19BVVRIX1RZUEVfUlNOQV9QU0s7Ci0JCWVsc2UKLQkJCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9MRUdBQ1lfUFNLOwotCX0gZWxzZSB7Ci0JCUlXTV9FUlIoaXdtLCAiSW52YWxpZCBrZXkgbWd0OiAweCV4XG4iLCBrZXlfbWd0KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdtX3NldF9jaXBoZXIoc3RydWN0IGl3bV9wcml2ICppd20sIHU4IGNpcGhlciwgdTggdWNhc3QpCi17Ci0JdTggKnByb2ZpbGVfY2lwaGVyID0gdWNhc3QgPyAmaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy51Y2FzdF9jaXBoZXIgOgotCQkmaXdtLT51bWFjX3Byb2ZpbGUtPnNlYy5tY2FzdF9jaXBoZXI7Ci0KLQlzd2l0Y2ggKGNpcGhlcikgewotCWNhc2UgSVdfQVVUSF9DSVBIRVJfTk9ORToKLQkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9OT05FOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1dFUDQwOgotCQkqcHJvZmlsZV9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1dFUF80MDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9US0lQOgotCQkqcHJvZmlsZV9jaXBoZXIgPSBVTUFDX0NJUEhFUl9UWVBFX1RLSVA7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9DSVBIRVJfQ0NNUDoKLQkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9DQ01QOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1dFUDEwNDoKLQkJKnByb2ZpbGVfY2lwaGVyID0gVU1BQ19DSVBIRVJfVFlQRV9XRVBfMTA0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV01fRVJSKGl3bSwgIlVuc3VwcG9ydGVkIGNpcGhlcjogMHgleFxuIiwgY2lwaGVyKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fc2V0X2F1dGhfYWxnKHN0cnVjdCBpd21fcHJpdiAqaXdtLCB1OCBhdXRoX2FsZykKLXsKLQl1OCAqYXV0aF90eXBlID0gJml3bS0+dW1hY19wcm9maWxlLT5zZWMuYXV0aF90eXBlOwotCi0Jc3dpdGNoIChhdXRoX2FsZykgewotCWNhc2UgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU06Ci0JCSphdXRoX3R5cGUgPSBVTUFDX0FVVEhfVFlQRV9PUEVOOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQUxHX1NIQVJFRF9LRVk6Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZS0+c2VjLmZsYWdzICYKLQkJICAgIChVTUFDX1NFQ19GTEdfV1BBX09OX01TSyB8IFVNQUNfU0VDX0ZMR19SU05BX09OX01TSykpIHsKLQkJCWlmICgqYXV0aF90eXBlID09IFVNQUNfQVVUSF9UWVBFXzgwMjFYKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJKmF1dGhfdHlwZSA9IFVNQUNfQVVUSF9UWVBFX1JTTkFfUFNLOwotCQl9IGVsc2UgewotCQkJKmF1dGhfdHlwZSA9IFVNQUNfQVVUSF9UWVBFX0xFR0FDWV9QU0s7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0FMR19MRUFQOgotCWRlZmF1bHQ6Ci0JCUlXTV9FUlIoaXdtLCAiVW5zdXBwb3J0ZWQgYXV0aCBhbGc6IDB4JXhcbiIsIGF1dGhfYWxnKTsKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9zaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd21fcHJpdiAqaXdtID0gbmRldl90b19pd20oZGV2KTsKLQlpbnQgcmV0OwotCi0JaWYgKChkYXRhLT5mbGFncykgJgotCSAgICAoSVdfQVVUSF9XUEFfVkVSU0lPTiB8IElXX0FVVEhfS0VZX01HTVQgfAotCSAgICAgSVdfQVVUSF9XUEFfRU5BQkxFRCB8IElXX0FVVEhfODAyMTFfQVVUSF9BTEcpKSB7Ci0JCS8qIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgY3VycmVudCBwcm9maWxlICovCi0JCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUpIHsKLQkJCXJldCA9IGl3bV9pbnZhbGlkYXRlX21sbWVfcHJvZmlsZShpd20pOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlJV01fRVJSKGl3bSwgIkNvdWxkbid0IGludmFsaWRhdGUgcHJvZmlsZVxuIik7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJfQotCX0KLQotCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCQlyZXR1cm4gaXdtX3NldF93cGFfdmVyc2lvbihpd20sIGRhdGEtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLQkJcmV0dXJuIGl3bV9zZXRfY2lwaGVyKGl3bSwgZGF0YS0+dmFsdWUsIDEpOwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgotCQlyZXR1cm4gaXdtX3NldF9jaXBoZXIoaXdtLCBkYXRhLT52YWx1ZSwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQkJcmV0dXJuIGl3bV9zZXRfa2V5X21ndChpd20sIGRhdGEtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlyZXR1cm4gaXdtX3NldF9hdXRoX2FsZyhpd20sIGRhdGEtPnZhbHVlKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd21fd2V4dF9naXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bV93ZXh0X3Npd2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3bV9wcml2ICppd20gPSBuZGV2X3RvX2l3bShkZXYpOwotCXN0cnVjdCBpd21fa2V5ICprZXk7Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKSBleHRyYTsKLQlpbnQgdW5pbml0aWFsaXplZF92YXIoYWxnKSwgaWR4LCBpLCByZW1vdmUgPSAwOwotCi0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiYWxnOiAweCV4XG4iLCBleHQtPmFsZyk7Ci0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAia2V5IGxlbjogJWRcbiIsIGV4dC0+a2V5X2xlbik7Ci0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiZXh0X2ZsYWdzOiAweCV4XG4iLCBleHQtPmV4dF9mbGFncyk7Ci0JSVdNX0RCR19XRVhUKGl3bSwgREJHLCAiZmxhZ3M6IDB4JXhcbiIsIGVycS0+ZmxhZ3MpOwotCUlXTV9EQkdfV0VYVChpd20sIERCRywgImxlbmd0aDogMHgleFxuIiwgZXJxLT5sZW5ndGgpOwotCi0Jc3dpdGNoIChleHQtPmFsZykgewotCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgotCQlyZW1vdmUgPSAxOwotCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQlpZiAoZXh0LT5rZXlfbGVuID09IFdMQU5fS0VZX0xFTl9XRVA0MCkKLQkJCWFsZyA9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzQwOwotCQllbHNlIGlmIChleHQtPmtleV9sZW4gPT0gV0xBTl9LRVlfTEVOX1dFUDEwNCkKLQkJCWFsZyA9IFVNQUNfQ0lQSEVSX1RZUEVfV0VQXzEwNDsKLQkJZWxzZSB7Ci0JCQlJV01fRVJSKGl3bSwgIkludmFsaWQga2V5IGxlbmd0aDogJWRcbiIsIGV4dC0+a2V5X2xlbik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQlhbGcgPSBVTUFDX0NJUEhFUl9UWVBFX1RLSVA7Ci0JCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgotCQlhbGcgPSBVTUFDX0NJUEhFUl9UWVBFX0NDTVA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlpZHggPSBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCi0JaWYgKGlkeCA9PSAwKSB7Ci0JCWlmIChpd20tPmRlZmF1bHRfa2V5KQotCQkJZm9yIChpID0gMDsgaSA8IElXTV9OVU1fS0VZUzsgaSsrKSB7Ci0JCQkJaWYgKGl3bS0+ZGVmYXVsdF9rZXkgPT0gJml3bS0+a2V5c1tpXSkgewotCQkJCQlpZHggPSBpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JfSBlbHNlIGlmIChpZHggPCAxIHx8IGlkeCA+IDQpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JCWlkeC0tOwotCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JCXJlbW92ZSA9IDE7Ci0JZWxzZSBpZiAoKGVycS0+bGVuZ3RoID09IDApIHx8Ci0JCSAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpKSB7Ci0JCWl3bS0+ZGVmYXVsdF9rZXkgPSAmaXdtLT5rZXlzW2lkeF07Ci0JCWlmIChpd20tPnVtYWNfcHJvZmlsZV9hY3RpdmUgJiYgZXh0LT5hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApCi0JCQlyZXR1cm4gaXdtX3NldF90eF9rZXkoaXdtLCBpZHgpOwotCX0KLQotCWtleSA9IGl3bV9rZXlfaW5pdChpd20sIGlkeCwgIXJlbW92ZSwgZXh0LCBhbGcpOwotCi0JcmV0dXJuIGl3bV9zZXRfa2V5KGl3bSwgcmVtb3ZlLCAhaXdtLT5kZWZhdWx0X2tleSwga2V5KTsKLX0KLQotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgaXdtX2hhbmRsZXJzW10gPQotewotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXQ09NTUlUICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X3Npd2ZyZXEsCQkJLyogU0lPQ1NJV0ZSRVEgKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfZ2l3ZnJlcSwJCQkvKiBTSU9DR0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd21vZGUsCQkvKiBTSU9DU0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd21vZGUsCQkvKiBTSU9DR0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NQWSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdUSFJTUFkgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1RIUlNQWSAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9zaXdhcCwJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdBUCAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9naXdhcCwJCQkvKiBTSU9DR0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkgICAgICAgIC8qIFNJT0NTSVdNTE1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdBUExJU1QgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfc2l3ZXNzaWQsCQkJLyogU0lPQ1NJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X2dpd2Vzc2lkLAkJCS8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTklDS04gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXUkFURSAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9naXdyYXRlLAkJCS8qIFNJT0NHSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3cnRzLAkJLyogU0lPQ1NJV1JUUyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3J0cywJCS8qIFNJT0NHSVdSVFMgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdmcmFnLAkgICAgICAgIC8qIFNJT0NTSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3ZnJhZywJCS8qIFNJT0NHSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdUWFBPVyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1JFVFJZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdSRVRSWSAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9zaXdlbmNvZGUsCQkvKiBTSU9DU0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X2dpd2VuY29kZSwJCS8qIFNJT0NHSVdFTkNPREUgKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfc2l3cG93ZXIsCQkJLyogU0lPQ1NJV1BPV0VSICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X2dpd3Bvd2VyLAkJCS8qIFNJT0NHSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXR0VOSUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV0dFTklFICovCi0JKGl3X2hhbmRsZXIpIGl3bV93ZXh0X3Npd2F1dGgsCQkJLyogU0lPQ1NJV0FVVEggKi8KLQkoaXdfaGFuZGxlcikgaXdtX3dleHRfZ2l3YXV0aCwJCQkvKiBTSU9DR0lXQVVUSCAqLwotCShpd19oYW5kbGVyKSBpd21fd2V4dF9zaXdlbmNvZGVleHQsCSAgICAgICAgLyogU0lPQ1NJV0VOQ09ERUVYVCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXRU5DT0RFRVhUICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdQTUtTQSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi19OwotCi1jb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaXdtX2l3X2hhbmRsZXJfZGVmID0gewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGl3bV9oYW5kbGVycyksCi0JLnN0YW5kYXJkCT0gKGl3X2hhbmRsZXIgKikgaXdtX2hhbmRsZXJzLAotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBpd21fZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKaW5kZXggYjliMzc0MS4uZGQ4NzMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCkBAIC0zNCw3ICszNCw4IEBACiAgKgogICogIEBwYXJhbSBwcml2ICAgICBBIHBvaW50ZXIgdG8gc3RydWN0IGxic19wcml2YXRlIHN0cnVjdHVyZQogICogIEBwYXJhbSByYXRlcyAgICAgICB0aGUgYnVmZmVyIHdoaWNoIGtlZXBzIGlucHV0IGFuZCBvdXRwdXQKLSAqICBAcGFyYW0gcmF0ZXNfc2l6ZSAgdGhlIHNpemUgb2YgcmF0ZTEgYnVmZmVyOyBuZXcgc2l6ZSBvZiBidWZmZXIgb24gcmV0dXJuCisgKiAgQHBhcmFtIHJhdGVzX3NpemUgIHRoZSBzaXplIG9mIHJhdGVzIGJ1ZmZlcjsgbmV3IHNpemUgb2YgYnVmZmVyIG9uIHJldHVybiwKKyAqICAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gb3JpZ2luYWwgcmF0ZXNfc2l6ZQogICoKICAqICBAcmV0dXJuICAgICAgICAgICAgMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBlcnJvcgogICovCkBAIC00Miw0MiArNDMsNDIgQEAKIAl1OCAqcmF0ZXMsCiAJdTE2ICpyYXRlc19zaXplKQogewotCXU4ICpjYXJkX3JhdGVzID0gbGJzX2JnX3JhdGVzOwotCXNpemVfdCBudW1fY2FyZF9yYXRlcyA9IHNpemVvZihsYnNfYmdfcmF0ZXMpOwotCWludCByZXQgPSAwLCBpLCBqOwotCXU4IHRtcFszMF07Ci0Jc2l6ZV90IHRtcF9zaXplID0gMDsKKwlpbnQgaSwgajsKKwl1OCBpbnRlcnNlY3Rpb25bTUFYX1JBVEVTXTsKKwl1MTYgaW50ZXJzZWN0aW9uX3NpemU7CisJdTE2IG51bV9yYXRlcyA9IDA7CiAKLQkvKiBGb3IgZWFjaCByYXRlIGluIGNhcmRfcmF0ZXMgdGhhdCBleGlzdHMgaW4gcmF0ZTEsIGNvcHkgdG8gdG1wICovCi0JZm9yIChpID0gMDsgY2FyZF9yYXRlc1tpXSAmJiAoaSA8IG51bV9jYXJkX3JhdGVzKTsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IHJhdGVzW2pdICYmIChqIDwgKnJhdGVzX3NpemUpOyBqKyspIHsKLQkJCWlmIChyYXRlc1tqXSA9PSBjYXJkX3JhdGVzW2ldKQotCQkJCXRtcFt0bXBfc2l6ZSsrXSA9IGNhcmRfcmF0ZXNbaV07CisJaW50ZXJzZWN0aW9uX3NpemUgPSBtaW5fdCh1MTYsICpyYXRlc19zaXplLCBBUlJBWV9TSVpFKGludGVyc2VjdGlvbikpOworCisJLyogQWxsb3cgZWFjaCByYXRlIGZyb20gJ3JhdGVzJyB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsYnNfYmdfcmF0ZXMpICYmIGxic19iZ19yYXRlc1tpXTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBpbnRlcnNlY3Rpb25fc2l6ZSAmJiByYXRlc1tqXTsgaisrKSB7CisJCQlpZiAocmF0ZXNbal0gPT0gbGJzX2JnX3JhdGVzW2ldKQorCQkJCWludGVyc2VjdGlvbltudW1fcmF0ZXMrK10gPSByYXRlc1tqXTsKIAkJfQogCX0KIAogCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgIkFQIHJhdGVzICAgICIsIHJhdGVzLCAqcmF0ZXNfc2l6ZSk7Ci0JbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY2FyZCByYXRlcyAgIiwgY2FyZF9yYXRlcywgbnVtX2NhcmRfcmF0ZXMpOwotCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgImNvbW1vbiByYXRlcyIsIHRtcCwgdG1wX3NpemUpOworCWxic19kZWJfaGV4KExCU19ERUJfSk9JTiwgImNhcmQgcmF0ZXMgICIsIGxic19iZ19yYXRlcywKKwkJCUFSUkFZX1NJWkUobGJzX2JnX3JhdGVzKSk7CisJbGJzX2RlYl9oZXgoTEJTX0RFQl9KT0lOLCAiY29tbW9uIHJhdGVzIiwgaW50ZXJzZWN0aW9uLCBudW1fcmF0ZXMpOwogCWxic19kZWJfam9pbigiVFggZGF0YSByYXRlIDB4JTAyeFxuIiwgcHJpdi0+Y3VyX3JhdGUpOwogCiAJaWYgKCFwcml2LT5lbmFibGVod2F1dG8pIHsKLQkJZm9yIChpID0gMDsgaSA8IHRtcF9zaXplOyBpKyspIHsKLQkJCWlmICh0bXBbaV0gPT0gcHJpdi0+Y3VyX3JhdGUpCisJCWZvciAoaSA9IDA7IGkgPCBudW1fcmF0ZXM7IGkrKykgeworCQkJaWYgKGludGVyc2VjdGlvbltpXSA9PSBwcml2LT5jdXJfcmF0ZSkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KIAkJbGJzX3ByX2FsZXJ0KCJQcmV2aW91c2x5IHNldCBmaXhlZCBkYXRhIHJhdGUgJSN4IGlzbid0ICIKIAkJICAgICAgICJjb21wYXRpYmxlIHdpdGggdGhlIG5ldHdvcmsuXG4iLCBwcml2LT5jdXJfcmF0ZSk7Ci0JCXJldCA9IC0xOwotCQlnb3RvIGRvbmU7CisJCXJldHVybiAtMTsKIAl9Ci0JcmV0ID0gMDsKIAogZG9uZToKIAltZW1zZXQocmF0ZXMsIDAsICpyYXRlc19zaXplKTsKLQkqcmF0ZXNfc2l6ZSA9IG1pbl90KGludCwgdG1wX3NpemUsICpyYXRlc19zaXplKTsKLQltZW1jcHkocmF0ZXMsIHRtcCwgKnJhdGVzX3NpemUpOwotCXJldHVybiByZXQ7CisJKnJhdGVzX3NpemUgPSBudW1fcmF0ZXM7CisJbWVtY3B5KHJhdGVzLCBpbnRlcnNlY3Rpb24sIG51bV9yYXRlcyk7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTI5LDcgKzEzMCw2IEBACiB7CiAJc3RydWN0IGNtZF9kc184MDJfMTFfYXV0aGVudGljYXRlIGNtZDsKIAlpbnQgcmV0ID0gLTE7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfSk9JTik7CiAKQEAgLTEzOCw4ICsxMzgsNyBAQAogCiAJY21kLmF1dGh0eXBlID0gaXdfYXV0aF90b19pZWVlX2F1dGgoYXV0aCk7CiAKLQlsYnNfZGViX2pvaW4oIkFVVEhfQ01EOiBCU1NJRCAlcywgYXV0aCAweCV4XG4iLAotCQlwcmludF9tYWMobWFjLCBic3NpZCksIGNtZC5hdXRodHlwZSk7CisJbGJzX2RlYl9qb2luKCJBVVRIX0NNRDogQlNTSUQgJXBNLCBhdXRoIDB4JXhcbiIsIGJzc2lkLCBjbWQuYXV0aHR5cGUpOwogCiAJcmV0ID0gbGJzX2NtZF93aXRoX3Jlc3BvbnNlKHByaXYsIENNRF84MDJfMTFfQVVUSEVOVElDQVRFLCAmY21kKTsKIApAQCAtMzIxLDggKzMyMCw4IEBACiAKIAlyYXRlcyA9IChzdHJ1Y3QgbXJ2bF9pZV9yYXRlc19wYXJhbV9zZXQgKikgcG9zOwogCXJhdGVzLT5oZWFkZXIudHlwZSA9IGNwdV90b19sZTE2KFRMVl9UWVBFX1JBVEVTKTsKLQltZW1jcHkoJnJhdGVzLT5yYXRlcywgJmJzcy0+cmF0ZXMsIE1BWF9SQVRFUyk7Ci0JdG1wbGVuID0gTUFYX1JBVEVTOworCXRtcGxlbiA9IG1pbl90KHUxNiwgQVJSQVlfU0laRShic3MtPnJhdGVzKSwgTUFYX1JBVEVTKTsKKwltZW1jcHkoJnJhdGVzLT5yYXRlcywgJmJzcy0+cmF0ZXMsIHRtcGxlbik7CiAJaWYgKGdldF9jb21tb25fcmF0ZXMocHJpdiwgcmF0ZXMtPnJhdGVzLCAmdG1wbGVuKSkgewogCQlyZXQgPSAtMTsKIAkJZ290byBkb25lOwpAQCAtMzQyLDggKzM0MSw2IEBACiAKIAkvKiBGaXJtd2FyZSB2OSsgaW5kaWNhdGUgYXV0aGVudGljYXRpb24gc3VpdGVzIGFzIGEgVExWICovCiAJaWYgKHByaXYtPmZ3cmVsZWFzZSA+PSAweDA5MDAwMDAwKSB7Ci0JCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCiAJCWF1dGggPSAoc3RydWN0IG1ydmxfaWVfYXV0aF90eXBlICopIHBvczsKIAkJYXV0aC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihUTFZfVFlQRV9BVVRIX1RZUEUpOwogCQlhdXRoLT5oZWFkZXIubGVuID0gY3B1X3RvX2xlMTYoMik7CkBAIC0zNTEsOCArMzQ4LDggQEAKIAkJYXV0aC0+YXV0aCA9IGNwdV90b19sZTE2KHRtcGF1dGgpOwogCQlwb3MgKz0gc2l6ZW9mKGF1dGgtPmhlYWRlcikgKyAyOwogCi0JCWxic19kZWJfam9pbigiQVVUSF9DTUQ6IEJTU0lEICVzLCBhdXRoIDB4JXhcbiIsCi0JCQlwcmludF9tYWMobWFjLCBic3MtPmJzc2lkKSwgcHJpdi0+c2VjaW5mby5hdXRoX21vZGUpOworCQlsYnNfZGViX2pvaW4oIkFVVEhfQ01EOiBCU1NJRCAlcE0sIGF1dGggMHgleFxuIiwKKwkJCWJzcy0+YnNzaWQsIHByaXYtPnNlY2luZm8uYXV0aF9tb2RlKTsKIAl9CiAKIAkvKiBXUEEvV1BBMiBJRXMgKi8KQEAgLTU5OCw3ICs1OTUsNyBAQAogCiAJLyogQ29weSBEYXRhIHJhdGVzIGZyb20gdGhlIHJhdGVzIHJlY29yZGVkIGluIHNjYW4gcmVzcG9uc2UgKi8KIAltZW1zZXQoY21kLmJzcy5yYXRlcywgMCwgc2l6ZW9mKGNtZC5ic3MucmF0ZXMpKTsKLQlyYXRlc2l6ZSA9IG1pbl90KHUxNiwgc2l6ZW9mKGNtZC5ic3MucmF0ZXMpLCBNQVhfUkFURVMpOworCXJhdGVzaXplID0gbWluX3QodTE2LCBBUlJBWV9TSVpFKGNtZC5ic3MucmF0ZXMpLCBBUlJBWV9TSVpFIChic3MtPnJhdGVzKSk7CiAJbWVtY3B5KGNtZC5ic3MucmF0ZXMsIGJzcy0+cmF0ZXMsIHJhdGVzaXplKTsKIAlpZiAoZ2V0X2NvbW1vbl9yYXRlcyhwcml2LCBjbWQuYnNzLnJhdGVzLCAmcmF0ZXNpemUpKSB7CiAJCWxic19kZWJfam9pbigiQURIT0NfSk9JTjogZ2V0X2NvbW1vbl9yYXRlcyByZXR1cm5lZCBlcnJvci5cbiIpOwpAQCAtMTM2OCwxMSArMTM2NSwxNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCisJbWVtY3B5KCZwcml2LT53cGFfdW5pY2FzdF9rZXksICZhc3NvY19yZXEtPndwYV91bmljYXN0X2tleSwKKwkJCXNpemVvZihzdHJ1Y3QgZW5jX2tleSkpOworCiAJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CiAJCWNsZWFyX2JpdChBU1NPQ19GTEFHX1dQQV9VQ0FTVF9LRVksICZhc3NvY19yZXEtPmZsYWdzKTsKIAogCQlyZXQgPSBsYnNfY21kXzgwMl8xMV9rZXlfbWF0ZXJpYWwocHJpdiwgQ01EX0FDVF9TRVQsIGFzc29jX3JlcSk7CiAJCWFzc29jX3JlcS0+ZmxhZ3MgPSBmbGFnczsKKworCQltZW1jcHkoJnByaXYtPndwYV9tY2FzdF9rZXksICZhc3NvY19yZXEtPndwYV9tY2FzdF9rZXksCisJCQkJc2l6ZW9mKHN0cnVjdCBlbmNfa2V5KSk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKaW5kZXggODExZmZjMy4uODkzYTU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtNDUsNiArNDUsOCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7CiAJc3NpemVfdCByZXM7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcG9zICs9IHNucHJpbnRmKGJ1Zitwb3MsIGxlbi1wb3MsICJzdGF0ZSA9ICVzXG4iLAogCQkJCXN6U3RhdGVzW3ByaXYtPmNvbm5lY3Rfc3RhdHVzXSk7CkBAIC02OCw2ICs3MCw4IEBACiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOwogCURFQ0xBUkVfU1NJRF9CVUYoc3NpZCk7CiAJc3RydWN0IGJzc19kZXNjcmlwdG9yICogaXRlcl9ic3M7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJcG9zICs9IHNucHJpbnRmKGJ1Zitwb3MsIGxlbi1wb3MsCiAJCSIjIHwgY2ggIHwgcnNzaSB8ICAgICAgIGJzc2lkICAgICAgIHwgICBjYXAgICAgfCBRdWFsIHwgU1NJRCBcbiIpOwpAQCAtMTEwLDYgKzExNCw4IEBACiAJaW50IHAxLCBwMiwgcDMsIHA0LCBwNSwgcDY7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkgewpAQCAtMTQ4LDYgKzE1NCw4IEBACiAJc3RydWN0IHNsZWVwX3BhcmFtcyBzcDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldCA9IGxic19jbWRfODAyXzExX3NsZWVwX3BhcmFtcyhwcml2LCBDTURfQUNUX0dFVCwgJnNwKTsKIAlpZiAocmV0KQpAQCAtNDMzLDYgKzQ0MSw4IEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCW9mZnZhbC5vZmZzZXQgPSBwcml2LT5tYWNfb2Zmc2V0OwogCW9mZnZhbC52YWx1ZSA9IDA7CkBAIC00NTcsNiArNDY3LDggQEAKIAlzc2l6ZV90IHJlcywgYnVmX3NpemU7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC00ODEsNiArNDkzLDggQEAKIAlzdHJ1Y3QgbGJzX29mZnNldF92YWx1ZSBvZmZ2YWw7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC01MTUsNiArNTI5LDggQEAKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAljaGFyICpidWYgPSAoY2hhciAqKWFkZHI7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJb2ZmdmFsLm9mZnNldCA9IHByaXYtPmJicF9vZmZzZXQ7CiAJb2ZmdmFsLnZhbHVlID0gMDsKQEAgLTU0MCw2ICs1NTYsOCBAQAogCXNzaXplX3QgcmVzLCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWJ1Zl9zaXplID0gbWluKGNvdW50LCBsZW4gLSAxKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsKQEAgLTU2NCw2ICs1ODIsOCBAQAogCXN0cnVjdCBsYnNfb2Zmc2V0X3ZhbHVlIG9mZnZhbDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWJ1Zl9zaXplID0gbWluKGNvdW50LCBsZW4gLSAxKTsKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsKQEAgLTU5OCw2ICs2MTgsOCBAQAogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlvZmZ2YWwub2Zmc2V0ID0gcHJpdi0+cmZfb2Zmc2V0OwogCW9mZnZhbC52YWx1ZSA9IDA7CkBAIC02MjMsNiArNjQ1LDggQEAKIAlzc2l6ZV90IHJlcywgYnVmX3NpemU7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC02NDcsNiArNjcxLDggQEAKIAlzdHJ1Y3QgbGJzX29mZnNldF92YWx1ZSBvZmZ2YWw7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKmJ1ZiA9IChjaGFyICopYWRkcjsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlidWZfc2l6ZSA9IG1pbihjb3VudCwgbGVuIC0gMSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1ZiwgYnVmX3NpemUpKSB7CkBAIC04NTMsNiArODc5LDggQEAKIAlzdHJ1Y3QgZGVidWdfZGF0YSAqZDsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJY2hhciAqYnVmID0gKGNoYXIgKilhZGRyOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXAgPSBidWY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlY2wuaAppbmRleCAwYjg0YmRjLi44YjE1MzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oCkBAIC02LDcgKzYsNyBAQAogI2lmbmRlZiBfTEJTX0RFQ0xfSF8KICNkZWZpbmUgX0xCU19ERUNMX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2luY2x1ZGUgImRlZnMuaCIKIApAQCAtNDEsNyArNDEsOCBAQAogaW50IGxic19wcm9jZXNzX2NvbW1hbmRfcmVzcG9uc2Uoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1OCAqZGF0YSwgdTMyIGxlbik7CiB2b2lkIGxic19jb21wbGV0ZV9jb21tYW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IGNtZF9jdHJsX25vZGUgKmNtZCwKIAkJCSAgaW50IHJlc3VsdCk7Ci1pbnQgbGJzX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGxic19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBsYnNfc2V0X3JlZ2lvbnRhYmxlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggcmVnaW9uLCB1OCBiYW5kKTsKIAogaW50IGxic19wcm9jZXNzX3J4ZWRfcGFja2V0KHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGY5ZWM2OWUuLmQzYjY5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSAiZGVmcy5oIgogI2luY2x1ZGUgImhvc3RjbWQuaCIKIAotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBsYnNfZXRodG9vbF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxic19ldGh0b29sX29wczsKIAogI2RlZmluZQlNQVhfQlNTSURfUEVSX0NIQU5ORUwJCTE2CiAKQEAgLTI2MCw3ICsyNjAsNiBAQAogCXUxNiBwc21vZGU7CQkvKiBXbGFuODAyXzExUG93ZXJtb2RlQ0FNPWRpc2FibGUKIAkJCQkgICBXbGFuODAyXzExUG93ZXJtb2RlTUFYX1BTUD1lbmFibGUgKi8KIAl1MzIgcHNzdGF0ZTsKLQljaGFyIHBzX3N1cHBvcnRlZDsKIAl1OCBuZWVkdG93YWtldXA7CiAKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIHBlbmRpbmdfYXNzb2NfcmVxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCmluZGV4IGIxMThhMzUuLjAzOWI1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCXJldHVybiBsYnNfaG9zdF9zbGVlcF9jZmcocHJpdiwgY3JpdGVyaWEsIChzdHJ1Y3Qgd29sX2NvbmZpZyAqKU5VTEwpOwogfQogCi1zdHJ1Y3QgZXRodG9vbF9vcHMgbGJzX2V0aHRvb2xfb3BzID0geworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxic19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBsYnNfZXRodG9vbF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2VlcHJvbSA9ICBsYnNfZXRodG9vbF9nZXRfZWVwcm9tLAogCS5nZXRfZWVwcm9tX2xlbiA9IGxic19ldGh0b29sX2dldF9lZXByb21fbGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKaW5kZXggMmE1YjA4My4uNjIzODE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCkBAIC01OSw2ICs1OSw3IEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2OwogCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdjsKIAl2b2lkIF9faW9tZW0gKmlvYmFzZTsKKwlib29sIGFsaWduX3JlZ3M7CiB9OwogCiAKQEAgLTI3NCwxNiArMjc1LDI1IEBACiAjZGVmaW5lIElGX0NTX1BST0RVQ1RfSUQJCTB4MDAwMDAwMUMKICNkZWZpbmUgSUZfQ1NfQ0Y4Mzg1X0IxX1JFVgkJMHgxMgogI2RlZmluZSBJRl9DU19DRjgzODFfQjNfUkVWCQkweDA0CisjZGVmaW5lIElGX0NTX0NGODMwNV9CMV9SRVYJCTB4MDMKIAogLyoKICAqIFVzZWQgdG8gZGV0ZWN0IG90aGVyIGNhcmRzIHRoYW4gQ0Y4Mzg1IHNpbmNlIHRoZWlyIHJldmlzaW9ucyBvZiBzaWxpY29uCiAgKiBkb2Vzbid0IG1hdGNoIHRob3NlIGZyb20gQ0Y4Mzg1LCBlZy4gQ0Y4MzgxIEIzIHdvcmtzIHdpdGggdGhpcyBkcml2ZXIuCiAgKi8KKyNkZWZpbmUgQ0Y4MzA1X01BTkZJRAkJMHgwMmRiCisjZGVmaW5lIENGODMwNV9DQVJESUQJCTB4ODEwMwogI2RlZmluZSBDRjgzODFfTUFORklECQkweDAyZGIKICNkZWZpbmUgQ0Y4MzgxX0NBUkRJRAkJMHg2MDY0CiAjZGVmaW5lIENGODM4NV9NQU5GSUQJCTB4MDJkZgogI2RlZmluZSBDRjgzODVfQ0FSRElECQkweDgxMDMKIAorc3RhdGljIGlubGluZSBpbnQgaWZfY3NfaHdfaXNfY2Y4MzA1KHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKK3sKKwlyZXR1cm4gKHBfZGV2LT5tYW5mX2lkID09IENGODMwNV9NQU5GSUQgJiYKKwkJcF9kZXYtPmNhcmRfaWQgPT0gQ0Y4MzA1X0NBUkRJRCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGlmX2NzX2h3X2lzX2NmODM4MShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7CiAJcmV0dXJuIChwX2Rldi0+bWFuZl9pZCA9PSBDRjgzODFfTUFORklEICYmCkBAIC01NTYsNyArNTY2LDE1IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ1MpOwogCi0Jc2NyYXRjaCA9IGlmX2NzX3JlYWQ4KGNhcmQsIElGX0NTX1NDUkFUQ0gpOworCS8qCisJICogVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSBhbiB1bmFsaWduZWQgcmVnaXN0ZXIgYWNjZXNzIGhhcHBlbnMgb24KKwkgKiB0aGUgQ0Y4MzA1IGNhcmQsIHRoZXJlZm9yZSBmb3IgdGhlIHNha2Ugb2Ygc3BlZWQgb2YgdGhlIGRyaXZlciwgd2UgZG8KKwkgKiB0aGUgYWxpZ25tZW50IGNvcnJlY3Rpb24gaGVyZS4KKwkgKi8KKwlpZiAoY2FyZC0+YWxpZ25fcmVncykKKwkJc2NyYXRjaCA9IGlmX2NzX3JlYWQxNihjYXJkLCBJRl9DU19TQ1JBVENIKSA+PiA4OworCWVsc2UKKwkJc2NyYXRjaCA9IGlmX2NzX3JlYWQ4KGNhcmQsIElGX0NTX1NDUkFUQ0gpOwogCiAJLyogIklmIHRoZSB2YWx1ZSBpcyAweDVhLCB0aGUgZmlybXdhcmUgaXMgYWxyZWFkeQogCSAqIGRvd25sb2FkZWQgc3VjY2Vzc2Z1bGx5IgpAQCAtODgwLDggKzg5OCwyNCBAQAogCSAgICAgICBwX2Rldi0+aXJxLkFzc2lnbmVkSVJRLCBwX2Rldi0+aW8uQmFzZVBvcnQxLAogCSAgICAgICBwX2Rldi0+aW8uQmFzZVBvcnQxICsgcF9kZXYtPmlvLk51bVBvcnRzMSAtIDEpOwogCisJLyoKKwkgKiBNb3N0IG9mIHRoZSBsaWJlcnRhcyBjYXJkcyBjYW4gZG8gdW5hbGlnbmVkIHJlZ2lzdGVyIGFjY2VzcywgYnV0IHNvbWUKKwkgKiB3ZWlyZCBvbmVzIGNhbiBub3QuIFRoYXQncyBlc3BlY2lhbGx5IHRydWUgZm9yIHRoZSBDRjgzMDUgY2FyZC4KKwkgKi8KKwljYXJkLT5hbGlnbl9yZWdzID0gMDsKKwogCS8qIENoZWNrIGlmIHdlIGhhdmUgYSBjdXJyZW50IHNpbGljb24gKi8KIAlwcm9kX2lkID0gaWZfY3NfcmVhZDgoY2FyZCwgSUZfQ1NfUFJPRFVDVF9JRCk7CisJaWYgKGlmX2NzX2h3X2lzX2NmODMwNShwX2RldikpIHsKKwkJY2FyZC0+YWxpZ25fcmVncyA9IDE7CisJCWlmIChwcm9kX2lkIDwgSUZfQ1NfQ0Y4MzA1X0IxX1JFVikgeworCQkJbGJzX3ByX2Vycigib2xkIGNoaXBzIGxpa2UgODMwNSByZXYgQjMgIgorCQkJCSJhcmVuJ3Qgc3VwcG9ydGVkXG4iKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIG91dDI7CisJCX0KKwl9CisKIAlpZiAoaWZfY3NfaHdfaXNfY2Y4MzgxKHBfZGV2KSAmJiBwcm9kX2lkIDwgSUZfQ1NfQ0Y4MzgxX0IzX1JFVikgewogCQlsYnNfcHJfZXJyKCJvbGQgY2hpcHMgbGlrZSA4MzgxIHJldiBCMyBhcmVuJ3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKQEAgLTg5Niw3ICs5MzAsNyBAQAogCiAJLyogTG9hZCB0aGUgZmlybXdhcmUgZWFybHksIGJlZm9yZSBjYWxsaW5nIGludG8gbGliZXJ0YXMua28gKi8KIAlyZXQgPSBpZl9jc19wcm9nX2hlbHBlcihjYXJkKTsKLQlpZiAocmV0ID09IDApCisJaWYgKHJldCA9PSAwICYmICFpZl9jc19od19pc19jZjgzMDUocF9kZXYpKQogCQlyZXQgPSBpZl9jc19wcm9nX3JlYWwoY2FyZCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQyOwpAQCAtOTMzLDkgKzk2Nyw2IEBACiAJCWdvdG8gb3V0MzsKIAl9CiAKLQkvKiBUaGUgZmlybXdhcmUgZm9yIHRoZSBDRiBjYXJkIHN1cHBvcnRzIHBvd2Vyc2F2ZSAqLwotCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7Ci0KIAlyZXQgPSAwOwogCWdvdG8gb3V0OwogCkBAIC05NzksNiArMTAxMCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBpZl9jc19pZHNbXSA9IHsKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRChDRjgzMDVfTUFORklELCBDRjgzMDVfQ0FSRElEKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRChDRjgzODFfTUFORklELCBDRjgzODFfQ0FSRElEKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRChDRjgzODVfTUFORklELCBDRjgzODVfQ0FSRElEKSwKIAlQQ01DSUFfREVWSUNFX05VTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKaW5kZXggOGNkYjg4Yy4uNDg1YThkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwpAQCAtMTAzOSw5ICsxMDM5LDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9hY3RpdmF0ZV9jYXJkOwogCi0JaWYgKHByaXYtPmZ3Y2FwaW5mbyAmIEZXX0NBUElORk9fUFMpCi0JCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7Ci0KIG91dDoKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsKIApAQCAtMTA5NiwxMSArMTA5MywxMSBAQAogCQkJbGJzX3ByX2FsZXJ0KCJDTURfRlVOQ19TSFVURE9XTiBjbWQgZmFpbGVkXG4iKTsKIAl9CiAKLQljYXJkLT5wcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOwogCiAJbGJzX2RlYl9zZGlvKCJjYWxsIHJlbW92ZSBjYXJkXG4iKTsKIAlsYnNfc3RvcF9jYXJkKGNhcmQtPnByaXYpOwogCWxic19yZW1vdmVfY2FyZChjYXJkLT5wcml2KTsKKwljYXJkLT5wcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOwogCiAJZmx1c2hfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CiAJZGVzdHJveV93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKaW5kZXggNjU2NDI4Mi4uNDQ2ZTMyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfU1BVX0JVU19NT0RFX1JFRywgJnJ2YWwpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JaWYgKHJ2YWwgIT0gbW9kZSkgeworCWlmICgocnZhbCAmIDB4RikgIT0gbW9kZSkgewogCQlsYnNfcHJfZXJyKCJDYW4ndCByZWFkIGJ1cyBtb2RlIHJlZ2lzdGVyLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTczNyw3ICs3MzcsNyBAQAogCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKGxlbiA+IE1SVkRSVl9FVEhfUlhfUEFDS0VUX0JVRkZFUl9TSVpFKSB7CiAJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgJWQgYnl0ZXMgb2YgZGF0YSwgYnV0ICIKLQkJCSAgICJvdXIgbWF4aW11bSBza2Igc2l6ZSBpcyAlbHVcbiIsCisJCQkgICAib3VyIG1heGltdW0gc2tiIHNpemUgaXMgJXp1XG4iLAogCQkJICAgX19mdW5jX18sIGxlbiwgTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKQEAgLTExMTgsNyArMTExOCw2IEBACiAJcHJpdi0+Y2FyZCA9IGNhcmQ7CiAJcHJpdi0+aHdfaG9zdF90b19jYXJkID0gaWZfc3BpX2hvc3RfdG9fY2FyZDsKIAlwcml2LT5md19yZWFkeSA9IDE7Ci0JcHJpdi0+cHNfc3VwcG9ydGVkID0gMTsKIAogCS8qIEluaXRpYWxpemUgaW50ZXJydXB0IGhhbmRsaW5nIHN0dWZmLiAqLwogCWNhcmQtPnJ1bl90aHJlYWQgPSAxOwpAQCAtMTE3MSwxMiArMTE3MCwxMyBAQAogCiAJbGJzX2RlYl9zcGkoImxpYmVydGFzX3NwaV9yZW1vdmVcbiIpOwogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOwotCXByaXYtPnN1cnByaXNlcmVtb3ZlZCA9IDE7CiAKIAlsYnNfc3RvcF9jYXJkKHByaXYpOworCWxic19yZW1vdmVfY2FyZChwcml2KTsgLyogd2lsbCBjYWxsIGZyZWVfbmV0ZGV2ICovCisKKwlwcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOwogCWZyZWVfaXJxKHNwaS0+aXJxLCBjYXJkKTsKIAlpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoY2FyZCk7Ci0JbGJzX3JlbW92ZV9jYXJkKHByaXYpOyAvKiB3aWxsIGNhbGwgZnJlZV9uZXRkZXYgKi8KIAlpZiAoY2FyZC0+cGRhdGEtPnRlYXJkb3duKQogCQljYXJkLT5wZGF0YS0+dGVhcmRvd24oc3BpKTsKIAlmcmVlX2lmX3NwaV9jYXJkKGNhcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwppbmRleCAxODQ0YzVhLi45MmJjOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl91c2IuYwpAQCAtMTgxLDEzICsxODEsMTQgQEAKIAl3YWtlX21ldGhvZC5hY3Rpb24gPSBjcHVfdG9fbGUxNihDTURfQUNUX0dFVCk7CiAJaWYgKGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX0ZXX1dBS0VfTUVUSE9ELCAmd2FrZV9tZXRob2QpKSB7CiAJCWxic19wcl9pbmZvKCJGaXJtd2FyZSBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgUFMgbW9kZVxuIik7CisJCXByaXYtPmZ3Y2FwaW5mbyAmPSB+RldfQ0FQSU5GT19QUzsKIAl9IGVsc2UgewogCQlpZiAobGUxNl90b19jcHUod2FrZV9tZXRob2QubWV0aG9kKSA9PSBDTURfV0FLRV9NRVRIT0RfQ09NTUFORF9JTlQpIHsKIAkJCWxic19kZWJfdXNiKCJGaXJtd2FyZSBzZWVtcyB0byBzdXBwb3J0IFBTIHdpdGggd2FrZS12aWEtY29tbWFuZFxuIik7Ci0JCQlwcml2LT5wc19zdXBwb3J0ZWQgPSAxOwogCQl9IGVsc2UgewogCQkJLyogVGhlIHZlcnNpb25zIHdoaWNoIGJvb3QgdXAgdGhpcyB3YXkgZG9uJ3Qgc2VlbSB0bwogCQkJICAgd29yayBldmVuIGlmIHdlIHNldCBpdCB0byB0aGUgY29tbWFuZCBpbnRlcnJ1cHQgKi8KKwkJCXByaXYtPmZ3Y2FwaW5mbyAmPSB+RldfQ0FQSU5GT19QUzsKIAkJCWxic19wcl9pbmZvKCJGaXJtd2FyZSBkb2Vzbid0IHdha2UgdmlhIGNvbW1hbmQgaW50ZXJydXB0OyBkaXNhYmxpbmcgUFMgbW9kZVxuIik7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKaW5kZXggODk1NzVlNC4uODdiNGU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwpAQCAtMTE3Niw3ICsxMTc2LDcgQEAKIAkvKiBBbGxvY2F0ZSBhbiBFdGhlcm5ldCBkZXZpY2UgYW5kIHJlZ2lzdGVyIGl0ICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBsYnNfcHJpdmF0ZSkpOwogCWlmICghZGV2KSB7Ci0JCWxic19wcl9lcnIoImluaXQgZXRoWCBkZXZpY2UgZmFpbGVkXG4iKTsKKwkJbGJzX3ByX2VycigiaW5pdCB3bGFuWCBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyMDQsNiArMTIwNCw3IEBACiAJU0VUX05FVERFVl9ERVYoZGV2LCBkbWRldik7CiAKIAlwcml2LT5ydGFwX25ldF9kZXYgPSBOVUxMOworCXN0cmNweShkZXYtPm5hbWUsICJ3bGFuJWQiKTsKIAogCWxic19kZWJfdGhyZWFkKCJTdGFydGluZyBtYWluIHRocmVhZC4uLlxuIik7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdHEpOwpAQCAtMTY0Niw3ICsxNjQ3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXJldHVybiBORVRERVZfVFhfQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCmluZGV4IDE2MGNmZDguLjRjMDE4ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYwpAQCAtNTcsMTkgKzU3LDE3IEBACiAgKiAgQHBhcmFtIHNrYiAgICAgQSBwb2ludGVyIHRvIHNrYiB3aGljaCBpbmNsdWRlcyBUWCBwYWNrZXQKICAqICBAcmV0dXJuIAkgICAwIG9yIC0xCiAgKi8KLWludCBsYnNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCBsYnNfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IHR4cGQgKnR4cGQ7CiAJY2hhciAqcDgwMnhfaGRyOwogCXVpbnQxNl90IHBrdF9sZW47Ci0JaW50IHJldDsKKwluZXRkZXZfdHhfdCByZXQgPSBORVRERVZfVFhfT0s7CiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfVFgpOwogCi0JcmV0ID0gTkVUREVWX1RYX09LOwotCiAJLyogV2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgdGhlIHF1ZXVlcyBiZWluZyByZXN0YXJ0ZWQgYmVmb3JlCiAJICAgd2UgZ2V0IHJvdW5kIHRvIHN0b3BwaW5nIHRoZW0gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCA4YmMxOTA3NC4uYmU4MzdhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwpAQCAtNzEyLDcgKzcxMiw3IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7CiAKLQlpZiAoIXByaXYtPnBzX3N1cHBvcnRlZCkgeworCWlmICghKHByaXYtPmZ3Y2FwaW5mbyAmIEZXX0NBUElORk9fUFMpKSB7CiAJCWlmICh2d3JxLT5kaXNhYmxlZCkKIAkJCXJldHVybiAwOwogCQllbHNlCkBAIC0xNzI4LDYgKzE3MjgsOCBAQAogCX0KIAogCXN3aXRjaCAoZHdycS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CiAJY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgogCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CiAJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYwppbmRleCAxMGE5OWUyLi4wMTk0MzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCkBAIC0zNjYsMTUgKzM2NiwzNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IGxidGZfb3BfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCit7CisJc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiA9IGh3LT5wcml2OworCWludCBpOworCisJaWYgKCFtY19jb3VudCB8fCBtY19jb3VudCA+IE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRSkKKwkJcmV0dXJuIG1jX2NvdW50OworCisJcHJpdi0+bnJfb2ZfbXVsdGljYXN0bWFjYWRkciA9IG1jX2NvdW50OworCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7CisJCWlmICghbWNsaXN0KQorCQkJYnJlYWs7CisJCW1lbWNweSgmcHJpdi0+bXVsdGljYXN0bGlzdFtpXSwgbWNsaXN0LT5kYV9hZGRyLAorCQkJCUVUSF9BTEVOKTsKKwkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OworCX0KKworCXJldHVybiBtY19jb3VudDsKK30KKwogI2RlZmluZSBTVVBQT1JURURfRklGX0ZMQUdTICAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX0FMTE1VTFRJKQogc3RhdGljIHZvaWQgbGJ0Zl9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQl1bnNpZ25lZCBpbnQgKm5ld19mbGFncywKLQkJCWludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCisJCQl1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgb2xkX21hY19jb250cm9sID0gcHJpdi0+bWFjX2NvbnRyb2w7Ci0JaW50IGk7CiAJY2hhbmdlZF9mbGFncyAmPSBTVVBQT1JURURfRklGX0ZMQUdTOwogCSpuZXdfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJRl9GTEFHUzsKIApAQCAtMzg2LDIwICs0MDYsMTIgQEAKIAllbHNlCiAJCXByaXYtPm1hY19jb250cm9sICY9IH5DTURfQUNUX01BQ19QUk9NSVNDVU9VU19FTkFCTEU7CiAJaWYgKCpuZXdfZmxhZ3MgJiAoRklGX0FMTE1VTFRJKSB8fAotCSAgICBtY19jb3VudCA+IE1SVkRSVl9NQVhfTVVMVElDQVNUX0xJU1RfU0laRSkgeworCSAgICBtdWx0aWNhc3QgPiBNUlZEUlZfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkUpIHsKIAkJcHJpdi0+bWFjX2NvbnRyb2wgfD0gQ01EX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEU7CiAJCXByaXYtPm1hY19jb250cm9sICY9IH5DTURfQUNUX01BQ19NVUxUSUNBU1RfRU5BQkxFOwotCX0gZWxzZSBpZiAobWNfY291bnQpIHsKKwl9IGVsc2UgaWYgKG11bHRpY2FzdCkgewogCQlwcml2LT5tYWNfY29udHJvbCB8PSBDTURfQUNUX01BQ19NVUxUSUNBU1RfRU5BQkxFOwogCQlwcml2LT5tYWNfY29udHJvbCAmPSB+Q01EX0FDVF9NQUNfQUxMX01VTFRJQ0FTVF9FTkFCTEU7Ci0JCXByaXYtPm5yX29mX211bHRpY2FzdG1hY2FkZHIgPSBtY19jb3VudDsKLQkJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKLQkJCWlmICghbWNsaXN0KQotCQkJCWJyZWFrOwotCQkJbWVtY3B5KCZwcml2LT5tdWx0aWNhc3RsaXN0W2ldLCBtY2xpc3QtPmRhX2FkZHIsCi0JCQkJCUVUSF9BTEVOKTsKLQkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKLQkJfQogCQlsYnRmX2NtZF9zZXRfbWFjX211bHRpY2FzdF9hZGRyKHByaXYpOwogCX0gZWxzZSB7CiAJCXByaXYtPm1hY19jb250cm9sICY9IH4oQ01EX0FDVF9NQUNfTVVMVElDQVNUX0VOQUJMRSB8CkBAIC00NjEsNiArNDczLDcgQEAKIAkuYWRkX2ludGVyZmFjZQkJPSBsYnRmX29wX2FkZF9pbnRlcmZhY2UsCiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBsYnRmX29wX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gbGJ0Zl9vcF9jb25maWcsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gbGJ0Zl9vcF9wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IGxidGZfb3BfY29uZmlndXJlX2ZpbHRlciwKIAkuYnNzX2luZm9fY2hhbmdlZAk9IGxidGZfb3BfYnNzX2luZm9fY2hhbmdlZCwKIH07CkBAIC01MDMsNyArNTE2LDggQEAKIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAl9CiAKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgc2tiLCAmc3RhdHMpOworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnN0YXRzLCBzaXplb2Yoc3RhdHMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgc2tiKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxidGZfcngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggNzkxNmNhMy4uODk2ZjUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC0xNSw2ICsxNSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxuZXQvZHN0Lmg+CisjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CkBAIC0zMTAsMTEgKzMxMiwxMiBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIAotc3RhdGljIGludCBod3NpbV9tb25feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGh3c2ltX21vbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJLyogVE9ETzogYWxsb3cgcGFja2V0IGluamVjdGlvbiAqLwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKQEAgLTQwNCwxMSArNDA3LDE5IEBACiAJcnhfc3RhdHVzLmZyZXEgPSBkYXRhLT5jaGFubmVsLT5jZW50ZXJfZnJlcTsKIAlyeF9zdGF0dXMuYmFuZCA9IGRhdGEtPmNoYW5uZWwtPmJhbmQ7CiAJcnhfc3RhdHVzLnJhdGVfaWR4ID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHg7Ci0JLyogVE9ETzogc2ltdWxhdGUgc2lnbmFsIHN0cmVuZ3RoIChhbmQgb3B0aW9uYWwgcGFja2V0IGRyb3ApICovCisJLyogVE9ETzogc2ltdWxhdGUgcmVhbCBzaWduYWwgc3RyZW5ndGggKGFuZCBvcHRpb25hbCBwYWNrZXQgbG9zcykgKi8KKwlyeF9zdGF0dXMuc2lnbmFsID0gLTUwOwogCiAJaWYgKGRhdGEtPnBzICE9IFBTX0RJU0FCTEVEKQogCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOwogCisJLyogcmVsZWFzZSB0aGUgc2tiJ3Mgc291cmNlIGluZm8gKi8KKwlza2Jfb3JwaGFuKHNrYik7CisJc2tiX2RzdF9kcm9wKHNrYik7CisJc2tiLT5tYXJrID0gMDsKKwlzZWNwYXRoX3Jlc2V0KHNrYik7CisJbmZfcmVzZXQoc2tiKTsKKwogCS8qIENvcHkgc2tiIHRvIGFsbCBlbmFibGVkIHJhZGlvcyB0aGF0IGFyZSBvbiB0aGUgY3VycmVudCBmcmVxdWVuY3kgKi8KIAlzcGluX2xvY2soJmh3c2ltX3JhZGlvX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGF0YTIsICZod3NpbV9yYWRpb3MsIGxpc3QpIHsKQEAgLTQzMCw3ICs0NDEsOCBAQAogCQlpZiAobWVtY21wKGhkci0+YWRkcjEsIGRhdGEyLT5ody0+d2lwaHktPnBlcm1fYWRkciwKIAkJCSAgIEVUSF9BTEVOKSA9PSAwKQogCQkJYWNrID0gdHJ1ZTsKLQkJaWVlZTgwMjExX3J4X2lycXNhZmUoZGF0YTItPmh3LCBuc2tiLCAmcnhfc3RhdHVzKTsKKwkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihuc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOworCQlpZWVlODAyMTFfcnhfaXJxc2FmZShkYXRhMi0+aHcsIG5za2IpOwogCX0KIAlzcGluX3VubG9jaygmaHdzaW1fcmFkaW9fbG9jayk7CiAKQEAgLTU3MSw5ICs1ODMsNyBAQAogCiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJCSAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCQkgICAgaW50IG1jX2NvdW50LAotCQkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLHU2NCBtdWx0aWNhc3QpCiB7CiAJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEgPSBody0+cHJpdjsKIApAQCAtNjkwLDYgKzcwMCw3NCBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREUKKy8qCisgKiBUaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZSBjb2RlIGZvciB1c2luZyBuZXRsaW5rCisgKiBhdHRyaWJ1dGVzIHdpdGggdGhlIHRlc3Rtb2RlIGNvbW1hbmQgaW4gbmw4MDIxMS4KKyAqLworCisvKiBUaGVzZSBlbnVtcyBuZWVkIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIHVzZXJzcGFjZSAqLworZW51bSBod3NpbV90ZXN0bW9kZV9hdHRyIHsKKwlfX0hXU0lNX1RNX0FUVFJfSU5WQUxJRAk9IDAsCisJSFdTSU1fVE1fQVRUUl9DTUQJPSAxLAorCUhXU0lNX1RNX0FUVFJfUFMJPSAyLAorCisJLyoga2VlcCBsYXN0ICovCisJX19IV1NJTV9UTV9BVFRSX0FGVEVSX0xBU1QsCisJSFdTSU1fVE1fQVRUUl9NQVgJPSBfX0hXU0lNX1RNX0FUVFJfQUZURVJfTEFTVCAtIDEKK307CisKK2VudW0gaHdzaW1fdGVzdG1vZGVfY21kIHsKKwlIV1NJTV9UTV9DTURfU0VUX1BTCQk9IDAsCisJSFdTSU1fVE1fQ01EX0dFVF9QUwkJPSAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGh3c2ltX3Rlc3Rtb2RlX3BvbGljeVtIV1NJTV9UTV9BVFRSX01BWCArIDFdID0geworCVtIV1NJTV9UTV9BVFRSX0NNRF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtIV1NJTV9UTV9BVFRSX1BTXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCit9OworCitzdGF0aWMgaW50IGh3c2ltX2ZvcHNfcHNfd3JpdGUodm9pZCAqZGF0LCB1NjQgdmFsKTsKKworc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV90ZXN0bW9kZV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmh3c2ltID0gaHctPnByaXY7CisJc3RydWN0IG5sYXR0ciAqdGJbSFdTSU1fVE1fQVRUUl9NQVggKyAxXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnIsIHBzOworCisJZXJyID0gbmxhX3BhcnNlKHRiLCBIV1NJTV9UTV9BVFRSX01BWCwgZGF0YSwgbGVuLAorCQkJaHdzaW1fdGVzdG1vZGVfcG9saWN5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCF0YltIV1NJTV9UTV9BVFRSX0NNRF0pCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChubGFfZ2V0X3UzMih0YltIV1NJTV9UTV9BVFRSX0NNRF0pKSB7CisJY2FzZSBIV1NJTV9UTV9DTURfU0VUX1BTOgorCQlpZiAoIXRiW0hXU0lNX1RNX0FUVFJfUFNdKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBzID0gbmxhX2dldF91MzIodGJbSFdTSU1fVE1fQVRUUl9QU10pOworCQlyZXR1cm4gaHdzaW1fZm9wc19wc193cml0ZShod3NpbSwgcHMpOworCWNhc2UgSFdTSU1fVE1fQ01EX0dFVF9QUzoKKwkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKGh3LT53aXBoeSwKKwkJCQkJCW5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSk7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCU5MQV9QVVRfVTMyKHNrYiwgSFdTSU1fVE1fQVRUUl9QUywgaHdzaW0tPnBzKTsKKwkJcmV0dXJuIGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHNrYik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworIG5sYV9wdXRfZmFpbHVyZToKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisjZW5kaWYKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG1hYzgwMjExX2h3c2ltX29wcyA9CiB7CiAJLnR4ID0gbWFjODAyMTFfaHdzaW1fdHgsCkBAIC03MDMsNiArNzgxLDcgQEAKIAkuc3RhX25vdGlmeSA9IG1hYzgwMjExX2h3c2ltX3N0YV9ub3RpZnksCiAJLnNldF90aW0gPSBtYWM4MDIxMV9od3NpbV9zZXRfdGltLAogCS5jb25mX3R4ID0gbWFjODAyMTFfaHdzaW1fY29uZl90eCwKKwlDRkc4MDIxMV9URVNUTU9ERV9DTUQobWFjODAyMTFfaHdzaW1fdGVzdG1vZGVfY21kKQogfTsKIAogCkBAIC03NTcsNyArODM2LDYgQEAKIHsKIAlzdHJ1Y3QgbWFjODAyMTFfaHdzaW1fZGF0YSAqZGF0YSA9IGRhdDsKIAlzdHJ1Y3QgaHdzaW1fdmlmX3ByaXYgKnZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwotCURFQ0xBUkVfTUFDX0JVRihidWYpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKnBzcG9sbDsKIApAQCAtNzg3LDcgKzg2NSw2IEBACiAJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgaW50IHBzKQogewogCXN0cnVjdCBod3NpbV92aWZfcHJpdiAqdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7Ci0JREVDTEFSRV9NQUNfQlVGKGJ1Zik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCkBAIC05NDUsNyArMTAyMiw4IEBACiAJCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKIAkJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKIAotCQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU7CisJCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSB8CisJCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CiAKIAkJLyogYXNrIG1hYzgwMjExIHRvIHJlc2VydmUgc3BhY2UgZm9yIG1hZ2ljICovCiAJCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV92aWZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwppbmRleCA4Mzk2N2FmLi43NDY1MzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKQEAgLTEsNyArMSw4IEBACiAvKgotICogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBkcml2ZXIgZm9yIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSBXaXJlbGVzcyBjYXJkcworICogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYworICogRHJpdmVyIGZvciBNYXJ2ZWxsIFRPUERPRyA4MDIuMTEgV2lyZWxlc3MgY2FyZHMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvciBJbmMuCiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CkBAIC0yNCw3ICsyNSw3IEBACiAKICNkZWZpbmUgTVdMOEtfREVTQwkiTWFydmVsbCBUT1BET0coUikgODAyLjExIFdpcmVsZXNzIE5ldHdvcmsgRHJpdmVyIgogI2RlZmluZSBNV0w4S19OQU1FCUtCVUlMRF9NT0ROQU1FCi0jZGVmaW5lIE1XTDhLX1ZFUlNJT04JIjAuOS4xIgorI2RlZmluZSBNV0w4S19WRVJTSU9OCSIwLjEwIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oTVdMOEtfREVTQyk7CiBNT0RVTEVfVkVSU0lPTihNV0w4S19WRVJTSU9OKTsKQEAgLTM4LDE2ICszOSwxNCBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtd2w4a190YWJsZSk7CiAKLSNkZWZpbmUgSUVFRTgwMjExX0FERFJfTEVOCQkJRVRIX0FMRU4KLQogLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTVdMOEtfSElVX0dFTl9QVFIJCQkweDAwMDAwYzEwCi0jZGVmaW5lICBNV0w4S19NT0RFX1NUQQkJCQkweDAwMDAwMDVhCi0jZGVmaW5lICBNV0w4S19NT0RFX0FQCQkJCTB4MDAwMDAwYTUKKyNkZWZpbmUgIE1XTDhLX01PREVfU1RBCQkJCSAweDAwMDAwMDVhCisjZGVmaW5lICBNV0w4S19NT0RFX0FQCQkJCSAweDAwMDAwMGE1CiAjZGVmaW5lIE1XTDhLX0hJVV9JTlRfQ09ERQkJCTB4MDAwMDBjMTQKLSNkZWZpbmUgIE1XTDhLX0ZXU1RBX1JFQURZCQkJMHhmMGYxZjJmNAotI2RlZmluZSAgTVdMOEtfRldBUF9SRUFEWQkJCTB4ZjFmMmY0YTUKLSNkZWZpbmUgIE1XTDhLX0lOVF9DT0RFX0NNRF9GSU5JU0hFRAkJMHgwMDAwMDAwNQorI2RlZmluZSAgTVdMOEtfRldTVEFfUkVBRFkJCQkgMHhmMGYxZjJmNAorI2RlZmluZSAgTVdMOEtfRldBUF9SRUFEWQkJCSAweGYxZjJmNGE1CisjZGVmaW5lICBNV0w4S19JTlRfQ09ERV9DTURfRklOSVNIRUQJCSAweDAwMDAwMDA1CiAjZGVmaW5lIE1XTDhLX0hJVV9TQ1JBVENICQkJMHgwMDAwMGM0MAogCiAvKiBIb3N0LT5kZXZpY2UgY29tbXVuaWNhdGlvbnMgKi8KQEAgLTU2LDExICs1NSwxMCBAQAogI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9NQVNLCQkweDAwMDAwYzIwCiAjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0NMRUFSX1NFTAkweDAwMDAwYzI0CiAjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX1NUQVRVU19NQVNLCTB4MDAwMDBjMjgKLSNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRFVNTVkJCQkoMSA8PCAyMCkKLSNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfUkVTRVQJCQkoMSA8PCAxNSkKLSNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfUFMJCQkoMSA8PCAyKQotI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9ET09SQkVMTAkJCSgxIDw8IDEpCi0jZGVmaW5lICBNV0w4S19IMkFfSU5UX1BQQV9SRUFEWQkJKDEgPDwgMCkKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfRFVNTVkJCQkgKDEgPDwgMjApCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX1JFU0VUCQkJICgxIDw8IDE1KQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9ET09SQkVMTAkJCSAoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9QUEFfUkVBRFkJCSAoMSA8PCAwKQogCiAvKiBEZXZpY2UtPmhvc3QgY29tbXVuaWNhdGlvbnMgKi8KICNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfRVZFTlRTCQkweDAwMDAwYzJjCkBAIC02OCwxNiArNjYsMTYgQEAKICNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSwkJMHgwMDAwMGMzNAogI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9DTEVBUl9TRUwJMHgwMDAwMGMzOAogI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSwkweDAwMDAwYzNjCi0jZGVmaW5lICBNV0w4S19BMkhfSU5UX0RVTU1ZCQkJKDEgPDwgMjApCi0jZGVmaW5lICBNV0w4S19BMkhfSU5UX0NITkxfU1dJVENIRUQJCSgxIDw8IDExKQotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9RVUVVRV9FTVBUWQkJKDEgPDwgMTApCi0jZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBREFSX0RFVEVDVAkJKDEgPDwgNykKLSNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFESU9fT04JCQkoMSA8PCA2KQotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURJT19PRkYJCSgxIDw8IDUpCi0jZGVmaW5lICBNV0w4S19BMkhfSU5UX01BQ19FVkVOVAkJKDEgPDwgMykKLSNkZWZpbmUgIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUJCQkoMSA8PCAyKQotI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWQkJCSgxIDw8IDEpCi0jZGVmaW5lICBNV0w4S19BMkhfSU5UX1RYX0RPTkUJCQkoMSA8PCAwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9EVU1NWQkJCSAoMSA8PCAyMCkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfQ0hOTF9TV0lUQ0hFRAkJICgxIDw8IDExKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9RVUVVRV9FTVBUWQkJICgxIDw8IDEwKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURBUl9ERVRFQ1QJCSAoMSA8PCA3KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURJT19PTgkJCSAoMSA8PCA2KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURJT19PRkYJCSAoMSA8PCA1KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9NQUNfRVZFTlQJCSAoMSA8PCAzKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9PUENfRE9ORQkJCSAoMSA8PCAyKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWQkJCSAoMSA8PCAxKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9UWF9ET05FCQkJICgxIDw8IDApCiAKICNkZWZpbmUgTVdMOEtfQTJIX0VWRU5UUwkoTVdMOEtfQTJIX0lOVF9EVU1NWSB8IFwKIAkJCQkgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVEIHwgXApAQCAtMTEzLDE3ICsxMTEsNiBAQAogCXN0cnVjdCBza19idWZmICoqcnhfc2tiOwogfTsKIAotc3RydWN0IG13bDhrX3NrYiB7Ci0JLyoKLQkgKiBUaGUgRE1BIGVuZ2luZSByZXF1aXJlcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgcGF5bG9hZC4KLQkgKiBJZiB0aGUgc2tidWZmIGlzIHNoYXJlZC9jbG9uZWQsIGl0IG5lZWRzIHRvIGJlIHVuc2hhcmVkLgotCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZW5zdXJlIHRoZSBzdGFjayBhbHdheXMgZ2V0cyBiYWNrCi0JICogdGhlIHNrYnVmZiBpdCBzZW50IGZvciB0cmFuc21pc3Npb24uCi0JICovCi0Jc3RydWN0IHNrX2J1ZmYgKmNsb25lOwotCXN0cnVjdCBza19idWZmICpza2I7Ci19OwotCiBzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgewogCS8qIGh3IHRyYW5zbWl0cyBoZXJlICovCiAJaW50IHR4X2hlYWQ7CkBAIC0xMzQsNyArMTIxLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzOwogCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjX2FyZWE7CiAJZG1hX2FkZHJfdCB0eF9kZXNjX2RtYTsKLQlzdHJ1Y3QgbXdsOGtfc2tiICp0eF9za2I7CisJc3RydWN0IHNrX2J1ZmYgKip0eF9za2I7CiB9OwogCiAvKiBQb2ludGVycyB0byB0aGUgZmlybXdhcmUgZGF0YSBhbmQgbWV0YSBpbmZvcm1hdGlvbiBhYm91dCBpdC4gICovCkBAIC0xNTIsMTkgKzEzOSwyMiBAQAogCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJdTggbmFtZVsxNl07Ci0JLyogZmlybXdhcmUgYWNjZXNzIGxvY2sgKi8KLQlzcGlubG9ja190IGZ3X2xvY2s7CiAKIAkvKiBmaXJtd2FyZSBmaWxlcyBhbmQgbWV0YSBkYXRhICovCiAJc3RydWN0IG13bDhrX2Zpcm13YXJlIGZ3OwogCXUzMiBwYXJ0X251bTsKIAorCS8qIGZpcm13YXJlIGFjY2VzcyAqLworCXN0cnVjdCBtdXRleCBmd19tdXRleDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZ3X211dGV4X293bmVyOworCWludCBmd19tdXRleF9kZXB0aDsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqdHhfd2FpdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqaG9zdGNtZF93YWl0OworCiAJLyogbG9jayBoZWxkIG92ZXIgVFggYW5kIFRYIHJlYXAgKi8KIAlzcGlubG9ja190IHR4X2xvY2s7Ci0JdTMyIGludF9tYXNrOwogCiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHZpZl9saXN0OwogCiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjdXJyZW50X2NoYW5uZWw7CiAKQEAgLTE3MywxMCArMTYzLDggQEAKIAlkbWFfYWRkcl90IGNvb2tpZV9kbWE7CiAKIAl1MTYgbnVtX21jYWRkcnM7Ci0JdTE2IHJlZ2lvbl9jb2RlOwogCXU4IGh3X3JldjsKLQlfX2xlMzIgZndfcmV2OwotCXUzMiB3ZXBfZW5hYmxlZDsKKwl1MzIgZndfcmV2OwogCiAJLyoKIAkgKiBSdW5uaW5nIGNvdW50IG9mIFRYIHBhY2tldHMgaW4gZmxpZ2h0LCB0byBhdm9pZApAQCAtMTkyLDE5ICsxODAsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbMTRdOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc1sxMl07CiAKLQkvKiBSRiBwcmVhbWJsZTogU2hvcnQsIExvbmcgb3IgQXV0byAqLwotCXU4CXJhZGlvX3ByZWFtYmxlOwotCXU4CXJhZGlvX3N0YXRlOwotCi0JLyogV01NIE1PREUgMSBmb3IgZW5hYmxlZDsgMCBmb3IgZGlzYWJsZWQgKi8KLQlib29sIHdtbV9tb2RlOwotCi0JLyogU2V0IGlmIFBIWSBjb25maWcgaXMgaW4gcHJvZ3Jlc3MgKi8KLQlib29sIGluY29uZmlnOworCWJvb2wgcmFkaW9fb247CisJYm9vbCByYWRpb19zaG9ydF9wcmVhbWJsZTsKKwlib29sIHdtbV9lbmFibGVkOwogCiAJLyogWFhYIG5lZWQgdG8gY29udmVydCB0aGlzIHRvIGhhbmRsZSBtdWx0aXBsZSBpbnRlcmZhY2VzICovCiAJYm9vbCBjYXB0dXJlX2JlYWNvbjsKLQl1OCBjYXB0dXJlX2Jzc2lkW0lFRUU4MDIxMV9BRERSX0xFTl07CisJdTggY2FwdHVyZV9ic3NpZFtFVEhfQUxFTl07CiAJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbl9za2I7CiAKIAkvKgpAQCAtMjIwLDE0ICsyMDIsMTAgQEAKIAogCS8qIFdvcmsgdGhyZWFkIHRvIHNlcmlhbGl6ZSBjb25maWd1cmF0aW9uIHJlcXVlc3RzICovCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNvbmZpZ193cTsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqaG9zdGNtZF93YWl0OwotCXN0cnVjdCBjb21wbGV0aW9uICp0eF93YWl0OwogfTsKIAogLyogUGVyIGludGVyZmFjZSBzcGVjaWZpYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCBtd2w4a192aWYgewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQogCS8qIGJhY2twb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKIApAQCAtMjM1LDggKzIxMyw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiBic3NfaW5mbzsKIAogCS8qIEJTU0lEIG9mIEFQIG9yIElCU1MgKi8KLQl1OAlic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOwotCXU4CW1hY19hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJdTgJYnNzaWRbRVRIX0FMRU5dOworCXU4CW1hY19hZGRyW0VUSF9BTEVOXTsKIAogCS8qCiAJICogU3Vic2V0IG9mIHN1cHBvcnRlZCBsZWdhY3kgcmF0ZXMuCkBAIC0yNDcsMTggKzIyNSwxMSBAQAogCS8qIG51bWJlciBvZiBzdXBwb3J0ZWQgbGVnYWN5IHJhdGVzICovCiAJdTgJbGVnYWN5X25yYXRlczsKIAotCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgTUNTIHJhdGVzLiBXb3JrIGluIHByb2dyZXNzICovCi0JdTgJbWNzX25yYXRlczsKLQogCSAvKiBJbmRleCBpbnRvIHN0YXRpb24gZGF0YWJhc2UuUmV0dXJuZWQgYnkgdXBkYXRlX3N0YV9kYiBjYWxsICovCiAJdTgJcGVlcl9pZDsKIAogCS8qIE5vbiBBTVBEVSBzZXF1ZW5jZSBudW1iZXIgYXNzaWduZWQgYnkgZHJpdmVyICovCiAJdTE2CXNlcW5vOwotCi0JLyogTm90ZTpUaGVyZSBpcyBubyBjaGFubmVsIGluZm8sCi0JICogcmVmZXIgdG8gdGhlIG1hc3RlciBjaGFubmVsIGluZm8gaW4gcHJpdgotCSAqLwogfTsKIAogI2RlZmluZSBNV0w4S19WSUYoX3ZpZikgKChzdHJ1Y3QgbXdsOGtfdmlmICopJigoX3ZpZiktPmRydl9wcml2KSkKQEAgLTI5MiwyOCArMjYzLDYgQEAKIAl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMDgsIH0sCiB9OwogCi0vKiBSYWRpbyBzZXR0aW5ncyAqLwotI2RlZmluZSBNV0w4S19SQURJT19GT1JDRQkJMHgyCi0jZGVmaW5lIE1XTDhLX1JBRElPX0VOQUJMRQkJMHgxCi0jZGVmaW5lIE1XTDhLX1JBRElPX0RJU0FCTEUJCTB4MAotI2RlZmluZSBNV0w4S19SQURJT19BVVRPX1BSRUFNQkxFCTB4MDAwNQotI2RlZmluZSBNV0w4S19SQURJT19TSE9SVF9QUkVBTUJMRQkweDAwMDMKLSNkZWZpbmUgTVdMOEtfUkFESU9fTE9OR19QUkVBTUJMRQkweDAwMDEKLQotLyogV01NICovCi0jZGVmaW5lIE1XTDhLX1dNTV9FTkFCTEUJCTEKLSNkZWZpbmUgTVdMOEtfV01NX0RJU0FCTEUJCTAKLQotI2RlZmluZSBNV0w4S19SQURJT19ERUZBVUxUX1BSRUFNQkxFCU1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUKLQotLyogU2xvdCB0aW1lICovCi0KLS8qIFNob3J0IFNsb3Q6IDl1cyBzbG90IHRpbWUgKi8KLSNkZWZpbmUgTVdMOEtfU0hPUlRfU0xPVFRJTUUJCTEKLQotLyogTG9uZyBzbG90OiAyMHVzIHNsb3QgdGltZSAqLwotI2RlZmluZSBNV0w4S19MT05HX1NMT1RUSU1FCQkwCi0KIC8qIFNldCBvciBnZXQgaW5mbyBmcm9tIEZpcm13YXJlICovCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVQJCQkweDAwMDEKICNkZWZpbmUgTVdMOEtfQ01EX0dFVAkJCTB4MDAwMApAQCAtMzIzLDI1ICsyNzIsMjMgQEAKICNkZWZpbmUgTVdMOEtfQ01EX0dFVF9IV19TUEVDCQkweDAwMDMKICNkZWZpbmUgTVdMOEtfQ01EX01BQ19NVUxUSUNBU1RfQURSCTB4MDAxMAogI2RlZmluZSBNV0w4S19DTURfR0VUX1NUQVQJCTB4MDAxNAotI2RlZmluZSBNV0w4S19DTURfUkFESU9fQ09OVFJPTAkJMHgwMDFDCi0jZGVmaW5lIE1XTDhLX0NNRF9SRl9UWF9QT1dFUgkJMHgwMDFFCisjZGVmaW5lIE1XTDhLX0NNRF9SQURJT19DT05UUk9MCQkweDAwMWMKKyNkZWZpbmUgTVdMOEtfQ01EX1JGX1RYX1BPV0VSCQkweDAwMWUKICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9QUkVfU0NBTgkJMHgwMTA3CiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOCQkweDAxMDgKLSNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMCTB4MDEwQQotI2RlZmluZSBNV0w4S19DTURfU0VUX1NMT1QJCTB4MDExNAotI2RlZmluZSBNV0w4S19DTURfTUlNT19DT05GSUcJCTB4MDEyNQotI2RlZmluZSBNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIJMHgwMTUwCi0jZGVmaW5lIE1XTDhLX0NNRF9TRVRfV01NX01PREUJCTB4MDEyMwotI2RlZmluZSBNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TCTB4MDExNQotI2RlZmluZSBNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4JMHgwMTExCi0jZGVmaW5lIE1XTDhLX0NNRF9VUERBVEVfU1RBREIJCTB4MTEyMwotI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFCTB4MDIwMwotI2RlZmluZSBNV0w4S19DTURfU0VUX0xJTktBREFQVF9NT0RFCTB4MDEyOQorI2RlZmluZSBNV0w4S19DTURfU0VUX1JGX0NIQU5ORUwJMHgwMTBhCiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfQUlECQkweDAxMGQKICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SQVRFCQkweDAxMTAKLSNkZWZpbmUgTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFCTB4MDEyNgorI2RlZmluZSBNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4JMHgwMTExCiAjZGVmaW5lIE1XTDhLX0NNRF9SVFNfVEhSRVNIT0xECQkweDAxMTMKLSNkZWZpbmUgTVdMOEtfQ01EX0VOQ1JZUFRJT04JCTB4MTEyMgorI2RlZmluZSBNV0w4S19DTURfU0VUX1NMT1QJCTB4MDExNAorI2RlZmluZSBNV0w4S19DTURfU0VUX0VEQ0FfUEFSQU1TCTB4MDExNQorI2RlZmluZSBNV0w4S19DTURfU0VUX1dNTV9NT0RFCQkweDAxMjMKKyNkZWZpbmUgTVdMOEtfQ01EX01JTU9fQ09ORklHCQkweDAxMjUKKyNkZWZpbmUgTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFCTB4MDEyNgorI2RlZmluZSBNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIJMHgwMTUwCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkFURUFEQVBUX01PREUJMHgwMjAzCisjZGVmaW5lIE1XTDhLX0NNRF9VUERBVEVfU1RBREIJCTB4MTEyMwogCiBzdGF0aWMgY29uc3QgY2hhciAqbXdsOGtfY21kX25hbWUodTE2IGNtZCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKIHsKQEAgLTM0OSw3ICsyOTYsNyBAQAogCQkJCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICIlcyIsICN4KTtcCiAJCQkJCXJldHVybiBidWY7XAogCQkJCQl9IHdoaWxlICgwKQotCXN3aXRjaCAoY21kICYgKH4weDgwMDApKSB7CisJc3dpdGNoIChjbWQgJiB+MHg4MDAwKSB7CiAJCU1XTDhLX0NNRE5BTUUoQ09ERV9ETkxEKTsKIAkJTVdMOEtfQ01ETkFNRShHRVRfSFdfU1BFQyk7CiAJCU1XTDhLX0NNRE5BTUUoTUFDX01VTFRJQ0FTVF9BRFIpOwpAQCAtMzU5LDIwICszMDYsMTggQEAKIAkJTVdMOEtfQ01ETkFNRShTRVRfUFJFX1NDQU4pOwogCQlNV0w4S19DTUROQU1FKFNFVF9QT1NUX1NDQU4pOwogCQlNV0w4S19DTUROQU1FKFNFVF9SRl9DSEFOTkVMKTsKLQkJTVdMOEtfQ01ETkFNRShTRVRfU0xPVCk7Ci0JCU1XTDhLX0NNRE5BTUUoTUlNT19DT05GSUcpOwotCQlNV0w4S19DTUROQU1FKEVOQUJMRV9TTklGRkVSKTsKLQkJTVdMOEtfQ01ETkFNRShTRVRfV01NX01PREUpOwotCQlNV0w4S19DTUROQU1FKFNFVF9FRENBX1BBUkFNUyk7Ci0JCU1XTDhLX0NNRE5BTUUoU0VUX0ZJTkFMSVpFX0pPSU4pOwotCQlNV0w4S19DTUROQU1FKFVQREFURV9TVEFEQik7Ci0JCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEVBREFQVF9NT0RFKTsKLQkJTVdMOEtfQ01ETkFNRShTRVRfTElOS0FEQVBUX01PREUpOwogCQlNV0w4S19DTUROQU1FKFNFVF9BSUQpOwogCQlNV0w4S19DTUROQU1FKFNFVF9SQVRFKTsKLQkJTVdMOEtfQ01ETkFNRShVU0VfRklYRURfUkFURSk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0ZJTkFMSVpFX0pPSU4pOwogCQlNV0w4S19DTUROQU1FKFJUU19USFJFU0hPTEQpOwotCQlNV0w4S19DTUROQU1FKEVOQ1JZUFRJT04pOworCQlNV0w4S19DTUROQU1FKFNFVF9TTE9UKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfRURDQV9QQVJBTVMpOworCQlNV0w4S19DTUROQU1FKFNFVF9XTU1fTU9ERSk7CisJCU1XTDhLX0NNRE5BTUUoTUlNT19DT05GSUcpOworCQlNV0w4S19DTUROQU1FKFVTRV9GSVhFRF9SQVRFKTsKKwkJTVdMOEtfQ01ETkFNRShFTkFCTEVfU05JRkZFUik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEVBREFQVF9NT0RFKTsKKwkJTVdMOEtfQ01ETkFNRShVUERBVEVfU1RBREIpOwogCWRlZmF1bHQ6CiAJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIjB4JXgiLCBjbWQpOwogCX0KQEAgLTQ2Niw3ICs0MTEsNiBAQAogewogCXZvaWQgX19pb21lbSAqcmVncyA9IHByaXYtPnJlZ3M7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKLQlpbnQgcmM7CiAJaW50IGxvb3BzOwogCiAJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBkYXRhLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtNDgwLDcgKzQyNCw2IEBACiAJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRFVNTVksCiAJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOwogCi0JcmMgPSAtRVRJTUVET1VUOwogCWxvb3BzID0gMTAwMDsKIAlkbyB7CiAJCXUzMiBpbnRfY29kZTsKQEAgLTQ4OCw3ICs0MzEsNiBAQAogCQlpbnRfY29kZSA9IGlvcmVhZDMyKHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOwogCQlpZiAoaW50X2NvZGUgPT0gTVdMOEtfSU5UX0NPREVfQ01EX0ZJTklTSEVEKSB7CiAJCQlpb3dyaXRlMzIoMCwgcmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7Ci0JCQlyYyA9IDA7CiAJCQlicmVhazsKIAkJfQogCkBAIC00OTcsMjYgKzQzOSw3IEBACiAKIAlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCi0JLyoKLQkgKiBDbGVhciAnY29tbWFuZCBkb25lJyBpbnRlcnJ1cHQgYml0LgotCSAqLwotCWxvb3BzID0gMTAwMDsKLQlkbyB7Ci0JCXUzMiBzdGF0dXM7Ci0KLQkJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArCi0JCQkJTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUpIHsKLQkJCWlvd3JpdGUzMih+TVdMOEtfQTJIX0lOVF9PUENfRE9ORSwKLQkJCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJCWlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQl1ZGVsYXkoMSk7Ci0JfSB3aGlsZSAoLS1sb29wcyk7Ci0KLQlyZXR1cm4gcmM7CisJcmV0dXJuIGxvb3BzID8gMCA6IC1FVElNRURPVVQ7CiB9CiAKIHN0YXRpYyBpbnQgbXdsOGtfbG9hZF9md19pbWFnZShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKQEAgLTY4MSwxMSArNjA0LDkgQEAKIAogLyogUGVlciBFbnRyeSBmbGFncyAtIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBwZWVyIG5vZGUgKi8KICNkZWZpbmUgTVdMOEtfUEVFUl9UWVBFX0FDQ0VTU1BPSU5UCTIKLSNkZWZpbmUgTVdMOEtfUEVFUl9UWVBFX0FESE9DX1NUQVRJT04JNAogCiAjZGVmaW5lIE1XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVMJMTIKICNkZWZpbmUgTVdMOEtfTUNTX0JJVE1BUF9TSVpFCQkxNgotI2RlZmluZSBwYWRfc2l6ZQkJCTE2CiAKIHN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyB7CiAJLyogUGVlciB0eXBlIC0gQVAgdnMuIFNUQS4gICovCkBAIC03MDcsNyArNjI4LDcgQEAKIAogCS8qIEhUIHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLwogCV9fdTgJaHRfcmF0ZXNbTVdMOEtfTUNTX0JJVE1BUF9TSVpFXTsKLQlfX3U4CXBhZFtwYWRfc2l6ZV07CisJX191OAlwYWRbMTZdOwogCiAJLyogSWYgc2V0LCBpbnRlcm9wZXJhYmlsaXR5IG1vZGUsIG5vIHByb3ByaWV0YXJ5IGV4dGVuc2lvbnMuICAqLwogCV9fdTgJaW50ZXJvcDsKQEAgLTcxNywxNSArNjM4LDYgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIElubGluZSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBRb1MgZmllbGQgaW4gZGF0YSBkZXNjcmlwdG9yLiAgKi8KLXN0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfdGlkKHUxNiBxb3MsIHU4IHRpZCkKLXsKLQl1MTYgdmFsX21hc2sgPSAweDAwMGY7Ci0JdTE2IHFvc19tYXNrID0gfnZhbF9tYXNrOwotCi0JLyogVElEIGJpdHMgMC0zICovCi0JcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAodGlkICYgdmFsX21hc2spOwotfQotCiBzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AodTE2IHFvcykKIHsKIAl1MTYgdmFsX21hc2sgPSAxIDw8IDQ7CkBAIC03NjksMTIgKzY4MSwxMSBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogLyogUm91dGluZXMgdG8gYWRkL3JlbW92ZSBETUEgaGVhZGVyIGZyb20gc2tiLiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfcmVtb3ZlX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKnRyID0gKHN0cnVjdCBtd2w4a19kbWFfZGF0YSAqKShza2ItPmRhdGEpOworCXN0cnVjdCBtd2w4a19kbWFfZGF0YSAqdHIgPSAoc3RydWN0IG13bDhrX2RtYV9kYXRhICopc2tiLT5kYXRhOwogCXZvaWQgKmRzdCwgKnNyYyA9ICZ0ci0+d2g7Ci0JX19sZTE2IGZjID0gdHItPndoLmZyYW1lX2NvbnRyb2w7Ci0JaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmMpOworCWludCBoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKHRyLT53aC5mcmFtZV9jb250cm9sKTsKIAl1MTYgc3BhY2UgPSBzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIGhkcmxlbjsKIAogCWRzdCA9ICh2b2lkICopdHIgKyBzcGFjZTsKQEAgLTc4MiwxMSArNjkzLDkgQEAKIAkJbWVtbW92ZShkc3QsIHNyYywgaGRybGVuKTsKIAkJc2tiX3B1bGwoc2tiLCBzcGFjZSk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm13bDhrX2FkZF9kbWFfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHZvaWQgbXdsOGtfYWRkX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CiAJdTMyIGhkcmxlbiwgcGt0bGVuOwpAQCAtODEwLDcgKzcxOSw3IEBACiAJCW1lbW1vdmUoJnRyLT53aCwgd2gsIGhkcmxlbik7CiAKIAkvKiBDbGVhciBhZGRyNCAqLwotCW1lbXNldCh0ci0+d2guYWRkcjQsIDAsIElFRUU4MDIxMV9BRERSX0xFTik7CisJbWVtc2V0KHRyLT53aC5hZGRyNCwgMCwgRVRIX0FMRU4pOwogCiAJLyoKIAkgKiBGaXJtd2FyZSBsZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgZnVsbHkgZm9ybWVkICI4MDIuMTEKQEAgLTgxOCwxNyArNzI3LDEzIEBACiAJICogVGhpcyBpbmNsdWRlcyBhbGwgY3J5cHRvIG1hdGVyaWFsIGluY2x1ZGluZyB0aGUgTUlDLgogCSAqLwogCXRyLT5md2xlbiA9IGNwdV90b19sZTE2KHBrdGxlbiAtIGhkcmxlbik7Ci0KLQlyZXR1cm4gc2tiOwogfQogCiAKIC8qCiAgKiBQYWNrZXQgcmVjZXB0aW9uLgogICovCi0jZGVmaW5lIE1XTDhLX1JYX0NUUkxfS0VZX0lOREVYX01BU0sJMHgzMAogI2RlZmluZSBNV0w4S19SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHgwMgotI2RlZmluZSBNV0w4S19SWF9DVFJMX0FNUERVCQkweDAxCiAKIHN0cnVjdCBtd2w4a19yeF9kZXNjIHsKIAlfX2xlMTYgcGt0X2xlbjsKQEAgLTk3OSw3ICs4ODQsNyBAQAogCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSBmYWxzZTsKLQltZW1zZXQocHJpdi0+Y2FwdHVyZV9ic3NpZCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwltZW1zZXQocHJpdi0+Y2FwdHVyZV9ic3NpZCwgMCwgRVRIX0FMRU4pOwogCiAJLyoKIAkgKiBVc2UgR0ZQX0FUT01JQyBhcyByeHFfcHJvY2VzcyBpcyBjYWxsZWQgZnJvbQpAQCAtMTAyNCwxMCArOTI5LDcgQEAKIAkJCQkJTVdMOEtfUlhfTUFYU1osIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJc2tiX3B1dChza2IsIGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPnBrdF9sZW4pKTsKLQkJaWYgKG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYikpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCW13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYik7CiAKIAkJd2ggPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAKQEAgLTEwNDksNyArOTUxLDggQEAKIAkJc3RhdHVzLmZsYWcgPSAwOwogCQlzdGF0dXMuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJCXN0YXR1cy5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHJ4X2Rlc2MtPmNoYW5uZWwpOwotCQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiLCAmc3RhdHVzKTsKKwkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGh3LCBza2IpOwogCiAJCXByb2Nlc3NlZCsrOwogCX0KQEAgLTEwNzIsOCArOTc1LDYgQEAKIAogLyogVHJhbnNtaXQgcGFja2V0IEFDSyBwb2xpY3kgKi8KICNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMCQkwCi0jZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PTkUJCTEKLSNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9fRVhQTElDSVQJMgogI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSwkJMwogCiAjZGVmaW5lIEdFVF9UWFEoX2FjKSAoXApAQCAtMTA4MiwyMCArOTgzLDExIEBACiAJCSgoX2FjKSA9PSBXTUVfQUNfQkspID8gTVdMOEtfV01FX0FDX0JLIDogXAogCQlNV0w4S19XTUVfQUNfQkUpCiAKLSNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19JRExFCQkJMHgwMDAwMDAwMAotI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX1VTRUQJCQkweDAwMDAwMDAxCiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0sJCQkweDAwMDAwMDAxCiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkJCTB4MDAwMDAwMDIKICNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZCQkweDAwMDAwMDA0CiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYCQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfQlJPQURDQVNUX1RYCQkweDAwMDAwMDEwCi0jZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRkFJTEVEX0xJTktfRVJST1IJMHgwMDAwMDAyMAotI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQJMHgwMDAwMDA0MAotI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9BR0lORwkJMHgwMDAwMDA4MAotI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0hPU1RfQ01ECQkweDQwMDAwMDAwCiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQJCTB4ODAwMDAwMDAKLSNkZWZpbmUgIE1XTDhLX1RYRF9TT0ZUU1RBTEUJCQkJMHg4MAotI2RlZmluZSAgTVdMOEtfVFhEX1NPRlRTVEFMRV9NR01UX1JFVFJZCQkJMHgwMQogCiBzdHJ1Y3QgbXdsOGtfdHhfZGVzYyB7CiAJX19sZTMyIHN0YXR1czsKQEAgLTExMDQsNyArOTk2LDcgQEAKIAlfX2xlMTYgcW9zX2NvbnRyb2w7CiAJX19sZTMyIHBrdF9waHlzX2FkZHI7CiAJX19sZTE2IHBrdF9sZW47Ci0JX191OCBkZXN0X01BQ19hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX191OCBkZXN0X01BQ19hZGRyW0VUSF9BTEVOXTsKIAlfX2xlMzIgbmV4dF90eF9kZXNjX3BoeXNfYWRkcjsKIAlfX2xlMzIgcmVzZXJ2ZWQ7CiAJX19sZTE2IHJhdGVfaW5mbzsKQEAgLTExMjEsOCArMTAxMyw3IEBACiAJaW50IHNpemU7CiAJaW50IGk7CiAKLQltZW1zZXQoJnR4cS0+dHhfc3RhdHMsIDAsCi0JCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7CisJbWVtc2V0KCZ0eHEtPnR4X3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOwogCXR4cS0+dHhfc3RhdHMubGltaXQgPSBNV0w4S19UWF9ERVNDUzsKIAl0eHEtPnR4X2hlYWQgPSAwOwogCXR4cS0+dHhfdGFpbCA9IDA7CkBAIC0xMTg5LDE3ICsxMDgwLDE3IEBACiB9OwogCiBzdGF0aWMgaW50IG13bDhrX3NjYW5fdHhfcmluZyhzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgbXdsOGtfdHhxX2luZm8gdHhpbmZvW10sCi0JCQkJdTMyIG51bV9xdWV1ZXMpCisJCQkJc3RydWN0IG13bDhrX3R4cV9pbmZvICp0eGluZm8pCiB7CiAJaW50IGNvdW50LCBkZXNjLCBzdGF0dXM7CiAJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CiAJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4X2Rlc2M7CiAJaW50IG5kZXNjcyA9IDA7CiAKLQltZW1zZXQodHhpbmZvLCAwLCBudW1fcXVldWVzICogc2l6ZW9mKHN0cnVjdCBtd2w4a190eHFfaW5mbykpOworCW1lbXNldCh0eGluZm8sIDAsIE1XTDhLX1RYX1FVRVVFUyAqIHNpemVvZihzdHJ1Y3QgbXdsOGtfdHhxX2luZm8pKTsKKwogCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7Ci0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbnVtX3F1ZXVlczsgY291bnQrKykgeworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IE1XTDhLX1RYX1FVRVVFUzsgY291bnQrKykgewogCQl0eHEgPSBwcml2LT50eHEgKyBjb3VudDsKIAkJdHhpbmZvW2NvdW50XS5sZW4gPSB0eHEtPnR4X3N0YXRzLmxlbjsKIAkJdHhpbmZvW2NvdW50XS5oZWFkID0gdHhxLT50eF9oZWFkOwpAQCAtMTIyMiwzNCArMTExMywzNCBAQAogCXJldHVybiBuZGVzY3M7CiB9CiAKLXN0YXRpYyBpbnQgbXdsOGtfdHhfd2FpdF9lbXB0eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGRlbGF5X21zKQorLyoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggaHctPmZ3X211dGV4IGhlbGQgYW5kIHR4IHF1ZXVlcyBzdG9wcGVkLgorICovCitzdGF0aWMgaW50IG13bDhrX3R4X3dhaXRfZW1wdHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JdTMyIGNvdW50ID0gMDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOwogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCXUzMiBjb3VudDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAltaWdodF9zbGVlcCgpOwogCi0JaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIFByZXZpb3VzIFRYV2FpdEVtcHR5IGluc3RhbmNlXG4iKTsKLQogCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAJY291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKIAlpZiAoY291bnQpIHsKIAkJcHJpdi0+dHhfd2FpdCA9ICZjbWRfd2FpdDsKLQkJaWYgKHByaXYtPnJhZGlvX3N0YXRlKQorCQlpZiAocHJpdi0+cmFkaW9fb24pCiAJCQltd2w4a190eF9zdGFydChwcml2KTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCiAJaWYgKGNvdW50KSB7Ci0JCXN0cnVjdCBtd2w4a190eHFfaW5mbyB0eGluZm9bNF07CisJCXN0cnVjdCBtd2w4a190eHFfaW5mbyB0eGluZm9bTVdMOEtfVFhfUVVFVUVTXTsKIAkJaW50IGluZGV4OwogCQlpbnQgbmV3Y291bnQ7CiAKIAkJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCi0JCQkJCW1zZWNzX3RvX2ppZmZpZXMoZGVsYXlfbXMpKTsKKwkJCQkJbXNlY3NfdG9famlmZmllcyg1MDAwKSk7CiAJCWlmICh0aW1lb3V0KQogCQkJcmV0dXJuIDA7CiAKQEAgLTEyNTgsMTEgKzExNDksMTEgQEAKIAkJbmV3Y291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKIAkJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCi0JCXByaW50ayhLRVJOX0VSUiAiJXMoJXUpIFRJTUVET1VUOiV1bXMgUGVuZDoldS0tPiV1XG4iLAotCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLCBkZWxheV9tcywgY291bnQsIG5ld2NvdW50KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygldSkgVElNRURPVVQ6NTAwMG1zIFBlbmQ6JXUtLT4ldVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgY291bnQsIG5ld2NvdW50KTsKIAotCQltd2w4a19zY2FuX3R4X3JpbmcocHJpdiwgdHhpbmZvLCA0KTsKLQkJZm9yIChpbmRleCA9IDAgOyBpbmRleCA8IDQ7IGluZGV4KyspCisJCW13bDhrX3NjYW5fdHhfcmluZyhwcml2LCB0eGluZm8pOworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNV0w4S19UWF9RVUVVRVM7IGluZGV4KyspCiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiVFhROiV1IEw6JXUgSDoldSBUOiV1IEZXOiV1IERSVjoldSBVOiV1XG4iLAogCQkJCQlpbmRleCwKQEAgLTEyNzIsMTggKzExNjMsMTcgQEAKIAkJCQkJdHhpbmZvW2luZGV4XS5md19vd25lZCwKIAkJCQkJdHhpbmZvW2luZGV4XS5kcnZfb3duZWQsCiAJCQkJCXR4aW5mb1tpbmRleF0udW51c2VkKTsKKwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBNV0w4S19UWERfT0sJKE1XTDhLX1RYRF9TVEFUVVNfT0sgfCBcCi0JCQkgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWSB8IFwKLQkJCSBNV0w4S19UWERfU1RBVFVTX09LX01PUkVfUkVUUlkpCi0jZGVmaW5lIE1XTDhLX1RYRF9TVUNDRVNTKHN0YXQpCQkoKHN0YXQpICYgTVdMOEtfVFhEX09LKQotI2RlZmluZSBNV0w4S19UWERfRkFJTF9SRVRSWShzdGF0KQlcCi0JKChzdGF0KSAmIChNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9FWENFRURfTElNSVQpKQorI2RlZmluZSBNV0w4S19UWERfU1VDQ0VTUyhzdGF0dXMpCQkJCVwKKwkoKHN0YXR1cykgJiAoTVdMOEtfVFhEX1NUQVRVU19PSyB8CQkJXAorCQkgICAgIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkgfAkJXAorCQkgICAgIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWSkpCiAKIHN0YXRpYyB2b2lkIG13bDhrX3R4cV9yZWNsYWltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgaW5kZXgsIGludCBmb3JjZSkKIHsKQEAgLTEyOTMsMTUgKzExODMsMTMgQEAKIAogCXdoaWxlICh0eHEtPnR4X3N0YXRzLmxlbiA+IDApIHsKIAkJaW50IHR4OwotCQlpbnQgcmM7CiAJCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eF9kZXNjOwogCQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JCXNpemVfdCBzaXplOworCQlpbnQgc2l6ZTsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwogCQl1MzIgc3RhdHVzOwogCi0JCXJjID0gMDsKIAkJdHggPSB0eHEtPnR4X2hlYWQ7CiAJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIHR4OwogCkBAIC0xMzIwLDU2ICsxMjA4LDMwIEBACiAJCXByaXYtPnBlbmRpbmdfdHhfcGt0cy0tOwogCiAJCWFkZHIgPSBsZTMyX3RvX2NwdSh0eF9kZXNjLT5wa3RfcGh5c19hZGRyKTsKLQkJc2l6ZSA9ICh1MzIpKGxlMTZfdG9fY3B1KHR4X2Rlc2MtPnBrdF9sZW4pKTsKLQkJc2tiID0gdHhxLT50eF9za2JbdHhdLnNrYjsKLQkJdHhxLT50eF9za2JbdHhdLnNrYiA9IE5VTEw7CisJCXNpemUgPSBsZTE2X3RvX2NwdSh0eF9kZXNjLT5wa3RfbGVuKTsKKwkJc2tiID0gdHhxLT50eF9za2JbdHhdOworCQl0eHEtPnR4X3NrYlt0eF0gPSBOVUxMOwogCiAJCUJVR19PTihza2IgPT0gTlVMTCk7CiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgYWRkciwgc2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CiAKLQkJcmMgPSBtd2w4a19yZW1vdmVfZG1hX2hlYWRlcihza2IpOworCQltd2w4a19yZW1vdmVfZG1hX2hlYWRlcihza2IpOwogCiAJCS8qIE1hcmsgZGVzY3JpcHRvciBhcyB1bnVzZWQgKi8KIAkJdHhfZGVzYy0+cGt0X3BoeXNfYWRkciA9IDA7CiAJCXR4X2Rlc2MtPnBrdF9sZW4gPSAwOwogCi0JCWlmICh0eHEtPnR4X3NrYlt0eF0uY2xvbmUpIHsKLQkJCS8qIFJlcGxhY2Ugd2l0aCBvcmlnaW5hbCBza2IKLQkJCSAqIGJlZm9yZSByZXR1cm5pbmcgdG8gc3RhY2sKLQkJCSAqIGFzIGJ1ZmZlciBoYXMgYmVlbiBjbG9uZWQKLQkJCSAqLwotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJc2tiID0gdHhxLT50eF9za2JbdHhdLmNsb25lOwotCQkJdHhxLT50eF9za2JbdHhdLmNsb25lID0gTlVMTDsKLQkJfQotCi0JCWlmIChyYykgewotCQkJLyogU29tZXRoaW5nIGhhcyBnb25lIHdyb25nIGhlcmUuCi0JCQkgKiBGYWlsZWQgdG8gcmVtb3ZlIERNQSBoZWFkZXIuCi0JCQkgKiBQcmludCBlcnJvciBtZXNzYWdlIGFuZCBkcm9wIHBhY2tldC4KLQkJCSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgcmVtb3ZpbmcgRE1BIGhlYWRlciBmcm9tICIKLQkJCQkJInR4IHNrYiAweCVwLlxuIiwgcHJpdi0+bmFtZSwgc2tiKTsKLQotCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCQlpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMoaW5mbyk7Ci0KLQkJLyogQ29udmVydCBmaXJtd2FyZSBzdGF0dXMgc3R1ZmYgaW50byB0eF9zdGF0dXMgKi8KLQkJaWYgKE1XTDhLX1RYRF9TVUNDRVNTKHN0YXR1cykpIHsKLQkJCS8qIFRyYW5zbWl0IE9LICovCisJCWlmIChNV0w4S19UWERfU1VDQ0VTUyhzdGF0dXMpKQogCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCQl9CiAKIAkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpOwogCi0JCXdha2UgPSAhcHJpdi0+aW5jb25maWcgJiYgcHJpdi0+cmFkaW9fc3RhdGU7CisJCXdha2UgPSAxOwogCX0KIAotCWlmICh3YWtlKQorCWlmICh3YWtlICYmIHByaXYtPnJhZGlvX29uICYmICFtdXRleF9pc19sb2NrZWQoJnByaXYtPmZ3X211dGV4KSkKIAkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIGluZGV4KTsKIH0KIApAQCAtMTM5NSw1NiArMTI1Nyw2MCBAQAogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CiAJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7CiAJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4OwotCXN0cnVjdCBtd2w4a19kbWFfZGF0YSAqdHI7Ci0Jc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmOwotCXN0cnVjdCBza19idWZmICpvcmdfc2tiID0gc2tiOwogCWRtYV9hZGRyX3QgZG1hOwotCXUxNiBxb3MgPSAwOwotCWJvb2wgcW9zZnJhbWUgPSBmYWxzZSwgYW1wZHVmcmFtZSA9IGZhbHNlOwotCWJvb2wgbWNmcmFtZSA9IGZhbHNlLCBlYXBvbGZyYW1lID0gZmFsc2U7Ci0JYm9vbCBhbXNkdWZyYW1lID0gZmFsc2U7Ci0JX19sZTE2IGZjOworCXUzMiB0eHN0YXR1czsKKwl1OCB0eGRhdGFyYXRlOworCXUxNiBxb3M7CiAKLQl0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKLQl0eCA9IHR4cS0+dHhfZGVzY19hcmVhICsgdHhxLT50eF90YWlsOworCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3Mod2gtPmZyYW1lX2NvbnRyb2wpKQorCQlxb3MgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilpZWVlODAyMTFfZ2V0X3Fvc19jdGwod2gpKSk7CisJZWxzZQorCQlxb3MgPSAwOwogCi0JQlVHX09OKHR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0uc2tiICE9IE5VTEwpOwotCi0JLyoKLQkgKiBBcHBlbmQgSFcgRE1BIGhlYWRlciB0byBzdGFydCBvZiBwYWNrZXQuICBEcm9wIHBhY2tldCBpZgotCSAqIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2Ugb3IgYSBmYWlsdXJlIHRvIHVuc2hhcmUvdW5jbG9uZQotCSAqIHRoZSBza2IuCi0JICovCi0Jc2tiID0gbXdsOGtfYWRkX2RtYV9oZWFkZXIoc2tiKTsKLQotCWlmIChza2IgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBwcmVwZW5kIEhXIERNQSAiCi0JCQkiaGVhZGVyLCBkcm9wcGluZyBUWCBmcmFtZS5cbiIsIHByaXYtPm5hbWUpOwotCQlkZXZfa2ZyZWVfc2tiKG9yZ19za2IpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCX0KKwltd2w4a19hZGRfZG1hX2hlYWRlcihza2IpOworCXdoID0gJigoc3RydWN0IG13bDhrX2RtYV9kYXRhICopc2tiLT5kYXRhKS0+d2g7CiAKIAl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCW13bDhrX3ZpZiA9IE1XTDhLX1ZJRih0eF9pbmZvLT5jb250cm9sLnZpZik7Ci0JdHIgPSAoc3RydWN0IG13bDhrX2RtYV9kYXRhICopc2tiLT5kYXRhOwotCXdoID0gJnRyLT53aDsKLQlmYyA9IHdoLT5mcmFtZV9jb250cm9sOwotCXFvc2ZyYW1lID0gaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKTsKLQltY2ZyYW1lID0gaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIod2gtPmFkZHIxKTsKLQlhbXBkdWZyYW1lID0gISEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKTsKIAogCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkgewogCQl1MTYgc2Vxbm8gPSBtd2w4a192aWYtPnNlcW5vOworCiAJCXdoLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKIAkJd2gtPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcW5vIDw8IDQpOwogCQltd2w4a192aWYtPnNlcW5vID0gc2Vxbm8rKyAlIDQwOTY7CiAJfQogCi0JaWYgKHFvc2ZyYW1lKQotCQlxb3MgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilpZWVlODAyMTFfZ2V0X3Fvc19jdGwod2gpKSk7CisJLyogU2V0dXAgZmlybXdhcmUgY29udHJvbCBiaXQgZmllbGRzIGZvciBlYWNoIGZyYW1lIHR5cGUuICAqLworCXR4c3RhdHVzID0gMDsKKwl0eGRhdGFyYXRlID0gMDsKKwlpZiAoaWVlZTgwMjExX2lzX21nbXQod2gtPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgIGllZWU4MDIxMV9pc19jdGwod2gtPmZyYW1lX2NvbnRyb2wpKSB7CisJCXR4ZGF0YXJhdGUgPSAwOworCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AocW9zKTsKKwkJLyogU2V0IFF1ZXVlIHNpemUgdG8gdW5zcGVjaWZpZWQgKi8KKwkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9xbGVuKHFvcywgMHhmZik7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YSh3aC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJdHhkYXRhcmF0ZSA9IDE7CisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjEpKQorCQkJdHhzdGF0dXMgfD0gTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFg7CisKKwkJLyogU2VuZCBwa3QgaW4gYW4gYWdncmVnYXRlIGlmIEFNUERVIGZyYW1lLiAgKi8KKwkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSyk7CisJCWVsc2UKKwkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYWNrKHFvcywKKwkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOworCisJCWlmIChxb3MgJiBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQpCisJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Ftc2R1KHFvcyk7CisJfQogCiAJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLAogCQkJCXNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTE0NTIsOTkgKzEzMTgsNDAgQEAKIAlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gZG1hIG1hcCBza2IsICIKIAkJCSJkcm9wcGluZyBUWCBmcmFtZS5cbiIsIHByaXYtPm5hbWUpOwotCi0JCWlmIChvcmdfc2tiICE9IE5VTEwpCi0JCQlkZXZfa2ZyZWVfc2tiKG9yZ19za2IpOwotCQlpZiAoc2tiICE9IE5VTEwpCi0JCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQkvKiBTZXQgZGVzYyBoZWFkZXIsIGNwdSBiaXQgb3JkZXIuICAqLwotCXR4LT5zdGF0dXMgPSAwOwotCXR4LT5kYXRhX3JhdGUgPSAwOwotCXR4LT50eF9wcmlvcml0eSA9IGluZGV4OwotCXR4LT5xb3NfY29udHJvbCA9IDA7Ci0JdHgtPnJhdGVfaW5mbyA9IDA7Ci0JdHgtPnBlZXJfaWQgPSBtd2w4a192aWYtPnBlZXJfaWQ7Ci0KLQlhbXNkdWZyYW1lID0gISEocW9zICYgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UKTsKLQotCS8qIFNldHVwIGZpcm13YXJlIGNvbnRyb2wgYml0IGZpZWxkcyBmb3IgZWFjaCBmcmFtZSB0eXBlLiAgKi8KLQlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpIHx8IGllZWU4MDIxMV9pc19jdGwoZmMpKSB7Ci0JCXR4LT5kYXRhX3JhdGUgPSAwOwotCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AocW9zKTsKLQkJLyogU2V0IFF1ZXVlIHNpemUgdG8gdW5zcGVjaWZpZWQgKi8KLQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9xbGVuKHFvcywgMHhmZik7Ci0JfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHsKLQkJdHgtPmRhdGFfcmF0ZSA9IDE7Ci0JCWlmIChtY2ZyYW1lKQotCQkJdHgtPnN0YXR1cyB8PSBNV0w4S19UWERfU1RBVFVTX01VTFRJQ0FTVF9UWDsKLQotCQkvKgotCQkgKiBUZWxsIGZpcm13YXJlIHRvIG5vdCBzZW5kIEVBUE9MIHBrdHMgaW4gYW4KLQkJICogYWdncmVnYXRlLiAgVmVyaWZ5IGFnYWluc3QgbWFjODAyMTEgdHggcGF0aC4gIElmCi0JCSAqIHN0YWNrIHR1cm5zIG9mZiBBTVBEVSBmb3IgYW4gRUFQT0wgZnJhbWUgdGhpcwotCQkgKiBjaGVjayB3aWxsIGJlIHJlbW92ZWQuCi0JCSAqLwotCQlpZiAoZWFwb2xmcmFtZSkgewotCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAotCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZW5kIHBrdCBpbiBhbiBhZ2dyZWdhdGUgaWYgQU1QRFUgZnJhbWUuICAqLwotCQkJaWYgKGFtcGR1ZnJhbWUpCi0JCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAotCQkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSyk7Ci0JCQllbHNlCi0JCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAotCQkJCQlNV0w4S19UWERfQUNLX1BPTElDWV9OT1JNQUwpOwotCi0JCQlpZiAoYW1zZHVmcmFtZSkKLQkJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Ftc2R1KHFvcyk7Ci0JCX0KLQl9Ci0KLQkvKiBDb252ZXJ0IHRvIGxpdHRsZSBlbmRpYW4gKi8KLQl0eC0+cW9zX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihxb3MpOwotCXR4LT5zdGF0dXMgPSBjcHVfdG9fbGUzMih0eC0+c3RhdHVzKTsKLQl0eC0+cGt0X3BoeXNfYWRkciA9IGNwdV90b19sZTMyKGRtYSk7Ci0JdHgtPnBrdF9sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7Ci0KLQl0eHEtPnR4X3NrYlt0eHEtPnR4X3RhaWxdLnNrYiA9IHNrYjsKLQl0eHEtPnR4X3NrYlt0eHEtPnR4X3RhaWxdLmNsb25lID0KLQkJc2tiID09IG9yZ19za2IgPyBOVUxMIDogb3JnX3NrYjsKLQogCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiAKLQl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhEX1NUQVRVU19PSyB8Ci0JCQkJCU1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQpOworCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCisJQlVHX09OKHR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0gIT0gTlVMTCk7CisJdHhxLT50eF9za2JbdHhxLT50eF90YWlsXSA9IHNrYjsKKworCXR4ID0gdHhxLT50eF9kZXNjX2FyZWEgKyB0eHEtPnR4X3RhaWw7CisJdHgtPmRhdGFfcmF0ZSA9IHR4ZGF0YXJhdGU7CisJdHgtPnR4X3ByaW9yaXR5ID0gaW5kZXg7CisJdHgtPnFvc19jb250cm9sID0gY3B1X3RvX2xlMTYocW9zKTsKKwl0eC0+cGt0X3BoeXNfYWRkciA9IGNwdV90b19sZTMyKGRtYSk7CisJdHgtPnBrdF9sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbik7CisJdHgtPnJhdGVfaW5mbyA9IDA7CisJdHgtPnBlZXJfaWQgPSBtd2w4a192aWYtPnBlZXJfaWQ7CiAJd21iKCk7CisJdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQgfCB0eHN0YXR1cyk7CisKKwl0eHEtPnR4X3N0YXRzLmNvdW50Kys7CiAJdHhxLT50eF9zdGF0cy5sZW4rKzsKIAlwcml2LT5wZW5kaW5nX3R4X3BrdHMrKzsKLQl0eHEtPnR4X3N0YXRzLmNvdW50Kys7Ci0JdHhxLT50eF90YWlsKys7CiAKKwl0eHEtPnR4X3RhaWwrKzsKIAlpZiAodHhxLT50eF90YWlsID09IE1XTDhLX1RYX0RFU0NTKQogCQl0eHEtPnR4X3RhaWwgPSAwOworCiAJaWYgKHR4cS0+dHhfaGVhZCA9PSB0eHEtPnR4X3RhaWwpCiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBpbmRleCk7CiAKLQlpZiAocHJpdi0+aW5jb25maWcpIHsKLQkJLyoKLQkJICogU2lsZW50bHkgcXVldWUgcGFja2V0IHdoZW4gd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKLQkJICogYSBjb25maWcgY3ljbGUuICBOb3RpZnkgZmlybXdhcmUgb25seSBpZiB3ZSBhcmUKLQkJICogd2FpdGluZyBmb3IgVFhRcyB0byBlbXB0eS4gIElmIGEgcGFja2V0IGlzIHNlbnQKLQkJICogYmVmb3JlIC5jb25maWcoKSBpcyBjb21wbGV0ZSwgcGVyaGFwcyBpdCBpcyBiZXR0ZXIKLQkJICogdG8gZHJvcCB0aGUgcGFja2V0LCBhcyB0aGUgY2hhbm5lbCBpcyBiZWluZyBjaGFuZ2VkCi0JCSAqIGFuZCB0aGUgcGFja2V0IHdpbGwgZW5kIHVwIG9uIHRoZSB3cm9uZyBjaGFubmVsLgotCQkgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpOiBXQVJOSU5HIFRYIGFjdGl2aXR5IHdoaWxlICIKLQkJCSJpbiBjb25maWdcbiIsIF9fZnVuY19fKTsKLQotCQlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMKQotCQkJbXdsOGtfdHhfc3RhcnQocHJpdik7Ci0JfSBlbHNlCi0JCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCW13bDhrX3R4X3N0YXJ0KHByaXYpOwogCiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwogCkBAIC0xNTUzLDYgKzEzNjAsNjAgQEAKIAogCiAvKgorICogRmlybXdhcmUgYWNjZXNzLgorICoKKyAqIFdlIGhhdmUgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgZm9yIGlzc3VpbmcgZmlybXdhcmUgY29tbWFuZHM6CisgKiAtIFNvbWUgY29tbWFuZHMgcmVxdWlyZSB0aGF0IHRoZSBwYWNrZXQgdHJhbnNtaXQgcGF0aCBpcyBpZGxlIHdoZW4KKyAqICAgdGhlIGNvbW1hbmQgaXMgaXNzdWVkLiAgKEZvciBzaW1wbGljaXR5LCB3ZSdsbCBqdXN0IHF1aWVzY2UgdGhlCisgKiAgIHRyYW5zbWl0IHBhdGggZm9yIGV2ZXJ5IGNvbW1hbmQuKQorICogLSBUaGVyZSBhcmUgY2VydGFpbiBzZXF1ZW5jZXMgb2YgY29tbWFuZHMgdGhhdCBuZWVkIHRvIGJlIGlzc3VlZCB0bworICogICB0aGUgaGFyZHdhcmUgc2VxdWVudGlhbGx5LCB3aXRoIG5vIG90aGVyIGludGVydmVuaW5nIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgbGVhZHMgdG8gYW4gaW1wbGVtZW50YXRpb24gb2YgYSAiZmlybXdhcmUgbG9jayIgYXMgYSBtdXRleCB0aGF0CisgKiBjYW4gYmUgdGFrZW4gcmVjdXJzaXZlbHksIGFuZCB3aGljaCBpcyB0YWtlbiBieSBib3RoIHRoZSBsb3ctbGV2ZWwKKyAqIGNvbW1hbmQgc3VibWlzc2lvbiBmdW5jdGlvbiAobXdsOGtfcG9zdF9jbWQpIGFzIHdlbGwgYXMgYW55IHVzZXJzIG9mCisgKiB0aGF0IGZ1bmN0aW9uIHRoYXQgcmVxdWlyZSBpc3N1aW5nIG9mIGFuIGF0b21pYyBzZXF1ZW5jZSBvZiBjb21tYW5kcywKKyAqIGFuZCBxdWllc2NlcyB0aGUgdHJhbnNtaXQgcGF0aCB3aGVuZXZlciBpdCdzIHRha2VuLgorICovCitzdGF0aWMgaW50IG13bDhrX2Z3X2xvY2soc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmIChwcml2LT5md19tdXRleF9vd25lciAhPSBjdXJyZW50KSB7CisJCWludCByYzsKKworCQltdXRleF9sb2NrKCZwcml2LT5md19tdXRleCk7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwkJcmMgPSBtd2w4a190eF93YWl0X2VtcHR5KGh3KTsKKwkJaWYgKHJjKSB7CisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOworCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5md19tdXRleCk7CisKKwkJCXJldHVybiByYzsKKwkJfQorCisJCXByaXYtPmZ3X211dGV4X293bmVyID0gY3VycmVudDsKKwl9CisKKwlwcml2LT5md19tdXRleF9kZXB0aCsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG13bDhrX2Z3X3VubG9jayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJaWYgKCEtLXByaXYtPmZ3X211dGV4X2RlcHRoKSB7CisJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisJCXByaXYtPmZ3X211dGV4X293bmVyID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5md19tdXRleCk7CisJfQorfQorCisKKy8qCiAgKiBDb21tYW5kIHByb2Nlc3NpbmcuCiAgKi8KIApAQCAtMTU2Nyw3ICsxNDI4LDYgQEAKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKIAlpbnQgcmM7Ci0JdTE2IF9faW9tZW0gKnJlc3VsdDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOwogCXU4IGJ1ZlszMl07CiAKQEAgLTE1NzgsNDEgKzE0MzgsNDMgQEAKIAlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYV9hZGRyKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAocHJpdi0+aG9zdGNtZF93YWl0ICE9IE5VTEwpCi0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORyBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3NcbiIpOworCXJjID0gbXdsOGtfZndfbG9jayhodyk7CisJaWYgKHJjKSB7CisJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgZG1hX2FkZHIsIGRtYV9zaXplLAorCQkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCXNwaW5fbG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOwogCXByaXYtPmhvc3RjbWRfd2FpdCA9ICZjbWRfd2FpdDsKIAlpb3dyaXRlMzIoZG1hX2FkZHIsIHJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CiAJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRE9PUkJFTEwsCiAJCXJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOwogCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RVTU1ZLAogCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKLQlzcGluX3VubG9ja19pcnEoJnByaXYtPmZ3X2xvY2spOwogCiAJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kX3dhaXQsCiAJCQkJbXNlY3NfdG9famlmZmllcyhNV0w4S19DTURfVElNRU9VVF9NUykpOwogCisJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKworCW13bDhrX2Z3X3VubG9jayhodyk7CisKIAlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGRtYV9hZGRyLCBkbWFfc2l6ZSwKIAkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAotCXJlc3VsdCA9ICZjbWQtPnJlc3VsdDsKIAlpZiAoIXRpbWVvdXQpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7Ci0JCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgdGltZW91dCBhZnRlciAldSBtc1xuIiwKIAkJICAgICAgIHByaXYtPm5hbWUsCiAJCSAgICAgICBtd2w4a19jbWRfbmFtZShjbWQtPmNvZGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpLAogCQkgICAgICAgTVdMOEtfQ01EX1RJTUVPVVRfTVMpOwogCQlyYyA9IC1FVElNRURPVVQ7CiAJfSBlbHNlIHsKLQkJcmMgPSAqcmVzdWx0ID8gLUVJTlZBTCA6IDA7CisJCXJjID0gY21kLT5yZXN1bHQgPyAtRUlOVkFMIDogMDsKIAkJaWYgKHJjKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29tbWFuZCAlcyBlcnJvciAweCV4XG4iLAogCQkJICAgICAgIHByaXYtPm5hbWUsCiAJCQkgICAgICAgbXdsOGtfY21kX25hbWUoY21kLT5jb2RlLCBidWYsIHNpemVvZihidWYpKSwKLQkJCSAgICAgICAqcmVzdWx0KTsKKwkJCSAgICAgICBsZTE2X3RvX2NwdShjbWQtPnJlc3VsdCkpOwogCX0KIAogCXJldHVybiByYzsKQEAgLTE2MjYsNyArMTQ4OCw3IEBACiAJX191OCBod19yZXY7CiAJX191OCBob3N0X2ludGVyZmFjZTsKIAlfX2xlMTYgbnVtX21jYWRkcnM7Ci0JX191OCBwZXJtX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX3U4IHBlcm1fYWRkcltFVEhfQUxFTl07CiAJX19sZTE2IHJlZ2lvbl9jb2RlOwogCV9fbGUzMiBmd19yZXY7CiAJX19sZTMyIHBzX2Nvb2tpZTsKQEAgLTE2NzAsNyArMTUzMiw2IEBACiAJCXByaXYtPm51bV9tY2FkZHJzID0gbGUxNl90b19jcHUoY21kLT5udW1fbWNhZGRycyk7CiAJCXByaXYtPmZ3X3JldiA9IGxlMzJfdG9fY3B1KGNtZC0+ZndfcmV2KTsKIAkJcHJpdi0+aHdfcmV2ID0gY21kLT5od19yZXY7Ci0JCXByaXYtPnJlZ2lvbl9jb2RlID0gbGUxNl90b19jcHUoY21kLT5yZWdpb25fY29kZSk7CiAJfQogCiAJa2ZyZWUoY21kKTsKQEAgLTE2ODQsNDEgKzE1NDUsNDQgQEAKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgbnVtYWRkcjsKLQlfX3U4IGFkZHJbMV1bSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX3U4IGFkZHJbMF1bRVRIX0FMRU5dOwogfTsKIAogI2RlZmluZSBNV0w4S19FTkFCTEVfUlhfTVVMVElDQVNUIDB4MDAwRgotc3RhdGljIGludCBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCWludCBtY19jb3VudCwKLQkJCQkJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKKworc3RhdGljIHN0cnVjdCBtd2w4a19jbWRfcGt0ICoKK19fbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQogeworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkciAqY21kOwotCWludCBpbmRleCA9IDA7Ci0JaW50IHJjOwotCWludCBzaXplID0gc2l6ZW9mKCpjbWQpICsgKChtY19jb3VudCAtIDEpICogSUVFRTgwMjExX0FERFJfTEVOKTsKLQljbWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWludCBzaXplOworCWludCBpOworCisJaWYgKG1jX2NvdW50ID4gcHJpdi0+bnVtX21jYWRkcnMpCisJCW1jX2NvdW50ID0gcHJpdi0+bnVtX21jYWRkcnM7CisKKwlzaXplID0gc2l6ZW9mKCpjbWQpICsgbWNfY291bnQgKiBFVEhfQUxFTjsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAKIAljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01BQ19NVUxUSUNBU1RfQURSKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKIAljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0VOQUJMRV9SWF9NVUxUSUNBU1QpOwogCWNtZC0+bnVtYWRkciA9IGNwdV90b19sZTE2KG1jX2NvdW50KTsKLQl3aGlsZSAoKGluZGV4IDwgbWNfY291bnQpICYmIG1jbGlzdCkgewotCQlpZiAobWNsaXN0LT5kYV9hZGRybGVuICE9IElFRUU4MDIxMV9BRERSX0xFTikgewotCQkJcmMgPSAtRUlOVkFMOwotCQkJZ290byBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHJfZXhpdDsKKworCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudCAmJiBtY2xpc3Q7IGkrKykgeworCQlpZiAobWNsaXN0LT5kYV9hZGRybGVuICE9IEVUSF9BTEVOKSB7CisJCQlrZnJlZShjbWQpOworCQkJcmV0dXJuIE5VTEw7CiAJCX0KLQkJbWVtY3B5KGNtZC0+YWRkcltpbmRleF0sIG1jbGlzdC0+ZGFfYWRkciwgSUVFRTgwMjExX0FERFJfTEVOKTsKLQkJaW5kZXgrKzsKKwkJbWVtY3B5KGNtZC0+YWRkcltpXSwgbWNsaXN0LT5kYV9hZGRyLCBFVEhfQUxFTik7CiAJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKIAl9CiAKLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCi1td2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHJfZXhpdDoKLQlrZnJlZShjbWQpOwotCXJldHVybiByYzsKKwlyZXR1cm4gJmNtZC0+aGVhZGVyOwogfQogCiAvKgpAQCAtMTc3NSwxOCArMTYzOSwxNiBAQAogCV9fbGUxNiByYWRpb19vbjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXN0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgZW5hYmxlKQorc3RhdGljIGludAorbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSwgYm9vbCBmb3JjZSkKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2wgKmNtZDsKIAlpbnQgcmM7CiAKLQlpZiAoKChlbmFibGUgJiBNV0w4S19SQURJT19FTkFCTEUpID09IHByaXYtPnJhZGlvX3N0YXRlKSAmJgotCSAgICAhKGVuYWJsZSAmIE1XTDhLX1JBRElPX0ZPUkNFKSkKKwlpZiAoZW5hYmxlID09IHByaXYtPnJhZGlvX29uICYmICFmb3JjZSkKIAkJcmV0dXJuIDA7CiAKLQllbmFibGUgJj0gTVdMOEtfUkFESU9fRU5BQkxFOwotCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmIChjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xNzk0LDE4ICsxNjU2LDI4IEBACiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SQURJT19DT05UUk9MKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwogCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7Ci0JY21kLT5jb250cm9sID0gY3B1X3RvX2xlMTYocHJpdi0+cmFkaW9fcHJlYW1ibGUpOworCWNtZC0+Y29udHJvbCA9IGNwdV90b19sZTE2KHByaXYtPnJhZGlvX3Nob3J0X3ByZWFtYmxlID8gMyA6IDEpOwogCWNtZC0+cmFkaW9fb24gPSBjcHVfdG9fbGUxNihlbmFibGUgPyAweDAwMDEgOiAweDAwMDApOwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwogCiAJaWYgKCFyYykKLQkJcHJpdi0+cmFkaW9fc3RhdGUgPSBlbmFibGU7CisJCXByaXYtPnJhZGlvX29uID0gZW5hYmxlOwogCiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCAwLCAwKTsKK30KKworc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCAxLCAwKTsKK30KKwogc3RhdGljIGludAogbXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIHNob3J0X3ByZWFtYmxlKQogewpAQCAtMTgxNSwxMiArMTY4Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXByaXYgPSBody0+cHJpdjsKIAotCXByaXYtPnJhZGlvX3ByZWFtYmxlID0gKHNob3J0X3ByZWFtYmxlID8KLQkJTVdMOEtfUkFESU9fU0hPUlRfUFJFQU1CTEUgOgotCQlNV0w4S19SQURJT19MT05HX1BSRUFNQkxFKTsKKwlwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA9IHNob3J0X3ByZWFtYmxlOwogCi0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywKLQkJCU1XTDhLX1JBRElPX0VOQUJMRSB8IE1XTDhLX1JBRElPX0ZPUkNFKTsKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCAxLCAxKTsKIH0KIAogLyoKQEAgLTE4ODgsMTEgKzE3NTcsMTEgQEAKIHN0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUzMiBpc2lic3M7Ci0JX191OCBic3NpZFtJRUVFODAyMTFfQUREUl9MRU5dOworCV9fdTggYnNzaWRbRVRIX0FMRU5dOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RhdGljIGludAotbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTggbWFjW0lFRUU4MDIxMV9BRERSX0xFTl0pCittd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCAqbWFjKQogewogCXN0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiAqY21kOwogCWludCByYzsKQEAgLTE5MDQsNyArMTc3Myw3IEBACiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwogCWNtZC0+aXNpYnNzID0gMDsKLQltZW1jcHkoY21kLT5ic3NpZCwgbWFjLCBJRUVFODAyMTFfQUREUl9MRU4pOworCW1lbWNweShjbWQtPmJzc2lkLCBtYWMsIEVUSF9BTEVOKTsKIAogCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CiAJa2ZyZWUoY21kKTsKQEAgLTE5NTYsNyArMTgyNSw3IEBACiAJX191OCBzaG9ydF9zbG90OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3Nsb3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBzbG90X3RpbWUpCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfc2xvdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBzaG9ydF9zbG90X3RpbWUpCiB7CiAJc3RydWN0IG13bDhrX2NtZF9zZXRfc2xvdCAqY21kOwogCWludCByYzsKQEAgLTE5NjgsNyArMTgzNyw3IEBACiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfU0xPVCk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKIAljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOwotCWNtZC0+c2hvcnRfc2xvdCA9IHNsb3RfdGltZSA9PSBNV0w4S19TSE9SVF9TTE9UVElNRSA/IDEgOiAwOworCWNtZC0+c2hvcnRfc2xvdCA9IHNob3J0X3Nsb3RfdGltZTsKIAogCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CiAJa2ZyZWUoY21kKTsKQEAgLTIwMjYsNyArMTg5NSw3IEBACiAKIAljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWN0aW9uID0gZW5hYmxlID8gY3B1X3RvX2xlMzIoKHUzMilNV0w4S19DTURfU0VUKSA6IDA7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMighIWVuYWJsZSk7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CkBAIC0yMDM1LDcgKzE5MDQsNyBAQAogfQogCiAvKgotICogQ01EX1NFVF9SQVRFX0FEQVBUX01PREUuCisgKiBDTURfU0VUX1JBVEVBREFQVF9NT0RFLgogICovCiBzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKQEAgLTIwODMsMTMgKzE5NTIsMTMgQEAKIAogCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1dNTV9NT0RFKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWN0aW9uID0gZW5hYmxlID8gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCkgOiAwOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoISFlbmFibGUpOwogCiAJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKIAlrZnJlZShjbWQpOwogCiAJaWYgKCFyYykKLQkJcHJpdi0+d21tX21vZGUgPSBlbmFibGU7CisJCXByaXYtPndtbV9lbmFibGVkID0gZW5hYmxlOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMjEwNCw3ICsxOTczLDcgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0YXRpYyBpbnQgbXdsOGtfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICB1MTYgYWN0aW9uLCB1MTYgKnRocmVzaG9sZCkKKwkJCSAgICAgICB1MTYgYWN0aW9uLCB1MTYgdGhyZXNob2xkKQogewogCXN0cnVjdCBtd2w4a19jbWRfcnRzX3RocmVzaG9sZCAqY21kOwogCWludCByYzsKQEAgLTIxMTYsNyArMTk4NSw3IEBACiAJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SVFNfVEhSRVNIT0xEKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwogCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKLQljbWQtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KCp0aHJlc2hvbGQpOworCWNtZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYodGhyZXNob2xkKTsKIAogCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CiAJa2ZyZWUoY21kKTsKQEAgLTIxNDksNyArMjAxOCw2IEBACiAJX191OCB0eHE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0jZGVmaW5lIE1XTDhLX0dFVF9FRENBX0FMTAkwCiAjZGVmaW5lIE1XTDhLX1NFVF9FRENBX0NXCTB4MDEKICNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfVFhPUAkweDAyCiAjZGVmaW5lIE1XTDhLX1NFVF9FRENBX0FJRlMJMHgwNApAQCAtMjE2NCwyMiArMjAzMiwxOCBAQAogCQlfX3U4IGFpZnMsIF9fdTE2IHR4b3ApCiB7CiAJc3RydWN0IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMgKmNtZDsKLQl1MzIgbG9nX2N3X21pbiwgbG9nX2N3X21heDsKIAlpbnQgcmM7CiAKIAljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNtZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWxvZ19jd19taW4gPSBpbG9nMihjd19taW4rMSk7Ci0JbG9nX2N3X21heCA9IGlsb2cyKGN3X21heCsxKTsKIAljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUyk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQogCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfU0VUX0VEQ0FfQUxMKTsKIAljbWQtPnR4b3AgPSBjcHVfdG9fbGUxNih0eG9wKTsKLQljbWQtPmxvZ19jd19tYXggPSAodTgpbG9nX2N3X21heDsKLQljbWQtPmxvZ19jd19taW4gPSAodTgpbG9nX2N3X21pbjsKKwljbWQtPmxvZ19jd19tYXggPSAodTgpaWxvZzIoY3dfbWF4ICsgMSk7CisJY21kLT5sb2dfY3dfbWluID0gKHU4KWlsb2cyKGN3X21pbiArIDEpOwogCWNtZC0+YWlmcyA9IGFpZnM7CiAJY21kLT50eHEgPSBxbnVtOwogCkBAIC0yMjIwLDExICsyMDg0LDcgQEAKIAogCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4pOwogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0KLQlpZiAoZHRpbSkKLQkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGR0aW0pOwotCWVsc2UKLQkJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKDEpOworCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihkdGltID8gZHRpbSA6IDEpOwogCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihwYXlsb2FkLT5mcmFtZV9jb250cm9sKTsKIApAQCAtMjIzNiw4ICsyMDk2LDggQEAKIAkJCSJzZW50IHRvIGZpcm13YXJlLiBTej0ldSBNQVg9JXVcbiIsIF9fZnVuY19fLAogCQkJcGF5bG9hZF9sZW4sIE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4pOwogCi0JcGF5bG9hZF9sZW4gPSBwYXlsb2FkX2xlbiA+IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4gPwotCQkJCU1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4gOiBwYXlsb2FkX2xlbjsKKwlpZiAocGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOKQorCQlwYXlsb2FkX2xlbiA9IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU47CiAKIAlpZiAocGF5bG9hZCAmJiBwYXlsb2FkX2xlbikKIAkJbWVtY3B5KGNtZC0+YmVhY29uX2RhdGEsICZwYXlsb2FkLT51LmJlYWNvbiwgcGF5bG9hZF9sZW4pOwpAQCAtMjI1Nyw3ICsyMTE3LDcgQEAKIAlfX2xlMzIJYWN0aW9uOwogCiAJLyogUGVlciBNQUMgYWRkcmVzcyAqLwotCV9fdTgJcGVlcl9hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX191OAlwZWVyX2FkZHJbRVRIX0FMRU5dOwogCiAJX19sZTMyCXJlc2VydmVkOwogCkBAIC0yMjczLDcgKzIxMzMsNiBAQAogCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYiAqY21kOwogCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyAqcGVlcl9pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXMgPSBtdl92aWYtPmxlZ2FjeV9yYXRlczsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAlpbnQgcmM7CiAJX191OCBjb3VudCwgKnJhdGVzOwogCkBAIC0yMjg2LDcgKzIxNDUsNyBAQAogCiAJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihhY3Rpb24pOwogCXBlZXJfaW5mbyA9ICZjbWQtPnBlZXJfaW5mbzsKLQltZW1jcHkoY21kLT5wZWVyX2FkZHIsIG12X3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisJbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBtdl92aWYtPmJzc2lkLCBFVEhfQUxFTik7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgTVdMOEtfU1RBX0RCX0FERF9FTlRSWToKQEAgLTIyOTgsNyArMjE1Nyw3IEBACiAJCXBlZXJfaW5mby0+YW1zZHVfZW5hYmxlZCA9IDA7CiAKIAkJcmF0ZXMgPSBwZWVyX2luZm8tPmxlZ2FjeV9yYXRlczsKLQkJZm9yIChjb3VudCA9IDAgOyBjb3VudCA8IG12X3ZpZi0+bGVnYWN5X25yYXRlczsgY291bnQrKykKKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbXZfdmlmLT5sZWdhY3lfbnJhdGVzOyBjb3VudCsrKQogCQkJcmF0ZXNbY291bnRdID0gYml0cmF0ZXNbY291bnRdLmh3X3ZhbHVlOwogCiAJCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CkBAIC0yMzIzLDI1ICsyMTgyLDE5IEBACiAvKgogICogQ01EX1NFVF9BSUQuCiAgKi8KLSNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9ESVNBQkxFRAkJCTB4MDAKLSNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9OT05fTUVNQkVSX1BST1RfTU9ERQkJMHgwMQotI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX09ORV8yME1IWl9TVEFfUFJPVF9NT0RFCTB4MDIKLSNkZWZpbmUgSUVFRTgwMjExX09QTU9ERV9IVE1JWEVEX1BST1RfTU9ERQkJMHgwMwotCiAjZGVmaW5lIE1XTDhLX1JBVEVfSU5ERVhfTUFYX0FSUkFZCQkJMTQKIAogI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVECQkJMHgwMAogI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExRwkJCQkweDA3CiAjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFkJCTB4MDIKICNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMCQkJMHgwNgotI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UX01BU0sJCQkJMHgwNwogCiBzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkIHsKIAlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTE2CWFpZDsKIAogCSAvKiBBUCdzIE1BQyBhZGRyZXNzIChCU1NJRCkgKi8KLQlfX3U4CWJzc2lkW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX191OAlic3NpZFtFVEhfQUxFTl07CiAJX19sZTE2CXByb3RlY3Rpb25fbW9kZTsKIAlfX3U4CXN1cHBfcmF0ZXNbTVdMOEtfUkFURV9JTkRFWF9NQVhfQVJSQVldOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKQEAgLTIzNjUsOSArMjIxOCw3IEBACiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKIAljbWQtPmFpZCA9IGNwdV90b19sZTE2KGluZm8tPmFpZCk7CiAKLQltZW1jcHkoY21kLT5ic3NpZCwgbXZfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKLQotCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQ7CisJbWVtY3B5KGNtZC0+YnNzaWQsIG12X3ZpZi0+YnNzaWQsIEVUSF9BTEVOKTsKIAogCWlmIChpbmZvLT51c2VfY3RzX3Byb3QpIHsKIAkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMUc7CkBAIC0yMzg1LDcgKzIyMzYsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0KIAljbWQtPnByb3RlY3Rpb25fbW9kZSA9IGNwdV90b19sZTE2KHByb3RfbW9kZSk7CiAKIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCkBAIC0yNDM5LDEwICsyMjg5LDYgQEAKICAqLwogI2RlZmluZSBNV0w4S19SQVRFX1RBQkxFX1NJWkUJOAogI2RlZmluZSBNV0w4S19VQ0FTVF9SQVRFCTAKLSNkZWZpbmUgTVdMOEtfTUNBU1RfUkFURQkxCi0jZGVmaW5lIE1XTDhLX0JDQVNUX1JBVEUJMgotCi0jZGVmaW5lIE1XTDhLX1VTRV9GSVhFRF9SQVRFCTB4MDAwMQogI2RlZmluZSBNV0w4S19VU0VfQVVUT19SQVRFCTB4MDAwMgogCiBzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSB7CkBAIC0yNTM1LDcgKzIzODEsNiBAQAogCXN0YXR1cyA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOwogCWlvd3JpdGUzMih+c3RhdHVzLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKIAotCXN0YXR1cyAmPSBwcml2LT5pbnRfbWFzazsKIAlpZiAoIXN0YXR1cykKIAkJcmV0dXJuIElSUV9OT05FOwogCkBAIC0yNTQ4LDE3ICsyMzkzLDE0IEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfT1BDX0RPTkUpIHsKLQkJaWYgKHByaXYtPmhvc3RjbWRfd2FpdCAhPSBOVUxMKSB7CisJCWlmIChwcml2LT5ob3N0Y21kX3dhaXQgIT0gTlVMTCkKIAkJCWNvbXBsZXRlKHByaXYtPmhvc3RjbWRfd2FpdCk7Ci0JCQlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOwotCQl9CiAJfQogCiAJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkpIHsKLQkJaWYgKCFwcml2LT5pbmNvbmZpZyAmJgotCQkJcHJpdi0+cmFkaW9fc3RhdGUgJiYKLQkJCW13bDhrX3R4cV9idXN5KHByaXYpKQotCQkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCQlpZiAoIW11dGV4X2lzX2xvY2tlZCgmcHJpdi0+ZndfbXV0ZXgpICYmCisJCSAgICBwcml2LT5yYWRpb19vbiAmJiBtd2w4a190eHFfYnVzeShwcml2KSkKKwkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOwogCX0KIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTI1ODYsMzY1ICsyNDI4LDY4IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgewotCS8qIEluaXRpYWxpemVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHd0OwotCi0JLyogUmVxdWlyZWQgZmllbGQgcGFzc2VkIGluIHRvIG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCi0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0KLQkvKiBSZXF1aXJlZCBmaWVsZCBwYXNzZWQgaW4gdG8gbXdsOGtfcXVldWVfd29yaygpLiAgKi8KLQlpbnQgKCp3ZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3KTsKLQotCS8qIEluaXRpYWxpemVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCi0Jc3RydWN0IGNvbXBsZXRpb24gKmNtZF93YWl0OwotCi0JLyogUmVzdWx0IGNvZGUuICAqLwotCWludCByYzsKLQotCS8qCi0JICogT3B0aW9uYWwgZmllbGQuIFJlZmVyIHRvIGV4cGxhbmF0aW9uIG9mIE1XTDhLX1dRX1hYWF9YWFgKLQkgKiBmbGFncyBmb3IgZXhwbGFuYXRpb24uICBEZWZhdWx0cyB0byBNV0w4S19XUV9ERUZBVUxUX09QVElPTlMuCi0JICovCi0JdTMyIG9wdGlvbnM7Ci0KLQkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX0NPTkZJR19USU1FT1VUX01TLiAgKi8KLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXM7Ci0KLQkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUy4gICovCi0JdTMyIHR4d2FpdF9hdHRlbXB0czsKLQotCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfVFhXQUlUX01TLiAgKi8KLQl1MzIgdHhfdGltZW91dF9tczsKLQl1MzIgc3RlcDsKLX07Ci0KLS8qIEZsYWdzIGNvbnRyb2xsaW5nIGJlaGF2aW9yIG9mIGNvbmZpZyBxdWV1ZSByZXF1ZXN0cyAqLwotCi0vKiBDYWxsZXIgc3BpbnMgd2hpbGUgd2FpdGluZyBmb3IgY29tcGxldGlvbi4gICovCi0jZGVmaW5lIE1XTDhLX1dRX1NQSU4JCQkweDAwMDAwMDAxCi0KLS8qIFdhaXQgZm9yIFRYIHF1ZXVlcyB0byBlbXB0eSBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24uICAqLwotI2RlZmluZSBNV0w4S19XUV9UWF9XQUlUX0VNUFRZCQkweDAwMDAwMDAyCi0KLS8qIFF1ZXVlIHJlcXVlc3QgYW5kIHJldHVybiBpbW1lZGlhdGVseS4gICovCi0jZGVmaW5lIE1XTDhLX1dRX1BPU1RfUkVRVUVTVAkJMHgwMDAwMDAwNAotCi0vKgotICogQ2FsbGVyIHNsZWVwcyBhbmQgd2FpdHMgZm9yIHRhc2sgY29tcGxldGUgbm90aWZpY2F0aW9uLgotICogRG8gbm90IHVzZSBpbiBhdG9taWMgY29udGV4dC4KLSAqLwotI2RlZmluZSBNV0w4S19XUV9TTEVFUAkJCTB4MDAwMDAwMDgKLQotLyogRnJlZSB3b3JrIHN0cnVjdCB3aGVuIHRhc2sgaXMgZG9uZS4gICovCi0jZGVmaW5lIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVAkweDAwMDAwMDEwCi0KLS8qCi0gKiBDb25maWcgcmVxdWVzdCBpcyBxdWV1ZWQgYW5kIHJldHVybnMgdG8gY2FsbGVyIGltZWRpYXRlbHkuICBVc2UKLSAqIHRoaXMgaW4gYXRvbWljIGNvbnRleHQuIFdvcmsgc3RydWN0IGlzIGZyZWVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKQotICogd2hlbiB0aGlzIGZsYWcgaXMgc2V0LgotICovCi0jZGVmaW5lIE1XTDhLX1dRX1FVRVVFX09OTFkJKE1XTDhLX1dRX1BPU1RfUkVRVUVTVCB8IFwKLQkJCQkgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUKQotCi0vKiBEZWZhdWx0IHdvcmsgcXVldWUgYmVoYXZpb3IgaXMgdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHR4IGNvbXBsZXRpb24uICAqLwotI2RlZmluZSBNV0w4S19XUV9ERUZBVUxUX09QVElPTlMgKE1XTDhLX1dRX1NMRUVQIHwgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWSkKLQotLyoKLSAqIERlZmF1bHQgY29uZmlnIHJlcXVlc3QgdGltZW91dC4gIEFkZCBhZGp1c3RtZW50cyB0byBtYWtlIHN1cmUgdGhlCi0gKiBjb25maWcgdGhyZWFkIHdhaXRzIGxvbmcgZW5vdWdoIGZvciBib3RoIHR4IHdhaXQgYW5kIGNtZCB3YWl0IGJlZm9yZQotICogdGltaW5nIG91dC4KLSAqLwotCi0vKiBUaW1lIHRvIHdhaXQgZm9yIGFsbCBUWFFzIHRvIGRyYWluLiAgVFggRG9vcmJlbGwgaXMgcHJlc3NlZCBlYWNoIHRpbWUuICAqLwotI2RlZmluZSBNV0w4S19UWFdBSVRfVElNRU9VVF9NUwkJMTAwMAotCi0vKiBEZWZhdWx0IG51bWJlciBvZiBUWCB3YWl0IGF0dGVtcHRzLiAgKi8KLSNkZWZpbmUgTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTCTQKLQotLyogVG90YWwgdGltZSB0byB3YWl0IGZvciBUWFEgdG8gZHJhaW4uICAqLwotI2RlZmluZSBNV0w4S19UWFdBSVRfTVMJCQkoTVdMOEtfVFhXQUlUX1RJTUVPVVRfTVMgKiBcCi0JCQkJCQlNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMpCi0KLS8qIFNjaGVkdWxpbmcgc2xvcC4gICovCi0jZGVmaW5lIE1XTDhLX09TX1NDSEVEVUxFX09WRVJIRUFEX01TCTIwMAotCi0jZGVmaW5lIE1XTDhLX0NPTkZJR19USU1FT1VUX01TCShNV0w4S19DTURfVElNRU9VVF9NUyArIFwKLQkJCQkgTVdMOEtfVFhXQUlUX01TICsgXAotCQkJCSBNV0w4S19PU19TQ0hFRFVMRV9PVkVSSEVBRF9NUykKLQotc3RhdGljIHZvaWQgbXdsOGtfY29uZmlnX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQotewotCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqd29ya2VyID0gKHN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqKXd0OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5odzsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByYyA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKLQlwcml2LT5pbmNvbmZpZyA9IHRydWU7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKLQotCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGhvc3QgcXVldWVzIHRvIGRyYWluIGJlZm9yZSBkb2luZyBQSFkKLQkgKiByZWNvbmZpZ3VyYXRpb24uIFRoaXMgYXZvaWRzIGludGVycnVwdGluZyBhbnkgaW4tZmxpZ2h0Ci0JICogRE1BIHRyYW5zZmVycyB0byB0aGUgaGFyZHdhcmUuCi0JICovCi0JaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkpIHsKLQkJdTMyIHRpbWVvdXQ7Ci0JCXUzMiB0aW1lX3JlbWFpbmluZzsKLQkJdTMyIGl0ZXI7Ci0JCXUzMiB0eF93YWl0X2F0dGVtcHRzID0gd29ya2VyLT50eHdhaXRfYXR0ZW1wdHM7Ci0KLQkJdGltZV9yZW1haW5pbmcgPSB3b3JrZXItPnR4X3RpbWVvdXRfbXM7Ci0JCWlmICghdHhfd2FpdF9hdHRlbXB0cykKLQkJCXR4X3dhaXRfYXR0ZW1wdHMgPSAxOwotCi0JCXRpbWVvdXQgPSB3b3JrZXItPnR4X3RpbWVvdXRfbXMvdHhfd2FpdF9hdHRlbXB0czsKLQkJaWYgKCF0aW1lb3V0KQotCQkJdGltZW91dCA9IDE7Ci0KLQkJaXRlciA9IHR4X3dhaXRfYXR0ZW1wdHM7Ci0JCWRvIHsKLQkJCWludCB3YWl0X3RpbWU7Ci0KLQkJCWlmICh0aW1lX3JlbWFpbmluZyA+IHRpbWVvdXQpIHsKLQkJCQl0aW1lX3JlbWFpbmluZyAtPSB0aW1lb3V0OwotCQkJCXdhaXRfdGltZSA9IHRpbWVvdXQ7Ci0JCQl9IGVsc2UKLQkJCQl3YWl0X3RpbWUgPSB0aW1lX3JlbWFpbmluZzsKLQotCQkJaWYgKCF3YWl0X3RpbWUpCi0JCQkJd2FpdF90aW1lID0gMTsKLQotCQkJcmMgPSBtd2w4a190eF93YWl0X2VtcHR5KGh3LCB3YWl0X3RpbWUpOwotCQkJaWYgKHJjKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0eHdhaXQgdGltZW91dD0ldW1zICIKLQkJCQkJIlJldHJ5OiV1LyV1XG4iLCBfX2Z1bmNfXywgdGltZW91dCwKLQkJCQkJdHhfd2FpdF9hdHRlbXB0cyAtIGl0ZXIgKyAxLAotCQkJCQl0eF93YWl0X2F0dGVtcHRzKTsKLQotCQl9IHdoaWxlIChyYyAmJiAtLWl0ZXIpOwotCi0JCXJjID0gaXRlciA/IDAgOiAtRVRJTUVET1VUOwotCX0KLQlpZiAoIXJjKQotCQlyYyA9IHdvcmtlci0+d2Z1bmMod3QpOwotCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7Ci0JcHJpdi0+aW5jb25maWcgPSBmYWxzZTsKLQlpZiAocHJpdi0+cGVuZGluZ190eF9wa3RzICYmIHByaXYtPnJhZGlvX3N0YXRlKQotCQltd2w4a190eF9zdGFydChwcml2KTsKLQlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwotCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7Ci0KLQl3b3JrZXItPnJjID0gcmM7Ci0JaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NMRUVQKQotCQljb21wbGV0ZSh3b3JrZXItPmNtZF93YWl0KTsKLQotCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QpCi0JCWtmcmVlKHd0KTsKLX0KLQotc3RhdGljIGludCBtd2w4a19xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqd29ya2VyLAotCQkJCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cXVldWUsCi0JCQkJaW50ICgqd2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKLQlpbnQgcmMgPSAwOwotCi0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOwotCi0JaWYgKCF3b3JrZXItPnRpbWVvdXRfbXMpCi0JCXdvcmtlci0+dGltZW91dF9tcyA9IE1XTDhLX0NPTkZJR19USU1FT1VUX01TOwotCi0JaWYgKCF3b3JrZXItPm9wdGlvbnMpCi0JCXdvcmtlci0+b3B0aW9ucyA9IE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUzsKLQotCWlmICghd29ya2VyLT50eHdhaXRfYXR0ZW1wdHMpCi0JCXdvcmtlci0+dHh3YWl0X2F0dGVtcHRzID0gTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTOwotCi0JaWYgKCF3b3JrZXItPnR4X3RpbWVvdXRfbXMpCi0JCXdvcmtlci0+dHhfdGltZW91dF9tcyA9IE1XTDhLX1RYV0FJVF9NUzsKLQotCXdvcmtlci0+aHcgPSBodzsKLQl3b3JrZXItPmNtZF93YWl0ID0gJmNtZF93YWl0OwotCXdvcmtlci0+cmMgPSAxOwotCXdvcmtlci0+d2Z1bmMgPSB3ZnVuYzsKLQotCUlOSVRfV09SSygmd29ya2VyLT53dCwgbXdsOGtfY29uZmlnX3RocmVhZCk7Ci0JcXVldWVfd29yayh3cXVldWUsICZ3b3JrZXItPnd0KTsKLQotCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9QT1NUX1JFUVVFU1QpIHsKLQkJcmMgPSAwOwotCX0gZWxzZSB7Ci0JCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TUElOKSB7Ci0JCQl0aW1lb3V0ID0gd29ya2VyLT50aW1lb3V0X21zOwotCQkJd2hpbGUgKHRpbWVvdXQgJiYgKHdvcmtlci0+cmMgPiAwKSkgewotCQkJCW1kZWxheSgxKTsKLQkJCQl0aW1lb3V0LS07Ci0JCQl9Ci0JCX0gZWxzZSBpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU0xFRVApCi0JCQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbWRfd2FpdCwKLQkJCQltc2Vjc190b19qaWZmaWVzKHdvcmtlci0+dGltZW91dF9tcykpOwotCi0JCWlmICh0aW1lb3V0KQotCQkJcmMgPSB3b3JrZXItPnJjOwotCQllbHNlIHsKLQkJCWNhbmNlbF93b3JrX3N5bmMoJndvcmtlci0+d3QpOwotCQkJcmMgPSAtRVRJTUVET1VUOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyIHsKLQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOwotfTsKLQotc3RhdGljIGludCBtd2w4a19zdGFydF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQotewotCXN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKndvcmtlciA9IChzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICopd3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByYyA9IDA7Ci0KLQlpZiAocHJpdi0+dmlmICE9IE5VTEwpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7Ci0JfQotCi0JLyogVHVybiBvbiByYWRpbyAqLwotCWlmIChtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0VOQUJMRSkpIHsKLQkJcmMgPSAtRUlPOwotCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7Ci0JfQotCi0JLyogUHVyZ2UgVFgvUlggSFcgcXVldWVzICovCi0JaWYgKG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oaHcpKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBtd2w4a19zdGFydF9leGl0OwotCX0KLQotCWlmIChtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBtd2w4a19zdGFydF9leGl0OwotCX0KLQotCS8qIEVuYWJsZSBmaXJtd2FyZSByYXRlIGFkYXB0YXRpb24gKi8KLQlpZiAobXdsOGtfY21kX3NldHJhdGVhZGFwdG1vZGUoaHcsIDApKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBtd2w4a19zdGFydF9leGl0OwotCX0KLQotCS8qIERpc2FibGUgV01NLiBXTU0gZ2V0cyBlbmFibGVkIHdoZW4gc3RhY2sgc2VuZHMgV01NIHBhcm1zICovCi0JaWYgKG13bDhrX3NldF93bW0oaHcsIE1XTDhLX1dNTV9ESVNBQkxFKSkgewotCQlyYyA9IC1FSU87Ci0JCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKLQl9Ci0KLQkvKiBEaXNhYmxlIHNuaWZmZXIgbW9kZSAqLwotCWlmIChtd2w4a19lbmFibGVfc25pZmZlcihodywgMCkpCi0JCXJjID0gLUVJTzsKLQotbXdsOGtfc3RhcnRfZXhpdDoKLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBpbnQgbXdsOGtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqd29ya2VyOwogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IHJjOwogCi0JLyogRW5hYmxlIHR4IHJlY2xhaW0gdGFza2xldCAqLwotCXRhc2tsZXRfZW5hYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOwotCiAJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsICZtd2w4a19pbnRlcnJ1cHQsCiAJCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAogCQkgICAgICAgcHJpdi0+bmFtZSk7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBtd2w4a19zdGFydF9kaXNhYmxlX3Rhc2tsZXQ7CisJCXJldHVybiAtRUlPOwogCX0KIAorCS8qIEVuYWJsZSB0eCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2VuYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKwogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCi0JaW93cml0ZTMyKHByaXYtPmludF9tYXNrLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJaW93cml0ZTMyKE1XTDhLX0EySF9FVkVOVFMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKIAotCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAod29ya2VyID09IE5VTEwpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG13bDhrX3N0YXJ0X2Rpc2FibGVfaXJxOworCXJjID0gbXdsOGtfZndfbG9jayhodyk7CisJaWYgKCFyYykgeworCQlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fZW5hYmxlKGh3KTsKKworCQlpZiAoIXJjKQorCQkJcmMgPSBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KTsKKworCQlpZiAoIXJjKQorCQkJcmMgPSBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihodywKKwkJCQkJIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOworCisJCWlmICghcmMpCisJCQlyYyA9IG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKGh3LCAwKTsKKworCQlpZiAoIXJjKQorCQkJcmMgPSBtd2w4a19zZXRfd21tKGh3LCAwKTsKKworCQlpZiAoIXJjKQorCQkJcmMgPSBtd2w4a19lbmFibGVfc25pZmZlcihodywgMCk7CisKKwkJbXdsOGtfZndfdW5sb2NrKGh3KTsKIAl9CiAKLQlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKLQkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfc3RhcnRfd3QpOwotCWtmcmVlKHdvcmtlcik7Ci0JaWYgKCFyYykKLQkJcmV0dXJuIHJjOwotCi0JaWYgKHJjID09IC1FVElNRURPVVQpCi0JCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKLQotCXJjID0gLUVJTzsKLQotbXdsOGtfc3RhcnRfZGlzYWJsZV9pcnE6Ci0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7Ci0JaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwotCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOwotCi1td2w4a19zdGFydF9kaXNhYmxlX3Rhc2tsZXQ6Ci0JdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgewotCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Ci19OwotCi1zdGF0aWMgaW50IG13bDhrX3N0b3Bfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKLXsKLQlzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgKndvcmtlciA9IChzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgKil3dDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OwotCWludCByYzsKLQotCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwlpZiAocmMpIHsKKwkJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwkJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisJCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKwl9CiAKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIG13bDhrX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JaW50IHJjOwotCXN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqd29ya2VyOwogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJaW50IGk7CiAKLQlpZiAocHJpdi0+dmlmICE9IE5VTEwpCi0JCXJldHVybjsKKwltd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoaHcpOwogCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKIAotCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAod29ya2VyID09IE5VTEwpCi0JCXJldHVybjsKLQotCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAotCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19zdG9wX3d0KTsKLQlrZnJlZSh3b3JrZXIpOwotCWlmIChyYyA9PSAtRVRJTUVET1VUKQotCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Ci0KIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CiAKIAkvKiBTdG9wIGZpbmFsaXplIGpvaW4gd29ya2VyICovCkBAIC0yOTc4LDggKzI1MjMsNyBAQAogCS8qCiAJICogV2Ugb25seSBzdXBwb3J0IG1hbmFnZWQgaW50ZXJmYWNlcyBmb3Igbm93LgogCSAqLwotCWlmIChjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCWlmIChjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogQ2xlYW4gb3V0IGRyaXZlciBwcml2YXRlIGFyZWEgKi8KQEAgLTI5ODcsMTMgKzI1MzEsMTMgQEAKIAltZW1zZXQobXdsOGtfdmlmLCAwLCBzaXplb2YoKm13bDhrX3ZpZikpOwogCiAJLyogU2F2ZSB0aGUgbWFjIGFkZHJlc3MgKi8KLQltZW1jcHkobXdsOGtfdmlmLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIElFRUU4MDIxMV9BRERSX0xFTik7CisJbWVtY3B5KG13bDhrX3ZpZi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKIAkvKiBCYWNrIHBvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLwogCW13bDhrX3ZpZi0+cHJpdiA9IHByaXY7CiAKIAkvKiBTZXR1cCBpbml0aWFsIFBIWSBwYXJhbWV0ZXJzICovCi0JbWVtY3B5KG13bDhrX3ZpZi0+bGVnYWN5X3JhdGVzICwKKwltZW1jcHkobXdsOGtfdmlmLT5sZWdhY3lfcmF0ZXMsCiAJCXByaXYtPnJhdGVzLCBzaXplb2YobXdsOGtfdmlmLT5sZWdhY3lfcmF0ZXMpKTsKIAltd2w4a192aWYtPmxlZ2FjeV9ucmF0ZXMgPSBBUlJBWV9TSVpFKHByaXYtPnJhdGVzKTsKIApAQCAtMzAxNywxNTIgKzI1NjEsNDQgQEAKIAlwcml2LT52aWYgPSBOVUxMOwogfQogCi1zdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciB7Ci0Jc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKLQl1MzIgY2hhbmdlZDsKLX07Ci0KLXN0YXRpYyBpbnQgbXdsOGtfY29uZmlnX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IG13bDhrX2NvbmZpZ193b3JrZXIgKndvcmtlciA9Ci0JCShzdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciAqKXd0OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmM7CiAKLQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKLQkJbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSB7CisJCW13bDhrX2NtZF84MDJfMTFfcmFkaW9fZGlzYWJsZShodyk7CiAJCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IE5VTEw7Ci0JCXJjID0gMDsKLQkJZ290byBtd2w4a19jb25maWdfZXhpdDsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRU5BQkxFKSkgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gbXdsOGtfY29uZmlnX2V4aXQ7Ci0JfQorCXJjID0gbXdsOGtfZndfbG9jayhodyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fZW5hYmxlKGh3KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OworCisJcmMgPSBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoaHcsIGNvbmYtPmNoYW5uZWwpOworCWlmIChyYykKKwkJZ290byBvdXQ7CiAKIAlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBjb25mLT5jaGFubmVsOwogCi0JaWYgKG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbChodywgY29uZi0+Y2hhbm5lbCkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OwotCX0KLQogCWlmIChjb25mLT5wb3dlcl9sZXZlbCA+IDE4KQogCQljb25mLT5wb3dlcl9sZXZlbCA9IDE4OwotCWlmIChtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCkpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OwotCX0KKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIoaHcsIGNvbmYtPnBvd2VyX2xldmVsKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0OwogCiAJaWYgKG13bDhrX2NtZF9taW1vX2NvbmZpZyhodywgMHg3LCAweDcpKQogCQlyYyA9IC1FSU5WQUw7CiAKLW13bDhrX2NvbmZpZ19leGl0OgotCXJldHVybiByYzsKLX0KK291dDoKKwltd2w4a19md191bmxvY2soaHcpOwogCi1zdGF0aWMgaW50IG13bDhrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciAqd29ya2VyOwotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdvcmtlciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXdvcmtlci0+Y2hhbmdlZCA9IGNoYW5nZWQ7Ci0JcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCi0JCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2NvbmZpZ193dCk7Ci0JaWYgKHJjID09IC1FVElNRURPVVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dC5cbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KLQotCWtmcmVlKHdvcmtlcik7Ci0KLQkvKgotCSAqIG1hYzgwMjExIHdpbGwgY3Jhc2ggb24gYW55dGhpbmcgb3RoZXIgdGhhbiAtRUlOVkFMIG9uCi0JICogZXJyb3IuIExvb2tzIGxpa2Ugd2lyZWxlc3MgZXh0ZW5zaW9ucyB3aGljaCBjYWxscyBtYWM4MDIxMQotCSAqIG1heSBiZSB0aGUgYWN0dWFsIGN1bHByaXQuLi4KLQkgKi8KLQlyZXR1cm4gcmMgPyAtRUlOVkFMIDogMDsKLX0KLQotc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyIHsKLQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbzsKLQl1MzIgY2hhbmdlZDsKLX07Ci0KLXN0YXRpYyBpbnQgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQotewotCXN0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciAqd29ya2VyID0KLQkJKHN0cnVjdCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3dvcmtlciAqKXd0OwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IHdvcmtlci0+dmlmOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSB3b3JrZXItPmluZm87Ci0JdTMyIGNoYW5nZWQ7Ci0JaW50IHJjOwotCi0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWYgPSBNV0w4S19WSUYodmlmKTsKLQotCWNoYW5nZWQgPSB3b3JrZXItPmNoYW5nZWQ7Ci0JcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSBmYWxzZTsKLQotCWlmIChpbmZvLT5hc3NvYykgewotCQltZW1jcHkoJm13bDhrX3ZpZi0+YnNzX2luZm8sIGluZm8sCi0JCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZikpOwotCi0JCS8qIEluc3RhbGwgcmF0ZXMgKi8KLQkJaWYgKG13bDhrX3VwZGF0ZV9yYXRlc2V0KGh3LCB2aWYpKQotCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7Ci0KLQkJLyogVHVybiBvbiByYXRlIGFkYXB0YXRpb24gKi8KLQkJaWYgKG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZShodywgTVdMOEtfVVNFX0FVVE9fUkFURSwKLQkJCU1XTDhLX1VDQVNUX1JBVEUsIE5VTEwpKQotCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7Ci0KLQkJLyogU2V0IHJhZGlvIHByZWFtYmxlICovCi0JCWlmIChtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoaHcsCi0JCQkJaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKSkKLQkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OwotCi0JCS8qIFNldCBzbG90IHRpbWUgKi8KLQkJaWYgKG13bDhrX2NtZF9zZXRfc2xvdChodywgaW5mby0+dXNlX3Nob3J0X3Nsb3QgPwotCQkJCU1XTDhLX1NIT1JUX1NMT1RUSU1FIDogTVdMOEtfTE9OR19TTE9UVElNRSkpCi0JCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKLQotCQkvKiBVcGRhdGUgcGVlciByYXRlIGluZm8gKi8KLQkJaWYgKG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKGh3LCB2aWYsCi0JCQkJTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWSkpCi0JCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKLQotCQkvKiBTZXQgQUlEICovCi0JCWlmIChtd2w4a19jbWRfc2V0X2FpZChodywgdmlmKSkKLQkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OwotCi0JCS8qCi0JCSAqIEZpbmFsaXplIHRoZSBqb2luLiAgVGVsbCByeCBoYW5kbGVyIHRvIHByb2Nlc3MKLQkJICogbmV4dCBiZWFjb24gZnJvbSBvdXIgQlNTSUQuCi0JCSAqLwotCQltZW1jcHkocHJpdi0+Y2FwdHVyZV9ic3NpZCwKLQkJCQltd2w4a192aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOwotCQlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWSk7Ci0JCW1lbXNldCgmbXdsOGtfdmlmLT5ic3NfaW5mbywgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7Ci0JCW1lbXNldChtd2w4a192aWYtPmJzc2lkLCAwLCBJRUVFODAyMTFfQUREUl9MRU4pOwotCX0KLQotbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OgotCXJjID0gMDsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMxNzEsNTkgKzI2MDcsMTAyIEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKIAkJCQkgICB1MzIgY2hhbmdlZCkKIHsKLQlzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgKndvcmtlcjsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZiA9IE1XTDhLX1ZJRih2aWYpOwogCWludCByYzsKIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpCi0JCW1lbWNweShtdl92aWYtPmJzc2lkLCBpbmZvLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwkJbWVtY3B5KG13bDhrX3ZpZi0+YnNzaWQsIGluZm8tPmJzc2lkLCBFVEhfQUxFTik7CiAKIAlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgPT0gMCkKIAkJcmV0dXJuOwogCi0Jd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOwotCWlmICh3b3JrZXIgPT0gTlVMTCkKKwlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOworCisJcmMgPSBtd2w4a19md19sb2NrKGh3KTsKKwlpZiAocmMpCiAJCXJldHVybjsKIAotCXdvcmtlci0+dmlmID0gdmlmOwotCXdvcmtlci0+aW5mbyA9IGluZm87Ci0Jd29ya2VyLT5jaGFuZ2VkID0gY2hhbmdlZDsKLQlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKLQkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwKLQkJCSAgICAgIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd3QpOwotCWtmcmVlKHdvcmtlcik7Ci0JaWYgKHJjID09IC1FVElNRURPVVQpCi0JCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKwlpZiAoaW5mby0+YXNzb2MpIHsKKwkJbWVtY3B5KCZtd2w4a192aWYtPmJzc19pbmZvLCBpbmZvLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKworCQkvKiBJbnN0YWxsIHJhdGVzICovCisJCXJjID0gbXdsOGtfdXBkYXRlX3JhdGVzZXQoaHcsIHZpZik7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCisJCS8qIFR1cm4gb24gcmF0ZSBhZGFwdGF0aW9uICovCisJCXJjID0gbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlKGh3LCBNV0w4S19VU0VfQVVUT19SQVRFLAorCQkJTVdMOEtfVUNBU1RfUkFURSwgTlVMTCk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCisJCS8qIFNldCByYWRpbyBwcmVhbWJsZSAqLworCQlyYyA9IG13bDhrX3NldF9yYWRpb19wcmVhbWJsZShodywgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisKKwkJLyogU2V0IHNsb3QgdGltZSAqLworCQlyYyA9IG13bDhrX2NtZF9zZXRfc2xvdChodywgaW5mby0+dXNlX3Nob3J0X3Nsb3QpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKworCQkvKiBVcGRhdGUgcGVlciByYXRlIGluZm8gKi8KKwkJcmMgPSBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLAorCQkJCU1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKworCQkvKiBTZXQgQUlEICovCisJCXJjID0gbXdsOGtfY21kX3NldF9haWQoaHcsIHZpZik7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCisJCS8qCisJCSAqIEZpbmFsaXplIHRoZSBqb2luLiAgVGVsbCByeCBoYW5kbGVyIHRvIHByb2Nlc3MKKwkJICogbmV4dCBiZWFjb24gZnJvbSBvdXIgQlNTSUQuCisJCSAqLworCQltZW1jcHkocHJpdi0+Y2FwdHVyZV9ic3NpZCwgbXdsOGtfdmlmLT5ic3NpZCwgRVRIX0FMRU4pOworCQlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IHRydWU7CisJfSBlbHNlIHsKKwkJcmMgPSBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLCBNV0w4S19TVEFfREJfREVMX0VOVFJZKTsKKwkJbWVtc2V0KCZtd2w4a192aWYtPmJzc19pbmZvLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKwkJbWVtc2V0KG13bDhrX3ZpZi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwl9CisKK291dDoKKwltd2w4a19md191bmxvY2soaHcpOwogfQogCi1zdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgewotCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Ci0JdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3M7Ci0JdW5zaWduZWQgaW50ICp0b3RhbF9mbGFnczsKLQlpbnQgbWNfY291bnQ7Ci0Jc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdDsKLX07Ci0KLSNkZWZpbmUgTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDCi0KLXN0YXRpYyBpbnQgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQorc3RhdGljIHU2NCBtd2w4a19wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCiB7Ci0Jc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICp3b3JrZXIgPQotCQkoc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICopd3Q7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgKmNtZDsKIAotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7Ci0JdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MgPSB3b3JrZXItPmNoYW5nZWRfZmxhZ3M7Ci0JdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncyA9IHdvcmtlci0+dG90YWxfZmxhZ3M7Ci0JaW50IG1jX2NvdW50ID0gd29ya2VyLT5tY19jb3VudDsKLQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0ID0gd29ya2VyLT5tY2xpc3Q7CisJY21kID0gX19td2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIoaHcsIG1jX2NvdW50LCBtY2xpc3QpOwogCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWNtZDsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSAgIHU2NCBtdWx0aWNhc3QpCit7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmMgPSAwOworCXN0cnVjdCBtd2w4a19jbWRfcGt0ICptdWx0aWNhc3RfYWRyX2NtZDsKKworCS8qIENsZWFyIHVuc3VwcG9ydGVkIGZlYXR1cmUgZmxhZ3MgKi8KKwkqdG90YWxfZmxhZ3MgJj0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CisKKwlpZiAobXdsOGtfZndfbG9jayhodykpCisJCXJldHVybjsKIAogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKIAkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQotCQkJcmMgPSBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KTsKKwkJCW13bDhrX2NtZF9zZXRfcHJlX3NjYW4oaHcpOwogCQllbHNlIHsKIAkJCXU4ICpic3NpZDsKIApAQCAtMzIzMSwxNTEgKzI3MTAsNDUgQEAKIAkJCWlmIChwcml2LT52aWYgIT0gTlVMTCkKIAkJCQlic3NpZCA9IE1XTDhLX1ZJRihwcml2LT52aWYpLT5ic3NpZDsKIAotCQkJcmMgPSBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihodywgYnNzaWQpOworCQkJbXdsOGtfY21kX3NldF9wb3N0X3NjYW4oaHcsIGJzc2lkKTsKIAkJfQogCX0KIAotCWlmIChyYykKLQkJZ290byBtd2w4a19jb25maWd1cmVfZmlsdGVyX2V4aXQ7Ci0JaWYgKG1jX2NvdW50KSB7Ci0JCW1jX2NvdW50ID0gbWNfY291bnQgPCBwcml2LT5udW1fbWNhZGRycyA/Ci0JCQkJbWNfY291bnQgOiBwcml2LT5udW1fbWNhZGRyczsKLQkJcmMgPSBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIoaHcsIG1jX2NvdW50LCBtY2xpc3QpOwotCQlpZiAocmMpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSIlcygpRXJyb3Igc2V0dGluZyBtdWx0aWNhc3QgYWRkcmVzc2VzXG4iLAotCQkJX19mdW5jX18pOworCW11bHRpY2FzdF9hZHJfY21kID0gKHZvaWQgKikodW5zaWduZWQgbG9uZyltdWx0aWNhc3Q7CisJaWYgKG11bHRpY2FzdF9hZHJfY21kICE9IE5VTEwpIHsKKwkJbXdsOGtfcG9zdF9jbWQoaHcsIG11bHRpY2FzdF9hZHJfY21kKTsKKwkJa2ZyZWUobXVsdGljYXN0X2Fkcl9jbWQpOwogCX0KIAotbXdsOGtfY29uZmlndXJlX2ZpbHRlcl9leGl0OgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgbXdsOGtfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgIGludCBtY19jb3VudCwKLQkJCQkgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQotewotCi0Jc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICp3b3JrZXI7Ci0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQotCS8qIENsZWFyIHVuc3VwcG9ydGVkIGZlYXR1cmUgZmxhZ3MgKi8KLQkqdG90YWxfZmxhZ3MgJj0gTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTOwotCi0JaWYgKCEoY2hhbmdlZF9mbGFncyAmIE1XTDhLX1NVUFBPUlRFRF9JRl9GTEFHUykgJiYgIW1jX2NvdW50KQotCQlyZXR1cm47Ci0KLQl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHdvcmtlciA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQl3b3JrZXItPmhlYWRlci5vcHRpb25zID0gTVdMOEtfV1FfUVVFVUVfT05MWSB8IE1XTDhLX1dRX1RYX1dBSVRfRU1QVFk7Ci0Jd29ya2VyLT5jaGFuZ2VkX2ZsYWdzID0gY2hhbmdlZF9mbGFnczsKLQl3b3JrZXItPnRvdGFsX2ZsYWdzID0gdG90YWxfZmxhZ3M7Ci0Jd29ya2VyLT5tY19jb3VudCA9IG1jX2NvdW50OwotCXdvcmtlci0+bWNsaXN0ID0gbWNsaXN0OwotCi0JbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLCBwcml2LT5jb25maWdfd3EsCi0JCQkgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93dCk7Ci19Ci0KLXN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgewotCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7Ci0JdTMyIHZhbHVlOwotfTsKLQotc3RhdGljIGludCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQotewotCXN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKndvcmtlciA9Ci0JCShzdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyICopd3Q7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OwotCXUxNiB0aHJlc2hvbGQgPSAodTE2KSh3b3JrZXItPnZhbHVlKTsKLQlpbnQgcmM7Ci0KLQlyYyA9IG13bDhrX3J0c190aHJlc2hvbGQoaHcsIE1XTDhLX0NNRF9TRVQsICZ0aHJlc2hvbGQpOwotCi0JcmV0dXJuIHJjOworCW13bDhrX2Z3X3VubG9jayhodyk7CiB9CiAKIHN0YXRpYyBpbnQgbXdsOGtfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKIHsKLQlpbnQgcmM7Ci0Jc3RydWN0IG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3dvcmtlciAqd29ya2VyOwotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdvcmtlciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXdvcmtlci0+dmFsdWUgPSB2YWx1ZTsKLQotCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAotCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLAotCQkJICAgICAgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd3QpOwotCWtmcmVlKHdvcmtlcik7Ci0KLQlpZiAocmMgPT0gLUVUSU1FRE9VVCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciB7Ci0Jc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKLQl1MTYgcXVldWU7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtczsKLX07Ci0KLXN0YXRpYyBpbnQgbXdsOGtfY29uZl90eF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQotewotCXN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqd29ya2VyID0KLQkoc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyICopd3Q7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OwotCXUxNiBxdWV1ZSA9IHdvcmtlci0+cXVldWU7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyA9IHdvcmtlci0+cGFyYW1zOwotCi0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgcmMgPSAwOwotCi0JaWYgKHByaXYtPndtbV9tb2RlID09IE1XTDhLX1dNTV9ESVNBQkxFKQotCQlpZiAobXdsOGtfc2V0X3dtbShodywgTVdMOEtfV01NX0VOQUJMRSkpIHsKLQkJCXJjID0gLUVJTlZBTDsKLQkJCWdvdG8gbXdsOGtfY29uZl90eF9leGl0OwotCX0KLQotCWlmIChtd2w4a19zZXRfZWRjYV9wYXJhbXMoaHcsIEdFVF9UWFEocXVldWUpLCBwYXJhbXMtPmN3X21pbiwKLQkJcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wKSkKLQkJCXJjID0gLUVJTlZBTDsKLW13bDhrX2NvbmZfdHhfZXhpdDoKLQlyZXR1cm4gcmM7CisJcmV0dXJuIG13bDhrX3J0c190aHJlc2hvbGQoaHcsIE1XTDhLX0NNRF9TRVQsIHZhbHVlKTsKIH0KIAogc3RhdGljIGludCBtd2w4a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKLQlpbnQgcmM7Ci0Jc3RydWN0IG13bDhrX2NvbmZfdHhfd29ya2VyICp3b3JrZXI7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmM7CiAKLQl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdvcmtlciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOworCWlmICghcmMpIHsKKwkJaWYgKCFwcml2LT53bW1fZW5hYmxlZCkKKwkJCXJjID0gbXdsOGtfc2V0X3dtbShodywgMSk7CiAKLQl3b3JrZXItPnF1ZXVlID0gcXVldWU7Ci0Jd29ya2VyLT5wYXJhbXMgPSBwYXJhbXM7Ci0JcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCi0JCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2NvbmZfdHhfd3QpOwotCWtmcmVlKHdvcmtlcik7Ci0JaWYgKHJjID09IC1FVElNRURPVVQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FSU5WQUw7CisJCWlmICghcmMpCisJCQlyYyA9IG13bDhrX3NldF9lZGNhX3BhcmFtcyhodywgcXVldWUsCisJCQkJCQkgICBwYXJhbXMtPmN3X21pbiwKKwkJCQkJCSAgIHBhcmFtcy0+Y3dfbWF4LAorCQkJCQkJICAgcGFyYW1zLT5haWZzLAorCQkJCQkJICAgcGFyYW1zLT50eG9wKTsKKworCQltd2w4a19md191bmxvY2soaHcpOwogCX0KKwogCXJldHVybiByYzsKIH0KIApAQCAtMzM5Myw0NCArMjc2NiwxNCBAQAogCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMpKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyIHsKLQlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOwotCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0czsKLX07Ci0KLXN0YXRpYyBpbnQgbXdsOGtfZ2V0X3N0YXRzX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCi17Ci0Jc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKndvcmtlciA9Ci0JCShzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqKXd0OwotCi0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQod29ya2VyLT5oZWFkZXIuaHcsIHdvcmtlci0+c3RhdHMpOwotfQotCiBzdGF0aWMgaW50IG13bDhrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKLQlpbnQgcmM7Ci0Jc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKndvcmtlcjsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCi0Jd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOwotCWlmICh3b3JrZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl3b3JrZXItPnN0YXRzID0gc3RhdHM7Ci0JcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCi0JCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2dldF9zdGF0c193dCk7Ci0KLQlrZnJlZSh3b3JrZXIpOwotCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiByYzsKKwlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdChodywgc3RhdHMpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsOGtfb3BzID0gewpAQCAtMzQ0MSw2ICsyNzg0LDcgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IG13bDhrX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gbXdsOGtfY29uZmlnLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gbXdsOGtfYnNzX2luZm9fY2hhbmdlZCwKKwkucHJlcGFyZV9tdWx0aWNhc3QJPSBtd2w4a19wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLnNldF9ydHNfdGhyZXNob2xkCT0gbXdsOGtfc2V0X3J0c190aHJlc2hvbGQsCiAJLmNvbmZfdHgJCT0gbXdsOGtfY29uZl90eCwKQEAgLTM0NTgsMTIgKzI4MDIsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKIAkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDApOwogCi0JaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkgewotCQlpbnQgY291bnQgPSBtd2w4a190eHFfYnVzeShwcml2KTsKLQkJaWYgKGNvdW50ID09IDApIHsKLQkJCWNvbXBsZXRlKHByaXYtPnR4X3dhaXQpOwotCQkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7Ci0JCX0KKwlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMICYmIG13bDhrX3R4cV9idXN5KHByaXYpID09IDApIHsKKwkJY29tcGxldGUocHJpdi0+dHhfd2FpdCk7CisJCXByaXYtPnR4X3dhaXQgPSBOVUxMOwogCX0KIAlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CiB9CkBAIC0zNDczLDcgKzI4MTQsNyBAQAogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtd2w4a19wcml2LCBmaW5hbGl6ZV9qb2luX3dvcmtlcik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPmJlYWNvbl9za2I7Ci0JdTggZHRpbSA9IChNV0w4S19WSUYocHJpdi0+dmlmKSktPmJzc19pbmZvLmR0aW1fcGVyaW9kOworCXU4IGR0aW0gPSBNV0w4S19WSUYocHJpdi0+dmlmKS0+YnNzX2luZm8uZHRpbV9wZXJpb2Q7CiAKIAltd2w4a19maW5hbGl6ZV9qb2luKHByaXYtPmh3LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBkdGltKTsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0zNDg0LDEyICsyODI1LDE2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtd2w4a19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogeworCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKLQlERUNMQVJFX01BQ19CVUYobWFjKTsKIAlpbnQgcmM7CiAJaW50IGk7Ci0JdTggKmZ3OworCisJaWYgKCFwcmludGVkX3ZlcnNpb24pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdmVyc2lvbiAlc1xuIiwgTVdMOEtfREVTQywgTVdMOEtfVkVSU0lPTik7CisJCXByaW50ZWRfdmVyc2lvbiA9IDE7CisJfQogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKQEAgLTM1MTcsMTYgKzI4NjIsMTAgQEAKIAlwcml2ID0gaHctPnByaXY7CiAJcHJpdi0+aHcgPSBodzsKIAlwcml2LT5wZGV2ID0gcGRldjsKLQlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOwotCXByaXYtPnR4X3dhaXQgPSBOVUxMOwotCXByaXYtPmluY29uZmlnID0gZmFsc2U7Ci0JcHJpdi0+d2VwX2VuYWJsZWQgPSAwOwotCXByaXYtPndtbV9tb2RlID0gZmFsc2U7CisJcHJpdi0+d21tX2VuYWJsZWQgPSBmYWxzZTsKIAlwcml2LT5wZW5kaW5nX3R4X3BrdHMgPSAwOwogCXN0cm5jcHkocHJpdi0+bmFtZSwgTVdMOEtfTkFNRSwgc2l6ZW9mKHByaXYtPm5hbWUpKTsKIAotCXNwaW5fbG9ja19pbml0KCZwcml2LT5md19sb2NrKTsKLQogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOwogCkBAIC0zNTU4LDE3ICsyODk3LDE2IEBACiAKIAlody0+cXVldWVzID0gTVdMOEtfVFhfUVVFVUVTOwogCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfCBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CiAKIAkvKiBTZXQgcnNzaSBhbmQgbm9pc2UgdmFsdWVzIHRvIGRCbSAqLwotCWh3LT5mbGFncyB8PSAoSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfCBJRUVFODAyMTFfSFdfTk9JU0VfREJNKTsKKwlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfCBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwogCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2w4a192aWYpOwogCXByaXYtPnZpZiA9IE5VTEw7CiAKIAkvKiBTZXQgZGVmYXVsdCByYWRpbyBzdGF0ZSBhbmQgcHJlYW1ibGUgKi8KLQlwcml2LT5yYWRpb19wcmVhbWJsZSA9IE1XTDhLX1JBRElPX0RFRkFVTFRfUFJFQU1CTEU7Ci0JcHJpdi0+cmFkaW9fc3RhdGUgPSBNV0w4S19SQURJT19ESVNBQkxFOworCXByaXYtPnJhZGlvX29uID0gMDsKKwlwcml2LT5yYWRpb19zaG9ydF9wcmVhbWJsZSA9IDA7CiAKIAkvKiBGaW5hbGl6ZSBqb2luIHdvcmtlciAqLwogCUlOSVRfV09SSygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIsIG13bDhrX2ZpbmFsaXplX2pvaW5fd29ya2VyKTsKQEAgLTM1OTMsNiArMjkzMSwxMiBAQAogCQlnb3RvIGVycl9pb3VubWFwOwogCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOwogCisJbXV0ZXhfaW5pdCgmcHJpdi0+ZndfbXV0ZXgpOworCXByaXYtPmZ3X211dGV4X293bmVyID0gTlVMTDsKKwlwcml2LT5md19tdXRleF9kZXB0aCA9IDA7CisJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJcHJpdi0+aG9zdGNtZF93YWl0ID0gTlVMTDsKKwogCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykgewpAQCAtMzYwMiw4ICsyOTQ2LDcgQEAKIAl9CiAKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7Ci0JcHJpdi0+aW50X21hc2sgPSAwOwotCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9DTEVBUl9TRUwpOwogCWlvd3JpdGUzMigweGZmZmZmZmZmLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTX01BU0spOwogCkBAIC0zNjQwLDkgKzI5ODMsNyBAQAogCSAqIGNvbW1hbmRzIHVzZSBpbnRlcnJ1cHRzIGFuZCBhdm9pZHMgcG9sbGluZy4gIERpc2FibGUKIAkgKiBpbnRlcnJ1cHRzIHdoZW4gZG9uZS4KIAkgKi8KLQlwcml2LT5pbnRfbWFzayB8PSBNV0w4S19BMkhfRVZFTlRTOwotCi0JaW93cml0ZTMyKHByaXYtPmludF9tYXNrLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJaW93cml0ZTMyKE1XTDhLX0EySF9FVkVOVFMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKIAogCS8qIEdldCBjb25maWcgZGF0YSwgbWFjIGFkZHJzIGV0YyAqLwogCXJjID0gbXdsOGtfY21kX2dldF9od19zcGVjKGh3KTsKQEAgLTM2NTIsMTYgKzI5OTMsMTQgQEAKIAl9CiAKIAkvKiBUdXJuIHJhZGlvIG9mZiAqLwotCXJjID0gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19ESVNBQkxFKTsKKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fZGlzYWJsZShodyk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBkaXNhYmxlXG4iLCBwcml2LT5uYW1lKTsKIAkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CiAKIAlyYyA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CkBAIC0zNjcwLDEzICszMDA5LDExIEBACiAJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CiAJfQogCi0JZncgPSAodTggKikmcHJpdi0+ZndfcmV2OwotCXByaW50ayhLRVJOX0lORk8gIiVzOiA4OFcldSAlc1xuIiwgcHJpdi0+bmFtZSwgcHJpdi0+cGFydF9udW0sCi0JCU1XTDhLX0RFU0MpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgVmVyOiVzICBGaXJtd2FyZSBWZXI6JXUuJXUuJXUuJXVcbiIsCi0JCXByaXYtPm5hbWUsIE1XTDhLX1ZFUlNJT04sIGZ3WzNdLCBmd1syXSwgZndbMV0sIGZ3WzBdKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogTUFDIEFkZHJlc3M6ICVzXG4iLCBwcml2LT5uYW1lLAotCSAgICAgICBwcmludF9tYWMobWFjLCBody0+d2lwaHktPnBlcm1fYWRkcikpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiA4OHcldSB2JWQsICVwTSwgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBwcml2LT5wYXJ0X251bSwgcHJpdi0+aHdfcmV2LAorCSAgICAgICBody0+d2lwaHktPnBlcm1fYWRkciwKKwkgICAgICAgKHByaXYtPmZ3X3JldiA+PiAyNCkgJiAweGZmLCAocHJpdi0+ZndfcmV2ID4+IDE2KSAmIDB4ZmYsCisJICAgICAgIChwcml2LT5md19yZXYgPj4gOCkgJiAweGZmLCBwcml2LT5md19yZXYgJiAweGZmKTsKIAogCXJldHVybiAwOwogCkBAIC0zNjg1LDkgKzMwMjIsNyBAQAogCW13bDhrX3JlbGVhc2VfZmlybXdhcmUocHJpdik7CiAKIGVycl9mcmVlX2lycToKLQlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CiAKIGVycl9mcmVlX3F1ZXVlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwppbmRleCBkNjNjODk5Li45NDk4YjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCkBAIC0yMDMsNyArMjAzLDggQEAKIHN0YXRpYyBpbnQgbmV0d2F2ZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsgLyogQ2xvc2UgdGhlIGRldmljZSAqLwogCiAvKiBQYWNrZXQgdHJhbnNtaXNzaW9uIGFuZCBQYWNrZXQgcmVjZXB0aW9uICovCi1zdGF0aWMgaW50IG5ldHdhdmVfc3RhcnRfeG1pdCggc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbmV0d2F2ZV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBuZXR3YXZlX3J4KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogSW50ZXJydXB0IHJvdXRpbmVzICovCkBAIC0xMDI2LDcgKzEwMjcsOCBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5ldHdhdmVfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbmV0d2F2ZV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CiAJLyogVGhpcyBmbGFnIGluZGljYXRlIHRoYXQgdGhlIGhhcmR3YXJlIGNhbid0IHBlcmZvcm0gYSB0cmFuc21pc3Npb24uCiAJICogVGhlb3JpdGljYWxseSwgTkVUMyBjaGVjayBpdCBiZWZvcmUgc2VuZGluZyBhIHBhY2tldCB0byB0aGUgZHJpdmVyLAogCSAqIGJ1dCBpbiBmYWN0IGl0IG5ldmVyIGRvIHRoYXQgYW5kIHBvb2wgY29udGludW91c2x5LgpAQCAtMTA0Nyw3ICsxMDQ5LDcgQEAKICAgICB9CiAgICAgZGV2X2tmcmVlX3NrYihza2IpOwogICAgIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9IC8qIG5ldHdhdmVfc3RhcnRfeG1pdCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnCmluZGV4IDQ0NDExZWIuLjgzYjYzNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgSEVSTUVTCiAJdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKIAlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBDRkc4MDIxMQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IENSWVBUTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUKaW5kZXggMWZjNzQwOS4uOWFiZDYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIG9yaW5vY28gd2lyZWxlc3MgZGV2aWNlIGRyaXZlcnMuCiAjCi1vcmlub2NvLW9ianMgOj0gbWFpbi5vIGZ3Lm8gaHcubyBtaWMubyBzY2FuLm8gd2V4dC5vIGhlcm1lc19kbGQubyBoZXJtZXMubworb3Jpbm9jby1vYmpzIDo9IG1haW4ubyBmdy5vIGh3Lm8gbWljLm8gc2Nhbi5vIHdleHQubyBoZXJtZXNfZGxkLm8gaGVybWVzLm8gY2ZnLm8KIAogb2JqLSQoQ09ORklHX0hFUk1FUykJCSs9IG9yaW5vY28ubwogb2JqLSQoQ09ORklHX1BDTUNJQV9IRVJNRVMpCSs9IG9yaW5vY29fY3MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYwppbmRleCA4YzQwNjVmLi5jNjBkZjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYwpAQCAtMjcsNiArMjcsNyBAQAogc3RydWN0IGFpcnBvcnQgewogCXN0cnVjdCBtYWNpb19kZXYgKm1kZXY7CiAJdm9pZCBfX2lvbWVtICp2YWRkcjsKKwl1bnNpZ25lZCBpbnQgaXJxOwogCWludCBpcnFfcmVxdWVzdGVkOwogCWludCBuZGV2X3JlZ2lzdGVyZWQ7CiB9OwpAQCAtMzQsOCArMzUsOSBAQAogc3RhdGljIGludAogYWlycG9ydF9zdXNwZW5kKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZtZGV2LT5vZmRldi5kZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGFpcnBvcnQgKmNhcmQgPSBwcml2LT5jYXJkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApAQCAtNDgsMTggKzUwLDEwIEBACiAJCXJldHVybiAwOwogCX0KIAotCWVyciA9IF9fb3Jpbm9jb19kb3duKGRldik7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFBCT09LX1NMRUVQX05PVzogRXJyb3IgJWQgZG93bmluZyBpbnRlcmZhY2VcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0KLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCisJb3Jpbm9jb19kb3duKHByaXYpOwogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAKLQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJZGlzYWJsZV9pcnEoY2FyZC0+aXJxKTsKIAlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKIAkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDApOwogCkBAIC02OSw4ICs2Myw5IEBACiBzdGF0aWMgaW50CiBhaXJwb3J0X3Jlc3VtZShzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldik7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmbWRldi0+b2ZkZXYuZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgYWlycG9ydCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCkBAIC04MCw0NyArNzUsMjcgQEAKIAkJCSAgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDEpOwogCW1zbGVlcCgyMDApOwogCi0JZW5hYmxlX2lycShkZXYtPmlycSk7Ci0KLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlIG9uIFBCT09LX1dBS0VcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiAwOwotCX0KKwllbmFibGVfaXJxKGNhcmQtPmlycSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCi0JcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKLQotCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkIG9uIFBCT09LX1dBS0VcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCX0KLQotCisJZXJyID0gb3Jpbm9jb191cChwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50CiBhaXJwb3J0X2RldGFjaChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm1kZXYtPm9mZGV2LmRldik7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmbWRldi0+b2ZkZXYuZGV2KTsKIAlzdHJ1Y3QgYWlycG9ydCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAlpZiAoY2FyZC0+bmRldl9yZWdpc3RlcmVkKQotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlvcmlub2NvX2lmX2RlbChwcml2KTsKIAljYXJkLT5uZGV2X3JlZ2lzdGVyZWQgPSAwOwogCiAJaWYgKGNhcmQtPmlycV9yZXF1ZXN0ZWQpCi0JCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlmcmVlX2lycShjYXJkLT5pcnEsIHByaXYpOwogCWNhcmQtPmlycV9yZXF1ZXN0ZWQgPSAwOwogCiAJaWYgKGNhcmQtPnZhZGRyKQpAQCAtMTM0LDcgKzEwOSw3IEBACiAJc3NsZWVwKDEpOwogCiAJbWFjaW9fc2V0X2RydmRhdGEobWRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDYsNyArMTIxLDYgQEAKIAkgKiByZS1pbml0aWFsaXplIHByb3Blcmx5LCBpdCBmYWxscyBpbiBhIHNjcmVhbWluZyBoZWFwCiAJICogc2hvcnRseSBhZnRlcndhcmRzLiAqLwogI2lmIDAKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAlzdHJ1Y3QgYWlycG9ydCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAKIAkvKiBWaXRhbGx5IGltcG9ydGFudC4gIElmIHdlIGRvbid0IGRvIHRoaXMgaXQgc2VlbXMgd2UgZ2V0IGFuCkBAIC0xNTQsNyArMTI4LDcgQEAKIAkgKiBod191bmF2YWlsYWJsZSBpcyBhbHJlYWR5IHNldCBpdCBkb2Vzbid0IGdldCBBQ0tlZCwgd2UgZ2V0CiAJICogaW50byBhbiBpbnRlcnJ1cHQgbG9vcCBhbmQgdGhlIFBNVSBkZWNpZGVzIHRvIHR1cm4gdXMKIAkgKiBvZmYuICovCi0JZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCWRpc2FibGVfaXJxKGNhcmQtPmlycSk7CiAKIAlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKIAkJCSAgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDApOwpAQCAtMTYzLDcgKzEzNyw3IEBACiAJCQkgIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAxKTsKIAlzc2xlZXAoMSk7CiAKLQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwllbmFibGVfaXJxKGNhcmQtPmlycSk7CiAJc3NsZWVwKDEpOwogI2VuZGlmCiAKQEAgLTE3NCw3ICsxNDgsNiBAQAogYWlycG9ydF9hdHRhY2goc3RydWN0IG1hY2lvX2RldiAqbWRldiwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBhaXJwb3J0ICpjYXJkOwogCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwogCWhlcm1lc190ICpodzsKQEAgLTE4NSwzMyArMTU4LDI5IEBACiAJfQogCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KLQlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZtZGV2LT5vZmRldi5kZXYsCi0JCQkgICAgICAgYWlycG9ydF9oYXJkX3Jlc2V0LCBOVUxMKTsKLQlpZiAoIWRldikgeworCXByaXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZtZGV2LT5vZmRldi5kZXYsCisJCQkJYWlycG9ydF9oYXJkX3Jlc2V0LCBOVUxMKTsKKwlpZiAoIXByaXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwogCiAJaHcgPSAmcHJpdi0+aHc7CiAJY2FyZC0+bWRldiA9IG1kZXY7CiAKLQlpZiAobWFjaW9fcmVxdWVzdF9yZXNvdXJjZShtZGV2LCAwLCAiYWlycG9ydCIpKSB7CisJaWYgKG1hY2lvX3JlcXVlc3RfcmVzb3VyY2UobWRldiwgMCwgRFJJVkVSX05BTUUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbid0IHJlcXVlc3QgSU8gcmVzb3VyY2UgIVxuIik7Ci0JCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCQlmcmVlX29yaW5vY29kZXYocHJpdik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JU0VUX05FVERFVl9ERVYoZGV2LCAmbWRldi0+b2ZkZXYuZGV2KTsKLQotCW1hY2lvX3NldF9kcnZkYXRhKG1kZXYsIGRldik7CisJbWFjaW9fc2V0X2RydmRhdGEobWRldiwgcHJpdik7CiAKIAkvKiBTZXR1cCBpbnRlcnJ1cHRzICYgYmFzZSBhZGRyZXNzICovCi0JZGV2LT5pcnEgPSBtYWNpb19pcnEobWRldiwgMCk7CisJY2FyZC0+aXJxID0gbWFjaW9faXJxKG1kZXYsIDApOwogCXBoeXNfYWRkciA9IG1hY2lvX3Jlc291cmNlX3N0YXJ0KG1kZXYsIDApOyAgLyogUGh5c2ljYWwgYWRkcmVzcyAqLwogCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiUGh5c2ljYWwgYWRkcmVzcyAlbHhcbiIsIHBoeXNfYWRkcik7Ci0JZGV2LT5iYXNlX2FkZHIgPSBwaHlzX2FkZHI7CiAJY2FyZC0+dmFkZHIgPSBpb3JlbWFwKHBoeXNfYWRkciwgQUlSUE9SVF9JT19MRU4pOwogCWlmICghY2FyZC0+dmFkZHIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW9yZW1hcCgpIGZhaWxlZFxuIik7CkBAIC0yMjgsMTggKzE5NywyMyBAQAogCS8qIFJlc2V0IGl0IGJlZm9yZSB3ZSBnZXQgdGhlIGludGVycnVwdCAqLwogCWhlcm1lc19pbml0KGh3KTsKIAotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIDAsIGRldi0+bmFtZSwgZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZG4ndCBnZXQgSVJRICVkXG4iLCBkZXYtPmlycSk7CisJaWYgKHJlcXVlc3RfaXJxKGNhcmQtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIDAsIERSSVZFUl9OQU1FLCBwcml2KSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZG4ndCBnZXQgSVJRICVkXG4iLCBjYXJkLT5pcnEpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAJY2FyZC0+aXJxX3JlcXVlc3RlZCA9IDE7CiAKLQkvKiBUZWxsIHRoZSBzdGFjayB3ZSBleGlzdCAqLwotCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CisJLyogSW5pdGlhbGlzZSB0aGUgbWFpbiBkcml2ZXIgKi8KKwlpZiAob3Jpbm9jb19pbml0KHByaXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pbml0KCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQ2FyZCByZWdpc3RlcmVkIGZvciBpbnRlcmZhY2UgJXNcbiIsIGRldi0+bmFtZSk7CisKKwkvKiBSZWdpc3RlciBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgc3RhY2sgKi8KKwlpZiAob3Jpbm9jb19pZl9hZGQocHJpdiwgcGh5c19hZGRyLCBjYXJkLT5pcnEpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pZl9hZGQoKSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CiAJY2FyZC0+bmRldl9yZWdpc3RlcmVkID0gMTsKIAlyZXR1cm4gMDsKICBmYWlsZWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2NmZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9jZmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2YyZDMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9jZmcuYwpAQCAtMCwwICsxLDIwMyBAQAorLyogY2ZnODAyMTEgc3VwcG9ydAorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAiY2ZnLmgiCisKKy8qIFN1cHBvcnRlZCBiaXRyYXRlcy4gTXVzdCBhZ3JlZSB3aXRoIGh3LmMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgb3Jpbm9jb19yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCB9LAorCXsgLmJpdHJhdGUgPSAyMCB9LAorCXsgLmJpdHJhdGUgPSA1NSB9LAorCXsgLmJpdHJhdGUgPSAxMTAgfSwKK307CisKK3N0YXRpYyBjb25zdCB2b2lkICogY29uc3Qgb3Jpbm9jb193aXBoeV9wcml2aWQgPSAmb3Jpbm9jb193aXBoeV9wcml2aWQ7CisKKy8qIENhbGxlZCBhZnRlciBvcmlub2NvX3ByaXZhdGUgaXMgYWxsb2NhdGVkLiAqLwordm9pZCBvcmlub2NvX3dpcGh5X2luaXQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisKKwl3aXBoeS0+cHJpdmlkID0gb3Jpbm9jb193aXBoeV9wcml2aWQ7CisKKwlzZXRfd2lwaHlfZGV2KHdpcGh5LCBwcml2LT5kZXYpOworfQorCisvKiBDYWxsZWQgYWZ0ZXIgZmlybXdhcmUgaXMgaW5pdGlhbGlzZWQgKi8KK2ludCBvcmlub2NvX3dpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCWludCBpLCBjaGFubmVscyA9IDA7CisKKwlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFKQorCQl3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCWVsc2UKKwkJd2lwaHktPm1heF9zY2FuX3NzaWRzID0gMDsKKworCXdpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisKKwkvKiBUT0RPOiBzaG91bGQgd2Ugc2V0IGlmIHdlIG9ubHkgaGF2ZSBkZW1vIGFkLWhvYz8KKwkgKiAgICAgICAocHJpdi0+aGFzX3BvcnQzKQorCSAqLworCWlmIChwcml2LT5oYXNfaWJzcykKKwkJd2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCisJaWYgKCFwcml2LT5icm9rZW5fbW9uaXRvciB8fCBmb3JjZV9tb25pdG9yKQorCQl3aXBoeS0+aW50ZXJmYWNlX21vZGVzIHw9IEJJVChOTDgwMjExX0lGVFlQRV9NT05JVE9SKTsKKworCXByaXYtPmJhbmQuYml0cmF0ZXMgPSBvcmlub2NvX3JhdGVzOworCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUob3Jpbm9jb19yYXRlcyk7CisKKwkvKiBPbmx5IHN1cHBvcnQgY2hhbm5lbHMgYWxsb3dlZCBieSB0aGUgY2FyZCBFRVBST00gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IGkpKSB7CisJCQlwcml2LT5jaGFubmVsc1tpXS5jZW50ZXJfZnJlcSA9CisJCQkJaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkrMSk7CisJCQljaGFubmVscysrOworCQl9CisJfQorCXByaXYtPmJhbmQuY2hhbm5lbHMgPSBwcml2LT5jaGFubmVsczsKKwlwcml2LT5iYW5kLm5fY2hhbm5lbHMgPSBjaGFubmVsczsKKworCXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCXdpcGh5LT5zaWduYWxfdHlwZSA9IENGRzgwMjExX1NJR05BTF9UWVBFX01CTTsKKworCWkgPSAwOworCWlmIChwcml2LT5oYXNfd2VwKSB7CisJCXByaXYtPmNpcGhlcl9zdWl0ZXNbaV0gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKKwkJaSsrOworCisJCWlmIChwcml2LT5oYXNfYmlnX3dlcCkgeworCQkJcHJpdi0+Y2lwaGVyX3N1aXRlc1tpXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKKwkJCWkrKzsKKwkJfQorCX0KKwlpZiAocHJpdi0+aGFzX3dwYSkgeworCQlwcml2LT5jaXBoZXJfc3VpdGVzW2ldID0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDsKKwkJaSsrOworCX0KKwl3aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IHByaXYtPmNpcGhlcl9zdWl0ZXM7CisJd2lwaHktPm5fY2lwaGVyX3N1aXRlcyA9IGk7CisKKwl3aXBoeS0+cnRzX3RocmVzaG9sZCA9IHByaXYtPnJ0c190aHJlc2g7CisJaWYgKCFwcml2LT5oYXNfbXdvKQorCQl3aXBoeS0+ZnJhZ190aHJlc2hvbGQgPSBwcml2LT5mcmFnX3RocmVzaDsKKworCXJldHVybiB3aXBoeV9yZWdpc3Rlcih3aXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19jaGFuZ2VfdmlmKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvY2s7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZsb2NrKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJaWYgKCFwcml2LT5oYXNfaWJzcyAmJiAhcHJpdi0+aGFzX3BvcnQzKQorCQkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQlpZiAocHJpdi0+YnJva2VuX21vbml0b3IgJiYgIWZvcmNlX21vbml0b3IpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNb25pdG9yIG1vZGUgc3VwcG9ydCBpcyAiCisJCQkgICAgICAgImJ1Z2d5IGluIHRoaXMgZmlybXdhcmUsIG5vdCBlbmFibGluZ1xuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHdpcGh5KSk7CisJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWVycikgeworCQlwcml2LT5pd19tb2RlID0gdHlwZTsKKwkJc2V0X3BvcnRfdHlwZShwcml2KTsKKwkJZXJyID0gb3Jpbm9jb19jb21taXQocHJpdik7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmxvY2spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX3NjYW4oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCWludCBlcnI7CisKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHByaXYtPnNjYW5fcmVxdWVzdCAmJiBwcml2LT5zY2FuX3JlcXVlc3QgIT0gcmVxdWVzdCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPnNjYW5fcmVxdWVzdCA9IHJlcXVlc3Q7CisKKwllcnIgPSBvcmlub2NvX2h3X3RyaWdnZXJfc2Nhbihwcml2LCByZXF1ZXN0LT5zc2lkcyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29fc2V0X2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjaGFubmVsOworCisJaWYgKCFjaGFuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGFuLT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiAtRUlOVkFMOworCisJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihjaGFuLT5jZW50ZXJfZnJlcSk7CisKKwlpZiAoKGNoYW5uZWwgPCAxKSB8fCAoY2hhbm5lbCA+IE5VTV9DSEFOTkVMUykgfHwKKwkgICAgICEocHJpdi0+Y2hhbm5lbF9tYXNrICYgKDEgPDwgKGNoYW5uZWwtMSkpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPmNoYW5uZWwgPSBjaGFubmVsOworCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKKwkJLyogRmFzdCBjaGFubmVsIGNoYW5nZSAtIG5vIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCisJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CisJCQkJCSAgICBIRVJNRVNfVEVTVF9TRVRfQ0hBTk5FTCwKKwkJCQkJY2hhbm5lbCwgTlVMTCk7CisJfQorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG9yaW5vY29fY2ZnX29wcyA9IHsKKwkuY2hhbmdlX3ZpcnR1YWxfaW50ZiA9IG9yaW5vY29fY2hhbmdlX3ZpZiwKKwkuc2V0X2NoYW5uZWwgPSBvcmlub2NvX3NldF9jaGFubmVsLAorCS5zY2FuID0gb3Jpbm9jb19zY2FuLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vY2ZnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZGM5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2NmZy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGNmZzgwMjExIHN1cHBvcnQuCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpZm5kZWYgT1JJTk9DT19DRkdfSAorI2RlZmluZSBPUklOT0NPX0NGR19ICisKKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgb3Jpbm9jb19jZmdfb3BzOworCit2b2lkIG9yaW5vY29fd2lwaHlfaW5pdChzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKK2ludCBvcmlub2NvX3dpcGh5X3JlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCisjZW5kaWYgLyogT1JJTk9DT19DRkdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9mdy5jCmluZGV4IDEwODRiNDMuLjEyNTcyNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMKQEAgLTQsNiArNCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaW5jbHVkZSAiaGVybWVzLmgiCiAjaW5jbHVkZSAiaGVybWVzX2RsZC5oIgpAQCAtOTksNyArMTAwLDcgQEAKIAljb25zdCB2b2lkICplbmQ7CiAJY29uc3QgY2hhciAqZmlybXdhcmU7CiAJY29uc3QgY2hhciAqZndfZXJyOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKIAlpbnQgZXJyID0gMDsKIAogCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKQEAgLTExMSwxMiArMTEyLDExIEBACiAJZWxzZQogCQlmaXJtd2FyZSA9IGZ3LT5zdGFfZnc7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEF0dGVtcHRpbmcgdG8gZG93bmxvYWQgZmlybXdhcmUgJXNcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOworCWRldl9kYmcoZGV2LCAiQXR0ZW1wdGluZyB0byBkb3dubG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlybXdhcmUpOwogCiAJLyogUmVhZCBjdXJyZW50IHBsdWcgZGF0YSAqLwogCWVyciA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsIGZ3LT5wZGFfc2l6ZSwgMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWFkIFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWRldl9kYmcoZGV2LCAiUmVhZCBQREEgcmV0dXJuZWQgJWRcbiIsIGVycik7CiAJaWYgKGVycikKIAkJZ290byBmcmVlOwogCkBAIC0xMjQsOCArMTI0LDcgQEAKIAkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZpcm13YXJlLCBwcml2LT5kZXYpOwogCiAJCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOworCQkJZGV2X2VycihkZXYsICJDYW5ub3QgZmluZCBmaXJtd2FyZSAlc1xuIiwgZmlybXdhcmUpOwogCQkJZXJyID0gLUVOT0VOVDsKIAkJCWdvdG8gZnJlZTsKIAkJfQpAQCAtMTM2LDE2ICsxMzUsMTUgQEAKIAogCWZ3X2VyciA9IHZhbGlkYXRlX2Z3KGhkciwgZndfZW50cnktPnNpemUpOwogCWlmIChmd19lcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgZmlybXdhcmUgaW1hZ2UgZGV0ZWN0ZWQgKCVzKS4gIgotCQkgICAgICAgIkFib3J0aW5nIGRvd25sb2FkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBmd19lcnIpOworCQlkZXZfd2FybihkZXYsICJJbnZhbGlkIGZpcm13YXJlIGltYWdlIGRldGVjdGVkICglcykuICIKKwkJCSAiQWJvcnRpbmcgZG93bmxvYWRcbiIsIGZ3X2Vycik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCiAJLyogRW5hYmxlIGF1eCBwb3J0IHRvIGFsbG93IHByb2dyYW1taW5nICovCiAJZXJyID0gaGVybWVzaV9wcm9ncmFtX2luaXQoaHcsIGxlMzJfdG9fY3B1KGhkci0+ZW50cnlfcG9pbnQpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gaW5pdCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWRldl9kYmcoZGV2LCAiUHJvZ3JhbSBpbml0IHJldHVybmVkICVkXG4iLCBlcnIpOwogCWlmIChlcnIgIT0gMCkKIAkJZ290byBhYm9ydDsKIApAQCAtMTU2LDcgKzE1NCw3IEBACiAJZW5kID0gZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZTsKIAogCWVyciA9IGhlcm1lc19wcm9ncmFtKGh3LCBmaXJzdF9ibG9jaywgZW5kKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlkZXZfZGJnKGRldiwgIlByb2dyYW0gcmV0dXJuZWQgJWRcbiIsIGVycik7CiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIGFib3J0OwogCkBAIC0xNjcsMTkgKzE2NSwxOCBAQAogCiAJZXJyID0gaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGh3LCBmaXJzdF9ibG9jaywgZW5kLCBwZGEsCiAJCQkJCSAgICAgJnBkYVtmdy0+cGRhX3NpemUgLyBzaXplb2YoKnBkYSldKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFwcGx5IFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWRldl9kYmcoZGV2LCAiQXBwbHkgUERBIHJldHVybmVkICVkXG4iLCBlcnIpOwogCWlmIChlcnIpCiAJCWdvdG8gYWJvcnQ7CiAKIAkvKiBUZWxsIGNhcmQgd2UndmUgZmluaXNoZWQgKi8KIAllcnIgPSBoZXJtZXNpX3Byb2dyYW1fZW5kKGh3KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gZW5kIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJZGV2X2RiZyhkZXYsICJQcm9ncmFtIGVuZCByZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gYWJvcnQ7CiAKIAkvKiBDaGVjayBpZiB3ZSdyZSBydW5uaW5nICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoZXJtZXNfcHJlc2VudCByZXR1cm5lZCAlZFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBoZXJtZXNfcHJlc2VudChodykpOworCWRldl9kYmcoZGV2LCAiaGVybWVzX3ByZXNlbnQgcmV0dXJuZWQgJWRcbiIsIGhlcm1lc19wcmVzZW50KGh3KSk7CiAKIGFib3J0OgogCS8qIElmIHdlIHJlcXVlc3RlZCB0aGUgZmlybXdhcmUsIHJlbGVhc2UgaXQuICovCkBAIC0yODIsMTQgKzI3OSwxMyBAQAogc3ltYm9sX2RsX2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCiAJCSAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CiAJaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwogCiAJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgdHJ1ZSkpIHsKIAkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+cHJpX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5wcmlfZncpOworCQkJZGV2X2VycihkZXYsICJDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsIGZ3LT5wcmlfZncpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAl9IGVsc2UKQEAgLTMwMiwxNSArMjk4LDEzIEBACiAJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgdHJ1ZSkpCiAJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUHJpbWFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlkZXZfZXJyKGRldiwgIlByaW1hcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpIHsKIAkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+c3RhX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5zdGFfZncpOworCQkJZGV2X2VycihkZXYsICJDYW5ub3QgZmluZCBmaXJtd2FyZTogJXNcbiIsIGZ3LT5zdGFfZncpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAl9IGVsc2UKQEAgLTMyMiw4ICszMTYsNyBAQAogCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIGZhbHNlKSkKIAkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBTZWNvbmRhcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZGV2X2VycihkZXYsICJTZWNvbmRhcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMKaW5kZXggZjJjOTE4Yy4uMWEyZmNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jCkBAIC00NjksNyArNDY5LDcgQEAKIAl1MTYgcmxlbmd0aCwgcnR5cGU7CiAJdW5zaWduZWQgbndvcmRzOwogCi0JaWYgKChidWZzaXplIDwgMCkgfHwgKGJ1ZnNpemUgJSAyKSkKKwlpZiAoYnVmc2l6ZSAlIDIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfQUNDRVNTLCByaWQsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKaW5kZXggYzc4YzQ0Mi4uMmRkZGJiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCkBAIC0zNDIsNyArMzQyLDcgQEAKIAlfX2xlNjQJdGltZXN0YW1wOwogCV9fbGUxNgliZWFjb25faW50ZXJ2YWw7CiAJX19sZTE2CWNhcGFiaWxpdGllczsKLQl1OAlkYXRhWzMxNl07CisJdTgJZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX05PVF9DT05ORUNURUQgICAoMHgwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYwppbmRleCBhOWJhMTk1Li5hM2VlZmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAKIAkvKiBPcGVuIGF1eGlsaWFyeSBwb3J0ICovCiAJcmV0ID0gaGVybWVzX2F1eF9jb250cm9sKGh3LCAxKTsKLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkFVWCBlbmFibGUgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJcHJfZGVidWcoUEZYICJBVVggZW5hYmxlIHJldHVybmVkICVkXG4iLCByZXQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTMxOSwxMiArMzE5LDEyIEBACiAKIAkvKiBDbG9zZSBhdXggcG9ydCAqLwogCXJldCA9IGhlcm1lc19hdXhfY29udHJvbChodywgMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJBVVggZGlzYWJsZSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwlwcl9kZWJ1ZyhQRlggIkFVWCBkaXNhYmxlIHJldHVybmVkICVkXG4iLCByZXQpOwogCiAJLyogQ2hlY2sgUERBIGxlbmd0aCAqLwogCXBkYV9zaXplID0gbGUxNl90b19jcHUocGRhWzBdKTsKLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkFjdHVhbCBQREEgbGVuZ3RoICVkLCBNYXggYWxsb3dlZCAlZFxuIiwKLQkgICAgICAgcGRhX3NpemUsIHBkYV9sZW4pOworCXByX2RlYnVnKFBGWCAiQWN0dWFsIFBEQSBsZW5ndGggJWQsIE1heCBhbGxvd2VkICVkXG4iLAorCQkgcGRhX3NpemUsIHBkYV9sZW4pOwogCWlmIChwZGFfc2l6ZSA+IHBkYV9sZW4pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00MjIsMjAgKzQyMiwxOSBAQAogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gaGVybWVzX2F1eF9jb250cm9sKGh3LCAxKTsKLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkFVWCBlbmFibGUgcmV0dXJuZWQgJWRcbiIsIGVycik7CisJcHJfZGVidWcoUEZYICJBVVggZW5hYmxlIHJldHVybmVkICVkXG4iLCBlcnIpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiRW5hYmxpbmcgdm9sYXRpbGUsIEVQIDB4JTA4eFxuIiwgb2Zmc2V0KTsKKwlwcl9kZWJ1ZyhLRVJOX0RFQlVHIFBGWCAiRW5hYmxpbmcgdm9sYXRpbGUsIEVQIDB4JTA4eFxuIiwgb2Zmc2V0KTsKIAllcnIgPSBoZXJtZXNfZG9pY21kX3dhaXQoaHcsCiAJCQkJIEhFUk1FU19QUk9HUkFNX0VOQUJMRV9WT0xBVElMRSwKIAkJCQkgb2Zmc2V0ICYgMHhGRkZGdSwKIAkJCQkgb2Zmc2V0ID4+IDE2LAogCQkJCSAwLAogCQkJCSBOVUxMKTsKLQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlBST0dSQU1fRU5BQkxFIHJldHVybmVkICVkXG4iLAotCSAgICAgICBlcnIpOworCXByX2RlYnVnKFBGWCAiUFJPR1JBTV9FTkFCTEUgcmV0dXJuZWQgJWRcbiIsIGVycik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDU0LDE2ICs0NTMsMTYgQEAKIAogCXJjID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19QUk9HUkFNX0RJU0FCTEUsIDAsICZyZXNwKTsKIAotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiUFJPR1JBTV9ESVNBQkxFIHJldHVybmVkICVkLCAiCi0JICAgICAgICJyMCAweCUwNHgsIHIxIDB4JTA0eCwgcjIgMHglMDR4XG4iLAotCSAgICAgICByYywgcmVzcC5yZXNwMCwgcmVzcC5yZXNwMSwgcmVzcC5yZXNwMik7CisJcHJfZGVidWcoUEZYICJQUk9HUkFNX0RJU0FCTEUgcmV0dXJuZWQgJWQsICIKKwkJICJyMCAweCUwNHgsIHIxIDB4JTA0eCwgcjIgMHglMDR4XG4iLAorCQkgcmMsIHJlc3AucmVzcDAsIHJlc3AucmVzcDEsIHJlc3AucmVzcDIpOwogCiAJaWYgKChyYyA9PSAwKSAmJgogCSAgICAoKHJlc3Auc3RhdHVzICYgSEVSTUVTX1NUQVRVU19DTURDT0RFKSAhPSBIRVJNRVNfQ01EX0RPV05MRCkpCiAJCXJjID0gLUVJTzsKIAogCWVyciA9IGhlcm1lc19hdXhfY29udHJvbChodywgMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJBVVggZGlzYWJsZSByZXR1cm5lZCAlZFxuIiwgZXJyKTsKKwlwcl9kZWJ1ZyhQRlggIkFVWCBkaXNhYmxlIHJldHVybmVkICVkXG4iLCBlcnIpOwogCiAJLyogQWNrbm93bGVkZ2UgYW55IG91dHN0YW5kaW5nIGNvbW1hbmQgKi8KIAloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4RkZGRik7CkBAIC00OTYsOSArNDk1LDggQEAKIAogCXdoaWxlICgoYmxrYWRkciAhPSBCTE9DS19FTkQpICYmCiAJICAgICAgICgoKHZvaWQgKikgYmxrICsgYmxrbGVuKSA8PSBlbmQpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHIFBGWAotCQkgICAgICAgIlByb2dyYW1taW5nIGJsb2NrIG9mIGxlbmd0aCAlZCB0byBhZGRyZXNzIDB4JTA4eFxuIiwKLQkJICAgICAgIGJsa2xlbiwgYmxrYWRkcik7CisJCXByX2RlYnVnKFBGWCAiUHJvZ3JhbW1pbmcgYmxvY2sgb2YgbGVuZ3RoICVkICIKKwkJCSAidG8gYWRkcmVzcyAweCUwOHhcbiIsIGJsa2xlbiwgYmxrYWRkcik7CiAKICNpZiAhTElNSVRfUFJPR1JBTV9TSVpFCiAJCS8qIHdsX2xrbSBkcml2ZXIgc3BsaXRzIHRoaXMgaW50byB3cml0ZXMgb2YgMjAwMCBieXRlcyAqLwpAQCAtNTEwLDEwICs1MDgsOSBAQAogCQlhZGRyID0gYmxrYWRkcjsKIAogCQl3aGlsZSAoYWRkciA8IChibGthZGRyICsgYmxrbGVuKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JCQkgICAgICAgIlByb2dyYW1taW5nIHN1YmJsb2NrIG9mIGxlbmd0aCAlZCAiCi0JCQkgICAgICAgInRvIGFkZHJlc3MgMHglMDh4LiBEYXRhIEAgJXBcbiIsCi0JCQkgICAgICAgbGVuLCBhZGRyLCAmYmxrLT5kYXRhW2FkZHIgLSBibGthZGRyXSk7CisJCQlwcl9kZWJ1ZyhQRlggIlByb2dyYW1taW5nIHN1YmJsb2NrIG9mIGxlbmd0aCAlZCAiCisJCQkJICJ0byBhZGRyZXNzIDB4JTA4eC4gRGF0YSBAICVwXG4iLAorCQkJCSBsZW4sIGFkZHIsICZibGstPmRhdGFbYWRkciAtIGJsa2FkZHJdKTsKIAogCQkJaGVybWVzX2F1eF9zZXRhZGRyKGh3LCBhZGRyKTsKIAkJCWhlcm1lc193cml0ZV9ieXRlcyhodywgSEVSTUVTX0FVWERBVEEsCkBAIC02NDMsOCArNjQwLDggQEAKIAogCQlwZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQsIHBkYV9lbmQpOwogCQlpZiAocGRpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJGb3VuZCByZWNvcmQgMHglMDR4IGF0ICVwXG4iLAotCQkJICAgICAgIHJlY29yZF9pZCwgcGRpKTsKKwkJCXByX2RlYnVnKFBGWCAiRm91bmQgcmVjb3JkIDB4JTA0eCBhdCAlcFxuIiwKKwkJCQkgcmVjb3JkX2lkLCBwZGkpOwogCiAJCXN3aXRjaCAocmVjb3JkX2lkKSB7CiAJCWNhc2UgMHgxMTA6IC8qIE1vZGVtIFJFRkRBQyB2YWx1ZXMgKi8KQEAgLTY1NCw5ICs2NTEsOSBAQAogCQkJZGVmYXVsdF9wZGkgPSBOVUxMOwogCQkJaWYgKG91dGRvb3JfcGRpKSB7CiAJCQkJcGRpID0gb3V0ZG9vcl9wZGk7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCi0JCQkJICAgICAgICJVc2luZyBvdXRkb29yIHJlY29yZCAweCUwNHggYXQgJXBcbiIsCi0JCQkJICAgICAgIHJlY29yZF9pZCArIDEsIHBkaSk7CisJCQkJcHJfZGVidWcoUEZYCisJCQkJCSAiVXNpbmcgb3V0ZG9vciByZWNvcmQgMHglMDR4IGF0ICVwXG4iLAorCQkJCQkgcmVjb3JkX2lkICsgMSwgcGRpKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDB4NTogLyogIEhXSUYgQ29tcGF0aWJsaXR5ICovCkBAIC02ODQsOSArNjgxLDggQEAKIAkJaWYgKCFwZGkgJiYgZGVmYXVsdF9wZGkpIHsKIAkJCS8qIFVzZSBkZWZhdWx0ICovCiAJCQlwZGkgPSBkZWZhdWx0X3BkaTsKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAotCQkJICAgICAgICJVc2luZyBkZWZhdWx0IHJlY29yZCAweCUwNHggYXQgJXBcbiIsCi0JCQkgICAgICAgcmVjb3JkX2lkLCBwZGkpOworCQkJcHJfZGVidWcoUEZYICJVc2luZyBkZWZhdWx0IHJlY29yZCAweCUwNHggYXQgJXBcbiIsCisJCQkJIHJlY29yZF9pZCwgcGRpKTsKIAkJfQogCiAJCWlmIChwZGkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwppbmRleCBiMzk0NjI3Li4zNTk2NTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCkBAIC0zLDE2ICszLDIyIEBACiAgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJoZXJtZXMuaCIKICNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCiAjaW5jbHVkZSAib3Jpbm9jby5oIgogCiAjaW5jbHVkZSAiaHcuaCIKIAorI2RlZmluZSBTWU1CT0xfTUFYX1ZFUl9MRU4JKDE0KQorCisvKiBTeW1ib2wgZmlybXdhcmUgaGFzIGEgYnVnIGFsbG9jYXRpbmcgYnVmZmVycyBsYXJnZXIgdGhhbiB0aGlzICovCisjZGVmaW5lIFRYX05JQ0JVRl9TSVpFX0JVRwkxNTg1CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERhdGEgdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM2LDYgKzQyLDM0MyBAQAogfTsKICNkZWZpbmUgQklUUkFURV9UQUJMRV9TSVpFIEFSUkFZX1NJWkUoYml0cmF0ZV90YWJsZSkKIAorLyogRmlybXdhcmUgdmVyc2lvbiBlbmNvZGluZyAqLworc3RydWN0IGNvbXBfaWQgeworCXUxNiBpZCwgdmFyaWFudCwgbWFqb3IsIG1pbm9yOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgZnd0eXBlX3QgZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoc3RydWN0IGNvbXBfaWQgKm5pY19pZCkKK3sKKwlpZiAobmljX2lkLT5pZCA8IDB4ODAwMCkKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfQUdFUkU7CisJZWxzZSBpZiAobmljX2lkLT5pZCA9PSAweDgwMDAgJiYgbmljX2lkLT5tYWpvciA9PSAwKQorCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9TWU1CT0w7CisJZWxzZQorCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9JTlRFUlNJTDsKK30KKworLyogU2V0IHByaXYtPmZpcm13YXJlIHR5cGUsIGRldGVybWluZSBmaXJtd2FyZSBwcm9wZXJ0aWVzCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHdlIGhhdmUgcmVnaXN0ZXJyZWQgd2l0aCBuZXRkZXYsCisgKiBzbyBhbGwgZXJyb3JzIGdvIG91dCB3aXRoIGRldl8qIHJhdGhlciB0aGFuIHByaW50aworICovCitpbnQgZGV0ZXJtaW5lX2Z3X2NhcGFiaWxpdGllcyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwlzdHJ1Y3QgY29tcF9pZCBuaWNfaWQsIHN0YV9pZDsKKwl1bnNpZ25lZCBpbnQgZmlybXZlcjsKKwljaGFyIHRtcFtTWU1CT0xfTUFYX1ZFUl9MRU4rMV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyKSkpOworCisJLyogR2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uICovCisJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9OSUNJRCwgJm5pY19pZCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIkNhbm5vdCByZWFkIGhhcmR3YXJlIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbGUxNl90b19jcHVzKCZuaWNfaWQuaWQpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLnZhcmlhbnQpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLm1ham9yKTsKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC5taW5vcik7CisJZGV2X2luZm8oZGV2LCAiSGFyZHdhcmUgaWRlbnRpdHkgJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKKwkJIG5pY19pZC5pZCwgbmljX2lkLnZhcmlhbnQsIG5pY19pZC5tYWpvciwgbmljX2lkLm1pbm9yKTsKKworCXByaXYtPmZpcm13YXJlX3R5cGUgPSBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZSgmbmljX2lkKTsKKworCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLworCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1RBSUQsICZzdGFfaWQpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJDYW5ub3QgcmVhZCBzdGF0aW9uIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbGUxNl90b19jcHVzKCZzdGFfaWQuaWQpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLnZhcmlhbnQpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1ham9yKTsKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC5taW5vcik7CisJZGV2X2luZm8oZGV2LCAiU3RhdGlvbiBpZGVudGl0eSAgJTA0eDolMDR4OiUwNHg6JTA0eFxuIiwKKwkJIHN0YV9pZC5pZCwgc3RhX2lkLnZhcmlhbnQsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKKworCXN3aXRjaCAoc3RhX2lkLmlkKSB7CisJY2FzZSAweDE1OgorCQlkZXZfZXJyKGRldiwgIlByaW1hcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJY2FzZSAweDE0YjoKKwkJZGV2X2VycihkZXYsICJUZXJ0aWFyeSBmaXJtd2FyZSBpcyBhY3RpdmVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwljYXNlIDB4MWY6CS8qIEludGVyc2lsLCBBZ2VyZSwgU3ltYm9sIFNwZWN0cnVtMjQgKi8KKwljYXNlIDB4MjE6CS8qIFN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X25vdGljZShkZXYsICJVbmtub3duIHN0YXRpb24gSUQsIHBsZWFzZSByZXBvcnRcbiIpOworCQlicmVhazsKKwl9CisKKwkvKiBEZWZhdWx0IGNhcGFiaWxpdGllcyAqLworCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDE7CisJcHJpdi0+aGFzX213byA9IDA7CisJcHJpdi0+aGFzX3ByZWFtYmxlID0gMDsKKwlwcml2LT5oYXNfcG9ydDMgPSAxOworCXByaXYtPmhhc19pYnNzID0gMTsKKwlwcml2LT5oYXNfd2VwID0gMDsKKwlwcml2LT5oYXNfYmlnX3dlcCA9IDA7CisJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAwOworCXByaXYtPmhhc19leHRfc2NhbiA9IDA7CisJcHJpdi0+aGFzX3dwYSA9IDA7CisJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOworCisJLyogRGV0ZXJtaW5lIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkvKiBMdWNlbnQgV2F2ZWxhbiBJRUVFLCBMdWNlbnQgT3Jpbm9jbywgQ2FibGV0cm9uIFJvYW1BYm91dCwKKwkJICAgRUxTQSwgTWVsY28sIEhQLCBJQk0sIERlbGwgMTE1MCwgQ29tcGFxIDExMC8yMTAgKi8KKwkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKKwkJCSAiTHVjZW50L0FnZXJlICVkLiUwMmQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7CisKKwkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwgc3RhX2lkLm1pbm9yOworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHg2MDAwNik7CisJCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDQwMDIwKTsKKwkJcHJpdi0+aGFzX2JpZ193ZXAgPSAxOyAvKiBGSVhNRTogdGhpcyBpcyB3cm9uZyAtIGhvdyBkbyB3ZSB0ZWxsCisJCQkJCSAgR29sZCBjYXJkcyBmcm9tIHRoZSBvdGhlcnM/ICovCisJCXByaXYtPmhhc19td28gPSAoZmlybXZlciA+PSAweDYwMDAwKTsKKwkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7IC8qIERvbid0IHdvcmsgaW4gNy41MiA/ICovCisJCXByaXYtPmlic3NfcG9ydCA9IDE7CisJCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4ODAwMGEpOworCQlwcml2LT5kb19md19kb3dubG9hZCA9IDE7CisJCXByaXYtPmJyb2tlbl9tb25pdG9yID0gKGZpcm12ZXIgPj0gMHg4MDAwMCk7CisJCXByaXYtPmhhc19hbHRfdHhjbnRsID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLworCQlwcml2LT5oYXNfZXh0X3NjYW4gPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCisJCXByaXYtPmhhc193cGEgPSAoZmlybXZlciA+PSAweDkwMDJhKTsKKwkJLyogVGVzdGVkIHdpdGggQWdlcmUgZmlybXdhcmUgOgorCQkgKgkxLjE2IDsgNC4wOCA7IDQuNTIgOyA2LjA0IDsgNi4xNiA7IDcuMjggPT4gSmVhbiBJSQorCQkgKiBUZXN0ZWQgQ2FibGVUcm9uIGZpcm13YXJlIDogNC4zMiA9PiBBbnRvbiAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQkvKiBTeW1ib2wgLCAzQ29tIEFpckNvbm5lY3QsIEludGVsLCBFcmljc3NvbiBXTEFOICovCisJCS8qIEludGVsIE1BQyA6IDAwOjAyOkIzOiogKi8KKwkJLyogM0NvbSBNQUMgOiAwMDo1MDpEQToqICovCisJCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKKwkJLyogR2V0IHRoZSBTeW1ib2wgZmlybXdhcmUgdmVyc2lvbiAqLworCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCSAgICAgIEhFUk1FU19SSURfU0VDT05EQVJZVkVSU0lPTl9TWU1CT0wsCisJCQkJICAgICAgU1lNQk9MX01BWF9WRVJfTEVOLCBOVUxMLCAmdG1wKTsKKwkJaWYgKGVycikgeworCQkJZGV2X3dhcm4oZGV2LCAiRXJyb3IgJWQgcmVhZGluZyBTeW1ib2wgZmlybXdhcmUgaW5mby4gIgorCQkJCSAiV2lsZGx5IGd1ZXNzaW5nIGNhcGFiaWxpdGllcy4uLlxuIiwgZXJyKTsKKwkJCWZpcm12ZXIgPSAwOworCQkJdG1wWzBdID0gJ1wwJzsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBmaXJtd2FyZSByZXZpc2lvbiBpcyBhIHN0cmluZywgdGhlIGZvcm1hdCBpcworCQkJICogc29tZXRoaW5nIGxpa2UgOiAiVjIuMjAtMDEiLgorCQkJICogUXVpY2sgYW5kIGRpcnR5IHBhcnNpbmcuLi4gLSBKZWFuIElJCisJCQkgKi8KKwkJCWZpcm12ZXIgPSAoKHRtcFsxXSAtICcwJykgPDwgMTYpCisJCQkJfCAoKHRtcFszXSAtICcwJykgPDwgMTIpCisJCQkJfCAoKHRtcFs0XSAtICcwJykgPDwgOCkKKwkJCQl8ICgodG1wWzZdIC0gJzAnKSA8PCA0KQorCQkJCXwgKHRtcFs3XSAtICcwJyk7CisKKwkJCXRtcFtTWU1CT0xfTUFYX1ZFUl9MRU5dID0gJ1wwJzsKKwkJfQorCisJCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCisJCQkgIlN5bWJvbCAlcyIsIHRtcCk7CisKKwkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MTUwMTIpOworCQlwcml2LT5oYXNfYmlnX3dlcCA9IChmaXJtdmVyID49IDB4MjAwMDApOworCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDIwMDAwICYmIGZpcm12ZXIgPCAweDIyMDAwKSB8fAorCQkJICAgICAgIChmaXJtdmVyID49IDB4MjkwMDAgJiYgZmlybXZlciA8IDB4MzAwMDApIHx8CisJCQkgICAgICAgZmlybXZlciA+PSAweDMxMDAwOworCQlwcml2LT5oYXNfcHJlYW1ibGUgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aWJzc19wb3J0ID0gNDsKKworCQkvKiBTeW1ib2wgZmlybXdhcmUgaXMgZm91bmQgb24gdmFyaW91cyBjYXJkcywgYnV0CisJCSAqIHRoZXJlIGhhcyBiZWVuIG5vIGF0dGVtcHQgdG8gY2hlY2sgZmlybXdhcmUKKwkJICogZG93bmxvYWQgb24gbm9uLXNwZWN0cnVtX2NzIGJhc2VkIGNhcmRzLgorCQkgKgorCQkgKiBHaXZlbiB0aGF0IHRoZSBBZ2VyZSBmaXJtd2FyZSBkb3dubG9hZCB3b3JrcworCQkgKiBkaWZmZXJlbnRseSwgd2Ugc2hvdWxkIGF2b2lkIGRvaW5nIGEgZmlybXdhcmUKKwkJICogZG93bmxvYWQgd2l0aCB0aGUgU3ltYm9sIGFsZ29yaXRobSBvbiBub24tc3BlY3RydW0KKwkJICogY2FyZHMuCisJCSAqCisJCSAqIEZvciBub3cgd2UgY2FuIGlkZW50aWZ5IGEgc3BlY3RydW1fY3MgYmFzZWQgY2FyZAorCQkgKiBiZWNhdXNlIGl0IGhhcyBhIGZpcm13YXJlIHJlc2V0IGZ1bmN0aW9uLgorCQkgKi8KKwkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAocHJpdi0+c3RvcF9mdyAhPSBOVUxMKTsKKworCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAoZmlybXZlciA9PSAweDI1MDEzKSB8fAorCQkJCShmaXJtdmVyID49IDB4MzAwMDAgJiYgZmlybXZlciA8PSAweDMxMDAwKTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgzMTAwMSkgfHwKKwkJCQkgICAgIChmaXJtdmVyID49IDB4MjkwNTcgJiYgZmlybXZlciA8IDB4MzAwMDApOworCQkvKiBUZXN0ZWQgd2l0aCBJbnRlbCBmaXJtd2FyZSA6IDB4MjAwMTUgPT4gSmVhbiBJSSAqLworCQkvKiBUZXN0ZWQgd2l0aCAzQ29tIGZpcm13YXJlIDogMHgxNTAxMiAmIDB4MjIwMDEgPT4gSmVhbiBJSSAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCS8qIEQtTGluaywgTGlua3N5cywgQWR0cm9uLCBab29tQWlyLCBhbmQgbWFueSBvdGhlcnMuLi4KKwkJICogU2Ftc3VuZywgQ29tcGFxIDEwMC8yMDAgYW5kIFByb3hpbSBhcmUgc2xpZ2h0bHkKKwkJICogZGlmZmVyZW50IGFuZCBsZXNzIHdlbGwgdGVzdGVkICovCisJCS8qIEQtTGluayBNQUMgOiAwMDo0MDowNToqICovCisJCS8qIEFkZHRyb24gTUFDIDogMDA6OTA6RDE6KiAqLworCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAorCQkJICJJbnRlcnNpbCAlZC4lZC4lZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yLAorCQkJIHN0YV9pZC52YXJpYW50KTsKKworCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfAorCQkJKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5taW5vciA8PCA4KSB8IHN0YV9pZC52YXJpYW50OworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOyAvKiBGSVhNRSAqLworCQlwcml2LT5oYXNfYmlnX3dlcCA9IHByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDAwMDgwMCk7CisJCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgwMTAzMDEpOworCisJCWlmIChmaXJtdmVyID49IDB4MDAwODAwKQorCQkJcHJpdi0+aWJzc19wb3J0ID0gMDsKKwkJZWxzZSB7CisJCQlkZXZfbm90aWNlKGRldiwgIkludGVyc2lsIGZpcm13YXJlIGVhcmxpZXIgdGhhbiB2MC44LngiCisJCQkJICAgIiAtIHNldmVyYWwgZmVhdHVyZXMgbm90IHN1cHBvcnRlZFxuIik7CisJCQlwcml2LT5pYnNzX3BvcnQgPSAxOworCQl9CisJCWJyZWFrOworCX0KKwlkZXZfaW5mbyhkZXYsICJGaXJtd2FyZSBkZXRlcm1pbmVkIGFzICVzXG4iLCBwcml2LT5md19uYW1lKTsKKworCXJldHVybiAwOworfQorCisvKiBSZWFkIHNldHRpbmdzIGZyb20gRUVQUk9NIGludG8gb3VyIHByaXZhdGUgc3RydWN0dXJlLgorICogTUFDIGFkZHJlc3MgZ2V0cyBkcm9wcGVkIGludG8gY2FsbGVycyBidWZmZXIKKyAqIENhbiBiZSBjYWxsZWQgYmVmb3JlIG5ldGRldiByZWdpc3RyYXRpb24uCisgKi8KK2ludCBvcmlub2NvX2h3X3JlYWRfY2FyZF9zZXR0aW5ncyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCB1OCAqZGV2X2FkZHIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbmlja2J1ZjsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGxlbjsKKwlpbnQgZXJyOworCXUxNiByZWNsZW47CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAorCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGRldl9hZGRyKTsKKwlpZiAoZXJyKSB7CisJCWRldl93YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzIVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWRldl9kYmcoZGV2LCAiTUFDIGFkZHJlc3MgJXBNXG4iLCBkZXZfYWRkcik7CisKKwkvKiBHZXQgdGhlIHN0YXRpb24gbmFtZSAqLworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKKwkJCSAgICAgIHNpemVvZihuaWNrYnVmKSwgJnJlY2xlbiwgJm5pY2tidWYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVhZCBzdGF0aW9uIG5hbWVcbiIpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKG5pY2tidWYubGVuKQorCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIChpbnQpbGUxNl90b19jcHUobmlja2J1Zi5sZW4pKTsKKwllbHNlCisJCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgMiAqIHJlY2xlbik7CisJbWVtY3B5KHByaXYtPm5pY2ssICZuaWNrYnVmLnZhbCwgbGVuKTsKKwlwcml2LT5uaWNrW2xlbl0gPSAnXDAnOworCisJZGV2X2RiZyhkZXYsICJTdGF0aW9uIG5hbWUgXCIlc1wiXG4iLCBwcml2LT5uaWNrKTsKKworCS8qIEdldCBhbGxvd2VkIGNoYW5uZWxzICovCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ0hBTk5FTExJU1QsCisJCQkJICAmcHJpdi0+Y2hhbm5lbF9tYXNrKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2hhbm5lbCBsaXN0IVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEdldCBpbml0aWFsIEFQIGRlbnNpdHkgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKKwkJCQkgICZwcml2LT5hcF9kZW5zaXR5KTsKKwlpZiAoZXJyIHx8IHByaXYtPmFwX2RlbnNpdHkgPCAxIHx8IHByaXYtPmFwX2RlbnNpdHkgPiAzKQorCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOworCisJLyogR2V0IGluaXRpYWwgUlRTIHRocmVzaG9sZCAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKKwkJCQkgICZwcml2LT5ydHNfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgUlRTIHRocmVzaG9sZCFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBHZXQgaW5pdGlhbCBmcmFnbWVudGF0aW9uIHNldHRpbmdzICovCisJaWYgKHByaXYtPmhhc19td28pCisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICZwcml2LT5td29fcm9idXN0KTsKKwllbHNlCisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAmcHJpdi0+ZnJhZ190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBmcmFnbWVudGF0aW9uIHNldHRpbmdzIVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFBvd2VyIG1hbmFnZW1lbnQgc2V0dXAgKi8KKwlpZiAocHJpdi0+aGFzX3BtKSB7CisJCXByaXYtPnBtX29uID0gMDsKKwkJcHJpdi0+cG1fbWNhc3QgPSAxOworCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1BWFNMRUVQRFVSQVRJT04sCisJCQkJCSAgJnByaXYtPnBtX3BlcmlvZCk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCAiCisJCQkJInBlcmlvZCFcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCisJCQkJCSAgJnByaXYtPnBtX3RpbWVvdXQpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgIgorCQkJCSJ0aW1lb3V0IVxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIFByZWFtYmxlIHNldHVwICovCisJaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgeworCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORlBSRUFNQkxFX1NZTUJPTCwKKwkJCQkJICAmcHJpdi0+cHJlYW1ibGUpOworCX0KKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qIENhbiBiZSBjYWxsZWQgYmVmb3JlIG5ldGRldiByZWdpc3RyYXRpb24gKi8KK2ludCBvcmlub2NvX2h3X2FsbG9jYXRlX2ZpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKKwlpZiAoZXJyID09IC1FSU8gJiYgcHJpdi0+bmljYnVmX3NpemUgPiBUWF9OSUNCVUZfU0laRV9CVUcpIHsKKwkJLyogVHJ5IHdvcmthcm91bmQgZm9yIG9sZCBTeW1ib2wgZmlybXdhcmUgYnVnICovCisJCXByaXYtPm5pY2J1Zl9zaXplID0gVFhfTklDQlVGX1NJWkVfQlVHOworCQllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOworCisJCWRldl93YXJuKGRldiwgIkZpcm13YXJlIEFMTE9DIGJ1ZyBkZXRlY3RlZCAiCisJCQkgIihvbGQgU3ltYm9sIGZpcm13YXJlPykuIFdvcmsgYXJvdW5kICVzXG4iLAorCQkJIGVyciA/ICJmYWlsZWQhIiA6ICJvay4iKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoaW50IGJpdHJhdGUsIGludCBhdXRvbWF0aWMpCiB7CiAJaW50IHJhdGVtb2RlID0gLTE7CkBAIC02MywxMiArNDA2LDI0MyBAQAogCSphdXRvbWF0aWMgPSBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5hdXRvbWF0aWM7CiB9CiAKK2ludCBvcmlub2NvX2h3X3Byb2dyYW1fcmlkcyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7CisKKwkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzICovCisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKKwkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKEVUSF9BTEVOKSwgZGV2LT5kZXZfYWRkcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE1BQyBhZGRyZXNzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB1cCB0aGUgbGluayBtb2RlICovCisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBPUlRUWVBFLAorCQkJCSAgIHByaXYtPnBvcnRfdHlwZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHBvcnQgdHlwZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogU2V0IHRoZSBjaGFubmVsL2ZyZXF1ZW5jeSAqLworCWlmIChwcml2LT5jaGFubmVsICE9IDAgJiYgcHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZPV05DSEFOTkVMLAorCQkJCQkgICBwcml2LT5jaGFubmVsKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBjaGFubmVsICVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyLCBwcml2LT5jaGFubmVsKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aGFzX2lic3MpIHsKKwkJdTE2IGNyZWF0ZWlic3M7CisKKwkJaWYgKChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkgJiYgKHByaXYtPmNyZWF0ZWlic3MpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhpcyBmaXJtd2FyZSByZXF1aXJlcyBhbiAiCisJCQkgICAgICAgIkVTU0lEIGluIElCU1MtQWQtSG9jIG1vZGUuXG4iLCBkZXYtPm5hbWUpOworCQkJLyogV2l0aCB3dmxhbl9jcywgaW4gdGhpcyBjYXNlLCB3ZSB3b3VsZCBjcmFzaC4KKwkJCSAqIGhvcGVmdWxseSwgdGhpcyBkcml2ZXIgd2lsbCBiZWhhdmUgYmV0dGVyLi4uCisJCQkgKiBKZWFuIElJICovCisJCQljcmVhdGVpYnNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNyZWF0ZWlic3MgPSBwcml2LT5jcmVhdGVpYnNzOworCQl9CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORkNSRUFURUlCU1MsCisJCQkJCSAgIGNyZWF0ZWlic3MpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIENSRUFURUlCU1NcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCB0aGUgZGVzaXJlZCBCU1NJRCAqLworCWVyciA9IF9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBBUCBhZGRyZXNzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB0aGUgZGVzaXJlZCBFU1NJRCAqLworCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSk7CisJbWVtY3B5KCZpZGJ1Zi52YWwsIHByaXYtPmRlc2lyZWRfZXNzaWQsIHNpemVvZihpZGJ1Zi52YWwpKTsKKwkvKiBXaW5YUCB3YW50cyBwYXJ0bmVyIHRvIGNvbmZpZ3VyZSBPV05TU0lEIGV2ZW4gaW4gSUJTUyBtb2RlLiAoamltYykgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05TU0lELAorCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCisJCQkmaWRidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBPV05TU0lEXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAorCQkJJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgREVTSVJFRFNTSURcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KKwlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+bmljaykpOworCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5uaWNrLCBzaXplb2YoaWRidWYudmFsKSk7CisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKKwkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5uaWNrKSsyKSwKKwkJCSAgICAgICAmaWRidWYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBuaWNrbmFtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgQVAgZGVuc2l0eSAqLworCWlmIChwcml2LT5oYXNfc2Vuc2l0aXZpdHkpIHsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAorCQkJCQkgICBwcml2LT5hcF9kZW5zaXR5KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIHNldHRpbmcgU1lTVEVNU0NBTEUuICIKKwkJCSAgICAgICAiRGlzYWJsaW5nIHNlbnNpdGl2aXR5IGNvbnRyb2xcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCisJCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOworCQl9CisJfQorCisJLyogU2V0IFJUUyB0aHJlc2hvbGQgKi8KKwllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAorCQkJCSAgIHByaXYtPnJ0c190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBSVFMgdGhyZXNob2xkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBvciBNV08gcm9idXN0bmVzcyAqLworCWlmIChwcml2LT5oYXNfbXdvKQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICBwcml2LT5td29fcm9idXN0KTsKKwllbHNlCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZGUkFHTUVOVEFUSU9OVEhSRVNIT0xELAorCQkJCQkgICBwcml2LT5mcmFnX3RocmVzaCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGZyYWdtZW50YXRpb25cbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IGJpdHJhdGUgKi8KKwllcnIgPSBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUocHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGJpdHJhdGVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlpZiAocHJpdi0+aGFzX3BtKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUVOQUJMRUQsCisJCQkJCSAgIHByaXYtPnBtX29uKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsCisJCQkJCSAgIHByaXYtPnBtX21jYXN0KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAorCQkJCQkgICBwcml2LT5wbV9wZXJpb2QpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKKwkJCQkJICAgcHJpdi0+cG1fdGltZW91dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCBwcmVhbWJsZSAtIG9ubHkgZm9yIFN5bWJvbCBzbyBmYXIuLi4gKi8KKwlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCisJCQkJCSAgIHByaXYtPnByZWFtYmxlKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBwcmVhbWJsZVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJLyogU2V0IHVwIGVuY3J5cHRpb24gKi8KKwlpZiAocHJpdi0+aGFzX3dlcCB8fCBwcml2LT5oYXNfd3BhKSB7CisJCWVyciA9IF9fb3Jpbm9jb19od19zZXR1cF9lbmMocHJpdik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGFjdGl2YXRpbmcgZW5jcnlwdGlvblxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgeworCQkvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCisJCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAorCQkJCQkgICAgSEVSTUVTX1RFU1RfTU9OSVRPUiwgMCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KKwkJZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKKwkJCQkJICAgIEhFUk1FU19URVNUX1NUT1AsIDAsIE5VTEwpOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogUmVzZXQgcHJvbWlzY3VpdHkgLyBtdWx0aWNhc3QqLworCXByaXYtPnByb21pc2N1b3VzID0gMDsKKwlwcml2LT5tY19jb3VudCA9IDA7CisKKwkvKiBSZWNvcmQgbW9kZSBjaGFuZ2UgKi8KKwl3ZGV2LT5pZnR5cGUgPSBwcml2LT5pd19tb2RlOworCisJcmV0dXJuIDA7Cit9CisKIC8qIEdldCB0c2MgZnJvbSB0aGUgZmlybXdhcmUgKi8KIGludCBvcmlub2NvX2h3X2dldF90a2lwX2l2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXksIHU4ICp0c2MpCiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnIgPSAwOwotCXU4IHRzY19hcnJbNF1bSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07CisJdTggdHNjX2Fycls0XVtPUklOT0NPX1NFUV9MRU5dOwogCiAJaWYgKChrZXkgPCAwKSB8fCAoa2V5ID49IDQpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE5NCwxMiArNzY4LDI5IEBACiB7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnIgPSAwOworCWludCBpOwogCiAJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CiAJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCXsKKwkJc3RydWN0IG9yaW5vY29fa2V5IGtleXNbT1JJTk9DT19NQVhfS0VZU107CisKKwkJbWVtc2V0KCZrZXlzLCAwLCBzaXplb2Yoa2V5cykpOworCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfS0VZUzsgaSsrKSB7CisJCQlpbnQgbGVuID0gbWluKHByaXYtPmtleXNbaV0ua2V5X2xlbiwKKwkJCQkgICAgICBPUklOT0NPX01BWF9LRVlfU0laRSk7CisJCQltZW1jcHkoJmtleXNbaV0uZGF0YSwgcHJpdi0+a2V5c1tpXS5rZXksIGxlbik7CisJCQlpZiAobGVuID4gU01BTExfS0VZX1NJWkUpCisJCQkJa2V5c1tpXS5sZW4gPSBjcHVfdG9fbGUxNihMQVJHRV9LRVlfU0laRSk7CisJCQllbHNlIGlmIChsZW4gPiAwKQorCQkJCWtleXNbaV0ubGVuID0gY3B1X3RvX2xlMTYoU01BTExfS0VZX1NJWkUpOworCQkJZWxzZQorCQkJCWtleXNbaV0ubGVuID0gY3B1X3RvX2xlMTYoMCk7CisJCX0KKwogCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKIAkJCQkJICBIRVJNRVNfUklEX0NORldFUEtFWVNfQUdFUkUsCi0JCQkJCSAgJnByaXYtPmtleXMpOworCQkJCQkgICZrZXlzKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKQEAgLTIwOCwyOCArNzk5LDM4IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlicmVhazsKKwl9CiAJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgogCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CiAJCXsKIAkJCWludCBrZXlsZW47Ci0JCQlpbnQgaTsKIAogCQkJLyogRm9yY2UgdW5pZm9ybSBrZXkgbGVuZ3RoIHRvIHdvcmsgYXJvdW5kCiAJCQkgKiBmaXJtd2FyZSBidWdzICovCi0JCQlrZXlsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW3ByaXYtPnR4X2tleV0ubGVuKTsKKwkJCWtleWxlbiA9IHByaXYtPmtleXNbcHJpdi0+dHhfa2V5XS5rZXlfbGVuOwogCiAJCQlpZiAoa2V5bGVuID4gTEFSR0VfS0VZX1NJWkUpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCVUc6IEtleSAlZCBoYXMgb3ZlcnNpemUgbGVuZ3RoICVkLlxuIiwKIAkJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgcHJpdi0+dHhfa2V5LCBrZXlsZW4pOwogCQkJCXJldHVybiAtRTJCSUc7Ci0JCQl9CisJCQl9IGVsc2UgaWYgKGtleWxlbiA+IFNNQUxMX0tFWV9TSVpFKQorCQkJCWtleWxlbiA9IExBUkdFX0tFWV9TSVpFOworCQkJZWxzZSBpZiAoa2V5bGVuID4gMCkKKwkJCQlrZXlsZW4gPSBTTUFMTF9LRVlfU0laRTsKKwkJCWVsc2UKKwkJCQlrZXlsZW4gPSAwOwogCiAJCQkvKiBXcml0ZSBhbGwgNCBrZXlzICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfS0VZUzsgaSsrKSB7CisJCQkJdTgga2V5W0xBUkdFX0tFWV9TSVpFXSA9IHsgMCB9OworCisJCQkJbWVtY3B5KGtleSwgcHJpdi0+a2V5c1tpXS5rZXksCisJCQkJICAgICAgIHByaXYtPmtleXNbaV0ua2V5X2xlbik7CisKIAkJCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKIAkJCQkJCUhFUk1FU19SSURfQ05GREVGQVVMVEtFWTAgKyBpLAogCQkJCQkJSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihrZXlsZW4pLAotCQkJCQkJcHJpdi0+a2V5c1tpXS5kYXRhKTsKKwkJCQkJCWtleSk7CiAJCQkJaWYgKGVycikKIAkJCQkJcmV0dXJuIGVycjsKIAkJCX0KQEAgLTI1NSw4ICs4NTYsOCBAQAogCWludCBhdXRoX2ZsYWc7CiAJaW50IGVuY19mbGFnOwogCi0JLyogU2V0dXAgV0VQIGtleXMgZm9yIFdFUCBhbmQgV1BBICovCi0JaWYgKHByaXYtPmVuY29kZV9hbGcpCisJLyogU2V0dXAgV0VQIGtleXMgKi8KKwlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBPUklOT0NPX0FMR19XRVApCiAJCV9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHByaXYpOwogCiAJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKQEAgLTI2NiwxNCArODY3LDE0IEBACiAKIAlpZiAocHJpdi0+d3BhX2VuYWJsZWQpCiAJCWVuY19mbGFnID0gMjsKLQllbHNlIGlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKQorCWVsc2UgaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gT1JJTk9DT19BTEdfV0VQKQogCQllbmNfZmxhZyA9IDE7CiAJZWxzZQogCQllbmNfZmxhZyA9IDA7CiAKIAlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKIAljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6IC8qIEFnZXJlIHN0eWxlIFdFUCAqLwotCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkgeworCQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBPUklOT0NPX0FMR19XRVApIHsKIAkJCS8qIEVuYWJsZSB0aGUgc2hhcmVkLWtleSBhdXRoZW50aWNhdGlvbi4gKi8KIAkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKIAkJCQkJSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTl9BR0VSRSwKQEAgLTI5OCw3ICs4OTksNyBAQAogCiAJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAvKiBJbnRlcnNpbCBzdHlsZSBXRVAgKi8KIAljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOiAvKiBTeW1ib2wgc3R5bGUgV0VQICovCi0JCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKSB7CisJCWlmIChwcml2LT5lbmNvZGVfYWxnID09IE9SSU5PQ09fQUxHX1dFUCkgewogCQkJaWYgKHByaXYtPndlcF9yZXN0cmljdCB8fAogCQkJICAgIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKSkKIAkJCQltYXN0ZXJfd2VwX2ZsYWcgPSBIRVJNRVNfV0VQX1BSSVZBQ1lfSU5WT0tFRCB8CkBAIC0zMTQsNyArOTE1LDcgQEAKIAkJfSBlbHNlCiAJCQltYXN0ZXJfd2VwX2ZsYWcgPSAwOwogCi0JCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJCW1hc3Rlcl93ZXBfZmxhZyB8PSBIRVJNRVNfV0VQX0hPU1RfREVDUllQVDsKIAogCQkvKiBNYXN0ZXIgV0VQIHNldHRpbmcgOiBvbi9vZmYgKi8KQEAgLTMzMSwyMCArOTMyLDIyIEBACiB9CiAKIC8qIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCBpbmNsdWRpbmcgdGhlIHR4IGFuZCByeCBNSUMga2V5cy4KLSAqIHJzYyBtdXN0IGJlIDggYnl0ZXMKLSAqIHRzYyBtdXN0IGJlIDggYnl0ZXMgb3IgTlVMTAorICogcnNjIG11c3QgYmUgTlVMTCBvciB1cCB0byA4IGJ5dGVzCisgKiB0c2MgbXVzdCBiZSBOVUxMIG9yIHVwIHRvIDggYnl0ZXMKICAqLwotaW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaGVybWVzX3QgKmh3LCBpbnQga2V5X2lkeCwgaW50IHNldF90eCwKLQkJCSAgICAgIHU4ICprZXksIHU4ICpyc2MsIHU4ICp0c2MpCitpbnQgX19vcmlub2NvX2h3X3NldF90a2lwX2tleShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5X2lkeCwKKwkJCSAgICAgIGludCBzZXRfdHgsIHU4ICprZXksIHU4ICpyc2MsIHNpemVfdCByc2NfbGVuLAorCQkJICAgICAgdTggKnRzYywgc2l6ZV90IHRzY19sZW4pCiB7CiAJc3RydWN0IHsKIAkJX19sZTE2IGlkeDsKLQkJdTggcnNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCQl1OCByc2NbT1JJTk9DT19TRVFfTEVOXTsKIAkJdTgga2V5W1RLSVBfS0VZTEVOXTsKIAkJdTggdHhfbWljW01JQ19LRVlMRU5dOwogCQl1OCByeF9taWNbTUlDX0tFWUxFTl07Ci0JCXU4IHRzY1tJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKKwkJdTggdHNjW09SSU5PQ09fU0VRX0xFTl07CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgcmV0OwogCWludCBlcnI7CiAJaW50IGs7CkBAIC0zNTksMTcgKzk2MiwyMiBAQAogCW1lbWNweShidWYua2V5LCBrZXksCiAJICAgICAgIHNpemVvZihidWYua2V5KSArIHNpemVvZihidWYudHhfbWljKSArIHNpemVvZihidWYucnhfbWljKSk7CiAKLQlpZiAocnNjID09IE5VTEwpCi0JCW1lbXNldChidWYucnNjLCAwLCBzaXplb2YoYnVmLnJzYykpOwotCWVsc2UKLQkJbWVtY3B5KGJ1Zi5yc2MsIHJzYywgc2l6ZW9mKGJ1Zi5yc2MpKTsKKwlpZiAocnNjX2xlbiA+IHNpemVvZihidWYucnNjKSkKKwkJcnNjX2xlbiA9IHNpemVvZihidWYucnNjKTsKIAotCWlmICh0c2MgPT0gTlVMTCkgewotCQltZW1zZXQoYnVmLnRzYywgMCwgc2l6ZW9mKGJ1Zi50c2MpKTsKKwlpZiAodHNjX2xlbiA+IHNpemVvZihidWYudHNjKSkKKwkJdHNjX2xlbiA9IHNpemVvZihidWYudHNjKTsKKworCW1lbXNldChidWYucnNjLCAwLCBzaXplb2YoYnVmLnJzYykpOworCW1lbXNldChidWYudHNjLCAwLCBzaXplb2YoYnVmLnRzYykpOworCisJaWYgKHJzYyAhPSBOVUxMKQorCQltZW1jcHkoYnVmLnJzYywgcnNjLCByc2NfbGVuKTsKKworCWlmICh0c2MgIT0gTlVMTCkKKwkJbWVtY3B5KGJ1Zi50c2MsIHRzYywgdHNjX2xlbik7CisJZWxzZQogCQlidWYudHNjWzRdID0gMHgxMDsKLQl9IGVsc2UgewotCQltZW1jcHkoYnVmLnRzYywgdHNjLCBzaXplb2YoYnVmLnRzYykpOwotCX0KIAogCS8qIFdhaXQgdXB0byAxMDBtcyBmb3IgdHggcXVldWUgdG8gZW1wdHkgKi8KIAlmb3IgKGsgPSAxMDA7IGsgPiAwOyBrLS0pIHsKQEAgLTM5NSw3ICsxMDAzLDYgQEAKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVycjsKIAotCW1lbXNldCgmcHJpdi0+dGtpcF9rZXlba2V5X2lkeF0sIDAsIHNpemVvZihwcml2LT50a2lwX2tleVtrZXlfaWR4XSkpOwogCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKIAkJCQkgICBIRVJNRVNfUklEX0NORlJFTURFRkFVTFRUS0lQS0VZX0FHRVJFLAogCQkJCSAgIGtleV9pZHgpOwpAQCAtNTgyLDMgKzExODksMTI0IEBACiAKIAlyZXR1cm4gMDsKIH0KKworaW50IG9yaW5vY29faHdfdHJpZ2dlcl9zY2FuKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgICAgY29uc3Qgc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFNjYW5uaW5nIHdpdGggcG9ydCAwIGRpc2FibGVkIHdvdWxkIGZhaWwgKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCS8qIEluIG1vbml0b3IgbW9kZSwgdGhlIHNjYW4gcmVzdWx0cyBhcmUgYWx3YXlzIGVtcHR5LgorCSAqIFByb2JlIHJlc3BvbnNlcyBhcmUgcGFzc2VkIHRvIHRoZSBkcml2ZXIgYXMgcmVjZWl2ZWQKKwkgKiBmcmFtZXMgYW5kIGNvdWxkIGJlIHByb2Nlc3NlZCBpbiBzb2Z0d2FyZS4gKi8KKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7CisJCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZIT1NUU0NBTl9TWU1CT0wsCisJCQkJCQlIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX09OQ0UgfAorCQkJCQkJSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9CQ0FTVCk7CisJCQlicmVhazsKKwkJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiB7CisJCQlfX2xlMTYgcmVxWzNdOworCisJCQlyZXFbMF0gPSBjcHVfdG9fbGUxNigweDNmZmYpOwkvKiBBbGwgY2hhbm5lbHMgKi8KKwkJCXJlcVsxXSA9IGNwdV90b19sZTE2KDB4MDAwMSk7CS8qIHJhdGUgMSBNYnBzICovCisJCQlyZXFbMl0gPSAwOwkJCS8qIEFueSBFU1NJRCAqLworCQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCQkgIEhFUk1FU19SSURfQ05GSE9TVFNDQU4sICZyZXEpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkJaWYgKHNzaWQtPnNzaWRfbGVuID4gMCkgeworCQkJCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7CisJCQkJc2l6ZV90IGxlbiA9IHNzaWQtPnNzaWRfbGVuOworCisJCQkJaWRidWYubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwkJCQltZW1jcHkoaWRidWYudmFsLCBzc2lkLT5zc2lkLCBsZW4pOworCisJCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCisJCQkJCSAgICAgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAorCQkJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihsZW4gKyAyKSwKKwkJCQkJICAgICAgICZpZGJ1Zik7CisJCQl9IGVsc2UKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQkgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAorCQkJCQkJICAgMCk7CS8qIEFueSBFU1NJRCAqLworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKworCQkJaWYgKHByaXYtPmhhc19leHRfc2NhbikgeworCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GU0NBTkNIQU5ORUxTMkdIWiwKKwkJCQkJCTB4N0ZGRik7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byBvdXQ7CisKKwkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywKKwkJCQkJCSAgICAgSEVSTUVTX0lOUV9DSEFOTkVMSU5GTyk7CisJCQl9IGVsc2UKKwkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKKworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIERpc2Fzc29jaWF0ZSBmcm9tIG5vZGUgd2l0aCBCU1NJRCBhZGRyICovCitpbnQgb3Jpbm9jb19od19kaXNhc3NvY2lhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICB1OCAqYWRkciwgdTE2IHJlYXNvbl9jb2RlKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJc3RydWN0IHsKKwkJdTggYWRkcltFVEhfQUxFTl07CisJCV9fbGUxNiByZWFzb25fY29kZTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBidWY7CisKKwkvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgYnkgV1BBIGVuYWJsZWQgQWdlcmUgZncgKi8KKwlpZiAoIXByaXYtPmhhc193cGEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW1lbWNweShidWYuYWRkciwgYWRkciwgRVRIX0FMRU4pOworCWJ1Zi5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbl9jb2RlKTsKKwllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GRElTQVNTT0NJQVRFLAorCQkJCSAgJmJ1Zik7CisJcmV0dXJuIGVycjsKK30KKworaW50IG9yaW5vY29faHdfZ2V0X2N1cnJlbnRfYnNzaWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQkgdTggKmFkZHIpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRCU1NJRCwKKwkJCSAgICAgIEVUSF9BTEVOLCBOVUxMLCBhZGRyKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmgKaW5kZXggZGMzZjIzYS4uOGRmNmU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaApAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KIAogLyogSGFyZHdhcmUgQkFQcyAqLwogI2RlZmluZSBVU0VSX0JBUCAwCkBAIC0yMywxNyArMjQsMjIgQEAKIHN0cnVjdCBvcmlub2NvX3ByaXZhdGU7CiBzdHJ1Y3QgZGV2X2FkZHJfbGlzdDsKIAoraW50IGRldGVybWluZV9md19jYXBhYmlsaXRpZXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgb3Jpbm9jb19od19yZWFkX2NhcmRfc2V0dGluZ3Moc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgdTggKmRldl9hZGRyKTsKK2ludCBvcmlub2NvX2h3X2FsbG9jYXRlX2ZpZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKIGludCBvcmlub2NvX2dldF9iaXRyYXRlbW9kZShpbnQgYml0cmF0ZSwgaW50IGF1dG9tYXRpYyk7CiB2b2lkIG9yaW5vY29fZ2V0X3JhdGVtb2RlX2NmZyhpbnQgcmF0ZW1vZGUsIGludCAqYml0cmF0ZSwgaW50ICphdXRvbWF0aWMpOwogCitpbnQgb3Jpbm9jb19od19wcm9ncmFtX3JpZHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CiBpbnQgb3Jpbm9jb19od19nZXRfdGtpcF9pdihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5LCB1OCAqdHNjKTsKIGludCBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CiBpbnQgb3Jpbm9jb19od19nZXRfYWN0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICpiaXRyYXRlKTsKIGludCBfX29yaW5vY29faHdfc2V0X3dhcChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKIGludCBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKIGludCBfX29yaW5vY29faHdfc2V0dXBfZW5jKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwotaW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaGVybWVzX3QgKmh3LCBpbnQga2V5X2lkeCwgaW50IHNldF90eCwKLQkJCSAgICAgIHU4ICprZXksIHU4ICpyc2MsIHU4ICp0c2MpOworaW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleV9pZHgsCisJCQkgICAgICBpbnQgc2V0X3R4LCB1OCAqa2V5LCB1OCAqcnNjLCBzaXplX3QgcnNjX2xlbiwKKwkJCSAgICAgIHU4ICp0c2MsIHNpemVfdCB0c2NfbGVuKTsKIGludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXlfaWR4KTsKIGludCBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCiAJCQkJICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0LApAQCAtNDMsNSArNDksMTEgQEAKIGludCBvcmlub2NvX2h3X2dldF9mcmVxKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwogaW50IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgICAgaW50ICpudW1yYXRlcywgczMyICpyYXRlcywgaW50IG1heCk7CitpbnQgb3Jpbm9jb19od190cmlnZ2VyX3NjYW4oc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCk7CitpbnQgb3Jpbm9jb19od19kaXNhc3NvY2lhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICB1OCAqYWRkciwgdTE2IHJlYXNvbl9jb2RlKTsKK2ludCBvcmlub2NvX2h3X2dldF9jdXJyZW50X2Jzc2lkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHU4ICphZGRyKTsKIAogI2VuZGlmIC8qIF9PUklOT0NPX0hXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCmluZGV4IGEzNzBlNTEuLjdhMzJiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCkBAIC04MCw2ICs4MCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CkBAIC04OCw2ICs4OSw3IEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCiAjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgogI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKQEAgLTk2LDYgKzk4LDcgQEAKICNpbmNsdWRlICJtaWMuaCIKICNpbmNsdWRlICJmdy5oIgogI2luY2x1ZGUgIndleHQuaCIKKyNpbmNsdWRlICJjZmcuaCIKICNpbmNsdWRlICJtYWluLmgiCiAKICNpbmNsdWRlICJvcmlub2NvLmgiCkBAIC0xNDIsMTMgKzE0NSwxMSBAQAogI2RlZmluZSBPUklOT0NPX01JTl9NVFUJCTI1NgogI2RlZmluZSBPUklOT0NPX01BWF9NVFUJCShJRUVFODAyMTFfTUFYX0RBVEFfTEVOIC0gRU5DQVBTX09WRVJIRUFEKQogCi0jZGVmaW5lIFNZTUJPTF9NQVhfVkVSX0xFTgkoMTQpCiAjZGVmaW5lIE1BWF9JUlFMT09QU19QRVJfSVJRCTEwCiAjZGVmaW5lIE1BWF9JUlFMT09QU19QRVJfSklGRlkJKDIwMDAwL0haKSAvKiBCYXNlZCBvbiBhIGd1ZXN0aW1hdGUgb2YKIAkJCQkJICAgICogaG93IG1hbnkgZXZlbnRzIHRoZQogCQkJCQkgICAgKiBkZXZpY2UgY291bGQKIAkJCQkJICAgICogbGVnaXRpbWF0ZWx5IGdlbmVyYXRlICovCi0jZGVmaW5lIFRYX05JQ0JVRl9TSVpFX0JVRwkxNTg1CQkvKiBCdWcgaW4gU3ltYm9sIGZpcm13YXJlICovCiAKICNkZWZpbmUgRFVNTVlfRklECQkweEZGRkYKIApAQCAtMjA1LDExICsyMDYsMjEgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCitzdHJ1Y3Qgb3Jpbm9jb19zY2FuX2RhdGEgeworCXZvaWQgKmJ1ZjsKKwlzaXplX3QgbGVuOworCWludCB0eXBlOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgX19vcmlub2NvX3VwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworc3RhdGljIGludCBfX29yaW5vY29fZG93bihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK3N0YXRpYyBpbnQgX19vcmlub2NvX2NvbW1pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjE4LDExICsyMjksMTEgQEAKIHZvaWQgc2V0X3BvcnRfdHlwZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQogewogCXN3aXRjaCAocHJpdi0+aXdfbW9kZSkgewotCWNhc2UgSVdfTU9ERV9JTkZSQToKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXByaXYtPnBvcnRfdHlwZSA9IDE7CiAJCXByaXYtPmNyZWF0ZWlic3MgPSAwOwogCQlicmVhazsKLQljYXNlIElXX01PREVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJaWYgKHByaXYtPnByZWZlcl9wb3J0MykgewogCQkJcHJpdi0+cG9ydF90eXBlID0gMzsKIAkJCXByaXYtPmNyZWF0ZWlic3MgPSAwOwpAQCAtMjMxLDcgKzI0Miw3IEBACiAJCQlwcml2LT5jcmVhdGVpYnNzID0gMTsKIAkJfQogCQlicmVhazsKLQljYXNlIElXX01PREVfTU9OSVRPUjoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCXByaXYtPnBvcnRfdHlwZSA9IDM7CiAJCXByaXYtPmNyZWF0ZWlic3MgPSAwOwogCQlicmVhazsKQEAgLTI0NywxNCArMjU4LDE0IEBACiAKIHN0YXRpYyBpbnQgb3Jpbm9jb19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAogCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZXJyID0gX19vcmlub2NvX3VwKGRldik7CisJZXJyID0gX19vcmlub2NvX3VwKHByaXYpOwogCiAJaWYgKCFlcnIpCiAJCXByaXYtPm9wZW4gPSAxOwpAQCAtMjY2LDcgKzI3Nyw3IEBACiAKIHN0YXRpYyBpbnQgb3Jpbm9jb19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCiAJLyogV2UgbXVzdG4ndCB1c2Ugb3Jpbm9jb19sb2NrKCkgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlCkBAIC0yNzYsNyArMjg3LDcgQEAKIAogCXByaXYtPm9wZW4gPSAwOwogCi0JZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKKwllcnIgPSBfX29yaW5vY29fZG93bihwcml2KTsKIAogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAKQEAgLTI4NSwxNCArMjk2LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqb3Jpbm9jb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAKIAlyZXR1cm4gJnByaXYtPnN0YXRzOwogfQogCiBzdGF0aWMgdm9pZCBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKQEAgLTMwNyw3ICszMTgsNyBAQAogCiBzdGF0aWMgaW50IG9yaW5vY29fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAKIAlpZiAoKG5ld19tdHUgPCBPUklOT0NPX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gT1JJTk9DT19NQVhfTVRVKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjYsMTYgKzMzNywxOCBAQAogLyogVHggcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IG9yaW5vY29feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG9yaW5vY29feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJc3RydWN0IG9yaW5vY29fdGtpcF9rZXkgKmtleTsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVyciA9IDA7CiAJdTE2IHR4ZmlkID0gcHJpdi0+dHhmaWQ7CiAJc3RydWN0IGV0aGhkciAqZWg7CiAJaW50IHR4X2NvbnRyb2w7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZG9fbWljOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogVHggb24gc3RvcHBlZCBkZXZpY2UhXG4iLApAQCAtMzU1LDcgKzM2OCw4IEBACiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSB8fCAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpKSB7CisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikgfHwKKwkgICAgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpIHsKIAkJLyogT29wcywgdGhlIGZpcm13YXJlIGhhc24ndCBlc3RhYmxpc2hlZCBhIGNvbm5lY3Rpb24sCiAJCSAgIHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldCAodGhpcyBzZWVtcyB0byBiZSB0aGUKIAkJICAgc2FmZXN0IGFwcHJvYWNoKS4gKi8KQEAgLTM2Niw5ICszODAsMTQgQEAKIAlpZiAoc2tiLT5sZW4gPCBFVEhfSExFTikKIAkJZ290byBkcm9wOwogCisJa2V5ID0gKHN0cnVjdCBvcmlub2NvX3RraXBfa2V5ICopIHByaXYtPmtleXNbcHJpdi0+dHhfa2V5XS5rZXk7CisKKwlkb19taWMgPSAoKHByaXYtPmVuY29kZV9hbGcgPT0gT1JJTk9DT19BTEdfVEtJUCkgJiYKKwkJICAoa2V5ICE9IE5VTEwpKTsKKwogCXR4X2NvbnRyb2wgPSBIRVJNRVNfVFhDVFJMX1RYX09LIHwgSEVSTUVTX1RYQ1RSTF9UWF9FWDsKIAotCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkKKwlpZiAoZG9fbWljKQogCQl0eF9jb250cm9sIHw9IChwcml2LT50eF9rZXkgPDwgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpIHwKIAkJCUhFUk1FU19UWENUUkxfTUlDOwogCkBAIC00NTAsNyArNDY5LDcgQEAKIAl9CiAKIAkvKiBDYWxjdWxhdGUgTWljaGFlbCBNSUMgKi8KLQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHsKKwlpZiAoZG9fbWljKSB7CiAJCXU4IG1pY19idWZbTUlDSEFFTF9NSUNfTEVOICsgMV07CiAJCXU4ICptaWM7CiAJCXNpemVfdCBvZmZzZXQ7CkBAIC00NjgsOCArNDg3LDcgQEAKIAkJCWxlbiA9IE1JQ0hBRUxfTUlDX0xFTjsKIAkJfQogCi0JCW9yaW5vY29fbWljKHByaXYtPnR4X3RmbV9taWMsCi0JCQkgICAgcHJpdi0+dGtpcF9rZXlbcHJpdi0+dHhfa2V5XS50eF9taWMsCisJCW9yaW5vY29fbWljKHByaXYtPnR4X3RmbV9taWMsIGtleS0+dHhfbWljLAogCQkJICAgIGVoLT5oX2Rlc3QsIGVoLT5oX3NvdXJjZSwgMCAvKiBwcmlvcml0eSAqLywKIAkJCSAgICBza2ItPmRhdGEgKyBFVEhfSExFTiwgc2tiLT5sZW4gLSBFVEhfSExFTiwgbWljKTsKIApAQCAtNTE4LDcgKzUzNiw3IEBACiAKIHN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBBTExPQ0ZJRCk7CiAKIAlpZiAoZmlkICE9IHByaXYtPnR4ZmlkKSB7CkBAIC01MzMsNyArNTUxLDcgQEAKIAogc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwogCiAJc3RhdHMtPnR4X3BhY2tldHMrKzsKQEAgLTU0NSw3ICs1NjMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHhleGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CiAJdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpOwogCXUxNiBzdGF0dXM7CkBAIC02MDEsNyArNjE5LDcgQEAKIAogc3RhdGljIHZvaWQgb3Jpbm9jb190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKIAlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKIApAQCAtNjUwLDcgKzY2OCw3IEBACiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCiAJLyogVXNpbmcgc3B5IHN1cHBvcnQgd2l0aCBsb3RzIG9mIFJ4IHBhY2tldHMsIGxpa2UgaW4gYW4KIAkgKiBpbmZyYXN0cnVjdHVyZSAoQVApLCB3aWxsIHJlYWxseSBzbG93IGRvd24gZXZlcnl0aGluZywgYmVjYXVzZQpAQCAtNjg3LDcgKzcwNSw3IEBACiAJaW50IGVycjsKIAlpbnQgbGVuOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAKQEAgLTc3OCw3ICs3OTYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CiAJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CkBAIC04MTYsNyArODM0LDcgQEAKIAl9CiAKIAkvKiBIYW5kbGUgZnJhbWVzIGluIG1vbml0b3IgbW9kZSAqLwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKIAkJb3Jpbm9jb19yeF9tb25pdG9yKGRldiwgcnhmaWQsIGRlc2MpOwogCQlnb3RvIG91dDsKIAl9CkBAIC05MDIsNyArOTIwLDcgQEAKIAkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYywKIAkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKIAl1MTYgc3RhdHVzLCBmYzsKIAlpbnQgbGVuZ3RoOwpAQCAtOTE0LDYgKzkzMiw3IEBACiAKIAkvKiBDYWxjdWxhdGUgYW5kIGNoZWNrIE1JQyAqLwogCWlmIChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQykgeworCQlzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSAqa2V5OwogCQlpbnQga2V5X2lkID0gKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01JQ19LRVlfSUQpID4+CiAJCQkgICAgICBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCk7CiAJCXU4IG1pY1tNSUNIQUVMX01JQ19MRU5dOwpAQCAtOTI3LDE0ICs5NDYsMTggQEAKIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTik7CiAJCWxlbmd0aCAtPSBNSUNIQUVMX01JQ19MRU47CiAKLQkJb3Jpbm9jb19taWMocHJpdi0+cnhfdGZtX21pYywKLQkJCSAgICBwcml2LT50a2lwX2tleVtrZXlfaWRdLnJ4X21pYywKLQkJCSAgICBkZXNjLT5hZGRyMSwKLQkJCSAgICBzcmMsCisJCWtleSA9IChzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSAqKSBwcml2LT5rZXlzW2tleV9pZF0ua2V5OworCisJCWlmICgha2V5KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUmVjZWl2ZWQgZW5jcnlwdGVkIGZyYW1lIGZyb20gIgorCQkJICAgICAgICIlcE0gdXNpbmcga2V5ICVpLCBidXQga2V5IGlzIG5vdCBpbnN0YWxsZWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBzcmMsIGtleV9pZCk7CisJCQlnb3RvIGRyb3A7CisJCX0KKworCQlvcmlub2NvX21pYyhwcml2LT5yeF90Zm1fbWljLCBrZXktPnJ4X21pYywgZGVzYy0+YWRkcjEsIHNyYywKIAkJCSAgICAwLCAvKiBwcmlvcml0eSBvciBRb1M/ICovCi0JCQkgICAgc2tiLT5kYXRhLAotCQkJICAgIHNrYi0+bGVuLAotCQkJICAgICZtaWNbMF0pOworCQkJICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sICZtaWNbMF0pOwogCiAJCWlmIChtZW1jbXAobWljLCByeG1pYywKIAkJCSAgIE1JQ0hBRUxfTUlDX0xFTikpIHsKQEAgLTEwMTYsOCArMTAzOSw4IEBACiAKIHN0YXRpYyB2b2lkIG9yaW5vY29fcnhfaXNyX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKikgZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKIAlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEyNjAsOSArMTI4Myw4MSBAQAogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIHFidWZfc2NhbihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCB2b2lkICpidWYsCisJCSAgICAgIGludCBsZW4sIGludCB0eXBlKQoreworCXN0cnVjdCBvcmlub2NvX3NjYW5fZGF0YSAqc2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNkID0ga21hbGxvYyhzaXplb2YoKnNkKSwgR0ZQX0FUT01JQyk7CisJc2QtPmJ1ZiA9IGJ1ZjsKKwlzZC0+bGVuID0gbGVuOworCXNkLT50eXBlID0gdHlwZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zY2FuX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZzZC0+bGlzdCwgJnByaXYtPnNjYW5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c2Nhbl9sb2NrLCBmbGFncyk7CisKKwlzY2hlZHVsZV93b3JrKCZwcml2LT5wcm9jZXNzX3NjYW4pOworfQorCitzdGF0aWMgdm9pZCBxYWJvcnRfc2NhbihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBvcmlub2NvX3NjYW5fZGF0YSAqc2Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNkID0ga21hbGxvYyhzaXplb2YoKnNkKSwgR0ZQX0FUT01JQyk7CisJc2QtPmxlbiA9IC0xOyAvKiBBYm9ydCAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnNjYW5fbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnNkLT5saXN0LCAmcHJpdi0+c2Nhbl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zY2FuX2xvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dvcmsoJnByaXYtPnByb2Nlc3Nfc2Nhbik7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgcHJvY2Vzc19zY2FuKTsKKwlzdHJ1Y3Qgb3Jpbm9jb19zY2FuX2RhdGEgKnNkLCAqdGVtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZvaWQgKmJ1ZjsKKwlpbnQgbGVuOworCWludCB0eXBlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnNjYW5fbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZCwgdGVtcCwgJnByaXYtPnNjYW5fbGlzdCwgbGlzdCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zY2FuX2xvY2ssIGZsYWdzKTsKKworCQlidWYgPSBzZC0+YnVmOworCQlsZW4gPSBzZC0+bGVuOworCQl0eXBlID0gc2QtPnR5cGU7CisKKwkJbGlzdF9kZWwoJnNkLT5saXN0KTsKKwkJa2ZyZWUoc2QpOworCisJCWlmIChsZW4gPiAwKSB7CisJCQlpZiAodHlwZSA9PSBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPKQorCQkJCW9yaW5vY29fYWRkX2V4dHNjYW5fcmVzdWx0KHByaXYsIGJ1ZiwgbGVuKTsKKwkJCWVsc2UKKwkJCQlvcmlub2NvX2FkZF9ob3N0c2Nhbl9yZXN1bHRzKHByaXYsIGJ1ZiwgbGVuKTsKKworCQkJa2ZyZWUoYnVmKTsKKwkJfSBlbHNlIGlmIChwcml2LT5zY2FuX3JlcXVlc3QpIHsKKwkJCS8qIEVpdGhlciBhYm9ydCBvciBjb21wbGV0ZSB0aGUgc2NhbiAqLworCQkJY2ZnODAyMTFfc2Nhbl9kb25lKHByaXYtPnNjYW5fcmVxdWVzdCwgKGxlbiA8IDApKTsKKwkJCXByaXYtPnNjYW5fcmVxdWVzdCA9IE5VTEw7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c2Nhbl9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNjYW5fbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXUxNiBpbmZvZmlkOwogCXN0cnVjdCB7CiAJCV9fbGUxNiBsZW47CkBAIC0xMzI3LDcgKzE0MjIsNyBAQAogCQl1MTYgbmV3c3RhdHVzOwogCQlpbnQgY29ubmVjdGVkOwogCi0JCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJCWJyZWFrOwogCiAJCWlmIChsZW4gIT0gc2l6ZW9mKGxpbmtzdGF0dXMpKSB7CkBAIC0xMzQ2LDcgKzE0NDEsNyBAQAogCQkgKiB0aGUgaG9zdHNjYW4gZnJhbWUgY2FuIGJlIHJlcXVlc3RlZC4gICovCiAJCWlmIChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFICYmCiAJCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MICYmCi0JCSAgICBwcml2LT5oYXNfaG9zdHNjYW4gJiYgcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7CisJCSAgICBwcml2LT5oYXNfaG9zdHNjYW4gJiYgcHJpdi0+c2Nhbl9yZXF1ZXN0KSB7CiAJCQloZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0wpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEzNzIsNyArMTQ2Nyw3IEBACiAJfQogCWJyZWFrOwogCWNhc2UgSEVSTUVTX0lOUV9TQ0FOOgotCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcyAmJiBwcml2LT5ic3NpZF9maXhlZCAmJgorCQlpZiAoIXByaXYtPnNjYW5fcmVxdWVzdCAmJiBwcml2LT5ic3NpZF9maXhlZCAmJgogCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMKSB7CiAJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5qb2luX3dvcmspOwogCQkJYnJlYWs7CkBAIC0xMzgyLDMwICsxNDc3LDMwIEBACiAJY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOX1NZTUJPTDogewogCQkvKiBSZXN1bHQgb2YgYSBzY2FubmluZy4gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKIAkJICogY2VsbHMgaW4gdGhlIHZpY2luaXR5IC0gSmVhbiBJSSAqLwotCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CiAJCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKIAotCQkvKiBTY2FuIGlzIG5vIGxvbmdlciBpbiBwcm9ncmVzcyAqLwotCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOwotCiAJCS8qIFNhbml0eSBjaGVjayAqLwogCQlpZiAobGVuID4gNDA5NikgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7CisJCQlxYWJvcnRfc2Nhbihwcml2KTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogQWxsb2NhdGUgYnVmZmVyIGZvciByZXN1bHRzICovCiAJCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJ1ZiA9PSBOVUxMKQorCQlpZiAoYnVmID09IE5VTEwpIHsKIAkJCS8qIE5vIG1lbW9yeSwgc28gY2FuJ3QgcHJpbnRrKCkuLi4gKi8KKwkJCXFhYm9ydF9zY2FuKHByaXYpOwogCQkJYnJlYWs7CisJCX0KIAogCQkvKiBSZWFkIHNjYW4gZGF0YSAqLwogCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAodm9pZCAqKSBidWYsIGxlbiwKIAkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKIAkJaWYgKGVycikgewogCQkJa2ZyZWUoYnVmKTsKKwkJCXFhYm9ydF9zY2FuKHByaXYpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTQxOSwyNCArMTUxNCwxNCBAQAogCQl9CiAjZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLwogCi0JCWlmIChvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHByaXYsIGJ1ZiwgbGVuKSA9PSAwKSB7Ci0JCQkvKiBTZW5kIGFuIGVtcHR5IGV2ZW50IHRvIHVzZXIgc3BhY2UuCi0JCQkgKiBXZSBkb24ndCBzZW5kIHRoZSByZWNlaXZlZCBkYXRhIG9uIHRoZSBldmVudCBiZWNhdXNlCi0JCQkgKiBpdCB3b3VsZCByZXF1aXJlIHVzIHRvIGRvIGNvbXBsZXggdHJhbnNjb2RpbmcsIGFuZAotCQkJICogd2Ugd2FudCB0byBtaW5pbWlzZSB0aGUgd29yayBkb25lIGluIHRoZSBpcnEgaGFuZGxlcgotCQkJICogVXNlIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBkYXRhIC0gSmVhbiBJSSAqLwotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7Ci0JCX0KLQkJa2ZyZWUoYnVmKTsKKwkJcWJ1Zl9zY2FuKHByaXYsIGJ1ZiwgbGVuLCB0eXBlKTsKIAl9CiAJYnJlYWs7CiAJY2FzZSBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPOgogCXsKIAkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzczsKIAotCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQlpZiAoIXByaXYtPnNjYW5fcmVxdWVzdCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBHb3QgY2hhbmluZm8gd2l0aG91dCBzY2FuLCAiCiAJCQkgICAgICAgImxlbj0lZFxuIiwgZGV2LT5uYW1lLCBsZW4pOwogCQkJYnJlYWs7CkBAIC0xNDQ0LDI1ICsxNTI5LDEyIEBACiAKIAkJLyogQW4gZW1wdHkgcmVzdWx0IGluZGljYXRlcyB0aGF0IHRoZSBzY2FuIGlzIGNvbXBsZXRlICovCiAJCWlmIChsZW4gPT0gMCkgewotCQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwotCi0JCQkvKiBTY2FuIGlzIG5vIGxvbmdlciBpbiBwcm9ncmVzcyAqLwotCQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKLQotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJCQlxYnVmX3NjYW4ocHJpdiwgTlVMTCwgbGVuLCB0eXBlKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogU2FuaXR5IGNoZWNrICovCi0JCWVsc2UgaWYgKGxlbiA+IHNpemVvZigqYnNzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKS4gIgotCQkJICAgICAgICJUcnVuY2F0aW5nIHJlc3VsdHMgdG8gJXpkIGJ5dGVzLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgc2l6ZW9mKCpic3MpKTsKLQkJCWxlbiA9IHNpemVvZigqYnNzKTsKLQkJfSBlbHNlIGlmIChsZW4gPCAob2Zmc2V0b2Yoc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8sCisJCWVsc2UgaWYgKGxlbiA8IChvZmZzZXRvZihzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbywKIAkJCQkJICAgZGF0YSkgKyAyKSkgewogCQkJLyogRHJvcCB0aGlzIHJlc3VsdCBub3cgc28gd2UgZG9uJ3QgaGF2ZSB0bwogCQkJICoga2VlcCBjaGVja2luZyBsYXRlciAqLwpAQCAtMTQ3MiwyMSArMTU0NCwxOCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlic3MgPSBrbWFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7CisJCWJzcyA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKIAkJaWYgKGJzcyA9PSBOVUxMKQogCQkJYnJlYWs7CiAKIAkJLyogUmVhZCBzY2FuIGRhdGEgKi8KIAkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnNzLCBsZW4sCiAJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpIHsKKwkJaWYgKGVycikKIAkJCWtmcmVlKGJzcyk7Ci0JCQlicmVhazsKLQkJfQorCQllbHNlCisJCQlxYnVmX3NjYW4ocHJpdiwgYnNzLCBsZW4sIHR5cGUpOwogCi0JCW9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChwcml2LCBic3MpOwotCi0JCWtmcmVlKGJzcyk7CiAJCWJyZWFrOwogCX0KIAljYXNlIEhFUk1FU19JTlFfU0VDX1NUQVRfQUdFUkU6CkBAIC0xNTAxLDYgKzE1NzAsOCBAQAogCQkvKiBXZSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBhYm91dCBpdCAqLwogCQlicmVhazsKIAl9CisKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZkcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKQEAgLTE1MTMsMTUgKzE1ODQsMTUgQEAKIC8qIEludGVybmFsIGhhcmR3YXJlIGNvbnRyb2wgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX29yaW5vY29fdXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyOwogCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KIAotCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKKwllcnIgPSBfX29yaW5vY29fY29tbWl0KHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgY29uZmlndXJpbmcgY2FyZFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKQEAgLTE1NDEsMTEgKzE2MTIsMTAgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChfX29yaW5vY29fdXApOwogCi1pbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyOwogCkBAIC0xNTczLDMxICsxNjQzLDkgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChfX29yaW5vY29fZG93bik7CiAKLXN0YXRpYyBpbnQgb3Jpbm9jb19hbGxvY2F0ZV9maWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKLQlpZiAoZXJyID09IC1FSU8gJiYgcHJpdi0+bmljYnVmX3NpemUgPiBUWF9OSUNCVUZfU0laRV9CVUcpIHsKLQkJLyogVHJ5IHdvcmthcm91bmQgZm9yIG9sZCBTeW1ib2wgZmlybXdhcmUgYnVnICovCi0JCXByaXYtPm5pY2J1Zl9zaXplID0gVFhfTklDQlVGX1NJWkVfQlVHOwotCQllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOwotCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmaXJtd2FyZSBBTExPQyBidWcgZGV0ZWN0ZWQgIgotCQkgICAgICAgIihvbGQgU3ltYm9sIGZpcm13YXJlPykuIFdvcmsgYXJvdW5kICVzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIgPyAiZmFpbGVkISIgOiAib2suIik7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVycjsKIApAQCAtMTYwOCwyNDYgKzE2NTYsMTUgQEAKIAkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKIAl9CiAJaWYgKCFlcnIpCi0JCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7CisJCWVyciA9IG9yaW5vY29faHdfYWxsb2NhdGVfZmlkKHByaXYpOwogCiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0wob3Jpbm9jb19yZWluaXRfZmlybXdhcmUpOwogCi1pbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7Ci0KLQkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKEVUSF9BTEVOKSwgZGV2LT5kZXZfYWRkcik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE1BQyBhZGRyZXNzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCB1cCB0aGUgbGluayBtb2RlICovCi0JZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBPUlRUWVBFLAotCQkJCSAgIHByaXYtPnBvcnRfdHlwZSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHBvcnQgdHlwZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JLyogU2V0IHRoZSBjaGFubmVsL2ZyZXF1ZW5jeSAqLwotCWlmIChwcml2LT5jaGFubmVsICE9IDAgJiYgcHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZPV05DSEFOTkVMLAotCQkJCQkgICBwcml2LT5jaGFubmVsKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBjaGFubmVsICVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyLCBwcml2LT5jaGFubmVsKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+aGFzX2lic3MpIHsKLQkJdTE2IGNyZWF0ZWlic3M7Ci0KLQkJaWYgKChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkgJiYgKHByaXYtPmNyZWF0ZWlic3MpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhpcyBmaXJtd2FyZSByZXF1aXJlcyBhbiAiCi0JCQkgICAgICAgIkVTU0lEIGluIElCU1MtQWQtSG9jIG1vZGUuXG4iLCBkZXYtPm5hbWUpOwotCQkJLyogV2l0aCB3dmxhbl9jcywgaW4gdGhpcyBjYXNlLCB3ZSB3b3VsZCBjcmFzaC4KLQkJCSAqIGhvcGVmdWxseSwgdGhpcyBkcml2ZXIgd2lsbCBiZWhhdmUgYmV0dGVyLi4uCi0JCQkgKiBKZWFuIElJICovCi0JCQljcmVhdGVpYnNzID0gMDsKLQkJfSBlbHNlIHsKLQkJCWNyZWF0ZWlic3MgPSBwcml2LT5jcmVhdGVpYnNzOwotCQl9Ci0KLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORkNSRUFURUlCU1MsCi0JCQkJCSAgIGNyZWF0ZWlic3MpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIENSRUFURUlCU1NcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCB0aGUgZGVzaXJlZCBCU1NJRCAqLwotCWVyciA9IF9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBBUCBhZGRyZXNzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBTZXQgdGhlIGRlc2lyZWQgRVNTSUQgKi8KLQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOwotCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBzaXplb2YoaWRidWYudmFsKSk7Ci0JLyogV2luWFAgd2FudHMgcGFydG5lciB0byBjb25maWd1cmUgT1dOU1NJRCBldmVuIGluIElCU1MgbW9kZS4gKGppbWMpICovCi0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOU1NJRCwKLQkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAotCQkJJmlkYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgT1dOU1NJRFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQsCi0JCQlIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKLQkJCSZpZGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIERFU0lSRURTU0lEXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCB0aGUgc3RhdGlvbiBuYW1lICovCi0JaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPm5pY2spKTsKLQltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+bmljaywgc2l6ZW9mKGlkYnVmLnZhbCkpOwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+bmljaykrMiksCi0JCQkgICAgICAgJmlkYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbmlja25hbWVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IEFQIGRlbnNpdHkgKi8KLQlpZiAocHJpdi0+aGFzX3NlbnNpdGl2aXR5KSB7Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKLQkJCQkJICAgcHJpdi0+YXBfZGVuc2l0eSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFNZU1RFTVNDQUxFLiAiCi0JCQkgICAgICAgIkRpc2FibGluZyBzZW5zaXRpdml0eSBjb250cm9sXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQotCQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKLQkJfQotCX0KLQotCS8qIFNldCBSVFMgdGhyZXNob2xkICovCi0JZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKLQkJCQkgICBwcml2LT5ydHNfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUlRTIHRocmVzaG9sZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgb3IgTVdPIHJvYnVzdG5lc3MgKi8KLQlpZiAocHJpdi0+aGFzX213bykKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKLQkJCQkJICAgcHJpdi0+bXdvX3JvYnVzdCk7Ci0JZWxzZQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAgcHJpdi0+ZnJhZ190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBmcmFnbWVudGF0aW9uXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBiaXRyYXRlICovCi0JZXJyID0gX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHByaXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBiaXRyYXRlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBwb3dlciBtYW5hZ2VtZW50ICovCi0JaWYgKHByaXYtPmhhc19wbSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELAotCQkJCQkgICBwcml2LT5wbV9vbik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLAotCQkJCQkgICBwcml2LT5wbV9tY2FzdCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKLQkJCQkJICAgcHJpdi0+cG1fcGVyaW9kKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCi0JCQkJCSAgIHByaXYtPnBtX3RpbWVvdXQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgcHJlYW1ibGUgLSBvbmx5IGZvciBTeW1ib2wgc28gZmFyLi4uICovCi0JaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAotCQkJCQkgICBwcml2LT5wcmVhbWJsZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcHJlYW1ibGVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCB1cCBlbmNyeXB0aW9uICovCi0JaWYgKHByaXYtPmhhc193ZXAgfHwgcHJpdi0+aGFzX3dwYSkgewotCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfZW5jKHByaXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBhY3RpdmF0aW5nIGVuY3J5cHRpb25cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQkvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCi0JCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0JCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAotCQkJCQkgICAgSEVSTUVTX1RFU1RfTU9OSVRPUiwgMCwgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KLQkJZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOwotCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKLQkJCQkJICAgIEhFUk1FU19URVNUX1NUT1AsIDAsIE5VTEwpOwotCX0KLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JLyogU2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KLQlwcml2LT5wcm9taXNjdW91cyA9IDA7Ci0JcHJpdi0+bWNfY291bnQgPSAwOwotCi0JLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLwotCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0vKiBGSVhNRTogcmV0dXJuIGludD8gKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCWludCBwcm9taXNjLCBtY19jb3VudDsKIApAQCAtMTg2NCw2ICsxNjgxLDggQEAKIAogCWVyciA9IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3QocHJpdiwgZGV2LT5tY19saXN0LCBtY19jb3VudCwKIAkJCQkJICAgICAgcHJvbWlzYyk7CisKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LCB3aXRob3V0IGxvY2tzIGhlbGQgLSB1c2UKQEAgLTE4OTYsOSArMTcxNSwxMSBAQAogCiAJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKIAotCS8qIFNjYW5uaW5nIHN1cHBvcnQ6IENsZWFudXAgb2YgZHJpdmVyIHN0cnVjdCAqLwotCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsIDApOwotCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7CisJLyogU2Nhbm5pbmcgc3VwcG9ydDogTm90aWZ5IHNjYW4gY2FuY2VsbGF0aW9uICovCisJaWYgKHByaXYtPnNjYW5fcmVxdWVzdCkgeworCQljZmc4MDIxMV9zY2FuX2RvbmUocHJpdi0+c2Nhbl9yZXF1ZXN0LCAxKTsKKwkJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKwl9CiAKIAlpZiAocHJpdi0+aGFyZF9yZXNldCkgewogCQllcnIgPSAoKnByaXYtPmhhcmRfcmVzZXQpKHByaXYpOwpAQCAtMTkwOSw3ICsxNzMwLDcgQEAKIAkJfQogCX0KIAotCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CisJZXJyID0gb3Jpbm9jb19yZWluaXRfZmlybXdhcmUocHJpdik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CkBAIC0xOTI0LDcgKzE3NDUsNyBAQAogCS8qIHByaXYtPm9wZW4gb3IgcHJpdi0+aHdfdW5hdmFpbGFibGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdoaWxlCiAJICogd2UgZHJvcHBlZCB0aGUgbG9jayAqLwogCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7Ci0JCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOworCQllcnIgPSBfX29yaW5vY29fdXAocHJpdik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkIHJlZW5hYmxpbmcgY2FyZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CkBAIC0xOTQxLDYgKzE3NjIsNjQgQEAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBEZXZpY2UgaGFzIGJlZW4gZGlzYWJsZWQhXG4iLCBkZXYtPm5hbWUpOwogfQogCitzdGF0aWMgaW50IF9fb3Jpbm9jb19jb21taXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IG9yaW5vY29faHdfcHJvZ3JhbV9yaWRzKHByaXYpOworCisJLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLworCSh2b2lkKSBfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBFbnN1cmVzIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhcmUgYXBwbGllZC4gTWF5IHJlc3VsdCBpbiBhIHJlc2V0LgorICogVGhlIGNhbGxlciBzaG91bGQgaG9sZCBwcml2LT5sb2NrCisgKi8KK2ludCBvcmlub2NvX2NvbW1pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJaWYgKHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgeworCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZXJyID0gaGVybWVzX2Rpc2FibGVfcG9ydChodywgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGRpc2FibGUgcG9ydCAiCisJCSAgICAgICAid2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLCBkZXYtPm5hbWUpOworCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBfX29yaW5vY29fY29tbWl0KHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWNvbmZpZ3VyZSBjYXJkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHBvcnQgd2hpbGUgcmVjb25maWd1cmluZyBjYXJkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisgb3V0OgorCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJlc2V0dGluZyBpbnN0ZWFkLi4uXG4iLCBkZXYtPm5hbWUpOworCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwkJZXJyID0gMDsKKwl9CisJcmV0dXJuIGVycjsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSW50ZXJydXB0IGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTk2MCw4ICsxODM5LDggQEAKIAogaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGNvdW50ID0gTUFYX0lSUUxPT1BTX1BFUl9JUlE7CiAJdTE2IGV2c3RhdCwgZXZlbnRzOwpAQCAtMjA5NiwyMjcgKzE5NzUsMTIgQEAKIC8qIEluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGNvbXBfaWQgewotCXUxNiBpZCwgdmFyaWFudCwgbWFqb3IsIG1pbm9yOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0YXRpYyBpbmxpbmUgZnd0eXBlX3QgZGV0ZXJtaW5lX2Zpcm13YXJlX3R5cGUoc3RydWN0IGNvbXBfaWQgKm5pY19pZCkKK2ludCBvcmlub2NvX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKIHsKLQlpZiAobmljX2lkLT5pZCA8IDB4ODAwMCkKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfQUdFUkU7Ci0JZWxzZSBpZiAobmljX2lkLT5pZCA9PSAweDgwMDAgJiYgbmljX2lkLT5tYWpvciA9PSAwKQotCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9TWU1CT0w7Ci0JZWxzZQotCQlyZXR1cm4gRklSTVdBUkVfVFlQRV9JTlRFUlNJTDsKLX0KLQotLyogU2V0IHByaXYtPmZpcm13YXJlIHR5cGUsIGRldGVybWluZSBmaXJtd2FyZSBwcm9wZXJ0aWVzICovCi1zdGF0aWMgaW50IGRldGVybWluZV9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXN0cnVjdCBjb21wX2lkIG5pY19pZCwgc3RhX2lkOwotCXVuc2lnbmVkIGludCBmaXJtdmVyOwotCWNoYXIgdG1wW1NZTUJPTF9NQVhfVkVSX0xFTisxXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDIpKSk7Ci0KLQkvKiBHZXQgdGhlIGhhcmR3YXJlIHZlcnNpb24gKi8KLQllcnIgPSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX05JQ0lELCAmbmljX2lkKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIGhhcmR3YXJlIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlsZTE2X3RvX2NwdXMoJm5pY19pZC5pZCk7Ci0JbGUxNl90b19jcHVzKCZuaWNfaWQudmFyaWFudCk7Ci0JbGUxNl90b19jcHVzKCZuaWNfaWQubWFqb3IpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLm1pbm9yKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEhhcmR3YXJlIGlkZW50aXR5ICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbmljX2lkLmlkLCBuaWNfaWQudmFyaWFudCwKLQkgICAgICAgbmljX2lkLm1ham9yLCBuaWNfaWQubWlub3IpOwotCi0JcHJpdi0+ZmlybXdhcmVfdHlwZSA9IGRldGVybWluZV9maXJtd2FyZV90eXBlKCZuaWNfaWQpOwotCi0JLyogR2V0IHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCi0JZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVEFJRCwgJnN0YV9pZCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzdGF0aW9uIGlkZW50aXR5OiBlcnJvciAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC5pZCk7Ci0JbGUxNl90b19jcHVzKCZzdGFfaWQudmFyaWFudCk7Ci0JbGUxNl90b19jcHVzKCZzdGFfaWQubWFqb3IpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1pbm9yKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gaWRlbnRpdHkgICUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgc3RhX2lkLmlkLCBzdGFfaWQudmFyaWFudCwKLQkgICAgICAgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IpOwotCi0Jc3dpdGNoIChzdGFfaWQuaWQpIHsKLQljYXNlIDB4MTU6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FzZSAweDE0YjoKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGVydGlhcnkgZmlybXdhcmUgaXMgYWN0aXZlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FzZSAweDFmOgkvKiBJbnRlcnNpbCwgQWdlcmUsIFN5bWJvbCBTcGVjdHJ1bTI0ICovCi0JY2FzZSAweDIxOgkvKiBTeW1ib2wgU3BlY3RydW0yNCBUcmlsb2d5ICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVua25vd24gc3RhdGlvbiBJRCwgcGxlYXNlIHJlcG9ydFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWJyZWFrOwotCX0KLQotCS8qIERlZmF1bHQgY2FwYWJpbGl0aWVzICovCi0JcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMTsKLQlwcml2LT5oYXNfbXdvID0gMDsKLQlwcml2LT5oYXNfcHJlYW1ibGUgPSAwOwotCXByaXYtPmhhc19wb3J0MyA9IDE7Ci0JcHJpdi0+aGFzX2lic3MgPSAxOwotCXByaXYtPmhhc193ZXAgPSAwOwotCXByaXYtPmhhc19iaWdfd2VwID0gMDsKLQlwcml2LT5oYXNfYWx0X3R4Y250bCA9IDA7Ci0JcHJpdi0+aGFzX2V4dF9zY2FuID0gMDsKLQlwcml2LT5oYXNfd3BhID0gMDsKLQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7Ci0KLQkvKiBEZXRlcm1pbmUgY2FwYWJpbGl0aWVzIGZyb20gdGhlIGZpcm13YXJlIHZlcnNpb24gKi8KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCS8qIEx1Y2VudCBXYXZlbGFuIElFRUUsIEx1Y2VudCBPcmlub2NvLCBDYWJsZXRyb24gUm9hbUFib3V0LAotCQkgICBFTFNBLCBNZWxjbywgSFAsIElCTSwgRGVsbCAxMTUwLCBDb21wYXEgMTEwLzIxMCAqLwotCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAotCQkJICJMdWNlbnQvQWdlcmUgJWQuJTAyZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKLQotCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfCBzdGFfaWQubWlub3I7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDYwMDA2KTsKLQkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4NDAwMjApOwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IDE7IC8qIEZJWE1FOiB0aGlzIGlzIHdyb25nIC0gaG93IGRvIHdlIHRlbGwKLQkJCQkJICBHb2xkIGNhcmRzIGZyb20gdGhlIG90aGVycz8gKi8KLQkJcHJpdi0+aGFzX213byA9IChmaXJtdmVyID49IDB4NjAwMDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDQwMDIwKTsgLyogRG9uJ3Qgd29yayBpbiA3LjUyID8gKi8KLQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKLQkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHg4MDAwYSk7Ci0JCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMTsKLQkJcHJpdi0+YnJva2VuX21vbml0b3IgPSAoZmlybXZlciA+PSAweDgwMDAwKTsKLQkJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCi0JCXByaXYtPmhhc19leHRfc2NhbiA9IChmaXJtdmVyID49IDB4OTAwMDApOyAvKiBBbGwgOS54ID8gKi8KLQkJcHJpdi0+aGFzX3dwYSA9IChmaXJtdmVyID49IDB4OTAwMmEpOwotCQkvKiBUZXN0ZWQgd2l0aCBBZ2VyZSBmaXJtd2FyZSA6Ci0JCSAqCTEuMTYgOyA0LjA4IDsgNC41MiA7IDYuMDQgOyA2LjE2IDsgNy4yOCA9PiBKZWFuIElJCi0JCSAqIFRlc3RlZCBDYWJsZVRyb24gZmlybXdhcmUgOiA0LjMyID0+IEFudG9uICovCi0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCS8qIFN5bWJvbCAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwsIEVyaWNzc29uIFdMQU4gKi8KLQkJLyogSW50ZWwgTUFDIDogMDA6MDI6QjM6KiAqLwotCQkvKiAzQ29tIE1BQyA6IDAwOjUwOkRBOiogKi8KLQkJbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKHRtcCkpOwotCQkvKiBHZXQgdGhlIFN5bWJvbCBmaXJtd2FyZSB2ZXJzaW9uICovCi0JCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCi0JCQkJICAgICAgSEVSTUVTX1JJRF9TRUNPTkRBUllWRVJTSU9OX1NZTUJPTCwKLQkJCQkgICAgICBTWU1CT0xfTUFYX1ZFUl9MRU4sIE5VTEwsICZ0bXApOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAgICAgIiVzOiBFcnJvciAlZCByZWFkaW5nIFN5bWJvbCBmaXJtd2FyZSBpbmZvLiAiCi0JCQkgICAgICAgIldpbGRseSBndWVzc2luZyBjYXBhYmlsaXRpZXMuLi5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJZmlybXZlciA9IDA7Ci0JCQl0bXBbMF0gPSAnXDAnOwotCQl9IGVsc2UgewotCQkJLyogVGhlIGZpcm13YXJlIHJldmlzaW9uIGlzIGEgc3RyaW5nLCB0aGUgZm9ybWF0IGlzCi0JCQkgKiBzb21ldGhpbmcgbGlrZSA6ICJWMi4yMC0wMSIuCi0JCQkgKiBRdWljayBhbmQgZGlydHkgcGFyc2luZy4uLiAtIEplYW4gSUkKLQkJCSAqLwotCQkJZmlybXZlciA9ICgodG1wWzFdIC0gJzAnKSA8PCAxNikKLQkJCQl8ICgodG1wWzNdIC0gJzAnKSA8PCAxMikKLQkJCQl8ICgodG1wWzRdIC0gJzAnKSA8PCA4KQotCQkJCXwgKCh0bXBbNl0gLSAnMCcpIDw8IDQpCi0JCQkJfCAodG1wWzddIC0gJzAnKTsKLQotCQkJdG1wW1NZTUJPTF9NQVhfVkVSX0xFTl0gPSAnXDAnOwotCQl9Ci0KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiU3ltYm9sICVzIiwgdG1wKTsKLQotCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgxNTAxMik7Ci0JCXByaXYtPmhhc19iaWdfd2VwID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7Ci0JCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MjAwMDAgJiYgZmlybXZlciA8IDB4MjIwMDApIHx8Ci0JCQkgICAgICAgKGZpcm12ZXIgPj0gMHgyOTAwMCAmJiBmaXJtdmVyIDwgMHgzMDAwMCkgfHwKLQkJCSAgICAgICBmaXJtdmVyID49IDB4MzEwMDA7Ci0JCXByaXYtPmhhc19wcmVhbWJsZSA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5pYnNzX3BvcnQgPSA0OwotCi0JCS8qIFN5bWJvbCBmaXJtd2FyZSBpcyBmb3VuZCBvbiB2YXJpb3VzIGNhcmRzLCBidXQKLQkJICogdGhlcmUgaGFzIGJlZW4gbm8gYXR0ZW1wdCB0byBjaGVjayBmaXJtd2FyZQotCQkgKiBkb3dubG9hZCBvbiBub24tc3BlY3RydW1fY3MgYmFzZWQgY2FyZHMuCi0JCSAqCi0JCSAqIEdpdmVuIHRoYXQgdGhlIEFnZXJlIGZpcm13YXJlIGRvd25sb2FkIHdvcmtzCi0JCSAqIGRpZmZlcmVudGx5LCB3ZSBzaG91bGQgYXZvaWQgZG9pbmcgYSBmaXJtd2FyZQotCQkgKiBkb3dubG9hZCB3aXRoIHRoZSBTeW1ib2wgYWxnb3JpdGhtIG9uIG5vbi1zcGVjdHJ1bQotCQkgKiBjYXJkcy4KLQkJICoKLQkJICogRm9yIG5vdyB3ZSBjYW4gaWRlbnRpZnkgYSBzcGVjdHJ1bV9jcyBiYXNlZCBjYXJkCi0JCSAqIGJlY2F1c2UgaXQgaGFzIGEgZmlybXdhcmUgcmVzZXQgZnVuY3Rpb24uCi0JCSAqLwotCQlwcml2LT5kb19md19kb3dubG9hZCA9IChwcml2LT5zdG9wX2Z3ICE9IE5VTEwpOwotCi0JCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IChmaXJtdmVyID09IDB4MjUwMTMpIHx8Ci0JCQkJKGZpcm12ZXIgPj0gMHgzMDAwMCAmJiBmaXJtdmVyIDw9IDB4MzEwMDApOwotCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDMxMDAxKSB8fAotCQkJCSAgICAgKGZpcm12ZXIgPj0gMHgyOTA1NyAmJiBmaXJtdmVyIDwgMHgzMDAwMCk7Ci0JCS8qIFRlc3RlZCB3aXRoIEludGVsIGZpcm13YXJlIDogMHgyMDAxNSA9PiBKZWFuIElJICovCi0JCS8qIFRlc3RlZCB3aXRoIDNDb20gZmlybXdhcmUgOiAweDE1MDEyICYgMHgyMjAwMSA9PiBKZWFuIElJICovCi0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQkJLyogRC1MaW5rLCBMaW5rc3lzLCBBZHRyb24sIFpvb21BaXIsIGFuZCBtYW55IG90aGVycy4uLgotCQkgKiBTYW1zdW5nLCBDb21wYXEgMTAwLzIwMCBhbmQgUHJveGltIGFyZSBzbGlnaHRseQotCQkgKiBkaWZmZXJlbnQgYW5kIGxlc3Mgd2VsbCB0ZXN0ZWQgKi8KLQkJLyogRC1MaW5rIE1BQyA6IDAwOjQwOjA1OiogKi8KLQkJLyogQWRkdHJvbiBNQUMgOiAwMDo5MDpEMToqICovCi0JCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCi0JCQkgIkludGVyc2lsICVkLiVkLiVkIiwgc3RhX2lkLm1ham9yLCBzdGFfaWQubWlub3IsCi0JCQkgc3RhX2lkLnZhcmlhbnQpOwotCi0JCWZpcm12ZXIgPSAoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1ham9yIDw8IDE2KSB8Ci0JCQkoKHVuc2lnbmVkIGxvbmcpc3RhX2lkLm1pbm9yIDw8IDgpIHwgc3RhX2lkLnZhcmlhbnQ7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDAwMDcwMCk7IC8qIEZJWE1FICovCi0JCXByaXYtPmhhc19iaWdfd2VwID0gcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MDAwODAwKTsKLQkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOwotCQlwcml2LT5oYXNfaG9zdHNjYW4gPSAoZmlybXZlciA+PSAweDAxMDMwMSk7Ci0KLQkJaWYgKGZpcm12ZXIgPj0gMHgwMDA4MDApCi0JCQlwcml2LT5pYnNzX3BvcnQgPSAwOwotCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludGVyc2lsIGZpcm13YXJlIGVhcmxpZXIgIgotCQkJICAgICAgICJ0aGFuIHYwLjgueCAtIHNldmVyYWwgZmVhdHVyZXMgbm90IHN1cHBvcnRlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJcHJpdi0+aWJzc19wb3J0ID0gMTsKLQkJfQotCQlicmVhazsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGaXJtd2FyZSBkZXRlcm1pbmVkIGFzICVzXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIHByaXYtPmZ3X25hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBwcml2X3RvX3dpcGh5KHByaXYpOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIG5pY2tidWY7Ci0JdTE2IHJlY2xlbjsKLQlpbnQgbGVuOwogCiAJLyogTm8gbmVlZCB0byBsb2NrLCB0aGUgaHdfdW5hdmFpbGFibGUgZmxhZyBpcyBhbHJlYWR5IHNldCBpbgogCSAqIGFsbG9jX29yaW5vY29kZXYoKSAqLwpAQCAtMjMyNSwxNSArMTk4OSwxNCBAQAogCS8qIEluaXRpYWxpemUgdGhlIGZpcm13YXJlICovCiAJZXJyID0gaGVybWVzX2luaXQoaHcpOwogCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZpcm13YXJlIChlcnIgPSAlZClcbiIsCisJCQllcnIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKKwllcnIgPSBkZXRlcm1pbmVfZndfY2FwYWJpbGl0aWVzKHByaXYpOwogCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZGV2X2VycihkZXYsICJJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMzQ3LDE1NCArMjAxMCw0OCBAQAogCQkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOwogCiAJCS8qIENoZWNrIGZpcm13YXJlIHZlcnNpb24gYWdhaW4gKi8KLQkJZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7CisJCWVyciA9IGRldGVybWluZV9md19jYXBhYmlsaXRpZXMocHJpdik7CiAJCWlmIChlcnIgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X2VycihkZXYsICJJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJaWYgKHByaXYtPmhhc19wb3J0MykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZC1ob2MgZGVtbyBtb2RlIHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCWRldl9pbmZvKGRldiwgIkFkLWhvYyBkZW1vIG1vZGUgc3VwcG9ydGVkXG4iKTsKIAlpZiAocHJpdi0+aGFzX2lic3MpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSUVFRSBzdGFuZGFyZCBJQlNTIGFkLWhvYyBtb2RlIHN1cHBvcnRlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JaWYgKHByaXYtPmhhc193ZXApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXRVAgc3VwcG9ydGVkLCAlcy1iaXQga2V5XG4iLCBkZXYtPm5hbWUsCi0JCSAgICAgICBwcml2LT5oYXNfYmlnX3dlcCA/ICIxMDQiIDogIjQwIik7Ci0JfQorCQlkZXZfaW5mbyhkZXYsICJJRUVFIHN0YW5kYXJkIElCU1MgYWQtaG9jIG1vZGUgc3VwcG9ydGVkXG4iKTsKKwlpZiAocHJpdi0+aGFzX3dlcCkKKwkJZGV2X2luZm8oZGV2LCAiV0VQIHN1cHBvcnRlZCwgJXMtYml0IGtleVxuIiwKKwkJCSBwcml2LT5oYXNfYmlnX3dlcCA/ICIxMDQiIDogIjQwIik7CiAJaWYgKHByaXYtPmhhc193cGEpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXUEEtUFNLIHN1cHBvcnRlZFxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oZGV2LCAiV1BBLVBTSyBzdXBwb3J0ZWRcbiIpOwogCQlpZiAob3Jpbm9jb19taWNfaW5pdChwcml2KSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHNldHVwIE1JQyBjcnlwdG8gIgotCQkJICAgICAgICJhbGdvcml0aG0uIERpc2FibGluZyBXUEEgc3VwcG9ydFxuIiwgZGV2LT5uYW1lKTsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHNldHVwIE1JQyBjcnlwdG8gYWxnb3JpdGhtLiAiCisJCQkJIkRpc2FibGluZyBXUEEgc3VwcG9ydFxuIik7CiAJCQlwcml2LT5oYXNfd3BhID0gMDsKIAkJfQogCX0KIAotCS8qIE5vdyB3ZSBoYXZlIHRoZSBmaXJtd2FyZSBjYXBhYmlsaXRpZXMsIGFsbG9jYXRlIGFwcHJvcGlhdGUKLQkgKiBzaXplZCBzY2FuIGJ1ZmZlcnMgKi8KLQlpZiAob3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShwcml2KSkKKwllcnIgPSBvcmlub2NvX2h3X3JlYWRfY2FyZF9zZXR0aW5ncyhwcml2LCB3aXBoeS0+cGVybV9hZGRyKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQlvcmlub2NvX2Jzc19kYXRhX2luaXQocHJpdik7CiAKLQkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAotCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGRldi0+ZGV2X2FkZHIpOworCWVyciA9IG9yaW5vY29faHdfYWxsb2NhdGVfZmlkKHByaXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIE5JQyBidWZmZXIhXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNQUMgYWRkcmVzcyAlcE1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7Ci0KLQkvKiBHZXQgdGhlIHN0YXRpb24gbmFtZSAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKLQkJCSAgICAgIHNpemVvZihuaWNrYnVmKSwgJnJlY2xlbiwgJm5pY2tidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgc3RhdGlvbiBuYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChuaWNrYnVmLmxlbikKLQkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAoaW50KWxlMTZfdG9fY3B1KG5pY2tidWYubGVuKSk7Ci0JZWxzZQotCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIDIgKiByZWNsZW4pOwotCW1lbWNweShwcml2LT5uaWNrLCAmbmlja2J1Zi52YWwsIGxlbik7Ci0JcHJpdi0+bmlja1tsZW5dID0gJ1wwJzsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogU3RhdGlvbiBuYW1lIFwiJXNcIlxuIiwgZGV2LT5uYW1lLCBwcml2LT5uaWNrKTsKLQotCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgTklDIGJ1ZmZlciFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgYWxsb3dlZCBjaGFubmVscyAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NIQU5ORUxMSVNULAotCQkJCSAgJnByaXYtPmNoYW5uZWxfbWFzayk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBjaGFubmVsIGxpc3QhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IGluaXRpYWwgQVAgZGVuc2l0eSAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAotCQkJCSAgJnByaXYtPmFwX2RlbnNpdHkpOwotCWlmIChlcnIgfHwgcHJpdi0+YXBfZGVuc2l0eSA8IDEgfHwgcHJpdi0+YXBfZGVuc2l0eSA+IDMpCi0JCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDA7Ci0KLQkvKiBHZXQgaW5pdGlhbCBSVFMgdGhyZXNob2xkICovCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAotCQkJCSAgJnByaXYtPnJ0c190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgUlRTIHRocmVzaG9sZCFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgaW5pdGlhbCBmcmFnbWVudGF0aW9uIHNldHRpbmdzICovCi0JaWYgKHByaXYtPmhhc19td28pCi0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAotCQkJCQkgICZwcml2LT5td29fcm9idXN0KTsKLQllbHNlCi0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAmcHJpdi0+ZnJhZ190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBQb3dlciBtYW5hZ2VtZW50IHNldHVwICovCi0JaWYgKHByaXYtPmhhc19wbSkgewotCQlwcml2LT5wbV9vbiA9IDA7Ci0JCXByaXYtPnBtX21jYXN0ID0gMTsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLAotCQkJCQkgICZwcml2LT5wbV9wZXJpb2QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GUE1IT0xET1ZFUkRVUkFUSU9OLAotCQkJCQkgICZwcml2LT5wbV90aW1lb3V0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCB0aW1lb3V0IVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQkvKiBQcmVhbWJsZSBzZXR1cCAqLwotCWlmIChwcml2LT5oYXNfcHJlYW1ibGUpIHsKLQkJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZQUkVBTUJMRV9TWU1CT0wsCi0JCQkJCSAgJnByaXYtPnByZWFtYmxlKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCX0KLQogCS8qIFNldCB1cCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJLyogQnkgZGVmYXVsdCB1c2UgSUVFRS9JQlNTIGFkLWhvYyBtb2RlIGlmIHdlIGhhdmUgaXQgKi8KIAlwcml2LT5wcmVmZXJfcG9ydDMgPSBwcml2LT5oYXNfcG9ydDMgJiYgKCFwcml2LT5oYXNfaWJzcyk7CiAJc2V0X3BvcnRfdHlwZShwcml2KTsKIAlwcml2LT5jaGFubmVsID0gMDsgLyogdXNlIGZpcm13YXJlIGRlZmF1bHQgKi8KIAogCXByaXYtPnByb21pc2N1b3VzID0gMDsKLQlwcml2LT5lbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCXByaXYtPmVuY29kZV9hbGcgPSBPUklOT0NPX0FMR19OT05FOwogCXByaXYtPnR4X2tleSA9IDA7CiAJcHJpdi0+d3BhX2VuYWJsZWQgPSAwOwogCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKQEAgLTI1MDIsMjAgKzIwNTksMjUgQEAKIAlwcml2LT53cGFfaWVfbGVuID0gMDsKIAlwcml2LT53cGFfaWUgPSBOVUxMOwogCisJaWYgKG9yaW5vY29fd2lwaHlfcmVnaXN0ZXIod2lwaHkpKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIE1ha2UgdGhlIGhhcmR3YXJlIGF2YWlsYWJsZSwgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbgogCSAqIHJlbW92ZWQgZWxzZXdoZXJlIChlLmcuIGJ5IFBDTUNJQSBob3QgdW5wbHVnKSAqLwogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVhZHlcbiIsIGRldi0+bmFtZSk7CisJZGV2X2RiZyhkZXYsICJSZWFkeVxuIik7CiAKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19pbml0KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBvcmlub2NvX25ldGRldl9vcHMgPSB7Ci0JLm5kb19pbml0CQk9IG9yaW5vY29faW5pdCwKIAkubmRvX29wZW4JCT0gb3Jpbm9jb19vcGVuLAogCS5uZG9fc3RvcAkJPSBvcmlub2NvX3N0b3AsCiAJLm5kb19zdGFydF94bWl0CQk9IG9yaW5vY29feG1pdCwKQEAgLTI1MjcsNDAgKzIwODksNjQgQEAKIAkubmRvX2dldF9zdGF0cwkJPSBvcmlub2NvX2dldF9zdGF0cywKIH07CiAKLXN0cnVjdCBuZXRfZGV2aWNlCisvKiBBbGxvY2F0ZSBwcml2YXRlIGRhdGEuCisgKgorICogVGhpcyBkcml2ZXIgaGFzIGEgbnVtYmVyIG9mIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiAgbmV0ZGV2IC0gTmV0IGRldmljZSBzdHJ1Y3R1cmUgZm9yIGVhY2ggbmV0d29yayBpbnRlcmZhY2UKKyAqICB3aXBoeSAtIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggd2lyZWxlc3MgcGh5CisgKiAgd2lyZWxlc3NfZGV2ICh3ZGV2KSAtIHN0cnVjdHVyZSBmb3IgZWFjaCB3aXJlbGVzcyBpbnRlcmZhY2UKKyAqICBodyAtIHN0cnVjdHVyZSBmb3IgaGVybWVzIGNoaXAgaW5mbworICogIGNhcmQgLSBjYXJkIHNwZWNpZmljIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IHRoZSBjYXJkIGRyaXZlcgorICogICAgICAgICAoYWlycG9ydCwgb3Jpbm9jb19jcykKKyAqICBwcml2IC0gb3Jpbm9jbyBwcml2YXRlIGRhdGEKKyAqICBkZXZpY2UgLSBnZW5lcmljIGxpbnV4IGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiAgKy0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSsKKyAqICB8ICB3aXBoeSAgfCAgICB8IG5ldGRldiAgfAorICogIHwgKy0tLS0tLS0rICAgIHwgKy0tLS0tLS0rCisgKiAgfCB8IHByaXYgIHwgICAgfCB8IHdkZXYgIHwKKyAqICB8IHwgKy0tLS0tKyAgICArLSstLS0tLS0tKworICogIHwgfCB8IGh3ICB8CisgKiAgfCArLSstLS0tLSsKKyAqICB8IHwgY2FyZCAgfAorICogICstKy0tLS0tLS0rCisgKgorICogcHJpdiBoYXMgYSBsaW5rIHRvIG5ldGRldiBhbmQgZGV2aWNlCisgKiB3ZGV2IGhhcyBhIGxpbmsgdG8gd2lwaHkKKyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZQogKmFsbG9jX29yaW5vY29kZXYoaW50IHNpemVvZl9jYXJkLAogCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKIAkJICBpbnQgKCpoYXJkX3Jlc2V0KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICopLAogCQkgIGludCAoKnN0b3BfZncpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiwgaW50KSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKIAotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlKSArIHNpemVvZl9jYXJkKTsKLQlpZiAoIWRldikKKwkvKiBhbGxvY2F0ZSB3aXBoeQorCSAqIE5PVEU6IFdlIG9ubHkgc3VwcG9ydCBhIHNpbmdsZSB2aXJ0dWFsIGludGVyZmFjZQorCSAqICAgICAgIGJ1dCB0aGlzIG1heSBjaGFuZ2Ugd2hlbiBtb25pdG9yIG1vZGUgaXMgYWRkZWQKKwkgKi8KKwl3aXBoeSA9IHdpcGh5X25ldygmb3Jpbm9jb19jZmdfb3BzLAorCQkJICBzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkgKyBzaXplb2ZfY2FyZCk7CisJaWYgKCF3aXBoeSkKIAkJcmV0dXJuIE5VTEw7Ci0JcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcHJpdi0+bmRldiA9IGRldjsKKworCXByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlwcml2LT5kZXYgPSBkZXZpY2U7CisKIAlpZiAoc2l6ZW9mX2NhcmQpCiAJCXByaXYtPmNhcmQgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZylwcml2CiAJCQkJICAgICAgKyBzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkpOwogCWVsc2UKIAkJcHJpdi0+Y2FyZCA9IE5VTEw7Ci0JcHJpdi0+ZGV2ID0gZGV2aWNlOwogCi0JLyogU2V0dXAgLyBvdmVycmlkZSBuZXRfZGV2aWNlIGZpZWxkcyAqLwotCWRldi0+bmV0ZGV2X29wcyA9ICZvcmlub2NvX25ldGRldl9vcHM7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOyAvKiAxIHNlY29uZCB0aW1lb3V0ICovCi0JZGV2LT5ldGh0b29sX29wcyA9ICZvcmlub2NvX2V0aHRvb2xfb3BzOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmb3Jpbm9jb19oYW5kbGVyX2RlZjsKKwlvcmlub2NvX3dpcGh5X2luaXQod2lwaHkpOworCiAjaWZkZWYgV0lSRUxFU1NfU1BZCiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5zcHlfZGF0YTsKLQlkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKICNlbmRpZgogCi0JLyogUmVzZXJ2ZSBzcGFjZSBpbiBza2IgZm9yIHRoZSBTTkFQIGhlYWRlciAqLwotCWRldi0+aGFyZF9oZWFkZXJfbGVuICs9IEVOQ0FQU19PVkVSSEVBRDsKLQogCS8qIFNldCB1cCBkZWZhdWx0IGNhbGxiYWNrcyAqLwogCXByaXYtPmhhcmRfcmVzZXQgPSBoYXJkX3Jlc2V0OwogCXByaXYtPnN0b3BfZncgPSBzdG9wX2Z3OwpAQCAtMjU3Niw5ICsyMTYyLDEyIEBACiAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cnhfbGlzdCk7CiAJdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBvcmlub2NvX3J4X2lzcl90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOworCQkgICAgICh1bnNpZ25lZCBsb25nKSBwcml2KTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnNjYW5fbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnNjYW5fbGlzdCk7CisJSU5JVF9XT1JLKCZwcml2LT5wcm9jZXNzX3NjYW4sIG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMpOworCiAJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOwogCiAjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQpAQCAtMjU4OSwxNCArMjE3OCw5MSBAQAogCS8qIFJlZ2lzdGVyIFBNIG5vdGlmaWVycyAqLwogCW9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7CiAKLQlyZXR1cm4gZGV2OworCXJldHVybiBwcml2OwogfQogRVhQT1JUX1NZTUJPTChhbGxvY19vcmlub2NvZGV2KTsKIAotdm9pZCBmcmVlX29yaW5vY29kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKy8qIFdlIGNhbiBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgaW50ZXJmYWNlLiBXZSBwcm92aWRlIGEgc2VwYXJhdGUKKyAqIGZ1bmN0aW9uIHRvIHNldCBpdCB1cCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGhhcmR3YXJlCisgKiBpbml0aWFsaXNhdGlvbiBhbmQgaW50ZXJmYWNlIHNldHVwLgorICoKKyAqIFRoZSBiYXNlX2FkZHIgYW5kIGlycSBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgb24gdG8gbmV0ZGV2IGZvciB1c2UKKyAqIHdpdGggU0lPQ0dJRk1BUC4KKyAqLworaW50IG9yaW5vY29faWZfYWRkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCSAgIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLAorCQkgICB1bnNpZ25lZCBpbnQgaXJxKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBwcml2X3RvX3dpcGh5KHByaXYpOworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCB3aXJlbGVzc19kZXYpKTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEluaXRpYWxpc2Ugd2lyZWxlc3NfZGV2ICovCisJd2RldiA9IG5ldGRldl9wcml2KGRldik7CisJd2Rldi0+d2lwaHkgPSB3aXBoeTsKKwl3ZGV2LT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOworCisJLyogU2V0dXAgLyBvdmVycmlkZSBuZXRfZGV2aWNlIGZpZWxkcyAqLworCWRldi0+aWVlZTgwMjExX3B0ciA9IHdkZXY7CisJZGV2LT5uZXRkZXZfb3BzID0gJm9yaW5vY29fbmV0ZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7IC8qIDEgc2Vjb25kIHRpbWVvdXQgKi8KKwlkZXYtPmV0aHRvb2xfb3BzID0gJm9yaW5vY29fZXRodG9vbF9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZvcmlub2NvX2hhbmRsZXJfZGVmOworI2lmZGVmIFdJUkVMRVNTX1NQWQorCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOworI2VuZGlmCisJLyogd2UgdXNlIHRoZSBkZWZhdWx0IGV0aF9tYWNfYWRkciBmb3Igc2V0dGluZyB0aGUgTUFDIGFkZHIgKi8KKworCS8qIFJlc2VydmUgc3BhY2UgaW4gc2tiIGZvciB0aGUgU05BUCBoZWFkZXIgKi8KKwlkZXYtPmhhcmRfaGVhZGVyX2xlbiArPSBFTkNBUFNfT1ZFUkhFQUQ7CisKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHdpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKKworCWRldi0+YmFzZV9hZGRyID0gYmFzZV9hZGRyOworCWRldi0+aXJxID0gaXJxOworCisJU0VUX05FVERFVl9ERVYoZGV2LCBwcml2LT5kZXYpOworCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCXByaXYtPm5kZXYgPSBkZXY7CisKKwkvKiBSZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCisJZGV2X2RiZyhwcml2LT5kZXYsICJSZWdpc3RlcnJlZCBpbnRlcmZhY2UgJXMuXG4iLCBkZXYtPm5hbWUpOworCisJcmV0dXJuIDA7CisKKyBmYWlsOgorCWZyZWVfbmV0ZGV2KGRldik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19pZl9hZGQpOworCit2b2lkIG9yaW5vY29faWZfZGVsKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCWZyZWVfbmV0ZGV2KGRldik7Cit9CitFWFBPUlRfU1lNQk9MKG9yaW5vY29faWZfZGVsKTsKKwordm9pZCBmcmVlX29yaW5vY29kZXYoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gcHJpdl90b193aXBoeShwcml2KTsKIAlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKKwlzdHJ1Y3Qgb3Jpbm9jb19zY2FuX2RhdGEgKnNkLCAqc2R0ZW1wOworCisJd2lwaHlfdW5yZWdpc3Rlcih3aXBoeSk7CiAKIAkvKiBJZiB0aGUgdGFza2xldCBpcyBzY2hlZHVsZWQgd2hlbiB3ZSBjYWxsIHRhc2tsZXRfa2lsbCBpdAogCSAqIHdpbGwgcnVuIG9uZSBmaW5hbCB0aW1lLiBIb3dldmVyIHRoZSB0YXNrbGV0IHdpbGwgb25seQpAQCAtMjYxMiwyMSArMjI3OCw4MCBAQAogCQlrZnJlZShyeF9kYXRhKTsKIAl9CiAKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5wcm9jZXNzX3NjYW4pOworCS8qIEV4cGxpY2l0bHkgZHJhaW4gcHJpdi0+c2Nhbl9saXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkLCBzZHRlbXAsICZwcml2LT5zY2FuX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnNkLT5saXN0KTsKKworCQlpZiAoKHNkLT5sZW4gPiAwKSAmJiBzZC0+YnVmKQorCQkJa2ZyZWUoc2QtPmJ1Zik7CisJCWtmcmVlKHNkKTsKKwl9CisKIAlvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7CiAJb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpOwogCiAJcHJpdi0+d3BhX2llX2xlbiA9IDA7CiAJa2ZyZWUocHJpdi0+d3BhX2llKTsKIAlvcmlub2NvX21pY19mcmVlKHByaXYpOwotCW9yaW5vY29fYnNzX2RhdGFfZnJlZShwcml2KTsKLQlmcmVlX25ldGRldihkZXYpOworCXdpcGh5X2ZyZWUod2lwaHkpOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX29yaW5vY29kZXYpOwogCitpbnQgb3Jpbm9jb191cChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShwcml2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBleGl0OworCX0KKworCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwlwcml2LT5od191bmF2YWlsYWJsZS0tOworCisJaWYgKHByaXYtPm9wZW4gJiYgIXByaXYtPmh3X3VuYXZhaWxhYmxlKSB7CisJCWVyciA9IF9fb3Jpbm9jb191cChwcml2KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJfQorCitleGl0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvcmlub2NvX3VwKTsKKwordm9pZCBvcmlub2NvX2Rvd24oc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWVyciA9IF9fb3Jpbm9jb19kb3duKHByaXYpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBkb3duaW5nIGludGVyZmFjZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwlwcml2LT5od191bmF2YWlsYWJsZSsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19kb3duKTsKKwogc3RhdGljIHZvaWQgb3Jpbm9jb19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCiAJc3RybmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSAtIDEpOwogCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSAtIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaAppbmRleCBhZjJiYWU0Li4yMWFiMzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaApAQCAtMjksMTAgKzI5LDkgQEAKIHN0cnVjdCB3b3JrX3N0cnVjdDsKIAogdm9pZCBzZXRfcG9ydF90eXBlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwotaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgb3Jpbm9jb19jb21taXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CiB2b2lkIG9yaW5vY29fcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAotCiAvKiBJbmZvcm1hdGlvbiBlbGVtZW50IGhlbHBlcnMgLSBmaW5kIGEgaG9tZSBmb3IgdGhlc2UuLi4gKi8KIHN0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X2llKHU4ICpkYXRhLCBzaXplX3QgbGVuLAogCQkJCSBlbnVtIGllZWU4MDIxMV9laWQgZWlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaAppbmRleCA4ZTVhNzJjLi45YWM2ZjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KIAogI2luY2x1ZGUgImhlcm1lcy5oIgogCkBAIC0yNCw2ICsyNSw3IEBACiAKICNkZWZpbmUgTUFYX1NDQU5fTEVOCQk0MDk2CiAKKyNkZWZpbmUgT1JJTk9DT19TRVFfTEVOCQk4CiAjZGVmaW5lIE9SSU5PQ09fTUFYX0tFWV9TSVpFCTE0CiAjZGVmaW5lIE9SSU5PQ09fTUFYX0tFWVMJNAogCkBAIC00MSwyNCArNDMsMTggQEAKIAl1OCByeF9taWNbTUlDX0tFWUxFTl07CiB9OwogCitlbnVtIG9yaW5vY29fYWxnIHsKKwlPUklOT0NPX0FMR19OT05FLAorCU9SSU5PQ09fQUxHX1dFUCwKKwlPUklOT0NPX0FMR19US0lQCit9OworCiB0eXBlZGVmIGVudW0gewogCUZJUk1XQVJFX1RZUEVfQUdFUkUsCiAJRklSTVdBUkVfVFlQRV9JTlRFUlNJTCwKIAlGSVJNV0FSRV9UWVBFX1NZTUJPTAogfSBmd3R5cGVfdDsKIAotc3RydWN0IGJzc19lbGVtZW50IHsKLQl1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvIGJzczsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1zdHJ1Y3QgeGJzc19lbGVtZW50IHsKLQlzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyBic3M7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQogc3RydWN0IGZpcm13YXJlOwogCiBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlIHsKQEAgLTY3LDYgKzYzLDEwIEBACiAJaW50ICgqaGFyZF9yZXNldCkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqKTsKIAlpbnQgKCpzdG9wX2Z3KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICosIGludCk7CiAKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKKwl1MzIgY2lwaGVyX3N1aXRlc1szXTsKKwogCS8qIFN5bmNocm9uaXNhdGlvbiBzdHVmZiAqLwogCXNwaW5sb2NrX3QgbG9jazsKIAlpbnQgaHdfdW5hdmFpbGFibGU7CkBAIC0xMTQsMTIgKzExNCwxNCBAQAogCXVuc2lnbmVkIGludCBkb19md19kb3dubG9hZDoxOwogCXVuc2lnbmVkIGludCBicm9rZW5fZGlzYWJsZXBvcnQ6MTsKIAl1bnNpZ25lZCBpbnQgYnJva2VuX21vbml0b3I6MTsKKwl1bnNpZ25lZCBpbnQgcHJlZmVyX3BvcnQzOjE7CiAKIAkvKiBDb25maWd1cmF0aW9uIHBhcmFtYXRlcnMgKi8KLQl1MzIgaXdfbW9kZTsKLQlpbnQgcHJlZmVyX3BvcnQzOwotCXUxNiBlbmNvZGVfYWxnLCB3ZXBfcmVzdHJpY3QsIHR4X2tleTsKLQlzdHJ1Y3Qgb3Jpbm9jb19rZXkga2V5c1tPUklOT0NPX01BWF9LRVlTXTsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIGl3X21vZGU7CisJZW51bSBvcmlub2NvX2FsZyBlbmNvZGVfYWxnOworCXUxNiB3ZXBfcmVzdHJpY3QsIHR4X2tleTsKKwlzdHJ1Y3Qga2V5X3BhcmFtcyBrZXlzW09SSU5PQ09fTUFYX0tFWVNdOworCiAJaW50IGJpdHJhdGVtb2RlOwogCWNoYXIgbmlja1tJV19FU1NJRF9NQVhfU0laRSsxXTsKIAljaGFyIGRlc2lyZWRfZXNzaWRbSVdfRVNTSURfTUFYX1NJWkUrMV07CkBAIC0xNDAsMTggKzE0MiwxNSBAQAogCWludCBwcm9taXNjdW91cywgbWNfY291bnQ7CiAKIAkvKiBTY2FubmluZyBzdXBwb3J0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBic3NfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJzc19mcmVlX2xpc3Q7Ci0Jdm9pZCAqYnNzX3hic3NfZGF0YTsKLQotCWludAlzY2FuX2lucHJvZ3Jlc3M7CS8qIFNjYW4gcGVuZGluZy4uLiAqLwotCXUzMglzY2FuX21vZGU7CQkvKiBUeXBlIG9mIHNjYW4gZG9uZSAqLworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxdWVzdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvY2Vzc19zY2FuOworCXN0cnVjdCBsaXN0X2hlYWQgc2Nhbl9saXN0OworCXNwaW5sb2NrX3Qgc2Nhbl9sb2NrOyAvKiBwcm90ZWN0cyB0aGUgc2NhbiBsaXN0ICovCiAKIAkvKiBXUEEgc3VwcG9ydCAqLwogCXU4ICp3cGFfaWU7CiAJaW50IHdwYV9pZV9sZW47CiAKLQlzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSB0a2lwX2tleVtPUklOT0NPX01BWF9LRVlTXTsKIAlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnJ4X3RmbV9taWM7CiAJc3RydWN0IGNyeXB0b19oYXNoICp0eF90Zm1fbWljOwogCkBAIC0xODIsMTQgKzE4MSwxOCBAQAogLyogRXhwb3J0ZWQgcHJvdG90eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX29yaW5vY29kZXYoCitleHRlcm4gc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqYWxsb2Nfb3Jpbm9jb2RldigKIAlpbnQgc2l6ZW9mX2NhcmQsIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKIAlpbnQgKCpoYXJkX3Jlc2V0KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICopLAogCWludCAoKnN0b3BfZncpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiwgaW50KSk7Ci1leHRlcm4gdm9pZCBmcmVlX29yaW5vY29kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZnJlZV9vcmlub2NvZGV2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworZXh0ZXJuIGludCBvcmlub2NvX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitleHRlcm4gaW50IG9yaW5vY29faWZfYWRkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkgIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLAorCQkJICB1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIG9yaW5vY29faWZfZGVsKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworZXh0ZXJuIGludCBvcmlub2NvX3VwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworZXh0ZXJuIHZvaWQgb3Jpbm9jb19kb3duKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwogZXh0ZXJuIGlycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIxNSw0ICsyMTgsMTAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCAqZmxhZ3MpOwogfQogCisvKioqIE5hdmlnYXRlIGZyb20gbmV0X2RldmljZSB0byBvcmlub2NvX3ByaXZhdGUgKioqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpuZGV2X3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gd2Rldl9wcml2KHdkZXYpOworfQogI2VuZGlmIC8qIF9PUklOT0NPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKaW5kZXggYjM4MWFlZC4uMzhjMWM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKQEAgLTEwNiwyNiArMTA2LDI0IEBACiBzdGF0aWMgaW50CiBvcmlub2NvX2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQ7CiAKLQlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZoYW5kbGVfdG9fZGV2KGxpbmspLAotCQkJICAgICAgIG9yaW5vY29fY3NfaGFyZF9yZXNldCwgTlVMTCk7Ci0JaWYgKCFkZXYpCisJcHJpdiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmhhbmRsZV90b19kZXYobGluayksCisJCQkJb3Jpbm9jb19jc19oYXJkX3Jlc2V0LCBOVUxMKTsKKwlpZiAoIXByaXYpCiAJCXJldHVybiAtRU5PTUVNOwotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwogCiAJLyogTGluayBib3RoIHN0cnVjdHVyZXMgdG9nZXRoZXIgKi8KIAljYXJkLT5wX2RldiA9IGxpbms7Ci0JbGluay0+cHJpdiA9IGRldjsKKwlsaW5rLT5wcml2ID0gcHJpdjsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwogCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HIHwgSVJRX0hBTkRMRV9QUkVTRU5UOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IG9yaW5vY29faW50ZXJydXB0OwotCWxpbmstPmlycS5JbnN0YW5jZSA9IGRldjsKKwlsaW5rLT5pcnEuSW5zdGFuY2UgPSBwcml2OwogCiAJLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKIAkgKiBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IKQEAgLTE0NiwxNCArMTQ0LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIG9yaW5vY29fY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OwogCiAJaWYgKGxpbmstPmRldl9ub2RlKQotCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlvcmlub2NvX2lmX2RlbChwcml2KTsKIAogCW9yaW5vY29fY3NfcmVsZWFzZShsaW5rKTsKIAotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIH0JCQkJLyogb3Jpbm9jb19jc19kZXRhY2ggKi8KIAogLyoKQEAgLTIzOSw4ICsyMzcsNyBAQAogc3RhdGljIGludAogb3Jpbm9jb19jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGxhc3RfZm4sIGxhc3RfcmV0OwpAQCAtMjk1LDI5ICsyOTIsMjcgQEAKIAkJIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKIAogCS8qIE9rLCB3ZSBoYXZlIHRoZSBjb25maWd1cmF0aW9uLCBwcmVwYXJlIHRvIHJlZ2lzdGVyIHRoZSBuZXRkZXYgKi8KLQlkZXYtPmJhc2VfYWRkciA9IGxpbmstPmlvLkJhc2VQb3J0MTsKLQlkZXYtPmlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKIAljYXJkLT5ub2RlLm1ham9yID0gY2FyZC0+bm9kZS5taW5vciA9IDA7CiAKLQlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKLQkvKiBUZWxsIHRoZSBzdGFjayB3ZSBleGlzdCAqLwotCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CisJLyogSW5pdGlhbGlzZSB0aGUgbWFpbiBkcml2ZXIgKi8KKwlpZiAob3Jpbm9jb19pbml0KHByaXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pbml0KCkgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJLyogUmVnaXN0ZXIgYW4gaW50ZXJmYWNlIHdpdGggdGhlIHN0YWNrICovCisJaWYgKG9yaW5vY29faWZfYWRkKHByaXYsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCSAgIGxpbmstPmlycS5Bc3NpZ25lZElSUSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkcyB0byBiZQogCSAqIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldl9ub2RlLiAqLwotCXN0cmNweShjYXJkLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOworCXN0cmNweShjYXJkLT5ub2RlLmRldl9uYW1lLCBwcml2LT5uZGV2LT5uYW1lKTsKIAlsaW5rLT5kZXZfbm9kZSA9ICZjYXJkLT5ub2RlOyAvKiBsaW5rLT5kZXZfbm9kZSBiZWluZyBub24tTlVMTCBpcyBhbHNvCiAJCQkJICAgICAgICogdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQogCQkJCSAgICAgICAqIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwotCi0JLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzLCBpcnEgJWQsIGlvICIKLQkgICAgICAgIjB4JTA0eC0weCUwNHhcbiIsIGRldi0+bmFtZSwgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKLQkgICAgICAgbGluay0+aXJxLkFzc2lnbmVkSVJRLCBsaW5rLT5pby5CYXNlUG9ydDEsCi0JICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOwogCXJldHVybiAwOwogCiAgY3NfZmFpbGVkOgpAQCAtMzM2LDggKzMzMSw3IEBACiBzdGF0aWMgdm9pZAogb3Jpbm9jb19jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBXZSdyZSBjb21taXR0ZWQgdG8gdGFraW5nIHRoZSBkZXZpY2UgYXdheSBub3csIHNvIG1hcmsgdGhlCkBAIC0zNTMsNjIgKzM0NywyNiBAQAogCiBzdGF0aWMgaW50IG9yaW5vY29fY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBUaGlzIGlzIHByb2JhYmx5IHJhY3ksIGJ1dCBJIGNhbid0IHRoaW5rIG9mCiAJICAgYSBiZXR0ZXIgd2F5LCBzaG9ydCBvZiByZXdyaXRpbmcgdGhlIFBDTUNJQQogCSAgIGxheWVyIHRvIG5vdCBzdWNrIDotKCAqLwotCWlmICghdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkJZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQkJaWYgKGVycikKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBkb3duaW5nIGludGVyZmFjZVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0KLQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQl9CisJaWYgKCF0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpCisJCW9yaW5vY29fZG93bihwcml2KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9yaW5vY29fY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBsaW5rLT5wcml2OwogCXN0cnVjdCBvcmlub2NvX3BjY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CiAJaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7Ci0JCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCi0JCWlmIChwcml2LT5vcGVuICYmICFwcml2LT5od191bmF2YWlsYWJsZSkgewotCQkJZXJyID0gX19vcmlub2NvX3VwKGRldik7Ci0JCQlpZiAoZXJyKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCX0KKwlpZiAoIXRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkKKwkJZXJyID0gb3Jpbm9jb191cChwcml2KTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKaW5kZXggYjAxNzI2Mi4uYzEzYTRjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYwpAQCAtMTQ0LDcgKzE0NCw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwogCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdm9pZCBfX2lvbWVtICpoZXJtZXNfaW8sICpicmlkZ2VfaW8sICphdHRyX2lvOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC0xODEsMjQgKzE4MCwyMiBAQAogCX0KIAogCS8qIEFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlICovCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmcGRldi0+ZGV2LAotCQkJICAgICAgIG9yaW5vY29fbm9ydGVsX2Nvcl9yZXNldCwgTlVMTCk7Ci0JaWYgKCFkZXYpIHsKKwlwcml2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmcGRldi0+ZGV2LAorCQkJCW9yaW5vY29fbm9ydGVsX2Nvcl9yZXNldCwgTlVMTCk7CisJaWYgKCFwcml2KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF9hbGxvYzsKIAl9CiAKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAljYXJkLT5icmlkZ2VfaW8gPSBicmlkZ2VfaW87CiAJY2FyZC0+YXR0cl9pbyA9IGF0dHJfaW87Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkgIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgRFJJVkVSX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwpAQCAtMjE3LDI0ICsyMTQsMjggQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWVyciA9IG9yaW5vY29faW5pdChwcml2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBuZXR3b3JrIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faW5pdCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlc1xuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJZXJyID0gb3Jpbm9jb19pZl9hZGQocHJpdiwgMCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAKICBmYWlsX2lycToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCiAgZmFpbF9hbGxvYzoKIAlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwpAQCAtMjU2LDE3ICsyNTcsMTYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG9yaW5vY29fbm9ydGVsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkID0gcHJpdi0+Y2FyZDsKIAogCS8qIENsZWFyIExFRHMgKi8KIAlpb3dyaXRlMTYoMCwgY2FyZC0+YnJpZGdlX2lvICsgMTApOwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJb3Jpbm9jb19pZl9kZWwocHJpdik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3LmlvYmFzZSk7CiAJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YXR0cl9pbyk7CiAJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YnJpZGdlX2lvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwppbmRleCA3OGNhZmZmLi5mZWE3NzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCkBAIC0xMTYsNyArMTE2LDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl2b2lkIF9faW9tZW0gKmhlcm1lc19pbzsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTM5LDIyICsxMzgsMjAgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBuZXR3b3JrIGRldmljZSAqLwotCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJnBkZXYtPmRldiwKLQkJCSAgICAgICBvcmlub2NvX3BjaV9jb3JfcmVzZXQsIE5VTEwpOwotCWlmICghZGV2KSB7CisJcHJpdiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJnBkZXYtPmRldiwKKwkJCQlvcmlub2NvX3BjaV9jb3JfcmVzZXQsIE5VTEwpOworCWlmICghcHJpdikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfYWxsb2M7CiAJfQogCi0JcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJY2FyZCA9IHByaXYtPmNhcmQ7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCWhlcm1lc19zdHJ1Y3RfaW5pdCgmcHJpdi0+aHcsIGhlcm1lc19pbywgSEVSTUVTXzMyQklUX1JFR1NQQUNJTkcpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkgIGRldi0+bmFtZSwgZGV2KTsKKwkJCSAgRFJJVkVSX05BTUUsIHByaXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIElSUSAlZFxuIiwgcGRldi0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwpAQCAtMTY3LDI0ICsxNjQsMjggQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWVyciA9IG9yaW5vY29faW5pdChwcml2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCByZWdpc3RlciBuZXR3b3JrIGRldmljZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faW5pdCgpIGZhaWxlZFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgRFJJVkVSX05BTUUgIiBhdCAlc1xuIiwgZGV2LT5uYW1lLAotCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJZXJyID0gb3Jpbm9jb19pZl9hZGQocHJpdiwgMCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2lmX2FkZCgpIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAlyZXR1cm4gMDsKIAogIGZhaWw6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKHBkZXYtPmlycSwgcHJpdik7CiAKICBmYWlsX2lycToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCiAgZmFpbF9hbGxvYzoKIAlwY2lfaW91bm1hcChwZGV2LCBoZXJtZXNfaW8pOwpAQCAtMjAwLDEzICsyMDEsMTIgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IG9yaW5vY29fcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJb3Jpbm9jb19pZl9kZWwocHJpdik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3LmlvYmFzZSk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmgKaW5kZXggYzY1NWI0YS4uZWE3MjMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaApAQCAtMjEsMzAgKzIxLDEwIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG9yaW5vY29fcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JZXJyID0gb3Jpbm9jb19sb2NrKHByaXYsICZmbGFncyk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgbG9jayBoYXJkd2FyZSBmb3Igc3VzcGVuZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXJyb3IgJWQgYnJpbmdpbmcgaW50ZXJmYWNlIGRvd24gIgotCQkgICAgICAgImZvciBzdXNwZW5kXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0KLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlvcmlub2NvX2Rvd24ocHJpdik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwpAQCAtNTQsOSArMzQsOCBAQAogCiBzdGF0aWMgaW50IG9yaW5vY29fcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKIAlpbnQgZXJyOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAwKTsKQEAgLTY5LDcgKzQ4LDcgQEAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgb3Jpbm9jb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJICBkZXYtPm5hbWUsIGRldik7CisJCQkgIGRldi0+bmFtZSwgcHJpdik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmUtYWxsb2NhdGUgSVJRIG9uIHJlc3VtZVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSk7CkBAIC03NywyOSArNTYsOSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmUgIgotCQkgICAgICAgIm9uIHJlc3VtZVxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBvcmlub2NvX3VwKHByaXYpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQotCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07Ci0KLQlpZiAocHJpdi0+b3BlbiAmJiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSkgewotCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKLQkJaWYgKGVycikKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlc3RhcnRpbmcgY2FyZCBvbiByZXN1bWVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAjZWxzZQogI2RlZmluZSBvcmlub2NvX3BjaV9zdXNwZW5kIE5VTEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwppbmRleCBhMmE0NDcxLi4zZjI5NDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCkBAIC0xODMsNyArMTgzLDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl2b2lkIF9faW9tZW0gKmhlcm1lc19pbywgKmF0dHJfaW8sICpicmlkZ2VfaW87CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTIyMCwyNCArMjE5LDIyIEBACiAJfQogCiAJLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgKi8KLQlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZwZGV2LT5kZXYsCi0JCQkgICAgICAgb3Jpbm9jb19wbHhfY29yX3Jlc2V0LCBOVUxMKTsKLQlpZiAoIWRldikgeworCXByaXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZwZGV2LT5kZXYsCisJCQkJb3Jpbm9jb19wbHhfY29yX3Jlc2V0LCBOVUxMKTsKKwlpZiAoIXByaXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2FsbG9jOwogCX0KIAotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwogCWNhcmQtPmJyaWRnZV9pbyA9IGJyaWRnZV9pbzsKIAljYXJkLT5hdHRyX2lvID0gYXR0cl9pbzsKLQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJaGVybWVzX3N0cnVjdF9pbml0KCZwcml2LT5odywgaGVybWVzX2lvLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG9yaW5vY29faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCSAgZGV2LT5uYW1lLCBkZXYpOworCQkJICBEUklWRVJfTkFNRSwgcHJpdik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgSVJRICVkXG4iLCBwZGV2LT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CkBAIC0yNTYsMjQgKzI1MywyOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJZXJyID0gb3Jpbm9jb19pbml0KHByaXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pbml0KCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwllcnIgPSBvcmlub2NvX2lmX2FkZChwcml2LCAwLCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faWZfYWRkKCkgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAogCXJldHVybiAwOwogCiAgZmFpbDoKLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAogIGZhaWxfaXJxOgogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlmcmVlX29yaW5vY29kZXYoZGV2KTsKKwlmcmVlX29yaW5vY29kZXYocHJpdik7CiAKICBmYWlsX2FsbG9jOgogCXBjaV9pb3VubWFwKHBkZXYsIGhlcm1lc19pbyk7CkBAIC0yOTUsMTQgKzI5NiwxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgb3Jpbm9jb19wbHhfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJb3Jpbm9jb19pZl9kZWwocHJpdik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3LmlvYmFzZSk7CiAJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YXR0cl9pbyk7CiAJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YnJpZGdlX2lvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwppbmRleCBjZGEwZTZlLi5kMzQ1MjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCkBAIC05NCw3ICs5NCw2IEBACiAJaW50IGVycjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2OwogCXN0cnVjdCBvcmlub2NvX3BjaV9jYXJkICpjYXJkOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdm9pZCBfX2lvbWVtICpoZXJtZXNfaW8sICpicmlkZ2VfaW87CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTEyNCwyMyArMTIzLDIxIEBACiAJfQogCiAJLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgKi8KLQlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZwZGV2LT5kZXYsCi0JCQkgICAgICAgb3Jpbm9jb190bWRfY29yX3Jlc2V0LCBOVUxMKTsKLQlpZiAoIWRldikgeworCXByaXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZwZGV2LT5kZXYsCisJCQkJb3Jpbm9jb190bWRfY29yX3Jlc2V0LCBOVUxMKTsKKwlpZiAoIXByaXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2FsbG9jOwogCX0KIAotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwogCWNhcmQtPmJyaWRnZV9pbyA9IGJyaWRnZV9pbzsKLQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJaGVybWVzX3N0cnVjdF9pbml0KCZwcml2LT5odywgaGVybWVzX2lvLCBIRVJNRVNfMTZCSVRfUkVHU1BBQ0lORyk7CiAKIAllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIG9yaW5vY29faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCSAgZGV2LT5uYW1lLCBkZXYpOworCQkJICBEUklWRVJfTkFNRSwgcHJpdik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgSVJRICVkXG4iLCBwZGV2LT5pcnEpOwogCQllcnIgPSAtRUJVU1k7CkBAIC0xNTMsMjQgKzE1MCwyOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJZXJyID0gb3Jpbm9jb19pbml0KHByaXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAib3Jpbm9jb19pbml0KCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsOwogCX0KIAotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwllcnIgPSBvcmlub2NvX2lmX2FkZChwcml2LCAwLCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faWZfYWRkKCkgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKIAogCXJldHVybiAwOwogCiAgZmFpbDoKLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAogIGZhaWxfaXJxOgogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlmcmVlX29yaW5vY29kZXYoZGV2KTsKKwlmcmVlX29yaW5vY29kZXYocHJpdik7CiAKICBmYWlsX2FsbG9jOgogCXBjaV9pb3VubWFwKHBkZXYsIGhlcm1lc19pbyk7CkBAIC0xODksMTQgKzE5MCwxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgb3Jpbm9jb190bWRfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG9yaW5vY29fcGNpX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCi0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlmcmVlX2lycShwZGV2LT5pcnEsIGRldik7CisJb3Jpbm9jb19pZl9kZWwocHJpdik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBwcml2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JZnJlZV9vcmlub2NvZGV2KGRldik7CisJZnJlZV9vcmlub2NvZGV2KHByaXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3LmlvYmFzZSk7CiAJcGNpX2lvdW5tYXAocGRldiwgY2FyZC0+YnJpZGdlX2lvKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYwppbmRleCA4OWQ2OTlkLi5kMmYxMGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYwpAQCAtNSwxNDcgKzUsMTY2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogCiAjaW5jbHVkZSAiaGVybWVzLmgiCiAjaW5jbHVkZSAib3Jpbm9jby5oIgorI2luY2x1ZGUgIm1haW4uaCIKIAogI2luY2x1ZGUgInNjYW4uaCIKIAotI2RlZmluZSBPUklOT0NPX01BWF9CU1NfQ09VTlQJNjQKKyNkZWZpbmUgWkVST19EQk1fT0ZGU0VUIDB4OTUKKyNkZWZpbmUgTUFYX1NJR05BTF9MRVZFTCAweDhBCisjZGVmaW5lIE1JTl9TSUdOQUxfTEVWRUwgMHgyRgogCi0jZGVmaW5lIFBSSVZfQlNTCSgoc3RydWN0IGJzc19lbGVtZW50ICopcHJpdi0+YnNzX3hic3NfZGF0YSkKLSNkZWZpbmUgUFJJVl9YQlNTCSgoc3RydWN0IHhic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCisjZGVmaW5lIFNJR05BTF9UT19EQk0oeCkJCQkJCVwKKwkoY2xhbXBfdChzMzIsICh4KSwgTUlOX1NJR05BTF9MRVZFTCwgTUFYX1NJR05BTF9MRVZFTCkJXAorCSAtIFpFUk9fREJNX09GRlNFVCkKKyNkZWZpbmUgU0lHTkFMX1RPX01CTSh4KSAoU0lHTkFMX1RPX0RCTSh4KSAqIDEwMCkKIAotaW50IG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3N0YXRpYyBpbnQgc3ltYm9sX2J1aWxkX3N1cHBfcmF0ZXModTggKmJ1ZiwgY29uc3QgX19sZTE2ICpyYXRlcykKIHsKLQlpZiAocHJpdi0+YnNzX3hic3NfZGF0YSkKLQkJcmV0dXJuIDA7CisJaW50IGk7CisJdTggcmF0ZTsKIAotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCi0JCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCi0JCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgeGJzc19lbGVtZW50KSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JZWxzZQotCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGJzc19lbGVtZW50KSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXByaXYtPmJzc194YnNzX2RhdGEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGJlYWNvbnMiKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJYnVmWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXJhdGUgPSBsZTE2X3RvX2NwdShyYXRlc1tpXSk7CisJCS8qIE5VTEwgdGVybWluYXRlZCAqLworCQlpZiAocmF0ZSA9PSAweDApCisJCQlicmVhazsKKwkJYnVmW2kgKyAyXSA9IHJhdGU7CiAJfQotCXJldHVybiAwOworCWJ1ZlsxXSA9IGk7CisKKwlyZXR1cm4gaSArIDI7CiB9CiAKLXZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+YnNzX3hic3NfZGF0YSk7Ci0JcHJpdi0+YnNzX3hic3NfZGF0YSA9IE5VTEw7Ci19Ci0KLXZvaWQgb3Jpbm9jb19ic3NfZGF0YV9pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCitzdGF0aWMgaW50IHByaXNtX2J1aWxkX3N1cHBfcmF0ZXModTggKmJ1ZiwgY29uc3QgdTggKnJhdGVzKQogewogCWludCBpOwogCi0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfbGlzdCk7Ci0JaWYgKHByaXYtPmhhc19leHRfc2NhbikKLQkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQotCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfWEJTU1tpXS5saXN0KSwKLQkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JZWxzZQotCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCi0JCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9CU1NbaV0ubGlzdCksCi0JCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCi19Ci0KLXZvaWQgb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQl1bnNpZ25lZCBsb25nIHNjYW5fYWdlKQotewotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKLQkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOwotCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICp0bXBfYnNzOwotCi0JCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJaWYgKCFzY2FuX2FnZSB8fAotCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAotCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KLQkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKLQkJc3RydWN0IGJzc19lbGVtZW50ICp0bXBfYnNzOwotCi0JCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJaWYgKCFzY2FuX2FnZSB8fAotCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKLQkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAotCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KLQkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKLQkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7Ci0JCQl9Ci0JCX0KKwlidWZbMF0gPSBXTEFOX0VJRF9TVVBQX1JBVEVTOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJLyogTlVMTCB0ZXJtaW5hdGVkICovCisJCWlmIChyYXRlc1tpXSA9PSAweDApCisJCQlicmVhazsKKwkJYnVmW2kgKyAyXSA9IHJhdGVzW2ldOwogCX0KKwlidWZbMV0gPSBpOworCisJLyogV2UgbWlnaHQgc3RpbGwgaGF2ZSBhbm90aGVyIDIgcmF0ZXMsIHdoaWNoIG5lZWQgdG8gZ28gaW4KKwkgKiBleHRlbmRlZCBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwlpZiAoaSA9PSA4ICYmIHJhdGVzW2ldID4gMCkgeworCQlidWZbMTBdID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCWZvciAoOyBpIDwgMTA7IGkrKykgeworCQkJLyogTlVMTCB0ZXJtaW5hdGVkICovCisJCQlpZiAocmF0ZXNbaV0gPT0gMHgwKQorCQkJCWJyZWFrOworCQkJYnVmW2kgKyAyXSA9IHJhdGVzW2ldOworCQl9CisJCWJ1ZlsxMV0gPSBpIC0gODsKKwl9CisKKwlyZXR1cm4gKGkgPCA4KSA/IGkgKyAyIDogaSArIDQ7CiB9CiAKLXZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKQorc3RhdGljIHZvaWQgb3Jpbm9jb19hZGRfaG9zdHNjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJCWNvbnN0IHVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmJzcykKIHsKLQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3MgPSBOVUxMOwotCWludCBmb3VuZCA9IDA7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHByaXZfdG9fd2lwaHkocHJpdik7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXU4ICppZTsKKwl1OCBpZV9idWZbNDZdOworCXU2NCB0aW1lc3RhbXA7CisJczMyIHNpZ25hbDsKKwl1MTYgY2FwYWJpbGl0eTsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCWludCBpZV9sZW47CisJaW50IGZyZXE7CisJaW50IGxlbjsKIAotCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmJzc2lkLCBhdG9tLT5ic3NpZCkpCi0JCQljb250aW51ZTsKLQkJLyogRVNTSUQgbGVuZ3RocyAqLwotCQlpZiAoYnNzLT5ic3MuZGF0YVsxXSAhPSBhdG9tLT5kYXRhWzFdKQotCQkJY29udGludWU7Ci0JCWlmIChtZW1jbXAoJmJzcy0+YnNzLmRhdGFbMl0sICZhdG9tLT5kYXRhWzJdLAotCQkJICAgYXRvbS0+ZGF0YVsxXSkpCi0JCQljb250aW51ZTsKLQkJZm91bmQgPSAxOworCWxlbiA9IGxlMTZfdG9fY3B1KGJzcy0+YS5lc3NpZF9sZW4pOworCisJLyogUmVjb25zdHJ1Y3QgU1NJRCBhbmQgYml0cmF0ZSBJRXMgdG8gcGFzcyB1cCAqLworCWllX2J1ZlswXSA9IFdMQU5fRUlEX1NTSUQ7CisJaWVfYnVmWzFdID0gbGVuOworCW1lbWNweSgmaWVfYnVmWzJdLCBic3MtPmEuZXNzaWQsIGxlbik7CisKKwlpZSA9IGllX2J1ZiArIGxlbiArIDI7CisJaWVfbGVuID0gaWVfYnVmWzFdICsgMjsKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQlpZV9sZW4gKz0gc3ltYm9sX2J1aWxkX3N1cHBfcmF0ZXMoaWUsIGJzcy0+cy5yYXRlcyk7CisJCWJyZWFrOworCisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQlpZV9sZW4gKz0gcHJpc21fYnVpbGRfc3VwcF9yYXRlcyhpZSwgYnNzLT5wLnJhdGVzKTsKKwkJYnJlYWs7CisKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCi0JLyogR3JhYiBhIGJzcyBvZmYgdGhlIGZyZWUgbGlzdCAqLwotCWlmICghZm91bmQgJiYgIWxpc3RfZW1wdHkoJnByaXYtPmJzc19mcmVlX2xpc3QpKSB7Ci0JCWJzcyA9IGxpc3RfZW50cnkocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0LAotCQkJCSBzdHJ1Y3QgeGJzc19lbGVtZW50LCBsaXN0KTsKLQkJbGlzdF9kZWwocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0KTsKKwlmcmVxID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGxlMTZfdG9fY3B1KGJzcy0+YS5jaGFubmVsKSk7CisJY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCh3aXBoeSwgZnJlcSk7CisJdGltZXN0YW1wID0gMDsKKwljYXBhYmlsaXR5ID0gbGUxNl90b19jcHUoYnNzLT5hLmNhcGFiaWxpdGllcyk7CisJYmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUoYnNzLT5hLmJlYWNvbl9pbnRlcnYpOworCXNpZ25hbCA9IFNJR05BTF9UT19NQk0obGUxNl90b19jcHUoYnNzLT5hLmxldmVsKSk7CiAKLQkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOwotCX0KLQotCWlmIChic3MpIHsKLQkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KLQkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCWJzcy0+bGFzdF9zY2FubmVkID0gamlmZmllczsKLQl9CisJY2ZnODAyMTFfaW5mb3JtX2Jzcyh3aXBoeSwgY2hhbm5lbCwgYnNzLT5hLmJzc2lkLCB0aW1lc3RhbXAsCisJCQkgICAgY2FwYWJpbGl0eSwgYmVhY29uX2ludGVydmFsLCBpZV9idWYsIGllX2xlbiwKKwkJCSAgICBzaWduYWwsIEdGUF9LRVJORUwpOwogfQogCi1pbnQgb3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJIGludCBsZW4pCit2b2lkIG9yaW5vY29fYWRkX2V4dHNjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzcywKKwkJCQlzaXplX3QgbGVuKQogewotCWludAkJCW9mZnNldDsJCS8qIEluIHRoZSBzY2FuIGRhdGEgKi8KLQl1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICphdG9tOwotCWludAkJCWF0b21fbGVuOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBwcml2X3RvX3dpcGh5KHByaXYpOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwl1OCAqaWU7CisJdTY0IHRpbWVzdGFtcDsKKwlzMzIgc2lnbmFsOworCXUxNiBjYXBhYmlsaXR5OworCXUxNiBiZWFjb25faW50ZXJ2YWw7CisJc2l6ZV90IGllX2xlbjsKKwlpbnQgY2hhbiwgZnJlcTsKKworCWllX2xlbiA9IGxlbiAtIHNpemVvZigqYnNzKTsKKwlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgaWVfbGVuLCBXTEFOX0VJRF9EU19QQVJBTVMpOworCWNoYW4gPSBpZSA/IGllWzJdIDogMDsKKwlmcmVxID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW4pOworCWNoYW5uZWwgPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksIGZyZXEpOworCisJdGltZXN0YW1wID0gbGU2NF90b19jcHUoYnNzLT50aW1lc3RhbXApOworCWNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShic3MtPmNhcGFiaWxpdGllcyk7CisJYmVhY29uX2ludGVydmFsID0gbGUxNl90b19jcHUoYnNzLT5iZWFjb25faW50ZXJ2YWwpOworCWllID0gYnNzLT5kYXRhOworCXNpZ25hbCA9IFNJR05BTF9UT19NQk0oYnNzLT5sZXZlbCk7CisKKwljZmc4MDIxMV9pbmZvcm1fYnNzKHdpcGh5LCBjaGFubmVsLCBic3MtPmJzc2lkLCB0aW1lc3RhbXAsCisJCQkgICAgY2FwYWJpbGl0eSwgYmVhY29uX2ludGVydmFsLCBpZSwgaWVfbGVuLAorCQkJICAgIHNpZ25hbCwgR0ZQX0tFUk5FTCk7Cit9CisKK3ZvaWQgb3Jpbm9jb19hZGRfaG9zdHNjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSAgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJCSAgc2l6ZV90IGxlbikKK3sKKwlpbnQgb2Zmc2V0OwkJLyogSW4gdGhlIHNjYW4gZGF0YSAqLworCXNpemVfdCBhdG9tX2xlbjsKKwlib29sIGFib3J0ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKIAljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CiAJCWF0b21fbGVuID0gc2l6ZW9mKHN0cnVjdCBhZ2VyZV9zY2FuX2FwaW5mbyk7CiAJCW9mZnNldCA9IDA7CiAJCWJyZWFrOworCiAJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKIAkJLyogTGFjayBvZiBkb2N1bWVudGF0aW9uIG5lY2Vzc2l0YXRlcyB0aGlzIGhhY2suCiAJCSAqIERpZmZlcmVudCBmaXJtd2FyZXMgaGF2ZSA2OCBvciA3NiBieXRlIGxvbmcgYXRvbXMuCkBAIC0xNjMsNiArMTgyLDcgQEAKIAkJCWF0b21fbGVuID0gNjg7CiAJCW9mZnNldCA9IDA7CiAJCWJyZWFrOworCiAJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgogCQlvZmZzZXQgPSA0OwogCQlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7CkBAIC0xNzAsNjQgKzE5MCw0MSBAQAogCQkJLyogU2FuaXR5IGNoZWNrIGZvciBhdG9tX2xlbiAqLwogCQkJaWYgKGF0b21fbGVuIDwgc2l6ZW9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8pKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBhdG9tX2xlbiBpbiBzY2FuICIKLQkJCQkgICAgICAgImRhdGE6ICVkXG4iLCBwcml2LT5uZGV2LT5uYW1lLAorCQkJCSAgICAgICAiZGF0YTogJXp1XG4iLCBwcml2LT5uZGV2LT5uYW1lLAogCQkJCSAgICAgICBhdG9tX2xlbik7Ci0JCQkJcmV0dXJuIC1FSU87CisJCQkJYWJvcnQgPSB0cnVlOworCQkJCWdvdG8gc2Nhbl9hYm9ydDsKIAkJCX0KIAkJfSBlbHNlCiAJCQlhdG9tX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8sIGF0aW0pOwogCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJYWJvcnQgPSB0cnVlOworCQlnb3RvIHNjYW5fYWJvcnQ7CiAJfQogCiAJLyogQ2hlY2sgdGhhdCB3ZSBnb3QgYW4gd2hvbGUgbnVtYmVyIG9mIGF0b21zICovCiAJaWYgKChsZW4gLSBvZmZzZXQpICUgYXRvbV9sZW4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5leHBlY3RlZCBzY2FuIGRhdGEgbGVuZ3RoICVkLCAiCi0JCSAgICAgICAiYXRvbV9sZW4gJWQsIG9mZnNldCAlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSwgbGVuLAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIHNjYW4gZGF0YSBsZW5ndGggJXp1LCAiCisJCSAgICAgICAiYXRvbV9sZW4gJXp1LCBvZmZzZXQgJWRcbiIsIHByaXYtPm5kZXYtPm5hbWUsIGxlbiwKIAkJICAgICAgIGF0b21fbGVuLCBvZmZzZXQpOwotCQlyZXR1cm4gLUVJTzsKKwkJYWJvcnQgPSB0cnVlOworCQlnb3RvIHNjYW5fYWJvcnQ7CiAJfQogCi0Jb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwgbXNlY3NfdG9famlmZmllcygxNTAwMCkpOwotCi0JLyogUmVhZCB0aGUgZW50cmllcyBvbmUgYnkgb25lICovCisJLyogUHJvY2VzcyB0aGUgZW50cmllcyBvbmUgYnkgb25lICovCiAJZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7Ci0JCWludCBmb3VuZCA9IDA7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKKwkJdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYXRvbTsKIAotCQkvKiBHZXQgbmV4dCBhdG9tICovCiAJCWF0b20gPSAodW5pb24gaGVybWVzX3NjYW5faW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKIAotCQkvKiBUcnkgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGJzcyBmaXJzdCAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmEuYnNzaWQsIGF0b20tPmEuYnNzaWQpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGxlMTZfdG9fY3B1KGJzcy0+YnNzLmEuZXNzaWRfbGVuKSAhPQotCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKG1lbWNtcChic3MtPmJzcy5hLmVzc2lkLCBhdG9tLT5hLmVzc2lkLAotCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKSkKLQkJCQljb250aW51ZTsKLQkJCWZvdW5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogR3JhYiBhIGJzcyBvZmYgdGhlIGZyZWUgbGlzdCAqLwotCQlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgewotCQkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCi0JCQkJCSBzdHJ1Y3QgYnNzX2VsZW1lbnQsIGxpc3QpOwotCQkJbGlzdF9kZWwocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0KTsKLQotCQkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOwotCQl9Ci0KLQkJaWYgKGJzcykgewotCQkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KLQkJCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOwotCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSBqaWZmaWVzOwotCQl9CisJCW9yaW5vY29fYWRkX2hvc3RzY2FuX3Jlc3VsdChwcml2LCBhdG9tKTsKIAl9CiAKLQlyZXR1cm4gMDsKKyBzY2FuX2Fib3J0OgorCWlmIChwcml2LT5zY2FuX3JlcXVlc3QpIHsKKwkJY2ZnODAyMTFfc2Nhbl9kb25lKHByaXYtPnNjYW5fcmVxdWVzdCwgYWJvcnQpOworCQlwcml2LT5zY2FuX3JlcXVlc3QgPSBOVUxMOworCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmgKaW5kZXggZjMxOWY3NC4uMmRjNGUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zY2FuLmgKQEAgLTksMjEgKzksMTIgQEAKIHN0cnVjdCBvcmlub2NvX3ByaXZhdGU7CiBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbzsKIAotLyogU2V0dXAgYW5kIGZyZWUgbWVtb3J5IGZvciBzY2FuIHJlc3VsdHMgKi8KLWludCBvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwotdm9pZCBvcmlub2NvX2Jzc19kYXRhX2ZyZWUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7Ci12b2lkIG9yaW5vY29fYnNzX2RhdGFfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKLQogLyogQWRkIHNjYW4gcmVzdWx0cyAqLwotdm9pZCBvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmF0b20pOwotaW50IG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqZGV2LAotCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsCi0JCQkJIGludCBsZW4pOwotCi0vKiBDbGVhciBzY2FuIHJlc3VsdHMgKi8KLXZvaWQgb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQl1bnNpZ25lZCBsb25nIHNjYW5fYWdlKTsKLQordm9pZCBvcmlub2NvX2FkZF9leHRzY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCXN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tLAorCQkJCXNpemVfdCBsZW4pOwordm9pZCBvcmlub2NvX2FkZF9ob3N0c2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKmRldiwKKwkJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkgIHNpemVfdCBsZW4pOwogCiAjZW5kaWYgLyogX09SSU5PQ09fU0NBTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCmluZGV4IDM4ZTUxOTguLmMzNjEzMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKQEAgLTE3OCwyNyArMTc4LDI1IEBACiBzdGF0aWMgaW50CiBzcGVjdHJ1bV9jc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG9yaW5vY29fcGNjYXJkICpjYXJkOwogCi0JZGV2ID0gYWxsb2Nfb3Jpbm9jb2RldihzaXplb2YoKmNhcmQpLCAmaGFuZGxlX3RvX2RldihsaW5rKSwKLQkJCSAgICAgICBzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0LAotCQkJICAgICAgIHNwZWN0cnVtX2NzX3N0b3BfZmlybXdhcmUpOwotCWlmICghZGV2KQorCXByaXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZoYW5kbGVfdG9fZGV2KGxpbmspLAorCQkJCXNwZWN0cnVtX2NzX2hhcmRfcmVzZXQsCisJCQkJc3BlY3RydW1fY3Nfc3RvcF9maXJtd2FyZSk7CisJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKLQlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljYXJkID0gcHJpdi0+Y2FyZDsKIAogCS8qIExpbmsgYm90aCBzdHJ1Y3R1cmVzIHRvZ2V0aGVyICovCiAJY2FyZC0+cF9kZXYgPSBsaW5rOwotCWxpbmstPnByaXYgPSBkZXY7CisJbGluay0+cHJpdiA9IHByaXY7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KIAlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBvcmlub2NvX2ludGVycnVwdDsKLQlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CisJbGluay0+aXJxLkluc3RhbmNlID0gcHJpdjsKIAogCS8qIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCiAJICogY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yCkBAIC0yMTksMTQgKzIxNywxNCBAQAogICovCiBzdGF0aWMgdm9pZCBzcGVjdHJ1bV9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAKIAlpZiAobGluay0+ZGV2X25vZGUpCi0JCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCW9yaW5vY29faWZfZGVsKHByaXYpOwogCiAJc3BlY3RydW1fY3NfcmVsZWFzZShsaW5rKTsKIAotCWZyZWVfb3Jpbm9jb2RldihkZXYpOworCWZyZWVfb3Jpbm9jb2Rldihwcml2KTsKIH0JCQkJLyogc3BlY3RydW1fY3NfZGV0YWNoICovCiAKIC8qCkBAIC0zMDYsOCArMzA0LDcgQEAKIHN0YXRpYyBpbnQKIHNwZWN0cnVtX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgb3Jpbm9jb19wY2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CkBAIC0zNjIsMzQgKzM1OSwzMSBAQAogCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAJLyogT2ssIHdlIGhhdmUgdGhlIGNvbmZpZ3VyYXRpb24sIHByZXBhcmUgdG8gcmVnaXN0ZXIgdGhlIG5ldGRldiAqLwotCWRldi0+YmFzZV9hZGRyID0gbGluay0+aW8uQmFzZVBvcnQxOwotCWRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwogCWNhcmQtPm5vZGUubWFqb3IgPSBjYXJkLT5ub2RlLm1pbm9yID0gMDsKIAogCS8qIFJlc2V0IGNhcmQgKi8KIAlpZiAoc3BlY3RydW1fY3NfaGFyZF9yZXNldChwcml2KSAhPSAwKQogCQlnb3RvIGZhaWxlZDsKIAotCVNFVF9ORVRERVZfREVWKGRldiwgJmhhbmRsZV90b19kZXYobGluaykpOwotCS8qIFRlbGwgdGhlIHN0YWNrIHdlIGV4aXN0ICovCi0JaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicmVnaXN0ZXJfbmV0ZGV2KCkgZmFpbGVkXG4iKTsKKwkvKiBJbml0aWFsaXNlIHRoZSBtYWluIGRyaXZlciAqLworCWlmIChvcmlub2NvX2luaXQocHJpdikgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJvcmlub2NvX2luaXQoKSBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWxlZDsKKwl9CisKKwkvKiBSZWdpc3RlciBhbiBpbnRlcmZhY2Ugd2l0aCB0aGUgc3RhY2sgKi8KKwlpZiAob3Jpbm9jb19pZl9hZGQocHJpdiwgbGluay0+aW8uQmFzZVBvcnQxLAorCQkJICAgbGluay0+aXJxLkFzc2lnbmVkSVJRKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIm9yaW5vY29faWZfYWRkKCkgZmFpbGVkXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWRzIHRvIGJlCiAJICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuICovCi0Jc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7CisJc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIHByaXYtPm5kZXYtPm5hbWUpOwogCWxpbmstPmRldl9ub2RlID0gJmNhcmQtPm5vZGU7IC8qIGxpbmstPmRldl9ub2RlIGJlaW5nIG5vbi1OVUxMIGlzIGFsc28KIAkJCQkgICAgICAgKiB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlCiAJCQkJICAgICAgICogbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCi0KLQkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIERSSVZFUl9OQU1FICIgYXQgJXMsIGlycSAlZCwgaW8gIgotCSAgICAgICAiMHglMDR4LTB4JTA0eFxuIiwgZGV2LT5uYW1lLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLAotCSAgICAgICBsaW5rLT5pcnEuQXNzaWduZWRJUlEsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7Ci0KIAlyZXR1cm4gMDsKIAogIGNzX2ZhaWxlZDoKQEAgLTQwOCw4ICs0MDIsNyBAQAogc3RhdGljIHZvaWQKIHNwZWN0cnVtX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFdlJ3JlIGNvbW1pdHRlZCB0byB0YWtpbmcgdGhlIGRldmljZSBhd2F5IG5vdywgc28gbWFyayB0aGUKQEAgLTQyNywyMyArNDIwLDExIEBACiBzdGF0aWMgaW50CiBzcGVjdHJ1bV9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CiAJaW50IGVyciA9IDA7CiAKIAkvKiBNYXJrIHRoZSBkZXZpY2UgYXMgc3RvcHBlZCwgdG8gYmxvY2sgSU8gdW50aWwgbGF0ZXIgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZG93bmluZyBpbnRlcmZhY2VcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0KLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JcHJpdi0+aHdfdW5hdmFpbGFibGUrKzsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlvcmlub2NvX2Rvd24ocHJpdik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDUxLDMzICs0MzIsMTAgQEAKIHN0YXRpYyBpbnQKIHNwZWN0cnVtX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IGxpbmstPnByaXY7CisJaW50IGVyciA9IG9yaW5vY29fdXAocHJpdik7CiAKLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwotCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07Ci0KLQlpZiAocHJpdi0+b3BlbiAmJiAhcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKLQkJZXJyID0gX19vcmlub2NvX3VwKGRldik7Ci0JCWlmIChlcnIpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYwppbmRleCAzZjA4MTQyLi43Njk4ZmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAKICNpbmNsdWRlICJoZXJtZXMuaCIKICNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCkBAIC0yMSw5ICsyMiw3MCBAQAogCiAjZGVmaW5lIE1BWF9SSURfTEVOIDEwMjQKIAorLyogSGVscGVyIHJvdXRpbmUgdG8gcmVjb3JkIGtleXMKKyAqIERvIG5vdCBjYWxsIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19zZXRfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBpbmRleCwKKwkJCSAgIGVudW0gb3Jpbm9jb19hbGcgYWxnLCBjb25zdCB1OCAqa2V5LCBpbnQga2V5X2xlbiwKKwkJCSAgIGNvbnN0IHU4ICpzZXEsIGludCBzZXFfbGVuKQoreworCWt6ZnJlZShwcml2LT5rZXlzW2luZGV4XS5rZXkpOworCWt6ZnJlZShwcml2LT5rZXlzW2luZGV4XS5zZXEpOworCisJaWYgKGtleV9sZW4pIHsKKwkJcHJpdi0+a2V5c1tpbmRleF0ua2V5ID0ga3phbGxvYyhrZXlfbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5rZXlzW2luZGV4XS5rZXkpCisJCQlnb3RvIG5vbWVtOworCX0gZWxzZQorCQlwcml2LT5rZXlzW2luZGV4XS5rZXkgPSBOVUxMOworCisJaWYgKHNlcV9sZW4pIHsKKwkJcHJpdi0+a2V5c1tpbmRleF0uc2VxID0ga3phbGxvYyhzZXFfbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5rZXlzW2luZGV4XS5zZXEpCisJCQlnb3RvIGZyZWVfa2V5OworCX0gZWxzZQorCQlwcml2LT5rZXlzW2luZGV4XS5zZXEgPSBOVUxMOworCisJcHJpdi0+a2V5c1tpbmRleF0ua2V5X2xlbiA9IGtleV9sZW47CisJcHJpdi0+a2V5c1tpbmRleF0uc2VxX2xlbiA9IHNlcV9sZW47CisKKwlpZiAoa2V5X2xlbikKKwkJbWVtY3B5KHByaXYtPmtleXNbaW5kZXhdLmtleSwga2V5LCBrZXlfbGVuKTsKKwlpZiAoc2VxX2xlbikKKwkJbWVtY3B5KHByaXYtPmtleXNbaW5kZXhdLnNlcSwgc2VxLCBzZXFfbGVuKTsKKworCXN3aXRjaCAoYWxnKSB7CisJY2FzZSBPUklOT0NPX0FMR19US0lQOgorCQlwcml2LT5rZXlzW2luZGV4XS5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOworCQlicmVhazsKKworCWNhc2UgT1JJTk9DT19BTEdfV0VQOgorCQlwcml2LT5rZXlzW2luZGV4XS5jaXBoZXIgPSAoa2V5X2xlbiA+IFNNQUxMX0tFWV9TSVpFKSA/CisJCQlXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQgOiBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKKwkJYnJlYWs7CisKKwljYXNlIE9SSU5PQ09fQUxHX05PTkU6CisJZGVmYXVsdDoKKwkJcHJpdi0+a2V5c1tpbmRleF0uY2lwaGVyID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK2ZyZWVfa2V5OgorCWtmcmVlKHByaXYtPmtleXNbaW5kZXhdLmtleSk7CisJcHJpdi0+a2V5c1tpbmRleF0ua2V5ID0gTlVMTDsKKworbm9tZW06CisJcHJpdi0+a2V5c1tpbmRleF0ua2V5X2xlbiA9IDA7CisJcHJpdi0+a2V5c1tpbmRleF0uc2VxX2xlbiA9IDA7CisJcHJpdi0+a2V5c1tpbmRleF0uY2lwaGVyID0gMDsKKworCXJldHVybiAtRU5PTUVNOworfQorCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKm9yaW5vY29fZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKIAlpbnQgZXJyOwpAQCAtNTEsNyArMTEzLDcgQEAKIAkgKiBoZXJlIHNvIHdlJ3JlIG5vdCBzYWZlIHRvIHNsZWVwIGhlcmUuICovCiAJaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfVEFMTElFUyk7CiAKLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB7CisJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJbWVtc2V0KCZ3c3RhdHMtPnF1YWwsIDAsIHNpemVvZih3c3RhdHMtPnF1YWwpKTsKIAkJLyogSWYgYSBzcHkgYWRkcmVzcyBpcyBkZWZpbmVkLCB3ZSByZXBvcnQgc3RhdHMgb2YgdGhlCiAJCSAqIGZpcnN0IHNweSBhZGRyZXNzIC0gSmVhbiBJSSAqLwpAQCAtODcsMzEgKzE0OSwxMiBAQAogLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBjaGFyICpuYW1lLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgbnVtcmF0ZXM7Ci0JaW50IGVycjsKLQotCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywgTlVMTCwgMCk7Ci0KLQlpZiAoIWVyciAmJiAobnVtcmF0ZXMgPiAyKSkKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKLQllbHNlCi0JCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCiAJCQkJY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdGF0aWMgY29uc3QgdTggb2ZmX2FkZHJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwpAQCAtMTQyLDcgKzE4NSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKKwlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNYW51YWwgcm9hbWluZyBzdXBwb3J0ZWQgb25seSBpbiAiCiAJCSAgICAgICAibWFuYWdlZCBtb2RlXG4iLCBkZXYtPm5hbWUpOwogCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTE3Miw5ICsyMTUsOCBAQAogCQkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwKIAkJCQljaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTgyLDE5NyArMjI0LDIzIEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCi0JCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgYXBfYWRkci0+c2FfZGF0YSk7CisJZXJyID0gb3Jpbm9jb19od19nZXRfY3VycmVudF9ic3NpZChwcml2LCBhcF9hZGRyLT5zYV9kYXRhKTsKIAogCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1MzIgKm1vZGUsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChwcml2LT5pd19tb2RlID09ICptb2RlKQotCQlyZXR1cm4gMDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoICgqbW9kZSkgewotCWNhc2UgSVdfTU9ERV9BREhPQzoKLQkJaWYgKCFwcml2LT5oYXNfaWJzcyAmJiAhcHJpdi0+aGFzX3BvcnQzKQotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19NT0RFX0lORlJBOgotCQlicmVhazsKLQotCWNhc2UgSVdfTU9ERV9NT05JVE9SOgotCQlpZiAocHJpdi0+YnJva2VuX21vbml0b3IgJiYgIWZvcmNlX21vbml0b3IpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNb25pdG9yIG1vZGUgc3VwcG9ydCBpcyAiCi0JCQkgICAgICAgImJ1Z2d5IGluIHRoaXMgZmlybXdhcmUsIG5vdCBlbmFibGluZ1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGVyciA9PSAtRUlOUFJPR1JFU1MpIHsKLQkJcHJpdi0+aXdfbW9kZSA9ICptb2RlOwotCQlzZXRfcG9ydF90eXBlKHByaXYpOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1MzIgKm1vZGUsCi0JCQkJIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JKm1vZGUgPSBwcml2LT5pd19tb2RlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICBzdHJ1Y3QgaXdfcG9pbnQgKnJycSwKLQkJCQkgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7Ci0JaW50IG51bXJhdGVzOwotCWludCBpLCBrOwotCi0JcnJxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKLQltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKLQotCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIyOwotCi0JLyogU2V0IGF2YWlsYWJsZSBjaGFubmVscy9mcmVxdWVuY2llcyAqLwotCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBOVU1fQ0hBTk5FTFM7Ci0JayA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9DSEFOTkVMUzsgaSsrKSB7Ci0JCWlmIChwcml2LT5jaGFubmVsX21hc2sgJiAoMSA8PCBpKSkgewotCQkJcmFuZ2UtPmZyZXFba10uaSA9IGkgKyAxOwotCQkJcmFuZ2UtPmZyZXFba10ubSA9IChpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoaSArIDEpICoKLQkJCQkJICAgIDEwMDAwMCk7Ci0JCQlyYW5nZS0+ZnJlcVtrXS5lID0gMTsKLQkJCWsrKzsKLQkJfQotCi0JCWlmIChrID49IElXX01BWF9GUkVRVUVOQ0lFUykKLQkJCWJyZWFrOwotCX0KLQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7Ci0JcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsKLQotCWlmIChwcml2LT5oYXNfd2VwKSB7Ci0JCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gT1JJTk9DT19NQVhfS0VZUzsKLQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSBTTUFMTF9LRVlfU0laRTsKLQkJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDE7Ci0KLQkJaWYgKHByaXYtPmhhc19iaWdfd2VwKSB7Ci0JCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IExBUkdFX0tFWV9TSVpFOwotCQkJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7Ci0JCX0KLQl9Ci0KLQlpZiAocHJpdi0+aGFzX3dwYSkKLQkJcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVA7Ci0KLQlpZiAoKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgJiYgKCFTUFlfTlVNQkVSKHByaXYpKSkgewotCQkvKiBRdWFsaXR5IHN0YXRzIG1lYW5pbmdsZXNzIGluIGFkLWhvYyBtb2RlICovCi0JfSBlbHNlIHsKLQkJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAweDhiIC0gMHgyZjsKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMHgyZiAtIDB4OTUgLSAxOwotCQlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAweDJmIC0gMHg5NSAtIDE7Ci0JCS8qIE5lZWQgdG8gZ2V0IGJldHRlciB2YWx1ZXMgKi8KLQkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSAweDI0OwotCQlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAweEMyOwotCQlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAweDlFOwotCX0KLQotCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywKLQkJCQkJIHJhbmdlLT5iaXRyYXRlLCBJV19NQVhfQklUUkFURVMpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmFuZ2UtPm51bV9iaXRyYXRlcyA9IG51bXJhdGVzOwotCi0JLyogU2V0IGFuIGluZGljYXRpb24gb2YgdGhlIG1heCBUQ1AgdGhyb3VnaHB1dCBpbiBiaXQvcyB0aGF0IHdlIGNhbgotCSAqIGV4cGVjdCB1c2luZyB0aGlzIGludGVyZmFjZS4gTWF5IGJlIHVzZSBmb3IgUW9TIHN0dWZmLi4uCi0JICogSmVhbiBJSSAqLwotCWlmIChudW1yYXRlcyA+IDIpCi0JCXJhbmdlLT50aHJvdWdocHV0ID0gNSAqIDEwMDAgKiAxMDAwOwkvKiB+NSBNYi9zICovCi0JZWxzZQotCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDEuNSAqIDEwMDAgKiAxMDAwOwkvKiB+MS41IE1iL3MgKi8KLQotCXJhbmdlLT5taW5fcnRzID0gMDsKLQlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0JcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0KLQlyYW5nZS0+bWluX3BtcCA9IDA7Ci0JcmFuZ2UtPm1heF9wbXAgPSA2NTUzNTAwMDsKLQlyYW5nZS0+bWluX3BtdCA9IDA7Ci0JcmFuZ2UtPm1heF9wbXQgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLwotCXJhbmdlLT5wbXBfZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7Ci0JcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7Ci0JcmFuZ2UtPnBtX2NhcGEgPSAoSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfVElNRU9VVCB8Ci0JCQkgIElXX1BPV0VSX1VOSUNBU1RfUik7Ci0KLQlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTElGRVRJTUU7Ci0JcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0JcmFuZ2UtPnJfdGltZV9mbGFncyA9IElXX1JFVFJZX0xJRkVUSU1FOwotCXJhbmdlLT5taW5fcmV0cnkgPSAwOwotCXJhbmdlLT5tYXhfcmV0cnkgPSA2NTUzNTsJLyogPz8/ICovCi0JcmFuZ2UtPm1pbl9yX3RpbWUgPSAwOwotCXJhbmdlLT5tYXhfcl90aW1lID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KLQotCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpCi0JCXJhbmdlLT5zY2FuX2NhcGEgPSBJV19TQ0FOX0NBUEFfRVNTSUQ7Ci0JZWxzZQotCQlyYW5nZS0+c2Nhbl9jYXBhID0gSVdfU0NBTl9DQVBBX05PTkU7Ci0KLQkvKiBFdmVudCBjYXBhYmlsaXR5IChrZXJuZWwpICovCi0JSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKLQkvKiBFdmVudCBjYXBhYmlsaXR5IChkcml2ZXIpICovCi0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdUSFJTUFkpOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOwotCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIElXRVZUWERST1ApOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLAogCQkJCSAgICAgY2hhciAqa2V5YnVmKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwogCWludCBzZXRpbmRleCA9IHByaXYtPnR4X2tleTsKLQlpbnQgZW5jb2RlX2FsZyA9IHByaXYtPmVuY29kZV9hbGc7CisJZW51bSBvcmlub2NvX2FsZyBlbmNvZGVfYWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKIAlpbnQgcmVzdHJpY3RlZCA9IHByaXYtPndlcF9yZXN0cmljdDsKLQl1MTYgeGxlbiA9IDA7CiAJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zOTIsMjUgKzI2MCwxNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogQ2xlYXIgYW55IFRLSVAga2V5IHdlIGhhdmUgKi8KLQlpZiAoKHByaXYtPmhhc193cGEpICYmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkpCisJaWYgKChwcml2LT5oYXNfd3BhKSAmJiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBPUklOT0NPX0FMR19US0lQKSkKIAkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgc2V0aW5kZXgpOwogCiAJaWYgKGVycS0+bGVuZ3RoID4gMCkgewogCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQogCQkJaW5kZXggPSBwcml2LT50eF9rZXk7CiAKLQkJLyogQWRqdXN0IGtleSBsZW5ndGggdG8gYSBzdXBwb3J0ZWQgdmFsdWUgKi8KLQkJaWYgKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpCi0JCQl4bGVuID0gTEFSR0VfS0VZX1NJWkU7Ci0JCWVsc2UgaWYgKGVycS0+bGVuZ3RoID4gMCkKLQkJCXhsZW4gPSBTTUFMTF9LRVlfU0laRTsKLQkJZWxzZQotCQkJeGxlbiA9IDA7Ci0KIAkJLyogU3dpdGNoIG9uIFdFUCBpZiBvZmYgKi8KLQkJaWYgKChlbmNvZGVfYWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKSAmJiAoeGxlbiA+IDApKSB7CisJCWlmIChlbmNvZGVfYWxnICE9IE9SSU5PQ09fQUxHX1dFUCkgewogCQkJc2V0aW5kZXggPSBpbmRleDsKLQkJCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKKwkJCWVuY29kZV9hbGcgPSBPUklOT0NPX0FMR19XRVA7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBJbXBvcnRhbnQgbm90ZSA6IGlmIHRoZSB1c2VyIGRvICJpd2NvbmZpZyBldGgwIGVuYyBvZmYiLApAQCAtNDIzLDcgKzI4Myw3IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQkvKiBTZXQgdGhlIGluZGV4IDogQ2hlY2sgdGhhdCB0aGUga2V5IGlzIHZhbGlkICovCi0JCQlpZiAocHJpdi0+a2V5c1tpbmRleF0ubGVuID09IDApIHsKKwkJCWlmIChwcml2LT5rZXlzW2luZGV4XS5rZXlfbGVuID09IDApIHsKIAkJCQllcnIgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtNDMyLDE3ICsyOTIsMTUgQEAKIAl9CiAKIAlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKLQkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKwkJZW5jb2RlX2FsZyA9IE9SSU5PQ09fQUxHX05PTkU7CiAJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKIAkJcmVzdHJpY3RlZCA9IDA7CiAJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKIAkJcmVzdHJpY3RlZCA9IDE7CiAKIAlpZiAoZXJxLT5wb2ludGVyICYmIGVycS0+bGVuZ3RoID4gMCkgewotCQlwcml2LT5rZXlzW2luZGV4XS5sZW4gPSBjcHVfdG9fbGUxNih4bGVuKTsKLQkJbWVtc2V0KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIDAsCi0JCSAgICAgICBzaXplb2YocHJpdi0+a2V5c1tpbmRleF0uZGF0YSkpOwotCQltZW1jcHkocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwga2V5YnVmLCBlcnEtPmxlbmd0aCk7CisJCWVyciA9IG9yaW5vY29fc2V0X2tleShwcml2LCBpbmRleCwgT1JJTk9DT19BTEdfV0VQLCBrZXlidWYsCisJCQkJICAgICAgZXJxLT5sZW5ndGgsIE5VTEwsIDApOwogCX0KIAlwcml2LT50eF9rZXkgPSBzZXRpbmRleDsKIApAQCAtNDY5LDkgKzMyNyw4IEBACiAJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKIAkJCQkgICAgIGNoYXIgKmtleWJ1ZikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQl1MTYgeGxlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcHJpdi0+aGFzX3dlcCkKQEAgLTQ5MywxMSArMzUwLDkgQEAKIAllbHNlCiAJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CiAKLQl4bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1tpbmRleF0ubGVuKTsKKwllcnEtPmxlbmd0aCA9IHByaXYtPmtleXNbaW5kZXhdLmtleV9sZW47CiAKLQllcnEtPmxlbmd0aCA9IHhsZW47Ci0KLQltZW1jcHkoa2V5YnVmLCBwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBPUklOT0NPX01BWF9LRVlfU0laRSk7CisJbWVtY3B5KGtleWJ1ZiwgcHJpdi0+a2V5c1tpbmRleF0ua2V5LCBlcnEtPmxlbmd0aCk7CiAKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtNTA4LDcgKzM2Myw3IEBACiAJCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKIAkJCQkgIGNoYXIgKmVzc2lkYnVmKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogTm90ZSA6IEVTU0lEIGlzIGlnbm9yZWQgaW4gQWQtSG9jIGRlbW8gbW9kZSwgYnV0IHdlIGNhbiBzZXQgaXQKQEAgLTUzOSw3ICszOTQsNyBAQAogCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCiAJCQkJICBjaGFyICplc3NpZGJ1ZikKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IGFjdGl2ZTsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTYyLDU5ICs0MTcsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCi0JCQkJIGNoYXIgKm5pY2tidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChucnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQotCQlyZXR1cm4gLUUyQklHOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKLQltZW1jcHkocHJpdi0+bmljaywgbmlja2J1ZiwgbnJxLT5sZW5ndGgpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAotCQkJCSBjaGFyICpuaWNrYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW1lbWNweShuaWNrYnVmLCBwcml2LT5uaWNrLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCW5ycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCiAJCQkJIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgY2hhbiA9IC0xOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIEluIGluZnJhc3RydWN0dXJlIG1vZGUgdGhlIEFQIHNldHMgdGhlIGNoYW5uZWwgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKQorCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoKGZycS0+ZSA9PSAwKSAmJiAoZnJxLT5tIDw9IDEwMDApKSB7CkBAIC02NDAsNyArNDU0LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCXByaXYtPmNoYW5uZWwgPSBjaGFuOwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKIAkJLyogRmFzdCBjaGFubmVsIGNoYW5nZSAtIG5vIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCiAJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CkBAIC02NTcsNyArNDcxLDcgQEAKIAkJCQkgc3RydWN0IGl3X2ZyZXEgKmZycSwKIAkJCQkgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCB0bXA7CiAKIAkvKiBMb2NraW5nIGRvbmUgaW4gdGhlcmUgKi8KQEAgLTY3Niw3ICs0OTAsNyBAQAogCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnNycSwKIAkJCQkgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAl1MTYgdmFsOwogCWludCBlcnI7CkBAIC03MDUsNyArNTE5LDcgQEAKIAkJCQkgc3RydWN0IGl3X3BhcmFtICpzcnEsCiAJCQkJIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgdmFsID0gc3JxLT52YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC03MjgsNyArNTQyLDcgQEAKIAkJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKIAkJCQljaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IHZhbCA9IHJycS0+dmFsdWU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNzUyLDcgKzU2Niw3IEBACiAJCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCiAJCQkJY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCiAJcnJxLT52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2g7CiAJcnJxLT5kaXNhYmxlZCA9IChycnEtPnZhbHVlID09IDIzNDcpOwpAQCAtNzY2LDcgKzU4MCw3IEBACiAJCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAogCQkJCSBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC04MDYsNyArNjIwLDcgQEAKIAkJCQkgc3RydWN0IGl3X3BhcmFtICpmcnEsCiAJCQkJIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJaW50IGVycjsKIAl1MTYgdmFsOwpAQCAtODQ3LDcgKzY2MSw3IEBACiAJCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAogCQkJCSBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IHJhdGVtb2RlOwogCWludCBiaXRyYXRlOyAvKiAxMDBzIG9mIGtpbG9iaXRzICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg4MSw3ICs2OTUsNyBAQAogCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKIAkJCQkgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCWludCBiaXRyYXRlLCBhdXRvbWF0aWM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTkxMCw3ICs3MjQsNyBAQAogCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCiAJCQkJICBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC05NjQsNyArNzc4LDcgQEAKIAkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAogCQkJCSAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlpbnQgZXJyID0gMDsKIAl1MTYgZW5hYmxlLCBwZXJpb2QsIHRpbWVvdXQsIG1jYXN0OwpAQCAtMTAxOCwxMyArODMyLDEyIEBACiAJCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCiAJCQkJICAgICAgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKIAlpbnQgaWR4LCBhbGcgPSBleHQtPmFsZywgc2V0X2tleSA9IDE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gLUVJTlZBTDsKLQl1MTYga2V5X2xlbjsKIAogCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTA1Niw0OCArODY5LDQxIEBACiAJCS8qIFNldCB0aGUgcmVxdWVzdGVkIGtleSBmaXJzdCAqLwogCQlzd2l0Y2ggKGFsZykgewogCQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKLQkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7Ci0JCQlwcml2LT5rZXlzW2lkeF0ubGVuID0gMDsKKwkJCXByaXYtPmVuY29kZV9hbGcgPSBPUklOT0NPX0FMR19OT05FOworCQkJZXJyID0gb3Jpbm9jb19zZXRfa2V5KHByaXYsIGlkeCwgT1JJTk9DT19BTEdfTk9ORSwKKwkJCQkJICAgICAgTlVMTCwgMCwgTlVMTCwgMCk7CiAJCQlicmVhazsKIAogCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQkJaWYgKGV4dC0+a2V5X2xlbiA+IFNNQUxMX0tFWV9TSVpFKQotCQkJCWtleV9sZW4gPSBMQVJHRV9LRVlfU0laRTsKLQkJCWVsc2UgaWYgKGV4dC0+a2V5X2xlbiA+IDApCi0JCQkJa2V5X2xlbiA9IFNNQUxMX0tFWV9TSVpFOwotCQkJZWxzZQorCQkJaWYgKGV4dC0+a2V5X2xlbiA8PSAwKQogCQkJCWdvdG8gb3V0OwogCi0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJcHJpdi0+a2V5c1tpZHhdLmxlbiA9IGNwdV90b19sZTE2KGtleV9sZW4pOwotCi0JCQlrZXlfbGVuID0gbWluKGV4dC0+a2V5X2xlbiwga2V5X2xlbik7Ci0KLQkJCW1lbXNldChwcml2LT5rZXlzW2lkeF0uZGF0YSwgMCwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOwotCQkJbWVtY3B5KHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleSwga2V5X2xlbik7CisJCQlwcml2LT5lbmNvZGVfYWxnID0gT1JJTk9DT19BTEdfV0VQOworCQkJZXJyID0gb3Jpbm9jb19zZXRfa2V5KHByaXYsIGlkeCwgT1JJTk9DT19BTEdfV0VQLAorCQkJCQkgICAgICBleHQtPmtleSwgZXh0LT5rZXlfbGVuLCBOVUxMLCAwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgogCQl7Ci0JCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CiAJCQl1OCAqdGtpcF9pdiA9IE5VTEw7CiAKIAkJCWlmICghcHJpdi0+aGFzX3dwYSB8fAotCQkJICAgIChleHQtPmtleV9sZW4gPiBzaXplb2YocHJpdi0+dGtpcF9rZXlbMF0pKSkKKwkJCSAgICAoZXh0LT5rZXlfbGVuID4gc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3RraXBfa2V5KSkpCiAJCQkJZ290byBvdXQ7CiAKLQkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7Ci0JCQltZW1zZXQoJnByaXYtPnRraXBfa2V5W2lkeF0sIDAsCi0JCQkgICAgICAgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2lkeF0pKTsKLQkJCW1lbWNweSgmcHJpdi0+dGtpcF9rZXlbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisJCQlwcml2LT5lbmNvZGVfYWxnID0gT1JJTk9DT19BTEdfVEtJUDsKIAogCQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCiAJCQkJdGtpcF9pdiA9ICZleHQtPnJ4X3NlcVswXTsKIAotCQkJZXJyID0gX19vcmlub2NvX2h3X3NldF90a2lwX2tleShodywgaWR4LAorCQkJZXJyID0gb3Jpbm9jb19zZXRfa2V5KHByaXYsIGlkeCwgT1JJTk9DT19BTEdfVEtJUCwKKwkJCQkJICAgICAgZXh0LT5rZXksIGV4dC0+a2V5X2xlbiwgdGtpcF9pdiwKKwkJCQkJICAgICAgT1JJTk9DT19TRVFfTEVOKTsKKworCQkJZXJyID0gX19vcmlub2NvX2h3X3NldF90a2lwX2tleShwcml2LCBpZHgsCiAJCQkJIGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZLAotCQkJCSAodTggKikgJnByaXYtPnRraXBfa2V5W2lkeF0sCi0JCQkJIHRraXBfaXYsIE5VTEwpOworCQkJCSBwcml2LT5rZXlzW2lkeF0ua2V5LAorCQkJCSB0a2lwX2l2LCBPUklOT0NPX1NFUV9MRU4sIE5VTEwsIDApOwogCQkJaWYgKGVycikKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFRLSVAga2V5IgogCQkJCSAgICAgICAiXG4iLCBkZXYtPm5hbWUsIGVycik7CkBAIC0xMTIwLDcgKzkyNiw3IEBACiAJCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCiAJCQkJICAgICAgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKIAlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKQEAgLTExNDYsMjIgKzk1MiwyMiBAQAogCWVuY29kaW5nLT5mbGFncyA9IGlkeCArIDE7CiAJbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKIAotCWV4dC0+YWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKIAlzd2l0Y2ggKHByaXYtPmVuY29kZV9hbGcpIHsKLQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKKwljYXNlIE9SSU5PQ09fQUxHX05PTkU6CisJCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19OT05FOwogCQlleHQtPmtleV9sZW4gPSAwOwogCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgotCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaWR4XS5sZW4pLAotCQkJCSAgICAgbWF4X2tleV9sZW4pOwotCQltZW1jcHkoZXh0LT5rZXksIHByaXYtPmtleXNbaWR4XS5kYXRhLCBleHQtPmtleV9sZW4pOworCWNhc2UgT1JJTk9DT19BTEdfV0VQOgorCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfV0VQOworCQlleHQtPmtleV9sZW4gPSBtaW4ocHJpdi0+a2V5c1tpZHhdLmtleV9sZW4sIG1heF9rZXlfbGVuKTsKKwkJbWVtY3B5KGV4dC0+a2V5LCBwcml2LT5rZXlzW2lkeF0ua2V5LCBleHQtPmtleV9sZW4pOwogCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CiAJCWJyZWFrOwotCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgotCQlleHQtPmtleV9sZW4gPSBtaW5fdCh1MTYsIHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb190a2lwX2tleSksCi0JCQkJICAgICBtYXhfa2V5X2xlbik7Ci0JCW1lbWNweShleHQtPmtleSwgJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5X2xlbik7CisJY2FzZSBPUklOT0NPX0FMR19US0lQOgorCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfVEtJUDsKKwkJZXh0LT5rZXlfbGVuID0gbWluKHByaXYtPmtleXNbaWR4XS5rZXlfbGVuLCBtYXhfa2V5X2xlbik7CisJCW1lbWNweShleHQtPmtleSwgcHJpdi0+a2V5c1tpZHhdLmtleSwgZXh0LT5rZXlfbGVuKTsKIAkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwogCQlicmVhazsKIAl9CkBAIC0xMTc3LDcgKzk4Myw3IEBACiAJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMjU1LDcgKzEwNjEsNyBAQAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CkBAIC0xMjk1LDcgKzExMDEsNyBAQAogCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXU4ICpidWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTMzOCw3ICsxMTQ0LDcgQEAKIAkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCkBAIC0xMzY3LDggKzExNzMsNyBAQAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwpAQCAtMTM4MiwxOSArMTE4NywxMSBAQAogCQlicmVhazsKIAogCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKLQl7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBhZGRyW0VUSF9BTEVOXTsKLQkJCV9fbGUxNiByZWFzb25fY29kZTsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOwogCi0JCW1lbWNweShidWYuYWRkciwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7Ci0JCWJ1Zi5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KG1sbWUtPnJlYXNvbl9jb2RlKTsKLQkJcmV0ID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZESVNBU1NPQ0lBVEUsCi0JCQkJCSAgJmJ1Zik7CisJCXJldCA9IG9yaW5vY29faHdfZGlzYXNzb2NpYXRlKHByaXYsIG1sbWUtPmFkZHIuc2FfZGF0YSwKKwkJCQkJICAgICAgbWxtZS0+cmVhc29uX2NvZGUpOwogCQlicmVhazsKLQl9CisKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNDA4LDcgKzEyMDUsNyBAQAogCQkJCSAgc3RydWN0IGl3X3BhcmFtICpycnEsCiAJCQkJICBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCBlcnIgPSAwOwogCXUxNiBzaG9ydF9saW1pdCwgbG9uZ19saW1pdCwgbGlmZXRpbWU7CkBAIC0xNDYyLDcgKzEyNTksNyBAQAogCQkJICAgICAgIHZvaWQgKndycXUsCiAJCQkgICAgICAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtMTQ4NywxNCArMTI4NCwxNCBAQAogCQkJCSAgICAgY2hhciAqZXh0cmEpCiAKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50IHZhbCA9ICooKGludCAqKSBleHRyYSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JcHJpdi0+aWJzc19wb3J0ID0gdmFsIDsKKwlwcml2LT5pYnNzX3BvcnQgPSB2YWw7CiAKIAkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIG1vZGUgd2UgYXJlIHVzaW5nICovCiAJc2V0X3BvcnRfdHlwZShwcml2KTsKQEAgLTE1MDgsNyArMTMwNSw3IEBACiAJCQkJICAgICB2b2lkICp3cnF1LAogCQkJCSAgICAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKIAogCSp2YWwgPSBwcml2LT5pYnNzX3BvcnQ7CkBAIC0xNTIwLDcgKzEzMTcsNyBAQAogCQkJCSAgdm9pZCAqd3JxdSwKIAkJCQkgIGNoYXIgKmV4dHJhKQogewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZGV2X3ByaXYoZGV2KTsKIAlpbnQgdmFsID0gKigoaW50ICopIGV4dHJhKTsKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTU2Niw3ICsxMzYzLDcgQEAKIAkJCQkgIHZvaWQgKndycXUsCiAJCQkJICBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwogCiAJKnZhbCA9IHByaXYtPnByZWZlcl9wb3J0MzsKQEAgLTE1NzgsNyArMTM3NSw3IEBACiAJCQkJICAgICB2b2lkICp3cnF1LAogCQkJCSAgICAgY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHZhbDsKIApAQCAtMTYxMCw3ICsxNDA3LDcgQEAKIAkJCQkgICAgIHZvaWQgKndycXUsCiAJCQkJICAgICBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwogCiAJaWYgKCFwcml2LT5oYXNfcHJlYW1ibGUpCkBAIC0xNjMwLDcgKzE0MjcsNyBAQAogCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwKIAkJCQljaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmRldl9wcml2KGRldik7CiAJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwogCWludCByaWQgPSBkYXRhLT5mbGFnczsKIAl1MTYgbGVuZ3RoOwpAQCAtMTY2MSw1MTkgKzE0NTgsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qIFRyaWdnZXIgYSBzY2FuIChsb29rIGZvciBvdGhlciBjZWxscyBpbiB0aGUgdmljaW5pdHkpICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCXN0cnVjdCBpd19zY2FuX3JlcSAqc2kgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopIGV4dHJhOwotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBOb3RlIDogeW91IG1heSBoYXZlIHJlYWxpc2VkIHRoYXQsIGFzIHRoaXMgaXMgYSBTRVQgb3BlcmF0aW9uLAotCSAqIHRoaXMgaXMgcHJpdmlsZWdlZCBhbmQgdGhlcmVmb3JlIGEgbm9ybWFsIHVzZXIgY2FuJ3QKLQkgKiBwZXJmb3JtIHNjYW5uaW5nLgotCSAqIFRoaXMgaXMgbm90IGFuIGVycm9yLCB3aGlsZSB0aGUgZGV2aWNlIHBlcmZvcm0gc2Nhbm5pbmcsCi0JICogdHJhZmZpYyBkb2Vzbid0IGZsb3csIHNvIGl0J3MgYSBwZXJmZWN0IERvUy4uLgotCSAqIEplYW4gSUkgKi8KLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogU2Nhbm5pbmcgd2l0aCBwb3J0IDAgZGlzYWJsZWQgd291bGQgZmFpbCAqLwotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWVyciA9IC1FTkVURE9XTjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogSW4gbW9uaXRvciBtb2RlLCB0aGUgc2NhbiByZXN1bHRzIGFyZSBhbHdheXMgZW1wdHkuCi0JICogUHJvYmUgcmVzcG9uc2VzIGFyZSBwYXNzZWQgdG8gdGhlIGRyaXZlciBhcyByZWNlaXZlZAotCSAqIGZyYW1lcyBhbmQgY291bGQgYmUgcHJvY2Vzc2VkIGluIHNvZnR3YXJlLiAqLwotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogTm90ZSA6IGJlY2F1c2Ugd2UgZG9uJ3QgbG9jayBvdXQgdGhlIGlycSBoYW5kbGVyLCB0aGUgd2F5Ci0JICogd2UgYWNjZXNzIHNjYW4gdmFyaWFibGVzIGluIHByaXYgaXMgY3JpdGljYWwuCi0JICoJbyBzY2FuX2lucHJvZ3Jlc3MgOiBub3QgdG91Y2hlZCBieSBpcnEgaGFuZGxlcgotCSAqCW8gc2Nhbl9tb2RlIDogbm90IHRvdWNoZWQgYnkgaXJxIGhhbmRsZXIKLQkgKiBCZWZvcmUgbW9kaWZ5aW5nIGFueXRoaW5nIG9uIHRob3NlIHZhcmlhYmxlcywgcGxlYXNlIHRoaW5rIGhhcmQgIQotCSAqIEplYW4gSUkgKi8KLQotCS8qIFNhdmUgZmxhZ3MgKi8KLQlwcml2LT5zY2FuX21vZGUgPSBzcnEtPmZsYWdzOwotCi0JLyogQWx3YXlzIHRyaWdnZXIgc2Nhbm5pbmcsIGV2ZW4gaWYgaXQncyBpbiBwcm9ncmVzcy4KLQkgKiBUaGlzIHdheSwgaWYgdGhlIGluZm8gZnJhbWUgZ2V0IGxvc3QsIHdlIHdpbGwgcmVjb3ZlciBzb21ld2hhdAotCSAqIGdyYWNlZnVsbHkgIC0gSmVhbiBJSSAqLwotCi0JaWYgKHByaXYtPmhhc19ob3N0c2NhbikgewotCQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCUhFUk1FU19SSURfQ05GSE9TVFNDQU5fU1lNQk9MLAotCQkJCQkJSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9PTkNFIHwKLQkJCQkJCUhFUk1FU19IT1NUU0NBTl9TWU1CT0xfQkNBU1QpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDogewotCQkJX19sZTE2IHJlcVszXTsKLQotCQkJcmVxWzBdID0gY3B1X3RvX2xlMTYoMHgzZmZmKTsJLyogQWxsIGNoYW5uZWxzICovCi0JCQlyZXFbMV0gPSBjcHVfdG9fbGUxNigweDAwMDEpOwkvKiByYXRlIDEgTWJwcyAqLwotCQkJcmVxWzJdID0gMDsJCQkvKiBBbnkgRVNTSUQgKi8KLQkJCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkJICBIRVJNRVNfUklEX0NORkhPU1RTQ0FOLCAmcmVxKTsKLQkJfQotCQlicmVhazsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkJaWYgKHByaXYtPnNjYW5fbW9kZSAmIElXX1NDQU5fVEhJU19FU1NJRCkgewotCQkJCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7Ci0JCQkJc2l6ZV90IGxlbiA9IG1pbihzaXplb2YoaWRidWYudmFsKSwKLQkJCQkJCSAoc2l6ZV90KSBzaS0+ZXNzaWRfbGVuKTsKLQkJCQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwotCQkJCW1lbWNweShpZGJ1Zi52YWwsIHNpLT5lc3NpZCwgbGVuKTsKLQotCQkJCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLAotCQkJCQkgICAgICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKLQkJCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obGVuICsgMiksCi0JCQkJCSAgICAgICAmaWRidWYpOwotCQkJfSBlbHNlCi0JCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZTQ0FOU1NJRF9BR0VSRSwKLQkJCQkJCSAgIDApOwkvKiBBbnkgRVNTSUQgKi8KLQkJCWlmIChlcnIpCi0JCQkJYnJlYWs7Ci0KLQkJCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKLQkJCQkvKiBDbGVhciBzY2FuIHJlc3VsdHMgYXQgdGhlIHN0YXJ0IG9mCi0JCQkJICogYW4gZXh0ZW5kZWQgc2NhbiAqLwotCQkJCW9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHByaXYsCi0JCQkJCQltc2Vjc190b19qaWZmaWVzKDE1MDAwKSk7Ci0KLQkJCQkvKiBUT0RPOiBJcyB0aGlzIGF2YWlsYWJsZSBvbiBvbGRlciBmaXJtd2FyZT8KLQkJCQkgKiAgIENhbiB3ZSB1c2UgaXQgdG8gc2NhbiBzcGVjaWZpYyBjaGFubmVscwotCQkJCSAqICAgZm9yIElXX1NDQU5fVEhJU19GUkVRPyAqLwotCQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCUhFUk1FU19SSURfQ05GU0NBTkNIQU5ORUxTMkdIWiwKLQkJCQkJCTB4N0ZGRik7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBvdXQ7Ci0KLQkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywKLQkJCQkJCSAgICAgSEVSTUVTX0lOUV9DSEFOTkVMSU5GTyk7Ci0JCQl9IGVsc2UKLQkJCQllcnIgPSBoZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9TQ0FOKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlCi0JCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOwotCi0JLyogT25lIG1vcmUgY2xpZW50ICovCi0JaWYgKCFlcnIpCi0JCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDE7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0jZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0Ci0KLS8qIFRyYW5zbGF0ZSBzY2FuIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FyZCB0byBhIGNhcmQgaW5kZXBlbmRhbnQKLSAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQgLSBKZWFuIElJICovCi1zdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJICAgY2hhciAqY3VycmVudF9ldiwKLQkJCQkJICAgY2hhciAqZW5kX2J1ZiwKLQkJCQkJICAgdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYnNzLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZCkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYJCQljYXBhYmlsaXRpZXM7Ci0JdTE2CQkJY2hhbm5lbDsKLQlzdHJ1Y3QgaXdfZXZlbnQJCWl3ZTsJCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLQljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCi0JLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5hLmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwotCi0JLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCi0KLQkvKiBBZGQgdGhlIEVTU0lEICovCi0JaXdlLnUuZGF0YS5sZW5ndGggPSBsZTE2X3RvX2NwdShic3MtPmEuZXNzaWRfbGVuKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKLQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIGJzcy0+YS5lc3NpZCk7Ci0KLQkvKiBBZGQgbW9kZSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmEuY2FwYWJpbGl0aWVzKTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKLQkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCWNoYW5uZWwgPSBic3MtPnMuY2hhbm5lbDsKLQlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gTlVNX0NIQU5ORUxTKSkgewotCQkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCi0JCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbDsKLQkJaXdlLnUuZnJlcS5lID0gMDsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQotCQlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2hhbm5lbCkgKiAxMDAwMDA7Ci0JCWl3ZS51LmZyZXEuZSA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0JfQotCi0JLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KLQlpd2UuY21kID0gSVdFVlFVQUw7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQlpd2UudS5xdWFsLmxldmVsID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5sZXZlbCkgLSAweDk1OwotCWl3ZS51LnF1YWwubm9pc2UgPSAoX191OCkgbGUxNl90b19jcHUoYnNzLT5hLm5vaXNlKSAtIDB4OTU7Ci0JLyogV2lyZWxlc3MgdG9vbHMgcHJpb3IgdG8gMjcucHJlMjIgd2lsbCBzaG93IGxpbmsgcXVhbGl0eQotCSAqIGFueXdheSwgc28gd2UgcHJvdmlkZSBhIHJlYXNvbmFibGUgdmFsdWUuICovCi0JaWYgKGl3ZS51LnF1YWwubGV2ZWwgPiBpd2UudS5xdWFsLm5vaXNlKQotCQlpd2UudS5xdWFsLnF1YWwgPSBpd2UudS5xdWFsLmxldmVsIC0gaXdlLnUucXVhbC5ub2lzZTsKLQllbHNlCi0JCWl3ZS51LnF1YWwucXVhbCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOwotCi0JLyogQWRkIGVuY3J5cHRpb24gY2FwYWJpbGl0eSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOwotCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwotCWVsc2UKLQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IDA7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgTlVMTCk7Ci0KLQkvKiBCaXQgcmF0ZSBpcyBub3QgYXZhaWxhYmxlIGluIEx1Y2VudC9BZ2VyZSBmaXJtd2FyZXMgKi8KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSAhPSBGSVJNV0FSRV9UWVBFX0FHRVJFKSB7Ci0JCWNoYXIgKmN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0JCWludCBzdGVwOwotCi0JCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MKQotCQkJc3RlcCA9IDI7Ci0JCWVsc2UKLQkJCXN0ZXAgPSAxOwotCi0JCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLQkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCi0JCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKLQkJLyogTWF4IDEwIHZhbHVlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkgKz0gc3RlcCkgewotCQkJLyogTlVMTCB0ZXJtaW5hdGVkICovCi0JCQlpZiAoYnNzLT5wLnJhdGVzW2ldID09IDB4MCkKLQkJCQlicmVhazsKLQkJCS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCi0JCQlpd2UudS5iaXRyYXRlLnZhbHVlID0KLQkJCQkoKGJzcy0+cC5yYXRlc1tpXSAmIDB4N2YpICogNTAwMDAwKTsKLQkJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwKLQkJCQkJCQkgICBjdXJyZW50X3ZhbCwKLQkJCQkJCQkgICBlbmRfYnVmLCAmaXdlLAotCQkJCQkJCSAgIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0JCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkKLQkJCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKLQl9Ci0KLQkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiYmNuX2ludD0lZCIsCi0JCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmEuYmVhY29uX2ludGVydikpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBDYXBhYmlsaXRlcyAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJjYXBhYj0weCUwNHgiLAotCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCi0JICogZm9yIGdpdmVuIG5ldHdvcmsuICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCXJldHVybiBjdXJyZW50X2V2OwotfQotCi1zdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX2V4dF9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCQkgICAgICAgY2hhciAqY3VycmVudF9ldiwKLQkJCQkJICAgICAgIGNoYXIgKmVuZF9idWYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYnNzLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBsYXN0X3NjYW5uZWQpCi17Ci0JdTE2CQkJY2FwYWJpbGl0aWVzOwotCXUxNgkJCWNoYW5uZWw7Ci0Jc3RydWN0IGl3X2V2ZW50CQlpd2U7CQkvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0JY2hhciBjdXN0b21bTUFYX0NVU1RPTV9MRU5dOwotCXU4ICppZTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0KLQkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCi0JaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwotCi0JLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCi0KLQkvKiBBZGQgdGhlIEVTU0lEICovCi0JaWUgPSBic3MtPmRhdGE7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpIHsKLQkJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCi0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOwotCQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsICZpZVsyXSk7Ci0JfQotCi0JLyogQWRkIG1vZGUgKi8KLQljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmNhcGFiaWxpdGllcyk7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIChXTEFOX0NBUEFCSUxJVFlfRVNTIHwgV0xBTl9DQVBBQklMSVRZX0lCU1MpKSB7Ci0JCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfRFNfUEFSQU1TKTsKLQljaGFubmVsID0gaWUgPyBpZVsyXSA6IDA7Ci0JaWYgKChjaGFubmVsID49IDEpICYmIChjaGFubmVsIDw9IE5VTV9DSEFOTkVMUykpIHsKLQkJLyogQWRkIGNoYW5uZWwgYW5kIGZyZXF1ZW5jeSAqLwotCQlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7Ci0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWw7Ci0JCWl3ZS51LmZyZXEuZSA9IDA7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0KLQkJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGNoYW5uZWwpICogMTAwMDAwOwotCQlpd2UudS5mcmVxLmUgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCX0KLQotCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCi0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+bGV2ZWwgLSAweDk1OwotCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlIC0gMHg5NTsKLQkvKiBXaXJlbGVzcyB0b29scyBwcmlvciB0byAyNy5wcmUyMiB3aWxsIHNob3cgbGluayBxdWFsaXR5Ci0JICogYW55d2F5LCBzbyB3ZSBwcm92aWRlIGEgcmVhc29uYWJsZSB2YWx1ZS4gKi8KLQlpZiAoaXdlLnUucXVhbC5sZXZlbCA+IGl3ZS51LnF1YWwubm9pc2UpCi0JCWl3ZS51LnF1YWwucXVhbCA9IGl3ZS51LnF1YWwubGV2ZWwgLSBpd2UudS5xdWFsLm5vaXNlOwotCWVsc2UKLQkJaXdlLnUucXVhbC5xdWFsID0gMDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7Ci0KLQkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCi0JaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7Ci0JaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7Ci0JZWxzZQotCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJICAmaXdlLCBOVUxMKTsKLQotCS8qIFdQQSBJRSAqLwotCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSkpOwotCWlmIChpZSkgewotCQlpd2UuY21kID0gSVdFVkdFTklFOwotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGllKTsKLQl9Ci0KLQkvKiBSU04gSUUgKi8KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX1JTTik7Ci0JaWYgKGllKSB7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgaWUpOwotCX0KLQotCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfU1VQUF9SQVRFUyk7Ci0JaWYgKGllKSB7Ci0JCWNoYXIgKnAgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOwotCQlpbnQgaTsKLQotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0KLQkJZm9yIChpID0gMjsgaSA8IChpZVsxXSArIDIpOyBpKyspIHsKLQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGllW2ldICYgMHg3RikgKiA1MDAwMDApOwotCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsIHAsIGVuZF9idWYsCi0JCQkJCQkgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKLQkJfQotCQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KLQkJaWYgKHAgPiAoY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKSkpCi0JCQljdXJyZW50X2V2ID0gcDsKLQl9Ci0KLQkvKiBUaW1lc3RhbXAgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9Ci0JCXNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sICJ0c2Y9JTAxNmxseCIsCi0JCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgbGU2NF90b19jcHUoYnNzLT50aW1lc3RhbXApKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQmVhY29uIGludGVydmFsICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImJjbl9pbnQ9JWQiLAotCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5iZWFjb25faW50ZXJ2YWwpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQ2FwYWJpbGl0ZXMgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiY2FwYWI9MHglMDR4IiwKLQkJCQkgICAgIGNhcGFiaWxpdGllcyk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQotCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotLyogUmV0dXJuIHJlc3VsdHMgb2YgYSBzY2FuICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChwcml2LT5zY2FuX2lucHJvZ3Jlc3MpIHsKLQkJLyogSW1wb3J0YW50IG5vdGUgOiB3ZSBkb24ndCB3YW50IHRvIGJsb2NrIHRoZSBjYWxsZXIKLQkJICogdW50aWwgcmVzdWx0cyBhcmUgcmVhZHkgZm9yIHZhcmlvdXMgcmVhc29ucy4KLQkJICogRmlyc3QsIG1hbmFnaW5nIHdhaXQgcXVldWVzIGlzIGNvbXBsZXggYW5kIHJhY3kuCi0JCSAqIFNlY29uZCwgd2UgZ3JhYiBzb21lIHJ0bmV0bGluayBsb2NrIGJlZm9yZSBjb21taW5nCi0JCSAqIGhlcmUgKGluIGRldl9pb2N0bCgpKS4KLQkJICogVGhpcmQsIHdlIGdlbmVyYXRlIGFuIFdpcmVsZXNzIEV2ZW50LCBzbyB0aGUKLQkJICogY2FsbGVyIGNhbiB3YWl0IGl0c2VsZiBvbiB0aGF0IC0gSmVhbiBJSSAqLwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKSB7Ci0JCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzczsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQkvKiBUcmFuc2xhdGUgdGhpcyBlbnRyeSB0byBXRSBmb3JtYXQgKi8KLQkJCWN1cnJlbnRfZXYgPQotCQkJCW9yaW5vY29fdHJhbnNsYXRlX2V4dF9zY2FuKGRldiwgaW5mbywKLQkJCQkJCQkgICBjdXJyZW50X2V2LAotCQkJCQkJCSAgIGV4dHJhICsgc3JxLT5sZW5ndGgsCi0JCQkJCQkJICAgJmJzcy0+YnNzLAotCQkJCQkJCSAgIGJzcy0+bGFzdF9zY2FubmVkKTsKLQotCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIG9uZSBtb3JlIGVudHJ5ICovCi0JCQlpZiAoKGV4dHJhICsgc3JxLT5sZW5ndGggLSBjdXJyZW50X2V2KQotCQkJICAgIDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQkJLyogQXNrIHVzZXIgc3BhY2UgdG8gdHJ5IGFnYWluIHdpdGggYQotCQkJCSAqIGJpZ2dlciBidWZmZXIgKi8KLQkJCQllcnIgPSAtRTJCSUc7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCS8qIFRyYW5zbGF0ZSB0aGlzIGVudHJ5IHRvIFdFIGZvcm1hdCAqLwotCQkJY3VycmVudF9ldiA9IG9yaW5vY29fdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLAotCQkJCQkJCSAgICBjdXJyZW50X2V2LAotCQkJCQkJCSAgICBleHRyYSArIHNycS0+bGVuZ3RoLAotCQkJCQkJCSAgICAmYnNzLT5ic3MsCi0JCQkJCQkJICAgIGJzcy0+bGFzdF9zY2FubmVkKTsKLQotCQkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgZm9yIG9uZSBtb3JlIGVudHJ5ICovCi0JCQlpZiAoKGV4dHJhICsgc3JxLT5sZW5ndGggLSBjdXJyZW50X2V2KQotCQkJICAgIDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQkJLyogQXNrIHVzZXIgc3BhY2UgdG8gdHJ5IGFnYWluIHdpdGggYQotCQkJCSAqIGJpZ2dlciBidWZmZXIgKi8KLQkJCQllcnIgPSAtRTJCSUc7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzcnEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOwotCXNycS0+ZmxhZ3MgPSAoX191MTYpIHByaXYtPnNjYW5fbW9kZTsKLQotb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KIAogLyogQ29tbWl0IGhhbmRsZXIsIGNhbGxlZCBhZnRlciBzZXQgb3BlcmF0aW9ucyAqLwogc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjE4MSw1MCArMTQ2NSwxNyBAQAogCQkJCXZvaWQgKndycXUsCiAJCQkJY2hhciAqZXh0cmEpCiB7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5kZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIXByaXYtPm9wZW4pCiAJCXJldHVybiAwOwogCi0JaWYgKHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgewotCQlvcmlub2NvX3Jlc2V0KCZwcml2LT5yZXNldF93b3JrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZGlzYWJsZSBwb3J0ICIKLQkJICAgICAgICJ3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsIGRldi0+bmFtZSk7Ci0JCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVjb25maWd1cmUgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSBwb3J0IHdoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotIG91dDoKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXNldHRpbmcgaW5zdGVhZC4uLlxuIiwgZGV2LT5uYW1lKTsKLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JCWVyciA9IDA7Ci0JfQorCWVyciA9IG9yaW5vY29fY29tbWl0KHByaXYpOwogCiAJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjI1OCwyNiArMTUwOSwyNCBAQAogCVtJV19JT0NUTF9JRFgoaWQpXSA9IChpd19oYW5kbGVyKSBmdW5jCiBzdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX2hhbmRsZXJbXSA9IHsKIAlTVERfSVdfSEFORExFUihTSU9DU0lXQ09NTUlULAlvcmlub2NvX2lvY3RsX2NvbW1pdCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05BTUUsCW9yaW5vY29faW9jdGxfZ2V0bmFtZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05BTUUsCWNmZzgwMjExX3dleHRfZ2l3bmFtZSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSRVEsCW9yaW5vY29faW9jdGxfc2V0ZnJlcSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSRVEsCW9yaW5vY29faW9jdGxfZ2V0ZnJlcSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01PREUsCW9yaW5vY29faW9jdGxfc2V0bW9kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV01PREUsCW9yaW5vY29faW9jdGxfZ2V0bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01PREUsCWNmZzgwMjExX3dleHRfc2l3bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV01PREUsCWNmZzgwMjExX3dleHRfZ2l3bW9kZSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NFTlMsCW9yaW5vY29faW9jdGxfc2V0c2VucyksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NFTlMsCW9yaW5vY29faW9jdGxfZ2V0c2VucyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBTkdFLAlvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2UpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSQU5HRSwJY2ZnODAyMTFfd2V4dF9naXdyYW5nZSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NQWSwJaXdfaGFuZGxlcl9zZXRfc3B5KSwKIAlTVERfSVdfSEFORExFUihTSU9DR0lXU1BZLAlpd19oYW5kbGVyX2dldF9zcHkpLAogCVNURF9JV19IQU5ETEVSKFNJT0NTSVdUSFJTUFksCWl3X2hhbmRsZXJfc2V0X3RocnNweSksCiAJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1RIUlNQWSwJaXdfaGFuZGxlcl9nZXRfdGhyc3B5KSwKIAlTVERfSVdfSEFORExFUihTSU9DU0lXQVAsCW9yaW5vY29faW9jdGxfc2V0d2FwKSwKIAlTVERfSVdfSEFORExFUihTSU9DR0lXQVAsCW9yaW5vY29faW9jdGxfZ2V0d2FwKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9zZXRzY2FuKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXU0NBTiwJb3Jpbm9jb19pb2N0bF9nZXRzY2FuKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXU0NBTiwJY2ZnODAyMTFfd2V4dF9zaXdzY2FuKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXU0NBTiwJY2ZnODAyMTFfd2V4dF9naXdzY2FuKSwKIAlTVERfSVdfSEFORExFUihTSU9DU0lXRVNTSUQsCW9yaW5vY29faW9jdGxfc2V0ZXNzaWQpLAogCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFU1NJRCwJb3Jpbm9jb19pb2N0bF9nZXRlc3NpZCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV05JQ0tOLAlvcmlub2NvX2lvY3RsX3NldG5pY2spLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9nZXRuaWNrKSwKIAlTVERfSVdfSEFORExFUihTSU9DU0lXUkFURSwJb3Jpbm9jb19pb2N0bF9zZXRyYXRlKSwKIAlTVERfSVdfSEFORExFUihTSU9DR0lXUkFURSwJb3Jpbm9jb19pb2N0bF9nZXRyYXRlKSwKIAlTVERfSVdfSEFORExFUihTSU9DU0lXUlRTLAlvcmlub2NvX2lvY3RsX3NldHJ0cyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvTWFrZWZpbGUKaW5kZXggYzIwNTBkZS4uYjU0MmU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQpAQCAtMSwzICsxLDYgQEAKK3A1NGNvbW1vbi1vYmpzCQkJOj0gZWVwcm9tLm8gZndpby5vIHR4cngubyBtYWluLm8KK3A1NGNvbW1vbi0kKENPTkZJR19QNTRfTEVEUykJKz0gbGVkLm8KKwogb2JqLSQoQ09ORklHX1A1NF9DT01NT04pCSs9IHA1NGNvbW1vbi5vCiBvYmotJChDT05GSUdfUDU0X1VTQikJCSs9IHA1NHVzYi5vCiBvYmotJChDT05GSUdfUDU0X1BDSSkJCSs9IHA1NHBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmZTY3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYwpAQCAtMCwwICsxLDc1MyBAQAorLyoKKyAqIEVFUFJPTSBwYXJzZXIgY29kZSBmb3IgbWFjODAyMTEgUHJpc201NCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBCYXNlZCBvbjoKKyAqIC0gdGhlIGlzbHNtIChzb2Z0bWFjIHByaXNtNTQpIGRyaXZlciwgd2hpY2ggaXM6CisgKiAgIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKiAtIHN0bGM0NXh4IGRyaXZlcgorICogICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJwNTQuaCIKKyNpbmNsdWRlICJlZXByb20uaCIKKyNpbmNsdWRlICJsbWFjLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcDU0X2JncmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDAsIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAxLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMiwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSAzLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gNCwgfSwKKwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDUsIH0sCisJeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gNiwgfSwKKwl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSA3LCB9LAorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDgsIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gOSwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAxMCwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMSwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcDU0X2FyYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gNCwgfSwKKwl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDUsIH0sCisJeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gNiwgfSwKKwl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSA3LCB9LAorCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDgsIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gOSwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAxMCwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMSwgfSwKK307CisKKyNkZWZpbmUgQ0hBTl9IQVNfQ0FMCQlCSVQoMCkKKyNkZWZpbmUgQ0hBTl9IQVNfTElNSVQJCUJJVCgxKQorI2RlZmluZSBDSEFOX0hBU19DVVJWRQkJQklUKDIpCisjZGVmaW5lIENIQU5fSEFTX0FMTAkJKENIQU5fSEFTX0NBTCB8IENIQU5fSEFTX0xJTUlUIHwgQ0hBTl9IQVNfQ1VSVkUpCisKK3N0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSB7CisJdTE2IGZyZXE7CisJdTE2IGRhdGE7CisJaW50IGluZGV4OworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKK307CisKK3N0cnVjdCBwNTRfY2hhbm5lbF9saXN0IHsKKwlzdHJ1Y3QgcDU0X2NoYW5uZWxfZW50cnkgKmNoYW5uZWxzOworCXNpemVfdCBlbnRyaWVzOworCXNpemVfdCBtYXhfZW50cmllczsKKwlzaXplX3QgYmFuZF9jaGFubmVsX251bVtJRUVFODAyMTFfTlVNX0JBTkRTXTsKK307CisKK3N0YXRpYyBpbnQgcDU0X2dldF9iYW5kX2Zyb21fZnJlcSh1MTYgZnJlcSkKK3sKKwkvKiBGSVhNRTogc3luYyB0aGVzZSB2YWx1ZXMgd2l0aCB0aGUgODAyLjExIHNwZWMgKi8KKworCWlmICgoZnJlcSA+PSAyNDEyKSAmJiAoZnJlcSA8PSAyNDg0KSkKKwkJcmV0dXJuIElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwlpZiAoKGZyZXEgPj0gNDkyMCkgJiYgKGZyZXEgPD0gNTgyNSkpCisJCXJldHVybiBJRUVFODAyMTFfQkFORF81R0haOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHA1NF9jb21wYXJlX2NoYW5uZWxzKGNvbnN0IHZvaWQgKl9hLAorCQkJCWNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqYSA9IF9hOworCWNvbnN0IHN0cnVjdCBwNTRfY2hhbm5lbF9lbnRyeSAqYiA9IF9iOworCisJcmV0dXJuIGEtPmluZGV4IC0gYi0+aW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2ZpbGxfYmFuZF9iaXRyYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kX2VudHJ5LAorCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCS8qIFRPRE86IGdlbmVyYXRlIHJhdGUgYXJyYXkgZHluYW1pY2FsbHkgKi8KKworCXN3aXRjaCAoYmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJYmFuZF9lbnRyeS0+Yml0cmF0ZXMgPSBwNTRfYmdyYXRlczsKKwkJYmFuZF9lbnRyeS0+bl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocDU0X2JncmF0ZXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCWJhbmRfZW50cnktPmJpdHJhdGVzID0gcDU0X2FyYXRlczsKKwkJYmFuZF9lbnRyeS0+bl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUocDU0X2FyYXRlcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NF9nZW5lcmF0ZV9iYW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICAgc3RydWN0IHA1NF9jaGFubmVsX2xpc3QgKmxpc3QsCisJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICp0bXAsICpvbGQ7CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlpZiAoKCFsaXN0LT5lbnRyaWVzKSB8fCAoIWxpc3QtPmJhbmRfY2hhbm5lbF9udW1bYmFuZF0pKQorCQlyZXR1cm4gMDsKKworCXRtcCA9IGt6YWxsb2Moc2l6ZW9mKCp0bXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcCkKKwkJZ290byBlcnJfb3V0OworCisJdG1wLT5jaGFubmVscyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCkgKgorCQkJCWxpc3QtPmJhbmRfY2hhbm5lbF9udW1bYmFuZF0sIEdGUF9LRVJORUwpOworCWlmICghdG1wLT5jaGFubmVscykKKwkJZ290byBlcnJfb3V0OworCisJcmV0ID0gcDU0X2ZpbGxfYmFuZF9iaXRyYXRlcyhkZXYsIHRtcCwgYmFuZCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfb3V0OworCisJZm9yIChpID0gMCwgaiA9IDA7IChqIDwgbGlzdC0+YmFuZF9jaGFubmVsX251bVtiYW5kXSkgJiYKKwkJCSAgIChpIDwgbGlzdC0+ZW50cmllcyk7IGkrKykgeworCisJCWlmIChsaXN0LT5jaGFubmVsc1tpXS5iYW5kICE9IGJhbmQpCisJCQljb250aW51ZTsKKworCQlpZiAobGlzdC0+Y2hhbm5lbHNbaV0uZGF0YSAhPSBDSEFOX0hBU19BTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6JXMlcyVzIGlzL2FyZSBtaXNzaW5nIGZvciAiCisJCQkJCSJjaGFubmVsOiVkIFslZCBNSHpdLlxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAorCQkJICAgICAgIChsaXN0LT5jaGFubmVsc1tpXS5kYXRhICYgQ0hBTl9IQVNfQ0FMID8gIiIgOgorCQkJCSIgW2lxYXV0byBjYWxpYnJhdGlvbiBkYXRhXSIpLAorCQkJICAgICAgIChsaXN0LT5jaGFubmVsc1tpXS5kYXRhICYgQ0hBTl9IQVNfTElNSVQgPyAiIiA6CisJCQkJIiBbb3V0cHV0IHBvd2VyIGxpbWl0c10iKSwKKwkJCSAgICAgICAobGlzdC0+Y2hhbm5lbHNbaV0uZGF0YSAmIENIQU5fSEFTX0NVUlZFID8gIiIgOgorCQkJCSIgW2N1cnZlIGRhdGFdIiksCisJCQkgICAgICAgbGlzdC0+Y2hhbm5lbHNbaV0uaW5kZXgsIGxpc3QtPmNoYW5uZWxzW2ldLmZyZXEpOworCQl9CisKKwkJdG1wLT5jaGFubmVsc1tqXS5iYW5kID0gbGlzdC0+Y2hhbm5lbHNbaV0uYmFuZDsKKwkJdG1wLT5jaGFubmVsc1tqXS5jZW50ZXJfZnJlcSA9IGxpc3QtPmNoYW5uZWxzW2ldLmZyZXE7CisJCWorKzsKKwl9CisKKwl0bXAtPm5fY2hhbm5lbHMgPSBsaXN0LT5iYW5kX2NoYW5uZWxfbnVtW2JhbmRdOworCW9sZCA9IHByaXYtPmJhbmRfdGFibGVbYmFuZF07CisJcHJpdi0+YmFuZF90YWJsZVtiYW5kXSA9IHRtcDsKKwlpZiAob2xkKSB7CisJCWtmcmVlKG9sZC0+Y2hhbm5lbHMpOworCQlrZnJlZShvbGQpOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0OgorCWlmICh0bXApIHsKKwkJa2ZyZWUodG1wLT5jaGFubmVscyk7CisJCWtmcmVlKHRtcCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKHN0cnVjdCBwNTRfY2hhbm5lbF9saXN0ICpsaXN0LAorCQkJCSAgICAgdTE2IGZyZXEsIHUxNiBkYXRhKQoreworCWludCBiYW5kLCBpOworCisJLyoKKwkgKiB1c3VhbGx5IGFsbCBsaXN0cyBpbiB0aGUgZWVwcm9tIGFyZSBtb3N0bHkgc29ydGVkLgorCSAqIHNvIGl0J3MgdmVyeSBsaWtlbHkgdGhhdCB0aGUgZW50cnkgd2UgYXJlIGxvb2tpbmcgZm9yCisJICogaXMgcmlnaHQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdAorCSAqLworCWZvciAoaSA9IGxpc3QtPmVudHJpZXM7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChmcmVxID09IGxpc3QtPmNoYW5uZWxzW2ldLmZyZXEpIHsKKwkJCWxpc3QtPmNoYW5uZWxzW2ldLmRhdGEgfD0gZGF0YTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKChpIDwgMCkgJiYgKGxpc3QtPmVudHJpZXMgPCBsaXN0LT5tYXhfZW50cmllcykpIHsKKwkJLyogZW50cnkgZG9lcyBub3QgZXhpc3QgeWV0LiBJbml0aWFsaXplIGEgbmV3IG9uZS4gKi8KKwkJYmFuZCA9IHA1NF9nZXRfYmFuZF9mcm9tX2ZyZXEoZnJlcSk7CisKKwkJLyoKKwkJICogZmlsdGVyIG91dCBmcmVxdWVuY2llcyB3aGljaCBkb24ndCBiZWxvbmcgaW50bworCQkgKiBhbnkgc3VwcG9ydGVkIGJhbmQuCisJCSAqLworCQlpZiAoYmFuZCA8IDApCisJCQlyZXR1cm4gOworCisJCWkgPSBsaXN0LT5lbnRyaWVzKys7CisJCWxpc3QtPmJhbmRfY2hhbm5lbF9udW1bYmFuZF0rKzsKKworCQlsaXN0LT5jaGFubmVsc1tpXS5mcmVxID0gZnJlcTsKKwkJbGlzdC0+Y2hhbm5lbHNbaV0uZGF0YSA9IGRhdGE7CisJCWxpc3QtPmNoYW5uZWxzW2ldLmJhbmQgPSBiYW5kOworCQlsaXN0LT5jaGFubmVsc1tpXS5pbmRleCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChmcmVxKTsKKwkJLyogVE9ETzogcGFyc2Ugb3V0cHV0X2xpbWl0IGFuZCBmaWxsIG1heF9wb3dlciAqLworCX0KK30KKworc3RhdGljIGludCBwNTRfZ2VuZXJhdGVfY2hhbm5lbF9saXN0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHA1NF9jaGFubmVsX2xpc3QgKmxpc3Q7CisJdW5zaWduZWQgaW50IGksIGosIG1heF9jaGFubmVsX251bTsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwl1MTYgZnJlcTsKKworCWlmICgocHJpdi0+aXFfYXV0b2NhbF9sZW4gIT0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcykgfHwKKwkgICAgKHByaXYtPmlxX2F1dG9jYWxfbGVuICE9IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcykpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVFUFJPTSBpcyBkYW1hZ2VkLi4uIHlvdSBtYXkgbm90IGJlIGFibGUiCisJCQkJInRvIHVzZSBhbGwgY2hhbm5lbHMgd2l0aCB0aGlzIGRldmljZS5cbiIsCisJCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisKKwltYXhfY2hhbm5lbF9udW0gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcywKKwkJCQlwcml2LT5pcV9hdXRvY2FsX2xlbik7CisJbWF4X2NoYW5uZWxfbnVtID0gbWF4X3QodW5zaWduZWQgaW50LCBtYXhfY2hhbm5lbF9udW0sCisJCQkJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyk7CisKKwlsaXN0ID0ga3phbGxvYyhzaXplb2YoKmxpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxpc3QpCisJCWdvdG8gZnJlZTsKKworCWxpc3QtPm1heF9lbnRyaWVzID0gbWF4X2NoYW5uZWxfbnVtOworCWxpc3QtPmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5KSAqCisJCQkJIG1heF9jaGFubmVsX251bSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsaXN0LT5jaGFubmVscykKKwkJZ290byBmcmVlOworCisJZm9yIChpID0gMDsgaSA8IG1heF9jaGFubmVsX251bTsgaSsrKSB7CisJCWlmIChpIDwgcHJpdi0+aXFfYXV0b2NhbF9sZW4pIHsKKwkJCWZyZXEgPSBsZTE2X3RvX2NwdShwcml2LT5pcV9hdXRvY2FsW2ldLmZyZXEpOworCQkJcDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NBTCk7CisJCX0KKworCQlpZiAoaSA8IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcykgeworCQkJZnJlcSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopIChpICoKKwkJCQkJICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSArCisJCQkJCSAgICBwcml2LT5vdXRwdXRfbGltaXQtPm9mZnNldCArCisJCQkJCSAgICBwcml2LT5vdXRwdXRfbGltaXQtPmRhdGEpKTsKKworCQkJcDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0xJTUlUKTsKKwkJfQorCisJCWlmIChpIDwgcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcykgeworCQkJZnJlcSA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopIChpICoKKwkJCQkJICAgIHByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgKworCQkJCQkgICAgcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0ICsKKwkJCQkJICAgIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpKTsKKworCQkJcDU0X3VwZGF0ZV9jaGFubmVsX3BhcmFtKGxpc3QsIGZyZXEsIENIQU5fSEFTX0NVUlZFKTsKKwkJfQorCX0KKworCS8qIHNvcnQgdGhlIGxpc3QgYnkgdGhlIGNoYW5uZWwgaW5kZXggKi8KKwlzb3J0KGxpc3QtPmNoYW5uZWxzLCBsaXN0LT5lbnRyaWVzLCBzaXplb2Yoc3RydWN0IHA1NF9jaGFubmVsX2VudHJ5KSwKKwkgICAgIHA1NF9jb21wYXJlX2NoYW5uZWxzLCBOVUxMKTsKKworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgaSsrKSB7CisJCWlmIChsaXN0LT5iYW5kX2NoYW5uZWxfbnVtW2ldKSB7CisJCQlyZXQgPSBwNTRfZ2VuZXJhdGVfYmFuZChkZXYsIGxpc3QsIGkpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGZyZWU7CisKKwkJCWorKzsKKwkJfQorCX0KKwlpZiAoaiA9PSAwKSB7CisJCS8qIG5vIHVzZWFibGUgYmFuZCBhdmFpbGFibGUuICovCisJCXJldCA9IC1FSU5WQUw7CisJfQorCitmcmVlOgorCWlmIChsaXN0KSB7CisJCWtmcmVlKGxpc3QtPmNoYW5uZWxzKTsKKwkJa2ZyZWUobGlzdCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwNTRfY29udmVydF9yZXYwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSAgICBzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSAqZHN0OworCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MCAqc3JjOworCXNpemVfdCBjZF9sZW4gPSBzaXplb2YoKmN1cnZlX2RhdGEpICsKKwkJKGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCpzaXplb2YoKmRzdCkgKyAyKSAqCisJCSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl2b2lkICpzb3VyY2UsICp0YXJnZXQ7CisKKwlwcml2LT5jdXJ2ZV9kYXRhID0ga21hbGxvYyhzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpICsgY2RfbGVuLAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzID0gY3VydmVfZGF0YS0+Y2hhbm5lbHM7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSA9IHNpemVvZihfX2xlMTYpICsKKwkJc2l6ZW9mKCpkc3QpICogY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOworCXByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSwgZGF0YSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+bGVuID0gY2RfbGVuOworCW1lbWNweShwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhLCBjdXJ2ZV9kYXRhLCBzaXplb2YoKmN1cnZlX2RhdGEpKTsKKwlzb3VyY2UgPSBjdXJ2ZV9kYXRhLT5kYXRhOworCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOworCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CisJCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKKwkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOworCQkqKChfX2xlMTYgKil0YXJnZXQpID0gKmZyZXE7CisJCXRhcmdldCArPSBzaXplb2YoX19sZTE2KTsKKwkJZm9yIChqID0gMDsgaiA8IGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsgaisrKSB7CisJCQlkc3QgPSB0YXJnZXQ7CisJCQlzcmMgPSBzb3VyY2U7CisKKwkJCWRzdC0+cmZfcG93ZXIgPSBzcmMtPnJmX3Bvd2VyOworCQkJZHN0LT5wYV9kZXRlY3RvciA9IHNyYy0+cGFfZGV0ZWN0b3I7CisJCQlkc3QtPmRhdGFfNjRxYW0gPSBzcmMtPnBjdjsKKwkJCS8qICJpbnZlbnQiIHRoZSBwb2ludHMgZm9yIHRoZSBvdGhlciBtb2R1bGF0aW9ucyAqLworI2RlZmluZSBTVUIoeCwgeSkgKHU4KSgoKHgpIC0gKHkpKSA+ICh4KSA/IDAgOiAoeCkgLSAoeSkpCisJCQlkc3QtPmRhdGFfMTZxYW0gPSBTVUIoc3JjLT5wY3YsIDEyKTsKKwkJCWRzdC0+ZGF0YV9xcHNrID0gU1VCKGRzdC0+ZGF0YV8xNnFhbSwgMTIpOworCQkJZHN0LT5kYXRhX2Jwc2sgPSBTVUIoZHN0LT5kYXRhX3Fwc2ssIDEyKTsKKwkJCWRzdC0+ZGF0YV9iYXJrZXIgPSBTVUIoZHN0LT5kYXRhX2Jwc2ssIDE0KTsKKyN1bmRlZiBTVUIKKwkJCXRhcmdldCArPSBzaXplb2YoKmRzdCk7CisJCQlzb3VyY2UgKz0gc2l6ZW9mKCpzcmMpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgKmRzdDsKKwlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEgKnNyYzsKKwlzaXplX3QgY2RfbGVuID0gc2l6ZW9mKCpjdXJ2ZV9kYXRhKSArCisJCShjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwqc2l6ZW9mKCpkc3QpICsgMikgKgorCQkgY3VydmVfZGF0YS0+Y2hhbm5lbHM7CisJdW5zaWduZWQgaW50IGksIGo7CisJdm9pZCAqc291cmNlLCAqdGFyZ2V0OworCisJcHJpdi0+Y3VydmVfZGF0YSA9IGt6YWxsb2MoY2RfbGVuICsgc2l6ZW9mKCpwcml2LT5jdXJ2ZV9kYXRhKSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCisJCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOworCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKKwltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CisJc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKKwl0YXJnZXQgPSAoKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhKS0+ZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgeworCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7CisJCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKKwkJKigoX19sZTE2ICopdGFyZ2V0KSA9ICpmcmVxOworCQl0YXJnZXQgKz0gc2l6ZW9mKF9fbGUxNik7CisJCWZvciAoaiA9IDA7IGogPCBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7IGorKykgeworCQkJbWVtY3B5KHRhcmdldCwgc291cmNlLCBzaXplb2YoKnNyYykpOworCisJCQl0YXJnZXQgKz0gc2l6ZW9mKCpkc3QpOworCQkJc291cmNlICs9IHNpemVvZigqc3JjKTsKKwkJfQorCQlzb3VyY2UrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnA1NF9yZl9jaGlwc1tdID0geyAiSU5WQUxJRC0wIiwgIkR1ZXR0ZTMiLCAiRHVldHRlMiIsCisJIkZyaXNiZWUiLCAiWGJvdyIsICJMb25nYm93IiwgIklOVkFMSUQtNiIsICJJTlZBTElELTciIH07CisKK3N0YXRpYyB2b2lkIHA1NF9wYXJzZV9yc3NpY2FsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZGF0YSwgaW50IGxlbiwKKwkJCSAgICAgdTE2IHR5cGUpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisJaW50IG9mZnNldCA9ICh0eXBlID09IFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0VYVEVOREVEKSA/IDIgOiAwOworCWludCBlbnRyeV9zaXplID0gc2l6ZW9mKHN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkpICsgb2Zmc2V0OworCWludCBudW1fZW50cmllcyA9ICh0eXBlID09IFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OKSA/IDEgOiAyOworCWludCBpOworCisJaWYgKGxlbiAhPSAoZW50cnlfc2l6ZSAqIG51bV9lbnRyaWVzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIHJzc2kgY2FsaWJyYXRpb24gZGF0YSBwYWNraW5nICIKKwkJCQkgIiB0eXBlOigleCkgbGVuOiVkLlxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIHR5cGUsIGxlbik7CisKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoInJzc2ljYWw6IiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCQkgICAgIGRhdGEsIGxlbik7CisKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlLlxuIiwKKwkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyBpKyspIHsKKwkJc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqY2FsID0gZGF0YSArCisJCQkJCQkgKG9mZnNldCArIGkgKiBlbnRyeV9zaXplKTsKKwkJcHJpdi0+cnNzaWNhbF9kYltpXS5tdWwgPSAoczE2KSBsZTE2X3RvX2NwdShjYWwtPm11bCk7CisJCXByaXYtPnJzc2ljYWxfZGJbaV0uYWRkID0gKHMxNikgbGUxNl90b19jcHUoY2FsLT5hZGQpOworCX0KK30KKworc3RhdGljIHZvaWQgcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcGRhX2NvdW50cnkgKmNvdW50cnk7CisKKwlpZiAobGVuICE9IHNpemVvZigqY291bnRyeSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZm91bmQgcG9zc2libGUgaW52YWxpZCBkZWZhdWx0IGNvdW50cnkgIgorCQkJCSJlZXByb20gZW50cnkuIChlbnRyeSBzaXplOiAlZClcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBsZW4pOworCisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJjb3VudHJ5OiIsIERVTVBfUFJFRklYX05PTkUsCisJCQkJICAgICBkYXRhLCBsZW4pOworCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZS5cbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJcmV0dXJuOworCX0KKworCWNvdW50cnkgPSAoc3RydWN0IHBkYV9jb3VudHJ5ICopIGRhdGE7CisJaWYgKGNvdW50cnktPmZsYWdzID09IFBEUl9DT1VOVFJZX0NFUlRfQ09ERV9QU0VVRE8pCisJCXJlZ3VsYXRvcnlfaGludChkZXYtPndpcGh5LCBjb3VudHJ5LT5hbHBoYTIpOworCWVsc2UgeworCQkvKiBUT0RPOgorCQkgKiB3cml0ZSBhIHNoYXJlZC9jb21tb24gZnVuY3Rpb24gdGhhdCBjb252ZXJ0cworCQkgKiAiUmVndWxhdG9yeSBkb21haW4gY29kZXMiICg4MDIuMTEtMjAwNyAxNC44LjIuMikKKwkJICogaW50byBJU08vSUVDIDMxNjYtMSBhbHBoYTIgZm9yIHJlZ3VsYXRvcnlfaGludC4KKwkJICovCisJfQorfQorCitzdGF0aWMgaW50IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgdTggKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAobGVuIDwgMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gb3V0cHV0IHBvd2VyIGRiIHJldmlzaW9uOiV4XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgZGF0YVswXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgyICsgZGF0YVsxXSAqIHNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSA+IGxlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5vdXRwdXRfbGltaXQgPSBrbWFsbG9jKGRhdGFbMV0gKgorCQlzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkgKworCQlzaXplb2YoKnByaXYtPm91dHB1dF9saW1pdCksIEdGUF9LRVJORUwpOworCisJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+b3V0cHV0X2xpbWl0LT5vZmZzZXQgPSAwOworCXByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcyA9IGRhdGFbMV07CisJcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplID0KKwkJc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpOworCXByaXYtPm91dHB1dF9saW1pdC0+bGVuID0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplICoKKwkJCQkgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcyArCisJCQkJICBwcml2LT5vdXRwdXRfbGltaXQtPm9mZnNldDsKKworCW1lbWNweShwcml2LT5vdXRwdXRfbGltaXQtPmRhdGEsICZkYXRhWzJdLAorCSAgICAgICBkYXRhWzFdICogc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKnA1NF9jb252ZXJ0X2RiKHN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnNyYywKKwkJCQkJICAgICAgIHNpemVfdCB0b3RhbF9sZW4pCit7CisJc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgKmRzdDsKKwlzaXplX3QgcGF5bG9hZF9sZW4sIGVudHJpZXMsIGVudHJ5X3NpemUsIG9mZnNldDsKKworCXBheWxvYWRfbGVuID0gbGUxNl90b19jcHUoc3JjLT5sZW4pOworCWVudHJpZXMgPSBsZTE2X3RvX2NwdShzcmMtPmVudHJpZXMpOworCWVudHJ5X3NpemUgPSBsZTE2X3RvX2NwdShzcmMtPmVudHJ5X3NpemUpOworCW9mZnNldCA9IGxlMTZfdG9fY3B1KHNyYy0+b2Zmc2V0KTsKKwlpZiAoKChlbnRyaWVzICogZW50cnlfc2l6ZSArIG9mZnNldCkgIT0gcGF5bG9hZF9sZW4pIHx8CisJICAgICAocGF5bG9hZF9sZW4gKyBzaXplb2YoKnNyYykgIT0gdG90YWxfbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkc3QgPSBrbWFsbG9jKHNpemVvZigqZHN0KSArIHBheWxvYWRfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkc3QtPmVudHJpZXMgPSBlbnRyaWVzOworCWRzdC0+ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemU7CisJZHN0LT5vZmZzZXQgPSBvZmZzZXQ7CisJZHN0LT5sZW4gPSBwYXlsb2FkX2xlbjsKKworCW1lbWNweShkc3QtPmRhdGEsIHNyYy0+ZGF0YSwgcGF5bG9hZF9sZW4pOworCXJldHVybiBkc3Q7Cit9CisKK2ludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBlZXByb21fcGRhX3dyYXAgKndyYXA7CisJc3RydWN0IHBkYV9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgaW50IGRhdGFfbGVuLCBlbnRyeV9sZW47CisJdm9pZCAqdG1wOworCWludCBlcnI7CisJdTggKmVuZCA9ICh1OCAqKWVlcHJvbSArIGxlbjsKKwl1MTYgc3ludGggPSAwOworCisJd3JhcCA9IChzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICopIGVlcHJvbTsKKwllbnRyeSA9ICh2b2lkICopd3JhcC0+ZGF0YSArIGxlMTZfdG9fY3B1KHdyYXAtPmxlbik7CisKKwkvKiB2ZXJpZnkgdGhhdCBhdCBsZWFzdCB0aGUgZW50cnkgbGVuZ3RoL2NvZGUgZml0cyAqLworCXdoaWxlICgodTggKillbnRyeSA8PSBlbmQgLSBzaXplb2YoKmVudHJ5KSkgeworCQllbnRyeV9sZW4gPSBsZTE2X3RvX2NwdShlbnRyeS0+bGVuKTsKKwkJZGF0YV9sZW4gPSAoKGVudHJ5X2xlbiAtIDEpIDw8IDEpOworCisJCS8qIGFib3J0IGlmIGVudHJ5IGV4Y2VlZHMgd2hvbGUgc3RydWN0dXJlICovCisJCWlmICgodTggKillbnRyeSArIHNpemVvZigqZW50cnkpICsgZGF0YV9sZW4gPiBlbmQpCisJCQlicmVhazsKKworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSkgeworCQljYXNlIFBEUl9NQUNfQUREUkVTUzoKKwkJCWlmIChkYXRhX2xlbiAhPSBFVEhfQUxFTikKKwkJCQlicmVhazsKKwkJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgZW50cnktPmRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTOgorCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCkKKwkJCQlicmVhazsKKwkJCWVyciA9IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoZGV2LCBlbnRyeS0+ZGF0YSwKKwkJCQkJCQlkYXRhX2xlbik7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyOworCQkJYnJlYWs7CisJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBOiB7CisJCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQorCQkJCShzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKillbnRyeS0+ZGF0YTsKKwkJCWlmIChkYXRhX2xlbiA8IHNpemVvZigqY3VydmVfZGF0YSkpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXJyOworCQkJfQorCisJCQlzd2l0Y2ggKGN1cnZlX2RhdGEtPmNhbF9tZXRob2RfcmV2KSB7CisJCQljYXNlIDA6CisJCQkJZXJyID0gcDU0X2NvbnZlcnRfcmV2MChkZXYsIGN1cnZlX2RhdGEpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBjdXJ2ZSBkYXRhICIKKwkJCQkJCSJyZXZpc2lvbiAlZFxuIiwKKwkJCQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSksCisJCQkJCQljdXJ2ZV9kYXRhLT5jYWxfbWV0aG9kX3Jldik7CisJCQkJZXJyID0gLUVOT0RFVjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OOgorCQkJcHJpdi0+aXFfYXV0b2NhbCA9IGttYWxsb2MoZGF0YV9sZW4sIEdGUF9LRVJORUwpOworCQkJaWYgKCFwcml2LT5pcV9hdXRvY2FsKSB7CisJCQkJZXJyID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKworCQkJbWVtY3B5KHByaXYtPmlxX2F1dG9jYWwsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CisJCQlwcml2LT5pcV9hdXRvY2FsX2xlbiA9IGRhdGFfbGVuIC8gc2l6ZW9mKHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSk7CisJCQlicmVhazsKKwkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgorCQkJcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CisJCQlicmVhazsKKwkJY2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6CisJCQl0bXAgPSBlbnRyeS0+ZGF0YTsKKwkJCXdoaWxlICgodTggKil0bXAgPCBlbnRyeS0+ZGF0YSArIGRhdGFfbGVuKSB7CisJCQkJc3RydWN0IGV4cF9pZiAqZXhwX2lmID0gdG1wOworCQkJCWlmIChleHBfaWYtPmlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0lTTDM5MDAwKSkKKwkJCQkJc3ludGggPSBsZTE2X3RvX2NwdShleHBfaWYtPnZhcmlhbnQpOworCQkJCXRtcCArPSBzaXplb2YoKmV4cF9pZik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQRFJfSEFSRFdBUkVfUExBVEZPUk1fQ09NUE9ORU5UX0lEOgorCQkJaWYgKGRhdGFfbGVuIDwgMikKKwkJCQlicmVhazsKKwkJCXByaXYtPnZlcnNpb24gPSAqKHU4ICopKGVudHJ5LT5kYXRhICsgMSk7CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTjoKKwkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9EVUFMX0JBTkQ6CisJCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQ6CisJCQlwNTRfcGFyc2VfcnNzaWNhbChkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbiwKKwkJCQkJICBsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpOworCQkJYnJlYWs7CisJCWNhc2UgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fQ1VTVE9NOiB7CisJCQlfX2xlMTYgKnNyYyA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJczE2ICpkc3QgPSAodm9pZCAqKSAmcHJpdi0+cnNzaWNhbF9kYjsKKwkJCWludCBpOworCisJCQlpZiAoZGF0YV9sZW4gIT0gc2l6ZW9mKHByaXYtPnJzc2ljYWxfZGIpKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocHJpdi0+cnNzaWNhbF9kYikgLworCQkJCQlzaXplb2YoKnNyYyk7IGkrKykKKwkJCQkqKGRzdCsrKSA9IChzMTYpIGxlMTZfdG9fY3B1KCooc3JjKyspKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT006IHsKKwkJCXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnBkYSA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCB8fCBkYXRhX2xlbiA8IHNpemVvZigqcGRhKSkKKwkJCQlicmVhazsKKwkJCXByaXYtPm91dHB1dF9saW1pdCA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBX0NVU1RPTTogeworCQkJc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqcGRhID0gKHZvaWQgKikgZW50cnktPmRhdGE7CisJCQlpZiAocHJpdi0+Y3VydmVfZGF0YSB8fCBkYXRhX2xlbiA8IHNpemVvZigqcGRhKSkKKwkJCQlicmVhazsKKwkJCXByaXYtPmN1cnZlX2RhdGEgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9FTkQ6CisJCQkvKiBtYWtlIGl0IG92ZXJydW4gKi8KKwkJCWVudHJ5X2xlbiA9IGxlbjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQllbnRyeSA9ICh2b2lkICopZW50cnkgKyAoZW50cnlfbGVuICsgMSkqMjsKKwl9CisKKwlpZiAoIXN5bnRoIHx8ICFwcml2LT5pcV9hdXRvY2FsIHx8ICFwcml2LT5vdXRwdXRfbGltaXQgfHwKKwkgICAgIXByaXYtPmN1cnZlX2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IGFsbCByZXF1aXJlZCBlbnRyaWVzIGZvdW5kIGluIGVlcHJvbSFcbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJZXJyID0gcDU0X2dlbmVyYXRlX2NoYW5uZWxfbGlzdHMoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCXByaXYtPnJ4aHcgPSBzeW50aCAmIFBEUl9TWU5USF9GUk9OVEVORF9NQVNLOworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9YQk9XKQorCQlwNTRfaW5pdF94Ym93X3N5bnRoKHByaXYpOworCWlmICghKHN5bnRoICYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpCisJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCXByaXYtPmJhbmRfdGFibGVbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJaWYgKCEoc3ludGggJiBQRFJfU1lOVEhfNV9HSFpfRElTQUJMRUQpKQorCQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQlwcml2LT5iYW5kX3RhYmxlW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCWlmICgoc3ludGggJiBQRFJfU1lOVEhfUlhfRElWX01BU0spID09IFBEUl9TWU5USF9SWF9ESVZfU1VQUE9SVEVEKQorCQlwcml2LT5yeF9kaXZlcnNpdHlfbWFzayA9IDM7CisJaWYgKChzeW50aCAmIFBEUl9TWU5USF9UWF9ESVZfTUFTSykgPT0gUERSX1NZTlRIX1RYX0RJVl9TVVBQT1JURUQpCisJCXByaXYtPnR4X2RpdmVyc2l0eV9tYXNrID0gMzsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPndpcGh5LT5wZXJtX2FkZHIpKSB7CisJCXU4IHBlcm1fYWRkcltFVEhfQUxFTl07CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEludmFsaWQgaHdhZGRyISBVc2luZyByYW5kb21seSBnZW5lcmF0ZWQgTUFDIGFkZHJcbiIsCisJCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwkJcmFuZG9tX2V0aGVyX2FkZHIocGVybV9hZGRyKTsKKwkJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoZGV2LCBwZXJtX2FkZHIpOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBod2FkZHIgJXBNLCBNQUM6aXNsMzglMDJ4IFJGOiVzXG4iLAorCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAlkZXYtPndpcGh5LT5wZXJtX2FkZHIsIHByaXYtPnZlcnNpb24sCisJCXA1NF9yZl9jaGlwc1twcml2LT5yeGh3XSk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWtmcmVlKHByaXYtPmlxX2F1dG9jYWwpOworCWtmcmVlKHByaXYtPm91dHB1dF9saW1pdCk7CisJa2ZyZWUocHJpdi0+Y3VydmVfZGF0YSk7CisJcHJpdi0+aXFfYXV0b2NhbCA9IE5VTEw7CisJcHJpdi0+b3V0cHV0X2xpbWl0ID0gTlVMTDsKKwlwcml2LT5jdXJ2ZV9kYXRhID0gTlVMTDsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IGVlcHJvbSBwYXJzZSBmYWlsZWQhXG4iLAorCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2VlcHJvbSk7CisKK2ludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXNpemVfdCBlZXByb21fc2l6ZSA9IDB4MjAyMCwgb2Zmc2V0ID0gMCwgYmxvY2tzaXplLCBtYXhibG9ja3NpemU7CisJaW50IHJldCA9IC1FTk9NRU07CisJdm9pZCAqZWVwcm9tOworCisJbWF4YmxvY2tzaXplID0gRUVQUk9NX1JFQURCQUNLX0xFTjsKKwlpZiAocHJpdi0+ZndfdmFyID49IDB4NTA5KQorCQltYXhibG9ja3NpemUgLT0gMHhjOworCWVsc2UKKwkJbWF4YmxvY2tzaXplIC09IDB4NDsKKworCWVlcHJvbSA9IGt6YWxsb2MoZWVwcm9tX3NpemUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZWVwcm9tKSkKKwkJZ290byBmcmVlOworCisJd2hpbGUgKGVlcHJvbV9zaXplKSB7CisJCWJsb2Nrc2l6ZSA9IG1pbihlZXByb21fc2l6ZSwgbWF4YmxvY2tzaXplKTsKKwkJcmV0ID0gcDU0X2Rvd25sb2FkX2VlcHJvbShwcml2LCAodm9pZCAqKSAoZWVwcm9tICsgb2Zmc2V0KSwKKwkJCQkJICBvZmZzZXQsIGJsb2Nrc2l6ZSk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBmcmVlOworCisJCW9mZnNldCArPSBibG9ja3NpemU7CisJCWVlcHJvbV9zaXplIC09IGJsb2Nrc2l6ZTsKKwl9CisKKwlyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgZWVwcm9tLCBvZmZzZXQpOworZnJlZToKKwlrZnJlZShlZXByb20pOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfcmVhZF9lZXByb20pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTFhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBlZXByb20gc3BlY2lmaWMgZGVmaW5pdGlvbnMgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIEJhc2VkIG9uOgorICogLSB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKKyAqICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KKyAqCisgKiAtIExNQUMgQVBJIGludGVyZmFjZSBoZWFkZXIgZmlsZSBmb3IgU1RMQzQ1NjAgKGxtYWNfbG9uZ2Jvdy5oKQorICogICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29uZXhhbnQgU3lzdGVtcywgSW5jLgorICoKKyAqIC0gaXNsbXZjIGRyaXZlcgorICogICBDb3B5cmlnaHQgKEMpIDIwMDEgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBFRVBST01fSAorI2RlZmluZSBFRVBST01fSAorCisvKiBQREEgZGVmaW5lcyBhcmUgQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uICh0YWtlbiBmcm9tIGlzbHNtX3BkYS5oKSAqLworCitzdHJ1Y3QgcGRhX2VudHJ5IHsKKwlfX2xlMTYgbGVuOwkvKiBpbmNsdWRlcyBib3RoIGNvZGUgYW5kIGRhdGEgKi8KKwlfX2xlMTYgY29kZTsKKwl1OCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGVlcHJvbV9wZGFfd3JhcCB7CisJX19sZTMyIG1hZ2ljOworCV9fbGUxNiBwYWQ7CisJX19sZTE2IGxlbjsKKwlfX2xlMzIgYXJtX29wY29kZTsKKwl1OCBkYXRhWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHsKKwlfX2xlMTYgaXFfcGFyYW1bNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcGRhX2lxX2F1dG9jYWxfZW50cnkgeworCV9fbGUxNiBmcmVxOworCXN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSBwYXJhbXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0IHsKKwlfX2xlMTYgZnJlcTsKKwl1OCB2YWxfYnBzazsKKwl1OCB2YWxfcXBzazsKKwl1OCB2YWxfMTZxYW07CisJdTggdmFsXzY0cWFtOworCXU4IHJhdGVfc2V0X21hc2s7CisJdTggcmF0ZV9zZXRfc2l6ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MCB7CisJdTggcmZfcG93ZXI7CisJdTggcGFfZGV0ZWN0b3I7CisJdTggcGN2OworfSBfX3BhY2tlZDsKKworc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxIHsKKwl1OCByZl9wb3dlcjsKKwl1OCBwYV9kZXRlY3RvcjsKKwl1OCBkYXRhX2JhcmtlcjsKKwl1OCBkYXRhX2Jwc2s7CisJdTggZGF0YV9xcHNrOworCXU4IGRhdGFfMTZxYW07CisJdTggZGF0YV82NHFhbTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSB7CisJdTggY2FsX21ldGhvZF9yZXY7CisJdTggY2hhbm5lbHM7CisJdTggcG9pbnRzX3Blcl9jaGFubmVsOworCXU4IHBhZGRpbmc7CisJdTggZGF0YVswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgeworCV9fbGUxNiBtdWw7CisJX19sZTE2IGFkZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfY291bnRyeSB7CisJdTggcmVnZG9tYWluOworCXU4IGFscGhhMlsyXTsKKwl1OCBmbGFnczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwZGFfYW50ZW5uYV9nYWluIHsKKwlzdHJ1Y3QgeworCQl1OCBnYWluXzVHSHo7CS8qIDAuMjUgZEJpIHVuaXRzICovCisJCXU4IGdhaW5fMkdIejsJLyogMC4yNSBkQmkgdW5pdHMgKi8KKwl9IF9fcGFja2VkIGFudGVubmFbMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyIHsKKwlfX2xlMTYgZW50cmllczsKKwlfX2xlMTYgZW50cnlfc2l6ZTsKKwlfX2xlMTYgb2Zmc2V0OworCV9fbGUxNiBsZW47CisJdTggZGF0YVswXTsKK30gX19wYWNrZWQ7CisKKy8qCisgKiB0aGlzIGRlZmluZXMgdGhlIFBEUiBjb2RlcyB1c2VkIHRvIGJ1aWxkIFBEQXMgYXMgZGVmaW5lZCBpbiBkb2N1bWVudAorICogbnVtYmVyIDU1MzE1NS4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWlycm9ycyB2ZXJzaW9uIDEuMSBvZiB0aGUKKyAqIGRvY3VtZW50IGFuZCBsaXN0cyBvbmx5IFBEUnMgc3VwcG9ydGVkIGJ5IHRoZSBBUk0gcGxhdGZvcm0uCisgKi8KKworLyogY29tbW9uIGFuZCBjaG9pY2UgcmFuZ2UgKDB4MDAwMCAtIDB4MGZmZikgKi8KKyNkZWZpbmUgUERSX0VORAkJCQkJMHgwMDAwCisjZGVmaW5lIFBEUl9NQU5VRkFDVFVSSU5HX1BBUlRfTlVNQkVSCQkweDAwMDEKKyNkZWZpbmUgUERSX1BEQV9WRVJTSU9OCQkJCTB4MDAwMgorI2RlZmluZSBQRFJfTklDX1NFUklBTF9OVU1CRVIJCQkweDAwMDMKKyNkZWZpbmUgUERSX05JQ19SQU1fU0laRQkJCTB4MDAwNQorI2RlZmluZSBQRFJfUkZNT0RFTV9TVVBfUkFOR0UJCQkweDAwMDYKKyNkZWZpbmUgUERSX1BSSVNNX01BQ19TVVBfUkFOR0UJCQkweDAwMDcKKyNkZWZpbmUgUERSX05JQ19JRAkJCQkweDAwMDgKKworI2RlZmluZSBQRFJfTUFDX0FERFJFU1MJCQkJMHgwMTAxCisjZGVmaW5lIFBEUl9SRUdVTEFUT1JZX0RPTUFJTl9MSVNUCQkweDAxMDMgLyogb2Jzb2xldGUgKi8KKyNkZWZpbmUgUERSX0FMTE9XRURfQ0hBTl9TRVQJCQkweDAxMDQKKyNkZWZpbmUgUERSX0RFRkFVTFRfQ0hBTgkJCTB4MDEwNQorI2RlZmluZSBQRFJfVEVNUEVSQVRVUkVfVFlQRQkJCTB4MDEwNworCisjZGVmaW5lIFBEUl9JRlJfU0VUVElORwkJCQkweDAyMDAKKyNkZWZpbmUgUERSX1JGUl9TRVRUSU5HCQkJCTB4MDIwMQorI2RlZmluZSBQRFJfMzg2MV9CQVNFTElORV9SRUdfU0VUVElOR1MJCTB4MDIwMgorI2RlZmluZSBQRFJfMzg2MV9TSEFET1dfUkVHX1NFVFRJTkdTCQkweDAyMDMKKyNkZWZpbmUgUERSXzM4NjFfSUZSRl9SRUdfU0VUVElOR1MJCTB4MDIwNAorCisjZGVmaW5lIFBEUl8zODYxX0NIQU5fQ0FMSUJfU0VUX1BPSU5UUwkJMHgwMzAwCisjZGVmaW5lIFBEUl8zODYxX0NIQU5fQ0FMSUJfSU5URUdSQVRPUgkJMHgwMzAxCisKKyNkZWZpbmUgUERSXzM4NDJfUFJJU01fSUlfTklDX0NPTkZJRwkJMHgwNDAwCisjZGVmaW5lIFBEUl9QUklTTV9VU0JfSUQJCQkweDA0MDEKKyNkZWZpbmUgUERSX1BSSVNNX1BDSV9JRAkJCTB4MDQwMgorI2RlZmluZSBQRFJfUFJJU01fUENJX0lGX0NPTkZJRwkJCTB4MDQwMworI2RlZmluZSBQRFJfUFJJU01fUENJX1BNX0NPTkZJRwkJCTB4MDQwNAorCisjZGVmaW5lIFBEUl8zODYxX01GX1RFU1RfQ0hBTl9TRVRfUE9JTlRTCTB4MDkwMAorI2RlZmluZSBQRFJfMzg2MV9NRl9URVNUX0NIQU5fSU5URUdSQVRPUlMJMHgwOTAxCisKKy8qIEFSTSByYW5nZSAoMHgxMDAwIC0gMHgxZmZmKSAqLworI2RlZmluZSBQRFJfQ09VTlRSWV9JTkZPUk1BVElPTgkJCTB4MTAwMCAvKiBvYnNvbGV0ZSAqLworI2RlZmluZSBQRFJfSU5URVJGQUNFX0xJU1QJCQkweDEwMDEKKyNkZWZpbmUgUERSX0hBUkRXQVJFX1BMQVRGT1JNX0NPTVBPTkVOVF9JRAkweDEwMDIKKyNkZWZpbmUgUERSX09FTV9OQU1FCQkJCTB4MTAwMworI2RlZmluZSBQRFJfUFJPRFVDVF9OQU1FCQkJMHgxMDA0CisjZGVmaW5lIFBEUl9VVEY4X09FTV9OQU1FCQkJMHgxMDA1CisjZGVmaW5lIFBEUl9VVEY4X1BST0RVQ1RfTkFNRQkJCTB4MTAwNgorI2RlZmluZSBQRFJfQ09VTlRSWV9MSVNUCQkJMHgxMDA3CisjZGVmaW5lIFBEUl9ERUZBVUxUX0NPVU5UUlkJCQkweDEwMDgKKworI2RlZmluZSBQRFJfQU5URU5OQV9HQUlOCQkJMHgxMTAwCisKKyNkZWZpbmUgUERSX1BSSVNNX0lORElHT19QQV9DQUxJQlJBVElPTl9EQVRBCTB4MTkwMQorI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTgkJMHgxOTAyCisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUwkweDE5MDMKKyNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBCQkweDE5MDQKKyNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRFVBTF9CQU5ECTB4MTkwNQorI2RlZmluZSBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OCQkweDE5MDYKKyNkZWZpbmUgUERSX1JFR1VMQVRPUllfUE9XRVJfTElNSVRTCQkweDE5MDcKKyNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQJMHgxOTA4CisjZGVmaW5lIFBEUl9SQURJQVRFRF9UUkFOU01JU1NJT05fQ09SUkVDVElPTgkweDE5MDkKKyNkZWZpbmUgUERSX1BSSVNNX1RYX0lRX0NBTElCUkFUSU9OCQkweDE5MGEKKworLyogcmVzZXJ2ZWQgcmFuZ2UgKDB4MjAwMCAtIDB4N2ZmZikgKi8KKworLyogY3VzdG9tZXIgcmFuZ2UgKDB4ODAwMCAtIDB4ZmZmZikgKi8KKyNkZWZpbmUgUERSX0JBU0VCQU5EX1JFR0lTVEVSUwkJCQkweDgwMDAKKyNkZWZpbmUgUERSX1BFUl9DSEFOTkVMX0JBU0VCQU5EX1JFR0lTVEVSUwkJMHg4MDAxCisKKy8qIHVzZWQgYnkgb3VyIG1vZGlmaWNhdGVkIGVlcHJvbSBpbWFnZSAqLworI2RlZmluZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT00JCTB4REVBRAorI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NCTB4QkVFRgorI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NCQkweEIwNUQKKworLyogSW50ZXJmYWNlIERlZmluaXRpb25zICovCisjZGVmaW5lIFBEUl9JTlRFUkZBQ0VfUk9MRV9TRVJWRVIJMHgwMDAwCisjZGVmaW5lIFBEUl9JTlRFUkZBQ0VfUk9MRV9DTElFTlQJMHgwMDAxCisKKy8qIFBEUiBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBjb3VudHJ5ICYgY291bnRyeSBsaXN0ICovCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERQkJMHg4MAorI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0NPREVfUkVBTAkweDAwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERV9QU0VVRE8JMHg4MAorI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0JBTkQJCTB4NDAKKyNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9CQU5EXzJHSFoJMHgwMAorI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0JBTkRfNUdIWgkweDQwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SCQkweDMwCisjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SX0JPVEgJMHgwMAorI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lPRE9PUl9JTkRPT1IJMHgyMAorI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lPRE9PUl9PVVRET09SCTB4MzAKKyNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JTkRFWAkJMHgwZgorCisvKiBTcGVjaWZpYyBMTUFDIEZXL0hXIHZhcmlhbnQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX01BU0sJCTB4MDAwNworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMwkweDAwMDEKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0RVRVRURTIJMHgwMDAyCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9GUklTQkVFCTB4MDAwMworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVwkJMHgwMDA0CisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XCTB4MDAwNQorI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX01BU0sJCTB4MDAxOAorI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1BBX0RFVEVDVE9SCTB4MDAwMAorI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX0RJU0FCTEVECTB4MDAwOAorI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1pJRgkJMHgwMDEwCisjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX01BU0sJMHgwMDIwCisjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX0VOQUJMRUQJMHgwMDIwCisjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfTUFTSwkJMHgwMDQwCisjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfRElTQUJMRUQJMHgwMDQwCisjZGVmaW5lIFBEUl9TWU5USF81X0dIWl9NQVNLCQkweDAwODAKKyNkZWZpbmUgUERSX1NZTlRIXzVfR0haX0RJU0FCTEVECTB4MDA4MAorI2RlZmluZSBQRFJfU1lOVEhfUlhfRElWX01BU0sJCTB4MDEwMAorI2RlZmluZSBQRFJfU1lOVEhfUlhfRElWX1NVUFBPUlRFRAkweDAxMDAKKyNkZWZpbmUgUERSX1NZTlRIX1RYX0RJVl9NQVNLCQkweDAyMDAKKyNkZWZpbmUgUERSX1NZTlRIX1RYX0RJVl9TVVBQT1JURUQJMHgwMjAwCisjZGVmaW5lIFBEUl9TWU5USF9BU01fTUFTSwkJMHgwNDAwCisjZGVmaW5lIFBEUl9TWU5USF9BU01fWFNXT04JCTB4MDQwMAorCisjZW5kaWYgLyogRUVQUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9md2lvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjllOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jCkBAIC0wLDAgKzEsNzE2IEBACisvKgorICogRmlybXdhcmUgSS9PIGNvZGUgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogQmFzZWQgb246CisgKiAtIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgorICogICBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgorICogLSBzdGxjNDV4eCBkcml2ZXIKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJwNTQuaCIKKyNpbmNsdWRlICJlZXByb20uaCIKKyNpbmNsdWRlICJsbWFjLmgiCisKK2ludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBleHBfaWYgKmV4cF9pZjsKKwlzdHJ1Y3QgYm9vdHJlYyAqYm9vdHJlYzsKKwl1MzIgKmRhdGEgPSAodTMyICopZnctPmRhdGE7CisJdTMyICplbmRfZGF0YSA9ICh1MzIgKilmdy0+ZGF0YSArIChmdy0+c2l6ZSA+PiAyKTsKKwl1OCAqZndfdmVyc2lvbiA9IE5VTEw7CisJc2l6ZV90IGxlbjsKKwlpbnQgaTsKKwlpbnQgbWF4bGVuOworCisJaWYgKHByaXYtPnJ4X3N0YXJ0KQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChkYXRhIDwgZW5kX2RhdGEgJiYgKmRhdGEpCisJCWRhdGErKzsKKworCXdoaWxlIChkYXRhIDwgZW5kX2RhdGEgJiYgISpkYXRhKQorCQlkYXRhKys7CisKKwlib290cmVjID0gKHN0cnVjdCBib290cmVjICopIGRhdGE7CisKKwl3aGlsZSAoYm9vdHJlYy0+ZGF0YSA8PSBlbmRfZGF0YSAmJiAoYm9vdHJlYy0+ZGF0YSArCisJICAgICAgIChsZW4gPSBsZTMyX3RvX2NwdShib290cmVjLT5sZW4pKSkgPD0gZW5kX2RhdGEpIHsKKwkJdTMyIGNvZGUgPSBsZTMyX3RvX2NwdShib290cmVjLT5jb2RlKTsKKwkJc3dpdGNoIChjb2RlKSB7CisJCWNhc2UgQlJfQ09ERV9DT01QT05FTlRfSUQ6CisJCQlwcml2LT5md19pbnRlcmZhY2UgPSBiZTMyX3RvX2NwdXAoKF9fYmUzMiAqKQorCQkJCQkgICAgIGJvb3RyZWMtPmRhdGEpOworCQkJc3dpdGNoIChwcml2LT5md19pbnRlcmZhY2UpIHsKKwkJCWNhc2UgRldfTE04NjoKKwkJCWNhc2UgRldfTE0yMDoKKwkJCWNhc2UgRldfTE04NzogeworCQkJCWNoYXIgKmlmdHlwZSA9IChjaGFyICopYm9vdHJlYy0+ZGF0YTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlczogcDU0IGRldGVjdGVkIGEgTE0lYyVjICIKKwkJCQkJCSAiZmlybXdhcmVcbiIsCisJCQkJCXdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJCQkJaWZ0eXBlWzJdLCBpZnR5cGVbM10pOworCQkJCWJyZWFrOworCQkJCX0KKwkJCWNhc2UgRldfRk1BQzoKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5zdXBwb3J0ZWQgZmlybXdhcmVcbiIsCisJCQkJCXdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OOgorCQkJLyogMjQgYnl0ZXMgc2hvdWxkIGJlIGVub3VnaCBmb3IgYWxsIGZpcm13YXJlcyAqLworCQkJaWYgKHN0cm5sZW4oKHVuc2lnbmVkIGNoYXIgKikgYm9vdHJlYy0+ZGF0YSwgMjQpIDwgMjQpCisJCQkJZndfdmVyc2lvbiA9ICh1bnNpZ25lZCBjaGFyICopIGJvb3RyZWMtPmRhdGE7CisJCQlicmVhazsKKwkJY2FzZSBCUl9DT0RFX0RFU0NSOiB7CisJCQlzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID0KKwkJCQkoc3RydWN0IGJvb3RyZWNfZGVzYyAqKWJvb3RyZWMtPmRhdGE7CisJCQlwcml2LT5yeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtPnJ4X3N0YXJ0KTsKKwkJCS8qIEZJWE1FIGFkZCBzYW5pdHkgY2hlY2tpbmcgKi8KKwkJCXByaXYtPnJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtPnJ4X2VuZCkgLSAweDM1MDA7CisJCQlwcml2LT5oZWFkcm9vbSA9IGRlc2MtPmhlYWRyb29tOworCQkJcHJpdi0+dGFpbHJvb20gPSBkZXNjLT50YWlscm9vbTsKKwkJCXByaXYtPnByaXZhY3lfY2FwcyA9IGRlc2MtPnByaXZhY3lfY2FwczsKKwkJCXByaXYtPnJ4X2tleWNhY2hlX3NpemUgPSBkZXNjLT5yeF9rZXljYWNoZV9zaXplOworCQkJaWYgKGxlMzJfdG9fY3B1KGJvb3RyZWMtPmxlbikgPT0gMTEpCisJCQkJcHJpdi0+cnhfbXR1ID0gbGUxNl90b19jcHUoZGVzYy0+cnhfbXR1KTsKKwkJCWVsc2UKKwkJCQlwcml2LT5yeF9tdHUgPSAoc2l6ZV90KQorCQkJCQkweDYyMCAtIHByaXYtPnR4X2hkcl9sZW47CisJCQltYXhsZW4gPSBwcml2LT50eF9oZHJfbGVuICsgLyogVVNCIGRldmljZXMgKi8KKwkJCQkgc2l6ZW9mKHN0cnVjdCBwNTRfcnhfZGF0YSkgKworCQkJCSA0ICsgLyogcnggYWxpZ25tZW50ICovCisJCQkJIElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQ7CisJCQlpZiAocHJpdi0+cnhfbXR1ID4gbWF4bGVuICYmIFBBR0VfU0laRSA9PSA0MDk2KSB7CisJCQkJcHJpbnRrKEtFUk5fSU5GTyAicDU0OiByeF9tdHUgcmVkdWNlZCBmcm9tICVkICIKKwkJCQkgICAgICAgInRvICVkXG4iLCBwcml2LT5yeF9tdHUsIG1heGxlbik7CisJCQkJcHJpdi0+cnhfbXR1ID0gbWF4bGVuOworCQkJfQorCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgQlJfQ09ERV9FWFBPU0VEX0lGOgorCQkJZXhwX2lmID0gKHN0cnVjdCBleHBfaWYgKikgYm9vdHJlYy0+ZGF0YTsKKwkJCWZvciAoaSA9IDA7IGkgPCAobGVuICogc2l6ZW9mKCpleHBfaWYpIC8gNCk7IGkrKykKKwkJCQlpZiAoZXhwX2lmW2ldLmlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0xNQUMpKQorCQkJCQlwcml2LT5md192YXIgPSBsZTE2X3RvX2NwdShleHBfaWZbaV0udmFyaWFudCk7CisJCQlicmVhazsKKwkJY2FzZSBCUl9DT0RFX0RFUEVOREVOVF9JRjoKKwkJCWJyZWFrOworCQljYXNlIEJSX0NPREVfRU5EX09GX0JSQToKKwkJY2FzZSBMRUdBQ1lfQlJfQ09ERV9FTkRfT0ZfQlJBOgorCQkJZW5kX2RhdGEgPSBOVUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlib290cmVjID0gKHN0cnVjdCBib290cmVjICopJmJvb3RyZWMtPmRhdGFbbGVuXTsKKwl9CisKKwlpZiAoZndfdmVyc2lvbikKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZXIHJldiAlcyAtIFNvZnRtYWMgcHJvdG9jb2wgJXguJXhcbiIsCisJCQl3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGZ3X3ZlcnNpb24sCisJCQlwcml2LT5md192YXIgPj4gOCwgcHJpdi0+ZndfdmFyICYgMHhmZik7CisKKwlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDApCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiB5b3UgYXJlIHVzaW5nIGFuIG9ic29sZXRlIGZpcm13YXJlLiAiCisJCSAgICAgICAidmlzaXQgaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9wNTQgIgorCQkgICAgICAgImFuZCBncmFiIG9uZSBmb3IgXCJrZXJuZWwgPj0gMi42LjI4XCIhXG4iLAorCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKworCWlmIChwcml2LT5md192YXIgPj0gMHgzMDApIHsKKwkJLyogRmlybXdhcmUgc3VwcG9ydHMgUW9TLCB1c2UgaXQhICovCisKKwkJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwMCkgeworCQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX1ZPXS5saW1pdCA9IDE2OworCQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX1ZJXS5saW1pdCA9IDE2OworCQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JFXS5saW1pdCA9IDE2OworCQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JLXS5saW1pdCA9IDE2OworCQl9IGVsc2UgeworCQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX1ZPXS5saW1pdCA9IDM7CisJCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVkldLmxpbWl0ID0gNDsKKwkJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19CRV0ubGltaXQgPSAzOworCQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JLXS5saW1pdCA9IDI7CisJCX0KKwkJcHJpdi0+aHctPnF1ZXVlcyA9IFA1NF9RVUVVRV9BQ19OVU07CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNyeXB0b2dyYXBoaWMgYWNjZWxlcmF0b3IgIgorCSAgICAgICAiV0VQOiVzLCBUS0lQOiVzLCBDQ01QOiVzXG4iLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX1dFUCkgPyAiWUVTIiA6CisJCSJubyIsIChwcml2LT5wcml2YWN5X2NhcHMgJiAoQlJfREVTQ19QUklWX0NBUF9US0lQIHwKKwkJQlJfREVTQ19QUklWX0NBUF9NSUNIQUVMKSkgPyAiWUVTIiA6ICJubyIsCisJCShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX0FFU0NDTVApID8KKwkJIllFUyIgOiAibm8iKTsKKworCWlmIChwcml2LT5yeF9rZXljYWNoZV9zaXplKSB7CisJCS8qCisJCSAqIE5PVEU6CisJCSAqCisJCSAqIFRoZSBmaXJtd2FyZSBwcm92aWRlcyBhdCBtb3N0IDI1NSAoMCAtIDI1NCkgc2xvdHMKKwkJICogZm9yIGtleXMgd2hpY2ggYXJlIHRoZW4gdXNlZCB0byBvZmZsb2FkIGRlY3J5cHRpb24uCisJCSAqIEFzIGEgcmVzdWx0IHRoZSAyNTUgZW50cnkgKGFrYSAweGZmKSBjYW4gYmUgdXNlZAorCQkgKiBzYWZlbHkgYnkgdGhlIGRyaXZlciB0byBtYXJrIGtleXMgdGhhdCBkaWRuJ3QgZml0CisJCSAqIGludG8gdGhlIGZ1bGwgY2FjaGUuIFRoaXMgdHJpY2sgc2F2ZXMgdXMgZnJvbQorCQkgKiBrZWVwaW5nIGEgZXh0cmEgbGlzdCBmb3IgdXBsb2FkZWQga2V5cy4KKwkJICovCisKKwkJcHJpdi0+dXNlZF9yeGtleXMgPSBremFsbG9jKEJJVFNfVE9fTE9OR1MoCisJCQlwcml2LT5yeF9rZXljYWNoZV9zaXplKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFwcml2LT51c2VkX3J4a2V5cykKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3BhcnNlX2Zpcm13YXJlKTsKKworc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgaGRyX2ZsYWdzLAorCQkJCSAgICAgdTE2IHBheWxvYWRfbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpCit7CisJc3RydWN0IHA1NF9oZHIgKmhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBmcmFtZV9sZW4gPSBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbjsKKworCWlmIChmcmFtZV9sZW4gPiBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh1bmxpa2VseShza2JfcXVldWVfbGVuKCZwcml2LT50eF9wZW5kaW5nKSA+IDY0KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlza2IgPSBfX2Rldl9hbGxvY19za2IocHJpdi0+dHhfaGRyX2xlbiArIGZyYW1lX2xlbiwgbWVtZmxhZ3MpOworCWlmICghc2tiKQorCQlyZXR1cm4gTlVMTDsKKwlza2JfcmVzZXJ2ZShza2IsIHByaXYtPnR4X2hkcl9sZW4pOworCisJaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmhkcikpOworCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUxNihoZHJfZmxhZ3MpOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYocGF5bG9hZF9sZW4pOworCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KHR5cGUpOworCWhkci0+dHJpZXMgPSBoZHItPnJ0c190cmllcyA9IDA7CisJcmV0dXJuIHNrYjsKK30KKworaW50IHA1NF9kb3dubG9hZF9lZXByb20oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmJ1ZiwKKwkJCXUxNiBvZmZzZXQsIHUxNiBsZW4pCit7CisJc3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBlZXByb21faGRyX3NpemU7CisJaW50IHJldCA9IDA7CisKKwlpZiAocHJpdi0+ZndfdmFyID49IDB4NTA5KQorCQllZXByb21faGRyX3NpemUgPSBzaXplb2YoKmVlcHJvbV9oZHIpOworCWVsc2UKKwkJZWVwcm9tX2hkcl9zaXplID0gMHg0OworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgZWVwcm9tX2hkcl9zaXplICsKKwkJCSAgICBsZW4sIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLAorCQkJICAgIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9sb2NrKCZwcml2LT5lZXByb21fbXV0ZXgpOworCXByaXYtPmVlcHJvbSA9IGJ1ZjsKKwllZXByb21faGRyID0gKHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKikgc2tiX3B1dChza2IsCisJCWVlcHJvbV9oZHJfc2l6ZSArIGxlbik7CisKKwlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDkpIHsKKwkJZWVwcm9tX2hkci0+djEub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKKwkJZWVwcm9tX2hkci0+djEubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwl9IGVsc2UgeworCQllZXByb21faGRyLT52Mi5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpOworCQllZXByb21faGRyLT52Mi5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCQllZXByb21faGRyLT52Mi5tYWdpYzIgPSAweGY7CisJCW1lbWNweShlZXByb21faGRyLT52Mi5tYWdpYywgKGNvbnN0IGNoYXIgKikiTE9DSyIsIDQpOworCX0KKworCXA1NF90eChwcml2LCBza2IpOworCisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkgICAgICZwcml2LT5lZXByb21fY29tcCwgSFopKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRldmljZSBkb2VzIG5vdCByZXNwb25kIVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CisJCXJldCA9IC1FQlVTWTsKKwl9CisJcHJpdi0+ZWVwcm9tID0gTlVMTDsKKwltdXRleF91bmxvY2soJnByaXYtPmVlcHJvbV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHA1NF91cGRhdGVfYmVhY29uX3RpbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IGFpZCwgYm9vbCBzZXQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3RpbSAqdGltOworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp0aW0pLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAtRU5PTUVNOworCisJdGltID0gKHN0cnVjdCBwNTRfdGltICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnRpbSkpOworCXRpbS0+Y291bnQgPSAxOworCXRpbS0+ZW50cnlbMF0gPSBjcHVfdG9fbGUxNihzZXQgPyAoYWlkIHwgMHg4MDAwKSA6IGFpZCk7CisJcDU0X3R4KHByaXYsIHNrYik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwNTRfc3RhX3VubG9jayhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTggKmFkZHIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgKnN0YTsKKworCXNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc3RhKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1BTTV9TVEFfVU5MT0NLLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhID0gKHN0cnVjdCBwNTRfc3RhX3VubG9jayAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnN0YSkpOworCW1lbWNweShzdGEtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF90eF9jYW5jZWwoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIF9fbGUzMiByZXFfaWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3R4Y2FuY2VsICpjYW5jZWw7CisJdTMyIF9yZXFfaWQgPSBsZTMyX3RvX2NwdShyZXFfaWQpOworCisJaWYgKHVubGlrZWx5KF9yZXFfaWQgPCBwcml2LT5yeF9zdGFydCB8fCBfcmVxX2lkID4gcHJpdi0+cnhfZW5kKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNhbmNlbCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhbmNlbCA9IChzdHJ1Y3QgcDU0X3R4Y2FuY2VsICopc2tiX3B1dChza2IsIHNpemVvZigqY2FuY2VsKSk7CisJY2FuY2VsLT5yZXFfaWQgPSByZXFfaWQ7CisJcDU0X3R4KHByaXYsIHNrYik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwNTRfc2V0dXBfbWFjKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwOworCXUxNiBtb2RlOworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzZXR1cCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TRVRVUCwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJc2V0dXAgPSAoc3RydWN0IHA1NF9zZXR1cF9tYWMgKikgc2tiX3B1dChza2IsIHNpemVvZigqc2V0dXApKTsKKwlpZiAoIShwcml2LT5ody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpKSB7CisJCXN3aXRjaCAocHJpdi0+bW9kZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX1NUQVRJT047CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfQVA7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9JQlNTOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfSElCRVJOQVRFOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiAiVFJBTlNQQVJFTlQgYW5kIFBST01JU0NVT1VTIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCisJCSAqIFNUU1c0NVgwQyBMTUFDIEFQSSAtIHBhZ2UgMTIKKwkJICovCisJCWlmICgoKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgfHwKKwkJICAgICAocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX09USEVSX0JTUykpICYmCisJCSAgICAobW9kZSAhPSBQNTRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVMpKQorCQkJbW9kZSB8PSBQNTRfRklMVEVSX1RZUEVfVFJBTlNQQVJFTlQ7CisJfSBlbHNlIHsKKwkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CisJfQorCisJc2V0dXAtPm1hY19tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJbWVtY3B5KHNldHVwLT5tYWNfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkoc2V0dXAtPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCXNldHVwLT5yeF9hbnRlbm5hID0gMiAmIHByaXYtPnJ4X2RpdmVyc2l0eV9tYXNrOyAvKiBhdXRvbWF0aWMgKi8KKwlzZXR1cC0+cnhfYWxpZ24gPSAwOworCWlmIChwcml2LT5md192YXIgPCAweDUwMCkgeworCQlzZXR1cC0+djEuYmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKKwkJbWVtc2V0KHNldHVwLT52MS5ydHNfcmF0ZXMsIDAsIDgpOworCQlzZXR1cC0+djEucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtPnJ4X2VuZCk7CisJCXNldHVwLT52MS5tYXhfcnggPSBjcHVfdG9fbGUxNihwcml2LT5yeF9tdHUpOworCQlzZXR1cC0+djEucnhodyA9IGNwdV90b19sZTE2KHByaXYtPnJ4aHcpOworCQlzZXR1cC0+djEud2FrZXVwX3RpbWVyID0gY3B1X3RvX2xlMTYocHJpdi0+d2FrZXVwX3RpbWVyKTsKKwkJc2V0dXAtPnYxLnVuYWxsb2MwID0gY3B1X3RvX2xlMTYoMCk7CisJfSBlbHNlIHsKKwkJc2V0dXAtPnYyLnJ4X2FkZHIgPSBjcHVfdG9fbGUzMihwcml2LT5yeF9lbmQpOworCQlzZXR1cC0+djIubWF4X3J4ID0gY3B1X3RvX2xlMTYocHJpdi0+cnhfbXR1KTsKKwkJc2V0dXAtPnYyLnJ4aHcgPSBjcHVfdG9fbGUxNihwcml2LT5yeGh3KTsKKwkJc2V0dXAtPnYyLnRpbWVyID0gY3B1X3RvX2xlMTYocHJpdi0+d2FrZXVwX3RpbWVyKTsKKwkJc2V0dXAtPnYyLnRydW5jYXRlID0gY3B1X3RvX2xlMTYoNDg4OTYpOworCQlzZXR1cC0+djIuYmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKKwkJc2V0dXAtPnYyLnNic3Nfb2Zmc2V0ID0gMDsKKwkJc2V0dXAtPnYyLm1jYXN0X3dpbmRvdyA9IDA7CisJCXNldHVwLT52Mi5yeF9yc3NpX3RocmVzaG9sZCA9IDA7CisJCXNldHVwLT52Mi5yeF9lZF90aHJlc2hvbGQgPSAwOworCQlzZXR1cC0+djIucmVmX2Nsb2NrID0gY3B1X3RvX2xlMzIoNjQ0MjQ1MDk0KTsKKwkJc2V0dXAtPnYyLmxwZl9iYW5kd2lkdGggPSBjcHVfdG9fbGUxNig2NTUzNSk7CisJCXNldHVwLT52Mi5vc2Nfc3RhcnRfZGVsYXkgPSBjcHVfdG9fbGUxNig2NTUzNSk7CisJfQorCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQorCitpbnQgcDU0X3NjYW4oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBtb2RlLCB1MTYgZHdlbGwpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyOworCXN0cnVjdCBwNTRfc2Nhbl9oZWFkICpoZWFkOworCXN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKKwl1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uICpib2R5OworCXN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgKnJhdGU7CisJc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqcnNzaTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl2b2lkICplbnRyeTsKKwlpbnQgYmFuZCA9IHByaXYtPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7CisJX19sZTE2IGZyZXEgPSBjcHVfdG9fbGUxNihwcml2LT5ody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmhlYWQpICsKKwkJCSAgICAyICsgc2l6ZW9mKCppcV9hdXRvY2FsKSArIHNpemVvZigqYm9keSkgKworCQkJICAgIHNpemVvZigqcmF0ZSkgKyAyICogc2l6ZW9mKCpyc3NpKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NDQU4sIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhlYWQgPSAoc3RydWN0IHA1NF9zY2FuX2hlYWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGVhZCkpOworCW1lbXNldChoZWFkLT5zY2FuX3BhcmFtcywgMCwgc2l6ZW9mKGhlYWQtPnNjYW5fcGFyYW1zKSk7CisJaGVhZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOworCWhlYWQtPmR3ZWxsID0gY3B1X3RvX2xlMTYoZHdlbGwpOworCWhlYWQtPmZyZXEgPSBmcmVxOworCisJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJX19sZTE2ICpwYV9wb3dlcl9wb2ludHMgPSAoX19sZTE2ICopIHNrYl9wdXQoc2tiLCAyKTsKKwkJKnBhX3Bvd2VyX3BvaW50cyA9IGNwdV90b19sZTE2KDB4MGMpOworCX0KKworCWlxX2F1dG9jYWwgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCppcV9hdXRvY2FsKSk7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmlxX2F1dG9jYWxfbGVuOyBpKyspIHsKKwkJaWYgKHByaXYtPmlxX2F1dG9jYWxbaV0uZnJlcSAhPSBmcmVxKQorCQkJY29udGludWU7CisKKwkJbWVtY3B5KGlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLnBhcmFtcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X2lxX2F1dG9jYWxfZW50cnkpKTsKKwkJYnJlYWs7CisJfQorCWlmIChpID09IHByaXYtPmlxX2F1dG9jYWxfbGVuKQorCQlnb3RvIGVycjsKKworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5sb25nYm93KSk7CisJZWxzZQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5ub3JtYWwpKTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXM7IGkrKykgeworCQlfX2xlMTYgKmVudHJ5X2ZyZXEgPSAodm9pZCAqKSAocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhICsKKwkJCQkgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqIGkpOworCisJCWlmICgqZW50cnlfZnJlcSAhPSBmcmVxKQorCQkJY29udGludWU7CisKKwkJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJCW1lbWNweSgmYm9keS0+bG9uZ2Jvdy5wb3dlcl9saW1pdHMsCisJCQkgICAgICAgKHZvaWQgKikgZW50cnlfZnJlcSArIHNpemVvZihfX2xlMTYpLAorCQkJICAgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0ICpsaW1pdHMgPQorCQkJICAgICAgICh2b2lkICopIGVudHJ5X2ZyZXE7CisKKwkJCWJvZHktPm5vcm1hbC52YWxfYmFya2VyID0gMHgzODsKKwkJCWJvZHktPm5vcm1hbC52YWxfYnBzayA9IGJvZHktPm5vcm1hbC5kdXBfYnBzayA9CisJCQkJbGltaXRzLT52YWxfYnBzazsKKwkJCWJvZHktPm5vcm1hbC52YWxfcXBzayA9IGJvZHktPm5vcm1hbC5kdXBfcXBzayA9CisJCQkJbGltaXRzLT52YWxfcXBzazsKKwkJCWJvZHktPm5vcm1hbC52YWxfMTZxYW0gPSBib2R5LT5ub3JtYWwuZHVwXzE2cWFtID0KKwkJCQlsaW1pdHMtPnZhbF8xNnFhbTsKKwkJCWJvZHktPm5vcm1hbC52YWxfNjRxYW0gPSBib2R5LT5ub3JtYWwuZHVwXzY0cWFtID0KKwkJCQlsaW1pdHMtPnZhbF82NHFhbTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKGkgPT0gcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzKQorCQlnb3RvIGVycjsKKworCWVudHJ5ID0gKHZvaWQgKikocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSArIHByaXYtPmN1cnZlX2RhdGEtPm9mZnNldCk7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXM7IGkrKykgeworCQlpZiAoKigoX19sZTE2ICopZW50cnkpICE9IGZyZXEpIHsKKwkJCWVudHJ5ICs9IHByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCQltZW1jcHkoJmJvZHktPmxvbmdib3cuY3VydmVfZGF0YSwKKwkJCQkodm9pZCAqKSBlbnRyeSArIHNpemVvZihfX2xlMTYpLAorCQkJCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHA1NF9zY2FuX2JvZHkgKmNoYW4gPSAmYm9keS0+bm9ybWFsOworCQkJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID0KKwkJCQkodm9pZCAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOworCisJCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKKwkJCWNoYW4tPnBhX3BvaW50c19wZXJfY3VydmUgPSA4OworCQkJbWVtc2V0KGNoYW4tPmN1cnZlX2RhdGEsIDAsIHNpemVvZigqY2hhbi0+Y3VydmVfZGF0YSkpOworCQkJbWVtY3B5KGNoYW4tPmN1cnZlX2RhdGEsIGVudHJ5LAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCisJCQkgICAgICAgbWluKCh1OCk4LCBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwpKTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKGkgPT0gcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcykKKwkJZ290byBlcnI7CisKKwlpZiAoKHByaXYtPmZ3X3ZhciA+PSAweDUwMCkgJiYgKHByaXYtPmZ3X3ZhciA8IDB4NTA5KSkgeworCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOworCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKKwkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7CisJfQorCisJcnNzaSA9IChzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKKwlyc3NpLT5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7CisJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCS8qIExvbmdib3cgZnJvbnRlbmQgbmVlZHMgZXZlciBtb3JlICovCisJCXJzc2kgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7CisJCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubG9uZ2Jvd191bmtuKTsKKwkJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3VuazIpOworCX0KKworCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpIHsKKwkJcmF0ZSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJhdGUpKTsKKwkJcmF0ZS0+YmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlLT5ydHNfcmF0ZXMpOyBpKyspCisJCQlyYXRlLT5ydHNfcmF0ZXNbaV0gPSBpOworCX0KKworCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZigqaGRyKSk7CisKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyZXF1ZW5jeSBjaGFuZ2UgdG8gY2hhbm5lbCAlZCBmYWlsZWQuXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkgICAgICAgcHJpdi0+aHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpKTsKKworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBwNTRfc2V0X2xlZHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X2xlZCAqbGVkOworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpsZWQpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfTEVELCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAtRU5PTUVNOworCisJbGVkID0gKHN0cnVjdCBwNTRfbGVkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmxlZCkpOworCWxlZC0+ZmxhZ3MgPSBjcHVfdG9fbGUxNigweDAwMDMpOworCWxlZC0+bWFza1swXSA9IGxlZC0+bWFza1sxXSA9IGNwdV90b19sZTE2KHByaXYtPnNvZnRsZWRfc3RhdGUpOworCWxlZC0+ZGVsYXlbMF0gPSBjcHVfdG9fbGUxNigxKTsKKwlsZWQtPmRlbGF5WzFdID0gY3B1X3RvX2xlMTYoMCk7CisJcDU0X3R4KHByaXYsIHNrYik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwNTRfc2V0X2VkY2Yoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X2VkY2YgKmVkY2Y7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFza2IpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVkY2YgPSAoc3RydWN0IHA1NF9lZGNmICopc2tiX3B1dChza2IsIHNpemVvZigqZWRjZikpOworCWlmIChwcml2LT51c2Vfc2hvcnRfc2xvdCkgeworCQllZGNmLT5zbG90dGltZSA9IDk7CisJCWVkY2YtPnNpZnMgPSAweDEwOworCQllZGNmLT5lb2ZwYWQgPSAweDAwOworCX0gZWxzZSB7CisJCWVkY2YtPnNsb3R0aW1lID0gMjA7CisJCWVkY2YtPnNpZnMgPSAweDBhOworCQllZGNmLT5lb2ZwYWQgPSAweDA2OworCX0KKwkvKiAoc2VlIHByaXNtNTQvaXNsX29pZC5oIGZvciBmdXJ0aGVyIGRldGFpbHMpICovCisJZWRjZi0+ZnJhbWVidXJzdCA9IGNwdV90b19sZTE2KDApOworCWVkY2YtPnJvdW5kX3RyaXBfZGVsYXkgPSBjcHVfdG9fbGUxNigwKTsKKwllZGNmLT5mbGFncyA9IDA7CisJbWVtc2V0KGVkY2YtPm1hcHBpbmcsIDAsIHNpemVvZihlZGNmLT5tYXBwaW5nKSk7CisJbWVtY3B5KGVkY2YtPnF1ZXVlLCBwcml2LT5xb3NfcGFyYW1zLCBzaXplb2YoZWRjZi0+cXVldWUpKTsKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF9zZXRfcHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3BzbSAqcHNtOworCXVuc2lnbmVkIGludCBpOworCXUxNiBtb2RlOworCisJaWYgKHByaXYtPmh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYKKwkgICAgIXByaXYtPnBvd2Vyc2F2ZV9vdmVycmlkZSkKKwkJbW9kZSA9IFA1NF9QU00gfCBQNTRfUFNNX0JFQUNPTl9USU1FT1VUIHwgUDU0X1BTTV9EVElNIHwKKwkJICAgICAgIFA1NF9QU01fQ0hFQ0tTVU0gfCBQNTRfUFNNX01DQkM7CisJZWxzZQorCQltb2RlID0gUDU0X1BTTV9DQU07CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnBzbSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9QU00sIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBzbSA9IChzdHJ1Y3QgcDU0X3BzbSAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnBzbSkpOworCXBzbS0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOworCXBzbS0+YWlkID0gY3B1X3RvX2xlMTYocHJpdi0+YWlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwc20tPmludGVydmFscyk7IGkrKykgeworCQlwc20tPmludGVydmFsc1tpXS5pbnRlcnZhbCA9CisJCQljcHVfdG9fbGUxNihwcml2LT5ody0+Y29uZi5saXN0ZW5faW50ZXJ2YWwpOworCQlwc20tPmludGVydmFsc1tpXS5wZXJpb2RzID0gY3B1X3RvX2xlMTYoMSk7CisJfQorCisJcHNtLT5iZWFjb25fcnNzaV9za2lwX21heCA9IDIwMDsKKwlwc20tPnJzc2lfZGVsdGFfdGhyZXNob2xkID0gMDsKKwlwc20tPm5yID0gMTsKKwlwc20tPmV4Y2x1ZGVbMF0gPSBXTEFOX0VJRF9USU07CisKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF9pbml0X3hib3dfc3ludGgoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X3hib3dfc3ludGggKnhib3c7CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKHByaXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnhib3cpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfWEJPV19TWU5USF9DRkcsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl4Ym93ID0gKHN0cnVjdCBwNTRfeGJvd19zeW50aCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnhib3cpKTsKKwl4Ym93LT5tYWdpYzEgPSBjcHVfdG9fbGUxNigweDEpOworCXhib3ctPm1hZ2ljMiA9IGNwdV90b19sZTE2KDB4Mik7CisJeGJvdy0+ZnJlcSA9IGNwdV90b19sZTE2KDUzOTApOworCW1lbXNldCh4Ym93LT5wYWRkaW5nLCAwLCBzaXplb2YoeGJvdy0+cGFkZGluZykpOworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQorCitpbnQgcDU0X3VwbG9hZF9rZXkoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4IGFsZ28sIGludCBzbG90LCB1OCBpZHgsIHU4IGxlbiwKKwkJICAgdTggKmFkZHIsIHU4KiBrZXkpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X2tleWNhY2hlICpyeGtleTsKKworCXNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcnhrZXkpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyeGtleSA9IChzdHJ1Y3QgcDU0X2tleWNhY2hlICopc2tiX3B1dChza2IsIHNpemVvZigqcnhrZXkpKTsKKwlyeGtleS0+ZW50cnkgPSBzbG90OworCXJ4a2V5LT5rZXlfaWQgPSBpZHg7CisJcnhrZXktPmtleV90eXBlID0gYWxnbzsKKwlpZiAoYWRkcikKKwkJbWVtY3B5KHJ4a2V5LT5tYWMsIGFkZHIsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbXNldChyeGtleS0+bWFjLCB+MCwgRVRIX0FMRU4pOworCisJc3dpdGNoIChhbGdvKSB7CisJY2FzZSBQNTRfQ1JZUFRPX1dFUDoKKwljYXNlIFA1NF9DUllQVE9fQUVTQ0NNUDoKKwkJcnhrZXktPmtleV9sZW4gPSBtaW5fdCh1OCwgMTYsIGxlbik7CisJCW1lbWNweShyeGtleS0+a2V5LCBrZXksIHJ4a2V5LT5rZXlfbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIFA1NF9DUllQVE9fVEtJUE1JQ0hBRUw6CisJCXJ4a2V5LT5rZXlfbGVuID0gMjQ7CisJCW1lbWNweShyeGtleS0+a2V5LCBrZXksIDE2KTsKKwkJbWVtY3B5KCYocnhrZXktPmtleVsxNl0pLCAmKGtleQorCQkJW05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZXSksIDgpOworCQlicmVhazsKKworCWNhc2UgUDU0X0NSWVBUT19OT05FOgorCQlyeGtleS0+a2V5X2xlbiA9IDA7CisJCW1lbXNldChyeGtleS0+a2V5LCAwLCBzaXplb2YocnhrZXktPmtleSkpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG06ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBhbGdvKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwNTRfdHgocHJpdiwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHA1NF9mZXRjaF9zdGF0aXN0aWNzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcDU0aW5mbzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9zdGF0aXN0aWNzKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NUQVRfUkVBREJBQ0ssIEdGUF9LRVJORUwpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogVGhlIHN0YXRpc3RpYyBmZWVkYmFjayBjYXVzZXMgc29tZSBleHRyYSBoZWFkYWNoZXMgaGVyZSwgaWYgaXQKKwkgKiBpcyBub3QgdG8gY3Jhc2gvY29ycnVwdCB0aGUgZmlybXdhcmUgZGF0YSBzdHJ1Y3R1cmVzLgorCSAqCisJICogVW5saWtlIGFsbCBvdGhlciBDb250cm9sIEdldCBPSURzIHdlIGNhbiBub3QgdXNlIGhlbHBlcnMgbGlrZQorCSAqIHNrYl9wdXQgdG8gcmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIHRoZSBkYXRhIHdlJ3JlIHJlcXVlc3RpbmcuCisJICogSW5zdGVhZCB0aGUgZXh0cmEgZnJhbWUgbGVuZ3RoIC13aGljaCB3aWxsIGhvbGQgdGhlIHJlc3VsdHMgbGF0ZXItCisJICogd2lsbCBvbmx5IGJlIHRvbGQgdG8gdGhlIHA1NF9hc3NpZ25fYWRkcmVzcywgc28gdGhhdCBmb2xsb3dpbmcKKwkgKiBmcmFtZXMgd29uJ3QgYmUgcGxhY2VkIGludG8gdGhlICBhbGxlZ2VkbHkgZW1wdHkgYXJlYS4KKwkgKi8KKwl0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJcDU0aW5mbyA9ICh2b2lkICopIHR4aW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwlwNTRpbmZvLT5leHRyYV9sZW4gPSBzaXplb2Yoc3RydWN0IHA1NF9zdGF0aXN0aWNzKTsKKworCXA1NF90eChwcml2LCBza2IpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzVhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbGVkLmMKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb21tb24gY29kZSBmb3IgbWFjODAyMTEgUHJpc201NCBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBCYXNlZCBvbjoKKyAqIC0gdGhlIGlzbHNtIChzb2Z0bWFjIHByaXNtNTQpIGRyaXZlciwgd2hpY2ggaXM6CisgKiAgIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCisgKiAtIHN0bGM0NXh4IGRyaXZlcgorICogICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpZmRlZiBDT05GSUdfUDU0X0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCisKKyNpbmNsdWRlICJwNTQuaCIKKyNpbmNsdWRlICJsbWFjLmgiCisKK3N0YXRpYyB2b2lkIHA1NF91cGRhdGVfbGVkcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHA1NF9jb21tb24sCisJCQkJCSAgICAgICBsZWRfd29yay53b3JrKTsKKwlpbnQgZXJyLCBpLCB0bXAsIGJsaW5rX2RlbGF5ID0gNDAwOworCWJvb2wgcmVydW4gPSBmYWxzZTsKKworCS8qIERvbid0IHRvZ2dsZSB0aGUgTEVELCB3aGVuIHRoZSBkZXZpY2UgaXMgZG93bi4gKi8KKwlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwkJcmV0dXJuIDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPmxlZHMpOyBpKyspCisJCWlmIChwcml2LT5sZWRzW2ldLnRvZ2dsZWQpIHsKKwkJCXByaXYtPnNvZnRsZWRfc3RhdGUgfD0gQklUKGkpOworCisJCQl0bXAgPSA3MCArIDIwMCAvIChwcml2LT5sZWRzW2ldLnRvZ2dsZWQpOworCQkJaWYgKHRtcCA8IGJsaW5rX2RlbGF5KQorCQkJCWJsaW5rX2RlbGF5ID0gdG1wOworCisJCQlpZiAocHJpdi0+bGVkc1tpXS5sZWRfZGV2LmJyaWdodG5lc3MgPT0gTEVEX09GRikKKwkJCQlyZXJ1biA9IHRydWU7CisKKwkJCXByaXYtPmxlZHNbaV0udG9nZ2xlZCA9CisJCQkJISFwcml2LT5sZWRzW2ldLmxlZF9kZXYuYnJpZ2h0bmVzczsKKwkJfSBlbHNlCisJCQlwcml2LT5zb2Z0bGVkX3N0YXRlICY9IH5CSVQoaSk7CisKKwllcnIgPSBwNTRfc2V0X2xlZHMocHJpdik7CisJaWYgKGVyciAmJiBuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byB1cGRhdGUgTEVEcyAoJWQpLlxuIiwKKwkJCXdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgZXJyKTsKKworCWlmIChyZXJ1bikKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5odywgJnByaXYtPmxlZF93b3JrLAorCQkJbXNlY3NfdG9famlmZmllcyhibGlua19kZWxheSkpOworfQorCitzdGF0aWMgdm9pZCBwNTRfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9kZXYsCisJCQkJICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQoreworCXN0cnVjdCBwNTRfbGVkX2RldiAqbGVkID0gY29udGFpbmVyX29mKGxlZF9kZXYsIHN0cnVjdCBwNTRfbGVkX2RldiwKKwkJCQkJICAgICAgIGxlZF9kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGxlZC0+aHdfZGV2OworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCisJCXJldHVybiA7CisKKwlpZiAoKGJyaWdodG5lc3MpICYmIChsZWQtPnJlZ2lzdGVyZWQpKSB7CisJCWxlZC0+dG9nZ2xlZCsrOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LCAmcHJpdi0+bGVkX3dvcmssIEhaLzEwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcDU0X3JlZ2lzdGVyX2xlZChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVkX2luZGV4LAorCQkJICAgIGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCit7CisJc3RydWN0IHA1NF9sZWRfZGV2ICpsZWQgPSAmcHJpdi0+bGVkc1tsZWRfaW5kZXhdOworCWludCBlcnI7CisKKwlpZiAobGVkLT5yZWdpc3RlcmVkKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXNucHJpbnRmKGxlZC0+bmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSksICJwNTQtJXM6OiVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbmFtZSk7CisJbGVkLT5od19kZXYgPSBwcml2LT5odzsKKwlsZWQtPmluZGV4ID0gbGVkX2luZGV4OworCWxlZC0+bGVkX2Rldi5uYW1lID0gbGVkLT5uYW1lOworCWxlZC0+bGVkX2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOworCWxlZC0+bGVkX2Rldi5icmlnaHRuZXNzX3NldCA9IHA1NF9sZWRfYnJpZ2h0bmVzc19zZXQ7CisKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSksICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZWdpc3RlciAlcyBMRUQuXG4iLAorCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBuYW1lKTsKKwllbHNlCisJCWxlZC0+cmVnaXN0ZXJlZCA9IDE7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcDU0X2luaXRfbGVkcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdikKK3sKKwlpbnQgZXJyOworCisJLyoKKwkgKiBUT0RPOgorCSAqIEZpZ3VyZSBvdXQgaWYgdGhlIEVFUFJPTSBjb250YWlucyBzb21lIGhpbnRzIGFib3V0IHRoZSBudW1iZXIKKwkgKiBvZiBhdmFpbGFibGUvcHJvZ3JhbW1hYmxlIExFRHMgb2YgdGhlIGRldmljZS4KKwkgKi8KKworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5sZWRfd29yaywgcDU0X3VwZGF0ZV9sZWRzKTsKKworCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQocHJpdiwgMCwgImFzc29jIiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKHByaXYtPmh3KSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQocHJpdiwgMSwgInR4IiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQocHJpdiwgMiwgInJ4IiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQocHJpdiwgMywgInJhZGlvIiwKKwkJCSAgICAgICBpZWVlODAyMTFfZ2V0X3JhZGlvX2xlZF9uYW1lKHByaXYtPmh3KSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHA1NF9zZXRfbGVkcyhwcml2KTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHA1NF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT5sZWRzKTsgaSsrKSB7CisJCWlmIChwcml2LT5sZWRzW2ldLnJlZ2lzdGVyZWQpIHsKKwkJCXByaXYtPmxlZHNbaV0ucmVnaXN0ZXJlZCA9IGZhbHNlOworCQkJcHJpdi0+bGVkc1tpXS50b2dnbGVkID0gMDsKKwkJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT5sZWRzW2ldLmxlZF9kZXYpOworCQl9CisJfQorCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfd29yayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbG1hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGI2M2VjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2xtYWMuaApAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIExNQUMgSW50ZXJmYWNlIHNwZWNpZmljIGRlZmluaXRpb25zIGZvciBtYWM4MDIxMSBQcmlzbTU0IGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA3IC0gMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIEJhc2VkIG9uOgorICogLSB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKKyAqICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KKyAqCisgKiAtIExNQUMgQVBJIGludGVyZmFjZSBoZWFkZXIgZmlsZSBmb3IgU1RMQzQ1NjAgKGxtYWNfbG9uZ2Jvdy5oKQorICogICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29uZXhhbnQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBMTUFDX0gKKyNkZWZpbmUgTE1BQ19ICisKK2VudW0gcDU0X2NvbnRyb2xfZnJhbWVfdHlwZXMgeworCVA1NF9DT05UUk9MX1RZUEVfU0VUVVAgPSAwLAorCVA1NF9DT05UUk9MX1RZUEVfU0NBTiwKKwlQNTRfQ09OVFJPTF9UWVBFX1RSQVAsCisJUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULAorCVA1NF9DT05UUk9MX1RZUEVfUlhfS0VZQ0FDSEUsCisJUDU0X0NPTlRST0xfVFlQRV9USU0sCisJUDU0X0NPTlRST0xfVFlQRV9QU00sCisJUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwKKwlQNTRfQ09OVFJPTF9UWVBFX1RYRE9ORSwKKwlQNTRfQ09OVFJPTF9UWVBFX0JVUlNULAorCVA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSywKKwlQNTRfQ09OVFJPTF9UWVBFX0JCUCwKKwlQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSywKKwlQNTRfQ09OVFJPTF9UWVBFX0xFRCwKKwlQNTRfQ09OVFJPTF9UWVBFX0dQSU8sCisJUDU0X0NPTlRST0xfVFlQRV9USU1FUiwKKwlQNTRfQ09OVFJPTF9UWVBFX01PRFVMQVRJT04sCisJUDU0X0NPTlRST0xfVFlQRV9TWU5USF9DT05GSUcsCisJUDU0X0NPTlRST0xfVFlQRV9ERVRFQ1RPUl9WQUxVRSwKKwlQNTRfQ09OVFJPTF9UWVBFX1hCT1dfU1lOVEhfQ0ZHLAorCVA1NF9DT05UUk9MX1RZUEVfQ0NFX1FVSUVULAorCVA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssCisJUDU0X0NPTlRST0xfVFlQRV9QQ1MsCisJUDU0X0NPTlRST0xfVFlQRV9CVF9CQUxBTkNFUiA9IDI4LAorCVA1NF9DT05UUk9MX1RZUEVfR1JPVVBfQUREUkVTU19UQUJMRSA9IDMwLAorCVA1NF9DT05UUk9MX1RZUEVfQVJQVEFCTEUgPSAzMSwKKwlQNTRfQ09OVFJPTF9UWVBFX0JUX09QVElPTlMgPSAzNSwKK307CisKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0NPTlRST0wJCUJJVCgxNSkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQJKEJJVCgxNSkgKyBCSVQoMCkpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0FMSUdOCQlCSVQoMTQpCisKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1BST01JU0MJCUJJVCgwKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QCQlCSVQoMSkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1NFUU5SCQlCSVQoMikKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0JJVDMJCUJJVCgzKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQlVSU1QJCUJJVCg0KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUwJCUJJVCg1KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQ0xFQVJUSU0JCUJJVCg2KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfSElUQ0hISUtFCQlCSVQoNykKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0NPTVBSRVNTCQlCSVQoOCkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0NPTkNBVAkJQklUKDkpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9QQ1NfQUNDRVBUCUJJVCgxMCkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1dBSVRFT1NQCQlCSVQoMTEpCisKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fRkNTX0dPT0QJCUJJVCgwKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9NQVRDSF9NQUMJCUJJVCgxKQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9NQ0JDCQlCSVQoMikKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fQkVBQ09OCQlCSVQoMykKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fTUFUQ0hfQlNTCQlCSVQoNCkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fQkNBU1RfQlNTCQlCSVQoNSkKKyNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fREFUQQkJQklUKDYpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX1RSVU5DQVRFRAkJQklUKDcpCisjZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX0JJVDgJCUJJVCg4KQorI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9UUkFOU1BBUkVOVAlCSVQoOSkKKworc3RydWN0IHA1NF9oZHIgeworCV9fbGUxNiBmbGFnczsKKwlfX2xlMTYgbGVuOworCV9fbGUzMiByZXFfaWQ7CisJX19sZTE2IHR5cGU7CS8qIGVudW0gcDU0X2NvbnRyb2xfZnJhbWVfdHlwZXMgKi8KKwl1OCBydHNfdHJpZXM7CisJdTggdHJpZXM7CisJdTggZGF0YVswXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgR0VUX1JFUV9JRChza2IpCQkJCQkJCVwKKwkoKChzdHJ1Y3QgcDU0X2hkciAqKSAoKHN0cnVjdCBza19idWZmICopIHNrYiktPmRhdGEpLT5yZXFfaWQpCVwKKworI2RlZmluZSBGUkVFX0FGVEVSX1RYKHNrYikJCQkJCQlcCisJKCgoKHN0cnVjdCBwNTRfaGRyICopICgoc3RydWN0IHNrX2J1ZmYgKikgc2tiKS0+ZGF0YSktPgkJXAorCWZsYWdzKSA9PSBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCkpCisKKyNkZWZpbmUgSVNfREFUQV9GUkFNRShza2IpCQkJCQkJXAorCSghKCgoKHN0cnVjdCBwNTRfaGRyICopICgoc3RydWN0IHNrX2J1ZmYgKikgc2tiKS0+ZGF0YSktPglcCisJZmxhZ3MpICYgY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0NPTlRST0wpKSkKKworI2RlZmluZSBHRVRfSFdfUVVFVUUoc2tiKQkJCQkJCVwKKwkoKChzdHJ1Y3QgcDU0X3R4X2RhdGEgKikoKHN0cnVjdCBwNTRfaGRyICopCQkJXAorCXNrYi0+ZGF0YSktPmRhdGEpLT5od19xdWV1ZSkKKworLyoKKyAqIHNoYXJlZCBpbnRlcmZhY2UgSUQgZGVmaW5pdGlvbnMKKyAqIFRoZSBpbnRlcmZhY2UgSUQgaXMgYSB1bmlxdWUgaWRlbnRpZmljYXRpb24gb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCisgKiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgcmVzZXJ2ZWQ6IDB4MDAwMCwgMHgwMDAyLCAweDAwMTIsIDB4MDAxNCwgMHgwMDE1CisgKi8KKyNkZWZpbmUgSUZfSURfSVNMMzYzNTZBCQkJMHgwMDAxCS8qIElTTDM2MzU2QSA8LT4gRmlybXdhcmUgKi8KKyNkZWZpbmUgSUZfSURfTVZDCQkJMHgwMDAzCS8qIE1BQyBWaXJ0dWFsIENvcHJvY2Vzc29yICovCisjZGVmaW5lIElGX0lEX0RFQlVHCQkJMHgwMDA4CS8qIFBvbERlYnVnIEludGVyZmFjZSAqLworI2RlZmluZSBJRl9JRF9QUk9EVUNUCQkJMHgwMDA5CisjZGVmaW5lIElGX0lEX09FTQkJCTB4MDAwYQorI2RlZmluZSBJRl9JRF9QQ0kzODc3CQkJMHgwMDBiCS8qIDM4NzcgPC0+IEhvc3QgUENJICovCisjZGVmaW5lIElGX0lEX0lTTDM3NzA0QwkJCTB4MDAwYwkvKiBJU0wzNzcwNEMgPC0+IEZ3ICovCisjZGVmaW5lIElGX0lEX0lTTDM5MDAwCQkJMHgwMDBmCS8qIElTTDM5MDAwIDwtPiBGdyAqLworI2RlZmluZSBJRl9JRF9JU0wzOTMwMEEJCQkweDAwMTAJLyogSVNMMzkzMDBBIDwtPiBGdyAqLworI2RlZmluZSBJRl9JRF9JU0wzNzcwMF9VQVAJCTB4MDAxNgkvKiBJU0wzNzcwMCB1QVAgRncgPC0+IEZ3ICovCisjZGVmaW5lIElGX0lEX0lTTDM5MDAwX1VBUAkJMHgwMDE3CS8qIElTTDM5MDAwIHVBUCBGdyA8LT4gRncgKi8KKyNkZWZpbmUgSUZfSURfTE1BQwkJCTB4MDAxYQkvKiBJbnRlcmZhY2UgZXhwb3NlZCBieSBMTUFDICovCisKK3N0cnVjdCBleHBfaWYgeworCV9fbGUxNiByb2xlOworCV9fbGUxNiBpZl9pZDsKKwlfX2xlMTYgdmFyaWFudDsKKwlfX2xlMTYgYnRtX2NvbXBhdDsKKwlfX2xlMTYgdG9wX2NvbXBhdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBkZXBfaWYgeworCV9fbGUxNiByb2xlOworCV9fbGUxNiBpZl9pZDsKKwlfX2xlMTYgdmFyaWFudDsKK30gX19wYWNrZWQ7CisKKy8qIGRyaXZlciA8LT4gbG1hYyBkZWZpbml0aW9ucyAqLworc3RydWN0IHA1NF9lZXByb21fbG04NiB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19sZTE2IG9mZnNldDsKKwkJCV9fbGUxNiBsZW47CisJCQl1OCBkYXRhWzBdOworCQl9IF9fcGFja2VkIHYxOworCQlzdHJ1Y3QgeworCQkJX19sZTMyIG9mZnNldDsKKwkJCV9fbGUxNiBsZW47CisJCQl1OCBtYWdpYzI7CisJCQl1OCBwYWQ7CisJCQl1OCBtYWdpY1s0XTsKKwkJCXU4IGRhdGFbMF07CisJCX0gX19wYWNrZWQgdjI7CisJfSAgX19wYWNrZWQ7Cit9IF9fcGFja2VkOworCitlbnVtIHA1NF9yeF9kZWNyeXB0X3N0YXR1cyB7CisJUDU0X0RFQ1JZUFRfTk9ORSA9IDAsCisJUDU0X0RFQ1JZUFRfT0ssCisJUDU0X0RFQ1JZUFRfTk9LRVksCisJUDU0X0RFQ1JZUFRfTk9NSUNIQUVMLAorCVA1NF9ERUNSWVBUX05PQ0tJUE1JQywKKwlQNTRfREVDUllQVF9GQUlMX1dFUCwKKwlQNTRfREVDUllQVF9GQUlMX1RLSVAsCisJUDU0X0RFQ1JZUFRfRkFJTF9NSUNIQUVMLAorCVA1NF9ERUNSWVBUX0ZBSUxfQ0tJUEtQLAorCVA1NF9ERUNSWVBUX0ZBSUxfQ0tJUE1JQywKKwlQNTRfREVDUllQVF9GQUlMX0FFU0NDTVAKK307CisKK3N0cnVjdCBwNTRfcnhfZGF0YSB7CisJX19sZTE2IGZsYWdzOworCV9fbGUxNiBsZW47CisJX19sZTE2IGZyZXE7CisJdTggYW50ZW5uYTsKKwl1OCByYXRlOworCXU4IHJzc2k7CisJdTggcXVhbGl0eTsKKwl1OCBkZWNyeXB0X3N0YXR1czsKKwl1OCByc3NpX3JhdzsKKwlfX2xlMzIgdHNmMzI7CisJX19sZTMyIHVuYWxsb2MwOworCXU4IGFsaWduWzBdOworfSBfX3BhY2tlZDsKKworZW51bSBwNTRfdHJhcF90eXBlIHsKKwlQNTRfVFJBUF9TQ0FOID0gMCwKKwlQNTRfVFJBUF9USU1FUiwKKwlQNTRfVFJBUF9CRUFDT05fVFgsCisJUDU0X1RSQVBfRkFBX1JBRElPX09OLAorCVA1NF9UUkFQX0ZBQV9SQURJT19PRkYsCisJUDU0X1RSQVBfUkFEQVIsCisJUDU0X1RSQVBfTk9fQkVBQ09OLAorCVA1NF9UUkFQX1RCVFQsCisJUDU0X1RSQVBfU0NPX0VOVEVSLAorCVA1NF9UUkFQX1NDT19FWElUCit9OworCitzdHJ1Y3QgcDU0X3RyYXAgeworCV9fbGUxNiBldmVudDsKKwlfX2xlMTYgZnJlcXVlbmN5OworfSBfX3BhY2tlZDsKKworZW51bSBwNTRfZnJhbWVfc2VudF9zdGF0dXMgeworCVA1NF9UWF9PSyA9IDAsCisJUDU0X1RYX0ZBSUxFRCwKKwlQNTRfVFhfUFNNLAorCVA1NF9UWF9QU01fQ0FOQ0VMTEVEID0gNAorfTsKKworc3RydWN0IHA1NF9mcmFtZV9zZW50IHsKKwl1OCBzdGF0dXM7CisJdTggdHJpZXM7CisJdTggYWNrX3Jzc2k7CisJdTggcXVhbGl0eTsKKwlfX2xlMTYgc2VxOworCXU4IGFudGVubmE7CisJdTggcGFkZGluZzsKK30gX19wYWNrZWQ7CisKK2VudW0gcDU0X3R4X2RhdGFfY3J5cHQgeworCVA1NF9DUllQVE9fTk9ORSA9IDAsCisJUDU0X0NSWVBUT19XRVAsCisJUDU0X0NSWVBUT19US0lQLAorCVA1NF9DUllQVE9fVEtJUE1JQ0hBRUwsCisJUDU0X0NSWVBUT19DQ1hfV0VQTUlDLAorCVA1NF9DUllQVE9fQ0NYX0tQTUlDLAorCVA1NF9DUllQVE9fQ0NYX0tQLAorCVA1NF9DUllQVE9fQUVTQ0NNUAorfTsKKworZW51bSBwNTRfdHhfZGF0YV9xdWV1ZSB7CisJUDU0X1FVRVVFX0JFQUNPTgk9IDAsCisJUDU0X1FVRVVFX0ZXU0NBTgk9IDEsCisJUDU0X1FVRVVFX01HTVQJCT0gMiwKKwlQNTRfUVVFVUVfQ0FCCQk9IDMsCisJUDU0X1FVRVVFX0RBVEEJCT0gNCwKKworCVA1NF9RVUVVRV9BQ19OVU0JPSA0LAorCVA1NF9RVUVVRV9BQ19WTwkJPSA0LAorCVA1NF9RVUVVRV9BQ19WSQkJPSA1LAorCVA1NF9RVUVVRV9BQ19CRQkJPSA2LAorCVA1NF9RVUVVRV9BQ19CSwkJPSA3LAorCisJLyoga2VlcCBsYXN0ICovCisJUDU0X1FVRVVFX05VTQkJPSA4LAorfTsKKworI2RlZmluZSBJU19RT1NfUVVFVUUobikJKG4gPj0gUDU0X1FVRVVFX0RBVEEpCisKK3N0cnVjdCBwNTRfdHhfZGF0YSB7CisJdTggcmF0ZXNldFs4XTsKKwl1OCBydHNfcmF0ZV9pZHg7CisJdTggY3J5cHRfb2Zmc2V0OworCXU4IGtleV90eXBlOworCXU4IGtleV9sZW47CisJdTgga2V5WzE2XTsKKwl1OCBod19xdWV1ZTsKKwl1OCBiYWNrbG9nOworCV9fbGUxNiBkdXJhdGlvbnNbNF07CisJdTggdHhfYW50ZW5uYTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCBjdHNfcmF0ZTsKKwkJCV9fbGUxNiBvdXRwdXRfcG93ZXI7CisJCX0gX19wYWNrZWQgbG9uZ2JvdzsKKwkJc3RydWN0IHsKKwkJCXU4IG91dHB1dF9wb3dlcjsKKwkJCXU4IGN0c19yYXRlOworCQkJdTggdW5hbGxvYzsKKwkJfSBfX3BhY2tlZCBub3JtYWw7CisJfSBfX3BhY2tlZDsKKwl1OCB1bmFsbG9jMlsyXTsKKwl1OCBhbGlnblswXTsKK30gX19wYWNrZWQ7CisKKy8qIHVuaXQgaXMgbXMgKi8KKyNkZWZpbmUgUDU0X1RYX0ZSQU1FX0xJRkVUSU1FIDIwMDAKKyNkZWZpbmUgUDU0X1RYX1RJTUVPVVQgNDAwMAorI2RlZmluZSBQNTRfU1RBVElTVElDU19VUERBVEUgNTAwMAorCisjZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9OT05FCQkwCisjZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9TVEFUSU9OCQlCSVQoMCkKKyNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX0lCU1MJCUJJVCgxKQorI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfQVAJCUJJVCgyKQorI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfVFJBTlNQQVJFTlQJQklUKDMpCisjZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUwlCSVQoNCkKKyNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURQlCSVQoNSkKKyNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX05PQUNLCQlCSVQoNikKKyNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX1JYX0RJU0FCTEVECUJJVCg3KQorCitzdHJ1Y3QgcDU0X3NldHVwX21hYyB7CisJX19sZTE2IG1hY19tb2RlOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggcnhfYW50ZW5uYTsKKwl1OCByeF9hbGlnbjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgYmFzaWNfcmF0ZV9tYXNrOworCQkJdTggcnRzX3JhdGVzWzhdOworCQkJX19sZTMyIHJ4X2FkZHI7CisJCQlfX2xlMTYgbWF4X3J4OworCQkJX19sZTE2IHJ4aHc7CisJCQlfX2xlMTYgd2FrZXVwX3RpbWVyOworCQkJX19sZTE2IHVuYWxsb2MwOworCQl9IF9fcGFja2VkIHYxOworCQlzdHJ1Y3QgeworCQkJX19sZTMyIHJ4X2FkZHI7CisJCQlfX2xlMTYgbWF4X3J4OworCQkJX19sZTE2IHJ4aHc7CisJCQlfX2xlMTYgdGltZXI7CisJCQlfX2xlMTYgdHJ1bmNhdGU7CisJCQlfX2xlMzIgYmFzaWNfcmF0ZV9tYXNrOworCQkJdTggc2Jzc19vZmZzZXQ7CisJCQl1OCBtY2FzdF93aW5kb3c7CisJCQl1OCByeF9yc3NpX3RocmVzaG9sZDsKKwkJCXU4IHJ4X2VkX3RocmVzaG9sZDsKKwkJCV9fbGUzMiByZWZfY2xvY2s7CisJCQlfX2xlMTYgbHBmX2JhbmR3aWR0aDsKKwkJCV9fbGUxNiBvc2Nfc3RhcnRfZGVsYXk7CisJCX0gX19wYWNrZWQgdjI7CisJfSBfX3BhY2tlZDsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgUDU0X1NFVFVQX1YxX0xFTiA0MAorI2RlZmluZSBQNTRfU0VUVVBfVjJfTEVOIChzaXplb2Yoc3RydWN0IHA1NF9zZXR1cF9tYWMpKQorCisjZGVmaW5lIFA1NF9TQ0FOX0VYSVQJQklUKDApCisjZGVmaW5lIFA1NF9TQ0FOX1RSQVAJQklUKDEpCisjZGVmaW5lIFA1NF9TQ0FOX0FDVElWRSBCSVQoMikKKyNkZWZpbmUgUDU0X1NDQU5fRklMVEVSIEJJVCgzKQorCitzdHJ1Y3QgcDU0X3NjYW5faGVhZCB7CisJX19sZTE2IG1vZGU7CisJX19sZTE2IGR3ZWxsOworCXU4IHNjYW5fcGFyYW1zWzIwXTsKKwlfX2xlMTYgZnJlcTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgeworCXU4IHJmX3Bvd2VyOworCXU4IHBhX2RldGVjdG9yOworCXU4IGRhdGFfYmFya2VyOworCXU4IGRhdGFfYnBzazsKKwl1OCBkYXRhX3Fwc2s7CisJdTggZGF0YV8xNnFhbTsKKwl1OCBkYXRhXzY0cWFtOworCXU4IHBhZGRpbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3NjYW5fYm9keSB7CisJdTggcGFfcG9pbnRzX3Blcl9jdXJ2ZTsKKwl1OCB2YWxfYmFya2VyOworCXU4IHZhbF9icHNrOworCXU4IHZhbF9xcHNrOworCXU4IHZhbF8xNnFhbTsKKwl1OCB2YWxfNjRxYW07CisJc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSBjdXJ2ZV9kYXRhWzhdOworCXU4IGR1cF9icHNrOworCXU4IGR1cF9xcHNrOworCXU4IGR1cF8xNnFhbTsKKwl1OCBkdXBfNjRxYW07Cit9IF9fcGFja2VkOworCisvKgorICogV2FybmluZzogTG9uZ2JvdydzIHN0cnVjdHVyZXMgYXJlIGJvZ3VzLgorICovCitzdHJ1Y3QgcDU0X2NoYW5uZWxfb3V0cHV0X2xpbWl0X2xvbmdib3cgeworCV9fbGUxNiByZl9wb3dlcl9wb2ludHNbMTJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9sb25nYm93IHsKKwlfX2xlMTYgcmZfcG93ZXI7CisJX19sZTE2IHBhX2RldGVjdG9yOworCXN0cnVjdCB7CisJCV9fbGUxNiBkYXRhWzRdOworCX0gcG9pbnRzWzNdIF9fcGFja2VkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyB7CisJc3RydWN0IHA1NF9jaGFubmVsX291dHB1dF9saW1pdF9sb25nYm93IHBvd2VyX2xpbWl0czsKKwlzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlX2xvbmdib3cgY3VydmVfZGF0YVs4XTsKKwlfX2xlMTYgdW5rbls2XTsJCS8qIG1heWJlIG1vcmUgcG93ZXJfbGltaXRzIG9yIHJhdGVfbWFzayAqLworfSBfX3BhY2tlZDsKKwordW5pb24gcDU0X3NjYW5fYm9keV91bmlvbiB7CisJc3RydWN0IHA1NF9zY2FuX2JvZHkgbm9ybWFsOworCXN0cnVjdCBwNTRfc2Nhbl9ib2R5X2xvbmdib3cgbG9uZ2JvdzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgeworCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7CisJdTggcnRzX3JhdGVzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9sZWQgeworCV9fbGUxNiBmbGFnczsKKwlfX2xlMTYgbWFza1syXTsKKwlfX2xlMTYgZGVsYXlbMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X2VkY2YgeworCXU4IGZsYWdzOworCXU4IHNsb3R0aW1lOworCXU4IHNpZnM7CisJdTggZW9mcGFkOworCXN0cnVjdCBwNTRfZWRjZl9xdWV1ZV9wYXJhbSBxdWV1ZVs4XTsKKwl1OCBtYXBwaW5nWzRdOworCV9fbGUxNiBmcmFtZWJ1cnN0OworCV9fbGUxNiByb3VuZF90cmlwX2RlbGF5OworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgcnhfc3VjY2VzczsKKwlfX2xlMzIgcnhfYmFkX2ZjczsKKwlfX2xlMzIgcnhfYWJvcnQ7CisJX19sZTMyIHJ4X2Fib3J0X3BoeTsKKwlfX2xlMzIgcnRzX3N1Y2Nlc3M7CisJX19sZTMyIHJ0c19mYWlsOworCV9fbGUzMiB0c2YzMjsKKwlfX2xlMzIgYWlydGltZTsKKwlfX2xlMzIgbm9pc2U7CisJX19sZTMyIHNhbXBsZV9ub2lzZVs4XTsKKwlfX2xlMzIgc2FtcGxlX2NjYTsKKwlfX2xlMzIgc2FtcGxlX3R4OworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF94Ym93X3N5bnRoIHsKKwlfX2xlMTYgbWFnaWMxOworCV9fbGUxNiBtYWdpYzI7CisJX19sZTE2IGZyZXE7CisJdTMyIHBhZGRpbmdbNV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3RpbWVyIHsKKwlfX2xlMzIgaW50ZXJ2YWw7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X2tleWNhY2hlIHsKKwl1OCBlbnRyeTsKKwl1OCBrZXlfaWQ7CisJdTggbWFjW0VUSF9BTEVOXTsKKwl1OCBwYWRkaW5nWzJdOworCXU4IGtleV90eXBlOworCXU4IGtleV9sZW47CisJdTgga2V5WzI0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfYnVyc3QgeworCXU4IGZsYWdzOworCXU4IHF1ZXVlOworCXU4IGJhY2tsb2c7CisJdTggcGFkOworCV9fbGUxNiBkdXJhdGlvbnNbMzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9wc21faW50ZXJ2YWwgeworCV9fbGUxNiBpbnRlcnZhbDsKKwlfX2xlMTYgcGVyaW9kczsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgUDU0X1BTTV9DQU0JCQkwCisjZGVmaW5lIFA1NF9QU00JCQkJQklUKDApCisjZGVmaW5lIFA1NF9QU01fRFRJTQkJCUJJVCgxKQorI2RlZmluZSBQNTRfUFNNX01DQkMJCQlCSVQoMikKKyNkZWZpbmUgUDU0X1BTTV9DSEVDS1NVTQkJQklUKDMpCisjZGVmaW5lIFA1NF9QU01fU0tJUF9NT1JFX0RBVEEJCUJJVCg0KQorI2RlZmluZSBQNTRfUFNNX0JFQUNPTl9USU1FT1VUCQlCSVQoNSkKKyNkZWZpbmUgUDU0X1BTTV9IRk9TTEVFUAkJQklUKDYpCisjZGVmaW5lIFA1NF9QU01fQVVUT1NXSVRDSF9TTEVFUAlCSVQoNykKKyNkZWZpbmUgUDU0X1BTTV9MUElUCQkJQklUKDgpCisjZGVmaW5lIFA1NF9QU01fQkZfVUNBU1RfU0tJUAkJQklUKDkpCisjZGVmaW5lIFA1NF9QU01fQkZfTUNBU1RfU0tJUAkJQklUKDEwKQorCitzdHJ1Y3QgcDU0X3BzbSB7CisJX19sZTE2IG1vZGU7CisJX19sZTE2IGFpZDsKKwlzdHJ1Y3QgcDU0X3BzbV9pbnRlcnZhbCBpbnRlcnZhbHNbNF07CisJdTggYmVhY29uX3Jzc2lfc2tpcF9tYXg7CisJdTggcnNzaV9kZWx0YV90aHJlc2hvbGQ7CisJdTggbnI7CisJdTggZXhjbHVkZVsxXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTUNfRklMVEVSX0FERFJFU1NfTlVNIDQKKworc3RydWN0IHA1NF9ncm91cF9hZGRyZXNzX3RhYmxlIHsKKwlfX2xlMTYgZmlsdGVyX2VuYWJsZTsKKwlfX2xlMTYgbnVtX2FkZHJlc3M7CisJdTggbWFjX2xpc3RbTUNfRklMVEVSX0FERFJFU1NfTlVNXVtFVEhfQUxFTl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X3R4Y2FuY2VsIHsKKwlfX2xlMzIgcmVxX2lkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHA1NF9zdGFfdW5sb2NrIHsKKwl1OCBhZGRyW0VUSF9BTEVOXTsKKwl1MTYgcGFkZGluZzsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgUDU0X1RJTV9DTEVBUiBCSVQoMTUpCitzdHJ1Y3QgcDU0X3RpbSB7CisJdTggY291bnQ7CisJdTggcGFkZGluZ1szXTsKKwlfX2xlMTYgZW50cnlbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgcDU0X2NjZV9xdWlldCB7CisJX19sZTMyIHBlcmlvZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfYnRfYmFsYW5jZXIgeworCV9fbGUxNiBwcmlvX3RocmVzaDsKKwlfX2xlMTYgYWNsX3RocmVzaDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwNTRfYXJwX3RhYmxlIHsKKwlfX2xlMTYgZmlsdGVyX2VuYWJsZTsKKwl1OCBpcHY0X2FkZHJbNF07Cit9IF9fcGFja2VkOworCisvKiBMRUQgY29udHJvbCAqLworaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CitpbnQgcDU0X2luaXRfbGVkcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7Cit2b2lkIHA1NF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYpOworCisvKiB4bWl0IGZ1bmN0aW9ucyAqLworaW50IHA1NF90eF84MDIxMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IHA1NF90eF9jYW5jZWwoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIF9fbGUzMiByZXFfaWQpOwordm9pZCBwNTRfdHgoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOworCisvKiBzeW50aC9waHkgY29uZmlndXJhdGlvbiAqLworaW50IHA1NF9pbml0X3hib3dfc3ludGgoc3RydWN0IHA1NF9jb21tb24gKnByaXYpOworaW50IHA1NF9zY2FuKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1MTYgbW9kZSwgdTE2IGR3ZWxsKTsKKworLyogTUFDICovCitpbnQgcDU0X3N0YV91bmxvY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4ICphZGRyKTsKK2ludCBwNTRfdXBkYXRlX2JlYWNvbl90aW0oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBhaWQsIGJvb2wgc2V0KTsKK2ludCBwNTRfc2V0dXBfbWFjKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKK2ludCBwNTRfc2V0X3BzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KTsKK2ludCBwNTRfZmV0Y2hfc3RhdGlzdGljcyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdik7CisKKy8qIGUvdiBEQ0Ygc2V0dXAgKi8KK2ludCBwNTRfc2V0X2VkY2Yoc3RydWN0IHA1NF9jb21tb24gKnByaXYpOworCisvKiBjcnlwdG9ncmFwaGljIGVuZ2luZSAqLworaW50IHA1NF91cGxvYWRfa2V5KHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB1OCBhbGdvLCBpbnQgc2xvdCwKKwkJICAgdTggaWR4LCB1OCBsZW4sIHU4ICphZGRyLCB1OCoga2V5KTsKKworLyogZWVwcm9tICovCitpbnQgcDU0X2Rvd25sb2FkX2VlcHJvbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqYnVmLAorCQkJdTE2IG9mZnNldCwgdTE2IGxlbik7CisKKy8qIHV0aWxpdHkgKi8KK3U4ICpwNTRfZmluZF9pZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpZSk7CisKKyNlbmRpZiAvKiBMTUFDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNDg2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCkBAIC0wLDAgKzEsNjQ4IEBACisvKgorICogbWFjODAyMTEgZ2x1ZSBjb2RlIGZvciBtYWM4MDIxMSBQcmlzbTU0IGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIEJhc2VkIG9uOgorICogLSB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKKyAqICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KKyAqIC0gc3RsYzQ1eHggZHJpdmVyCisgKiAgIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCisjaW5jbHVkZSAicDU0LmgiCisjaW5jbHVkZSAibG1hYy5oIgorCitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbi4iKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2Z0bWFjIFByaXNtNTQgY29tbW9uIGNvZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicHJpc201NGNvbW1vbiIpOworCitzdGF0aWMgdm9pZCBwNTRfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIG5vdGlmeV9jbWQsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN3aXRjaCAobm90aWZ5X2NtZCkgeworCWNhc2UgU1RBX05PVElGWV9BREQ6CisJY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKKwkJLyoKKwkJICogTm90aWZ5IHRoZSBmaXJtd2FyZSB0aGF0IHdlIGRvbid0IHdhbnQgb3Igd2UgZG9uJ3QKKwkJICogbmVlZCB0byBidWZmZXIgZnJhbWVzIGZvciB0aGlzIHN0YXRpb24gYW55bW9yZS4KKwkJICovCisKKwkJcDU0X3N0YV91bmxvY2socHJpdiwgc3RhLT5hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFfTk9USUZZX0FXQUtFOgorCQkvKiB1cGRhdGUgdGhlIGZpcm13YXJlJ3MgZmlsdGVyIHRhYmxlICovCisJCXA1NF9zdGFfdW5sb2NrKHByaXYsIHN0YS0+YWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBwNTRfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQlib29sIHNldCkKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCXJldHVybiBwNTRfdXBkYXRlX2JlYWNvbl90aW0ocHJpdiwgc3RhLT5haWQsIHNldCk7Cit9CisKK3U4ICpwNTRfZmluZF9pZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl1OCAqcG9zLCAqZW5kOworCisJaWYgKHNrYi0+bGVuIDw9IHNpemVvZihtZ210KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwb3MgPSAodTggKiltZ210LT51LmJlYWNvbi52YXJpYWJsZTsKKwllbmQgPSBza2ItPmRhdGEgKyBza2ItPmxlbjsKKwl3aGlsZSAocG9zIDwgZW5kKSB7CisJCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKHBvc1swXSA9PSBpZSkKKwkJCXJldHVybiBwb3M7CisKKwkJcG9zICs9IDIgKyBwb3NbMV07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHA1NF9iZWFjb25fZm9ybWF0X2llX3RpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCS8qCisJICogdGhlIGdvb2QgZXhjdXNlIGZvciB0aGlzIG1lc3MgaXMgLi4uIHRoZSBmaXJtd2FyZS4KKwkgKiBUaGUgZHVtbXkgVElNIE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgYmVhY29uIGZyYW1lLAorCSAqIGJlY2F1c2UgaXQnbGwgYmUgb3ZlcndyaXR0ZW4hCisJICovCisJdTggKnRpbTsKKwl1OCBkdGltX2xlbjsKKwl1OCBkdGltX3BlcmlvZDsKKwl1OCAqbmV4dDsKKworCXRpbSA9IHA1NF9maW5kX2llKHNrYiwgV0xBTl9FSURfVElNKTsKKwlpZiAoIXRpbSkKKwkJcmV0dXJuIDA7CisKKwlkdGltX2xlbiA9IHRpbVsxXTsKKwlkdGltX3BlcmlvZCA9IHRpbVszXTsKKwluZXh0ID0gdGltICsgMiArIGR0aW1fbGVuOworCisJaWYgKGR0aW1fbGVuIDwgMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1tb3ZlKHRpbSwgbmV4dCwgc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gbmV4dCk7CisJdGltID0gc2tiX3RhaWxfcG9pbnRlcihza2IpIC0gKGR0aW1fbGVuICsgMik7CisKKwkvKiBhZGQgdGhlIGR1bW15IGF0IHRoZSBlbmQgKi8KKwl0aW1bMF0gPSBXTEFOX0VJRF9USU07CisJdGltWzFdID0gMzsKKwl0aW1bMl0gPSAwOworCXRpbVszXSA9IGR0aW1fcGVyaW9kOworCXRpbVs0XSA9IDA7CisKKwlpZiAoZHRpbV9sZW4gPiAzKQorCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gKGR0aW1fbGVuIC0gMykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2JlYWNvbl91cGRhdGUoc3RydWN0IHA1NF9jb21tb24gKnByaXYsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBza19idWZmICpiZWFjb247CisJaW50IHJldDsKKworCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCB2aWYpOworCWlmICghYmVhY29uKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBwNTRfYmVhY29uX2Zvcm1hdF9pZV90aW0oYmVhY29uKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBEdXJpbmcgb3BlcmF0aW9uLCB0aGUgZmlybXdhcmUgdGFrZXMgY2FyZSBvZiBiZWFjb25pbmcuCisJICogVGhlIGRyaXZlciBvbmx5IG5lZWRzIHRvIHVwbG9hZCBhIG5ldyBiZWFjb24gdGVtcGxhdGUsIG9uY2UKKwkgKiB0aGUgdGVtcGxhdGUgd2FzIGNoYW5nZWQgYnkgdGhlIHN0YWNrIG9yIHVzZXJzcGFjZS4KKwkgKgorCSAqIExNQUMgQVBJIDMuMi4yIGFsc28gc3BlY2lmaWVzIHRoYXQgdGhlIGRyaXZlciBkb2VzIG5vdCBuZWVkCisJICogdG8gY2FuY2VsIHRoZSBvbGQgYmVhY29uIHRlbXBsYXRlIGJ5IGhhbmQsIGluc3RlYWQgdGhlIGZpcm13YXJlCisJICogd2lsbCByZWxlYXNlIHRoZSBwcmV2aW91cyBvbmUgdGhyb3VnaCB0aGUgZmVlZGJhY2sgbWVjaGFuaXNtLgorCSAqLworCVdBUk5fT04ocDU0X3R4XzgwMjExKHByaXYtPmh3LCBiZWFjb24pKTsKKwlwcml2LT50c2ZfaGlnaDMyID0gMDsKKwlwcml2LT50c2ZfbG93MzIgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJZXJyID0gcHJpdi0+b3BlbihkZXYpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1swXSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNywgNDcpOworCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1sxXSwgMHgwMDAyLCAweDAwMDcsIDB4MDAwZiwgOTQpOworCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1syXSwgMHgwMDAzLCAweDAwMGYsIDB4MDNmZiwgMCk7CisJUDU0X1NFVF9RVUVVRShwcml2LT5xb3NfcGFyYW1zWzNdLCAweDAwMDcsIDB4MDAwZiwgMHgwM2ZmLCAwKTsKKwllcnIgPSBwNTRfc2V0X2VkY2YocHJpdik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwltZW1zZXQocHJpdi0+YnNzaWQsIH4wLCBFVEhfQUxFTik7CisJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CisJZXJyID0gcDU0X3NldHVwX21hYyhwcml2KTsKKwlpZiAoZXJyKSB7CisJCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKKwkJZ290byBvdXQ7CisJfQorCisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhkZXYsICZwcml2LT53b3JrLCAwKTsKKworCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOworCWVyciA9IHA1NF9zZXRfbGVkcyhwcml2KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcDU0X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOworCXA1NF9zZXRfbGVkcyhwcml2KTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yayk7CisKKwlwcml2LT5zdG9wKGRldik7CisJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT50eF9wZW5kaW5nKTsKKwlza2JfcXVldWVfcHVyZ2UoJnByaXYtPnR4X3F1ZXVlKTsKKwlmb3IgKGkgPSAwOyBpIDwgUDU0X1FVRVVFX05VTTsgaSsrKSB7CisJCXByaXYtPnR4X3N0YXRzW2ldLmNvdW50ID0gMDsKKwkJcHJpdi0+dHhfc3RhdHNbaV0ubGVuID0gMDsKKwl9CisKKwlwcml2LT5iZWFjb25fcmVxX2lkID0gY3B1X3RvX2xlMzIoMCk7CisJcHJpdi0+dHNmX2hpZ2gzMiA9IHByaXYtPnRzZl9sb3czMiA9IDA7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKK30KKworc3RhdGljIGludCBwNTRfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgeworCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcHJpdi0+dmlmID0gY29uZi0+dmlmOworCisJc3dpdGNoIChjb25mLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CisJCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJbWVtY3B5KHByaXYtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXA1NF9zZXR1cF9tYWMocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcDU0X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXByaXYtPnZpZiA9IE5VTEw7CisKKwkvKgorCSAqIExNQUMgQVBJIDMuMi4yIHN0YXRlcyB0aGF0IGFueSBhY3RpdmUgYmVhY29uIHRlbXBsYXRlIG11c3QgYmUKKwkgKiBjYW5jZWxlZCBieSB0aGUgZHJpdmVyIGJlZm9yZSBhdHRlbXB0aW5nIGEgbW9kZSB0cmFuc2l0aW9uLgorCSAqLworCWlmIChsZTMyX3RvX2NwdShwcml2LT5iZWFjb25fcmVxX2lkKSAhPSAwKSB7CisJCXA1NF90eF9jYW5jZWwocHJpdiwgcHJpdi0+YmVhY29uX3JlcV9pZCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZwcml2LT5iZWFjb25fY29tcCwgSFopOworCX0KKwlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKKwltZW1zZXQocHJpdi0+bWFjX2FkZHIsIDAsIEVUSF9BTEVOKTsKKwltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwlwNTRfc2V0dXBfbWFjKHByaXYpOworCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikKKwkJcHJpdi0+b3V0cHV0X3Bvd2VyID0gY29uZi0+cG93ZXJfbGV2ZWwgPDwgMjsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7CisJCXJldCA9IHA1NF9zY2FuKHByaXYsIFA1NF9TQ0FOX0VYSVQsIDApOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCXJldCA9IHA1NF9zZXRfcHMocHJpdik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRSkgeworCQlyZXQgPSBwNTRfc2V0dXBfbWFjKHByaXYpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwNTRfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSB1NjQgbXVsdGljYXN0KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9QUk9NSVNDX0lOX0JTUyB8CisJCQlGSUZfT1RIRVJfQlNTOworCisJcHJpdi0+ZmlsdGVyX2ZsYWdzID0gKnRvdGFsX2ZsYWdzOworCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUykpCisJCXA1NF9zZXR1cF9tYWMocHJpdik7Cit9CisKK3N0YXRpYyBpbnQgcDU0X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgcXVldWUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlpZiAocXVldWUgPCBkZXYtPnF1ZXVlcykgeworCQlQNTRfU0VUX1FVRVVFKHByaXYtPnFvc19wYXJhbXNbcXVldWVdLCBwYXJhbXMtPmFpZnMsCisJCQlwYXJhbXMtPmN3X21pbiwgcGFyYW1zLT5jd19tYXgsIHBhcmFtcy0+dHhvcCk7CisJCXJldCA9IHA1NF9zZXRfZWRjZihwcml2KTsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDU0X2NvbW1vbiwKKwkJCQkJICAgICAgIHdvcmsud29yayk7CisKKwlpZiAodW5saWtlbHkocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkpCisJCXJldHVybiA7CisKKwkvKgorCSAqIFRPRE86IHdhbGsgdGhyb3VnaCB0eF9xdWV1ZSBhbmQgZG8gdGhlIGZvbGxvd2luZyB0YXNrcworCSAqIAkxLiBpbml0aWF0ZSBidXJzdHMuCisJICogICAgICAyLiBjYW5jZWwgc3R1Y2sgZnJhbWVzIC8gcmVzZXQgdGhlIGRldmljZSBpZiBuZWNlc3NhcnkuCisJICovCisKKwlwNTRfZmV0Y2hfc3RhdGlzdGljcyhwcml2KTsKK30KKworc3RhdGljIGludCBwNTRfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwltZW1jcHkoc3RhdHMsICZwcml2LT5zdGF0cywgc2l6ZW9mKCpzdGF0cykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NF9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJbWVtY3B5KHN0YXRzLCAmcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0RBVEFdLAorCSAgICAgICBzaXplb2Yoc3RhdHNbMF0pICogZGV2LT5xdWV1ZXMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwNTRfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCisJCQkJIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgeworCQltZW1jcHkocHJpdi0+YnNzaWQsIGluZm8tPmJzc2lkLCBFVEhfQUxFTik7CisJCXA1NF9zZXR1cF9tYWMocHJpdik7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKKwkJcDU0X3NjYW4ocHJpdiwgUDU0X1NDQU5fRVhJVCwgMCk7CisJCXA1NF9zZXR1cF9tYWMocHJpdik7CisJCXA1NF9iZWFjb25fdXBkYXRlKHByaXYsIHZpZik7CisJCXA1NF9zZXRfZWRjZihwcml2KTsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIChCU1NfQ0hBTkdFRF9FUlBfU0xPVCB8IEJTU19DSEFOR0VEX0JFQUNPTikpIHsKKwkJcHJpdi0+dXNlX3Nob3J0X3Nsb3QgPSBpbmZvLT51c2Vfc2hvcnRfc2xvdDsKKwkJcDU0X3NldF9lZGNmKHByaXYpOworCX0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7CisJCWlmIChkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJcHJpdi0+YmFzaWNfcmF0ZV9tYXNrID0gKGluZm8tPmJhc2ljX3JhdGVzIDw8IDQpOworCQllbHNlCisJCQlwcml2LT5iYXNpY19yYXRlX21hc2sgPSBpbmZvLT5iYXNpY19yYXRlczsKKwkJcDU0X3NldHVwX21hYyhwcml2KTsKKwkJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwMCkKKwkJCXA1NF9zY2FuKHByaXYsIFA1NF9TQ0FOX0VYSVQsIDApOworCX0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CisJCWlmIChpbmZvLT5hc3NvYykgeworCQkJcHJpdi0+YWlkID0gaW5mby0+YWlkOworCQkJcHJpdi0+d2FrZXVwX3RpbWVyID0gaW5mby0+YmVhY29uX2ludCAqCisJCQkJCSAgICAgaW5mby0+ZHRpbV9wZXJpb2QgKiA1OworCQkJcDU0X3NldHVwX21hYyhwcml2KTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPndha2V1cF90aW1lciA9IDUwMDsKKwkJCXByaXYtPmFpZCA9IDA7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IHA1NF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgZW51bSBzZXRfa2V5X2NtZCBjbWQsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCWludCBzbG90LCByZXQgPSAwOworCXU4IGFsZ28gPSAwOworCXU4ICphZGRyID0gTlVMTDsKKworCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCWlmIChjbWQgPT0gU0VUX0tFWSkgeworCQlzd2l0Y2ggKGtleS0+YWxnKSB7CisJCWNhc2UgQUxHX1RLSVA6CisJCQlpZiAoIShwcml2LT5wcml2YWN5X2NhcHMgJiAoQlJfREVTQ19QUklWX0NBUF9NSUNIQUVMIHwKKwkJCSAgICAgIEJSX0RFU0NfUFJJVl9DQVBfVEtJUCkpKSB7CisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJCQlhbGdvID0gUDU0X0NSWVBUT19US0lQTUlDSEFFTDsKKwkJCWJyZWFrOworCQljYXNlIEFMR19XRVA6CisJCQlpZiAoIShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX1dFUCkpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwkJCWFsZ28gPSBQNTRfQ1JZUFRPX1dFUDsKKwkJCWJyZWFrOworCQljYXNlIEFMR19DQ01QOgorCQkJaWYgKCEocHJpdi0+cHJpdmFjeV9jYXBzICYgQlJfREVTQ19QUklWX0NBUF9BRVNDQ01QKSkgeworCQkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOworCQkJYWxnbyA9IFA1NF9DUllQVE9fQUVTQ0NNUDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwkJc2xvdCA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKHByaXYtPnVzZWRfcnhrZXlzLAorCQkJCQkgICAgICAgcHJpdi0+cnhfa2V5Y2FjaGVfc2l6ZSwgMCk7CisKKwkJaWYgKHNsb3QgPCAwKSB7CisJCQkvKgorCQkJICogVGhlIGRldmljZSBzdXBwb3J0cyB0aGUgY2hvb3NlbiBhbGdvcml0aG0sIGJ1dCB0aGUKKwkJCSAqIGZpcm13YXJlIGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGtleSBzbG90cyB0byBzdG9yZQorCQkJICogYWxsIG9mIHRoZW0uCisJCQkgKiBCdXQgZW5jcnlwdGlvbiBvZmZsb2FkIGZvciBvdXRnb2luZyBmcmFtZXMgaXMgYWx3YXlzCisJCQkgKiBwb3NzaWJsZSwgc28gd2UganVzdCBwcmV0ZW5kIHRoYXQgdGhlIHVwbG9hZCB3YXMKKwkJCSAqIHN1Y2Nlc3NmdWwgYW5kIGRvIHRoZSBkZWNyeXB0aW9uIGluIHNvZnR3YXJlLgorCQkJICovCisKKwkJCS8qIG1hcmsgdGhlIGtleSBhcyBpbnZhbGlkLiAqLworCQkJa2V5LT5od19rZXlfaWR4ID0gMHhmZjsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0gZWxzZSB7CisJCXNsb3QgPSBrZXktPmh3X2tleV9pZHg7CisKKwkJaWYgKHNsb3QgPT0gMHhmZikgeworCQkJLyogVGhpcyBrZXkgd2FzIG5vdCB1cGxvYWRlZCBpbnRvIHRoZSByeCBrZXkgY2FjaGUuICovCisKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihwcml2LT51c2VkX3J4a2V5cywgc2xvdCwgMCk7CisJCWFsZ28gPSAwOworCX0KKworCWlmIChzdGEpCisJCWFkZHIgPSBzdGEtPmFkZHI7CisKKwlyZXQgPSBwNTRfdXBsb2FkX2tleShwcml2LCBhbGdvLCBzbG90LCBrZXktPmtleWlkeCwKKwkJCSAgICAga2V5LT5rZXlsZW4sIGFkZHIsIGtleS0+a2V5KTsKKwlpZiAocmV0KSB7CisJCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihwcml2LT51c2VkX3J4a2V5cywgc2xvdCwgMCk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJa2V5LT5od19rZXlfaWR4ID0gc2xvdDsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBwNTRfb3BzID0geworCS50eAkJCT0gcDU0X3R4XzgwMjExLAorCS5zdGFydAkJCT0gcDU0X3N0YXJ0LAorCS5zdG9wCQkJPSBwNTRfc3RvcCwKKwkuYWRkX2ludGVyZmFjZQkJPSBwNTRfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZQk9IHA1NF9yZW1vdmVfaW50ZXJmYWNlLAorCS5zZXRfdGltCQk9IHA1NF9zZXRfdGltLAorCS5zdGFfbm90aWZ5CQk9IHA1NF9zdGFfbm90aWZ5LAorCS5zZXRfa2V5CQk9IHA1NF9zZXRfa2V5LAorCS5jb25maWcJCQk9IHA1NF9jb25maWcsCisJLmJzc19pbmZvX2NoYW5nZWQJPSBwNTRfYnNzX2luZm9fY2hhbmdlZCwKKwkuY29uZmlndXJlX2ZpbHRlcgk9IHA1NF9jb25maWd1cmVfZmlsdGVyLAorCS5jb25mX3R4CQk9IHA1NF9jb25mX3R4LAorCS5nZXRfc3RhdHMJCT0gcDU0X2dldF9zdGF0cywKKwkuZ2V0X3R4X3N0YXRzCQk9IHA1NF9nZXRfdHhfc3RhdHMKK307CisKK3N0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXY7CisKKwlkZXYgPSBpZWVlODAyMTFfYWxsb2NfaHcocHJpdl9kYXRhX2xlbiwgJnA1NF9vcHMpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYgPSBkZXYtPnByaXY7CisJcHJpdi0+aHcgPSBkZXY7CisJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCXByaXYtPmJhc2ljX3JhdGVfbWFzayA9IDB4MTVmOworCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9zdGF0c19sb2NrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eF9xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcGVuZGluZyk7CisJZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyB8CisJCSAgICAgSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVIgfAorCQkgICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07CisKKwlkZXYtPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAorCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQykgfAorCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAorCQkJCSAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKKworCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7CS8qIFRPRE86IGZpbmQgYWN0dWFsIHZhbHVlICovCisJcHJpdi0+YmVhY29uX3JlcV9pZCA9IGNwdV90b19sZTMyKDApOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9CRUFDT05dLmxpbWl0ID0gMTsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfRldTQ0FOXS5saW1pdCA9IDE7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX01HTVRdLmxpbWl0ID0gMzsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQ0FCXS5saW1pdCA9IDM7CisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0RBVEFdLmxpbWl0ID0gNTsKKwlkZXYtPnF1ZXVlcyA9IDE7CisJcHJpdi0+bm9pc2UgPSAtOTQ7CisJLyoKKwkgKiBXZSBzdXBwb3J0IGF0IG1vc3QgOCB0cmllcyBubyBtYXR0ZXIgd2hpY2ggcmF0ZSB0aGV5J3JlIGF0LAorCSAqIHdlIGNhbm5vdCBzdXBwb3J0IG1heF9yYXRlcyAqIG1heF9yYXRlX3RyaWVzIGFzIHdlIHNldCBpdAorCSAqIGhlcmUsIGJ1dCBzZXR0aW5nIGl0IGNvcnJlY3RseSB0byA0LzIgb3Igc28gd291bGQgbGltaXQgdXMKKwkgKiBhcnRpZmljaWFsbHkgaWYgdGhlIFJDIGFsZ29yaXRobSB3YW50cyBqdXN0IHR3byByYXRlcywgc28KKwkgKiBsZXQncyBzYXkgNC83LCB3ZSdsbCByZWRpc3RyaWJ1dGUgaXQgYXQgVFggdGltZSwgc2VlIHRoZQorCSAqIGNvbW1lbnRzIHRoZXJlLgorCSAqLworCWRldi0+bWF4X3JhdGVzID0gNDsKKwlkZXYtPm1heF9yYXRlX3RyaWVzID0gNzsKKwlkZXYtPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIDQgKworCQkJCSBzaXplb2Yoc3RydWN0IHA1NF90eF9kYXRhKTsKKworCS8qCisJICogRm9yIG5vdywgZGlzYWJsZSBQUyBieSBkZWZhdWx0IGJlY2F1c2UgaXQgYWZmZWN0cworCSAqIGxpbmsgc3RhYmlsaXR5IHNpZ25pZmljYW50bHkuCisJICovCisJZGV2LT53aXBoeS0+cHNfZGVmYXVsdCA9IGZhbHNlOworCisJbXV0ZXhfaW5pdCgmcHJpdi0+Y29uZl9tdXRleCk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+ZWVwcm9tX211dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJnByaXYtPmVlcHJvbV9jb21wKTsKKwlpbml0X2NvbXBsZXRpb24oJnByaXYtPmJlYWNvbl9jb21wKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d29yaywgcDU0X3dvcmspOworCisJcmV0dXJuIGRldjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9pbml0X2NvbW1vbik7CisKK2ludCBwNTRfcmVnaXN0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IGRldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHBkZXYsICJDYW5ub3QgcmVnaXN0ZXIgZGV2aWNlICglZCkuXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworI2lmZGVmIENPTkZJR19QNTRfTEVEUworCWVyciA9IHA1NF9pbml0X2xlZHMocHJpdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKyNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KKworCWRldl9pbmZvKHBkZXYsICJpcyByZWdpc3RlcmVkIGFzICclcydcbiIsIHdpcGh5X25hbWUoZGV2LT53aXBoeSkpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlZ2lzdGVyX2NvbW1vbik7CisKK3ZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBpKyspCisJCWtmcmVlKHByaXYtPmJhbmRfdGFibGVbaV0pOworCisJa2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7CisJa2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKKwlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKKwlrZnJlZShwcml2LT51c2VkX3J4a2V5cyk7CisJcHJpdi0+aXFfYXV0b2NhbCA9IE5VTEw7CisJcHJpdi0+b3V0cHV0X2xpbWl0ID0gTlVMTDsKKwlwcml2LT5jdXJ2ZV9kYXRhID0gTlVMTDsKKwlwcml2LT51c2VkX3J4a2V5cyA9IE5VTEw7CisJaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9mcmVlX2NvbW1vbik7CisKK3ZvaWQgcDU0X3VucmVnaXN0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKworI2lmZGVmIENPTkZJR19QNTRfTEVEUworCXA1NF91bnJlZ2lzdGVyX2xlZHMocHJpdik7CisjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCisKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOworCW11dGV4X2Rlc3Ryb3koJnByaXYtPmNvbmZfbXV0ZXgpOworCW11dGV4X2Rlc3Ryb3koJnByaXYtPmVlcHJvbV9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfdW5yZWdpc3Rlcl9jb21tb24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCmluZGV4IGRiM2RmOTQuLjFhZmMzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKQEAgLTEsNiArMSwzIEBACi0jaWZuZGVmIFA1NF9ICi0jZGVmaW5lIFA1NF9ICi0KIC8qCiAgKiBTaGFyZWQgZGVmaW5lcyBmb3IgYWxsIG1hYzgwMjExIFByaXNtNTQgY29kZQogICoKQEAgLTE0LDM5ICsxMSw3OCBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2lmbmRlZiBQNTRfSAorI2RlZmluZSBQNTRfSAorCiAjaWZkZWYgQ09ORklHX1A1NF9MRURTCiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2VuZGlmIC8qIENPTkZJR19QNTRfTEVEUyAqLwogCi1lbnVtIHA1NF9jb250cm9sX2ZyYW1lX3R5cGVzIHsKLQlQNTRfQ09OVFJPTF9UWVBFX1NFVFVQID0gMCwKLQlQNTRfQ09OVFJPTF9UWVBFX1NDQU4sCi0JUDU0X0NPTlRST0xfVFlQRV9UUkFQLAotCVA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwKLQlQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLAotCVA1NF9DT05UUk9MX1RZUEVfVElNLAotCVA1NF9DT05UUk9MX1RZUEVfUFNNLAotCVA1NF9DT05UUk9MX1RZUEVfVFhDQU5DRUwsCi0JUDU0X0NPTlRST0xfVFlQRV9UWERPTkUsCi0JUDU0X0NPTlRST0xfVFlQRV9CVVJTVCwKLQlQNTRfQ09OVFJPTF9UWVBFX1NUQVRfUkVBREJBQ0ssCi0JUDU0X0NPTlRST0xfVFlQRV9CQlAsCi0JUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssCi0JUDU0X0NPTlRST0xfVFlQRV9MRUQsCi0JUDU0X0NPTlRST0xfVFlQRV9HUElPLAotCVA1NF9DT05UUk9MX1RZUEVfVElNRVIsCi0JUDU0X0NPTlRST0xfVFlQRV9NT0RVTEFUSU9OLAotCVA1NF9DT05UUk9MX1RZUEVfU1lOVEhfQ09ORklHLAotCVA1NF9DT05UUk9MX1RZUEVfREVURUNUT1JfVkFMVUUsCi0JUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywKLQlQNTRfQ09OVFJPTF9UWVBFX0NDRV9RVUlFVCwKLQlQNTRfQ09OVFJPTF9UWVBFX1BTTV9TVEFfVU5MT0NLLAotCVA1NF9DT05UUk9MX1RZUEVfUENTLAotCVA1NF9DT05UUk9MX1RZUEVfQlRfQkFMQU5DRVIgPSAyOCwKLQlQNTRfQ09OVFJPTF9UWVBFX0dST1VQX0FERFJFU1NfVEFCTEUgPSAzMCwKLQlQNTRfQ09OVFJPTF9UWVBFX0FSUFRBQkxFID0gMzEsCi0JUDU0X0NPTlRST0xfVFlQRV9CVF9PUFRJT05TID0gMzUKLX07CisjZGVmaW5lIElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFIgMHgyMDAwMAorCisjZGVmaW5lIEJSX0NPREVfTUlOCQkJMHg4MDAwMDAwMAorI2RlZmluZSBCUl9DT0RFX0NPTVBPTkVOVF9JRAkJMHg4MDAwMDAwMQorI2RlZmluZSBCUl9DT0RFX0NPTVBPTkVOVF9WRVJTSU9OCTB4ODAwMDAwMDIKKyNkZWZpbmUgQlJfQ09ERV9ERVBFTkRFTlRfSUYJCTB4ODAwMDAwMDMKKyNkZWZpbmUgQlJfQ09ERV9FWFBPU0VEX0lGCQkweDgwMDAwMDA0CisjZGVmaW5lIEJSX0NPREVfREVTQ1IJCQkweDgwMDAwMTAxCisjZGVmaW5lIEJSX0NPREVfTUFYCQkJMHg4RkZGRkZGRgorI2RlZmluZSBCUl9DT0RFX0VORF9PRl9CUkEJCTB4RkYwMDAwRkYKKyNkZWZpbmUgTEVHQUNZX0JSX0NPREVfRU5EX09GX0JSQQkweEZGRkZGRkZGCisKK3N0cnVjdCBib290cmVjIHsKKwlfX2xlMzIgY29kZTsKKwlfX2xlMzIgbGVuOworCXUzMiBkYXRhWzEwXTsKK30gX19wYWNrZWQ7CisKKy8qIEludGVyZmFjZSByb2xlIGRlZmluaXRpb25zICovCisjZGVmaW5lIEJSX0lOVEVSRkFDRV9ST0xFX1NFUlZFUgkweDAwMDAKKyNkZWZpbmUgQlJfSU5URVJGQUNFX1JPTEVfQ0xJRU5UCTB4ODAwMAorCisjZGVmaW5lIEJSX0RFU0NfUFJJVl9DQVBfV0VQCQlCSVQoMCkKKyNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9US0lQCQlCSVQoMSkKKyNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9NSUNIQUVMCUJJVCgyKQorI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX0NDWF9DUAkJQklUKDMpCisjZGVmaW5lIEJSX0RFU0NfUFJJVl9DQVBfQ0NYX01JQwlCSVQoNCkKKyNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9BRVNDQ01QCUJJVCg1KQorCitzdHJ1Y3QgYm9vdHJlY19kZXNjIHsKKwlfX2xlMTYgbW9kZXM7CisJX19sZTE2IGZsYWdzOworCV9fbGUzMiByeF9zdGFydDsKKwlfX2xlMzIgcnhfZW5kOworCXU4IGhlYWRyb29tOworCXU4IHRhaWxyb29tOworCXU4IHR4X3F1ZXVlczsKKwl1OCB0eF9kZXB0aDsKKwl1OCBwcml2YWN5X2NhcHM7CisJdTggcnhfa2V5Y2FjaGVfc2l6ZTsKKwl1OCB0aW1lX3NpemU7CisJdTggcGFkZGluZzsKKwl1OCByYXRlc1sxNl07CisJdTggcGFkZGluZzJbNF07CisJX19sZTE2IHJ4X210dTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgRldfRk1BQyAweDQ2NGQ0MTQzCisjZGVmaW5lIEZXX0xNODYgMHg0YzRkMzgzNgorI2RlZmluZSBGV19MTTg3IDB4NGM0ZDM4MzcKKyNkZWZpbmUgRldfTE0yMCAweDRjNGQzMjMwCisKK3N0cnVjdCBib290cmVjX2NvbXBfaWQgeworCV9fbGUzMiBmd192YXJpYW50OworfSBfX3BhY2tlZDsKKworc3RydWN0IGJvb3RyZWNfY29tcF92ZXIgeworCWNoYXIgZndfdmVyc2lvblsyNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYm9vdHJlY19lbmQgeworCV9fbGUxNiBjcmM7CisJdTggcGFkZGluZ1syXTsKKwl1OCBtZDVbMTZdOworfSBfX3BhY2tlZDsKIAogLyogcHJvdmlkZSAxNiBieXRlcyBmb3IgdGhlIHRyYW5zcG9ydCBiYWNrLWVuZCAqLwogI2RlZmluZSBQNTRfVFhfSU5GT19EQVRBX1NJWkUJCTE2CkBAIC01NSwzNCArOTEsMzAgQEAKIHN0cnVjdCBwNTRfdHhfaW5mbyB7CiAJdTMyIHN0YXJ0X2FkZHI7CiAJdTMyIGVuZF9hZGRyOwotCXZvaWQgKmRhdGFbUDU0X1RYX0lORk9fREFUQV9TSVpFIC8gc2l6ZW9mKHZvaWQgKildOworCXVuaW9uIHsKKwkJdm9pZCAqZGF0YVtQNTRfVFhfSU5GT19EQVRBX1NJWkUgLyBzaXplb2Yodm9pZCAqKV07CisJCXN0cnVjdCB7CisJCQl1MzIgZXh0cmFfbGVuOworCQl9OworCX07CiB9OwogCiAjZGVmaW5lIFA1NF9NQVhfQ1RSTF9GUkFNRV9MRU4JCTB4MTAwMAogCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19DT05UUk9MCQlCSVQoMTUpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VUCShCSVQoMTUpICsgQklUKDApKQotCi1zdHJ1Y3QgcDU0X2hkciB7Ci0JX19sZTE2IGZsYWdzOwotCV9fbGUxNiBsZW47Ci0JX19sZTMyIHJlcV9pZDsKLQlfX2xlMTYgdHlwZTsJLyogZW51bSBwNTRfY29udHJvbF9mcmFtZV90eXBlcyAqLwotCXU4IHJ0c190cmllczsKLQl1OCB0cmllczsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgRlJFRV9BRlRFUl9UWChza2IpCQkJCQkJXAotCSgoKChzdHJ1Y3QgcDU0X2hkciAqKSAoKHN0cnVjdCBza19idWZmICopIHNrYiktPmRhdGEpLT4JCVwKLQlmbGFncykgPT0gY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQpKQorI2RlZmluZSBQNTRfU0VUX1FVRVVFKHF1ZXVlLCBhaV9mcywgY3dfbWluLCBjd19tYXgsIF90eG9wKQlcCitkbyB7CQkJCQkJCQlcCisJcXVldWUuYWlmcyA9IGNwdV90b19sZTE2KGFpX2ZzKTsJCQlcCisJcXVldWUuY3dtaW4gPSBjcHVfdG9fbGUxNihjd19taW4pOwkJCVwKKwlxdWV1ZS5jd21heCA9IGNwdV90b19sZTE2KGN3X21heCk7CQkJXAorCXF1ZXVlLnR4b3AgPSBjcHVfdG9fbGUxNihfdHhvcCk7CQkJXAorfSB3aGlsZSAoMCkKIAogc3RydWN0IHA1NF9lZGNmX3F1ZXVlX3BhcmFtIHsKIAlfX2xlMTYgYWlmczsKIAlfX2xlMTYgY3dtaW47CiAJX19sZTE2IGN3bWF4OwogCV9fbGUxNiB0eG9wOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fcGFja2VkOwogCiBzdHJ1Y3QgcDU0X3Jzc2lfbGluZWFyX2FwcHJveGltYXRpb24gewogCXMxNiBtdWw7CkBAIC0xMDEsMTMgKzEzMyw2IEBACiAKICNkZWZpbmUgRUVQUk9NX1JFQURCQUNLX0xFTiAweDNmYwogCi0jZGVmaW5lIElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFIgMHgyMDAwMAotCi0jZGVmaW5lIEZXX0ZNQUMgMHg0NjRkNDE0MwotI2RlZmluZSBGV19MTTg2IDB4NGM0ZDM4MzYKLSNkZWZpbmUgRldfTE04NyAweDRjNGQzODM3Ci0jZGVmaW5lIEZXX0xNMjAgMHg0YzRkMzIzMAotCiBlbnVtIGZ3X3N0YXRlIHsKIAlGV19TVEFURV9PRkYsCiAJRldfU1RBVEVfQk9PVElORywKQEAgLTEzOCw2ICsxNjMsNyBAQAogCXZvaWQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQgKCpvcGVuKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOwogCXZvaWQgKCpzdG9wKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOworCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcGVuZGluZzsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOwogCXN0cnVjdCBtdXRleCBjb25mX211dGV4OwogCkBAIC0xNTYsNiArMTgyLDcgQEAKIAogCS8qIChlKURDRiAvIFFPUyBzdGF0ZSAqLwogCWJvb2wgdXNlX3Nob3J0X3Nsb3Q7CisJc3BpbmxvY2tfdCB0eF9zdGF0c19sb2NrOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbOF07CiAJc3RydWN0IHA1NF9lZGNmX3F1ZXVlX3BhcmFtIHFvc19wYXJhbXNbOF07CiAKQEAgLTE3MSw2ICsxOTgsNyBAQAogCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpjdXJ2ZV9kYXRhOwogCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpvdXRwdXRfbGltaXQ7CiAJc3RydWN0IHA1NF9yc3NpX2xpbmVhcl9hcHByb3hpbWF0aW9uIHJzc2ljYWxfZGJbSUVFRTgwMjExX05VTV9CQU5EU107CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZF90YWJsZVtJRUVFODAyMTFfTlVNX0JBTkRTXTsKIAogCS8qIEJCUC9NQUMgc3RhdGUgKi8KIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CkBAIC0xODEsNyArMjA5LDkgQEAKIAl1MzIgdHNmX2xvdzMyLCB0c2ZfaGlnaDMyOwogCXUzMiBiYXNpY19yYXRlX21hc2s7CiAJdTE2IGFpZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqY2FjaGVkX2JlYWNvbjsKKwlib29sIHBvd2Vyc2F2ZV9vdmVycmlkZTsKKwlfX2xlMzIgYmVhY29uX3JlcV9pZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBiZWFjb25fY29tcDsKIAogCS8qIGNyeXB0b2dyYXBoaWMgZW5naW5lIGluZm9ybWF0aW9uICovCiAJdTggcHJpdmFjeV9jYXBzOwpAQCAtMjAyLDE1ICsyMzIsMjAgQEAKIAkvKiBlZXByb20gaGFuZGxpbmcgKi8KIAl2b2lkICplZXByb207CiAJc3RydWN0IGNvbXBsZXRpb24gZWVwcm9tX2NvbXA7CisJc3RydWN0IG11dGV4IGVlcHJvbV9tdXRleDsKIH07CiAKKy8qIGludGVyZmFjZXMgZm9yIHRoZSBkcml2ZXJzICovCiBpbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHA1NF9mcmVlX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpOwogaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pOwogaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpOworCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpwNTRfaW5pdF9jb21tb24oc2l6ZV90IHByaXZfZGF0YV9sZW4pOwogaW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KTsKIHZvaWQgcDU0X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiAKK3ZvaWQgcDU0X3VucmVnaXN0ZXJfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CisKICNlbmRpZiAvKiBQNTRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmNhMTIyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYworKysgL2Rldi9udWxsCkBAIC0xLDI2ODggKzAsMCBAQAotLyoKLSAqIENvbW1vbiBjb2RlIGZvciBtYWM4MDIxMSBQcmlzbTU0IGRyaXZlcnMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgotICogQ29weXJpZ2h0IChjKSAyMDA3LCBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUB3ZWIuZGU+Ci0gKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KLSAqCi0gKiBCYXNlZCBvbjoKLSAqIC0gdGhlIGlzbHNtIChzb2Z0bWFjIHByaXNtNTQpIGRyaXZlciwgd2hpY2ggaXM6Ci0gKiAgIENvcHlyaWdodCAyMDA0LTIwMDYgSmVhbi1CYXB0aXN0ZSBOb3RlIDxqYm5vdGVAZ21haWwuY29tPiwgZXQgYWwuCi0gKiAtIHN0bGM0NXh4IGRyaXZlcgotICogICBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpZmRlZiBDT05GSUdfUDU0X0xFRFMKLSNpbmNsdWRlIDxsaW51eC9sZWRzLmg+Ci0jZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCi0KLSNpbmNsdWRlICJwNTQuaCIKLSNpbmNsdWRlICJwNTRjb21tb24uaCIKLQotc3RhdGljIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGJvb2wsIFNfSVJVR08pOwotTU9EVUxFX1BBUk1fREVTQyhub2h3Y3J5cHQsICJEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24uIik7Ci1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU29mdG1hYyBQcmlzbTU0IGNvbW1vbiBjb2RlIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVMoInByaXNtNTRjb21tb24iKTsKLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBwNTRfYmdyYXRlc1tdID0gewotCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMCwgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKLQl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDEsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCi0JeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAyLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAotCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCi0JeyAuYml0cmF0ZSA9IDYwLCAuaHdfdmFsdWUgPSA0LCB9LAotCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gNSwgfSwKLQl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSA2LCB9LAotCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDcsIH0sCi0JeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gOCwgfSwKLQl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSA5LCB9LAotCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDEwLCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDExLCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBwNTRfYmdjaGFubmVsc1tdID0gewotCXsgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1ZSA9IDUsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNywgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDgsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRfMkdIeiA9IHsKLQkuY2hhbm5lbHMgPSBwNTRfYmdjaGFubmVscywKLQkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUocDU0X2JnY2hhbm5lbHMpLAotCS5iaXRyYXRlcyA9IHA1NF9iZ3JhdGVzLAotCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYmdyYXRlcyksCi19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHA1NF9hcmF0ZXNbXSA9IHsKLQl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDQsIH0sCi0JeyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSA1LCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDYsIH0sCi0JeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gNywgfSwKLQl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA4LCB9LAotCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDksIH0sCi0JeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMTAsIH0sCi0JeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTEsIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHA1NF9hY2hhbm5lbHNbXSA9IHsKLQl7IC5jZW50ZXJfZnJlcSA9IDQ5MjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDQ5NDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDQ5NjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDQ5ODAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUwNDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUwNjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUwODAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUxNzAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUxODAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUxOTAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUyMDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUyMTAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUyMjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUyMzAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUyNDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUyNjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUyODAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUzMDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDUzMjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU1MDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU1MjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU1NDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU1NjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU1ODAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU2MDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU2MjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU2NDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU2NjAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU2ODAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU3MDAgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU3NDUgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU3NjUgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU3ODUgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU4MDUgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDU4MjUgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmRfNUdIeiA9IHsKLQkuY2hhbm5lbHMgPSBwNTRfYWNoYW5uZWxzLAotCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShwNTRfYWNoYW5uZWxzKSwKLQkuYml0cmF0ZXMgPSBwNTRfYXJhdGVzLAotCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShwNTRfYXJhdGVzKSwKLX07Ci0KLWludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBib290cmVjX2V4cF9pZiAqZXhwX2lmOwotCXN0cnVjdCBib290cmVjICpib290cmVjOwotCXUzMiAqZGF0YSA9ICh1MzIgKilmdy0+ZGF0YTsKLQl1MzIgKmVuZF9kYXRhID0gKHUzMiAqKWZ3LT5kYXRhICsgKGZ3LT5zaXplID4+IDIpOwotCXU4ICpmd192ZXJzaW9uID0gTlVMTDsKLQlzaXplX3QgbGVuOwotCWludCBpOwotCWludCBtYXhsZW47Ci0KLQlpZiAocHJpdi0+cnhfc3RhcnQpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKGRhdGEgPCBlbmRfZGF0YSAmJiAqZGF0YSkKLQkJZGF0YSsrOwotCi0Jd2hpbGUgKGRhdGEgPCBlbmRfZGF0YSAmJiAhKmRhdGEpCi0JCWRhdGErKzsKLQotCWJvb3RyZWMgPSAoc3RydWN0IGJvb3RyZWMgKikgZGF0YTsKLQotCXdoaWxlIChib290cmVjLT5kYXRhIDw9IGVuZF9kYXRhICYmCi0JICAgICAgIChib290cmVjLT5kYXRhICsgKGxlbiA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtPmxlbikpKSA8PSBlbmRfZGF0YSkgewotCQl1MzIgY29kZSA9IGxlMzJfdG9fY3B1KGJvb3RyZWMtPmNvZGUpOwotCQlzd2l0Y2ggKGNvZGUpIHsKLQkJY2FzZSBCUl9DT0RFX0NPTVBPTkVOVF9JRDoKLQkJCXByaXYtPmZ3X2ludGVyZmFjZSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopCi0JCQkJCSAgICAgYm9vdHJlYy0+ZGF0YSk7Ci0JCQlzd2l0Y2ggKHByaXYtPmZ3X2ludGVyZmFjZSkgewotCQkJY2FzZSBGV19MTTg2OgotCQkJY2FzZSBGV19MTTIwOgotCQkJY2FzZSBGV19MTTg3OiB7Ci0JCQkJY2hhciAqaWZ0eXBlID0gKGNoYXIgKilib290cmVjLT5kYXRhOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwNTQgZGV0ZWN0ZWQgYSBMTSVjJWMgIgotCQkJCQkJICJmaXJtd2FyZVxuIiwKLQkJCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJCQkJaWZ0eXBlWzJdLCBpZnR5cGVbM10pOwotCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgRldfRk1BQzoKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5zdXBwb3J0ZWQgZmlybXdhcmVcbiIsCi0JCQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQlJfQ09ERV9DT01QT05FTlRfVkVSU0lPTjoKLQkJCS8qIDI0IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFsbCBmaXJtd2FyZXMgKi8KLQkJCWlmIChzdHJubGVuKCh1bnNpZ25lZCBjaGFyKilib290cmVjLT5kYXRhLCAyNCkgPCAyNCkKLQkJCQlmd192ZXJzaW9uID0gKHVuc2lnbmVkIGNoYXIqKWJvb3RyZWMtPmRhdGE7Ci0JCQlicmVhazsKLQkJY2FzZSBCUl9DT0RFX0RFU0NSOiB7Ci0JCQlzdHJ1Y3QgYm9vdHJlY19kZXNjICpkZXNjID0KLQkJCQkoc3RydWN0IGJvb3RyZWNfZGVzYyAqKWJvb3RyZWMtPmRhdGE7Ci0JCQlwcml2LT5yeF9zdGFydCA9IGxlMzJfdG9fY3B1KGRlc2MtPnJ4X3N0YXJ0KTsKLQkJCS8qIEZJWE1FIGFkZCBzYW5pdHkgY2hlY2tpbmcgKi8KLQkJCXByaXYtPnJ4X2VuZCA9IGxlMzJfdG9fY3B1KGRlc2MtPnJ4X2VuZCkgLSAweDM1MDA7Ci0JCQlwcml2LT5oZWFkcm9vbSA9IGRlc2MtPmhlYWRyb29tOwotCQkJcHJpdi0+dGFpbHJvb20gPSBkZXNjLT50YWlscm9vbTsKLQkJCXByaXYtPnByaXZhY3lfY2FwcyA9IGRlc2MtPnByaXZhY3lfY2FwczsKLQkJCXByaXYtPnJ4X2tleWNhY2hlX3NpemUgPSBkZXNjLT5yeF9rZXljYWNoZV9zaXplOwotCQkJaWYgKGxlMzJfdG9fY3B1KGJvb3RyZWMtPmxlbikgPT0gMTEpCi0JCQkJcHJpdi0+cnhfbXR1ID0gbGUxNl90b19jcHUoZGVzYy0+cnhfbXR1KTsKLQkJCWVsc2UKLQkJCQlwcml2LT5yeF9tdHUgPSAoc2l6ZV90KQotCQkJCQkweDYyMCAtIHByaXYtPnR4X2hkcl9sZW47Ci0JCQltYXhsZW4gPSBwcml2LT50eF9oZHJfbGVuICsgLyogVVNCIGRldmljZXMgKi8KLQkJCQkgc2l6ZW9mKHN0cnVjdCBwNTRfcnhfZGF0YSkgKwotCQkJCSA0ICsgLyogcnggYWxpZ25tZW50ICovCi0JCQkJIElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQ7Ci0JCQlpZiAocHJpdi0+cnhfbXR1ID4gbWF4bGVuICYmIFBBR0VfU0laRSA9PSA0MDk2KSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAicDU0OiByeF9tdHUgcmVkdWNlZCBmcm9tICVkICIKLQkJCQkJICAgICAgICAgInRvICVkXG4iLCBwcml2LT5yeF9tdHUsCi0JCQkJCQkgbWF4bGVuKTsKLQkJCQlwcml2LT5yeF9tdHUgPSBtYXhsZW47Ci0JCQl9Ci0JCQlicmVhazsKLQkJCX0KLQkJY2FzZSBCUl9DT0RFX0VYUE9TRURfSUY6Ci0JCQlleHBfaWYgPSAoc3RydWN0IGJvb3RyZWNfZXhwX2lmICopIGJvb3RyZWMtPmRhdGE7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAqIHNpemVvZigqZXhwX2lmKSAvIDQpOyBpKyspCi0JCQkJaWYgKGV4cF9pZltpXS5pZl9pZCA9PSBjcHVfdG9fbGUxNigweDFhKSkKLQkJCQkJcHJpdi0+ZndfdmFyID0gbGUxNl90b19jcHUoZXhwX2lmW2ldLnZhcmlhbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlJfQ09ERV9ERVBFTkRFTlRfSUY6Ci0JCQlicmVhazsKLQkJY2FzZSBCUl9DT0RFX0VORF9PRl9CUkE6Ci0JCWNhc2UgTEVHQUNZX0JSX0NPREVfRU5EX09GX0JSQToKLQkJCWVuZF9kYXRhID0gTlVMTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJYm9vdHJlYyA9IChzdHJ1Y3QgYm9vdHJlYyAqKSZib290cmVjLT5kYXRhW2xlbl07Ci0JfQotCi0JaWYgKGZ3X3ZlcnNpb24pCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGVyByZXYgJXMgLSBTb2Z0bWFjIHByb3RvY29sICV4LiV4XG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgZndfdmVyc2lvbiwKLQkJCXByaXYtPmZ3X3ZhciA+PiA4LCBwcml2LT5md192YXIgJiAweGZmKTsKLQotCWlmIChwcml2LT5md192YXIgPCAweDUwMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHlvdSBhcmUgdXNpbmcgYW4gb2Jzb2xldGUgZmlybXdhcmUuICIKLQkJICAgICAgICJ2aXNpdCBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL3A1NCAiCi0JCSAgICAgICAiYW5kIGdyYWIgb25lIGZvciBcImtlcm5lbCA+PSAyLjYuMjhcIiFcbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQotCWlmIChwcml2LT5md192YXIgPj0gMHgzMDApIHsKLQkJLyogRmlybXdhcmUgc3VwcG9ydHMgUW9TLCB1c2UgaXQhICovCi0JCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WT10ubGltaXQgPSAzOwotCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVkldLmxpbWl0ID0gNDsKLQkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JFXS5saW1pdCA9IDM7Ci0JCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19CS10ubGltaXQgPSAyOwotCQlkZXYtPnF1ZXVlcyA9IFA1NF9RVUVVRV9BQ19OVU07Ci0JfQotCi0JaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNyeXB0b2dyYXBoaWMgYWNjZWxlcmF0b3IgIgotCQkJCSAiV0VQOiVzLCBUS0lQOiVzLCBDQ01QOiVzXG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJCShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX1dFUCkgPyAiWUVTIiA6Ci0JCQkibm8iLCAocHJpdi0+cHJpdmFjeV9jYXBzICYgKEJSX0RFU0NfUFJJVl9DQVBfVEtJUCB8Ci0JCQkgQlJfREVTQ19QUklWX0NBUF9NSUNIQUVMKSkgPyAiWUVTIiA6ICJubyIsCi0JCQkocHJpdi0+cHJpdmFjeV9jYXBzICYgQlJfREVTQ19QUklWX0NBUF9BRVNDQ01QKSA/Ci0JCQkiWUVTIiA6ICJubyIpOwotCi0JCWlmIChwcml2LT5yeF9rZXljYWNoZV9zaXplKSB7Ci0JCQkvKgotCQkJICogTk9URToKLQkJCSAqCi0JCQkgKiBUaGUgZmlybXdhcmUgcHJvdmlkZXMgYXQgbW9zdCAyNTUgKDAgLSAyNTQpIHNsb3RzCi0JCQkgKiBmb3Iga2V5cyB3aGljaCBhcmUgdGhlbiB1c2VkIHRvIG9mZmxvYWQgZGVjcnlwdGlvbi4KLQkJCSAqIEFzIGEgcmVzdWx0IHRoZSAyNTUgZW50cnkgKGFrYSAweGZmKSBjYW4gYmUgdXNlZAotCQkJICogc2FmZWx5IGJ5IHRoZSBkcml2ZXIgdG8gbWFyayBrZXlzIHRoYXQgZGlkbid0IGZpdAotCQkJICogaW50byB0aGUgZnVsbCBjYWNoZS4gVGhpcyB0cmljayBzYXZlcyB1cyBmcm9tCi0JCQkgKiBrZWVwaW5nIGEgZXh0cmEgbGlzdCBmb3IgdXBsb2FkZWQga2V5cy4KLQkJCSAqLwotCi0JCQlwcml2LT51c2VkX3J4a2V5cyA9IGt6YWxsb2MoQklUU19UT19MT05HUygKLQkJCQlwcml2LT5yeF9rZXljYWNoZV9zaXplKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghcHJpdi0+dXNlZF9yeGtleXMpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9maXJtd2FyZSk7Ci0KLXN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfcmV2MChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgKmRzdDsKLQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjAgKnNyYzsKLQlzaXplX3QgY2RfbGVuID0gc2l6ZW9mKCpjdXJ2ZV9kYXRhKSArCi0JCShjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwqc2l6ZW9mKCpkc3QpICsgMikgKgotCQkgY3VydmVfZGF0YS0+Y2hhbm5lbHM7Ci0JdW5zaWduZWQgaW50IGksIGo7Ci0Jdm9pZCAqc291cmNlLCAqdGFyZ2V0OwotCi0JcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwcml2LT5jdXJ2ZV9kYXRhKSArIGNkX2xlbiwKLQkJCQkgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOwotCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCi0JCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKLQlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOwotCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7Ci0Jc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSAoKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhKS0+ZGF0YTsKLQlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgewotCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7Ci0JCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKLQkJKigoX19sZTE2ICopdGFyZ2V0KSA9ICpmcmVxOwotCQl0YXJnZXQgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCWZvciAoaiA9IDA7IGogPCBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7IGorKykgewotCQkJZHN0ID0gdGFyZ2V0OwotCQkJc3JjID0gc291cmNlOwotCi0JCQlkc3QtPnJmX3Bvd2VyID0gc3JjLT5yZl9wb3dlcjsKLQkJCWRzdC0+cGFfZGV0ZWN0b3IgPSBzcmMtPnBhX2RldGVjdG9yOwotCQkJZHN0LT5kYXRhXzY0cWFtID0gc3JjLT5wY3Y7Ci0JCQkvKiAiaW52ZW50IiB0aGUgcG9pbnRzIGZvciB0aGUgb3RoZXIgbW9kdWxhdGlvbnMgKi8KLSNkZWZpbmUgU1VCKHgseSkgKHU4KSgoeCkgLSAoeSkpID4gKHgpID8gMCA6ICh4KSAtICh5KQotCQkJZHN0LT5kYXRhXzE2cWFtID0gU1VCKHNyYy0+cGN2LCAxMik7Ci0JCQlkc3QtPmRhdGFfcXBzayA9IFNVQihkc3QtPmRhdGFfMTZxYW0sIDEyKTsKLQkJCWRzdC0+ZGF0YV9icHNrID0gU1VCKGRzdC0+ZGF0YV9xcHNrLCAxMik7Ci0JCQlkc3QtPmRhdGFfYmFya2VyID0gU1VCKGRzdC0+ZGF0YV9icHNrLCAxNCk7Ci0jdW5kZWYgU1VCCi0JCQl0YXJnZXQgKz0gc2l6ZW9mKCpkc3QpOwotCQkJc291cmNlICs9IHNpemVvZigqc3JjKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgIHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlICpkc3Q7Ci0Jc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxICpzcmM7Ci0Jc2l6ZV90IGNkX2xlbiA9IHNpemVvZigqY3VydmVfZGF0YSkgKwotCQkoY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsKnNpemVvZigqZHN0KSArIDIpICoKLQkJIGN1cnZlX2RhdGEtPmNoYW5uZWxzOwotCXVuc2lnbmVkIGludCBpLCBqOwotCXZvaWQgKnNvdXJjZSwgKnRhcmdldDsKLQotCXByaXYtPmN1cnZlX2RhdGEgPSBremFsbG9jKGNkX2xlbiArIHNpemVvZigqcHJpdi0+Y3VydmVfZGF0YSksCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2LT5jdXJ2ZV9kYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMgPSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKLQlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplID0gc2l6ZW9mKF9fbGUxNikgKwotCQlzaXplb2YoKmRzdCkgKiBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7Ci0JcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhLCBkYXRhKTsKLQlwcml2LT5jdXJ2ZV9kYXRhLT5sZW4gPSBjZF9sZW47Ci0JbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEtPmRhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOwotCXNvdXJjZSA9IGN1cnZlX2RhdGEtPmRhdGE7Ci0JdGFyZ2V0ID0gKChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSktPmRhdGE7Ci0JZm9yIChpID0gMDsgaSA8IGN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKLQkJX19sZTE2ICpmcmVxID0gc291cmNlOwotCQlzb3VyY2UgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCSooKF9fbGUxNiAqKXRhcmdldCkgPSAqZnJlcTsKLQkJdGFyZ2V0ICs9IHNpemVvZihfX2xlMTYpOwotCQlmb3IgKGogPSAwOyBqIDwgY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsOyBqKyspIHsKLQkJCW1lbWNweSh0YXJnZXQsIHNvdXJjZSwgc2l6ZW9mKCpzcmMpKTsKLQotCQkJdGFyZ2V0ICs9IHNpemVvZigqZHN0KTsKLQkJCXNvdXJjZSArPSBzaXplb2YoKnNyYyk7Ci0JCX0KLQkJc291cmNlKys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpwNTRfcmZfY2hpcHNbXSA9IHsgIk5VTEwiLCAiRHVldHRlMyIsICJEdWV0dGUyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGcmlzYmVlIiwgIlhib3ciLCAiTG9uZ2JvdyIsICJOVUxMIiwgIk5VTEwiIH07Ci1zdGF0aWMgaW50IHA1NF9pbml0X3hib3dfc3ludGgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKLQotc3RhdGljIHZvaWQgcDU0X3BhcnNlX3Jzc2ljYWwoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICpkYXRhLCBpbnQgbGVuLAotCQkJICAgICB1MTYgdHlwZSkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgb2Zmc2V0ID0gKHR5cGUgPT0gUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fRVhURU5ERUQpID8gMiA6IDA7Ci0JaW50IGVudHJ5X3NpemUgPSBzaXplb2Yoc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSkgKyBvZmZzZXQ7Ci0JaW50IG51bV9lbnRyaWVzID0gKHR5cGUgPT0gUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT04pID8gMSA6IDI7Ci0JaW50IGk7Ci0KLQlpZiAobGVuICE9IChlbnRyeV9zaXplICogbnVtX2VudHJpZXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVua25vd24gcnNzaSBjYWxpYnJhdGlvbiBkYXRhIHBhY2tpbmcgIgotCQkJCSAiIHR5cGU6KCV4KSBsZW46JWQuXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgdHlwZSwgbGVuKTsKLQotCQlwcmludF9oZXhfZHVtcF9ieXRlcygicnNzaWNhbDoiLCBEVU1QX1BSRUZJWF9OT05FLAotCQkJCSAgICAgZGF0YSwgbGVuKTsKLQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgewotCQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpjYWwgPSBkYXRhICsKLQkJCQkJCSAob2Zmc2V0ICsgaSAqIGVudHJ5X3NpemUpOwotCQlwcml2LT5yc3NpY2FsX2RiW2ldLm11bCA9IChzMTYpIGxlMTZfdG9fY3B1KGNhbC0+bXVsKTsKLQkJcHJpdi0+cnNzaWNhbF9kYltpXS5hZGQgPSAoczE2KSBsZTE2X3RvX2NwdShjYWwtPmFkZCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwNTRfcGFyc2VfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotCXN0cnVjdCBwZGFfY291bnRyeSAqY291bnRyeTsKLQotCWlmIChsZW4gIT0gc2l6ZW9mKCpjb3VudHJ5KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmb3VuZCBwb3NzaWJsZSBpbnZhbGlkIGRlZmF1bHQgY291bnRyeSAiCi0JCQkJImVlcHJvbSBlbnRyeS4gKGVudHJ5IHNpemU6ICVkKVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGxlbik7Ci0KLQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImNvdW50cnk6IiwgRFVNUF9QUkVGSVhfTk9ORSwKLQkJCQkgICAgIGRhdGEsIGxlbik7Ci0KLQkJcHJpbnRrKEtFUk5fRVJSICIlczogcGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlLlxuIiwKLQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCQlyZXR1cm47Ci0JfQotCi0JY291bnRyeSA9IChzdHJ1Y3QgcGRhX2NvdW50cnkgKikgZGF0YTsKLQlpZiAoY291bnRyeS0+ZmxhZ3MgPT0gUERSX0NPVU5UUllfQ0VSVF9DT0RFX1BTRVVETykKLQkJcmVndWxhdG9yeV9oaW50KGRldi0+d2lwaHksIGNvdW50cnktPmFscGhhMik7Ci0JZWxzZSB7Ci0JCS8qIFRPRE86Ci0JCSAqIHdyaXRlIGEgc2hhcmVkL2NvbW1vbiBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzCi0JCSAqICJSZWd1bGF0b3J5IGRvbWFpbiBjb2RlcyIgKDgwMi4xMS0yMDA3IDE0LjguMi4yKQotCQkgKiBpbnRvIElTTy9JRUMgMzE2Ni0xIGFscGhhMiBmb3IgcmVndWxhdG9yeV9oaW50LgotCQkgKi8KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2NvbnZlcnRfb3V0cHV0X2xpbWl0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICAgICB1OCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmIChsZW4gPCAyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChkYXRhWzBdICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBvdXRwdXQgcG93ZXIgZGIgcmV2aXNpb246JXhcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBkYXRhWzBdKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKDIgKyBkYXRhWzFdICogc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpID4gbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByaXYtPm91dHB1dF9saW1pdCA9IGttYWxsb2MoZGF0YVsxXSAqCi0JCXNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSArCi0JCXNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXByaXYtPm91dHB1dF9saW1pdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlwcml2LT5vdXRwdXRfbGltaXQtPm9mZnNldCA9IDA7Ci0JcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzID0gZGF0YVsxXTsKLQlwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgPQotCQlzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCk7Ci0JcHJpdi0+b3V0cHV0X2xpbWl0LT5sZW4gPSBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgKgotCQkJCSAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzICsKLQkJCQkgIHByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0OwotCi0JbWVtY3B5KHByaXYtPm91dHB1dF9saW1pdC0+ZGF0YSwgJmRhdGFbMl0sCi0JICAgICAgIGRhdGFbMV0gKiBzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLAotCQkJCQkgICAgICAgc2l6ZV90IHRvdGFsX2xlbikKLXsKLQlzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqZHN0OwotCXNpemVfdCBwYXlsb2FkX2xlbiwgZW50cmllcywgZW50cnlfc2l6ZSwgb2Zmc2V0OwotCi0JcGF5bG9hZF9sZW4gPSBsZTE2X3RvX2NwdShzcmMtPmxlbik7Ci0JZW50cmllcyA9IGxlMTZfdG9fY3B1KHNyYy0+ZW50cmllcyk7Ci0JZW50cnlfc2l6ZSA9IGxlMTZfdG9fY3B1KHNyYy0+ZW50cnlfc2l6ZSk7Ci0Jb2Zmc2V0ID0gbGUxNl90b19jcHUoc3JjLT5vZmZzZXQpOwotCWlmICgoKGVudHJpZXMgKiBlbnRyeV9zaXplICsgb2Zmc2V0KSAhPSBwYXlsb2FkX2xlbikgfHwKLQkgICAgIChwYXlsb2FkX2xlbiArIHNpemVvZigqc3JjKSAhPSB0b3RhbF9sZW4pKQotCQlyZXR1cm4gTlVMTDsKLQotCWRzdCA9IGttYWxsb2Moc2l6ZW9mKCpkc3QpICsgcGF5bG9hZF9sZW4sIEdGUF9LRVJORUwpOwotCWlmICghZHN0KQotCQlyZXR1cm4gTlVMTDsKLQotCWRzdC0+ZW50cmllcyA9IGVudHJpZXM7Ci0JZHN0LT5lbnRyeV9zaXplID0gZW50cnlfc2l6ZTsKLQlkc3QtPm9mZnNldCA9IG9mZnNldDsKLQlkc3QtPmxlbiA9IHBheWxvYWRfbGVuOwotCi0JbWVtY3B5KGRzdC0+ZGF0YSwgc3JjLT5kYXRhLCBwYXlsb2FkX2xlbik7Ci0JcmV0dXJuIGRzdDsKLX0KLQotaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGVlcHJvbV9wZGFfd3JhcCAqd3JhcCA9IE5VTEw7Ci0Jc3RydWN0IHBkYV9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgaW50IGRhdGFfbGVuLCBlbnRyeV9sZW47Ci0Jdm9pZCAqdG1wOwotCWludCBlcnI7Ci0JdTggKmVuZCA9ICh1OCAqKWVlcHJvbSArIGxlbjsKLQl1MTYgc3ludGggPSAwOwotCi0Jd3JhcCA9IChzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICopIGVlcHJvbTsKLQllbnRyeSA9ICh2b2lkICopd3JhcC0+ZGF0YSArIGxlMTZfdG9fY3B1KHdyYXAtPmxlbik7Ci0KLQkvKiB2ZXJpZnkgdGhhdCBhdCBsZWFzdCB0aGUgZW50cnkgbGVuZ3RoL2NvZGUgZml0cyAqLwotCXdoaWxlICgodTggKillbnRyeSA8PSBlbmQgLSBzaXplb2YoKmVudHJ5KSkgewotCQllbnRyeV9sZW4gPSBsZTE2X3RvX2NwdShlbnRyeS0+bGVuKTsKLQkJZGF0YV9sZW4gPSAoKGVudHJ5X2xlbiAtIDEpIDw8IDEpOwotCi0JCS8qIGFib3J0IGlmIGVudHJ5IGV4Y2VlZHMgd2hvbGUgc3RydWN0dXJlICovCi0JCWlmICgodTggKillbnRyeSArIHNpemVvZigqZW50cnkpICsgZGF0YV9sZW4gPiBlbmQpCi0JCQlicmVhazsKLQotCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSkgewotCQljYXNlIFBEUl9NQUNfQUREUkVTUzoKLQkJCWlmIChkYXRhX2xlbiAhPSBFVEhfQUxFTikKLQkJCQlicmVhazsKLQkJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgZW50cnktPmRhdGEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTOgotCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCkKLQkJCQlicmVhazsKLQkJCWVyciA9IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoZGV2LCBlbnRyeS0+ZGF0YSwKLQkJCQkJCQlkYXRhX2xlbik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZXJyOwotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBOiB7Ci0JCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQotCQkJCShzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKillbnRyeS0+ZGF0YTsKLQkJCWlmIChkYXRhX2xlbiA8IHNpemVvZigqY3VydmVfZGF0YSkpIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlzd2l0Y2ggKGN1cnZlX2RhdGEtPmNhbF9tZXRob2RfcmV2KSB7Ci0JCQljYXNlIDA6Ci0JCQkJZXJyID0gcDU0X2NvbnZlcnRfcmV2MChkZXYsIGN1cnZlX2RhdGEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBjdXJ2ZSBkYXRhICIKLQkJCQkJCSJyZXZpc2lvbiAlZFxuIiwKLQkJCQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSksCi0JCQkJCQljdXJ2ZV9kYXRhLT5jYWxfbWV0aG9kX3Jldik7Ci0JCQkJZXJyID0gLUVOT0RFVjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChlcnIpCi0JCQkJZ290byBlcnI7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfUFJJU01fWklGX1RYX0lRX0NBTElCUkFUSU9OOgotCQkJcHJpdi0+aXFfYXV0b2NhbCA9IGttYWxsb2MoZGF0YV9sZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKCFwcml2LT5pcV9hdXRvY2FsKSB7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJbWVtY3B5KHByaXYtPmlxX2F1dG9jYWwsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7Ci0JCQlwcml2LT5pcV9hdXRvY2FsX2xlbiA9IGRhdGFfbGVuIC8gc2l6ZW9mKHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgotCQkJcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6Ci0JCQl0bXAgPSBlbnRyeS0+ZGF0YTsKLQkJCXdoaWxlICgodTggKil0bXAgPCBlbnRyeS0+ZGF0YSArIGRhdGFfbGVuKSB7Ci0JCQkJc3RydWN0IGJvb3RyZWNfZXhwX2lmICpleHBfaWYgPSB0bXA7Ci0JCQkJaWYgKGxlMTZfdG9fY3B1KGV4cF9pZi0+aWZfaWQpID09IDB4ZikKLQkJCQkJc3ludGggPSBsZTE2X3RvX2NwdShleHBfaWYtPnZhcmlhbnQpOwotCQkJCXRtcCArPSBzaXplb2Yoc3RydWN0IGJvb3RyZWNfZXhwX2lmKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQ6Ci0JCQlpZiAoZGF0YV9sZW4gPCAyKQotCQkJCWJyZWFrOwotCQkJcHJpdi0+dmVyc2lvbiA9ICoodTggKikoZW50cnktPmRhdGEgKyAxKTsKLQkJCWJyZWFrOwotCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OOgotCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0RVQUxfQkFORDoKLQkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9FWFRFTkRFRDoKLQkJCXA1NF9wYXJzZV9yc3NpY2FsKGRldiwgZW50cnktPmRhdGEsIGRhdGFfbGVuLAotCQkJCQkgIGxlMTZfdG9fY3B1KGVudHJ5LT5jb2RlKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT006IHsKLQkJCV9fbGUxNiAqc3JjID0gKHZvaWQgKikgZW50cnktPmRhdGE7Ci0JCQlzMTYgKmRzdCA9ICh2b2lkICopICZwcml2LT5yc3NpY2FsX2RiOwotCQkJaW50IGk7Ci0KLQkJCWlmIChkYXRhX2xlbiAhPSBzaXplb2YocHJpdi0+cnNzaWNhbF9kYikpIHsKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihwcml2LT5yc3NpY2FsX2RiKSAvCi0JCQkJCXNpemVvZigqc3JjKTsgaSsrKQotCQkJCSooZHN0KyspID0gKHMxNikgbGUxNl90b19jcHUoKihzcmMrKykpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTTogewotCQkJc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqcGRhID0gKHZvaWQgKikgZW50cnktPmRhdGE7Ci0JCQlpZiAocHJpdi0+b3V0cHV0X2xpbWl0IHx8IGRhdGFfbGVuIDwgc2l6ZW9mKCpwZGEpKQotCQkJCWJyZWFrOwotCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NOiB7Ci0JCQlzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpwZGEgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKLQkJCWlmIChwcml2LT5jdXJ2ZV9kYXRhIHx8IGRhdGFfbGVuIDwgc2l6ZW9mKCpwZGEpKQotCQkJCWJyZWFrOwotCQkJcHJpdi0+Y3VydmVfZGF0YSA9IHA1NF9jb252ZXJ0X2RiKHBkYSwgZGF0YV9sZW4pOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX0VORDoKLQkJCS8qIG1ha2UgaXQgb3ZlcnJ1biAqLwotCQkJZW50cnlfbGVuID0gbGVuOwotCQkJYnJlYWs7Ci0JCWNhc2UgUERSX01BTlVGQUNUVVJJTkdfUEFSVF9OVU1CRVI6Ci0JCWNhc2UgUERSX1BEQV9WRVJTSU9OOgotCQljYXNlIFBEUl9OSUNfU0VSSUFMX05VTUJFUjoKLQkJY2FzZSBQRFJfUkVHVUxBVE9SWV9ET01BSU5fTElTVDoKLQkJY2FzZSBQRFJfVEVNUEVSQVRVUkVfVFlQRToKLQkJY2FzZSBQRFJfUFJJU01fUENJX0lERU5USUZJRVI6Ci0JCWNhc2UgUERSX0NPVU5UUllfSU5GT1JNQVRJT046Ci0JCWNhc2UgUERSX09FTV9OQU1FOgotCQljYXNlIFBEUl9QUk9EVUNUX05BTUU6Ci0JCWNhc2UgUERSX1VURjhfT0VNX05BTUU6Ci0JCWNhc2UgUERSX1VURjhfUFJPRFVDVF9OQU1FOgotCQljYXNlIFBEUl9DT1VOVFJZX0xJU1Q6Ci0JCWNhc2UgUERSX0FOVEVOTkFfR0FJTjoKLQkJY2FzZSBQRFJfUFJJU01fSU5ESUdPX1BBX0NBTElCUkFUSU9OX0RBVEE6Ci0JCWNhc2UgUERSX1JFR1VMQVRPUllfUE9XRVJfTElNSVRTOgotCQljYXNlIFBEUl9SQURJQVRFRF9UUkFOU01JU1NJT05fQ09SUkVDVElPTjoKLQkJY2FzZSBQRFJfUFJJU01fVFhfSVFfQ0FMSUJSQVRJT046Ci0JCWNhc2UgUERSX0JBU0VCQU5EX1JFR0lTVEVSUzoKLQkJY2FzZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBlZXByb20gY29kZSA6IDB4JXhcbiIsCi0JCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwKLQkJCQlsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQllbnRyeSA9ICh2b2lkICopZW50cnkgKyAoZW50cnlfbGVuICsgMSkqMjsKLQl9Ci0KLQlpZiAoIXN5bnRoIHx8ICFwcml2LT5pcV9hdXRvY2FsIHx8ICFwcml2LT5vdXRwdXRfbGltaXQgfHwKLQkgICAgIXByaXYtPmN1cnZlX2RhdGEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IGFsbCByZXF1aXJlZCBlbnRyaWVzIGZvdW5kIGluIGVlcHJvbSFcbiIsCi0JCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQotCi0JcHJpdi0+cnhodyA9IHN5bnRoICYgUERSX1NZTlRIX0ZST05URU5EX01BU0s7Ci0JaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX1hCT1cpCi0JCXA1NF9pbml0X3hib3dfc3ludGgoZGV2KTsKLQlpZiAoIShzeW50aCAmIFBEUl9TWU5USF8yNF9HSFpfRElTQUJMRUQpKQotCQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZiYW5kXzJHSHo7Ci0JaWYgKCEoc3ludGggJiBQRFJfU1lOVEhfNV9HSFpfRElTQUJMRUQpKQotCQlkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9ICZiYW5kXzVHSHo7Ci0JaWYgKChzeW50aCAmIFBEUl9TWU5USF9SWF9ESVZfTUFTSykgPT0gUERSX1NZTlRIX1JYX0RJVl9TVVBQT1JURUQpCi0JCXByaXYtPnJ4X2RpdmVyc2l0eV9tYXNrID0gMzsKLQlpZiAoKHN5bnRoICYgUERSX1NZTlRIX1RYX0RJVl9NQVNLKSA9PSBQRFJfU1lOVEhfVFhfRElWX1NVUFBPUlRFRCkKLQkJcHJpdi0+dHhfZGl2ZXJzaXR5X21hc2sgPSAzOwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+d2lwaHktPnBlcm1fYWRkcikpIHsKLQkJdTggcGVybV9hZGRyW0VUSF9BTEVOXTsKLQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBod2FkZHIhIFVzaW5nIHJhbmRvbWx5IGdlbmVyYXRlZCBNQUMgYWRkclxuIiwKLQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCQlyYW5kb21fZXRoZXJfYWRkcihwZXJtX2FkZHIpOwotCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIHBlcm1fYWRkcik7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGh3YWRkciAlcE0sIE1BQzppc2wzOCUwMnggUkY6JXNcbiIsCi0JCXdpcGh5X25hbWUoZGV2LT53aXBoeSksCi0JCWRldi0+d2lwaHktPnBlcm1fYWRkciwKLQkJcHJpdi0+dmVyc2lvbiwgcDU0X3JmX2NoaXBzW3ByaXYtPnJ4aHddKTsKLQotCXJldHVybiAwOwotCi0gIGVycjoKLQlpZiAocHJpdi0+aXFfYXV0b2NhbCkgewotCQlrZnJlZShwcml2LT5pcV9hdXRvY2FsKTsKLQkJcHJpdi0+aXFfYXV0b2NhbCA9IE5VTEw7Ci0JfQotCi0JaWYgKHByaXYtPm91dHB1dF9saW1pdCkgewotCQlrZnJlZShwcml2LT5vdXRwdXRfbGltaXQpOwotCQlwcml2LT5vdXRwdXRfbGltaXQgPSBOVUxMOwotCX0KLQotCWlmIChwcml2LT5jdXJ2ZV9kYXRhKSB7Ci0JCWtmcmVlKHByaXYtPmN1cnZlX2RhdGEpOwotCQlwcml2LT5jdXJ2ZV9kYXRhID0gTlVMTDsKLQl9Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiBlZXByb20gcGFyc2UgZmFpbGVkIVxuIiwKLQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7Ci0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOwotCi1zdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByc3NpKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWludCBiYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0KLQlpZiAocHJpdi0+cnhodyAhPSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykKLQkJcmV0dXJuICgocnNzaSAqIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKSAvIDY0ICsKLQkJCSBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCkgLyA0OwotCWVsc2UKLQkJLyoKLQkJICogVE9ETzogZmluZCB0aGUgY29ycmVjdCBmb3JtdWxhCi0JCSAqLwotCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKwotCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3J4X2RhdGEoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfcnhfZGF0YSAqaGRyID0gKHN0cnVjdCBwNTRfcnhfZGF0YSAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0gezB9OwotCXUxNiBmcmVxID0gbGUxNl90b19jcHUoaGRyLT5mcmVxKTsKLQlzaXplX3QgaGVhZGVyX2xlbiA9IHNpemVvZigqaGRyKTsKLQl1MzIgdHNmMzI7Ci0JdTggcmF0ZSA9IGhkci0+cmF0ZSAmIDB4ZjsKLQotCS8qCi0JICogSWYgdGhlIGRldmljZSBpcyBpbiBhIHVuc3BlY2lmaWVkIHN0YXRlIHdlIGhhdmUgdG8KLQkgKiBpZ25vcmUgYWxsIGRhdGEgZnJhbWVzLiBFbHNlIHdlIGNvdWxkIGVuZCB1cCB3aXRoIGEKLQkgKiBuYXN0eSBjcmFzaC4KLQkgKi8KLQlpZiAodW5saWtlbHkocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkpCi0JCXJldHVybiAwOwotCi0JaWYgKCEoaGRyLT5mbGFncyAmIGNwdV90b19sZTE2KFA1NF9IRFJfRkxBR19EQVRBX0lOX0ZDU19HT09EKSkpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGhkci0+ZGVjcnlwdF9zdGF0dXMgPT0gUDU0X0RFQ1JZUFRfT0spCi0JCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCWlmICgoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9GQUlMX01JQ0hBRUwpIHx8Ci0JICAgIChoZHItPmRlY3J5cHRfc3RhdHVzID09IFA1NF9ERUNSWVBUX0ZBSUxfVEtJUCkpCi0JCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKLQotCXJ4X3N0YXR1cy5zaWduYWwgPSBwNTRfcnNzaV90b19kYm0oZGV2LCBoZHItPnJzc2kpOwotCXJ4X3N0YXR1cy5ub2lzZSA9IHByaXYtPm5vaXNlOwotCWlmIChoZHItPnJhdGUgJiAweDEwKQotCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOwotCWlmIChkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQlyeF9zdGF0dXMucmF0ZV9pZHggPSAocmF0ZSA8IDQpID8gMCA6IHJhdGUgLSA0OwotCWVsc2UKLQkJcnhfc3RhdHVzLnJhdGVfaWR4ID0gcmF0ZTsKLQotCXJ4X3N0YXR1cy5mcmVxID0gZnJlcTsKLQlyeF9zdGF0dXMuYmFuZCA9ICBkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZDsKLQlyeF9zdGF0dXMuYW50ZW5uYSA9IGhkci0+YW50ZW5uYTsKLQotCXRzZjMyID0gbGUzMl90b19jcHUoaGRyLT50c2YzMik7Ci0JaWYgKHRzZjMyIDwgcHJpdi0+dHNmX2xvdzMyKQotCQlwcml2LT50c2ZfaGlnaDMyKys7Ci0Jcnhfc3RhdHVzLm1hY3RpbWUgPSAoKHU2NClwcml2LT50c2ZfaGlnaDMyKSA8PCAzMiB8IHRzZjMyOwotCXByaXYtPnRzZl9sb3czMiA9IHRzZjMyOwotCi0Jcnhfc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19UU0ZUOwotCi0JaWYgKGhkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9BTElHTikpCi0JCWhlYWRlcl9sZW4gKz0gaGRyLT5hbGlnblswXTsKLQotCXNrYl9wdWxsKHNrYiwgaGVhZGVyX2xlbik7Ci0Jc2tiX3RyaW0oc2tiLCBsZTE2X3RvX2NwdShoZHItPmxlbikpOwotCi0JaWVlZTgwMjExX3J4X2lycXNhZmUoZGV2LCBza2IsICZyeF9zdGF0dXMpOwotCi0JcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywKLQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUDU0X1NUQVRJU1RJQ1NfVVBEQVRFKSk7Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyB2b2lkIGlubGluZSBwNTRfd2FrZV9mcmVlX3F1ZXVlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGk7Ci0KLQlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKLQkJcmV0dXJuIDsKLQotCWZvciAoaSA9IDA7IGkgPCBkZXYtPnF1ZXVlczsgaSsrKQotCQlpZiAocHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5sZW4gPAotCQkgICAgcHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5saW1pdCkKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldiwgaSk7Ci19Ci0KLXZvaWQgcDU0X2ZyZWVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87Ci0Jc3RydWN0IHA1NF90eF9pbmZvICpyYW5nZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHVubGlrZWx5KCFza2IgfHwgIWRldiB8fCAhc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfcXVldWUpKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBkb24ndCB0cnkgdG8gZnJlZSBhbiBhbHJlYWR5IHVubGlua2VkIHNrYgotCSAqLwotCWlmICh1bmxpa2VseSgoIXNrYi0+bmV4dCkgfHwgKCFza2ItPnByZXYpKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXJhbmdlID0gKHZvaWQgKilpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwotCWlmIChza2ItPnByZXYgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmk7Ci0JCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7Ci0KLQkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+cHJldik7Ci0JCW1yID0gKHN0cnVjdCBwNTRfdHhfaW5mbyAqKW5pLT5yYXRlX2RyaXZlcl9kYXRhOwotCX0KLQlpZiAoc2tiLT5uZXh0ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKm5pOwotCQlzdHJ1Y3QgcDU0X3R4X2luZm8gKm1yOwotCi0JCW5pID0gSUVFRTgwMjExX1NLQl9DQihza2ItPm5leHQpOwotCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKLQl9Ci0JX19za2JfdW5saW5rKHNrYiwgJnByaXYtPnR4X3F1ZXVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQlwNTRfd2FrZV9mcmVlX3F1ZXVlcyhkZXYpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X2ZyZWVfc2tiKTsKLQotc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfZmluZF90eF9lbnRyeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJCSAgIF9fbGUzMiByZXFfaWQpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCWVudHJ5ID0gcHJpdi0+dHhfcXVldWUubmV4dDsKLQl3aGlsZSAoZW50cnkgIT0gKHN0cnVjdCBza19idWZmICopJnByaXYtPnR4X3F1ZXVlKSB7Ci0JCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgZW50cnktPmRhdGE7Ci0KLQkJaWYgKGhkci0+cmVxX2lkID09IHJlcV9pZCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIGVudHJ5OwotCQl9Ci0JCWVudHJ5ID0gZW50cnktPm5leHQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgcDU0X3J4X2ZyYW1lX3NlbnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBwNTRfZnJhbWVfc2VudCAqcGF5bG9hZCA9IChzdHJ1Y3QgcDU0X2ZyYW1lX3NlbnQgKikgaGRyLT5kYXRhOwotCXN0cnVjdCBza19idWZmICplbnRyeTsKLQl1MzIgYWRkciA9IGxlMzJfdG9fY3B1KGhkci0+cmVxX2lkKSAtIHByaXYtPmhlYWRyb29tOwotCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2UgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNvdW50LCBpZHg7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCWVudHJ5ID0gKHN0cnVjdCBza19idWZmICopIHByaXYtPnR4X3F1ZXVlLm5leHQ7Ci0Jd2hpbGUgKGVudHJ5ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5KTsKLQkJc3RydWN0IHA1NF9oZHIgKmVudHJ5X2hkcjsKLQkJc3RydWN0IHA1NF90eF9kYXRhICplbnRyeV9kYXRhOwotCQl1bnNpZ25lZCBpbnQgcGFkID0gMCwgZnJhbWVfbGVuOwotCi0JCXJhbmdlID0gKHZvaWQgKilpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwotCQlpZiAocmFuZ2UtPnN0YXJ0X2FkZHIgIT0gYWRkcikgewotCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGVudHJ5LT5uZXh0ICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKSZwcml2LT50eF9xdWV1ZSkgewotCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7Ci0KLQkJCW5pID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+bmV4dCk7Ci0JCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKLQkJfQotCi0JCV9fc2tiX3VubGluayhlbnRyeSwgJnByaXYtPnR4X3F1ZXVlKTsKLQotCQlmcmFtZV9sZW4gPSBlbnRyeS0+bGVuOwotCQllbnRyeV9oZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgZW50cnktPmRhdGE7Ci0JCWVudHJ5X2RhdGEgPSAoc3RydWN0IHA1NF90eF9kYXRhICopIGVudHJ5X2hkci0+ZGF0YTsKLQkJaWYgKHByaXYtPnR4X3N0YXRzW2VudHJ5X2RhdGEtPmh3X3F1ZXVlXS5sZW4pCi0JCQlwcml2LT50eF9zdGF0c1tlbnRyeV9kYXRhLT5od19xdWV1ZV0ubGVuLS07Ci0JCXByaXYtPnN0YXRzLmRvdDExQUNLRmFpbHVyZUNvdW50ICs9IHBheWxvYWQtPnRyaWVzIC0gMTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCi0JCS8qCi0JCSAqIEZyYW1lcyBpbiBQNTRfUVVFVUVfRldTQ0FOIGFuZCBQNTRfUVVFVUVfQkVBQ09OIGFyZQotCQkgKiBnZW5lcmF0ZWQgYnkgdGhlIGRyaXZlci4gVGhlcmVmb3JlIHR4X3N0YXR1cyBpcyBib2d1cwotCQkgKiBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjb25mdXNlIHRoZSBtYWM4MDIxMSBzdGFjay4KLQkJICovCi0JCWlmICh1bmxpa2VseShlbnRyeV9kYXRhLT5od19xdWV1ZSA8IFA1NF9RVUVVRV9GV1NDQU4pKSB7Ci0JCQlpZiAoZW50cnlfZGF0YS0+aHdfcXVldWUgPT0gUDU0X1FVRVVFX0JFQUNPTikKLQkJCQlwcml2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKLQotCQkJa2ZyZWVfc2tiKGVudHJ5KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyoKLQkJICogQ2xlYXIgbWFudWFsbHksIGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyB3b3VsZAotCQkgKiBjbGVhciB0aGUgY291bnRzIHRvbyBhbmQgd2UgbmVlZCB0aGVtLgotCQkgKi8KLQkJbWVtc2V0KCZpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8pIC0KLQkJICAgICAgIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywgc3RhdHVzLmFtcGR1X2Fja19sZW4pKTsKLQkJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywKLQkJCQkgICAgICBzdGF0dXMuYW1wZHVfYWNrX2xlbikgIT0gMjMpOwotCi0JCWlmIChlbnRyeV9oZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0RBVEFfQUxJR04pKQotCQkJcGFkID0gZW50cnlfZGF0YS0+YWxpZ25bMF07Ci0KLQkJLyogd2FsayB0aHJvdWdoIHRoZSByYXRlcyBhcnJheSBhbmQgYWRqdXN0IHRoZSBjb3VudHMgKi8KLQkJY291bnQgPSBwYXlsb2FkLT50cmllczsKLQkJZm9yIChpZHggPSAwOyBpZHggPCA0OyBpZHgrKykgewotCQkJaWYgKGNvdW50ID49IGluZm8tPnN0YXR1cy5yYXRlc1tpZHhdLmNvdW50KSB7Ci0JCQkJY291bnQgLT0gaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uY291bnQ7Ci0JCQl9IGVsc2UgaWYgKGNvdW50ID4gMCkgewotCQkJCWluZm8tPnN0YXR1cy5yYXRlc1tpZHhdLmNvdW50ID0gY291bnQ7Ci0JCQkJY291bnQgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlpbmZvLT5zdGF0dXMucmF0ZXNbaWR4XS5pZHggPSAtMTsKLQkJCQlpbmZvLT5zdGF0dXMucmF0ZXNbaWR4XS5jb3VudCA9IDA7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJgotCQkgICAgICghcGF5bG9hZC0+c3RhdHVzKSkKLQkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQkJaWYgKHBheWxvYWQtPnN0YXR1cyAmIFA1NF9UWF9QU01fQ0FOQ0VMTEVEKQotCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7Ci0JCWluZm8tPnN0YXR1cy5hY2tfc2lnbmFsID0gcDU0X3Jzc2lfdG9fZGJtKGRldiwKLQkJCQkoaW50KXBheWxvYWQtPmFja19yc3NpKTsKLQotCQkvKiBVbmRvIGFsbCBjaGFuZ2VzIHRvIHRoZSBmcmFtZS4gKi8KLQkJc3dpdGNoIChlbnRyeV9kYXRhLT5rZXlfdHlwZSkgewotCQljYXNlIFA1NF9DUllQVE9fVEtJUE1JQ0hBRUw6IHsKLQkJCXU4ICppdiA9ICh1OCAqKShlbnRyeV9kYXRhLT5hbGlnbiArIHBhZCArCi0JCQkJCWVudHJ5X2RhdGEtPmNyeXB0X29mZnNldCk7Ci0KLQkJCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIFRLSVAgSVYuICovCi0JCQlpdlsyXSA9IGl2WzBdOwotCQkJaXZbMF0gPSBpdlsxXTsKLQkJCWl2WzFdID0gKGl2WzBdIHwgMHgyMCkgJiAweDdmOwkvKiBXRVBTZWVkIC0gOC4zLjIuMiAqLwotCi0JCQlmcmFtZV9sZW4gLT0gMTI7IC8qIHJlbW92ZSBUS0lQX01NSUMgKyBUS0lQX0lDViAqLwotCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgUDU0X0NSWVBUT19BRVNDQ01QOgotCQkJZnJhbWVfbGVuIC09IDg7IC8qIHJlbW92ZSBDQ01QX01JQyAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgUDU0X0NSWVBUT19XRVA6Ci0JCQlmcmFtZV9sZW4gLT0gNDsgLyogcmVtb3ZlIFdFUF9JQ1YgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCXNrYl90cmltKGVudHJ5LCBmcmFtZV9sZW4pOwotCQlza2JfcHVsbChlbnRyeSwgc2l6ZW9mKCpoZHIpICsgcGFkICsgc2l6ZW9mKCplbnRyeV9kYXRhKSk7Ci0JCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShkZXYsIGVudHJ5KTsKLQkJZ290byBvdXQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQotb3V0OgotCXA1NF93YWtlX2ZyZWVfcXVldWVzKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9yeF9lZXByb21fcmVhZGJhY2soc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7Ci0Jc3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tID0gKHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKikgaGRyLT5kYXRhOwotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCi0JaWYgKCFwcml2LT5lZXByb20pCi0JCXJldHVybiA7Ci0KLQlpZiAocHJpdi0+ZndfdmFyID49IDB4NTA5KSB7Ci0JCW1lbWNweShwcml2LT5lZXByb20sIGVlcHJvbS0+djIuZGF0YSwKLQkJICAgICAgIGxlMTZfdG9fY3B1KGVlcHJvbS0+djIubGVuKSk7Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KHByaXYtPmVlcHJvbSwgZWVwcm9tLT52MS5kYXRhLAotCQkgICAgICAgbGUxNl90b19jcHUoZWVwcm9tLT52MS5sZW4pKTsKLQl9Ci0KLQljb21wbGV0ZSgmcHJpdi0+ZWVwcm9tX2NvbXApOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfcnhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBwNTRfc3RhdGlzdGljcyAqc3RhdHMgPSAoc3RydWN0IHA1NF9zdGF0aXN0aWNzICopIGhkci0+ZGF0YTsKLQl1MzIgdHNmMzI7Ci0KLQlpZiAodW5saWtlbHkocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkpCi0JCXJldHVybiA7Ci0KLQl0c2YzMiA9IGxlMzJfdG9fY3B1KHN0YXRzLT50c2YzMik7Ci0JaWYgKHRzZjMyIDwgcHJpdi0+dHNmX2xvdzMyKQotCQlwcml2LT50c2ZfaGlnaDMyKys7Ci0JcHJpdi0+dHNmX2xvdzMyID0gdHNmMzI7Ci0KLQlwcml2LT5zdGF0cy5kb3QxMVJUU0ZhaWx1cmVDb3VudCA9IGxlMzJfdG9fY3B1KHN0YXRzLT5ydHNfZmFpbCk7Ci0JcHJpdi0+c3RhdHMuZG90MTFSVFNTdWNjZXNzQ291bnQgPSBsZTMyX3RvX2NwdShzdGF0cy0+cnRzX3N1Y2Nlc3MpOwotCXByaXYtPnN0YXRzLmRvdDExRkNTRXJyb3JDb3VudCA9IGxlMzJfdG9fY3B1KHN0YXRzLT5yeF9iYWRfZmNzKTsKLQotCXByaXYtPm5vaXNlID0gcDU0X3Jzc2lfdG9fZGJtKGRldiwgbGUzMl90b19jcHUoc3RhdHMtPm5vaXNlKSk7Ci0KLQlwNTRfZnJlZV9za2IoZGV2LCBwNTRfZmluZF90eF9lbnRyeShkZXYsIGhkci0+cmVxX2lkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9yeF90cmFwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgcDU0X3RyYXAgKnRyYXAgPSAoc3RydWN0IHA1NF90cmFwICopIGhkci0+ZGF0YTsKLQl1MTYgZXZlbnQgPSBsZTE2X3RvX2NwdSh0cmFwLT5ldmVudCk7Ci0JdTE2IGZyZXEgPSBsZTE2X3RvX2NwdSh0cmFwLT5mcmVxdWVuY3kpOwotCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgUDU0X1RSQVBfQkVBQ09OX1RYOgotCQlicmVhazsKLQljYXNlIFA1NF9UUkFQX1JBREFSOgotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmFkYXIgKGZyZXE6JWQgTUh6KVxuIiwKLQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSksIGZyZXEpOwotCQlicmVhazsKLQljYXNlIFA1NF9UUkFQX05PX0JFQUNPTjoKLQkJaWYgKHByaXYtPnZpZikKLQkJCWllZWU4MDIxMV9iZWFjb25fbG9zcyhwcml2LT52aWYpOwotCQlicmVhazsKLQljYXNlIFA1NF9UUkFQX1NDQU46Ci0JCWJyZWFrOwotCWNhc2UgUDU0X1RSQVBfVEJUVDoKLQkJYnJlYWs7Ci0JY2FzZSBQNTRfVFJBUF9USU1FUjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmVkIGV2ZW50OiV4IGZyZXE6JWRcbiIsCi0JCSAgICAgICB3aXBoeV9uYW1lKGRldi0+d2lwaHkpLCBldmVudCwgZnJlcSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBwNTRfcnhfY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7Ci0KLQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhkci0+dHlwZSkpIHsKLQljYXNlIFA1NF9DT05UUk9MX1RZUEVfVFhET05FOgotCQlwNTRfcnhfZnJhbWVfc2VudChkZXYsIHNrYik7Ci0JCWJyZWFrOwotCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9UUkFQOgotCQlwNTRfcnhfdHJhcChkZXYsIHNrYik7Ci0JCWJyZWFrOwotCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9CQlA6Ci0JCWJyZWFrOwotCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLOgotCQlwNTRfcnhfc3RhdHMoZGV2LCBza2IpOwotCQlicmVhazsKLQljYXNlIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLOgotCQlwNTRfcnhfZWVwcm9tX3JlYWRiYWNrKGRldiwgc2tiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBub3QgaGFuZGxpbmcgMHglMDJ4IHR5cGUgY29udHJvbCBmcmFtZVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGxlMTZfdG9fY3B1KGhkci0+dHlwZSkpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogcmV0dXJucyB6ZXJvIGlmIHNrYiBjYW4gYmUgcmV1c2VkICovCi1pbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl1MTYgdHlwZSA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKXNrYi0+ZGF0YSkpOwotCi0JaWYgKHR5cGUgJiBQNTRfSERSX0ZMQUdfQ09OVFJPTCkKLQkJcmV0dXJuIHA1NF9yeF9jb250cm9sKGRldiwgc2tiKTsKLQllbHNlCi0JCXJldHVybiBwNTRfcnhfZGF0YShkZXYsIHNrYik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwNTRfcngpOwotCi0vKgotICogU28sIHRoZSBmaXJtd2FyZSBpcyBzb21ld2hhdCBzdHVwaWQgYW5kIGRvZXNuJ3Qga25vdyB3aGF0IHBsYWNlcyBpbiBpdHMKLSAqIG1lbW9yeSBpbmNvbWluZyBkYXRhIHNob3VsZCBnbyB0by4gQnkgcG9raW5nIGFyb3VuZCBpbiB0aGUgZmlybXdhcmUsIHdlCi0gKiBjYW4gZmluZCBzb21lIHVudXNlZCBtZW1vcnkgdG8gdXBsb2FkIG91ciBwYWNrZXRzIHRvLiBIb3dldmVyLCBkYXRhIHRoYXQgd2UKLSAqIHdhbnQgdGhlIGNhcmQgdG8gVFggbmVlZHMgdG8gc3RheSBpbnRhY3QgdW50aWwgdGhlIGNhcmQgaGFzIHRvbGQgdXMgdGhhdAotICogaXQgaXMgZG9uZSB3aXRoIGl0LiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGVtcHR5IHBsYWNlcyB3ZSBjYW4gdXBsb2FkIHRvIGFuZAotICogbWFya3MgYWxsb2NhdGVkIGFyZWFzIGFzIHJlc2VydmVkIGlmIG5lY2Vzc2FyeS4gcDU0X3J4X2ZyYW1lX3NlbnQgb3IKLSAqIHA1NF9mcmVlX3NrYiBmcmVlcyBhbGxvY2F0ZWQgYXJlYXMuCi0gKi8KLXN0YXRpYyBpbnQgcDU0X2Fzc2lnbl9hZGRyZXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgcDU0X2hkciAqZGF0YSwgdTMyIGxlbikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnRhcmdldF9za2IgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwotCXUzMiBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKLQl1MzIgbGFyZ2VzdF9ob2xlID0gMDsKLQl1MzIgdGFyZ2V0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBsZWZ0OwotCWxlbiA9IChsZW4gKyBwcml2LT5oZWFkcm9vbSArIHByaXYtPnRhaWxyb29tICsgMykgJiB+MHgzOwotCi0JaWYgKCFza2IpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQotCWxlZnQgPSBza2JfcXVldWVfbGVuKCZwcml2LT50eF9xdWV1ZSk7Ci0JaWYgKHVubGlrZWx5KGxlZnQgPj0gMjgpKSB7Ci0JCS8qCi0JCSAqIFRoZSB0eF9xdWV1ZSBpcyBuZWFybHkgZnVsbCEKLQkJICogV2UgaGF2ZSB0aHJvdHRsZSBub3JtYWwgZGF0YSB0cmFmZmljLCBiZWNhdXNlIHdlIG11c3QKLQkJICogaGF2ZSBhIGZldyBzcGFyZSBzbG90cyBmb3IgY29udHJvbCBmcmFtZXMgbGVmdC4KLQkJICovCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhkZXYpOwotCQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT53b3JrLAotCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUDU0X1RYX1RJTUVPVVQpKTsKLQotCQlpZiAodW5saWtlbHkobGVmdCA9PSAzMikpIHsKLQkJCS8qCi0JCQkgKiBUaGUgdHhfcXVldWUgaXMgbm93IHJlYWxseSBmdWxsLgotCQkJICoKLQkJCSAqIFRPRE86IGNoZWNrIGlmIHRoZSBkZXZpY2UgaGFzIGNyYXNoZWQgYW5kIHJlc2V0IGl0LgotCQkJICovCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVOT1NQQzsKLQkJfQotCX0KLQotCWVudHJ5ID0gcHJpdi0+dHhfcXVldWUubmV4dDsKLQl3aGlsZSAobGVmdC0tKSB7Ci0JCXUzMiBob2xlX3NpemU7Ci0JCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5KTsKLQkJcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JCWhvbGVfc2l6ZSA9IHJhbmdlLT5zdGFydF9hZGRyIC0gbGFzdF9hZGRyOwotCQlpZiAoIXRhcmdldF9za2IgJiYgaG9sZV9zaXplID49IGxlbikgewotCQkJdGFyZ2V0X3NrYiA9IGVudHJ5LT5wcmV2OwotCQkJaG9sZV9zaXplIC09IGxlbjsKLQkJCXRhcmdldF9hZGRyID0gbGFzdF9hZGRyOwotCQl9Ci0JCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIGhvbGVfc2l6ZSk7Ci0JCWxhc3RfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKLQkJZW50cnkgPSBlbnRyeS0+bmV4dDsKLQl9Ci0JaWYgKCF0YXJnZXRfc2tiICYmIHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkciA+PSBsZW4pIHsKLQkJdGFyZ2V0X3NrYiA9IHByaXYtPnR4X3F1ZXVlLnByZXY7Ci0JCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIHByaXYtPnJ4X2VuZCAtIGxhc3RfYWRkciAtIGxlbik7Ci0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwcml2LT50eF9xdWV1ZSkpIHsKLQkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHRhcmdldF9za2IpOwotCQkJcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JCQl0YXJnZXRfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKLQkJfQotCX0gZWxzZQotCQlsYXJnZXN0X2hvbGUgPSBtYXgobGFyZ2VzdF9ob2xlLCBwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHIpOwotCi0JaWYgKCF0YXJnZXRfc2tiKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKLQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGRldik7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQotCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7Ci0JcmFuZ2UtPnN0YXJ0X2FkZHIgPSB0YXJnZXRfYWRkcjsKLQlyYW5nZS0+ZW5kX2FkZHIgPSB0YXJnZXRfYWRkciArIGxlbjsKLQlfX3NrYl9xdWV1ZV9hZnRlcigmcHJpdi0+dHhfcXVldWUsIHRhcmdldF9za2IsIHNrYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOwotCi0JaWYgKGxhcmdlc3RfaG9sZSA8IHByaXYtPmhlYWRyb29tICsgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArCi0JCQkgICA0OCArIElFRUU4MDIxMV9NQVhfUlRTX1RIUkVTSE9MRCArIHByaXYtPnRhaWxyb29tKQotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoZGV2KTsKLQotCWRhdGEtPnJlcV9pZCA9IGNwdV90b19sZTMyKHRhcmdldF9hZGRyICsgcHJpdi0+aGVhZHJvb20pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgaGRyX2ZsYWdzLAotCQkJCSAgICAgdTE2IHBheWxvYWRfbGVuLCB1MTYgdHlwZSwgZ2ZwX3QgbWVtZmxhZ3MpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXNpemVfdCBmcmFtZV9sZW4gPSBzaXplb2YoKmhkcikgKyBwYXlsb2FkX2xlbjsKLQotCWlmIChmcmFtZV9sZW4gPiBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOKQotCQlyZXR1cm4gTlVMTDsKLQotCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihwcml2LT50eF9oZHJfbGVuICsgZnJhbWVfbGVuLCBtZW1mbGFncyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiBOVUxMOwotCXNrYl9yZXNlcnZlKHNrYiwgcHJpdi0+dHhfaGRyX2xlbik7Ci0KLQloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7Ci0JaGRyLT5mbGFncyA9IGNwdV90b19sZTE2KGhkcl9mbGFncyk7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihwYXlsb2FkX2xlbik7Ci0JaGRyLT50eXBlID0gY3B1X3RvX2xlMTYodHlwZSk7Ci0JaGRyLT50cmllcyA9IGhkci0+cnRzX3RyaWVzID0gMDsKLQotCWlmIChwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBza2IsIGhkciwgZnJhbWVfbGVuKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBza2I7Ci19Ci0KLWludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKmVlcHJvbV9oZHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzaXplX3QgZWVwcm9tX3NpemUgPSAweDIwMjAsIG9mZnNldCA9IDAsIGJsb2Nrc2l6ZSwgbWF4YmxvY2tzaXplOwotCWludCByZXQgPSAtRU5PTUVNOwotCXZvaWQgKmVlcHJvbSA9IE5VTEw7Ci0KLQltYXhibG9ja3NpemUgPSBFRVBST01fUkVBREJBQ0tfTEVOOwotCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpCi0JCW1heGJsb2Nrc2l6ZSAtPSAweGM7Ci0JZWxzZQotCQltYXhibG9ja3NpemUgLT0gMHg0OwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBzaXplb2YoKmVlcHJvbV9oZHIpICsKLQkJCSAgICBtYXhibG9ja3NpemUsIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLAotCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghc2tiKQotCQlnb3RvIGZyZWU7Ci0JcHJpdi0+ZWVwcm9tID0ga3phbGxvYyhFRVBST01fUkVBREJBQ0tfTEVOLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYtPmVlcHJvbSkKLQkJZ290byBmcmVlOwotCWVlcHJvbSA9IGt6YWxsb2MoZWVwcm9tX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghZWVwcm9tKQotCQlnb3RvIGZyZWU7Ci0KLQllZXByb21faGRyID0gKHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKikgc2tiX3B1dChza2IsCi0JCSAgICAgc2l6ZW9mKCplZXByb21faGRyKSArIG1heGJsb2Nrc2l6ZSk7Ci0KLQl3aGlsZSAoZWVwcm9tX3NpemUpIHsKLQkJYmxvY2tzaXplID0gbWluKGVlcHJvbV9zaXplLCBtYXhibG9ja3NpemUpOwotCQlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDkpIHsKLQkJCWVlcHJvbV9oZHItPnYxLm9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCk7Ci0JCQllZXByb21faGRyLT52MS5sZW4gPSBjcHVfdG9fbGUxNihibG9ja3NpemUpOwotCQl9IGVsc2UgewotCQkJZWVwcm9tX2hkci0+djIub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KTsKLQkJCWVlcHJvbV9oZHItPnYyLmxlbiA9IGNwdV90b19sZTE2KGJsb2Nrc2l6ZSk7Ci0JCQllZXByb21faGRyLT52Mi5tYWdpYzIgPSAweGY7Ci0JCQltZW1jcHkoZWVwcm9tX2hkci0+djIubWFnaWMsIChjb25zdCBjaGFyICopIkxPQ0siLCA0KTsKLQkJfQotCQlwcml2LT50eChkZXYsIHNrYik7Ci0KLQkJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmcHJpdi0+ZWVwcm9tX2NvbXAsIEhaKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZGV2aWNlIGRvZXMgbm90IHJlc3BvbmQhXG4iLAotCQkJCXdpcGh5X25hbWUoZGV2LT53aXBoeSkpOwotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBmcmVlOwotCSAgICAgICAgfQotCi0JCW1lbWNweShlZXByb20gKyBvZmZzZXQsIHByaXYtPmVlcHJvbSwgYmxvY2tzaXplKTsKLQkJb2Zmc2V0ICs9IGJsb2Nrc2l6ZTsKLQkJZWVwcm9tX3NpemUgLT0gYmxvY2tzaXplOwotCX0KLQotCXJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCBlZXByb20sIG9mZnNldCk7Ci1mcmVlOgotCWtmcmVlKHByaXYtPmVlcHJvbSk7Ci0JcHJpdi0+ZWVwcm9tID0gTlVMTDsKLQlwNTRfZnJlZV9za2IoZGV2LCBza2IpOwotCWtmcmVlKGVlcHJvbSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlYWRfZWVwcm9tKTsKLQotc3RhdGljIGludCBwNTRfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCWJvb2wgc2V0KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF90aW0gKnRpbTsKLQotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCp0aW0pLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0aW0gPSAoc3RydWN0IHA1NF90aW0gKikgc2tiX3B1dChza2IsIHNpemVvZigqdGltKSk7Ci0JdGltLT5jb3VudCA9IDE7Ci0JdGltLT5lbnRyeVswXSA9IGNwdV90b19sZTE2KHNldCA/IChzdGEtPmFpZCB8IDB4ODAwMCkgOiBzdGEtPmFpZCk7Ci0JcHJpdi0+dHgoZGV2LCBza2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9zdGFfdW5sb2NrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggKmFkZHIpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgKnN0YTsKLQotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzdGEpLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0YSA9IChzdHJ1Y3QgcDU0X3N0YV91bmxvY2sgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCpzdGEpKTsKLQltZW1jcHkoc3RhLT5hZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci0JcHJpdi0+dHgoZGV2LCBza2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIG5vdGlmeV9jbWQsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQotewotCXN3aXRjaCAobm90aWZ5X2NtZCkgewotCWNhc2UgU1RBX05PVElGWV9BREQ6Ci0JY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKLQkJLyoKLQkJICogTm90aWZ5IHRoZSBmaXJtd2FyZSB0aGF0IHdlIGRvbid0IHdhbnQgb3Igd2UgZG9uJ3QKLQkJICogbmVlZCB0byBidWZmZXIgZnJhbWVzIGZvciB0aGlzIHN0YXRpb24gYW55bW9yZS4KLQkJICovCi0KLQkJcDU0X3N0YV91bmxvY2soZGV2LCBzdGEtPmFkZHIpOwotCQlicmVhazsKLQljYXNlIFNUQV9OT1RJRllfQVdBS0U6Ci0JCS8qIHVwZGF0ZSB0aGUgZmlybXdhcmUncyBmaWx0ZXIgdGFibGUgKi8KLQkJcDU0X3N0YV91bmxvY2soZGV2LCBzdGEtPmFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3R4X2NhbmNlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICplbnRyeSkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfaGRyICpoZHI7Ci0Jc3RydWN0IHA1NF90eGNhbmNlbCAqY2FuY2VsOwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNhbmNlbCksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaGRyID0gKHZvaWQgKillbnRyeS0+ZGF0YTsKLQljYW5jZWwgPSAoc3RydWN0IHA1NF90eGNhbmNlbCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmNhbmNlbCkpOwotCWNhbmNlbC0+cmVxX2lkID0gaGRyLT5yZXFfaWQ7Ci0JcHJpdi0+dHgoZGV2LCBza2IpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF90eF9maWxsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCB1OCAqcXVldWUsIHNpemVfdCAqZXh0cmFfbGVuLAotCQl1MTYgKmZsYWdzLCB1MTYgKmFpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWludCByZXQgPSAxOwotCi0Jc3dpdGNoIChwcml2LT5tb2RlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQkvKgotCQkgKiBXZSBoYXZlIHRvIHNldCBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQyBmb3IKLQkJICogZXZlcnkgZnJhbWUgaW4gcHJvbWlzY3VvdXMvbW9uaXRvciBtb2RlLgotCQkgKiBzZWUgU1RTVzQ1eDBDIExNQUMgQVBJIC0gcGFnZSAxMi4KLQkJICovCi0JCSphaWQgPSAwOwotCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQzsKLQkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOwotCQlicmVhazsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCSphaWQgPSAxOwotCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKLQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOwotCQkJcmV0ID0gMDsKLQkJfSBlbHNlCi0JCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7Ci0JCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7Ci0JCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9DQUI7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgewotCQkJaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCQkqYWlkID0gMDsKLQkJCQkqcXVldWUgPSBQNTRfUVVFVUVfTUdNVDsKLQkJCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QIHwKLQkJCQkJIFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKLQkJCQlyZXR1cm4gMDsKLQkJCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQkJKmFpZCA9IDA7Ci0KLQkJCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIEluamVjdGluZyBiZWFjb25zIG9uIHRvcCBvZiBhIEFQIGlzCi0JCQkJCSAqIG5vdCBhIGdvb2QgaWRlYS4uLiBuZXZlcnRoZWxlc3MsCi0JCQkJCSAqIGl0IHNob3VsZCBiZSBkb2FibGUuCi0JCQkJCSAqLwotCi0JCQkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCi0JCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUDsKLQkJCQkqcXVldWUgPSBQNTRfUVVFVUVfQkVBQ09OOwotCQkJCSpleHRyYV9sZW4gPSBJRUVFODAyMTFfTUFYX1RJTV9MRU47Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9IGVsc2UgewotCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOwotCQkJCXJldCA9IDA7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOwotCi0JCWlmIChpbmZvLT5jb250cm9sLnN0YSkKLQkJCSphaWQgPSBpbmZvLT5jb250cm9sLnN0YS0+YWlkOwotCi0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCkKLQkJCSpmbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdTggcDU0X2NvbnZlcnRfYWxnbyhlbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZykKLXsKLQlzd2l0Y2ggKGFsZykgewotCWNhc2UgQUxHX1dFUDoKLQkJcmV0dXJuIFA1NF9DUllQVE9fV0VQOwotCWNhc2UgQUxHX1RLSVA6Ci0JCXJldHVybiBQNTRfQ1JZUFRPX1RLSVBNSUNIQUVMOwotCWNhc2UgQUxHX0NDTVA6Ci0JCXJldHVybiBQNTRfQ1JZUFRPX0FFU0NDTVA7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50IHA1NF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKmN1cnJlbnRfcXVldWU7Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkcjsKLQlzdHJ1Y3QgcDU0X3R4X2RhdGEgKnR4aGRyOwotCXNpemVfdCBwYWRkaW5nLCBsZW4sIHRpbV9sZW4gPSAwOwotCWludCBpLCBqLCByaWR4LCByZXQ7Ci0JdTE2IGhkcl9mbGFncyA9IDAsIGFpZCA9IDA7Ci0JdTggcmF0ZSwgcXVldWUsIGNyeXB0X29mZnNldCA9IDA7Ci0JdTggY3RzX3JhdGUgPSAweDIwOwotCXU4IHJjX2ZsYWdzOwotCXU4IGNhbGN1bGF0ZWRfdHJpZXNbNF07Ci0JdTggbnJhdGVzID0gMCwgbnJlbWFpbmluZyA9IDg7Ci0KLQlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCi0JcmV0ID0gcDU0X3R4X2ZpbGwoZGV2LCBza2IsIGluZm8sICZxdWV1ZSwgJnRpbV9sZW4sICZoZHJfZmxhZ3MsICZhaWQpOwotCWN1cnJlbnRfcXVldWUgPSAmcHJpdi0+dHhfc3RhdHNbcXVldWVdOwotCWlmICh1bmxpa2VseSgoY3VycmVudF9xdWV1ZS0+bGVuID4gY3VycmVudF9xdWV1ZS0+bGltaXQpICYmIHJldCkpCi0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQljdXJyZW50X3F1ZXVlLT5sZW4rKzsKLQljdXJyZW50X3F1ZXVlLT5jb3VudCsrOwotCWlmICgoY3VycmVudF9xdWV1ZS0+bGVuID09IGN1cnJlbnRfcXVldWUtPmxpbWl0KSAmJiByZXQpCi0JCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCi0JcGFkZGluZyA9ICh1bnNpZ25lZCBsb25nKShza2ItPmRhdGEgLSAoc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp0eGhkcikpKSAmIDM7Ci0JbGVuID0gc2tiLT5sZW47Ci0KLQlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpIHsKLQkJY3J5cHRfb2Zmc2V0ID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQkJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKLQkJCXU4ICppdiA9ICh1OCAqKShza2ItPmRhdGEgKyBjcnlwdF9vZmZzZXQpOwotCQkJLyoKLQkJCSAqIFRoZSBmaXJtd2FyZSBleGNlcHRzIHRoYXQgdGhlIElWIGhhcyB0byBoYXZlCi0JCQkgKiB0aGlzIHNwZWNpYWwgZm9ybWF0Ci0JCQkgKi8KLQkJCWl2WzFdID0gaXZbMF07Ci0JCQlpdlswXSA9IGl2WzJdOwotCQkJaXZbMl0gPSAwOwotCQl9Ci0JfQotCi0JdHhoZHIgPSAoc3RydWN0IHA1NF90eF9kYXRhICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCp0eGhkcikgKyBwYWRkaW5nKTsKLQloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpOwotCi0JaWYgKHBhZGRpbmcpCi0JCWhkcl9mbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9BTElHTjsKLQloZHItPnR5cGUgPSBjcHVfdG9fbGUxNihhaWQpOwotCWhkci0+cnRzX3RyaWVzID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudDsKLQotCS8qCi0JICogd2UgcmVnaXN0ZXIgdGhlIHJhdGVzIGluIHBlcmZlY3Qgb3JkZXIsIGFuZAotCSAqIFJUUy9DVFMgd29uJ3QgaGFwcGVuIG9uIDUgR0h6Ci0JICovCi0JY3RzX3JhdGUgPSBpbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHg7Ci0KLQltZW1zZXQoJnR4aGRyLT5yYXRlc2V0LCAwLCBzaXplb2YodHhoZHItPnJhdGVzZXQpKTsKLQotCS8qIHNlZSBob3cgbWFueSByYXRlcyBnb3QgdXNlZCAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uaWR4IDwgMCkKLQkJCWJyZWFrOwotCQlucmF0ZXMrKzsKLQl9Ci0KLQkvKiBsaW1pdCB0cmllcyB0byA4L25yYXRlcyBwZXIgcmF0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBucmF0ZXM7IGkrKykgewotCQkvKgotCQkgKiBUaGUgbWFnaWMgZXhwcmVzc2lvbiBoZXJlIGlzIGVxdWl2YWxlbnQgdG8gOC9ucmF0ZXMgZm9yCi0JCSAqIGFsbCB2YWx1ZXMgdGhhdCBtYXR0ZXIsIGJ1dCBhdm9pZHMgZGl2aXNpb24gYW5kIGp1bXBzLgotCQkgKiBOb3RlIHRoYXQgbnJhdGVzIGNhbiBvbmx5IHRha2UgdGhlIHZhbHVlcyAxIHRocm91Z2ggNC4KLQkJICovCi0JCWNhbGN1bGF0ZWRfdHJpZXNbaV0gPSBtaW5fdChpbnQsICgoMTUgPj4gbnJhdGVzKSB8IDEpICsgMSwKLQkJCQkJCSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmNvdW50KTsKLQkJbnJlbWFpbmluZyAtPSBjYWxjdWxhdGVkX3RyaWVzW2ldOwotCX0KLQotCS8qIGlmIHRoZXJlIGFyZSB0cmllcyBsZWZ0LCBkaXN0cmlidXRlIGZyb20gYmFjayB0byBmcm9udCAqLwotCWZvciAoaSA9IG5yYXRlcyAtIDE7IG5yZW1haW5pbmcgPiAwICYmIGkgPj0gMDsgaS0tKSB7Ci0JCWludCB0bXAgPSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmNvdW50IC0gY2FsY3VsYXRlZF90cmllc1tpXTsKLQotCQlpZiAodG1wIDw9IDApCi0JCQljb250aW51ZTsKLQkJLyogUkMgcmVxdWVzdGVkIG1vcmUgdHJpZXMgYXQgdGhpcyByYXRlICovCi0KLQkJdG1wID0gbWluX3QoaW50LCB0bXAsIG5yZW1haW5pbmcpOwotCQljYWxjdWxhdGVkX3RyaWVzW2ldICs9IHRtcDsKLQkJbnJlbWFpbmluZyAtPSB0bXA7Ci0JfQotCi0JcmlkeCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5yYXRlcyAmJiByaWR4IDwgODsgaSsrKSB7Ci0JCS8qIHdlIHJlZ2lzdGVyIHRoZSByYXRlcyBpbiBwZXJmZWN0IG9yZGVyICovCi0JCXJhdGUgPSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmlkeDsKLQkJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJCXJhdGUgKz0gNDsKLQotCQkvKiBzdG9yZSB0aGUgY291bnQgd2UgYWN0dWFsbHkgY2FsY3VsYXRlZCBmb3IgVFggc3RhdHVzICovCi0JCWluZm8tPmNvbnRyb2wucmF0ZXNbaV0uY291bnQgPSBjYWxjdWxhdGVkX3RyaWVzW2ldOwotCi0JCXJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1tpXS5mbGFnczsKLQkJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkgewotCQkJcmF0ZSB8PSAweDEwOwotCQkJY3RzX3JhdGUgfD0gMHgxMDsKLQkJfQotCQlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCi0JCQlyYXRlIHw9IDB4NDA7Ci0JCWVsc2UgaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkKLQkJCXJhdGUgfD0gMHgyMDsKLQkJZm9yIChqID0gMDsgaiA8IGNhbGN1bGF0ZWRfdHJpZXNbaV0gJiYgcmlkeCA8IDg7IGorKykgewotCQkJdHhoZHItPnJhdGVzZXRbcmlkeF0gPSByYXRlOwotCQkJcmlkeCsrOwotCQl9Ci0JfQotCi0JaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKQotCQloZHJfZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1NFUU5SOwotCi0JLyogVE9ETzogZW5hYmxlIGJ1cnN0aW5nICovCi0JaGRyLT5mbGFncyA9IGNwdV90b19sZTE2KGhkcl9mbGFncyk7Ci0JaGRyLT50cmllcyA9IHJpZHg7Ci0JdHhoZHItPnJ0c19yYXRlX2lkeCA9IDA7Ci0JaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7Ci0JCXR4aGRyLT5rZXlfdHlwZSA9IHA1NF9jb252ZXJ0X2FsZ28oaW5mby0+Y29udHJvbC5od19rZXktPmFsZyk7Ci0JCXR4aGRyLT5rZXlfbGVuID0gbWluKCh1OCkxNiwgaW5mby0+Y29udHJvbC5od19rZXktPmtleWxlbik7Ci0JCW1lbWNweSh0eGhkci0+a2V5LCBpbmZvLT5jb250cm9sLmh3X2tleS0+a2V5LCB0eGhkci0+a2V5X2xlbik7Ci0JCWlmIChpbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKSB7Ci0JCQlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCAxMikpCi0JCQkJZ290byBlcnI7Ci0JCQkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgTUlDIGtleSAqLwotCQkJbGVuICs9IDg7Ci0JCQltZW1jcHkoc2tiX3B1dChza2IsIDgpLCAmKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5rZXkKLQkJCQlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVldKSwgOCk7Ci0JCX0KLQkJLyogcmVzZXJ2ZSBzb21lIHNwYWNlIGZvciBJQ1YgKi8KLQkJbGVuICs9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuOwotCQltZW1zZXQoc2tiX3B1dChza2IsIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuKSwgMCwKLQkJICAgICAgIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5pY3ZfbGVuKTsKLQl9IGVsc2UgewotCQl0eGhkci0+a2V5X3R5cGUgPSAwOwotCQl0eGhkci0+a2V5X2xlbiA9IDA7Ci0JfQotCXR4aGRyLT5jcnlwdF9vZmZzZXQgPSBjcnlwdF9vZmZzZXQ7Ci0JdHhoZHItPmh3X3F1ZXVlID0gcXVldWU7Ci0JdHhoZHItPmJhY2tsb2cgPSBjdXJyZW50X3F1ZXVlLT5sZW47Ci0JbWVtc2V0KHR4aGRyLT5kdXJhdGlvbnMsIDAsIHNpemVvZih0eGhkci0+ZHVyYXRpb25zKSk7Ci0JdHhoZHItPnR4X2FudGVubmEgPSAoKGluZm8tPmFudGVubmFfc2VsX3R4ID09IDApID8KLQkJMiA6IGluZm8tPmFudGVubmFfc2VsX3R4IC0gMSkgJiBwcml2LT50eF9kaXZlcnNpdHlfbWFzazsKLQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgewotCQl0eGhkci0+bG9uZ2Jvdy5jdHNfcmF0ZSA9IGN0c19yYXRlOwotCQl0eGhkci0+bG9uZ2Jvdy5vdXRwdXRfcG93ZXIgPSBjcHVfdG9fbGUxNihwcml2LT5vdXRwdXRfcG93ZXIpOwotCX0gZWxzZSB7Ci0JCXR4aGRyLT5ub3JtYWwub3V0cHV0X3Bvd2VyID0gcHJpdi0+b3V0cHV0X3Bvd2VyOwotCQl0eGhkci0+bm9ybWFsLmN0c19yYXRlID0gY3RzX3JhdGU7Ci0JfQotCWlmIChwYWRkaW5nKQotCQl0eGhkci0+YWxpZ25bMF0gPSBwYWRkaW5nOwotCi0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwotCS8qIG1vZGlmaWVzIHNrYi0+Y2IgYW5kIHdpdGggaXQgaW5mbywgc28gbXVzdCBiZSBsYXN0ISAqLwotCWlmICh1bmxpa2VseShwNTRfYXNzaWduX2FkZHJlc3MoZGV2LCBza2IsIGhkciwgc2tiLT5sZW4gKyB0aW1fbGVuKSkpCi0JCWdvdG8gZXJyOwotCXByaXYtPnR4KGRldiwgc2tiKTsKLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmssCi0JCQkgICBtc2Vjc190b19qaWZmaWVzKFA1NF9UWF9GUkFNRV9MSUZFVElNRSkpOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLQotIGVycjoKLQlza2JfcHVsbChza2IsIHNpemVvZigqaGRyKSArIHNpemVvZigqdHhoZHIpICsgcGFkZGluZyk7Ci0JY3VycmVudF9xdWV1ZS0+bGVuLS07Ci0JY3VycmVudF9xdWV1ZS0+Y291bnQtLTsKLQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X3NldHVwX21hYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X3NldHVwX21hYyAqc2V0dXA7Ci0JdTE2IG1vZGU7Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU0VUVVAsIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNldHVwID0gKHN0cnVjdCBwNTRfc2V0dXBfbWFjICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnNldHVwKSk7Ci0JaWYgKGRldi0+Y29uZi5yYWRpb19lbmFibGVkKSB7Ci0JCXN3aXRjaCAocHJpdi0+bW9kZSkgewotCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX1NUQVRJT047Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfQVA7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9JQlNTOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKLQkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfSElCRVJOQVRFOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKgotCQkgKiAiVFJBTlNQQVJFTlQgYW5kIFBST01JU0NVT1VTIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCi0JCSAqIFNUU1c0NVgwQyBMTUFDIEFQSSAtIHBhZ2UgMTIKLQkJICovCi0JCWlmICgoKHByaXYtPmZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykgfHwKLQkJICAgICAocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX09USEVSX0JTUykpICYmCi0JCSAgICAobW9kZSAhPSBQNTRfRklMVEVSX1RZUEVfUFJPTUlTQ1VPVVMpKQotCQkJbW9kZSB8PSBQNTRfRklMVEVSX1RZUEVfVFJBTlNQQVJFTlQ7Ci0JfSBlbHNlCi0JCW1vZGUgPSBQNTRfRklMVEVSX1RZUEVfSElCRVJOQVRFOwotCi0Jc2V0dXAtPm1hY19tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JbWVtY3B5KHNldHVwLT5tYWNfYWRkciwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkoc2V0dXAtPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOwotCXNldHVwLT5yeF9hbnRlbm5hID0gMiAmIHByaXYtPnJ4X2RpdmVyc2l0eV9tYXNrOyAvKiBhdXRvbWF0aWMgKi8KLQlzZXR1cC0+cnhfYWxpZ24gPSAwOwotCWlmIChwcml2LT5md192YXIgPCAweDUwMCkgewotCQlzZXR1cC0+djEuYmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKLQkJbWVtc2V0KHNldHVwLT52MS5ydHNfcmF0ZXMsIDAsIDgpOwotCQlzZXR1cC0+djEucnhfYWRkciA9IGNwdV90b19sZTMyKHByaXYtPnJ4X2VuZCk7Ci0JCXNldHVwLT52MS5tYXhfcnggPSBjcHVfdG9fbGUxNihwcml2LT5yeF9tdHUpOwotCQlzZXR1cC0+djEucnhodyA9IGNwdV90b19sZTE2KHByaXYtPnJ4aHcpOwotCQlzZXR1cC0+djEud2FrZXVwX3RpbWVyID0gY3B1X3RvX2xlMTYocHJpdi0+d2FrZXVwX3RpbWVyKTsKLQkJc2V0dXAtPnYxLnVuYWxsb2MwID0gY3B1X3RvX2xlMTYoMCk7Ci0JfSBlbHNlIHsKLQkJc2V0dXAtPnYyLnJ4X2FkZHIgPSBjcHVfdG9fbGUzMihwcml2LT5yeF9lbmQpOwotCQlzZXR1cC0+djIubWF4X3J4ID0gY3B1X3RvX2xlMTYocHJpdi0+cnhfbXR1KTsKLQkJc2V0dXAtPnYyLnJ4aHcgPSBjcHVfdG9fbGUxNihwcml2LT5yeGh3KTsKLQkJc2V0dXAtPnYyLnRpbWVyID0gY3B1X3RvX2xlMTYocHJpdi0+d2FrZXVwX3RpbWVyKTsKLQkJc2V0dXAtPnYyLnRydW5jYXRlID0gY3B1X3RvX2xlMTYoNDg4OTYpOwotCQlzZXR1cC0+djIuYmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKLQkJc2V0dXAtPnYyLnNic3Nfb2Zmc2V0ID0gMDsKLQkJc2V0dXAtPnYyLm1jYXN0X3dpbmRvdyA9IDA7Ci0JCXNldHVwLT52Mi5yeF9yc3NpX3RocmVzaG9sZCA9IDA7Ci0JCXNldHVwLT52Mi5yeF9lZF90aHJlc2hvbGQgPSAwOwotCQlzZXR1cC0+djIucmVmX2Nsb2NrID0gY3B1X3RvX2xlMzIoNjQ0MjQ1MDk0KTsKLQkJc2V0dXAtPnYyLmxwZl9iYW5kd2lkdGggPSBjcHVfdG9fbGUxNig2NTUzNSk7Ci0JCXNldHVwLT52Mi5vc2Nfc3RhcnRfZGVsYXkgPSBjcHVfdG9fbGUxNig2NTUzNSk7Ci0JfQotCXByaXYtPnR4KGRldiwgc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwNTRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUxNiBtb2RlLCB1MTYgZHdlbGwpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X2hkciAqaGRyOwotCXN0cnVjdCBwNTRfc2Nhbl9oZWFkICpoZWFkOwotCXN0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKLQl1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uICpib2R5OwotCXN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgKnJhdGU7Ci0Jc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqcnNzaTsKLQl1bnNpZ25lZCBpbnQgaTsKLQl2b2lkICplbnRyeTsKLQlpbnQgYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOwotCV9fbGUxNiBmcmVxID0gY3B1X3RvX2xlMTYoZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpoZWFkKSArCi0JCQkgICAgMiArIHNpemVvZigqaXFfYXV0b2NhbCkgKyBzaXplb2YoKmJvZHkpICsKLQkJCSAgICBzaXplb2YoKnJhdGUpICsgMiAqIHNpemVvZigqcnNzaSksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TQ0FOLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQloZWFkID0gKHN0cnVjdCBwNTRfc2Nhbl9oZWFkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWQpKTsKLQltZW1zZXQoaGVhZC0+c2Nhbl9wYXJhbXMsIDAsIHNpemVvZihoZWFkLT5zY2FuX3BhcmFtcykpOwotCWhlYWQtPm1vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKLQloZWFkLT5kd2VsbCA9IGNwdV90b19sZTE2KGR3ZWxsKTsKLQloZWFkLT5mcmVxID0gZnJlcTsKLQotCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7Ci0JCV9fbGUxNiAqcGFfcG93ZXJfcG9pbnRzID0gKF9fbGUxNiAqKSBza2JfcHV0KHNrYiwgMik7Ci0JCSpwYV9wb3dlcl9wb2ludHMgPSBjcHVfdG9fbGUxNigweDBjKTsKLQl9Ci0KLQlpcV9hdXRvY2FsID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqaXFfYXV0b2NhbCkpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5pcV9hdXRvY2FsX2xlbjsgaSsrKSB7Ci0JCWlmIChwcml2LT5pcV9hdXRvY2FsW2ldLmZyZXEgIT0gZnJlcSkKLQkJCWNvbnRpbnVlOwotCi0JCW1lbWNweShpcV9hdXRvY2FsLCAmcHJpdi0+aXFfYXV0b2NhbFtpXS5wYXJhbXMsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5KSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAoaSA9PSBwcml2LT5pcV9hdXRvY2FsX2xlbikKLQkJZ290byBlcnI7Ci0KLQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykKLQkJYm9keSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoYm9keS0+bG9uZ2JvdykpOwotCWVsc2UKLQkJYm9keSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoYm9keS0+bm9ybWFsKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyaWVzOyBpKyspIHsKLQkJX19sZTE2ICplbnRyeV9mcmVxID0gKHZvaWQgKikgKHByaXYtPm91dHB1dF9saW1pdC0+ZGF0YSArCi0JCQkJICAgICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUgKiBpKTsKLQotCQlpZiAoKmVudHJ5X2ZyZXEgIT0gZnJlcSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7Ci0JCQltZW1jcHkoJmJvZHktPmxvbmdib3cucG93ZXJfbGltaXRzLAotCQkJICAgICAgICh2b2lkICopIGVudHJ5X2ZyZXEgKyBzaXplb2YoX19sZTE2KSwKLQkJCSAgICAgICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJ5X3NpemUpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqbGltaXRzID0KLQkJCSAgICAgICAodm9pZCAqKSBlbnRyeV9mcmVxOwotCi0JCQlib2R5LT5ub3JtYWwudmFsX2JhcmtlciA9IDB4Mzg7Ci0JCQlib2R5LT5ub3JtYWwudmFsX2Jwc2sgPSBib2R5LT5ub3JtYWwuZHVwX2Jwc2sgPQotCQkJCWxpbWl0cy0+dmFsX2Jwc2s7Ci0JCQlib2R5LT5ub3JtYWwudmFsX3Fwc2sgPSBib2R5LT5ub3JtYWwuZHVwX3Fwc2sgPQotCQkJCWxpbWl0cy0+dmFsX3Fwc2s7Ci0JCQlib2R5LT5ub3JtYWwudmFsXzE2cWFtID0gYm9keS0+bm9ybWFsLmR1cF8xNnFhbSA9Ci0JCQkJbGltaXRzLT52YWxfMTZxYW07Ci0JCQlib2R5LT5ub3JtYWwudmFsXzY0cWFtID0gYm9keS0+bm9ybWFsLmR1cF82NHFhbSA9Ci0JCQkJbGltaXRzLT52YWxfNjRxYW07Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWlmIChpID09IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcykKLQkJZ290byBlcnI7Ci0KLQllbnRyeSA9ICh2b2lkICopKHByaXYtPmN1cnZlX2RhdGEtPmRhdGEgKyBwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQpOwotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzOyBpKyspIHsKLQkJaWYgKCooKF9fbGUxNiAqKWVudHJ5KSAhPSBmcmVxKSB7Ci0JCQllbnRyeSArPSBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgewotCQkJbWVtY3B5KCZib2R5LT5sb25nYm93LmN1cnZlX2RhdGEsCi0JCQkJKHZvaWQgKikgZW50cnkgKyBzaXplb2YoX19sZTE2KSwKLQkJCQlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBwNTRfc2Nhbl9ib2R5ICpjaGFuID0gJmJvZHktPm5vcm1hbDsKLQkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9Ci0JCQkJKHZvaWQgKikgcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKLQotCQkJZW50cnkgKz0gc2l6ZW9mKF9fbGUxNik7Ci0JCQljaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlID0gODsKLQkJCW1lbXNldChjaGFuLT5jdXJ2ZV9kYXRhLCAwLCBzaXplb2YoKmNoYW4tPmN1cnZlX2RhdGEpKTsKLQkJCW1lbWNweShjaGFuLT5jdXJ2ZV9kYXRhLCBlbnRyeSwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKgotCQkJICAgICAgIG1pbigodTgpOCwgY3VydmVfZGF0YS0+cG9pbnRzX3Blcl9jaGFubmVsKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWlmIChpID09IHByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMpCi0JCWdvdG8gZXJyOwotCi0JaWYgKChwcml2LT5md192YXIgPj0gMHg1MDApICYmIChwcml2LT5md192YXIgPCAweDUwOSkpIHsKLQkJcmF0ZSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJhdGUpKTsKLQkJcmF0ZS0+YmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlLT5ydHNfcmF0ZXMpOyBpKyspCi0JCQlyYXRlLT5ydHNfcmF0ZXNbaV0gPSBpOwotCX0KLQotCXJzc2kgPSAoc3RydWN0IHBkYV9yc3NpX2NhbF9lbnRyeSAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7Ci0JcnNzaS0+bXVsID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpOwotCXJzc2ktPmFkZCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKTsKLQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgewotCQkvKiBMb25nYm93IGZyb250ZW5kIG5lZWRzIGV2ZXIgbW9yZSAqLwotCQlyc3NpID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcnNzaSkpOwotCQlyc3NpLT5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmxvbmdib3dfdW5rbik7Ci0JCXJzc2ktPmFkZCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubG9uZ2Jvd191bmsyKTsKLQl9Ci0KLQlpZiAocHJpdi0+ZndfdmFyID49IDB4NTA5KSB7Ci0JCXJhdGUgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyYXRlKSk7Ci0JCXJhdGUtPmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocmF0ZS0+cnRzX3JhdGVzKTsgaSsrKQotCQkJcmF0ZS0+cnRzX3JhdGVzW2ldID0gaTsKLQl9Ci0KLQloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOwotCWhkci0+bGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4gLSBzaXplb2YoKmhkcikpOwotCi0JcHJpdi0+dHgoZGV2LCBza2IpOwotCXJldHVybiAwOwotCi0gZXJyOgotCXByaW50ayhLRVJOX0VSUiAiJXM6IGZyZXF1ZW5jeSBjaGFuZ2UgZmFpbGVkXG4iLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQlwNTRfZnJlZV9za2IoZGV2LCBza2IpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X2xlZCAqbGVkOwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9MRUQsIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxlZCA9IChzdHJ1Y3QgcDU0X2xlZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpsZWQpKTsKLQlsZWQtPmZsYWdzID0gY3B1X3RvX2xlMTYoMHgwMDAzKTsKLQlsZWQtPm1hc2tbMF0gPSBsZWQtPm1hc2tbMV0gPSBjcHVfdG9fbGUxNihwcml2LT5zb2Z0bGVkX3N0YXRlKTsKLQlsZWQtPmRlbGF5WzBdID0gY3B1X3RvX2xlMTYoMSk7Ci0JbGVkLT5kZWxheVsxXSA9IGNwdV90b19sZTE2KDApOwotCXByaXYtPnR4KGRldiwgc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBQNTRfU0VUX1FVRVVFKHF1ZXVlLCBhaV9mcywgY3dfbWluLCBjd19tYXgsIF90eG9wKQlcCi1kbyB7CSAJCQkJCQkJXAotCXF1ZXVlLmFpZnMgPSBjcHVfdG9fbGUxNihhaV9mcyk7CQkJXAotCXF1ZXVlLmN3bWluID0gY3B1X3RvX2xlMTYoY3dfbWluKTsJCQlcCi0JcXVldWUuY3dtYXggPSBjcHVfdG9fbGUxNihjd19tYXgpOwkJCVwKLQlxdWV1ZS50eG9wID0gY3B1X3RvX2xlMTYoX3R4b3ApOwkJCVwKLX0gd2hpbGUoMCkKLQotc3RhdGljIGludCBwNTRfc2V0X2VkY2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF9lZGNmICplZGNmOwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmVkY2YpLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfRENGSU5JVCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZWRjZiA9IChzdHJ1Y3QgcDU0X2VkY2YgKilza2JfcHV0KHNrYiwgc2l6ZW9mKCplZGNmKSk7Ci0JaWYgKHByaXYtPnVzZV9zaG9ydF9zbG90KSB7Ci0JCWVkY2YtPnNsb3R0aW1lID0gOTsKLQkJZWRjZi0+c2lmcyA9IDB4MTA7Ci0JCWVkY2YtPmVvZnBhZCA9IDB4MDA7Ci0JfSBlbHNlIHsKLQkJZWRjZi0+c2xvdHRpbWUgPSAyMDsKLQkJZWRjZi0+c2lmcyA9IDB4MGE7Ci0JCWVkY2YtPmVvZnBhZCA9IDB4MDY7Ci0JfQotCS8qIChzZWUgcHJpc201NC9pc2xfb2lkLmggZm9yIGZ1cnRoZXIgZGV0YWlscykgKi8KLQllZGNmLT5mcmFtZWJ1cnN0ID0gY3B1X3RvX2xlMTYoMCk7Ci0JZWRjZi0+cm91bmRfdHJpcF9kZWxheSA9IGNwdV90b19sZTE2KDApOwotCWVkY2YtPmZsYWdzID0gMDsKLQltZW1zZXQoZWRjZi0+bWFwcGluZywgMCwgc2l6ZW9mKGVkY2YtPm1hcHBpbmcpKTsKLQltZW1jcHkoZWRjZi0+cXVldWUsIHByaXYtPnFvc19wYXJhbXMsIHNpemVvZihlZGNmLT5xdWV1ZSkpOwotCXByaXYtPnR4KGRldiwgc2tiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwNTRfc2V0X3BzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfcHNtICpwc207Ci0JdTE2IG1vZGU7Ci0JaW50IGk7Ci0KLQlpZiAoZGV2LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpCi0JCW1vZGUgPSBQNTRfUFNNIHwgUDU0X1BTTV9CRUFDT05fVElNRU9VVCB8IFA1NF9QU01fRFRJTSB8Ci0JCSAgICAgICBQNTRfUFNNX0NIRUNLU1VNIHwgUDU0X1BTTV9NQ0JDOwotCWVsc2UKLQkJbW9kZSA9IFA1NF9QU01fQ0FNOwotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnBzbSksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9QU00sIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBzbSA9IChzdHJ1Y3QgcDU0X3BzbSAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnBzbSkpOwotCXBzbS0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOwotCXBzbS0+YWlkID0gY3B1X3RvX2xlMTYocHJpdi0+YWlkKTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwc20tPmludGVydmFscyk7IGkrKykgewotCQlwc20tPmludGVydmFsc1tpXS5pbnRlcnZhbCA9Ci0JCQljcHVfdG9fbGUxNihkZXYtPmNvbmYubGlzdGVuX2ludGVydmFsKTsKLQkJcHNtLT5pbnRlcnZhbHNbaV0ucGVyaW9kcyA9IGNwdV90b19sZTE2KDEpOwotCX0KLQotCXBzbS0+YmVhY29uX3Jzc2lfc2tpcF9tYXggPSAyMDA7Ci0JcHNtLT5yc3NpX2RlbHRhX3RocmVzaG9sZCA9IDA7Ci0JcHNtLT5uciA9IDEwOwotCXBzbS0+ZXhjbHVkZVswXSA9IDA7Ci0KLQlwcml2LT50eChkZXYsIHNrYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwNTRfYmVhY29uX3RpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qCi0JICogdGhlIGdvb2QgZXhjdXNlIGZvciB0aGlzIG1lc3MgaXMgLi4uIHRoZSBmaXJtd2FyZS4KLQkgKiBUaGUgZHVtbXkgVElNIE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgYmVhY29uIGZyYW1lLAotCSAqIGJlY2F1c2UgaXQnbGwgYmUgb3ZlcndyaXR0ZW4hCi0JICovCi0KLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKLQl1OCAqcG9zLCAqZW5kOwotCi0JaWYgKHNrYi0+bGVuIDw9IHNpemVvZihtZ210KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwb3MgPSAodTggKiltZ210LT51LmJlYWNvbi52YXJpYWJsZTsKLQllbmQgPSBza2ItPmRhdGEgKyBza2ItPmxlbjsKLQl3aGlsZSAocG9zIDwgZW5kKSB7Ci0JCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKHBvc1swXSA9PSBXTEFOX0VJRF9USU0pIHsKLQkJCXU4IGR0aW1fbGVuID0gcG9zWzFdOwotCQkJdTggZHRpbV9wZXJpb2QgPSBwb3NbM107Ci0JCQl1OCAqbmV4dCA9IHBvcyArIDIgKyBkdGltX2xlbjsKLQotCQkJaWYgKGR0aW1fbGVuIDwgMykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJbWVtbW92ZShwb3MsIG5leHQsIGVuZCAtIG5leHQpOwotCi0JCQlpZiAoZHRpbV9sZW4gPiAzKQotCQkJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSAoZHRpbV9sZW4gLSAzKSk7Ci0KLQkJCXBvcyA9IGVuZCAtIChkdGltX2xlbiArIDIpOwotCi0JCQkvKiBhZGQgdGhlIGR1bW15IGF0IHRoZSBlbmQgKi8KLQkJCXBvc1swXSA9IFdMQU5fRUlEX1RJTTsKLQkJCXBvc1sxXSA9IDM7Ci0JCQlwb3NbMl0gPSAwOwotCQkJcG9zWzNdID0gZHRpbV9wZXJpb2Q7Ci0JCQlwb3NbNF0gPSAwOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcG9zICs9IDIgKyBwb3NbMV07Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKLQlpbnQgcmV0OwotCi0JaWYgKHByaXYtPmNhY2hlZF9iZWFjb24pIHsKLQkJcDU0X3R4X2NhbmNlbChkZXYsIHByaXYtPmNhY2hlZF9iZWFjb24pOwotCQkvKiB3YWl0IGZvciB0aGUgbGFzdCBiZWFjb24gdGhlIGJlIGZyZWVkICovCi0JCW1zbGVlcCgxMCk7Ci0JfQotCi0JYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoZGV2LCB2aWYpOwotCWlmICghYmVhY29uKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBwNTRfYmVhY29uX3RpbShiZWFjb24pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gcDU0X3R4KGRldiwgYmVhY29uKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXByaXYtPmNhY2hlZF9iZWFjb24gPSBiZWFjb247Ci0JcHJpdi0+dHNmX2hpZ2gzMiA9IDA7Ci0JcHJpdi0+dHNmX2xvdzMyID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHA1NF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IGVycjsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCWVyciA9IHByaXYtPm9wZW4oZGV2KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQlQNTRfU0VUX1FVRVVFKHByaXYtPnFvc19wYXJhbXNbMF0sIDB4MDAwMiwgMHgwMDAzLCAweDAwMDcsIDQ3KTsKLQlQNTRfU0VUX1FVRVVFKHByaXYtPnFvc19wYXJhbXNbMV0sIDB4MDAwMiwgMHgwMDA3LCAweDAwMGYsIDk0KTsKLQlQNTRfU0VUX1FVRVVFKHByaXYtPnFvc19wYXJhbXNbMl0sIDB4MDAwMywgMHgwMDBmLCAweDAzZmYsIDApOwotCVA1NF9TRVRfUVVFVUUocHJpdi0+cW9zX3BhcmFtc1szXSwgMHgwMDA3LCAweDAwMGYsIDB4MDNmZiwgMCk7Ci0JZXJyID0gcDU0X3NldF9lZGNmKGRldik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQltZW1zZXQocHJpdi0+YnNzaWQsIH4wLCBFVEhfQUxFTik7Ci0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci0JZXJyID0gcDU0X3NldHVwX21hYyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlxdWV1ZV9kZWxheWVkX3dvcmsoZGV2LT53b3JrcXVldWUsICZwcml2LT53b3JrLCAwKTsKLQotCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOwotCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwNTRfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKLQlwcml2LT5zb2Z0bGVkX3N0YXRlID0gMDsKLQlwNTRfc2V0X2xlZHMoZGV2KTsKLQotI2lmZGVmIENPTkZJR19QNTRfTEVEUwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX3dvcmspOwotI2VuZGlmIC8qIENPTkZJR19QNTRfTEVEUyAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+d29yayk7Ci0JaWYgKHByaXYtPmNhY2hlZF9iZWFjb24pCi0JCXA1NF90eF9jYW5jZWwoZGV2LCBwcml2LT5jYWNoZWRfYmVhY29uKTsKLQotCXByaXYtPnN0b3AoZGV2KTsKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT50eF9xdWV1ZSkpKQotCQlrZnJlZV9za2Ioc2tiKTsKLQlwcml2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKLQlwcml2LT50c2ZfaGlnaDMyID0gcHJpdi0+dHNmX2xvdzMyID0gMDsKLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHA1NF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlwcml2LT52aWYgPSBjb25mLT52aWY7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKLQkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JcDU0X3NldHVwX21hYyhkZXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlwcml2LT52aWYgPSBOVUxMOwotCWlmIChwcml2LT5jYWNoZWRfYmVhY29uKQotCQlwNTRfdHhfY2FuY2VsKGRldiwgcHJpdi0+Y2FjaGVkX2JlYWNvbik7Ci0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci0JbWVtc2V0KHByaXYtPm1hY19hZGRyLCAwLCBFVEhfQUxFTik7Ci0JbWVtc2V0KHByaXYtPmJzc2lkLCAwLCBFVEhfQUxFTik7Ci0JcDU0X3NldHVwX21hYyhkZXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikKLQkJcHJpdi0+b3V0cHV0X3Bvd2VyID0gY29uZi0+cG93ZXJfbGV2ZWwgPDwgMjsKLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9SQURJT19FTkFCTEVEKSB7Ci0JCXJldCA9IHA1NF9zZXR1cF9tYWMoZGV2KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7Ci0JCXJldCA9IHA1NF9zY2FuKGRldiwgUDU0X1NDQU5fRVhJVCwgMCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpIHsKLQkJcmV0ID0gcDU0X3NldF9wcyhkZXYpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBwNTRfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAotCQkJCSB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCi0JKnRvdGFsX2ZsYWdzICY9IEZJRl9QUk9NSVNDX0lOX0JTUyB8Ci0JCQlGSUZfT1RIRVJfQlNTOwotCi0JcHJpdi0+ZmlsdGVyX2ZsYWdzID0gKnRvdGFsX2ZsYWdzOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUykpCi0JCXA1NF9zZXR1cF9tYWMoZGV2KTsKLX0KLQotc3RhdGljIGludCBwNTRfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUxNiBxdWV1ZSwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCWlmICgocGFyYW1zKSAmJiAhKHF1ZXVlID4gNCkpIHsKLQkJUDU0X1NFVF9RVUVVRShwcml2LT5xb3NfcGFyYW1zW3F1ZXVlXSwgcGFyYW1zLT5haWZzLAotCQkJcGFyYW1zLT5jd19taW4sIHBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPnR4b3ApOwotCQlyZXQgPSBwNTRfc2V0X2VkY2YoZGV2KTsKLQl9IGVsc2UKLQkJcmV0ID0gLUVJTlZBTDsKLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2luaXRfeGJvd19zeW50aChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgcDU0X3hib3dfc3ludGggKnhib3c7Ci0KLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdyksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JeGJvdyA9IChzdHJ1Y3QgcDU0X3hib3dfc3ludGggKilza2JfcHV0KHNrYiwgc2l6ZW9mKCp4Ym93KSk7Ci0JeGJvdy0+bWFnaWMxID0gY3B1X3RvX2xlMTYoMHgxKTsKLQl4Ym93LT5tYWdpYzIgPSBjcHVfdG9fbGUxNigweDIpOwotCXhib3ctPmZyZXEgPSBjcHVfdG9fbGUxNig1MzkwKTsKLQltZW1zZXQoeGJvdy0+cGFkZGluZywgMCwgc2l6ZW9mKHhib3ctPnBhZGRpbmcpKTsKLQlwcml2LT50eChkZXYsIHNrYik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcDU0X2NvbW1vbiwKLQkJCQkJICAgICAgIHdvcmsud29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcHJpdi0+aHc7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCWlmICh1bmxpa2VseShwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkKLQkJcmV0dXJuIDsKLQotCS8qCi0JICogVE9ETzogd2FsayB0aHJvdWdoIHR4X3F1ZXVlIGFuZCBkbyB0aGUgZm9sbG93aW5nIHRhc2tzCi0JICogCTEuIGluaXRpYXRlIGJ1cnN0cy4KLQkgKiAgICAgIDIuIGNhbmNlbCBzdHVjayBmcmFtZXMgLyByZXNldCB0aGUgZGV2aWNlIGlmIG5lY2Vzc2FyeS4KLQkgKi8KLQotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHA1NF9zdGF0aXN0aWNzKSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1NUQVRfUkVBREJBQ0ssIEdGUF9LRVJORUwpOwotCWlmICghc2tiKQotCQlyZXR1cm4gOwotCi0JcHJpdi0+dHgoZGV2LCBza2IpOwotfQotCi1zdGF0aWMgaW50IHA1NF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCW1lbWNweShzdGF0cywgJnByaXYtPnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcDU0X2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0KLQltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0sCi0JICAgICAgIHNpemVvZihzdGF0c1swXSkgKiBkZXYtPnF1ZXVlcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKLQkJCQkgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKLQkJbWVtY3B5KHByaXYtPmJzc2lkLCBpbmZvLT5ic3NpZCwgRVRIX0FMRU4pOwotCQlyZXQgPSBwNTRfc2V0dXBfbWFjKGRldik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikgewotCQlyZXQgPSBwNTRfc2NhbihkZXYsIFA1NF9TQ0FOX0VYSVQsIDApOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JCXJldCA9IHA1NF9zZXR1cF9tYWMoZGV2KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCQlyZXQgPSBwNTRfYmVhY29uX3VwZGF0ZShkZXYsIHZpZik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0JLyogWFhYOiB0aGlzIG1pbWljcyBoYXZpbmcgdHdvIGNhbGxiYWNrcy4uLiBjbGVhbiB1cCAqLwotIG91dDoKLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCi0JaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfRVJQX1NMT1QgfCBCU1NfQ0hBTkdFRF9CRUFDT04pKSB7Ci0JCXByaXYtPnVzZV9zaG9ydF9zbG90ID0gaW5mby0+dXNlX3Nob3J0X3Nsb3Q7Ci0JCXA1NF9zZXRfZWRjZihkZXYpOwotCX0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7Ci0JCWlmIChkZXYtPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQkJcHJpdi0+YmFzaWNfcmF0ZV9tYXNrID0gKGluZm8tPmJhc2ljX3JhdGVzIDw8IDQpOwotCQllbHNlCi0JCQlwcml2LT5iYXNpY19yYXRlX21hc2sgPSBpbmZvLT5iYXNpY19yYXRlczsKLQkJcDU0X3NldHVwX21hYyhkZXYpOwotCQlpZiAocHJpdi0+ZndfdmFyID49IDB4NTAwKQotCQkJcDU0X3NjYW4oZGV2LCBQNTRfU0NBTl9FWElULCAwKTsKLQl9Ci0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgewotCQlpZiAoaW5mby0+YXNzb2MpIHsKLQkJCXByaXYtPmFpZCA9IGluZm8tPmFpZDsKLQkJCXByaXYtPndha2V1cF90aW1lciA9IGluZm8tPmJlYWNvbl9pbnQgKgotCQkJCQkgICAgIGluZm8tPmR0aW1fcGVyaW9kICogNTsKLQkJCXA1NF9zZXR1cF9tYWMoZGV2KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBwNTRfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBwNTRfa2V5Y2FjaGUgKnJ4a2V5OwotCWludCBzbG90LCByZXQgPSAwOwotCXU4IGFsZ28gPSAwOwotCi0JaWYgKG1vZHBhcmFtX25vaHdjcnlwdCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JaWYgKGNtZCA9PSBTRVRfS0VZKSB7Ci0JCXN3aXRjaCAoa2V5LT5hbGcpIHsKLQkJY2FzZSBBTEdfVEtJUDoKLQkJCWlmICghKHByaXYtPnByaXZhY3lfY2FwcyAmIChCUl9ERVNDX1BSSVZfQ0FQX01JQ0hBRUwgfAotCQkJICAgICAgQlJfREVTQ19QUklWX0NBUF9US0lQKSkpIHsKLQkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCQlnb3RvIG91dF91bmxvY2s7Ci0JCQl9Ci0JCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKLQkJCWFsZ28gPSBQNTRfQ1JZUFRPX1RLSVBNSUNIQUVMOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUxHX1dFUDoKLQkJCWlmICghKHByaXYtPnByaXZhY3lfY2FwcyAmIEJSX0RFU0NfUFJJVl9DQVBfV0VQKSkgewotCQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCX0KLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwotCQkJYWxnbyA9IFA1NF9DUllQVE9fV0VQOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUxHX0NDTVA6Ci0JCQlpZiAoIShwcml2LT5wcml2YWN5X2NhcHMgJiBCUl9ERVNDX1BSSVZfQ0FQX0FFU0NDTVApKSB7Ci0JCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQkJZ290byBvdXRfdW5sb2NrOwotCQkJfQotCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0JCQlhbGdvID0gUDU0X0NSWVBUT19BRVNDQ01QOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQlzbG90ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24ocHJpdi0+dXNlZF9yeGtleXMsCi0JCQkJCSAgICAgICBwcml2LT5yeF9rZXljYWNoZV9zaXplLCAwKTsKLQotCQlpZiAoc2xvdCA8IDApIHsKLQkJCS8qCi0JCQkgKiBUaGUgZGV2aWNlIHN1cHBvcnRzIHRoZSBjaG9vc2VuIGFsZ29yaXRobSwgYnV0IHRoZQotCQkJICogZmlybXdhcmUgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2gga2V5IHNsb3RzIHRvIHN0b3JlCi0JCQkgKiBhbGwgb2YgdGhlbS4KLQkJCSAqIEJ1dCBlbmNyeXB0aW9uIG9mZmxvYWQgZm9yIG91dGdvaW5nIGZyYW1lcyBpcyBhbHdheXMKLQkJCSAqIHBvc3NpYmxlLCBzbyB3ZSBqdXN0IHByZXRlbmQgdGhhdCB0aGUgdXBsb2FkIHdhcwotCQkJICogc3VjY2Vzc2Z1bCBhbmQgZG8gdGhlIGRlY3J5cHRpb24gaW4gc29mdHdhcmUuCi0JCQkgKi8KLQotCQkJLyogbWFyayB0aGUga2V5IGFzIGludmFsaWQuICovCi0JCQlrZXktPmh3X2tleV9pZHggPSAweGZmOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JfSBlbHNlIHsKLQkJc2xvdCA9IGtleS0+aHdfa2V5X2lkeDsKLQotCQlpZiAoc2xvdCA9PSAweGZmKSB7Ci0JCQkvKiBUaGlzIGtleSB3YXMgbm90IHVwbG9hZGVkIGludG8gdGhlIHJ4IGtleSBjYWNoZS4gKi8KLQotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KLQkJYml0bWFwX3JlbGVhc2VfcmVnaW9uKHByaXYtPnVzZWRfcnhrZXlzLCBzbG90LCAwKTsKLQkJYWxnbyA9IDA7Ci0JfQotCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnJ4a2V5KSwKLQkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikgewotCQliaXRtYXBfcmVsZWFzZV9yZWdpb24ocHJpdi0+dXNlZF9yeGtleXMsIHNsb3QsIDApOwotCQlyZXQgPSAtRU5PU1BDOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JcnhrZXkgPSAoc3RydWN0IHA1NF9rZXljYWNoZSAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKnJ4a2V5KSk7Ci0JcnhrZXktPmVudHJ5ID0gc2xvdDsKLQlyeGtleS0+a2V5X2lkID0ga2V5LT5rZXlpZHg7Ci0JcnhrZXktPmtleV90eXBlID0gYWxnbzsKLQlpZiAoc3RhKQotCQltZW1jcHkocnhrZXktPm1hYywgc3RhLT5hZGRyLCBFVEhfQUxFTik7Ci0JZWxzZQotCQltZW1zZXQocnhrZXktPm1hYywgfjAsIEVUSF9BTEVOKTsKLQlpZiAoa2V5LT5hbGcgIT0gQUxHX1RLSVApIHsKLQkJcnhrZXktPmtleV9sZW4gPSBtaW4oKHU4KTE2LCBrZXktPmtleWxlbik7Ci0JCW1lbWNweShyeGtleS0+a2V5LCBrZXktPmtleSwgcnhrZXktPmtleV9sZW4pOwotCX0gZWxzZSB7Ci0JCXJ4a2V5LT5rZXlfbGVuID0gMjQ7Ci0JCW1lbWNweShyeGtleS0+a2V5LCBrZXktPmtleSwgMTYpOwotCQltZW1jcHkoJihyeGtleS0+a2V5WzE2XSksICYoa2V5LT5rZXkKLQkJCVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWV0pLCA4KTsKLQl9Ci0KLQlwcml2LT50eChkZXYsIHNrYik7Ci0Ja2V5LT5od19rZXlfaWR4ID0gc2xvdDsKLQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUDU0X0xFRFMKLXN0YXRpYyB2b2lkIHA1NF91cGRhdGVfbGVkcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHA1NF9jb21tb24sCi0JCQkJCSAgICAgICBsZWRfd29yay53b3JrKTsKLQlpbnQgZXJyLCBpLCB0bXAsIGJsaW5rX2RlbGF5ID0gNDAwOwotCWJvb2wgcmVydW4gPSBmYWxzZTsKLQotCS8qIERvbid0IHRvZ2dsZSB0aGUgTEVELCB3aGVuIHRoZSBkZXZpY2UgaXMgZG93bi4gKi8KLQlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKLQkJcmV0dXJuIDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPmxlZHMpOyBpKyspCi0JCWlmIChwcml2LT5sZWRzW2ldLnRvZ2dsZWQpIHsKLQkJCXByaXYtPnNvZnRsZWRfc3RhdGUgfD0gQklUKGkpOwotCi0JCQl0bXAgPSA3MCArIDIwMCAvIChwcml2LT5sZWRzW2ldLnRvZ2dsZWQpOwotCQkJaWYgKHRtcCA8IGJsaW5rX2RlbGF5KQotCQkJCWJsaW5rX2RlbGF5ID0gdG1wOwotCi0JCQlpZiAocHJpdi0+bGVkc1tpXS5sZWRfZGV2LmJyaWdodG5lc3MgPT0gTEVEX09GRikKLQkJCQlyZXJ1biA9IHRydWU7Ci0KLQkJCXByaXYtPmxlZHNbaV0udG9nZ2xlZCA9Ci0JCQkJISFwcml2LT5sZWRzW2ldLmxlZF9kZXYuYnJpZ2h0bmVzczsKLQkJfSBlbHNlCi0JCQlwcml2LT5zb2Z0bGVkX3N0YXRlICY9IH5CSVQoaSk7Ci0KLQllcnIgPSBwNTRfc2V0X2xlZHMocHJpdi0+aHcpOwotCWlmIChlcnIgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gdXBkYXRlIExFRHMuXG4iLAotCQkJd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKLQotCWlmIChyZXJ1bikKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5sZWRfd29yaywKLQkJCW1zZWNzX3RvX2ppZmZpZXMoYmxpbmtfZGVsYXkpKTsKLX0KLQotc3RhdGljIHZvaWQgcDU0X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAotCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKLXsKLQlzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgcDU0X2xlZF9kZXYsCi0JCQkJCSAgICAgICBsZWRfZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBsZWQtPmh3X2RldjsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQotCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQotCQlyZXR1cm4gOwotCi0JaWYgKGJyaWdodG5lc3MpIHsKLQkJbGVkLT50b2dnbGVkKys7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+bGVkX3dvcmssCi0JCQkJICAgSFovMTApOwotCX0KLX0KLQotc3RhdGljIGludCBwNTRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCSAgICB1bnNpZ25lZCBpbnQgbGVkX2luZGV4LAotCQkJICAgIGNoYXIgKm5hbWUsIGNoYXIgKnRyaWdnZXIpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9sZWRfZGV2ICpsZWQgPSAmcHJpdi0+bGVkc1tsZWRfaW5kZXhdOwotCWludCBlcnI7Ci0KLQlpZiAobGVkLT5yZWdpc3RlcmVkKQotCQlyZXR1cm4gLUVFWElTVDsKLQotCXNucHJpbnRmKGxlZC0+bmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSksICJwNTQtJXM6OiVzIiwKLQkJIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIG5hbWUpOwotCWxlZC0+aHdfZGV2ID0gZGV2OwotCWxlZC0+aW5kZXggPSBsZWRfaW5kZXg7Ci0JbGVkLT5sZWRfZGV2Lm5hbWUgPSBsZWQtPm5hbWU7Ci0JbGVkLT5sZWRfZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7Ci0JbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gcDU0X2xlZF9icmlnaHRuZXNzX3NldDsKLQotCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoZGV2LT53aXBoeSksICZsZWQtPmxlZF9kZXYpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZWdpc3RlciAlcyBMRUQuXG4iLAotCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7Ci0JZWxzZQotCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBwNTRfaW5pdF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBUT0RPOgotCSAqIEZpZ3VyZSBvdXQgaWYgdGhlIEVFUFJPTSBjb250YWlucyBzb21lIGhpbnRzIGFib3V0IHRoZSBudW1iZXIKLQkgKiBvZiBhdmFpbGFibGUvcHJvZ3JhbW1hYmxlIExFRHMgb2YgdGhlIGRldmljZS4KLQkgKi8KLQotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5sZWRfd29yaywgcDU0X3VwZGF0ZV9sZWRzKTsKLQotCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQoZGV2LCAwLCAiYXNzb2MiLAotCQkJICAgICAgIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoZGV2KSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQoZGV2LCAxLCAidHgiLAotCQkJICAgICAgIGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoZGV2KSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQoZGV2LCAyLCAicngiLAotCQkJICAgICAgIGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoZGV2KSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHA1NF9yZWdpc3Rlcl9sZWQoZGV2LCAzLCAicmFkaW8iLAotCQkJICAgICAgIGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUoZGV2KSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHA1NF9zZXRfbGVkcyhkZXYpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHA1NF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJpdi0+bGVkcyk7IGkrKykKLQkJaWYgKHByaXYtPmxlZHNbaV0ucmVnaXN0ZXJlZCkKLQkJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT5sZWRzW2ldLmxlZF9kZXYpOwotfQotI2VuZGlmIC8qIENPTkZJR19QNTRfTEVEUyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcDU0X29wcyA9IHsKLQkudHgJCQk9IHA1NF90eCwKLQkuc3RhcnQJCQk9IHA1NF9zdGFydCwKLQkuc3RvcAkJCT0gcDU0X3N0b3AsCi0JLmFkZF9pbnRlcmZhY2UJCT0gcDU0X2FkZF9pbnRlcmZhY2UsCi0JLnJlbW92ZV9pbnRlcmZhY2UJPSBwNTRfcmVtb3ZlX2ludGVyZmFjZSwKLQkuc2V0X3RpbQkJPSBwNTRfc2V0X3RpbSwKLQkuc3RhX25vdGlmeQkJPSBwNTRfc3RhX25vdGlmeSwKLQkuc2V0X2tleQkJPSBwNTRfc2V0X2tleSwKLQkuY29uZmlnCQkJPSBwNTRfY29uZmlnLAotCS5ic3NfaW5mb19jaGFuZ2VkCT0gcDU0X2Jzc19pbmZvX2NoYW5nZWQsCi0JLmNvbmZpZ3VyZV9maWx0ZXIJPSBwNTRfY29uZmlndXJlX2ZpbHRlciwKLQkuY29uZl90eAkJPSBwNTRfY29uZl90eCwKLQkuZ2V0X3N0YXRzCQk9IHA1NF9nZXRfc3RhdHMsCi0JLmdldF90eF9zdGF0cwkJPSBwNTRfZ2V0X3R4X3N0YXRzCi19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2h3ICpwNTRfaW5pdF9jb21tb24oc2l6ZV90IHByaXZfZGF0YV9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2OwotCi0JZGV2ID0gaWVlZTgwMjExX2FsbG9jX2h3KHByaXZfZGF0YV9sZW4sICZwNTRfb3BzKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwcml2ID0gZGV2LT5wcml2OwotCXByaXYtPmh3ID0gZGV2OwotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKLQlwcml2LT5iYXNpY19yYXRlX21hc2sgPSAweDE1ZjsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT50eF9xdWV1ZSk7Ci0JZGV2LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAotCQkgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKLQkJICAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwotCi0JZGV2LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJCQkgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKLQkJCQkgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKLQkJCQkgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7Ci0KLQlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwkvKiBUT0RPOiBmaW5kIGFjdHVhbCB2YWx1ZSAqLwotCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9CRUFDT05dLmxpbWl0ID0gMTsKLQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfRldTQ0FOXS5saW1pdCA9IDE7Ci0JcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX01HTVRdLmxpbWl0ID0gMzsKLQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQ0FCXS5saW1pdCA9IDM7Ci0JcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0RBVEFdLmxpbWl0ID0gNTsKLQlkZXYtPnF1ZXVlcyA9IDE7Ci0JcHJpdi0+bm9pc2UgPSAtOTQ7Ci0JLyoKLQkgKiBXZSBzdXBwb3J0IGF0IG1vc3QgOCB0cmllcyBubyBtYXR0ZXIgd2hpY2ggcmF0ZSB0aGV5J3JlIGF0LAotCSAqIHdlIGNhbm5vdCBzdXBwb3J0IG1heF9yYXRlcyAqIG1heF9yYXRlX3RyaWVzIGFzIHdlIHNldCBpdAotCSAqIGhlcmUsIGJ1dCBzZXR0aW5nIGl0IGNvcnJlY3RseSB0byA0LzIgb3Igc28gd291bGQgbGltaXQgdXMKLQkgKiBhcnRpZmljaWFsbHkgaWYgdGhlIFJDIGFsZ29yaXRobSB3YW50cyBqdXN0IHR3byByYXRlcywgc28KLQkgKiBsZXQncyBzYXkgNC83LCB3ZSdsbCByZWRpc3RyaWJ1dGUgaXQgYXQgVFggdGltZSwgc2VlIHRoZQotCSAqIGNvbW1lbnRzIHRoZXJlLgotCSAqLwotCWRldi0+bWF4X3JhdGVzID0gNDsKLQlkZXYtPm1heF9yYXRlX3RyaWVzID0gNzsKLQlkZXYtPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIDQgKwotCQkJCSBzaXplb2Yoc3RydWN0IHA1NF90eF9kYXRhKTsKLQotCW11dGV4X2luaXQoJnByaXYtPmNvbmZfbXV0ZXgpOwotCWluaXRfY29tcGxldGlvbigmcHJpdi0+ZWVwcm9tX2NvbXApOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT53b3JrLCBwNTRfd29yayk7Ci0KLQlyZXR1cm4gZGV2OwotfQotRVhQT1JUX1NZTUJPTF9HUEwocDU0X2luaXRfY29tbW9uKTsKLQotaW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQotewotCWludCBlcnI7Ci0KLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIocGRldiwgIkNhbm5vdCByZWdpc3RlciBkZXZpY2UgKCVkKS5cbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0jaWZkZWYgQ09ORklHX1A1NF9MRURTCi0JZXJyID0gcDU0X2luaXRfbGVkcyhkZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0jZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCi0KLQlkZXZfaW5mbyhwZGV2LCAiaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWdpc3Rlcl9jb21tb24pOwotCi12b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Ja2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7Ci0Ja2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKLQlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKLQlrZnJlZShwcml2LT51c2VkX3J4a2V5cyk7Ci0KLSNpZmRlZiBDT05GSUdfUDU0X0xFRFMKLQlwNTRfdW5yZWdpc3Rlcl9sZWRzKGRldik7Ci0jZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCi19Ci1FWFBPUlRfU1lNQk9MX0dQTChwNTRfZnJlZV9jb21tb24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWVhZDdhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY0NCArMCwwIEBACi0jaWZuZGVmIFA1NENPTU1PTl9ICi0jZGVmaW5lIFA1NENPTU1PTl9ICi0KLS8qCi0gKiBDb21tb24gY29kZSBzcGVjaWZpYyBkZWZpbml0aW9ucyBmb3IgbWFjODAyMTEgUHJpc201NCBkcml2ZXJzCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KLSAqIENvcHlyaWdodCAoYykgMjAwNywgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgotICoKLSAqIEJhc2VkIG9uOgotICogLSB0aGUgaXNsc20gKHNvZnRtYWMgcHJpc201NCkgZHJpdmVyLCB3aGljaCBpczoKLSAqICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBKZWFuLUJhcHRpc3RlIE5vdGUgPGpibm90ZUBnbWFpbC5jb20+LCBldCBhbC4KLSAqCi0gKiAtIExNQUMgQVBJIGludGVyZmFjZSBoZWFkZXIgZmlsZSBmb3IgU1RMQzQ1NjAgKGxtYWNfbG9uZ2Jvdy5oKQotICogICBDb3B5cmlnaHQgKEMpIDIwMDcgQ29uZXhhbnQgU3lzdGVtcywgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotc3RydWN0IGJvb3RyZWMgewotCV9fbGUzMiBjb2RlOwotCV9fbGUzMiBsZW47Ci0JdTMyIGRhdGFbMTBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfTUFTSwkJMHgwMDA3Ci0jZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9EVUVUVEUzCTB4MDAwMQotI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMgkweDAwMDIKLSNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0ZSSVNCRUUJMHgwMDAzCi0jZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9YQk9XCQkweDAwMDQKLSNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cJMHgwMDA1Ci0jZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfTUFTSwkJMHgwMDE4Ci0jZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfUEFfREVURUNUT1IJMHgwMDAwCi0jZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfRElTQUJMRUQJMHgwMDA4Ci0jZGVmaW5lIFBEUl9TWU5USF9JUV9DQUxfWklGCQkweDAwMTAKLSNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfTUFTSwkweDAwMjAKLSNkZWZpbmUgUERSX1NZTlRIX0ZBQV9TV0lUQ0hfRU5BQkxFRAkweDAwMjAKLSNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9NQVNLCQkweDAwNDAKLSNkZWZpbmUgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRAkweDAwNDAKLSNkZWZpbmUgUERSX1NZTlRIXzVfR0haX01BU0sJCTB4MDA4MAotI2RlZmluZSBQRFJfU1lOVEhfNV9HSFpfRElTQUJMRUQJMHgwMDgwCi0jZGVmaW5lIFBEUl9TWU5USF9SWF9ESVZfTUFTSwkJMHgwMTAwCi0jZGVmaW5lIFBEUl9TWU5USF9SWF9ESVZfU1VQUE9SVEVECTB4MDEwMAotI2RlZmluZSBQRFJfU1lOVEhfVFhfRElWX01BU0sJCTB4MDIwMAotI2RlZmluZSBQRFJfU1lOVEhfVFhfRElWX1NVUFBPUlRFRAkweDAyMDAKLQotc3RydWN0IGJvb3RyZWNfZXhwX2lmIHsKLQlfX2xlMTYgcm9sZTsKLQlfX2xlMTYgaWZfaWQ7Ci0JX19sZTE2IHZhcmlhbnQ7Ci0JX19sZTE2IGJ0bV9jb21wYXQ7Ci0JX19sZTE2IHRvcF9jb21wYXQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0jZGVmaW5lIEJSX0RFU0NfUFJJVl9DQVBfV0VQCQlCSVQoMCkKLSNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9US0lQCQlCSVQoMSkKLSNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9NSUNIQUVMCUJJVCgyKQotI2RlZmluZSBCUl9ERVNDX1BSSVZfQ0FQX0NDWF9DUAkJQklUKDMpCi0jZGVmaW5lIEJSX0RFU0NfUFJJVl9DQVBfQ0NYX01JQwlCSVQoNCkKLSNkZWZpbmUgQlJfREVTQ19QUklWX0NBUF9BRVNDQ01QCUJJVCg1KQotCi1zdHJ1Y3QgYm9vdHJlY19kZXNjIHsKLQlfX2xlMTYgbW9kZXM7Ci0JX19sZTE2IGZsYWdzOwotCV9fbGUzMiByeF9zdGFydDsKLQlfX2xlMzIgcnhfZW5kOwotCXU4IGhlYWRyb29tOwotCXU4IHRhaWxyb29tOwotCXU4IHR4X3F1ZXVlczsKLQl1OCB0eF9kZXB0aDsKLQl1OCBwcml2YWN5X2NhcHM7Ci0JdTggcnhfa2V5Y2FjaGVfc2l6ZTsKLQl1OCB0aW1lX3NpemU7Ci0JdTggcGFkZGluZzsKLQl1OCByYXRlc1sxNl07Ci0JdTggcGFkZGluZzJbNF07Ci0JX19sZTE2IHJ4X210dTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLSNkZWZpbmUgQlJfQ09ERV9NSU4JCQkweDgwMDAwMDAwCi0jZGVmaW5lIEJSX0NPREVfQ09NUE9ORU5UX0lECQkweDgwMDAwMDAxCi0jZGVmaW5lIEJSX0NPREVfQ09NUE9ORU5UX1ZFUlNJT04JMHg4MDAwMDAwMgotI2RlZmluZSBCUl9DT0RFX0RFUEVOREVOVF9JRgkJMHg4MDAwMDAwMwotI2RlZmluZSBCUl9DT0RFX0VYUE9TRURfSUYJCTB4ODAwMDAwMDQKLSNkZWZpbmUgQlJfQ09ERV9ERVNDUgkJCTB4ODAwMDAxMDEKLSNkZWZpbmUgQlJfQ09ERV9NQVgJCQkweDhGRkZGRkZGCi0jZGVmaW5lIEJSX0NPREVfRU5EX09GX0JSQQkJMHhGRjAwMDBGRgotI2RlZmluZSBMRUdBQ1lfQlJfQ09ERV9FTkRfT0ZfQlJBCTB4RkZGRkZGRkYKLQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9BTElHTgkJQklUKDE0KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQwlCSVQoMCkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUCBCSVQoMSkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1NFUU5SCUJJVCgyKQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQklUMwlCSVQoMykKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0JVUlNUCUJJVCg0KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUwJQklUKDUpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9DTEVBUlRJTQlCSVQoNikKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0hJVENISElLRQlCSVQoNykKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX0NPTVBSRVNTCUJJVCg4KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfQ09OQ0FUCUJJVCg5KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUENTX0FDQ0VQVCBCSVQoMTApCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX09VVF9XQUlURU9TUAlCSVQoMTEpCi0KLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fRkNTX0dPT0QJQklUKDApCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX01BVENIX01BQwlCSVQoMSkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fTUNCQwlCSVQoMikKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fQkVBQ09OCUJJVCgzKQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9NQVRDSF9CU1MJQklUKDQpCi0jZGVmaW5lIFA1NF9IRFJfRkxBR19EQVRBX0lOX0JDQVNUX0JTUwlCSVQoNSkKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fREFUQQlCSVQoNikKLSNkZWZpbmUgUDU0X0hEUl9GTEFHX0RBVEFfSU5fVFJVTkNBVEVECUJJVCg3KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9CSVQ4CUJJVCg4KQotI2RlZmluZSBQNTRfSERSX0ZMQUdfREFUQV9JTl9UUkFOU1BBUkVOVCBCSVQoOSkKLQotLyogUERBIGRlZmluZXMgYXJlIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbiAodGFrZW4gZnJvbSBpc2xzbV9wZGEuaCkgKi8KLQotc3RydWN0IHBkYV9lbnRyeSB7Ci0JX19sZTE2IGxlbjsJLyogaW5jbHVkZXMgYm90aCBjb2RlIGFuZCBkYXRhICovCi0JX19sZTE2IGNvZGU7Ci0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgZWVwcm9tX3BkYV93cmFwIHsKLQlfX2xlMzIgbWFnaWM7Ci0JX19sZTE2IHBhZDsKLQlfX2xlMTYgbGVuOwotCV9fbGUzMiBhcm1fb3Bjb2RlOwotCXU4IGRhdGFbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHsKLQlfX2xlMTYgaXFfcGFyYW1bNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5IHsKLSAgICAgICAgX19sZTE2IGZyZXE7Ci0Jc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHBhcmFtczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0IHsKLQlfX2xlMTYgZnJlcTsKLQl1OCB2YWxfYnBzazsKLQl1OCB2YWxfcXBzazsKLQl1OCB2YWxfMTZxYW07Ci0JdTggdmFsXzY0cWFtOwotCXU4IHJhdGVfc2V0X21hc2s7Ci0JdTggcmF0ZV9zZXRfc2l6ZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjAgewotCXU4IHJmX3Bvd2VyOwotCXU4IHBhX2RldGVjdG9yOwotCXU4IHBjdjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEgewotCXU4IHJmX3Bvd2VyOwotCXU4IHBhX2RldGVjdG9yOwotCXU4IGRhdGFfYmFya2VyOwotCXU4IGRhdGFfYnBzazsKLQl1OCBkYXRhX3Fwc2s7Ci0JdTggZGF0YV8xNnFhbTsKLQl1OCBkYXRhXzY0cWFtOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgewotCXU4IHJmX3Bvd2VyOwotCXU4IHBhX2RldGVjdG9yOwotCXU4IGRhdGFfYmFya2VyOwotCXU4IGRhdGFfYnBzazsKLQl1OCBkYXRhX3Fwc2s7Ci0JdTggZGF0YV8xNnFhbTsKLQl1OCBkYXRhXzY0cWFtOwotCXU4IHBhZGRpbmc7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhIHsKLQl1OCBjYWxfbWV0aG9kX3JldjsKLQl1OCBjaGFubmVsczsKLQl1OCBwb2ludHNfcGVyX2NoYW5uZWw7Ci0JdTggcGFkZGluZzsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfcnNzaV9jYWxfZW50cnkgewotCV9fbGUxNiBtdWw7Ci0JX19sZTE2IGFkZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcGRhX2NvdW50cnkgewotCXU4IHJlZ2RvbWFpbjsKLQl1OCBhbHBoYTJbMl07Ci0JdTggZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFdhcm5pbmc6IExvbmdib3cncyBzdHJ1Y3R1cmVzIGFyZSBib2d1cy4KLSAqLwotc3RydWN0IHA1NF9jaGFubmVsX291dHB1dF9saW1pdF9sb25nYm93IHsKLQlfX2xlMTYgcmZfcG93ZXJfcG9pbnRzWzEyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlX2xvbmdib3cgewotCV9fbGUxNiByZl9wb3dlcjsKLQlfX2xlMTYgcGFfZGV0ZWN0b3I7Ci0Jc3RydWN0IHsKLQkJX19sZTE2IGRhdGFbNF07Ci0JfSBwb2ludHNbM10gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgewotCV9fbGUxNiBlbnRyaWVzOwotCV9fbGUxNiBlbnRyeV9zaXplOwotCV9fbGUxNiBvZmZzZXQ7Ci0JX19sZTE2IGxlbjsKLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiB0aGlzIGRlZmluZXMgdGhlIFBEUiBjb2RlcyB1c2VkIHRvIGJ1aWxkIFBEQXMgYXMgZGVmaW5lZCBpbiBkb2N1bWVudAotICogbnVtYmVyIDU1MzE1NS4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWlycm9ycyB2ZXJzaW9uIDEuMSBvZiB0aGUKLSAqIGRvY3VtZW50IGFuZCBsaXN0cyBvbmx5IFBEUnMgc3VwcG9ydGVkIGJ5IHRoZSBBUk0gcGxhdGZvcm0uCi0gKi8KLQotLyogY29tbW9uIGFuZCBjaG9pY2UgcmFuZ2UgKDB4MDAwMCAtIDB4MGZmZikgKi8KLSNkZWZpbmUgUERSX0VORAkJCQkJMHgwMDAwCi0jZGVmaW5lIFBEUl9NQU5VRkFDVFVSSU5HX1BBUlRfTlVNQkVSCQkweDAwMDEKLSNkZWZpbmUgUERSX1BEQV9WRVJTSU9OCQkJCTB4MDAwMgotI2RlZmluZSBQRFJfTklDX1NFUklBTF9OVU1CRVIJCQkweDAwMDMKLQotI2RlZmluZSBQRFJfTUFDX0FERFJFU1MJCQkJMHgwMTAxCi0jZGVmaW5lIFBEUl9SRUdVTEFUT1JZX0RPTUFJTl9MSVNUCQkweDAxMDMKLSNkZWZpbmUgUERSX1RFTVBFUkFUVVJFX1RZUEUJCQkweDAxMDcKLQotI2RlZmluZSBQRFJfUFJJU01fUENJX0lERU5USUZJRVIJCTB4MDQwMgotCi0vKiBBUk0gcmFuZ2UgKDB4MTAwMCAtIDB4MWZmZikgKi8KLSNkZWZpbmUgUERSX0NPVU5UUllfSU5GT1JNQVRJT04JCQkweDEwMDAKLSNkZWZpbmUgUERSX0lOVEVSRkFDRV9MSVNUCQkJMHgxMDAxCi0jZGVmaW5lIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQJMHgxMDAyCi0jZGVmaW5lIFBEUl9PRU1fTkFNRQkJCQkweDEwMDMKLSNkZWZpbmUgUERSX1BST0RVQ1RfTkFNRQkJCTB4MTAwNAotI2RlZmluZSBQRFJfVVRGOF9PRU1fTkFNRQkJCTB4MTAwNQotI2RlZmluZSBQRFJfVVRGOF9QUk9EVUNUX05BTUUJCQkweDEwMDYKLSNkZWZpbmUgUERSX0NPVU5UUllfTElTVAkJCTB4MTAwNwotI2RlZmluZSBQRFJfREVGQVVMVF9DT1VOVFJZCQkJMHgxMDA4Ci0KLSNkZWZpbmUgUERSX0FOVEVOTkFfR0FJTgkJCTB4MTEwMAotCi0jZGVmaW5lIFBEUl9QUklTTV9JTkRJR09fUEFfQ0FMSUJSQVRJT05fREFUQQkweDE5MDEKLSNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT04JCTB4MTkwMgotI2RlZmluZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFMJMHgxOTAzCi0jZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQQkJMHgxOTA0Ci0jZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0RVQUxfQkFORAkweDE5MDUKLSNkZWZpbmUgUERSX1BSSVNNX1pJRl9UWF9JUV9DQUxJQlJBVElPTgkJMHgxOTA2Ci0jZGVmaW5lIFBEUl9SRUdVTEFUT1JZX1BPV0VSX0xJTUlUUwkJMHgxOTA3Ci0jZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0VYVEVOREVECTB4MTkwOAotI2RlZmluZSBQRFJfUkFESUFURURfVFJBTlNNSVNTSU9OX0NPUlJFQ1RJT04JMHgxOTA5Ci0jZGVmaW5lIFBEUl9QUklTTV9UWF9JUV9DQUxJQlJBVElPTgkJMHgxOTBhCi0KLS8qIHJlc2VydmVkIHJhbmdlICgweDIwMDAgLSAweDdmZmYpICovCi0KLS8qIGN1c3RvbWVyIHJhbmdlICgweDgwMDAgLSAweGZmZmYpICovCi0jZGVmaW5lIFBEUl9CQVNFQkFORF9SRUdJU1RFUlMJCQkJMHg4MDAwCi0jZGVmaW5lIFBEUl9QRVJfQ0hBTk5FTF9CQVNFQkFORF9SRUdJU1RFUlMJCTB4ODAwMQotCi0vKiB1c2VkIGJ5IG91ciBtb2RpZmljYXRlZCBlZXByb20gaW1hZ2UgKi8KLSNkZWZpbmUgUERSX1JTU0lfTElORUFSX0FQUFJPWElNQVRJT05fQ1VTVE9NCQkweERFQUQKLSNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9PVVRQVVRfUE9XRVJfTElNSVRTX0NVU1RPTQkweEJFRUYKLSNkZWZpbmUgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBX0NVU1RPTQkJMHhCMDVECi0KLS8qIFBEUiBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdCBjb3VudHJ5ICYgY291bnRyeSBsaXN0ICovCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERQkJMHg4MAotI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0NPREVfUkVBTAkweDAwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfQ09ERV9QU0VVRE8JMHg4MAotI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0JBTkQJCTB4NDAKLSNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9CQU5EXzJHSFoJMHgwMAotI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0JBTkRfNUdIWgkweDQwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SCQkweDMwCi0jZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU9ET09SX0JPVEgJMHgwMAotI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lPRE9PUl9JTkRPT1IJMHgyMAotI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0lPRE9PUl9PVVRET09SCTB4MzAKLSNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JTkRFWAkJMHgwRgotCi1zdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2IHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYgb2Zmc2V0OwotCQkJX19sZTE2IGxlbjsKLQkJCXU4IGRhdGFbMF07Ci0JCX0gdjE7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgb2Zmc2V0OwotCQkJX19sZTE2IGxlbjsKLQkJCXU4IG1hZ2ljMjsKLQkJCXU4IHBhZDsKLQkJCXU4IG1hZ2ljWzRdOwotCQkJdTggZGF0YVswXTsKLQkJfSB2MjsKLQl9ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSBwNTRfcnhfZGVjcnlwdF9zdGF0dXMgewotCVA1NF9ERUNSWVBUX05PTkUgPSAwLAotCVA1NF9ERUNSWVBUX09LLAotCVA1NF9ERUNSWVBUX05PS0VZLAotCVA1NF9ERUNSWVBUX05PTUlDSEFFTCwKLQlQNTRfREVDUllQVF9OT0NLSVBNSUMsCi0JUDU0X0RFQ1JZUFRfRkFJTF9XRVAsCi0JUDU0X0RFQ1JZUFRfRkFJTF9US0lQLAotCVA1NF9ERUNSWVBUX0ZBSUxfTUlDSEFFTCwKLQlQNTRfREVDUllQVF9GQUlMX0NLSVBLUCwKLQlQNTRfREVDUllQVF9GQUlMX0NLSVBNSUMsCi0JUDU0X0RFQ1JZUFRfRkFJTF9BRVNDQ01QCi19OwotCi1zdHJ1Y3QgcDU0X3J4X2RhdGEgewotCV9fbGUxNiBmbGFnczsKLQlfX2xlMTYgbGVuOwotCV9fbGUxNiBmcmVxOwotCXU4IGFudGVubmE7Ci0JdTggcmF0ZTsKLQl1OCByc3NpOwotCXU4IHF1YWxpdHk7Ci0JdTggZGVjcnlwdF9zdGF0dXM7Ci0JdTggcnNzaV9yYXc7Ci0JX19sZTMyIHRzZjMyOwotCV9fbGUzMiB1bmFsbG9jMDsKLQl1OCBhbGlnblswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHA1NF90cmFwX3R5cGUgewotCVA1NF9UUkFQX1NDQU4gPSAwLAotCVA1NF9UUkFQX1RJTUVSLAotCVA1NF9UUkFQX0JFQUNPTl9UWCwKLQlQNTRfVFJBUF9GQUFfUkFESU9fT04sCi0JUDU0X1RSQVBfRkFBX1JBRElPX09GRiwKLQlQNTRfVFJBUF9SQURBUiwKLQlQNTRfVFJBUF9OT19CRUFDT04sCi0JUDU0X1RSQVBfVEJUVCwKLQlQNTRfVFJBUF9TQ09fRU5URVIsCi0JUDU0X1RSQVBfU0NPX0VYSVQKLX07Ci0KLXN0cnVjdCBwNTRfdHJhcCB7Ci0JX19sZTE2IGV2ZW50OwotCV9fbGUxNiBmcmVxdWVuY3k7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotZW51bSBwNTRfZnJhbWVfc2VudF9zdGF0dXMgewotCVA1NF9UWF9PSyA9IDAsCi0JUDU0X1RYX0ZBSUxFRCwKLQlQNTRfVFhfUFNNLAotCVA1NF9UWF9QU01fQ0FOQ0VMTEVEID0gNAotfTsKLQotc3RydWN0IHA1NF9mcmFtZV9zZW50IHsKLQl1OCBzdGF0dXM7Ci0JdTggdHJpZXM7Ci0JdTggYWNrX3Jzc2k7Ci0JdTggcXVhbGl0eTsKLQlfX2xlMTYgc2VxOwotCXU4IGFudGVubmE7Ci0JdTggcGFkZGluZzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHA1NF90eF9kYXRhX2NyeXB0IHsKLQlQNTRfQ1JZUFRPX05PTkUgPSAwLAotCVA1NF9DUllQVE9fV0VQLAotCVA1NF9DUllQVE9fVEtJUCwKLQlQNTRfQ1JZUFRPX1RLSVBNSUNIQUVMLAotCVA1NF9DUllQVE9fQ0NYX1dFUE1JQywKLQlQNTRfQ1JZUFRPX0NDWF9LUE1JQywKLQlQNTRfQ1JZUFRPX0NDWF9LUCwKLQlQNTRfQ1JZUFRPX0FFU0NDTVAKLX07Ci0KLWVudW0gcDU0X3R4X2RhdGFfcXVldWUgewotCVA1NF9RVUVVRV9CRUFDT04JPSAwLAotCVA1NF9RVUVVRV9GV1NDQU4JPSAxLAotCVA1NF9RVUVVRV9NR01UCQk9IDIsCi0JUDU0X1FVRVVFX0NBQgkJPSAzLAotCVA1NF9RVUVVRV9EQVRBCQk9IDQsCi0KLQlQNTRfUVVFVUVfQUNfTlVNCT0gNCwKLQlQNTRfUVVFVUVfQUNfVk8JCT0gNCwKLQlQNTRfUVVFVUVfQUNfVkkJCT0gNSwKLQlQNTRfUVVFVUVfQUNfQkUJCT0gNiwKLQlQNTRfUVVFVUVfQUNfQksJCT0gNywKLQotCS8qIGtlZXAgbGFzdCAqLwotCVA1NF9RVUVVRV9OVU0JCT0gOCwKLX07Ci0KLXN0cnVjdCBwNTRfdHhfZGF0YSB7Ci0JdTggcmF0ZXNldFs4XTsKLQl1OCBydHNfcmF0ZV9pZHg7Ci0JdTggY3J5cHRfb2Zmc2V0OwotCXU4IGtleV90eXBlOwotCXU4IGtleV9sZW47Ci0JdTgga2V5WzE2XTsKLQl1OCBod19xdWV1ZTsKLQl1OCBiYWNrbG9nOwotCV9fbGUxNiBkdXJhdGlvbnNbNF07Ci0JdTggdHhfYW50ZW5uYTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBjdHNfcmF0ZTsKLQkJCV9fbGUxNiBvdXRwdXRfcG93ZXI7Ci0JCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbG9uZ2JvdzsKLQkJc3RydWN0IHsKLQkJCXU4IG91dHB1dF9wb3dlcjsKLQkJCXU4IGN0c19yYXRlOwotCQkJdTggdW5hbGxvYzsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbm9ybWFsOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCXU4IHVuYWxsb2MyWzJdOwotCXU4IGFsaWduWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIHVuaXQgaXMgbXMgKi8KLSNkZWZpbmUgUDU0X1RYX0ZSQU1FX0xJRkVUSU1FIDIwMDAKLSNkZWZpbmUgUDU0X1RYX1RJTUVPVVQgNDAwMAotI2RlZmluZSBQNTRfU1RBVElTVElDU19VUERBVEUgNTAwMAotCi0jZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9OT05FCQkwCi0jZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9TVEFUSU9OCQlCSVQoMCkKLSNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX0lCU1MJCUJJVCgxKQotI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfQVAJCUJJVCgyKQotI2RlZmluZSBQNTRfRklMVEVSX1RZUEVfVFJBTlNQQVJFTlQJQklUKDMpCi0jZGVmaW5lIFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUwlCSVQoNCkKLSNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX0hJQkVSTkFURQlCSVQoNSkKLSNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX05PQUNLCQlCSVQoNikKLSNkZWZpbmUgUDU0X0ZJTFRFUl9UWVBFX1JYX0RJU0FCTEVECUJJVCg3KQotCi1zdHJ1Y3QgcDU0X3NldHVwX21hYyB7Ci0JX19sZTE2IG1hY19tb2RlOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JdTggcnhfYW50ZW5uYTsKLQl1OCByeF9hbGlnbjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgYmFzaWNfcmF0ZV9tYXNrOwotCQkJdTggcnRzX3JhdGVzWzhdOwotCQkJX19sZTMyIHJ4X2FkZHI7Ci0JCQlfX2xlMTYgbWF4X3J4OwotCQkJX19sZTE2IHJ4aHc7Ci0JCQlfX2xlMTYgd2FrZXVwX3RpbWVyOwotCQkJX19sZTE2IHVuYWxsb2MwOwotCQl9IHYxIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQkJc3RydWN0IHsKLQkJCV9fbGUzMiByeF9hZGRyOwotCQkJX19sZTE2IG1heF9yeDsKLQkJCV9fbGUxNiByeGh3OwotCQkJX19sZTE2IHRpbWVyOwotCQkJX19sZTE2IHRydW5jYXRlOwotCQkJX19sZTMyIGJhc2ljX3JhdGVfbWFzazsKLQkJCXU4IHNic3Nfb2Zmc2V0OwotCQkJdTggbWNhc3Rfd2luZG93OwotCQkJdTggcnhfcnNzaV90aHJlc2hvbGQ7Ci0JCQl1OCByeF9lZF90aHJlc2hvbGQ7Ci0JCQlfX2xlMzIgcmVmX2Nsb2NrOwotCQkJX19sZTE2IGxwZl9iYW5kd2lkdGg7Ci0JCQlfX2xlMTYgb3NjX3N0YXJ0X2RlbGF5OwotCQl9IHYyIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFA1NF9TRVRVUF9WMV9MRU4gNDAKLSNkZWZpbmUgUDU0X1NFVFVQX1YyX0xFTiAoc2l6ZW9mKHN0cnVjdCBwNTRfc2V0dXBfbWFjKSkKLQotI2RlZmluZSBQNTRfU0NBTl9FWElUCUJJVCgwKQotI2RlZmluZSBQNTRfU0NBTl9UUkFQCUJJVCgxKQotI2RlZmluZSBQNTRfU0NBTl9BQ1RJVkUgQklUKDIpCi0jZGVmaW5lIFA1NF9TQ0FOX0ZJTFRFUiBCSVQoMykKLQotc3RydWN0IHA1NF9zY2FuX2hlYWQgewotCV9fbGUxNiBtb2RlOwotCV9fbGUxNiBkd2VsbDsKLQl1OCBzY2FuX3BhcmFtc1syMF07Ci0JX19sZTE2IGZyZXE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9zY2FuX2JvZHkgewotCXU4IHBhX3BvaW50c19wZXJfY3VydmU7Ci0JdTggdmFsX2JhcmtlcjsKLQl1OCB2YWxfYnBzazsKLQl1OCB2YWxfcXBzazsKLQl1OCB2YWxfMTZxYW07Ci0JdTggdmFsXzY0cWFtOwotCXN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUgY3VydmVfZGF0YVs4XTsKLQl1OCBkdXBfYnBzazsKLQl1OCBkdXBfcXBzazsKLQl1OCBkdXBfMTZxYW07Ci0JdTggZHVwXzY0cWFtOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfc2Nhbl9ib2R5X2xvbmdib3cgewotCXN0cnVjdCBwNTRfY2hhbm5lbF9vdXRwdXRfbGltaXRfbG9uZ2JvdyBwb3dlcl9saW1pdHM7Ci0Jc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9sb25nYm93IGN1cnZlX2RhdGFbOF07Ci0JX19sZTE2IHVua25bNl07CQkvKiBtYXliZSBtb3JlIHBvd2VyX2xpbWl0cyBvciByYXRlX21hc2sgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi11bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uIHsKLQlzdHJ1Y3QgcDU0X3NjYW5fYm9keSBub3JtYWw7Ci0Jc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyBsb25nYm93OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgewotCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7Ci0JdTggcnRzX3JhdGVzWzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfbGVkIHsKLQlfX2xlMTYgZmxhZ3M7Ci0JX19sZTE2IG1hc2tbMl07Ci0JX19sZTE2IGRlbGF5WzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfZWRjZiB7Ci0JdTggZmxhZ3M7Ci0JdTggc2xvdHRpbWU7Ci0JdTggc2lmczsKLQl1OCBlb2ZwYWQ7Ci0Jc3RydWN0IHA1NF9lZGNmX3F1ZXVlX3BhcmFtIHF1ZXVlWzhdOwotCXU4IG1hcHBpbmdbNF07Ci0JX19sZTE2IGZyYW1lYnVyc3Q7Ci0JX19sZTE2IHJvdW5kX3RyaXBfZGVsYXk7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9zdGF0aXN0aWNzIHsKLQlfX2xlMzIgcnhfc3VjY2VzczsKLQlfX2xlMzIgcnhfYmFkX2ZjczsKLQlfX2xlMzIgcnhfYWJvcnQ7Ci0JX19sZTMyIHJ4X2Fib3J0X3BoeTsKLQlfX2xlMzIgcnRzX3N1Y2Nlc3M7Ci0JX19sZTMyIHJ0c19mYWlsOwotCV9fbGUzMiB0c2YzMjsKLQlfX2xlMzIgYWlydGltZTsKLQlfX2xlMzIgbm9pc2U7Ci0JX19sZTMyIHNhbXBsZV9ub2lzZVs4XTsKLQlfX2xlMzIgc2FtcGxlX2NjYTsKLQlfX2xlMzIgc2FtcGxlX3R4OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfeGJvd19zeW50aCB7Ci0JX19sZTE2IG1hZ2ljMTsKLQlfX2xlMTYgbWFnaWMyOwotCV9fbGUxNiBmcmVxOwotCXUzMiBwYWRkaW5nWzVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfdGltZXIgewotCV9fbGUzMiBpbnRlcnZhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X2tleWNhY2hlIHsKLQl1OCBlbnRyeTsKLQl1OCBrZXlfaWQ7Ci0JdTggbWFjW0VUSF9BTEVOXTsKLQl1OCBwYWRkaW5nWzJdOwotCXU4IGtleV90eXBlOwotCXU4IGtleV9sZW47Ci0JdTgga2V5WzI0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X2J1cnN0IHsKLQl1OCBmbGFnczsKLQl1OCBxdWV1ZTsKLQl1OCBiYWNrbG9nOwotCXU4IHBhZDsKLQlfX2xlMTYgZHVyYXRpb25zWzMyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X3BzbV9pbnRlcnZhbCB7Ci0JX19sZTE2IGludGVydmFsOwotCV9fbGUxNiBwZXJpb2RzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUDU0X1BTTV9DQU0JCQkwCi0jZGVmaW5lIFA1NF9QU00JCQkJQklUKDApCi0jZGVmaW5lIFA1NF9QU01fRFRJTQkJCUJJVCgxKQotI2RlZmluZSBQNTRfUFNNX01DQkMJCQlCSVQoMikKLSNkZWZpbmUgUDU0X1BTTV9DSEVDS1NVTQkJQklUKDMpCi0jZGVmaW5lIFA1NF9QU01fU0tJUF9NT1JFX0RBVEEJCUJJVCg0KQotI2RlZmluZSBQNTRfUFNNX0JFQUNPTl9USU1FT1VUCQlCSVQoNSkKLSNkZWZpbmUgUDU0X1BTTV9IRk9TTEVFUAkJQklUKDYpCi0jZGVmaW5lIFA1NF9QU01fQVVUT1NXSVRDSF9TTEVFUAlCSVQoNykKLSNkZWZpbmUgUDU0X1BTTV9MUElUCQkJQklUKDgpCi0jZGVmaW5lIFA1NF9QU01fQkZfVUNBU1RfU0tJUAkJQklUKDkpCi0jZGVmaW5lIFA1NF9QU01fQkZfTUNBU1RfU0tJUAkJQklUKDEwKQotCi1zdHJ1Y3QgcDU0X3BzbSB7Ci0JX19sZTE2IG1vZGU7Ci0JX19sZTE2IGFpZDsKLQlzdHJ1Y3QgcDU0X3BzbV9pbnRlcnZhbCBpbnRlcnZhbHNbNF07Ci0JdTggYmVhY29uX3Jzc2lfc2tpcF9tYXg7Ci0JdTggcnNzaV9kZWx0YV90aHJlc2hvbGQ7Ci0JdTggbnI7Ci0JdTggZXhjbHVkZVsxXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIE1DX0ZJTFRFUl9BRERSRVNTX05VTSA0Ci0KLXN0cnVjdCBwNTRfZ3JvdXBfYWRkcmVzc190YWJsZSB7Ci0JX19sZTE2IGZpbHRlcl9lbmFibGU7Ci0JX19sZTE2IG51bV9hZGRyZXNzOwotCXU4IG1hY19saXN0W01DX0ZJTFRFUl9BRERSRVNTX05VTV1bRVRIX0FMRU5dOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfdHhjYW5jZWwgewotCV9fbGUzMiByZXFfaWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHA1NF9zdGFfdW5sb2NrIHsKLQl1OCBhZGRyW0VUSF9BTEVOXTsKLQl1MTYgcGFkZGluZzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIFA1NF9USU1fQ0xFQVIgQklUKDE1KQotc3RydWN0IHA1NF90aW0gewotCXU4IGNvdW50OwotCXU4IHBhZGRpbmdbM107Ci0JX19sZTE2IGVudHJ5WzhdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfY2NlX3F1aWV0IHsKLQlfX2xlMzIgcGVyaW9kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBwNTRfYnRfYmFsYW5jZXIgewotCV9fbGUxNiBwcmlvX3RocmVzaDsKLQlfX2xlMTYgYWNsX3RocmVzaDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcDU0X2FycF90YWJsZSB7Ci0JX19sZTE2IGZpbHRlcl9lbmFibGU7Ci0JdTggaXB2NF9hZGRyWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNlbmRpZiAvKiBQNTRDT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IGIxNjEwZWEuLmQzNDhjMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogI2luY2x1ZGUgInA1NC5oIgorI2luY2x1ZGUgImxtYWMuaCIKICNpbmNsdWRlICJwNTRwY2kuaCIKIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+Iik7CkBAIC01NjQsNyArNTY1LDYgQEAKIAogIGVycl9mcmVlX2NvbW1vbjoKIAlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmZpcm13YXJlKTsKLQlwNTRfZnJlZV9jb21tb24oZGV2KTsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemVvZigqcHJpdi0+cmluZ19jb250cm9sKSwKIAkJCSAgICBwcml2LT5yaW5nX2NvbnRyb2wsIHByaXYtPnJpbmdfY29udHJvbF9kbWEpOwogCkBAIC01NzMsNyArNTczLDcgQEAKIAogIGVycl9mcmVlX2RldjoKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKKwlwNTRfZnJlZV9jb21tb24oZGV2KTsKIAogIGVycl9mcmVlX3JlZzoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwpAQCAtNTkwLDE2ICs1OTAsMTUgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGV2KTsKKwlwNTRfdW5yZWdpc3Rlcl9jb21tb24oZGV2KTsKIAlwcml2ID0gZGV2LT5wcml2OwogCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+ZmlybXdhcmUpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKCpwcml2LT5yaW5nX2NvbnRyb2wpLAogCQkJICAgIHByaXYtPnJpbmdfY29udHJvbCwgcHJpdi0+cmluZ19jb250cm9sX2RtYSk7Ci0JcDU0X2ZyZWVfY29tbW9uKGRldik7CiAJaW91bm1hcChwcml2LT5tYXApOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWllZWU4MDIxMV9mcmVlX2h3KGRldik7CisJcDU0X2ZyZWVfY29tbW9uKGRldik7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwppbmRleCA3MmM3ZGJkLi4wNTQ1OGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAicDU0c3BpX2VlcHJvbS5oIgogI2luY2x1ZGUgInA1NC5oIgogCi0jaW5jbHVkZSAicDU0Y29tbW9uLmgiCisjaW5jbHVkZSAibG1hYy5oIgogCiBNT0RVTEVfRklSTVdBUkUoIjM4MjYuYXJtIik7CiBNT0RVTEVfQUxJQVMoInN0bGM0NXh4Iik7CkBAIC0xMTEsMTUgKzExMSw2IEBACiAJc3BpX3N5bmMocHJpdi0+c3BpLCAmbSk7CiB9CiAKLXN0YXRpYyB1MTYgcDU0c3BpX3JlYWQxNihzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyKQotewotCV9fbGUxNiB2YWw7Ci0KLQlwNTRzcGlfc3BpX3JlYWQocHJpdiwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCi0JcmV0dXJuIGxlMTZfdG9fY3B1KHZhbCk7Ci19Ci0KIHN0YXRpYyB1MzIgcDU0c3BpX3JlYWQzMihzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyKQogewogCV9fbGUzMiB2YWw7CkBAIC0xMzksMzcgKzEzMCwxMiBAQAogCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwogfQogCi1zdHJ1Y3QgcDU0c3BpX3NwaV9yZWcgewotCXUxNiBhZGRyZXNzOwkJLyogX19sZTE2ID8gKi8KLQl1MTYgbGVuZ3RoOwotCWNoYXIgKm5hbWU7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHA1NHNwaV9zcGlfcmVnIHA1NHNwaV9yZWdpc3RlcnNfYXJyYXlbXSA9Ci17Ci0JeyBTUElfQURSU19BUk1fSU5URVJSVVBUUywJMzIsICJBUk1fSU5UICAgICAiIH0sCi0JeyBTUElfQURSU19BUk1fSU5UX0VOLAkJMzIsICJBUk1fSU5UX0VOQSAiIH0sCi0JeyBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMsCTMyLCAiSE9TVF9JTlQgICAgIiB9LAotCXsgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCQkzMiwgIkhPU1RfSU5UX0VOQSIgfSwKLQl7IFNQSV9BRFJTX0hPU1RfSU5UX0FDSywJMzIsICJIT1NUX0lOVF9BQ0siIH0sCi0JeyBTUElfQURSU19HRU5fUFVSUF8xLAkJMzIsICJHUDFfQ09NTSAgICAiIH0sCi0JeyBTUElfQURSU19HRU5fUFVSUF8yLAkJMzIsICJHUDJfQ09NTSAgICAiIH0sCi0JeyBTUElfQURSU19ERVZfQ1RSTF9TVEFULAkzMiwgIkRFVl9DVFJMX1NUQSIgfSwKLQl7IFNQSV9BRFJTX0RNQV9EQVRBLAkJMTYsICJETUFfREFUQSAgICAiIH0sCi0JeyBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwJMTYsICJETUFfV1JfQ1RSTCAiIH0sCi0JeyBTUElfQURSU19ETUFfV1JJVEVfTEVOLAkxNiwgIkRNQV9XUl9MRU4gICIgfSwKLQl7IFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAkzMiwgIkRNQV9XUl9CQVNFICIgfSwKLQl7IFNQSV9BRFJTX0RNQV9SRUFEX0NUUkwsCTE2LCAiRE1BX1JEX0NUUkwgIiB9LAotCXsgU1BJX0FEUlNfRE1BX1JFQURfTEVOLAkxNiwgIkRNQV9SRF9MRU4gICIgfSwKLQl7IFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAkzMiwgIkRNQV9SRF9CQVNFICIgfQotfTsKLQotc3RhdGljIGludCBwNTRzcGlfd2FpdF9iaXQoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTE2IHJlZywgX19sZTMyIGJpdHMpCitzdGF0aWMgaW50IHA1NHNwaV93YWl0X2JpdChzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1MTYgcmVnLCB1MzIgYml0cykKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKLQkJX19sZTMyIGJ1ZmZlciA9IHA1NHNwaV9yZWFkMzIocHJpdiwgcmVnKTsKKwkJdTMyIGJ1ZmZlciA9IHA1NHNwaV9yZWFkMzIocHJpdiwgcmVnKTsKIAkJaWYgKChidWZmZXIgJiBiaXRzKSA9PSBiaXRzKQogCQkJcmV0dXJuIDE7CiAJfQpAQCAtMTc5LDggKzE0NSw3IEBACiBzdGF0aWMgaW50IHA1NHNwaV9zcGlfd3JpdGVfZG1hKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIF9fbGUzMiBiYXNlLAogCQkJCWNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlpZiAoIXA1NHNwaV93YWl0X2JpdChwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwKLQkJCSAgICAgY3B1X3RvX2xlMzIoSE9TVF9BTExPV0VEKSkpIHsKKwlpZiAoIXA1NHNwaV93YWl0X2JpdChwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgSE9TVF9BTExPV0VEKSkgewogCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInNwaV93cml0ZV9kbWEgbm90IGFsbG93ZWQgIgogCQkJInRvIERNQSB3cml0ZS5cbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTMzMyw3ICsyOTgsNyBAQAogCiAJLyogQW5kIHdhaXQgZm9yIHRoZSBSRUFEWSBpbnRlcnJ1cHQgKi8KIAlpZiAoIXA1NHNwaV93YWl0X2JpdChwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMsCi0JCQkgICAgIGNwdV90b19sZTMyKFNQSV9IT1NUX0lOVF9SRUFEWSkpKSB7CisJCQkgICAgIFNQSV9IT1NUX0lOVF9SRUFEWSkpIHsKIAkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJJTlRfUkVBRFkgdGltZW91dFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNDI2LDcgKzM5MSw3IEBACiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbmZpZzsKIAlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAKLQlxdWV1ZV93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhwcml2LT5odywgJnByaXYtPndvcmspOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDQ0LDcgKzQwOSw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKCFwNTRzcGlfd2FpdF9iaXQocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTLAotCQkJICAgICBjcHVfdG9fbGUzMihTUElfSE9TVF9JTlRfV1JfUkVBRFkpKSkgeworCQkJICAgICBTUElfSE9TVF9JTlRfV1JfUkVBRFkpKSB7CiAJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiV1JfUkVBRFkgdGltZW91dFxuIik7CiAJCXJldCA9IC1FQUdBSU47CiAJCWdvdG8gb3V0OwpAQCAtNTE0LDcgKzQ3OSw3IEBACiAJbGlzdF9hZGRfdGFpbCgmZGktPnR4X2xpc3QsICZwcml2LT50eF9wZW5kaW5nKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAKLQlxdWV1ZV93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhwcml2LT5odywgJnByaXYtPndvcmspOwogfQogCiBzdGF0aWMgdm9pZCBwNTRzcGlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC03MTMsNyArNjc4LDcgQEAKIHsKIAlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJcDU0X3VucmVnaXN0ZXJfY29tbW9uKHByaXYtPmh3KTsKIAogCWZyZWVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSksIHNwaSk7CiAKQEAgLTcyNCw3ICs2ODksNiBAQAogCW11dGV4X2Rlc3Ryb3koJnByaXYtPm11dGV4KTsKIAogCXA1NF9mcmVlX2NvbW1vbihwcml2LT5odyk7Ci0JaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKaW5kZXggMGU4NzdhMS4uZTQ0NDYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSAicDU0LmgiCisjaW5jbHVkZSAibG1hYy5oIgogI2luY2x1ZGUgInA1NHVzYi5oIgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKQEAgLTI0NSw4ICsyNDYsMTAgQEAKIAlzdHJ1Y3QgbG04N190eF9oZHIgKmhkciA9ICh2b2lkICopc2tiLT5kYXRhIC0gc2l6ZW9mKCpoZHIpOwogCiAJZGF0YV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwotCWlmICghZGF0YV91cmIpCisJaWYgKCFkYXRhX3VyYikgeworCQlwNTRfZnJlZV9za2IoZGV2LCBza2IpOwogCQlyZXR1cm47CisJfQogCiAJaGRyLT5jaGtzdW0gPSBwNTR1X2xtODdfY2hrc3VtKChfX2xlMzIgKilza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAloZHItPmRldmljZV9hZGRyID0gKChzdHJ1Y3QgcDU0X2hkciAqKXNrYi0+ZGF0YSktPnJlcV9pZDsKQEAgLTI2OCwyNyArMjcxLDIyIEBACiBzdGF0aWMgdm9pZCBwNTR1X3R4X25ldDIyODAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHVyYiAqaW50X3VyYiwgKmRhdGFfdXJiOworCXN0cnVjdCB1cmIgKmludF91cmIgPSBOVUxMLCAqZGF0YV91cmIgPSBOVUxMOwogCXN0cnVjdCBuZXQyMjgwX3R4X2hkciAqaGRyID0gKHZvaWQgKilza2ItPmRhdGEgLSBzaXplb2YoKmhkcik7Ci0Jc3RydWN0IG5ldDIyODBfcmVnX3dyaXRlICpyZWc7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IG5ldDIyODBfcmVnX3dyaXRlICpyZWcgPSBOVUxMOworCWludCBlcnIgPSAtRU5PTUVNOwogCiAJcmVnID0ga21hbGxvYyhzaXplb2YoKnJlZyksIEdGUF9BVE9NSUMpOwogCWlmICghcmVnKQotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCiAJaW50X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFpbnRfdXJiKSB7Ci0JCWtmcmVlKHJlZyk7Ci0JCXJldHVybjsKLQl9CisJaWYgKCFpbnRfdXJiKQorCQlnb3RvIG91dDsKIAogCWRhdGFfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWRhdGFfdXJiKSB7Ci0JCWtmcmVlKHJlZyk7Ci0JCXVzYl9mcmVlX3VyYihpbnRfdXJiKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoIWRhdGFfdXJiKQorCQlnb3RvIG91dDsKIAogCXJlZy0+cG9ydCA9IGNwdV90b19sZTE2KE5FVDIyODBfREVWX1UzMik7CiAJcmVnLT5hZGRyID0gY3B1X3RvX2xlMzIoUDU0VV9ERVZfQkFTRSk7CkBAIC0zMDMsMTEgKzMwMSwxMiBAQAogCQlwNTR1X3R4X2R1bW15X2NiLCBkZXYpOwogCiAJLyoKLQkgKiBUaGlzIGZsYWcgdHJpZ2dlcnMgYSBjb2RlIHBhdGggaW4gdGhlIFVTQiBzdWJzeXN0ZW0gdGhhdCB3aWxsCi0JICogZnJlZSB3aGF0J3MgaW5zaWRlIHRoZSB0cmFuc2Zlcl9idWZmZXIgYWZ0ZXIgdGhlIGNhbGxiYWNrIHJvdXRpbmUKLQkgKiBoYXMgY29tcGxldGVkLgorCSAqIFVSQl9GUkVFX0JVRkZFUiB0cmlnZ2VycyBhIGNvZGUgcGF0aCBpbiB0aGUgVVNCIHN1YnN5c3RlbSB0aGF0IHdpbGwKKwkgKiBmcmVlIHdoYXQgaXMgaW5zaWRlIHRoZSB0cmFuc2Zlcl9idWZmZXIgYWZ0ZXIgdGhlIGxhc3QgcmVmZXJlbmNlIHRvCisJICogdGhlIGludF91cmIgaXMgZHJvcHBlZC4KIAkgKi8KIAlpbnRfdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfRlJFRV9CVUZGRVIgfCBVUkJfWkVST19QQUNLRVQ7CisJcmVnID0gTlVMTDsKIAogCXVzYl9maWxsX2J1bGtfdXJiKGRhdGFfdXJiLCBwcml2LT51ZGV2LAogCQkJICB1c2Jfc25kYnVsa3BpcGUocHJpdi0+dWRldiwgUDU0VV9QSVBFX0RBVEEpLApAQCAtMzI4LDEyICszMjcsMTIgQEAKIAkJdXNiX3VuYW5jaG9yX3VyYihkYXRhX3VyYik7CiAJCWdvdG8gb3V0OwogCX0KLSBvdXQ6CitvdXQ6CiAJdXNiX2ZyZWVfdXJiKGludF91cmIpOwogCXVzYl9mcmVlX3VyYihkYXRhX3VyYik7CiAKIAlpZiAoZXJyKSB7Ci0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKTsKKwkJa2ZyZWUocmVnKTsKIAkJcDU0X2ZyZWVfc2tiKGRldiwgc2tiKTsKIAl9CiB9CkBAIC05NjEsNyArOTYwLDcgQEAKIAlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmZ3KTsKIAogZXJyX2ZyZWVfZGV2OgotCWllZWU4MDIxMV9mcmVlX2h3KGRldik7CisJcDU0X2ZyZWVfY29tbW9uKGRldik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAl1c2JfcHV0X2Rldih1ZGV2KTsKIAlyZXR1cm4gZXJyOwpAQCAtOTc1LDEzICs5NzQsMTIgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoZGV2KTsKKwlwNTRfdW5yZWdpc3Rlcl9jb21tb24oZGV2KTsKIAogCXByaXYgPSBkZXYtPnByaXY7CiAJdXNiX3B1dF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7CiAJcmVsZWFzZV9maXJtd2FyZShwcml2LT5mdyk7CiAJcDU0X2ZyZWVfY29tbW9uKGRldik7Ci0JaWVlZTgwMjExX2ZyZWVfaHcoZGV2KTsKIH0KIAogc3RhdGljIGludCBwNTR1X3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZGRhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCkBAIC0wLDAgKzEsODY5IEBACisvKgorICogQ29tbW9uIGNvZGUgZm9yIG1hYzgwMjExIFByaXNtNTQgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiwgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogQmFzZWQgb246CisgKiAtIHRoZSBpc2xzbSAoc29mdG1hYyBwcmlzbTU0KSBkcml2ZXIsIHdoaWNoIGlzOgorICogICBDb3B5cmlnaHQgMjAwNC0yMDA2IEplYW4tQmFwdGlzdGUgTm90ZSA8amJub3RlQGdtYWlsLmNvbT4sIGV0IGFsLgorICogLSBzdGxjNDV4eCBkcml2ZXIKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJwNTQuaCIKKyNpbmNsdWRlICJsbWFjLmgiCisKKyNpZmRlZiBQNTRfTU1fREVCVUcKK3N0YXRpYyB2b2lkIHA1NF9kdW1wX3R4X3F1ZXVlKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2U7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyOworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1MzIgcHJldl9hZGRyOworCXUzMiBsYXJnZXN0X2hvbGUgPSAwLCBmcmVlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IC8gLS0tIHR4IHF1ZXVlIGR1bXAgKCVkIGVudHJpZXMpIC0tLSBcbiIsCisJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgc2tiX3F1ZXVlX2xlbigmcHJpdi0+dHhfcXVldWUpKTsKKworCXByZXZfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OworCXNrYl9xdWV1ZV93YWxrKCZwcml2LT50eF9xdWV1ZSwgc2tiKSB7CisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCXJhbmdlID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJaGRyID0gKHZvaWQgKikgc2tiLT5kYXRhOworCisJCWZyZWUgPSByYW5nZS0+c3RhcnRfYWRkciAtIHByZXZfYWRkcjsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB8IFslMDJkXSA9PiBbc2tiOiVwIHNrYl9sZW46MHglMDR4ICIKKwkJICAgICAgICJoZHI6e2ZsYWdzOiUwMnggbGVuOiUwNHggcmVxX2lkOiUwNHggdHlwZTolMDJ4fSAiCisJCSAgICAgICAibWVtOntzdGFydDolMDR4IGVuZDolMDR4LCBmcmVlOiVkfV1cbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGkrKywgc2tiLCBza2ItPmxlbiwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+ZmxhZ3MpLCBsZTE2X3RvX2NwdShoZHItPmxlbiksCisJCSAgICAgICBsZTMyX3RvX2NwdShoZHItPnJlcV9pZCksIGxlMTZfdG9fY3B1KGhkci0+dHlwZSksCisJCSAgICAgICByYW5nZS0+c3RhcnRfYWRkciwgcmFuZ2UtPmVuZF9hZGRyLCBmcmVlKTsKKworCQlwcmV2X2FkZHIgPSByYW5nZS0+ZW5kX2FkZHI7CisJCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIGZyZWUpOworCX0KKwlmcmVlID0gcHJpdi0+cnhfZW5kIC0gcHJldl9hZGRyOworCWxhcmdlc3RfaG9sZSA9IG1heChsYXJnZXN0X2hvbGUsIGZyZWUpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogXFwgLS0tIFtmcmVlOiAlZF0sIGxhcmdlc3QgZnJlZSBibG9jazogJWQgLS0tXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGZyZWUsIGxhcmdlc3RfaG9sZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfcXVldWUubG9jaywgZmxhZ3MpOworfQorI2VuZGlmIC8qIFA1NF9NTV9ERUJVRyAqLworCisvKgorICogU28sIHRoZSBmaXJtd2FyZSBpcyBzb21ld2hhdCBzdHVwaWQgYW5kIGRvZXNuJ3Qga25vdyB3aGF0IHBsYWNlcyBpbiBpdHMKKyAqIG1lbW9yeSBpbmNvbWluZyBkYXRhIHNob3VsZCBnbyB0by4gQnkgcG9raW5nIGFyb3VuZCBpbiB0aGUgZmlybXdhcmUsIHdlCisgKiBjYW4gZmluZCBzb21lIHVudXNlZCBtZW1vcnkgdG8gdXBsb2FkIG91ciBwYWNrZXRzIHRvLiBIb3dldmVyLCBkYXRhIHRoYXQgd2UKKyAqIHdhbnQgdGhlIGNhcmQgdG8gVFggbmVlZHMgdG8gc3RheSBpbnRhY3QgdW50aWwgdGhlIGNhcmQgaGFzIHRvbGQgdXMgdGhhdAorICogaXQgaXMgZG9uZSB3aXRoIGl0LiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGVtcHR5IHBsYWNlcyB3ZSBjYW4gdXBsb2FkIHRvIGFuZAorICogbWFya3MgYWxsb2NhdGVkIGFyZWFzIGFzIHJlc2VydmVkIGlmIG5lY2Vzc2FyeS4gcDU0X2ZpbmRfYW5kX3VubGlua19za2Igb3IKKyAqIHA1NF9mcmVlX3NrYiBmcmVlcyBhbGxvY2F0ZWQgYXJlYXMuCisgKi8KK3N0YXRpYyBpbnQgcDU0X2Fzc2lnbl9hZGRyZXNzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICplbnRyeSwgKnRhcmdldF9za2IgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOworCXN0cnVjdCBwNTRfaGRyICpkYXRhID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OworCXUzMiB0YXJnZXRfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OworCXUxNiBsZW4gPSBwcml2LT5oZWFkcm9vbSArIHNrYi0+bGVuICsgcHJpdi0+dGFpbHJvb20gKyAzOworCisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlyYW5nZSA9ICh2b2lkICopIGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisJbGVuID0gKHJhbmdlLT5leHRyYV9sZW4gKyBsZW4pICYgfjB4MzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KHNrYl9xdWV1ZV9sZW4oJnByaXYtPnR4X3F1ZXVlKSA9PSAzMikpIHsKKwkJLyoKKwkJICogVGhlIHR4X3F1ZXVlIGlzIG5vdyByZWFsbHkgZnVsbC4KKwkJICoKKwkJICogVE9ETzogY2hlY2sgaWYgdGhlIGRldmljZSBoYXMgY3Jhc2hlZCBhbmQgcmVzZXQgaXQuCisJCSAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc2tiX3F1ZXVlX3dhbGsoJnByaXYtPnR4X3F1ZXVlLCBlbnRyeSkgeworCQl1MzIgaG9sZV9zaXplOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeSk7CisJCXJhbmdlID0gKHZvaWQgKikgaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJaG9sZV9zaXplID0gcmFuZ2UtPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CisKKwkJaWYgKCF0YXJnZXRfc2tiICYmIGhvbGVfc2l6ZSA+PSBsZW4pIHsKKwkJCXRhcmdldF9za2IgPSBlbnRyeS0+cHJldjsKKwkJCWhvbGVfc2l6ZSAtPSBsZW47CisJCQl0YXJnZXRfYWRkciA9IGxhc3RfYWRkcjsKKwkJCWJyZWFrOworCQl9CisJCWxhc3RfYWRkciA9IHJhbmdlLT5lbmRfYWRkcjsKKwl9CisJaWYgKHVubGlrZWx5KCF0YXJnZXRfc2tiKSkgeworCQlpZiAocHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyID49IGxlbikgeworCQkJdGFyZ2V0X3NrYiA9IHByaXYtPnR4X3F1ZXVlLnByZXY7CisJCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcHJpdi0+dHhfcXVldWUpKSB7CisJCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodGFyZ2V0X3NrYik7CisJCQkJcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisJCQkJdGFyZ2V0X2FkZHIgPSByYW5nZS0+ZW5kX2FkZHI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCX0KKworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJcmFuZ2UgPSAodm9pZCAqKSBpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOworCXJhbmdlLT5zdGFydF9hZGRyID0gdGFyZ2V0X2FkZHI7CisJcmFuZ2UtPmVuZF9hZGRyID0gdGFyZ2V0X2FkZHIgKyBsZW47CisJZGF0YS0+cmVxX2lkID0gY3B1X3RvX2xlMzIodGFyZ2V0X2FkZHIgKyBwcml2LT5oZWFkcm9vbSk7CisJaWYgKElTX0RBVEFfRlJBTUUoc2tiKSAmJgorCSAgICB1bmxpa2VseShHRVRfSFdfUVVFVUUoc2tiKSA9PSBQNTRfUVVFVUVfQkVBQ09OKSkKKwkJcHJpdi0+YmVhY29uX3JlcV9pZCA9IGRhdGEtPnJlcV9pZDsKKworCV9fc2tiX3F1ZXVlX2FmdGVyKCZwcml2LT50eF9xdWV1ZSwgdGFyZ2V0X3NrYiwgc2tiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF90eF9wZW5kaW5nKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKworCXNrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT50eF9wZW5kaW5nKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiA7CisKKwlyZXQgPSBwNTRfYXNzaWduX2FkZHJlc3MocHJpdiwgc2tiKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJc2tiX3F1ZXVlX2hlYWQoJnByaXYtPnR4X3BlbmRpbmcsIHNrYik7CisJZWxzZQorCQlwcml2LT50eChwcml2LT5odywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgcDU0X3dha2VfcXVldWVzKHN0cnVjdCBwNTRfY29tbW9uICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAodW5saWtlbHkocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkpCisJCXJldHVybiA7CisKKwlwNTRfdHhfcGVuZGluZyhwcml2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmh3LT5xdWV1ZXM7IGkrKykgeworCQlpZiAocHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5sZW4gPAorCQkgICAgcHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5saW1pdCkKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCBpKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHA1NF90eF9xb3NfYWNjb3VudGluZ19hbGxvYyhzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgY29uc3QgdTE2IHA1NF9xdWV1ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpxdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKFdBUk5fT04ocDU0X3F1ZXVlID4gUDU0X1FVRVVFX05VTSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcXVldWUgPSAmcHJpdi0+dHhfc3RhdHNbcDU0X3F1ZXVlXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KHF1ZXVlLT5sZW4gPj0gcXVldWUtPmxpbWl0ICYmIElTX1FPU19RVUVVRShwNTRfcXVldWUpKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCXF1ZXVlLT5sZW4rKzsKKwlxdWV1ZS0+Y291bnQrKzsKKworCWlmICh1bmxpa2VseShxdWV1ZS0+bGVuID09IHF1ZXVlLT5saW1pdCAmJiBJU19RT1NfUVVFVUUocDU0X3F1ZXVlKSkpIHsKKwkJdTE2IGFjX3F1ZXVlID0gcDU0X3F1ZXVlIC0gUDU0X1FVRVVFX0RBVEE7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHByaXYtPmh3LCBhY19xdWV1ZSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwNTRfdHhfcW9zX2FjY291bnRpbmdfZnJlZShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoSVNfREFUQV9GUkFNRShza2IpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKwkJcHJpdi0+dHhfc3RhdHNbR0VUX0hXX1FVRVVFKHNrYildLmxlbi0tOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisKKwkJaWYgKHVubGlrZWx5KEdFVF9IV19RVUVVRShza2IpID09IFA1NF9RVUVVRV9CRUFDT04pKSB7CisJCQlpZiAocHJpdi0+YmVhY29uX3JlcV9pZCA9PSBHRVRfUkVRX0lEKHNrYikpIHsKKwkJCQkvKiB0aGlzIGlzIHRoZSAgYWN0aXZlIGJlYWNvbiBzZXQgYW55bW9yZSAqLworCQkJCXByaXYtPmJlYWNvbl9yZXFfaWQgPSAwOworCQkJfQorCQkJY29tcGxldGUoJnByaXYtPmJlYWNvbl9jb21wKTsKKwkJfQorCX0KKwlwNTRfd2FrZV9xdWV1ZXMocHJpdik7Cit9CisKK3ZvaWQgcDU0X2ZyZWVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiA7CisKKwlza2JfdW5saW5rKHNrYiwgJnByaXYtPnR4X3F1ZXVlKTsKKwlwNTRfdHhfcW9zX2FjY291bnRpbmdfZnJlZShwcml2LCBza2IpOworCWRldl9rZnJlZV9za2JfYW55KHNrYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwNTRfZnJlZV9za2IpOworCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9maW5kX2FuZF91bmxpbmtfc2tiKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LAorCQkJCQkgICAgICAgY29uc3QgX19sZTMyIHJlcV9pZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CisJc2tiX3F1ZXVlX3dhbGsoJnByaXYtPnR4X3F1ZXVlLCBlbnRyeSkgeworCQlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIGVudHJ5LT5kYXRhOworCisJCWlmIChoZHItPnJlcV9pZCA9PSByZXFfaWQpIHsKKwkJCV9fc2tiX3VubGluayhlbnRyeSwgJnByaXYtPnR4X3F1ZXVlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X3F1ZXVlLmxvY2ssIGZsYWdzKTsKKwkJCXA1NF90eF9xb3NfYWNjb3VudGluZ19mcmVlKHByaXYsIGVudHJ5KTsKKwkJCXJldHVybiBlbnRyeTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9xdWV1ZS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcDU0X3R4KHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYl9xdWV1ZV90YWlsKCZwcml2LT50eF9wZW5kaW5nLCBza2IpOworCXA1NF90eF9wZW5kaW5nKHByaXYpOworfQorCitzdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgaW50IHJzc2kpCit7CisJaW50IGJhbmQgPSBwcml2LT5ody0+Y29uZi5jaGFubmVsLT5iYW5kOworCisJaWYgKHByaXYtPnJ4aHcgIT0gNSkKKwkJcmV0dXJuICgocnNzaSAqIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKSAvIDY0ICsKKwkJCSBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCkgLyA0OworCWVsc2UKKwkJLyoKKwkJICogVE9ETzogZmluZCB0aGUgY29ycmVjdCBmb3JtdWxhCisJCSAqLworCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7Cit9CisKKy8qCisgKiBFdmVuIGlmIHRoZSBmaXJtd2FyZSBpcyBjYXBhYmxlIG9mIGRlYWxpbmcgd2l0aCBpbmNvbWluZyB0cmFmZmljLAorICogd2hpbGUgZG96aW5nLCB3ZSBoYXZlIHRvIHByZXBhcmVkIGluIGNhc2UgbWFjODAyMTEgdXNlcyBQUy1QT0xMCisgKiB0byByZXRyaWV2ZSBvdXRzdGFuZGluZyBmcmFtZXMgZnJvbSBvdXIgQVAuCisgKiAoc2VlIGNvbW1lbnQgaW4gbmV0L21hYzgwMjExL21sbWUuYyBAIGxpbmUgMTk5MykKKyAqLworc3RhdGljIHZvaWQgcDU0X3BzcG9sbF93b3JrYXJvdW5kKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbV9pZTsKKwl1OCAqdGltOworCXU4IHRpbV9sZW47CisJYm9vbCBuZXdfcHNtOworCisJLyogb25seSBiZWFjb25zIGhhdmUgYSBUSU0gSUUgKi8KKwlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuOworCisJaWYgKCFwcml2LT5haWQpCisJCXJldHVybjsKKworCS8qIG9ubHkgY29uc2lkZXIgYmVhY29ucyBmcm9tIHRoZSBhc3NvY2lhdGVkIEJTU0lEICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihoZHItPmFkZHIzLCBwcml2LT5ic3NpZCkpCisJCXJldHVybjsKKworCXRpbSA9IHA1NF9maW5kX2llKHNrYiwgV0xBTl9FSURfVElNKTsKKwlpZiAoIXRpbSkKKwkJcmV0dXJuOworCisJdGltX2xlbiA9IHRpbVsxXTsKKwl0aW1faWUgPSAoc3RydWN0IGllZWU4MDIxMV90aW1faWUgKikgJnRpbVsyXTsKKworCW5ld19wc20gPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwgcHJpdi0+YWlkKTsKKwlpZiAobmV3X3BzbSAhPSBwcml2LT5wb3dlcnNhdmVfb3ZlcnJpZGUpIHsKKwkJcHJpdi0+cG93ZXJzYXZlX292ZXJyaWRlID0gbmV3X3BzbTsKKwkJcDU0X3NldF9wcyhwcml2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcDU0X3J4X2RhdGEoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NF9yeF9kYXRhICpoZHIgPSAoc3RydWN0IHA1NF9yeF9kYXRhICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CisJdTE2IGZyZXEgPSBsZTE2X3RvX2NwdShoZHItPmZyZXEpOworCXNpemVfdCBoZWFkZXJfbGVuID0gc2l6ZW9mKCpoZHIpOworCXUzMiB0c2YzMjsKKwl1OCByYXRlID0gaGRyLT5yYXRlICYgMHhmOworCisJLyoKKwkgKiBJZiB0aGUgZGV2aWNlIGlzIGluIGEgdW5zcGVjaWZpZWQgc3RhdGUgd2UgaGF2ZSB0bworCSAqIGlnbm9yZSBhbGwgZGF0YSBmcmFtZXMuIEVsc2Ugd2UgY291bGQgZW5kIHVwIHdpdGggYQorCSAqIG5hc3R5IGNyYXNoLgorCSAqLworCWlmICh1bmxpa2VseShwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShoZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0RBVEFfSU5fRkNTX0dPT0QpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9PSykKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCWlmICgoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9GQUlMX01JQ0hBRUwpIHx8CisJICAgIChoZHItPmRlY3J5cHRfc3RhdHVzID09IFA1NF9ERUNSWVBUX0ZBSUxfVEtJUCkpCisJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CisKKwlyeF9zdGF0dXMtPnNpZ25hbCA9IHA1NF9yc3NpX3RvX2RibShwcml2LCBoZHItPnJzc2kpOworCXJ4X3N0YXR1cy0+bm9pc2UgPSBwcml2LT5ub2lzZTsKKwlpZiAoaGRyLT5yYXRlICYgMHgxMCkKKwkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CisJaWYgKHByaXYtPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IChyYXRlIDwgNCkgPyAwIDogcmF0ZSAtIDQ7CisJZWxzZQorCQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcmF0ZTsKKworCXJ4X3N0YXR1cy0+ZnJlcSA9IGZyZXE7CisJcnhfc3RhdHVzLT5iYW5kID0gIHByaXYtPmh3LT5jb25mLmNoYW5uZWwtPmJhbmQ7CisJcnhfc3RhdHVzLT5hbnRlbm5hID0gaGRyLT5hbnRlbm5hOworCisJdHNmMzIgPSBsZTMyX3RvX2NwdShoZHItPnRzZjMyKTsKKwlpZiAodHNmMzIgPCBwcml2LT50c2ZfbG93MzIpCisJCXByaXYtPnRzZl9oaWdoMzIrKzsKKwlyeF9zdGF0dXMtPm1hY3RpbWUgPSAoKHU2NClwcml2LT50c2ZfaGlnaDMyKSA8PCAzMiB8IHRzZjMyOworCXByaXYtPnRzZl9sb3czMiA9IHRzZjMyOworCisJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfVFNGVDsKKworCWlmIChoZHItPmZsYWdzICYgY3B1X3RvX2xlMTYoUDU0X0hEUl9GTEFHX0RBVEFfQUxJR04pKQorCQloZWFkZXJfbGVuICs9IGhkci0+YWxpZ25bMF07CisKKwlza2JfcHVsbChza2IsIGhlYWRlcl9sZW4pOworCXNrYl90cmltKHNrYiwgbGUxNl90b19jcHUoaGRyLT5sZW4pKTsKKwlpZiAodW5saWtlbHkocHJpdi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpCisJCXA1NF9wc3BvbGxfd29ya2Fyb3VuZChwcml2LCBza2IpOworCisJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHNrYik7CisKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LCAmcHJpdi0+d29yaywKKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUDU0X1NUQVRJU1RJQ1NfVVBEQVRFKSk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9yeF9mcmFtZV9zZW50KHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRfaGRyICpoZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBwNTRfZnJhbWVfc2VudCAqcGF5bG9hZCA9IChzdHJ1Y3QgcDU0X2ZyYW1lX3NlbnQgKikgaGRyLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgcDU0X2hkciAqZW50cnlfaGRyOworCXN0cnVjdCBwNTRfdHhfZGF0YSAqZW50cnlfZGF0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CisJdW5zaWduZWQgaW50IHBhZCA9IDAsIGZyYW1lX2xlbjsKKwlpbnQgY291bnQsIGlkeDsKKworCWVudHJ5ID0gcDU0X2ZpbmRfYW5kX3VubGlua19za2IocHJpdiwgaGRyLT5yZXFfaWQpOworCWlmICh1bmxpa2VseSghZW50cnkpKQorCQlyZXR1cm4gOworCisJZnJhbWVfbGVuID0gZW50cnktPmxlbjsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeSk7CisJZW50cnlfaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIGVudHJ5LT5kYXRhOworCWVudHJ5X2RhdGEgPSAoc3RydWN0IHA1NF90eF9kYXRhICopIGVudHJ5X2hkci0+ZGF0YTsKKwlwcml2LT5zdGF0cy5kb3QxMUFDS0ZhaWx1cmVDb3VudCArPSBwYXlsb2FkLT50cmllcyAtIDE7CisKKwkvKgorCSAqIEZyYW1lcyBpbiBQNTRfUVVFVUVfRldTQ0FOIGFuZCBQNTRfUVVFVUVfQkVBQ09OIGFyZQorCSAqIGdlbmVyYXRlZCBieSB0aGUgZHJpdmVyLiBUaGVyZWZvcmUgdHhfc3RhdHVzIGlzIGJvZ3VzCisJICogYW5kIHdlIGRvbid0IHdhbnQgdG8gY29uZnVzZSB0aGUgbWFjODAyMTEgc3RhY2suCisJICovCisJaWYgKHVubGlrZWx5KGVudHJ5X2RhdGEtPmh3X3F1ZXVlIDwgUDU0X1FVRVVFX0ZXU0NBTikpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoZW50cnkpOworCQlyZXR1cm4gOworCX0KKworCS8qCisJICogQ2xlYXIgbWFudWFsbHksIGllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyB3b3VsZAorCSAqIGNsZWFyIHRoZSBjb3VudHMgdG9vIGFuZCB3ZSBuZWVkIHRoZW0uCisJICovCisJbWVtc2V0KCZpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwgMCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbykgLQorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8sIHN0YXR1cy5hbXBkdV9hY2tfbGVuKSk7CisJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbywKKwkJCSAgICAgIHN0YXR1cy5hbXBkdV9hY2tfbGVuKSAhPSAyMyk7CisKKwlpZiAoZW50cnlfaGRyLT5mbGFncyAmIGNwdV90b19sZTE2KFA1NF9IRFJfRkxBR19EQVRBX0FMSUdOKSkKKwkJcGFkID0gZW50cnlfZGF0YS0+YWxpZ25bMF07CisKKwkvKiB3YWxrIHRocm91Z2ggdGhlIHJhdGVzIGFycmF5IGFuZCBhZGp1c3QgdGhlIGNvdW50cyAqLworCWNvdW50ID0gcGF5bG9hZC0+dHJpZXM7CisJZm9yIChpZHggPSAwOyBpZHggPCA0OyBpZHgrKykgeworCQlpZiAoY291bnQgPj0gaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uY291bnQpIHsKKwkJCWNvdW50IC09IGluZm8tPnN0YXR1cy5yYXRlc1tpZHhdLmNvdW50OworCQl9IGVsc2UgaWYgKGNvdW50ID4gMCkgeworCQkJaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uY291bnQgPSBjb3VudDsKKwkJCWNvdW50ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWluZm8tPnN0YXR1cy5yYXRlc1tpZHhdLmlkeCA9IC0xOworCQkJaW5mby0+c3RhdHVzLnJhdGVzW2lkeF0uY291bnQgPSAwOworCQl9CisJfQorCisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKKwkgICAgICghcGF5bG9hZC0+c3RhdHVzKSkKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCWlmIChwYXlsb2FkLT5zdGF0dXMgJiBQNTRfVFhfUFNNX0NBTkNFTExFRCkKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7CisJaW5mby0+c3RhdHVzLmFja19zaWduYWwgPSBwNTRfcnNzaV90b19kYm0ocHJpdiwKKwkJCQkJCSAgKGludClwYXlsb2FkLT5hY2tfcnNzaSk7CisKKwkvKiBVbmRvIGFsbCBjaGFuZ2VzIHRvIHRoZSBmcmFtZS4gKi8KKwlzd2l0Y2ggKGVudHJ5X2RhdGEtPmtleV90eXBlKSB7CisJY2FzZSBQNTRfQ1JZUFRPX1RLSVBNSUNIQUVMOiB7CisJCXU4ICppdiA9ICh1OCAqKShlbnRyeV9kYXRhLT5hbGlnbiArIHBhZCArCisJCQkJZW50cnlfZGF0YS0+Y3J5cHRfb2Zmc2V0KTsKKworCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBUS0lQIElWLiAqLworCQlpdlsyXSA9IGl2WzBdOworCQlpdlswXSA9IGl2WzFdOworCQlpdlsxXSA9IChpdlswXSB8IDB4MjApICYgMHg3ZjsJLyogV0VQU2VlZCAtIDguMy4yLjIgKi8KKworCQlmcmFtZV9sZW4gLT0gMTI7IC8qIHJlbW92ZSBUS0lQX01NSUMgKyBUS0lQX0lDViAqLworCQlicmVhazsKKwkJfQorCWNhc2UgUDU0X0NSWVBUT19BRVNDQ01QOgorCQlmcmFtZV9sZW4gLT0gODsgLyogcmVtb3ZlIENDTVBfTUlDICovCisJCWJyZWFrOworCWNhc2UgUDU0X0NSWVBUT19XRVA6CisJCWZyYW1lX2xlbiAtPSA0OyAvKiByZW1vdmUgV0VQX0lDViAqLworCQlicmVhazsKKwl9CisKKwlza2JfdHJpbShlbnRyeSwgZnJhbWVfbGVuKTsKKwlza2JfcHVsbChlbnRyeSwgc2l6ZW9mKCpoZHIpICsgcGFkICsgc2l6ZW9mKCplbnRyeV9kYXRhKSk7CisJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHByaXYtPmh3LCBlbnRyeSk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NF9yeF9lZXByb21fcmVhZGJhY2soc3RydWN0IHA1NF9jb21tb24gKnByaXYsCisJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgcDU0X2VlcHJvbV9sbTg2ICplZXByb20gPSAoc3RydWN0IHA1NF9lZXByb21fbG04NiAqKSBoZHItPmRhdGE7CisJc3RydWN0IHNrX2J1ZmYgKnRtcDsKKworCWlmICghcHJpdi0+ZWVwcm9tKQorCQlyZXR1cm4gOworCisJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwOSkgeworCQltZW1jcHkocHJpdi0+ZWVwcm9tLCBlZXByb20tPnYyLmRhdGEsCisJCSAgICAgICBsZTE2X3RvX2NwdShlZXByb20tPnYyLmxlbikpOworCX0gZWxzZSB7CisJCW1lbWNweShwcml2LT5lZXByb20sIGVlcHJvbS0+djEuZGF0YSwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGVlcHJvbS0+djEubGVuKSk7CisJfQorCisJcHJpdi0+ZWVwcm9tID0gTlVMTDsKKwl0bXAgPSBwNTRfZmluZF9hbmRfdW5saW5rX3NrYihwcml2LCBoZHItPnJlcV9pZCk7CisJZGV2X2tmcmVlX3NrYl9hbnkodG1wKTsKKwljb21wbGV0ZSgmcHJpdi0+ZWVwcm9tX2NvbXApOworfQorCitzdGF0aWMgdm9pZCBwNTRfcnhfc3RhdHMoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHA1NF9oZHIgKmhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CisJc3RydWN0IHA1NF9zdGF0aXN0aWNzICpzdGF0cyA9IChzdHJ1Y3QgcDU0X3N0YXRpc3RpY3MgKikgaGRyLT5kYXRhOworCXN0cnVjdCBza19idWZmICp0bXA7CisJdTMyIHRzZjMyOworCisJaWYgKHVubGlrZWx5KHByaXYtPm1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpKQorCQlyZXR1cm4gOworCisJdHNmMzIgPSBsZTMyX3RvX2NwdShzdGF0cy0+dHNmMzIpOworCWlmICh0c2YzMiA8IHByaXYtPnRzZl9sb3czMikKKwkJcHJpdi0+dHNmX2hpZ2gzMisrOworCXByaXYtPnRzZl9sb3czMiA9IHRzZjMyOworCisJcHJpdi0+c3RhdHMuZG90MTFSVFNGYWlsdXJlQ291bnQgPSBsZTMyX3RvX2NwdShzdGF0cy0+cnRzX2ZhaWwpOworCXByaXYtPnN0YXRzLmRvdDExUlRTU3VjY2Vzc0NvdW50ID0gbGUzMl90b19jcHUoc3RhdHMtPnJ0c19zdWNjZXNzKTsKKwlwcml2LT5zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQgPSBsZTMyX3RvX2NwdShzdGF0cy0+cnhfYmFkX2Zjcyk7CisKKwlwcml2LT5ub2lzZSA9IHA1NF9yc3NpX3RvX2RibShwcml2LCBsZTMyX3RvX2NwdShzdGF0cy0+bm9pc2UpKTsKKworCXRtcCA9IHA1NF9maW5kX2FuZF91bmxpbmtfc2tiKHByaXYsIGhkci0+cmVxX2lkKTsKKwlkZXZfa2ZyZWVfc2tiX2FueSh0bXApOworfQorCitzdGF0aWMgdm9pZCBwNTRfcnhfdHJhcChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgcDU0X3RyYXAgKnRyYXAgPSAoc3RydWN0IHA1NF90cmFwICopIGhkci0+ZGF0YTsKKwl1MTYgZXZlbnQgPSBsZTE2X3RvX2NwdSh0cmFwLT5ldmVudCk7CisJdTE2IGZyZXEgPSBsZTE2X3RvX2NwdSh0cmFwLT5mcmVxdWVuY3kpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUDU0X1RSQVBfQkVBQ09OX1RYOgorCQlicmVhazsKKwljYXNlIFA1NF9UUkFQX1JBREFSOgorCQlwcmludGsoS0VSTl9JTkZPICIlczogcmFkYXIgKGZyZXE6JWQgTUh6KVxuIiwKKwkJCXdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgZnJlcSk7CisJCWJyZWFrOworCWNhc2UgUDU0X1RSQVBfTk9fQkVBQ09OOgorCQlpZiAocHJpdi0+dmlmKQorCQkJaWVlZTgwMjExX2JlYWNvbl9sb3NzKHByaXYtPnZpZik7CisJCWJyZWFrOworCWNhc2UgUDU0X1RSQVBfU0NBTjoKKwkJYnJlYWs7CisJY2FzZSBQNTRfVFJBUF9UQlRUOgorCQlicmVhazsKKwljYXNlIFA1NF9UUkFQX1RJTUVSOgorCQlicmVhazsKKwljYXNlIFA1NF9UUkFQX0ZBQV9SQURJT19PRkY6CisJCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdi0+aHctPndpcGh5LCB0cnVlKTsKKwkJYnJlYWs7CisJY2FzZSBQNTRfVFJBUF9GQUFfUkFESU9fT046CisJCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdi0+aHctPndpcGh5LCBmYWxzZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWNlaXZlZCBldmVudDoleCBmcmVxOiVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBldmVudCwgZnJlcSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBwNTRfcnhfY29udHJvbChzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKworCXN3aXRjaCAobGUxNl90b19jcHUoaGRyLT50eXBlKSkgeworCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9UWERPTkU6CisJCXA1NF9yeF9mcmFtZV9zZW50KHByaXYsIHNrYik7CisJCWJyZWFrOworCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9UUkFQOgorCQlwNTRfcnhfdHJhcChwcml2LCBza2IpOworCQlicmVhazsKKwljYXNlIFA1NF9DT05UUk9MX1RZUEVfQkJQOgorCQlicmVhazsKKwljYXNlIFA1NF9DT05UUk9MX1RZUEVfU1RBVF9SRUFEQkFDSzoKKwkJcDU0X3J4X3N0YXRzKHByaXYsIHNrYik7CisJCWJyZWFrOworCWNhc2UgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0s6CisJCXA1NF9yeF9lZXByb21fcmVhZGJhY2socHJpdiwgc2tiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBub3QgaGFuZGxpbmcgMHglMDJ4IHR5cGUgY29udHJvbCBmcmFtZVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUxNl90b19jcHUoaGRyLT50eXBlKSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogcmV0dXJucyB6ZXJvIGlmIHNrYiBjYW4gYmUgcmV1c2VkICovCitpbnQgcDU0X3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1MTYgdHlwZSA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKXNrYi0+ZGF0YSkpOworCisJaWYgKHR5cGUgJiBQNTRfSERSX0ZMQUdfQ09OVFJPTCkKKwkJcmV0dXJuIHA1NF9yeF9jb250cm9sKHByaXYsIHNrYik7CisJZWxzZQorCQlyZXR1cm4gcDU0X3J4X2RhdGEocHJpdiwgc2tiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9yeCk7CisKK3N0YXRpYyB2b2lkIHA1NF90eF84MDIxMV9oZWFkZXIoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLCB1OCAqcXVldWUsCisJCQkJdTMyICpleHRyYV9sZW4sIHUxNiAqZmxhZ3MsIHUxNiAqYWlkLAorCQkJCWJvb2wgKmJ1cnN0X3Bvc3NpYmxlKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCSpidXJzdF9wb3NzaWJsZSA9IHRydWU7CisJZWxzZQorCQkqYnVyc3RfcG9zc2libGUgPSBmYWxzZTsKKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkKKwkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9TRVFOUjsKKworCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUFNQT0xMX1JFU1BPTlNFKQorCQkqZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX05PQ0FOQ0VMOworCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUKQorCQkqZmxhZ3MgfD0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX05PQ0FOQ0VMOworCisJKnF1ZXVlID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikgKyBQNTRfUVVFVUVfREFUQTsKKworCXN3aXRjaCAocHJpdi0+bW9kZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJLyoKKwkJICogV2UgaGF2ZSB0byBzZXQgUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1BST01JU0MgZm9yCisJCSAqIGV2ZXJ5IGZyYW1lIGluIHByb21pc2N1b3VzL21vbml0b3IgbW9kZS4KKwkJICogc2VlIFNUU1c0NXgwQyBMTUFDIEFQSSAtIHBhZ2UgMTIuCisJCSAqLworCQkqYWlkID0gMDsKKwkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9QUk9NSVNDOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCSphaWQgPSAxOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkgeworCQkJKmFpZCA9IDA7CisJCQkqcXVldWUgPSBQNTRfUVVFVUVfQ0FCOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJCQlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJCSphaWQgPSAwOworCQkJCSpmbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QIHwKKwkJCQkJICBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7CisJCQkJcmV0dXJuOworCQkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJCQkqYWlkID0gMDsKKworCQkJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpIHsKKwkJCQkJLyoKKwkJCQkJICogSW5qZWN0aW5nIGJlYWNvbnMgb24gdG9wIG9mIGEgQVAgaXMKKwkJCQkJICogbm90IGEgZ29vZCBpZGVhLi4uIG5ldmVydGhlbGVzcywKKwkJCQkJICogaXQgc2hvdWxkIGJlIGRvYWJsZS4KKwkJCQkJICovCisKKwkJCQkJcmV0dXJuOworCQkJCX0KKworCQkJCSpmbGFncyB8PSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfVElNRVNUQU1QOworCQkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9CRUFDT047CisJCQkJKmV4dHJhX2xlbiA9IElFRUU4MDIxMV9NQVhfVElNX0xFTjsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlpZiAoaW5mby0+Y29udHJvbC5zdGEpCisJCQkqYWlkID0gaW5mby0+Y29udHJvbC5zdGEtPmFpZDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdTggcDU0X2NvbnZlcnRfYWxnbyhlbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZykKK3sKKwlzd2l0Y2ggKGFsZykgeworCWNhc2UgQUxHX1dFUDoKKwkJcmV0dXJuIFA1NF9DUllQVE9fV0VQOworCWNhc2UgQUxHX1RLSVA6CisJCXJldHVybiBQNTRfQ1JZUFRPX1RLSVBNSUNIQUVMOworCWNhc2UgQUxHX0NDTVA6CisJCXJldHVybiBQNTRfQ1JZUFRPX0FFU0NDTVA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitpbnQgcDU0X3R4XzgwMjExKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IHA1NF90eF9pbmZvICpwNTRpbmZvOworCXN0cnVjdCBwNTRfaGRyICpoZHI7CisJc3RydWN0IHA1NF90eF9kYXRhICp0eGhkcjsKKwl1bnNpZ25lZCBpbnQgcGFkZGluZywgbGVuLCBleHRyYV9sZW47CisJaW50IGksIGosIHJpZHg7CisJdTE2IGhkcl9mbGFncyA9IDAsIGFpZCA9IDA7CisJdTggcmF0ZSwgcXVldWUgPSAwLCBjcnlwdF9vZmZzZXQgPSAwOworCXU4IGN0c19yYXRlID0gMHgyMDsKKwl1OCByY19mbGFnczsKKwl1OCBjYWxjdWxhdGVkX3RyaWVzWzRdOworCXU4IG5yYXRlcyA9IDAsIG5yZW1haW5pbmcgPSA4OworCWJvb2wgYnVyc3RfYWxsb3dlZCA9IGZhbHNlOworCisJcDU0X3R4XzgwMjExX2hlYWRlcihwcml2LCBza2IsIGluZm8sICZxdWV1ZSwgJmV4dHJhX2xlbiwKKwkJCSAgICAmaGRyX2ZsYWdzLCAmYWlkLCAmYnVyc3RfYWxsb3dlZCk7CisKKwlpZiAocDU0X3R4X3Fvc19hY2NvdW50aW5nX2FsbG9jKHByaXYsIHNrYiwgcXVldWUpKSB7CisJCWlmICghSVNfUU9TX1FVRVVFKHF1ZXVlKSkgeworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KKwl9CisKKwlwYWRkaW5nID0gKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSAtIChzaXplb2YoKmhkcikgKyBzaXplb2YoKnR4aGRyKSkpICYgMzsKKwlsZW4gPSBza2ItPmxlbjsKKworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQljcnlwdF9vZmZzZXQgPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOworCQlpZiAoaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkgeworCQkJdTggKml2ID0gKHU4ICopKHNrYi0+ZGF0YSArIGNyeXB0X29mZnNldCk7CisJCQkvKgorCQkJICogVGhlIGZpcm13YXJlIGV4Y2VwdHMgdGhhdCB0aGUgSVYgaGFzIHRvIGhhdmUKKwkJCSAqIHRoaXMgc3BlY2lhbCBmb3JtYXQKKwkJCSAqLworCQkJaXZbMV0gPSBpdlswXTsKKwkJCWl2WzBdID0gaXZbMl07CisJCQlpdlsyXSA9IDA7CisJCX0KKwl9CisKKwl0eGhkciA9IChzdHJ1Y3QgcDU0X3R4X2RhdGEgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoKnR4aGRyKSArIHBhZGRpbmcpOworCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7CisKKwlpZiAocGFkZGluZykKKwkJaGRyX2ZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX0FMSUdOOworCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KGFpZCk7CisJaGRyLT5ydHNfdHJpZXMgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OworCisJLyoKKwkgKiB3ZSByZWdpc3RlciB0aGUgcmF0ZXMgaW4gcGVyZmVjdCBvcmRlciwgYW5kCisJICogUlRTL0NUUyB3b24ndCBoYXBwZW4gb24gNSBHSHoKKwkgKi8KKwljdHNfcmF0ZSA9IGluZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeDsKKworCW1lbXNldCgmdHhoZHItPnJhdGVzZXQsIDAsIHNpemVvZih0eGhkci0+cmF0ZXNldCkpOworCisJLyogc2VlIGhvdyBtYW55IHJhdGVzIGdvdCB1c2VkICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+bWF4X3JhdGVzOyBpKyspIHsKKwkJaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uaWR4IDwgMCkKKwkJCWJyZWFrOworCQlucmF0ZXMrKzsKKwl9CisKKwkvKiBsaW1pdCB0cmllcyB0byA4L25yYXRlcyBwZXIgcmF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCBucmF0ZXM7IGkrKykgeworCQkvKgorCQkgKiBUaGUgbWFnaWMgZXhwcmVzc2lvbiBoZXJlIGlzIGVxdWl2YWxlbnQgdG8gOC9ucmF0ZXMgZm9yCisJCSAqIGFsbCB2YWx1ZXMgdGhhdCBtYXR0ZXIsIGJ1dCBhdm9pZHMgZGl2aXNpb24gYW5kIGp1bXBzLgorCQkgKiBOb3RlIHRoYXQgbnJhdGVzIGNhbiBvbmx5IHRha2UgdGhlIHZhbHVlcyAxIHRocm91Z2ggNC4KKwkJICovCisJCWNhbGN1bGF0ZWRfdHJpZXNbaV0gPSBtaW5fdChpbnQsICgoMTUgPj4gbnJhdGVzKSB8IDEpICsgMSwKKwkJCQkJCSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmNvdW50KTsKKwkJbnJlbWFpbmluZyAtPSBjYWxjdWxhdGVkX3RyaWVzW2ldOworCX0KKworCS8qIGlmIHRoZXJlIGFyZSB0cmllcyBsZWZ0LCBkaXN0cmlidXRlIGZyb20gYmFjayB0byBmcm9udCAqLworCWZvciAoaSA9IG5yYXRlcyAtIDE7IG5yZW1haW5pbmcgPiAwICYmIGkgPj0gMDsgaS0tKSB7CisJCWludCB0bXAgPSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmNvdW50IC0gY2FsY3VsYXRlZF90cmllc1tpXTsKKworCQlpZiAodG1wIDw9IDApCisJCQljb250aW51ZTsKKwkJLyogUkMgcmVxdWVzdGVkIG1vcmUgdHJpZXMgYXQgdGhpcyByYXRlICovCisKKwkJdG1wID0gbWluX3QoaW50LCB0bXAsIG5yZW1haW5pbmcpOworCQljYWxjdWxhdGVkX3RyaWVzW2ldICs9IHRtcDsKKwkJbnJlbWFpbmluZyAtPSB0bXA7CisJfQorCisJcmlkeCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5yYXRlcyAmJiByaWR4IDwgODsgaSsrKSB7CisJCS8qIHdlIHJlZ2lzdGVyIHRoZSByYXRlcyBpbiBwZXJmZWN0IG9yZGVyICovCisJCXJhdGUgPSBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmlkeDsKKwkJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCXJhdGUgKz0gNDsKKworCQkvKiBzdG9yZSB0aGUgY291bnQgd2UgYWN0dWFsbHkgY2FsY3VsYXRlZCBmb3IgVFggc3RhdHVzICovCisJCWluZm8tPmNvbnRyb2wucmF0ZXNbaV0uY291bnQgPSBjYWxjdWxhdGVkX3RyaWVzW2ldOworCisJCXJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1tpXS5mbGFnczsKKwkJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkgeworCQkJcmF0ZSB8PSAweDEwOworCQkJY3RzX3JhdGUgfD0gMHgxMDsKKwkJfQorCQlpZiAocmNfZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpIHsKKwkJCWJ1cnN0X2FsbG93ZWQgPSBmYWxzZTsKKwkJCXJhdGUgfD0gMHg0MDsKKwkJfSBlbHNlIGlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpIHsKKwkJCXJhdGUgfD0gMHgyMDsKKwkJCWJ1cnN0X2FsbG93ZWQgPSBmYWxzZTsKKwkJfQorCQlmb3IgKGogPSAwOyBqIDwgY2FsY3VsYXRlZF90cmllc1tpXSAmJiByaWR4IDwgODsgaisrKSB7CisJCQl0eGhkci0+cmF0ZXNldFtyaWR4XSA9IHJhdGU7CisJCQlyaWR4Kys7CisJCX0KKwl9CisKKwlpZiAoYnVyc3RfYWxsb3dlZCkKKwkJaGRyX2ZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9CVVJTVDsKKworCS8qIFRPRE86IGVuYWJsZSBidXJzdGluZyAqLworCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUxNihoZHJfZmxhZ3MpOworCWhkci0+dHJpZXMgPSByaWR4OworCXR4aGRyLT5ydHNfcmF0ZV9pZHggPSAwOworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQl0eGhkci0+a2V5X3R5cGUgPSBwNTRfY29udmVydF9hbGdvKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcpOworCQl0eGhkci0+a2V5X2xlbiA9IG1pbigodTgpMTYsIGluZm8tPmNvbnRyb2wuaHdfa2V5LT5rZXlsZW4pOworCQltZW1jcHkodHhoZHItPmtleSwgaW5mby0+Y29udHJvbC5od19rZXktPmtleSwgdHhoZHItPmtleV9sZW4pOworCQlpZiAoaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkgeworCQkJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIE1JQyBrZXkgKi8KKwkJCWxlbiArPSA4OworCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCA4KSwgJihpbmZvLT5jb250cm9sLmh3X2tleS0+a2V5CisJCQkJW05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9UWF9NSUNfS0VZXSksIDgpOworCQl9CisJCS8qIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgSUNWICovCisJCWxlbiArPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKwkJbWVtc2V0KHNrYl9wdXQoc2tiLCBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbiksIDAsCisJCSAgICAgICBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbik7CisJfSBlbHNlIHsKKwkJdHhoZHItPmtleV90eXBlID0gMDsKKwkJdHhoZHItPmtleV9sZW4gPSAwOworCX0KKwl0eGhkci0+Y3J5cHRfb2Zmc2V0ID0gY3J5cHRfb2Zmc2V0OworCXR4aGRyLT5od19xdWV1ZSA9IHF1ZXVlOworCXR4aGRyLT5iYWNrbG9nID0gcHJpdi0+dHhfc3RhdHNbcXVldWVdLmxlbiAtIDE7CisJbWVtc2V0KHR4aGRyLT5kdXJhdGlvbnMsIDAsIHNpemVvZih0eGhkci0+ZHVyYXRpb25zKSk7CisJdHhoZHItPnR4X2FudGVubmEgPSAoKGluZm8tPmFudGVubmFfc2VsX3R4ID09IDApID8KKwkJMiA6IGluZm8tPmFudGVubmFfc2VsX3R4IC0gMSkgJiBwcml2LT50eF9kaXZlcnNpdHlfbWFzazsKKwlpZiAocHJpdi0+cnhodyA9PSA1KSB7CisJCXR4aGRyLT5sb25nYm93LmN0c19yYXRlID0gY3RzX3JhdGU7CisJCXR4aGRyLT5sb25nYm93Lm91dHB1dF9wb3dlciA9IGNwdV90b19sZTE2KHByaXYtPm91dHB1dF9wb3dlcik7CisJfSBlbHNlIHsKKwkJdHhoZHItPm5vcm1hbC5vdXRwdXRfcG93ZXIgPSBwcml2LT5vdXRwdXRfcG93ZXI7CisJCXR4aGRyLT5ub3JtYWwuY3RzX3JhdGUgPSBjdHNfcmF0ZTsKKwl9CisJaWYgKHBhZGRpbmcpCisJCXR4aGRyLT5hbGlnblswXSA9IHBhZGRpbmc7CisKKwloZHItPmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJLyogbW9kaWZpZXMgc2tiLT5jYiBhbmQgd2l0aCBpdCBpbmZvLCBzbyBtdXN0IGJlIGxhc3QhICovCisJcDU0aW5mbyA9ICh2b2lkICopIGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisJcDU0aW5mby0+ZXh0cmFfbGVuID0gZXh0cmFfbGVuOworCisJcDU0X3R4KHByaXYsIHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKaW5kZXggOGY2MjEwOS4uODcyYjY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZXRoLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogCQkvKiBjaGVjayBmb3IgaG9sZXMgaW4gdGhlIGFycmF5cyBjYXVzZWQgYnkgbXVsdGkgZnJhZ21lbnQgZnJhbWVzCiAJCSAqIHNlYXJjaGluZyBmb3IgdGhlIGxhc3QgZnJhZ21lbnQgb2YgYSBmcmFtZSAqLwotCQlpZiAocHJpdi0+cGNpX21hcF90eF9hZGRyZXNzW2luZGV4XSAhPSAoZG1hX2FkZHJfdCkgTlVMTCkgeworCQlpZiAocHJpdi0+cGNpX21hcF90eF9hZGRyZXNzW2luZGV4XSkgewogCQkJLyogZW50cnkgaXMgdGhlIGxhc3QgZnJhZ21lbnQgb2YgYSBmcmFtZQogCQkJICogZnJlZSB0aGUgc2tiIHN0cnVjdHVyZSBhbmQgdW5tYXAgcGNpIG1lbW9yeSAqLwogCQkJc2tiID0gcHJpdi0+ZGF0YV9sb3dfdHhbaW5kZXhdOwpAQCAtNzIsNyArNzIsNyBAQAogCX0KIH0KIAotaW50CituZXRkZXZfdHhfdAogaXNscGNpX2V0aF90cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJLyogdW5sb2NrIHRoZSBkcml2ZXIgY29kZSAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNsb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgICAgICBkcm9wX2ZyZWU6CiAJbmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJCSAgICBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCAodm9pZCAqKSBza2ItPmRhdGEsCiAJCQkJICAgTUFYX0ZSQUdNRU5UX1NJWkVfUlggKyAyLAogCQkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmICh1bmxpa2VseShwcml2LT5wY2lfbWFwX3J4X2FkZHJlc3NbaW5kZXhdID09IChkbWFfYWRkcl90KSBOVUxMKSkgeworCQlpZiAodW5saWtlbHkoIXByaXYtPnBjaV9tYXBfcnhfYWRkcmVzc1tpbmRleF0pKSB7CiAJCQkvKiBlcnJvciBtYXBwaW5nIHRoZSBidWZmZXIgdG8gZGV2aWNlIGFjY2Vzc2FibGUgbWVtb3J5IGFkZHJlc3MgKi8KIAkJCURFQlVHKFNIT1dfRVJST1JfTUVTU0FHRVMsCiAJCQkgICAgICAiRXJyb3IgbWFwcGluZyBETUEgYWRkcmVzc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCmluZGV4IDYxNDU0ZDMuLjU0ZjlhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCkBAIC02NCw3ICs2NCw3IEBACiB9OwogCiB2b2lkIGlzbHBjaV9ldGhfY2xlYW51cF90cmFuc21pdChpc2xwY2lfcHJpdmF0ZSAqLCBpc2wzOHh4X2NvbnRyb2xfYmxvY2sgKik7Ci1pbnQgaXNscGNpX2V0aF90cmFuc21pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK25ldGRldl90eF90IGlzbHBjaV9ldGhfdHJhbnNtaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBpbnQgaXNscGNpX2V0aF9yZWNlaXZlKGlzbHBjaV9wcml2YXRlICopOwogdm9pZCBpc2xwY2lfZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiB2b2lkIGlzbHBjaV9kb19yZXNldF9hbmRfd2FrZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKaW5kZXggMzA4NzY3Mi4uODNkMzY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYwpAQCAtNDksOSArNDksNyBAQAogCiAJLyogM0NPTSAzQ1JXRTE1NEc3MiBXaXJlbGVzcyBMQU4gYWRhcHRlciAqLwogCXsKLQkgMHgxMGI3LCAweDYwMDEsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCi0JIDAsIDAsIDAKKwkgUENJX1ZERVZJQ0UoM0NPTSwgMHg2MDAxKSwgMAogCX0sCiAKIAkvKiBJbnRlcnNpbCBQUklTTSBJbmRpZ28gV2lyZWxlc3MgTEFOIGFkYXB0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggNjk4YjExYi4uODhjZDU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTEwNCw3ICsxMDQsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiAKIHN0YXRpYyBpbnQgcmF5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHJheV9kZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCByYXlfZGV2X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhbGwpOwogc3RhdGljIGludCB0cmFuc2xhdGVfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCkBAIC05MTUsMTYgKzkxNiwxOSBAQAogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgaW50IHJheV9kZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJheV9kZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAJc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CiAKLQlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKIAkJREVCVUcoMiwgInJheV9kZXZfc3RhcnRfeG1pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0JCXJldHVybiBORVRERVZfVFhfTE9DS0VEOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQorCiAJREVCVUcoMywgInJheV9kZXZfc3RhcnRfeG1pdChza2I9JXAsIGRldj0lcClcbiIsIHNrYiwgZGV2KTsKIAlpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IE5FRURfVE9fQVVUSCkgewogCQlERUJVRygwLCAicmF5X2NzIFNlbmRpbmcgYXV0aGVudGljYXRpb24gcmVxdWVzdC5cbiIpOwpAQCAtOTM3LDcgKzk0MSw3IEBACiAKIAlpZiAobGVuZ3RoIDwgRVRIX1pMRU4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQogCXN3aXRjaCAocmF5X2h3X3htaXQoc2tiLT5kYXRhLCBsZW5ndGgsIGRldiwgREFUQV9UWVBFKSkgewpAQCAtOTUxLDkgKzk1NSw5IEBACiAJZGVmYXVsdDoKIAkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAwOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0gLyogcmF5X2Rldl9zdGFydF94bWl0ICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTE1MTEsOSArMTUxNSw2IEBACiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwogCXN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CiAKLQlpZiAobG9jYWwgPT0gKHJheV9kZXZfdCAqKSBOVUxMKQotCQlyZXR1cm4gKGl3X3N0YXRzICopIE5VTEw7Ci0KIAlsb2NhbC0+d3N0YXRzLnN0YXR1cyA9IGxvY2FsLT5jYXJkX3N0YXR1czsKICNpZmRlZiBXSVJFTEVTU19TUFkKIAlpZiAoKGxvY2FsLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwppbmRleCAzYmVjM2RiLi41NDE3NWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCkBAIC0xMDAsNyArMTAwLDYgQEAKICNkZWZpbmUgT0lEX0dFTl9SQ1ZfRVJST1IJCQljcHVfdG9fbGUzMigweDAwMDIwMTA0KQogI2RlZmluZSBPSURfR0VOX1JDVl9OT19CVUZGRVIJCQljcHVfdG9fbGUzMigweDAwMDIwMTA1KQogCi0jZGVmaW5lIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUwkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMSkKICNkZWZpbmUgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUwkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwMikKICNkZWZpbmUgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUCQljcHVfdG9fbGUzMigweDAxMDEwMTAzKQogI2RlZmluZSBPSURfODAyXzNfTUFYSU1VTV9MSVNUX1NJWkUJCWNwdV90b19sZTMyKDB4MDEwMTAxMDQpCkBAIC0xMzksOSArMTM4LDE1IEBACiAvKiBBc3N1bWUgdGhhdCBCcm9hZGNvbSA0MzIwIChvbmx5IGNoaXBzZXQgYXQgdGltZSBvZiB3cml0aW5nIGtub3duIHRvIGJlCiAgKiBiYXNlZCBvbiB3aXJlbGVzcyBybmRpcykgaGFzIGRlZmF1bHQgdHhwb3dlciBvZiAxM2RCbS4KICAqIFRoaXMgdmFsdWUgaXMgZnJvbSBMaW5rc3lzIFdVU0I1NEdTQyBVc2VyIEd1aWRlLCBBcHBlbmRpeCBGOiBTcGVjaWZpY2F0aW9ucy4KLSAqICAgMTNkQm0gPT0gMTkuOW1XCisgKiAgMTAwJSA6IDIwIG1XIH4gMTNkQm0KKyAqICAgNzUlIDogMTUgbVcgfiAxMmRCbQorICogICA1MCUgOiAxMCBtVyB+IDEwZEJtCisgKiAgIDI1JSA6ICA1IG1XIH4gIDdkQm0KICAqLwotI2RlZmluZSBCQ000MzIwX0RFRkFVTFRfVFhQT1dFUiAyMAorI2RlZmluZSBCQ000MzIwX0RFRkFVTFRfVFhQT1dFUl9EQk1fMTAwIDEzCisjZGVmaW5lIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSX0RCTV83NSAgMTIKKyNkZWZpbmUgQkNNNDMyMF9ERUZBVUxUX1RYUE9XRVJfREJNXzUwICAxMAorI2RlZmluZSBCQ000MzIwX0RFRkFVTFRfVFhQT1dFUl9EQk1fMjUgIDcKIAogCiAvKiBjb2RlcyBmb3IgInN0YXR1cyIgZmllbGQgb2YgY29tcGxldGlvbiBtZXNzYWdlcyAqLwpAQCAtMTk2LDYgKzIwMSwyNCBAQAogCU5ESVNfODAyMTFfUFJJVl84MDIxWF9XRVAKIH07CiAKK2VudW0gbmRpc184MDIxMV9zdGF0dXNfdHlwZSB7CisJTkRJU184MDIxMV9TVEFUVVNUWVBFX0FVVEhFTlRJQ0FUSU9OLAorCU5ESVNfODAyMTFfU1RBVFVTVFlQRV9NRURJQVNUUkVBTU1PREUsCisJTkRJU184MDIxMV9TVEFUVVNUWVBFX1BNS0lEX0NBTkRJREFURUxJU1QsCisJTkRJU184MDIxMV9TVEFUVVNUWVBFX1JBRElPU1RBVEUsCit9OworCitlbnVtIG5kaXNfODAyMTFfbWVkaWFfc3RyZWFtX21vZGUgeworCU5ESVNfODAyMTFfTUVESUFfU1RSRUFNX09GRiwKKwlORElTXzgwMjExX01FRElBX1NUUkVBTV9PTgorfTsKKworZW51bSBuZGlzXzgwMjExX3JhZGlvX3N0YXR1cyB7CisJTkRJU184MDIxMV9SQURJT19TVEFUVVNfT04sCisJTkRJU184MDIxMV9SQURJT19TVEFUVVNfSEFSRFdBUkVfT0ZGLAorCU5ESVNfODAyMTFfUkFESU9fU1RBVFVTX1NPRlRXQVJFX09GRiwKK307CisKIGVudW0gbmRpc184MDIxMV9hZGRrZXlfYml0cyB7CiAJTkRJU184MDIxMV9BRERLRVlfODAyMVhfQVVUSCA9IGNwdV90b19sZTMyKDEgPDwgMjgpLAogCU5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VRID0gY3B1X3RvX2xlMzIoMSA8PCAyOSksCkBAIC0yMDgsNiArMjMxLDM1IEBACiAJTkRJU184MDIxMV9BRERXRVBfVFJBTlNNSVRfS0VZID0gY3B1X3RvX2xlMzIoMSA8PCAzMSkKIH07CiAKK3N0cnVjdCBuZGlzXzgwMjExX2F1dGhfcmVxdWVzdCB7CisJX19sZTMyIGxlbmd0aDsKKwl1OCBic3NpZFs2XTsKKwl1OCBwYWRkaW5nWzJdOworCV9fbGUzMiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRpZGF0ZSB7CisJdTggYnNzaWRbNl07CisJdTggcGFkZGluZ1syXTsKKwlfX2xlMzIgZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbmRpc184MDIxMV9wbWtpZF9jYW5kX2xpc3QgeworCV9fbGUzMiB2ZXJzaW9uOworCV9fbGUzMiBudW1fY2FuZGlkYXRlczsKKwlzdHJ1Y3QgbmRpc184MDIxMV9wbWtpZF9jYW5kaWRhdGUgY2FuZGlkYXRlX2xpc3RbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbmRpc184MDIxMV9zdGF0dXNfaW5kaWNhdGlvbiB7CisJX19sZTMyIHN0YXR1c190eXBlOworCXVuaW9uIHsKKwkJX19sZTMyCQkJCQltZWRpYV9zdHJlYW1fbW9kZTsKKwkJX19sZTMyCQkJCQlyYWRpb19zdGF0dXM7CisJCXN0cnVjdCBuZGlzXzgwMjExX2F1dGhfcmVxdWVzdAkJYXV0aF9yZXF1ZXN0WzBdOworCQlzdHJ1Y3QgbmRpc184MDIxMV9wbWtpZF9jYW5kX2xpc3QJY2FuZF9saXN0OworCX0gdTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHN0cnVjdCBuZGlzXzgwMjExX3NzaWQgewogCV9fbGUzMiBsZW5ndGg7CiAJdTggZXNzaWRbTkRJU184MDJfMTFfTEVOR1RIX1NTSURdOwpAQCAtMjc1LDYgKzMyNyw3IEBACiAJX19sZTMyIHNpemU7CiAJX19sZTMyIGluZGV4OwogCXU4IGJzc2lkWzZdOworCXU4IHBhZGRpbmdbMl07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmRpc19jb25maWdfcGFyYW0gewpAQCAtMzA1LDEzICszNTgsNiBAQAogCV9fbGUzMiBvZmZzZXRfcmVzcF9pZXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0vKiB0aGVzZSBoYXZlIHRvIG1hdGNoIHdoYXQgaXMgaW4gd3BhX3N1cHBsaWNhbnQgKi8KLWVudW0gd3BhX2FsZyB7IFdQQV9BTEdfTk9ORSwgV1BBX0FMR19XRVAsIFdQQV9BTEdfVEtJUCwgV1BBX0FMR19DQ01QIH07Ci1lbnVtIHdwYV9jaXBoZXIgeyBDSVBIRVJfTk9ORSwgQ0lQSEVSX1dFUDQwLCBDSVBIRVJfVEtJUCwgQ0lQSEVSX0NDTVAsCi0JCSAgQ0lQSEVSX1dFUDEwNCB9OwotZW51bSB3cGFfa2V5X21nbXQgeyBLRVlfTUdNVF84MDJfMVgsIEtFWV9NR01UX1BTSywgS0VZX01HTVRfTk9ORSwKLQkJICAgIEtFWV9NR01UXzgwMl8xWF9OT19XUEEsIEtFWV9NR01UX1dQQV9OT05FIH07Ci0KIC8qCiAgKiAgcHJpdmF0ZSBkYXRhCiAgKi8KQEAgLTMyNiw2ICszNzIsMTUgQEAKICNkZWZpbmUgV09SS19MSU5LX0RPV04JCSgxPDwxKQogI2RlZmluZSBXT1JLX1NFVF9NVUxUSUNBU1RfTElTVAkoMTw8MikKIAorI2RlZmluZSBSTkRJU19XTEFOX0FMR19OT05FCTAKKyNkZWZpbmUgUk5ESVNfV0xBTl9BTEdfV0VQCSgxPDwwKQorI2RlZmluZSBSTkRJU19XTEFOX0FMR19US0lQCSgxPDwxKQorI2RlZmluZSBSTkRJU19XTEFOX0FMR19DQ01QCSgxPDwyKQorCisjZGVmaW5lIFJORElTX1dMQU5fS0VZX01HTVRfTk9ORQkwCisjZGVmaW5lIFJORElTX1dMQU5fS0VZX01HTVRfODAyXzFYCSgxPDwwKQorI2RlZmluZSBSTkRJU19XTEFOX0tFWV9NR01UX1BTSwkJKDE8PDEpCisKICNkZWZpbmUgQ09NTUFORF9CVUZGRVJfU0laRQkoQ09OVFJPTF9CVUZGRVJfU0laRSArIHNpemVvZihzdHJ1Y3Qgcm5kaXNfc2V0KSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBybmRpc19jaGFubmVsc1tdID0gewpAQCAtMzYwLDYgKzQxNSwyMiBAQAogCXsgLmJpdHJhdGUgPSA1NDAgfQogfTsKIAorc3RhdGljIGNvbnN0IHUzMiBybmRpc19jaXBoZXJfc3VpdGVzW10gPSB7CisJV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAsCisJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0LAorCVdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAsCisJV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCwKK307CisKK3N0cnVjdCBybmRpc193bGFuX2VuY3Jfa2V5IHsKKwlpbnQgbGVuOworCXUzMiBjaXBoZXI7CisJdTggbWF0ZXJpYWxbMzJdOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwlib29sIHBhaXJ3aXNlOworCWJvb2wgdHhfa2V5OworfTsKKwogLyogUk5ESVMgZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSB7CiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2OwpAQCAtMzY5LDE5ICs0NDAsMTcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcXVlc3Q7CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRldl9wb2xsZXJfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIAlzdHJ1Y3QgbXV0ZXggY29tbWFuZF9sb2NrOwotCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKIAl1bnNpZ25lZCBsb25nIHdvcmtfcGVuZGluZzsKKwlpbnQgbGFzdF9xdWFsOwogCiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBUlJBWV9TSVpFKHJuZGlzX2NoYW5uZWxzKV07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0FSUkFZX1NJWkUocm5kaXNfcmF0ZXMpXTsKLQotCXN0cnVjdCBpd19zdGF0aXN0aWNzIGl3c3RhdHM7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgcHJpdnN0YXRzOworCXUzMiBjaXBoZXJfc3VpdGVzW0FSUkFZX1NJWkUocm5kaXNfY2lwaGVyX3N1aXRlcyldOwogCiAJaW50IGNhcHM7CiAJaW50IG11bHRpY2FzdF9zaXplOwpAQCAtMzk3LDE4ICs0NjYsMTkgQEAKIAl1MzIgIHBhcmFtX3dvcmthcm91bmRfaW50ZXJ2YWw7CiAKIAkvKiBoYXJkd2FyZSBzdGF0ZSAqLwotCWludCByYWRpb19vbjsKKwlib29sIHJhZGlvX29uOwogCWludCBpbmZyYV9tb2RlOworCWJvb2wgY29ubmVjdGVkOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgbmRpc184MDIxMV9zc2lkIGVzc2lkOworCV9fbGUzMiBjdXJyZW50X2NvbW1hbmRfb2lkOwogCiAJLyogZW5jcnlwdGlvbiBzdHVmZiAqLwogCWludCAgZW5jcl90eF9rZXlfaW5kZXg7Ci0JY2hhciBlbmNyX2tleXNbNF1bMzJdOwotCWludCAgZW5jcl9rZXlfbGVuWzRdOwotCWNoYXIgZW5jcl9rZXlfd3BhWzRdOworCXN0cnVjdCBybmRpc193bGFuX2VuY3Jfa2V5IGVuY3Jfa2V5c1s0XTsKKwllbnVtIG5sODAyMTFfYXV0aF90eXBlIHdwYV9hdXRoX3R5cGU7CiAJaW50ICB3cGFfdmVyc2lvbjsKIAlpbnQgIHdwYV9rZXltZ210OwotCWludCAgd3BhX2F1dGhhbGc7CiAJaW50ICB3cGFfaWVfbGVuOwogCXU4ICAqd3BhX2llOwogCWludCAgd3BhX2NpcGhlcl9wYWlyOwpAQCAtNDIwLDM5ICs0OTAsMTg2IEBACiAvKgogICogY2ZnODAyMTEgb3BzCiAgKi8KLXN0YXRpYyBpbnQgcm5kaXNfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgaWZpbmRleCwKK3N0YXRpYyBpbnQgcm5kaXNfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJCXN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwogCiBzdGF0aWMgaW50IHJuZGlzX3NjYW4oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QpOwogCitzdGF0aWMgaW50IHJuZGlzX3NldF93aXBoeV9wYXJhbXMoc3RydWN0IHdpcGh5ICp3aXBoeSwgdTMyIGNoYW5nZWQpOworCitzdGF0aWMgaW50IHJuZGlzX3NldF90eF9wb3dlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHR4X3Bvd2VyX3NldHRpbmcgdHlwZSwKKwkJCQlpbnQgZGJtKTsKK3N0YXRpYyBpbnQgcm5kaXNfZ2V0X3R4X3Bvd2VyKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCAqZGJtKTsKKworc3RhdGljIGludCBybmRpc19jb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zICpzbWUpOworCitzdGF0aWMgaW50IHJuZGlzX2Rpc2Nvbm5lY3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQl1MTYgcmVhc29uX2NvZGUpOworCitzdGF0aWMgaW50IHJuZGlzX2pvaW5faWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcyk7CisKK3N0YXRpYyBpbnQgcm5kaXNfbGVhdmVfaWJzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworc3RhdGljIGludCBybmRpc19zZXRfY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpOworCitzdGF0aWMgaW50IHJuZGlzX2FkZF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIsCisJCQkJCXN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpOworCitzdGF0aWMgaW50IHJuZGlzX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIpOworCitzdGF0aWMgaW50IHJuZGlzX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQkJCQl1OCBrZXlfaW5kZXgpOworCitzdGF0aWMgaW50IHJuZGlzX2dldF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKTsKKworc3RhdGljIGludCBybmRpc19kdW1wX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBpbnQgaWR4LCB1OCAqbWFjLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyk7CisKIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHJuZGlzX2NvbmZpZ19vcHMgPSB7CiAJLmNoYW5nZV92aXJ0dWFsX2ludGYgPSBybmRpc19jaGFuZ2VfdmlydHVhbF9pbnRmLAogCS5zY2FuID0gcm5kaXNfc2NhbiwKKwkuc2V0X3dpcGh5X3BhcmFtcyA9IHJuZGlzX3NldF93aXBoeV9wYXJhbXMsCisJLnNldF90eF9wb3dlciA9IHJuZGlzX3NldF90eF9wb3dlciwKKwkuZ2V0X3R4X3Bvd2VyID0gcm5kaXNfZ2V0X3R4X3Bvd2VyLAorCS5jb25uZWN0ID0gcm5kaXNfY29ubmVjdCwKKwkuZGlzY29ubmVjdCA9IHJuZGlzX2Rpc2Nvbm5lY3QsCisJLmpvaW5faWJzcyA9IHJuZGlzX2pvaW5faWJzcywKKwkubGVhdmVfaWJzcyA9IHJuZGlzX2xlYXZlX2lic3MsCisJLnNldF9jaGFubmVsID0gcm5kaXNfc2V0X2NoYW5uZWwsCisJLmFkZF9rZXkgPSBybmRpc19hZGRfa2V5LAorCS5kZWxfa2V5ID0gcm5kaXNfZGVsX2tleSwKKwkuc2V0X2RlZmF1bHRfa2V5ID0gcm5kaXNfc2V0X2RlZmF1bHRfa2V5LAorCS5nZXRfc3RhdGlvbiA9IHJuZGlzX2dldF9zdGF0aW9uLAorCS5kdW1wX3N0YXRpb24gPSBybmRpc19kdW1wX3N0YXRpb24sCiB9OwogCiBzdGF0aWMgdm9pZCAqcm5kaXNfd2lwaHlfcHJpdmlkID0gJnJuZGlzX3dpcGh5X3ByaXZpZDsKIAotc3RhdGljIGNvbnN0IGludCBiY200MzIwX3Bvd2VyX291dHB1dFs0XSA9IHsgMjUsIDUwLCA3NSwgMTAwIH07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHplcm9fYnNzaWRbRVRIX0FMRU5dID0gezAsfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZmZmZfYnNzaWRbRVRIX0FMRU5dID0geyAweGZmLCAweGZmLCAweGZmLAotCQkJCQkJCTB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQogCiBzdGF0aWMgc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqZ2V0X3JuZGlzX3dsYW5fcHJpdihzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7CiAJcmV0dXJuIChzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICopZGV2LT5kcml2ZXJfcHJpdjsKIH0KIAotCi1zdGF0aWMgdTMyIGdldF9iY200MzIwX3Bvd2VyKHN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYpCitzdGF0aWMgdTMyIGdldF9iY200MzIwX3Bvd2VyX2RibShzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2KQogewotCXJldHVybiBCQ000MzIwX0RFRkFVTFRfVFhQT1dFUiAqCi0JCWJjbTQzMjBfcG93ZXJfb3V0cHV0W3ByaXYtPnBhcmFtX3Bvd2VyX291dHB1dF0gLyAxMDA7CisJc3dpdGNoIChwcml2LT5wYXJhbV9wb3dlcl9vdXRwdXQpIHsKKwlkZWZhdWx0OgorCWNhc2UgMzoKKwkJcmV0dXJuIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSX0RCTV8xMDA7CisJY2FzZSAyOgorCQlyZXR1cm4gQkNNNDMyMF9ERUZBVUxUX1RYUE9XRVJfREJNXzc1OworCWNhc2UgMToKKwkJcmV0dXJuIEJDTTQzMjBfREVGQVVMVF9UWFBPV0VSX0RCTV81MDsKKwljYXNlIDA6CisJCXJldHVybiBCQ000MzIwX0RFRkFVTFRfVFhQT1dFUl9EQk1fMjU7CisJfQogfQogCitzdGF0aWMgYm9vbCBpc193cGFfa2V5KHN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYsIGludCBpZHgpCit7CisJaW50IGNpcGhlciA9IHByaXYtPmVuY3Jfa2V5c1tpZHhdLmNpcGhlcjsKKworCXJldHVybiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAgfHwKKwkJY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApOworfQorCitzdGF0aWMgaW50IHJuZGlzX2NpcGhlcl90b19hbGcodTMyIGNpcGhlcikKK3sKKwlzd2l0Y2ggKGNpcGhlcikgeworCWRlZmF1bHQ6CisJCXJldHVybiBSTkRJU19XTEFOX0FMR19OT05FOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCXJldHVybiBSTkRJU19XTEFOX0FMR19XRVA7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgorCQlyZXR1cm4gUk5ESVNfV0xBTl9BTEdfVEtJUDsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCXJldHVybiBSTkRJU19XTEFOX0FMR19DQ01QOworCX0KK30KKworc3RhdGljIGludCBybmRpc19ha21fc3VpdGVfdG9fa2V5X21nbXQodTMyIGFrbV9zdWl0ZSkKK3sKKwlzd2l0Y2ggKGFrbV9zdWl0ZSkgeworCWRlZmF1bHQ6CisJCXJldHVybiBSTkRJU19XTEFOX0tFWV9NR01UX05PTkU7CisJY2FzZSBXTEFOX0FLTV9TVUlURV84MDIxWDoKKwkJcmV0dXJuIFJORElTX1dMQU5fS0VZX01HTVRfODAyXzFYOworCWNhc2UgV0xBTl9BS01fU1VJVEVfUFNLOgorCQlyZXR1cm4gUk5ESVNfV0xBTl9LRVlfTUdNVF9QU0s7CisJfQorfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICpvaWRfdG9fc3RyaW5nKF9fbGUzMiBvaWQpCit7CisJc3dpdGNoIChvaWQpIHsKKyNkZWZpbmUgT0lEX1NUUihvaWQpIGNhc2Ugb2lkOiByZXR1cm4oI29pZCkKKwkJLyogZnJvbSBybmRpc19ob3N0LmggKi8KKwkJT0lEX1NUUihPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MpOworCQlPSURfU1RSKE9JRF9HRU5fTUFYSU1VTV9GUkFNRV9TSVpFKTsKKwkJT0lEX1NUUihPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUik7CisJCU9JRF9TVFIoT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0pOworCisJCS8qIGZyb20gcm5kaXNfd2xhbi5jICovCisJCU9JRF9TVFIoT0lEX0dFTl9MSU5LX1NQRUVEKTsKKwkJT0lEX1NUUihPSURfR0VOX1JORElTX0NPTkZJR19QQVJBTUVURVIpOworCisJCU9JRF9TVFIoT0lEX0dFTl9YTUlUX09LKTsKKwkJT0lEX1NUUihPSURfR0VOX1JDVl9PSyk7CisJCU9JRF9TVFIoT0lEX0dFTl9YTUlUX0VSUk9SKTsKKwkJT0lEX1NUUihPSURfR0VOX1JDVl9FUlJPUik7CisJCU9JRF9TVFIoT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSKTsKKworCQlPSURfU1RSKE9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MpOworCQlPSURfU1RSKE9JRF84MDJfM19NVUxUSUNBU1RfTElTVCk7CisJCU9JRF9TVFIoT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFKTsKKworCQlPSURfU1RSKE9JRF84MDJfMTFfQlNTSUQpOworCQlPSURfU1RSKE9JRF84MDJfMTFfU1NJRCk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFKTsKKwkJT0lEX1NUUihPSURfODAyXzExX0FERF9XRVApOworCQlPSURfU1RSKE9JRF84MDJfMTFfUkVNT1ZFX1dFUCk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUpOworCQlPSURfU1RSKE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUik7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4pOworCQlPSURfU1RSKE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMpOworCQlPSURfU1RSKE9JRF84MDJfMTFfQUREX0tFWSk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9SRU1PVkVfS0VZKTsKKwkJT0lEX1NUUihPSURfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKTsKKwkJT0lEX1NUUihPSURfODAyXzExX1BNS0lEKTsKKwkJT0lEX1NUUihPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVEKTsKKwkJT0lEX1NUUihPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UpOworCQlPSURfU1RSKE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUwpOworCQlPSURfU1RSKE9JRF84MDJfMTFfUlNTSSk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIpOworCQlPSURfU1RSKE9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQpOworCQlPSURfU1RSKE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRCk7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMpOworCQlPSURfU1RSKE9JRF84MDJfMTFfQ09ORklHVVJBVElPTik7CisJCU9JRF9TVFIoT0lEXzgwMl8xMV9CU1NJRF9MSVNUKTsKKyN1bmRlZiBPSURfU1RSCisJfQorCisJcmV0dXJuICI/IjsKK30KKyNlbHNlCitzdGF0aWMgY29uc3QgY2hhciAqb2lkX3RvX3N0cmluZyhfX2xlMzIgb2lkKQoreworCXJldHVybiAiPyI7Cit9CisjZW5kaWYKIAogLyogdHJhbnNsYXRlIGVycm9yIGNvZGUgKi8KIHN0YXRpYyBpbnQgcm5kaXNfZXJyb3Jfc3RhdHVzKF9fbGUzMiBybmRpc19zdGF0dXMpCkBAIC00NzcsNyArNjk0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyBpbnQgcm5kaXNfcXVlcnlfb2lkKHN0cnVjdCB1c2JuZXQgKmRldiwgX19sZTMyIG9pZCwgdm9pZCAqZGF0YSwgaW50ICpsZW4pCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYoZGV2KTsKQEAgLTUwOCwxMiArNzI0LDI1IEBACiAJdS5nZXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuZ2V0KTsKIAl1LmdldC0+b2lkID0gb2lkOwogCisJcHJpdi0+Y3VycmVudF9jb21tYW5kX29pZCA9IG9pZDsKIAlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7CisJcHJpdi0+Y3VycmVudF9jb21tYW5kX29pZCA9IDA7CisJaWYgKHJldCA8IDApCisJCWRldmRiZyhkZXYsICJybmRpc19xdWVyeV9vaWQoJXMpOiBybmRpc19jb21tYW5kKCkgZmFpbGVkLCAlZCAiCisJCQkiKCUwOHgpIiwgb2lkX3RvX3N0cmluZyhvaWQpLCByZXQsCisJCQlsZTMyX3RvX2NwdSh1LmdldF9jLT5zdGF0dXMpKTsKKwogCWlmIChyZXQgPT0gMCkgewogCQlyZXQgPSBsZTMyX3RvX2NwdSh1LmdldF9jLT5sZW4pOwotCQkqbGVuID0gKCpsZW4gPiByZXQpID8gcmV0IDogKmxlbjsKKwkJaWYgKHJldCA+ICpsZW4pCisJCQkqbGVuID0gcmV0OwogCQltZW1jcHkoZGF0YSwgdS5idWYgKyBsZTMyX3RvX2NwdSh1LmdldF9jLT5vZmZzZXQpICsgOCwgKmxlbik7CiAJCXJldCA9IHJuZGlzX2Vycm9yX3N0YXR1cyh1LmdldF9jLT5zdGF0dXMpOworCisJCWlmIChyZXQgPCAwKQorCQkJZGV2ZGJnKGRldiwgInJuZGlzX3F1ZXJ5X29pZCglcyk6IGRldmljZSByZXR1cm5lZCAiCisJCQkJImVycm9yLCAgMHglMDh4ICglZCkiLCBvaWRfdG9fc3RyaW5nKG9pZCksCisJCQkJbGUzMl90b19jcHUodS5nZXRfYy0+c3RhdHVzKSwgcmV0KTsKIAl9CiAKIAltdXRleF91bmxvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7CkBAIC01MjMsNyArNzUyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyBpbnQgcm5kaXNfc2V0X29pZChzdHJ1Y3QgdXNibmV0ICpkZXYsIF9fbGUzMiBvaWQsIHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYoZGV2KTsKQEAgLTU1OCwxMCArNzg2LDIzIEBACiAJdS5zZXQtPmhhbmRsZSA9IGNwdV90b19sZTMyKDApOwogCW1lbWNweSh1LmJ1ZiArIHNpemVvZigqdS5zZXQpLCBkYXRhLCBsZW4pOwogCisJcHJpdi0+Y3VycmVudF9jb21tYW5kX29pZCA9IG9pZDsKIAlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7Ci0JaWYgKHJldCA9PSAwKQorCXByaXYtPmN1cnJlbnRfY29tbWFuZF9vaWQgPSAwOworCWlmIChyZXQgPCAwKQorCQlkZXZkYmcoZGV2LCAicm5kaXNfc2V0X29pZCglcyk6IHJuZGlzX2NvbW1hbmQoKSBmYWlsZWQsICVkICIKKwkJCSIoJTA4eCkiLCBvaWRfdG9fc3RyaW5nKG9pZCksIHJldCwKKwkJCWxlMzJfdG9fY3B1KHUuc2V0X2MtPnN0YXR1cykpOworCisJaWYgKHJldCA9PSAwKSB7CiAJCXJldCA9IHJuZGlzX2Vycm9yX3N0YXR1cyh1LnNldF9jLT5zdGF0dXMpOwogCisJCWlmIChyZXQgPCAwKQorCQkJZGV2ZGJnKGRldiwgInJuZGlzX3NldF9vaWQoJXMpOiBkZXZpY2UgcmV0dXJuZWQgZXJyb3IsICIKKwkJCQkiMHglMDh4ICglZCkiLCBvaWRfdG9fc3RyaW5nKG9pZCksCisJCQkJbGUzMl90b19jcHUodS5zZXRfYy0+c3RhdHVzKSwgcmV0KTsKKwl9CisKIAltdXRleF91bmxvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7CiAKIAlpZiAodS5idWYgIT0gcHJpdi0+Y29tbWFuZF9idWZmZXIpCkBAIC01NjksNiArODEwLDI3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBybmRpc19yZXNldChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwlzdHJ1Y3Qgcm5kaXNfcmVzZXQgKnJlc2V0OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb21tYW5kX2xvY2spOworCisJcmVzZXQgPSAodm9pZCAqKXByaXYtPmNvbW1hbmRfYnVmZmVyOworCW1lbXNldChyZXNldCwgMCwgc2l6ZW9mKCpyZXNldCkpOworCXJlc2V0LT5tc2dfdHlwZSA9IFJORElTX01TR19SRVNFVDsKKwlyZXNldC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZigqcmVzZXQpKTsKKwlwcml2LT5jdXJyZW50X2NvbW1hbmRfb2lkID0gMDsKKwlyZXQgPSBybmRpc19jb21tYW5kKHVzYmRldiwgKHZvaWQgKilyZXNldCwgQ09OVFJPTF9CVUZGRVJfU0laRSk7CisKKwltdXRleF91bmxvY2soJnByaXYtPmNvbW1hbmRfbG9jayk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIFNwZWNzIHNheSB0aGF0IHdlIGNhbiBvbmx5IHNldCBjb25maWcgcGFyYW1ldGVycyBvbmx5IHNvb24gYWZ0ZXIgZGV2aWNlCkBAIC02NTYsMTYgKzkxOCw5IEBACiBzdGF0aWMgaW50IHJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cihzdHJ1Y3QgdXNibmV0ICpkZXYsCiAJCQkJCQljaGFyICpwYXJhbSwgY2hhciAqdmFsdWUpCiB7Ci0JcmV0dXJuKHJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyKGRldiwgcGFyYW0sIDIsIHZhbHVlKSk7CisJcmV0dXJuIHJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyKGRldiwgcGFyYW0sIDIsIHZhbHVlKTsKIH0KIAotLypzdGF0aWMgaW50IHJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3UzMihzdHJ1Y3QgdXNibmV0ICpkZXYsCi0JCQkJCQljaGFyICpwYXJhbSwgdTMyIHZhbHVlKQotewotCXJldHVybihybmRpc19zZXRfY29uZmlnX3BhcmFtZXRlcihkZXYsIHBhcmFtLCAwLCAmdmFsdWUpKTsKLX0qLwotCi0KIC8qCiAgKiBkYXRhIGNvbnZlcnNpb24gZnVuY3Rpb25zCiAgKi8KQEAgLTY3NSw3NSArOTMwLDEyIEBACiAJcmV0dXJuIHF1YWwgPj0gMCA/IChxdWFsIDw9IDEwMCA/IHF1YWwgOiAxMDApIDogMDsKIH0KIAotCi1zdGF0aWMgdm9pZCBkc2NvbmZpZ190b19mcmVxKHVuc2lnbmVkIGludCBkc2NvbmZpZywgc3RydWN0IGl3X2ZyZXEgKmZyZXEpCi17Ci0JZnJlcS0+ZSA9IDA7Ci0JZnJlcS0+aSA9IDA7Ci0JZnJlcS0+ZmxhZ3MgPSAwOwotCi0JLyogc2VlIGNvbW1lbnQgaW4gd2lyZWxlc3MuaCBhYm92ZSB0aGUgInN0cnVjdCBpd19mcmVxIgotCSAqIGRlZmluaXRpb24gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoaXMgaWYKLQkgKiBOT1RFOiAxMDAwMDAwIGlzIGR1ZSB0byB0aGUga0h6Ci0JICovCi0JaWYgKGRzY29uZmlnID4gMTAwMDAwMCkgewotCQlmcmVxLT5tID0gZHNjb25maWcgLyAxMDsKLQkJZnJlcS0+ZSA9IDE7Ci0JfSBlbHNlCi0JCWZyZXEtPm0gPSBkc2NvbmZpZzsKLQotCS8qIGNvbnZlcnQgZnJvbSBrSHogdG8gSHogKi8KLQlmcmVxLT5lICs9IDM7Ci19Ci0KLQotc3RhdGljIGludCBmcmVxX3RvX2RzY29uZmlnKHN0cnVjdCBpd19mcmVxICpmcmVxLCB1bnNpZ25lZCBpbnQgKmRzY29uZmlnKQotewotCWlmIChmcmVxLT5tIDwgMTAwMCAmJiBmcmVxLT5lID09IDApIHsKLQkJaWYgKGZyZXEtPm0gPj0gMSAmJiBmcmVxLT5tIDw9IDE0KQotCQkJKmRzY29uZmlnID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGZyZXEtPm0pICogMTAwMDsKLQkJZWxzZQotCQkJcmV0dXJuIC0xOwotCX0gZWxzZSB7Ci0JCWludCBpOwotCQkqZHNjb25maWcgPSBmcmVxLT5tOwotCQlmb3IgKGkgPSBmcmVxLT5lOyBpID4gMDsgaS0tKQotCQkJKmRzY29uZmlnICo9IDEwOwotCQkqZHNjb25maWcgLz0gMTAwMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiAvKgogICogY29tbW9uIGZ1bmN0aW9ucwogICovCi1zdGF0aWMgaW50Ci1hZGRfd2VwX2tleShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGNoYXIgKmtleSwgaW50IGtleV9sZW4sIGludCBpbmRleCk7Ci0KLXN0YXRpYyBpbnQgZ2V0X2Vzc2lkKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IG5kaXNfODAyMTFfc3NpZCAqc3NpZCkKLXsKLQlpbnQgcmV0LCBsZW47Ci0KLQlsZW4gPSBzaXplb2YoKnNzaWQpOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfU1NJRCwgc3NpZCwgJmxlbik7Ci0KLQlpZiAocmV0ICE9IDApCi0JCXNzaWQtPmxlbmd0aCA9IDA7Ci0KLSNpZmRlZiBERUJVRwotCXsKLQkJdW5zaWduZWQgY2hhciB0bXBbTkRJU184MDJfMTFfTEVOR1RIX1NTSUQgKyAxXTsKLQotCQltZW1jcHkodG1wLCBzc2lkLT5lc3NpZCwgbGUzMl90b19jcHUoc3NpZC0+bGVuZ3RoKSk7Ci0JCXRtcFtsZTMyX3RvX2NwdShzc2lkLT5sZW5ndGgpXSA9IDA7Ci0JCWRldmRiZyh1c2JkZXYsICJnZXRfZXNzaWQ6ICclcycsIHJldDogJWQiLCB0bXAsIHJldCk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHJldDsKLX0KLQorc3RhdGljIGludCBzZXRfaW5mcmFfbW9kZShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGludCBtb2RlKTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfa2V5cyhzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpOworc3RhdGljIGludCBybmRpc19jaGVja19ic3NpZF9saXN0KHN0cnVjdCB1c2JuZXQgKnVzYmRldik7CiAKIHN0YXRpYyBpbnQgc2V0X2Vzc2lkKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IG5kaXNfODAyMTFfc3NpZCAqc3NpZCkKIHsKQEAgLTc1MSwxNSArOTQzLDM4IEBACiAJaW50IHJldDsKIAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX1NTSUQsIHNzaWQsIHNpemVvZigqc3NpZCkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldndhcm4odXNiZGV2LCAic2V0dGluZyBTU0lEIGZhaWxlZCAoJTA4WCkiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAlpZiAocmV0ID09IDApIHsKIAkJbWVtY3B5KCZwcml2LT5lc3NpZCwgc3NpZCwgc2l6ZW9mKHByaXYtPmVzc2lkKSk7Ci0JCXByaXYtPnJhZGlvX29uID0gMTsKLQkJZGV2ZGJnKHVzYmRldiwgInNldF9lc3NpZDogcmFkaW9fb24gPSAxIik7CisJCXByaXYtPnJhZGlvX29uID0gdHJ1ZTsKKwkJZGV2ZGJnKHVzYmRldiwgInNldF9lc3NpZDogcmFkaW9fb24gPSB0cnVlIik7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzZXRfYnNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCB1OCBic3NpZFtFVEhfQUxFTl0pCit7CisJaW50IHJldDsKKworCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0JTU0lELCBic3NpZCwgRVRIX0FMRU4pOworCWlmIChyZXQgPCAwKSB7CisJCWRldndhcm4odXNiZGV2LCAic2V0dGluZyBCU1NJRFslcE1dIGZhaWxlZCAoJTA4WCkiLCBic3NpZCwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNsZWFyX2Jzc2lkKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwl1OCBicm9hZGNhc3RfbWFjW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKKworCXJldHVybiBzZXRfYnNzaWQodXNiZGV2LCBicm9hZGNhc3RfbWFjKTsKK30KIAogc3RhdGljIGludCBnZXRfYnNzaWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCB1OCBic3NpZFtFVEhfQUxFTl0pCiB7CkBAIC03ODEsMTggKzk5NiwyMSBAQAogCQkJCWluZm8sICZsZW4pOwogfQogCi1zdGF0aWMgaW50IGlzX2Fzc29jaWF0ZWQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQorc3RhdGljIGJvb2wgaXNfYXNzb2NpYXRlZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJaW50IHJldDsKIAorCWlmICghcHJpdi0+cmFkaW9fb24pCisJCXJldHVybiBmYWxzZTsKKwogCXJldCA9IGdldF9ic3NpZCh1c2JkZXYsIGJzc2lkKTsKIAotCXJldHVybihyZXQgPT0gMCAmJiBtZW1jbXAoYnNzaWQsIHplcm9fYnNzaWQsIEVUSF9BTEVOKSAhPSAwKTsKKwlyZXR1cm4gKHJldCA9PSAwICYmICFpc196ZXJvX2V0aGVyX2FkZHIoYnNzaWQpKTsKIH0KIAotCi1zdGF0aWMgaW50IGRpc2Fzc29jaWF0ZShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGludCByZXNldF9zc2lkKQorc3RhdGljIGludCBkaXNhc3NvY2lhdGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBib29sIHJlc2V0X3NzaWQpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAlzdHJ1Y3QgbmRpc184MDIxMV9zc2lkIHNzaWQ7CkBAIC04MDEsOCArMTAxOSw4IEBACiAJaWYgKHByaXYtPnJhZGlvX29uKSB7CiAJCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0RJU0FTU09DSUFURSwgTlVMTCwgMCk7CiAJCWlmIChyZXQgPT0gMCkgewotCQkJcHJpdi0+cmFkaW9fb24gPSAwOwotCQkJZGV2ZGJnKHVzYmRldiwgImRpc2Fzc29jaWF0ZTogcmFkaW9fb24gPSAwIik7CisJCQlwcml2LT5yYWRpb19vbiA9IGZhbHNlOworCQkJZGV2ZGJnKHVzYmRldiwgImRpc2Fzc29jaWF0ZTogcmFkaW9fb24gPSBmYWxzZSIpOwogCiAJCQlpZiAocmVzZXRfc3NpZCkKIAkJCQltc2xlZXAoMTAwKTsKQEAgLTgxMiw2ICsxMDMwLDExIEBACiAJLyogZGlzYXNzb2NpYXRlIGNhdXNlcyByYWRpbyB0byBiZSB0dXJuZWQgb2ZmOyBpZiByZXNldF9zc2lkCiAJICogaXMgZ2l2ZW4sIHNldCByYW5kb20gc3NpZCB0byBlbmFibGUgcmFkaW8gKi8KIAlpZiAocmVzZXRfc3NpZCkgeworCQkvKiBTZXQgZGV2aWNlIHRvIGluZnJhc3RydWN0dXJlIG1vZGUgc28gd2UgZG9uJ3QgZ2V0IGFkLWhvYworCQkgKiAnbWVkaWEgY29ubmVjdCcgaW5kaWNhdGlvbnMgd2l0aCB0aGUgcmFuZG9tIHNzaWQuCisJCSAqLworCQlzZXRfaW5mcmFfbW9kZSh1c2JkZXYsIE5ESVNfODAyMTFfSU5GUkFfSU5GUkEpOworCiAJCXNzaWQubGVuZ3RoID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHNzaWQuZXNzaWQpKTsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmc3NpZC5lc3NpZFsyXSwgc2l6ZW9mKHNzaWQuZXNzaWQpLTIpOwogCQlzc2lkLmVzc2lkWzBdID0gMHgxOwpAQCAtODIzLDM1ICsxMDQ2LDM0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgaW50IHNldF9hdXRoX21vZGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgd3BhX3ZlcnNpb24sIGludCBhdXRoYWxnKQorc3RhdGljIGludCBzZXRfYXV0aF9tb2RlKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgdTMyIHdwYV92ZXJzaW9uLAorCQkJCWVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlLCBpbnQga2V5bWdtdCkKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCV9fbGUzMiB0bXA7CiAJaW50IGF1dGhfbW9kZSwgcmV0OwogCiAJZGV2ZGJnKHVzYmRldiwgInNldF9hdXRoX21vZGU6IHdwYV92ZXJzaW9uPTB4JXggYXV0aGFsZz0weCV4ICIKLQkJImtleW1nbXQ9MHgleCIsIHdwYV92ZXJzaW9uLCBhdXRoYWxnLCBwcml2LT53cGFfa2V5bWdtdCk7CisJCSJrZXltZ210PTB4JXgiLCB3cGFfdmVyc2lvbiwgYXV0aF90eXBlLCBrZXltZ210KTsKIAotCWlmICh3cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikgewotCQlpZiAocHJpdi0+d3BhX2tleW1nbXQgJiBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCkKKwlpZiAod3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzIpIHsKKwkJaWYgKGtleW1nbXQgJiBSTkRJU19XTEFOX0tFWV9NR01UXzgwMl8xWCkKIAkJCWF1dGhfbW9kZSA9IE5ESVNfODAyMTFfQVVUSF9XUEEyOwogCQllbHNlCiAJCQlhdXRoX21vZGUgPSBORElTXzgwMjExX0FVVEhfV1BBMl9QU0s7Ci0JfSBlbHNlIGlmICh3cGFfdmVyc2lvbiAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKSB7Ci0JCWlmIChwcml2LT53cGFfa2V5bWdtdCAmIElXX0FVVEhfS0VZX01HTVRfODAyXzFYKQorCX0gZWxzZSBpZiAod3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzEpIHsKKwkJaWYgKGtleW1nbXQgJiBSTkRJU19XTEFOX0tFWV9NR01UXzgwMl8xWCkKIAkJCWF1dGhfbW9kZSA9IE5ESVNfODAyMTFfQVVUSF9XUEE7Ci0JCWVsc2UgaWYgKHByaXYtPndwYV9rZXltZ210ICYgSVdfQVVUSF9LRVlfTUdNVF9QU0spCisJCWVsc2UgaWYgKGtleW1nbXQgJiBSTkRJU19XTEFOX0tFWV9NR01UX1BTSykKIAkJCWF1dGhfbW9kZSA9IE5ESVNfODAyMTFfQVVUSF9XUEFfUFNLOwogCQllbHNlCiAJCQlhdXRoX21vZGUgPSBORElTXzgwMjExX0FVVEhfV1BBX05PTkU7Ci0JfSBlbHNlIGlmIChhdXRoYWxnICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkgewotCQlpZiAoYXV0aGFsZyAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKQotCQkJYXV0aF9tb2RlID0gTkRJU184MDIxMV9BVVRIX0FVVE9fU1dJVENIOwotCQllbHNlCi0JCQlhdXRoX21vZGUgPSBORElTXzgwMjExX0FVVEhfU0hBUkVEOwotCX0gZWxzZQorCX0gZWxzZSBpZiAoYXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWSkKKwkJYXV0aF9tb2RlID0gTkRJU184MDIxMV9BVVRIX1NIQVJFRDsKKwllbHNlIGlmIChhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTSkKIAkJYXV0aF9tb2RlID0gTkRJU184MDIxMV9BVVRIX09QRU47CisJZWxzZQorCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJdG1wID0gY3B1X3RvX2xlMzIoYXV0aF9tb2RlKTsKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFLCAmdG1wLApAQCAtODYyLDExICsxMDg0LDEyIEBACiAJfQogCiAJcHJpdi0+d3BhX3ZlcnNpb24gPSB3cGFfdmVyc2lvbjsKLQlwcml2LT53cGFfYXV0aGFsZyA9IGF1dGhhbGc7CisJcHJpdi0+d3BhX2F1dGhfdHlwZSA9IGF1dGhfdHlwZTsKKwlwcml2LT53cGFfa2V5bWdtdCA9IGtleW1nbXQ7CisKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IHNldF9wcml2X2ZpbHRlcihzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKQEAgLTg3NCw4ICsxMDk3LDggQEAKIAogCWRldmRiZyh1c2JkZXYsICJzZXRfcHJpdl9maWx0ZXI6IHdwYV92ZXJzaW9uPTB4JXgiLCBwcml2LT53cGFfdmVyc2lvbik7CiAKLQlpZiAocHJpdi0+d3BhX3ZlcnNpb24gJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIgfHwKLQkgICAgcHJpdi0+d3BhX3ZlcnNpb24gJiBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSkKKwlpZiAocHJpdi0+d3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzIgfHwKKwkgICAgcHJpdi0+d3BhX3ZlcnNpb24gJiBOTDgwMjExX1dQQV9WRVJTSU9OXzEpCiAJCXRtcCA9IGNwdV90b19sZTMyKE5ESVNfODAyMTFfUFJJVl84MDIxWF9XRVApOwogCWVsc2UKIAkJdG1wID0gY3B1X3RvX2xlMzIoTkRJU184MDIxMV9QUklWX0FDQ0VQVF9BTEwpOwpAQCAtODg0LDcgKzExMDcsNiBAQAogCQkJCQkJCQlzaXplb2YodG1wKSk7CiB9CiAKLQogc3RhdGljIGludCBzZXRfZW5jcl9tb2RlKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IHBhaXJ3aXNlLCBpbnQgZ3JvdXB3aXNlKQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CkBAIC04OTIsMTkgKzExMTQsMTcgQEAKIAlpbnQgZW5jcl9tb2RlLCByZXQ7CiAKIAlkZXZkYmcodXNiZGV2LCAic2V0X2VuY3JfbW9kZTogY2lwaGVyX3BhaXI9MHgleCBjaXBoZXJfZ3JvdXA9MHgleCIsCi0JCXBhaXJ3aXNlLAotCQlncm91cHdpc2UpOworCQlwYWlyd2lzZSwgZ3JvdXB3aXNlKTsKIAotCWlmIChwYWlyd2lzZSAmIElXX0FVVEhfQ0lQSEVSX0NDTVApCisJaWYgKHBhaXJ3aXNlICYgUk5ESVNfV0xBTl9BTEdfQ0NNUCkKIAkJZW5jcl9tb2RlID0gTkRJU184MDIxMV9FTkNSX0NDTVBfRU5BQkxFRDsKLQllbHNlIGlmIChwYWlyd2lzZSAmIElXX0FVVEhfQ0lQSEVSX1RLSVApCisJZWxzZSBpZiAocGFpcndpc2UgJiBSTkRJU19XTEFOX0FMR19US0lQKQogCQllbmNyX21vZGUgPSBORElTXzgwMjExX0VOQ1JfVEtJUF9FTkFCTEVEOwotCWVsc2UgaWYgKHBhaXJ3aXNlICYKLQkJIChJV19BVVRIX0NJUEhFUl9XRVA0MCB8IElXX0FVVEhfQ0lQSEVSX1dFUDEwNCkpCisJZWxzZSBpZiAocGFpcndpc2UgJiBSTkRJU19XTEFOX0FMR19XRVApCiAJCWVuY3JfbW9kZSA9IE5ESVNfODAyMTFfRU5DUl9XRVBfRU5BQkxFRDsKLQllbHNlIGlmIChncm91cHdpc2UgJiBJV19BVVRIX0NJUEhFUl9DQ01QKQorCWVsc2UgaWYgKGdyb3Vwd2lzZSAmIFJORElTX1dMQU5fQUxHX0NDTVApCiAJCWVuY3JfbW9kZSA9IE5ESVNfODAyMTFfRU5DUl9DQ01QX0VOQUJMRUQ7Ci0JZWxzZSBpZiAoZ3JvdXB3aXNlICYgSVdfQVVUSF9DSVBIRVJfVEtJUCkKKwllbHNlIGlmIChncm91cHdpc2UgJiBSTkRJU19XTEFOX0FMR19US0lQKQogCQllbmNyX21vZGUgPSBORElTXzgwMjExX0VOQ1JfVEtJUF9FTkFCTEVEOwogCWVsc2UKIAkJZW5jcl9tb2RlID0gTkRJU184MDIxMV9FTkNSX0RJU0FCTEVEOwpAQCAtOTIyLDI0ICsxMTQyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBzZXRfYXNzb2NfcGFyYW1zKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKLXsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCi0Jc2V0X2F1dGhfbW9kZSh1c2JkZXYsIHByaXYtPndwYV92ZXJzaW9uLCBwcml2LT53cGFfYXV0aGFsZyk7Ci0Jc2V0X3ByaXZfZmlsdGVyKHVzYmRldik7Ci0Jc2V0X2VuY3JfbW9kZSh1c2JkZXYsIHByaXYtPndwYV9jaXBoZXJfcGFpciwgcHJpdi0+d3BhX2NpcGhlcl9ncm91cCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHNldF9pbmZyYV9tb2RlKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IG1vZGUpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAlfX2xlMzIgdG1wOwotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCWRldmRiZyh1c2JkZXYsICJzZXRfaW5mcmFfbW9kZTogaW5mcmFfbW9kZT0weCV4IiwgcHJpdi0+aW5mcmFfbW9kZSk7CiAKQEAgLTk1NCw1NSArMTE2MSwxMDcgQEAKIAkvKiBORElTIGRyaXZlcnMgY2xlYXIga2V5cyB3aGVuIGluZnJhc3RydWN0dXJlIG1vZGUgaXMKIAkgKiBjaGFuZ2VkLiBCdXQgTGludXggdG9vbHMgYXNzdW1lIG90aGVyd2lzZS4gU28gc2V0IHRoZQogCSAqIGtleXMgKi8KLQlpZiAocHJpdi0+d3BhX2tleW1nbXQgPT0gMCB8fAotCQlwcml2LT53cGFfa2V5bWdtdCA9PSBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCkgewotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCQlpZiAocHJpdi0+ZW5jcl9rZXlfbGVuW2ldID4gMCAmJiAhcHJpdi0+ZW5jcl9rZXlfd3BhW2ldKQotCQkJCWFkZF93ZXBfa2V5KHVzYmRldiwgcHJpdi0+ZW5jcl9rZXlzW2ldLAotCQkJCQkJcHJpdi0+ZW5jcl9rZXlfbGVuW2ldLCBpKTsKLQkJfQotCX0KKwlyZXN0b3JlX2tleXModXNiZGV2KTsKIAogCXByaXYtPmluZnJhX21vZGUgPSBtb2RlOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNldF9ydHNfdGhyZXNob2xkKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgdTMyIHJ0c190aHJlc2hvbGQpCit7CisJX19sZTMyIHRtcDsKKworCWRldmRiZyh1c2JkZXYsICJzZXRfcnRzX3RocmVzaG9sZCAlaSIsIHJ0c190aHJlc2hvbGQpOworCisJaWYgKHJ0c190aHJlc2hvbGQgPCAwIHx8IHJ0c190aHJlc2hvbGQgPiAyMzQ3KQorCQlydHNfdGhyZXNob2xkID0gMjM0NzsKKworCXRtcCA9IGNwdV90b19sZTMyKHJ0c190aHJlc2hvbGQpOworCXJldHVybiBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xELCAmdG1wLAorCQkJCQkJCQlzaXplb2YodG1wKSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2ZyYWdfdGhyZXNob2xkKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgdTMyIGZyYWdfdGhyZXNob2xkKQoreworCV9fbGUzMiB0bXA7CisKKwlkZXZkYmcodXNiZGV2LCAic2V0X2ZyYWdfdGhyZXNob2xkICVpIiwgZnJhZ190aHJlc2hvbGQpOworCisJaWYgKGZyYWdfdGhyZXNob2xkIDwgMjU2IHx8IGZyYWdfdGhyZXNob2xkID4gMjM0NikKKwkJZnJhZ190aHJlc2hvbGQgPSAyMzQ2OworCisJdG1wID0gY3B1X3RvX2xlMzIoZnJhZ190aHJlc2hvbGQpOworCXJldHVybiBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCwgJnRtcCwKKwkJCQkJCQkJc2l6ZW9mKHRtcCkpOworfQogCiBzdGF0aWMgdm9pZCBzZXRfZGVmYXVsdF9pd19wYXJhbXMoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0KLQlwcml2LT53cGFfa2V5bWdtdCA9IDA7Ci0JcHJpdi0+d3BhX3ZlcnNpb24gPSAwOwotCiAJc2V0X2luZnJhX21vZGUodXNiZGV2LCBORElTXzgwMjExX0lORlJBX0lORlJBKTsKLQlzZXRfYXV0aF9tb2RlKHVzYmRldiwgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCwKLQkJCQlJV19BVVRIX0FMR19PUEVOX1NZU1RFTSk7CisJc2V0X2F1dGhfbW9kZSh1c2JkZXYsIDAsIE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU0sCisJCQkJCQlSTkRJU19XTEFOX0tFWV9NR01UX05PTkUpOwogCXNldF9wcml2X2ZpbHRlcih1c2JkZXYpOwotCXNldF9lbmNyX21vZGUodXNiZGV2LCBJV19BVVRIX0NJUEhFUl9OT05FLCBJV19BVVRIX0NJUEhFUl9OT05FKTsKKwlzZXRfZW5jcl9tb2RlKHVzYmRldiwgUk5ESVNfV0xBTl9BTEdfTk9ORSwgUk5ESVNfV0xBTl9BTEdfTk9ORSk7CiB9CiAKLQogc3RhdGljIGludCBkZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IGRpc2Fzc29jaWF0ZSh1c2JkZXYsIDEpOworCXJldCA9IGRpc2Fzc29jaWF0ZSh1c2JkZXYsIHRydWUpOwogCXNldF9kZWZhdWx0X2l3X3BhcmFtcyh1c2JkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X2NoYW5uZWwoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgbmRpc184MDIxMV9jb25mIGNvbmZpZzsKKwl1bnNpZ25lZCBpbnQgZHNjb25maWc7CisJaW50IGxlbiwgcmV0OworCisJZGV2ZGJnKHVzYmRldiwgInNldF9jaGFubmVsKCVkKSIsIGNoYW5uZWwpOworCisJLyogdGhpcyBPSUQgaXMgdmFsaWQgb25seSB3aGVuIG5vdCBhc3NvY2lhdGVkICovCisJaWYgKGlzX2Fzc29jaWF0ZWQodXNiZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlkc2NvbmZpZyA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKSAqIDEwMDA7CisKKwlsZW4gPSBzaXplb2YoY29uZmlnKTsKKwlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX0NPTkZJR1VSQVRJT04sICZjb25maWcsICZsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCWRldmRiZyh1c2JkZXYsICJzZXRfY2hhbm5lbDogcXVlcnlpbmcgY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb25maWcuZHNfY29uZmlnID0gY3B1X3RvX2xlMzIoZHNjb25maWcpOworCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0NPTkZJR1VSQVRJT04sICZjb25maWcsCisJCQkJCQkJCXNpemVvZihjb25maWcpKTsKKworCWRldmRiZyh1c2JkZXYsICJzZXRfY2hhbm5lbDogJWQgLT4gJWQiLCBjaGFubmVsLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KIAogLyogaW5kZXggbXVzdCBiZSAwIC0gTiwgYXMgcGVyIE5ESVMgICovCi1zdGF0aWMgaW50IGFkZF93ZXBfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwgaW50IGluZGV4KQorc3RhdGljIGludCBhZGRfd2VwX2tleShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGNvbnN0IHU4ICprZXksIGludCBrZXlfbGVuLAorCQkJCQkJCQlpbnQgaW5kZXgpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAlzdHJ1Y3QgbmRpc184MDIxMV93ZXBfa2V5IG5kaXNfa2V5OworCXUzMiBjaXBoZXI7CiAJaW50IHJldDsKIAotCWlmIChrZXlfbGVuIDw9IDAgfHwga2V5X2xlbiA+IDMyIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSA0KQorCWRldmRiZyh1c2JkZXYsICJhZGRfd2VwX2tleShpZHg6ICVkLCBsZW46ICVkKSIsIGluZGV4LCBrZXlfbGVuKTsKKworCWlmICgoa2V5X2xlbiAhPSA1ICYmIGtleV9sZW4gIT0gMTMpIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+IDMpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGtleV9sZW4gPT0gNSkKKwkJY2lwaGVyID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJZWxzZQorCQljaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisKIAltZW1zZXQoJm5kaXNfa2V5LCAwLCBzaXplb2YobmRpc19rZXkpKTsKIAogCW5kaXNfa2V5LnNpemUgPSBjcHVfdG9fbGUzMihzaXplb2YobmRpc19rZXkpKTsKQEAgLTEwMTIsOCArMTI3MSw4IEBACiAKIAlpZiAoaW5kZXggPT0gcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXgpIHsKIAkJbmRpc19rZXkuaW5kZXggfD0gTkRJU184MDIxMV9BRERXRVBfVFJBTlNNSVRfS0VZOwotCQlyZXQgPSBzZXRfZW5jcl9tb2RlKHVzYmRldiwgSVdfQVVUSF9DSVBIRVJfV0VQMTA0LAotCQkJCQkJSVdfQVVUSF9DSVBIRVJfTk9ORSk7CisJCXJldCA9IHNldF9lbmNyX21vZGUodXNiZGV2LCBSTkRJU19XTEFOX0FMR19XRVAsCisJCQkJCQkJUk5ESVNfV0xBTl9BTEdfTk9ORSk7CiAJCWlmIChyZXQpCiAJCQlkZXZ3YXJuKHVzYmRldiwgImVuY3J5cHRpb24gY291bGRuJ3QgYmUgZW5hYmxlZCAoJTA4WCkiLAogCQkJCQkJCQkJcmV0KTsKQEAgLTEwMjcsMzAgKzEyODYsNTEgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwcml2LT5lbmNyX2tleV9sZW5baW5kZXhdID0ga2V5X2xlbjsKLQlwcml2LT5lbmNyX2tleV93cGFbaW5kZXhdID0gMDsKLQltZW1jcHkoJnByaXYtPmVuY3Jfa2V5c1tpbmRleF0sIGtleSwga2V5X2xlbik7CisJcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5sZW4gPSBrZXlfbGVuOworCXByaXYtPmVuY3Jfa2V5c1tpbmRleF0uY2lwaGVyID0gY2lwaGVyOworCW1lbWNweSgmcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5tYXRlcmlhbCwga2V5LCBrZXlfbGVuKTsKKwltZW1zZXQoJnByaXYtPmVuY3Jfa2V5c1tpbmRleF0uYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKIAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgYWRkX3dwYV9rZXkoc3RydWN0IHVzYm5ldCAqdXNiZGV2LCBjb25zdCB1OCAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCWludCBpbmRleCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJY29uc3QgdTggKnJ4X3NlcSwgaW50IGFsZywgaW50IGZsYWdzKQorCQkJaW50IGluZGV4LCBjb25zdCB1OCAqYWRkciwgY29uc3QgdTggKnJ4X3NlcSwKKwkJCWludCBzZXFfbGVuLCB1MzIgY2lwaGVyLCBfX2xlMzIgZmxhZ3MpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAlzdHJ1Y3QgbmRpc184MDIxMV9rZXkgbmRpc19rZXk7CisJYm9vbCBpc19hZGRyX29rOwogCWludCByZXQ7CiAKLQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IDQpCisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSA0KSB7CisJCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleTogaW5kZXggb3V0IG9mIHJhbmdlICglaSkiLCBpbmRleCk7CiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChrZXlfbGVuID4gc2l6ZW9mKG5kaXNfa2V5Lm1hdGVyaWFsKSB8fCBrZXlfbGVuIDwgMCkKKwl9CisJaWYgKGtleV9sZW4gPiBzaXplb2YobmRpc19rZXkubWF0ZXJpYWwpIHx8IGtleV9sZW4gPCAwKSB7CisJCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleToga2V5IGxlbmd0aCBvdXQgb2YgcmFuZ2UgKCVpKSIsCisJCQlrZXlfbGVuKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKChmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VRKSAmJiAhcnhfc2VxKQorCX0KKwlpZiAoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9TRVRfSU5JVF9SRUNWX1NFUSkgeworCQlpZiAoIXJ4X3NlcSB8fCBzZXFfbGVuIDw9IDApIHsKKwkJCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleTogcmVjdiBzZXEgZmxhZyB3aXRob3V0IgorCQkJCQkiYnVmZmVyIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocnhfc2VxICYmIHNlcV9sZW4gPiBzaXplb2YobmRpc19rZXkucnNjKSkgeworCQkJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5OiB0b28gYmlnIHJlY3Ygc2VxIGJ1ZmZlciIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpc19hZGRyX29rID0gYWRkciAmJiAhaXNfemVyb19ldGhlcl9hZGRyKGFkZHIpICYmCisJCQkJCSFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKTsKKwlpZiAoKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZKSAmJiAhaXNfYWRkcl9vaykgeworCQlkZXZkYmcodXNiZGV2LCAiYWRkX3dwYV9rZXk6IHBhaXJ3aXNlIGJ1dCBic3NpZCBpbnZhbGlkICglcE0pIiwKKwkJCWFkZHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZKSAmJiAhYWRkcikKLQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5KCVpKTogZmxhZ3M6JWklaSVpIiwgaW5kZXgsCiAJCQkhIShmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1RSQU5TTUlUX0tFWSksCkBAIC0xMDY0LDcgKzEzNDQsNyBAQAogCW5kaXNfa2V5Lmxlbmd0aCA9IGNwdV90b19sZTMyKGtleV9sZW4pOwogCW5kaXNfa2V5LmluZGV4ID0gY3B1X3RvX2xlMzIoaW5kZXgpIHwgZmxhZ3M7CiAKLQlpZiAoYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCAmJiBrZXlfbGVuID09IDMyKSB7CisJaWYgKGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQICYmIGtleV9sZW4gPT0gMzIpIHsKIAkJLyogd3BhX3N1cHBsaWNhbnQgZ2l2ZXMgdXMgdGhlIE1pY2hhZWwgTUlDIFJYL1RYIGtleXMgaW4KIAkJICogZGlmZmVyZW50IG9yZGVyIHRoYW4gTkRJUyBzcGVjLCBzbyBzd2FwIHRoZSBvcmRlciBoZXJlLiAqLwogCQltZW1jcHkobmRpc19rZXkubWF0ZXJpYWwsIGtleSwgMTYpOwpAQCAtMTA3NCwxMSArMTM1NCwxMSBAQAogCQltZW1jcHkobmRpc19rZXkubWF0ZXJpYWwsIGtleSwga2V5X2xlbik7CiAKIAlpZiAoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9TRVRfSU5JVF9SRUNWX1NFUSkKLQkJbWVtY3B5KG5kaXNfa2V5LnJzYywgcnhfc2VxLCA2KTsKKwkJbWVtY3B5KG5kaXNfa2V5LnJzYywgcnhfc2VxLCBzZXFfbGVuKTsKIAogCWlmIChmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1BBSVJXSVNFX0tFWSkgewogCQkvKiBwYWlyd2lzZSBrZXkgKi8KLQkJbWVtY3B5KG5kaXNfa2V5LmJzc2lkLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJCW1lbWNweShuZGlzX2tleS5ic3NpZCwgYWRkciwgRVRIX0FMRU4pOwogCX0gZWxzZSB7CiAJCS8qIGdyb3VwIGtleSAqLwogCQlpZiAocHJpdi0+aW5mcmFfbW9kZSA9PSBORElTXzgwMjExX0lORlJBX0FESE9DKQpAQCAtMTA5Myw4ICsxMzczLDE0IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcHJpdi0+ZW5jcl9rZXlfbGVuW2luZGV4XSA9IGtleV9sZW47Ci0JcHJpdi0+ZW5jcl9rZXlfd3BhW2luZGV4XSA9IDE7CisJbWVtc2V0KCZwcml2LT5lbmNyX2tleXNbaW5kZXhdLCAwLCBzaXplb2YocHJpdi0+ZW5jcl9rZXlzW2luZGV4XSkpOworCXByaXYtPmVuY3Jfa2V5c1tpbmRleF0ubGVuID0ga2V5X2xlbjsKKwlwcml2LT5lbmNyX2tleXNbaW5kZXhdLmNpcGhlciA9IGNpcGhlcjsKKwltZW1jcHkoJnByaXYtPmVuY3Jfa2V5c1tpbmRleF0ubWF0ZXJpYWwsIGtleSwga2V5X2xlbik7CisJaWYgKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZKQorCQltZW1jcHkoJnByaXYtPmVuY3Jfa2V5c1tpbmRleF0uYnNzaWQsIG5kaXNfa2V5LmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1zZXQoJnByaXYtPmVuY3Jfa2V5c1tpbmRleF0uYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKIAogCWlmIChmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1RSQU5TTUlUX0tFWSkKIAkJcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXggPSBpbmRleDsKQEAgLTExMDIsMzEgKzEzODgsNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCByZXN0b3JlX2tleShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGludCBrZXlfaWR4KQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CisJc3RydWN0IHJuZGlzX3dsYW5fZW5jcl9rZXkga2V5OworCisJaWYgKGlzX3dwYV9rZXkocHJpdiwga2V5X2lkeCkpCisJCXJldHVybiAwOworCisJa2V5ID0gcHJpdi0+ZW5jcl9rZXlzW2tleV9pZHhdOworCisJZGV2ZGJnKHVzYmRldiwgInJlc3RvcmVfa2V5OiAlaTolaSIsIGtleV9pZHgsIGtleS5sZW4pOworCisJaWYgKGtleS5sZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gYWRkX3dlcF9rZXkodXNiZGV2LCBrZXkubWF0ZXJpYWwsIGtleS5sZW4sIGtleV9pZHgpOworfQorCitzdGF0aWMgdm9pZCByZXN0b3JlX2tleXMoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcmVzdG9yZV9rZXkodXNiZGV2LCBpKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfa2V5KHN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYsIGludCBpZHgpCit7CisJbWVtc2V0KCZwcml2LT5lbmNyX2tleXNbaWR4XSwgMCwgc2l6ZW9mKHByaXYtPmVuY3Jfa2V5c1tpZHhdKSk7Cit9CiAKIC8qIHJlbW92ZV9rZXkgaXMgZm9yIGJvdGggd2VwIGFuZCB3cGEgKi8KLXN0YXRpYyBpbnQgcmVtb3ZlX2tleShzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIGludCBpbmRleCwgdTggYnNzaWRbRVRIX0FMRU5dKQorc3RhdGljIGludCByZW1vdmVfa2V5KHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IGluZGV4LCBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAlzdHJ1Y3QgbmRpc184MDIxMV9yZW1vdmVfa2V5IHJlbW92ZV9rZXk7CiAJX19sZTMyIGtleWluZGV4OworCWJvb2wgaXNfd3BhOwogCWludCByZXQ7CiAKLQlpZiAocHJpdi0+ZW5jcl9rZXlfbGVuW2luZGV4XSA9PSAwKQorCWlmIChwcml2LT5lbmNyX2tleXNbaW5kZXhdLmxlbiA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXByaXYtPmVuY3Jfa2V5X2xlbltpbmRleF0gPSAwOwotCXByaXYtPmVuY3Jfa2V5X3dwYVtpbmRleF0gPSAwOwotCW1lbXNldCgmcHJpdi0+ZW5jcl9rZXlzW2luZGV4XSwgMCwgc2l6ZW9mKHByaXYtPmVuY3Jfa2V5c1tpbmRleF0pKTsKKwlpc193cGEgPSBpc193cGFfa2V5KHByaXYsIGluZGV4KTsKIAotCWlmIChwcml2LT53cGFfY2lwaGVyX3BhaXIgPT0gSVdfQVVUSF9DSVBIRVJfVEtJUCB8fAotCSAgICBwcml2LT53cGFfY2lwaGVyX3BhaXIgPT0gSVdfQVVUSF9DSVBIRVJfQ0NNUCB8fAotCSAgICBwcml2LT53cGFfY2lwaGVyX2dyb3VwID09IElXX0FVVEhfQ0lQSEVSX1RLSVAgfHwKLQkgICAgcHJpdi0+d3BhX2NpcGhlcl9ncm91cCA9PSBJV19BVVRIX0NJUEhFUl9DQ01QKSB7CisJZGV2ZGJnKHVzYmRldiwgInJlbW92ZV9rZXk6ICVpOiVzOiVpIiwgaW5kZXgsIGlzX3dwYSA/ICJ3cGEiIDogIndlcCIsCisJCXByaXYtPmVuY3Jfa2V5c1tpbmRleF0ubGVuKTsKKworCWNsZWFyX2tleShwcml2LCBpbmRleCk7CisKKwlpZiAoaXNfd3BhKSB7CiAJCXJlbW92ZV9rZXkuc2l6ZSA9IGNwdV90b19sZTMyKHNpemVvZihyZW1vdmVfa2V5KSk7CiAJCXJlbW92ZV9rZXkuaW5kZXggPSBjcHVfdG9fbGUzMihpbmRleCk7CiAJCWlmIChic3NpZCkgewogCQkJLyogcGFpcndpc2Uga2V5ICovCi0JCQlpZiAobWVtY21wKGJzc2lkLCBmZmZmX2Jzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkJCWlmICghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYnNzaWQpKQogCQkJCXJlbW92ZV9rZXkuaW5kZXggfD0KIAkJCQkJTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZOwogCQkJbWVtY3B5KHJlbW92ZV9rZXkuYnNzaWQsIGJzc2lkLApAQCAtMTE1MywxMiArMTQ3MCwxMSBAQAogCiAJLyogaWYgaXQgaXMgdHJhbnNtaXQga2V5LCBkaXNhYmxlIGVuY3J5cHRpb24gKi8KIAlpZiAoaW5kZXggPT0gcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXgpCi0JCXNldF9lbmNyX21vZGUodXNiZGV2LCBJV19BVVRIX0NJUEhFUl9OT05FLCBJV19BVVRIX0NJUEhFUl9OT05FKTsKKwkJc2V0X2VuY3JfbW9kZSh1c2JkZXYsIFJORElTX1dMQU5fQUxHX05PTkUsIFJORElTX1dMQU5fQUxHX05PTkUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwpAQCAtMTIxOCwyNCArMTUzNCwxOCBAQAogCQkJCQkJbGUzMl90b19jcHUoZmlsdGVyKSwgcmV0KTsKIH0KIAotCiAvKgogICogY2ZnODAyMTEgb3BzCiAgKi8KLXN0YXRpYyBpbnQgcm5kaXNfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBpbnQgaWZpbmRleCwKK3N0YXRpYyBpbnQgcm5kaXNfY2hhbmdlX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJCXN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXY7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKIAlpbnQgbW9kZTsKIAotCS8qIHdlJ3JlIHVuZGVyIFJUTkwgKi8KLQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCW1vZGUgPSBORElTXzgwMjExX0lORlJBX0FESE9DOwpAQCAtMTI0NywxMSArMTU1Nyw2NyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlwcml2LT53ZGV2LmlmdHlwZSA9IHR5cGU7CisKIAlyZXR1cm4gc2V0X2luZnJhX21vZGUodXNiZGV2LCBtb2RlKTsKIH0KIAorc3RhdGljIGludCBybmRpc19zZXRfd2lwaHlfcGFyYW1zKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJaW50IGVycjsKIAotI2RlZmluZSBTQ0FOX0RFTEFZX0pJRkZJRVMgKEhaKQorCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fRlJBR19USFJFU0hPTEQpIHsKKwkJZXJyID0gc2V0X2ZyYWdfdGhyZXNob2xkKHVzYmRldiwgd2lwaHktPmZyYWdfdGhyZXNob2xkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCkgeworCQllcnIgPSBzZXRfcnRzX3RocmVzaG9sZCh1c2JkZXYsIHdpcGh5LT5ydHNfdGhyZXNob2xkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJuZGlzX3NldF90eF9wb3dlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHR4X3Bvd2VyX3NldHRpbmcgdHlwZSwKKwkJCQlpbnQgZGJtKQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisKKwlkZXZkYmcodXNiZGV2LCAicm5kaXNfc2V0X3R4X3Bvd2VyIHR5cGU6MHgleCBkYm06JWkiLCB0eXBlLCBkYm0pOworCisJLyogRGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBjaGFuZ2luZyB0eHBvd2VyIGFmdGVyIGluaXRpYWxpemF0aW9uLCBvbmx5CisJICogdHVybiBvZmYvb24gcmFkaW8uIFN1cHBvcnQgJ2F1dG8nIG1vZGUgYW5kIHNldHRpbmcgc2FtZSBkQm0gdGhhdCBpcworCSAqIGN1cnJlbnRseSB1c2VkLgorCSAqLworCWlmICh0eXBlID09IFRYX1BPV0VSX0FVVE9NQVRJQyB8fCBkYm0gPT0gZ2V0X2JjbTQzMjBfcG93ZXJfZGJtKHByaXYpKSB7CisJCWlmICghcHJpdi0+cmFkaW9fb24pCisJCQlkaXNhc3NvY2lhdGUodXNiZGV2LCB0cnVlKTsgLyogdHVybiBvbiByYWRpbyAqLworCisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgcm5kaXNfZ2V0X3R4X3Bvd2VyKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCAqZGJtKQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisKKwkqZGJtID0gZ2V0X2JjbTQzMjBfcG93ZXJfZGJtKHByaXYpOworCisJZGV2ZGJnKHVzYmRldiwgInJuZGlzX2dldF90eF9wb3dlciBkYm06JWkiLCAqZGJtKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFNDQU5fREVMQVlfSklGRklFUyAoNiAqIEhaKQogc3RhdGljIGludCBybmRpc19zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXF1ZXN0KQogewpAQCAtMTI2Miw2ICsxNjI4LDExIEBACiAKIAlkZXZkYmcodXNiZGV2LCAiY2ZnODAyMTEuc2NhbiIpOwogCisJLyogR2V0IGN1cnJlbnQgYnNzaWQgbGlzdCBmcm9tIGRldmljZSBiZWZvcmUgbmV3IHNjYW4sIGFzIG5ldyBzY2FuCisJICogY2xlYXJzIGludGVybmFsIGJzc2lkIGxpc3QuCisJICovCisJcm5kaXNfY2hlY2tfYnNzaWRfbGlzdCh1c2JkZXYpOworCiAJaWYgKCFyZXF1ZXN0KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTI4Miw3ICsxNjUzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpybmRpc19ic3NfaW5mb191cGRhdGUoc3RydWN0IHVzYm5ldCAqdXNiZGV2LAogCQkJCQlzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9leCAqYnNzaWQpCiB7CkBAIC0xMjk2LDYgKzE2NjYsOSBAQAogCWludCBpZV9sZW4sIGJzc2lkX2xlbjsKIAl1OCAqaWU7CiAKKwlkZXZkYmcodXNiZGV2LCAiIGZvdW5kIGJzc2lkOiAnJS4zMnMnIFslcE1dIiwgYnNzaWQtPnNzaWQuZXNzaWQsCisJCQkJCQkJYnNzaWQtPm1hYyk7CisKIAkvKiBwYXJzZSBic3NpZCBzdHJ1Y3R1cmUgKi8KIAlic3NpZF9sZW4gPSBsZTMyX3RvX2NwdShic3NpZC0+bGVuZ3RoKTsKIApAQCAtMTMyOCwxNyArMTcwMSwxOCBAQAogCQlHRlBfS0VSTkVMKTsKIH0KIAotCiBzdGF0aWMgaW50IHJuZGlzX2NoZWNrX2Jzc2lkX2xpc3Qoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewogCXZvaWQgKmJ1ZiA9IE5VTEw7CiAJc3RydWN0IG5kaXNfODAyMTFfYnNzaWRfbGlzdF9leCAqYnNzaWRfbGlzdDsKIAlzdHJ1Y3QgbmRpc184MDIxMV9ic3NpZF9leCAqYnNzaWQ7CiAJaW50IHJldCA9IC1FSU5WQUwsIGxlbiwgY291bnQsIGJzc2lkX2xlbjsKKwlib29sIHJlc2l6ZWQgPSBmYWxzZTsKIAogCWRldmRiZyh1c2JkZXYsICJjaGVja19ic3NpZF9saXN0Iik7CiAKIAlsZW4gPSBDT05UUk9MX0JVRkZFUl9TSVpFOworcmVzaXplX2J1ZjoKIAlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTEzNDksMTEgKzE3MjMsMTggQEAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0OwogCisJaWYgKCFyZXNpemVkICYmIGxlbiA+IENPTlRST0xfQlVGRkVSX1NJWkUpIHsKKwkJcmVzaXplZCA9IHRydWU7CisJCWtmcmVlKGJ1Zik7CisJCWdvdG8gcmVzaXplX2J1ZjsKKwl9CisKIAlic3NpZF9saXN0ID0gYnVmOwogCWJzc2lkID0gYnNzaWRfbGlzdC0+YnNzaWQ7CiAJYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCk7CiAJY291bnQgPSBsZTMyX3RvX2NwdShic3NpZF9saXN0LT5udW1faXRlbXMpOwotCWRldmRiZyh1c2JkZXYsICJjaGVja19ic3NpZF9saXN0OiAlZCBCU1NJRHMgZm91bmQiLCBjb3VudCk7CisJZGV2ZGJnKHVzYmRldiwgImNoZWNrX2Jzc2lkX2xpc3Q6ICVkIEJTU0lEcyBmb3VuZCAoYnVmbGVuOiAlZCkiLCBjb3VudCwKKwkJCQkJCQkJCWxlbik7CiAKIAl3aGlsZSAoY291bnQgJiYgKCh2b2lkICopYnNzaWQgKyBic3NpZF9sZW4pIDw9IChidWYgKyBsZW4pKSB7CiAJCXJuZGlzX2Jzc19pbmZvX3VwZGF0ZSh1c2JkZXYsIGJzc2lkKTsKQEAgLTEzNjgsNyArMTc0OSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgdm9pZCBybmRpc19nZXRfc2Nhbl9yZXN1bHRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0KQEAgLTEzNzgsNiArMTc1OCw5IEBACiAKIAlkZXZkYmcodXNiZGV2LCAiZ2V0X3NjYW5fcmVzdWx0cyIpOwogCisJaWYgKCFwcml2LT5zY2FuX3JlcXVlc3QpCisJCXJldHVybjsKKwogCXJldCA9IHJuZGlzX2NoZWNrX2Jzc2lkX2xpc3QodXNiZGV2KTsKIAogCWNmZzgwMjExX3NjYW5fZG9uZShwcml2LT5zY2FuX3JlcXVlc3QsIHJldCA8IDApOwpAQCAtMTM4NSw3MzUgKzE3NjgsNDc0IEBACiAJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKIH0KIAotCi0vKgotICogd2lyZWxlc3MgZXh0ZW5zaW9uIGhhbmRsZXJzCi0gKi8KLQotc3RhdGljIGludCBybmRpc19pd19jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3N0YXRpYyBpbnQgcm5kaXNfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSkKIHsKLQkvKiBkdW1teSBvcCAqLwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfc2V0X2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXNzaWQpCi17CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzbWUtPmNoYW5uZWw7CiAJc3RydWN0IG5kaXNfODAyMTFfc3NpZCBzc2lkOwotCWludCBsZW5ndGggPSB3cnF1LT5lc3NpZC5sZW5ndGg7Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcGFpcndpc2UgPSBSTkRJU19XTEFOX0FMR19OT05FOworCWludCBncm91cHdpc2UgPSBSTkRJU19XTEFOX0FMR19OT05FOworCWludCBrZXltZ210ID0gUk5ESVNfV0xBTl9LRVlfTUdNVF9OT05FOworCWludCBsZW5ndGgsIGksIHJldCwgY2hhbiA9IC0xOwogCi0JZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdFU1NJRDogW2ZsYWdzOiVkLGxlbjolZF0gJyUuMzJzJyIsCi0JCXdycXUtPmVzc2lkLmZsYWdzLCB3cnF1LT5lc3NpZC5sZW5ndGgsIGVzc2lkKTsKKwlpZiAoY2hhbm5lbCkKKwkJY2hhbiA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKLQlpZiAobGVuZ3RoID4gTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpCi0JCWxlbmd0aCA9IE5ESVNfODAyXzExX0xFTkdUSF9TU0lEOworCWdyb3Vwd2lzZSA9IHJuZGlzX2NpcGhlcl90b19hbGcoc21lLT5jcnlwdG8uY2lwaGVyX2dyb3VwKTsKKwlmb3IgKGkgPSAwOyBpIDwgc21lLT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlOyBpKyspCisJCXBhaXJ3aXNlIHw9CisJCQlybmRpc19jaXBoZXJfdG9fYWxnKHNtZS0+Y3J5cHRvLmNpcGhlcnNfcGFpcndpc2VbaV0pOwogCi0Jc3NpZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpOwotCWlmIChsZW5ndGggPiAwKQotCQltZW1jcHkoc3NpZC5lc3NpZCwgZXNzaWQsIGxlbmd0aCk7Ci0JZWxzZQotCQltZW1zZXQoc3NpZC5lc3NpZCwgMCwgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpOwotCi0Jc2V0X2Fzc29jX3BhcmFtcyh1c2JkZXYpOwotCi0JaWYgKCF3cnF1LT5lc3NpZC5mbGFncyB8fCBsZW5ndGggPT0gMCkKLQkJcmV0dXJuIGRpc2Fzc29jaWF0ZSh1c2JkZXYsIDEpOwotCWVsc2UKLQkJcmV0dXJuIHNldF9lc3NpZCh1c2JkZXYsICZzc2lkKTsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X2dldF9lc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmVzc2lkKQotewotCXN0cnVjdCBuZGlzXzgwMjExX3NzaWQgc3NpZDsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCByZXQ7Ci0KLQlyZXQgPSBnZXRfZXNzaWQodXNiZGV2LCAmc3NpZCk7Ci0KLQlpZiAocmV0ID09IDAgJiYgbGUzMl90b19jcHUoc3NpZC5sZW5ndGgpID4gMCkgewotCQl3cnF1LT5lc3NpZC5mbGFncyA9IDE7Ci0JCXdycXUtPmVzc2lkLmxlbmd0aCA9IGxlMzJfdG9fY3B1KHNzaWQubGVuZ3RoKTsKLQkJbWVtY3B5KGVzc2lkLCBzc2lkLmVzc2lkLCB3cnF1LT5lc3NpZC5sZW5ndGgpOwotCQllc3NpZFt3cnF1LT5lc3NpZC5sZW5ndGhdID0gMDsKLQl9IGVsc2UgewotCQltZW1zZXQoZXNzaWQsIDAsIHNpemVvZihORElTXzgwMl8xMV9MRU5HVEhfU1NJRCkpOwotCQl3cnF1LT5lc3NpZC5mbGFncyA9IDA7Ci0JCXdycXUtPmVzc2lkLmxlbmd0aCA9IDA7Ci0JfQotCWRldmRiZyh1c2JkZXYsICJTSU9DR0lXRVNTSUQ6ICVzIiwgZXNzaWQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19nZXRfYnNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGNoYXIgYnNzaWRbRVRIX0FMRU5dOwotCWludCByZXQ7Ci0KLQlyZXQgPSBnZXRfYnNzaWQodXNiZGV2LCBic3NpZCk7Ci0KLQlpZiAocmV0ID09IDApCi0JCWRldmRiZyh1c2JkZXYsICJTSU9DR0lXQVA6ICVwTSIsIGJzc2lkKTsKLQllbHNlCi0JCWRldmRiZyh1c2JkZXYsICJTSU9DR0lXQVA6IDxub3QgYXNzb2NpYXRlZD4iKTsKLQotCXdycXUtPmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCW1lbWNweSh3cnF1LT5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfc2V0X2Jzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1OCAqYnNzaWQgPSAodTggKil3cnF1LT5hcF9hZGRyLnNhX2RhdGE7Ci0JaW50IHJldDsKLQotCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVA6ICVwTSIsIGJzc2lkKTsKLQotCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0JTU0lELCBic3NpZCwgRVRIX0FMRU4pOwotCi0JLyogdXNlciBhcHBzIG1heSBzZXQgYXAncyBtYWMgYWRkcmVzcywgd2hpY2ggaXMgbm90IHJlcXVpcmVkOwotCSAqIHRoZXkgbWF5IGZhaWwgdG8gd29yayBpZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCBzbyByZXR1cm4KLQkgKiBzdWNjZXNzICovCi0JaWYgKHJldCkKLQkJZGV2d2Fybih1c2JkZXYsICJzZXR0aW5nIEFQIG1hYyBhZGRyZXNzIGZhaWxlZCAoJTA4WCkiLCByZXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd19wYXJhbSAqcCA9ICZ3cnF1LT5wYXJhbTsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0JaW50IHJldCA9IC1FTk9UU1VQUDsKLQotCXN3aXRjaCAocC0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IFdQQV9WRVJTSU9OLCAlMDh4IiwgcC0+dmFsdWUpOwotCQlwcml2LT53cGFfdmVyc2lvbiA9IHAtPnZhbHVlOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogQ0lQSEVSX1BBSVJXSVNFLCAlMDh4IiwgcC0+dmFsdWUpOwotCQlwcml2LT53cGFfY2lwaGVyX3BhaXIgPSBwLT52YWx1ZTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IENJUEhFUl9HUk9VUCwgJTA4eCIsIHAtPnZhbHVlKTsKLQkJcHJpdi0+d3BhX2NpcGhlcl9ncm91cCA9IHAtPnZhbHVlOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdBVVRIOiBLRVlfTUdNVCwgJTA4eCIsIHAtPnZhbHVlKTsKLQkJcHJpdi0+d3BhX2tleW1nbXQgPSBwLT52YWx1ZTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogVEtJUF9DT1VOVEVSTUVBU1VSRVMsICUwOHgiLAotCQkJCQkJCQlwLT52YWx1ZSk7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogRFJPUF9VTkVOQ1JZUFRFRCwgJTA4eCIsIHAtPnZhbHVlKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXQVVUSDogODAyMTFfQVVUSF9BTEcsICUwOHgiLCBwLT52YWx1ZSk7Ci0JCXByaXYtPndwYV9hdXRoYWxnID0gcC0+dmFsdWU7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IFdQQV9FTkFCTEVELCAlMDh4IiwgcC0+dmFsdWUpOwotCQlpZiAod3JxdS0+cGFyYW0udmFsdWUpCi0JCQlkZWF1dGhlbnRpY2F0ZSh1c2JkZXYpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKLQkJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdBVVRIOiBSWF9VTkVOQ1JZUFRFRF9FQVBPTCwgJTA4eCIsCi0JCQkJCQkJCXAtPnZhbHVlKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfUk9BTUlOR19DT05UUk9MOgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IFJPQU1JTkdfQ09OVFJPTCwgJTA4eCIsIHAtPnZhbHVlKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IGludmFsaWQgY21kICVkIiwKLQkJCQl3cnF1LT5wYXJhbS5mbGFncyAmIElXX0FVVEhfSU5ERVgpOwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlkZWZhdWx0OgotCQlkZXZkYmcodXNiZGV2LCAiU0lPQ1NJV0FVVEg6IFVOS05PV04gICUwOHgsICUwOHgiLAotCQkJcC0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYLCBwLT52YWx1ZSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpd19wYXJhbSAqcCA9ICZ3cnF1LT5wYXJhbTsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0KLQlzd2l0Y2ggKHAtPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQkJcC0+dmFsdWUgPSBwcml2LT53cGFfdmVyc2lvbjsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKLQkJcC0+dmFsdWUgPSBwcml2LT53cGFfY2lwaGVyX3BhaXI7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6Ci0JCXAtPnZhbHVlID0gcHJpdi0+d3BhX2NpcGhlcl9ncm91cDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQlwLT52YWx1ZSA9IHByaXYtPndwYV9rZXltZ210OwotCQlicmVhazsKLQljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCXAtPnZhbHVlID0gcHJpdi0+d3BhX2F1dGhhbGc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DR0lXQVVUSDogaW52YWxpZCBjbWQgJWQiLAotCQkJCXdycXUtPnBhcmFtLmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCWludCByZXQsIGluZGV4LCBrZXlfbGVuOwotCXU4ICprZXk7Ci0KLQlpbmRleCA9ICh3cnF1LT5lbmNvZGluZy5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCk7Ci0KLQkvKiBpd2NvbmZpZyBnaXZlcyBpbmRleCBhcyAxIC0gTiAqLwotCWlmIChpbmRleCA+IDApCi0JCWluZGV4LS07Ci0JZWxzZQotCQlpbmRleCA9IHByaXYtPmVuY3JfdHhfa2V5X2luZGV4OwotCi0JaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSA0KSB7Ci0JCWRldndhcm4odXNiZGV2LCAiZW5jcnlwdGlvbiBpbmRleCBvdXQgb2YgcmFuZ2UgKCV1KSIsIGluZGV4KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNtZS0+Y3J5cHRvLm5fY2lwaGVyc19wYWlyd2lzZSA+IDAgJiYKKwkJCXBhaXJ3aXNlID09IFJORElTX1dMQU5fQUxHX05PTkUpIHsKKwkJZGV2ZXJyKHVzYmRldiwgIlVuc3VwcG9ydGVkIHBhaXJ3aXNlIGNpcGhlciIpOworCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIAotCS8qIHJlbW92ZSBrZXkgaWYgZGlzYWJsZWQgKi8KLQlpZiAod3JxdS0+ZGF0YS5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgewotCQlpZiAocmVtb3ZlX2tleSh1c2JkZXYsIGluZGV4LCBOVUxMKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQllbHNlCi0JCQlyZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc21lLT5jcnlwdG8ubl9ha21fc3VpdGVzOyBpKyspCisJCWtleW1nbXQgfD0KKwkJCXJuZGlzX2FrbV9zdWl0ZV90b19rZXlfbWdtdChzbWUtPmNyeXB0by5ha21fc3VpdGVzW2ldKTsKKworCWlmIChzbWUtPmNyeXB0by5uX2FrbV9zdWl0ZXMgPiAwICYmCisJCQlrZXltZ210ID09IFJORElTX1dMQU5fS0VZX01HTVRfTk9ORSkgeworCQlkZXZlcnIodXNiZGV2LCAiSW52YWxpZCBrZXltZ210Iik7CisJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JLyogZ2xvYmFsIGVuY3J5cHRpb24gc3RhdGUgKGZvciBhbGwga2V5cykgKi8KLQlpZiAod3JxdS0+ZGF0YS5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQotCQlyZXQgPSBzZXRfYXV0aF9tb2RlKHVzYmRldiwgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCwKLQkJCQkJCUlXX0FVVEhfQUxHX09QRU5fU1lTVEVNKTsKLQllbHNlIC8qaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkqLwotCQlyZXQgPSBzZXRfYXV0aF9tb2RlKHVzYmRldiwgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCwKLQkJCQkJCUlXX0FVVEhfQUxHX1NIQVJFRF9LRVkpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKKwlkZXZkYmcodXNiZGV2LCAiY2ZnODAyMTEuY29ubmVjdCgnJS4zMnMnOlslcE1dOiVkOlslZCwweCV4OjB4JXhdOlsweCV4OiIKKwkJCSIweCV4XToweCV4KSIsIHNtZS0+c3NpZCwgc21lLT5ic3NpZCwgY2hhbiwKKwkJCXNtZS0+cHJpdmFjeSwgc21lLT5jcnlwdG8ud3BhX3ZlcnNpb25zLCBzbWUtPmF1dGhfdHlwZSwKKwkJCWdyb3Vwd2lzZSwgcGFpcndpc2UsIGtleW1nbXQpOwogCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoID4gMCkgewotCQlrZXlfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0JCWtleSA9IGV4dHJhOwotCX0gZWxzZSB7Ci0JCS8qIG11c3QgYmUgc2V0IGFzIHR4IGtleSAqLwotCQlpZiAocHJpdi0+ZW5jcl9rZXlfbGVuW2luZGV4XSA9PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWtleV9sZW4gPSBwcml2LT5lbmNyX2tleV9sZW5baW5kZXhdOwotCQlrZXkgPSBwcml2LT5lbmNyX2tleXNbaW5kZXhdOwotCQlwcml2LT5lbmNyX3R4X2tleV9pbmRleCA9IGluZGV4OwotCX0KLQotCWlmIChhZGRfd2VwX2tleSh1c2JkZXYsIGtleSwga2V5X2xlbiwgaW5kZXgpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGluZGV4ID09IHByaXYtPmVuY3JfdHhfa2V5X2luZGV4KQotCQkvKiBuZGlzIGRyaXZlcnMgd2FudCBlc3NpZCB0byBiZSBzZXQgYWZ0ZXIgc2V0dGluZyBlbmNyICovCi0JCXNldF9lc3NpZCh1c2JkZXYsICZwcml2LT5lc3NpZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHJuZGlzX2l3X3NldF9lbmNvZGVfZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKLQlpbnQga2V5aWR4LCBmbGFnczsKLQotCWtleWlkeCA9IHdycXUtPmVuY29kaW5nLmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCi0JLyogaXdjb25maWcgZ2l2ZXMgaW5kZXggYXMgMSAtIE4gKi8KLQlpZiAoa2V5aWR4KQotCQlrZXlpZHgtLTsKLQllbHNlCi0JCWtleWlkeCA9IHByaXYtPmVuY3JfdHhfa2V5X2luZGV4OwotCi0JaWYgKGtleWlkeCA8IDAgfHwga2V5aWR4ID49IDQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGV4dC0+YWxnID09IFdQQV9BTEdfV0VQKSB7Ci0JCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkKLQkJCXByaXYtPmVuY3JfdHhfa2V5X2luZGV4ID0ga2V5aWR4OwotCQlyZXR1cm4gYWRkX3dlcF9rZXkodXNiZGV2LCBleHQtPmtleSwgZXh0LT5rZXlfbGVuLCBrZXlpZHgpOwotCX0KLQotCWlmICgod3JxdS0+ZW5jb2RpbmcuZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHx8Ci0JICAgIGV4dC0+YWxnID09IElXX0VOQ09ERV9BTEdfTk9ORSB8fCBleHQtPmtleV9sZW4gPT0gMCkKLQkJcmV0dXJuIHJlbW92ZV9rZXkodXNiZGV2LCBrZXlpZHgsIE5VTEwpOwotCi0JZmxhZ3MgPSAwOwotCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElEKQotCQlmbGFncyB8PSBORElTXzgwMjExX0FEREtFWV9TRVRfSU5JVF9SRUNWX1NFUTsKLQlpZiAoIShleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZKSkKLQkJZmxhZ3MgfD0gTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZOwotCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkKLQkJZmxhZ3MgfD0gTkRJU184MDIxMV9BRERLRVlfVFJBTlNNSVRfS0VZOwotCi0JcmV0dXJuIGFkZF93cGFfa2V5KHVzYmRldiwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbiwga2V5aWR4LCAmZXh0LT5hZGRyLAotCQkJCWV4dC0+cnhfc2VxLCBleHQtPmFsZywgZmxhZ3MpOwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCWludCByZXQgPSAwOwotCi0jaWZkZWYgREVCVUcKLQlpbnQgajsKLQl1OCAqZ2llID0gZXh0cmE7Ci0JZm9yIChqID0gMDsgaiA8IHdycXUtPmRhdGEubGVuZ3RoOyBqICs9IDgpCi0JCWRldmRiZyh1c2JkZXYsCi0JCQkiU0lPQ1NJV0dFTklFICUwNHggLSAiCi0JCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4IiwgaiwKLQkJCWdpZVtqICsgMF0sIGdpZVtqICsgMV0sIGdpZVtqICsgMl0sIGdpZVtqICsgM10sCi0JCQlnaWVbaiArIDRdLCBnaWVbaiArIDVdLCBnaWVbaiArIDZdLCBnaWVbaiArIDddKTsKLSNlbmRpZgotCS8qIGNsZWFyIGV4aXN0aW5nIElFcyAqLwotCWlmIChwcml2LT53cGFfaWVfbGVuKSB7Ci0JCWtmcmVlKHByaXYtPndwYV9pZSk7Ci0JCXByaXYtPndwYV9pZV9sZW4gPSAwOwotCX0KLQotCS8qIHNldCBuZXcgSUVzICovCi0JcHJpdi0+d3BhX2llID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHByaXYtPndwYV9pZSkgewotCQlwcml2LT53cGFfaWVfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0JCW1lbWNweShwcml2LT53cGFfaWUsIGV4dHJhLCBwcml2LT53cGFfaWVfbGVuKTsKLQl9IGVsc2UKLQkJcmV0ID0gLUVOT01FTTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfZ2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCi0JZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdHRU5JRSIpOwotCi0JaWYgKHByaXYtPndwYV9pZV9sZW4gPT0gMCB8fCBwcml2LT53cGFfaWUgPT0gTlVMTCkgewotCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IHByaXYtPndwYV9pZV9sZW4pCi0JCXJldHVybiAtRTJCSUc7Ci0KLQl3cnF1LT5kYXRhLmxlbmd0aCA9IHByaXYtPndwYV9pZV9sZW47Ci0JbWVtY3B5KGV4dHJhLCBwcml2LT53cGFfaWUsIHByaXYtPndwYV9pZV9sZW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlfX2xlMzIgdG1wOwotCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXUlRTIik7Ci0KLQl0bXAgPSBjcHVfdG9fbGUzMih3cnF1LT5ydHMudmFsdWUpOwotCXJldHVybiBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xELCAmdG1wLAotCQkJCQkJCQlzaXplb2YodG1wKSk7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19nZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlfX2xlMzIgdG1wOwotCWludCBsZW4sIHJldDsKLQotCWxlbiA9IHNpemVvZih0bXApOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRCwgJnRtcCwgJmxlbik7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXdycXUtPnJ0cy52YWx1ZSA9IGxlMzJfdG9fY3B1KHRtcCk7Ci0JCXdycXUtPnJ0cy5mbGFncyA9IDE7Ci0JCXdycXUtPnJ0cy5kaXNhYmxlZCA9IDA7Ci0JfQotCi0JZGV2ZGJnKHVzYmRldiwgIlNJT0NHSVdSVFM6ICVkIiwgd3JxdS0+cnRzLnZhbHVlKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19zZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0JX19sZTMyIHRtcDsKLQotCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXRlJBRyIpOwotCi0JdG1wID0gY3B1X3RvX2xlMzIod3JxdS0+ZnJhZy52YWx1ZSk7Ci0JcmV0dXJuIHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xELCAmdG1wLAotCQkJCQkJCQlzaXplb2YodG1wKSk7Ci19Ci0KLQotc3RhdGljIGludCBybmRpc19pd19nZXRfZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0JX19sZTMyIHRtcDsKLQlpbnQgbGVuLCByZXQ7Ci0KLQlsZW4gPSBzaXplb2YodG1wKTsKLQlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xELCAmdG1wLAotCQkJCQkJCQkJJmxlbik7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXdycXUtPmZyYWcudmFsdWUgPSBsZTMyX3RvX2NwdSh0bXApOwotCQl3cnF1LT5mcmFnLmZsYWdzID0gMTsKLQkJd3JxdS0+ZnJhZy5kaXNhYmxlZCA9IDA7Ci0JfQotCWRldmRiZyh1c2JkZXYsICJTSU9DR0lXRlJBRzogJWQiLCB3cnF1LT5mcmFnLnZhbHVlKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfc2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZGlzXzgwMjExX2NvbmYgY29uZmlnOwotCXVuc2lnbmVkIGludCBkc2NvbmZpZzsKLQlpbnQgbGVuLCByZXQ7Ci0KLQkvKiB0aGlzIE9JRCBpcyB2YWxpZCBvbmx5IHdoZW4gbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoaXNfYXNzb2NpYXRlZCh1c2JkZXYpKQotCQlyZXR1cm4gMDsKKwkJZGlzYXNzb2NpYXRlKHVzYmRldiwgZmFsc2UpOwogCi0JZHNjb25maWcgPSAwOwotCWlmIChmcmVxX3RvX2RzY29uZmlnKCZ3cnF1LT5mcmVxLCAmZHNjb25maWcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxlbiA9IHNpemVvZihjb25maWcpOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiwgJmNvbmZpZywgJmxlbik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXRlJFUTogcXVlcnlpbmcgY29uZmlndXJhdGlvbiBmYWlsZWQiKTsKLQkJcmV0dXJuIDA7CisJcmV0ID0gc2V0X2luZnJhX21vZGUodXNiZGV2LCBORElTXzgwMjExX0lORlJBX0lORlJBKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2luZnJhX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJfQogCi0JY29uZmlnLmRzX2NvbmZpZyA9IGNwdV90b19sZTMyKGRzY29uZmlnKTsKLQotCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXRlJFUTogJWQgKiAxMF4lZCIsIHdycXUtPmZyZXEubSwgd3JxdS0+ZnJlcS5lKTsKLQlyZXR1cm4gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiwgJmNvbmZpZywKLQkJCQkJCQkJc2l6ZW9mKGNvbmZpZykpOwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfZ2V0X2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZGlzXzgwMjExX2NvbmYgY29uZmlnOwotCWludCBsZW4sIHJldDsKLQotCWxlbiA9IHNpemVvZihjb25maWcpOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiwgJmNvbmZpZywgJmxlbik7Ci0JaWYgKHJldCA9PSAwKQotCQlkc2NvbmZpZ190b19mcmVxKGxlMzJfdG9fY3B1KGNvbmZpZy5kc19jb25maWcpLCAmd3JxdS0+ZnJlcSk7Ci0KLQlkZXZkYmcodXNiZGV2LCAiU0lPQ0dJV0ZSRVE6ICVkIiwgd3JxdS0+ZnJlcS5tKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLXN0YXRpYyBpbnQgcm5kaXNfaXdfZ2V0X3R4cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0JX19sZTMyIHR4X3Bvd2VyOwotCi0JaWYgKHByaXYtPnJhZGlvX29uKSB7Ci0JCS8qIGZha2Ugc2luY2UgY2hhbmdpbmcgdHhfcG93ZXIgKGJ5IHVzZXJsZXZlbCkgbm90IHN1cHBvcnRlZCAqLwotCQl0eF9wb3dlciA9IGNwdV90b19sZTMyKGdldF9iY200MzIwX3Bvd2VyKHByaXYpKTsKLQotCQl3cnF1LT50eHBvd2VyLmZsYWdzID0gSVdfVFhQT1dfTVdBVFQ7Ci0JCXdycXUtPnR4cG93ZXIudmFsdWUgPSBsZTMyX3RvX2NwdSh0eF9wb3dlcik7Ci0JCXdycXUtPnR4cG93ZXIuZGlzYWJsZWQgPSAwOwotCX0gZWxzZSB7Ci0JCXdycXUtPnR4cG93ZXIuZmxhZ3MgPSBJV19UWFBPV19NV0FUVDsKLQkJd3JxdS0+dHhwb3dlci52YWx1ZSA9IDA7Ci0JCXdycXUtPnR4cG93ZXIuZGlzYWJsZWQgPSAxOworCXJldCA9IHNldF9hdXRoX21vZGUodXNiZGV2LCBzbWUtPmNyeXB0by53cGFfdmVyc2lvbnMsIHNtZS0+YXV0aF90eXBlLAorCQkJCQkJCQlrZXltZ210KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2F1dGhfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAl9CiAKLQlkZXZkYmcodXNiZGV2LCAiU0lPQ0dJV1RYUE9XOiAlZCIsIHdycXUtPnR4cG93ZXIudmFsdWUpOworCXNldF9wcml2X2ZpbHRlcih1c2JkZXYpOwogCi0JcmV0dXJuIDA7Ci19CisJcmV0ID0gc2V0X2VuY3JfbW9kZSh1c2JkZXYsIHBhaXJ3aXNlLCBncm91cHdpc2UpOworCWlmIChyZXQgPCAwKSB7CisJCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBzZXRfZW5jcl9tb2RlIGZhaWxlZCwgJWQiLCByZXQpOworCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOworCX0KIAotCi1zdGF0aWMgaW50IHJuZGlzX2l3X3NldF90eHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCV9fbGUzMiB0eF9wb3dlciA9IDA7Ci0KLQlpZiAoIXdycXUtPnR4cG93ZXIuZGlzYWJsZWQpIHsKLQkJaWYgKHdycXUtPnR4cG93ZXIuZmxhZ3MgPT0gSVdfVFhQT1dfTVdBVFQpCi0JCQl0eF9wb3dlciA9IGNwdV90b19sZTMyKHdycXUtPnR4cG93ZXIudmFsdWUpOwotCQllbHNlIHsgLyogd3JxdS0+dHhwb3dlci5mbGFncyA9PSBJV19UWFBPV19EQk0gKi8KLQkJCWlmICh3cnF1LT50eHBvd2VyLnZhbHVlID4gMjApCi0JCQkJdHhfcG93ZXIgPSBjcHVfdG9fbGUzMigxMjgpOwotCQkJZWxzZSBpZiAod3JxdS0+dHhwb3dlci52YWx1ZSA8IC00MykKLQkJCQl0eF9wb3dlciA9IGNwdV90b19sZTMyKDEyNyk7Ci0JCQllbHNlIHsKLQkJCQlzaWduZWQgY2hhciB0bXA7Ci0JCQkJdG1wID0gd3JxdS0+dHhwb3dlci52YWx1ZTsKLQkJCQl0bXAgPSAtMTIgLSB0bXA7Ci0JCQkJdG1wIDw8PSAyOwotCQkJCXR4X3Bvd2VyID0gY3B1X3RvX2xlMzIoKHVuc2lnbmVkIGNoYXIpdG1wKTsKLQkJCX0KKwlpZiAoY2hhbm5lbCkgeworCQlyZXQgPSBzZXRfY2hhbm5lbCh1c2JkZXYsIGNoYW4pOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IHNldF9jaGFubmVsIGZhaWxlZCwgJWQiLCByZXQpOworCQkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAkJfQogCX0KIAotCWRldmRiZyh1c2JkZXYsICJTSU9DU0lXVFhQT1c6ICVkIiwgbGUzMl90b19jcHUodHhfcG93ZXIpKTsKLQotCWlmIChsZTMyX3RvX2NwdSh0eF9wb3dlcikgIT0gMCkgewotCQkvKiB0eHBvd2VyIHVuc3VwcG9ydGVkLCBqdXN0IHR1cm4gcmFkaW8gb24gKi8KLQkJaWYgKCFwcml2LT5yYWRpb19vbikKLQkJCXJldHVybiBkaXNhc3NvY2lhdGUodXNiZGV2LCAxKTsKLQkJcmV0dXJuIDA7IC8qIGFsbCByZWFkeSBvbiAqLworCWlmIChzbWUtPmtleSAmJiAoKGdyb3Vwd2lzZSB8IHBhaXJ3aXNlKSAmIFJORElTX1dMQU5fQUxHX1dFUCkpIHsKKwkJcHJpdi0+ZW5jcl90eF9rZXlfaW5kZXggPSBzbWUtPmtleV9pZHg7CisJCXJldCA9IGFkZF93ZXBfa2V5KHVzYmRldiwgc21lLT5rZXksIHNtZS0+a2V5X2xlbiwgc21lLT5rZXlfaWR4KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBhZGRfd2VwX2tleSBmYWlsZWQsICVkICIKKwkJCQkiKCVkLCAlZCkiLCByZXQsIHNtZS0+a2V5X2xlbiwgc21lLT5rZXlfaWR4KTsKKwkJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CisJCX0KIAl9CiAKLQkvKiB0eF9wb3dlciA9PSAwLCB0dXJuIG9mZiByYWRpbyAqLwotCXJldHVybiBkaXNhc3NvY2lhdGUodXNiZGV2LCAwKTsKLX0KKwlpZiAoc21lLT5ic3NpZCAmJiAhaXNfemVyb19ldGhlcl9hZGRyKHNtZS0+YnNzaWQpICYmCisJCQkJIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHNtZS0+YnNzaWQpKSB7CisJCXJldCA9IHNldF9ic3NpZCh1c2JkZXYsIHNtZS0+YnNzaWQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IHNldF9ic3NpZCBmYWlsZWQsICVkIiwgcmV0KTsKKwkJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CisJCX0KKwl9IGVsc2UKKwkJY2xlYXJfYnNzaWQodXNiZGV2KTsKIAorCWxlbmd0aCA9IHNtZS0+c3NpZF9sZW47CisJaWYgKGxlbmd0aCA+IE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKQorCQlsZW5ndGggPSBORElTXzgwMl8xMV9MRU5HVEhfU1NJRDsKIAotc3RhdGljIGludCBybmRpc19pd19nZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0JX19sZTMyIHRtcDsKLQlpbnQgcmV0LCBsZW47CisJbWVtc2V0KCZzc2lkLCAwLCBzaXplb2Yoc3NpZCkpOworCXNzaWQubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKTsKKwltZW1jcHkoc3NpZC5lc3NpZCwgc21lLT5zc2lkLCBsZW5ndGgpOwogCi0JbGVuID0gc2l6ZW9mKHRtcCk7Ci0JcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEX0dFTl9MSU5LX1NQRUVELCAmdG1wLCAmbGVuKTsKLQlpZiAocmV0ID09IDApIHsKLQkJd3JxdS0+Yml0cmF0ZS52YWx1ZSA9IGxlMzJfdG9fY3B1KHRtcCkgKiAxMDA7Ci0JCXdycXUtPmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCQl3cnF1LT5iaXRyYXRlLmZsYWdzID0gMTsKLQl9CisJLyogUGF1c2UgYW5kIHB1cmdlIHJ4IHF1ZXVlLCBzbyB3ZSBkb24ndCBwYXNzIHBhY2tldHMgYmVmb3JlCisJICogJ21lZGlhIGNvbm5lY3QnLWluZGljYXRpb24uCisJICovCisJdXNibmV0X3BhdXNlX3J4KHVzYmRldik7CisJdXNibmV0X3B1cmdlX3BhdXNlZF9yeHEodXNiZGV2KTsKKworCXJldCA9IHNldF9lc3NpZCh1c2JkZXYsICZzc2lkKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IHNldF9lc3NpZCBmYWlsZWQsICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitlcnJfdHVybl9yYWRpb19vbjoKKwlkaXNhc3NvY2lhdGUodXNiZGV2LCB0cnVlKTsKKwogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIGludCBybmRpc19pd19zZXRfbWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorc3RhdGljIGludCBybmRpc19kaXNjb25uZWN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkJCXUxNiByZWFzb25fY29kZSkKIHsKLQlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7Ci0Jc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKLQl1bnNpZ25lZCBjaGFyIGJzc2lkW0VUSF9BTEVOXTsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwogCi0JZ2V0X2Jzc2lkKHVzYmRldiwgYnNzaWQpOworCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5kaXNjb25uZWN0KCVkKSIsIHJlYXNvbl9jb2RlKTsKIAotCWlmIChtZW1jbXAoYnNzaWQsIG1sbWUtPmFkZHIuc2FfZGF0YSwgRVRIX0FMRU4pKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlwcml2LT5jb25uZWN0ZWQgPSBmYWxzZTsKKwltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAotCXN3aXRjaCAobWxtZS0+Y21kKSB7Ci0JY2FzZSBJV19NTE1FX0RFQVVUSDoKLQkJcmV0dXJuIGRlYXV0aGVudGljYXRlKHVzYmRldik7Ci0JY2FzZSBJV19NTE1FX0RJU0FTU09DOgotCQlyZXR1cm4gZGlzYXNzb2NpYXRlKHVzYmRldiwgcHJpdi0+cmFkaW9fb24pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gZGVhdXRoZW50aWNhdGUodXNiZGV2KTsKK30KKworc3RhdGljIGludCBybmRpc19qb2luX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBwYXJhbXMtPmNoYW5uZWw7CisJc3RydWN0IG5kaXNfODAyMTFfc3NpZCBzc2lkOworCWVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlOworCWludCByZXQsIGFsZywgbGVuZ3RoLCBjaGFuID0gLTE7CisKKwlpZiAoY2hhbm5lbCkKKwkJY2hhbiA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwkvKiBUT0RPOiBIb3cgdG8gaGFuZGxlIGFkLWhvYyBlbmNyeXB0aW9uPworCSAqIGNvbm5lY3QoKSBoYXMgKmtleSwgam9pbl9pYnNzKCkgZG9lc24ndC4gUk5ESVMgcmVxdWlyZXMga2V5IHRvIGJlCisJICogcHJlLXNoYXJlZCBmb3IgZW5jcnlwdGlvbiAob3Blbi9zaGFyZWQvd3BhKSwgaXMga2V5IHNldCBiZWZvcmUKKwkgKiBqb2luX2lic3M/IFdoaWNoIGF1dGhfdHlwZSB0byB1c2UgKG5vdCBpbiBwYXJhbXMpPyBXaGF0IGFib3V0IFdQQT8KKwkgKi8KKwlpZiAocGFyYW1zLT5wcml2YWN5KSB7CisJCWF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWTsKKwkJYWxnID0gUk5ESVNfV0xBTl9BTEdfV0VQOworCX0gZWxzZSB7CisJCWF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU07CisJCWFsZyA9IFJORElTX1dMQU5fQUxHX05PTkU7CiAJfQogCisJZGV2ZGJnKHVzYmRldiwgImNmZzgwMjExLmpvaW5faWJzcygnJS4zMnMnOlslcE1dOiVkOiVkKSIsIHBhcmFtcy0+c3NpZCwKKwkJCQkJcGFyYW1zLT5ic3NpZCwgY2hhbiwgcGFyYW1zLT5wcml2YWN5KTsKKworCWlmIChpc19hc3NvY2lhdGVkKHVzYmRldikpCisJCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIGZhbHNlKTsKKworCXJldCA9IHNldF9pbmZyYV9tb2RlKHVzYmRldiwgTkRJU184MDIxMV9JTkZSQV9BREhPQyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2luZnJhX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CisJfQorCisJcmV0ID0gc2V0X2F1dGhfbW9kZSh1c2JkZXYsIDAsIGF1dGhfdHlwZSwgUk5ESVNfV0xBTl9LRVlfTUdNVF9OT05FKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfYXV0aF9tb2RlIGZhaWxlZCwgJWQiLCByZXQpOworCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOworCX0KKworCXNldF9wcml2X2ZpbHRlcih1c2JkZXYpOworCisJcmV0ID0gc2V0X2VuY3JfbW9kZSh1c2JkZXYsIGFsZywgUk5ESVNfV0xBTl9BTEdfTk9ORSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2VuY3JfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKKwl9CisKKwlpZiAoY2hhbm5lbCkgeworCQlyZXQgPSBzZXRfY2hhbm5lbCh1c2JkZXYsIGNoYW4pOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2NoYW5uZWwgZmFpbGVkLCAlZCIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CisJCX0KKwl9CisKKwlpZiAocGFyYW1zLT5ic3NpZCAmJiAhaXNfemVyb19ldGhlcl9hZGRyKHBhcmFtcy0+YnNzaWQpICYmCisJCQkJIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKHBhcmFtcy0+YnNzaWQpKSB7CisJCXJldCA9IHNldF9ic3NpZCh1c2JkZXYsIHBhcmFtcy0+YnNzaWQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2Jzc2lkIGZhaWxlZCwgJWQiLCByZXQpOworCQkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKKwkJfQorCX0gZWxzZQorCQljbGVhcl9ic3NpZCh1c2JkZXYpOworCisJbGVuZ3RoID0gcGFyYW1zLT5zc2lkX2xlbjsKKwlpZiAobGVuZ3RoID4gTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpCisJCWxlbmd0aCA9IE5ESVNfODAyXzExX0xFTkdUSF9TU0lEOworCisJbWVtc2V0KCZzc2lkLCAwLCBzaXplb2Yoc3NpZCkpOworCXNzaWQubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKTsKKwltZW1jcHkoc3NpZC5lc3NpZCwgcGFyYW1zLT5zc2lkLCBsZW5ndGgpOworCisJLyogRG9uJ3QgbmVlZCB0byBwYXVzZSByeCBxdWV1ZSBmb3IgYWQtaG9jLiAqLworCXVzYm5ldF9wdXJnZV9wYXVzZWRfcnhxKHVzYmRldik7CisJdXNibmV0X3Jlc3VtZV9yeCh1c2JkZXYpOworCisJcmV0ID0gc2V0X2Vzc2lkKHVzYmRldiwgJnNzaWQpOworCWlmIChyZXQgPCAwKQorCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfZXNzaWQgZmFpbGVkLCAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworZXJyX3R1cm5fcmFkaW9fb246CisJZGlzYXNzb2NpYXRlKHVzYmRldiwgdHJ1ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJuZGlzX2xlYXZlX2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCisJZGV2ZGJnKHVzYmRldiwgImNmZzgwMjExLmxlYXZlX2lic3MoKSIpOworCisJcHJpdi0+Y29ubmVjdGVkID0gZmFsc2U7CisJbWVtc2V0KHByaXYtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gZGVhdXRoZW50aWNhdGUodXNiZGV2KTsKK30KKworc3RhdGljIGludCBybmRpc19zZXRfY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKworCXJldHVybiBzZXRfY2hhbm5lbCh1c2JkZXYsCisJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY2hhbi0+Y2VudGVyX2ZyZXEpKTsKK30KKworc3RhdGljIGludCBybmRpc19hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJCXU4IGtleV9pbmRleCwgY29uc3QgdTggKm1hY19hZGRyLAorCQkJCQlzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CisJX19sZTMyIGZsYWdzOworCisJZGV2ZGJnKHVzYmRldiwgInJuZGlzX2FkZF9rZXkoJWksICVwTSwgJTA4eCkiLCBrZXlfaW5kZXgsIG1hY19hZGRyLAorCQkJCQkJCXBhcmFtcy0+Y2lwaGVyKTsKKworCXN3aXRjaCAocGFyYW1zLT5jaXBoZXIpIHsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgorCQlyZXR1cm4gYWRkX3dlcF9rZXkodXNiZGV2LCBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuLAorCQkJCQkJCQlrZXlfaW5kZXgpOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCWZsYWdzID0gMDsKKworCQlpZiAocGFyYW1zLT5zZXEgJiYgcGFyYW1zLT5zZXFfbGVuID4gMCkKKwkJCWZsYWdzIHw9IE5ESVNfODAyMTFfQURES0VZX1NFVF9JTklUX1JFQ1ZfU0VROworCQlpZiAobWFjX2FkZHIpCisJCQlmbGFncyB8PSBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVkgfAorCQkJCQlORElTXzgwMjExX0FEREtFWV9UUkFOU01JVF9LRVk7CisKKwkJcmV0dXJuIGFkZF93cGFfa2V5KHVzYmRldiwgcGFyYW1zLT5rZXksIHBhcmFtcy0+a2V5X2xlbiwKKwkJCQlrZXlfaW5kZXgsIG1hY19hZGRyLCBwYXJhbXMtPnNlcSwKKwkJCQlwYXJhbXMtPnNlcV9sZW4sIHBhcmFtcy0+Y2lwaGVyLCBmbGFncyk7CisJZGVmYXVsdDoKKwkJZGV2ZGJnKHVzYmRldiwgInJuZGlzX2FkZF9rZXk6IHVuc3VwcG9ydGVkIGNpcGhlciAlMDh4IiwKKwkJCQkJCQlwYXJhbXMtPmNpcGhlcik7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgaW50IHJuZGlzX2RlbF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJdTgga2V5X2luZGV4LCBjb25zdCB1OCAqbWFjX2FkZHIpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKworCWRldmRiZyh1c2JkZXYsICJybmRpc19kZWxfa2V5KCVpLCAlcE0pIiwga2V5X2luZGV4LCBtYWNfYWRkcik7CisKKwlyZXR1cm4gcmVtb3ZlX2tleSh1c2JkZXYsIGtleV9pbmRleCwgbWFjX2FkZHIpOworfQorCitzdGF0aWMgaW50IHJuZGlzX3NldF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCQkJCQl1OCBrZXlfaW5kZXgpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IHdpcGh5X3ByaXYod2lwaHkpOworCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IHByaXYtPnVzYmRldjsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9lbmNyX2tleSBrZXk7CisKKwlkZXZkYmcodXNiZGV2LCAicm5kaXNfc2V0X2RlZmF1bHRfa2V5KCVpKSIsIGtleV9pbmRleCk7CisKKwlwcml2LT5lbmNyX3R4X2tleV9pbmRleCA9IGtleV9pbmRleDsKKworCWtleSA9IHByaXYtPmVuY3Jfa2V5c1trZXlfaW5kZXhdOworCisJcmV0dXJuIGFkZF93ZXBfa2V5KHVzYmRldiwga2V5Lm1hdGVyaWFsLCBrZXkubGVuLCBrZXlfaW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBybmRpc19maWxsX3N0YXRpb25faW5mbyhzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsCisJCQkJCQlzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKK3sKKwlfX2xlMzIgbGlua3NwZWVkLCByc3NpOworCWludCByZXQsIGxlbjsKKworCW1lbXNldChzaW5mbywgMCwgc2l6ZW9mKCpzaW5mbykpOworCisJbGVuID0gc2l6ZW9mKGxpbmtzcGVlZCk7CisJcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEX0dFTl9MSU5LX1NQRUVELCAmbGlua3NwZWVkLCAmbGVuKTsKKwlpZiAocmV0ID09IDApIHsKKwkJc2luZm8tPnR4cmF0ZS5sZWdhY3kgPSBsZTMyX3RvX2NwdShsaW5rc3BlZWQpIC8gMTAwMDsKKwkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fVFhfQklUUkFURTsKKwl9CisKKwlsZW4gPSBzaXplb2YocnNzaSk7CisJcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9SU1NJLCAmcnNzaSwgJmxlbik7CisJaWYgKHJldCA9PSAwKSB7CisJCXNpbmZvLT5zaWduYWwgPSBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKTsKKwkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fU0lHTkFMOworCX0KK30KKworc3RhdGljIGludCBybmRpc19nZXRfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQl1OCAqbWFjLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKK3sKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OworCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5ic3NpZCwgbWFjKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlybmRpc19maWxsX3N0YXRpb25faW5mbyh1c2JkZXYsIHNpbmZvKTsKKwogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqcm5kaXNfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJuZGlzX2R1bXBfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIGludCBpZHgsIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewotCXN0cnVjdCB1c2JuZXQgKnVzYmRldiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKKwlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhdHNfbG9jaywgZmxhZ3MpOwotCW1lbWNweSgmcHJpdi0+aXdzdGF0cywgJnByaXYtPnByaXZzdGF0cywgc2l6ZW9mKHByaXYtPml3c3RhdHMpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGF0c19sb2NrLCBmbGFncyk7CisJaWYgKGlkeCAhPSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldHVybiAmcHJpdi0+aXdzdGF0czsKKwltZW1jcHkobWFjLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pOworCisJcm5kaXNfZmlsbF9zdGF0aW9uX2luZm8odXNiZGV2LCBzaW5mbyk7CisKKwlyZXR1cm4gMDsKIH0KIAotCi0jZGVmaW5lIElXX0lPQ1RMKHgpIFsoeCkgLSBTSU9DU0lXQ09NTUlUXQotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgcm5kaXNfaXdfaGFuZGxlcltdID0KKy8qCisgKiB3b3JrZXJzLCBpbmRpY2F0aW9uIGhhbmRsZXJzLCBkZXZpY2UgcG9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHJuZGlzX3dsYW5fZG9fbGlua191cF93b3JrKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKLQlJV19JT0NUTChTSU9DU0lXQ09NTUlUKSAgICA9IHJuZGlzX2l3X2NvbW1pdCwKLQlJV19JT0NUTChTSU9DR0lXTkFNRSkgICAgICA9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd25hbWUsCi0JSVdfSU9DVEwoU0lPQ1NJV0ZSRVEpICAgICAgPSBybmRpc19pd19zZXRfZnJlcSwKLQlJV19JT0NUTChTSU9DR0lXRlJFUSkgICAgICA9IHJuZGlzX2l3X2dldF9mcmVxLAotCUlXX0lPQ1RMKFNJT0NTSVdNT0RFKSAgICAgID0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3bW9kZSwKLQlJV19JT0NUTChTSU9DR0lXTU9ERSkgICAgICA9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd21vZGUsCi0JSVdfSU9DVEwoU0lPQ0dJV1JBTkdFKSAgICAgPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdyYW5nZSwKLQlJV19JT0NUTChTSU9DU0lXQVApICAgICAgICA9IHJuZGlzX2l3X3NldF9ic3NpZCwKLQlJV19JT0NUTChTSU9DR0lXQVApICAgICAgICA9IHJuZGlzX2l3X2dldF9ic3NpZCwKLQlJV19JT0NUTChTSU9DU0lXU0NBTikgICAgICA9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3NjYW4sCi0JSVdfSU9DVEwoU0lPQ0dJV1NDQU4pICAgICAgPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdzY2FuLAotCUlXX0lPQ1RMKFNJT0NTSVdFU1NJRCkgICAgID0gcm5kaXNfaXdfc2V0X2Vzc2lkLAotCUlXX0lPQ1RMKFNJT0NHSVdFU1NJRCkgICAgID0gcm5kaXNfaXdfZ2V0X2Vzc2lkLAotCUlXX0lPQ1RMKFNJT0NHSVdSQVRFKSAgICAgID0gcm5kaXNfaXdfZ2V0X3JhdGUsCi0JSVdfSU9DVEwoU0lPQ1NJV1JUUykgICAgICAgPSBybmRpc19pd19zZXRfcnRzLAotCUlXX0lPQ1RMKFNJT0NHSVdSVFMpICAgICAgID0gcm5kaXNfaXdfZ2V0X3J0cywKLQlJV19JT0NUTChTSU9DU0lXRlJBRykgICAgICA9IHJuZGlzX2l3X3NldF9mcmFnLAotCUlXX0lPQ1RMKFNJT0NHSVdGUkFHKSAgICAgID0gcm5kaXNfaXdfZ2V0X2ZyYWcsCi0JSVdfSU9DVEwoU0lPQ1NJV1RYUE9XKSAgICAgPSBybmRpc19pd19zZXRfdHhwb3dlciwKLQlJV19JT0NUTChTSU9DR0lXVFhQT1cpICAgICA9IHJuZGlzX2l3X2dldF90eHBvd2VyLAotCUlXX0lPQ1RMKFNJT0NTSVdFTkNPREUpICAgID0gcm5kaXNfaXdfc2V0X2VuY29kZSwKLQlJV19JT0NUTChTSU9DU0lXRU5DT0RFRVhUKSA9IHJuZGlzX2l3X3NldF9lbmNvZGVfZXh0LAotCUlXX0lPQ1RMKFNJT0NTSVdBVVRIKSAgICAgID0gcm5kaXNfaXdfc2V0X2F1dGgsCi0JSVdfSU9DVEwoU0lPQ0dJV0FVVEgpICAgICAgPSBybmRpc19pd19nZXRfYXV0aCwKLQlJV19JT0NUTChTSU9DU0lXR0VOSUUpICAgICA9IHJuZGlzX2l3X3NldF9nZW5pZSwKLQlJV19JT0NUTChTSU9DR0lXR0VOSUUpICAgICA9IHJuZGlzX2l3X2dldF9nZW5pZSwKLQlJV19JT0NUTChTSU9DU0lXTUxNRSkgICAgICA9IHJuZGlzX2l3X3NldF9tbG1lLAotfTsKKwlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOworCXN0cnVjdCBuZGlzXzgwMjExX2Fzc29jX2luZm8gKmluZm87CisJdTggYXNzb2NfYnVmW3NpemVvZigqaW5mbykgKyBJV19DVVNUT01fTUFYICsgMzJdOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwlpbnQgcmVzcF9pZV9sZW4sIHJlcV9pZV9sZW47CisJdTggKnJlcV9pZSwgKnJlc3BfaWU7CisJaW50IHJldCwgb2Zmc2V0OworCWJvb2wgcm9hbWVkID0gZmFsc2U7CiAKLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJuZGlzX3dsYW5fcHJpdmF0ZV9oYW5kbGVyW10gPSB7Ci19OworCWlmIChwcml2LT5pbmZyYV9tb2RlID09IE5ESVNfODAyMTFfSU5GUkFfSU5GUkEgJiYgcHJpdi0+Y29ubmVjdGVkKSB7CisJCS8qIHJlY2VpdmVkIG1lZGlhIGNvbm5lY3QgaW5kaWNhdGlvbiB3aGlsZSBjb25uZWN0ZWQsIGVpdGhlcgorCQkgKiBkZXZpY2UgcmVhc3NvY2lhdGVkIHdpdGggc2FtZSBBUCBvciByb2FtZWQgdG8gbmV3LiAqLworCQlyb2FtZWQgPSB0cnVlOworCX0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19wcml2X2FyZ3Mgcm5kaXNfd2xhbl9wcml2YXRlX2FyZ3NbXSA9IHsKLX07CisJcmVxX2llX2xlbiA9IDA7CisJcmVzcF9pZV9sZW4gPSAwOworCXJlcV9pZSA9IE5VTEw7CisJcmVzcF9pZSA9IE5VTEw7CiAKKwlpZiAocHJpdi0+aW5mcmFfbW9kZSA9PSBORElTXzgwMjExX0lORlJBX0lORlJBKSB7CisJCW1lbXNldChhc3NvY19idWYsIDAsIHNpemVvZihhc3NvY19idWYpKTsKKwkJaW5mbyA9ICh2b2lkICopYXNzb2NfYnVmOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJuZGlzX2l3X2hhbmRsZXJzID0gewotCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKHJuZGlzX2l3X2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZSAgPSBBUlJBWV9TSVpFKHJuZGlzX3dsYW5fcHJpdmF0ZV9oYW5kbGVyKSwKLQkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUocm5kaXNfd2xhbl9wcml2YXRlX2FyZ3MpLAotCS5zdGFuZGFyZCA9IChpd19oYW5kbGVyICopcm5kaXNfaXdfaGFuZGxlciwKLQkucHJpdmF0ZSAgPSAoaXdfaGFuZGxlciAqKXJuZGlzX3dsYW5fcHJpdmF0ZV9oYW5kbGVyLAotCS5wcml2YXRlX2FyZ3MgPSAoc3RydWN0IGl3X3ByaXZfYXJncyAqKXJuZGlzX3dsYW5fcHJpdmF0ZV9hcmdzLAotCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBybmRpc19nZXRfd2lyZWxlc3Nfc3RhdHMsCi19OworCQkvKiBHZXQgYXNzb2NpYXRpb24gaW5mbyBJRXMgZnJvbSBkZXZpY2UgYW5kIHNlbmQgdGhlbSBiYWNrIHRvCisJCSAqIHVzZXJzcGFjZS4gKi8KKwkJcmV0ID0gZ2V0X2Fzc29jaWF0aW9uX2luZm8odXNiZGV2LCBpbmZvLCBzaXplb2YoYXNzb2NfYnVmKSk7CisJCWlmICghcmV0KSB7CisJCQlyZXFfaWVfbGVuID0gbGUzMl90b19jcHUoaW5mby0+cmVxX2llX2xlbmd0aCk7CisJCQlpZiAocmVxX2llX2xlbiA+IDApIHsKKwkJCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShpbmZvLT5vZmZzZXRfcmVxX2llcyk7CisJCQkJcmVxX2llID0gKHU4ICopaW5mbyArIG9mZnNldDsKKwkJCX0KIAorCQkJcmVzcF9pZV9sZW4gPSBsZTMyX3RvX2NwdShpbmZvLT5yZXNwX2llX2xlbmd0aCk7CisJCQlpZiAocmVzcF9pZV9sZW4gPiAwKSB7CisJCQkJb2Zmc2V0ID0gbGUzMl90b19jcHUoaW5mby0+b2Zmc2V0X3Jlc3BfaWVzKTsKKwkJCQlyZXNwX2llID0gKHU4ICopaW5mbyArIG9mZnNldDsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoV0FSTl9PTihwcml2LT5pbmZyYV9tb2RlICE9IE5ESVNfODAyMTFfSU5GUkFfQURIT0MpKQorCQlyZXR1cm47CisKKwlyZXQgPSBnZXRfYnNzaWQodXNiZGV2LCBic3NpZCk7CisJaWYgKHJldCA8IDApCisJCW1lbXNldChic3NpZCwgMCwgc2l6ZW9mKGJzc2lkKSk7CisKKwlkZXZkYmcodXNiZGV2LCAibGluayB1cCB3b3JrOiBbJXBNXSAlcyIsIGJzc2lkLCByb2FtZWQgPyAicm9hbWVkIiA6ICIiKTsKKworCS8qIEludGVybmFsIGJzcyBsaXN0IGluIGRldmljZSBhbHdheXMgY29udGFpbnMgYXQgbGVhc3QgdGhlIGN1cnJlbnRseQorCSAqIGNvbm5lY3RlZCBic3MgYW5kIHdlIGNhbiBnZXQgaXQgdG8gY2ZnODAyMTEgd2l0aAorCSAqIHJuZGlzX2NoZWNrX2Jzc2lkX2xpc3QoKS4KKwkgKiBOT1RFOiBUaGlzIGlzIHRydWUgZm9yIEJyb2FkY29tIGNoaXAsIGJ1dCBub3QgbWVudGlvbmVkIGluIFJORElTCisJICogc3BlYy4KKwkgKi8KKwlybmRpc19jaGVja19ic3NpZF9saXN0KHVzYmRldik7CisKKwlpZiAocHJpdi0+aW5mcmFfbW9kZSA9PSBORElTXzgwMjExX0lORlJBX0lORlJBKSB7CisJCWlmICghcm9hbWVkKQorCQkJY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQodXNiZGV2LT5uZXQsIGJzc2lkLCByZXFfaWUsCisJCQkJCQlyZXFfaWVfbGVuLCByZXNwX2llLAorCQkJCQkJcmVzcF9pZV9sZW4sIDAsIEdGUF9LRVJORUwpOworCQllbHNlCisJCQljZmc4MDIxMV9yb2FtZWQodXNiZGV2LT5uZXQsIGJzc2lkLCByZXFfaWUsIHJlcV9pZV9sZW4sCisJCQkJCXJlc3BfaWUsIHJlc3BfaWVfbGVuLCBHRlBfS0VSTkVMKTsKKwl9IGVsc2UgaWYgKHByaXYtPmluZnJhX21vZGUgPT0gTkRJU184MDIxMV9JTkZSQV9BREhPQykKKwkJY2ZnODAyMTFfaWJzc19qb2luZWQodXNiZGV2LT5uZXQsIGJzc2lkLCBHRlBfS0VSTkVMKTsKKworCXByaXYtPmNvbm5lY3RlZCA9IHRydWU7CisJbWVtY3B5KHByaXYtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCisJdXNibmV0X3Jlc3VtZV9yeCh1c2JkZXYpOworCW5ldGlmX2NhcnJpZXJfb24odXNiZGV2LT5uZXQpOworfQorCitzdGF0aWMgdm9pZCBybmRpc193bGFuX2RvX2xpbmtfZG93bl93b3JrKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIGV2dDsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKHVzYmRldi0+bmV0KTsKKworCWV2dC5kYXRhLmZsYWdzID0gMDsKKwlldnQuZGF0YS5sZW5ndGggPSAwOworCW1lbXNldChldnQuYXBfYWRkci5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJd2lyZWxlc3Nfc2VuZF9ldmVudCh1c2JkZXYtPm5ldCwgU0lPQ0dJV0FQLCAmZXZ0LCBOVUxMKTsKK30KIAogc3RhdGljIHZvaWQgcm5kaXNfd2xhbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSwgd29yayk7CiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwotCXVuaW9uIGl3cmVxX2RhdGEgZXZ0OwotCXVuc2lnbmVkIGNoYXIgYnNzaWRbRVRIX0FMRU5dOwotCXN0cnVjdCBuZGlzXzgwMjExX2Fzc29jX2luZm8gKmluZm87Ci0JaW50IGFzc29jX3NpemUgPSBzaXplb2YoKmluZm8pICsgSVdfQ1VTVE9NX01BWCArIDMyOwotCWludCByZXQsIG9mZnNldDsKIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19MSU5LX1VQLCAmcHJpdi0+d29ya19wZW5kaW5nKSkgewotCQluZXRpZl9jYXJyaWVyX29uKHVzYmRldi0+bmV0KTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfTElOS19VUCwgJnByaXYtPndvcmtfcGVuZGluZykpCisJCXJuZGlzX3dsYW5fZG9fbGlua191cF93b3JrKHVzYmRldik7CiAKLQkJaW5mbyA9IGt6YWxsb2MoYXNzb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghaW5mbykKLQkJCWdvdG8gZ2V0X2Jzc2lkOwotCi0JCS8qIEdldCBhc3NvY2lhdGlvbiBpbmZvIElFcyBmcm9tIGRldmljZSBhbmQgc2VuZCB0aGVtIGJhY2sgdG8KLQkJICogdXNlcnNwYWNlLiAqLwotCQlyZXQgPSBnZXRfYXNzb2NpYXRpb25faW5mbyh1c2JkZXYsIGluZm8sIGFzc29jX3NpemUpOwotCQlpZiAoIXJldCkgewotCQkJZXZ0LmRhdGEubGVuZ3RoID0gbGUzMl90b19jcHUoaW5mby0+cmVxX2llX2xlbmd0aCk7Ci0JCQlpZiAoZXZ0LmRhdGEubGVuZ3RoID4gMCkgewotCQkJCW9mZnNldCA9IGxlMzJfdG9fY3B1KGluZm8tPm9mZnNldF9yZXFfaWVzKTsKLQkJCQl3aXJlbGVzc19zZW5kX2V2ZW50KHVzYmRldi0+bmV0LAotCQkJCQlJV0VWQVNTT0NSRVFJRSwgJmV2dCwKLQkJCQkJKGNoYXIgKilpbmZvICsgb2Zmc2V0KTsKLQkJCX0KLQotCQkJZXZ0LmRhdGEubGVuZ3RoID0gbGUzMl90b19jcHUoaW5mby0+cmVzcF9pZV9sZW5ndGgpOwotCQkJaWYgKGV2dC5kYXRhLmxlbmd0aCA+IDApIHsKLQkJCQlvZmZzZXQgPSBsZTMyX3RvX2NwdShpbmZvLT5vZmZzZXRfcmVzcF9pZXMpOwotCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQodXNiZGV2LT5uZXQsCi0JCQkJCUlXRVZBU1NPQ1JFU1BJRSwgJmV2dCwKLQkJCQkJKGNoYXIgKilpbmZvICsgb2Zmc2V0KTsKLQkJCX0KLQkJfQotCi0JCWtmcmVlKGluZm8pOwotCi1nZXRfYnNzaWQ6Ci0JCXJldCA9IGdldF9ic3NpZCh1c2JkZXYsIGJzc2lkKTsKLQkJaWYgKCFyZXQpIHsKLQkJCWV2dC5kYXRhLmZsYWdzID0gMDsKLQkJCWV2dC5kYXRhLmxlbmd0aCA9IDA7Ci0JCQltZW1jcHkoZXZ0LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQodXNiZGV2LT5uZXQsIFNJT0NHSVdBUCwgJmV2dCwgTlVMTCk7Ci0JCX0KLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfTElOS19ET1dOLCAmcHJpdi0+d29ya19wZW5kaW5nKSkgewotCQluZXRpZl9jYXJyaWVyX29mZih1c2JkZXYtPm5ldCk7Ci0KLQkJZXZ0LmRhdGEuZmxhZ3MgPSAwOwotCQlldnQuZGF0YS5sZW5ndGggPSAwOwotCQltZW1zZXQoZXZ0LmFwX2FkZHIuc2FfZGF0YSwgMCwgRVRIX0FMRU4pOwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHVzYmRldi0+bmV0LCBTSU9DR0lXQVAsICZldnQsIE5VTEwpOwotCX0KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfTElOS19ET1dOLCAmcHJpdi0+d29ya19wZW5kaW5nKSkKKwkJcm5kaXNfd2xhbl9kb19saW5rX2Rvd25fd29yayh1c2JkZXYpOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXT1JLX1NFVF9NVUxUSUNBU1RfTElTVCwgJnByaXYtPndvcmtfcGVuZGluZykpCiAJCXNldF9tdWx0aWNhc3RfbGlzdCh1c2JkZXYpOwpAQCAtMjEzMSwxNSArMjI1MywyMzMgQEAKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBybmRpc193bGFuX2xpbmtfY2hhbmdlKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgcm5kaXNfd2xhbl9hdXRoX2luZGljYXRpb24oc3RydWN0IHVzYm5ldCAqdXNiZGV2LAorCQkJCXN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uICppbmRpY2F0aW9uLAorCQkJCWludCBsZW4pCiB7Ci0Jc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwl1OCAqYnVmOworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IGZsYWdzLCBidWZsZW4sIGtleV9pZDsKKwlib29sIHBhaXJ3aXNlX2Vycm9yLCBncm91cF9lcnJvcjsKKwlzdHJ1Y3QgbmRpc184MDIxMV9hdXRoX3JlcXVlc3QgKmF1dGhfcmVxOworCWVudW0gbmw4MDIxMV9rZXlfdHlwZSBrZXlfdHlwZTsKIAotCS8qIHF1ZXVlIHdvcmsgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIGludG8gcm5kaXNfY29tbWFuZCAqLwotCXNldF9iaXQoc3RhdGUgPyBXT1JLX0xJTktfVVAgOiBXT1JLX0xJTktfRE9XTiwgJnByaXYtPndvcmtfcGVuZGluZyk7Ci0JcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKKwkvKiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFycmF5IGVudHJ5ICovCisJaWYgKGxlbiA8IG9mZnNldG9mKHN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uLCB1KSArCisJCQkJc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMjExX2F1dGhfcmVxdWVzdCkpIHsKKwkJZGV2aW5mbyh1c2JkZXYsICJhdXRoZW50aWNhdGlvbiBpbmRpY2F0aW9uOiAiCisJCQkJInRvbyBzaG9ydCBtZXNzYWdlICglaSkiLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJYnVmID0gKHZvaWQgKikmaW5kaWNhdGlvbi0+dS5hdXRoX3JlcXVlc3RbMF07CisJYnVmbGVuID0gbGVuIC0gb2Zmc2V0b2Yoc3RydWN0IG5kaXNfODAyMTFfc3RhdHVzX2luZGljYXRpb24sIHUpOworCisJd2hpbGUgKGJ1ZmxlbiA+PSBzaXplb2YoKmF1dGhfcmVxKSkgeworCQlhdXRoX3JlcSA9ICh2b2lkICopYnVmOworCQl0eXBlID0gInVua25vd24iOworCQlmbGFncyA9IGxlMzJfdG9fY3B1KGF1dGhfcmVxLT5mbGFncyk7CisJCXBhaXJ3aXNlX2Vycm9yID0gZmFsc2U7CisJCWdyb3VwX2Vycm9yID0gZmFsc2U7CisKKwkJaWYgKGZsYWdzICYgMHgxKQorCQkJdHlwZSA9ICJyZWF1dGggcmVxdWVzdCI7CisJCWlmIChmbGFncyAmIDB4MikKKwkJCXR5cGUgPSAia2V5IHVwZGF0ZSByZXF1ZXN0IjsKKwkJaWYgKGZsYWdzICYgMHg2KSB7CisJCQlwYWlyd2lzZV9lcnJvciA9IHRydWU7CisJCQl0eXBlID0gInBhaXJ3aXNlX2Vycm9yIjsKKwkJfQorCQlpZiAoZmxhZ3MgJiAweGUpIHsKKwkJCWdyb3VwX2Vycm9yID0gdHJ1ZTsKKwkJCXR5cGUgPSAiZ3JvdXBfZXJyb3IiOworCQl9CisKKwkJZGV2aW5mbyh1c2JkZXYsICJhdXRoZW50aWNhdGlvbiBpbmRpY2F0aW9uOiAlcyAoMHglMDh4KSIsIHR5cGUsCisJCQkJbGUzMl90b19jcHUoYXV0aF9yZXEtPmZsYWdzKSk7CisKKwkJaWYgKHBhaXJ3aXNlX2Vycm9yKSB7CisJCQlrZXlfdHlwZSA9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKKwkJCWtleV9pZCA9IC0xOworCisJCQljZmc4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHVzYmRldi0+bmV0LAorCQkJCQkJCWF1dGhfcmVxLT5ic3NpZCwKKwkJCQkJCQlrZXlfdHlwZSwga2V5X2lkLCBOVUxMLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQl9CisKKwkJaWYgKGdyb3VwX2Vycm9yKSB7CisJCQlrZXlfdHlwZSA9IE5MODAyMTFfS0VZVFlQRV9HUk9VUDsKKwkJCWtleV9pZCA9IC0xOworCisJCQljZmc4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHVzYmRldi0+bmV0LAorCQkJCQkJCWF1dGhfcmVxLT5ic3NpZCwKKwkJCQkJCQlrZXlfdHlwZSwga2V5X2lkLCBOVUxMLAorCQkJCQkJCUdGUF9LRVJORUwpOworCQl9CisKKwkJYnVmbGVuIC09IGxlMzJfdG9fY3B1KGF1dGhfcmVxLT5sZW5ndGgpOworCQlidWYgKz0gbGUzMl90b19jcHUoYXV0aF9yZXEtPmxlbmd0aCk7CisJfQogfQogCitzdGF0aWMgdm9pZCBybmRpc193bGFuX3Bta2lkX2NhbmRfbGlzdF9pbmRpY2F0aW9uKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwKKwkJCQlzdHJ1Y3QgbmRpc184MDIxMV9zdGF0dXNfaW5kaWNhdGlvbiAqaW5kaWNhdGlvbiwKKwkJCQlpbnQgbGVuKQoreworCXN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRfbGlzdCAqY2FuZF9saXN0OworCWludCBsaXN0X2xlbiwgZXhwZWN0ZWRfbGVuLCBpOworCisJaWYgKGxlbiA8IG9mZnNldG9mKHN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uLCB1KSArCisJCQkJc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRfbGlzdCkpIHsKKwkJZGV2aW5mbyh1c2JkZXYsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiAiCisJCQkJInRvbyBzaG9ydCBtZXNzYWdlICglaSkiLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJbGlzdF9sZW4gPSBsZTMyX3RvX2NwdShpbmRpY2F0aW9uLT51LmNhbmRfbGlzdC5udW1fY2FuZGlkYXRlcykgKgorCQkJc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRpZGF0ZSk7CisJZXhwZWN0ZWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRfbGlzdCkgKyBsaXN0X2xlbiArCisJCQlvZmZzZXRvZihzdHJ1Y3QgbmRpc184MDIxMV9zdGF0dXNfaW5kaWNhdGlvbiwgdSk7CisKKwlpZiAobGVuIDwgZXhwZWN0ZWRfbGVuKSB7CisJCWRldmluZm8odXNiZGV2LCAicG1raWQgY2FuZGlkYXRlIGxpc3QgaW5kaWNhdGlvbjogIgorCQkJCSJsaXN0IGxhcmdlciB0aGFuIGJ1ZmZlciAoJWkgPCAlaSkiLAorCQkJCWxlbiwgZXhwZWN0ZWRfbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWNhbmRfbGlzdCA9ICZpbmRpY2F0aW9uLT51LmNhbmRfbGlzdDsKKworCWRldmluZm8odXNiZGV2LCAicG1raWQgY2FuZGlkYXRlIGxpc3QgaW5kaWNhdGlvbjogIgorCQkJInZlcnNpb24gJWksIGNhbmRpZGF0ZXMgJWkiLAorCQkJbGUzMl90b19jcHUoY2FuZF9saXN0LT52ZXJzaW9uKSwKKwkJCWxlMzJfdG9fY3B1KGNhbmRfbGlzdC0+bnVtX2NhbmRpZGF0ZXMpKTsKKworCWlmIChsZTMyX3RvX2NwdShjYW5kX2xpc3QtPnZlcnNpb24pICE9IDEpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBsZTMyX3RvX2NwdShjYW5kX2xpc3QtPm51bV9jYW5kaWRhdGVzKTsgaSsrKSB7CisJCXN0cnVjdCBuZGlzXzgwMjExX3Bta2lkX2NhbmRpZGF0ZSAqY2FuZCA9CisJCQkJCQkmY2FuZF9saXN0LT5jYW5kaWRhdGVfbGlzdFtpXTsKKworCQlkZXZkYmcodXNiZGV2LCAiY2FuZFslaV06IGZsYWdzOiAweCUwOHgsIGJzc2lkOiAlcE0iLAorCQkJCWksIGxlMzJfdG9fY3B1KGNhbmQtPmZsYWdzKSwgY2FuZC0+YnNzaWQpOworCisjaWYgMAorCQlzdHJ1Y3QgaXdfcG1raWRfY2FuZCBwY2FuZDsKKwkJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCisJCW1lbXNldCgmcGNhbmQsIDAsIHNpemVvZihwY2FuZCkpOworCQlpZiAobGUzMl90b19jcHUoY2FuZC0+ZmxhZ3MpICYgMHgwMSkKKwkJCXBjYW5kLmZsYWdzIHw9IElXX1BNS0lEX0NBTkRfUFJFQVVUSDsKKwkJcGNhbmQuaW5kZXggPSBpOworCQltZW1jcHkocGNhbmQuYnNzaWQuc2FfZGF0YSwgY2FuZC0+YnNzaWQsIEVUSF9BTEVOKTsKKworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCXdycXUuZGF0YS5sZW5ndGggPSBzaXplb2YocGNhbmQpOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KHVzYmRldi0+bmV0LCBJV0VWUE1LSURDQU5ELCAmd3JxdSwKKwkJCQkJCQkJKHU4ICopJnBjYW5kKTsKKyNlbmRpZgorCX0KK30KKworc3RhdGljIHZvaWQgcm5kaXNfd2xhbl9tZWRpYV9zcGVjaWZpY19pbmRpY2F0aW9uKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwKKwkJCXN0cnVjdCBybmRpc19pbmRpY2F0ZSAqbXNnLCBpbnQgYnVmbGVuKQoreworCXN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uICppbmRpY2F0aW9uOworCWludCBsZW4sIG9mZnNldDsKKworCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBybmRpc19pbmRpY2F0ZSwgc3RhdHVzKSArCisJCQlsZTMyX3RvX2NwdShtc2ctPm9mZnNldCk7CisJbGVuID0gbGUzMl90b19jcHUobXNnLT5sZW5ndGgpOworCisJaWYgKGxlbiA8IDgpIHsKKwkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBzcGVjaWZpYyBpbmRpY2F0aW9uLCAiCisJCQkJImlnbm9yZSB0b28gc2hvcnQgbWVzc2FnZSAoJWkgPCA4KSIsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2Zmc2V0ICsgbGVuID4gYnVmbGVuKSB7CisJCWRldmluZm8odXNiZGV2LCAibWVkaWEgc3BlY2lmaWMgaW5kaWNhdGlvbiwgIgorCQkJCSJ0b28gbGFyZ2UgdG8gZml0IHRvIGJ1ZmZlciAoJWkgPiAlaSkiLAorCQkJCW9mZnNldCArIGxlbiwgYnVmbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWluZGljYXRpb24gPSAodm9pZCAqKSgodTggKiltc2cgKyBvZmZzZXQpOworCisJc3dpdGNoIChsZTMyX3RvX2NwdShpbmRpY2F0aW9uLT5zdGF0dXNfdHlwZSkpIHsKKwljYXNlIE5ESVNfODAyMTFfU1RBVFVTVFlQRV9SQURJT1NUQVRFOgorCQlkZXZpbmZvKHVzYmRldiwgInJhZGlvIHN0YXRlIGluZGljYXRpb246ICVpIiwKKwkJCWxlMzJfdG9fY3B1KGluZGljYXRpb24tPnUucmFkaW9fc3RhdHVzKSk7CisJCXJldHVybjsKKworCWNhc2UgTkRJU184MDIxMV9TVEFUVVNUWVBFX01FRElBU1RSRUFNTU9ERToKKwkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBzdHJlYW0gbW9kZSBpbmRpY2F0aW9uOiAlaSIsCisJCQlsZTMyX3RvX2NwdShpbmRpY2F0aW9uLT51Lm1lZGlhX3N0cmVhbV9tb2RlKSk7CisJCXJldHVybjsKKworCWNhc2UgTkRJU184MDIxMV9TVEFUVVNUWVBFX0FVVEhFTlRJQ0FUSU9OOgorCQlybmRpc193bGFuX2F1dGhfaW5kaWNhdGlvbih1c2JkZXYsIGluZGljYXRpb24sIGxlbik7CisJCXJldHVybjsKKworCWNhc2UgTkRJU184MDIxMV9TVEFUVVNUWVBFX1BNS0lEX0NBTkRJREFURUxJU1Q6CisJCXJuZGlzX3dsYW5fcG1raWRfY2FuZF9saXN0X2luZGljYXRpb24odXNiZGV2LCBpbmRpY2F0aW9uLCBsZW4pOworCQlyZXR1cm47CisKKwlkZWZhdWx0OgorCQlkZXZpbmZvKHVzYmRldiwgIm1lZGlhIHNwZWNpZmljIGluZGljYXRpb246ICIKKwkJCQkidW5rbm93biBzdGF0dXMgdHlwZSAweCUwOHgiLAorCQkJCWxlMzJfdG9fY3B1KGluZGljYXRpb24tPnN0YXR1c190eXBlKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBybmRpc193bGFuX2luZGljYXRpb24oc3RydWN0IHVzYm5ldCAqdXNiZGV2LCB2b2lkICppbmQsIGludCBidWZsZW4pCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwlzdHJ1Y3Qgcm5kaXNfaW5kaWNhdGUgKm1zZyA9IGluZDsKKworCXN3aXRjaCAobXNnLT5zdGF0dXMpIHsKKwljYXNlIFJORElTX1NUQVRVU19NRURJQV9DT05ORUNUOgorCQlpZiAocHJpdi0+Y3VycmVudF9jb21tYW5kX29pZCA9PSBPSURfODAyXzExX0FERF9LRVkpIHsKKwkJCS8qIE9JRF84MDJfMTFfQUREX0tFWSBjYXVzZXMgc29tZXRpbWVzIGV4dHJhCisJCQkgKiAibWVkaWEgY29ubmVjdCIgaW5kaWNhdGlvbnMgd2hpY2ggY29uZnVzZXMgZHJpdmVyCisJCQkgKiBhbmQgdXNlcnNwYWNlIHRvIHRoaW5rIHRoYXQgZGV2aWNlIGlzCisJCQkgKiByb2FtaW5nL3JlYXNzb2NpYXRpbmcgd2hlbiBpdCBpc24ndC4KKwkJCSAqLworCQkJZGV2ZGJnKHVzYmRldiwgImlnbm9yZWQgT0lEXzgwMl8xMV9BRERfS0VZIHRyaWdnZXJlZCAiCisJCQkJCSInbWVkaWEgY29ubmVjdCciKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXVzYm5ldF9wYXVzZV9yeCh1c2JkZXYpOworCisJCWRldmluZm8odXNiZGV2LCAibWVkaWEgY29ubmVjdCIpOworCisJCS8qIHF1ZXVlIHdvcmsgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIGludG8gcm5kaXNfY29tbWFuZCAqLworCQlzZXRfYml0KFdPUktfTElOS19VUCwgJnByaXYtPndvcmtfcGVuZGluZyk7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7CisJCWJyZWFrOworCisJY2FzZSBSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVDoKKwkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBkaXNjb25uZWN0Iik7CisKKwkJLyogcXVldWUgd29yayB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgaW50byBybmRpc19jb21tYW5kICovCisJCXNldF9iaXQoV09SS19MSU5LX0RPV04sICZwcml2LT53b3JrX3BlbmRpbmcpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmspOworCQlicmVhazsKKworCWNhc2UgUk5ESVNfU1RBVFVTX01FRElBX1NQRUNJRklDX0lORElDQVRJT046CisJCXJuZGlzX3dsYW5fbWVkaWFfc3BlY2lmaWNfaW5kaWNhdGlvbih1c2JkZXYsIG1zZywgYnVmbGVuKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZpbmZvKHVzYmRldiwgImluZGljYXRpb246IDB4JTA4eCIsCisJCQkJbGUzMl90b19jcHUobXNnLT5zdGF0dXMpKTsKKwkJYnJlYWs7CisJfQorfQogCiBzdGF0aWMgaW50IHJuZGlzX3dsYW5fZ2V0X2NhcHMoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewpAQCAtMjE3Nyw3OCArMjUxNyw0NCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQotI2RlZmluZSBTVEFUU19VUERBVEVfSklGRklFUyAoSFopCi1zdGF0aWMgdm9pZCBybmRpc191cGRhdGVfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorI2RlZmluZSBERVZJQ0VfUE9MTEVSX0pJRkZJRVMgKEhaKQorc3RhdGljIHZvaWQgcm5kaXNfZGV2aWNlX3BvbGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlLCBzdGF0c193b3JrLndvcmspOworCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSwKKwkJCQkJCQlkZXZfcG9sbGVyX3dvcmsud29yayk7CiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwotCXN0cnVjdCBpd19zdGF0aXN0aWNzIGl3c3RhdHM7CiAJX19sZTMyIHJzc2ksIHRtcDsKIAlpbnQgbGVuLCByZXQsIGo7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdXBkYXRlX2ppZmZpZXMgPSBTVEFUU19VUERBVEVfSklGRklFUzsKKwlpbnQgdXBkYXRlX2ppZmZpZXMgPSBERVZJQ0VfUE9MTEVSX0pJRkZJRVM7CiAJdm9pZCAqYnVmOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YXRzX2xvY2ssIGZsYWdzKTsKLQltZW1jcHkoJml3c3RhdHMsICZwcml2LT5wcml2c3RhdHMsIHNpemVvZihpd3N0YXRzKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhdHNfbG9jaywgZmxhZ3MpOwotCi0JLyogb25seSB1cGRhdGUgc3RhdHMgd2hlbiBjb25uZWN0ZWQgKi8KLQlpZiAoIWlzX2Fzc29jaWF0ZWQodXNiZGV2KSkgewotCQlpd3N0YXRzLnF1YWwucXVhbCA9IDA7Ci0JCWl3c3RhdHMucXVhbC5sZXZlbCA9IDA7Ci0JCWl3c3RhdHMucXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQKLQkJCQl8IElXX1FVQUxfTEVWRUxfVVBEQVRFRAotCQkJCXwgSVdfUVVBTF9OT0lTRV9JTlZBTElECi0JCQkJfCBJV19RVUFMX1FVQUxfSU5WQUxJRAotCQkJCXwgSVdfUVVBTF9MRVZFTF9JTlZBTElEOworCS8qIE9ubHkgY2hlY2svZG8gd29ya2Fyb3VuZCB3aGVuIGNvbm5lY3RlZC4gQ2FsbGluZyBpc19hc3NvY2lhdGVkKCkKKwkgKiBhbHNvIHBvbGxzIGRldmljZSB3aXRoIHJuZGlzX2NvbW1hbmQoKSBhbmQgY2F0Y2hlcyBmb3IgbWVkaWEgbGluaworCSAqIGluZGljYXRpb25zLgorCSAqLworCWlmICghaXNfYXNzb2NpYXRlZCh1c2JkZXYpKQogCQlnb3RvIGVuZDsKLQl9CiAKIAlsZW4gPSBzaXplb2YocnNzaSk7CiAJcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9SU1NJLCAmcnNzaSwgJmxlbik7Ci0KLQlkZXZkYmcodXNiZGV2LCAic3RhdHM6IE9JRF84MDJfMTFfUlNTSSAtPiAlZCwgcnNzaTolZCIsIHJldCwKLQkJCQkJCQlsZTMyX3RvX2NwdShyc3NpKSk7Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCW1lbXNldCgmaXdzdGF0cy5xdWFsLCAwLCBzaXplb2YoaXdzdGF0cy5xdWFsKSk7Ci0JCWl3c3RhdHMucXVhbC5xdWFsICA9IGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpOwotCQlpd3N0YXRzLnF1YWwubGV2ZWwgPSBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKTsKLQkJaXdzdGF0cy5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRAotCQkJCXwgSVdfUVVBTF9MRVZFTF9VUERBVEVECi0JCQkJfCBJV19RVUFMX05PSVNFX0lOVkFMSUQ7Ci0JfQotCi0JbWVtc2V0KCZpd3N0YXRzLmRpc2NhcmQsIDAsIHNpemVvZihpd3N0YXRzLmRpc2NhcmQpKTsKLQotCWxlbiA9IHNpemVvZih0bXApOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF9HRU5fWE1JVF9FUlJPUiwgJnRtcCwgJmxlbik7CiAJaWYgKHJldCA9PSAwKQotCQlpd3N0YXRzLmRpc2NhcmQubWlzYyArPSBsZTMyX3RvX2NwdSh0bXApOworCQlwcml2LT5sYXN0X3F1YWwgPSBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKTsKIAotCWxlbiA9IHNpemVvZih0bXApOwotCXJldCA9IHJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF9HRU5fUkNWX0VSUk9SLCAmdG1wLCAmbGVuKTsKLQlpZiAocmV0ID09IDApCi0JCWl3c3RhdHMuZGlzY2FyZC5taXNjICs9IGxlMzJfdG9fY3B1KHRtcCk7Ci0KLQlsZW4gPSBzaXplb2YodG1wKTsKLQlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBPSURfR0VOX1JDVl9OT19CVUZGRVIsICZ0bXAsICZsZW4pOwotCWlmIChyZXQgPT0gMCkKLQkJaXdzdGF0cy5kaXNjYXJkLm1pc2MgKz0gbGUzMl90b19jcHUodG1wKTsKKwlkZXZkYmcodXNiZGV2LCAiZGV2LXBvbGxlcjogT0lEXzgwMl8xMV9SU1NJIC0+ICVkLCByc3NpOiVkLCBxdWFsOiAlZCIsCisJCXJldCwgbGUzMl90b19jcHUocnNzaSksIGxldmVsX3RvX3F1YWwobGUzMl90b19jcHUocnNzaSkpKTsKIAogCS8qIFdvcmthcm91bmQgdHJhbnNmZXIgc3RhbGxzIG9uIHBvb3IgcXVhbGl0eSBsaW5rcy4KIAkgKiBUT0RPOiBmaW5kIHJpZ2h0IHdheSB0byBmaXggdGhlc2Ugc3RhbGxzIChhcyBzdGFsbHMgZG8gbm90IGhhcHBlbgogCSAqIHdpdGggbmRpc3dyYXBwZXIvd2luZG93cyBkcml2ZXIpLiAqLwotCWlmIChpd3N0YXRzLnF1YWwucXVhbCA8PSAyNSkgeworCWlmIChwcml2LT5sYXN0X3F1YWwgPD0gMjUpIHsKIAkJLyogRGVjcmVhc2Ugc3RhdHMgd29ya2VyIGludGVydmFsIHRvIGNhdGNoIHN0YWxscy4KIAkJICogZmFzdGVyLiBGYXN0ZXIgdGhhbiA0MDAtNTAwbXMgY2F1c2VzIHBhY2tldCBsb3NzLAogCQkgKiBTbG93ZXIgZG9lc24ndCBjYXRjaCBzdGFsbHMgZmFzdCBlbm91Z2guCiAJCSAqLwogCQlqID0gbXNlY3NfdG9famlmZmllcyhwcml2LT5wYXJhbV93b3JrYXJvdW5kX2ludGVydmFsKTsKLQkJaWYgKGogPiBTVEFUU19VUERBVEVfSklGRklFUykKLQkJCWogPSBTVEFUU19VUERBVEVfSklGRklFUzsKKwkJaWYgKGogPiBERVZJQ0VfUE9MTEVSX0pJRkZJRVMpCisJCQlqID0gREVWSUNFX1BPTExFUl9KSUZGSUVTOwogCQllbHNlIGlmIChqIDw9IDApCiAJCQlqID0gMTsKIAkJdXBkYXRlX2ppZmZpZXMgPSBqOwpAQCAtMjI2OCwxMSArMjU3NCw4IEBACiAJCXJuZGlzX3F1ZXJ5X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSURfTElTVCwgYnVmLCAmbGVuKTsKIAkJa2ZyZWUoYnVmKTsKIAl9Ci1lbmQ6Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YXRzX2xvY2ssIGZsYWdzKTsKLQltZW1jcHkoJnByaXYtPnByaXZzdGF0cywgJml3c3RhdHMsIHNpemVvZihpd3N0YXRzKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhdHNfbG9jaywgZmxhZ3MpOwogCitlbmQ6CiAJaWYgKHVwZGF0ZV9qaWZmaWVzID49IEhaKQogCQl1cGRhdGVfamlmZmllcyA9IHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUodXBkYXRlX2ppZmZpZXMpOwogCWVsc2UgewpAQCAtMjI4MSwxMCArMjU4NCwxMyBAQAogCQkJdXBkYXRlX2ppZmZpZXMgPSBqOwogCX0KIAotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zdGF0c193b3JrLCB1cGRhdGVfamlmZmllcyk7CisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPmRldl9wb2xsZXJfd29yaywKKwkJCQkJCQkJdXBkYXRlX2ppZmZpZXMpOwogfQogCi0KKy8qCisgKiBkcml2ZXIvZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKi8KIHN0YXRpYyBpbnQgYmNtNDMyMGFfZWFybHlfaW5pdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CiAJLyogYmNtNDMyMGEgZG9lc24ndCBoYW5kbGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHdlbGwuIFRyeQpAQCAtMjI5NCw3ICsyNjAwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGJjbTQzMjBiX2Vhcmx5X2luaXQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQogewogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CkBAIC0yMzczLDcgKzI2NzgsNiBAQAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gcm5kaXNfd2xhbl9zZXRfbXVsdGljYXN0X2xpc3QsCiB9OwogCi0KIHN0YXRpYyBpbnQgcm5kaXNfd2xhbl9iaW5kKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKQEAgLTIzOTgsMTYgKzI3MDIsMTQgQEAKIAkgKiBPdGhlcndpc2Ugd2UnbGwgYmUgaW4gYmlnIHRyb3VibGUgaW4gcm5kaXNfd2xhbl9lYXJseV9pbml0KCkuCiAJICovCiAJdXNiZGV2LT5kcml2ZXJfcHJpdiA9IHByaXY7Ci0JdXNiZGV2LT5uZXQtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJuZGlzX2l3X2hhbmRsZXJzOwogCXByaXYtPnVzYmRldiA9IHVzYmRldjsKIAogCW11dGV4X2luaXQoJnByaXYtPmNvbW1hbmRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YXRzX2xvY2spOwogCiAJLyogYmVjYXVzZSBybmRpc19jb21tYW5kKCkgc2xlZXBzIHdlIG5lZWQgdG8gdXNlIHdvcmtxdWV1ZSAqLwogCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJybmRpc193bGFuIik7CiAJSU5JVF9XT1JLKCZwcml2LT53b3JrLCBybmRpc193bGFuX3dvcmtlcik7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnN0YXRzX3dvcmssIHJuZGlzX3VwZGF0ZV93aXJlbGVzc19zdGF0cyk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmRldl9wb2xsZXJfd29yaywgcm5kaXNfZGV2aWNlX3BvbGxlcik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnNjYW5fd29yaywgcm5kaXNfZ2V0X3NjYW5fcmVzdWx0cyk7CiAKIAkvKiB0cnkgYmluZCBybmRpc19ob3N0ICovCkBAIC0yNDM5LDE0ICsyNzQxLDYgQEAKIAllbHNlCiAJCXVzYmRldi0+bmV0LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsKIAotCXByaXYtPml3c3RhdHMucXVhbC5xdWFsID0gMDsKLQlwcml2LT5pd3N0YXRzLnF1YWwubGV2ZWwgPSAwOwotCXByaXYtPml3c3RhdHMucXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQKLQkJCQkJfCBJV19RVUFMX0xFVkVMX1VQREFURUQKLQkJCQkJfCBJV19RVUFMX05PSVNFX0lOVkFMSUQKLQkJCQkJfCBJV19RVUFMX1FVQUxfSU5WQUxJRAotCQkJCQl8IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKLQogCS8qIGZpbGwtb3V0IHdpcGh5IHN0cnVjdHVyZSBhbmQgcmVnaXN0ZXIgdy8gY2ZnODAyMTEgKi8KIAltZW1jcHkod2lwaHktPnBlcm1fYWRkciwgdXNiZGV2LT5uZXQtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJd2lwaHktPnByaXZpZCA9IHJuZGlzX3dpcGh5X3ByaXZpZDsKQEAgLTI0NTQsNyArMjc0OCw3IEBACiAJCQkJCXwgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKIAl3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOwogCi0JLyogVE9ETzogZmlsbC1vdXQgYmFuZCBpbmZvcm1hdGlvbiBiYXNlZCBvbiBwcml2LT5jYXBzICovCisJLyogVE9ETzogZmlsbC1vdXQgYmFuZC9lbmNyIGluZm9ybWF0aW9uIGJhc2VkIG9uIHByaXYtPmNhcHMgKi8KIAlybmRpc193bGFuX2dldF9jYXBzKHVzYmRldik7CiAKIAltZW1jcHkocHJpdi0+Y2hhbm5lbHMsIHJuZGlzX2NoYW5uZWxzLCBzaXplb2Yocm5kaXNfY2hhbm5lbHMpKTsKQEAgLTI0NjYsNiArMjc2MCwxMSBAQAogCXdpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOwogCXdpcGh5LT5zaWduYWxfdHlwZSA9IENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzsKIAorCW1lbWNweShwcml2LT5jaXBoZXJfc3VpdGVzLCBybmRpc19jaXBoZXJfc3VpdGVzLAorCQkJCQkJc2l6ZW9mKHJuZGlzX2NpcGhlcl9zdWl0ZXMpKTsKKwl3aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IHByaXYtPmNpcGhlcl9zdWl0ZXM7CisJd2lwaHktPm5fY2lwaGVyX3N1aXRlcyA9IEFSUkFZX1NJWkUocm5kaXNfY2lwaGVyX3N1aXRlcyk7CisKIAlzZXRfd2lwaHlfZGV2KHdpcGh5LCAmdXNiZGV2LT51ZGV2LT5kZXYpOwogCiAJaWYgKHdpcGh5X3JlZ2lzdGVyKHdpcGh5KSkgewpAQCAtMjQ3NSwxOCArMjc3NCwxOSBAQAogCiAJc2V0X2RlZmF1bHRfaXdfcGFyYW1zKHVzYmRldik7CiAKLQkvKiB0dXJuIHJhZGlvIG9uICovCi0JcHJpdi0+cmFkaW9fb24gPSAxOwotCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIDEpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKHVzYmRldi0+bmV0KTsKKwkvKiBzZXQgZGVmYXVsdCBydHMvZnJhZyAqLworCXJuZGlzX3NldF93aXBoeV9wYXJhbXMod2lwaHksCisJCQlXSVBIWV9QQVJBTV9GUkFHX1RIUkVTSE9MRCB8IFdJUEhZX1BBUkFNX1JUU19USFJFU0hPTEQpOwogCi0JcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnN0YXRzX3dvcmssCi0JCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoU1RBVFNfVVBEQVRFX0pJRkZJRVMpKTsKKwkvKiB0dXJuIHJhZGlvIG9uICovCisJcHJpdi0+cmFkaW9fb24gPSB0cnVlOworCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIHRydWUpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHVzYmRldi0+bmV0KTsKIAogCXJldHVybiAwOwogCiBmYWlsOgotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+c3RhdHNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5kZXZfcG9sbGVyX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+c2Nhbl93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT53b3JrKTsKIAlmbHVzaF93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKQEAgLTI0OTYsMTUgKzI3OTYsMTQgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0KIHN0YXRpYyB2b2lkIHJuZGlzX3dsYW5fdW5iaW5kKHN0cnVjdCB1c2JuZXQgKnVzYmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKIAogCS8qIHR1cm4gcmFkaW8gb2ZmICovCi0JZGlzYXNzb2NpYXRlKHVzYmRldiwgMCk7CisJZGlzYXNzb2NpYXRlKHVzYmRldiwgZmFsc2UpOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5zdGF0c193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmRldl9wb2xsZXJfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5zY2FuX3dvcmspOwogCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPndvcmspOwogCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwpAQCAtMjUxOSw1MCArMjgxOCwxMDAgQEAKIAl3aXBoeV9mcmVlKHByaXYtPndkZXYud2lwaHkpOwogfQogCi0KIHN0YXRpYyBpbnQgcm5kaXNfd2xhbl9yZXNldChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCiB7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwlpbnQgcmV0dmFsOworCisJZGV2ZGJnKHVzYmRldiwgInJuZGlzX3dsYW5fcmVzZXQiKTsKKworCXJldHZhbCA9IHJuZGlzX3Jlc2V0KHVzYmRldik7CisJaWYgKHJldHZhbCkKKwkJZGV2d2Fybih1c2JkZXYsICJybmRpc19yZXNldCgpIGZhaWxlZDogJWQiLCByZXR2YWwpOworCisJLyogcm5kaXNfcmVzZXQgY2xlYXJlZCBtdWx0aWNhc3QgbGlzdCwgc28gcmVzdG9yZSBoZXJlLgorCSAgIChzZXRfbXVsdGljYXN0X2xpc3QoKSBhbHNvIHR1cm5zIG9uIGN1cnJlbnQgcGFja2V0IGZpbHRlcikgKi8KKwlzZXRfbXVsdGljYXN0X2xpc3QodXNiZGV2KTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5kZXZfcG9sbGVyX3dvcmssCisJCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoREVWSUNFX1BPTExFUl9KSUZGSUVTKSk7CisKIAlyZXR1cm4gZGVhdXRoZW50aWNhdGUodXNiZGV2KTsKIH0KIAorc3RhdGljIGludCBybmRpc193bGFuX3N0b3Aoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQoreworCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSBnZXRfcm5kaXNfd2xhbl9wcml2KHVzYmRldik7CisJaW50IHJldHZhbDsKKwlfX2xlMzIgZmlsdGVyOworCisJZGV2ZGJnKHVzYmRldiwgInJuZGlzX3dsYW5fc3RvcCIpOworCisJcmV0dmFsID0gZGlzYXNzb2NpYXRlKHVzYmRldiwgZmFsc2UpOworCisJcHJpdi0+d29ya19wZW5kaW5nID0gMDsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmRldl9wb2xsZXJfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5zY2FuX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPndvcmspOworCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOworCisJaWYgKHByaXYtPnNjYW5fcmVxdWVzdCkgeworCQljZmc4MDIxMV9zY2FuX2RvbmUocHJpdi0+c2Nhbl9yZXF1ZXN0LCB0cnVlKTsKKwkJcHJpdi0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKKwl9CisKKwkvKiBTZXQgY3VycmVudCBwYWNrZXQgZmlsdGVyIHplcm8gdG8gYmxvY2sgcmVjZWl2aW5nIGRhdGEgcGFja2V0cyBmcm9tCisJICAgZGV2aWNlLiAqLworCWZpbHRlciA9IDA7CisJcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSLCAmZmlsdGVyLAorCQkJCQkJCQlzaXplb2YoZmlsdGVyKSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvCWJjbTQzMjBiX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIldpcmVsZXNzIFJORElTIGRldmljZSwgQkNNNDMyMGIgYmFzZWQiLAotCS5mbGFncyA9CUZMQUdfV0xBTiB8IEZMQUdfRlJBTUlOR19STiB8IEZMQUdfTk9fU0VUSU5ULAorCS5mbGFncyA9CUZMQUdfV0xBTiB8IEZMQUdfRlJBTUlOR19STiB8IEZMQUdfTk9fU0VUSU5UIHwKKwkJCQlGTEFHX0FWT0lEX1VOTElOS19VUkJTLAogCS5iaW5kID0JCXJuZGlzX3dsYW5fYmluZCwKIAkudW5iaW5kID0Jcm5kaXNfd2xhbl91bmJpbmQsCiAJLnN0YXR1cyA9CXJuZGlzX3N0YXR1cywKIAkucnhfZml4dXAgPQlybmRpc19yeF9maXh1cCwKIAkudHhfZml4dXAgPQlybmRpc190eF9maXh1cCwKIAkucmVzZXQgPQlybmRpc193bGFuX3Jlc2V0LAorCS5zdG9wID0JCXJuZGlzX3dsYW5fc3RvcCwKIAkuZWFybHlfaW5pdCA9CWJjbTQzMjBiX2Vhcmx5X2luaXQsCi0JLmxpbmtfY2hhbmdlID0Jcm5kaXNfd2xhbl9saW5rX2NoYW5nZSwKKwkuaW5kaWNhdGlvbiA9CXJuZGlzX3dsYW5faW5kaWNhdGlvbiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2luZm8JYmNtNDMyMGFfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPQkiV2lyZWxlc3MgUk5ESVMgZGV2aWNlLCBCQ000MzIwYSBiYXNlZCIsCi0JLmZsYWdzID0JRkxBR19XTEFOIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQsCisJLmZsYWdzID0JRkxBR19XTEFOIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQgfAorCQkJCUZMQUdfQVZPSURfVU5MSU5LX1VSQlMsCiAJLmJpbmQgPQkJcm5kaXNfd2xhbl9iaW5kLAogCS51bmJpbmQgPQlybmRpc193bGFuX3VuYmluZCwKIAkuc3RhdHVzID0Jcm5kaXNfc3RhdHVzLAogCS5yeF9maXh1cCA9CXJuZGlzX3J4X2ZpeHVwLAogCS50eF9maXh1cCA9CXJuZGlzX3R4X2ZpeHVwLAogCS5yZXNldCA9CXJuZGlzX3dsYW5fcmVzZXQsCisJLnN0b3AgPQkJcm5kaXNfd2xhbl9zdG9wLAogCS5lYXJseV9pbml0ID0JYmNtNDMyMGFfZWFybHlfaW5pdCwKLQkubGlua19jaGFuZ2UgPQlybmRpc193bGFuX2xpbmtfY2hhbmdlLAorCS5pbmRpY2F0aW9uID0Jcm5kaXNfd2xhbl9pbmRpY2F0aW9uLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBybmRpc193bGFuX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIldpcmVsZXNzIFJORElTIGRldmljZSIsCi0JLmZsYWdzID0JRkxBR19XTEFOIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQsCisJLmZsYWdzID0JRkxBR19XTEFOIHwgRkxBR19GUkFNSU5HX1JOIHwgRkxBR19OT19TRVRJTlQgfAorCQkJCUZMQUdfQVZPSURfVU5MSU5LX1VSQlMsCiAJLmJpbmQgPQkJcm5kaXNfd2xhbl9iaW5kLAogCS51bmJpbmQgPQlybmRpc193bGFuX3VuYmluZCwKIAkuc3RhdHVzID0Jcm5kaXNfc3RhdHVzLAogCS5yeF9maXh1cCA9CXJuZGlzX3J4X2ZpeHVwLAogCS50eF9maXh1cCA9CXJuZGlzX3R4X2ZpeHVwLAogCS5yZXNldCA9CXJuZGlzX3dsYW5fcmVzZXQsCisJLnN0b3AgPQkJcm5kaXNfd2xhbl9zdG9wLAogCS5lYXJseV9pbml0ID0JYmNtNDMyMGFfZWFybHlfaW5pdCwKLQkubGlua19jaGFuZ2UgPQlybmRpc193bGFuX2xpbmtfY2hhbmdlLAorCS5pbmRpY2F0aW9uID0Jcm5kaXNfd2xhbl9pbmRpY2F0aW9uLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKaW5kZXggOGFhYjNlNi4uZWQxZjk5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKQEAgLTEsOCArMSw4IEBACiBtZW51Y29uZmlnIFJUMlgwMAogCXRyaXN0YXRlICJSYWxpbmsgZHJpdmVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgd2lsbCBlbmFibGUgdGhlIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciB0aGUgUmFsaW5rIGRyaXZlcnMsCisJICBUaGlzIHdpbGwgZW5hYmxlIHRoZSBzdXBwb3J0IGZvciB0aGUgUmFsaW5rIGRyaXZlcnMsCiAJICBkZXZlbG9wZWQgaW4gdGhlIHJ0MngwMCBwcm9qZWN0IDxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+LgogCiAJICBUaGVzZSBkcml2ZXJzIG1ha2UgdXNlIG9mIHRoZSBtYWM4MDIxMSBzdGFjay4KQEAgLTc5LDE0ICs3OSwxNCBAQAogCiBjb25maWcgUlQyODAwVVNCCiAJdHJpc3RhdGUgIlJhbGluayBydDI4MDAgKFVTQikgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQgorCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBSVDJYMDBfTElCX1VTQgogCXNlbGVjdCBSVDJYMDBfTElCX0hUCiAJc2VsZWN0IFJUMlgwMF9MSUJfRklSTVdBUkUKIAlzZWxlY3QgUlQyWDAwX0xJQl9DUllQVE8KIAlzZWxlY3QgQ1JDX0NDSVRUCiAJLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MjgwMCB3aXJlbGVzcyBjaGlwc2V0IGZhbWlseS4KKwkgIFRoaXMgYWRkcyBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgcnQyODAwIHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5LgogCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDI3NzAsIFJUMjg3MCAmIFJUMzA3MC4KIAogCSAgV2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZSwgdGhpcyBkcml2ZXIgd2lsbCBiZSBjYWxsZWQgInJ0MjgwMHVzYi5rbyIuCkBAIC0xMTIsMTQgKzExMiw2IEBACiBjb25maWcgUlQyWDAwX0xJQl9DUllQVE8KIAlib29sZWFuCiAKLWNvbmZpZyBSVDJYMDBfTElCX1JGS0lMTAotCWJvb2xlYW4KLQlkZWZhdWx0IHkgaWYgKFJUMlgwMF9MSUI9eSAmJiBJTlBVVD15KSB8fCAoUlQyWDAwX0xJQj1tICYmIElOUFVUIT1uKQotCXNlbGVjdCBJTlBVVF9QT0xMREVWCi0KLWNvbW1lbnQgInJ0MngwMCByZmtpbGwgc3VwcG9ydCBkaXNhYmxlZCBkdWUgdG8gbW9kdWxhcml6ZWQgSU5QVVQgYW5kIGJ1aWx0LWluIHJ0MngwMCIKLQlkZXBlbmRzIG9uIFJUMlgwMF9MSUI9eSAmJiBJTlBVVD1tCi0KIGNvbmZpZyBSVDJYMDBfTElCX0xFRFMKIAlib29sZWFuCiAJZGVmYXVsdCB5IGlmIChSVDJYMDBfTElCPXkgJiYgTEVEU19DTEFTUz15KSB8fCAoUlQyWDAwX0xJQj1tICYmIExFRFNfQ0xBU1MhPW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKaW5kZXggYmZjNzIyNi4uMTMwNDNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQpAQCAtNSw3ICs1LDYgQEAKIHJ0MngwMGxpYi15CQkJCSs9IHJ0MngwMGxpbmsubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUykJKz0gcnQyeDAwZGVidWcubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPKQkrPSBydDJ4MDBjcnlwdG8ubwotcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMKQkrPSBydDJ4MDByZmtpbGwubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfRklSTVdBUkUpCSs9IHJ0MngwMGZpcm13YXJlLm8KIHJ0MngwMGxpYi0kKENPTkZJR19SVDJYMDBfTElCX0xFRFMpCSs9IHJ0MngwMGxlZHMubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfSFQpCSs9IHJ0MngwMGh0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYwppbmRleCA0MzVmOTQ1Li43OThmNjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCkBAIC0xOTksNyArMTk5LDYgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUyAqLwogCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiBzdGF0aWMgaW50IHJ0MjQwMHBjaV9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXUzMiByZWc7CkBAIC0yMDcsOSArMjA2LDYgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEdQSU9DU1IsICZyZWcpOwogCXJldHVybiBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBHUElPQ1NSX0JJVDApOwogfQotI2Vsc2UKLSNkZWZpbmUgcnQyNDAwcGNpX3Jma2lsbF9wb2xsCU5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKQEAgLTMzNSw5ICszMzEsOCBAQAogCXByZWFtYmxlX21hc2sgPSBlcnAtPnNob3J0X3ByZWFtYmxlIDw8IDM7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMV9BQ0tfVElNRU9VVCwgZXJwLT5hY2tfdGltZW91dCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMV9BQ0tfQ09OU1VNRV9USU1FLAotCQkJICAgZXJwLT5hY2tfY29uc3VtZV90aW1lKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19USU1FT1VULCAweDFmZik7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMV9BQ0tfQ09OU1VNRV9USU1FLCAweDEzYSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMV9UU0ZfT0ZGU0VULCBJRUVFODAyMTFfSEVBREVSKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FVVE9SRVNQT05ERVIsIDEpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMSwgcmVnKTsKQEAgLTEwNzMsOCArMTA2OCw2IEBACiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KIAkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjE0LCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVFNGX0NPVU5ULCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMTRfVEJDTiwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X0JFQUNPTl9HRU4sIDApOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCByZWcpOwogCkBAIC0xMzkxLDEwICsxMzg0LDggQEAKIAkvKgogCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KIAkgKi8KLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIAlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZSBCQlAgdHVuaW5nIHNob3VsZCBiZSBlbmFibGVkLgpAQCAtMTU2NywxMiArMTU1OCwxNCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAorCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MjQwMHBjaV9jb25mX3R4LAogCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDI0MDBwY2lfZ2V0X3RzZiwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNDAwcGNpX3R4X2xhc3RfYmVhY29uLAorCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQyNDAwcGNpX3J0MngwMF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKaW5kZXggZWMzYjAwNC4uY2NkNjQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaApAQCAtOTI4LDcgKzkyOCw3IEBACiAjZGVmaW5lIFJYRF9XN19SRVNFUlZFRAkJCUZJRUxEMzIoMHhmZmZmZmZmZikKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKICAqIGFuZCBmcm9tIG1hYzgwMjExIHZhbHVlIHRvIHJlZ2lzdGVyIHZhbHVlLgogICogTk9URTogTG9naWNzIGluIHJ0MjQwMHBjaSBmb3IgdHhwb3dlciBhcmUgcmV2ZXJzZWQKICAqIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBydDJ4MDAgZHJpdmVycy4gQSBoaWdoZXIgdHhwb3dlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCmluZGV4IDA4YjMwZDAuLjJlODcyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKQEAgLTE5OSw3ICsxOTksNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIHN0YXRpYyBpbnQgcnQyNTAwcGNpX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTMyIHJlZzsKQEAgLTIwNyw5ICsyMDYsNiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgR1BJT0NTUiwgJnJlZyk7CiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIEdQSU9DU1JfQklUMCk7CiB9Ci0jZWxzZQotI2RlZmluZSBydDI1MDBwY2lfcmZraWxsX3BvbGwJTlVMTAotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQyNTAwcGNpX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LApAQCAtMzQxLDkgKzMzNyw4IEBACiAJcHJlYW1ibGVfbWFzayA9IGVycC0+c2hvcnRfcHJlYW1ibGUgPDwgMzsKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IxLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19USU1FT1VULCBlcnAtPmFja190aW1lb3V0KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsCi0JCQkgICBlcnAtPmFja19jb25zdW1lX3RpbWUpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfQUNLX1RJTUVPVVQsIDB4MTYyKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IxX0FDS19DT05TVU1FX1RJTUUsIDB4YTIpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjFfVFNGX09GRlNFVCwgSUVFRTgwMjExX0hFQURFUik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYQ1NSMV9BVVRPUkVTUE9OREVSLCAxKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjEsIHJlZyk7CkBAIC0xMjMxLDggKzEyMjYsNiBAQAogCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBiZSBzZW5kaW5nIG91dCBpbnZhbGlkIGRhdGEuCiAJICovCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBDU1IxNCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RTRl9DT1VOVCwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjE0X1RCQ04sIDApOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IxNF9CRUFDT05fR0VOLCAwKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgcmVnKTsKIApAQCAtMTU0OCwxMCArMTU0MSw4IEBACiAJLyoKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgQkJQIHR1bmluZyBzaG91bGQgYmUgZW5hYmxlZC4KQEAgLTE4NjYsMTIgKzE4NTcsMTQgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0MngwMG1hY19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcJCQk9IHJ0MngwMG1hY19jb25maWcsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlciwKKwkuc2V0X3RpbQkJPSBydDJ4MDBtYWNfc2V0X3RpbSwKIAkuZ2V0X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfc3RhdHMsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZCwKIAkuY29uZl90eAkJPSBydDJ4MDBtYWNfY29uZl90eCwKIAkuZ2V0X3R4X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YJCT0gcnQyNTAwcGNpX2dldF90c2YsCiAJLnR4X2xhc3RfYmVhY29uCQk9IHJ0MjUwMHBjaV90eF9sYXN0X2JlYWNvbiwKKwkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjUwMHBjaV9ydDJ4MDBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCmluZGV4IGNlMmYwNjUuLjU0ZDM3OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKQEAgLTEyMTgsNyArMTIxOCw3IEBACiAjZGVmaW5lIFJYRF9XMTBfRFJPUAkJCUZJRUxEMzIoMHgwMDAwMDAwMSkKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKICAqIGFuZCBmcm9tIG1hYzgwMjExIHZhbHVlIHRvIHJlZ2lzdGVyIHZhbHVlLgogICovCiAjZGVmaW5lIE1JTl9UWFBPV0VSCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwppbmRleCBjZTc1NDI2Li4yMmRkNmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCkBAIC0yNzcsNyArMjc3LDYgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUyAqLwogCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiBzdGF0aWMgaW50IHJ0MjUwMHVzYl9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXUxNiByZWc7CkBAIC0yODUsOSArMjg0LDYgQEAKIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxOSwgJnJlZyk7CiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxOV9CSVQ3KTsKIH0KLSNlbHNlCi0jZGVmaW5lIHJ0MjUwMHVzYl9yZmtpbGxfcG9sbAlOVUxMCi0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDI1MDB1c2JfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCkBAIC00OTIsMTAgKzQ4OCw2IEBACiB7CiAJdTE2IHJlZzsKIAotCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IxLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxX0FDS19USU1FT1VULCBlcnAtPmFja190aW1lb3V0KTsKLQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjEsIHJlZyk7Ci0KIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMTAsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjEwX0FVVE9SRVNQT05EX1BSRUFNQkxFLAogCQkJICAgISFlcnAtPnNob3J0X3ByZWFtYmxlKTsKQEAgLTEyNDIsOCArMTIzNCw2IEBACiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KIAkgKi8KIAlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMTksICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X1RTRl9DT1VOVCwgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfVEJDTiwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIFRYUlhfQ1NSMTlfQkVBQ09OX0dFTiwgMCk7CiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnKTsKIApAQCAtMTI5MSw3ICsxMjgxLDcgQEAKIHN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9raWNrX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcXVldWUpCiB7Ci0JdTE2IHJlZzsKKwl1MTYgcmVnLCByZWcwOwogCiAJaWYgKHF1ZXVlICE9IFFJRF9CRUFDT04pIHsKIAkJcnQyeDAwdXNiX2tpY2tfdHhfcXVldWUocnQyeDAwZGV2LCBxdWV1ZSk7CkBAIC0xMzAyLDE2ICsxMjkyLDE5IEBACiAJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMTYocmVnLCBUWFJYX0NTUjE5X0JFQUNPTl9HRU4pKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X1RTRl9DT1VOVCwgMSk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBUWFJYX0NTUjE5X1RCQ04sIDEpOworCQlyZWcwID0gcmVnOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgVFhSWF9DU1IxOV9CRUFDT05fR0VOLCAxKTsKIAkJLyoKIAkJICogQmVhY29uIGdlbmVyYXRpb24gd2lsbCBmYWlsIGluaXRpYWxseS4KLQkJICogVG8gcHJldmVudCB0aGlzIHdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhlIFRYUlhfQ1NSMTkKLQkJICogcmVnaXN0ZXIgc2V2ZXJhbCB0aW1lcy4KKwkJICogVG8gcHJldmVudCB0aGlzIHdlIG5lZWQgdG8gY2hhbmdlIHRoZSBUWFJYX0NTUjE5CisJCSAqIHJlZ2lzdGVyIHNldmVyYWwgdGltZXMgKHJlZzAgaXMgdGhlIHNhbWUgYXMgcmVnCisJCSAqIGV4Y2VwdCBmb3IgVFhSWF9DU1IxOV9CRUFDT05fR0VOLCB3aGljaCBpcyAwIGluIHJlZzAKKwkJICogYW5kIDEgaW4gcmVnKS4KIAkJICovCiAJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIHJlZyk7Ci0JCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIDApOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCByZWcwKTsKIAkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgcmVnKTsKLQkJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOSwgMCk7CisJCXJ0MjUwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMTksIHJlZzApOwogCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjE5LCByZWcpOwogCX0KIH0KQEAgLTE2MDMsMTAgKzE1OTYsOCBAQAogCS8qCiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogCS8qCiAJICogQ2hlY2sgaWYgdGhlIEJCUCB0dW5pbmcgc2hvdWxkIGJlIGRpc2FibGVkLgpAQCAtMTg3OSw3ICsxODcwLDYgQEAKIAkgKi8KIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncyk7CiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpIHsKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCQlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfQ09QWV9JViwgJnJ0MngwMGRldi0+ZmxhZ3MpOwpAQCAtMTkwMiwxMSArMTg5MiwxMyBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAorCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAogCS5zZXRfa2V5CQk9IHJ0MngwMG1hY19zZXRfa2V5LAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LAogCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKKwkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjUwMHVzYl9ydDJ4MDBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCmluZGV4IDViYzQ2ZmUuLmIwMWVkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKQEAgLTgzMSw3ICs4MzEsNyBAQAogI2RlZmluZSBSWERfVzNfRUlWCQkJRklFTEQzMigweGZmZmZmZmZmKQogCiAvKgotICogTWFjcm8ncyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCisgKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQogICogYW5kIGZyb20gbWFjODAyMTEgdmFsdWUgdG8gcmVnaXN0ZXIgdmFsdWUuCiAgKi8KICNkZWZpbmUgTUlOX1RYUE9XRVIJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCmluZGV4IDM3NTYxNjYuLmEwODQwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKQEAgLTI2NCw3ICsyNjQsNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIHN0YXRpYyBpbnQgcnQyODAwdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJdTMyIHJlZzsKQEAgLTI3Miw5ICsyNzEsNiBAQAogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgR1BJT19DVFJMX0NGRywgJnJlZyk7CiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIEdQSU9fQ1RSTF9DRkdfQklUMik7CiB9Ci0jZWxzZQotI2RlZmluZSBydDI4MDB1c2JfcmZraWxsX3BvbGwJTlVMTAotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQyODAwdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LApAQCAtNTIyLDcgKzUxOCw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYX0ZJTFRFUl9DRkdfRFJPUF9SVFMsCiAJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9DT05UUk9MKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYX0ZJTFRFUl9DRkdfRFJPUF9QU1BPTEwsCi0JCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9DT05UUk9MKSk7CisJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QU1BPTEwpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfRklMVEVSX0NGR19EUk9QX0JBLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgUlhfRklMVEVSX0NGR19EUk9QX0JBUiwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFJYX0ZJTFRFUl9DRkdfRFJPUF9DTlRMLApAQCAtNTg0LDggKzU4MCw3IEBACiAJdTMyIHJlZzsKIAogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhfVElNRU9VVF9DRkcsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9USU1FT1VUX0NGR19SWF9BQ0tfVElNRU9VVCwKLQkJCSAgIERJVl9ST1VORF9VUChlcnAtPmFja190aW1lb3V0LCBlcnAtPnNsb3RfdGltZSkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9USU1FT1VUX0NGR19SWF9BQ0tfVElNRU9VVCwgMHgyMCk7CiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfVElNRU9VVF9DRkcsIHJlZyk7CiAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFVVE9fUlNQX0NGRywgJnJlZyk7CkBAIC0xNDY3LDYgKzE0NjIsMTAgQEAKIAkvKgogCSAqIEFTSUMgd2lsbCBrZWVwIGdhcmJhZ2UgdmFsdWUgYWZ0ZXIgYm9vdCwgY2xlYXIgZW5jcnlwdGlvbiBrZXlzLgogCSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsCisJCQkJCSBTSEFSRURfS0VZX01PREVfRU5UUlkoaSksIDApOworCiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCXUzMiB3Y2lkWzJdID0geyAweGZmZmZmZmZmLCAweDAwZmZmZmZmIH07CiAJCXJ0MngwMHVzYl9yZWdpc3Rlcl9tdWx0aXdyaXRlKHJ0MngwMGRldiwgTUFDX1dDSURfRU5UUlkoaSksCkBAIC0xNDc2LDEwICsxNDc1LDYgQEAKIAkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0lWRUlWX0VOVFJZKGkpLCAwKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwKLQkJCQkJIFNIQVJFRF9LRVlfTU9ERV9FTlRSWShpKSwgMCk7Ci0KIAkvKgogCSAqIENsZWFyIGFsbCBiZWFjb25zCiAJICogRm9yIHRoZSBCZWFjb24gYmFzZSByZWdpc3RlcnMgd2Ugb25seSBuZWVkIHRvIGNsZWFyCkBAIC0xNTI0LDcgKzE1MTksNyBAQAogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTEdfRkJLX0NGRzAsICZyZWcpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMR19GQktfQ0ZHMF9PRkRNTUNTMEZCSywgOCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExHX0ZCS19DRkcwX09GRE1NQ1MxRkJLLCA4KTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTEdfRkJLX0NGRzBfT0ZETU1DUzJGQkssIDMpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBMR19GQktfQ0ZHMF9PRkRNTUNTMkZCSywgOSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExHX0ZCS19DRkcwX09GRE1NQ1MzRkJLLCAxMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExHX0ZCS19DRkcwX09GRE1NQ1M0RkJLLCAxMSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIExHX0ZCS19DRkcwX09GRE1NQ1M1RkJLLCAxMik7CkBAIC0xOTE0LDcgKzE5MDksNyBAQAogCQkvKgogCQkgKiBCZWZvcmUgdGhlIHJhZGlvIGNhbiBiZSBlbmFibGVkLCB0aGUgZGV2aWNlIGZpcnN0IGhhcwogCQkgKiB0byBiZSB3b2tlbiB1cC4gQWZ0ZXIgdGhhdCBpdCBuZWVkcyBhIGJpdCBvZiB0aW1lCi0JCSAqIHRvIGJlIGZ1bGx5IGF3YWtlIGFuZCB0aGUgcmFkaW8gY2FuIGJlIGVuYWJsZWQuCisJCSAqIHRvIGJlIGZ1bGx5IGF3YWtlIGFuZCB0aGVuIHRoZSByYWRpbyBjYW4gYmUgZW5hYmxlZC4KIAkJICovCiAJCXJ0MjgwMHVzYl9zZXRfc3RhdGUocnQyeDAwZGV2LCBTVEFURV9BV0FLRSk7CiAJCW1zbGVlcCgxKTsKQEAgLTE5MjIsNyArMTkxNyw3IEBACiAJCWJyZWFrOwogCWNhc2UgU1RBVEVfUkFESU9fT0ZGOgogCQkvKgotCQkgKiBBZnRlciB0aGUgcmFkaW8gaGFzIGJlZW4gZGlzYWJsZWUsIHRoZSBkZXZpY2Ugc2hvdWxkCisJCSAqIEFmdGVyIHRoZSByYWRpbyBoYXMgYmVlbiBkaXNhYmxlZCwgdGhlIGRldmljZSBzaG91bGQKIAkJICogYmUgcHV0IHRvIHNsZWVwIGZvciBwb3dlcnNhdmluZy4KIAkJICovCiAJCXJ0MjgwMHVzYl9kaXNhYmxlX3JhZGlvKHJ0MngwMGRldik7CkBAIC0xOTk5LDExICsxOTk0LDExIEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX0JXX1dJTl9TSVpFLCB0eGRlc2MtPmJhX3NpemUpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhXSV9XMV9XSVJFTEVTU19DTElfSUQsCiAJCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy0+ZmxhZ3MpID8KLQkJCSAgICAgICB0eGRlc2MtPmtleV9pZHggOiAweGZmKTsKKwkJCSAgICAgICAoc2tiZGVzYy0+ZW50cnktPmVudHJ5X2lkeCArIDEpIDogMHhmZik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX01QRFVfVE9UQUxfQllURV9DT1VOVCwKIAkJCSAgIHNrYi0+bGVuIC0gdHhkZXNjLT5sMnBhZCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWFdJX1cxX1BBQ0tFVElELAotCQkJICAgc2tiZGVzYy0+ZW50cnktPmVudHJ5X2lkeCk7CisJCQkgICBza2JkZXNjLT5lbnRyeS0+cXVldWUtPnFpZCArIDEpOwogCXJ0MngwMF9kZXNjX3dyaXRlKHR4d2ksIDEsIHdvcmQpOwogCiAJLyoKQEAgLTIwNTQsOCArMjA0OSw2IEBACiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KIAkgKi8KIAlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEJDTl9USU1FX0NGRywgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UU0ZfVElDS0lORywgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19UQlRUX0VOQUJMRSwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJDTl9USU1FX0NGR19CRUFDT05fR0VOLCAwKTsKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBCQ05fVElNRV9DRkcsIHJlZyk7CiAKQEAgLTIxNjksOCArMjE2MiwxMCBAQAogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhEX1cwX01ZX0JTUykpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9NWV9CU1M7CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9MMlBBRCkpCisJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQwLCBSWERfVzBfTDJQQUQpKSB7CiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9MMlBBRDsKKwkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7CisJfQogCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeHdpMSwgUlhXSV9XMV9TSE9SVF9HSSkpCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19TSE9SVF9HSTsKQEAgLTIyMjQsMTAgKzIyMTksOCBAQAogCSAqLwogCW1hYyA9IHJ0MngwMF9lZXByb21fYWRkcihydDJ4MDBkZXYsIEVFUFJPTV9NQUNfQUREUl8wKTsKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjKSkgewotCQlERUNMQVJFX01BQ19CVUYobWFjYnVmKTsKLQogCQlyYW5kb21fZXRoZXJfYWRkcihtYWMpOwotCQlFRVBST00ocnQyeDAwZGV2LCAiTUFDOiAlc1xuIiwgcHJpbnRfbWFjKG1hY2J1ZiwgbWFjKSk7CisJCUVFUFJPTShydDJ4MDBkZXYsICJNQUM6ICVwTVxuIiwgbWFjKTsKIAl9CiAKIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fQU5URU5OQSwgJndvcmQpOwpAQCAtMjM4NSwxMCArMjM3OCw4IEBACiAJLyoKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfSFdfUkFESU8pKQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKIAkvKgogCSAqIFN0b3JlIGxlZCBzZXR0aW5ncywgZm9yIGNvcnJlY3QgbGVkIGJlaGF2aW91ci4KQEAgLTI2MzIsMTAgKzI2MjMsMTYgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAogCS8qCisJICogVGhpcyBkZXZpY2UgaGFzIG11bHRpcGxlIGZpbHRlcnMgZm9yIGNvbnRyb2wgZnJhbWVzCisJICogYW5kIGhhcyBhIHNlcGFyYXRlIGZpbHRlciBmb3IgUFMgUG9sbCBmcmFtZXMuCisJICovCisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSUywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCV9fc2V0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsICZydDJ4MDBkZXYtPmZsYWdzKTsKKworCS8qCiAJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCiAJICovCiAJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0ZJUk1XQVJFLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCWlmICghbW9kcGFyYW1fbm9od2NyeXB0KQogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7CkBAIC0yNzkyLDYgKzI3ODksNyBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAorCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAogCS5zZXRfa2V5CQk9IHJ0MngwMG1hY19zZXRfa2V5LAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuZ2V0X3RraXBfc2VxCQk9IHJ0MjgwMHVzYl9nZXRfdGtpcF9zZXEsCkBAIC0yODAwLDYgKzI3OTgsNyBAQAogCS5jb25mX3R4CQk9IHJ0MjgwMHVzYl9jb25mX3R4LAogCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDI4MDB1c2JfZ2V0X3RzZiwKKwkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydDJ4MDBsaWJfb3BzIHJ0MjgwMHVzYl9ydDJ4MDBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oCmluZGV4IDYxYThiZTYuLjRkOTk5MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmgKQEAgLTM2LDYgKzM2LDkgQEAKICAqIFJGMjc1MCAyLjRHLzVHIDFUMlIKICAqIFJGMzAyMCAyLjRHIDFUMVIKICAqIFJGMjAyMCAyLjRHIEIvRworICogUkYzMDIxIDIuNEcgMVQyUgorICogUkYzMDIyIDIuNEcgMlQyUgorICogUkYzMDUyIDIuNEcgMlQyUgogICovCiAjZGVmaW5lIFJGMjgyMAkJCQkweDAwMDEKICNkZWZpbmUgUkYyODUwCQkJCTB4MDAwMgpAQCAtNDMsNiArNDYsOSBAQAogI2RlZmluZSBSRjI3NTAJCQkJMHgwMDA0CiAjZGVmaW5lIFJGMzAyMAkJCQkweDAwMDUKICNkZWZpbmUgUkYyMDIwCQkJCTB4MDAwNgorI2RlZmluZSBSRjMwMjEJCQkJMHgwMDA3CisjZGVmaW5lIFJGMzAyMgkJCQkweDAwMDgKKyNkZWZpbmUgUkYzMDUyCQkJCTB4MDAwOQogCiAvKgogICogUlQyODcwIHZlcnNpb24KQEAgLTEzMDAsOCArMTMwNiw4IEBACiAgKiBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRTogMzItYnl0ZSAqIDI1NiBlbnRyeQogICogTUFDX0lWRUlWX1RBQkxFX0JBU0U6IDgtYnl0ZSAqIDI1Ni1lbnRyeQogICogTUFDX1dDSURfQVRUUklCVVRFX0JBU0U6IDQtYnl0ZSAqIDI1Ni1lbnRyeQotICogU0hBUkVEX0tFWV9UQUJMRV9CQVNFOiAzMi1ieXRlICogMTYtZW50cnkKLSAqIFNIQVJFRF9LRVlfTU9ERV9CQVNFOiA0LWJ5dGUgKiAxNi1lbnRyeQorICogU0hBUkVEX0tFWV9UQUJMRV9CQVNFOiAzMiBieXRlcyAqIDMyLWVudHJ5CisgKiBTSEFSRURfS0VZX01PREVfQkFTRTogNCBiaXRzICogMzItZW50cnkKICAqLwogI2RlZmluZSBNQUNfV0NJRF9CQVNFCQkJMHgxODAwCiAjZGVmaW5lIFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFCQkweDQwMDAKQEAgLTE5MjEsNyArMTkyNyw3IEBACiAjZGVmaW5lIFJYV0lfVzNfU05SMQkJCUZJRUxEMzIoMHgwMDAwZmYwMCkKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKICAqIGFuZCBmcm9tIG1hYzgwMjExIHZhbHVlIHRvIHJlZ2lzdGVyIHZhbHVlLgogICovCiAjZGVmaW5lIE1JTl9HX1RYUE9XRVIJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCmluZGV4IDQ5YzllMmMuLjI3YmM2YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKQEAgLTEzNCw2ICsxMzQsMTcgQEAKIAkJCQkgIEdFVF9EVVJBVElPTihJRUVFODAyMTFfSEVBREVSICsgQUNLX1NJWkUsIDEwKSApCiAKIC8qCisgKiBTdHJ1Y3R1cmUgZm9yIGF2ZXJhZ2UgY2FsY3VsYXRpb24KKyAqIFRoZSBhdmcgZmllbGQgY29udGFpbnMgdGhlIGFjdHVhbCBhdmVyYWdlIHZhbHVlLAorICogYnV0IGF2Z193ZWlnaHQgaXMgaW50ZXJuYWxseSB1c2VkIGR1cmluZyBjYWxjdWxhdGlvbnMKKyAqIHRvIHByZXZlbnQgcm91bmRpbmcgZXJyb3JzLgorICovCitzdHJ1Y3QgYXZnX3ZhbCB7CisJaW50IGF2ZzsKKwlpbnQgYXZnX3dlaWdodDsKK307CisKKy8qCiAgKiBDaGlwc2V0IGlkZW50aWZpY2F0aW9uCiAgKiBUaGUgY2hpcHNldCBvbiB0aGUgZGV2aWNlIGlzIGNvbXBvc2VkIG9mIGEgUlQgYW5kIFJGIGNoaXAuCiAgKiBUaGUgY2hpcHNldCBjb21iaW5hdGlvbiBpcyBpbXBvcnRhbnQgZm9yIGRldGVybWluaW5nIGRldmljZSBjYXBhYmlsaXRpZXMuCkBAIC0yNDUsMjEgKzI1NiwxOCBAQAogCXN0cnVjdCBhbnRlbm5hX3NldHVwIGFjdGl2ZTsKIAogCS8qCi0JICogUlNTSSBpbmZvcm1hdGlvbiBmb3IgdGhlIGRpZmZlcmVudCBhbnRlbm5hJ3MuCi0JICogVGhlc2Ugc3RhdGlzdGljcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hlbgotCSAqIHRvIHN3aXRjaCBhbnRlbm5hIHdoZW4gdXNpbmcgc29mdHdhcmUgZGl2ZXJzaXR5LgotCSAqCi0JICogICAgICAgIHJzc2lbMF0gLT4gQW50ZW5uYSBBIFJTU0kKLQkgKiAgICAgICAgcnNzaVsxXSAtPiBBbnRlbm5hIEIgUlNTSQorCSAqIFJTU0kgaGlzdG9yeSBpbmZvcm1hdGlvbiBmb3IgdGhlIGFudGVubmEuCisJICogVXNlZCB0byBkZXRlcm1pbmUgd2hlbiB0byBzd2l0Y2ggYW50ZW5uYQorCSAqIHdoZW4gdXNpbmcgc29mdHdhcmUgZGl2ZXJzaXR5LgogCSAqLwotCWludCByc3NpX2hpc3RvcnlbMl07CisJaW50IHJzc2lfaGlzdG9yeTsKIAogCS8qCiAJICogQ3VycmVudCBSU1NJIGF2ZXJhZ2Ugb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgYW50ZW5uYS4KIAkgKiBTaW1pbGFyIHRvIHRoZSBhdmdfcnNzaSBpbiB0aGUgbGlua19xdWFsIHN0cnVjdHVyZQogCSAqIHRoaXMgdmFsdWUgaXMgdXBkYXRlZCBieSB1c2luZyB0aGUgd2Fsa2luZyBhdmVyYWdlLgogCSAqLwotCWludCByc3NpX2FudDsKKwlzdHJ1Y3QgYXZnX3ZhbCByc3NpX2FudDsKIH07CiAKIC8qCkBAIC0yODgsNyArMjk2LDcgQEAKIAkvKgogCSAqIEN1cnJlbnRseSBhY3RpdmUgYXZlcmFnZSBSU1NJIHZhbHVlCiAJICovCi0JaW50IGF2Z19yc3NpOworCXN0cnVjdCBhdmdfdmFsIGF2Z19yc3NpOwogCiAJLyoKIAkgKiBDdXJyZW50bHkgcHJlY2FsY3VsYXRlZCBwZXJjZW50YWdlcyBvZiBzdWNjZXNzZnVsCkBAIC0zMjYsNiArMzM0LDExIEBACiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCiAJLyoKKwkgKiBiZWFjb24tPnNrYiBtdXN0IGJlIHByb3RlY3RlZCB3aXRoIHRoZSBtdXRleC4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggYmVhY29uX3NrYl9tdXRleDsKKworCS8qCiAJICogRW50cnkgaW4gdGhlIGJlYWNvbiBxdWV1ZSB3aGljaCBiZWxvbmdzIHRvCiAJICogdGhpcyBpbnRlcmZhY2UuIEVhY2ggaW50ZXJmYWNlIGhhcyBpdHMgb3duCiAJICogZGVkaWNhdGVkIGJlYWNvbiBlbnRyeS4KQEAgLTMzNyw4ICszNTAsNiBAQAogCSAqLwogCXVuc2lnbmVkIGludCBkZWxheWVkX2ZsYWdzOwogI2RlZmluZSBERUxBWUVEX1VQREFURV9CRUFDT04JCTB4MDAwMDAwMDEKLSNkZWZpbmUgREVMQVlFRF9DT05GSUdfRVJQCQkweDAwMDAwMDAyCi0jZGVmaW5lIERFTEFZRURfTEVEX0FTU09DCQkweDAwMDAwMDA0CiAKIAkvKgogCSAqIFNvZnR3YXJlIHNlcXVlbmNlIGNvdW50ZXIsIHRoaXMgaXMgb25seSByZXF1aXJlZApAQCAtNDA2LDkgKzQxNyw2IEBACiAJaW50IHNob3J0X3ByZWFtYmxlOwogCWludCBjdHNfcHJvdGVjdGlvbjsKIAotCWludCBhY2tfdGltZW91dDsKLQlpbnQgYWNrX2NvbnN1bWVfdGltZTsKLQogCXUzMiBiYXNpY19yYXRlczsKIAogCWludCBzbG90X3RpbWU7CkBAIC01OTQsNyArNjAyLDYgQEAKIAlERVZJQ0VfU1RBVEVfSU5JVElBTElaRUQsCiAJREVWSUNFX1NUQVRFX1NUQVJURUQsCiAJREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sCi0JREVWSUNFX1NUQVRFX0RJU0FCTEVEX1JBRElPX0hXLAogCiAJLyoKIAkgKiBEcml2ZXIgcmVxdWlyZW1lbnRzCkBAIC02MDIsNyArNjA5LDYgQEAKIAlEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwKIAlEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsCiAJRFJJVkVSX1JFUVVJUkVfQVRJTV9RVUVVRSwKLQlEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsCiAJRFJJVkVSX1JFUVVJUkVfRE1BLAogCURSSVZFUl9SRVFVSVJFX0NPUFlfSVYsCiAJRFJJVkVSX1JFUVVJUkVfTDJQQUQsCkBAIC02MTIsNiArNjE4LDggQEAKIAkgKi8KIAlDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sCiAJQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLAorCURSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSUywKKwlEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUl9QU1BPTEwsCiAKIAkvKgogCSAqIERyaXZlciBjb25maWd1cmF0aW9uCkBAIC02MzQsNyArNjQyLDcgQEAKIAkgKiBUaGUgc3RydWN0dXJlIHN0b3JlZCBpbiBoZXJlIGRlcGVuZHMgb24gdGhlCiAJICogc3lzdGVtIGJ1cyAoUENJIG9yIFVTQikuCiAJICogV2hlbiBhY2Nlc3NpbmcgdGhpcyB2YXJpYWJsZSwgdGhlIHJ0MngwMGRldl97cGNpLHVzYn0KLQkgKiBtYWNybydzIHNob3VsZCBiZSB1c2VkIGZvciBjb3JyZWN0IHR5cGVjYXN0aW5nLgorCSAqIG1hY3JvcyBzaG91bGQgYmUgdXNlZCBmb3IgY29ycmVjdCB0eXBlY2FzdGluZy4KIAkgKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKQEAgLTY1MSwxOCArNjU5LDYgQEAKIAllbnVtIGllZWU4MDIxMV9iYW5kIGN1cnJfYmFuZDsKIAogCS8qCi0JICogcmZraWxsIHN0cnVjdHVyZSBmb3IgUkYgc3RhdGUgc3dpdGNoaW5nIHN1cHBvcnQuCi0JICogVGhpcyB3aWxsIG9ubHkgYmUgY29tcGlsZWQgaW4gd2hlbiByZXF1aXJlZC4KLQkgKi8KLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKLQl1bnNpZ25lZCBsb25nIHJma2lsbF9zdGF0ZTsKLSNkZWZpbmUgUkZLSUxMX1NUQVRFX0FMTE9DQVRFRAkJMQotI2RlZmluZSBSRktJTExfU1RBVEVfUkVHSVNURVJFRAkJMgotI2RlZmluZSBSRktJTExfU1RBVEVfQkxPQ0tFRAkJMwotCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpyZmtpbGxfcG9sbF9kZXY7Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCi0KLQkvKgogCSAqIElmIGVuYWJsZWQsIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSBzdHJ1Y3R1cmVzCiAJICogcmVxdWlyZWQgZm9yIGRlcmVnaXN0cmF0aW9uIG9mIGRlYnVnZnMuCiAJICovCkBAIC04MjQsNyArODIwLDYgQEAKIAkgKiBkdWUgdG8gUlROTCBsb2NraW5nIHJlcXVpcmVtZW50cy4KIAkgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW50Zl93b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBmaWx0ZXJfd29yazsKIAogCS8qCiAJICogRGF0YSBxdWV1ZSBhcnJheXMgZm9yIFJYLCBUWCBhbmQgQmVhY29uLgpAQCAtOTc2LDcgKzk3MSw5IEBACiB2b2lkIHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CisJCQkJdTY0IG11bHRpY2FzdCk7CitpbnQgcnQyeDAwbWFjX3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgIGJvb2wgc2V0KTsKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9DUllQVE8KIGludCBydDJ4MDBtYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCkBAIC05OTQsNiArOTkxLDcgQEAKIAkJCQl1MzIgY2hhbmdlcyk7CiBpbnQgcnQyeDAwbWFjX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKIAkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyk7Cit2b2lkIHJ0MngwMG1hY19yZmtpbGxfcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKIC8qCiAgKiBEcml2ZXIgYWxsb2NhdGlvbiBoYW5kbGVycy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCAzZTAxOWExLi40MGEyMDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC05NCwxNyArOTQsNiBAQAogCWVycC5kaWZzID0gYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90ID8gU0hPUlRfRElGUyA6IERJRlM7CiAJZXJwLmVpZnMgPSBic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QgPyBTSE9SVF9FSUZTIDogRUlGUzsKIAotCWVycC5hY2tfdGltZW91dCA9IFBMQ1AgKyBlcnAuZGlmcyArIEdFVF9EVVJBVElPTihBQ0tfU0laRSwgMTApOwotCWVycC5hY2tfY29uc3VtZV90aW1lID0gU0lGUyArIFBMQ1AgKyBHRVRfRFVSQVRJT04oQUNLX1NJWkUsIDEwKTsKLQotCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKSB7Ci0JCWVycC5hY2tfdGltZW91dCArPSBTSE9SVF9QUkVBTUJMRTsKLQkJZXJwLmFja19jb25zdW1lX3RpbWUgKz0gU0hPUlRfUFJFQU1CTEU7Ci0JfSBlbHNlIHsKLQkJZXJwLmFja190aW1lb3V0ICs9IFBSRUFNQkxFOwotCQllcnAuYWNrX2NvbnN1bWVfdGltZSArPSBQUkVBTUJMRTsKLQl9Ci0KIAllcnAuYmFzaWNfcmF0ZXMgPSBic3NfY29uZi0+YmFzaWNfcmF0ZXM7CiAJZXJwLmJlYWNvbl9pbnQgPSBic3NfY29uZi0+YmVhY29uX2ludDsKIApAQCAtMTI0LDI0ICsxMTMsMzQgQEAKIH0KIAogdm9pZCBydDJ4MDBsaWJfY29uZmlnX2FudGVubmEoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgIHN0cnVjdCBhbnRlbm5hX3NldHVwICphbnQpCisJCQkgICAgICBzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBjb25maWcpCiB7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKIAlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCAqZGVmID0gJnJ0MngwMGRldi0+ZGVmYXVsdF9hbnQ7CiAJc3RydWN0IGFudGVubmFfc2V0dXAgKmFjdGl2ZSA9ICZydDJ4MDBkZXYtPmxpbmsuYW50LmFjdGl2ZTsKIAogCS8qCiAJICogRmFpbHNhZmU6IE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHNlbmRpbmcgdGhlCiAJICogQU5URU5OQV9TV19ESVZFUlNJVFkgc3RhdGUgdG8gdGhlIGRyaXZlci4KLQkgKiBJZiB0aGF0IGhhcHBlcyBmYWxsYmFjayB0byBoYXJkd2FyZSBkZWZhdWx0LAorCSAqIElmIHRoYXQgaGFwcGVucywgZmFsbGJhY2sgdG8gaGFyZHdhcmUgZGVmYXVsdHMsCiAJICogb3Igb3VyIG93biBkZWZhdWx0LgorCSAqIElmIGRpdmVyc2l0eSBoYW5kbGluZyBpcyBhY3RpdmUgZm9yIGEgcGFydGljdWxhciBhbnRlbm5hLAorCSAqIHdlIHNob3VsZG4ndCBvdmVyd3JpdGUgdGhhdCBhbnRlbm5hLgogCSAqIFRoZSBjYWxscyB0byBydDJ4MDBsaWJfY29uZmlnX2FudGVubmFfY2hlY2soKQogCSAqIG1pZ2h0IGhhdmUgY2F1c2VkIHRoYXQgd2UgcmVzdG9yZSBiYWNrIHRvIHRoZSBhbHJlYWR5CiAJICogYWN0aXZlIHNldHRpbmcuIElmIHRoYXQgaGFzIGhhcHBlbmVkIHdlIGNhbiBxdWl0LgogCSAqLwotCWFudC0+cnggPSBydDJ4MDBsaWJfY29uZmlnX2FudGVubmFfY2hlY2soYW50LT5yeCwgZGVmLT5yeCk7Ci0JYW50LT50eCA9IHJ0MngwMGxpYl9jb25maWdfYW50ZW5uYV9jaGVjayhhbnQtPnR4LCBkZWYtPnR4KTsKKwlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9SWF9ESVZFUlNJVFkpKQorCQljb25maWcucnggPSBydDJ4MDBsaWJfY29uZmlnX2FudGVubmFfY2hlY2soY29uZmlnLnJ4LCBkZWYtPnJ4KTsKKwllbHNlCisJCWNvbmZpZy5yeCA9IGFjdGl2ZS0+cng7CiAKLQlpZiAoYW50LT5yeCA9PSBhY3RpdmUtPnJ4ICYmIGFudC0+dHggPT0gYWN0aXZlLT50eCkKKwlpZiAoIShhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpKQorCQljb25maWcudHggPSBydDJ4MDBsaWJfY29uZmlnX2FudGVubmFfY2hlY2soY29uZmlnLnR4LCBkZWYtPnR4KTsKKwllbHNlCisJCWNvbmZpZy50eCA9IGFjdGl2ZS0+dHg7CisKKwlpZiAoY29uZmlnLnJ4ID09IGFjdGl2ZS0+cnggJiYgY29uZmlnLnR4ID09IGFjdGl2ZS0+dHgpCiAJCXJldHVybjsKIAogCS8qCkBAIC0xNTYsMTEgKzE1NSwxMSBAQAogCSAqIFRoZSBsYXR0ZXIgaXMgcmVxdWlyZWQgc2luY2Ugd2UgbmVlZCB0byByZWNhbGlicmF0ZSB0aGUKIAkgKiBub2lzZS1zZW5zaXRpdml0eSByYXRpbyBmb3IgdGhlIG5ldyBzZXR1cC4KIAkgKi8KLQlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfYW50KHJ0MngwMGRldiwgYW50KTsKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfYW50KHJ0MngwMGRldiwgJmNvbmZpZyk7CiAKIAlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgdHJ1ZSk7CiAKLQltZW1jcHkoYWN0aXZlLCBhbnQsIHNpemVvZigqYW50KSk7CisJbWVtY3B5KGFjdGl2ZSwgJmNvbmZpZywgc2l6ZW9mKGNvbmZpZykpOwogCiAJaWYgKHRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PTl9MSU5LKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwppbmRleCBiYzRlODFlLi5kZTM2ODM3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwpAQCAtNTMsOCArNTMsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CiAKLQlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8Ci0JICAgICFod19rZXkgfHwgZW50cnktPnNrYi0+ZG9fbm90X2VuY3J5cHQpCisJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fCAhaHdfa2V5KQogCQlyZXR1cm47CiAKIAlfX3NldF9iaXQoRU5UUllfVFhEX0VOQ1JZUFQsICZ0eGRlc2MtPmZsYWdzKTsKQEAgLTgyLDggKzgxLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkgPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleTsKIAl1bnNpZ25lZCBpbnQgb3ZlcmhlYWQgPSAwOwogCi0JaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAha2V5IHx8IHNrYi0+ZG9fbm90X2VuY3J5cHQpCisJaWYgKCF0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fCAha2V5KQogCQlyZXR1cm4gb3ZlcmhlYWQ7CiAKIAkvKgpAQCAtMTMxLDcgKzEyOSw3IEBACiAJLyogUHVsbCBidWZmZXIgdG8gY29ycmVjdCBzaXplICovCiAJc2tiX3B1bGwoc2tiLCB0eGRlc2MtPml2X2xlbik7CiAKLQkvKiBJVi9FSVYgZGF0YSBoYXMgb2ZmaWNpYWxseSBiZSBzdHJpcHBlZCAqLworCS8qIElWL0VJViBkYXRhIGhhcyBvZmZpY2lhbGx5IGJlZW4gc3RyaXBwZWQgKi8KIAlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0lWX1NUUklQUEVEOwogfQogCkBAIC0xNTYsNyArMTU0LDcgQEAKIAlza2JkZXNjLT5mbGFncyAmPSB+U0tCREVTQ19JVl9TVFJJUFBFRDsKIH0KIAotdm9pZCBydDJ4MDBjcnlwdG9fcnhfaW5zZXJ0X2l2KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbDJwYWQsCit2b2lkIHJ0MngwMGNyeXB0b19yeF9pbnNlcnRfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCwKIAkJCSAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKQEAgLTIwMSw3ICsxOTksNyBAQAogCSAqIG1vdmUgdGhlIGhlYWRlciBtb3JlIHRoZW4gaXZfbGVuIHNpbmNlIHdlIG11c3QKIAkgKiBtYWtlIHJvb20gZm9yIHRoZSBwYXlsb2FkIG1vdmUgYXMgd2VsbC4KIAkgKi8KLQlpZiAobDJwYWQpIHsKKwlpZiAocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfTDJQQUQpIHsKIAkJc2tiX3B1c2goc2tiLCBpdl9sZW4gLSBhbGlnbik7CiAJCXNrYl9wdXQoc2tiLCBpY3ZfbGVuKTsKIApAQCAtMjMyLDcgKzIzMCw3IEBACiAJICogTW92ZSBwYXlsb2FkIGZvciBhbGlnbm1lbnQgcHVycG9zZXMuIE5vdGUgdGhhdAogCSAqIHRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiBubyBsMiBwYWRkaW5nIGlzIHByZXNlbnQuCiAJICovCi0JaWYgKCFsMnBhZCkgeworCWlmICghKHJ4ZGVzYy0+ZGV2X2ZsYWdzICYgUlhET05FX0wyUEFEKSkgewogCQltZW1tb3ZlKHNrYi0+ZGF0YSArIHRyYW5zZmVyLAogCQkJc2tiLT5kYXRhICsgdHJhbnNmZXIgKyBhbGlnbiwKIAkJCXBheWxvYWRfbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCA1NzgxM2U3Li43MTc2MWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC00MCw4ICs0MCw3IEBACiAJICogRG9uJ3QgZW5hYmxlIHRoZSByYWRpbyB0d2ljZS4KIAkgKiBBbmQgY2hlY2sgaWYgdGhlIGhhcmR3YXJlIGJ1dHRvbiBoYXMgYmVlbiBkaXNhYmxlZC4KIAkgKi8KLQlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoREVWSUNFX1NUQVRFX0VOQUJMRURfUkFESU8sICZydDJ4MDBkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMTE5LDIwICsxMTgsMTEgQEAKIAkJcnQyeDAwbGlua19zdGFydF90dW5lcihydDJ4MDBkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfcGFja2V0ZmlsdGVyX3NjaGVkdWxlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgZmlsdGVyX3dvcmspOwotCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y29uZmlnX2ZpbHRlcihydDJ4MDBkZXYsIHJ0MngwMGRldi0+cGFja2V0X2ZpbHRlcik7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0MngwMGxpYl9pbnRmX3NjaGVkdWxlZF9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCiAJCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih2aWYpOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgY29uZjsKIAlpbnQgZGVsYXllZF9mbGFnczsKIAogCS8qCkBAIC0xNDIsNyArMTMyLDYgQEAKIAkgKi8KIAlzcGluX2xvY2soJmludGYtPmxvY2spOwogCi0JbWVtY3B5KCZjb25mLCAmdmlmLT5ic3NfY29uZiwgc2l6ZW9mKGNvbmYpKTsKIAlkZWxheWVkX2ZsYWdzID0gaW50Zi0+ZGVsYXllZF9mbGFnczsKIAlpbnRmLT5kZWxheWVkX2ZsYWdzID0gMDsKIApAQCAtMTU5LDEyICsxNDgsNiBAQAogCiAJaWYgKGRlbGF5ZWRfZmxhZ3MgJiBERUxBWUVEX1VQREFURV9CRUFDT04pCiAJCXJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYsIHRydWUpOwotCi0JaWYgKGRlbGF5ZWRfZmxhZ3MgJiBERUxBWUVEX0NPTkZJR19FUlApCi0JCXJ0MngwMGxpYl9jb25maWdfZXJwKHJ0MngwMGRldiwgaW50ZiwgJmNvbmYpOwotCi0JaWYgKGRlbGF5ZWRfZmxhZ3MgJiBERUxBWUVEX0xFRF9BU1NPQykKLQkJcnQyeDAwbGVkc19sZWRfYXNzb2MocnQyeDAwZGV2LCAhIXJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE4Nyw3ICsxNzAsNiBAQAogc3RhdGljIHZvaWQgcnQyeDAwbGliX2JlYWNvbmRvbmVfaXRlcih2b2lkICpkYXRhLCB1OCAqbWFjLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7CiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAogCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKQEAgLTE5NiwxMiArMTc4LDYgQEAKIAkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUykKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBDbGVhbiB1cCB0aGUgYmVhY29uIHNrYi4KLQkgKi8KLQlydDJ4MDBxdWV1ZV9mcmVlX3NrYihydDJ4MDBkZXYsIGludGYtPmJlYWNvbi0+c2tiKTsKLQlpbnRmLT5iZWFjb24tPnNrYiA9IE5VTEw7Ci0KIAlzcGluX2xvY2soJmludGYtPmxvY2spOwogCWludGYtPmRlbGF5ZWRfZmxhZ3MgfD0gREVMQVlFRF9VUERBVEVfQkVBQ09OOwogCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKQEAgLTIxNiw3ICsxOTIsNyBAQAogCQkJCQkJICAgcnQyeDAwbGliX2JlYWNvbmRvbmVfaXRlciwKIAkJCQkJCSAgIHJ0MngwMGRldik7CiAKLQlxdWV1ZV93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LCAmcnQyeDAwZGV2LT5pbnRmX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX2JlYWNvbmRvbmUpOwogCkBAIC0yMjgsNyArMjA0LDkgQEAKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoZW50cnktPnNrYik7CiAJdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGggPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihlbnRyeS0+c2tiKTsKLQl1OCByYXRlX2lkeCwgcmF0ZV9mbGFnczsKKwl1OCByYXRlX2lkeCwgcmF0ZV9mbGFncywgcmV0cnlfcmF0ZXM7CisJdW5zaWduZWQgaW50IGk7CisJYm9vbCBzdWNjZXNzOwogCiAJLyoKIAkgKiBVbm1hcCB0aGUgc2tiLgpAQCAtMjM5LDcgKzIxNyw3IEBACiAJICogUmVtb3ZlIEwyIHBhZGRpbmcgd2hpY2ggd2FzIGFkZGVkIGR1cmluZwogCSAqLwogCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlydDJ4MDBxdWV1ZV9wYXlsb2FkX2FsaWduKGVudHJ5LT5za2IsIHRydWUsIGhlYWRlcl9sZW5ndGgpOworCQlydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7CiAKIAkvKgogCSAqIElmIHRoZSBJVi9FSVYgZGF0YSB3YXMgc3RyaXBwZWQgZnJvbSB0aGUgZnJhbWUgYmVmb3JlIGl0IHdhcwpAQCAtMjU3LDQwICsyMzUsNTQgQEAKIAlydDJ4MDBkZWJ1Z19kdW1wX2ZyYW1lKHJ0MngwMGRldiwgRFVNUF9GUkFNRV9UWERPTkUsIGVudHJ5LT5za2IpOwogCiAJLyoKKwkgKiBEZXRlcm1pbmUgaWYgdGhlIGZyYW1lIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZC4KKwkgKi8KKwlzdWNjZXNzID0KKwkgICAgdGVzdF9iaXQoVFhET05FX1NVQ0NFU1MsICZ0eGRlc2MtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChUWERPTkVfVU5LTk9XTiwgJnR4ZGVzYy0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KFRYRE9ORV9GQUxMQkFDSywgJnR4ZGVzYy0+ZmxhZ3MpOworCisJLyoKIAkgKiBVcGRhdGUgVFggc3RhdGlzdGljcy4KIAkgKi8KLQlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9zdWNjZXNzICs9Ci0JICAgIHRlc3RfYml0KFRYRE9ORV9TVUNDRVNTLCAmdHhkZXNjLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoVFhET05FX1VOS05PV04sICZ0eGRlc2MtPmZsYWdzKTsKLQlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9mYWlsZWQgKz0KLQkgICAgdGVzdF9iaXQoVFhET05FX0ZBSUxVUkUsICZ0eGRlc2MtPmZsYWdzKTsKKwlydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9zdWNjZXNzICs9IHN1Y2Nlc3M7CisJcnQyeDAwZGV2LT5saW5rLnF1YWwudHhfZmFpbGVkICs9ICFzdWNjZXNzOwogCiAJcmF0ZV9pZHggPSBza2JkZXNjLT50eF9yYXRlX2lkeDsKIAlyYXRlX2ZsYWdzID0gc2tiZGVzYy0+dHhfcmF0ZV9mbGFnczsKKwlyZXRyeV9yYXRlcyA9IHRlc3RfYml0KFRYRE9ORV9GQUxMQkFDSywgJnR4ZGVzYy0+ZmxhZ3MpID8KKwkgICAgKHR4ZGVzYy0+cmV0cnkgKyAxKSA6IDE7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgVFggc3RhdHVzCiAJICovCiAJbWVtc2V0KCZ0eF9pbmZvLT5zdGF0dXMsIDAsIHNpemVvZih0eF9pbmZvLT5zdGF0dXMpKTsKIAl0eF9pbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IDA7Ci0JdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmlkeCA9IHJhdGVfaWR4OwotCXR4X2luZm8tPnN0YXR1cy5yYXRlc1swXS5mbGFncyA9IHJhdGVfZmxhZ3M7Ci0JdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdHhkZXNjLT5yZXRyeSArIDE7Ci0JdHhfaW5mby0+c3RhdHVzLnJhdGVzWzFdLmlkeCA9IC0xOyAvKiB0ZXJtaW5hdGUgKi8KKworCS8qCisJICogRnJhbWUgd2FzIHNlbmQgd2l0aCByZXRyaWVzLCBoYXJkd2FyZSB0cmllZAorCSAqIGRpZmZlcmVudCByYXRlcyB0byBzZW5kIG91dCB0aGUgZnJhbWUsIGF0IGVhY2gKKwkgKiByZXRyeSBpdCBsb3dlcmVkIHRoZSByYXRlIDEgc3RlcC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmV0cnlfcmF0ZXMgJiYgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgeworCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbaV0uaWR4ID0gcmF0ZV9pZHggLSBpOworCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbaV0uZmxhZ3MgPSByYXRlX2ZsYWdzOworCQl0eF9pbmZvLT5zdGF0dXMucmF0ZXNbaV0uY291bnQgPSAxOworCX0KKwlpZiAoaSA8IChJRUVFODAyMTFfVFhfTUFYX1JBVEVTIC0gMSkpCisJCXR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXS5pZHggPSAtMTsgLyogdGVybWluYXRlICovCiAKIAlpZiAoISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkgewotCQlpZiAodGVzdF9iaXQoVFhET05FX1NVQ0NFU1MsICZ0eGRlc2MtPmZsYWdzKSB8fAotCQkJCXRlc3RfYml0KFRYRE9ORV9VTktOT1dOLCAmdHhkZXNjLT5mbGFncykpCisJCWlmIChzdWNjZXNzKQogCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCQllbHNlIGlmICh0ZXN0X2JpdChUWERPTkVfRkFJTFVSRSwgJnR4ZGVzYy0+ZmxhZ3MpKQorCQllbHNlCiAJCQlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMUFDS0ZhaWx1cmVDb3VudCsrOwogCX0KIAogCWlmIChyYXRlX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB7Ci0JCWlmICh0ZXN0X2JpdChUWERPTkVfU1VDQ0VTUywgJnR4ZGVzYy0+ZmxhZ3MpIHx8Ci0JCQkJdGVzdF9iaXQoVFhET05FX1VOS05PV04sICZ0eGRlc2MtPmZsYWdzKSkKKwkJaWYgKHN1Y2Nlc3MpCiAJCQlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMVJUU1N1Y2Nlc3NDb3VudCsrOwotCQllbHNlIGlmICh0ZXN0X2JpdChUWERPTkVfRkFJTFVSRSwgJnR4ZGVzYy0+ZmxhZ3MpKQorCQllbHNlCiAJCQlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMVJUU0ZhaWx1cmVDb3VudCsrOwogCX0KIApAQCAtMzcyLDcgKzM2NCw2IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gJnJ0MngwMGRldi0+cnhfc3RhdHVzOwogCXVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoOwotCWJvb2wgbDJwYWQ7CiAJaW50IHJhdGVfaWR4OwogCS8qCiAJICogQWxsb2NhdGUgYSBuZXcgc2tfYnVmZmVyLiBJZiBubyBuZXcgYnVmZmVyIGF2YWlsYWJsZSwgZHJvcCB0aGUKQEAgLTQwMSw3ICszOTIsNiBAQAogCSAqIGFsaWduZWQgb24gYSA0IGJ5dGUgYm91bmRhcnkuCiAJICovCiAJaGVhZGVyX2xlbmd0aCA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKGVudHJ5LT5za2IpOwotCWwycGFkID0gISEocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9MMlBBRCk7CiAKIAkvKgogCSAqIEhhcmR3YXJlIG1pZ2h0IGhhdmUgc3RyaXBwZWQgdGhlIElWL0VJVi9JQ1YgZGF0YSwKQEAgLTQxMSwxMCArNDAxLDEyIEBACiAJICovCiAJaWYgKChyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX0NSWVBUT19JVikgJiYKIAkgICAgKHJ4ZGVzYy5mbGFncyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQotCQlydDJ4MDBjcnlwdG9fcnhfaW5zZXJ0X2l2KGVudHJ5LT5za2IsIGwycGFkLCBoZWFkZXJfbGVuZ3RoLAorCQlydDJ4MDBjcnlwdG9fcnhfaW5zZXJ0X2l2KGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgsCiAJCQkJCSAgJnJ4ZGVzYyk7CisJZWxzZSBpZiAocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9MMlBBRCkKKwkJcnQyeDAwcXVldWVfcmVtb3ZlX2wycGFkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwogCWVsc2UKLQkJcnQyeDAwcXVldWVfcGF5bG9hZF9hbGlnbihlbnRyeS0+c2tiLCBsMnBhZCwgaGVhZGVyX2xlbmd0aCk7CisJCXJ0MngwMHF1ZXVlX2FsaWduX3BheWxvYWQoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7CiAKIAkvKgogCSAqIENoZWNrIGlmIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgdXNpbmcgSFQuIEluIHRoYXQgY2FzZSwKQEAgLTQ0OSw3ICs0NDEsOCBAQAogCSAqIG1hYzgwMjExIHdpbGwgY2xlYW4gdXAgdGhlIHNrYiBzdHJ1Y3R1cmUuCiAJICovCiAJcnQyeDAwZGVidWdfZHVtcF9mcmFtZShydDJ4MDBkZXYsIERVTVBfRlJBTUVfUlhET05FLCBlbnRyeS0+c2tiKTsKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiLCByeF9zdGF0dXMpOworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0IoZW50cnktPnNrYiksIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShydDJ4MDBkZXYtPmh3LCBlbnRyeS0+c2tiKTsKIAogCS8qCiAJICogUmVwbGFjZSB0aGUgc2tiIHdpdGggdGhlIGZyZXNobHkgYWxsb2NhdGVkIG9uZS4KQEAgLTc4NSw2ICs3NzgsMTMgQEAKIAlydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50ID0gMDsKIAlydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCA9IDA7CiAKKwkvKiBFbmFibGUgdGhlIHJhZGlvICovCisJcmV0dmFsID0gcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhydDJ4MDBkZXYpOworCWlmIChyZXR2YWwpIHsKKwkJcnQyeDAwcXVldWVfdW5pbml0aWFsaXplKHJ0MngwMGRldik7CisJCXJldHVybiByZXR2YWw7CisJfQorCiAJc2V0X2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC04NDcsNyArODQ3LDYgQEAKIAkgKiBJbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gd29yay4KIAkgKi8KIAlJTklUX1dPUksoJnJ0MngwMGRldi0+aW50Zl93b3JrLCBydDJ4MDBsaWJfaW50Zl9zY2hlZHVsZWQpOwotCUlOSVRfV09SSygmcnQyeDAwZGV2LT5maWx0ZXJfd29yaywgcnQyeDAwbGliX3BhY2tldGZpbHRlcl9zY2hlZHVsZWQpOwogCiAJLyoKIAkgKiBBbGxvY2F0ZSBxdWV1ZSBhcnJheS4KQEAgLTg3MCw3ICs4NjksNiBAQAogCSAqLwogCXJ0MngwMGxpbmtfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAlydDJ4MDBsZWRzX3JlZ2lzdGVyKHJ0MngwMGRldik7Ci0JcnQyeDAwcmZraWxsX2FsbG9jYXRlKHJ0MngwMGRldik7CiAJcnQyeDAwZGVidWdfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAogCXNldF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKTsKQEAgLTg5NCw2ICs4OTIsMTEgQEAKIAlydDJ4MDBsaWJfZGlzYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwogCiAJLyoKKwkgKiBTdG9wIGFsbCB3b3JrLgorCSAqLworCWNhbmNlbF93b3JrX3N5bmMoJnJ0MngwMGRldi0+aW50Zl93b3JrKTsKKworCS8qCiAJICogVW5pbml0aWFsaXplIGRldmljZS4KIAkgKi8KIAlydDJ4MDBsaWJfdW5pbml0aWFsaXplKHJ0MngwMGRldik7CkBAIC05MDIsNyArOTA1LDYgQEAKIAkgKiBGcmVlIGV4dHJhIGNvbXBvbmVudHMKIAkgKi8KIAlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7Ci0JcnQyeDAwcmZraWxsX2ZyZWUocnQyeDAwZGV2KTsKIAlydDJ4MDBsZWRzX3VucmVnaXN0ZXIocnQyeDAwZGV2KTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKaW5kZXggMGJmMjcxNS4uNTQ2MmNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaApAQCAtMzAsMTAgKzMwLDggQEAKIAogLyoKICAqIEludGVydmFsIGRlZmluZXMKLSAqIEJvdGggdGhlIGxpbmsgdHVuZXIgYXMgdGhlIHJma2lsbCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlciBzZWNvbmQuCiAgKi8KICNkZWZpbmUgTElOS19UVU5FX0lOVEVSVkFMCXJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopCi0jZGVmaW5lIFJGS0lMTF9QT0xMX0lOVEVSVkFMCTEwMDAKIAogLyoKICAqIHJ0MngwMF9yYXRlOiBQZXIgcmF0ZSBkZXZpY2UgaW5mb3JtYXRpb24KQEAgLTkwLDcgKzg4LDcgQEAKIAkJCSAgc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mKTsKIHZvaWQgcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgYW50ZW5uYV9zZXR1cCAqYW50KTsKKwkJCSAgICAgIHN0cnVjdCBhbnRlbm5hX3NldHVwIGFudCk7CiB2b2lkIHJ0MngwMGxpYl9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mLAogCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncyk7CkBAIC0xMjIsMjEgKzEyMCw0MiBAQAogdm9pZCBydDJ4MDBxdWV1ZV9mcmVlX3NrYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCi0gKiBydDJ4MDBxdWV1ZV9wYXlsb2FkX2FsaWduIC0gQWxpZ24gODAyLjExIHBheWxvYWQgdG8gNC1ieXRlIGJvdW5kYXJ5CisgKiBydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZSAtIEFsaWduIDgwMi4xMSBmcmFtZSB0byA0LWJ5dGUgYm91bmRhcnkKICAqIEBza2I6IFRoZSBza2IgdG8gYWxpZ24KLSAqIEBsMnBhZDogU2hvdWxkIEwyIHBhZGRpbmcgYmUgdXNlZAorICoKKyAqIEFsaWduIHRoZSBzdGFydCBvZiB0aGUgODAyLjExIGZyYW1lIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LCB0aGlzIGNvdWxkCisgKiBtZWFuIHRoZSBwYXlsb2FkIGlzIG5vdCBhbGlnbmVkIHByb3Blcmx5IHRob3VnaC4KKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoqCisgKiBydDJ4MDBxdWV1ZV9hbGlnbl9wYXlsb2FkIC0gQWxpZ24gODAyLjExIHBheWxvYWQgdG8gNC1ieXRlIGJvdW5kYXJ5CisgKiBAc2tiOiBUaGUgc2tiIHRvIGFsaWduCiAgKiBAaGVhZGVyX2xlbmd0aDogTGVuZ3RoIG9mIDgwMi4xMSBoZWFkZXIKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBAc2tiIHRvIGJlIHNlbmQgdG8gdGhlIGRldmljZSBvciBtYWM4MDIxMS4KLSAqIElmIEBsMnBhZCBpcyBzZXQgdG8gdHJ1ZSBwYWRkaW5nIHdpbGwgb2NjdXIgYmV0d2VlbiB0aGUgODAyLjExIGhlYWRlcgotICogYW5kIHBheWxvYWQuIE90aGVyd2lzZSB0aGUgcGFkZGluZyB3aWxsIGJlIGRvbmUgaW4gZnJvbnQgb2YgdGhlIDgwMi4xMQotICogaGVhZGVyLgotICogV2hlbiBAbDJwYWQgaXMgc2V0IHRoZSBmdW5jdGlvbiB3aWxsIGNoZWNrIGZvciB0aGUgJlNLQkRFU0NfTDJfUEFEREVECi0gKiBmbGFnIGluICZza2JfZnJhbWVfZGVzYy4gSWYgdGhhdCBmbGFnIGlzIHNldCwgdGhlIHBhZGRpbmcgaXMgcmVtb3ZlZAotICogYW5kIHRoZSBmbGFnIGNsZWFyZWQuIE90aGVyd2lzZSB0aGUgcGFkZGluZyBpcyBhZGRlZCBhbmQgdGhlIGZsYWcgaXMgc2V0LgorICogQWxpZ24gdGhlIDgwMi4xMSBwYXlsb2FkIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LCB0aGlzIGNvdWxkCisgKiBtZWFuIHRoZSBoZWFkZXIgaXMgbm90IGFsaWduZWQgcHJvcGVybHkgdGhvdWdoLgogICovCi12b2lkIHJ0MngwMHF1ZXVlX3BheWxvYWRfYWxpZ24oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBib29sIGwycGFkLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCk7Cit2b2lkIHJ0MngwMHF1ZXVlX2FsaWduX3BheWxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2luc2VydF9sMnBhZCAtIEFsaWduIDgwMi4xMSBoZWFkZXIgJiBwYXlsb2FkIHRvIDQtYnl0ZSBib3VuZGFyeQorICogQHNrYjogVGhlIHNrYiB0byBhbGlnbgorICogQGhlYWRlcl9sZW5ndGg6IExlbmd0aCBvZiA4MDIuMTEgaGVhZGVyCisgKgorICogQXBwbHkgTDIgcGFkZGluZyB0byBhbGlnbiBib3RoIGhlYWRlciBhbmQgcGF5bG9hZCB0byA0LWJ5dGUgYm91bmRhcnkKKyAqLwordm9pZCBydDJ4MDBxdWV1ZV9pbnNlcnRfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpOworCisvKioKKyAqIHJ0MngwMHF1ZXVlX2luc2VydF9sMnBhZCAtIFJlbW92ZSBMMiBwYWRkaW5nIGZyb20gODAyLjExIGZyYW1lCisgKiBAc2tiOiBUaGUgc2tiIHRvIGFsaWduCisgKiBAaGVhZGVyX2xlbmd0aDogTGVuZ3RoIG9mIDgwMi4xMSBoZWFkZXIKKyAqCisgKiBSZW1vdmUgTDIgcGFkZGluZyB1c2VkIHRvIGFsaWduIGJvdGggaGVhZGVyIGFuZCBwYXlsb2FkIHRvIDQtYnl0ZSBib3VuZGFyeSwKKyAqIGJ5IHJlbW92aW5nIHRoZSBMMiBwYWRkaW5nIHRoZSBoZWFkZXIgd2lsbCBubyBsb25nZXIgYmUgNC1ieXRlIGFsaWduZWQuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfcmVtb3ZlX2wycGFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKTsKIAogLyoqCiAgKiBydDJ4MDBxdWV1ZV93cml0ZV90eF9mcmFtZSAtIFdyaXRlIFRYIGZyYW1lIHRvIGhhcmR3YXJlCkBAIC0zMjYsNyArMzQ1LDcgQEAKIHZvaWQgcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYyk7CiB2b2lkIHJ0MngwMGNyeXB0b190eF9pbnNlcnRfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpOwotdm9pZCBydDJ4MDBjcnlwdG9fcnhfaW5zZXJ0X2l2KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgbDJwYWQsCit2b2lkIHJ0MngwMGNyeXB0b19yeF9pbnNlcnRfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCwKIAkJCSAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYyk7CiAjZWxzZQpAQCAtMzg2LDI5ICs0MDUsMTggQEAKIC8qCiAgKiBSRmtpbGwgaGFuZGxlcnMuCiAgKi8KLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKLXZvaWQgcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLXZvaWQgcnQyeDAwcmZraWxsX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwotdm9pZCBydDJ4MDByZmtpbGxfZnJlZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLSNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CisJaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhydDJ4MDBkZXYtPmh3LT53aXBoeSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogeworCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhydDJ4MDBkZXYtPmh3LT53aXBoeSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ0MngwMHJma2lsbF9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci19Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCi0KIC8qCiAgKiBMRUQgaGFuZGxlcnMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMKaW5kZXggZWI5Yjk4MS4uYzY0ZGIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpbmsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCkBAIC00Niw3ICs0NiwxNSBAQAogI2RlZmluZSBERUZBVUxUX1BFUkNFTlRBR0UJNTAKIAogLyoKLSAqIFNtYWxsIGhlbHBlciBtYWNybyB0byB3b3JrIHdpdGggbW92aW5nL3dhbGtpbmcgYXZlcmFnZXMuCisgKiBTbWFsbCBoZWxwZXIgbWFjcm8gZm9yIHBlcmNlbnRhZ2UgY2FsY3VsYXRpb24KKyAqIFRoaXMgaXMgYSB2ZXJ5IHNpbXBsZSBtYWNybyB3aXRoIHRoZSBvbmx5IGNhdGNoIHRoYXQgaXQgd2lsbAorICogcHJvZHVjZSBhIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB0b3RhbCB2YWx1ZSB3YXMgcHJvdmlkZWQuCisgKi8KKyNkZWZpbmUgUEVSQ0VOVEFHRShfX3ZhbHVlLCBfX3RvdGFsKSBcCisJKCAoX190b3RhbCkgPyAoKChfX3ZhbHVlKSAqIDEwMCkgLyAoX190b3RhbCkpIDogKERFRkFVTFRfUEVSQ0VOVEFHRSkgKQorCisvKgorICogSGVscGVyIHN0cnVjdCBhbmQgbWFjcm8gdG8gd29yayB3aXRoIG1vdmluZy93YWxraW5nIGF2ZXJhZ2VzLgogICogV2hlbiBhZGRpbmcgYSB2YWx1ZSB0byB0aGUgYXZlcmFnZSB2YWx1ZSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uCiAgKiBpcyBuZWVkZWQ6CiAgKgpAQCAtNjAsMTggKzY4LDI4IEBACiAgKiBmb3IgYSBmZXcgbWludXRlcyBidXQgd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIGF3YXkgZnJvbSB0aGUgQVAKICAqIHRoZSBhdmVyYWdlIHdpbGwgbm90IGRlY3JlYXNlIGZhc3QgZW5vdWdoIHRvIGNvbXBlbnNhdGUuCiAgKiBUaGUgd2Fsa2luZyBhdmVyYWdlIGNvbXBlbnNhdGVzIHRoaXMgYW5kIHdpbGwgbW92ZSB0b3dhcmRzCi0gKiB0aGUgbmV3IHZhbHVlcyBjb3JyZWN0bHkgYWxsb3dpbmcgYSBlZmZlY3RpdmUgbGluayB0dW5pbmcuCisgKiB0aGUgbmV3IHZhbHVlcyBjb3JyZWN0bHkgYWxsb3dpbmcgYSBlZmZlY3RpdmUgbGluayB0dW5pbmcsCisgKiB0aGUgc3BlZWQgb2YgdGhlIGF2ZXJhZ2UgbW92aW5nIHRvd2FyZHMgb3RoZXIgdmFsdWVzIGRlcGVuZHMKKyAqIG9uIHRoZSB2YWx1ZSBmb3IgdGhlIG51bWJlciBvZiBzYW1wbGVzLiBUaGUgaGlnaGVyIHRoZSBudW1iZXIKKyAqIG9mIHNhbXBsZXMsIHRoZSBzbG93ZXIgdGhlIGF2ZXJhZ2Ugd2lsbCBtb3ZlLgorICogV2UgdXNlIHR3byB2YXJpYWJsZXMgdG8ga2VlcCB0cmFjayBvZiB0aGUgYXZlcmFnZSB2YWx1ZSB0bworICogY29tcGVuc2F0ZSBmb3IgdGhlIHJvdW5kaW5nIGVycm9ycy4gVGhpcyBjYW4gYmUgYSBzaWduaWZpY2FudAorICogZXJyb3IgKD41ZEJtKSBpZiB0aGUgZmFjdG9yIGlzIHRvbyBsb3cuCiAgKi8KLSNkZWZpbmUgTU9WSU5HX0FWRVJBR0UoX19hdmcsIF9fdmFsLCBfX3NhbXBsZXMpIFwKLQkoICgoKF9fYXZnKSAqICgoX19zYW1wbGVzKSAtIDEpKSArIChfX3ZhbCkpIC8gKF9fc2FtcGxlcykgKQotCi0vKgotICogU21hbGwgaGVscGVyIG1hY3JvIGZvciBwZXJjZW50YWdlIGNhbGN1bGF0aW9uCi0gKiBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgbWFjcm8gd2l0aCB0aGUgb25seSBjYXRjaCB0aGF0IGl0IHdpbGwKLSAqIHByb2R1Y2UgYSBkZWZhdWx0IHZhbHVlIGluIGNhc2Ugbm8gdG90YWwgdmFsdWUgd2FzIHByb3ZpZGVkLgotICovCi0jZGVmaW5lIFBFUkNFTlRBR0UoX192YWx1ZSwgX190b3RhbCkgXAotCSggKF9fdG90YWwpID8gKCgoX192YWx1ZSkgKiAxMDApIC8gKF9fdG90YWwpKSA6IChERUZBVUxUX1BFUkNFTlRBR0UpICkKKyNkZWZpbmUgQVZHX1NBTVBMRVMJOAorI2RlZmluZSBBVkdfRkFDVE9SCTEwMDAKKyNkZWZpbmUgTU9WSU5HX0FWRVJBR0UoX19hdmcsIF9fdmFsKSBcCisoeyBcCisJc3RydWN0IGF2Z192YWwgX19uZXc7IFwKKwlfX25ldy5hdmdfd2VpZ2h0ID0gXAorCSAgICAoX19hdmcpLmF2Z193ZWlnaHQgID8gXAorCQkoKCgoX19hdmcpLmF2Z193ZWlnaHQgKiAoKEFWR19TQU1QTEVTKSAtIDEpKSArIFwKKwkJICAoKF9fdmFsKSAqIChBVkdfRkFDVE9SKSkpIC8gXAorCQkgKEFWR19TQU1QTEVTKSApIDogXAorCQkoKF9fdmFsKSAqIChBVkdfRkFDVE9SKSk7IFwKKwlfX25ldy5hdmcgPSBfX25ldy5hdmdfd2VpZ2h0IC8gKEFWR19GQUNUT1IpOyBcCisJX19uZXc7IFwKK30pCiAKIC8qCiAgKiBGb3IgY2FsY3VsYXRpbmcgdGhlIFNpZ25hbCBxdWFsaXR5IHdlIGhhdmUgZGV0ZXJtaW5lZApAQCAtOTgsNTYgKzExNiw0MSBAQAogewogCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CiAKLQlpZiAoYW50LT5yc3NpX2FudCAmJiBydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9zdWNjZXNzKQotCQlyZXR1cm4gYW50LT5yc3NpX2FudDsKKwlpZiAoYW50LT5yc3NpX2FudC5hdmcgJiYgcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfc3VjY2VzcykKKwkJcmV0dXJuIGFudC0+cnNzaV9hbnQuYXZnOwogCXJldHVybiBERUZBVUxUX1JTU0k7CiB9CiAKLXN0YXRpYyBpbnQgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3Rvcnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJICAgICAgIGVudW0gYW50ZW5uYSBhbnRlbm5hKQorc3RhdGljIGludCBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CiAKLQlpZiAoYW50LT5yc3NpX2hpc3RvcnlbYW50ZW5uYSAtIEFOVEVOTkFfQV0pCi0JCXJldHVybiBhbnQtPnJzc2lfaGlzdG9yeVthbnRlbm5hIC0gQU5URU5OQV9BXTsKKwlpZiAoYW50LT5yc3NpX2hpc3RvcnkpCisJCXJldHVybiBhbnQtPnJzc2lfaGlzdG9yeTsKIAlyZXR1cm4gREVGQVVMVF9SU1NJOwogfQotLyogU21hbGwgd3JhcHBlciBmb3IgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKSAqLwotI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfcnhfaGlzdG9yeShfX2RldikgXAotCXJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKLQkJCQkJICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS5yeCkKLSNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX3R4X2hpc3RvcnkoX19kZXYpIFwKLQlydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCi0JCQkJCSAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUudHgpCiAKIHN0YXRpYyB2b2lkIHJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9oaXN0b3J5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJCQkgICBlbnVtIGFudGVubmEgYW50ZW5uYSwKIAkJCQkJCSAgIGludCByc3NpKQogewogCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7Ci0JYW50LT5yc3NpX2hpc3RvcnlbYW50LT5hY3RpdmUucnggLSBBTlRFTk5BX0FdID0gcnNzaTsKKwlhbnQtPnJzc2lfaGlzdG9yeSA9IHJzc2k7CiB9Ci0vKiBTbWFsbCB3cmFwcGVyIGZvciBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgpICovCi0jZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9yeF9oaXN0b3J5KF9fZGV2LCBfX3Jzc2kpIFwKLQlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeSgoX19kZXYpLCBcCi0JCQkJCSAgICAgICAoX19kZXYpLT5saW5rLmFudC5hY3RpdmUucngsIFwKLQkJCQkJICAgICAgIChfX3Jzc2kpKQotI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfdHhfaGlzdG9yeShfX2RldiwgX19yc3NpKSBcCi0JcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAotCQkJCQkgICAgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnR4LCBcCi0JCQkJCSAgICAgICAoX19yc3NpKSkKIAogc3RhdGljIHZvaWQgcnQyeDAwbGlua19hbnRlbm5hX3Jlc2V0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JcnQyeDAwZGV2LT5saW5rLmFudC5yc3NpX2FudCA9IDA7CisJcnQyeDAwZGV2LT5saW5rLmFudC5yc3NpX2FudC5hdmcgPSAwOworCXJ0MngwMGRldi0+bGluay5hbnQucnNzaV9hbnQuYXZnX3dlaWdodCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9zYW1wbGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OwogCXN0cnVjdCBhbnRlbm5hX3NldHVwIG5ld19hbnQ7Ci0JaW50IHNhbXBsZV9hID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkocnQyeDAwZGV2LCBBTlRFTk5BX0EpOwotCWludCBzYW1wbGVfYiA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHJ0MngwMGRldiwgQU5URU5OQV9CKTsKKwlpbnQgb3RoZXJfYW50ZW5uYTsKKworCWludCBzYW1wbGVfY3VycmVudCA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfbGlua19yc3NpKHJ0MngwMGRldik7CisJaW50IHNhbXBsZV9vdGhlciA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHJ0MngwMGRldik7CiAKIAltZW1jcHkoJm5ld19hbnQsICZhbnQtPmFjdGl2ZSwgc2l6ZW9mKG5ld19hbnQpKTsKIApAQCAtMTU4LDIyICsxNjEsMjcgQEAKIAogCS8qCiAJICogRHVyaW5nIHRoZSBsYXN0IHBlcmlvZCB3ZSBoYXZlIHNhbXBsZWQgdGhlIFJTU0kKLQkgKiBmcm9tIGJvdGggYW50ZW5uYSdzLiBJdCBub3cgaXMgdGltZSB0byBkZXRlcm1pbmUKKwkgKiBmcm9tIGJvdGggYW50ZW5uYXMuIEl0IG5vdyBpcyB0aW1lIHRvIGRldGVybWluZQogCSAqIHdoaWNoIGFudGVubmEgZGVtb25zdHJhdGVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlLgogCSAqIFdoZW4gd2UgYXJlIGFscmVhZHkgb24gdGhlIGFudGVubmEgd2l0aCB0aGUgYmVzdAotCSAqIHBlcmZvcm1hbmNlLCB0aGVuIHRoZXJlIHJlYWxseSBpcyBub3RoaW5nIGZvciB1cwotCSAqIGxlZnQgdG8gZG8uCisJICogcGVyZm9ybWFuY2UsIGp1c3QgY3JlYXRlIGEgZ29vZCBzdGFydGluZyBwb2ludAorCSAqIGZvciB0aGUgaGlzdG9yeSBhbmQgd2UgYXJlIGRvbmUuCiAJICovCi0JaWYgKHNhbXBsZV9hID09IHNhbXBsZV9iKQorCWlmIChzYW1wbGVfY3VycmVudCA+PSBzYW1wbGVfb3RoZXIpIHsKKwkJcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3RvcnkocnQyeDAwZGV2LAorCQkJc2FtcGxlX2N1cnJlbnQpOwogCQlyZXR1cm47CisJfQorCisJb3RoZXJfYW50ZW5uYSA9IChhbnQtPmFjdGl2ZS5yeCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOwogCiAJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKLQkJbmV3X2FudC5yeCA9IChzYW1wbGVfYSA+IHNhbXBsZV9iKSA/IEFOVEVOTkFfQSA6IEFOVEVOTkFfQjsKKwkJbmV3X2FudC5yeCA9IG90aGVyX2FudGVubmE7CiAKIAlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfVFhfRElWRVJTSVRZKQotCQluZXdfYW50LnR4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COworCQluZXdfYW50LnR4ID0gb3RoZXJfYW50ZW5uYTsKIAotCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsICZuZXdfYW50KTsKKwlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCBuZXdfYW50KTsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X2V2YWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKQEAgLTE5MCw4ICsxOTgsOCBAQAogCSAqIGFmdGVyIHRoYXQgdXBkYXRlIHRoZSBoaXN0b3J5IHdpdGggdGhlIGN1cnJlbnQgdmFsdWUuCiAJICovCiAJcnNzaV9jdXJyID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9saW5rX3Jzc2kocnQyeDAwZGV2KTsKLQlyc3NpX29sZCA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9yeF9oaXN0b3J5KHJ0MngwMGRldik7Ci0JcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX3J4X2hpc3RvcnkocnQyeDAwZGV2LCByc3NpX2N1cnIpOworCXJzc2lfb2xkID0gcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkocnQyeDAwZGV2KTsKKwlydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfaGlzdG9yeShydDJ4MDBkZXYsIHJzc2lfY3Vycik7CiAKIAkvKgogCSAqIExlZ2FjeSBkcml2ZXIgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIHN3YXAgYW50ZW5uYSdzCkBAIC0yMTMsMTIgKzIyMSwxMyBAQAogCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCiAJCW5ld19hbnQudHggPSAobmV3X2FudC50eCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOwogCi0JcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJm5ld19hbnQpOworCXJ0MngwMGxpYl9jb25maWdfYW50ZW5uYShydDJ4MDBkZXYsIG5ld19hbnQpOwogfQogCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBib29sIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXN0cnVjdCBsaW5rX2FudCAqYW50ID0gJnJ0MngwMGRldi0+bGluay5hbnQ7CisJdW5zaWduZWQgaW50IGZsYWdzID0gYW50LT5mbGFnczsKIAogCS8qCiAJICogRGV0ZXJtaW5lIGlmIHNvZnR3YXJlIGRpdmVyc2l0eSBpcyBlbmFibGVkIGZvcgpAQCAtMjI2LDMwICsyMzUsMzggQEAKIAkgKiBBbHdheXMgcGVyZm9ybSB0aGlzIGNoZWNrIHNpbmNlIHdpdGhpbiB0aGUgbGluawogCSAqIHR1bmVyIGludGVydmFsIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGhhdmUgY2hhbmdlZC4KIAkgKi8KLQlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1JYX0RJVkVSU0lUWTsKLQlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1RYX0RJVkVSU0lUWTsKKwlmbGFncyAmPSB+QU5URU5OQV9SWF9ESVZFUlNJVFk7CisJZmxhZ3MgJj0gfkFOVEVOTkFfVFhfRElWRVJTSVRZOwogCiAJaWYgKHJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPT0gQU5URU5OQV9TV19ESVZFUlNJVFkpCi0JCWFudC0+ZmxhZ3MgfD0gQU5URU5OQV9SWF9ESVZFUlNJVFk7CisJCWZsYWdzIHw9IEFOVEVOTkFfUlhfRElWRVJTSVRZOwogCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQotCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOworCQlmbGFncyB8PSBBTlRFTk5BX1RYX0RJVkVSU0lUWTsKIAogCWlmICghKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkgJiYKIAkgICAgIShhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpKSB7CiAJCWFudC0+ZmxhZ3MgPSAwOwotCQlyZXR1cm47CisJCXJldHVybiB0cnVlOwogCX0KIAorCS8qIFVwZGF0ZSBmbGFncyAqLworCWFudC0+ZmxhZ3MgPSBmbGFnczsKKwogCS8qCiAJICogSWYgd2UgaGF2ZSBvbmx5IHNhbXBsZWQgdGhlIGRhdGEgb3ZlciB0aGUgbGFzdCBwZXJpb2QKIAkgKiB3ZSBzaG91bGQgbm93IGhhcnZlc3QgdGhlIGRhdGEuIE90aGVyd2lzZSBqdXN0IGV2YWx1YXRlCiAJICogdGhlIGRhdGEuIFRoZSBsYXR0ZXIgc2hvdWxkIG9ubHkgYmUgcGVyZm9ybWVkIG9uY2UKIAkgKiBldmVyeSAyIHNlY29uZHMuCiAJICovCi0JaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX01PREVfU0FNUExFKQorCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9NT0RFX1NBTVBMRSkgewogCQlydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfc2FtcGxlKHJ0MngwMGRldik7Ci0JZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLmNvdW50ICYgMSkKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsuY291bnQgJiAxKSB7CiAJCXJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9ldmFsKHJ0MngwMGRldik7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBydDJ4MDBsaW5rX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtMjYwLDggKzI3Nyw2IEBACiAJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKIAlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JaW50IGF2Z19yc3NpID0gcnhkZXNjLT5yc3NpOwotCWludCBhbnRfcnNzaSA9IHJ4ZGVzYy0+cnNzaTsKIAogCS8qCiAJICogRnJhbWUgd2FzIHJlY2VpdmVkIHN1Y2Nlc3NmdWxseSBzaW5jZSBub24tc3VjY2VzZnVsbApAQCAtMjgxLDE2ICsyOTYsMTIgQEAKIAkvKgogCSAqIFVwZGF0ZSBnbG9iYWwgUlNTSQogCSAqLwotCWlmIChsaW5rLT5hdmdfcnNzaSkKLQkJYXZnX3Jzc2kgPSBNT1ZJTkdfQVZFUkFHRShsaW5rLT5hdmdfcnNzaSwgcnhkZXNjLT5yc3NpLCA4KTsKLQlsaW5rLT5hdmdfcnNzaSA9IGF2Z19yc3NpOworCWxpbmstPmF2Z19yc3NpID0gTU9WSU5HX0FWRVJBR0UobGluay0+YXZnX3Jzc2ksIHJ4ZGVzYy0+cnNzaSk7CiAKIAkvKgogCSAqIFVwZGF0ZSBhbnRlbm5hIFJTU0kKIAkgKi8KLQlpZiAoYW50LT5yc3NpX2FudCkKLQkJYW50X3Jzc2kgPSBNT1ZJTkdfQVZFUkFHRShhbnQtPnJzc2lfYW50LCByeGRlc2MtPnJzc2ksIDgpOwotCWFudC0+cnNzaV9hbnQgPSBhbnRfcnNzaTsKKwlhbnQtPnJzc2lfYW50ID0gTU9WSU5HX0FWRVJBR0UoYW50LT5yc3NpX2FudCwgcnhkZXNjLT5yc3NpKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwbGlua19wcmVjYWxjdWxhdGVfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0zNTEsOCArMzYyLDggQEAKIAogCXJ0MngwMGxpbmtfcmVzZXRfdHVuZXIocnQyeDAwZGV2LCBmYWxzZSk7CiAKLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAotCQkJICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LAorCQkJCSAgICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CiB9CiAKIHZvaWQgcnQyeDAwbGlua19zdG9wX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC00MjMsMTAgKzQzNCwxMCBAQAogCSAqIGNvbGxlY3QgdGhlIFJTU0kgZGF0YSB3ZSBjb3VsZCB1c2UgdGhpcy4gT3RoZXJ3aXNlIHdlCiAJICogbXVzdCBmYWxsYmFjayB0byB0aGUgZGVmYXVsdCBSU1NJIHZhbHVlLgogCSAqLwotCWlmICghbGluay0+YXZnX3Jzc2kgfHwgIXF1YWwtPnJ4X3N1Y2Nlc3MpCisJaWYgKCFsaW5rLT5hdmdfcnNzaS5hdmcgfHwgIXF1YWwtPnJ4X3N1Y2Nlc3MpCiAJCXF1YWwtPnJzc2kgPSBERUZBVUxUX1JTU0k7CiAJZWxzZQotCQlxdWFsLT5yc3NpID0gbGluay0+YXZnX3Jzc2k7CisJCXF1YWwtPnJzc2kgPSBsaW5rLT5hdmdfcnNzaS5hdmc7CiAKIAkvKgogCSAqIE9ubHkgcGVyZm9ybSB0aGUgbGluayB0dW5pbmcgd2hlbiBMaW5rIHR1bmluZwpAQCAtNDQ0LDI1ICs0NTUsMjIgQEAKIAkvKgogCSAqIFNlbmQgYSBzaWduYWwgdG8gdGhlIGxlZCB0byB1cGRhdGUgdGhlIGxlZCBzaWduYWwgc3RyZW5ndGguCiAJICovCi0JcnQyeDAwbGVkc19sZWRfcXVhbGl0eShydDJ4MDBkZXYsIGxpbmstPmF2Z19yc3NpKTsKKwlydDJ4MDBsZWRzX2xlZF9xdWFsaXR5KHJ0MngwMGRldiwgcXVhbC0+cnNzaSk7CiAKIAkvKgotCSAqIEV2YWx1YXRlIGFudGVubmEgc2V0dXAsIG1ha2UgdGhpcyB0aGUgbGFzdCBzdGVwIHNpbmNlIHRoaXMgY291bGQKLQkgKiBwb3NzaWJseSByZXNldCBzb21lIHN0YXRpc3RpY3MuCisJICogRXZhbHVhdGUgYW50ZW5uYSBzZXR1cCwgbWFrZSB0aGlzIHRoZSBsYXN0IHN0ZXAgd2hlbgorCSAqIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eSBtYWRlIGNoYW5nZXMgdGhlIHF1YWxpdHkKKwkgKiBzdGF0aXN0aWNzIHdpbGwgYmUgcmVzZXQuCiAJICovCi0JcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5KHJ0MngwMGRldik7Ci0KLQkvKgotCSAqIFJlc2V0IHRoZSBxdWFsaXR5IGNvdW50ZXJzIHdoaWNoIHJlY291bnRlZCBkdXJpbmcgZWFjaCBwZXJpb2QuCi0JICovCi0JcnQyeDAwbGlua19yZXNldF9xdWFsKHJ0MngwMGRldik7CisJaWYgKHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eShydDJ4MDBkZXYpKQorCQlydDJ4MDBsaW5rX3Jlc2V0X3F1YWwocnQyeDAwZGV2KTsKIAogCS8qCiAJICogSW5jcmVhc2UgdHVuZXIgY291bnRlciwgYW5kIHJlc2NoZWR1bGUgdGhlIG5leHQgbGluayB0dW5lciBydW4uCiAJICovCiAJbGluay0+Y291bnQrKzsKLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAotCQkJICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LAorCQkJCSAgICAgJmxpbmstPndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7CiB9CiAKIHZvaWQgcnQyeDAwbGlua19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IGM0YzA2YjQuLjkyOWI4NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTczLDcgKzczLDggQEAKIAllbHNlCiAJCXJ0c19pbmZvLT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0NUTF9OT19BQ0s7CiAKLQlza2ItPmRvX25vdF9lbmNyeXB0ID0gMTsKKwkvKiBEaXNhYmxlIGhhcmR3YXJlIGVuY3J5cHRpb24gKi8KKwlydHNfaW5mby0+Y29udHJvbC5od19rZXkgPSBOVUxMOwogCiAJLyoKIAkgKiBSVFMvQ1RTIGZyYW1lIHNob3VsZCB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgcGx1cyBhbnkKQEAgLTI3Myw2ICsyNzQsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmludGYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZpbnRmLT5zZXFsb2NrKTsKKwltdXRleF9pbml0KCZpbnRmLT5iZWFjb25fc2tiX211dGV4KTsKIAlpbnRmLT5iZWFjb24gPSBlbnRyeTsKIAogCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQpAQCAtMzM3LDU0ICszMzksMzggQEAKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCWludCBzdGF0dXM7CiAKIAkvKgotCSAqIE1hYzgwMjExIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aGlsZSB3ZSBhcmUgdHJ5aW5nCisJICogbWFjODAyMTEgbWlnaHQgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdoaWxlIHdlIGFyZSB0cnlpbmcKIAkgKiB0byByZW1vdmUgdGhlIGRldmljZSBvciBwZXJoYXBzIHN1c3BlbmRpbmcgaXQuCiAJICovCiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAogCS8qCi0JICogT25seSBjaGFuZ2UgZGV2aWNlIHN0YXRlIHdoZW4gdGhlIHJhZGlvIGlzIGVuYWJsZWQuIEl0IGRvZXMgbm90Ci0JICogbWF0dGVyIHdoYXQgcGFyYW1ldGVycyB3ZSBoYXZlIGNvbmZpZ3VyZWQgd2hlbiB0aGUgcmFkaW8gaXMgZGlzYWJsZWQKLQkgKiBiZWNhdXNlIHdlIHdvbid0IGJlIGFibGUgdG8gc2VuZCBvciByZWNlaXZlIGFueXdheS4gQWxzbyBub3RlIHRoYXQKLQkgKiBzb21lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAoZS5nLiBjaGFubmVsIGFuZCBhbnRlbm5hIHZhbHVlcykgY2FuCi0JICogb25seSBiZSBzZXQgd2hlbiB0aGUgcmFkaW8gaXMgZW5hYmxlZC4KKwkgKiBTb21lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAoZS5nLiBjaGFubmVsIGFuZCBhbnRlbm5hIHZhbHVlcykgY2FuCisJICogb25seSBiZSBzZXQgd2hlbiB0aGUgcmFkaW8gaXMgZW5hYmxlZCwgYnV0IGRvIHJlcXVpcmUgdGhlIFJYIHRvCisJICogYmUgb2ZmLgogCSAqLwotCWlmIChjb25mLT5yYWRpb19lbmFibGVkKSB7Ci0JCS8qIEZvciBwcm9ncmFtbWluZyB0aGUgdmFsdWVzLCB3ZSBoYXZlIHRvIHR1cm4gUlggb2ZmICovCi0JCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PRkYpOworCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PRkYpOwogCi0JCS8qIEVuYWJsZSB0aGUgcmFkaW8gKi8KLQkJc3RhdHVzID0gcnQyeDAwbGliX2VuYWJsZV9yYWRpbyhydDJ4MDBkZXYpOwotCQlpZiAodW5saWtlbHkoc3RhdHVzKSkKLQkJCXJldHVybiBzdGF0dXM7CisJLyoKKwkgKiBXaGVuIHdlJ3ZlIGp1c3QgdHVybmVkIG9uIHRoZSByYWRpbywgd2Ugd2FudCB0byByZXByb2dyYW0KKwkgKiBldmVyeXRoaW5nIHRvIGVuc3VyZSBhIGNvbnNpc3RlbnQgc3RhdGUKKwkgKi8KKwlydDJ4MDBsaWJfY29uZmlnKHJ0MngwMGRldiwgY29uZiwgY2hhbmdlZCk7CiAKLQkJLyoKLQkJICogV2hlbiB3ZSd2ZSBqdXN0IHR1cm5lZCBvbiB0aGUgcmFkaW8sIHdlIHdhbnQgdG8gcmVwcm9ncmFtCi0JCSAqIGV2ZXJ5dGhpbmcgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBzdGF0ZQotCQkgKi8KLQkJcnQyeDAwbGliX2NvbmZpZyhydDJ4MDBkZXYsIGNvbmYsIGNoYW5nZWQpOworCS8qCisJICogQWZ0ZXIgdGhlIHJhZGlvIGhhcyBiZWVuIGVuYWJsZWQgd2UgbmVlZCB0byBjb25maWd1cmUKKwkgKiB0aGUgYW50ZW5uYSB0byB0aGUgZGVmYXVsdCBzZXR0aW5ncy4gcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKCkKKwkgKiBzaG91bGQgZGV0ZXJtaW5lIGlmIGFueSBhY3Rpb24gc2hvdWxkIGJlIHRha2VuIGJhc2VkIG9uCisJICogY2hlY2tpbmcgaWYgZGl2ZXJzaXR5IGhhcyBiZWVuIGVuYWJsZWQgb3Igbm8gYW50ZW5uYSBjaGFuZ2VzCisJICogaGF2ZSBiZWVuIG1hZGUgc2luY2UgdGhlIGxhc3QgY29uZmlndXJhdGlvbiBjaGFuZ2UuCisJICovCisJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgcnQyeDAwZGV2LT5kZWZhdWx0X2FudCk7CiAKLQkJLyoKLQkJICogVGhlIHJhZGlvIHdhcyBlbmFibGVkLCBjb25maWd1cmUgdGhlIGFudGVubmEgdG8gdGhlCi0JCSAqIGRlZmF1bHQgc2V0dGluZ3MsIHRoZSBsaW5rIHR1bmVyIHdpbGwgbGF0ZXIgc3RhcnQKLQkJICogY29udGludWUgY29uZmlndXJpbmcgdGhlIGFudGVubmEgYmFzZWQgb24gdGhlIHNvZnR3YXJlCi0JCSAqIGRpdmVyc2l0eS4gQnV0IGZvciBub24tZGl2ZXJzaXR5IGNvbmZpZ3VyYXRpb25zLCB3ZSBuZWVkCi0JCSAqIHRvIGhhdmUgY29uZmlndXJlZCB0aGUgY29ycmVjdCBzdGF0ZSBub3cuCi0JCSAqLwotCQlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9SQURJT19FTkFCTEVEKQotCQkJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwKLQkJCQkJCSAmcnQyeDAwZGV2LT5kZWZhdWx0X2FudCk7Ci0KLQkJLyogVHVybiBSWCBiYWNrIG9uICovCi0JCXJ0MngwMGxpYl90b2dnbGVfcngocnQyeDAwZGV2LCBTVEFURV9SQURJT19SWF9PTik7Ci0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSB0aGUgcmFkaW8gKi8KLQkJcnQyeDAwbGliX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKLQl9CisJLyogVHVybiBSWCBiYWNrIG9uICovCisJcnQyeDAwbGliX3RvZ2dsZV9yeChydDJ4MDBkZXYsIFNUQVRFX1JBRElPX1JYX09OKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzkzLDcgKzM3OSw3IEBACiB2b2lkIHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCXVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKKwkJCQl1NjQgbXVsdGljYXN0KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKIApAQCAtNDA2LDYgKzM5Miw3IEBACiAJICAgIEZJRl9GQ1NGQUlMIHwKIAkgICAgRklGX1BMQ1BGQUlMIHwKIAkgICAgRklGX0NPTlRST0wgfAorCSAgICBGSUZfUFNQT0xMIHwKIAkgICAgRklGX09USEVSX0JTUyB8CiAJICAgIEZJRl9QUk9NSVNDX0lOX0JTUzsKIApAQCAtNDIxLDE5ICs0MDgsNDIgQEAKIAkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUyB8IEZJRl9PVEhFUl9CU1M7CiAKIAkvKgorCSAqIElmIHRoZSBkZXZpY2UgaGFzIGEgc2luZ2xlIGZpbHRlciBmb3IgYWxsIGNvbnRyb2wgZnJhbWVzLAorCSAqIEZJRl9DT05UUk9MIGFuZCBGSUZfUFNQT0xMIGZsYWdzIGltcGx5IGVhY2ggb3RoZXIuCisJICogQW5kIGlmIHRoZSBkZXZpY2UgaGFzIG1vcmUgdGhhbiBvbmUgZmlsdGVyIGZvciBjb250cm9sIGZyYW1lcworCSAqIG9mIGRpZmZlcmVudCB0eXBlcywgYnV0IGhhcyBubyBhIHNlcGFyYXRlIGZpbHRlciBmb3IgUFMgUG9sbCBmcmFtZXMsCisJICogRklGX0NPTlRST0wgZmxhZyBpbXBsaWVzIEZJRl9QU1BPTEwuCisJICovCisJaWYgKCF0ZXN0X2JpdChEUklWRVJfU1VQUE9SVF9DT05UUk9MX0ZJTFRFUlMsICZydDJ4MDBkZXYtPmZsYWdzKSkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wgfHwgKnRvdGFsX2ZsYWdzICYgRklGX1BTUE9MTCkKKwkJCSp0b3RhbF9mbGFncyB8PSBGSUZfQ09OVFJPTCB8IEZJRl9QU1BPTEw7CisJfQorCWlmICghdGVzdF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJfUFNQT0xMLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKQorCQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9QU1BPTEw7CisJfQorCisJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbnkgd29yayBsZWZ0IGZvciB1cy4KIAkgKi8KIAlpZiAocnQyeDAwZGV2LT5wYWNrZXRfZmlsdGVyID09ICp0b3RhbF9mbGFncykKIAkJcmV0dXJuOwogCXJ0MngwMGRldi0+cGFja2V0X2ZpbHRlciA9ICp0b3RhbF9mbGFnczsKIAotCWlmICghdGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMGRldi0+b3BzLT5saWItPmNvbmZpZ19maWx0ZXIocnQyeDAwZGV2LCAqdG90YWxfZmxhZ3MpOwotCWVsc2UKLQkJcXVldWVfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsICZydDJ4MDBkZXYtPmZpbHRlcl93b3JrKTsKKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfZmlsdGVyKHJ0MngwMGRldiwgKnRvdGFsX2ZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyKTsKIAoraW50IHJ0MngwMG1hY19zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICBib29sIHNldCkKK3sKKwlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CisKKwlydDJ4MDBsaWJfYmVhY29uZG9uZShydDJ4MDBkZXYpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX3NldF90aW0pOworCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPCiBzdGF0aWMgdm9pZCBtZW1jcHlfdGtpcChzdHJ1Y3QgcnQyeDAwbGliX2NyeXB0byAqY3J5cHRvLCB1OCAqa2V5LCB1OCBrZXlfbGVuKQogewpAQCAtNTcyLDExICs1ODIsMTAgQEAKIHsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2ID0gaHctPnByaXY7CiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKLQl1bnNpZ25lZCBpbnQgZGVsYXllZCA9IDA7CiAJaW50IHVwZGF0ZV9ic3NpZCA9IDA7CiAKIAkvKgotCSAqIE1hYzgwMjExIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aGlsZSB3ZSBhcmUgdHJ5aW5nCisJICogbWFjODAyMTEgbWlnaHQgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdoaWxlIHdlIGFyZSB0cnlpbmcKIAkgKiB0byByZW1vdmUgdGhlIGRldmljZSBvciBwZXJoYXBzIHN1c3BlbmRpbmcgaXQuCiAJICovCiAJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQpAQCAtNjI2LDMwICs2MzUsMTUgQEAKIAkJZWxzZQogCQkJcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQtLTsKIAotCQlpZiAoIXRlc3RfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQkJcnQyeDAwbGVkc19sZWRfYXNzb2MocnQyeDAwZGV2LAotCQkJCQkgICAgICEhcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQpOwotCQllbHNlCi0JCQlkZWxheWVkIHw9IERFTEFZRURfTEVEX0FTU09DOworCQlydDJ4MDBsZWRzX2xlZF9hc3NvYyhydDJ4MDBkZXYsICEhcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQpOwogCX0KIAogCS8qCiAJICogV2hlbiB0aGUgZXJwIGluZm9ybWF0aW9uIGhhcyBjaGFuZ2VkLCB3ZSBzaG91bGQgcGVyZm9ybQogCSAqIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBzdGVwcy4gRm9yIGFsbCBvdGhlciBjaGFuZ2VzIHdlIGFyZSBkb25lLgogCSAqLwotCWlmIChjaGFuZ2VzICYgfihCU1NfQ0hBTkdFRF9BU1NPQyB8IEJTU19DSEFOR0VEX0hUKSkgewotCQlpZiAoIXRlc3RfYml0KERSSVZFUl9SRVFVSVJFX1NDSEVEVUxFRCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQkJcnQyeDAwbGliX2NvbmZpZ19lcnAocnQyeDAwZGV2LCBpbnRmLCBic3NfY29uZik7Ci0JCWVsc2UKLQkJCWRlbGF5ZWQgfD0gREVMQVlFRF9DT05GSUdfRVJQOwotCX0KLQotCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7Ci0JaWYgKGRlbGF5ZWQpIHsKLQkJaW50Zi0+ZGVsYXllZF9mbGFncyB8PSBkZWxheWVkOwotCQlzY2hlZHVsZV93b3JrKCZydDJ4MDBkZXYtPmludGZfd29yayk7Ci0JfQotCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKKwlpZiAoY2hhbmdlcyAmIH4oQlNTX0NIQU5HRURfQVNTT0MgfCBCU1NfQ0hBTkdFRF9IVCkpCisJCXJ0MngwMGxpYl9jb25maWdfZXJwKHJ0MngwMGRldiwgaW50ZiwgYnNzX2NvbmYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQpOwogCkBAIC02ODcsMyArNjgxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfY29uZl90eCk7CisKK3ZvaWQgcnQyeDAwbWFjX3Jma2lsbF9wb2xsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKKwlib29sIGFjdGl2ZSA9ICEhcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmZraWxsX3BvbGwocnQyeDAwZGV2KTsKKworCXdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUoaHctPndpcGh5LCAhYWN0aXZlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19yZmtpbGxfcG9sbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCmluZGV4IDQ0ZTViMzIuLjU3NzAyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC0xNDgsMzUgKzE0OCw4OSBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKLXZvaWQgcnQyeDAwcXVldWVfcGF5bG9hZF9hbGlnbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIGJvb2wgbDJwYWQsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKQordm9pZCBydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwogCXVuc2lnbmVkIGludCBmcmFtZV9sZW5ndGggPSBza2ItPmxlbjsKLQl1bnNpZ25lZCBpbnQgYWxpZ24gPSBBTElHTl9TSVpFKHNrYiwgaGVhZGVyX2xlbmd0aCk7CisJdW5zaWduZWQgaW50IGFsaWduID0gQUxJR05fU0laRShza2IsIDApOwogCiAJaWYgKCFhbGlnbikKIAkJcmV0dXJuOwogCi0JaWYgKGwycGFkKSB7Ci0JCWlmIChza2JkZXNjLT5mbGFncyAmIFNLQkRFU0NfTDJfUEFEREVEKSB7Ci0JCQkvKiBSZW1vdmUgTDIgcGFkZGluZyAqLwotCQkJbWVtbW92ZShza2ItPmRhdGEgKyBhbGlnbiwgc2tiLT5kYXRhLCBoZWFkZXJfbGVuZ3RoKTsKLQkJCXNrYl9wdWxsKHNrYiwgYWxpZ24pOwotCQkJc2tiZGVzYy0+ZmxhZ3MgJj0gflNLQkRFU0NfTDJfUEFEREVEOwotCQl9IGVsc2UgewotCQkJLyogQWRkIEwyIHBhZGRpbmcgKi8KLQkJCXNrYl9wdXNoKHNrYiwgYWxpZ24pOwotCQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGFsaWduLCBoZWFkZXJfbGVuZ3RoKTsKLQkJCXNrYmRlc2MtPmZsYWdzIHw9IFNLQkRFU0NfTDJfUEFEREVEOwotCQl9CisJc2tiX3B1c2goc2tiLCBhbGlnbik7CisJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGFsaWduLCBmcmFtZV9sZW5ndGgpOworCXNrYl90cmltKHNrYiwgZnJhbWVfbGVuZ3RoKTsKK30KKwordm9pZCBydDJ4MDBxdWV1ZV9hbGlnbl9wYXlsb2FkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3QpCit7CisJdW5zaWduZWQgaW50IGZyYW1lX2xlbmd0aCA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGludCBhbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCBoZWFkZXJfbGVuZ3QpOworCisJaWYgKCFhbGlnbikKKwkJcmV0dXJuOworCisJc2tiX3B1c2goc2tiLCBhbGlnbik7CisJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGFsaWduLCBmcmFtZV9sZW5ndGgpOworCXNrYl90cmltKHNrYiwgZnJhbWVfbGVuZ3RoKTsKK30KKwordm9pZCBydDJ4MDBxdWV1ZV9pbnNlcnRfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCit7CisJc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7CisJdW5zaWduZWQgaW50IGZyYW1lX2xlbmd0aCA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGludCBoZWFkZXJfYWxpZ24gPSBBTElHTl9TSVpFKHNrYiwgMCk7CisJdW5zaWduZWQgaW50IHBheWxvYWRfYWxpZ24gPSBBTElHTl9TSVpFKHNrYiwgaGVhZGVyX2xlbmd0aCk7CisJdW5zaWduZWQgaW50IGwycGFkID0gNCAtIChwYXlsb2FkX2FsaWduIC0gaGVhZGVyX2FsaWduKTsKKworCWlmIChoZWFkZXJfYWxpZ24gPT0gcGF5bG9hZF9hbGlnbikgeworCQkvKgorCQkgKiBCb3RoIGhlYWRlciBhbmQgcGF5bG9hZCBtdXN0IGJlIG1vdmVkIHRoZSBzYW1lCisJCSAqIGFtb3VudCBvZiBieXRlcyB0byBhbGlnbiB0aGVtIHByb3Blcmx5LiBUaGlzIG1lYW5zCisJCSAqIHdlIGRvbid0IHVzZSB0aGUgTDIgcGFkZGluZyBidXQganVzdCBtb3ZlIHRoZSBlbnRpcmUKKwkJICogZnJhbWUuCisJCSAqLworCQlydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZShza2IpOworCX0gZWxzZSBpZiAoIXBheWxvYWRfYWxpZ24pIHsKKwkJLyoKKwkJICogU2ltcGxlIEwyIHBhZGRpbmcsIG9ubHkgdGhlIGhlYWRlciBuZWVkcyB0byBiZSBtb3ZlZCwKKwkJICogdGhlIHBheWxvYWQgaXMgYWxyZWFkeSBwcm9wZXJseSBhbGlnbmVkLgorCQkgKi8KKwkJc2tiX3B1c2goc2tiLCBoZWFkZXJfYWxpZ24pOworCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgaGVhZGVyX2FsaWduLCBmcmFtZV9sZW5ndGgpOworCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKIAl9IGVsc2UgewotCQkvKiBHZW5lcmljIHBheWxvYWQgYWxpZ25tZW50IHRvIDQtYnl0ZSBib3VuZGFyeSAqLwotCQlza2JfcHVzaChza2IsIGFsaWduKTsKLQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGFsaWduLCBmcmFtZV9sZW5ndGgpOworCQkvKgorCQkgKgorCQkgKiBDb21wbGljYXRlZCBMMiBwYWRkaW5nLCBib3RoIGhlYWRlciBhbmQgcGF5bG9hZCBuZWVkCisJCSAqIHRvIGJlIG1vdmVkLiBCeSBkZWZhdWx0IHdlIG9ubHkgbW92ZSB0byB0aGUgc3RhcnQKKwkJICogb2YgdGhlIGJ1ZmZlciwgc28gb3VyIGhlYWRlciBhbGlnbm1lbnQgbmVlZHMgdG8gYmUKKwkJICogaW5jcmVhc2VkIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBmb3IgdGhlIGhlYWRlcgorCQkgKiB0byBiZSBtb3ZlZC4KKwkJICovCisJCWlmIChwYXlsb2FkX2FsaWduID4gaGVhZGVyX2FsaWduKQorCQkJaGVhZGVyX2FsaWduICs9IDQ7CisKKwkJc2tiX3B1c2goc2tiLCBoZWFkZXJfYWxpZ24pOworCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc2tiLT5kYXRhICsgaGVhZGVyX2FsaWduLCBoZWFkZXJfbGVuZ3RoKTsKKwkJbWVtbW92ZShza2ItPmRhdGEgKyBoZWFkZXJfbGVuZ3RoICsgbDJwYWQsCisJCQlza2ItPmRhdGEgKyBoZWFkZXJfbGVuZ3RoICsgbDJwYWQgKyBoZWFkZXJfYWxpZ24sCisJCQlmcmFtZV9sZW5ndGggLSBoZWFkZXJfbGVuZ3RoKTsKKwkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7CiAJfQogfQogCit2b2lkIHJ0MngwMHF1ZXVlX3JlbW92ZV9sMnBhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbmd0aCkKK3sKKwlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2Moc2tiKTsKKwl1bnNpZ25lZCBpbnQgbDJwYWQgPSA0IC0gKGhlYWRlcl9sZW5ndGggJiAzKTsKKworCWlmICghbDJwYWQgfHwgKHNrYmRlc2MtPmZsYWdzICYgU0tCREVTQ19MMl9QQURERUQpKQorCQlyZXR1cm47CisKKwltZW1tb3ZlKHNrYi0+ZGF0YSArIGwycGFkLCBza2ItPmRhdGEsIGhlYWRlcl9sZW5ndGgpOworCXNrYl9wdWxsKHNrYiwgbDJwYWQpOworfQorCiBzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9zZXEoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkJCSBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CkBAIC0zMjQsNyArMzc4LDggQEAKIAkvKgogCSAqIENoZWNrIGlmIG1vcmUgZnJhZ21lbnRzIGFyZSBwZW5kaW5nCiAJICovCi0JaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCSAgICAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX01PUkVfRlJBTUVTKSkgewogCQlfX3NldF9iaXQoRU5UUllfVFhEX0JVUlNULCAmdHhkZXNjLT5mbGFncyk7CiAJCV9fc2V0X2JpdChFTlRSWV9UWERfTU9SRV9GUkFHLCAmdHhkZXNjLT5mbGFncyk7CiAJfQpAQCAtNDUyLDkgKzUwNywxOCBAQAogCQkJcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihza2IsICZ0eGRlc2MpOwogCX0KIAorCS8qCisJICogV2hlbiBETUEgYWxsb2NhdGlvbiBpcyByZXF1aXJlZCB3ZSBzaG91bGQgZ3VhcmVudGVlIHRvIHRoZQorCSAqIGRyaXZlciB0aGF0IHRoZSBETUEgaXMgYWxpZ25lZCB0byBhIDQtYnl0ZSBib3VuZGFyeS4KKwkgKiBIb3dldmVyIHNvbWUgZHJpdmVycyByZXF1aXJlIEwyIHBhZGRpbmcgdG8gcGFkIHRoZSBwYXlsb2FkCisJICogcmF0aGVyIHRoZW4gdGhlIGhlYWRlci4gVGhpcyBjb3VsZCBiZSBhIHJlcXVpcmVtZW50IGZvcgorCSAqIFBDSSBhbmQgVVNCIGRldmljZXMsIHdoaWxlIGhlYWRlciBhbGlnbm1lbnQgb25seSBpcyB2YWxpZAorCSAqIGZvciBQQ0kgZGV2aWNlcy4KKwkgKi8KIAlpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCi0JCXJ0MngwMHF1ZXVlX3BheWxvYWRfYWxpZ24oZW50cnktPnNrYiwgdHJ1ZSwKLQkJCQkJICB0eGRlc2MuaGVhZGVyX2xlbmd0aCk7CisJCXJ0MngwMHF1ZXVlX2luc2VydF9sMnBhZChlbnRyeS0+c2tiLCB0eGRlc2MuaGVhZGVyX2xlbmd0aCk7CisJZWxzZSBpZiAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfRE1BLCAmcXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlydDJ4MDBxdWV1ZV9hbGlnbl9mcmFtZShlbnRyeS0+c2tiKTsKIAogCS8qCiAJICogSXQgY291bGQgYmUgcG9zc2libGUgdGhhdCB0aGUgcXVldWUgd2FzIGNvcnJ1cHRlZCBhbmQgdGhpcwpAQCAtNDkwLDE0ICs1NTQsMjUgQEAKIAlpZiAodW5saWtlbHkoIWludGYtPmJlYWNvbikpCiAJCXJldHVybiAtRU5PQlVGUzsKIAorCW11dGV4X2xvY2soJmludGYtPmJlYWNvbl9za2JfbXV0ZXgpOworCisJLyoKKwkgKiBDbGVhbiB1cCB0aGUgYmVhY29uIHNrYi4KKwkgKi8KKwlydDJ4MDBxdWV1ZV9mcmVlX3NrYihydDJ4MDBkZXYsIGludGYtPmJlYWNvbi0+c2tiKTsKKwlpbnRmLT5iZWFjb24tPnNrYiA9IE5VTEw7CisKIAlpZiAoIWVuYWJsZV9iZWFjb24pIHsKIAkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9CRUFDT04pOworCQltdXRleF91bmxvY2soJmludGYtPmJlYWNvbl9za2JfbXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpbnRmLT5iZWFjb24tPnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHJ0MngwMGRldi0+aHcsIHZpZik7Ci0JaWYgKCFpbnRmLT5iZWFjb24tPnNrYikKKwlpZiAoIWludGYtPmJlYWNvbi0+c2tiKSB7CisJCW11dGV4X3VubG9jaygmaW50Zi0+YmVhY29uX3NrYl9tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCS8qCiAJICogQ29weSBhbGwgVFggZGVzY3JpcHRvciBpbmZvcm1hdGlvbiBpbnRvIHR4ZGVzYywKQEAgLTUzNSw2ICs2MTAsOCBAQAogCXJ0MngwMGRldi0+b3BzLT5saWItPndyaXRlX2JlYWNvbihpbnRmLT5iZWFjb24pOwogCXJ0MngwMGRldi0+b3BzLT5saWItPmtpY2tfdHhfcXVldWUocnQyeDAwZGV2LCBRSURfQkVBQ09OKTsKIAorCW11dGV4X3VubG9jaygmaW50Zi0+YmVhY29uX3NrYl9tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAppbmRleCBiNWUwNjM0Li5hNTU5MWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKIC8qKgotICogRE9DOiBFbnRyaWUgZnJhbWUgc2l6ZQorICogRE9DOiBFbnRyeSBmcmFtZSBzaXplCiAgKgogICogUmFsaW5rIFBDSSBkZXZpY2VzIGRlbWFuZCB0aGUgRnJhbWUgc2l6ZSB0byBiZSBhIG11bHRpcGxlIG9mIDEyOCBieXRlcywKICAqIGZvciBVU0IgZGV2aWNlcyB0aGlzIHJlc3RyaWN0aW9uIGRvZXMgbm90IGFwcGx5LCBidXQgdGhlIHZhbHVlIG9mCkBAIC00NSwxMyArNDUsMTMgQEAKIC8qKgogICogRE9DOiBOdW1iZXIgb2YgZW50cmllcyBwZXIgcXVldWUKICAqCi0gKiBVbmRlciBub3JtYWwgbG9hZCB3aXRob3V0IGZyYWdtZW50YXRpb24gMTIgZW50cmllcyBhcmUgc3VmZmljaWVudAorICogVW5kZXIgbm9ybWFsIGxvYWQgd2l0aG91dCBmcmFnbWVudGF0aW9uLCAxMiBlbnRyaWVzIGFyZSBzdWZmaWNpZW50CiAgKiB3aXRob3V0IHRoZSBxdWV1ZSBiZWluZyBmaWxsZWQgdXAgdG8gdGhlIG1heGltdW0uIFdoZW4gdXNpbmcgZnJhZ21lbnRhdGlvbgotICogYW5kIHRoZSBxdWV1ZSB0aHJlc2hvbGQgY29kZSB3ZSBuZWVkIHRvIGFkZCBzb21lIGFkZGl0aW9uYWwgbWFyZ2lucyB0bworICogYW5kIHRoZSBxdWV1ZSB0aHJlc2hvbGQgY29kZSwgd2UgbmVlZCB0byBhZGQgc29tZSBhZGRpdGlvbmFsIG1hcmdpbnMgdG8KICAqIG1ha2Ugc3VyZSB0aGUgcXVldWUgd2lsbCBuZXZlciAob3Igb25seSB1bmRlciBleHRyZW1lIGxvYWQpIGZpbGwgdXAKICAqIGNvbXBsZXRlbHkuCi0gKiBTaW5jZSB3ZSBkb24ndCB1c2UgcHJlYWxsb2NhdGVkIERNQSBoYXZpbmcgYSBsYXJnZSBudW1iZXIgb2YgcXVldWUgZW50cmllcwotICogd2lsbCBoYXZlIG9ubHkgbWluaW1hbCBpbXBhY3Qgb24gdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIHRoZSBxdWV1ZS4KKyAqIFNpbmNlIHdlIGRvbid0IHVzZSBwcmVhbGxvY2F0ZWQgRE1BLCBoYXZpbmcgYSBsYXJnZSBudW1iZXIgb2YgcXVldWUgZW50cmllcworICogd2lsbCBoYXZlIG1pbmltYWwgaW1wYWN0IG9uIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciB0aGUgcXVldWUuCiAgKi8KICNkZWZpbmUgUlhfRU5UUklFUwkyNAogI2RlZmluZSBUWF9FTlRSSUVTCTI0CkBAIC0yMTQsNiArMjE0LDcgQEAKICAqCiAgKiBAVFhET05FX1VOS05PV046IEhhcmR3YXJlIGNvdWxkIG5vdCBkZXRlcm1pbmUgc3VjY2VzcyBvZiB0cmFuc21pc3Npb24uCiAgKiBAVFhET05FX1NVQ0NFU1M6IEZyYW1lIHdhcyBzdWNjZXNzZnVsbHkgc2VuZAorICogQFRYRE9ORV9GQUxMQkFDSzogRnJhbWUgd2FzIHN1Y2Nlc3NmdWxseSBzZW5kIHVzaW5nIGEgZmFsbGJhY2sgcmF0ZS4KICAqIEBUWERPTkVfRkFJTFVSRTogRnJhbWUgd2FzIG5vdCBzdWNjZXNzZnVsbHkgc2VuZAogICogQFRYRE9ORV9FWENFU1NJVkVfUkVUUlk6IEluIGFkZGl0aW9uIHRvICZUWERPTkVfRkFJTFVSRSwgdGhlCiAgKglmcmFtZSB0cmFuc21pc3Npb24gZmFpbGVkIGR1ZSB0byBleGNlc3NpdmUgcmV0cmllcy4KQEAgLTIyMSw2ICsyMjIsNyBAQAogZW51bSB0eGRvbmVfZW50cnlfZGVzY19mbGFncyB7CiAJVFhET05FX1VOS05PV04sCiAJVFhET05FX1NVQ0NFU1MsCisJVFhET05FX0ZBTExCQUNLLAogCVRYRE9ORV9GQUlMVVJFLAogCVRYRE9ORV9FWENFU1NJVkVfUkVUUlksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCmluZGV4IDg2MTMyMmQuLjk4M2U1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKQEAgLTE3Niw4ICsxNzYsOCBAQAogI2RlZmluZSBpc192YWxpZF9tYXNrKHgpCWlzX3Bvd2VyX29mX3R3bygxTFUgKyAoeCkgKyBsb3dfYml0X21hc2soeCkpCiAKIC8qCi0gKiBNYWNybydzIHRvIGZpbmQgZmlyc3Qgc2V0IGJpdCBpbiBhIHZhcmlhYmxlLgotICogVGhlc2UgbWFjcm8ncyBiZWhhdmVzIHRoZSBzYW1lIGFzIHRoZSBfX2ZmcygpIGZ1bmN0aW9uIHdpdGgKKyAqIE1hY3JvcyB0byBmaW5kIGZpcnN0IHNldCBiaXQgaW4gYSB2YXJpYWJsZS4KKyAqIFRoZXNlIG1hY3JvcyBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIF9fZmZzKCkgZnVuY3Rpb25zIGJ1dAogICogdGhlIG1vc3QgaW1wb3J0YW50IGRpZmZlcmVuY2UgdGhhdCB0aGlzIGlzIGRvbmUgZHVyaW5nCiAgKiBjb21waWxlLXRpbWUgcmF0aGVyIHRoZW4gcnVuLXRpbWUuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZkNGM2Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0Ci0JPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KLQotCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0JaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLQl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLQlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLQlidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotCU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotCUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLQk1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0KLS8qCi0JTW9kdWxlOiBydDJ4MDByZmtpbGwKLQlBYnN0cmFjdDogcnQyeDAwIHJma2lsbCByb3V0aW5lcy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlICJydDJ4MDAuaCIKLSNpbmNsdWRlICJydDJ4MDBsaWIuaCIKLQotc3RhdGljIHZvaWQgcnQyeDAwcmZraWxsX3BvbGwoc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2KQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBwb2xsX2Rldi0+cHJpdmF0ZTsKLQlpbnQgc3RhdGUsIG9sZF9zdGF0ZTsKLQotCWlmICghdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkgfHwKLQkgICAgIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFBvbGwgbGF0ZXN0IHN0YXRlLCBpZiB0aGUgc3RhdGUgaXMgZGlmZmVyZW50IHRoZW4gdGhlIHByZXZpb3VzIHN0YXRlLAotCSAqIHdlIHNob3VsZCBnZW5lcmF0ZSBhbiBpbnB1dCBldmVudC4KLQkgKi8KLQlzdGF0ZSA9ICEhcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmZraWxsX3BvbGwocnQyeDAwZGV2KTsKLQlvbGRfc3RhdGUgPSAhIXRlc3RfYml0KFJGS0lMTF9TVEFURV9CTE9DS0VELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwotCi0JaWYgKG9sZF9zdGF0ZSAhPSBzdGF0ZSkgewotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKHBvbGxfZGV2LT5pbnB1dCwgU1dfUkZLSUxMX0FMTCwgc3RhdGUpOwotCQljaGFuZ2VfYml0KFJGS0lMTF9TVEFURV9CTE9DS0VELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwotCX0KLX0KLQotdm9pZCBydDJ4MDByZmtpbGxfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlpZiAoIXRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkgfHwKLQkgICAgdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCi0JCXJldHVybjsKLQotCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KSkgewotCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcG9sbGVkIGRldmljZS5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JX19zZXRfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwotCi0JLyoKLQkgKiBGb3JjZSBpbml0aWFsIHBvbGwgd2hpY2ggd2lsbCBkZXRlY3QgdGhlIGluaXRpYWwgZGV2aWNlIHN0YXRlLAotCSAqIGFuZCBjb3JyZWN0bHkgc2VuZHMgdGhlIHNpZ25hbCB0byB0aGUgaW5wdXQgbGF5ZXIgYWJvdXQgdGhpcwotCSAqIHN0YXRlLgotCSAqLwotCXJ0MngwMHJma2lsbF9wb2xsKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKLX0KLQotdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWlmICghdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSB8fAotCSAgICAhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCi0JCXJldHVybjsKLQotCWlucHV0X3VucmVnaXN0ZXJfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7Ci0KLQlfX2NsZWFyX2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKLX0KLQotdm9pZCBydDJ4MDByZmtpbGxfYWxsb2NhdGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgaW5wdXRfcG9sbGVkX2RldiAqcG9sbF9kZXY7Ci0KLQlpZiAodGVzdF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSB8fAotCSAgICAhdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCXBvbGxfZGV2ID0gaW5wdXRfYWxsb2NhdGVfcG9sbGVkX2RldmljZSgpOwotCWlmICghcG9sbF9kZXYpIHsKLQkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBvbGxlZCBkZXZpY2UuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXBvbGxfZGV2LT5wcml2YXRlID0gcnQyeDAwZGV2OwotCXBvbGxfZGV2LT5wb2xsID0gcnQyeDAwcmZraWxsX3BvbGw7Ci0JcG9sbF9kZXYtPnBvbGxfaW50ZXJ2YWwgPSBSRktJTExfUE9MTF9JTlRFUlZBTDsKLQotCXBvbGxfZGV2LT5pbnB1dC0+bmFtZSA9IHJ0MngwMGRldi0+b3BzLT5uYW1lOwotCXBvbGxfZGV2LT5pbnB1dC0+cGh5cyA9IHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpOwotCXBvbGxfZGV2LT5pbnB1dC0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCXBvbGxfZGV2LT5pbnB1dC0+aWQudmVuZG9yID0gMHgxODE0OwotCXBvbGxfZGV2LT5pbnB1dC0+aWQucHJvZHVjdCA9IHJ0MngwMGRldi0+Y2hpcC5ydDsKLQlwb2xsX2Rldi0+aW5wdXQtPmlkLnZlcnNpb24gPSBydDJ4MDBkZXYtPmNoaXAucmV2OwotCXBvbGxfZGV2LT5pbnB1dC0+ZGV2LnBhcmVudCA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7Ci0JcG9sbF9kZXYtPmlucHV0LT5ldmJpdFswXSA9IEJJVChFVl9TVyk7Ci0JcG9sbF9kZXYtPmlucHV0LT5zd2JpdFswXSA9IEJJVChTV19SRktJTExfQUxMKTsKLQotCXJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2ID0gcG9sbF9kZXY7Ci0KLQlfX3NldF9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKTsKLX0KLQotdm9pZCBydDJ4MDByZmtpbGxfZnJlZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCWlmICghX190ZXN0X2FuZF9jbGVhcl9iaXQoUkZLSUxMX1NUQVRFX0FMTE9DQVRFRCwKLQkJCQkgICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCi0JCXJldHVybjsKLQotCWlucHV0X2ZyZWVfcG9sbGVkX2RldmljZShydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2Rldik7Ci0JcnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYgPSBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKaW5kZXggNDliMjlmZi4uYjIwZTNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCkBAIC0yMzcsNyArMjM3LDYgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUyAqLwogCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiBzdGF0aWMgaW50IHJ0NjFwY2lfcmZraWxsX3BvbGwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgcmVnOwpAQCAtMjQ1LDkgKzI0NCw2IEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTMsICZyZWcpOwogCXJldHVybiBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBNQUNfQ1NSMTNfQklUNSk7CiB9Ci0jZWxzZQotI2RlZmluZSBydDYxcGNpX3Jma2lsbF9wb2xsCU5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0xFRFMKIHN0YXRpYyB2b2lkIHJ0NjFwY2lfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCkBAIC01MzQsNyArNTMwLDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX0RST1BfUEhZU0lDQUwsCiAJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QTENQRkFJTCkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9DT05UUk9MLAotCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiBGSUZfQ09OVFJPTCkpOworCQkJICAgIShmaWx0ZXJfZmxhZ3MgJiAoRklGX0NPTlRST0wgfCBGSUZfUFNQT0xMKSkpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9OT1RfVE9fTUUsCiAJCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9UT19EUywKQEAgLTYwMiw3ICs1OTgsNyBAQAogCXUzMiByZWc7CiAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9SWF9BQ0tfVElNRU9VVCwgZXJwLT5hY2tfdGltZW91dCk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9SWF9BQ0tfVElNRU9VVCwgMHgzMik7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9UU0ZfT0ZGU0VULCBJRUVFODAyMTFfSEVBREVSKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjAsIHJlZyk7CiAKQEAgLTE4NTksOCArMTg1NSw2IEBACiAJICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGJlIHNlbmRpbmcgb3V0IGludmFsaWQgZGF0YS4KIAkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgJnJlZyk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UU0ZfVElDS0lORywgMCk7Ci0JcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9UQlRUX0VOQUJMRSwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSOV9CRUFDT05fR0VOLCAwKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiAKQEAgLTIzMTYsNyArMjMxMCw3IEBACiAJfQogCiAJLyoKLQkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGFudGVubmEncy4KKwkgKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGFudGVubmFzLgogCSAqLwogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9OVU0pID09IDIpCiAJCV9fc2V0X2JpdChDT05GSUdfRE9VQkxFX0FOVEVOTkEsICZydDJ4MDBkZXYtPmZsYWdzKTsKQEAgLTIzMzgsMTAgKzIzMzIsOCBAQAogCS8qCiAJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgogCSAqLwotI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAogCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCiAJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKLSNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KIAogCS8qCiAJICogUmVhZCBmcmVxdWVuY3kgb2Zmc2V0IGFuZCBSRiBwcm9ncmFtbWluZyBzZXF1ZW5jZS4KQEAgLTI2MDcsNiArMjU5OSwxMSBAQAogCWludCByZXR2YWw7CiAKIAkvKgorCSAqIERpc2FibGUgcG93ZXIgc2F2aW5nLgorCSAqLworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFNPRlRfUkVTRVRfQ1NSLCAweDAwMDAwMDA3KTsKKworCS8qCiAJICogQWxsb2NhdGUgZWVwcm9tIGRhdGEuCiAJICovCiAJcmV0dmFsID0gcnQ2MXBjaV92YWxpZGF0ZV9lZXByb20ocnQyeDAwZGV2KTsKQEAgLTI2MjUsNiArMjYyMiwxMiBAQAogCQlyZXR1cm4gcmV0dmFsOwogCiAJLyoKKwkgKiBUaGlzIGRldmljZSBoYXMgbXVsdGlwbGUgZmlsdGVycyBmb3IgY29udHJvbCBmcmFtZXMsCisJICogYnV0IGhhcyBubyBhIHNlcGFyYXRlIGZpbHRlciBmb3IgUFMgUG9sbCBmcmFtZXMuCisJICovCisJX19zZXRfYml0KERSSVZFUl9TVVBQT1JUX0NPTlRST0xfRklMVEVSUywgJnJ0MngwMGRldi0+ZmxhZ3MpOworCisJLyoKIAkgKiBUaGlzIGRldmljZSByZXF1aXJlcyBmaXJtd2FyZSBhbmQgRE1BIG1hcHBlZCBza2JzLgogCSAqLwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwpAQCAtMjcyMiwxMiArMjcyNSwxNCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcnQyeDAwbWFjX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnQyeDAwbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyLAorCS5zZXRfdGltCQk9IHJ0MngwMG1hY19zZXRfdGltLAogCS5zZXRfa2V5CQk9IHJ0MngwMG1hY19zZXRfa2V5LAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0NjFwY2lfY29uZl90eCwKIAkuZ2V0X3R4X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YJCT0gcnQ2MXBjaV9nZXRfdHNmLAorCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ2MXBjaV9ydDJ4MDBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKaW5kZXggNmM3MWY3Ny4uOTNlYjY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCkBAIC0xNDc2LDcgKzE0NzYsNyBAQAogI2RlZmluZSBSWERfVzE1X1JFU0VSVkVECQlGSUVMRDMyKDB4ZmZmZmZmZmYpCiAKIC8qCi0gKiBNYWNybydzIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKKyAqIE1hY3JvcyBmb3IgY29udmVydGluZyB0eHBvd2VyIGZyb20gRUVQUk9NIHRvIG1hYzgwMjExIHZhbHVlCiAgKiBhbmQgZnJvbSBtYWM4MDIxMSB2YWx1ZSB0byByZWdpc3RlciB2YWx1ZS4KICAqLwogI2RlZmluZSBNSU5fVFhQT1dFUgkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCBjMTg4NDg4Li4xY2JkOWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTE4Myw3ICsxODMsNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCiAKLSNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKIHN0YXRpYyBpbnQgcnQ3M3VzYl9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXUzMiByZWc7CkBAIC0xOTEsOSArMTkwLDYgQEAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMywgJnJlZyk7CiAJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxM19CSVQ3KTsKIH0KLSNlbHNlCi0jZGVmaW5lIHJ0NzN1c2JfcmZraWxsX3BvbGwJTlVMTAotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwogc3RhdGljIHZvaWQgcnQ3M3VzYl9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKQEAgLTQ5Nyw3ICs0OTMsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWFJYX0NTUjBfRFJPUF9QSFlTSUNBTCwKIAkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BMQ1BGQUlMKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX0NPTlRST0wsCi0JCQkgICAhKGZpbHRlcl9mbGFncyAmIEZJRl9DT05UUk9MKSk7CisJCQkgICAhKGZpbHRlcl9mbGFncyAmIChGSUZfQ09OVFJPTCB8IEZJRl9QU1BPTEwpKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX05PVF9UT19NRSwKIAkJCSAgICEoZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYUlhfQ1NSMF9EUk9QX1RPX0RTLApAQCAtNTY1LDcgKzU2MSw3IEBACiAJdTMyIHJlZzsKIAogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX1JYX0FDS19USU1FT1VULCBlcnAtPmFja190aW1lb3V0KTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX1JYX0FDS19USU1FT1VULCAweDMyKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1IwX1RTRl9PRkZTRVQsIElFRUU4MDIxMV9IRUFERVIpOwogCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSMCwgcmVnKTsKIApAQCAtMTUzMSw4ICsxNTI3LDYgQEAKIAkgKiBvdGhlcndpc2Ugd2UgbWlnaHQgYmUgc2VuZGluZyBvdXQgaW52YWxpZCBkYXRhLgogCSAqLwogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RTRl9USUNLSU5HLCAwKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X1RCVFRfRU5BQkxFLCAwKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhSWF9DU1I5X0JFQUNPTl9HRU4sIDApOwogCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKIApAQCAtMTg2MywxMCArMTg1Nyw4IEBACiAJLyoKIAkgKiBEZXRlY3QgaWYgdGhpcyBkZXZpY2UgaGFzIGFuIGhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8uCiAJICovCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0hBUkRXQVJFX1JBRElPKSkKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTCAqLwogCiAJLyoKIAkgKiBSZWFkIGZyZXF1ZW5jeSBvZmZzZXQuCkBAIC0yMTUwLDEwICsyMTQyLDE1IEBACiAJCXJldHVybiByZXR2YWw7CiAKIAkvKgorCSAqIFRoaXMgZGV2aWNlIGhhcyBtdWx0aXBsZSBmaWx0ZXJzIGZvciBjb250cm9sIGZyYW1lcywKKwkgKiBidXQgaGFzIG5vIGEgc2VwYXJhdGUgZmlsdGVyIGZvciBQUyBQb2xsIGZyYW1lcy4KKwkgKi8KKwlfX3NldF9iaXQoRFJJVkVSX1NVUFBPUlRfQ09OVFJPTF9GSUxURVJTLCAmcnQyeDAwZGV2LT5mbGFncyk7CisKKwkvKgogCSAqIFRoaXMgZGV2aWNlIHJlcXVpcmVzIGZpcm13YXJlLgogCSAqLwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkKIAkJX19zZXRfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCkBAIC0yMjQ3LDEyICsyMjQ0LDE0IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydDJ4MDBtYWNfY29uZmlnLAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnQyeDAwbWFjX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnNldF90aW0JCT0gcnQyeDAwbWFjX3NldF90aW0sCiAJLnNldF9rZXkJCT0gcnQyeDAwbWFjX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQ3M3VzYl9jb25mX3R4LAogCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDczdXNiX2dldF90c2YsCisJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQyeDAwbGliX29wcyBydDczdXNiX3J0MngwMF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAppbmRleCBjODAxNmY2Li44MWZlMGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTgwOSw3ICs4MDksNyBAQAogCiAvKgogICogRUVQUk9NIGFudGVubmEuCi0gKiBBTlRFTk5BX05VTTogTnVtYmVyIG9mIGFudGVubmEncy4KKyAqIEFOVEVOTkFfTlVNOiBOdW1iZXIgb2YgYW50ZW5uYXMuCiAgKiBUWF9ERUZBVUxUOiBEZWZhdWx0IGFudGVubmEgMDogZGl2ZXJzaXR5LCAxOiBBLCAyOiBCLgogICogUlhfREVGQVVMVDogRGVmYXVsdCBhbnRlbm5hIDA6IGRpdmVyc2l0eSwgMTogQSwgMjogQi4KICAqIEZSQU1FX1RZUEU6IDA6IERQRFQgLCAxOiBTUERUICwgbm90ZWQgdGhpcyBiaXQgaXMgdmFsaWQgZm9yIGcgb25seS4KQEAgLTEwNTgsNyArMTA1OCw3IEBACiAjZGVmaW5lIFJYRF9XNV9SRVNFUlZFRAkJCUZJRUxEMzIoMHhmZmZmZmZmZikKIAogLyoKLSAqIE1hY3JvJ3MgZm9yIGNvbnZlcnRpbmcgdHhwb3dlciBmcm9tIEVFUFJPTSB0byBtYWM4MDIxMSB2YWx1ZQorICogTWFjcm9zIGZvciBjb252ZXJ0aW5nIHR4cG93ZXIgZnJvbSBFRVBST00gdG8gbWFjODAyMTEgdmFsdWUKICAqIGFuZCBmcm9tIG1hYzgwMjExIHZhbHVlIHRvIHJlZ2lzdGVyIHZhbHVlLgogICovCiAjZGVmaW5lIE1JTl9UWFBPV0VSCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L01ha2VmaWxlCmluZGV4IDM3ZTNkNGQuLjkzY2JmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIHJ0bDgxODAtb2JqcwkJOj0gcnRsODE4MF9kZXYubyBydGw4MTgwX3J0bDgyMjUubyBydGw4MTgwX3NhMjQwMC5vIHJ0bDgxODBfbWF4MjgyMC5vIHJ0bDgxODBfZ3JmNTEwMS5vCi1ydGw4MTg3LW9ianMJCTo9IHJ0bDgxODdfZGV2Lm8gcnRsODE4N19ydGw4MjI1Lm8gcnRsODE4N19sZWRzLm8KK3J0bDgxODctb2JqcwkJOj0gcnRsODE4N19kZXYubyBydGw4MTg3X3J0bDgyMjUubyBydGw4MTg3X2xlZHMubyBydGw4MTg3X3Jma2lsbC5vCiAKIG9iai0kKENPTkZJR19SVEw4MTgwKQkrPSBydGw4MTgwLm8KIG9iai0kKENPTkZJR19SVEw4MTg3KQkrPSBydGw4MTg3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYwppbmRleCA3ZTY1ZDdjLi4xNjQyOWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCkBAIC0xNDMsNyArMTQzLDggQEAKIAkJCWlmIChmbGFncyAmIFJUTDgxOFhfUlhfREVTQ19GTEFHX0NSQzMyX0VSUikKIAkJCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOwogCi0JCQlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYsIHNrYiwgJnJ4X3N0YXR1cyk7CisJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwkJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiKTsKIAogCQkJc2tiID0gbmV3X3NrYjsKIAkJCXByaXYtPnJ4X2J1Zltwcml2LT5yeF9pZHhdID0gc2tiOwpAQCAtMjgwLDcgKzI4MSw3IEBACiAJCQkJKGllZWU4MDIxMV9nZXRfdHhfcmF0ZShkZXYsIGluZm8pLT5iaXRyYXRlICogMikgLyAxMCk7CiAJCXJlbWFpbmRlciA9ICgxNiAqIChza2ItPmxlbiArIDQpKSAlCiAJCQkgICAgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LCBpbmZvKS0+Yml0cmF0ZSAqIDIpIC8gMTApOwotCQlpZiAocmVtYWluZGVyID4gMCAmJiByZW1haW5kZXIgPD0gNikKKwkJaWYgKHJlbWFpbmRlciA8PSA2KQogCQkJcGxjcF9sZW4gfD0gMSA8PCAxNTsKIAl9CiAKQEAgLTcyNywxMCArNzI4LDE2IEBACiAJICAgICAgICBwcml2LT5yZi0+Y29uZl9lcnAoZGV2LCBpbmZvKTsKIH0KIAorc3RhdGljIHU2NCBydGw4MTgwX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgaW50IG1jX2NvdW50LAorCQkJCSAgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJcmV0dXJuIG1jX2NvdW50OworfQorCiBzdGF0aWMgdm9pZCBydGw4MTgwX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQorCQkJCSAgICAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCkBAIC03NDAsNyArNzQ3LDcgQEAKIAkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfQ1RSTDsKIAlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9PVEhFUl9CU1MpCiAJCXByaXYtPnJ4X2NvbmYgXj0gUlRMODE4WF9SWF9DT05GX01PTklUT1I7Ci0JaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSB8fCBtY19jb3VudCA+IDApCisJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSB8fCBtdWx0aWNhc3QgPiAwKQogCQlwcml2LT5yeF9jb25mIHw9IFJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1Q7CiAJZWxzZQogCQlwcml2LT5yeF9jb25mICY9IH5SVEw4MThYX1JYX0NPTkZfTVVMVElDQVNUOwpAQCAtNzY3LDYgKzc3NCw3IEBACiAJLnJlbW92ZV9pbnRlcmZhY2UJPSBydGw4MTgwX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gcnRsODE4MF9jb25maWcsCiAJLmJzc19pbmZvX2NoYW5nZWQJPSBydGw4MTgwX2Jzc19pbmZvX2NoYW5nZWQsCisJLnByZXBhcmVfbXVsdGljYXN0CT0gcnRsODE4MF9wcmVwYXJlX211bHRpY2FzdCwKIAkuY29uZmlndXJlX2ZpbHRlcgk9IHJ0bDgxODBfY29uZmlndXJlX2ZpbHRlciwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKaW5kZXggYzA5YmZlZi4uYmY5MTc1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3LmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogCQlfX2xlMTYgYml0czE2OwogCQlfX2xlMzIgYml0czMyOwogCX0gKmlvX2RtYWJ1ZjsKKwlib29sIHJma2lsbF9vZmY7CiB9OwogCiB2b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCmluZGV4IDg3YTk1NTguLjIwMTdjY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpZmRlZiBDT05GSUdfUlRMODE4N19MRURTCiAjaW5jbHVkZSAicnRsODE4N19sZWRzLmgiCiAjZW5kaWYKKyNpbmNsdWRlICJydGw4MTg3X3Jma2lsbC5oIgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4iKTsKIE1PRFVMRV9BVVRIT1IoIkFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4iKTsKQEAgLTIyMCw3ICsyMjEsNyBAQAogCQkgKiByZWFkaW5nIGEgcmVnaXN0ZXIgaW4gdGhlIGRldmljZS4gV2UgYXJlIGluIGludGVycnVwdCBtb2RlCiAJCSAqIGhlcmUsIHRodXMgcXVldWUgdGhlIHNrYiBhbmQgZmluaXNoIG9uIGEgd29yayBxdWV1ZS4gKi8KIAkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOwotCQlxdWV1ZV9kZWxheWVkX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+d29yaywgMCk7CiAJfQogfQogCkBAIC0zODAsNyArMzgxLDggQEAKIAlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7CiAJaWYgKGZsYWdzICYgUlRMODE4WF9SWF9ERVNDX0ZMQUdfQ1JDMzJfRVJSKQogCQlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9GQ1NfQ1JDOwotCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldiwgc2tiLCAmcnhfc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShkZXYsIHNrYik7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKFJUTDgxODdfTUFYX1JYKTsKIAlpZiAodW5saWtlbHkoIXNrYikpIHsKQEAgLTY0NywxMCArNjQ5LDEwIEBACiAKIAkvKiBzZXR1cCBjYXJkICovCiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAwKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8sIDApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDApOwogCiAJcnRsODE4eF9pb3dyaXRlMTYocHJpdiwgJnByaXYtPm1hcC0+UkZQaW5zU2VsZWN0LCAoNCA8PCA4KSk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPLCAxKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8wLCAxKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQX0VOQUJMRSwgMCk7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwpAQCAtNjczLDExICs2NzUsMTEgQEAKIAogCS8qIGhvc3RfdXNiX2luaXQgKi8KIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsIDApOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTywgMCk7CisJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMCk7CiAJcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICh1OCAqKTB4RkU1Myk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAodTggKikweEZFNTMsIHJlZyB8ICgxIDw8IDcpKTsKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNTZWxlY3QsICg0IDw8IDgpKTsKLQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkdQSU8sIDB4MjApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIDB4MjApOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAwKTsKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5SRlBpbnNPdXRwdXQsIDB4ODApOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPlJGUGluc1NlbGVjdCwgMHg4MCk7CkBAIC05MDksMTIgKzkxMSwxMiBAQAogCXUzMiByZWc7CiAJaW50IHJldDsKIAorCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCiAJcmV0ID0gKCFwcml2LT5pc19ydGw4MTg3YikgPyBydGw4MTg3X2luaXRfaHcoZGV2KSA6CiAJCQkJICAgICBydGw4MTg3Yl9pbml0X2h3KGRldik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCQlnb3RvIHJ0bDgxODdfc3RhcnRfZXhpdDsKIAogCWluaXRfdXNiX2FuY2hvcigmcHJpdi0+YW5jaG9yZWQpOwogCXByaXYtPmRldiA9IGRldjsKQEAgLTk0MSw4ICs5NDMsNyBAQAogCQkJCSAgKDcgPDwgMjEgLyogTUFYIFRYIERNQSAqLykpOwogCQlydGw4MTg3X2luaXRfdXJicyhkZXYpOwogCQlydGw4MTg3Yl9pbml0X3N0YXR1c191cmIoZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gcnRsODE4N19zdGFydF9leGl0OwogCX0KIAogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPklOVF9NQVNLLCAweEZGRkYpOwpAQCAtOTg2LDkgKzk4NywxMCBAQAogCXJlZyB8PSBSVEw4MThYX0NNRF9SWF9FTkFCTEU7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5DTUQsIHJlZyk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndvcmssIHJ0bDgxODdfd29yayk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAotCXJldHVybiAwOworcnRsODE4N19zdGFydF9leGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE4N19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKQEAgLTEwMTYsOSArMTAxOCwxMCBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCiAJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmcHJpdi0+YW5jaG9yZWQpOworCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CisKIAlpZiAoIXByaXYtPmlzX3J0bDgxODdiKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOwotCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE4N19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKQEAgLTExOTcsMTAgKzEyMDAsMTYgQEAKIAkJCQkgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKIH0KIAorc3RhdGljIHU2NCBydGw4MTg3X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJcmV0dXJuIG1jX2NvdW50OworfQorCiBzdGF0aWMgdm9pZCBydGw4MTg3X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAogCQkJCSAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQorCQkJCSAgICAgdTY0IG11bHRpY2FzdCkKIHsKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCkBAIC0xMjEwLDcgKzEyMTksNyBAQAogCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9DVFJMOwogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX09USEVSX0JTUykKIAkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfTU9OSVRPUjsKLQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJIHx8IG1jX2NvdW50ID4gMCkKKwlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJIHx8IG11bHRpY2FzdCA+IDApCiAJCXByaXYtPnJ4X2NvbmYgfD0gUlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVDsKIAllbHNlCiAJCXByaXYtPnJ4X2NvbmYgJj0gflJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1Q7CkBAIC0xMjczLDggKzEyODIsMTAgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHJ0bDgxODdfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBydGw4MTg3X2NvbmZpZywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0bDgxODdfYnNzX2luZm9fY2hhbmdlZCwKKwkucHJlcGFyZV9tdWx0aWNhc3QJPSBydGw4MTg3X3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gcnRsODE4N19jb25maWd1cmVfZmlsdGVyLAotCS5jb25mX3R4CQk9IHJ0bDgxODdfY29uZl90eAorCS5jb25mX3R4CQk9IHJ0bDgxODdfY29uZl90eCwKKwkucmZraWxsX3BvbGwJCT0gcnRsODE4N19yZmtpbGxfcG9sbAogfTsKIAogc3RhdGljIHZvaWQgcnRsODE4N19lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCkBAIC0xNTE0LDYgKzE1MjUsNyBAQAogCXJlZyAmPSAweEZGOwogCXJ0bDgxODdfbGVkc19pbml0KGRldiwgcmVnKTsKICNlbmRpZgorCXJ0bDgxODdfcmZraWxsX2luaXQoZGV2KTsKIAogCXJldHVybiAwOwogCkBAIC0xNTM3LDYgKzE1NDksNyBAQAogI2lmZGVmIENPTkZJR19SVEw4MTg3X0xFRFMKIAlydGw4MTg3X2xlZHNfZXhpdChkZXYpOwogI2VuZGlmCisJcnRsODE4N19yZmtpbGxfZXhpdChkZXYpOwogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRldik7CiAKIAlwcml2ID0gZGV2LT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKaW5kZXggY2Y5Zjg5OS4uYTFjNjcwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCkBAIC00Miw3ICs0Miw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJc3dpdGNoIChsZWQtPmxlZHBpbikgewogCWNhc2UgTEVEX1BJTl9HUElPMDoKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPLCAweDAxKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMHgwMSk7CiAJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAweDAwKTsKIAkJYnJlYWs7CiAJY2FzZSBMRURfUElOX0xFRDA6CkBAIC04MCw3ICs4MCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJc3dpdGNoIChsZWQtPmxlZHBpbikgewogCWNhc2UgTEVEX1BJTl9HUElPMDoKLQkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPLCAweDAxKTsKKwkJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMCwgMHgwMSk7CiAJCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BfRU5BQkxFLCAweDAxKTsKIAkJYnJlYWs7CiAJY2FzZSBMRURfUElOX0xFRDA6CkBAIC0xMDgsMTEgKzEwOCwxMSBAQAogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAogCWlmIChicmlnaHRuZXNzID09IExFRF9PRkYpIHsKLQkJcXVldWVfZGVsYXllZF93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT5sZWRfb2ZmLCAwKTsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhodywgJnByaXYtPmxlZF9vZmYsIDApOwogCQkvKiBUaGUgTEVEIGlzIG9mZiBmb3IgMS8yMCBzZWMgc28gdGhhdCBpdCBqdXN0IGJsaW5rcy4gKi8KLQkJcXVldWVfZGVsYXllZF93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT5sZWRfb24sIEhaIC8gMjApOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+bGVkX29uLCBIWiAvIDIwKTsKIAl9IGVsc2UKLQkJcXVldWVfZGVsYXllZF93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT5sZWRfb24sIDApOworCQlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKGh3LCAmcHJpdi0+bGVkX29uLCAwKTsKIH0KIAogc3RhdGljIGludCBydGw4MTg3X3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCkBAIC0xOTMsNyArMTkzLDcgQEAKIAllcnIgPSBydGw4MTg3X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT5sZWRfcngsIG5hbWUsCiAJCQkgaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShkZXYpLCBsZWRwaW4pOwogCWlmICghZXJyKSB7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPmxlZF9vbiwgMCk7CisJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoZGV2LCAmcHJpdi0+bGVkX29uLCAwKTsKIAkJcmV0dXJuOwogCX0KIAkvKiByZWdpc3RyYXRpb24gb2YgUlggTEVEIGZhaWxlZCAtIHVucmVnaXN0ZXIgVFggKi8KQEAgLTIwOSw3ICsyMDksNyBAQAogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAKIAkvKiB0dXJuIHRoZSBMRUQgb2ZmIGJlZm9yZSBleGl0aW5nICovCi0JcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+bGVkX29mZiwgMCk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhkZXYsICZwcml2LT5sZWRfb2ZmLCAwKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmxlZF9vZmYpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29uKTsKIAlydGw4MTg3X3VucmVnaXN0ZXJfbGVkKCZwcml2LT5sZWRfcngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3Jma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3Jma2lsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYWIxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfcmZraWxsLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIExpbnV4IFJGS0lMTCBzdXBwb3J0IGZvciBSVEw4MTg3CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CisgKgorICogQmFzZWQgb24gdGhlIFJGS0lMTCBoYW5kbGluZyBpbiB0aGUgcjgxODcgZHJpdmVyLCB3aGljaCBpczoKKyAqIENvcHlyaWdodCAoYykgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhhbmtzIHRvIFJlYWx0ZWsgZm9yIHRoZWlyIHN1cHBvcnQhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInJ0bDgxODcuaCIKKworc3RhdGljIGJvb2wgcnRsODE4N19pc19yYWRpb19lbmFibGVkKHN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYpCit7CisJdTggZ3BpbzsKKworCWdwaW8gPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzApOworCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+R1BJTzAsIGdwaW8gJiB+MHgwMik7CisJZ3BpbyA9IHJ0bDgxOHhfaW9yZWFkOChwcml2LCAmcHJpdi0+bWFwLT5HUElPMSk7CisKKwlyZXR1cm4gZ3BpbyAmIDB4MDI7Cit9CisKK3ZvaWQgcnRsODE4N19yZmtpbGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlwcml2LT5yZmtpbGxfb2ZmID0gcnRsODE4N19pc19yYWRpb19lbmFibGVkKHByaXYpOworCXByaW50ayhLRVJOX0lORk8gInJ0bDgxODc6IHdpcmVsZXNzIHN3aXRjaCBpcyAlc1xuIiwKKwkgICAgICAgcHJpdi0+cmZraWxsX29mZiA/ICJvbiIgOiAib2ZmIik7CisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksICFwcml2LT5yZmtpbGxfb2ZmKTsKKwl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhody0+d2lwaHkpOworfQorCit2b2lkIHJ0bDgxODdfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJYm9vbCBlbmFibGVkOworCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCW11dGV4X2xvY2soJnByaXYtPmNvbmZfbXV0ZXgpOworCWVuYWJsZWQgPSBydGw4MTg3X2lzX3JhZGlvX2VuYWJsZWQocHJpdik7CisJaWYgKHVubGlrZWx5KGVuYWJsZWQgIT0gcHJpdi0+cmZraWxsX29mZikpIHsKKwkJcHJpdi0+cmZraWxsX29mZiA9IGVuYWJsZWQ7CisJCXByaW50ayhLRVJOX0lORk8gInJ0bDgxODc6IHdpcmVsZXNzIHJhZGlvIHN3aXRjaCB0dXJuZWQgJXNcbiIsCisJCSAgICAgICBlbmFibGVkID8gIm9uIiA6ICJvZmYiKTsKKwkJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksICFlbmFibGVkKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKK30KKwordm9pZCBydGw4MTg3X3Jma2lsbF9leGl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcoaHctPndpcGh5KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19yZmtpbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTI1NzVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X3Jma2lsbC5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBSVEw4MTg3X1JGS0lMTF9ICisjZGVmaW5lIFJUTDgxODdfUkZLSUxMX0gKKwordm9pZCBydGw4MTg3X3Jma2lsbF9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgcnRsODE4N19yZmtpbGxfcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIHJ0bDgxODdfcmZraWxsX2V4aXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCisjZW5kaWYgLyogUlRMODE4N19SRktJTExfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTh4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaAppbmRleCAzNGE1NTU1Li44NTIyNDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxOHguaApAQCAtMTM4LDggKzEzOCw5IEBACiAJX19sZTMyCVJGX1BBUkE7CiAJX19sZTMyCVJGX1RJTUlORzsKIAl1OAlHUF9FTkFCTEU7Ci0JdTgJR1BJTzsKLQl1OAlyZXNlcnZlZF8xMlsyXTsKKwl1OAlHUElPMDsKKwl1OAlHUElPMTsKKwl1OAlyZXNlcnZlZF8xMjsKIAlfX2xlMzIJSFNTSV9QQVJBOwogCXU4CXJlc2VydmVkXzEzWzRdOwogCXU4CVRYX0FHQ19DVEw7CkBAIC0xOTQsOCArMTk1LDE4IEBACiAJdm9pZCAoKmNvbmZfZXJwKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICosIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKik7CiB9OwogCi0vKiBUeC9SeCBmbGFncyBhcmUgY29tbW9uIGJldHdlZW4gUlRMODE4WCBjaGlwcyAqLwotCisvKioKKyAqIGVudW0gcnRsODE4eF90eF9kZXNjX2ZsYWdzIC0gVHgvUnggZmxhZ3MgYXJlIGNvbW1vbiBiZXR3ZWVuIFJUTDgxOFggY2hpcHMKKyAqCisgKiBAUlRMODE4WF9UWF9ERVNDX0ZMQUdfTk9fRU5DOiBEaXNhYmxlIGhhcmR3YXJlIGJhc2VkIGVuY3J5cHRpb24uCisgKiBAUlRMODE4WF9UWF9ERVNDX0ZMQUdfVFhfT0s6IFRYIGZyYW1lIHdhcyBBQ0tlZC4KKyAqIEBSVEw4MThYX1RYX0RFU0NfRkxBR19TUExDUDogVXNlIHNob3J0IHByZWFtYmxlLgorICogQFJUTDgxOFhfVFhfREVTQ19GTEFHX01PUkVGUkFHOiBNb3JlIGZyYWdtZW50cyBmb2xsb3cuCisgKiBAUlRMODE4WF9UWF9ERVNDX0ZMQUdfQ1RTOiBVc2UgQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbi4KKyAqIEBSVEw4MThYX1RYX0RFU0NfRkxBR19SVFM6IFVzZSBSVFMvQ1RTIHByb3RlY3Rpb24uCisgKiBAUlRMODE4WF9UWF9ERVNDX0ZMQUdfTFM6IExhc3Qgc2VnbWVudCBvZiB0aGUgZnJhbWUuCisgKiBAUlRMODE4WF9UWF9ERVNDX0ZMQUdfRlM6IEZpcnN0IHNlZ21lbnQgb2YgdGhlIGZyYW1lLgorICovCiBlbnVtIHJ0bDgxOHhfdHhfZGVzY19mbGFncyB7CiAJUlRMODE4WF9UWF9ERVNDX0ZMQUdfTk9fRU5DCT0gKDEgPDwgMTUpLAogCVJUTDgxOFhfVFhfREVTQ19GTEFHX1RYX09LCT0gKDEgPDwgMTUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKaW5kZXggMzgzNjZhNS4uZWE2YTg3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCkBAIC0xNTMzLDcgKzE1MzMsNyBAQAogfQogCiAvKiBFbmNhcHN1bGF0ZSBhIGRhdGFncmFtIGFuZCBraWNrIGl0IGludG8gYSBUVFkgcXVldWUuICovCi1zdGF0aWMgaW50IHN0cmlwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBzdHJpcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHN0cmlwICpzdHJpcF9pbmZvID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTU1MCw5ICsxNTUwLDEyIEBACiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdHJpcF9pbmZvLT5wcHNfdGltZXIgKyBIWikpIHsKIAkJdW5zaWduZWQgbG9uZyB0ID0gamlmZmllcyAtIHN0cmlwX2luZm8tPnBwc190aW1lcjsKLQkJdW5zaWduZWQgbG9uZyByeF9wcHNfY291bnQgPSAoc3RyaXBfaW5mby0+cnhfcHBzX2NvdW50ICogSFogKiA4ICsgdCAvIDIpIC8gdDsKLQkJdW5zaWduZWQgbG9uZyB0eF9wcHNfY291bnQgPSAoc3RyaXBfaW5mby0+dHhfcHBzX2NvdW50ICogSFogKiA4ICsgdCAvIDIpIC8gdDsKLQkJdW5zaWduZWQgbG9uZyBzeF9wcHNfY291bnQgPSAoc3RyaXBfaW5mby0+c3hfcHBzX2NvdW50ICogSFogKiA4ICsgdCAvIDIpIC8gdDsKKwkJdW5zaWduZWQgbG9uZyByeF9wcHNfY291bnQgPQorCQkJRElWX1JPVU5EX0NMT1NFU1Qoc3RyaXBfaW5mby0+cnhfcHBzX2NvdW50KkhaKjgsIHQpOworCQl1bnNpZ25lZCBsb25nIHR4X3Bwc19jb3VudCA9CisJCQlESVZfUk9VTkRfQ0xPU0VTVChzdHJpcF9pbmZvLT50eF9wcHNfY291bnQqSFoqOCwgdCk7CisJCXVuc2lnbmVkIGxvbmcgc3hfcHBzX2NvdW50ID0KKwkJCURJVl9ST1VORF9DTE9TRVNUKHN0cmlwX2luZm8tPnN4X3Bwc19jb3VudCpIWio4LCB0KTsKIAogCQlzdHJpcF9pbmZvLT5wcHNfdGltZXIgPSBqaWZmaWVzOwogCQlzdHJpcF9pbmZvLT5yeF9wcHNfY291bnQgPSAwOwpAQCAtMTU4Miw3ICsxNTg1LDcgQEAKIAogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCmluZGV4IGFiN2ZjNWMuLmQ2MzRiMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKQEAgLTI4NDEsNyArMjg0MSw4IEBACiAgKiB0aGUgcGFja2V0LiAgV2UgYWxzbyBwcmV2ZW50IHJlZW50cmFuY2UuICBUaGVuIHdlIGNhbGwgdGhlIGZ1bmN0aW9uCiAgKiB0byBzZW5kIHRoZSBwYWNrZXQuCiAgKi8KLXN0YXRpYyBpbnQgd2F2ZWxhbl9wYWNrZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB3YXZlbGFuX3BhY2tldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCiB7CiAJbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI4OTEsNyArMjg5Miw3IEBACiAjaWZkZWYgREVCVUdfVFhfVFJBQ0UKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDwtd2F2ZWxhbl9wYWNrZXRfeG1pdCgpXG4iLCBkZXYtPm5hbWUpOwogI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqIEhBUkRXQVJFIENPTkZJR1VSQVRJT04gKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCmluZGV4IDJkYWEwMjEuLmRiZThkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oCkBAIC02MTEsNyArNjExLDcgQEAKIAl3dl9wYWNrZXRfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKiwJLyogV3JpdGUgYSBwYWNrZXQgdG8gdGhlIFR4IGJ1ZmZlci4gKi8KIAkJCXZvaWQgKiwKIAkJCXNob3J0KTsKLXN0YXRpYyBpbnQKK3N0YXRpYyBuZXRkZXZfdHhfdAogCXdhdmVsYW5fcGFja2V0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwJLyogU2VuZCBhIHBhY2tldC4gKi8KIAkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEhBUkRXQVJFIENPTkZJR1VSQVRJT04gLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYwppbmRleCBjNmQzMDA2Li40MzFhMjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCkBAIC0zMDc4LDcgKzMwNzgsNyBAQAogICogdGhlIHBhY2tldC4gV2UgYWxzbyBwcmV2ZW50IHJlZW50cmFuY2UuIFRoZW4sIHdlIGNhbGwgdGhlIGZ1bmN0aW9uCiAgKiB0byBzZW5kIHRoZSBwYWNrZXQuLi4KICAqLwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiB3YXZlbGFuX3BhY2tldF94bWl0KHN0cnVjdCBza19idWZmICoJc2tiLAogCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKgkJZGV2KQogewpAQCAtMzExMyw3ICszMTEzLDcgQEAKIAkgKiBhYmxlIHRvIGRldGVjdCBjb2xsaXNpb25zLCB0aGVyZWZvcmUgaW4gdGhlb3J5IHdlIGRvbid0IHJlYWxseQogCSAqIG5lZWQgdG8gcGFkLiBKZWFuIElJICovCiAJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAKICAgd3ZfcGFja2V0X3dyaXRlKGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKQEAgLTMxMjIsNyArMzEyMiw3IEBACiAjaWZkZWYgREVCVUdfVFhfVFJBQ0UKICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8LXdhdmVsYW5fcGFja2V0X3htaXQoKVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotICByZXR1cm4oMCk7CisgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqIEhBUkRXQVJFIENPTkZJR1VSQVRJT04gKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5wLmgKaW5kZXggNzA2ZmQzMDAuLjgxZDkxNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCkBAIC03MDcsNyArNzA3LDcgQEAKIAl3dl9wYWNrZXRfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKiwJLyogV3JpdGUgYSBwYWNrZXQgdG8gdGhlIFR4IGJ1ZmZlciAqLwogCQkJdm9pZCAqLAogCQkJc2hvcnQpOwotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiAJd2F2ZWxhbl9wYWNrZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLAkvKiBTZW5kIGEgcGFja2V0ICovCiAJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBIQVJEV0FSRSBDT05GSUdVUkFUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnCmluZGV4IGE4MmM0Y2QuLjdiMTRkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9LY29uZmlnCkBAIC0xLDExICsxLDUyIEBACi1jb25maWcgV0wxMlhYCi0JdHJpc3RhdGUgIlRJIHdsMTI1MS93bDEyNzEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgU1BJX01BU1RFUiAmJiBHRU5FUklDX0hBUkRJUlFTICYmIEVYUEVSSU1FTlRBTAorbWVudWNvbmZpZyBXTDEyWFgKKwlib29sZWFuICJUSSB3bDEyeHggZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgd2lsbCBlbmFibGUgVEkgd2wxMnh4IGRyaXZlciBzdXBwb3J0LiBUaGUgZHJpdmVycyBtYWtlCisJICB1c2Ugb2YgdGhlIG1hYzgwMjExIHN0YWNrLgorCitjb25maWcgV0wxMjUxCisJdHJpc3RhdGUgIlRJIHdsMTI1MSBzdXBwb3J0IgorCWRlcGVuZHMgb24gV0wxMlhYICYmIEdFTkVSSUNfSEFSRElSUVMKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IENSQzcKIAktLS1oZWxwLS0tCiAJICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uCi0JICBUSSB3bDEyNTEvd2wxMjcxIGNoaXBzZXRzLgorCSAgVEkgd2wxMjUxIGNoaXBzZXQuCiAKLQkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCB3bDEyeHguIFNheSBOIGlmCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgd2wxMjUxLiBTYXkKKwkgIE4gaWYgdW5zdXJlLgorCitjb25maWcgV0wxMjUxX1NQSQorCXRyaXN0YXRlICJUSSB3bDEyNTEgU1BJIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBXTDEyNTEgJiYgU1BJX01BU1RFUgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgbW9kdWxlIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNQSSBpbnRlcmZhY2Ugb2YgYWRhcHRlcnMgdXNpbmcKKwkgIFRJIHdsMTI1MSBjaGlwc2V0LiAgU2VsZWN0IHRoaXMgaWYgeW91ciBwbGF0Zm9ybSBpcyB1c2luZworCSAgdGhlIFNQSSBidXMuCisKKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCB3bDEyNTFfc3BpLgorCSAgU2F5IE4gaWYgdW5zdXJlLgorCitjb25maWcgV0wxMjUxX1NESU8KKwl0cmlzdGF0ZSAiVEkgd2wxMjUxIFNESU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFdMMTI1MSAmJiBNTUMKKwktLS1oZWxwLS0tCisJICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTRElPIGludGVyZmFjZSBvZiBhZGFwdGVycyB1c2luZworCSAgVEkgd2wxMjUxIGNoaXBzZXQuICBTZWxlY3QgdGhpcyBpZiB5b3VyIHBsYXRmb3JtIGlzIHVzaW5nCisJICB0aGUgU0RJTyBidXMuCisKKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZAorCSAgd2wxMjUxX3NkaW8uIFNheSBOIGlmIHVuc3VyZS4KKworY29uZmlnIFdMMTI3MQorCXRyaXN0YXRlICJUSSB3bDEyNzEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFdMMTJYWCAmJiBTUElfTUFTVEVSICYmIEdFTkVSSUNfSEFSRElSUVMKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IENSQzcKKwktLS1oZWxwLS0tCisJICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIHRoZQorCSAgVEkgd2wxMjcxIGNoaXBzZXQuCisKKwkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCB3bDEyNzEuIFNheSBOIGlmCiAJICB1bnN1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvTWFrZWZpbGUKaW5kZXggZDQzZGUyNy4uNjJlMzdhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZQpAQCAtMSw0ICsxLDE0IEBACi13bDEyeHgtb2JqcwkJPSBtYWluLm8gc3BpLm8gZXZlbnQubyB0eC5vIHJ4Lm8gXAotCQkJICBwcy5vIGNtZC5vIGFjeC5vIGJvb3QubyBpbml0Lm8gd2wxMjUxLm8gXAotCQkJICBkZWJ1Z2ZzLm8KLW9iai0kKENPTkZJR19XTDEyWFgpCSs9IHdsMTJ4eC5vCit3bDEyNTEtb2JqcwkJPSB3bDEyNTFfbWFpbi5vIHdsMTI1MV9ldmVudC5vIFwKKwkJCSAgd2wxMjUxX3R4Lm8gd2wxMjUxX3J4Lm8gd2wxMjUxX3BzLm8gd2wxMjUxX2NtZC5vIFwKKwkJCSAgd2wxMjUxX2FjeC5vIHdsMTI1MV9ib290Lm8gd2wxMjUxX2luaXQubyBcCisJCQkgIHdsMTI1MV9kZWJ1Z2ZzLm8gd2wxMjUxX2lvLm8KKworb2JqLSQoQ09ORklHX1dMMTI1MSkJKz0gd2wxMjUxLm8KK29iai0kKENPTkZJR19XTDEyNTFfU1BJKQkrPSB3bDEyNTFfc3BpLm8KK29iai0kKENPTkZJR19XTDEyNTFfU0RJTykJKz0gd2wxMjUxX3NkaW8ubworCit3bDEyNzEtb2JqcwkJPSB3bDEyNzFfbWFpbi5vICB3bDEyNzFfc3BpLm8gd2wxMjcxX2NtZC5vICBcCisJCQkgIHdsMTI3MV9ldmVudC5vIHdsMTI3MV90eC5vICB3bDEyNzFfcngubyAgIFwKKwkJCSAgd2wxMjcxX3BzLm8gICAgd2wxMjcxX2FjeC5vIHdsMTI3MV9ib290Lm8gXAorCQkJICB3bDEyNzFfaW5pdC5vICB3bDEyNzFfZGVidWdmcy5vCitvYmotJChDT05GSUdfV0wxMjcxKQkrPSB3bDEyNzEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2ZkNDU4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guYworKysgL2Rldi9udWxsCkBAIC0xLDY4OSArMCwwIEBACi0jaW5jbHVkZSAiYWN4LmgiCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0jaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAic3BpLmgiCi0jaW5jbHVkZSAicHMuaCIKLQotaW50IHdsMTJ4eF9hY3hfZnJhbWVfcmF0ZXMoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGN0cmxfcmF0ZSwgdTggY3RybF9tb2QsCi0JCQkgICB1OCBtZ3RfcmF0ZSwgdTggbWd0X21vZCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBhY3hfZndfZ2VuX2ZyYW1lX3JhdGVzIHJhdGVzOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFtZSByYXRlcyIpOwotCi0JcmF0ZXMuaGVhZGVyLmlkID0gQUNYX0ZXX0dFTl9GUkFNRV9SQVRFUzsKLQlyYXRlcy5oZWFkZXIubGVuID0gc2l6ZW9mKHN0cnVjdCBhY3hfZndfZ2VuX2ZyYW1lX3JhdGVzKSAtCi0JCXNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlyYXRlcy50eF9jdHJsX2ZyYW1lX3JhdGUgPSBjdHJsX3JhdGU7Ci0JcmF0ZXMudHhfY3RybF9mcmFtZV9tb2QgPSBjdHJsX21vZDsKLQlyYXRlcy50eF9tZ3RfZnJhbWVfcmF0ZSA9IG1ndF9yYXRlOwotCXJhdGVzLnR4X21ndF9mcmFtZV9tb2QgPSBtZ3RfbW9kOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZyYXRlcywgc2l6ZW9mKHJhdGVzKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJGYWlsZWQgdG8gc2V0IEZXIHJhdGVzIGFuZCBtb2R1bGF0aW9uIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IHdsMTJ4eF9hY3hfc3RhdGlvbl9pZChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0LCBpOwotCXN0cnVjdCBkb3QxMV9zdGF0aW9uX2lkIG1hYzsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZG90MTFfc3RhdGlvbl9pZCIpOwotCi0JbWFjLmhlYWRlci5pZCA9IERPVDExX1NUQVRJT05fSUQ7Ci0JbWFjLmhlYWRlci5sZW4gPSBzaXplb2YobWFjKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJbWFjLm1hY1tpXSA9IHdsLT5tYWNfYWRkcltFVEhfQUxFTiAtIDEgLSBpXTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmbWFjLCBzaXplb2YobWFjKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfZGVmYXVsdF9rZXkoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGtleV9pZCkKLXsKLQlzdHJ1Y3QgYWN4X2RvdDExX2RlZmF1bHRfa2V5IGRlZmF1bHRfa2V5OwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRvdDExX2RlZmF1bHRfa2V5ICglZCkiLCBrZXlfaWQpOwotCi0JZGVmYXVsdF9rZXkuaGVhZGVyLmlkID0gRE9UMTFfREVGQVVMVF9LRVk7Ci0JZGVmYXVsdF9rZXkuaGVhZGVyLmxlbiA9IHNpemVvZihkZWZhdWx0X2tleSkgLQotCQlzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JZGVmYXVsdF9rZXkuaWQgPSBrZXlfaWQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmRlZmF1bHRfa2V5LCBzaXplb2YoZGVmYXVsdF9rZXkpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIkNvdWxkbnQgc2V0IGRlZmF1bHQga2V5Iik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jd2wtPmRlZmF1bHRfa2V5ID0ga2V5X2lkOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3dha2VfdXBfY29uZGl0aW9ucyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggbGlzdGVuX2ludGVydmFsKQotewotCXN0cnVjdCBhY3hfd2FrZV91cF9jb25kaXRpb24gd2FrZV91cDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggd2FrZSB1cCBjb25kaXRpb25zIik7Ci0KLQl3YWtlX3VwLmhlYWRlci5pZCA9IEFDWF9XQUtFX1VQX0NPTkRJVElPTlM7Ci0Jd2FrZV91cC5oZWFkZXIubGVuID0gc2l6ZW9mKHdha2VfdXApIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCXdha2VfdXAud2FrZV91cF9ldmVudCA9IFdBS0VfVVBfRVZFTlRfRFRJTV9CSVRNQVA7Ci0Jd2FrZV91cC5saXN0ZW5faW50ZXJ2YWwgPSBsaXN0ZW5faW50ZXJ2YWw7Ci0KLQlyZXR1cm4gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZ3YWtlX3VwLCBzaXplb2Yod2FrZV91cCkpOwotfQotCi1pbnQgd2wxMnh4X2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyeHggKndsLCB1OCBzbGVlcF9hdXRoKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGFjeF9zbGVlcF9hdXRoIGF1dGg7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNsZWVwIGF1dGgiKTsKLQotCWF1dGguaGVhZGVyLmlkID0gQUNYX1NMRUVQX0FVVEg7Ci0JYXV0aC5oZWFkZXIubGVuID0gc2l6ZW9mKGF1dGgpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCWF1dGguc2xlZXBfYXV0aCA9IHNsZWVwX2F1dGg7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmF1dGgsIHNpemVvZihhdXRoKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfZndfdmVyc2lvbihzdHJ1Y3Qgd2wxMnh4ICp3bCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCB3bDEyeHhfY29tbWFuZCBjbWQ7Ci0Jc3RydWN0IGFjeF9yZXZpc2lvbiAqcmV2OwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZ3IHJldiIpOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9GV19SRVYsIHNpemVvZigqcmV2KSwgJmNtZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoIkFDWF9GV19SRVYgaW50ZXJyb2dhdGUgZmFpbGVkIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV2ID0gKHN0cnVjdCBhY3hfcmV2aXNpb24gKikgJmNtZC5wYXJhbWV0ZXJzOwotCi0JLyogYmUgY2FyZWZ1bCB3aXRoIHRoZSBidWZmZXIgc2l6ZXMgKi8KLQlzdHJuY3B5KGJ1ZiwgcmV2LT5md192ZXJzaW9uLCBtaW4obGVuLCBzaXplb2YocmV2LT5md192ZXJzaW9uKSkpOwotCi0JLyoKLQkgKiBpZiB0aGUgZmlybXdhcmUgdmVyc2lvbiBzdHJpbmcgaXMgZXhhY3RseQotCSAqIHNpemVvZihyZXYtPmZ3X3ZlcnNpb24pIGxvbmcgb3IgZndfbGVuIGlzIGxlc3MgdGhhbgotCSAqIHNpemVvZihyZXYtPmZ3X3ZlcnNpb24pIGl0IHdvbid0IGJlIG51bGwgdGVybWluYXRlZAotCSAqLwotCWJ1ZlttaW4obGVuLCBzaXplb2YocmV2LT5md192ZXJzaW9uKSkgLSAxXSA9ICdcMCc7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfdHhfcG93ZXIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBwb3dlcikKLXsKLQlzdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgaWU7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZG90MTFfY3VyX3R4X3B3ciIpOwotCi0JaWYgKHBvd2VyIDwgMCB8fCBwb3dlciA+IDI1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbXNldCgmaWUsIDAsIHNpemVvZihpZSkpOwotCi0JaWUuaGVhZGVyLmlkID0gRE9UMTFfQ1VSX1RYX1BXUjsKLQlpZS5oZWFkZXIubGVuID0gc2l6ZW9mKGllKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0JaWUuY3VycmVudF90eF9wb3dlciA9IHBvd2VyICogMTA7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmllLCBzaXplb2YoaWUpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiY29uZmlndXJlIG9mIHR4IHBvd2VyIGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnIGZlYXR1cmU7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZmVhdHVyZSBjZmciKTsKLQotCW1lbXNldCgmZmVhdHVyZSwgMCwgc2l6ZW9mKGZlYXR1cmUpKTsKLQotCWZlYXR1cmUuaGVhZGVyLmlkID0gQUNYX0ZFQVRVUkVfQ0ZHOwotCWZlYXR1cmUuaGVhZGVyLmxlbiA9IHNpemVvZihmZWF0dXJlKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQkvKiBERl9FTkNSWVBUSU9OX0RJU0FCTEUgYW5kIERGX1NOSUZGX01PREVfRU5BQkxFIGFyZSBkaXNhYmxlZCAqLwotCWZlYXR1cmUuZGF0YV9mbG93X29wdGlvbnMgPSAwOwotCWZlYXR1cmUub3B0aW9ucyA9IDA7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmZlYXR1cmUsIHNpemVvZihmZWF0dXJlKSk7Ci0JaWYgKHJldCA8IDApCi0JCXdsMTJ4eF9lcnJvcigiQ291bGRudCBzZXQgSFcgZW5jcnlwdGlvbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfbWVtX21hcChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdm9pZCAqbWVtX21hcCwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgY21kOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IG1lbSBtYXAiKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9NRU1fTUFQLCBsZW4sICZjbWQpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWVsc2UgaWYgKGNtZC5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKQotCQlyZXR1cm4gLUVJTzsKLQotCW1lbWNweShtZW1fbWFwLCAmY21kLnBhcmFtZXRlcnMsIGxlbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfZGF0YV9wYXRoX3BhcmFtcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwKLQkJCQlzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCAqZGF0YV9wYXRoKQotewotCXN0cnVjdCBhY3hfZGF0YV9wYXRoX3BhcmFtcyBwYXJhbXM7Ci0Jc3RydWN0IHdsMTJ4eF9jb21tYW5kIGNtZDsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBkYXRhIHBhdGggcGFyYW1zIik7Ci0KLQlwYXJhbXMucnhfcGFja2V0X3JpbmdfY2h1bmtfc2l6ZSA9IERQX1JYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkU7Ci0JcGFyYW1zLnR4X3BhY2tldF9yaW5nX2NodW5rX3NpemUgPSBEUF9UWF9QQUNLRVRfUklOR19DSFVOS19TSVpFOwotCi0JcGFyYW1zLnJ4X3BhY2tldF9yaW5nX2NodW5rX251bSA9IERQX1JYX1BBQ0tFVF9SSU5HX0NIVU5LX05VTTsKLQlwYXJhbXMudHhfcGFja2V0X3JpbmdfY2h1bmtfbnVtID0gRFBfVFhfUEFDS0VUX1JJTkdfQ0hVTktfTlVNOwotCi0JcGFyYW1zLnR4X2NvbXBsZXRlX3RocmVzaG9sZCA9IDE7Ci0KLQlwYXJhbXMudHhfY29tcGxldGVfcmluZ19kZXB0aCA9IEZXX1RYX0NNUExUX0JMT0NLX1NJWkU7Ci0KLQlwYXJhbXMudHhfY29tcGxldGVfdGltZW91dCA9IERQX1RYX0NPTVBMRVRFX1RJTUVfT1VUOwotCi0JcGFyYW1zLmhlYWRlci5pZCA9IEFDWF9EQVRBX1BBVEhfUEFSQU1TOwotCXBhcmFtcy5oZWFkZXIubGVuID0gc2l6ZW9mKHBhcmFtcykgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZwYXJhbXMsIHNpemVvZihwYXJhbXMpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCi0JcmV0ID0gd2wxMnh4X2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX0RBVEFfUEFUSF9QQVJBTVMsCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IGFjeF9kYXRhX3BhdGhfcGFyYW1zX3Jlc3ApLAotCQkJCSAgICAgJmNtZCk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHJlYWQgZGF0YSBwYXRoIHBhcmFtZXRlcnM6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKGNtZC5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJkYXRhIHBhdGggcGFyYW1ldGVyIGFjeCBzdGF0dXMgZmFpbGVkIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCW1lbWNweShkYXRhX3BhdGgsICZjbWQucGFyYW1ldGVycywgc2l6ZW9mKCpkYXRhX3BhdGgpKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9yeF9tc2R1X2xpZmVfdGltZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGxpZmVfdGltZSkKLXsKLQlzdHJ1Y3QgcnhfbXNkdV9saWZldGltZSBtc2R1X2xpZmV0aW1lOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ4IG1zZHUgbGlmZSB0aW1lIik7Ci0KLQltc2R1X2xpZmV0aW1lLmhlYWRlci5pZCA9IERPVDExX1JYX01TRFVfTElGRV9USU1FOwotCW1zZHVfbGlmZXRpbWUuaGVhZGVyLmxlbiA9IHNpemVvZihtc2R1X2xpZmV0aW1lKSAtCi0JCXNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0JbXNkdV9saWZldGltZS5saWZldGltZSA9IGxpZmVfdGltZTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmbXNkdV9saWZldGltZSwgc2l6ZW9mKG1zZHVfbGlmZXRpbWUpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCByeCBtc2R1IGxpZmUgdGltZTogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9yeF9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCi17Ci0Jc3RydWN0IGFjeF9yeF9jb25maWcgcnhfY29uZmlnOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ4IGNvbmZpZyIpOwotCi0JcnhfY29uZmlnLmhlYWRlci5pZCA9IEFDWF9SWF9DRkc7Ci0JcnhfY29uZmlnLmhlYWRlci5sZW4gPSBzaXplb2YocnhfY29uZmlnKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0JcnhfY29uZmlnLmNvbmZpZ19vcHRpb25zID0gY29uZmlnOwotCXJ4X2NvbmZpZy5maWx0ZXJfb3B0aW9ucyA9IGZpbHRlcjsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmcnhfY29uZmlnLCBzaXplb2YocnhfY29uZmlnKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X3BhY2tldF9kZXRlY3Rpb24gcGFja2V0X2RldGVjdGlvbjsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBkYXRhIHBkIHRocmVzaG9sZCIpOwotCi0JLyogRklYTUU6IHRocmVzaG9sZCB2YWx1ZSBub3Qgc2V0ICovCi0JcGFja2V0X2RldGVjdGlvbi5oZWFkZXIuaWQgPSBBQ1hfUERfVEhSRVNIT0xEOwotCXBhY2tldF9kZXRlY3Rpb24uaGVhZGVyLmxlbiA9IHNpemVvZihwYWNrZXRfZGV0ZWN0aW9uKSAtCi0JCXNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJnBhY2tldF9kZXRlY3Rpb24sCi0JCQkJICAgc2l6ZW9mKHBhY2tldF9kZXRlY3Rpb24pKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCBwZCB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfc2xvdChzdHJ1Y3Qgd2wxMnh4ICp3bCwgZW51bSBhY3hfc2xvdF90eXBlIHNsb3RfdGltZSkKLXsKLQlzdHJ1Y3QgYWN4X3Nsb3Qgc2xvdDsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBzbG90Iik7Ci0KLQlzbG90LmhlYWRlci5pZCA9IEFDWF9TTE9UOwotCXNsb3QuaGVhZGVyLmxlbiA9IHNpemVvZihzbG90KSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlzbG90LndvbmVfaW5kZXggPSBTVEFUSU9OX1dPTkVfSU5ERVg7Ci0Jc2xvdC5zbG90X3RpbWUgPSBzbG90X3RpbWU7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJnNsb3QsIHNpemVvZihzbG90KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2xvdCB0aW1lOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBtdWx0aWNhc3RfZ3JwX2FkZHJfc3RhcnQgbXVsdGljYXN0OwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGdyb3VwIGFkZHJlc3MgdGJsIik7Ci0KLQkvKiBNQUMgZmlsdGVyaW5nICovCi0JbXVsdGljYXN0LmhlYWRlci5pZCA9IERPVDExX0dST1VQX0FERFJFU1NfVEJMOwotCW11bHRpY2FzdC5oZWFkZXIubGVuID0gc2l6ZW9mKG11bHRpY2FzdCkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JbXVsdGljYXN0LmVuYWJsZWQgPSAwOwotCW11bHRpY2FzdC5udW1fZ3JvdXBzID0gMDsKLQltZW1zZXQobXVsdGljYXN0Lm1hY190YWJsZSwgMCwgQUREUkVTU19HUk9VUF9NQVhfTEVOKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmbXVsdGljYXN0LCBzaXplb2YobXVsdGljYXN0KSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImZhaWxlZCB0byBzZXQgZ3JvdXAgYWRkciB0YWJsZTogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfcnhfdGltZW91dCByeF90aW1lb3V0OwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNlcnZpY2UgcGVyaW9kIHRpbWVvdXQiKTsKLQotCS8qIFJYIHRpbWVvdXQgKi8KLQlyeF90aW1lb3V0LmhlYWRlci5pZCA9IEFDWF9TRVJWSUNFX1BFUklPRF9USU1FT1VUOwotCXJ4X3RpbWVvdXQuaGVhZGVyLmxlbiA9IHNpemVvZihyeF90aW1lb3V0KSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlyeF90aW1lb3V0LnBzX3BvbGxfdGltZW91dCA9IFJYX1RJTUVPVVRfUFNfUE9MTF9ERUY7Ci0JcnhfdGltZW91dC51cHNkX3RpbWVvdXQgPSBSWF9USU1FT1VUX1VQU0RfREVGOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZyeF90aW1lb3V0LCBzaXplb2YocnhfdGltZW91dCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNlcnZpY2UgcGVyaW9kIHRpbWVvdXQ6ICVkIiwKLQkJCSAgICAgICByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9ydHNfdGhyZXNob2xkKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgcnRzX3RocmVzaG9sZCkKLXsKLQlzdHJ1Y3QgYWN4X3J0c190aHJlc2hvbGQgcnRzOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ0cyB0aHJlc2hvbGQiKTsKLQotCXJ0cy5oZWFkZXIuaWQgPSBET1QxMV9SVFNfVEhSRVNIT0xEOwotCXJ0cy5oZWFkZXIubGVuID0gc2l6ZW9mKHJ0cykgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JcnRzLnRocmVzaG9sZCA9IHJ0c190aHJlc2hvbGQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJnJ0cywgc2l6ZW9mKHJ0cykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ0cyB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX29wdGlvbiBiZWFjb25fZmlsdGVyOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgb3B0Iik7Ci0KLQliZWFjb25fZmlsdGVyLmhlYWRlci5pZCA9IEFDWF9CRUFDT05fRklMVEVSX09QVDsKLQliZWFjb25fZmlsdGVyLmhlYWRlci5sZW4gPSBzaXplb2YoYmVhY29uX2ZpbHRlcikgLQotCQlzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JYmVhY29uX2ZpbHRlci5lbmFibGUgPSAwOwotCWJlYWNvbl9maWx0ZXIubWF4X251bV9iZWFjb25zID0gMDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmYmVhY29uX2ZpbHRlciwgc2l6ZW9mKGJlYWNvbl9maWx0ZXIpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCBiZWFjb24gZmlsdGVyIG9wdDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9pZV90YWJsZSBpZV90YWJsZTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBiZWFjb24gZmlsdGVyIHRhYmxlIik7Ci0KLQlpZV90YWJsZS5oZWFkZXIuaWQgPSBBQ1hfQkVBQ09OX0ZJTFRFUl9UQUJMRTsKLQlpZV90YWJsZS5oZWFkZXIubGVuID0gc2l6ZW9mKGllX3RhYmxlKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlpZV90YWJsZS5udW1faWUgPSAwOwotCW1lbXNldChpZV90YWJsZS50YWJsZSwgMCwgQkVBQ09OX0ZJTFRFUl9UQUJMRV9NQVhfU0laRSk7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmllX3RhYmxlLCBzaXplb2YoaWVfdGFibGUpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCBiZWFjb24gZmlsdGVyIHRhYmxlOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3NnX2VuYWJsZShzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leCBwdGE7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgZW5hYmxlIik7Ci0KLQlwdGEuaGVhZGVyLmlkID0gQUNYX1NHX0VOQUJMRTsKLQlwdGEuaGVhZGVyLmxlbiA9IHNpemVvZihwdGEpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCXB0YS5lbmFibGUgPSBTR19FTkFCTEU7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJnB0YSwgc2l6ZW9mKHB0YSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNvZnRnZW1pbmkgZW5hYmxlOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSBwYXJhbTsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZyBjZmciKTsKLQotCS8qIEJULVdMQU4gY29leHQgcGFyYW1ldGVycyAqLwotCXBhcmFtLmhlYWRlci5pZCA9IEFDWF9TR19DRkc7Ci0JcGFyYW0uaGVhZGVyLmxlbiA9IHNpemVvZihwYXJhbSkgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JcGFyYW0ubWluX3JhdGUgPSBSQVRFX0lOREVYXzI0TUJQUzsKLQlwYXJhbS5idF9ocF9tYXhfdGltZSA9IFBUQV9CVF9IUF9NQVhUSU1FX0RFRjsKLQlwYXJhbS53bGFuX2hwX21heF90aW1lID0gUFRBX1dMQU5fSFBfTUFYX1RJTUVfREVGOwotCXBhcmFtLnNlbnNlX2Rpc2FibGVfdGltZXIgPSBQVEFfU0VOU0VfRElTQUJMRV9USU1FUl9ERUY7Ci0JcGFyYW0ucnhfdGltZV9idF9ocCA9IFBUQV9QUk9URUNUSVZFX1JYX1RJTUVfREVGOwotCXBhcmFtLnR4X3RpbWVfYnRfaHAgPSBQVEFfUFJPVEVDVElWRV9UWF9USU1FX0RFRjsKLQlwYXJhbS5yeF90aW1lX2J0X2hwX2Zhc3QgPSBQVEFfUFJPVEVDVElWRV9SWF9USU1FX0ZBU1RfREVGOwotCXBhcmFtLnR4X3RpbWVfYnRfaHBfZmFzdCA9IFBUQV9QUk9URUNUSVZFX1RYX1RJTUVfRkFTVF9ERUY7Ci0JcGFyYW0ud2xhbl9jeWNsZV9mYXN0ID0gUFRBX0NZQ0xFX1RJTUVfRkFTVF9ERUY7Ci0JcGFyYW0uYnRfYW50aV9zdGFydmF0aW9uX3BlcmlvZCA9IFBUQV9BTlRJX1NUQVJWRV9QRVJJT0RfREVGOwotCXBhcmFtLm5leHRfYnRfbHBfcGFja2V0ID0gUFRBX1RJTUVPVVRfTkVYVF9CVF9MUF9QQUNLRVRfREVGOwotCXBhcmFtLndha2VfdXBfYmVhY29uID0gUFRBX1RJTUVfQkVGT1JFX0JFQUNPTl9ERUY7Ci0JcGFyYW0uaHBfZG1fbWF4X2d1YXJkX3RpbWUgPSBQVEFfSFBETV9NQVhfVElNRV9ERUY7Ci0JcGFyYW0ubmV4dF93bGFuX3BhY2tldCA9IFBUQV9USU1FX09VVF9ORVhUX1dMQU5fREVGOwotCXBhcmFtLmFudGVubmFfdHlwZSA9IFBUQV9BTlRFTk5BX1RZUEVfREVGOwotCXBhcmFtLnNpZ25hbF90eXBlID0gUFRBX1NJR05BTElOR19UWVBFX0RFRjsKLQlwYXJhbS5hZmhfbGV2ZXJhZ2Vfb24gPSBQVEFfQUZIX0xFVkVSQUdFX09OX0RFRjsKLQlwYXJhbS5xdWlldF9jeWNsZV9udW0gPSBQVEFfTlVNQkVSX1FVSUVUX0NZQ0xFX0RFRjsKLQlwYXJhbS5tYXhfY3RzID0gUFRBX01BWF9OVU1fQ1RTX0RFRjsKLQlwYXJhbS53bGFuX3BhY2tldHNfbnVtID0gUFRBX05VTUJFUl9PRl9XTEFOX1BBQ0tFVFNfREVGOwotCXBhcmFtLmJ0X3BhY2tldHNfbnVtID0gUFRBX05VTUJFUl9PRl9CVF9QQUNLRVRTX0RFRjsKLQlwYXJhbS5taXNzZWRfcnhfYXZhbGFuY2hlID0gUFRBX1JYX0ZPUl9BVkFMQU5DSEVfREVGOwotCXBhcmFtLndsYW5fZWxwX2hwID0gUFRBX0VMUF9IUF9ERUY7Ci0JcGFyYW0uYnRfYW50aV9zdGFydmF0aW9uX2N5Y2xlcyA9IFBUQV9BTlRJX1NUQVJWRV9OVU1fQ1lDTEVfREVGOwotCXBhcmFtLmFja19tb2RlX2R1YWxfYW50ID0gUFRBX0FDS19NT0RFX0RFRjsKLQlwYXJhbS5wYV9zZF9lbmFibGUgPSBQVEFfQUxMT1dfUEFfU0RfREVGOwotCXBhcmFtLnB0YV9hdXRvX21vZGVfZW5hYmxlID0gUFRBX0FVVE9fTU9ERV9OT19DVFNfREVGOwotCXBhcmFtLmJ0X2hwX3Jlc3BlY3RlZF9udW0gPSBQVEFfQlRfSFBfUkVTUEVDVEVEX0RFRjsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNnIGNvbmZpZzogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9jY2FfdGhyZXNob2xkKHN0cnVjdCB3bDEyeHggKndsKQotewotCXN0cnVjdCBhY3hfZW5lcmd5X2RldGVjdGlvbiBkZXRlY3Rpb247Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggY2NhIHRocmVzaG9sZCIpOwotCi0JZGV0ZWN0aW9uLmhlYWRlci5pZCA9IEFDWF9DQ0FfVEhSRVNIT0xEOwotCWRldGVjdGlvbi5oZWFkZXIubGVuID0gc2l6ZW9mKGRldGVjdGlvbikgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JZGV0ZWN0aW9uLnJ4X2NjYV90aHJlc2hvbGQgPSBDQ0FfVEhSU0hfRElTQUJMRV9FTkVSR1lfRDsKLQlkZXRlY3Rpb24udHhfZW5lcmd5X2RldGVjdGlvbiA9IDA7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmRldGVjdGlvbiwgc2l6ZW9mKGRldGVjdGlvbikpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGNjYSB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3QgYWN4X2JlYWNvbl9icm9hZGNhc3QgYmI7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmNuIGR0aW0gb3B0aW9ucyIpOwotCi0JYmIuaGVhZGVyLmlkID0gQUNYX0JDTl9EVElNX09QVElPTlM7Ci0JYmIuaGVhZGVyLmxlbiA9IHNpemVvZihiYikgLSBzaXplb2Yoc3RydWN0IGFjeF9oZWFkZXIpOwotCi0JYmIuYmVhY29uX3J4X3RpbWVvdXQgPSBCQ05fUlhfVElNRU9VVF9ERUZfVkFMVUU7Ci0JYmIuYnJvYWRjYXN0X3RpbWVvdXQgPSBCUk9BRENBU1RfUlhfVElNRU9VVF9ERUZfVkFMVUU7Ci0JYmIucnhfYnJvYWRjYXN0X2luX3BzID0gUlhfQlJPQURDQVNUX0lOX1BTX0RFRl9WQUxVRTsKLQliYi5wc19wb2xsX3RocmVzaG9sZCA9IENPTlNFQ1VUSVZFX1BTX1BPTExfRkFJTFVSRV9ERUY7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmJiLCBzaXplb2YoYmIpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCByeCBjb25maWc6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfYWlkKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgYWlkKQotewotCXN0cnVjdCBhY3hfYWlkIGFjeF9haWQ7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWlkIik7Ci0KLQlhY3hfYWlkLmhlYWRlci5pZCA9IEFDWF9BSUQ7Ci0JYWN4X2FpZC5oZWFkZXIubGVuID0gc2l6ZW9mKGFjeF9haWQpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQotCWFjeF9haWQuYWlkID0gYWlkOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9jb25maWd1cmUod2wsICZhY3hfYWlkLCBzaXplb2YoYWN4X2FpZCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGFpZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2FjeF9ldmVudF9tYm94X21hc2soc3RydWN0IHdsMTJ4eCAqd2wsIHUzMiBldmVudF9tYXNrKQotewotCXN0cnVjdCBhY3hfZXZlbnRfbWFzayBtYXNrOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IGV2ZW50IG1ib3ggbWFzayIpOwotCi0JbWFzay5oZWFkZXIuaWQgPSBBQ1hfRVZFTlRfTUJPWF9NQVNLOwotCW1hc2suaGVhZGVyLmxlbiA9IHNpemVvZihtYXNrKSAtIHNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQkvKiBoaWdoIGV2ZW50IG1hc2sgaXMgdW51c2VkICovCi0JbWFzay5oaWdoX2V2ZW50X21hc2sgPSAweGZmZmZmZmZmOwotCi0JbWFzay5ldmVudF9tYXNrID0gZXZlbnRfbWFzazsKLQotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmbWFzaywgc2l6ZW9mKG1hc2spKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiZmFpbGVkIHRvIHNldCBhaWQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfc2V0X3ByZWFtYmxlKHN0cnVjdCB3bDEyeHggKndsLCBlbnVtIGFjeF9wcmVhbWJsZV90eXBlIHByZWFtYmxlKQotewotCXN0cnVjdCBhY3hfcHJlYW1ibGUgaWU7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3hfc2V0X3ByZWFtYmxlIik7Ci0KLQltZW1zZXQoJmllLCAwLCBzaXplb2YoaWUpKTsKLQotCWllLmhlYWRlci5pZCA9IEFDWF9QUkVBTUJMRV9UWVBFOwotCWllLmhlYWRlci5sZW4gPSBzaXplb2YoaWUpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQlpZS5wcmVhbWJsZSA9IHByZWFtYmxlOwotCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmaWUsIHNpemVvZihpZSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJTZXR0aW5nIG9mIHByZWFtYmxlIGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTJ4eCAqd2wsCi0JCQkgICBlbnVtIGFjeF9jdHNwcm90ZWN0X3R5cGUgY3RzcHJvdGVjdCkKLXsKLQlzdHJ1Y3QgYWN4X2N0c3Byb3RlY3QgaWU7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19BQ1gsICJhY3hfc2V0X2N0c3Byb3RlY3QiKTsKLQotCW1lbXNldCgmaWUsIDAsIHNpemVvZihpZSkpOwotCi0JaWUuaGVhZGVyLmlkID0gQUNYX0NUU19QUk9URUNUSU9OOwotCWllLmhlYWRlci5sZW4gPSBzaXplb2YoaWUpIC0gc2l6ZW9mKHN0cnVjdCBhY3hfaGVhZGVyKTsKLQlpZS5jdHNwcm90ZWN0ID0gY3RzcHJvdGVjdDsKLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJmllLCBzaXplb2YoaWUpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiU2V0dGluZyBvZiBjdHNwcm90ZWN0IGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cykKLXsKLQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgKmFuc3dlcjsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgImFjeCBzdGF0aXN0aWNzIik7Ci0KLQlhbnN3ZXIgPSBrbWFsbG9jKHNpemVvZigqYW5zd2VyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhbnN3ZXIpIHsKLQkJd2wxMnh4X3dhcm5pbmcoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFjeCBzdGF0aXN0aWNzIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IHdsMTJ4eF9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9TVEFUSVNUSUNTLCBzaXplb2YoKmFuc3dlciksCi0JCQkJICAgICBhbnN3ZXIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJhY3ggc3RhdGlzdGljcyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHN0YXRzLCBhbnN3ZXItPnBhcmFtZXRlcnMsIHNpemVvZigqc3RhdHMpKTsKLQotb3V0OgotCWtmcmVlKGFuc3dlcik7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYm9vdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGFjMDhjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTUgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLQotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgImJvb3QuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJldmVudC5oIgotCi1zdGF0aWMgdm9pZCB3bDEyeHhfYm9vdF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQllbmFibGVfaXJxKHdsLT5pcnEpOwotfQotCi12b2lkIHdsMTJ4eF9ib290X3RhcmdldF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIH4od2wtPmludHJfbWFzaykpOwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgSElfQ0ZHLCBISV9DRkdfREVGX1ZBTCk7Ci19Ci0KLWludCB3bDEyeHhfYm9vdF9zb2Z0X3Jlc2V0KHN0cnVjdCB3bDEyeHggKndsKQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQl1MzIgYm9vdF9kYXRhOwotCi0JLyogcGVyZm9ybSBzb2Z0IHJlc2V0ICovCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VULCBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUKTsKLQotCS8qIFNPRlRfUkVTRVQgaXMgc2VsZiBjbGVhcmluZyAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyhTT0ZUX1JFU0VUX01BWF9USU1FKTsKLQl3aGlsZSAoMSkgewotCQlib290X2RhdGEgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCk7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAic29mdCByZXNldCBib290ZGF0YSAweCV4IiwgYm9vdF9kYXRhKTsKLQkJaWYgKChib290X2RhdGEgJiBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUKSA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCS8qIDEuMiBjaGVjayBwV2hhbEJ1cy0+dVNlbGZDbGVhclRpbWUgaWYgdGhlCi0JCQkgKiB0aW1lb3V0IHdhcyByZWFjaGVkICovCi0JCQl3bDEyeHhfZXJyb3IoInNvZnQgcmVzZXQgdGltZW91dCIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0KLQkJdWRlbGF5KFNPRlRfUkVTRVRfU1RBTExfVElNRSk7Ci0JfQotCi0JLyogZGlzYWJsZSBSeC9UeCAqLwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgRU5BQkxFLCAweDApOwotCi0JLyogZGlzYWJsZSBhdXRvIGNhbGlicmF0aW9uIG9uIHN0YXJ0Ki8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIFNQQVJFX0EyLCAweGZmZmYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfYm9vdF9pbml0X3NlcShzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl1MzIgc2NyX3BhZDYsIGluaXRfZGF0YSwgdG1wLCBlbHBfY21kLCByZWZfZnJlcTsKLQotCS8qCi0JICogY29sICMxOiBJTlRFR0VSX0RJVklERVIKLQkgKiBjb2wgIzI6IEZSQUNUSU9OQUxfRElWSURFUgotCSAqIGNvbCAjMzogQVRUTl9CQgotCSAqIGNvbCAjNDogQUxQSEFfQkIKLQkgKiBjb2wgIzU6IFNUT1BfVElNRV9CQgotCSAqIGNvbCAjNjogQkJfUExMX0xPT1BfRklMVEVSCi0JICovCi0Jc3RhdGljIGNvbnN0IHUzMiBMVVRbUkVGX0ZSRVFfTlVNXVtMVVRfUEFSQU1fTlVNXSA9IHsKLQotCQl7ICAgODMsIDg3MzgxLCAgMHhCLCA1LCAweEYwMCwgIDN9LCAvKiBSRUZfRlJFUV8xOV8yKi8KLQkJeyAgIDYxLCAxNDExNTQsIDB4QiwgNSwgMHgxNDUwLCAyfSwgLyogUkVGX0ZSRVFfMjZfMCovCi0JCXsgICA0MSwgMTc0NzYzLCAweEMsIDYsIDB4MkQwMCwgMX0sIC8qIFJFRl9GUkVRXzM4XzQqLwotCQl7ICAgNDAsIDAsICAgICAgMHhDLCA2LCAweDJFRTAsIDF9LCAvKiBSRUZfRlJFUV80MF8wKi8KLQkJeyAgIDQ3LCAxNjIyODAsIDB4QywgNiwgMHgyNzYwLCAxfSAgLyogUkVGX0ZSRVFfMzNfNiAgICAgICAgKi8KLQl9OwotCi0JLyogcmVhZCBOVlMgcGFyYW1zICovCi0Jc2NyX3BhZDYgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgU0NSX1BBRDYpOwotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAic2NyX3BhZDYgMHgleCIsIHNjcl9wYWQ2KTsKLQotCS8qIHJlYWQgRUxQX0NNRCAqLwotCWVscF9jbWQgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgRUxQX0NNRCk7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsICJlbHBfY21kIDB4JXgiLCBlbHBfY21kKTsKLQotCS8qIHNldCB0aGUgQkIgY2FsaWJyYXRpb24gdGltZSB0byBiZSAzMDAgdXNlYyAoUExMX0NBTF9USU1FKSAqLwotCXJlZl9mcmVxID0gc2NyX3BhZDYgJiAweDAwMDAwMEZGOwotCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULCAicmVmX2ZyZXEgMHgleCIsIHJlZl9mcmVxKTsKLQotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgUExMX0NBTF9USU1FLCAweDkpOwotCi0JLyoKLQkgKiBQRyAxLjI6IHNldCB0aGUgY2xvY2sgYnVmZmVyIHRpbWUgdG8gYmUgMjEwIHVzZWMgKENMS19CVUZfVElNRSkKLQkgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIENMS19CVUZfVElNRSwgMHg2KTsKLQotCS8qCi0JICogc2V0IHRoZSBjbG9jayBkZXRlY3QgZmVhdHVyZSB0byB3b3JrIGluIHRoZSByZXN0YXJ0IHd1IHByb2NlZHVyZQotCSAqIChFTFBfQ0ZHX01PREVbMTRdKSBhbmQgU2VsZWN0IHRoZSBjbG9jayBzb3VyY2UgdHlwZQotCSAqIChFTFBfQ0ZHX01PREVbMTM6MTJdKQotCSAqLwotCXRtcCA9ICgoc2NyX3BhZDYgJiAweDAwMDBGRjAwKSA8PCA0KSB8IDB4MDAwMDQwMDA7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBFTFBfQ0ZHX01PREUsIHRtcCk7Ci0KLQkvKiBQRyAxLjI6IGVuYWJsZSB0aGUgQkIgUExMIGZpeC4gRW5hYmxlIHRoZSBQTExfTElNUF9DTEtfRU5fQ01EICovCi0JZWxwX2NtZCB8PSAweDAwMDAwMDQwOwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgRUxQX0NNRCwgZWxwX2NtZCk7Ci0KLQkvKiBQRyAxLjI6IFNldCB0aGUgQkIgUExMIHN0YWJsZSB0aW1lIHRvIGJlIDEwMDB1c2VjCi0JICogKFBMTF9TVEFCTEVfVElNRSkgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIENGR19QTExfU1lOQ19DTlQsIDB4MjApOwotCi0JLyogUEcgMS4yOiByZWFkIGNsb2NrIHJlcXVlc3QgdGltZSAqLwotCWluaXRfZGF0YSA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBDTEtfUkVRX1RJTUUpOwotCi0JLyoKLQkgKiBQRyAxLjI6IHNldCB0aGUgY2xvY2sgcmVxdWVzdCB0aW1lIHRvIGJlIHJlZl9jbGtfc2V0dGxpbmdfdGltZSAtCi0JICogMW1zID0gNG1zCi0JICovCi0JaWYgKGluaXRfZGF0YSA+IDB4MjEpCi0JCXRtcCA9IGluaXRfZGF0YSAtIDB4MjE7Ci0JZWxzZQotCQl0bXAgPSAwOwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQ0xLX1JFUV9USU1FLCB0bXApOwotCi0JLyogc2V0IEJCIFBMTCBjb25maWd1cmF0aW9ucyBpbiBSRiBBRkUgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4Y2MsIDB4NEI1KTsKLQotCS8qIHNldCBSRl9BRkVfUkVHXzUgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZDQsIDB4NTApOwotCi0JLyogc2V0IFJGX0FGRV9DVFJMX1JFR18yICovCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCAweDAwMzA1OTQ4LCAweDExYzAwMSk7Ci0KLQkvKgotCSAqIGNoYW5nZSBSRiBQTEwgYW5kIEJCIFBMTCBkaXZpZGVyIGZvciBWQ08gY2xvY2sgYW5kIGFkanVzdCBWQ08KLQkgKiBiYWlzIGN1cnJlbnQoUkZfQUZFX1JFR18xMykKLQkgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZjQsIDB4MWUpOwotCi0JLyogc2V0IEJCIFBMTCBjb25maWd1cmF0aW9ucyAqLwotCXRtcCA9IExVVFtyZWZfZnJlcV1bTFVUX1BBUkFNX0lOVEVHRVJfRElWSURFUl0gfCAweDAwMDE3MDAwOwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNTg0MCwgdG1wKTsKLQotCS8qIHNldCBmcmFjdGlvbmFsIGRpdmlkZXIgYWNjb3JkaW5nIHRvIEFwcGVuZGl4IEMtQkIgUExMCi0JICogQ2FsY3VsYXRpb25zCi0JICovCi0JdG1wID0gTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fRlJBQ1RJT05BTF9ESVZJREVSXTsKLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NDQsIHRtcCk7Ci0KLQkvKiBzZXQgdGhlIGluaXRpYWwgZGF0YSBmb3IgdGhlIHNpZ21hIGRlbHRhICovCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCAweDAwMzA1ODQ4LCAweDMwMzkpOwotCi0JLyoKLQkgKiBzZXQgdGhlIGFjY3VtdWxhdG9yIGF0dGVudWF0aW9uIHZhbHVlLCBjYWxpYnJhdGlvbiBsb29wMQotCSAqIChhbHBoYSksIGNhbGlicmF0aW9uIGxvb3AyIChiZXRhKSwgY2FsaWJyYXRpb24gbG9vcDMgKGdhbW1hKSBhbmQKLQkgKiB0aGUgVkNPIGdhaW4KLQkgKi8KLQl0bXAgPSAoTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fQVRUTl9CQl0gPDwgMTYpIHwKLQkJKExVVFtyZWZfZnJlcV1bTFVUX1BBUkFNX0FMUEhBX0JCXSA8PCAxMikgfCAweDE7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCAweDAwMzA1ODU0LCB0bXApOwotCi0JLyoKLQkgKiBzZXQgdGhlIGNhbGlicmF0aW9uIHN0b3AgdGltZSBhZnRlciBob2xkb2ZmIHRpbWUgZXhwaXJlcyBhbmQgc2V0Ci0JICogc2V0dGxpbmcgdGltZSBIT0xEX09GRl9USU1FX0JCCi0JICovCi0JdG1wID0gTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fU1RPUF9USU1FX0JCXSB8IDB4MDAwQTAwMDA7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCAweDAwMzA1ODU4LCB0bXApOwotCi0JLyoKLQkgKiBzZXQgQkIgUExMIExvb3AgZmlsdGVyIGNhcGFjaXRvcjMtIEJCX0MzWzI6MF0gYW5kIHNldCBCQiBQTEwKLQkgKiBjb25zdGFudCBsZWFrYWdlIGN1cnJlbnQgdG8gbGluZWFyaXplIFBGRCB0byAwdUEgLQotCSAqIEJCX0lMT09QRls3OjNdCi0JICovCi0JdG1wID0gTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fQkJfUExMX0xPT1BfRklMVEVSXSB8IDB4MDAwMDAwMzA7Ci0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCAweDAwMzA1OGY4LCB0bXApOwotCi0JLyoKLQkgKiBzZXQgcmVndWxhdG9yIG91dHB1dCB2b2x0YWdlIGZvciBuIGRpdmlkZXIgdG8KLQkgKiAxLjM1LUJCX1JFRkRJVlsxOjBdLCBzZXQgY2hhcmdlIHB1bXAgY3VycmVudC0gQkJfQ1BHQUlOWzQ6Ml0sCi0JICogc2V0IEJCIFBMTCBMb29wIGZpbHRlciBjYXBhY2l0b3IyLSBCQl9DMls3OjVdLCBzZXQgZ2FpbiBvZiBCQgotCSAqIFBMTCBhdXRvLWNhbGwgdG8gbm9ybWFsIG1vZGUtIEJCX0NBTEdBSU5fM0RCWzhdCi0JICovCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCAweDAwMzA1OGYwLCAweDI5KTsKLQotCS8qIGVuYWJsZSByZXN0YXJ0IHdha2V1cCBzZXF1ZW5jZSAoRUxQX0NNRFswXSkgKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEVMUF9DTUQsIGVscF9jbWQgfCAweDEpOwotCi0JLyogcmVzdGFydCBzZXF1ZW5jZSBjb21wbGV0ZWQgKi8KLQl1ZGVsYXkoMjAwMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9ib290X3J1bl9maXJtd2FyZShzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgbG9vcCwgcmV0OwotCXUzMiBjaGlwX2lkLCBpbnRlcnJ1cHQ7Ci0KLQl3bC0+Y2hpcC5vcF9zZXRfZWNwdV9jdHJsKHdsLCBFQ1BVX0NPTlRST0xfSEFMVCk7Ci0KLQljaGlwX2lkID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIENISVBfSURfQik7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgYWZ0ZXIgZmlybXdhcmUgYm9vdDogMHgleCIsIGNoaXBfaWQpOwotCi0JaWYgKGNoaXBfaWQgIT0gd2wtPmNoaXAuaWQpIHsKLQkJd2wxMnh4X2Vycm9yKCJjaGlwIGlkIGRvZXNuJ3QgbWF0Y2ggYWZ0ZXIgZmlybXdhcmUgYm9vdCIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiB3YWl0IGZvciBpbml0IHRvIGNvbXBsZXRlICovCi0JbG9vcCA9IDA7Ci0Jd2hpbGUgKGxvb3ArKyA8IElOSVRfTE9PUCkgewotCQl1ZGVsYXkoSU5JVF9MT09QX0RFTEFZKTsKLQkJaW50ZXJydXB0ID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKLQotCQlpZiAoaW50ZXJydXB0ID09IDB4ZmZmZmZmZmYpIHsKLQkJCXdsMTJ4eF9lcnJvcigiZXJyb3IgcmVhZGluZyBoYXJkd2FyZSBjb21wbGV0ZSAiCi0JCQkJICAgICAiaW5pdCBpbmRpY2F0aW9uIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQkvKiBjaGVjayB0aGF0IEFDWF9JTlRSX0lOSVRfQ09NUExFVEUgaXMgZW5hYmxlZCAqLwotCQllbHNlIGlmIChpbnRlcnJ1cHQgJiB3bC0+Y2hpcC5pbnRyX2luaXRfY29tcGxldGUpIHsKLQkJCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQUNLLAotCQkJCQkgICB3bC0+Y2hpcC5pbnRyX2luaXRfY29tcGxldGUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAobG9vcCA+PSBJTklUX0xPT1ApIHsKLQkJd2wxMnh4X2Vycm9yKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHRoZSBoYXJkd2FyZSB0byAiCi0JCQkgICAgICJjb21wbGV0ZSBpbml0aWFsaXphdGlvbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGNvbW1hbmQgbWFpbCBib3ggKi8KLQl3bC0+Y21kX2JveF9hZGRyID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIFJFR19DT01NQU5EX01BSUxCT1hfUFRSKTsKLQotCS8qIGdldCBoYXJkd2FyZSBjb25maWcgZXZlbnQgbWFpbCBib3ggKi8KLQl3bC0+ZXZlbnRfYm94X2FkZHIgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKLQotCS8qIHNldCB0aGUgd29ya2luZyBwYXJ0aXRpb24gdG8gaXRzICJydW5uaW5nIiBtb2RlIG9mZnNldCAqLwotCXdsMTJ4eF9zZXRfcGFydGl0aW9uKHdsLAotCQkJICAgICB3bC0+Y2hpcC5wX3RhYmxlW1BBUlRfV09SS10ubWVtLnN0YXJ0LAotCQkJICAgICB3bC0+Y2hpcC5wX3RhYmxlW1BBUlRfV09SS10ubWVtLnNpemUsCi0JCQkgICAgIHdsLT5jaGlwLnBfdGFibGVbUEFSVF9XT1JLXS5yZWcuc3RhcnQsCi0JCQkgICAgIHdsLT5jaGlwLnBfdGFibGVbUEFSVF9XT1JLXS5yZWcuc2l6ZSk7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfTUFJTEJPWCwgImNtZF9ib3hfYWRkciAweCV4IGV2ZW50X2JveF9hZGRyIDB4JXgiLAotCQkgICAgIHdsLT5jbWRfYm94X2FkZHIsIHdsLT5ldmVudF9ib3hfYWRkcik7Ci0KLQkvKgotCSAqIGluIGNhc2Ugb2YgZnVsbCBhc3luY2hyb25vdXMgbW9kZSB0aGUgZmlybXdhcmUgZXZlbnQgbXVzdCBiZQotCSAqIHJlYWR5IHRvIHJlY2VpdmUgZXZlbnQgZnJvbSB0aGUgY29tbWFuZCBtYWlsYm94Ci0JICovCi0KLQkvKiBlbmFibGUgZ3BpbyBpbnRlcnJ1cHRzICovCi0Jd2wxMnh4X2Jvb3RfZW5hYmxlX2ludGVycnVwdHMod2wpOwotCi0Jd2wtPmNoaXAub3BfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzKHdsKTsKLQotCS8qIHVubWFzayBhbGwgbWJveCBldmVudHMgICovCi0Jd2wtPmV2ZW50X21hc2sgPSAweGZmZmZmZmZmOwotCi0JcmV0ID0gd2wxMnh4X2V2ZW50X3VubWFzayh3bCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJFVkVOVCBtYXNrIHNldHRpbmcgZmFpbGVkIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jd2wxMnh4X2V2ZW50X21ib3hfY29uZmlnKHdsKTsKLQotCS8qIGZpcm13YXJlIHN0YXJ0dXAgY29tcGxldGVkICovCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2FiNjAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUzICswLDAgQEAKLSNpbmNsdWRlICJjbWQuaCIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0KLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJwcy5oIgotCi1pbnQgd2wxMnh4X2NtZF9zZW5kKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgdHlwZSwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbikKLXsKLQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgY21kOwotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlzaXplX3QgY21kX2xlbjsKLQl1MzIgaW50cjsKLQlpbnQgcmV0ID0gMDsKLQotCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0JY21kLmlkID0gdHlwZTsKLQljbWQuc3RhdHVzID0gMDsKLQltZW1jcHkoY21kLnBhcmFtZXRlcnMsIGJ1ZiwgYnVmX2xlbik7Ci0JY21kX2xlbiA9IEFMSUdOKGJ1Zl9sZW4sIDQpICsgQ01ETUJPWF9IRUFERVJfTEVOOwotCi0Jd2wxMnh4X3BzX2VscF93YWtldXAod2wpOwotCi0Jd2wxMnh4X3NwaV9tZW1fd3JpdGUod2wsIHdsLT5jbWRfYm94X2FkZHIsICZjbWQsIGNtZF9sZW4pOwotCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfQ01EKTsKLQotCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhXTDEyWFhfQ09NTUFORF9USU1FT1VUKTsKLQotCWludHIgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwotCXdoaWxlICghKGludHIgJiB3bC0+Y2hpcC5pbnRyX2NtZF9jb21wbGV0ZSkpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCXdsMTJ4eF9lcnJvcigiY29tbWFuZCBjb21wbGV0ZSB0aW1lb3V0Iik7Ci0JCQlyZXQgPSAtRVRJTUVET1VUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQltc2xlZXAoMSk7Ci0KLQkJaW50ciA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUik7Ci0JfQotCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCi0JCQkgICB3bC0+Y2hpcC5pbnRyX2NtZF9jb21wbGV0ZSk7Ci0KLW91dDoKLQl3bDEyeHhfcHNfZWxwX3NsZWVwKHdsKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCB3bDEyeHhfY21kX3Rlc3Qoc3RydWN0IHdsMTJ4eCAqd2wsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHU4IGFuc3dlcikKLXsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0NNRCwgImNtZCB0ZXN0Iik7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3NlbmQod2wsIENNRF9URVNULCBidWYsIGJ1Zl9sZW4pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJURVNUIGNvbW1hbmQgZmFpbGVkIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGFuc3dlcikgewotCQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgKmNtZF9hbnN3ZXI7Ci0KLQkJLyoKLQkJICogVGhlIHRlc3QgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiByZWFkIHRoZSBhbnN3ZXIuCi0JCSAqIFRoZSBhbnN3ZXIgd291bGQgYmUgYSB3bDEyeHhfY29tbWFuZCwgd2hlcmUgdGhlCi0JCSAqIHBhcmFtZXRlciBhcnJheSBjb250YWlucyB0aGUgYWN0dWFsIGFuc3dlci4KLQkJICovCi0KLQkJd2wxMnh4X3BzX2VscF93YWtldXAod2wpOwotCi0JCXdsMTJ4eF9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgYnVmX2xlbik7Ci0KLQkJd2wxMnh4X3BzX2VscF9zbGVlcCh3bCk7Ci0KLQkJY21kX2Fuc3dlciA9IGJ1ZjsKLQkJaWYgKGNtZF9hbnN3ZXItPnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCi0JCQl3bDEyeHhfZXJyb3IoIlRFU1QgY29tbWFuZCBhbnN3ZXIgZXJyb3I6ICVkIiwKLQkJCQkgICAgIGNtZF9hbnN3ZXItPnN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IHdsMTJ4eF9jbWRfaW50ZXJyb2dhdGUoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBpZV9pZCwgdTE2IGllX2xlbiwKLQkJCSAgIHZvaWQgKmFuc3dlcikKLXsKLQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgKmNtZDsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgaW50ZXJyb2dhdGUiKTsKLQotCWhlYWRlci5pZCA9IGllX2lkOwotCWhlYWRlci5sZW4gPSBpZV9sZW4gLSBzaXplb2YoaGVhZGVyKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX0lOVEVSUk9HQVRFLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJJTlRFUlJPR0FURSBjb21tYW5kIGZhaWxlZCIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsMTJ4eF9wc19lbHBfd2FrZXVwKHdsKTsKLQotCS8qIHRoZSBpbnRlcnJvZ2F0ZSBjb21tYW5kIGdvdCBpbiwgd2UgY2FuIHJlYWQgdGhlIGFuc3dlciAqLwotCXdsMTJ4eF9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGFuc3dlciwKLQkJCSAgICBDTURNQk9YX0hFQURFUl9MRU4gKyBpZV9sZW4pOwotCi0Jd2wxMnh4X3BzX2VscF9zbGVlcCh3bCk7Ci0KLQljbWQgPSBhbnN3ZXI7Ci0JaWYgKGNtZC0+c3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykKLQkJd2wxMnh4X2Vycm9yKCJJTlRFUlJPR0FURSBjb21tYW5kIGVycm9yOiAlZCIsCi0JCQkgICAgIGNtZC0+c3RhdHVzKTsKLQotCXJldHVybiAwOwotCi19Ci0KLWludCB3bDEyeHhfY21kX2NvbmZpZ3VyZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdm9pZCAqaWUsIGludCBpZV9sZW4pCi17Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgY29uZmlndXJlIik7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3NlbmQod2wsIENNRF9DT05GSUdVUkUsIGllLAotCQkJICAgICAgaWVfbGVuKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiQ09ORklHVVJFIGNvbW1hbmQgTk9LIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLX0KLQotaW50IHdsMTJ4eF9jbWRfdmJtKHN0cnVjdCB3bDEyeHggKndsLCB1OCBpZGVudGl0eSwKLQkJICAgdm9pZCAqYml0bWFwLCB1MTYgYml0bWFwX2xlbiwgdTggYml0bWFwX2NvbnRyb2wpCi17Ci0Jc3RydWN0IHZibV91cGRhdGVfcmVxdWVzdCB2Ym07Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdmJtIik7Ci0KLQkvKiBDb3VudCBhbmQgcGVyaW9kIHdpbGwgYmUgZmlsbGVkIGJ5IHRoZSB0YXJnZXQgKi8KLQl2Ym0udGltLmJpdG1hcF9jdHJsID0gYml0bWFwX2NvbnRyb2w7Ci0JaWYgKGJpdG1hcF9sZW4gPiBQQVJUSUFMX1ZCTV9NQVgpIHsKLQkJd2wxMnh4X3dhcm5pbmcoImNtZCB2Ym0gbGVuIGlzICVkIEIsIHRydW5jYXRpbmcgdG8gJWQiLAotCQkJICAgICAgIGJpdG1hcF9sZW4sIFBBUlRJQUxfVkJNX01BWCk7Ci0JCWJpdG1hcF9sZW4gPSBQQVJUSUFMX1ZCTV9NQVg7Ci0JfQotCW1lbWNweSh2Ym0udGltLnB2Yl9maWVsZCwgYml0bWFwLCBiaXRtYXBfbGVuKTsKLQl2Ym0udGltLmlkZW50aXR5ID0gaWRlbnRpdHk7Ci0JdmJtLnRpbS5sZW5ndGggPSBiaXRtYXBfbGVuICsgMzsKLQotCXZibS5sZW4gPSBjcHVfdG9fbGUxNihiaXRtYXBfbGVuICsgNSk7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3NlbmQod2wsIENNRF9WQk0sICZ2Ym0sIHNpemVvZih2Ym0pKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIlZCTSBjb21tYW5kIGZhaWxlZCIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGNoYW5uZWwsIHU4IGVuYWJsZSkKLXsKLQlpbnQgcmV0OwotCXUxNiBjbWRfcngsIGNtZF90eDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgZGF0YSBwYXRoIik7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCWNtZF9yeCA9IENNRF9FTkFCTEVfUlg7Ci0JCWNtZF90eCA9IENNRF9FTkFCTEVfVFg7Ci0JfSBlbHNlIHsKLQkJY21kX3J4ID0gQ01EX0RJU0FCTEVfUlg7Ci0JCWNtZF90eCA9IENNRF9ESVNBQkxFX1RYOwotCX0KLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgY21kX3J4LCAmY2hhbm5lbCwgc2l6ZW9mKGNoYW5uZWwpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoInJ4ICVzIGNtZCBmb3IgY2hhbm5lbCAlZCBmYWlsZWQiLAotCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgInJ4ICVzIGNtZCBjaGFubmVsICVkIiwKLQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgY21kX3R4LCAmY2hhbm5lbCwgc2l6ZW9mKGNoYW5uZWwpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoInR4ICVzIGNtZCBmb3IgY2hhbm5lbCAlZCBmYWlsZWQiLAotCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgInR4ICVzIGNtZCBjaGFubmVsICVkIiwKLQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2NtZF9qb2luKHN0cnVjdCB3bDEyeHggKndsLCB1OCBic3NfdHlwZSwgdTggZHRpbV9pbnRlcnZhbCwKLQkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IHdhaXQpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCXN0cnVjdCBjbWRfam9pbiBqb2luID0ge307Ci0JaW50IHJldCwgaTsKLQl1OCAqYnNzaWQ7Ci0KLQkvKiBGSVhNRTogdGhpcyBzaG91bGQgYmUgaW4gbWFpbi5jICovCi0JcmV0ID0gd2wxMnh4X2FjeF9mcmFtZV9yYXRlcyh3bCwgREVGQVVMVF9IV19HRU5fVFhfUkFURSwKLQkJCQkgICAgIERFRkFVTFRfSFdfR0VOX01PRFVMQVRJT05fVFlQRSwKLQkJCQkgICAgIHdsLT50eF9tZ210X2ZybV9yYXRlLAotCQkJCSAgICAgd2wtPnR4X21nbXRfZnJtX21vZCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQ01ELCAiY21kIGpvaW4iKTsKLQotCS8qIFJldmVyc2Ugb3JkZXIgQlNTSUQgKi8KLQlic3NpZCA9ICh1OCAqKSZqb2luLmJzc2lkX2xzYjsKLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKLQkJYnNzaWRbaV0gPSB3bC0+YnNzaWRbRVRIX0FMRU4gLSBpIC0gMV07Ci0KLQlqb2luLnJ4X2NvbmZpZ19vcHRpb25zID0gd2wtPnJ4X2NvbmZpZzsKLQlqb2luLnJ4X2ZpbHRlcl9vcHRpb25zID0gd2wtPnJ4X2ZpbHRlcjsKLQotCWpvaW4uYmFzaWNfcmF0ZV9zZXQgPSBSQVRFX01BU0tfMU1CUFMgfCBSQVRFX01BU0tfMk1CUFMgfAotCQlSQVRFX01BU0tfNV81TUJQUyB8IFJBVEVfTUFTS18xMU1CUFM7Ci0KLQlqb2luLmJlYWNvbl9pbnRlcnZhbCA9IGJlYWNvbl9pbnRlcnZhbDsKLQlqb2luLmR0aW1faW50ZXJ2YWwgPSBkdGltX2ludGVydmFsOwotCWpvaW4uYnNzX3R5cGUgPSBic3NfdHlwZTsKLQlqb2luLmNoYW5uZWwgPSB3bC0+Y2hhbm5lbDsKLQlqb2luLmN0cmwgPSBKT0lOX0NNRF9DVFJMX1RYX0ZMVVNIOwotCi0JcmV0ID0gd2wxMnh4X2NtZF9zZW5kKHdsLCBDTURfU1RBUlRfSk9JTiwgJmpvaW4sIHNpemVvZihqb2luKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJmYWlsZWQgdG8gaW5pdGlhdGUgY21kIGpvaW4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhKT0lOX1RJTUVPVVQpOwotCi0JLyoKLQkgKiB1Z2x5IGhhY2s6IHdlIHNob3VsZCB3YWl0IGZvciBKT0lOX0VWRU5UX0NPTVBMRVRFX0lEIGJ1dCB0bwotCSAqIHNpbXBsaWZ5IGxvY2tpbmcgd2UganVzdCBzbGVlcCBpbnN0ZWFkLCBmb3Igbm93Ci0JICovCi0JaWYgKHdhaXQpCi0JCW1zbGVlcCgxMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggcHNfbW9kZSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBhY3hfcHNfcGFyYW1zIHBzX3BhcmFtczsKLQotCS8qIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBpbiBwcy5jICovCi0JcmV0ID0gd2wxMnh4X2FjeF93YWtlX3VwX2NvbmRpdGlvbnMod2wsIHdsLT5saXN0ZW5faW50KTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIkNvdWxkbnQgc2V0IHdha2UgdXAgY29uZGl0aW9ucyIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgc2V0IHBzIG1vZGUiKTsKLQotCXBzX3BhcmFtcy5wc19tb2RlID0gcHNfbW9kZTsKLQlwc19wYXJhbXMuc2VuZF9udWxsX2RhdGEgPSAxOwotCXBzX3BhcmFtcy5yZXRyaWVzID0gNTsKLQlwc19wYXJhbXMuaGFuZ19vdmVyX3BlcmlvZCA9IDEyODsKLQlwc19wYXJhbXMubnVsbF9kYXRhX3JhdGUgPSAxOyAvKiAxIE1icHMgKi8KLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX1NFVF9QU19NT0RFLCAmcHNfcGFyYW1zLAotCQkJICAgICAgc2l6ZW9mKHBzX3BhcmFtcykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiY21kIHNldF9wc19tb2RlIGZhaWxlZCIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGFkZHIsIHUzMiBsZW4sIHZvaWQgKmFuc3dlcikKLXsKLQlzdHJ1Y3QgY21kX3JlYWRfd3JpdGVfbWVtb3J5IG1lbV9jbWQsICptZW1fYW5zd2VyOwotCXN0cnVjdCB3bDEyeHhfY29tbWFuZCBjbWQ7Ci0JaW50IHJldDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DTUQsICJjbWQgcmVhZCBtZW1vcnkiKTsKLQotCW1lbXNldCgmbWVtX2NtZCwgMCwgc2l6ZW9mKG1lbV9jbWQpKTsKLQltZW1fY21kLmFkZHIgPSBhZGRyOwotCW1lbV9jbWQuc2l6ZSA9IGxlbjsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX1JFQURfTUVNT1JZLCAmbWVtX2NtZCwgc2l6ZW9mKG1lbV9jbWQpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoInJlYWQgbWVtb3J5IGNvbW1hbmQgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogdGhlIHJlYWQgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiBub3cgcmVhZCB0aGUgYW5zd2VyICovCi0Jd2wxMnh4X3NwaV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgJmNtZCwKLQkJCSAgICBDTURNQk9YX0hFQURFUl9MRU4gKyBzaXplb2YobWVtX2NtZCkpOwotCi0JaWYgKGNtZC5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKQotCQl3bDEyeHhfZXJyb3IoImVycm9yIGluIHJlYWQgY29tbWFuZCByZXN1bHQ6ICVkIiwgY21kLnN0YXR1cyk7Ci0KLQltZW1fYW5zd2VyID0gKHN0cnVjdCBjbWRfcmVhZF93cml0ZV9tZW1vcnkgKikgY21kLnBhcmFtZXRlcnM7Ci0JbWVtY3B5KGFuc3dlciwgbWVtX2Fuc3dlci0+dmFsdWUsIGxlbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9jbWRfdGVtcGxhdGVfc2V0KHN0cnVjdCB3bDEyeHggKndsLCB1MTYgY21kX2lkLAotCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCi17Ci0Jc3RydWN0IHdsMTJ4eF9jbWRfcGFja2V0X3RlbXBsYXRlIHRlbXBsYXRlOwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQ01ELCAiY21kIHRlbXBsYXRlICVkIiwgY21kX2lkKTsKLQotCW1lbXNldCgmdGVtcGxhdGUsIDAsIHNpemVvZih0ZW1wbGF0ZSkpOwotCi0JV0FSTl9PTihidWZfbGVuID4gV0wxMlhYX01BWF9URU1QTEFURV9TSVpFKTsKLQlidWZfbGVuID0gbWluX3Qoc2l6ZV90LCBidWZfbGVuLCBXTDEyWFhfTUFYX1RFTVBMQVRFX1NJWkUpOwotCXRlbXBsYXRlLnNpemUgPSBjcHVfdG9fbGUxNihidWZfbGVuKTsKLQotCWlmIChidWYpCi0JCW1lbWNweSh0ZW1wbGF0ZS50ZW1wbGF0ZSwgYnVmLCBidWZfbGVuKTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgY21kX2lkLCAmdGVtcGxhdGUsCi0JCQkgICAgICBzaXplb2YodGVtcGxhdGUuc2l6ZSkgKyBidWZfbGVuKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfd2FybmluZygiY21kIHNldF90ZW1wbGF0ZSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NTI5Y2EuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAic3BpLmgiCi0jaW5jbHVkZSAiZXZlbnQuaCIKLSNpbmNsdWRlICJwcy5oIgotCi1zdGF0aWMgaW50IHdsMTJ4eF9ldmVudF9zY2FuX2NvbXBsZXRlKHN0cnVjdCB3bDEyeHggKndsLAotCQkJCSAgICAgIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQotewotCXdsMTJ4eF9kZWJ1ZyhERUJVR19FVkVOVCwgInN0YXR1czogMHgleCwgY2hhbm5lbHM6ICVkIiwKLQkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9zdGF0dXMsCi0JCSAgICAgbWJveC0+c2NoZWR1bGVkX3NjYW5fY2hhbm5lbHMpOwotCi0JaWYgKHdsLT5zY2FubmluZykgewotCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci0JCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCh3bC0+aHcsIGZhbHNlKTsKLQkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQkJd2wtPnNjYW5uaW5nID0gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9ldmVudF9tYm94X2R1bXAoc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCi17Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0VWRU5ULCAiTUJPWCBEVU1QOiIpOwotCXdsMTJ4eF9kZWJ1ZyhERUJVR19FVkVOVCwgIlx0dmVjdG9yOiAweCV4IiwgbWJveC0+ZXZlbnRzX3ZlY3Rvcik7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0VWRU5ULCAiXHRtYXNrOiAweCV4IiwgbWJveC0+ZXZlbnRzX21hc2spOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9ldmVudF9wcm9jZXNzKHN0cnVjdCB3bDEyeHggKndsLCBzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKLXsKLQlpbnQgcmV0OwotCXUzMiB2ZWN0b3I7Ci0KLQl3bDEyeHhfZXZlbnRfbWJveF9kdW1wKG1ib3gpOwotCi0JdmVjdG9yID0gbWJveC0+ZXZlbnRzX3ZlY3RvciAmIH4obWJveC0+ZXZlbnRzX21hc2spOwotCXdsMTJ4eF9kZWJ1ZyhERUJVR19FVkVOVCwgInZlY3RvcjogMHgleCIsIHZlY3Rvcik7Ci0KLQlpZiAodmVjdG9yICYgU0NBTl9DT01QTEVURV9FVkVOVF9JRCkgewotCQlyZXQgPSB3bDEyeHhfZXZlbnRfc2Nhbl9jb21wbGV0ZSh3bCwgbWJveCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAodmVjdG9yICYgQlNTX0xPU0VfRVZFTlRfSUQpIHsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX0VWRU5ULCAiQlNTX0xPU0VfRVZFTlQiKTsKLQotCQlpZiAod2wtPnBzbV9yZXF1ZXN0ZWQgJiYgd2wtPnBzbSkgewotCQkJcmV0ID0gd2wxMnh4X3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9ldmVudF91bm1hc2soc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfZXZlbnRfbWJveF9tYXNrKHdsLCB+KHdsLT5ldmVudF9tYXNrKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB3bDEyeHhfZXZlbnRfbWJveF9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jd2wtPm1ib3hfcHRyWzBdID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7Ci0Jd2wtPm1ib3hfcHRyWzFdID0gd2wtPm1ib3hfcHRyWzBdICsgc2l6ZW9mKHN0cnVjdCBldmVudF9tYWlsYm94KTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19FVkVOVCwgIk1CT1ggcHRyczogMHgleCAweCV4IiwKLQkJICAgICB3bC0+bWJveF9wdHJbMF0sIHdsLT5tYm94X3B0clsxXSk7Ci19Ci0KLWludCB3bDEyeHhfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyeHggKndsLCB1OCBtYm94X251bSkKLXsKLQlzdHJ1Y3QgZXZlbnRfbWFpbGJveCBtYm94OwotCWludCByZXQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfRVZFTlQsICJFVkVOVCBvbiBtYm94ICVkIiwgbWJveF9udW0pOwotCi0JaWYgKG1ib3hfbnVtID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBmaXJzdCB3ZSByZWFkIHRoZSBtYm94IGRlc2NyaXB0b3IgKi8KLQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCB3bC0+bWJveF9wdHJbbWJveF9udW1dLCAmbWJveCwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpKTsKLQotCS8qIHByb2Nlc3MgdGhlIGRlc2NyaXB0b3IgKi8KLQlyZXQgPSB3bDEyeHhfZXZlbnRfcHJvY2Vzcyh3bCwgJm1ib3gpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogdGhlbiB3ZSBsZXQgdGhlIGZpcm13YXJlIGtub3cgaXQgY2FuIGdvIG9uLi4uKi8KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsIElOVFJfVFJJR19FVkVOVF9BQ0spOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE1NzNhNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvaW5pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjAwICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgImluaXQuaCIKLSNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKLSNpbmNsdWRlICJhY3guaCIKLSNpbmNsdWRlICJjbWQuaCIKLQotaW50IHdsMTJ4eF9od19pbml0X2h3ZW5jX2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9mZWF0dXJlX2NmZyh3bCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImNvdWxkbid0IHNldCBmZWF0dXJlIGNvbmZpZyIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IHdsMTJ4eF9hY3hfZGVmYXVsdF9rZXkod2wsIHdsLT5kZWZhdWx0X2tleSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X3dhcm5pbmcoImNvdWxkbid0IHNldCBkZWZhdWx0IGtleSIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2h3X2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCXU4IHBhcnRpYWxfdmJtW1BBUlRJQUxfVkJNX01BWF07Ci0KLQkvKiBzZW5kIGVtcHR5IHRlbXBsYXRlcyBmb3IgZncgbWVtb3J5IHJlc2VydmF0aW9uICovCi0JcmV0ID0gd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVEsIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVxX3RlbXBsYXRlKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX05VTExfREFUQSwgTlVMTCwKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFNfUE9MTCwgTlVMTCwKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlKSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1FPU19OVUxMX0RBVEEsIE5VTEwsCi0JCQkJICAgICAgc2l6ZW9mCi0JCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcW9zX251bGxfZGF0YV90ZW1wbGF0ZSkpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVNQLCBOVUxMLAotCQkJCSAgICAgIHNpemVvZgotCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X3Byb2JlX3Jlc3BfdGVtcGxhdGUpKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBOVUxMLAotCQkJCSAgICAgIHNpemVvZgotCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X2JlYWNvbl90ZW1wbGF0ZSkpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogdGltIHRlbXBsYXRlcywgZmlyc3QgcmVzZXJ2ZSBzcGFjZSB0aGVuIGFsbG9jYXRlIGFuIGVtcHR5IG9uZSAqLwotCW1lbXNldChwYXJ0aWFsX3ZibSwgMCwgUEFSVElBTF9WQk1fTUFYKTsKLQlyZXQgPSB3bDEyeHhfY21kX3ZibSh3bCwgVElNX0VMRV9JRCwgcGFydGlhbF92Ym0sIFBBUlRJQUxfVkJNX01BWCwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX3ZibSh3bCwgVElNX0VMRV9JRCwgcGFydGlhbF92Ym0sIDEsIDApOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfaHdfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfcnhfbXNkdV9saWZlX3RpbWUod2wsIFJYX01TRFVfTElGRVRJTUVfREVGKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfcnhfY29uZmlnKHdsLCBjb25maWcsIGZpbHRlcik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9od19pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfcGRfdGhyZXNob2xkKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfc2xvdCh3bCwgREVGQVVMVF9TTE9UX1RJTUUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9ncm91cF9hZGRyZXNzX3RibCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9ydHNfdGhyZXNob2xkKHdsLCBSVFNfVEhSRVNIT0xEX0RFRik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9od19pbml0X2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfYmVhY29uX2ZpbHRlcl9vcHQod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgd2wxMnh4X2h3X2luaXRfcHRhKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X3NnX2VuYWJsZSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X3NnX2NmZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9od19pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfY2NhX3RocmVzaG9sZCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9od19pbml0X2JlYWNvbl9icm9hZGNhc3Qoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfYmNuX2R0aW1fb3B0aW9ucyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9od19pbml0X3Bvd2VyX2F1dGgoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JcmV0dXJuIHdsMTJ4eF9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMlhYX1BTTV9DQU0pOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9pbml0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YjZjZDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2luaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19XTDEyWFhfSU5JVF9IX18KLSNkZWZpbmUgX19XTDEyWFhfSU5JVF9IX18KLQotI2luY2x1ZGUgIndsMTJ4eC5oIgotCi1pbnQgd2wxMnh4X2h3X2luaXRfaHdlbmNfY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfaHdfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfaHdfaW5pdF9tZW1fY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfaHdfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpOwotaW50IHdsMTJ4eF9od19pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9od19pbml0X2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9od19pbml0X3B0YShzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2h3X2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2h3X2luaXRfYmVhY29uX2Jyb2FkY2FzdChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2h3X2luaXRfcG93ZXJfYXV0aChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwM2Q2MTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEzNTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3dsMTJ4eC5oPgotCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0jaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAid2wxMjUxLmgiCi0jaW5jbHVkZSAic3BpLmgiCi0jaW5jbHVkZSAiZXZlbnQuaCIKLSNpbmNsdWRlICJ0eC5oIgotI2luY2x1ZGUgInJ4LmgiCi0jaW5jbHVkZSAicHMuaCIKLSNpbmNsdWRlICJpbml0LmgiCi0jaW5jbHVkZSAiZGVidWdmcy5oIgotCi1zdGF0aWMgdm9pZCB3bDEyeHhfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyeHggKndsKQotewotCWRpc2FibGVfaXJxKHdsLT5pcnEpOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfcG93ZXJfb2ZmKHN0cnVjdCB3bDEyeHggKndsKQotewotCXdsLT5zZXRfcG93ZXIoZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfcG93ZXJfb24oc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jd2wtPnNldF9wb3dlcih0cnVlKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHdsMTJ4eF9pcnEoaW50IGlycSwgdm9pZCAqY29va2llKQotewotCXN0cnVjdCB3bDEyeHggKndsOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIklSUSIpOwotCi0Jd2wgPSBjb29raWU7Ci0KLQlzY2hlZHVsZV93b3JrKCZ3bC0+aXJxX3dvcmspOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9mZXRjaF9maXJtd2FyZShzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgd2wtPmNoaXAuZndfZmlsZW5hbWUsICZ3bC0+c3BpLT5kZXYpOwotCi0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJjb3VsZCBub3QgZ2V0IGZpcm13YXJlOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKGZ3LT5zaXplICUgNCkgewotCQl3bDEyeHhfZXJyb3IoImZpcm13YXJlIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDMyIGJpdHM6ICV6dSIsCi0JCQkgICAgIGZ3LT5zaXplKTsKLQkJcmV0ID0gLUVJTFNFUTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2wtPmZ3X2xlbiA9IGZ3LT5zaXplOwotCXdsLT5mdyA9IGttYWxsb2Mod2wtPmZ3X2xlbiwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXdsLT5mdykgewotCQl3bDEyeHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBmaXJtd2FyZSIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1jcHkod2wtPmZ3LCBmdy0+ZGF0YSwgd2wtPmZ3X2xlbik7Ci0KLQlyZXQgPSAwOwotCi1vdXQ6Ci0JcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9mZXRjaF9udnMoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIHdsLT5jaGlwLm52c19maWxlbmFtZSwgJndsLT5zcGktPmRldik7Ci0KLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoImNvdWxkIG5vdCBnZXQgbnZzIGZpbGU6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoZnctPnNpemUgJSA0KSB7Ci0JCXdsMTJ4eF9lcnJvcigibnZzIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDMyIGJpdHM6ICV6dSIsCi0JCQkgICAgIGZ3LT5zaXplKTsKLQkJcmV0ID0gLUVJTFNFUTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2wtPm52c19sZW4gPSBmdy0+c2l6ZTsKLQl3bC0+bnZzID0ga21hbGxvYyh3bC0+bnZzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXdsLT5udnMpIHsKLQkJd2wxMnh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHdsLT5udnMsIGZ3LT5kYXRhLCB3bC0+bnZzX2xlbik7Ci0KLQlyZXQgPSAwOwotCi1vdXQ6Ci0JcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfZndfd2FrZXVwKHN0cnVjdCB3bDEyeHggKndsKQotewotCXUzMiBlbHBfcmVnOwotCi0JZWxwX3JlZyA9IEVMUENUUkxfV0FLRV9VUDsKLQl3bDEyeHhfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBlbHBfcmVnKTsKLQllbHBfcmVnID0gd2wxMnh4X3JlYWQzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSKTsKLQotCWlmICghKGVscF9yZWcgJiBFTFBDVFJMX1dMQU5fUkVBRFkpKSB7Ci0JCXdsMTJ4eF93YXJuaW5nKCJXTEFOIG5vdCByZWFkeSIpOwotCQllbHBfcmVnID0gRUxQQ1RSTF9XQUtFX1VQX1dMQU5fUkVBRFk7Ci0JCXdsMTJ4eF93cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIGVscF9yZWcpOwotCX0KLX0KLQotc3RhdGljIGludCB3bDEyeHhfY2hpcF93YWtldXAoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQl3bDEyeHhfcG93ZXJfb24od2wpOwotCW1zbGVlcCh3bC0+Y2hpcC5wb3dlcl9vbl9zbGVlcCk7Ci0Jd2wxMnh4X3NwaV9yZXNldCh3bCk7Ci0Jd2wxMnh4X3NwaV9pbml0KHdsKTsKLQotCS8qIFdlIGRvbid0IG5lZWQgYSByZWFsIG1lbW9yeSBwYXJ0aXRpb24gaGVyZSwgYmVjYXVzZSB3ZSBvbmx5IHdhbnQKLQkgKiB0byB1c2UgdGhlIHJlZ2lzdGVycyBhdCB0aGlzIHBvaW50LiAqLwotCXdsMTJ4eF9zZXRfcGFydGl0aW9uKHdsLAotCQkJICAgICAweDAwMDAwMDAwLAotCQkJICAgICAweDAwMDAwMDAwLAotCQkJICAgICBSRUdJU1RFUlNfQkFTRSwKLQkJCSAgICAgUkVHSVNURVJTX0RPV05fU0laRSk7Ci0KLQkvKiBFTFAgbW9kdWxlIHdha2UgdXAgKi8KLQl3bDEyeHhfZndfd2FrZXVwKHdsKTsKLQotCS8qIHdoYWxfRndDdHJsX0Jvb3RTbSgpICovCi0KLQkvKiAwLiByZWFkIGNoaXAgaWQgZnJvbSBDSElQX0lEICovCi0Jd2wtPmNoaXAuaWQgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKLQotCS8qIDEuIGNoZWNrIGlmIGNoaXAgaWQgaXMgdmFsaWQgKi8KLQotCXN3aXRjaCAod2wtPmNoaXAuaWQpIHsKLQljYXNlIENISVBfSURfMTI1MV9QRzEyOgotCQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgMHgleCAoMTI1MSBQRzEyKSIsCi0JCQkgICAgIHdsLT5jaGlwLmlkKTsKLQotCQl3bDEyNTFfc2V0dXAod2wpOwotCi0JCWJyZWFrOwotCWNhc2UgQ0hJUF9JRF8xMjcxX1BHMTA6Ci0JY2FzZSBDSElQX0lEXzEyNTFfUEcxMDoKLQljYXNlIENISVBfSURfMTI1MV9QRzExOgotCWRlZmF1bHQ6Ci0JCXdsMTJ4eF9lcnJvcigidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHdsLT5mdyA9PSBOVUxMKSB7Ci0JCXJldCA9IHdsMTJ4eF9mZXRjaF9maXJtd2FyZSh3bCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JLyogTm8gTlZTIGZyb20gbmV0bGluaywgdHJ5IHRvIGdldCBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtICovCi0JaWYgKHdsLT5udnMgPT0gTlVMTCkgewotCQlyZXQgPSB3bDEyeHhfZmV0Y2hfbnZzKHdsKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfZmlsdGVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB3bDEyeHggKndsID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyeHgsIGZpbHRlcl93b3JrKTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmICh3bC0+c3RhdGUgPT0gV0wxMlhYX1NUQVRFX09GRikKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgMSwgMTAwLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7Ci19Ci0KLWludCB3bDEyeHhfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0KLQl3bDEyeHhfbm90aWNlKCJwb3dlciB1cCIpOwotCi0JaWYgKHdsLT5zdGF0ZSAhPSBXTDEyWFhfU1RBVEVfT0ZGKSB7Ci0JCXdsMTJ4eF9lcnJvcigiY2Fubm90IGdvIGludG8gUExUIHN0YXRlIGJlY2F1c2Ugbm90ICIKLQkJCSAgICAgImluIG9mZiBzdGF0ZTogJWQiLCB3bC0+c3RhdGUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXdsLT5zdGF0ZSA9IFdMMTJYWF9TVEFURV9QTFQ7Ci0KLQlyZXQgPSB3bDEyeHhfY2hpcF93YWtldXAod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gd2wtPmNoaXAub3BfYm9vdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQl3bDEyeHhfbm90aWNlKCJmaXJtd2FyZSBib290ZWQgaW4gUExUIG1vZGUgKCVzKSIsIHdsLT5jaGlwLmZ3X3Zlcik7Ci0KLQlyZXQgPSB3bC0+Y2hpcC5vcF9wbHRfaW5pdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHdsMTJ4eF9wbHRfc3RvcChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQl3bDEyeHhfbm90aWNlKCJwb3dlciBkb3duIik7Ci0KLQlpZiAod2wtPnN0YXRlICE9IFdMMTJYWF9TVEFURV9QTFQpIHsKLQkJd2wxMnh4X2Vycm9yKCJjYW5ub3QgcG93ZXIgZG93biBiZWNhdXNlIG5vdCBpbiBQTFQgIgotCQkJICAgICAic3RhdGU6ICVkIiwgd2wtPnN0YXRlKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQl3bDEyeHhfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKLQl3bDEyeHhfcG93ZXJfb2ZmKHdsKTsKLQotCXdsLT5zdGF0ZSA9IFdMMTJYWF9TVEFURV9PRkY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHdsMTJ4eF9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGh3LT5wcml2OwotCi0Jc2tiX3F1ZXVlX3RhaWwoJndsLT50eF9xdWV1ZSwgc2tiKTsKLQotCXNjaGVkdWxlX3dvcmsoJndsLT50eF93b3JrKTsKLQotCS8qCi0JICogVGhlIHdvcmtxdWV1ZSBpcyBzbG93IHRvIHByb2Nlc3MgdGhlIHR4X3F1ZXVlIGFuZCB3ZSBuZWVkIHN0b3AKLQkgKiB0aGUgcXVldWUgaGVyZSwgb3RoZXJ3aXNlIHRoZSBxdWV1ZSB3aWxsIGdldCB0b28gbG9uZy4KLQkgKi8KLQlpZiAoc2tiX3F1ZXVlX2xlbigmd2wtPnR4X3F1ZXVlKSA+PSBXTDEyWFhfVFhfUVVFVUVfTUFYX0xFTkdUSCkgewotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKLQotCQkvKgotCQkgKiBGSVhNRTogdGhpcyBpcyByYWN5LCB0aGUgdmFyaWFibGUgaXMgbm90IHByb3Blcmx5Ci0JCSAqIHByb3RlY3RlZC4gTWF5YmUgZml4IHRoaXMgYnkgcmVtb3ZpbmcgdGhlIHN0dXBpZAotCQkgKiB2YXJpYWJsZSBhbHRvZ2V0aGVyIGFuZCBjaGVja2luZyB0aGUgcmVhbCBxdWV1ZSBzdGF0ZT8KLQkJICovCi0JCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gTkVUREVWX1RYX09LOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGh3LT5wcml2OwotCWludCByZXQgPSAwOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RhcnQiKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQlpZiAod2wtPnN0YXRlICE9IFdMMTJYWF9TVEFURV9PRkYpIHsKLQkJd2wxMnh4X2Vycm9yKCJjYW5ub3Qgc3RhcnQgYmVjYXVzZSBub3QgaW4gb2ZmIHN0YXRlOiAlZCIsCi0JCQkgICAgIHdsLT5zdGF0ZSk7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X2NoaXBfd2FrZXVwKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHdsLT5jaGlwLm9wX2Jvb3Qod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHdsLT5jaGlwLm9wX2h3X2luaXQod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHdsMTJ4eF9hY3hfc3RhdGlvbl9pZCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0Jd2wtPnN0YXRlID0gV0wxMlhYX1NUQVRFX09OOwotCi0Jd2wxMnh4X2luZm8oImZpcm13YXJlIGJvb3RlZCAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKLQotb3V0OgotCWlmIChyZXQgPCAwKQotCQl3bDEyeHhfcG93ZXJfb2ZmKHdsKTsKLQotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCB3bDEyeHggKndsID0gaHctPnByaXY7Ci0KLQl3bDEyeHhfaW5mbygiZG93biIpOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RvcCIpOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTJYWF9TVEFURV9PTik7Ci0KLQlpZiAod2wtPnNjYW5uaW5nKSB7Ci0JCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgdHJ1ZSk7Ci0JCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0JCXdsLT5zY2FubmluZyA9IGZhbHNlOwotCX0KLQotCXdsLT5zdGF0ZSA9IFdMMTJYWF9TVEFURV9PRkY7Ci0KLQl3bDEyeHhfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKLQotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7Ci0JY2FuY2VsX3dvcmtfc3luYygmd2wtPnR4X3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJndsLT5maWx0ZXJfd29yayk7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JLyogbGV0J3Mgbm90aWZ5IE1BQzgwMjExIGFib3V0IHRoZSByZW1haW5pbmcgcGVuZGluZyBUWCBmcmFtZXMgKi8KLQl3bDEyeHhfdHhfZmx1c2god2wpOwotCi0Jd2wxMnh4X3Bvd2VyX29mZih3bCk7Ci0KLQltZW1zZXQod2wtPmJzc2lkLCAwLCBFVEhfQUxFTik7Ci0Jd2wtPmxpc3Rlbl9pbnQgPSAxOwotCXdsLT5ic3NfdHlwZSA9IE1BWF9CU1NfVFlQRTsKLQotCXdsLT5kYXRhX2luX2NvdW50ID0gMDsKLQl3bC0+cnhfY291bnRlciA9IDA7Ci0Jd2wtPnJ4X2hhbmRsZWQgPSAwOwotCXdsLT5yeF9jdXJyZW50X2J1ZmZlciA9IDA7Ci0Jd2wtPnJ4X2xhc3RfaWQgPSAwOwotCXdsLT5uZXh0X3R4X2NvbXBsZXRlID0gMDsKLQl3bC0+ZWxwID0gZmFsc2U7Ci0Jd2wtPnBzbSA9IDA7Ci0Jd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKLQl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyWFhfREVGQVVMVF9QT1dFUl9MRVZFTDsKLQotCXdsMTJ4eF9kZWJ1Z2ZzX3Jlc2V0KHdsKTsKLQotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGh3LT5wcml2OwotCURFQ0xBUkVfTUFDX0JVRihtYWMpOwotCWludCByZXQgPSAwOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYWRkIGludGVyZmFjZSB0eXBlICVkIG1hYyAlcyIsCi0JCSAgICAgY29uZi0+dHlwZSwgcHJpbnRfbWFjKG1hYywgY29uZi0+bWFjX2FkZHIpKTsKLQotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCXdsLT5ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7Ci0JCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXdsLT5ic3NfdHlwZSA9IEJTU19UWVBFX0lCU1M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAobWVtY21wKHdsLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKSkgewotCQltZW1jcHkod2wtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUih3bC0+aHcsIHdsLT5tYWNfYWRkcik7Ci0JCXJldCA9IHdsMTJ4eF9hY3hfc3RhdGlvbl9pZCh3bCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgcmVtb3ZlIGludGVyZmFjZSIpOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9idWlsZF9udWxsX2RhdGEoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUgdGVtcGxhdGU7Ci0KLQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcih3bC0+YnNzaWQpKSB7Ci0JCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuZGEsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOwotCQltZW1jcHkodGVtcGxhdGUuaGVhZGVyLmJzc2lkLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKLQl9Ci0KLQltZW1jcHkodGVtcGxhdGUuaGVhZGVyLnNhLCB3bC0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQl0ZW1wbGF0ZS5oZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAotCQkJCQkJSUVFRTgwMjExX1NUWVBFX05VTExGVU5DKTsKLQotCXJldHVybiB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX05VTExfREFUQSwgJnRlbXBsYXRlLAotCQkJCSAgICAgICBzaXplb2YodGVtcGxhdGUpKTsKLQotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9idWlsZF9wc19wb2xsKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgYWlkKQotewotCXN0cnVjdCB3bDEyeHhfcHNfcG9sbF90ZW1wbGF0ZSB0ZW1wbGF0ZTsKLQotCW1lbWNweSh0ZW1wbGF0ZS5ic3NpZCwgd2wtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHRlbXBsYXRlLnRhLCB3bC0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQl0ZW1wbGF0ZS5haWQgPSBhaWQ7Ci0JdGVtcGxhdGUuZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTCk7Ci0KLQlyZXR1cm4gd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QU19QT0xMLCAmdGVtcGxhdGUsCi0JCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSkpOwotCi19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBody0+cHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7Ci0JaW50IGNoYW5uZWwsIHJldCA9IDA7Ci0KLQljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZyBjaCAlZCBwc20gJXMgcG93ZXIgJWQiLAotCQkgICAgIGNoYW5uZWwsCi0JCSAgICAgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyA/ICJvbiIgOiAib2ZmIiwKLQkJICAgICBjb25mLT5wb3dlcl9sZXZlbCk7Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JaWYgKGNoYW5uZWwgIT0gd2wtPmNoYW5uZWwpIHsKLQkJLyogRklYTUU6IHVzZSBiZWFjb24gaW50ZXJ2YWwgcHJvdmlkZWQgYnkgbWFjODAyMTEgKi8KLQkJcmV0ID0gd2wxMnh4X2NtZF9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIDEsIDEwMCwgMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJd2wtPmNoYW5uZWwgPSBjaGFubmVsOwotCX0KLQotCXJldCA9IHdsMTJ4eF9idWlsZF9udWxsX2RhdGEod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTICYmICF3bC0+cHNtX3JlcXVlc3RlZCkgewotCQl3bDEyeHhfaW5mbygicHNtIGVuYWJsZWQiKTsKLQotCQl3bC0+cHNtX3JlcXVlc3RlZCA9IHRydWU7Ci0KLQkJLyoKLQkJICogV2UgZW50ZXIgUFNNIG9ubHkgaWYgd2UncmUgYWxyZWFkeSBhc3NvY2lhdGVkLgotCQkgKiBJZiB3ZSdyZSBub3QsIHdlJ2xsIGVudGVyIGl0IHdoZW4gam9pbmluZyBhbiBTU0lELAotCQkgKiB0aHJvdWdoIHRoZSBic3NfaW5mb19jaGFuZ2VkKCkgaG9vay4KLQkJICovCi0JCXJldCA9IHdsMTJ4eF9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9QT1dFUl9TQVZFX01PREUpOwotCX0gZWxzZSBpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSAmJgotCQkgICB3bC0+cHNtX3JlcXVlc3RlZCkgewotCQl3bDEyeHhfaW5mbygicHNtIGRpc2FibGVkIik7Ci0KLQkJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKLQotCQlpZiAod2wtPnBzbSkKLQkJCXJldCA9IHdsMTJ4eF9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7Ci0JfQotCi0JaWYgKGNvbmYtPnBvd2VyX2xldmVsICE9IHdsLT5wb3dlcl9sZXZlbCkgewotCQlyZXQgPSB3bDEyeHhfYWN4X3R4X3Bvd2VyKHdsLCBjb25mLT5wb3dlcl9sZXZlbCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJd2wtPnBvd2VyX2xldmVsID0gY29uZi0+cG93ZXJfbGV2ZWw7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLSNkZWZpbmUgV0wxMlhYX1NVUFBPUlRFRF9GSUxURVJTIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBcCi0JCQkJICBGSUZfQUxMTVVMVEkgfCBcCi0JCQkJICBGSUZfRkNTRkFJTCB8IFwKLQkJCQkgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgXAotCQkJCSAgRklGX0NPTlRST0wgfCBcCi0JCQkJICBGSUZfT1RIRVJfQlNTKQotCi1zdGF0aWMgdm9pZCB3bDEyeHhfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqdG90YWwsCi0JCQkJICAgICAgIGludCBtY19jb3VudCwKLQkJCQkgICAgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBody0+cHJpdjsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZ3VyZSBmaWx0ZXIiKTsKLQotCSp0b3RhbCAmPSBXTDEyWFhfU1VQUE9SVEVEX0ZJTFRFUlM7Ci0JY2hhbmdlZCAmPSBXTDEyWFhfU1VQUE9SVEVEX0ZJTFRFUlM7Ci0KLQlpZiAoY2hhbmdlZCA9PSAwKQotCQkvKiBubyBmaWx0ZXJzIHdoaWNoIHdlIHN1cHBvcnQgY2hhbmdlZCAqLwotCQlyZXR1cm47Ci0KLQkvKiBGSVhNRTogd2wtPnJ4X2NvbmZpZyBhbmQgd2wtPnJ4X2ZpbHRlciBhcmUgbm90IHByb3RlY3RlZCAqLwotCi0Jd2wtPnJ4X2NvbmZpZyA9IFdMMTJYWF9ERUZBVUxUX1JYX0NPTkZJRzsKLQl3bC0+cnhfZmlsdGVyID0gV0wxMlhYX0RFRkFVTFRfUlhfRklMVEVSOwotCi0JaWYgKCp0b3RhbCAmIEZJRl9QUk9NSVNDX0lOX0JTUykgewotCQl3bC0+cnhfY29uZmlnIHw9IENGR19CU1NJRF9GSUxURVJfRU47Ci0JCXdsLT5yeF9jb25maWcgfD0gQ0ZHX1JYX0FMTF9HT09EOwotCX0KLQlpZiAoKnRvdGFsICYgRklGX0FMTE1VTFRJKQotCQkvKgotCQkgKiBDRkdfTUNfRklMVEVSX0VOIGluIHJ4X2NvbmZpZyBuZWVkcyB0byBiZSAwIHRvIHJlY2VpdmUKLQkJICogYWxsIG11bHRpY2FzdCBmcmFtZXMKLQkJICovCi0JCXdsLT5yeF9jb25maWcgJj0gfkNGR19NQ19GSUxURVJfRU47Ci0JaWYgKCp0b3RhbCAmIEZJRl9GQ1NGQUlMKQotCQl3bC0+cnhfZmlsdGVyIHw9IENGR19SWF9GQ1NfRVJST1I7Ci0JaWYgKCp0b3RhbCAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7Ci0JCXdsLT5yeF9jb25maWcgJj0gfkNGR19CU1NJRF9GSUxURVJfRU47Ci0JCXdsLT5yeF9jb25maWcgJj0gfkNGR19TU0lEX0ZJTFRFUl9FTjsKLQl9Ci0JaWYgKCp0b3RhbCAmIEZJRl9DT05UUk9MKQotCQl3bC0+cnhfZmlsdGVyIHw9IENGR19SWF9DVExfRU47Ci0JaWYgKCp0b3RhbCAmIEZJRl9PVEhFUl9CU1MpCi0JCXdsLT5yeF9maWx0ZXIgJj0gfkNGR19CU1NJRF9GSUxURVJfRU47Ci0KLQkvKgotCSAqIEZJWE1FOiB3b3JrcXVldWVzIG5lZWQgdG8gYmUgcHJvcGVybHkgY2FuY2VsbGVkIG9uIHN0b3AoKSwgZm9yCi0JICogbm93IGxldCdzIGp1c3QgZGlzYWJsZSBjaGFuZ2luZyB0aGUgZmlsdGVyIHNldHRpbmdzLiBUaGV5IHdpbGwKLQkgKiBiZSB1cGRhdGVkIGFueSBvbiBjb25maWcoKS4KLQkgKi8KLQkvKiBzY2hlZHVsZV93b3JrKCZ3bC0+ZmlsdGVyX3dvcmspOyAqLwotfQotCi0vKiBIVyBlbmNyeXB0aW9uICovCi1zdGF0aWMgaW50IHdsMTJ4eF9zZXRfa2V5X3R5cGUoc3RydWN0IHdsMTJ4eCAqd2wsIHN0cnVjdCBhY3hfc2V0X2tleSAqa2V5LAotCQkJICAgICAgIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKm1hYzgwMjExX2tleSwKLQkJCSAgICAgICBjb25zdCB1OCAqYWRkcikKLXsKLQlzd2l0Y2ggKG1hYzgwMjExX2tleS0+YWxnKSB7Ci0JY2FzZSBBTEdfV0VQOgotCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCQlrZXktPmtleV90eXBlID0gS0VZX1dFUF9ERUZBVUxUOwotCQllbHNlCi0JCQlrZXktPmtleV90eXBlID0gS0VZX1dFUF9BRERSOwotCi0JCW1hYzgwMjExX2tleS0+aHdfa2V5X2lkeCA9IG1hYzgwMjExX2tleS0+a2V5aWR4OwotCQlicmVhazsKLQljYXNlIEFMR19US0lQOgotCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCQlrZXktPmtleV90eXBlID0gS0VZX1RLSVBfTUlDX0dST1VQOwotCQllbHNlCi0JCQlrZXktPmtleV90eXBlID0gS0VZX1RLSVBfTUlDX1BBSVJXSVNFOwotCi0JCW1hYzgwMjExX2tleS0+aHdfa2V5X2lkeCA9IG1hYzgwMjExX2tleS0+a2V5aWR4OwotCQlicmVhazsKLQljYXNlIEFMR19DQ01QOgotCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCQlrZXktPmtleV90eXBlID0gS0VZX0FFU19HUk9VUDsKLQkJZWxzZQotCQkJa2V5LT5rZXlfdHlwZSA9IEtFWV9BRVNfUEFJUldJU0U7Ci0JCW1hYzgwMjExX2tleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl3bDEyeHhfZXJyb3IoIlVua25vd24ga2V5IGFsZ28gMHgleCIsIG1hYzgwMjExX2tleS0+YWxnKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9vcF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQotewotCXN0cnVjdCB3bDEyeHggKndsID0gaHctPnByaXY7Ci0Jc3RydWN0IGFjeF9zZXRfa2V5IHdsX2tleTsKLQljb25zdCB1OCAqYWRkcjsKLQlpbnQgcmV0OwotCi0Jc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0KLQkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzZXQga2V5Iik7Ci0KLQltZW1zZXQoJndsX2tleSwgMCwgc2l6ZW9mKHdsX2tleSkpOwotCi0JYWRkciA9IHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHI7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQ1JZUFQsICJDTUQ6IDB4JXgiLCBjbWQpOwotCXdsMTJ4eF9kdW1wKERFQlVHX0NSWVBULCAiQUREUjogIiwgYWRkciwgRVRIX0FMRU4pOwotCXdsMTJ4eF9kZWJ1ZyhERUJVR19DUllQVCwgIktleTogYWxnbzoweCV4LCBpZDolZCwgbGVuOiVkIGZsYWdzIDB4JXgiLAotCQkgICAgIGtleS0+YWxnLCBrZXktPmtleWlkeCwga2V5LT5rZXlsZW4sIGtleS0+ZmxhZ3MpOwotCXdsMTJ4eF9kdW1wKERFQlVHX0NSWVBULCAiS0VZOiAiLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTRVRfS0VZOgotCQl3bF9rZXkua2V5X2FjdGlvbiA9IEtFWV9BRERfT1JfUkVQTEFDRTsKLQkJYnJlYWs7Ci0JY2FzZSBESVNBQkxFX0tFWToKLQkJd2xfa2V5LmtleV9hY3Rpb24gPSBLRVlfUkVNT1ZFOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl3bDEyeHhfZXJyb3IoIlVuc3VwcG9ydGVkIGtleSBjbWQgMHgleCIsIGNtZCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldCA9IHdsMTJ4eF9zZXRfa2V5X3R5cGUod2wsICZ3bF9rZXksIGNtZCwga2V5LCBhZGRyKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIlNldCBLRVkgdHlwZSBmYWlsZWQiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHdsX2tleS5rZXlfdHlwZSAhPSBLRVlfV0VQX0RFRkFVTFQpCi0JCW1lbWNweSh3bF9rZXkuYWRkciwgYWRkciwgRVRIX0FMRU4pOwotCi0JaWYgKCh3bF9rZXkua2V5X3R5cGUgPT0gS0VZX1RLSVBfTUlDX0dST1VQKSB8fAotCSAgICAod2xfa2V5LmtleV90eXBlID09IEtFWV9US0lQX01JQ19QQUlSV0lTRSkpIHsKLQkJLyoKLQkJICogV2UgZ2V0IHRoZSBrZXkgaW4gdGhlIGZvbGxvd2luZyBmb3JtOgotCQkgKiBUS0lQICgxNiBieXRlcykgLSBUWCBNSUMgKDggYnl0ZXMpIC0gUlggTUlDICg4IGJ5dGVzKQotCQkgKiBidXQgdGhlIHRhcmdldCBpcyBleHBlY3Rpbmc6Ci0JCSAqIFRLSVAgLSBSWCBNSUMgLSBUWCBNSUMKLQkJICovCi0JCW1lbWNweSh3bF9rZXkua2V5LCBrZXktPmtleSwgMTYpOwotCQltZW1jcHkod2xfa2V5LmtleSArIDE2LCBrZXktPmtleSArIDI0LCA4KTsKLQkJbWVtY3B5KHdsX2tleS5rZXkgKyAyNCwga2V5LT5rZXkgKyAxNiwgOCk7Ci0KLQl9IGVsc2UgewotCQltZW1jcHkod2xfa2V5LmtleSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKLQl9Ci0Jd2xfa2V5LmtleV9zaXplID0ga2V5LT5rZXlsZW47Ci0KLQl3bF9rZXkuaWQgPSBrZXktPmtleWlkeDsKLQl3bF9rZXkuc3NpZF9wcm9maWxlID0gMDsKLQotCXdsMTJ4eF9kdW1wKERFQlVHX0NSWVBULCAiVEFSR0VUIEtFWTogIiwgJndsX2tleSwgc2l6ZW9mKHdsX2tleSkpOwotCi0JaWYgKHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX1NFVF9LRVlTLCAmd2xfa2V5LCBzaXplb2Yod2xfa2V5KSkgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiU2V0IEtFWSBmYWlsZWQiKTsKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdsMTJ4eF9idWlsZF9iYXNpY19yYXRlcyhjaGFyICpyYXRlcykKLXsKLQl1OCBpbmRleCA9IDA7Ci0KLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV8yTUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjsKLQotCXJldHVybiBpbmRleDsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfYnVpbGRfZXh0ZW5kZWRfcmF0ZXMoY2hhciAqcmF0ZXMpCi17Ci0JdTggaW5kZXggPSAwOwotCi0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8xMk1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8xOE1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8zNk1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV80OE1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1COwotCi0JcmV0dXJuIGluZGV4OwotfQotCi0KLXN0YXRpYyBpbnQgd2wxMnh4X2J1aWxkX3Byb2JlX3JlcShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKLXsKLQlzdHJ1Y3Qgd2wxMnh4X3Byb2JlX3JlcV90ZW1wbGF0ZSB0ZW1wbGF0ZTsKLQlzdHJ1Y3Qgd2wxMnh4X2llX3JhdGVzICpyYXRlczsKLQljaGFyICpwdHI7Ci0JdTE2IHNpemU7Ci0KLQlwdHIgPSAoY2hhciAqKSZ0ZW1wbGF0ZTsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGVhZGVyKTsKLQotCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5zYSwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JdGVtcGxhdGUuaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwotCi0JLyogSUVzICovCi0JLyogU1NJRCAqLwotCXRlbXBsYXRlLnNzaWQuaGVhZGVyLmlkID0gV0xBTl9FSURfU1NJRDsKLQl0ZW1wbGF0ZS5zc2lkLmhlYWRlci5sZW4gPSBzc2lkX2xlbjsKLQlpZiAoc3NpZF9sZW4gJiYgc3NpZCkKLQkJbWVtY3B5KHRlbXBsYXRlLnNzaWQuc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHNzaWRfbGVuOwotCXB0ciArPSBzaXplOwotCi0JLyogQmFzaWMgUmF0ZXMgKi8KLQlyYXRlcyA9IChzdHJ1Y3Qgd2wxMnh4X2llX3JhdGVzICopcHRyOwotCXJhdGVzLT5oZWFkZXIuaWQgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCXJhdGVzLT5oZWFkZXIubGVuID0gd2wxMnh4X2J1aWxkX2Jhc2ljX3JhdGVzKHJhdGVzLT5yYXRlcyk7Ci0Jc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47Ci0JcHRyICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyByYXRlcy0+aGVhZGVyLmxlbjsKLQotCS8qIEV4dGVuZGVkIHJhdGVzICovCi0JcmF0ZXMgPSAoc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqKXB0cjsKLQlyYXRlcy0+aGVhZGVyLmlkID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JcmF0ZXMtPmhlYWRlci5sZW4gPSB3bDEyeHhfYnVpbGRfZXh0ZW5kZWRfcmF0ZXMocmF0ZXMtPnJhdGVzKTsKLQlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyByYXRlcy0+aGVhZGVyLmxlbjsKLQotCXdsMTJ4eF9kdW1wKERFQlVHX1NDQU4sICJQUk9CRSBSRVE6ICIsICZ0ZW1wbGF0ZSwgc2l6ZSk7Ci0KLQlyZXR1cm4gd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVEsICZ0ZW1wbGF0ZSwKLQkJCQkgICAgICBzaXplKTsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfaHdfc2NhbihzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggKnNzaWQsIHNpemVfdCBsZW4sCi0JCQkgIHU4IGFjdGl2ZV9zY2FuLCB1OCBoaWdoX3ByaW8sIHU4IG51bV9jaGFubmVscywKLQkJCSAgdTggcHJvYmVfcmVxdWVzdHMpCi17Ci0JaW50IGksIHJldDsKLQl1MzIgc3BsaXRfc2NhbiA9IDA7Ci0JdTE2IHNjYW5fb3B0aW9ucyA9IDA7Ci0Jc3RydWN0IGNtZF9zY2FuICpwYXJhbXM7Ci0Jc3RydWN0IHdsMTJ4eF9jb21tYW5kICpjbWRfYW5zd2VyOwotCi0JaWYgKHdsLT5zY2FubmluZykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYXJhbXMgPSBremFsbG9jKHNpemVvZigqcGFyYW1zKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYXJhbXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGFyYW1zLT5wYXJhbXMucnhfY29uZmlnX29wdGlvbnMgPSBjcHVfdG9fbGUzMihDRkdfUlhfQUxMX0dPT0QpOwotCXBhcmFtcy0+cGFyYW1zLnJ4X2ZpbHRlcl9vcHRpb25zID0KLQkJY3B1X3RvX2xlMzIoQ0ZHX1JYX1BSU1BfRU4gfCBDRkdfUlhfTUdNVF9FTiB8IENGR19SWF9CQ05fRU4pOwotCi0JLyogSGlnaCBwcmlvcml0eSBzY2FuICovCi0JaWYgKCFhY3RpdmVfc2NhbikKLQkJc2Nhbl9vcHRpb25zIHw9IFNDQU5fUEFTU0lWRTsKLQlpZiAoaGlnaF9wcmlvKQotCQlzY2FuX29wdGlvbnMgfD0gU0NBTl9QUklPUklUWV9ISUdIOwotCXBhcmFtcy0+cGFyYW1zLnNjYW5fb3B0aW9ucyA9IHNjYW5fb3B0aW9uczsKLQotCXBhcmFtcy0+cGFyYW1zLm51bV9jaGFubmVscyA9IG51bV9jaGFubmVsczsKLQlwYXJhbXMtPnBhcmFtcy5udW1fcHJvYmVfcmVxdWVzdHMgPSBwcm9iZV9yZXF1ZXN0czsKLQlwYXJhbXMtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMTYoMSA8PCAxKTsgLyogMiBNYnBzICovCi0JcGFyYW1zLT5wYXJhbXMudGlkX3RyaWdnZXIgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV9jaGFubmVsczsgaSsrKSB7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0ubWluX2R1cmF0aW9uID0gY3B1X3RvX2xlMzIoMzAwMDApOwotCQlwYXJhbXMtPmNoYW5uZWxzW2ldLm1heF9kdXJhdGlvbiA9IGNwdV90b19sZTMyKDYwMDAwKTsKLQkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLmJzc2lkX2xzYiwgMHhmZiwgNCk7Ci0JCW1lbXNldCgmcGFyYW1zLT5jaGFubmVsc1tpXS5ic3NpZF9tc2IsIDB4ZmYsIDIpOwotCQlwYXJhbXMtPmNoYW5uZWxzW2ldLmVhcmx5X3Rlcm1pbmF0aW9uID0gMDsKLQkJcGFyYW1zLT5jaGFubmVsc1tpXS50eF9wb3dlcl9hdHQgPSAwOwotCQlwYXJhbXMtPmNoYW5uZWxzW2ldLmNoYW5uZWwgPSBpICsgMTsKLQkJbWVtc2V0KHBhcmFtcy0+Y2hhbm5lbHNbaV0ucGFkLCAwLCAzKTsKLQl9Ci0KLQlmb3IgKGkgPSBudW1fY2hhbm5lbHM7IGkgPCBTQ0FOX01BWF9OVU1fT0ZfQ0hBTk5FTFM7IGkrKykKLQkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLCAwLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1ldGVycykpOwotCi0JaWYgKGxlbiAmJiBzc2lkKSB7Ci0JCXBhcmFtcy0+cGFyYW1zLnNzaWRfbGVuID0gbGVuOwotCQltZW1jcHkocGFyYW1zLT5wYXJhbXMuc3NpZCwgc3NpZCwgbGVuKTsKLQl9IGVsc2UgewotCQlwYXJhbXMtPnBhcmFtcy5zc2lkX2xlbiA9IDA7Ci0JCW1lbXNldChwYXJhbXMtPnBhcmFtcy5zc2lkLCAwLCAzMik7Ci0JfQotCi0JcmV0ID0gd2wxMnh4X2J1aWxkX3Byb2JlX3JlcSh3bCwgc3NpZCwgbGVuKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoIlBST0JFIHJlcXVlc3QgdGVtcGxhdGUgZmFpbGVkIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX1RSSUdHRVJfU0NBTl9UTywgJnNwbGl0X3NjYW4sCi0JCQkgICAgICBzaXplb2YodTMyKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJTcGxpdCBTQ0FOIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3bDEyeHhfZHVtcChERUJVR19TQ0FOLCAiU0NBTjogIiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwotCi0Jd2wtPnNjYW5uaW5nID0gdHJ1ZTsKLQotCXJldCA9IHdsMTJ4eF9jbWRfc2VuZCh3bCwgQ01EX1NDQU4sIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKLQlpZiAocmV0IDwgMCkKLQkJd2wxMnh4X2Vycm9yKCJTQ0FOIGZhaWxlZCIpOwotCi0Jd2wxMnh4X3NwaV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwotCi0JY21kX2Fuc3dlciA9IChzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgKikgcGFyYW1zOwotCWlmIChjbWRfYW5zd2VyLT5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7Ci0JCXdsMTJ4eF9lcnJvcigiVEVTVCBjb21tYW5kIGFuc3dlciBlcnJvcjogJWQiLAotCQkJICAgICBjbWRfYW5zd2VyLT5zdGF0dXMpOwotCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi1vdXQ6Ci0Ja2ZyZWUocGFyYW1zKTsKLQlyZXR1cm4gcmV0OwotCi19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X29wX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGh3LT5wcml2OwotCWludCByZXQ7Ci0JdTggKnNzaWQgPSBOVUxMOwotCXNpemVfdCBzc2lkX2xlbiA9IDA7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBodyBzY2FuIik7Ci0KLQlpZiAocmVxLT5uX3NzaWRzKSB7Ci0JCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7Ci0JCXNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKLQl9Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCXJldCA9IHdsMTJ4eF9od19zY2FuKGh3LT5wcml2LCBzc2lkLCBzc2lkX2xlbiwgMSwgMCwgMTMsIDMpOwotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X29wX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCi17Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBody0+cHJpdjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMnh4X2FjeF9ydHNfdGhyZXNob2xkKHdsLCAodTE2KSB2YWx1ZSk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJd2wxMnh4X3dhcm5pbmcoIndsMTJ4eF9vcF9zZXRfcnRzX3RocmVzaG9sZCBmYWlsZWQ6ICVkIiwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTJ4eF9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKLQkJCQkgICAgICAgdTMyIGNoYW5nZWQpCi17Ci0JZW51bSBhY3hfcHNfbW9kZSBtb2RlOwotCXN0cnVjdCB3bDEyeHggKndsID0gaHctPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKLQlpbnQgcmV0OwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYnNzIGluZm8gY2hhbmdlZCIpOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJaWYgKGJzc19jb25mLT5hc3NvYykgewotCQkJd2wtPmFpZCA9IGJzc19jb25mLT5haWQ7Ci0KLQkJCXJldCA9IHdsMTJ4eF9idWlsZF9wc19wb2xsKHdsLCB3bC0+YWlkKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0OwotCi0JCQlyZXQgPSB3bDEyeHhfYWN4X2FpZCh3bCwgd2wtPmFpZCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIG91dDsKLQotCQkJLyogSWYgd2Ugd2FudCB0byBnbyBpbiBQU00gYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQgKi8KLQkJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiAhd2wtPnBzbSkgewotCQkJCW1vZGUgPSBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERTsKLQkJCQlyZXQgPSB3bDEyeHhfcHNfc2V0X21vZGUod2wsIG1vZGUpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9UKSB7Ci0JCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QpCi0JCQlyZXQgPSB3bDEyeHhfYWN4X3Nsb3Qod2wsIFNMT1RfVElNRV9TSE9SVCk7Ci0JCWVsc2UKLQkJCXJldCA9IHdsMTJ4eF9hY3hfc2xvdCh3bCwgU0xPVF9USU1FX0xPTkcpOwotCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMnh4X3dhcm5pbmcoIlNldCBzbG90IHRpbWUgZmFpbGVkICVkIiwgcmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKLQkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpCi0JCQl3bDEyeHhfYWN4X3NldF9wcmVhbWJsZSh3bCwgQUNYX1BSRUFNQkxFX1NIT1JUKTsKLQkJZWxzZQotCQkJd2wxMnh4X2FjeF9zZXRfcHJlYW1ibGUod2wsIEFDWF9QUkVBTUJMRV9MT05HKTsKLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgewotCQlpZiAoYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCkKLQkJCXJldCA9IHdsMTJ4eF9hY3hfY3RzX3Byb3RlY3Qod2wsIENUU1BST1RFQ1RfRU5BQkxFKTsKLQkJZWxzZQotCQkJcmV0ID0gd2wxMnh4X2FjeF9jdHNfcHJvdGVjdCh3bCwgQ1RTUFJPVEVDVF9ESVNBQkxFKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTJ4eF93YXJuaW5nKCJTZXQgY3RzcHJvdGVjdCBmYWlsZWQgJWQiLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JTU0lEKSB7Ci0JCW1lbWNweSh3bC0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0JCXJldCA9IHdsMTJ4eF9idWlsZF9udWxsX2RhdGEod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWlmICh3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfSUJTUykgewotCQkJcmV0ID0gd2wxMnh4X2NtZF9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIDUsIDEwMCwgMSk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKSB7Ci0JCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOwotCQlyZXQgPSB3bDEyeHhfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX0JFQUNPTiwgYmVhY29uLT5kYXRhLAotCQkJCQkgICAgICBiZWFjb24tPmxlbik7Ci0KLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJcmV0ID0gd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVNQLCBiZWFjb24tPmRhdGEsCi0JCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKLQotCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7Ci0KLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlyZXQgPSB3bDEyeHhfY21kX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgMSwgMTAwLCAwKTsKLQotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKLX0KLQotCi0vKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2wxMnh4X3JhdGVzW10gPSB7Ci0JeyAuYml0cmF0ZSA9IDEwLAotCSAgLmh3X3ZhbHVlID0gMHgxLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxLCB9LAotCXsgLmJpdHJhdGUgPSAyMCwKLQkgIC5od192YWx1ZSA9IDB4MiwKLQkgIC5od192YWx1ZV9zaG9ydCA9IDB4MiwKLQkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCi0JeyAuYml0cmF0ZSA9IDU1LAotCSAgLmh3X3ZhbHVlID0gMHg0LAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg0LAotCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKLQl7IC5iaXRyYXRlID0gMTEwLAotCSAgLmh3X3ZhbHVlID0gMHgyMCwKLQkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAsCi0JICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAotCXsgLmJpdHJhdGUgPSA2MCwKLQkgIC5od192YWx1ZSA9IDB4OCwKLQkgIC5od192YWx1ZV9zaG9ydCA9IDB4OCwgfSwKLQl7IC5iaXRyYXRlID0gOTAsCi0JICAuaHdfdmFsdWUgPSAweDEwLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMCwgfSwKLQl7IC5iaXRyYXRlID0gMTIwLAotCSAgLmh3X3ZhbHVlID0gMHg0MCwKLQkgIC5od192YWx1ZV9zaG9ydCA9IDB4NDAsIH0sCi0JeyAuYml0cmF0ZSA9IDE4MCwKLQkgIC5od192YWx1ZSA9IDB4ODAsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwLCB9LAotCXsgLmJpdHJhdGUgPSAyNDAsCi0JICAuaHdfdmFsdWUgPSAweDIwMCwKLQkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAwLCB9LAotCXsgLmJpdHJhdGUgPSAzNjAsCi0JIC5od192YWx1ZSA9IDB4NDAwLAotCSAuaHdfdmFsdWVfc2hvcnQgPSAweDQwMCwgfSwKLQl7IC5iaXRyYXRlID0gNDgwLAotCSAgLmh3X3ZhbHVlID0gMHg4MDAsCi0JICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwMCwgfSwKLQl7IC5iaXRyYXRlID0gNTQwLAotCSAgLmh3X3ZhbHVlID0gMHgxMDAwLAotCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMDAwLCB9LAotfTsKLQotLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdsMTJ4eF9jaGFubmVsc1tdID0gewotCXsgLmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMn0sCi0JeyAuaHdfdmFsdWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3fSwKLQl7IC5od192YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjJ9LAotCXsgLmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyN30sCi0JeyAuaHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyfSwKLQl7IC5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0Mzd9LAotCXsgLmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0Mn0sCi0JeyAuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3fSwKLQl7IC5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTJ9LAotCXsgLmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTd9LAotCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjJ9LAotCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0Njd9LAotCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzJ9LAotfTsKLQotLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCB3bDEyeHhfYmFuZF8yZ2h6ID0gewotCS5jaGFubmVscyA9IHdsMTJ4eF9jaGFubmVscywKLQkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2wxMnh4X2NoYW5uZWxzKSwKLQkuYml0cmF0ZXMgPSB3bDEyeHhfcmF0ZXMsCi0JLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdsMTJ4eF9yYXRlcyksCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2wxMnh4X29wcyA9IHsKLQkuc3RhcnQgPSB3bDEyeHhfb3Bfc3RhcnQsCi0JLnN0b3AgPSB3bDEyeHhfb3Bfc3RvcCwKLQkuYWRkX2ludGVyZmFjZSA9IHdsMTJ4eF9vcF9hZGRfaW50ZXJmYWNlLAotCS5yZW1vdmVfaW50ZXJmYWNlID0gd2wxMnh4X29wX3JlbW92ZV9pbnRlcmZhY2UsCi0JLmNvbmZpZyA9IHdsMTJ4eF9vcF9jb25maWcsCi0JLmNvbmZpZ3VyZV9maWx0ZXIgPSB3bDEyeHhfb3BfY29uZmlndXJlX2ZpbHRlciwKLQkudHggPSB3bDEyeHhfb3BfdHgsCi0JLnNldF9rZXkgPSB3bDEyeHhfb3Bfc2V0X2tleSwKLQkuaHdfc2NhbiA9IHdsMTJ4eF9vcF9od19zY2FuLAotCS5ic3NfaW5mb19jaGFuZ2VkID0gd2wxMnh4X29wX2Jzc19pbmZvX2NoYW5nZWQsCi0JLnNldF9ydHNfdGhyZXNob2xkID0gd2wxMnh4X29wX3NldF9ydHNfdGhyZXNob2xkLAotfTsKLQotc3RhdGljIGludCB3bDEyeHhfcmVnaXN0ZXJfaHcoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldDsKLQotCWlmICh3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJcmV0dXJuIDA7Ci0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUih3bC0+aHcsIHdsLT5tYWNfYWRkcik7Ci0KLQlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcod2wtPmh3KTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyeHhfZXJyb3IoInVuYWJsZSB0byByZWdpc3RlciBtYWM4MDIxMSBodzogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXdsLT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gdHJ1ZTsKLQotCXdsMTJ4eF9ub3RpY2UoImxvYWRlZCIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMnh4X2luaXRfaWVlZTgwMjExKHN0cnVjdCB3bDEyeHggKndsKQotewotCS8qIFRoZSB0eCBkZXNjcmlwdG9yIGJ1ZmZlciBhbmQgdGhlIFRLSVAgc3BhY2UgKi8KLQl3bC0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MpCi0JCSsgV0wxMlhYX1RLSVBfSVZfU1BBQ0U7Ci0KLQkvKiB1bml0IHVzICovCi0JLyogRklYTUU6IGZpbmQgYSBwcm9wZXIgdmFsdWUgKi8KLQl3bC0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwMDsKLQotCXdsLT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19OT0lTRV9EQk07Ci0KLQl3bC0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7Ci0Jd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOwotCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTJ4eF9iYW5kXzJnaHo7Ci0KLQlTRVRfSUVFRTgwMjExX0RFVih3bC0+aHcsICZ3bC0+c3BpLT5kZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgV0wxMlhYX0RFRkFVTFRfQ0hBTk5FTCAxCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyeHhfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCXN0cnVjdCB3bDEyeHggKndsOwotCWludCByZXQsIGk7Ci0Jc3RhdGljIGNvbnN0IHU4IG5va2lhX291aVszXSA9IHsweDAwLCAweDFmLCAweGRmfTsKLQotCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZiAoIXBkYXRhKSB7Ci0JCXdsMTJ4eF9lcnJvcigibm8gcGxhdGZvcm0gZGF0YSIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKndsKSwgJndsMTJ4eF9vcHMpOwotCWlmICghaHcpIHsKLQkJd2wxMnh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXdsID0gaHctPnByaXY7Ci0JbWVtc2V0KHdsLCAwLCBzaXplb2YoKndsKSk7Ci0KLQl3bC0+aHcgPSBodzsKLQlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB3bCk7Ci0Jd2wtPnNwaSA9IHNwaTsKLQotCXdsLT5kYXRhX2luX2NvdW50ID0gMDsKLQotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndsLT50eF9xdWV1ZSk7Ci0KLQlJTklUX1dPUksoJndsLT50eF93b3JrLCB3bDEyeHhfdHhfd29yayk7Ci0JSU5JVF9XT1JLKCZ3bC0+ZmlsdGVyX3dvcmssIHdsMTJ4eF9maWx0ZXJfd29yayk7Ci0Jd2wtPmNoYW5uZWwgPSBXTDEyWFhfREVGQVVMVF9DSEFOTkVMOwotCXdsLT5zY2FubmluZyA9IGZhbHNlOwotCXdsLT5kZWZhdWx0X2tleSA9IDA7Ci0Jd2wtPmxpc3Rlbl9pbnQgPSAxOwotCXdsLT5yeF9jb3VudGVyID0gMDsKLQl3bC0+cnhfaGFuZGxlZCA9IDA7Ci0Jd2wtPnJ4X2N1cnJlbnRfYnVmZmVyID0gMDsKLQl3bC0+cnhfbGFzdF9pZCA9IDA7Ci0Jd2wtPnJ4X2NvbmZpZyA9IFdMMTJYWF9ERUZBVUxUX1JYX0NPTkZJRzsKLQl3bC0+cnhfZmlsdGVyID0gV0wxMlhYX0RFRkFVTFRfUlhfRklMVEVSOwotCXdsLT5lbHAgPSBmYWxzZTsKLQl3bC0+cHNtID0gMDsKLQl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOwotCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7Ci0Jd2wtPnBvd2VyX2xldmVsID0gV0wxMlhYX0RFRkFVTFRfUE9XRVJfTEVWRUw7Ci0KLQkvKiBXZSB1c2UgdGhlIGRlZmF1bHQgcG93ZXIgb24gc2xlZXAgdGltZSB1bnRpbCB3ZSBrbm93IHdoaWNoIGNoaXAKLQkgKiB3ZSdyZSB1c2luZyAqLwotCXdsLT5jaGlwLnBvd2VyX29uX3NsZWVwID0gV0wxMlhYX0RFRkFVTFRfUE9XRVJfT05fU0xFRVA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRldfVFhfQ01QTFRfQkxPQ0tfU0laRTsgaSsrKQotCQl3bC0+dHhfZnJhbWVzW2ldID0gTlVMTDsKLQotCXdsLT5uZXh0X3R4X2NvbXBsZXRlID0gMDsKLQotCS8qCi0JICogSW4gY2FzZSBvdXIgTUFDIGFkZHJlc3MgaXMgbm90IGNvcnJlY3RseSBzZXQsCi0JICogd2UgdXNlIGEgcmFuZG9tIGJ1dCBOb2tpYSBNQUMuCi0JICovCi0JbWVtY3B5KHdsLT5tYWNfYWRkciwgbm9raWFfb3VpLCAzKTsKLQlnZXRfcmFuZG9tX2J5dGVzKHdsLT5tYWNfYWRkciArIDMsIDMpOwotCi0Jd2wtPnN0YXRlID0gV0wxMlhYX1NUQVRFX09GRjsKLQltdXRleF9pbml0KCZ3bC0+bXV0ZXgpOwotCi0Jd2wtPnR4X21nbXRfZnJtX3JhdGUgPSBERUZBVUxUX0hXX0dFTl9UWF9SQVRFOwotCXdsLT50eF9tZ210X2ZybV9tb2QgPSBERUZBVUxUX0hXX0dFTl9NT0RVTEFUSU9OX1RZUEU7Ci0KLQkvKiBUaGlzIGlzIHRoZSBvbmx5IFNQSSB2YWx1ZSB0aGF0IHdlIG5lZWQgdG8gc2V0IGhlcmUsIHRoZSByZXN0Ci0JICogY29tZXMgZnJvbSB0aGUgYm9hcmQtcGVyaXBoZXJhbHMgZmlsZSAqLwotCXNwaS0+Yml0c19wZXJfd29yZCA9IDMyOwotCi0JcmV0ID0gc3BpX3NldHVwKHNwaSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJzcGlfc2V0dXAgZmFpbGVkIik7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCi0Jd2wtPnNldF9wb3dlciA9IHBkYXRhLT5zZXRfcG93ZXI7Ci0JaWYgKCF3bC0+c2V0X3Bvd2VyKSB7Ci0JCXdsMTJ4eF9lcnJvcigic2V0IHBvd2VyIGZ1bmN0aW9uIG1pc3NpbmcgaW4gcGxhdGZvcm0gZGF0YSIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQl3bC0+aXJxID0gc3BpLT5pcnE7Ci0JaWYgKHdsLT5pcnEgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiaXJxIG1pc3NpbmcgaW4gcGxhdGZvcm0gZGF0YSIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlyZXQgPSByZXF1ZXN0X2lycSh3bC0+aXJxLCB3bDEyeHhfaXJxLCAwLCBEUklWRVJfTkFNRSwgd2wpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQlzZXRfaXJxX3R5cGUod2wtPmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCi0JZGlzYWJsZV9pcnEod2wtPmlycSk7Ci0KLQlyZXQgPSB3bDEyeHhfaW5pdF9pZWVlODAyMTEod2wpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2lycTsKLQotCXJldCA9IHdsMTJ4eF9yZWdpc3Rlcl9odyh3bCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfaXJxOwotCi0Jd2wxMnh4X2RlYnVnZnNfaW5pdCh3bCk7Ci0KLQl3bDEyeHhfbm90aWNlKCJpbml0aWFsaXplZCIpOwotCi0JcmV0dXJuIDA7Ci0KLSBvdXRfaXJxOgotCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKLQotIG91dF9mcmVlOgotCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHdsMTJ4eF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCi0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKLQotCXdsMTJ4eF9kZWJ1Z2ZzX2V4aXQod2wpOwotCi0JZnJlZV9pcnEod2wtPmlycSwgd2wpOwotCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7Ci0Ja2ZyZWUod2wtPmRhdGFfcGF0aCk7Ci0Ja2ZyZWUod2wtPmZ3KTsKLQl3bC0+ZncgPSBOVUxMOwotCWtmcmVlKHdsLT5udnMpOwotCXdsLT5udnMgPSBOVUxMOwotCWllZWU4MDIxMV9mcmVlX2h3KHdsLT5odyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgd2wxMnh4X3NwaV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUJCT0gIndsMTJ4eCIsCi0JCS5idXMJCT0gJnNwaV9idXNfdHlwZSwKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCX0sCi0KLQkucHJvYmUJCT0gd2wxMnh4X3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2wxMnh4X3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB3bDEyeHhfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZ3bDEyeHhfc3BpX2RyaXZlcik7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMnh4X2Vycm9yKCJmYWlsZWQgdG8gcmVnaXN0ZXIgc3BpIGRyaXZlcjogJWQiLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgd2wxMnh4X2V4aXQodm9pZCkKLXsKLQlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndsMTJ4eF9zcGlfZHJpdmVyKTsKLQotCXdsMTJ4eF9ub3RpY2UoInVubG9hZGVkIik7Ci19Ci0KLW1vZHVsZV9pbml0KHdsMTJ4eF9pbml0KTsKLW1vZHVsZV9leGl0KHdsMTJ4eF9leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8S2FsbGUuVmFsb0Bub2tpYS5jb20+LCAiCi0JCSJMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNhMTAxMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuYworKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicHMuaCIKLSNpbmNsdWRlICJzcGkuaCIKLQotI2RlZmluZSBXTDEyWFhfV0FLRVVQX1RJTUVPVVQgMjAwMAotCi0vKiBSb3V0aW5lcyB0byB0b2dnbGUgc2xlZXAgbW9kZSB3aGlsZSBpbiBFTFAgKi8KLXZvaWQgd2wxMnh4X3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpZiAod2wtPmVscCB8fCAhd2wtPnBzbSkKLQkJcmV0dXJuOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX1BTTSwgImNoaXAgdG8gZWxwIik7Ci0KLQl3bDEyeHhfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1NMRUVQKTsKLQotCXdsLT5lbHAgPSB0cnVlOwotfQotCi1pbnQgd2wxMnh4X3BzX2VscF93YWtldXAoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCXUzMiBlbHBfcmVnOwotCi0JaWYgKCF3bC0+ZWxwKQotCQlyZXR1cm4gMDsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19QU00sICJ3YWtpbmcgdXAgY2hpcCBmcm9tIGVscCIpOwotCi0JdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFdMMTJYWF9XQUtFVVBfVElNRU9VVCk7Ci0KLQl3bDEyeHhfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1dBS0VfVVApOwotCi0JZWxwX3JlZyA9IHdsMTJ4eF9yZWFkMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUik7Ci0KLQkvKgotCSAqIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgaXJxIGZyb20gY2hpcCBidXQsIGFzIGEgdGVtcG9yYXJ5Ci0JICogc29sdXRpb24gdG8gc2ltcGxpZnkgbG9ja2luZywgbGV0J3MgcG9sbCBpbnN0ZWFkCi0JICovCi0Jd2hpbGUgKCEoZWxwX3JlZyAmIEVMUENUUkxfV0xBTl9SRUFEWSkpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCXdsMTJ4eF9lcnJvcigiZWxwIHdha2V1cCB0aW1lb3V0Iik7Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCQltc2xlZXAoMSk7Ci0JCWVscF9yZWcgPSB3bDEyeHhfcmVhZDMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIpOwotCX0KLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19QU00sICJ3YWtldXAgdGltZTogJXUgbXMiLAotCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcykgLQotCQkgICAgIChqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQpIC0gV0wxMlhYX1dBS0VVUF9USU1FT1VUKSk7Ci0KLQl3bC0+ZWxwID0gZmFsc2U7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyeHhfcHNfc2V0X2VscChzdHJ1Y3Qgd2wxMnh4ICp3bCwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHJldDsKLQotCWlmIChlbmFibGUpIHsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1BTTSwgInNsZWVwIGF1dGggcHNtL2VscCIpOwotCi0JCS8qCi0JCSAqIEZJWE1FOiB3ZSBzaG91bGQgUFNNX0VMUCwgYnV0IGJlY2F1c2Ugb2YgZmlybXdhcmUgd2FrZXVwCi0JCSAqIHByb2JsZW1zIGxldCdzIHVzZSBvbmx5IFBTTV9QUwotCQkgKi8KLQkJcmV0ID0gd2wxMnh4X2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyWFhfUFNNX1BTKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXdsMTJ4eF9wc19lbHBfc2xlZXAod2wpOwotCX0gZWxzZSB7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19QU00sICJzbGVlcCBhdXRoIGNhbSIpOwotCi0JCS8qCi0JCSAqIFdoZW4gdGhlIHRhcmdldCBpcyBpbiBFTFAsIHdlIGNhbiBvbmx5Ci0JCSAqIGFjY2VzcyB0aGUgRUxQIGNvbnRyb2wgcmVnaXN0ZXIuIFRodXMsCi0JCSAqIHdlIGhhdmUgdG8gd2FrZSB0aGUgdGFyZ2V0IHVwIGJlZm9yZQotCQkgKiBjaGFuZ2luZyB0aGUgcG93ZXIgYXV0aG9yaXphdGlvbi4KLQkJICovCi0KLQkJd2wxMnh4X3BzX2VscF93YWtldXAod2wpOwotCi0JCXJldCA9IHdsMTJ4eF9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMlhYX1BTTV9DQU0pOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB3bDEyeHhfcHNfc2V0X21vZGUoc3RydWN0IHdsMTJ4eCAqd2wsIGVudW0gYWN4X3BzX21vZGUgbW9kZSkKLXsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERToKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1BTTSwgImVudGVyaW5nIHBzbSIpOwotCQlyZXQgPSB3bDEyeHhfY21kX3BzX21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IHdsMTJ4eF9wc19zZXRfZWxwKHdsLCB0cnVlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXdsLT5wc20gPSAxOwotCQlicmVhazsKLQljYXNlIFNUQVRJT05fQUNUSVZFX01PREU6Ci0JZGVmYXVsdDoKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1BTTSwgImxlYXZpbmcgcHNtIik7Ci0JCXJldCA9IHdsMTJ4eF9wc19zZXRfZWxwKHdsLCBmYWxzZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXQgPSB3bDEyeHhfY21kX3BzX21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJd2wtPnBzbSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQzMjI3ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAotICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKLSAqLwotCi0jaWZuZGVmIF9fV0wxMlhYX1NQSV9IX18KLSNkZWZpbmUgX19XTDEyWFhfU1BJX0hfXwotCi0jaW5jbHVkZSAiY21kLmgiCi0jaW5jbHVkZSAiYWN4LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0KLSNkZWZpbmUgSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UJCTB4MUZGQzAKLQotI2RlZmluZSBIV19BQ0NFU1NfUEFSVDBfU0laRV9BRERSICAgICAgICAgICAweDFGRkMwCi0jZGVmaW5lIEhXX0FDQ0VTU19QQVJUMF9TVEFSVF9BRERSICAgICAgICAgIDB4MUZGQzQKLSNkZWZpbmUgSFdfQUNDRVNTX1BBUlQxX1NJWkVfQUREUiAgICAgICAgICAgMHgxRkZDOAotI2RlZmluZSBIV19BQ0NFU1NfUEFSVDFfU1RBUlRfQUREUiAgICAgICAgICAweDFGRkNDCi0KLSNkZWZpbmUgSFdfQUNDRVNTX1JFR0lTVEVSX1NJWkUgICAgICAgICAgICAgNAotCi0jZGVmaW5lIEhXX0FDQ0VTU19QUkFNX01BWF9SQU5HRQkJMHgzYzAwMAotCi0jZGVmaW5lIFdTUElfQ01EX1JFQUQgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgV1NQSV9DTURfV1JJVEUgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBXU1BJX0NNRF9GSVhFRCAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFdTUElfQ01EX0JZVEVfTEVOR1RIICAgICAgICAgIDB4MUZGRTAwMDAKLSNkZWZpbmUgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUICAgMTcKLSNkZWZpbmUgV1NQSV9DTURfQllURV9BRERSICAgICAgICAgICAgMHgwMDAxRkZGRgotCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfQ1JDX0xFTiAgICAgICA1Ci0KLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9TVEFSVCAgICAgICAgIDB4MDAKLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9UWCAgICAgICAgICAgIDB4NDAKLS8qIHRoZSBleHRyYSBieXBhc3MgYml0IGlzIHNhbXBsZWQgYnkgdGhlIFRORVQgYXMgJzEnICovCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfQllQQVNTX0JJVCAgICAweDgwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfRklYRURCVVNZX0xFTiAweDA3Ci0jZGVmaW5lIFdTUElfSU5JVF9DTURfRU5fRklYRURCVVNZICAweDgwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfRElTX0ZJWEVEQlVTWSAweDAwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfSU9EICAgICAgICAgICAweDQwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfSVAgICAgICAgICAgICAweDIwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfQ1MgICAgICAgICAgICAweDEwCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfV1MgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIFdTUElfSU5JVF9DTURfV1NQSSAgICAgICAgICAweDAxCi0jZGVmaW5lIFdTUElfSU5JVF9DTURfRU5EICAgICAgICAgICAweDAxCi0KLSNkZWZpbmUgV1NQSV9JTklUX0NNRF9MRU4gICAgICAgICAgIDgKLQotI2RlZmluZSBUTkVUV0lGX1JFQURfT0ZGU0VUX0JZVEVTICA4Ci0jZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOIFwKLQkJKChUTkVUV0lGX1JFQURfT0ZGU0VUX0JZVEVTIC0gNCkgLyBzaXplb2YodTMyKSkKLSNkZWZpbmUgSFdfQUNDRVNTX1dTUElfSU5JVF9DTURfTUFTSyAgMAotCi0KLS8qIFJhdyB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgbm90IHRyYW5zbGF0ZWQgKi8KLXZvaWQgd2wxMnh4X3NwaV9yZWFkKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLXZvaWQgd2wxMnh4X3NwaV93cml0ZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci0KLS8qIE1lbW9yeSB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgdHJhbmxhdGVkIHRvIHBhcnRpdGlvbiAwICovCi12b2lkIHdsMTJ4eF9zcGlfbWVtX3JlYWQoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotdm9pZCB3bDEyeHhfc3BpX21lbV93cml0ZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci11MzIgd2wxMnh4X21lbV9yZWFkMzIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyKTsKLXZvaWQgd2wxMnh4X21lbV93cml0ZTMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdTMyIHZhbCk7Ci0KLS8qIFJlZ2lzdGVycyBJTyAqLwotdTMyIHdsMTJ4eF9yZWdfcmVhZDMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkcik7Ci12b2lkIHdsMTJ4eF9yZWdfd3JpdGUzMihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpOwotCi0vKiBJTklUIGFuZCBSRVNFVCB3b3JkcyAqLwotdm9pZCB3bDEyeHhfc3BpX3Jlc2V0KHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X3NwaV9pbml0KHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTJ4eCAqd2wsCi0JCQkgIHUzMiBwYXJ0X3N0YXJ0LCB1MzIgcGFydF9zaXplLAotCQkJICB1MzIgcmVnX3N0YXJ0LCAgdTMyIHJlZ19zaXplKTsKLQotc3RhdGljIGlubGluZSB1MzIgd2wxMnh4X3JlYWQzMihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIpCi17Ci0JdTMyIHJlc3BvbnNlOwotCi0Jd2wxMnh4X3NwaV9yZWFkKHdsLCBhZGRyLCAmcmVzcG9uc2UsIHNpemVvZih1MzIpKTsKLQotCXJldHVybiByZXNwb25zZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMTJ4eF93cml0ZTMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKLXsKLQl3bDEyeHhfc3BpX3dyaXRlKHdsLCBhZGRyLCAmdmFsLCBzaXplb2YodTMyKSk7Ci19Ci0KLSNlbmRpZiAvKiBfX1dMMTJYWF9TUElfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMTU2MWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzA5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSAid2wxMjUxLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAic3BpLmgiCi0jaW5jbHVkZSAiYm9vdC5oIgotI2luY2x1ZGUgImV2ZW50LmgiCi0jaW5jbHVkZSAiYWN4LmgiCi0jaW5jbHVkZSAidHguaCIKLSNpbmNsdWRlICJyeC5oIgotI2luY2x1ZGUgInBzLmgiCi0jaW5jbHVkZSAiaW5pdC5oIgotCi1zdGF0aWMgc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb25fc2V0IHdsMTI1MV9wYXJ0X3RhYmxlW1BBUlRfVEFCTEVfTEVOXSA9IHsKLQlbUEFSVF9ET1dOXSA9IHsKLQkJLm1lbSA9IHsKLQkJCS5zdGFydCA9IDB4MDAwMDAwMDAsCi0JCQkuc2l6ZSAgPSAweDAwMDE2ODAwCi0JCX0sCi0JCS5yZWcgPSB7Ci0JCQkuc3RhcnQgPSBSRUdJU1RFUlNfQkFTRSwKLQkJCS5zaXplICA9IFJFR0lTVEVSU19ET1dOX1NJWkUKLQkJfSwKLQl9LAotCi0JW1BBUlRfV09SS10gPSB7Ci0JCS5tZW0gPSB7Ci0JCQkuc3RhcnQgPSAweDAwMDI4MDAwLAotCQkJLnNpemUgID0gMHgwMDAxNDAwMAotCQl9LAotCQkucmVnID0gewotCQkJLnN0YXJ0ID0gUkVHSVNURVJTX0JBU0UsCi0JCQkuc2l6ZSAgPSBSRUdJU1RFUlNfV09SS19TSVpFCi0JCX0sCi0JfSwKLQotCS8qIFdMMTI1MSBkb2Vzbid0IHVzZSB0aGUgRFJQVyBwYXJ0aXRpb24sIHNvIHdlIGRvbid0IHNldCBpdCBoZXJlICovCi19OwotCi1zdGF0aWMgZW51bSB3bDEyeHhfYWN4X2ludF9yZWcgd2wxMjUxX2FjeF9yZWdfdGFibGVbQUNYX1JFR19UQUJMRV9MRU5dID0gewotCVtBQ1hfUkVHX0lOVEVSUlVQVF9UUklHXSAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzQpLAotCVtBQ1hfUkVHX0lOVEVSUlVQVF9UUklHX0hdICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzgpLAotCVtBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLXSAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0OTQpLAotCVtBQ1hfUkVHX0hJTlRfTUFTS19TRVRdICAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0OTgpLAotCVtBQ1hfUkVHX0hJTlRfTUFTS19DTFJdICAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0OUMpLAotCVtBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUl0gPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0QjApLAotCVtBQ1hfUkVHX0lOVEVSUlVQVF9DTEVBUl0gICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTQpLAotCVtBQ1hfUkVHX0lOVEVSUlVQVF9BQ0tdICAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTgpLAotCVtBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VUXSAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDAwMDApLAotCVtBQ1hfUkVHX0VFX1NUQVJUXSAgICAgICAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA4MEMpLAotCVtBQ1hfUkVHX0VDUFVfQ09OVFJPTF0gICAgICAgPSAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDQpCi19OwotCi1zdGF0aWMgaW50IHdsMTI1MV91cGxvYWRfZmlybXdhcmUoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb25fc2V0ICpwX3RhYmxlID0gd2wtPmNoaXAucF90YWJsZTsKLQlpbnQgYWRkciwgY2h1bmtfbnVtLCBwYXJ0aXRpb25fbGltaXQ7Ci0Jc2l6ZV90IGZ3X2RhdGFfbGVuOwotCXU4ICpwOwotCi0JLyogd2hhbF9Gd0N0cmxfTG9hZEZ3SW1hZ2VTbSgpICovCi0KLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgYmVmb3JlIGZ3IHVwbG9hZDogMHgleCIsCi0JCSAgICAgd2wxMnh4X3JlZ19yZWFkMzIod2wsIENISVBfSURfQikpOwotCi0JLyogMTAuMCBjaGVjayBmaXJtd2FyZSBsZW5ndGggYW5kIHNldCBwYXJ0aXRpb24gKi8KLQlmd19kYXRhX2xlbiA9ICAod2wtPmZ3WzRdIDw8IDI0KSB8ICh3bC0+ZndbNV0gPDwgMTYpIHwKLQkJKHdsLT5md1s2XSA8PCA4KSB8ICh3bC0+ZndbN10pOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsICJmd19kYXRhX2xlbiAlenUgY2h1bmtfc2l6ZSAlZCIsIGZ3X2RhdGFfbGVuLAotCQlDSFVOS19TSVpFKTsKLQotCWlmICgoZndfZGF0YV9sZW4gJSA0KSAhPSAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiZmlybXdhcmUgbGVuZ3RoIG5vdCBtdWx0aXBsZSBvZiBmb3VyIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXdsMTJ4eF9zZXRfcGFydGl0aW9uKHdsLAotCQkJICAgICBwX3RhYmxlW1BBUlRfRE9XTl0ubWVtLnN0YXJ0LAotCQkJICAgICBwX3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemUsCi0JCQkgICAgIHBfdGFibGVbUEFSVF9ET1dOXS5yZWcuc3RhcnQsCi0JCQkgICAgIHBfdGFibGVbUEFSVF9ET1dOXS5yZWcuc2l6ZSk7Ci0KLQkvKiAxMC4xIHNldCBwYXJ0aXRpb24gbGltaXQgYW5kIGNodW5rIG51bSAqLwotCWNodW5rX251bSA9IDA7Ci0JcGFydGl0aW9uX2xpbWl0ID0gcF90YWJsZVtQQVJUX0RPV05dLm1lbS5zaXplOwotCi0Jd2hpbGUgKGNodW5rX251bSA8IGZ3X2RhdGFfbGVuIC8gQ0hVTktfU0laRSkgewotCQkvKiAxMC4yIHVwZGF0ZSBwYXJ0aXRpb24sIGlmIG5lZWRlZCAqLwotCQlhZGRyID0gcF90YWJsZVtQQVJUX0RPV05dLm1lbS5zdGFydCArCi0JCQkoY2h1bmtfbnVtICsgMikgKiBDSFVOS19TSVpFOwotCQlpZiAoYWRkciA+IHBhcnRpdGlvbl9saW1pdCkgewotCQkJYWRkciA9IHBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc3RhcnQgKwotCQkJCWNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0JCQlwYXJ0aXRpb25fbGltaXQgPSBjaHVua19udW0gKiBDSFVOS19TSVpFICsKLQkJCQlwX3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemU7Ci0JCQl3bDEyeHhfc2V0X3BhcnRpdGlvbih3bCwKLQkJCQkJICAgICBhZGRyLAotCQkJCQkgICAgIHBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc2l6ZSwKLQkJCQkJICAgICBwX3RhYmxlW1BBUlRfRE9XTl0ucmVnLnN0YXJ0LAotCQkJCQkgICAgIHBfdGFibGVbUEFSVF9ET1dOXS5yZWcuc2l6ZSk7Ci0JCX0KLQotCQkvKiAxMC4zIHVwbG9hZCB0aGUgY2h1bmsgKi8KLQkJYWRkciA9IHBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc3RhcnQgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOwotCQlwID0gd2wtPmZ3ICsgRldfSERSX1NJWkUgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOwotCQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBjaHVuayAweCVwIHRvIDB4JXgiLAotCQkJICAgICBwLCBhZGRyKTsKLQkJd2wxMnh4X3NwaV9tZW1fd3JpdGUod2wsIGFkZHIsIHAsIENIVU5LX1NJWkUpOwotCi0JCWNodW5rX251bSsrOwotCX0KLQotCS8qIDEwLjQgdXBsb2FkIHRoZSBsYXN0IGNodW5rICovCi0JYWRkciA9IHBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc3RhcnQgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOwotCXAgPSB3bC0+ZncgKyBGV19IRFJfU0laRSArIGNodW5rX251bSAqIENIVU5LX1NJWkU7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsICJ1cGxvYWRpbmcgZncgbGFzdCBjaHVuayAoJXp1IEIpIDB4JXAgdG8gMHgleCIsCi0JCSAgICAgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFLCBwLCBhZGRyKTsKLQl3bDEyeHhfc3BpX21lbV93cml0ZSh3bCwgYWRkciwgcCwgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdsMTI1MV91cGxvYWRfbnZzKHN0cnVjdCB3bDEyeHggKndsKQotewotCXNpemVfdCBudnNfbGVuLCBudnNfYnl0ZXNfd3JpdHRlbiwgYnVyc3RfbGVuOwotCWludCBudnNfc3RhcnQsIGk7Ci0JdTMyIGRlc3RfYWRkciwgdmFsOwotCXU4ICpudnNfcHRyLCAqbnZzOwotCi0JbnZzID0gd2wtPm52czsKLQlpZiAobnZzID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbnZzX3B0ciA9IG52czsKLQotCW52c19sZW4gPSB3bC0+bnZzX2xlbjsKLQludnNfc3RhcnQgPSB3bC0+ZndfbGVuOwotCi0JLyoKLQkgKiBMYXlvdXQgYmVmb3JlIHRoZSBhY3R1YWwgTlZTIHRhYmxlczoKLQkgKiAxIGJ5dGUgOiBidXJzdCBsZW5ndGguCi0JICogMiBieXRlczogZGVzdGluYXRpb24gYWRkcmVzcy4KLQkgKiBuIGJ5dGVzOiBkYXRhIHRvIGJ1cnN0IGNvcHkuCi0JICoKLQkgKiBUaGlzIGlzIGVuZGVkIGJ5IGEgMCBsZW5ndGgsIHRoZW4gdGhlIE5WUyB0YWJsZXMuCi0JICovCi0KLQl3aGlsZSAobnZzX3B0clswXSkgewotCQlidXJzdF9sZW4gPSBudnNfcHRyWzBdOwotCQlkZXN0X2FkZHIgPSAobnZzX3B0clsxXSAmIDB4ZmUpIHwgKCh1MzIpKG52c19wdHJbMl0gPDwgOCkpOwotCi0JCS8qIFdlIG1vdmUgb3VyIHBvaW50ZXIgdG8gdGhlIGRhdGEgKi8KLQkJbnZzX3B0ciArPSAzOwotCi0JCWZvciAoaSA9IDA7IGkgPCBidXJzdF9sZW47IGkrKykgewotCQkJdmFsID0gKG52c19wdHJbMF0gfCAobnZzX3B0clsxXSA8PCA4KQotCQkJICAgICAgIHwgKG52c19wdHJbMl0gPDwgMTYpIHwgKG52c19wdHJbM10gPDwgMjQpKTsKLQotCQkJd2wxMnh4X2RlYnVnKERFQlVHX0JPT1QsCi0JCQkJICAgICAibnZzIGJ1cnN0IHdyaXRlIDB4JXg6IDB4JXgiLAotCQkJCSAgICAgZGVzdF9hZGRyLCB2YWwpOwotCQkJd2wxMnh4X21lbV93cml0ZTMyKHdsLCBkZXN0X2FkZHIsIHZhbCk7Ci0KLQkJCW52c19wdHIgKz0gNDsKLQkJCWRlc3RfYWRkciArPSA0OwotCQl9Ci0JfQotCi0JLyoKLQkgKiBXZSd2ZSByZWFjaGVkIHRoZSBmaXJzdCB6ZXJvIGxlbmd0aCwgdGhlIGZpcnN0IE5WUyB0YWJsZQotCSAqIGlzIDcgYnl0ZXMgZnVydGhlci4KLQkgKi8KLQludnNfcHRyICs9IDc7Ci0JbnZzX2xlbiAtPSBudnNfcHRyIC0gbnZzOwotCW52c19sZW4gPSBBTElHTihudnNfbGVuLCA0KTsKLQotCS8qIE5vdyB3ZSBtdXN0IHNldCB0aGUgcGFydGl0aW9uIGNvcnJlY3RseSAqLwotCXdsMTJ4eF9zZXRfcGFydGl0aW9uKHdsLCBudnNfc3RhcnQsCi0JCQkgICAgIHdsLT5jaGlwLnBfdGFibGVbUEFSVF9ET1dOXS5tZW0uc2l6ZSwKLQkJCSAgICAgd2wtPmNoaXAucF90YWJsZVtQQVJUX0RPV05dLnJlZy5zdGFydCwKLQkJCSAgICAgd2wtPmNoaXAucF90YWJsZVtQQVJUX0RPV05dLnJlZy5zaXplKTsKLQotCS8qIEFuZCBmaW5hbGx5IHdlIHVwbG9hZCB0aGUgTlZTIHRhYmxlcyAqLwotCW52c19ieXRlc193cml0dGVuID0gMDsKLQl3aGlsZSAobnZzX2J5dGVzX3dyaXR0ZW4gPCBudnNfbGVuKSB7Ci0JCXZhbCA9IChudnNfcHRyWzBdIHwgKG52c19wdHJbMV0gPDwgOCkKLQkJICAgICAgIHwgKG52c19wdHJbMl0gPDwgMTYpIHwgKG52c19wdHJbM10gPDwgMjQpKTsKLQotCQl2YWwgPSBjcHVfdG9fbGUzMih2YWwpOwotCi0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19CT09ULAotCQkJICAgICAibnZzIHdyaXRlIHRhYmxlIDB4JXg6IDB4JXgiLAotCQkJICAgICBudnNfc3RhcnQsIHZhbCk7Ci0JCXdsMTJ4eF9tZW1fd3JpdGUzMih3bCwgbnZzX3N0YXJ0LCB2YWwpOwotCi0JCW52c19wdHIgKz0gNDsKLQkJbnZzX2J5dGVzX3dyaXR0ZW4gKz0gNDsKLQkJbnZzX3N0YXJ0ICs9IDQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX2Jvb3Qoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0JaW50IHJldCA9IDAsIG1pbm9yX21pbm9yX2UyX3ZlcjsKLQl1MzIgdG1wLCBib290X2RhdGE7Ci0KLQlyZXQgPSB3bDEyeHhfYm9vdF9zb2Z0X3Jlc2V0KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiAyLiBzdGFydCBwcm9jZXNzaW5nIE5WUyBmaWxlICovCi0JcmV0ID0gd2wtPmNoaXAub3BfdXBsb2FkX252cyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogd3JpdGUgZmlybXdhcmUncyBsYXN0IGFkZHJlc3MgKGllLiBpdCdzIGxlbmd0aCkgdG8KLQkgKiBBQ1hfRUVQUk9NTEVTU19JTkRfUkVHICovCi0Jd2wxMnh4X3JlZ193cml0ZTMyKHdsLCBBQ1hfRUVQUk9NTEVTU19JTkRfUkVHLCB3bC0+ZndfbGVuKTsKLQotCS8qIDYuIHJlYWQgdGhlIEVFUFJPTSBwYXJhbWV0ZXJzICovCi0JdG1wID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIFNDUl9QQUQyKTsKLQotCS8qIDcuIHJlYWQgYm9vdGRhdGEgKi8KLQl3bC0+Ym9vdF9hdHRyLnJhZGlvX3R5cGUgPSAodG1wICYgMHgwMDAwRkYwMCkgPj4gODsKLQl3bC0+Ym9vdF9hdHRyLm1ham9yID0gKHRtcCAmIDB4MDBGRjAwMDApID4+IDE2OwotCXRtcCA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBTQ1JfUEFEMyk7Ci0KLQkvKiA4LiBjaGVjayBib290ZGF0YSBhbmQgY2FsbCByZXN0YXJ0IHNlcXVlbmNlICovCi0Jd2wtPmJvb3RfYXR0ci5taW5vciA9ICh0bXAgJiAweDAwRkYwMDAwKSA+PiAxNjsKLQltaW5vcl9taW5vcl9lMl92ZXIgPSAodG1wICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgInJhZGlvVHlwZSAweCV4IG1ham9yRTJWZXIgMHgleCAiCi0JCSAgICAgIm1pbm9yRTJWZXIgMHgleCBtaW5vcl9taW5vcl9lMl92ZXIgMHgleCIsCi0JCSAgICAgd2wtPmJvb3RfYXR0ci5yYWRpb190eXBlLCB3bC0+Ym9vdF9hdHRyLm1ham9yLAotCQkgICAgIHdsLT5ib290X2F0dHIubWlub3IsIG1pbm9yX21pbm9yX2UyX3Zlcik7Ci0KLQlyZXQgPSB3bDEyeHhfYm9vdF9pbml0X3NlcSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogOS4gTlZTIHByb2Nlc3NpbmcgZG9uZSAqLwotCWJvb3RfZGF0YSA9IHdsMTJ4eF9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQk9PVCwgImhhbHQgYm9vdF9kYXRhIDB4JXgiLCBib290X2RhdGEpOwotCi0JLyogMTAuIGNoZWNrIHRoYXQgRUNQVV9DT05UUk9MX0hBTFQgYml0cyBhcmUgc2V0IGluCi0JICogcFdoYWxCdXMtPnVCb290RGF0YSBhbmQgc3RhcnQgdXBsb2FkaW5nIGZpcm13YXJlCi0JICovCi0JaWYgKChib290X2RhdGEgJiBFQ1BVX0NPTlRST0xfSEFMVCkgPT0gMCkgewotCQl3bDEyeHhfZXJyb3IoImJvb3QgZmFpbGVkLCBFQ1BVX0NPTlRST0xfSEFMVCBub3Qgc2V0Iik7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IHdsLT5jaGlwLm9wX3VwbG9hZF9mdyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogMTAuNSBzdGFydCBmaXJtd2FyZSAqLwotCXJldCA9IHdsMTJ4eF9ib290X3J1bl9maXJtd2FyZSh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JLyogR2V0IGFuZCBzYXZlIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCi0Jd2wxMnh4X2FjeF9md192ZXJzaW9uKHdsLCB3bC0+Y2hpcC5md192ZXIsIHNpemVvZih3bC0+Y2hpcC5md192ZXIpKTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX21lbV9jZmcoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IHdsMTI1MV9hY3hfY29uZmlnX21lbW9yeSBtZW1fY29uZjsKLQlpbnQgcmV0LCBpOwotCi0Jd2wxMnh4X2RlYnVnKERFQlVHX0FDWCwgIndsMTI1MSBtZW0gY2ZnIik7Ci0KLQkvKiBtZW1vcnkgY29uZmlnICovCi0JbWVtX2NvbmYubWVtX2NvbmZpZy5udW1fc3RhdGlvbnMgPSBjcHVfdG9fbGUxNihERUZBVUxUX05VTV9TVEFUSU9OUyk7Ci0JbWVtX2NvbmYubWVtX2NvbmZpZy5yeF9tZW1fYmxvY2tfbnVtID0gMzU7Ci0JbWVtX2NvbmYubWVtX2NvbmZpZy50eF9taW5fbWVtX2Jsb2NrX251bSA9IDY0OwotCW1lbV9jb25mLm1lbV9jb25maWcubnVtX3R4X3F1ZXVlcyA9IE1BWF9UWF9RVUVVRVM7Ci0JbWVtX2NvbmYubWVtX2NvbmZpZy5ob3N0X2lmX29wdGlvbnMgPSBIT1NUSUZfUEtUX1JJTkc7Ci0JbWVtX2NvbmYubWVtX2NvbmZpZy5udW1fc3NpZF9wcm9maWxlcyA9IDE7Ci0JbWVtX2NvbmYubWVtX2NvbmZpZy5kZWJ1Z19idWZmZXJfc2l6ZSA9Ci0JCWNwdV90b19sZTE2KFRSQUNFX0JVRkZFUl9NQVhfU0laRSk7Ci0KLQkvKiBSWCBxdWV1ZSBjb25maWcgKi8KLQltZW1fY29uZi5yeF9xdWV1ZV9jb25maWcuZG1hX2FkZHJlc3MgPSAwOwotCW1lbV9jb25mLnJ4X3F1ZXVlX2NvbmZpZy5udW1fZGVzY3MgPSBBQ1hfUlhfREVTQ19ERUY7Ci0JbWVtX2NvbmYucnhfcXVldWVfY29uZmlnLnByaW9yaXR5ID0gREVGQVVMVF9SWFFfUFJJT1JJVFk7Ci0JbWVtX2NvbmYucnhfcXVldWVfY29uZmlnLnR5cGUgPSBERUZBVUxUX1JYUV9UWVBFOwotCi0JLyogVFggcXVldWUgY29uZmlnICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9UWF9RVUVVRVM7IGkrKykgewotCQltZW1fY29uZi50eF9xdWV1ZV9jb25maWdbaV0ubnVtX2Rlc2NzID0gQUNYX1RYX0RFU0NfREVGOwotCQltZW1fY29uZi50eF9xdWV1ZV9jb25maWdbaV0uYXR0cmlidXRlcyA9IGk7Ci0JfQotCi0JbWVtX2NvbmYuaGVhZGVyLmlkID0gQUNYX01FTV9DRkc7Ci0JbWVtX2NvbmYuaGVhZGVyLmxlbiA9IHNpemVvZihzdHJ1Y3Qgd2wxMjUxX2FjeF9jb25maWdfbWVtb3J5KSAtCi0JCXNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0JbWVtX2NvbmYuaGVhZGVyLmxlbiAtPQotCQkoTUFYX1RYX1FVRVVFX0NPTkZJR1MgLSBtZW1fY29uZi5tZW1fY29uZmlnLm51bV90eF9xdWV1ZXMpICoKLQkJc2l6ZW9mKHN0cnVjdCB3bDEyNTFfYWN4X3R4X3F1ZXVlX2NvbmZpZyk7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2NvbmZpZ3VyZSh3bCwgJm1lbV9jb25mLAotCQkJCSAgIHNpemVvZihzdHJ1Y3Qgd2wxMjUxX2FjeF9jb25maWdfbWVtb3J5KSk7Ci0JaWYgKHJldCA8IDApCi0JCXdsMTJ4eF93YXJuaW5nKCJ3bDEyNTEgbWVtIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMjUxX21lbV9jZmcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jd2wtPnRhcmdldF9tZW1fbWFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdsMTI1MV9hY3hfbWVtX21hcCksCi0JCQkJCSAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3bC0+dGFyZ2V0X21lbV9tYXApIHsKLQkJd2wxMnh4X2Vycm9yKCJjb3VsZG4ndCBhbGxvY2F0ZSB0YXJnZXQgbWVtb3J5IG1hcCIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKiB3ZSBub3cgYXNrIGZvciB0aGUgZmlybXdhcmUgYnVpbHQgbWVtb3J5IG1hcCAqLwotCXJldCA9IHdsMTJ4eF9hY3hfbWVtX21hcCh3bCwgd2wtPnRhcmdldF9tZW1fbWFwLAotCQkJCSBzaXplb2Yoc3RydWN0IHdsMTI1MV9hY3hfbWVtX21hcCkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTJ4eF9lcnJvcigiY291bGRuJ3QgcmV0cmlldmUgZmlybXdhcmUgbWVtb3J5IG1hcCIpOwotCQlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOwotCQl3bC0+dGFyZ2V0X21lbV9tYXAgPSBOVUxMOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB3bDEyNTFfc2V0X2VjcHVfY3RybChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGZsYWcpCi17Ci0JdTMyIGNwdV9jdHJsOwotCi0JLyogMTAuNS4wIHJ1biB0aGUgZmlybXdhcmUgKEkpICovCi0JY3B1X2N0cmwgPSB3bDEyeHhfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19FQ1BVX0NPTlRST0wpOwotCi0JLyogMTAuNS4xIHJ1biB0aGUgZmlybXdhcmUgKElJKSAqLwotCWNwdV9jdHJsICY9IH5mbGFnOwotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19FQ1BVX0NPTlRST0wsIGNwdV9jdHJsKTsKLX0KLQotc3RhdGljIHZvaWQgd2wxMjUxX3RhcmdldF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQkvKiBFbmFibGUgdGFyZ2V0J3MgaW50ZXJydXB0cyAqLwotCXdsLT5pbnRyX21hc2sgPSBXTDEyNTFfQUNYX0lOVFJfUlgwX0RBVEEgfAotCQlXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEgfAotCQlXTDEyNTFfQUNYX0lOVFJfVFhfUkVTVUxUIHwKLQkJV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EgfAotCQlXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQiB8Ci0JCVdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFOwotCXdsMTJ4eF9ib290X3RhcmdldF9lbmFibGVfaW50ZXJydXB0cyh3bCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdsMTI1MV9pcnFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JdTMyIGludHI7Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTJ4eCwgaXJxX3dvcmspOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQotCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJJUlEgd29yayIpOwotCi0JaWYgKHdsLT5zdGF0ZSA9PSBXTDEyWFhfU1RBVEVfT0ZGKQotCQlnb3RvIG91dDsKLQotCXdsMTJ4eF9wc19lbHBfd2FrZXVwKHdsKTsKLQotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywgV0wxMjUxX0FDWF9JTlRSX0FMTCk7Ci0KLQlpbnRyID0gd2wxMnh4X3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0NMRUFSKTsKLQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiaW50cjogMHgleCIsIGludHIpOwotCi0JaWYgKHdsLT5kYXRhX3BhdGgpIHsKLQkJd2wxMnh4X3NwaV9tZW1fcmVhZCh3bCwgd2wtPmRhdGFfcGF0aC0+cnhfY29udHJvbF9hZGRyLAotCQkJCSAgICAmd2wtPnJ4X2NvdW50ZXIsIHNpemVvZih1MzIpKTsKLQotCQkvKiBXZSBoYW5kbGUgYSBmcm13YXJlIGJ1ZyBoZXJlICovCi0JCXN3aXRjaCAoKHdsLT5yeF9jb3VudGVyIC0gd2wtPnJ4X2hhbmRsZWQpICYgMHhmKSB7Ci0JCWNhc2UgMDoKLQkJCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgYW5kIGhvc3QgaW4gc3luYyIpOwotCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOwotCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMV9EQVRBOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgKzEiKTsKLQkJCWludHIgfD0gV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOwotCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMV9EQVRBOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgKzIiKTsKLQkJCWludHIgfD0gV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOwotCQkJaW50ciB8PSBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXdsMTJ4eF93YXJuaW5nKCJSWDogRlcgYW5kIGhvc3Qgb3V0IG9mIHN5bmM6ICVkIiwKLQkJCQkgICAgICAgd2wtPnJ4X2NvdW50ZXIgLSB3bC0+cnhfaGFuZGxlZCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXdsLT5yeF9oYW5kbGVkID0gd2wtPnJ4X2NvdW50ZXI7Ci0KLQotCQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiUlggY291bnRlcjogJWQiLCB3bC0+cnhfY291bnRlcik7Ci0JfQotCi0JaW50ciAmPSB3bC0+aW50cl9tYXNrOwotCi0JaWYgKGludHIgPT0gMCkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiSU5UUiBpcyAwIik7Ci0JCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKLQkJCQkgICB+KHdsLT5pbnRyX21hc2spKTsKLQotCQlnb3RvIG91dF9zbGVlcDsKLQl9Ci0KLQlpZiAoaW50ciAmIFdMMTI1MV9BQ1hfSU5UUl9SWDBfREFUQSkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBIik7Ci0JCXdsMTJ4eF9yeCh3bCk7Ci0JfQotCi0JaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEpIHsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIldMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQSIpOwotCQl3bDEyeHhfcngod2wpOwotCX0KLQotCWlmIChpbnRyICYgV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVCkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVCIpOwotCQl3bDEyeHhfdHhfY29tcGxldGUod2wpOwotCX0KLQotCWlmIChpbnRyICYgKFdMMTI1MV9BQ1hfSU5UUl9FVkVOVF9BIHwgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0IpKSB7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNTFfQUNYX0lOVFJfRVZFTlQgKDB4JXgpIiwgaW50cik7Ci0JCWlmIChpbnRyICYgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EpCi0JCQl3bDEyeHhfZXZlbnRfaGFuZGxlKHdsLCAwKTsKLQkJZWxzZQotCQkJd2wxMnh4X2V2ZW50X2hhbmRsZSh3bCwgMSk7Ci0JfQotCi0JaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkKLQkJd2wxMnh4X2RlYnVnKERFQlVHX0lSUSwgIldMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFIik7Ci0KLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIH4od2wtPmludHJfbWFzaykpOwotCi1vdXRfc2xlZXA6Ci0Jd2wxMnh4X3BzX2VscF9zbGVlcCh3bCk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHdsMTI1MV9od19pbml0X3R4cV9maWxsKHU4IHFpZCwKLQkJCQkgICBzdHJ1Y3QgYWN4X3R4X3F1ZXVlX3Fvc19jb25maWcgKmNvbmZpZywKLQkJCQkgICB1MzIgbnVtX2Jsb2NrcykKLXsKLQljb25maWctPnFpZCA9IHFpZDsKLQotCXN3aXRjaCAocWlkKSB7Ci0JY2FzZSBRT1NfQUNfQkU6Ci0JCWNvbmZpZy0+aGlnaF90aHJlc2hvbGQgPQotCQkJKFFPU19UWF9ISUdIX0JFX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOwotCQljb25maWctPmxvd190aHJlc2hvbGQgPQotCQkJKFFPU19UWF9MT1dfQkVfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7Ci0JCWJyZWFrOwotCWNhc2UgUU9TX0FDX0JLOgotCQljb25maWctPmhpZ2hfdGhyZXNob2xkID0KLQkJCShRT1NfVFhfSElHSF9CS19ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKLQkJY29uZmlnLT5sb3dfdGhyZXNob2xkID0KLQkJCShRT1NfVFhfTE9XX0JLX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOwotCQlicmVhazsKLQljYXNlIFFPU19BQ19WSToKLQkJY29uZmlnLT5oaWdoX3RocmVzaG9sZCA9Ci0JCQkoUU9TX1RYX0hJR0hfVklfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7Ci0JCWNvbmZpZy0+bG93X3RocmVzaG9sZCA9Ci0JCQkoUU9TX1RYX0xPV19WSV9ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBRT1NfQUNfVk86Ci0JCWNvbmZpZy0+aGlnaF90aHJlc2hvbGQgPQotCQkJKFFPU19UWF9ISUdIX1ZPX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOwotCQljb25maWctPmxvd190aHJlc2hvbGQgPQotCQkJKFFPU19UWF9MT1dfVk9fREVGICogbnVtX2Jsb2NrcykgLyAxMDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXdsMTJ4eF9lcnJvcigiSW52YWxpZCBUWCBxdWV1ZSBpZDogJWQiLCBxaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdF90eF9xdWV1ZV9jb25maWcoc3RydWN0IHdsMTJ4eCAqd2wpCi17Ci0Jc3RydWN0IGFjeF90eF9xdWV1ZV9xb3NfY29uZmlnIGNvbmZpZzsKLQlzdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1fbWFwICp3bF9tZW1fbWFwID0gd2wtPnRhcmdldF9tZW1fbWFwOwotCWludCByZXQsIGk7Ci0KLQl3bDEyeHhfZGVidWcoREVCVUdfQUNYLCAiYWN4IHR4IHF1ZXVlIGNvbmZpZyIpOwotCi0JY29uZmlnLmhlYWRlci5pZCA9IEFDWF9UWF9RVUVVRV9DRkc7Ci0JY29uZmlnLmhlYWRlci5sZW4gPSBzaXplb2Yoc3RydWN0IGFjeF90eF9xdWV1ZV9xb3NfY29uZmlnKSAtCi0JCXNpemVvZihzdHJ1Y3QgYWN4X2hlYWRlcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9BQzsgaSsrKSB7Ci0JCXJldCA9IHdsMTI1MV9od19pbml0X3R4cV9maWxsKGksICZjb25maWcsCi0JCQkJCSAgICAgIHdsX21lbV9tYXAtPm51bV90eF9tZW1fYmxvY2tzKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IHdsMTJ4eF9jbWRfY29uZmlndXJlKHdsLCAmY29uZmlnLCBzaXplb2YoY29uZmlnKSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdF9kYXRhX3BhdGhfY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKQotewotCWludCByZXQ7Ci0KLQkvKiBhc2tpbmcgZm9yIHRoZSBkYXRhIHBhdGggcGFyYW1ldGVycyAqLwotCXdsLT5kYXRhX3BhdGggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCksCi0JCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3bC0+ZGF0YV9wYXRoKSB7Ci0JCXdsMTJ4eF9lcnJvcigiQ291bGRudCBhbGxvY2F0ZSBkYXRhIHBhdGggcGFyYW1ldGVycyIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXQgPSB3bDEyeHhfYWN4X2RhdGFfcGF0aF9wYXJhbXMod2wsIHdsLT5kYXRhX3BhdGgpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWtmcmVlKHdsLT5kYXRhX3BhdGgpOwotCQl3bC0+ZGF0YV9wYXRoID0gTlVMTDsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlzdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1fbWFwICp3bF9tZW1fbWFwOwotCWludCByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfaHdfaW5pdF9od2VuY19jb25maWcod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogVGVtcGxhdGUgc2V0dGluZ3MgKi8KLQlyZXQgPSB3bDEyeHhfaHdfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIERlZmF1bHQgbWVtb3J5IGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSB3bDEyNTFfaHdfaW5pdF9tZW1fY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIERlZmF1bHQgZGF0YSBwYXRoIGNvbmZpZ3VyYXRpb24gICovCi0JcmV0ID0gd2wxMjUxX2h3X2luaXRfZGF0YV9wYXRoX2NvbmZpZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwotCi0JLyogUlggY29uZmlnICovCi0JcmV0ID0gd2wxMnh4X2h3X2luaXRfcnhfY29uZmlnKHdsLAotCQkJCSAgICAgICBSWF9DRkdfUFJPTUlTQ1VPVVMgfCBSWF9DRkdfVFNGLAotCQkJCSAgICAgICBSWF9GSUxURVJfT1BUSU9OX0RFRik7Ci0JLyogUlhfQ09ORklHX09QVElPTl9BTllfRFNUX0FOWV9CU1MsCi0JICAgUlhfRklMVEVSX09QVElPTl9GSUxURVJfQUxMKTsgKi8KLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7Ci0KLQkvKiBUWCBxdWV1ZXMgY29uZmlnICovCi0JcmV0ID0gd2wxMjUxX2h3X2luaXRfdHhfcXVldWVfY29uZmlnKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7Ci0KLQkvKiBQSFkgbGF5ZXIgY29uZmlnICovCi0JcmV0ID0gd2wxMnh4X2h3X2luaXRfcGh5X2NvbmZpZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOwotCi0JLyogQmVhY29uIGZpbHRlcmluZyAqLwotCXJldCA9IHdsMTJ4eF9od19pbml0X2JlYWNvbl9maWx0ZXIod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKLQotCS8qIEJsdWV0b290aCBXTEFOIGNvZXhpc3RlbmNlICovCi0JcmV0ID0gd2wxMnh4X2h3X2luaXRfcHRhKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7Ci0KLQkvKiBFbmVyZ3kgZGV0ZWN0aW9uICovCi0JcmV0ID0gd2wxMnh4X2h3X2luaXRfZW5lcmd5X2RldGVjdGlvbih3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOwotCi0JLyogQmVhY29ucyBhbmQgYm9yYWRjYXN0IHNldHRpbmdzICovCi0JcmV0ID0gd2wxMnh4X2h3X2luaXRfYmVhY29uX2Jyb2FkY2FzdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOwotCi0JLyogRW5hYmxlIGRhdGEgcGF0aCAqLwotCXJldCA9IHdsMTJ4eF9jbWRfZGF0YV9wYXRoKHdsLCB3bC0+Y2hhbm5lbCwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOwotCi0JLyogRGVmYXVsdCBwb3dlciBzdGF0ZSAqLwotCXJldCA9IHdsMTJ4eF9od19pbml0X3Bvd2VyX2F1dGgod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKLQotCXdsX21lbV9tYXAgPSB3bC0+dGFyZ2V0X21lbV9tYXA7Ci0Jd2wxMnh4X2luZm8oIiVkIHR4IGJsb2NrcyBhdCAweCV4LCAlZCByeCBibG9ja3MgYXQgMHgleCIsCi0JCSAgICB3bF9tZW1fbWFwLT5udW1fdHhfbWVtX2Jsb2NrcywKLQkJICAgIHdsLT5kYXRhX3BhdGgtPnR4X2NvbnRyb2xfYWRkciwKLQkJICAgIHdsX21lbV9tYXAtPm51bV9yeF9tZW1fYmxvY2tzLAotCQkgICAgd2wtPmRhdGFfcGF0aC0+cnhfY29udHJvbF9hZGRyKTsKLQotCXJldHVybiAwOwotCi0gb3V0X2ZyZWVfZGF0YV9wYXRoOgotCWtmcmVlKHdsLT5kYXRhX3BhdGgpOwotCi0gb3V0X2ZyZWVfbWVtbWFwOgotCWtmcmVlKHdsLT50YXJnZXRfbWVtX21hcCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHdsMTI1MV9wbHRfaW5pdChzdHJ1Y3Qgd2wxMnh4ICp3bCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSB3bDEyeHhfY21kX2RhdGFfcGF0aCh3bCwgd2wtPmNoYW5uZWwsIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgd2wxMjUxX3NldHVwKHN0cnVjdCB3bDEyeHggKndsKQotewotCS8qIEZJWE1FOiBJcyBpdCBiZXR0ZXIgdG8gdXNlIHN0cm5jcHkgaGVyZSBvciBpcyB0aGlzIG9rPyAqLwotCXdsLT5jaGlwLmZ3X2ZpbGVuYW1lID0gV0wxMjUxX0ZXX05BTUU7Ci0Jd2wtPmNoaXAubnZzX2ZpbGVuYW1lID0gV0wxMjUxX05WU19OQU1FOwotCi0JLyogTm93IHdlIGtub3cgd2hhdCBjaGlwIHdlJ3JlIHVzaW5nLCBzbyBhZGp1c3QgdGhlIHBvd2VyIG9uIHNsZWVwCi0JICogdGltZSBhY2NvcmRpbmdseSAqLwotCXdsLT5jaGlwLnBvd2VyX29uX3NsZWVwID0gV0wxMjUxX1BPV0VSX09OX1NMRUVQOwotCi0Jd2wtPmNoaXAuaW50cl9jbWRfY29tcGxldGUgPSBXTDEyNTFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFOwotCXdsLT5jaGlwLmludHJfaW5pdF9jb21wbGV0ZSA9IFdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFOwotCi0Jd2wtPmNoaXAub3BfdXBsb2FkX252cyA9IHdsMTI1MV91cGxvYWRfbnZzOwotCXdsLT5jaGlwLm9wX3VwbG9hZF9mdyA9IHdsMTI1MV91cGxvYWRfZmlybXdhcmU7Ci0Jd2wtPmNoaXAub3BfYm9vdCA9IHdsMTI1MV9ib290OwotCXdsLT5jaGlwLm9wX3NldF9lY3B1X2N0cmwgPSB3bDEyNTFfc2V0X2VjcHVfY3RybDsKLQl3bC0+Y2hpcC5vcF90YXJnZXRfZW5hYmxlX2ludGVycnVwdHMgPSB3bDEyNTFfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzOwotCXdsLT5jaGlwLm9wX2h3X2luaXQgPSB3bDEyNTFfaHdfaW5pdDsKLQl3bC0+Y2hpcC5vcF9wbHRfaW5pdCA9IHdsMTI1MV9wbHRfaW5pdDsKLQotCXdsLT5jaGlwLnBfdGFibGUgPSB3bDEyNTFfcGFydF90YWJsZTsKLQl3bC0+Y2hpcC5hY3hfcmVnX3RhYmxlID0gd2wxMjUxX2FjeF9yZWdfdGFibGU7Ci0KLQlJTklUX1dPUksoJndsLT5pcnFfd29yaywgd2wxMjUxX2lycV93b3JrKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaAppbmRleCAxZjRhNDQzLi45OThlNGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oCkBAIC0xLDcgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CiAgKgpAQCAtMjQsMTQyICsyNSw0MDAgQEAKICNpZm5kZWYgX19XTDEyNTFfSF9fCiAjZGVmaW5lIF9fV0wxMjUxX0hfXwogCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJhY3guaCIKKyNkZWZpbmUgRFJJVkVSX05BTUUgIndsMTI1MSIKKyNkZWZpbmUgRFJJVkVSX1BSRUZJWCBEUklWRVJfTkFNRSAiOiAiCisKK2VudW0geworCURFQlVHX05PTkUJPSAwLAorCURFQlVHX0lSUQk9IEJJVCgwKSwKKwlERUJVR19TUEkJPSBCSVQoMSksCisJREVCVUdfQk9PVAk9IEJJVCgyKSwKKwlERUJVR19NQUlMQk9YCT0gQklUKDMpLAorCURFQlVHX05FVExJTksJPSBCSVQoNCksCisJREVCVUdfRVZFTlQJPSBCSVQoNSksCisJREVCVUdfVFgJPSBCSVQoNiksCisJREVCVUdfUlgJPSBCSVQoNyksCisJREVCVUdfU0NBTgk9IEJJVCg4KSwKKwlERUJVR19DUllQVAk9IEJJVCg5KSwKKwlERUJVR19QU00JPSBCSVQoMTApLAorCURFQlVHX01BQzgwMjExCT0gQklUKDExKSwKKwlERUJVR19DTUQJPSBCSVQoMTIpLAorCURFQlVHX0FDWAk9IEJJVCgxMyksCisJREVCVUdfQUxMCT0gfjAsCit9OworCisjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19OT05FKQorCisjZGVmaW5lIERFQlVHX0RVTVBfTElNSVQgMTAyNAorCisjZGVmaW5lIHdsMTI1MV9lcnJvcihmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0VSUiBEUklWRVJfUFJFRklYICJFUlJPUiAiIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSB3bDEyNTFfd2FybmluZyhmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX1BSRUZJWCAiV0FSTklORyAiIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSB3bDEyNTFfbm90aWNlKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSB3bDEyNTFfaW5mbyhmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHdsMTI1MV9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgd2wxMjUxX2R1bXAobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCisJCQkJICAgICAgIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCVwKKwkJCQkgICAgICAgYnVmLAkJCQlcCisJCQkJICAgICAgIG1pbl90KHNpemVfdCwgbGVuLCBERUJVR19EVU1QX0xJTUlUKSwgXAorCQkJCSAgICAgICAwKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgd2wxMjUxX2R1bXBfYXNjaWkobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCisJCQkJICAgICAgIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCVwKKwkJCQkgICAgICAgYnVmLAkJCQlcCisJCQkJICAgICAgIG1pbl90KHNpemVfdCwgbGVuLCBERUJVR19EVU1QX0xJTUlUKSwgXAorCQkJCSAgICAgICB0cnVlKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgV0wxMjUxX0RFRkFVTFRfUlhfQ09ORklHIChDRkdfVU5JX0ZJTFRFUl9FTiB8CVwKKwkJCQkgIENGR19CU1NJRF9GSUxURVJfRU4pCisKKyNkZWZpbmUgV0wxMjUxX0RFRkFVTFRfUlhfRklMVEVSIChDRkdfUlhfUFJTUF9FTiB8ICBcCisJCQkJICBDRkdfUlhfTUdNVF9FTiB8ICBcCisJCQkJICBDRkdfUlhfREFUQV9FTiB8ICBcCisJCQkJICBDRkdfUlhfQ1RMX0VOIHwgICBcCisJCQkJICBDRkdfUlhfQkNOX0VOIHwgICBcCisJCQkJICBDRkdfUlhfQVVUSF9FTiB8ICBcCisJCQkJICBDRkdfUlhfQVNTT0NfRU4pCisKKyNkZWZpbmUgV0wxMjUxX0JVU1lfV09SRF9MRU4gOAorCitzdHJ1Y3QgYm9vdF9hdHRyIHsKKwl1MzIgcmFkaW9fdHlwZTsKKwl1OCBtYWNfY2xvY2s7CisJdTggYXJtX2Nsb2NrOworCWludCBmaXJtd2FyZV9kZWJ1ZzsKKwl1MzIgbWlub3I7CisJdTMyIG1ham9yOworCXUzMiBidWdmaXg7Cit9OworCitlbnVtIHdsMTI1MV9zdGF0ZSB7CisJV0wxMjUxX1NUQVRFX09GRiwKKwlXTDEyNTFfU1RBVEVfT04sCisJV0wxMjUxX1NUQVRFX1BMVCwKK307CisKK2VudW0gd2wxMjUxX3BhcnRpdGlvbl90eXBlIHsKKwlQQVJUX0RPV04sCisJUEFSVF9XT1JLLAorCVBBUlRfRFJQVywKKworCVBBUlRfVEFCTEVfTEVOCit9OworCitzdHJ1Y3Qgd2wxMjUxX3BhcnRpdGlvbiB7CisJdTMyIHNpemU7CisJdTMyIHN0YXJ0OworfTsKKworc3RydWN0IHdsMTI1MV9wYXJ0aXRpb25fc2V0IHsKKwlzdHJ1Y3Qgd2wxMjUxX3BhcnRpdGlvbiBtZW07CisJc3RydWN0IHdsMTI1MV9wYXJ0aXRpb24gcmVnOworfTsKKworc3RydWN0IHdsMTI1MTsKKworc3RydWN0IHdsMTI1MV9zdGF0cyB7CisJc3RydWN0IGFjeF9zdGF0aXN0aWNzICpmd19zdGF0czsKKwl1bnNpZ25lZCBsb25nIGZ3X3N0YXRzX3VwZGF0ZTsKKworCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgZXhjZXNzaXZlX3JldHJpZXM7Cit9OworCitzdHJ1Y3Qgd2wxMjUxX2RlYnVnZnMgeworCXN0cnVjdCBkZW50cnkgKnJvb3RkaXI7CisJc3RydWN0IGRlbnRyeSAqZndfc3RhdGlzdGljczsKKworCXN0cnVjdCBkZW50cnkgKnR4X2ludGVybmFsX2Rlc2Nfb3ZlcmZsb3c7CisKKwlzdHJ1Y3QgZGVudHJ5ICpyeF9vdXRfb2ZfbWVtOworCXN0cnVjdCBkZW50cnkgKnJ4X2hkcl9vdmVyZmxvdzsKKwlzdHJ1Y3QgZGVudHJ5ICpyeF9od19zdHVjazsKKwlzdHJ1Y3QgZGVudHJ5ICpyeF9kcm9wcGVkOworCXN0cnVjdCBkZW50cnkgKnJ4X2Zjc19lcnI7CisJc3RydWN0IGRlbnRyeSAqcnhfeGZyX2hpbnRfdHJpZzsKKwlzdHJ1Y3QgZGVudHJ5ICpyeF9wYXRoX3Jlc2V0OworCXN0cnVjdCBkZW50cnkgKnJ4X3Jlc2V0X2NvdW50ZXI7CisKKwlzdHJ1Y3QgZGVudHJ5ICpkbWFfcnhfcmVxdWVzdGVkOworCXN0cnVjdCBkZW50cnkgKmRtYV9yeF9lcnJvcnM7CisJc3RydWN0IGRlbnRyeSAqZG1hX3R4X3JlcXVlc3RlZDsKKwlzdHJ1Y3QgZGVudHJ5ICpkbWFfdHhfZXJyb3JzOworCisJc3RydWN0IGRlbnRyeSAqaXNyX2NtZF9jbXBsdDsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfZmlxczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfcnhfaGVhZGVyczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfcnhfbWVtX292ZXJmbG93OworCXN0cnVjdCBkZW50cnkgKmlzcl9yeF9yZHlzOworCXN0cnVjdCBkZW50cnkgKmlzcl9pcnFzOworCXN0cnVjdCBkZW50cnkgKmlzcl90eF9wcm9jczsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfZGVjcnlwdF9kb25lOworCXN0cnVjdCBkZW50cnkgKmlzcl9kbWEwX2RvbmU7CisJc3RydWN0IGRlbnRyeSAqaXNyX2RtYTFfZG9uZTsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfdHhfZXhjaF9jb21wbGV0ZTsKKwlzdHJ1Y3QgZGVudHJ5ICppc3JfY29tbWFuZHM7CisJc3RydWN0IGRlbnRyeSAqaXNyX3J4X3Byb2NzOworCXN0cnVjdCBkZW50cnkgKmlzcl9od19wbV9tb2RlX2NoYW5nZXM7CisJc3RydWN0IGRlbnRyeSAqaXNyX2hvc3RfYWNrbm93bGVkZ2VzOworCXN0cnVjdCBkZW50cnkgKmlzcl9wY2lfcG07CisJc3RydWN0IGRlbnRyeSAqaXNyX3dha2V1cHM7CisJc3RydWN0IGRlbnRyeSAqaXNyX2xvd19yc3NpOworCisJc3RydWN0IGRlbnRyeSAqd2VwX2FkZHJfa2V5X2NvdW50OworCXN0cnVjdCBkZW50cnkgKndlcF9kZWZhdWx0X2tleV9jb3VudDsKKwkvKiBza2lwcGluZyB3ZXAucmVzZXJ2ZWQgKi8KKwlzdHJ1Y3QgZGVudHJ5ICp3ZXBfa2V5X25vdF9mb3VuZDsKKwlzdHJ1Y3QgZGVudHJ5ICp3ZXBfZGVjcnlwdF9mYWlsOworCXN0cnVjdCBkZW50cnkgKndlcF9wYWNrZXRzOworCXN0cnVjdCBkZW50cnkgKndlcF9pbnRlcnJ1cHQ7CisKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfcHNfZW50ZXI7CisJc3RydWN0IGRlbnRyeSAqcHdyX2VscF9lbnRlcjsKKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfbWlzc2luZ19iY25zOworCXN0cnVjdCBkZW50cnkgKnB3cl93YWtlX29uX2hvc3Q7CisJc3RydWN0IGRlbnRyeSAqcHdyX3dha2Vfb25fdGltZXJfZXhwOworCXN0cnVjdCBkZW50cnkgKnB3cl90eF93aXRoX3BzOworCXN0cnVjdCBkZW50cnkgKnB3cl90eF93aXRob3V0X3BzOworCXN0cnVjdCBkZW50cnkgKnB3cl9yY3ZkX2JlYWNvbnM7CisJc3RydWN0IGRlbnRyeSAqcHdyX3Bvd2VyX3NhdmVfb2ZmOworCXN0cnVjdCBkZW50cnkgKnB3cl9lbmFibGVfcHM7CisJc3RydWN0IGRlbnRyeSAqcHdyX2Rpc2FibGVfcHM7CisJc3RydWN0IGRlbnRyeSAqcHdyX2ZpeF90c2ZfcHM7CisJLyogc2tpcHBpbmcgY29udF9taXNzX2JjbnNfc3ByZWFkIGZvciBub3cgKi8KKwlzdHJ1Y3QgZGVudHJ5ICpwd3JfcmN2ZF9hd2FrZV9iZWFjb25zOworCisJc3RydWN0IGRlbnRyeSAqbWljX3J4X3BrdHM7CisJc3RydWN0IGRlbnRyeSAqbWljX2NhbGNfZmFpbHVyZTsKKworCXN0cnVjdCBkZW50cnkgKmFlc19lbmNyeXB0X2ZhaWw7CisJc3RydWN0IGRlbnRyeSAqYWVzX2RlY3J5cHRfZmFpbDsKKwlzdHJ1Y3QgZGVudHJ5ICphZXNfZW5jcnlwdF9wYWNrZXRzOworCXN0cnVjdCBkZW50cnkgKmFlc19kZWNyeXB0X3BhY2tldHM7CisJc3RydWN0IGRlbnRyeSAqYWVzX2VuY3J5cHRfaW50ZXJydXB0OworCXN0cnVjdCBkZW50cnkgKmFlc19kZWNyeXB0X2ludGVycnVwdDsKKworCXN0cnVjdCBkZW50cnkgKmV2ZW50X2hlYXJ0X2JlYXQ7CisJc3RydWN0IGRlbnRyeSAqZXZlbnRfY2FsaWJyYXRpb247CisJc3RydWN0IGRlbnRyeSAqZXZlbnRfcnhfbWlzbWF0Y2g7CisJc3RydWN0IGRlbnRyeSAqZXZlbnRfcnhfbWVtX2VtcHR5OworCXN0cnVjdCBkZW50cnkgKmV2ZW50X3J4X3Bvb2w7CisJc3RydWN0IGRlbnRyeSAqZXZlbnRfb29tX2xhdGU7CisJc3RydWN0IGRlbnRyeSAqZXZlbnRfcGh5X3RyYW5zbWl0X2Vycm9yOworCXN0cnVjdCBkZW50cnkgKmV2ZW50X3R4X3N0dWNrOworCisJc3RydWN0IGRlbnRyeSAqcHNfcHNwb2xsX3RpbWVvdXRzOworCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfdGltZW91dHM7CisJc3RydWN0IGRlbnRyeSAqcHNfdXBzZF9tYXhfc3B0aW1lOworCXN0cnVjdCBkZW50cnkgKnBzX3Vwc2RfbWF4X2FwdHVybjsKKwlzdHJ1Y3QgZGVudHJ5ICpwc19wc3BvbGxfbWF4X2FwdHVybjsKKwlzdHJ1Y3QgZGVudHJ5ICpwc19wc3BvbGxfdXRpbGl6YXRpb247CisJc3RydWN0IGRlbnRyeSAqcHNfdXBzZF91dGlsaXphdGlvbjsKKworCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9yeF9wcmVwX2JlYWNvbl9kcm9wOworCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9kZXNjcl9ob3N0X2ludF90cmlnX3J4X2RhdGE7CisJc3RydWN0IGRlbnRyeSAqcnhwaXBlX2JlYWNvbl9idWZmZXJfdGhyZXNfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOworCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV9taXNzZWRfYmVhY29uX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKKwlzdHJ1Y3QgZGVudHJ5ICpyeHBpcGVfdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YTsKKworCXN0cnVjdCBkZW50cnkgKnR4X3F1ZXVlX2xlbjsKKworCXN0cnVjdCBkZW50cnkgKnJldHJ5X2NvdW50OworCXN0cnVjdCBkZW50cnkgKmV4Y2Vzc2l2ZV9yZXRyaWVzOworfTsKKworc3RydWN0IHdsMTI1MV9pZl9vcGVyYXRpb25zIHsKKwl2b2lkICgqcmVhZCkoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworCXZvaWQgKCp3cml0ZSkoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworCXZvaWQgKCpyZXNldCkoc3RydWN0IHdsMTI1MSAqd2wpOworCXZvaWQgKCplbmFibGVfaXJxKShzdHJ1Y3Qgd2wxMjUxICp3bCk7CisJdm9pZCAoKmRpc2FibGVfaXJxKShzdHJ1Y3Qgd2wxMjUxICp3bCk7Cit9OworCitzdHJ1Y3Qgd2wxMjUxIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlib29sIG1hYzgwMjExX3JlZ2lzdGVyZWQ7CisKKwl2b2lkICppZl9wcml2OworCWNvbnN0IHN0cnVjdCB3bDEyNTFfaWZfb3BlcmF0aW9ucyAqaWZfb3BzOworCisJdm9pZCAoKnNldF9wb3dlcikoYm9vbCBlbmFibGUpOworCWludCBpcnE7CisKKwllbnVtIHdsMTI1MV9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwlpbnQgcGh5c2ljYWxfbWVtX2FkZHI7CisJaW50IHBoeXNpY2FsX3JlZ19hZGRyOworCWludCB2aXJ0dWFsX21lbV9hZGRyOworCWludCB2aXJ0dWFsX3JlZ19hZGRyOworCisJaW50IGNtZF9ib3hfYWRkcjsKKwlpbnQgZXZlbnRfYm94X2FkZHI7CisJc3RydWN0IGJvb3RfYXR0ciBib290X2F0dHI7CisKKwl1OCAqZnc7CisJc2l6ZV90IGZ3X2xlbjsKKwl1OCAqbnZzOworCXNpemVfdCBudnNfbGVuOworCisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBsaXN0ZW5faW50OworCWludCBjaGFubmVsOworCisJdm9pZCAqdGFyZ2V0X21lbV9tYXA7CisJc3RydWN0IGFjeF9kYXRhX3BhdGhfcGFyYW1zX3Jlc3AgKmRhdGFfcGF0aDsKKworCS8qIE51bWJlciBvZiBUWCBwYWNrZXRzIHRyYW5zZmVycmVkIHRvIHRoZSBGVywgbW9kdWxvIDE2ICovCisJdTMyIGRhdGFfaW5fY291bnQ7CisKKwkvKiBGcmFtZXMgc2NoZWR1bGVkIGZvciB0cmFuc21pc3Npb24sIG5vdCBoYW5kbGVkIHlldCAqLworCXN0cnVjdCBza19idWZmX2hlYWQgdHhfcXVldWU7CisJYm9vbCB0eF9xdWV1ZV9zdG9wcGVkOworCisJc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IGZpbHRlcl93b3JrOworCisJLyogUGVuZGluZyBUWCBmcmFtZXMgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqdHhfZnJhbWVzWzE2XTsKKworCS8qCisJICogSW5kZXggcG9pbnRpbmcgdG8gdGhlIG5leHQgVFggY29tcGxldGUgZW50cnkKKwkgKiBpbiB0aGUgY3ljbGljIFhUIGNvbXBsZXRlIGFycmF5IHdlIGdldCBmcm9tCisJICogdGhlIEZXLgorCSAqLworCXUzMiBuZXh0X3R4X2NvbXBsZXRlOworCisJLyogRlcgUnggY291bnRlciAqLworCXUzMiByeF9jb3VudGVyOworCisJLyogUnggZnJhbWVzIGhhbmRsZWQgKi8KKwl1MzIgcnhfaGFuZGxlZDsKKworCS8qIEN1cnJlbnQgZG91YmxlIGJ1ZmZlciAqLworCXUzMiByeF9jdXJyZW50X2J1ZmZlcjsKKwl1MzIgcnhfbGFzdF9pZDsKKworCS8qIFRoZSB0YXJnZXQgaW50ZXJydXB0IG1hc2sgKi8KKwl1MzIgaW50cl9tYXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfd29yazsKKworCS8qIFRoZSBtYm94IGV2ZW50IG1hc2sgKi8KKwl1MzIgZXZlbnRfbWFzazsKKworCS8qIE1haWxib3ggcG9pbnRlcnMgKi8KKwl1MzIgbWJveF9wdHJbMl07CisKKwkvKiBBcmUgd2UgY3VycmVudGx5IHNjYW5uaW5nICovCisJYm9vbCBzY2FubmluZzsKKworCS8qIE91ciBhc3NvY2lhdGlvbiBJRCAqLworCXUxNiBhaWQ7CisKKwkvKiBEZWZhdWx0IGtleSAoZm9yIFdFUCkgKi8KKwl1MzIgZGVmYXVsdF9rZXk7CisKKwl1bnNpZ25lZCBpbnQgdHhfbWdtdF9mcm1fcmF0ZTsKKwl1bnNpZ25lZCBpbnQgdHhfbWdtdF9mcm1fbW9kOworCisJdW5zaWduZWQgaW50IHJ4X2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQgcnhfZmlsdGVyOworCisJLyogaXMgZmlybXdhcmUgaW4gZWxwIG1vZGUgKi8KKwlib29sIGVscDsKKworCS8qIHdlIGNhbiBiZSBpbiBwc20sIGJ1dCBub3QgaW4gZWxwLCB3ZSBoYXZlIHRvIGRpZmZlcmVudGlhdGUgKi8KKwlib29sIHBzbTsKKworCS8qIFBTTSBtb2RlIHJlcXVlc3RlZCAqLworCWJvb2wgcHNtX3JlcXVlc3RlZDsKKworCXUxNiBiZWFjb25faW50OworCXU4IGR0aW1fcGVyaW9kOworCisJLyogaW4gZEJtICovCisJaW50IHBvd2VyX2xldmVsOworCisJc3RydWN0IHdsMTI1MV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3Qgd2wxMjUxX2RlYnVnZnMgZGVidWdmczsKKworCXUzMiBidWZmZXJfMzI7CisJdTMyIGJ1ZmZlcl9jbWQ7CisJdTggYnVmZmVyX2J1c3l3b3JkW1dMMTI1MV9CVVNZX1dPUkRfTEVOXTsKKwlzdHJ1Y3Qgd2wxMjUxX3J4X2Rlc2NyaXB0b3IgKnJ4X2Rlc2NyaXB0b3I7CisKKwl1MzIgY2hpcF9pZDsKKwljaGFyIGZ3X3ZlclsyMV07Cit9OworCitpbnQgd2wxMjUxX3BsdF9zdGFydChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX3BsdF9zdG9wKHN0cnVjdCB3bDEyNTEgKndsKTsKKworc3RydWN0IGllZWU4MDIxMV9odyAqd2wxMjUxX2FsbG9jX2h3KHZvaWQpOworaW50IHdsMTI1MV9mcmVlX2h3KHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTI1MSAqd2wpOwordm9pZCB3bDEyNTFfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI1MSAqd2wpOwordm9pZCB3bDEyNTFfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNTEgKndsKTsKKworI2RlZmluZSBERUZBVUxUX0hXX0dFTl9NT0RVTEFUSU9OX1RZUEUgICAgQ0NLX0xPTkcgLyogTG9uZyBQcmVhbWJsZSAqLworI2RlZmluZSBERUZBVUxUX0hXX0dFTl9UWF9SQVRFICAgICAgICAgIFJBVEVfMk1CUFMKKyNkZWZpbmUgSk9JTl9USU1FT1VUIDUwMDAgLyogNTAwMCBtaWxsaXNlY29uZHMgdG8gam9pbiAqLworCisjZGVmaW5lIFdMMTI1MV9ERUZBVUxUX1BPV0VSX0xFVkVMIDIwCisKKyNkZWZpbmUgV0wxMjUxX1RYX1FVRVVFX01BWF9MRU5HVEggMjAKKworI2RlZmluZSBXTDEyNTFfREVGQVVMVF9CRUFDT05fSU5UIDEwMAorI2RlZmluZSBXTDEyNTFfREVGQVVMVF9EVElNX1BFUklPRCAxCisKKyNkZWZpbmUgV0wxMjUxX0RFRkFVTFRfQ0hBTk5FTCAwCisKKyNkZWZpbmUgQ0hJUF9JRF8xMjUxX1BHMTAJICAgICAgICAgICAoMHg3MDEwMTAxKQorI2RlZmluZSBDSElQX0lEXzEyNTFfUEcxMQkgICAgICAgICAgICgweDcwMjAxMDEpCisjZGVmaW5lIENISVBfSURfMTI1MV9QRzEyCSAgICAgICAgICAgKDB4NzAzMDEwMSkKKyNkZWZpbmUgQ0hJUF9JRF8xMjcxX1BHMTAJICAgICAgICAgICAoMHg0MDMwMTAxKQorI2RlZmluZSBDSElQX0lEXzEyNzFfUEcyMAkgICAgICAgICAgICgweDQwMzAxMTEpCiAKICNkZWZpbmUgV0wxMjUxX0ZXX05BTUUgIndsMTI1MS1mdy5iaW4iCiAjZGVmaW5lIFdMMTI1MV9OVlNfTkFNRSAid2wxMjUxLW52cy5iaW4iCiAKICNkZWZpbmUgV0wxMjUxX1BPV0VSX09OX1NMRUVQIDEwIC8qIGluIG1pbGlzZWNvbmRzICovCiAKLXZvaWQgd2wxMjUxX3NldHVwKHN0cnVjdCB3bDEyeHggKndsKTsKKyNkZWZpbmUgV0wxMjUxX1BBUlRfRE9XTl9NRU1fU1RBUlQJMHgwCisjZGVmaW5lIFdMMTI1MV9QQVJUX0RPV05fTUVNX1NJWkUJMHgxNjgwMAorI2RlZmluZSBXTDEyNTFfUEFSVF9ET1dOX1JFR19TVEFSVAlSRUdJU1RFUlNfQkFTRQorI2RlZmluZSBXTDEyNTFfUEFSVF9ET1dOX1JFR19TSVpFCVJFR0lTVEVSU19ET1dOX1NJWkUKIAotCi1zdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1vcnkgewotCV9fbGUxNiBudW1fc3RhdGlvbnM7IC8qIG51bWJlciBvZiBTVEFzIHRvIGJlIHN1cHBvcnRlZC4gKi8KLQl1MTYgcmVzZXJ2ZWRfMTsKLQotCS8qCi0JICogTm1iZXIgb2YgbWVtb3J5IGJ1ZmZlcnMgZm9yIHRoZSBSWCBtZW0gcG9vbC4KLQkgKiBUaGUgYWN0dWFsIG51bWJlciBtYXkgYmUgbGVzcyBpZiB0aGVyZSBhcmUKLQkgKiBub3QgZW5vdWdoIGJsb2NrcyBsZWZ0IGZvciB0aGUgbWluaW11bSBudW0KLQkgKiBvZiBUWCBvbmVzLgotCSAqLwotCXU4IHJ4X21lbV9ibG9ja19udW07Ci0JdTggcmVzZXJ2ZWRfMjsKLQl1OCBudW1fdHhfcXVldWVzOyAvKiBGcm9tIDEgdG8gMTYgKi8KLQl1OCBob3N0X2lmX29wdGlvbnM7IC8qIEhPU1RfSUYqICovCi0JdTggdHhfbWluX21lbV9ibG9ja19udW07Ci0JdTggbnVtX3NzaWRfcHJvZmlsZXM7Ci0JX19sZTE2IGRlYnVnX2J1ZmZlcl9zaXplOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLQotI2RlZmluZSBBQ1hfUlhfREVTQ19NSU4gICAgICAgICAgICAgICAgMQotI2RlZmluZSBBQ1hfUlhfREVTQ19NQVggICAgICAgICAgICAgICAgMTI3Ci0jZGVmaW5lIEFDWF9SWF9ERVNDX0RFRiAgICAgICAgICAgICAgICAzMgotc3RydWN0IHdsMTI1MV9hY3hfcnhfcXVldWVfY29uZmlnIHsKLQl1OCBudW1fZGVzY3M7Ci0JdTggcGFkOwotCXU4IHR5cGU7Ci0JdTggcHJpb3JpdHk7Ci0JX19sZTMyIGRtYV9hZGRyZXNzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgQUNYX1RYX0RFU0NfTUlOICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQUNYX1RYX0RFU0NfTUFYICAgICAgICAgICAgICAgIDEyNwotI2RlZmluZSBBQ1hfVFhfREVTQ19ERUYgICAgICAgICAgICAgICAgMTYKLXN0cnVjdCB3bDEyNTFfYWN4X3R4X3F1ZXVlX2NvbmZpZyB7Ci0gICAgdTggbnVtX2Rlc2NzOwotICAgIHU4IHBhZFsyXTsKLSAgICB1OCBhdHRyaWJ1dGVzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgTUFYX1RYX1FVRVVFX0NPTkZJR1MgNQotI2RlZmluZSBNQVhfVFhfUVVFVUVTIDQKLXN0cnVjdCB3bDEyNTFfYWN4X2NvbmZpZ19tZW1vcnkgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXN0cnVjdCB3bDEyNTFfYWN4X21lbW9yeSBtZW1fY29uZmlnOwotCXN0cnVjdCB3bDEyNTFfYWN4X3J4X3F1ZXVlX2NvbmZpZyByeF9xdWV1ZV9jb25maWc7Ci0Jc3RydWN0IHdsMTI1MV9hY3hfdHhfcXVldWVfY29uZmlnIHR4X3F1ZXVlX2NvbmZpZ1tNQVhfVFhfUVVFVUVfQ09ORklHU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHdsMTI1MV9hY3hfbWVtX21hcCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0Jdm9pZCAqY29kZV9zdGFydDsKLQl2b2lkICpjb2RlX2VuZDsKLQotCXZvaWQgKndlcF9kZWZrZXlfc3RhcnQ7Ci0Jdm9pZCAqd2VwX2RlZmtleV9lbmQ7Ci0KLQl2b2lkICpzdGFfdGFibGVfc3RhcnQ7Ci0Jdm9pZCAqc3RhX3RhYmxlX2VuZDsKLQotCXZvaWQgKnBhY2tldF90ZW1wbGF0ZV9zdGFydDsKLQl2b2lkICpwYWNrZXRfdGVtcGxhdGVfZW5kOwotCi0Jdm9pZCAqcXVldWVfbWVtb3J5X3N0YXJ0OwotCXZvaWQgKnF1ZXVlX21lbW9yeV9lbmQ7Ci0KLQl2b2lkICpwYWNrZXRfbWVtb3J5X3Bvb2xfc3RhcnQ7Ci0Jdm9pZCAqcGFja2V0X21lbW9yeV9wb29sX2VuZDsKLQotCXZvaWQgKmRlYnVnX2J1ZmZlcjFfc3RhcnQ7Ci0Jdm9pZCAqZGVidWdfYnVmZmVyMV9lbmQ7Ci0KLQl2b2lkICpkZWJ1Z19idWZmZXIyX3N0YXJ0OwotCXZvaWQgKmRlYnVnX2J1ZmZlcjJfZW5kOwotCi0JLyogTnVtYmVyIG9mIGJsb2NrcyBGVyBhbGxvY2F0ZWQgZm9yIFRYIHBhY2tldHMgKi8KLQl1MzIgbnVtX3R4X21lbV9ibG9ja3M7Ci0KLQkvKiBOdW1iZXIgb2YgYmxvY2tzIEZXIGFsbG9jYXRlZCBmb3IgUlggcGFja2V0cyAqLwotCXUzMiBudW1fcnhfbWVtX2Jsb2NrczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgSG9zdCBJbnRlcnJ1cHQgUmVnaXN0ZXIgKFdpTGluayAtPiBIb3N0KQotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogUlggcGFja2V0IGlzIHJlYWR5IGluIFhmZXIgYnVmZmVyICMwICovCi0jZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9SWDBfREFUQSAgICAgIEJJVCgwKQotCi0vKiBUWCByZXN1bHQocykgYXJlIGluIHRoZSBUWCBjb21wbGV0ZSBidWZmZXIgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVAlCSVQoMSkKLQotLyogT0JTT0xFVEUgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RYX1hGUgkJQklUKDIpCi0KLS8qIFJYIHBhY2tldCBpcyByZWFkeSBpbiBYZmVyIGJ1ZmZlciAjMSAqLwotI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEJQklUKDMpCi0KLS8qIEV2ZW50IHdhcyBlbnRlcmVkIHRvIEV2ZW50IE1CT1ggI0EgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EJCUJJVCg0KQotCi0vKiBFdmVudCB3YXMgZW50ZXJlZCB0byBFdmVudCBNQk9YICNCICovCi0jZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9FVkVOVF9CCQlCSVQoNSkKLQotLyogT0JTT0xFVEUgKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1dBS0VfT05fSE9TVAlCSVQoNikKLQotLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNBICovCi0jZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9UUkFDRV9BCQlCSVQoNykKLQotLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNCICovCi0jZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9UUkFDRV9CCQlCSVQoOCkKLQotLyogQ29tbWFuZCBwcm9jZXNzaW5nIGNvbXBsZXRpb24gKi8KLSNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0NNRF9DT01QTEVURQlCSVQoOSkKLQotLyogSW5pdCBzZXF1ZW5jZSBpcyBkb25lICovCi0jZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFCUJJVCgxNCkKLQotI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfQUxMICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFdMMTI1MV9QQVJUX1dPUktfTUVNX1NUQVJUCTB4MjgwMDAKKyNkZWZpbmUgV0wxMjUxX1BBUlRfV09SS19NRU1fU0laRQkweDE0MDAwCisjZGVmaW5lIFdMMTI1MV9QQVJUX1dPUktfUkVHX1NUQVJUCVJFR0lTVEVSU19CQVNFCisjZGVmaW5lIFdMMTI1MV9QQVJUX1dPUktfUkVHX1NJWkUJUkVHSVNURVJTX1dPUktfU0laRQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjI2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5jCkBAIC0wLDAgKzEsOTE4IEBACisjaW5jbHVkZSAid2wxMjUxX2FjeC5oIgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorCisjaW5jbHVkZSAid2wxMjUxLmgiCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcHMuaCIKKworaW50IHdsMTI1MV9hY3hfZnJhbWVfcmF0ZXMoc3RydWN0IHdsMTI1MSAqd2wsIHU4IGN0cmxfcmF0ZSwgdTggY3RybF9tb2QsCisJCQkgICB1OCBtZ3RfcmF0ZSwgdTggbWd0X21vZCkKK3sKKwlzdHJ1Y3QgYWN4X2Z3X2dlbl9mcmFtZV9yYXRlcyAqcmF0ZXM7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZnJhbWUgcmF0ZXMiKTsKKworCXJhdGVzID0ga3phbGxvYyhzaXplb2YoKnJhdGVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYXRlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyYXRlcy0+dHhfY3RybF9mcmFtZV9yYXRlID0gY3RybF9yYXRlOworCXJhdGVzLT50eF9jdHJsX2ZyYW1lX21vZCA9IGN0cmxfbW9kOworCXJhdGVzLT50eF9tZ3RfZnJhbWVfcmF0ZSA9IG1ndF9yYXRlOworCXJhdGVzLT50eF9tZ3RfZnJhbWVfbW9kID0gbWd0X21vZDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfRldfR0VOX0ZSQU1FX1JBVEVTLAorCQkJCSAgIHJhdGVzLCBzaXplb2YoKnJhdGVzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJGYWlsZWQgdG8gc2V0IEZXIHJhdGVzIGFuZCBtb2R1bGF0aW9uIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJhdGVzKTsKKwlyZXR1cm4gcmV0OworfQorCisKK2ludCB3bDEyNTFfYWN4X3N0YXRpb25faWQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IGFjeF9kb3QxMV9zdGF0aW9uX2lkICptYWM7CisJaW50IHJldCwgaTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZG90MTFfc3RhdGlvbl9pZCIpOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoKm1hYyksIEdGUF9LRVJORUwpOworCWlmICghbWFjKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQorCQltYWMtPm1hY1tpXSA9IHdsLT5tYWNfYWRkcltFVEhfQUxFTiAtIDEgLSBpXTsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9TVEFUSU9OX0lELCBtYWMsIHNpemVvZigqbWFjKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCitvdXQ6CisJa2ZyZWUobWFjKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTgga2V5X2lkKQoreworCXN0cnVjdCBhY3hfZG90MTFfZGVmYXVsdF9rZXkgKmRlZmF1bHRfa2V5OworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRvdDExX2RlZmF1bHRfa2V5ICglZCkiLCBrZXlfaWQpOworCisJZGVmYXVsdF9rZXkgPSBremFsbG9jKHNpemVvZigqZGVmYXVsdF9rZXkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlZmF1bHRfa2V5KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWRlZmF1bHRfa2V5LT5pZCA9IGtleV9pZDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9ERUZBVUxUX0tFWSwKKwkJCQkgICBkZWZhdWx0X2tleSwgc2l6ZW9mKCpkZWZhdWx0X2tleSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiQ291bGRuJ3Qgc2V0IGRlZmF1bHQga2V5Iik7CisJCWdvdG8gb3V0OworCX0KKworCXdsLT5kZWZhdWx0X2tleSA9IGtleV9pZDsKKworb3V0OgorCWtmcmVlKGRlZmF1bHRfa2V5KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMoc3RydWN0IHdsMTI1MSAqd2wsIHU4IHdha2VfdXBfZXZlbnQsCisJCQkJICB1OCBsaXN0ZW5faW50ZXJ2YWwpCit7CisJc3RydWN0IGFjeF93YWtlX3VwX2NvbmRpdGlvbiAqd2FrZV91cDsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCB3YWtlIHVwIGNvbmRpdGlvbnMiKTsKKworCXdha2VfdXAgPSBremFsbG9jKHNpemVvZigqd2FrZV91cCksIEdGUF9LRVJORUwpOworCWlmICghd2FrZV91cCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl3YWtlX3VwLT53YWtlX3VwX2V2ZW50ID0gd2FrZV91cF9ldmVudDsKKwl3YWtlX3VwLT5saXN0ZW5faW50ZXJ2YWwgPSBsaXN0ZW5faW50ZXJ2YWw7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1dBS0VfVVBfQ09ORElUSU9OUywKKwkJCQkgICB3YWtlX3VwLCBzaXplb2YoKndha2VfdXApKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiY291bGQgbm90IHNldCB3YWtlIHVwIGNvbmRpdGlvbnM6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUod2FrZV91cCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfc2xlZXBfYXV0aChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggc2xlZXBfYXV0aCkKK3sKKwlzdHJ1Y3QgYWN4X3NsZWVwX2F1dGggKmF1dGg7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2xlZXAgYXV0aCIpOworCisJYXV0aCA9IGt6YWxsb2Moc2l6ZW9mKCphdXRoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdXRoKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWF1dGgtPnNsZWVwX2F1dGggPSBzbGVlcF9hdXRoOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TTEVFUF9BVVRILCBhdXRoLCBzaXplb2YoKmF1dGgpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworb3V0OgorCWtmcmVlKGF1dGgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTI1MSAqd2wsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYWN4X3JldmlzaW9uICpyZXY7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZncgcmV2Iik7CisKKwlyZXYgPSBremFsbG9jKHNpemVvZigqcmV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gd2wxMjUxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX0ZXX1JFViwgcmV2LCBzaXplb2YoKnJldikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJBQ1hfRldfUkVWIGludGVycm9nYXRlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBiZSBjYXJlZnVsIHdpdGggdGhlIGJ1ZmZlciBzaXplcyAqLworCXN0cm5jcHkoYnVmLCByZXYtPmZ3X3ZlcnNpb24sIG1pbihsZW4sIHNpemVvZihyZXYtPmZ3X3ZlcnNpb24pKSk7CisKKwkvKgorCSAqIGlmIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIHN0cmluZyBpcyBleGFjdGx5CisJICogc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikgbG9uZyBvciBmd19sZW4gaXMgbGVzcyB0aGFuCisJICogc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikgaXQgd29uJ3QgYmUgbnVsbCB0ZXJtaW5hdGVkCisJICovCisJYnVmW21pbihsZW4sIHNpemVvZihyZXYtPmZ3X3ZlcnNpb24pKSAtIDFdID0gJ1wwJzsKKworb3V0OgorCWtmcmVlKHJldik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfdHhfcG93ZXIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBwb3dlcikKK3sKKwlzdHJ1Y3QgYWN4X2N1cnJlbnRfdHhfcG93ZXIgKmFjeDsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBkb3QxMV9jdXJfdHhfcHdyIik7CisKKwlpZiAocG93ZXIgPCAwIHx8IHBvd2VyID4gMjUpCisJCXJldHVybiAtRUlOVkFMOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+Y3VycmVudF90eF9wb3dlciA9IHBvd2VyICogMTA7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfQ1VSX1RYX1BXUiwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJjb25maWd1cmUgb2YgdHggcG93ZXIgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfZmVhdHVyZV9jZmcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IGFjeF9mZWF0dXJlX2NvbmZpZyAqZmVhdHVyZTsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmZWF0dXJlIGNmZyIpOworCisJZmVhdHVyZSA9IGt6YWxsb2Moc2l6ZW9mKCpmZWF0dXJlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmZWF0dXJlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIERGX0VOQ1JZUFRJT05fRElTQUJMRSBhbmQgREZfU05JRkZfTU9ERV9FTkFCTEUgYXJlIGRpc2FibGVkICovCisJZmVhdHVyZS0+ZGF0YV9mbG93X29wdGlvbnMgPSAwOworCWZlYXR1cmUtPm9wdGlvbnMgPSAwOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9GRUFUVVJFX0NGRywKKwkJCQkgICBmZWF0dXJlLCBzaXplb2YoKmZlYXR1cmUpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoIkNvdWxkbid0IHNldCBIVyBlbmNyeXB0aW9uIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGZlYXR1cmUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X21lbV9tYXAoc3RydWN0IHdsMTI1MSAqd2wsIHN0cnVjdCBhY3hfaGVhZGVyICptZW1fbWFwLAorCQkgICAgICAgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBtZW0gbWFwIik7CisKKwlyZXQgPSB3bDEyNTFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfTUVNX01BUCwgbWVtX21hcCwgbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2FjeF9kYXRhX3BhdGhfcGFyYW1zKHN0cnVjdCB3bDEyNTEgKndsLAorCQkJCXN0cnVjdCBhY3hfZGF0YV9wYXRoX3BhcmFtc19yZXNwICpyZXNwKQoreworCXN0cnVjdCBhY3hfZGF0YV9wYXRoX3BhcmFtcyAqcGFyYW1zOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRhdGEgcGF0aCBwYXJhbXMiKTsKKworCXBhcmFtcyA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcmFtcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlwYXJhbXMtPnJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemUgPSBEUF9SWF9QQUNLRVRfUklOR19DSFVOS19TSVpFOworCXBhcmFtcy0+dHhfcGFja2V0X3JpbmdfY2h1bmtfc2l6ZSA9IERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX1NJWkU7CisKKwlwYXJhbXMtPnJ4X3BhY2tldF9yaW5nX2NodW5rX251bSA9IERQX1JYX1BBQ0tFVF9SSU5HX0NIVU5LX05VTTsKKwlwYXJhbXMtPnR4X3BhY2tldF9yaW5nX2NodW5rX251bSA9IERQX1RYX1BBQ0tFVF9SSU5HX0NIVU5LX05VTTsKKworCXBhcmFtcy0+dHhfY29tcGxldGVfdGhyZXNob2xkID0gMTsKKworCXBhcmFtcy0+dHhfY29tcGxldGVfcmluZ19kZXB0aCA9IEZXX1RYX0NNUExUX0JMT0NLX1NJWkU7CisKKwlwYXJhbXMtPnR4X2NvbXBsZXRlX3RpbWVvdXQgPSBEUF9UWF9DT01QTEVURV9USU1FX09VVDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfREFUQV9QQVRIX1BBUkFNUywKKwkJCQkgICBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogRklYTUU6IHNob3VsZG4ndCB0aGlzIGJlIEFDWF9EQVRBX1BBVEhfUkVTUF9QQVJBTVM/ICovCisJcmV0ID0gd2wxMjUxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX0RBVEFfUEFUSF9QQVJBTVMsCisJCQkJICAgICByZXNwLCBzaXplb2YoKnJlc3ApKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gcmVhZCBkYXRhIHBhdGggcGFyYW1ldGVyczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHJlc3AtPmhlYWRlci5jbWQuc3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykgeworCQl3bDEyNTFfd2FybmluZygiZGF0YSBwYXRoIHBhcmFtZXRlciBhY3ggc3RhdHVzIGZhaWxlZCIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3J4X21zZHVfbGlmZV90aW1lKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgbGlmZV90aW1lKQoreworCXN0cnVjdCBhY3hfcnhfbXNkdV9saWZldGltZSAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ4IG1zZHUgbGlmZSB0aW1lIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5saWZldGltZSA9IGxpZmVfdGltZTsKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfUlhfTVNEVV9MSUZFX1RJTUUsCisJCQkJICAgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ4IG1zZHUgbGlmZSB0aW1lOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKQoreworCXN0cnVjdCBhY3hfcnhfY29uZmlnICpyeF9jb25maWc7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggY29uZmlnIik7CisKKwlyeF9jb25maWcgPSBremFsbG9jKHNpemVvZigqcnhfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyeF9jb25maWcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcnhfY29uZmlnLT5jb25maWdfb3B0aW9ucyA9IGNvbmZpZzsKKwlyeF9jb25maWctPmZpbHRlcl9vcHRpb25zID0gZmlsdGVyOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9SWF9DRkcsCisJCQkJICAgcnhfY29uZmlnLCBzaXplb2YoKnJ4X2NvbmZpZykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ4IGNvbmZpZzogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShyeF9jb25maWcpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3BhY2tldF9kZXRlY3Rpb24gKnBkOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRhdGEgcGQgdGhyZXNob2xkIik7CisKKwlwZCA9IGt6YWxsb2Moc2l6ZW9mKCpwZCksIEdGUF9LRVJORUwpOworCWlmICghcGQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRklYTUU6IHRocmVzaG9sZCB2YWx1ZSBub3Qgc2V0ICovCisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1BEX1RIUkVTSE9MRCwgcGQsIHNpemVvZigqcGQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiZmFpbGVkIHRvIHNldCBwZCB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocGQpOworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2FjeF9zbG90KHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKQoreworCXN0cnVjdCBhY3hfc2xvdCAqc2xvdDsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzbG90Iik7CisKKwlzbG90ID0ga3phbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNsb3QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJc2xvdC0+d29uZV9pbmRleCA9IFNUQVRJT05fV09ORV9JTkRFWDsKKwlzbG90LT5zbG90X3RpbWUgPSBzbG90X3RpbWU7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NMT1QsIHNsb3QsIHNpemVvZigqc2xvdCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNsb3QgdGltZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShzbG90KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9ncm91cF9hZGRyZXNzX3RibChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2RvdDExX2dycF9hZGRyX3RibCAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGdyb3VwIGFkZHJlc3MgdGJsIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogTUFDIGZpbHRlcmluZyAqLworCWFjeC0+ZW5hYmxlZCA9IDA7CisJYWN4LT5udW1fZ3JvdXBzID0gMDsKKwltZW1zZXQoYWN4LT5tYWNfdGFibGUsIDAsIEFERFJFU1NfR1JPVVBfTUFYX0xFTik7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfR1JPVVBfQUREUkVTU19UQkwsCisJCQkJICAgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGdyb3VwIGFkZHIgdGFibGU6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfcnhfdGltZW91dCAqcnhfdGltZW91dDsKKwlpbnQgcmV0OworCisJcnhfdGltZW91dCA9IGt6YWxsb2Moc2l6ZW9mKCpyeF90aW1lb3V0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyeF90aW1lb3V0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2VydmljZSBwZXJpb2QgdGltZW91dCIpOworCisJcnhfdGltZW91dC0+cHNfcG9sbF90aW1lb3V0ID0gUlhfVElNRU9VVF9QU19QT0xMX0RFRjsKKwlyeF90aW1lb3V0LT51cHNkX3RpbWVvdXQgPSBSWF9USU1FT1VUX1VQU0RfREVGOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TRVJWSUNFX1BFUklPRF9USU1FT1VULAorCQkJCSAgIHJ4X3RpbWVvdXQsIHNpemVvZigqcnhfdGltZW91dCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNlcnZpY2UgcGVyaW9kIHRpbWVvdXQ6ICVkIiwKKwkJCSAgICAgICByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShyeF90aW1lb3V0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9ydHNfdGhyZXNob2xkKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgcnRzX3RocmVzaG9sZCkKK3sKKwlzdHJ1Y3QgYWN4X3J0c190aHJlc2hvbGQgKnJ0czsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBydHMgdGhyZXNob2xkIik7CisKKwlydHMgPSBremFsbG9jKHNpemVvZigqcnRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFydHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcnRzLT50aHJlc2hvbGQgPSBydHNfdGhyZXNob2xkOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIERPVDExX1JUU19USFJFU0hPTEQsIHJ0cywgc2l6ZW9mKCpydHMpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiZmFpbGVkIHRvIHNldCBydHMgdGhyZXNob2xkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ0cyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX29wdGlvbiAqYmVhY29uX2ZpbHRlcjsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBiZWFjb24gZmlsdGVyIG9wdCIpOworCisJYmVhY29uX2ZpbHRlciA9IGt6YWxsb2Moc2l6ZW9mKCpiZWFjb25fZmlsdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiZWFjb25fZmlsdGVyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJlYWNvbl9maWx0ZXItPmVuYWJsZSA9IDA7CisJYmVhY29uX2ZpbHRlci0+bWF4X251bV9iZWFjb25zID0gMDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQkVBQ09OX0ZJTFRFUl9PUFQsCisJCQkJICAgYmVhY29uX2ZpbHRlciwgc2l6ZW9mKCpiZWFjb25fZmlsdGVyKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYmVhY29uIGZpbHRlciBvcHQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYmVhY29uX2ZpbHRlcik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfaWVfdGFibGUgKmllX3RhYmxlOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgdGFibGUiKTsKKworCWllX3RhYmxlID0ga3phbGxvYyhzaXplb2YoKmllX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpZV90YWJsZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlpZV90YWJsZS0+bnVtX2llID0gMDsKKwltZW1zZXQoaWVfdGFibGUtPnRhYmxlLCAwLCBCRUFDT05fRklMVEVSX1RBQkxFX01BWF9TSVpFKTsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQkVBQ09OX0ZJTFRFUl9UQUJMRSwKKwkJCQkgICBpZV90YWJsZSwgc2l6ZW9mKCppZV90YWJsZSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGJlYWNvbiBmaWx0ZXIgdGFibGU6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoaWVfdGFibGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3NnX2VuYWJsZShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leCAqcHRhOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNnIGVuYWJsZSIpOworCisJcHRhID0ga3phbGxvYyhzaXplb2YoKnB0YSksIEdGUF9LRVJORUwpOworCWlmICghcHRhKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXB0YS0+ZW5hYmxlID0gU0dfRU5BQkxFOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TR19FTkFCTEUsIHB0YSwgc2l6ZW9mKCpwdGEpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiZmFpbGVkIHRvIHNldCBzb2Z0Z2VtaW5pIGVuYWJsZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwdGEpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2J0X3dsYW5fY29leF9wYXJhbSAqcGFyYW07CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgY2ZnIik7CisKKwlwYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbSksIEdGUF9LRVJORUwpOworCWlmICghcGFyYW0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQlQtV0xBTiBjb2V4dCBwYXJhbWV0ZXJzICovCisJcGFyYW0tPm1pbl9yYXRlID0gUkFURV9JTkRFWF8yNE1CUFM7CisJcGFyYW0tPmJ0X2hwX21heF90aW1lID0gUFRBX0JUX0hQX01BWFRJTUVfREVGOworCXBhcmFtLT53bGFuX2hwX21heF90aW1lID0gUFRBX1dMQU5fSFBfTUFYX1RJTUVfREVGOworCXBhcmFtLT5zZW5zZV9kaXNhYmxlX3RpbWVyID0gUFRBX1NFTlNFX0RJU0FCTEVfVElNRVJfREVGOworCXBhcmFtLT5yeF90aW1lX2J0X2hwID0gUFRBX1BST1RFQ1RJVkVfUlhfVElNRV9ERUY7CisJcGFyYW0tPnR4X3RpbWVfYnRfaHAgPSBQVEFfUFJPVEVDVElWRV9UWF9USU1FX0RFRjsKKwlwYXJhbS0+cnhfdGltZV9idF9ocF9mYXN0ID0gUFRBX1BST1RFQ1RJVkVfUlhfVElNRV9GQVNUX0RFRjsKKwlwYXJhbS0+dHhfdGltZV9idF9ocF9mYXN0ID0gUFRBX1BST1RFQ1RJVkVfVFhfVElNRV9GQVNUX0RFRjsKKwlwYXJhbS0+d2xhbl9jeWNsZV9mYXN0ID0gUFRBX0NZQ0xFX1RJTUVfRkFTVF9ERUY7CisJcGFyYW0tPmJ0X2FudGlfc3RhcnZhdGlvbl9wZXJpb2QgPSBQVEFfQU5USV9TVEFSVkVfUEVSSU9EX0RFRjsKKwlwYXJhbS0+bmV4dF9idF9scF9wYWNrZXQgPSBQVEFfVElNRU9VVF9ORVhUX0JUX0xQX1BBQ0tFVF9ERUY7CisJcGFyYW0tPndha2VfdXBfYmVhY29uID0gUFRBX1RJTUVfQkVGT1JFX0JFQUNPTl9ERUY7CisJcGFyYW0tPmhwX2RtX21heF9ndWFyZF90aW1lID0gUFRBX0hQRE1fTUFYX1RJTUVfREVGOworCXBhcmFtLT5uZXh0X3dsYW5fcGFja2V0ID0gUFRBX1RJTUVfT1VUX05FWFRfV0xBTl9ERUY7CisJcGFyYW0tPmFudGVubmFfdHlwZSA9IFBUQV9BTlRFTk5BX1RZUEVfREVGOworCXBhcmFtLT5zaWduYWxfdHlwZSA9IFBUQV9TSUdOQUxJTkdfVFlQRV9ERUY7CisJcGFyYW0tPmFmaF9sZXZlcmFnZV9vbiA9IFBUQV9BRkhfTEVWRVJBR0VfT05fREVGOworCXBhcmFtLT5xdWlldF9jeWNsZV9udW0gPSBQVEFfTlVNQkVSX1FVSUVUX0NZQ0xFX0RFRjsKKwlwYXJhbS0+bWF4X2N0cyA9IFBUQV9NQVhfTlVNX0NUU19ERUY7CisJcGFyYW0tPndsYW5fcGFja2V0c19udW0gPSBQVEFfTlVNQkVSX09GX1dMQU5fUEFDS0VUU19ERUY7CisJcGFyYW0tPmJ0X3BhY2tldHNfbnVtID0gUFRBX05VTUJFUl9PRl9CVF9QQUNLRVRTX0RFRjsKKwlwYXJhbS0+bWlzc2VkX3J4X2F2YWxhbmNoZSA9IFBUQV9SWF9GT1JfQVZBTEFOQ0hFX0RFRjsKKwlwYXJhbS0+d2xhbl9lbHBfaHAgPSBQVEFfRUxQX0hQX0RFRjsKKwlwYXJhbS0+YnRfYW50aV9zdGFydmF0aW9uX2N5Y2xlcyA9IFBUQV9BTlRJX1NUQVJWRV9OVU1fQ1lDTEVfREVGOworCXBhcmFtLT5hY2tfbW9kZV9kdWFsX2FudCA9IFBUQV9BQ0tfTU9ERV9ERUY7CisJcGFyYW0tPnBhX3NkX2VuYWJsZSA9IFBUQV9BTExPV19QQV9TRF9ERUY7CisJcGFyYW0tPnB0YV9hdXRvX21vZGVfZW5hYmxlID0gUFRBX0FVVE9fTU9ERV9OT19DVFNfREVGOworCXBhcmFtLT5idF9ocF9yZXNwZWN0ZWRfbnVtID0gUFRBX0JUX0hQX1JFU1BFQ1RFRF9ERUY7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NHX0NGRywgcGFyYW0sIHNpemVvZigqcGFyYW0pKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiZmFpbGVkIHRvIHNldCBzZyBjb25maWc6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocGFyYW0pOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IGFjeF9lbmVyZ3lfZGV0ZWN0aW9uICpkZXRlY3Rpb247CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggY2NhIHRocmVzaG9sZCIpOworCisJZGV0ZWN0aW9uID0ga3phbGxvYyhzaXplb2YoKmRldGVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmICghZGV0ZWN0aW9uKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWRldGVjdGlvbi0+cnhfY2NhX3RocmVzaG9sZCA9IENDQV9USFJTSF9ESVNBQkxFX0VORVJHWV9EOworCWRldGVjdGlvbi0+dHhfZW5lcmd5X2RldGVjdGlvbiA9IDA7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0NDQV9USFJFU0hPTEQsCisJCQkJICAgZGV0ZWN0aW9uLCBzaXplb2YoKmRldGVjdGlvbikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGNjYSB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKK291dDoKKwlrZnJlZShkZXRlY3Rpb24pOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X2Jjbl9kdGltX29wdGlvbnMoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IGFjeF9iZWFjb25fYnJvYWRjYXN0ICpiYjsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBiY24gZHRpbSBvcHRpb25zIik7CisKKwliYiA9IGt6YWxsb2Moc2l6ZW9mKCpiYiksIEdGUF9LRVJORUwpOworCWlmICghYmIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYmItPmJlYWNvbl9yeF90aW1lb3V0ID0gQkNOX1JYX1RJTUVPVVRfREVGX1ZBTFVFOworCWJiLT5icm9hZGNhc3RfdGltZW91dCA9IEJST0FEQ0FTVF9SWF9USU1FT1VUX0RFRl9WQUxVRTsKKwliYi0+cnhfYnJvYWRjYXN0X2luX3BzID0gUlhfQlJPQURDQVNUX0lOX1BTX0RFRl9WQUxVRTsKKwliYi0+cHNfcG9sbF90aHJlc2hvbGQgPSBDT05TRUNVVElWRV9QU19QT0xMX0ZBSUxVUkVfREVGOworCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CQ05fRFRJTV9PUFRJT05TLCBiYiwgc2l6ZW9mKCpiYikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ4IGNvbmZpZzogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShiYik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfYWlkKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgYWlkKQoreworCXN0cnVjdCBhY3hfYWlkICphY3hfYWlkOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFpZCIpOworCisJYWN4X2FpZCA9IGt6YWxsb2Moc2l6ZW9mKCphY3hfYWlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3hfYWlkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeF9haWQtPmFpZCA9IGFpZDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUlELCBhY3hfYWlkLCBzaXplb2YoKmFjeF9haWQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiZmFpbGVkIHRvIHNldCBhaWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4X2FpZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfZXZlbnRfbWJveF9tYXNrKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgZXZlbnRfbWFzaykKK3sKKwlzdHJ1Y3QgYWN4X2V2ZW50X21hc2sgKm1hc2s7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZXZlbnQgbWJveCBtYXNrIik7CisKKwltYXNrID0ga3phbGxvYyhzaXplb2YoKm1hc2spLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hc2spIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogaGlnaCBldmVudCBtYXNrIGlzIHVudXNlZCAqLworCW1hc2stPmhpZ2hfZXZlbnRfbWFzayA9IDB4ZmZmZmZmZmY7CisKKwltYXNrLT5ldmVudF9tYXNrID0gZXZlbnRfbWFzazsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfRVZFTlRfTUJPWF9NQVNLLAorCQkJCSAgIG1hc2ssIHNpemVvZigqbWFzaykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGFjeF9ldmVudF9tYm94X21hc2s6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUobWFzayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfc2V0X3ByZWFtYmxlKHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIGFjeF9wcmVhbWJsZV90eXBlIHByZWFtYmxlKQoreworCXN0cnVjdCBhY3hfcHJlYW1ibGUgKmFjeDsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeF9zZXRfcHJlYW1ibGUiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPnByZWFtYmxlID0gcHJlYW1ibGU7CisKKwlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1BSRUFNQkxFX1RZUEUsIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiU2V0dGluZyBvZiBwcmVhbWJsZSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2FjeF9jdHNfcHJvdGVjdChzdHJ1Y3Qgd2wxMjUxICp3bCwKKwkJCSAgIGVudW0gYWN4X2N0c3Byb3RlY3RfdHlwZSBjdHNwcm90ZWN0KQoreworCXN0cnVjdCBhY3hfY3RzcHJvdGVjdCAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4X3NldF9jdHNwcm90ZWN0Iik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5jdHNwcm90ZWN0ID0gY3RzcHJvdGVjdDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQ1RTX1BST1RFQ1RJT04sIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiU2V0dGluZyBvZiBjdHNwcm90ZWN0IGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X3RzZl9pbmZvKHN0cnVjdCB3bDEyNTEgKndsLCB1NjQgKm1hY3RpbWUpCit7CisJc3RydWN0IGFjeF90c2ZfaW5mbyAqdHNmX2luZm87CisJaW50IHJldDsKKworCXRzZl9pbmZvID0ga3phbGxvYyhzaXplb2YoKnRzZl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0c2ZfaW5mbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNTFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfVFNGX0lORk8sCisJCQkJICAgICB0c2ZfaW5mbywgc2l6ZW9mKCp0c2ZfaW5mbykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJBQ1hfRldfUkVWIGludGVycm9nYXRlIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkqbWFjdGltZSA9IHRzZl9pbmZvLT5jdXJyZW50X3RzZl9sc2IgfAorCQkodHNmX2luZm8tPmN1cnJlbnRfdHNmX21zYiA8PCAzMSk7CisKK291dDoKKwlrZnJlZSh0c2ZfaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cykKK3sKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzdGF0aXN0aWNzIik7CisKKwlyZXQgPSB3bDEyNTFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfU1RBVElTVElDUywgc3RhdHMsCisJCQkJICAgICBzaXplb2YoKnN0YXRzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImFjeCBzdGF0aXN0aWNzIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3JhdGVfcG9saWN5ICphY3g7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJhdGUgcG9saWNpZXMiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNvbmZpZ3VyZSBvbmUgZGVmYXVsdCAob25lLXNpemUtZml0cy1hbGwpIHJhdGUgY2xhc3MgKi8KKwlhY3gtPnJhdGVfY2xhc3NfY250ID0gMTsKKwlhY3gtPnJhdGVfY2xhc3NbMF0uZW5hYmxlZF9yYXRlcyA9IEFDWF9SQVRFX01BU0tfVU5TUEVDSUZJRUQ7CisJYWN4LT5yYXRlX2NsYXNzWzBdLnNob3J0X3JldHJ5X2xpbWl0ID0gQUNYX1JBVEVfUkVUUllfTElNSVQ7CisJYWN4LT5yYXRlX2NsYXNzWzBdLmxvbmdfcmV0cnlfbGltaXQgPSBBQ1hfUkFURV9SRVRSWV9MSU1JVDsKKwlhY3gtPnJhdGVfY2xhc3NbMF0uYWZsYWdzID0gMDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUkFURV9QT0xJQ1ksIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiU2V0dGluZyBvZiByYXRlIHBvbGljaWVzIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNTFfYWN4X21lbV9jZmcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IHdsMTI1MV9hY3hfY29uZmlnX21lbW9yeSAqbWVtX2NvbmY7CisJaW50IHJldCwgaTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggbWVtIGNmZyIpOworCisJbWVtX2NvbmYgPSBremFsbG9jKHNpemVvZigqbWVtX2NvbmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbV9jb25mKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIG1lbW9yeSBjb25maWcgKi8KKwltZW1fY29uZi0+bWVtX2NvbmZpZy5udW1fc3RhdGlvbnMgPSBjcHVfdG9fbGUxNihERUZBVUxUX05VTV9TVEFUSU9OUyk7CisJbWVtX2NvbmYtPm1lbV9jb25maWcucnhfbWVtX2Jsb2NrX251bSA9IDM1OworCW1lbV9jb25mLT5tZW1fY29uZmlnLnR4X21pbl9tZW1fYmxvY2tfbnVtID0gNjQ7CisJbWVtX2NvbmYtPm1lbV9jb25maWcubnVtX3R4X3F1ZXVlcyA9IE1BWF9UWF9RVUVVRVM7CisJbWVtX2NvbmYtPm1lbV9jb25maWcuaG9zdF9pZl9vcHRpb25zID0gSE9TVElGX1BLVF9SSU5HOworCW1lbV9jb25mLT5tZW1fY29uZmlnLm51bV9zc2lkX3Byb2ZpbGVzID0gMTsKKwltZW1fY29uZi0+bWVtX2NvbmZpZy5kZWJ1Z19idWZmZXJfc2l6ZSA9CisJCWNwdV90b19sZTE2KFRSQUNFX0JVRkZFUl9NQVhfU0laRSk7CisKKwkvKiBSWCBxdWV1ZSBjb25maWcgKi8KKwltZW1fY29uZi0+cnhfcXVldWVfY29uZmlnLmRtYV9hZGRyZXNzID0gMDsKKwltZW1fY29uZi0+cnhfcXVldWVfY29uZmlnLm51bV9kZXNjcyA9IEFDWF9SWF9ERVNDX0RFRjsKKwltZW1fY29uZi0+cnhfcXVldWVfY29uZmlnLnByaW9yaXR5ID0gREVGQVVMVF9SWFFfUFJJT1JJVFk7CisJbWVtX2NvbmYtPnJ4X3F1ZXVlX2NvbmZpZy50eXBlID0gREVGQVVMVF9SWFFfVFlQRTsKKworCS8qIFRYIHF1ZXVlIGNvbmZpZyAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFhfUVVFVUVTOyBpKyspIHsKKwkJbWVtX2NvbmYtPnR4X3F1ZXVlX2NvbmZpZ1tpXS5udW1fZGVzY3MgPSBBQ1hfVFhfREVTQ19ERUY7CisJCW1lbV9jb25mLT50eF9xdWV1ZV9jb25maWdbaV0uYXR0cmlidXRlcyA9IGk7CisJfQorCisJcmV0ID0gd2wxMjUxX2NtZF9jb25maWd1cmUod2wsIEFDWF9NRU1fQ0ZHLCBtZW1fY29uZiwKKwkJCQkgICBzaXplb2YoKm1lbV9jb25mKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoIndsMTI1MSBtZW0gY29uZmlnIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShtZW1fY29uZik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmgKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2FjeC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5oCmluZGV4IGZiMmQyMzQuLmNhZmI5MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KQEAgLTIyLDE0ICsyMiwyMCBAQAogICoKICAqLwogCi0jaWZuZGVmIF9fV0wxMlhYX0FDWF9IX18KLSNkZWZpbmUgX19XTDEyWFhfQUNYX0hfXworI2lmbmRlZiBfX1dMMTI1MV9BQ1hfSF9fCisjZGVmaW5lIF9fV0wxMjUxX0FDWF9IX18KIAotI2luY2x1ZGUgIndsMTJ4eC5oIgorI2luY2x1ZGUgIndsMTI1MS5oIgorI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKIAogLyogVGFyZ2V0J3MgaW5mb3JtYXRpb24gZWxlbWVudCAqLwogc3RydWN0IGFjeF9oZWFkZXIgeworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBjbWQ7CisKKwkvKiBhY3ggKG9yIGluZm9ybWF0aW9uIGVsZW1lbnQpIGhlYWRlciAqLwogCXUxNiBpZDsKKworCS8qIHBheWxvYWQgbGVuZ3RoIChub3QgaW5jbHVkaW5nIGhlYWRlcnMgKi8KIAl1MTYgbGVuOwogfTsKIApAQCAtODUsMTUgKzkxLDE1IEBACiAJdTMyIGh3X3ZlcnNpb247CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotZW51bSB3bDEyeHhfcHNtX21vZGUgeworZW51bSB3bDEyNTFfcHNtX21vZGUgewogCS8qIEFjdGl2ZSBtb2RlICovCi0JV0wxMlhYX1BTTV9DQU0gPSAwLAorCVdMMTI1MV9QU01fQ0FNID0gMCwKIAogCS8qIFBvd2VyIHNhdmUgbW9kZSAqLwotCVdMMTJYWF9QU01fUFMgPSAxLAorCVdMMTI1MV9QU01fUFMgPSAxLAogCiAJLyogRXh0cmVtZSBsb3cgcG93ZXIgKi8KLQlXTDEyWFhfUFNNX0VMUCA9IDIsCisJV0wxMjUxX1BTTV9FTFAgPSAyLAogfTsKIAogc3RydWN0IGFjeF9zbGVlcF9hdXRoIHsKQEAgLTEwNywyNSArMTEzLDYgQEAKIAl1OCAgcGFkZGluZ1szXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIFRJTV9FTEVfSUQgICAgNQotI2RlZmluZSBQQVJUSUFMX1ZCTV9NQVggICAgMjUxCi0KLXN0cnVjdCB0aW0gewotCXU4IGlkZW50aXR5OwotCXU4IGxlbmd0aDsKLQl1OCBkdGltX2NvdW50OwotCXU4IGR0aW1fcGVyaW9kOwotCXU4IGJpdG1hcF9jdHJsOwotCXU4IHB2Yl9maWVsZFtQQVJUSUFMX1ZCTV9NQVhdOyAvKiBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogVmlydHVhbCBCaXQgTWFwIHVwZGF0ZSAqLwotc3RydWN0IHZibV91cGRhdGVfcmVxdWVzdCB7Ci0JX19sZTE2IGxlbjsKLQl1OCAgcGFkZGluZ1syXTsKLQlzdHJ1Y3QgdGltIHRpbTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBlbnVtIHsKIAlIT1NUSUZfUENJX01BU1RFUl9IT1NUX0lORElSRUNULAogCUhPU1RJRl9QQ0lfTUFTVEVSX0hPU1RfRElSRUNULApAQCAtMjAyLDcgKzE4OSw3IEBACiAjZGVmaW5lIFJYX01TRFVfTElGRVRJTUVfTUFYICAgICAgIDB4RkZGRkZGRkYKICNkZWZpbmUgUlhfTVNEVV9MSUZFVElNRV9ERUYgICAgICAgNTEyMDAwCiAKLXN0cnVjdCByeF9tc2R1X2xpZmV0aW1lIHsKK3N0cnVjdCBhY3hfcnhfbXNkdV9saWZldGltZSB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJLyoKQEAgLTM2OCw3ICszNTUsNyBAQAogI2RlZmluZSBBRERSRVNTX0dST1VQX01BWAkoOCkKICNkZWZpbmUgQUREUkVTU19HUk9VUF9NQVhfTEVOCShFVEhfQUxFTiAqIEFERFJFU1NfR1JPVVBfTUFYKQogCi1zdHJ1Y3QgbXVsdGljYXN0X2dycF9hZGRyX3N0YXJ0IHsKK3N0cnVjdCBhY3hfZG90MTFfZ3JwX2FkZHJfdGJsIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKIAl1OCBlbmFibGVkOwpAQCAtNzMwLDIyICs3MTcsMTMgQEAKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBTVEEgTUFDICovCi1zdHJ1Y3QgZG90MTFfc3RhdGlvbl9pZCB7CitzdHJ1Y3QgYWN4X2RvdDExX3N0YXRpb25faWQgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogCXU4IG1hY1tFVEhfQUxFTl07CiAJdTggcGFkWzJdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qIEhXIGVuY3J5cHRpb24ga2V5cyAqLwotI2RlZmluZSBOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWSA0Ci0jZGVmaW5lIE1BWF9LRVlfU0laRSAzMgotCi0vKiBXaGVuIHNldCwgZGlzYWJsZSBIVyBlbmNyeXB0aW9uICovCi0jZGVmaW5lIERGX0VOQ1JZUFRJT05fRElTQUJMRSAgICAgIDB4MDEKLS8qIFdoZW4gc2V0LCBkaXNhYmxlIEhXIGRlY3J5cHRpb24gKi8KLSNkZWZpbmUgREZfU05JRkZfTU9ERV9FTkFCTEUgICAgICAgMHg4MAotCiBzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKQEAgLTc1Myw2NyArNzMxLDYgQEAKIAl1MzIgZGF0YV9mbG93X29wdGlvbnM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotZW51bSBhY3hfa2V5X2FjdGlvbiB7Ci0JS0VZX0FERF9PUl9SRVBMQUNFID0gMSwKLQlLRVlfUkVNT1ZFICAgICAgICAgPSAyLAotCUtFWV9TRVRfSUQgICAgICAgICA9IDMsCi0JTUFYX0tFWV9BQ1RJT04gICAgID0gMHhmZmZmLAotfTsKLQotZW51bSBhY3hfa2V5X3R5cGUgewotCUtFWV9XRVBfREVGQVVMVCAgICAgICA9IDAsCi0JS0VZX1dFUF9BRERSICAgICAgICAgID0gMSwKLQlLRVlfQUVTX0dST1VQICAgICAgICAgPSA0LAotCUtFWV9BRVNfUEFJUldJU0UgICAgICA9IDUsCi0JS0VZX1dFUF9HUk9VUCAgICAgICAgID0gNiwKLQlLRVlfVEtJUF9NSUNfR1JPVVAgICAgPSAxMCwKLQlLRVlfVEtJUF9NSUNfUEFJUldJU0UgPSAxMSwKLX07Ci0KLS8qCi0gKgotICoga2V5X3R5cGVfZSAgIGtleSBzaXplICAgIGtleSBmb3JtYXQKLSAqIC0tLS0tLS0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0tCi0gKiAweDAwICAgICAgICAgNSwgMTMsIDI5ICAgS2V5IGRhdGEKLSAqIDB4MDEgICAgICAgICA1LCAxMywgMjkgICBLZXkgZGF0YQotICogMHgwNCAgICAgICAgIDE2ICAgICAgICAgIDE2IGJ5dGVzIG9mIGtleSBkYXRhCi0gKiAweDA1ICAgICAgICAgMTYgICAgICAgICAgMTYgYnl0ZXMgb2Yga2V5IGRhdGEKLSAqIDB4MGEgICAgICAgICAzMiAgICAgICAgICAxNiBieXRlcyBvZiBUS0lQIGtleSBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyBvZiBSWCBNSUMga2V5IGRhdGEKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIG9mIFRYIE1JQyBrZXkgZGF0YQotICogMHgwYiAgICAgICAgIDMyICAgICAgICAgIDE2IGJ5dGVzIG9mIFRLSVAga2V5IGRhdGEKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIG9mIFJYIE1JQyBrZXkgZGF0YQotICogICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgb2YgVFggTUlDIGtleSBkYXRhCi0gKgotICovCi0KLXN0cnVjdCBhY3hfc2V0X2tleSB7Ci0JLyogSWdub3JlZCBmb3IgZGVmYXVsdCBXRVAga2V5ICovCi0JdTggYWRkcltFVEhfQUxFTl07Ci0KLQkvKiBrZXlfYWN0aW9uX2UgKi8KLQl1MTYga2V5X2FjdGlvbjsKLQotCXUxNiByZXNlcnZlZF8xOwotCi0JLyoga2V5IHNpemUgaW4gYnl0ZXMgKi8KLQl1OCBrZXlfc2l6ZTsKLQotCS8qIGtleV90eXBlX2UgKi8KLQl1OCBrZXlfdHlwZTsKLQl1OCBzc2lkX3Byb2ZpbGU7Ci0KLQkvKgotCSAqIFRLSVAsIEFFUzogZnJhbWUncyBrZXkgaWQgZmllbGQuCi0JICogRm9yIFdFUCBkZWZhdWx0IGtleToga2V5IGlkOwotCSAqLwotCXU4IGlkOwotCXU4IHJlc2VydmVkXzJbNl07Ci0JdTgga2V5W01BWF9LRVlfU0laRV07Ci0JdTE2IGFjX3NlcV9udW0xNltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07Ci0JdTMyIGFjX3NlcV9udW0zMltOVU1fQUNDRVNTX0NBVEVHT1JJRVNfQ09QWV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGFjeF9jdXJyZW50X3R4X3Bvd2VyIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CiAKQEAgLTgzOSwyNiArNzU2LDYgQEAKIAl1OCBwYWRbM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyogODAyLjExIFBTICovCi1lbnVtIGFjeF9wc19tb2RlIHsKLQlTVEFUSU9OX0FDVElWRV9NT0RFLAotCVNUQVRJT05fUE9XRVJfU0FWRV9NT0RFCi19OwotCi1zdHJ1Y3QgYWN4X3BzX3BhcmFtcyB7Ci0JdTggcHNfbW9kZTsgLyogU1RBVElPTl8qICovCi0JdTggc2VuZF9udWxsX2RhdGE7IC8qIERvIHdlIGhhdmUgdG8gc2VuZCBOVUxMIGRhdGEgcGFja2V0ID8gKi8KLQl1OCByZXRyaWVzOyAvKiBOdW1iZXIgb2YgcmV0aXJlcyBmb3IgdGhlIGluaXRpYWwgTlVMTCBkYXRhIHBhY2tldCAqLwotCi0JIC8qCi0JICAqIFRVcyBkdXJpbmcgd2hpY2ggdGhlIHRhcmdldCBzdGF5cyBhd2FrZSBhZnRlciBzd2l0Y2hpbmcKLQkgICogdG8gcG93ZXIgc2F2ZSBtb2RlLgotCSAgKi8KLQl1OCBoYW5nX292ZXJfcGVyaW9kOwotCXUxNiBudWxsX2RhdGFfcmF0ZTsKLQl1OCBwYWRbMl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogZW51bSBhY3hfd2FrZV91cF9ldmVudCB7CiAJV0FLRV9VUF9FVkVOVF9CRUFDT05fQklUTUFQCT0gMHgwMSwgLyogV2FrZSBvbiBldmVyeSBCZWFjb24qLwogCVdBS0VfVVBfRVZFTlRfRFRJTV9CSVRNQVAJPSAweDAyLAkvKiBXYWtlIG9uIGV2ZXJ5IERUSU0qLwpAQCAtODkyLDYgKzc4OSw3IEBACiAKIHN0cnVjdCBhY3hfcHJlYW1ibGUgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKwogCS8qCiAJICogV2hlbiBzZXQsIHRoZSBXaUxpbmsgdHJhbnNtaXRzIHRoZSBmcmFtZXMgd2l0aCBhIHNob3J0IHByZWFtYmxlIGFuZAogCSAqIHdoZW4gY2xlYXJlZCwgdGhlIFdpTGluayB0cmFuc21pdHMgdGhlIGZyYW1lcyB3aXRoIGEgbG9uZyBwcmVhbWJsZS4KQEAgLTExMzMsNiArMTAzMSwxNTAgQEAKIAlzdHJ1Y3QgYWN4X3J4cGlwZV9zdGF0aXN0aWNzIHJ4cGlwZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIEFDWF9NQVhfUkFURV9DTEFTU0VTICAgICAgIDgKKyNkZWZpbmUgQUNYX1JBVEVfTUFTS19VTlNQRUNJRklFRCAgMAorI2RlZmluZSBBQ1hfUkFURV9SRVRSWV9MSU1JVCAgICAgIDEwCisKK3N0cnVjdCBhY3hfcmF0ZV9jbGFzcyB7CisJdTMyIGVuYWJsZWRfcmF0ZXM7CisJdTggc2hvcnRfcmV0cnlfbGltaXQ7CisJdTggbG9uZ19yZXRyeV9saW1pdDsKKwl1OCBhZmxhZ3M7CisJdTggcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgYWN4X3JhdGVfcG9saWN5IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1MzIgcmF0ZV9jbGFzc19jbnQ7CisJc3RydWN0IGFjeF9yYXRlX2NsYXNzIHJhdGVfY2xhc3NbQUNYX01BWF9SQVRFX0NMQVNTRVNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB3bDEyNTFfYWN4X21lbW9yeSB7CisJX19sZTE2IG51bV9zdGF0aW9uczsgLyogbnVtYmVyIG9mIFNUQXMgdG8gYmUgc3VwcG9ydGVkLiAqLworCXUxNiByZXNlcnZlZF8xOworCisJLyoKKwkgKiBObWJlciBvZiBtZW1vcnkgYnVmZmVycyBmb3IgdGhlIFJYIG1lbSBwb29sLgorCSAqIFRoZSBhY3R1YWwgbnVtYmVyIG1heSBiZSBsZXNzIGlmIHRoZXJlIGFyZQorCSAqIG5vdCBlbm91Z2ggYmxvY2tzIGxlZnQgZm9yIHRoZSBtaW5pbXVtIG51bQorCSAqIG9mIFRYIG9uZXMuCisJICovCisJdTggcnhfbWVtX2Jsb2NrX251bTsKKwl1OCByZXNlcnZlZF8yOworCXU4IG51bV90eF9xdWV1ZXM7IC8qIEZyb20gMSB0byAxNiAqLworCXU4IGhvc3RfaWZfb3B0aW9uczsgLyogSE9TVF9JRiogKi8KKwl1OCB0eF9taW5fbWVtX2Jsb2NrX251bTsKKwl1OCBudW1fc3NpZF9wcm9maWxlczsKKwlfX2xlMTYgZGVidWdfYnVmZmVyX3NpemU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZGVmaW5lIEFDWF9SWF9ERVNDX01JTiAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDWF9SWF9ERVNDX01BWCAgICAgICAgICAgICAgICAxMjcKKyNkZWZpbmUgQUNYX1JYX0RFU0NfREVGICAgICAgICAgICAgICAgIDMyCitzdHJ1Y3Qgd2wxMjUxX2FjeF9yeF9xdWV1ZV9jb25maWcgeworCXU4IG51bV9kZXNjczsKKwl1OCBwYWQ7CisJdTggdHlwZTsKKwl1OCBwcmlvcml0eTsKKwlfX2xlMzIgZG1hX2FkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBBQ1hfVFhfREVTQ19NSU4gICAgICAgICAgICAgICAgMQorI2RlZmluZSBBQ1hfVFhfREVTQ19NQVggICAgICAgICAgICAgICAgMTI3CisjZGVmaW5lIEFDWF9UWF9ERVNDX0RFRiAgICAgICAgICAgICAgICAxNgorc3RydWN0IHdsMTI1MV9hY3hfdHhfcXVldWVfY29uZmlnIHsKKyAgICB1OCBudW1fZGVzY3M7CisgICAgdTggcGFkWzJdOworICAgIHU4IGF0dHJpYnV0ZXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBNQVhfVFhfUVVFVUVfQ09ORklHUyA1CisjZGVmaW5lIE1BWF9UWF9RVUVVRVMgNAorc3RydWN0IHdsMTI1MV9hY3hfY29uZmlnX21lbW9yeSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IHdsMTI1MV9hY3hfbWVtb3J5IG1lbV9jb25maWc7CisJc3RydWN0IHdsMTI1MV9hY3hfcnhfcXVldWVfY29uZmlnIHJ4X3F1ZXVlX2NvbmZpZzsKKwlzdHJ1Y3Qgd2wxMjUxX2FjeF90eF9xdWV1ZV9jb25maWcgdHhfcXVldWVfY29uZmlnW01BWF9UWF9RVUVVRV9DT05GSUdTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2wxMjUxX2FjeF9tZW1fbWFwIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl2b2lkICpjb2RlX3N0YXJ0OworCXZvaWQgKmNvZGVfZW5kOworCisJdm9pZCAqd2VwX2RlZmtleV9zdGFydDsKKwl2b2lkICp3ZXBfZGVma2V5X2VuZDsKKworCXZvaWQgKnN0YV90YWJsZV9zdGFydDsKKwl2b2lkICpzdGFfdGFibGVfZW5kOworCisJdm9pZCAqcGFja2V0X3RlbXBsYXRlX3N0YXJ0OworCXZvaWQgKnBhY2tldF90ZW1wbGF0ZV9lbmQ7CisKKwl2b2lkICpxdWV1ZV9tZW1vcnlfc3RhcnQ7CisJdm9pZCAqcXVldWVfbWVtb3J5X2VuZDsKKworCXZvaWQgKnBhY2tldF9tZW1vcnlfcG9vbF9zdGFydDsKKwl2b2lkICpwYWNrZXRfbWVtb3J5X3Bvb2xfZW5kOworCisJdm9pZCAqZGVidWdfYnVmZmVyMV9zdGFydDsKKwl2b2lkICpkZWJ1Z19idWZmZXIxX2VuZDsKKworCXZvaWQgKmRlYnVnX2J1ZmZlcjJfc3RhcnQ7CisJdm9pZCAqZGVidWdfYnVmZmVyMl9lbmQ7CisKKwkvKiBOdW1iZXIgb2YgYmxvY2tzIEZXIGFsbG9jYXRlZCBmb3IgVFggcGFja2V0cyAqLworCXUzMiBudW1fdHhfbWVtX2Jsb2NrczsKKworCS8qIE51bWJlciBvZiBibG9ja3MgRlcgYWxsb2NhdGVkIGZvciBSWCBwYWNrZXRzICovCisJdTMyIG51bV9yeF9tZW1fYmxvY2tzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBIb3N0IEludGVycnVwdCBSZWdpc3RlciAoV2lMaW5rIC0+IEhvc3QpCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSWCBwYWNrZXQgaXMgcmVhZHkgaW4gWGZlciBidWZmZXIgIzAgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBICAgICAgQklUKDApCisKKy8qIFRYIHJlc3VsdChzKSBhcmUgaW4gdGhlIFRYIGNvbXBsZXRlIGJ1ZmZlciAqLworI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfVFhfUkVTVUxUCUJJVCgxKQorCisvKiBPQlNPTEVURSAqLworI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfVFhfWEZSCQlCSVQoMikKKworLyogUlggcGFja2V0IGlzIHJlYWR5IGluIFhmZXIgYnVmZmVyICMxICovCisjZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQQlCSVQoMykKKworLyogRXZlbnQgd2FzIGVudGVyZWQgdG8gRXZlbnQgTUJPWCAjQSAqLworI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQQkJQklUKDQpCisKKy8qIEV2ZW50IHdhcyBlbnRlcmVkIHRvIEV2ZW50IE1CT1ggI0IgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0IJCUJJVCg1KQorCisvKiBPQlNPTEVURSAqLworI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfV0FLRV9PTl9IT1NUCUJJVCg2KQorCisvKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0EgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RSQUNFX0EJCUJJVCg3KQorCisvKiBUcmFjZSBtZWFzc2dlIG9uIE1CT1ggI0IgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX1RSQUNFX0IJCUJJVCg4KQorCisvKiBDb21tYW5kIHByb2Nlc3NpbmcgY29tcGxldGlvbiAqLworI2RlZmluZSBXTDEyNTFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFCUJJVCg5KQorCisvKiBJbml0IHNlcXVlbmNlIGlzIGRvbmUgKi8KKyNkZWZpbmUgV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUJQklUKDE0KQorCisjZGVmaW5lIFdMMTI1MV9BQ1hfSU5UUl9BTEwgICAgICAgICAgIDB4RkZGRkZGRkYKKwogZW51bSB7CiAJQUNYX1dBS0VfVVBfQ09ORElUSU9OUyAgICAgID0gMHgwMDAyLAogCUFDWF9NRU1fQ0ZHICAgICAgICAgICAgICAgICA9IDB4MDAwMywKQEAgLTEyMTAsMzYgKzEyNTIsNDEgQEAKIH07CiAKIAotaW50IHdsMTJ4eF9hY3hfZnJhbWVfcmF0ZXMoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGN0cmxfcmF0ZSwgdTggY3RybF9tb2QsCitpbnQgd2wxMjUxX2FjeF9mcmFtZV9yYXRlcyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggY3RybF9yYXRlLCB1OCBjdHJsX21vZCwKIAkJCSAgIHU4IG1ndF9yYXRlLCB1OCBtZ3RfbW9kKTsKLWludCB3bDEyeHhfYWN4X3N0YXRpb25faWQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfZGVmYXVsdF9rZXkoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGtleV9pZCk7Ci1pbnQgd2wxMnh4X2FjeF93YWtlX3VwX2NvbmRpdGlvbnMoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGxpc3Rlbl9pbnRlcnZhbCk7Ci1pbnQgd2wxMnh4X2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyeHggKndsLCB1OCBzbGVlcF9hdXRoKTsKLWludCB3bDEyeHhfYWN4X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTJ4eCAqd2wsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7Ci1pbnQgd2wxMnh4X2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IHBvd2VyKTsKLWludCB3bDEyeHhfYWN4X2ZlYXR1cmVfY2ZnKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X21lbV9tYXAoc3RydWN0IHdsMTJ4eCAqd2wsIHZvaWQgKm1lbV9tYXAsIHNpemVfdCBsZW4pOwotaW50IHdsMTJ4eF9hY3hfZGF0YV9wYXRoX3BhcmFtcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwKK2ludCB3bDEyNTFfYWN4X3N0YXRpb25faWQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfZGVmYXVsdF9rZXkoc3RydWN0IHdsMTI1MSAqd2wsIHU4IGtleV9pZCk7CitpbnQgd2wxMjUxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMoc3RydWN0IHdsMTI1MSAqd2wsIHU4IHdha2VfdXBfZXZlbnQsCisJCQkJICB1OCBsaXN0ZW5faW50ZXJ2YWwpOworaW50IHdsMTI1MV9hY3hfc2xlZXBfYXV0aChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggc2xlZXBfYXV0aCk7CitpbnQgd2wxMjUxX2FjeF9md192ZXJzaW9uKHN0cnVjdCB3bDEyNTEgKndsLCBjaGFyICpidWYsIHNpemVfdCBsZW4pOworaW50IHdsMTI1MV9hY3hfdHhfcG93ZXIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBwb3dlcik7CitpbnQgd2wxMjUxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyNTEgKndsLAorCQkgICAgICAgc3RydWN0IGFjeF9oZWFkZXIgKm1lbV9tYXAsIHNpemVfdCBsZW4pOworaW50IHdsMTI1MV9hY3hfZGF0YV9wYXRoX3BhcmFtcyhzdHJ1Y3Qgd2wxMjUxICp3bCwKIAkJCQlzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCAqZGF0YV9wYXRoKTsKLWludCB3bDEyeHhfYWN4X3J4X21zZHVfbGlmZV90aW1lKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgbGlmZV90aW1lKTsKLWludCB3bDEyeHhfYWN4X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcik7Ci1pbnQgd2wxMnh4X2FjeF9wZF90aHJlc2hvbGQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfc2xvdChzdHJ1Y3Qgd2wxMnh4ICp3bCwgZW51bSBhY3hfc2xvdF90eXBlIHNsb3RfdGltZSk7Ci1pbnQgd2wxMnh4X2FjeF9ncm91cF9hZGRyZXNzX3RibChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBydHNfdGhyZXNob2xkKTsKLWludCB3bDEyeHhfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfc2dfZW5hYmxlKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X3NnX2NmZyhzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9jY2FfdGhyZXNob2xkKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X2Jjbl9kdGltX29wdGlvbnMoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfYWlkKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgYWlkKTsKLWludCB3bDEyeHhfYWN4X2V2ZW50X21ib3hfbWFzayhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGV2ZW50X21hc2spOwotaW50IHdsMTJ4eF9hY3hfc2V0X3ByZWFtYmxlKHN0cnVjdCB3bDEyeHggKndsLCBlbnVtIGFjeF9wcmVhbWJsZV90eXBlIHByZWFtYmxlKTsKLWludCB3bDEyeHhfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyeHggKndsLAoraW50IHdsMTI1MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBsaWZlX3RpbWUpOworaW50IHdsMTI1MV9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKK2ludCB3bDEyNTFfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9zbG90KHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKTsKK2ludCB3bDEyNTFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOworaW50IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9haWQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBhaWQpOworaW50IHdsMTI1MV9hY3hfZXZlbnRfbWJveF9tYXNrKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgZXZlbnRfbWFzayk7CitpbnQgd2wxMjUxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI1MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpOworaW50IHdsMTI1MV9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTI1MSAqd2wsCiAJCQkgICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpOwotaW50IHdsMTJ4eF9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cyk7CitpbnQgd2wxMjUxX2FjeF9zdGF0aXN0aWNzKHN0cnVjdCB3bDEyNTEgKndsLCBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKnN0YXRzKTsKK2ludCB3bDEyNTFfYWN4X3RzZl9pbmZvKHN0cnVjdCB3bDEyNTEgKndsLCB1NjQgKm1hY3RpbWUpOworaW50IHdsMTI1MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2FjeF9tZW1fY2ZnKHN0cnVjdCB3bDEyNTEgKndsKTsKIAotI2VuZGlmIC8qIF9fV0wxMlhYX0FDWF9IX18gKi8KKyNlbmRpZiAvKiBfX1dMMTI1MV9BQ1hfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MmQ3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2Jvb3QuYwpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYm9vdC5oIgorI2luY2x1ZGUgIndsMTI1MV9pby5oIgorI2luY2x1ZGUgIndsMTI1MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNTFfZXZlbnQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisKK3ZvaWQgd2wxMjUxX2Jvb3RfdGFyZ2V0X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywgfih3bC0+aW50cl9tYXNrKSk7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBISV9DRkcsIEhJX0NGR19ERUZfVkFMKTsKK30KKworaW50IHdsMTI1MV9ib290X3NvZnRfcmVzZXQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBib290X2RhdGE7CisKKwkvKiBwZXJmb3JtIHNvZnQgcmVzZXQgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQsIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpOworCisJLyogU09GVF9SRVNFVCBpcyBzZWxmIGNsZWFyaW5nICovCisJdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKFNPRlRfUkVTRVRfTUFYX1RJTUUpOworCXdoaWxlICgxKSB7CisJCWJvb3RfZGF0YSA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VUKTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJzb2Z0IHJlc2V0IGJvb3RkYXRhIDB4JXgiLCBib290X2RhdGEpOworCQlpZiAoKGJvb3RfZGF0YSAmIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpID09IDApCisJCQlicmVhazsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJLyogMS4yIGNoZWNrIHBXaGFsQnVzLT51U2VsZkNsZWFyVGltZSBpZiB0aGUKKwkJCSAqIHRpbWVvdXQgd2FzIHJlYWNoZWQgKi8KKwkJCXdsMTI1MV9lcnJvcigic29mdCByZXNldCB0aW1lb3V0Iik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQl1ZGVsYXkoU09GVF9SRVNFVF9TVEFMTF9USU1FKTsKKwl9CisKKwkvKiBkaXNhYmxlIFJ4L1R4ICovCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBFTkFCTEUsIDB4MCk7CisKKwkvKiBkaXNhYmxlIGF1dG8gY2FsaWJyYXRpb24gb24gc3RhcnQqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgU1BBUkVfQTIsIDB4ZmZmZik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9ib290X2luaXRfc2VxKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXUzMiBzY3JfcGFkNiwgaW5pdF9kYXRhLCB0bXAsIGVscF9jbWQsIHJlZl9mcmVxOworCisJLyoKKwkgKiBjb2wgIzE6IElOVEVHRVJfRElWSURFUgorCSAqIGNvbCAjMjogRlJBQ1RJT05BTF9ESVZJREVSCisJICogY29sICMzOiBBVFROX0JCCisJICogY29sICM0OiBBTFBIQV9CQgorCSAqIGNvbCAjNTogU1RPUF9USU1FX0JCCisJICogY29sICM2OiBCQl9QTExfTE9PUF9GSUxURVIKKwkgKi8KKwlzdGF0aWMgY29uc3QgdTMyIExVVFtSRUZfRlJFUV9OVU1dW0xVVF9QQVJBTV9OVU1dID0geworCisJCXsgICA4MywgODczODEsICAweEIsIDUsIDB4RjAwLCAgM30sIC8qIFJFRl9GUkVRXzE5XzIqLworCQl7ICAgNjEsIDE0MTE1NCwgMHhCLCA1LCAweDE0NTAsIDJ9LCAvKiBSRUZfRlJFUV8yNl8wKi8KKwkJeyAgIDQxLCAxNzQ3NjMsIDB4QywgNiwgMHgyRDAwLCAxfSwgLyogUkVGX0ZSRVFfMzhfNCovCisJCXsgICA0MCwgMCwgICAgICAweEMsIDYsIDB4MkVFMCwgMX0sIC8qIFJFRl9GUkVRXzQwXzAqLworCQl7ICAgNDcsIDE2MjI4MCwgMHhDLCA2LCAweDI3NjAsIDF9ICAvKiBSRUZfRlJFUV8zM182ICAgICAgICAqLworCX07CisKKwkvKiByZWFkIE5WUyBwYXJhbXMgKi8KKwlzY3JfcGFkNiA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBTQ1JfUEFENik7CisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJzY3JfcGFkNiAweCV4Iiwgc2NyX3BhZDYpOworCisJLyogcmVhZCBFTFBfQ01EICovCisJZWxwX2NtZCA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBFTFBfQ01EKTsKKwl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwgImVscF9jbWQgMHgleCIsIGVscF9jbWQpOworCisJLyogc2V0IHRoZSBCQiBjYWxpYnJhdGlvbiB0aW1lIHRvIGJlIDMwMCB1c2VjIChQTExfQ0FMX1RJTUUpICovCisJcmVmX2ZyZXEgPSBzY3JfcGFkNiAmIDB4MDAwMDAwRkY7CisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJyZWZfZnJlcSAweCV4IiwgcmVmX2ZyZXEpOworCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBQTExfQ0FMX1RJTUUsIDB4OSk7CisKKwkvKgorCSAqIFBHIDEuMjogc2V0IHRoZSBjbG9jayBidWZmZXIgdGltZSB0byBiZSAyMTAgdXNlYyAoQ0xLX0JVRl9USU1FKQorCSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQ0xLX0JVRl9USU1FLCAweDYpOworCisJLyoKKwkgKiBzZXQgdGhlIGNsb2NrIGRldGVjdCBmZWF0dXJlIHRvIHdvcmsgaW4gdGhlIHJlc3RhcnQgd3UgcHJvY2VkdXJlCisJICogKEVMUF9DRkdfTU9ERVsxNF0pIGFuZCBTZWxlY3QgdGhlIGNsb2NrIHNvdXJjZSB0eXBlCisJICogKEVMUF9DRkdfTU9ERVsxMzoxMl0pCisJICovCisJdG1wID0gKChzY3JfcGFkNiAmIDB4MDAwMEZGMDApIDw8IDQpIHwgMHgwMDAwNDAwMDsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEVMUF9DRkdfTU9ERSwgdG1wKTsKKworCS8qIFBHIDEuMjogZW5hYmxlIHRoZSBCQiBQTEwgZml4LiBFbmFibGUgdGhlIFBMTF9MSU1QX0NMS19FTl9DTUQgKi8KKwllbHBfY21kIHw9IDB4MDAwMDAwNDA7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBFTFBfQ01ELCBlbHBfY21kKTsKKworCS8qIFBHIDEuMjogU2V0IHRoZSBCQiBQTEwgc3RhYmxlIHRpbWUgdG8gYmUgMTAwMHVzZWMKKwkgKiAoUExMX1NUQUJMRV9USU1FKSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQ0ZHX1BMTF9TWU5DX0NOVCwgMHgyMCk7CisKKwkvKiBQRyAxLjI6IHJlYWQgY2xvY2sgcmVxdWVzdCB0aW1lICovCisJaW5pdF9kYXRhID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIENMS19SRVFfVElNRSk7CisKKwkvKgorCSAqIFBHIDEuMjogc2V0IHRoZSBjbG9jayByZXF1ZXN0IHRpbWUgdG8gYmUgcmVmX2Nsa19zZXR0bGluZ190aW1lIC0KKwkgKiAxbXMgPSA0bXMKKwkgKi8KKwlpZiAoaW5pdF9kYXRhID4gMHgyMSkKKwkJdG1wID0gaW5pdF9kYXRhIC0gMHgyMTsKKwllbHNlCisJCXRtcCA9IDA7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBDTEtfUkVRX1RJTUUsIHRtcCk7CisKKwkvKiBzZXQgQkIgUExMIGNvbmZpZ3VyYXRpb25zIGluIFJGIEFGRSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThjYywgMHg0QjUpOworCisJLyogc2V0IFJGX0FGRV9SRUdfNSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThkNCwgMHg1MCk7CisKKwkvKiBzZXQgUkZfQUZFX0NUUkxfUkVHXzIgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU5NDgsIDB4MTFjMDAxKTsKKworCS8qCisJICogY2hhbmdlIFJGIFBMTCBhbmQgQkIgUExMIGRpdmlkZXIgZm9yIFZDTyBjbG9jayBhbmQgYWRqdXN0IFZDTworCSAqIGJhaXMgY3VycmVudChSRl9BRkVfUkVHXzEzKQorCSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNThmNCwgMHgxZSk7CisKKwkvKiBzZXQgQkIgUExMIGNvbmZpZ3VyYXRpb25zICovCisJdG1wID0gTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fSU5URUdFUl9ESVZJREVSXSB8IDB4MDAwMTcwMDA7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCAweDAwMzA1ODQwLCB0bXApOworCisJLyogc2V0IGZyYWN0aW9uYWwgZGl2aWRlciBhY2NvcmRpbmcgdG8gQXBwZW5kaXggQy1CQiBQTEwKKwkgKiBDYWxjdWxhdGlvbnMKKwkgKi8KKwl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9GUkFDVElPTkFMX0RJVklERVJdOworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgMHgwMDMwNTg0NCwgdG1wKTsKKworCS8qIHNldCB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgc2lnbWEgZGVsdGEgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NDgsIDB4MzAzOSk7CisKKwkvKgorCSAqIHNldCB0aGUgYWNjdW11bGF0b3IgYXR0ZW51YXRpb24gdmFsdWUsIGNhbGlicmF0aW9uIGxvb3AxCisJICogKGFscGhhKSwgY2FsaWJyYXRpb24gbG9vcDIgKGJldGEpLCBjYWxpYnJhdGlvbiBsb29wMyAoZ2FtbWEpIGFuZAorCSAqIHRoZSBWQ08gZ2FpbgorCSAqLworCXRtcCA9IChMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9BVFROX0JCXSA8PCAxNikgfAorCQkoTFVUW3JlZl9mcmVxXVtMVVRfUEFSQU1fQUxQSEFfQkJdIDw8IDEyKSB8IDB4MTsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NTQsIHRtcCk7CisKKwkvKgorCSAqIHNldCB0aGUgY2FsaWJyYXRpb24gc3RvcCB0aW1lIGFmdGVyIGhvbGRvZmYgdGltZSBleHBpcmVzIGFuZCBzZXQKKwkgKiBzZXR0bGluZyB0aW1lIEhPTERfT0ZGX1RJTUVfQkIKKwkgKi8KKwl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9TVE9QX1RJTUVfQkJdIHwgMHgwMDBBMDAwMDsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4NTgsIHRtcCk7CisKKwkvKgorCSAqIHNldCBCQiBQTEwgTG9vcCBmaWx0ZXIgY2FwYWNpdG9yMy0gQkJfQzNbMjowXSBhbmQgc2V0IEJCIFBMTAorCSAqIGNvbnN0YW50IGxlYWthZ2UgY3VycmVudCB0byBsaW5lYXJpemUgUEZEIHRvIDB1QSAtCisJICogQkJfSUxPT1BGWzc6M10KKwkgKi8KKwl0bXAgPSBMVVRbcmVmX2ZyZXFdW0xVVF9QQVJBTV9CQl9QTExfTE9PUF9GSUxURVJdIHwgMHgwMDAwMDAzMDsKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZjgsIHRtcCk7CisKKwkvKgorCSAqIHNldCByZWd1bGF0b3Igb3V0cHV0IHZvbHRhZ2UgZm9yIG4gZGl2aWRlciB0bworCSAqIDEuMzUtQkJfUkVGRElWWzE6MF0sIHNldCBjaGFyZ2UgcHVtcCBjdXJyZW50LSBCQl9DUEdBSU5bNDoyXSwKKwkgKiBzZXQgQkIgUExMIExvb3AgZmlsdGVyIGNhcGFjaXRvcjItIEJCX0MyWzc6NV0sIHNldCBnYWluIG9mIEJCCisJICogUExMIGF1dG8tY2FsbCB0byBub3JtYWwgbW9kZS0gQkJfQ0FMR0FJTl8zREJbOF0KKwkgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIDB4MDAzMDU4ZjAsIDB4MjkpOworCisJLyogZW5hYmxlIHJlc3RhcnQgd2FrZXVwIHNlcXVlbmNlIChFTFBfQ01EWzBdKSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgRUxQX0NNRCwgZWxwX2NtZCB8IDB4MSk7CisKKwkvKiByZXN0YXJ0IHNlcXVlbmNlIGNvbXBsZXRlZCAqLworCXVkZWxheSgyMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfYm9vdF9zZXRfZWNwdV9jdHJsKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgZmxhZykKK3sKKwl1MzIgY3B1X2N0cmw7CisKKwkvKiAxMC41LjAgcnVuIHRoZSBmaXJtd2FyZSAoSSkgKi8KKwljcHVfY3RybCA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7CisKKwkvKiAxMC41LjEgcnVuIHRoZSBmaXJtd2FyZSAoSUkpICovCisJY3B1X2N0cmwgJj0gfmZsYWc7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCwgY3B1X2N0cmwpOworfQorCitpbnQgd2wxMjUxX2Jvb3RfcnVuX2Zpcm13YXJlKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCBsb29wLCByZXQ7CisJdTMyIGNoaXBfaWQsIGludGVycnVwdDsKKworCXdsMTI1MV9ib290X3NldF9lY3B1X2N0cmwod2wsIEVDUFVfQ09OVFJPTF9IQUxUKTsKKworCWNoaXBfaWQgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCBhZnRlciBmaXJtd2FyZSBib290OiAweCV4IiwgY2hpcF9pZCk7CisKKwlpZiAoY2hpcF9pZCAhPSB3bC0+Y2hpcF9pZCkgeworCQl3bDEyNTFfZXJyb3IoImNoaXAgaWQgZG9lc24ndCBtYXRjaCBhZnRlciBmaXJtd2FyZSBib290Iik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIHdhaXQgZm9yIGluaXQgdG8gY29tcGxldGUgKi8KKwlsb29wID0gMDsKKwl3aGlsZSAobG9vcCsrIDwgSU5JVF9MT09QKSB7CisJCXVkZWxheShJTklUX0xPT1BfREVMQVkpOworCQlpbnRlcnJ1cHQgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCisJCWlmIChpbnRlcnJ1cHQgPT0gMHhmZmZmZmZmZikgeworCQkJd2wxMjUxX2Vycm9yKCJlcnJvciByZWFkaW5nIGhhcmR3YXJlIGNvbXBsZXRlICIKKwkJCQkgICAgICJpbml0IGluZGljYXRpb24iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCS8qIGNoZWNrIHRoYXQgQUNYX0lOVFJfSU5JVF9DT01QTEVURSBpcyBlbmFibGVkICovCisJCWVsc2UgaWYgKGludGVycnVwdCAmIFdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKSB7CisJCQl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKKwkJCQkJICAgV0wxMjUxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobG9vcCA+PSBJTklUX0xPT1ApIHsKKwkJd2wxMjUxX2Vycm9yKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHRoZSBoYXJkd2FyZSB0byAiCisJCQkgICAgICJjb21wbGV0ZSBpbml0aWFsaXphdGlvbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGNvbW1hbmQgbWFpbCBib3ggKi8KKwl3bC0+Y21kX2JveF9hZGRyID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIFJFR19DT01NQU5EX01BSUxCT1hfUFRSKTsKKworCS8qIGdldCBoYXJkd2FyZSBjb25maWcgZXZlbnQgbWFpbCBib3ggKi8KKwl3bC0+ZXZlbnRfYm94X2FkZHIgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKKworCS8qIHNldCB0aGUgd29ya2luZyBwYXJ0aXRpb24gdG8gaXRzICJydW5uaW5nIiBtb2RlIG9mZnNldCAqLworCXdsMTI1MV9zZXRfcGFydGl0aW9uKHdsLCBXTDEyNTFfUEFSVF9XT1JLX01FTV9TVEFSVCwKKwkJCSAgICAgV0wxMjUxX1BBUlRfV09SS19NRU1fU0laRSwKKwkJCSAgICAgV0wxMjUxX1BBUlRfV09SS19SRUdfU1RBUlQsCisJCQkgICAgIFdMMTI1MV9QQVJUX1dPUktfUkVHX1NJWkUpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BSUxCT1gsICJjbWRfYm94X2FkZHIgMHgleCBldmVudF9ib3hfYWRkciAweCV4IiwKKwkJICAgICB3bC0+Y21kX2JveF9hZGRyLCB3bC0+ZXZlbnRfYm94X2FkZHIpOworCisJd2wxMjUxX2FjeF9md192ZXJzaW9uKHdsLCB3bC0+ZndfdmVyLCBzaXplb2Yod2wtPmZ3X3ZlcikpOworCisJLyoKKwkgKiBpbiBjYXNlIG9mIGZ1bGwgYXN5bmNocm9ub3VzIG1vZGUgdGhlIGZpcm13YXJlIGV2ZW50IG11c3QgYmUKKwkgKiByZWFkeSB0byByZWNlaXZlIGV2ZW50IGZyb20gdGhlIGNvbW1hbmQgbWFpbGJveAorCSAqLworCisJLyogZW5hYmxlIGdwaW8gaW50ZXJydXB0cyAqLworCXdsMTI1MV9lbmFibGVfaW50ZXJydXB0cyh3bCk7CisKKwkvKiBFbmFibGUgdGFyZ2V0J3MgaW50ZXJydXB0cyAqLworCXdsLT5pbnRyX21hc2sgPSBXTDEyNTFfQUNYX0lOVFJfUlgwX0RBVEEgfAorCQlXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEgfAorCQlXTDEyNTFfQUNYX0lOVFJfVFhfUkVTVUxUIHwKKwkJV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EgfAorCQlXTDEyNTFfQUNYX0lOVFJfRVZFTlRfQiB8CisJCVdMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFOworCXdsMTI1MV9ib290X3RhcmdldF9lbmFibGVfaW50ZXJydXB0cyh3bCk7CisKKwkvKiB1bm1hc2sgYWxsIG1ib3ggZXZlbnRzICAqLworCXdsLT5ldmVudF9tYXNrID0gMHhmZmZmZmZmZjsKKworCXJldCA9IHdsMTI1MV9ldmVudF91bm1hc2sod2wpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiRVZFTlQgbWFzayBzZXR0aW5nIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdsMTI1MV9ldmVudF9tYm94X2NvbmZpZyh3bCk7CisKKwkvKiBmaXJtd2FyZSBzdGFydHVwIGNvbXBsZXRlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9ib290X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgYWRkciwgY2h1bmtfbnVtLCBwYXJ0aXRpb25fbGltaXQ7CisJc2l6ZV90IGZ3X2RhdGFfbGVuOworCXU4ICpwOworCisJLyogd2hhbF9Gd0N0cmxfTG9hZEZ3SW1hZ2VTbSgpICovCisKKwl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgYmVmb3JlIGZ3IHVwbG9hZDogMHgleCIsCisJCSAgICAgd2wxMjUxX3JlZ19yZWFkMzIod2wsIENISVBfSURfQikpOworCisJLyogMTAuMCBjaGVjayBmaXJtd2FyZSBsZW5ndGggYW5kIHNldCBwYXJ0aXRpb24gKi8KKwlmd19kYXRhX2xlbiA9ICAod2wtPmZ3WzRdIDw8IDI0KSB8ICh3bC0+ZndbNV0gPDwgMTYpIHwKKwkJKHdsLT5md1s2XSA8PCA4KSB8ICh3bC0+ZndbN10pOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJmd19kYXRhX2xlbiAlenUgY2h1bmtfc2l6ZSAlZCIsIGZ3X2RhdGFfbGVuLAorCQlDSFVOS19TSVpFKTsKKworCWlmICgoZndfZGF0YV9sZW4gJSA0KSAhPSAwKSB7CisJCXdsMTI1MV9lcnJvcigiZmlybXdhcmUgbGVuZ3RoIG5vdCBtdWx0aXBsZSBvZiBmb3VyIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXdsMTI1MV9zZXRfcGFydGl0aW9uKHdsLCBXTDEyNTFfUEFSVF9ET1dOX01FTV9TVEFSVCwKKwkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9NRU1fU0laRSwKKwkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9SRUdfU1RBUlQsCisJCQkgICAgIFdMMTI1MV9QQVJUX0RPV05fUkVHX1NJWkUpOworCisJLyogMTAuMSBzZXQgcGFydGl0aW9uIGxpbWl0IGFuZCBjaHVuayBudW0gKi8KKwljaHVua19udW0gPSAwOworCXBhcnRpdGlvbl9saW1pdCA9IFdMMTI1MV9QQVJUX0RPV05fTUVNX1NJWkU7CisKKwl3aGlsZSAoY2h1bmtfbnVtIDwgZndfZGF0YV9sZW4gLyBDSFVOS19TSVpFKSB7CisJCS8qIDEwLjIgdXBkYXRlIHBhcnRpdGlvbiwgaWYgbmVlZGVkICovCisJCWFkZHIgPSBXTDEyNTFfUEFSVF9ET1dOX01FTV9TVEFSVCArCisJCQkoY2h1bmtfbnVtICsgMikgKiBDSFVOS19TSVpFOworCQlpZiAoYWRkciA+IHBhcnRpdGlvbl9saW1pdCkgeworCQkJYWRkciA9IFdMMTI1MV9QQVJUX0RPV05fTUVNX1NUQVJUICsKKwkJCQljaHVua19udW0gKiBDSFVOS19TSVpFOworCQkJcGFydGl0aW9uX2xpbWl0ID0gY2h1bmtfbnVtICogQ0hVTktfU0laRSArCisJCQkJV0wxMjUxX1BBUlRfRE9XTl9NRU1fU0laRTsKKwkJCXdsMTI1MV9zZXRfcGFydGl0aW9uKHdsLAorCQkJCQkgICAgIGFkZHIsCisJCQkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9NRU1fU0laRSwKKwkJCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX1JFR19TVEFSVCwKKwkJCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX1JFR19TSVpFKTsKKwkJfQorCisJCS8qIDEwLjMgdXBsb2FkIHRoZSBjaHVuayAqLworCQlhZGRyID0gV0wxMjUxX1BBUlRfRE9XTl9NRU1fU1RBUlQgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCQlwID0gd2wtPmZ3ICsgRldfSERSX1NJWkUgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCQl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwgInVwbG9hZGluZyBmdyBjaHVuayAweCVwIHRvIDB4JXgiLAorCQkJICAgICBwLCBhZGRyKTsKKwkJd2wxMjUxX21lbV93cml0ZSh3bCwgYWRkciwgcCwgQ0hVTktfU0laRSk7CisKKwkJY2h1bmtfbnVtKys7CisJfQorCisJLyogMTAuNCB1cGxvYWQgdGhlIGxhc3QgY2h1bmsgKi8KKwlhZGRyID0gV0wxMjUxX1BBUlRfRE9XTl9NRU1fU1RBUlQgKyBjaHVua19udW0gKiBDSFVOS19TSVpFOworCXAgPSB3bC0+ZncgKyBGV19IRFJfU0laRSArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJ1cGxvYWRpbmcgZncgbGFzdCBjaHVuayAoJXp1IEIpIDB4JXAgdG8gMHgleCIsCisJCSAgICAgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFLCBwLCBhZGRyKTsKKwl3bDEyNTFfbWVtX3dyaXRlKHdsLCBhZGRyLCBwLCBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2Jvb3RfdXBsb2FkX252cyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzaXplX3QgbnZzX2xlbiwgbnZzX2J5dGVzX3dyaXR0ZW4sIGJ1cnN0X2xlbjsKKwlpbnQgbnZzX3N0YXJ0LCBpOworCXUzMiBkZXN0X2FkZHIsIHZhbDsKKwl1OCAqbnZzX3B0ciwgKm52czsKKworCW52cyA9IHdsLT5udnM7CisJaWYgKG52cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW52c19wdHIgPSBudnM7CisKKwludnNfbGVuID0gd2wtPm52c19sZW47CisJbnZzX3N0YXJ0ID0gd2wtPmZ3X2xlbjsKKworCS8qCisJICogTGF5b3V0IGJlZm9yZSB0aGUgYWN0dWFsIE5WUyB0YWJsZXM6CisJICogMSBieXRlIDogYnVyc3QgbGVuZ3RoLgorCSAqIDIgYnl0ZXM6IGRlc3RpbmF0aW9uIGFkZHJlc3MuCisJICogbiBieXRlczogZGF0YSB0byBidXJzdCBjb3B5LgorCSAqCisJICogVGhpcyBpcyBlbmRlZCBieSBhIDAgbGVuZ3RoLCB0aGVuIHRoZSBOVlMgdGFibGVzLgorCSAqLworCisJd2hpbGUgKG52c19wdHJbMF0pIHsKKwkJYnVyc3RfbGVuID0gbnZzX3B0clswXTsKKwkJZGVzdF9hZGRyID0gKG52c19wdHJbMV0gJiAweGZlKSB8ICgodTMyKShudnNfcHRyWzJdIDw8IDgpKTsKKworCQkvKiBXZSBtb3ZlIG91ciBwb2ludGVyIHRvIHRoZSBkYXRhICovCisJCW52c19wdHIgKz0gMzsKKworCQlmb3IgKGkgPSAwOyBpIDwgYnVyc3RfbGVuOyBpKyspIHsKKwkJCXZhbCA9IChudnNfcHRyWzBdIHwgKG52c19wdHJbMV0gPDwgOCkKKwkJCSAgICAgICB8IChudnNfcHRyWzJdIDw8IDE2KSB8IChudnNfcHRyWzNdIDw8IDI0KSk7CisKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULAorCQkJCSAgICAgIm52cyBidXJzdCB3cml0ZSAweCV4OiAweCV4IiwKKwkJCQkgICAgIGRlc3RfYWRkciwgdmFsKTsKKwkJCXdsMTI1MV9tZW1fd3JpdGUzMih3bCwgZGVzdF9hZGRyLCB2YWwpOworCisJCQludnNfcHRyICs9IDQ7CisJCQlkZXN0X2FkZHIgKz0gNDsKKwkJfQorCX0KKworCS8qCisJICogV2UndmUgcmVhY2hlZCB0aGUgZmlyc3QgemVybyBsZW5ndGgsIHRoZSBmaXJzdCBOVlMgdGFibGUKKwkgKiBpcyA3IGJ5dGVzIGZ1cnRoZXIuCisJICovCisJbnZzX3B0ciArPSA3OworCW52c19sZW4gLT0gbnZzX3B0ciAtIG52czsKKwludnNfbGVuID0gQUxJR04obnZzX2xlbiwgNCk7CisKKwkvKiBOb3cgd2UgbXVzdCBzZXQgdGhlIHBhcnRpdGlvbiBjb3JyZWN0bHkgKi8KKwl3bDEyNTFfc2V0X3BhcnRpdGlvbih3bCwgbnZzX3N0YXJ0LAorCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX01FTV9TSVpFLAorCQkJICAgICBXTDEyNTFfUEFSVF9ET1dOX1JFR19TVEFSVCwKKwkJCSAgICAgV0wxMjUxX1BBUlRfRE9XTl9SRUdfU0laRSk7CisKKwkvKiBBbmQgZmluYWxseSB3ZSB1cGxvYWQgdGhlIE5WUyB0YWJsZXMgKi8KKwludnNfYnl0ZXNfd3JpdHRlbiA9IDA7CisJd2hpbGUgKG52c19ieXRlc193cml0dGVuIDwgbnZzX2xlbikgeworCQl2YWwgPSAobnZzX3B0clswXSB8IChudnNfcHRyWzFdIDw8IDgpCisJCSAgICAgICB8IChudnNfcHRyWzJdIDw8IDE2KSB8IChudnNfcHRyWzNdIDw8IDI0KSk7CisKKwkJdmFsID0gY3B1X3RvX2xlMzIodmFsKTsKKworCQl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwKKwkJCSAgICAgIm52cyB3cml0ZSB0YWJsZSAweCV4OiAweCV4IiwKKwkJCSAgICAgbnZzX3N0YXJ0LCB2YWwpOworCQl3bDEyNTFfbWVtX3dyaXRlMzIod2wsIG52c19zdGFydCwgdmFsKTsKKworCQludnNfcHRyICs9IDQ7CisJCW52c19ieXRlc193cml0dGVuICs9IDQ7CisJCW52c19zdGFydCArPSA0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2Jvb3Qoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldCA9IDAsIG1pbm9yX21pbm9yX2UyX3ZlcjsKKwl1MzIgdG1wLCBib290X2RhdGE7CisKKwkvKiBoYWx0IGVtYmVkZGVkIEFSTSBDUFUgd2hpbGUgbG9hZGluZyBmaXJtd2FyZSAqLworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19FQ1BVX0NPTlRST0wsIEVDUFVfQ09OVFJPTF9IQUxUKTsKKworCXJldCA9IHdsMTI1MV9ib290X3NvZnRfcmVzZXQod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIDIuIHN0YXJ0IHByb2Nlc3NpbmcgTlZTIGZpbGUgKi8KKwlyZXQgPSB3bDEyNTFfYm9vdF91cGxvYWRfbnZzKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiB3cml0ZSBmaXJtd2FyZSdzIGxhc3QgYWRkcmVzcyAoaWUuIGl0J3MgbGVuZ3RoKSB0bworCSAqIEFDWF9FRVBST01MRVNTX0lORF9SRUcgKi8KKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9FRVBST01MRVNTX0lORF9SRUcsIHdsLT5md19sZW4pOworCisJLyogNi4gcmVhZCB0aGUgRUVQUk9NIHBhcmFtZXRlcnMgKi8KKwl0bXAgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgU0NSX1BBRDIpOworCisJLyogNy4gcmVhZCBib290ZGF0YSAqLworCXdsLT5ib290X2F0dHIucmFkaW9fdHlwZSA9ICh0bXAgJiAweDAwMDBGRjAwKSA+PiA4OworCXdsLT5ib290X2F0dHIubWFqb3IgPSAodG1wICYgMHgwMEZGMDAwMCkgPj4gMTY7CisJdG1wID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIFNDUl9QQUQzKTsKKworCS8qIDguIGNoZWNrIGJvb3RkYXRhIGFuZCBjYWxsIHJlc3RhcnQgc2VxdWVuY2UgKi8KKwl3bC0+Ym9vdF9hdHRyLm1pbm9yID0gKHRtcCAmIDB4MDBGRjAwMDApID4+IDE2OworCW1pbm9yX21pbm9yX2UyX3ZlciA9ICh0bXAgJiAweEZGMDAwMDAwKSA+PiAyNDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAicmFkaW9UeXBlIDB4JXggbWFqb3JFMlZlciAweCV4ICIKKwkJICAgICAibWlub3JFMlZlciAweCV4IG1pbm9yX21pbm9yX2UyX3ZlciAweCV4IiwKKwkJICAgICB3bC0+Ym9vdF9hdHRyLnJhZGlvX3R5cGUsIHdsLT5ib290X2F0dHIubWFqb3IsCisJCSAgICAgd2wtPmJvb3RfYXR0ci5taW5vciwgbWlub3JfbWlub3JfZTJfdmVyKTsKKworCXJldCA9IHdsMTI1MV9ib290X2luaXRfc2VxKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiA5LiBOVlMgcHJvY2Vzc2luZyBkb25lICovCisJYm9vdF9kYXRhID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MKTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAiaGFsdCBib290X2RhdGEgMHgleCIsIGJvb3RfZGF0YSk7CisKKwkvKiAxMC4gY2hlY2sgdGhhdCBFQ1BVX0NPTlRST0xfSEFMVCBiaXRzIGFyZSBzZXQgaW4KKwkgKiBwV2hhbEJ1cy0+dUJvb3REYXRhIGFuZCBzdGFydCB1cGxvYWRpbmcgZmlybXdhcmUKKwkgKi8KKwlpZiAoKGJvb3RfZGF0YSAmIEVDUFVfQ09OVFJPTF9IQUxUKSA9PSAwKSB7CisJCXdsMTI1MV9lcnJvcigiYm9vdCBmYWlsZWQsIEVDUFVfQ09OVFJPTF9IQUxUIG5vdCBzZXQiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gd2wxMjUxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiAxMC41IHN0YXJ0IGZpcm13YXJlICovCisJcmV0ID0gd2wxMjUxX2Jvb3RfcnVuX2Zpcm13YXJlKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2Jvb3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYm9vdC5oCnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYm9vdC5oCmluZGV4IDRmYTczMTMuLjkwMDYzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9ib290LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ib290LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCkBAIC0yNCwxMiArMjQsMTMgQEAKICNpZm5kZWYgX19CT09UX0hfXwogI2RlZmluZSBfX0JPT1RfSF9fCiAKLSNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJ3bDEyNTEuaCIKIAotaW50IHdsMTJ4eF9ib290X3NvZnRfcmVzZXQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9ib290X2luaXRfc2VxKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYm9vdF9ydW5fZmlybXdhcmUoc3RydWN0IHdsMTJ4eCAqd2wpOwotdm9pZCB3bDEyeHhfYm9vdF90YXJnZXRfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTJ4eCAqd2wpOworaW50IHdsMTI1MV9ib290X3NvZnRfcmVzZXQoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9ib290X2luaXRfc2VxKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfYm9vdF9ydW5fZmlybXdhcmUoc3RydWN0IHdsMTI1MSAqd2wpOwordm9pZCB3bDEyNTFfYm9vdF90YXJnZXRfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9ib290KHN0cnVjdCB3bDEyNTEgKndsKTsKIAogLyogbnVtYmVyIG9mIHRpbWVzIHdlIHRyeSB0byByZWFkIHRoZSBJTklUIGludGVycnVwdCAqLwogI2RlZmluZSBJTklUX0xPT1AgMjAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MGYyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5jCkBAIC0wLDAgKzEsNDEyIEBACisjaW5jbHVkZSAid2wxMjUxX2NtZC5oIgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorCisjaW5jbHVkZSAid2wxMjUxLmgiCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9pby5oIgorI2luY2x1ZGUgIndsMTI1MV9wcy5oIgorI2luY2x1ZGUgIndsMTI1MV9hY3guaCIKKworLyoqCisgKiBzZW5kIGNvbW1hbmQgdG8gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBjb21tYW5kIGlkCisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyB0aGUgY29tbWFuZCwgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICovCitpbnQgd2wxMjUxX2NtZF9zZW5kKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgKmNtZDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHI7CisJaW50IHJldCA9IDA7CisKKwljbWQgPSBidWY7CisJY21kLT5pZCA9IGlkOworCWNtZC0+c3RhdHVzID0gMDsKKworCVdBUk5fT04obGVuICUgNCAhPSAwKTsKKworCXdsMTI1MV9tZW1fd3JpdGUod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgbGVuKTsKKworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0NNRCk7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjUxX0NPTU1BTkRfVElNRU9VVCk7CisKKwlpbnRyID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKwl3aGlsZSAoIShpbnRyICYgV0wxMjUxX0FDWF9JTlRSX0NNRF9DT01QTEVURSkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXdsMTI1MV9lcnJvcigiY29tbWFuZCBjb21wbGV0ZSB0aW1lb3V0Iik7CisJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJZ290byBvdXQ7CisJCX0KKworCQltc2xlZXAoMSk7CisKKwkJaW50ciA9IHdsMTI1MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUik7CisJfQorCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCisJCQkgICBXTDEyNTFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogc2VuZCB0ZXN0IGNvbW1hbmQgdG8gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQsIHdpdGggYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBidWZmZXIKKyAqIEBhbnN3ZXI6IGlzIGFuc3dlciBuZWVkZWQKKyAqLworaW50IHdsMTI1MV9jbWRfdGVzdChzdHJ1Y3Qgd2wxMjUxICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKQoreworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIHRlc3QiKTsKKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgQ01EX1RFU1QsIGJ1ZiwgYnVmX2xlbik7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfd2FybmluZygiVEVTVCBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChhbnN3ZXIpIHsKKwkJc3RydWN0IHdsMTI1MV9jb21tYW5kICpjbWRfYW5zd2VyOworCisJCS8qCisJCSAqIFRoZSB0ZXN0IGNvbW1hbmQgZ290IGluLCB3ZSBjYW4gcmVhZCB0aGUgYW5zd2VyLgorCQkgKiBUaGUgYW5zd2VyIHdvdWxkIGJlIGEgd2wxMjUxX2NvbW1hbmQsIHdoZXJlIHRoZQorCQkgKiBwYXJhbWV0ZXIgYXJyYXkgY29udGFpbnMgdGhlIGFjdHVhbCBhbnN3ZXIuCisJCSAqLworCQl3bDEyNTFfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgYnVmX2xlbik7CisKKwkJY21kX2Fuc3dlciA9IGJ1ZjsKKworCQlpZiAoY21kX2Fuc3dlci0+aGVhZGVyLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCisJCQl3bDEyNTFfZXJyb3IoIlRFU1QgY29tbWFuZCBhbnN3ZXIgZXJyb3I6ICVkIiwKKwkJCQkgICAgIGNtZF9hbnN3ZXItPmhlYWRlci5zdGF0dXMpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHJlYWQgYWN4IGZyb20gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBhY3ggaWQKKyAqIEBidWY6IGJ1ZmZlciBmb3IgdGhlIHJlc3BvbnNlLCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ2h0IG9mIGJ1ZgorICovCitpbnQgd2wxMjUxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGFjeF9oZWFkZXIgKmFjeCA9IGJ1ZjsKKwlpbnQgcmV0OworCisJd2wxMjUxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBpbnRlcnJvZ2F0ZSIpOworCisJYWN4LT5pZCA9IGlkOworCisJLyogcGF5bG9hZCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgYW55IGhlYWRlcnMgKi8KKwlhY3gtPmxlbiA9IGxlbiAtIHNpemVvZigqYWN4KTsKKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgQ01EX0lOVEVSUk9HQVRFLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJJTlRFUlJPR0FURSBjb21tYW5kIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0aGUgaW50ZXJyb2dhdGUgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiByZWFkIHRoZSBhbnN3ZXIgKi8KKwl3bDEyNTFfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgbGVuKTsKKworCWFjeCA9IGJ1ZjsKKwlpZiAoYWN4LT5jbWQuc3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykKKwkJd2wxMjUxX2Vycm9yKCJJTlRFUlJPR0FURSBjb21tYW5kIGVycm9yOiAlZCIsCisJCQkgICAgIGFjeC0+Y21kLnN0YXR1cyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHdyaXRlIGFjeCB2YWx1ZSB0byBmaXJtd2FyZQorICoKKyAqIEB3bDogd2wgc3RydWN0CisgKiBAaWQ6IGFjeCBpZAorICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgYWN4LCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ3RoIG9mIGJ1ZgorICovCitpbnQgd2wxMjUxX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBhY3hfaGVhZGVyICphY3ggPSBidWY7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgY29uZmlndXJlIik7CisKKwlhY3gtPmlkID0gaWQ7CisKKwkvKiBwYXlsb2FkIGxlbmd0aCwgZG9lcyBub3QgaW5jbHVkZSBhbnkgaGVhZGVycyAqLworCWFjeC0+bGVuID0gbGVuIC0gc2l6ZW9mKCphY3gpOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfQ09ORklHVVJFLCBhY3gsIGxlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoIkNPTkZJR1VSRSBjb21tYW5kIE5PSyIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2NtZF92Ym0oc3RydWN0IHdsMTI1MSAqd2wsIHU4IGlkZW50aXR5LAorCQkgICB2b2lkICpiaXRtYXAsIHUxNiBiaXRtYXBfbGVuLCB1OCBiaXRtYXBfY29udHJvbCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF92Ym1fdXBkYXRlICp2Ym07CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdmJtIik7CisKKwl2Ym0gPSBremFsbG9jKHNpemVvZigqdmJtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2Ym0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ291bnQgYW5kIHBlcmlvZCB3aWxsIGJlIGZpbGxlZCBieSB0aGUgdGFyZ2V0ICovCisJdmJtLT50aW0uYml0bWFwX2N0cmwgPSBiaXRtYXBfY29udHJvbDsKKwlpZiAoYml0bWFwX2xlbiA+IFBBUlRJQUxfVkJNX01BWCkgeworCQl3bDEyNTFfd2FybmluZygiY21kIHZibSBsZW4gaXMgJWQgQiwgdHJ1bmNhdGluZyB0byAlZCIsCisJCQkgICAgICAgYml0bWFwX2xlbiwgUEFSVElBTF9WQk1fTUFYKTsKKwkJYml0bWFwX2xlbiA9IFBBUlRJQUxfVkJNX01BWDsKKwl9CisJbWVtY3B5KHZibS0+dGltLnB2Yl9maWVsZCwgYml0bWFwLCBiaXRtYXBfbGVuKTsKKwl2Ym0tPnRpbS5pZGVudGl0eSA9IGlkZW50aXR5OworCXZibS0+dGltLmxlbmd0aCA9IGJpdG1hcF9sZW4gKyAzOworCisJdmJtLT5sZW4gPSBjcHVfdG9fbGUxNihiaXRtYXBfbGVuICsgNSk7CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9WQk0sIHZibSwgc2l6ZW9mKCp2Ym0pKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoIlZCTSBjb21tYW5kIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZSh2Ym0pOworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTI1MSAqd2wsIHU4IGNoYW5uZWwsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBjbWRfZW5hYmxlZGlzYWJsZV9wYXRoICpjbWQ7CisJaW50IHJldDsKKwl1MTYgY21kX3J4LCBjbWRfdHg7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIGRhdGEgcGF0aCIpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNtZC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisKKwlpZiAoZW5hYmxlKSB7CisJCWNtZF9yeCA9IENNRF9FTkFCTEVfUlg7CisJCWNtZF90eCA9IENNRF9FTkFCTEVfVFg7CisJfSBlbHNlIHsKKwkJY21kX3J4ID0gQ01EX0RJU0FCTEVfUlg7CisJCWNtZF90eCA9IENNRF9ESVNBQkxFX1RYOworCX0KKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgY21kX3J4LCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJyeCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI1MV9kZWJ1ZyhERUJVR19CT09ULCAicnggJXMgY21kIGNoYW5uZWwgJWQiLAorCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBjbWRfdHgsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoInR4ICVzIGNtZCBmb3IgY2hhbm5lbCAlZCBmYWlsZWQiLAorCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQk9PVCwgInR4ICVzIGNtZCBjaGFubmVsICVkIiwKKwkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKworb3V0OgorCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9jbWRfam9pbihzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggYnNzX3R5cGUsIHU4IGNoYW5uZWwsCisJCSAgICB1MTYgYmVhY29uX2ludGVydmFsLCB1OCBkdGltX2ludGVydmFsKQoreworCXN0cnVjdCBjbWRfam9pbiAqam9pbjsKKwlpbnQgcmV0LCBpOworCXU4ICpic3NpZDsKKworCWpvaW4gPSBremFsbG9jKHNpemVvZigqam9pbiksIEdGUF9LRVJORUwpOworCWlmICgham9pbikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIGpvaW4lcyBjaCAlZCAlZC8lZCIsCisJCSAgICAgYnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUyA/ICIgaWJzcyIgOiAiIiwKKwkJICAgICBjaGFubmVsLCBiZWFjb25faW50ZXJ2YWwsIGR0aW1faW50ZXJ2YWwpOworCisJLyogUmV2ZXJzZSBvcmRlciBCU1NJRCAqLworCWJzc2lkID0gKHU4ICopICZqb2luLT5ic3NpZF9sc2I7CisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCWJzc2lkW2ldID0gd2wtPmJzc2lkW0VUSF9BTEVOIC0gaSAtIDFdOworCisJam9pbi0+cnhfY29uZmlnX29wdGlvbnMgPSB3bC0+cnhfY29uZmlnOworCWpvaW4tPnJ4X2ZpbHRlcl9vcHRpb25zID0gd2wtPnJ4X2ZpbHRlcjsKKworCS8qCisJICogRklYTUU6IGRpc2FibGUgdGVtcG9yYXJpbHkgYWxsIGZpbHRlcnMgYmVjYXVzZSBhZnRlciBjb21taXQKKwkgKiA5Y2VmODczNyAibWFjODAyMTE6IGZpeCBtYW5hZ2VkIG1vZGUgQlNTSUQgaGFuZGxpbmciIGJyb2tlCisJICogYXNzb2NpYXRpb24uIFRoZSBmaWx0ZXIgbG9naWMgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQgcHJvcGVybHkKKwkgKiBhbmQgb25jZSB0aGF0IGlzIGRvbmUsIHRoaXMgaGFjayBjYW4gYmUgcmVtb3ZlZC4KKwkgKi8KKwlqb2luLT5yeF9jb25maWdfb3B0aW9ucyA9IDA7CisJam9pbi0+cnhfZmlsdGVyX29wdGlvbnMgPSBXTDEyNTFfREVGQVVMVF9SWF9GSUxURVI7CisKKwlqb2luLT5iYXNpY19yYXRlX3NldCA9IFJBVEVfTUFTS18xTUJQUyB8IFJBVEVfTUFTS18yTUJQUyB8CisJCVJBVEVfTUFTS181XzVNQlBTIHwgUkFURV9NQVNLXzExTUJQUzsKKworCWpvaW4tPmJlYWNvbl9pbnRlcnZhbCA9IGJlYWNvbl9pbnRlcnZhbDsKKwlqb2luLT5kdGltX2ludGVydmFsID0gZHRpbV9pbnRlcnZhbDsKKwlqb2luLT5ic3NfdHlwZSA9IGJzc190eXBlOworCWpvaW4tPmNoYW5uZWwgPSBjaGFubmVsOworCWpvaW4tPmN0cmwgPSBKT0lOX0NNRF9DVFJMX1RYX0ZMVVNIOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfU1RBUlRfSk9JTiwgam9pbiwgc2l6ZW9mKCpqb2luKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJmYWlsZWQgdG8gaW5pdGlhdGUgY21kIGpvaW4iKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoam9pbik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggcHNfbW9kZSkKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9wc19wYXJhbXMgKnBzX3BhcmFtcyA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIHNldCBwcyBtb2RlIik7CisKKwlwc19wYXJhbXMgPSBremFsbG9jKHNpemVvZigqcHNfcGFyYW1zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwc19wYXJhbXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcHNfcGFyYW1zLT5wc19tb2RlID0gcHNfbW9kZTsKKwlwc19wYXJhbXMtPnNlbmRfbnVsbF9kYXRhID0gMTsKKwlwc19wYXJhbXMtPnJldHJpZXMgPSA1OworCXBzX3BhcmFtcy0+aGFuZ19vdmVyX3BlcmlvZCA9IDEyODsKKwlwc19wYXJhbXMtPm51bGxfZGF0YV9yYXRlID0gMTsgLyogMSBNYnBzICovCisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9TRVRfUFNfTU9ERSwgcHNfcGFyYW1zLAorCQkJICAgICAgc2l6ZW9mKCpwc19wYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoImNtZCBzZXRfcHNfbW9kZSBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocHNfcGFyYW1zKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTMyIGFkZHIsIHZvaWQgKmFuc3dlciwKKwkJCSAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGNtZF9yZWFkX3dyaXRlX21lbW9yeSAqY21kOworCWludCByZXQgPSAwOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0NNRCwgImNtZCByZWFkIG1lbW9yeSIpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCVdBUk5fT04obGVuID4gTUFYX1JFQURfU0laRSk7CisJbGVuID0gbWluX3Qoc2l6ZV90LCBsZW4sIE1BWF9SRUFEX1NJWkUpOworCisJY21kLT5hZGRyID0gYWRkcjsKKwljbWQtPnNpemUgPSBsZW47CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9SRUFEX01FTU9SWSwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigicmVhZCBtZW1vcnkgY29tbWFuZCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdGhlIHJlYWQgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiBub3cgcmVhZCB0aGUgYW5zd2VyICovCisJd2wxMjUxX21lbV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBjbWQsIHNpemVvZigqY21kKSk7CisKKwlpZiAoY21kLT5oZWFkZXIuc3RhdHVzICE9IENNRF9TVEFUVVNfU1VDQ0VTUykKKwkJd2wxMjUxX2Vycm9yKCJlcnJvciBpbiByZWFkIGNvbW1hbmQgcmVzdWx0OiAlZCIsCisJCQkgICAgIGNtZC0+aGVhZGVyLnN0YXR1cyk7CisKKwltZW1jcHkoYW5zd2VyLCBjbWQtPnZhbHVlLCBsZW4pOworCitvdXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBjbWRfaWQsCisJCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbikKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9wYWNrZXRfdGVtcGxhdGUgKmNtZDsKKwlzaXplX3QgY21kX2xlbjsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdGVtcGxhdGUgJWQiLCBjbWRfaWQpOworCisJV0FSTl9PTihidWZfbGVuID4gV0wxMjUxX01BWF9URU1QTEFURV9TSVpFKTsKKwlidWZfbGVuID0gbWluX3Qoc2l6ZV90LCBidWZfbGVuLCBXTDEyNTFfTUFYX1RFTVBMQVRFX1NJWkUpOworCWNtZF9sZW4gPSBBTElHTihzaXplb2YoKmNtZCkgKyBidWZfbGVuLCA0KTsKKworCWNtZCA9IGt6YWxsb2MoY21kX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY21kLT5zaXplID0gY3B1X3RvX2xlMTYoYnVmX2xlbik7CisKKwlpZiAoYnVmKQorCQltZW1jcHkoY21kLT5kYXRhLCBidWYsIGJ1Zl9sZW4pOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBjbWRfaWQsIGNtZCwgY21kX2xlbik7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNtZCBzZXRfdGVtcGxhdGUgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmgKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2NtZC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5oCmluZGV4IGFhMzA3ZGMuLmRmZjc5OGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvY21kLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQogICoKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCkBAIC0yMiwzNyArMjIsMzIgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBfX1dMMTJYWF9DTURfSF9fCi0jZGVmaW5lIF9fV0wxMlhYX0NNRF9IX18KKyNpZm5kZWYgX19XTDEyNTFfQ01EX0hfXworI2RlZmluZSBfX1dMMTI1MV9DTURfSF9fCiAKLSNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJ3bDEyNTEuaCIKIAotaW50IHdsMTJ4eF9jbWRfc2VuZChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTE2IHR5cGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOwotaW50IHdsMTJ4eF9jbWRfdGVzdChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKTsKLWludCB3bDEyeHhfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyeHggKndsLCB1MTYgaWVfaWQsIHUxNiBpZV9sZW4sCi0JCQkgICB2b2lkICphbnN3ZXIpOwotaW50IHdsMTJ4eF9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyeHggKndsLCB2b2lkICppZSwgaW50IGllX2xlbik7Ci1pbnQgd2wxMnh4X2NtZF92Ym0oc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGlkZW50aXR5LAorc3RydWN0IGFjeF9oZWFkZXI7CisKK2ludCB3bDEyNTFfY21kX3NlbmQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiB0eXBlLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKTsKK2ludCB3bDEyNTFfY21kX3Rlc3Qoc3RydWN0IHdsMTI1MSAqd2wsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHU4IGFuc3dlcik7CitpbnQgd2wxMjUxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworaW50IHdsMTI1MV9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CitpbnQgd2wxMjUxX2NtZF92Ym0oc3RydWN0IHdsMTI1MSAqd2wsIHU4IGlkZW50aXR5LAogCQkgICB2b2lkICpiaXRtYXAsIHUxNiBiaXRtYXBfbGVuLCB1OCBiaXRtYXBfY29udHJvbCk7Ci1pbnQgd2wxMnh4X2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IGNoYW5uZWwsIHU4IGVuYWJsZSk7Ci1pbnQgd2wxMnh4X2NtZF9qb2luKHN0cnVjdCB3bDEyeHggKndsLCB1OCBic3NfdHlwZSwgdTggZHRpbV9pbnRlcnZhbCwKLQkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IHdhaXQpOwotaW50IHdsMTJ4eF9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggcHNfbW9kZSk7Ci1pbnQgd2wxMnh4X2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTMyIGFkZHIsIHUzMiBsZW4sIHZvaWQgKmFuc3dlcik7Ci1pbnQgd2wxMnh4X2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBjbWRfaWQsCitpbnQgd2wxMjUxX2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTI1MSAqd2wsIHU4IGNoYW5uZWwsIGJvb2wgZW5hYmxlKTsKK2ludCB3bDEyNTFfY21kX2pvaW4oc3RydWN0IHdsMTI1MSAqd2wsIHU4IGJzc190eXBlLCB1OCBjaGFubmVsLAorCQkgICAgdTE2IGJlYWNvbl9pbnRlcnZhbCwgdTggZHRpbV9pbnRlcnZhbCk7CitpbnQgd2wxMjUxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBwc19tb2RlKTsKK2ludCB3bDEyNTFfY21kX3JlYWRfbWVtb3J5KHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgYWRkciwgdm9pZCAqYW5zd2VyLAorCQkJICAgc2l6ZV90IGxlbik7CitpbnQgd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBjbWRfaWQsCiAJCQkgICAgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbik7CiAKIC8qIHVuaXQgbXMgKi8KLSNkZWZpbmUgV0wxMlhYX0NPTU1BTkRfVElNRU9VVCAyMDAwCisjZGVmaW5lIFdMMTI1MV9DT01NQU5EX1RJTUVPVVQgMjAwMAogCi0jZGVmaW5lIFdMMTJYWF9NQVhfVEVNUExBVEVfU0laRSAzMDAKLQotc3RydWN0IHdsMTJ4eF9jbWRfcGFja2V0X3RlbXBsYXRlIHsKLQlfX2xlMTYgc2l6ZTsKLQl1OCB0ZW1wbGF0ZVtXTDEyWFhfTUFYX1RFTVBMQVRFX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLWVudW0gd2wxMnh4X2NvbW1hbmRzIHsKK2VudW0gd2wxMjUxX2NvbW1hbmRzIHsKIAlDTURfUkVTRVQgICAgICAgICAgID0gMCwKIAlDTURfSU5URVJST0dBVEUgICAgID0gMSwgICAgLyp1c2UgdGhpcyB0byByZWFkIGluZm9ybWF0aW9uIGVsZW1lbnRzKi8KIAlDTURfQ09ORklHVVJFICAgICAgID0gMiwgICAgLyp1c2UgdGhpcyB0byB3cml0ZSBpbmZvcm1hdGlvbiBlbGVtZW50cyovCkBAIC0xMDAsOSArOTUsMTUgQEAKIAogI2RlZmluZSBNQVhfQ01EX1BBUkFNUyA1NzIKIAotc3RydWN0ICB3bDEyeHhfY29tbWFuZCB7CitzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgewogCXUxNiBpZDsKIAl1MTYgc3RhdHVzOworCS8qIHBheWxvYWQgKi8KKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCAgd2wxMjUxX2NvbW1hbmQgeworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CiAJdTggIHBhcmFtZXRlcnNbTUFYX0NNRF9QQVJBTVNdOwogfTsKIApAQCAtMTQ0LDYgKzE0NSw4IEBACiAjZGVmaW5lIE1BWF9SRUFEX1NJWkUgMjU2CiAKIHN0cnVjdCBjbWRfcmVhZF93cml0ZV9tZW1vcnkgeworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CisKIAkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4qLwogCXUzMiBhZGRyOwogCkBAIC0yMTEsNiArMjE0LDggQEAKICNkZWZpbmUgU0NBTl9NQVhfTlVNX09GX0NIQU5ORUxTIDE2CiAKIHN0cnVjdCBjbWRfc2NhbiB7CisJc3RydWN0IHdsMTI1MV9jbWRfaGVhZGVyIGhlYWRlcjsKKwogCXN0cnVjdCBiYXNpY19zY2FuX3BhcmFtZXRlcnMgcGFyYW1zOwogCXN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1ldGVycyBjaGFubmVsc1tTQ0FOX01BWF9OVU1fT0ZfQ0hBTk5FTFNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0yMjcsNiArMjMyLDggQEAKIAogCiBzdHJ1Y3QgY21kX2pvaW4geworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CisKIAl1MzIgYnNzaWRfbHNiOwogCXUxNiBic3NpZF9tc2I7CiAJdTE2IGJlYWNvbl9pbnRlcnZhbDsgLyogaW4gVEJUVHMgKi8KQEAgLTI2MSw1ICsyNjgsMTQwIEBACiAJdTggcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggeworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CiAKLSNlbmRpZiAvKiBfX1dMMTJYWF9DTURfSF9fICovCisJdTggY2hhbm5lbDsKKwl1OCBwYWRkaW5nWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgV0wxMjUxX01BWF9URU1QTEFURV9TSVpFIDMwMAorCitzdHJ1Y3Qgd2wxMjUxX2NtZF9wYWNrZXRfdGVtcGxhdGUgeworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlfX2xlMTYgc2l6ZTsKKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVElNX0VMRV9JRCAgICA1CisjZGVmaW5lIFBBUlRJQUxfVkJNX01BWCAgICAyNTEKKworc3RydWN0IHdsMTI1MV90aW0geworCXU4IGlkZW50aXR5OworCXU4IGxlbmd0aDsKKwl1OCBkdGltX2NvdW50OworCXU4IGR0aW1fcGVyaW9kOworCXU4IGJpdG1hcF9jdHJsOworCXU4IHB2Yl9maWVsZFtQQVJUSUFMX1ZCTV9NQVhdOyAvKiBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogVmlydHVhbCBCaXQgTWFwIHVwZGF0ZSAqLworc3RydWN0IHdsMTI1MV9jbWRfdmJtX3VwZGF0ZSB7CisJc3RydWN0IHdsMTI1MV9jbWRfaGVhZGVyIGhlYWRlcjsKKwlfX2xlMTYgbGVuOworCXU4ICBwYWRkaW5nWzJdOworCXN0cnVjdCB3bDEyNTFfdGltIHRpbTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHdsMTI1MV9jbWRfcHNfbW9kZSB7CisJU1RBVElPTl9BQ1RJVkVfTU9ERSwKKwlTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERQorfTsKKworc3RydWN0IHdsMTI1MV9jbWRfcHNfcGFyYW1zIHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTggcHNfbW9kZTsgLyogU1RBVElPTl8qICovCisJdTggc2VuZF9udWxsX2RhdGE7IC8qIERvIHdlIGhhdmUgdG8gc2VuZCBOVUxMIGRhdGEgcGFja2V0ID8gKi8KKwl1OCByZXRyaWVzOyAvKiBOdW1iZXIgb2YgcmV0aXJlcyBmb3IgdGhlIGluaXRpYWwgTlVMTCBkYXRhIHBhY2tldCAqLworCisJIC8qCisJICAqIFRVcyBkdXJpbmcgd2hpY2ggdGhlIHRhcmdldCBzdGF5cyBhd2FrZSBhZnRlciBzd2l0Y2hpbmcKKwkgICogdG8gcG93ZXIgc2F2ZSBtb2RlLgorCSAgKi8KKwl1OCBoYW5nX292ZXJfcGVyaW9kOworCXUxNiBudWxsX2RhdGFfcmF0ZTsKKwl1OCBwYWRbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI1MV9jbWRfdHJpZ2dlcl9zY2FuX3RvIHsKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTMyIHRpbWVvdXQ7Cit9OworCisvKiBIVyBlbmNyeXB0aW9uIGtleXMgKi8KKyNkZWZpbmUgTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFkgNAorI2RlZmluZSBNQVhfS0VZX1NJWkUgMzIKKworLyogV2hlbiBzZXQsIGRpc2FibGUgSFcgZW5jcnlwdGlvbiAqLworI2RlZmluZSBERl9FTkNSWVBUSU9OX0RJU0FCTEUgICAgICAweDAxCisvKiBXaGVuIHNldCwgZGlzYWJsZSBIVyBkZWNyeXB0aW9uICovCisjZGVmaW5lIERGX1NOSUZGX01PREVfRU5BQkxFICAgICAgIDB4ODAKKworZW51bSB3bDEyNTFfY21kX2tleV9hY3Rpb24geworCUtFWV9BRERfT1JfUkVQTEFDRSA9IDEsCisJS0VZX1JFTU9WRSAgICAgICAgID0gMiwKKwlLRVlfU0VUX0lEICAgICAgICAgPSAzLAorCU1BWF9LRVlfQUNUSU9OICAgICA9IDB4ZmZmZiwKK307CisKK2VudW0gd2wxMjUxX2NtZF9rZXlfdHlwZSB7CisJS0VZX1dFUF9ERUZBVUxUICAgICAgID0gMCwKKwlLRVlfV0VQX0FERFIgICAgICAgICAgPSAxLAorCUtFWV9BRVNfR1JPVVAgICAgICAgICA9IDQsCisJS0VZX0FFU19QQUlSV0lTRSAgICAgID0gNSwKKwlLRVlfV0VQX0dST1VQICAgICAgICAgPSA2LAorCUtFWV9US0lQX01JQ19HUk9VUCAgICA9IDEwLAorCUtFWV9US0lQX01JQ19QQUlSV0lTRSA9IDExLAorfTsKKworLyoKKyAqCisgKiBrZXlfdHlwZV9lICAga2V5IHNpemUgICAga2V5IGZvcm1hdAorICogLS0tLS0tLS0tLSAgIC0tLS0tLS0tLSAgIC0tLS0tLS0tLS0KKyAqIDB4MDAgICAgICAgICA1LCAxMywgMjkgICBLZXkgZGF0YQorICogMHgwMSAgICAgICAgIDUsIDEzLCAyOSAgIEtleSBkYXRhCisgKiAweDA0ICAgICAgICAgMTYgICAgICAgICAgMTYgYnl0ZXMgb2Yga2V5IGRhdGEKKyAqIDB4MDUgICAgICAgICAxNiAgICAgICAgICAxNiBieXRlcyBvZiBrZXkgZGF0YQorICogMHgwYSAgICAgICAgIDMyICAgICAgICAgIDE2IGJ5dGVzIG9mIFRLSVAga2V5IGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIG9mIFJYIE1JQyBrZXkgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgb2YgVFggTUlDIGtleSBkYXRhCisgKiAweDBiICAgICAgICAgMzIgICAgICAgICAgMTYgYnl0ZXMgb2YgVEtJUCBrZXkgZGF0YQorICogICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgb2YgUlggTUlDIGtleSBkYXRhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyBvZiBUWCBNSUMga2V5IGRhdGEKKyAqCisgKi8KKworc3RydWN0IHdsMTI1MV9jbWRfc2V0X2tleXMgeworCXN0cnVjdCB3bDEyNTFfY21kX2hlYWRlciBoZWFkZXI7CisKKwkvKiBJZ25vcmVkIGZvciBkZWZhdWx0IFdFUCBrZXkgKi8KKwl1OCBhZGRyW0VUSF9BTEVOXTsKKworCS8qIGtleV9hY3Rpb25fZSAqLworCXUxNiBrZXlfYWN0aW9uOworCisJdTE2IHJlc2VydmVkXzE7CisKKwkvKiBrZXkgc2l6ZSBpbiBieXRlcyAqLworCXU4IGtleV9zaXplOworCisJLyoga2V5X3R5cGVfZSAqLworCXU4IGtleV90eXBlOworCXU4IHNzaWRfcHJvZmlsZTsKKworCS8qCisJICogVEtJUCwgQUVTOiBmcmFtZSdzIGtleSBpZCBmaWVsZC4KKwkgKiBGb3IgV0VQIGRlZmF1bHQga2V5OiBrZXkgaWQ7CisJICovCisJdTggaWQ7CisJdTggcmVzZXJ2ZWRfMls2XTsKKwl1OCBrZXlbTUFYX0tFWV9TSVpFXTsKKwl1MTYgYWNfc2VxX251bTE2W05VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZXTsKKwl1MzIgYWNfc2VxX251bTMyW05VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKKyNlbmRpZiAvKiBfX1dMMTI1MV9DTURfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9kZWJ1Z2ZzLmMKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9kZWJ1Z2ZzLmMKaW5kZXggY2RiMzY4Yy4uYTAwNzIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2RlYnVnZnMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKQEAgLTIxLDE1ICsyMSwxNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSAiZGVidWdmcy5oIgorI2luY2x1ZGUgIndsMTI1MV9kZWJ1Z2ZzLmgiCiAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAotI2luY2x1ZGUgIndsMTJ4eC5oIgotI2luY2x1ZGUgImFjeC5oIgorI2luY2x1ZGUgIndsMTI1MS5oIgorI2luY2x1ZGUgIndsMTI1MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyNTFfcHMuaCIKIAogLyogbXMgKi8KLSNkZWZpbmUgV0wxMlhYX0RFQlVHRlNfU1RBVFNfTElGRVRJTUUgMTAwMAorI2RlZmluZSBXTDEyNTFfREVCVUdGU19TVEFUU19MSUZFVElNRSAxMDAwCiAKIC8qIGRlYnVnZnMgbWFjcm9zIGlkZWEgZnJvbSBtYWM4MDIxMSAqLwogCkBAIC0zNyw3ICszOCw3IEBACiBzdGF0aWMgc3NpemVfdCBuYW1lIyMgX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAlcCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCQkJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3Qgd2wxMnh4ICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsJCQkJXAorCXN0cnVjdCB3bDEyNTEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwkJCQlcCiAJY2hhciBidWZbYnVmbGVuXTsJCQkJCQlcCiAJaW50IHJlczsJCQkJCQkJXAogCQkJCQkJCQkJXApAQCAtNDcsNyArNDgsNyBAQAogCQkJCQkJCQkJXAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjIF9vcHMgPSB7CQkJXAogCS5yZWFkID0gbmFtZSMjIF9yZWFkLAkJCQkJCVwKLQkub3BlbiA9IHdsMTJ4eF9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAorCS5vcGVuID0gd2wxMjUxX29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCiB9OwogCiAjZGVmaW5lIERFQlVHRlNfQUREKG5hbWUsIHBhcmVudCkJCQkJCVwKQEAgLTcwLDExICs3MSwxMSBAQAogCQkJCSAgICAgIGNoYXIgX191c2VyICp1c2VyYnVmLAkJXAogCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCB3bDEyeHggKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwkJCQlcCisJc3RydWN0IHdsMTI1MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKIAljaGFyIGJ1ZltidWZsZW5dOwkJCQkJCVwKIAlpbnQgcmVzOwkJCQkJCQlcCiAJCQkJCQkJCQlcCi0Jd2wxMnh4X2RlYnVnZnNfdXBkYXRlX3N0YXRzKHdsKTsJCQkJXAorCXdsMTI1MV9kZWJ1Z2ZzX3VwZGF0ZV9zdGF0cyh3bCk7CQkJCVwKIAkJCQkJCQkJCVwKIAlyZXMgPSBzY25wcmludGYoYnVmLCBidWZsZW4sIGZtdCAiXG4iLAkJCQlcCiAJCQl3bC0+c3RhdHMuZndfc3RhdHMtPnN1Yi5uYW1lKTsJCQlcCkBAIC04Myw3ICs4NCw3IEBACiAJCQkJCQkJCQlcCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdWIjIyBfICMjbmFtZSMjIF9vcHMgPSB7CQlcCiAJLnJlYWQgPSBzdWIjIyBfICMjbmFtZSMjIF9yZWFkLAkJCQkJXAotCS5vcGVuID0gd2wxMnh4X29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCisJLm9wZW4gPSB3bDEyNTFfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKIH07CiAKICNkZWZpbmUgREVCVUdGU19GV1NUQVRTX0FERChzdWIsIG5hbWUpCQkJCVwKQEAgLTkyLDIxICs5MywzMCBAQAogI2RlZmluZSBERUJVR0ZTX0ZXU1RBVFNfREVMKHN1YiwgbmFtZSkJCQkJXAogCURFQlVHRlNfREVMKHN1YiMjIF8gIyNuYW1lKQogCi1zdGF0aWMgdm9pZCB3bDEyeHhfZGVidWdmc191cGRhdGVfc3RhdHMoc3RydWN0IHdsMTJ4eCAqd2wpCitzdGF0aWMgdm9pZCB3bDEyNTFfZGVidWdmc191cGRhdGVfc3RhdHMoc3RydWN0IHdsMTI1MSAqd2wpCiB7CisJaW50IHJldDsKKwogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKLQlpZiAod2wtPnN0YXRlID09IFdMMTJYWF9TVEFURV9PTiAmJgorCXJldCA9IHdsMTI1MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAod2wtPnN0YXRlID09IFdMMTI1MV9TVEFURV9PTiAmJgogCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgKwotCQkgICAgICAgbXNlY3NfdG9famlmZmllcyhXTDEyWFhfREVCVUdGU19TVEFUU19MSUZFVElNRSkpKSB7Ci0JCXdsMTJ4eF9hY3hfc3RhdGlzdGljcyh3bCwgd2wtPnN0YXRzLmZ3X3N0YXRzKTsKKwkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjUxX0RFQlVHRlNfU1RBVFNfTElGRVRJTUUpKSkgeworCQl3bDEyNTFfYWN4X3N0YXRpc3RpY3Mod2wsIHdsLT5zdGF0cy5md19zdGF0cyk7CiAJCXdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgPSBqaWZmaWVzOwogCX0KIAorCXdsMTI1MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IHdsMTJ4eF9vcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgd2wxMjUxX29wZW5fZmlsZV9nZW5lcmljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmV0dXJuIDA7CkBAIC0yMTEsNyArMjIxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHR4X3F1ZXVlX2xlbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdsMTI1MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdTMyIHF1ZXVlX2xlbjsKIAljaGFyIGJ1ZlsyMF07CiAJaW50IHJlczsKQEAgLTIyNCwxMCArMjM0LDEwIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR4X3F1ZXVlX2xlbl9vcHMgPSB7CiAJLnJlYWQgPSB0eF9xdWV1ZV9sZW5fcmVhZCwKLQkub3BlbiA9IHdsMTJ4eF9vcGVuX2ZpbGVfZ2VuZXJpYywKKwkub3BlbiA9IHdsMTI1MV9vcGVuX2ZpbGVfZ2VuZXJpYywKIH07CiAKLXN0YXRpYyB2b2lkIHdsMTJ4eF9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKK3N0YXRpYyB2b2lkIHdsMTI1MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyhzdHJ1Y3Qgd2wxMjUxICp3bCkKIHsKIAlERUJVR0ZTX0ZXU1RBVFNfREVMKHR4LCBpbnRlcm5hbF9kZXNjX292ZXJmbG93KTsKIApAQCAtMzI1LDcgKzMzNSw3IEBACiAJREVCVUdGU19ERUwoZXhjZXNzaXZlX3JldHJpZXMpOwogfQogCi1zdGF0aWMgaW50IHdsMTJ4eF9kZWJ1Z2ZzX2FkZF9maWxlcyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKK3N0YXRpYyBpbnQgd2wxMjUxX2RlYnVnZnNfYWRkX2ZpbGVzKHN0cnVjdCB3bDEyNTEgKndsKQogewogCWludCByZXQgPSAwOwogCkBAIC00MjYsMTkgKzQzNiwxOSBAQAogCiBvdXQ6CiAJaWYgKHJldCA8IDApCi0JCXdsMTJ4eF9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7CisJCXdsMTI1MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHdsMTJ4eF9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCB3bDEyeHggKndsKQordm9pZCB3bDEyNTFfZGVidWdmc19yZXNldChzdHJ1Y3Qgd2wxMjUxICp3bCkKIHsKIAltZW1zZXQod2wtPnN0YXRzLmZ3X3N0YXRzLCAwLCBzaXplb2YoKndsLT5zdGF0cy5md19zdGF0cykpOwogCXdsLT5zdGF0cy5yZXRyeV9jb3VudCA9IDA7CiAJd2wtPnN0YXRzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKIH0KIAotaW50IHdsMTJ4eF9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTJ4eCAqd2wpCitpbnQgd2wxMjUxX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgd2wxMjUxICp3bCkKIHsKIAlpbnQgcmV0OwogCkBAIC00NjksNyArNDc5LDcgQEAKIAogCXdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgPSBqaWZmaWVzOwogCi0JcmV0ID0gd2wxMnh4X2RlYnVnZnNfYWRkX2ZpbGVzKHdsKTsKKwlyZXQgPSB3bDEyNTFfZGVidWdmc19hZGRfZmlsZXMod2wpOwogCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2ZpbGU7CkBAIC00OTIsOSArNTAyLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHdsMTJ4eF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHdsMTJ4eCAqd2wpCit2b2lkIHdsMTI1MV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHdsMTI1MSAqd2wpCiB7Ci0Jd2wxMnh4X2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHdsKTsKKwl3bDEyNTFfZGVidWdmc19kZWxldGVfZmlsZXMod2wpOwogCiAJa2ZyZWUod2wtPnN0YXRzLmZ3X3N0YXRzKTsKIAl3bC0+c3RhdHMuZndfc3RhdHMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5oCnNpbWlsYXJpdHkgaW5kZXggNzQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5oCmluZGV4IDU2MmNkY2IuLjZkYzNkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9kZWJ1Z2ZzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBXTDEyWFhfREVCVUdGU19ICi0jZGVmaW5lIFdMMTJYWF9ERUJVR0ZTX0gKKyNpZm5kZWYgV0wxMjUxX0RFQlVHRlNfSAorI2RlZmluZSBXTDEyNTFfREVCVUdGU19ICiAKLSNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJ3bDEyNTEuaCIKIAotaW50IHdsMTJ4eF9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTJ4eCAqd2wpOwotdm9pZCB3bDEyeHhfZGVidWdmc19leGl0KHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X2RlYnVnZnNfcmVzZXQoc3RydWN0IHdsMTJ4eCAqd2wpOworaW50IHdsMTI1MV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTI1MSAqd2wpOwordm9pZCB3bDEyNTFfZGVidWdmc19leGl0KHN0cnVjdCB3bDEyNTEgKndsKTsKK3ZvaWQgd2wxMjUxX2RlYnVnZnNfcmVzZXQoc3RydWN0IHdsMTI1MSAqd2wpOwogCi0jZW5kaWYgLyogV0wxMlhYX0RFQlVHRlNfSCAqLworI2VuZGlmIC8qIFdMMTI1MV9ERUJVR0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZXZlbnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA3NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9ldmVudC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjUxX2lvLmgiCisjaW5jbHVkZSAid2wxMjUxX2V2ZW50LmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisKK3N0YXRpYyBpbnQgd2wxMjUxX2V2ZW50X3NjYW5fY29tcGxldGUoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkJICAgICAgc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCit7CisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAic3RhdHVzOiAweCV4LCBjaGFubmVsczogJWQiLAorCQkgICAgIG1ib3gtPnNjaGVkdWxlZF9zY2FuX3N0YXR1cywKKwkJICAgICBtYm94LT5zY2hlZHVsZWRfc2Nhbl9jaGFubmVscyk7CisKKwlpZiAod2wtPnNjYW5uaW5nKSB7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgZmFsc2UpOworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCQl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBodyBzY2FuIGNvbXBsZXRlZCIpOworCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX2V2ZW50X21ib3hfZHVtcChzdHJ1Y3QgZXZlbnRfbWFpbGJveCAqbWJveCkKK3sKKwl3bDEyNTFfZGVidWcoREVCVUdfRVZFTlQsICJNQk9YIERVTVA6Iik7CisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAiXHR2ZWN0b3I6IDB4JXgiLCBtYm94LT5ldmVudHNfdmVjdG9yKTsKKwl3bDEyNTFfZGVidWcoREVCVUdfRVZFTlQsICJcdG1hc2s6IDB4JXgiLCBtYm94LT5ldmVudHNfbWFzayk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2V2ZW50X3Byb2Nlc3Moc3RydWN0IHdsMTI1MSAqd2wsIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQoreworCWludCByZXQ7CisJdTMyIHZlY3RvcjsKKworCXdsMTI1MV9ldmVudF9tYm94X2R1bXAobWJveCk7CisKKwl2ZWN0b3IgPSBtYm94LT5ldmVudHNfdmVjdG9yICYgfihtYm94LT5ldmVudHNfbWFzayk7CisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAidmVjdG9yOiAweCV4IiwgdmVjdG9yKTsKKworCWlmICh2ZWN0b3IgJiBTQ0FOX0NPTVBMRVRFX0VWRU5UX0lEKSB7CisJCXJldCA9IHdsMTI1MV9ldmVudF9zY2FuX2NvbXBsZXRlKHdsLCBtYm94KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh2ZWN0b3IgJiBCU1NfTE9TRV9FVkVOVF9JRCkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfRVZFTlQsICJCU1NfTE9TRV9FVkVOVCIpOworCisJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiB3bC0+cHNtKSB7CisJCQlyZXQgPSB3bDEyNTFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2V2ZW50X3VubWFzayhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ldmVudF9tYm94X21hc2sod2wsIH4od2wtPmV2ZW50X21hc2spKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCit2b2lkIHdsMTI1MV9ldmVudF9tYm94X2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl3bC0+bWJveF9wdHJbMF0gPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKKwl3bC0+bWJveF9wdHJbMV0gPSB3bC0+bWJveF9wdHJbMF0gKyBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0VWRU5ULCAiTUJPWCBwdHJzOiAweCV4IDB4JXgiLAorCQkgICAgIHdsLT5tYm94X3B0clswXSwgd2wtPm1ib3hfcHRyWzFdKTsKK30KKworaW50IHdsMTI1MV9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTI1MSAqd2wsIHU4IG1ib3hfbnVtKQoreworCXN0cnVjdCBldmVudF9tYWlsYm94IG1ib3g7CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19FVkVOVCwgIkVWRU5UIG9uIG1ib3ggJWQiLCBtYm94X251bSk7CisKKwlpZiAobWJveF9udW0gPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZpcnN0IHdlIHJlYWQgdGhlIG1ib3ggZGVzY3JpcHRvciAqLworCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPm1ib3hfcHRyW21ib3hfbnVtXSwgJm1ib3gsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBldmVudF9tYWlsYm94KSk7CisKKwkvKiBwcm9jZXNzIHRoZSBkZXNjcmlwdG9yICovCisJcmV0ID0gd2wxMjUxX2V2ZW50X3Byb2Nlc3Mod2wsICZtYm94KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHRoZW4gd2UgbGV0IHRoZSBmaXJtd2FyZSBrbm93IGl0IGNhbiBnbyBvbi4uLiovCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfRVZFTlRfQUNLKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2V2ZW50LmgKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2V2ZW50LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZXZlbnQuaAppbmRleCAxZjRjMmY3Li5iZTBhYzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZXZlbnQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2V2ZW50LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgpAQCAtMjIsOCArMjIsOCBAQAogICoKICAqLwogCi0jaWZuZGVmIF9fV0wxMlhYX0VWRU5UX0hfXwotI2RlZmluZSBfX1dMMTJYWF9FVkVOVF9IX18KKyNpZm5kZWYgX19XTDEyNTFfRVZFTlRfSF9fCisjZGVmaW5lIF9fV0wxMjUxX0VWRU5UX0hfXwogCiAvKgogICogTWJveCBldmVudHMKQEAgLTExNCw4ICsxMTQsOCBAQAogCXU4IHBhZGRpbmdbMTldOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLWludCB3bDEyeHhfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyeHggKndsLCB1OCBtYm94KTsKK2ludCB3bDEyNTFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNTEgKndsKTsKK3ZvaWQgd2wxMjUxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNTEgKndsLCB1OCBtYm94KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWU0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYwpAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAid2wxMjUxX2luaXQuaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisjaW5jbHVkZSAid2wxMjUxX2NtZC5oIgorI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKworaW50IHdsMTI1MV9od19pbml0X2h3ZW5jX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9mZWF0dXJlX2NmZyh3bCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNvdWxkbid0IHNldCBmZWF0dXJlIGNvbmZpZyIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHdsMTI1MV9hY3hfZGVmYXVsdF9rZXkod2wsIHdsLT5kZWZhdWx0X2tleSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNvdWxkbid0IHNldCBkZWZhdWx0IGtleSIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2h3X2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCXU4IHBhcnRpYWxfdmJtW1BBUlRJQUxfVkJNX01BWF07CisKKwkvKiBzZW5kIGVtcHR5IHRlbXBsYXRlcyBmb3IgZncgbWVtb3J5IHJlc2VydmF0aW9uICovCisJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVEsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVxX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX05VTExfREFUQSwgTlVMTCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFNfUE9MTCwgTlVMTCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1FPU19OVUxMX0RBVEEsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mCisJCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcW9zX251bGxfZGF0YV90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVNQLCBOVUxMLAorCQkJCSAgICAgIHNpemVvZgorCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X3Byb2JlX3Jlc3BfdGVtcGxhdGUpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBOVUxMLAorCQkJCSAgICAgIHNpemVvZgorCQkJCSAgICAgIChzdHJ1Y3Qgd2wxMnh4X2JlYWNvbl90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogdGltIHRlbXBsYXRlcywgZmlyc3QgcmVzZXJ2ZSBzcGFjZSB0aGVuIGFsbG9jYXRlIGFuIGVtcHR5IG9uZSAqLworCW1lbXNldChwYXJ0aWFsX3ZibSwgMCwgUEFSVElBTF9WQk1fTUFYKTsKKwlyZXQgPSB3bDEyNTFfY21kX3ZibSh3bCwgVElNX0VMRV9JRCwgcGFydGlhbF92Ym0sIFBBUlRJQUxfVkJNX01BWCwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3ZibSh3bCwgVElNX0VMRV9JRCwgcGFydGlhbF92Ym0sIDEsIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfaHdfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUod2wsIFJYX01TRFVfTElGRVRJTUVfREVGKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfcnhfY29uZmlnKHdsLCBjb25maWcsIGZpbHRlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfcGRfdGhyZXNob2xkKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfc2xvdCh3bCwgREVGQVVMVF9TTE9UX1RJTUUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ncm91cF9hZGRyZXNzX3RibCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCBSVFNfVEhSRVNIT0xEX0RFRik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitpbnQgd2wxMjUxX2h3X2luaXRfcHRhKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNTFfYWN4X3NnX2VuYWJsZSh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNTFfYWN4X3NnX2NmZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfY2NhX3RocmVzaG9sZCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X2JlYWNvbl9icm9hZGNhc3Qoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9od19pbml0X3Bvd2VyX2F1dGgoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJcmV0dXJuIHdsMTI1MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjUxX1BTTV9DQU0pOworfQorCitpbnQgd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2FjeF9tZW1fY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXdsLT50YXJnZXRfbWVtX21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXApLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghd2wtPnRhcmdldF9tZW1fbWFwKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGRuJ3QgYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBtYXAiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogd2Ugbm93IGFzayBmb3IgdGhlIGZpcm13YXJlIGJ1aWx0IG1lbW9yeSBtYXAgKi8KKwlyZXQgPSB3bDEyNTFfYWN4X21lbV9tYXAod2wsIHdsLT50YXJnZXRfbWVtX21hcCwKKwkJCQkgc2l6ZW9mKHN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXApKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoImNvdWxkbid0IHJldHJpZXZlIGZpcm13YXJlIG1lbW9yeSBtYXAiKTsKKwkJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwkJd2wtPnRhcmdldF9tZW1fbWFwID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdF90eHFfZmlsbCh1OCBxaWQsCisJCQkJICAgc3RydWN0IGFjeF90eF9xdWV1ZV9xb3NfY29uZmlnICpjb25maWcsCisJCQkJICAgdTMyIG51bV9ibG9ja3MpCit7CisJY29uZmlnLT5xaWQgPSBxaWQ7CisKKwlzd2l0Y2ggKHFpZCkgeworCWNhc2UgUU9TX0FDX0JFOgorCQljb25maWctPmhpZ2hfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfSElHSF9CRV9ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKKwkJY29uZmlnLT5sb3dfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfTE9XX0JFX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOworCQlicmVhazsKKwljYXNlIFFPU19BQ19CSzoKKwkJY29uZmlnLT5oaWdoX3RocmVzaG9sZCA9CisJCQkoUU9TX1RYX0hJR0hfQktfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7CisJCWNvbmZpZy0+bG93X3RocmVzaG9sZCA9CisJCQkoUU9TX1RYX0xPV19CS19ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKKwkJYnJlYWs7CisJY2FzZSBRT1NfQUNfVkk6CisJCWNvbmZpZy0+aGlnaF90aHJlc2hvbGQgPQorCQkJKFFPU19UWF9ISUdIX1ZJX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOworCQljb25maWctPmxvd190aHJlc2hvbGQgPQorCQkJKFFPU19UWF9MT1dfVklfREVGICogbnVtX2Jsb2NrcykgLyAxMDA7CisJCWJyZWFrOworCWNhc2UgUU9TX0FDX1ZPOgorCQljb25maWctPmhpZ2hfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfSElHSF9WT19ERUYgKiBudW1fYmxvY2tzKSAvIDEwMDsKKwkJY29uZmlnLT5sb3dfdGhyZXNob2xkID0KKwkJCShRT1NfVFhfTE9XX1ZPX0RFRiAqIG51bV9ibG9ja3MpIC8gMTAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoIkludmFsaWQgVFggcXVldWUgaWQ6ICVkIiwgcWlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2h3X2luaXRfdHhfcXVldWVfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXN0cnVjdCBhY3hfdHhfcXVldWVfcW9zX2NvbmZpZyAqY29uZmlnOworCXN0cnVjdCB3bDEyNTFfYWN4X21lbV9tYXAgKndsX21lbV9tYXAgPSB3bC0+dGFyZ2V0X21lbV9tYXA7CisJaW50IHJldCwgaTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdHggcXVldWUgY29uZmlnIik7CisKKwljb25maWcgPSBremFsbG9jKHNpemVvZigqY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25maWcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfQUM7IGkrKykgeworCQlyZXQgPSB3bDEyNTFfaHdfaW5pdF90eHFfZmlsbChpLCBjb25maWcsCisJCQkJCSAgICAgIHdsX21lbV9tYXAtPm51bV90eF9tZW1fYmxvY2tzKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlyZXQgPSB3bDEyNTFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1RYX1FVRVVFX0NGRywKKwkJCQkJICAgY29uZmlnLCBzaXplb2YoKmNvbmZpZykpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGNvbmZpZyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNTFfaHdfaW5pdF9kYXRhX3BhdGhfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCByZXQ7CisKKwkvKiBhc2tpbmcgZm9yIHRoZSBkYXRhIHBhdGggcGFyYW1ldGVycyAqLworCXdsLT5kYXRhX3BhdGggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+ZGF0YV9wYXRoKSB7CisJCXdsMTI1MV9lcnJvcigiQ291bGRudCBhbGxvY2F0ZSBkYXRhIHBhdGggcGFyYW1ldGVycyIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSB3bDEyNTFfYWN4X2RhdGFfcGF0aF9wYXJhbXMod2wsIHdsLT5kYXRhX3BhdGgpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKHdsLT5kYXRhX3BhdGgpOworCQl3bC0+ZGF0YV9wYXRoID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgd2wxMjUxX2h3X2luaXQoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IHdsMTI1MV9hY3hfbWVtX21hcCAqd2xfbWVtX21hcDsKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjUxX2h3X2luaXRfaHdlbmNfY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFRlbXBsYXRlIHNldHRpbmdzICovCisJcmV0ID0gd2wxMjUxX2h3X2luaXRfdGVtcGxhdGVzX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBEZWZhdWx0IG1lbW9yeSBjb25maWd1cmF0aW9uICovCisJcmV0ID0gd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBEZWZhdWx0IGRhdGEgcGF0aCBjb25maWd1cmF0aW9uICAqLworCXJldCA9IHdsMTI1MV9od19pbml0X2RhdGFfcGF0aF9jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIFJYIGNvbmZpZyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3J4X2NvbmZpZyh3bCwKKwkJCQkgICAgICAgUlhfQ0ZHX1BST01JU0NVT1VTIHwgUlhfQ0ZHX1RTRiwKKwkJCQkgICAgICAgUlhfRklMVEVSX09QVElPTl9ERUYpOworCS8qIFJYX0NPTkZJR19PUFRJT05fQU5ZX0RTVF9BTllfQlNTLAorCSAgIFJYX0ZJTFRFUl9PUFRJT05fRklMVEVSX0FMTCk7ICovCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOworCisJLyogVFggcXVldWVzIGNvbmZpZyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3R4X3F1ZXVlX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOworCisJLyogUEhZIGxheWVyIGNvbmZpZyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3BoeV9jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIEJlYWNvbiBmaWx0ZXJpbmcgKi8KKwlyZXQgPSB3bDEyNTFfaHdfaW5pdF9iZWFjb25fZmlsdGVyKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7CisKKwkvKiBCbHVldG9vdGggV0xBTiBjb2V4aXN0ZW5jZSAqLworCXJldCA9IHdsMTI1MV9od19pbml0X3B0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGF0YV9wYXRoOworCisJLyogRW5lcmd5IGRldGVjdGlvbiAqLworCXJldCA9IHdsMTI1MV9od19pbml0X2VuZXJneV9kZXRlY3Rpb24od2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIEJlYWNvbnMgYW5kIGJvcmFkY2FzdCBzZXR0aW5ncyAqLworCXJldCA9IHdsMTI1MV9od19pbml0X2JlYWNvbl9icm9hZGNhc3Qod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIEVuYWJsZSBkYXRhIHBhdGggKi8KKwlyZXQgPSB3bDEyNTFfY21kX2RhdGFfcGF0aCh3bCwgd2wtPmNoYW5uZWwsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2RhdGFfcGF0aDsKKworCS8qIERlZmF1bHQgcG93ZXIgc3RhdGUgKi8KKwlyZXQgPSB3bDEyNTFfaHdfaW5pdF9wb3dlcl9hdXRoKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9kYXRhX3BhdGg7CisKKwl3bF9tZW1fbWFwID0gd2wtPnRhcmdldF9tZW1fbWFwOworCXdsMTI1MV9pbmZvKCIlZCB0eCBibG9ja3MgYXQgMHgleCwgJWQgcnggYmxvY2tzIGF0IDB4JXgiLAorCQkgICAgd2xfbWVtX21hcC0+bnVtX3R4X21lbV9ibG9ja3MsCisJCSAgICB3bC0+ZGF0YV9wYXRoLT50eF9jb250cm9sX2FkZHIsCisJCSAgICB3bF9tZW1fbWFwLT5udW1fcnhfbWVtX2Jsb2NrcywKKwkJICAgIHdsLT5kYXRhX3BhdGgtPnJ4X2NvbnRyb2xfYWRkcik7CisKKwlyZXR1cm4gMDsKKworIG91dF9mcmVlX2RhdGFfcGF0aDoKKwlrZnJlZSh3bC0+ZGF0YV9wYXRoKTsKKworIG91dF9mcmVlX21lbW1hcDoKKwlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiMjVlYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNTFfSU5JVF9IX18KKyNkZWZpbmUgX19XTDEyNTFfSU5JVF9IX18KKworI2luY2x1ZGUgIndsMTI1MS5oIgorCitpbnQgd2wxMjUxX2h3X2luaXRfaHdlbmNfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfaHdfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsKTsKK2ludCB3bDEyNTFfaHdfaW5pdF9yeF9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpOworaW50IHdsMTI1MV9od19pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9od19pbml0X2JlYWNvbl9maWx0ZXIoc3RydWN0IHdsMTI1MSAqd2wpOworaW50IHdsMTI1MV9od19pbml0X3B0YShzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfYmVhY29uX2Jyb2FkY2FzdChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfcG93ZXJfYXV0aChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX2h3X2luaXQoc3RydWN0IHdsMTI1MSAqd2wpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWMyMzJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pby5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjUxLmgiCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9pby5oIgorCisvKiBGSVhNRTogdGhpcyBpcyBzdGF0aWMgZGF0YSBub3dhZGF5cyBhbmQgdGhlIHRhYmxlIGNhbiBiZSByZW1vdmVkICovCitzdGF0aWMgZW51bSB3bDEyeHhfYWN4X2ludF9yZWcgd2wxMjUxX2lvX3JlZ190YWJsZVtBQ1hfUkVHX1RBQkxFX0xFTl0gPSB7CisJW0FDWF9SRUdfSU5URVJSVVBUX1RSSUddICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCksCisJW0FDWF9SRUdfSU5URVJSVVBUX1RSSUdfSF0gICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3OCksCisJW0FDWF9SRUdfSU5URVJSVVBUX01BU0tdICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5NCksCisJW0FDWF9SRUdfSElOVF9NQVNLX1NFVF0gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5OCksCisJW0FDWF9SRUdfSElOVF9NQVNLX0NMUl0gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5QyksCisJW0FDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSXSA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRCMCksCisJW0FDWF9SRUdfSU5URVJSVVBUX0NMRUFSXSAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRBNCksCisJW0FDWF9SRUdfSU5URVJSVVBUX0FDS10gICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDRBOCksCisJW0FDWF9SRUdfU0xWX1NPRlRfUkVTRVRdICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDAwMCksCisJW0FDWF9SRUdfRUVfU1RBUlRdICAgICAgICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDgwQyksCisJW0FDWF9SRUdfRUNQVV9DT05UUk9MXSAgICAgICA9IChSRUdJU1RFUlNfQkFTRSArIDB4MDgwNCkKK307CisKK3N0YXRpYyBpbnQgd2wxMjUxX3RyYW5zbGF0ZV9yZWdfYWRkcihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIpCit7CisJLyogSWYgdGhlIGFkZHJlc3MgaXMgbG93ZXIgdGhhbiBSRUdJU1RFUlNfQkFTRSwgaXQgbWVhbnMgdGhhdCB0aGlzIGlzCisJICogYSBjaGlwLXNwZWNpZmljIHJlZ2lzdGVyIGFkZHJlc3MsIHNvIGxvb2sgaXQgdXAgaW4gdGhlIHJlZ2lzdGVycworCSAqIHRhYmxlICovCisJaWYgKGFkZHIgPCBSRUdJU1RFUlNfQkFTRSkgeworCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ28gb3ZlciB0aGUgdGFibGUgKi8KKwkJaWYgKGFkZHIgPj0gQUNYX1JFR19UQUJMRV9MRU4pIHsKKwkJCXdsMTI1MV9lcnJvcigiYWRkcmVzcyBvdXQgb2YgcmFuZ2UgKCVkKSIsIGFkZHIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYWRkciA9IHdsMTI1MV9pb19yZWdfdGFibGVbYWRkcl07CisJfQorCisJcmV0dXJuIGFkZHIgLSB3bC0+cGh5c2ljYWxfcmVnX2FkZHIgKyB3bC0+dmlydHVhbF9yZWdfYWRkcjsKK30KKworc3RhdGljIGludCB3bDEyNTFfdHJhbnNsYXRlX21lbV9hZGRyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gYWRkciAtIHdsLT5waHlzaWNhbF9tZW1fYWRkciArIHdsLT52aXJ0dWFsX21lbV9hZGRyOworfQorCit2b2lkIHdsMTI1MV9tZW1fcmVhZChzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgcGh5c2ljYWw7CisKKwlwaHlzaWNhbCA9IHdsMTI1MV90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpOworCisJd2wtPmlmX29wcy0+cmVhZCh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuKTsKK30KKwordm9pZCB3bDEyNTFfbWVtX3dyaXRlKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCWludCBwaHlzaWNhbDsKKworCXBoeXNpY2FsID0gd2wxMjUxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcik7CisKKwl3bC0+aWZfb3BzLT53cml0ZSh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuKTsKK30KKwordTMyIHdsMTI1MV9tZW1fcmVhZDMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gd2wxMjUxX3JlYWQzMih3bCwgd2wxMjUxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcikpOworfQorCit2b2lkIHdsMTI1MV9tZW1fd3JpdGUzMihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpCit7CisJd2wxMjUxX3dyaXRlMzIod2wsIHdsMTI1MV90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpLCB2YWwpOworfQorCit1MzIgd2wxMjUxX3JlZ19yZWFkMzIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyKQoreworCXJldHVybiB3bDEyNTFfcmVhZDMyKHdsLCB3bDEyNTFfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKSk7Cit9CisKK3ZvaWQgd2wxMjUxX3JlZ193cml0ZTMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bDEyNTFfd3JpdGUzMih3bCwgd2wxMjUxX3RyYW5zbGF0ZV9yZWdfYWRkcih3bCwgYWRkciksIHZhbCk7Cit9CisKKy8qIFNldCB0aGUgcGFydGl0aW9ucyB0byBhY2Nlc3MgdGhlIGNoaXAgYWRkcmVzc2VzLgorICoKKyAqIFRoZXJlIGFyZSB0d28gVklSVFVBTCBwYXJ0aXRpb25zICh0aGUgbWVtb3J5IHBhcnRpdGlvbiBhbmQgdGhlCisgKiByZWdpc3RlcnMgcGFydGl0aW9uKSwgd2hpY2ggYXJlIG1hcHBlZCB0byB0d28gZGlmZmVyZW50IGFyZWFzIG9mIHRoZQorICogUEhZU0lDQUwgKGhhcmR3YXJlKSBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIGFsc28gbWFrZXMgb3RoZXIgY2hlY2tzIHRvCisgKiBlbnN1cmUgdGhhdCB0aGUgcGFydGl0aW9ucyBhcmUgbm90IG92ZXJsYXBwaW5nLiAgSW4gdGhlIGRpYWdyYW0gYmVsb3csIHRoZQorICogbWVtb3J5IHBhcnRpdGlvbiBjb21lcyBiZWZvcmUgdGhlIHJlZ2lzdGVyIHBhcnRpdGlvbiwgYnV0IHRoZSBvcHBvc2l0ZSBpcworICogYWxzbyBzdXBwb3J0ZWQuCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEhZU0lDQUwgYWRkcmVzcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UKKyAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gbWVtX3N0YXJ0CisgKiAgICAgICAgICBWSVJUVUFMIGFkZHJlc3MgICAgIC4uLiAgIHwgICAgfAorICogICAgICAgICAgICAgICBzcGFjZSAgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMF0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgfCAgICB8CisgKiAweDAwMDAwMDAwIDwtLSstLS0tKy4uLiAgICAgICAgIC4uListLS0tKy0tPiBtZW1fc3RhcnQgKyBtZW1fc2l6ZQorICogICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgfE1FTSB8ICAgICAgLi4uICAgICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHwgICAgfCAgIC4uLiAgICAgICAgIHwgICAgfAorICogIHBhcnRfc2l6ZSA8LS0rLS0tLSsuLi4gICAgICAgICAgICB8ICAgIHwge3VudXNlZCBhcmVhKQorICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgfFJFRyB8ICAgICAgLi4uICAgICAgfCAgICB8CisgKiAgcGFydF9zaXplICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAorICogICAgICArICAgICA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gcmVnX3N0YXJ0CisgKiAgcmVnX3NpemUgICAgICAgICAgICAgIC4uLiAgICAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICB8ICAgIHwgW1BBUlRfMV0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgfCAgICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uListLS0tKy0tPiByZWdfc3RhcnQgKyByZWdfc2l6ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAqCisgKi8KK3ZvaWQgd2wxMjUxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI1MSAqd2wsCisJCQkgIHUzMiBtZW1fc3RhcnQsIHUzMiBtZW1fc2l6ZSwKKwkJCSAgdTMyIHJlZ19zdGFydCwgdTMyIHJlZ19zaXplKQoreworCXN0cnVjdCB3bDEyNTFfcGFydGl0aW9uIHBhcnRpdGlvblsyXTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKKwl3bDEyNTFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgdHdvIHBhcnRpdGlvbnMgdG9nZXRoZXIgZG9uJ3QgZXhjZWVkIHRoZQorCSAqIGFkZHJlc3MgcmFuZ2UgKi8KKwlpZiAoKG1lbV9zaXplICsgcmVnX3NpemUpID4gSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UpIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgIlRvdGFsIHNpemUgZXhjZWVkcyBtYXhpbXVtIHZpcnR1YWwiCisJCQkgICAgICIgYWRkcmVzcyByYW5nZS4gIFRydW5jYXRpbmcgcGFydGl0aW9uWzBdLiIpOworCQltZW1fc2l6ZSA9IEhXX0FDQ0VTU19NRU1PUllfTUFYX1JBTkdFIC0gcmVnX3NpemU7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJCSAgICAgbWVtX3N0YXJ0LCBtZW1fc2l6ZSk7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKKwkJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7CisJfQorCisJaWYgKChtZW1fc3RhcnQgPCByZWdfc3RhcnQpICYmCisJICAgICgobWVtX3N0YXJ0ICsgbWVtX3NpemUpID4gcmVnX3N0YXJ0KSkgeworCQkvKiBHdWFyYW50ZWUgdGhhdCB0aGUgbWVtb3J5IHBhcnRpdGlvbiBkb2Vzbid0IG92ZXJsYXAgdGhlCisJCSAqIHJlZ2lzdGVycyBwYXJ0aXRpb24gKi8KKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgIkVuZCBvZiBwYXJ0aXRpb25bMF0gaXMgIgorCQkJICAgICAib3ZlcmxhcHBpbmcgcGFydGl0aW9uWzFdLiAgQWRqdXN0ZWQuIik7CisJCW1lbV9zaXplID0gcmVnX3N0YXJ0IC0gbWVtX3N0YXJ0OworCQl3bDEyNTFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCisJCQkgICAgIG1lbV9zdGFydCwgbWVtX3NpemUpOworCQl3bDEyNTFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCQkgICAgIHJlZ19zdGFydCwgcmVnX3NpemUpOworCX0gZWxzZSBpZiAoKHJlZ19zdGFydCA8IG1lbV9zdGFydCkgJiYKKwkJICAgKChyZWdfc3RhcnQgKyByZWdfc2l6ZSkgPiBtZW1fc3RhcnQpKSB7CisJCS8qIEd1YXJhbnRlZSB0aGF0IHRoZSByZWdpc3RlciBwYXJ0aXRpb24gZG9lc24ndCBvdmVybGFwIHRoZQorCQkgKiBtZW1vcnkgcGFydGl0aW9uICovCisJCXdsMTI1MV9kZWJ1ZyhERUJVR19TUEksICJFbmQgb2YgcGFydGl0aW9uWzFdIGlzIgorCQkJICAgICAiIG92ZXJsYXBwaW5nIHBhcnRpdGlvblswXS4gIEFkanVzdGVkLiIpOworCQlyZWdfc2l6ZSA9IG1lbV9zdGFydCAtIHJlZ19zdGFydDsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAorCQkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAorCQkJICAgICByZWdfc3RhcnQsIHJlZ19zaXplKTsKKwl9CisKKwlwYXJ0aXRpb25bMF0uc3RhcnQgPSBtZW1fc3RhcnQ7CisJcGFydGl0aW9uWzBdLnNpemUgID0gbWVtX3NpemU7CisJcGFydGl0aW9uWzFdLnN0YXJ0ID0gcmVnX3N0YXJ0OworCXBhcnRpdGlvblsxXS5zaXplICA9IHJlZ19zaXplOworCisJd2wtPnBoeXNpY2FsX21lbV9hZGRyID0gbWVtX3N0YXJ0OworCXdsLT5waHlzaWNhbF9yZWdfYWRkciA9IHJlZ19zdGFydDsKKworCXdsLT52aXJ0dWFsX21lbV9hZGRyID0gMDsKKwl3bC0+dmlydHVhbF9yZWdfYWRkciA9IG1lbV9zaXplOworCisJd2wtPmlmX29wcy0+d3JpdGUod2wsIEhXX0FDQ0VTU19QQVJUMF9TSVpFX0FERFIsIHBhcnRpdGlvbiwKKwkJc2l6ZW9mKHBhcnRpdGlvbikpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OWQyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2lvLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKyNpZm5kZWYgX19XTDEyNTFfSU9fSF9fCisjZGVmaW5lIF9fV0wxMjUxX0lPX0hfXworCisjaW5jbHVkZSAid2wxMjUxLmgiCisKKyNkZWZpbmUgSFdfQUNDRVNTX01FTU9SWV9NQVhfUkFOR0UJCTB4MUZGQzAKKworI2RlZmluZSBIV19BQ0NFU1NfUEFSVDBfU0laRV9BRERSICAgICAgICAgICAweDFGRkMwCisjZGVmaW5lIEhXX0FDQ0VTU19QQVJUMF9TVEFSVF9BRERSICAgICAgICAgIDB4MUZGQzQKKyNkZWZpbmUgSFdfQUNDRVNTX1BBUlQxX1NJWkVfQUREUiAgICAgICAgICAgMHgxRkZDOAorI2RlZmluZSBIV19BQ0NFU1NfUEFSVDFfU1RBUlRfQUREUiAgICAgICAgICAweDFGRkNDCisKKyNkZWZpbmUgSFdfQUNDRVNTX1JFR0lTVEVSX1NJWkUgICAgICAgICAgICAgNAorCisjZGVmaW5lIEhXX0FDQ0VTU19QUkFNX01BWF9SQU5HRQkJMHgzYzAwMAorCitzdGF0aWMgaW5saW5lIHUzMiB3bDEyNTFfcmVhZDMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkcikKK3sKKwl1MzIgcmVzcG9uc2U7CisKKwl3bC0+aWZfb3BzLT5yZWFkKHdsLCBhZGRyLCAmcmVzcG9uc2UsIHNpemVvZih1MzIpKTsKKworCXJldHVybiByZXNwb25zZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdsMTI1MV93cml0ZTMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bC0+aWZfb3BzLT53cml0ZSh3bCwgYWRkciwgJnZhbCwgc2l6ZW9mKHUzMikpOworfQorCisvKiBNZW1vcnkgdGFyZ2V0IElPLCBhZGRyZXNzIGlzIHRyYW5zbGF0ZWQgdG8gcGFydGl0aW9uIDAgKi8KK3ZvaWQgd2wxMjUxX21lbV9yZWFkKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK3ZvaWQgd2wxMjUxX21lbV93cml0ZShzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Cit1MzIgd2wxMjUxX21lbV9yZWFkMzIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyKTsKK3ZvaWQgd2wxMjUxX21lbV93cml0ZTMyKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCk7CisvKiBSZWdpc3RlcnMgSU8gKi8KK3UzMiB3bDEyNTFfcmVnX3JlYWQzMihzdHJ1Y3Qgd2wxMjUxICp3bCwgaW50IGFkZHIpOwordm9pZCB3bDEyNTFfcmVnX3dyaXRlMzIoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKTsKKwordm9pZCB3bDEyNTFfc2V0X3BhcnRpdGlvbihzdHJ1Y3Qgd2wxMjUxICp3bCwKKwkJCSAgdTMyIHBhcnRfc3RhcnQsIHUzMiBwYXJ0X3NpemUsCisJCQkgIHUzMiByZWdfc3RhcnQsICB1MzIgcmVnX3NpemUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwOWVmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jCkBAIC0wLDAgKzEsMTQyOCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgIndsMTI1MS5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKKyNpbmNsdWRlICJ3bDEyNTFfY21kLmgiCisjaW5jbHVkZSAid2wxMjUxX2V2ZW50LmgiCisjaW5jbHVkZSAid2wxMjUxX3R4LmgiCisjaW5jbHVkZSAid2wxMjUxX3J4LmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisjaW5jbHVkZSAid2wxMjUxX2luaXQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfZGVidWdmcy5oIgorI2luY2x1ZGUgIndsMTI1MV9ib290LmgiCisKK3ZvaWQgd2wxMjUxX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXdsLT5pZl9vcHMtPmVuYWJsZV9pcnEod2wpOworfQorCit2b2lkIHdsMTI1MV9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJd2wtPmlmX29wcy0+ZGlzYWJsZV9pcnEod2wpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfcG93ZXJfb2ZmKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXdsLT5zZXRfcG93ZXIoZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfcG93ZXJfb24oc3RydWN0IHdsMTI1MSAqd2wpCit7CisJd2wtPnNldF9wb3dlcih0cnVlKTsKK30KKworc3RhdGljIGludCB3bDEyNTFfZmV0Y2hfZmlybXdhcmUoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aXBoeV9kZXYod2wtPmh3LT53aXBoeSk7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNTFfRldfTkFNRSwgZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGQgbm90IGdldCBmaXJtd2FyZTogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChmdy0+c2l6ZSAlIDQpIHsKKwkJd2wxMjUxX2Vycm9yKCJmaXJtd2FyZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMiBiaXRzOiAlenUiLAorCQkJICAgICBmdy0+c2l6ZSk7CisJCXJldCA9IC1FSUxTRVE7CisJCWdvdG8gb3V0OworCX0KKworCXdsLT5md19sZW4gPSBmdy0+c2l6ZTsKKwl3bC0+ZncgPSBrbWFsbG9jKHdsLT5md19sZW4sIEdGUF9LRVJORUwpOworCisJaWYgKCF3bC0+ZncpIHsKKwkJd2wxMjUxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgZmlybXdhcmUiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHdsLT5mdywgZnctPmRhdGEsIHdsLT5md19sZW4pOworCisJcmV0ID0gMDsKKworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNTFfZmV0Y2hfbnZzKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJc3RydWN0IGRldmljZSAqZGV2ID0gd2lwaHlfZGV2KHdsLT5ody0+d2lwaHkpOworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjUxX05WU19OQU1FLCBkZXYpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJjb3VsZCBub3QgZ2V0IG52cyBmaWxlOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGZ3LT5zaXplICUgNCkgeworCQl3bDEyNTFfZXJyb3IoIm52cyBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMiBiaXRzOiAlenUiLAorCQkJICAgICBmdy0+c2l6ZSk7CisJCXJldCA9IC1FSUxTRVE7CisJCWdvdG8gb3V0OworCX0KKworCXdsLT5udnNfbGVuID0gZnctPnNpemU7CisJd2wtPm52cyA9IGttYWxsb2Mod2wtPm52c19sZW4sIEdGUF9LRVJORUwpOworCisJaWYgKCF3bC0+bnZzKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG52cyBmaWxlIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweSh3bC0+bnZzLCBmdy0+ZGF0YSwgd2wtPm52c19sZW4pOworCisJcmV0ID0gMDsKKworb3V0OgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX2Z3X3dha2V1cChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl1MzIgZWxwX3JlZzsKKworCWVscF9yZWcgPSBFTFBDVFJMX1dBS0VfVVA7CisJd2wxMjUxX3dyaXRlMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiwgZWxwX3JlZyk7CisJZWxwX3JlZyA9IHdsMTI1MV9yZWFkMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUik7CisKKwlpZiAoIShlbHBfcmVnICYgRUxQQ1RSTF9XTEFOX1JFQURZKSkKKwkJd2wxMjUxX3dhcm5pbmcoIldMQU4gbm90IHJlYWR5Iik7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2NoaXBfd2FrZXVwKHN0cnVjdCB3bDEyNTEgKndsKQoreworCWludCByZXQgPSAwOworCisJd2wxMjUxX3Bvd2VyX29uKHdsKTsKKwltc2xlZXAoV0wxMjUxX1BPV0VSX09OX1NMRUVQKTsKKwl3bC0+aWZfb3BzLT5yZXNldCh3bCk7CisKKwkvKiBXZSBkb24ndCBuZWVkIGEgcmVhbCBtZW1vcnkgcGFydGl0aW9uIGhlcmUsIGJlY2F1c2Ugd2Ugb25seSB3YW50CisJICogdG8gdXNlIHRoZSByZWdpc3RlcnMgYXQgdGhpcyBwb2ludC4gKi8KKwl3bDEyNTFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgMHgwMDAwMDAwMCwKKwkJCSAgICAgMHgwMDAwMDAwMCwKKwkJCSAgICAgUkVHSVNURVJTX0JBU0UsCisJCQkgICAgIFJFR0lTVEVSU19ET1dOX1NJWkUpOworCisJLyogRUxQIG1vZHVsZSB3YWtlIHVwICovCisJd2wxMjUxX2Z3X3dha2V1cCh3bCk7CisKKwkvKiB3aGFsX0Z3Q3RybF9Cb290U20oKSAqLworCisJLyogMC4gcmVhZCBjaGlwIGlkIGZyb20gQ0hJUF9JRCAqLworCXdsLT5jaGlwX2lkID0gd2wxMjUxX3JlZ19yZWFkMzIod2wsIENISVBfSURfQik7CisKKwkvKiAxLiBjaGVjayBpZiBjaGlwIGlkIGlzIHZhbGlkICovCisKKwlzd2l0Y2ggKHdsLT5jaGlwX2lkKSB7CisJY2FzZSBDSElQX0lEXzEyNTFfUEcxMjoKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0JPT1QsICJjaGlwIGlkIDB4JXggKDEyNTEgUEcxMikiLAorCQkJICAgICB3bC0+Y2hpcF9pZCk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9JRF8xMjUxX1BHMTA6CisJY2FzZSBDSElQX0lEXzEyNTFfUEcxMToKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoInVuc3VwcG9ydGVkIGNoaXAgaWQ6IDB4JXgiLCB3bC0+Y2hpcF9pZCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh3bC0+ZncgPT0gTlVMTCkgeworCQlyZXQgPSB3bDEyNTFfZmV0Y2hfZmlybXdhcmUod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIE5vIE5WUyBmcm9tIG5ldGxpbmssIHRyeSB0byBnZXQgaXQgZnJvbSB0aGUgZmlsZXN5c3RlbSAqLworCWlmICh3bC0+bnZzID09IE5VTEwpIHsKKwkJcmV0ID0gd2wxMjUxX2ZldGNoX252cyh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl1MzIgaW50cjsKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjUxLCBpcnFfd29yayk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiSVJRIHdvcmsiKTsKKworCWlmICh3bC0+c3RhdGUgPT0gV0wxMjUxX1NUQVRFX09GRikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNTFfQUNYX0lOVFJfQUxMKTsKKworCWludHIgPSB3bDEyNTFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQ0xFQVIpOworCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJpbnRyOiAweCV4IiwgaW50cik7CisKKwlpZiAod2wtPmRhdGFfcGF0aCkgeworCQl3bC0+cnhfY291bnRlciA9CisJCQl3bDEyNTFfbWVtX3JlYWQzMih3bCwgd2wtPmRhdGFfcGF0aC0+cnhfY29udHJvbF9hZGRyKTsKKworCQkvKiBXZSBoYW5kbGUgYSBmcm13YXJlIGJ1ZyBoZXJlICovCisJCXN3aXRjaCAoKHdsLT5yeF9jb3VudGVyIC0gd2wtPnJ4X2hhbmRsZWQpICYgMHhmKSB7CisJCWNhc2UgMDoKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgYW5kIGhvc3QgaW4gc3luYyIpOworCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOworCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMV9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgKzEiKTsKKwkJCWludHIgfD0gV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOworCQkJaW50ciAmPSB+V0wxMjUxX0FDWF9JTlRSX1JYMV9EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJSWDogRlcgKzIiKTsKKwkJCWludHIgfD0gV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBOworCQkJaW50ciB8PSBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdsMTI1MV93YXJuaW5nKCJSWDogRlcgYW5kIGhvc3Qgb3V0IG9mIHN5bmM6ICVkIiwKKwkJCQkgICAgICAgd2wtPnJ4X2NvdW50ZXIgLSB3bC0+cnhfaGFuZGxlZCk7CisJCQlicmVhazsKKwkJfQorCisJCXdsLT5yeF9oYW5kbGVkID0gd2wtPnJ4X2NvdW50ZXI7CisKKworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiUlggY291bnRlcjogJWQiLCB3bC0+cnhfY291bnRlcik7CisJfQorCisJaW50ciAmPSB3bC0+aW50cl9tYXNrOworCisJaWYgKGludHIgPT0gMCkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiSU5UUiBpcyAwIik7CisJCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJCQkgICB+KHdsLT5pbnRyX21hc2spKTsKKworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKKwlpZiAoaW50ciAmIFdMMTI1MV9BQ1hfSU5UUl9SWDBfREFUQSkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX1JYMF9EQVRBIik7CisJCXdsMTI1MV9yeCh3bCk7CisJfQorCisJaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfUlgxX0RBVEEpIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI1MV9BQ1hfSU5UUl9SWDFfREFUQSIpOworCQl3bDEyNTFfcngod2wpOworCX0KKworCWlmIChpbnRyICYgV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVCkgeworCQl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiV0wxMjUxX0FDWF9JTlRSX1RYX1JFU1VMVCIpOworCQl3bDEyNTFfdHhfY29tcGxldGUod2wpOworCX0KKworCWlmIChpbnRyICYgKFdMMTI1MV9BQ1hfSU5UUl9FVkVOVF9BIHwgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0IpKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNTFfQUNYX0lOVFJfRVZFTlQgKDB4JXgpIiwgaW50cik7CisJCWlmIChpbnRyICYgV0wxMjUxX0FDWF9JTlRSX0VWRU5UX0EpCisJCQl3bDEyNTFfZXZlbnRfaGFuZGxlKHdsLCAwKTsKKwkJZWxzZQorCQkJd2wxMjUxX2V2ZW50X2hhbmRsZSh3bCwgMSk7CisJfQorCisJaWYgKGludHIgJiBXTDEyNTFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkKKwkJd2wxMjUxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI1MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFIik7CisKKwl3bDEyNTFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIH4od2wtPmludHJfbWFzaykpOworCitvdXRfc2xlZXA6CisJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2pvaW4oc3RydWN0IHdsMTI1MSAqd2wsIHU4IGJzc190eXBlLCB1OCBjaGFubmVsLAorCQkgICAgICAgdTE2IGJlYWNvbl9pbnRlcnZhbCwgdTggZHRpbV9wZXJpb2QpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI1MV9hY3hfZnJhbWVfcmF0ZXMod2wsIERFRkFVTFRfSFdfR0VOX1RYX1JBVEUsCisJCQkJICAgICBERUZBVUxUX0hXX0dFTl9NT0RVTEFUSU9OX1RZUEUsCisJCQkJICAgICB3bC0+dHhfbWdtdF9mcm1fcmF0ZSwKKwkJCQkgICAgIHdsLT50eF9tZ210X2ZybV9tb2QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCisJcmV0ID0gd2wxMjUxX2NtZF9qb2luKHdsLCBic3NfdHlwZSwgY2hhbm5lbCwgYmVhY29uX2ludGVydmFsLAorCQkJICAgICAgZHRpbV9wZXJpb2QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qCisJICogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciBKT0lOX0VWRU5UX0NPTVBMRVRFX0lEIGJ1dCB0byBzaW1wbGlmeQorCSAqIGxvY2tpbmcgd2UganVzdCBzbGVlcCBpbnN0ZWFkLCBmb3Igbm93CisJICovCisJbXNsZWVwKDEwKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9maWx0ZXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdsMTI1MSAqd2wgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTI1MSwgZmlsdGVyX3dvcmspOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHdsLT5zdGF0ZSA9PSBXTDEyNTFfU1RBVEVfT0ZGKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI1MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNTFfam9pbih3bCwgd2wtPmJzc190eXBlLCB3bC0+Y2hhbm5lbCwgd2wtPmJlYWNvbl9pbnQsCisJCQkgIHdsLT5kdGltX3BlcmlvZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCitvdXRfc2xlZXA6CisJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisKKwlza2JfcXVldWVfdGFpbCgmd2wtPnR4X3F1ZXVlLCBza2IpOworCisJLyoKKwkgKiBUaGUgY2hpcCBzcGVjaWZpYyBzZXR1cCBtdXN0IHJ1biBiZWZvcmUgdGhlIGZpcnN0IFRYIHBhY2tldCAtCisJICogYmVmb3JlIHRoYXQsIHRoZSB0eF93b3JrIHdpbGwgbm90IGJlIGluaXRpYWxpemVkIQorCSAqLworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnR4X3dvcmspOworCisJLyoKKwkgKiBUaGUgd29ya3F1ZXVlIGlzIHNsb3cgdG8gcHJvY2VzcyB0aGUgdHhfcXVldWUgYW5kIHdlIG5lZWQgc3RvcAorCSAqIHRoZSBxdWV1ZSBoZXJlLCBvdGhlcndpc2UgdGhlIHF1ZXVlIHdpbGwgZ2V0IHRvbyBsb25nLgorCSAqLworCWlmIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpID49IFdMMTI1MV9UWF9RVUVVRV9NQVhfTEVOR1RIKSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOworCisJCS8qCisJCSAqIEZJWE1FOiB0aGlzIGlzIHJhY3ksIHRoZSB2YXJpYWJsZSBpcyBub3QgcHJvcGVybHkKKwkJICogcHJvdGVjdGVkLiBNYXliZSBmaXggdGhpcyBieSByZW1vdmluZyB0aGUgc3R1cGlkCisJCSAqIHZhcmlhYmxlIGFsdG9nZXRoZXIgYW5kIGNoZWNraW5nIHRoZSByZWFsIHF1ZXVlIHN0YXRlPworCQkgKi8KKwkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSB0cnVlOworCX0KKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdGFydCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjUxX1NUQVRFX09GRikgeworCQl3bDEyNTFfZXJyb3IoImNhbm5vdCBzdGFydCBiZWNhdXNlIG5vdCBpbiBvZmYgc3RhdGU6ICVkIiwKKwkJCSAgICAgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNTFfY2hpcF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI1MV9ib290KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNTFfaHdfaW5pdCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjUxX2FjeF9zdGF0aW9uX2lkKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bC0+c3RhdGUgPSBXTDEyNTFfU1RBVEVfT047CisKKwl3bDEyNTFfaW5mbygiZmlybXdhcmUgYm9vdGVkICglcykiLCB3bC0+ZndfdmVyKTsKKworb3V0OgorCWlmIChyZXQgPCAwKQorCQl3bDEyNTFfcG93ZXJfb2ZmKHdsKTsKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9vcF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisKKwl3bDEyNTFfaW5mbygiZG93biIpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RvcCIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTI1MV9TVEFURV9PTik7CisKKwlpZiAod2wtPnNjYW5uaW5nKSB7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHdsLT5odywgdHJ1ZSk7CisJCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCX0KKworCXdsLT5zdGF0ZSA9IFdMMTI1MV9TVEFURV9PRkY7CisKKwl3bDEyNTFfZGlzYWJsZV9pbnRlcnJ1cHRzKHdsKTsKKworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmd2wtPnR4X3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJndsLT5maWx0ZXJfd29yayk7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJLyogbGV0J3Mgbm90aWZ5IE1BQzgwMjExIGFib3V0IHRoZSByZW1haW5pbmcgcGVuZGluZyBUWCBmcmFtZXMgKi8KKwl3bDEyNTFfdHhfZmx1c2god2wpOworCXdsMTI1MV9wb3dlcl9vZmYod2wpOworCisJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCXdsLT5saXN0ZW5faW50ID0gMTsKKwl3bC0+YnNzX3R5cGUgPSBNQVhfQlNTX1RZUEU7CisKKwl3bC0+ZGF0YV9pbl9jb3VudCA9IDA7CisJd2wtPnJ4X2NvdW50ZXIgPSAwOworCXdsLT5yeF9oYW5kbGVkID0gMDsKKwl3bC0+cnhfY3VycmVudF9idWZmZXIgPSAwOworCXdsLT5yeF9sYXN0X2lkID0gMDsKKwl3bC0+bmV4dF90eF9jb21wbGV0ZSA9IDA7CisJd2wtPmVscCA9IGZhbHNlOworCXdsLT5wc20gPSAwOworCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CisJd2wtPnBvd2VyX2xldmVsID0gV0wxMjUxX0RFRkFVTFRfUE9XRVJfTEVWRUw7CisJd2wtPmNoYW5uZWwgPSBXTDEyNTFfREVGQVVMVF9DSEFOTkVMOworCisJd2wxMjUxX2RlYnVnZnNfcmVzZXQod2wpOworCisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBhZGQgaW50ZXJmYWNlIHR5cGUgJWQgbWFjICVwTSIsCisJCSAgICAgY29uZi0+dHlwZSwgY29uZi0+bWFjX2FkZHIpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfSUJTUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtZW1jbXAod2wtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pKSB7CisJCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKKwkJcmV0ID0gd2wxMjUxX2FjeF9zdGF0aW9uX2lkKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSByZW1vdmUgaW50ZXJmYWNlIik7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMnh4X251bGxfZGF0YV90ZW1wbGF0ZSB0ZW1wbGF0ZTsKKworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHdsLT5ic3NpZCkpIHsKKwkJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5kYSwgd2wtPmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuYnNzaWQsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwkJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCX0KKworCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJCQlJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMpOworCisJcmV0dXJuIHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfTlVMTF9EQVRBLCAmdGVtcGxhdGUsCisJCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSkpOworCit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBhaWQpCit7CisJc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlIHRlbXBsYXRlOworCisJbWVtY3B5KHRlbXBsYXRlLmJzc2lkLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkodGVtcGxhdGUudGEsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmFpZCA9IGFpZDsKKwl0ZW1wbGF0ZS5mYyA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKTsKKworCXJldHVybiB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BTX1BPTEwsICZ0ZW1wbGF0ZSwKKwkJCQkgICAgICAgc2l6ZW9mKHRlbXBsYXRlKSk7CisKK30KKworc3RhdGljIGludCB3bDEyNTFfb3BfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlpbnQgY2hhbm5lbCwgcmV0ID0gMDsKKworCWNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY29uZi0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlnIGNoICVkIHBzbSAlcyBwb3dlciAlZCIsCisJCSAgICAgY2hhbm5lbCwKKwkJICAgICBjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTID8gIm9uIiA6ICJvZmYiLAorCQkgICAgIGNvbmYtPnBvd2VyX2xldmVsKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNoYW5uZWwgIT0gd2wtPmNoYW5uZWwpIHsKKwkJd2wtPmNoYW5uZWwgPSBjaGFubmVsOworCisJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5jaGFubmVsLAorCQkJCSAgd2wtPmJlYWNvbl9pbnQsIHdsLT5kdGltX3BlcmlvZCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfc2xlZXA7CisJfQorCisJcmV0ID0gd2wxMjUxX2J1aWxkX251bGxfZGF0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYgIXdsLT5wc21fcmVxdWVzdGVkKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJwc20gZW5hYmxlZCIpOworCisJCXdsLT5wc21fcmVxdWVzdGVkID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCisJCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCisJCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgorCQkgKi8KKwkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJfSBlbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICYmCisJCSAgIHdsLT5wc21fcmVxdWVzdGVkKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJwc20gZGlzYWJsZWQiKTsKKworCQl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOworCisJCWlmICh3bC0+cHNtKQorCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwl9CisKKwlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gd2wtPnBvd2VyX2xldmVsKSB7CisJCXJldCA9IHdsMTI1MV9hY3hfdHhfcG93ZXIod2wsIGNvbmYtPnBvd2VyX2xldmVsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQl3bC0+cG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgV0wxMjUxX1NVUFBPUlRFRF9GSUxURVJTIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBcCisJCQkJICBGSUZfQUxMTVVMVEkgfCBcCisJCQkJICBGSUZfRkNTRkFJTCB8IFwKKwkJCQkgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgXAorCQkJCSAgRklGX0NPTlRST0wgfCBcCisJCQkJICBGSUZfT1RIRVJfQlNTKQorCitzdGF0aWMgdm9pZCB3bDEyNTFfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWQsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqdG90YWwsdTY0IG11bHRpY2FzdCkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlndXJlIGZpbHRlciIpOworCisJKnRvdGFsICY9IFdMMTI1MV9TVVBQT1JURURfRklMVEVSUzsKKwljaGFuZ2VkICY9IFdMMTI1MV9TVVBQT1JURURfRklMVEVSUzsKKworCWlmIChjaGFuZ2VkID09IDApCisJCS8qIG5vIGZpbHRlcnMgd2hpY2ggd2Ugc3VwcG9ydCBjaGFuZ2VkICovCisJCXJldHVybjsKKworCS8qIEZJWE1FOiB3bC0+cnhfY29uZmlnIGFuZCB3bC0+cnhfZmlsdGVyIGFyZSBub3QgcHJvdGVjdGVkICovCisKKwl3bC0+cnhfY29uZmlnID0gV0wxMjUxX0RFRkFVTFRfUlhfQ09ORklHOworCXdsLT5yeF9maWx0ZXIgPSBXTDEyNTFfREVGQVVMVF9SWF9GSUxURVI7CisKKwlpZiAoKnRvdGFsICYgRklGX1BST01JU0NfSU5fQlNTKSB7CisJCXdsLT5yeF9jb25maWcgfD0gQ0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKwkJd2wtPnJ4X2NvbmZpZyB8PSBDRkdfUlhfQUxMX0dPT0Q7CisJfQorCWlmICgqdG90YWwgJiBGSUZfQUxMTVVMVEkpCisJCS8qCisJCSAqIENGR19NQ19GSUxURVJfRU4gaW4gcnhfY29uZmlnIG5lZWRzIHRvIGJlIDAgdG8gcmVjZWl2ZQorCQkgKiBhbGwgbXVsdGljYXN0IGZyYW1lcworCQkgKi8KKwkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX01DX0ZJTFRFUl9FTjsKKwlpZiAoKnRvdGFsICYgRklGX0ZDU0ZBSUwpCisJCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0ZDU19FUlJPUjsKKwlpZiAoKnRvdGFsICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKKwkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKwkJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX1NTSURfRklMVEVSX0VOOworCX0KKwlpZiAoKnRvdGFsICYgRklGX0NPTlRST0wpCisJCXdsLT5yeF9maWx0ZXIgfD0gQ0ZHX1JYX0NUTF9FTjsKKwlpZiAoKnRvdGFsICYgRklGX09USEVSX0JTUykKKwkJd2wtPnJ4X2ZpbHRlciAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKworCS8qCisJICogRklYTUU6IHdvcmtxdWV1ZXMgbmVlZCB0byBiZSBwcm9wZXJseSBjYW5jZWxsZWQgb24gc3RvcCgpLCBmb3IKKwkgKiBub3cgbGV0J3MganVzdCBkaXNhYmxlIGNoYW5naW5nIHRoZSBmaWx0ZXIgc2V0dGluZ3MuIFRoZXkgd2lsbAorCSAqIGJlIHVwZGF0ZWQgYW55IG9uIGNvbmZpZygpLgorCSAqLworCS8qIHNjaGVkdWxlX3dvcmsoJndsLT5maWx0ZXJfd29yayk7ICovCit9CisKKy8qIEhXIGVuY3J5cHRpb24gKi8KK3N0YXRpYyBpbnQgd2wxMjUxX3NldF9rZXlfdHlwZShzdHJ1Y3Qgd2wxMjUxICp3bCwKKwkJCSAgICAgICBzdHJ1Y3Qgd2wxMjUxX2NtZF9zZXRfa2V5cyAqa2V5LAorCQkJICAgICAgIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKm1hYzgwMjExX2tleSwKKwkJCSAgICAgICBjb25zdCB1OCAqYWRkcikKK3sKKwlzd2l0Y2ggKG1hYzgwMjExX2tleS0+YWxnKSB7CisJY2FzZSBBTEdfV0VQOgorCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCQlrZXktPmtleV90eXBlID0gS0VZX1dFUF9ERUZBVUxUOworCQllbHNlCisJCQlrZXktPmtleV90eXBlID0gS0VZX1dFUF9BRERSOworCisJCW1hYzgwMjExX2tleS0+aHdfa2V5X2lkeCA9IG1hYzgwMjExX2tleS0+a2V5aWR4OworCQlicmVhazsKKwljYXNlIEFMR19US0lQOgorCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCQlrZXktPmtleV90eXBlID0gS0VZX1RLSVBfTUlDX0dST1VQOworCQllbHNlCisJCQlrZXktPmtleV90eXBlID0gS0VZX1RLSVBfTUlDX1BBSVJXSVNFOworCisJCW1hYzgwMjExX2tleS0+aHdfa2V5X2lkeCA9IG1hYzgwMjExX2tleS0+a2V5aWR4OworCQlicmVhazsKKwljYXNlIEFMR19DQ01QOgorCQlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCisJCQlrZXktPmtleV90eXBlID0gS0VZX0FFU19HUk9VUDsKKwkJZWxzZQorCQkJa2V5LT5rZXlfdHlwZSA9IEtFWV9BRVNfUEFJUldJU0U7CisJCW1hYzgwMjExX2tleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoIlVua25vd24ga2V5IGFsZ28gMHgleCIsIG1hYzgwMjExX2tleS0+YWxnKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI1MV9vcF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJc3RydWN0IHdsMTI1MV9jbWRfc2V0X2tleXMgKndsX2NtZDsKKwljb25zdCB1OCAqYWRkcjsKKwlpbnQgcmV0OworCisJc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0KKwkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzZXQga2V5Iik7CisKKwl3bF9jbWQgPSBremFsbG9jKHNpemVvZigqd2xfY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bF9jbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWRkciA9IHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHI7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ1JZUFQsICJDTUQ6IDB4JXgiLCBjbWQpOworCXdsMTI1MV9kdW1wKERFQlVHX0NSWVBULCAiQUREUjogIiwgYWRkciwgRVRIX0FMRU4pOworCXdsMTI1MV9kZWJ1ZyhERUJVR19DUllQVCwgIktleTogYWxnbzoweCV4LCBpZDolZCwgbGVuOiVkIGZsYWdzIDB4JXgiLAorCQkgICAgIGtleS0+YWxnLCBrZXktPmtleWlkeCwga2V5LT5rZXlsZW4sIGtleS0+ZmxhZ3MpOworCXdsMTI1MV9kdW1wKERFQlVHX0NSWVBULCAiS0VZOiAiLCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGRyKSkgeworCQkvKiBXZSBkb250IHN1cHBvcnQgVFggb25seSBlbmNyeXB0aW9uICovCisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjUxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0VUX0tFWToKKwkJd2xfY21kLT5rZXlfYWN0aW9uID0gS0VZX0FERF9PUl9SRVBMQUNFOworCQlicmVhazsKKwljYXNlIERJU0FCTEVfS0VZOgorCQl3bF9jbWQtPmtleV9hY3Rpb24gPSBLRVlfUkVNT1ZFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl3bDEyNTFfZXJyb3IoIlVuc3VwcG9ydGVkIGtleSBjbWQgMHgleCIsIGNtZCk7CisJCWJyZWFrOworCX0KKworCXJldCA9IHdsMTI1MV9zZXRfa2V5X3R5cGUod2wsIHdsX2NtZCwgY21kLCBrZXksIGFkZHIpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiU2V0IEtFWSB0eXBlIGZhaWxlZCIpOworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKKwlpZiAod2xfY21kLT5rZXlfdHlwZSAhPSBLRVlfV0VQX0RFRkFVTFQpCisJCW1lbWNweSh3bF9jbWQtPmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKworCWlmICgod2xfY21kLT5rZXlfdHlwZSA9PSBLRVlfVEtJUF9NSUNfR1JPVVApIHx8CisJICAgICh3bF9jbWQtPmtleV90eXBlID09IEtFWV9US0lQX01JQ19QQUlSV0lTRSkpIHsKKwkJLyoKKwkJICogV2UgZ2V0IHRoZSBrZXkgaW4gdGhlIGZvbGxvd2luZyBmb3JtOgorCQkgKiBUS0lQICgxNiBieXRlcykgLSBUWCBNSUMgKDggYnl0ZXMpIC0gUlggTUlDICg4IGJ5dGVzKQorCQkgKiBidXQgdGhlIHRhcmdldCBpcyBleHBlY3Rpbmc6CisJCSAqIFRLSVAgLSBSWCBNSUMgLSBUWCBNSUMKKwkJICovCisJCW1lbWNweSh3bF9jbWQtPmtleSwga2V5LT5rZXksIDE2KTsKKwkJbWVtY3B5KHdsX2NtZC0+a2V5ICsgMTYsIGtleS0+a2V5ICsgMjQsIDgpOworCQltZW1jcHkod2xfY21kLT5rZXkgKyAyNCwga2V5LT5rZXkgKyAxNiwgOCk7CisKKwl9IGVsc2UgeworCQltZW1jcHkod2xfY21kLT5rZXksIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJfQorCXdsX2NtZC0+a2V5X3NpemUgPSBrZXktPmtleWxlbjsKKworCXdsX2NtZC0+aWQgPSBrZXktPmtleWlkeDsKKwl3bF9jbWQtPnNzaWRfcHJvZmlsZSA9IDA7CisKKwl3bDEyNTFfZHVtcChERUJVR19DUllQVCwgIlRBUkdFVCBLRVk6ICIsIHdsX2NtZCwgc2l6ZW9mKCp3bF9jbWQpKTsKKworCXJldCA9IHdsMTI1MV9jbWRfc2VuZCh3bCwgQ01EX1NFVF9LRVlTLCB3bF9jbWQsIHNpemVvZigqd2xfY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImNvdWxkIG5vdCBzZXQga2V5cyIpOworCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKK291dDoKKwlrZnJlZSh3bF9jbWQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNTFfYnVpbGRfYmFzaWNfcmF0ZXMoY2hhciAqcmF0ZXMpCit7CisJdTggaW5kZXggPSAwOworCisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV81TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzExTUI7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKGNoYXIgKnJhdGVzKQoreworCXU4IGluZGV4ID0gMDsKKworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKworCXJldHVybiBpbmRleDsKK30KKworCitzdGF0aWMgaW50IHdsMTI1MV9idWlsZF9wcm9iZV9yZXEoc3RydWN0IHdsMTI1MSAqd2wsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCit7CisJc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXFfdGVtcGxhdGUgdGVtcGxhdGU7CisJc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqcmF0ZXM7CisJY2hhciAqcHRyOworCXUxNiBzaXplOworCisJcHRyID0gKGNoYXIgKikmdGVtcGxhdGU7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcik7CisKKwltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmRhLCAweGZmLCBFVEhfQUxFTik7CisJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKKworCS8qIElFcyAqLworCS8qIFNTSUQgKi8KKwl0ZW1wbGF0ZS5zc2lkLmhlYWRlci5pZCA9IFdMQU5fRUlEX1NTSUQ7CisJdGVtcGxhdGUuc3NpZC5oZWFkZXIubGVuID0gc3NpZF9sZW47CisJaWYgKHNzaWRfbGVuICYmIHNzaWQpCisJCW1lbWNweSh0ZW1wbGF0ZS5zc2lkLnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKKwlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyBzc2lkX2xlbjsKKwlwdHIgKz0gc2l6ZTsKKworCS8qIEJhc2ljIFJhdGVzICovCisJcmF0ZXMgPSAoc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqKXB0cjsKKwlyYXRlcy0+aGVhZGVyLmlkID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlyYXRlcy0+aGVhZGVyLmxlbiA9IHdsMTI1MV9idWlsZF9iYXNpY19yYXRlcyhyYXRlcy0+cmF0ZXMpOworCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHJhdGVzLT5oZWFkZXIubGVuOworCXB0ciArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwkvKiBFeHRlbmRlZCByYXRlcyAqLworCXJhdGVzID0gKHN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgKilwdHI7CisJcmF0ZXMtPmhlYWRlci5pZCA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCXJhdGVzLT5oZWFkZXIubGVuID0gd2wxMjUxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKHJhdGVzLT5yYXRlcyk7CisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwl3bDEyNTFfZHVtcChERUJVR19TQ0FOLCAiUFJPQkUgUkVROiAiLCAmdGVtcGxhdGUsIHNpemUpOworCisJcmV0dXJuIHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfUFJPQkVfUkVRLCAmdGVtcGxhdGUsCisJCQkJICAgICAgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX2h3X3NjYW4oc3RydWN0IHdsMTI1MSAqd2wsIHU4ICpzc2lkLCBzaXplX3QgbGVuLAorCQkJICB1OCBhY3RpdmVfc2NhbiwgdTggaGlnaF9wcmlvLCB1OCBudW1fY2hhbm5lbHMsCisJCQkgIHU4IHByb2JlX3JlcXVlc3RzKQoreworCXN0cnVjdCB3bDEyNTFfY21kX3RyaWdnZXJfc2Nhbl90byAqdHJpZ2dlciA9IE5VTEw7CisJc3RydWN0IGNtZF9zY2FuICpwYXJhbXMgPSBOVUxMOworCWludCBpLCByZXQ7CisJdTE2IHNjYW5fb3B0aW9ucyA9IDA7CisKKwlpZiAod2wtPnNjYW5uaW5nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcmFtcyA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJhbXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYXJhbXMtPnBhcmFtcy5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKENGR19SWF9BTExfR09PRCk7CisJcGFyYW1zLT5wYXJhbXMucnhfZmlsdGVyX29wdGlvbnMgPQorCQljcHVfdG9fbGUzMihDRkdfUlhfUFJTUF9FTiB8IENGR19SWF9NR01UX0VOIHwgQ0ZHX1JYX0JDTl9FTik7CisKKwkvKiBIaWdoIHByaW9yaXR5IHNjYW4gKi8KKwlpZiAoIWFjdGl2ZV9zY2FuKQorCQlzY2FuX29wdGlvbnMgfD0gU0NBTl9QQVNTSVZFOworCWlmIChoaWdoX3ByaW8pCisJCXNjYW5fb3B0aW9ucyB8PSBTQ0FOX1BSSU9SSVRZX0hJR0g7CisJcGFyYW1zLT5wYXJhbXMuc2Nhbl9vcHRpb25zID0gc2Nhbl9vcHRpb25zOworCisJcGFyYW1zLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbnVtX2NoYW5uZWxzOworCXBhcmFtcy0+cGFyYW1zLm51bV9wcm9iZV9yZXF1ZXN0cyA9IHByb2JlX3JlcXVlc3RzOworCXBhcmFtcy0+cGFyYW1zLnR4X3JhdGUgPSBjcHVfdG9fbGUxNigxIDw8IDEpOyAvKiAyIE1icHMgKi8KKwlwYXJhbXMtPnBhcmFtcy50aWRfdHJpZ2dlciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NoYW5uZWxzOyBpKyspIHsKKwkJcGFyYW1zLT5jaGFubmVsc1tpXS5taW5fZHVyYXRpb24gPSBjcHVfdG9fbGUzMigzMDAwMCk7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0ubWF4X2R1cmF0aW9uID0gY3B1X3RvX2xlMzIoNjAwMDApOworCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKKwkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOworCQlwYXJhbXMtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IDA7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9IGkgKyAxOworCQltZW1zZXQocGFyYW1zLT5jaGFubmVsc1tpXS5wYWQsIDAsIDMpOworCX0KKworCWZvciAoaSA9IG51bV9jaGFubmVsczsgaSA8IFNDQU5fTUFYX05VTV9PRl9DSEFOTkVMUzsgaSsrKQorCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0sIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzKSk7CisKKwlpZiAobGVuICYmIHNzaWQpIHsKKwkJcGFyYW1zLT5wYXJhbXMuc3NpZF9sZW4gPSBsZW47CisJCW1lbWNweShwYXJhbXMtPnBhcmFtcy5zc2lkLCBzc2lkLCBsZW4pOworCX0gZWxzZSB7CisJCXBhcmFtcy0+cGFyYW1zLnNzaWRfbGVuID0gMDsKKwkJbWVtc2V0KHBhcmFtcy0+cGFyYW1zLnNzaWQsIDAsIDMyKTsKKwl9CisKKwlyZXQgPSB3bDEyNTFfYnVpbGRfcHJvYmVfcmVxKHdsLCBzc2lkLCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiUFJPQkUgcmVxdWVzdCB0ZW1wbGF0ZSBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCisJdHJpZ2dlciA9IGt6YWxsb2Moc2l6ZW9mKCp0cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmlnZ2VyKQorCQlnb3RvIG91dDsKKworCXRyaWdnZXItPnRpbWVvdXQgPSAwOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfVFJJR0dFUl9TQ0FOX1RPLCB0cmlnZ2VyLAorCQkJICAgICAgc2l6ZW9mKCp0cmlnZ2VyKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJ0cmlnZ2VyIHNjYW4gdG8gZmFpbGVkIGZvciBodyBzY2FuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI1MV9kdW1wKERFQlVHX1NDQU4sICJTQ0FOOiAiLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7CisKKwl3bC0+c2Nhbm5pbmcgPSB0cnVlOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfU0NBTiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOworCWlmIChyZXQgPCAwKQorCQl3bDEyNTFfZXJyb3IoIlNDQU4gZmFpbGVkIik7CisKKwl3bDEyNTFfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKworCWlmIChwYXJhbXMtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCXdsMTI1MV9lcnJvcigiVEVTVCBjb21tYW5kIGFuc3dlciBlcnJvcjogJWQiLAorCQkJICAgICBwYXJhbXMtPmhlYWRlci5zdGF0dXMpOworCQl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocGFyYW1zKTsKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBpbnQgd2wxMjUxX29wX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCWludCByZXQ7CisJdTggKnNzaWQgPSBOVUxMOworCXNpemVfdCBzc2lkX2xlbiA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBodyBzY2FuIik7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7CisJCXNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjUxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI1MV9od19zY2FuKGh3LT5wcml2LCBzc2lkLCBzc2lkX2xlbiwgMSwgMCwgMTMsIDMpOworCisJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI1MV9vcF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjUxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCAodTE2KSB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCXdsMTI1MV93YXJuaW5nKCJ3bDEyNTFfb3Bfc2V0X3J0c190aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CisKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKKwkJCQkgICAgICAgdTMyIGNoYW5nZWQpCit7CisJZW51bSB3bDEyNTFfY21kX3BzX21vZGUgbW9kZTsKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBza19idWZmICpiZWFjb247CisJaW50IHJldDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGJzcyBpbmZvIGNoYW5nZWQiKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgeworCQlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CisJCQl3bC0+YmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OworCQkJd2wtPmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOworCisJCQkvKiBGSVhNRTogY2FsbCBqb2luICovCisKKwkJCXdsLT5haWQgPSBic3NfY29uZi0+YWlkOworCisJCQlyZXQgPSB3bDEyNTFfYnVpbGRfcHNfcG9sbCh3bCwgd2wtPmFpZCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKworCQkJcmV0ID0gd2wxMjUxX2FjeF9haWQod2wsIHdsLT5haWQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisKKwkJCS8qIElmIHdlIHdhbnQgdG8gZ28gaW4gUFNNIGJ1dCB3ZSdyZSBub3QgdGhlcmUgeWV0ICovCisJCQlpZiAod2wtPnBzbV9yZXF1ZXN0ZWQgJiYgIXdsLT5wc20pIHsKKwkJCQltb2RlID0gU1RBVElPTl9QT1dFUl9TQVZFX01PREU7CisJCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBtb2RlKTsKKwkJCQlpZiAocmV0IDwgMCkKKwkJCQkJZ290byBvdXRfc2xlZXA7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB1c2UgZGVmYXVsdHMgd2hlbiBub3QgYXNzb2NpYXRlZCAqLworCQkJd2wtPmJlYWNvbl9pbnQgPSBXTDEyNTFfREVGQVVMVF9CRUFDT05fSU5UOworCQkJd2wtPmR0aW1fcGVyaW9kID0gV0wxMjUxX0RFRkFVTFRfRFRJTV9QRVJJT0Q7CisJCX0KKwl9CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgeworCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9zbG90KQorCQkJcmV0ID0gd2wxMjUxX2FjeF9zbG90KHdsLCBTTE9UX1RJTUVfU0hPUlQpOworCQllbHNlCisJCQlyZXQgPSB3bDEyNTFfYWN4X3Nsb3Qod2wsIFNMT1RfVElNRV9MT05HKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI1MV93YXJuaW5nKCJTZXQgc2xvdCB0aW1lIGZhaWxlZCAlZCIsIHJldCk7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFKSB7CisJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQorCQkJd2wxMjUxX2FjeF9zZXRfcHJlYW1ibGUod2wsIEFDWF9QUkVBTUJMRV9TSE9SVCk7CisJCWVsc2UKKwkJCXdsMTI1MV9hY3hfc2V0X3ByZWFtYmxlKHdsLCBBQ1hfUFJFQU1CTEVfTE9ORyk7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKKwkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QpCisJCQlyZXQgPSB3bDEyNTFfYWN4X2N0c19wcm90ZWN0KHdsLCBDVFNQUk9URUNUX0VOQUJMRSk7CisJCWVsc2UKKwkJCXJldCA9IHdsMTI1MV9hY3hfY3RzX3Byb3RlY3Qod2wsIENUU1BST1RFQ1RfRElTQUJMRSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNTFfd2FybmluZygiU2V0IGN0c3Byb3RlY3QgZmFpbGVkICVkIiwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgeworCQltZW1jcHkod2wtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKworCQlyZXQgPSB3bDEyNTFfYnVpbGRfbnVsbF9kYXRhKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlpZiAod2wtPmJzc190eXBlICE9IEJTU19UWVBFX0lCU1MpIHsKKwkJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5jaGFubmVsLAorCQkJCQkgIHdsLT5iZWFjb25faW50LCB3bC0+ZHRpbV9wZXJpb2QpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisJCQl3bDEyNTFfd2FybmluZygiU2V0IGN0c3Byb3RlY3QgZmFpbGVkICVkIiwgcmV0KTsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT04pIHsKKwkJYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CisJCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBiZWFjb24tPmRhdGEsCisJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1BST0JFX1JFU1AsIGJlYWNvbi0+ZGF0YSwKKwkJCQkJICAgICAgYmVhY29uLT5sZW4pOworCisJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCXJldCA9IHdsMTI1MV9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIHdsLT5iZWFjb25faW50LAorCQkJCSAgd2wtPmNoYW5uZWwsIHdsLT5kdGltX3BlcmlvZCk7CisKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgd2wxMjUxX3JhdGVzW10gPSB7CisJeyAuYml0cmF0ZSA9IDEwLAorCSAgLmh3X3ZhbHVlID0gMHgxLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxLCB9LAorCXsgLmJpdHJhdGUgPSAyMCwKKwkgIC5od192YWx1ZSA9IDB4MiwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MiwKKwkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDU1LAorCSAgLmh3X3ZhbHVlID0gMHg0LAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg0LAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gMTEwLAorCSAgLmh3X3ZhbHVlID0gMHgyMCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAsCisJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSA2MCwKKwkgIC5od192YWx1ZSA9IDB4OCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4OCwgfSwKKwl7IC5iaXRyYXRlID0gOTAsCisJICAuaHdfdmFsdWUgPSAweDEwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMCwgfSwKKwl7IC5iaXRyYXRlID0gMTIwLAorCSAgLmh3X3ZhbHVlID0gMHg0MCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4NDAsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwKKwkgIC5od192YWx1ZSA9IDB4ODAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwLCB9LAorCXsgLmJpdHJhdGUgPSAyNDAsCisJICAuaHdfdmFsdWUgPSAweDIwMCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4MjAwLCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsCisJIC5od192YWx1ZSA9IDB4NDAwLAorCSAuaHdfdmFsdWVfc2hvcnQgPSAweDQwMCwgfSwKKwl7IC5iaXRyYXRlID0gNDgwLAorCSAgLmh3X3ZhbHVlID0gMHg4MDAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDgwMCwgfSwKKwl7IC5iaXRyYXRlID0gNTQwLAorCSAgLmh3X3ZhbHVlID0gMHgxMDAwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgxMDAwLCB9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdsMTI1MV9jaGFubmVsc1tdID0geworCXsgLmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMn0sCisJeyAuaHdfdmFsdWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3fSwKKwl7IC5od192YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjJ9LAorCXsgLmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyN30sCisJeyAuaHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyfSwKKwl7IC5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0Mzd9LAorCXsgLmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0Mn0sCisJeyAuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3fSwKKwl7IC5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTJ9LAorCXsgLmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTd9LAorCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjJ9LAorCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0Njd9LAorCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzJ9LAorfTsKKworLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCB3bDEyNTFfYmFuZF8yZ2h6ID0geworCS5jaGFubmVscyA9IHdsMTI1MV9jaGFubmVscywKKwkubl9jaGFubmVscyA9IEFSUkFZX1NJWkUod2wxMjUxX2NoYW5uZWxzKSwKKwkuYml0cmF0ZXMgPSB3bDEyNTFfcmF0ZXMsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHdsMTI1MV9yYXRlcyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2wxMjUxX29wcyA9IHsKKwkuc3RhcnQgPSB3bDEyNTFfb3Bfc3RhcnQsCisJLnN0b3AgPSB3bDEyNTFfb3Bfc3RvcCwKKwkuYWRkX2ludGVyZmFjZSA9IHdsMTI1MV9vcF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gd2wxMjUxX29wX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZyA9IHdsMTI1MV9vcF9jb25maWcsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSB3bDEyNTFfb3BfY29uZmlndXJlX2ZpbHRlciwKKwkudHggPSB3bDEyNTFfb3BfdHgsCisJLnNldF9rZXkgPSB3bDEyNTFfb3Bfc2V0X2tleSwKKwkuaHdfc2NhbiA9IHdsMTI1MV9vcF9od19zY2FuLAorCS5ic3NfaW5mb19jaGFuZ2VkID0gd2wxMjUxX29wX2Jzc19pbmZvX2NoYW5nZWQsCisJLnNldF9ydHNfdGhyZXNob2xkID0gd2wxMjUxX29wX3NldF9ydHNfdGhyZXNob2xkLAorfTsKKworc3RhdGljIGludCB3bDEyNTFfcmVnaXN0ZXJfaHcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCWlmICh3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKKwkJcmV0dXJuIDA7CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUih3bC0+aHcsIHdsLT5tYWNfYWRkcik7CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcod2wtPmh3KTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoInVuYWJsZSB0byByZWdpc3RlciBtYWM4MDIxMSBodzogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXdsLT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gdHJ1ZTsKKworCXdsMTI1MV9ub3RpY2UoImxvYWRlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNTFfaW5pdF9pZWVlODAyMTEoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaW50IHJldDsKKworCS8qIFRoZSB0eCBkZXNjcmlwdG9yIGJ1ZmZlciBhbmQgdGhlIFRLSVAgc3BhY2UgKi8KKwl3bC0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gc2l6ZW9mKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MpCisJCSsgV0wxMjUxX1RLSVBfSVZfU1BBQ0U7CisKKwkvKiB1bml0IHVzICovCisJLyogRklYTUU6IGZpbmQgYSBwcm9wZXIgdmFsdWUgKi8KKwl3bC0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwMDsKKworCXdsLT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCUlFRUU4MDIxMV9IV19OT0lTRV9EQk07CisKKwl3bC0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTI1MV9iYW5kXzJnaHo7CisKKwlyZXQgPSB3bDEyNTFfcmVnaXN0ZXJfaHcod2wpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJd2wxMjUxX2RlYnVnZnNfaW5pdCh3bCk7CisJd2wxMjUxX25vdGljZSgiaW5pdGlhbGl6ZWQiKTsKKworCXJldCA9IDA7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod2wxMjUxX2luaXRfaWVlZTgwMjExKTsKKworc3RydWN0IGllZWU4MDIxMV9odyAqd2wxMjUxX2FsbG9jX2h3KHZvaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHdsMTI1MSAqd2w7CisJaW50IGk7CisJc3RhdGljIGNvbnN0IHU4IG5va2lhX291aVszXSA9IHsweDAwLCAweDFmLCAweGRmfTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqd2wpLCAmd2wxMjUxX29wcyk7CisJaWYgKCFodykgeworCQl3bDEyNTFfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJd2wgPSBody0+cHJpdjsKKwltZW1zZXQod2wsIDAsIHNpemVvZigqd2wpKTsKKworCXdsLT5odyA9IGh3OworCisJd2wtPmRhdGFfaW5fY291bnQgPSAwOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2wtPnR4X3F1ZXVlKTsKKworCUlOSVRfV09SSygmd2wtPmZpbHRlcl93b3JrLCB3bDEyNTFfZmlsdGVyX3dvcmspOworCXdsLT5jaGFubmVsID0gV0wxMjUxX0RFRkFVTFRfQ0hBTk5FTDsKKwl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwl3bC0+ZGVmYXVsdF9rZXkgPSAwOworCXdsLT5saXN0ZW5faW50ID0gMTsKKwl3bC0+cnhfY291bnRlciA9IDA7CisJd2wtPnJ4X2hhbmRsZWQgPSAwOworCXdsLT5yeF9jdXJyZW50X2J1ZmZlciA9IDA7CisJd2wtPnJ4X2xhc3RfaWQgPSAwOworCXdsLT5yeF9jb25maWcgPSBXTDEyNTFfREVGQVVMVF9SWF9DT05GSUc7CisJd2wtPnJ4X2ZpbHRlciA9IFdMMTI1MV9ERUZBVUxUX1JYX0ZJTFRFUjsKKwl3bC0+ZWxwID0gZmFsc2U7CisJd2wtPnBzbSA9IDA7CisJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKKwl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOworCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI1MV9ERUZBVUxUX1BPV0VSX0xFVkVMOworCXdsLT5iZWFjb25faW50ID0gV0wxMjUxX0RFRkFVTFRfQkVBQ09OX0lOVDsKKwl3bC0+ZHRpbV9wZXJpb2QgPSBXTDEyNTFfREVGQVVMVF9EVElNX1BFUklPRDsKKworCWZvciAoaSA9IDA7IGkgPCBGV19UWF9DTVBMVF9CTE9DS19TSVpFOyBpKyspCisJCXdsLT50eF9mcmFtZXNbaV0gPSBOVUxMOworCisJd2wtPm5leHRfdHhfY29tcGxldGUgPSAwOworCisJSU5JVF9XT1JLKCZ3bC0+aXJxX3dvcmssIHdsMTI1MV9pcnFfd29yayk7CisJSU5JVF9XT1JLKCZ3bC0+dHhfd29yaywgd2wxMjUxX3R4X3dvcmspOworCisJLyoKKwkgKiBJbiBjYXNlIG91ciBNQUMgYWRkcmVzcyBpcyBub3QgY29ycmVjdGx5IHNldCwKKwkgKiB3ZSB1c2UgYSByYW5kb20gYnV0IE5va2lhIE1BQy4KKwkgKi8KKwltZW1jcHkod2wtPm1hY19hZGRyLCBub2tpYV9vdWksIDMpOworCWdldF9yYW5kb21fYnl0ZXMod2wtPm1hY19hZGRyICsgMywgMyk7CisKKwl3bC0+c3RhdGUgPSBXTDEyNTFfU1RBVEVfT0ZGOworCW11dGV4X2luaXQoJndsLT5tdXRleCk7CisKKwl3bC0+dHhfbWdtdF9mcm1fcmF0ZSA9IERFRkFVTFRfSFdfR0VOX1RYX1JBVEU7CisJd2wtPnR4X21nbXRfZnJtX21vZCA9IERFRkFVTFRfSFdfR0VOX01PRFVMQVRJT05fVFlQRTsKKworCXdsLT5yeF9kZXNjcmlwdG9yID0ga21hbGxvYyhzaXplb2YoKndsLT5yeF9kZXNjcmlwdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+cnhfZGVzY3JpcHRvcikgeworCQl3bDEyNTFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJ4IGRlc2NyaXB0b3IiKTsKKwkJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXR1cm4gaHc7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bDEyNTFfYWxsb2NfaHcpOworCitpbnQgd2wxMjUxX2ZyZWVfaHcoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKKworCXdsMTI1MV9kZWJ1Z2ZzX2V4aXQod2wpOworCisJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwlrZnJlZSh3bC0+ZGF0YV9wYXRoKTsKKwlrZnJlZSh3bC0+ZncpOworCXdsLT5mdyA9IE5VTEw7CisJa2ZyZWUod2wtPm52cyk7CisJd2wtPm52cyA9IE5VTEw7CisKKwlrZnJlZSh3bC0+cnhfZGVzY3JpcHRvcik7CisJd2wtPnJ4X2Rlc2NyaXB0b3IgPSBOVUxMOworCisJaWVlZTgwMjExX2ZyZWVfaHcod2wtPmh3KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwod2wxMjUxX2ZyZWVfaHcpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIHdsMTI1MSBXaXJlbGVzIExBTiBEcml2ZXIgQ29yZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9uZXRsaW5rLmgKc2ltaWxhcml0eSBpbmRleCA3MyUKY29weSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9kZWJ1Z2ZzLmgKY29weSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX25ldGxpbmsuaAppbmRleCA1NjJjZGNiLi5lZTM2Njk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbmV0bGluay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgpAQCAtMjEsMTMgKzIxLDEwIEBACiAgKgogICovCiAKLSNpZm5kZWYgV0wxMlhYX0RFQlVHRlNfSAotI2RlZmluZSBXTDEyWFhfREVCVUdGU19ICisjaWZuZGVmIF9fV0wxMjUxX05FVExJTktfSF9fCisjZGVmaW5lIF9fV0wxMjUxX05FVExJTktfSF9fCiAKLSNpbmNsdWRlICJ3bDEyeHguaCIKK2ludCB3bDEyNTFfbmxfcmVnaXN0ZXIodm9pZCk7Cit2b2lkIHdsMTI1MV9ubF91bnJlZ2lzdGVyKHZvaWQpOwogCi1pbnQgd2wxMnh4X2RlYnVnZnNfaW5pdChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci12b2lkIHdsMTJ4eF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHdsMTJ4eCAqd2wpOwotdm9pZCB3bDEyeHhfZGVidWdmc19yZXNldChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci0KLSNlbmRpZiAvKiBXTDEyWFhfREVCVUdGU19IICovCisjZW5kaWYgLyogX19XTDEyNTFfTkVUTElOS19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNlMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5jCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9wcy5oIgorI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKKworI2RlZmluZSBXTDEyNTFfV0FLRVVQX1RJTUVPVVQgMjAwMAorCisvKiBSb3V0aW5lcyB0byB0b2dnbGUgc2xlZXAgbW9kZSB3aGlsZSBpbiBFTFAgKi8KK3ZvaWQgd2wxMjUxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlpZiAod2wtPmVscCB8fCAhd2wtPnBzbSkKKwkJcmV0dXJuOworCisJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgImNoaXAgdG8gZWxwIik7CisKKwl3bDEyNTFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1NMRUVQKTsKKworCXdsLT5lbHAgPSB0cnVlOworfQorCitpbnQgd2wxMjUxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBlbHBfcmVnOworCisJaWYgKCF3bC0+ZWxwKQorCQlyZXR1cm4gMDsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtpbmcgdXAgY2hpcCBmcm9tIGVscCIpOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFdMMTI1MV9XQUtFVVBfVElNRU9VVCk7CisKKwl3bDEyNTFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1dBS0VfVVApOworCisJZWxwX3JlZyA9IHdsMTI1MV9yZWFkMzIod2wsIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUik7CisKKwkvKgorCSAqIEZJWE1FOiB3ZSBzaG91bGQgd2FpdCBmb3IgaXJxIGZyb20gY2hpcCBidXQsIGFzIGEgdGVtcG9yYXJ5CisJICogc29sdXRpb24gdG8gc2ltcGxpZnkgbG9ja2luZywgbGV0J3MgcG9sbCBpbnN0ZWFkCisJICovCisJd2hpbGUgKCEoZWxwX3JlZyAmIEVMUENUUkxfV0xBTl9SRUFEWSkpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXdsMTI1MV9lcnJvcigiZWxwIHdha2V1cCB0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCQltc2xlZXAoMSk7CisJCWVscF9yZWcgPSB3bDEyNTFfcmVhZDMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIpOworCX0KKworCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtldXAgdGltZTogJXUgbXMiLAorCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcykgLQorCQkgICAgIChqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQpIC0gV0wxMjUxX1dBS0VVUF9USU1FT1VUKSk7CisKKwl3bC0+ZWxwID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNTFfcHNfc2V0X2VscChzdHJ1Y3Qgd2wxMjUxICp3bCwgYm9vbCBlbmFibGUpCit7CisJaW50IHJldDsKKworCWlmIChlbmFibGUpIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgInNsZWVwIGF1dGggcHNtL2VscCIpOworCisJCXJldCA9IHdsMTI1MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjUxX1BTTV9FTFApOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisJfSBlbHNlIHsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgInNsZWVwIGF1dGggY2FtIik7CisKKwkJLyoKKwkJICogV2hlbiB0aGUgdGFyZ2V0IGlzIGluIEVMUCwgd2UgY2FuIG9ubHkKKwkJICogYWNjZXNzIHRoZSBFTFAgY29udHJvbCByZWdpc3Rlci4gVGh1cywKKwkJICogd2UgaGF2ZSB0byB3YWtlIHRoZSB0YXJnZXQgdXAgYmVmb3JlCisJCSAqIGNoYW5naW5nIHRoZSBwb3dlciBhdXRob3JpemF0aW9uLgorCQkgKi8KKworCQl3bDEyNTFfcHNfZWxwX3dha2V1cCh3bCk7CisKKwkJcmV0ID0gd2wxMjUxX2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyNTFfUFNNX0NBTSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI1MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjUxICp3bCwgZW51bSB3bDEyNTFfY21kX3BzX21vZGUgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERToKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgImVudGVyaW5nIHBzbSIpOworCisJCXJldCA9IHdsMTI1MV9hY3hfd2FrZV91cF9jb25kaXRpb25zKHdsLAorCQkJCQkJICAgIFdBS0VfVVBfRVZFTlRfRFRJTV9CSVRNQVAsCisJCQkJCQkgICAgd2wtPmxpc3Rlbl9pbnQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gd2wxMjUxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB3bDEyNTFfcHNfc2V0X2VscCh3bCwgdHJ1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQl3bC0+cHNtID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX0FDVElWRV9NT0RFOgorCWRlZmF1bHQ6CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJsZWF2aW5nIHBzbSIpOworCQlyZXQgPSB3bDEyNTFfcHNfc2V0X2VscCh3bCwgZmFsc2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gd2wxMjUxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMod2wsCisJCQkJCQkgICAgV0FLRV9VUF9FVkVOVF9EVElNX0JJVE1BUCwKKwkJCQkJCSAgICB3bC0+bGlzdGVuX2ludCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZXQgPSB3bDEyNTFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJd2wtPnBzbSA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5oCnNpbWlsYXJpdHkgaW5kZXggNzIlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9wcy5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3BzLmgKaW5kZXggNWQ3YzUyNS4uZGIwMzZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5oCkBAIC0xLDggKzEsOCBAQAotI2lmbmRlZiBfX1dMMTJYWF9QU19IX18KLSNkZWZpbmUgX19XTDEyWFhfUFNfSF9fCisjaWZuZGVmIF9fV0wxMjUxX1BTX0hfXworI2RlZmluZSBfX1dMMTI1MV9QU19IX18KIAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KQEAgLTI1LDEyICsyNSwxMiBAQAogICoKICAqLwogCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0jaW5jbHVkZSAiYWN4LmgiCisjaW5jbHVkZSAid2wxMjUxLmgiCisjaW5jbHVkZSAid2wxMjUxX2FjeC5oIgogCi1pbnQgd2wxMnh4X3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyeHggKndsLCBlbnVtIGFjeF9wc19tb2RlIG1vZGUpOwotdm9pZCB3bDEyeHhfcHNfZWxwX3NsZWVwKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMnh4ICp3bCk7CitpbnQgd2wxMjUxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNTEgKndsLCBlbnVtIHdsMTI1MV9jbWRfcHNfbW9kZSBtb2RlKTsKK3ZvaWQgd2wxMjUxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjUxICp3bCk7CitpbnQgd2wxMjUxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI1MSAqd2wpOwogCiAKLSNlbmRpZiAvKiBfX1dMMTJYWF9QU19IX18gKi8KKyNlbmRpZiAvKiBfX1dMMTI1MV9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcmVnLmgKc2ltaWxhcml0eSBpbmRleCA4MSUKY29weSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaApjb3B5IHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcmVnLmgKaW5kZXggZTQyMTY0My4uMDZlMWJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcmVnLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgX19SRUdfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlICJ3bDEyeHguaCIKIAogI2RlZmluZSBSRUdJU1RFUlNfQkFTRSAweDAwMzAwMDAwCiAjZGVmaW5lIERSUFdfQkFTRSAgICAgIDB4MDAzMTAwMDAKQEAgLTQzLDcwICs0Miw2IEBACiAvKiBFTFAgV0xBTl9SRUFEWSBiaXQgKi8KICNkZWZpbmUgRUxQQ1RSTF9XTEFOX1JFQURZICAgICAgICAgIDB4MgogCi0vKgotICogSW50ZXJydXB0IHJlZ2lzdGVycy4KLSAqIDY0IGJpdCBpbnRlcnJ1cHQgc291cmNlcyByZWdpc3RlcnMgd3MgY2VkLgotICogc21lIGludGVydXB0cyB3ZXJlIHJlbW92ZWQgYW5kIG5ldyBvbmVzIHdlcmUgYWRkZWQuCi0gKiBPcmRlciB3YXMgY2hhbmdlZC4KLSAqLwotI2RlZmluZSBGSVFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDAwKQotI2RlZmluZSBGSVFfTUFTS19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDAwKQotI2RlZmluZSBGSVFfTUFTS19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDA0KQotI2RlZmluZSBGSVFfTUFTS19TRVQgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDA4KQotI2RlZmluZSBGSVFfTUFTS19TRVRfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDA4KQotI2RlZmluZSBGSVFfTUFTS19TRVRfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDBDKQotI2RlZmluZSBGSVFfTUFTS19DTFIgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDEwKQotI2RlZmluZSBGSVFfTUFTS19DTFJfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDEwKQotI2RlZmluZSBGSVFfTUFTS19DTFJfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDE0KQotI2RlZmluZSBJUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDE4KQotI2RlZmluZSBJUlFfTUFTS19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDE4KQotI2RlZmluZSBJUlFfTUFTS19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDFDKQotI2RlZmluZSBJUlFfTUFTS19TRVQgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDIwKQotI2RlZmluZSBJUlFfTUFTS19TRVRfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDIwKQotI2RlZmluZSBJUlFfTUFTS19TRVRfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDI0KQotI2RlZmluZSBJUlFfTUFTS19DTFIgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDI4KQotI2RlZmluZSBJUlFfTUFTS19DTFJfTCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDI4KQotI2RlZmluZSBJUlFfTUFTS19DTFJfSCAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDJDKQotI2RlZmluZSBFQ1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQ4KQotI2RlZmluZSBGSVFfU1RTX0wgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDRDKQotI2RlZmluZSBGSVFfU1RTX0ggICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDUwKQotI2RlZmluZSBJUlFfU1RTX0wgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDU0KQotI2RlZmluZSBJUlFfU1RTX0ggICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDU4KQotI2RlZmluZSBJTlRfU1RTX05EICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDY0KQotI2RlZmluZSBJTlRfU1RTX1JBV19MICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDY0KQotI2RlZmluZSBJTlRfU1RTX1JBV19IICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDY4KQotI2RlZmluZSBJTlRfU1RTX0NMUiAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEI0KQotI2RlZmluZSBJTlRfU1RTX0NMUl9MICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEI0KQotI2RlZmluZSBJTlRfU1RTX0NMUl9IICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEI4KQotI2RlZmluZSBJTlRfQUNLICAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDZDKQotI2RlZmluZSBJTlRfQUNLX0wgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDZDKQotI2RlZmluZSBJTlRfQUNLX0ggICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDcwKQotI2RlZmluZSBJTlRfVFJJRyAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc0KQotI2RlZmluZSBJTlRfVFJJR19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc0KQotI2RlZmluZSBJTlRfVFJJR19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc4KQotI2RlZmluZSBIT1NUX1NUU19MICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDVDKQotI2RlZmluZSBIT1NUX1NUU19IICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDYwKQotI2RlZmluZSBIT1NUX01BU0sgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDMwKQotI2RlZmluZSBIT1NUX01BU0tfTCAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDMwKQotI2RlZmluZSBIT1NUX01BU0tfSCAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDM0KQotI2RlZmluZSBIT1NUX01BU0tfU0VUICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDM4KQotI2RlZmluZSBIT1NUX01BU0tfU0VUX0wgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDM4KQotI2RlZmluZSBIT1NUX01BU0tfU0VUX0ggICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDNDKQotI2RlZmluZSBIT1NUX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQwKQotI2RlZmluZSBIT1NUX01BU0tfQ0xSX0wgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQwKQotI2RlZmluZSBIT1NUX01BU0tfQ0xSX0ggICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDQ0KQotCi0vKiBIb3N0IEludGVycnVwdHMqLwotI2RlZmluZSBISU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDk0KQotI2RlZmluZSBISU5UX01BU0tfU0VUICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDk4KQotI2RlZmluZSBISU5UX01BU0tfQ0xSICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDlDKQotI2RlZmluZSBISU5UX1NUU19ORF9NQVNLRUQgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEEwKQotLyoxMTUwIHNwZWMgY2FsbHMgdGhpcyBISU5UX1NUU19SQVcqLwotI2RlZmluZSBISU5UX1NUU19ORAkJICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRCMCkKLSNkZWZpbmUgSElOVF9TVFNfQ0xSICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBNCkKLSNkZWZpbmUgSElOVF9BQ0sgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBOCkKLSNkZWZpbmUgSElOVF9UUklHICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBQykKLQogLyogRGV2aWNlIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzKi8KICNkZWZpbmUgU09SX0NGRyAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDgwMCkKICNkZWZpbmUgRUNQVV9DVFJMICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDgwNCkKQEAgLTMxMCw4ICsyNDUsOCBAQAogCUFDWF9SRUdfVEFCTEVfTEVOCiB9OwogCi0jZGVmaW5lIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQgICBCSVQoMSkKLSNkZWZpbmUgQUNYX1JFR19FRVBST01fU1RBUlRfQklUIEJJVCgxKQorI2RlZmluZSBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUICAgQklUKDApCisjZGVmaW5lIEFDWF9SRUdfRUVQUk9NX1NUQVJUX0JJVCBCSVQoMCkKIAogLyogQ29tbWFuZC9JbmZvcm1hdGlvbiBNYWlsYm94IFBvaW50ZXJzICovCiAKQEAgLTQyMSwxNiArMzU2LDYgQEAKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFBoeSByZWdzCi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotI2RlZmluZSBBQ1hfUEhZX0FERFJfUkVHICAgICAgICAgICAgICAgIFNCQl9BRERSCi0jZGVmaW5lIEFDWF9QSFlfREFUQV9SRUcgICAgICAgICAgICAgICAgU0JCX0RBVEEKLSNkZWZpbmUgQUNYX1BIWV9DVFJMX1JFRyAgICAgICAgICAgICAgICBTQkJfQ1RMCi0jZGVmaW5lIEFDWF9QSFlfUkVHX1dSX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMXVsCi0jZGVmaW5lIEFDWF9QSFlfUkVHX1JEX01BU0sgICAgICAgICAgICAgMHgwMDAwMDAwMnVsCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIEVFUFJPTSBSZWFkL1dyaXRlIFJlcXVlc3QgMzJiaXQgUlcKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAxIEVFX1JFQUQgLSBFRVBST00gUmVhZCBSZXF1ZXN0IDEgLSBTZXR0aW5nIHRoaXMgYml0CkBAIC00OTksMjggKzQyNCw2IEBACiAjZGVmaW5lIEFDWF9DT05UX1dJTkRfTUlOX01BU0sgICAweDAwMDAwMDdmCiAjZGVmaW5lIEFDWF9DT05UX1dJTkRfTUFYICAgICAgICAweDAzZmYwMDAwCiAKLS8qCi0gKiBJbmRpcmVjdCBzbGF2ZSByZWdpc3Rlci9tZW1vcnkgcmVnaXN0ZXJzCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNkZWZpbmUgSFdfU0xBVkVfUkVHX0FERFJfUkVHCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEhXX1NMQVZFX1JFR19EQVRBX1JFRwkJMHgwMDAwMDAwOAotI2RlZmluZSBIV19TTEFWRV9SRUdfQ1RSTF9SRUcJCTB4MDAwMDAwMGMKLQotI2RlZmluZSBTTEFWRV9BVVRPX0lOQwkJCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNMQVZFX05PX0FVVE9fSU5DCQkJMHgwMDAwMDAwMAotI2RlZmluZSBTTEFWRV9IT1NUX0xJVFRMRV9FTkRJQU4JMHgwMDAwMDAwMAotCi0jZGVmaW5lIEhXX1NMQVZFX01FTV9BRERSX1JFRwkJU0xWX01FTV9BRERSCi0jZGVmaW5lIEhXX1NMQVZFX01FTV9EQVRBX1JFRwkJU0xWX01FTV9EQVRBCi0jZGVmaW5lIEhXX1NMQVZFX01FTV9DVFJMX1JFRwkJU0xWX01FTV9DVEwKLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0VORElBTl9SRUcJCVNMVl9FTkRfQ1RMCi0KLSNkZWZpbmUgSFdfRlVOQ19FVkVOVF9JTlRfRU4JCTB4ODAwMAotI2RlZmluZSBIV19GVU5DX0VWRU5UX01BU0tfUkVHCQkweDAwMDAwMDM0Ci0KLSNkZWZpbmUgQUNYX01BQ19USU1FU1RBTVBfUkVHCShNQUNfVElNRVNUQU1QKQotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEhJX0NGRyBJbnRlcmZhY2UgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBWYWx1ZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NzksMTAgKzU4Miw2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2RlZmluZSBUTkVUVzEyNTFfQ0hJUF9JRF9QRzFfMCAgICAgICAgIDB4MDcwMTAxMDEKLSNkZWZpbmUgVE5FVFcxMjUxX0NISVBfSURfUEcxXzEgICAgICAgICAweDA3MDIwMTAxCi0jZGVmaW5lIFRORVRXMTI1MV9DSElQX0lEX1BHMV8yCSAgICAgICAgMHgwNzAzMDEwMQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgICAgSW50ZXJydXB0IFRyaWdnZXIgUmVnaXN0ZXIgKEhvc3QgLT4gV2lMaW5rKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMKc2ltaWxhcml0eSBpbmRleCA2OCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguYwppbmRleCA5ODFlYTI1Li4xN2M1NGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgpAQCAtMjUsMTMgKzI1LDE1IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKLSNpbmNsdWRlICJ3bDEyeHguaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJyeC5oIgorI2luY2x1ZGUgIndsMTI1MS5oIgorI2luY2x1ZGUgIndsMTI1MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNTFfaW8uaCIKKyNpbmNsdWRlICJ3bDEyNTFfcnguaCIKKyNpbmNsdWRlICJ3bDEyNTFfY21kLmgiCisjaW5jbHVkZSAid2wxMjUxX2FjeC5oIgogCi1zdGF0aWMgdm9pZCB3bDEyeHhfcnhfaGVhZGVyKHN0cnVjdCB3bDEyeHggKndsLAotCQkJICAgICBzdHJ1Y3Qgd2wxMnh4X3J4X2Rlc2NyaXB0b3IgKmRlc2MpCitzdGF0aWMgdm9pZCB3bDEyNTFfcnhfaGVhZGVyKHN0cnVjdCB3bDEyNTEgKndsLAorCQkJICAgICBzdHJ1Y3Qgd2wxMjUxX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCiB7CiAJdTMyIHJ4X3BhY2tldF9yaW5nX2FkZHI7CiAKQEAgLTM5LDE1ICs0MSwxNyBAQAogCWlmICh3bC0+cnhfY3VycmVudF9idWZmZXIpCiAJCXJ4X3BhY2tldF9yaW5nX2FkZHIgKz0gd2wtPmRhdGFfcGF0aC0+cnhfcGFja2V0X3JpbmdfY2h1bmtfc2l6ZTsKIAotCXdsMTJ4eF9zcGlfbWVtX3JlYWQod2wsIHJ4X3BhY2tldF9yaW5nX2FkZHIsIGRlc2MsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcnhfZGVzY3JpcHRvcikpOworCXdsMTI1MV9tZW1fcmVhZCh3bCwgcnhfcGFja2V0X3JpbmdfYWRkciwgZGVzYywgc2l6ZW9mKCpkZXNjKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdsMTJ4eF9yeF9zdGF0dXMoc3RydWN0IHdsMTJ4eCAqd2wsCi0JCQkgICAgIHN0cnVjdCB3bDEyeHhfcnhfZGVzY3JpcHRvciAqZGVzYywKK3N0YXRpYyB2b2lkIHdsMTI1MV9yeF9zdGF0dXMoc3RydWN0IHdsMTI1MSAqd2wsCisJCQkgICAgIHN0cnVjdCB3bDEyNTFfcnhfZGVzY3JpcHRvciAqZGVzYywKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKIAkJCSAgICAgdTggYmVhY29uKQogeworCXU2NCBtYWN0aW1lOworCWludCByZXQ7CisKIAltZW1zZXQoc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTsKIAogCXN0YXR1cy0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CkBAIC02MiwzMiArNjYsMTQgQEAKIAkgKiB0aGlzIG9uZSBtdXN0IGJlIGF0b21pYywgd2hpbGUgb3VyIFNQSSByb3V0aW5lcyBjYW4gc2xlZXAuCiAJICovCiAJaWYgKCh3bC0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfSUJTUykgJiYgYmVhY29uKSB7Ci0JCXU2NCBtYWN0aW1lOwotCQlpbnQgcmV0OwotCQlzdHJ1Y3Qgd2wxMnh4X2NvbW1hbmQgY21kOwotCQlzdHJ1Y3QgYWN4X3RzZl9pbmZvICp0c2ZfaW5mbzsKLQotCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwotCi0JCXJldCA9IHdsMTJ4eF9jbWRfaW50ZXJyb2dhdGUod2wsIEFDWF9UU0ZfSU5GTywKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IGFjeF90c2ZfaW5mbyksCi0JCQkJCSAgICAgJmNtZCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl3bDEyeHhfd2FybmluZygiQUNYX0ZXX1JFViBpbnRlcnJvZ2F0ZSBmYWlsZWQiKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCXRzZl9pbmZvID0gKHN0cnVjdCBhY3hfdHNmX2luZm8gKikmKGNtZC5wYXJhbWV0ZXJzKTsKLQotCQltYWN0aW1lID0gdHNmX2luZm8tPmN1cnJlbnRfdHNmX2xzYiB8Ci0JCQkodHNmX2luZm8tPmN1cnJlbnRfdHNmX21zYiA8PCAzMSk7Ci0KLQkJc3RhdHVzLT5tYWN0aW1lID0gbWFjdGltZTsKKwkJcmV0ID0gd2wxMjUxX2FjeF90c2ZfaW5mbyh3bCwgJm1hY3RpbWUpOworCQlpZiAocmV0ID09IDApCisJCQlzdGF0dXMtPm1hY3RpbWUgPSBtYWN0aW1lOwogCX0KIAogCXN0YXR1cy0+c2lnbmFsID0gZGVzYy0+cnNzaTsKLQlzdGF0dXMtPnF1YWwgPSAoZGVzYy0+cnNzaSAtIFdMMTJYWF9SWF9NSU5fUlNTSSkgKiAxMDAgLwotCQkoV0wxMlhYX1JYX01BWF9SU1NJIC0gV0wxMlhYX1JYX01JTl9SU1NJKTsKKwlzdGF0dXMtPnF1YWwgPSAoZGVzYy0+cnNzaSAtIFdMMTI1MV9SWF9NSU5fUlNTSSkgKiAxMDAgLworCQkoV0wxMjUxX1JYX01BWF9SU1NJIC0gV0wxMjUxX1JYX01JTl9SU1NJKTsKIAlzdGF0dXMtPnF1YWwgPSBtaW4oc3RhdHVzLT5xdWFsLCAxMDApOwogCXN0YXR1cy0+cXVhbCA9IG1heChzdGF0dXMtPnF1YWwsIDApOwogCkBAIC0xMTgsOCArMTA0LDggQEAKIAkvKiBGSVhNRTogc2V0IHN0YXR1cy0+cmF0ZV9pZHggKi8KIH0KIAotc3RhdGljIHZvaWQgd2wxMnh4X3J4X2JvZHkoc3RydWN0IHdsMTJ4eCAqd2wsCi0JCQkgICBzdHJ1Y3Qgd2wxMnh4X3J4X2Rlc2NyaXB0b3IgKmRlc2MpCitzdGF0aWMgdm9pZCB3bDEyNTFfcnhfYm9keShzdHJ1Y3Qgd2wxMjUxICp3bCwKKwkJCSAgIHN0cnVjdCB3bDEyNTFfcnhfZGVzY3JpcHRvciAqZGVzYykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXR1czsKQEAgLTEyNywxMiArMTEzLDEyIEBACiAJdTE2IGxlbmd0aCwgKmZjOwogCXUzMiBjdXJyX2lkLCBsYXN0X2lkX2luYywgcnhfcGFja2V0X3JpbmdfYWRkcjsKIAotCWxlbmd0aCA9IFdMMTJYWF9SWF9BTElHTihkZXNjLT5sZW5ndGggIC0gUExDUF9IRUFERVJfTEVOR1RIKTsKKwlsZW5ndGggPSBXTDEyNTFfUlhfQUxJR04oZGVzYy0+bGVuZ3RoICAtIFBMQ1BfSEVBREVSX0xFTkdUSCk7CiAJY3Vycl9pZCA9IChkZXNjLT5mbGFncyAmIFJYX0RFU0NfU0VRTlVNX01BU0spID4+IFJYX0RFU0NfUEFDS0VUSURfU0hJRlQ7CiAJbGFzdF9pZF9pbmMgPSAod2wtPnJ4X2xhc3RfaWQgKyAxKSAlIChSWF9NQVhfUEFDS0VUX0lEICsgMSk7CiAKIAlpZiAobGFzdF9pZF9pbmMgIT0gY3Vycl9pZCkgewotCQl3bDEyeHhfd2FybmluZygiY3VyciBJRDolZCwgbGFzdCBJRCBpbmM6JWQiLAorCQl3bDEyNTFfd2FybmluZygiY3VyciBJRDolZCwgbGFzdCBJRCBpbmM6JWQiLAogCQkJICAgICAgIGN1cnJfaWQsIGxhc3RfaWRfaW5jKTsKIAkJd2wtPnJ4X2xhc3RfaWQgPSBjdXJyX2lkOwogCX0gZWxzZSB7CkBAIC0xNDAsMTggKzEyNiwxOCBAQAogCX0KIAogCXJ4X3BhY2tldF9yaW5nX2FkZHIgPSB3bC0+ZGF0YV9wYXRoLT5yeF9wYWNrZXRfcmluZ19hZGRyICsKLQkJc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcnhfZGVzY3JpcHRvcikgKyAyMDsKKwkJc2l6ZW9mKHN0cnVjdCB3bDEyNTFfcnhfZGVzY3JpcHRvcikgKyAyMDsKIAlpZiAod2wtPnJ4X2N1cnJlbnRfYnVmZmVyKQogCQlyeF9wYWNrZXRfcmluZ19hZGRyICs9IHdsLT5kYXRhX3BhdGgtPnJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbmd0aCk7CiAJaWYgKCFza2IpIHsKLQkJd2wxMnh4X2Vycm9yKCJDb3VsZG4ndCBhbGxvY2F0ZSBSWCBmcmFtZSIpOworCQl3bDEyNTFfZXJyb3IoIkNvdWxkbid0IGFsbG9jYXRlIFJYIGZyYW1lIik7CiAJCXJldHVybjsKIAl9CiAKIAlyeF9idWZmZXIgPSBza2JfcHV0KHNrYiwgbGVuZ3RoKTsKLQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCByeF9wYWNrZXRfcmluZ19hZGRyLCByeF9idWZmZXIsIGxlbmd0aCk7CisJd2wxMjUxX21lbV9yZWFkKHdsLCByeF9wYWNrZXRfcmluZ19hZGRyLCByeF9idWZmZXIsIGxlbmd0aCk7CiAKIAkvKiBUaGUgYWN0dWFsIGxlbmdodCBkb2Vzbid0IGluY2x1ZGUgdGhlIHRhcmdldCdzIGFsaWdubWVudCAqLwogCXNrYi0+bGVuID0gZGVzYy0+bGVuZ3RoICAtIFBMQ1BfSEVBREVSX0xFTkdUSDsKQEAgLTE2MSwxNSArMTQ3LDE2IEBACiAJaWYgKCgqZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKIAkJYmVhY29uID0gMTsKIAotCXdsMTJ4eF9yeF9zdGF0dXMod2wsIGRlc2MsICZzdGF0dXMsIGJlYWNvbik7CisJd2wxMjUxX3J4X3N0YXR1cyh3bCwgZGVzYywgJnN0YXR1cywgYmVhY29uKTsKIAotCXdsMTJ4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IHNrYiAweCVwOiAlZCBCICVzIiwgc2tiLCBza2ItPmxlbiwKKwl3bDEyNTFfZGVidWcoREVCVUdfUlgsICJyeCBza2IgMHglcDogJWQgQiAlcyIsIHNrYiwgc2tiLT5sZW4sCiAJCSAgICAgYmVhY29uID8gImJlYWNvbiIgOiAiIik7CiAKLQlpZWVlODAyMTFfcngod2wtPmh3LCBza2IsICZzdGF0dXMpOworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCWllZWU4MDIxMV9yeCh3bC0+aHcsIHNrYik7CiB9CiAKLXN0YXRpYyB2b2lkIHdsMTJ4eF9yeF9hY2soc3RydWN0IHdsMTJ4eCAqd2wpCitzdGF0aWMgdm9pZCB3bDEyNTFfcnhfYWNrKHN0cnVjdCB3bDEyNTEgKndsKQogewogCXUzMiBkYXRhLCBhZGRyOwogCkBAIC0xODEsMjggKzE2OCwzMCBAQAogCQlkYXRhID0gSU5UUl9UUklHX1JYX1BST0MwOwogCX0KIAotCXdsMTJ4eF9yZWdfd3JpdGUzMih3bCwgYWRkciwgZGF0YSk7CisJd2wxMjUxX3JlZ193cml0ZTMyKHdsLCBhZGRyLCBkYXRhKTsKIAogCS8qIFRvZ2dsZSBidWZmZXIgcmluZyAqLwogCXdsLT5yeF9jdXJyZW50X2J1ZmZlciA9ICF3bC0+cnhfY3VycmVudF9idWZmZXI7CiB9CiAKIAotdm9pZCB3bDEyeHhfcngoc3RydWN0IHdsMTJ4eCAqd2wpCit2b2lkIHdsMTI1MV9yeChzdHJ1Y3Qgd2wxMjUxICp3bCkKIHsKLQlzdHJ1Y3Qgd2wxMnh4X3J4X2Rlc2NyaXB0b3IgcnhfZGVzYzsKKwlzdHJ1Y3Qgd2wxMjUxX3J4X2Rlc2NyaXB0b3IgKnJ4X2Rlc2M7CiAKLQlpZiAod2wtPnN0YXRlICE9IFdMMTJYWF9TVEFURV9PTikKKwlpZiAod2wtPnN0YXRlICE9IFdMMTI1MV9TVEFURV9PTikKIAkJcmV0dXJuOwogCisJcnhfZGVzYyA9IHdsLT5yeF9kZXNjcmlwdG9yOworCiAJLyogV2UgZmlyc3QgcmVhZCB0aGUgZnJhbWUncyBoZWFkZXIgKi8KLQl3bDEyeHhfcnhfaGVhZGVyKHdsLCAmcnhfZGVzYyk7CisJd2wxMjUxX3J4X2hlYWRlcih3bCwgcnhfZGVzYyk7CiAKIAkvKiBOb3cgd2UgY2FuIHJlYWQgdGhlIGJvZHkgKi8KLQl3bDEyeHhfcnhfYm9keSh3bCwgJnJ4X2Rlc2MpOworCXdsMTI1MV9yeF9ib2R5KHdsLCByeF9kZXNjKTsKIAogCS8qIEZpbmFsbHksIHdlIG5lZWQgdG8gQUNLIHRoZSBSWCAqLwotCXdsMTJ4eF9yeF9hY2sod2wpOworCXdsMTI1MV9yeF9hY2sod2wpOwogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmgKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3J4LmgKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguaAppbmRleCA4YTIzZmRlLi41NjNhM2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcnguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgpAQCAtMjIsMTEgKzIyLDEzIEBACiAgKgogICovCiAKLSNpZm5kZWYgX19XTDEyWFhfUlhfSF9fCi0jZGVmaW5lIF9fV0wxMlhYX1JYX0hfXworI2lmbmRlZiBfX1dMMTI1MV9SWF9IX18KKyNkZWZpbmUgX19XTDEyNTFfUlhfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAorI2luY2x1ZGUgIndsMTI1MS5oIgorCiAvKgogICogUlggUEFUSAogICoKQEAgLTQzLDEyICs0NSwxMiBAQAogICogNCkgVGhlIHRhcmdldCBwcmVwYXJlcyB0aGUgbmV4dCBSWCBwYWNrZXQuCiAgKi8KIAotI2RlZmluZSBXTDEyWFhfUlhfTUFYX1JTU0kgLTMwCi0jZGVmaW5lIFdMMTJYWF9SWF9NSU5fUlNTSSAtOTUKKyNkZWZpbmUgV0wxMjUxX1JYX01BWF9SU1NJIC0zMAorI2RlZmluZSBXTDEyNTFfUlhfTUlOX1JTU0kgLTk1CiAKLSNkZWZpbmUgV0wxMlhYX1JYX0FMSUdOX1RPIDQKLSNkZWZpbmUgV0wxMlhYX1JYX0FMSUdOKGxlbikgKCgobGVuKSArIFdMMTJYWF9SWF9BTElHTl9UTyAtIDEpICYgXAotCQkJICAgICB+KFdMMTJYWF9SWF9BTElHTl9UTyAtIDEpKQorI2RlZmluZSBXTDEyNTFfUlhfQUxJR05fVE8gNAorI2RlZmluZSBXTDEyNTFfUlhfQUxJR04obGVuKSAoKChsZW4pICsgV0wxMjUxX1JYX0FMSUdOX1RPIC0gMSkgJiBcCisJCQkgICAgIH4oV0wxMjUxX1JYX0FMSUdOX1RPIC0gMSkpCiAKICNkZWZpbmUgU0hPUlRfUFJFQU1CTEVfQklUICAgQklUKDApCiAjZGVmaW5lIE9GRE1fUkFURV9CSVQgICAgICAgIEJJVCg2KQpAQCAtNzIsNyArNzQsNyBAQAogI2RlZmluZQlSWF9ERVNDX01JQ19GQUlMCSAgMHgyMDAwCiAjZGVmaW5lCVJYX0RFU0NfREVDUllQVF9GQUlMCSAgMHg0MDAwCiAKLXN0cnVjdCB3bDEyeHhfcnhfZGVzY3JpcHRvciB7CitzdHJ1Y3Qgd2wxMjUxX3J4X2Rlc2NyaXB0b3IgewogCXUzMiB0aW1lc3RhbXA7IC8qIEluIG1pY3Jvc2Vjb25kcyAqLwogCXUxNiBsZW5ndGg7IC8qIFBheWxvZCBsZW5ndGgsIGluY2x1ZGluZyBoZWFkZXJzICovCiAJdTE2IGZsYWdzOwpAQCAtODYsNyArODgsNyBAQAogCXU4IHR5cGU7CiAKIAkvKgotCSAqIFJlY2V2aWVkIFJhdGU6CisJICogUmVjZWl2ZWQgUmF0ZToKIAkgKiAweDBBIC0gMU1CUFMKIAkgKiAweDE0IC0gMk1CUFMKIAkgKiAweDM3IC0gNV81TUJQUwpAQCAtMTE3LDYgKzExOSw2IEBACiAJdTggc25yOyAvKiBpbiBkQiAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXZvaWQgd2wxMnh4X3J4KHN0cnVjdCB3bDEyeHggKndsKTsKK3ZvaWQgd2wxMjUxX3J4KHN0cnVjdCB3bDEyNTEgKndsKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc2Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MjNmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NkaW8uYwpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIHdsMTJ4eCBTRElPIHJvdXRpbmVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQm9iIENvcGVsYW5kIChtZUBib2Jjb3BlbGFuZC5jb20pCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAid2wxMjUxLmgiCisjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorI2luY2x1ZGUgIndsMTI1MV9wcy5oIgorI2luY2x1ZGUgIndsMTI1MV9pby5oIgorI2luY2x1ZGUgIndsMTI1MV90eC5oIgorI2luY2x1ZGUgIndsMTI1MV9kZWJ1Z2ZzLmgiCisKKyNpZm5kZWYgU0RJT19WRU5ET1JfSURfVEkKKyNkZWZpbmUgU0RJT19WRU5ET1JfSURfVEkJCTB4MTA0YworI2VuZGlmCisKKyNpZm5kZWYgU0RJT19ERVZJQ0VfSURfVElfV0wxMjUxCisjZGVmaW5lIFNESU9fREVWSUNFX0lEX1RJX1dMMTI1MQkweDkwNjYKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHNkaW9fZnVuYyAqd2xfdG9fZnVuYyhzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlyZXR1cm4gd2wtPmlmX3ByaXY7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9zZGlvX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKKworCXdsMTI1MV9kZWJ1ZyhERUJVR19JUlEsICJJUlEiKTsKKworCS8qIEZJWE1FIHNob3VsZCBiZSBzeW5jaHJvbm91cyBmb3Igc2RpbyAqLworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT5pcnFfd29yayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgd2wxMjUxX2RldmljZXNbXSA9IHsKKwl7IFNESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX1RJLCBTRElPX0RFVklDRV9JRF9USV9XTDEyNTEpIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNkaW8sIHdsMTI1MV9kZXZpY2VzKTsKKworCit2b2lkIHdsMTI1MV9zZGlvX3JlYWQoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJcmV0ID0gc2Rpb19tZW1jcHlfZnJvbWlvKGZ1bmMsIGJ1ZiwgYWRkciwgbGVuKTsKKwlpZiAocmV0KQorCQl3bDEyNTFfZXJyb3IoInNkaW8gcmVhZCBmYWlsZWQgKCVkKSIsIHJldCk7CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Cit9CisKK3ZvaWQgd2wxMjUxX3NkaW9fd3JpdGUoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhmdW5jLCBhZGRyLCBidWYsIGxlbik7CisJaWYgKHJldCkKKwkJd2wxMjUxX2Vycm9yKCJzZGlvIHdyaXRlIGZhaWxlZCAoJWQpIiwgcmV0KTsKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKK30KKwordm9pZCB3bDEyNTFfc2Rpb19yZXNldChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NkaW9fZW5hYmxlX2lycShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwlzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jID0gd2xfdG9fZnVuYyh3bCk7CisKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJc2Rpb19jbGFpbV9pcnEoZnVuYywgd2wxMjUxX3NkaW9faW50ZXJydXB0KTsKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NkaW9fZGlzYWJsZV9pcnEoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJc3RydWN0IHNkaW9fZnVuYyAqZnVuYyA9IHdsX3RvX2Z1bmMod2wpOworCisJc2Rpb19jbGFpbV9ob3N0KGZ1bmMpOworCXNkaW9fcmVsZWFzZV9pcnEoZnVuYyk7CisJc2Rpb19yZWxlYXNlX2hvc3QoZnVuYyk7Cit9CisKK3ZvaWQgd2wxMjUxX3NkaW9fc2V0X3Bvd2VyKGJvb2wgZW5hYmxlKQoreworfQorCitzdHJ1Y3Qgd2wxMjUxX2lmX29wZXJhdGlvbnMgd2wxMjUxX3NkaW9fb3BzID0geworCS5yZWFkID0gd2wxMjUxX3NkaW9fcmVhZCwKKwkud3JpdGUgPSB3bDEyNTFfc2Rpb193cml0ZSwKKwkucmVzZXQgPSB3bDEyNTFfc2Rpb19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHdsMTI1MV9zZGlvX2VuYWJsZV9pcnEsCisJLmRpc2FibGVfaXJxID0gd2wxMjUxX3NkaW9fZGlzYWJsZV9pcnEsCit9OworCitpbnQgd2wxMjUxX3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3bDEyNTEgKndsOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCisJaHcgPSB3bDEyNTFfYWxsb2NfaHcoKTsKKwlpZiAoSVNfRVJSKGh3KSkKKwkJcmV0dXJuIFBUUl9FUlIoaHcpOworCisJd2wgPSBody0+cHJpdjsKKworCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKKwlyZXQgPSBzZGlvX2VuYWJsZV9mdW5jKGZ1bmMpOworCWlmIChyZXQpCisJCWdvdG8gcmVsZWFzZTsKKworCXNkaW9fc2V0X2Jsb2NrX3NpemUoZnVuYywgNTEyKTsKKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmZnVuYy0+ZGV2KTsKKwl3bC0+aWZfcHJpdiA9IGZ1bmM7CisJd2wtPmlmX29wcyA9ICZ3bDEyNTFfc2Rpb19vcHM7CisJd2wtPnNldF9wb3dlciA9IHdsMTI1MV9zZGlvX3NldF9wb3dlcjsKKworCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCXJldCA9IHdsMTI1MV9pbml0X2llZWU4MDIxMSh3bCk7CisJaWYgKHJldCkKKwkJZ290byBkaXNhYmxlOworCisJc2Rpb19zZXRfZHJ2ZGF0YShmdW5jLCB3bCk7CisJcmV0dXJuIHJldDsKKworZGlzYWJsZToKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJc2Rpb19kaXNhYmxlX2Z1bmMoZnVuYyk7CityZWxlYXNlOgorCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB3bDEyNTFfc2Rpb19yZW1vdmUoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CisKKwl3bDEyNTFfZnJlZV9odyh3bCk7CisKKwlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CisJc2Rpb19yZWxlYXNlX2lycShmdW5jKTsKKwlzZGlvX2Rpc2FibGVfZnVuYyhmdW5jKTsKKwlzZGlvX3JlbGVhc2VfaG9zdChmdW5jKTsKK30KKworc3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciB3bDEyNTFfc2Rpb19kcml2ZXIgPSB7CisJLm5hbWUJCT0gIndsMTI1MV9zZGlvIiwKKwkuaWRfdGFibGUJPSB3bDEyNTFfZGV2aWNlcywKKwkucHJvYmUJCT0gd2wxMjUxX3NkaW9fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3bDEyNTFfc2Rpb19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2wxMjUxX3NkaW9faW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBzZGlvX3JlZ2lzdGVyX2RyaXZlcigmd2wxMjUxX3NkaW9fZHJpdmVyKTsKKwlpZiAoZXJyKQorCQl3bDEyNTFfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBzZGlvIGRyaXZlcjogJWQiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bDEyNTFfc2Rpb19leGl0KHZvaWQpCit7CisJc2Rpb191bnJlZ2lzdGVyX2RyaXZlcigmd2wxMjUxX3NkaW9fZHJpdmVyKTsKKwl3bDEyNTFfbm90aWNlKCJ1bmxvYWRlZCIpOworfQorCittb2R1bGVfaW5pdCh3bDEyNTFfc2Rpb19pbml0KTsKK21vZHVsZV9leGl0KHdsMTI1MV9zZGlvX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZWZmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NwaS5jCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvd2wxMnh4Lmg+CisKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjUxX3NwaS5oIgorCitzdGF0aWMgaXJxcmV0dXJuX3Qgd2wxMjUxX2lycShpbnQgaXJxLCB2b2lkICpjb29raWUpCit7CisJc3RydWN0IHdsMTI1MSAqd2w7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfSVJRLCAiSVJRIik7CisKKwl3bCA9IGNvb2tpZTsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT5pcnFfd29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RldmljZSAqd2xfdG9fc3BpKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXJldHVybiB3bC0+aWZfcHJpdjsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NwaV9yZXNldChzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl1OCAqY21kOworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKworCWNtZCA9IGt6YWxsb2MoV1NQSV9JTklUX0NNRF9MRU4sIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXdsMTI1MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIGNtZCBmb3Igc3BpIHJlc2V0Iik7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisKKwltZW1zZXQoY21kLCAweGZmLCBXU1BJX0lOSVRfQ01EX0xFTik7CisKKwl0LnR4X2J1ZiA9IGNtZDsKKwl0LmxlbiA9IFdTUElfSU5JVF9DTURfTEVOOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CisKKwlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7CisKKwl3bDEyNTFfZHVtcChERUJVR19TUEksICJzcGkgcmVzZXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9zcGlfd2FrZShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3sKKwl1OCBjcmNbV1NQSV9JTklUX0NNRF9DUkNfTEVOXSwgKmNtZDsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisKKwljbWQgPSBremFsbG9jKFdTUElfSU5JVF9DTURfTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQl3bDEyNTFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBjbWQgZm9yIHNwaSBpbml0Iik7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoY3JjLCAwLCBzaXplb2YoY3JjKSk7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJLyoKKwkgKiBTZXQgV1NQSV9JTklUX0NPTU1BTkQKKwkgKiB0aGUgZGF0YSBpcyBiZWluZyBzZW5kIGZyb20gdGhlIE1TQiB0byBMU0IKKwkgKi8KKwljbWRbMl0gPSAweGZmOworCWNtZFszXSA9IDB4ZmY7CisJY21kWzFdID0gV1NQSV9JTklUX0NNRF9TVEFSVCB8IFdTUElfSU5JVF9DTURfVFg7CisJY21kWzBdID0gMDsKKwljbWRbN10gPSAwOworCWNtZFs2XSB8PSBIV19BQ0NFU1NfV1NQSV9JTklUX0NNRF9NQVNLIDw8IDM7CisJY21kWzZdIHw9IEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOICYgV1NQSV9JTklUX0NNRF9GSVhFREJVU1lfTEVOOworCisJaWYgKEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOID09IDApCisJCWNtZFs1XSB8PSAgV1NQSV9JTklUX0NNRF9ESVNfRklYRURCVVNZOworCWVsc2UKKwkJY21kWzVdIHw9IFdTUElfSU5JVF9DTURfRU5fRklYRURCVVNZOworCisJY21kWzVdIHw9IFdTUElfSU5JVF9DTURfSU9EIHwgV1NQSV9JTklUX0NNRF9JUCB8IFdTUElfSU5JVF9DTURfQ1MKKwkJfCBXU1BJX0lOSVRfQ01EX1dTUEkgfCBXU1BJX0lOSVRfQ01EX1dTOworCisJY3JjWzBdID0gY21kWzFdOworCWNyY1sxXSA9IGNtZFswXTsKKwljcmNbMl0gPSBjbWRbN107CisJY3JjWzNdID0gY21kWzZdOworCWNyY1s0XSA9IGNtZFs1XTsKKworCWNtZFs0XSB8PSBjcmM3KDAsIGNyYywgV1NQSV9JTklUX0NNRF9DUkNfTEVOKSA8PCAxOworCWNtZFs0XSB8PSBXU1BJX0lOSVRfQ01EX0VORDsKKworCXQudHhfYnVmID0gY21kOworCXQubGVuID0gV1NQSV9JTklUX0NNRF9MRU47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKKworCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKKworCXdsMTI1MV9kdW1wKERFQlVHX1NQSSwgInNwaSBpbml0IC0+ICIsIGNtZCwgV1NQSV9JTklUX0NNRF9MRU4pOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfc3BpX3Jlc2V0X3dha2Uoc3RydWN0IHdsMTI1MSAqd2wpCit7CisJd2wxMjUxX3NwaV9yZXNldCh3bCk7CisJd2wxMjUxX3NwaV93YWtlKHdsKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NwaV9yZWFkKHN0cnVjdCB3bDEyNTEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkJICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXU4ICpidXN5X2J1ZjsKKwl1MzIgKmNtZDsKKworCWNtZCA9ICZ3bC0+YnVmZmVyX2NtZDsKKwlidXN5X2J1ZiA9IHdsLT5idWZmZXJfYnVzeXdvcmQ7CisKKwkqY21kID0gMDsKKwkqY21kIHw9IFdTUElfQ01EX1JFQUQ7CisJKmNtZCB8PSAobGVuIDw8IFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCkgJiBXU1BJX0NNRF9CWVRFX0xFTkdUSDsKKwkqY21kIHw9IGFkZHIgJiBXU1BJX0NNRF9CWVRFX0FERFI7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gY21kOworCXRbMF0ubGVuID0gNDsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJLyogQnVzeSBhbmQgbm9uIGJ1c3kgd29yZHMgcmVhZCAqLworCXRbMV0ucnhfYnVmID0gYnVzeV9idWY7CisJdFsxXS5sZW4gPSBXTDEyNTFfQlVTWV9XT1JEX0xFTjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJdFsyXS5yeF9idWYgPSBidWY7CisJdFsyXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMl0sICZtKTsKKworCXNwaV9zeW5jKHdsX3RvX3NwaSh3bCksICZtKTsKKworCS8qIEZJWE1FOiBjaGVjayBidXN5IHdvcmRzICovCisKKwl3bDEyNTFfZHVtcChERUJVR19TUEksICJzcGlfcmVhZCBjbWQgLT4gIiwgY21kLCBzaXplb2YoKmNtZCkpOworCXdsMTI1MV9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGJ1ZiA8LSAiLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI1MV9zcGlfd3JpdGUoc3RydWN0IHdsMTI1MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCQkgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCXUzMiAqY21kOworCisJY21kID0gJndsLT5idWZmZXJfY21kOworCisJKmNtZCA9IDA7CisJKmNtZCB8PSBXU1BJX0NNRF9XUklURTsKKwkqY21kIHw9IChsZW4gPDwgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUKSAmIFdTUElfQ01EX0JZVEVfTEVOR1RIOworCSpjbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOworCisJdFswXS50eF9idWYgPSBjbWQ7CisJdFswXS5sZW4gPSBzaXplb2YoKmNtZCk7CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKKworCXRbMV0udHhfYnVmID0gYnVmOworCXRbMV0ubGVuID0gbGVuOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CisKKwlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7CisKKwl3bDEyNTFfZHVtcChERUJVR19TUEksICJzcGlfd3JpdGUgY21kIC0+ICIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwl3bDEyNTFfZHVtcChERUJVR19TUEksICJzcGlfd3JpdGUgYnVmIC0+ICIsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjUxX3NwaV9lbmFibGVfaXJxKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXJldHVybiBlbmFibGVfaXJxKHdsLT5pcnEpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNTFfc3BpX2Rpc2FibGVfaXJxKHN0cnVjdCB3bDEyNTEgKndsKQoreworCXJldHVybiBkaXNhYmxlX2lycSh3bC0+aXJxKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB3bDEyNTFfaWZfb3BlcmF0aW9ucyB3bDEyNTFfc3BpX29wcyA9IHsKKwkucmVhZCA9IHdsMTI1MV9zcGlfcmVhZCwKKwkud3JpdGUgPSB3bDEyNTFfc3BpX3dyaXRlLAorCS5yZXNldCA9IHdsMTI1MV9zcGlfcmVzZXRfd2FrZSwKKwkuZW5hYmxlX2lycSA9IHdsMTI1MV9zcGlfZW5hYmxlX2lycSwKKwkuZGlzYWJsZV9pcnEgPSB3bDEyNTFfc3BpX2Rpc2FibGVfaXJxLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgd2wxMjUxX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHdsMTI1MSAqd2w7CisJaW50IHJldDsKKworCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCXdsMTI1MV9lcnJvcigibm8gcGxhdGZvcm0gZGF0YSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlodyA9IHdsMTI1MV9hbGxvY19odygpOworCWlmIChJU19FUlIoaHcpKQorCQlyZXR1cm4gUFRSX0VSUihodyk7CisKKwl3bCA9IGh3LT5wcml2OworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZzcGktPmRldik7CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgd2wpOworCXdsLT5pZl9wcml2ID0gc3BpOworCXdsLT5pZl9vcHMgPSAmd2wxMjUxX3NwaV9vcHM7CisKKwkvKiBUaGlzIGlzIHRoZSBvbmx5IFNQSSB2YWx1ZSB0aGF0IHdlIG5lZWQgdG8gc2V0IGhlcmUsIHRoZSByZXN0CisJICogY29tZXMgZnJvbSB0aGUgYm9hcmQtcGVyaXBoZXJhbHMgZmlsZSAqLworCXNwaS0+Yml0c19wZXJfd29yZCA9IDMyOworCisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJzcGlfc2V0dXAgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJd2wtPnNldF9wb3dlciA9IHBkYXRhLT5zZXRfcG93ZXI7CisJaWYgKCF3bC0+c2V0X3Bvd2VyKSB7CisJCXdsMTI1MV9lcnJvcigic2V0IHBvd2VyIGZ1bmN0aW9uIG1pc3NpbmcgaW4gcGxhdGZvcm0gZGF0YSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl3bC0+aXJxID0gc3BpLT5pcnE7CisJaWYgKHdsLT5pcnEgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiaXJxIG1pc3NpbmcgaW4gcGxhdGZvcm0gZGF0YSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycSh3bC0+aXJxLCB3bDEyNTFfaXJxLCAwLCBEUklWRVJfTkFNRSwgd2wpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlzZXRfaXJxX3R5cGUod2wtPmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCisJZGlzYWJsZV9pcnEod2wtPmlycSk7CisKKwlyZXQgPSB3bDEyNTFfaW5pdF9pZWVlODAyMTEod2wpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2lycTsKKworCXJldHVybiAwOworCisgb3V0X2lycToKKwlmcmVlX2lycSh3bC0+aXJxLCB3bCk7CisKKyBvdXRfZnJlZToKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bDEyNTFfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlmcmVlX2lycSh3bC0+aXJxLCB3bCk7CisJd2wxMjUxX2ZyZWVfaHcod2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciB3bDEyNTFfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAid2wxMnh4IiwKKwkJLmJ1cwkJPSAmc3BpX2J1c190eXBlLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKworCS5wcm9iZQkJPSB3bDEyNTFfc3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2wxMjUxX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2wxMjUxX3NwaV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJndsMTI1MV9zcGlfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNTFfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBzcGkgZHJpdmVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bDEyNTFfc3BpX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJndsMTI1MV9zcGlfZHJpdmVyKTsKKworCXdsMTI1MV9ub3RpY2UoInVubG9hZGVkIik7Cit9CisKK21vZHVsZV9pbml0KHdsMTI1MV9zcGlfaW5pdCk7Cittb2R1bGVfZXhpdCh3bDEyNTFfc3BpX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfc3BpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMjczYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3NwaS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNTEKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI1MV9TUElfSF9fCisjZGVmaW5lIF9fV0wxMjUxX1NQSV9IX18KKworI2luY2x1ZGUgIndsMTI1MV9jbWQuaCIKKyNpbmNsdWRlICJ3bDEyNTFfYWN4LmgiCisjaW5jbHVkZSAid2wxMjUxX3JlZy5oIgorCisjZGVmaW5lIFdTUElfQ01EX1JFQUQgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgV1NQSV9DTURfV1JJVEUgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBXU1BJX0NNRF9GSVhFRCAgICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFdTUElfQ01EX0JZVEVfTEVOR1RIICAgICAgICAgIDB4MUZGRTAwMDAKKyNkZWZpbmUgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUICAgMTcKKyNkZWZpbmUgV1NQSV9DTURfQllURV9BRERSICAgICAgICAgICAgMHgwMDAxRkZGRgorCisjZGVmaW5lIFdTUElfSU5JVF9DTURfQ1JDX0xFTiAgICAgICA1CisKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9TVEFSVCAgICAgICAgIDB4MDAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9UWCAgICAgICAgICAgIDB4NDAKKy8qIHRoZSBleHRyYSBieXBhc3MgYml0IGlzIHNhbXBsZWQgYnkgdGhlIFRORVQgYXMgJzEnICovCisjZGVmaW5lIFdTUElfSU5JVF9DTURfQllQQVNTX0JJVCAgICAweDgwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfRklYRURCVVNZX0xFTiAweDA3CisjZGVmaW5lIFdTUElfSU5JVF9DTURfRU5fRklYRURCVVNZICAweDgwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfRElTX0ZJWEVEQlVTWSAweDAwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfSU9EICAgICAgICAgICAweDQwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfSVAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfQ1MgICAgICAgICAgICAweDEwCisjZGVmaW5lIFdTUElfSU5JVF9DTURfV1MgICAgICAgICAgICAweDA4CisjZGVmaW5lIFdTUElfSU5JVF9DTURfV1NQSSAgICAgICAgICAweDAxCisjZGVmaW5lIFdTUElfSU5JVF9DTURfRU5EICAgICAgICAgICAweDAxCisKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9MRU4gICAgICAgICAgIDgKKworI2RlZmluZSBIV19BQ0NFU1NfV1NQSV9GSVhFRF9CVVNZX0xFTiBcCisJCSgoV0wxMjUxX0JVU1lfV09SRF9MRU4gLSA0KSAvIHNpemVvZih1MzIpKQorI2RlZmluZSBIV19BQ0NFU1NfV1NQSV9JTklUX0NNRF9NQVNLICAwCisKKyNlbmRpZiAvKiBfX1dMMTI1MV9TUElfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYwpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvdHguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5jCmluZGV4IDYyMTQ1ZTIuLmY4NTk3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI1MQogICoKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCkBAIC0yNSwxMyArMjUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotI2luY2x1ZGUgIndsMTJ4eC5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInNwaS5oIgotI2luY2x1ZGUgInR4LmgiCi0jaW5jbHVkZSAicHMuaCIKKyNpbmNsdWRlICJ3bDEyNTEuaCIKKyNpbmNsdWRlICJ3bDEyNTFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjUxX3R4LmgiCisjaW5jbHVkZSAid2wxMjUxX3BzLmgiCisjaW5jbHVkZSAid2wxMjUxX2lvLmgiCiAKLXN0YXRpYyBib29sIHdsMTJ4eF90eF9kb3VibGVfYnVmZmVyX2J1c3koc3RydWN0IHdsMTJ4eCAqd2wsIHUzMiBkYXRhX291dF9jb3VudCkKK3N0YXRpYyBib29sIHdsMTI1MV90eF9kb3VibGVfYnVmZmVyX2J1c3koc3RydWN0IHdsMTI1MSAqd2wsIHUzMiBkYXRhX291dF9jb3VudCkKIHsKIAlpbnQgdXNlZCwgZGF0YV9pbl9jb3VudDsKIApAQCAtNTIsMTUgKzUyLDE1IEBACiAJCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCB3bDEyeHhfdHhfcGF0aF9zdGF0dXMoc3RydWN0IHdsMTJ4eCAqd2wpCitzdGF0aWMgaW50IHdsMTI1MV90eF9wYXRoX3N0YXR1cyhzdHJ1Y3Qgd2wxMjUxICp3bCkKIHsKIAl1MzIgc3RhdHVzLCBhZGRyLCBkYXRhX291dF9jb3VudDsKIAlib29sIGJ1c3k7CiAKIAlhZGRyID0gd2wtPmRhdGFfcGF0aC0+dHhfY29udHJvbF9hZGRyOwotCXN0YXR1cyA9IHdsMTJ4eF9tZW1fcmVhZDMyKHdsLCBhZGRyKTsKKwlzdGF0dXMgPSB3bDEyNTFfbWVtX3JlYWQzMih3bCwgYWRkcik7CiAJZGF0YV9vdXRfY291bnQgPSBzdGF0dXMgJiBUWF9TVEFUVVNfREFUQV9PVVRfQ09VTlRfTUFTSzsKLQlidXN5ID0gd2wxMnh4X3R4X2RvdWJsZV9idWZmZXJfYnVzeSh3bCwgZGF0YV9vdXRfY291bnQpOworCWJ1c3kgPSB3bDEyNTFfdHhfZG91YmxlX2J1ZmZlcl9idXN5KHdsLCBkYXRhX291dF9jb3VudCk7CiAKIAlpZiAoYnVzeSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTY4LDcgKzY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bDEyeHhfdHhfaWQoc3RydWN0IHdsMTJ4eCAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IHdsMTI1MV90eF9pZChzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgaTsKIApAQCAtODEsNyArODEsNyBAQAogCXJldHVybiAtRUJVU1k7CiB9CiAKLXN0YXRpYyB2b2lkIHdsMTJ4eF90eF9jb250cm9sKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKnR4X2hkciwKK3N0YXRpYyB2b2lkIHdsMTI1MV90eF9jb250cm9sKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKnR4X2hkciwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCwgdTE2IGZjKQogewogCSoodTE2ICopJnR4X2hkci0+Y29udHJvbCA9IDA7CkBAIC0xMDksNyArMTA5LDcgQEAKICNkZWZpbmUgTUFYX01QRFVfSEVBREVSX0FORF9TRUNVUklUWSAgKE1BWF9NUERVX1NFQ1VSSVRZX0xFTkdUSCArIFwKIAkJCQkgICAgICAgV0xBTl9RT1NfSERSX0xFTikKICNkZWZpbmUgSFdfQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgMjUyCi1zdGF0aWMgdm9pZCB3bDEyeHhfdHhfZnJhZ19ibG9ja19udW0oc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyAqdHhfaGRyKQorc3RhdGljIHZvaWQgd2wxMjUxX3R4X2ZyYWdfYmxvY2tfbnVtKHN0cnVjdCB0eF9kb3VibGVfYnVmZmVyX2Rlc2MgKnR4X2hkcikKIHsKIAl1MTYgcGF5bG9hZF9sZW4sIGZyYWdfdGhyZXNob2xkLCBtZW1fYmxvY2tzOwogCXUxNiBudW1fbXBkdXMsIG1lbV9ibG9ja3NfcGVyX2ZyYWc7CkBAIC0xNDIsNyArMTQyLDcgQEAKIAl0eF9oZHItPm51bV9tZW1fYmxvY2tzID0gbWVtX2Jsb2NrczsKIH0KIAotc3RhdGljIGludCB3bDEyeHhfdHhfZmlsbF9oZHIoc3RydWN0IHdsMTJ4eCAqd2wsIHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHdsMTI1MV90eF9maWxsX2hkcihzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqY29udHJvbCkKIHsKIAlzdHJ1Y3QgdHhfZG91YmxlX2J1ZmZlcl9kZXNjICp0eF9oZHI7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZCA9IHdsMTJ4eF90eF9pZCh3bCwgc2tiKTsKKwlpZCA9IHdsMTI1MV90eF9pZCh3bCwgc2tiKTsKIAlpZiAoaWQgPCAwKQogCQlyZXR1cm4gaWQ7CiAKQEAgLTE3MCwxNCArMTcwLDE0IEBACiAJLyogRklYTUU6IGhvdyB0byBnZXQgdGhlIGNvcnJlY3QgcXVldWUgaWQ/ICovCiAJdHhfaGRyLT54bWl0X3F1ZXVlID0gMDsKIAotCXdsMTJ4eF90eF9jb250cm9sKHR4X2hkciwgY29udHJvbCwgZmMpOwotCXdsMTJ4eF90eF9mcmFnX2Jsb2NrX251bSh0eF9oZHIpOworCXdsMTI1MV90eF9jb250cm9sKHR4X2hkciwgY29udHJvbCwgZmMpOworCXdsMTI1MV90eF9mcmFnX2Jsb2NrX251bSh0eF9oZHIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qIFdlIGNvcHkgdGhlIHBhY2tldCB0byB0aGUgdGFyZ2V0ICovCi1zdGF0aWMgaW50IHdsMTJ4eF90eF9zZW5kX3BhY2tldChzdHJ1Y3Qgd2wxMnh4ICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgd2wxMjUxX3R4X3NlbmRfcGFja2V0KHN0cnVjdCB3bDEyNTEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmNvbnRyb2wpCiB7CiAJc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyAqdHhfaGRyOwpAQCAtMTk2LDEyICsxOTYsMTIgQEAKIAkJdTggKnBvczsKIAogCQlmYyA9ICoodTE2ICopKHNrYi0+ZGF0YSArIHNpemVvZigqdHhfaGRyKSk7Ci0JCXR4X2hkci0+bGVuZ3RoICs9IFdMMTJYWF9US0lQX0lWX1NQQUNFOworCQl0eF9oZHItPmxlbmd0aCArPSBXTDEyNTFfVEtJUF9JVl9TUEFDRTsKIAogCQloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKIAotCQlwb3MgPSBza2JfcHVzaChza2IsIFdMMTJYWF9US0lQX0lWX1NQQUNFKTsKLQkJbWVtbW92ZShwb3MsIHBvcyArIFdMMTJYWF9US0lQX0lWX1NQQUNFLAorCQlwb3MgPSBza2JfcHVzaChza2IsIFdMMTI1MV9US0lQX0lWX1NQQUNFKTsKKwkJbWVtbW92ZShwb3MsIHBvcyArIFdMMTI1MV9US0lQX0lWX1NQQUNFLAogCQkJc2l6ZW9mKCp0eF9oZHIpICsgaGRybGVuKTsKIAl9CiAKQEAgLTIxMSw3ICsyMTEsNyBAQAogCSovCiAJaWYgKHVubGlrZWx5KChsb25nKXNrYi0+ZGF0YSAmIDB4MDMpKSB7CiAJCWludCBvZmZzZXQgPSAoNCAtIChsb25nKXNrYi0+ZGF0YSkgJiAweDAzOwotCQl3bDEyeHhfZGVidWcoREVCVUdfVFgsICJza2Igb2Zmc2V0ICVkIiwgb2Zmc2V0KTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAic2tiIG9mZnNldCAlZCIsIG9mZnNldCk7CiAKIAkJLyogY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBza2IgY2FuIGJlIHVzZWQgKi8KIAkJaWYgKCFza2JfY2xvbmVkKHNrYikgJiYgKHNrYl90YWlscm9vbShza2IpID49IG9mZnNldCkpIHsKQEAgLTIyMSwxMyArMjIxLDEzIEBACiAJCQlza2JfcmVzZXJ2ZShza2IsIG9mZnNldCk7CiAJCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc3JjLCBza2ItPmxlbik7CiAJCX0gZWxzZSB7Ci0JCQl3bDEyeHhfaW5mbygiTm8gaGFuZGxlciwgZml4bWUhIik7CisJCQl3bDEyNTFfaW5mbygiTm8gaGFuZGxlciwgZml4bWUhIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAogCS8qIE91ciBza2ItPmRhdGEgYXQgdGhpcyBwb2ludCBpbmNsdWRlcyB0aGUgSFcgaGVhZGVyICovCi0JbGVuID0gV0wxMlhYX1RYX0FMSUdOKHNrYi0+bGVuKTsKKwlsZW4gPSBXTDEyNTFfVFhfQUxJR04oc2tiLT5sZW4pOwogCiAJaWYgKHdsLT5kYXRhX2luX2NvdW50ICYgMHgxKQogCQlhZGRyID0gd2wtPmRhdGFfcGF0aC0+dHhfcGFja2V0X3JpbmdfYWRkciArCkBAIC0yMzUsMTUgKzIzNSwxNSBAQAogCWVsc2UKIAkJYWRkciA9IHdsLT5kYXRhX3BhdGgtPnR4X3BhY2tldF9yaW5nX2FkZHI7CiAKLQl3bDEyeHhfc3BpX21lbV93cml0ZSh3bCwgYWRkciwgc2tiLT5kYXRhLCBsZW4pOworCXdsMTI1MV9tZW1fd3JpdGUod2wsIGFkZHIsIHNrYi0+ZGF0YSwgbGVuKTsKIAotCXdsMTJ4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGlkICV1IHNrYiAweCVwIHBheWxvYWQgJXUgcmF0ZSAweCV4IiwKKwl3bDEyNTFfZGVidWcoREVCVUdfVFgsICJ0eCBpZCAldSBza2IgMHglcCBwYXlsb2FkICV1IHJhdGUgMHgleCIsCiAJCSAgICAgdHhfaGRyLT5pZCwgc2tiLCB0eF9oZHItPmxlbmd0aCwgdHhfaGRyLT5yYXRlKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB3bDEyeHhfdHhfdHJpZ2dlcihzdHJ1Y3Qgd2wxMnh4ICp3bCkKK3N0YXRpYyB2b2lkIHdsMTI1MV90eF90cmlnZ2VyKHN0cnVjdCB3bDEyNTEgKndsKQogewogCXUzMiBkYXRhLCBhZGRyOwogCkBAIC0yNTUsNyArMjU1LDcgQEAKIAkJZGF0YSA9IElOVFJfVFJJR19UWF9QUk9DMDsKIAl9CiAKLQl3bDEyeHhfcmVnX3dyaXRlMzIod2wsIGFkZHIsIGRhdGEpOworCXdsMTI1MV9yZWdfd3JpdGUzMih3bCwgYWRkciwgZGF0YSk7CiAKIAkvKiBCdW1waW5nIGRhdGEgaW4gKi8KIAl3bC0+ZGF0YV9pbl9jb3VudCA9ICh3bC0+ZGF0YV9pbl9jb3VudCArIDEpICYKQEAgLTI2Myw3ICsyNjMsNyBAQAogfQogCiAvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwotc3RhdGljIGludCB3bDEyeHhfdHhfZnJhbWUoc3RydWN0IHdsMTJ4eCAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IHdsMTI1MV90eF9mcmFtZShzdHJ1Y3Qgd2wxMjUxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJaW50IHJldCA9IDA7CkBAIC0yNzQsNTEgKzI3NCw1MyBAQAogCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgewogCQlpZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKIAkJaWYgKHVubGlrZWx5KHdsLT5kZWZhdWx0X2tleSAhPSBpZHgpKSB7Ci0JCQlyZXQgPSB3bDEyeHhfYWN4X2RlZmF1bHRfa2V5KHdsLCBpZHgpOworCQkJcmV0ID0gd2wxMjUxX2FjeF9kZWZhdWx0X2tleSh3bCwgaWR4KTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlyZXQgPSB3bDEyeHhfdHhfcGF0aF9zdGF0dXMod2wpOworCXJldCA9IHdsMTI1MV90eF9wYXRoX3N0YXR1cyh3bCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB3bDEyeHhfdHhfZmlsbF9oZHIod2wsIHNrYiwgaW5mbyk7CisJcmV0ID0gd2wxMjUxX3R4X2ZpbGxfaGRyKHdsLCBza2IsIGluZm8pOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2wxMnh4X3R4X3NlbmRfcGFja2V0KHdsLCBza2IsIGluZm8pOworCXJldCA9IHdsMTI1MV90eF9zZW5kX3BhY2tldCh3bCwgc2tiLCBpbmZvKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXdsMTJ4eF90eF90cmlnZ2VyKHdsKTsKKwl3bDEyNTFfdHhfdHJpZ2dlcih3bCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHdsMTJ4eF90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgd2wxMjUxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCB3bDEyeHggKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyeHgsIHR4X3dvcmspOworCXN0cnVjdCB3bDEyNTEgKndsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNTEsIHR4X3dvcmspOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJYm9vbCB3b2tlbl91cCA9IGZhbHNlOwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCi0JaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSA9PSBXTDEyWFhfU1RBVEVfT0ZGKSkKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI1MV9TVEFURV9PRkYpKQogCQlnb3RvIG91dDsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSkpKSB7CiAJCWlmICghd29rZW5fdXApIHsKLQkJCXdsMTJ4eF9wc19lbHBfd2FrZXVwKHdsKTsKKwkJCXJldCA9IHdsMTI1MV9wc19lbHBfd2FrZXVwKHdsKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OwogCQkJd29rZW5fdXAgPSB0cnVlOwogCQl9CiAKLQkJcmV0ID0gd2wxMnh4X3R4X2ZyYW1lKHdsLCBza2IpOworCQlyZXQgPSB3bDEyNTFfdHhfZnJhbWUod2wsIHNrYik7CiAJCWlmIChyZXQgPT0gLUVCVVNZKSB7CiAJCQkvKiBmaXJtd2FyZSBidWZmZXIgaXMgZnVsbCwgc3RvcCBxdWV1ZXMgKi8KLQkJCXdsMTJ4eF9kZWJ1ZyhERUJVR19UWCwgInR4X3dvcms6IGZ3IGJ1ZmZlciBmdWxsLCAiCisJCQl3bDEyNTFfZGVidWcoREVCVUdfVFgsICJ0eF93b3JrOiBmdyBidWZmZXIgZnVsbCwgIgogCQkJCSAgICAgInN0b3AgcXVldWVzIik7CiAJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKIAkJCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gdHJ1ZTsKQEAgLTMzMiwxMiArMzM0LDEyIEBACiAKIG91dDoKIAlpZiAod29rZW5fdXApCi0JCXdsMTJ4eF9wc19lbHBfc2xlZXAod2wpOworCQl3bDEyNTFfcHNfZWxwX3NsZWVwKHdsKTsKIAogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKndsMTJ4eF90eF9wYXJzZV9zdGF0dXModTggc3RhdHVzKQorc3RhdGljIGNvbnN0IGNoYXIgKndsMTI1MV90eF9wYXJzZV9zdGF0dXModTggc3RhdHVzKQogewogCS8qIDggYml0IHN0YXR1cyBmaWVsZCwgb25lIGNoYXJhY3RlciBwZXIgYml0IHBsdXMgbnVsbCAqLwogCXN0YXRpYyBjaGFyIGJ1Zls5XTsKQEAgLTM2NSw3ICszNjcsNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyB2b2lkIHdsMTJ4eF90eF9wYWNrZXRfY2Ioc3RydWN0IHdsMTJ4eCAqd2wsCitzdGF0aWMgdm9pZCB3bDEyNTFfdHhfcGFja2V0X2NiKHN0cnVjdCB3bDEyNTEgKndsLAogCQkJCXN0cnVjdCB0eF9yZXN1bHQgKnJlc3VsdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CkBAIC0zNzUsNyArMzc3LDcgQEAKIAogCXNrYiA9IHdsLT50eF9mcmFtZXNbcmVzdWx0LT5pZF07CiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCXdsMTJ4eF9lcnJvcigiU0tCIGZvciBwYWNrZXQgJWQgaXMgTlVMTCIsIHJlc3VsdC0+aWQpOworCQl3bDEyNTFfZXJyb3IoIlNLQiBmb3IgcGFja2V0ICVkIGlzIE5VTEwiLCByZXN1bHQtPmlkKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzk2LDE0ICszOTgsMTQgQEAKIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkgJiYKIAkgICAgaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkgewogCQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCQltZW1tb3ZlKGZyYW1lICsgV0wxMlhYX1RLSVBfSVZfU1BBQ0UsIGZyYW1lLCBoZHJsZW4pOwotCQlza2JfcHVsbChza2IsIFdMMTJYWF9US0lQX0lWX1NQQUNFKTsKKwkJbWVtbW92ZShmcmFtZSArIFdMMTI1MV9US0lQX0lWX1NQQUNFLCBmcmFtZSwgaGRybGVuKTsKKwkJc2tiX3B1bGwoc2tiLCBXTDEyNTFfVEtJUF9JVl9TUEFDRSk7CiAJfQogCi0Jd2wxMnh4X2RlYnVnKERFQlVHX1RYLCAidHggc3RhdHVzIGlkICV1IHNrYiAweCVwIGZhaWx1cmVzICV1IHJhdGUgMHgleCIKKwl3bDEyNTFfZGVidWcoREVCVUdfVFgsICJ0eCBzdGF0dXMgaWQgJXUgc2tiIDB4JXAgZmFpbHVyZXMgJXUgcmF0ZSAweCV4IgogCQkgICAgICIgc3RhdHVzIDB4JXggKCVzKSIsCiAJCSAgICAgcmVzdWx0LT5pZCwgc2tiLCByZXN1bHQtPmFja19mYWlsdXJlcywgcmVzdWx0LT5yYXRlLAotCQkgICAgIHJlc3VsdC0+c3RhdHVzLCB3bDEyeHhfdHhfcGFyc2Vfc3RhdHVzKHJlc3VsdC0+c3RhdHVzKSk7CisJCSAgICAgcmVzdWx0LT5zdGF0dXMsIHdsMTI1MV90eF9wYXJzZV9zdGF0dXMocmVzdWx0LT5zdGF0dXMpKTsKIAogCiAJaWVlZTgwMjExX3R4X3N0YXR1cyh3bC0+aHcsIHNrYik7CkBAIC00MTEsNyArNDEzLDcgQEAKIAl3bC0+dHhfZnJhbWVzW3Jlc3VsdC0+aWRdID0gTlVMTDsKIAogCWlmICh3bC0+dHhfcXVldWVfc3RvcHBlZCkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfVFgsICJjYjogcXVldWUgd2FzIHN0b3BwZWQiKTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAiY2I6IHF1ZXVlIHdhcyBzdG9wcGVkIik7CiAKIAkJc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSk7CiAKQEAgLTQyMCwxMCArNDIyLDEwIEBACiAJCSAgIHF1ZXVlIGVtcHR5ICovCiAKIAkJaWYgKHNrYikgewotCQkJcmV0ID0gd2wxMnh4X3R4X2ZyYW1lKHdsLCBza2IpOworCQkJcmV0ID0gd2wxMjUxX3R4X2ZyYW1lKHdsLCBza2IpOwogCQkJaWYgKHJldCA9PSAtRUJVU1kpIHsKIAkJCQkvKiBmaXJtd2FyZSBidWZmZXIgaXMgc3RpbGwgZnVsbCAqLwotCQkJCXdsMTJ4eF9kZWJ1ZyhERUJVR19UWCwgImNiOiBmdyBidWZmZXIgIgorCQkJCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgImNiOiBmdyBidWZmZXIgIgogCQkJCQkgICAgICJzdGlsbCBmdWxsIik7CiAJCQkJc2tiX3F1ZXVlX2hlYWQoJndsLT50eF9xdWV1ZSwgc2tiKTsKIAkJCQlyZXR1cm47CkBAIC00MzMsMjMgKzQzNSwyMyBAQAogCQkJfQogCQl9CiAKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1RYLCAiY2I6IHdha2luZyBxdWV1ZXMiKTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAiY2I6IHdha2luZyBxdWV1ZXMiKTsKIAkJaWVlZTgwMjExX3dha2VfcXVldWVzKHdsLT5odyk7CiAJCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CiAJfQogfQogCiAvKiBDYWxsZWQgdXBvbiByZWNlcHRpb24gb2YgYSBUWCBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KLXZvaWQgd2wxMnh4X3R4X2NvbXBsZXRlKHN0cnVjdCB3bDEyeHggKndsKQordm9pZCB3bDEyNTFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI1MSAqd2wpCiB7CiAJaW50IGksIHJlc3VsdF9pbmRleCwgbnVtX2NvbXBsZXRlID0gMDsKIAlzdHJ1Y3QgdHhfcmVzdWx0IHJlc3VsdFtGV19UWF9DTVBMVF9CTE9DS19TSVpFXSwgKnJlc3VsdF9wdHI7CiAKLQlpZiAodW5saWtlbHkod2wtPnN0YXRlICE9IFdMMTJYWF9TVEFURV9PTikpCisJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSAhPSBXTDEyNTFfU1RBVEVfT04pKQogCQlyZXR1cm47CiAKIAkvKiBGaXJzdCB3ZSByZWFkIHRoZSByZXN1bHQgKi8KLQl3bDEyeHhfc3BpX21lbV9yZWFkKHdsLCB3bC0+ZGF0YV9wYXRoLT50eF9jb21wbGV0ZV9hZGRyLAorCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPmRhdGFfcGF0aC0+dHhfY29tcGxldGVfYWRkciwKIAkJCSAgICByZXN1bHQsIHNpemVvZihyZXN1bHQpKTsKIAogCXJlc3VsdF9pbmRleCA9IHdsLT5uZXh0X3R4X2NvbXBsZXRlOwpAQCAtNDU5LDcgKzQ2MSw3IEBACiAKIAkJaWYgKHJlc3VsdF9wdHItPmRvbmVfMSA9PSAxICYmCiAJCSAgICByZXN1bHRfcHRyLT5kb25lXzIgPT0gMSkgewotCQkJd2wxMnh4X3R4X3BhY2tldF9jYih3bCwgcmVzdWx0X3B0cik7CisJCQl3bDEyNTFfdHhfcGFja2V0X2NiKHdsLCByZXN1bHRfcHRyKTsKIAogCQkJcmVzdWx0X3B0ci0+ZG9uZV8xID0gMDsKIAkJCXJlc3VsdF9wdHItPmRvbmVfMiA9IDA7CkBAIC00ODAsNDEgKzQ4Miw0MSBAQAogCQkgKi8KIAkJaWYgKHJlc3VsdF9pbmRleCA+IHdsLT5uZXh0X3R4X2NvbXBsZXRlKSB7CiAJCQkvKiBPbmx5IDEgd3JpdGUgaXMgbmVlZGVkICovCi0JCQl3bDEyeHhfc3BpX21lbV93cml0ZSh3bCwKLQkJCQkJICAgICB3bC0+ZGF0YV9wYXRoLT50eF9jb21wbGV0ZV9hZGRyICsKLQkJCQkJICAgICAod2wtPm5leHRfdHhfY29tcGxldGUgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpLAotCQkJCQkgICAgICZyZXN1bHRbd2wtPm5leHRfdHhfY29tcGxldGVdLAotCQkJCQkgICAgIG51bV9jb21wbGV0ZSAqCi0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCB0eF9yZXN1bHQpKTsKKwkJCXdsMTI1MV9tZW1fd3JpdGUod2wsCisJCQkJCSB3bC0+ZGF0YV9wYXRoLT50eF9jb21wbGV0ZV9hZGRyICsKKwkJCQkJICh3bC0+bmV4dF90eF9jb21wbGV0ZSAqCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCB0eF9yZXN1bHQpKSwKKwkJCQkJICZyZXN1bHRbd2wtPm5leHRfdHhfY29tcGxldGVdLAorCQkJCQkgbnVtX2NvbXBsZXRlICoKKwkJCQkJIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSk7CiAKIAogCQl9IGVsc2UgaWYgKHJlc3VsdF9pbmRleCA8IHdsLT5uZXh0X3R4X2NvbXBsZXRlKSB7CiAJCQkvKiAyIHdyaXRlcyBhcmUgbmVlZGVkICovCi0JCQl3bDEyeHhfc3BpX21lbV93cml0ZSh3bCwKLQkJCQkJICAgICB3bC0+ZGF0YV9wYXRoLT50eF9jb21wbGV0ZV9hZGRyICsKLQkJCQkJICAgICAod2wtPm5leHRfdHhfY29tcGxldGUgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpLAotCQkJCQkgICAgICZyZXN1bHRbd2wtPm5leHRfdHhfY29tcGxldGVdLAotCQkJCQkgICAgIChGV19UWF9DTVBMVF9CTE9DS19TSVpFIC0KLQkJCQkJICAgICAgd2wtPm5leHRfdHhfY29tcGxldGUpICoKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpOworCQkJd2wxMjUxX21lbV93cml0ZSh3bCwKKwkJCQkJIHdsLT5kYXRhX3BhdGgtPnR4X2NvbXBsZXRlX2FkZHIgKworCQkJCQkgKHdsLT5uZXh0X3R4X2NvbXBsZXRlICoKKwkJCQkJICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpLAorCQkJCQkgJnJlc3VsdFt3bC0+bmV4dF90eF9jb21wbGV0ZV0sCisJCQkJCSAoRldfVFhfQ01QTFRfQkxPQ0tfU0laRSAtCisJCQkJCSAgd2wtPm5leHRfdHhfY29tcGxldGUpICoKKwkJCQkJIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSk7CiAKLQkJCXdsMTJ4eF9zcGlfbWVtX3dyaXRlKHdsLAotCQkJCQkgICAgIHdsLT5kYXRhX3BhdGgtPnR4X2NvbXBsZXRlX2FkZHIsCi0JCQkJCSAgICAgcmVzdWx0LAotCQkJCQkgICAgIChudW1fY29tcGxldGUgLQotCQkJCQkgICAgICBGV19UWF9DTVBMVF9CTE9DS19TSVpFICsKLQkJCQkJICAgICAgd2wtPm5leHRfdHhfY29tcGxldGUpICoKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHR4X3Jlc3VsdCkpOworCQkJd2wxMjUxX21lbV93cml0ZSh3bCwKKwkJCQkJIHdsLT5kYXRhX3BhdGgtPnR4X2NvbXBsZXRlX2FkZHIsCisJCQkJCSByZXN1bHQsCisJCQkJCSAobnVtX2NvbXBsZXRlIC0KKwkJCQkJICBGV19UWF9DTVBMVF9CTE9DS19TSVpFICsKKwkJCQkJICB3bC0+bmV4dF90eF9jb21wbGV0ZSkgKgorCQkJCQkgc2l6ZW9mKHN0cnVjdCB0eF9yZXN1bHQpKTsKIAogCQl9IGVsc2UgewogCQkJLyogV2UgaGF2ZSB0byB3cml0ZSB0aGUgd2hvbGUgYXJyYXkgKi8KLQkJCXdsMTJ4eF9zcGlfbWVtX3dyaXRlKHdsLAotCQkJCQkgICAgIHdsLT5kYXRhX3BhdGgtPnR4X2NvbXBsZXRlX2FkZHIsCi0JCQkJCSAgICAgcmVzdWx0LAotCQkJCQkgICAgIEZXX1RYX0NNUExUX0JMT0NLX1NJWkUgKgotCQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgdHhfcmVzdWx0KSk7CisJCQl3bDEyNTFfbWVtX3dyaXRlKHdsLAorCQkJCQkgd2wtPmRhdGFfcGF0aC0+dHhfY29tcGxldGVfYWRkciwKKwkJCQkJIHJlc3VsdCwKKwkJCQkJIEZXX1RYX0NNUExUX0JMT0NLX1NJWkUgKgorCQkJCQkgc2l6ZW9mKHN0cnVjdCB0eF9yZXN1bHQpKTsKIAkJfQogCiAJfQpAQCAtNTIzLDcgKzUyNSw3IEBACiB9CiAKIC8qIGNhbGxlciBtdXN0IGhvbGQgd2wtPm11dGV4ICovCi12b2lkIHdsMTJ4eF90eF9mbHVzaChzdHJ1Y3Qgd2wxMnh4ICp3bCkKK3ZvaWQgd2wxMjUxX3R4X2ZsdXNoKHN0cnVjdCB3bDEyNTEgKndsKQogewogCWludCBpOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC01MzUsNyArNTM3LDcgQEAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpKSkgewogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19UWCwgImZsdXNoaW5nIHNrYiAweCVwIiwgc2tiKTsKKwkJd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAiZmx1c2hpbmcgc2tiIDB4JXAiLCBza2IpOwogCiAJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC90eC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmgKaW5kZXggZGM4MjY5MS4uN2MxYzE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3R4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjUxCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KQEAgLTIyLDggKzIyLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBfX1dMMTJYWF9UWF9IX18KLSNkZWZpbmUgX19XTDEyWFhfVFhfSF9fCisjaWZuZGVmIF9fV0wxMjUxX1RYX0hfXworI2RlZmluZSBfX1dMMTI1MV9UWF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCkBAIC03MywxMCArNzMsMTEgQEAKIAogI2RlZmluZSBUWF9DT01QTEVURV9SRVFVSVJFRF9CSVQJMHg4MAogI2RlZmluZSBUWF9TVEFUVVNfREFUQV9PVVRfQ09VTlRfTUFTSyAgIDB4ZgotI2RlZmluZSBXTDEyWFhfVFhfQUxJR05fVE8gNAotI2RlZmluZSBXTDEyWFhfVFhfQUxJR04obGVuKSAoKChsZW4pICsgV0wxMlhYX1RYX0FMSUdOX1RPIC0gMSkgJiBcCi0JCQkgICAgIH4oV0wxMlhYX1RYX0FMSUdOX1RPIC0gMSkpCi0jZGVmaW5lIFdMMTJYWF9US0lQX0lWX1NQQUNFIDQKKworI2RlZmluZSBXTDEyNTFfVFhfQUxJR05fVE8gNAorI2RlZmluZSBXTDEyNTFfVFhfQUxJR04obGVuKSAoKChsZW4pICsgV0wxMjUxX1RYX0FMSUdOX1RPIC0gMSkgJiBcCisJCQkgICAgIH4oV0wxMjUxX1RYX0FMSUdOX1RPIC0gMSkpCisjZGVmaW5lIFdMMTI1MV9US0lQX0lWX1NQQUNFIDQKIAogc3RydWN0IHR4X2NvbnRyb2wgewogCS8qIFJhdGUgUG9saWN5IChjbGFzcykgaW5kZXggKi8KQEAgLTIwOCw4ICsyMDksOCBAQAogCXU4IGRvbmVfMjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi12b2lkIHdsMTJ4eF90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci12b2lkIHdsMTJ4eF90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci12b2lkIHdsMTJ4eF90eF9mbHVzaChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Cit2b2lkIHdsMTI1MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHdsMTI1MV90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjUxICp3bCk7Cit2b2lkIHdsMTI1MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjUxICp3bCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTJ4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oCnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oCmluZGV4IDQ4NjQxNDMuLjU1ODE4ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyeHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQogICoKLSAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA3IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjIsMTUgKzIyLDE3IEBACiAgKgogICovCiAKLSNpZm5kZWYgX19XTDEyWFhfSF9fCi0jZGVmaW5lIF9fV0wxMlhYX0hfXworI2lmbmRlZiBfX1dMMTI3MV9IX18KKyNkZWZpbmUgX19XTDEyNzFfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2RlZmluZSBEUklWRVJfTkFNRSAid2wxMnh4IgorI2RlZmluZSBEUklWRVJfTkFNRSAid2wxMjcxIgogI2RlZmluZSBEUklWRVJfUFJFRklYIERSSVZFUl9OQU1FICI6ICIKIAogZW51bSB7CkBAIC01NiwyNSArNTgsMjUgQEAKIAogI2RlZmluZSBERUJVR19EVU1QX0xJTUlUIDEwMjQKIAotI2RlZmluZSB3bDEyeHhfZXJyb3IoZm10LCBhcmcuLi4pIFwKKyNkZWZpbmUgd2wxMjcxX2Vycm9yKGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9QUkVGSVggIkVSUk9SICIgZm10ICJcbiIsICMjYXJnKQogCi0jZGVmaW5lIHdsMTJ4eF93YXJuaW5nKGZtdCwgYXJnLi4uKSBcCisjZGVmaW5lIHdsMTI3MV93YXJuaW5nKGZtdCwgYXJnLi4uKSBcCiAJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfUFJFRklYICJXQVJOSU5HICIgZm10ICJcbiIsICMjYXJnKQogCi0jZGVmaW5lIHdsMTJ4eF9ub3RpY2UoZm10LCBhcmcuLi4pIFwKKyNkZWZpbmUgd2wxMjcxX25vdGljZShmbXQsIGFyZy4uLikgXAogCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpCiAKLSNkZWZpbmUgd2wxMnh4X2luZm8oZm10LCBhcmcuLi4pIFwKKyNkZWZpbmUgd2wxMjcxX2luZm8oZm10LCBhcmcuLi4pIFwKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZykKIAotI2RlZmluZSB3bDEyeHhfZGVidWcobGV2ZWwsIGZtdCwgYXJnLi4uKSBcCisjZGVmaW5lIHdsMTI3MV9kZWJ1ZyhsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAlkbyB7IFwKIAkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKIAkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKTsgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgd2wxMnh4X2R1bXAobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKKyNkZWZpbmUgd2wxMjcxX2R1bXAobGV2ZWwsIHByZWZpeCwgYnVmLCBsZW4pCVwKIAlkbyB7IFwKIAkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKIAkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsIERSSVZFUl9QUkVGSVggcHJlZml4LCBcCkBAIC04NCw3ICs4Niw3IEBACiAJCQkJICAgICAgIDApOwkJCQlcCiAJfSB3aGlsZSAoMCkKIAotI2RlZmluZSB3bDEyeHhfZHVtcF9hc2NpaShsZXZlbCwgcHJlZml4LCBidWYsIGxlbikJXAorI2RlZmluZSB3bDEyNzFfZHVtcF9hc2NpaShsZXZlbCwgcHJlZml4LCBidWYsIGxlbikJXAogCWRvIHsgXAogCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAogCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgRFJJVkVSX1BSRUZJWCBwcmVmaXgsIFwKQEAgLTk0LDM1ICs5NiwyOSBAQAogCQkJCSAgICAgICB0cnVlKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgV0wxMlhYX0RFRkFVTFRfUlhfQ09ORklHIChDRkdfVU5JX0ZJTFRFUl9FTiB8CVwKKyNkZWZpbmUgV0wxMjcxX0RFRkFVTFRfUlhfQ09ORklHIChDRkdfVU5JX0ZJTFRFUl9FTiB8CVwKIAkJCQkgIENGR19CU1NJRF9GSUxURVJfRU4pCiAKLSNkZWZpbmUgV0wxMlhYX0RFRkFVTFRfUlhfRklMVEVSIChDRkdfUlhfUFJTUF9FTiB8ICBcCi0JCQkJICBDRkdfUlhfTUdNVF9FTiB8ICBcCi0JCQkJICBDRkdfUlhfREFUQV9FTiB8ICBcCi0JCQkJICBDRkdfUlhfQ1RMX0VOIHwgICBcCi0JCQkJICBDRkdfUlhfQkNOX0VOIHwgICBcCi0JCQkJICBDRkdfUlhfQVVUSF9FTiB8ICBcCi0JCQkJICBDRkdfUlhfQVNTT0NfRU4pCisjZGVmaW5lIFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUiAoQ0ZHX1JYX1JDVFNfQUNLIHwgQ0ZHX1JYX1BSU1BfRU4gfCAgXAorCQkJCSAgQ0ZHX1JYX01HTVRfRU4gfCBDRkdfUlhfREFUQV9FTiB8ICAgXAorCQkJCSAgQ0ZHX1JYX0NUTF9FTiB8IENGR19SWF9CQ05fRU4gfCAgICAgXAorCQkJCSAgQ0ZHX1JYX0FVVEhfRU4gfCBDRkdfUlhfQVNTT0NfRU4pCiAKKyNkZWZpbmUgV0wxMjcxX0ZXX05BTUUgIndsMTI3MS1mdy5iaW4iCisjZGVmaW5lIFdMMTI3MV9OVlNfTkFNRSAid2wxMjcxLW52cy5iaW4iCiAKLXN0cnVjdCBib290X2F0dHIgewotCXUzMiByYWRpb190eXBlOwotCXU4IG1hY19jbG9jazsKLQl1OCBhcm1fY2xvY2s7Ci0JaW50IGZpcm13YXJlX2RlYnVnOwotCXUzMiBtaW5vcjsKLQl1MzIgbWFqb3I7Ci0JdTMyIGJ1Z2ZpeDsKKyNkZWZpbmUgV0wxMjcxX0JVU1lfV09SRF9MRU4gOAorCisjZGVmaW5lIFdMMTI3MV9FTFBfSFdfU1RBVEVfQVNMRUVQIDAKKyNkZWZpbmUgV0wxMjcxX0VMUF9IV19TVEFURV9JUlEgICAgMQorCitlbnVtIHdsMTI3MV9zdGF0ZSB7CisJV0wxMjcxX1NUQVRFX09GRiwKKwlXTDEyNzFfU1RBVEVfT04sCisJV0wxMjcxX1NUQVRFX1BMVCwKIH07CiAKLWVudW0gd2wxMnh4X3N0YXRlIHsKLQlXTDEyWFhfU1RBVEVfT0ZGLAotCVdMMTJYWF9TVEFURV9PTiwKLQlXTDEyWFhfU1RBVEVfUExULAotfTsKLQotZW51bSB3bDEyeHhfcGFydGl0aW9uX3R5cGUgeworZW51bSB3bDEyNzFfcGFydGl0aW9uX3R5cGUgewogCVBBUlRfRE9XTiwKIAlQQVJUX1dPUkssCiAJUEFSVF9EUlBXLApAQCAtMTMwLDQ0ICsxMjYsMjUgQEAKIAlQQVJUX1RBQkxFX0xFTgogfTsKIAotc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24geworc3RydWN0IHdsMTI3MV9wYXJ0aXRpb24gewogCXUzMiBzaXplOwogCXUzMiBzdGFydDsKIH07CiAKLXN0cnVjdCB3bDEyeHhfcGFydGl0aW9uX3NldCB7Ci0Jc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24gbWVtOwotCXN0cnVjdCB3bDEyeHhfcGFydGl0aW9uIHJlZzsKK3N0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCB7CisJc3RydWN0IHdsMTI3MV9wYXJ0aXRpb24gbWVtOworCXN0cnVjdCB3bDEyNzFfcGFydGl0aW9uIHJlZzsKIH07CiAKLXN0cnVjdCB3bDEyeHg7CitzdHJ1Y3Qgd2wxMjcxOwogCiAvKiBGSVhNRTogSSdtIG5vdCBzdXJlIGFib3V0IHRoaXMgc3RydWN0dXJlIG5hbWUgKi8KLXN0cnVjdCB3bDEyeHhfY2hpcCB7CitzdHJ1Y3Qgd2wxMjcxX2NoaXAgewogCXUzMiBpZDsKLQotCWNvbnN0IGNoYXIgKmZ3X2ZpbGVuYW1lOwotCWNvbnN0IGNoYXIgKm52c19maWxlbmFtZTsKLQogCWNoYXIgZndfdmVyWzIxXTsKLQotCXVuc2lnbmVkIGludCBwb3dlcl9vbl9zbGVlcDsKLQlpbnQgaW50cl9jbWRfY29tcGxldGU7Ci0JaW50IGludHJfaW5pdF9jb21wbGV0ZTsKLQotCWludCAoKm9wX3VwbG9hZF9mdykoc3RydWN0IHdsMTJ4eCAqd2wpOwotCWludCAoKm9wX3VwbG9hZF9udnMpKHN0cnVjdCB3bDEyeHggKndsKTsKLQlpbnQgKCpvcF9ib290KShzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci0Jdm9pZCAoKm9wX3NldF9lY3B1X2N0cmwpKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgZmxhZyk7Ci0Jdm9pZCAoKm9wX3RhcmdldF9lbmFibGVfaW50ZXJydXB0cykoc3RydWN0IHdsMTJ4eCAqd2wpOwotCWludCAoKm9wX2h3X2luaXQpKHN0cnVjdCB3bDEyeHggKndsKTsKLQlpbnQgKCpvcF9wbHRfaW5pdCkoc3RydWN0IHdsMTJ4eCAqd2wpOwotCi0Jc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb25fc2V0ICpwX3RhYmxlOwotCWVudW0gd2wxMnh4X2FjeF9pbnRfcmVnICphY3hfcmVnX3RhYmxlOwogfTsKIAotc3RydWN0IHdsMTJ4eF9zdGF0cyB7CitzdHJ1Y3Qgd2wxMjcxX3N0YXRzIHsKIAlzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKmZ3X3N0YXRzOwogCXVuc2lnbmVkIGxvbmcgZndfc3RhdHNfdXBkYXRlOwogCkBAIC0xNzUsNyArMTUyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZXhjZXNzaXZlX3JldHJpZXM7CiB9OwogCi1zdHJ1Y3Qgd2wxMnh4X2RlYnVnZnMgeworc3RydWN0IHdsMTI3MV9kZWJ1Z2ZzIHsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290ZGlyOwogCXN0cnVjdCBkZW50cnkgKmZ3X3N0YXRpc3RpY3M7CiAKQEAgLTI3Niw3ICsyNTMsMjggQEAKIAlzdHJ1Y3QgZGVudHJ5ICpleGNlc3NpdmVfcmV0cmllczsKIH07CiAKLXN0cnVjdCB3bDEyeHggeworI2RlZmluZSBOVU1fVFhfUVVFVUVTICAgICAgICAgICAgICA0CisjZGVmaW5lIE5VTV9SWF9QS1RfREVTQyAgICAgICAgICAgIDgKKworLyogRlcgc3RhdHVzIHJlZ2lzdGVycyAqLworc3RydWN0IHdsMTI3MV9md19zdGF0dXMgeworCXUzMiBpbnRyOworCXU4ICBmd19yeF9jb3VudGVyOworCXU4ICBkcnZfcnhfY291bnRlcjsKKwl1OCAgcmVzZXJ2ZWQ7CisJdTggIHR4X3Jlc3VsdHNfY291bnRlcjsKKwl1MzIgcnhfcGt0X2Rlc2NzW05VTV9SWF9QS1RfREVTQ107CisJdTMyIHR4X3JlbGVhc2VkX2Jsa3NbTlVNX1RYX1FVRVVFU107CisJdTMyIGZ3X2xvY2FsdGltZTsKKwl1MzIgcGFkZGluZ1syXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2wxMjcxX3J4X21lbV9wb29sX2FkZHIgeworCXUzMiBhZGRyOworCXUzMiBhZGRyX2V4dHJhOworfTsKKworc3RydWN0IHdsMTI3MSB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJYm9vbCBtYWM4MDIxMV9yZWdpc3RlcmVkOwogCkBAIC0yODUsNyArMjgzLDkgQEAKIAl2b2lkICgqc2V0X3Bvd2VyKShib29sIGVuYWJsZSk7CiAJaW50IGlycTsKIAotCWVudW0gd2wxMnh4X3N0YXRlIHN0YXRlOworCXNwaW5sb2NrX3Qgd2xfbG9jazsKKworCWVudW0gd2wxMjcxX3N0YXRlIHN0YXRlOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAogCWludCBwaHlzaWNhbF9tZW1fYWRkcjsKQEAgLTI5MywxMSArMjkzLDEwIEBACiAJaW50IHZpcnR1YWxfbWVtX2FkZHI7CiAJaW50IHZpcnR1YWxfcmVnX2FkZHI7CiAKLQlzdHJ1Y3Qgd2wxMnh4X2NoaXAgY2hpcDsKKwlzdHJ1Y3Qgd2wxMjcxX2NoaXAgY2hpcDsKIAogCWludCBjbWRfYm94X2FkZHI7CiAJaW50IGV2ZW50X2JveF9hZGRyOwotCXN0cnVjdCBib290X2F0dHIgYm9vdF9hdHRyOwogCiAJdTggKmZ3OwogCXNpemVfdCBmd19sZW47CkBAIC0zMDcsMTQgKzMwNiwyNiBAQAogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggYnNzX3R5cGU7CisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOworCXU4IHNzaWRfbGVuOwogCXU4IGxpc3Rlbl9pbnQ7CiAJaW50IGNoYW5uZWw7CiAKLQl2b2lkICp0YXJnZXRfbWVtX21hcDsKLQlzdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCAqZGF0YV9wYXRoOworCXN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKnRhcmdldF9tZW1fbWFwOwogCi0JLyogTnVtYmVyIG9mIFRYIHBhY2tldHMgdHJhbnNmZXJyZWQgdG8gdGhlIEZXLCBtb2R1bG8gMTYgKi8KLQl1MzIgZGF0YV9pbl9jb3VudDsKKwkvKiBBY2NvdW50aW5nIGZvciBhbGxvY2F0ZWQgLyBhdmFpbGFibGUgVFggYmxvY2tzIG9uIEhXICovCisJdTMyIHR4X2Jsb2Nrc19mcmVlZFtOVU1fVFhfUVVFVUVTXTsKKwl1MzIgdHhfYmxvY2tzX2F2YWlsYWJsZTsKKwl1OCB0eF9yZXN1bHRzX2NvdW50OworCisJLyogVHJhbnNtaXR0ZWQgVFggcGFja2V0cyBjb3VudGVyIGZvciBjaGlwc2V0IGludGVyZmFjZSAqLworCWludCB0eF9wYWNrZXRzX2NvdW50OworCisJLyogVGltZS1vZmZzZXQgYmV0d2VlbiBob3N0IGFuZCBjaGlwc2V0IGNsb2NrcyAqLworCWludCB0aW1lX29mZnNldDsKKworCS8qIFNlc3Npb24gY291bnRlciBmb3IgdGhlIGNoaXBzZXQgKi8KKwlpbnQgc2Vzc2lvbl9jb3VudGVyOwogCiAJLyogRnJhbWVzIHNjaGVkdWxlZCBmb3IgdHJhbnNtaXNzaW9uLCBub3QgaGFuZGxlZCB5ZXQgKi8KIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlOwpAQCAtMzI2LDI1ICszMzcsMTMgQEAKIAkvKiBQZW5kaW5nIFRYIGZyYW1lcyAqLwogCXN0cnVjdCBza19idWZmICp0eF9mcmFtZXNbMTZdOwogCi0JLyoKLQkgKiBJbmRleCBwb2ludGluZyB0byB0aGUgbmV4dCBUWCBjb21wbGV0ZSBlbnRyeQotCSAqIGluIHRoZSBjeWNsaWMgWFQgY29tcGxldGUgYXJyYXkgd2UgZ2V0IGZyb20KLQkgKiB0aGUgRlcuCi0JICovCi0JdTMyIG5leHRfdHhfY29tcGxldGU7Ci0KIAkvKiBGVyBSeCBjb3VudGVyICovCiAJdTMyIHJ4X2NvdW50ZXI7CiAKLQkvKiBSeCBmcmFtZXMgaGFuZGxlZCAqLwotCXUzMiByeF9oYW5kbGVkOwotCi0JLyogQ3VycmVudCBkb3VibGUgYnVmZmVyICovCi0JdTMyIHJ4X2N1cnJlbnRfYnVmZmVyOwotCXUzMiByeF9sYXN0X2lkOworCS8qIFJ4IG1lbW9yeSBwb29sIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgd2wxMjcxX3J4X21lbV9wb29sX2FkZHIgcnhfbWVtX3Bvb2xfYWRkcjsKIAogCS8qIFRoZSB0YXJnZXQgaW50ZXJydXB0IG1hc2sgKi8KLQl1MzIgaW50cl9tYXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfd29yazsKIAogCS8qIFRoZSBtYm94IGV2ZW50IG1hc2sgKi8KQEAgLTM2MiwxNSArMzYxLDE0IEBACiAJLyogRGVmYXVsdCBrZXkgKGZvciBXRVApICovCiAJdTMyIGRlZmF1bHRfa2V5OwogCi0JdW5zaWduZWQgaW50IHR4X21nbXRfZnJtX3JhdGU7Ci0JdW5zaWduZWQgaW50IHR4X21nbXRfZnJtX21vZDsKLQogCXVuc2lnbmVkIGludCByeF9jb25maWc7CiAJdW5zaWduZWQgaW50IHJ4X2ZpbHRlcjsKIAogCS8qIGlzIGZpcm13YXJlIGluIGVscCBtb2RlICovCiAJYm9vbCBlbHA7CiAKKwlzdHJ1Y3QgY29tcGxldGlvbiAqZWxwX2NvbXBsOworCiAJLyogd2UgY2FuIGJlIGluIHBzbSwgYnV0IG5vdCBpbiBlbHAsIHdlIGhhdmUgdG8gZGlmZmVyZW50aWF0ZSAqLwogCWJvb2wgcHNtOwogCkBAIC0zODAsMzAgKzM3OCwzMCBAQAogCS8qIGluIGRCbSAqLwogCWludCBwb3dlcl9sZXZlbDsKIAotCXN0cnVjdCB3bDEyeHhfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IHdsMTJ4eF9kZWJ1Z2ZzIGRlYnVnZnM7CisJc3RydWN0IHdsMTI3MV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3Qgd2wxMjcxX2RlYnVnZnMgZGVidWdmczsKKworCXUzMiBidWZmZXJfMzI7CisJdTMyIGJ1ZmZlcl9jbWQ7CisJdTggYnVmZmVyX2J1c3l3b3JkW1dMMTI3MV9CVVNZX1dPUkRfTEVOXTsKKwlzdHJ1Y3Qgd2wxMjcxX3J4X2Rlc2NyaXB0b3IgKnJ4X2Rlc2NyaXB0b3I7CisKKwlzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqZndfc3RhdHVzOworCXN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2lmICp0eF9yZXNfaWY7CiB9OwogCi1pbnQgd2wxMnh4X3BsdF9zdGFydChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X3BsdF9zdG9wKHN0cnVjdCB3bDEyeHggKndsKTsKK2ludCB3bDEyNzFfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfcGx0X3N0b3Aoc3RydWN0IHdsMTI3MSAqd2wpOwogCi0jZGVmaW5lIERFRkFVTFRfSFdfR0VOX01PRFVMQVRJT05fVFlQRSAgICBDQ0tfTE9ORyAvKiBMb25nIFByZWFtYmxlICovCi0jZGVmaW5lIERFRkFVTFRfSFdfR0VOX1RYX1JBVEUgICAgICAgICAgUkFURV8yTUJQUwogI2RlZmluZSBKT0lOX1RJTUVPVVQgNTAwMCAvKiA1MDAwIG1pbGxpc2Vjb25kcyB0byBqb2luICovCiAKLSNkZWZpbmUgV0wxMlhYX0RFRkFVTFRfUE9XRVJfTEVWRUwgMjAKKyNkZWZpbmUgU0VTU0lPTl9DT1VOVEVSX01BWCA3IC8qIG1heGltdW0gdmFsdWUgZm9yIHRoZSBzZXNzaW9uIGNvdW50ZXIgKi8KIAotI2RlZmluZSBXTDEyWFhfVFhfUVVFVUVfTUFYX0xFTkdUSCAyMAorI2RlZmluZSBXTDEyNzFfREVGQVVMVF9QT1dFUl9MRVZFTCAwCiAKLS8qIERpZmZlcmVudCBjaGlwcyBuZWVkIGRpZmZlcmVudCBzbGVlcCB0aW1lcyBhZnRlciBwb3dlciBvbi4gIFdMMTI3MSBuZWVkcwotICogMjAwbXMsIFdMMTI1MSBuZWVkcyBvbmx5IDEwbXMuICBCeSBkZWZhdWx0IHdlIHVzZSAyMDBtcywgYnV0IGFzIHNvb24gYXMgd2UKLSAqIGtub3cgdGhlIGNoaXAgSUQsIHdlIGNoYW5nZSB0aGUgc2xlZXAgdmFsdWUgaW4gdGhlIHdsMTJ4eCBjaGlwIHN0cnVjdHVyZSwKLSAqIHNvIGluIHN1YnNlcXVlbnQgcG93ZXIgb25zLCB3ZSBkb24ndCB3YXN0ZSBtb3JlIHRpbWUgdGhlbiBuZWVkZWQuICAqLwotI2RlZmluZSBXTDEyWFhfREVGQVVMVF9QT1dFUl9PTl9TTEVFUCAyMDAKKyNkZWZpbmUgV0wxMjcxX1RYX1FVRVVFX01BWF9MRU5HVEggMjAKIAotI2RlZmluZSBDSElQX0lEXzEyNTFfUEcxMAkgICAgICAgICAgICgweDcwMTAxMDEpCi0jZGVmaW5lIENISVBfSURfMTI1MV9QRzExCSAgICAgICAgICAgKDB4NzAyMDEwMSkKLSNkZWZpbmUgQ0hJUF9JRF8xMjUxX1BHMTIJICAgICAgICAgICAoMHg3MDMwMTAxKQotI2RlZmluZSBDSElQX0lEXzEyNzFfUEcxMAkgICAgICAgICAgICgweDQwMzAxMDEpCisvKiBXTDEyNzEgbmVlZHMgYSAyMDBtcyBzbGVlcCBhZnRlciBwb3dlciBvbiAqLworI2RlZmluZSBXTDEyNzFfUE9XRVJfT05fU0xFRVAgMjAwIC8qIGluIG1pbGlzZWNvbmRzICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyMmE0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKQEAgLTAsMCArMSw5NjEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2wxMjcxX2FjeC5oIgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjNy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX3BzLmgiCisKK2ludCB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggd2FrZV91cF9ldmVudCwKKwkJCQkgIHU4IGxpc3Rlbl9pbnRlcnZhbCkKK3sKKwlzdHJ1Y3QgYWN4X3dha2VfdXBfY29uZGl0aW9uICp3YWtlX3VwOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHdha2UgdXAgY29uZGl0aW9ucyIpOworCisJd2FrZV91cCA9IGt6YWxsb2Moc2l6ZW9mKCp3YWtlX3VwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3YWtlX3VwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXdha2VfdXAtPndha2VfdXBfZXZlbnQgPSB3YWtlX3VwX2V2ZW50OworCXdha2VfdXAtPmxpc3Rlbl9pbnRlcnZhbCA9IGxpc3Rlbl9pbnRlcnZhbDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfV0FLRV9VUF9DT05ESVRJT05TLAorCQkJCSAgIHdha2VfdXAsIHNpemVvZigqd2FrZV91cCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjb3VsZCBub3Qgc2V0IHdha2UgdXAgY29uZGl0aW9uczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZSh3YWtlX3VwKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBzbGVlcF9hdXRoKQoreworCXN0cnVjdCBhY3hfc2xlZXBfYXV0aCAqYXV0aDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzbGVlcCBhdXRoIik7CisKKwlhdXRoID0ga3phbGxvYyhzaXplb2YoKmF1dGgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1dGgpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYXV0aC0+c2xlZXBfYXV0aCA9IHNsZWVwX2F1dGg7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NMRUVQX0FVVEgsIGF1dGgsIHNpemVvZigqYXV0aCkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCitvdXQ6CisJa2ZyZWUoYXV0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfZndfdmVyc2lvbihzdHJ1Y3Qgd2wxMjcxICp3bCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBhY3hfcmV2aXNpb24gKnJldjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmdyByZXYiKTsKKworCXJldiA9IGt6YWxsb2Moc2l6ZW9mKCpyZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfRldfUkVWLCByZXYsIHNpemVvZigqcmV2KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIkFDWF9GV19SRVYgaW50ZXJyb2dhdGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGJlIGNhcmVmdWwgd2l0aCB0aGUgYnVmZmVyIHNpemVzICovCisJc3RybmNweShidWYsIHJldi0+ZndfdmVyc2lvbiwgbWluKGxlbiwgc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikpKTsKKworCS8qCisJICogaWYgdGhlIGZpcm13YXJlIHZlcnNpb24gc3RyaW5nIGlzIGV4YWN0bHkKKwkgKiBzaXplb2YocmV2LT5md192ZXJzaW9uKSBsb25nIG9yIGZ3X2xlbiBpcyBsZXNzIHRoYW4KKwkgKiBzaXplb2YocmV2LT5md192ZXJzaW9uKSBpdCB3b24ndCBiZSBudWxsIHRlcm1pbmF0ZWQKKwkgKi8KKwlidWZbbWluKGxlbiwgc2l6ZW9mKHJldi0+ZndfdmVyc2lvbikpIC0gMV0gPSAnXDAnOworCitvdXQ6CisJa2ZyZWUocmV2KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF90eF9wb3dlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IHBvd2VyKQoreworCXN0cnVjdCBhY3hfY3VycmVudF90eF9wb3dlciAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRvdDExX2N1cl90eF9wd3IiKTsKKworCWlmIChwb3dlciA8IDAgfHwgcG93ZXIgPiAyNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5jdXJyZW50X3R4X3Bvd2VyID0gcG93ZXIgKiAxMDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9DVVJfVFhfUFdSLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNvbmZpZ3VyZSBvZiB0eCBwb3dlciBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2ZlYXR1cmVfY29uZmlnICpmZWF0dXJlOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGZlYXR1cmUgY2ZnIik7CisKKwlmZWF0dXJlID0ga3phbGxvYyhzaXplb2YoKmZlYXR1cmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZlYXR1cmUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogREZfRU5DUllQVElPTl9ESVNBQkxFIGFuZCBERl9TTklGRl9NT0RFX0VOQUJMRSBhcmUgZGlzYWJsZWQgKi8KKwlmZWF0dXJlLT5kYXRhX2Zsb3dfb3B0aW9ucyA9IDA7CisJZmVhdHVyZS0+b3B0aW9ucyA9IDA7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0ZFQVRVUkVfQ0ZHLAorCQkJCSAgIGZlYXR1cmUsIHNpemVvZigqZmVhdHVyZSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiQ291bGRudCBzZXQgSFcgZW5jcnlwdGlvbiIpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShmZWF0dXJlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgYWN4X2hlYWRlciAqbWVtX21hcCwKKwkJICAgICAgIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggbWVtIG1hcCIpOworCisJcmV0ID0gd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgQUNYX01FTV9NQVAsIG1lbV9tYXAsIGxlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBsaWZlX3RpbWUpCit7CisJc3RydWN0IGFjeF9yeF9tc2R1X2xpZmV0aW1lICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcnggbXNkdSBsaWZlIHRpbWUiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmxpZmV0aW1lID0gbGlmZV90aW1lOworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9SWF9NU0RVX0xJRkVfVElNRSwKKwkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggbXNkdSBsaWZlIHRpbWU6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9yeF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBjb25maWcsIHUzMiBmaWx0ZXIpCit7CisJc3RydWN0IGFjeF9yeF9jb25maWcgKnJ4X2NvbmZpZzsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCByeCBjb25maWciKTsKKworCXJ4X2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKCpyeF9jb25maWcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X2NvbmZpZykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyeF9jb25maWctPmNvbmZpZ19vcHRpb25zID0gY29uZmlnOworCXJ4X2NvbmZpZy0+ZmlsdGVyX29wdGlvbnMgPSBmaWx0ZXI7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JYX0NGRywKKwkJCQkgICByeF9jb25maWcsIHNpemVvZigqcnhfY29uZmlnKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X2NvbmZpZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfcGRfdGhyZXNob2xkKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfcGFja2V0X2RldGVjdGlvbiAqcGQ7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZGF0YSBwZCB0aHJlc2hvbGQiKTsKKworCXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRTogdGhyZXNob2xkIHZhbHVlIG5vdCBzZXQgKi8KKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUERfVEhSRVNIT0xELCBwZCwgc2l6ZW9mKCpwZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHBkIHRocmVzaG9sZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfYWN4X3Nsb3Qoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3Nsb3RfdHlwZSBzbG90X3RpbWUpCit7CisJc3RydWN0IGFjeF9zbG90ICpzbG90OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHNsb3QiKTsKKworCXNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOworCWlmICghc2xvdCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlzbG90LT53b25lX2luZGV4ID0gU1RBVElPTl9XT05FX0lOREVYOworCXNsb3QtPnNsb3RfdGltZSA9IHNsb3RfdGltZTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0xPVCwgc2xvdCwgc2l6ZW9mKCpzbG90KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2xvdCB0aW1lOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHNsb3QpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfZG90MTFfZ3JwX2FkZHJfdGJsICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggZ3JvdXAgYWRkcmVzcyB0YmwiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNQUMgZmlsdGVyaW5nICovCisJYWN4LT5lbmFibGVkID0gMDsKKwlhY3gtPm51bV9ncm91cHMgPSAwOworCW1lbXNldChhY3gtPm1hY190YWJsZSwgMCwgQUREUkVTU19HUk9VUF9NQVhfTEVOKTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBET1QxMV9HUk9VUF9BRERSRVNTX1RCTCwKKwkJCQkgICBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgZ3JvdXAgYWRkciB0YWJsZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9yeF90aW1lb3V0ICpyeF90aW1lb3V0OworCWludCByZXQ7CisKKwlyeF90aW1lb3V0ID0ga3phbGxvYyhzaXplb2YoKnJ4X3RpbWVvdXQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3RpbWVvdXQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZXJ2aWNlIHBlcmlvZCB0aW1lb3V0Iik7CisKKwlyeF90aW1lb3V0LT5wc19wb2xsX3RpbWVvdXQgPSBSWF9USU1FT1VUX1BTX1BPTExfREVGOworCXJ4X3RpbWVvdXQtPnVwc2RfdGltZW91dCA9IFJYX1RJTUVPVVRfVVBTRF9ERUY7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFUlZJQ0VfUEVSSU9EX1RJTUVPVVQsCisJCQkJICAgcnhfdGltZW91dCwgc2l6ZW9mKCpyeF90aW1lb3V0KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgc2VydmljZSBwZXJpb2QgdGltZW91dDogJWQiLAorCQkJICAgICAgIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X3RpbWVvdXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBydHNfdGhyZXNob2xkKQoreworCXN0cnVjdCBhY3hfcnRzX3RocmVzaG9sZCAqcnRzOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJ0cyB0aHJlc2hvbGQiKTsKKworCXJ0cyA9IGt6YWxsb2Moc2l6ZW9mKCpydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ0cykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlydHMtPnRocmVzaG9sZCA9IHJ0c190aHJlc2hvbGQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgRE9UMTFfUlRTX1RIUkVTSE9MRCwgcnRzLCBzaXplb2YoKnJ0cykpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHJ0cyB0aHJlc2hvbGQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUocnRzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9maWx0ZXJfb3B0aW9uICpiZWFjb25fZmlsdGVyOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJlYWNvbiBmaWx0ZXIgb3B0Iik7CisKKwliZWFjb25fZmlsdGVyID0ga3phbGxvYyhzaXplb2YoKmJlYWNvbl9maWx0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJlYWNvbl9maWx0ZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYmVhY29uX2ZpbHRlci0+ZW5hYmxlID0gMDsKKwliZWFjb25fZmlsdGVyLT5tYXhfbnVtX2JlYWNvbnMgPSAwOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CRUFDT05fRklMVEVSX09QVCwKKwkJCQkgICBiZWFjb25fZmlsdGVyLCBzaXplb2YoKmJlYWNvbl9maWx0ZXIpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBiZWFjb24gZmlsdGVyIG9wdDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShiZWFjb25fZmlsdGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYmVhY29uX2ZpbHRlcl9pZV90YWJsZSAqaWVfdGFibGU7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYmVhY29uIGZpbHRlciB0YWJsZSIpOworCisJaWVfdGFibGUgPSBremFsbG9jKHNpemVvZigqaWVfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWllX3RhYmxlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWllX3RhYmxlLT5udW1faWUgPSAwOworCW1lbXNldChpZV90YWJsZS0+dGFibGUsIDAsIEJFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkUpOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9CRUFDT05fRklMVEVSX1RBQkxFLAorCQkJCSAgIGllX3RhYmxlLCBzaXplb2YoKmllX3RhYmxlKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYmVhY29uIGZpbHRlciB0YWJsZTogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShpZV90YWJsZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc2dfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4ICpwdGE7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc2cgZW5hYmxlIik7CisKKwlwdGEgPSBremFsbG9jKHNpemVvZigqcHRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwdGEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcHRhLT5lbmFibGUgPSBTR19FTkFCTEU7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NHX0VOQUJMRSwgcHRhLCBzaXplb2YoKnB0YSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNvZnRnZW1pbmkgZW5hYmxlOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHB0YSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfYnRfd2xhbl9jb2V4X3BhcmFtICpwYXJhbTsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzZyBjZmciKTsKKworCXBhcmFtID0ga3phbGxvYyhzaXplb2YoKnBhcmFtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJhbSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBCVC1XTEFOIGNvZXh0IHBhcmFtZXRlcnMgKi8KKwlwYXJhbS0+bWluX3JhdGUgPSBSQVRFX0lOREVYXzI0TUJQUzsKKwlwYXJhbS0+YnRfaHBfbWF4X3RpbWUgPSBQVEFfQlRfSFBfTUFYVElNRV9ERUY7CisJcGFyYW0tPndsYW5faHBfbWF4X3RpbWUgPSBQVEFfV0xBTl9IUF9NQVhfVElNRV9ERUY7CisJcGFyYW0tPnNlbnNlX2Rpc2FibGVfdGltZXIgPSBQVEFfU0VOU0VfRElTQUJMRV9USU1FUl9ERUY7CisJcGFyYW0tPnJ4X3RpbWVfYnRfaHAgPSBQVEFfUFJPVEVDVElWRV9SWF9USU1FX0RFRjsKKwlwYXJhbS0+dHhfdGltZV9idF9ocCA9IFBUQV9QUk9URUNUSVZFX1RYX1RJTUVfREVGOworCXBhcmFtLT5yeF90aW1lX2J0X2hwX2Zhc3QgPSBQVEFfUFJPVEVDVElWRV9SWF9USU1FX0ZBU1RfREVGOworCXBhcmFtLT50eF90aW1lX2J0X2hwX2Zhc3QgPSBQVEFfUFJPVEVDVElWRV9UWF9USU1FX0ZBU1RfREVGOworCXBhcmFtLT53bGFuX2N5Y2xlX2Zhc3QgPSBQVEFfQ1lDTEVfVElNRV9GQVNUX0RFRjsKKwlwYXJhbS0+YnRfYW50aV9zdGFydmF0aW9uX3BlcmlvZCA9IFBUQV9BTlRJX1NUQVJWRV9QRVJJT0RfREVGOworCXBhcmFtLT5uZXh0X2J0X2xwX3BhY2tldCA9IFBUQV9USU1FT1VUX05FWFRfQlRfTFBfUEFDS0VUX0RFRjsKKwlwYXJhbS0+d2FrZV91cF9iZWFjb24gPSBQVEFfVElNRV9CRUZPUkVfQkVBQ09OX0RFRjsKKwlwYXJhbS0+aHBfZG1fbWF4X2d1YXJkX3RpbWUgPSBQVEFfSFBETV9NQVhfVElNRV9ERUY7CisJcGFyYW0tPm5leHRfd2xhbl9wYWNrZXQgPSBQVEFfVElNRV9PVVRfTkVYVF9XTEFOX0RFRjsKKwlwYXJhbS0+YW50ZW5uYV90eXBlID0gUFRBX0FOVEVOTkFfVFlQRV9ERUY7CisJcGFyYW0tPnNpZ25hbF90eXBlID0gUFRBX1NJR05BTElOR19UWVBFX0RFRjsKKwlwYXJhbS0+YWZoX2xldmVyYWdlX29uID0gUFRBX0FGSF9MRVZFUkFHRV9PTl9ERUY7CisJcGFyYW0tPnF1aWV0X2N5Y2xlX251bSA9IFBUQV9OVU1CRVJfUVVJRVRfQ1lDTEVfREVGOworCXBhcmFtLT5tYXhfY3RzID0gUFRBX01BWF9OVU1fQ1RTX0RFRjsKKwlwYXJhbS0+d2xhbl9wYWNrZXRzX251bSA9IFBUQV9OVU1CRVJfT0ZfV0xBTl9QQUNLRVRTX0RFRjsKKwlwYXJhbS0+YnRfcGFja2V0c19udW0gPSBQVEFfTlVNQkVSX09GX0JUX1BBQ0tFVFNfREVGOworCXBhcmFtLT5taXNzZWRfcnhfYXZhbGFuY2hlID0gUFRBX1JYX0ZPUl9BVkFMQU5DSEVfREVGOworCXBhcmFtLT53bGFuX2VscF9ocCA9IFBUQV9FTFBfSFBfREVGOworCXBhcmFtLT5idF9hbnRpX3N0YXJ2YXRpb25fY3ljbGVzID0gUFRBX0FOVElfU1RBUlZFX05VTV9DWUNMRV9ERUY7CisJcGFyYW0tPmFja19tb2RlX2R1YWxfYW50ID0gUFRBX0FDS19NT0RFX0RFRjsKKwlwYXJhbS0+cGFfc2RfZW5hYmxlID0gUFRBX0FMTE9XX1BBX1NEX0RFRjsKKwlwYXJhbS0+cHRhX2F1dG9fbW9kZV9lbmFibGUgPSBQVEFfQVVUT19NT0RFX05PX0NUU19ERUY7CisJcGFyYW0tPmJ0X2hwX3Jlc3BlY3RlZF9udW0gPSBQVEFfQlRfSFBfUkVTUEVDVEVEX0RFRjsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfU0dfQ0ZHLCBwYXJhbSwgc2l6ZW9mKCpwYXJhbSkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNnIGNvbmZpZzogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfY2NhX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2VuZXJneV9kZXRlY3Rpb24gKmRldGVjdGlvbjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBjY2EgdGhyZXNob2xkIik7CisKKwlkZXRlY3Rpb24gPSBremFsbG9jKHNpemVvZigqZGV0ZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXRlY3Rpb24pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGV0ZWN0aW9uLT5yeF9jY2FfdGhyZXNob2xkID0gQ0NBX1RIUlNIX0RJU0FCTEVfRU5FUkdZX0Q7CisJZGV0ZWN0aW9uLT50eF9lbmVyZ3lfZGV0ZWN0aW9uID0gMDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQ0NBX1RIUkVTSE9MRCwKKwkJCQkgICBkZXRlY3Rpb24sIHNpemVvZigqZGV0ZWN0aW9uKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgY2NhIHRocmVzaG9sZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworb3V0OgorCWtmcmVlKGRldGVjdGlvbik7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X2JlYWNvbl9icm9hZGNhc3QgKmJiOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGJjbiBkdGltIG9wdGlvbnMiKTsKKworCWJiID0ga3phbGxvYyhzaXplb2YoKmJiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiYikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliYi0+YmVhY29uX3J4X3RpbWVvdXQgPSBCQ05fUlhfVElNRU9VVF9ERUZfVkFMVUU7CisJYmItPmJyb2FkY2FzdF90aW1lb3V0ID0gQlJPQURDQVNUX1JYX1RJTUVPVVRfREVGX1ZBTFVFOworCWJiLT5yeF9icm9hZGNhc3RfaW5fcHMgPSBSWF9CUk9BRENBU1RfSU5fUFNfREVGX1ZBTFVFOworCWJiLT5wc19wb2xsX3RocmVzaG9sZCA9IENPTlNFQ1VUSVZFX1BTX1BPTExfRkFJTFVSRV9ERUY7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0JDTl9EVElNX09QVElPTlMsIGJiLCBzaXplb2YoKmJiKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgcnggY29uZmlnOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGJiKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9haWQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpCit7CisJc3RydWN0IGFjeF9haWQgKmFjeF9haWQ7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWlkIik7CisKKwlhY3hfYWlkID0ga3phbGxvYyhzaXplb2YoKmFjeF9haWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeF9haWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4X2FpZC0+YWlkID0gYWlkOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9BSUQsIGFjeF9haWQsIHNpemVvZigqYWN4X2FpZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IGFpZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3hfYWlkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9ldmVudF9tYm94X21hc2soc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBldmVudF9tYXNrKQoreworCXN0cnVjdCBhY3hfZXZlbnRfbWFzayAqbWFzazsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBldmVudCBtYm94IG1hc2siKTsKKworCW1hc2sgPSBremFsbG9jKHNpemVvZigqbWFzayksIEdGUF9LRVJORUwpOworCWlmICghbWFzaykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBoaWdoIGV2ZW50IG1hc2sgaXMgdW51c2VkICovCisJbWFzay0+aGlnaF9ldmVudF9tYXNrID0gMHhmZmZmZmZmZjsKKworCW1hc2stPmV2ZW50X21hc2sgPSBldmVudF9tYXNrOworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9FVkVOVF9NQk9YX01BU0ssCisJCQkJICAgbWFzaywgc2l6ZW9mKCptYXNrKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImZhaWxlZCB0byBzZXQgYWN4X2V2ZW50X21ib3hfbWFzazogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShtYXNrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpCit7CisJc3RydWN0IGFjeF9wcmVhbWJsZSAqYWN4OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4X3NldF9wcmVhbWJsZSIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+cHJlYW1ibGUgPSBwcmVhbWJsZTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUFJFQU1CTEVfVFlQRSwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHByZWFtYmxlIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHN0cnVjdCB3bDEyNzEgKndsLAorCQkJICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpCit7CisJc3RydWN0IGFjeF9jdHNwcm90ZWN0ICphY3g7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3hfc2V0X2N0c3Byb3RlY3QiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmN0c3Byb3RlY3QgPSBjdHNwcm90ZWN0OworCisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9DVFNfUFJPVEVDVElPTiwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIGN0c3Byb3RlY3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cykKK3sKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBzdGF0aXN0aWNzIik7CisKKwlyZXQgPSB3bDEyNzFfY21kX2ludGVycm9nYXRlKHdsLCBBQ1hfU1RBVElTVElDUywgc3RhdHMsCisJCQkJICAgICBzaXplb2YoKnN0YXRzKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBzdGF0aXN0aWNzIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3JhdGVfcG9saWN5ICphY3g7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IHJhdGUgcG9saWNpZXMiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNvbmZpZ3VyZSBvbmUgZGVmYXVsdCAob25lLXNpemUtZml0cy1hbGwpIHJhdGUgY2xhc3MgKi8KKwlhY3gtPnJhdGVfY2xhc3NfY250ID0gMTsKKwlhY3gtPnJhdGVfY2xhc3NbMF0uZW5hYmxlZF9yYXRlcyA9IEFDWF9SQVRFX01BU0tfQUxMOworCWFjeC0+cmF0ZV9jbGFzc1swXS5zaG9ydF9yZXRyeV9saW1pdCA9IEFDWF9SQVRFX1JFVFJZX0xJTUlUOworCWFjeC0+cmF0ZV9jbGFzc1swXS5sb25nX3JldHJ5X2xpbWl0ID0gQUNYX1JBVEVfUkVUUllfTElNSVQ7CisJYWN4LT5yYXRlX2NsYXNzWzBdLmFmbGFncyA9IDA7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JBVEVfUE9MSUNZLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgcmF0ZSBwb2xpY2llcyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2FjeF9hY19jZmcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9hY19jZmcgKmFjeDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWNjZXNzIGNhdGVnb3J5IGNvbmZpZyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBGSVhNRTogQ29uZmlndXJlIGVhY2ggQUMgd2l0aCBhcHByb3ByaWF0ZSB2YWx1ZXMgKG1vc3Qgc3VpdGFibGUKKwkgKiB2YWx1ZXMgd2lsbCBwcm9iYWJseSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggQUMuCisJICovCisJZm9yIChpID0gMDsgaSA8IFdMMTI3MV9BQ1hfQUNfQ09VTlQ7IGkrKykgeworCQlhY3gtPmFjID0gaTsKKworCQkvKgorCQkgKiBGSVhNRTogVGhlIGZvbGxvd2luZyBkZWZhdWx0IHZhbHVlcyBvcmlnaW5hdGUgZnJvbQorCQkgKiB0aGUgVEkgcmVmZXJlbmNlIGRyaXZlci4gV2hhdCBkbyB0aGV5IG1lYW4/CisJCSAqLworCQlhY3gtPmN3X21pbiA9IDE1OworCQlhY3gtPmN3X21heCA9IDYzOworCQlhY3gtPmFpZnNuID0gMzsKKwkJYWN4LT5yZXNlcnZlZCA9IDA7CisJCWFjeC0+dHhfb3BfbGltaXQgPSAwOworCisJCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUNfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfd2FybmluZygiU2V0dGluZyBvZiBhY2Nlc3MgY2F0ZWdvcnkgIgorCQkJCSAgICAgICAiY29uZmlnOiAlZCIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3QgYWN4X3RpZF9jb25maWcgKmFjeDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdGlkIGNvbmZpZyIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRklYTUU6IGNvbmZpZ3VyZSBlYWNoIFRJRCB3aXRoIGEgZGlmZmVyZW50IEFDIHJlZmVyZW5jZSAqLworCWZvciAoaSA9IDA7IGkgPCBXTDEyNzFfQUNYX1RJRF9DT1VOVDsgaSsrKSB7CisJCWFjeC0+cXVldWVfaWQgPSBpOworCQlhY3gtPnRzaWQgPSBXTDEyNzFfQUNYX0FDX0JFOworCQlhY3gtPnBzX3NjaGVtZSA9IFdMMTI3MV9BQ1hfUFNfU0NIRU1FX0xFR0FDWTsKKwkJYWN4LT5hY2tfcG9saWN5ID0gV0wxMjcxX0FDWF9BQ0tfUE9MSUNZX0xFR0FDWTsKKworCQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1RJRF9DRkcsIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHRpZCBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IGFjeF9mcmFnX3RocmVzaG9sZCAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBmcmFnIHRocmVzaG9sZCIpOworCisJYWN4ID0ga3phbGxvYyhzaXplb2YoKmFjeCksIEdGUF9LRVJORUwpOworCisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5mcmFnX3RocmVzaG9sZCA9IElFRUU4MDIxMV9NQVhfRlJBR19USFJFU0hPTEQ7CisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9GUkFHX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIGZyYWcgdGhyZXNob2xkIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShhY3gpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X3R4X2NvbmZpZ19vcHRpb25zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfdHhfY29uZmlnX29wdGlvbnMgKmFjeDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdHggY29uZmlnIG9wdGlvbnMiKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+dHhfY29tcGxfdGltZW91dCA9IFdMMTI3MV9BQ1hfVFhfQ09NUExfVElNRU9VVDsKKwlhY3gtPnR4X2NvbXBsX3RocmVzaG9sZCA9IFdMMTI3MV9BQ1hfVFhfQ09NUExfVEhSRVNIT0xEOworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVFhfQ09ORklHX09QVCwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJTZXR0aW5nIG9mIHR4IG9wdGlvbnMgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9jb25maWdfbWVtb3J5ICptZW1fY29uZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSBtZW0gY2ZnIik7CisKKwltZW1fY29uZiA9IGt6YWxsb2Moc2l6ZW9mKCptZW1fY29uZiksIEdGUF9LRVJORUwpOworCWlmICghbWVtX2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbWVtb3J5IGNvbmZpZyAqLworCW1lbV9jb25mLT5udW1fc3RhdGlvbnMgPSBjcHVfdG9fbGUxNihERUZBVUxUX05VTV9TVEFUSU9OUyk7CisJbWVtX2NvbmYtPnJ4X21lbV9ibG9ja19udW0gPSBBQ1hfUlhfTUVNX0JMT0NLUzsKKwltZW1fY29uZi0+dHhfbWluX21lbV9ibG9ja19udW0gPSBBQ1hfVFhfTUlOX01FTV9CTE9DS1M7CisJbWVtX2NvbmYtPm51bV9zc2lkX3Byb2ZpbGVzID0gQUNYX05VTV9TU0lEX1BST0ZJTEVTOworCW1lbV9jb25mLT50b3RhbF90eF9kZXNjcmlwdG9ycyA9IEFDWF9UWF9ERVNDUklQVE9SUzsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfTUVNX0NGRywgbWVtX2NvbmYsCisJCQkJICAgc2l6ZW9mKCptZW1fY29uZikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzEgbWVtIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUobWVtX2NvbmYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfYWN4X2luaXRfbWVtX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9tZW1fY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXdsLT50YXJnZXRfbWVtX21hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXApLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghd2wtPnRhcmdldF9tZW1fbWFwKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGRuJ3QgYWxsb2NhdGUgdGFyZ2V0IG1lbW9yeSBtYXAiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogd2Ugbm93IGFzayBmb3IgdGhlIGZpcm13YXJlIGJ1aWx0IG1lbW9yeSBtYXAgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X21lbV9tYXAod2wsICh2b2lkICopd2wtPnRhcmdldF9tZW1fbWFwLAorCQkJCSBzaXplb2Yoc3RydWN0IHdsMTI3MV9hY3hfbWVtX21hcCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGRuJ3QgcmV0cmlldmUgZmlybXdhcmUgbWVtb3J5IG1hcCIpOworCQlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCQl3bC0+dGFyZ2V0X21lbV9tYXAgPSBOVUxMOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIGluaXRpYWxpemUgVFggYmxvY2sgYm9vayBrZWVwaW5nICovCisJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgPSB3bC0+dGFyZ2V0X21lbV9tYXAtPm51bV90eF9tZW1fYmxvY2tzOworCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgImF2YWlsYWJsZSB0eCBibG9ja3M6ICVkIiwKKwkJICAgICB3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfcnhfY29uZmlnX29wdCAqcnhfY29uZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgIndsMTI3MSByeCBpbnRlcnJ1cHQgY29uZmlnIik7CisKKwlyeF9jb25mID0ga3phbGxvYyhzaXplb2YoKnJ4X2NvbmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X2NvbmYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcnhfY29uZi0+dGhyZXNob2xkID0gV0wxMjcxX1JYX0lOVFJfVEhSRVNIT0xEX0RFRjsKKwlyeF9jb25mLT50aW1lb3V0ID0gV0wxMjcxX1JYX0lOVFJfVElNRU9VVF9ERUY7CisJcnhfY29uZi0+bWJsa190aHJlc2hvbGQgPSBVU0hPUlRfTUFYOyAvKiBEaXNhYmxlZCAqLworCXJ4X2NvbmYtPnF1ZXVlX3R5cGUgPSBSWF9RVUVVRV9UWVBFX1JYX0xPV19QUklPUklUWTsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUlhfQ09ORklHX09QVCwgcnhfY29uZiwKKwkJCQkgICBzaXplb2YoKnJ4X2NvbmYpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygid2wxMjcxIHJ4IGNvbmZpZyBvcHQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHJ4X2NvbmYpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oCnNpbWlsYXJpdHkgaW5kZXggNzMlCmNvcHkgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvYWN4LmgKY29weSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oCmluZGV4IGZiMmQyMzQuLjkwNjhkYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9hY3guaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjIsMTQgKzIyLDU3IEBACiAgKgogICovCiAKLSNpZm5kZWYgX19XTDEyWFhfQUNYX0hfXwotI2RlZmluZSBfX1dMMTJYWF9BQ1hfSF9fCisjaWZuZGVmIF9fV0wxMjcxX0FDWF9IX18KKyNkZWZpbmUgX19XTDEyNzFfQUNYX0hfXwogCi0jaW5jbHVkZSAid2wxMnh4LmgiCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMjcxX2NtZC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgSG9zdCBJbnRlcnJ1cHQgUmVnaXN0ZXIgKFdpTGluayAtPiBIb3N0KQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEhXIEluaXRpYXRlZCBpbnRlcnJ1cHQgV2F0Y2hkb2cgdGltZXIgZXhwaXJhdGlvbiAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfV0FUQ0hET0cgICAgICAgICAgIEJJVCgwKQorLyogSW5pdCBzZXF1ZW5jZSBpcyBkb25lIChtYXNrZWQgaW50ZXJydXB0LCBkZXRlY3Rpb24gdGhyb3VnaCBwb2xsaW5nIG9ubHkgKSAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSAgICAgIEJJVCgxKQorLyogRXZlbnQgd2FzIGVudGVyZWQgdG8gRXZlbnQgTUJPWCAjQSovCisjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BICAgICAgICAgICAgQklUKDIpCisvKiBFdmVudCB3YXMgZW50ZXJlZCB0byBFdmVudCBNQk9YICNCKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0IgICAgICAgICAgICBCSVQoMykKKy8qIENvbW1hbmQgcHJvY2Vzc2luZyBjb21wbGV0aW9uKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0NNRF9DT01QTEVURSAgICAgICBCSVQoNCkKKy8qIFNpZ25hbGluZyB0aGUgaG9zdCBvbiBIVyB3YWtldXAgKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSAgICAgICBCSVQoNSkKKy8qIFRoZSBNSVNDIGJpdCBpcyB1c2VkIGZvciBhZ2dyZWdhdGlvbiBvZiBSWCwgVHhDb21wbGV0ZSBhbmQgVFggcmF0ZSB1cGRhdGUgKi8KKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0RBVEEgICAgICAgICAgICAgICBCSVQoNikKKy8qIFRyYWNlIG1lYXNzZ2Ugb24gTUJPWCAjQSAqLworI2RlZmluZSBXTDEyNzFfQUNYX0lOVFJfVFJBQ0VfQSAgICAgICAgICAgIEJJVCg3KQorLyogVHJhY2UgbWVhc3NnZSBvbiBNQk9YICNCICovCisjZGVmaW5lIFdMMTI3MV9BQ1hfSU5UUl9UUkFDRV9CICAgICAgICAgICAgQklUKDgpCisKKyNkZWZpbmUgV0wxMjcxX0FDWF9JTlRSX0FMTAkJICAgMHhGRkZGRkZGRgorI2RlZmluZSBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SICAgICAgIChXTDEyNzFfQUNYX0lOVFJfV0FUQ0hET0cgICAgICB8IFwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0VWRU5UX0EgICAgICAgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQiAgICAgICB8IFwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUgIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0hXX0FWQUlMQUJMRSAgfCBcCisJCQkJCSAgICBXTDEyNzFfQUNYX0lOVFJfREFUQSkKKworI2RlZmluZSBXTDEyNzFfSU5UUl9NQVNLICAgICAgICAgICAgICAgICAgIChXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSB8CVwKKwkJCQkJICAgIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CIHwgXAorCQkJCQkgICAgV0wxMjcxX0FDWF9JTlRSX0RBVEEpCiAKIC8qIFRhcmdldCdzIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KIHN0cnVjdCBhY3hfaGVhZGVyIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgY21kOworCisJLyogYWN4IChvciBpbmZvcm1hdGlvbiBlbGVtZW50KSBoZWFkZXIgKi8KIAl1MTYgaWQ7CisKKwkvKiBwYXlsb2FkIGxlbmd0aCAobm90IGluY2x1ZGluZyBoZWFkZXJzICovCiAJdTE2IGxlbjsKIH07CiAKQEAgLTg1LDE1ICsxMjgsMTUgQEAKIAl1MzIgaHdfdmVyc2lvbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1lbnVtIHdsMTJ4eF9wc21fbW9kZSB7CitlbnVtIHdsMTI3MV9wc21fbW9kZSB7CiAJLyogQWN0aXZlIG1vZGUgKi8KLQlXTDEyWFhfUFNNX0NBTSA9IDAsCisJV0wxMjcxX1BTTV9DQU0gPSAwLAogCiAJLyogUG93ZXIgc2F2ZSBtb2RlICovCi0JV0wxMlhYX1BTTV9QUyA9IDEsCisJV0wxMjcxX1BTTV9QUyA9IDEsCiAKIAkvKiBFeHRyZW1lIGxvdyBwb3dlciAqLwotCVdMMTJYWF9QU01fRUxQID0gMiwKKwlXTDEyNzFfUFNNX0VMUCA9IDIsCiB9OwogCiBzdHJ1Y3QgYWN4X3NsZWVwX2F1dGggewpAQCAtMTA3LDI1ICsxNTAsNiBAQAogCXU4ICBwYWRkaW5nWzNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgVElNX0VMRV9JRCAgICA1Ci0jZGVmaW5lIFBBUlRJQUxfVkJNX01BWCAgICAyNTEKLQotc3RydWN0IHRpbSB7Ci0JdTggaWRlbnRpdHk7Ci0JdTggbGVuZ3RoOwotCXU4IGR0aW1fY291bnQ7Ci0JdTggZHRpbV9wZXJpb2Q7Ci0JdTggYml0bWFwX2N0cmw7Ci0JdTggcHZiX2ZpZWxkW1BBUlRJQUxfVkJNX01BWF07IC8qIFBhcnRpYWwgVmlydHVhbCBCaXRtYXAgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBWaXJ0dWFsIEJpdCBNYXAgdXBkYXRlICovCi1zdHJ1Y3QgdmJtX3VwZGF0ZV9yZXF1ZXN0IHsKLQlfX2xlMTYgbGVuOwotCXU4ICBwYWRkaW5nWzJdOwotCXN0cnVjdCB0aW0gdGltOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIGVudW0gewogCUhPU1RJRl9QQ0lfTUFTVEVSX0hPU1RfSU5ESVJFQ1QsCiAJSE9TVElGX1BDSV9NQVNURVJfSE9TVF9ESVJFQ1QsCkBAIC0xNDgsNTMgKzE3Miw2IEBACiAjZGVmaW5lICBEUF9UWF9DT01QTEVURV9USU1FX09VVCAyMAogI2RlZmluZSAgRldfVFhfQ01QTFRfQkxPQ0tfU0laRSAxNgogCi1zdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXMgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXUxNiByeF9wYWNrZXRfcmluZ19jaHVua19zaXplOwotCXUxNiB0eF9wYWNrZXRfcmluZ19jaHVua19zaXplOwotCi0JdTggcnhfcGFja2V0X3JpbmdfY2h1bmtfbnVtOwotCXU4IHR4X3BhY2tldF9yaW5nX2NodW5rX251bTsKLQotCS8qCi0JICogTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGNhbiBiZSBnYXRoZXJlZAotCSAqIGluIHRoZSBUWCBjb21wbGV0ZSByaW5nIGJlZm9yZSBhbiBpbnRlcnJ1cHQKLQkgKiBpcyBnZW5lcmF0ZWQuCi0JICovCi0JdTggdHhfY29tcGxldGVfdGhyZXNob2xkOwotCi0JLyogTnVtYmVyIG9mIHBlbmRpbmcgVFggY29tcGxldGUgZW50cmllcyBpbiBjeWNsaWMgcmluZy4qLwotCXU4IHR4X2NvbXBsZXRlX3JpbmdfZGVwdGg7Ci0KLQkvKgotCSAqIE1heCBudW0gbWljcm9zZWNvbmRzIHNpbmNlIGEgcGFja2V0IGVudGVycyB0aGUgVFgKLQkgKiBjb21wbGV0ZSByaW5nIHVudGlsIGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCi0JICovCi0JdTMyIHR4X2NvbXBsZXRlX3RpbWVvdXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi1zdHJ1Y3QgYWN4X2RhdGFfcGF0aF9wYXJhbXNfcmVzcCB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTE2IHJ4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7Ci0JdTE2IHR4X3BhY2tldF9yaW5nX2NodW5rX3NpemU7Ci0KLQl1OCByeF9wYWNrZXRfcmluZ19jaHVua19udW07Ci0JdTggdHhfcGFja2V0X3JpbmdfY2h1bmtfbnVtOwotCi0JdTggcGFkWzJdOwotCi0JdTMyIHJ4X3BhY2tldF9yaW5nX2FkZHI7Ci0JdTMyIHR4X3BhY2tldF9yaW5nX2FkZHI7Ci0KLQl1MzIgcnhfY29udHJvbF9hZGRyOwotCXUzMiB0eF9jb250cm9sX2FkZHI7Ci0KLQl1MzIgdHhfY29tcGxldGVfYWRkcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiAjZGVmaW5lIFRYX01TRFVfTElGRVRJTUVfTUlOICAgICAgIDAKICNkZWZpbmUgVFhfTVNEVV9MSUZFVElNRV9NQVggICAgICAgMzAwMAogI2RlZmluZSBUWF9NU0RVX0xJRkVUSU1FX0RFRiAgICAgICA1MTIKQEAgLTIwMiw3ICsxNzksNyBAQAogI2RlZmluZSBSWF9NU0RVX0xJRkVUSU1FX01BWCAgICAgICAweEZGRkZGRkZGCiAjZGVmaW5lIFJYX01TRFVfTElGRVRJTUVfREVGICAgICAgIDUxMjAwMAogCi1zdHJ1Y3QgcnhfbXNkdV9saWZldGltZSB7CitzdHJ1Y3QgYWN4X3J4X21zZHVfbGlmZXRpbWUgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIAogCS8qCkBAIC0yMTgsMzkgKzE5NSwzOSBAQAogICogPT09CQk9PT09PT09PT09CiAgKiAzMToxNAkJUmVzZXJ2ZWQKICAqIDEzCQlDb3B5IFJYIFN0YXR1cyAtIHdoZW4gc2V0LCB3cml0ZSB0aHJlZSByZWNlaXZlIHN0YXR1cyB3b3JkcwotICogCSAJdG8gdG9wIG9mIHJ4J2QgTVBEVXMuCi0gKiAJCVdoZW4gY2xlYXJlZCwgZG8gbm90IHdyaXRlIHRocmVlIHN0YXR1cyB3b3JkcyAoYWRkZWQgcmV2IDEuNSkKKyAqCQl0byB0b3Agb2YgcngnZCBNUERVcy4KKyAqCQlXaGVuIGNsZWFyZWQsIGRvIG5vdCB3cml0ZSB0aHJlZSBzdGF0dXMgd29yZHMgKGFkZGVkIHJldiAxLjUpCiAgKiAxMgkJUmVzZXJ2ZWQKICAqIDExCQlSWCBDb21wbGV0ZSB1cG9uIEZDUyBlcnJvciAtIHdoZW4gc2V0LCBnaXZlIHJ4IGNvbXBsZXRlCi0gKgkgCWludGVycnVwdCBmb3IgRkNTIGVycm9ycywgYWZ0ZXIgdGhlIHJ4IGZpbHRlcmluZywgZS5nLiB1bmljYXN0Ci0gKgkgCWZyYW1lcyBub3QgdG8gdXMgd2l0aCBGQ1MgZXJyb3Igd2lsbCBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgorICoJCWludGVycnVwdCBmb3IgRkNTIGVycm9ycywgYWZ0ZXIgdGhlIHJ4IGZpbHRlcmluZywgZS5nLiB1bmljYXN0CisgKgkJZnJhbWVzIG5vdCB0byB1cyB3aXRoIEZDUyBlcnJvciB3aWxsIG5vdCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuCiAgKiAxMAkJU1NJRCBGaWx0ZXIgRW5hYmxlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgZGlzY2FyZHMgYWxsIGJlYWNvbiwKICAqCSAgICAgICAgcHJvYmUgcmVxdWVzdCwgYW5kIHByb2JlIHJlc3BvbnNlIGZyYW1lcyB3aXRoIGFuIFNTSUQgdGhhdCBkb2VzCiAgKgkJbm90IG1hdGNoIHRoZSBTU0lEIHNwZWNpZmllZCBieSB0aGUgaG9zdCBpbiB0aGUgU1RBUlQvSk9JTgogICoJCWNvbW1hbmQuCiAgKgkJV2hlbiBjbGVhciwgdGhlIFdpTGluayByZWNlaXZlcyBmcmFtZXMgd2l0aCBhbnkgU1NJRC4KICAqIDkJCUJyb2FkY2FzdCBGaWx0ZXIgRW5hYmxlIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgZGlzY2FyZHMgYWxsCi0gKiAJIAlicm9hZGNhc3QgZnJhbWVzLiBXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCByZWNlaXZlZAorICoJCWJyb2FkY2FzdCBmcmFtZXMuIFdoZW4gY2xlYXIsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHJlY2VpdmVkCiAgKgkJYnJvYWRjYXN0IGZyYW1lcy4KICAqIDg6NgkJUmVzZXJ2ZWQKICAqIDUJCUJTU0lEIEZpbHRlciBFbmFibGUgLSBXaGVuIHNldCwgdGhlIFdpTGluayBkaXNjYXJkcyBhbnkgZnJhbWVzCi0gKiAJIAl3aXRoIGEgQlNTSUQgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgQlNTSUQgc3BlY2lmaWVkIGJ5IHRoZQorICoJCXdpdGggYSBCU1NJRCB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBCU1NJRCBzcGVjaWZpZWQgYnkgdGhlCiAgKgkJaG9zdC4KICAqCQlXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyBmcm9tIGFueSBCU1NJRC4KICAqIDQJCU1BQyBBZGRyIEZpbHRlciAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIGRpc2NhcmRzIGFueSBmcmFtZXMKLSAqIAkgCXdpdGggYSBkZXN0aW5hdGlvbiBhZGRyZXNzIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIE1BQyBhZGRyZXNzCisgKgkJd2l0aCBhIGRlc3RpbmF0aW9uIGFkZHJlc3MgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgTUFDIGFkZHJlc3MKICAqCQlvZiB0aGUgYWRhcHRvci4KICAqCQlXaGVuIGNsZWFyLCB0aGUgV2lMaW5rIHJlY2VpdmVzIGZyYW1lcyBkZXN0aW5lZCB0byBhbnkgTUFDCiAgKgkJYWRkcmVzcy4KICAqIDMJCVByb21pc2N1b3VzIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHZhbGlkIGZyYW1lcwotICogCSAJKGkuZS4sIGFsbCBmcmFtZXMgdGhhdCBwYXNzIHRoZSBGQ1MgY2hlY2spLgorICoJCShpLmUuLCBhbGwgZnJhbWVzIHRoYXQgcGFzcyB0aGUgRkNTIGNoZWNrKS4KICAqCQlXaGVuIGNsZWFyLCBvbmx5IGZyYW1lcyB0aGF0IHBhc3MgdGhlIG90aGVyIGZpbHRlcnMgc3BlY2lmaWVkCiAgKgkJYXJlIHJlY2VpdmVkLgogICogMgkJRkNTIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgaW5jbHVkZXMgdGhlIEZDUyB3aXRoIHRoZSByZWNlaXZlZAotICoJIAlmcmFtZS4KKyAqCQlmcmFtZS4KICAqCQlXaGVuIGNsZWFyZWQsIHRoZSBGQ1MgaXMgZGlzY2FyZGVkLgogICogMQkJUExDUCBoZWFkZXIgLSBXaGVuIHNldCwgd3JpdGUgYWxsIGRhdGEgZnJvbSBiYXNlYmFuZCB0byBmcmFtZQotICogCSAJYnVmZmVyIGluY2x1ZGluZyBQSFkgaGVhZGVyLgorICoJCWJ1ZmZlciBpbmNsdWRpbmcgUEhZIGhlYWRlci4KICAqIDAJCVJlc2VydmVkIC0gQWx3YXlzIGVxdWFsIHRvIDAuCiAgKgogICogUlggRmlsdGVyIE9wdGlvbnMgVGFibGUKQEAgLTI1OCwzOCArMjM1LDM4IEBACiAgKiA9PT0JCT09PT09PT09PT0KICAqIDMxOjEyCQlSZXNlcnZlZCAtIEFsd2F5cyBlcXVhbCB0byAwLgogICogMTEJCUFzc29jaWF0aW9uIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGFzc29jaWF0aW9uCi0gKiAJIAlyZWxhdGVkIGZyYW1lcyAoYXNzb2NpYXRpb24gcmVxdWVzdC9yZXNwb25zZSwgcmVhc3NvY2F0aW9uCisgKgkJcmVsYXRlZCBmcmFtZXMgKGFzc29jaWF0aW9uIHJlcXVlc3QvcmVzcG9uc2UsIHJlYXNzb2NhdGlvbgogICoJCXJlcXVlc3QvcmVzcG9uc2UsIGFuZCBkaXNhc3NvY2lhdGlvbikuIFdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcwogICoJCWFyZSBkaXNjYXJkZWQuCiAgKiAxMAkJQXV0aC9EZSBhdXRoIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGF1dGhlbnRpY2F0aW9uCi0gKiAJIAlhbmQgZGUtYXV0aGVudGljYXRpb24gZnJhbWVzLiBXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlCisgKgkJYW5kIGRlLWF1dGhlbnRpY2F0aW9uIGZyYW1lcy4gV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZQogICoJCWRpc2NhcmRlZC4KICAqIDkJCUJlYWNvbiAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBiZWFjb24gZnJhbWVzLgotICogCSAJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCiAgKiA4CQlDb250ZW50aW9uIEZyZWUgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgY29udGVudGlvbgotICogCSAJZnJlZSBmcmFtZXMuCisgKgkJZnJlZSBmcmFtZXMuCiAgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCiAgKiA3CQlDb250cm9sIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGNvbnRyb2wgZnJhbWVzLgotICogCSAJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCiAgKiA2CQlEYXRhIC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIGRhdGEgZnJhbWVzLgotICogCSAJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCiAgKiA1CQlGQ1MgRXJyb3IgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBmcmFtZXMgdGhhdCBoYXZlIEZDUwotICoJIAllcnJvcnMuCisgKgkJZXJyb3JzLgogICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgogICogNAkJTWFuYWdlbWVudCAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBtYW5hZ2VtZW50CiAgKgkJZnJhbWVzLgotICogCSAJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCisgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCiAgKiAzCQlQcm9iZSBSZXF1ZXN0IC0gV2hlbiBzZXQsIHRoZSBXaUxpbmsgcmVjZWl2ZXMgYWxsIHByb2JlIHJlcXVlc3QKLSAqIAkgCWZyYW1lcy4KKyAqCQlmcmFtZXMuCiAgKgkJV2hlbiBjbGVhciwgdGhlc2UgZnJhbWVzIGFyZSBkaXNjYXJkZWQuCiAgKiAyCQlQcm9iZSBSZXNwb25zZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBwcm9iZQotICogCQlyZXNwb25zZSBmcmFtZXMuCisgKgkJcmVzcG9uc2UgZnJhbWVzLgogICoJCVdoZW4gY2xlYXIsIHRoZXNlIGZyYW1lcyBhcmUgZGlzY2FyZGVkLgogICogMQkJUlRTL0NUUy9BQ0sgLSBXaGVuIHNldCwgdGhlIFdpTGluayByZWNlaXZlcyBhbGwgUlRTLCBDVFMgYW5kIEFDSwotICogCSAJZnJhbWVzLgorICoJCWZyYW1lcy4KICAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KICAqIDAJCVJzdmQgVHlwZS9TdWIgVHlwZSAtIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHJlY2VpdmVzIGFsbCBmcmFtZXMKLSAqIAkgCXRoYXQgaGF2ZSByZXNlcnZlZCBmcmFtZSB0eXBlcyBhbmQgc3ViIHR5cGVzIGFzIGRlZmluZWQgYnkgdGhlCisgKgkJdGhhdCBoYXZlIHJlc2VydmVkIGZyYW1lIHR5cGVzIGFuZCBzdWIgdHlwZXMgYXMgZGVmaW5lZCBieSB0aGUKICAqCQk4MDIuMTEgc3BlY2lmaWNhdGlvbi4KICAqCQlXaGVuIGNsZWFyLCB0aGVzZSBmcmFtZXMgYXJlIGRpc2NhcmRlZC4KICAqLwpAQCAtMzAwLDQ2ICsyNzcsNiBAQAogCXUzMiBmaWx0ZXJfb3B0aW9uczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1lbnVtIHsKLQlRT1NfQUNfQkUgPSAwLAotCVFPU19BQ19CSywKLQlRT1NfQUNfVkksCi0JUU9TX0FDX1ZPLAotCVFPU19ISUdIRVNUX0FDX0lOREVYID0gUU9TX0FDX1ZPLAotfTsKLQotI2RlZmluZSBNQVhfTlVNX09GX0FDICAgICAgICAgICAgIChRT1NfSElHSEVTVF9BQ19JTkRFWCsxKQotI2RlZmluZSBGSVJTVF9BQ19JTkRFWCAgICAgICAgICAgIFFPU19BQ19CRQotI2RlZmluZSBNQVhfTlVNX09GXzgwMl8xZF9UQUdTICAgIDgKLSNkZWZpbmUgQUNfUEFSQU1TX01BWF9UU0lEICAgICAgICAxNQotI2RlZmluZSBNQVhfQVBTRF9DT05GICAgICAgICAgICAgIDB4ZmZmZgotCi0jZGVmaW5lICBRT1NfVFhfSElHSF9NSU4gICAgICAoMCkKLSNkZWZpbmUgIFFPU19UWF9ISUdIX01BWCAgICAgICgxMDApCi0KLSNkZWZpbmUgIFFPU19UWF9ISUdIX0JLX0RFRiAgICgyNSkKLSNkZWZpbmUgIFFPU19UWF9ISUdIX0JFX0RFRiAgICgzNSkKLSNkZWZpbmUgIFFPU19UWF9ISUdIX1ZJX0RFRiAgICgzNSkKLSNkZWZpbmUgIFFPU19UWF9ISUdIX1ZPX0RFRiAgICgzNSkKLQotI2RlZmluZSAgUU9TX1RYX0xPV19CS19ERUYgICAgKDE1KQotI2RlZmluZSAgUU9TX1RYX0xPV19CRV9ERUYgICAgKDI1KQotI2RlZmluZSAgUU9TX1RYX0xPV19WSV9ERUYgICAgKDI1KQotI2RlZmluZSAgUU9TX1RYX0xPV19WT19ERUYgICAgKDI1KQotCi1zdHJ1Y3QgYWN4X3R4X3F1ZXVlX3Fvc19jb25maWcgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXU4IHFpZDsKLQl1OCBwYWRbM107Ci0KLQkvKiBNYXggbnVtYmVyIG9mIGJsb2NrcyBhbGxvd2QgaW4gdGhlIHF1ZXVlICovCi0JdTE2IGhpZ2hfdGhyZXNob2xkOwotCi0JLyogTG93ZXN0IG1lbW9yeSBibG9ja3MgZ3VhcmFudGVlZCBmb3IgdGhpcyBxdWV1ZSAqLwotCXUxNiBsb3dfdGhyZXNob2xkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBhY3hfcGFja2V0X2RldGVjdGlvbiB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCkBAIC0zNjgsNyArMzA1LDcgQEAKICNkZWZpbmUgQUREUkVTU19HUk9VUF9NQVgJKDgpCiAjZGVmaW5lIEFERFJFU1NfR1JPVVBfTUFYX0xFTgkoRVRIX0FMRU4gKiBBRERSRVNTX0dST1VQX01BWCkKIAotc3RydWN0IG11bHRpY2FzdF9ncnBfYWRkcl9zdGFydCB7CitzdHJ1Y3QgYWN4X2RvdDExX2dycF9hZGRyX3RibCB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJdTggZW5hYmxlZDsKQEAgLTcyMCwzMiArNjU3LDYgQEAKICNkZWZpbmUgU0NBTl9UUklHR0VSRUQJCUJJVCgyKQogI2RlZmluZSBTQ0FOX1BSSU9SSVRZX0hJR0gJQklUKDMpCiAKLXN0cnVjdCBhY3hfZndfZ2VuX2ZyYW1lX3JhdGVzIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCB0eF9jdHJsX2ZyYW1lX3JhdGU7IC8qIFJBVEVfKiAqLwotCXU4IHR4X2N0cmxfZnJhbWVfbW9kOyAvKiBDQ0tfKiBvciBQQkNDXyogKi8KLQl1OCB0eF9tZ3RfZnJhbWVfcmF0ZTsKLQl1OCB0eF9tZ3RfZnJhbWVfbW9kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFNUQSBNQUMgKi8KLXN0cnVjdCBkb3QxMV9zdGF0aW9uX2lkIHsKLQlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7Ci0KLQl1OCBtYWNbRVRIX0FMRU5dOwotCXU4IHBhZFsyXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBIVyBlbmNyeXB0aW9uIGtleXMgKi8KLSNkZWZpbmUgTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFkgNAotI2RlZmluZSBNQVhfS0VZX1NJWkUgMzIKLQotLyogV2hlbiBzZXQsIGRpc2FibGUgSFcgZW5jcnlwdGlvbiAqLwotI2RlZmluZSBERl9FTkNSWVBUSU9OX0RJU0FCTEUgICAgICAweDAxCi0vKiBXaGVuIHNldCwgZGlzYWJsZSBIVyBkZWNyeXB0aW9uICovCi0jZGVmaW5lIERGX1NOSUZGX01PREVfRU5BQkxFICAgICAgIDB4ODAKLQogc3RydWN0IGFjeF9mZWF0dXJlX2NvbmZpZyB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCkBAIC03NTMsNjcgKzY2NCw2IEBACiAJdTMyIGRhdGFfZmxvd19vcHRpb25zOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLWVudW0gYWN4X2tleV9hY3Rpb24gewotCUtFWV9BRERfT1JfUkVQTEFDRSA9IDEsCi0JS0VZX1JFTU9WRSAgICAgICAgID0gMiwKLQlLRVlfU0VUX0lEICAgICAgICAgPSAzLAotCU1BWF9LRVlfQUNUSU9OICAgICA9IDB4ZmZmZiwKLX07Ci0KLWVudW0gYWN4X2tleV90eXBlIHsKLQlLRVlfV0VQX0RFRkFVTFQgICAgICAgPSAwLAotCUtFWV9XRVBfQUREUiAgICAgICAgICA9IDEsCi0JS0VZX0FFU19HUk9VUCAgICAgICAgID0gNCwKLQlLRVlfQUVTX1BBSVJXSVNFICAgICAgPSA1LAotCUtFWV9XRVBfR1JPVVAgICAgICAgICA9IDYsCi0JS0VZX1RLSVBfTUlDX0dST1VQICAgID0gMTAsCi0JS0VZX1RLSVBfTUlDX1BBSVJXSVNFID0gMTEsCi19OwotCi0vKgotICoKLSAqIGtleV90eXBlX2UgICBrZXkgc2l6ZSAgICBrZXkgZm9ybWF0Ci0gKiAtLS0tLS0tLS0tICAgLS0tLS0tLS0tICAgLS0tLS0tLS0tLQotICogMHgwMCAgICAgICAgIDUsIDEzLCAyOSAgIEtleSBkYXRhCi0gKiAweDAxICAgICAgICAgNSwgMTMsIDI5ICAgS2V5IGRhdGEKLSAqIDB4MDQgICAgICAgICAxNiAgICAgICAgICAxNiBieXRlcyBvZiBrZXkgZGF0YQotICogMHgwNSAgICAgICAgIDE2ICAgICAgICAgIDE2IGJ5dGVzIG9mIGtleSBkYXRhCi0gKiAweDBhICAgICAgICAgMzIgICAgICAgICAgMTYgYnl0ZXMgb2YgVEtJUCBrZXkgZGF0YQotICogICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgb2YgUlggTUlDIGtleSBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyBvZiBUWCBNSUMga2V5IGRhdGEKLSAqIDB4MGIgICAgICAgICAzMiAgICAgICAgICAxNiBieXRlcyBvZiBUS0lQIGtleSBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyBvZiBSWCBNSUMga2V5IGRhdGEKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIG9mIFRYIE1JQyBrZXkgZGF0YQotICoKLSAqLwotCi1zdHJ1Y3QgYWN4X3NldF9rZXkgewotCS8qIElnbm9yZWQgZm9yIGRlZmF1bHQgV0VQIGtleSAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwotCi0JLyoga2V5X2FjdGlvbl9lICovCi0JdTE2IGtleV9hY3Rpb247Ci0KLQl1MTYgcmVzZXJ2ZWRfMTsKLQotCS8qIGtleSBzaXplIGluIGJ5dGVzICovCi0JdTgga2V5X3NpemU7Ci0KLQkvKiBrZXlfdHlwZV9lICovCi0JdTgga2V5X3R5cGU7Ci0JdTggc3NpZF9wcm9maWxlOwotCi0JLyoKLQkgKiBUS0lQLCBBRVM6IGZyYW1lJ3Mga2V5IGlkIGZpZWxkLgotCSAqIEZvciBXRVAgZGVmYXVsdCBrZXk6IGtleSBpZDsKLQkgKi8KLQl1OCBpZDsKLQl1OCByZXNlcnZlZF8yWzZdOwotCXU4IGtleVtNQVhfS0VZX1NJWkVdOwotCXUxNiBhY19zZXFfbnVtMTZbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOwotCXUzMiBhY19zZXFfbnVtMzJbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBhY3hfY3VycmVudF90eF9wb3dlciB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCkBAIC04MjEsNDQgKzY3MSw2IEBACiAJdTggIHBhZGRpbmdbM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IGFjeF9kb3QxMV9kZWZhdWx0X2tleSB7Ci0Jc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwotCi0JdTggaWQ7Ci0JdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfdHNmX2luZm8gewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXUzMiBjdXJyZW50X3RzZl9tc2I7Ci0JdTMyIGN1cnJlbnRfdHNmX2xzYjsKLQl1MzIgbGFzdF9UQlRUX21zYjsKLQl1MzIgbGFzdF9UQlRUX2xzYjsKLQl1OCBsYXN0X2R0aW1fY291bnQ7Ci0JdTggcGFkWzNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIDgwMi4xMSBQUyAqLwotZW51bSBhY3hfcHNfbW9kZSB7Ci0JU1RBVElPTl9BQ1RJVkVfTU9ERSwKLQlTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERQotfTsKLQotc3RydWN0IGFjeF9wc19wYXJhbXMgewotCXU4IHBzX21vZGU7IC8qIFNUQVRJT05fKiAqLwotCXU4IHNlbmRfbnVsbF9kYXRhOyAvKiBEbyB3ZSBoYXZlIHRvIHNlbmQgTlVMTCBkYXRhIHBhY2tldCA/ICovCi0JdTggcmV0cmllczsgLyogTnVtYmVyIG9mIHJldGlyZXMgZm9yIHRoZSBpbml0aWFsIE5VTEwgZGF0YSBwYWNrZXQgKi8KLQotCSAvKgotCSAgKiBUVXMgZHVyaW5nIHdoaWNoIHRoZSB0YXJnZXQgc3RheXMgYXdha2UgYWZ0ZXIgc3dpdGNoaW5nCi0JICAqIHRvIHBvd2VyIHNhdmUgbW9kZS4KLQkgICovCi0JdTggaGFuZ19vdmVyX3BlcmlvZDsKLQl1MTYgbnVsbF9kYXRhX3JhdGU7Ci0JdTggcGFkWzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIGVudW0gYWN4X3dha2VfdXBfZXZlbnQgewogCVdBS0VfVVBfRVZFTlRfQkVBQ09OX0JJVE1BUAk9IDB4MDEsIC8qIFdha2Ugb24gZXZlcnkgQmVhY29uKi8KIAlXQUtFX1VQX0VWRU5UX0RUSU1fQklUTUFQCT0gMHgwMiwJLyogV2FrZSBvbiBldmVyeSBEVElNKi8KQEAgLTg5Miw2ICs3MDQsNyBAQAogCiBzdHJ1Y3QgYWN4X3ByZWFtYmxlIHsKIAlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKIAkvKgogCSAqIFdoZW4gc2V0LCB0aGUgV2lMaW5rIHRyYW5zbWl0cyB0aGUgZnJhbWVzIHdpdGggYSBzaG9ydCBwcmVhbWJsZSBhbmQKIAkgKiB3aGVuIGNsZWFyZWQsIHRoZSBXaUxpbmsgdHJhbnNtaXRzIHRoZSBmcmFtZXMgd2l0aCBhIGxvbmcgcHJlYW1ibGUuCkBAIC0xMTMzLDUxICs5NDYsMjAzIEBACiAJc3RydWN0IGFjeF9yeHBpcGVfc3RhdGlzdGljcyByeHBpcGU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBBQ1hfTUFYX1JBVEVfQ0xBU1NFUyAgICAgICA4CisjZGVmaW5lIEFDWF9SQVRFX01BU0tfVU5TUEVDSUZJRUQgIDAKKyNkZWZpbmUgQUNYX1JBVEVfTUFTS19BTEwgICAgICAgICAgMHgxZWZmCisjZGVmaW5lIEFDWF9SQVRFX1JFVFJZX0xJTUlUICAgICAgIDEwCisKK3N0cnVjdCBhY3hfcmF0ZV9jbGFzcyB7CisJdTMyIGVuYWJsZWRfcmF0ZXM7CisJdTggc2hvcnRfcmV0cnlfbGltaXQ7CisJdTggbG9uZ19yZXRyeV9saW1pdDsKKwl1OCBhZmxhZ3M7CisJdTggcmVzZXJ2ZWQ7Cit9OworCitzdHJ1Y3QgYWN4X3JhdGVfcG9saWN5IHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl1MzIgcmF0ZV9jbGFzc19jbnQ7CisJc3RydWN0IGFjeF9yYXRlX2NsYXNzIHJhdGVfY2xhc3NbQUNYX01BWF9SQVRFX0NMQVNTRVNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgV0wxMjcxX0FDWF9BQ19DT1VOVCA0CisKK3N0cnVjdCBhY3hfYWNfY2ZnIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisJdTggYWM7CisJdTggY3dfbWluOworCXUxNiBjd19tYXg7CisJdTggYWlmc247CisJdTggcmVzZXJ2ZWQ7CisJdTE2IHR4X29wX2xpbWl0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2VudW0gd2wxMjcxX2FjeF9hYyB7CisJV0wxMjcxX0FDWF9BQ19CRSA9IDAsCisJV0wxMjcxX0FDWF9BQ19CSyA9IDEsCisJV0wxMjcxX0FDWF9BQ19WSSA9IDIsCisJV0wxMjcxX0FDWF9BQ19WTyA9IDMsCisJV0wxMjcxX0FDWF9BQ19DVFMyU0VMRiA9IDQsCisJV0wxMjcxX0FDWF9BQ19BTllfVElEID0gMHgxRiwKKwlXTDEyNzFfQUNYX0FDX0lOVkFMSUQgPSAweEZGLAorfTsKKworZW51bSB3bDEyNzFfYWN4X3BzX3NjaGVtZSB7CisJV0wxMjcxX0FDWF9QU19TQ0hFTUVfTEVHQUNZID0gMCwKKwlXTDEyNzFfQUNYX1BTX1NDSEVNRV9VUFNEX1RSSUdHRVIgPSAxLAorCVdMMTI3MV9BQ1hfUFNfU0NIRU1FX0xFR0FDWV9QU1BPTEwgPSAyLAorCVdMMTI3MV9BQ1hfUFNfU0NIRU1FX1NBUFNEID0gMywKK307CisKK2VudW0gd2wxMjcxX2FjeF9hY2tfcG9saWN5IHsKKwlXTDEyNzFfQUNYX0FDS19QT0xJQ1lfTEVHQUNZID0gMCwKKwlXTDEyNzFfQUNYX0FDS19QT0xJQ1lfTk9fQUNLID0gMSwKKwlXTDEyNzFfQUNYX0FDS19QT0xJQ1lfQkxPQ0sgPSAyLAorfTsKKworI2RlZmluZSBXTDEyNzFfQUNYX1RJRF9DT1VOVCA3CisKK3N0cnVjdCBhY3hfdGlkX2NvbmZpZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCXU4IHF1ZXVlX2lkOworCXU4IGNoYW5uZWxfdHlwZTsKKwl1OCB0c2lkOworCXU4IHBzX3NjaGVtZTsKKwl1OCBhY2tfcG9saWN5OworCXU4IHBhZGRpbmdbM107CisJdTMyIGFwc2RfY29uZlsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYWN4X2ZyYWdfdGhyZXNob2xkIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisJdTE2IGZyYWdfdGhyZXNob2xkOworCXU4IHBhZGRpbmdbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBXTDEyNzFfQUNYX1RYX0NPTVBMX1RJTUVPVVQgICA1CisjZGVmaW5lIFdMMTI3MV9BQ1hfVFhfQ09NUExfVEhSRVNIT0xEIDUKKworc3RydWN0IGFjeF90eF9jb25maWdfb3B0aW9ucyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCXUxNiB0eF9jb21wbF90aW1lb3V0OyAgICAgLyogbXNlYyAqLworCXUxNiB0eF9jb21wbF90aHJlc2hvbGQ7ICAgLyogbnVtYmVyIG9mIHBhY2tldHMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEFDWF9SWF9NRU1fQkxPQ0tTICAgICA2NAorI2RlZmluZSBBQ1hfVFhfTUlOX01FTV9CTE9DS1MgNjQKKyNkZWZpbmUgQUNYX1RYX0RFU0NSSVBUT1JTICAgIDMyCisjZGVmaW5lIEFDWF9OVU1fU1NJRF9QUk9GSUxFUyAxCisKK3N0cnVjdCB3bDEyNzFfYWN4X2NvbmZpZ19tZW1vcnkgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCXU4IHJ4X21lbV9ibG9ja19udW07CisJdTggdHhfbWluX21lbV9ibG9ja19udW07CisJdTggbnVtX3N0YXRpb25zOworCXU4IG51bV9zc2lkX3Byb2ZpbGVzOworCXUzMiB0b3RhbF90eF9kZXNjcmlwdG9yczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwIHsKKwlzdHJ1Y3QgYWN4X2hlYWRlciBoZWFkZXI7CisKKwl2b2lkICpjb2RlX3N0YXJ0OworCXZvaWQgKmNvZGVfZW5kOworCisJdm9pZCAqd2VwX2RlZmtleV9zdGFydDsKKwl2b2lkICp3ZXBfZGVma2V5X2VuZDsKKworCXZvaWQgKnN0YV90YWJsZV9zdGFydDsKKwl2b2lkICpzdGFfdGFibGVfZW5kOworCisJdm9pZCAqcGFja2V0X3RlbXBsYXRlX3N0YXJ0OworCXZvaWQgKnBhY2tldF90ZW1wbGF0ZV9lbmQ7CisKKwkvKiBBZGRyZXNzIG9mIHRoZSBUWCByZXN1bHQgaW50ZXJmYWNlIChjb250cm9sIGJsb2NrKSAqLworCXUzMiB0eF9yZXN1bHQ7CisJdTMyIHR4X3Jlc3VsdF9xdWV1ZV9zdGFydDsKKworCXZvaWQgKnF1ZXVlX21lbW9yeV9zdGFydDsKKwl2b2lkICpxdWV1ZV9tZW1vcnlfZW5kOworCisJdTMyIHBhY2tldF9tZW1vcnlfcG9vbF9zdGFydDsKKwl1MzIgcGFja2V0X21lbW9yeV9wb29sX2VuZDsKKworCXZvaWQgKmRlYnVnX2J1ZmZlcjFfc3RhcnQ7CisJdm9pZCAqZGVidWdfYnVmZmVyMV9lbmQ7CisKKwl2b2lkICpkZWJ1Z19idWZmZXIyX3N0YXJ0OworCXZvaWQgKmRlYnVnX2J1ZmZlcjJfZW5kOworCisJLyogTnVtYmVyIG9mIGJsb2NrcyBGVyBhbGxvY2F0ZWQgZm9yIFRYIHBhY2tldHMgKi8KKwl1MzIgbnVtX3R4X21lbV9ibG9ja3M7CisKKwkvKiBOdW1iZXIgb2YgYmxvY2tzIEZXIGFsbG9jYXRlZCBmb3IgUlggcGFja2V0cyAqLworCXUzMiBudW1fcnhfbWVtX2Jsb2NrczsKKworCS8qIHRoZSBmb2xsb3dpbmcgNCBmaWVsZHMgYXJlIHZhbGlkIGluIFNMQVZFIG1vZGUgb25seSAqLworCXU4ICp0eF9jYnVmOworCXU4ICpyeF9jYnVmOworCXZvaWQgKnJ4X2N0cmw7CisJdm9pZCAqdHhfY3RybDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHdsMTI3MV9hY3hfcnhfcXVldWVfdHlwZSB7CisJUlhfUVVFVUVfVFlQRV9SWF9MT1dfUFJJT1JJVFksICAgIC8qIEFsbCBleGNlcHQgdGhlIGhpZ2ggcHJpb3JpdHkgKi8KKwlSWF9RVUVVRV9UWVBFX1JYX0hJR0hfUFJJT1JJVFksICAgLyogTWFuYWdlbWVudCBhbmQgdm9pY2UgcGFja2V0cyAqLworCVJYX1FVRVVFX1RZUEVfTlVNLAorCVJYX1FVRVVFX1RZUEVfTUFYID0gVVNIT1JUX01BWAorfTsKKworI2RlZmluZSBXTDEyNzFfUlhfSU5UUl9USFJFU0hPTERfREVGICAwICAgICAgIC8qIG5vIHBhY2luZywgc2VuZCBpbnRlcnJ1cHQgb24KKwkJCQkJICAgICAgICogZXZlcnkgZXZlbnQgKi8KKyNkZWZpbmUgV0wxMjcxX1JYX0lOVFJfVEhSRVNIT0xEX01JTiAgMAorI2RlZmluZSBXTDEyNzFfUlhfSU5UUl9USFJFU0hPTERfTUFYICAxNQorCisjZGVmaW5lIFdMMTI3MV9SWF9JTlRSX1RJTUVPVVRfREVGICAgIDUKKyNkZWZpbmUgV0wxMjcxX1JYX0lOVFJfVElNRU9VVF9NSU4gICAgMQorI2RlZmluZSBXTDEyNzFfUlhfSU5UUl9USU1FT1VUX01BWCAgICAxMDAKKworc3RydWN0IHdsMTI3MV9hY3hfcnhfY29uZmlnX29wdCB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJdTE2IG1ibGtfdGhyZXNob2xkOworCXUxNiB0aHJlc2hvbGQ7CisJdTE2IHRpbWVvdXQ7CisJdTggcXVldWVfdHlwZTsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBlbnVtIHsKIAlBQ1hfV0FLRV9VUF9DT05ESVRJT05TICAgICAgPSAweDAwMDIsCiAJQUNYX01FTV9DRkcgICAgICAgICAgICAgICAgID0gMHgwMDAzLAogCUFDWF9TTE9UICAgICAgICAgICAgICAgICAgICA9IDB4MDAwNCwKLQlBQ1hfUVVFVUVfSEVBRCAgICAgICAgICAgICAgPSAweDAwMDUsIC8qIGZvciBNQVNURVIgbW9kZSBvbmx5ICovCiAJQUNYX0FDX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDA3LAogCUFDWF9NRU1fTUFQICAgICAgICAgICAgICAgICA9IDB4MDAwOCwKIAlBQ1hfQUlEICAgICAgICAgICAgICAgICAgICAgPSAweDAwMEEsCi0JQUNYX1JBRElPX1BBUkFNICAgICAgICAgICAgID0gMHgwMDBCLCAvKiBOb3QgdXNlZCAqLwotCUFDWF9DRkcgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwQywgLyogTm90IHVzZWQgKi8KKwkvKiBBQ1hfRldfUkVWIGlzIG1pc3NpbmcgaW4gdGhlIHJlZiBkcml2ZXIsIGJ1dCBzZWVtcyB0byB3b3JrICovCiAJQUNYX0ZXX1JFViAgICAgICAgICAgICAgICAgID0gMHgwMDBELAogCUFDWF9NRURJVU1fVVNBR0UgICAgICAgICAgICA9IDB4MDAwRiwKIAlBQ1hfUlhfQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMTAsCiAJQUNYX1RYX1FVRVVFX0NGRyAgICAgICAgICAgID0gMHgwMDExLCAvKiBGSVhNRTogb25seSB1c2VkIGJ5IHdsMTI1MSAqLwotCUFDWF9CU1NfSU5fUFMgICAgICAgICAgICAgICA9IDB4MDAxMiwgLyogZm9yIEFQIG9ubHkgKi8KIAlBQ1hfU1RBVElTVElDUyAgICAgICAgICAgICAgPSAweDAwMTMsIC8qIERlYnVnIEFQSSAqLworCUFDWF9QV1JfQ09OU1VNUFRJT05fU1RBVElTVElDUyA9IDB4MDAxNCwKIAlBQ1hfRkVBVFVSRV9DRkcgICAgICAgICAgICAgPSAweDAwMTUsCi0JQUNYX01JU0NfQ0ZHICAgICAgICAgICAgICAgID0gMHgwMDE3LCAvKiBOb3QgdXNlZCAqLwogCUFDWF9USURfQ0ZHICAgICAgICAgICAgICAgICA9IDB4MDAxQSwKKwlBQ1hfUFNfUlhfU1RSRUFNSU5HICAgICAgICAgPSAweDAwMUIsCiAJQUNYX0JFQUNPTl9GSUxURVJfT1BUICAgICAgID0gMHgwMDFGLAotCUFDWF9MT1dfUlNTSSAgICAgICAgICAgICAgICA9IDB4MDAyMCwKIAlBQ1hfTk9JU0VfSElTVCAgICAgICAgICAgICAgPSAweDAwMjEsCiAJQUNYX0hES19WRVJTSU9OICAgICAgICAgICAgID0gMHgwMDIyLCAvKiA/Pz8gKi8KIAlBQ1hfUERfVEhSRVNIT0xEICAgICAgICAgICAgPSAweDAwMjMsCi0JQUNYX0RBVEFfUEFUSF9QQVJBTVMgICAgICAgID0gMHgwMDI0LCAvKiBXTyAqLwotCUFDWF9EQVRBX1BBVEhfUkVTUF9QQVJBTVMgICA9IDB4MDAyNCwgLyogUk8gKi8KKwlBQ1hfVFhfQ09ORklHX09QVCAgICAgICAgICAgPSAweDAwMjQsCiAJQUNYX0NDQV9USFJFU0hPTEQgICAgICAgICAgID0gMHgwMDI1LAogCUFDWF9FVkVOVF9NQk9YX01BU0sgICAgICAgICA9IDB4MDAyNiwKLSNpZmRlZiBGV19SVU5OSU5HX0FTX0FQCi0JQUNYX0RUSU1fUEVSSU9EICAgICAgICAgICAgID0gMHgwMDI3LCAvKiBmb3IgQVAgb25seSAqLwotI2Vsc2UKLQlBQ1hfV1JfVEJUVF9BTkRfRFRJTSAgICAgICAgPSAweDAwMjcsIC8qIFNUQSBvbmx5ICovCi0jZW5kaWYKLQlBQ1hfQUNJX09QVElPTl9DRkcgICAgICAgICAgPSAweDAwMjksIC8qIE9CU09MRVRFIChmb3IgMTI1MSkqLwotCUFDWF9HUElPX0NGRyAgICAgICAgICAgICAgICA9IDB4MDAyQSwgLyogTm90IHVzZWQgKi8KLQlBQ1hfR1BJT19TRVQgICAgICAgICAgICAgICAgPSAweDAwMkIsIC8qIE5vdCB1c2VkICovCi0JQUNYX1BNX0NGRyAgICAgICAgICAgICAgICAgID0gMHgwMDJDLCAvKiBUbyBCZSBEb2N1bWVudGVkICovCiAJQUNYX0NPTk5fTU9OSVRfUEFSQU1TICAgICAgID0gMHgwMDJELAotCUFDWF9BVkVSQUdFX1JTU0kgICAgICAgICAgICA9IDB4MDAyRSwgLyogTm90IHVzZWQgKi8KIAlBQ1hfQ09OU19UWF9GQUlMVVJFICAgICAgICAgPSAweDAwMkYsCiAJQUNYX0JDTl9EVElNX09QVElPTlMgICAgICAgID0gMHgwMDMxLAogCUFDWF9TR19FTkFCTEUgICAgICAgICAgICAgICA9IDB4MDAzMiwKIAlBQ1hfU0dfQ0ZHICAgICAgICAgICAgICAgICAgPSAweDAwMzMsCi0JQUNYX0FOVEVOTkFfRElWRVJTSVRZX0NGRyAgID0gMHgwMDM1LCAvKiBUbyBCZSBEb2N1bWVudGVkICovCi0JQUNYX0xPV19TTlIJCSAgICA9IDB4MDAzNywgLyogVG8gQmUgRG9jdW1lbnRlZCAqLwogCUFDWF9CRUFDT05fRklMVEVSX1RBQkxFICAgICA9IDB4MDAzOCwKIAlBQ1hfQVJQX0lQX0ZJTFRFUiAgICAgICAgICAgPSAweDAwMzksCiAJQUNYX1JPQU1JTkdfU1RBVElTVElDU19UQkwgID0gMHgwMDNCLApAQCAtMTE4Niw3ICsxMTUxLDYgQEAKIAlBQ1hfU0xFRVBfQVVUSCAgICAgICAgICAgICAgPSAweDAwM0YsCiAJQUNYX1BSRUFNQkxFX1RZUEUJICAgID0gMHgwMDQwLAogCUFDWF9FUlJPUl9DTlQgICAgICAgICAgICAgICA9IDB4MDA0MSwKLQlBQ1hfRldfR0VOX0ZSQU1FX1JBVEVTICAgICAgPSAweDAwNDIsCiAJQUNYX0lCU1NfRklMVEVSCQkgICAgPSAweDAwNDQsCiAJQUNYX1NFUlZJQ0VfUEVSSU9EX1RJTUVPVVQgID0gMHgwMDQ1LAogCUFDWF9UU0ZfSU5GTyAgICAgICAgICAgICAgICA9IDB4MDA0NiwKQEAgLTExOTQsMTIgKzExNTgsMjAgQEAKIAlBQ1hfRU5BQkxFX1JYX0RBVEFfRklMVEVSICAgPSAweDAwNEEsCiAJQUNYX1NFVF9SWF9EQVRBX0ZJTFRFUiAgICAgID0gMHgwMDRCLAogCUFDWF9HRVRfREFUQV9GSUxURVJfU1RBVElTVElDUyA9IDB4MDA0QywKLQlBQ1hfUE9XRVJfTEVWRUxfVEFCTEUgICAgICAgPSAweDAwNEQsCisJQUNYX1JYX0NPTkZJR19PUFQgICAgICAgICAgID0gMHgwMDRFLAorCUFDWF9GUkFHX0NGRyAgICAgICAgICAgICAgICA9IDB4MDA0RiwKIAlBQ1hfQkVUX0VOQUJMRSAgICAgICAgICAgICAgPSAweDAwNTAsCi0JRE9UMTFfU1RBVElPTl9JRCAgICAgICAgICAgID0gMHgxMDAxLAorCUFDWF9SU1NJX1NOUl9UUklHR0VSICAgICAgICA9IDB4MDA1MSwKKwlBQ1hfUlNTSV9TTlJfV0VJR0hUUyAgICAgICAgPSAweDAwNTEsCisJQUNYX0tFRVBfQUxJVkVfTU9ERSAgICAgICAgID0gMHgwMDUyLAorCUFDWF9TRVRfS0VFUF9BTElWRV9DT05GSUcgICA9IDB4MDA1NCwKKwlBQ1hfQkFfU0VTU0lPTl9SRVNQT05ERVJfUE9MSUNZID0gMHgwMDU1LAorCUFDWF9CQV9TRVNTSU9OX0lOSVRJQVRPUl9QT0xJQ1kgPSAweDAwNTYsCisJQUNYX1BFRVJfSFRfQ0FQICAgICAgICAgICAgID0gMHgwMDU3LAorCUFDWF9IVF9CU1NfT1BFUkFUSU9OICAgICAgICA9IDB4MDA1OCwKKwlBQ1hfQ09FWF9BQ1RJVklUWSAgICAgICAgICAgPSAweDAwNTksCiAJRE9UMTFfUlhfTVNEVV9MSUZFX1RJTUUgICAgID0gMHgxMDA0LAogCURPVDExX0NVUl9UWF9QV1IgICAgICAgICAgICA9IDB4MTAwRCwKLQlET1QxMV9ERUZBVUxUX0tFWSAgICAgICAgICAgPSAweDEwMTAsCiAJRE9UMTFfUlhfRE9UMTFfTU9ERSAgICAgICAgID0gMHgxMDEyLAogCURPVDExX1JUU19USFJFU0hPTEQgICAgICAgICA9IDB4MTAxMywKIAlET1QxMV9HUk9VUF9BRERSRVNTX1RCTCAgICAgPSAweDEwMTQsCkBAIC0xMjEwLDM2ICsxMTgyLDQwIEBACiB9OwogCiAKLWludCB3bDEyeHhfYWN4X2ZyYW1lX3JhdGVzKHN0cnVjdCB3bDEyeHggKndsLCB1OCBjdHJsX3JhdGUsIHU4IGN0cmxfbW9kLAotCQkJICAgdTggbWd0X3JhdGUsIHU4IG1ndF9tb2QpOwotaW50IHdsMTJ4eF9hY3hfc3RhdGlvbl9pZChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9kZWZhdWx0X2tleShzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTgga2V5X2lkKTsKLWludCB3bDEyeHhfYWN4X3dha2VfdXBfY29uZGl0aW9ucyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTggbGlzdGVuX2ludGVydmFsKTsKLWludCB3bDEyeHhfYWN4X3NsZWVwX2F1dGgoc3RydWN0IHdsMTJ4eCAqd2wsIHU4IHNsZWVwX2F1dGgpOwotaW50IHdsMTJ4eF9hY3hfZndfdmVyc2lvbihzdHJ1Y3Qgd2wxMnh4ICp3bCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKLWludCB3bDEyeHhfYWN4X3R4X3Bvd2VyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgcG93ZXIpOwotaW50IHdsMTJ4eF9hY3hfZmVhdHVyZV9jZmcoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfbWVtX21hcChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdm9pZCAqbWVtX21hcCwgc2l6ZV90IGxlbik7Ci1pbnQgd2wxMnh4X2FjeF9kYXRhX3BhdGhfcGFyYW1zKHN0cnVjdCB3bDEyeHggKndsLAotCQkJCXN0cnVjdCBhY3hfZGF0YV9wYXRoX3BhcmFtc19yZXNwICpkYXRhX3BhdGgpOwotaW50IHdsMTJ4eF9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTJ4eCAqd2wsIHUzMiBsaWZlX3RpbWUpOwotaW50IHdsMTJ4eF9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKLWludCB3bDEyeHhfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9zbG90KHN0cnVjdCB3bDEyeHggKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKTsKLWludCB3bDEyeHhfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMnh4ICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOwotaW50IHdsMTJ4eF9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyeHggKndsKTsKLWludCB3bDEyeHhfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTJ4eCAqd2wpOwotaW50IHdsMTJ4eF9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X2FjeF9haWQoc3RydWN0IHdsMTJ4eCAqd2wsIHUxNiBhaWQpOwotaW50IHdsMTJ4eF9hY3hfZXZlbnRfbWJveF9tYXNrKHN0cnVjdCB3bDEyeHggKndsLCB1MzIgZXZlbnRfbWFzayk7Ci1pbnQgd2wxMnh4X2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTJ4eCAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpOwotaW50IHdsMTJ4eF9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTJ4eCAqd2wsCitpbnQgd2wxMjcxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHdha2VfdXBfZXZlbnQsCisJCQkJICB1OCBsaXN0ZW5faW50ZXJ2YWwpOworaW50IHdsMTI3MV9hY3hfc2xlZXBfYXV0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggc2xlZXBfYXV0aCk7CitpbnQgd2wxMjcxX2FjeF9md192ZXJzaW9uKHN0cnVjdCB3bDEyNzEgKndsLCBjaGFyICpidWYsIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9hY3hfdHhfcG93ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBwb3dlcik7CitpbnQgd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9tZW1fbWFwKHN0cnVjdCB3bDEyNzEgKndsLAorCQkgICAgICAgc3RydWN0IGFjeF9oZWFkZXIgKm1lbV9tYXAsIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9hY3hfcnhfbXNkdV9saWZlX3RpbWUoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBsaWZlX3RpbWUpOworaW50IHdsMTI3MV9hY3hfcnhfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKK2ludCB3bDEyNzFfYWN4X3BkX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9zbG90KHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIGFjeF9zbG90X3R5cGUgc2xvdF90aW1lKTsKK2ludCB3bDEyNzFfYWN4X2dyb3VwX2FkZHJlc3NfdGJsKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfcnRzX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHJ0c190aHJlc2hvbGQpOworaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9zZ19lbmFibGUoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfc2dfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X2NjYV90aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYmNuX2R0aW1fb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9haWQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhaWQpOworaW50IHdsMTI3MV9hY3hfZXZlbnRfbWJveF9tYXNrKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZXZlbnRfbWFzayk7CitpbnQgd2wxMjcxX2FjeF9zZXRfcHJlYW1ibGUoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gYWN4X3ByZWFtYmxlX3R5cGUgcHJlYW1ibGUpOworaW50IHdsMTI3MV9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTI3MSAqd2wsCiAJCQkgICAgZW51bSBhY3hfY3RzcHJvdGVjdF90eXBlIGN0c3Byb3RlY3QpOwotaW50IHdsMTJ4eF9hY3hfc3RhdGlzdGljcyhzdHJ1Y3Qgd2wxMnh4ICp3bCwgc3RydWN0IGFjeF9zdGF0aXN0aWNzICpzdGF0cyk7CitpbnQgd2wxMjcxX2FjeF9zdGF0aXN0aWNzKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKnN0YXRzKTsKK2ludCB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYWNfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3RpZF9jZmcoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfdHhfY29uZmlnX29wdGlvbnMoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfbWVtX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQoc3RydWN0IHdsMTI3MSAqd2wpOwogCi0jZW5kaWYgLyogX19XTDEyWFhfQUNYX0hfXyAqLworI2VuZGlmIC8qIF9fV0wxMjcxX0FDWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyOGVmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jCkBAIC0wLDAgKzEsNTQxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX2Jvb3QuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2V2ZW50LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgcGFydF90YWJsZVtQQVJUX1RBQkxFX0xFTl0gPSB7CisJW1BBUlRfRE9XTl0gPSB7CisJCS5tZW0gPSB7CisJCQkuc3RhcnQgPSAweDAwMDAwMDAwLAorCQkJLnNpemUgID0gMHgwMDAxNzdjMAorCQl9LAorCQkucmVnID0geworCQkJLnN0YXJ0ID0gUkVHSVNURVJTX0JBU0UsCisJCQkuc2l6ZSAgPSAweDAwMDA4ODAwCisJCX0sCisJfSwKKworCVtQQVJUX1dPUktdID0geworCQkubWVtID0geworCQkJLnN0YXJ0ID0gMHgwMDA0MDAwMCwKKwkJCS5zaXplICA9IDB4MDAwMTRmYzAKKwkJfSwKKwkJLnJlZyA9IHsKKwkJCS5zdGFydCA9IFJFR0lTVEVSU19CQVNFLAorCQkJLnNpemUgID0gMHgwMDAwYjAwMAorCQl9LAorCX0sCisKKwlbUEFSVF9EUlBXXSA9IHsKKwkJLm1lbSA9IHsKKwkJCS5zdGFydCA9IDB4MDAwNDAwMDAsCisJCQkuc2l6ZSAgPSAweDAwMDE0ZmMwCisJCX0sCisJCS5yZWcgPSB7CisJCQkuc3RhcnQgPSBEUlBXX0JBU0UsCisJCQkuc2l6ZSAgPSAweDAwMDA2MDAwCisJCX0KKwl9Cit9OworCitzdGF0aWMgdm9pZCB3bDEyNzFfYm9vdF9zZXRfZWNwdV9jdHJsKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZmxhZykKK3sKKwl1MzIgY3B1X2N0cmw7CisKKwkvKiAxMC41LjAgcnVuIHRoZSBmaXJtd2FyZSAoSSkgKi8KKwljcHVfY3RybCA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7CisKKwkvKiAxMC41LjEgcnVuIHRoZSBmaXJtd2FyZSAoSUkpICovCisJY3B1X2N0cmwgfD0gZmxhZzsKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MLCBjcHVfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ib290X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9zdGF0aWNfZGF0YSBzdGF0aWNfZGF0YTsKKworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsCisJCQkgICAgJnN0YXRpY19kYXRhLCBzaXplb2Yoc3RhdGljX2RhdGEpKTsKKworCXN0cm5jcHkod2wtPmNoaXAuZndfdmVyLCBzdGF0aWNfZGF0YS5md192ZXJzaW9uLAorCQlzaXplb2Yod2wtPmNoaXAuZndfdmVyKSk7CisKKwkvKiBtYWtlIHN1cmUgdGhlIHN0cmluZyBpcyBOVUxMLXRlcm1pbmF0ZWQgKi8KKwl3bC0+Y2hpcC5md192ZXJbc2l6ZW9mKHdsLT5jaGlwLmZ3X3ZlcikgLSAxXSA9ICdcMCc7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlX2NodW5rKHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsCisJCQkJCSAgICAgc2l6ZV90IGZ3X2RhdGFfbGVuLCB1MzIgZGVzdCkKK3sKKwlpbnQgYWRkciwgY2h1bmtfbnVtLCBwYXJ0aXRpb25fbGltaXQ7CisJdTggKnA7CisKKwkvKiB3aGFsX0Z3Q3RybF9Mb2FkRndJbWFnZVNtKCkgKi8KKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAic3RhcnRpbmcgZmlybXdhcmUgdXBsb2FkIik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImZ3X2RhdGFfbGVuICV6ZCBjaHVua19zaXplICVkIiwKKwkJICAgICBmd19kYXRhX2xlbiwgQ0hVTktfU0laRSk7CisKKworCWlmICgoZndfZGF0YV9sZW4gJSA0KSAhPSAwKSB7CisJCXdsMTI3MV9lcnJvcigiZmlybXdhcmUgbGVuZ3RoIG5vdCBtdWx0aXBsZSBvZiBmb3VyIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCBkZXN0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemUsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9ET1dOXS5yZWcuc3RhcnQsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9ET1dOXS5yZWcuc2l6ZSk7CisKKwkvKiAxMC4xIHNldCBwYXJ0aXRpb24gbGltaXQgYW5kIGNodW5rIG51bSAqLworCWNodW5rX251bSA9IDA7CisJcGFydGl0aW9uX2xpbWl0ID0gcGFydF90YWJsZVtQQVJUX0RPV05dLm1lbS5zaXplOworCisJd2hpbGUgKGNodW5rX251bSA8IGZ3X2RhdGFfbGVuIC8gQ0hVTktfU0laRSkgeworCQkvKiAxMC4yIHVwZGF0ZSBwYXJ0aXRpb24sIGlmIG5lZWRlZCAqLworCQlhZGRyID0gZGVzdCArIChjaHVua19udW0gKyAyKSAqIENIVU5LX1NJWkU7CisJCWlmIChhZGRyID4gcGFydGl0aW9uX2xpbWl0KSB7CisJCQlhZGRyID0gZGVzdCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJCQlwYXJ0aXRpb25fbGltaXQgPSBjaHVua19udW0gKiBDSFVOS19TSVpFICsKKwkJCQlwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemU7CisKKwkJCS8qIEZJWE1FOiBPdmVyIDgwIGNoYXJzISAqLworCQkJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsCisJCQkJCSAgICAgYWRkciwKKwkJCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ubWVtLnNpemUsCisJCQkJCSAgICAgcGFydF90YWJsZVtQQVJUX0RPV05dLnJlZy5zdGFydCwKKwkJCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRE9XTl0ucmVnLnNpemUpOworCQl9CisKKwkJLyogMTAuMyB1cGxvYWQgdGhlIGNodW5rICovCisJCWFkZHIgPSBkZXN0ICsgY2h1bmtfbnVtICogQ0hVTktfU0laRTsKKwkJcCA9IGJ1ZiArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAidXBsb2FkaW5nIGZ3IGNodW5rIDB4JXAgdG8gMHgleCIsCisJCQkgICAgIHAsIGFkZHIpOworCQl3bDEyNzFfc3BpX21lbV93cml0ZSh3bCwgYWRkciwgcCwgQ0hVTktfU0laRSk7CisKKwkJY2h1bmtfbnVtKys7CisJfQorCisJLyogMTAuNCB1cGxvYWQgdGhlIGxhc3QgY2h1bmsgKi8KKwlhZGRyID0gZGVzdCArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJcCA9IGJ1ZiArIGNodW5rX251bSAqIENIVU5LX1NJWkU7CisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJ1cGxvYWRpbmcgZncgbGFzdCBjaHVuayAoJXpkIEIpIDB4JXAgdG8gMHgleCIsCisJCSAgICAgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFLCBwLCBhZGRyKTsKKwl3bDEyNzFfc3BpX21lbV93cml0ZSh3bCwgYWRkciwgcCwgZndfZGF0YV9sZW4gJSBDSFVOS19TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1MzIgY2h1bmtzLCBhZGRyLCBsZW47CisJdTggKmZ3OworCisJZncgPSB3bC0+Znc7CisJY2h1bmtzID0gYmUzMl90b19jcHVwKCh1MzIgKikgZncpOworCWZ3ICs9IHNpemVvZih1MzIpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJmaXJtd2FyZSBjaHVua3MgdG8gYmUgdXBsb2FkZWQ6ICV1IiwgY2h1bmtzKTsKKworCXdoaWxlIChjaHVua3MtLSkgeworCQlhZGRyID0gYmUzMl90b19jcHVwKCh1MzIgKikgZncpOworCQlmdyArPSBzaXplb2YodTMyKTsKKwkJbGVuID0gYmUzMl90b19jcHVwKCh1MzIgKikgZncpOworCQlmdyArPSBzaXplb2YodTMyKTsKKworCQlpZiAobGVuID4gMzAwMDAwKSB7CisJCQl3bDEyNzFfaW5mbygiZmlybXdhcmUgY2h1bmsgdG9vIGxvbmc6ICV1IiwgbGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2h1bmsgJWQgYWRkciAweCV4IGxlbiAldSIsCisJCQkgICAgIGNodW5rcywgYWRkciwgbGVuKTsKKwkJd2wxMjcxX2Jvb3RfdXBsb2FkX2Zpcm13YXJlX2NodW5rKHdsLCBmdywgbGVuLCBhZGRyKTsKKwkJZncgKz0gbGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3VwbG9hZF9udnMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc2l6ZV90IG52c19sZW4sIGJ1cnN0X2xlbjsKKwlpbnQgaTsKKwl1MzIgZGVzdF9hZGRyLCB2YWw7CisJdTggKm52c19wdHIsICpudnMsICpudnNfYWxpZ25lZDsKKworCW52cyA9IHdsLT5udnM7CisJaWYgKG52cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW52c19wdHIgPSBudnM7CisKKwludnNfbGVuID0gd2wtPm52c19sZW47CisKKwkvKiBVcGRhdGUgdGhlIGRldmljZSBNQUMgYWRkcmVzcyBpbnRvIHRoZSBudnMgKi8KKwludnNbMTFdID0gd2wtPm1hY19hZGRyWzBdOworCW52c1sxMF0gPSB3bC0+bWFjX2FkZHJbMV07CisJbnZzWzZdID0gd2wtPm1hY19hZGRyWzJdOworCW52c1s1XSA9IHdsLT5tYWNfYWRkclszXTsKKwludnNbNF0gPSB3bC0+bWFjX2FkZHJbNF07CisJbnZzWzNdID0gd2wtPm1hY19hZGRyWzVdOworCisJLyoKKwkgKiBMYXlvdXQgYmVmb3JlIHRoZSBhY3R1YWwgTlZTIHRhYmxlczoKKwkgKiAxIGJ5dGUgOiBidXJzdCBsZW5ndGguCisJICogMiBieXRlczogZGVzdGluYXRpb24gYWRkcmVzcy4KKwkgKiBuIGJ5dGVzOiBkYXRhIHRvIGJ1cnN0IGNvcHkuCisJICoKKwkgKiBUaGlzIGlzIGVuZGVkIGJ5IGEgMCBsZW5ndGgsIHRoZW4gdGhlIE5WUyB0YWJsZXMuCisJICovCisKKwkvKiBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBoZXJlIHdoZXRoZXIgdGhlIExTQiBpcyAxPyAqLworCXdoaWxlIChudnNfcHRyWzBdKSB7CisJCWJ1cnN0X2xlbiA9IG52c19wdHJbMF07CisJCWRlc3RfYWRkciA9IChudnNfcHRyWzFdICYgMHhmZSkgfCAoKHUzMikobnZzX3B0clsyXSA8PCA4KSk7CisKKwkJLyogRklYTUU6IER1ZSB0byBvdXIgbmV3IHdsMTI3MV90cmFuc2xhdGVfcmVnX2FkZHIgZnVuY3Rpb24sCisJCSAgIHdlIG5lZWQgdG8gYWRkIHRoZSBSRUdJU1RFUl9CQVNFIHRvIHRoZSBkZXN0aW5hdGlvbiAqLworCQlkZXN0X2FkZHIgKz0gUkVHSVNURVJTX0JBU0U7CisKKwkJLyogV2UgbW92ZSBvdXIgcG9pbnRlciB0byB0aGUgZGF0YSAqLworCQludnNfcHRyICs9IDM7CisKKwkJZm9yIChpID0gMDsgaSA8IGJ1cnN0X2xlbjsgaSsrKSB7CisJCQl2YWwgPSAobnZzX3B0clswXSB8IChudnNfcHRyWzFdIDw8IDgpCisJCQkgICAgICAgfCAobnZzX3B0clsyXSA8PCAxNikgfCAobnZzX3B0clszXSA8PCAyNCkpOworCisJCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwKKwkJCQkgICAgICJudnMgYnVyc3Qgd3JpdGUgMHgleDogMHgleCIsCisJCQkJICAgICBkZXN0X2FkZHIsIHZhbCk7CisJCQl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIGRlc3RfYWRkciwgdmFsKTsKKworCQkJbnZzX3B0ciArPSA0OworCQkJZGVzdF9hZGRyICs9IDQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlJ3ZlIHJlYWNoZWQgdGhlIGZpcnN0IHplcm8gbGVuZ3RoLCB0aGUgZmlyc3QgTlZTIHRhYmxlCisJICogaXMgNyBieXRlcyBmdXJ0aGVyLgorCSAqLworCW52c19wdHIgKz0gNzsKKwludnNfbGVuIC09IG52c19wdHIgLSBudnM7CisJbnZzX2xlbiA9IEFMSUdOKG52c19sZW4sIDQpOworCisJLyogRklYTUU6IFRoZSBkcml2ZXIgc2V0cyB0aGUgcGFydGl0aW9uIGhlcmUsIGJ1dCB0aGlzIGlzIG5vdCBuZWVkZWQsCisJICAgc2luY2UgaXQgc2V0cyB0byB0aGUgc2FtZSBvbmUgYXMgY3VycmVudGx5IGluIHVzZSAqLworCS8qIE5vdyB3ZSBtdXN0IHNldCB0aGUgcGFydGl0aW9uIGNvcnJlY3RseSAqLworCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ubWVtLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ubWVtLnNpemUsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9XT1JLXS5yZWcuc3RhcnQsCisJCQkgICAgIHBhcnRfdGFibGVbUEFSVF9XT1JLXS5yZWcuc2l6ZSk7CisKKwkvKiBDb3B5IHRoZSBOVlMgdGFibGVzIHRvIGEgbmV3IGJsb2NrIHRvIGVuc3VyZSBhbGlnbm1lbnQgKi8KKwludnNfYWxpZ25lZCA9IGttZW1kdXAobnZzX3B0ciwgbnZzX2xlbiwgR0ZQX0tFUk5FTCk7CisKKwkvKiBBbmQgZmluYWxseSB3ZSB1cGxvYWQgdGhlIE5WUyB0YWJsZXMgKi8KKwkvKiBGSVhNRTogSW4gd2wxMjcxLCB3ZSB1cGxvYWQgZXZlcnl0aGluZyBhdCBvbmNlLgorCSAgIE5vIGVuZGlhbm5lc3MgaGFuZGxpbmcgbmVlZGVkIGhlcmU/ISBUaGUgcmVmIGRyaXZlciBkb2Vzbid0IGRvCisJICAgYW55dGhpbmcgYWJvdXQgaXQgYXQgdGhpcyBwb2ludCAqLworCXdsMTI3MV9zcGlfbWVtX3dyaXRlKHdsLCBDTURfTUJPWF9BRERSRVNTLCBudnNfYWxpZ25lZCwgbnZzX2xlbik7CisKKwlrZnJlZShudnNfYWxpZ25lZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9ib290X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWVuYWJsZV9pcnEod2wtPmlycSk7CisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLAorCQkJICAgV0wxMjcxX0FDWF9JTlRSX0FMTCAmIH4oV0wxMjcxX0lOVFJfTUFTSykpOworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgSElfQ0ZHLCBISV9DRkdfREVGX1ZBTCk7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2Jvb3Rfc29mdF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGJvb3RfZGF0YTsKKworCS8qIHBlcmZvcm0gc29mdCByZXNldCAqLworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCwgQUNYX1NMVl9TT0ZUX1JFU0VUX0JJVCk7CisKKwkvKiBTT0ZUX1JFU0VUIGlzIHNlbGYgY2xlYXJpbmcgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoU09GVF9SRVNFVF9NQVhfVElNRSk7CisJd2hpbGUgKDEpIHsKKwkJYm9vdF9kYXRhID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQpOworCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInNvZnQgcmVzZXQgYm9vdGRhdGEgMHgleCIsIGJvb3RfZGF0YSk7CisJCWlmICgoYm9vdF9kYXRhICYgQUNYX1NMVl9TT0ZUX1JFU0VUX0JJVCkgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQkvKiAxLjIgY2hlY2sgcFdoYWxCdXMtPnVTZWxmQ2xlYXJUaW1lIGlmIHRoZQorCQkJICogdGltZW91dCB3YXMgcmVhY2hlZCAqLworCQkJd2wxMjcxX2Vycm9yKCJzb2Z0IHJlc2V0IHRpbWVvdXQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXVkZWxheShTT0ZUX1JFU0VUX1NUQUxMX1RJTUUpOworCX0KKworCS8qIGRpc2FibGUgUngvVHggKi8KKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEVOQUJMRSwgMHgwKTsKKworCS8qIGRpc2FibGUgYXV0byBjYWxpYnJhdGlvbiBvbiBzdGFydCovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBTUEFSRV9BMiwgMHhmZmZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9ib290X3J1bl9maXJtd2FyZShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgbG9vcCwgcmV0OworCXUzMiBjaGlwX2lkLCBpbnRlcnJ1cHQ7CisKKwl3bDEyNzFfYm9vdF9zZXRfZWNwdV9jdHJsKHdsLCBFQ1BVX0NPTlRST0xfSEFMVCk7CisKKwljaGlwX2lkID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIENISVBfSURfQik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgImNoaXAgaWQgYWZ0ZXIgZmlybXdhcmUgYm9vdDogMHgleCIsIGNoaXBfaWQpOworCisJaWYgKGNoaXBfaWQgIT0gd2wtPmNoaXAuaWQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjaGlwIGlkIGRvZXNuJ3QgbWF0Y2ggYWZ0ZXIgZmlybXdhcmUgYm9vdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB3YWl0IGZvciBpbml0IHRvIGNvbXBsZXRlICovCisJbG9vcCA9IDA7CisJd2hpbGUgKGxvb3ArKyA8IElOSVRfTE9PUCkgeworCQl1ZGVsYXkoSU5JVF9MT09QX0RFTEFZKTsKKwkJaW50ZXJydXB0ID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKworCQlpZiAoaW50ZXJydXB0ID09IDB4ZmZmZmZmZmYpIHsKKwkJCXdsMTI3MV9lcnJvcigiZXJyb3IgcmVhZGluZyBoYXJkd2FyZSBjb21wbGV0ZSAiCisJCQkJICAgICAiaW5pdCBpbmRpY2F0aW9uIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQkvKiBjaGVjayB0aGF0IEFDWF9JTlRSX0lOSVRfQ09NUExFVEUgaXMgZW5hYmxlZCAqLworCQllbHNlIGlmIChpbnRlcnJ1cHQgJiBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkgeworCQkJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCisJCQkJCSAgIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGxvb3AgPj0gSU5JVF9MT09QKSB7CisJCXdsMTI3MV9lcnJvcigidGltZW91dCB3YWl0aW5nIGZvciB0aGUgaGFyZHdhcmUgdG8gIgorCQkJICAgICAiY29tcGxldGUgaW5pdGlhbGl6YXRpb24iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogZ2V0IGhhcmR3YXJlIGNvbmZpZyBjb21tYW5kIG1haWwgYm94ICovCisJd2wtPmNtZF9ib3hfYWRkciA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBSRUdfQ09NTUFORF9NQUlMQk9YX1BUUik7CisKKwkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGV2ZW50IG1haWwgYm94ICovCisJd2wtPmV2ZW50X2JveF9hZGRyID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7CisKKwkvKiBzZXQgdGhlIHdvcmtpbmcgcGFydGl0aW9uIHRvIGl0cyAicnVubmluZyIgbW9kZSBvZmZzZXQgKi8KKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zdGFydCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zaXplLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnNpemUpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BSUxCT1gsICJjbWRfYm94X2FkZHIgMHgleCBldmVudF9ib3hfYWRkciAweCV4IiwKKwkJICAgICB3bC0+Y21kX2JveF9hZGRyLCB3bC0+ZXZlbnRfYm94X2FkZHIpOworCisJd2wxMjcxX2Jvb3RfZndfdmVyc2lvbih3bCk7CisKKwkvKgorCSAqIGluIGNhc2Ugb2YgZnVsbCBhc3luY2hyb25vdXMgbW9kZSB0aGUgZmlybXdhcmUgZXZlbnQgbXVzdCBiZQorCSAqIHJlYWR5IHRvIHJlY2VpdmUgZXZlbnQgZnJvbSB0aGUgY29tbWFuZCBtYWlsYm94CisJICovCisKKwkvKiBlbmFibGUgZ3BpbyBpbnRlcnJ1cHRzICovCisJd2wxMjcxX2Jvb3RfZW5hYmxlX2ludGVycnVwdHMod2wpOworCisJLyogdW5tYXNrIGFsbCBtYm94IGV2ZW50cyAgKi8KKwl3bC0+ZXZlbnRfbWFzayA9IDB4ZmZmZmZmZmY7CisKKwlyZXQgPSB3bDEyNzFfZXZlbnRfdW5tYXNrKHdsKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoIkVWRU5UIG1hc2sgc2V0dGluZyBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bDEyNzFfZXZlbnRfbWJveF9jb25maWcod2wpOworCisJLyogZmlybXdhcmUgc3RhcnR1cCBjb21wbGV0ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfYm9vdF93cml0ZV9pcnFfcG9sYXJpdHkoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTMyIHBvbGFyaXR5LCBzdGF0dXMsIGk7CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIE9DUF9QT1JfQ1RSLCBPQ1BfUkVHX1BPTEFSSVRZKTsKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfUkVBRCk7CisKKwkvKiBXYWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGNvbXBsZXRlIChpZS4gYml0IDE4IGlzIHNldCkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgT0NQX0NNRF9MT09QOyBpKyspIHsKKwkJcG9sYXJpdHkgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgT0NQX0RBVEFfUkVBRCk7CisJCWlmIChwb2xhcml0eSAmIE9DUF9SRUFEWV9NQVNLKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IE9DUF9DTURfTE9PUCkgeworCQl3bDEyNzFfZXJyb3IoIk9DUCBjb21tYW5kIHRpbWVvdXQhIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXN0YXR1cyA9IHBvbGFyaXR5ICYgT0NQX1NUQVRVU19NQVNLOworCWlmIChzdGF0dXMgIT0gT0NQX1NUQVRVU19PSykgeworCQl3bDEyNzFfZXJyb3IoIk9DUCBjb21tYW5kIGZhaWxlZCAoJWQpIiwgc3RhdHVzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogV2UgdXNlIEhJR0ggcG9sYXJpdHksIHNvIHVuc2V0IHRoZSBMT1cgYml0ICovCisJcG9sYXJpdHkgJj0gflBPTEFSSVRZX0xPVzsKKworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgT0NQX1BPUl9DVFIsIE9DUF9SRUdfUE9MQVJJVFkpOworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgT0NQX0RBVEFfV1JJVEUsIHBvbGFyaXR5KTsKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfV1JJVEUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfYm9vdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdG1wLCBjbGssIHBhdXNlOworCisJaWYgKFJFRl9DTE9DSyA9PSAwIHx8IFJFRl9DTE9DSyA9PSAyKQorCQkvKiByZWYgY2xrOiAxOS4yLzM4LjQgKi8KKwkJY2xrID0gMHgzOworCWVsc2UgaWYgKFJFRl9DTE9DSyA9PSAxIHx8IFJFRl9DTE9DSyA9PSAzKQorCQkvKiByZWYgY2xrOiAyNi81MiAqLworCQljbGsgPSAweDU7CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIFBMTF9QQVJBTUVURVJTLCBjbGspOworCisJcGF1c2UgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgUExMX1BBUkFNRVRFUlMpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJwYXVzZTEgMHgleCIsIHBhdXNlKTsKKworCXBhdXNlICY9IH4oV1VfQ09VTlRFUl9QQVVTRV9WQUwpOyAvKiBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUKKwkJCQkJICAgKiBXVV9DT1VOVEVSX1BBVVNFX1ZBTCBpbnN0ZWFkIG9mCisJCQkJCSAgICogMHgzZmYgKG1hZ2ljIG51bWJlciApLiAgSG93IGRvZXMKKwkJCQkJICAgKiB0aGlzIHdvcms/ISAqLworCXBhdXNlIHw9IFdVX0NPVU5URVJfUEFVU0VfVkFMOworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgV1VfQ09VTlRFUl9QQVVTRSwgcGF1c2UpOworCisJLyogQ29udGludWUgdGhlIEVMUCB3YWtlIHVwIHNlcXVlbmNlICovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBXRUxQX0FSTV9DT01NQU5ELCBXRUxQX0FSTV9DT01NQU5EX1ZBTCk7CisJdWRlbGF5KDUwMCk7CisKKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX0RSUFddLm1lbS5zdGFydCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX0RSUFddLm1lbS5zaXplLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRFJQV10ucmVnLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfRFJQV10ucmVnLnNpemUpOworCisJLyogUmVhZC1tb2RpZnktd3JpdGUgRFJQV19TQ1JBVENIX1NUQVJUIHJlZ2lzdGVyIChzZWUgbmV4dCBzdGF0ZSkKKwkgICB0byBiZSB1c2VkIGJ5IERSUHcgRlcuIFRoZSBSVFJJTSB2YWx1ZSB3aWxsIGJlIGFkZGVkIGJ5IHRoZSBGVworCSAgIGJlZm9yZSB0YWtpbmcgRFJQdyBvdXQgb2YgcmVzZXQgKi8KKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiRFJQV19TQ1JBVENIX1NUQVJUICUwOHgiLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOworCWNsayA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBEUlBXX1NDUkFUQ0hfU1RBUlQpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJjbGsyIDB4JXgiLCBjbGspOworCisJLyogMiAqLworCWNsayB8PSAoUkVGX0NMT0NLIDw8IDEpIDw8IDQ7CisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBEUlBXX1NDUkFUQ0hfU1RBUlQsIGNsayk7CisKKwl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zdGFydCwKKwkJCSAgICAgcGFydF90YWJsZVtQQVJUX1dPUktdLm1lbS5zaXplLAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnN0YXJ0LAorCQkJICAgICBwYXJ0X3RhYmxlW1BBUlRfV09SS10ucmVnLnNpemUpOworCisJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNzFfQUNYX0lOVFJfQUxMKTsKKworCXJldCA9IHdsMTI3MV9ib290X3NvZnRfcmVzZXQod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIDIuIHN0YXJ0IHByb2Nlc3NpbmcgTlZTIGZpbGUgKi8KKwlyZXQgPSB3bDEyNzFfYm9vdF91cGxvYWRfbnZzKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiB3cml0ZSBmaXJtd2FyZSdzIGxhc3QgYWRkcmVzcyAoaWUuIGl0J3MgbGVuZ3RoKSB0bworCSAqIEFDWF9FRVBST01MRVNTX0lORF9SRUcgKi8KKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgIkFDWF9FRVBST01MRVNTX0lORF9SRUciKTsKKworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX0VFUFJPTUxFU1NfSU5EX1JFRywgQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyk7CisKKwl0bXAgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4IiwgdG1wKTsKKworCS8qIDYuIHJlYWQgdGhlIEVFUFJPTSBwYXJhbWV0ZXJzICovCisJdG1wID0gd2wxMjcxX3JlZ19yZWFkMzIod2wsIFNDUl9QQUQyKTsKKworCXJldCA9IHdsMTI3MV9ib290X3dyaXRlX2lycV9wb2xhcml0eSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogRklYTUU6IE5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzIGlzIHJlYWxseSB3aGF0IHdlIHdhbnQgKi8KKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCisJCQkgICBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SKTsKKworCS8qIFdMMTI3MTogVGhlIHJlZmVyZW5jZSBkcml2ZXIgc2tpcHMgc3RlcHMgNyB0byAxMCAoanVtcHMgZGlyZWN0bHkKKwkgKiB0byB1cGxvYWRfZncpICovCisKKwlyZXQgPSB3bDEyNzFfYm9vdF91cGxvYWRfZmlybXdhcmUod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIDEwLjUgc3RhcnQgZmlybXdhcmUgKi8KKwlyZXQgPSB3bDEyNzFfYm9vdF9ydW5fZmlybXdhcmUod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIHNldCB0aGUgd2wxMjcxIGRlZmF1bHQgZmlsdGVycyAqLworCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CisJd2wtPnJ4X2ZpbHRlciA9IFdMMTI3MV9ERUZBVUxUX1JYX0ZJTFRFUjsKKworCXdsMTI3MV9ldmVudF9tYm94X2NvbmZpZyh3bCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGQ4ZmI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19CT09UX0hfXworI2RlZmluZSBfX0JPT1RfSF9fCisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKworaW50IHdsMTI3MV9ib290KHN0cnVjdCB3bDEyNzEgKndsKTsKKworI2RlZmluZSBXTDEyNzFfTk9fU1VCQkFORFMgOAorI2RlZmluZSBXTDEyNzFfTk9fUE9XRVJfTEVWRUxTIDQKKyNkZWZpbmUgV0wxMjcxX0ZXX1ZFUlNJT05fTUFYX0xFTiAyMAorCitzdHJ1Y3Qgd2wxMjcxX3N0YXRpY19kYXRhIHsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdTggcGFkZGluZ1syXTsKKwl1OCBmd192ZXJzaW9uW1dMMTI3MV9GV19WRVJTSU9OX01BWF9MRU5dOworCXUzMiBod192ZXJzaW9uOworCXU4IHR4X3Bvd2VyX3RhYmxlW1dMMTI3MV9OT19TVUJCQU5EU11bV0wxMjcxX05PX1BPV0VSX0xFVkVMU107Cit9OworCisvKiBudW1iZXIgb2YgdGltZXMgd2UgdHJ5IHRvIHJlYWQgdGhlIElOSVQgaW50ZXJydXB0ICovCisjZGVmaW5lIElOSVRfTE9PUCAyMDAwMAorCisvKiBkZWxheSBiZXR3ZWVuIHJldHJpZXMgKi8KKyNkZWZpbmUgSU5JVF9MT09QX0RFTEFZIDUwCisKKyNkZWZpbmUgUkVGX0NMT0NLICAgICAgICAgICAgMgorI2RlZmluZSBXVV9DT1VOVEVSX1BBVVNFX1ZBTCAweDNGRgorI2RlZmluZSBXRUxQX0FSTV9DT01NQU5EX1ZBTCAweDQKKworI2RlZmluZSBPQ1BfQ01EX0xPT1AgIDMyCisKKyNkZWZpbmUgT0NQX0NNRF9XUklURSAweDEKKyNkZWZpbmUgT0NQX0NNRF9SRUFEICAweDIKKworI2RlZmluZSBPQ1BfUkVBRFlfTUFTSyAgQklUKDE4KQorI2RlZmluZSBPQ1BfU1RBVFVTX01BU0sgKEJJVCgxNikgfCBCSVQoMTcpKQorCisjZGVmaW5lIE9DUF9TVEFUVVNfTk9fUkVTUCAgICAweDAwMDAwCisjZGVmaW5lIE9DUF9TVEFUVVNfT0sgICAgICAgICAweDEwMDAwCisjZGVmaW5lIE9DUF9TVEFUVVNfUkVRX0ZBSUxFRCAweDIwMDAwCisjZGVmaW5lIE9DUF9TVEFUVVNfUkVTUF9FUlJPUiAweDMwMDAwCisKKyNkZWZpbmUgT0NQX1JFR19QT0xBUklUWSAweDMwMDMyCisKKyNkZWZpbmUgQ01EX01CT1hfQUREUkVTUyAweDQwN0I0CisKKyNkZWZpbmUgUE9MQVJJVFlfTE9XIEJJVCgxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDM1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCkBAIC0wLDAgKzEsODEzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCisKKy8qCisgKiBzZW5kIGNvbW1hbmQgdG8gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBjb21tYW5kIGlkCisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyB0aGUgY29tbWFuZCwgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICovCitpbnQgd2wxMjcxX2NtZF9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgKmNtZDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIGludHI7CisJaW50IHJldCA9IDA7CisKKwljbWQgPSBidWY7CisJY21kLT5pZCA9IGlkOworCWNtZC0+c3RhdHVzID0gMDsKKworCVdBUk5fT04obGVuICUgNCAhPSAwKTsKKworCXdsMTI3MV9zcGlfbWVtX3dyaXRlKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBidWYsIGxlbik7CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsIElOVFJfVFJJR19DTUQpOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFdMMTI3MV9DT01NQU5EX1RJTUVPVVQpOworCisJaW50ciA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUik7CisJd2hpbGUgKCEoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQl3bDEyNzFfZXJyb3IoImNvbW1hbmQgY29tcGxldGUgdGltZW91dCIpOworCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJbXNsZWVwKDEpOworCisJCWludHIgPSB3bDEyNzFfcmVnX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCX0KKworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfQUNLLAorCQkJICAgV0wxMjcxX0FDWF9JTlRSX0NNRF9DT01QTEVURSk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2NtZF9jYWxfY2hhbm5lbF90dW5lKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyNzFfY21kX2NhbF9jaGFubmVsX3R1bmUgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPnRlc3QuaWQgPSBURVNUX0NNRF9DSEFOTkVMX1RVTkU7CisKKwljbWQtPmJhbmQgPSBXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfMl80OworCS8qIHNldCB1cCBhbnkgY2hhbm5lbCwgNyBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZSAqLworCWNtZC0+Y2hhbm5lbCA9IDc7CisKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX3dhcm5pbmcoIlRFU1RfQ01EX0NIQU5ORUxfVFVORSBmYWlsZWQiKTsKKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfY2FsX3VwZGF0ZV9yZWZfcG9pbnQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfY2FsX3VwZGF0ZV9yZWZfcG9pbnQgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPnRlc3QuaWQgPSBURVNUX0NNRF9VUERBVEVfUERfUkVGRVJFTkNFX1BPSU5UOworCisJLyogRklYTUU6IHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBjb3JyZWN0IHZhbHVlcyAqLworCWNtZC0+cmVmX3Bvd2VyICAgID0gMDsKKwljbWQtPnJlZl9kZXRlY3RvciA9IDA7CisKKwljbWQtPnN1Yl9iYW5kICAgICA9IFdMMTI3MV9QRF9SRUZFUkVOQ0VfUE9JTlRfQkFORF9CX0c7CisKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJd2wxMjcxX3dhcm5pbmcoIlRFU1RfQ01EX1VQREFURV9QRF9SRUZFUkVOQ0VfUE9JTlQgZmFpbGVkIik7CisKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX2NhbF9wMmcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfY2FsX3AyZyAqY21kOworCWludCByZXQgPSAwOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+dGVzdC5pZCA9IFRFU1RfQ01EX1AyR19DQUw7CisKKwljbWQtPnN1Yl9iYW5kX21hc2sgPSBXTDEyNzFfQ0FMX1AyR19CQU5EX0JfRzsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgY21kLCBzaXplb2YoKmNtZCksIDApOworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfd2FybmluZygiVEVTVF9DTURfUDJHX0NBTCBmYWlsZWQiKTsKKworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfY2FsKHN0cnVjdCB3bDEyNzEgKndsKQoreworCS8qCisJICogRklYTUU6IHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgd2UncmUgbm90IHNsZWVwaW5nIHdoZW4gY2FsaWJyYXRpb24KKwkgKiBpcyBkb25lCisJICovCisJaW50IHJldDsKKworCXdsMTI3MV9ub3RpY2UoInBlcmZvcm1pbmcgdHggY2FsaWJyYXRpb24iKTsKKworCXJldCA9IHdsMTI3MV9jbWRfY2FsX2NoYW5uZWxfdHVuZSh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NhbF91cGRhdGVfcmVmX3BvaW50KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9jbWRfY2FsX3AyZyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSwgdTggZHRpbV9pbnRlcnZhbCwKKwkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IHdhaXQpCit7CisJc3RhdGljIGJvb2wgZG9fY2FsID0gdHJ1ZTsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJc3RydWN0IHdsMTI3MV9jbWRfam9pbiAqam9pbjsKKwlpbnQgcmV0LCBpOworCXU4ICpic3NpZDsKKworCS8qIEZJWE1FOiByZW1vdmUgd2hlbiB3ZSBnZXQgY2FsaWJyYXRpb24gZnJvbSB0aGUgZmFjdG9yeSAqLworCWlmIChkb19jYWwpIHsKKwkJcmV0ID0gd2wxMjcxX2NtZF9jYWwod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCXdsMTI3MV93YXJuaW5nKCJjb3VsZG4ndCBjYWxpYnJhdGUiKTsKKwkJZWxzZQorCQkJZG9fY2FsID0gZmFsc2U7CisJfQorCisKKwlqb2luID0ga3phbGxvYyhzaXplb2YoKmpvaW4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWpvaW4pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBqb2luIik7CisKKwkvKiBSZXZlcnNlIG9yZGVyIEJTU0lEICovCisJYnNzaWQgPSAodTggKikgJmpvaW4tPmJzc2lkX2xzYjsKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJYnNzaWRbaV0gPSB3bC0+YnNzaWRbRVRIX0FMRU4gLSBpIC0gMV07CisKKwlqb2luLT5yeF9jb25maWdfb3B0aW9ucyA9IHdsLT5yeF9jb25maWc7CisJam9pbi0+cnhfZmlsdGVyX29wdGlvbnMgPSB3bC0+cnhfZmlsdGVyOworCisJam9pbi0+YmFzaWNfcmF0ZV9zZXQgPSBSQVRFX01BU0tfMU1CUFMgfCBSQVRFX01BU0tfMk1CUFMgfAorCQlSQVRFX01BU0tfNV81TUJQUyB8IFJBVEVfTUFTS18xMU1CUFM7CisKKwlqb2luLT5iZWFjb25faW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWw7CisJam9pbi0+ZHRpbV9pbnRlcnZhbCA9IGR0aW1faW50ZXJ2YWw7CisJam9pbi0+YnNzX3R5cGUgPSBic3NfdHlwZTsKKwlqb2luLT5jaGFubmVsID0gd2wtPmNoYW5uZWw7CisJam9pbi0+c3NpZF9sZW4gPSB3bC0+c3NpZF9sZW47CisJbWVtY3B5KGpvaW4tPnNzaWQsIHdsLT5zc2lkLCB3bC0+c3NpZF9sZW4pOworCWpvaW4tPmN0cmwgPSBXTDEyNzFfSk9JTl9DTURfQ1RSTF9UWF9GTFVTSDsKKworCS8qIGluY3JlbWVudCB0aGUgc2Vzc2lvbiBjb3VudGVyICovCisJd2wtPnNlc3Npb25fY291bnRlcisrOworCWlmICh3bC0+c2Vzc2lvbl9jb3VudGVyID49IFNFU1NJT05fQ09VTlRFUl9NQVgpCisJCXdsLT5zZXNzaW9uX2NvdW50ZXIgPSAwOworCisJam9pbi0+Y3RybCB8PSB3bC0+c2Vzc2lvbl9jb3VudGVyIDw8IFdMMTI3MV9KT0lOX0NNRF9UWF9TRVNTSU9OX09GRlNFVDsKKworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU1RBUlRfSk9JTiwgam9pbiwgc2l6ZW9mKCpqb2luKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gaW5pdGlhdGUgY21kIGpvaW4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhKT0lOX1RJTUVPVVQpOworCisJLyoKKwkgKiB1Z2x5IGhhY2s6IHdlIHNob3VsZCB3YWl0IGZvciBKT0lOX0VWRU5UX0NPTVBMRVRFX0lEIGJ1dCB0bworCSAqIHNpbXBsaWZ5IGxvY2tpbmcgd2UganVzdCBzbGVlcCBpbnN0ZWFkLCBmb3Igbm93CisJICovCisJaWYgKHdhaXQpCisJCW1zbGVlcCgxMCk7CisKK291dF9mcmVlOgorCWtmcmVlKGpvaW4pOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBzZW5kIHRlc3QgY29tbWFuZCB0byBmaXJtd2FyZQorICoKKyAqIEB3bDogd2wgc3RydWN0CisgKiBAYnVmOiBidWZmZXIgY29udGFpbmluZyB0aGUgY29tbWFuZCwgd2l0aCBhbGwgaGVhZGVycywgbXVzdCB3b3JrIHdpdGggZG1hCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGJ1ZmZlcgorICogQGFuc3dlcjogaXMgYW5zd2VyIG5lZWRlZAorICovCitpbnQgd2wxMjcxX2NtZF90ZXN0KHN0cnVjdCB3bDEyNzEgKndsLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuLCB1OCBhbnN3ZXIpCit7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgdGVzdCIpOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfVEVTVCwgYnVmLCBidWZfbGVuKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJURVNUIGNvbW1hbmQgZmFpbGVkIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGFuc3dlcikgeworCQlzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQgKmNtZF9hbnN3ZXI7CisKKwkJLyoKKwkJICogVGhlIHRlc3QgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiByZWFkIHRoZSBhbnN3ZXIuCisJCSAqIFRoZSBhbnN3ZXIgd291bGQgYmUgYSB3bDEyNzFfY29tbWFuZCwgd2hlcmUgdGhlCisJCSAqIHBhcmFtZXRlciBhcnJheSBjb250YWlucyB0aGUgYWN0dWFsIGFuc3dlci4KKwkJICovCisJCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgYnVmX2xlbik7CisKKwkJY21kX2Fuc3dlciA9IGJ1ZjsKKworCQlpZiAoY21kX2Fuc3dlci0+aGVhZGVyLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCisJCQl3bDEyNzFfZXJyb3IoIlRFU1QgY29tbWFuZCBhbnN3ZXIgZXJyb3I6ICVkIiwKKwkJCQkgICAgIGNtZF9hbnN3ZXItPmhlYWRlci5zdGF0dXMpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHJlYWQgYWN4IGZyb20gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBhY3ggaWQKKyAqIEBidWY6IGJ1ZmZlciBmb3IgdGhlIHJlc3BvbnNlLCBpbmNsdWRpbmcgYWxsIGhlYWRlcnMsIG11c3Qgd29yayB3aXRoIGRtYQorICogQGxlbjogbGVuZ2h0IG9mIGJ1ZgorICovCitpbnQgd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGFjeF9oZWFkZXIgKmFjeCA9IGJ1ZjsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBpbnRlcnJvZ2F0ZSIpOworCisJYWN4LT5pZCA9IGlkOworCisJLyogcGF5bG9hZCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgYW55IGhlYWRlcnMgKi8KKwlhY3gtPmxlbiA9IGxlbiAtIHNpemVvZigqYWN4KTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX0lOVEVSUk9HQVRFLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJJTlRFUlJPR0FURSBjb21tYW5kIGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiB0aGUgaW50ZXJyb2dhdGUgY29tbWFuZCBnb3QgaW4sIHdlIGNhbiByZWFkIHRoZSBhbnN3ZXIgKi8KKwl3bDEyNzFfc3BpX21lbV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBidWYsIGxlbik7CisKKwlhY3ggPSBidWY7CisJaWYgKGFjeC0+Y21kLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpCisJCXdsMTI3MV9lcnJvcigiSU5URVJST0dBVEUgY29tbWFuZCBlcnJvcjogJWQiLAorCQkJICAgICBhY3gtPmNtZC5zdGF0dXMpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB3cml0ZSBhY3ggdmFsdWUgdG8gZmlybXdhcmUKKyAqCisgKiBAd2w6IHdsIHN0cnVjdAorICogQGlkOiBhY3ggaWQKKyAqIEBidWY6IGJ1ZmZlciBjb250YWluaW5nIGFjeCwgaW5jbHVkaW5nIGFsbCBoZWFkZXJzLCBtdXN0IHdvcmsgd2l0aCBkbWEKKyAqIEBsZW46IGxlbmd0aCBvZiBidWYKKyAqLworaW50IHdsMTI3MV9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYWN4X2hlYWRlciAqYWN4ID0gYnVmOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIGNvbmZpZ3VyZSIpOworCisJYWN4LT5pZCA9IGlkOworCisJLyogcGF5bG9hZCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgYW55IGhlYWRlcnMgKi8KKwlhY3gtPmxlbiA9IGxlbiAtIHNpemVvZigqYWN4KTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX0NPTkZJR1VSRSwgYWN4LCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJDT05GSUdVUkUgY29tbWFuZCBOT0siKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBjaGFubmVsLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgY21kX2VuYWJsZWRpc2FibGVfcGF0aCAqY21kOworCWludCByZXQ7CisJdTE2IGNtZF9yeCwgY21kX3R4OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBkYXRhIHBhdGgiKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljbWQtPmNoYW5uZWwgPSBjaGFubmVsOworCisJaWYgKGVuYWJsZSkgeworCQljbWRfcnggPSBDTURfRU5BQkxFX1JYOworCQljbWRfdHggPSBDTURfRU5BQkxFX1RYOworCX0gZWxzZSB7CisJCWNtZF9yeCA9IENNRF9ESVNBQkxFX1JYOworCQljbWRfdHggPSBDTURfRElTQUJMRV9UWDsKKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIGNtZF9yeCwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigicnggJXMgY21kIGZvciBjaGFubmVsICVkIGZhaWxlZCIsCisJCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInJ4ICVzIGNtZCBjaGFubmVsICVkIiwKKwkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgY21kX3R4LCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJ0eCAlcyBjbWQgZm9yIGNoYW5uZWwgJWQgZmFpbGVkIiwKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisJCXJldHVybiByZXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJ0eCAlcyBjbWQgY2hhbm5lbCAlZCIsCisJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY2hhbm5lbCk7CisKK291dDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3BzX21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHBzX21vZGUpCit7CisJc3RydWN0IHdsMTI3MV9jbWRfcHNfcGFyYW1zICpwc19wYXJhbXMgPSBOVUxMOworCWludCByZXQgPSAwOworCisJLyogRklYTUU6IHRoaXMgc2hvdWxkIGJlIGluIHBzLmMgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyh3bCwgV0FLRV9VUF9FVkVOVF9EVElNX0JJVE1BUCwKKwkJCQkJICAgIHdsLT5saXN0ZW5faW50KTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkbid0IHNldCB3YWtlIHVwIGNvbmRpdGlvbnMiKTsKKwkJZ290byBvdXQ7CisJfQorCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBzZXQgcHMgbW9kZSIpOworCisJcHNfcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBzX3BhcmFtcyksIEdGUF9LRVJORUwpOworCWlmICghcHNfcGFyYW1zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXBzX3BhcmFtcy0+cHNfbW9kZSA9IHBzX21vZGU7CisJcHNfcGFyYW1zLT5zZW5kX251bGxfZGF0YSA9IDE7CisJcHNfcGFyYW1zLT5yZXRyaWVzID0gNTsKKwlwc19wYXJhbXMtPmhhbmdfb3Zlcl9wZXJpb2QgPSAxMjg7CisJcHNfcGFyYW1zLT5udWxsX2RhdGFfcmF0ZSA9IDE7IC8qIDEgTWJwcyAqLworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0VUX1BTX01PREUsIHBzX3BhcmFtcywKKwkJCSAgICAgIHNpemVvZigqcHNfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJjbWQgc2V0X3BzX21vZGUgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKHBzX3BhcmFtcyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI3MV9jbWRfcmVhZF9tZW1vcnkoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBhZGRyLCB2b2lkICphbnN3ZXIsCisJCQkgICBzaXplX3QgbGVuKQoreworCXN0cnVjdCBjbWRfcmVhZF93cml0ZV9tZW1vcnkgKmNtZDsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19DTUQsICJjbWQgcmVhZCBtZW1vcnkiKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlXQVJOX09OKGxlbiA+IE1BWF9SRUFEX1NJWkUpOworCWxlbiA9IG1pbl90KHNpemVfdCwgbGVuLCBNQVhfUkVBRF9TSVpFKTsKKworCWNtZC0+YWRkciA9IGFkZHI7CisJY21kLT5zaXplID0gbGVuOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfUkVBRF9NRU1PUlksIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoInJlYWQgbWVtb3J5IGNvbW1hbmQgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHRoZSByZWFkIGNvbW1hbmQgZ290IGluLCB3ZSBjYW4gbm93IHJlYWQgdGhlIGFuc3dlciAqLworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCWlmIChjbWQtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKQorCQl3bDEyNzFfZXJyb3IoImVycm9yIGluIHJlYWQgY29tbWFuZCByZXN1bHQ6ICVkIiwKKwkJCSAgICAgY21kLT5oZWFkZXIuc3RhdHVzKTsKKworCW1lbWNweShhbnN3ZXIsIGNtZC0+dmFsdWUsIGxlbik7CisKK291dDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3NjYW4oc3RydWN0IHdsMTI3MSAqd2wsIHU4ICpzc2lkLCBzaXplX3QgbGVuLAorCQkgICAgdTggYWN0aXZlX3NjYW4sIHU4IGhpZ2hfcHJpbywgdTggbnVtX2NoYW5uZWxzLAorCQkgICAgdTggcHJvYmVfcmVxdWVzdHMpCit7CisKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF90cmlnZ2VyX3NjYW5fdG8gKnRyaWdnZXIgPSBOVUxMOworCXN0cnVjdCB3bDEyNzFfY21kX3NjYW4gKnBhcmFtcyA9IE5VTEw7CisJaW50IGksIHJldDsKKwl1MTYgc2Nhbl9vcHRpb25zID0gMDsKKworCWlmICh3bC0+c2Nhbm5pbmcpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOworCWlmICghcGFyYW1zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcmFtcy0+cGFyYW1zLnJ4X2NvbmZpZ19vcHRpb25zID0gY3B1X3RvX2xlMzIoQ0ZHX1JYX0FMTF9HT09EKTsKKwlwYXJhbXMtPnBhcmFtcy5yeF9maWx0ZXJfb3B0aW9ucyA9CisJCWNwdV90b19sZTMyKENGR19SWF9QUlNQX0VOIHwgQ0ZHX1JYX01HTVRfRU4gfCBDRkdfUlhfQkNOX0VOKTsKKworCWlmICghYWN0aXZlX3NjYW4pCisJCXNjYW5fb3B0aW9ucyB8PSBXTDEyNzFfU0NBTl9PUFRfUEFTU0lWRTsKKwlpZiAoaGlnaF9wcmlvKQorCQlzY2FuX29wdGlvbnMgfD0gV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0g7CisJcGFyYW1zLT5wYXJhbXMuc2Nhbl9vcHRpb25zID0gc2Nhbl9vcHRpb25zOworCisJcGFyYW1zLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbnVtX2NoYW5uZWxzOworCXBhcmFtcy0+cGFyYW1zLm51bV9wcm9iZV9yZXF1ZXN0cyA9IHByb2JlX3JlcXVlc3RzOworCXBhcmFtcy0+cGFyYW1zLnR4X3JhdGUgPSBjcHVfdG9fbGUzMihSQVRFX01BU0tfMk1CUFMpOworCXBhcmFtcy0+cGFyYW1zLnRpZF90cmlnZ2VyID0gMDsKKwlwYXJhbXMtPnBhcmFtcy5zY2FuX3RhZyA9IFdMMTI3MV9TQ0FOX0RFRkFVTFRfVEFHOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jaGFubmVsczsgaSsrKSB7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0ubWluX2R1cmF0aW9uID0KKwkJCWNwdV90b19sZTMyKFdMMTI3MV9TQ0FOX0NIQU5fTUlOX0RVUkFUSU9OKTsKKwkJcGFyYW1zLT5jaGFubmVsc1tpXS5tYXhfZHVyYXRpb24gPQorCQkJY3B1X3RvX2xlMzIoV0wxMjcxX1NDQU5fQ0hBTl9NQVhfRFVSQVRJT04pOworCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKKwkJbWVtc2V0KCZwYXJhbXMtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7CisJCXBhcmFtcy0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOworCQlwYXJhbXMtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IFdMMTI3MV9TQ0FOX0NVUlJFTlRfVFhfUFdSOworCQlwYXJhbXMtPmNoYW5uZWxzW2ldLmNoYW5uZWwgPSBpICsgMTsKKwl9CisKKwlpZiAobGVuICYmIHNzaWQpIHsKKwkJcGFyYW1zLT5wYXJhbXMuc3NpZF9sZW4gPSBsZW47CisJCW1lbWNweShwYXJhbXMtPnBhcmFtcy5zc2lkLCBzc2lkLCBsZW4pOworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfcHJvYmVfcmVxKHdsLCBzc2lkLCBsZW4pOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiUFJPQkUgcmVxdWVzdCB0ZW1wbGF0ZSBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCisJdHJpZ2dlciA9IGt6YWxsb2Moc2l6ZW9mKCp0cmlnZ2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cmlnZ2VyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCS8qIGRpc2FibGUgdGhlIHRpbWVvdXQgKi8KKwl0cmlnZ2VyLT50aW1lb3V0ID0gMDsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1RSSUdHRVJfU0NBTl9UTywgdHJpZ2dlciwKKwkJCSAgICAgIHNpemVvZigqdHJpZ2dlcikpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigidHJpZ2dlciBzY2FuIHRvIGZhaWxlZCBmb3IgaHcgc2NhbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwl3bDEyNzFfZHVtcChERUJVR19TQ0FOLCAiU0NBTjogIiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOworCisJd2wtPnNjYW5uaW5nID0gdHJ1ZTsKKworCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NDQU4sIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoIlNDQU4gZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI3MV9zcGlfbWVtX3JlYWQod2wsIHdsLT5jbWRfYm94X2FkZHIsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKKworCWlmIChwYXJhbXMtPmhlYWRlci5zdGF0dXMgIT0gQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCXdsMTI3MV9lcnJvcigiU2NhbiBjb21tYW5kIGVycm9yOiAlZCIsCisJCQkgICAgIHBhcmFtcy0+aGVhZGVyLnN0YXR1cyk7CisJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShwYXJhbXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3RlbXBsYXRlX3NldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IHRlbXBsYXRlX2lkLAorCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCit7CisJc3RydWN0IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0ICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHRlbXBsYXRlX3NldCAlZCIsIHRlbXBsYXRlX2lkKTsKKworCVdBUk5fT04oYnVmX2xlbiA+IFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUpOworCWJ1Zl9sZW4gPSBtaW5fdChzaXplX3QsIGJ1Zl9sZW4sIFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNtZC0+bGVuID0gY3B1X3RvX2xlMTYoYnVmX2xlbik7CisJY21kLT50ZW1wbGF0ZV90eXBlID0gdGVtcGxhdGVfaWQ7CisJY21kLT5lbmFibGVkX3JhdGVzID0gQUNYX1JBVEVfTUFTS19VTlNQRUNJRklFRDsKKwljbWQtPnNob3J0X3JldHJ5X2xpbWl0ID0gQUNYX1JBVEVfUkVUUllfTElNSVQ7CisJY21kLT5sb25nX3JldHJ5X2xpbWl0ID0gQUNYX1JBVEVfUkVUUllfTElNSVQ7CisKKwlpZiAoYnVmKQorCQltZW1jcHkoY21kLT50ZW1wbGF0ZV9kYXRhLCBidWYsIGJ1Zl9sZW4pOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0VUX1RFTVBMQVRFLCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNtZCBzZXRfdGVtcGxhdGUgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCitvdXRfZnJlZToKKwlrZnJlZShjbWQpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3bDEyNzFfYnVpbGRfYmFzaWNfcmF0ZXMoY2hhciAqcmF0ZXMpCit7CisJdTggaW5kZXggPSAwOworCisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzFNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV81TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzExTUI7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKGNoYXIgKnJhdGVzKQoreworCXU4IGluZGV4ID0gMDsKKworCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV82TUI7CisJcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQjsKKwlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjsKKworCXJldHVybiBpbmRleDsKK30KKworaW50IHdsMTI3MV9jbWRfYnVpbGRfbnVsbF9kYXRhKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCB3bDEyeHhfbnVsbF9kYXRhX3RlbXBsYXRlIHRlbXBsYXRlOworCisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIod2wtPmJzc2lkKSkgeworCQltZW1jcHkodGVtcGxhdGUuaGVhZGVyLmRhLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgd2wtPmJzc2lkLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5kYSwgMHhmZiwgRVRIX0FMRU4pOworCQltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisJfQorCisJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5zYSwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJdGVtcGxhdGUuaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwkJCQkJCUlFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyk7CisKKwlyZXR1cm4gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9OVUxMX0RBVEEsICZ0ZW1wbGF0ZSwKKwkJCQkgICAgICAgc2l6ZW9mKHRlbXBsYXRlKSk7CisKK30KKworaW50IHdsMTI3MV9jbWRfYnVpbGRfcHNfcG9sbChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGFpZCkKK3sKKwlzdHJ1Y3Qgd2wxMnh4X3BzX3BvbGxfdGVtcGxhdGUgdGVtcGxhdGU7CisKKwltZW1jcHkodGVtcGxhdGUuYnNzaWQsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS50YSwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJdGVtcGxhdGUuYWlkID0gYWlkOworCXRlbXBsYXRlLmZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwpOworCisJcmV0dXJuIHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUFNfUE9MTCwgJnRlbXBsYXRlLAorCQkJCSAgICAgICBzaXplb2YodGVtcGxhdGUpKTsKKworfQorCitpbnQgd2wxMjcxX2NtZF9idWlsZF9wcm9iZV9yZXEoc3RydWN0IHdsMTI3MSAqd2wsIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCit7CisJc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXFfdGVtcGxhdGUgdGVtcGxhdGU7CisJc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqcmF0ZXM7CisJY2hhciAqcHRyOworCXUxNiBzaXplOworCisJcHRyID0gKGNoYXIgKikmdGVtcGxhdGU7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hlYWRlcik7CisKKwltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmRhLCAweGZmLCBFVEhfQUxFTik7CisJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS5oZWFkZXIuc2EsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXRlbXBsYXRlLmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKKworCS8qIElFcyAqLworCS8qIFNTSUQgKi8KKwl0ZW1wbGF0ZS5zc2lkLmhlYWRlci5pZCA9IFdMQU5fRUlEX1NTSUQ7CisJdGVtcGxhdGUuc3NpZC5oZWFkZXIubGVuID0gc3NpZF9sZW47CisJaWYgKHNzaWRfbGVuICYmIHNzaWQpCisJCW1lbWNweSh0ZW1wbGF0ZS5zc2lkLnNzaWQsIHNzaWQsIHNzaWRfbGVuKTsKKwlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyBzc2lkX2xlbjsKKwlwdHIgKz0gc2l6ZTsKKworCS8qIEJhc2ljIFJhdGVzICovCisJcmF0ZXMgPSAoc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqKXB0cjsKKwlyYXRlcy0+aGVhZGVyLmlkID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlyYXRlcy0+aGVhZGVyLmxlbiA9IHdsMTI3MV9idWlsZF9iYXNpY19yYXRlcyhyYXRlcy0+cmF0ZXMpOworCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHJhdGVzLT5oZWFkZXIubGVuOworCXB0ciArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwkvKiBFeHRlbmRlZCByYXRlcyAqLworCXJhdGVzID0gKHN0cnVjdCB3bDEyeHhfaWVfcmF0ZXMgKilwdHI7CisJcmF0ZXMtPmhlYWRlci5pZCA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCXJhdGVzLT5oZWFkZXIubGVuID0gd2wxMjcxX2J1aWxkX2V4dGVuZGVkX3JhdGVzKHJhdGVzLT5yYXRlcyk7CisJc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47CisKKwl3bDEyNzFfZHVtcChERUJVR19TQ0FOLCAiUFJPQkUgUkVROiAiLCAmdGVtcGxhdGUsIHNpemUpOworCisJcmV0dXJuIHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQ0ZHX1BST0JFX1JFUV8yXzQsCisJCQkJICAgICAgICZ0ZW1wbGF0ZSwgc2l6ZSk7Cit9CisKK2ludCB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGlkKQoreworCXN0cnVjdCB3bDEyNzFfY21kX3NldF9rZXlzICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIHNldF9kZWZhdWx0X3dlcF9rZXkgJWQiLCBpZCk7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY21kLT5pZCA9IGlkOworCWNtZC0+a2V5X2FjdGlvbiA9IEtFWV9TRVRfSUQ7CisJY21kLT5rZXlfdHlwZSA9IEtFWV9XRVA7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TRVRfS0VZUywgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJjbWQgc2V0X2RlZmF1bHRfd2VwX2tleSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfY21kX3NldF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBhY3Rpb24sIHU4IGlkLCB1OCBrZXlfdHlwZSwKKwkJICAgICAgIHU4IGtleV9zaXplLCBjb25zdCB1OCAqa2V5LCBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9zZXRfa2V5cyAqY21kOworCWludCByZXQgPSAwOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChrZXlfdHlwZSAhPSBLRVlfV0VQKQorCQltZW1jcHkoY21kLT5hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisKKwljbWQtPmtleV9hY3Rpb24gPSBhY3Rpb247CisJY21kLT5rZXlfc2l6ZSA9IGtleV9zaXplOworCWNtZC0+a2V5X3R5cGUgPSBrZXlfdHlwZTsKKworCS8qIHdlIGhhdmUgb25seSBvbmUgU1NJRCBwcm9maWxlICovCisJY21kLT5zc2lkX3Byb2ZpbGUgPSAwOworCisJY21kLT5pZCA9IGlkOworCisJLyogRklYTUU6IHRoaXMgaXMgZnJvbSB3bDEyNTEsIG5lZWRzIHRvIGJlIGNoZWNrZWQgKi8KKwlpZiAoa2V5X3R5cGUgPT0gS0VZX1RLSVApIHsKKwkJLyoKKwkJICogV2UgZ2V0IHRoZSBrZXkgaW4gdGhlIGZvbGxvd2luZyBmb3JtOgorCQkgKiBUS0lQICgxNiBieXRlcykgLSBUWCBNSUMgKDggYnl0ZXMpIC0gUlggTUlDICg4IGJ5dGVzKQorCQkgKiBidXQgdGhlIHRhcmdldCBpcyBleHBlY3Rpbmc6CisJCSAqIFRLSVAgLSBSWCBNSUMgLSBUWCBNSUMKKwkJICovCisJCW1lbWNweShjbWQtPmtleSwga2V5LCAxNik7CisJCW1lbWNweShjbWQtPmtleSArIDE2LCBrZXkgKyAyNCwgOCk7CisJCW1lbWNweShjbWQtPmtleSArIDI0LCBrZXkgKyAxNiwgOCk7CisKKwl9IGVsc2UgeworCQltZW1jcHkoY21kLT5rZXksIGtleSwga2V5X3NpemUpOworCX0KKworCXdsMTI3MV9kdW1wKERFQlVHX0NSWVBULCAiVEFSR0VUIEtFWTogIiwgY21kLCBzaXplb2YoKmNtZCkpOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfU0VUX0tFWVMsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiY291bGQgbm90IHNldCBrZXlzIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxYTg0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjcxX0NNRF9IX18KKyNkZWZpbmUgX19XTDEyNzFfQ01EX0hfXworCisjaW5jbHVkZSAid2wxMjcxLmgiCisKK3N0cnVjdCBhY3hfaGVhZGVyOworCitpbnQgd2wxMjcxX2NtZF9zZW5kKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgdHlwZSwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbik7CitpbnQgd2wxMjcxX2NtZF9qb2luKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBic3NfdHlwZSwgdTggZHRpbV9pbnRlcnZhbCwKKwkJICAgIHUxNiBiZWFjb25faW50ZXJ2YWwsIHU4IHdhaXQpOworaW50IHdsMTI3MV9jbWRfdGVzdChzdHJ1Y3Qgd2wxMjcxICp3bCwgdm9pZCAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdTggYW5zd2VyKTsKK2ludCB3bDEyNzFfY21kX2ludGVycm9nYXRlKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CitpbnQgd2wxMjcxX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBpZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK2ludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggY2hhbm5lbCwgYm9vbCBlbmFibGUpOworaW50IHdsMTI3MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcHNfbW9kZSk7CitpbnQgd2wxMjcxX2NtZF9yZWFkX21lbW9yeShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGFkZHIsIHZvaWQgKmFuc3dlciwKKwkJCSAgIHNpemVfdCBsZW4pOworaW50IHdsMTI3MV9jbWRfc2NhbihzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggKnNzaWQsIHNpemVfdCBsZW4sCisJCSAgICB1OCBhY3RpdmVfc2NhbiwgdTggaGlnaF9wcmlvLCB1OCBudW1fY2hhbm5lbHMsCisJCSAgICB1OCBwcm9iZV9yZXF1ZXN0cyk7CitpbnQgd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiB0ZW1wbGF0ZV9pZCwKKwkJCSAgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKTsKK2ludCB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjcxICp3bCk7CitpbnQgd2wxMjcxX2NtZF9idWlsZF9wc19wb2xsKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWlkKTsKK2ludCB3bDEyNzFfY21kX2J1aWxkX3Byb2JlX3JlcShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7CitpbnQgd2wxMjcxX2NtZF9zZXRfZGVmYXVsdF93ZXBfa2V5KHN0cnVjdCB3bDEyNzEgKndsLCB1OCBpZCk7CitpbnQgd2wxMjcxX2NtZF9zZXRfa2V5KHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgYWN0aW9uLCB1OCBpZCwgdTgga2V5X3R5cGUsCisJCSAgICAgICB1OCBrZXlfc2l6ZSwgY29uc3QgdTggKmtleSwgY29uc3QgdTggKmFkZHIpOworCitlbnVtIHdsMTI3MV9jb21tYW5kcyB7CisJQ01EX0lOVEVSUk9HQVRFICAgICA9IDEsICAgIC8qdXNlIHRoaXMgdG8gcmVhZCBpbmZvcm1hdGlvbiBlbGVtZW50cyovCisJQ01EX0NPTkZJR1VSRSAgICAgICA9IDIsICAgIC8qdXNlIHRoaXMgdG8gd3JpdGUgaW5mb3JtYXRpb24gZWxlbWVudHMqLworCUNNRF9FTkFCTEVfUlggICAgICAgPSAzLAorCUNNRF9FTkFCTEVfVFggICAgICAgPSA0LAorCUNNRF9ESVNBQkxFX1JYICAgICAgPSA1LAorCUNNRF9ESVNBQkxFX1RYICAgICAgPSA2LAorCUNNRF9TQ0FOICAgICAgICAgICAgPSA4LAorCUNNRF9TVE9QX1NDQU4gICAgICAgPSA5LAorCUNNRF9TVEFSVF9KT0lOICAgICAgPSAxMSwKKwlDTURfU0VUX0tFWVMgICAgICAgID0gMTIsCisJQ01EX1JFQURfTUVNT1JZICAgICA9IDEzLAorCUNNRF9XUklURV9NRU1PUlkgICAgPSAxNCwKKwlDTURfU0VUX1RFTVBMQVRFICAgID0gMTksCisJQ01EX1RFU1QgICAgICAgICAgICA9IDIzLAorCUNNRF9OT0lTRV9ISVNUICAgICAgPSAyOCwKKwlDTURfTE5BX0NPTlRST0wgICAgID0gMzIsCisJQ01EX1NFVF9CQ05fTU9ERSAgICA9IDMzLAorCUNNRF9NRUFTVVJFTUVOVCAgICAgID0gMzQsCisJQ01EX1NUT1BfTUVBU1VSRU1FTlQgPSAzNSwKKwlDTURfRElTQ09OTkVDVCAgICAgICA9IDM2LAorCUNNRF9TRVRfUFNfTU9ERSAgICAgID0gMzcsCisJQ01EX0NIQU5ORUxfU1dJVENIICAgPSAzOCwKKwlDTURfU1RPUF9DSEFOTkVMX1NXSUNUSCA9IDM5LAorCUNNRF9BUF9ESVNDT1ZFUlkgICAgID0gNDAsCisJQ01EX1NUT1BfQVBfRElTQ09WRVJZID0gNDEsCisJQ01EX1NQU19TQ0FOID0gNDIsCisJQ01EX1NUT1BfU1BTX1NDQU4gPSA0MywKKwlDTURfSEVBTFRIX0NIRUNLICAgICA9IDQ1LAorCUNNRF9ERUJVRyAgICAgICAgICAgID0gNDYsCisJQ01EX1RSSUdHRVJfU0NBTl9UTyAgPSA0NywKKwlDTURfQ09OTkVDVElPTl9TQ0FOX0NGRyAgICAgID0gNDgsCisJQ01EX0NPTk5FQ1RJT05fU0NBTl9TU0lEX0NGRyA9IDQ5LAorCUNNRF9TVEFSVF9QRVJJT0RJQ19TQ0FOICAgICAgPSA1MCwKKwlDTURfU1RPUF9QRVJJT0RJQ19TQ0FOICAgICAgID0gNTEsCisJQ01EX1NFVF9TVEFfU1RBVEUgICAgICAgICAgICA9IDUyLAorCisJTlVNX0NPTU1BTkRTLAorCU1BWF9DT01NQU5EX0lEID0gMHhGRkZGLAorfTsKKworI2RlZmluZSBNQVhfQ01EX1BBUkFNUyA1NzIKKworZW51bSBjbWRfdGVtcGwgeworCUNNRF9URU1QTF9OVUxMX0RBVEEgPSAwLAorCUNNRF9URU1QTF9CRUFDT04sCisJQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfMl80LAorCUNNRF9URU1QTF9DRkdfUFJPQkVfUkVRXzUsCisJQ01EX1RFTVBMX1BST0JFX1JFU1BPTlNFLAorCUNNRF9URU1QTF9RT1NfTlVMTF9EQVRBLAorCUNNRF9URU1QTF9QU19QT0xMLAorCUNNRF9URU1QTF9LTFYsCisJQ01EX1RFTVBMX0RJU0NPTk5FQ1QsCisJQ01EX1RFTVBMX1BST0JFX1JFUV8yXzQsIC8qIGZvciBmaXJtd2FyZSBpbnRlcm5hbCB1c2Ugb25seSAqLworCUNNRF9URU1QTF9QUk9CRV9SRVFfNSwgICAvKiBmb3IgZmlybXdhcmUgaW50ZXJuYWwgdXNlIG9ubHkgKi8KKwlDTURfVEVNUExfQkFSLCAgICAgICAgICAgLyogZm9yIGZpcm13YXJlIGludGVybmFsIHVzZSBvbmx5ICovCisJQ01EX1RFTVBMX0NUUywgICAgICAgICAgIC8qCisJCQkJICAqIEZvciBDVFMtdG8tc2VsZiAoRmFzdENUUykgbWVjaGFuaXNtCisJCQkJICAqIGZvciBCVC9XTEFOIGNvZXhpc3RlbmNlIChTb2Z0R2VtaW5pKS4gKi8KKwlDTURfVEVNUExfTUFYID0gMHhmZgorfTsKKworLyogdW5pdCBtcyAqLworI2RlZmluZSBXTDEyNzFfQ09NTUFORF9USU1FT1VUICAgICAyMDAwCisjZGVmaW5lIFdMMTI3MV9DTURfVEVNUExfTUFYX1NJWkUgIDI1MgorCitzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgeworCXUxNiBpZDsKKwl1MTYgc3RhdHVzOworCS8qIHBheWxvYWQgKi8KKwl1OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgV0wxMjcxX0NNRF9NQVhfUEFSQU1TIDU3MgorCitzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisJdTggIHBhcmFtZXRlcnNbV0wxMjcxX0NNRF9NQVhfUEFSQU1TXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsKKwlDTURfTUFJTEJPWF9JRExFCQk9ICAwLAorCUNNRF9TVEFUVVNfU1VDQ0VTUwkJPSAgMSwKKwlDTURfU1RBVFVTX1VOS05PV05fQ01ECQk9ICAyLAorCUNNRF9TVEFUVVNfVU5LTk9XTl9JRQkJPSAgMywKKwlDTURfU1RBVFVTX1JFSkVDVF9NRUFTX1NHX0FDVElWRQk9IDExLAorCUNNRF9TVEFUVVNfUlhfQlVTWQkJPSAxMywKKwlDTURfU1RBVFVTX0lOVkFMSURfUEFSQU0JCT0gMTQsCisJQ01EX1NUQVRVU19URU1QTEFURV9UT09fTEFSR0UJCT0gMTUsCisJQ01EX1NUQVRVU19PVVRfT0ZfTUVNT1JZCQk9IDE2LAorCUNNRF9TVEFUVVNfU1RBX1RBQkxFX0ZVTEwJCT0gMTcsCisJQ01EX1NUQVRVU19SQURJT19FUlJPUgkJPSAxOCwKKwlDTURfU1RBVFVTX1dST05HX05FU1RJTkcJCT0gMTksCisJQ01EX1NUQVRVU19USU1FT1VUCQk9IDIxLCAvKiBEcml2ZXIgaW50ZXJuYWwgdXNlLiovCisJQ01EX1NUQVRVU19GV19SRVNFVAkJPSAyMiwgLyogRHJpdmVyIGludGVybmFsIHVzZS4qLworCU1BWF9DT01NQU5EX1NUQVRVUwkJPSAweGZmCit9OworCisKKy8qCisgKiBDTURfUkVBRF9NRU1PUlkKKyAqCisgKiBUaGUgaG9zdCBpc3N1ZXMgdGhpcyBjb21tYW5kIHRvIHJlYWQgdGhlIFdpTGluayBkZXZpY2UgbWVtb3J5L3JlZ2lzdGVycy4KKyAqCisgKiBOb3RlOiBUaGUgQmFzZSBCYW5kIGFkZHJlc3MgaGFzIHNwZWNpYWwgaGFuZGxpbmcgKDE2IGJpdHMgcmVnaXN0ZXJzIGFuZAorICogYWRkcmVzc2VzKS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgaGFyZHdhcmUgc3BlY2lmaWNhdGlvbi4KKyAqLworLyoKKyAqIENNRF9XUklURV9NRU1PUlkKKyAqCisgKiBUaGUgaG9zdCBpc3N1ZXMgdGhpcyBjb21tYW5kIHRvIHdyaXRlIHRoZSBXaUxpbmsgZGV2aWNlIG1lbW9yeS9yZWdpc3RlcnMuCisgKgorICogVGhlIEJhc2UgQmFuZCBhZGRyZXNzIGhhcyBzcGVjaWFsIGhhbmRsaW5nICgxNiBiaXRzIHJlZ2lzdGVycyBhbmQKKyAqIGFkZHJlc3NlcykuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGhhcmR3YXJlIHNwZWNpZmljYXRpb24uCisgKi8KKyNkZWZpbmUgTUFYX1JFQURfU0laRSAyNTYKKworc3RydWN0IGNtZF9yZWFkX3dyaXRlX21lbW9yeSB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCS8qIFRoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLiovCisJdTMyIGFkZHI7CisKKwkvKiBUaGUgYW1vdW50IG9mIGRhdGEgaW4gYnl0ZXMgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIHRoZSBXaUxpbmsKKwkgKiBkZXZpY2UuKi8KKwl1MzIgc2l6ZTsKKworCS8qIFRoZSBhY3R1YWwgdmFsdWUgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gdGhlIFdpbGluay4gVGhlIHNvdXJjZQorCSAgIG9mIHRoaXMgZmllbGQgaXMgdGhlIEhvc3QgaW4gV1JJVEUgY29tbWFuZCBvciB0aGUgV2lsaW5rIGluIFJFQUQKKwkgICBjb21tYW5kLiAqLworCXU4IHZhbHVlW01BWF9SRUFEX1NJWkVdOworfTsKKworI2RlZmluZSBDTURNQk9YX0hFQURFUl9MRU4gNAorI2RlZmluZSBDTURNQk9YX0lORk9fRUxFTV9IRUFERVJfTEVOIDQKKworZW51bSB7CisJQlNTX1RZUEVfSUJTUyA9IDAsCisJQlNTX1RZUEVfU1RBX0JTUyA9IDIsCisJQlNTX1RZUEVfQVBfQlNTID0gMywKKwlNQVhfQlNTX1RZUEUgPSAweEZGCit9OworCisjZGVmaW5lIFdMMTI3MV9KT0lOX0NNRF9DVFJMX1RYX0ZMVVNIICAgICAweDgwIC8qIEZpcm13YXJlIGZsdXNoZXMgYWxsIFR4ICovCisjZGVmaW5lIFdMMTI3MV9KT0lOX0NNRF9UWF9TRVNTSU9OX09GRlNFVCAxCisKK3N0cnVjdCB3bDEyNzFfY21kX2pvaW4geworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1MzIgYnNzaWRfbHNiOworCXUxNiBic3NpZF9tc2I7CisJdTE2IGJlYWNvbl9pbnRlcnZhbDsgLyogaW4gVEJUVHMgKi8KKwl1MzIgcnhfY29uZmlnX29wdGlvbnM7CisJdTMyIHJ4X2ZpbHRlcl9vcHRpb25zOworCisJLyoKKwkgKiBUaGUgdGFyZ2V0IHVzZXMgdGhpcyBmaWVsZCB0byBkZXRlcm1pbmUgdGhlIHJhdGUgYXQKKwkgKiB3aGljaCB0byB0cmFuc21pdCBjb250cm9sIGZyYW1lIHJlc3BvbnNlcyAoc3VjaCBhcworCSAqIEFDSyBvciBDVFMgZnJhbWVzKS4KKwkgKi8KKwl1MzIgYmFzaWNfcmF0ZV9zZXQ7CisJdTggZHRpbV9pbnRlcnZhbDsKKwkvKgorCSAqIGJpdHMgMC0yOiBUaGlzIGJpdHdpc2UgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlCisJICogb2YgQlNTIHRvIHN0YXJ0IG9yIGpvaW4gKEJTU19UWVBFXyopLgorCSAqIGJpdCA0OiBCYW5kIC0gVGhlIHJhZGlvIGJhbmQgaW4gd2hpY2ggdG8gam9pbgorCSAqIG9yIHN0YXJ0LgorCSAqICAwIC0gMi40R0h6IGJhbmQKKwkgKiAgMSAtIDVHSHogYmFuZAorCSAqIGJpdHMgMywgNS03OiBSZXNlcnZlZAorCSAqLworCXU4IGJzc190eXBlOworCXU4IGNoYW5uZWw7CisJdTggc3NpZF9sZW47CisJdTggc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJdTggY3RybDsgLyogSk9JTl9DTURfQ1RSTF8qICovCisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGNtZF9lbmFibGVkaXNhYmxlX3BhdGggeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCBjaGFubmVsOworCXU4IHBhZGRpbmdbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0IHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTE2IGxlbjsKKwl1OCB0ZW1wbGF0ZV90eXBlOworCXU4IGluZGV4OyAgLyogcmVsZXZhbnQgb25seSBmb3IgS0xWX1RFTVBMQVRFIHR5cGUgKi8KKwl1MzIgZW5hYmxlZF9yYXRlczsKKwl1OCBzaG9ydF9yZXRyeV9saW1pdDsKKwl1OCBsb25nX3JldHJ5X2xpbWl0OworCXU4IGFmbGFnczsKKwl1OCByZXNlcnZlZDsKKwl1OCB0ZW1wbGF0ZV9kYXRhW1dMMTI3MV9DTURfVEVNUExfTUFYX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVElNX0VMRV9JRCAgICA1CisjZGVmaW5lIFBBUlRJQUxfVkJNX01BWCAgICAyNTEKKworc3RydWN0IHdsMTI3MV90aW0geworCXU4IGlkZW50aXR5OworCXU4IGxlbmd0aDsKKwl1OCBkdGltX2NvdW50OworCXU4IGR0aW1fcGVyaW9kOworCXU4IGJpdG1hcF9jdHJsOworCXU4IHB2Yl9maWVsZFtQQVJUSUFMX1ZCTV9NQVhdOyAvKiBQYXJ0aWFsIFZpcnR1YWwgQml0bWFwICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSB3bDEyNzFfY21kX3BzX21vZGUgeworCVNUQVRJT05fQUNUSVZFX01PREUsCisJU1RBVElPTl9QT1dFUl9TQVZFX01PREUKK307CisKK3N0cnVjdCB3bDEyNzFfY21kX3BzX3BhcmFtcyB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXU4IHBzX21vZGU7IC8qIFNUQVRJT05fKiAqLworCXU4IHNlbmRfbnVsbF9kYXRhOyAvKiBEbyB3ZSBoYXZlIHRvIHNlbmQgTlVMTCBkYXRhIHBhY2tldCA/ICovCisJdTggcmV0cmllczsgLyogTnVtYmVyIG9mIHJldGlyZXMgZm9yIHRoZSBpbml0aWFsIE5VTEwgZGF0YSBwYWNrZXQgKi8KKworCSAvKgorCSAgKiBUVXMgZHVyaW5nIHdoaWNoIHRoZSB0YXJnZXQgc3RheXMgYXdha2UgYWZ0ZXIgc3dpdGNoaW5nCisJICAqIHRvIHBvd2VyIHNhdmUgbW9kZS4KKwkgICovCisJdTggaGFuZ19vdmVyX3BlcmlvZDsKKwl1MzIgbnVsbF9kYXRhX3JhdGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogSFcgZW5jcnlwdGlvbiBrZXlzICovCisjZGVmaW5lIE5VTV9BQ0NFU1NfQ0FURUdPUklFU19DT1BZIDQKKyNkZWZpbmUgTUFYX0tFWV9TSVpFIDMyCisKKy8qIFdoZW4gc2V0LCBkaXNhYmxlIEhXIGVuY3J5cHRpb24gKi8KKyNkZWZpbmUgREZfRU5DUllQVElPTl9ESVNBQkxFICAgICAgMHgwMQorLyogV2hlbiBzZXQsIGRpc2FibGUgSFcgZGVjcnlwdGlvbiAqLworI2RlZmluZSBERl9TTklGRl9NT0RFX0VOQUJMRSAgICAgICAweDgwCisKK2VudW0gd2wxMjcxX2NtZF9rZXlfYWN0aW9uIHsKKwlLRVlfQUREX09SX1JFUExBQ0UgPSAxLAorCUtFWV9SRU1PVkUgICAgICAgICA9IDIsCisJS0VZX1NFVF9JRCAgICAgICAgID0gMywKKwlNQVhfS0VZX0FDVElPTiAgICAgPSAweGZmZmYsCit9OworCitlbnVtIHdsMTI3MV9jbWRfa2V5X3R5cGUgeworCUtFWV9OT05FID0gMCwKKwlLRVlfV0VQICA9IDEsCisJS0VZX1RLSVAgPSAyLAorCUtFWV9BRVMgID0gMywKKwlLRVlfR0VNICA9IDQKK307CisKKy8qIEZJWE1FOiBBZGQgZGVzY3JpcHRpb24gZm9yIGtleS10eXBlcyAqLworCitzdHJ1Y3Qgd2wxMjcxX2NtZF9zZXRfa2V5cyB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCS8qIElnbm9yZWQgZm9yIGRlZmF1bHQgV0VQIGtleSAqLworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJLyoga2V5X2FjdGlvbl9lICovCisJdTE2IGtleV9hY3Rpb247CisKKwl1MTYgcmVzZXJ2ZWRfMTsKKworCS8qIGtleSBzaXplIGluIGJ5dGVzICovCisJdTgga2V5X3NpemU7CisKKwkvKiBrZXlfdHlwZV9lICovCisJdTgga2V5X3R5cGU7CisJdTggc3NpZF9wcm9maWxlOworCisJLyoKKwkgKiBUS0lQLCBBRVM6IGZyYW1lJ3Mga2V5IGlkIGZpZWxkLgorCSAqIEZvciBXRVAgZGVmYXVsdCBrZXk6IGtleSBpZDsKKwkgKi8KKwl1OCBpZDsKKwl1OCByZXNlcnZlZF8yWzZdOworCXU4IGtleVtNQVhfS0VZX1NJWkVdOworCXUxNiBhY19zZXFfbnVtMTZbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOworCXUzMiBhY19zZXFfbnVtMzJbTlVNX0FDQ0VTU19DQVRFR09SSUVTX0NPUFldOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworI2RlZmluZSBXTDEyNzFfU0NBTl9NQVhfQ0hBTk5FTFMgICAgICAgMjQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fREVGQVVMVF9UQUcgICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQ1VSUkVOVF9UWF9QV1IgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX0FDVElWRSAgICAgICAgIDAKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BBU1NJVkUJICAgICAgIDEKKyNkZWZpbmUgV0wxMjcxX1NDQU5fT1BUX1BSSU9SSVRZX0hJR0ggIDQKKyNkZWZpbmUgV0wxMjcxX1NDQU5fQ0hBTl9NSU5fRFVSQVRJT04gIDMwMDAwICAvKiBUVSAqLworI2RlZmluZSBXTDEyNzFfU0NBTl9DSEFOX01BWF9EVVJBVElPTiAgNjAwMDAgIC8qIFRVICovCisKK3N0cnVjdCBiYXNpY19zY2FuX3BhcmFtcyB7CisJdTMyIHJ4X2NvbmZpZ19vcHRpb25zOworCXUzMiByeF9maWx0ZXJfb3B0aW9uczsKKwkvKiBTY2FuIG9wdGlvbiBmbGFncyAoV0wxMjcxX1NDQU5fT1BUXyopICovCisJdTE2IHNjYW5fb3B0aW9uczsKKwkvKiBOdW1iZXIgb2Ygc2NhbiBjaGFubmVscyBpbiB0aGUgbGlzdCAobWF4aW11bSAzMCkgKi8KKwl1OCBudW1fY2hhbm5lbHM7CisJLyogVGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBwcm9iZSByZXF1ZXN0cyB0byBzZW5kCisJICAgcGVyIGNoYW5uZWwgZm9yIGFuIGFjdGl2ZSBzY2FuICovCisJdTggbnVtX3Byb2JlX3JlcXVlc3RzOworCS8qIFJhdGUgYml0IGZpZWxkIGZvciBzZW5kaW5nIHRoZSBwcm9iZXMgKi8KKwl1MzIgdHhfcmF0ZTsKKwl1OCB0aWRfdHJpZ2dlcjsKKwl1OCBzc2lkX2xlbjsKKwkvKiBpbiBvcmRlciB0byBhbGlnbiAqLworCXU4IHBhZGRpbmcxWzJdOworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCS8qIEJhbmQgdG8gc2NhbiAqLworCXU4IGJhbmQ7CisJdTggdXNlX3NzaWRfbGlzdDsKKwl1OCBzY2FuX3RhZzsKKwl1OCBwYWRkaW5nMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtcyB7CisJLyogRHVyYXRpb24gaW4gVFUgdG8gd2FpdCBmb3IgZnJhbWVzIG9uIGEgY2hhbm5lbCBmb3IgYWN0aXZlIHNjYW4gKi8KKwl1MzIgbWluX2R1cmF0aW9uOworCXUzMiBtYXhfZHVyYXRpb247CisJdTMyIGJzc2lkX2xzYjsKKwl1MTYgYnNzaWRfbXNiOworCXU4IGVhcmx5X3Rlcm1pbmF0aW9uOworCXU4IHR4X3Bvd2VyX2F0dDsKKwl1OCBjaGFubmVsOworCS8qIEZXIGludGVybmFsIHVzZSBvbmx5ISAqLworCXU4IGRmc19jYW5kaWRhdGU7CisJdTggYWN0aXZpdHlfZGV0ZWN0ZWQ7CisJdTggcGFkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB3bDEyNzFfY21kX3NjYW4geworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlzdHJ1Y3QgYmFzaWNfc2Nhbl9wYXJhbXMgcGFyYW1zOworCXN0cnVjdCBiYXNpY19zY2FuX2NoYW5uZWxfcGFyYW1zIGNoYW5uZWxzW1dMMTI3MV9TQ0FOX01BWF9DSEFOTkVMU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI3MV9jbWRfdHJpZ2dlcl9zY2FuX3RvIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTMyIHRpbWVvdXQ7Cit9OworCitzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB7CisJdTggaWQ7CisJdTggcGFkZGluZ1szXTsKK307CisKK2VudW0gd2wxMjcxX2NoYW5uZWxfdHVuZV9iYW5kcyB7CisJV0wxMjcxX0NIQU5ORUxfVFVORV9CQU5EXzJfNCwKKwlXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfNSwKKwlXTDEyNzFfQ0hBTk5FTF9UVU5FX0JBTkRfNF85Cit9OworCisjZGVmaW5lIFdMMTI3MV9QRF9SRUZFUkVOQ0VfUE9JTlRfQkFORF9CX0cgMAorCisjZGVmaW5lIFRFU1RfQ01EX1AyR19DQUwgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBURVNUX0NNRF9DSEFOTkVMX1RVTkUgICAgICAgICAgICAgIDB4MGQKKyNkZWZpbmUgVEVTVF9DTURfVVBEQVRFX1BEX1JFRkVSRU5DRV9QT0lOVCAweDFkCisKK3N0cnVjdCB3bDEyNzFfY21kX2NhbF9jaGFubmVsX3R1bmUgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB0ZXN0OworCisJdTggYmFuZDsKKwl1OCBjaGFubmVsOworCisJdTE2IHJhZGlvX3N0YXR1czsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfdXBkYXRlX3JlZl9wb2ludCB7CisJc3RydWN0IHdsMTI3MV9jbWRfaGVhZGVyIGhlYWRlcjsKKworCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CisKKwlzMzIgcmVmX3Bvd2VyOworCXMzMiByZWZfZGV0ZWN0b3I7CisJdTggIHN1Yl9iYW5kOworCXU4ICBwYWRkaW5nWzNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTUFYX1RMVl9MRU5HVEggICAgICAgICA0MDAKKyNkZWZpbmUJTUFYX05WU19WRVJTSU9OX0xFTkdUSCAxMgorCisjZGVmaW5lIFdMMTI3MV9DQUxfUDJHX0JBTkRfQl9HIEJJVCgwKQorCitzdHJ1Y3Qgd2wxMjcxX2NtZF9jYWxfcDJnIHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJc3RydWN0IHdsMTI3MV9jbWRfdGVzdF9oZWFkZXIgdGVzdDsKKworCXUxNiBsZW47CisJdTggIGJ1ZltNQVhfVExWX0xFTkdUSF07CisJdTggIHR5cGU7CisJdTggIHBhZGRpbmc7CisKKwlzMTYgcmFkaW9fc3RhdHVzOworCXU4ICBudnNfdmVyc2lvbltNQVhfTlZTX1ZFUlNJT05fTEVOR1RIXTsKKworCXU4ICBzdWJfYmFuZF9tYXNrOworCXU4ICBwYWRkaW5nMjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogX19XTDEyNzFfQ01EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZGVidWdmcy5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCmNvcHkgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5jCmNvcHkgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMKaW5kZXggY2RiMzY4Yy4uYzE4MDVlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjEsMTUgKzIxLDE2IEBACiAgKgogICovCiAKLSNpbmNsdWRlICJkZWJ1Z2ZzLmgiCisjaW5jbHVkZSAid2wxMjcxX2RlYnVnZnMuaCIKIAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0jaW5jbHVkZSAiYWN4LmgiCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMjcxX2FjeC5oIgorI2luY2x1ZGUgIndsMTI3MV9wcy5oIgogCiAvKiBtcyAqLwotI2RlZmluZSBXTDEyWFhfREVCVUdGU19TVEFUU19MSUZFVElNRSAxMDAwCisjZGVmaW5lIFdMMTI3MV9ERUJVR0ZTX1NUQVRTX0xJRkVUSU1FIDEwMDAKIAogLyogZGVidWdmcyBtYWNyb3MgaWRlYSBmcm9tIG1hYzgwMjExICovCiAKQEAgLTM3LDcgKzM4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IG5hbWUjIyBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCVwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykJCQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCB3bDEyeHggKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwkJCQlcCisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKIAljaGFyIGJ1ZltidWZsZW5dOwkJCQkJCVwKIAlpbnQgcmVzOwkJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC00Nyw3ICs0OCw3IEBACiAJCQkJCQkJCQlcCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lIyMgX29wcyA9IHsJCQlcCiAJLnJlYWQgPSBuYW1lIyMgX3JlYWQsCQkJCQkJXAotCS5vcGVuID0gd2wxMnh4X29wZW5fZmlsZV9nZW5lcmljLAkJCQlcCisJLm9wZW4gPSB3bDEyNzFfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKIH07CiAKICNkZWZpbmUgREVCVUdGU19BREQobmFtZSwgcGFyZW50KQkJCQkJXApAQCAtNzAsMTEgKzcxLDExIEBACiAJCQkJICAgICAgY2hhciBfX3VzZXIgKnVzZXJidWYsCQlcCiAJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CQkJCVwKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsJCQkJXAogCWNoYXIgYnVmW2J1Zmxlbl07CQkJCQkJXAogCWludCByZXM7CQkJCQkJCVwKIAkJCQkJCQkJCVwKLQl3bDEyeHhfZGVidWdmc191cGRhdGVfc3RhdHMod2wpOwkJCQlcCisJd2wxMjcxX2RlYnVnZnNfdXBkYXRlX3N0YXRzKHdsKTsJCQkJXAogCQkJCQkJCQkJXAogCXJlcyA9IHNjbnByaW50ZihidWYsIGJ1ZmxlbiwgZm10ICJcbiIsCQkJCVwKIAkJCXdsLT5zdGF0cy5md19zdGF0cy0+c3ViLm5hbWUpOwkJCVwKQEAgLTgzLDcgKzg0LDcgQEAKIAkJCQkJCQkJCVwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN1YiMjIF8gIyNuYW1lIyMgX29wcyA9IHsJCVwKIAkucmVhZCA9IHN1YiMjIF8gIyNuYW1lIyMgX3JlYWQsCQkJCQlcCi0JLm9wZW4gPSB3bDEyeHhfb3Blbl9maWxlX2dlbmVyaWMsCQkJCVwKKwkub3BlbiA9IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAogfTsKIAogI2RlZmluZSBERUJVR0ZTX0ZXU1RBVFNfQUREKHN1YiwgbmFtZSkJCQkJXApAQCAtOTIsMjEgKzkzLDMwIEBACiAjZGVmaW5lIERFQlVHRlNfRldTVEFUU19ERUwoc3ViLCBuYW1lKQkJCQlcCiAJREVCVUdGU19ERUwoc3ViIyMgXyAjI25hbWUpCiAKLXN0YXRpYyB2b2lkIHdsMTJ4eF9kZWJ1Z2ZzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKK3N0YXRpYyB2b2lkIHdsMTI3MV9kZWJ1Z2ZzX3VwZGF0ZV9zdGF0cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKKwlpbnQgcmV0OworCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAotCWlmICh3bC0+c3RhdGUgPT0gV0wxMlhYX1NUQVRFX09OICYmCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PTiAmJgogCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgKwotCQkgICAgICAgbXNlY3NfdG9famlmZmllcyhXTDEyWFhfREVCVUdGU19TVEFUU19MSUZFVElNRSkpKSB7Ci0JCXdsMTJ4eF9hY3hfc3RhdGlzdGljcyh3bCwgd2wtPnN0YXRzLmZ3X3N0YXRzKTsKKwkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoV0wxMjcxX0RFQlVHRlNfU1RBVFNfTElGRVRJTUUpKSkgeworCQl3bDEyNzFfYWN4X3N0YXRpc3RpY3Mod2wsIHdsLT5zdGF0cy5md19zdGF0cyk7CiAJCXdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgPSBqaWZmaWVzOwogCX0KIAorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCi1zdGF0aWMgaW50IHdsMTJ4eF9vcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmV0dXJuIDA7CkBAIC0yMTEsNyArMjIxLDcgQEAKIHN0YXRpYyBzc2l6ZV90IHR4X3F1ZXVlX2xlbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IHdsMTJ4eCAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdTMyIHF1ZXVlX2xlbjsKIAljaGFyIGJ1ZlsyMF07CiAJaW50IHJlczsKQEAgLTIyNCwxMCArMjM0LDEwIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR4X3F1ZXVlX2xlbl9vcHMgPSB7CiAJLnJlYWQgPSB0eF9xdWV1ZV9sZW5fcmVhZCwKLQkub3BlbiA9IHdsMTJ4eF9vcGVuX2ZpbGVfZ2VuZXJpYywKKwkub3BlbiA9IHdsMTI3MV9vcGVuX2ZpbGVfZ2VuZXJpYywKIH07CiAKLXN0YXRpYyB2b2lkIHdsMTJ4eF9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKK3N0YXRpYyB2b2lkIHdsMTI3MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlERUJVR0ZTX0ZXU1RBVFNfREVMKHR4LCBpbnRlcm5hbF9kZXNjX292ZXJmbG93KTsKIApAQCAtMzI1LDcgKzMzNSw3IEBACiAJREVCVUdGU19ERUwoZXhjZXNzaXZlX3JldHJpZXMpOwogfQogCi1zdGF0aWMgaW50IHdsMTJ4eF9kZWJ1Z2ZzX2FkZF9maWxlcyhzdHJ1Y3Qgd2wxMnh4ICp3bCkKK3N0YXRpYyBpbnQgd2wxMjcxX2RlYnVnZnNfYWRkX2ZpbGVzKHN0cnVjdCB3bDEyNzEgKndsKQogewogCWludCByZXQgPSAwOwogCkBAIC00MjYsMTkgKzQzNiwxOSBAQAogCiBvdXQ6CiAJaWYgKHJldCA8IDApCi0JCXdsMTJ4eF9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7CisJCXdsMTI3MV9kZWJ1Z2ZzX2RlbGV0ZV9maWxlcyh3bCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHdsMTJ4eF9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCB3bDEyeHggKndsKQordm9pZCB3bDEyNzFfZGVidWdmc19yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAltZW1zZXQod2wtPnN0YXRzLmZ3X3N0YXRzLCAwLCBzaXplb2YoKndsLT5zdGF0cy5md19zdGF0cykpOwogCXdsLT5zdGF0cy5yZXRyeV9jb3VudCA9IDA7CiAJd2wtPnN0YXRzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMDsKIH0KIAotaW50IHdsMTJ4eF9kZWJ1Z2ZzX2luaXQoc3RydWN0IHdsMTJ4eCAqd2wpCitpbnQgd2wxMjcxX2RlYnVnZnNfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0OwogCkBAIC00NjksNyArNDc5LDcgQEAKIAogCXdsLT5zdGF0cy5md19zdGF0c191cGRhdGUgPSBqaWZmaWVzOwogCi0JcmV0ID0gd2wxMnh4X2RlYnVnZnNfYWRkX2ZpbGVzKHdsKTsKKwlyZXQgPSB3bDEyNzFfZGVidWdmc19hZGRfZmlsZXMod2wpOwogCiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2ZpbGU7CkBAIC00OTIsOSArNTAyLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIHdsMTJ4eF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHdsMTJ4eCAqd2wpCit2b2lkIHdsMTI3MV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0Jd2wxMnh4X2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHdsKTsKKwl3bDEyNzFfZGVidWdmc19kZWxldGVfZmlsZXMod2wpOwogCiAJa2ZyZWUod2wtPnN0YXRzLmZ3X3N0YXRzKTsKIAl3bC0+c3RhdHMuZndfc3RhdHMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZGVidWdmcy5oCnNpbWlsYXJpdHkgaW5kZXggNjklCmNvcHkgZnJvbSBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvZGVidWdmcy5oCmNvcHkgdG8gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmgKaW5kZXggNTYyY2RjYi4uMDBhNDViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L2RlYnVnZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuaApAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyeHgKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQogICoKICAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjEsMTMgKzIxLDEzIEBACiAgKgogICovCiAKLSNpZm5kZWYgV0wxMlhYX0RFQlVHRlNfSAotI2RlZmluZSBXTDEyWFhfREVCVUdGU19ICisjaWZuZGVmIFdMMTI3MV9ERUJVR0ZTX0gKKyNkZWZpbmUgV0wxMjcxX0RFQlVHRlNfSAogCi0jaW5jbHVkZSAid2wxMnh4LmgiCisjaW5jbHVkZSAid2wxMjcxLmgiCiAKLWludCB3bDEyeHhfZGVidWdmc19pbml0KHN0cnVjdCB3bDEyeHggKndsKTsKLXZvaWQgd2wxMnh4X2RlYnVnZnNfZXhpdChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci12b2lkIHdsMTJ4eF9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCB3bDEyeHggKndsKTsKK2ludCB3bDEyNzFfZGVidWdmc19pbml0KHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX2RlYnVnZnNfZXhpdChzdHJ1Y3Qgd2wxMjcxICp3bCk7Cit2b2lkIHdsMTI3MV9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKTsKIAotI2VuZGlmIC8qIFdMMTJYWF9ERUJVR0ZTX0ggKi8KKyNlbmRpZiAvKiBXTDEyNzFfREVCVUdGU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhZmQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9ldmVudC5oIgorI2luY2x1ZGUgIndsMTI3MV9wcy5oIgorCitzdGF0aWMgaW50IHdsMTI3MV9ldmVudF9zY2FuX2NvbXBsZXRlKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCSAgICAgIHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQoreworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgInN0YXR1czogMHgleCIsCisJCSAgICAgbWJveC0+c2NoZWR1bGVkX3NjYW5fc3RhdHVzKTsKKworCWlmICh3bC0+c2Nhbm5pbmcpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCBmYWxzZSk7CisJCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZXZlbnRfbWJveF9kdW1wKHN0cnVjdCBldmVudF9tYWlsYm94ICptYm94KQoreworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIk1CT1ggRFVNUDoiKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJcdHZlY3RvcjogMHgleCIsIG1ib3gtPmV2ZW50c192ZWN0b3IpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIlx0bWFzazogMHgleCIsIG1ib3gtPmV2ZW50c19tYXNrKTsKK30KKworc3RhdGljIGludCB3bDEyNzFfZXZlbnRfcHJvY2VzcyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IGV2ZW50X21haWxib3ggKm1ib3gpCit7CisJaW50IHJldDsKKwl1MzIgdmVjdG9yOworCisJd2wxMjcxX2V2ZW50X21ib3hfZHVtcChtYm94KTsKKworCXZlY3RvciA9IG1ib3gtPmV2ZW50c192ZWN0b3IgJiB+KG1ib3gtPmV2ZW50c19tYXNrKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJ2ZWN0b3I6IDB4JXgiLCB2ZWN0b3IpOworCisJaWYgKHZlY3RvciAmIFNDQU5fQ09NUExFVEVfRVZFTlRfSUQpIHsKKwkJcmV0ID0gd2wxMjcxX2V2ZW50X3NjYW5fY29tcGxldGUod2wsIG1ib3gpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHZlY3RvciAmIEJTU19MT1NFX0VWRU5UX0lEKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIkJTU19MT1NFX0VWRU5UIik7CisKKwkJaWYgKHdsLT5wc21fcmVxdWVzdGVkICYmIHdsLT5wc20pIHsKKwkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCB3bDEyNzFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2V2ZW50X21ib3hfbWFzayh3bCwgfih3bC0+ZXZlbnRfbWFzaykpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsLT5tYm94X3B0clswXSA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBSRUdfRVZFTlRfTUFJTEJPWF9QVFIpOworCXdsLT5tYm94X3B0clsxXSA9IHdsLT5tYm94X3B0clswXSArIHNpemVvZihzdHJ1Y3QgZXZlbnRfbWFpbGJveCk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJNQk9YIHB0cnM6IDB4JXggMHgleCIsCisJCSAgICAgd2wtPm1ib3hfcHRyWzBdLCB3bC0+bWJveF9wdHJbMV0pOworfQorCitpbnQgd2wxMjcxX2V2ZW50X2hhbmRsZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggbWJveF9udW0pCit7CisJc3RydWN0IGV2ZW50X21haWxib3ggbWJveDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiRVZFTlQgb24gbWJveCAlZCIsIG1ib3hfbnVtKTsKKworCWlmIChtYm94X251bSA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogZmlyc3Qgd2UgcmVhZCB0aGUgbWJveCBkZXNjcmlwdG9yICovCisJd2wxMjcxX3NwaV9tZW1fcmVhZCh3bCwgd2wtPm1ib3hfcHRyW21ib3hfbnVtXSwgJm1ib3gsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBldmVudF9tYWlsYm94KSk7CisKKwkvKiBwcm9jZXNzIHRoZSBkZXNjcmlwdG9yICovCisJcmV0ID0gd2wxMjcxX2V2ZW50X3Byb2Nlc3Mod2wsICZtYm94KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHRoZW4gd2UgbGV0IHRoZSBmaXJtd2FyZSBrbm93IGl0IGNhbiBnbyBvbi4uLiovCisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfRVZFTlRfQUNLKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZGNlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwOSBUZXhhcyBJbnN0cnVtZW50cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpZm5kZWYgX19XTDEyNzFfRVZFTlRfSF9fCisjZGVmaW5lIF9fV0wxMjcxX0VWRU5UX0hfXworCisvKgorICogTWJveCBldmVudHMKKyAqCisgKiBUaGUgZXZlbnQgbWVjaGFuaXNtIGlzIGJhc2VkIG9uIGEgcGFpciBvZiBldmVudCBidWZmZXJzIChidWZmZXJzIEEgYW5kCisgKiBCKSBhdCBmaXhlZCBsb2NhdGlvbnMgaW4gdGhlIHRhcmdldCdzIG1lbW9yeS4gVGhlIGhvc3QgcHJvY2Vzc2VzIG9uZQorICogYnVmZmVyIHdoaWxlIHRoZSBvdGhlciBidWZmZXIgY29udGludWVzIHRvIGNvbGxlY3QgZXZlbnRzLiBJZiB0aGUgaG9zdAorICogaXMgbm90IHByb2Nlc3NpbmcgZXZlbnRzLCBhbiBpbnRlcnJ1cHQgaXMgaXNzdWVkIHRvIHNpZ25hbCB0aGF0IGEgYnVmZmVyCisgKiBpcyByZWFkeS4gT25jZSB0aGUgaG9zdCBpcyBkb25lIHdpdGggcHJvY2Vzc2luZyBldmVudHMgZnJvbSBvbmUgYnVmZmVyLAorICogaXQgc2lnbmFscyB0aGUgdGFyZ2V0ICh3aXRoIGFuIEFDSyBpbnRlcnJ1cHQpIHRoYXQgdGhlIGV2ZW50IGJ1ZmZlciBpcworICogZnJlZS4KKyAqLworCitlbnVtIHsKKwlNRUFTVVJFTUVOVF9TVEFSVF9FVkVOVF9JRAkJID0gQklUKDgpLAorCU1FQVNVUkVNRU5UX0NPTVBMRVRFX0VWRU5UX0lECQkgPSBCSVQoOSksCisJU0NBTl9DT01QTEVURV9FVkVOVF9JRAkJCSA9IEJJVCgxMCksCisJU0NIRURVTEVEX1NDQU5fQ09NUExFVEVfRVZFTlRfSUQJID0gQklUKDExKSwKKwlBUF9ESVNDT1ZFUllfQ09NUExFVEVfRVZFTlRfSUQJCSA9IEJJVCgxMiksCisJUFNfUkVQT1JUX0VWRU5UX0lECQkJID0gQklUKDEzKSwKKwlQU1BPTExfREVMSVZFUllfRkFJTFVSRV9FVkVOVF9JRAkgPSBCSVQoMTQpLAorCURJU0NPTk5FQ1RfRVZFTlRfQ09NUExFVEVfSUQJCSA9IEJJVCgxNSksCisJSk9JTl9FVkVOVF9DT01QTEVURV9JRAkJCSA9IEJJVCgxNiksCisJQ0hBTk5FTF9TV0lUQ0hfQ09NUExFVEVfRVZFTlRfSUQJID0gQklUKDE3KSwKKwlCU1NfTE9TRV9FVkVOVF9JRAkJCSA9IEJJVCgxOCksCisJUkVHQUlORURfQlNTX0VWRU5UX0lECQkJID0gQklUKDE5KSwKKwlST0FNSU5HX1RSSUdHRVJfTUFYX1RYX1JFVFJZX0VWRU5UX0lECSA9IEJJVCgyMCksCisJU09GVF9HRU1JTklfU0VOU0VfRVZFTlRfSUQJCSA9IEJJVCgyMiksCisJU09GVF9HRU1JTklfUFJFRElDVElPTl9FVkVOVF9JRAkJID0gQklUKDIzKSwKKwlTT0ZUX0dFTUlOSV9BVkFMQU5DSEVfRVZFTlRfSUQJCSA9IEJJVCgyNCksCisJUExUX1JYX0NBTElCUkFUSU9OX0NPTVBMRVRFX0VWRU5UX0lECSA9IEJJVCgyNSksCisJREJHX0VWRU5UX0lECQkJCSA9IEJJVCgyNiksCisJSEVBTFRIX0NIRUNLX1JFUExZX0VWRU5UX0lECQkgPSBCSVQoMjcpLAorCVBFUklPRElDX1NDQU5fQ09NUExFVEVfRVZFTlRfSUQJCSA9IEJJVCgyOCksCisJUEVSSU9ESUNfU0NBTl9SRVBPUlRfRVZFTlRfSUQJCSA9IEJJVCgyOSksCisJQkFfU0VTU0lPTl9URUFSX0RPV05fRVZFTlRfSUQJCSA9IEJJVCgzMCksCisJRVZFTlRfTUJPWF9BTExfRVZFTlRfSUQJCQkgPSAweDdmZmZmZmZmLAorfTsKKworc3RydWN0IGV2ZW50X2RlYnVnX3JlcG9ydCB7CisJdTggZGVidWdfZXZlbnRfaWQ7CisJdTggbnVtX3BhcmFtczsKKwl1MTYgcGFkOworCXUzMiByZXBvcnRfMTsKKwl1MzIgcmVwb3J0XzI7CisJdTMyIHJlcG9ydF8zOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTlVNX09GX1JTU0lfU05SX1RSSUdHRVJTIDgKKworc3RydWN0IGV2ZW50X21haWxib3ggeworCXUzMiBldmVudHNfdmVjdG9yOworCXUzMiBldmVudHNfbWFzazsKKwl1MzIgcmVzZXJ2ZWRfMTsKKwl1MzIgcmVzZXJ2ZWRfMjsKKworCXU4IGRiZ19ldmVudF9pZDsKKwl1OCBudW1fcmVsZXZhbnRfcGFyYW1zOworCXUxNiByZXNlcnZlZF8zOworCXUzMiBldmVudF9yZXBvcnRfcDE7CisJdTMyIGV2ZW50X3JlcG9ydF9wMjsKKwl1MzIgZXZlbnRfcmVwb3J0X3AzOworCisJdTggbnVtYmVyX29mX3NjYW5fcmVzdWx0czsKKwl1OCBzY2FuX3RhZzsKKwl1OCByZXNlcnZlZF80WzJdOworCXUzMiBjb21wbF9zY2hlZHVsZWRfc2Nhbl9zdGF0dXM7CisKKwl1MTYgc2NoZWR1bGVkX3NjYW5fYXR0ZW5kZWRfY2hhbm5lbHM7CisJdTggc29mdF9nZW1pbmlfc2Vuc2VfaW5mbzsKKwl1OCBzb2Z0X2dlbWluaV9wcm90ZWN0aXZlX2luZm87CisJczggcnNzaV9zbnJfdHJpZ2dlcl9tZXRyaWNbTlVNX09GX1JTU0lfU05SX1RSSUdHRVJTXTsKKwl1OCBjaGFubmVsX3N3aXRjaF9zdGF0dXM7CisJdTggc2NoZWR1bGVkX3NjYW5fc3RhdHVzOworCXU4IHBzX3N0YXR1czsKKworCXU4IHJlc2VydmVkXzVbMjldOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK2ludCB3bDEyNzFfZXZlbnRfdW5tYXNrKHN0cnVjdCB3bDEyNzEgKndsKTsKK3ZvaWQgd2wxMjcxX2V2ZW50X21ib3hfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MGRmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYwpAQCAtMCwwICsxLDM5NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJ3bDEyNzFfaW5pdC5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyNzFfY21kLmgiCisjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X2h3ZW5jX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9mZWF0dXJlX2NmZyh3bCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNvdWxkbid0IHNldCBmZWF0dXJlIGNvbmZpZyIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHdsMTI3MV9jbWRfc2V0X2RlZmF1bHRfd2VwX2tleSh3bCwgd2wtPmRlZmF1bHRfa2V5KTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiY291bGRuJ3Qgc2V0IGRlZmF1bHQga2V5Iik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJLyogc2VuZCBlbXB0eSB0ZW1wbGF0ZXMgZm9yIGZ3IG1lbW9yeSByZXNlcnZhdGlvbiAqLworCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQ0ZHX1BST0JFX1JFUV8yXzQsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcHJvYmVfcmVxX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX05VTExfREFUQSwgTlVMTCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUFNfUE9MTCwgTlVMTCwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX1FPU19OVUxMX0RBVEEsIE5VTEwsCisJCQkJICAgICAgc2l6ZW9mCisJCQkJICAgICAgKHN0cnVjdCB3bDEyeHhfcW9zX251bGxfZGF0YV90ZW1wbGF0ZSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9QUk9CRV9SRVNQT05TRSwgTlVMTCwKKwkJCQkgICAgICBzaXplb2YKKwkJCQkgICAgICAoc3RydWN0IHdsMTJ4eF9wcm9iZV9yZXNwX3RlbXBsYXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0JFQUNPTiwgTlVMTCwKKwkJCQkgICAgICBzaXplb2YKKwkJCQkgICAgICAoc3RydWN0IHdsMTJ4eF9iZWFjb25fdGVtcGxhdGUpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X3J4X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGNvbmZpZywgdTMyIGZpbHRlcikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9yeF9tc2R1X2xpZmVfdGltZSh3bCwgUlhfTVNEVV9MSUZFVElNRV9ERUYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9yeF9jb25maWcod2wsIGNvbmZpZywgZmlsdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfcGRfdGhyZXNob2xkKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfc2xvdCh3bCwgREVGQVVMVF9TTE9UX1RJTUUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9ncm91cF9hZGRyZXNzX3RibCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3NlcnZpY2VfcGVyaW9kX3RpbWVvdXQod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCBSVFNfVEhSRVNIT0xEX0RFRik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9iZWFjb25fZmlsdGVyKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl90YWJsZSh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9wdGEoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfc2dfZW5hYmxlKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfc2dfY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IHJldDsKKworCXJldCA9IHdsMTI3MV9hY3hfY2NhX3RocmVzaG9sZCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bDEyNzFfaW5pdF9iZWFjb25fYnJvYWRjYXN0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2Jjbl9kdGltX29wdGlvbnMod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2luaXRfZ2VuZXJhbF9wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2dlbmVyYWxfcGFybXMgKmdlbl9wYXJtczsKKwlpbnQgcmV0OworCisJZ2VuX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKmdlbl9wYXJtcyksIEdGUF9LRVJORUwpOworCWlmICghZ2VuX3Bhcm1zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdlbl9wYXJtcy0+aWQgPSBURVNUX0NNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNOworCisJZ2VuX3Bhcm1zLT5yZWZfY2xrID0gUkVGX0NMS18zOF80X0U7CisJLyogRklYTUU6IG1hZ2ljIG51bWJlcnMgKi8KKwlnZW5fcGFybXMtPnNldHRsaW5nX3RpbWUgPSA1OworCWdlbl9wYXJtcy0+Y2xrX3ZhbGlkX29uX3dha2V1cCA9IDA7CisJZ2VuX3Bhcm1zLT5kYzJkY21vZGUgPSAwOworCWdlbl9wYXJtcy0+c2luZ2xlX2R1YWxfYmFuZCA9IDA7CisJZ2VuX3Bhcm1zLT50eF9iaXBfZmVtX2F1dG9kZXRlY3QgPSAxOworCWdlbl9wYXJtcy0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXIgPSAxOworCWdlbl9wYXJtcy0+c2V0dGluZ3MgPSAxOworCisJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCBnZW5fcGFybXMsIHNpemVvZigqZ2VuX3Bhcm1zKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIkNNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWtmcmVlKGdlbl9wYXJtcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2luaXRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJLyoKKwkgKiBGSVhNRTogQWxsIHRoZXNlIG1hZ2ljIG51bWJlcnMgc2hvdWxkIGJlIG1vdmVkIHRvIHNvbWUgcGxhY2Ugd2hlcmUKKwkgKiB0aGV5IGNhbiBiZSBjb25maWd1cmVkIChzZXBhcmF0ZSBmaWxlPykKKwkgKi8KKworCXN0cnVjdCB3bDEyNzFfcmFkaW9fcGFybXMgKnJhZGlvX3Bhcm1zOworCWludCByZXQ7CisJdTggY29tcGVuc2F0aW9uW10gPSB7IDB4ZWMsIDB4ZjYsIDB4MDAsIDB4MGMsIDB4MTgsIDB4ZjgsIDB4ZmMsIDB4MDAsCisJCQkgICAgICAweDA4LCAweDEwLCAweGYwLCAweGY4LCAweDAwLCAweDBhLCAweDE0IH07CisKKwl1OCB0eF9yYXRlX2xpbWl0c19ub3JtYWxbXSAgID0geyAweDFlLCAweDFmLCAweDIyLCAweDI0LCAweDI4LCAweDI5IH07CisJdTggdHhfcmF0ZV9saW1pdHNfZGVncmFkZWRbXSA9IHsgMHgxYiwgMHgxYywgMHgxZSwgMHgyMCwgMHgyNCwgMHgyNSB9OworCisJdTggdHhfY2hhbm5lbF9saW1pdHNfMTFiW10gPSB7IDB4MjIsIDB4NTAsIDB4NTAsIDB4NTAsCisJCQkJICAgICAgIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsCisJCQkJICAgICAgIDB4NTAsIDB4NTAsIDB4MjIsIDB4NTAsCisJCQkJICAgICAgIDB4MjIsIDB4NTAgfTsKKworCXU4IHR4X2NoYW5uZWxfbGltaXRzX29mZG1bXSA9IHsgMHgyMCwgMHg1MCwgMHg1MCwgMHg1MCwKKwkJCQkJMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwKKwkJCQkJMHg1MCwgMHg1MCwgMHgyMCwgMHg1MCwKKwkJCQkJMHgyMCwgMHg1MCB9OworCisJdTggdHhfcGR2X3JhdGVfb2Zmc2V0c1tdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKKworCXU4IHR4X2liaWFzW10gPSB7IDB4MWEsIDB4MWEsIDB4MWEsIDB4MWEsIDB4MWEsIDB4MjcgfTsKKworCXJhZGlvX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKnJhZGlvX3Bhcm1zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYWRpb19wYXJtcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYWRpb19wYXJtcy0+aWQgPSBURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTTsKKworCS8qIFN0YXRpYyByYWRpbyBwYXJhbWV0ZXJzICovCisJcmFkaW9fcGFybXMtPnJ4X3RyYWNlX2xvc3MgPSAxMDsKKwlyYWRpb19wYXJtcy0+dHhfdHJhY2VfbG9zcyA9IDEwOworCW1lbWNweShyYWRpb19wYXJtcy0+cnhfcnNzaV9hbmRfcHJvY19jb21wZW5zLCBjb21wZW5zYXRpb24sCisJICAgICAgIHNpemVvZihjb21wZW5zYXRpb24pKTsKKworCS8qIFdlIGRvbid0IHNldCB0aGUgNUdIeiAtLSBOL0EgKi8KKworCS8qIER5bmFtaWMgcmFkaW8gcGFyYW1ldGVycyAqLworCXJhZGlvX3Bhcm1zLT50eF9yZWZfcGRfdm9sdGFnZSA9IGNwdV90b19sZTE2KDB4MjRlKTsKKwlyYWRpb19wYXJtcy0+dHhfcmVmX3Bvd2VyID0gMHg3ODsKKwlyYWRpb19wYXJtcy0+dHhfb2Zmc2V0X2RiID0gMHgwOworCisJbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9yYXRlX2xpbWl0c19ub3JtYWwsIHR4X3JhdGVfbGltaXRzX25vcm1hbCwKKwkgICAgICAgc2l6ZW9mKHR4X3JhdGVfbGltaXRzX25vcm1hbCkpOworCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmF0ZV9saW1pdHNfZGVncmFkZWQsIHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkLAorCSAgICAgICBzaXplb2YodHhfcmF0ZV9saW1pdHNfZGVncmFkZWQpKTsKKworCW1lbWNweShyYWRpb19wYXJtcy0+dHhfY2hhbm5lbF9saW1pdHNfMTFiLCB0eF9jaGFubmVsX2xpbWl0c18xMWIsCisJICAgICAgIHNpemVvZih0eF9jaGFubmVsX2xpbWl0c18xMWIpKTsKKwltZW1jcHkocmFkaW9fcGFybXMtPnR4X2NoYW5uZWxfbGltaXRzX29mZG0sIHR4X2NoYW5uZWxfbGltaXRzX29mZG0sCisJICAgICAgIHNpemVvZih0eF9jaGFubmVsX2xpbWl0c19vZmRtKSk7CisJbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9wZHZfcmF0ZV9vZmZzZXRzLCB0eF9wZHZfcmF0ZV9vZmZzZXRzLAorCSAgICAgICBzaXplb2YodHhfcGR2X3JhdGVfb2Zmc2V0cykpOworCW1lbWNweShyYWRpb19wYXJtcy0+dHhfaWJpYXMsIHR4X2liaWFzLAorCSAgICAgICBzaXplb2YodHhfaWJpYXMpKTsKKworCXJhZGlvX3Bhcm1zLT5yeF9mZW1faW5zZXJ0aW9uX2xvc3MgPSAweDE0OworCisJcmV0ID0gd2wxMjcxX2NtZF90ZXN0KHdsLCByYWRpb19wYXJtcywgc2l6ZW9mKCpyYWRpb19wYXJtcyksIDApOworCWlmIChyZXQgPCAwKQorCQl3bDEyNzFfd2FybmluZygiQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNIGZhaWxlZCIpOworCisJa2ZyZWUocmFkaW9fcGFybXMpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDEyNzFfaHdfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2luaXRfZ2VuZXJhbF9wYXJtcyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfaW5pdF9yYWRpb19wYXJtcyh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBUZW1wbGF0ZSBzZXR0aW5ncyAqLworCXJldCA9IHdsMTI3MV9pbml0X3RlbXBsYXRlc19jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogRGVmYXVsdCBtZW1vcnkgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHdsMTI3MV9hY3hfaW5pdF9tZW1fY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJYIGNvbmZpZyAqLworCXJldCA9IHdsMTI3MV9pbml0X3J4X2NvbmZpZyh3bCwKKwkJCQkgICAgICAgUlhfQ0ZHX1BST01JU0NVT1VTIHwgUlhfQ0ZHX1RTRiwKKwkJCQkgICAgICAgUlhfRklMVEVSX09QVElPTl9ERUYpOworCS8qIFJYX0NPTkZJR19PUFRJT05fQU5ZX0RTVF9BTllfQlNTLAorCSAgIFJYX0ZJTFRFUl9PUFRJT05fRklMVEVSX0FMTCk7ICovCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogUEhZIGxheWVyIGNvbmZpZyAqLworCXJldCA9IHdsMTI3MV9pbml0X3BoeV9jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEJlYWNvbiBmaWx0ZXJpbmcgKi8KKwlyZXQgPSB3bDEyNzFfaW5pdF9iZWFjb25fZmlsdGVyKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBDb25maWd1cmUgVFggcGF0Y2ggY29tcGxldGUgaW50ZXJydXB0IGJlaGF2aW9yICovCisJcmV0ID0gd2wxMjcxX2FjeF90eF9jb25maWdfb3B0aW9ucyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogUlggY29tcGxldGUgaW50ZXJydXB0IHBhY2luZyAqLworCXJldCA9IHdsMTI3MV9hY3hfaW5pdF9yeF9pbnRlcnJ1cHQod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEJsdWV0b290aCBXTEFOIGNvZXhpc3RlbmNlICovCisJcmV0ID0gd2wxMjcxX2luaXRfcHRhKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBFbmVyZ3kgZGV0ZWN0aW9uICovCisJcmV0ID0gd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbih3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogQmVhY29ucyBhbmQgYm9yYWRjYXN0IHNldHRpbmdzICovCisJcmV0ID0gd2wxMjcxX2luaXRfYmVhY29uX2Jyb2FkY2FzdCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRGVmYXVsdCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLworCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIERlZmF1bHQgVElEIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3RpZF9jZmcod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIERlZmF1bHQgQUMgY29uZmlndXJhdGlvbiAqLworCXJldCA9IHdsMTI3MV9hY3hfYWNfY2ZnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBDb25maWd1cmUgVFggcmF0ZSBjbGFzc2VzICovCisJcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBFbmFibGUgZGF0YSBwYXRoICovCisJcmV0ID0gd2wxMjcxX2NtZF9kYXRhX3BhdGgod2wsIHdsLT5jaGFubmVsLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBDb25maWd1cmUgZm9yIEVMUCBwb3dlciBzYXZpbmcgKi8KKwlyZXQgPSB3bDEyNzFfYWN4X3NsZWVwX2F1dGgod2wsIFdMMTI3MV9QU01fRUxQKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBDb25maWd1cmUgSFcgZW5jcnlwdGlvbiAqLworCXJldCA9IHdsMTI3MV9pbml0X2h3ZW5jX2NvbmZpZyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZV9tZW1tYXA6CisJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOGZmMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuaApAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjcxX0lOSVRfSF9fCisjZGVmaW5lIF9fV0wxMjcxX0lOSVRfSF9fCisKKyNpbmNsdWRlICJ3bDEyNzEuaCIKKworaW50IHdsMTI3MV9od19pbml0X3Bvd2VyX2F1dGgoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9od19pbml0KHN0cnVjdCB3bDEyNzEgKndsKTsKKworLyogVGhlc2UgYXJlIG5vdCByZWFsbHkgYSBURVNUX0NNRCwgYnV0IHRoZSByZWYgZHJpdmVyIHVzZXMgdGhlbSBhcyBzdWNoICovCisjZGVmaW5lIFRFU1RfQ01EX0lOSV9GSUxFX1JBRElPX1BBUkFNICAgMHgxOQorI2RlZmluZSBURVNUX0NNRF9JTklfRklMRV9HRU5FUkFMX1BBUkFNIDB4MUUKKworc3RydWN0IHdsMTI3MV9nZW5lcmFsX3Bhcm1zIHsKKwl1OCBpZDsKKwl1OCBwYWRkaW5nWzNdOworCisJdTggcmVmX2NsazsKKwl1OCBzZXR0bGluZ190aW1lOworCXU4IGNsa192YWxpZF9vbl93YWtldXA7CisJdTggZGMyZGNtb2RlOworCXU4IHNpbmdsZV9kdWFsX2JhbmQ7CisKKwl1OCB0eF9iaXBfZmVtX2F1dG9kZXRlY3Q7CisJdTggdHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXI7CisJdTggc2V0dGluZ3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworZW51bSByZWZfY2xrX2VudW0geworCVJFRl9DTEtfMTlfMl9FLAorCVJFRl9DTEtfMjZfRSwKKwlSRUZfQ0xLXzM4XzRfRSwKKwlSRUZfQ0xLXzUyX0UKK307CisKKyNkZWZpbmUgUlNTSV9BTkRfUFJPQ0VTU19DT01QRU5TQVRJT05fU0laRSAxNQorI2RlZmluZSBOVU1CRVJfT0ZfU1VCX0JBTkRTXzUgIDcKKyNkZWZpbmUgTlVNQkVSX09GX1JBVEVfR1JPVVBTICA2CisjZGVmaW5lIE5VTUJFUl9PRl9DSEFOTkVMU18yXzQgMTQKKyNkZWZpbmUgTlVNQkVSX09GX0NIQU5ORUxTXzUgICAzNQorCitzdHJ1Y3Qgd2wxMjcxX3JhZGlvX3Bhcm1zIHsKKwl1OCBpZDsKKwl1OCBwYWRkaW5nWzNdOworCisJLyogU3RhdGljIHJhZGlvIHBhcmFtZXRlcnMgKi8KKwkvKiAyLjRHSHogKi8KKwl1OCByeF90cmFjZV9sb3NzOworCXU4IHR4X3RyYWNlX2xvc3M7CisJczggcnhfcnNzaV9hbmRfcHJvY19jb21wZW5zW1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkVdOworCisJLyogNUdIeiAqLworCXU4IHJ4X3RyYWNlX2xvc3NfNVtOVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOworCXU4IHR4X3RyYWNlX2xvc3NfNVtOVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOworCXM4IHJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVuc181W1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkVdOworCisJLyogRHluYW1pYyByYWRpbyBwYXJhbWV0ZXJzICovCisJLyogMi40R0h6ICovCisJczE2IHR4X3JlZl9wZF92b2x0YWdlOworCXM4ICB0eF9yZWZfcG93ZXI7CisJczggIHR4X29mZnNldF9kYjsKKworCXM4ICB0eF9yYXRlX2xpbWl0c19ub3JtYWxbTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKwlzOCAgdHhfcmF0ZV9saW1pdHNfZGVncmFkZWRbTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKworCXM4ICB0eF9jaGFubmVsX2xpbWl0c18xMWJbTlVNQkVSX09GX0NIQU5ORUxTXzJfNF07CisJczggIHR4X2NoYW5uZWxfbGltaXRzX29mZG1bTlVNQkVSX09GX0NIQU5ORUxTXzJfNF07CisJczggIHR4X3Bkdl9yYXRlX29mZnNldHNbTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKworCXU4ICB0eF9pYmlhc1tOVU1CRVJfT0ZfUkFURV9HUk9VUFNdOworCXU4ICByeF9mZW1faW5zZXJ0aW9uX2xvc3M7CisKKwl1OCBwYWRkaW5nMjsKKworCS8qIDVHSHogKi8KKwlzMTYgdHhfcmVmX3BkX3ZvbHRhZ2VfNVtOVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOworCXM4ICB0eF9yZWZfcG93ZXJfNVtOVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOworCXM4ICB0eF9vZmZzZXRfZGJfNVtOVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOworCisJczggIHR4X3JhdGVfbGltaXRzX25vcm1hbF81W05VTUJFUl9PRl9SQVRFX0dST1VQU107CisJczggIHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkXzVbTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKworCXM4ICB0eF9jaGFubmVsX2xpbWl0c19vZmRtXzVbTlVNQkVSX09GX0NIQU5ORUxTXzVdOworCXM4ICB0eF9wZHZfcmF0ZV9vZmZzZXRzXzVbTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKworCS8qIEZJWE1FOiB0aGlzIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSB0eXBlcyBmb3IgMi40R0h6ICovCisJczggIHR4X2liaWFzXzVbTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKKwlzOCAgcnhfZmVtX2luc2VydGlvbl9sb3NzXzVbTlVNQkVSX09GX1NVQl9CQU5EU181XTsKKworCXU4IHBhZGRpbmczWzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTE2OWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMKQEAgLTAsMCArMSwxMzk0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS93bDEyeHguaD4KKworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgorI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2V2ZW50LmgiCisjaW5jbHVkZSAid2wxMjcxX3R4LmgiCisjaW5jbHVkZSAid2wxMjcxX3J4LmgiCisjaW5jbHVkZSAid2wxMjcxX3BzLmgiCisjaW5jbHVkZSAid2wxMjcxX2luaXQuaCIKKyNpbmNsdWRlICJ3bDEyNzFfZGVidWdmcy5oIgorI2luY2x1ZGUgIndsMTI3MV9jbWQuaCIKKyNpbmNsdWRlICJ3bDEyNzFfYm9vdC5oIgorCitzdGF0aWMgaW50IHdsMTI3MV9wbHRfaW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gd2wxMjcxX2FjeF9pbml0X21lbV9jb25maWcod2wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX2NtZF9kYXRhX3BhdGgod2wsIHdsLT5jaGFubmVsLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWRpc2FibGVfaXJxKHdsLT5pcnEpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfcG93ZXJfb2ZmKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXdsLT5zZXRfcG93ZXIoZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfcG93ZXJfb24oc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wtPnNldF9wb3dlcih0cnVlKTsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX2Z3X3N0YXR1cyhzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cykKK3sKKwl1MzIgdG90YWwgPSAwOworCWludCBpOworCisJLyoKKwkgKiBGSVhNRTogUmVhZGluZyB0aGUgRlcgc3RhdHVzIGRpcmVjdGx5IGZyb20gdGhlIHJlZ2lzdGVycyBzZWVtcyB0bworCSAqIGJlIHRoZSByaWdodCB0aGluZyB0byBkbywgYnV0IGl0IGRvZXNuJ3Qgd29yay4gIEFuZCBpbiB0aGUKKwkgKiByZWZlcmVuY2UgZHJpdmVyLCB0aGVyZSBpcyBhIHdvcmthcm91bmQgY2FsbGVkCisJICogVVNFX1NESU9fMjRNX1dPUktBUk9VTkQsIHdoaWNoIHJlYWRzIHRoZSBzdGF0dXMgZnJvbSBtZW1vcnkKKwkgKiBpbnN0ZWFkLCBzbyB3ZSBkbyB0aGUgc2FtZSBoZXJlLgorCSAqLworCisJd2wxMjcxX3NwaV9tZW1fcmVhZCh3bCwgU1RBVFVTX01FTV9BRERSRVNTLCBzdGF0dXMsIHNpemVvZigqc3RhdHVzKSk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiaW50cjogMHgleCAoZndfcnhfY291bnRlciA9ICVkLCAiCisJCSAgICAgImRydl9yeF9jb3VudGVyID0gJWQsIHR4X3Jlc3VsdHNfY291bnRlciA9ICVkKSIsCisJCSAgICAgc3RhdHVzLT5pbnRyLAorCQkgICAgIHN0YXR1cy0+ZndfcnhfY291bnRlciwKKwkJICAgICBzdGF0dXMtPmRydl9yeF9jb3VudGVyLAorCQkgICAgIHN0YXR1cy0+dHhfcmVzdWx0c19jb3VudGVyKTsKKworCS8qIHVwZGF0ZSBudW1iZXIgb2YgYXZhaWxhYmxlIFRYIGJsb2NrcyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJdTMyIGNudCA9IHN0YXR1cy0+dHhfcmVsZWFzZWRfYmxrc1tpXSAtIHdsLT50eF9ibG9ja3NfZnJlZWRbaV07CisJCXdsLT50eF9ibG9ja3NfZnJlZWRbaV0gPSBzdGF0dXMtPnR4X3JlbGVhc2VkX2Jsa3NbaV07CisJCXdsLT50eF9ibG9ja3NfYXZhaWxhYmxlICs9IGNudDsKKwkJdG90YWwgKz0gY250OworCX0KKworCS8qIGlmIG1vcmUgYmxvY2tzIGFyZSBhdmFpbGFibGUgbm93LCBzY2hlZHVsZSBzb21lIHR4IHdvcmsgKi8KKwlpZiAodG90YWwgJiYgIXNrYl9xdWV1ZV9lbXB0eSgmd2wtPnR4X3F1ZXVlKSkKKwkJc2NoZWR1bGVfd29yaygmd2wtPnR4X3dvcmspOworCisJLyogdXBkYXRlIHRoZSBob3N0LWNoaXBzZXQgdGltZSBvZmZzZXQgKi8KKwl3bC0+dGltZV9vZmZzZXQgPSBqaWZmaWVzX3RvX3VzZWNzKGppZmZpZXMpIC0gc3RhdHVzLT5md19sb2NhbHRpbWU7Cit9CisKKyNkZWZpbmUgV0wxMjcxX0lSUV9NQVhfTE9PUFMgMTAKK3N0YXRpYyB2b2lkIHdsMTI3MV9pcnFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJdTMyIGludHIsIGN0ciA9IFdMMTI3MV9JUlFfTUFYX0xPT1BTOworCWludCByZXQ7CisJc3RydWN0IHdsMTI3MSAqd2wgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTI3MSwgaXJxX3dvcmspOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJJUlEgd29yayIpOworCisJaWYgKHdsLT5zdGF0ZSA9PSBXTDEyNzFfU1RBVEVfT0ZGKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCB0cnVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIFdMMTI3MV9BQ1hfSU5UUl9BTEwpOworCisJaW50ciA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9DTEVBUik7CisJaWYgKCFpbnRyKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJaZXJvIGludGVycnVwdCByZWNlaXZlZC4iKTsKKwkJZ290byBvdXRfc2xlZXA7CisJfQorCisJaW50ciAmPSBXTDEyNzFfSU5UUl9NQVNLOworCisJZG8geworCQl3bDEyNzFfZndfc3RhdHVzKHdsLCB3bC0+Zndfc3RhdHVzKTsKKworCisJCWlmIChpbnRyICYgKFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BIHwKKwkJCSAgICBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQikpIHsKKwkJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsCisJCQkJICAgICAiV0wxMjcxX0FDWF9JTlRSX0VWRU5UICgweCV4KSIsIGludHIpOworCQkJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSkKKwkJCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAwKTsKKwkJCWVsc2UKKwkJCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAxKTsKKwkJfQorCisJCWlmIChpbnRyICYgV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpCisJCQl3bDEyNzFfZGVidWcoREVCVUdfSVJRLAorCQkJCSAgICAgIldMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFIik7CisKKwkJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfSFdfQVZBSUxBQkxFKQorCQkJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI3MV9BQ1hfSU5UUl9IV19BVkFJTEFCTEUiKTsKKworCQlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9EQVRBKSB7CisJCQl1OCB0eF9yZXNfY250ID0gd2wtPmZ3X3N0YXR1cy0+dHhfcmVzdWx0c19jb3VudGVyIC0KKwkJCQl3bC0+dHhfcmVzdWx0c19jb3VudDsKKworCQkJd2wxMjcxX2RlYnVnKERFQlVHX0lSUSwgIldMMTI3MV9BQ1hfSU5UUl9EQVRBIik7CisKKwkJCS8qIGNoZWNrIGZvciB0eCByZXN1bHRzICovCisJCQlpZiAodHhfcmVzX2NudCkKKwkJCQl3bDEyNzFfdHhfY29tcGxldGUod2wsIHR4X3Jlc19jbnQpOworCisJCQl3bDEyNzFfcngod2wsIHdsLT5md19zdGF0dXMpOworCQl9CisKKwkJaW50ciA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9DTEVBUik7CisJCWludHIgJj0gV0wxMjcxX0lOVFJfTUFTSzsKKwl9IHdoaWxlIChpbnRyICYmIC0tY3RyKTsKKworb3V0X3NsZWVwOgorCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJCSAgIFdMMTI3MV9BQ1hfSU5UUl9BTEwgJiB+KFdMMTI3MV9JTlRSX01BU0spKTsKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHdsMTI3MV9pcnEoaW50IGlycSwgdm9pZCAqY29va2llKQoreworCXN0cnVjdCB3bDEyNzEgKndsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfSVJRLCAiSVJRIik7CisKKwl3bCA9IGNvb2tpZTsKKworCS8qIGNvbXBsZXRlIHRoZSBFTFAgY29tcGxldGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCWlmICh3bC0+ZWxwX2NvbXBsKSB7CisJCWNvbXBsZXRlKHdsLT5lbHBfY29tcGwpOworCQl3bC0+ZWxwX2NvbXBsID0gTlVMTDsKKwl9CisKKwlzY2hlZHVsZV93b3JrKCZ3bC0+aXJxX3dvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2ZldGNoX2Zpcm13YXJlKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBXTDEyNzFfRldfTkFNRSwgJndsLT5zcGktPmRldik7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBnZXQgZmlybXdhcmU6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZnctPnNpemUgJSA0KSB7CisJCXdsMTI3MV9lcnJvcigiZmlybXdhcmUgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzIgYml0czogJXp1IiwKKwkJCSAgICAgZnctPnNpemUpOworCQlyZXQgPSAtRUlMU0VROworCQlnb3RvIG91dDsKKwl9CisKKwl3bC0+ZndfbGVuID0gZnctPnNpemU7CisJd2wtPmZ3ID0ga21hbGxvYyh3bC0+ZndfbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICghd2wtPmZ3KSB7CisJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGZpcm13YXJlIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweSh3bC0+ZncsIGZ3LT5kYXRhLCB3bC0+ZndfbGVuKTsKKworCXJldCA9IDA7CisKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2ZldGNoX252cyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgV0wxMjcxX05WU19OQU1FLCAmd2wtPnNwaS0+ZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGdldCBudnMgZmlsZTogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChmdy0+c2l6ZSAlIDQpIHsKKwkJd2wxMjcxX2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzIgYml0czogJXp1IiwKKwkJCSAgICAgZnctPnNpemUpOworCQlyZXQgPSAtRUlMU0VROworCQlnb3RvIG91dDsKKwl9CisKKwl3bC0+bnZzX2xlbiA9IGZ3LT5zaXplOworCXdsLT5udnMgPSBrbWFsbG9jKHdsLT5udnNfbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICghd2wtPm52cykgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkod2wtPm52cywgZnctPmRhdGEsIHdsLT5udnNfbGVuKTsKKworCXJldCA9IDA7CisKK291dDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9md193YWtldXAoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJdTMyIGVscF9yZWc7CisKKwllbHBfcmVnID0gRUxQQ1RSTF9XQUtFX1VQOworCXdsMTI3MV93cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIGVscF9yZWcpOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9zZXR1cChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwl3bC0+Zndfc3RhdHVzID0ga21hbGxvYyhzaXplb2YoKndsLT5md19zdGF0dXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdsLT5md19zdGF0dXMpCisJCXJldHVybiAtRU5PTUVNOworCisJd2wtPnR4X3Jlc19pZiA9IGttYWxsb2Moc2l6ZW9mKCp3bC0+dHhfcmVzX2lmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3bC0+dHhfcmVzX2lmKSB7CisJCWtmcmVlKHdsLT5md19zdGF0dXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlJTklUX1dPUksoJndsLT5pcnFfd29yaywgd2wxMjcxX2lycV93b3JrKTsKKwlJTklUX1dPUksoJndsLT50eF93b3JrLCB3bDEyNzFfdHhfd29yayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX2NoaXBfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQgPSAwOworCisJd2wxMjcxX3Bvd2VyX29uKHdsKTsKKwltc2xlZXAoV0wxMjcxX1BPV0VSX09OX1NMRUVQKTsKKwl3bDEyNzFfc3BpX3Jlc2V0KHdsKTsKKwl3bDEyNzFfc3BpX2luaXQod2wpOworCisJLyogV2UgZG9uJ3QgbmVlZCBhIHJlYWwgbWVtb3J5IHBhcnRpdGlvbiBoZXJlLCBiZWNhdXNlIHdlIG9ubHkgd2FudAorCSAqIHRvIHVzZSB0aGUgcmVnaXN0ZXJzIGF0IHRoaXMgcG9pbnQuICovCisJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsCisJCQkgICAgIDB4MDAwMDAwMDAsCisJCQkgICAgIDB4MDAwMDAwMDAsCisJCQkgICAgIFJFR0lTVEVSU19CQVNFLAorCQkJICAgICBSRUdJU1RFUlNfRE9XTl9TSVpFKTsKKworCS8qIEVMUCBtb2R1bGUgd2FrZSB1cCAqLworCXdsMTI3MV9md193YWtldXAod2wpOworCisJLyogd2hhbF9Gd0N0cmxfQm9vdFNtKCkgKi8KKworCS8qIDAuIHJlYWQgY2hpcCBpZCBmcm9tIENISVBfSUQgKi8KKwl3bC0+Y2hpcC5pZCA9IHdsMTI3MV9yZWdfcmVhZDMyKHdsLCBDSElQX0lEX0IpOworCisJLyogMS4gY2hlY2sgaWYgY2hpcCBpZCBpcyB2YWxpZCAqLworCisJc3dpdGNoICh3bC0+Y2hpcC5pZCkgeworCWNhc2UgQ0hJUF9JRF8xMjcxX1BHMTA6CisJCXdsMTI3MV93YXJuaW5nKCJjaGlwIGlkIDB4JXggKDEyNzEgUEcxMCkgc3VwcG9ydCBpcyBvYnNvbGV0ZSIsCisJCQkgICAgICAgd2wtPmNoaXAuaWQpOworCisJCXJldCA9IHdsMTI3MV9zZXR1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9JRF8xMjcxX1BHMjA6CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4ICgxMjcxIFBHMjApIiwKKwkJCSAgICAgd2wtPmNoaXAuaWQpOworCisJCXJldCA9IHdsMTI3MV9zZXR1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdsMTI3MV9lcnJvcigidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHdsLT5mdyA9PSBOVUxMKSB7CisJCXJldCA9IHdsMTI3MV9mZXRjaF9maXJtd2FyZSh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogTm8gTlZTIGZyb20gbmV0bGluaywgdHJ5IHRvIGdldCBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtICovCisJaWYgKHdsLT5udnMgPT0gTlVMTCkgeworCQlyZXQgPSB3bDEyNzFfZmV0Y2hfbnZzKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfZmlsdGVyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bDEyNzEsIGZpbHRlcl93b3JrKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh3bC0+c3RhdGUgPT0gV0wxMjcxX1NUQVRFX09GRikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIEZJWE1FOiByZXBsYWNlIHRoZSBtYWdpYyBudW1iZXJzIHdpdGggcHJvcGVyIGRlZmluaXRpb25zICovCisJcmV0ID0gd2wxMjcxX2NtZF9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIDEsIDEwMCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCitvdXRfc2xlZXA6CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKK2ludCB3bDEyNzFfcGx0X3N0YXJ0KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJd2wxMjcxX25vdGljZSgicG93ZXIgdXAiKTsKKworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09GRikgeworCQl3bDEyNzFfZXJyb3IoImNhbm5vdCBnbyBpbnRvIFBMVCBzdGF0ZSBiZWNhdXNlIG5vdCAiCisJCQkgICAgICJpbiBvZmYgc3RhdGU6ICVkIiwgd2wtPnN0YXRlKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfUExUOworCisJcmV0ID0gd2wxMjcxX2NoaXBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfYm9vdCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJd2wxMjcxX25vdGljZSgiZmlybXdhcmUgYm9vdGVkIGluIFBMVCBtb2RlICglcykiLCB3bC0+Y2hpcC5md192ZXIpOworCisJcmV0ID0gd2wxMjcxX3BsdF9pbml0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX3BsdF9zdG9wKHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXdsMTI3MV9ub3RpY2UoInBvd2VyIGRvd24iKTsKKworCWlmICh3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX1BMVCkgeworCQl3bDEyNzFfZXJyb3IoImNhbm5vdCBwb3dlciBkb3duIGJlY2F1c2Ugbm90IGluIFBMVCAiCisJCQkgICAgICJzdGF0ZTogJWQiLCB3bC0+c3RhdGUpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCXdsMTI3MV9wb3dlcl9vZmYod2wpOworCisJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCB3bDEyNzFfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKworCXNrYl9xdWV1ZV90YWlsKCZ3bC0+dHhfcXVldWUsIHNrYik7CisKKwkvKgorCSAqIFRoZSBjaGlwIHNwZWNpZmljIHNldHVwIG11c3QgcnVuIGJlZm9yZSB0aGUgZmlyc3QgVFggcGFja2V0IC0KKwkgKiBiZWZvcmUgdGhhdCwgdGhlIHR4X3dvcmsgd2lsbCBub3QgYmUgaW5pdGlhbGl6ZWQhCisJICovCisKKwlzY2hlZHVsZV93b3JrKCZ3bC0+dHhfd29yayk7CisKKwkvKgorCSAqIFRoZSB3b3JrcXVldWUgaXMgc2xvdyB0byBwcm9jZXNzIHRoZSB0eF9xdWV1ZSBhbmQgd2UgbmVlZCBzdG9wCisJICogdGhlIHF1ZXVlIGhlcmUsIG90aGVyd2lzZSB0aGUgcXVldWUgd2lsbCBnZXQgdG9vIGxvbmcuCisJICovCisJaWYgKHNrYl9xdWV1ZV9sZW4oJndsLT50eF9xdWV1ZSkgPj0gV0wxMjcxX1RYX1FVRVVFX01BWF9MRU5HVEgpIHsKKwkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHdsLT5odyk7CisKKwkJLyoKKwkJICogRklYTUU6IHRoaXMgaXMgcmFjeSwgdGhlIHZhcmlhYmxlIGlzIG5vdCBwcm9wZXJseQorCQkgKiBwcm90ZWN0ZWQuIE1heWJlIGZpeCB0aGlzIGJ5IHJlbW92aW5nIHRoZSBzdHVwaWQKKwkJICogdmFyaWFibGUgYWx0b2dldGhlciBhbmQgY2hlY2tpbmcgdGhlIHJlYWwgcXVldWUgc3RhdGU/CisJCSAqLworCQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IHRydWU7CisJfQorCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCB3bDEyNzFfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHN0YXJ0Iik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHdsLT5zdGF0ZSAhPSBXTDEyNzFfU1RBVEVfT0ZGKSB7CisJCXdsMTI3MV9lcnJvcigiY2Fubm90IHN0YXJ0IGJlY2F1c2Ugbm90IGluIG9mZiBzdGF0ZTogJWQiLAorCQkJICAgICB3bC0+c3RhdGUpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9od19pbml0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3bC0+c3RhdGUgPSBXTDEyNzFfU1RBVEVfT047CisKKwl3bDEyNzFfaW5mbygiZmlybXdhcmUgYm9vdGVkICglcykiLCB3bC0+Y2hpcC5md192ZXIpOworCitvdXQ6CisJaWYgKHJldCA8IDApCisJCXdsMTI3MV9wb3dlcl9vZmYod2wpOworCisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgd2wxMjcxX29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgaTsKKworCXdsMTI3MV9pbmZvKCJkb3duIik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdG9wIik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJV0FSTl9PTih3bC0+c3RhdGUgIT0gV0wxMjcxX1NUQVRFX09OKTsKKworCWlmICh3bC0+c2Nhbm5pbmcpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCB0cnVlKTsKKwkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwkJd2wtPnNjYW5uaW5nID0gZmFsc2U7CisJfQorCisJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKKworCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJY2FuY2VsX3dvcmtfc3luYygmd2wtPmlycV93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZ3bC0+dHhfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmd2wtPmZpbHRlcl93b3JrKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwkvKiBsZXQncyBub3RpZnkgTUFDODAyMTEgYWJvdXQgdGhlIHJlbWFpbmluZyBwZW5kaW5nIFRYIGZyYW1lcyAqLworCXdsMTI3MV90eF9mbHVzaCh3bCk7CisJd2wxMjcxX3Bvd2VyX29mZih3bCk7CisKKwltZW1zZXQod2wtPmJzc2lkLCAwLCBFVEhfQUxFTik7CisJbWVtc2V0KHdsLT5zc2lkLCAwLCBJV19FU1NJRF9NQVhfU0laRSArIDEpOworCXdsLT5zc2lkX2xlbiA9IDA7CisJd2wtPmxpc3Rlbl9pbnQgPSAxOworCXdsLT5ic3NfdHlwZSA9IE1BWF9CU1NfVFlQRTsKKworCXdsLT5yeF9jb3VudGVyID0gMDsKKwl3bC0+ZWxwID0gZmFsc2U7CisJd2wtPnBzbSA9IDA7CisJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKKwl3bC0+cG93ZXJfbGV2ZWwgPSBXTDEyNzFfREVGQVVMVF9QT1dFUl9MRVZFTDsKKwl3bC0+dHhfYmxvY2tzX2F2YWlsYWJsZSA9IDA7CisJd2wtPnR4X3Jlc3VsdHNfY291bnQgPSAwOworCXdsLT50eF9wYWNrZXRzX2NvdW50ID0gMDsKKwl3bC0+dGltZV9vZmZzZXQgPSAwOworCXdsLT5zZXNzaW9uX2NvdW50ZXIgPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfUVVFVUVTOyBpKyspCisJCXdsLT50eF9ibG9ja3NfZnJlZWRbaV0gPSAwOworCisJd2wxMjcxX2RlYnVnZnNfcmVzZXQod2wpOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKworc3RhdGljIGludCB3bDEyNzFfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYWRkIGludGVyZmFjZSB0eXBlICVkIG1hYyAlcE0iLAorCQkgICAgIGNvbmYtPnR5cGUsIGNvbmYtPm1hY19hZGRyKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXdsLT5ic3NfdHlwZSA9IEJTU19UWVBFX1NUQV9CU1M7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXdsLT5ic3NfdHlwZSA9IEJTU19UWVBFX0lCU1M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRTogd2hhdCBpZiBjb25mLT5tYWNfYWRkciBjaGFuZ2VzPyAqLworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgcmVtb3ZlIGludGVyZmFjZSIpOworfQorCisjaWYgMAorc3RhdGljIGludCB3bDEyNzFfb3BfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBza19idWZmICpiZWFjb247CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZ19pbnRlcmZhY2UgYnNzaWQgJXMiLAorCQkgICAgIHByaW50X21hYyhtYWMsIGNvbmYtPmJzc2lkKSk7CisJd2wxMjcxX2R1bXBfYXNjaWkoREVCVUdfTUFDODAyMTEsICJzc2lkOiAiLCBjb25mLT5zc2lkLAorCQkJICBjb25mLT5zc2lkX2xlbik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwltZW1jcHkod2wtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCisJcmV0ID0gd2wxMjcxX2NtZF9idWlsZF9udWxsX2RhdGEod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCXdsLT5zc2lkX2xlbiA9IGNvbmYtPnNzaWRfbGVuOworCWlmICh3bC0+c3NpZF9sZW4pCisJCW1lbWNweSh3bC0+c3NpZCwgY29uZi0+c3NpZCwgd2wtPnNzaWRfbGVuKTsKKworCWlmICh3bC0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfSUJTUykgeworCQkvKiBGSVhNRTogcmVwbGFjZSB0aGUgbWFnaWMgbnVtYmVycyB3aXRoIHByb3BlciBkZWZpbml0aW9ucyAqLworCQlyZXQgPSB3bDEyNzFfY21kX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgNSwgMTAwLCAxKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9zbGVlcDsKKwl9CisKKwlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikgeworCQliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKwkJcmV0ID0gd2wxMjcxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9URU1QTF9CRUFDT04sCisJCQkJCSAgICAgIGJlYWNvbi0+ZGF0YSwgYmVhY29uLT5sZW4pOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCisJCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfUFJPQkVfUkVTUE9OU0UsCisJCQkJCSAgICAgIGJlYWNvbi0+ZGF0YSwgYmVhY29uLT5sZW4pOworCisJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3NsZWVwOworCisJCS8qIEZJWE1FOiByZXBsYWNlIHRoZSBtYWdpYyBudW1iZXJzIHdpdGggcHJvcGVyIGRlZmluaXRpb25zICovCisJCXJldCA9IHdsMTI3MV9jbWRfam9pbih3bCwgd2wtPmJzc190eXBlLCAxLCAxMDAsIDApOworCisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfc2xlZXA7CisJfQorCitvdXRfc2xlZXA6CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJaW50IGNoYW5uZWwsIHJldCA9IDA7CisKKwljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZyBjaCAlZCBwc20gJXMgcG93ZXIgJWQiLAorCQkgICAgIGNoYW5uZWwsCisJCSAgICAgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyA/ICJvbiIgOiAib2ZmIiwKKwkJICAgICBjb25mLT5wb3dlcl9sZXZlbCk7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoY2hhbm5lbCAhPSB3bC0+Y2hhbm5lbCkgeworCQl1OCBvbGRfY2hhbm5lbCA9IHdsLT5jaGFubmVsOworCQl3bC0+Y2hhbm5lbCA9IGNoYW5uZWw7CisKKwkJLyogRklYTUU6IHVzZSBiZWFjb24gaW50ZXJ2YWwgcHJvdmlkZWQgYnkgbWFjODAyMTEgKi8KKwkJcmV0ID0gd2wxMjcxX2NtZF9qb2luKHdsLCB3bC0+YnNzX3R5cGUsIDEsIDEwMCwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bC0+Y2hhbm5lbCA9IG9sZF9jaGFubmVsOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwl9CisKKwlyZXQgPSB3bDEyNzFfY21kX2J1aWxkX251bGxfZGF0YSh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMgJiYgIXdsLT5wc21fcmVxdWVzdGVkKSB7CisJCXdsMTI3MV9pbmZvKCJwc20gZW5hYmxlZCIpOworCisJCXdsLT5wc21fcmVxdWVzdGVkID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCisJCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCisJCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgorCQkgKi8KKwkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJfSBlbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICYmCisJCSAgIHdsLT5wc21fcmVxdWVzdGVkKSB7CisJCXdsMTI3MV9pbmZvKCJwc20gZGlzYWJsZWQiKTsKKworCQl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOworCisJCWlmICh3bC0+cHNtKQorCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwl9CisKKwlpZiAoY29uZi0+cG93ZXJfbGV2ZWwgIT0gd2wtPnBvd2VyX2xldmVsKSB7CisJCXJldCA9IHdsMTI3MV9hY3hfdHhfcG93ZXIod2wsIGNvbmYtPnBvd2VyX2xldmVsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQl3bC0+cG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKKwl9CisKK291dF9zbGVlcDoKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgV0wxMjcxX1NVUFBPUlRFRF9GSUxURVJTIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBcCisJCQkJICBGSUZfQUxMTVVMVEkgfCBcCisJCQkJICBGSUZfRkNTRkFJTCB8IFwKKwkJCQkgIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgXAorCQkJCSAgRklGX0NPTlRST0wgfCBcCisJCQkJICBGSUZfT1RIRVJfQlNTKQorCitzdGF0aWMgdm9pZCB3bDEyNzFfb3BfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWQsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqdG90YWwsdTY0IG11bHRpY2FzdCkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZmlndXJlIGZpbHRlciIpOworCisJKnRvdGFsICY9IFdMMTI3MV9TVVBQT1JURURfRklMVEVSUzsKKwljaGFuZ2VkICY9IFdMMTI3MV9TVVBQT1JURURfRklMVEVSUzsKKworCWlmIChjaGFuZ2VkID09IDApCisJCXJldHVybjsKKworCS8qIEZJWE1FOiB3bC0+cnhfY29uZmlnIGFuZCB3bC0+cnhfZmlsdGVyIGFyZSBub3QgcHJvdGVjdGVkICovCisJd2wtPnJ4X2NvbmZpZyA9IFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRzsKKwl3bC0+cnhfZmlsdGVyID0gV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSOworCisJLyoKKwkgKiBGSVhNRTogd29ya3F1ZXVlcyBuZWVkIHRvIGJlIHByb3Blcmx5IGNhbmNlbGxlZCBvbiBzdG9wKCksIGZvcgorCSAqIG5vdyBsZXQncyBqdXN0IGRpc2FibGUgY2hhbmdpbmcgdGhlIGZpbHRlciBzZXR0aW5ncy4gVGhleSB3aWxsCisJICogYmUgdXBkYXRlZCBhbnkgb24gY29uZmlnKCkuCisJICovCisJLyogc2NoZWR1bGVfd29yaygmd2wtPmZpbHRlcl93b3JrKTsgKi8KK30KKworc3RhdGljIGludCB3bDEyNzFfb3Bfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleV9jb25mKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJY29uc3QgdTggKmFkZHI7CisJaW50IHJldDsKKwl1OCBrZXlfdHlwZTsKKworCXN0YXRpYyBjb25zdCB1OCBiY2FzdF9hZGRyW0VUSF9BTEVOXSA9CisJCXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCisJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc2V0IGtleSIpOworCisJYWRkciA9IHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHI7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ1JZUFQsICJDTUQ6IDB4JXgiLCBjbWQpOworCXdsMTI3MV9kdW1wKERFQlVHX0NSWVBULCAiQUREUjogIiwgYWRkciwgRVRIX0FMRU4pOworCXdsMTI3MV9kZWJ1ZyhERUJVR19DUllQVCwgIktleTogYWxnbzoweCV4LCBpZDolZCwgbGVuOiVkIGZsYWdzIDB4JXgiLAorCQkgICAgIGtleV9jb25mLT5hbGcsIGtleV9jb25mLT5rZXlpZHgsCisJCSAgICAga2V5X2NvbmYtPmtleWxlbiwga2V5X2NvbmYtPmZsYWdzKTsKKwl3bDEyNzFfZHVtcChERUJVR19DUllQVCwgIktFWTogIiwga2V5X2NvbmYtPmtleSwga2V5X2NvbmYtPmtleWxlbik7CisKKwlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGFkZHIpKSB7CisJCS8qIFdlIGRvbnQgc3VwcG9ydCBUWCBvbmx5IGVuY3J5cHRpb24gKi8KKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlzd2l0Y2ggKGtleV9jb25mLT5hbGcpIHsKKwljYXNlIEFMR19XRVA6CisJCWtleV90eXBlID0gS0VZX1dFUDsKKworCQlrZXlfY29uZi0+aHdfa2V5X2lkeCA9IGtleV9jb25mLT5rZXlpZHg7CisJCWJyZWFrOworCWNhc2UgQUxHX1RLSVA6CisJCWtleV90eXBlID0gS0VZX1RLSVA7CisKKwkJa2V5X2NvbmYtPmh3X2tleV9pZHggPSBrZXlfY29uZi0+a2V5aWR4OworCQlicmVhazsKKwljYXNlIEFMR19DQ01QOgorCQlrZXlfdHlwZSA9IEtFWV9BRVM7CisKKwkJa2V5X2NvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2wxMjcxX2Vycm9yKCJVbmtub3duIGtleSBhbGdvIDB4JXgiLCBrZXlfY29uZi0+YWxnKTsKKworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXRfc2xlZXA7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNFVF9LRVk6CisJCXJldCA9IHdsMTI3MV9jbWRfc2V0X2tleSh3bCwgS0VZX0FERF9PUl9SRVBMQUNFLAorCQkJCQkga2V5X2NvbmYtPmtleWlkeCwga2V5X3R5cGUsCisJCQkJCSBrZXlfY29uZi0+a2V5bGVuLCBrZXlfY29uZi0+a2V5LAorCQkJCQkgYWRkcik7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfZXJyb3IoIkNvdWxkIG5vdCBhZGQgb3IgcmVwbGFjZSBrZXkiKTsKKwkJCWdvdG8gb3V0X3NsZWVwOworCQl9CisJCWJyZWFrOworCisJY2FzZSBESVNBQkxFX0tFWToKKwkJcmV0ID0gd2wxMjcxX2NtZF9zZXRfa2V5KHdsLCBLRVlfUkVNT1ZFLAorCQkJCQkga2V5X2NvbmYtPmtleWlkeCwga2V5X3R5cGUsCisJCQkJCSBrZXlfY29uZi0+a2V5bGVuLCBrZXlfY29uZi0+a2V5LAorCQkJCQkgYWRkcik7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfZXJyb3IoIkNvdWxkIG5vdCByZW1vdmUga2V5Iik7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXdsMTI3MV9lcnJvcigiVW5zdXBwb3J0ZWQga2V5IGNtZCAweCV4IiwgY21kKTsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0X3NsZWVwOworCisJCWJyZWFrOworCX0KKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCByZXQ7CisJdTggKnNzaWQgPSBOVUxMOworCXNpemVfdCBzc2lkX2xlbiA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBodyBzY2FuIik7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNzaWQgPSByZXEtPnNzaWRzWzBdLnNzaWQ7CisJCXNzaWRfbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NjYW4oaHctPnByaXYsIHNzaWQsIHNzaWRfbGVuLCAxLCAwLCAxMywgMyk7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX29wX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX2FjeF9ydHNfdGhyZXNob2xkKHdsLCAodTE2KSB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCXdsMTI3MV93YXJuaW5nKCJ3bDEyNzFfb3Bfc2V0X3J0c190aHJlc2hvbGQgZmFpbGVkOiAlZCIsIHJldCk7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9vcF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKKwkJCQkgICAgICAgdTMyIGNoYW5nZWQpCit7CisJZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZTsKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBic3MgaW5mbyBjaGFuZ2VkIik7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7CisJCWlmIChic3NfY29uZi0+YXNzb2MpIHsKKwkJCXdsLT5haWQgPSBic3NfY29uZi0+YWlkOworCisJCQlyZXQgPSB3bDEyNzFfY21kX2J1aWxkX3BzX3BvbGwod2wsIHdsLT5haWQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisKKwkJCXJldCA9IHdsMTI3MV9hY3hfYWlkKHdsLCB3bC0+YWlkKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCisJCQkvKiBJZiB3ZSB3YW50IHRvIGdvIGluIFBTTSBidXQgd2UncmUgbm90IHRoZXJlIHlldCAqLworCQkJaWYgKHdsLT5wc21fcmVxdWVzdGVkICYmICF3bC0+cHNtKSB7CisJCQkJbW9kZSA9IFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOworCQkJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgbW9kZSk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWdvdG8gb3V0X3NsZWVwOworCQkJfQorCQl9CisJfQorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKKwkJCXJldCA9IHdsMTI3MV9hY3hfc2xvdCh3bCwgU0xPVF9USU1FX1NIT1JUKTsKKwkJZWxzZQorCQkJcmV0ID0gd2wxMjcxX2FjeF9zbG90KHdsLCBTTE9UX1RJTUVfTE9ORyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQl3bDEyNzFfd2FybmluZygiU2V0IHNsb3QgdGltZSBmYWlsZWQgJWQiLCByZXQpOworCQkJZ290byBvdXRfc2xlZXA7CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgeworCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkKKwkJCXdsMTI3MV9hY3hfc2V0X3ByZWFtYmxlKHdsLCBBQ1hfUFJFQU1CTEVfU0hPUlQpOworCQllbHNlCisJCQl3bDEyNzFfYWN4X3NldF9wcmVhbWJsZSh3bCwgQUNYX1BSRUFNQkxFX0xPTkcpOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UKSB7CisJCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90KQorCQkJcmV0ID0gd2wxMjcxX2FjeF9jdHNfcHJvdGVjdCh3bCwgQ1RTUFJPVEVDVF9FTkFCTEUpOworCQllbHNlCisJCQlyZXQgPSB3bDEyNzFfYWN4X2N0c19wcm90ZWN0KHdsLCBDVFNQUk9URUNUX0RJU0FCTEUpOworCQlpZiAocmV0IDwgMCkgeworCQkJd2wxMjcxX3dhcm5pbmcoIlNldCBjdHNwcm90ZWN0IGZhaWxlZCAlZCIsIHJldCk7CisJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQorCX0KKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCisKKy8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSB3bDEyNzFfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsCisJICAuaHdfdmFsdWUgPSAweDEsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDEsIH0sCisJeyAuYml0cmF0ZSA9IDIwLAorCSAgLmh3X3ZhbHVlID0gMHgyLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgyLAorCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwKKwl7IC5iaXRyYXRlID0gNTUsCisJICAuaHdfdmFsdWUgPSAweDQsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDQsCisJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LAorCXsgLmJpdHJhdGUgPSAxMTAsCisJICAuaHdfdmFsdWUgPSAweDIwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgyMCwKKwkgIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sCisJeyAuYml0cmF0ZSA9IDYwLAorCSAgLmh3X3ZhbHVlID0gMHg4LAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg4LCB9LAorCXsgLmJpdHJhdGUgPSA5MCwKKwkgIC5od192YWx1ZSA9IDB4MTAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDEwLCB9LAorCXsgLmJpdHJhdGUgPSAxMjAsCisJICAuaHdfdmFsdWUgPSAweDQwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHg0MCwgfSwKKwl7IC5iaXRyYXRlID0gMTgwLAorCSAgLmh3X3ZhbHVlID0gMHg4MCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4ODAsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwKKwkgIC5od192YWx1ZSA9IDB4MjAwLAorCSAgLmh3X3ZhbHVlX3Nob3J0ID0gMHgyMDAsIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwKKwkgLmh3X3ZhbHVlID0gMHg0MDAsCisJIC5od192YWx1ZV9zaG9ydCA9IDB4NDAwLCB9LAorCXsgLmJpdHJhdGUgPSA0ODAsCisJICAuaHdfdmFsdWUgPSAweDgwMCwKKwkgIC5od192YWx1ZV9zaG9ydCA9IDB4ODAwLCB9LAorCXsgLmJpdHJhdGUgPSA1NDAsCisJICAuaHdfdmFsdWUgPSAweDEwMDAsCisJICAuaHdfdmFsdWVfc2hvcnQgPSAweDEwMDAsIH0sCit9OworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgd2wxMjcxX2NoYW5uZWxzW10gPSB7CisJeyAuaHdfdmFsdWUgPSAxLCAuY2VudGVyX2ZyZXEgPSAyNDEyfSwKKwl7IC5od192YWx1ZSA9IDIsIC5jZW50ZXJfZnJlcSA9IDI0MTd9LAorCXsgLmh3X3ZhbHVlID0gMywgLmNlbnRlcl9mcmVxID0gMjQyMn0sCisJeyAuaHdfdmFsdWUgPSA0LCAuY2VudGVyX2ZyZXEgPSAyNDI3fSwKKwl7IC5od192YWx1ZSA9IDUsIC5jZW50ZXJfZnJlcSA9IDI0MzJ9LAorCXsgLmh3X3ZhbHVlID0gNiwgLmNlbnRlcl9mcmVxID0gMjQzN30sCisJeyAuaHdfdmFsdWUgPSA3LCAuY2VudGVyX2ZyZXEgPSAyNDQyfSwKKwl7IC5od192YWx1ZSA9IDgsIC5jZW50ZXJfZnJlcSA9IDI0NDd9LAorCXsgLmh3X3ZhbHVlID0gOSwgLmNlbnRlcl9mcmVxID0gMjQ1Mn0sCisJeyAuaHdfdmFsdWUgPSAxMCwgLmNlbnRlcl9mcmVxID0gMjQ1N30sCisJeyAuaHdfdmFsdWUgPSAxMSwgLmNlbnRlcl9mcmVxID0gMjQ2Mn0sCisJeyAuaHdfdmFsdWUgPSAxMiwgLmNlbnRlcl9mcmVxID0gMjQ2N30sCisJeyAuaHdfdmFsdWUgPSAxMywgLmNlbnRlcl9mcmVxID0gMjQ3Mn0sCit9OworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHdsMTI3MV9iYW5kXzJnaHogPSB7CisJLmNoYW5uZWxzID0gd2wxMjcxX2NoYW5uZWxzLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRSh3bDEyNzFfY2hhbm5lbHMpLAorCS5iaXRyYXRlcyA9IHdsMTI3MV9yYXRlcywKKwkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUod2wxMjcxX3JhdGVzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyB3bDEyNzFfb3BzID0geworCS5zdGFydCA9IHdsMTI3MV9vcF9zdGFydCwKKwkuc3RvcCA9IHdsMTI3MV9vcF9zdG9wLAorCS5hZGRfaW50ZXJmYWNlID0gd2wxMjcxX29wX2FkZF9pbnRlcmZhY2UsCisJLnJlbW92ZV9pbnRlcmZhY2UgPSB3bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZSwKKwkuY29uZmlnID0gd2wxMjcxX29wX2NvbmZpZywKKy8qIAkuY29uZmlnX2ludGVyZmFjZSA9IHdsMTI3MV9vcF9jb25maWdfaW50ZXJmYWNlLCAqLworCS5jb25maWd1cmVfZmlsdGVyID0gd2wxMjcxX29wX2NvbmZpZ3VyZV9maWx0ZXIsCisJLnR4ID0gd2wxMjcxX29wX3R4LAorCS5zZXRfa2V5ID0gd2wxMjcxX29wX3NldF9rZXksCisJLmh3X3NjYW4gPSB3bDEyNzFfb3BfaHdfc2NhbiwKKwkuYnNzX2luZm9fY2hhbmdlZCA9IHdsMTI3MV9vcF9ic3NfaW5mb19jaGFuZ2VkLAorCS5zZXRfcnRzX3RocmVzaG9sZCA9IHdsMTI3MV9vcF9zZXRfcnRzX3RocmVzaG9sZCwKK307CisKK3N0YXRpYyBpbnQgd2wxMjcxX3JlZ2lzdGVyX2h3KHN0cnVjdCB3bDEyNzEgKndsKQoreworCWludCByZXQ7CisKKwlpZiAod2wtPm1hYzgwMjExX3JlZ2lzdGVyZWQpCisJCXJldHVybiAwOworCisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIod2wtPmh3LCB3bC0+bWFjX2FkZHIpOworCisJcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHdsLT5odyk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbWFjODAyMTEgaHc6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3bC0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IHRydWU7CisKKwl3bDEyNzFfbm90aWNlKCJsb2FkZWQiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV9pbml0X2llZWU4MDIxMShzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwkvKgorCSAqIFRoZSB0eCBkZXNjcmlwdG9yIGJ1ZmZlciBhbmQgdGhlIFRLSVAgc3BhY2UuCisJICoKKwkgKiBGSVhNRTogYWRkIGNvcnJlY3QgMTI3MSBkZXNjcmlwdG9yIHNpemUKKwkgKi8KKwl3bC0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gV0wxMjcxX1RLSVBfSVZfU1BBQ0U7CisKKwkvKiB1bml0IHVzICovCisJLyogRklYTUU6IGZpbmQgYSBwcm9wZXIgdmFsdWUgKi8KKwl3bC0+aHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwMDsKKworCXdsLT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCUlFRUU4MDIxMV9IV19OT0lTRV9EQk07CisKKwl3bC0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisJd2wtPmh3LT53aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSAxOworCXdsLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJndsMTI3MV9iYW5kXzJnaHo7CisKKwlTRVRfSUVFRTgwMjExX0RFVih3bC0+aHcsICZ3bC0+c3BpLT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdsMTI3MV9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd2wxMjcxX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAid2wxMjcxIiwKKwkuaWQgICAgICAgICAgICAgPSAtMSwKKworCS8qIGRldmljZSBtb2RlbCBpbnNpc3RzIHRvIGhhdmUgYSByZWxlYXNlIGZ1bmN0aW9uICovCisJLmRldiAgICAgICAgICAgID0geworCQkucmVsZWFzZSA9IHdsMTI3MV9kZXZpY2VfcmVsZWFzZSwKKwl9LAorfTsKKworI2RlZmluZSBXTDEyNzFfREVGQVVMVF9DSEFOTkVMIDAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdsMTI3MV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCB3bDEyeHhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHdsMTI3MSAqd2w7CisJaW50IHJldCwgaTsKKwlzdGF0aWMgY29uc3QgdTggbm9raWFfb3VpWzNdID0gezB4MDAsIDB4MWYsIDB4ZGZ9OworCisJcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJd2wxMjcxX2Vycm9yKCJubyBwbGF0Zm9ybSBkYXRhIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqd2wpLCAmd2wxMjcxX29wcyk7CisJaWYgKCFodykgeworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJd2wgPSBody0+cHJpdjsKKwltZW1zZXQod2wsIDAsIHNpemVvZigqd2wpKTsKKworCXdsLT5odyA9IGh3OworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHdsKTsKKwl3bC0+c3BpID0gc3BpOworCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2wtPnR4X3F1ZXVlKTsKKworCUlOSVRfV09SSygmd2wtPmZpbHRlcl93b3JrLCB3bDEyNzFfZmlsdGVyX3dvcmspOworCXdsLT5jaGFubmVsID0gV0wxMjcxX0RFRkFVTFRfQ0hBTk5FTDsKKwl3bC0+c2Nhbm5pbmcgPSBmYWxzZTsKKwl3bC0+ZGVmYXVsdF9rZXkgPSAwOworCXdsLT5saXN0ZW5faW50ID0gMTsKKwl3bC0+cnhfY291bnRlciA9IDA7CisJd2wtPnJ4X2NvbmZpZyA9IFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRzsKKwl3bC0+cnhfZmlsdGVyID0gV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSOworCXdsLT5lbHAgPSBmYWxzZTsKKwl3bC0+cHNtID0gMDsKKwl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOworCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CisJd2wtPnBvd2VyX2xldmVsID0gV0wxMjcxX0RFRkFVTFRfUE9XRVJfTEVWRUw7CisKKwkvKiBXZSB1c2UgdGhlIGRlZmF1bHQgcG93ZXIgb24gc2xlZXAgdGltZSB1bnRpbCB3ZSBrbm93IHdoaWNoIGNoaXAKKwkgKiB3ZSdyZSB1c2luZyAqLworCWZvciAoaSA9IDA7IGkgPCBGV19UWF9DTVBMVF9CTE9DS19TSVpFOyBpKyspCisJCXdsLT50eF9mcmFtZXNbaV0gPSBOVUxMOworCisJc3Bpbl9sb2NrX2luaXQoJndsLT53bF9sb2NrKTsKKworCS8qCisJICogSW4gY2FzZSBvdXIgTUFDIGFkZHJlc3MgaXMgbm90IGNvcnJlY3RseSBzZXQsCisJICogd2UgdXNlIGEgcmFuZG9tIGJ1dCBOb2tpYSBNQUMuCisJICovCisJbWVtY3B5KHdsLT5tYWNfYWRkciwgbm9raWFfb3VpLCAzKTsKKwlnZXRfcmFuZG9tX2J5dGVzKHdsLT5tYWNfYWRkciArIDMsIDMpOworCisJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKKwltdXRleF9pbml0KCZ3bC0+bXV0ZXgpOworCisJd2wtPnJ4X2Rlc2NyaXB0b3IgPSBrbWFsbG9jKHNpemVvZigqd2wtPnJ4X2Rlc2NyaXB0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdsLT5yeF9kZXNjcmlwdG9yKSB7CisJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcnggZGVzY3JpcHRvciIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCS8qIFRoaXMgaXMgdGhlIG9ubHkgU1BJIHZhbHVlIHRoYXQgd2UgbmVlZCB0byBzZXQgaGVyZSwgdGhlIHJlc3QKKwkgKiBjb21lcyBmcm9tIHRoZSBib2FyZC1wZXJpcGhlcmFscyBmaWxlICovCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMzI7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoInNwaV9zZXR1cCBmYWlsZWQiKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwl3bC0+c2V0X3Bvd2VyID0gcGRhdGEtPnNldF9wb3dlcjsKKwlpZiAoIXdsLT5zZXRfcG93ZXIpIHsKKwkJd2wxMjcxX2Vycm9yKCJzZXQgcG93ZXIgZnVuY3Rpb24gbWlzc2luZyBpbiBwbGF0Zm9ybSBkYXRhIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJd2wtPmlycSA9IHNwaS0+aXJxOworCWlmICh3bC0+aXJxIDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImlycSBtaXNzaW5nIGluIHBsYXRmb3JtIGRhdGEiKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycSh3bC0+aXJxLCB3bDEyNzFfaXJxLCAwLCBEUklWRVJfTkFNRSwgd2wpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlzZXRfaXJxX3R5cGUod2wtPmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCisJZGlzYWJsZV9pcnEod2wtPmlycSk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndsMTI3MV9kZXZpY2UpOworCWlmIChyZXQpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZG4ndCByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UiKTsKKwkJZ290byBvdXRfaXJxOworCX0KKwlkZXZfc2V0X2RydmRhdGEoJndsMTI3MV9kZXZpY2UuZGV2LCB3bCk7CisKKwlyZXQgPSB3bDEyNzFfaW5pdF9pZWVlODAyMTEod2wpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3BsYXRmb3JtOworCisJcmV0ID0gd2wxMjcxX3JlZ2lzdGVyX2h3KHdsKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9wbGF0Zm9ybTsKKworCXdsMTI3MV9kZWJ1Z2ZzX2luaXQod2wpOworCisJd2wxMjcxX25vdGljZSgiaW5pdGlhbGl6ZWQiKTsKKworCXJldHVybiAwOworCisgb3V0X3BsYXRmb3JtOgorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ3bDEyNzFfZGV2aWNlKTsKKworIG91dF9pcnE6CisJZnJlZV9pcnEod2wtPmlycSwgd2wpOworCisgb3V0X2ZyZWU6CisJa2ZyZWUod2wtPnJ4X2Rlc2NyaXB0b3IpOworCXdsLT5yeF9kZXNjcmlwdG9yID0gTlVMTDsKKworCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdsMTI3MV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcod2wtPmh3KTsKKworCXdsMTI3MV9kZWJ1Z2ZzX2V4aXQod2wpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ3bDEyNzFfZGV2aWNlKTsKKwlmcmVlX2lycSh3bC0+aXJxLCB3bCk7CisJa2ZyZWUod2wtPnRhcmdldF9tZW1fbWFwKTsKKwlrZnJlZSh3bC0+ZncpOworCXdsLT5mdyA9IE5VTEw7CisJa2ZyZWUod2wtPm52cyk7CisJd2wtPm52cyA9IE5VTEw7CisKKwlrZnJlZSh3bC0+cnhfZGVzY3JpcHRvcik7CisJd2wtPnJ4X2Rlc2NyaXB0b3IgPSBOVUxMOworCisJa2ZyZWUod2wtPmZ3X3N0YXR1cyk7CisJa2ZyZWUod2wtPnR4X3Jlc19pZik7CisKKwlpZWVlODAyMTFfZnJlZV9odyh3bC0+aHcpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHdsMTI3MV9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJ3bDEyNzEiLAorCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCisJLnByb2JlCQk9IHdsMTI3MV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdsMTI3MV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2wxMjcxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmd2wxMjcxX3NwaV9kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIHNwaSBkcml2ZXI6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdsMTI3MV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZ3bDEyNzFfc3BpX2RyaXZlcik7CisKKwl3bDEyNzFfbm90aWNlKCJ1bmxvYWRlZCIpOworfQorCittb2R1bGVfaW5pdCh3bDEyNzFfaW5pdCk7Cittb2R1bGVfZXhpdCh3bDEyNzFfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjNzRiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuYwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX3BzLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorCisjZGVmaW5lIFdMMTI3MV9XQUtFVVBfVElNRU9VVCA1MDAKKworLyogUm91dGluZXMgdG8gdG9nZ2xlIHNsZWVwIG1vZGUgd2hpbGUgaW4gRUxQICovCit2b2lkIHdsMTI3MV9wc19lbHBfc2xlZXAoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJLyoKKwkgKiBGSVhNRTogZHVlIHRvIGEgcHJvYmxlbSBpbiB0aGUgZmlybXdhcmUgKGNhdXNpbmcgYSBmaXJtd2FyZQorCSAqIGNyYXNoKSwgRUxQIGVudHJ5IGlzIHByZXZlbnRlZCBiZWxvdy4gUmVtb3ZlIHRoZSAidHJ1ZSIgdG8KKwkgKiByZS1lbmFibGUgRUxQIGVudHJ5LgorCSAqLworCWlmICh0cnVlIHx8IHdsLT5lbHAgfHwgIXdsLT5wc20pCisJCXJldHVybjsKKworCS8qCisJICogR28gdG8gRUxQIHVubGVzcyB0aGVyZSBpcyB3b3JrIGFscmVhZHkgcGVuZGluZyAtIHBlbmRpbmcgd29yaworCSAqIHdpbGwgaW1tZWRpYXRlbHkgd2FrZXVwIHRoZSBjaGlwc2V0IGFueXdheS4KKwkgKi8KKwlpZiAoIXdvcmtfcGVuZGluZygmd2wtPmlycV93b3JrKSAmJiAhd29ya19wZW5kaW5nKCZ3bC0+dHhfd29yaykpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgImNoaXAgdG8gZWxwIik7CisJCXdsMTI3MV93cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIEVMUENUUkxfU0xFRVApOworCQl3bC0+ZWxwID0gdHJ1ZTsKKwl9Cit9CisKK2ludCB3bDEyNzFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBjaGlwX2F3YWtlKQoreworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisJdTMyIHN0YXJ0X3RpbWUgPSBqaWZmaWVzOworCWJvb2wgcGVuZGluZyA9IGZhbHNlOworCisJaWYgKCF3bC0+ZWxwKQorCQlyZXR1cm4gMDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtpbmcgdXAgY2hpcCBmcm9tIGVscCIpOworCisJLyoKKwkgKiBUaGUgc3BpbmxvY2sgaXMgcmVxdWlyZWQgaGVyZSB0byBzeW5jaHJvbml6ZSBib3RoIHRoZSB3b3JrIGFuZAorCSAqIHRoZSBjb21wbGV0aW9uIHZhcmlhYmxlIGluIG9uZSBlbnRpdHkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT53bF9sb2NrLCBmbGFncyk7CisJaWYgKHdvcmtfcGVuZGluZygmd2wtPmlycV93b3JrKSB8fCBjaGlwX2F3YWtlKQorCQlwZW5kaW5nID0gdHJ1ZTsKKwllbHNlCisJCXdsLT5lbHBfY29tcGwgPSAmY29tcGw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKworCXdsMTI3MV93cml0ZTMyKHdsLCBIV19BQ0NFU1NfRUxQX0NUUkxfUkVHX0FERFIsIEVMUENUUkxfV0FLRV9VUCk7CisKKwlpZiAoIXBlbmRpbmcpIHsKKwkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAorCQkJJmNvbXBsLCBtc2Vjc190b19qaWZmaWVzKFdMMTI3MV9XQUtFVVBfVElNRU9VVCkpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXdsMTI3MV9lcnJvcigiRUxQIHdha2V1cCB0aW1lb3V0ISIpOworCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWdvdG8gZXJyOworCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKKwkJCXdsMTI3MV9lcnJvcigiRUxQIHdha2V1cCBjb21wbGV0aW9uIGVycm9yLiIpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwl3bC0+ZWxwID0gZmFsc2U7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAid2FrZXVwIHRpbWU6ICV1IG1zIiwKKwkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydF90aW1lKSk7CisJZ290byBvdXQ7CisKK2VycjoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwl3bC0+ZWxwX2NvbXBsID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7CisKK291dDoKKwlyZXR1cm4gMDsKK30KKworaW50IHdsMTI3MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERToKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgImVudGVyaW5nIHBzbSIpOworCQlyZXQgPSB3bDEyNzFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJd2wtPnBzbSA9IDE7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9BQ1RJVkVfTU9ERToKKwlkZWZhdWx0OgorCQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAibGVhdmluZyBwc20iKTsKKwkJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHdsMTI3MV9jbWRfcHNfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQl3bC0+cHNtID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvcHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuaApzaW1pbGFyaXR5IGluZGV4IDYwJQpjb3B5IGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmgKY29weSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmgKaW5kZXggNWQ3YzUyNS4uZGUyYmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3BzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5oCkBAIC0xLDEzICsxLDkgQEAKLSNpZm5kZWYgX19XTDEyWFhfUFNfSF9fCi0jZGVmaW5lIF9fV0wxMlhYX1BTX0hfXwotCiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNyBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTI1LDEyICsyMSwxNSBAQAogICoKICAqLwogCi0jaW5jbHVkZSAid2wxMnh4LmgiCi0jaW5jbHVkZSAiYWN4LmgiCisjaWZuZGVmIF9fV0wxMjcxX1BTX0hfXworI2RlZmluZSBfX1dMMTI3MV9QU19IX18KIAotaW50IHdsMTJ4eF9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgZW51bSBhY3hfcHNfbW9kZSBtb2RlKTsKLXZvaWQgd2wxMnh4X3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMnh4ICp3bCk7Ci1pbnQgd2wxMnh4X3BzX2VscF93YWtldXAoc3RydWN0IHdsMTJ4eCAqd2wpOworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKworaW50IHdsMTI3MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZSk7Cit2b2lkIHdsMTI3MV9wc19lbHBfc2xlZXAoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9wc19lbHBfd2FrZXVwKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGNoaXBfYXdha2UpOwogCiAKLSNlbmRpZiAvKiBfX1dMMTJYWF9QU19IX18gKi8KKyNlbmRpZiAvKiBfX1dMMTI3MV9QU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcmVnLmgKc2ltaWxhcml0eSBpbmRleCA5MiUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3JlZy5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3JlZy5oCmluZGV4IGU0MjE2NDMuLmY4ZWQ0YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3JlZy5oCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMnh4CiAgKgotICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDcgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogQ29udGFjdDogS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+CisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yNiw3ICsyNiw2IEBACiAjZGVmaW5lIF9fUkVHX0hfXwogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0jaW5jbHVkZSAid2wxMnh4LmgiCiAKICNkZWZpbmUgUkVHSVNURVJTX0JBU0UgMHgwMDMwMDAwMAogI2RlZmluZSBEUlBXX0JBU0UgICAgICAweDAwMzEwMDAwCkBAIC0zNSw2ICszNCw3IEBACiAjZGVmaW5lIFJFR0lTVEVSU19XT1JLX1NJWkUgMHgwMDAwYjAwMAogCiAjZGVmaW5lIEhXX0FDQ0VTU19FTFBfQ1RSTF9SRUdfQUREUiAgICAgICAgIDB4MUZGRkMKKyNkZWZpbmUgU1RBVFVTX01FTV9BRERSRVNTICAgICAgICAgICAgICAgICAgMHg0MDQwMAogCiAvKiBFTFAgcmVnaXN0ZXIgY29tbWFuZHMgKi8KICNkZWZpbmUgRUxQQ1RSTF9XQUtFX1VQICAgICAgICAgICAgIDB4MQpAQCAtNDMsNiArNDMsMjUgQEAKIC8qIEVMUCBXTEFOX1JFQURZIGJpdCAqLwogI2RlZmluZSBFTFBDVFJMX1dMQU5fUkVBRFkgICAgICAgICAgMHgyCiAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEhvc3QgU29mdHdhcmUgUmVzZXQgLSAzMmJpdCBSVworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFszMToxXSBSZXNlcnZlZAorICAgIDAgIFNPRlRfUkVTRVQgU29mdCBSZXNldCAgLSBXaGVuIHRoaXMgYml0IGlzIHNldCwKKyAgICBpdCBob2xkcyB0aGUgV2xhbiBoYXJkd2FyZSBpbiBhIHNvZnQgcmVzZXQgc3RhdGUuCisgICAgVGhpcyByZXNldCBkaXNhYmxlcyBhbGwgTUFDIGFuZCBiYXNlYmFuZCBwcm9jZXNzb3IKKyAgICBjbG9ja3MgZXhjZXB0IHRoZSBDYXJkQnVzL1BDSSBpbnRlcmZhY2UgY2xvY2suCisgICAgSXQgYWxzbyBpbml0aWFsaXplcyBhbGwgTUFDIHN0YXRlIG1hY2hpbmVzIGV4Y2VwdAorICAgIHRoZSBob3N0IGludGVyZmFjZS4gSXQgZG9lcyBub3QgcmVsb2FkIHRoZQorICAgIGNvbnRlbnRzIG9mIHRoZSBFRVBST00uIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZAorICAgIChub3Qgc2VsZi1jbGVhcmluZyksIHRoZSBXbGFuIGhhcmR3YXJlCisgICAgZXhpdHMgdGhlIHNvZnR3YXJlIHJlc2V0IHN0YXRlLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VUICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwMDAwKQorCisjZGVmaW5lIFdMMTI3MV9TTFZfUkVHX0RBVEEgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDAwMDgpCisjZGVmaW5lIFdMMTI3MV9TTFZfUkVHX0FEQVRBICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDAwMGMpCisjZGVmaW5lIFdMMTI3MV9TTFZfTUVNX0RBVEEgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDAwMTgpCiAvKgogICogSW50ZXJydXB0IHJlZ2lzdGVycy4KICAqIDY0IGJpdCBpbnRlcnJ1cHQgc291cmNlcyByZWdpc3RlcnMgd3MgY2VkLgpAQCAtOTYsNiArMTE1LDkgQEAKICNkZWZpbmUgSE9TVF9NQVNLX0NMUl9MICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0MCkKICNkZWZpbmUgSE9TVF9NQVNLX0NMUl9IICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ0NCkKIAorI2RlZmluZSBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc0KQorI2RlZmluZSBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHX0ggICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDc4KQorCiAvKiBIb3N0IEludGVycnVwdHMqLwogI2RlZmluZSBISU5UX01BU0sgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDk0KQogI2RlZmluZSBISU5UX01BU0tfU0VUICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNDk4KQpAQCAtMTA3LDE3ICsxMjksMTQ4IEBACiAjZGVmaW5lIEhJTlRfQUNLICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTgpCiAjZGVmaW5lIEhJTlRfVFJJRyAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QUMpCiAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEhvc3QgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLSAzMmJpdCAoUlcpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTZXR0aW5nIGEgYml0IGluIHRoaXMgcmVnaXN0ZXIgbWFza3MgdGhlCisgIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHRvIHRoZSBob3N0LgorICAwIC0gUlgwCQktIFJ4IGZpcnN0IGR1YmJsZSBidWZmZXIgRGF0YSBJbnRlcnJ1cHQKKyAgMSAtIFRYRAkJLSBUeCBEYXRhIEludGVycnVwdAorICAyIC0gVFhYRlIJCS0gVHggVHJhbnNmZXIgSW50ZXJydXB0CisgIDMgLSBSWDEJCS0gUnggc2Vjb25kIGR1YmJsZSBidWZmZXIgRGF0YSBJbnRlcnJ1cHQKKyAgNCAtIFJYWEZSCQktIFJ4IFRyYW5zZmVyIEludGVycnVwdAorICA1IC0gRVZFTlRfQQktIEV2ZW50IE1haWxib3ggaW50ZXJydXB0CisgIDYgLSBFVkVOVF9CCS0gRXZlbnQgTWFpbGJveCBpbnRlcnJ1cHQKKyAgNyAtIFdOT05IU1QJLSBXYWtlIE9uIEhvc3QgSW50ZXJydXB0CisgIDggLSBUUkFDRV9BCS0gRGVidWcgVHJhY2UgaW50ZXJydXB0CisgIDkgLSBUUkFDRV9CCS0gRGVidWcgVHJhY2UgaW50ZXJydXB0CisgMTAgLSBDRENNUAkJLSBDb21tYW5kIENvbXBsZXRlIEludGVycnVwdAorIDExIC0KKyAxMiAtCisgMTMgLQorIDE0IC0gSUNPTVAJCS0gSW5pdGlhbGl6YXRpb24gQ29tcGxldGUgSW50ZXJydXB0CisgMTYgLSBTRyBTRQkJLSBTb2Z0IEdlbWluaSAtIFNlbnNlIGVuYWJsZSBpbnRlcnJ1cHQKKyAxNyAtIFNHIFNECQktIFNvZnQgR2VtaW5pIC0gU2Vuc2UgZGlzYWJsZSBpbnRlcnJ1cHQKKyAxOCAtCQkJLQorIDE5IC0JCQktCisgMjAgLQkJCS0KKyAyMS0JCQktCisgRGVmYXVsdDogMHgwMDAxCisqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFDWF9SRUdfSU5URVJSVVBUX01BU0sgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0REMpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEhvc3QgSW50ZXJydXB0IE1hc2sgU2V0IDE2Yml0LCAoV3JpdGUgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2V0dGluZyBhIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIHNldHMKKyB0aGUgY29ycmVzcG9uZGluZyBiaW4gaW4gQUNYX0hJTlRfTUFTSyByZWdpc3RlcgorIHdpdGhvdXQgZWZmZWN0aW5nIHRoZSBtYXNrCisgc3RhdGUgb2Ygb3RoZXIgYml0cyAoMCA9IG5vIGVmZmVjdCkuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1JFR19ISU5UX01BU0tfU0VUICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRFMCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSG9zdCBJbnRlcnJ1cHQgTWFzayBDbGVhciAxNmJpdCwoV3JpdGUgb25seSkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2V0dGluZyBhIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGNsZWFycworIHRoZSBjb3JyZXNwb25kaW5nIGJpbiBpbiBBQ1hfSElOVF9NQVNLIHJlZ2lzdGVyCisgd2l0aG91dCBlZmZlY3RpbmcgdGhlIG1hc2sKKyBzdGF0ZSBvZiBvdGhlciBiaXRzICgwID0gbm8gZWZmZWN0KS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFDWF9SRUdfSElOVF9NQVNLX0NMUiAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0RTQpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBOb25kZXN0cnVjdGl2ZSBSZWFkCisgIDE2Yml0LChSZWFkIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRoZSBob3N0IGNhbiByZWFkIHRoaXMgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lCisgd2hpY2ggaW50ZXJydXB0cyBhcmUgYWN0aXZlLgorIFJlYWRpbmcgdGhpcyByZWdpc3RlciBkb2Vzbid0CisgZWZmZWN0IGl0cyBjb250ZW50LgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRFOCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIENsZWFyIG9uIFJlYWQgIFJlZ2lzdGVyCisgIDE2Yml0LChSZWFkIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRoZSBob3N0IGNhbiByZWFkIHRoaXMgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lCisgd2hpY2ggaW50ZXJydXB0cyBhcmUgYWN0aXZlLgorIFJlYWRpbmcgdGhpcyByZWdpc3RlciBjbGVhcnMgaXQsCisgdGh1cyBtYWtpbmcgYWxsIGludGVycnVwdHMgaW5hY3RpdmUuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1JFR19JTlRFUlJVUFRfQ0xFQVIgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRGOCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgSG9zdCBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIKKyAgMTZiaXQsKFdyaXRlIG9ubHkpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFRoZSBob3N0IGNhbiBzZXQgaW5kaXZpZHVhbCBiaXRzIGluIHRoaXMKKyByZWdpc3RlciB0byBjbGVhciAoYWNrbm93bGVkZ2UpIHRoZSBjb3JyZXNwLgorIGludGVycnVwdCBzdGF0dXMgYml0cyBpbiB0aGUgSElOVF9TVFNfQ0xSIGFuZAorIEhJTlRfU1RTX05EIHJlZ2lzdGVycywgdGh1cyBtYWtpbmcgdGhlCisgYXNzb3RpYXRlZCBpbnRlcnJ1cHQgaW5hY3RpdmUuICgwLW5vIGVmZmVjdCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0sgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwNEYwKQorCisjZGVmaW5lIFJYX0RSSVZFUl9EVU1NWV9XUklURV9BRERSRVNTICAoUkVHSVNURVJTX0JBU0UgKyAweDA1MzQpCisjZGVmaW5lIFJYX0RSSVZFUl9DT1VOVEVSX0FERFJFU1MgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA1MzgpCisKIC8qIERldmljZSBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyovCiAjZGVmaW5lIFNPUl9DRkcgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDApCi0jZGVmaW5lIEVDUFVfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDQpCisKKy8qIEVtYmVkZGVkIEFSTSBDUFUgQ29udHJvbCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgSGFsdCBlQ1BVICAgLSAzMmJpdCBSVworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDAgSEFMVF9FQ1BVIEhhbHQgRW1iZWRkZWQgQ1BVIC0gVGhpcyBiaXQgaXMgdGhlCisgY29tcGxpbWVudCBvZiBiaXQgMSAoTURBVEEyKSBpbiB0aGUgU09SX0NGRyByZWdpc3Rlci4KKyBEdXJpbmcgYSBoYXJkd2FyZSByZXNldCwgdGhpcyBiaXQgaG9sZHMKKyB0aGUgaW52ZXJzZSBvZiBNREFUQTIuCisgV2hlbiBkb3dubG9hZGluZyBmaXJtd2FyZSBmcm9tIHRoZSBob3N0LAorIHNldCB0aGlzIGJpdCAocHVsbCBkb3duIE1EQVRBMikuCisgVGhlIGhvc3QgY2xlYXJzIHRoaXMgYml0IGFmdGVyIGRvd25sb2FkaW5nIHRoZSBmaXJtd2FyZSBpbnRvCisgemVyby13YWl0LXN0YXRlIFNTUkFNLgorIFdoZW4gbG9hZGluZyBmaXJtd2FyZSBmcm9tIEZsYXNoLCBjbGVhciB0aGlzIGJpdCAocHVsbCB1cCBNREFUQTIpCisgc28gdGhhdCB0aGUgZUNQVSBjYW4gcnVuIHRoZSBib290bG9hZGVyIGNvZGUgaW4gRmxhc2gKKyBIQUxUX0VDUFUgZUNQVSBTdGF0ZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBoYWx0IGVDUFUKKyAwIGVuYWJsZSBlQ1BVCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2RlZmluZSBBQ1hfUkVHX0VDUFVfQ09OVFJPTCAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwODA0KQorCiAjZGVmaW5lIEhJX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MDgpCi0jZGVmaW5lIEVFX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA4MEMpCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBFRVBST00gQnVyc3QgUmVhZCBTdGFydCAgLSAzMmJpdCBSVworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFszMToxXSBSZXNlcnZlZAorIDAgIEFDWF9FRV9TVEFSVCAtICBFRVBST00gQnVyc3QgUmVhZCBTdGFydCAwCisgU2V0dGluZyB0aGlzIGJpdCBzdGFydHMgYSBidXJzdCByZWFkIGZyb20KKyB0aGUgZXh0ZXJuYWwgRUVQUk9NLgorIElmIHRoaXMgYml0IGlzIHNldCAoYWZ0ZXIgcmVzZXQpIGJlZm9yZSBhbiBFRVBST00gcmVhZC93cml0ZSwKKyB0aGUgYnVyc3QgcmVhZCBzdGFydHMgYXQgRUVQUk9NIGFkZHJlc3MgMC4KKyBPdGhlcndpc2UsIGl0IHN0YXJ0cyBhdCB0aGUgYWRkcmVzcworIGZvbGxvd2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgYWNjZXNzLgorIFRoZVdsYW4gaGFyZHdhcmUgaGFyZHdhcmUgY2xlYXJzIHRoaXMgYml0IGF1dG9tYXRpY2FsbHkuCisKKyBEZWZhdWx0OiAweDAwMDAwMDAwCisqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQUNYX1JFR19FRV9TVEFSVCAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDgwQykKKworI2RlZmluZSBPQ1BfUE9SX0NUUiAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwOUI0KQorI2RlZmluZSBPQ1BfREFUQV9XUklURSAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwOUI4KQorI2RlZmluZSBPQ1BfREFUQV9SRUFEICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwOUJDKQorI2RlZmluZSBPQ1BfQ01EICAgICAgICAgICAgICAgICAgICAgICAgKFJFR0lTVEVSU19CQVNFICsgMHgwOUMwKQorCisjZGVmaW5lIFdMMTI3MV9IT1NUX1dSX0FDQ0VTUyAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA5RjgpCiAKICNkZWZpbmUgQ0hJUF9JRF9CICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTY3NCkKIAotI2RlZmluZSBDSElQX0lEXzEyNTFfUEcxMAkgICAgICAgICAgICgweDcwMTAxMDEpCi0jZGVmaW5lIENISVBfSURfMTI1MV9QRzExCSAgICAgICAgICAgKDB4NzAyMDEwMSkKLSNkZWZpbmUgQ0hJUF9JRF8xMjUxX1BHMTIJICAgICAgICAgICAoMHg3MDMwMTAxKQorI2RlZmluZSBDSElQX0lEXzEyNzFfUEcxMCAgICAgICAgICAgICAgKDB4NDAzMDEwMSkKKyNkZWZpbmUgQ0hJUF9JRF8xMjcxX1BHMjAgICAgICAgICAgICAgICgweDQwMzAxMTEpCiAKICNkZWZpbmUgRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NTQ1MCkKIApAQCAtMTY0LDE1MSArMzE3LDExIEBACiAjZGVmaW5lIFNQQVJFX0I3ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0MzgpCiAjZGVmaW5lIFNQQVJFX0I4ICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDU0M0MpCiAKLWVudW0gd2wxMnh4X2FjeF9pbnRfcmVnIHsKLQlBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLAotCUFDWF9SRUdfSU5URVJSVVBUX1RSSUdfSCwKKyNkZWZpbmUgUExMX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NjA0MCkKKyNkZWZpbmUgV1VfQ09VTlRFUl9QQVVTRSAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NjAwOCkKKyNkZWZpbmUgV0VMUF9BUk1fQ09NTUFORCAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4NjEwMCkKKyNkZWZpbmUgRFJQV19TQ1JBVENIX1NUQVJUICAgICAgICAgICAgIChEUlBXX0JBU0UgKyAweDAwMkMpCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIEhvc3QgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLSAzMmJpdCAoUlcpCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBTZXR0aW5nIGEgYml0IGluIHRoaXMgcmVnaXN0ZXIgbWFza3MgdGhlCi0gIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHRvIHRoZSBob3N0LgotICAwIC0gUlgwCQktIFJ4IGZpcnN0IGR1YmJsZSBidWZmZXIgRGF0YSBJbnRlcnJ1cHQKLSAgMSAtIFRYRAkJLSBUeCBEYXRhIEludGVycnVwdAotICAyIC0gVFhYRlIJCS0gVHggVHJhbnNmZXIgSW50ZXJydXB0Ci0gIDMgLSBSWDEJCS0gUnggc2Vjb25kIGR1YmJsZSBidWZmZXIgRGF0YSBJbnRlcnJ1cHQKLSAgNCAtIFJYWEZSCQktIFJ4IFRyYW5zZmVyIEludGVycnVwdAotICA1IC0gRVZFTlRfQQktIEV2ZW50IE1haWxib3ggaW50ZXJydXB0Ci0gIDYgLSBFVkVOVF9CCS0gRXZlbnQgTWFpbGJveCBpbnRlcnJ1cHQKLSAgNyAtIFdOT05IU1QJLSBXYWtlIE9uIEhvc3QgSW50ZXJydXB0Ci0gIDggLSBUUkFDRV9BCS0gRGVidWcgVHJhY2UgaW50ZXJydXB0Ci0gIDkgLSBUUkFDRV9CCS0gRGVidWcgVHJhY2UgaW50ZXJydXB0Ci0gMTAgLSBDRENNUAkJLSBDb21tYW5kIENvbXBsZXRlIEludGVycnVwdAotIDExIC0KLSAxMiAtCi0gMTMgLQotIDE0IC0gSUNPTVAJCS0gSW5pdGlhbGl6YXRpb24gQ29tcGxldGUgSW50ZXJydXB0Ci0gMTYgLSBTRyBTRQkJLSBTb2Z0IEdlbWluaSAtIFNlbnNlIGVuYWJsZSBpbnRlcnJ1cHQKLSAxNyAtIFNHIFNECQktIFNvZnQgR2VtaW5pIC0gU2Vuc2UgZGlzYWJsZSBpbnRlcnJ1cHQKLSAxOCAtCQkJLQotIDE5IC0JCQktCi0gMjAgLQkJCS0KLSAyMS0JCQktCi0gRGVmYXVsdDogMHgwMDAxCi0qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0JQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgSG9zdCBJbnRlcnJ1cHQgTWFzayBTZXQgMTZiaXQsIChXcml0ZSBvbmx5KQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBTZXR0aW5nIGEgYml0IGluIHRoaXMgcmVnaXN0ZXIgc2V0cwotIHRoZSBjb3JyZXNwb25kaW5nIGJpbiBpbiBBQ1hfSElOVF9NQVNLIHJlZ2lzdGVyCi0gd2l0aG91dCBlZmZlY3RpbmcgdGhlIG1hc2sKLSBzdGF0ZSBvZiBvdGhlciBiaXRzICgwID0gbm8gZWZmZWN0KS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCUFDWF9SRUdfSElOVF9NQVNLX1NFVCwKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgSG9zdCBJbnRlcnJ1cHQgTWFzayBDbGVhciAxNmJpdCwoV3JpdGUgb25seSkKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gU2V0dGluZyBhIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGNsZWFycwotIHRoZSBjb3JyZXNwb25kaW5nIGJpbiBpbiBBQ1hfSElOVF9NQVNLIHJlZ2lzdGVyCi0gd2l0aG91dCBlZmZlY3RpbmcgdGhlIG1hc2sKLSBzdGF0ZSBvZiBvdGhlciBiaXRzICgwID0gbm8gZWZmZWN0KS4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0JQUNYX1JFR19ISU5UX01BU0tfQ0xSLAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBIb3N0IEludGVycnVwdCBTdGF0dXMgTm9uZGVzdHJ1Y3RpdmUgUmVhZAotICAxNmJpdCwoUmVhZCBvbmx5KQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGUgaG9zdCBjYW4gcmVhZCB0aGlzIHJlZ2lzdGVyIHRvIGRldGVybWluZQotIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS4KLSBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgZG9lc24ndAotIGVmZmVjdCBpdHMgY29udGVudC4KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0JQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIsCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBDbGVhciBvbiBSZWFkICBSZWdpc3RlcgotICAxNmJpdCwoUmVhZCBvbmx5KQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGUgaG9zdCBjYW4gcmVhZCB0aGlzIHJlZ2lzdGVyIHRvIGRldGVybWluZQotIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS4KLSBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgY2xlYXJzIGl0LAotIHRodXMgbWFraW5nIGFsbCBpbnRlcnJ1cHRzIGluYWN0aXZlLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0JQUNYX1JFR19JTlRFUlJVUFRfQ0xFQVIsCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIEhvc3QgSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyCi0gIDE2Yml0LChXcml0ZSBvbmx5KQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBUaGUgaG9zdCBjYW4gc2V0IGluZGl2aWR1YWwgYml0cyBpbiB0aGlzCi0gcmVnaXN0ZXIgdG8gY2xlYXIgKGFja25vd2xlZGdlKSB0aGUgY29ycmVzcC4KLSBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgaW4gdGhlIEhJTlRfU1RTX0NMUiBhbmQKLSBISU5UX1NUU19ORCByZWdpc3RlcnMsIHRodXMgbWFraW5nIHRoZQotIGFzc290aWF0ZWQgaW50ZXJydXB0IGluYWN0aXZlLiAoMC1ubyBlZmZlY3QpCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQlBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgIEhvc3QgU29mdHdhcmUgUmVzZXQgLSAzMmJpdCBSVwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIFszMToxXSBSZXNlcnZlZAotICAgIDAgIFNPRlRfUkVTRVQgU29mdCBSZXNldCAgLSBXaGVuIHRoaXMgYml0IGlzIHNldCwKLSAgICBpdCBob2xkcyB0aGUgV2xhbiBoYXJkd2FyZSBpbiBhIHNvZnQgcmVzZXQgc3RhdGUuCi0gICAgVGhpcyByZXNldCBkaXNhYmxlcyBhbGwgTUFDIGFuZCBiYXNlYmFuZCBwcm9jZXNzb3IKLSAgICBjbG9ja3MgZXhjZXB0IHRoZSBDYXJkQnVzL1BDSSBpbnRlcmZhY2UgY2xvY2suCi0gICAgSXQgYWxzbyBpbml0aWFsaXplcyBhbGwgTUFDIHN0YXRlIG1hY2hpbmVzIGV4Y2VwdAotICAgIHRoZSBob3N0IGludGVyZmFjZS4gSXQgZG9lcyBub3QgcmVsb2FkIHRoZQotICAgIGNvbnRlbnRzIG9mIHRoZSBFRVBST00uIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZAotICAgIChub3Qgc2VsZi1jbGVhcmluZyksIHRoZSBXbGFuIGhhcmR3YXJlCi0gICAgZXhpdHMgdGhlIHNvZnR3YXJlIHJlc2V0IHN0YXRlLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCUFDWF9SRUdfU0xWX1NPRlRfUkVTRVQsCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSBFRVBST00gQnVyc3QgUmVhZCBTdGFydCAgLSAzMmJpdCBSVwotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIFszMToxXSBSZXNlcnZlZAotIDAgIEFDWF9FRV9TVEFSVCAtICBFRVBST00gQnVyc3QgUmVhZCBTdGFydCAwCi0gU2V0dGluZyB0aGlzIGJpdCBzdGFydHMgYSBidXJzdCByZWFkIGZyb20KLSB0aGUgZXh0ZXJuYWwgRUVQUk9NLgotIElmIHRoaXMgYml0IGlzIHNldCAoYWZ0ZXIgcmVzZXQpIGJlZm9yZSBhbiBFRVBST00gcmVhZC93cml0ZSwKLSB0aGUgYnVyc3QgcmVhZCBzdGFydHMgYXQgRUVQUk9NIGFkZHJlc3MgMC4KLSBPdGhlcndpc2UsIGl0IHN0YXJ0cyBhdCB0aGUgYWRkcmVzcwotIGZvbGxvd2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgcHJldmlvdXMgYWNjZXNzLgotIFRoZVdsYW4gaGFyZHdhcmUgaGFyZHdhcmUgY2xlYXJzIHRoaXMgYml0IGF1dG9tYXRpY2FsbHkuCi0KLSBEZWZhdWx0OiAweDAwMDAwMDAwCi0qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQlBQ1hfUkVHX0VFX1NUQVJULAotCi0vKiBFbWJlZGRlZCBBUk0gQ1BVIENvbnRyb2wgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIEhhbHQgZUNQVSAgIC0gMzJiaXQgUlcKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAwIEhBTFRfRUNQVSBIYWx0IEVtYmVkZGVkIENQVSAtIFRoaXMgYml0IGlzIHRoZQotIGNvbXBsaW1lbnQgb2YgYml0IDEgKE1EQVRBMikgaW4gdGhlIFNPUl9DRkcgcmVnaXN0ZXIuCi0gRHVyaW5nIGEgaGFyZHdhcmUgcmVzZXQsIHRoaXMgYml0IGhvbGRzCi0gdGhlIGludmVyc2Ugb2YgTURBVEEyLgotIFdoZW4gZG93bmxvYWRpbmcgZmlybXdhcmUgZnJvbSB0aGUgaG9zdCwKLSBzZXQgdGhpcyBiaXQgKHB1bGwgZG93biBNREFUQTIpLgotIFRoZSBob3N0IGNsZWFycyB0aGlzIGJpdCBhZnRlciBkb3dubG9hZGluZyB0aGUgZmlybXdhcmUgaW50bwotIHplcm8td2FpdC1zdGF0ZSBTU1JBTS4KLSBXaGVuIGxvYWRpbmcgZmlybXdhcmUgZnJvbSBGbGFzaCwgY2xlYXIgdGhpcyBiaXQgKHB1bGwgdXAgTURBVEEyKQotIHNvIHRoYXQgdGhlIGVDUFUgY2FuIHJ1biB0aGUgYm9vdGxvYWRlciBjb2RlIGluIEZsYXNoCi0gSEFMVF9FQ1BVIGVDUFUgU3RhdGUKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLQotIDEgaGFsdCBlQ1BVCi0gMCBlbmFibGUgZUNQVQotID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQlBQ1hfUkVHX0VDUFVfQ09OVFJPTCwKLQotCUFDWF9SRUdfVEFCTEVfTEVOCi19OwogCiAjZGVmaW5lIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQgICBCSVQoMSkKICNkZWZpbmUgQUNYX1JFR19FRVBST01fU1RBUlRfQklUIEJJVCgxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOGI2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKKyNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCisjaW5jbHVkZSAid2wxMjcxX3J4LmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorCitzdGF0aWMgdTggd2wxMjcxX3J4X2dldF9tZW1fYmxvY2soc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cywKKwkJCQkgIHUzMiBkcnZfcnhfY291bnRlcikKK3sKKwlyZXR1cm4gc3RhdHVzLT5yeF9wa3RfZGVzY3NbZHJ2X3J4X2NvdW50ZXJdICYgUlhfTUVNX0JMT0NLX01BU0s7Cit9CisKK3N0YXRpYyB1MzIgd2wxMjcxX3J4X2dldF9idWZfc2l6ZShzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzLAorCQkJCSB1MzIgZHJ2X3J4X2NvdW50ZXIpCit7CisJcmV0dXJuIChzdGF0dXMtPnJ4X3BrdF9kZXNjc1tkcnZfcnhfY291bnRlcl0gJiBSWF9CVUZfU0laRV9NQVNLKSA+PgorCQlSWF9CVUZfU0laRV9TSElGVF9ESVY7Cit9CisKKy8qIFRoZSB2YWx1ZXMgb2YgdGhpcyB0YWJsZSBtdXN0IG1hdGNoIHRoZSB3bDEyNzFfcmF0ZXNbXSBhcnJheSAqLworc3RhdGljIHU4IHdsMTI3MV9yeF9yYXRlX3RvX2lkeFtdID0geworCS8qIE1DUyByYXRlcyBhcmUgdXNlZCBvbmx5IHdpdGggMTFuICovCisJV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQsIC8qIFdMMTI3MV9SQVRFX01DUzcgKi8KKwlXTDEyNzFfUlhfUkFURV9VTlNVUFBPUlRFRCwgLyogV0wxMjcxX1JBVEVfTUNTNiAqLworCVdMMTI3MV9SWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBXTDEyNzFfUkFURV9NQ1M1ICovCisJV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQsIC8qIFdMMTI3MV9SQVRFX01DUzQgKi8KKwlXTDEyNzFfUlhfUkFURV9VTlNVUFBPUlRFRCwgLyogV0wxMjcxX1JBVEVfTUNTMyAqLworCVdMMTI3MV9SWF9SQVRFX1VOU1VQUE9SVEVELCAvKiBXTDEyNzFfUkFURV9NQ1MyICovCisJV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQsIC8qIFdMMTI3MV9SQVRFX01DUzEgKi8KKwlXTDEyNzFfUlhfUkFURV9VTlNVUFBPUlRFRCwgLyogV0wxMjcxX1JBVEVfTUNTMCAqLworCisJMTEsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzU0ICAgKi8KKwkxMCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0wxMjcxX1JBVEVfNDggICAqLworCTksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV8zNiAgICovCisJOCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzI0ICAgKi8KKworCS8qIFRJLXNwZWNpZmljIHJhdGUgKi8KKwlXTDEyNzFfUlhfUkFURV9VTlNVUFBPUlRFRCwgLyogV0wxMjcxX1JBVEVfMjIgICAqLworCisJNywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzE4ICAgKi8KKwk2LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0wxMjcxX1JBVEVfMTIgICAqLworCTMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV8xMSAgICovCisJNSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzkgICAgKi8KKwk0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0wxMjcxX1JBVEVfNiAgICAqLworCTIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXTDEyNzFfUkFURV81XzUgICovCisJMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdMMTI3MV9SQVRFXzIgICAgKi8KKwkwICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0wxMjcxX1JBVEVfMSAgICAqLworfTsKKworc3RhdGljIHZvaWQgd2wxMjcxX3J4X3N0YXR1cyhzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCSAgICAgc3RydWN0IHdsMTI3MV9yeF9kZXNjcmlwdG9yICpkZXNjLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAorCQkJICAgICB1OCBiZWFjb24pCit7CisJbWVtc2V0KHN0YXR1cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSk7CisKKwlpZiAoKGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfQkFORF9NQVNLKSA9PSBXTDEyNzFfUlhfREVTQ19CQU5EX0JHKQorCQlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCWVsc2UKKwkJd2wxMjcxX3dhcm5pbmcoInVuc3VwcG9ydGVkIGJhbmQgMHgleCIsCisJCQkgICAgICAgZGVzYy0+ZmxhZ3MgJiBXTDEyNzFfUlhfREVTQ19CQU5EX01BU0spOworCisJLyoKKwkgKiBGSVhNRTogQWRkIG1hY3RpbWUgaGFuZGxpbmcuICBGb3IgSUJTUyAoYWQtaG9jKSB3ZSBuZWVkIHRvIGdldCB0aGUKKwkgKiB0aW1lc3RhbXAgZnJvbSB0aGUgYmVhY29uIChhY3hfdHNmX2luZm8pLiAgSW4gQlNTIG1vZGUgKGluZnJhKSB3ZQorCSAqIG9ubHkgbmVlZCB0aGUgbWFjdGltZSBmb3IgbW9uaXRvciBtb2RlLiAgRm9yIG5vdyB0aGUgbWFjdGltZSBpcworCSAqIG5vdCB2YWxpZCwgc28gUlhfRkxBR19UU0ZUIHNob3VsZCBub3QgYmUgc2V0CisJICovCisJc3RhdHVzLT5zaWduYWwgPSBkZXNjLT5yc3NpOworCisJLyogRklYTUU6IFNob3VsZCB0aGlzIGJlIG9wdGltaXplZD8gKi8KKwlzdGF0dXMtPnF1YWwgPSAoZGVzYy0+cnNzaSAtIFdMMTI3MV9SWF9NSU5fUlNTSSkgKiAxMDAgLworCQkoV0wxMjcxX1JYX01BWF9SU1NJIC0gV0wxMjcxX1JYX01JTl9SU1NJKTsKKwlzdGF0dXMtPnF1YWwgPSBtaW4oc3RhdHVzLT5xdWFsLCAxMDApOworCXN0YXR1cy0+cXVhbCA9IG1heChzdGF0dXMtPnF1YWwsIDApOworCisJLyoKKwkgKiBGSVhNRTogSW4gd2wxMjUxLCB0aGUgU05SIHNob3VsZCBiZSBkaXZpZGVkIGJ5IHR3by4gIEluIHdsMTI3MSB3ZQorCSAqIG5lZWQgdG8gZGl2aWRlIGJ5IHR3byBmb3Igbm93LCBidXQgVEkgaGFzIGJlZW4gZGlzY3Vzc2luZyBhYm91dAorCSAqIGNoYW5naW5nIGl0LiAgVGhpcyBuZWVkcyB0byBiZSByZWNoZWNrZWQuCisJICovCisJc3RhdHVzLT5ub2lzZSA9IGRlc2MtPnJzc2kgLSAoZGVzYy0+c25yID4+IDEpOworCisJc3RhdHVzLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGRlc2MtPmNoYW5uZWwpOworCisJaWYgKGRlc2MtPmZsYWdzICYgV0wxMjcxX1JYX0RFU0NfRU5DUllQVF9NQVNLKSB7CisJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEIHwgUlhfRkxBR19NTUlDX1NUUklQUEVEOworCisJCWlmIChsaWtlbHkoIShkZXNjLT5mbGFncyAmIFdMMTI3MV9SWF9ERVNDX0RFQ1JZUFRfRkFJTCkpKQorCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCisJCWlmICh1bmxpa2VseShkZXNjLT5mbGFncyAmIFdMMTI3MV9SWF9ERVNDX01JQ19GQUlMKSkKKwkJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CisJfQorCisJc3RhdHVzLT5yYXRlX2lkeCA9IHdsMTI3MV9yeF9yYXRlX3RvX2lkeFtkZXNjLT5yYXRlXTsKKworCWlmIChzdGF0dXMtPnJhdGVfaWR4ID09IFdMMTI3MV9SWF9SQVRFX1VOU1VQUE9SVEVEKQorCQl3bDEyNzFfd2FybmluZygidW5zdXBwb3J0ZWQgcmF0ZSIpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfcnhfaGFuZGxlX2RhdGEoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBsZW5ndGgpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOworCXN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUxNiAqZmM7CisJdTggKmJ1ZjsKKwl1OCBiZWFjb24gPSAwOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgpOworCWlmICghc2tiKSB7CisJCXdsMTI3MV9lcnJvcigiQ291bGRuJ3QgYWxsb2NhdGUgUlggZnJhbWUiKTsKKwkJcmV0dXJuOworCX0KKworCWJ1ZiA9IHNrYl9wdXQoc2tiLCBsZW5ndGgpOworCXdsMTI3MV9zcGlfcmVnX3JlYWQod2wsIFdMMTI3MV9TTFZfTUVNX0RBVEEsIGJ1ZiwgbGVuZ3RoLCB0cnVlKTsKKworCS8qIHRoZSBkYXRhIHJlYWQgc3RhcnRzIHdpdGggdGhlIGRlc2NyaXB0b3IgKi8KKwlkZXNjID0gKHN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqKSBidWY7CisKKwkvKiBub3cgd2UgcHVsbCB0aGUgZGVzY3JpcHRvciBvdXQgb2YgdGhlIGJ1ZmZlciAqLworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpkZXNjKSk7CisKKwlmYyA9ICh1MTYgKilza2ItPmRhdGE7CisJaWYgKCgqZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKKwkJYmVhY29uID0gMTsKKworCXdsMTI3MV9yeF9zdGF0dXMod2wsIGRlc2MsICZyeF9zdGF0dXMsIGJlYWNvbik7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfUlgsICJyeCBza2IgMHglcDogJWQgQiAlcyIsIHNrYiwgc2tiLT5sZW4sCisJCSAgICAgYmVhY29uID8gImJlYWNvbiIgOiAiIik7CisKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwlpZWVlODAyMTFfcngod2wtPmh3LCBza2IpOworfQorCit2b2lkIHdsMTI3MV9yeChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTI3MV9md19zdGF0dXMgKnN0YXR1cykKK3sKKwlzdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwICp3bF9tZW1fbWFwID0gd2wtPnRhcmdldF9tZW1fbWFwOworCXUzMiBidWZfc2l6ZTsKKwl1MzIgZndfcnhfY291bnRlciAgPSBzdGF0dXMtPmZ3X3J4X2NvdW50ZXIgJiBOVU1fUlhfUEtUX0RFU0NfTU9EX01BU0s7CisJdTMyIGRydl9yeF9jb3VudGVyID0gd2wtPnJ4X2NvdW50ZXIgJiBOVU1fUlhfUEtUX0RFU0NfTU9EX01BU0s7CisJdTMyIG1lbV9ibG9jazsKKworCXdoaWxlIChkcnZfcnhfY291bnRlciAhPSBmd19yeF9jb3VudGVyKSB7CisJCW1lbV9ibG9jayA9IHdsMTI3MV9yeF9nZXRfbWVtX2Jsb2NrKHN0YXR1cywgZHJ2X3J4X2NvdW50ZXIpOworCQlidWZfc2l6ZSA9IHdsMTI3MV9yeF9nZXRfYnVmX3NpemUoc3RhdHVzLCBkcnZfcnhfY291bnRlcik7CisKKwkJaWYgKGJ1Zl9zaXplID09IDApIHsKKwkJCXdsMTI3MV93YXJuaW5nKCJyZWNlaXZlZCBlbXB0eSBkYXRhIik7CisJCQlicmVhazsKKwkJfQorCisJCXdsLT5yeF9tZW1fcG9vbF9hZGRyLmFkZHIgPQorCQkJKG1lbV9ibG9jayA8PCA4KSArIHdsX21lbV9tYXAtPnBhY2tldF9tZW1vcnlfcG9vbF9zdGFydDsKKwkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkcl9leHRyYSA9CisJCQl3bC0+cnhfbWVtX3Bvb2xfYWRkci5hZGRyICsgNDsKKworCQkvKiBDaG9vc2UgdGhlIGJsb2NrIHdlIHdhbnQgdG8gcmVhZCAqLworCQl3bDEyNzFfc3BpX3JlZ193cml0ZSh3bCwgV0wxMjcxX1NMVl9SRUdfREFUQSwKKwkJCQkgICAgICZ3bC0+cnhfbWVtX3Bvb2xfYWRkciwKKwkJCQkgICAgIHNpemVvZih3bC0+cnhfbWVtX3Bvb2xfYWRkciksIGZhbHNlKTsKKworCQl3bDEyNzFfcnhfaGFuZGxlX2RhdGEod2wsIGJ1Zl9zaXplKTsKKworCQl3bC0+cnhfY291bnRlcisrOworCQlkcnZfcnhfY291bnRlciA9IHdsLT5yeF9jb3VudGVyICYgTlVNX1JYX1BLVF9ERVNDX01PRF9NQVNLOworCX0KKworCXdsMTI3MV9yZWdfd3JpdGUzMih3bCwgUlhfRFJJVkVSX0NPVU5URVJfQUREUkVTUywgd2wtPnJ4X2NvdW50ZXIpOworCisJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHNvbWUgcHJvYmxlbXMgaW4gdGhlIGNoaXAgKi8KKwl3bDEyNzFfcmVnX3dyaXRlMzIod2wsIFJYX0RSSVZFUl9EVU1NWV9XUklURV9BRERSRVNTLCAweDEpOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFjYTYwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI3MV9SWF9IX18KKyNkZWZpbmUgX19XTDEyNzFfUlhfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2RlZmluZSBXTDEyNzFfUlhfTUFYX1JTU0kgLTMwCisjZGVmaW5lIFdMMTI3MV9SWF9NSU5fUlNTSSAtOTUKKworI2RlZmluZSBXTDEyNzFfUlhfQUxJR05fVE8gNAorI2RlZmluZSBXTDEyNzFfUlhfQUxJR04obGVuKSAoKChsZW4pICsgV0wxMjcxX1JYX0FMSUdOX1RPIC0gMSkgJiBcCisJCQkgICAgIH4oV0wxMjcxX1JYX0FMSUdOX1RPIC0gMSkpCisKKyNkZWZpbmUgU0hPUlRfUFJFQU1CTEVfQklUICAgQklUKDApCisjZGVmaW5lIE9GRE1fUkFURV9CSVQgICAgICAgIEJJVCg2KQorI2RlZmluZSBQQkNDX1JBVEVfQklUICAgICAgICBCSVQoNykKKworI2RlZmluZSBQTENQX0hFQURFUl9MRU5HVEggOAorI2RlZmluZSBSWF9ERVNDX1BBQ0tFVElEX1NISUZUIDExCisjZGVmaW5lIFJYX01BWF9QQUNLRVRfSUQgMworCisjZGVmaW5lIE5VTV9SWF9QS1RfREVTQ19NT0RfTUFTSyAgIDcKKyNkZWZpbmUgV0wxMjcxX1JYX1JBVEVfVU5TVVBQT1JURUQgMHhGRgorCisjZGVmaW5lIFJYX0RFU0NfVkFMSURfRkNTICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFJYX0RFU0NfTUFUQ0hfUlhBRERSMSAgICAgMHgwMDAyCisjZGVmaW5lIFJYX0RFU0NfTUNBU1QgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFJYX0RFU0NfU1RBSU5USU0gICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFJYX0RFU0NfVklSVFVBTF9CTSAgICAgICAgMHgwMDEwCisjZGVmaW5lIFJYX0RFU0NfQkNBU1QgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFJYX0RFU0NfTUFUQ0hfU1NJRCAgICAgICAgMHgwMDQwCisjZGVmaW5lIFJYX0RFU0NfTUFUQ0hfQlNTSUQgICAgICAgMHgwMDgwCisjZGVmaW5lIFJYX0RFU0NfRU5DUllQVElPTl9NQVNLICAgMHgwMzAwCisjZGVmaW5lIFJYX0RFU0NfTUVBU1VSTUVOVCAgICAgICAgMHgwNDAwCisjZGVmaW5lIFJYX0RFU0NfU0VRTlVNX01BU0sgICAgICAgMHgxODAwCisjZGVmaW5lCVJYX0RFU0NfTUlDX0ZBSUwJICAweDIwMDAKKyNkZWZpbmUJUlhfREVTQ19ERUNSWVBUX0ZBSUwJICAweDQwMDAKKworLyoKKyAqIFJYIERlc2NyaXB0b3IgZmxhZ3M6CisgKgorICogQml0cyAwLTEgLSBiYW5kCisgKiBCaXQgIDIgICAtIFNUQkMKKyAqIEJpdCAgMyAgIC0gQS1NUERVCisgKiBCaXQgIDQgICAtIEhUCisgKiBCaXRzIDUtNyAtIGVuY3J5cHRpb24KKyAqLworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19CQU5EX01BU0sgICAgMHgwMworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX01BU0sgMHhFMAorCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfQkcgICAgICAweDAwCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfSiAgICAgICAweDAxCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0JBTkRfQSAgICAgICAweDAyCisKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfU1RCQyAgICAgICAgIEJJVCgyKQorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19BX01QRFUgICAgICAgQklUKDMpCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0hUICAgICAgICAgICBCSVQoNCkKKworI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX1dFUCAgMHgyMAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX1RLSVAgMHg0MAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX0FFUyAgMHg2MAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19FTkNSWVBUX0dFTSAgMHg4MAorCisvKgorICogUlggRGVzY3JpcHRvciBzdGF0dXMKKyAqCisgKiBCaXRzIDAtMiAtIHN0YXR1cworICogQml0cyAzLTcgLSByZXNlcnZlZAorICovCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX1NUQVRVU19NQVNLICAgICAgMHgwNworCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX1NVQ0NFU1MgICAgICAgICAgMHgwMAorI2RlZmluZSBXTDEyNzFfUlhfREVTQ19ERUNSWVBUX0ZBSUwgICAgIDB4MDEKKyNkZWZpbmUgV0wxMjcxX1JYX0RFU0NfTUlDX0ZBSUwgICAgICAgICAweDAyCisjZGVmaW5lIFdMMTI3MV9SWF9ERVNDX0RSSVZFUl9SWF9RX0ZBSUwgMHgwMworCisjZGVmaW5lIFJYX01FTV9CTE9DS19NQVNLICAgICAweEZGCisjZGVmaW5lIFJYX0JVRl9TSVpFX01BU0sgICAgICAweEZGRjAwCisjZGVmaW5lIFJYX0JVRl9TSVpFX1NISUZUX0RJViA2CisKK3N0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciB7CisJdTE2IGxlbmd0aDsKKwl1OCAgc3RhdHVzOworCXU4ICBmbGFnczsKKwl1OCAgcmF0ZTsKKwl1OCAgY2hhbm5lbDsKKwlzOCAgcnNzaTsKKwl1OCAgc25yOworCXUzMiB0aW1lc3RhbXA7CisJdTggIHBhY2tldF9jbGFzczsKKwl1OCAgcHJvY2Vzc19pZDsKKwl1OCAgcGFkX2xlbjsKKwl1OCAgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwordm9pZCB3bDEyNzFfcngoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCB3bDEyNzFfZndfc3RhdHVzICpzdGF0dXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmMKc2ltaWxhcml0eSBpbmRleCA2MSUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jCmluZGV4IGFiZGYxNzEuLjRhMTI4ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTJ4eAorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjIsMzkgKzIyLDI2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKLSNpbmNsdWRlICJ3bDEyeHguaCIKKyNpbmNsdWRlICJ3bDEyNzEuaCIKICNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJwcy5oIgorI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKIAotc3RhdGljIGludCB3bDEyeHhfdHJhbnNsYXRlX3JlZ19hZGRyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkcikKK3N0YXRpYyBpbnQgd2wxMjcxX3RyYW5zbGF0ZV9yZWdfYWRkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCiB7Ci0JLyogSWYgdGhlIGFkZHJlc3MgaXMgbG93ZXIgdGhhbiBSRUdJU1RFUlNfQkFTRSwgaXQgbWVhbnMgdGhhdCB0aGlzIGlzCi0JICogYSBjaGlwLXNwZWNpZmljIHJlZ2lzdGVyIGFkZHJlc3MsIHNvIGxvb2sgaXQgdXAgaW4gdGhlIHJlZ2lzdGVycwotCSAqIHRhYmxlICovCi0JaWYgKGFkZHIgPCBSRUdJU1RFUlNfQkFTRSkgewotCQkvKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZ28gb3ZlciB0aGUgdGFibGUgKi8KLQkJaWYgKGFkZHIgPj0gQUNYX1JFR19UQUJMRV9MRU4pIHsKLQkJCXdsMTJ4eF9lcnJvcigiYWRkcmVzcyBvdXQgb2YgcmFuZ2UgKCVkKSIsIGFkZHIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYWRkciA9IHdsLT5jaGlwLmFjeF9yZWdfdGFibGVbYWRkcl07Ci0JfQotCiAJcmV0dXJuIGFkZHIgLSB3bC0+cGh5c2ljYWxfcmVnX2FkZHIgKyB3bC0+dmlydHVhbF9yZWdfYWRkcjsKIH0KIAotc3RhdGljIGludCB3bDEyeHhfdHJhbnNsYXRlX21lbV9hZGRyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkcikKK3N0YXRpYyBpbnQgd2wxMjcxX3RyYW5zbGF0ZV9tZW1fYWRkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCiB7CiAJcmV0dXJuIGFkZHIgLSB3bC0+cGh5c2ljYWxfbWVtX2FkZHIgKyB3bC0+dmlydHVhbF9tZW1fYWRkcjsKIH0KIAogCi12b2lkIHdsMTJ4eF9zcGlfcmVzZXQoc3RydWN0IHdsMTJ4eCAqd2wpCit2b2lkIHdsMTI3MV9zcGlfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJdTggKmNtZDsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHQ7CkBAIC02Miw3ICs0OSw3IEBACiAKIAljbWQgPSBremFsbG9jKFdTUElfSU5JVF9DTURfTEVOLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNtZCkgewotCQl3bDEyeHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBjbWQgZm9yIHNwaSByZXNldCIpOworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBjbWQgZm9yIHNwaSByZXNldCIpOwogCQlyZXR1cm47CiAJfQogCkBAIC03NywxMCArNjQsMTAgQEAKIAogCXNwaV9zeW5jKHdsLT5zcGksICZtKTsKIAotCXdsMTJ4eF9kdW1wKERFQlVHX1NQSSwgInNwaSByZXNldCAtPiAiLCBjbWQsIFdTUElfSU5JVF9DTURfTEVOKTsKKwl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGkgcmVzZXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CiB9CiAKLXZvaWQgd2wxMnh4X3NwaV9pbml0KHN0cnVjdCB3bDEyeHggKndsKQordm9pZCB3bDEyNzFfc3BpX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJdTggY3JjW1dTUElfSU5JVF9DTURfQ1JDX0xFTl0sICpjbWQ7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB0OwpAQCAtODgsNyArNzUsNyBAQAogCiAJY21kID0ga3phbGxvYyhXU1BJX0lOSVRfQ01EX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjbWQpIHsKLQkJd2wxMnh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgY21kIGZvciBzcGkgaW5pdCIpOworCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBjbWQgZm9yIHNwaSBpbml0Iik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzMSw3ICsxMTgsNyBAQAogCiAJc3BpX3N5bmMod2wtPnNwaSwgJm0pOwogCi0Jd2wxMnh4X2R1bXAoREVCVUdfU1BJLCAic3BpIGluaXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpIGluaXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CiB9CiAKIC8qIFNldCB0aGUgU1BJIHBhcnRpdGlvbnMgdG8gYWNjZXNzIHRoZSBjaGlwIGFkZHJlc3NlcwpAQCAtMTY3LDQ1ICsxNTQsNDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CiAgKgogICovCi12b2lkIHdsMTJ4eF9zZXRfcGFydGl0aW9uKHN0cnVjdCB3bDEyeHggKndsLAoraW50IHdsMTI3MV9zZXRfcGFydGl0aW9uKHN0cnVjdCB3bDEyNzEgKndsLAogCQkJICB1MzIgbWVtX3N0YXJ0LCB1MzIgbWVtX3NpemUsCiAJCQkgIHUzMiByZWdfc3RhcnQsIHUzMiByZWdfc2l6ZSkKIHsKLQl1OCB0eF9idWZbc2l6ZW9mKHUzMikgKyAyICogc2l6ZW9mKHN0cnVjdCB3bDEyeHhfcGFydGl0aW9uKV07Ci0Jc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKKwlzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbiAqcGFydGl0aW9uOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgdDsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwlzaXplX3QgbGVuLCBjbWRfbGVuOwogCXUzMiAqY21kOwotCXNpemVfdCBsZW47CiAJaW50IGFkZHI7CiAKKwljbWRfbGVuID0gc2l6ZW9mKHUzMikgKyAyICogc2l6ZW9mKHN0cnVjdCB3bDEyNzFfcGFydGl0aW9uKTsKKwljbWQgPSBremFsbG9jKGNtZF9sZW4sIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXNwaV9tZXNzYWdlX2luaXQoJm0pOwogCW1lbXNldCgmdCwgMCwgc2l6ZW9mKHQpKTsKLQltZW1zZXQodHhfYnVmLCAwLCBzaXplb2YodHhfYnVmKSk7CiAKLQljbWQgPSAodTMyICopIHR4X2J1ZjsKLQlwYXJ0aXRpb24gPSAoc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24gKikgKHR4X2J1ZiArIHNpemVvZih1MzIpKTsKKwlwYXJ0aXRpb24gPSAoc3RydWN0IHdsMTI3MV9wYXJ0aXRpb24gKikgKGNtZCArIDEpOwogCWFkZHIgPSBIV19BQ0NFU1NfUEFSVDBfU0laRV9BRERSOwotCWxlbiA9IDIgKiBzaXplb2Yoc3RydWN0IHdsMTJ4eF9wYXJ0aXRpb24pOworCWxlbiA9IDIgKiBzaXplb2Yoc3RydWN0IHdsMTI3MV9wYXJ0aXRpb24pOwogCiAJKmNtZCB8PSBXU1BJX0NNRF9XUklURTsKIAkqY21kIHw9IChsZW4gPDwgV1NQSV9DTURfQllURV9MRU5HVEhfT0ZGU0VUKSAmIFdTUElfQ01EX0JZVEVfTEVOR1RIOwogCSpjbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKIAotCXdsMTJ4eF9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCiAJCSAgICAgbWVtX3N0YXJ0LCBtZW1fc2l6ZSk7Ci0Jd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAorCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKIAkJICAgICByZWdfc3RhcnQsIHJlZ19zaXplKTsKIAogCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSB0d28gcGFydGl0aW9ucyB0b2dldGhlciBkb24ndCBleGNlZWQgdGhlCiAJICogYWRkcmVzcyByYW5nZSAqLwogCWlmICgobWVtX3NpemUgKyByZWdfc2l6ZSkgPiBIV19BQ0NFU1NfTUVNT1JZX01BWF9SQU5HRSkgewotCQl3bDEyeHhfZGVidWcoREVCVUdfU1BJLCAiVG90YWwgc2l6ZSBleGNlZWRzIG1heGltdW0gdmlydHVhbCIKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIlRvdGFsIHNpemUgZXhjZWVkcyBtYXhpbXVtIHZpcnR1YWwiCiAJCQkgICAgICIgYWRkcmVzcyByYW5nZS4gIFRydW5jYXRpbmcgcGFydGl0aW9uWzBdLiIpOwogCQltZW1fc2l6ZSA9IEhXX0FDQ0VTU19NRU1PUllfTUFYX1JBTkdFIC0gcmVnX3NpemU7Ci0JCXdsMTJ4eF9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAogCQkJICAgICBtZW1fc3RhcnQsIG1lbV9zaXplKTsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAorCQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCiAJCQkgICAgIHJlZ19zdGFydCwgcmVnX3NpemUpOwogCX0KIApAQCAtMjEzLDIzICsyMDIsMjMgQEAKIAkgICAgKChtZW1fc3RhcnQgKyBtZW1fc2l6ZSkgPiByZWdfc3RhcnQpKSB7CiAJCS8qIEd1YXJhbnRlZSB0aGF0IHRoZSBtZW1vcnkgcGFydGl0aW9uIGRvZXNuJ3Qgb3ZlcmxhcCB0aGUKIAkJICogcmVnaXN0ZXJzIHBhcnRpdGlvbiAqLwotCQl3bDEyeHhfZGVidWcoREVCVUdfU1BJLCAiRW5kIG9mIHBhcnRpdGlvblswXSBpcyAiCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJFbmQgb2YgcGFydGl0aW9uWzBdIGlzICIKIAkJCSAgICAgIm92ZXJsYXBwaW5nIHBhcnRpdGlvblsxXS4gIEFkanVzdGVkLiIpOwogCQltZW1fc2l6ZSA9IHJlZ19zdGFydCAtIG1lbV9zdGFydDsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAorCQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCiAJCQkgICAgIG1lbV9zdGFydCwgbWVtX3NpemUpOwotCQl3bDEyeHhfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKIAkJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7CiAJfSBlbHNlIGlmICgocmVnX3N0YXJ0IDwgbWVtX3N0YXJ0KSAmJgogCQkgICAoKHJlZ19zdGFydCArIHJlZ19zaXplKSA+IG1lbV9zdGFydCkpIHsKIAkJLyogR3VhcmFudGVlIHRoYXQgdGhlIHJlZ2lzdGVyIHBhcnRpdGlvbiBkb2Vzbid0IG92ZXJsYXAgdGhlCiAJCSAqIG1lbW9yeSBwYXJ0aXRpb24gKi8KLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgIkVuZCBvZiBwYXJ0aXRpb25bMV0gaXMiCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJFbmQgb2YgcGFydGl0aW9uWzFdIGlzIgogCQkJICAgICAiIG92ZXJsYXBwaW5nIHBhcnRpdGlvblswXS4gIEFkanVzdGVkLiIpOwogCQlyZWdfc2l6ZSA9IG1lbV9zdGFydCAtIHJlZ19zdGFydDsKLQkJd2wxMnh4X2RlYnVnKERFQlVHX1NQSSwgIm1lbV9zdGFydCAlMDhYIG1lbV9zaXplICUwOFgiLAorCQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCiAJCQkgICAgIG1lbV9zdGFydCwgbWVtX3NpemUpOwotCQl3bDEyeHhfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJyZWdfc3RhcnQgJTA4WCByZWdfc2l6ZSAlMDhYIiwKIAkJCSAgICAgcmVnX3N0YXJ0LCByZWdfc2l6ZSk7CiAJfQogCkBAIC0yNDQsMzYgKzIzMyw0NiBAQAogCXdsLT52aXJ0dWFsX21lbV9hZGRyID0gMDsKIAl3bC0+dmlydHVhbF9yZWdfYWRkciA9IG1lbV9zaXplOwogCi0JdC50eF9idWYgPSB0eF9idWY7Ci0JdC5sZW4gPSBzaXplb2YodHhfYnVmKTsKKwl0LnR4X2J1ZiA9IGNtZDsKKwl0LmxlbiA9IGNtZF9sZW47CiAJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZtKTsKIAogCXNwaV9zeW5jKHdsLT5zcGksICZtKTsKKworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCB3bDEyeHhfc3BpX3JlYWQoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCi0JCSAgICAgc2l6ZV90IGxlbikKK3ZvaWQgd2wxMjcxX3NwaV9yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkgICAgIHNpemVfdCBsZW4sIGJvb2wgZml4ZWQpCiB7CiAJc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOwogCXN0cnVjdCBzcGlfbWVzc2FnZSBtOwotCWNoYXIgYnVzeV9idWZbVE5FVFdJRl9SRUFEX09GRlNFVF9CWVRFU107Ci0JdTMyIGNtZDsKKwl1OCAqYnVzeV9idWY7CisJdTMyICpjbWQ7CiAKLQljbWQgPSAwOwotCWNtZCB8PSBXU1BJX0NNRF9SRUFEOwotCWNtZCB8PSAobGVuIDw8IFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCkgJiBXU1BJX0NNRF9CWVRFX0xFTkdUSDsKLQljbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKKwljbWQgPSAmd2wtPmJ1ZmZlcl9jbWQ7CisJYnVzeV9idWYgPSB3bC0+YnVmZmVyX2J1c3l3b3JkOworCisJKmNtZCA9IDA7CisJKmNtZCB8PSBXU1BJX0NNRF9SRUFEOworCSpjbWQgfD0gKGxlbiA8PCBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQpICYgV1NQSV9DTURfQllURV9MRU5HVEg7CisJKmNtZCB8PSBhZGRyICYgV1NQSV9DTURfQllURV9BRERSOworCisJaWYgKGZpeGVkKQorCQkqY21kIHw9IFdTUElfQ01EX0ZJWEVEOwogCiAJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CiAJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CiAKLQl0WzBdLnR4X2J1ZiA9ICZjbWQ7CisJdFswXS50eF9idWYgPSBjbWQ7CiAJdFswXS5sZW4gPSA0OwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CiAKIAkvKiBCdXN5IGFuZCBub24gYnVzeSB3b3JkcyByZWFkICovCiAJdFsxXS5yeF9idWYgPSBidXN5X2J1ZjsKLQl0WzFdLmxlbiA9IFRORVRXSUZfUkVBRF9PRkZTRVRfQllURVM7CisJdFsxXS5sZW4gPSBXTDEyNzFfQlVTWV9XT1JEX0xFTjsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOwogCiAJdFsyXS5yeF9idWYgPSBidWY7CkBAIC0yODQsMjcgKzI4MywzMiBAQAogCiAJLyogRklYTUU6IGNoZWNrIGJ1c3kgd29yZHMgKi8KIAotCXdsMTJ4eF9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGNtZCAtPiAiLCAmY21kLCBzaXplb2YoY21kKSk7Ci0Jd2wxMnh4X2R1bXAoREVCVUdfU1BJLCAic3BpX3JlYWQgYnVmIDwtICIsIGJ1ZiwgbGVuKTsKKwl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGlfcmVhZCBjbWQgLT4gIiwgY21kLCBzaXplb2YoKmNtZCkpOworCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaV9yZWFkIGJ1ZiA8LSAiLCBidWYsIGxlbik7CiB9CiAKLXZvaWQgd2wxMnh4X3NwaV93cml0ZShzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKLQkJICAgICAgc2l6ZV90IGxlbikKK3ZvaWQgd2wxMjcxX3NwaV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCkKIHsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMl07CiAJc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0JdTMyIGNtZDsKKwl1MzIgKmNtZDsKIAotCWNtZCA9IDA7Ci0JY21kIHw9IFdTUElfQ01EX1dSSVRFOwotCWNtZCB8PSAobGVuIDw8IFdTUElfQ01EX0JZVEVfTEVOR1RIX09GRlNFVCkgJiBXU1BJX0NNRF9CWVRFX0xFTkdUSDsKLQljbWQgfD0gYWRkciAmIFdTUElfQ01EX0JZVEVfQUREUjsKKwljbWQgPSAmd2wtPmJ1ZmZlcl9jbWQ7CisKKwkqY21kID0gMDsKKwkqY21kIHw9IFdTUElfQ01EX1dSSVRFOworCSpjbWQgfD0gKGxlbiA8PCBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQpICYgV1NQSV9DTURfQllURV9MRU5HVEg7CisJKmNtZCB8PSBhZGRyICYgV1NQSV9DTURfQllURV9BRERSOworCisJaWYgKGZpeGVkKQorCQkqY21kIHw9IFdTUElfQ01EX0ZJWEVEOwogCiAJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CiAJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CiAKLQl0WzBdLnR4X2J1ZiA9ICZjbWQ7Ci0JdFswXS5sZW4gPSBzaXplb2YoY21kKTsKKwl0WzBdLnR4X2J1ZiA9IGNtZDsKKwl0WzBdLmxlbiA9IHNpemVvZigqY21kKTsKIAlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOwogCiAJdFsxXS50eF9idWYgPSBidWY7CkBAIC0zMTMsNDYgKzMxNyw2NiBAQAogCiAJc3BpX3N5bmMod2wtPnNwaSwgJm0pOwogCi0Jd2wxMnh4X2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGNtZCAtPiAiLCAmY21kLCBzaXplb2YoY21kKSk7Ci0Jd2wxMnh4X2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGJ1ZiAtPiAiLCBidWYsIGxlbik7CisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGNtZCAtPiAiLCBjbWQsIHNpemVvZigqY21kKSk7CisJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpX3dyaXRlIGJ1ZiAtPiAiLCBidWYsIGxlbik7CiB9CiAKLXZvaWQgd2wxMnh4X3NwaV9tZW1fcmVhZChzdHJ1Y3Qgd2wxMnh4ICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKK3ZvaWQgd2wxMjcxX3NwaV9tZW1fcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKIAkJCSBzaXplX3QgbGVuKQogewogCWludCBwaHlzaWNhbDsKIAotCXBoeXNpY2FsID0gd2wxMnh4X3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcik7CisJcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX21lbV9hZGRyKHdsLCBhZGRyKTsKIAotCXdsMTJ4eF9zcGlfcmVhZCh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuKTsKKwl3bDEyNzFfc3BpX3JlYWQod2wsIHBoeXNpY2FsLCBidWYsIGxlbiwgZmFsc2UpOwogfQogCi12b2lkIHdsMTJ4eF9zcGlfbWVtX3dyaXRlKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAordm9pZCB3bDEyNzFfc3BpX21lbV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKIAkJCSAgc2l6ZV90IGxlbikKIHsKIAlpbnQgcGh5c2ljYWw7CiAKLQlwaHlzaWNhbCA9IHdsMTJ4eF90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpOworCXBoeXNpY2FsID0gd2wxMjcxX3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkcik7CiAKLQl3bDEyeHhfc3BpX3dyaXRlKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4pOworCXdsMTI3MV9zcGlfd3JpdGUod2wsIHBoeXNpY2FsLCBidWYsIGxlbiwgZmFsc2UpOwogfQogCi11MzIgd2wxMnh4X21lbV9yZWFkMzIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyKQordm9pZCB3bDEyNzFfc3BpX3JlZ19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkJIGJvb2wgZml4ZWQpCiB7Ci0JcmV0dXJuIHdsMTJ4eF9yZWFkMzIod2wsIHdsMTJ4eF90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpKTsKKwlpbnQgcGh5c2ljYWw7CisKKwlwaHlzaWNhbCA9IHdsMTI3MV90cmFuc2xhdGVfcmVnX2FkZHIod2wsIGFkZHIpOworCisJd2wxMjcxX3NwaV9yZWFkKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4sIGZpeGVkKTsKIH0KIAotdm9pZCB3bDEyeHhfbWVtX3dyaXRlMzIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyLCB1MzIgdmFsKQordm9pZCB3bDEyNzFfc3BpX3JlZ193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCSAgYm9vbCBmaXhlZCkKIHsKLQl3bDEyeHhfd3JpdGUzMih3bCwgd2wxMnh4X3RyYW5zbGF0ZV9tZW1fYWRkcih3bCwgYWRkciksIHZhbCk7CisJaW50IHBoeXNpY2FsOworCisJcGh5c2ljYWwgPSB3bDEyNzFfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKTsKKworCXdsMTI3MV9zcGlfd3JpdGUod2wsIHBoeXNpY2FsLCBidWYsIGxlbiwgZml4ZWQpOwogfQogCi11MzIgd2wxMnh4X3JlZ19yZWFkMzIoc3RydWN0IHdsMTJ4eCAqd2wsIGludCBhZGRyKQordTMyIHdsMTI3MV9tZW1fcmVhZDMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKIHsKLQlyZXR1cm4gd2wxMnh4X3JlYWQzMih3bCwgd2wxMnh4X3RyYW5zbGF0ZV9yZWdfYWRkcih3bCwgYWRkcikpOworCXJldHVybiB3bDEyNzFfcmVhZDMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX21lbV9hZGRyKHdsLCBhZGRyKSk7CiB9CiAKLXZvaWQgd2wxMnh4X3JlZ193cml0ZTMyKHN0cnVjdCB3bDEyeHggKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3ZvaWQgd2wxMjcxX21lbV93cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKIHsKLQl3bDEyeHhfd3JpdGUzMih3bCwgd2wxMnh4X3RyYW5zbGF0ZV9yZWdfYWRkcih3bCwgYWRkciksIHZhbCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIHdsMTI3MV90cmFuc2xhdGVfbWVtX2FkZHIod2wsIGFkZHIpLCB2YWwpOworfQorCit1MzIgd2wxMjcxX3JlZ19yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQoreworCXJldHVybiB3bDEyNzFfcmVhZDMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX3JlZ19hZGRyKHdsLCBhZGRyKSk7Cit9CisKK3ZvaWQgd2wxMjcxX3JlZ193cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bDEyNzFfd3JpdGUzMih3bCwgd2wxMjcxX3RyYW5zbGF0ZV9yZWdfYWRkcih3bCwgYWRkciksIHZhbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzk5Njg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI3MV9TUElfSF9fCisjZGVmaW5lIF9fV0wxMjcxX1NQSV9IX18KKworI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKKworI2RlZmluZSBIV19BQ0NFU1NfTUVNT1JZX01BWF9SQU5HRQkJMHgxRkZDMAorCisjZGVmaW5lIEhXX0FDQ0VTU19QQVJUMF9TSVpFX0FERFIgICAgICAgICAgIDB4MUZGQzAKKyNkZWZpbmUgSFdfQUNDRVNTX1BBUlQwX1NUQVJUX0FERFIgICAgICAgICAgMHgxRkZDNAorI2RlZmluZSBIV19BQ0NFU1NfUEFSVDFfU0laRV9BRERSICAgICAgICAgICAweDFGRkM4CisjZGVmaW5lIEhXX0FDQ0VTU19QQVJUMV9TVEFSVF9BRERSICAgICAgICAgIDB4MUZGQ0MKKworI2RlZmluZSBIV19BQ0NFU1NfUkVHSVNURVJfU0laRSAgICAgICAgICAgICA0CisKKyNkZWZpbmUgSFdfQUNDRVNTX1BSQU1fTUFYX1JBTkdFCQkweDNjMDAwCisKKyNkZWZpbmUgV1NQSV9DTURfUkVBRCAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBXU1BJX0NNRF9XUklURSAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFdTUElfQ01EX0ZJWEVEICAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgV1NQSV9DTURfQllURV9MRU5HVEggICAgICAgICAgMHgxRkZFMDAwMAorI2RlZmluZSBXU1BJX0NNRF9CWVRFX0xFTkdUSF9PRkZTRVQgICAxNworI2RlZmluZSBXU1BJX0NNRF9CWVRFX0FERFIgICAgICAgICAgICAweDAwMDFGRkZGCisKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9DUkNfTEVOICAgICAgIDUKKworI2RlZmluZSBXU1BJX0lOSVRfQ01EX1NUQVJUICAgICAgICAgMHgwMAorI2RlZmluZSBXU1BJX0lOSVRfQ01EX1RYICAgICAgICAgICAgMHg0MAorLyogdGhlIGV4dHJhIGJ5cGFzcyBiaXQgaXMgc2FtcGxlZCBieSB0aGUgVE5FVCBhcyAnMScgKi8KKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9CWVBBU1NfQklUICAgIDB4ODAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9GSVhFREJVU1lfTEVOIDB4MDcKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9FTl9GSVhFREJVU1kgIDB4ODAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9ESVNfRklYRURCVVNZIDB4MDAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9JT0QgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9JUCAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9DUyAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9XUyAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9XU1BJICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV1NQSV9JTklUX0NNRF9FTkQgICAgICAgICAgIDB4MDEKKworI2RlZmluZSBXU1BJX0lOSVRfQ01EX0xFTiAgICAgICAgICAgOAorCisjZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0ZJWEVEX0JVU1lfTEVOIFwKKwkJKChXTDEyNzFfQlVTWV9XT1JEX0xFTiAtIDQpIC8gc2l6ZW9mKHUzMikpCisjZGVmaW5lIEhXX0FDQ0VTU19XU1BJX0lOSVRfQ01EX01BU0sgIDAKKworCisvKiBSYXcgdGFyZ2V0IElPLCBhZGRyZXNzIGlzIG5vdCB0cmFuc2xhdGVkICovCit2b2lkIHdsMTI3MV9zcGlfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCSAgICAgIHNpemVfdCBsZW4sIGJvb2wgZml4ZWQpOwordm9pZCB3bDEyNzFfc3BpX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsCisJCSAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCk7CisKKy8qIE1lbW9yeSB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgdHJhbmxhdGVkIHRvIHBhcnRpdGlvbiAwICovCit2b2lkIHdsMTI3MV9zcGlfbWVtX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwordm9pZCB3bDEyNzFfc3BpX21lbV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Cit1MzIgd2wxMjcxX21lbV9yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKTsKK3ZvaWQgd2wxMjcxX21lbV93cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCk7CisKKy8qIFJlZ2lzdGVycyBJTyAqLwordm9pZCB3bDEyNzFfc3BpX3JlZ19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQkJIGJvb2wgZml4ZWQpOwordm9pZCB3bDEyNzFfc3BpX3JlZ193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCSAgYm9vbCBmaXhlZCk7Cit1MzIgd2wxMjcxX3JlZ19yZWFkMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKTsKK3ZvaWQgd2wxMjcxX3JlZ193cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCk7CisKKy8qIElOSVQgYW5kIFJFU0VUIHdvcmRzICovCit2b2lkIHdsMTI3MV9zcGlfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfc3BpX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9zZXRfcGFydGl0aW9uKHN0cnVjdCB3bDEyNzEgKndsLAorCQkJIHUzMiBwYXJ0X3N0YXJ0LCB1MzIgcGFydF9zaXplLAorCQkJIHUzMiByZWdfc3RhcnQsICB1MzIgcmVnX3NpemUpOworCitzdGF0aWMgaW5saW5lIHUzMiB3bDEyNzFfcmVhZDMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKK3sKKwl3bDEyNzFfc3BpX3JlYWQod2wsIGFkZHIsICZ3bC0+YnVmZmVyXzMyLAorCQkJc2l6ZW9mKHdsLT5idWZmZXJfMzIpLCBmYWxzZSk7CisKKwlyZXR1cm4gd2wtPmJ1ZmZlcl8zMjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV93cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bC0+YnVmZmVyXzMyID0gdmFsOworCXdsMTI3MV9zcGlfd3JpdGUod2wsIGFkZHIsICZ3bC0+YnVmZmVyXzMyLAorCQkJIHNpemVvZih3bC0+YnVmZmVyXzMyKSwgZmFsc2UpOworfQorCisjZW5kaWYgLyogX19XTDEyNzFfU1BJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjIxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKKyNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKKyNpbmNsdWRlICJ3bDEyNzFfdHguaCIKKworc3RhdGljIGludCB3bDEyNzFfdHhfaWQoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRldfVFhfQ01QTFRfQkxPQ0tfU0laRTsgaSsrKQorCQlpZiAod2wtPnR4X2ZyYW1lc1tpXSA9PSBOVUxMKSB7CisJCQl3bC0+dHhfZnJhbWVzW2ldID0gc2tiOworCQkJcmV0dXJuIGk7CisJCX0KKworCXJldHVybiAtRUJVU1k7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3R4X2FsbG9jYXRlKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZXh0cmEpCit7CisJc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqZGVzYzsKKwl1MzIgdG90YWxfbGVuID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHdsMTI3MV90eF9od19kZXNjcikgKyBleHRyYTsKKwl1MzIgdG90YWxfYmxvY2tzLCBleGNsdWRlZDsKKwlpbnQgaWQsIHJldCA9IC1FQlVTWTsKKworCS8qIGFsbG9jYXRlIGZyZWUgaWRlbnRpZmllciBmb3IgdGhlIHBhY2tldCAqLworCWlkID0gd2wxMjcxX3R4X2lkKHdsLCBza2IpOworCWlmIChpZCA8IDApCisJCXJldHVybiBpZDsKKworCS8qIGFwcHJveGltYXRlIHRoZSBudW1iZXIgb2YgYmxvY2tzIHJlcXVpcmVkIGZvciB0aGlzIHBhY2tldAorCSAgIGluIHRoZSBmaXJtd2FyZSAqLworCS8qIEZJWE1FOiB0cnkgdG8gZmlndXJlIG91dCB3aGF0IGlzIGRvbmUgaGVyZSBhbmQgbWFrZSBpdCBjbGVhbmVyICovCisJdG90YWxfYmxvY2tzID0gKHNrYi0+bGVuKSA+PiBUWF9IV19CTE9DS19TSElGVF9ESVY7CisJZXhjbHVkZWQgPSAodG90YWxfYmxvY2tzIDw8IDIpICsgKHNrYi0+bGVuICYgMHhmZikgKyAzNDsKKwl0b3RhbF9ibG9ja3MgKz0gKGV4Y2x1ZGVkID4gMjUyKSA/IDIgOiAxOworCXRvdGFsX2Jsb2NrcyArPSBUWF9IV19CTE9DS19TUEFSRTsKKworCWlmICh0b3RhbF9ibG9ja3MgPD0gd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUpIHsKKwkJZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICopc2tiX3B1c2goCisJCQlza2IsIHRvdGFsX2xlbiAtIHNrYi0+bGVuKTsKKworCQlkZXNjLT5leHRyYV9tZW1fYmxvY2tzID0gVFhfSFdfQkxPQ0tfU1BBUkU7CisJCWRlc2MtPnRvdGFsX21lbV9ibG9ja3MgPSB0b3RhbF9ibG9ja3M7CisJCWRlc2MtPmlkID0gaWQ7CisKKwkJd2wtPnR4X2Jsb2Nrc19hdmFpbGFibGUgLT0gdG90YWxfYmxvY2tzOworCisJCXJldCA9IDA7CisKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLAorCQkJICAgICAidHhfYWxsb2NhdGU6IHNpemU6ICVkLCBibG9ja3M6ICVkLCBpZDogJWQiLAorCQkJICAgICB0b3RhbF9sZW4sIHRvdGFsX2Jsb2NrcywgaWQpOworCX0gZWxzZQorCQl3bC0+dHhfZnJhbWVzW2lkXSA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV90eF9maWxsX2hkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIHUzMiBleHRyYSwgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjb250cm9sKQoreworCXN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKmRlc2M7CisJaW50IHBhZDsKKworCWRlc2MgPSAoc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqKSBza2ItPmRhdGE7CisKKwkvKiBjb25maWd1cmUgcGFja2V0IGxpZmUgdGltZSAqLworCWRlc2MtPnN0YXJ0X3RpbWUgPSBqaWZmaWVzX3RvX3VzZWNzKGppZmZpZXMpIC0gd2wtPnRpbWVfb2Zmc2V0OworCWRlc2MtPmxpZmVfdGltZSA9IFRYX0hXX01HTVRfUEtUX0xJRkVUSU1FX1RVOworCisJLyogY29uZmlndXJlIHRoZSB0eCBhdHRyaWJ1dGVzICovCisJZGVzYy0+dHhfYXR0ciA9IHdsLT5zZXNzaW9uX2NvdW50ZXIgPDwgVFhfSFdfQVRUUl9PRlNUX1NFU1NJT05fQ09VTlRFUjsKKwkvKiBGSVhNRTogZG8gd2Uga25vdyB0aGUgcGFja2V0IHByaW9yaXR5PyBjYW4gd2UgaWRlbnRpZnkgbWdtdAorCSAgIHBhY2tldHMsIGFuZCB1c2UgbWF4IHByaW8gZm9yIHRoZW0gYXQgbGVhc3Q/ICovCisJZGVzYy0+dGlkID0gMDsKKwlkZXNjLT5haWQgPSBUWF9IV19ERUZBVUxUX0FJRDsKKwlkZXNjLT5yZXNlcnZlZCA9IDA7CisKKwkvKiBhbGlnbiB0aGUgbGVuZ3RoIChhbmQgc3RvcmUgaW4gdGVybXMgb2Ygd29yZHMpICovCisJcGFkID0gV0wxMjcxX1RYX0FMSUdOKHNrYi0+bGVuKTsKKwlkZXNjLT5sZW5ndGggPSBwYWQgPj4gMjsKKworCS8qIGNhbGN1bGF0ZSBudW1iZXIgb2YgcGFkZGluZyBieXRlcyAqLworCXBhZCA9IHBhZCAtIHNrYi0+bGVuOworCWRlc2MtPnR4X2F0dHIgfD0gcGFkIDw8IFRYX0hXX0FUVFJfT0ZTVF9MQVNUX1dPUkRfUEFEOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHhfZmlsbF9oZHI6IHBhZDogJWQiLCBwYWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV90eF9zZW5kX3BhY2tldChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjb250cm9sKQoreworCisJc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqZGVzYzsKKwlpbnQgbGVuOworCisJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBnZXR0aW5nIG5vbi1hbGlnbmVkIHBhY2tldHMuCisJICAgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggRUFQT0wgcGFja2V0cyBmcm9tIHRoZSB1c2VyIHNwYWNlLgorCSAgIE91ciBETUEgcmVxdWlyZXMgcGFja2V0cyB0byBiZSBhbGlnbmVkIG9uIGEgNC1ieXRlIGJvdW5kYXJ5LgorCSovCisJaWYgKHVubGlrZWx5KChsb25nKXNrYi0+ZGF0YSAmIDB4MDMpKSB7CisJCWludCBvZmZzZXQgPSAoNCAtIChsb25nKXNrYi0+ZGF0YSkgJiAweDAzOworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJza2Igb2Zmc2V0ICVkIiwgb2Zmc2V0KTsKKworCQkvKiBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHNrYiBjYW4gYmUgdXNlZCAqLworCQlpZiAoIXNrYl9jbG9uZWQoc2tiKSAmJiAoc2tiX3RhaWxyb29tKHNrYikgPj0gb2Zmc2V0KSkgeworCQkJdW5zaWduZWQgY2hhciAqc3JjID0gc2tiLT5kYXRhOworCisJCQkvKiBhbGlnbiB0aGUgYnVmZmVyIG9uIGEgNC1ieXRlIGJvdW5kYXJ5ICovCisJCQlza2JfcmVzZXJ2ZShza2IsIG9mZnNldCk7CisJCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc3JjLCBza2ItPmxlbik7CisJCX0gZWxzZSB7CisJCQl3bDEyNzFfaW5mbygiTm8gaGFuZGxlciwgZml4bWUhIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCWxlbiA9IFdMMTI3MV9UWF9BTElHTihza2ItPmxlbik7CisKKwkvKiBwZXJmb3JtIGEgZml4ZWQgYWRkcmVzcyBibG9jayB3cml0ZSB3aXRoIHRoZSBwYWNrZXQgKi8KKwl3bDEyNzFfc3BpX3JlZ193cml0ZSh3bCwgV0wxMjcxX1NMVl9NRU1fREFUQSwgc2tiLT5kYXRhLCBsZW4sIHRydWUpOworCisJLyogd3JpdGUgcGFja2V0IG5ldyBjb3VudGVyIGludG8gdGhlIHdyaXRlIGFjY2VzcyByZWdpc3RlciAqLworCXdsLT50eF9wYWNrZXRzX2NvdW50Kys7CisJd2wxMjcxX3JlZ193cml0ZTMyKHdsLCBXTDEyNzFfSE9TVF9XUl9BQ0NFU1MsIHdsLT50eF9wYWNrZXRzX2NvdW50KTsKKworCWRlc2MgPSAoc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqKSBza2ItPmRhdGE7CisJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHggaWQgJXUgc2tiIDB4JXAgcGF5bG9hZCAldSAoJXUgd29yZHMpIiwKKwkJICAgICBkZXNjLT5pZCwgc2tiLCBsZW4sIGRlc2MtPmxlbmd0aCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB3bC0+bXV0ZXggKi8KK3N0YXRpYyBpbnQgd2wxMjcxX3R4X2ZyYW1lKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwl1MzIgZXh0cmEgPSAwOworCWludCByZXQgPSAwOworCXU4IGlkeDsKKworCWlmICghc2tiKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkgJiYKKwkgICAgaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfVEtJUCkKKwkJZXh0cmEgPSBXTDEyNzFfVEtJUF9JVl9TUEFDRTsKKworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQlpZHggPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeDsKKworCQkvKiBGSVhNRTogZG8gd2UgaGF2ZSB0byBkbyB0aGlzIGlmIHdlJ3JlIG5vdCB1c2luZyBXRVA/ICovCisJCWlmICh1bmxpa2VseSh3bC0+ZGVmYXVsdF9rZXkgIT0gaWR4KSkgeworCQkJcmV0ID0gd2wxMjcxX2NtZF9zZXRfZGVmYXVsdF93ZXBfa2V5KHdsLCBpZHgpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHdsMTI3MV90eF9hbGxvY2F0ZSh3bCwgc2tiLCBleHRyYSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSB3bDEyNzFfdHhfZmlsbF9oZHIod2wsIHNrYiwgZXh0cmEsIGluZm8pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gd2wxMjcxX3R4X3NlbmRfcGFja2V0KHdsLCBza2IsIGluZm8pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3bDEyNzFfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdsMTI3MSwgdHhfd29yayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlib29sIHdva2VuX3VwID0gZmFsc2U7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQorCQlnb3RvIG91dDsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJndsLT50eF9xdWV1ZSkpKSB7CisJCWlmICghd29rZW5fdXApIHsKKwkJCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsLCBmYWxzZSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJCXdva2VuX3VwID0gdHJ1ZTsKKwkJfQorCisJCXJldCA9IHdsMTI3MV90eF9mcmFtZSh3bCwgc2tiKTsKKwkJaWYgKHJldCA9PSAtRUJVU1kpIHsKKwkJCS8qIGZpcm13YXJlIGJ1ZmZlciBpcyBmdWxsLCBzdG9wIHF1ZXVlcyAqLworCQkJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHhfd29yazogZncgYnVmZmVyIGZ1bGwsICIKKwkJCQkgICAgICJzdG9wIHF1ZXVlcyIpOworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHdsLT5odyk7CisJCQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IHRydWU7CisJCQlza2JfcXVldWVfaGVhZCgmd2wtPnR4X3F1ZXVlLCBza2IpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAocmV0IDwgMCkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAod2wtPnR4X3F1ZXVlX3N0b3BwZWQpIHsKKwkJCS8qIGZpcm13YXJlIGJ1ZmZlciBoYXMgc3BhY2UsIHJlc3RhcnQgcXVldWVzICovCisJCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsCisJCQkJICAgICAiY29tcGxldGVfcGFja2V0OiB3YWtpbmcgcXVldWVzIik7CisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMod2wtPmh3KTsKKwkJCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CisJCX0KKwl9CisKK291dDoKKwlpZiAod29rZW5fdXApCisJCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB3bDEyNzFfdHhfY29tcGxldGVfcGFja2V0KHN0cnVjdCB3bDEyNzEgKndsLAorCQkJCSAgICAgIHN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2Rlc2NyICpyZXN1bHQpCit7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgaGVhZGVyX2xlbjsKKwlpbnQgaWQgPSByZXN1bHQtPmlkOworCisJLyogY2hlY2sgZm9yIGlkIGxlZ2FsaXR5ICovCisJaWYgKGlkID49IFRYX0hXX1JFU1VMVF9RVUVVRV9MRU4gfHwgd2wtPnR4X2ZyYW1lc1tpZF0gPT0gTlVMTCkgeworCQl3bDEyNzFfd2FybmluZygiVFggcmVzdWx0IGlsbGVnYWwgaWQ6ICVkIiwgaWQpOworCQlyZXR1cm47CisJfQorCisJc2tiID0gd2wtPnR4X2ZyYW1lc1tpZF07CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCS8qIHVwZGF0ZSBwYWNrZXQgc3RhdHVzICovCisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpIHsKKwkJaWYgKHJlc3VsdC0+c3RhdHVzID09IFRYX1NVQ0NFU1MpCisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCWlmIChyZXN1bHQtPnN0YXR1cyAmIFRYX1JFVFJZX0VYQ0VFREVEKSB7CisJCQkvKiBGSVhNRSAqLworCQkJLyogaW5mby0+c3RhdHVzLmV4Y2Vzc2l2ZV9yZXRyaWVzID0gMTsgKi8KKwkJCXdsLT5zdGF0cy5leGNlc3NpdmVfcmV0cmllcysrOworCQl9CisJfQorCisJLyogRklYTUUgKi8KKwkvKiBpbmZvLT5zdGF0dXMucmV0cnlfY291bnQgPSByZXN1bHQtPmFja19mYWlsdXJlczsgKi8KKwl3bC0+c3RhdHMucmV0cnlfY291bnQgKz0gcmVzdWx0LT5hY2tfZmFpbHVyZXM7CisKKwkvKiBnZXQgaGVhZGVyIGxlbiAqLworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICBpbmZvLT5jb250cm9sLmh3X2tleS0+YWxnID09IEFMR19US0lQKQorCQloZWFkZXJfbGVuID0gV0wxMjcxX1RLSVBfSVZfU1BBQ0UgKworCQkJc2l6ZW9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IpOworCWVsc2UKKwkJaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4IHN0YXR1cyBpZCAldSBza2IgMHglcCBmYWlsdXJlcyAldSByYXRlIDB4JXgiCisJCSAgICAgIiBzdGF0dXMgMHgleCIsCisJCSAgICAgcmVzdWx0LT5pZCwgc2tiLCByZXN1bHQtPmFja19mYWlsdXJlcywKKwkJICAgICByZXN1bHQtPnJhdGVfY2xhc3NfaW5kZXgsIHJlc3VsdC0+c3RhdHVzKTsKKworCS8qIHJlbW92ZSBwcml2YXRlIGhlYWRlciBmcm9tIHBhY2tldCAqLworCXNrYl9wdWxsKHNrYiwgaGVhZGVyX2xlbik7CisKKwkvKiByZXR1cm4gdGhlIHBhY2tldCB0byB0aGUgc3RhY2sgKi8KKwlpZWVlODAyMTFfdHhfc3RhdHVzKHdsLT5odywgc2tiKTsKKwl3bC0+dHhfZnJhbWVzW3Jlc3VsdC0+aWRdID0gTlVMTDsKK30KKworLyogQ2FsbGVkIHVwb24gcmVjZXB0aW9uIG9mIGEgVFggY29tcGxldGUgaW50ZXJydXB0ICovCit2b2lkIHdsMTI3MV90eF9jb21wbGV0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGNvdW50KQoreworCXN0cnVjdCB3bDEyNzFfYWN4X21lbV9tYXAgKm1lbW1hcCA9CisJCShzdHJ1Y3Qgd2wxMjcxX2FjeF9tZW1fbWFwICopd2wtPnRhcmdldF9tZW1fbWFwOworCXUzMiBpOworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHhfY29tcGxldGUgcmVjZWl2ZWQsIHBhY2tldHM6ICVkIiwgY291bnQpOworCisJLyogcmVhZCB0aGUgdHggcmVzdWx0cyBmcm9tIHRoZSBjaGlwc2V0ICovCisJd2wxMjcxX3NwaV9tZW1fcmVhZCh3bCwgbWVtbWFwLT50eF9yZXN1bHQsCisJCQkgICAgd2wtPnR4X3Jlc19pZiwgc2l6ZW9mKCp3bC0+dHhfcmVzX2lmKSk7CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgcmVzdWx0IGJ1ZmZlciBpcyBub3QgZ2V0dGluZyBvdmVycnVuICovCisJaWYgKGNvdW50ID4gVFhfSFdfUkVTVUxUX1FVRVVFX0xFTikgeworCQl3bDEyNzFfd2FybmluZygiVFggcmVzdWx0IG92ZXJmbG93IGZyb20gY2hpcHNldDogJWQiLCBjb3VudCk7CisJCWNvdW50ID0gVFhfSFdfUkVTVUxUX1FVRVVFX0xFTjsKKwl9CisKKwkvKiBwcm9jZXNzIHRoZSByZXN1bHRzICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IHdsMTI3MV90eF9od19yZXNfZGVzY3IgKnJlc3VsdDsKKwkJdTggb2Zmc2V0ID0gd2wtPnR4X3Jlc3VsdHNfY291bnQgJiBUWF9IV19SRVNVTFRfUVVFVUVfTEVOX01BU0s7CisKKwkJLyogcHJvY2VzcyB0aGUgcGFja2V0ICovCisJCXJlc3VsdCA9ICAmKHdsLT50eF9yZXNfaWYtPnR4X3Jlc3VsdHNfcXVldWVbb2Zmc2V0XSk7CisJCXdsMTI3MV90eF9jb21wbGV0ZV9wYWNrZXQod2wsIHJlc3VsdCk7CisKKwkJd2wtPnR4X3Jlc3VsdHNfY291bnQrKzsKKwl9CisKKwkvKiB3cml0ZSBob3N0IGNvdW50ZXIgdG8gY2hpcHNldCAodG8gYWNrKSAqLworCXdsMTI3MV9tZW1fd3JpdGUzMih3bCwgbWVtbWFwLT50eF9yZXN1bHQgKworCQkJICAgb2Zmc2V0b2Yoc3RydWN0IHdsMTI3MV90eF9od19yZXNfaWYsCisJCQkJICAgIHR4X3Jlc3VsdF9ob3N0X2NvdW50ZXIpLAorCQkJICAgd2wtPnR4X3Jlc19pZi0+dHhfcmVzdWx0X2Z3X2NvdW50ZXIpOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwordm9pZCB3bDEyNzFfdHhfZmx1c2goc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisKKwkvKiBUWCBmYWlsdXJlICovCisvKiAJY29udHJvbC0+ZmxhZ3MgPSAwOyBGSVhNRSAqLworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2wtPnR4X3F1ZXVlKSkpIHsKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCQl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJmbHVzaGluZyBza2IgMHglcCIsIHNrYik7CisKKwkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMpKQorCQkJCWNvbnRpbnVlOworCisJCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBGV19UWF9DTVBMVF9CTE9DS19TSVpFOyBpKyspCisJCWlmICh3bC0+dHhfZnJhbWVzW2ldICE9IE5VTEwpIHsKKwkJCXNrYiA9IHdsLT50eF9mcmFtZXNbaV07CisJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUykpCisJCQkJY29udGludWU7CisKKwkJCWllZWU4MDIxMV90eF9zdGF0dXMod2wtPmh3LCBza2IpOworCQkJd2wtPnR4X2ZyYW1lc1tpXSA9IE5VTEw7CisJCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTYxNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI3MV9UWF9IX18KKyNkZWZpbmUgX19XTDEyNzFfVFhfSF9fCisKKyNkZWZpbmUgVFhfSFdfQkxPQ0tfU1BBUkUgICAgICAgICAgICAgICAgMgorI2RlZmluZSBUWF9IV19CTE9DS19TSElGVF9ESVYgICAgICAgICAgICA4CisKKyNkZWZpbmUgVFhfSFdfTUdNVF9QS1RfTElGRVRJTUVfVFUgICAgICAgMjAwMAorLyogVGhlIGNoaXBzZXQgcmVmZXJlbmNlIGRyaXZlciBzdGF0ZXMsIHRoYXQgdGhlICJhaWQiIHZhbHVlIDEKKyAqIGlzIGZvciBpbmZyYS1CU1MsIGJ1dCBpcyBzdGlsbCBhbHdheXMgdXNlZCAqLworI2RlZmluZSBUWF9IV19ERUZBVUxUX0FJRCAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgVFhfSFdfQVRUUl9TQVZFX1JFVFJJRVMgICAgICAgICAgQklUKDApCisjZGVmaW5lIFRYX0hXX0FUVFJfSEVBREVSX1BBRCAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBUWF9IV19BVFRSX1NFU1NJT05fQ09VTlRFUiAgICAgICAoQklUKDIpIHwgQklUKDMpIHwgQklUKDQpKQorI2RlZmluZSBUWF9IV19BVFRSX1JBVEVfUE9MSUNZICAgICAgICAgICAoQklUKDUpIHwgQklUKDYpIHwgQklUKDcpIHwgXAorCQkJCQkgIEJJVCg4KSB8IEJJVCg5KSkKKyNkZWZpbmUgVFhfSFdfQVRUUl9MQVNUX1dPUkRfUEFEICAgICAgICAgKEJJVCgxMCkgfCBCSVQoMTEpKQorI2RlZmluZSBUWF9IV19BVFRSX1RYX0NNUExUX1JFUSAgICAgICAgICBCSVQoMTIpCisKKyNkZWZpbmUgVFhfSFdfQVRUUl9PRlNUX1NBVkVfUkVUUklFUyAgICAgMAorI2RlZmluZSBUWF9IV19BVFRSX09GU1RfSEVBREVSX1BBRCAgICAgICAxCisjZGVmaW5lIFRYX0hXX0FUVFJfT0ZTVF9TRVNTSU9OX0NPVU5URVIgIDIKKyNkZWZpbmUgVFhfSFdfQVRUUl9PRlNUX1JBVEVfUE9MSUNZICAgICAgNQorI2RlZmluZSBUWF9IV19BVFRSX09GU1RfTEFTVF9XT1JEX1BBRCAgICAxMAorI2RlZmluZSBUWF9IV19BVFRSX09GU1RfVFhfQ01QTFRfUkVRICAgICAxMgorCisjZGVmaW5lIFRYX0hXX1JFU1VMVF9RVUVVRV9MRU4gICAgICAgICAgIDE2CisjZGVmaW5lIFRYX0hXX1JFU1VMVF9RVUVVRV9MRU5fTUFTSyAgICAgIDB4ZgorCisjZGVmaW5lIFdMMTI3MV9UWF9BTElHTl9UTyA0CisjZGVmaW5lIFdMMTI3MV9UWF9BTElHTihsZW4pICgoKGxlbikgKyBXTDEyNzFfVFhfQUxJR05fVE8gLSAxKSAmIFwKKwkJCSAgICAgfihXTDEyNzFfVFhfQUxJR05fVE8gLSAxKSkKKyNkZWZpbmUgV0wxMjcxX1RLSVBfSVZfU1BBQ0UgNAorCitzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyIHsKKwkvKiBMZW5ndGggb2YgcGFja2V0IGluIHdvcmRzLCBpbmNsdWRpbmcgZGVzY3JpcHRvcitoZWFkZXIrZGF0YSAqLworCXUxNiBsZW5ndGg7CisJLyogTnVtYmVyIG9mIGV4dHJhIG1lbW9yeSBibG9ja3MgdG8gYWxsb2NhdGUgZm9yIHRoaXMgcGFja2V0IGluCisJICAgYWRkaXRpb24gdG8gdGhlIG51bWJlciBvZiBibG9ja3MgZGVyaXZlZCBmcm9tIHRoZSBwYWNrZXQgbGVuZ3RoICovCisJdTggZXh0cmFfbWVtX2Jsb2NrczsKKwkvKiBUb3RhbCBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGhvc3QgZm9yIHRoaXMgcGFja2V0LgorCSAgIE11c3QgYmUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBhY3R1YWwgYmxvY2tzIG51bWJlciBhbGxvY2F0ZWQgYnkKKwkgICBIVyEhICovCisJdTggdG90YWxfbWVtX2Jsb2NrczsKKwkvKiBEZXZpY2UgdGltZSAoaW4gdXMpIHdoZW4gdGhlIHBhY2tldCBhcnJpdmVkIHRvIHRoZSBkcml2ZXIgKi8KKwl1MzIgc3RhcnRfdGltZTsKKwkvKiBNYXggZGVsYXkgaW4gVFVzIHVudGlsIHRyYW5zbWlzc2lvbi4gVGhlIGxhc3QgZGV2aWNlIHRpbWUgdGhlCisJICAgcGFja2V0IGNhbiBiZSB0cmFuc21pdHRlZCBpczogc3RhcnRUaW1lKygxMDI0KkxpZmVUaW1lKSAqLworCXUxNiBsaWZlX3RpbWU7CisJLyogQml0d2lzZSBmaWVsZHMgLSBzZWUgVFhfQVRUUi4uLiBkZWZpbml0aW9ucyBhYm92ZS4gKi8KKwl1MTYgdHhfYXR0cjsKKwkvKiBQYWNrZXQgaWRlbnRpZmllciB1c2VkIGFsc28gaW4gdGhlIFR4LVJlc3VsdC4gKi8KKwl1OCBpZDsKKwkvKiBUaGUgcGFja2V0IFRJRCB2YWx1ZSAoYXMgVXNlci1Qcmlvcml0eSkgKi8KKwl1OCB0aWQ7CisJLyogSWRlbnRpZmllciBvZiB0aGUgcmVtb3RlIFNUQSBpbiBJQlNTLCAxIGluIGluZnJhLUJTUyAqLworCXU4IGFpZDsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHdsMTI3MV90eF9od19yZXNfc3RhdHVzIHsKKwlUWF9TVUNDRVNTICAgICAgICAgID0gMCwKKwlUWF9IV19FUlJPUiAgICAgICAgID0gMSwKKwlUWF9ESVNBQkxFRCAgICAgICAgID0gMiwKKwlUWF9SRVRSWV9FWENFRURFRCAgID0gMywKKwlUWF9USU1FT1VUICAgICAgICAgID0gNCwKKwlUWF9LRVlfTk9UX0ZPVU5EICAgID0gNSwKKwlUWF9QRUVSX05PVF9GT1VORCAgID0gNiwKKwlUWF9TRVNTSU9OX01JU01BVENIID0gNworfTsKKworc3RydWN0IHdsMTI3MV90eF9od19yZXNfZGVzY3IgeworCS8qIFBhY2tldCBJZGVudGlmaWVyIC0gc2FtZSB2YWx1ZSB1c2VkIGluIHRoZSBUeCBkZXNjcmlwdG9yLiovCisJdTggaWQ7CisJLyogVGhlIHN0YXR1cyBvZiB0aGUgdHJhbnNtaXNzaW9uLCBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3Igb25lIG9mCisJICAgc2V2ZXJhbCBwb3NzaWJsZSByZWFzb25zIGZvciBmYWlsdXJlLiAqLworCXU4IHN0YXR1czsKKwkvKiBUb3RhbCBhaXIgYWNjZXNzIGR1cmF0aW9uIGluY2x1ZGluZyBhbGwgcmV0cnlzIGFuZCBvdmVyaGVhZHMuKi8KKwl1MTYgbWVkaXVtX3VzYWdlOworCS8qIFRoZSB0aW1lIHBhc3NlZCBmcm9tIGhvc3QgeGZlciB0byBUeC1jb21wbGV0ZS4qLworCXUzMiBmd19oYW5kbGluZ190aW1lOworCS8qIFRvdGFsIG1lZGlhIGRlbGF5CisJICAgKGZyb20gMXN0IEVEQ0EgQUlGUyBjb3VudGVyIHVudGlsIFRYIENvbXBsZXRlKS4gKi8KKwl1MzIgbWVkaXVtX2RlbGF5OworCS8qIExTLWJ5dGUgb2YgbGFzdCBUS0lQIHNlcS1udW0gKHNhdmVkIHBlciBBQyBmb3IgcmVjb3ZlcnkpLiAqLworCXU4IGxzYl9zZWN1cml0eV9zZXF1ZW5jZV9udW1iZXI7CisJLyogUmV0cnkgY291bnQgLSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyB3aXRob3V0IHN1Y2Nlc3NmdWwgQUNLLiovCisJdTggYWNrX2ZhaWx1cmVzOworCS8qIFRoZSByYXRlIHRoYXQgc3VjY2VlZGVkIGdldHRpbmcgQUNLCisJICAgKFZhbGlkIG9ubHkgaWYgc3RhdHVzPVNVQ0NFU1MpLiAqLworCXU4IHJhdGVfY2xhc3NfaW5kZXg7CisJLyogZm9yIDQtYnl0ZSBhbGlnbm1lbnQuICovCisJdTggc3BhcmU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHdsMTI3MV90eF9od19yZXNfaWYgeworCXUzMiB0eF9yZXN1bHRfZndfY291bnRlcjsKKwl1MzIgdHhfcmVzdWx0X2hvc3RfY291bnRlcjsKKwlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19kZXNjciB0eF9yZXN1bHRzX3F1ZXVlW1RYX0hXX1JFU1VMVF9RVUVVRV9MRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3ZvaWQgd2wxMjcxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgd2wxMjcxX3R4X2NvbXBsZXRlKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgY291bnQpOwordm9pZCB3bDEyNzFfdHhfZmx1c2goc3RydWN0IHdsMTI3MSAqd2wpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggZTNlOTZiYi4uNGYxZTBjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTEzMzMsNyArMTMzMyw4IEBACiAgKgkgICAgMSAtIENvdWxkIG5vdCB0cmFuc21pdCAoZGV2X3F1ZXVlX3htaXQgd2lsbCBxdWV1ZSBpdCkKICAqCQlhbmQgdHJ5IHRvIHNlbnQgaXQgbGF0ZXIKICAqLwotc3RhdGljIGludCB3bDM1MDFfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3Qgd2wzNTAxX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgZW5hYmxlZCwgcmM7CiAJc3RydWN0IHdsMzUwMV9jYXJkICp0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEzNDgsNyArMTM0OSw2IEBACiAJaWYgKHJjKSB7CiAJCSsrZGV2LT5zdGF0cy50eF9kcm9wcGVkOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCXJjID0gTkVUREVWX1RYX09LOwogCX0gZWxzZSB7CiAJCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOwogCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtMTM1OCw3ICsxMzU4LDcgQEAKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhpcy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByYzsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHdsMzUwMV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCmluZGV4IDQ0MzBiOGQ5Li5iYzgxOTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtNzc5LDcgKzc3OSw4IEBACiAJCQkJKGxsYytzbmFwK3R5cGUrcGF5bG9hZCkKIAkJemQJCTEgbnVsbCBieXRlLCB6ZDEyMDEgcGFja2V0IHR5cGUKICAqLwotc3RhdGljIGludCB6ZDEyMDFfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgemQxMjAxX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgY2hhciAqdHhidWYgPSB6ZC0+dHhkYXRhOwpAQCAtNzg5LDcgKzc5MCw3IEBACiAJaWYgKCF6ZC0+bWFjX2VuYWJsZWQgfHwgemQtPm1vbml0b3IpIHsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC04MjYsNyArODI3LDcgQEAKIAl9CiAJa2ZyZWVfc2tiKHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdm9pZCB6ZDEyMDFfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IDJjODEzZDguLjVlMTEwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTEyNzgsMTEgKzEyNzgsMTEgQEAKIAlvdGhlcl9sZWQgPSBjaGlwLT5saW5rX2xlZCA9PSBMRUQxID8gTEVEMiA6IExFRDE7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgTEVEX09GRjoKKwljYXNlIFpEX0xFRF9PRkY6CiAJCWlvcmVxc1swXS52YWx1ZSA9IEZXX0xJTktfT0ZGOwogCQlpb3JlcXNbMV0udmFsdWUgPSB2WzFdICYgfihMRUQxfExFRDIpOwogCQlicmVhazsKLQljYXNlIExFRF9TQ0FOTklORzoKKwljYXNlIFpEX0xFRF9TQ0FOTklORzoKIAkJaW9yZXFzWzBdLnZhbHVlID0gRldfTElOS19PRkY7CiAJCWlvcmVxc1sxXS52YWx1ZSA9IHZbMV0gJiB+b3RoZXJfbGVkOwogCQlpZiAoZ2V0X3NlY29uZHMoKSAlIDMgPT0gMCkgewpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIAkJCWlvcmVxc1sxXS52YWx1ZSB8PSBjaGlwLT5saW5rX2xlZDsKIAkJfQogCQlicmVhazsKLQljYXNlIExFRF9BU1NPQ0lBVEVEOgorCWNhc2UgWkRfTEVEX0FTU09DSUFURUQ6CiAJCWlvcmVxc1swXS52YWx1ZSA9IEZXX0xJTktfVFg7CiAJCWlvcmVxc1sxXS52YWx1ZSA9IHZbMV0gJiB+b3RoZXJfbGVkOwogCQlpb3JlcXNbMV0udmFsdWUgfD0gY2hpcC0+bGlua19sZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKaW5kZXggZWU0Mjc1MS4uNjc4YzEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaApAQCAtODk3LDkgKzg5Nyw5IEBACiBpbnQgemRfY2hpcF91bmxvY2tfcGh5X3JlZ3Moc3RydWN0IHpkX2NoaXAgKmNoaXApOwogCiBlbnVtIGxlZF9zdGF0dXMgewotCUxFRF9PRkYgPSAwLAotCUxFRF9TQ0FOTklORyA9IDEsCi0JTEVEX0FTU09DSUFURUQgPSAyLAorCVpEX0xFRF9PRkYgPSAwLAorCVpEX0xFRF9TQ0FOTklORyA9IDEsCisJWkRfTEVEX0FTU09DSUFURUQgPSAyLAogfTsKIAogaW50IHpkX2NoaXBfY29udHJvbF9sZWRzKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCBlbnVtIGxlZF9zdGF0dXMgc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggM2JkM2M3Ny4uNmQ2NjYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTcxMSw3ICs3MTEsOCBAQAogCiAJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW5ndGgpLCBidWZmZXIsIGxlbmd0aCk7CiAKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiLCAmc3RhdHMpOworCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnN0YXRzLCBzaXplb2Yoc3RhdHMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzk1LDE4ICs3OTYsNDAgQEAKIAkJZGV2X2Vycih6ZF9tYWNfZGV2KG1hYyksICJzZXRfcnhfZmlsdGVyX2hhbmRsZXIgZXJyb3IgJWRcbiIsIHIpOwogfQogCitzdGF0aWMgdTY0IHpkX29wX3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdCkKK3sKKwlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9od19tYWMoaHcpOworCXN0cnVjdCB6ZF9tY19oYXNoIGhhc2g7CisJaW50IGk7CisKKwl6ZF9tY19jbGVhcigmaGFzaCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgeworCQlpZiAoIW1jbGlzdCkKKwkJCWJyZWFrOworCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAibWMgYWRkciAlcE1cbiIsIG1jbGlzdC0+ZG1pX2FkZHIpOworCQl6ZF9tY19hZGRfYWRkcigmaGFzaCwgbWNsaXN0LT5kbWlfYWRkcik7CisJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gaGFzaC5sb3cgfCAoKHU2NCloYXNoLmhpZ2ggPDwgMzIpOworfQorCiAjZGVmaW5lIFNVUFBPUlRFRF9GSUZfRkxBR1MgXAogCShGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfRkNTRkFJTCB8IEZJRl9DT05UUk9MIHwgXAogCUZJRl9PVEhFUl9CU1MgfCBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKIHN0YXRpYyB2b2lkIHpkX29wX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCXVuc2lnbmVkIGludCAqbmV3X2ZsYWdzLAotCQkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKKwkJCXU2NCBtdWx0aWNhc3QpCiB7Ci0Jc3RydWN0IHpkX21jX2hhc2ggaGFzaDsKKwlzdHJ1Y3QgemRfbWNfaGFzaCBoYXNoID0geworCQkubG93ID0gbXVsdGljYXN0LAorCQkuaGlnaCA9IG11bHRpY2FzdCA+PiAzMiwKKwl9OwogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKIAogCS8qIE9ubHkgZGVhbCB3aXRoIHN1cHBvcnRlZCBmbGFncyAqLwogCWNoYW5nZWRfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJRl9GTEFHUzsKQEAgLTgxOCwyNSArODQxLDE2IEBACiAJaWYgKCFjaGFuZ2VkX2ZsYWdzKQogCQlyZXR1cm47CiAKLQlpZiAoKm5ld19mbGFncyAmIChGSUZfUFJPTUlTQ19JTl9CU1MgfCBGSUZfQUxMTVVMVEkpKSB7CisJaWYgKCpuZXdfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX0FMTE1VTFRJKSkKIAkJemRfbWNfYWRkX2FsbCgmaGFzaCk7Ci0JfSBlbHNlIHsKLQkJemRfbWNfY2xlYXIoJmhhc2gpOwotCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewotCQkJaWYgKCFtY2xpc3QpCi0JCQkJYnJlYWs7Ci0JCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAibWMgYWRkciAlcE1cbiIsCi0JCQkJICBtY2xpc3QtPmRtaV9hZGRyKTsKLQkJCXpkX21jX2FkZF9hZGRyKCZoYXNoLCBtY2xpc3QtPmRtaV9hZGRyKTsKLQkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKLQkJfQotCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmxvY2ssIGZsYWdzKTsKIAltYWMtPnBhc3NfZmFpbGVkX2ZjcyA9ICEhKCpuZXdfZmxhZ3MgJiBGSUZfRkNTRkFJTCk7CiAJbWFjLT5wYXNzX2N0cmwgPSAhISgqbmV3X2ZsYWdzICYgRklGX0NPTlRST0wpOwogCW1hYy0+bXVsdGljYXN0X2hhc2ggPSBoYXNoOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCisJLyogWFhYOiB0aGVzZSBjYW4gYmUgY2FsbGVkIGhlcmUgbm93LCBjYW4gc2xlZXAgbm93ISAqLwogCXF1ZXVlX3dvcmsoemRfd29ya3F1ZXVlLCAmbWFjLT5zZXRfbXVsdGljYXN0X2hhc2hfd29yayk7CiAKIAlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKQpAQCAtOTM5LDYgKzk1Myw3IEBACiAJLmFkZF9pbnRlcmZhY2UJCT0gemRfb3BfYWRkX2ludGVyZmFjZSwKIAkucmVtb3ZlX2ludGVyZmFjZQk9IHpkX29wX3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gemRfb3BfY29uZmlnLAorCS5wcmVwYXJlX211bHRpY2FzdAk9IHpkX29wX3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gemRfb3BfY29uZmlndXJlX2ZpbHRlciwKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHpkX29wX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmdldF90c2YJCT0gemRfb3BfZ2V0X3RzZiwKQEAgLTEwMTIsNyArMTAyNyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZtYWMtPmxvY2spOwogCiAJciA9IHpkX2NoaXBfY29udHJvbF9sZWRzKGNoaXAsCi0JCSAgICAgICAgICAgICAgICAgaXNfYXNzb2NpYXRlZCA/IExFRF9BU1NPQ0lBVEVEIDogTEVEX1NDQU5OSU5HKTsKKwkJICAgICAgICAgICAgICAgICBpc19hc3NvY2lhdGVkID8gWkRfTEVEX0FTU09DSUFURUQgOiBaRF9MRURfU0NBTk5JTkcpOwogCWlmIChyKQogCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiemRfY2hpcF9jb250cm9sX2xlZHMgZXJyb3IgJWRcbiIsIHIpOwogCkBAIC0xMDM3LDUgKzEwNTIsNSBAQAogCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJcbiIpOwogCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtxdWV1ZSh6ZF93b3JrcXVldWUsCiAJCSZtYWMtPmhvdXNla2VlcGluZy5saW5rX2xlZF93b3JrKTsKLQl6ZF9jaGlwX2NvbnRyb2xfbGVkcygmbWFjLT5jaGlwLCBMRURfT0ZGKTsKKwl6ZF9jaGlwX2NvbnRyb2xfbGVkcygmbWFjLT5jaGlwLCBaRF9MRURfT0ZGKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKaW5kZXggMGU2ZTQ0Ni4uMzg2ODg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTM2LDU4ICszNiw2MCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2lkc1tdID0gewogCS8qIFpEMTIxMSAqLworCXsgVVNCX0RFVklDRSgweDAxMDUsIDB4MTQ1ZiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDAyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwNyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MDkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDRhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4NjAwMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMTEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MGFjZSwgMHhhMjExKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDEyNmYsIDB4YTAwNiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHg2ODkxLCAweGE3MjcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzBjKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDBiM2IsIDB4MTYzMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjNiLCAweDU2MzApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHg5MDcxKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4OTA3NSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDRhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMyMDQpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDAyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDBiM2IsIDB4NTYzMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MGMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQzNSwgMHgwNzExKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwOSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MzApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDAxKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDE0ZWEsIDB4YWIxMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMWUpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDA3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDEyNmYsIDB4YTAwNiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxMjliLCAweDE2NjYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDFlKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDcxMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGVhLCAweGFiMTMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAotCXsgVVNCX0RFVklDRSgweDAxMDUsIDB4MTQ1ZiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMjA0KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHg2ODkxLCAweGE3MjcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJLyogWkQxMjExQiAqLwotCXsgVVNCX0RFVklDRSgweDA1NGMsIDB4MDI1NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MGFjZSwgMHgxMjE1KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweGIyMTUpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzAwZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDYyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNTgyLCAweDYwMDMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4NzA1YyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhlNTAzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGU1MDYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NDUwNSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgxMjM2KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2IxLCAweDAwMjQpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwZiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzFiKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDBiYWYsIDB4MDEyMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDEyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDAwNTMsIDB4NTMwMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGRhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUzMDMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDEyOWIsIDB4MTY2NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCi0JeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDFhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MGEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MTIzNiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgxMjM3KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2ZhLCAweDExOTYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzNiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDVjKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTRjLCAweDAyNTcpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwYSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDBmKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQxMiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDEzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzliLCAweDAwNjIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4NjAwMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDdmYSwgMHgxMTk2KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDQ1MDUpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZTUwMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhlNTAzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGU1MDYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MTIxNSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MGFjZSwgMHhiMjE1KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3MWIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDBiYWYsIDB4MDEyMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDFhKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMzYpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDEyOWIsIDB4MTY2NyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MTNiMSwgMHgwMDI0KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNTdlLCAweDMwMGQpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCXsgVVNCX0RFVklDRSgweDE1ODIsIDB4NjAwMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHg1MzAzKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAkvKiAiRHJpdmVybGVzcyIgZGV2aWNlcyB0aGF0IG5lZWQgZWplY3RpbmcgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDIwMTEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfSU5TVEFMTEVSIH0sCiAJeyBVU0JfREVWSUNFKDB4MGFjZSwgMHgyMGZmKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX0lOU1RBTExFUiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCA4ZDg4ZGFlLi5iYWEwNTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oPgogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHhlbm5ldF9ldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgeGVubmV0X2V0aHRvb2xfb3BzOwogCiBzdHJ1Y3QgbmV0ZnJvbnRfY2IgewogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtNTU4LDEyICs1NTgsMTIgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmbnAtPnR4X2xvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogIGRyb3A6CiAJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBpbnQgeGVubmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNjI3LDcgKzE2MjcsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB4ZW5uZXRfZXRodG9vbF9vcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB4ZW5uZXRfZXRodG9vbF9vcHMgPQogewogCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCiAJLnNldF9zZyA9IHhlbm5ldF9zZXRfc2csCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYyBiL2RyaXZlcnMvbmV0L3hpbGlueF9lbWFjbGl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMjI3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC94aWxpbnhfZW1hY2xpdGUuYwpAQCAtMCwwICsxLDEwNDAgQEAKKy8qCisgKiBYaWxpbnggRW1hY0xpdGUgTGludXggZHJpdmVyIGZvciB0aGUgWGlsaW54IEV0aGVybmV0IE1BQyBMaXRlIGRldmljZS4KKyAqCisgKiBUaGlzIGlzIGEgbmV3IGZsYXQgZHJpdmVyIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBlbWFjX2xpdGUKKyAqIGRyaXZlciBmcm9tIEpvaG4gV2lsbGlhbXMgPGpvaG4ud2lsbGlhbXNAcGV0YWxvZ2l4LmNvbT4uCisgKgorICogMjAwNy0yMDA5IChjKSBYaWxpbngsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInhpbGlueF9lbWFjbGl0ZSIKKworLyogUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgdGhlIEVtYWNMaXRlIENvcmUgKi8KKyNkZWZpbmUgWEVMX1RYQlVGRl9PRkZTRVQgCTB4MAkJLyogVHJhbnNtaXQgQnVmZmVyICovCisjZGVmaW5lIFhFTF9HSUVSX09GRlNFVAkJMHgwN0Y4CQkvKiBHSUUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgWEVMX1RTUl9PRkZTRVQJCTB4MDdGQwkJLyogVHggc3RhdHVzICovCisjZGVmaW5lIFhFTF9UUExSX09GRlNFVAkJMHgwN0Y0CQkvKiBUeCBwYWNrZXQgbGVuZ3RoICovCisKKyNkZWZpbmUgWEVMX1JYQlVGRl9PRkZTRVQJMHgxMDAwCQkvKiBSZWNlaXZlIEJ1ZmZlciAqLworI2RlZmluZSBYRUxfUlBMUl9PRkZTRVQJCTB4MTAwQwkJLyogUnggcGFja2V0IGxlbmd0aCAqLworI2RlZmluZSBYRUxfUlNSX09GRlNFVAkJMHgxN0ZDCQkvKiBSeCBzdGF0dXMgKi8KKworI2RlZmluZSBYRUxfQlVGRkVSX09GRlNFVAkweDA4MDAJCS8qIE5leHQgVHgvUnggYnVmZmVyJ3Mgb2Zmc2V0ICovCisKKy8qIEdsb2JhbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChHSUVSKSBCaXQgTWFza3MgKi8KKyNkZWZpbmUgWEVMX0dJRVJfR0lFX01BU0sJMHg4MDAwMDAwMCAJLyogR2xvYmFsIEVuYWJsZSAqLworCisvKiBUcmFuc21pdCBTdGF0dXMgUmVnaXN0ZXIgKFRTUikgQml0IE1hc2tzICovCisjZGVmaW5lIFhFTF9UU1JfWE1JVF9CVVNZX01BU0sJIDB4MDAwMDAwMDEgCS8qIFR4IGNvbXBsZXRlICovCisjZGVmaW5lIFhFTF9UU1JfUFJPR1JBTV9NQVNLCSAweDAwMDAwMDAyIAkvKiBQcm9ncmFtIHRoZSBNQUMgYWRkcmVzcyAqLworI2RlZmluZSBYRUxfVFNSX1hNSVRfSUVfTUFTSwkgMHgwMDAwMDAwOCAJLyogVHggaW50ZXJydXB0IGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgWEVMX1RTUl9YTUlUX0FDVElWRV9NQVNLIDB4ODAwMDAwMDAgCS8qIEJ1ZmZlciBpcyBhY3RpdmUsIFNXIGJpdAorCQkJCQkJICogb25seS4gVGhpcyBpcyBub3QgZG9jdW1lbnRlZAorCQkJCQkJICogaW4gdGhlIEhXIHNwZWMgKi8KKworLyogRGVmaW5lIGZvciBwcm9ncmFtbWluZyB0aGUgTUFDIGFkZHJlc3MgaW50byB0aGUgRW1hY0xpdGUgKi8KKyNkZWZpbmUgWEVMX1RTUl9QUk9HX01BQ19BRERSCShYRUxfVFNSX1hNSVRfQlVTWV9NQVNLIHwgWEVMX1RTUl9QUk9HUkFNX01BU0spCisKKy8qIFJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyIChSU1IpICovCisjZGVmaW5lIFhFTF9SU1JfUkVDVl9ET05FX01BU0sJMHgwMDAwMDAwMSAJLyogUnggY29tcGxldGUgKi8KKyNkZWZpbmUgWEVMX1JTUl9SRUNWX0lFX01BU0sJMHgwMDAwMDAwOCAJLyogUnggaW50ZXJydXB0IGVuYWJsZSBiaXQgKi8KKworLyogVHJhbnNtaXQgUGFja2V0IExlbmd0aCBSZWdpc3RlciAoVFBMUikgKi8KKyNkZWZpbmUgWEVMX1RQTFJfTEVOR1RIX01BU0sJMHgwMDAwRkZGRiAJLyogVHggcGFja2V0IGxlbmd0aCAqLworCisvKiBSZWNlaXZlIFBhY2tldCBMZW5ndGggUmVnaXN0ZXIgKFJQTFIpICovCisjZGVmaW5lIFhFTF9SUExSX0xFTkdUSF9NQVNLCTB4MDAwMEZGRkYgCS8qIFJ4IHBhY2tldCBsZW5ndGggKi8KKworI2RlZmluZSBYRUxfSEVBREVSX09GRlNFVAkxMiAJCS8qIE9mZnNldCB0byBsZW5ndGggZmllbGQgKi8KKyNkZWZpbmUgWEVMX0hFQURFUl9TSElGVAkxNiAJCS8qIFNoaWZ0IHZhbHVlIGZvciBsZW5ndGggKi8KKworLyogR2VuZXJhbCBFdGhlcm5ldCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBYRUxfQVJQX1BBQ0tFVF9TSVpFCQkyOCAJLyogTWF4IEFSUCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBYRUxfSEVBREVSX0lQX0xFTkdUSF9PRkZTRVQJMTYgCS8qIElQIExlbmd0aCBPZmZzZXQgKi8KKworCisKKyNkZWZpbmUgVFhfVElNRU9VVAkJKDYwKkhaKQkJLyogVHggdGltZW91dCBpcyA2MCBzZWNvbmRzLiAqLworI2RlZmluZSBBTElHTk1FTlQJCTQKKworLyogQlVGRkVSX0FMSUdOKGFkcikgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRoZSBuZXh0IGFsaWdubWVudC4gKi8KKyNkZWZpbmUgQlVGRkVSX0FMSUdOKGFkcikgKChBTElHTk1FTlQgLSAoKHUzMikgYWRyKSkgJSBBTElHTk1FTlQpCisKKy8qKgorICogc3RydWN0IG5ldF9sb2NhbCAtIE91ciBwcml2YXRlIHBlciBkZXZpY2UgZGF0YQorICogQG5kZXY6CQlpbnN0YW5jZSBvZiB0aGUgbmV0d29yayBkZXZpY2UKKyAqIEB0eF9waW5nX3Bvbmc6CWluZGljYXRlcyB3aGV0aGVyIFR4IFBvbmcgYnVmZmVyIGlzIGNvbmZpZ3VyZWQgaW4gSFcKKyAqIEByeF9waW5nX3Bvbmc6CWluZGljYXRlcyB3aGV0aGVyIFJ4IFBvbmcgYnVmZmVyIGlzIGNvbmZpZ3VyZWQgaW4gSFcKKyAqIEBuZXh0X3R4X2J1Zl90b191c2U6CW5leHQgVHggYnVmZmVyIHRvIHdyaXRlIHRvCisgKiBAbmV4dF9yeF9idWZfdG9fdXNlOgluZXh0IFJ4IGJ1ZmZlciB0byByZWFkIGZyb20KKyAqIEBiYXNlX2FkZHI6CQliYXNlIGFkZHJlc3Mgb2YgdGhlIEVtYWNsaXRlIGRldmljZQorICogQHJlc2V0X2xvY2s6CQlsb2NrIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbgorICogQGRlZmVycmVkX3NrYjoJaG9sZHMgYW4gc2tiIChmb3IgdHJhbnNtaXNzaW9uIGF0IGEgbGF0ZXIgdGltZSkgd2hlbiB0aGUKKyAqCQkJVHggYnVmZmVyIGlzIG5vdCBmcmVlCisgKi8KK3N0cnVjdCBuZXRfbG9jYWwgeworCisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisKKwlib29sIHR4X3BpbmdfcG9uZzsKKwlib29sIHJ4X3BpbmdfcG9uZzsKKwl1MzIgbmV4dF90eF9idWZfdG9fdXNlOworCXUzMiBuZXh0X3J4X2J1Zl90b191c2U7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CisKKwlzcGlubG9ja190IHJlc2V0X2xvY2s7CisJc3RydWN0IHNrX2J1ZmYgKmRlZmVycmVkX3NrYjsKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFbWFjTGl0ZSBkcml2ZXIgY2FsbHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIHhlbWFjbGl0ZV9lbmFibGVfaW50ZXJydXB0cyAtIEVuYWJsZSB0aGUgaW50ZXJydXB0cyBmb3IgdGhlIEVtYWNMaXRlIGRldmljZQorICogQGRydmRhdGE6CVBvaW50ZXIgdG8gdGhlIEVtYWNsaXRlIGRldmljZSBwcml2YXRlIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIFR4IGFuZCBSeCBpbnRlcnJ1cHRzIGZvciB0aGUgRW1hY2xpdGUgZGV2aWNlIGFsb25nCisgKiB3aXRoIHRoZSBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZS4KKyAqLworc3RhdGljIHZvaWQgeGVtYWNsaXRlX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXRfbG9jYWwgKmRydmRhdGEpCit7CisJdTMyIHJlZ19kYXRhOworCisJLyogRW5hYmxlIHRoZSBUeCBpbnRlcnJ1cHRzIGZvciB0aGUgZmlyc3QgQnVmZmVyICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9UU1JfT0ZGU0VUKTsKKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfVFNSX09GRlNFVCwKKwkJIHJlZ19kYXRhIHwgWEVMX1RTUl9YTUlUX0lFX01BU0spOworCisJLyogRW5hYmxlIHRoZSBUeCBpbnRlcnJ1cHRzIGZvciB0aGUgc2Vjb25kIEJ1ZmZlciBpZgorCSAqIGNvbmZpZ3VyZWQgaW4gSFcgKi8KKwlpZiAoZHJ2ZGF0YS0+dHhfcGluZ19wb25nICE9IDApIHsKKwkJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArCisJCQkJICAgWEVMX0JVRkZFUl9PRkZTRVQgKyBYRUxfVFNSX09GRlNFVCk7CisJCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsKKwkJCSBYRUxfVFNSX09GRlNFVCwKKwkJCSByZWdfZGF0YSB8IFhFTF9UU1JfWE1JVF9JRV9NQVNLKTsKKwl9CisKKwkvKiBFbmFibGUgdGhlIFJ4IGludGVycnVwdHMgZm9yIHRoZSBmaXJzdCBidWZmZXIgKi8KKwlyZWdfZGF0YSA9IGluX2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX1JTUl9PRkZTRVQpOworCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9SU1JfT0ZGU0VULAorCQkgcmVnX2RhdGEgfCBYRUxfUlNSX1JFQ1ZfSUVfTUFTSyk7CisKKwkvKiBFbmFibGUgdGhlIFJ4IGludGVycnVwdHMgZm9yIHRoZSBzZWNvbmQgQnVmZmVyIGlmCisJICogY29uZmlndXJlZCBpbiBIVyAqLworCWlmIChkcnZkYXRhLT5yeF9waW5nX3BvbmcgIT0gMCkgeworCQlyZWdfZGF0YSA9IGluX2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX0JVRkZFUl9PRkZTRVQgKworCQkJCSAgIFhFTF9SU1JfT0ZGU0VUKTsKKwkJb3V0X2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX0JVRkZFUl9PRkZTRVQgKworCQkJIFhFTF9SU1JfT0ZGU0VULAorCQkJIHJlZ19kYXRhIHwgWEVMX1JTUl9SRUNWX0lFX01BU0spOworCX0KKworCS8qIEVuYWJsZSB0aGUgR2xvYmFsIEludGVycnVwdCBFbmFibGUgKi8KKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfR0lFUl9PRkZTRVQsIFhFTF9HSUVSX0dJRV9NQVNLKTsKK30KKworLyoqCisgKiB4ZW1hY2xpdGVfZGlzYWJsZV9pbnRlcnJ1cHRzIC0gRGlzYWJsZSB0aGUgaW50ZXJydXB0cyBmb3IgdGhlIEVtYWNMaXRlIGRldmljZQorICogQGRydmRhdGE6CVBvaW50ZXIgdG8gdGhlIEVtYWNsaXRlIGRldmljZSBwcml2YXRlIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBUeCBhbmQgUnggaW50ZXJydXB0cyBmb3IgdGhlIEVtYWNsaXRlIGRldmljZSwKKyAqIGFsb25nIHdpdGggdGhlIEdsb2JhbCBJbnRlcnJ1cHQgRW5hYmxlLgorICovCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXRfbG9jYWwgKmRydmRhdGEpCit7CisJdTMyIHJlZ19kYXRhOworCisJLyogRGlzYWJsZSB0aGUgR2xvYmFsIEludGVycnVwdCBFbmFibGUgKi8KKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfR0lFUl9PRkZTRVQsIFhFTF9HSUVSX0dJRV9NQVNLKTsKKworCS8qIERpc2FibGUgdGhlIFR4IGludGVycnVwdHMgZm9yIHRoZSBmaXJzdCBidWZmZXIgKi8KKwlyZWdfZGF0YSA9IGluX2JlMzIoZHJ2ZGF0YS0+YmFzZV9hZGRyICsgWEVMX1RTUl9PRkZTRVQpOworCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9UU1JfT0ZGU0VULAorCQkgcmVnX2RhdGEgJiAoflhFTF9UU1JfWE1JVF9JRV9NQVNLKSk7CisKKwkvKiBEaXNhYmxlIHRoZSBUeCBpbnRlcnJ1cHRzIGZvciB0aGUgc2Vjb25kIEJ1ZmZlcgorCSAqIGlmIGNvbmZpZ3VyZWQgaW4gSFcgKi8KKwlpZiAoZHJ2ZGF0YS0+dHhfcGluZ19wb25nICE9IDApIHsKKwkJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsKKwkJCQkgICBYRUxfVFNSX09GRlNFVCk7CisJCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsKKwkJCSBYRUxfVFNSX09GRlNFVCwKKwkJCSByZWdfZGF0YSAmICh+WEVMX1RTUl9YTUlUX0lFX01BU0spKTsKKwl9CisKKwkvKiBEaXNhYmxlIHRoZSBSeCBpbnRlcnJ1cHRzIGZvciB0aGUgZmlyc3QgYnVmZmVyICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9SU1JfT0ZGU0VUKTsKKwlvdXRfYmUzMihkcnZkYXRhLT5iYXNlX2FkZHIgKyBYRUxfUlNSX09GRlNFVCwKKwkJIHJlZ19kYXRhICYgKH5YRUxfUlNSX1JFQ1ZfSUVfTUFTSykpOworCisJLyogRGlzYWJsZSB0aGUgUnggaW50ZXJydXB0cyBmb3IgdGhlIHNlY29uZCBidWZmZXIKKwkgKiBpZiBjb25maWd1cmVkIGluIEhXICovCisJaWYgKGRydmRhdGEtPnJ4X3BpbmdfcG9uZyAhPSAwKSB7CisKKwkJcmVnX2RhdGEgPSBpbl9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsKKwkJCQkgICBYRUxfUlNSX09GRlNFVCk7CisJCW91dF9iZTMyKGRydmRhdGEtPmJhc2VfYWRkciArIFhFTF9CVUZGRVJfT0ZGU0VUICsKKwkJCSBYRUxfUlNSX09GRlNFVCwKKwkJCSByZWdfZGF0YSAmICh+WEVMX1JTUl9SRUNWX0lFX01BU0spKTsKKwl9Cit9CisKKy8qKgorICogeGVtYWNsaXRlX2FsaWduZWRfd3JpdGUgLSBXcml0ZSBmcm9tIDE2LWJpdCBhbGlnbmVkIHRvIDMyLWJpdCBhbGlnbmVkIGFkZHJlc3MKKyAqIEBzcmNfcHRyOglWb2lkIHBvaW50ZXIgdG8gdGhlIDE2LWJpdCBhbGlnbmVkIHNvdXJjZSBhZGRyZXNzCisgKiBAZGVzdF9wdHI6CVBvaW50ZXIgdG8gdGhlIDMyLWJpdCBhbGlnbmVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBsZW5ndGg6CU51bWJlciBieXRlcyB0byB3cml0ZSBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd3JpdGVzIGRhdGEgZnJvbSBhIDE2LWJpdCBhbGlnbmVkIGJ1ZmZlciB0byBhIDMyLWJpdCBhbGlnbmVkCisgKiBhZGRyZXNzIGluIHRoZSBFbWFjTGl0ZSBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHhlbWFjbGl0ZV9hbGlnbmVkX3dyaXRlKHZvaWQgKnNyY19wdHIsIHUzMiAqZGVzdF9wdHIsCisJCQkJICAgIHVuc2lnbmVkIGxlbmd0aCkKK3sKKwl1MzIgYWxpZ25fYnVmZmVyOworCXUzMiAqdG9fdTMyX3B0cjsKKwl1MTYgKmZyb21fdTE2X3B0ciwgKnRvX3UxNl9wdHI7CisKKwl0b191MzJfcHRyID0gZGVzdF9wdHI7CisJZnJvbV91MTZfcHRyID0gKHUxNiAqKSBzcmNfcHRyOworCWFsaWduX2J1ZmZlciA9IDA7CisKKwlmb3IgKDsgbGVuZ3RoID4gMzsgbGVuZ3RoIC09IDQpIHsKKwkJdG9fdTE2X3B0ciA9ICh1MTYgKikgKCh2b2lkICopICZhbGlnbl9idWZmZXIpOworCQkqdG9fdTE2X3B0cisrID0gKmZyb21fdTE2X3B0cisrOworCQkqdG9fdTE2X3B0cisrID0gKmZyb21fdTE2X3B0cisrOworCisJCS8qIE91dHB1dCBhIHdvcmQgKi8KKwkJKnRvX3UzMl9wdHIrKyA9IGFsaWduX2J1ZmZlcjsKKwl9CisJaWYgKGxlbmd0aCkgeworCQl1OCAqZnJvbV91OF9wdHIsICp0b191OF9wdHI7CisKKwkJLyogU2V0IHVwIHRvIG91dHB1dCB0aGUgcmVtYWluaW5nIGRhdGEgKi8KKwkJYWxpZ25fYnVmZmVyID0gMDsKKwkJdG9fdThfcHRyID0gKHU4ICopICZhbGlnbl9idWZmZXI7CisJCWZyb21fdThfcHRyID0gKHU4ICopIGZyb21fdTE2X3B0cjsKKworCQkvKiBPdXRwdXQgdGhlIHJlbWFpbmluZyBkYXRhICovCisJCWZvciAoOyBsZW5ndGggPiAwOyBsZW5ndGgtLSkKKwkJCSp0b191OF9wdHIrKyA9ICpmcm9tX3U4X3B0cisrOworCisJCSp0b191MzJfcHRyID0gYWxpZ25fYnVmZmVyOworCX0KK30KKworLyoqCisgKiB4ZW1hY2xpdGVfYWxpZ25lZF9yZWFkIC0gUmVhZCBmcm9tIDMyLWJpdCBhbGlnbmVkIHRvIDE2LWJpdCBhbGlnbmVkIGJ1ZmZlcgorICogQHNyY19wdHI6CVBvaW50ZXIgdG8gdGhlIDMyLWJpdCBhbGlnbmVkIHNvdXJjZSBhZGRyZXNzCisgKiBAZGVzdF9wdHI6CVBvaW50ZXIgdG8gdGhlIDE2LWJpdCBhbGlnbmVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIEBsZW5ndGg6CU51bWJlciBieXRlcyB0byByZWFkIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBkYXRhIGZyb20gYSAzMi1iaXQgYWxpZ25lZCBhZGRyZXNzIGluIHRoZSBFbWFjTGl0ZSBkZXZpY2UKKyAqIHRvIGEgMTYtYml0IGFsaWduZWQgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfYWxpZ25lZF9yZWFkKHUzMiAqc3JjX3B0ciwgdTggKmRlc3RfcHRyLAorCQkJCSAgIHVuc2lnbmVkIGxlbmd0aCkKK3sKKwl1MTYgKnRvX3UxNl9wdHIsICpmcm9tX3UxNl9wdHI7CisJdTMyICpmcm9tX3UzMl9wdHI7CisJdTMyIGFsaWduX2J1ZmZlcjsKKworCWZyb21fdTMyX3B0ciA9IHNyY19wdHI7CisJdG9fdTE2X3B0ciA9ICh1MTYgKikgZGVzdF9wdHI7CisKKwlmb3IgKDsgbGVuZ3RoID4gMzsgbGVuZ3RoIC09IDQpIHsKKwkJLyogQ29weSBlYWNoIHdvcmQgaW50byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLworCQlhbGlnbl9idWZmZXIgPSAqZnJvbV91MzJfcHRyKys7CisJCWZyb21fdTE2X3B0ciA9ICh1MTYgKikmYWxpZ25fYnVmZmVyOworCisJCS8qIFJlYWQgZGF0YSBmcm9tIHNvdXJjZSAqLworCQkqdG9fdTE2X3B0cisrID0gKmZyb21fdTE2X3B0cisrOworCQkqdG9fdTE2X3B0cisrID0gKmZyb21fdTE2X3B0cisrOworCX0KKworCWlmIChsZW5ndGgpIHsKKwkJdTggKnRvX3U4X3B0ciwgKmZyb21fdThfcHRyOworCisJCS8qIFNldCB1cCB0byByZWFkIHRoZSByZW1haW5pbmcgZGF0YSAqLworCQl0b191OF9wdHIgPSAodTggKikgdG9fdTE2X3B0cjsKKwkJYWxpZ25fYnVmZmVyID0gKmZyb21fdTMyX3B0cisrOworCQlmcm9tX3U4X3B0ciA9ICh1OCAqKSAmYWxpZ25fYnVmZmVyOworCisJCS8qIFJlYWQgdGhlIHJlbWFpbmluZyBkYXRhICovCisJCWZvciAoOyBsZW5ndGggPiAwOyBsZW5ndGgtLSkKKwkJCSp0b191OF9wdHIgPSAqZnJvbV91OF9wdHI7CisJfQorfQorCisvKioKKyAqIHhlbWFjbGl0ZV9zZW5kX2RhdGEgLSBTZW5kIGFuIEV0aGVybmV0IGZyYW1lCisgKiBAZHJ2ZGF0YToJUG9pbnRlciB0byB0aGUgRW1hY2xpdGUgZGV2aWNlIHByaXZhdGUgZGF0YQorICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gYmUgc2VudAorICogQGJ5dGVfY291bnQ6CVRvdGFsIGZyYW1lIHNpemUsIGluY2x1ZGluZyBoZWFkZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgVHggYnVmZmVyIG9mIHRoZSBFbWFjbGl0ZSBkZXZpY2UgaXMgZnJlZSB0byBzZW5kCisgKiBkYXRhLiBJZiBzbywgaXQgZmlsbHMgdGhlIFR4IGJ1ZmZlciB3aXRoIGRhdGEgZm9yIHRyYW5zbWlzc2lvbi4gT3RoZXJ3aXNlLCBpdAorICogcmV0dXJucyBhbiBlcnJvci4KKyAqCisgKiBSZXR1cm46CTAgdXBvbiBzdWNjZXNzIG9yIC0xIGlmIHRoZSBidWZmZXIocykgYXJlIGZ1bGwuCisgKgorICogTm90ZToJVGhlIG1heGltdW0gVHggcGFja2V0IHNpemUgY2FuIG5vdCBiZSBtb3JlIHRoYW4gRXRoZXJuZXQgaGVhZGVyCisgKgkJKDE0IEJ5dGVzKSArIE1heGltdW0gTVRVICgxNTAwIGJ5dGVzKS4gVGhpcyBpcyBleGNsdWRpbmcgRkNTLgorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9zZW5kX2RhdGEoc3RydWN0IG5ldF9sb2NhbCAqZHJ2ZGF0YSwgdTggKmRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGJ5dGVfY291bnQpCit7CisJdTMyIHJlZ19kYXRhOworCXZvaWQgX19pb21lbSAqYWRkcjsKKworCS8qIERldGVybWluZSB0aGUgZXhwZWN0ZWQgVHggYnVmZmVyIGFkZHJlc3MgKi8KKwlhZGRyID0gZHJ2ZGF0YS0+YmFzZV9hZGRyICsgZHJ2ZGF0YS0+bmV4dF90eF9idWZfdG9fdXNlOworCisJLyogSWYgdGhlIGxlbmd0aCBpcyB0b28gbGFyZ2UsIHRydW5jYXRlIGl0ICovCisJaWYgKGJ5dGVfY291bnQgPiBFVEhfRlJBTUVfTEVOKQorCQlieXRlX2NvdW50ID0gRVRIX0ZSQU1FX0xFTjsKKworCS8qIENoZWNrIGlmIHRoZSBleHBlY3RlZCBidWZmZXIgaXMgYXZhaWxhYmxlICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGFkZHIgKyBYRUxfVFNSX09GRlNFVCk7CisJaWYgKChyZWdfZGF0YSAmIChYRUxfVFNSX1hNSVRfQlVTWV9NQVNLIHwKKwkgICAgIFhFTF9UU1JfWE1JVF9BQ1RJVkVfTUFTSykpID09IDApIHsKKworCQkvKiBTd2l0Y2ggdG8gbmV4dCBidWZmZXIgaWYgY29uZmlndXJlZCAqLworCQlpZiAoZHJ2ZGF0YS0+dHhfcGluZ19wb25nICE9IDApCisJCQlkcnZkYXRhLT5uZXh0X3R4X2J1Zl90b191c2UgXj0gWEVMX0JVRkZFUl9PRkZTRVQ7CisJfSBlbHNlIGlmIChkcnZkYXRhLT50eF9waW5nX3BvbmcgIT0gMCkgeworCQkvKiBJZiB0aGUgZXhwZWN0ZWQgYnVmZmVyIGlzIGZ1bGwsIHRyeSB0aGUgb3RoZXIgYnVmZmVyLAorCQkgKiBpZiBpdCBpcyBjb25maWd1cmVkIGluIEhXICovCisKKwkJYWRkciA9ICh2b2lkIF9faW9tZW0gX19mb3JjZSAqKSgodTMyIF9fZm9yY2UpYWRkciBeCisJCQkJCQkgWEVMX0JVRkZFUl9PRkZTRVQpOworCQlyZWdfZGF0YSA9IGluX2JlMzIoYWRkciArIFhFTF9UU1JfT0ZGU0VUKTsKKworCQlpZiAoKHJlZ19kYXRhICYgKFhFTF9UU1JfWE1JVF9CVVNZX01BU0sgfAorCQkgICAgIFhFTF9UU1JfWE1JVF9BQ1RJVkVfTUFTSykpICE9IDApCisJCQlyZXR1cm4gLTE7IC8qIEJ1ZmZlcnMgd2VyZSBmdWxsLCByZXR1cm4gZmFpbHVyZSAqLworCX0gZWxzZQorCQlyZXR1cm4gLTE7IC8qIEJ1ZmZlciB3YXMgZnVsbCwgcmV0dXJuIGZhaWx1cmUgKi8KKworCS8qIFdyaXRlIHRoZSBmcmFtZSB0byB0aGUgYnVmZmVyICovCisJeGVtYWNsaXRlX2FsaWduZWRfd3JpdGUoZGF0YSwgKHUzMiBfX2ZvcmNlICopIGFkZHIsIGJ5dGVfY291bnQpOworCisJb3V0X2JlMzIoYWRkciArIFhFTF9UUExSX09GRlNFVCwgKGJ5dGVfY291bnQgJiBYRUxfVFBMUl9MRU5HVEhfTUFTSykpOworCisJLyogVXBkYXRlIHRoZSBUeCBTdGF0dXMgUmVnaXN0ZXIgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhCisJICogZnJhbWUgdG8gc2VuZC4gU2V0IHRoZSBYRUxfVFNSX1hNSVRfQUNUSVZFX01BU0sgZmxhZyB3aGljaAorCSAqIGlzIHVzZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGNoZWNrIHdoZXRoZXIgYSBmcmFtZQorCSAqIGhhcyBiZWVuIHRyYW5zbWl0dGVkICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGFkZHIgKyBYRUxfVFNSX09GRlNFVCk7CisJcmVnX2RhdGEgfD0gKFhFTF9UU1JfWE1JVF9CVVNZX01BU0sgfCBYRUxfVFNSX1hNSVRfQUNUSVZFX01BU0spOworCW91dF9iZTMyKGFkZHIgKyBYRUxfVFNSX09GRlNFVCwgcmVnX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX3JlY3ZfZGF0YSAtIFJlY2VpdmUgYSBmcmFtZQorICogQGRydmRhdGE6CVBvaW50ZXIgdG8gdGhlIEVtYWNsaXRlIGRldmljZSBwcml2YXRlIGRhdGEKKyAqIEBkYXRhOglBZGRyZXNzIHdoZXJlIHRoZSBkYXRhIGlzIHRvIGJlIHJlY2VpdmVkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IGNvbnRleHQgb3IKKyAqIHdpdGggYSB3cmFwcGVyIHdoaWNoIHdhaXRzIGZvciB0aGUgcmVjZWl2ZSBmcmFtZSB0byBiZSBhdmFpbGFibGUuCisgKgorICogUmV0dXJuOglUb3RhbCBudW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQKKyAqLworc3RhdGljIHUxNiB4ZW1hY2xpdGVfcmVjdl9kYXRhKHN0cnVjdCBuZXRfbG9jYWwgKmRydmRhdGEsIHU4ICpkYXRhKQoreworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1MTYgbGVuZ3RoLCBwcm90b190eXBlOworCXUzMiByZWdfZGF0YTsKKworCS8qIERldGVybWluZSB0aGUgZXhwZWN0ZWQgYnVmZmVyIGFkZHJlc3MgKi8KKwlhZGRyID0gKGRydmRhdGEtPmJhc2VfYWRkciArIGRydmRhdGEtPm5leHRfcnhfYnVmX3RvX3VzZSk7CisKKwkvKiBWZXJpZnkgd2hpY2ggYnVmZmVyIGhhcyB2YWxpZCBkYXRhICovCisJcmVnX2RhdGEgPSBpbl9iZTMyKGFkZHIgKyBYRUxfUlNSX09GRlNFVCk7CisKKwlpZiAoKHJlZ19kYXRhICYgWEVMX1JTUl9SRUNWX0RPTkVfTUFTSykgPT0gWEVMX1JTUl9SRUNWX0RPTkVfTUFTSykgeworCQlpZiAoZHJ2ZGF0YS0+cnhfcGluZ19wb25nICE9IDApCisJCQlkcnZkYXRhLT5uZXh0X3J4X2J1Zl90b191c2UgXj0gWEVMX0JVRkZFUl9PRkZTRVQ7CisJfSBlbHNlIHsKKwkJLyogVGhlIGluc3RhbmNlIGlzIG91dCBvZiBzeW5jLCB0cnkgb3RoZXIgYnVmZmVyIGlmIG90aGVyCisJCSAqIGJ1ZmZlciBpcyBjb25maWd1cmVkLCByZXR1cm4gMCBvdGhlcndpc2UuIElmIHRoZSBpbnN0YW5jZSBpcworCQkgKiBvdXQgb2Ygc3luYywgZG8gbm90IHVwZGF0ZSB0aGUgJ25leHRfcnhfYnVmX3RvX3VzZScgc2luY2UgaXQKKwkJICogd2lsbCBjb3JyZWN0IG9uIHN1YnNlcXVlbnQgY2FsbHMgKi8KKwkJaWYgKGRydmRhdGEtPnJ4X3BpbmdfcG9uZyAhPSAwKQorCQkJYWRkciA9ICh2b2lkIF9faW9tZW0gX19mb3JjZSAqKSgodTMyIF9fZm9yY2UpYWRkciBeCisJCQkJCQkJIFhFTF9CVUZGRVJfT0ZGU0VUKTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CS8qIE5vIGRhdGEgd2FzIGF2YWlsYWJsZSAqLworCisJCS8qIFZlcmlmeSB0aGF0IGJ1ZmZlciBoYXMgdmFsaWQgZGF0YSAqLworCQlyZWdfZGF0YSA9IGluX2JlMzIoYWRkciArIFhFTF9SU1JfT0ZGU0VUKTsKKwkJaWYgKChyZWdfZGF0YSAmIFhFTF9SU1JfUkVDVl9ET05FX01BU0spICE9CisJCSAgICAgWEVMX1JTUl9SRUNWX0RPTkVfTUFTSykKKwkJCXJldHVybiAwOwkvKiBObyBkYXRhIHdhcyBhdmFpbGFibGUgKi8KKwl9CisKKwkvKiBHZXQgdGhlIHByb3RvY29sIHR5cGUgb2YgdGhlIGV0aGVybmV0IGZyYW1lIHRoYXQgYXJyaXZlZCAqLworCXByb3RvX3R5cGUgPSAoKGluX2JlMzIoYWRkciArIFhFTF9IRUFERVJfT0ZGU0VUICsKKwkJCVhFTF9SWEJVRkZfT0ZGU0VUKSA+PiBYRUxfSEVBREVSX1NISUZUKSAmCisJCQlYRUxfUlBMUl9MRU5HVEhfTUFTSyk7CisKKwkvKiBDaGVjayBpZiByZWNlaXZlZCBldGhlcm5ldCBmcmFtZSBpcyBhIHJhdyBldGhlcm5ldCBmcmFtZQorCSAqIG9yIGFuIElQIHBhY2tldCBvciBhbiBBUlAgcGFja2V0ICovCisJaWYgKHByb3RvX3R5cGUgPiAoRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSkgeworCisJCWlmIChwcm90b190eXBlID09IEVUSF9QX0lQKSB7CisJCQlsZW5ndGggPSAoKGluX2JlMzIoYWRkciArCisJCQkJCVhFTF9IRUFERVJfSVBfTEVOR1RIX09GRlNFVCArCisJCQkJCVhFTF9SWEJVRkZfT0ZGU0VUKSA+PgorCQkJCQlYRUxfSEVBREVSX1NISUZUKSAmCisJCQkJCVhFTF9SUExSX0xFTkdUSF9NQVNLKTsKKwkJCWxlbmd0aCArPSBFVEhfSExFTiArIEVUSF9GQ1NfTEVOOworCisJCX0gZWxzZSBpZiAocHJvdG9fdHlwZSA9PSBFVEhfUF9BUlApCisJCQlsZW5ndGggPSBYRUxfQVJQX1BBQ0tFVF9TSVpFICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKKwkJZWxzZQorCQkJLyogRmllbGQgY29udGFpbnMgdHlwZSBvdGhlciB0aGFuIElQIG9yIEFSUCwgdXNlIG1heAorCQkJICogZnJhbWUgc2l6ZSBhbmQgbGV0IHVzZXIgcGFyc2UgaXQgKi8KKwkJCWxlbmd0aCA9IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTjsKKwl9IGVsc2UKKwkJLyogVXNlIHRoZSBsZW5ndGggaW4gdGhlIGZyYW1lLCBwbHVzIHRoZSBoZWFkZXIgYW5kIHRyYWlsZXIgKi8KKwkJbGVuZ3RoID0gcHJvdG9fdHlwZSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CisKKwkvKiBSZWFkIGZyb20gdGhlIEVtYWNMaXRlIGRldmljZSAqLworCXhlbWFjbGl0ZV9hbGlnbmVkX3JlYWQoKHUzMiBfX2ZvcmNlICopIChhZGRyICsgWEVMX1JYQlVGRl9PRkZTRVQpLAorCQkJCWRhdGEsIGxlbmd0aCk7CisKKwkvKiBBY2tub3dsZWRnZSB0aGUgZnJhbWUgKi8KKwlyZWdfZGF0YSA9IGluX2JlMzIoYWRkciArIFhFTF9SU1JfT0ZGU0VUKTsKKwlyZWdfZGF0YSAmPSB+WEVMX1JTUl9SRUNWX0RPTkVfTUFTSzsKKwlvdXRfYmUzMihhZGRyICsgWEVMX1JTUl9PRkZTRVQsIHJlZ19kYXRhKTsKKworCXJldHVybiBsZW5ndGg7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX3NldF9tYWNfYWRkcmVzcyAtIFNldCB0aGUgTUFDIGFkZHJlc3MgZm9yIHRoaXMgZGV2aWNlCisgKiBAZHJ2ZGF0YToJUG9pbnRlciB0byB0aGUgRW1hY2xpdGUgZGV2aWNlIHByaXZhdGUgZGF0YQorICogQGFkZHJlc3NfcHRyOlBvaW50ZXIgdG8gdGhlIE1BQyBhZGRyZXNzIChNQUMgYWRkcmVzcyBpcyBhIDQ4LWJpdCB2YWx1ZSkKKyAqCisgKiBUeCBtdXN0IGJlIGlkbGUgYW5kIFJ4IHNob3VsZCBiZSBpZGxlIGZvciBkZXRlcm1pbmlzdGljIHJlc3VsdHMuCisgKiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB0aGUKKyAqIGluaXRpYWxpemF0aW9uIGFuZCBiZWZvcmUgdHJhbnNtaXNzaW9uIG9mIGFueSBwYWNrZXRzIGZyb20gdGhlIGRldmljZS4KKyAqIFRoZSBNQUMgYWRkcmVzcyBjYW4gYmUgcHJvZ3JhbW1lZCB1c2luZyBhbnkgb2YgdGhlIHR3byB0cmFuc21pdAorICogYnVmZmVycyAoaWYgY29uZmlndXJlZCkuCisgKi8KK3N0YXRpYyB2b2lkIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9sb2NhbCAqZHJ2ZGF0YSwKKwkJCQkgICAgICB1OCAqYWRkcmVzc19wdHIpCit7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXUzMiByZWdfZGF0YTsKKworCS8qIERldGVybWluZSB0aGUgZXhwZWN0ZWQgVHggYnVmZmVyIGFkZHJlc3MgKi8KKwlhZGRyID0gZHJ2ZGF0YS0+YmFzZV9hZGRyICsgZHJ2ZGF0YS0+bmV4dF90eF9idWZfdG9fdXNlOworCisJeGVtYWNsaXRlX2FsaWduZWRfd3JpdGUoYWRkcmVzc19wdHIsICh1MzIgX19mb3JjZSAqKSBhZGRyLCBFVEhfQUxFTik7CisKKwlvdXRfYmUzMihhZGRyICsgWEVMX1RQTFJfT0ZGU0VULCBFVEhfQUxFTik7CisKKwkvKiBVcGRhdGUgdGhlIE1BQyBhZGRyZXNzIGluIHRoZSBFbWFjTGl0ZSAqLworCXJlZ19kYXRhID0gaW5fYmUzMihhZGRyICsgWEVMX1RTUl9PRkZTRVQpOworCW91dF9iZTMyKGFkZHIgKyBYRUxfVFNSX09GRlNFVCwgcmVnX2RhdGEgfCBYRUxfVFNSX1BST0dfTUFDX0FERFIpOworCisJLyogV2FpdCBmb3IgRW1hY0xpdGUgdG8gZmluaXNoIHdpdGggdGhlIE1BQyBhZGRyZXNzIHVwZGF0ZSAqLworCXdoaWxlICgoaW5fYmUzMihhZGRyICsgWEVMX1RTUl9PRkZTRVQpICYKKwkJWEVMX1RTUl9QUk9HX01BQ19BRERSKSAhPSAwKQorCQk7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX3R4X3RpbWVvdXQgLSBDYWxsYmFjayBmb3IgVHggVGltZW91dAorICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIFR4IHRpbWUgb3V0IG9jY3VycyBmb3IgRW1hY2xpdGUgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2VycigmbHAtPm5kZXYtPmRldiwgIkV4Y2VlZGVkIHRyYW5zbWl0IHRpbWVvdXQgb2YgJWx1IG1zXG4iLAorCQlUWF9USU1FT1VUICogMTAwMFVMIC8gSFopOworCisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKworCS8qIFJlc2V0IHRoZSBkZXZpY2UgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPnJlc2V0X2xvY2ssIGZsYWdzKTsKKworCS8qIFNob3VsZG4ndCByZWFsbHkgYmUgbmVjZXNzYXJ5LCBidXQgc2hvdWxkbid0IGh1cnQgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwl4ZW1hY2xpdGVfZGlzYWJsZV9pbnRlcnJ1cHRzKGxwKTsKKwl4ZW1hY2xpdGVfZW5hYmxlX2ludGVycnVwdHMobHApOworCisJaWYgKGxwLT5kZWZlcnJlZF9za2IpIHsKKwkJZGV2X2tmcmVlX3NrYihscC0+ZGVmZXJyZWRfc2tiKTsKKwkJbHAtPmRlZmVycmVkX3NrYiA9IE5VTEw7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJfQorCisJLyogVG8gZXhjbHVkZSB0eCB0aW1lb3V0ICovCisJZGV2LT50cmFuc19zdGFydCA9IDB4ZmZmZmZmZmYgLSBUWF9USU1FT1VUIC0gVFhfVElNRU9VVDsKKworCS8qIFdlJ3JlIGFsbCByZWFkeSB0byBnby4gU3RhcnQgdGhlIHF1ZXVlICovCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5yZXNldF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJydXB0IEhhbmRsZXJzICovCisvKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiB4ZW1hY2xpdGVfdHhfaGFuZGxlciAtIEludGVycnVwdCBoYW5kbGVyIGZvciBmcmFtZXMgc2VudAorICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkIGFuZCBoYW5kbGVzIHRoZQorICogZGVmZXJyZWQgc2tiLCBpZiB0aGVyZSBpcyBvbmUuCisgKi8KK3N0YXRpYyB2b2lkIHhlbWFjbGl0ZV90eF9oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJaWYgKGxwLT5kZWZlcnJlZF9za2IpIHsKKwkJaWYgKHhlbWFjbGl0ZV9zZW5kX2RhdGEobHAsCisJCQkJCSh1OCAqKSBscC0+ZGVmZXJyZWRfc2tiLT5kYXRhLAorCQkJCQlscC0+ZGVmZXJyZWRfc2tiLT5sZW4pICE9IDApCisJCQlyZXR1cm47CisJCWVsc2UgeworCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBscC0+ZGVmZXJyZWRfc2tiLT5sZW47CisJCQlkZXZfa2ZyZWVfc2tiX2lycShscC0+ZGVmZXJyZWRfc2tiKTsKKwkJCWxwLT5kZWZlcnJlZF9za2IgPSBOVUxMOworCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCX0KKwl9Cit9CisKKy8qKgorICogeGVtYWNsaXRlX3J4X2hhbmRsZXItIEludGVycnVwdCBoYW5kbGVyIGZvciBmcmFtZXMgcmVjZWl2ZWQKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZvciBhIHNvY2tldCBidWZmZXIsIGZpbGxzIGl0IHdpdGggZGF0YQorICogcmVjZWl2ZWQgYW5kIGhhbmRzIGl0IG92ZXIgdG8gdGhlIFRDUC9JUCBzdGFjay4KKyAqLworc3RhdGljIHZvaWQgeGVtYWNsaXRlX3J4X2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgYWxpZ247CisJdTMyIGxlbjsKKworCWxlbiA9IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTjsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIEFMSUdOTUVOVCk7CisJaWYgKCFza2IpIHsKKwkJLyogQ291bGRuJ3QgZ2V0IG1lbW9yeS4gKi8KKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldl9lcnIoJmxwLT5uZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgcmVjZWl2ZSBidWZmZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBBIG5ldyBza2Igc2hvdWxkIGhhdmUgdGhlIGRhdGEgaGFsZndvcmQgYWxpZ25lZCwgYnV0IHRoaXMgY29kZSBpcworCSAqIGhlcmUganVzdCBpbiBjYXNlIHRoYXQgaXNuJ3QgdHJ1ZS4gQ2FsY3VsYXRlIGhvdyBtYW55CisJICogYnl0ZXMgd2Ugc2hvdWxkIHJlc2VydmUgdG8gZ2V0IHRoZSBkYXRhIHRvIHN0YXJ0IG9uIGEgd29yZAorCSAqIGJvdW5kYXJ5ICovCisJYWxpZ24gPSBCVUZGRVJfQUxJR04oc2tiLT5kYXRhKTsKKwlpZiAoYWxpZ24pCisJCXNrYl9yZXNlcnZlKHNrYiwgYWxpZ24pOworCisJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKworCWxlbiA9IHhlbWFjbGl0ZV9yZWN2X2RhdGEobHAsICh1OCAqKSBza2ItPmRhdGEpOworCisJaWYgKCFsZW4pIHsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJcmV0dXJuOworCX0KKworCXNrYl9wdXQoc2tiLCBsZW4pOwkvKiBUZWxsIHRoZSBza2IgaG93IG11Y2ggZGF0YSB3ZSBnb3QgKi8KKwlza2ItPmRldiA9IGRldjsJCS8qIEZpbGwgb3V0IHJlcXVpcmVkIG1ldGEtZGF0YSAqLworCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKworCW5ldGlmX3J4KHNrYik7CQkvKiBTZW5kIHRoZSBwYWNrZXQgdXBzdHJlYW0gKi8KK30KKworLyoqCisgKiB4ZW1hY2xpdGVfaW50ZXJydXB0IC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoaXMgZHJpdmVyCisgKiBAaXJxOglJcnEgb2YgdGhlIEVtYWNsaXRlIGRldmljZQorICogQGRldl9pZDoJVm9pZCBwb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZSBpbnN0YW5jZSB1c2VkIGFzIGNhbGxiYWNrCisgKgkJcmVmZXJlbmNlCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBUeCBhbmQgUnggaW50ZXJydXB0cyBvZiB0aGUgRW1hY0xpdGUgZGV2aWNlLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgeGVtYWNsaXRlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJYm9vbCB0eF9jb21wbGV0ZSA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHIgPSBscC0+YmFzZV9hZGRyOworCXUzMiB0eF9zdGF0dXM7CisKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBSeCBEYXRhIGF2YWlsYWJsZSAqLworCWlmICgoaW5fYmUzMihiYXNlX2FkZHIgKyBYRUxfUlNSX09GRlNFVCkgJiBYRUxfUlNSX1JFQ1ZfRE9ORV9NQVNLKSB8fAorCQkJKGluX2JlMzIoYmFzZV9hZGRyICsgWEVMX0JVRkZFUl9PRkZTRVQgKyBYRUxfUlNSX09GRlNFVCkKKwkJCSAmIFhFTF9SU1JfUkVDVl9ET05FX01BU0spKQorCisJCXhlbWFjbGl0ZV9yeF9oYW5kbGVyKGRldik7CisKKwkvKiBDaGVjayBpZiB0aGUgVHJhbnNtaXNzaW9uIGZvciB0aGUgZmlyc3QgYnVmZmVyIGlzIGNvbXBsZXRlZCAqLworCXR4X3N0YXR1cyA9IGluX2JlMzIoYmFzZV9hZGRyICsgWEVMX1RTUl9PRkZTRVQpOworCWlmICgoKHR4X3N0YXR1cyAmIFhFTF9UU1JfWE1JVF9CVVNZX01BU0spID09IDApICYmCisJCSh0eF9zdGF0dXMgJiBYRUxfVFNSX1hNSVRfQUNUSVZFX01BU0spICE9IDApIHsKKworCQl0eF9zdGF0dXMgJj0gflhFTF9UU1JfWE1JVF9BQ1RJVkVfTUFTSzsKKwkJb3V0X2JlMzIoYmFzZV9hZGRyICsgWEVMX1RTUl9PRkZTRVQsIHR4X3N0YXR1cyk7CisKKwkJdHhfY29tcGxldGUgPSAxOworCX0KKworCS8qIENoZWNrIGlmIHRoZSBUcmFuc21pc3Npb24gZm9yIHRoZSBzZWNvbmQgYnVmZmVyIGlzIGNvbXBsZXRlZCAqLworCXR4X3N0YXR1cyA9IGluX2JlMzIoYmFzZV9hZGRyICsgWEVMX0JVRkZFUl9PRkZTRVQgKyBYRUxfVFNSX09GRlNFVCk7CisJaWYgKCgodHhfc3RhdHVzICYgWEVMX1RTUl9YTUlUX0JVU1lfTUFTSykgPT0gMCkgJiYKKwkJKHR4X3N0YXR1cyAmIFhFTF9UU1JfWE1JVF9BQ1RJVkVfTUFTSykgIT0gMCkgeworCisJCXR4X3N0YXR1cyAmPSB+WEVMX1RTUl9YTUlUX0FDVElWRV9NQVNLOworCQlvdXRfYmUzMihiYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArIFhFTF9UU1JfT0ZGU0VULAorCQkJIHR4X3N0YXR1cyk7CisKKwkJdHhfY29tcGxldGUgPSAxOworCX0KKworCS8qIElmIHRoZXJlIHdhcyBhIFR4IGludGVycnVwdCwgY2FsbCB0aGUgVHggSGFuZGxlciAqLworCWlmICh0eF9jb21wbGV0ZSAhPSAwKQorCQl4ZW1hY2xpdGVfdHhfaGFuZGxlcihkZXYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9vcGVuIC0gT3BlbiB0aGUgbmV0d29yayBkZXZpY2UKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBNQUMgYWRkcmVzcywgcmVxdWVzdHMgYW4gSVJRIGFuZCBlbmFibGVzIGludGVycnVwdHMKKyAqIGZvciB0aGUgRW1hY2xpdGUgZGV2aWNlIGFuZCBzdGFydHMgdGhlIFR4IHF1ZXVlLgorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXR2YWw7CisKKwkvKiBKdXN0IHRvIGJlIHNhZmUsIHN0b3AgdGhlIGRldmljZSBmaXJzdCAqLworCXhlbWFjbGl0ZV9kaXNhYmxlX2ludGVycnVwdHMobHApOworCisJLyogU2V0IHRoZSBNQUMgYWRkcmVzcyBlYWNoIHRpbWUgb3BlbmVkICovCisJeGVtYWNsaXRlX3NldF9tYWNfYWRkcmVzcyhscCwgZGV2LT5kZXZfYWRkcik7CisKKwkvKiBHcmFiIHRoZSBJUlEgKi8KKwlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnhlbWFjbGl0ZV9pbnRlcnJ1cHQsIDAsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmxwLT5uZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgaW50ZXJydXB0ICVkXG4iLAorCQkJZGV2LT5pcnEpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIEVuYWJsZSBJbnRlcnJ1cHRzICovCisJeGVtYWNsaXRlX2VuYWJsZV9pbnRlcnJ1cHRzKGxwKTsKKworCS8qIFdlJ3JlIHJlYWR5IHRvIGdvICovCisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9jbG9zZSAtIENsb3NlIHRoZSBuZXR3b3JrIGRldmljZQorICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHN0b3BzIHRoZSBUeCBxdWV1ZSwgZGlzYWJsZXMgaW50ZXJydXB0cyBhbmQgZnJlZXMgdGhlIElSUSBmb3IKKyAqIHRoZSBFbWFjbGl0ZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgeGVtYWNsaXRlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXhlbWFjbGl0ZV9kaXNhYmxlX2ludGVycnVwdHMobHApOworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX2dldF9zdGF0cyAtIEdldCB0aGUgc3RhdHMgZm9yIHRoZSBuZXRfZGV2aWNlCisgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgJ25ldF9kZXZpY2Vfc3RhdHMnIHN0cnVjdHVyZSBmb3IgdGhlCisgKiBnaXZlbiBuZXR3b3JrIGRldmljZS4gVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgdXNhZ2Ugc3RhdGlzdGljcyBmb3IgdGhlIG5ldHdvcmsKKyAqIGRldmljZS4KKyAqCisgKiBSZXR1cm46CVBvaW50ZXIgdG8gdGhlIG5ldF9kZXZpY2Vfc3RhdHMgc3RydWN0dXJlLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnhlbWFjbGl0ZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gJmRldi0+c3RhdHM7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX3NlbmQgLSBUcmFuc21pdCBhIGZyYW1lCisgKiBAb3JpZ19za2I6CVBvaW50ZXIgdG8gdGhlIHNvY2tldCBidWZmZXIgdG8gYmUgdHJhbnNtaXR0ZWQKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIFR4IGJ1ZmZlciBvZiB0aGUgRW1hY2xpdGUgZGV2aWNlIGlzIGZyZWUgdG8gc2VuZAorICogZGF0YS4gSWYgc28sIGl0IGZpbGxzIHRoZSBUeCBidWZmZXIgd2l0aCBkYXRhIGZyb20gc29ja2V0IGJ1ZmZlciBkYXRhLAorICogdXBkYXRlcyB0aGUgc3RhdHMgYW5kIGZyZWVzIHRoZSBzb2NrZXQgYnVmZmVyLiBUaGUgVHggY29tcGxldGlvbiBpcyBzaWduYWxlZAorICogYnkgYW4gaW50ZXJydXB0LiBJZiB0aGUgVHggYnVmZmVyIGlzbid0IGZyZWUsIHRoZW4gdGhlIHNvY2tldCBidWZmZXIgaXMKKyAqIGRlZmVycmVkIGFuZCB0aGUgVHggcXVldWUgaXMgc3RvcHBlZCBzbyB0aGF0IHRoZSBkZWZlcnJlZCBzb2NrZXQgYnVmZmVyIGNhbgorICogYmUgdHJhbnNtaXR0ZWQgd2hlbiB0aGUgRW1hY2xpdGUgZGV2aWNlIGlzIGZyZWUgdG8gdHJhbnNtaXQgZGF0YS4KKyAqCisgKiBSZXR1cm46CTAsIGFsd2F5cy4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpuZXdfc2tiOworCXVuc2lnbmVkIGludCBsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxlbiA9IG9yaWdfc2tiLT5sZW47CisKKwluZXdfc2tiID0gb3JpZ19za2I7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPnJlc2V0X2xvY2ssIGZsYWdzKTsKKwlpZiAoeGVtYWNsaXRlX3NlbmRfZGF0YShscCwgKHU4ICopIG5ld19za2ItPmRhdGEsIGxlbikgIT0gMCkgeworCQkvKiBJZiB0aGUgRW1hY2xpdGUgVHggYnVmZmVyIGlzIGJ1c3ksIHN0b3AgdGhlIFR4IHF1ZXVlIGFuZAorCQkgKiBkZWZlciB0aGUgc2tiIGZvciB0cmFuc21pc3Npb24gYXQgYSBsYXRlciBwb2ludCB3aGVuIHRoZQorCQkgKiBjdXJyZW50IHRyYW5zbWlzc2lvbiBpcyBjb21wbGV0ZSAqLworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWxwLT5kZWZlcnJlZF9za2IgPSBuZXdfc2tiOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+cmVzZXRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPnJlc2V0X2xvY2ssIGZsYWdzKTsKKworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuOworCWRldl9rZnJlZV9za2IobmV3X3NrYik7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB4ZW1hY2xpdGVfaW9jdGwgLSBQZXJmb3JtIElPIENvbnRyb2wgb3BlcmF0aW9ucyBvbiB0aGUgbmV0d29yayBkZXZpY2UKKyAqIEBkZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlCisgKiBAcnE6CQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2UgcmVxdWVzdCBzdHJ1Y3R1cmUKKyAqIEBjbWQ6CUlPQ1RMIGNvbW1hbmQKKyAqCisgKiBUaGUgb25seSBJT0NUTCBvcGVyYXRpb24gc3VwcG9ydGVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgc2V0dGluZyB0aGUgTUFDCisgKiBhZGRyZXNzLiBBbiBlcnJvciBpcyByZXBvcnRlZCBpZiBhbnkgb3RoZXIgb3BlcmF0aW9ucyBhcmUgcmVxdWVzdGVkLgorICoKKyAqIFJldHVybjoJMCB0byBpbmRpY2F0ZSBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gKHN0cnVjdCBuZXRfbG9jYWwgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaHdfYWRkcl9kYXRhICpod19hZGRyID0gKHN0cnVjdCBod19hZGRyX2RhdGEgKikgJnJxLT5pZnJfaHdhZGRyOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NFVEhUT09MOgorCQlyZXR1cm4gLUVJTzsKKworCWNhc2UgU0lPQ1NJRkhXQUREUjoKKwkJZGV2X2VycigmbHAtPm5kZXYtPmRldiwgIlNJT0NTSUZIV0FERFJcbiIpOworCisJCS8qIENvcHkgTUFDIGFkZHJlc3MgaW4gZnJvbSB1c2VyIHNwYWNlICovCisJCWNvcHlfZnJvbV91c2VyKCh2b2lkIF9fZm9yY2UgKikgZGV2LT5kZXZfYWRkciwKKwkJCSAgICAgICAodm9pZCBfX3VzZXIgX19mb3JjZSAqKSBod19hZGRyLAorCQkJICAgICAgIElGSFdBRERSTEVOKTsKKwkJeGVtYWNsaXRlX3NldF9tYWNfYWRkcmVzcyhscCwgZGV2LT5kZXZfYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB4ZW1hY2xpdGVfcmVtb3ZlX25kZXYgLSBGcmVlIHRoZSBuZXR3b3JrIGRldmljZQorICogQG5kZXY6CVBvaW50ZXIgdG8gdGhlIG5ldHdvcmsgZGV2aWNlIHRvIGJlIGZyZWVkCisgKgorICogVGhpcyBmdW5jdGlvbiB1biBtYXBzIHRoZSBJTyByZWdpb24gb2YgdGhlIEVtYWNsaXRlIGRldmljZSBhbmQgZnJlZXMgdGhlIG5ldAorICogZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfcmVtb3ZlX25kZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaWYgKG5kZXYpIHsKKwkJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSAoc3RydWN0IG5ldF9sb2NhbCAqKSBuZXRkZXZfcHJpdihuZGV2KTsKKworCQlpZiAobHAtPmJhc2VfYWRkcikKKwkJCWlvdW5tYXAoKHZvaWQgX19pb21lbSBfX2ZvcmNlICopIChscC0+YmFzZV9hZGRyKSk7CisJCWZyZWVfbmV0ZGV2KG5kZXYpOworCX0KK30KKworLyoqCisgKiBnZXRfYm9vbCAtIEdldCBhIHBhcmFtZXRlciBmcm9tIHRoZSBPRiBkZXZpY2UKKyAqIEBvZmRldjoJUG9pbnRlciB0byBPRiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAczoJCVByb3BlcnR5IHRvIGJlIHJldHJpZXZlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gbG9va3MgZm9yIGEgcHJvcGVydHkgaW4gdGhlIGRldmljZSBub2RlIGFuZCByZXR1cm5zIHRoZSB2YWx1ZQorICogb2YgdGhlIHByb3BlcnR5IGlmIGl0cyBmb3VuZCBvciAwIGlmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZm91bmQuCisgKgorICogUmV0dXJuOglWYWx1ZSBvZiB0aGUgcGFyYW1ldGVyIGlmIHRoZSBwYXJhbWV0ZXIgaXMgZm91bmQsIG9yIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBib29sIGdldF9ib29sKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBjaGFyICpzKQoreworCXUzMiAqcCA9ICh1MzIgKilvZl9nZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsIHMsIE5VTEwpOworCisJaWYgKHApIHsKKwkJcmV0dXJuIChib29sKSpwOworCX0gZWxzZSB7CisJCWRldl93YXJuKCZvZmRldi0+ZGV2LCAiUGFyYW1ldGVyICVzIG5vdCBmb3VuZCwiCisJCQkiZGVmYXVsdGluZyB0byBmYWxzZVxuIiwgcyk7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4ZW1hY2xpdGVfbmV0ZGV2X29wczsKKworLyoqCisgKiB4ZW1hY2xpdGVfb2ZfcHJvYmUgLSBQcm9iZSBtZXRob2QgZm9yIHRoZSBFbWFjbGl0ZSBkZXZpY2UuCisgKiBAb2ZkZXY6CVBvaW50ZXIgdG8gT0YgZGV2aWNlIHN0cnVjdHVyZQorICogQG1hdGNoOglQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgdXNlZCBmb3IgbWF0Y2hpbmcgYSBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2JlcyBmb3IgdGhlIEVtYWNsaXRlIGRldmljZSBpbiB0aGUgZGV2aWNlIHRyZWUuCisgKiBJdCBpbml0aWFsaXplcyB0aGUgZHJpdmVyIGRhdGEgc3RydWN0dXJlIGFuZCB0aGUgaGFyZHdhcmUsIHNldHMgdGhlIE1BQworICogYWRkcmVzcyBhbmQgcmVnaXN0ZXJzIHRoZSBuZXR3b3JrIGRldmljZS4KKyAqCisgKiBSZXR1cm46CTAsIGlmIHRoZSBkcml2ZXIgaXMgYm91bmQgdG8gdGhlIEVtYWNsaXRlIGRldmljZSwgb3IKKyAqCQlhIG5lZ2F0aXZlIGVycm9yIGlmIHRoZXJlIGlzIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHhlbWFjbGl0ZV9vZl9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJc3RydWN0IHJlc291cmNlIHJfaXJxOyAvKiBJbnRlcnJ1cHQgcmVzb3VyY2VzICovCisJc3RydWN0IHJlc291cmNlIHJfbWVtOyAvKiBJTyBtZW0gcmVzb3VyY2VzICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwljb25zdCB2b2lkICptYWNfYWRkcmVzczsKKworCWludCByYyA9IDA7CisKKwlkZXZfaW5mbyhkZXYsICJEZXZpY2UgVHJlZSBQcm9iaW5nXG4iKTsKKworCS8qIEdldCBpb3NwYWNlIGZvciB0aGUgZGV2aWNlICovCisJcmMgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9mZGV2LT5ub2RlLCAwLCAmcl9tZW0pOworCWlmIChyYykgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgYWRkcmVzc1xuIik7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBHZXQgSVJRIGZvciB0aGUgZGV2aWNlICovCisJcmMgPSBvZl9pcnFfdG9fcmVzb3VyY2Uob2ZkZXYtPm5vZGUsIDAsICZyX2lycSk7CisJaWYgKHJjID09IE5PX0lSUSkgeworCQlkZXZfZXJyKGRldiwgIm5vIElSUSBmb3VuZFxuIik7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBDcmVhdGUgYW4gZXRoZXJuZXQgZGV2aWNlIGluc3RhbmNlICovCisJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2xvY2FsKSk7CisJaWYgKCFuZGV2KSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3NldF9kcnZkYXRhKGRldiwgbmRldik7CisKKwluZGV2LT5pcnEgPSByX2lycS5zdGFydDsKKwluZGV2LT5tZW1fc3RhcnQgPSByX21lbS5zdGFydDsKKwluZGV2LT5tZW1fZW5kID0gcl9tZW0uZW5kOworCisJbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlscC0+bmRldiA9IG5kZXY7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihuZGV2LT5tZW1fc3RhcnQsCisJCQkJbmRldi0+bWVtX2VuZCAtIG5kZXYtPm1lbV9zdGFydCArIDEsCisJCQkJRFJJVkVSX05BTUUpKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGRuJ3QgbG9jayBtZW1vcnkgcmVnaW9uIGF0ICVwXG4iLAorCQkJKHZvaWQgKiluZGV2LT5tZW1fc3RhcnQpOworCQlyYyA9IC1FQlVTWTsKKwkJZ290byBlcnJvcjI7CisJfQorCisJLyogR2V0IHRoZSB2aXJ0dWFsIGJhc2UgYWRkcmVzcyBmb3IgdGhlIGRldmljZSAqLworCWxwLT5iYXNlX2FkZHIgPSBpb3JlbWFwKHJfbWVtLnN0YXJ0LCByX21lbS5lbmQgLSByX21lbS5zdGFydCArIDEpOworCWlmIChOVUxMID09IGxwLT5iYXNlX2FkZHIpIHsKKwkJZGV2X2VycihkZXYsICJFbWFjTGl0ZTogQ291bGQgbm90IGFsbG9jYXRlIGlvbWVtXG4iKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIGVycm9yMTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmbHAtPnJlc2V0X2xvY2spOworCWxwLT5uZXh0X3R4X2J1Zl90b191c2UgPSAweDA7CisJbHAtPm5leHRfcnhfYnVmX3RvX3VzZSA9IDB4MDsKKwlscC0+dHhfcGluZ19wb25nID0gZ2V0X2Jvb2wob2ZkZXYsICJ4bG54LHR4LXBpbmctcG9uZyIpOworCWxwLT5yeF9waW5nX3BvbmcgPSBnZXRfYm9vbChvZmRldiwgInhsbngscngtcGluZy1wb25nIik7CisJbWFjX2FkZHJlc3MgPSBvZl9nZXRfbWFjX2FkZHJlc3Mob2ZkZXYtPm5vZGUpOworCisJaWYgKG1hY19hZGRyZXNzKQorCQkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzLiAqLworCQltZW1jcHkobmRldi0+ZGV2X2FkZHIsIG1hY19hZGRyZXNzLCA2KTsKKwllbHNlCisJCWRldl93YXJuKGRldiwgIk5vIE1BQyBhZGRyZXNzIGZvdW5kXG4iKTsKKworCS8qIENsZWFyIHRoZSBUeCBDU1IncyBpbiBjYXNlIHRoaXMgaXMgYSByZXN0YXJ0ICovCisJb3V0X2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9UU1JfT0ZGU0VULCAwKTsKKwlvdXRfYmUzMihscC0+YmFzZV9hZGRyICsgWEVMX0JVRkZFUl9PRkZTRVQgKyBYRUxfVFNSX09GRlNFVCwgMCk7CisKKwkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzIGluIHRoZSBFbWFjTGl0ZSBkZXZpY2UgKi8KKwl4ZW1hY2xpdGVfc2V0X21hY19hZGRyZXNzKGxwLCBuZGV2LT5kZXZfYWRkcik7CisKKwlkZXZfaW5mbyhkZXYsCisJCSAiTUFDIGFkZHJlc3MgaXMgbm93ICUyeDolMng6JTJ4OiUyeDolMng6JTJ4XG4iLAorCQkgbmRldi0+ZGV2X2FkZHJbMF0sIG5kZXYtPmRldl9hZGRyWzFdLAorCQkgbmRldi0+ZGV2X2FkZHJbMl0sIG5kZXYtPmRldl9hZGRyWzNdLAorCQkgbmRldi0+ZGV2X2FkZHJbNF0sIG5kZXYtPmRldl9hZGRyWzVdKTsKKworCW5kZXYtPm5ldGRldl9vcHMgPSAmeGVtYWNsaXRlX25ldGRldl9vcHM7CisJbmRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CisJbmRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOworCisJLyogRmluYWxseSwgcmVnaXN0ZXIgdGhlIGRldmljZSAqLworCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWlmIChyYykgeworCQlkZXZfZXJyKGRldiwKKwkJCSJDYW5ub3QgcmVnaXN0ZXIgbmV0d29yayBkZXZpY2UsIGFib3J0aW5nXG4iKTsKKwkJZ290byBlcnJvcjE7CisJfQorCisJZGV2X2luZm8oZGV2LAorCQkgIlhpbGlueCBFbWFjTGl0ZSBhdCAweCUwOFggbWFwcGVkIHRvIDB4JTA4WCwgaXJxPSVkXG4iLAorCQkgKHVuc2lnbmVkIGludCBfX2ZvcmNlKW5kZXYtPm1lbV9zdGFydCwKKwkJICh1bnNpZ25lZCBpbnQgX19mb3JjZSlscC0+YmFzZV9hZGRyLCBuZGV2LT5pcnEpOworCXJldHVybiAwOworCitlcnJvcjE6CisJcmVsZWFzZV9tZW1fcmVnaW9uKG5kZXYtPm1lbV9zdGFydCwgcl9tZW0uZW5kIC0gcl9tZW0uc3RhcnQgKyAxKTsKKworZXJyb3IyOgorCXhlbWFjbGl0ZV9yZW1vdmVfbmRldihuZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX29mX3JlbW92ZSAtIFVuYmluZCB0aGUgZHJpdmVyIGZyb20gdGhlIEVtYWNsaXRlIGRldmljZS4KKyAqIEBvZl9kZXY6CVBvaW50ZXIgdG8gT0YgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGlmIGEgZGV2aWNlIGlzIHBoeXNpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSBzeXN0ZW0gb3IKKyAqIGlmIHRoZSBkcml2ZXIgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkLiBJdCBmcmVlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCB0bworICogdGhlIGRldmljZS4KKyAqCisgKiBSZXR1cm46CTAsIGFsd2F5cy4KKyAqLworc3RhdGljIGludCBfX2RldmV4aXQgeGVtYWNsaXRlX29mX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9kZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mX2Rldi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKworCXJlbGVhc2VfbWVtX3JlZ2lvbihuZGV2LT5tZW1fc3RhcnQsIG5kZXYtPm1lbV9lbmQtbmRldi0+bWVtX3N0YXJ0ICsgMSk7CisKKwl4ZW1hY2xpdGVfcmVtb3ZlX25kZXYobmRldik7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHhlbWFjbGl0ZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB4ZW1hY2xpdGVfb3BlbiwKKwkubmRvX3N0b3AJCT0geGVtYWNsaXRlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB4ZW1hY2xpdGVfc2VuZCwKKwkubmRvX2RvX2lvY3RsCQk9IHhlbWFjbGl0ZV9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQJCT0geGVtYWNsaXRlX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0geGVtYWNsaXRlX2dldF9zdGF0cywKK307CisKKy8qIE1hdGNoIHRhYmxlIGZvciBPRiBwbGF0Zm9ybSBiaW5kaW5nICovCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4ZW1hY2xpdGVfb2ZfbWF0Y2hbXSBfX2RldmluaXRkYXRhID0geworCXsgLmNvbXBhdGlibGUgPSAieGxueCxvcGItZXRoZXJuZXRsaXRlLTEuMDEuYSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LG9wYi1ldGhlcm5ldGxpdGUtMS4wMS5iIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWV0aGVybmV0bGl0ZS0xLjAwLmEiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtZXRoZXJuZXRsaXRlLTIuMDAuYSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ldGhlcm5ldGxpdGUtMi4wMS5hIiwgfSwKKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGVtYWNsaXRlX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgeGVtYWNsaXRlX29mX2RyaXZlciA9IHsKKwkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwkubWF0Y2hfdGFibGUJPSB4ZW1hY2xpdGVfb2ZfbWF0Y2gsCisJLnByb2JlCQk9IHhlbWFjbGl0ZV9vZl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHhlbWFjbGl0ZV9vZl9yZW1vdmUpLAorfTsKKworLyoqCisgKiB4Z3Bpb3Bzc19pbml0IC0gSW5pdGlhbCBkcml2ZXIgcmVnaXN0cmF0aW9uIGNhbGwKKyAqCisgKiBSZXR1cm46CTAgdXBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIHVwb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgeGVtYWNsaXRlX2luaXQodm9pZCkKK3sKKwkvKiBObyBrZXJuZWwgYm9vdCBvcHRpb25zIHVzZWQsIHdlIGp1c3QgbmVlZCB0byByZWdpc3RlciB0aGUgZHJpdmVyICovCisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmeGVtYWNsaXRlX29mX2RyaXZlcik7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX2NsZWFudXAgLSBEcml2ZXIgdW4tcmVnaXN0cmF0aW9uIGNhbGwKKyAqLworc3RhdGljIHZvaWQgX19leGl0IHhlbWFjbGl0ZV9jbGVhbnVwKHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnhlbWFjbGl0ZV9vZl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh4ZW1hY2xpdGVfaW5pdCk7Cittb2R1bGVfZXhpdCh4ZW1hY2xpdGVfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggRXRoZXJuZXQgTUFDIExpdGUgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94dHNvbmljLmMgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKaW5kZXggNWE0YWQxNS4uMGM0NDEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveHRzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3h0c29uaWMuYwpAQCAtMjM5LDcgKzIzOSw3IEBACiAgKiBBY3R1YWxseSBwcm9iaW5nIGlzIHN1cGVyZmx1b3VzIGJ1dCB3ZSdyZSBwYXJhbm9pZC4KICAqLwogCi1pbnQgX19pbml0IHh0c29uaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK2ludCBfX2RldmluaXQgeHRzb25pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNvbmljX2xvY2FsICpscDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3llbGxvd2Zpbi5jIGIvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKaW5kZXggYzJmZDYxOC4uNDBhZDBkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKKysrIGIvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKQEAgLTM0Nyw3ICszNDcsOCBAQAogc3RhdGljIHZvaWQgeWVsbG93ZmluX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCB5ZWxsb3dmaW5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgeWVsbG93ZmluX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgeWVsbG93ZmluX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgeWVsbG93ZmluX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgeWVsbG93ZmluX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpOwogc3RhdGljIGludCB5ZWxsb3dmaW5fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCB5ZWxsb3dmaW5fZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGludHJfc3RhdHVzKTsKQEAgLTgxNiw3ICs4MTcsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHllbGxvd2Zpbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgeWVsbG93ZmluX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeWVsbG93ZmluX3ByaXZhdGUgKnlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBlbnRyeTsKQEAgLTgzOCw3ICs4NDAsNyBAQAogCQkJaWYgKHNrYl9wYWR0byhza2IsIGxlbikpIHsKIAkJCQl5cC0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCQl9CiAJCX0KIAl9CkBAIC04OTIsNyArODk0LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBZZWxsb3dmaW4gdHJhbnNtaXQgZnJhbWUgIyVkIHF1ZXVlZCBpbiBzbG90ICVkLlxuIiwKIAkJCSAgIGRldi0+bmFtZSwgeXAtPmN1cl90eCwgZW50cnkpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBhbGwgb2YgdGhlIFJ4IHRocmVhZCB3b3JrIGFuZCBjbGVhbnMgdXAKQEAgLTEzNjMsOCArMTM2NSw2IEBACiAJCXJldHVybiAwOwogCiAJY2FzZSBTSU9DU01JSVJFRzoJCS8qIFdyaXRlIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07CiAJCWlmIChkYXRhLT5waHlfaWQgPT0gbnAtPnBoeXNbMF0pIHsKIAkJCXUxNiB2YWx1ZSA9IGRhdGEtPnZhbF9pbjsKIAkJCXN3aXRjaCAoZGF0YS0+cmVnX251bSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvem5ldC5jIGIvZHJpdmVycy9uZXQvem5ldC5jCmluZGV4IDBhNjk5MmQuLmEwMzg0YjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3puZXQuYworKysgYi9kcml2ZXJzL25ldC96bmV0LmMKQEAgLTE1Niw3ICsxNTYsOCBAQAogfTsKIAogc3RhdGljIGludAl6bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50CXpuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgem5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCB6bmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogc3RhdGljIHZvaWQJem5ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQJem5ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTUzNCw3ICs1MzUsNyBAQAogCW5ldGlmX3dha2VfcXVldWUgKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgem5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHpuZXRfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IHpuZXRfcHJpdmF0ZSAqem5ldCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01NDYsNyArNTQ3LDcgQEAKIAogCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9CiAKQEAgLTYwMCw3ICs2MDEsNyBAQAogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXR0ZXIgcXVldWVkLCBsZW5ndGggJWQuXG4iLCBkZXYtPm5hbWUsIGxlbmd0aCk7CiAJfQogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBUaGUgWk5FVCBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwppbmRleCBmOTliYzdmLi5hN2ViNzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCkBAIC01NzUsNyArNTc1LDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfU1VTUEVORCk7CkBAIC02MTMsNyArNjEzLDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19TVVNQRU5EKTsKQEAgLTY3Miw3ICs2NzIsNyBAQAogc3RhdGljIGludCBwY2lfcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOwogCWludCBlcnJvciA9IDA7CiAKIAkvKgpAQCAtNzExLDcgKzcxMSw3IEBACiBzdGF0aWMgaW50IHBjaV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfRlJFRVpFKTsKQEAgLTc4MCw3ICs3ODAsNyBAQAogc3RhdGljIGludCBwY2lfcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7Ci0Jc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCkBAIC03OTksNyArNzk5LDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOwogCiAJaWYgKHBjaV9oYXNfbGVnYWN5X3BtX3N1cHBvcnQocGNpX2RldikpCiAJCXJldHVybiBwY2lfbGVnYWN5X3N1c3BlbmQoZGV2LCBQTVNHX0hJQkVSTkFURSk7CkBAIC04NzIsNyArODcyLDcgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CiAJaW50IGVycm9yID0gMDsKIAogCS8qCkBAIC05MTAsNyArOTEwLDcgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KIAotc3RydWN0IGRldl9wbV9vcHMgcGNpX2Rldl9wbV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY2lfZGV2X3BtX29wcyA9IHsKIAkucHJlcGFyZSA9IHBjaV9wbV9wcmVwYXJlLAogCS5jb21wbGV0ZSA9IHBjaV9wbV9jb21wbGV0ZSwKIAkuc3VzcGVuZCA9IHBjaV9wbV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwppbmRleCBhMmFkNTNlLi5hZjA0ZjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwpAQCAtNTMsNyArNTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBocF93bWlfYmlvc19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBfX2V4aXQgaHBfd21pX2Jpb3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgaW50IGhwX3dtaV9yZXN1bWVfaGFuZGxlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOworc3RhdGljIGludCBocF93bWlfcmVzdW1lX2hhbmRsZXIoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKIAogc3RydWN0IGJpb3NfYXJncyB7CiAJdTMyIHNpZ25hdHVyZTsKQEAgLTk0LDE0ICs5NCwxOSBAQAogc3RhdGljIHN0cnVjdCByZmtpbGwgKmJsdWV0b290aF9yZmtpbGw7CiBzdGF0aWMgc3RydWN0IHJma2lsbCAqd3dhbl9yZmtpbGw7CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBocF93bWlfcG1fb3BzID0geworCS5yZXN1bWUgID0gaHBfd21pX3Jlc3VtZV9oYW5kbGVyLAorCS5yZXN0b3JlICA9IGhwX3dtaV9yZXN1bWVfaGFuZGxlciwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhwX3dtaV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSAiaHAtd21pIiwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gImhwLXdtaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmaHBfd21pX3BtX29wcywKIAl9LAogCS5wcm9iZSA9IGhwX3dtaV9iaW9zX3NldHVwLAogCS5yZW1vdmUgPSBocF93bWlfYmlvc19yZW1vdmUsCi0JLnJlc3VtZSA9IGhwX3dtaV9yZXN1bWVfaGFuZGxlciwKIH07CiAKIHN0YXRpYyBpbnQgaHBfd21pX3BlcmZvcm1fcXVlcnkoaW50IHF1ZXJ5LCBpbnQgd3JpdGUsIGludCB2YWx1ZSkKQEAgLTUxMiw3ICs1MTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhwX3dtaV9yZXN1bWVfaGFuZGxlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IGhwX3dtaV9yZXN1bWVfaGFuZGxlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJLyoKIAkgKiBIYXJkd2FyZSBzdGF0ZSBtYXkgaGF2ZSBjaGFuZ2VkIHdoaWxlIHN1c3BlbmRlZCwgc28gdHJpZ2dlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9iaW9zY2FsbHMuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvYmlvc2NhbGxzLmMKaW5kZXggN2U2YjVhMy4uZmM4Mzc4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvYmlvc2NhbGxzLmMKKysrIGIvZHJpdmVycy9wbnAvcG5wYmlvcy9iaW9zY2FsbHMuYwpAQCAtNTUsMTIgKzU1LDEzIEBACiAKICNkZWZpbmUgUTJfU0VUX1NFTChjcHUsIHNlbG5hbWUsIGFkZHJlc3MsIHNpemUpIFwKIGRvIHsgXAotc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZSgoY3B1KSk7IFwKLXNldF9iYXNlKGdkdFsoc2VsbmFtZSkgPj4gM10sICh1MzIpKGFkZHJlc3MpKTsgXAotc2V0X2xpbWl0KGdkdFsoc2VsbmFtZSkgPj4gM10sIHNpemUpOyBcCisJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZSgoY3B1KSk7IFwKKwlzZXRfZGVzY19iYXNlKCZnZHRbKHNlbG5hbWUpID4+IDNdLCAodTMyKShhZGRyZXNzKSk7IFwKKwlzZXRfZGVzY19saW1pdCgmZ2R0WyhzZWxuYW1lKSA+PiAzXSwgKHNpemUpIC0gMSk7IFwKIH0gd2hpbGUoMCkKIAotc3RhdGljIHN0cnVjdCBkZXNjX3N0cnVjdCBiYWRfYmlvc19kZXNjOworc3RhdGljIHN0cnVjdCBkZXNjX3N0cnVjdCBiYWRfYmlvc19kZXNjID0gR0RUX0VOVFJZX0lOSVQoMHg0MDkyLAorCQkJKHVuc2lnbmVkIGxvbmcpX192YSgweDQwMFVMKSwgUEFHRV9TSVpFIC0gMHg0MDAgLSAxKTsKIAogLyoKICAqIEF0IHNvbWUgcG9pbnQgd2Ugd2FudCB0byB1c2UgdGhpcyBzdGFjayBmcmFtZSBwb2ludGVyIHRvIHVud2luZApAQCAtNDc2LDE5ICs0NzcsMTUgQEAKIAlwbnBfYmlvc19jYWxscG9pbnQub2Zmc2V0ID0gaGVhZGVyLT5maWVsZHMucG0xNm9mZnNldDsKIAlwbnBfYmlvc19jYWxscG9pbnQuc2VnbWVudCA9IFBOUF9DUzE2OwogCi0JYmFkX2Jpb3NfZGVzYy5hID0gMDsKLQliYWRfYmlvc19kZXNjLmIgPSAweDAwNDA5MjAwOwotCi0Jc2V0X2Jhc2UoYmFkX2Jpb3NfZGVzYywgX192YSgodW5zaWduZWQgbG9uZykweDQwIDw8IDQpKTsKLQlfc2V0X2xpbWl0KChjaGFyICopJmJhZF9iaW9zX2Rlc2MsIDQwOTUgLSAoMHg0MCA8PCA0KSk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IGRlc2Nfc3RydWN0ICpnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShpKTsKIAkJaWYgKCFnZHQpCiAJCQljb250aW51ZTsKLQkJc2V0X2Jhc2UoZ2R0W0dEVF9FTlRSWV9QTlBCSU9TX0NTMzJdLCAmcG5wX2Jpb3NfY2FsbGZ1bmMpOwotCQlzZXRfYmFzZShnZHRbR0RUX0VOVFJZX1BOUEJJT1NfQ1MxNl0sCi0JCQkgX192YShoZWFkZXItPmZpZWxkcy5wbTE2Y3NlZykpOwotCQlzZXRfYmFzZShnZHRbR0RUX0VOVFJZX1BOUEJJT1NfRFNdLAotCQkJIF9fdmEoaGVhZGVyLT5maWVsZHMucG0xNmRzZWcpKTsKKwkJc2V0X2Rlc2NfYmFzZSgmZ2R0W0dEVF9FTlRSWV9QTlBCSU9TX0NTMzJdLAorCQkJICh1bnNpZ25lZCBsb25nKSZwbnBfYmlvc19jYWxsZnVuYyk7CisJCXNldF9kZXNjX2Jhc2UoJmdkdFtHRFRfRU5UUllfUE5QQklPU19DUzE2XSwKKwkJCSAodW5zaWduZWQgbG9uZylfX3ZhKGhlYWRlci0+ZmllbGRzLnBtMTZjc2VnKSk7CisJCXNldF9kZXNjX2Jhc2UoJmdkdFtHRFRfRU5UUllfUE5QQklPU19EU10sCisJCQkgKHVuc2lnbmVkIGxvbmcpX192YShoZWFkZXItPmZpZWxkcy5wbTE2ZHNlZykpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggZjM3MGY4ZC4uYzYzYmFiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTM1MCw2ICszNTAsOCBAQAogCUNMQVdfREJGX1RFWFRfKDQsIHRyYWNlLCAiY2xhd3R4JWQiLCByYyk7CiAJaWYgKHJjKQogCQlyYyA9IE5FVERFVl9UWF9CVVNZOworCWVsc2UKKwkJcmMgPSBORVRERVZfVFhfT0s7CiAgICAgICAgIHJldHVybiByYzsKIH0gICAvKiAgZW5kIG9mIGNsYXdfdHggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKaW5kZXggMjIyZTQ3My4uYzViODM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCkBAIC0xNjQsNyArMTY0LDYgQEAKIAkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwogCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2JsZW47CiAJCW5ldGlmX3J4X25pKHNrYik7Ci0JCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCWlmIChsZW4gPiAwKSB7CiAJCQlza2JfcHVsbChwc2tiLCBoZWFkZXItPmxlbmd0aCk7CiAJCQlpZiAoc2tiX3RhaWxyb29tKHBza2IpIDwgTExfSEVBREVSX0xFTkdUSCkgewpAQCAtODgwLDcgKzg3OSw3IEBACiAJCQkJIiVzKCVzKTogTlVMTCBza19idWZmIHBhc3NlZCIsCiAJCQkJCUNUQ01fRlVOVEFJTCwgZGV2LT5uYW1lKTsKIAkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgKExMX0hFQURFUl9MRU5HVEggKyAyKSkgewogCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKQEAgLTg4OCw3ICs4ODcsNyBAQAogCQkJQ1RDTV9GVU5UQUlMLCBkZXYtPm5hbWUsIExMX0hFQURFUl9MRU5HVEggKyAyKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCS8qCkBAIC05MDEsNyArOTAwLDcgQEAKIAkJcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJcHJpdi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKGN0Y21fdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkKQEAgLTkxMCw3ICs5MDksNyBAQAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChjdGNtX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyogdW5tZXJnZWQgTVBDIHZhcmlhbnQgb2YgY3RjbV90eCAqLwpAQCAtMTAwOCw3ICsxMDA3LDcgQEAKIAlpZiAoZG9fZGVidWcpCiAJCU1QQ19EQkZfREVWX05BTUUoVFJBQ0UsIGRldiwgImV4aXQiKTsKIAotCXJldHVybiAwOwkvKiBoYW5kbGUgZnJlZWluZyBvZiBza2IgaGVyZSAqLworCXJldHVybiBORVRERVZfVFhfT0s7CS8qIGhhbmRsZSBmcmVlaW5nIG9mIHNrYiBoZXJlICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggOGM2NzU5MC4uYTcwZGU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0xNTUzLDI0ICsxNTUzLDI0IEBACiAJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBsY3NfaGVhZGVyICpoZWFkZXI7Ci0JaW50IHJjID0gMDsKKwlpbnQgcmMgPSBORVRERVZfVFhfT0s7CiAKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJoYXJkeG1pdCIpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJaWYgKGNhcmQtPnN0YXRlICE9IERFVl9TVEFURV9VUCkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWNhcmQtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGNhcmQtPmRldik7CiAJc3Bpbl9sb2NrKCZjYXJkLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKaW5kZXggODdkZmYxMS4uOTIxNWZiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKQEAgLTY3Niw3ICs2NzYsNiBAQAogCQkgKiB3ZSBtdXN0IHVzZSBuZXRpZl9yeF9uaSgpIGluc3RlYWQgb2YgbmV0aWZfcngoKQogCQkgKi8KIAkJbmV0aWZfcnhfbmkoc2tiKTsKLQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJc2tiX3B1bGwocHNrYiwgaGVhZGVyLT5uZXh0KTsKIAkJc2tiX3B1dChwc2tiLCBORVRJVUNWX0hEUkxFTik7CiAJfQpAQCAtMTM3NiwxNCArMTM3NSwxNCBAQAogCWlmIChza2IgPT0gTlVMTCkgewogCQlJVUNWX0RCRl9URVhUKGRhdGEsIDIsICJuZXRpdWN2X3R4OiBza2IgaXMgTlVMTFxuIik7CiAJCXByaXZwdHItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IE5FVElVQ1ZfSERSTEVOKSB7CiAJCUlVQ1ZfREJGX1RFWFQoZGF0YSwgMiwKIAkJCSJuZXRpdWN2X3R4OiBza2JfaGVhZHJvb20gPCBORVRJVUNWX0hEUkxFTlxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcHJpdnB0ci0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKioKQEAgLTEzOTUsNyArMTM5NCw3IEBACiAJCXByaXZwdHItPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJcHJpdnB0ci0+c3RhdHMudHhfZXJyb3JzKys7CiAJCXByaXZwdHItPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmIChuZXRpdWN2X3Rlc3RfYW5kX3NldF9idXN5KGRldikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCmluZGV4IDQ0N2UxZDEuLjMxYTJiNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaApAQCAtNDM1LDYgKzQzNSw3IEBACiAJICogaW5kZXggb2YgYnVmZmVyIHRvIGJlIGZpbGxlZCBieSBkcml2ZXI7IHN0YXRlIEVNUFRZIG9yIFBBQ0tJTkcKIAkgKi8KIAlpbnQgbmV4dF9idWZfdG9fZmlsbDsKKwlpbnQgc3luY19pcWRpb19lcnJvcjsKIAkvKgogCSAqIG51bWJlciBvZiBidWZmZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBmaWxsZWQgKFBSSU1FRCkKIAkgKiAtPiB0aGVzZSBidWZmZXJzIGFyZSBoYXJkd2FyZS1vd25lZApAQCAtNjg1LDYgKzY4NiwxNCBAQAogCWludCBpc192bWFjOwogfTsKIAorc3RydWN0IHFldGhfc2tiX2RhdGEgeworCV9fdTMyIG1hZ2ljOworCWludCBjb3VudDsKK307CisKKyNkZWZpbmUgUUVUSF9TS0JfTUFHSUMgMHg3MTY1NzQ2OAorI2RlZmluZSBRRVRIX1NJR0FfQ0MyX1JFVFJJRVMgMworCiBzdHJ1Y3QgcWV0aF9jYXJkIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJZW51bSBxZXRoX2NhcmRfc3RhdGVzIHN0YXRlOwpAQCAtODM0LDcgKzg0Myw2IEBACiBpbnQgcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICosIGludCwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqLAogCWludCAoKnJlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3JlcGx5KiwgdW5zaWduZWQgbG9uZyksCiAJdm9pZCAqcmVwbHlfcGFyYW0pOwotaW50IHFldGhfZ2V0X2Nhc3RfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBza19idWZmICopOwogaW50IHFldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LCBpbnQpOwogaW50IHFldGhfZ2V0X2VsZW1lbnRzX25vKHN0cnVjdCBxZXRoX2NhcmQgKiwgdm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogaW50IHFldGhfZG9fc2VuZF9wYWNrZXRfZmFzdChzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCBkNTM2MjFjLi5jNGE0MmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC05MjcsOCArOTI3LDggQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKLQkJIHN0cnVjdCBxZXRoX3FkaW9fb3V0X2J1ZmZlciAqYnVmKQorc3RhdGljIHZvaWQgX19xZXRoX2NsZWFyX291dHB1dF9idWZmZXIoc3RydWN0IHFldGhfcWRpb19vdXRfcSAqcXVldWUsCisJCSBzdHJ1Y3QgcWV0aF9xZGlvX291dF9idWZmZXIgKmJ1ZiwgdW5zaWduZWQgaW50IHFldGhfc2tpcF9za2IpCiB7CiAJaW50IGk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTkzNywxMSArOTM3LDEzIEBACiAJaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzICYgMHg0MCkKIAkJYXRvbWljX2RlYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwogCi0Jc2tiID0gc2tiX2RlcXVldWUoJmJ1Zi0+c2tiX2xpc3QpOwotCXdoaWxlIChza2IpIHsKLQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJaWYgKCFxZXRoX3NraXBfc2tiKSB7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKKwkJd2hpbGUgKHNrYikgeworCQkJYXRvbWljX2RlYygmc2tiLT51c2Vycyk7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJc2tiID0gc2tiX2RlcXVldWUoJmJ1Zi0+c2tiX2xpc3QpOworCQl9CiAJfQogCWZvciAoaSA9IDA7IGkgPCBRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpOyArK2kpIHsKIAkJaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmFkZHIgJiYgYnVmLT5pc19oZWFkZXJbaV0pCkBAIC05NTcsNiArOTU5LDEyIEBACiAJYXRvbWljX3NldCgmYnVmLT5zdGF0ZSwgUUVUSF9RRElPX0JVRl9FTVBUWSk7CiB9CiAKK3N0YXRpYyB2b2lkIHFldGhfY2xlYXJfb3V0cHV0X2J1ZmZlcihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSwKKwkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWYpCit7CisJX19xZXRoX2NsZWFyX291dHB1dF9idWZmZXIocXVldWUsIGJ1ZiwgMCk7Cit9CisKIHZvaWQgcWV0aF9jbGVhcl9xZGlvX2J1ZmZlcnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKIAlpbnQgaSwgajsKQEAgLTExNTIsOCArMTE2MCw5IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZihzbHIsIHN0cnVjdCBxZXRoX2NhcmQsCiAJCQkJCXFldGhfc2VydmljZV9sZXZlbCk7Ci0Jc2VxX3ByaW50ZihtLCAicWV0aDogJXMgZmlybXdhcmUgbGV2ZWwgJXNcbiIsIENBUkRfQlVTX0lEKGNhcmQpLAotCQkJY2FyZC0+aW5mby5tY2xfbGV2ZWwpOworCWlmIChjYXJkLT5pbmZvLm1jbF9sZXZlbFswXSkKKwkJc2VxX3ByaW50ZihtLCAicWV0aDogJXMgZmlybXdhcmUgbGV2ZWwgJXNcbiIsCisJCQlDQVJEX0JVU19JRChjYXJkKSwgY2FyZC0+aW5mby5tY2xfbGV2ZWwpOwogfQogCiBzdGF0aWMgc3RydWN0IHFldGhfY2FyZCAqcWV0aF9hbGxvY19jYXJkKHZvaWQpCkBAIC0yNjg1LDYgKzI2OTQsMTMgQEAKIAlpbnQgc2JhbGYxNSA9IGJ1ZmZlci0+YnVmZmVyLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmY7CiAKIAlRRVRIX0RCRl9URVhUKFRSQUNFLCA2LCAiaGRzbmRlcnIiKTsKKwlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgeworCQlpZiAoc2JhbGYxNSA9PSAwKSB7CisJCQlxZGlvX2VyciA9IDA7CisJCX0gZWxzZSB7CisJCQlxZGlvX2VyciA9IDE7CisJCX0KKwl9CiAJcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwgcWRpb19lcnIsICJxb3V0ZXJyIik7CiAKIAlpZiAoIXFkaW9fZXJyKQpAQCAtMjgxNyw2ICsyODMzLDcgQEAKIAkJfQogCX0KIAorCXF1ZXVlLT5zeW5jX2lxZGlvX2Vycm9yID0gMDsKIAlxdWV1ZS0+Y2FyZC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7CiAJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fY250Kys7CkBAIC0yODMyLDYgKzI4NDksMTAgQEAKIAkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb190aW1lICs9CiAJCQlxZXRoX2dldF9taWNyb3MoKSAtCiAJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CisJaWYgKHJjID4gMCkgeworCQlpZiAoIShyYyAmIFFESU9fRVJST1JfU0lHQV9CVVNZKSkKKwkJCXF1ZXVlLT5zeW5jX2lxZGlvX2Vycm9yID0gcmMgJiAzOworCX0KIAlpZiAocmMpIHsKIAkJcXVldWUtPmNhcmQtPnN0YXRzLnR4X2Vycm9ycyArPSBjb3VudDsKIAkJLyogaWdub3JlIHRlbXBvcmFyeSBTSUdBIGVycm9ycyB3aXRob3V0IGJ1c3kgY29uZGl0aW9uICovCkBAIC0yODk5LDYgKzI5MjAsNyBAQAogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXNbX19xdWV1ZV07CiAJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7CiAJaW50IGk7CisJdW5zaWduZWQgcWV0aF9zZW5kX2VycjsKIAogCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDYsICJxZG91aGRsIik7CiAJaWYgKHFkaW9fZXJyb3IgJiBRRElPX0VSUk9SX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTikgewpAQCAtMjkxNSw4ICsyOTM3LDkgQEAKIAl9CiAJZm9yIChpID0gZmlyc3RfZWxlbWVudDsgaSA8IChmaXJzdF9lbGVtZW50ICsgY291bnQpOyArK2kpIHsKIAkJYnVmZmVyID0gJnF1ZXVlLT5idWZzW2kgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9RXTsKLQkJcWV0aF9oYW5kbGVfc2VuZF9lcnJvcihjYXJkLCBidWZmZXIsIHFkaW9fZXJyb3IpOwotCQlxZXRoX2NsZWFyX291dHB1dF9idWZmZXIocXVldWUsIGJ1ZmZlcik7CisJCXFldGhfc2VuZF9lcnIgPSBxZXRoX2hhbmRsZV9zZW5kX2Vycm9yKGNhcmQsIGJ1ZmZlciwgcWRpb19lcnJvcik7CisJCV9fcWV0aF9jbGVhcl9vdXRwdXRfYnVmZmVyKHF1ZXVlLCBidWZmZXIsCisJCQkocWV0aF9zZW5kX2VyciA9PSBRRVRIX1NFTkRfRVJST1JfUkVUUlkpID8gMSA6IDApOwogCX0KIAlhdG9taWNfc3ViKGNvdW50LCAmcXVldWUtPnVzZWRfYnVmZmVycyk7CiAJLyogY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgb24gdGhpcyBvdXRib3VuZCBxdWV1ZSAqLwpAQCAtMjkzMCw1NSArMjk1Myw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChxZXRoX3FkaW9fb3V0cHV0X2hhbmRsZXIpOwogCi1pbnQgcWV0aF9nZXRfY2FzdF90eXBlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JaW50IGNhc3RfdHlwZSA9IFJUTl9VTlNQRUM7Ci0KLQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKLQkJcmV0dXJuIGNhc3RfdHlwZTsKLQotCWlmIChza2JfZHN0KHNrYikgJiYgc2tiX2RzdChza2IpLT5uZWlnaGJvdXIpIHsKLQkJY2FzdF90eXBlID0gc2tiX2RzdChza2IpLT5uZWlnaGJvdXItPnR5cGU7Ci0JCWlmICgoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpIHx8Ci0JCSAgICAoY2FzdF90eXBlID09IFJUTl9NVUxUSUNBU1QpIHx8Ci0JCSAgICAoY2FzdF90eXBlID09IFJUTl9BTllDQVNUKSkKLQkJCXJldHVybiBjYXN0X3R5cGU7Ci0JCWVsc2UKLQkJCXJldHVybiBSVE5fVU5TUEVDOwotCX0KLQkvKiB0cnkgc29tZXRoaW5nIGVsc2UgKi8KLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUFY2KQotCQlyZXR1cm4gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpWzI0XSA9PSAweGZmKSA/Ci0JCQkJUlROX01VTFRJQ0FTVCA6IDA7Ci0JZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUCkKLQkJcmV0dXJuICgoc2tiX25ldHdvcmtfaGVhZGVyKHNrYilbMTZdICYgMHhmMCkgPT0gMHhlMCkgPwotCQkJCVJUTl9NVUxUSUNBU1QgOiAwOwotCS8qIC4uLiAqLwotCWlmICghbWVtY21wKHNrYi0+ZGF0YSwgc2tiLT5kZXYtPmJyb2FkY2FzdCwgNikpCi0JCXJldHVybiBSVE5fQlJPQURDQVNUOwotCWVsc2UgewotCQl1MTYgaGRyX21hYzsKLQotCQloZHJfbWFjID0gKigodTE2ICopc2tiLT5kYXRhKTsKLQkJLyogdHIgbXVsdGljYXN0PyAqLwotCQlzd2l0Y2ggKGNhcmQtPmluZm8ubGlua190eXBlKSB7Ci0JCWNhc2UgUUVUSF9MSU5LX1RZUEVfSFNUUjoKLQkJY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSOgotCQkJaWYgKChoZHJfbWFjID09IFFFVEhfVFJfTUFDX05DKSB8fAotCQkJICAgIChoZHJfbWFjID09IFFFVEhfVFJfTUFDX0MpKQotCQkJCXJldHVybiBSVE5fTVVMVElDQVNUOwotCQkJYnJlYWs7Ci0JCS8qIGV0aCBvciBzbyBtdWx0aWNhc3Q/ICovCi0JCWRlZmF1bHQ6Ci0JCWlmICgoaGRyX21hYyA9PSBRRVRIX0VUSF9NQUNfVjQpIHx8Ci0JCQkgICAgKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y2KSkKLQkJCQlyZXR1cm4gUlROX01VTFRJQ0FTVDsKLQkJfQotCX0KLQlyZXR1cm4gY2FzdF90eXBlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9nZXRfY2FzdF90eXBlKTsKLQogaW50IHFldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlpbnQgaXB2LCBpbnQgY2FzdF90eXBlKQogewpAQCAtMzE1OSw3ICszMTMzLDEwIEBACiAJCWludCBvZmZzZXQsIGludCBoZF9sZW4pCiB7CiAJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CisJc3RydWN0IHFldGhfc2tiX2RhdGEgKnJldHJ5X2N0cmw7CiAJaW50IGluZGV4OworCWludCByYzsKIAogCS8qIHNwaW4gdW50aWwgd2UgZ2V0IHRoZSBxdWV1ZSAuLi4gKi8KIAl3aGlsZSAoYXRvbWljX2NtcHhjaGcoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCwKQEAgLTMxNzgsNiArMzE1NSwyNSBAQAogCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CiAJcWV0aF9maWxsX2J1ZmZlcihxdWV1ZSwgYnVmZmVyLCBza2IsIGhkciwgb2Zmc2V0LCBoZF9sZW4pOwogCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgaW5kZXgsIDEpOworCWlmIChxdWV1ZS0+c3luY19pcWRpb19lcnJvciA9PSAyKSB7CisJCXNrYjEgPSBza2JfZGVxdWV1ZSgmYnVmZmVyLT5za2JfbGlzdCk7CisJCXdoaWxlIChza2IxKSB7CisJCQlhdG9taWNfZGVjKCZza2IxLT51c2Vycyk7CisJCQlza2IxID0gc2tiX2RlcXVldWUoJmJ1ZmZlci0+c2tiX2xpc3QpOworCQl9CisJCXJldHJ5X2N0cmwgPSAoc3RydWN0IHFldGhfc2tiX2RhdGEgKikgJnNrYi0+Y2JbMTZdOworCQlpZiAocmV0cnlfY3RybC0+bWFnaWMgIT0gUUVUSF9TS0JfTUFHSUMpIHsKKwkJCXJldHJ5X2N0cmwtPm1hZ2ljID0gUUVUSF9TS0JfTUFHSUM7CisJCQlyZXRyeV9jdHJsLT5jb3VudCA9IDA7CisJCX0KKwkJaWYgKHJldHJ5X2N0cmwtPmNvdW50IDwgUUVUSF9TSUdBX0NDMl9SRVRSSUVTKSB7CisJCQlyZXRyeV9jdHJsLT5jb3VudCsrOworCQkJcmMgPSBkZXZfcXVldWVfeG1pdChza2IpOworCQl9IGVsc2UgeworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCVFFVEhfREJGX1RFWFQoUUVSUiwgMiwgInFyZHJvcCIpOworCQl9CisJfQogCXJldHVybiAwOwogb3V0OgogCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCmluZGV4IDU2ODQ2NWQuLjMzNTA1YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMubGF5ZXIyID8gMTowKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgY2FyZC0+b3B0aW9ucy5sYXllcjIpOwogfQogCiBzdGF0aWMgc3NpemVfdCBxZXRoX2Rldl9sYXllcjJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggNjkxY2VjZC4uZjRmM2NhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC0yMTYsMzYgKzIxNiwxNiBAQAogCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5tY2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBxZXRoX2wyX2dldF9wYWNrZXRfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJc3RydWN0IHFldGhfaGRyICpoZHIsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIGludCBxZXRoX2wyX2dldF9jYXN0X3R5cGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JX191MTYgaGRyX21hYzsKLQotCWlmICghbWVtY21wKHNrYi0+ZGF0YSArIFFFVEhfSEVBREVSX1NJWkUsCi0JCSAgICBza2ItPmRldi0+YnJvYWRjYXN0LCA2KSkgewotCQkvKiBicm9hZGNhc3Q/ICovCi0JCWhkci0+aGRyLmwyLmZsYWdzWzJdIHw9IFFFVEhfTEFZRVIyX0ZMQUdfQlJPQURDQVNUOwotCQlyZXR1cm47Ci0JfQotCWhkcl9tYWMgPSAqKChfX3UxNiAqKXNrYi0+ZGF0YSk7Ci0JLyogdHIgbXVsdGljYXN0PyAqLwotCXN3aXRjaCAoY2FyZC0+aW5mby5saW5rX3R5cGUpIHsKLQljYXNlIFFFVEhfTElOS19UWVBFX0hTVFI6Ci0JY2FzZSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSOgotCQlpZiAoKGhkcl9tYWMgPT0gUUVUSF9UUl9NQUNfTkMpIHx8Ci0JCSAgICAoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19DKSkKLQkJCWhkci0+aGRyLmwyLmZsYWdzWzJdIHw9IFFFVEhfTEFZRVIyX0ZMQUdfTVVMVElDQVNUOwotCQllbHNlCi0JCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX1VOSUNBU1Q7Ci0JCWJyZWFrOwotCQkvKiBldGggb3Igc28gbXVsdGljYXN0PyAqLwotCWRlZmF1bHQ6Ci0JCWlmICgoaGRyX21hYyA9PSBRRVRIX0VUSF9NQUNfVjQpIHx8Ci0JCSAgICAgKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y2KSkKLQkJCWhkci0+aGRyLmwyLmZsYWdzWzJdIHw9IFFFVEhfTEFZRVIyX0ZMQUdfTVVMVElDQVNUOwotCQllbHNlCi0JCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX1VOSUNBU1Q7Ci0JfQorCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQorCQlyZXR1cm4gUlROX1VOU1BFQzsKKwlpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoc2tiLT5kYXRhKSkKKwkJcmV0dXJuIFJUTl9CUk9BRENBU1Q7CisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHNrYi0+ZGF0YSkpCisJCXJldHVybiBSVE5fTVVMVElDQVNUOworCXJldHVybiBSVE5fVU5TUEVDOwogfQogCiBzdGF0aWMgdm9pZCBxZXRoX2wyX2ZpbGxfaGVhZGVyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX2hkciAqaGRyLApAQCAtMjYyLDcgKzI0Miw3IEBACiAJZWxzZSBpZiAoY2FzdF90eXBlID09IFJUTl9CUk9BRENBU1QpCiAJCWhkci0+aGRyLmwyLmZsYWdzWzJdIHw9IFFFVEhfTEFZRVIyX0ZMQUdfQlJPQURDQVNUOwogCWVsc2UKLQkJcWV0aF9sMl9nZXRfcGFja2V0X3R5cGUoY2FyZCwgaGRyLCBza2IpOworCQloZHItPmhkci5sMi5mbGFnc1syXSB8PSBRRVRIX0xBWUVSMl9GTEFHX1VOSUNBU1Q7CiAKIAloZHItPmhkci5sMi5wa3RfbGVuZ3RoID0gc2tiLT5sZW4tUUVUSF9IRUFERVJfU0laRTsKIAkvKiBWU1dJVENIIHJlbGllcyBvbiB0aGUgVkxBTgpAQCAtNDY5LDcgKzQ0OSw2IEBACiAJCQlRRVRIX0RCRl9IRVgoQ1RSTCwgMywgaGRyLCBRRVRIX0RCRl9DVFJMX0xFTik7CiAJCQljb250aW51ZTsKIAkJfQotCQljYXJkLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQljYXJkLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCWNhcmQtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAl9CkBAIC02NzIsNyArNjUxLDcgQEAKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0gc2tiOwogCWludCBpcHYgPSBxZXRoX2dldF9pcF92ZXJzaW9uKHNrYik7Ci0JaW50IGNhc3RfdHlwZSA9IHFldGhfZ2V0X2Nhc3RfdHlwZShjYXJkLCBza2IpOworCWludCBjYXN0X3R5cGUgPSBxZXRoX2wyX2dldF9jYXN0X3R5cGUoY2FyZCwgc2tiKTsKIAlzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICpxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzCiAJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CiAJaW50IHR4X2J5dGVzID0gc2tiLT5sZW47CkBAIC03NDQsNiArNzIzLDcgQEAKIAkJY2FyZC0+c3RhdHMudHhfYnl0ZXMgKz0gdHhfYnl0ZXM7CiAJCWlmIChuZXdfc2tiICE9IHNrYikKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJjID0gTkVUREVWX1RYX09LOwogCX0gZWxzZSB7CiAJCWlmIChkYXRhX29mZnNldCA+PSAwKQogCQkJa21lbV9jYWNoZV9mcmVlKHFldGhfY29yZV9oZWFkZXJfY2FjaGUsIGhkcik7CkBAIC04ODIsNyArODYyLDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sMl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWV0aF9sMl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfc3RyaW5ncyA9IHFldGhfY29yZV9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxZXRoX2NvcmVfZ2V0X2V0aHRvb2xfc3RhdHMsCkBAIC04OTEsNyArODcxLDcgQEAKIAkuZ2V0X3NldHRpbmdzID0gcWV0aF9jb3JlX2V0aHRvb2xfZ2V0X3NldHRpbmdzLAogfTsKIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wyX29zbl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHFldGhfbDJfb3NuX29wcyA9IHsKIAkuZ2V0X3N0cmluZ3MgPSBxZXRoX2NvcmVfZ2V0X3N0cmluZ3MsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gcWV0aF9jb3JlX2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfc3RhdHNfY291bnQgPSBxZXRoX2NvcmVfZ2V0X3N0YXRzX2NvdW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKaW5kZXggNTQ4NzI0MC4uMDczYjZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCkBAIC0xOTg3LDcgKzE5ODcsNiBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQljYXJkLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQljYXJkLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCWNhcmQtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAl9CkBAIC0yNTI1LDYgKzI1MjQsNTEgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK2ludCBpbmxpbmUgcWV0aF9sM19nZXRfY2FzdF90eXBlKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGNhc3RfdHlwZSA9IFJUTl9VTlNQRUM7CisKKwlpZiAoc2tiX2RzdChza2IpICYmIHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyKSB7CisJCWNhc3RfdHlwZSA9IHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyLT50eXBlOworCQlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSB8fAorCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fTVVMVElDQVNUKSB8fAorCQkgICAgKGNhc3RfdHlwZSA9PSBSVE5fQU5ZQ0FTVCkpCisJCQlyZXR1cm4gY2FzdF90eXBlOworCQllbHNlCisJCQlyZXR1cm4gUlROX1VOU1BFQzsKKwl9CisJLyogdHJ5IHNvbWV0aGluZyBlbHNlICovCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVBWNikKKwkJcmV0dXJuIChza2JfbmV0d29ya19oZWFkZXIoc2tiKVsyNF0gPT0gMHhmZikgPworCQkJCVJUTl9NVUxUSUNBU1QgOiAwOworCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApCisJCXJldHVybiAoKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpWzE2XSAmIDB4ZjApID09IDB4ZTApID8KKwkJCQlSVE5fTVVMVElDQVNUIDogMDsKKwkvKiAuLi4gKi8KKwlpZiAoIW1lbWNtcChza2ItPmRhdGEsIHNrYi0+ZGV2LT5icm9hZGNhc3QsIDYpKQorCQlyZXR1cm4gUlROX0JST0FEQ0FTVDsKKwllbHNlIHsKKwkJdTE2IGhkcl9tYWM7CisKKwkJaGRyX21hYyA9ICooKHUxNiAqKXNrYi0+ZGF0YSk7CisJCS8qIHRyIG11bHRpY2FzdD8gKi8KKwkJc3dpdGNoIChjYXJkLT5pbmZvLmxpbmtfdHlwZSkgeworCQljYXNlIFFFVEhfTElOS19UWVBFX0hTVFI6CisJCWNhc2UgUUVUSF9MSU5LX1RZUEVfTEFORV9UUjoKKwkJCWlmICgoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19OQykgfHwKKwkJCSAgICAoaGRyX21hYyA9PSBRRVRIX1RSX01BQ19DKSkKKwkJCQlyZXR1cm4gUlROX01VTFRJQ0FTVDsKKwkJCWJyZWFrOworCQkvKiBldGggb3Igc28gbXVsdGljYXN0PyAqLworCQlkZWZhdWx0OgorCQlpZiAoKGhkcl9tYWMgPT0gUUVUSF9FVEhfTUFDX1Y0KSB8fAorCQkJICAgIChoZHJfbWFjID09IFFFVEhfRVRIX01BQ19WNikpCisJCQkJcmV0dXJuIFJUTl9NVUxUSUNBU1Q7CisJCX0KKwl9CisJcmV0dXJuIGNhc3RfdHlwZTsKK30KKwogc3RhdGljIHZvaWQgcWV0aF9sM19maWxsX2hlYWRlcihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9oZHIgKmhkciwKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwdiwgaW50IGNhc3RfdHlwZSkKIHsKQEAgLTI2NTAsNyArMjY5NCw3IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IE5VTEw7CiAJaW50IGlwdiA9IHFldGhfZ2V0X2lwX3ZlcnNpb24oc2tiKTsKLQlpbnQgY2FzdF90eXBlID0gcWV0aF9nZXRfY2FzdF90eXBlKGNhcmQsIHNrYik7CisJaW50IGNhc3RfdHlwZSA9IHFldGhfbDNfZ2V0X2Nhc3RfdHlwZShjYXJkLCBza2IpOwogCXN0cnVjdCBxZXRoX3FkaW9fb3V0X3EgKnF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXMKIAkJW3FldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKGNhcmQsIHNrYiwgaXB2LCBjYXN0X3R5cGUpXTsKIAlpbnQgdHhfYnl0ZXMgPSBza2ItPmxlbjsKQEAgLTI3OTMsNiArMjgzNyw3IEBACiAJCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9IG5yX2ZyYWdzICsgMTsKIAkJCX0KIAkJfQorCQlyYyA9IE5FVERFVl9UWF9PSzsKIAl9IGVsc2UgewogCQlpZiAoZGF0YV9vZmZzZXQgPj0gMCkKIAkJCWttZW1fY2FjaGVfZnJlZShxZXRoX2NvcmVfaGVhZGVyX2NhY2hlLCBoZHIpOwpAQCAtMjkwMCw3ICsyOTQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wzX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxZXRoX2wzX2V0aHRvb2xfb3BzID0gewogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF90eF9jc3VtID0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKIAkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLApAQCAtMzE3OSw2ICszMjI0LDcgQEAKIAluZXRpZl9jYXJyaWVyX29uKGNhcmQtPmRldik7CiAKIAlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgMHhmZmZmZmZmZiwgMCk7CisJcWV0aF9sM19zZXRfaXBfYWRkcl9saXN0KGNhcmQpOwogCWlmIChyZWNvdmVyX2ZsYWcgPT0gQ0FSRF9TVEFURV9SRUNPVkVSKSB7CiAJCWlmIChyZWNvdmVyeV9tb2RlKQogCQkJcWV0aF9sM19vcGVuKGNhcmQtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwppbmRleCAyY2NiZDE4Li4xYmU2YmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKQEAgLTQyLDYgKzQyLDEyIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoZGV2aWNlLCBpbml0X2RldmljZSwgY2hhcnAsIDA0MDApOwogTU9EVUxFX1BBUk1fREVTQyhkZXZpY2UsICJzcGVjaWZ5IGluaXRpYWwgZGV2aWNlIik7CiAKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqemZjcF9jYWNoZV9od19hbGlnbihjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfY3JlYXRlKG5hbWUsIHNpemUsIHJvdW5kdXBfcG93X29mX3R3byhzaXplKSwgMCwgTlVMTCk7Cit9CisKIHN0YXRpYyBpbnQgemZjcF9yZXFsaXN0X2FsbG9jKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGlkeDsKQEAgLTc4LDcgKzg0LDcgQEAKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0OwogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAKLQlkb3duKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCXJlYWRfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAJYWRhcHRlciA9IHpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoYnVzaWQpOwogCWlmIChhZGFwdGVyKQpAQCAtOTMsMzEgKzk5LDIzIEBACiAJdW5pdCA9IHpmY3BfdW5pdF9lbnF1ZXVlKHBvcnQsIGx1bik7CiAJaWYgKElTX0VSUih1bml0KSkKIAkJZ290byBvdXRfdW5pdDsKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWNjd19kZXZpY2Vfc2V0X29ubGluZShhZGFwdGVyLT5jY3dfZGV2aWNlKTsKIAogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJZmx1c2hfd29yaygmdW5pdC0+c2NzaV93b3JrKTsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJemZjcF91bml0X3B1dCh1bml0KTsKIG91dF91bml0OgogCXpmY3BfcG9ydF9wdXQocG9ydCk7CiBvdXRfcG9ydDoKIAl6ZmNwX2FkYXB0ZXJfcHV0KGFkYXB0ZXIpOwogb3V0X2FkYXB0ZXI6Ci0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqemZjcF9jYWNoZV9jcmVhdGUoaW50IHNpemUsIGNoYXIgKm5hbWUpCi17Ci0JaW50IGFsaWduID0gMTsKLQl3aGlsZSAoKHNpemUgLSBhbGlnbikgPiAwKQotCQlhbGlnbiA8PD0gMTsKLQlyZXR1cm4ga21lbV9jYWNoZV9jcmVhdGUobmFtZSAsIHNpemUsIGFsaWduLCAwLCBOVUxMKTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHpmY3BfaW5pdF9kZXZpY2Vfc2V0dXAoY2hhciAqZGV2c3RyKQogewogCWNoYXIgKnRva2VuOwpAQCAtMTU4LDI0ICsxNTYsMjcgQEAKIHsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAotCXpmY3BfZGF0YS5mc2ZfcmVxX3F0Y2JfY2FjaGUgPSB6ZmNwX2NhY2hlX2NyZWF0ZSgKLQkJCXNpemVvZihzdHJ1Y3QgemZjcF9mc2ZfcmVxX3F0Y2IpLCAiemZjcF9mc2YiKTsKLQlpZiAoIXpmY3BfZGF0YS5mc2ZfcmVxX3F0Y2JfY2FjaGUpCisJemZjcF9kYXRhLmdwbl9mdF9jYWNoZSA9IHpmY3BfY2FjaGVfaHdfYWxpZ24oInpmY3BfZ3BuIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBjdF9pdV9ncG5fZnRfcmVxKSk7CisJaWYgKCF6ZmNwX2RhdGEuZ3BuX2Z0X2NhY2hlKQogCQlnb3RvIG91dDsKIAotCXpmY3BfZGF0YS5zcl9idWZmZXJfY2FjaGUgPSB6ZmNwX2NhY2hlX2NyZWF0ZSgKLQkJCXNpemVvZihzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciksICJ6ZmNwX3NyIik7CisJemZjcF9kYXRhLnF0Y2JfY2FjaGUgPSB6ZmNwX2NhY2hlX2h3X2FsaWduKCJ6ZmNwX3F0Y2IiLAorCQkJCQlzaXplb2Yoc3RydWN0IGZzZl9xdGNiKSk7CisJaWYgKCF6ZmNwX2RhdGEucXRjYl9jYWNoZSkKKwkJZ290byBvdXRfcXRjYl9jYWNoZTsKKworCXpmY3BfZGF0YS5zcl9idWZmZXJfY2FjaGUgPSB6ZmNwX2NhY2hlX2h3X2FsaWduKCJ6ZmNwX3NyIiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyKSk7CiAJaWYgKCF6ZmNwX2RhdGEuc3JfYnVmZmVyX2NhY2hlKQogCQlnb3RvIG91dF9zcl9jYWNoZTsKIAotCXpmY3BfZGF0YS5naWRfcG5fY2FjaGUgPSB6ZmNwX2NhY2hlX2NyZWF0ZSgKLQkJCXNpemVvZihzdHJ1Y3QgemZjcF9naWRfcG5fZGF0YSksICJ6ZmNwX2dpZCIpOworCXpmY3BfZGF0YS5naWRfcG5fY2FjaGUgPSB6ZmNwX2NhY2hlX2h3X2FsaWduKCJ6ZmNwX2dpZCIsCisJCQkJCXNpemVvZihzdHJ1Y3QgemZjcF9naWRfcG5fZGF0YSkpOwogCWlmICghemZjcF9kYXRhLmdpZF9wbl9jYWNoZSkKIAkJZ290byBvdXRfZ2lkX2NhY2hlOwogCi0JemZjcF9kYXRhLndvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiemZjcF93cSIpOwotCi0Jc2VtYV9pbml0KCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEsIDEpOworCW11dGV4X2luaXQoJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCXJ3bG9ja19pbml0KCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwogCiAJemZjcF9kYXRhLnNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlID0KQEAgLTIwOSw3ICsyMTAsOSBAQAogb3V0X2dpZF9jYWNoZToKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koemZjcF9kYXRhLnNyX2J1ZmZlcl9jYWNoZSk7CiBvdXRfc3JfY2FjaGU6Ci0Ja21lbV9jYWNoZV9kZXN0cm95KHpmY3BfZGF0YS5mc2ZfcmVxX3F0Y2JfY2FjaGUpOworCWttZW1fY2FjaGVfZGVzdHJveSh6ZmNwX2RhdGEucXRjYl9jYWNoZSk7CitvdXRfcXRjYl9jYWNoZToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koemZjcF9kYXRhLmdwbl9mdF9jYWNoZSk7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTI2Myw3ICsyNjYsNyBAQAogICogQHBvcnQ6IHBvaW50ZXIgdG8gcG9ydCB3aGVyZSB1bml0IGlzIGFkZGVkCiAgKiBAZmNwX2x1bjogRkNQIExVTiBvZiB1bml0IHRvIGJlIGVucXVldWVkCiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIGVucXVldWVkIHVuaXQgb24gc3VjY2VzcywgRVJSX1BUUiBvbiBlcnJvcgotICogTG9ja3M6IGNvbmZpZ19zZW1hIG11c3QgYmUgaGVsZCB0byBzZXJpYWxpemUgY2hhbmdlcyB0byB0aGUgdW5pdCBsaXN0CisgKiBMb2NrczogY29uZmlnX211dGV4IG11c3QgYmUgaGVsZCB0byBzZXJpYWxpemUgY2hhbmdlcyB0byB0aGUgdW5pdCBsaXN0CiAgKgogICogU2V0cyB1cCBzb21lIHVuaXQgaW50ZXJuYWwgc3RydWN0dXJlcyBhbmQgY3JlYXRlcyBzeXNmcyBlbnRyeS4KICAqLwpAQCAtMjcxLDYgKzI3NCwxMyBAQAogewogCXN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQ7CiAKKwlyZWFkX2xvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOworCWlmICh6ZmNwX2dldF91bml0X2J5X2x1bihwb3J0LCBmY3BfbHVuKSkgeworCQlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CisKIAl1bml0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpmY3BfdW5pdCksIEdGUF9LRVJORUwpOwogCWlmICghdW5pdCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0yODIsOCArMjkyLDExIEBACiAJdW5pdC0+cG9ydCA9IHBvcnQ7CiAJdW5pdC0+ZmNwX2x1biA9IGZjcF9sdW47CiAKLQlkZXZfc2V0X25hbWUoJnVuaXQtPnN5c2ZzX2RldmljZSwgIjB4JTAxNmxseCIsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZmNwX2x1bik7CisJaWYgKGRldl9zZXRfbmFtZSgmdW5pdC0+c3lzZnNfZGV2aWNlLCAiMHglMDE2bGx4IiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBmY3BfbHVuKSkgeworCQlrZnJlZSh1bml0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCXVuaXQtPnN5c2ZzX2RldmljZS5wYXJlbnQgPSAmcG9ydC0+c3lzZnNfZGV2aWNlOwogCXVuaXQtPnN5c2ZzX2RldmljZS5yZWxlYXNlID0gemZjcF9zeXNmc191bml0X3JlbGVhc2U7CiAJZGV2X3NldF9kcnZkYXRhKCZ1bml0LT5zeXNmc19kZXZpY2UsIHVuaXQpOwpAQCAtMjk5LDIwICszMTIsMTUgQEAKIAl1bml0LT5sYXRlbmNpZXMuY21kLmNoYW5uZWwubWluID0gMHhGRkZGRkZGRjsKIAl1bml0LT5sYXRlbmNpZXMuY21kLmZhYnJpYy5taW4gPSAweEZGRkZGRkZGOwogCi0JcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQlpZiAoemZjcF9nZXRfdW5pdF9ieV9sdW4ocG9ydCwgZmNwX2x1bikpIHsKLQkJcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotCQlnb3RvIGVycl9vdXRfZnJlZTsKKwlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UpKSB7CisJCXB1dF9kZXZpY2UoJnVuaXQtPnN5c2ZzX2RldmljZSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQlyZWFkX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci0KLQlpZiAoZGV2aWNlX3JlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UpKQotCQlnb3RvIGVycl9vdXRfZnJlZTsKIAogCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJnVuaXQtPnN5c2ZzX2RldmljZS5rb2JqLAogCQkJICAgICAgICZ6ZmNwX3N5c2ZzX3VuaXRfYXR0cnMpKSB7CiAJCWRldmljZV91bnJlZ2lzdGVyKCZ1bml0LT5zeXNmc19kZXZpY2UpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCiAJemZjcF91bml0X2dldCh1bml0KTsKQEAgLTMyNywxMCArMzM1LDYgQEAKIAl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwogCiAJcmV0dXJuIHVuaXQ7Ci0KLWVycl9vdXRfZnJlZToKLQlrZnJlZSh1bml0KTsKLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogLyoqCkBAIC0zNTMsMzcgKzM1Nyw0NyBAQAogCiBzdGF0aWMgaW50IHpmY3BfYWxsb2NhdGVfbG93X21lbV9idWZmZXJzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JLyogbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIHpmY3BfZGF0YS5jb25maWdfc2VtYSB0YWtlbiAqLwotCWFkYXB0ZXItPnBvb2wuZnNmX3JlcV9lcnAgPQotCQltZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMSwgemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSk7Ci0JaWYgKCFhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKQorCS8qIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCB6ZmNwX2RhdGEuY29uZmlnX211dGV4IHRha2VuICovCisJYWRhcHRlci0+cG9vbC5lcnBfcmVxID0KKwkJbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKDEsIHNpemVvZihzdHJ1Y3QgemZjcF9mc2ZfcmVxKSk7CisJaWYgKCFhZGFwdGVyLT5wb29sLmVycF9yZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3Njc2kgPQotCQltZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMSwgemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSk7Ci0JaWYgKCFhZGFwdGVyLT5wb29sLmZzZl9yZXFfc2NzaSkKKwlhZGFwdGVyLT5wb29sLmdpZF9wbl9yZXEgPQorCQltZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woMSwgc2l6ZW9mKHN0cnVjdCB6ZmNwX2ZzZl9yZXEpKTsKKwlpZiAoIWFkYXB0ZXItPnBvb2wuZ2lkX3BuX3JlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlhZGFwdGVyLT5wb29sLmZzZl9yZXFfYWJvcnQgPQotCQltZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMSwgemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSk7Ci0JaWYgKCFhZGFwdGVyLT5wb29sLmZzZl9yZXFfYWJvcnQpCisJYWRhcHRlci0+cG9vbC5zY3NpX3JlcSA9CisJCW1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbCgxLCBzaXplb2Yoc3RydWN0IHpmY3BfZnNmX3JlcSkpOworCWlmICghYWRhcHRlci0+cG9vbC5zY3NpX3JlcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlhZGFwdGVyLT5wb29sLmZzZl9yZXFfc3RhdHVzX3JlYWQgPQorCWFkYXB0ZXItPnBvb2wuc2NzaV9hYm9ydCA9CisJCW1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbCgxLCBzaXplb2Yoc3RydWN0IHpmY3BfZnNmX3JlcSkpOworCWlmICghYWRhcHRlci0+cG9vbC5zY3NpX2Fib3J0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfcmVxID0KIAkJbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKEZTRl9TVEFUVVNfUkVBRFNfUkVDT00sCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHpmY3BfZnNmX3JlcSkpOwotCWlmICghYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3N0YXR1c19yZWFkKQorCWlmICghYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9yZXEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JYWRhcHRlci0+cG9vbC5kYXRhX3N0YXR1c19yZWFkID0KKwlhZGFwdGVyLT5wb29sLnF0Y2JfcG9vbCA9CisJCW1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCg0LCB6ZmNwX2RhdGEucXRjYl9jYWNoZSk7CisJaWYgKCFhZGFwdGVyLT5wb29sLnF0Y2JfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX2RhdGEgPQogCQltZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woRlNGX1NUQVRVU19SRUFEU19SRUNPTSwKIAkJCQkJIHpmY3BfZGF0YS5zcl9idWZmZXJfY2FjaGUpOwotCWlmICghYWRhcHRlci0+cG9vbC5kYXRhX3N0YXR1c19yZWFkKQorCWlmICghYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWFkYXB0ZXItPnBvb2wuZGF0YV9naWRfcG4gPQorCWFkYXB0ZXItPnBvb2wuZ2lkX3BuX2RhdGEgPQogCQltZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMSwgemZjcF9kYXRhLmdpZF9wbl9jYWNoZSk7Ci0JaWYgKCFhZGFwdGVyLT5wb29sLmRhdGFfZ2lkX3BuKQorCWlmICghYWRhcHRlci0+cG9vbC5naWRfcG5fZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXR1cm4gMDsKQEAgLTM5MSwxOSArNDA1LDIxIEBACiAKIHN0YXRpYyB2b2lkIHpmY3BfZnJlZV9sb3dfbWVtX2J1ZmZlcnMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKLQkvKiB6ZmNwX2RhdGEuY29uZmlnX3NlbWEgbXVzdCBiZSBoZWxkICovCi0JaWYgKGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9lcnApCi0JCW1lbXBvb2xfZGVzdHJveShhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwKTsKLQlpZiAoYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3Njc2kpCi0JCW1lbXBvb2xfZGVzdHJveShhZGFwdGVyLT5wb29sLmZzZl9yZXFfc2NzaSk7Ci0JaWYgKGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9hYm9ydCkKLQkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9hYm9ydCk7Ci0JaWYgKGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9zdGF0dXNfcmVhZCkKLQkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9zdGF0dXNfcmVhZCk7Ci0JaWYgKGFkYXB0ZXItPnBvb2wuZGF0YV9zdGF0dXNfcmVhZCkKLQkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZGF0YV9zdGF0dXNfcmVhZCk7Ci0JaWYgKGFkYXB0ZXItPnBvb2wuZGF0YV9naWRfcG4pCi0JCW1lbXBvb2xfZGVzdHJveShhZGFwdGVyLT5wb29sLmRhdGFfZ2lkX3BuKTsKKwkvKiB6ZmNwX2RhdGEuY29uZmlnX211dGV4IG11c3QgYmUgaGVsZCAqLworCWlmIChhZGFwdGVyLT5wb29sLmVycF9yZXEpCisJCW1lbXBvb2xfZGVzdHJveShhZGFwdGVyLT5wb29sLmVycF9yZXEpOworCWlmIChhZGFwdGVyLT5wb29sLnNjc2lfcmVxKQorCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5zY3NpX3JlcSk7CisJaWYgKGFkYXB0ZXItPnBvb2wuc2NzaV9hYm9ydCkKKwkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuc2NzaV9hYm9ydCk7CisJaWYgKGFkYXB0ZXItPnBvb2wucXRjYl9wb29sKQorCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5xdGNiX3Bvb2wpOworCWlmIChhZGFwdGVyLT5wb29sLnN0YXR1c19yZWFkX3JlcSkKKwkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfcmVxKTsKKwlpZiAoYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhKQorCQltZW1wb29sX2Rlc3Ryb3koYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhKTsKKwlpZiAoYWRhcHRlci0+cG9vbC5naWRfcG5fZGF0YSkKKwkJbWVtcG9vbF9kZXN0cm95KGFkYXB0ZXItPnBvb2wuZ2lkX3BuX2RhdGEpOwogfQogCiAvKioKQEAgLTQxOCw3ICs0MzQsNyBAQAogaW50IHpmY3Bfc3RhdHVzX3JlYWRfcmVmaWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJd2hpbGUgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0X21pc3MpID4gMCkKLQkJaWYgKHpmY3BfZnNmX3N0YXR1c19yZWFkKGFkYXB0ZXIpKSB7CisJCWlmICh6ZmNwX2ZzZl9zdGF0dXNfcmVhZChhZGFwdGVyLT5xZGlvKSkgewogCQkJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0X21pc3MpID49IDE2KSB7CiAJCQkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImF4c3JlZjEiLAogCQkJCQkJCU5VTEwpOwpAQCAtNDQ2LDYgKzQ2MiwyNyBAQAogCQkgICBhZGFwdGVyLT5mc2ZfbGljX3ZlcnNpb24pOwogfQogCitzdGF0aWMgaW50IHpmY3Bfc2V0dXBfYWRhcHRlcl93b3JrX3F1ZXVlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJY2hhciBuYW1lW1RBU0tfQ09NTV9MRU5dOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiemZjcF9xXyVzIiwKKwkJIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKKwlhZGFwdGVyLT53b3JrX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmFtZSk7CisKKwlpZiAoYWRhcHRlci0+d29ya19xdWV1ZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIHpmY3BfZGVzdHJveV9hZGFwdGVyX3dvcmtfcXVldWUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+d29ya19xdWV1ZSkKKwkJZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci0+d29ya19xdWV1ZSk7CisJYWRhcHRlci0+d29ya19xdWV1ZSA9IE5VTEw7CisKK30KKwogLyoqCiAgKiB6ZmNwX2FkYXB0ZXJfZW5xdWV1ZSAtIGVucXVldWUgYSBuZXcgYWRhcHRlciB0byB0aGUgbGlzdAogICogQGNjd19kZXZpY2U6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjY19kZXZpY2UKQEAgLTQ1NSw3ICs0OTIsNyBAQAogICogRW5xdWV1ZXMgYW4gYWRhcHRlciBhdCB0aGUgZW5kIG9mIHRoZSBhZGFwdGVyIGxpc3QgaW4gdGhlIGRyaXZlciBkYXRhLgogICogQWxsIGFkYXB0ZXIgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUgc2V0IHVwLgogICogUHJvYy1mcyBlbnRyaWVzIGFyZSBhbHNvIGNyZWF0ZWQuCi0gKiBsb2NrczoJY29uZmlnX3NlbWEgbXVzdCBiZSBoZWxkIHRvIHNlcmlhbGlzZSBjaGFuZ2VzIHRvIHRoZSBhZGFwdGVyIGxpc3QKKyAqIGxvY2tzOiBjb25maWdfbXV0ZXggbXVzdCBiZSBoZWxkIHRvIHNlcmlhbGl6ZSBjaGFuZ2VzIHRvIHRoZSBhZGFwdGVyIGxpc3QKICAqLwogaW50IHpmY3BfYWRhcHRlcl9lbnF1ZXVlKHN0cnVjdCBjY3dfZGV2aWNlICpjY3dfZGV2aWNlKQogewpAQCAtNDYzLDM3ICs1MDAsMzcgQEAKIAogCS8qCiAJICogTm90ZTogSXQgaXMgc2FmZSB0byByZWxlYXNlIHRoZSBsaXN0X2xvY2ssIGFzIGFueSBsaXN0IGNoYW5nZXMKLQkgKiBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBjb25maWdfc2VtYSwgd2hpY2ggbXVzdCBiZSBoZWxkIHRvIGdldCBoZXJlCisJICogYXJlIHByb3RlY3RlZCBieSB0aGUgY29uZmlnX211dGV4LCB3aGljaCBtdXN0IGJlIGhlbGQgdG8gZ2V0IGhlcmUKIAkgKi8KIAogCWFkYXB0ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9hZGFwdGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhZGFwdGVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWFkYXB0ZXItPmdzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpmY3Bfd2thX3BvcnRzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT5ncykgewotCQlrZnJlZShhZGFwdGVyKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCiAJY2N3X2RldmljZS0+aGFuZGxlciA9IE5VTEw7CiAJYWRhcHRlci0+Y2N3X2RldmljZSA9IGNjd19kZXZpY2U7CiAJYXRvbWljX3NldCgmYWRhcHRlci0+cmVmY291bnQsIDApOwogCi0JaWYgKHpmY3BfcWRpb19hbGxvY2F0ZShhZGFwdGVyKSkKLQkJZ290byBxZGlvX2FsbG9jYXRlX2ZhaWxlZDsKKwlpZiAoemZjcF9xZGlvX3NldHVwKGFkYXB0ZXIpKQorCQlnb3RvIHFkaW9fZmFpbGVkOwogCiAJaWYgKHpmY3BfYWxsb2NhdGVfbG93X21lbV9idWZmZXJzKGFkYXB0ZXIpKQotCQlnb3RvIGZhaWxlZF9sb3dfbWVtX2J1ZmZlcnM7CisJCWdvdG8gbG93X21lbV9idWZmZXJzX2ZhaWxlZDsKIAogCWlmICh6ZmNwX3JlcWxpc3RfYWxsb2MoYWRhcHRlcikpCi0JCWdvdG8gZmFpbGVkX2xvd19tZW1fYnVmZmVyczsKKwkJZ290byBsb3dfbWVtX2J1ZmZlcnNfZmFpbGVkOwogCi0JaWYgKHpmY3BfYWRhcHRlcl9kZWJ1Z19yZWdpc3RlcihhZGFwdGVyKSkKKwlpZiAoemZjcF9kYmZfYWRhcHRlcl9yZWdpc3RlcihhZGFwdGVyKSkKIAkJZ290byBkZWJ1Z19yZWdpc3Rlcl9mYWlsZWQ7CiAKKwlpZiAoemZjcF9zZXR1cF9hZGFwdGVyX3dvcmtfcXVldWUoYWRhcHRlcikpCisJCWdvdG8gd29ya19xdWV1ZV9mYWlsZWQ7CisKKwlpZiAoemZjcF9mY19nc19zZXR1cChhZGFwdGVyKSkKKwkJZ290byBnZW5lcmljX3NlcnZpY2VzX2ZhaWxlZDsKKwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFkYXB0ZXItPnJlbW92ZV93cSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+ZXJwX3RocmVhZF93cWgpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFkYXB0ZXItPmVycF9yZWFkeV93cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYWRhcHRlci0+ZXJwX2RvbmVfd3FoKTsKIAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCk7CkBAIC01MDIsMjAgKzUzOSwxNCBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmhiYV9kYmZfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnNhbl9kYmZfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnNjc2lfZGJmX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZWNfZGJmX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+cWRpb19zdGF0X2xvY2spOwotCiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmVycF9sb2NrKTsKIAlyd2xvY2tfaW5pdCgmYWRhcHRlci0+YWJvcnRfbG9jayk7CiAKLQlzZW1hX2luaXQoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0sIDApOworCWlmICh6ZmNwX2VycF90aHJlYWRfc2V0dXAoYWRhcHRlcikpCisJCWdvdG8gZXJwX3RocmVhZF9mYWlsZWQ7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnN0YXRfd29yaywgX3pmY3Bfc3RhdHVzX3JlYWRfc2NoZWR1bGVyKTsKLQlJTklUX1dPUksoJmFkYXB0ZXItPnNjYW5fd29yaywgX3pmY3Bfc2Nhbl9wb3J0c19sYXRlcik7CisJSU5JVF9XT1JLKCZhZGFwdGVyLT5zY2FuX3dvcmssIF96ZmNwX2ZjX3NjYW5fcG9ydHNfbGF0ZXIpOwogCiAJYWRhcHRlci0+c2VydmljZV9sZXZlbC5zZXFfcHJpbnQgPSB6ZmNwX3ByaW50X3NsOwogCkBAIC01MjksMjAgKzU2MCwyNSBAQAogCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKIAogCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9SRU1PVkUsICZhZGFwdGVyLT5zdGF0dXMpOwotCXpmY3BfZmNfd2thX3BvcnRzX2luaXQoYWRhcHRlcik7CiAKIAlpZiAoIXpmY3BfYWRhcHRlcl9zY3NpX3JlZ2lzdGVyKGFkYXB0ZXIpKQogCQlyZXR1cm4gMDsKIAogc3lzZnNfZmFpbGVkOgotCXpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXIpOworCXpmY3BfZXJwX3RocmVhZF9raWxsKGFkYXB0ZXIpOworZXJwX3RocmVhZF9mYWlsZWQ6CisJemZjcF9mY19nc19kZXN0cm95KGFkYXB0ZXIpOworZ2VuZXJpY19zZXJ2aWNlc19mYWlsZWQ6CisJemZjcF9kZXN0cm95X2FkYXB0ZXJfd29ya19xdWV1ZShhZGFwdGVyKTsKK3dvcmtfcXVldWVfZmFpbGVkOgorCXpmY3BfZGJmX2FkYXB0ZXJfdW5yZWdpc3RlcihhZGFwdGVyLT5kYmYpOwogZGVidWdfcmVnaXN0ZXJfZmFpbGVkOgogCWRldl9zZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2LCBOVUxMKTsKIAlrZnJlZShhZGFwdGVyLT5yZXFfbGlzdCk7Ci1mYWlsZWRfbG93X21lbV9idWZmZXJzOgorbG93X21lbV9idWZmZXJzX2ZhaWxlZDoKIAl6ZmNwX2ZyZWVfbG93X21lbV9idWZmZXJzKGFkYXB0ZXIpOwotcWRpb19hbGxvY2F0ZV9mYWlsZWQ6Ci0JemZjcF9xZGlvX2ZyZWUoYWRhcHRlcik7CitxZGlvX2ZhaWxlZDoKKwl6ZmNwX3FkaW9fZGVzdHJveShhZGFwdGVyLT5xZGlvKTsKIAlrZnJlZShhZGFwdGVyKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTU1OSw2ICs1OTUsNyBAQAogCiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c2Nhbl93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zdGF0X3dvcmspOworCXpmY3BfZmNfd2thX3BvcnRzX2ZvcmNlX29mZmxpbmUoYWRhcHRlci0+Z3MpOwogCXpmY3BfYWRhcHRlcl9zY3NpX3VucmVnaXN0ZXIoYWRhcHRlcik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYua29iaiwKIAkJCSAgICZ6ZmNwX3N5c2ZzX2FkYXB0ZXJfYXR0cnMpOwpAQCAtNTcwLDEzICs2MDcsMTUgQEAKIAlpZiAoIXJldHZhbCkKIAkJcmV0dXJuOwogCi0JemZjcF9hZGFwdGVyX2RlYnVnX3VucmVnaXN0ZXIoYWRhcHRlcik7Ci0JemZjcF9xZGlvX2ZyZWUoYWRhcHRlcik7CisJemZjcF9mY19nc19kZXN0cm95KGFkYXB0ZXIpOworCXpmY3BfZXJwX3RocmVhZF9raWxsKGFkYXB0ZXIpOworCXpmY3BfZGVzdHJveV9hZGFwdGVyX3dvcmtfcXVldWUoYWRhcHRlcik7CisJemZjcF9kYmZfYWRhcHRlcl91bnJlZ2lzdGVyKGFkYXB0ZXItPmRiZik7CiAJemZjcF9mcmVlX2xvd19tZW1fYnVmZmVycyhhZGFwdGVyKTsKKwl6ZmNwX3FkaW9fZGVzdHJveShhZGFwdGVyLT5xZGlvKTsKIAlrZnJlZShhZGFwdGVyLT5yZXFfbGlzdCk7CiAJa2ZyZWUoYWRhcHRlci0+ZmNfc3RhdHMpOwogCWtmcmVlKGFkYXB0ZXItPnN0YXRzX3Jlc2V0X2RhdGEpOwotCWtmcmVlKGFkYXB0ZXItPmdzKTsKIAlrZnJlZShhZGFwdGVyKTsKIH0KIApAQCAtNTkyLDcgKzYzMSw3IEBACiAgKiBAc3RhdHVzOiBpbml0aWFsIHN0YXR1cyBmb3IgdGhlIHBvcnQKICAqIEBkX2lkOiBkZXN0aW5hdGlvbiBpZCBvZiB0aGUgcmVtb3RlIHBvcnQgdG8gYmUgZW5xdWV1ZWQKICAqIFJldHVybnM6IHBvaW50ZXIgdG8gZW5xdWV1ZWQgcG9ydCBvbiBzdWNjZXNzLCBFUlJfUFRSIG9uIGVycm9yCi0gKiBMb2NrczogY29uZmlnX3NlbWEgbXVzdCBiZSBoZWxkIHRvIHNlcmlhbGl6ZSBjaGFuZ2VzIHRvIHRoZSBwb3J0IGxpc3QKKyAqIExvY2tzOiBjb25maWdfbXV0ZXggbXVzdCBiZSBoZWxkIHRvIHNlcmlhbGl6ZSBjaGFuZ2VzIHRvIHRoZSBwb3J0IGxpc3QKICAqCiAgKiBBbGwgcG9ydCBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZSBzZXQgdXAgYW5kIHRoZSBzeXNmcyBlbnRyeSBpcyBnZW5lcmF0ZWQuCiAgKiBkX2lkIGlzIHVzZWQgdG8gZW5xdWV1ZSBwb3J0cyB3aXRoIGEgd2VsbCBrbm93biBhZGRyZXNzIGxpa2UgdGhlIERpcmVjdG9yeQpAQCAtNjAyLDcgKzY0MSwxMyBAQAogCQkJCSAgICAgdTMyIHN0YXR1cywgdTMyIGRfaWQpCiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKLQlpbnQgcmV0dmFsOworCisJcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwlpZiAoemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHd3cG4pKSB7CisJCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAogCXBvcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9wb3J0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3J0KQpAQCAtNjEwLDcgKzY1NSw3IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5yZW1vdmVfd3EpOwogCUlOSVRfTElTVF9IRUFEKCZwb3J0LT51bml0X2xpc3RfaGVhZCk7Ci0JSU5JVF9XT1JLKCZwb3J0LT5naWRfcG5fd29yaywgemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX2xvb2t1cCk7CisJSU5JVF9XT1JLKCZwb3J0LT5naWRfcG5fd29yaywgemZjcF9mY19wb3J0X2RpZF9sb29rdXApOwogCUlOSVRfV09SSygmcG9ydC0+dGVzdF9saW5rX3dvcmssIHpmY3BfZmNfbGlua190ZXN0X3dvcmspOwogCUlOSVRfV09SSygmcG9ydC0+cnBvcnRfd29yaywgemZjcF9zY3NpX3Jwb3J0X3dvcmspOwogCkBAIC02MjMsMjkgKzY2OCwyNCBAQAogCWF0b21pY19zZXRfbWFzayhzdGF0dXMgfCBaRkNQX1NUQVRVU19DT01NT05fUkVNT1ZFLCAmcG9ydC0+c3RhdHVzKTsKIAlhdG9taWNfc2V0KCZwb3J0LT5yZWZjb3VudCwgMCk7CiAKLQlkZXZfc2V0X25hbWUoJnBvcnQtPnN5c2ZzX2RldmljZSwgIjB4JTAxNmxseCIsCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl3d3BuKTsKKwlpZiAoZGV2X3NldF9uYW1lKCZwb3J0LT5zeXNmc19kZXZpY2UsICIweCUwMTZsbHgiLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd3dwbikpIHsKKwkJa2ZyZWUocG9ydCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KIAlwb3J0LT5zeXNmc19kZXZpY2UucGFyZW50ID0gJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldjsKLQogCXBvcnQtPnN5c2ZzX2RldmljZS5yZWxlYXNlID0gemZjcF9zeXNmc19wb3J0X3JlbGVhc2U7CiAJZGV2X3NldF9kcnZkYXRhKCZwb3J0LT5zeXNmc19kZXZpY2UsIHBvcnQpOwogCi0JcmVhZF9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQlpZiAoemZjcF9nZXRfcG9ydF9ieV93d3BuKGFkYXB0ZXIsIHd3cG4pKSB7Ci0JCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQkJZ290byBlcnJfb3V0X2ZyZWU7CisJaWYgKGRldmljZV9yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlKSkgeworCQlwdXRfZGV2aWNlKCZwb3J0LT5zeXNmc19kZXZpY2UpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9Ci0JcmVhZF91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwogCi0JaWYgKGRldmljZV9yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlKSkKLQkJZ290byBlcnJfb3V0X2ZyZWU7Ci0KLQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBvcnQtPnN5c2ZzX2RldmljZS5rb2JqLAotCQkJCSAgICAmemZjcF9zeXNmc19wb3J0X2F0dHJzKTsKLQotCWlmIChyZXR2YWwpIHsKKwlpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKCZwb3J0LT5zeXNmc19kZXZpY2Uua29iaiwKKwkJCSAgICAgICAmemZjcF9zeXNmc19wb3J0X2F0dHJzKSkgewogCQlkZXZpY2VfdW5yZWdpc3RlcigmcG9ydC0+c3lzZnNfZGV2aWNlKTsKLQkJZ290byBlcnJfb3V0OworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKIAl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwpAQCAtNjU5LDExICs2OTksNiBAQAogCiAJemZjcF9hZGFwdGVyX2dldChhZGFwdGVyKTsKIAlyZXR1cm4gcG9ydDsKLQotZXJyX291dF9mcmVlOgotCWtmcmVlKHBvcnQpOwotZXJyX291dDoKLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogLyoqCkBAIC02NzIsMTIgKzcwNywxMSBAQAogICovCiB2b2lkIHpmY3BfcG9ydF9kZXF1ZXVlKHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7Ci0Jd2FpdF9ldmVudChwb3J0LT5yZW1vdmVfd3EsIGF0b21pY19yZWFkKCZwb3J0LT5yZWZjb3VudCkgPT0gMCk7CiAJd3JpdGVfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAJbGlzdF9kZWwoJnBvcnQtPmxpc3QpOwogCXdyaXRlX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci0JaWYgKHBvcnQtPnJwb3J0KQotCQlwb3J0LT5ycG9ydC0+ZGRfZGF0YSA9IE5VTEw7CisJd2FpdF9ldmVudChwb3J0LT5yZW1vdmVfd3EsIGF0b21pY19yZWFkKCZwb3J0LT5yZWZjb3VudCkgPT0gMCk7CisJY2FuY2VsX3dvcmtfc3luYygmcG9ydC0+cnBvcnRfd29yayk7IC8qIHVzdWFsbHkgbm90IG5lY2Vzc2FyeSAqLwogCXpmY3BfYWRhcHRlcl9wdXQocG9ydC0+YWRhcHRlcik7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwb3J0LT5zeXNmc19kZXZpY2Uua29iaiwgJnpmY3Bfc3lzZnNfcG9ydF9hdHRycyk7CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPnN5c2ZzX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCBkOWRhNWM0Li4wYzkwZjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTE4LDEyICsxOCwxNSBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldik7CiAKLQlkb3duKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCWlmICghYWRhcHRlcikKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAogCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc3VzcDEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCi0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzMsNiArMzYsOSBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNkZXYtPmRldik7CiAKKwlpZiAoIWFkYXB0ZXIpCisJCXJldHVybiAwOworCiAJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsICJjY3Jlc3UxIiwgTlVMTCwKIAkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1JVTk5JTkcsIFpGQ1BfU0VUKTsKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKQEAgLTYzLDI1ICs2OSwxNCBAQAogICogemZjcF9jY3dfcHJvYmUgLSBwcm9iZSBmdW5jdGlvbiBvZiB6ZmNwIGRyaXZlcgogICogQGNjd19kZXZpY2U6IHBvaW50ZXIgdG8gYmVsb25naW5nIGNjdyBkZXZpY2UKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBjb21tb24gaS9vIGxheWVyIGFuZCBzZXRzIHVwIHRoZSBpbml0aWFsCi0gKiBkYXRhIHN0cnVjdHVyZXMgZm9yIGVhY2ggZmNwIGFkYXB0ZXIsIHdoaWNoIHdhcyBkZXRlY3RlZCBieSB0aGUgc3lzdGVtLgotICogQWxzbyB0aGUgc3lzZnMgZmlsZXMgZm9yIHRoaXMgYWRhcHRlciB3aWxsIGJlIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbi4KLSAqIEluIGFkZGl0aW9uIHRoZSBuYW1lc2VydmVyIHBvcnQgd2lsbCBiZSBhZGRlZCB0byB0aGUgcG9ydHMgb2YgdGhlIGFkYXB0ZXIKLSAqIGFuZCBpdHMgc3lzZnMgcmVwcmVzZW50YXRpb24gd2lsbCBiZSBjcmVhdGVkIHRvby4KKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgdGhlIGNvbW1vbiBpL28gbGF5ZXIgZm9yIGVhY2ggRkNQCisgKiBkZXZpY2UgZm91bmQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiBUaGlzIGlzIG9ubHkgYSBzdHViIHRvIG1ha2UgY2lvCisgKiB3b3JrOiBUbyBvbmx5IGFsbG9jYXRlIGFkYXB0ZXIgcmVzb3VyY2VzIGZvciBkZXZpY2VzIGFjdHVhbGx5IHVzZWQsCisgKiB0aGUgYWxsb2NhdGlvbiBpcyBkZWZlcnJlZCB0byB0aGUgZmlyc3QgY2FsbCB0byBjY3dfc2V0X29ubGluZS4KICAqLwogc3RhdGljIGludCB6ZmNwX2Njd19wcm9iZShzdHJ1Y3QgY2N3X2RldmljZSAqY2N3X2RldmljZSkKIHsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7Ci0JaWYgKHpmY3BfYWRhcHRlcl9lbnF1ZXVlKGNjd19kZXZpY2UpKSB7Ci0JCWRldl9lcnIoJmNjd19kZXZpY2UtPmRldiwKLQkJCSJTZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlICIKLQkJCSJGQ1AgYWRhcHRlciBmYWlsZWRcbiIpOwotCQlyZXR2YWwgPSAtRUlOVkFMOwotCX0KLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTEwMiw4ICs5NywxMSBAQAogCUxJU1RfSEVBRChwb3J0X3JlbW92ZV9saCk7CiAKIAljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNjd19kZXZpY2UpOwotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOworCWlmICghYWRhcHRlcikKKwkJZ290byBvdXQ7CiAKIAl3cml0ZV9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgcCwgJmFkYXB0ZXItPnBvcnRfbGlzdF9oZWFkLCBsaXN0KSB7CkBAIC0xMjksMjkgKzEyNyw0MSBAQAogCXdhaXRfZXZlbnQoYWRhcHRlci0+cmVtb3ZlX3dxLCBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmVmY291bnQpID09IDApOwogCXpmY3BfYWRhcHRlcl9kZXF1ZXVlKGFkYXB0ZXIpOwogCi0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIH0KIAogLyoqCiAgKiB6ZmNwX2Njd19zZXRfb25saW5lIC0gc2V0X29ubGluZSBmdW5jdGlvbiBvZiB6ZmNwIGRyaXZlcgogICogQGNjd19kZXZpY2U6IHBvaW50ZXIgdG8gYmVsb25naW5nIGNjdyBkZXZpY2UKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJ5IHRoZSBjb21tb24gaS9vIGxheWVyIGFuZCBzZXRzIGFuIGFkYXB0ZXIKLSAqIGludG8gc3RhdGUgb25saW5lLiBTZXR0aW5nIGFuIGZjcCBkZXZpY2Ugb25saW5lIG1lYW5zIHRoYXQgaXQgd2lsbCBiZQotICogcmVnaXN0ZXJlZCB3aXRoIHRoZSBTQ1NJIHN0YWNrLCB0aGF0IHRoZSBRRElPIHF1ZXVlcyB3aWxsIGJlIHNldCB1cAotICogYW5kIHRoYXQgdGhlIGFkYXB0ZXIgd2lsbCBiZSBvcGVuZWQgKGFzeW5jaHJvbm91c2x5KS4KKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYnkgdGhlIGNvbW1vbiBpL28gbGF5ZXIgYW5kIHNldHMgYW4KKyAqIGFkYXB0ZXIgaW50byBzdGF0ZSBvbmxpbmUuICBUaGUgZmlyc3QgY2FsbCB3aWxsIGFsbG9jYXRlIGFsbAorICogYWRhcHRlciByZXNvdXJjZXMgdGhhdCB3aWxsIGJlIHJldGFpbmVkIHVudGlsIHRoZSBkZXZpY2UgaXMgcmVtb3ZlZAorICogdmlhIHpmY3BfY2N3X3JlbW92ZS4KKyAqCisgKiBTZXR0aW5nIGFuIGZjcCBkZXZpY2Ugb25saW5lIG1lYW5zIHRoYXQgaXQgd2lsbCBiZSByZWdpc3RlcmVkIHdpdGgKKyAqIHRoZSBTQ1NJIHN0YWNrLCB0aGF0IHRoZSBRRElPIHF1ZXVlcyB3aWxsIGJlIHNldCB1cCBhbmQgdGhhdCB0aGUKKyAqIGFkYXB0ZXIgd2lsbCBiZSBvcGVuZWQuCiAgKi8KIHN0YXRpYyBpbnQgemZjcF9jY3dfc2V0X29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2N3X2RldmljZSkKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwotCWludCByZXR2YWw7CisJaW50IHJldCA9IDA7CiAKLQlkb3duKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7CiAKLQlyZXR2YWwgPSB6ZmNwX2VycF90aHJlYWRfc2V0dXAoYWRhcHRlcik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBvdXQ7CisJaWYgKCFhZGFwdGVyKSB7CisJCXJldCA9IHpmY3BfYWRhcHRlcl9lbnF1ZXVlKGNjd19kZXZpY2UpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZjY3dfZGV2aWNlLT5kZXYsCisJCQkJIlNldHRpbmcgdXAgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgIgorCQkJCSJGQ1AgYWRhcHRlciBmYWlsZWRcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2N3X2RldmljZS0+ZGV2KTsKKwl9CiAKIAkvKiBpbml0aWFsaXplIHJlcXVlc3QgY291bnRlciAqLwogCUJVR19PTighemZjcF9yZXFsaXN0X2lzZW1wdHkoYWRhcHRlcikpOwpAQCAtMTYyLDEzICsxNzIsMTEgQEAKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKIAkJCQkiY2Nzb25sMiIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7Ci0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7Ci0JZmx1c2hfd29yaygmYWRhcHRlci0+c2Nhbl93b3JrKTsKLQlyZXR1cm4gMDsKLQotIG91dDoKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKLQlyZXR1cm4gcmV0dmFsOworb3V0OgorCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CisJaWYgKCFyZXQpCisJCWZsdXNoX3dvcmsoJmFkYXB0ZXItPnNjYW5fd29yayk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0xODIsMTIgKzE5MCwxNSBAQAogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXI7CiAKLQlkb3duKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7CisJaWYgKCFhZGFwdGVyKQorCQlnb3RvIG91dDsKKwogCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjc29mZjEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwotCXpmY3BfZXJwX3RocmVhZF9raWxsKGFkYXB0ZXIpOwotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CitvdXQ6CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MCwxMSArMjUxLDEyIEBACiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcjsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKIAl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NodXQxIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKLQl1cCgmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwl6ZmNwX2VycF90aHJlYWRfa2lsbChhZGFwdGVyKTsKKwltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwogfQogCiBzdGF0aWMgc3RydWN0IGNjd19kcml2ZXIgemZjcF9jY3dfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmMKaW5kZXggYjk5Yjg3Yy4uMjE1YjcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIERlYnVnIHRyYWNlcyBmb3IgemZjcC4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorI2luY2x1ZGUgInpmY3BfZGJmLmgiCiAjaW5jbHVkZSAiemZjcF9leHQuaCIKIAogc3RhdGljIHUzMiBkYmZzaXplID0gNDsKQEAgLTM3LDE5ICszOCw2IEBACiAJfQogfQogCi0vKiBGSVhNRTogdGhpcyBkdXBsaWNhdGUgdGhpcyBjb2RlIGluIHMzOTAgZGVidWcgZmVhdHVyZSAqLwotc3RhdGljIHZvaWQgemZjcF9kYmZfdGltZXN0YW1wKHVuc2lnbmVkIGxvbmcgbG9uZyBzdGNrLCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWUpCi17Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNlYzsKLQotCXN0Y2sgLT0gMHg4MTI2ZDYwZTQ2MDAwMDAwTEwgLSAoMHgzYzI2NzAwTEwgKiAxMDAwMDAwICogNDA5Nik7Ci0Jc2VjID0gc3RjayA+PiAxMjsKLQlkb19kaXYoc2VjLCAxMDAwMDAwKTsKLQl0aW1lLT50dl9zZWMgPSBzZWM7Ci0Jc3RjayAtPSAoc2VjICogMTAwMDAwMCkgPDwgMTI7Ci0JdGltZS0+dHZfbnNlYyA9ICgoc3RjayAqIDEwMDApID4+IDEyKTsKLX0KLQogc3RhdGljIHZvaWQgemZjcF9kYmZfdGFnKGNoYXIgKipwLCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3QgY2hhciAqdGFnKQogewogCWludCBpOwpAQCAtMTA2LDcgKzk0LDcgQEAKIAljaGFyICpwID0gb3V0X2J1ZjsKIAogCWlmIChzdHJuY21wKGR1bXAtPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgIT0gMCkgewotCQl6ZmNwX2RiZl90aW1lc3RhbXAoZW50cnktPmlkLnN0Y2ssICZ0KTsKKwkJc3Rja190b190aW1lc3BlYyhlbnRyeS0+aWQuc3RjaywgJnQpOwogCQl6ZmNwX2RiZl9vdXQoJnAsICJ0aW1lc3RhbXAiLCAiJTAxMWx1OiUwNmx1IiwKIAkJCSAgICAgdC50dl9zZWMsIHQudHZfbnNlYyk7CiAJCXpmY3BfZGJmX291dCgmcCwgImNwdSIsICIlMDJpIiwgZW50cnktPmlkLmZpZWxkcy5jcHVpZCk7CkBAIC0xMTksMTMgKzEwNywxMCBAQAogCXJldHVybiBwIC0gb3V0X2J1ZjsKIH0KIAotLyoqCi0gKiB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlIC0gdHJhY2UgZXZlbnQgZm9yIHJlcXVlc3QgY29tcGxldGlvbgotICogQGZzZl9yZXE6IHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQKLSAqLwotdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit2b2lkIF96ZmNwX2RiZl9oYmFfZnNmX3Jlc3BvbnNlKGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKKwkJCQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxLAorCQkJCXN0cnVjdCB6ZmNwX2RiZiAqZGJmKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwogCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYiA9IGZzZl9yZXEtPnF0Y2I7CiAJdW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwgKnByb3Rfc3RhdHVzX3F1YWwgPQogCQkJCQkmcXRjYi0+cHJlZml4LnByb3Rfc3RhdHVzX3F1YWw7CkBAIC0xMzQsMzMgKzExOSwxNCBAQAogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAlzdHJ1Y3QgemZjcF9zZW5kX2VscyAqc2VuZF9lbHM7Ci0Jc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5oYmFfZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9yZXNwb25zZSAqcmVzcG9uc2UgPSAmcmVjLT51LnJlc3BvbnNlOwotCWludCBsZXZlbDsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZCAqcmVjID0gJmRiZi0+aGJhX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9yZXNwb25zZSAqcmVzcG9uc2UgPSAmcmVjLT51LnJlc3BvbnNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+aGJhX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQocmVjLCAwLCBzaXplb2YoKnJlYykpOwogCXN0cm5jcHkocmVjLT50YWcsICJyZXNwIiwgWkZDUF9EQkZfVEFHX1NJWkUpOwotCi0JaWYgKChxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMgIT0gRlNGX1BST1RfR09PRCkgJiYKLQkgICAgKHF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cyAhPSBGU0ZfUFJPVF9GU0ZfU1RBVFVTX1BSRVNFTlRFRCkpIHsKLQkJc3RybmNweShyZWMtPnRhZzIsICJwZXJyIiwgWkZDUF9EQkZfVEFHX1NJWkUpOwotCQlsZXZlbCA9IDE7Ci0JfSBlbHNlIGlmIChxdGNiLT5oZWFkZXIuZnNmX3N0YXR1cyAhPSBGU0ZfR09PRCkgewotCQlzdHJuY3B5KHJlYy0+dGFnMiwgImZlcnIiLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JCWxldmVsID0gMTsKLQl9IGVsc2UgaWYgKChmc2ZfcmVxLT5mc2ZfY29tbWFuZCA9PSBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQpIHx8Ci0JCSAgIChmc2ZfcmVxLT5mc2ZfY29tbWFuZCA9PSBGU0ZfUVRDQl9PUEVOX0xVTikpIHsKLQkJc3RybmNweShyZWMtPnRhZzIsICJvcGVuIiwgWkZDUF9EQkZfVEFHX1NJWkUpOwotCQlsZXZlbCA9IDQ7Ci0JfSBlbHNlIGlmIChxdGNiLT5oZWFkZXIubG9nX2xlbmd0aCkgewotCQlzdHJuY3B5KHJlYy0+dGFnMiwgInF0Y2IiLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JCWxldmVsID0gNTsKLQl9IGVsc2UgewotCQlzdHJuY3B5KHJlYy0+dGFnMiwgIm5vcm0iLCBaRkNQX0RCRl9UQUdfU0laRSk7Ci0JCWxldmVsID0gNjsKLQl9CisJc3RybmNweShyZWMtPnRhZzIsIHRhZzIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAogCXJlc3BvbnNlLT5mc2ZfY29tbWFuZCA9IGZzZl9yZXEtPmZzZl9jb21tYW5kOwogCXJlc3BvbnNlLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7CkBAIC0xNzMsOSArMTM5LDkgQEAKIAltZW1jcHkocmVzcG9uc2UtPmZzZl9zdGF0dXNfcXVhbCwKIAkgICAgICAgZnNmX3N0YXR1c19xdWFsLCBGU0ZfU1RBVFVTX1FVQUxJRklFUl9TSVpFKTsKIAlyZXNwb25zZS0+ZnNmX3JlcV9zdGF0dXMgPSBmc2ZfcmVxLT5zdGF0dXM7Ci0JcmVzcG9uc2UtPnNiYWxfZmlyc3QgPSBmc2ZfcmVxLT5zYmFsX2ZpcnN0OwotCXJlc3BvbnNlLT5zYmFsX2xhc3QgPSBmc2ZfcmVxLT5zYmFsX2xhc3Q7Ci0JcmVzcG9uc2UtPnNiYWxfcmVzcG9uc2UgPSBmc2ZfcmVxLT5zYmFsX3Jlc3BvbnNlOworCXJlc3BvbnNlLT5zYmFsX2ZpcnN0ID0gZnNmX3JlcS0+cXVldWVfcmVxLnNiYWxfZmlyc3Q7CisJcmVzcG9uc2UtPnNiYWxfbGFzdCA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX2xhc3Q7CisJcmVzcG9uc2UtPnNiYWxfcmVzcG9uc2UgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEuc2JhbF9yZXNwb25zZTsKIAlyZXNwb25zZS0+cG9vbCA9IGZzZl9yZXEtPnBvb2wgIT0gTlVMTDsKIAlyZXNwb25zZS0+ZXJwX2FjdGlvbiA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXEtPmVycF9hY3Rpb247CiAKQEAgLTIyNCw3ICsxOTAsNyBAQAogCQlicmVhazsKIAl9CiAKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCBsZXZlbCwgcmVjLCBzaXplb2YoKnJlYykpOworCWRlYnVnX2V2ZW50KGRiZi0+aGJhLCBsZXZlbCwgcmVjLCBzaXplb2YoKnJlYykpOwogCiAJLyogaGF2ZSBmY3AgY2hhbm5lbCBtaWNyb2NvZGUgZml4ZWQgdG8gdXNlIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSAqLwogCWlmIChmc2ZfcmVxLT5mc2ZfY29tbWFuZCAhPSBGU0ZfUVRDQl9GQ1BfQ01ORCkgewpAQCAtMjMyLDMxICsxOTgsMjUgQEAKIAkJY2hhciAqYnVmID0gKGNoYXIgKilxdGNiICsgcXRjYi0+aGVhZGVyLmxvZ19zdGFydDsKIAkJaW50IGxlbiA9IHF0Y2ItPmhlYWRlci5sb2dfbGVuZ3RoOwogCQlmb3IgKDsgbGVuICYmICFidWZbbGVuIC0gMV07IGxlbi0tKTsKLQkJemZjcF9kYmZfaGV4ZHVtcChhZGFwdGVyLT5oYmFfZGJmLCByZWMsIHNpemVvZigqcmVjKSwgbGV2ZWwsCi0JCQkJIGJ1ZiwgbGVuKTsKKwkJemZjcF9kYmZfaGV4ZHVtcChkYmYtPmhiYSwgcmVjLCBzaXplb2YoKnJlYyksIGxldmVsLCBidWYsCisJCQkJIGxlbik7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogfQogCi0vKioKLSAqIHpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2wgLSB0cmFjZSBldmVudCBmb3IgYW4gdW5zb2xpY2l0ZWQgc3RhdHVzIGJ1ZmZlcgotICogQHRhZzogdGFnIGluZGljYXRpbmcgd2hpY2gga2luZCBvZiB1bnNvbGljaXRlZCBzdGF0dXMgaGFzIGJlZW4gcmVjZWl2ZWQKLSAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoYXQgaGFzIGlzc3VlZCB0aGUgdW5zb2xpY2l0ZWQgc3RhdHVzIGJ1ZmZlcgotICogQHN0YXR1c19idWZmZXI6IGJ1ZmZlciBjb250YWluaW5nIHBheWxvYWQgb2YgdW5zb2xpY2l0ZWQgc3RhdHVzCi0gKi8KLXZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbChjb25zdCBjaGFyICp0YWcsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlcikKK3ZvaWQgX3pmY3BfZGJmX2hiYV9mc2ZfdW5zb2woY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsIHN0cnVjdCB6ZmNwX2RiZiAqZGJmLAorCQkJICAgICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3RhdHVzX2J1ZmZlcikKIHsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqcmVjID0gJmFkYXB0ZXItPmhiYV9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkICpyZWMgPSAmZGJmLT5oYmFfYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+aGJhX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQocmVjLCAwLCBzaXplb2YoKnJlYykpOwogCXN0cm5jcHkocmVjLT50YWcsICJzdGF0IiwgWkZDUF9EQkZfVEFHX1NJWkUpOwogCXN0cm5jcHkocmVjLT50YWcyLCB0YWcsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAotCXJlYy0+dS5zdGF0dXMuZmFpbGVkID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXRfbWlzcyk7CisJcmVjLT51LnN0YXR1cy5mYWlsZWQgPSBhdG9taWNfcmVhZCgmZGJmLT5hZGFwdGVyLT5zdGF0X21pc3MpOwogCWlmIChzdGF0dXNfYnVmZmVyICE9IE5VTEwpIHsKIAkJcmVjLT51LnN0YXR1cy5zdGF0dXNfdHlwZSA9IHN0YXR1c19idWZmZXItPnN0YXR1c190eXBlOwogCQlyZWMtPnUuc3RhdHVzLnN0YXR1c19zdWJ0eXBlID0gc3RhdHVzX2J1ZmZlci0+c3RhdHVzX3N1YnR5cGU7CkBAIC0yOTMsNjMgKzI1Myw2MSBAQAogCQkgICAgICAgJnN0YXR1c19idWZmZXItPnBheWxvYWQsIHJlYy0+dS5zdGF0dXMucGF5bG9hZF9zaXplKTsKIAl9CiAKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCAyLCByZWMsIHNpemVvZigqcmVjKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJZGVidWdfZXZlbnQoZGJmLT5oYmEsIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHpmY3BfaGJhX2RiZl9ldmVudF9xZGlvIC0gdHJhY2UgZXZlbnQgZm9yIFFESU8gcmVsYXRlZCBmYWlsdXJlCi0gKiBAYWRhcHRlcjogYWRhcHRlciBhZmZlY3RlZCBieSB0aGlzIFFESU8gcmVsYXRlZCBldmVudAorICogemZjcF9kYmZfaGJhX3FkaW8gLSB0cmFjZSBldmVudCBmb3IgUURJTyByZWxhdGVkIGZhaWx1cmUKKyAqIEBxZGlvOiBxZGlvIHN0cnVjdHVyZSBhZmZlY3RlZCBieSB0aGlzIFFESU8gcmVsYXRlZCBldmVudAogICogQHFkaW9fZXJyb3I6IGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQogICogQHNiYWxfaW5kZXg6IGZpcnN0IGJ1ZmZlciB3aXRoIGVycm9yIGNvbmRpdGlvbiwgYXMgcGFzc2VkIGJ5IHFkaW8gbW9kdWxlCiAgKiBAc2JhbF9jb3VudDogbnVtYmVyIG9mIGJ1ZmZlcnMgYWZmZWN0ZWQsIGFzIHBhc3NlZCBieSBxZGlvIG1vZHVsZQogICovCi12b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9xZGlvKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgIHVuc2lnbmVkIGludCBxZGlvX2Vycm9yLCBpbnQgc2JhbF9pbmRleCwKLQkJCSAgICAgaW50IHNiYWxfY291bnQpCit2b2lkIHpmY3BfZGJmX2hiYV9xZGlvKHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCB1bnNpZ25lZCBpbnQgcWRpb19lcnJvciwKKwkJICAgICAgIGludCBzYmFsX2luZGV4LCBpbnQgc2JhbF9jb3VudCkKIHsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5oYmFfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZCAqciA9ICZkYmYtPmhiYV9idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlzdHJuY3B5KHItPnRhZywgInFkaW8iLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAJci0+dS5xZGlvLnFkaW9fZXJyb3IgPSBxZGlvX2Vycm9yOwogCXItPnUucWRpby5zYmFsX2luZGV4ID0gc2JhbF9pbmRleDsKIAlyLT51LnFkaW8uc2JhbF9jb3VudCA9IHNiYWxfY291bnQ7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+aGJhX2RiZiwgMCwgciwgc2l6ZW9mKCpyKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+aGJhX2RiZl9sb2NrLCBmbGFncyk7CisJZGVidWdfZXZlbnQoZGJmLT5oYmEsIDAsIHIsIHNpemVvZigqcikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+aGJhX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiB6ZmNwX2hiYV9kYmZfZXZlbnRfYmVyciAtIHRyYWNlIGV2ZW50IGZvciBiaXQgZXJyb3IgdGhyZXNob2xkCi0gKiBAYWRhcHRlcjogYWRhcHRlciBhZmZlY3RlZCBieSB0aGlzIFFESU8gcmVsYXRlZCBldmVudAorICogemZjcF9kYmZfaGJhX2JlcnIgLSB0cmFjZSBldmVudCBmb3IgYml0IGVycm9yIHRocmVzaG9sZAorICogQGRiZjogZGJmIHN0cnVjdHVyZSBhZmZlY3RlZCBieSB0aGlzIFFESU8gcmVsYXRlZCBldmVudAogICogQHJlcTogZnNmIHJlcXVlc3QKICAqLwotdm9pZCB6ZmNwX2hiYV9kYmZfZXZlbnRfYmVycihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCit2b2lkIHpmY3BfZGJmX2hiYV9iZXJyKHN0cnVjdCB6ZmNwX2RiZiAqZGJmLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7Ci0Jc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+aGJhX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQgKnIgPSAmZGJmLT5oYmFfYnVmOwogCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpzcl9idWYgPSByZXEtPmRhdGE7CiAJc3RydWN0IGZzZl9iaXRfZXJyb3JfcGF5bG9hZCAqZXJyID0gJnNyX2J1Zi0+cGF5bG9hZC5iaXRfZXJyb3I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlzdHJuY3B5KHItPnRhZywgImJlcnIiLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAJbWVtY3B5KCZyLT51LmJlcnIsIGVyciwgc2l6ZW9mKHN0cnVjdCBmc2ZfYml0X2Vycm9yX3BheWxvYWQpKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5oYmFfZGJmLCAwLCByLCBzaXplb2YoKnIpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5oYmFfZGJmX2xvY2ssIGZsYWdzKTsKKwlkZWJ1Z19ldmVudChkYmYtPmhiYSwgMCwgciwgc2l6ZW9mKCpyKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5oYmFfbG9jaywgZmxhZ3MpOwogfQotc3RhdGljIHZvaWQgemZjcF9oYmFfZGJmX3ZpZXdfcmVzcG9uc2UoY2hhciAqKnAsCi0JCQkJICAgICAgIHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3Jlc3BvbnNlICpyKQorc3RhdGljIHZvaWQgemZjcF9kYmZfaGJhX3ZpZXdfcmVzcG9uc2UoY2hhciAqKnAsCisJCQkJICAgICAgIHN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3Jlc3BvbnNlICpyKQogewogCXN0cnVjdCB0aW1lc3BlYyB0OwogCiAJemZjcF9kYmZfb3V0KHAsICJmc2ZfY29tbWFuZCIsICIweCUwOHgiLCByLT5mc2ZfY29tbWFuZCk7CiAJemZjcF9kYmZfb3V0KHAsICJmc2ZfcmVxaWQiLCAiMHglMEx4Iiwgci0+ZnNmX3JlcWlkKTsKIAl6ZmNwX2RiZl9vdXQocCwgImZzZl9zZXFubyIsICIweCUwOHgiLCByLT5mc2Zfc2Vxbm8pOwotCXpmY3BfZGJmX3RpbWVzdGFtcChyLT5mc2ZfaXNzdWVkLCAmdCk7CisJc3Rja190b190aW1lc3BlYyhyLT5mc2ZfaXNzdWVkLCAmdCk7CiAJemZjcF9kYmZfb3V0KHAsICJmc2ZfaXNzdWVkIiwgIiUwMTFsdTolMDZsdSIsIHQudHZfc2VjLCB0LnR2X25zZWMpOwogCXpmY3BfZGJmX291dChwLCAiZnNmX3Byb3Rfc3RhdHVzIiwgIjB4JTA4eCIsIHItPmZzZl9wcm90X3N0YXR1cyk7CiAJemZjcF9kYmZfb3V0KHAsICJmc2Zfc3RhdHVzIiwgIjB4JTA4eCIsIHItPmZzZl9zdGF0dXMpOwpAQCAtNDAzLDggKzM2MSw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX2hiYV9kYmZfdmlld19zdGF0dXMoY2hhciAqKnAsCi0JCQkJICAgICBzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9zdGF0dXMgKnIpCitzdGF0aWMgdm9pZCB6ZmNwX2RiZl9oYmFfdmlld19zdGF0dXMoY2hhciAqKnAsCisJCQkJICAgICBzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9zdGF0dXMgKnIpCiB7CiAJemZjcF9kYmZfb3V0KHAsICJmYWlsZWQiLCAiMHglMDJ4Iiwgci0+ZmFpbGVkKTsKIAl6ZmNwX2RiZl9vdXQocCwgInN0YXR1c190eXBlIiwgIjB4JTA4eCIsIHItPnN0YXR1c190eXBlKTsKQEAgLTQxNiwxNCArMzc0LDE0IEBACiAJCSAgICAgIHItPnBheWxvYWRfc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfaGJhX2RiZl92aWV3X3FkaW8oY2hhciAqKnAsIHN0cnVjdCB6ZmNwX2hiYV9kYmZfcmVjb3JkX3FkaW8gKnIpCitzdGF0aWMgdm9pZCB6ZmNwX2RiZl9oYmFfdmlld19xZGlvKGNoYXIgKipwLCBzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9xZGlvICpyKQogewogCXpmY3BfZGJmX291dChwLCAicWRpb19lcnJvciIsICIweCUwOHgiLCByLT5xZGlvX2Vycm9yKTsKIAl6ZmNwX2RiZl9vdXQocCwgInNiYWxfaW5kZXgiLCAiMHglMDJ4Iiwgci0+c2JhbF9pbmRleCk7CiAJemZjcF9kYmZfb3V0KHAsICJzYmFsX2NvdW50IiwgIjB4JTAyeCIsIHItPnNiYWxfY291bnQpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX2hiYV9kYmZfdmlld19iZXJyKGNoYXIgKipwLCBzdHJ1Y3QgZnNmX2JpdF9lcnJvcl9wYXlsb2FkICpyKQorc3RhdGljIHZvaWQgemZjcF9kYmZfaGJhX3ZpZXdfYmVycihjaGFyICoqcCwgc3RydWN0IGZzZl9iaXRfZXJyb3JfcGF5bG9hZCAqcikKIHsKIAl6ZmNwX2RiZl9vdXQocCwgImxpbmtfZmFpbHVyZXMiLCAiJWQiLCByLT5saW5rX2ZhaWx1cmVfZXJyb3JfY291bnQpOwogCXpmY3BfZGJmX291dChwLCAibG9zc19vZl9zeW5jX2VyciIsICIlZCIsIHItPmxvc3Nfb2Zfc3luY19lcnJvcl9jb3VudCk7CkBAIC00NDcsMTAgKzQwNSwxMCBAQAogCQkgICAgIHItPmN1cnJlbnRfdHJhbnNtaXRfYjJiX2NyZWRpdCk7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9oYmFfZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAorc3RhdGljIGludCB6ZmNwX2RiZl9oYmFfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCiAJCQkJICAgIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZikKIHsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZCAqKWluX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZCAqKWluX2J1ZjsKIAljaGFyICpwID0gb3V0X2J1ZjsKIAogCWlmIChzdHJuY21wKHItPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKQEAgLTQ2MSw0NSArNDE5LDQyIEBACiAJCXpmY3BfZGJmX3RhZygmcCwgInRhZzIiLCByLT50YWcyKTsKIAogCWlmIChzdHJuY21wKHItPnRhZywgInJlc3AiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJemZjcF9oYmFfZGJmX3ZpZXdfcmVzcG9uc2UoJnAsICZyLT51LnJlc3BvbnNlKTsKKwkJemZjcF9kYmZfaGJhX3ZpZXdfcmVzcG9uc2UoJnAsICZyLT51LnJlc3BvbnNlKTsKIAllbHNlIGlmIChzdHJuY21wKHItPnRhZywgInN0YXQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJemZjcF9oYmFfZGJmX3ZpZXdfc3RhdHVzKCZwLCAmci0+dS5zdGF0dXMpOworCQl6ZmNwX2RiZl9oYmFfdmlld19zdGF0dXMoJnAsICZyLT51LnN0YXR1cyk7CiAJZWxzZSBpZiAoc3RybmNtcChyLT50YWcsICJxZGlvIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApCi0JCXpmY3BfaGJhX2RiZl92aWV3X3FkaW8oJnAsICZyLT51LnFkaW8pOworCQl6ZmNwX2RiZl9oYmFfdmlld19xZGlvKCZwLCAmci0+dS5xZGlvKTsKIAllbHNlIGlmIChzdHJuY21wKHItPnRhZywgImJlcnIiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKLQkJemZjcF9oYmFfZGJmX3ZpZXdfYmVycigmcCwgJnItPnUuYmVycik7CisJCXpmY3BfZGJmX2hiYV92aWV3X2JlcnIoJnAsICZyLT51LmJlcnIpOwogCiAJaWYgKHN0cm5jbXAoci0+dGFnLCAicmVzcCIsIFpGQ1BfREJGX1RBR19TSVpFKSAhPSAwKQogCQlwICs9IHNwcmludGYocCwgIlxuIik7CiAJcmV0dXJuIHAgLSBvdXRfYnVmOwogfQogCi1zdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9oYmFfZGJmX3ZpZXcgPSB7Ci0JInN0cnVjdHVyZWQiLAotCU5VTEwsCi0JJnpmY3BfZGJmX3ZpZXdfaGVhZGVyLAotCSZ6ZmNwX2hiYV9kYmZfdmlld19mb3JtYXQsCi0JTlVMTCwKLQlOVUxMCitzdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9kYmZfaGJhX3ZpZXcgPSB7CisJLm5hbWUgPSAic3RydWN0dXJlZCIsCisJLmhlYWRlcl9wcm9jID0gemZjcF9kYmZfdmlld19oZWFkZXIsCisJLmZvcm1hdF9wcm9jID0gemZjcF9kYmZfaGJhX3ZpZXdfZm9ybWF0LAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKnpmY3BfcmVjX2RiZl90YWdzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqemZjcF9kYmZfcmVjX3RhZ3NbXSA9IHsKIAlbWkZDUF9SRUNfREJGX0lEX1RIUkVBRF0gPSAidGhyZWFkIiwKIAlbWkZDUF9SRUNfREJGX0lEX1RBUkdFVF0gPSAidGFyZ2V0IiwKIAlbWkZDUF9SRUNfREJGX0lEX1RSSUdHRVJdID0gInRyaWdnZXIiLAogCVtaRkNQX1JFQ19EQkZfSURfQUNUSU9OXSA9ICJhY3Rpb24iLAogfTsKIAotc3RhdGljIGludCB6ZmNwX3JlY19kYmZfdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCitzdGF0aWMgaW50IHpmY3BfZGJmX3JlY192aWV3X2Zvcm1hdChkZWJ1Z19pbmZvX3QgKmlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywKIAkJCQkgICAgY2hhciAqYnVmLCBjb25zdCBjaGFyICpfcmVjKQogewotCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICopX3JlYzsKKwlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqKV9yZWM7CiAJY2hhciAqcCA9IGJ1ZjsKIAljaGFyIGhpbnRbWkZDUF9EQkZfSURfU0laRSArIDFdOwogCiAJbWVtY3B5KGhpbnQsIHItPmlkMiwgWkZDUF9EQkZfSURfU0laRSk7CiAJaGludFtaRkNQX0RCRl9JRF9TSVpFXSA9IDA7Ci0JemZjcF9kYmZfb3V0cygmcCwgInRhZyIsIHpmY3BfcmVjX2RiZl90YWdzW3ItPmlkXSk7CisJemZjcF9kYmZfb3V0cygmcCwgInRhZyIsIHpmY3BfZGJmX3JlY190YWdzW3ItPmlkXSk7CiAJemZjcF9kYmZfb3V0cygmcCwgImhpbnQiLCBoaW50KTsKIAlzd2l0Y2ggKHItPmlkKSB7CiAJY2FzZSBaRkNQX1JFQ19EQkZfSURfVEhSRUFEOgpAQCAtNTM3LDI0ICs0OTIsMjIgQEAKIAlyZXR1cm4gcCAtIGJ1ZjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3BfcmVjX2RiZl92aWV3ID0gewotCSJzdHJ1Y3R1cmVkIiwKLQlOVUxMLAotCSZ6ZmNwX2RiZl92aWV3X2hlYWRlciwKLQkmemZjcF9yZWNfZGJmX3ZpZXdfZm9ybWF0LAotCU5VTEwsCi0JTlVMTAorc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3BfZGJmX3JlY192aWV3ID0geworCS5uYW1lID0gInN0cnVjdHVyZWQiLAorCS5oZWFkZXJfcHJvYyA9IHpmY3BfZGJmX3ZpZXdfaGVhZGVyLAorCS5mb3JtYXRfcHJvYyA9IHpmY3BfZGJmX3JlY192aWV3X2Zvcm1hdCwKIH07CiAKIC8qKgotICogemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCAtIHRyYWNlIGV2ZW50IHJlbGF0ZWQgdG8gcmVjb3ZlcnkgdGhyZWFkIG9wZXJhdGlvbgorICogemZjcF9kYmZfcmVjX3RocmVhZCAtIHRyYWNlIGV2ZW50IHJlbGF0ZWQgdG8gcmVjb3ZlcnkgdGhyZWFkIG9wZXJhdGlvbgogICogQGlkMjogaWRlbnRpZmllciBmb3IgZXZlbnQKLSAqIEBhZGFwdGVyOiBhZGFwdGVyCisgKiBAZGJmOiByZWZlcmVuY2UgdG8gZGJmIHN0cnVjdHVyZQogICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGNhbGxlciBpcyBob2xkaW5nIGVycF9sb2NrLgogICovCi12b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQordm9pZCB6ZmNwX2RiZl9yZWNfdGhyZWFkKGNoYXIgKmlkMiwgc3RydWN0IHpmY3BfZGJmICpkYmYpCiB7Ci0Jc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+cmVjX2RiZl9idWY7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGRiZi0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqciA9ICZkYmYtPnJlY19idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJdW5zaWduZWQgcmVhZHkgPSAwLCBydW5uaW5nID0gMCwgdG90YWw7CkBAIC01NjUsNDEgKzUxOCw0MSBAQAogCQlydW5uaW5nKys7CiAJdG90YWwgPSBhZGFwdGVyLT5lcnBfdG90YWxfY291bnQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CiAJci0+aWQgPSBaRkNQX1JFQ19EQkZfSURfVEhSRUFEOwogCW1lbWNweShyLT5pZDIsIGlkMiwgWkZDUF9EQkZfSURfU0laRSk7CiAJci0+dS50aHJlYWQudG90YWwgPSB0b3RhbDsKIAlyLT51LnRocmVhZC5yZWFkeSA9IHJlYWR5OwogCXItPnUudGhyZWFkLnJ1bm5pbmcgPSBydW5uaW5nOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnJlY19kYmYsIDYsIHIsIHNpemVvZigqcikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCA2LCByLCBzaXplb2YoKnIpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgotICogemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZCAtIHRyYWNlIGV2ZW50IHJlbGF0ZWQgdG8gcmVjb3ZlcnkgdGhyZWFkIG9wZXJhdGlvbgorICogemZjcF9kYmZfcmVjX3RocmVhZCAtIHRyYWNlIGV2ZW50IHJlbGF0ZWQgdG8gcmVjb3ZlcnkgdGhyZWFkIG9wZXJhdGlvbgogICogQGlkMjogaWRlbnRpZmllciBmb3IgZXZlbnQKICAqIEBhZGFwdGVyOiBhZGFwdGVyCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgZXJwX2xvY2suCiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKGNoYXIgKmlkMiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKGNoYXIgKmlkMiwgc3RydWN0IHpmY3BfZGJmICpkYmYpCiB7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGRiZi0+YWRhcHRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmVhZF9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZChpZDIsIGFkYXB0ZXIpOworCXpmY3BfZGJmX3JlY190aHJlYWQoaWQyLCBkYmYpOwogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90YXJnZXQoY2hhciAqaWQyLCB2b2lkICpyZWYsCi0JCQkJICAgICAgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICAgICBhdG9taWNfdCAqc3RhdHVzLCBhdG9taWNfdCAqZXJwX2NvdW50LAotCQkJCSAgICAgIHU2NCB3d3BuLCB1MzIgZF9pZCwgdTY0IGZjcF9sdW4pCitzdGF0aWMgdm9pZCB6ZmNwX2RiZl9yZWNfdGFyZ2V0KGNoYXIgKmlkMiwgdm9pZCAqcmVmLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwKKwkJCQlhdG9taWNfdCAqc3RhdHVzLCBhdG9taWNfdCAqZXJwX2NvdW50LCB1NjQgd3dwbiwKKwkJCQl1MzIgZF9pZCwgdTY0IGZjcF9sdW4pCiB7Ci0Jc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+cmVjX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmQgKnIgPSAmZGJmLT5yZWNfYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIAltZW1zZXQociwgMCwgc2l6ZW9mKCpyKSk7CiAJci0+aWQgPSBaRkNQX1JFQ19EQkZfSURfVEFSR0VUOwogCW1lbWNweShyLT5pZDIsIGlkMiwgWkZDUF9EQkZfSURfU0laRSk7CkBAIC02MDksNTYgKzU2Miw1NyBAQAogCXItPnUudGFyZ2V0LmRfaWQgPSBkX2lkOwogCXItPnUudGFyZ2V0LmZjcF9sdW4gPSBmY3BfbHVuOwogCXItPnUudGFyZ2V0LmVycF9jb3VudCA9IGF0b21pY19yZWFkKGVycF9jb3VudCk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+cmVjX2RiZiwgMywgciwgc2l6ZW9mKCpyKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVjX2RiZl9sb2NrLCBmbGFncyk7CisJZGVidWdfZXZlbnQoZGJmLT5yZWMsIDMsIHIsIHNpemVvZigqcikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiB6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlciAtIHRyYWNlIGV2ZW50IGZvciBhZGFwdGVyIHN0YXRlIGNoYW5nZQorICogemZjcF9kYmZfcmVjX2FkYXB0ZXIgLSB0cmFjZSBldmVudCBmb3IgYWRhcHRlciBzdGF0ZSBjaGFuZ2UKICAqIEBpZDogaWRlbnRpZmllciBmb3IgdHJpZ2dlciBvZiBzdGF0ZSBjaGFuZ2UKICAqIEByZWY6IGFkZGl0aW9uYWwgcmVmZXJlbmNlIChlLmcuIHJlcXVlc3QpCi0gKiBAYWRhcHRlcjogYWRhcHRlcgorICogQGRiZjogcmVmZXJlbmNlIHRvIGRiZiBzdHJ1Y3R1cmUKICAqLwotdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcihjaGFyICppZCwgdm9pZCAqcmVmLAotCQkJCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIHpmY3BfZGJmX3JlY19hZGFwdGVyKGNoYXIgKmlkLCB2b2lkICpyZWYsIHN0cnVjdCB6ZmNwX2RiZiAqZGJmKQogewotCXpmY3BfcmVjX2RiZl9ldmVudF90YXJnZXQoaWQsIHJlZiwgYWRhcHRlciwgJmFkYXB0ZXItPnN0YXR1cywKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZGJmLT5hZGFwdGVyOworCisJemZjcF9kYmZfcmVjX3RhcmdldChpZCwgcmVmLCBkYmYsICZhZGFwdGVyLT5zdGF0dXMsCiAJCQkJICAmYWRhcHRlci0+ZXJwX2NvdW50ZXIsIDAsIDAsIDApOwogfQogCiAvKioKLSAqIHpmY3BfcmVjX2RiZl9ldmVudF9wb3J0IC0gdHJhY2UgZXZlbnQgZm9yIHBvcnQgc3RhdGUgY2hhbmdlCisgKiB6ZmNwX2RiZl9yZWNfcG9ydCAtIHRyYWNlIGV2ZW50IGZvciBwb3J0IHN0YXRlIGNoYW5nZQogICogQGlkOiBpZGVudGlmaWVyIGZvciB0cmlnZ2VyIG9mIHN0YXRlIGNoYW5nZQogICogQHJlZjogYWRkaXRpb25hbCByZWZlcmVuY2UgKGUuZy4gcmVxdWVzdCkKICAqIEBwb3J0OiBwb3J0CiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoY2hhciAqaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3ZvaWQgemZjcF9kYmZfcmVjX3BvcnQoY2hhciAqaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IHBvcnQtPmFkYXB0ZXItPmRiZjsKIAotCXpmY3BfcmVjX2RiZl9ldmVudF90YXJnZXQoaWQsIHJlZiwgYWRhcHRlciwgJnBvcnQtPnN0YXR1cywKKwl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJnBvcnQtPnN0YXR1cywKIAkJCQkgICZwb3J0LT5lcnBfY291bnRlciwgcG9ydC0+d3dwbiwgcG9ydC0+ZF9pZCwKIAkJCQkgIDApOwogfQogCiAvKioKLSAqIHpmY3BfcmVjX2RiZl9ldmVudF91bml0IC0gdHJhY2UgZXZlbnQgZm9yIHVuaXQgc3RhdGUgY2hhbmdlCisgKiB6ZmNwX2RiZl9yZWNfdW5pdCAtIHRyYWNlIGV2ZW50IGZvciB1bml0IHN0YXRlIGNoYW5nZQogICogQGlkOiBpZGVudGlmaWVyIGZvciB0cmlnZ2VyIG9mIHN0YXRlIGNoYW5nZQogICogQHJlZjogYWRkaXRpb25hbCByZWZlcmVuY2UgKGUuZy4gcmVxdWVzdCkKICAqIEB1bml0OiB1bml0CiAgKi8KLXZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoY2hhciAqaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCkKK3ZvaWQgemZjcF9kYmZfcmVjX3VuaXQoY2hhciAqaWQsIHZvaWQgKnJlZiwgc3RydWN0IHpmY3BfdW5pdCAqdW5pdCkKIHsKIAlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gdW5pdC0+cG9ydDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IHBvcnQtPmFkYXB0ZXItPmRiZjsKIAotCXpmY3BfcmVjX2RiZl9ldmVudF90YXJnZXQoaWQsIHJlZiwgYWRhcHRlciwgJnVuaXQtPnN0YXR1cywKKwl6ZmNwX2RiZl9yZWNfdGFyZ2V0KGlkLCByZWYsIGRiZiwgJnVuaXQtPnN0YXR1cywKIAkJCQkgICZ1bml0LT5lcnBfY291bnRlciwgcG9ydC0+d3dwbiwgcG9ydC0+ZF9pZCwKIAkJCQkgIHVuaXQtPmZjcF9sdW4pOwogfQogCiAvKioKLSAqIHpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyIC0gdHJhY2UgZXZlbnQgZm9yIHRyaWdnZXJlZCBlcnJvciByZWNvdmVyeQorICogemZjcF9kYmZfcmVjX3RyaWdnZXIgLSB0cmFjZSBldmVudCBmb3IgdHJpZ2dlcmVkIGVycm9yIHJlY292ZXJ5CiAgKiBAaWQyOiBpZGVudGlmaWVyIGZvciBlcnJvciByZWNvdmVyeSB0cmlnZ2VyCiAgKiBAcmVmOiBhZGRpdGlvbmFsIHJlZmVyZW5jZSAoZS5nLiByZXF1ZXN0KQogICogQHdhbnQ6IG9yaWdpbmFsbHkgcmVxdWVzdGVkIGVycm9yIHJlY292ZXJ5IGFjdGlvbgpAQCAtNjY4LDE0ICs2MjIsMTUgQEAKICAqIEBwb3J0OiBwb3J0CiAgKiBAdW5pdDogdW5pdAogICovCi12b2lkIHpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKGNoYXIgKmlkMiwgdm9pZCAqcmVmLCB1OCB3YW50LCB1OCBuZWVkLAotCQkJCXZvaWQgKmFjdGlvbiwgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LCBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQordm9pZCB6ZmNwX2RiZl9yZWNfdHJpZ2dlcihjaGFyICppZDIsIHZvaWQgKnJlZiwgdTggd2FudCwgdTggbmVlZCwgdm9pZCAqYWN0aW9uLAorCQkJICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0LAorCQkJICBzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewotCXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkICpyID0gJmFkYXB0ZXItPnJlY19kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gYWRhcHRlci0+ZGJmOworCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkICpyID0gJmRiZi0+cmVjX2J1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXItPmlkID0gWkZDUF9SRUNfREJGX0lEX1RSSUdHRVI7CiAJbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKQEAgLTY5MiwyMiArNjQ3LDIyIEBACiAJCXItPnUudHJpZ2dlci51cyA9IGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpOwogCQlyLT51LnRyaWdnZXIuZmNwX2x1biA9IHVuaXQtPmZjcF9sdW47CiAJfQotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnJlY19kYmYsIGFjdGlvbiA/IDEgOiA0LCByLCBzaXplb2YoKnIpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKKwlkZWJ1Z19ldmVudChkYmYtPnJlYywgYWN0aW9uID8gMSA6IDQsIHIsIHNpemVvZigqcikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+cmVjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiB6ZmNwX3JlY19kYmZfZXZlbnRfYWN0aW9uIC0gdHJhY2UgZXZlbnQgc2hvd2luZyBwcm9ncmVzcyBvZiByZWNvdmVyeSBhY3Rpb24KKyAqIHpmY3BfZGJmX3JlY19hY3Rpb24gLSB0cmFjZSBldmVudCBzaG93aW5nIHByb2dyZXNzIG9mIHJlY292ZXJ5IGFjdGlvbgogICogQGlkMjogaWRlbnRpZmllcgogICogQGVycF9hY3Rpb246IGVycm9yIHJlY292ZXJ5IGFjdGlvbiBzdHJ1Y3QgcG9pbnRlcgogICovCi12b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oY2hhciAqaWQyLCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQordm9pZCB6ZmNwX2RiZl9yZWNfYWN0aW9uKGNoYXIgKmlkMiwgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZCAqciA9ICZhZGFwdGVyLT5yZWNfZGJmX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmYgKmRiZiA9IGVycF9hY3Rpb24tPmFkYXB0ZXItPmRiZjsKKwlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCAqciA9ICZkYmYtPnJlY19idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZWNfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5yZWNfbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlyLT5pZCA9IFpGQ1BfUkVDX0RCRl9JRF9BQ1RJT047CiAJbWVtY3B5KHItPmlkMiwgaWQyLCBaRkNQX0RCRl9JRF9TSVpFKTsKQEAgLTcxNSwyNiArNjcwLDI3IEBACiAJci0+dS5hY3Rpb24uc3RhdHVzID0gZXJwX2FjdGlvbi0+c3RhdHVzOwogCXItPnUuYWN0aW9uLnN0ZXAgPSBlcnBfYWN0aW9uLT5zdGVwOwogCXItPnUuYWN0aW9uLmZzZl9yZXEgPSAodW5zaWduZWQgbG9uZyllcnBfYWN0aW9uLT5mc2ZfcmVxOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnJlY19kYmYsIDUsIHIsIHNpemVvZigqcikpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlY19kYmZfbG9jaywgZmxhZ3MpOworCWRlYnVnX2V2ZW50KGRiZi0+cmVjLCA1LCByLCBzaXplb2YoKnIpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYmYtPnJlY19sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgotICogemZjcF9zYW5fZGJmX2V2ZW50X2N0X3JlcXVlc3QgLSB0cmFjZSBldmVudCBmb3IgaXNzdWVkIENUIHJlcXVlc3QKKyAqIHpmY3BfZGJmX3Nhbl9jdF9yZXF1ZXN0IC0gdHJhY2UgZXZlbnQgZm9yIGlzc3VlZCBDVCByZXF1ZXN0CiAgKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIGlzc3VlZCBDVCBkYXRhCiAgKi8KLXZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgemZjcF9kYmZfc2FuX2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKIAlzdHJ1Y3QgemZjcF9zZW5kX2N0ICpjdCA9IChzdHJ1Y3QgemZjcF9zZW5kX2N0ICopZnNmX3JlcS0+ZGF0YTsKIAlzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQgPSBjdC0+d2thX3BvcnQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHdrYV9wb3J0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gYWRhcHRlci0+ZGJmOwogCXN0cnVjdCBjdF9oZHIgKmhkciA9IHNnX3ZpcnQoY3QtPnJlcSk7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+c2FuX2RiZl9idWY7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVxdWVzdCAqb2N0ID0gJnItPnUuY3RfcmVxOworCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkICpyID0gJmRiZi0+c2FuX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXF1ZXN0ICpvY3QgPSAmci0+dS5jdF9yZXE7CiAJaW50IGxldmVsID0gMzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYmYtPnNhbl9sb2NrLCBmbGFncyk7CiAJbWVtc2V0KHIsIDAsIHNpemVvZigqcikpOwogCXN0cm5jcHkoci0+dGFnLCAib2N0YyIsIFpGQ1BfREJGX1RBR19TSVpFKTsKIAlyLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7CkBAIC03NDksMjggKzcwNSwyOSBAQAogCW9jdC0+bWF4X3Jlc19zaXplID0gaGRyLT5tYXhfcmVzX3NpemU7CiAJb2N0LT5sZW4gPSBtaW4oKGludCljdC0+cmVxLT5sZW5ndGggLSAoaW50KXNpemVvZihzdHJ1Y3QgY3RfaGRyKSwKIAkJICAgICAgIFpGQ1BfREJGX1NBTl9NQVhfUEFZTE9BRCk7Ci0JZGVidWdfZXZlbnQoYWRhcHRlci0+c2FuX2RiZiwgbGV2ZWwsIHIsIHNpemVvZigqcikpOwotCXpmY3BfZGJmX2hleGR1bXAoYWRhcHRlci0+c2FuX2RiZiwgciwgc2l6ZW9mKCpyKSwgbGV2ZWwsCisJZGVidWdfZXZlbnQoZGJmLT5zYW4sIGxldmVsLCByLCBzaXplb2YoKnIpKTsKKwl6ZmNwX2RiZl9oZXhkdW1wKGRiZi0+c2FuLCByLCBzaXplb2YoKnIpLCBsZXZlbCwKIAkJCSAodm9pZCAqKWhkciArIHNpemVvZihzdHJ1Y3QgY3RfaGRyKSwgb2N0LT5sZW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNhbl9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+c2FuX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgY29tcGxldGlvbiBvZiBDVCByZXF1ZXN0CisgKiB6ZmNwX2RiZl9zYW5fY3RfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgY29tcGxldGlvbiBvZiBDVCByZXF1ZXN0CiAgKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIENUIHJlc3BvbnNlCiAgKi8KLXZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2N0X3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit2b2lkIHpmY3BfZGJmX3Nhbl9jdF9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewogCXN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0ID0gKHN0cnVjdCB6ZmNwX3NlbmRfY3QgKilmc2ZfcmVxLT5kYXRhOwogCXN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCA9IGN0LT53a2FfcG9ydDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gd2thX3BvcnQtPmFkYXB0ZXI7CiAJc3RydWN0IGN0X2hkciAqaGRyID0gc2dfdmlydChjdC0+cmVzcCk7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgKnIgPSAmYWRhcHRlci0+c2FuX2RiZl9idWY7Ci0Jc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVzcG9uc2UgKnJjdCA9ICZyLT51LmN0X3Jlc3A7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSBhZGFwdGVyLT5kYmY7CisJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmQgKnIgPSAmZGJmLT5zYW5fYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3Jlc3BvbnNlICpyY3QgPSAmci0+dS5jdF9yZXNwOwogCWludCBsZXZlbCA9IDM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zYW5fZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5zYW5fbG9jaywgZmxhZ3MpOwogCW1lbXNldChyLCAwLCBzaXplb2YoKnIpKTsKIAlzdHJuY3B5KHItPnRhZywgInJjdGMiLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAJci0+ZnNmX3JlcWlkID0gZnNmX3JlcS0+cmVxX2lkOwpAQCAtNzg1LDIyICs3NDIsMjIgQEAKIAlyY3QtPm1heF9yZXNfc2l6ZSA9IGhkci0+bWF4X3Jlc19zaXplOwogCXJjdC0+bGVuID0gbWluKChpbnQpY3QtPnJlc3AtPmxlbmd0aCAtIChpbnQpc2l6ZW9mKHN0cnVjdCBjdF9oZHIpLAogCQkgICAgICAgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEKTsKLQlkZWJ1Z19ldmVudChhZGFwdGVyLT5zYW5fZGJmLCBsZXZlbCwgciwgc2l6ZW9mKCpyKSk7Ci0JemZjcF9kYmZfaGV4ZHVtcChhZGFwdGVyLT5zYW5fZGJmLCByLCBzaXplb2YoKnIpLCBsZXZlbCwKKwlkZWJ1Z19ldmVudChkYmYtPnNhbiwgbGV2ZWwsIHIsIHNpemVvZigqcikpOworCXpmY3BfZGJmX2hleGR1bXAoZGJmLT5zYW4sIHIsIHNpemVvZigqciksIGxldmVsLAogCQkJICh2b2lkICopaGRyICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHIpLCByY3QtPmxlbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5zYW5fbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzKGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLAotCQkJCSAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHUzMiBzX2lkLAotCQkJCSAgIHUzMiBkX2lkLCB1OCBsc19jb2RlLCB2b2lkICpidWZmZXIsCi0JCQkJICAgaW50IGJ1ZmxlbikKK3N0YXRpYyB2b2lkIHpmY3BfZGJmX3Nhbl9lbHMoY29uc3QgY2hhciAqdGFnLCBpbnQgbGV2ZWwsCisJCQkgICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHUzMiBzX2lkLCB1MzIgZF9pZCwKKwkJCSAgICAgdTggbHNfY29kZSwgdm9pZCAqYnVmZmVyLCBpbnQgYnVmbGVuKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwotCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkICpyZWMgPSAmYWRhcHRlci0+c2FuX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmICpkYmYgPSBhZGFwdGVyLT5kYmY7CisJc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmQgKnJlYyA9ICZkYmYtPnNhbl9idWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zYW5fZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5zYW5fbG9jaywgZmxhZ3MpOwogCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7CiAJc3RybmNweShyZWMtPnRhZywgdGFnLCBaRkNQX0RCRl9UQUdfU0laRSk7CiAJcmVjLT5mc2ZfcmVxaWQgPSBmc2ZfcmVxLT5yZXFfaWQ7CkBAIC04MDgsNDUgKzc2NSw0NSBAQAogCXJlYy0+c19pZCA9IHNfaWQ7CiAJcmVjLT5kX2lkID0gZF9pZDsKIAlyZWMtPnUuZWxzLmxzX2NvZGUgPSBsc19jb2RlOwotCWRlYnVnX2V2ZW50KGFkYXB0ZXItPnNhbl9kYmYsIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7Ci0JemZjcF9kYmZfaGV4ZHVtcChhZGFwdGVyLT5zYW5fZGJmLCByZWMsIHNpemVvZigqcmVjKSwgbGV2ZWwsCisJZGVidWdfZXZlbnQoZGJmLT5zYW4sIGxldmVsLCByZWMsIHNpemVvZigqcmVjKSk7CisJemZjcF9kYmZfaGV4ZHVtcChkYmYtPnNhbiwgcmVjLCBzaXplb2YoKnJlYyksIGxldmVsLAogCQkJIGJ1ZmZlciwgbWluKGJ1ZmxlbiwgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2FuX2RiZl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGJmLT5zYW5fbG9jaywgZmxhZ3MpOwogfQogCiAvKioKLSAqIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVxdWVzdCAtIHRyYWNlIGV2ZW50IGZvciBpc3N1ZWQgRUxTCisgKiB6ZmNwX2RiZl9zYW5fZWxzX3JlcXVlc3QgLSB0cmFjZSBldmVudCBmb3IgaXNzdWVkIEVMUwogICogQGZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyBpc3N1ZWQgRUxTCiAgKi8KLXZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCit2b2lkIHpmY3BfZGJmX3Nhbl9lbHNfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewogCXN0cnVjdCB6ZmNwX3NlbmRfZWxzICplbHMgPSAoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKilmc2ZfcmVxLT5kYXRhOwogCi0JemZjcF9zYW5fZGJmX2V2ZW50X2Vscygib2VscyIsIDIsIGZzZl9yZXEsCisJemZjcF9kYmZfc2FuX2Vscygib2VscyIsIDIsIGZzZl9yZXEsCiAJCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKGVscy0+YWRhcHRlci0+c2NzaV9ob3N0KSwKIAkJCSAgICAgICBlbHMtPmRfaWQsICoodTggKikgc2dfdmlydChlbHMtPnJlcSksCiAJCQkgICAgICAgc2dfdmlydChlbHMtPnJlcSksIGVscy0+cmVxLT5sZW5ndGgpOwogfQogCiAvKioKLSAqIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVzcG9uc2UgLSB0cmFjZSBldmVudCBmb3IgY29tcGxldGVkIEVMUworICogemZjcF9kYmZfc2FuX2Vsc19yZXNwb25zZSAtIHRyYWNlIGV2ZW50IGZvciBjb21wbGV0ZWQgRUxTCiAgKiBAZnNmX3JlcTogcmVxdWVzdCBjb250YWluaW5nIEVMUyByZXNwb25zZQogICovCi12b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgemZjcF9kYmZfc2FuX2Vsc19yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewogCXN0cnVjdCB6ZmNwX3NlbmRfZWxzICplbHMgPSAoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKilmc2ZfcmVxLT5kYXRhOwogCi0JemZjcF9zYW5fZGJmX2V2ZW50X2VscygicmVscyIsIDIsIGZzZl9yZXEsIGVscy0+ZF9pZCwKKwl6ZmNwX2RiZl9zYW5fZWxzKCJyZWxzIiwgMiwgZnNmX3JlcSwgZWxzLT5kX2lkLAogCQkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChlbHMtPmFkYXB0ZXItPnNjc2lfaG9zdCksCiAJCQkgICAgICAgKih1OCAqKXNnX3ZpcnQoZWxzLT5yZXEpLCBzZ192aXJ0KGVscy0+cmVzcCksCiAJCQkgICAgICAgZWxzLT5yZXNwLT5sZW5ndGgpOwogfQogCiAvKioKLSAqIHpmY3Bfc2FuX2RiZl9ldmVudF9pbmNvbWluZ19lbHMgLSB0cmFjZSBldmVudCBmb3IgaW5jb21pZyBFTFMKKyAqIHpmY3BfZGJmX3Nhbl9pbmNvbWluZ19lbHMgLSB0cmFjZSBldmVudCBmb3IgaW5jb21pZyBFTFMKICAqIEBmc2ZfcmVxOiByZXF1ZXN0IGNvbnRhaW5pbmcgdW5zb2xpY2l0ZWQgc3RhdHVzIGJ1ZmZlciB3aXRoIGluY29taW5nIEVMUwogICovCi12b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9pbmNvbWluZ19lbHMoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3ZvaWQgemZjcF9kYmZfc2FuX2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBmc2ZfcmVxLT5hZGFwdGVyOwogCXN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICpidWYgPQpAQCAtODU0LDE2ICs4MTEsMTYgQEAKIAlpbnQgbGVuZ3RoID0gKGludClidWYtPmxlbmd0aCAtCiAJCSAgICAgKGludCkoKHZvaWQgKikmYnVmLT5wYXlsb2FkIC0gKHZvaWQgKilidWYpOwogCi0JemZjcF9zYW5fZGJmX2V2ZW50X2VscygiaWVscyIsIDEsIGZzZl9yZXEsIGJ1Zi0+ZF9pZCwKKwl6ZmNwX2RiZl9zYW5fZWxzKCJpZWxzIiwgMSwgZnNmX3JlcSwgYnVmLT5kX2lkLAogCQkJICAgICAgIGZjX2hvc3RfcG9ydF9pZChhZGFwdGVyLT5zY3NpX2hvc3QpLAogCQkJICAgICAgIGJ1Zi0+cGF5bG9hZC5kYXRhWzBdLCAodm9pZCAqKWJ1Zi0+cGF5bG9hZC5kYXRhLAogCQkJICAgICAgIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9zYW5fZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAorc3RhdGljIGludCB6ZmNwX2RiZl9zYW5fdmlld19mb3JtYXQoZGVidWdfaW5mb190ICppZCwgc3RydWN0IGRlYnVnX3ZpZXcgKnZpZXcsCiAJCQkJICAgIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZikKIHsKLQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZCAqKWluX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZCAqKWluX2J1ZjsKIAljaGFyICpwID0gb3V0X2J1ZjsKIAogCWlmIChzdHJuY21wKHItPnRhZywgImR1bXAiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkKQEAgLTg3Niw3ICs4MzMsNyBAQAogCXpmY3BfZGJmX291dCgmcCwgImRfaWQiLCAiMHglMDZ4Iiwgci0+ZF9pZCk7CiAKIAlpZiAoc3RybmNtcChyLT50YWcsICJvY3RjIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKLQkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVxdWVzdCAqY3QgPSAmci0+dS5jdF9yZXE7CisJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3JlcXVlc3QgKmN0ID0gJnItPnUuY3RfcmVxOwogCQl6ZmNwX2RiZl9vdXQoJnAsICJjbWRfcmVxX2NvZGUiLCAiMHglMDR4IiwgY3QtPmNtZF9yZXFfY29kZSk7CiAJCXpmY3BfZGJmX291dCgmcCwgInJldmlzaW9uIiwgIjB4JTAyeCIsIGN0LT5yZXZpc2lvbik7CiAJCXpmY3BfZGJmX291dCgmcCwgImdzX3R5cGUiLCAiMHglMDJ4IiwgY3QtPmdzX3R5cGUpOwpAQCAtODg0LDcgKzg0MSw3IEBACiAJCXpmY3BfZGJmX291dCgmcCwgIm9wdGlvbnMiLCAiMHglMDJ4IiwgY3QtPm9wdGlvbnMpOwogCQl6ZmNwX2RiZl9vdXQoJnAsICJtYXhfcmVzX3NpemUiLCAiMHglMDR4IiwgY3QtPm1heF9yZXNfc2l6ZSk7CiAJfSBlbHNlIGlmIChzdHJuY21wKHItPnRhZywgInJjdGMiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgewotCQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdF9yZXNwb25zZSAqY3QgPSAmci0+dS5jdF9yZXNwOworCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSAqY3QgPSAmci0+dS5jdF9yZXNwOwogCQl6ZmNwX2RiZl9vdXQoJnAsICJjbWRfcnNwX2NvZGUiLCAiMHglMDR4IiwgY3QtPmNtZF9yc3BfY29kZSk7CiAJCXpmY3BfZGJmX291dCgmcCwgInJldmlzaW9uIiwgIjB4JTAyeCIsIGN0LT5yZXZpc2lvbik7CiAJCXpmY3BfZGJmX291dCgmcCwgInJlYXNvbl9jb2RlIiwgIjB4JTAyeCIsIGN0LT5yZWFzb25fY29kZSk7CkBAIC04OTQsMzUgKzg1MSwzMCBAQAogCX0gZWxzZSBpZiAoc3RybmNtcChyLT50YWcsICJvZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDAgfHwKIAkJICAgc3RybmNtcChyLT50YWcsICJyZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDAgfHwKIAkJICAgc3RybmNtcChyLT50YWcsICJpZWxzIiwgWkZDUF9EQkZfVEFHX1NJWkUpID09IDApIHsKLQkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfZWxzICplbHMgPSAmci0+dS5lbHM7CisJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2VscyAqZWxzID0gJnItPnUuZWxzOwogCQl6ZmNwX2RiZl9vdXQoJnAsICJsc19jb2RlIiwgIjB4JTAyeCIsIGVscy0+bHNfY29kZSk7CiAJfQogCXJldHVybiBwIC0gb3V0X2J1ZjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3Bfc2FuX2RiZl92aWV3ID0gewotCSJzdHJ1Y3R1cmVkIiwKLQlOVUxMLAotCSZ6ZmNwX2RiZl92aWV3X2hlYWRlciwKLQkmemZjcF9zYW5fZGJmX3ZpZXdfZm9ybWF0LAotCU5VTEwsCi0JTlVMTAorc3RhdGljIHN0cnVjdCBkZWJ1Z192aWV3IHpmY3BfZGJmX3Nhbl92aWV3ID0geworCS5uYW1lID0gInN0cnVjdHVyZWQiLAorCS5oZWFkZXJfcHJvYyA9IHpmY3BfZGJmX3ZpZXdfaGVhZGVyLAorCS5mb3JtYXRfcHJvYyA9IHpmY3BfZGJmX3Nhbl92aWV3X2Zvcm1hdCwKIH07CiAKLXN0YXRpYyB2b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnQoY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICp0YWcyLCBpbnQgbGV2ZWwsCi0JCQkJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQsCi0JCQkJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwKLQkJCQl1bnNpZ25lZCBsb25nIG9sZF9yZXFfaWQpCit2b2lkIF96ZmNwX2RiZl9zY3NpKGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFnMiwgaW50IGxldmVsLAorCQkgICAgc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKKwkJICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHVuc2lnbmVkIGxvbmcgb2xkX3JlcV9pZCkKIHsKLQlzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgKnJlYyA9ICZhZGFwdGVyLT5zY3NpX2RiZl9idWY7CisJc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkICpyZWMgPSAmZGJmLT5zY3NpX2J1ZjsKIAlzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqZHVtcCA9IChzdHJ1Y3QgemZjcF9kYmZfZHVtcCAqKXJlYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBmY3BfcnNwX2l1ICpmY3BfcnNwOwogCWNoYXIgKmZjcF9yc3BfaW5mbyA9IE5VTEwsICpmY3Bfc25zX2luZm8gPSBOVUxMOwogCWludCBvZmZzZXQgPSAwLCBidWZsZW4gPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnNjc2lfZGJmX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGJmLT5zY3NpX2xvY2ssIGZsYWdzKTsKIAlkbyB7CiAJCW1lbXNldChyZWMsIDAsIHNpemVvZigqcmVjKSk7CiAJCWlmIChvZmZzZXQgPT0gMCkgewpAQCAtOTc2LDY4ICs5MjgsMjAgQEAKIAkJCWR1bXAtPm9mZnNldCA9IG9mZnNldDsKIAkJCWR1bXAtPnNpemUgPSBtaW4oYnVmbGVuIC0gb2Zmc2V0LAogCQkJCQkgKGludClzaXplb2Yoc3RydWN0Ci0JCQkJCQkgICAgIHpmY3Bfc2NzaV9kYmZfcmVjb3JkKSAtCisJCQkJCQkgICAgIHpmY3BfZGJmX3Njc2lfcmVjb3JkKSAtCiAJCQkJCSAoaW50KXNpemVvZihzdHJ1Y3QgemZjcF9kYmZfZHVtcCkpOwogCQkJbWVtY3B5KGR1bXAtPmRhdGEsIGZjcF9zbnNfaW5mbyArIG9mZnNldCwgZHVtcC0+c2l6ZSk7CiAJCQlvZmZzZXQgKz0gZHVtcC0+c2l6ZTsKIAkJfQotCQlkZWJ1Z19ldmVudChhZGFwdGVyLT5zY3NpX2RiZiwgbGV2ZWwsIHJlYywgc2l6ZW9mKCpyZWMpKTsKKwkJZGVidWdfZXZlbnQoZGJmLT5zY3NpLCBsZXZlbCwgcmVjLCBzaXplb2YoKnJlYykpOwogCX0gd2hpbGUgKG9mZnNldCA8IGJ1Zmxlbik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2NzaV9kYmZfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRiZi0+c2NzaV9sb2NrLCBmbGFncyk7CiB9CiAKLS8qKgotICogemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGNvbXBsZXRpb24KLSAqIEB0YWc6IHRhZyBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBTQ1NJIGNvbW1hbmQKLSAqIEBsZXZlbDogdHJhY2UgbGV2ZWwgYXBwbGljYWJsZSBmb3IgdGhpcyBldmVudAotICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhhdCBoYXMgYmVlbiB1c2VkIHRvIGlzc3VlIHRoZSBTQ1NJIGNvbW1hbmQKLSAqIEBzY3NpX2NtbmQ6IFNDU0kgY29tbWFuZCBwb2ludGVyCi0gKiBAZnNmX3JlcTogcmVxdWVzdCB1c2VkIHRvIGlzc3VlIFNDU0kgY29tbWFuZCAobWlnaHQgYmUgTlVMTCkKLSAqLwotdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdChjb25zdCBjaGFyICp0YWcsIGludCBsZXZlbCwKLQkJCQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZCwKLQkJCQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQotewotCXpmY3Bfc2NzaV9kYmZfZXZlbnQoInJzbHQiLCB0YWcsIGxldmVsLCBhZGFwdGVyLCBzY3NpX2NtbmQsIGZzZl9yZXEsIDApOwotfQotCi0vKioKLSAqIHpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQgLSB0cmFjZSBldmVudCBmb3IgU0NTSSBjb21tYW5kIGFib3J0Ci0gKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgYWJvcnQgb3BlcmF0aW9uCi0gKiBAYWRhcHRlcjogYWRhcHRlciB0aGFzIGhhcyBiZWVuIHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKLSAqIEBzY3NpX2NtbmQ6IFNDU0kgY29tbWFuZCB0byBiZSBhYm9ydGVkCi0gKiBAbmV3X2ZzZl9yZXE6IHJlcXVlc3QgY29udGFpbmluZyBhYm9ydCAobWlnaHQgYmUgTlVMTCkKLSAqIEBvbGRfcmVxX2lkOiBpZGVudGlmaWVyIG9mIHJlcXVlc3QgY29udGFpbmcgU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKLSAqLwotdm9pZCB6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtbmQsCi0JCQkgICAgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqbmV3X2ZzZl9yZXEsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBvbGRfcmVxX2lkKQotewotCXpmY3Bfc2NzaV9kYmZfZXZlbnQoImFicnQiLCB0YWcsIDEsIGFkYXB0ZXIsIHNjc2lfY21uZCwgbmV3X2ZzZl9yZXEsCi0JCQkgICAgb2xkX3JlcV9pZCk7Ci19Ci0KLS8qKgotICogemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCAtIHRyYWNlIGV2ZW50IGZvciBMb2dpY2FsIFVuaXQgb3IgVGFyZ2V0IFJlc2V0Ci0gKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgcmVzZXQgb3BlcmF0aW9uCi0gKiBAZmxhZzogaW5kaWNhdGVzIHR5cGUgb2YgcmVzZXQgKFRhcmdldCBSZXNldCwgTG9naWNhbCBVbml0IFJlc2V0KQotICogQHVuaXQ6IHVuaXQgdGhhdCBuZWVkcyByZXNldAotICogQHNjc2lfY21uZDogU0NTSSBjb21tYW5kIHdoaWNoIGNhdXNlZCB0aGlzIGVycm9yIHJlY292ZXJ5Ci0gKi8KLXZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldChjb25zdCBjaGFyICp0YWcsIHU4IGZsYWcsCi0JCQkJICBzdHJ1Y3QgemZjcF91bml0ICp1bml0LAotCQkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kKQotewotCXpmY3Bfc2NzaV9kYmZfZXZlbnQoZmxhZyA9PSBGQ1BfVEFSR0VUX1JFU0VUID8gInRyc3QiIDogImxyc3QiLCB0YWcsIDEsCi0JCQkgICAgdW5pdC0+cG9ydC0+YWRhcHRlciwgc2NzaV9jbW5kLCBOVUxMLCAwKTsKLX0KLQotc3RhdGljIGludCB6ZmNwX3Njc2lfZGJmX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAorc3RhdGljIGludCB6ZmNwX2RiZl9zY3NpX3ZpZXdfZm9ybWF0KGRlYnVnX2luZm9fdCAqaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LAogCQkJCSAgICAgY2hhciAqb3V0X2J1ZiwgY29uc3QgY2hhciAqaW5fYnVmKQogewotCXN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCAqciA9IChzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgKilpbl9idWY7CisJc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkICpyID0gKHN0cnVjdCB6ZmNwX2RiZl9zY3NpX3JlY29yZCAqKWluX2J1ZjsKIAlzdHJ1Y3QgdGltZXNwZWMgdDsKIAljaGFyICpwID0gb3V0X2J1ZjsKIApAQCAtMTA1OSw3ICs5NjMsNyBAQAogCQl6ZmNwX2RiZl9vdXQoJnAsICJvbGRfZnNmX3JlcWlkIiwgIjB4JTBMeCIsIHItPm9sZF9mc2ZfcmVxaWQpOwogCXpmY3BfZGJmX291dCgmcCwgImZzZl9yZXFpZCIsICIweCUwTHgiLCByLT5mc2ZfcmVxaWQpOwogCXpmY3BfZGJmX291dCgmcCwgImZzZl9zZXFubyIsICIweCUwOHgiLCByLT5mc2Zfc2Vxbm8pOwotCXpmY3BfZGJmX3RpbWVzdGFtcChyLT5mc2ZfaXNzdWVkLCAmdCk7CisJc3Rja190b190aW1lc3BlYyhyLT5mc2ZfaXNzdWVkLCAmdCk7CiAJemZjcF9kYmZfb3V0KCZwLCAiZnNmX2lzc3VlZCIsICIlMDExbHU6JTA2bHUiLCB0LnR2X3NlYywgdC50dl9uc2VjKTsKIAogCWlmIChzdHJuY21wKHItPnRhZywgInJzbHQiLCBaRkNQX0RCRl9UQUdfU0laRSkgPT0gMCkgewpAQCAtMTA3OCw4NCArOTgyLDk2IEBACiAJcmV0dXJuIHAgLSBvdXRfYnVmOwogfQogCi1zdGF0aWMgc3RydWN0IGRlYnVnX3ZpZXcgemZjcF9zY3NpX2RiZl92aWV3ID0gewotCSJzdHJ1Y3R1cmVkIiwKLQlOVUxMLAotCSZ6ZmNwX2RiZl92aWV3X2hlYWRlciwKLQkmemZjcF9zY3NpX2RiZl92aWV3X2Zvcm1hdCwKLQlOVUxMLAotCU5VTEwKK3N0YXRpYyBzdHJ1Y3QgZGVidWdfdmlldyB6ZmNwX2RiZl9zY3NpX3ZpZXcgPSB7CisJLm5hbWUgPSAic3RydWN0dXJlZCIsCisJLmhlYWRlcl9wcm9jID0gemZjcF9kYmZfdmlld19oZWFkZXIsCisJLmZvcm1hdF9wcm9jID0gemZjcF9kYmZfc2NzaV92aWV3X2Zvcm1hdCwKIH07CiAKK3N0YXRpYyBkZWJ1Z19pbmZvX3QgKnpmY3BfZGJmX3JlZyhjb25zdCBjaGFyICpuYW1lLCBpbnQgbGV2ZWwsCisJCQkJICBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldywgaW50IHNpemUpCit7CisJc3RydWN0IGRlYnVnX2luZm8gKmQ7CisKKwlkID0gZGVidWdfcmVnaXN0ZXIobmFtZSwgZGJmc2l6ZSwgbGV2ZWwsIHNpemUpOworCWlmICghZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkZWJ1Z19yZWdpc3Rlcl92aWV3KGQsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7CisJZGVidWdfcmVnaXN0ZXJfdmlldyhkLCB2aWV3KTsKKwlkZWJ1Z19zZXRfbGV2ZWwoZCwgbGV2ZWwpOworCisJcmV0dXJuIGQ7Cit9CisKIC8qKgogICogemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyIC0gcmVnaXN0ZXJzIGRlYnVnIGZlYXR1cmUgZm9yIGFuIGFkYXB0ZXIKICAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIgZm9yIHdoaWNoIGRlYnVnIGZlYXR1cmVzIHNob3VsZCBiZSByZWdpc3RlcmVkCiAgKiByZXR1cm46IC1FTk9NRU0gb24gZXJyb3IsIDAgb3RoZXJ3aXNlCiAgKi8KLWludCB6ZmNwX2FkYXB0ZXJfZGVidWdfcmVnaXN0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK2ludCB6ZmNwX2RiZl9hZGFwdGVyX3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJY2hhciBkYmZfbmFtZVtERUJVR19NQVhfTkFNRV9MRU5dOworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmOworCisJZGJmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpmY3BfZGJmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYmYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGJmLT5hZGFwdGVyID0gYWRhcHRlcjsKKworCXNwaW5fbG9ja19pbml0KCZkYmYtPmhiYV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGJmLT5zYW5fbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRiZi0+c2NzaV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGJmLT5yZWNfbG9jayk7CiAKIAkvKiBkZWJ1ZyBmZWF0dXJlIGFyZWEgd2hpY2ggcmVjb3JkcyByZWNvdmVyeSBhY3Rpdml0eSAqLwogCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX3JlYyIsIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKLQlhZGFwdGVyLT5yZWNfZGJmID0gZGVidWdfcmVnaXN0ZXIoZGJmX25hbWUsIGRiZnNpemUsIDEsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkKSk7Ci0JaWYgKCFhZGFwdGVyLT5yZWNfZGJmKQotCQlnb3RvIGZhaWxlZDsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnJlY19kYmYsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5yZWNfZGJmLCAmemZjcF9yZWNfZGJmX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChhZGFwdGVyLT5yZWNfZGJmLCAzKTsKKwlkYmYtPnJlYyA9IHpmY3BfZGJmX3JlZyhkYmZfbmFtZSwgMywgJnpmY3BfZGJmX3JlY192aWV3LAorCQkJCXNpemVvZihzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZCkpOworCWlmICghZGJmLT5yZWMpCisJCWdvdG8gZXJyX291dDsKIAogCS8qIGRlYnVnIGZlYXR1cmUgYXJlYSB3aGljaCByZWNvcmRzIEhCQSAoRlNGIGFuZCBRRElPKSBjb25kaXRpb25zICovCiAJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfaGJhIiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwotCWFkYXB0ZXItPmhiYV9kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgZGJmc2l6ZSwgMSwKLQkJCQkJICBzaXplb2Yoc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQpKTsKLQlpZiAoIWFkYXB0ZXItPmhiYV9kYmYpCi0JCWdvdG8gZmFpbGVkOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+aGJhX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPmhiYV9kYmYsICZ6ZmNwX2hiYV9kYmZfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGFkYXB0ZXItPmhiYV9kYmYsIDMpOworCWRiZi0+aGJhID0gemZjcF9kYmZfcmVnKGRiZl9uYW1lLCAzLCAmemZjcF9kYmZfaGJhX3ZpZXcsCisJCQkJc2l6ZW9mKHN0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkKSk7CisJaWYgKCFkYmYtPmhiYSkKKwkJZ290byBlcnJfb3V0OwogCiAJLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgU0FOIGNvbW1hbmQgZmFpbHVyZXMgYW5kIHJlY292ZXJ5ICovCiAJc3ByaW50ZihkYmZfbmFtZSwgInpmY3BfJXNfc2FuIiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwotCWFkYXB0ZXItPnNhbl9kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgZGJmc2l6ZSwgMSwKLQkJCQkJICBzaXplb2Yoc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQpKTsKLQlpZiAoIWFkYXB0ZXItPnNhbl9kYmYpCi0JCWdvdG8gZmFpbGVkOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+c2FuX2RiZiwgJmRlYnVnX2hleF9hc2NpaV92aWV3KTsKLQlkZWJ1Z19yZWdpc3Rlcl92aWV3KGFkYXB0ZXItPnNhbl9kYmYsICZ6ZmNwX3Nhbl9kYmZfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGFkYXB0ZXItPnNhbl9kYmYsIDYpOworCWRiZi0+c2FuID0gemZjcF9kYmZfcmVnKGRiZl9uYW1lLCA2LCAmemZjcF9kYmZfc2FuX3ZpZXcsCisJCQkJc2l6ZW9mKHN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkKSk7CisJaWYgKCFkYmYtPnNhbikKKwkJZ290byBlcnJfb3V0OwogCiAJLyogZGVidWcgZmVhdHVyZSBhcmVhIHdoaWNoIHJlY29yZHMgU0NTSSBjb21tYW5kIGZhaWx1cmVzIGFuZCByZWNvdmVyeSAqLwogCXNwcmludGYoZGJmX25hbWUsICJ6ZmNwXyVzX3Njc2kiLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSk7Ci0JYWRhcHRlci0+c2NzaV9kYmYgPSBkZWJ1Z19yZWdpc3RlcihkYmZfbmFtZSwgZGJmc2l6ZSwgMSwKLQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB6ZmNwX3Njc2lfZGJmX3JlY29yZCkpOwotCWlmICghYWRhcHRlci0+c2NzaV9kYmYpCi0JCWdvdG8gZmFpbGVkOwotCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoYWRhcHRlci0+c2NzaV9kYmYsICZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7Ci0JZGVidWdfcmVnaXN0ZXJfdmlldyhhZGFwdGVyLT5zY3NpX2RiZiwgJnpmY3Bfc2NzaV9kYmZfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGFkYXB0ZXItPnNjc2lfZGJmLCAzKTsKKwlkYmYtPnNjc2kgPSB6ZmNwX2RiZl9yZWcoZGJmX25hbWUsIDMsICZ6ZmNwX2RiZl9zY3NpX3ZpZXcsCisJCQkJIHNpemVvZihzdHJ1Y3QgemZjcF9kYmZfc2NzaV9yZWNvcmQpKTsKKwlpZiAoIWRiZi0+c2NzaSkKKwkJZ290byBlcnJfb3V0OwogCisJYWRhcHRlci0+ZGJmID0gZGJmOwogCXJldHVybiAwOwogCi0gZmFpbGVkOgotCXpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXIpOwotCitlcnJfb3V0OgorCXpmY3BfZGJmX2FkYXB0ZXJfdW5yZWdpc3RlcihkYmYpOwogCXJldHVybiAtRU5PTUVNOwogfQogCiAvKioKICAqIHpmY3BfYWRhcHRlcl9kZWJ1Z191bnJlZ2lzdGVyIC0gdW5yZWdpc3RlcnMgZGVidWcgZmVhdHVyZSBmb3IgYW4gYWRhcHRlcgotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBmb3Igd2hpY2ggZGVidWcgZmVhdHVyZXMgc2hvdWxkIGJlIHVucmVnaXN0ZXJlZAorICogQGRiZjogcG9pbnRlciB0byBkYmYgZm9yIHdoaWNoIGRlYnVnIGZlYXR1cmVzIHNob3VsZCBiZSB1bnJlZ2lzdGVyZWQKICAqLwotdm9pZCB6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQordm9pZCB6ZmNwX2RiZl9hZGFwdGVyX3VucmVnaXN0ZXIoc3RydWN0IHpmY3BfZGJmICpkYmYpCiB7Ci0JZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5zY3NpX2RiZik7Ci0JZGVidWdfdW5yZWdpc3RlcihhZGFwdGVyLT5zYW5fZGJmKTsKLQlkZWJ1Z191bnJlZ2lzdGVyKGFkYXB0ZXItPmhiYV9kYmYpOwotCWRlYnVnX3VucmVnaXN0ZXIoYWRhcHRlci0+cmVjX2RiZik7Ci0JYWRhcHRlci0+c2NzaV9kYmYgPSBOVUxMOwotCWFkYXB0ZXItPnNhbl9kYmYgPSBOVUxMOwotCWFkYXB0ZXItPmhiYV9kYmYgPSBOVUxMOwotCWFkYXB0ZXItPnJlY19kYmYgPSBOVUxMOworCWRlYnVnX3VucmVnaXN0ZXIoZGJmLT5zY3NpKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGRiZi0+c2FuKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGRiZi0+aGJhKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGRiZi0+cmVjKTsKKwlkYmYtPmFkYXB0ZXItPmRiZiA9IE5VTEw7CisJa2ZyZWUoZGJmKTsKIH0KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGJmLmgKaW5kZXggYTU3M2Y3My4uNmIxNDYxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kYmYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RiZi5oCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHpmY3AgZGV2aWNlIGRyaXZlciBmb3IKICAqIEZDUCBhZGFwdGVycyBmb3IgSUJNIFN5c3RlbSB6OSBhbmQgelNlcmllcy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDgsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwgMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjIsNyArMjIsOSBAQAogI2lmbmRlZiBaRkNQX0RCRl9ICiAjZGVmaW5lIFpGQ1BfREJGX0gKIAorI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAjaW5jbHVkZSAiemZjcF9mc2YuaCIKKyNpbmNsdWRlICJ6ZmNwX2RlZi5oIgogCiAjZGVmaW5lIFpGQ1BfREJGX1RBR19TSVpFICAgICAgNAogI2RlZmluZSBaRkNQX0RCRl9JRF9TSVpFICAgICAgIDcKQEAgLTM1LDEzICszNywxMyBAQAogCXU4IGRhdGFbXTsJCS8qIGR1bXAgZGF0YSAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkX3RocmVhZCB7CitzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90aHJlYWQgewogCXUzMiB0b3RhbDsKIAl1MzIgcmVhZHk7CiAJdTMyIHJ1bm5pbmc7CiB9OwogCi1zdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZF90YXJnZXQgeworc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmRfdGFyZ2V0IHsKIAl1NjQgcmVmOwogCXUzMiBzdGF0dXM7CiAJdTMyIGRfaWQ7CkBAIC01MCw3ICs1Miw3IEBACiAJdTMyIGVycF9jb3VudDsKIH07CiAKLXN0cnVjdCB6ZmNwX3JlY19kYmZfcmVjb3JkX3RyaWdnZXIgeworc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmRfdHJpZ2dlciB7CiAJdTggd2FudDsKIAl1OCBuZWVkOwogCXUzMiBhczsKQEAgLTYyLDIxICs2NCwyMSBAQAogCXU2NCBmY3BfbHVuOwogfTsKIAotc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfYWN0aW9uIHsKK3N0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkX2FjdGlvbiB7CiAJdTMyIHN0YXR1czsKIAl1MzIgc3RlcDsKIAl1NjQgYWN0aW9uOwogCXU2NCBmc2ZfcmVxOwogfTsKIAotc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmQgeworc3RydWN0IHpmY3BfZGJmX3JlY19yZWNvcmQgewogCXU4IGlkOwogCWNoYXIgaWQyWzddOwogCXVuaW9uIHsKLQkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfYWN0aW9uIGFjdGlvbjsKLQkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdGhyZWFkIHRocmVhZDsKLQkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdGFyZ2V0IHRhcmdldDsKLQkJc3RydWN0IHpmY3BfcmVjX2RiZl9yZWNvcmRfdHJpZ2dlciB0cmlnZ2VyOworCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF9hY3Rpb24gYWN0aW9uOworCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90aHJlYWQgdGhyZWFkOworCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90YXJnZXQgdGFyZ2V0OworCQlzdHJ1Y3QgemZjcF9kYmZfcmVjX3JlY29yZF90cmlnZ2VyIHRyaWdnZXI7CiAJfSB1OwogfTsKIApAQCAtODcsNyArODksNyBAQAogCVpGQ1BfUkVDX0RCRl9JRF9UUklHR0VSLAogfTsKIAotc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcmVzcG9uc2Ugeworc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfcmVzcG9uc2UgewogCXUzMiBmc2ZfY29tbWFuZDsKIAl1NjQgZnNmX3JlcWlkOwogCXUzMiBmc2Zfc2Vxbm87CkBAIC0xMjUsNyArMTI3LDcgQEAKIAl9IHU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfc3RhdHVzIHsKK3N0cnVjdCB6ZmNwX2RiZl9oYmFfcmVjb3JkX3N0YXR1cyB7CiAJdTggZmFpbGVkOwogCXUzMiBzdGF0dXNfdHlwZTsKIAl1MzIgc3RhdHVzX3N1YnR5cGU7CkBAIC0xMzksMjQgKzE0MSwyNCBAQAogCXU4IHBheWxvYWRbWkZDUF9EQkZfVU5TT0xfUEFZTE9BRF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcWRpbyB7CitzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9xZGlvIHsKIAl1MzIgcWRpb19lcnJvcjsKIAl1OCBzYmFsX2luZGV4OwogCXU4IHNiYWxfY291bnQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmQgeworc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQgewogCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CiAJdTggdGFnMltaRkNQX0RCRl9UQUdfU0laRV07CiAJdW5pb24gewotCQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZF9yZXNwb25zZSByZXNwb25zZTsKLQkJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfc3RhdHVzIHN0YXR1czsKLQkJc3RydWN0IHpmY3BfaGJhX2RiZl9yZWNvcmRfcWRpbyBxZGlvOworCQlzdHJ1Y3QgemZjcF9kYmZfaGJhX3JlY29yZF9yZXNwb25zZSByZXNwb25zZTsKKwkJc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfc3RhdHVzIHN0YXR1czsKKwkJc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmRfcWRpbyBxZGlvOwogCQlzdHJ1Y3QgZnNmX2JpdF9lcnJvcl9wYXlsb2FkIGJlcnI7CiAJfSB1OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3JlcXVlc3Qgeworc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfY3RfcmVxdWVzdCB7CiAJdTE2IGNtZF9yZXFfY29kZTsKIAl1OCByZXZpc2lvbjsKIAl1OCBnc190eXBlOwpAQCAtMTY2LDcgKzE2OCw3IEBACiAJdTMyIGxlbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9jdF9yZXNwb25zZSB7CitzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSB7CiAJdTE2IGNtZF9yc3BfY29kZTsKIAl1OCByZXZpc2lvbjsKIAl1OCByZWFzb25fY29kZTsKQEAgLTE3NiwyNyArMTc4LDI3IEBACiAJdTMyIGxlbjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZF9lbHMgeworc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmRfZWxzIHsKIAl1OCBsc19jb2RlOwogCXUzMiBsZW47CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmQgeworc3RydWN0IHpmY3BfZGJmX3Nhbl9yZWNvcmQgewogCXU4IHRhZ1taRkNQX0RCRl9UQUdfU0laRV07CiAJdTY0IGZzZl9yZXFpZDsKIAl1MzIgZnNmX3NlcW5vOwogCXUzMiBzX2lkOwogCXUzMiBkX2lkOwogCXVuaW9uIHsKLQkJc3RydWN0IHpmY3Bfc2FuX2RiZl9yZWNvcmRfY3RfcmVxdWVzdCBjdF9yZXE7Ci0JCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2N0X3Jlc3BvbnNlIGN0X3Jlc3A7Ci0JCXN0cnVjdCB6ZmNwX3Nhbl9kYmZfcmVjb3JkX2VscyBlbHM7CisJCXN0cnVjdCB6ZmNwX2RiZl9zYW5fcmVjb3JkX2N0X3JlcXVlc3QgY3RfcmVxOworCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9jdF9yZXNwb25zZSBjdF9yZXNwOworCQlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZF9lbHMgZWxzOwogCX0gdTsKICNkZWZpbmUgWkZDUF9EQkZfU0FOX01BWF9QQVlMT0FEIDEwMjQKIAl1OCBwYXlsb2FkWzMyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1zdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQgeworc3RydWN0IHpmY3BfZGJmX3Njc2lfcmVjb3JkIHsKIAl1OCB0YWdbWkZDUF9EQkZfVEFHX1NJWkVdOwogCXU4IHRhZzJbWkZDUF9EQkZfVEFHX1NJWkVdOwogCXUzMiBzY3NpX2lkOwpAQCAtMjIyLDQgKzIyNCwxMjcgQEAKIAl1OCBzbnNfaW5mb1taRkNQX0RCRl9TQ1NJX0ZDUF9TTlNfSU5GT107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IHpmY3BfZGJmIHsKKwlkZWJ1Z19pbmZvX3QJCQkqcmVjOworCWRlYnVnX2luZm9fdAkJCSpoYmE7CisJZGVidWdfaW5mb190CQkJKnNhbjsKKwlkZWJ1Z19pbmZvX3QJCQkqc2NzaTsKKwlzcGlubG9ja190CQkJcmVjX2xvY2s7CisJc3BpbmxvY2tfdAkJCWhiYV9sb2NrOworCXNwaW5sb2NrX3QJCQlzYW5fbG9jazsKKwlzcGlubG9ja190CQkJc2NzaV9sb2NrOworCXN0cnVjdCB6ZmNwX2RiZl9yZWNfcmVjb3JkCXJlY19idWY7CisJc3RydWN0IHpmY3BfZGJmX2hiYV9yZWNvcmQJaGJhX2J1ZjsKKwlzdHJ1Y3QgemZjcF9kYmZfc2FuX3JlY29yZAlzYW5fYnVmOworCXN0cnVjdCB6ZmNwX2RiZl9zY3NpX3JlY29yZAlzY3NpX2J1ZjsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyCQkqYWRhcHRlcjsKK307CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfaGJhX2ZzZl9yZXNwKGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKKwkJCSAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwgc3RydWN0IHpmY3BfZGJmICpkYmYpCit7CisJaWYgKGxldmVsIDw9IGRiZi0+aGJhLT5sZXZlbCkKKwkJX3pmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2UodGFnMiwgbGV2ZWwsIHJlcSwgZGJmKTsKK30KKworLyoqCisgKiB6ZmNwX2RiZl9oYmFfZnNmX3Jlc3BvbnNlIC0gdHJhY2UgZXZlbnQgZm9yIHJlcXVlc3QgY29tcGxldGlvbgorICogQGZzZl9yZXE6IHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBjb21wbGV0ZWQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHpmY3BfZGJmX2hiYV9mc2ZfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQoreworCXN0cnVjdCB6ZmNwX2RiZiAqZGJmID0gcmVxLT5hZGFwdGVyLT5kYmY7CisJc3RydWN0IGZzZl9xdGNiICpxdGNiID0gcmVxLT5xdGNiOworCisJaWYgKChxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXMgIT0gRlNGX1BST1RfR09PRCkgJiYKKwkgICAgKHF0Y2ItPnByZWZpeC5wcm90X3N0YXR1cyAhPSBGU0ZfUFJPVF9GU0ZfU1RBVFVTX1BSRVNFTlRFRCkpIHsKKwkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJwZXJyIiwgMSwgcmVxLCBkYmYpOworCisJfSBlbHNlIGlmIChxdGNiLT5oZWFkZXIuZnNmX3N0YXR1cyAhPSBGU0ZfR09PRCkgeworCQl6ZmNwX2RiZl9oYmFfZnNmX3Jlc3AoImZlcnIiLCAxLCByZXEsIGRiZik7CisKKwl9IGVsc2UgaWYgKChyZXEtPmZzZl9jb21tYW5kID09IEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCkgfHwKKwkJICAgKHJlcS0+ZnNmX2NvbW1hbmQgPT0gRlNGX1FUQ0JfT1BFTl9MVU4pKSB7CisJCXpmY3BfZGJmX2hiYV9mc2ZfcmVzcCgib3BlbiIsIDQsIHJlcSwgZGJmKTsKKworCX0gZWxzZSBpZiAocXRjYi0+aGVhZGVyLmxvZ19sZW5ndGgpIHsKKwkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJxdGNiIiwgNSwgcmVxLCBkYmYpOworCisJfSBlbHNlIHsKKwkJemZjcF9kYmZfaGJhX2ZzZl9yZXNwKCJub3JtIiwgNiwgcmVxLCBkYmYpOworCX0KKyB9CisKKy8qKgorICogemZjcF9kYmZfaGJhX2ZzZl91bnNvbCAtIHRyYWNlIGV2ZW50IGZvciBhbiB1bnNvbGljaXRlZCBzdGF0dXMgYnVmZmVyCisgKiBAdGFnOiB0YWcgaW5kaWNhdGluZyB3aGljaCBraW5kIG9mIHVuc29saWNpdGVkIHN0YXR1cyBoYXMgYmVlbiByZWNlaXZlZAorICogQGRiZjogcmVmZXJlbmNlIHRvIGRiZiBzdHJ1Y3R1cmUKKyAqIEBzdGF0dXNfYnVmZmVyOiBidWZmZXIgY29udGFpbmluZyBwYXlsb2FkIG9mIHVuc29saWNpdGVkIHN0YXR1cworICovCitzdGF0aWMgaW5saW5lCit2b2lkIHpmY3BfZGJmX2hiYV9mc2ZfdW5zb2woY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwKKwkJCSAgICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqYnVmKQoreworCWludCBsZXZlbCA9IDI7CisKKwlpZiAobGV2ZWwgPD0gZGJmLT5oYmEtPmxldmVsKQorCQlfemZjcF9kYmZfaGJhX2ZzZl91bnNvbCh0YWcsIGxldmVsLCBkYmYsIGJ1Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfc2NzaShjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKnRhZzIsIGludCBsZXZlbCwKKwkJICAgc3RydWN0IHpmY3BfZGJmICpkYmYsIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsCisJCSAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwgdW5zaWduZWQgbG9uZyBvbGRfaWQpCit7CisJaWYgKGxldmVsIDw9IGRiZi0+c2NzaS0+bGV2ZWwpCisJCV96ZmNwX2RiZl9zY3NpKHRhZywgdGFnMiwgbGV2ZWwsIGRiZiwgc2NtZCwgcmVxLCBvbGRfaWQpOworfQorCisvKioKKyAqIHpmY3BfZGJmX3Njc2lfcmVzdWx0IC0gdHJhY2UgZXZlbnQgZm9yIFNDU0kgY29tbWFuZCBjb21wbGV0aW9uCisgKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgU0NTSSBjb21tYW5kCisgKiBAbGV2ZWw6IHRyYWNlIGxldmVsIGFwcGxpY2FibGUgZm9yIHRoaXMgZXZlbnQKKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHRoYXQgaGFzIGJlZW4gdXNlZCB0byBpc3N1ZSB0aGUgU0NTSSBjb21tYW5kCisgKiBAc2NtZDogU0NTSSBjb21tYW5kIHBvaW50ZXIKKyAqIEBmc2ZfcmVxOiByZXF1ZXN0IHVzZWQgdG8gaXNzdWUgU0NTSSBjb21tYW5kIChtaWdodCBiZSBOVUxMKQorICovCitzdGF0aWMgaW5saW5lCit2b2lkIHpmY3BfZGJmX3Njc2lfcmVzdWx0KGNvbnN0IGNoYXIgKnRhZywgaW50IGxldmVsLCBzdHJ1Y3QgemZjcF9kYmYgKmRiZiwKKwkJCSAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKK3sKKwl6ZmNwX2RiZl9zY3NpKCJyc2x0IiwgdGFnLCBsZXZlbCwgZGJmLCBzY21kLCBmc2ZfcmVxLCAwKTsKK30KKworLyoqCisgKiB6ZmNwX2RiZl9zY3NpX2Fib3J0IC0gdHJhY2UgZXZlbnQgZm9yIFNDU0kgY29tbWFuZCBhYm9ydAorICogQHRhZzogdGFnIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIG9mIGFib3J0IG9wZXJhdGlvbgorICogQGFkYXB0ZXI6IGFkYXB0ZXIgdGhhcyBoYXMgYmVlbiB1c2VkIHRvIGlzc3VlIFNDU0kgY29tbWFuZCB0byBiZSBhYm9ydGVkCisgKiBAc2NtZDogU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKKyAqIEBuZXdfcmVxOiByZXF1ZXN0IGNvbnRhaW5pbmcgYWJvcnQgKG1pZ2h0IGJlIE5VTEwpCisgKiBAb2xkX2lkOiBpZGVudGlmaWVyIG9mIHJlcXVlc3QgY29udGFpbmcgU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQKKyAqLworc3RhdGljIGlubGluZQordm9pZCB6ZmNwX2RiZl9zY3NpX2Fib3J0KGNvbnN0IGNoYXIgKnRhZywgc3RydWN0IHpmY3BfZGJmICpkYmYsCisJCQkgc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgc3RydWN0IHpmY3BfZnNmX3JlcSAqbmV3X3JlcSwKKwkJCSB1bnNpZ25lZCBsb25nIG9sZF9pZCkKK3sKKwl6ZmNwX2RiZl9zY3NpKCJhYnJ0IiwgdGFnLCAxLCBkYmYsIHNjbWQsIG5ld19yZXEsIG9sZF9pZCk7Cit9CisKKy8qKgorICogemZjcF9kYmZfc2NzaV9kZXZyZXNldCAtIHRyYWNlIGV2ZW50IGZvciBMb2dpY2FsIFVuaXQgb3IgVGFyZ2V0IFJlc2V0CisgKiBAdGFnOiB0YWcgaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgcmVzZXQgb3BlcmF0aW9uCisgKiBAZmxhZzogaW5kaWNhdGVzIHR5cGUgb2YgcmVzZXQgKFRhcmdldCBSZXNldCwgTG9naWNhbCBVbml0IFJlc2V0KQorICogQHVuaXQ6IHVuaXQgdGhhdCBuZWVkcyByZXNldAorICogQHNjc2lfY21uZDogU0NTSSBjb21tYW5kIHdoaWNoIGNhdXNlZCB0aGlzIGVycm9yIHJlY292ZXJ5CisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgemZjcF9kYmZfc2NzaV9kZXZyZXNldChjb25zdCBjaGFyICp0YWcsIHU4IGZsYWcsIHN0cnVjdCB6ZmNwX3VuaXQgKnVuaXQsCisJCQkgICAgc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbW5kKQoreworCXpmY3BfZGJmX3Njc2koZmxhZyA9PSBGQ1BfVEFSR0VUX1JFU0VUID8gInRyc3QiIDogImxyc3QiLCB0YWcsIDEsCisJCQkgICAgdW5pdC0+cG9ydC0+YWRhcHRlci0+ZGJmLCBzY3NpX2NtbmQsIE5VTEwsIDApOworfQorCiAjZW5kaWYgLyogWkZDUF9EQkZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggNDlkMDUzMi4uN2RhMmZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC0zNywxMCArMzcsOCBAQAogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgotI2luY2x1ZGUgInpmY3BfZGJmLmgiCiAjaW5jbHVkZSAiemZjcF9mc2YuaCIKIAotCiAvKioqKioqKioqKioqKioqKioqKioqIEdFTkVSQUwgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgUkVRVUVTVF9MSVNUX1NJWkUgMTI4CkBAIC03NSw5ICs3Myw2IEBACiAKIC8qKioqKioqKioqKioqKiogRklCUkUgQ0hBTk5FTCBQUk9UT0NPTCBTUEVDSUZJQyBERUZJTkVTICoqKioqKioqKioqKioqKioqKioqLwogCi0vKiB0aW1lb3V0IGZvciBuYW1lLXNlcnZlciBsb29rdXAgKGluIHNlY29uZHMpICovCi0jZGVmaW5lIFpGQ1BfTlNfR0lEX1BOX1RJTUVPVVQJCTEwCi0KIC8qIHRhc2sgYXR0cmlidXRlIHZhbHVlcyBpbiBGQ1AtMiBGQ1BfQ01ORCBJVSAqLwogI2RlZmluZSBTSU1QTEVfUQkwCiAjZGVmaW5lIEhFQURfT0ZfUQkxCkBAIC0yMjQsOCArMjE5LDYgQEAKICNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVAJCTB4MDAwMDAwMDIKICNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9YQ09ORklHX09LCQkweDAwMDAwMDA4CiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfSE9TVF9DT05fSU5JVAkweDAwMDAwMDEwCi0jZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUAkweDAwMDAwMDIwCi0jZGVmaW5lIFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9LSUxMCTB4MDAwMDAwODAKICNkZWZpbmUgWkZDUF9TVEFUVVNfQURBUFRFUl9FUlBfUEVORElORwkJMHgwMDAwMDEwMAogI2RlZmluZSBaRkNQX1NUQVRVU19BREFQVEVSX0xJTktfVU5QTFVHR0VECTB4MDAwMDAyMDAKIApAQCAtMjM0LDYgKzIyNyw3IEBACiAKIC8qIHJlbW90ZSBwb3J0IHN0YXR1cyAqLwogI2RlZmluZSBaRkNQX1NUQVRVU19QT1JUX1BIWVNfT1BFTgkJMHgwMDAwMDAwMQorI2RlZmluZSBaRkNQX1NUQVRVU19QT1JUX0xJTktfVEVTVAkJMHgwMDAwMDAwMgogCiAvKiB3ZWxsIGtub3duIGFkZHJlc3MgKFdLQSkgcG9ydCBzdGF0dXMqLwogZW51bSB6ZmNwX3drYV9zdGF0dXMgewpAQCAtMjQ5LDcgKzI0Myw2IEBACiAKIC8qIEZTRiByZXF1ZXN0IHN0YXR1cyAodGhpcyBkb2VzIG5vdCBoYXZlIGEgY29tbW9uIHBhcnQpICovCiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UQVNLX01BTkFHRU1FTlQJMHgwMDAwMDAwMgotI2RlZmluZSBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVECQkweDAwMDAwMDA0CiAjZGVmaW5lIFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUgkJMHgwMDAwMDAwOAogI2RlZmluZSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUAkJMHgwMDAwMDAxMAogI2RlZmluZSBaRkNQX1NUQVRVU19GU0ZSRVFfQUJPUlRTVUNDRUVERUQJMHgwMDAwMDA0MApAQCAtMjY2LDEyICsyNTksMTQgQEAKIAogLyogaG9sZHMgdmFyaW91cyBtZW1vcnkgcG9vbHMgb2YgYW4gYWRhcHRlciAqLwogc3RydWN0IHpmY3BfYWRhcHRlcl9tZW1wb29sIHsKLQltZW1wb29sX3QgKmZzZl9yZXFfZXJwOwotCW1lbXBvb2xfdCAqZnNmX3JlcV9zY3NpOwotCW1lbXBvb2xfdCAqZnNmX3JlcV9hYm9ydDsKLQltZW1wb29sX3QgKmZzZl9yZXFfc3RhdHVzX3JlYWQ7Ci0JbWVtcG9vbF90ICpkYXRhX3N0YXR1c19yZWFkOwotCW1lbXBvb2xfdCAqZGF0YV9naWRfcG47CisJbWVtcG9vbF90ICplcnBfcmVxOworCW1lbXBvb2xfdCAqZ2lkX3BuX3JlcTsKKwltZW1wb29sX3QgKnNjc2lfcmVxOworCW1lbXBvb2xfdCAqc2NzaV9hYm9ydDsKKwltZW1wb29sX3QgKnN0YXR1c19yZWFkX3JlcTsKKwltZW1wb29sX3QgKnN0YXR1c19yZWFkX2RhdGE7CisJbWVtcG9vbF90ICpnaWRfcG5fZGF0YTsKKwltZW1wb29sX3QgKnF0Y2JfcG9vbDsKIH07CiAKIC8qCkBAIC0zMDUsNiArMzAwLDE1IEBACiAJdTMyIGRfaWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGN0X2l1X2dwbl9mdF9yZXEgeworCXN0cnVjdCBjdF9oZHIgaGVhZGVyOworCXU4IGZsYWdzOworCXU4IGRvbWFpbl9pZF9zY29wZTsKKwl1OCBhcmVhX2lkX3Njb3BlOworCXU4IGZjNF90eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKwogLyoqCiAgKiBzdHJ1Y3QgemZjcF9zZW5kX2N0IC0gdXNlZCB0byBwYXNzIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb24gemZjcF9mc2Zfc2VuZF9jdAogICogQHdrYV9wb3J0OiBwb3J0IHdoZXJlIHRoZSByZXF1ZXN0IGlzIHNlbnQgdG8KQEAgLTMxMiw3ICszMTYsNiBAQAogICogQHJlc3A6IHNjYXR0ZXItZ2F0aGVyIGxpc3QgZm9yIHJlc3BvbnNlCiAgKiBAaGFuZGxlcjogaGFuZGxlciBmdW5jdGlvbiAoY2FsbGVkIGZvciByZXNwb25zZSB0byB0aGUgcmVxdWVzdCkKICAqIEBoYW5kbGVyX2RhdGE6IGRhdGEgcGFzc2VkIHRvIGhhbmRsZXIgZnVuY3Rpb24KLSAqIEB0aW1lb3V0OiBGU0YgdGltZW91dCBmb3IgdGhpcyByZXF1ZXN0CiAgKiBAY29tcGxldGlvbjogY29tcGxldGlvbiBmb3Igc3luY2hyb25pemF0aW9uIHB1cnBvc2VzCiAgKiBAc3RhdHVzOiB1c2VkIHRvIHBhc3MgZXJyb3Igc3RhdHVzIHRvIGNhbGxpbmcgZnVuY3Rpb24KICAqLwpAQCAtMzIyLDcgKzMyNSw2IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpyZXNwOwogCXZvaWQgKCpoYW5kbGVyKSh1bnNpZ25lZCBsb25nKTsKIAl1bnNpZ25lZCBsb25nIGhhbmRsZXJfZGF0YTsKLQlpbnQgdGltZW91dDsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGlvbjsKIAlpbnQgc3RhdHVzOwogfTsKQEAgLTQyMCw2ICs0MjIsMjkgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCisvKiogc3RydWN0IHpmY3BfcWRpbyAtIGJhc2ljIFFESU8gZGF0YSBzdHJ1Y3R1cmUKKyAqIEByZXNwX3E6IHJlc3BvbnNlIHF1ZXVlCisgKiBAcmVxX3E6IHJlcXVlc3QgcXVldWUKKyAqIEBzdGF0X2xvY2s6IGxvY2sgdG8gcHJvdGVjdCByZXFfcV91dGlsIGFuZCByZXFfcV90aW1lCisgKiBAcmVxX3FfbG9jazsgbG9jayB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHJlcXVlc3QgcXVldWUKKyAqIEByZXFfcV90aW1lOiB0aW1lIG9mIGxhc3QgZmlsbCBsZXZlbCBjaGFuZ2UKKyAqIEByZXFfcV91dGlsOiB1c2VkIGZvciBhY2NvdW50aW5nCisgKiBAcmVxX3FfZnVsbDogcXVldWUgZnVsbCBpbmNpZGVudHMKKyAqIEByZXFfcV93cTogdXNlZCB0byB3YWl0IGZvciBTQkFMIGF2YWlsYWJpbGl0eQorICogQGFkYXB0ZXI6IGFkYXB0ZXIgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgUURJTyBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IHpmY3BfcWRpbyB7CisJc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXNwX3E7CisJc3RydWN0IHpmY3BfcWRpb19xdWV1ZQlyZXFfcTsKKwlzcGlubG9ja190CQlzdGF0X2xvY2s7CisJc3BpbmxvY2tfdAkJcmVxX3FfbG9jazsKKwl1bnNpZ25lZCBsb25nIGxvbmcJcmVxX3FfdGltZTsKKwl1NjQJCQlyZXFfcV91dGlsOworCWF0b21pY190CQlyZXFfcV9mdWxsOworCXdhaXRfcXVldWVfaGVhZF90CXJlcV9xX3dxOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIJKmFkYXB0ZXI7Cit9OworCiBzdHJ1Y3QgemZjcF9hZGFwdGVyIHsKIAlhdG9taWNfdCAgICAgICAgICAgICAgICByZWZjb3VudDsgICAgICAgICAgLyogcmVmZXJlbmNlIGNvdW50ICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJcmVtb3ZlX3dxOyAgICAgICAgIC8qIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yCkBAIC00MjgsNiArNDUzLDcgQEAKIAl1NjQJCQlwZWVyX3d3cG47CSAgIC8qIFAyUCBwZWVyIFdXUE4gKi8KIAl1MzIJCQlwZWVyX2RfaWQ7CSAgIC8qIFAyUCBwZWVyIERfSUQgKi8KIAlzdHJ1Y3QgY2N3X2RldmljZSAgICAgICAqY2N3X2RldmljZTsJICAgLyogUy8zOTAgY2N3IGRldmljZSAqLworCXN0cnVjdCB6ZmNwX3FkaW8JKnFkaW87CiAJdTMyCQkJaHlkcmFfdmVyc2lvbjsJICAgLyogSHlkcmEgdmVyc2lvbiAqLwogCXUzMgkJCWZzZl9saWNfdmVyc2lvbjsKIAl1MzIJCQlhZGFwdGVyX2ZlYXR1cmVzOyAgLyogRkNQIGNoYW5uZWwgZmVhdHVyZXMgKi8KQEAgLTQzOSwxNSArNDY1LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlyZXFfbm87CQkgICAvKiB1bmlxdWUgRlNGIHJlcSBudW1iZXIgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCSpyZXFfbGlzdDsJICAgLyogbGlzdCBvZiBwZW5kaW5nIHJlcXMgKi8KIAlzcGlubG9ja190CQlyZXFfbGlzdF9sb2NrOwkgICAvKiByZXF1ZXN0IGxpc3QgbG9jayAqLwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxX3E7CQkgICAvKiByZXF1ZXN0IHF1ZXVlICovCi0Jc3BpbmxvY2tfdAkJcmVxX3FfbG9jazsJICAgLyogZm9yIG9wZXJhdGlvbnMgb24gcXVldWUgKi8KLQlrdGltZV90CQkJcmVxX3FfdGltZTsgLyogdGltZSBvZiBsYXN0IGZpbGwgbGV2ZWwgY2hhbmdlICovCi0JdTY0CQkJcmVxX3FfdXRpbDsgLyogZm9yIGFjY291bnRpbmcgKi8KLQlzcGlubG9ja190CQlxZGlvX3N0YXRfbG9jazsKIAl1MzIJCQlmc2ZfcmVxX3NlcV9ubzsJICAgLyogRlNGIGNtbmQgc2VxIG51bWJlciAqLwotCXdhaXRfcXVldWVfaGVhZF90CXJlcXVlc3Rfd3E7CSAgIC8qIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yCi0JCQkJCQkgICAgICBtb3JlIGF2YWxpYWJsZSBTQkFMcyAqLwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVzcF9xOwkgICAvKiByZXNwb25zZSBxdWV1ZSAqLwogCXJ3bG9ja190CQlhYm9ydF9sb2NrOyAgICAgICAgLyogUHJvdGVjdHMgYWdhaW5zdCBTQ1NJCiAJCQkJCQkgICAgICBzdGFjayBhYm9ydC9jb21tYW5kCiAJCQkJCQkgICAgICBjb21wbGV0aW9uIHJhY2VzICovCkBAIC00NTYsMTAgKzQ3NCw5IEBACiAJYXRvbWljX3QJCXN0YXR1czsJICAgICAgICAgICAvKiBzdGF0dXMgb2YgdGhpcyBhZGFwdGVyICovCiAJc3RydWN0IGxpc3RfaGVhZAllcnBfcmVhZHlfaGVhZDsJICAgLyogZXJyb3IgcmVjb3ZlcnkgZm9yIHRoaXMKIAkJCQkJCSAgICAgIGFkYXB0ZXIvZGV2aWNlcyAqLworCXdhaXRfcXVldWVfaGVhZF90CWVycF9yZWFkeV93cTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVycF9ydW5uaW5nX2hlYWQ7CiAJcndsb2NrX3QJCWVycF9sb2NrOwotCXN0cnVjdCBzZW1hcGhvcmUJZXJwX3JlYWR5X3NlbTsKLQl3YWl0X3F1ZXVlX2hlYWRfdAllcnBfdGhyZWFkX3dxaDsKIAl3YWl0X3F1ZXVlX2hlYWRfdAllcnBfZG9uZV93cWg7CiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbgllcnBfYWN0aW9uOwkgICAvKiBwZW5kaW5nIGVycm9yIHJlY292ZXJ5ICovCiAgICAgICAgIGF0b21pY190ICAgICAgICAgICAgICAgIGVycF9jb3VudGVyOwpAQCAtNDY3LDI3ICs0ODQsMTYgQEAKIAkJCQkJCSAgICAgIGFjdGlvbnMgKi8KIAl1MzIJCQllcnBfbG93X21lbV9jb3VudDsgLyogbnIgb2YgZXJwIGFjdGlvbnMgd2FpdGluZwogCQkJCQkJICAgICAgZm9yIG1lbW9yeSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdAkqZXJwX3RocmVhZDsKIAlzdHJ1Y3QgemZjcF93a2FfcG9ydHMJKmdzOwkJICAgLyogZ2VuZXJpYyBzZXJ2aWNlcyAqLwotCWRlYnVnX2luZm9fdAkJKnJlY19kYmY7Ci0JZGVidWdfaW5mb190CQkqaGJhX2RiZjsKLQlkZWJ1Z19pbmZvX3QJCSpzYW5fZGJmOyAgICAgICAgICAvKiBkZWJ1ZyBmZWF0dXJlIGFyZWFzICovCi0JZGVidWdfaW5mb190CQkqc2NzaV9kYmY7Ci0Jc3BpbmxvY2tfdAkJcmVjX2RiZl9sb2NrOwotCXNwaW5sb2NrX3QJCWhiYV9kYmZfbG9jazsKLQlzcGlubG9ja190CQlzYW5fZGJmX2xvY2s7Ci0Jc3BpbmxvY2tfdAkJc2NzaV9kYmZfbG9jazsKLQlzdHJ1Y3QgemZjcF9yZWNfZGJmX3JlY29yZAlyZWNfZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9oYmFfZGJmX3JlY29yZAloYmFfZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9zYW5fZGJmX3JlY29yZAlzYW5fZGJmX2J1ZjsKLQlzdHJ1Y3QgemZjcF9zY3NpX2RiZl9yZWNvcmQJc2NzaV9kYmZfYnVmOworCXN0cnVjdCB6ZmNwX2RiZgkJKmRiZjsJCSAgIC8qIGRlYnVnIHRyYWNlcyAqLwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXJfbWVtcG9vbAlwb29sOyAgICAgIC8qIEFkYXB0ZXIgbWVtb3J5IHBvb2xzICovCi0Jc3RydWN0IHFkaW9faW5pdGlhbGl6ZSAgcWRpb19pbml0X2RhdGE7ICAgIC8qIGZvciBxZGlvX2VzdGFibGlzaCAqLwogCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKmZjX3N0YXRzOwogCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCAqc3RhdHNfcmVzZXRfZGF0YTsKIAl1bnNpZ25lZCBsb25nCQlzdGF0c19yZXNldDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJc2Nhbl93b3JrOwogCXN0cnVjdCBzZXJ2aWNlX2xldmVsCXNlcnZpY2VfbGV2ZWw7Ci0JYXRvbWljX3QJCXFkaW9fb3V0Yl9mdWxsOwkgICAvKiBxdWV1ZSBmdWxsIGluY2lkZW50cyAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3b3JrX3F1ZXVlOwogfTsKIAogc3RydWN0IHpmY3BfcG9ydCB7CkBAIC01MzEsMzYgKzUzNyw2NCBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdAlzY3NpX3dvcms7CiB9OwogCi0vKiBGU0YgcmVxdWVzdCAqLworLyoqCisgKiBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgLSBxdWV1ZSByZWxhdGVkIHZhbHVlcyBmb3IgYSByZXF1ZXN0CisgKiBAc2JhbF9udW1iZXI6IG51bWJlciBvZiBmcmVlIFNCQUxzCisgKiBAc2JhbF9maXJzdDogZmlyc3QgU0JBTCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAc2JhbF9sYXN0OiBsYXN0IFNCQUwgZm9yIHRoaXMgcmVxdWVzdAorICogQHNiYWxfbGltaXQ6IGxhc3QgcG9zc2libGUgU0JBTCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAc2JhbGVfY3VycjogY3VycmVudCBTQkFMRSBhdCBjcmVhdGlvbiBvZiB0aGlzIHJlcXVlc3QKKyAqIEBzYmFsX3Jlc3BvbnNlOiBTQkFMIHVzZWQgaW4gaW50ZXJydXB0CisgKiBAcWRpb19vdXRiX3VzYWdlOiB1c2FnZSBvZiBvdXRib3VuZCBxdWV1ZQorICogQHFkaW9faW5iX3VzYWdlOiB1c2FnZSBvZiBpbmJvdW5kIHF1ZXVlCisgKi8KK3N0cnVjdCB6ZmNwX3F1ZXVlX3JlcSB7CisJdTgJCSAgICAgICBzYmFsX251bWJlcjsKKwl1OAkJICAgICAgIHNiYWxfZmlyc3Q7CisJdTgJCSAgICAgICBzYmFsX2xhc3Q7CisJdTgJCSAgICAgICBzYmFsX2xpbWl0OworCXU4CQkgICAgICAgc2JhbGVfY3VycjsKKwl1OAkJICAgICAgIHNiYWxfcmVzcG9uc2U7CisJdTE2CQkgICAgICAgcWRpb19vdXRiX3VzYWdlOworCXUxNgkJICAgICAgIHFkaW9faW5iX3VzYWdlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgemZjcF9mc2ZfcmVxIC0gYmFzaWMgRlNGIHJlcXVlc3Qgc3RydWN0dXJlCisgKiBAbGlzdDogbGlzdCBvZiBGU0YgcmVxdWVzdHMKKyAqIEByZXFfaWQ6IHVuaXF1ZSByZXF1ZXN0IElECisgKiBAYWRhcHRlcjogYWRhcHRlciB0aGlzIHJlcXVlc3QgYmVsb25ncyB0bworICogQHF1ZXVlX3JlcTogcXVldWUgcmVsYXRlZCB2YWx1ZXMKKyAqIEBjb21wbGV0aW9uOiB1c2VkIHRvIHNpZ25hbCB0aGUgY29tcGxldGlvbiBvZiB0aGUgcmVxdWVzdAorICogQHN0YXR1czogc3RhdHVzIG9mIHRoZSByZXF1ZXN0CisgKiBAZnNmX2NvbW1hbmQ6IEZTRiBjb21tYW5kIGlzc3VlZAorICogQHF0Y2I6IGFzc29jaWF0ZWQgUVRDQgorICogQHNlcV9ubzogc2VxdWVuY2UgbnVtYmVyIG9mIHRoaXMgcmVxdWVzdAorICogQGRhdGE6IHByaXZhdGUgZGF0YQorICogQHRpbWVyOiB0aW1lciBkYXRhIG9mIHRoaXMgcmVxdWVzdAorICogQGVycF9hY3Rpb246IHJlZmVyZW5jZSB0byBlcnAgYWN0aW9uIGlmIHJlcXVlc3QgaXNzdWVkIG9uIGJlaGFsZiBvZiBFUlAKKyAqIEBwb29sOiByZWZlcmVuY2UgdG8gbWVtb3J5IHBvb2wgaWYgdXNlZCBmb3IgdGhpcyByZXF1ZXN0CisgKiBAaXNzdWVkOiB0aW1lIHdoZW4gcmVxdWVzdCB3YXMgc2VuZCAoU1RDSykKKyAqIEB1bml0OiByZWZlcmVuY2UgdG8gdW5pdCBpZiB0aGlzIHJlcXVlc3QgaXMgYSBTQ1NJIHJlcXVlc3QKKyAqIEBoYW5kbGVyOiBoYW5kbGVyIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgdG8gcHJvY2VzcyByZXNwb25zZQorICovCiBzdHJ1Y3QgemZjcF9mc2ZfcmVxIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGxpc3Q7CSAgICAgICAvKiBsaXN0IG9mIEZTRiByZXF1ZXN0cyAqLwotCXVuc2lnbmVkIGxvbmcJICAgICAgIHJlcV9pZDsJICAgICAgIC8qIHVuaXF1ZSByZXF1ZXN0IElEICovCi0Jc3RydWN0IHpmY3BfYWRhcHRlciAgICAqYWRhcHRlcjsgICAgICAgLyogYWRhcHRlciByZXF1ZXN0IGJlbG9uZ3MgdG8gKi8KLQl1OAkJICAgICAgIHNiYWxfbnVtYmVyOyAgICAvKiBuciBvZiBTQkFMcyBmcmVlIGZvciB1c2UgKi8KLQl1OAkJICAgICAgIHNiYWxfZmlyc3Q7ICAgICAvKiBmaXJzdCBTQkFMIGZvciB0aGlzIHJlcXVlc3QgKi8KLQl1OAkJICAgICAgIHNiYWxfbGFzdDsgICAgICAvKiBsYXN0IFNCQUwgZm9yIHRoaXMgcmVxdWVzdCAqLwotCXU4CQkgICAgICAgc2JhbF9saW1pdDsgICAgICAvKiBsYXN0IHBvc3NpYmxlIFNCQUwgZm9yCi0JCQkJCQkgIHRoaXMgcmV1ZXN0ICovCi0JdTgJCSAgICAgICBzYmFsZV9jdXJyOyAgICAgLyogY3VycmVudCBTQkFMRSBkdXJpbmcgY3JlYXRpb24KLQkJCQkJCSAgb2YgcmVxdWVzdCAqLwotCXU4CQkJc2JhbF9yZXNwb25zZTsJLyogU0JBTCB1c2VkIGluIGludGVycnVwdCAqLwotCXdhaXRfcXVldWVfaGVhZF90ICAgICAgY29tcGxldGlvbl93cTsgIC8qIGNhbiBiZSB1c2VkIGJ5IGEgcm91dGluZQotCQkJCQkJICB0byB3YWl0IGZvciBjb21wbGV0aW9uICovCi0JdTMyCQkJc3RhdHVzOwkgICAgICAgLyogc3RhdHVzIG9mIHRoaXMgcmVxdWVzdCAqLwotCXUzMgkJICAgICAgIGZzZl9jb21tYW5kOyAgICAvKiBGU0YgQ29tbWFuZCBjb3B5ICovCi0Jc3RydWN0IGZzZl9xdGNiCSAgICAgICAqcXRjYjsJICAgICAgIC8qIGFkZHJlc3Mgb2YgYXNzb2NpYXRlZCBRVENCICovCi0JdTMyCQkgICAgICAgc2VxX25vOyAgICAgICAgIC8qIFNlcXVlbmNlIG51bWJlciBvZiByZXF1ZXN0ICovCi0Jdm9pZAkJCSpkYXRhOyAgICAgICAgICAgLyogcHJpdmF0ZSBkYXRhIG9mIHJlcXVlc3QgKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgdGltZXI7CSAgICAgICAvKiB1c2VkIGZvciBlcnAgb3Igc2NzaSBlciAqLwotCXN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb247ICAgIC8qIHVzZWQgaWYgdGhpcyByZXF1ZXN0IGlzCi0JCQkJCQkgIGlzc3VlZCBvbiBiZWhhbGYgb2YgZXJwICovCi0JbWVtcG9vbF90CSAgICAgICAqcG9vbDsJICAgICAgIC8qIHVzZWQgaWYgcmVxdWVzdCB3YXMgYWxsb2FjdGVkCi0JCQkJCQkgIGZyb20gZW1lcmdlbmN5IHBvb2wgKi8KLQl1bnNpZ25lZCBsb25nIGxvbmcgICAgIGlzc3VlZDsgICAgICAgICAvKiByZXF1ZXN0IHNlbnQgdGltZSAoU1RDSykgKi8KLQlzdHJ1Y3QgemZjcF91bml0ICAgICAgICp1bml0OworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl1bnNpZ25lZCBsb25nCQlyZXFfaWQ7CisJc3RydWN0IHpmY3BfYWRhcHRlcgkqYWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEJcXVldWVfcmVxOworCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247CisJdTMyCQkJc3RhdHVzOworCXUzMgkJCWZzZl9jb21tYW5kOworCXN0cnVjdCBmc2ZfcXRjYgkJKnF0Y2I7CisJdTMyCQkJc2VxX25vOworCXZvaWQJCQkqZGF0YTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwlzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uCSplcnBfYWN0aW9uOworCW1lbXBvb2xfdAkJKnBvb2w7CisJdW5zaWduZWQgbG9uZyBsb25nCWlzc3VlZDsKKwlzdHJ1Y3QgemZjcF91bml0CSp1bml0OwogCXZvaWQJCQkoKmhhbmRsZXIpKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci0JdTE2CQkJcWRpb19vdXRiX3VzYWdlOy8qIHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlICovCi0JdTE2CQkJcWRpb19pbmJfdXNhZ2U7CS8qIHVzYWdlIG9mIGluYm91bmQgcXVldWUgKi8KIH07CiAKIC8qIGRyaXZlciBkYXRhICovCkBAIC01NzAsMTggKzYwNCwxMSBAQAogCXJ3bG9ja190ICAgICAgICAgICAgICAgIGNvbmZpZ19sb2NrOyAgICAgICAgLyogc2VyaWFsaXNlcyBjaGFuZ2VzCiAJCQkJCQkgICAgICAgdG8gYWRhcHRlci9wb3J0L3VuaXQKIAkJCQkJCSAgICAgICBsaXN0cyAqLwotCXN0cnVjdCBzZW1hcGhvcmUgICAgICAgIGNvbmZpZ19zZW1hOyAgICAgICAgLyogc2VyaWFsaXNlcyBjb25maWd1cmF0aW9uCi0JCQkJCQkgICAgICAgY2hhbmdlcyAqLwotCXN0cnVjdCBrbWVtX2NhY2hlCSpmc2ZfcmVxX3F0Y2JfY2FjaGU7CisJc3RydWN0IG11dGV4CQljb25maWdfbXV0ZXg7CisJc3RydWN0IGttZW1fY2FjaGUJKmdwbl9mdF9jYWNoZTsKKwlzdHJ1Y3Qga21lbV9jYWNoZQkqcXRjYl9jYWNoZTsKIAlzdHJ1Y3Qga21lbV9jYWNoZQkqc3JfYnVmZmVyX2NhY2hlOwogCXN0cnVjdCBrbWVtX2NhY2hlCSpnaWRfcG5fY2FjaGU7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtfcXVldWU7Ci19OwotCi0vKiBzdHJ1Y3QgdXNlZCBieSBtZW1vcnkgcG9vbHMgZm9yIGZzZl9yZXF1ZXN0cyAqLwotc3RydWN0IHpmY3BfZnNmX3JlcV9xdGNiIHsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxIGZzZl9yZXE7Ci0Jc3RydWN0IGZzZl9xdGNiIHF0Y2I7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKiBaRkNQIFNQRUNJRklDIERFRklORVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYwppbmRleCBjNzVkNmYzLi43M2QzNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKQEAgLTksNiArOSw3IEBACiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgogI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgInpmY3BfZXh0LmgiCiAKICNkZWZpbmUgWkZDUF9NQVhfRVJQUyAgICAgICAgICAgICAgICAgICAzCkBAIC0yNiw3ICsyNyw2IEBACiAJWkZDUF9FUlBfU1RFUF9GU0ZfWENPTkZJRwk9IDB4MDAwMSwKIAlaRkNQX0VSUF9TVEVQX1BIWVNfUE9SVF9DTE9TSU5HCT0gMHgwMDEwLAogCVpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HCT0gMHgwMTAwLAotCVpGQ1BfRVJQX1NURVBfTkFNRVNFUlZFUl9MT09LVVAJPSAweDA0MDAsCiAJWkZDUF9FUlBfU1RFUF9QT1JUX09QRU5JTkcJPSAweDA4MDAsCiAJWkZDUF9FUlBfU1RFUF9VTklUX0NMT1NJTkcJPSAweDEwMDAsCiAJWkZDUF9FUlBfU1RFUF9VTklUX09QRU5JTkcJPSAweDIwMDAsCkBAIC03NSw5ICs3NSw5IEBACiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGFjdC0+YWRhcHRlcjsKIAogCWxpc3RfbW92ZSgmYWN0LT5saXN0LCAmYWN0LT5hZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJhcmR5MSIsIGFjdCk7Ci0JdXAoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoImVyYXJkeTIiLCBhZGFwdGVyKTsKKwl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcmFyZHkxIiwgYWN0KTsKKwl3YWtlX3VwKCZhZGFwdGVyLT5lcnBfcmVhZHlfd3EpOworCXpmY3BfZGJmX3JlY190aHJlYWQoImVyYXJkeTIiLCBhZGFwdGVyLT5kYmYpOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fZGlzbWlzcyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QpCkBAIC0xNTAsNiArMTUwLDkgQEAKIAkJYV9zdGF0dXMgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKTsKIAkJaWYgKGFfc3RhdHVzICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9JTlVTRSkKIAkJCXJldHVybiAwOworCQlpZiAoIShhX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSAmJgorCQkgICAgIShhX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKSkKKwkJCXJldHVybiAwOyAvKiBzaHV0ZG93biByZXF1ZXN0ZWQgZm9yIGNsb3NlZCBhZGFwdGVyICovCiAJfQogCiAJcmV0dXJuIG5lZWQ7CkBAIC0yMTMsOCArMjE2LDcgQEAKIAlpbnQgcmV0dmFsID0gMSwgbmVlZDsKIAlzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICphY3QgPSBOVUxMOwogCi0JaWYgKCEoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJgotCSAgICAgIFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCkpCisJaWYgKCFhZGFwdGVyLT5lcnBfdGhyZWFkKQogCQlyZXR1cm4gLUVJTzsKIAogCW5lZWQgPSB6ZmNwX2VycF9yZXF1aXJlZF9hY3Qod2FudCwgYWRhcHRlciwgcG9ydCwgdW5pdCk7CkBAIC0yMjcsMTIgKzIyOSwxMSBAQAogCQlnb3RvIG91dDsKIAkrK2FkYXB0ZXItPmVycF90b3RhbF9jb3VudDsKIAlsaXN0X2FkZF90YWlsKCZhY3QtPmxpc3QsICZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCk7Ci0JdXAoJmFkYXB0ZXItPmVycF9yZWFkeV9zZW0pOwotCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWQoImVyYWN0ZTEiLCBhZGFwdGVyKTsKKwl3YWtlX3VwKCZhZGFwdGVyLT5lcnBfcmVhZHlfd3EpOworCXpmY3BfZGJmX3JlY190aHJlYWQoImVyYWN0ZTEiLCBhZGFwdGVyLT5kYmYpOwogCXJldHZhbCA9IDA7CiAgb3V0OgotCXpmY3BfcmVjX2RiZl9ldmVudF90cmlnZ2VyKGlkLCByZWYsIHdhbnQsIG5lZWQsIGFjdCwKLQkJCQkgICBhZGFwdGVyLCBwb3J0LCB1bml0KTsKKwl6ZmNwX2RiZl9yZWNfdHJpZ2dlcihpZCwgcmVmLCB3YW50LCBuZWVkLCBhY3QsIGFkYXB0ZXIsIHBvcnQsIHVuaXQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTQ0MywyOCArNDQ0LDI4IEBACiBzdGF0aWMgdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3VuYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoc3RhdHVzX2NoYW5nZV9zZXQoWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJmFkYXB0ZXItPnN0YXR1cykpCi0JCXpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKCJlcmF1YmwxIiwgTlVMTCwgYWRhcHRlcik7CisJCXpmY3BfZGJmX3JlY19hZGFwdGVyKCJlcmF1YmwxIiwgTlVMTCwgYWRhcHRlci0+ZGJmKTsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJmFkYXB0ZXItPnN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3BvcnRfdW5ibG9jayhzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewogCWlmIChzdGF0dXNfY2hhbmdlX3NldChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmcG9ydC0+c3RhdHVzKSkKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3BvcnQoImVycHVibDEiLCBOVUxMLCBwb3J0KTsKKwkJemZjcF9kYmZfcmVjX3BvcnQoImVycHVibDEiLCBOVUxMLCBwb3J0KTsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJnBvcnQtPnN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX3VuaXRfdW5ibG9jayhzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewogCWlmIChzdGF0dXNfY2hhbmdlX3NldChaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmdW5pdC0+c3RhdHVzKSkKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoImVydXVibDEiLCBOVUxMLCB1bml0KTsKKwkJemZjcF9kYmZfcmVjX3VuaXQoImVydXVibDEiLCBOVUxMLCB1bml0KTsKIAlhdG9taWNfc2V0X21hc2soWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRCwgJnVuaXQtPnN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl90b19ydW5uaW5nKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJbGlzdF9tb3ZlKCZlcnBfYWN0aW9uLT5saXN0LCAmZXJwX2FjdGlvbi0+YWRhcHRlci0+ZXJwX3J1bm5pbmdfaGVhZCk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJhdG9yMSIsIGVycF9hY3Rpb24pOworCXpmY3BfZGJmX3JlY19hY3Rpb24oImVyYXRvcjEiLCBlcnBfYWN0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9lcnBfc3RyYXRlZ3lfY2hlY2tfZnNmcmVxKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKQEAgLTQ4MCwxMyArNDgxLDEyIEBACiAJCWlmIChhY3QtPnN0YXR1cyAmIChaRkNQX1NUQVRVU19FUlBfRElTTUlTU0VEIHwKIAkJCQkgICBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpKSB7CiAJCQlhY3QtPmZzZl9yZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEOwotCQkJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJzY2ZfMSIsIGFjdCk7CisJCQl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcnNjZl8xIiwgYWN0KTsKIAkJCWFjdC0+ZnNmX3JlcS0+ZXJwX2FjdGlvbiA9IE5VTEw7CiAJCX0KIAkJaWYgKGFjdC0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKQotCQkJemZjcF9yZWNfZGJmX2V2ZW50X2FjdGlvbigiZXJzY2ZfMiIsIGFjdCk7Ci0JCWlmIChhY3QtPmZzZl9yZXEtPnN0YXR1cyAmIChaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEIHwKLQkJCQkJICAgIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpKQorCQkJemZjcF9kYmZfcmVjX2FjdGlvbigiZXJzY2ZfMiIsIGFjdCk7CisJCWlmIChhY3QtPmZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQpCiAJCQlhY3QtPmZzZl9yZXEgPSBOVUxMOwogCX0gZWxzZQogCQlhY3QtPmZzZl9yZXEgPSBOVUxMOwpAQCAtNjA0LDkgKzYwNCwxMSBAQAogCiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9xZGlvKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmFjdCkKIHsKLQlpZiAoemZjcF9xZGlvX29wZW4oYWN0LT5hZGFwdGVyKSkKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWN0LT5hZGFwdGVyLT5xZGlvOworCisJaWYgKHpmY3BfcWRpb19vcGVuKHFkaW8pKQogCQlyZXR1cm4gWkZDUF9FUlBfRkFJTEVEOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFjdC0+YWRhcHRlci0+cmVxdWVzdF93cSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcWRpby0+cmVxX3Ffd3EpOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCwgJmFjdC0+YWRhcHRlci0+c3RhdHVzKTsKIAlyZXR1cm4gWkZDUF9FUlBfU1VDQ0VFREVEOwogfQpAQCAtNjQxLDkgKzY0MywxMCBAQAogCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAkJfQogCi0JCXpmY3BfcmVjX2RiZl9ldmVudF90aHJlYWRfbG9jaygiZXJhc2Z4MSIsIGFkYXB0ZXIpOwotCQlkb3duKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcmFzZngyIiwgYWRhcHRlcik7CisJCXpmY3BfZGJmX3JlY190aHJlYWRfbG9jaygiZXJhc2Z4MSIsIGFkYXB0ZXItPmRiZik7CisJCXdhaXRfZXZlbnQoYWRhcHRlci0+ZXJwX3JlYWR5X3dxLAorCQkJICAgIWxpc3RfZW1wdHkoJmFkYXB0ZXItPmVycF9yZWFkeV9oZWFkKSk7CisJCXpmY3BfZGJmX3JlY190aHJlYWRfbG9jaygiZXJhc2Z4MiIsIGFkYXB0ZXItPmRiZik7CiAJCWlmIChlcnBfYWN0aW9uLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19FUlBfVElNRURPVVQpCiAJCQlicmVhazsKIApAQCAtNjgyLDkgKzY4NSwxMCBAQAogCWlmIChyZXQpCiAJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAKLQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVyYXNveDEiLCBhZGFwdGVyKTsKLQlkb3duKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKLQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVyYXNveDIiLCBhZGFwdGVyKTsKKwl6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soImVyYXNveDEiLCBhZGFwdGVyLT5kYmYpOworCXdhaXRfZXZlbnQoYWRhcHRlci0+ZXJwX3JlYWR5X3dxLAorCQkgICAhbGlzdF9lbXB0eSgmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpKTsKKwl6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soImVyYXNveDIiLCBhZGFwdGVyLT5kYmYpOwogCWlmIChhY3QtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0VSUF9USU1FRE9VVCkKIAkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIApAQCAtNzExLDEwICs3MTUsMTAgQEAKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gYWN0LT5hZGFwdGVyOwogCiAJLyogY2xvc2UgcXVldWVzIHRvIGVuc3VyZSB0aGF0IGJ1ZmZlcnMgYXJlIG5vdCBhY2Nlc3NlZCBieSBhZGFwdGVyICovCi0JemZjcF9xZGlvX2Nsb3NlKGFkYXB0ZXIpOworCXpmY3BfcWRpb19jbG9zZShhZGFwdGVyLT5xZGlvKTsKIAl6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwoYWRhcHRlcik7CiAJYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm8gPSAwOwotCXpmY3BfZmNfd2thX3BvcnRfZm9yY2Vfb2ZmbGluZSgmYWRhcHRlci0+Z3MtPmRzKTsKKwl6ZmNwX2ZjX3drYV9wb3J0c19mb3JjZV9vZmZsaW5lKGFkYXB0ZXItPmdzKTsKIAkvKiBhbGwgcG9ydHMgYW5kIHVuaXRzIGFyZSBjbG9zZWQgKi8KIAl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwgImVyYXNjbDEiLCBOVUxMLAogCQkJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fT1BFTiwgWkZDUF9DTEVBUik7CkBAIC04NDEsMjcgKzg0NSw2IEBACiAJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9wb3J0KGFjdCk7CiB9CiAKLXZvaWQgemZjcF9lcnBfcG9ydF9zdHJhdGVneV9vcGVuX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX3BvcnQsCi0JCQkJCSAgICAgIGdpZF9wbl93b3JrKTsKLQotCXJldHZhbCA9IHpmY3BfZmNfbnNfZ2lkX3BuKCZwb3J0LT5lcnBfYWN0aW9uKTsKLQlpZiAoIXJldHZhbCkgewotCQlwb3J0LT5lcnBfYWN0aW9uLnN0ZXAgPSBaRkNQX0VSUF9TVEVQX05BTUVTRVJWRVJfTE9PS1VQOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKHJldHZhbCA9PSAtRU5PTUVNKSB7Ci0JCXpmY3BfZXJwX25vdGlmeSgmcG9ydC0+ZXJwX2FjdGlvbiwgWkZDUF9TVEFUVVNfRVJQX0xPV01FTSk7Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBhbGwgb3RoZXIgZXJyb3IgY29uZHRpb25zICovCi0JemZjcF9lcnBfbm90aWZ5KCZwb3J0LT5lcnBfYWN0aW9uLCAwKTsKLW91dDoKLQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwotfQotCiBzdGF0aWMgaW50IHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfb3Blbl9jb21tb24oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0KQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBhY3QtPmFkYXB0ZXI7CkBAIC04NzYsMTUgKzg1OSwxMSBAQAogCQkJcmV0dXJuIHpmY3BfZXJwX29wZW5fcHRwX3BvcnQoYWN0KTsKIAkJaWYgKCFwb3J0LT5kX2lkKSB7CiAJCQl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwotCQkJaWYgKCFxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLAorCQkJaWYgKCFxdWV1ZV93b3JrKGFkYXB0ZXItPndvcmtfcXVldWUsCiAJCQkJCSZwb3J0LT5naWRfcG5fd29yaykpCiAJCQkJemZjcF9wb3J0X3B1dChwb3J0KTsKLQkJCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CisJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJfQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFpGQ1BfRVJQX1NURVBfTkFNRVNFUlZFUl9MT09LVVA6Ci0JCWlmICghcG9ydC0+ZF9pZCkKLQkJCXJldHVybiBaRkNQX0VSUF9GQUlMRUQ7CiAJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fcG9ydChhY3QpOwogCiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfT1BFTklORzoKQEAgLTExNjMsNyArMTE0Miw3IEBACiAJfQogCiAJbGlzdF9kZWwoJmVycF9hY3Rpb24tPmxpc3QpOwotCXpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oImVyYWN0ZDEiLCBlcnBfYWN0aW9uKTsKKwl6ZmNwX2RiZl9yZWNfYWN0aW9uKCJlcmFjdGQxIiwgZXJwX2FjdGlvbik7CiAKIAlzd2l0Y2ggKGVycF9hY3Rpb24tPmFjdGlvbikgewogCWNhc2UgWkZDUF9FUlBfQUNUSU9OX1JFT1BFTl9VTklUOgpAQCAtMTMxMSwyMCArMTI5MCwxNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7CiAJc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqYWN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGlnbm9yZTsKIAotCWRhZW1vbml6ZSgiemZjcGVycCVzIiwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwotCS8qIEJsb2NrIGFsbCBzaWduYWxzICovCi0Jc2lnaW5pdHNldGludigmY3VycmVudC0+YmxvY2tlZCwgMCk7Ci0JYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCwgJmFkYXB0ZXItPnN0YXR1cyk7Ci0Jd2FrZV91cCgmYWRhcHRlci0+ZXJwX3RocmVhZF93cWgpOworCWZvciAoOzspIHsKKwkJemZjcF9kYmZfcmVjX3RocmVhZF9sb2NrKCJlcnRocmQxIiwgYWRhcHRlci0+ZGJmKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFkYXB0ZXItPmVycF9yZWFkeV93cSwKKwkJCSAgICFsaXN0X2VtcHR5KCZhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZCkgfHwKKwkJCSAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisJCXpmY3BfZGJmX3JlY190aHJlYWRfbG9jaygiZXJ0aHJkMiIsIGFkYXB0ZXItPmRiZik7CiAKLQl3aGlsZSAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCi0JCSBaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfS0lMTCkpIHsKLQotCQl6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soImVydGhyZDEiLCBhZGFwdGVyKTsKLQkJaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZhZGFwdGVyLT5lcnBfcmVhZHlfc2VtKTsKLQkJemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcnRocmQyIiwgYWRhcHRlcik7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKIAogCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7CiAJCW5leHQgPSBhZGFwdGVyLT5lcnBfcmVhZHlfaGVhZC5uZXh0OwpAQCAtMTMzOSw5ICsxMzE0LDYgQEAKIAkJfQogCX0KIAotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9VUCwgJmFkYXB0ZXItPnN0YXR1cyk7Ci0Jd2FrZV91cCgmYWRhcHRlci0+ZXJwX3RocmVhZF93cWgpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNTMsMTggKzEzMjUsMTcgQEAKICAqLwogaW50IHpmY3BfZXJwX3RocmVhZF9zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewotCWludCByZXR2YWw7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CiAKLQlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfVVAsICZhZGFwdGVyLT5zdGF0dXMpOwotCXJldHZhbCA9IGtlcm5lbF90aHJlYWQoemZjcF9lcnBfdGhyZWFkLCBhZGFwdGVyLCBTSUdDSExEKTsKLQlpZiAocmV0dmFsIDwgMCkgeworCXRocmVhZCA9IGt0aHJlYWRfcnVuKHpmY3BfZXJwX3RocmVhZCwgYWRhcHRlciwgInpmY3BlcnAlcyIsCisJCQkgICAgIGRldl9uYW1lKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpKTsKKwlpZiAoSVNfRVJSKHRocmVhZCkpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJIkNyZWF0aW5nIGFuIEVSUCB0aHJlYWQgZm9yIHRoZSBGQ1AgZGV2aWNlIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gUFRSX0VSUih0aHJlYWQpOwogCX0KLQl3YWl0X2V2ZW50KGFkYXB0ZXItPmVycF90aHJlYWRfd3FoLAotCQkgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCi0JCQlaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfVVApOworCisJYWRhcHRlci0+ZXJwX3RocmVhZCA9IHRocmVhZDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM3OSwxNiArMTM1MCwxMCBAQAogICovCiB2b2lkIHpmY3BfZXJwX3RocmVhZF9raWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JYXRvbWljX3NldF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9LSUxMLCAmYWRhcHRlci0+c3RhdHVzKTsKLQl1cCgmYWRhcHRlci0+ZXJwX3JlYWR5X3NlbSk7Ci0JemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZF9sb2NrKCJlcnRocmsxIiwgYWRhcHRlcik7Ci0KLQl3YWl0X2V2ZW50KGFkYXB0ZXItPmVycF90aHJlYWRfd3FoLAotCQkgICAhKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYKLQkJCQlaRkNQX1NUQVRVU19BREFQVEVSX0VSUF9USFJFQURfVVApKTsKLQotCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1RIUkVBRF9LSUxMLAotCQkJICAmYWRhcHRlci0+c3RhdHVzKTsKKwlrdGhyZWFkX3N0b3AoYWRhcHRlci0+ZXJwX3RocmVhZCk7CisJYWRhcHRlci0+ZXJwX3RocmVhZCA9IE5VTEw7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmYWRhcHRlci0+ZXJwX3JlYWR5X2hlYWQpKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZhZGFwdGVyLT5lcnBfcnVubmluZ19oZWFkKSk7CiB9CiAKIC8qKgpAQCAtMTQ1NiwxMSArMTQyMSwxMSBAQAogCiAJaWYgKHNldF9vcl9jbGVhciA9PSBaRkNQX1NFVCkgewogCQlpZiAoc3RhdHVzX2NoYW5nZV9zZXQobWFzaywgJmFkYXB0ZXItPnN0YXR1cykpCi0JCQl6ZmNwX3JlY19kYmZfZXZlbnRfYWRhcHRlcihpZCwgcmVmLCBhZGFwdGVyKTsKKwkJCXpmY3BfZGJmX3JlY19hZGFwdGVyKGlkLCByZWYsIGFkYXB0ZXItPmRiZik7CiAJCWF0b21pY19zZXRfbWFzayhtYXNrLCAmYWRhcHRlci0+c3RhdHVzKTsKIAl9IGVsc2UgewogCQlpZiAoc3RhdHVzX2NoYW5nZV9jbGVhcihtYXNrLCAmYWRhcHRlci0+c3RhdHVzKSkKLQkJCXpmY3BfcmVjX2RiZl9ldmVudF9hZGFwdGVyKGlkLCByZWYsIGFkYXB0ZXIpOworCQkJemZjcF9kYmZfcmVjX2FkYXB0ZXIoaWQsIHJlZiwgYWRhcHRlci0+ZGJmKTsKIAkJYXRvbWljX2NsZWFyX21hc2sobWFzaywgJmFkYXB0ZXItPnN0YXR1cyk7CiAJCWlmIChtYXNrICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpCiAJCQlhdG9taWNfc2V0KCZhZGFwdGVyLT5lcnBfY291bnRlciwgMCk7CkBAIC0xNDkwLDExICsxNDU1LDExIEBACiAKIAlpZiAoc2V0X29yX2NsZWFyID09IFpGQ1BfU0VUKSB7CiAJCWlmIChzdGF0dXNfY2hhbmdlX3NldChtYXNrLCAmcG9ydC0+c3RhdHVzKSkKLQkJCXpmY3BfcmVjX2RiZl9ldmVudF9wb3J0KGlkLCByZWYsIHBvcnQpOworCQkJemZjcF9kYmZfcmVjX3BvcnQoaWQsIHJlZiwgcG9ydCk7CiAJCWF0b21pY19zZXRfbWFzayhtYXNrLCAmcG9ydC0+c3RhdHVzKTsKIAl9IGVsc2UgewogCQlpZiAoc3RhdHVzX2NoYW5nZV9jbGVhcihtYXNrLCAmcG9ydC0+c3RhdHVzKSkKLQkJCXpmY3BfcmVjX2RiZl9ldmVudF9wb3J0KGlkLCByZWYsIHBvcnQpOworCQkJemZjcF9kYmZfcmVjX3BvcnQoaWQsIHJlZiwgcG9ydCk7CiAJCWF0b21pY19jbGVhcl9tYXNrKG1hc2ssICZwb3J0LT5zdGF0dXMpOwogCQlpZiAobWFzayAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfRkFJTEVEKQogCQkJYXRvbWljX3NldCgmcG9ydC0+ZXJwX2NvdW50ZXIsIDApOwpAQCAtMTUxOSwxMSArMTQ4NCwxMSBAQAogewogCWlmIChzZXRfb3JfY2xlYXIgPT0gWkZDUF9TRVQpIHsKIAkJaWYgKHN0YXR1c19jaGFuZ2Vfc2V0KG1hc2ssICZ1bml0LT5zdGF0dXMpKQotCQkJemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoaWQsIHJlZiwgdW5pdCk7CisJCQl6ZmNwX2RiZl9yZWNfdW5pdChpZCwgcmVmLCB1bml0KTsKIAkJYXRvbWljX3NldF9tYXNrKG1hc2ssICZ1bml0LT5zdGF0dXMpOwogCX0gZWxzZSB7CiAJCWlmIChzdGF0dXNfY2hhbmdlX2NsZWFyKG1hc2ssICZ1bml0LT5zdGF0dXMpKQotCQkJemZjcF9yZWNfZGJmX2V2ZW50X3VuaXQoaWQsIHJlZiwgdW5pdCk7CisJCQl6ZmNwX2RiZl9yZWNfdW5pdChpZCwgcmVmLCB1bml0KTsKIAkJYXRvbWljX2NsZWFyX21hc2sobWFzaywgJnVuaXQtPnN0YXR1cyk7CiAJCWlmIChtYXNrICYgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpIHsKIAkJCWF0b21pY19zZXQoJnVuaXQtPmVycF9jb3VudGVyLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IDMwNDRjNjAuLjM2OTM1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtMzQsMzcgKzM0LDMxIEBACiBleHRlcm4gc3RydWN0IG1pc2NkZXZpY2UgemZjcF9jZmRjX21pc2M7CiAKIC8qIHpmY3BfZGJmLmMgKi8KLWV4dGVybiBpbnQgemZjcF9hZGFwdGVyX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX2FkYXB0ZXJfZGVidWdfdW5yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RocmVhZChjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfdGhyZWFkX2xvY2soY2hhciAqLCBzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X2FkYXB0ZXIoY2hhciAqLCB2b2lkICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3JlY19kYmZfZXZlbnRfcG9ydChjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfcG9ydCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF91bml0KGNoYXIgKiwgdm9pZCAqLCBzdHJ1Y3QgemZjcF91bml0ICopOwotZXh0ZXJuIHZvaWQgemZjcF9yZWNfZGJmX2V2ZW50X3RyaWdnZXIoY2hhciAqLCB2b2lkICosIHU4LCB1OCwgdm9pZCAqLAotCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCi0JCQkJICAgICAgIHN0cnVjdCB6ZmNwX3BvcnQgKiwgc3RydWN0IHpmY3BfdW5pdCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcmVjX2RiZl9ldmVudF9hY3Rpb24oY2hhciAqLCBzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwotZXh0ZXJuIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbChjb25zdCBjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkJIHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopOwotZXh0ZXJuIHZvaWQgemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oc3RydWN0IHpmY3BfYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIGludCwKLQkJCQkgICAgaW50KTsKLWV4dGVybiB2b2lkIHpmY3BfaGJhX2RiZl9ldmVudF9iZXJyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkgICAgc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3Nhbl9kYmZfZXZlbnRfY3RfcmVzcG9uc2Uoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiB2b2lkIHpmY3Bfc2FuX2RiZl9ldmVudF9lbHNfcmVxdWVzdChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9zYW5fZGJmX2V2ZW50X2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkgICAgICAgc3RydWN0IHNjc2lfY21uZCAqLAotCQkJCSAgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIHZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydChjb25zdCBjaGFyICosIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKLQkJCQkgICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKiwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIHpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoY29uc3QgY2hhciAqLCB1OCwgc3RydWN0IHpmY3BfdW5pdCAqLAotCQkJCQkgc3RydWN0IHNjc2lfY21uZCAqKTsKK2V4dGVybiBpbnQgemZjcF9kYmZfYWRhcHRlcl9yZWdpc3RlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfYWRhcHRlcl91bnJlZ2lzdGVyKHN0cnVjdCB6ZmNwX2RiZiAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3JlY190aHJlYWQoY2hhciAqLCBzdHJ1Y3QgemZjcF9kYmYgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfdGhyZWFkX2xvY2soY2hhciAqLCBzdHJ1Y3QgemZjcF9kYmYgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfYWRhcHRlcihjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfZGJmICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfcmVjX3BvcnQoY2hhciAqLCB2b2lkICosIHN0cnVjdCB6ZmNwX3BvcnQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfdW5pdChjaGFyICosIHZvaWQgKiwgc3RydWN0IHpmY3BfdW5pdCAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3JlY190cmlnZ2VyKGNoYXIgKiwgdm9pZCAqLCB1OCwgdTgsIHZvaWQgKiwKKwkJCQkgc3RydWN0IHpmY3BfYWRhcHRlciAqLCBzdHJ1Y3QgemZjcF9wb3J0ICosCisJCQkJIHN0cnVjdCB6ZmNwX3VuaXQgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9yZWNfYWN0aW9uKGNoYXIgKiwgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKK2V4dGVybiB2b2lkIF96ZmNwX2RiZl9oYmFfZnNmX3Jlc3BvbnNlKGNvbnN0IGNoYXIgKiwgaW50LCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICosCisJCQkJICAgICAgIHN0cnVjdCB6ZmNwX2RiZiAqKTsKK2V4dGVybiB2b2lkIF96ZmNwX2RiZl9oYmFfZnNmX3Vuc29sKGNvbnN0IGNoYXIgKiwgaW50IGxldmVsLCBzdHJ1Y3QgemZjcF9kYmYgKiwKKwkJCQkJICBzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX2hiYV9xZGlvKHN0cnVjdCB6ZmNwX2RiZiAqLCB1bnNpZ25lZCBpbnQsIGludCwgaW50KTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX2hiYV9iZXJyKHN0cnVjdCB6ZmNwX2RiZiAqLCBzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfc2FuX2N0X3JlcXVlc3Qoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZGJmX3Nhbl9jdF9yZXNwb25zZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOworZXh0ZXJuIHZvaWQgemZjcF9kYmZfc2FuX2Vsc19yZXF1ZXN0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9zYW5fZWxzX3Jlc3BvbnNlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX2RiZl9zYW5faW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCBfemZjcF9kYmZfc2NzaShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LCBzdHJ1Y3QgemZjcF9kYmYgKiwKKwkJCSAgIHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHpmY3BfZnNmX3JlcSAqLAorCQkJICAgdW5zaWduZWQgbG9uZyk7CiAKIC8qIHpmY3BfZXJwLmMgKi8KIGV4dGVybiB2b2lkIHpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGNoYXIgKiwKQEAgLTk2LDIyICs5MCwyMCBAQAogZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9hY2Nlc3NfY2hhbmdlZChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIGNoYXIgKiwKIAkJCQkJICAgIHZvaWQgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2VycF90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fbG9va3VwKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIAogLyogemZjcF9mYy5jICovCi1leHRlcm4gaW50IHpmY3Bfc2Nhbl9wb3J0cyhzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHZvaWQgX3pmY3Bfc2Nhbl9wb3J0c19sYXRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gaW50IHpmY3BfZmNfc2Nhbl9wb3J0cyhzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgX3pmY3BfZmNfc2Nhbl9wb3J0c19sYXRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX2luY29taW5nX2VscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotZXh0ZXJuIGludCB6ZmNwX2ZjX25zX2dpZF9wbihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOworZXh0ZXJuIHZvaWQgemZjcF9mY19wb3J0X2RpZF9sb29rdXAoc3RydWN0IHdvcmtfc3RydWN0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wbG9naV9ldmFsdWF0ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCBmc2ZfcGxvZ2kgKik7Ci1leHRlcm4gdm9pZCB6ZmNwX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICopOworZXh0ZXJuIHZvaWQgemZjcF9mY190ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfbGlua190ZXN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICopOwotZXh0ZXJuIHZvaWQgemZjcF9mY193a2FfcG9ydF9mb3JjZV9vZmZsaW5lKHN0cnVjdCB6ZmNwX3drYV9wb3J0ICopOwotZXh0ZXJuIHZvaWQgemZjcF9mY193a2FfcG9ydHNfaW5pdChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgemZjcF9mY193a2FfcG9ydHNfZm9yY2Vfb2ZmbGluZShzdHJ1Y3QgemZjcF93a2FfcG9ydHMgKik7CitleHRlcm4gaW50IHpmY3BfZmNfZ3Nfc2V0dXAoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZmNfZ3NfZGVzdHJveShzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwogZXh0ZXJuIGludCB6ZmNwX2ZjX2V4ZWN1dGVfZWxzX2ZjX2pvYihzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKIGV4dGVybiBpbnQgemZjcF9mY19leGVjdXRlX2N0X2ZjX2pvYihzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZmNfd2thX3BvcnRfZm9yY2Vfb2ZmbGluZShzdHJ1Y3QgemZjcF93a2FfcG9ydCAqKTsKLQogCiAvKiB6ZmNwX2ZzZi5jICovCiBleHRlcm4gaW50IHpmY3BfZnNmX29wZW5fcG9ydChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwpAQCAtMTIyLDM3ICsxMTQsMzkgQEAKIGV4dGVybiBpbnQgemZjcF9mc2Zfb3Blbl91bml0KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBleHRlcm4gaW50IHpmY3BfZnNmX2Nsb3NlX3VuaXQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIGV4dGVybiBpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGEoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKLWV4dGVybiBpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfc3luYyhzdHJ1Y3QgemZjcF9hZGFwdGVyICosCitleHRlcm4gaW50IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX3N5bmMoc3RydWN0IHpmY3BfcWRpbyAqLAogCQkJCQkgICAgICBzdHJ1Y3QgZnNmX3F0Y2JfYm90dG9tX2NvbmZpZyAqKTsKIGV4dGVybiBpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7Ci1leHRlcm4gaW50IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKK2V4dGVybiBpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMoc3RydWN0IHpmY3BfcWRpbyAqLAogCQkJCQkgICAgc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9wb3J0ICopOwogZXh0ZXJuIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX2NvbnRyb2xfZmlsZShzdHJ1Y3QgemZjcF9hZGFwdGVyICosCiAJCQkJCQkgIHN0cnVjdCB6ZmNwX2ZzZl9jZmRjICopOwogZXh0ZXJuIHZvaWQgemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gaW50IHpmY3BfZnNmX3N0YXR1c19yZWFkKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CitleHRlcm4gaW50IHpmY3BfZnNmX3N0YXR1c19yZWFkKHN0cnVjdCB6ZmNwX3FkaW8gKik7CiBleHRlcm4gaW50IHpmY3Bfc3RhdHVzX3JlYWRfcmVmaWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpOwotZXh0ZXJuIGludCB6ZmNwX2ZzZl9zZW5kX2N0KHN0cnVjdCB6ZmNwX3NlbmRfY3QgKiwgbWVtcG9vbF90ICosCi0JCQkgICAgc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKK2V4dGVybiBpbnQgemZjcF9mc2Zfc2VuZF9jdChzdHJ1Y3QgemZjcF9zZW5kX2N0ICosIG1lbXBvb2xfdCAqKTsKIGV4dGVybiBpbnQgemZjcF9mc2Zfc2VuZF9lbHMoc3RydWN0IHpmY3Bfc2VuZF9lbHMgKik7CiBleHRlcm4gaW50IHpmY3BfZnNmX3NlbmRfZmNwX2NvbW1hbmRfdGFzayhzdHJ1Y3QgemZjcF91bml0ICosCiAJCQkJCSAgc3RydWN0IHNjc2lfY21uZCAqKTsKLWV4dGVybiB2b2lkIHpmY3BfZnNmX3JlcV9jb21wbGV0ZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogZXh0ZXJuIHZvaWQgemZjcF9mc2ZfcmVxX2ZyZWUoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIGV4dGVybiBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9zZW5kX2ZjcF9jdG0oc3RydWN0IHpmY3BfdW5pdCAqLCB1OCk7CiBleHRlcm4gc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9mc2ZfYWJvcnRfZmNwX2NvbW1hbmQodW5zaWduZWQgbG9uZywKIAkJCQkJCSAgICAgICBzdHJ1Y3QgemZjcF91bml0ICopOworZXh0ZXJuIHZvaWQgemZjcF9mc2ZfcmVxaWRfY2hlY2soc3RydWN0IHpmY3BfcWRpbyAqLCBpbnQpOwogCiAvKiB6ZmNwX3FkaW8uYyAqLwotZXh0ZXJuIGludCB6ZmNwX3FkaW9fYWxsb2NhdGUoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcWRpb19mcmVlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gaW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqemZjcF9xZGlvX3NiYWxlX2N1cnIoc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKLWV4dGVybiBpbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfZnNmX3JlcSAqLCB1bnNpZ25lZCBsb25nLAorZXh0ZXJuIGludCB6ZmNwX3FkaW9fc2V0dXAoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKK2V4dGVybiB2b2lkIHpmY3BfcWRpb19kZXN0cm95KHN0cnVjdCB6ZmNwX3FkaW8gKik7CitleHRlcm4gaW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX3FkaW8gKiwgc3RydWN0IHpmY3BfcXVldWVfcmVxICopOworZXh0ZXJuIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50CisJKnpmY3BfcWRpb19zYmFsZV9yZXEoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7CitleHRlcm4gc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQKKwkqemZjcF9xZGlvX3NiYWxlX2N1cnIoc3RydWN0IHpmY3BfcWRpbyAqLCBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKik7CitleHRlcm4gaW50IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHN0cnVjdCB6ZmNwX3FkaW8gKiwKKwkJCQkgICBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKiwgdW5zaWduZWQgbG9uZywKIAkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50KTsKLWV4dGVybiBpbnQgemZjcF9xZGlvX29wZW4oc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKLWV4dGVybiB2b2lkIHpmY3BfcWRpb19jbG9zZShzdHJ1Y3QgemZjcF9hZGFwdGVyICopOworZXh0ZXJuIGludCB6ZmNwX3FkaW9fb3BlbihzdHJ1Y3QgemZjcF9xZGlvICopOworZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2Nsb3NlKHN0cnVjdCB6ZmNwX3FkaW8gKik7CiAKIC8qIHpmY3Bfc2NzaS5jICovCiBleHRlcm4gc3RydWN0IHpmY3BfZGF0YSB6ZmNwX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggNDdkYWViZi4uNzIyZjIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtMjUsMTQgKzI1LDYgQEAKIAlbUlNDTl9GQUJSSUNfQUREUkVTU10JCT0gMHgwMDAwMDAsCiB9OwogCi1zdHJ1Y3QgY3RfaXVfZ3BuX2Z0X3JlcSB7Ci0Jc3RydWN0IGN0X2hkciBoZWFkZXI7Ci0JdTggZmxhZ3M7Ci0JdTggZG9tYWluX2lkX3Njb3BlOwotCXU4IGFyZWFfaWRfc2NvcGU7Ci0JdTggZmM0X3R5cGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGdwbl9mdF9yZXNwX2FjYyB7CiAJdTggY29udHJvbDsKIAl1OCBwb3J0X2lkWzNdOwpAQCAtNjUsNyArNTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgaGFuZGxlcl9kYXRhOwogfTsKIAotc3RhdGljIGludCB6ZmNwX3drYV9wb3J0X2dldChzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQpCitzdGF0aWMgaW50IHpmY3BfZmNfd2thX3BvcnRfZ2V0KHN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCkKIHsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3a2FfcG9ydC0+bXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwpAQCAtOTAsNyArODIsNyBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3drYV9wb3J0X29mZmxpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgemZjcF9mY193a2FfcG9ydF9vZmZsaW5lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQgPQpAQCAtMTEwLDcgKzEwMiw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ3a2FfcG9ydC0+bXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3drYV9wb3J0X3B1dChzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQpCitzdGF0aWMgdm9pZCB6ZmNwX2ZjX3drYV9wb3J0X3B1dChzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQpCiB7CiAJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZ3a2FfcG9ydC0+cmVmY291bnQpICE9IDApCiAJCXJldHVybjsKQEAgLTEyOSwxMCArMTIxLDEwIEBACiAJd2thX3BvcnQtPnN0YXR1cyA9IFpGQ1BfV0tBX1BPUlRfT0ZGTElORTsKIAlhdG9taWNfc2V0KCZ3a2FfcG9ydC0+cmVmY291bnQsIDApOwogCW11dGV4X2luaXQoJndrYV9wb3J0LT5tdXRleCk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJndrYV9wb3J0LT53b3JrLCB6ZmNwX3drYV9wb3J0X29mZmxpbmUpOworCUlOSVRfREVMQVlFRF9XT1JLKCZ3a2FfcG9ydC0+d29yaywgemZjcF9mY193a2FfcG9ydF9vZmZsaW5lKTsKIH0KIAotdm9pZCB6ZmNwX2ZjX3drYV9wb3J0X2ZvcmNlX29mZmxpbmUoc3RydWN0IHpmY3Bfd2thX3BvcnQgKndrYSkKK3N0YXRpYyB2b2lkIHpmY3BfZmNfd2thX3BvcnRfZm9yY2Vfb2ZmbGluZShzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thKQogewogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd2thLT53b3JrKTsKIAltdXRleF9sb2NrKCZ3a2EtPm11dGV4KTsKQEAgLTE0MCwxNSArMTMyLDEzIEBACiAJbXV0ZXhfdW5sb2NrKCZ3a2EtPm11dGV4KTsKIH0KIAotdm9pZCB6ZmNwX2ZjX3drYV9wb3J0c19pbml0KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIHpmY3BfZmNfd2thX3BvcnRzX2ZvcmNlX29mZmxpbmUoc3RydWN0IHpmY3Bfd2thX3BvcnRzICpncykKIHsKLQlzdHJ1Y3QgemZjcF93a2FfcG9ydHMgKmdzID0gYWRhcHRlci0+Z3M7Ci0KLQl6ZmNwX2ZjX3drYV9wb3J0X2luaXQoJmdzLT5tcywgRkNfRklEX01HTVRfU0VSViwgYWRhcHRlcik7Ci0JemZjcF9mY193a2FfcG9ydF9pbml0KCZncy0+dHMsIEZDX0ZJRF9USU1FX1NFUlYsIGFkYXB0ZXIpOwotCXpmY3BfZmNfd2thX3BvcnRfaW5pdCgmZ3MtPmRzLCBGQ19GSURfRElSX1NFUlYsIGFkYXB0ZXIpOwotCXpmY3BfZmNfd2thX3BvcnRfaW5pdCgmZ3MtPmFzLCBGQ19GSURfQUxJQVNFUywgYWRhcHRlcik7Ci0JemZjcF9mY193a2FfcG9ydF9pbml0KCZncy0+a3MsIEZDX0ZJRF9TRUNfS0VZLCBhZGFwdGVyKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X2ZvcmNlX29mZmxpbmUoJmdzLT5tcyk7CisJemZjcF9mY193a2FfcG9ydF9mb3JjZV9vZmZsaW5lKCZncy0+dHMpOworCXpmY3BfZmNfd2thX3BvcnRfZm9yY2Vfb2ZmbGluZSgmZ3MtPmRzKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X2ZvcmNlX29mZmxpbmUoJmdzLT5hcyk7CisJemZjcF9mY193a2FfcG9ydF9mb3JjZV9vZmZsaW5lKCZncy0+a3MpOwogfQogCiBzdGF0aWMgdm9pZCBfemZjcF9mY19pbmNvbWluZ19yc2NuKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHUzMiByYW5nZSwKQEAgLTE2MCw3ICsxNTAsNyBAQAogCXJlYWRfbG9ja19pcnFzYXZlKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZmc2ZfcmVxLT5hZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkgewogCQlpZiAoKHBvcnQtPmRfaWQgJiByYW5nZSkgPT0gKGVsZW0tPm5wb3J0X2RpZCAmIHJhbmdlKSkKLQkJCXpmY3BfdGVzdF9saW5rKHBvcnQpOworCQkJemZjcF9mY190ZXN0X2xpbmsocG9ydCk7CiAJCWlmICghcG9ydC0+ZF9pZCkKIAkJCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsCiAJCQkJCSAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQsCkBAIC0yNDEsNyArMjMxLDcgQEAKIAkJKHN0cnVjdCBmc2Zfc3RhdHVzX3JlYWRfYnVmZmVyICopIGZzZl9yZXEtPmRhdGE7CiAJdW5zaWduZWQgaW50IGVsc190eXBlID0gc3RhdHVzX2J1ZmZlci0+cGF5bG9hZC5kYXRhWzBdOwogCi0JemZjcF9zYW5fZGJmX2V2ZW50X2luY29taW5nX2Vscyhmc2ZfcmVxKTsKKwl6ZmNwX2RiZl9zYW5faW5jb21pbmdfZWxzKGZzZl9yZXEpOwogCWlmIChlbHNfdHlwZSA9PSBMU19QTE9HSSkKIAkJemZjcF9mY19pbmNvbWluZ19wbG9naShmc2ZfcmVxKTsKIAllbHNlIGlmIChlbHNfdHlwZSA9PSBMU19MT0dPKQpAQCAtMjgxLDE5ICsyNzEsMTggQEAKIAlwb3J0LT5kX2lkID0gY3RfaXVfcmVzcC0+ZF9pZCAmIFpGQ1BfRElEX01BU0s7CiB9CiAKLWludCBzdGF0aWMgemZjcF9mY19uc19naWRfcG5fcmVxdWVzdChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uLAorc3RhdGljIGludCB6ZmNwX2ZjX25zX2dpZF9wbl9yZXF1ZXN0KHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQsCiAJCQkJICAgICBzdHJ1Y3QgemZjcF9naWRfcG5fZGF0YSAqZ2lkX3BuKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX2ZjX25zX2hhbmRsZXJfZGF0YSBjb21wbF9yZWM7CiAJaW50IHJldDsKIAogCS8qIHNldHVwIHBhcmFtZXRlcnMgZm9yIHNlbmQgZ2VuZXJpYyBjb21tYW5kICovCi0JZ2lkX3BuLT5wb3J0ID0gZXJwX2FjdGlvbi0+cG9ydDsKKwlnaWRfcG4tPnBvcnQgPSBwb3J0OwogCWdpZF9wbi0+Y3Qud2thX3BvcnQgPSAmYWRhcHRlci0+Z3MtPmRzOwogCWdpZF9wbi0+Y3QuaGFuZGxlciA9IHpmY3BfZmNfbnNfaGFuZGxlcjsKIAlnaWRfcG4tPmN0LmhhbmRsZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmY29tcGxfcmVjOwotCWdpZF9wbi0+Y3QudGltZW91dCA9IFpGQ1BfTlNfR0lEX1BOX1RJTUVPVVQ7CiAJZ2lkX3BuLT5jdC5yZXEgPSAmZ2lkX3BuLT5yZXE7CiAJZ2lkX3BuLT5jdC5yZXNwID0gJmdpZF9wbi0+cmVzcDsKIAlzZ19pbml0X29uZSgmZ2lkX3BuLT5yZXEsICZnaWRfcG4tPmN0X2l1X3JlcSwKQEAgLTMwOCwxMyArMjk3LDEyIEBACiAJZ2lkX3BuLT5jdF9pdV9yZXEuaGVhZGVyLm9wdGlvbnMgPSBaRkNQX0NUX1NZTkNIUk9OT1VTOwogCWdpZF9wbi0+Y3RfaXVfcmVxLmhlYWRlci5jbWRfcnNwX2NvZGUgPSBaRkNQX0NUX0dJRF9QTjsKIAlnaWRfcG4tPmN0X2l1X3JlcS5oZWFkZXIubWF4X3Jlc19zaXplID0gWkZDUF9DVF9TSVpFX09ORV9QQUdFIC8gNDsKLQlnaWRfcG4tPmN0X2l1X3JlcS53d3BuID0gZXJwX2FjdGlvbi0+cG9ydC0+d3dwbjsKKwlnaWRfcG4tPmN0X2l1X3JlcS53d3BuID0gcG9ydC0+d3dwbjsKIAogCWluaXRfY29tcGxldGlvbigmY29tcGxfcmVjLmRvbmUpOwogCWNvbXBsX3JlYy5oYW5kbGVyID0gemZjcF9mY19uc19naWRfcG5fZXZhbDsKIAljb21wbF9yZWMuaGFuZGxlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGdpZF9wbjsKLQlyZXQgPSB6ZmNwX2ZzZl9zZW5kX2N0KCZnaWRfcG4tPmN0LCBhZGFwdGVyLT5wb29sLmZzZl9yZXFfZXJwLAotCQkJICAgICAgIGVycF9hY3Rpb24pOworCXJldCA9IHpmY3BfZnNmX3NlbmRfY3QoJmdpZF9wbi0+Y3QsIGFkYXB0ZXItPnBvb2wuZ2lkX3BuX3JlcSk7CiAJaWYgKCFyZXQpCiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsX3JlYy5kb25lKTsKIAlyZXR1cm4gcmV0OwpAQCAtMzIyLDMzICszMTAsNTYgQEAKIAogLyoqCiAgKiB6ZmNwX2ZjX25zX2dpZF9wbl9yZXF1ZXN0IC0gaW5pdGlhdGUgR0lEX1BOIG5hbWVzZXJ2ZXIgcmVxdWVzdAotICogQGVycF9hY3Rpb246IHBvaW50ZXIgdG8gemZjcF9lcnBfYWN0aW9uIHdoZXJlIEdJRF9QTiByZXF1ZXN0IGlzIG5lZWRlZAorICogQHBvcnQ6IHBvcnQgd2hlcmUgR0lEX1BOIHJlcXVlc3QgaXMgbmVlZGVkCiAgKiByZXR1cm46IC1FTk9NRU0gb24gZXJyb3IsIDAgb3RoZXJ3aXNlCiAgKi8KLWludCB6ZmNwX2ZjX25zX2dpZF9wbihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQorc3RhdGljIGludCB6ZmNwX2ZjX25zX2dpZF9wbihzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewogCWludCByZXQ7CiAJc3RydWN0IHpmY3BfZ2lkX3BuX2RhdGEgKmdpZF9wbjsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKIAotCWdpZF9wbiA9IG1lbXBvb2xfYWxsb2MoYWRhcHRlci0+cG9vbC5kYXRhX2dpZF9wbiwgR0ZQX0FUT01JQyk7CisJZ2lkX3BuID0gbWVtcG9vbF9hbGxvYyhhZGFwdGVyLT5wb29sLmdpZF9wbl9kYXRhLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWdpZF9wbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltZW1zZXQoZ2lkX3BuLCAwLCBzaXplb2YoKmdpZF9wbikpOwogCi0JcmV0ID0gemZjcF93a2FfcG9ydF9nZXQoJmFkYXB0ZXItPmdzLT5kcyk7CisJcmV0ID0gemZjcF9mY193a2FfcG9ydF9nZXQoJmFkYXB0ZXItPmdzLT5kcyk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSB6ZmNwX2ZjX25zX2dpZF9wbl9yZXF1ZXN0KGVycF9hY3Rpb24sIGdpZF9wbik7CisJcmV0ID0gemZjcF9mY19uc19naWRfcG5fcmVxdWVzdChwb3J0LCBnaWRfcG4pOwogCi0JemZjcF93a2FfcG9ydF9wdXQoJmFkYXB0ZXItPmdzLT5kcyk7CisJemZjcF9mY193a2FfcG9ydF9wdXQoJmFkYXB0ZXItPmdzLT5kcyk7CiBvdXQ6Ci0JbWVtcG9vbF9mcmVlKGdpZF9wbiwgYWRhcHRlci0+cG9vbC5kYXRhX2dpZF9wbik7CisJbWVtcG9vbF9mcmVlKGdpZF9wbiwgYWRhcHRlci0+cG9vbC5naWRfcG5fZGF0YSk7CiAJcmV0dXJuIHJldDsKIH0KIAordm9pZCB6ZmNwX2ZjX3BvcnRfZGlkX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZmNwX3BvcnQsCisJCQkJCSAgICAgIGdpZF9wbl93b3JrKTsKKworCXJldCA9IHpmY3BfZmNfbnNfZ2lkX3BuKHBvcnQpOworCWlmIChyZXQpIHsKKwkJLyogY291bGQgbm90IGlzc3VlIGdpZF9wbiBmb3Igc29tZSByZWFzb24gKi8KKwkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4ocG9ydC0+YWRhcHRlciwgMCwgImZjZ3BuXzEiLCBOVUxMKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFwb3J0LT5kX2lkKSB7CisJCXpmY3BfZXJwX3BvcnRfZmFpbGVkKHBvcnQsICJmY2dwbl8yIiwgTlVMTCk7CisJCWdvdG8gb3V0OworCX0KKworCXpmY3BfZXJwX3BvcnRfcmVvcGVuKHBvcnQsIDAsICJmY2dwbl8zIiwgTlVMTCk7CitvdXQ6CisJemZjcF9wb3J0X3B1dChwb3J0KTsKK30KKwogLyoqCiAgKiB6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlIC0gZXZhbHVhdGUgUExPR0kgcGxheWxvYWQKICAqIEBwb3J0OiB6ZmNwX3BvcnQgc3RydWN0dXJlCkBAIC00MDQsNiArNDE1LDcgQEAKIAkvKiBwb3J0IGlzIGdvb2QsIHVuYmxvY2sgcnBvcnQgd2l0aG91dCBnb2luZyB0aHJvdWdoIGVycCAqLwogCXpmY3Bfc2NzaV9zY2hlZHVsZV9ycG9ydF9yZWdpc3Rlcihwb3J0KTsKICBvdXQ6CisJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfUE9SVF9MSU5LX1RFU1QsICZwb3J0LT5zdGF0dXMpOwogCXpmY3BfcG9ydF9wdXQocG9ydCk7CiAJa2ZyZWUoYWRpc2MpOwogfQpAQCAtNDUwLDI4ICs0NjIsMzYgQEAKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfREVMOwogCXpmY3Bfc2NzaV9ycG9ydF93b3JrKCZwb3J0LT5ycG9ydF93b3JrKTsKIAorCS8qIG9ubHkgaXNzdWUgb25lIHRlc3QgY29tbWFuZCBhdCBvbmUgdGltZSBwZXIgcG9ydCAqLworCWlmIChhdG9taWNfcmVhZCgmcG9ydC0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX1BPUlRfTElOS19URVNUKQorCQlnb3RvIG91dDsKKworCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19QT1JUX0xJTktfVEVTVCwgJnBvcnQtPnN0YXR1cyk7CisKIAlyZXR2YWwgPSB6ZmNwX2ZjX2FkaXNjKHBvcnQpOwogCWlmIChyZXR2YWwgPT0gMCkKIAkJcmV0dXJuOwogCiAJLyogc2VuZCBvZiBBRElTQyB3YXMgbm90IHBvc3NpYmxlICovCisJYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfUE9SVF9MSU5LX1RFU1QsICZwb3J0LT5zdGF0dXMpOwogCXpmY3BfZXJwX3BvcnRfZm9yY2VkX3Jlb3Blbihwb3J0LCAwLCAiZmNsdHdrMSIsIE5VTEwpOwogCitvdXQ6CiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIH0KIAogLyoqCi0gKiB6ZmNwX3Rlc3RfbGluayAtIGxpZ2h0d2VpZ2h0IGxpbmsgdGVzdCBwcm9jZWR1cmUKKyAqIHpmY3BfZmNfdGVzdF9saW5rIC0gbGlnaHR3ZWlnaHQgbGluayB0ZXN0IHByb2NlZHVyZQogICogQHBvcnQ6IHBvcnQgdG8gYmUgdGVzdGVkCiAgKgogICogVGVzdCBzdGF0dXMgb2YgYSBsaW5rIHRvIGEgcmVtb3RlIHBvcnQgdXNpbmcgdGhlIEVMUyBjb21tYW5kIEFESVNDLgogICogSWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIHJlbW90ZSBwb3J0LCBlcnJvciByZWNvdmVyeSBzdGVwcwogICogd2lsbCBiZSB0cmlnZ2VyZWQuCiAgKi8KLXZvaWQgemZjcF90ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3ZvaWQgemZjcF9mY190ZXN0X2xpbmsoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKIHsKIAl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwotCWlmICghcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJnBvcnQtPnRlc3RfbGlua193b3JrKSkKKwlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPnRlc3RfbGlua193b3JrKSkKIAkJemZjcF9wb3J0X3B1dChwb3J0KTsKIH0KIApAQCAtNDc5LDcgKzQ5OSw3IEBACiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9ICZncG5fZnQtPnNnX3JlcTsKIAotCWtmcmVlKHNnX3ZpcnQoc2cpKTsgLyogZnJlZSByZXF1ZXN0IGJ1ZmZlciAqLworCWttZW1fY2FjaGVfZnJlZSh6ZmNwX2RhdGEuZ3BuX2Z0X2NhY2hlLCBzZ192aXJ0KHNnKSk7CiAJemZjcF9zZ19mcmVlX3RhYmxlKGdwbl9mdC0+c2dfcmVzcCwgYnVmX251bSk7CiAKIAlrZnJlZShncG5fZnQpOwpAQCAtNDk0LDcgKzUxNCw3IEBACiAJaWYgKCFncG5fZnQpCiAJCXJldHVybiBOVUxMOwogCi0JcmVxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN0X2l1X2dwbl9mdF9yZXEpLCBHRlBfS0VSTkVMKTsKKwlyZXEgPSBrbWVtX2NhY2hlX2FsbG9jKHpmY3BfZGF0YS5ncG5fZnRfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghcmVxKSB7CiAJCWtmcmVlKGdwbl9mdCk7CiAJCWdwbl9mdCA9IE5VTEw7CkBAIC01MTEsOSArNTMxLDggQEAKIH0KIAogCi1zdGF0aWMgaW50IHpmY3Bfc2Nhbl9pc3N1ZV9ncG5fZnQoc3RydWN0IHpmY3BfZ3BuX2Z0ICpncG5fZnQsCi0JCQkJICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgaW50IG1heF9ieXRlcykKK3N0YXRpYyBpbnQgemZjcF9mY19zZW5kX2dwbl9mdChzdHJ1Y3QgemZjcF9ncG5fZnQgKmdwbl9mdCwKKwkJCSAgICAgICBzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgbWF4X2J5dGVzKQogewogCXN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0ID0gJmdwbl9mdC0+Y3Q7CiAJc3RydWN0IGN0X2l1X2dwbl9mdF9yZXEgKnJlcSA9IHNnX3ZpcnQoJmdwbl9mdC0+c2dfcmVxKTsKQEAgLTUzNiwxOSArNTU1LDE4IEBACiAJY3QtPndrYV9wb3J0ID0gJmFkYXB0ZXItPmdzLT5kczsKIAljdC0+aGFuZGxlciA9IHpmY3BfZmNfbnNfaGFuZGxlcjsKIAljdC0+aGFuZGxlcl9kYXRhID0gKHVuc2lnbmVkIGxvbmcpJmNvbXBsX3JlYzsKLQljdC0+dGltZW91dCA9IDEwOwogCWN0LT5yZXEgPSAmZ3BuX2Z0LT5zZ19yZXE7CiAJY3QtPnJlc3AgPSBncG5fZnQtPnNnX3Jlc3A7CiAKIAlpbml0X2NvbXBsZXRpb24oJmNvbXBsX3JlYy5kb25lKTsKIAljb21wbF9yZWMuaGFuZGxlciA9IE5VTEw7Ci0JcmV0ID0gemZjcF9mc2Zfc2VuZF9jdChjdCwgTlVMTCwgTlVMTCk7CisJcmV0ID0gemZjcF9mc2Zfc2VuZF9jdChjdCwgTlVMTCk7CiAJaWYgKCFyZXQpCiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsX3JlYy5kb25lKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3ZhbGlkYXRlX3BvcnQoc3RydWN0IHpmY3BfcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIHpmY3BfZmNfdmFsaWRhdGVfcG9ydChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOwogCkBAIC01NjgsNyArNTg2LDcgQEAKIAl6ZmNwX3BvcnRfZGVxdWV1ZShwb3J0KTsKIH0KIAotc3RhdGljIGludCB6ZmNwX3NjYW5fZXZhbF9ncG5fZnQoc3RydWN0IHpmY3BfZ3BuX2Z0ICpncG5fZnQsIGludCBtYXhfZW50cmllcykKK3N0YXRpYyBpbnQgemZjcF9mY19ldmFsX2dwbl9mdChzdHJ1Y3QgemZjcF9ncG5fZnQgKmdwbl9mdCwgaW50IG1heF9lbnRyaWVzKQogewogCXN0cnVjdCB6ZmNwX3NlbmRfY3QgKmN0ID0gJmdwbl9mdC0+Y3Q7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGdwbl9mdC0+c2dfcmVzcDsKQEAgLTU5NSw3ICs2MTMsNyBAQAogCQlyZXR1cm4gLUUyQklHOwogCX0KIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAKIAkvKiBmaXJzdCBlbnRyeSBpcyB0aGUgaGVhZGVyICovCiAJZm9yICh4ID0gMTsgeCA8IG1heF9lbnRyaWVzICYmICFsYXN0OyB4KyspIHsKQEAgLTYyOCwxNiArNjQ2LDE2IEBACiAKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3J0LCB0bXAsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkKLQkJemZjcF92YWxpZGF0ZV9wb3J0KHBvcnQpOwotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCQl6ZmNwX2ZjX3ZhbGlkYXRlX3BvcnQocG9ydCk7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHpmY3Bfc2Nhbl9wb3J0cyAtIHNjYW4gcmVtb3RlIHBvcnRzIGFuZCBhdHRhY2ggbmV3IHBvcnRzCisgKiB6ZmNwX2ZjX3NjYW5fcG9ydHMgLSBzY2FuIHJlbW90ZSBwb3J0cyBhbmQgYXR0YWNoIG5ldyBwb3J0cwogICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgogICovCi1pbnQgemZjcF9zY2FuX3BvcnRzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCitpbnQgemZjcF9mY19zY2FuX3BvcnRzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IHJldCwgaTsKIAlzdHJ1Y3QgemZjcF9ncG5fZnQgKmdwbl9mdDsKQEAgLTY1Miw3ICs2NzAsNyBAQAogCSAgICBmY19ob3N0X3BvcnRfdHlwZShhZGFwdGVyLT5zY3NpX2hvc3QpICE9IEZDX1BPUlRUWVBFX05QSVYpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gemZjcF93a2FfcG9ydF9nZXQoJmFkYXB0ZXItPmdzLT5kcyk7CisJcmV0ID0gemZjcF9mY193a2FfcG9ydF9nZXQoJmFkYXB0ZXItPmdzLT5kcyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNjYzLDkgKzY4MSw5IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlyZXQgPSB6ZmNwX3NjYW5faXNzdWVfZ3BuX2Z0KGdwbl9mdCwgYWRhcHRlciwgbWF4X2J5dGVzKTsKKwkJcmV0ID0gemZjcF9mY19zZW5kX2dwbl9mdChncG5fZnQsIGFkYXB0ZXIsIG1heF9ieXRlcyk7CiAJCWlmICghcmV0KSB7Ci0JCQlyZXQgPSB6ZmNwX3NjYW5fZXZhbF9ncG5fZnQoZ3BuX2Z0LCBtYXhfZW50cmllcyk7CisJCQlyZXQgPSB6ZmNwX2ZjX2V2YWxfZ3BuX2Z0KGdwbl9mdCwgbWF4X2VudHJpZXMpOwogCQkJaWYgKHJldCA9PSAtRUFHQUlOKQogCQkJCXNzbGVlcCgxKTsKIAkJCWVsc2UKQEAgLTY3NCwxNCArNjkyLDE0IEBACiAJfQogCXpmY3BfZnJlZV9zZ19lbnYoZ3BuX2Z0LCBidWZfbnVtKTsKIG91dDoKLQl6ZmNwX3drYV9wb3J0X3B1dCgmYWRhcHRlci0+Z3MtPmRzKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X3B1dCgmYWRhcHRlci0+Z3MtPmRzKTsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXZvaWQgX3pmY3Bfc2Nhbl9wb3J0c19sYXRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit2b2lkIF96ZmNwX2ZjX3NjYW5fcG9ydHNfbGF0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXpmY3Bfc2Nhbl9wb3J0cyhjb250YWluZXJfb2Yod29yaywgc3RydWN0IHpmY3BfYWRhcHRlciwgc2Nhbl93b3JrKSk7CisJemZjcF9mY19zY2FuX3BvcnRzKGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgemZjcF9hZGFwdGVyLCBzY2FuX3dvcmspKTsKIH0KIAogc3RydWN0IHpmY3BfZWxzX2ZjX2pvYiB7CkBAIC03MzIsNyArNzUwLDcgQEAKIAllbHNfZmNfam9iLT5lbHMuYWRhcHRlciA9IGFkYXB0ZXI7CiAJaWYgKHJwb3J0KSB7CiAJCXJlYWRfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci0JCXBvcnQgPSBycG9ydC0+ZGRfZGF0YTsKKwkJcG9ydCA9IHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCBycG9ydC0+cG9ydF9uYW1lKTsKIAkJaWYgKHBvcnQpCiAJCQllbHNfZmNfam9iLT5lbHMuZF9pZCA9IHBvcnQtPmRfaWQ7CiAJCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKQEAgLTc3MSw3ICs3ODksNyBAQAogCWpvYi0+c3RhdGVfZmxhZ3MgPSBGQ19SUVNUX1NUQVRFX0RPTkU7CiAJam9iLT5qb2JfZG9uZShqb2IpOwogCi0JemZjcF93a2FfcG9ydF9wdXQoY3RfZmNfam9iLT5jdC53a2FfcG9ydCk7CisJemZjcF9mY193a2FfcG9ydF9wdXQoY3RfZmNfam9iLT5jdC53a2FfcG9ydCk7CiAKIAlrZnJlZShjdF9mY19qb2IpOwogfQpAQCAtODE3LDcgKzgzNSw3IEBACiAJCXJldHVybiAtRUlOVkFMOyAvKiBubyBzdWNoIHNlcnZpY2UgKi8KIAl9CiAKLQlyZXQgPSB6ZmNwX3drYV9wb3J0X2dldChjdF9mY19qb2ItPmN0LndrYV9wb3J0KTsKKwlyZXQgPSB6ZmNwX2ZjX3drYV9wb3J0X2dldChjdF9mY19qb2ItPmN0LndrYV9wb3J0KTsKIAlpZiAocmV0KSB7CiAJCWtmcmVlKGN0X2ZjX2pvYik7CiAJCXJldHVybiByZXQ7CkBAIC04MjUsMTYgKzg0Myw0MCBAQAogCiAJY3RfZmNfam9iLT5jdC5yZXEgPSBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0OwogCWN0X2ZjX2pvYi0+Y3QucmVzcCA9IGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0OwotCWN0X2ZjX2pvYi0+Y3QudGltZW91dCA9IFpGQ1BfRlNGX1JFUVVFU1RfVElNRU9VVDsKIAljdF9mY19qb2ItPmN0LmhhbmRsZXIgPSB6ZmNwX2ZjX2dlbmVyaWNfY3RfaGFuZGxlcjsKIAljdF9mY19qb2ItPmN0LmhhbmRsZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBjdF9mY19qb2I7CiAJY3RfZmNfam9iLT5jdC5jb21wbGV0aW9uID0gTlVMTDsKIAljdF9mY19qb2ItPmpvYiA9IGpvYjsKIAotCXJldCA9IHpmY3BfZnNmX3NlbmRfY3QoJmN0X2ZjX2pvYi0+Y3QsIE5VTEwsIE5VTEwpOworCXJldCA9IHpmY3BfZnNmX3NlbmRfY3QoJmN0X2ZjX2pvYi0+Y3QsIE5VTEwpOwogCWlmIChyZXQpIHsKIAkJa2ZyZWUoY3RfZmNfam9iKTsKLQkJemZjcF93a2FfcG9ydF9wdXQoY3RfZmNfam9iLT5jdC53a2FfcG9ydCk7CisJCXpmY3BfZmNfd2thX3BvcnRfcHV0KGN0X2ZjX2pvYi0+Y3Qud2thX3BvcnQpOwogCX0KIAlyZXR1cm4gcmV0OwogfQorCitpbnQgemZjcF9mY19nc19zZXR1cChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCB6ZmNwX3drYV9wb3J0cyAqd2thX3BvcnRzOworCisJd2thX3BvcnRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpmY3Bfd2thX3BvcnRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3a2FfcG9ydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJYWRhcHRlci0+Z3MgPSB3a2FfcG9ydHM7CisJemZjcF9mY193a2FfcG9ydF9pbml0KCZ3a2FfcG9ydHMtPm1zLCBGQ19GSURfTUdNVF9TRVJWLCBhZGFwdGVyKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X2luaXQoJndrYV9wb3J0cy0+dHMsIEZDX0ZJRF9USU1FX1NFUlYsIGFkYXB0ZXIpOworCXpmY3BfZmNfd2thX3BvcnRfaW5pdCgmd2thX3BvcnRzLT5kcywgRkNfRklEX0RJUl9TRVJWLCBhZGFwdGVyKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X2luaXQoJndrYV9wb3J0cy0+YXMsIEZDX0ZJRF9BTElBU0VTLCBhZGFwdGVyKTsKKwl6ZmNwX2ZjX3drYV9wb3J0X2luaXQoJndrYV9wb3J0cy0+a3MsIEZDX0ZJRF9TRUNfS0VZLCBhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHpmY3BfZmNfZ3NfZGVzdHJveShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCWtmcmVlKGFkYXB0ZXItPmdzKTsKKwlhZGFwdGVyLT5ncyA9IE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDQ3Nzk1ZmIuLmYwOWM4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtMTEsOSArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CiAjaW5jbHVkZSAiemZjcF9leHQuaCIKLQotI2RlZmluZSBaRkNQX1JFUV9BVVRPX0NMRUFOVVAJMHgwMDAwMDAwMgotI2RlZmluZSBaRkNQX1JFUV9OT19RVENCCTB4MDAwMDAwMDgKKyNpbmNsdWRlICJ6ZmNwX2RiZi5oIgogCiBzdGF0aWMgdm9pZCB6ZmNwX2ZzZl9yZXF1ZXN0X3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CkBAIC0xMTEsNDMgKzEwOSwxNSBAQAogdm9pZCB6ZmNwX2ZzZl9yZXFfZnJlZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7CiAJaWYgKGxpa2VseShyZXEtPnBvb2wpKSB7CisJCWlmIChsaWtlbHkocmVxLT5xdGNiKSkKKwkJCW1lbXBvb2xfZnJlZShyZXEtPnF0Y2IsIHJlcS0+YWRhcHRlci0+cG9vbC5xdGNiX3Bvb2wpOwogCQltZW1wb29sX2ZyZWUocmVxLCByZXEtPnBvb2wpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHJlcS0+cXRjYikgewotCQlrbWVtX2NhY2hlX2ZyZWUoemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSwgcmVxKTsKLQkJcmV0dXJuOwotCX0KLX0KLQotLyoqCi0gKiB6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwgLSBkaXNtaXNzIGFsbCBmc2YgcmVxdWVzdHMKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKLSAqCi0gKiBOZXZlciBldmVyIGNhbGwgdGhpcyB3aXRob3V0IHNodXR0aW5nIGRvd24gdGhlIGFkYXB0ZXIgZmlyc3QuCi0gKiBPdGhlcndpc2UgdGhlIGFkYXB0ZXIgd291bGQgY29udGludWUgdXNpbmcgYW5kIGNvcnJ1cHRpbmcgczM5MCBzdG9yYWdlLgotICogSW5jbHVkZWQgQlVHX09OKCkgY2FsbCB0byBlbnN1cmUgdGhpcyBpcyBkb25lLgotICogRVJQIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBvbmx5IHVzZXIgb2YgdGhpcyBmdW5jdGlvbi4KLSAqLwotdm9pZCB6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlMSVNUX0hFQUQocmVtb3ZlX3F1ZXVlKTsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCUJVR19PTihhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBSRVFVRVNUX0xJU1RfU0laRTsgaSsrKQotCQlsaXN0X3NwbGljZV9pbml0KCZhZGFwdGVyLT5yZXFfbGlzdFtpXSwgJnJlbW92ZV9xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCAmcmVtb3ZlX3F1ZXVlLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZyZXEtPmxpc3QpOwotCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEOwotCQl6ZmNwX2ZzZl9yZXFfY29tcGxldGUocmVxKTsKLQl9CisJaWYgKGxpa2VseShyZXEtPnF0Y2IpKQorCQlrbWVtX2NhY2hlX2ZyZWUoemZjcF9kYXRhLnF0Y2JfY2FjaGUsIHJlcS0+cXRjYik7CisJa2ZyZWUocmVxKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mc2Zfc3RhdHVzX3JlYWRfcG9ydF9jbG9zZWQoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQpAQCAtMjc4LDEzICsyNDgsMTMgQEAKIAlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3JfYnVmID0gcmVxLT5kYXRhOwogCiAJaWYgKHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRCkgewotCQl6ZmNwX2hiYV9kYmZfZXZlbnRfZnNmX3Vuc29sKCJkaXNtIiwgYWRhcHRlciwgc3JfYnVmKTsKLQkJbWVtcG9vbF9mcmVlKHNyX2J1ZiwgYWRhcHRlci0+cG9vbC5kYXRhX3N0YXR1c19yZWFkKTsKKwkJemZjcF9kYmZfaGJhX2ZzZl91bnNvbCgiZGlzbSIsIGFkYXB0ZXItPmRiZiwgc3JfYnVmKTsKKwkJbWVtcG9vbF9mcmVlKHNyX2J1ZiwgYWRhcHRlci0+cG9vbC5zdGF0dXNfcmVhZF9kYXRhKTsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAkJcmV0dXJuOwogCX0KIAotCXpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfdW5zb2woInJlYWQiLCBhZGFwdGVyLCBzcl9idWYpOworCXpmY3BfZGJmX2hiYV9mc2ZfdW5zb2woInJlYWQiLCBhZGFwdGVyLT5kYmYsIHNyX2J1Zik7CiAKIAlzd2l0Y2ggKHNyX2J1Zi0+c3RhdHVzX3R5cGUpIHsKIAljYXNlIEZTRl9TVEFUVVNfUkVBRF9QT1JUX0NMT1NFRDoKQEAgLTI5OSw3ICsyNjksNyBAQAogCQlkZXZfd2FybigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAogCQkJICJUaGUgZXJyb3IgdGhyZXNob2xkIGZvciBjaGVja3N1bSBzdGF0aXN0aWNzICIKIAkJCSAiaGFzIGJlZW4gZXhjZWVkZWRcbiIpOwotCQl6ZmNwX2hiYV9kYmZfZXZlbnRfYmVycihhZGFwdGVyLCByZXEpOworCQl6ZmNwX2RiZl9oYmFfYmVycihhZGFwdGVyLT5kYmYsIHJlcSk7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NUQVRVU19SRUFEX0xJTktfRE9XTjoKIAkJemZjcF9mc2Zfc3RhdHVzX3JlYWRfbGlua19kb3duKHJlcSk7CkBAIC0zMzEsMTEgKzMwMSwxMSBAQAogCQlicmVhazsKIAl9CiAKLQltZW1wb29sX2ZyZWUoc3JfYnVmLCBhZGFwdGVyLT5wb29sLmRhdGFfc3RhdHVzX3JlYWQpOworCW1lbXBvb2xfZnJlZShzcl9idWYsIGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfZGF0YSk7CiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKIAogCWF0b21pY19pbmMoJmFkYXB0ZXItPnN0YXRfbWlzcyk7Ci0JcXVldWVfd29yayh6ZmNwX2RhdGEud29ya19xdWV1ZSwgJmFkYXB0ZXItPnN0YXRfd29yayk7CisJcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLCAmYWRhcHRlci0+c3RhdF93b3JrKTsKIH0KIAogc3RhdGljIHZvaWQgemZjcF9mc2ZfZnNmc3RhdHVzX3F1YWxfZXZhbChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCkBAIC0zODUsNyArMzU1LDcgQEAKIAlzdHJ1Y3QgZnNmX3F0Y2IgKnF0Y2IgPSByZXEtPnF0Y2I7CiAJdW5pb24gZnNmX3Byb3Rfc3RhdHVzX3F1YWwgKnBzcSA9ICZxdGNiLT5wcmVmaXgucHJvdF9zdGF0dXNfcXVhbDsKIAotCXpmY3BfaGJhX2RiZl9ldmVudF9mc2ZfcmVzcG9uc2UocmVxKTsKKwl6ZmNwX2RiZl9oYmFfZnNmX3Jlc3BvbnNlKHJlcSk7CiAKIAlpZiAocmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfRElTTUlTU0VEKSB7CiAJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUiB8CkBAIC00NTgsNyArNDI4LDcgQEAKICAqIGlzIGNhbGxlZCB0byBwcm9jZXNzIHRoZSBjb21wbGV0aW9uIHN0YXR1cyBhbmQgdHJpZ2dlciBmdXJ0aGVyCiAgKiBldmVudHMgcmVsYXRlZCB0byB0aGUgRlNGIHJlcXVlc3QuCiAgKi8KLXZvaWQgemZjcF9mc2ZfcmVxX2NvbXBsZXRlKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcV9jb21wbGV0ZShzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7CiAJaWYgKHVubGlrZWx5KHJlcS0+ZnNmX2NvbW1hbmQgPT0gRlNGX1FUQ0JfVU5TT0xJQ0lURURfU1RBVFVTKSkgewogCQl6ZmNwX2ZzZl9zdGF0dXNfcmVhZF9oYW5kbGVyKHJlcSk7CkBAIC00NzIsMjMgKzQ0Miw0MCBAQAogCiAJaWYgKHJlcS0+ZXJwX2FjdGlvbikKIAkJemZjcF9lcnBfbm90aWZ5KHJlcS0+ZXJwX2FjdGlvbiwgMCk7Ci0JcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRDsKIAogCWlmIChsaWtlbHkocmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUCkpCiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJZWxzZQotCS8qIG5vdGlmeSBpbml0aWF0b3Igd2FpdGluZyBmb3IgdGhlIHJlcXVlc3RzIGNvbXBsZXRpb24gKi8KLQkvKgotCSAqIEZJWE1FOiBSYWNlISBXZSBtdXN0IG5vdCBhY2Nlc3MgZnNmX3JlcSBoZXJlIGFzIGl0IG1pZ2h0IGhhdmUgYmVlbgotCSAqIGNsZWFuZWQgdXAgYWxyZWFkeSBkdWUgdG8gdGhlIHNldCBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVECi0JICogZmxhZy4gSXQncyBhbiBpbXByb2JhYmxlIGNhc2UuIEJ1dCwgd2UgaGF2ZSB0aGUgc2FtZSBwYXJhbm9pYSBmb3IKLQkgKiB0aGUgY2xlYW51cCBmbGFnIGFscmVhZHkuCi0JICogTWlnaHQgYmV0dGVyIGJlIGhhbmRsZWQgdXNpbmcgY29tcGxldGUoKT8KLQkgKiAoc2V0dGluZyB0aGUgZmxhZyBhbmQgZG9pbmcgd2FrZXVwIG91Z2h0IHRvIGJlIGF0b21pYwotCSAqICB3aXRoIHJlZ2FyZCB0byBjaGVja2luZyB0aGUgZmxhZyBhcyBsb25nIGFzIHdhaXRxdWV1ZSBpcwotCSAqICBwYXJ0IG9mIHRoZSB0byBiZSByZWxlYXNlZCBzdHJ1Y3R1cmUpCi0JICovCi0JCXdha2VfdXAoJnJlcS0+Y29tcGxldGlvbl93cSk7CisJCWNvbXBsZXRlKCZyZXEtPmNvbXBsZXRpb24pOworfQorCisvKioKKyAqIHpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbCAtIGRpc21pc3MgYWxsIGZzZiByZXF1ZXN0cworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgorICoKKyAqIE5ldmVyIGV2ZXIgY2FsbCB0aGlzIHdpdGhvdXQgc2h1dHRpbmcgZG93biB0aGUgYWRhcHRlciBmaXJzdC4KKyAqIE90aGVyd2lzZSB0aGUgYWRhcHRlciB3b3VsZCBjb250aW51ZSB1c2luZyBhbmQgY29ycnVwdGluZyBzMzkwIHN0b3JhZ2UuCisgKiBJbmNsdWRlZCBCVUdfT04oKSBjYWxsIHRvIGVuc3VyZSB0aGlzIGlzIGRvbmUuCisgKiBFUlAgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIG9ubHkgdXNlciBvZiB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIHpmY3BfZnNmX3JlcV9kaXNtaXNzX2FsbChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChyZW1vdmVfcXVldWUpOworCXVuc2lnbmVkIGludCBpOworCisJQlVHX09OKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVApOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCisJCWxpc3Rfc3BsaWNlX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0W2ldLCAmcmVtb3ZlX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZyZW1vdmVfcXVldWUsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnJlcS0+bGlzdCk7CisJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9ESVNNSVNTRUQ7CisJCXpmY3BfZnNmX3JlcV9jb21wbGV0ZShyZXEpOworCX0KIH0KIAogc3RhdGljIGludCB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZXZhbHVhdGUoc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxKQpAQCAtNjUwLDc5ICs2MzcsNzcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgemZjcF9mc2Zfc2JhbF9jaGVjayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCB6ZmNwX2ZzZl9zYmFsX2NoZWNrKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8pCiB7Ci0Jc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcmVxX3EgPSAmYWRhcHRlci0+cmVxX3E7CisJc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcmVxX3EgPSAmcWRpby0+cmVxX3E7CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJaWYgKGF0b21pY19yZWFkKCZyZXFfcS0+Y291bnQpKQogCQlyZXR1cm4gMTsKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHpmY3BfZnNmX3JlcV9zYmFsX2dldChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCB6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbykKIHsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcWRpby0+YWRhcHRlcjsKIAlsb25nIHJldDsKIAotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhZGFwdGVyLT5yZXF1ZXN0X3dxLAotCQkJICAgICAgIHpmY3BfZnNmX3NiYWxfY2hlY2soYWRhcHRlciksIDUgKiBIWik7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHFkaW8tPnJlcV9xX3dxLAorCQkJICAgICAgIHpmY3BfZnNmX3NiYWxfY2hlY2socWRpbyksIDUgKiBIWik7CiAJaWYgKHJldCA+IDApCiAJCXJldHVybiAwOwogCWlmICghcmV0KSB7Ci0JCWF0b21pY19pbmMoJmFkYXB0ZXItPnFkaW9fb3V0Yl9mdWxsKTsKKwkJYXRvbWljX2luYygmcWRpby0+cmVxX3FfZnVsbCk7CiAJCS8qIGFzc3VtZSBoYW5naW5nIG91dGJvdW5kIHF1ZXVlLCB0cnkgcXVldWUgcmVjb3ZlcnkgKi8KIAkJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCwgImZzcnNnXzEiLCBOVUxMKTsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9hbGxvY19ub3F0Y2IobWVtcG9vbF90ICpwb29sKQorc3RhdGljIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnpmY3BfZnNmX2FsbG9jKG1lbXBvb2xfdCAqcG9vbCkKIHsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7Ci0JcmVxID0gbWVtcG9vbF9hbGxvYyhwb29sLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXJlcSkKKworCWlmIChsaWtlbHkocG9vbCkpCisJCXJlcSA9IG1lbXBvb2xfYWxsb2MocG9vbCwgR0ZQX0FUT01JQyk7CisJZWxzZQorCQlyZXEgPSBrbWFsbG9jKHNpemVvZigqcmVxKSwgR0ZQX0FUT01JQyk7CisKKwlpZiAodW5saWtlbHkoIXJlcSkpCiAJCXJldHVybiBOVUxMOworCiAJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKIAlyZXEtPnBvb2wgPSBwb29sOwogCXJldHVybiByZXE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9hbGxvY19xdGNiKG1lbXBvb2xfdCAqcG9vbCkKK3N0YXRpYyBzdHJ1Y3QgZnNmX3F0Y2IgKnpmY3BfcXRjYl9hbGxvYyhtZW1wb29sX3QgKnBvb2wpCiB7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcV9xdGNiICpxdGNiOworCXN0cnVjdCBmc2ZfcXRjYiAqcXRjYjsKIAogCWlmIChsaWtlbHkocG9vbCkpCiAJCXF0Y2IgPSBtZW1wb29sX2FsbG9jKHBvb2wsIEdGUF9BVE9NSUMpOwogCWVsc2UKLQkJcXRjYiA9IGttZW1fY2FjaGVfYWxsb2MoemZjcF9kYXRhLmZzZl9yZXFfcXRjYl9jYWNoZSwKLQkJCQkJR0ZQX0FUT01JQyk7CisJCXF0Y2IgPSBrbWVtX2NhY2hlX2FsbG9jKHpmY3BfZGF0YS5xdGNiX2NhY2hlLCBHRlBfQVRPTUlDKTsKKwogCWlmICh1bmxpa2VseSghcXRjYikpCiAJCXJldHVybiBOVUxMOwogCiAJbWVtc2V0KHF0Y2IsIDAsIHNpemVvZigqcXRjYikpOwotCXF0Y2ItPmZzZl9yZXEucXRjYiA9ICZxdGNiLT5xdGNiOwotCXF0Y2ItPmZzZl9yZXEucG9vbCA9IHBvb2w7Ci0KLQlyZXR1cm4gJnF0Y2ItPmZzZl9yZXE7CisJcmV0dXJuIHF0Y2I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9yZXFfY3JlYXRlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCQl1MzIgZnNmX2NtZCwgaW50IHJlcV9mbGFncywKLQkJCQkJCW1lbXBvb2xfdCAqcG9vbCkKK3N0YXRpYyBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9yZXFfY3JlYXRlKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCisJCQkJCQl1MzIgZnNmX2NtZCwgbWVtcG9vbF90ICpwb29sKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKLQotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZhZGFwdGVyLT5yZXFfcTsKLQotCWlmIChyZXFfZmxhZ3MgJiBaRkNQX1JFUV9OT19RVENCKQotCQlyZXEgPSB6ZmNwX2ZzZl9hbGxvY19ub3F0Y2IocG9vbCk7Ci0JZWxzZQotCQlyZXEgPSB6ZmNwX2ZzZl9hbGxvY19xdGNiKHBvb2wpOworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xID0gJnFkaW8tPnJlcV9xOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxZGlvLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSA9IHpmY3BfZnNmX2FsbG9jKHBvb2wpOwogCiAJaWYgKHVubGlrZWx5KCFyZXEpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTczMiwyMiArNzE3LDMyIEBACiAKIAlJTklUX0xJU1RfSEVBRCgmcmVxLT5saXN0KTsKIAlpbml0X3RpbWVyKCZyZXEtPnRpbWVyKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZXEtPmNvbXBsZXRpb25fd3EpOworCWluaXRfY29tcGxldGlvbigmcmVxLT5jb21wbGV0aW9uKTsKIAogCXJlcS0+YWRhcHRlciA9IGFkYXB0ZXI7CiAJcmVxLT5mc2ZfY29tbWFuZCA9IGZzZl9jbWQ7CiAJcmVxLT5yZXFfaWQgPSBhZGFwdGVyLT5yZXFfbm87Ci0JcmVxLT5zYmFsX251bWJlciA9IDE7Ci0JcmVxLT5zYmFsX2ZpcnN0ID0gcmVxX3EtPmZpcnN0OwotCXJlcS0+c2JhbF9sYXN0ID0gcmVxX3EtPmZpcnN0OwotCXJlcS0+c2JhbGVfY3VyciA9IDE7CisJcmVxLT5xdWV1ZV9yZXEuc2JhbF9udW1iZXIgPSAxOworCXJlcS0+cXVldWVfcmVxLnNiYWxfZmlyc3QgPSByZXFfcS0+Zmlyc3Q7CisJcmVxLT5xdWV1ZV9yZXEuc2JhbF9sYXN0ID0gcmVxX3EtPmZpcnN0OworCXJlcS0+cXVldWVfcmVxLnNiYWxlX2N1cnIgPSAxOwogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHJlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CiAJc2JhbGVbMF0uYWRkciA9ICh2b2lkICopIHJlcS0+cmVxX2lkOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX0NPTU1BTkQ7CiAKLQlpZiAobGlrZWx5KHJlcS0+cXRjYikpIHsKLQkJcmVxLT5xdGNiLT5wcmVmaXgucmVxX3NlcV9ubyA9IHJlcS0+YWRhcHRlci0+ZnNmX3JlcV9zZXFfbm87CisJaWYgKGxpa2VseShmc2ZfY21kICE9IEZTRl9RVENCX1VOU09MSUNJVEVEX1NUQVRVUykpIHsKKwkJaWYgKGxpa2VseShwb29sKSkKKwkJCXJlcS0+cXRjYiA9IHpmY3BfcXRjYl9hbGxvYyhhZGFwdGVyLT5wb29sLnF0Y2JfcG9vbCk7CisJCWVsc2UKKwkJCXJlcS0+cXRjYiA9IHpmY3BfcXRjYl9hbGxvYyhOVUxMKTsKKworCQlpZiAodW5saWtlbHkoIXJlcS0+cXRjYikpIHsKKwkJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJfQorCisJCXJlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8gPSBhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKIAkJcmVxLT5xdGNiLT5wcmVmaXgucmVxX2lkID0gcmVxLT5yZXFfaWQ7CiAJCXJlcS0+cXRjYi0+cHJlZml4LnVscF9pbmZvID0gMjY7CiAJCXJlcS0+cXRjYi0+cHJlZml4LnF0Y2JfdHlwZSA9IGZzZl9xdGNiX3R5cGVbcmVxLT5mc2ZfY29tbWFuZF07CkBAIC03NjUsMTUgKzc2MCwxMyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAl9CiAKLQlpZiAobGlrZWx5KHJlcV9mbGFncyAmIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCkpCi0JCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCiAJcmV0dXJuIHJlcTsKIH0KIAogc3RhdGljIGludCB6ZmNwX2ZzZl9yZXFfc2VuZChzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHJlcS0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWRhcHRlci0+cWRpbzsKIAl1bnNpZ25lZCBsb25nCSAgICAgZmxhZ3M7CiAJaW50CQkgICAgIGlkeDsKIAlpbnQJCSAgICAgd2l0aF9xdGNiID0gKHJlcS0+cXRjYiAhPSBOVUxMKTsKQEAgLTc4NCw5ICs3NzcsOSBAQAogCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJmFkYXB0ZXItPnJlcV9saXN0W2lkeF0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAotCXJlcS0+cWRpb19vdXRiX3VzYWdlID0gYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcV9xLmNvdW50KTsKKwlyZXEtPnF1ZXVlX3JlcS5xZGlvX291dGJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmcWRpby0+cmVxX3EuY291bnQpOwogCXJlcS0+aXNzdWVkID0gZ2V0X2Nsb2NrKCk7Ci0JaWYgKHpmY3BfcWRpb19zZW5kKHJlcSkpIHsKKwlpZiAoemZjcF9xZGlvX3NlbmQocWRpbywgJnJlcS0+cXVldWVfcmVxKSkgewogCQlkZWxfdGltZXIoJnJlcS0+dGltZXIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOwogCQkvKiBsb29rdXAgcmVxdWVzdCBhZ2FpbiwgbGlzdCBtaWdodCBoYXZlIGNoYW5nZWQgKi8KQEAgLTgxMSwzOCArODA0LDM3IEBACiAgKiBAcmVxX2ZsYWdzOiByZXF1ZXN0IGZsYWdzCiAgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIEVSUk9SIG90aGVyd2lzZQogICovCi1pbnQgemZjcF9mc2Zfc3RhdHVzX3JlYWQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK2ludCB6ZmNwX2ZzZl9zdGF0dXNfcmVhZChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogeworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxZGlvLT5hZGFwdGVyOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlzdHJ1Y3QgZnNmX3N0YXR1c19yZWFkX2J1ZmZlciAqc3JfYnVmOwogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9VTlNPTElDSVRFRF9TVEFUVVMsCi0JCQkJICBaRkNQX1JFUV9OT19RVENCLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3N0YXR1c19yZWFkKTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX1VOU09MSUNJVEVEX1NUQVRVUywKKwkJCQkgIGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfcmVxKTsKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKLQlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1NUQVRVUzsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVsyXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7Ci0JcmVxLT5zYmFsZV9jdXJyID0gMjsKKwlyZXEtPnF1ZXVlX3JlcS5zYmFsZV9jdXJyID0gMjsKIAotCXNyX2J1ZiA9IG1lbXBvb2xfYWxsb2MoYWRhcHRlci0+cG9vbC5kYXRhX3N0YXR1c19yZWFkLCBHRlBfQVRPTUlDKTsKKwlzcl9idWYgPSBtZW1wb29sX2FsbG9jKGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfZGF0YSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFzcl9idWYpIHsKIAkJcmV0dmFsID0gLUVOT01FTTsKIAkJZ290byBmYWlsZWRfYnVmOwogCX0KIAltZW1zZXQoc3JfYnVmLCAwLCBzaXplb2YoKnNyX2J1ZikpOwogCXJlcS0+ZGF0YSA9IHNyX2J1ZjsKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHJlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlLT5hZGRyID0gKHZvaWQgKikgc3JfYnVmOwogCXNiYWxlLT5sZW5ndGggPSBzaXplb2YoKnNyX2J1Zik7CiAKQEAgLTg1MywxMiArODQ1LDEyIEBACiAJZ290byBvdXQ7CiAKIGZhaWxlZF9yZXFfc2VuZDoKLQltZW1wb29sX2ZyZWUoc3JfYnVmLCBhZGFwdGVyLT5wb29sLmRhdGFfc3RhdHVzX3JlYWQpOworCW1lbXBvb2xfZnJlZShzcl9idWYsIGFkYXB0ZXItPnBvb2wuc3RhdHVzX3JlYWRfZGF0YSk7CiBmYWlsZWRfYnVmOgogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7Ci0JemZjcF9oYmFfZGJmX2V2ZW50X2ZzZl91bnNvbCgiZmFpbCIsIGFkYXB0ZXIsIE5VTEwpOworCXpmY3BfZGJmX2hiYV9mc2ZfdW5zb2woImZhaWwiLCBhZGFwdGVyLT5kYmYsIE5VTEwpOwogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtOTAwLDcgKzg5Miw3IEBACiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlzd2l0Y2ggKGZzcS0+d29yZFswXSkgewogCQljYXNlIEZTRl9TUV9JTlZPS0VfTElOS19URVNUX1BST0NFRFVSRToKLQkJCXpmY3BfdGVzdF9saW5rKHVuaXQtPnBvcnQpOworCQkJemZjcF9mY190ZXN0X2xpbmsodW5pdC0+cG9ydCk7CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBGU0ZfU1FfVUxQX0RFUEVOREVOVF9FUlBfUkVRVUlSRUQ6CiAJCQlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfRVJST1I7CkBAIC05MjUsMTMgKzkxNywxMyBAQAogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEgPSBOVUxMOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSB1bml0LT5wb3J0LT5hZGFwdGVyLT5xZGlvOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9BQk9SVF9GQ1BfQ01ORCwKLQkJCQkgIDAsIGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9hYm9ydCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9BQk9SVF9GQ1BfQ01ORCwKKwkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuc2NzaV9hYm9ydCk7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJlcSA9IE5VTEw7CiAJCWdvdG8gb3V0OwpAQCAtOTQxLDcgKzkzMyw3IEBACiAJCSAgICAgICBaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VEKSkpCiAJCWdvdG8gb3V0X2Vycm9yX2ZyZWU7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC05NTksNyArOTUxLDcgQEAKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCXJlcSA9IE5VTEw7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmVxOwogfQogCkBAIC05NzYsNyArOTY4LDcgQEAKIAogCXN3aXRjaCAoaGVhZGVyLT5mc2Zfc3RhdHVzKSB7CiAgICAgICAgIGNhc2UgRlNGX0dPT0Q6Ci0JCXpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXNwb25zZShyZXEpOworCQl6ZmNwX2RiZl9zYW5fY3RfcmVzcG9uc2UocmVxKTsKIAkJc2VuZF9jdC0+c3RhdHVzID0gMDsKIAkJYnJlYWs7CiAgICAgICAgIGNhc2UgRlNGX1NFUlZJQ0VfQ0xBU1NfTk9UX1NVUFBPUlRFRDoKQEAgLTEwMzUsOCArMTAyNywxMCBAQAogCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3Jlc3AsCiAJCQkJICAgICAgIGludCBtYXhfc2JhbHMpCiB7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOwotCXUzMiBmZWF0ID0gcmVxLT5hZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSByZXEtPmFkYXB0ZXI7CisJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShhZGFwdGVyLT5xZGlvLAorCQkJCQkJCSAgICAgICAmcmVxLT5xdWV1ZV9yZXEpOworCXUzMiBmZWF0ID0gYWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlczsKIAlpbnQgYnl0ZXM7CiAKIAlpZiAoIShmZWF0ICYgRlNGX0ZFQVRVUkVfRUxTX0NUX0NIQUlORURfU0JBTFMpKSB7CkBAIC0xMDUzLDE4ICsxMDQ3LDI1IEBACiAJCXJldHVybiAwOwogCX0KIAotCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocmVxLCBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhhZGFwdGVyLT5xZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJCQkJCVNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwKIAkJCQkJc2dfcmVxLCBtYXhfc2JhbHMpOwogCWlmIChieXRlcyA8PSAwKQogCQlyZXR1cm4gLUVJTzsKIAlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlcV9idWZfbGVuZ3RoID0gYnl0ZXM7Ci0JcmVxLT5zYmFsZV9jdXJyID0gWkZDUF9MQVNUX1NCQUxFX1BFUl9TQkFMOworCXJlcS0+cXVldWVfcmVxLnNiYWxlX2N1cnIgPSBaRkNQX0xBU1RfU0JBTEVfUEVSX1NCQUw7CiAKLQlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHJlcSwgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELAorCWJ5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coYWRhcHRlci0+cWRpbywgJnJlcS0+cXVldWVfcmVxLAorCQkJCQlTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsCiAJCQkJCXNnX3Jlc3AsIG1heF9zYmFscyk7CiAJaWYgKGJ5dGVzIDw9IDApCiAJCXJldHVybiAtRUlPOworCisJLyogY29tbW9uIHNldHRpbmdzIGZvciBjdC9ncyBhbmQgZWxzIHJlcXVlc3RzICovCiAJcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5yZXNwX2J1Zl9sZW5ndGggPSBieXRlczsKKwlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnNlcnZpY2VfY2xhc3MgPSBGU0ZfQ0xBU1NfMzsKKwlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnRpbWVvdXQgPSAyICogUl9BX1RPVjsKKwl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsIDIgKiBSX0FfVE9WICsgMTApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDczLDI3ICsxMDc0LDI2IEBACiAgKiB6ZmNwX2ZzZl9zZW5kX2N0IC0gaW5pdGlhdGUgYSBHZW5lcmljIFNlcnZpY2UgcmVxdWVzdCAoRkMtR1MpCiAgKiBAY3Q6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3Bfc2VuZF9jdCB3aXRoIGRhdGEgZm9yIHJlcXVlc3QKICAqIEBwb29sOiBpZiBub24tbnVsbCB0aGlzIG1lbXBvb2wgaXMgdXNlZCB0byBhbGxvY2F0ZSBzdHJ1Y3QgemZjcF9mc2ZfcmVxCi0gKiBAZXJwX2FjdGlvbjogaWYgbm9uLW51bGwgdGhlIEdlbmVyaWMgU2VydmljZSByZXF1ZXN0IHNlbnQgd2l0aGluIEVSUAogICovCi1pbnQgemZjcF9mc2Zfc2VuZF9jdChzdHJ1Y3QgemZjcF9zZW5kX2N0ICpjdCwgbWVtcG9vbF90ICpwb29sLAotCQkgICAgIHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCitpbnQgemZjcF9mc2Zfc2VuZF9jdChzdHJ1Y3QgemZjcF9zZW5kX2N0ICpjdCwgbWVtcG9vbF90ICpwb29sKQogewogCXN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCA9IGN0LT53a2FfcG9ydDsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gd2thX3BvcnQtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IHdrYV9wb3J0LT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlpbnQgcmV0ID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9TRU5EX0dFTkVSSUMsCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsIHBvb2wpOworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfU0VORF9HRU5FUklDLCBwb29sKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXQgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAorCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwogCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2Vsc19zYmFscyhyZXEsIGN0LT5yZXEsIGN0LT5yZXNwLAogCQkJCQkgIEZTRl9NQVhfU0JBTFNfUEVSX1JFUSk7CiAJaWYgKHJldCkKQEAgLTExMDEsMTggKzExMDEsOSBAQAogCiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2Zfc2VuZF9jdF9oYW5kbGVyOwogCXJlcS0+cXRjYi0+aGVhZGVyLnBvcnRfaGFuZGxlID0gd2thX3BvcnQtPmhhbmRsZTsKLQlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnNlcnZpY2VfY2xhc3MgPSBGU0ZfQ0xBU1NfMzsKLQlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnRpbWVvdXQgPSBjdC0+dGltZW91dDsKIAlyZXEtPmRhdGEgPSBjdDsKIAotCXpmY3Bfc2FuX2RiZl9ldmVudF9jdF9yZXF1ZXN0KHJlcSk7Ci0KLQlpZiAoZXJwX2FjdGlvbikgewotCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gcmVxOwotCQlyZXEtPmVycF9hY3Rpb24gPSBlcnBfYWN0aW9uOwotCQl6ZmNwX2ZzZl9zdGFydF9lcnBfdGltZXIocmVxKTsKLQl9IGVsc2UKLQkJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCBaRkNQX0ZTRl9SRVFVRVNUX1RJTUVPVVQpOworCXpmY3BfZGJmX3Nhbl9jdF9yZXF1ZXN0KHJlcSk7CiAKIAlyZXQgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwogCWlmIChyZXQpCkBAIC0xMTIyLDEwICsxMTEzLDggQEAKIAogZmFpbGVkX3NlbmQ6CiAJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKLQlpZiAoZXJwX2FjdGlvbikKLQkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTQyLDcgKzExMzEsNyBAQAogCiAJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXMpIHsKIAljYXNlIEZTRl9HT09EOgotCQl6ZmNwX3Nhbl9kYmZfZXZlbnRfZWxzX3Jlc3BvbnNlKHJlcSk7CisJCXpmY3BfZGJmX3Nhbl9lbHNfcmVzcG9uc2UocmVxKTsKIAkJc2VuZF9lbHMtPnN0YXR1cyA9IDA7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1NFUlZJQ0VfQ0xBU1NfTk9UX1NVUFBPUlRFRDoKQEAgLTExNTIsNyArMTE0MSw3IEBACiAJCXN3aXRjaCAoaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSl7CiAJCWNhc2UgRlNGX1NRX0lOVk9LRV9MSU5LX1RFU1RfUFJPQ0VEVVJFOgogCQkJaWYgKHBvcnQgJiYgKHNlbmRfZWxzLT5sc19jb2RlICE9IFpGQ1BfTFNfQURJU0MpKQotCQkJCXpmY3BfdGVzdF9saW5rKHBvcnQpOworCQkJCXpmY3BfZmNfdGVzdF9saW5rKHBvcnQpOwogCQkJLypmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBGU0ZfU1FfVUxQX0RFUEVOREVOVF9FUlBfUkVRVUlSRUQ6CiAJCWNhc2UgRlNGX1NRX1JFVFJZX0lGX1BPU1NJQkxFOgpAQCAtMTE4OCwzNSArMTE3NywzMiBAQAogaW50IHpmY3BfZnNmX3NlbmRfZWxzKHN0cnVjdCB6ZmNwX3NlbmRfZWxzICplbHMpCiB7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlbHMtPmFkYXB0ZXI7Ci0Jc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9zdXBwb3J0ICpib3R0b207CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGVscy0+YWRhcHRlci0+cWRpbzsKIAlpbnQgcmV0ID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfU0VORF9FTFMsCi0JCQkJICBaRkNQX1JFUV9BVVRPX0NMRUFOVVAsIE5VTEwpOworCisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9TRU5EX0VMUywgTlVMTCk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0ID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKIAlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHNfc2JhbHMocmVxLCBlbHMtPnJlcSwgZWxzLT5yZXNwLCAyKTsKIAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbGVkX3NlbmQ7CiAKLQlib3R0b20gPSAmcmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydDsKKwlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LmRfaWQgPSBlbHMtPmRfaWQ7CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2Zfc2VuZF9lbHNfaGFuZGxlcjsKLQlib3R0b20tPmRfaWQgPSBlbHMtPmRfaWQ7Ci0JYm90dG9tLT5zZXJ2aWNlX2NsYXNzID0gRlNGX0NMQVNTXzM7Ci0JYm90dG9tLT50aW1lb3V0ID0gMiAqIFJfQV9UT1Y7CiAJcmVxLT5kYXRhID0gZWxzOwogCi0JemZjcF9zYW5fZGJmX2V2ZW50X2Vsc19yZXF1ZXN0KHJlcSk7CisJemZjcF9kYmZfc2FuX2Vsc19yZXF1ZXN0KHJlcSk7CiAKLQl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsIFpGQ1BfRlNGX1JFUVVFU1RfVElNRU9VVCk7CiAJcmV0ID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9zZW5kOwpAQCAtMTIyNiw3ICsxMjEyLDcgQEAKIGZhaWxlZF9zZW5kOgogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjM0LDIyICsxMjIwLDIzIEBACiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gZXJwX2FjdGlvbi0+YWRhcHRlci0+cWRpbzsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwKLQkJCQkgIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBLAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX0NPTkZJR19EQVRBLAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTEyNjksMjkgKzEyNTYsMjkgQEAKIAkJZXJwX2FjdGlvbi0+ZnNmX3JlcSA9IE5VTEw7CiAJfQogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX3N5bmMoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKK2ludCB6ZmNwX2ZzZl9leGNoYW5nZV9jb25maWdfZGF0YV9zeW5jKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCiAJCQkJICAgICAgIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fY29uZmlnICpkYXRhKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEgPSBOVUxMOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQSwKLQkJCQkgIDAsIE5VTEwpOworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsIE5VTEwpOworCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfZXhjaGFuZ2VfY29uZmlnX2RhdGFfaGFuZGxlcjsKQEAgLTEzMDcsMTYgKzEyOTQsMTUgQEAKIAogCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgWkZDUF9GU0ZfUkVRVUVTVF9USU1FT1VUKTsKIAlyZXR2YWwgPSB6ZmNwX2ZzZl9yZXFfc2VuZChyZXEpOwotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAJaWYgKCFyZXR2YWwpCi0JCXdhaXRfZXZlbnQocmVxLT5jb21wbGV0aW9uX3dxLAotCQkJICAgcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmcmVxLT5jb21wbGV0aW9uKTsKIAogCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiAJcmV0dXJuIHJldHZhbDsKIAogb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTEzMjcsMjYgKzEzMTMsMjggQEAKICAqLwogaW50IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogeworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBlcnBfYWN0aW9uLT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAJaW50IHJldHZhbCA9IC1FSU87CiAKLQlpZiAoIShhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfSEJBQVBJX01BTkFHRU1FTlQpKQorCWlmICghKHFkaW8tPmFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9IQkFBUElfTUFOQUdFTUVOVCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwKKwkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xMzYxLDMyICsxMzQ5LDMyIEBACiAJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKIC8qKgogICogemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMgLSByZXF1ZXN0IGluZm9ybWF0aW9uIGFib3V0IGxvY2FsIHBvcnQKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKKyAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KICAqIEBkYXRhOiBwb2ludGVyIHRvIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydAogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBlcnJvciBvdGhlcndpc2UKICAqLwotaW50IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCitpbnQgemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX3N5bmMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKIAkJCQkgICAgIHN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fcG9ydCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxID0gTlVMTDsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCWlmICghKGFkYXB0ZXItPmFkYXB0ZXJfZmVhdHVyZXMgJiBGU0ZfRkVBVFVSRV9IQkFBUElfTUFOQUdFTUVOVCkpCisJaWYgKCEocWRpby0+YWRhcHRlci0+YWRhcHRlcl9mZWF0dXJlcyAmIEZTRl9GRUFUVVJFX0hCQUFQSV9NQU5BR0VNRU5UKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9FWENIQU5HRV9QT1JUX0RBVEEsIDAsCi0JCQkJICBOVUxMKTsKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0VYQ0hBTkdFX1BPUlRfREFUQSwgTlVMTCk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMzk1LDI0ICsxMzgzLDI0IEBACiAJaWYgKGRhdGEpCiAJCXJlcS0+ZGF0YSA9IGRhdGE7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCiAJcmVxLT5oYW5kbGVyID0gemZjcF9mc2ZfZXhjaGFuZ2VfcG9ydF9kYXRhX2hhbmRsZXI7CiAJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCBaRkNQX0ZTRl9SRVFVRVNUX1RJTUVPVVQpOwogCXJldHZhbCA9IHpmY3BfZnNmX3JlcV9zZW5kKHJlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAogCWlmICghcmV0dmFsKQotCQl3YWl0X2V2ZW50KHJlcS0+Y29tcGxldGlvbl93cSwKLQkJCSAgIHJlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJlcS0+Y29tcGxldGlvbik7CisKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCiAJcmV0dXJuIHJldHZhbDsKIAogb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE0OTgsMjUgKzE0ODYsMjUgQEAKIGludCB6ZmNwX2ZzZl9vcGVuX3BvcnQoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBlcnBfYWN0aW9uLT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLAotCQkJCSAgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElELAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQsCisJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOworCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHJlcSk7CisJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSk7CiAgICAgICAgIHNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKICAgICAgICAgc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNTM1LDcgKzE1MjMsNyBAQAogCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE1NjksMjMgKzE1NTcsMjQgQEAKIGludCB6ZmNwX2ZzZl9jbG9zZV9wb3J0KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBlcnBfYWN0aW9uLT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9DTE9TRV9QT1JULAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9QT1JULAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTE2MDIsNyArMTU5MSw3IEBACiAJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE2NDUsMjQgKzE2MzQsMjQgQEAKIGludCB6ZmNwX2ZzZl9vcGVuX3drYV9wb3J0KHN0cnVjdCB6ZmNwX3drYV9wb3J0ICp3a2FfcG9ydCkKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHdrYV9wb3J0LT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSB3a2FfcG9ydC0+YWRhcHRlci0+cWRpbzsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAJaW50IHJldHZhbCA9IC1FSU87CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dDsKIAotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwKLQkJCQkgIEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCwKLQkJCQkgIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCwKLQkJCQkgIGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9lcnApOworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfT1BFTl9QT1JUX1dJVEhfRElELAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmICh1bmxpa2VseShJU19FUlIocmVxKSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNjc1LDcgKzE2NjQsNyBAQAogCWlmIChyZXR2YWwpCiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xNzAwLDIzICsxNjg5LDI0IEBACiBpbnQgemZjcF9mc2ZfY2xvc2Vfd2thX3BvcnQoc3RydWN0IHpmY3Bfd2thX3BvcnQgKndrYV9wb3J0KQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gd2thX3BvcnQtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IHdrYV9wb3J0LT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9DTE9TRV9QT1JULAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9DTE9TRV9QT1JULAorCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKKwogCWlmICh1bmxpa2VseShJU19FUlIocmVxKSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xNzI5LDcgKzE3MTksNyBAQAogCWlmIChyZXR2YWwpCiAJCXpmY3BfZnNmX3JlcV9mcmVlKHJlcSk7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xNzkxLDIzICsxNzgxLDI0IEBACiBpbnQgemZjcF9mc2ZfY2xvc2VfcGh5c2ljYWxfcG9ydChzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gZXJwX2FjdGlvbi0+YWRhcHRlci0+cWRpbzsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXE7CiAJaW50IHJldHZhbCA9IC1FSU87CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dDsKIAotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVCwKLQkJCQkgIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCwKLQkJCQkgIGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9lcnApOworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVCwKKwkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0xODI0LDcgKzE4MTUsNyBAQAogCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKIAl9CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xODk1LDcgKzE4ODYsNyBAQAogCWNhc2UgRlNGX0FEQVBURVJfU1RBVFVTX0FWQUlMQUJMRToKIAkJc3dpdGNoIChoZWFkZXItPmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdKSB7CiAJCWNhc2UgRlNGX1NRX0lOVk9LRV9MSU5LX1RFU1RfUFJPQ0VEVVJFOgotCQkJemZjcF90ZXN0X2xpbmsodW5pdC0+cG9ydCk7CisJCQl6ZmNwX2ZjX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKIAkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKQEAgLTE5NjQsMjIgKzE5NTUsMjQgQEAKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IGFkYXB0ZXItPnFkaW87CiAJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxOwogCWludCByZXR2YWwgPSAtRUlPOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKLQlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KGFkYXB0ZXIpKQorCXNwaW5fbG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CisJaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChxZGlvKSkKIAkJZ290byBvdXQ7CiAKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX09QRU5fTFVOLAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX0xVTiwKKwkJCQkgIGFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKICAgICAgICAgc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOwogICAgICAgICBzYmFsZVsxXS5mbGFncyB8PSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAKQEAgLTIwMDAsNyArMTk5Myw3IEBACiAJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCX0KIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIwMjgsNyArMjAyMSw3IEBACiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlzd2l0Y2ggKHJlcS0+cXRjYi0+aGVhZGVyLmZzZl9zdGF0dXNfcXVhbC53b3JkWzBdKSB7CiAJCWNhc2UgRlNGX1NRX0lOVk9LRV9MSU5LX1RFU1RfUFJPQ0VEVVJFOgotCQkJemZjcF90ZXN0X2xpbmsodW5pdC0+cG9ydCk7CisJCQl6ZmNwX2ZjX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKIAkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQljYXNlIEZTRl9TUV9VTFBfREVQRU5ERU5UX0VSUF9SRVFVSVJFRDoKIAkJCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9FUlJPUjsKQEAgLTIwNDksMjIgKzIwNDIsMjQgQEAKIGludCB6ZmNwX2ZzZl9jbG9zZV91bml0KHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBlcnBfYWN0aW9uLT5hZGFwdGVyOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBlcnBfYWN0aW9uLT5hZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlpbnQgcmV0dmFsID0gLUVJTzsKIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwotCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUoYWRhcHRlciwgRlNGX1FUQ0JfQ0xPU0VfTFVOLAotCQkJCSAgWkZDUF9SRVFfQVVUT19DTEVBTlVQLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX2VycCk7CisKKwlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX0xVTiwKKwkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CisKIAlpZiAoSVNfRVJSKHJlcSkpIHsKIAkJcmV0dmFsID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlyZXEtPnN0YXR1cyB8PSBaRkNQX1NUQVRVU19GU0ZSRVFfQ0xFQU5VUDsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CiAJc2JhbGVbMV0uZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCkBAIC0yMDgyLDcgKzIwNzcsNyBAQAogCQllcnBfYWN0aW9uLT5mc2ZfcmVxID0gTlVMTDsKIAl9CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMTQxLDggKzIxMzYsOCBAQAogCX0KIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SKQogCQl0cmFjZS5mbGFncyB8PSBaRkNQX0JMS19SRVFfRVJST1I7Ci0JdHJhY2UuaW5iX3VzYWdlID0gZnNmX3JlcS0+cWRpb19pbmJfdXNhZ2U7Ci0JdHJhY2Uub3V0Yl91c2FnZSA9IGZzZl9yZXEtPnFkaW9fb3V0Yl91c2FnZTsKKwl0cmFjZS5pbmJfdXNhZ2UgPSBmc2ZfcmVxLT5xdWV1ZV9yZXEucWRpb19pbmJfdXNhZ2U7CisJdHJhY2Uub3V0Yl91c2FnZSA9IGZzZl9yZXEtPnF1ZXVlX3JlcS5xZGlvX291dGJfdXNhZ2U7CiAKIAlibGtfYWRkX2RyaXZlcl9kYXRhKHJlcS0+cSwgcmVxLCAmdHJhY2UsIHNpemVvZih0cmFjZSkpOwogfQpAQCAtMjIxNSwxMSArMjIxMCwxMSBAQAogCX0KIHNraXBfZnNmc3RhdHVzOgogCWlmIChzY3BudC0+cmVzdWx0ICE9IDApCi0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KCJlcnJvIiwgMywgcmVxLT5hZGFwdGVyLCBzY3BudCwgcmVxKTsKKwkJemZjcF9kYmZfc2NzaV9yZXN1bHQoImVycm8iLCAzLCByZXEtPmFkYXB0ZXItPmRiZiwgc2NwbnQsIHJlcSk7CiAJZWxzZSBpZiAoc2NwbnQtPnJldHJpZXMgPiAwKQotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X3Jlc3VsdCgicmV0ciIsIDQsIHJlcS0+YWRhcHRlciwgc2NwbnQsIHJlcSk7CisJCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJyZXRyIiwgNCwgcmVxLT5hZGFwdGVyLT5kYmYsIHNjcG50LCByZXEpOwogCWVsc2UKLQkJemZjcF9zY3NpX2RiZl9ldmVudF9yZXN1bHQoIm5vcm0iLCA2LCByZXEtPmFkYXB0ZXIsIHNjcG50LCByZXEpOworCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgibm9ybSIsIDYsIHJlcS0+YWRhcHRlci0+ZGJmLCBzY3BudCwgcmVxKTsKIAogCXNjcG50LT5ob3N0X3NjcmliYmxlID0gTlVMTDsKIAkoc2NwbnQtPnNjc2lfZG9uZSkgKHNjcG50KTsKQEAgLTIzMDksNyArMjMwNCw3IEBACiAJY2FzZSBGU0ZfQURBUFRFUl9TVEFUVVNfQVZBSUxBQkxFOgogCQlpZiAoaGVhZGVyLT5mc2Zfc3RhdHVzX3F1YWwud29yZFswXSA9PQogCQkgICAgRlNGX1NRX0lOVk9LRV9MSU5LX1RFU1RfUFJPQ0VEVVJFKQotCQkJemZjcF90ZXN0X2xpbmsodW5pdC0+cG9ydCk7CisJCQl6ZmNwX2ZjX3Rlc3RfbGluayh1bml0LT5wb3J0KTsKIAkJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0VSUk9SOwogCQlicmVhazsKIAl9CkBAIC0yMzUwLDI0ICsyMzQ1LDI3IEBACiAJdW5zaWduZWQgaW50IHNidHlwZSA9IFNCQUxfRkxBR1MwX1RZUEVfUkVBRDsKIAlpbnQgcmVhbF9ieXRlcywgcmV0dmFsID0gLUVJTzsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWRhcHRlci0+cWRpbzsKIAogCWlmICh1bmxpa2VseSghKGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpICYKIAkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXNwaW5fbG9jaygmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXFfcS5jb3VudCkgPD0gMCkgewotCQlhdG9taWNfaW5jKCZhZGFwdGVyLT5xZGlvX291dGJfZnVsbCk7CisJc3Bpbl9sb2NrKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KSA8PSAwKSB7CisJCWF0b21pY19pbmMoJnFkaW8tPnJlcV9xX2Z1bGwpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBGU0ZfUVRDQl9GQ1BfQ01ORCwKLQkJCQkgIFpGQ1BfUkVRX0FVVE9fQ0xFQU5VUCwKLQkJCQkgIGFkYXB0ZXItPnBvb2wuZnNmX3JlcV9zY3NpKTsKKworCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRkNQX0NNTkQsCisJCQkJICBhZGFwdGVyLT5wb29sLnNjc2lfcmVxKTsKKwogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CiAJCWdvdG8gb3V0OwogCX0KIAorCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwogCXpmY3BfdW5pdF9nZXQodW5pdCk7CiAJcmVxLT51bml0ID0gdW5pdDsKIAlyZXEtPmRhdGEgPSBzY3NpX2NtbmQ7CkBAIC0yNDE5LDExICsyNDE3LDExIEBACiAJcmVxLT5xdGNiLT5ib3R0b20uaW8uZmNwX2NtbmRfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBmY3BfY21uZF9pdSkgKwogCQlmY3BfY21uZF9pdS0+YWRkX2ZjcF9jZGJfbGVuZ3RoICsgc2l6ZW9mKHUzMik7CiAKLQlyZWFsX2J5dGVzID0gemZjcF9xZGlvX3NiYWxzX2Zyb21fc2cocmVxLCBzYnR5cGUsCisJcmVhbF9ieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHFkaW8sICZyZXEtPnF1ZXVlX3JlcSwgc2J0eXBlLAogCQkJCQkgICAgIHNjc2lfc2dsaXN0KHNjc2lfY21uZCksCiAJCQkJCSAgICAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAodW5saWtlbHkocmVhbF9ieXRlcyA8IDApKSB7Ci0JCWlmIChyZXEtPnNiYWxfbnVtYmVyID49IEZTRl9NQVhfU0JBTFNfUEVSX1JFUSkgeworCQlpZiAocmVxLT5xdWV1ZV9yZXEuc2JhbF9udW1iZXIgPj0gRlNGX01BWF9TQkFMU19QRVJfUkVRKSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCiAJCQkJIk92ZXJzaXplIGRhdGEgcGFja2FnZSwgdW5pdCAweCUwMTZMeCAiCiAJCQkJIm9uIHBvcnQgMHglMDE2THggY2xvc2VkXG4iLApAQCAtMjQ0OCw3ICsyNDQ2LDcgQEAKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCXNjc2lfY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yNDYzLDE3ICsyNDYxLDE5IEBACiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSA9IE5VTEw7CiAJc3RydWN0IGZjcF9jbW5kX2l1ICpmY3BfY21uZF9pdTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gdW5pdC0+cG9ydC0+YWRhcHRlci0+cWRpbzsKIAogCWlmICh1bmxpa2VseSghKGF0b21pY19yZWFkKCZ1bml0LT5zdGF0dXMpICYKIAkJICAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9VTkJMT0NLRUQpKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOwotCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQoYWRhcHRlcikpCisJc3Bpbl9sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKKwlpZiAoemZjcF9mc2ZfcmVxX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dDsKLQlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKGFkYXB0ZXIsIEZTRl9RVENCX0ZDUF9DTU5ELCAwLAotCQkJCSAgYWRhcHRlci0+cG9vbC5mc2ZfcmVxX3Njc2kpOworCisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9GQ1BfQ01ORCwKKwkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuc2NzaV9yZXEpOworCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJlcSA9IE5VTEw7CiAJCWdvdG8gb3V0OwpAQCAtMjQ4OSw3ICsyNDg5LDcgQEAKIAlyZXEtPnF0Y2ItPmJvdHRvbS5pby5mY3BfY21uZF9sZW5ndGggPSAJc2l6ZW9mKHN0cnVjdCBmY3BfY21uZF9pdSkgKwogCQkJCQkJc2l6ZW9mKHUzMik7CiAKLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgJnJlcS0+cXVldWVfcmVxKTsKIAlzYmFsZVswXS5mbGFncyB8PSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFOwogCXNiYWxlWzFdLmZsYWdzIHw9IFNCQUxfRkxBR1NfTEFTVF9FTlRSWTsKIApAQCAtMjUwNCw3ICsyNTA0LDcgQEAKIAl6ZmNwX2ZzZl9yZXFfZnJlZShyZXEpOwogCXJlcSA9IE5VTEw7CiBvdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnJlcV9xX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZxZGlvLT5yZXFfcV9sb2NrKTsKIAlyZXR1cm4gcmVxOwogfQogCkBAIC0yNTIyLDYgKzI1MjIsNyBAQAogCQkJCQkgICBzdHJ1Y3QgemZjcF9mc2ZfY2ZkYyAqZnNmX2NmZGMpCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOworCXN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8gPSBhZGFwdGVyLT5xZGlvOwogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSA9IE5VTEw7CiAJc3RydWN0IGZzZl9xdGNiX2JvdHRvbV9zdXBwb3J0ICpib3R0b207CiAJaW50IGRpcmVjdGlvbiwgcmV0dmFsID0gLUVJTywgYnl0ZXM7CkBAIC0yNTQwLDExICsyNTQxLDExIEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JaWYgKHpmY3BfZnNmX3JlcV9zYmFsX2dldChhZGFwdGVyKSkKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWlmICh6ZmNwX2ZzZl9yZXFfc2JhbF9nZXQocWRpbykpCiAJCWdvdG8gb3V0OwogCi0JcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShhZGFwdGVyLCBmc2ZfY2ZkYy0+Y29tbWFuZCwgMCwgTlVMTCk7CisJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBmc2ZfY2ZkYy0+Y29tbWFuZCwgTlVMTCk7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IC1FUEVSTTsKIAkJZ290byBvdXQ7CkBAIC0yNTUyLDE0ICsyNTUzLDE1IEBACiAKIAlyZXEtPmhhbmRsZXIgPSB6ZmNwX2ZzZl9jb250cm9sX2ZpbGVfaGFuZGxlcjsKIAotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShyZXEpOworCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCAmcmVxLT5xdWV1ZV9yZXEpOwogCXNiYWxlWzBdLmZsYWdzIHw9IGRpcmVjdGlvbjsKIAogCWJvdHRvbSA9ICZyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0OwogCWJvdHRvbS0+b3BlcmF0aW9uX3N1YnR5cGUgPSBGU0ZfQ0ZEQ19PUEVSQVRJT05fU1VCVFlQRTsKIAlib3R0b20tPm9wdGlvbiA9IGZzZl9jZmRjLT5vcHRpb247CiAKLQlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKHJlcSwgZGlyZWN0aW9uLCBmc2ZfY2ZkYy0+c2csCisJYnl0ZXMgPSB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhxZGlvLCAmcmVxLT5xdWV1ZV9yZXEsCisJCQkJCWRpcmVjdGlvbiwgZnNmX2NmZGMtPnNnLAogCQkJCQlGU0ZfTUFYX1NCQUxTX1BFUl9SRVEpOwogCWlmIChieXRlcyAhPSBaRkNQX0NGRENfTUFYX1NJWkUpIHsKIAkJemZjcF9mc2ZfcmVxX2ZyZWUocmVxKTsKQEAgLTI1NjksMTIgKzI1NzEsNTMgQEAKIAl6ZmNwX2ZzZl9zdGFydF90aW1lcihyZXEsIFpGQ1BfRlNGX1JFUVVFU1RfVElNRU9VVCk7CiAJcmV0dmFsID0gemZjcF9mc2ZfcmVxX3NlbmQocmVxKTsKIG91dDoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOwogCiAJaWYgKCFyZXR2YWwpIHsKLQkJd2FpdF9ldmVudChyZXEtPmNvbXBsZXRpb25fd3EsCi0JCQkgICByZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9DT01QTEVURUQpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyZXEtPmNvbXBsZXRpb24pOwogCQlyZXR1cm4gcmVxOwogCX0KIAlyZXR1cm4gRVJSX1BUUihyZXR2YWwpOwogfQorCisvKioKKyAqIHpmY3BfZnNmX3JlcWlkX2NoZWNrIC0gdmFsaWRhdGUgcmVxX2lkIGNvbnRhaW5lZCBpbiBTQkFMIHJldHVybmVkIGJ5IFFESU8KKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKKyAqIEBzYmFsX2lkeDogcmVzcG9uc2UgcXVldWUgaW5kZXggb2YgU0JBTCB0byBiZSBwcm9jZXNzZWQKKyAqLwordm9pZCB6ZmNwX2ZzZl9yZXFpZF9jaGVjayhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBpbnQgc2JhbF9pZHgpCit7CisJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CisJc3RydWN0IHFkaW9fYnVmZmVyICpzYmFsID0gcWRpby0+cmVzcF9xLnNiYWxbc2JhbF9pZHhdOworCXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHJlcV9pZDsKKwlpbnQgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCBRRElPX01BWF9FTEVNRU5UU19QRVJfQlVGRkVSOyBpZHgrKykgeworCisJCXNiYWxlID0gJnNiYWwtPmVsZW1lbnRbaWR4XTsKKwkJcmVxX2lkID0gKHVuc2lnbmVkIGxvbmcpIHNiYWxlLT5hZGRyOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCQlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2ZpbmQoYWRhcHRlciwgcmVxX2lkKTsKKworCQlpZiAoIWZzZl9yZXEpCisJCQkvKgorCQkJICogVW5rbm93biByZXF1ZXN0IG1lYW5zIHRoYXQgd2UgaGF2ZSBwb3RlbnRpYWxseSBtZW1vcnkKKwkJCSAqIGNvcnJ1cHRpb24gYW5kIG11c3Qgc3RvcCB0aGUgbWFjaGluZSBpbW1lZGlhdGVseS4KKwkJCSAqLworCQkJcGFuaWMoImVycm9yOiB1bmtub3duIHJlcV9pZCAoJWx4KSBvbiBhZGFwdGVyICVzLlxuIiwKKwkJCSAgICAgIHJlcV9pZCwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOworCisJCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCisJCWZzZl9yZXEtPnF1ZXVlX3JlcS5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7CisJCWZzZl9yZXEtPnF1ZXVlX3JlcS5xZGlvX2luYl91c2FnZSA9CisJCQlhdG9taWNfcmVhZCgmcWRpby0+cmVzcF9xLmNvdW50KTsKKwkJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOworCisJCWlmIChsaWtlbHkoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKSkKKwkJCWJyZWFrOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5oCmluZGV4IGRmN2YyMzIuLmRjYzdjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuaApAQCAtMywxMyArMywxNCBAQAogICoKICAqIEludGVyZmFjZSB0byB0aGUgRlNGIHN1cHBvcnQgZnVuY3Rpb25zLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOAorICogQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDAyLCAyMDA5CiAgKi8KIAogI2lmbmRlZiBGU0ZfSAogI2RlZmluZSBGU0ZfSAogCiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAogI2RlZmluZSBGU0ZfUVRDQl9DVVJSRU5UX1ZFUlNJT04JCTB4MDAwMDAwMDEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwppbmRleCBlMGEyMTUzLi42YzUyMjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBTZXR1cCBhbmQgaGVscGVyIGZ1bmN0aW9ucyB0byBhY2Nlc3MgUURJTy4KICAqCi0gKiBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDIsIDIwMDgKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAwMiwgMjAwOQogICovCiAKICNkZWZpbmUgS01TR19DT01QT05FTlQgInpmY3AiCkBAIC0zNCwyOSArMzQsMTAgQEAKIAlyZXR1cm4gJnEtPnNiYWxbc2JhbF9pZHhdLT5lbGVtZW50W3NiYWxlX2lkeF07CiB9CiAKLS8qKgotICogemZjcF9xZGlvX2ZyZWUgLSBmcmVlIG1lbW9yeSB1c2VkIGJ5IHJlcXVlc3QtIGFuZCByZXNwb3NuZSBxdWV1ZQotICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gdGhlIHpmY3BfYWRhcHRlciBzdHJ1Y3R1cmUKLSAqLwotdm9pZCB6ZmNwX3FkaW9fZnJlZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIHZvaWQgemZjcF9xZGlvX2hhbmRsZXJfZXJyb3Ioc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgY2hhciAqaWQpCiB7Ci0Jc3RydWN0IHFkaW9fYnVmZmVyICoqc2JhbF9yZXEsICoqc2JhbF9yZXNwOwotCWludCBwOworCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxZGlvLT5hZGFwdGVyOwogCi0JaWYgKGFkYXB0ZXItPmNjd19kZXZpY2UpCi0JCXFkaW9fZnJlZShhZGFwdGVyLT5jY3dfZGV2aWNlKTsKLQotCXNiYWxfcmVxID0gYWRhcHRlci0+cmVxX3Euc2JhbDsKLQlzYmFsX3Jlc3AgPSBhZGFwdGVyLT5yZXNwX3Euc2JhbDsKLQotCWZvciAocCA9IDA7IHAgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBwICs9IFFCVUZGX1BFUl9QQUdFKSB7Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgc2JhbF9yZXFbcF0pOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHNiYWxfcmVzcFtwXSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9faGFuZGxlcl9lcnJvcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBjaGFyICppZCkKLXsKIAlkZXZfd2FybigmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LCAiQSBRRElPIHByb2JsZW0gb2NjdXJyZWRcbiIpOwogCiAJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwKQEAgLTc1LDcyICs1Niw0NyBAQAogfQogCiAvKiB0aGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBwcmlvciB0byB1cGRhdGluZyB0aGUgcXVldWUgZmlsbCBsZXZlbCAqLwotc3RhdGljIHZvaWQgemZjcF9xZGlvX2FjY291bnQoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbmxpbmUgdm9pZCB6ZmNwX3FkaW9fYWNjb3VudChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogewotCWt0aW1lX3Qgbm93OwotCXM2NCBzcGFuOworCXVuc2lnbmVkIGxvbmcgbG9uZyBub3csIHNwYW47CiAJaW50IGZyZWUsIHVzZWQ7CiAKLQlzcGluX2xvY2soJmFkYXB0ZXItPnFkaW9fc3RhdF9sb2NrKTsKLQlub3cgPSBrdGltZV9nZXQoKTsKLQlzcGFuID0ga3RpbWVfdXNfZGVsdGEobm93LCBhZGFwdGVyLT5yZXFfcV90aW1lKTsKLQlmcmVlID0gbWF4KDAsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXFfcS5jb3VudCkpOworCXNwaW5fbG9jaygmcWRpby0+c3RhdF9sb2NrKTsKKwlub3cgPSBnZXRfY2xvY2tfbW9ub3RvbmljKCk7CisJc3BhbiA9IChub3cgLSBxZGlvLT5yZXFfcV90aW1lKSA+PiAxMjsKKwlmcmVlID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKIAl1c2VkID0gUURJT19NQVhfQlVGRkVSU19QRVJfUSAtIGZyZWU7Ci0JYWRhcHRlci0+cmVxX3FfdXRpbCArPSB1c2VkICogc3BhbjsKLQlhZGFwdGVyLT5yZXFfcV90aW1lID0gbm93OwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5xZGlvX3N0YXRfbG9jayk7CisJcWRpby0+cmVxX3FfdXRpbCArPSB1c2VkICogc3BhbjsKKwlxZGlvLT5yZXFfcV90aW1lID0gbm93OworCXNwaW5fdW5sb2NrKCZxZGlvLT5zdGF0X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCB6ZmNwX3FkaW9faW50X3JlcShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IHFkaW9fZXJyLAogCQkJICAgICAgaW50IHF1ZXVlX25vLCBpbnQgZmlyc3QsIGludCBjb3VudCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGFybSkKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgcGFybTsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxdWV1ZSA9ICZhZGFwdGVyLT5yZXFfcTsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gKHN0cnVjdCB6ZmNwX3FkaW8gKikgcGFybTsKKwlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxdWV1ZSA9ICZxZGlvLT5yZXFfcTsKIAogCWlmICh1bmxpa2VseShxZGlvX2VycikpIHsKLQkJemZjcF9oYmFfZGJmX2V2ZW50X3FkaW8oYWRhcHRlciwgcWRpb19lcnIsIGZpcnN0LCBjb3VudCk7Ci0JCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKGFkYXB0ZXIsICJxZGlyZXExIik7CisJCXpmY3BfZGJmX2hiYV9xZGlvKHFkaW8tPmFkYXB0ZXItPmRiZiwgcWRpb19lcnIsIGZpcnN0LAorCQkJCQljb3VudCk7CisJCXpmY3BfcWRpb19oYW5kbGVyX2Vycm9yKHFkaW8sICJxZGlyZXExIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBjbGVhbnVwIGFsbCBTQkFMcyBiZWluZyBwcm9ncmFtLW93bmVkIG5vdyAqLwogCXpmY3BfcWRpb196ZXJvX3NiYWxzKHF1ZXVlLT5zYmFsLCBmaXJzdCwgY291bnQpOwogCi0JemZjcF9xZGlvX2FjY291bnQoYWRhcHRlcik7CisJemZjcF9xZGlvX2FjY291bnQocWRpbyk7CiAJYXRvbWljX2FkZChjb3VudCwgJnF1ZXVlLT5jb3VudCk7Ci0Jd2FrZV91cCgmYWRhcHRlci0+cmVxdWVzdF93cSk7CisJd2FrZV91cCgmcWRpby0+cmVxX3Ffd3EpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9fcmVxaWRfY2hlY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgcmVxX2lkLCBpbnQgc2JhbF9pZHgpCitzdGF0aWMgdm9pZCB6ZmNwX3FkaW9fcmVzcF9wdXRfYmFjayhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBpbnQgcHJvY2Vzc2VkKQogewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JZnNmX3JlcSA9IHpmY3BfcmVxbGlzdF9maW5kKGFkYXB0ZXIsIHJlcV9pZCk7Ci0KLQlpZiAoIWZzZl9yZXEpCi0JCS8qCi0JCSAqIFVua25vd24gcmVxdWVzdCBtZWFucyB0aGF0IHdlIGhhdmUgcG90ZW50aWFsbHkgbWVtb3J5Ci0JCSAqIGNvcnJ1cHRpb24gYW5kIG11c3Qgc3RvcCB0aGUgbWFjaGluZSBpbW1lZGlhdGx5LgotCQkgKi8KLQkJcGFuaWMoImVycm9yOiB1bmtub3duIHJlcXVlc3QgaWQgKCVseCkgb24gYWRhcHRlciAlcy5cbiIsCi0JCSAgICAgIHJlcV9pZCwgZGV2X25hbWUoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldikpOwotCi0JemZjcF9yZXFsaXN0X3JlbW92ZShhZGFwdGVyLCBmc2ZfcmVxKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlmc2ZfcmVxLT5zYmFsX3Jlc3BvbnNlID0gc2JhbF9pZHg7Ci0JZnNmX3JlcS0+cWRpb19pbmJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmYWRhcHRlci0+cmVzcF9xLmNvdW50KTsKLQl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHpmY3BfcWRpb19yZXNwX3B1dF9iYWNrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwcm9jZXNzZWQpCi17Ci0Jc3RydWN0IHpmY3BfcWRpb19xdWV1ZSAqcXVldWUgPSAmYWRhcHRlci0+cmVzcF9xOwotCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gYWRhcHRlci0+Y2N3X2RldmljZTsKKwlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpxdWV1ZSA9ICZxZGlvLT5yZXNwX3E7CisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBxZGlvLT5hZGFwdGVyLT5jY3dfZGV2aWNlOwogCXU4IGNvdW50LCBzdGFydCA9IHF1ZXVlLT5maXJzdDsKIAl1bnNpZ25lZCBpbnQgcmV0dmFsOwogCkBAIC0xNjIsMTQgKzExOCwxMyBAQAogCQkJICAgICAgIGludCBxdWV1ZV9ubywgaW50IGZpcnN0LCBpbnQgY291bnQsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBwYXJtKQogewotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IHpmY3BfYWRhcHRlciAqKSBwYXJtOwotCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnF1ZXVlID0gJmFkYXB0ZXItPnJlc3BfcTsKLQlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7Ci0JaW50IHNiYWxfaWR4LCBzYmFsZV9pZHgsIHNiYWxfbm87CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbyA9IChzdHJ1Y3QgemZjcF9xZGlvICopIHBhcm07CisJaW50IHNiYWxfaWR4LCBzYmFsX25vOwogCiAJaWYgKHVubGlrZWx5KHFkaW9fZXJyKSkgewotCQl6ZmNwX2hiYV9kYmZfZXZlbnRfcWRpbyhhZGFwdGVyLCBxZGlvX2VyciwgZmlyc3QsIGNvdW50KTsKLQkJemZjcF9xZGlvX2hhbmRsZXJfZXJyb3IoYWRhcHRlciwgInFkaXJlczEiKTsKKwkJemZjcF9kYmZfaGJhX3FkaW8ocWRpby0+YWRhcHRlci0+ZGJmLCBxZGlvX2VyciwgZmlyc3QsCisJCQkJCWNvdW50KTsKKwkJemZjcF9xZGlvX2hhbmRsZXJfZXJyb3IocWRpbywgInFkaXJlczEiKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTc5LDM5ICsxMzQsMjcgQEAKIAkgKi8KIAlmb3IgKHNiYWxfbm8gPSAwOyBzYmFsX25vIDwgY291bnQ7IHNiYWxfbm8rKykgewogCQlzYmFsX2lkeCA9IChmaXJzdCArIHNiYWxfbm8pICUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKLQogCQkvKiBnbyB0aHJvdWdoIGFsbCBTQkFMRXMgb2YgU0JBTCAqLwotCQlmb3IgKHNiYWxlX2lkeCA9IDA7IHNiYWxlX2lkeCA8IFFESU9fTUFYX0VMRU1FTlRTX1BFUl9CVUZGRVI7Ci0JCSAgICAgc2JhbGVfaWR4KyspIHsKLQkJCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlKHF1ZXVlLCBzYmFsX2lkeCwgc2JhbGVfaWR4KTsKLQkJCXpmY3BfcWRpb19yZXFpZF9jaGVjayhhZGFwdGVyLAotCQkJCQkgICAgICAodW5zaWduZWQgbG9uZykgc2JhbGUtPmFkZHIsCi0JCQkJCSAgICAgIHNiYWxfaWR4KTsKLQkJCWlmIChsaWtlbHkoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKSkKLQkJCQlicmVhazsKLQkJfTsKLQotCQlpZiAodW5saWtlbHkoIShzYmFsZS0+ZmxhZ3MgJiBTQkFMX0ZMQUdTX0xBU1RfRU5UUlkpKSkKLQkJCWRldl93YXJuKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCi0JCQkJICJBIFFESU8gcHJvdG9jb2wgZXJyb3Igb2NjdXJyZWQsICIKLQkJCQkgIm9wZXJhdGlvbnMgY29udGludWVcbiIpOworCQl6ZmNwX2ZzZl9yZXFpZF9jaGVjayhxZGlvLCBzYmFsX2lkeCk7CiAJfQogCiAJLyoKIAkgKiBwdXQgcmFuZ2Ugb2YgU0JBTHMgYmFjayB0byByZXNwb25zZSBxdWV1ZQogCSAqIChpbmNsdWRpbmcgU0JBTHMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gZnJlZSBiZWZvcmUpCiAJICovCi0JemZjcF9xZGlvX3Jlc3BfcHV0X2JhY2soYWRhcHRlciwgY291bnQpOworCXpmY3BfcWRpb19yZXNwX3B1dF9iYWNrKHFkaW8sIGNvdW50KTsKIH0KIAogLyoqCiAgKiB6ZmNwX3FkaW9fc2JhbGVfcmVxIC0gcmV0dXJuIHB0ciB0byBTQkFMRSBvZiByZXFfcSBmb3IgYSBzdHJ1Y3QgemZjcF9mc2ZfcmVxCi0gKiBAZnNmX3JlcTogcG9pbnRlciB0byBzdHJ1Y3QgZnNmX3JlcQorICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbworICogQHFfcmVjOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlYwogICogUmV0dXJuczogcG9pbnRlciB0byBxZGlvX2J1ZmZlcl9lbGVtZW50IChTQkFMRSkgc3RydWN0dXJlCiAgKi8KLXN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKK3N0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfcmVxKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCisJCQkJCQlzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxKQogewotCXJldHVybiB6ZmNwX3FkaW9fc2JhbGUoJnJlcS0+YWRhcHRlci0+cmVxX3EsIHJlcS0+c2JhbF9sYXN0LCAwKTsKKwlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwgMCk7CiB9CiAKIC8qKgpAQCAtMjE5LDc0ICsxNjIsODAgQEAKICAqIEBmc2ZfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCBmc2ZfcmVxCiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIHFkaW9fYnVmZmVyX2VsZW1lbnQgKFNCQUxFKSBzdHJ1Y3R1cmUKICAqLwotc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9jdXJyKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSkKK3N0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICp6ZmNwX3FkaW9fc2JhbGVfY3VycihzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAorCQkJCQkJIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEpCiB7Ci0JcmV0dXJuIHpmY3BfcWRpb19zYmFsZSgmcmVxLT5hZGFwdGVyLT5yZXFfcSwgcmVxLT5zYmFsX2xhc3QsCi0JCQkgICAgICAgcmVxLT5zYmFsZV9jdXJyKTsKKwlyZXR1cm4gemZjcF9xZGlvX3NiYWxlKCZxZGlvLT5yZXFfcSwgcV9yZXEtPnNiYWxfbGFzdCwKKwkJCSAgICAgICBxX3JlcS0+c2JhbGVfY3Vycik7CiB9CiAKLXN0YXRpYyB2b2lkIHpmY3BfcWRpb19zYmFsX2xpbWl0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIGludCBtYXhfc2JhbHMpCitzdGF0aWMgdm9pZCB6ZmNwX3FkaW9fc2JhbF9saW1pdChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAorCQkJCSBzdHJ1Y3QgemZjcF9xdWV1ZV9yZXEgKnFfcmVxLCBpbnQgbWF4X3NiYWxzKQogewotCWludCBjb3VudCA9IGF0b21pY19yZWFkKCZmc2ZfcmVxLT5hZGFwdGVyLT5yZXFfcS5jb3VudCk7CisJaW50IGNvdW50ID0gYXRvbWljX3JlYWQoJnFkaW8tPnJlcV9xLmNvdW50KTsKIAljb3VudCA9IG1pbihjb3VudCwgbWF4X3NiYWxzKTsKLQlmc2ZfcmVxLT5zYmFsX2xpbWl0ID0gKGZzZl9yZXEtPnNiYWxfZmlyc3QgKyBjb3VudCAtIDEpCisJcV9yZXEtPnNiYWxfbGltaXQgPSAocV9yZXEtPnNiYWxfZmlyc3QgKyBjb3VudCAtIDEpCiAJCQkJCSUgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKIH0KIAogc3RhdGljIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKLXpmY3BfcWRpb19zYmFsX2NoYWluKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHVuc2lnbmVkIGxvbmcgc2J0eXBlKQoremZjcF9xZGlvX3NiYWxfY2hhaW4oc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKKwkJICAgICB1bnNpZ25lZCBsb25nIHNidHlwZSkKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAKIAkvKiBzZXQgbGFzdCBlbnRyeSBmbGFnIGluIGN1cnJlbnQgU0JBTEUgb2YgY3VycmVudCBTQkFMICovCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3Vycihmc2ZfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKIAlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCiAJLyogZG9uJ3QgZXhjZWVkIGxhc3QgYWxsb3dlZCBTQkFMICovCi0JaWYgKGZzZl9yZXEtPnNiYWxfbGFzdCA9PSBmc2ZfcmVxLT5zYmFsX2xpbWl0KQorCWlmIChxX3JlcS0+c2JhbF9sYXN0ID09IHFfcmVxLT5zYmFsX2xpbWl0KQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIHNldCBjaGFpbmluZyBmbGFnIGluIGZpcnN0IFNCQUxFIG9mIGN1cnJlbnQgU0JBTCAqLwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShmc2ZfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgcV9yZXEpOwogCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTOwogCiAJLyogY2FsY3VsYXRlIGluZGV4IG9mIG5leHQgU0JBTCAqLwotCWZzZl9yZXEtPnNiYWxfbGFzdCsrOwotCWZzZl9yZXEtPnNiYWxfbGFzdCAlPSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROworCXFfcmVxLT5zYmFsX2xhc3QrKzsKKwlxX3JlcS0+c2JhbF9sYXN0ICU9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAKIAkvKiBrZWVwIHRoaXMgcmVxdWVzdHMgbnVtYmVyIG9mIFNCQUxzIHVwLXRvLWRhdGUgKi8KLQlmc2ZfcmVxLT5zYmFsX251bWJlcisrOworCXFfcmVxLT5zYmFsX251bWJlcisrOwogCiAJLyogc3RhcnQgYXQgZmlyc3QgU0JBTEUgb2YgbmV3IFNCQUwgKi8KLQlmc2ZfcmVxLT5zYmFsZV9jdXJyID0gMDsKKwlxX3JlcS0+c2JhbGVfY3VyciA9IDA7CiAKIAkvKiBzZXQgc3RvcmFnZS1ibG9jayB0eXBlIGZvciBuZXcgU0JBTCAqLwotCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIoZnNmX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3VycihxZGlvLCBxX3JlcSk7CiAJc2JhbGUtPmZsYWdzIHw9IHNidHlwZTsKIAogCXJldHVybiBzYmFsZTsKIH0KIAogc3RhdGljIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICoKLXpmY3BfcWRpb19zYmFsZV9uZXh0KHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsIHVuc2lnbmVkIGxvbmcgc2J0eXBlKQoremZjcF9xZGlvX3NiYWxlX25leHQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKKwkJICAgICB1bnNpZ25lZCBpbnQgc2J0eXBlKQogewotCWlmIChmc2ZfcmVxLT5zYmFsZV9jdXJyID09IFpGQ1BfTEFTVF9TQkFMRV9QRVJfU0JBTCkKLQkJcmV0dXJuIHpmY3BfcWRpb19zYmFsX2NoYWluKGZzZl9yZXEsIHNidHlwZSk7Ci0JZnNmX3JlcS0+c2JhbGVfY3VycisrOwotCXJldHVybiB6ZmNwX3FkaW9fc2JhbGVfY3Vycihmc2ZfcmVxKTsKKwlpZiAocV9yZXEtPnNiYWxlX2N1cnIgPT0gWkZDUF9MQVNUX1NCQUxFX1BFUl9TQkFMKQorCQlyZXR1cm4gemZjcF9xZGlvX3NiYWxfY2hhaW4ocWRpbywgcV9yZXEsIHNidHlwZSk7CisJcV9yZXEtPnNiYWxlX2N1cnIrKzsKKwlyZXR1cm4gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwogfQogCi1zdGF0aWMgdm9pZCB6ZmNwX3FkaW9fdW5kb19zYmFscyhzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQorc3RhdGljIHZvaWQgemZjcF9xZGlvX3VuZG9fc2JhbHMoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywKKwkJCQkgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKIHsKLQlzdHJ1Y3QgcWRpb19idWZmZXIgKipzYmFsID0gZnNmX3JlcS0+YWRhcHRlci0+cmVxX3Euc2JhbDsKLQlpbnQgZmlyc3QgPSBmc2ZfcmVxLT5zYmFsX2ZpcnN0OwotCWludCBsYXN0ID0gZnNmX3JlcS0+c2JhbF9sYXN0OworCXN0cnVjdCBxZGlvX2J1ZmZlciAqKnNiYWwgPSBxZGlvLT5yZXFfcS5zYmFsOworCWludCBmaXJzdCA9IHFfcmVxLT5zYmFsX2ZpcnN0OworCWludCBsYXN0ID0gcV9yZXEtPnNiYWxfbGFzdDsKIAlpbnQgY291bnQgPSAobGFzdCAtIGZpcnN0ICsgUURJT19NQVhfQlVGRkVSU19QRVJfUSkgJQogCQlRRElPX01BWF9CVUZGRVJTX1BFUl9RICsgMTsKIAl6ZmNwX3FkaW9femVyb19zYmFscyhzYmFsLCBmaXJzdCwgY291bnQpOwogfQogCi1zdGF0aWMgaW50IHpmY3BfcWRpb19maWxsX3NiYWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsCitzdGF0aWMgaW50IHpmY3BfcWRpb19maWxsX3NiYWxzKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCisJCQkJc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSwKIAkJCQl1bnNpZ25lZCBpbnQgc2J0eXBlLCB2b2lkICpzdGFydF9hZGRyLAogCQkJCXVuc2lnbmVkIGludCB0b3RhbF9sZW5ndGgpCiB7CkBAIC0yOTcsMTAgKzI0NiwxMCBAQAogCS8qIHNwbGl0IHNlZ21lbnQgdXAgKi8KIAlmb3IgKGFkZHIgPSBzdGFydF9hZGRyLCByZW1haW5pbmcgPSB0b3RhbF9sZW5ndGg7IHJlbWFpbmluZyA+IDA7CiAJICAgICBhZGRyICs9IGxlbmd0aCwgcmVtYWluaW5nIC09IGxlbmd0aCkgewotCQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9uZXh0KGZzZl9yZXEsIHNidHlwZSk7CisJCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX25leHQocWRpbywgcV9yZXEsIHNidHlwZSk7CiAJCWlmICghc2JhbGUpIHsKLQkJCWF0b21pY19pbmMoJmZzZl9yZXEtPmFkYXB0ZXItPnFkaW9fb3V0Yl9mdWxsKTsKLQkJCXpmY3BfcWRpb191bmRvX3NiYWxzKGZzZl9yZXEpOworCQkJYXRvbWljX2luYygmcWRpby0+cmVxX3FfZnVsbCk7CisJCQl6ZmNwX3FkaW9fdW5kb19zYmFscyhxZGlvLCBxX3JlcSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC0zMjIsMjkgKzI3MSwzMSBAQAogICogQG1heF9zYmFsczogdXBwZXIgYm91bmQgZm9yIG51bWJlciBvZiBTQkFMcyB0byBiZSB1c2VkCiAgKiBSZXR1cm5zOiBudW1iZXIgb2YgYnl0ZXMsIG9yIGVycm9yIChuZWdhdGl2KQogICovCi1pbnQgemZjcF9xZGlvX3NiYWxzX2Zyb21fc2coc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSwgdW5zaWduZWQgbG9uZyBzYnR5cGUsCi0JCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG1heF9zYmFscykKK2ludCB6ZmNwX3FkaW9fc2JhbHNfZnJvbV9zZyhzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLAorCQkJICAgIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcSAqcV9yZXEsCisJCQkgICAgdW5zaWduZWQgbG9uZyBzYnR5cGUsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgaW50IG1heF9zYmFscykKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAJaW50IHJldHZhbCwgYnl0ZXMgPSAwOwogCiAJLyogZmlndXJlIG91dCBsYXN0IGFsbG93ZWQgU0JBTCAqLwotCXpmY3BfcWRpb19zYmFsX2xpbWl0KGZzZl9yZXEsIG1heF9zYmFscyk7CisJemZjcF9xZGlvX3NiYWxfbGltaXQocWRpbywgcV9yZXEsIG1heF9zYmFscyk7CiAKIAkvKiBzZXQgc3RvcmFnZS1ibG9jayB0eXBlIGZvciB0aGlzIHJlcXVlc3QgKi8KLQlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEoZnNmX3JlcSk7CisJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKIAlzYmFsZS0+ZmxhZ3MgfD0gc2J0eXBlOwogCiAJZm9yICg7IHNnOyBzZyA9IHNnX25leHQoc2cpKSB7Ci0JCXJldHZhbCA9IHpmY3BfcWRpb19maWxsX3NiYWxzKGZzZl9yZXEsIHNidHlwZSwgc2dfdmlydChzZyksCi0JCQkJCSAgICAgIHNnLT5sZW5ndGgpOworCQlyZXR2YWwgPSB6ZmNwX3FkaW9fZmlsbF9zYmFscyhxZGlvLCBxX3JlcSwgc2J0eXBlLAorCQkJCQkgICAgICBzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIHJldHZhbDsKIAkJYnl0ZXMgKz0gc2ctPmxlbmd0aDsKIAl9CiAKIAkvKiBhc3N1bWUgdGhhdCBubyBvdGhlciBTQkFMRXMgYXJlIHRvIGZvbGxvdyBpbiB0aGUgc2FtZSBTQkFMICovCi0Jc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfY3Vycihmc2ZfcmVxKTsKKwlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKIAlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOwogCiAJcmV0dXJuIGJ5dGVzOwpAQCAtMzUyLDIxICszMDMsMjIgQEAKIAogLyoqCiAgKiB6ZmNwX3FkaW9fc2VuZCAtIHNldCBQQ0kgZmxhZyBpbiBmaXJzdCBTQkFMRSBhbmQgc2VuZCByZXEgdG8gUURJTwotICogQGZzZl9yZXE6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfZnNmX3JlcQorICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfcWRpbworICogQHFfcmVxOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3F1ZXVlX3JlcQogICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBlcnJvciBvdGhlcndpc2UKICAqLwotaW50IHpmY3BfcWRpb19zZW5kKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCitpbnQgemZjcF9xZGlvX3NlbmQoc3RydWN0IHpmY3BfcWRpbyAqcWRpbywgc3RydWN0IHpmY3BfcXVldWVfcmVxICpxX3JlcSkKIHsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKLQlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcSA9ICZhZGFwdGVyLT5yZXFfcTsKLQlpbnQgZmlyc3QgPSBmc2ZfcmVxLT5zYmFsX2ZpcnN0OwotCWludCBjb3VudCA9IGZzZl9yZXEtPnNiYWxfbnVtYmVyOworCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xID0gJnFkaW8tPnJlcV9xOworCWludCBmaXJzdCA9IHFfcmVxLT5zYmFsX2ZpcnN0OworCWludCBjb3VudCA9IHFfcmVxLT5zYmFsX251bWJlcjsKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGludCBxZGlvX2ZsYWdzID0gUURJT19GTEFHX1NZTkNfT1VUUFVUOwogCi0JemZjcF9xZGlvX2FjY291bnQoYWRhcHRlcik7CisJemZjcF9xZGlvX2FjY291bnQocWRpbyk7CiAKLQlyZXR2YWwgPSBkb19RRElPKGFkYXB0ZXItPmNjd19kZXZpY2UsIHFkaW9fZmxhZ3MsIDAsIGZpcnN0LCBjb3VudCk7CisJcmV0dmFsID0gZG9fUURJTyhxZGlvLT5hZGFwdGVyLT5jY3dfZGV2aWNlLCBxZGlvX2ZsYWdzLCAwLCBmaXJzdCwKKwkJCSBjb3VudCk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKIAkJemZjcF9xZGlvX3plcm9fc2JhbHMocmVxX3EtPnNiYWwsIGZpcnN0LCBjb3VudCk7CiAJCXJldHVybiByZXR2YWw7CkBAIC0zNzksNjMgKzMzMSw2OSBAQAogCXJldHVybiAwOwogfQogCisKK3N0YXRpYyB2b2lkIHpmY3BfcWRpb19zZXR1cF9pbml0X2RhdGEoc3RydWN0IHFkaW9faW5pdGlhbGl6ZSAqaWQsCisJCQkJICAgICAgc3RydWN0IHpmY3BfcWRpbyAqcWRpbykKK3sKKworCWlkLT5jZGV2ID0gcWRpby0+YWRhcHRlci0+Y2N3X2RldmljZTsKKwlpZC0+cV9mb3JtYXQgPSBRRElPX1pGQ1BfUUZNVDsKKwltZW1jcHkoaWQtPmFkYXB0ZXJfbmFtZSwgZGV2X25hbWUoJmlkLT5jZGV2LT5kZXYpLCA4KTsKKwlBU0NFQkMoaWQtPmFkYXB0ZXJfbmFtZSwgOCk7CisJaWQtPnFpYl9wYXJhbV9maWVsZF9mb3JtYXQgPSAwOworCWlkLT5xaWJfcGFyYW1fZmllbGQgPSBOVUxMOworCWlkLT5pbnB1dF9zbGliX2VsZW1lbnRzID0gTlVMTDsKKwlpZC0+b3V0cHV0X3NsaWJfZWxlbWVudHMgPSBOVUxMOworCWlkLT5ub19pbnB1dF9xcyA9IDE7CisJaWQtPm5vX291dHB1dF9xcyA9IDE7CisJaWQtPmlucHV0X2hhbmRsZXIgPSB6ZmNwX3FkaW9faW50X3Jlc3A7CisJaWQtPm91dHB1dF9oYW5kbGVyID0gemZjcF9xZGlvX2ludF9yZXE7CisJaWQtPmludF9wYXJtID0gKHVuc2lnbmVkIGxvbmcpIHFkaW87CisJaWQtPmZsYWdzID0gUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIHwKKwkJICAgIFFESU9fT1VUQk9VTkRfMENPUFlfU0JBTFMgfCBRRElPX1VTRV9PVVRCT1VORF9QQ0lTOworCWlkLT5pbnB1dF9zYmFsX2FkZHJfYXJyYXkgPSAodm9pZCAqKikgKHFkaW8tPnJlc3BfcS5zYmFsKTsKKwlpZC0+b3V0cHV0X3NiYWxfYWRkcl9hcnJheSA9ICh2b2lkICoqKSAocWRpby0+cmVxX3Euc2JhbCk7CisKK30KIC8qKgogICogemZjcF9xZGlvX2FsbG9jYXRlIC0gYWxsb2NhdGUgcXVldWUgbWVtb3J5IGFuZCBpbml0aWFsaXplIFFESU8gZGF0YQogICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gc3RydWN0IHpmY3BfYWRhcHRlcgogICogUmV0dXJuczogLUVOT01FTSBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciBvciByZXR1cm4gdmFsdWUgZnJvbQogICogICAgICAgICAgcWRpb19hbGxvY2F0ZQogICovCi1pbnQgemZjcF9xZGlvX2FsbG9jYXRlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW50IHpmY3BfcWRpb19hbGxvY2F0ZShzdHJ1Y3QgemZjcF9xZGlvICpxZGlvKQogewotCXN0cnVjdCBxZGlvX2luaXRpYWxpemUgKmluaXRfZGF0YTsKKwlzdHJ1Y3QgcWRpb19pbml0aWFsaXplIGluaXRfZGF0YTsKIAotCWlmICh6ZmNwX3FkaW9fYnVmZmVyc19lbnF1ZXVlKGFkYXB0ZXItPnJlcV9xLnNiYWwpIHx8Ci0JCSAgIHpmY3BfcWRpb19idWZmZXJzX2VucXVldWUoYWRhcHRlci0+cmVzcF9xLnNiYWwpKQorCWlmICh6ZmNwX3FkaW9fYnVmZmVyc19lbnF1ZXVlKHFkaW8tPnJlcV9xLnNiYWwpIHx8CisJICAgIHpmY3BfcWRpb19idWZmZXJzX2VucXVldWUocWRpby0+cmVzcF9xLnNiYWwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWluaXRfZGF0YSA9ICZhZGFwdGVyLT5xZGlvX2luaXRfZGF0YTsKKwl6ZmNwX3FkaW9fc2V0dXBfaW5pdF9kYXRhKCZpbml0X2RhdGEsIHFkaW8pOwogCi0JaW5pdF9kYXRhLT5jZGV2ID0gYWRhcHRlci0+Y2N3X2RldmljZTsKLQlpbml0X2RhdGEtPnFfZm9ybWF0ID0gUURJT19aRkNQX1FGTVQ7Ci0JbWVtY3B5KGluaXRfZGF0YS0+YWRhcHRlcl9uYW1lLCBkZXZfbmFtZSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2KSwgOCk7Ci0JQVNDRUJDKGluaXRfZGF0YS0+YWRhcHRlcl9uYW1lLCA4KTsKLQlpbml0X2RhdGEtPnFpYl9wYXJhbV9maWVsZF9mb3JtYXQgPSAwOwotCWluaXRfZGF0YS0+cWliX3BhcmFtX2ZpZWxkID0gTlVMTDsKLQlpbml0X2RhdGEtPmlucHV0X3NsaWJfZWxlbWVudHMgPSBOVUxMOwotCWluaXRfZGF0YS0+b3V0cHV0X3NsaWJfZWxlbWVudHMgPSBOVUxMOwotCWluaXRfZGF0YS0+bm9faW5wdXRfcXMgPSAxOwotCWluaXRfZGF0YS0+bm9fb3V0cHV0X3FzID0gMTsKLQlpbml0X2RhdGEtPmlucHV0X2hhbmRsZXIgPSB6ZmNwX3FkaW9faW50X3Jlc3A7Ci0JaW5pdF9kYXRhLT5vdXRwdXRfaGFuZGxlciA9IHpmY3BfcWRpb19pbnRfcmVxOwotCWluaXRfZGF0YS0+aW50X3Bhcm0gPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKLQlpbml0X2RhdGEtPmZsYWdzID0gUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIHwKLQkJCVFESU9fT1VUQk9VTkRfMENPUFlfU0JBTFMgfCBRRElPX1VTRV9PVVRCT1VORF9QQ0lTOwotCWluaXRfZGF0YS0+aW5wdXRfc2JhbF9hZGRyX2FycmF5ID0KLQkJCSh2b2lkICoqKSAoYWRhcHRlci0+cmVzcF9xLnNiYWwpOwotCWluaXRfZGF0YS0+b3V0cHV0X3NiYWxfYWRkcl9hcnJheSA9Ci0JCQkodm9pZCAqKikgKGFkYXB0ZXItPnJlcV9xLnNiYWwpOwotCi0JcmV0dXJuIHFkaW9fYWxsb2NhdGUoaW5pdF9kYXRhKTsKKwlyZXR1cm4gcWRpb19hbGxvY2F0ZSgmaW5pdF9kYXRhKTsKIH0KIAogLyoqCiAgKiB6ZmNwX2Nsb3NlX3FkaW8gLSBjbG9zZSBxZGlvIHF1ZXVlcyBmb3IgYW4gYWRhcHRlcgorICogQHFkaW86IHBvaW50ZXIgdG8gc3RydWN0dXJlIHpmY3BfcWRpbwogICovCi12b2lkIHpmY3BfcWRpb19jbG9zZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQordm9pZCB6ZmNwX3FkaW9fY2xvc2Uoc3RydWN0IHpmY3BfcWRpbyAqcWRpbykKIHsKIAlzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICpyZXFfcTsKIAlpbnQgZmlyc3QsIGNvdW50OwogCi0JaWYgKCEoYXRvbWljX3JlYWQoJmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCkpCisJaWYgKCEoYXRvbWljX3JlYWQoJnFkaW8tPmFkYXB0ZXItPnN0YXR1cykgJiBaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCkpCiAJCXJldHVybjsKIAogCS8qIGNsZWFyIFFESU9VUCBmbGFnLCB0aHVzIGRvX1FESU8gaXMgbm90IGNhbGxlZCBkdXJpbmcgcWRpb19zaHV0ZG93biAqLwotCXJlcV9xID0gJmFkYXB0ZXItPnJlcV9xOwotCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+cmVxX3FfbG9jayk7Ci0JYXRvbWljX2NsZWFyX21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9RRElPVVAsICZhZGFwdGVyLT5zdGF0dXMpOwotCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5yZXFfcV9sb2NrKTsKKwlyZXFfcSA9ICZxZGlvLT5yZXFfcTsKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnJlcV9xX2xvY2spOworCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQLCAmcWRpby0+YWRhcHRlci0+c3RhdHVzKTsKKwlzcGluX3VubG9ja19iaCgmcWRpby0+cmVxX3FfbG9jayk7CiAKLQlxZGlvX3NodXRkb3duKGFkYXB0ZXItPmNjd19kZXZpY2UsIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSKTsKKwlxZGlvX3NodXRkb3duKHFkaW8tPmFkYXB0ZXItPmNjd19kZXZpY2UsCisJCSAgICAgIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0NMRUFSKTsKIAogCS8qIGNsZWFudXAgdXNlZCBvdXRib3VuZCBzYmFscyAqLwogCWNvdW50ID0gYXRvbWljX3JlYWQoJnJlcV9xLT5jb3VudCk7CkBAIC00NDYsNTAgKzQwNCw5OSBAQAogCX0KIAlyZXFfcS0+Zmlyc3QgPSAwOwogCWF0b21pY19zZXQoJnJlcV9xLT5jb3VudCwgMCk7Ci0JYWRhcHRlci0+cmVzcF9xLmZpcnN0ID0gMDsKLQlhdG9taWNfc2V0KCZhZGFwdGVyLT5yZXNwX3EuY291bnQsIDApOworCXFkaW8tPnJlc3BfcS5maXJzdCA9IDA7CisJYXRvbWljX3NldCgmcWRpby0+cmVzcF9xLmNvdW50LCAwKTsKIH0KIAogLyoqCiAgKiB6ZmNwX3FkaW9fb3BlbiAtIHByZXBhcmUgYW5kIGluaXRpYWxpemUgcmVzcG9uc2UgcXVldWUKLSAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX2FkYXB0ZXIKKyAqIEBxZGlvOiBwb2ludGVyIHRvIHN0cnVjdCB6ZmNwX3FkaW8KICAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIC1FSU8KICAqLwotaW50IHpmY3BfcWRpb19vcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCitpbnQgemZjcF9xZGlvX29wZW4oc3RydWN0IHpmY3BfcWRpbyAqcWRpbykKIHsKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CisJc3RydWN0IHFkaW9faW5pdGlhbGl6ZSBpbml0X2RhdGE7CisJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBxZGlvLT5hZGFwdGVyLT5jY3dfZGV2aWNlOwogCWludCBjYzsKIAotCWlmIChhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKQorCWlmIChhdG9taWNfcmVhZCgmcWRpby0+YWRhcHRlci0+c3RhdHVzKSAmIFpGQ1BfU1RBVFVTX0FEQVBURVJfUURJT1VQKQogCQlyZXR1cm4gLUVJTzsKIAotCWlmIChxZGlvX2VzdGFibGlzaCgmYWRhcHRlci0+cWRpb19pbml0X2RhdGEpKQorCXpmY3BfcWRpb19zZXR1cF9pbml0X2RhdGEoJmluaXRfZGF0YSwgcWRpbyk7CisKKwlpZiAocWRpb19lc3RhYmxpc2goJmluaXRfZGF0YSkpCiAJCWdvdG8gZmFpbGVkX2VzdGFibGlzaDsKIAotCWlmIChxZGlvX2FjdGl2YXRlKGFkYXB0ZXItPmNjd19kZXZpY2UpKQorCWlmIChxZGlvX2FjdGl2YXRlKGNkZXYpKQogCQlnb3RvIGZhaWxlZF9xZGlvOwogCiAJZm9yIChjYyA9IDA7IGNjIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgY2MrKykgewotCQlzYmFsZSA9ICYoYWRhcHRlci0+cmVzcF9xLnNiYWxbY2NdLT5lbGVtZW50WzBdKTsKKwkJc2JhbGUgPSAmKHFkaW8tPnJlc3BfcS5zYmFsW2NjXS0+ZWxlbWVudFswXSk7CiAJCXNiYWxlLT5sZW5ndGggPSAwOwogCQlzYmFsZS0+ZmxhZ3MgPSBTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CiAJCXNiYWxlLT5hZGRyID0gTlVMTDsKIAl9CiAKLQlpZiAoZG9fUURJTyhhZGFwdGVyLT5jY3dfZGV2aWNlLCBRRElPX0ZMQUdfU1lOQ19JTlBVVCwgMCwgMCwKKwlpZiAoZG9fUURJTyhjZGV2LCBRRElPX0ZMQUdfU1lOQ19JTlBVVCwgMCwgMCwKIAkJICAgICBRRElPX01BWF9CVUZGRVJTX1BFUl9RKSkKIAkJZ290byBmYWlsZWRfcWRpbzsKIAogCS8qIHNldCBpbmRleCBvZiBmaXJzdCBhdmFsYWJsZSBTQkFMUyAvIG51bWJlciBvZiBhdmFpbGFibGUgU0JBTFMgKi8KLQlhZGFwdGVyLT5yZXFfcS5maXJzdCA9IDA7Ci0JYXRvbWljX3NldCgmYWRhcHRlci0+cmVxX3EuY291bnQsIFFESU9fTUFYX0JVRkZFUlNfUEVSX1EpOworCXFkaW8tPnJlcV9xLmZpcnN0ID0gMDsKKwlhdG9taWNfc2V0KCZxZGlvLT5yZXFfcS5jb3VudCwgUURJT19NQVhfQlVGRkVSU19QRVJfUSk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbGVkX3FkaW86Ci0JcWRpb19zaHV0ZG93bihhZGFwdGVyLT5jY3dfZGV2aWNlLCBRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7CisJcWRpb19zaHV0ZG93bihjZGV2LCBRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUik7CiBmYWlsZWRfZXN0YWJsaXNoOgotCWRldl9lcnIoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwKKwlkZXZfZXJyKCZjZGV2LT5kZXYsCiAJCSJTZXR0aW5nIHVwIHRoZSBRRElPIGNvbm5lY3Rpb24gdG8gdGhlIEZDUCBhZGFwdGVyIGZhaWxlZFxuIik7CiAJcmV0dXJuIC1FSU87CiB9CisKK3ZvaWQgemZjcF9xZGlvX2Rlc3Ryb3koc3RydWN0IHpmY3BfcWRpbyAqcWRpbykKK3sKKwlzdHJ1Y3QgcWRpb19idWZmZXIgKipzYmFsX3JlcSwgKipzYmFsX3Jlc3A7CisJaW50IHA7CisKKwlpZiAoIXFkaW8pCisJCXJldHVybjsKKworCWlmIChxZGlvLT5hZGFwdGVyLT5jY3dfZGV2aWNlKQorCQlxZGlvX2ZyZWUocWRpby0+YWRhcHRlci0+Y2N3X2RldmljZSk7CisKKwlzYmFsX3JlcSA9IHFkaW8tPnJlcV9xLnNiYWw7CisJc2JhbF9yZXNwID0gcWRpby0+cmVzcF9xLnNiYWw7CisKKwlmb3IgKHAgPSAwOyBwIDwgUURJT19NQVhfQlVGRkVSU19QRVJfUTsgcCArPSBRQlVGRl9QRVJfUEFHRSkgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHNiYWxfcmVxW3BdKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBzYmFsX3Jlc3BbcF0pOworCX0KKworCWtmcmVlKHFkaW8pOworfQorCitpbnQgemZjcF9xZGlvX3NldHVwKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHpmY3BfcWRpbyAqcWRpbzsKKworCXFkaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemZjcF9xZGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxZGlvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXFkaW8tPmFkYXB0ZXIgPSBhZGFwdGVyOworCisJaWYgKHpmY3BfcWRpb19hbGxvY2F0ZShxZGlvKSkgeworCQl6ZmNwX3FkaW9fZGVzdHJveShxZGlvKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnFkaW8tPnJlcV9xX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZxZGlvLT5zdGF0X2xvY2spOworCisJYWRhcHRlci0+cWRpbyA9IHFkaW87CisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggNjkyNWExNy4uM2ZmNzI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTksOCArOSw5IEBACiAjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ6ZmNwIgogI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAogCi0jaW5jbHVkZSAiemZjcF9leHQuaCIKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSAiemZjcF9leHQuaCIKKyNpbmNsdWRlICJ6ZmNwX2RiZi5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfZGVwdGggPSAzMjsKIG1vZHVsZV9wYXJhbV9uYW1lZChxdWV1ZV9kZXB0aCwgZGVmYXVsdF9kZXB0aCwgdWludCwgMDYwMCk7CkBAIC01MiwxMSArNTMsMTEgQEAKIAogc3RhdGljIHZvaWQgemZjcF9zY3NpX2NvbW1hbmRfZmFpbChzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCwgaW50IHJlc3VsdCkKIHsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0KKwkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF07CiAJc2V0X2hvc3RfYnl0ZShzY3BudCwgcmVzdWx0KTsKIAlpZiAoKHNjcG50LT5kZXZpY2UgIT0gTlVMTCkgJiYgKHNjcG50LT5kZXZpY2UtPmhvc3QgIT0gTlVMTCkpCi0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KCJmYWlsIiwgNCwKLQkJCShzdHJ1Y3QgemZjcF9hZGFwdGVyKikgc2NwbnQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF0sCi0JCQlzY3BudCwgTlVMTCk7CisJCXpmY3BfZGJmX3Njc2lfcmVzdWx0KCJmYWlsIiwgNCwgYWRhcHRlci0+ZGJmLCBzY3BudCwgTlVMTCk7CiAJLyogcmV0dXJuIGRpcmVjdGx5ICovCiAJc2NwbnQtPnNjc2lfZG9uZShzY3BudCk7CiB9CkBAIC05Miw3ICs5Myw3IEBACiAJc2NzaV9yZXN1bHQgPSBmY19yZW1vdGVfcG9ydF9jaGtyZWFkeShycG9ydCk7CiAJaWYgKHVubGlrZWx5KHNjc2lfcmVzdWx0KSkgewogCQlzY3BudC0+cmVzdWx0ID0gc2NzaV9yZXN1bHQ7Ci0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfcmVzdWx0KCJmYWlsIiwgNCwgYWRhcHRlciwgc2NwbnQsIE5VTEwpOworCQl6ZmNwX2RiZl9zY3NpX3Jlc3VsdCgiZmFpbCIsIDQsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwpOwogCQlzY3BudC0+c2NzaV9kb25lKHNjcG50KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTgwLDggKzE4MSw4IEBACiAJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwogCWlmICghb2xkX3JlcSkgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWJvcnRfbG9jaywgZmxhZ3MpOwotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2Fib3J0KCJsdGUxIiwgYWRhcHRlciwgc2NwbnQsIE5VTEwsCi0JCQkJCSAgb2xkX3JlcWlkKTsKKwkJemZjcF9kYmZfc2NzaV9hYm9ydCgibHRlMSIsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwsCisJCQkJICAgIG9sZF9yZXFpZCk7CiAJCXJldHVybiBGQUlMRUQ7IC8qIGNvbXBsZXRpb24gY291bGQgYmUgaW4gcHJvZ3Jlc3MgKi8KIAl9CiAJb2xkX3JlcS0+ZGF0YSA9IE5VTEw7CkBAIC0xOTcsMTYgKzE5OCwxNSBAQAogCQl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCQlpZiAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCiAJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSkgewotCQkJemZjcF9zY3NpX2RiZl9ldmVudF9hYm9ydCgibnJlcyIsIGFkYXB0ZXIsIHNjcG50LCBOVUxMLAotCQkJCQkJICBvbGRfcmVxaWQpOworCQkJemZjcF9kYmZfc2NzaV9hYm9ydCgibnJlcyIsIGFkYXB0ZXItPmRiZiwgc2NwbnQsIE5VTEwsCisJCQkJCSAgICBvbGRfcmVxaWQpOwogCQkJcmV0dXJuIFNVQ0NFU1M7CiAJCX0KIAl9CiAJaWYgKCFhYnJ0X3JlcSkKIAkJcmV0dXJuIEZBSUxFRDsKIAotCXdhaXRfZXZlbnQoYWJydF9yZXEtPmNvbXBsZXRpb25fd3EsCi0JCSAgIGFicnRfcmVxLT5zdGF0dXMgJiBaRkNQX1NUQVRVU19GU0ZSRVFfQ09NUExFVEVEKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhYnJ0X3JlcS0+Y29tcGxldGlvbik7CiAKIAlpZiAoYWJydF9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9BQk9SVFNVQ0NFRURFRCkKIAkJZGJmX3RhZyA9ICJva2F5IjsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQlkYmZfdGFnID0gImZhaWwiOwogCQlyZXR2YWwgPSBGQUlMRUQ7CiAJfQotCXpmY3Bfc2NzaV9kYmZfZXZlbnRfYWJvcnQoZGJmX3RhZywgYWRhcHRlciwgc2NwbnQsIGFicnRfcmVxLCBvbGRfcmVxaWQpOworCXpmY3BfZGJmX3Njc2lfYWJvcnQoZGJmX3RhZywgYWRhcHRlci0+ZGJmLCBzY3BudCwgYWJydF9yZXEsIG9sZF9yZXFpZCk7CiAJemZjcF9mc2ZfcmVxX2ZyZWUoYWJydF9yZXEpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0yMjUsNyArMjI1LDcgQEAKIHsKIAlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxID0gTlVMTDsKIAlpbnQgcmV0dmFsID0gU1VDQ0VTUzsKIAlpbnQgcmV0cnkgPSAzOwogCkBAIC0yMzcsMjUgKzIzNywyMyBAQAogCQl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCQlpZiAoIShhdG9taWNfcmVhZCgmYWRhcHRlci0+c3RhdHVzKSAmCiAJCSAgICAgIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HKSkgewotCQkJemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldCgibnJlcyIsIHRtX2ZsYWdzLCB1bml0LAotCQkJCQkJICAgICBzY3BudCk7CisJCQl6ZmNwX2RiZl9zY3NpX2RldnJlc2V0KCJucmVzIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKIAkJCXJldHVybiBTVUNDRVNTOwogCQl9CiAJfQogCWlmICghZnNmX3JlcSkKIAkJcmV0dXJuIEZBSUxFRDsKIAotCXdhaXRfZXZlbnQoZnNmX3JlcS0+Y29tcGxldGlvbl93cSwKLQkJICAgZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX0NPTVBMRVRFRCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZnNmX3JlcS0+Y29tcGxldGlvbik7CiAKIAlpZiAoZnNmX3JlcS0+c3RhdHVzICYgWkZDUF9TVEFUVVNfRlNGUkVRX1RNRlVOQ0ZBSUxFRCkgewotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJmYWlsIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKKwkJemZjcF9kYmZfc2NzaV9kZXZyZXNldCgiZmFpbCIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CiAJCXJldHZhbCA9IEZBSUxFRDsKIAl9IGVsc2UgaWYgKGZzZl9yZXEtPnN0YXR1cyAmIFpGQ1BfU1RBVFVTX0ZTRlJFUV9UTUZVTkNOT1RTVVBQKSB7Ci0JCXpmY3Bfc2NzaV9kYmZfZXZlbnRfZGV2cmVzZXQoIm5zdXAiLCB0bV9mbGFncywgdW5pdCwgc2NwbnQpOworCQl6ZmNwX2RiZl9zY3NpX2RldnJlc2V0KCJuc3VwIiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKIAkJcmV0dmFsID0gRkFJTEVEOwogCX0gZWxzZQotCQl6ZmNwX3Njc2lfZGJmX2V2ZW50X2RldnJlc2V0KCJva2F5IiwgdG1fZmxhZ3MsIHVuaXQsIHNjcG50KTsKKwkJemZjcF9kYmZfc2NzaV9kZXZyZXNldCgib2theSIsIHRtX2ZsYWdzLCB1bml0LCBzY3BudCk7CiAKIAl6ZmNwX2ZzZl9yZXFfZnJlZShmc2ZfcmVxKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNDMwLDcgKzQyOCw3IEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldCA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKGFkYXB0ZXIsIGRhdGEpOworCXJldCA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKGFkYXB0ZXItPnFkaW8sIGRhdGEpOwogCWlmIChyZXQpIHsKIAkJa2ZyZWUoZGF0YSk7CiAJCXJldHVybiBOVUxMOwpAQCAtNDU5LDcgKzQ1Nyw3IEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CiAKLQlyZXQgPSB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfc3luYyhhZGFwdGVyLCBkYXRhKTsKKwlyZXQgPSB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfc3luYyhhZGFwdGVyLT5xZGlvLCBkYXRhKTsKIAlpZiAocmV0KQogCQlrZnJlZShkYXRhKTsKIAllbHNlIHsKQEAgLTQ5MywyMSArNDkxLDYgQEAKIH0KIAogLyoqCi0gKiB6ZmNwX3Njc2lfZGV2X2xvc3NfdG1vX2NhbGxiayAtIEZyZWUgYW55IHJlZmVyZW5jZSB0byBycG9ydAotICogQHJwb3J0OiBUaGUgcnBvcnQgdGhhdCBpcyBhYm91dCB0byBiZSBkZWxldGVkLgotICovCi1zdGF0aWMgdm9pZCB6ZmNwX3Njc2lfZGV2X2xvc3NfdG1vX2NhbGxiayhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQotewotCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7Ci0KLQl3cml0ZV9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQlwb3J0ID0gcnBvcnQtPmRkX2RhdGE7Ci0JaWYgKHBvcnQpCi0JCXBvcnQtPnJwb3J0ID0gTlVMTDsKLQl3cml0ZV91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwotfQotCi0vKioKICAqIHpmY3Bfc2NzaV90ZXJtaW5hdGVfcnBvcnRfaW8gLSBUZXJtaW5hdGUgYWxsIEkvTyBvbiBhIHJwb3J0CiAgKiBAcnBvcnQ6IFRoZSBGQyBycG9ydCB3aGVyZSB0byB0ZW1pbmF0ZSBJL08KICAqCkBAIC01MTgsOSArNTAxLDEyIEBACiBzdGF0aWMgdm9pZCB6ZmNwX3Njc2lfdGVybWluYXRlX3Jwb3J0X2lvKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCiB7CiAJc3RydWN0IHpmY3BfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0KKwkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKilzaG9zdC0+aG9zdGRhdGFbMF07CiAKIAl3cml0ZV9sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKLQlwb3J0ID0gcnBvcnQtPmRkX2RhdGE7CisJcG9ydCA9IHpmY3BfZ2V0X3BvcnRfYnlfd3dwbihhZGFwdGVyLCBycG9ydC0+cG9ydF9uYW1lKTsKIAlpZiAocG9ydCkKIAkJemZjcF9wb3J0X2dldChwb3J0KTsKIAl3cml0ZV91bmxvY2tfaXJxKCZ6ZmNwX2RhdGEuY29uZmlnX2xvY2spOwpAQCAtNTUyLDcgKzUzOCw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlycG9ydC0+ZGRfZGF0YSA9IHBvcnQ7CiAJcnBvcnQtPm1heGZyYW1lX3NpemUgPSBwb3J0LT5tYXhmcmFtZV9zaXplOwogCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IHBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzOwogCXBvcnQtPnJwb3J0ID0gcnBvcnQ7CkBAIC01NzMsNyArNTU4LDcgQEAKIAl6ZmNwX3BvcnRfZ2V0KHBvcnQpOwogCXBvcnQtPnJwb3J0X3Rhc2sgPSBSUE9SVF9BREQ7CiAKLQlpZiAoIXF1ZXVlX3dvcmsoemZjcF9kYXRhLndvcmtfcXVldWUsICZwb3J0LT5ycG9ydF93b3JrKSkKKwlpZiAoIXF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwgJnBvcnQtPnJwb3J0X3dvcmspKQogCQl6ZmNwX3BvcnRfcHV0KHBvcnQpOwogfQogCkBAIC01ODIsOCArNTY3LDExIEBACiAJemZjcF9wb3J0X2dldChwb3J0KTsKIAlwb3J0LT5ycG9ydF90YXNrID0gUlBPUlRfREVMOwogCi0JaWYgKCFxdWV1ZV93b3JrKHpmY3BfZGF0YS53b3JrX3F1ZXVlLCAmcG9ydC0+cnBvcnRfd29yaykpCi0JCXpmY3BfcG9ydF9wdXQocG9ydCk7CisJaWYgKHBvcnQtPnJwb3J0ICYmIHF1ZXVlX3dvcmsocG9ydC0+YWRhcHRlci0+d29ya19xdWV1ZSwKKwkJCQkgICAgICAmcG9ydC0+cnBvcnRfd29yaykpCisJCXJldHVybjsKKworCXpmY3BfcG9ydF9wdXQocG9ydCk7CiB9CiAKIHZvaWQgemZjcF9zY3NpX3NjaGVkdWxlX3Jwb3J0c19ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQpAQCAtNjYyLDcgKzY1MCw2IEBACiAJLnJlc2V0X2ZjX2hvc3Rfc3RhdHMgPSB6ZmNwX3Jlc2V0X2ZjX2hvc3Rfc3RhdHMsCiAJLnNldF9ycG9ydF9kZXZfbG9zc190bW8gPSB6ZmNwX3NldF9ycG9ydF9kZXZfbG9zc190bW8sCiAJLmdldF9ob3N0X3BvcnRfc3RhdGUgPSB6ZmNwX2dldF9ob3N0X3BvcnRfc3RhdGUsCi0JLmRldl9sb3NzX3Rtb19jYWxsYmsgPSB6ZmNwX3Njc2lfZGV2X2xvc3NfdG1vX2NhbGxiaywKIAkudGVybWluYXRlX3Jwb3J0X2lvID0gemZjcF9zY3NpX3Rlcm1pbmF0ZV9ycG9ydF9pbywKIAkuc2hvd19ob3N0X3BvcnRfc3RhdGUgPSAxLAogCS5ic2dfcmVxdWVzdCA9IHpmY3BfZXhlY3V0ZV9mY19qb2IsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKaW5kZXggMGZlNWNjZS4uMDc5YThjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwpAQCAtODgsNyArODgsNyBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwkJCQkJCSAgICAgICBcCiAJaW50IHJldHZhbCA9IDA7CQkJCQkJCSAgICAgICBcCiAJCQkJCQkJCQkgICAgICAgXAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CQkJCQkgICAgICAgXAorCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwkJCQkgICAgICAgXAogCWlmIChhdG9taWNfcmVhZCgmX2ZlYXQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fUkVNT1ZFKSB7CSAgICAgICBcCiAJCXJldHZhbCA9IC1FQlVTWTsJCQkJCSAgICAgICBcCiAJCWdvdG8gb3V0OwkJCQkJCSAgICAgICBcCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJCQkgIF9yZW9wZW5faWQsIE5VTEwpOwkJCSAgICAgICBcCiAJemZjcF9lcnBfd2FpdChfYWRhcHRlcik7CQkJCQkgICAgICAgXAogb3V0OgkJCQkJCQkJCSAgICAgICBcCi0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CQkJCQkgICAgICAgXAorCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CQkJCSAgICAgICBcCiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsJCQkgICAgICAgXAogfQkJCQkJCQkJCSAgICAgICBcCiBzdGF0aWMgWkZDUF9ERVZfQVRUUihfZmVhdCwgZmFpbGVkLCBTX0lXVVNSIHwgU19JUlVHTywJCQkgICAgICAgXApAQCAtMTI2LDcgKzEyNiw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXJldCA9IHpmY3Bfc2Nhbl9wb3J0cyhhZGFwdGVyKTsKKwlyZXQgPSB6ZmNwX2ZjX3NjYW5fcG9ydHMoYWRhcHRlcik7CiAJcmV0dXJuIHJldCA/IHJldCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBaRkNQX0RFVl9BVFRSKGFkYXB0ZXIsIHBvcnRfcmVzY2FuLCBTX0lXVVNSLCBOVUxMLApAQCAtMTQyLDcgKzE0Miw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAJTElTVF9IRUFEKHBvcnRfcmVtb3ZlX2xoKTsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJaWYgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSkgewogCQlyZXR2YWwgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwpAQCAtMTczLDcgKzE3Myw3IEBACiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIAl6ZmNwX3BvcnRfZGVxdWV1ZShwb3J0KTsKICBvdXQ6Ci0JdXAoJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogKHNzaXplX3QpIGNvdW50OwogfQogc3RhdGljIFpGQ1BfREVWX0FUVFIoYWRhcHRlciwgcG9ydF9yZW1vdmUsIFNfSVdVU1IsIE5VTEwsCkBAIC0yMDcsNyArMjA3LDcgQEAKIAl1NjQgZmNwX2x1bjsKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAotCWRvd24oJnpmY3BfZGF0YS5jb25maWdfc2VtYSk7CisJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX1JFTU9WRSkgewogCQlyZXR2YWwgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKIAl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogb3V0OgotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X2FkZCwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X2FkZF9zdG9yZSk7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAlMSVNUX0hFQUQodW5pdF9yZW1vdmVfbGgpOwogCi0JZG93bigmemZjcF9kYXRhLmNvbmZpZ19zZW1hKTsKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlpZiAoYXRvbWljX3JlYWQoJnBvcnQtPnN0YXR1cykgJiBaRkNQX1NUQVRVU19DT01NT05fUkVNT1ZFKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC0yODIsNyArMjgyLDcgQEAKIAl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogCXpmY3BfdW5pdF9kZXF1ZXVlKHVuaXQpOwogb3V0OgotCXVwKCZ6ZmNwX2RhdGEuY29uZmlnX3NlbWEpOworCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IChzc2l6ZV90KSBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih1bml0X3JlbW92ZSwgU19JV1VTUiwgTlVMTCwgemZjcF9zeXNmc191bml0X3JlbW92ZV9zdG9yZSk7CkBAIC00MjUsNyArNDI1LDcgQEAKIAlpZiAoIXF0Y2JfcG9ydCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXR2YWwgPSB6ZmNwX2ZzZl9leGNoYW5nZV9wb3J0X2RhdGFfc3luYyhhZGFwdGVyLCBxdGNiX3BvcnQpOworCXJldHZhbCA9IHpmY3BfZnNmX2V4Y2hhbmdlX3BvcnRfZGF0YV9zeW5jKGFkYXB0ZXItPnFkaW8sIHF0Y2JfcG9ydCk7CiAJaWYgKCFyZXR2YWwpCiAJCXJldHZhbCA9IHNwcmludGYoYnVmLCAiJXUgJXUgJXVcbiIsIHF0Y2JfcG9ydC0+Y3BfdXRpbCwKIAkJCQkgcXRjYl9wb3J0LT5jYl91dGlsLCBxdGNiX3BvcnQtPmFfdXRpbCk7CkBAIC00NTEsNyArNDUxLDcgQEAKIAlpZiAoIXF0Y2JfY29uZmlnKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldHZhbCA9IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX3N5bmMoYWRhcHRlciwgcXRjYl9jb25maWcpOworCXJldHZhbCA9IHpmY3BfZnNmX2V4Y2hhbmdlX2NvbmZpZ19kYXRhX3N5bmMoYWRhcHRlci0+cWRpbywgcXRjYl9jb25maWcpOwogCWlmICghcmV0dmFsKQogCQkqc3RhdF9pbmYgPSBxdGNiX2NvbmZpZy0+c3RhdF9pbmZvOwogCkBAIC00OTIsMTUgKzQ5MiwxNSBAQAogCQkJCQkgICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2NzaV9ob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0KLQkJKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKikgc2NzaV9ob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0KKwkJKChzdHJ1Y3QgemZjcF9hZGFwdGVyICopIHNjc2lfaG9zdC0+aG9zdGRhdGFbMF0pLT5xZGlvOwogCXU2NCB1dGlsOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5xZGlvX3N0YXRfbG9jayk7Ci0JdXRpbCA9IGFkYXB0ZXItPnJlcV9xX3V0aWw7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnFkaW9fc3RhdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnFkaW8tPnN0YXRfbG9jayk7CisJdXRpbCA9IHFkaW8tPnJlcV9xX3V0aWw7CisJc3Bpbl91bmxvY2tfYmgoJnFkaW8tPnN0YXRfbG9jayk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZCAlbGx1XG4iLCBhdG9taWNfcmVhZCgmYWRhcHRlci0+cWRpb19vdXRiX2Z1bGwpLAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkICVsbHVcbiIsIGF0b21pY19yZWFkKCZxZGlvLT5yZXFfcV9mdWxsKSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdXRpbCk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIocXVldWVfZnVsbCwgU19JUlVHTywgemZjcF9zeXNmc19hZGFwdGVyX3FfZnVsbF9zaG93LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggOWMyMzEyMi4uODJiYjNiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTE4MTEsNiArMTgxMSwxMiBAQAogICAgICAgICAgIGNhbGxlZCB6ZmNwLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBzYXkgTSBoZXJlCiAgICAgICAgICAgYW5kIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9rYnVpbGQvbW9kdWxlcy50eHQ+LgogCitjb25maWcgU0NTSV9QTUNSQUlECisJdHJpc3RhdGUgIlBNQyBTSUVSUkEgTGludXggTWF4UkFJRCBhZGFwdGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBQTUMgU0lFUlJBIE1heFJBSUQgYWRhcHRlcnMuCisKIGNvbmZpZyBTQ1NJX1NSUAogCXRyaXN0YXRlICJTQ1NJIFJETUEgUHJvdG9jb2wgaGVscGVyIGxpYnJhcnkiCiAJZGVwZW5kcyBvbiBTQ1NJICYmIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCmluZGV4IDI1NDI5ZWEuLjYxYTk0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKQEAgLTEzMCw2ICsxMzAsNyBAQAogb2JqLSQoQ09ORklHX1BTM19ST00pCQkrPSBwczNyb20ubwogb2JqLSQoQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kpCSs9IGxpYmlzY3NpLm8gbGliaXNjc2lfdGNwLm8gY3hnYjNpLwogb2JqLSQoQ09ORklHX1NDU0lfQk5YMl9JU0NTSSkJKz0gbGliaXNjc2kubyBibngyaS8KK29iai0kKENPTkZJR19TQ1NJX1BNQ1JBSUQpCSs9IHBtY3JhaWQubwogCiBvYmotJChDT05GSUdfQVJNKQkJKz0gYXJtLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2luaXQuYwppbmRleCBhZTRiMmQ1Li4wYzQyMTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pbml0LmMKQEAgLTE1LDExICsxNSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBhZGFwdGVyX2xpc3QgPSBMSVNUX0hFQURfSU5JVChhZGFwdGVyX2xpc3QpOwogc3RhdGljIHUzMiBhZGFwdGVyX2NvdW50Owotc3RhdGljIGludCBibngyaV9yZWdfZGV2aWNlOwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJpIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjIuMC4xZCIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXIgMjUsIDIwMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjFlIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1bmUgMjIsIDIwMDkiCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KIAkJIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBpU0NTSSBEcml2ZXIgIiBEUlZfTU9EVUxFX05BTUUgXApAQCAtMzEsNyArMzAsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX01PRFVMRV9WRVJTSU9OKTsKIAotc3RhdGljIERFRklORV9SV0xPQ0soYm54MmlfZGV2X2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChibngyaV9kZXZfbG9jayk7CiAKIHVuc2lnbmVkIGludCBldmVudF9jb2FsX2RpdiA9IDE7CiBtb2R1bGVfcGFyYW0oZXZlbnRfY29hbF9kaXYsIGludCwgMDY2NCk7CkBAIC0xMDAsMTQgKzk5LDE0IEBACiAJaWYgKCFhZGFwdGVyX2NvdW50KQogCQlnb3RvIGhiYV9ub3RfZm91bmQ7CiAKLQlyZWFkX2xvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF9sb2NrKCZibngyaV9kZXZfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfaGJhLCAmYWRhcHRlcl9saXN0LCBsaW5rKSB7CiAJCWlmICh0bXBfaGJhLT5jbmljICYmIHRtcF9oYmEtPmNuaWMtPmNtX3NlbGVjdF9kZXYpIHsKIAkJCWhiYSA9IHRtcF9oYmE7CiAJCQlicmVhazsKIAkJfQogCX0KLQlyZWFkX3VubG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X3VubG9jaygmYm54MmlfZGV2X2xvY2spOwogaGJhX25vdF9mb3VuZDoKIAlyZXR1cm4gaGJhOwogfQpAQCAtMTIyLDE0ICsxMjEsMTQgQEAKIHsKIAlzdHJ1Y3QgYm54MmlfaGJhICpoYmEsICp0ZW1wOwogCi0JcmVhZF9sb2NrKCZibngyaV9kZXZfbG9jayk7CisJbXV0ZXhfbG9jaygmYm54MmlfZGV2X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShoYmEsIHRlbXAsICZhZGFwdGVyX2xpc3QsIGxpbmspIHsKIAkJaWYgKGhiYS0+Y25pYyA9PSBjbmljKSB7Ci0JCQlyZWFkX3VubG9jaygmYm54MmlfZGV2X2xvY2spOworCQkJbXV0ZXhfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CiAJCQlyZXR1cm4gaGJhOwogCQl9CiAJfQotCXJlYWRfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE4NiwxOCArMTg1LDE3IEBACiAgKi8KIHZvaWQgYm54MmlfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBibngyaV9oYmEgKmhiYSkKIHsKKwlpbnQgcmM7CisKIAlpZiAodGVzdF9iaXQoQURBUFRFUl9TVEFURV9HT0lOR19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKSB8fAogCSAgICB0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpKSB7CiAJCXJldHVybjsKIAl9CiAKLQloYmEtPmNuaWMtPnJlZ2lzdGVyX2RldmljZShoYmEtPmNuaWMsIENOSUNfVUxQX0lTQ1NJLCBoYmEpOworCXJjID0gaGJhLT5jbmljLT5yZWdpc3Rlcl9kZXZpY2UoaGJhLT5jbmljLCBDTklDX1VMUF9JU0NTSSwgaGJhKTsKIAotCXNwaW5fbG9jaygmaGJhLT5sb2NrKTsKLQlibngyaV9yZWdfZGV2aWNlKys7Ci0Jc3Bpbl91bmxvY2soJmhiYS0+bG9jayk7Ci0KLQlzZXRfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYyk7CisJaWYgKCFyYykKKwkJc2V0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpOwogfQogCiAKQEAgLTIxMSwxMCArMjA5LDEwIEBACiB7CiAJc3RydWN0IGJueDJpX2hiYSAqaGJhLCAqdGVtcDsKIAotCXJlYWRfbG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X2xvY2soJmJueDJpX2Rldl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGJhLCB0ZW1wLCAmYWRhcHRlcl9saXN0LCBsaW5rKQogCQlibngyaV9yZWdpc3Rlcl9kZXZpY2UoaGJhKTsKLQlyZWFkX3VubG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X3VubG9jaygmYm54MmlfZGV2X2xvY2spOwogfQogCiAKQEAgLTIzNCwxMCArMjMyLDYgQEAKIAogCWhiYS0+Y25pYy0+dW5yZWdpc3Rlcl9kZXZpY2UoaGJhLT5jbmljLCBDTklDX1VMUF9JU0NTSSk7CiAKLQlzcGluX2xvY2soJmhiYS0+bG9jayk7Ci0JYm54MmlfcmVnX2RldmljZS0tOwotCXNwaW5fdW5sb2NrKCZoYmEtPmxvY2spOwotCiAJLyogZXBfZGlzY29ubmVjdCBjb3VsZCBjb21lIGJlZm9yZSBORVRERVZfRE9XTiwgZHJpdmVyIHdvbid0CiAJICogc2VlIE5FVERFVl9ET1dOIGFzIGl0IGFscmVhZHkgdW5yZWdpc3RlcmVkIGl0c2VsZi4KIAkgKi8KQEAgLTI1NSwxMCArMjQ5LDEwIEBACiB7CiAJc3RydWN0IGJueDJpX2hiYSAqaGJhLCAqdGVtcDsKIAotCXJlYWRfbG9jaygmYm54MmlfZGV2X2xvY2spOworCW11dGV4X2xvY2soJmJueDJpX2Rldl9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGJhLCB0ZW1wLCAmYWRhcHRlcl9saXN0LCBsaW5rKQogCQlibngyaV91bnJlZ19vbmVfZGV2aWNlKGhiYSk7Ci0JcmVhZF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKIH0KIAogCkBAIC0yNjcsMzUgKzI2MSwzNCBAQAogICogQGhiYToJYm54MmkgYWRhcHRlciBpbnN0YW5jZQogICogQGNuaWM6CWNuaWMgZGV2aWNlIGhhbmRsZQogICoKLSAqIEdsb2JhbCByZXNvdXJjZSBsb2NrIGFuZCBob3N0IGFkYXB0ZXIgbG9jayBpcyBoZWxkIGR1cmluZyBjcml0aWNhbCBzZWN0aW9ucwotICoJYmVsb3cuIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBjbmljX3JlZ2lzdGVyX2RyaXZlcigpIGNvbnRleHQgYW5kCi0gKgl3b3JrIGhvcnNlIHRocmVhZCB3aGljaCBkb2VzIG1ham9yaXR5IG9mIGRldmljZSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbgorICogR2xvYmFsIHJlc291cmNlIGxvY2sgaXMgaGVsZCBkdXJpbmcgY3JpdGljYWwgc2VjdGlvbnMgYmVsb3cuIFRoaXMgcm91dGluZSBpcworICoJY2FsbGVkIGZyb20gZWl0aGVyIGNuaWNfcmVnaXN0ZXJfZHJpdmVyKCkgb3IgZGV2aWNlIGhvdCBwbHVnIGNvbnRleHQgYW5kCisgKglhbmQgZG9lcyBtYWpvcml0eSBvZiBkZXZpY2Ugc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24KICAqLwogc3RhdGljIGludCBibngyaV9pbml0X29uZShzdHJ1Y3QgYm54MmlfaGJhICpoYmEsIHN0cnVjdCBjbmljX2RldiAqY25pYykKIHsKIAlpbnQgcmM7CiAKLQlyZWFkX2xvY2soJmJueDJpX2Rldl9sb2NrKTsKLQlpZiAoYm54MmlfcmVnX2RldmljZSAmJgotCSAgICAhdGVzdF9iaXQoQk5YMklfQ05JQ19SRUdJU1RFUkVELCAmaGJhLT5yZWdfd2l0aF9jbmljKSkgewotCQlyYyA9IGNuaWMtPnJlZ2lzdGVyX2RldmljZShjbmljLCBDTklDX1VMUF9JU0NTSSwgaGJhKTsKLQkJaWYgKHJjKQkJLyogZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJibngyaS0gZGV2IHJlZyBmYWlsZWRcbiIpOwotCi0JCXNwaW5fbG9jaygmaGJhLT5sb2NrKTsKLQkJYm54MmlfcmVnX2RldmljZSsrOworCW11dGV4X2xvY2soJmJueDJpX2Rldl9sb2NrKTsKKwlyYyA9IGNuaWMtPnJlZ2lzdGVyX2RldmljZShjbmljLCBDTklDX1VMUF9JU0NTSSwgaGJhKTsKKwlpZiAoIXJjKSB7CiAJCWhiYS0+YWdlKys7Ci0JCXNwaW5fdW5sb2NrKCZoYmEtPmxvY2spOwotCiAJCXNldF9iaXQoQk5YMklfQ05JQ19SRUdJU1RFUkVELCAmaGJhLT5yZWdfd2l0aF9jbmljKTsKLQl9Ci0JcmVhZF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmaGJhLT5saW5rLCAmYWRhcHRlcl9saXN0KTsKKwkJYWRhcHRlcl9jb3VudCsrOworCX0gZWxzZSBpZiAocmMgPT0gLUVCVVNZKSAJLyogZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiAqLworCQlwcmludGsoS0VSTl9BTEVSVCAiYm54MmksIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24iCisJCQkJICAiaGJhPSVwLCBjbmljPSVwXG4iLCBoYmEsIGNuaWMpOworCWVsc2UgaWYgKHJjID09IC1FQUdBSU4pCisJCXByaW50ayhLRVJOX0VSUiAiYm54MmksIGRyaXZlciBub3QgcmVnaXN0ZXJlZFxuIik7CisJZWxzZSBpZiAocmMgPT0gLUVJTlZBTCkKKwkJcHJpbnRrKEtFUk5fRVJSICJibngyaSwgaW52YWxpZCB0eXBlICVkXG4iLCBDTklDX1VMUF9JU0NTSSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImJueDJpIGRldiByZWcsIHVua25vd24gZXJyb3IsICVkXG4iLCByYyk7CiAKLQl3cml0ZV9sb2NrKCZibngyaV9kZXZfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmaGJhLT5saW5rLCAmYWRhcHRlcl9saXN0KTsKLQlhZGFwdGVyX2NvdW50Kys7Ci0Jd3JpdGVfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZibngyaV9kZXZfbG9jayk7CisKKwlyZXR1cm4gcmM7CiB9CiAKIApAQCAtMzQzLDE5ICszMzYsMTUgQEAKIAkJCQkgImZvdW5kLCBkZXYgMHglcFxuIiwgZGV2KTsKIAkJcmV0dXJuOwogCX0KLQl3cml0ZV9sb2NrKCZibngyaV9kZXZfbG9jayk7CisJbXV0ZXhfbG9jaygmYm54MmlfZGV2X2xvY2spOwogCWxpc3RfZGVsX2luaXQoJmhiYS0+bGluayk7CiAJYWRhcHRlcl9jb3VudC0tOwogCiAJaWYgKHRlc3RfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYykpIHsKIAkJaGJhLT5jbmljLT51bnJlZ2lzdGVyX2RldmljZShoYmEtPmNuaWMsIENOSUNfVUxQX0lTQ1NJKTsKIAkJY2xlYXJfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYyk7Ci0KLQkJc3Bpbl9sb2NrKCZoYmEtPmxvY2spOwotCQlibngyaV9yZWdfZGV2aWNlLS07Ci0JCXNwaW5fdW5sb2NrKCZoYmEtPmxvY2spOwogCX0KLQl3cml0ZV91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKIAogCWJueDJpX2ZyZWVfaGJhKGhiYSk7CiB9CkBAIC0zNzcsNiArMzY2LDggQEAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoc3Ffc2l6ZSkpCiAJCXNxX3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28oc3Ffc2l6ZSk7CiAKKwltdXRleF9pbml0KCZibngyaV9kZXZfbG9jayk7CisKIAlibngyaV9zY3NpX3hwb3J0X3RlbXBsYXRlID0KIAkJCWlzY3NpX3JlZ2lzdGVyX3RyYW5zcG9ydCgmYm54MmlfaXNjc2lfdHJhbnNwb3J0KTsKIAlpZiAoIWJueDJpX3Njc2lfeHBvcnRfdGVtcGxhdGUpIHsKQEAgLTQxMiw3ICs0MDMsNyBAQAogewogCXN0cnVjdCBibngyaV9oYmEgKmhiYTsKIAotCXdyaXRlX2xvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF9sb2NrKCZibngyaV9kZXZfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZhZGFwdGVyX2xpc3QpKSB7CiAJCWhiYSA9IGxpc3RfZW50cnkoYWRhcHRlcl9saXN0Lm5leHQsIHN0cnVjdCBibngyaV9oYmEsIGxpbmspOwogCQlsaXN0X2RlbCgmaGJhLT5saW5rKTsKQEAgLTQyMSwxNCArNDEyLDExIEBACiAJCWlmICh0ZXN0X2JpdChCTlgySV9DTklDX1JFR0lTVEVSRUQsICZoYmEtPnJlZ193aXRoX2NuaWMpKSB7CiAJCQloYmEtPmNuaWMtPnVucmVnaXN0ZXJfZGV2aWNlKGhiYS0+Y25pYywgQ05JQ19VTFBfSVNDU0kpOwogCQkJY2xlYXJfYml0KEJOWDJJX0NOSUNfUkVHSVNURVJFRCwgJmhiYS0+cmVnX3dpdGhfY25pYyk7Ci0JCQlibngyaV9yZWdfZGV2aWNlLS07CiAJCX0KIAotCQl3cml0ZV91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKIAkJYm54MmlfZnJlZV9oYmEoaGJhKTsKLQkJd3JpdGVfbG9jaygmYm54MmlfZGV2X2xvY2spOwogCX0KLQl3cml0ZV91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKKwltdXRleF91bmxvY2soJmJueDJpX2Rldl9sb2NrKTsKIAogCWlzY3NpX3VucmVnaXN0ZXJfdHJhbnNwb3J0KCZibngyaV9pc2NzaV90cmFuc3BvcnQpOwogCWNuaWNfdW5yZWdpc3Rlcl9kcml2ZXIoQ05JQ19VTFBfSVNDU0kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwppbmRleCBmNzQxMjE5Li45YTdiYTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaXNjc2kuYwpAQCAtMzg3LDYgKzM4Nyw3IEBACiAJYm54MmlfZXAgPSBlcC0+ZGRfZGF0YTsKIAlJTklUX0xJU1RfSEVBRCgmYm54MmlfZXAtPmxpbmspOwogCWJueDJpX2VwLT5zdGF0ZSA9IEVQX1NUQVRFX0lETEU7CisJYm54MmlfZXAtPmVwX2lzY3NpX2NpZCA9ICh1MTYpIC0xOwogCWJueDJpX2VwLT5oYmEgPSBoYmE7CiAJYm54MmlfZXAtPmhiYV9hZ2UgPSBoYmEtPmFnZTsKIAloYmEtPm9mbGRfY29ubnNfYWN0aXZlKys7CkBAIC0xMTYwLDkgKzExNjEsNiBAQAogCXN0cnVjdCBibngyaV9jbWQgKmNtZCA9IHRhc2stPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2NtZCAqaGRyID0gKHN0cnVjdCBpc2NzaV9jbWQgKikgdGFzay0+aGRyOwogCi0JaWYgKHRlc3RfYml0KEFEQVBURVJfU1RBVEVfTElOS19ET1dOLCAmaGJhLT5hZGFwdGVyX3N0YXRlKSkKLQkJcmV0dXJuIC1FTk9UQ09OTjsKLQogCWlmICghYm54MmlfY29ubi0+aXNfYm91bmQpCiAJCXJldHVybiAtRU5PVENPTk47CiAKQEAgLTE2NTMsMTUgKzE2NTEsMTggQEAKIAlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOwogCWludCByYyA9IDA7CiAKLQlpZiAoc2hvc3QpCisJaWYgKHNob3N0KSB7CiAJCS8qIGRyaXZlciBpcyBnaXZlbiBzY3NpIGhvc3QgdG8gd29yayB3aXRoICovCiAJCWhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7Ci0JZWxzZQorCQkvKiBSZWdpc3RlciB0aGUgZGV2aWNlIHdpdGggY25pYyBpZiBub3QgYWxyZWFkeSBkb25lIHNvICovCisJCWJueDJpX3JlZ2lzdGVyX2RldmljZShoYmEpOworCX0gZWxzZQogCQkvKgogCQkgKiBjaGVjayBpZiB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gY2FuIGJlIHJlYWNoZWQgdGhyb3VnaAogCQkgKiBhIGlzY3NpIGNhcGFibGUgTmV0WHRyZW1lMiBkZXZpY2UKIAkJICovCiAJCWhiYSA9IGJueDJpX2NoZWNrX3JvdXRlKGRzdF9hZGRyKTsKKwogCWlmICghaGJhKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBjaGVja19idXN5OwpAQCAtMTY4MSw4ICsxNjgyLDYgQEAKIAkJZ290byBuZXRfaWZfZG93bjsKIAl9CiAKLQlibngyaV9lcC0+c3RhdGUgPSBFUF9TVEFURV9JRExFOwotCWJueDJpX2VwLT5lcF9pc2NzaV9jaWQgPSAodTE2KSAtMTsKIAlibngyaV9lcC0+bnVtX2FjdGl2ZV9jbWRzID0gMDsKIAlpc2NzaV9jaWQgPSBibngyaV9hbGxvY19pc2NzaV9jaWQoaGJhKTsKIAlpZiAoaXNjc2lfY2lkID09IC0xKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY2guYyBiL2RyaXZlcnMvc2NzaS9jaC5jCmluZGV4IDdiMTYzM2EuLmZlMTFjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9jaC5jCkBAIC0zNTMsNiArMzUzLDEyIEBACiAJLyogbG9vayB1cCB0aGUgZGV2aWNlcyBvZiB0aGUgZGF0YSB0cmFuc2ZlciBlbGVtZW50cyAqLwogCWNoLT5kdCA9IGttYWxsb2MoY2gtPmNvdW50c1tDSEVUX0RUXSpzaXplb2Yoc3RydWN0IHNjc2lfZGV2aWNlKSwKIAkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghY2gtPmR0KSB7CisJCWtmcmVlKGJ1ZmZlcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCWZvciAoZWxlbSA9IDA7IGVsZW0gPCBjaC0+Y291bnRzW0NIRVRfRFRdOyBlbGVtKyspIHsKIAkJaWQgID0gLTE7CiAJCWx1biA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMgYi9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKaW5kZXggZTc5ZTE4MS4uNjNhYmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCisrKyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwpAQCAtNCw4ICs0LDcgQEAKICAqIEFkZGl0aW9ucyBmb3IgU0NTSSAyIGFuZCBMaW51eCAyLjIueCBieSBELiBHaWxiZXJ0ICg5OTA0MjIpCiAgKiBBZGRpdGlvbnMgZm9yIFNDU0kgMysgKFNQQy0zIFQxMC8xNDE2LUQgUmV2IDA3IDMgTWF5IDIwMDIpCiAgKiAgIGJ5IEQuIEdpbGJlcnQgYW5kIGFlYiAoMjAwMjA2MDkpCi0gKiBBZGRpdGlvbnMgZm9yIFNQQy0zIFQxMC8xNDE2LUQgUmV2IDIxIDIyIFNlcHQgMjAwNCwgRC4gR2lsYmVydCAyMDA0MTAyNQotICogVXBkYXRlIHRvIFNQQy00IFQxMC8xNzEzLUQgUmV2IDVhLCAxNCBKdW5lIDIwMDYsIEQuIEdpbGJlcnQgMjAwNjA3MDIKKyAqIFVwZGF0ZSB0byBTUEMtNCBUMTAvMTcxMy1EIFJldiAyMCwgMjIgTWF5IDIwMDksIEQuIEdpbGJlcnQgMjAwOTA2MjQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CkBAIC01Niw5ICs1NSw5IEBACiAgICAgICAgICAgICAiUmVhZCBCdWZmZXIiLCAKIC8qIDNkLTNmICovICJVcGRhdGUgQmxvY2siLCAiUmVhZCBMb25nKDEwKSIsICAiV3JpdGUgTG9uZygxMCkiLAogLyogNDAtNDEgKi8gIkNoYW5nZSBEZWZpbml0aW9uIiwgIldyaXRlIFNhbWUoMTApIiwKLS8qIDQyLTQ4ICovICJSZWFkIHN1Yi1jaGFubmVsIiwgIlJlYWQgVE9DL1BNQS9BVElQIiwgIlJlYWQgZGVuc2l0eSBzdXBwb3J0IiwKLSAgICAgICAgICAgICJQbGF5IGF1ZGlvKDEwKSIsICJHZXQgY29uZmlndXJhdGlvbiIsICJQbGF5IGF1ZGlvIG1zZiIsCi0gICAgICAgICAgICAiUGxheSBhdWRpbyB0cmFjay9pbmRleCIsCisvKiA0Mi00OCAqLyAiVW5tYXAvUmVhZCBzdWItY2hhbm5lbCIsICJSZWFkIFRPQy9QTUEvQVRJUCIsCisJICAgICJSZWFkIGRlbnNpdHkgc3VwcG9ydCIsICJQbGF5IGF1ZGlvKDEwKSIsICJHZXQgY29uZmlndXJhdGlvbiIsCisJICAgICJQbGF5IGF1ZGlvIG1zZiIsICJQbGF5IGF1ZGlvIHRyYWNrL2luZGV4IiwKIC8qIDQ5LTRmICovICJQbGF5IHRyYWNrIHJlbGF0aXZlKDEwKSIsICJHZXQgZXZlbnQgc3RhdHVzIG5vdGlmaWNhdGlvbiIsCiAgICAgICAgICAgICAiUGF1c2UvcmVzdW1lIiwgIkxvZyBTZWxlY3QiLCAiTG9nIFNlbnNlIiwgIlN0b3AgcGxheS9zY2FuIiwKICAgICAgICAgICAgIE5VTEwsCkBAIC03MSwxMiArNzAsMTMgQEAKIC8qIDYwLTY3ICovIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCiAvKiA2OC02ZiAqLyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAogLyogNzAtNzcgKi8gTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLS8qIDc4LTdmICovIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJWYXJpYWJsZSBsZW5ndGgiLAorLyogNzgtN2YgKi8gTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIkV4dGVuZGVkIENEQiIsCisJICAgICJWYXJpYWJsZSBsZW5ndGgiLAogLyogODAtODQgKi8gIlhkd3JpdGUoMTYpIiwgIlJlYnVpbGQoMTYpIiwgIlJlZ2VuZXJhdGUoMTYpIiwgIkV4dGVuZGVkIGNvcHkiLAogICAgICAgICAgICAgIlJlY2VpdmUgY29weSByZXN1bHRzIiwKIC8qIDg1LTg5ICovICJBVEEgY29tbWFuZCBwYXNzIHRocm91Z2goMTYpIiwgIkFjY2VzcyBjb250cm9sIGluIiwKIAkgICAgIkFjY2VzcyBjb250cm9sIG91dCIsICJSZWFkKDE2KSIsICJNZW1vcnkgRXhwb3J0IE91dCgxNikiLAotLyogOGEtOGYgKi8gIldyaXRlKDE2KSIsIE5VTEwsICJSZWFkIGF0dHJpYnV0ZXMiLCAiV3JpdGUgYXR0cmlidXRlcyIsCisvKiA4YS04ZiAqLyAiV3JpdGUoMTYpIiwgIk9SV3JpdGUiLCAiUmVhZCBhdHRyaWJ1dGVzIiwgIldyaXRlIGF0dHJpYnV0ZXMiLAogICAgICAgICAgICAgIldyaXRlIGFuZCB2ZXJpZnkoMTYpIiwgIlZlcmlmeSgxNikiLAogLyogOTAtOTQgKi8gIlByZS1mZXRjaCgxNikiLCAiU3luY2hyb25pemUgY2FjaGUoMTYpIiwKICAgICAgICAgICAgICJMb2NrL3VubG9jayBjYWNoZSgxNikiLCAiV3JpdGUgc2FtZSgxNikiLCBOVUxMLApAQCAtMTA3LDIyICsxMDcsMjQgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyIG1haW50X2luX2FycltdID0gewotCXsweDUsICJSZXBvcnQgZGV2aWNlIGlkZW50aWZpZXIifSwKKwl7MHg1LCAiUmVwb3J0IGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIn0sCiAJezB4YSwgIlJlcG9ydCB0YXJnZXQgcG9ydCBncm91cHMifSwKIAl7MHhiLCAiUmVwb3J0IGFsaWFzZXMifSwKIAl7MHhjLCAiUmVwb3J0IHN1cHBvcnRlZCBvcGVyYXRpb24gY29kZXMifSwKIAl7MHhkLCAiUmVwb3J0IHN1cHBvcnRlZCB0YXNrIG1hbmFnZW1lbnQgZnVuY3Rpb25zIn0sCiAJezB4ZSwgIlJlcG9ydCBwcmlvcml0eSJ9LAogCXsweGYsICJSZXBvcnQgdGltZXN0YW1wIn0sCisJezB4MTAsICJNYW5hZ2VtZW50IHByb3RvY29sIGluIn0sCiB9OwogI2RlZmluZSBNQUlOVF9JTl9TWiBBUlJBWV9TSVpFKG1haW50X2luX2FycikKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2YWx1ZV9uYW1lX3BhaXIgbWFpbnRfb3V0X2FycltdID0gewotCXsweDYsICJTZXQgZGV2aWNlIGlkZW50aWZpZXIifSwKKwl7MHg2LCAiU2V0IGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIn0sCiAJezB4YSwgIlNldCB0YXJnZXQgcG9ydCBncm91cHMifSwKIAl7MHhiLCAiQ2hhbmdlIGFsaWFzZXMifSwKIAl7MHhlLCAiU2V0IHByaW9yaXR5In0sCi0JezB4ZSwgIlNldCB0aW1lc3RhbXAifSwKKwl7MHhmLCAiU2V0IHRpbWVzdGFtcCJ9LAorCXsweDEwLCAiTWFuYWdlbWVudCBwcm90b2NvbCBvdXQifSwKIH07CiAjZGVmaW5lIE1BSU5UX09VVF9TWiBBUlJBWV9TSVpFKG1haW50X291dF9hcnIpCiAKQEAgLTQxMiw2ICs0MTQsNyBAQAogCXsweDAwMDQsICJCZWdpbm5pbmctb2YtcGFydGl0aW9uL21lZGl1bSBkZXRlY3RlZCJ9LAogCXsweDAwMDUsICJFbmQtb2YtZGF0YSBkZXRlY3RlZCJ9LAogCXsweDAwMDYsICJJL08gcHJvY2VzcyB0ZXJtaW5hdGVkIn0sCisJezB4MDAwNywgIlByb2dyYW1tYWJsZSBlYXJseSB3YXJuaW5nIGRldGVjdGVkIn0sCiAJezB4MDAxMSwgIkF1ZGlvIHBsYXkgb3BlcmF0aW9uIGluIHByb2dyZXNzIn0sCiAJezB4MDAxMiwgIkF1ZGlvIHBsYXkgb3BlcmF0aW9uIHBhdXNlZCJ9LAogCXsweDAwMTMsICJBdWRpbyBwbGF5IG9wZXJhdGlvbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIn0sCkBAIC00MjUsNiArNDI4LDcgQEAKIAl7MHgwMDFCLCAiU2V0IGNhcGFjaXR5IG9wZXJhdGlvbiBpbiBwcm9ncmVzcyJ9LAogCXsweDAwMUMsICJWZXJpZnkgb3BlcmF0aW9uIGluIHByb2dyZXNzIn0sCiAJezB4MDAxRCwgIkFUQSBwYXNzIHRocm91Z2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIn0sCisJezB4MDAxRSwgIkNvbmZsaWN0aW5nIFNBIGNyZWF0aW9uIHJlcXVlc3QifSwKIAogCXsweDAxMDAsICJObyBpbmRleC9zZWN0b3Igc2lnbmFsIn0sCiAKQEAgLTQ0OSw5ICs0NTMsMTIgQEAKIAl7MHgwNDBCLCAiTG9naWNhbCB1bml0IG5vdCBhY2Nlc3NpYmxlLCB0YXJnZXQgcG9ydCBpbiBzdGFuZGJ5IHN0YXRlIn0sCiAJezB4MDQwQywgIkxvZ2ljYWwgdW5pdCBub3QgYWNjZXNzaWJsZSwgdGFyZ2V0IHBvcnQgaW4gdW5hdmFpbGFibGUgIgogCSAic3RhdGUifSwKKwl7MHgwNDBELCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgc3RydWN0dXJlIGNoZWNrIHJlcXVpcmVkIn0sCiAJezB4MDQxMCwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIGF1eGlsaWFyeSBtZW1vcnkgbm90IGFjY2Vzc2libGUifSwKIAl7MHgwNDExLCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgbm90aWZ5IChlbmFibGUgc3BpbnVwKSByZXF1aXJlZCJ9LAogCXsweDA0MTIsICJMb2dpY2FsIHVuaXQgbm90IHJlYWR5LCBvZmZsaW5lIn0sCisJezB4MDQxMywgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIFNBIGNyZWF0aW9uIGluIHByb2dyZXNzIn0sCisJezB4MDQxNCwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIHNwYWNlIGFsbG9jYXRpb24gaW4gcHJvZ3Jlc3MifSwKIAogCXsweDA1MDAsICJMb2dpY2FsIHVuaXQgZG9lcyBub3QgcmVzcG9uZCB0byBzZWxlY3Rpb24ifSwKIApAQCAtNDc5LDYgKzQ4Niw5IEBACiAJezB4MEIwMywgIldhcm5pbmcgLSBiYWNrZ3JvdW5kIHNlbGYtdGVzdCBmYWlsZWQifSwKIAl7MHgwQjA0LCAiV2FybmluZyAtIGJhY2tncm91bmQgcHJlLXNjYW4gZGV0ZWN0ZWQgbWVkaXVtIGVycm9yIn0sCiAJezB4MEIwNSwgIldhcm5pbmcgLSBiYWNrZ3JvdW5kIG1lZGl1bSBzY2FuIGRldGVjdGVkIG1lZGl1bSBlcnJvciJ9LAorCXsweDBCMDYsICJXYXJuaW5nIC0gbm9uLXZvbGF0aWxlIGNhY2hlIG5vdyB2b2xhdGlsZSJ9LAorCXsweDBCMDcsICJXYXJuaW5nIC0gZGVncmFkZWQgcG93ZXIgdG8gbm9uLXZvbGF0aWxlIGNhY2hlIn0sCisJezB4MEIwOCwgIldhcm5pbmcgLSBwb3dlciBsb3NzIGV4cGVjdGVkIn0sCiAKIAl7MHgwQzAwLCAiV3JpdGUgZXJyb3IifSwKIAl7MHgwQzAxLCAiV3JpdGUgZXJyb3IgLSByZWNvdmVyZWQgd2l0aCBhdXRvIHJlYWxsb2NhdGlvbiJ9LApAQCAtNTkzLDYgKzYwMyw3IEBACiAJezB4MUMwMiwgIkdyb3duIGRlZmVjdCBsaXN0IG5vdCBmb3VuZCJ9LAogCiAJezB4MUQwMCwgIk1pc2NvbXBhcmUgZHVyaW5nIHZlcmlmeSBvcGVyYXRpb24ifSwKKwl7MHgxRDAxLCAiTWlzY29tcGFyZSB2ZXJpZnkgb2YgdW5tYXBwZWQgTEJBIn0sCiAKIAl7MHgxRTAwLCAiUmVjb3ZlcmVkIGlkIHdpdGggRUNDIGNvcnJlY3Rpb24ifSwKIApAQCAtNjI2LDYgKzYzNyw3IEBACiAJezB4MjQwNSwgIlNlY3VyaXR5IHdvcmtpbmcga2V5IGZyb3plbiJ9LAogCXsweDI0MDYsICJOb25jZSBub3QgdW5pcXVlIn0sCiAJezB4MjQwNywgIk5vbmNlIHRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UifSwKKwl7MHgyNDA4LCAiSW52YWxpZCBYQ0RCIn0sCiAKIAl7MHgyNTAwLCAiTG9naWNhbCB1bml0IG5vdCBzdXBwb3J0ZWQifSwKIApAQCAtNjU2LDEwICs2NjgsMTIgQEAKIAl7MHgyNzA0LCAiUGVyc2lzdGVudCB3cml0ZSBwcm90ZWN0In0sCiAJezB4MjcwNSwgIlBlcm1hbmVudCB3cml0ZSBwcm90ZWN0In0sCiAJezB4MjcwNiwgIkNvbmRpdGlvbmFsIHdyaXRlIHByb3RlY3QifSwKKwl7MHgyNzA3LCAiU3BhY2UgYWxsb2NhdGlvbiBmYWlsZWQgd3JpdGUgcHJvdGVjdCJ9LAogCiAJezB4MjgwMCwgIk5vdCByZWFkeSB0byByZWFkeSBjaGFuZ2UsIG1lZGl1bSBtYXkgaGF2ZSBjaGFuZ2VkIn0sCiAJezB4MjgwMSwgIkltcG9ydCBvciBleHBvcnQgZWxlbWVudCBhY2Nlc3NlZCJ9LAogCXsweDI4MDIsICJGb3JtYXQtbGF5ZXIgbWF5IGhhdmUgY2hhbmdlZCJ9LAorCXsweDI4MDMsICJJbXBvcnQvZXhwb3J0IGVsZW1lbnQgYWNjZXNzZWQsIG1lZGl1bSBjaGFuZ2VkIn0sCiAKIAl7MHgyOTAwLCAiUG93ZXIgb24sIHJlc2V0LCBvciBidXMgZGV2aWNlIHJlc2V0IG9jY3VycmVkIn0sCiAJezB4MjkwMSwgIlBvd2VyIG9uIG9jY3VycmVkIn0sCkBAIC02ODAsMTEgKzY5NCwxNiBAQAogCXsweDJBMDcsICJJbXBsaWNpdCBhc3ltbWV0cmljIGFjY2VzcyBzdGF0ZSB0cmFuc2l0aW9uIGZhaWxlZCJ9LAogCXsweDJBMDgsICJQcmlvcml0eSBjaGFuZ2VkIn0sCiAJezB4MkEwOSwgIkNhcGFjaXR5IGRhdGEgaGFzIGNoYW5nZWQifSwKKwl7MHgyQTBBLCAiRXJyb3IgaGlzdG9yeSBJX1QgbmV4dXMgY2xlYXJlZCJ9LAorCXsweDJBMEIsICJFcnJvciBoaXN0b3J5IHNuYXBzaG90IHJlbGVhc2VkIn0sCisJezB4MkEwQywgIkVycm9yIHJlY292ZXJ5IGF0dHJpYnV0ZXMgaGF2ZSBjaGFuZ2VkIn0sCisJezB4MkEwRCwgIkRhdGEgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgY2hhbmdlZCJ9LAogCXsweDJBMTAsICJUaW1lc3RhbXAgY2hhbmdlZCJ9LAogCXsweDJBMTEsICJEYXRhIGVuY3J5cHRpb24gcGFyYW1ldGVycyBjaGFuZ2VkIGJ5IGFub3RoZXIgaV90IG5leHVzIn0sCiAJezB4MkExMiwgIkRhdGEgZW5jcnlwdGlvbiBwYXJhbWV0ZXJzIGNoYW5nZWQgYnkgdmVuZG9yIHNwZWNpZmljICIKIAkJICJldmVudCJ9LAogCXsweDJBMTMsICJEYXRhIGVuY3J5cHRpb24ga2V5IGluc3RhbmNlIGNvdW50ZXIgaGFzIGNoYW5nZWQifSwKKwl7MHgyQTE0LCAiU0EgY3JlYXRpb24gY2FwYWJpbGl0aWVzIGRhdGEgaGFzIGNoYW5nZWQifSwKIAogCXsweDJCMDAsICJDb3B5IGNhbm5vdCBleGVjdXRlIHNpbmNlIGhvc3QgY2Fubm90IGRpc2Nvbm5lY3QifSwKIApAQCAtNzIzLDYgKzc0Miw4IEBACiAJezB4MzAwQywgIldPUk0gbWVkaXVtIC0gb3ZlcndyaXRlIGF0dGVtcHRlZCJ9LAogCXsweDMwMEQsICJXT1JNIG1lZGl1bSAtIGludGVncml0eSBjaGVjayJ9LAogCXsweDMwMTAsICJNZWRpdW0gbm90IGZvcm1hdHRlZCJ9LAorCXsweDMwMTEsICJJbmNvbXBhdGlibGUgdm9sdW1lIHR5cGUifSwKKwl7MHgzMDEyLCAiSW5jb21wYXRpYmxlIHZvbHVtZSBxdWFsaWZpZXIifSwKIAogCXsweDMxMDAsICJNZWRpdW0gZm9ybWF0IGNvcnJ1cHRlZCJ9LAogCXsweDMxMDEsICJGb3JtYXQgY29tbWFuZCBmYWlsZWQifSwKQEAgLTc4Miw2ICs4MDMsMTAgQEAKIAl7MHgzQjE1LCAiTWVkaXVtIG1hZ2F6aW5lIHVubG9ja2VkIn0sCiAJezB4M0IxNiwgIk1lY2hhbmljYWwgcG9zaXRpb25pbmcgb3IgY2hhbmdlciBlcnJvciJ9LAogCXsweDNCMTcsICJSZWFkIHBhc3QgZW5kIG9mIHVzZXIgb2JqZWN0In0sCisJezB4M0IxOCwgIkVsZW1lbnQgZGlzYWJsZWQifSwKKwl7MHgzQjE5LCAiRWxlbWVudCBlbmFibGVkIn0sCisJezB4M0IxQSwgIkRhdGEgdHJhbnNmZXIgZGV2aWNlIHJlbW92ZWQifSwKKwl7MHgzQjFCLCAiRGF0YSB0cmFuc2ZlciBkZXZpY2UgaW5zZXJ0ZWQifSwKIAogCXsweDNEMDAsICJJbnZhbGlkIGJpdHMgaW4gaWRlbnRpZnkgbWVzc2FnZSJ9LAogCkBAIC04ODIsNiArOTA3LDggQEAKIAl7MHg1NTA2LCAiQXV4aWxpYXJ5IG1lbW9yeSBvdXQgb2Ygc3BhY2UifSwKIAl7MHg1NTA3LCAiUXVvdGEgZXJyb3IifSwKIAl7MHg1NTA4LCAiTWF4aW11bSBudW1iZXIgb2Ygc3VwcGxlbWVudGFsIGRlY3J5cHRpb24ga2V5cyBleGNlZWRlZCJ9LAorCXsweDU1MDksICJNZWRpdW0gYXV4aWxpYXJ5IG1lbW9yeSBub3QgYWNjZXNzaWJsZSJ9LAorCXsweDU1MEEsICJEYXRhIGN1cnJlbnRseSB1bmF2YWlsYWJsZSJ9LAogCiAJezB4NTcwMCwgIlVuYWJsZSB0byByZWNvdmVyIHRhYmxlLW9mLWNvbnRlbnRzIn0sCiAKQEAgLTk5Myw2ICsxMDIwLDEyIEBACiAJezB4NUUwMiwgIlN0YW5kYnkgY29uZGl0aW9uIGFjdGl2YXRlZCBieSB0aW1lciJ9LAogCXsweDVFMDMsICJJZGxlIGNvbmRpdGlvbiBhY3RpdmF0ZWQgYnkgY29tbWFuZCJ9LAogCXsweDVFMDQsICJTdGFuZGJ5IGNvbmRpdGlvbiBhY3RpdmF0ZWQgYnkgY29tbWFuZCJ9LAorCXsweDVFMDUsICJJZGxlX2IgY29uZGl0aW9uIGFjdGl2YXRlZCBieSB0aW1lciJ9LAorCXsweDVFMDYsICJJZGxlX2IgY29uZGl0aW9uIGFjdGl2YXRlZCBieSBjb21tYW5kIn0sCisJezB4NUUwNywgIklkbGVfYyBjb25kaXRpb24gYWN0aXZhdGVkIGJ5IHRpbWVyIn0sCisJezB4NUUwOCwgIklkbGVfYyBjb25kaXRpb24gYWN0aXZhdGVkIGJ5IGNvbW1hbmQifSwKKwl7MHg1RTA5LCAiU3RhbmRieV95IGNvbmRpdGlvbiBhY3RpdmF0ZWQgYnkgdGltZXIifSwKKwl7MHg1RTBBLCAiU3RhbmRieV95IGNvbmRpdGlvbiBhY3RpdmF0ZWQgYnkgY29tbWFuZCJ9LAogCXsweDVFNDEsICJQb3dlciBzdGF0ZSBjaGFuZ2UgdG8gYWN0aXZlIn0sCiAJezB4NUU0MiwgIlBvd2VyIHN0YXRlIGNoYW5nZSB0byBpZGxlIn0sCiAJezB4NUU0MywgIlBvd2VyIHN0YXRlIGNoYW5nZSB0byBzdGFuZGJ5In0sCkBAIC0xMDkxLDcgKzExMjQsMjggQEAKIAl7MHg3NDAzLCAiSW5jb3JyZWN0IGRhdGEgZW5jcnlwdGlvbiBrZXkifSwKIAl7MHg3NDA0LCAiQ3J5cHRvZ3JhcGhpYyBpbnRlZ3JpdHkgdmFsaWRhdGlvbiBmYWlsZWQifSwKIAl7MHg3NDA1LCAiRXJyb3IgZGVjcnlwdGluZyBkYXRhIn0sCisJezB4NzQwNiwgIlVua25vd24gc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBrZXkifSwKKwl7MHg3NDA3LCAiRW5jcnlwdGlvbiBwYXJhbWV0ZXJzIG5vdCB1c2VhYmxlIn0sCisJezB4NzQwOCwgIkRpZ2l0YWwgc2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbHVyZSJ9LAorCXsweDc0MDksICJFbmNyeXB0aW9uIG1vZGUgbWlzbWF0Y2ggb24gcmVhZCJ9LAorCXsweDc0MEEsICJFbmNyeXB0ZWQgYmxvY2sgbm90IHJhdyByZWFkIGVuYWJsZWQifSwKKwl7MHg3NDBCLCAiSW5jb3JyZWN0IEVuY3J5cHRpb24gcGFyYW1ldGVycyJ9LAorCXsweDc0MEMsICJVbmFibGUgdG8gZGVjcnlwdCBwYXJhbWV0ZXIgbGlzdCJ9LAorCXsweDc0MEQsICJFbmNyeXB0aW9uIGFsZ29yaXRobSBkaXNhYmxlZCJ9LAorCXsweDc0MTAsICJTQSBjcmVhdGlvbiBwYXJhbWV0ZXIgdmFsdWUgaW52YWxpZCJ9LAorCXsweDc0MTEsICJTQSBjcmVhdGlvbiBwYXJhbWV0ZXIgdmFsdWUgcmVqZWN0ZWQifSwKKwl7MHg3NDEyLCAiSW52YWxpZCBTQSB1c2FnZSJ9LAorCXsweDc0MjEsICJEYXRhIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBwcmV2ZW50ZWQifSwKKwl7MHg3NDMwLCAiU0EgY3JlYXRpb24gcGFyYW1ldGVyIG5vdCBzdXBwb3J0ZWQifSwKKwl7MHg3NDQwLCAiQXV0aGVudGljYXRpb24gZmFpbGVkIn0sCisJezB4NzQ2MSwgIkV4dGVybmFsIGRhdGEgZW5jcnlwdGlvbiBrZXkgbWFuYWdlciBhY2Nlc3MgZXJyb3IifSwKKwl7MHg3NDYyLCAiRXh0ZXJuYWwgZGF0YSBlbmNyeXB0aW9uIGtleSBtYW5hZ2VyIGVycm9yIn0sCisJezB4NzQ2MywgIkV4dGVybmFsIGRhdGEgZW5jcnlwdGlvbiBrZXkgbm90IGZvdW5kIn0sCisJezB4NzQ2NCwgIkV4dGVybmFsIGRhdGEgZW5jcnlwdGlvbiByZXF1ZXN0IG5vdCBhdXRob3JpemVkIn0sCisJezB4NzQ2RSwgIkV4dGVybmFsIGRhdGEgZW5jcnlwdGlvbiBjb250cm9sIHRpbWVvdXQifSwKKwl7MHg3NDZGLCAiRXh0ZXJuYWwgZGF0YSBlbmNyeXB0aW9uIGNvbnRyb2wgZXJyb3IifSwKIAl7MHg3NDcxLCAiTG9naWNhbCB1bml0IGFjY2VzcyBub3QgYXV0aG9yaXplZCJ9LAorCXsweDc0NzksICJTZWN1cml0eSBjb25mbGljdCBpbiB0cmFuc2xhdGVkIGRldmljZSJ9LAogCiAJezAsIE5VTEx9CiB9OwpAQCAtMTEwMywxMiArMTE1NywxMiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGVycm9yX2luZm8yIGFkZGl0aW9uYWwyW10gPQogewotCXsweDQwLDB4MDAsMHg3ZiwiUmFtIGZhaWx1cmUgKCV4KSJ9LAotCXsweDQwLDB4ODAsMHhmZiwiRGlhZ25vc3RpYyBmYWlsdXJlIG9uIGNvbXBvbmVudCAoJXgpIn0sCi0JezB4NDEsMHgwMCwweGZmLCJEYXRhIHBhdGggZmFpbHVyZSAoJXgpIn0sCi0JezB4NDIsMHgwMCwweGZmLCJQb3dlci1vbiBvciBzZWxmLXRlc3QgZmFpbHVyZSAoJXgpIn0sCi0JezB4NEQsMHgwMCwweGZmLCJUYWdnZWQgb3ZlcmxhcHBlZCBjb21tYW5kcyAocXVldWUgdGFnICV4KSJ9LAotCXsweDcwLDB4MDAsMHhmZiwiRGVjb21wcmVzc2lvbiBleGNlcHRpb24gc2hvcnQgYWxnb3JpdGhtIGlkIG9mICV4In0sCisJezB4NDAsIDB4MDAsIDB4N2YsICJSYW0gZmFpbHVyZSAoJXgpIn0sCisJezB4NDAsIDB4ODAsIDB4ZmYsICJEaWFnbm9zdGljIGZhaWx1cmUgb24gY29tcG9uZW50ICgleCkifSwKKwl7MHg0MSwgMHgwMCwgMHhmZiwgIkRhdGEgcGF0aCBmYWlsdXJlICgleCkifSwKKwl7MHg0MiwgMHgwMCwgMHhmZiwgIlBvd2VyLW9uIG9yIHNlbGYtdGVzdCBmYWlsdXJlICgleCkifSwKKwl7MHg0RCwgMHgwMCwgMHhmZiwgIlRhZ2dlZCBvdmVybGFwcGVkIGNvbW1hbmRzICh0YXNrIHRhZyAleCkifSwKKwl7MHg3MCwgMHgwMCwgMHhmZiwgIkRlY29tcHJlc3Npb24gZXhjZXB0aW9uIHNob3J0IGFsZ29yaXRobSBpZCBvZiAleCJ9LAogCXswLCAwLCAwLCBOVUxMfQogfTsKIApAQCAtMTE1NywxNCArMTIxMSwxNSBAQAogCWludCBpOwogCXVuc2lnbmVkIHNob3J0IGNvZGUgPSAoKGFzYyA8PCA4KSB8IGFzY3EpOwogCi0JZm9yIChpPTA7IGFkZGl0aW9uYWxbaV0udGV4dDsgaSsrKQorCWZvciAoaSA9IDA7IGFkZGl0aW9uYWxbaV0udGV4dDsgaSsrKQogCQlpZiAoYWRkaXRpb25hbFtpXS5jb2RlMTIgPT0gY29kZSkKIAkJCXJldHVybiBhZGRpdGlvbmFsW2ldLnRleHQ7Ci0JZm9yIChpPTA7IGFkZGl0aW9uYWwyW2ldLmZtdDsgaSsrKQorCWZvciAoaSA9IDA7IGFkZGl0aW9uYWwyW2ldLmZtdDsgaSsrKSB7CiAJCWlmIChhZGRpdGlvbmFsMltpXS5jb2RlMSA9PSBhc2MgJiYKLQkJICAgIGFkZGl0aW9uYWwyW2ldLmNvZGUyX21pbiA+PSBhc2NxICYmCi0JCSAgICBhZGRpdGlvbmFsMltpXS5jb2RlMl9tYXggPD0gYXNjcSkKKwkJICAgIGFzY3EgPj0gYWRkaXRpb25hbDJbaV0uY29kZTJfbWluICYmCisJCSAgICBhc2NxIDw9IGFkZGl0aW9uYWwyW2ldLmNvZGUyX21heCkKIAkJCXJldHVybiBhZGRpdGlvbmFsMltpXS5mbXQ7CisJfQogI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwppbmRleCBhNTE4ZjJlLi4zZWUxY2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKQEAgLTE1MywxMiArMTUzLDI0IEBACiAJaWYgKHNkZXYtPnNjc2lfZGhfZGF0YSkgewogCQlpZiAoc2Rldi0+c2NzaV9kaF9kYXRhLT5zY3NpX2RoICE9IHNjc2lfZGgpCiAJCQllcnIgPSAtRUJVU1k7Ci0JfSBlbHNlIGlmIChzY3NpX2RoLT5hdHRhY2gpCisJCWVsc2UKKwkJCWtyZWZfZ2V0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYpOworCX0gZWxzZSBpZiAoc2NzaV9kaC0+YXR0YWNoKSB7CiAJCWVyciA9IHNjc2lfZGgtPmF0dGFjaChzZGV2KTsKLQorCQlpZiAoIWVycikgeworCQkJa3JlZl9pbml0KCZzZGV2LT5zY3NpX2RoX2RhdGEtPmtyZWYpOworCQkJc2Rldi0+c2NzaV9kaF9kYXRhLT5zZGV2ID0gc2RldjsKKwkJfQorCX0KIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBfX2RldGFjaF9oYW5kbGVyIChzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGEgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHNjc2lfZGhfZGF0YSwga3JlZik7CisJc2NzaV9kaF9kYXRhLT5zY3NpX2RoLT5kZXRhY2goc2NzaV9kaF9kYXRhLT5zZGV2KTsKK30KKwogLyoKICAqIHNjc2lfZGhfaGFuZGxlcl9kZXRhY2ggLSBEZXRhY2ggYSBkZXZpY2UgaGFuZGxlciBmcm9tIGEgZGV2aWNlCiAgKiBAc2RldiAtIFNDU0kgZGV2aWNlIHRoZSBkZXZpY2UgaGFuZGxlciBzaG91bGQgYmUgZGV0YWNoZWQgZnJvbQpAQCAtMTgwLDcgKzE5Miw3IEBACiAJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7CiAKIAlpZiAoc2NzaV9kaCAmJiBzY3NpX2RoLT5kZXRhY2gpCi0JCXNjc2lfZGgtPmRldGFjaChzZGV2KTsKKwkJa3JlZl9wdXQoJnNkZXYtPnNjc2lfZGhfZGF0YS0+a3JlZiwgX19kZXRhY2hfaGFuZGxlcik7CiB9CiAKIC8qCkBAIC00NDAsNiArNDUyLDM5IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzY3NpX2RoX2FjdGl2YXRlKTsKIAogLyoKKyAqIHNjc2lfZGhfc2V0X3BhcmFtcyAtIHNldCB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGRldmljZSBhcyBwZXIgdGhlCisgKiAgICAgIHN0cmluZyBzcGVjaWZpZWQgaW4gcGFyYW1zLgorICogQHEgLSBSZXF1ZXN0IHF1ZXVlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzY3NpX2RldmljZSBmb3IKKyAqICAgICAgd2hpY2ggdGhlIHBhcmFtZXRlcnMgdG8gYmUgc2V0LgorICogQHBhcmFtcyAtIHBhcmFtZXRlcnMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQKKyAqICAgICAgIm5vX29mX3BhcmFtc1wwcGFyYW0xXDBwYXJhbTJcMHBhcmFtM1wwLi4uXDAiCisgKiAgICAgIGZvciBleGFtcGxlLCBzdHJpbmcgZm9yIDIgcGFyYW1ldGVycyB3aXRoIHZhbHVlIDEwIGFuZCAyMQorICogICAgICBpcyBzcGVjaWZpZWQgYXMgIjJcMDEwXDAyMVwwIi4KKyAqLworaW50IHNjc2lfZGhfc2V0X3BhcmFtcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgY29uc3QgY2hhciAqcGFyYW1zKQoreworCWludCBlcnIgPSAtU0NTSV9ESF9OT1NZUzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciAqc2NzaV9kaCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJc2RldiA9IHEtPnF1ZXVlZGF0YTsKKwlpZiAoc2RldiAmJiBzZGV2LT5zY3NpX2RoX2RhdGEpCisJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7CisJaWYgKHNjc2lfZGggJiYgc2NzaV9kaC0+c2V0X3BhcmFtcyAmJiBnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldikpCisJCWVyciA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNjc2lfZGgtPnNldF9wYXJhbXMoc2RldiwgcGFyYW1zKTsKKwlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZGhfc2V0X3BhcmFtcyk7CisKKy8qCiAgKiBzY3NpX2RoX2hhbmRsZXJfZXhpc3QgLSBSZXR1cm4gVFJVRSgxKSBpZiBhIGRldmljZSBoYW5kbGVyIGV4aXN0cyBmb3IKICAqCXRoZSBnaXZlbiBuYW1lLiBGQUxTRSgwKSBvdGhlcndpc2UuCiAgKiBAbmFtZSAtIG5hbWUgb2YgdGhlIGRldmljZSBoYW5kbGVyLgpAQCAtNDc0LDcgKzUxOSw2IEBACiAKIAlpZiAoIWVycikgewogCQllcnIgPSBzY3NpX2RoX2hhbmRsZXJfYXR0YWNoKHNkZXYsIHNjc2lfZGgpOwotCiAJCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTUwNSwxMCArNTQ5LDggQEAKIAkJcmV0dXJuOwogCiAJaWYgKHNkZXYtPnNjc2lfZGhfZGF0YSkgewotCQkvKiBpZiBzZGV2IGlzIG5vdCBvbiBpbnRlcm5hbCBsaXN0LCBkZXRhY2ggKi8KIAkJc2NzaV9kaCA9IHNkZXYtPnNjc2lfZGhfZGF0YS0+c2NzaV9kaDsKLQkJaWYgKCFkZXZpY2VfaGFuZGxlcl9tYXRjaChzY3NpX2RoLCBzZGV2KSkKLQkJCXNjc2lfZGhfaGFuZGxlcl9kZXRhY2goc2Rldiwgc2NzaV9kaCk7CisJCXNjc2lfZGhfaGFuZGxlcl9kZXRhY2goc2Rldiwgc2NzaV9kaCk7CiAJfQogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX2FsdWEuYwppbmRleCBkYmExNTRjLi5iNWNkZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9hbHVhLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfYWx1YS5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCWlmIChoLT50cGdzID09IFRQR1NfTU9ERV9FWFBMSUNJVCAmJiBoLT5zdGF0ZSAhPSBUUEdTX1NUQVRFX09QVElNSVpFRCkKKwlpZiAoaC0+dHBncyAmIFRQR1NfTU9ERV9FWFBMSUNJVCAmJiBoLT5zdGF0ZSAhPSBUUEdTX1NUQVRFX09QVElNSVpFRCkKIAkJZXJyID0gYWx1YV9zdHBnKHNkZXYsIFRQR1NfU1RBVEVfT1BUSU1JWkVELCBoKTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfZW1jLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwppbmRleCAwZTU3MmQyLi4wY2ZmZTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYworKysgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9lbWMuYwpAQCAtNTYxLDYgKzU2MSw2MSBAQAogCiAJcmV0dXJuIHJlc3VsdDsKIH0KKy8qCisgKiBwYXJhbXMgLSBwYXJhbWV0ZXJzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0CisgKiAgICAgICJub19vZl9wYXJhbXNcMHBhcmFtMVwwcGFyYW0yXDBwYXJhbTNcMC4uLlwwIgorICogICAgICBmb3IgZXhhbXBsZSwgc3RyaW5nIGZvciAyIHBhcmFtZXRlcnMgd2l0aCB2YWx1ZSAxMCBhbmQgMjEKKyAqICAgICAgaXMgc3BlY2lmaWVkIGFzICIyXDAxMFwwMjFcMCIuCisgKi8KK3N0YXRpYyBpbnQgY2xhcmlpb25fc2V0X3BhcmFtcyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgY2xhcmlpb25fZGhfZGF0YSAqY3NkZXYgPSBnZXRfY2xhcmlpb25fZGF0YShzZGV2KTsKKwl1bnNpZ25lZCBpbnQgaHIgPSAwLCBzdCA9IDAsIGFyZ2M7CisJY29uc3QgY2hhciAqcCA9IHBhcmFtczsKKwlpbnQgcmVzdWx0ID0gU0NTSV9ESF9PSzsKKworCWlmICgoc3NjYW5mKHBhcmFtcywgIiV1IiwgJmFyZ2MpICE9IDEpIHx8IChhcmdjICE9IDIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlICgqcCsrKQorCQk7CisJaWYgKChzc2NhbmYocCwgIiV1IiwgJnN0KSAhPSAxKSB8fCAoc3QgPiAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoKnArKykKKwkJOworCWlmICgoc3NjYW5mKHAsICIldSIsICZocikgIT0gMSkgfHwgKGhyID4gMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0KQorCQljc2Rldi0+ZmxhZ3MgfD0gQ0xBUklJT05fU0hPUlRfVFJFU1BBU1M7CisJZWxzZQorCQljc2Rldi0+ZmxhZ3MgJj0gfkNMQVJJSU9OX1NIT1JUX1RSRVNQQVNTOworCisJaWYgKGhyKQorCQljc2Rldi0+ZmxhZ3MgfD0gQ0xBUklJT05fSE9OT1JfUkVTRVJWQVRJT05TOworCWVsc2UKKwkJY3NkZXYtPmZsYWdzICY9IH5DTEFSSUlPTl9IT05PUl9SRVNFUlZBVElPTlM7CisKKwkvKgorCSAqIElmIHRoaXMgcGF0aCBpcyBvd25lZCwgd2UgaGF2ZSB0byBzZW5kIGEgdHJlc3Bhc3MgY29tbWFuZAorCSAqIHdpdGggdGhlIG5ldyBwYXJhbWV0ZXJzLiBJZiBub3QsIHNpbXBseSByZXR1cm4uIE5leHQgdHJlc3Bhc3MKKwkgKiBjb21tYW5kIHdvdWxkIHVzZSB0aGUgcGFyYW1ldGVycy4KKwkgKi8KKwlpZiAoY3NkZXYtPmx1bl9zdGF0ZSAhPSBDTEFSSUlPTl9MVU5fT1dORUQpCisJCWdvdG8gZG9uZTsKKworCWNzZGV2LT5sdW5fc3RhdGUgPSBDTEFSSUlPTl9MVU5fVU5JTklUSUFMSVpFRDsKKwlyZXN1bHQgPSBzZW5kX3RyZXNwYXNzX2NtZChzZGV2LCBjc2Rldik7CisJaWYgKHJlc3VsdCAhPSBTQ1NJX0RIX09LKQorCQlnb3RvIGRvbmU7CisKKwkvKiBVcGRhdGUgc3RhdHVzICovCisJcmVzdWx0ID0gY2xhcmlpb25fc2VuZF9pbnF1aXJ5KHNkZXYsIGNzZGV2KTsKKworZG9uZToKKwlyZXR1cm4gcmVzdWx0OworfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjc2lfZGhfZGV2bGlzdCBjbGFyaWlvbl9kZXZfbGlzdFtdID0gewogCXsiREdDIiwgIlJBSUQifSwKQEAgLTU4MSwxMSArNjM2LDkgQEAKIAkuY2hlY2tfc2Vuc2UJPSBjbGFyaWlvbl9jaGVja19zZW5zZSwKIAkuYWN0aXZhdGUJPSBjbGFyaWlvbl9hY3RpdmF0ZSwKIAkucHJlcF9mbgk9IGNsYXJpaW9uX3ByZXBfZm4sCisJLnNldF9wYXJhbXMJPSBjbGFyaWlvbl9zZXRfcGFyYW1zLAogfTsKIAotLyoKLSAqIFRPRE86IG5lZWQgc29tZSBpbnRlcmZhY2Ugc28gd2UgY2FuIHNldCB0cmVzcGFzcyB2YWx1ZXMKLSAqLwogc3RhdGljIGludCBjbGFyaWlvbl9idXNfYXR0YWNoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKIAlzdHJ1Y3Qgc2NzaV9kaF9kYXRhICpzY3NpX2RoX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMgYi9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKaW5kZXggZmQwNTQ0Zi4uMTFjODkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwpAQCAtMTEyLDYgKzExMiw3IEBACiAKICNkZWZpbmUgU1VCU1lTX0lEX0xFTgkxNgogI2RlZmluZSBTTE9UX0lEX0xFTgkyCisjZGVmaW5lIEFSUkFZX0xBQkVMX0xFTgkzMQogCiBzdHJ1Y3QgYzRfaW5xdWlyeSB7CiAJdTgJcGVyaXBoZXJhbF9pbmZvOwpAQCAtMTM1LDYgKzEzNiw4IEBACiAJCXN0cnVjdCByZGFjX3BnX2xlZ2FjeSBsZWdhY3k7CiAJCXN0cnVjdCByZGFjX3BnX2V4cGFuZGVkIGV4cGFuZGVkOwogCX0gbW9kZV9zZWxlY3Q7CisJdTgJaW5kZXg7CisJdTgJYXJyYXlfbmFtZVtBUlJBWV9MQUJFTF9MRU5dOwogfTsKIHN0cnVjdCBjOF9pbnF1aXJ5IHsKIAl1OAlwZXJpcGhlcmFsX2luZm87CkBAIC0xOTgsNiArMjAxLDMxIEBACiBzdGF0aWMgTElTVF9IRUFEKGN0bHJfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxpc3RfbG9jayk7CiAKKy8qCisgKiBtb2R1bGUgcGFyYW1ldGVyIHRvIGVuYWJsZSByZGFjIGRlYnVnIGxvZ2dpbmcuCisgKiAyIGJpdHMgZm9yIGVhY2ggdHlwZSBvZiBsb2dnaW5nLCBvbmx5IHR3byB0eXBlcyBkZWZpbmVkIGZvciBub3cKKyAqIENhbiBiZSBlbmhhbmNlZCBpZiByZXF1aXJlZCBhdCBsYXRlciBwb2ludAorICovCitzdGF0aWMgaW50IHJkYWNfbG9nZ2luZyA9IDE7Cittb2R1bGVfcGFyYW0ocmRhY19sb2dnaW5nLCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHJkYWNfbG9nZ2luZywgIkEgYml0IG1hc2sgb2YgcmRhYyBsb2dnaW5nIGxldmVscywgIgorCQkiRGVmYXVsdCBpcyAxIC0gZmFpbG92ZXIgbG9nZ2luZyBlbmFibGVkLCAiCisJCSJzZXQgaXQgdG8gMHhGIHRvIGVuYWJsZSBhbGwgdGhlIGxvZ3MiKTsKKworI2RlZmluZSBSREFDX0xPR19GQUlMT1ZFUgkwCisjZGVmaW5lIFJEQUNfTE9HX1NFTlNFCQkyCisKKyNkZWZpbmUgUkRBQ19MT0dfQklUUwkJMgorCisjZGVmaW5lIFJEQUNfTE9HX0xFVkVMKFNISUZUKSAgXAorCSgocmRhY19sb2dnaW5nID4+IChTSElGVCkpICYgKCgxIDw8IChSREFDX0xPR19CSVRTKSkgLSAxKSkKKworI2RlZmluZSBSREFDX0xPRyhTSElGVCwgc2RldiwgZiwgYXJnLi4uKSBcCitkbyB7IFwKKwlpZiAodW5saWtlbHkoUkRBQ19MT0dfTEVWRUwoU0hJRlQpKSkgXAorCQlzZGV2X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIFJEQUNfTkFNRSAiOiAiIGYgIlxuIiwgIyMgYXJnKTsgXAorfSB3aGlsZSAoMCk7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJkYWNfZGhfZGF0YSAqZ2V0X3JkYWNfZGF0YShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CiAJc3RydWN0IHNjc2lfZGhfZGF0YSAqc2NzaV9kaF9kYXRhID0gc2Rldi0+c2NzaV9kaF9kYXRhOwpAQCAtMzAzLDcgKzMzMSw4IEBACiAJa2ZyZWUoY3Rscik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmRhY19jb250cm9sbGVyICpnZXRfY29udHJvbGxlcih1OCAqc3Vic3lzX2lkLCB1OCAqc2xvdF9pZCkKK3N0YXRpYyBzdHJ1Y3QgcmRhY19jb250cm9sbGVyICpnZXRfY29udHJvbGxlcih1OCAqc3Vic3lzX2lkLCB1OCAqc2xvdF9pZCwKKwkJCQkJCWNoYXIgKmFycmF5X25hbWUpCiB7CiAJc3RydWN0IHJkYWNfY29udHJvbGxlciAqY3RsciwgKnRtcDsKIApAQCAtMzI0LDYgKzM1MywxNCBAQAogCS8qIGluaXRpYWxpemUgZmllbGRzIG9mIGNvbnRyb2xsZXIgKi8KIAltZW1jcHkoY3Rsci0+c3Vic3lzX2lkLCBzdWJzeXNfaWQsIFNVQlNZU19JRF9MRU4pOwogCW1lbWNweShjdGxyLT5zbG90X2lkLCBzbG90X2lkLCBTTE9UX0lEX0xFTik7CisJbWVtY3B5KGN0bHItPmFycmF5X25hbWUsIGFycmF5X25hbWUsIEFSUkFZX0xBQkVMX0xFTik7CisKKwkvKiB1cGRhdGUgdGhlIGNvbnRyb2xsZXIgaW5kZXggKi8KKwlpZiAoc2xvdF9pZFsxXSA9PSAweDMxKQorCQljdGxyLT5pbmRleCA9IDA7CisJZWxzZQorCQljdGxyLT5pbmRleCA9IDE7CisKIAlrcmVmX2luaXQoJmN0bHItPmtyZWYpOwogCWN0bHItPnVzZV9tczEwID0gLTE7CiAJbGlzdF9hZGQoJmN0bHItPm5vZGUsICZjdGxyX2xpc3QpOwpAQCAtMzYzLDkgKzQwMCwxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2x1bihzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCByZGFjX2RoX2RhdGEgKmgpCitzdGF0aWMgaW50IGdldF9sdW5faW5mbyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCByZGFjX2RoX2RhdGEgKmgsCisJCQljaGFyICphcnJheV9uYW1lKQogewotCWludCBlcnI7CisJaW50IGVyciwgaTsKIAlzdHJ1Y3QgYzhfaW5xdWlyeSAqaW5xcDsKIAogCWVyciA9IHN1Ym1pdF9pbnF1aXJ5KHNkZXYsIDB4QzgsIHNpemVvZihzdHJ1Y3QgYzhfaW5xdWlyeSksIGgpOwpAQCAtMzc3LDYgKzQxNSwxMSBAQAogCQkgICAgaW5xcC0+cGFnZV9pZFsyXSAhPSAnaScgfHwgaW5xcC0+cGFnZV9pZFszXSAhPSAnZCcpCiAJCQlyZXR1cm4gU0NTSV9ESF9OT1NZUzsKIAkJaC0+bHVuID0gaW5xcC0+bHVuWzddOyAvKiBVc2VzIG9ubHkgdGhlIGxhc3QgYnl0ZSAqLworCisJCWZvcihpPTA7IGk8QVJSQVlfTEFCRUxfTEVOLTE7ICsraSkKKwkJCSooYXJyYXlfbmFtZStpKSA9IGlucXAtPmFycmF5X3VzZXJfbGFiZWxbKDIqaSkrMV07CisKKwkJKihhcnJheV9uYW1lK0FSUkFZX0xBQkVMX0xFTi0xKSA9ICdcMCc7CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC00MTAsNyArNDUzLDcgQEAKIH0KIAogc3RhdGljIGludCBpbml0aWFsaXplX2NvbnRyb2xsZXIoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAotCQkJCSBzdHJ1Y3QgcmRhY19kaF9kYXRhICpoKQorCQkJCSBzdHJ1Y3QgcmRhY19kaF9kYXRhICpoLCBjaGFyICphcnJheV9uYW1lKQogewogCWludCBlcnI7CiAJc3RydWN0IGM0X2lucXVpcnkgKmlucXA7CkBAIC00MTgsNyArNDYxLDggQEAKIAllcnIgPSBzdWJtaXRfaW5xdWlyeShzZGV2LCAweEM0LCBzaXplb2Yoc3RydWN0IGM0X2lucXVpcnkpLCBoKTsKIAlpZiAoZXJyID09IFNDU0lfREhfT0spIHsKIAkJaW5xcCA9ICZoLT5pbnEuYzQ7Ci0JCWgtPmN0bHIgPSBnZXRfY29udHJvbGxlcihpbnFwLT5zdWJzeXNfaWQsIGlucXAtPnNsb3RfaWQpOworCQloLT5jdGxyID0gZ2V0X2NvbnRyb2xsZXIoaW5xcC0+c3Vic3lzX2lkLCBpbnFwLT5zbG90X2lkLAorCQkJCQlhcnJheV9uYW1lKTsKIAkJaWYgKCFoLT5jdGxyKQogCQkJZXJyID0gU0NTSV9ESF9SRVNfVEVNUF9VTkFWQUlMOwogCX0KQEAgLTQ1MCw2ICs0OTQsNyBAQAogewogCXN0cnVjdCBzY3NpX3NlbnNlX2hkciBzZW5zZV9oZHI7CiAJaW50IGVyciA9IFNDU0lfREhfSU8sIHJldDsKKwlzdHJ1Y3QgcmRhY19kaF9kYXRhICpoID0gZ2V0X3JkYWNfZGF0YShzZGV2KTsKIAogCXJldCA9IHNjc2lfbm9ybWFsaXplX3NlbnNlKHNlbnNlYnVmLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsICZzZW5zZV9oZHIpOwogCWlmICghcmV0KQpAQCAtNDc4LDExICs1MjMsMTQgQEAKIAkJCWVyciA9IFNDU0lfREhfUkVUUlk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwKLQkJCSAgICAiTU9ERV9TRUxFQ1QgZmFpbGVkIHdpdGggc2Vuc2UgJTAyeC8lMDJ4LyUwMnguXG4iLAotCQkJICAgIHNlbnNlX2hkci5zZW5zZV9rZXksIHNlbnNlX2hkci5hc2MsIHNlbnNlX2hkci5hc2NxKTsKKwkJYnJlYWs7CiAJfQogCisJUkRBQ19MT0coUkRBQ19MT0dfRkFJTE9WRVIsIHNkZXYsICJhcnJheSAlcywgY3RsciAlZCwgIgorCQkiTU9ERV9TRUxFQ1QgcmV0dXJuZWQgd2l0aCBzZW5zZSAlMDJ4LyUwMngvJTAyeCIsCisJCShjaGFyICopIGgtPmN0bHItPmFycmF5X25hbWUsIGgtPmN0bHItPmluZGV4LAorCQlzZW5zZV9oZHIuc2Vuc2Vfa2V5LCBzZW5zZV9oZHIuYXNjLCBzZW5zZV9oZHIuYXNjcSk7CisKIGRvbmU6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ5OSw3ICs1NDcsOSBAQAogCWlmICghcnEpCiAJCWdvdG8gZG9uZTsKIAotCXNkZXZfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgIiVzIE1PREVfU0VMRUNUIGNvbW1hbmQuXG4iLAorCVJEQUNfTE9HKFJEQUNfTE9HX0ZBSUxPVkVSLCBzZGV2LCAiYXJyYXkgJXMsIGN0bHIgJWQsICIKKwkJIiVzIE1PREVfU0VMRUNUIGNvbW1hbmQiLAorCQkoY2hhciAqKSBoLT5jdGxyLT5hcnJheV9uYW1lLCBoLT5jdGxyLT5pbmRleCwKIAkJKHJldHJ5X2NudCA9PSBSREFDX1JFVFJZX0NPVU5UKSA/ICJxdWV1ZWluZyIgOiAicmV0cnlpbmciKTsKIAogCWVyciA9IGJsa19leGVjdXRlX3JxKHEsIE5VTEwsIHJxLCAxKTsKQEAgLTUwOSw4ICs1NTksMTIgQEAKIAkJaWYgKGVyciA9PSBTQ1NJX0RIX1JFVFJZICYmIHJldHJ5X2NudC0tKQogCQkJZ290byByZXRyeTsKIAl9Ci0JaWYgKGVyciA9PSBTQ1NJX0RIX09LKQorCWlmIChlcnIgPT0gU0NTSV9ESF9PSykgewogCQloLT5zdGF0ZSA9IFJEQUNfU1RBVEVfQUNUSVZFOworCQlSREFDX0xPRyhSREFDX0xPR19GQUlMT1ZFUiwgc2RldiwgImFycmF5ICVzLCBjdGxyICVkLCAiCisJCQkJIk1PREVfU0VMRUNUIGNvbXBsZXRlZCIsCisJCQkJKGNoYXIgKikgaC0+Y3Rsci0+YXJyYXlfbmFtZSwgaC0+Y3Rsci0+aW5kZXgpOworCX0KIAogZG9uZToKIAlyZXR1cm4gZXJyOwpAQCAtNTI1LDE3ICs1NzksNiBAQAogCWlmIChlcnIgIT0gU0NTSV9ESF9PSykKIAkJZ290byBkb25lOwogCi0JaWYgKCFoLT5jdGxyKSB7Ci0JCWVyciA9IGluaXRpYWxpemVfY29udHJvbGxlcihzZGV2LCBoKTsKLQkJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQotCQkJZ290byBkb25lOwotCX0KLQotCWlmIChoLT5jdGxyLT51c2VfbXMxMCA9PSAtMSkgewotCQllcnIgPSBzZXRfbW9kZV9zZWxlY3Qoc2RldiwgaCk7Ci0JCWlmIChlcnIgIT0gU0NTSV9ESF9PSykKLQkJCWdvdG8gZG9uZTsKLQl9CiAJaWYgKGgtPmx1bl9zdGF0ZSA9PSBSREFDX0xVTl9VTk9XTkVEKQogCQllcnIgPSBzZW5kX21vZGVfc2VsZWN0KHNkZXYsIGgpOwogZG9uZToKQEAgLTU1OSw2ICs2MDIsMTIgQEAKIAkJCQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgKnNlbnNlX2hkcikKIHsKIAlzdHJ1Y3QgcmRhY19kaF9kYXRhICpoID0gZ2V0X3JkYWNfZGF0YShzZGV2KTsKKworCVJEQUNfTE9HKFJEQUNfTE9HX1NFTlNFLCBzZGV2LCAiYXJyYXkgJXMsIGN0bHIgJWQsICIKKwkJCSJJL08gcmV0dXJuZWQgd2l0aCBzZW5zZSAlMDJ4LyUwMngvJTAyeCIsCisJCQkoY2hhciAqKSBoLT5jdGxyLT5hcnJheV9uYW1lLCBoLT5jdGxyLT5pbmRleCwKKwkJCXNlbnNlX2hkci0+c2Vuc2Vfa2V5LCBzZW5zZV9oZHItPmFzYywgc2Vuc2VfaGRyLT5hc2NxKTsKKwogCXN3aXRjaCAoc2Vuc2VfaGRyLT5zZW5zZV9rZXkpIHsKIAljYXNlIE5PVF9SRUFEWToKIAkJaWYgKHNlbnNlX2hkci0+YXNjID09IDB4MDQgJiYgc2Vuc2VfaGRyLT5hc2NxID09IDB4MDEpCkBAIC02MjgsMTEgKzY3NywxOCBAQAogCXsiU0dJIiwgIklTIn0sCiAJeyJTVEsiLCAiT1BFTnN0b3JhZ2UgRDI4MCJ9LAogCXsiU1VOIiwgIkNTTTIwMF9SIn0sCisJeyJTVU4iLCAiTENTTTEwMF9JIn0sCisJeyJTVU4iLCAiTENTTTEwMF9TIn0sCisJeyJTVU4iLCAiTENTTTEwMF9FIn0sCiAJeyJTVU4iLCAiTENTTTEwMF9GIn0sCiAJeyJERUxMIiwgIk1EMzAwMCJ9LAogCXsiREVMTCIsICJNRDMwMDBpIn0sCisJeyJERUxMIiwgIk1EMzJ4eCJ9LAorCXsiREVMTCIsICJNRDMyeHhpIn0sCiAJeyJMU0kiLCAiSU5GLTAxLTAwIn0sCiAJeyJFTkdFTklPIiwgIklORi0wMS0wMCJ9LAorCXsiU1RLIiwgIkZMRVhMSU5FIDM4MCJ9LAorCXsiU1VOIiwgIkNTTTEwMF9SX0ZDIn0sCiAJe05VTEwsIE5VTEx9LAogfTsKIApAQCAtNjU2LDYgKzcxMiw3IEBACiAJc3RydWN0IHJkYWNfZGhfZGF0YSAqaDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CisJY2hhciBhcnJheV9uYW1lW0FSUkFZX0xBQkVMX0xFTl07CiAKIAlzY3NpX2RoX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciAqKQogCQkJICAgICAgICsgc2l6ZW9mKCpoKSAsIEdGUF9LRVJORUwpOwpAQCAtNjcwLDE2ICs3MjcsMjQgQEAKIAloLT5sdW4gPSBVTklOSVRJQUxJWkVEX0xVTjsKIAloLT5zdGF0ZSA9IFJEQUNfU1RBVEVfQUNUSVZFOwogCi0JZXJyID0gZ2V0X2x1bihzZGV2LCBoKTsKKwllcnIgPSBnZXRfbHVuX2luZm8oc2RldiwgaCwgYXJyYXlfbmFtZSk7CisJaWYgKGVyciAhPSBTQ1NJX0RIX09LKQorCQlnb3RvIGZhaWxlZDsKKworCWVyciA9IGluaXRpYWxpemVfY29udHJvbGxlcihzZGV2LCBoLCBhcnJheV9uYW1lKTsKIAlpZiAoZXJyICE9IFNDU0lfREhfT0spCiAJCWdvdG8gZmFpbGVkOwogCiAJZXJyID0gY2hlY2tfb3duZXJzaGlwKHNkZXYsIGgpOwogCWlmIChlcnIgIT0gU0NTSV9ESF9PSykKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gY2xlYW5fY3RscjsKKworCWVyciA9IHNldF9tb2RlX3NlbGVjdChzZGV2LCBoKTsKKwlpZiAoZXJyICE9IFNDU0lfREhfT0spCisJCWdvdG8gY2xlYW5fY3RscjsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKQotCQlnb3RvIGZhaWxlZDsKKwkJZ290byBjbGVhbl9jdGxyOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoc2Rldi0+cmVxdWVzdF9xdWV1ZS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCXNkZXYtPnNjc2lfZGhfZGF0YSA9IHNjc2lfZGhfZGF0YTsKQEAgLTY5MSw2ICs3NTYsOSBAQAogCiAJcmV0dXJuIDA7CiAKK2NsZWFuX2N0bHI6CisJa3JlZl9wdXQoJmgtPmN0bHItPmtyZWYsIHJlbGVhc2VfY29udHJvbGxlcik7CisKIGZhaWxlZDoKIAlrZnJlZShzY3NpX2RoX2RhdGEpOwogCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzZGV2LCAiJXM6IG5vdCBhdHRhY2hlZFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYyBiL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuYwppbmRleCAwYTU2MDliLi43MDRiOGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmMKKysrIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQ5LDkgKzQ5LDIwIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkZDb0UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIAorLyogUGVyZm9ybWFuY2UgdHVuaW5nIHBhcmFtZXRlcnMgZm9yIGZjb2UgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmNvZV9kZHBfbWluOworbW9kdWxlX3BhcmFtX25hbWVkKGRkcF9taW4sIGZjb2VfZGRwX21pbiwgdWludCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZHBfbWluLCAiTWluaW11bSBJL08gc2l6ZSBpbiBieXRlcyBmb3IgIglcCisJCSAiRGlyZWN0IERhdGEgUGxhY2VtZW50IChERFApLiIpOworCitERUZJTkVfTVVURVgoZmNvZV9jb25maWdfbXV0ZXgpOworCisvKiBmY29lX3BlcmNwdV9jbGVhbiBjb21wbGV0aW9uLiAgV2FpdGVyIHByb3RlY3RlZCBieSBmY29lX2NyZWF0ZV9tdXRleCAqLworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihmY29lX2ZsdXNoX2NvbXBsZXRpb24pOworCiAvKiBmY29lIGhvc3QgbGlzdCAqLworLyogbXVzdCBvbmx5IGJ5IGFjY2Vzc2VkIHVuZGVyIHRoZSBSVE5MIG11dGV4ICovCiBMSVNUX0hFQUQoZmNvZV9ob3N0bGlzdCk7Ci1ERUZJTkVfUldMT0NLKGZjb2VfaG9zdGxpc3RfbG9jayk7CiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZmNvZV9wZXJjcHVfcywgZmNvZV9wZXJjcHUpOwogCiAvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCkBAIC02NiwxMiArNzcsMTMgQEAKIAogc3RhdGljIHN0cnVjdCBmY19scG9ydCAqZmNvZV9ob3N0bGlzdF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGZjb2VfaG9zdGxpc3RfYWRkKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqKTsKLXN0YXRpYyBpbnQgZmNvZV9ob3N0bGlzdF9yZW1vdmUoY29uc3Qgc3RydWN0IGZjX2xwb3J0ICopOwogCiBzdGF0aWMgdm9pZCBmY29lX2NoZWNrX3dhaXRfcXVldWUoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIGludCBmY29lX2RldmljZV9ub3RpZmljYXRpb24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVsb25nLCB2b2lkICopOwogc3RhdGljIHZvaWQgZmNvZV9kZXZfc2V0dXAodm9pZCk7CiBzdGF0aWMgdm9pZCBmY29lX2Rldl9jbGVhbnVwKHZvaWQpOworc3RhdGljIHN0cnVjdCBmY29lX2ludGVyZmFjZSAqCisJZmNvZV9ob3N0bGlzdF9sb29rdXBfcG9ydChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGZyb20gbmV0IGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmY29lX25vdGlmaWVyID0gewpAQCAtMTMyLDYgKzE0NCwxODAgQEAKIAkubWF4X3NlY3RvcnMgPSAweGZmZmYsCiB9OwogCitzdGF0aWMgaW50IGZjb2VfZmlwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2Rldik7CisvKioKKyAqIGZjb2VfaW50ZXJmYWNlX3NldHVwKCkKKyAqIEBmY29lOiBuZXcgZmNvZV9pbnRlcmZhY2UKKyAqIEBuZXRkZXYgOiBwdHIgdG8gdGhlIGFzc29jaWF0ZWQgbmV0ZGV2aWNlIHN0cnVjdAorICoKKyAqIFJldHVybnMgOiAwIGZvciBzdWNjZXNzCisgKiBMb2NraW5nOiBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBSVE5MIG11dGV4IGhlbGQKKyAqLworc3RhdGljIGludCBmY29lX2ludGVyZmFjZV9zZXR1cChzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZmNvZV9jdGxyICpmaXAgPSAmZmNvZS0+Y3RscjsKKwlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCXU4IGZsb2dpX21hZGRyW0VUSF9BTEVOXTsKKworCWZjb2UtPm5ldGRldiA9IG5ldGRldjsKKworCS8qIERvIG5vdCBzdXBwb3J0IGZvciBib25kaW5nIGRldmljZSAqLworCWlmICgobmV0ZGV2LT5wcml2X2ZsYWdzICYgSUZGX01BU1RFUl9BTEIpIHx8CisJICAgIChuZXRkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfSU5BQ1RJVkUpIHx8CisJICAgIChuZXRkZXYtPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSXzgwMjNBRCkpIHsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8qIGxvb2sgZm9yIFNBTiBNQUMgYWRkcmVzcywgaWYgbXVsdGlwbGUgU0FOIE1BQ3MgZXhpc3QsIG9ubHkKKwkgKiB1c2UgdGhlIGZpcnN0IG9uZSBmb3IgU1BNQSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlmb3JfZWFjaF9kZXZfYWRkcihuZXRkZXYsIGhhKSB7CisJCWlmICgoaGEtPnR5cGUgPT0gTkVUREVWX0hXX0FERFJfVF9TQU4pICYmCisJCSAgICAoaXNfdmFsaWRfZXRoZXJfYWRkcihmaXAtPmN0bF9zcmNfYWRkcikpKSB7CisJCQltZW1jcHkoZmlwLT5jdGxfc3JjX2FkZHIsIGhhLT5hZGRyLCBFVEhfQUxFTik7CisJCQlmaXAtPnNwbWEgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkvKiBzZXR1cCBTb3VyY2UgTWFjIEFkZHJlc3MgKi8KKwlpZiAoIWZpcC0+c3BtYSkKKwkJbWVtY3B5KGZpcC0+Y3RsX3NyY19hZGRyLCBuZXRkZXYtPmRldl9hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCS8qCisJICogQWRkIEZDb0UgTUFDIGFkZHJlc3MgYXMgc2Vjb25kIHVuaWNhc3QgTUFDIGFkZHJlc3MKKwkgKiBvciBlbnRlciBwcm9taXNjdW91cyBtb2RlIGlmIG5vdCBjYXBhYmxlIG9mIGxpc3RlbmluZworCSAqIGZvciBtdWx0aXBsZSB1bmljYXN0IE1BQ3MuCisJICovCisJbWVtY3B5KGZsb2dpX21hZGRyLCAodThbNl0pIEZDX0ZDT0VfRkxPR0lfTUFDLCBFVEhfQUxFTik7CisJZGV2X3VuaWNhc3RfYWRkKG5ldGRldiwgZmxvZ2lfbWFkZHIpOworCWlmIChmaXAtPnNwbWEpCisJCWRldl91bmljYXN0X2FkZChuZXRkZXYsIGZpcC0+Y3RsX3NyY19hZGRyKTsKKwlkZXZfbWNfYWRkKG5ldGRldiwgRklQX0FMTF9FTk9ERV9NQUNTLCBFVEhfQUxFTiwgMCk7CisKKwkvKgorCSAqIHNldHVwIHRoZSByZWNlaXZlIGZ1bmN0aW9uIGZyb20gZXRoZXJuZXQgZHJpdmVyCisJICogb24gdGhlIGV0aGVydHlwZSBmb3IgdGhlIGdpdmVuIGRldmljZQorCSAqLworCWZjb2UtPmZjb2VfcGFja2V0X3R5cGUuZnVuYyA9IGZjb2VfcmN2OworCWZjb2UtPmZjb2VfcGFja2V0X3R5cGUudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRkNPRSk7CisJZmNvZS0+ZmNvZV9wYWNrZXRfdHlwZS5kZXYgPSBuZXRkZXY7CisJZGV2X2FkZF9wYWNrKCZmY29lLT5mY29lX3BhY2tldF90eXBlKTsKKworCWZjb2UtPmZpcF9wYWNrZXRfdHlwZS5mdW5jID0gZmNvZV9maXBfcmVjdjsKKwlmY29lLT5maXBfcGFja2V0X3R5cGUudHlwZSA9IGh0b25zKEVUSF9QX0ZJUCk7CisJZmNvZS0+ZmlwX3BhY2tldF90eXBlLmRldiA9IG5ldGRldjsKKwlkZXZfYWRkX3BhY2soJmZjb2UtPmZpcF9wYWNrZXRfdHlwZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZmNvZV9maXBfc2VuZChzdHJ1Y3QgZmNvZV9jdGxyICpmaXAsIHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIHZvaWQgZmNvZV91cGRhdGVfc3JjX21hYyhzdHJ1Y3QgZmNvZV9jdGxyICpmaXAsIHU4ICpvbGQsIHU4ICpuZXcpOworc3RhdGljIHZvaWQgZmNvZV9kZXN0cm95X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworLyoqCisgKiBmY29lX2ludGVyZmFjZV9jcmVhdGUoKQorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UKKyAqCisgKiBSZXR1cm5zOiBwb2ludGVyIHRvIGEgc3RydWN0IGZjb2VfaW50ZXJmYWNlIG9yIE5VTEwgb24gZXJyb3IKKyAqLworc3RhdGljIHN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZV9pbnRlcmZhY2VfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOworCisJZmNvZSA9IGt6YWxsb2Moc2l6ZW9mKCpmY29lKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmY29lKSB7CisJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZmNvZSBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZXZfaG9sZChuZXRkZXYpOworCWtyZWZfaW5pdCgmZmNvZS0+a3JlZik7CisKKwkvKgorCSAqIEluaXRpYWxpemUgRklQLgorCSAqLworCWZjb2VfY3Rscl9pbml0KCZmY29lLT5jdGxyKTsKKwlmY29lLT5jdGxyLnNlbmQgPSBmY29lX2ZpcF9zZW5kOworCWZjb2UtPmN0bHIudXBkYXRlX21hYyA9IGZjb2VfdXBkYXRlX3NyY19tYWM7CisKKwlmY29lX2ludGVyZmFjZV9zZXR1cChmY29lLCBuZXRkZXYpOworCisJcmV0dXJuIGZjb2U7Cit9CisKKy8qKgorICogZmNvZV9pbnRlcmZhY2VfY2xlYW51cCgpIC0gY2xlYW4gdXAgbmV0ZGV2IGNvbmZpZ3VyYXRpb25zCisgKiBAZmNvZToKKyAqCisgKiBDYWxsZXIgbXVzdCBiZSBob2xkaW5nIHRoZSBSVE5MIG11dGV4CisgKi8KK3ZvaWQgZmNvZV9pbnRlcmZhY2VfY2xlYW51cChzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2UpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZjb2UtPm5ldGRldjsKKwlzdHJ1Y3QgZmNvZV9jdGxyICpmaXAgPSAmZmNvZS0+Y3RscjsKKwl1OCBmbG9naV9tYWRkcltFVEhfQUxFTl07CisKKwkvKgorCSAqIERvbid0IGxpc3RlbiBmb3IgRXRoZXJuZXQgcGFja2V0cyBhbnltb3JlLgorCSAqIHN5bmNocm9uaXplX25ldCgpIGVuc3VyZXMgdGhhdCB0aGUgcGFja2V0IGhhbmRsZXJzIGFyZSBub3QgcnVubmluZworCSAqIG9uIGFub3RoZXIgQ1BVLiBkZXZfcmVtb3ZlX3BhY2soKSB3b3VsZCBkbyB0aGF0LCB0aGlzIGNhbGxzIHRoZQorCSAqIHVuc3luY3Jvbml6ZWQgdmVyc2lvbiBfX2Rldl9yZW1vdmVfcGFjaygpIHRvIGF2b2lkIG11bHRpcGxlIGRlbGF5cy4KKwkgKi8KKwlfX2Rldl9yZW1vdmVfcGFjaygmZmNvZS0+ZmNvZV9wYWNrZXRfdHlwZSk7CisJX19kZXZfcmVtb3ZlX3BhY2soJmZjb2UtPmZpcF9wYWNrZXRfdHlwZSk7CisJc3luY2hyb25pemVfbmV0KCk7CisKKwkvKiBEZWxldGUgc2Vjb25kYXJ5IE1BQyBhZGRyZXNzZXMgKi8KKwltZW1jcHkoZmxvZ2lfbWFkZHIsICh1OFs2XSkgRkNfRkNPRV9GTE9HSV9NQUMsIEVUSF9BTEVOKTsKKwlkZXZfdW5pY2FzdF9kZWxldGUobmV0ZGV2LCBmbG9naV9tYWRkcik7CisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoZmlwLT5kYXRhX3NyY19hZGRyKSkKKwkJZGV2X3VuaWNhc3RfZGVsZXRlKG5ldGRldiwgZmlwLT5kYXRhX3NyY19hZGRyKTsKKwlpZiAoZmlwLT5zcG1hKQorCQlkZXZfdW5pY2FzdF9kZWxldGUobmV0ZGV2LCBmaXAtPmN0bF9zcmNfYWRkcik7CisJZGV2X21jX2RlbGV0ZShuZXRkZXYsIEZJUF9BTExfRU5PREVfTUFDUywgRVRIX0FMRU4sIDApOworfQorCisvKioKKyAqIGZjb2VfaW50ZXJmYWNlX3JlbGVhc2UoKSAtIGZjb2VfcG9ydCBrcmVmIHJlbGVhc2UgZnVuY3Rpb24KKyAqIEBrcmVmOiBlbWJlZGRlZCByZWZlcmVuY2UgY291bnQgaW4gYW4gZmNvZV9pbnRlcmZhY2Ugc3RydWN0CisgKi8KK3N0YXRpYyB2b2lkIGZjb2VfaW50ZXJmYWNlX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwlmY29lID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBmY29lX2ludGVyZmFjZSwga3JlZik7CisJbmV0ZGV2ID0gZmNvZS0+bmV0ZGV2OworCS8qIHRlYXItZG93biB0aGUgRkNvRSBjb250cm9sbGVyICovCisJZmNvZV9jdGxyX2Rlc3Ryb3koJmZjb2UtPmN0bHIpOworCWtmcmVlKGZjb2UpOworCWRldl9wdXQobmV0ZGV2KTsKK30KKworLyoqCisgKiBmY29lX2ludGVyZmFjZV9nZXQoKQorICogQGZjb2U6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmY29lX2ludGVyZmFjZV9nZXQoc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lKQoreworCWtyZWZfZ2V0KCZmY29lLT5rcmVmKTsKK30KKworLyoqCisgKiBmY29lX2ludGVyZmFjZV9wdXQoKQorICogQGZjb2U6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmY29lX2ludGVyZmFjZV9wdXQoc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lKQoreworCWtyZWZfcHV0KCZmY29lLT5rcmVmLCBmY29lX2ludGVyZmFjZV9yZWxlYXNlKTsKK30KKwogLyoqCiAgKiBmY29lX2ZpcF9yZWN2IC0gaGFuZGxlIGEgcmVjZWl2ZWQgRklQIGZyYW1lLgogICogQHNrYjogdGhlIHJlY2VpdmUgc2tiCkBAIC0xNDUsMTAgKzMzMSwxMCBAQAogCQkJIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsCiAJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CiAKLQlmYyA9IGNvbnRhaW5lcl9vZihwdHlwZSwgc3RydWN0IGZjb2Vfc29mdGMsIGZpcF9wYWNrZXRfdHlwZSk7Ci0JZmNvZV9jdGxyX3JlY3YoJmZjLT5jdGxyLCBza2IpOworCWZjb2UgPSBjb250YWluZXJfb2YocHR5cGUsIHN0cnVjdCBmY29lX2ludGVyZmFjZSwgZmlwX3BhY2tldF90eXBlKTsKKwlmY29lX2N0bHJfcmVjdigmZmNvZS0+Y3Rsciwgc2tiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU5LDcgKzM0NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZjb2VfZmlwX3NlbmQoc3RydWN0IGZjb2VfY3RsciAqZmlwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXNrYi0+ZGV2ID0gZmNvZV9mcm9tX2N0bHIoZmlwKS0+cmVhbF9kZXY7CisJc2tiLT5kZXYgPSBmY29lX2Zyb21fY3RscihmaXApLT5uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQoc2tiKTsKIH0KIApAQCAtMTc0LDEzICszNjAsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgZmNvZV91cGRhdGVfc3JjX21hYyhzdHJ1Y3QgZmNvZV9jdGxyICpmaXAsIHU4ICpvbGQsIHU4ICpuZXcpCiB7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKIAotCWZjID0gZmNvZV9mcm9tX2N0bHIoZmlwKTsKKwlmY29lID0gZmNvZV9mcm9tX2N0bHIoZmlwKTsKIAlydG5sX2xvY2soKTsKIAlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihvbGQpKQotCQlkZXZfdW5pY2FzdF9kZWxldGUoZmMtPnJlYWxfZGV2LCBvbGQpOwotCWRldl91bmljYXN0X2FkZChmYy0+cmVhbF9kZXYsIG5ldyk7CisJCWRldl91bmljYXN0X2RlbGV0ZShmY29lLT5uZXRkZXYsIG9sZCk7CisJZGV2X3VuaWNhc3RfYWRkKGZjb2UtPm5ldGRldiwgbmV3KTsKIAlydG5sX3VubG9jaygpOwogfQogCkBAIC0yMTcsMzAgKzQwMyw2IEBACiB9CiAKIC8qKgotICogZmNvZV9uZXRkZXZfY2xlYW51cCgpIC0gY2xlYW4gdXAgbmV0ZGV2IGNvbmZpZ3VyYXRpb25zCi0gKiBAZmM6IHB0ciB0byB0aGUgZmNvZV9zb2Z0YwotICovCi12b2lkIGZjb2VfbmV0ZGV2X2NsZWFudXAoc3RydWN0IGZjb2Vfc29mdGMgKmZjKQotewotCXU4IGZsb2dpX21hZGRyW0VUSF9BTEVOXTsKLQotCS8qIERvbid0IGxpc3RlbiBmb3IgRXRoZXJuZXQgcGFja2V0cyBhbnltb3JlICovCi0JZGV2X3JlbW92ZV9wYWNrKCZmYy0+ZmNvZV9wYWNrZXRfdHlwZSk7Ci0JZGV2X3JlbW92ZV9wYWNrKCZmYy0+ZmlwX3BhY2tldF90eXBlKTsKLQotCS8qIERlbGV0ZSBzZWNvbmRhcnkgTUFDIGFkZHJlc3NlcyAqLwotCXJ0bmxfbG9jaygpOwotCW1lbWNweShmbG9naV9tYWRkciwgKHU4WzZdKSBGQ19GQ09FX0ZMT0dJX01BQywgRVRIX0FMRU4pOwotCWRldl91bmljYXN0X2RlbGV0ZShmYy0+cmVhbF9kZXYsIGZsb2dpX21hZGRyKTsKLQlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihmYy0+Y3Rsci5kYXRhX3NyY19hZGRyKSkKLQkJZGV2X3VuaWNhc3RfZGVsZXRlKGZjLT5yZWFsX2RldiwgZmMtPmN0bHIuZGF0YV9zcmNfYWRkcik7Ci0JaWYgKGZjLT5jdGxyLnNwbWEpCi0JCWRldl91bmljYXN0X2RlbGV0ZShmYy0+cmVhbF9kZXYsIGZjLT5jdGxyLmN0bF9zcmNfYWRkcik7Ci0JZGV2X21jX2RlbGV0ZShmYy0+cmVhbF9kZXYsIEZJUF9BTExfRU5PREVfTUFDUywgRVRIX0FMRU4sIDApOwotCXJ0bmxfdW5sb2NrKCk7Ci19Ci0KLS8qKgogICogZmNvZV9xdWV1ZV90aW1lcigpIC0gZmNvZSBxdWV1ZSB0aW1lcgogICogQGxwOiB0aGUgZmNfbHBvcnQgcG9pbnRlcgogICoKQEAgLTI2NSwxMTYgKzQyNyw1MyBAQAogewogCXUzMiBtZnM7CiAJdTY0IHd3bm4sIHd3cG47Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOwotCXU4IGZsb2dpX21hZGRyW0VUSF9BTEVOXTsKLQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCiAJLyogU2V0dXAgbHBvcnQgcHJpdmF0ZSBkYXRhIHRvIHBvaW50IHRvIGZjb2Ugc29mdGMgKi8KLQlmYyA9IGxwb3J0X3ByaXYobHApOwotCWZjLT5jdGxyLmxwID0gbHA7Ci0JZmMtPnJlYWxfZGV2ID0gbmV0ZGV2OwotCWZjLT5waHlzX2RldiA9IG5ldGRldjsKLQotCS8qIFJlcXVpcmUgc3VwcG9ydCBmb3IgZ2V0X3BhdXNlcGFyYW0gZXRodG9vbCBvcC4gKi8KLQlpZiAobmV0ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKQotCQlmYy0+cGh5c19kZXYgPSB2bGFuX2Rldl9yZWFsX2RldihuZXRkZXYpOwotCi0JLyogRG8gbm90IHN1cHBvcnQgZm9yIGJvbmRpbmcgZGV2aWNlICovCi0JaWYgKChmYy0+cmVhbF9kZXYtPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSX0FMQikgfHwKLQkgICAgKGZjLT5yZWFsX2Rldi0+cHJpdl9mbGFncyAmIElGRl9TTEFWRV9JTkFDVElWRSkgfHwKLQkgICAgKGZjLT5yZWFsX2Rldi0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfODAyM0FEKSkgewotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQorCXBvcnQgPSBscG9ydF9wcml2KGxwKTsKKwlmY29lID0gcG9ydC0+ZmNvZTsKIAogCS8qCiAJICogRGV0ZXJtaW5lIG1heCBmcmFtZSBzaXplIGJhc2VkIG9uIHVuZGVybHlpbmcgZGV2aWNlIGFuZCBvcHRpb25hbAogCSAqIHVzZXItY29uZmlndXJlZCBsaW1pdC4gIElmIHRoZSBNRlMgaXMgdG9vIGxvdywgZmNvZV9saW5rX29rKCkKIAkgKiB3aWxsIHJldHVybiAwLCBzbyBkbyB0aGlzIGZpcnN0LgogCSAqLwotCW1mcyA9IGZjLT5yZWFsX2Rldi0+bXR1IC0gKHNpemVvZihzdHJ1Y3QgZmNvZV9oZHIpICsKLQkJCQkgICBzaXplb2Yoc3RydWN0IGZjb2VfY3JjX2VvZikpOworCW1mcyA9IG5ldGRldi0+bXR1IC0gKHNpemVvZihzdHJ1Y3QgZmNvZV9oZHIpICsKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmY29lX2NyY19lb2YpKTsKIAlpZiAoZmNfc2V0X21mcyhscCwgbWZzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBvZmZsb2FkIGZlYXR1cmVzIHN1cHBvcnQgKi8KLQlpZiAoZmMtPnJlYWxfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfU0cpCisJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKQogCQlscC0+c2dfc3VwcCA9IDE7CiAKLSNpZmRlZiBORVRJRl9GX0ZDT0VfQ1JDCiAJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0ZDT0VfQ1JDKSB7CiAJCWxwLT5jcmNfb2ZmbG9hZCA9IDE7CiAJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJTdXBwb3J0cyBGQ0NSQyBvZmZsb2FkXG4iKTsKIAl9Ci0jZW5kaWYKLSNpZmRlZiBORVRJRl9GX0ZTTwogCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GU08pIHsKIAkJbHAtPnNlcV9vZmZsb2FkID0gMTsKIAkJbHAtPmxzb19tYXggPSBuZXRkZXYtPmdzb19tYXhfc2l6ZTsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIlN1cHBvcnRzIExTTyBmb3IgbWF4IGxlbiAweCV4XG4iLAogCQkJCWxwLT5sc29fbWF4KTsKIAl9Ci0jZW5kaWYKIAlpZiAobmV0ZGV2LT5mY29lX2RkcF94aWQpIHsKIAkJbHAtPmxyb19lbmFibGVkID0gMTsKIAkJbHAtPmxyb194aWQgPSBuZXRkZXYtPmZjb2VfZGRwX3hpZDsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIlN1cHBvcnRzIExSTyBmb3IgbWF4IHhpZCAweCV4XG4iLAogCQkJCWxwLT5scm9feGlkKTsKIAl9Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZSk7Ci0JZmMtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUgPSAwOwotCXNldHVwX3RpbWVyKCZmYy0+dGltZXIsIGZjb2VfcXVldWVfdGltZXIsICh1bnNpZ25lZCBsb25nKWxwKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUpOworCXBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUgPSAwOworCXNldHVwX3RpbWVyKCZwb3J0LT50aW1lciwgZmNvZV9xdWV1ZV90aW1lciwgKHVuc2lnbmVkIGxvbmcpbHApOwogCi0JLyogbG9vayBmb3IgU0FOIE1BQyBhZGRyZXNzLCBpZiBtdWx0aXBsZSBTQU4gTUFDcyBleGlzdCwgb25seQotCSAqIHVzZSB0aGUgZmlyc3Qgb25lIGZvciBTUE1BICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWZvcl9lYWNoX2Rldl9hZGRyKG5ldGRldiwgaGEpIHsKLQkJaWYgKChoYS0+dHlwZSA9PSBORVRERVZfSFdfQUREUl9UX1NBTikgJiYKLQkJICAgIChpc192YWxpZF9ldGhlcl9hZGRyKGZjLT5jdGxyLmN0bF9zcmNfYWRkcikpKSB7Ci0JCQltZW1jcHkoZmMtPmN0bHIuY3RsX3NyY19hZGRyLCBoYS0+YWRkciwgRVRIX0FMRU4pOwotCQkJZmMtPmN0bHIuc3BtYSA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCS8qIHNldHVwIFNvdXJjZSBNYWMgQWRkcmVzcyAqLwotCWlmICghZmMtPmN0bHIuc3BtYSkKLQkJbWVtY3B5KGZjLT5jdGxyLmN0bF9zcmNfYWRkciwgZmMtPnJlYWxfZGV2LT5kZXZfYWRkciwKLQkJICAgICAgIGZjLT5yZWFsX2Rldi0+YWRkcl9sZW4pOwotCi0Jd3dubiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjLT5yZWFsX2Rldi0+ZGV2X2FkZHIsIDEsIDApOworCXd3bm4gPSBmY29lX3d3bl9mcm9tX21hYyhuZXRkZXYtPmRldl9hZGRyLCAxLCAwKTsKIAlmY19zZXRfd3dubihscCwgd3dubik7CiAJLyogWFhYIC0gM3JkIGFyZyBuZWVkcyB0byBiZSB2bGFuIGlkICovCi0Jd3dwbiA9IGZjb2Vfd3duX2Zyb21fbWFjKGZjLT5yZWFsX2Rldi0+ZGV2X2FkZHIsIDIsIDApOworCXd3cG4gPSBmY29lX3d3bl9mcm9tX21hYyhuZXRkZXYtPmRldl9hZGRyLCAyLCAwKTsKIAlmY19zZXRfd3dwbihscCwgd3dwbik7CiAKLQkvKgotCSAqIEFkZCBGQ29FIE1BQyBhZGRyZXNzIGFzIHNlY29uZCB1bmljYXN0IE1BQyBhZGRyZXNzCi0JICogb3IgZW50ZXIgcHJvbWlzY3VvdXMgbW9kZSBpZiBub3QgY2FwYWJsZSBvZiBsaXN0ZW5pbmcKLQkgKiBmb3IgbXVsdGlwbGUgdW5pY2FzdCBNQUNzLgotCSAqLwotCXJ0bmxfbG9jaygpOwotCW1lbWNweShmbG9naV9tYWRkciwgKHU4WzZdKSBGQ19GQ09FX0ZMT0dJX01BQywgRVRIX0FMRU4pOwotCWRldl91bmljYXN0X2FkZChmYy0+cmVhbF9kZXYsIGZsb2dpX21hZGRyKTsKLQlpZiAoZmMtPmN0bHIuc3BtYSkKLQkJZGV2X3VuaWNhc3RfYWRkKGZjLT5yZWFsX2RldiwgZmMtPmN0bHIuY3RsX3NyY19hZGRyKTsKLQlkZXZfbWNfYWRkKGZjLT5yZWFsX2RldiwgRklQX0FMTF9FTk9ERV9NQUNTLCBFVEhfQUxFTiwgMCk7Ci0JcnRubF91bmxvY2soKTsKLQotCS8qCi0JICogc2V0dXAgdGhlIHJlY2VpdmUgZnVuY3Rpb24gZnJvbSBldGhlcm5ldCBkcml2ZXIKLQkgKiBvbiB0aGUgZXRoZXJ0eXBlIGZvciB0aGUgZ2l2ZW4gZGV2aWNlCi0JICovCi0JZmMtPmZjb2VfcGFja2V0X3R5cGUuZnVuYyA9IGZjb2VfcmN2OwotCWZjLT5mY29lX3BhY2tldF90eXBlLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0ZDT0UpOwotCWZjLT5mY29lX3BhY2tldF90eXBlLmRldiA9IGZjLT5yZWFsX2RldjsKLQlkZXZfYWRkX3BhY2soJmZjLT5mY29lX3BhY2tldF90eXBlKTsKLQotCWZjLT5maXBfcGFja2V0X3R5cGUuZnVuYyA9IGZjb2VfZmlwX3JlY3Y7Ci0JZmMtPmZpcF9wYWNrZXRfdHlwZS50eXBlID0gaHRvbnMoRVRIX1BfRklQKTsKLQlmYy0+ZmlwX3BhY2tldF90eXBlLmRldiA9IGZjLT5yZWFsX2RldjsKLQlkZXZfYWRkX3BhY2soJmZjLT5maXBfcGFja2V0X3R5cGUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNSw4NiArNTE0LDE0MCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogZmNvZV9vZW1fbWF0Y2goKSAtIG1hdGNoIGZvciByZWFkIHR5cGVzIElPCisgKiBAZnA6IHRoZSBmY19mcmFtZSBmb3IgbmV3IElPLgorICoKKyAqIFJldHVybnMgOiB0cnVlIGZvciByZWFkIHR5cGVzIElPLCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKyAqLworYm9vbCBmY29lX29lbV9tYXRjaChzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCXJldHVybiBmY19mY3BfaXNfcmVhZChmcl9mc3AoZnApKSAmJgorCQkoZnJfZnNwKGZwKS0+ZGF0YV9sZW4gPiBmY29lX2RkcF9taW4pOworfQorCiAvKioKICAqIGZjb2VfZW1fY29uZmlnKCkgLSBhbGxvY2F0ZXMgZW0gZm9yIHRoaXMgbHBvcnQKLSAqIEBscDogdGhlIHBvcnQgdGhhdCBlbSBpcyB0byBhbGxvY2F0ZWQgZm9yCisgKiBAbHA6IHRoZSBmY29lIHRoYXQgZW0gaXMgdG8gYWxsb2NhdGVkIGZvcgogICoKICAqIFJldHVybnMgOiAwIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGlubGluZSBpbnQgZmNvZV9lbV9jb25maWcoc3RydWN0IGZjX2xwb3J0ICpscCkKIHsKLQlCVUdfT04obHAtPmVtcCk7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHApOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSA9IHBvcnQtPmZjb2U7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpvbGRmY29lID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqb2xkX3JlYWxfZGV2LCAqY3VyX3JlYWxfZGV2OworCXUxNiBtaW5feGlkID0gRkNPRV9NSU5fWElEOworCXUxNiBtYXhfeGlkID0gRkNPRV9NQVhfWElEOwogCi0JbHAtPmVtcCA9IGZjX2V4Y2hfbWdyX2FsbG9jKGxwLCBGQ19DTEFTU18zLAotCQkJCSAgICBGQ09FX01JTl9YSUQsIEZDT0VfTUFYX1hJRCk7Ci0JaWYgKCFscC0+ZW1wKQorCS8qCisJICogQ2hlY2sgaWYgbmVlZCB0byBhbGxvY2F0ZSBhbiBlbSBpbnN0YW5jZSBmb3IKKwkgKiBvZmZsb2FkIGV4Y2hhbmdlIGlkcyB0byBiZSBzaGFyZWQgYWNyb3NzIGFsbCBWTl9QT1JUcy9scG9ydC4KKwkgKi8KKwlpZiAoIWxwLT5scm9fZW5hYmxlZCB8fCAhbHAtPmxyb194aWQgfHwgKGxwLT5scm9feGlkID49IG1heF94aWQpKSB7CisJCWxwLT5scm9feGlkID0gMDsKKwkJZ290byBza2lwX29lbTsKKwl9CisKKwkvKgorCSAqIFJldXNlIGV4aXN0aW5nIG9mZmxvYWQgZW0gaW5zdGFuY2UgaW4gY2FzZQorCSAqIGl0IGlzIGFscmVhZHkgYWxsb2NhdGVkIG9uIHJlYWwgZXRoIGRldmljZQorCSAqLworCWlmIChmY29lLT5uZXRkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pCisJCWN1cl9yZWFsX2RldiA9IHZsYW5fZGV2X3JlYWxfZGV2KGZjb2UtPm5ldGRldik7CisJZWxzZQorCQljdXJfcmVhbF9kZXYgPSBmY29lLT5uZXRkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9sZGZjb2UsICZmY29lX2hvc3RsaXN0LCBsaXN0KSB7CisJCWlmIChvbGRmY29lLT5uZXRkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pCisJCQlvbGRfcmVhbF9kZXYgPSB2bGFuX2Rldl9yZWFsX2RldihvbGRmY29lLT5uZXRkZXYpOworCQllbHNlCisJCQlvbGRfcmVhbF9kZXYgPSBvbGRmY29lLT5uZXRkZXY7CisKKwkJaWYgKGN1cl9yZWFsX2RldiA9PSBvbGRfcmVhbF9kZXYpIHsKKwkJCWZjb2UtPm9lbSA9IG9sZGZjb2UtPm9lbTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZjb2UtPm9lbSkgeworCQlpZiAoIWZjX2V4Y2hfbWdyX2FkZChscCwgZmNvZS0+b2VtLCBmY29lX29lbV9tYXRjaCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmNvZV9lbV9jb25maWc6IGZhaWxlZCB0byBhZGQgIgorCQkJICAgICAgICJvZmZsb2FkIGVtOiVwIG9uIGludGVyZmFjZTolc1xuIiwKKwkJCSAgICAgICBmY29lLT5vZW0sIGZjb2UtPm5ldGRldi0+bmFtZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0gZWxzZSB7CisJCWZjb2UtPm9lbSA9IGZjX2V4Y2hfbWdyX2FsbG9jKGxwLCBGQ19DTEFTU18zLAorCQkJCQkgICAgRkNPRV9NSU5fWElELCBscC0+bHJvX3hpZCwKKwkJCQkJICAgIGZjb2Vfb2VtX21hdGNoKTsKKwkJaWYgKCFmY29lLT5vZW0pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZmNvZV9lbV9jb25maWc6IGZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkgICAgICAgImVtIGZvciBvZmZsb2FkIGV4Y2hlcyBvbiBpbnRlcmZhY2U6JXNcbiIsCisJCQkgICAgICAgZmNvZS0+bmV0ZGV2LT5uYW1lKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJLyoKKwkgKiBFeGNsdWRlIG9mZmxvYWQgRU0geGlkIHJhbmdlIGZyb20gbmV4dCBFTSB4aWQgcmFuZ2UuCisJICovCisJbWluX3hpZCArPSBscC0+bHJvX3hpZCArIDE7CisKK3NraXBfb2VtOgorCWlmICghZmNfZXhjaF9tZ3JfYWxsb2MobHAsIEZDX0NMQVNTXzMsIG1pbl94aWQsIG1heF94aWQsIE5VTEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmNvZV9lbV9jb25maWc6IGZhaWxlZCB0byAiCisJCSAgICAgICAiYWxsb2NhdGUgZW0gb24gaW50ZXJmYWNlICVzXG4iLCBmY29lLT5uZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBmY29lX2lmX2Rlc3Ryb3koKSAtIEZDb0Ugc29mdHdhcmUgSEJBIHRlYXItZG93biBmdW5jdGlvbgotICogQG5ldGRldjogcHRyIHRvIHRoZSBhc3NvY2lhdGVkIG5ldF9kZXZpY2UKLSAqCi0gKiBSZXR1cm5zOiAwIGlmIGxpbmsgaXMgT0sgZm9yIHVzZSBieSBGQ29FLgorICogQGxwb3J0OiBmY19scG9ydCB0byBkZXN0cm95CiAgKi8KLXN0YXRpYyBpbnQgZmNvZV9pZl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCitzdGF0aWMgdm9pZCBmY29lX2lmX2Rlc3Ryb3koc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwID0gTlVMTDsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7Ci0KLQlCVUdfT04oIW5ldGRldik7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSA9IHBvcnQtPmZjb2U7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGZjb2UtPm5ldGRldjsKIAogCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJEZXN0cm95aW5nIGludGVyZmFjZVxuIik7CiAKLQlscCA9IGZjb2VfaG9zdGxpc3RfbG9va3VwKG5ldGRldik7Ci0JaWYgKCFscCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlmYyA9IGxwb3J0X3ByaXYobHApOwotCiAJLyogTG9nb3V0IG9mIHRoZSBmYWJyaWMgKi8KLQlmY19mYWJyaWNfbG9nb2ZmKGxwKTsKLQotCS8qIFJlbW92ZSB0aGUgaW5zdGFuY2UgZnJvbSBmY29lJ3MgbGlzdCAqLwotCWZjb2VfaG9zdGxpc3RfcmVtb3ZlKGxwKTsKLQotCS8qIGNsZWFuIHVwIG5ldGRldiBjb25maWd1cmF0aW9ucyAqLwotCWZjb2VfbmV0ZGV2X2NsZWFudXAoZmMpOwotCi0JLyogdGVhci1kb3duIHRoZSBGQ29FIGNvbnRyb2xsZXIgKi8KLQlmY29lX2N0bHJfZGVzdHJveSgmZmMtPmN0bHIpOworCWZjX2ZhYnJpY19sb2dvZmYobHBvcnQpOwogCiAJLyogQ2xlYW51cCB0aGUgZmNfbHBvcnQgKi8KLQlmY19scG9ydF9kZXN0cm95KGxwKTsKLQlmY19mY3BfZGVzdHJveShscCk7CisJZmNfbHBvcnRfZGVzdHJveShscG9ydCk7CisJZmNfZmNwX2Rlc3Ryb3kobHBvcnQpOworCisJLyogU3RvcCB0aGUgdHJhbnNtaXQgcmV0cnkgdGltZXIgKi8KKwlkZWxfdGltZXJfc3luYygmcG9ydC0+dGltZXIpOworCisJLyogRnJlZSBleGlzdGluZyB0cmFuc21pdCBza2JzICovCisJZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKGxwb3J0KTsKKworCS8qIHJlY2VpdmVzIG1heSBub3QgYmUgc3RvcHBlZCB1bnRpbCBhZnRlciB0aGlzICovCisJZmNvZV9pbnRlcmZhY2VfcHV0KGZjb2UpOworCisJLyogRnJlZSBxdWV1ZWQgcGFja2V0cyBmb3IgdGhlIHBlci1DUFUgcmVjZWl2ZSB0aHJlYWRzICovCisJZmNvZV9wZXJjcHVfY2xlYW4obHBvcnQpOwogCiAJLyogRGV0YWNoIGZyb20gdGhlIHNjc2ktbWwgKi8KLQlmY19yZW1vdmVfaG9zdChscC0+aG9zdCk7Ci0Jc2NzaV9yZW1vdmVfaG9zdChscC0+aG9zdCk7CisJZmNfcmVtb3ZlX2hvc3QobHBvcnQtPmhvc3QpOworCXNjc2lfcmVtb3ZlX2hvc3QobHBvcnQtPmhvc3QpOwogCiAJLyogVGhlcmUgYXJlIG5vIG1vcmUgcnBvcnRzIG9yIEkvTywgZnJlZSB0aGUgRU0gKi8KLQlpZiAobHAtPmVtcCkKLQkJZmNfZXhjaF9tZ3JfZnJlZShscC0+ZW1wKTsKLQotCS8qIEZyZWUgdGhlIHBlci1DUFUgcmVjZWl2ZSB0aHJlYWRzICovCi0JZmNvZV9wZXJjcHVfY2xlYW4obHApOwotCi0JLyogRnJlZSBleGlzdGluZyBza2JzICovCi0JZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKGxwKTsKLQotCS8qIFN0b3AgdGhlIHRpbWVyICovCi0JZGVsX3RpbWVyX3N5bmMoJmZjLT50aW1lcik7CisJZmNfZXhjaF9tZ3JfZnJlZShscG9ydCk7CiAKIAkvKiBGcmVlIG1lbW9yeSB1c2VkIGJ5IHN0YXRpc3RpY2FsIGNvdW50ZXJzICovCi0JZmNfbHBvcnRfZnJlZV9zdGF0cyhscCk7CisJZmNfbHBvcnRfZnJlZV9zdGF0cyhscG9ydCk7CiAKLQkvKiBSZWxlYXNlIHRoZSBuZXRfZGV2aWNlIGFuZCBTY3NpX0hvc3QgKi8KLQlkZXZfcHV0KGZjLT5yZWFsX2Rldik7Ci0Jc2NzaV9ob3N0X3B1dChscC0+aG9zdCk7Ci0KLQlyZXR1cm4gMDsKKwkvKiBSZWxlYXNlIHRoZSBTY3NpX0hvc3QgKi8KKwlzY3NpX2hvc3RfcHV0KGxwb3J0LT5ob3N0KTsKIH0KIAogLyoKQEAgLTU0MCwxMDYgKzY5Myw5NiBAQAogfTsKIAogLyoqCi0gKiBmY29lX2lmX2NyZWF0ZSgpIC0gdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBmY29lIGludGVyZmFjZQotICogQG5ldGRldjogcG9pbnRlciB0aGUgYXNzb2NpYXRlZCBuZXRkZXZpY2UKKyAqIGZjb2VfaWZfY3JlYXRlKCkgLSB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGZjb2UgcG9ydAorICogQGZjb2U6IGZjb2VfaW50ZXJmYWNlIHN0cnVjdHVyZSB0byBjcmVhdGUgYW4gZmNfbHBvcnQgaW5zdGFuY2Ugb24KKyAqIEBwYXJlbnQ6IGRldmljZSBwb2ludGVyIHRvIGJlIHRoZSBwYXJlbnQgaW4gc3lzZnMgZm9yIHRoZSBTQ1NJIGhvc3QKICAqCi0gKiBDcmVhdGVzIGZjX2xwb3J0IHN0cnVjdCBhbmQgc2NzaV9ob3N0IGZvciBscG9ydCwgY29uZmlndXJlcyBscG9ydAotICogYW5kIHN0YXJ0cyBmYWJyaWMgbG9naW4uCisgKiBDcmVhdGVzIGZjX2xwb3J0IHN0cnVjdCBhbmQgc2NzaV9ob3N0IGZvciBscG9ydCwgY29uZmlndXJlcyBscG9ydC4KICAqCi0gKiBSZXR1cm5zIDogMCBvbiBzdWNjZXNzCisgKiBSZXR1cm5zIDogVGhlIGFsbG9jYXRlZCBmY19scG9ydCBvciBhbiBlcnJvciBwb2ludGVyCiAgKi8KLXN0YXRpYyBpbnQgZmNvZV9pZl9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBzdHJ1Y3QgZmNfbHBvcnQgKmZjb2VfaWZfY3JlYXRlKHN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZSAqcGFyZW50KQogewogCWludCByYzsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwID0gTlVMTDsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IE5VTEw7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydDsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKLQotCUJVR19PTighbmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZmNvZS0+bmV0ZGV2OwogCiAJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNyZWF0ZSBJbnRlcmZhY2VcbiIpOwogCi0JbHAgPSBmY29lX2hvc3RsaXN0X2xvb2t1cChuZXRkZXYpOwotCWlmIChscCkKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0KIAlzaG9zdCA9IGxpYmZjX2hvc3RfYWxsb2MoJmZjb2Vfc2hvc3RfdGVtcGxhdGUsCi0JCQkJIHNpemVvZihzdHJ1Y3QgZmNvZV9zb2Z0YykpOworCQkJCSBzaXplb2Yoc3RydWN0IGZjb2VfcG9ydCkpOwogCWlmICghc2hvc3QpIHsKIAkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBob3N0IHN0cnVjdHVyZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OwogCX0KLQlscCA9IHNob3N0X3ByaXYoc2hvc3QpOwotCWZjID0gbHBvcnRfcHJpdihscCk7CisJbHBvcnQgPSBzaG9zdF9wcml2KHNob3N0KTsKKwlwb3J0ID0gbHBvcnRfcHJpdihscG9ydCk7CisJcG9ydC0+bHBvcnQgPSBscG9ydDsKKwlwb3J0LT5mY29lID0gZmNvZTsKKwlJTklUX1dPUksoJnBvcnQtPmRlc3Ryb3lfd29yaywgZmNvZV9kZXN0cm95X3dvcmspOwogCiAJLyogY29uZmlndXJlIGZjX2xwb3J0LCBlLmcuLCBlbSAqLwotCXJjID0gZmNvZV9scG9ydF9jb25maWcobHApOworCXJjID0gZmNvZV9scG9ydF9jb25maWcobHBvcnQpOwogCWlmIChyYykgewogCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiQ291bGQgbm90IGNvbmZpZ3VyZSBscG9ydCBmb3IgdGhlICIKIAkJCQkiaW50ZXJmYWNlXG4iKTsKIAkJZ290byBvdXRfaG9zdF9wdXQ7CiAJfQogCi0JLyoKLQkgKiBJbml0aWFsaXplIEZJUC4KLQkgKi8KLQlmY29lX2N0bHJfaW5pdCgmZmMtPmN0bHIpOwotCWZjLT5jdGxyLnNlbmQgPSBmY29lX2ZpcF9zZW5kOwotCWZjLT5jdGxyLnVwZGF0ZV9tYWMgPSBmY29lX3VwZGF0ZV9zcmNfbWFjOwotCiAJLyogY29uZmlndXJlIGxwb3J0IG5ldHdvcmsgcHJvcGVydGllcyAqLwotCXJjID0gZmNvZV9uZXRkZXZfY29uZmlnKGxwLCBuZXRkZXYpOworCXJjID0gZmNvZV9uZXRkZXZfY29uZmlnKGxwb3J0LCBuZXRkZXYpOwogCWlmIChyYykgewogCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiQ291bGQgbm90IGNvbmZpZ3VyZSBuZXRkZXYgZm9yIHRoZSAiCiAJCQkJImludGVyZmFjZVxuIik7Ci0JCWdvdG8gb3V0X25ldGRldl9jbGVhbnVwOworCQlnb3RvIG91dF9scF9kZXN0cm95OwogCX0KIAogCS8qIGNvbmZpZ3VyZSBscG9ydCBzY3NpIGhvc3QgcHJvcGVydGllcyAqLwotCXJjID0gZmNvZV9zaG9zdF9jb25maWcobHAsIHNob3N0LCAmbmV0ZGV2LT5kZXYpOworCXJjID0gZmNvZV9zaG9zdF9jb25maWcobHBvcnQsIHNob3N0LCBwYXJlbnQpOwogCWlmIChyYykgewogCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiQ291bGQgbm90IGNvbmZpZ3VyZSBzaG9zdCBmb3IgdGhlICIKIAkJCQkiaW50ZXJmYWNlXG4iKTsKLQkJZ290byBvdXRfbmV0ZGV2X2NsZWFudXA7Ci0JfQotCi0JLyogbHBvcnQgZXhjaCBtYW5hZ2VyIGFsbG9jYXRpb24gKi8KLQlyYyA9IGZjb2VfZW1fY29uZmlnKGxwKTsKLQlpZiAocmMpIHsKLQkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBjb25maWd1cmUgdGhlIEVNIGZvciB0aGUgIgotCQkJCSJpbnRlcmZhY2VcbiIpOwotCQlnb3RvIG91dF9uZXRkZXZfY2xlYW51cDsKKwkJZ290byBvdXRfbHBfZGVzdHJveTsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBsaWJyYXJ5ICovCi0JcmMgPSBmY29lX2xpYmZjX2NvbmZpZyhscCwgJmZjb2VfbGliZmNfZmNuX3RlbXBsKTsKKwlyYyA9IGZjb2VfbGliZmNfY29uZmlnKGxwb3J0LCAmZmNvZV9saWJmY19mY25fdGVtcGwpOwogCWlmIChyYykgewogCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiQ291bGQgbm90IGNvbmZpZ3VyZSBsaWJmYyBmb3IgdGhlICIKIAkJCQkiaW50ZXJmYWNlXG4iKTsKIAkJZ290byBvdXRfbHBfZGVzdHJveTsKIAl9CiAKLQkvKiBhZGQgdG8gbHBvcnRzIGxpc3QgKi8KLQlmY29lX2hvc3RsaXN0X2FkZChscCk7CisJLyoKKwkgKiBmY29lX2VtX2FsbG9jKCkgYW5kIGZjb2VfaG9zdGxpc3RfYWRkKCkgYm90aAorCSAqIG5lZWQgdG8gYmUgYXRvbWljIHdpdGggcmVzcGVjdCB0byBvdGhlciBjaGFuZ2VzIHRvIHRoZSBob3N0bGlzdAorCSAqIHNpbmNlIGZjb2VfZW1fYWxsb2MoKSBsb29rcyBmb3IgYW4gZXhpc3RpbmcgRU0KKwkgKiBpbnN0YW5jZSBvbiBob3N0IGxpc3QgdXBkYXRlZCBieSBmY29lX2hvc3RsaXN0X2FkZCgpLgorCSAqCisJICogVGhpcyBpcyBjdXJyZW50bHkgaGFuZGxlZCB0aHJvdWdoIHRoZSBmY29lX2NvbmZpZ19tdXRleCBiZWdpbiBoZWxkLgorCSAqLwogCi0JbHAtPmJvb3RfdGltZSA9IGppZmZpZXM7CisJLyogbHBvcnQgZXhjaCBtYW5hZ2VyIGFsbG9jYXRpb24gKi8KKwlyYyA9IGZjb2VfZW1fY29uZmlnKGxwb3J0KTsKKwlpZiAocmMpIHsKKwkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkNvdWxkIG5vdCBjb25maWd1cmUgdGhlIEVNIGZvciB0aGUgIgorCQkJCSJpbnRlcmZhY2VcbiIpOworCQlnb3RvIG91dF9scF9kZXN0cm95OworCX0KIAotCWZjX2ZhYnJpY19sb2dpbihscCk7Ci0KLQlpZiAoIWZjb2VfbGlua19vayhscCkpCi0JCWZjb2VfY3Rscl9saW5rX3VwKCZmYy0+Y3Rscik7Ci0KLQlkZXZfaG9sZChuZXRkZXYpOwotCi0JcmV0dXJuIHJjOworCWZjb2VfaW50ZXJmYWNlX2dldChmY29lKTsKKwlyZXR1cm4gbHBvcnQ7CiAKIG91dF9scF9kZXN0cm95OgotCWZjX2V4Y2hfbWdyX2ZyZWUobHAtPmVtcCk7IC8qIEZyZWUgdGhlIEVNICovCi1vdXRfbmV0ZGV2X2NsZWFudXA6Ci0JZmNvZV9uZXRkZXZfY2xlYW51cChmYyk7CisJZmNfZXhjaF9tZ3JfZnJlZShscG9ydCk7CiBvdXRfaG9zdF9wdXQ6Ci0Jc2NzaV9ob3N0X3B1dChscC0+aG9zdCk7Ci0JcmV0dXJuIHJjOworCXNjc2lfaG9zdF9wdXQobHBvcnQtPmhvc3QpOworb3V0OgorCXJldHVybiBFUlJfUFRSKHJjKTsKIH0KIAogLyoqCkBAIC02NjksNiArODEyLDcgQEAKIGludCBfX2V4aXQgZmNvZV9pZl9leGl0KHZvaWQpCiB7CiAJZmNfcmVsZWFzZV90cmFuc3BvcnQoc2NzaV90cmFuc3BvcnRfZmNvZV9zdyk7CisJc2NzaV90cmFuc3BvcnRfZmNvZV9zdyA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY4Niw3ICs4MzAsNyBAQAogCXRocmVhZCA9IGt0aHJlYWRfY3JlYXRlKGZjb2VfcGVyY3B1X3JlY2VpdmVfdGhyZWFkLAogCQkJCSh2b2lkICopcCwgImZjb2V0aHJlYWQvJWQiLCBjcHUpOwogCi0JaWYgKGxpa2VseSghSVNfRVJSKHAtPnRocmVhZCkpKSB7CisJaWYgKGxpa2VseSghSVNfRVJSKHRocmVhZCkpKSB7CiAJCWt0aHJlYWRfYmluZCh0aHJlYWQsIGNwdSk7CiAJCXdha2VfdXBfcHJvY2Vzcyh0aHJlYWQpOwogCkBAIC04MzgsMTQgKzk4MiwxMyBAQAogewogCXN0cnVjdCBmY19scG9ydCAqbHA7CiAJc3RydWN0IGZjb2VfcmN2X2luZm8gKmZyOwotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKKwlzdHJ1Y3QgZmNvZV9pbnRlcmZhY2UgKmZjb2U7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAJc3RydWN0IGZjb2VfcGVyY3B1X3MgKmZwczsKLQl1bnNpZ25lZCBzaG9ydCBveGlkOwotCXVuc2lnbmVkIGludCBjcHUgPSAwOworCXVuc2lnbmVkIGludCBjcHU7CiAKLQlmYyA9IGNvbnRhaW5lcl9vZihwdHlwZSwgc3RydWN0IGZjb2Vfc29mdGMsIGZjb2VfcGFja2V0X3R5cGUpOwotCWxwID0gZmMtPmN0bHIubHA7CisJZmNvZSA9IGNvbnRhaW5lcl9vZihwdHlwZSwgc3RydWN0IGZjb2VfaW50ZXJmYWNlLCBmY29lX3BhY2tldF90eXBlKTsKKwlscCA9IGZjb2UtPmN0bHIubHA7CiAJaWYgKHVubGlrZWx5KGxwID09IE5VTEwpKSB7CiAJCUZDT0VfTkVUREVWX0RCRyhkZXYsICJDYW5ub3QgZmluZCBoYmEgc3RydWN0dXJlIik7CiAJCWdvdG8gZXJyMjsKQEAgLTg3NiwyMCArMTAxOSwyMCBAQAogCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNpemVvZihzdHJ1Y3QgZmNvZV9oZHIpKTsKIAlmaCA9IChzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICopIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAKLQlveGlkID0gbnRvaHMoZmgtPmZoX294X2lkKTsKLQogCWZyID0gZmNvZV9kZXZfZnJvbV9za2Ioc2tiKTsKIAlmci0+ZnJfZGV2ID0gbHA7CiAJZnItPnB0eXBlID0gcHR5cGU7CiAKLSNpZmRlZiBDT05GSUdfU01QCiAJLyoKLQkgKiBUaGUgaW5jb21pbmcgZnJhbWUgZXhjaGFuZ2UgaWQob3hpZCkgaXMgQU5EZWQgd2l0aCBudW0gb2Ygb25saW5lCi0JICogY3B1IGJpdHMgdG8gZ2V0IGNwdSBhbmQgdGhlbiB0aGlzIGNwdSBpcyB1c2VkIGZvciBzZWxlY3RpbmcKLQkgKiBhIHBlciBjcHUga2VybmVsIHRocmVhZCBmcm9tIGZjb2VfcGVyY3B1LgorCSAqIEluIGNhc2UgdGhlIGluY29taW5nIGZyYW1lJ3MgZXhjaGFuZ2UgaXMgb3JpZ2luYXRlZCBmcm9tCisJICogdGhlIGluaXRpYXRvciwgdGhlbiByZWNlaXZlZCBmcmFtZSdzIGV4Y2hhbmdlIGlkIGlzIEFORGVkCisJICogd2l0aCBmY19jcHVfbWFzayBiaXRzIHRvIGdldCB0aGUgc2FtZSBjcHUgb24gd2hpY2ggZXhjaGFuZ2UKKwkgKiB3YXMgb3JpZ2luYXRlZCwgb3RoZXJ3aXNlIGp1c3QgdXNlIHRoZSBjdXJyZW50IGNwdS4KIAkgKi8KLQljcHUgPSBveGlkICYgKG51bV9vbmxpbmVfY3B1cygpIC0gMSk7Ci0jZW5kaWYKKwlpZiAobnRvaDI0KGZoLT5maF9mX2N0bCkgJiBGQ19GQ19FWF9DVFgpCisJCWNwdSA9IG50b2hzKGZoLT5maF9veF9pZCkgJiBmY19jcHVfbWFzazsKKwllbHNlCisJCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWZwcyA9ICZwZXJfY3B1KGZjb2VfcGVyY3B1LCBjcHUpOwogCXNwaW5fbG9ja19iaCgmZnBzLT5mY29lX3J4X2xpc3QubG9jayk7CkBAIC05OTYsNyArMTEzOSw3IEBACiAgKiBmY29lX2ZjX2NyYygpIC0gY2FsY3VsYXRlcyBGQyBDUkMgaW4gdGhpcyBmY29lIHNrYgogICogQGZwOiB0aGUgZmNfZnJhbWUgY29udGFpbmluZyBkYXRhIHRvIGJlIGNoZWNrc3VtbWVkCiAgKgotICogVGhpcyB1c2VzIGNyYzMyKCkgdG8gY2FsY3VsYXRlIHRoZSBjcmMgZm9yIGZjIGZyYW1lCisgKiBUaGlzIHVzZXMgY3JjMzIoKSB0byBjYWxjdWxhdGUgdGhlIGNyYyBmb3IgcG9ydCBmcmFtZQogICogUmV0dXJuICAgOiAzMiBiaXQgY3JjCiAgKi8KIHUzMiBmY29lX2ZjX2NyYyhzdHJ1Y3QgZmNfZnJhbWUgKmZwKQpAQCAtMTAyOSw3ICsxMTcyLDcgQEAKIAogLyoqCiAgKiBmY29lX3htaXQoKSAtIEZDb0UgZnJhbWUgdHJhbnNtaXQgZnVuY3Rpb24KLSAqIEBscDoJdGhlIGFzc29jaWF0ZWQgbG9jYWwgcG9ydAorICogQGxwOgl0aGUgYXNzb2NpYXRlZCBsb2NhbCBmY29lCiAgKiBAZnA6IHRoZSBmY19mcmFtZSB0byBiZSB0cmFuc21pdHRlZAogICoKICAqIFJldHVybiAgIDogMCBmb3Igc3VjY2VzcwpAQCAtMTA0NiwxMyArMTE4OSwxMyBAQAogCXVuc2lnbmVkIGludCBobGVuOwkJLyogaGVhZGVyIGxlbmd0aCBpbXBsaWVzIHRoZSB2ZXJzaW9uICovCiAJdW5zaWduZWQgaW50IHRsZW47CQkvKiB0cmFpbGVyIGxlbmd0aCAqLwogCXVuc2lnbmVkIGludCBlbGVuOwkJLyogZXRoIGhlYWRlciwgbWF5IGluY2x1ZGUgdmxhbiAqLwotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0ID0gbHBvcnRfcHJpdihscCk7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lID0gcG9ydC0+ZmNvZTsKIAl1OCBzb2YsIGVvZjsKIAlzdHJ1Y3QgZmNvZV9oZHIgKmhwOwogCiAJV0FSTl9PTigoZnJfbGVuKGZwKSAlIHNpemVvZih1MzIpKSAhPSAwKTsKIAotCWZjID0gbHBvcnRfcHJpdihscCk7CiAJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAlza2IgPSBmcF9za2IoZnApOwogCXdsZW4gPSBza2ItPmxlbiAvIEZDT0VfV09SRF9UT19CWVRFOwpAQCAtMTA2Myw3ICsxMjA2LDcgQEAKIAl9CiAKIAlpZiAodW5saWtlbHkoZmgtPmZoX3JfY3RsID09IEZDX1JDVExfRUxTX1JFUSkgJiYKLQkgICAgZmNvZV9jdGxyX2Vsc19zZW5kKCZmYy0+Y3Rsciwgc2tiKSkKKwkgICAgZmNvZV9jdGxyX2Vsc19zZW5kKCZmY29lLT5jdGxyLCBza2IpKQogCQlyZXR1cm4gMDsKIAogCXNvZiA9IGZyX3NvZihmcCk7CkBAIC0xMDg1LDcgKzEyMjgsNyBAQAogCQljcmMgPSBmY29lX2ZjX2NyYyhmcCk7CiAJfQogCi0JLyogY29weSBmYyBjcmMgYW5kIGVvZiB0byB0aGUgc2tiIGJ1ZmYgKi8KKwkvKiBjb3B5IHBvcnQgY3JjIGFuZCBlb2YgdG8gdGhlIHNrYiBidWZmICovCiAJaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkgewogCQlza2JfZnJhZ190ICpmcmFnOwogCQlpZiAoZmNvZV9nZXRfcGFnZWRfY3JjX2VvZihza2IsIHRsZW4pKSB7CkBAIC0xMTA4LDI3ICsxMjUxLDI3IEBACiAJCWNwID0gTlVMTDsKIAl9CiAKLQkvKiBhZGp1c3Qgc2tiIG5ldHdvcmsvdHJhbnNwb3J0IG9mZnNldHMgdG8gbWF0Y2ggbWFjL2Zjb2UvZmMgKi8KKwkvKiBhZGp1c3Qgc2tiIG5ldHdvcmsvdHJhbnNwb3J0IG9mZnNldHMgdG8gbWF0Y2ggbWFjL2Zjb2UvcG9ydCAqLwogCXNrYl9wdXNoKHNrYiwgZWxlbiArIGhsZW4pOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJc2tiLT5tYWNfbGVuID0gZWxlbjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRkNPRSk7Ci0Jc2tiLT5kZXYgPSBmYy0+cmVhbF9kZXY7CisJc2tiLT5kZXYgPSBmY29lLT5uZXRkZXY7CiAKIAkvKiBmaWxsIHVwIG1hYyBhbmQgZmNvZSBoZWFkZXJzICovCiAJZWggPSBldGhfaGRyKHNrYik7CiAJZWgtPmhfcHJvdG8gPSBodG9ucyhFVEhfUF9GQ09FKTsKLQlpZiAoZmMtPmN0bHIubWFwX2Rlc3QpCisJaWYgKGZjb2UtPmN0bHIubWFwX2Rlc3QpCiAJCWZjX2Zjb2Vfc2V0X21hYyhlaC0+aF9kZXN0LCBmaC0+ZmhfZF9pZCk7CiAJZWxzZQogCQkvKiBpbnNlcnQgR1cgYWRkcmVzcyAqLwotCQltZW1jcHkoZWgtPmhfZGVzdCwgZmMtPmN0bHIuZGVzdF9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShlaC0+aF9kZXN0LCBmY29lLT5jdGxyLmRlc3RfYWRkciwgRVRIX0FMRU4pOwogCi0JaWYgKHVubGlrZWx5KGZjLT5jdGxyLmZsb2dpX294aWQgIT0gRkNfWElEX1VOS05PV04pKQotCQltZW1jcHkoZWgtPmhfc291cmNlLCBmYy0+Y3Rsci5jdGxfc3JjX2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAodW5saWtlbHkoZmNvZS0+Y3Rsci5mbG9naV9veGlkICE9IEZDX1hJRF9VTktOT1dOKSkKKwkJbWVtY3B5KGVoLT5oX3NvdXJjZSwgZmNvZS0+Y3Rsci5jdGxfc3JjX2FkZHIsIEVUSF9BTEVOKTsKIAllbHNlCi0JCW1lbWNweShlaC0+aF9zb3VyY2UsIGZjLT5jdGxyLmRhdGFfc3JjX2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGVoLT5oX3NvdXJjZSwgZmNvZS0+Y3Rsci5kYXRhX3NyY19hZGRyLCBFVEhfQUxFTik7CiAKIAlocCA9IChzdHJ1Y3QgZmNvZV9oZHIgKikoZWggKyAxKTsKIAltZW1zZXQoaHAsIDAsIHNpemVvZigqaHApKTsKQEAgLTExMzYsNyArMTI3OSw2IEBACiAJCUZDX0ZDT0VfRU5DQVBTX1ZFUihocCwgRkNfRkNPRV9WRVIpOwogCWhwLT5mY29lX3NvZiA9IHNvZjsKIAotI2lmZGVmIE5FVElGX0ZfRlNPCiAJLyogZmNvZSBsc28sIG1zcyBpcyBpbiBtYXhfcGF5bG9hZCB3aGljaCBpcyBub24temVybyBmb3IgRkNQIGRhdGEgKi8KIAlpZiAobHAtPnNlcV9vZmZsb2FkICYmIGZyX21heF9wYXlsb2FkKGZwKSkgewogCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19GQ09FOwpAQCAtMTE0NSw3ICsxMjg3LDYgQEAKIAkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IDA7CiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSAwOwogCX0KLSNlbmRpZgogCS8qIHVwZGF0ZSB0eCBzdGF0czogcmVnYXJkbGVzcyBpZiBMTEQgZmFpbHMgKi8KIAlzdGF0cyA9IGZjX2xwb3J0X2dldF9zdGF0cyhscCk7CiAJc3RhdHMtPlR4RnJhbWVzKys7CkBAIC0xMTUzLDcgKzEyOTQsNyBAQAogCiAJLyogc2VuZCBkb3duIHRvIGxsZCAqLwogCWZyX2RldihmcCkgPSBscDsKLQlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuKQorCWlmIChwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUucWxlbikKIAkJZmNvZV9jaGVja193YWl0X3F1ZXVlKGxwLCBza2IpOwogCWVsc2UgaWYgKGZjb2Vfc3RhcnRfaW8oc2tiKSkKIAkJZmNvZV9jaGVja193YWl0X3F1ZXVlKGxwLCBza2IpOwpAQCAtMTE2Miw2ICsxMzAzLDE1IEBACiB9CiAKIC8qKgorICogZmNvZV9wZXJjcHVfZmx1c2hfZG9uZSgpIC0gSW5kaWNhdGUgcGVyY3B1IHF1ZXVlIGZsdXNoIGNvbXBsZXRpb24uCisgKiBAc2tiOiB0aGUgc2tiIGJlaW5nIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIHZvaWQgZmNvZV9wZXJjcHVfZmx1c2hfZG9uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbXBsZXRlKCZmY29lX2ZsdXNoX2NvbXBsZXRpb24pOworfQorCisvKioKICAqIGZjb2VfcGVyY3B1X3JlY2VpdmVfdGhyZWFkKCkgLSByZWN2IHRocmVhZCBwZXIgY3B1CiAgKiBAYXJnOiBwdHIgdG8gdGhlIGZjb2UgcGVyIGNwdSBzdHJ1Y3QKICAqCkBAIC0xMTc5LDcgKzEzMjksNyBAQAogCXN0cnVjdCBmY29lX2NyY19lb2YgY3JjX2VvZjsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwogCXU4ICptYWMgPSBOVUxMOwotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCXN0cnVjdCBmY29lX2hkciAqaHA7CiAKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CkBAIC0xMjAwLDcgKzEzNTAsOCBAQAogCQlmciA9IGZjb2VfZGV2X2Zyb21fc2tiKHNrYik7CiAJCWxwID0gZnItPmZyX2RldjsKIAkJaWYgKHVubGlrZWx5KGxwID09IE5VTEwpKSB7Ci0JCQlGQ09FX05FVERFVl9EQkcoc2tiLT5kZXYsICJJbnZhbGlkIEhCQSBTdHJ1Y3R1cmUiKTsKKwkJCWlmIChza2ItPmRlc3RydWN0b3IgIT0gZmNvZV9wZXJjcHVfZmx1c2hfZG9uZSkKKwkJCQlGQ09FX05FVERFVl9EQkcoc2tiLT5kZXYsICJOVUxMIGxwb3J0IGluIHNrYiIpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTIxNSw3ICsxMzY2LDcgQEAKIAkJLyoKIAkJICogU2F2ZSBzb3VyY2UgTUFDIGFkZHJlc3MgYmVmb3JlIGRpc2NhcmRpbmcgaGVhZGVyLgogCQkgKi8KLQkJZmMgPSBscG9ydF9wcml2KGxwKTsKKwkJcG9ydCA9IGxwb3J0X3ByaXYobHApOwogCQlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKQogCQkJc2tiX2xpbmVhcml6ZShza2IpOwkvKiBub3QgaWRlYWwgKi8KIAkJbWFjID0gZXRoX2hkcihza2IpLT5oX3NvdXJjZTsKQEAgLTEyNzcsNyArMTQyOCw3IEBACiAJCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAJCWlmIChmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9ERF9TT0xfREFUQSAmJgogCQkgICAgZmgtPmZoX3R5cGUgPT0gRkNfVFlQRV9GQ1ApIHsKLQkJCWZjX2V4Y2hfcmVjdihscCwgbHAtPmVtcCwgZnApOworCQkJZmNfZXhjaF9yZWN2KGxwLCBmcCk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoZnJfZmxhZ3MoZnApICYgRkNQSEZfQ1JDX1VOQ0hFQ0tFRCkgewpAQCAtMTI5MywxMiArMTQ0NCwxMiBAQAogCQkJfQogCQkJZnJfZmxhZ3MoZnApICY9IH5GQ1BIRl9DUkNfVU5DSEVDS0VEOwogCQl9Ci0JCWlmICh1bmxpa2VseShmYy0+Y3Rsci5mbG9naV9veGlkICE9IEZDX1hJRF9VTktOT1dOKSAmJgotCQkgICAgZmNvZV9jdGxyX3JlY3ZfZmxvZ2koJmZjLT5jdGxyLCBmcCwgbWFjKSkgeworCQlpZiAodW5saWtlbHkocG9ydC0+ZmNvZS0+Y3Rsci5mbG9naV9veGlkICE9IEZDX1hJRF9VTktOT1dOKSAmJgorCQkgICAgZmNvZV9jdGxyX3JlY3ZfZmxvZ2koJnBvcnQtPmZjb2UtPmN0bHIsIGZwLCBtYWMpKSB7CiAJCQlmY19mcmFtZV9mcmVlKGZwKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWZjX2V4Y2hfcmVjdihscCwgbHAtPmVtcCwgZnApOworCQlmY19leGNoX3JlY3YobHAsIGZwKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzE4LDQ2ICsxNDY5LDQ2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZjb2VfY2hlY2tfd2FpdF9xdWV1ZShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBmY29lX3NvZnRjICpmYyA9IGxwb3J0X3ByaXYobHApOworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQgPSBscG9ydF9wcml2KGxwKTsKIAlpbnQgcmM7CiAKLQlzcGluX2xvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CiAKIAlpZiAoc2tiKQotCQlfX3NrYl9xdWV1ZV90YWlsKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOworCQlfX3NrYl9xdWV1ZV90YWlsKCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUsIHNrYik7CiAKLQlpZiAoZmMtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUpCisJaWYgKHBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUpCiAJCWdvdG8gb3V0OwotCWZjLT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMTsKKwlwb3J0LT5mY29lX3BlbmRpbmdfcXVldWVfYWN0aXZlID0gMTsKIAotCXdoaWxlIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4pIHsKKwl3aGlsZSAocG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4pIHsKIAkJLyoga2VlcCBxbGVuID4gMCB1bnRpbCBmY29lX3N0YXJ0X2lvIHN1Y2NlZWRzICovCi0JCWZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbisrOwotCQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlKTsKKwkJcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4rKzsKKwkJc2tiID0gX19za2JfZGVxdWV1ZSgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlKTsKIAotCQlzcGluX3VubG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKIAkJcmMgPSBmY29lX3N0YXJ0X2lvKHNrYik7Ci0JCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKKwkJc3Bpbl9sb2NrX2JoKCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CiAKIAkJaWYgKHJjKSB7Ci0JCQlfX3NrYl9xdWV1ZV9oZWFkKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOworCQkJX19za2JfcXVldWVfaGVhZCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLCBza2IpOwogCQkJLyogdW5kbyB0ZW1wb3JhcnkgaW5jcmVtZW50IGFib3ZlICovCi0JCQlmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4tLTsKKwkJCXBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuLS07CiAJCQlicmVhazsKIAkJfQogCQkvKiB1bmRvIHRlbXBvcmFyeSBpbmNyZW1lbnQgYWJvdmUgKi8KLQkJZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuLS07CisJCXBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5xbGVuLS07CiAJfQogCi0JaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiA8IEZDT0VfTE9XX1FVRVVFX0RFUFRIKQorCWlmIChwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiA8IEZDT0VfTE9XX1FVRVVFX0RFUFRIKQogCQlscC0+cWZ1bGwgPSAwOwotCWlmIChmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLnFsZW4gJiYgIXRpbWVyX3BlbmRpbmcoJmZjLT50aW1lcikpCi0JCW1vZF90aW1lcigmZmMtPnRpbWVyLCBqaWZmaWVzICsgMik7Ci0JZmMtPmZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmUgPSAwOworCWlmIChwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiAmJiAhdGltZXJfcGVuZGluZygmcG9ydC0+dGltZXIpKQorCQltb2RfdGltZXIoJnBvcnQtPnRpbWVyLCBqaWZmaWVzICsgMik7CisJcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlX2FjdGl2ZSA9IDA7CiBvdXQ6Ci0JaWYgKGZjLT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiA+IEZDT0VfTUFYX1FVRVVFX0RFUFRIKQorCWlmIChwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUucWxlbiA+IEZDT0VfTUFYX1FVRVVFX0RFUFRIKQogCQlscC0+cWZ1bGwgPSAxOwotCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwb3J0LT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CiAJcmV0dXJuOwogfQogCkBAIC0xMzkxLDIxICsxNTQyLDIwIEBACiAJCQkJICAgIHVsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscCA9IE5VTEw7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gcHRyOwotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHRyOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OwogCXN0cnVjdCBmY29lX2Rldl9zdGF0cyAqc3RhdHM7CiAJdTMyIGxpbmtfcG9zc2libGUgPSAxOwogCXUzMiBtZnM7CiAJaW50IHJjID0gTk9USUZZX09LOwogCi0JcmVhZF9sb2NrKCZmY29lX2hvc3RsaXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmMsICZmY29lX2hvc3RsaXN0LCBsaXN0KSB7Ci0JCWlmIChmYy0+cmVhbF9kZXYgPT0gcmVhbF9kZXYpIHsKLQkJCWxwID0gZmMtPmN0bHIubHA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmY29lLCAmZmNvZV9ob3N0bGlzdCwgbGlzdCkgeworCQlpZiAoZmNvZS0+bmV0ZGV2ID09IG5ldGRldikgeworCQkJbHAgPSBmY29lLT5jdGxyLmxwOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2soJmZjb2VfaG9zdGxpc3RfbG9jayk7CiAJaWYgKGxwID09IE5VTEwpIHsKIAkJcmMgPSBOT1RJRllfRE9ORTsKIAkJZ290byBvdXQ7CkBAIC0xNDIwLDIxICsxNTcwLDI3IEBACiAJY2FzZSBORVRERVZfQ0hBTkdFOgogCQlicmVhazsKIAljYXNlIE5FVERFVl9DSEFOR0VNVFU6Ci0JCW1mcyA9IGZjLT5yZWFsX2Rldi0+bXR1IC0KLQkJCShzaXplb2Yoc3RydWN0IGZjb2VfaGRyKSArCi0JCQkgc2l6ZW9mKHN0cnVjdCBmY29lX2NyY19lb2YpKTsKKwkJbWZzID0gbmV0ZGV2LT5tdHUgLSAoc2l6ZW9mKHN0cnVjdCBmY29lX2hkcikgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmY29lX2NyY19lb2YpKTsKIAkJaWYgKG1mcyA+PSBGQ19NSU5fTUFYX0ZSQU1FKQogCQkJZmNfc2V0X21mcyhscCwgbWZzKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfUkVHSVNURVI6CiAJCWJyZWFrOworCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CisJCWxpc3RfZGVsKCZmY29lLT5saXN0KTsKKwkJcG9ydCA9IGxwb3J0X3ByaXYoZmNvZS0+Y3Rsci5scCk7CisJCWZjb2VfaW50ZXJmYWNlX2NsZWFudXAoZmNvZSk7CisJCXNjaGVkdWxlX3dvcmsoJnBvcnQtPmRlc3Ryb3lfd29yayk7CisJCWdvdG8gb3V0OworCQlicmVhazsKIAlkZWZhdWx0OgotCQlGQ09FX05FVERFVl9EQkcocmVhbF9kZXYsICJVbmtub3duIGV2ZW50ICVsZCAiCisJCUZDT0VfTkVUREVWX0RCRyhuZXRkZXYsICJVbmtub3duIGV2ZW50ICVsZCAiCiAJCQkJImZyb20gbmV0ZGV2IG5ldGxpbmtcbiIsIGV2ZW50KTsKIAl9CiAJaWYgKGxpbmtfcG9zc2libGUgJiYgIWZjb2VfbGlua19vayhscCkpCi0JCWZjb2VfY3Rscl9saW5rX3VwKCZmYy0+Y3Rscik7Ci0JZWxzZSBpZiAoZmNvZV9jdGxyX2xpbmtfZG93bigmZmMtPmN0bHIpKSB7CisJCWZjb2VfY3Rscl9saW5rX3VwKCZmY29lLT5jdGxyKTsKKwllbHNlIGlmIChmY29lX2N0bHJfbGlua19kb3duKCZmY29lLT5jdGxyKSkgewogCQlzdGF0cyA9IGZjX2xwb3J0X2dldF9zdGF0cyhscCk7CiAJCXN0YXRzLT5MaW5rRmFpbHVyZUNvdW50Kys7CiAJCWZjb2VfY2xlYW5fcGVuZGluZ19xdWV1ZShscCk7CkBAIC0xNDY1LDc1ICsxNjIxLDYgQEAKIH0KIAogLyoqCi0gKiBmY29lX25ldGRldl90b19tb2R1bGVfb3duZXIoKSAtIGZpbmRzIG91dCB0aGUgZHJpdmVyIG1vZHVsZSBvZiB0aGUgbmV0ZGV2Ci0gKiBAbmV0ZGV2OiB0aGUgdGFyZ2V0IG5ldGRldgotICoKLSAqIFJldHVybnM6IHB0ciB0byB0aGUgc3RydWN0IG1vZHVsZSwgTlVMTCBmb3IgZmFpbHVyZQotICovCi1zdGF0aWMgc3RydWN0IG1vZHVsZSAqCi1mY29lX25ldGRldl90b19tb2R1bGVfb3duZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0KLQlpZiAoIW5ldGRldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlkZXYgPSBuZXRkZXYtPmRldi5wYXJlbnQ7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCFkZXYtPmRyaXZlcikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gZGV2LT5kcml2ZXItPm93bmVyOwotfQotCi0vKioKLSAqIGZjb2VfZXRoZHJ2X2dldCgpIC0gSG9sZCB0aGUgRXRoZXJuZXQgZHJpdmVyCi0gKiBAbmV0ZGV2OiB0aGUgdGFyZ2V0IG5ldGRldgotICoKLSAqIEhvbGRzIHRoZSBFdGhlcm5ldCBkcml2ZXIgbW9kdWxlIGJ5IHRyeV9tb2R1bGVfZ2V0KCkgZm9yCi0gKiB0aGUgY29ycmVzcG9uZGluZyBuZXRkZXYuCi0gKgotICogUmV0dXJuczogMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGZjb2VfZXRoZHJ2X2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCi0Jb3duZXIgPSBmY29lX25ldGRldl90b19tb2R1bGVfb3duZXIobmV0ZGV2KTsKLQlpZiAob3duZXIpIHsKLQkJRkNPRV9ORVRERVZfREJHKG5ldGRldiwgIkhvbGQgZHJpdmVyIG1vZHVsZSAlc1xuIiwKLQkJCQltb2R1bGVfbmFtZShvd25lcikpOwotCQlyZXR1cm4gIHRyeV9tb2R1bGVfZ2V0KG93bmVyKTsKLQl9Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLS8qKgotICogZmNvZV9ldGhkcnZfcHV0KCkgLSBSZWxlYXNlIHRoZSBFdGhlcm5ldCBkcml2ZXIKLSAqIEBuZXRkZXY6IHRoZSB0YXJnZXQgbmV0ZGV2Ci0gKgotICogUmVsZWFzZXMgdGhlIEV0aGVybmV0IGRyaXZlciBtb2R1bGUgYnkgbW9kdWxlX3B1dCBmb3IKLSAqIHRoZSBjb3JyZXNwb25kaW5nIG5ldGRldi4KLSAqCi0gKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQgZmNvZV9ldGhkcnZfcHV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0KLQlvd25lciA9IGZjb2VfbmV0ZGV2X3RvX21vZHVsZV9vd25lcihuZXRkZXYpOwotCWlmIChvd25lcikgewotCQlGQ09FX05FVERFVl9EQkcobmV0ZGV2LCAiUmVsZWFzZSBkcml2ZXIgbW9kdWxlICVzXG4iLAotCQkJCW1vZHVsZV9uYW1lKG93bmVyKSk7Ci0JCW1vZHVsZV9wdXQob3duZXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLS8qKgogICogZmNvZV9kZXN0cm95KCkgLSBoYW5kbGVzIHRoZSBkZXN0cm95IGZyb20gc3lzZnMKICAqIEBidWZmZXI6IGV4cGVjdGVkIHRvIGJlIGFuIGV0aCBpZiBuYW1lCiAgKiBAa3A6IGFzc29jaWF0ZWQga2VybmVsIHBhcmFtCkBAIC0xNTQyLDM0ICsxNjI5LDU3IEBACiAgKi8KIHN0YXRpYyBpbnQgZmNvZV9kZXN0cm95KGNvbnN0IGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7Ci0JaW50IHJjOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCWludCByYzsKKworCW11dGV4X2xvY2soJmZjb2VfY29uZmlnX211dGV4KTsKKyNpZmRlZiBDT05GSUdfRkNPRV9NT0RVTEUKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgaXMgbm90IGFib3V0IHRvIGJlCisJICogcmVtb3ZlZC4gIE1vZHVsZSBwYXJhbXRlciBzeXNmcyBmaWxlcyBhcmUgd3JpdGFibGUgYmVmb3JlIHRoZQorCSAqIG1vZHVsZV9pbml0IGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgYWZ0ZXIgbW9kdWxlX2V4aXQuCisJICovCisJaWYgKFRISVNfTU9EVUxFLT5zdGF0ZSAhPSBNT0RVTEVfU1RBVEVfTElWRSkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X25vZGV2OworCX0KKyNlbmRpZgogCiAJbmV0ZGV2ID0gZmNvZV9pZl90b19uZXRkZXYoYnVmZmVyKTsKIAlpZiAoIW5ldGRldikgewogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X25vZGV2OwogCX0KLQkvKiBsb29rIGZvciBleGlzdGluZyBscG9ydCAqLwotCWlmICghZmNvZV9ob3N0bGlzdF9sb29rdXAobmV0ZGV2KSkgeworCisJcnRubF9sb2NrKCk7CisJZmNvZSA9IGZjb2VfaG9zdGxpc3RfbG9va3VwX3BvcnQobmV0ZGV2KTsKKwlpZiAoIWZjb2UpIHsKKwkJcnRubF91bmxvY2soKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIG91dF9wdXRkZXY7CiAJfQotCXJjID0gZmNvZV9pZl9kZXN0cm95KG5ldGRldik7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZmNvZTogRmFpbGVkIHRvIGRlc3Ryb3kgaW50ZXJmYWNlICglcylcbiIsCi0JCSAgICAgICBuZXRkZXYtPm5hbWUpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gb3V0X3B1dGRldjsKLQl9Ci0JZmNvZV9ldGhkcnZfcHV0KG5ldGRldik7Ci0JcmMgPSAwOworCWxpc3RfZGVsKCZmY29lLT5saXN0KTsKKwlmY29lX2ludGVyZmFjZV9jbGVhbnVwKGZjb2UpOworCXJ0bmxfdW5sb2NrKCk7CisJZmNvZV9pZl9kZXN0cm95KGZjb2UtPmN0bHIubHApOwogb3V0X3B1dGRldjoKIAlkZXZfcHV0KG5ldGRldik7CiBvdXRfbm9kZXY6CisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgdm9pZCBmY29lX2Rlc3Ryb3lfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydDsKKworCXBvcnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjb2VfcG9ydCwgZGVzdHJveV93b3JrKTsKKwltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisJZmNvZV9pZl9kZXN0cm95KHBvcnQtPmxwb3J0KTsKKwltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKK30KKwogLyoqCiAgKiBmY29lX2NyZWF0ZSgpIC0gSGFuZGxlcyB0aGUgY3JlYXRlIGNhbGwgZnJvbSBzeXNmcwogICogQGJ1ZmZlcjogZXhwZWN0ZWQgdG8gYmUgYW4gZXRoIGlmIG5hbWUKQEAgLTE1ODAsNDEgKzE2OTAsODQgQEAKIHN0YXRpYyBpbnQgZmNvZV9jcmVhdGUoY29uc3QgY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAlpbnQgcmM7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAorCW11dGV4X2xvY2soJmZjb2VfY29uZmlnX211dGV4KTsKKyNpZmRlZiBDT05GSUdfRkNPRV9NT0RVTEUKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgaXMgbm90IGFib3V0IHRvIGJlCisJICogcmVtb3ZlZC4gIE1vZHVsZSBwYXJhbXRlciBzeXNmcyBmaWxlcyBhcmUgd3JpdGFibGUgYmVmb3JlIHRoZQorCSAqIG1vZHVsZV9pbml0IGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgYWZ0ZXIgbW9kdWxlX2V4aXQuCisJICovCisJaWYgKFRISVNfTU9EVUxFLT5zdGF0ZSAhPSBNT0RVTEVfU1RBVEVfTElWRSkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X25vZGV2OworCX0KKyNlbmRpZgorCisJcnRubF9sb2NrKCk7CiAJbmV0ZGV2ID0gZmNvZV9pZl90b19uZXRkZXYoYnVmZmVyKTsKIAlpZiAoIW5ldGRldikgewogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X25vZGV2OwogCX0KKwogCS8qIGxvb2sgZm9yIGV4aXN0aW5nIGxwb3J0ICovCiAJaWYgKGZjb2VfaG9zdGxpc3RfbG9va3VwKG5ldGRldikpIHsKIAkJcmMgPSAtRUVYSVNUOwogCQlnb3RvIG91dF9wdXRkZXY7CiAJfQotCWZjb2VfZXRoZHJ2X2dldChuZXRkZXYpOwogCi0JcmMgPSBmY29lX2lmX2NyZWF0ZShuZXRkZXYpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgImZjb2U6IEZhaWxlZCB0byBjcmVhdGUgaW50ZXJmYWNlICglcylcbiIsCi0JCSAgICAgICBuZXRkZXYtPm5hbWUpOwotCQlmY29lX2V0aGRydl9wdXQobmV0ZGV2KTsKLQkJcmMgPSAtRUlPOworCWZjb2UgPSBmY29lX2ludGVyZmFjZV9jcmVhdGUobmV0ZGV2KTsKKwlpZiAoIWZjb2UpIHsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9wdXRkZXY7CiAJfQorCisJbHBvcnQgPSBmY29lX2lmX2NyZWF0ZShmY29lLCAmbmV0ZGV2LT5kZXYpOworCWlmIChJU19FUlIobHBvcnQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmNvZTogRmFpbGVkIHRvIGNyZWF0ZSBpbnRlcmZhY2UgKCVzKVxuIiwKKwkJICAgICAgIG5ldGRldi0+bmFtZSk7CisJCXJjID0gLUVJTzsKKwkJZmNvZV9pbnRlcmZhY2VfY2xlYW51cChmY29lKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwkvKiBNYWtlIHRoaXMgdGhlICJtYXN0ZXIiIE5fUG9ydCAqLworCWZjb2UtPmN0bHIubHAgPSBscG9ydDsKKworCS8qIGFkZCB0byBscG9ydHMgbGlzdCAqLworCWZjb2VfaG9zdGxpc3RfYWRkKGxwb3J0KTsKKworCS8qIHN0YXJ0IEZJUCBEaXNjb3ZlcnkgYW5kIEZMT0dJICovCisJbHBvcnQtPmJvb3RfdGltZSA9IGppZmZpZXM7CisJZmNfZmFicmljX2xvZ2luKGxwb3J0KTsKKwlpZiAoIWZjb2VfbGlua19vayhscG9ydCkpCisJCWZjb2VfY3Rscl9saW5rX3VwKCZmY29lLT5jdGxyKTsKKwogCXJjID0gMDsKK291dF9mcmVlOgorCS8qCisJICogUmVsZWFzZSBmcm9tIGluaXQgaW4gZmNvZV9pbnRlcmZhY2VfY3JlYXRlKCksIG9uIHN1Y2Nlc3MgbHBvcnQKKwkgKiBzaG91bGQgYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0YWtlbiBpbiBmY29lX2lmX2NyZWF0ZSgpLgorCSAqLworCWZjb2VfaW50ZXJmYWNlX3B1dChmY29lKTsKIG91dF9wdXRkZXY6CiAJZGV2X3B1dChuZXRkZXYpOwogb3V0X25vZGV2OgorCXJ0bmxfdW5sb2NrKCk7CisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCiBtb2R1bGVfcGFyYW1fY2FsbChjcmVhdGUsIGZjb2VfY3JlYXRlLCBOVUxMLCBOVUxMLCBTX0lXVVNSKTsKIF9fTU9EVUxFX1BBUk1fVFlQRShjcmVhdGUsICJzdHJpbmciKTsKLU1PRFVMRV9QQVJNX0RFU0MoY3JlYXRlLCAiQ3JlYXRlIGZjb2UgcG9ydCB1c2luZyBuZXQgZGV2aWNlIHBhc3NlZCBpbi4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY3JlYXRlLCAiQ3JlYXRlIGZjb2UgZmNvZSB1c2luZyBuZXQgZGV2aWNlIHBhc3NlZCBpbi4iKTsKIG1vZHVsZV9wYXJhbV9jYWxsKGRlc3Ryb3ksIGZjb2VfZGVzdHJveSwgTlVMTCwgTlVMTCwgU19JV1VTUik7CiBfX01PRFVMRV9QQVJNX1RZUEUoZGVzdHJveSwgInN0cmluZyIpOwotTU9EVUxFX1BBUk1fREVTQyhkZXN0cm95LCAiRGVzdHJveSBmY29lIHBvcnQiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVzdHJveSwgIkRlc3Ryb3kgZmNvZSBmY29lIik7CiAKIC8qKgogICogZmNvZV9saW5rX29rKCkgLSBDaGVjayBpZiBsaW5rIGlzIG9rIGZvciB0aGUgZmNfbHBvcnQKQEAgLTE2MzIsMzcgKzE3ODUsNDAgQEAKICAqLwogaW50IGZjb2VfbGlua19vayhzdHJ1Y3QgZmNfbHBvcnQgKmxwKQogewotCXN0cnVjdCBmY29lX3NvZnRjICpmYyA9IGxwb3J0X3ByaXYobHApOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBmYy0+cmVhbF9kZXY7CisJc3RydWN0IGZjb2VfcG9ydCAqcG9ydCA9IGxwb3J0X3ByaXYobHApOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwb3J0LT5mY29lLT5uZXRkZXY7CiAJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQgPSB7IEVUSFRPT0xfR1NFVCB9OwotCWludCByYyA9IDA7CiAKLQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfVVApICYmIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQlkZXYgPSBmYy0+cGh5c19kZXY7Ci0JCWlmIChkZXYtPmV0aHRvb2xfb3BzLT5nZXRfc2V0dGluZ3MpIHsKLQkJCWRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncyhkZXYsICZlY21kKTsKLQkJCWxwLT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgJj0KLQkJCQl+KEZDX1BPUlRTUEVFRF8xR0JJVCB8IEZDX1BPUlRTUEVFRF8xMEdCSVQpOwotCQkJaWYgKGVjbWQuc3VwcG9ydGVkICYgKFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8Ci0JCQkJCSAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCkpCi0JCQkJbHAtPmxpbmtfc3VwcG9ydGVkX3NwZWVkcyB8PSBGQ19QT1JUU1BFRURfMUdCSVQ7Ci0JCQlpZiAoZWNtZC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKQotCQkJCWxwLT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgfD0KLQkJCQkJRkNfUE9SVFNQRUVEXzEwR0JJVDsKLQkJCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDApCi0JCQkJbHAtPmxpbmtfc3BlZWQgPSBGQ19QT1JUU1BFRURfMUdCSVQ7Ci0JCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwMCkKLQkJCQlscC0+bGlua19zcGVlZCA9IEZDX1BPUlRTUEVFRF8xMEdCSVQ7Ci0JCX0KLQl9IGVsc2UKLQkJcmMgPSAtMTsKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfVVApICYmIG5ldGlmX2NhcnJpZXJfb2soZGV2KSAmJgorCSAgICAoIWRldl9ldGh0b29sX2dldF9zZXR0aW5ncyhkZXYsICZlY21kKSkpIHsKKwkJbHAtPmxpbmtfc3VwcG9ydGVkX3NwZWVkcyAmPQorCQkJfihGQ19QT1JUU1BFRURfMUdCSVQgfCBGQ19QT1JUU1BFRURfMTBHQklUKTsKKwkJaWYgKGVjbWQuc3VwcG9ydGVkICYgKFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKSkKKwkJCWxwLT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgfD0gRkNfUE9SVFNQRUVEXzFHQklUOworCQlpZiAoZWNtZC5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsKQorCQkJbHAtPmxpbmtfc3VwcG9ydGVkX3NwZWVkcyB8PQorCQkJCUZDX1BPUlRTUEVFRF8xMEdCSVQ7CisJCWlmIChlY21kLnNwZWVkID09IFNQRUVEXzEwMDApCisJCQlscC0+bGlua19zcGVlZCA9IEZDX1BPUlRTUEVFRF8xR0JJVDsKKwkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTAwMDApCisJCQlscC0+bGlua19zcGVlZCA9IEZDX1BPUlRTUEVFRF8xMEdCSVQ7CiAKLQlyZXR1cm4gcmM7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7CiB9CiAKIC8qKgogICogZmNvZV9wZXJjcHVfY2xlYW4oKSAtIENsZWFyIHRoZSBwZW5kaW5nIHNrYnMgZm9yIGFuIGxwb3J0CiAgKiBAbHA6IHRoZSBmY19scG9ydAorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggZmNvZV9jcmVhdGVfbXV0ZXggaGVsZCB0byBzaW5nbGUtdGhyZWFkIGNvbXBsZXRpb24uCisgKgorICogVGhpcyBmbHVzaGVzIHRoZSBwZW5kaW5nIHNrYnMgYnkgYWRkaW5nIGEgbmV3IHNrYiB0byBlYWNoIHF1ZXVlIGFuZAorICogd2FpdGluZyB1bnRpbCB0aGV5IGFyZSBhbGwgZnJlZWQuICBUaGlzIGFzc3VyZXMgdXMgdGhhdCBub3Qgb25seSBhcmUKKyAqIHRoZXJlIG5vIHBhY2tldHMgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGxwb3J0LCBidXQgYWxzbyB0aGF0IGFueQorICogdGhyZWFkcyBhbHJlYWR5IGhhbmRsaW5nIHBhY2tldCBoYXZlIHJldHVybmVkLgogICovCiB2b2lkIGZjb2VfcGVyY3B1X2NsZWFuKHN0cnVjdCBmY19scG9ydCAqbHApCiB7CkBAIC0xNjg3LDcgKzE4NDMsMjUgQEAKIAkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCX0KIAkJfQorCisJCWlmICghcHAtPnRocmVhZCB8fCAhY3B1X29ubGluZShjcHUpKSB7CisJCQlzcGluX3VubG9ja19iaCgmcHAtPmZjb2VfcnhfbGlzdC5sb2NrKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKKwkJaWYgKCFza2IpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZwcC0+ZmNvZV9yeF9saXN0LmxvY2spOworCQkJY29udGludWU7CisJCX0KKwkJc2tiLT5kZXN0cnVjdG9yID0gZmNvZV9wZXJjcHVfZmx1c2hfZG9uZTsKKworCQlfX3NrYl9xdWV1ZV90YWlsKCZwcC0+ZmNvZV9yeF9saXN0LCBza2IpOworCQlpZiAocHAtPmZjb2VfcnhfbGlzdC5xbGVuID09IDEpCisJCQl3YWtlX3VwX3Byb2Nlc3MocHAtPnRocmVhZCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZwcC0+ZmNvZV9yeF9saXN0LmxvY2spOworCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZjb2VfZmx1c2hfY29tcGxldGlvbik7CiAJfQogfQogCkBAIC0xNjk5LDE2ICsxODczLDE2IEBACiAgKi8KIHZvaWQgZmNvZV9jbGVhbl9wZW5kaW5nX3F1ZXVlKHN0cnVjdCBmY19scG9ydCAqbHApCiB7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgICpmYyA9IGxwb3J0X3ByaXYobHApOworCXN0cnVjdCBmY29lX3BvcnQgICpwb3J0ID0gbHBvcnRfcHJpdihscCk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXNwaW5fbG9ja19iaCgmZmMtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKLQl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUpKSAhPSBOVUxMKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCXNwaW5fbG9ja19iaCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlKSkgIT0gTlVMTCkgeworCQlzcGluX3VubG9ja19iaCgmcG9ydC0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJc3Bpbl9sb2NrX2JoKCZmYy0+ZmNvZV9wZW5kaW5nX3F1ZXVlLmxvY2spOworCQlzcGluX2xvY2tfYmgoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmZjLT5mY29lX3BlbmRpbmdfcXVldWUubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmZjb2VfcGVuZGluZ19xdWV1ZS5sb2NrKTsKIH0KIAogLyoqCkBAIC0xNzI1LDI0ICsxODk5LDIxIEBACiB9CiAKIC8qKgotICogZmNvZV9ob3N0bGlzdF9sb29rdXBfc29mdGMoKSAtIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgbHBvcnQgYnkgYSBnaXZlbiBkZXZpY2UKKyAqIGZjb2VfaG9zdGxpc3RfbG9va3VwX3BvcnQoKSAtIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgbHBvcnQgYnkgYSBnaXZlbiBkZXZpY2UKICAqIEBkZXY6IHRoaXMgaXMgY3VycmVudGx5IHB0ciB0byBuZXRfZGV2aWNlCiAgKgotICogUmV0dXJuczogTlVMTCBvciB0aGUgbG9jYXRlZCBmY29lX3NvZnRjCisgKiBSZXR1cm5zOiBOVUxMIG9yIHRoZSBsb2NhdGVkIGZjb2VfcG9ydAorICogTG9ja2luZzogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgUk5MIG11dGV4IGhlbGQKICAqLwotc3RhdGljIHN0cnVjdCBmY29lX3NvZnRjICoKLWZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IGZjb2VfaW50ZXJmYWNlICoKK2Zjb2VfaG9zdGxpc3RfbG9va3VwX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOwogCi0JcmVhZF9sb2NrKCZmY29lX2hvc3RsaXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmMsICZmY29lX2hvc3RsaXN0LCBsaXN0KSB7Ci0JCWlmIChmYy0+cmVhbF9kZXYgPT0gZGV2KSB7Ci0JCQlyZWFkX3VubG9jaygmZmNvZV9ob3N0bGlzdF9sb2NrKTsKLQkJCXJldHVybiBmYzsKLQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNvZSwgJmZjb2VfaG9zdGxpc3QsIGxpc3QpIHsKKwkJaWYgKGZjb2UtPm5ldGRldiA9PSBkZXYpCisJCQlyZXR1cm4gZmNvZTsKIAl9Ci0JcmVhZF91bmxvY2soJmZjb2VfaG9zdGxpc3RfbG9jayk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE3NTEsMTQgKzE5MjIsMTQgQEAKICAqIEBuZXRkZXY6IHB0ciB0byBuZXRfZGV2aWNlCiAgKgogICogUmV0dXJuczogMCBmb3Igc3VjY2VzcworICogTG9ja2luZzogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgUlROTCBtdXRleCBoZWxkCiAgKi8KLXN0cnVjdCBmY19scG9ydCAqZmNvZV9ob3N0bGlzdF9sb29rdXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBzdHJ1Y3QgZmNfbHBvcnQgKmZjb2VfaG9zdGxpc3RfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKIAotCWZjID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfc29mdGMobmV0ZGV2KTsKLQotCXJldHVybiAoZmMpID8gZmMtPmN0bHIubHAgOiBOVUxMOworCWZjb2UgPSBmY29lX2hvc3RsaXN0X2xvb2t1cF9wb3J0KG5ldGRldik7CisJcmV0dXJuIChmY29lKSA/IGZjb2UtPmN0bHIubHAgOiBOVUxMOwogfQogCiAvKioKQEAgLTE3NjYsNDEgKzE5MzcsMjMgQEAKICAqIEBscDogcHRyIHRvIHRoZSBmY19scG9ydCB0byBiZSBhZGRlZAogICoKICAqIFJldHVybnM6IDAgZm9yIHN1Y2Nlc3MKKyAqIExvY2tpbmc6IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIFJUTkwgbXV0ZXggaGVsZAogICovCi1pbnQgZmNvZV9ob3N0bGlzdF9hZGQoY29uc3Qgc3RydWN0IGZjX2xwb3J0ICpscCkKK3N0YXRpYyBpbnQgZmNvZV9ob3N0bGlzdF9hZGQoY29uc3Qgc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKLQlzdHJ1Y3QgZmNvZV9zb2Z0YyAqZmM7CisJc3RydWN0IGZjb2VfaW50ZXJmYWNlICpmY29lOworCXN0cnVjdCBmY29lX3BvcnQgKnBvcnQ7CiAKLQlmYyA9IGZjb2VfaG9zdGxpc3RfbG9va3VwX3NvZnRjKGZjb2VfbmV0ZGV2KGxwKSk7Ci0JaWYgKCFmYykgewotCQlmYyA9IGxwb3J0X3ByaXYobHApOwotCQl3cml0ZV9sb2NrX2JoKCZmY29lX2hvc3RsaXN0X2xvY2spOwotCQlsaXN0X2FkZF90YWlsKCZmYy0+bGlzdCwgJmZjb2VfaG9zdGxpc3QpOwotCQl3cml0ZV91bmxvY2tfYmgoJmZjb2VfaG9zdGxpc3RfbG9jayk7CisJZmNvZSA9IGZjb2VfaG9zdGxpc3RfbG9va3VwX3BvcnQoZmNvZV9uZXRkZXYobHBvcnQpKTsKKwlpZiAoIWZjb2UpIHsKKwkJcG9ydCA9IGxwb3J0X3ByaXYobHBvcnQpOworCQlmY29lID0gcG9ydC0+ZmNvZTsKKwkJbGlzdF9hZGRfdGFpbCgmZmNvZS0+bGlzdCwgJmZjb2VfaG9zdGxpc3QpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBmY29lX2hvc3RsaXN0X3JlbW92ZSgpIC0gcmVtb3ZlIGEgbHBvcnQgZnJvbSBscG9ydHMgbGlzdAotICogQGxwOiBwdHIgdG8gdGhlIGZjX2xwb3J0IHRvIGJlIHJlbW92ZWQKLSAqCi0gKiBSZXR1cm5zOiAwIGZvciBzdWNjZXNzCi0gKi8KLWludCBmY29lX2hvc3RsaXN0X3JlbW92ZShjb25zdCBzdHJ1Y3QgZmNfbHBvcnQgKmxwKQotewotCXN0cnVjdCBmY29lX3NvZnRjICpmYzsKLQotCWZjID0gZmNvZV9ob3N0bGlzdF9sb29rdXBfc29mdGMoZmNvZV9uZXRkZXYobHApKTsKLQlCVUdfT04oIWZjKTsKLQl3cml0ZV9sb2NrX2JoKCZmY29lX2hvc3RsaXN0X2xvY2spOwotCWxpc3RfZGVsKCZmYy0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZmY29lX2hvc3RsaXN0X2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogZmNvZV9pbml0KCkgLSBmY29lIG1vZHVsZSBsb2FkaW5nIGluaXRpYWxpemF0aW9uCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKQEAgLTE4MTEsOCArMTk2NCw3IEBACiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgZmNvZV9wZXJjcHVfcyAqcDsKIAotCUlOSVRfTElTVF9IRUFEKCZmY29lX2hvc3RsaXN0KTsKLQlyd2xvY2tfaW5pdCgmZmNvZV9ob3N0bGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXAgPSAmcGVyX2NwdShmY29lX3BlcmNwdSwgY3B1KTsKQEAgLTE4MzAsMTUgKzE5ODIsMTggQEAKIAkvKiBTZXR1cCBsaW5rIGNoYW5nZSBub3RpZmljYXRpb24gKi8KIAlmY29lX2Rldl9zZXR1cCgpOwogCi0JZmNvZV9pZl9pbml0KCk7CisJcmMgPSBmY29lX2lmX2luaXQoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CiAKKwltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJZmNvZV9wZXJjcHVfdGhyZWFkX2Rlc3Ryb3koY3B1KTsKIAl9Ci0KKwltdXRleF91bmxvY2soJmZjb2VfY29uZmlnX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiBtb2R1bGVfaW5pdChmY29lX2luaXQpOwpAQCAtMTg1MSwyMSArMjAwNiwzNiBAQAogc3RhdGljIHZvaWQgX19leGl0IGZjb2VfZXhpdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHU7Ci0Jc3RydWN0IGZjb2Vfc29mdGMgKmZjLCAqdG1wOworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZSwgKnRtcDsKKwlzdHJ1Y3QgZmNvZV9wb3J0ICpwb3J0OworCisJbXV0ZXhfbG9jaygmZmNvZV9jb25maWdfbXV0ZXgpOwogCiAJZmNvZV9kZXZfY2xlYW51cCgpOwogCiAJLyogcmVsZWFzZXMgdGhlIGFzc29jaWF0ZWQgZmNvZSBob3N0cyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmYywgdG1wLCAmZmNvZV9ob3N0bGlzdCwgbGlzdCkKLQkJZmNvZV9pZl9kZXN0cm95KGZjLT5yZWFsX2Rldik7CisJcnRubF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZjb2UsIHRtcCwgJmZjb2VfaG9zdGxpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmZjb2UtPmxpc3QpOworCQlwb3J0ID0gbHBvcnRfcHJpdihmY29lLT5jdGxyLmxwKTsKKwkJZmNvZV9pbnRlcmZhY2VfY2xlYW51cChmY29lKTsKKwkJc2NoZWR1bGVfd29yaygmcG9ydC0+ZGVzdHJveV93b3JrKTsKKwl9CisJcnRubF91bmxvY2soKTsKIAogCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZmY29lX2NwdV9ub3RpZmllcik7CiAKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQlmY29lX3BlcmNwdV90aHJlYWRfZGVzdHJveShjcHUpOwotCX0KIAotCS8qIGRldGFjaCBmcm9tIHNjc2kgdHJhbnNwb3J0ICovCisJbXV0ZXhfdW5sb2NrKCZmY29lX2NvbmZpZ19tdXRleCk7CisKKwkvKiBmbHVzaCBhbnkgYXN5bmNyb25vdXMgaW50ZXJmYWNlIGRlc3Ryb3lzLAorCSAqIHRoaXMgc2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgbmV0ZGV2IG5vdGlmaWVyIGlzIHVucmVnaXN0ZXJlZCAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBkZXRhY2ggZnJvbSBzY3NpIHRyYW5zcG9ydAorCSAqIG11c3QgaGFwcGVuIGFmdGVyIGFsbCBkZXN0cm95cyBhcmUgZG9uZSwgdGhlcmVmb3IgYWZ0ZXIgdGhlIGZsdXNoICovCiAJZmNvZV9pZl9leGl0KCk7CiB9CiBtb2R1bGVfZXhpdChmY29lX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5oIGIvZHJpdmVycy9zY3NpL2Zjb2UvZmNvZS5oCmluZGV4IDBkNzI0ZmEuLmNlN2Y2MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mY29lL2Zjb2UuaAorKysgYi9kcml2ZXJzL3Njc2kvZmNvZS9mY29lLmgKQEAgLTM3LDggKzM3LDggQEAKIAogI2RlZmluZSBGQ09FX01BWF9PVVRTVEFORElOR19DT01NQU5EUwkxMDI0CiAKLSNkZWZpbmUgRkNPRV9NSU5fWElECQkweDAwMDEJLyogdGhlIG1pbiB4aWQgc3VwcG9ydGVkIGJ5IGZjb2Vfc3cgKi8KLSNkZWZpbmUgRkNPRV9NQVhfWElECQkweDA3ZWYJLyogdGhlIG1heCB4aWQgc3VwcG9ydGVkIGJ5IGZjb2Vfc3cgKi8KKyNkZWZpbmUgRkNPRV9NSU5fWElECQkweDAwMDAJLyogdGhlIG1pbiB4aWQgc3VwcG9ydGVkIGJ5IGZjb2Vfc3cgKi8KKyNkZWZpbmUgRkNPRV9NQVhfWElECQkweDBGRkYJLyogdGhlIG1heCB4aWQgc3VwcG9ydGVkIGJ5IGZjb2Vfc3cgKi8KIAogdW5zaWduZWQgaW50IGZjb2VfZGVidWdfbG9nZ2luZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19sb2dnaW5nLCBmY29lX2RlYnVnX2xvZ2dpbmcsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKQEAgLTUzLDcgKzUzLDcgQEAKIAkJZG8gewkJCQkJCQlcCiAJCQlDTUQ7CQkJCQkJXAogCQl9IHdoaWxlICgwKTsJCQkJCQlcCi19IHdoaWxlICgwKTsKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgRkNPRV9EQkcoZm10LCBhcmdzLi4uKQkJCQkJCVwKIAlGQ09FX0NIRUNLX0xPR0dJTkcoRkNPRV9MT0dHSU5HLAkJCQlcCkBAIC02MSw3ICs2MSw3IEBACiAKICNkZWZpbmUgRkNPRV9ORVRERVZfREJHKG5ldGRldiwgZm10LCBhcmdzLi4uKQkJCVwKIAlGQ09FX0NIRUNLX0xPR0dJTkcoRkNPRV9ORVRERVZfTE9HR0lORywJCQlcCi0JCQkgICBwcmludGsoS0VSTl9JTkZPICJmY29lOiAlcyIgZm10LAlcCisJCQkgICBwcmludGsoS0VSTl9JTkZPICJmY29lOiAlczogIiBmbXQsCVwKIAkJCQkgIG5ldGRldi0+bmFtZSwgIyNhcmdzKTspCiAKIC8qCkBAIC03NSwyNiArNzUsMzYgQEAKIH07CiAKIC8qCi0gKiB0aGUgZmNvZSBzdyB0cmFuc3BvcnQgcHJpdmF0ZSBkYXRhCisgKiBhbiBGQ29FIGludGVyZmFjZSwgMToxIHdpdGggbmV0ZGV2CiAgKi8KLXN0cnVjdCBmY29lX3NvZnRjIHsKK3N0cnVjdCBmY29lX2ludGVyZmFjZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcGh5c19kZXY7CQkvKiBkZXZpY2Ugd2l0aCBldGh0b29sX29wcyAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHBhY2tldF90eXBlICBmY29lX3BhY2tldF90eXBlOwogCXN0cnVjdCBwYWNrZXRfdHlwZSAgZmlwX3BhY2tldF90eXBlOworCXN0cnVjdCBmY29lX2N0bHIgY3RscjsKKwlzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm9lbTsJCS8qIG9mZmxvYWQgZXhjaGFuZ2UgbWFuYWdlciAqLworCXN0cnVjdCBrcmVmIGtyZWY7Cit9OworCisvKgorICogdGhlIEZDb0UgcHJpdmF0ZSBzdHJ1Y3R1cmUgdGhhdCdzIGFsbG9jYXRlZCBhbG9uZyB3aXRoIHRoZQorICogU2NzaV9Ib3N0IGFuZCBsaWJmYyBmY19scG9ydCBzdHJ1Y3R1cmVzCisgKi8KK3N0cnVjdCBmY29lX3BvcnQgeworCXN0cnVjdCBmY29lX2ludGVyZmFjZSAqZmNvZTsKKwlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwogCXN0cnVjdCBza19idWZmX2hlYWQgZmNvZV9wZW5kaW5nX3F1ZXVlOwogCXU4CWZjb2VfcGVuZGluZ19xdWV1ZV9hY3RpdmU7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CQkvKiBxdWV1ZSB0aW1lciAqLwotCXN0cnVjdCBmY29lX2N0bHIgY3RscjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrOwkvKiB0byBwcmV2ZW50IHJ0bmwgZGVhZGxvY2tzICovCiB9OwogCi0jZGVmaW5lIGZjb2VfZnJvbV9jdGxyKGZjKSBjb250YWluZXJfb2YoZmMsIHN0cnVjdCBmY29lX3NvZnRjLCBjdGxyKQorI2RlZmluZSBmY29lX2Zyb21fY3RscihmaXApIGNvbnRhaW5lcl9vZihmaXAsIHN0cnVjdCBmY29lX2ludGVyZmFjZSwgY3RscikKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqZmNvZV9uZXRkZXYoCi0JY29uc3Qgc3RydWN0IGZjX2xwb3J0ICpscCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmZjb2VfbmV0ZGV2KGNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHApCiB7Ci0JcmV0dXJuICgoc3RydWN0IGZjb2Vfc29mdGMgKilscG9ydF9wcml2KGxwKSktPnJlYWxfZGV2OworCXJldHVybiAoKHN0cnVjdCBmY29lX3BvcnQgKilscG9ydF9wcml2KGxwKSktPmZjb2UtPm5ldGRldjsKIH0KIAogI2VuZGlmIC8qIF9GQ09FX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMgYi9kcml2ZXJzL3Njc2kvZmNvZS9saWJmY29lLmMKaW5kZXggZjU0NDM0MC4uNjJhNGMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2Zjb2UvbGliZmNvZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9mY29lL2xpYmZjb2UuYwpAQCAtNjksNyArNjksNyBAQAogCQlkbyB7CQkJCQkJCVwKIAkJCUNNRDsJCQkJCQlcCiAJCX0gd2hpbGUgKDApOwkJCQkJCVwKLX0gd2hpbGUgKDApOworfSB3aGlsZSAoMCkKIAogI2RlZmluZSBMSUJGQ09FX0RCRyhmbXQsIGFyZ3MuLi4pCQkJCQlcCiAJTElCRkNPRV9DSEVDS19MT0dHSU5HKExJQkZDT0VfTE9HR0lORywJCQkJXApAQCAtMTQ4LDEzICsxNDgsMTcgQEAKICAqLwogdm9pZCBmY29lX2N0bHJfZGVzdHJveShzdHJ1Y3QgZmNvZV9jdGxyICpmaXApCiB7Ci0JZmx1c2hfd29yaygmZmlwLT5yZWN2X3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJmZpcC0+cmVjdl93b3JrKTsKKwlzcGluX2xvY2tfYmgoJmZpcC0+ZmlwX3JlY3ZfbGlzdC5sb2NrKTsKKwlfX3NrYl9xdWV1ZV9wdXJnZSgmZmlwLT5maXBfcmVjdl9saXN0KTsKKwlzcGluX3VubG9ja19iaCgmZmlwLT5maXBfcmVjdl9saXN0LmxvY2spOworCiAJc3Bpbl9sb2NrX2JoKCZmaXAtPmxvY2spOwogCWZpcC0+c3RhdGUgPSBGSVBfU1RfRElTQUJMRUQ7CiAJZmNvZV9jdGxyX3Jlc2V0X2ZjZnMoZmlwKTsKIAlzcGluX3VubG9ja19iaCgmZmlwLT5sb2NrKTsKIAlkZWxfdGltZXJfc3luYygmZmlwLT50aW1lcik7Ci0JZmx1c2hfd29yaygmZmlwLT5saW5rX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJmZpcC0+bGlua193b3JrKTsKIH0KIEVYUE9SVF9TWU1CT0woZmNvZV9jdGxyX2Rlc3Ryb3kpOwogCkBAIC00MTMsMTAgKzQxNywxOCBAQAogCXN0cnVjdCBmaXBfbWFjX2Rlc2MgKm1hYzsKIAlzdHJ1Y3QgZmNvZV9mY2YgKmZjZjsKIAlzaXplX3QgZGxlbjsKKwl1MTYgZmlwX2ZsYWdzOwogCiAJZmNmID0gZmlwLT5zZWxfZmNmOwogCWlmICghZmNmKQogCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHNldCBmbGFncyBhY2NvcmRpbmcgdG8gYm90aCBGQ0YgYW5kIGxwb3J0J3MgY2FwYWJpbGl0eSBvbiBTUE1BICovCisJZmlwX2ZsYWdzID0gZmNmLT5mbGFnczsKKwlmaXBfZmxhZ3MgJj0gZmlwLT5zcG1hID8gRklQX0ZMX1NQTUEgfCBGSVBfRkxfRlBNQSA6IEZJUF9GTF9GUE1BOworCWlmICghZmlwX2ZsYWdzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRsZW4gPSBzaXplb2Yoc3RydWN0IGZpcF9lbmNhcHMpICsgc2tiLT5sZW47CS8qIGxlbiBiZWZvcmUgcHVzaCAqLwogCWNhcCA9IChzdHJ1Y3QgZmlwX2VuY2Fwc19oZWFkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKmNhcCkpOwogCkBAIC00MjksOSArNDQxLDcgQEAKIAljYXAtPmZpcC5maXBfb3AgPSBodG9ucyhGSVBfT1BfTFMpOwogCWNhcC0+ZmlwLmZpcF9zdWJjb2RlID0gRklQX1NDX1JFUTsKIAljYXAtPmZpcC5maXBfZGxfbGVuID0gaHRvbnMoKGRsZW4gKyBzaXplb2YoKm1hYykpIC8gRklQX0JQVyk7Ci0JY2FwLT5maXAuZmlwX2ZsYWdzID0gaHRvbnMoRklQX0ZMX0ZQTUEpOwotCWlmIChmaXAtPnNwbWEpCi0JCWNhcC0+ZmlwLmZpcF9mbGFncyB8PSBodG9ucyhGSVBfRkxfU1BNQSk7CisJY2FwLT5maXAuZmlwX2ZsYWdzID0gaHRvbnMoZmlwX2ZsYWdzKTsKIAogCWNhcC0+ZW5jYXBzLmZkX2Rlc2MuZmlwX2R0eXBlID0gZHR5cGU7CiAJY2FwLT5lbmNhcHMuZmRfZGVzYy5maXBfZGxlbiA9IGRsZW4gLyBGSVBfQlBXOwpAQCAtODc5LDcgKzg4OSw3IEBACiAJc3RhdHMtPlJ4RnJhbWVzKys7CiAJc3RhdHMtPlJ4V29yZHMgKz0gc2tiLT5sZW4gLyBGSVBfQlBXOwogCi0JZmNfZXhjaF9yZWN2KGxwLCBscC0+ZW1wLCBmcCk7CisJZmNfZXhjaF9yZWN2KGxwLCBmcCk7CiAJcmV0dXJuOwogCiBsZW5fZXJyOgpAQCAtMTEwNCw3ICsxMTE0LDYgQEAKIAlzdHJ1Y3QgZmNvZV9mY2YgKnNlbDsKIAlzdHJ1Y3QgZmNvZV9mY2YgKmZjZjsKIAl1bnNpZ25lZCBsb25nIG5leHRfdGltZXIgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhGSVBfVk5fS0FfUEVSSU9EKTsKLQlERUNMQVJFX01BQ19CVUYoYnVmKTsKIAl1OCBzZW5kX2N0bHJfa2E7CiAJdTggc2VuZF9wb3J0X2thOwogCkBAIC0xMTI4LDkgKzExMzcsOCBAQAogCQlmY2YgPSBzZWw7CQkvKiB0aGUgb2xkIEZDRiBtYXkgaGF2ZSBiZWVuIGZyZWVkICovCiAJCWlmIChzZWwpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gImxpYmZjb2U6IGhvc3QlZDogRklQIHNlbGVjdGVkICIKLQkJCSAgICAgICAiRmlicmUtQ2hhbm5lbCBGb3J3YXJkZXIgTUFDICVzXG4iLAotCQkJICAgICAgIGZpcC0+bHAtPmhvc3QtPmhvc3Rfbm8sCi0JCQkgICAgICAgcHJpbnRfbWFjKGJ1Ziwgc2VsLT5mY2ZfbWFjKSk7CisJCQkgICAgICAgIkZpYnJlLUNoYW5uZWwgRm9yd2FyZGVyIE1BQyAlcE1cbiIsCisJCQkgICAgICAgZmlwLT5scC0+aG9zdC0+aG9zdF9ubywgc2VsLT5mY2ZfbWFjKTsKIAkJCW1lbWNweShmaXAtPmRlc3RfYWRkciwgc2VsLT5mY2ZfbWFjLCBFVEhfQUxFTik7CiAJCQlmaXAtPnBvcnRfa2FfdGltZSA9IGppZmZpZXMgKwogCQkJCQkgICAgbXNlY3NfdG9famlmZmllcyhGSVBfVk5fS0FfUEVSSU9EKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX2Zjcy5jCmluZGV4IDA3ZTZlZWQuLjUwZGIzZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9mbmljL2ZuaWNfZmNzLmMKKysrIGIvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19mY3MuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZm5pYy0+Zm5pY19sb2NrLCBmbGFncyk7CiAKLQkJZmNfZXhjaF9yZWN2KGxwLCBscC0+ZW1wLCBmcCk7CisJCWZjX2V4Y2hfcmVjdihscCwgZnApOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2ZuaWMvZm5pY19tYWluLmMgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwppbmRleCAyYzI2NmMwLi43MWM3YmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYworKysgYi9kcml2ZXJzL3Njc2kvZm5pYy9mbmljX21haW4uYwpAQCAtNjcxLDE0ICs2NzEsNiBAQAogCWxwLT5saW5rX3VwID0gMDsKIAlscC0+dHQgPSBmbmljX3RyYW5zcG9ydF90ZW1wbGF0ZTsKIAotCWxwLT5lbXAgPSBmY19leGNoX21ncl9hbGxvYyhscCwgRkNfQ0xBU1NfMywKLQkJCQkgICAgRkNQSU9fSE9TVF9FWENIX1JBTkdFX1NUQVJULAotCQkJCSAgICBGQ1BJT19IT1NUX0VYQ0hfUkFOR0VfRU5EKTsKLQlpZiAoIWxwLT5lbXApIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3JlbW92ZV9zY3NpX2hvc3Q7Ci0JfQotCiAJbHAtPm1heF9yZXRyeV9jb3VudCA9IGZuaWMtPmNvbmZpZy5mbG9naV9yZXRyaWVzOwogCWxwLT5tYXhfcnBvcnRfcmV0cnlfY291bnQgPSBmbmljLT5jb25maWcucGxvZ2lfcmV0cmllczsKIAlscC0+c2VydmljZV9wYXJhbXMgPSAoRkNQX1NQUEZfSU5JVF9GQ04gfCBGQ1BfU1BQRl9SRF9YUkRZX0RJUyB8CkBAIC02OTMsMTIgKzY4NSwxOCBAQAogCWZjX3NldF93d25uKGxwLCBmbmljLT5jb25maWcubm9kZV93d24pOwogCWZjX3NldF93d3BuKGxwLCBmbmljLT5jb25maWcucG9ydF93d24pOwogCi0JZmNfZXhjaF9pbml0KGxwKTsKIAlmY19scG9ydF9pbml0KGxwKTsKKwlmY19leGNoX2luaXQobHApOwogCWZjX2Vsc2N0X2luaXQobHApOwogCWZjX3Jwb3J0X2luaXQobHApOwogCWZjX2Rpc2NfaW5pdChscCk7CiAKKwlpZiAoIWZjX2V4Y2hfbWdyX2FsbG9jKGxwLCBGQ19DTEFTU18zLCBGQ1BJT19IT1NUX0VYQ0hfUkFOR0VfU1RBUlQsCisJCQkgICAgICAgRkNQSU9fSE9TVF9FWENIX1JBTkdFX0VORCwgTlVMTCkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X3JlbW92ZV9zY3NpX2hvc3Q7CisJfQorCiAJZmNfbHBvcnRfY29uZmlnKGxwKTsKIAogCWlmIChmY19zZXRfbWZzKGxwLCBmbmljLT5jb25maWcubWF4ZGF0YWZpZWxkc2l6ZSArCkBAIC03MzgsNyArNzM2LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dF9mcmVlX2V4Y2hfbWdyOgotCWZjX2V4Y2hfbWdyX2ZyZWUobHAtPmVtcCk7CisJZmNfZXhjaF9tZ3JfZnJlZShscCk7CiBlcnJfb3V0X3JlbW92ZV9zY3NpX2hvc3Q6CiAJZmNfcmVtb3ZlX2hvc3QoZm5pYy0+bHBvcnQtPmhvc3QpOwogCXNjc2lfcmVtb3ZlX2hvc3QoZm5pYy0+bHBvcnQtPmhvc3QpOwpAQCAtODI3LDcgKzgyNSw3IEBACiAKIAlmY19yZW1vdmVfaG9zdChmbmljLT5scG9ydC0+aG9zdCk7CiAJc2NzaV9yZW1vdmVfaG9zdChmbmljLT5scG9ydC0+aG9zdCk7Ci0JZmNfZXhjaF9tZ3JfZnJlZShmbmljLT5scG9ydC0+ZW1wKTsKKwlmY19leGNoX21ncl9mcmVlKGZuaWMtPmxwb3J0KTsKIAl2bmljX2Rldl9ub3RpZnlfdW5zZXQoZm5pYy0+dmRldik7CiAJZm5pY19mcmVlX3ZuaWNfcmVzb3VyY2VzKGZuaWMpOwogCWZuaWNfZnJlZV9pbnRyKGZuaWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL2libXZmYy5jCmluZGV4IDE2NmQ5NjQuLmJiMmM2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9pYm12ZmMuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvaWJtdmZjLmMKQEAgLTQyMTcsNyArNDIxNyw3IEBACiAJaWYgKCF2aG9zdC0+dHJhY2UpCiAJCWdvdG8gZnJlZV9kaXNjX2J1ZmZlcjsKIAotCXZob3N0LT50Z3RfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2t6YWxsb2NfcG9vbChJQk1WRkNfVEdUX01FTVBPT0xfU1osCisJdmhvc3QtPnRndF9wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKElCTVZGQ19UR1RfTUVNUE9PTF9TWiwKIAkJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaWJtdmZjX3RhcmdldCkpOwogCiAJaWYgKCF2aG9zdC0+dGd0X3Bvb2wpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHIuaCBiL2RyaXZlcnMvc2NzaS9pcHIuaAppbmRleCA0YjYzZGQ2Li4xNjMyNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXByLmgKKysrIGIvZHJpdmVycy9zY3NpL2lwci5oCkBAIC0xMTk5LDcgKzExOTksNyBAQAogCiAJc3RydWN0IGF0YV9ob3N0IGF0YV9ob3N0OwogCWNoYXIgaXByX2NtZF9sYWJlbFs4XTsKLSNkZWZpbmUgSVBSX0NNRF9MQUJFTAkJImlwcl9jbW5kIgorI2RlZmluZSBJUFJfQ01EX0xBQkVMCQkiaXByX2NtZCIKIAlzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbW5kX2xpc3RbSVBSX05VTV9DTURfQkxLU107CiAJdTMyIGlwcl9jbW5kX2xpc3RfZG1hW0lQUl9OVU1fQ01EX0JMS1NdOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCA1MThkYmQ5Li4yYjFiODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC05OSw2ICs5OSwyNyBAQAogCXJldHVybiB0b3RhbF9jb25zdW1lZDsKIH0KIAorLyoqCisgKiBpc2NzaV9zd19za19zdGF0ZV9jaGVjayAtIGNoZWNrIHNvY2tldCBzdGF0ZQorICogQHNrOiBzb2NrZXQKKyAqCisgKiBJZiB0aGUgc29ja2V0IGlzIGluIENMT1NFIG9yIENMT1NFX1dBSVQgd2Ugc2hvdWxkCisgKiBub3QgY2xvc2UgdGhlIGNvbm5lY3Rpb24gaWYgdGhlcmUgaXMgc3RpbGwgc29tZQorICogZGF0YSBwZW5kaW5nLgorICovCitzdGF0aWMgaW5saW5lIGludCBpc2NzaV9zd19za19zdGF0ZV9jaGVjayhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSAoc3RydWN0IGlzY3NpX2Nvbm4qKXNrLT5za191c2VyX2RhdGE7CisKKwlpZiAoKHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0VfV0FJVCB8fCBzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKSAmJgorCSAgICAhYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSkgeworCQlJU0NTSV9TV19UQ1BfREJHKGNvbm4sICJUQ1BfQ0xPU0V8VENQX0NMT1NFX1dBSVRcbiIpOworCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX1RDUF9DT05OX0NMT1NFKTsKKwkJcmV0dXJuIC1FQ09OTlJFU0VUOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaXNjc2lfc3dfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZykKIHsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHNrLT5za191c2VyX2RhdGE7CkBAIC0xMTcsNiArMTM4LDggQEAKIAlyZF9kZXNjLmNvdW50ID0gMTsKIAl0Y3BfcmVhZF9zb2NrKHNrLCAmcmRfZGVzYywgaXNjc2lfc3dfdGNwX3JlY3YpOwogCisJaXNjc2lfc3dfc2tfc3RhdGVfY2hlY2soc2spOworCiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAogCS8qIElmIHdlIGhhZCB0byAoYXRvbWljYWxseSkgbWFwIGEgaGlnaG1lbSBwYWdlLApAQCAtMTM3LDEzICsxNjAsNyBAQAogCWNvbm4gPSAoc3RydWN0IGlzY3NpX2Nvbm4qKXNrLT5za191c2VyX2RhdGE7CiAJc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CiAKLQlpZiAoKHNrLT5za19zdGF0ZSA9PSBUQ1BfQ0xPU0VfV0FJVCB8fAotCSAgICAgc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkgJiYKLQkgICAgIWF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykpIHsKLQkJSVNDU0lfU1dfVENQX0RCRyhjb25uLCAiaXNjc2lfdGNwX3N0YXRlX2NoYW5nZTogIgotCQkJCSAiVENQX0NMT1NFfFRDUF9DTE9TRV9XQUlUXG4iKTsKLQkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7Ci0JfQorCWlzY3NpX3N3X3NrX3N0YXRlX2NoZWNrKHNrKTsKIAogCXRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAl0Y3Bfc3dfY29ubiA9IHRjcF9jb25uLT5kZF9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Rpc2MuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19kaXNjLmMKaW5kZXggNmZhYmY2Ni4uYzQ4Nzk5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Rpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZGlzYy5jCkBAIC00Myw0NyArNDMsMTQgQEAKICNkZWZpbmUgRkNfRElTQ19SRVRSWV9MSU1JVAkzCS8qIG1heCByZXRyaWVzICovCiAjZGVmaW5lIEZDX0RJU0NfUkVUUllfREVMQVkJNTAwVUwJLyogKG1zZWNzKSBkZWxheSAqLwogCi0jZGVmaW5lCUZDX0RJU0NfREVMQVkJCTMKLQogc3RhdGljIHZvaWQgZmNfZGlzY19ncG5fZnRfcmVxKHN0cnVjdCBmY19kaXNjICopOwogc3RhdGljIHZvaWQgZmNfZGlzY19ncG5fZnRfcmVzcChzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqLCB2b2lkICopOwotc3RhdGljIGludCBmY19kaXNjX25ld190YXJnZXQoc3RydWN0IGZjX2Rpc2MgKiwgc3RydWN0IGZjX3Jwb3J0ICosCi0JCQkgICAgICBzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgKik7Ci1zdGF0aWMgdm9pZCBmY19kaXNjX2RlbF90YXJnZXQoc3RydWN0IGZjX2Rpc2MgKiwgc3RydWN0IGZjX3Jwb3J0ICopOwotc3RhdGljIHZvaWQgZmNfZGlzY19kb25lKHN0cnVjdCBmY19kaXNjICopOworc3RhdGljIHZvaWQgZmNfZGlzY19kb25lKHN0cnVjdCBmY19kaXNjICosIGVudW0gZmNfZGlzY19ldmVudCk7CiBzdGF0aWMgdm9pZCBmY19kaXNjX3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICopOwotc3RhdGljIHZvaWQgZmNfZGlzY19zaW5nbGUoc3RydWN0IGZjX2Rpc2MgKiwgc3RydWN0IGZjX2Rpc2NfcG9ydCAqKTsKK3N0YXRpYyBpbnQgZmNfZGlzY19zaW5nbGUoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBmY19kaXNjX3BvcnQgKik7CiBzdGF0aWMgdm9pZCBmY19kaXNjX3Jlc3RhcnQoc3RydWN0IGZjX2Rpc2MgKik7CiAKIC8qKgotICogZmNfZGlzY19sb29rdXBfcnBvcnQoKSAtIGxvb2t1cCBhIHJlbW90ZSBwb3J0IGJ5IHBvcnRfaWQKLSAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBob3N0IHBvcnQgaW5zdGFuY2UKLSAqIEBwb3J0X2lkOiByZW1vdGUgcG9ydCBwb3J0X2lkIHRvIG1hdGNoCi0gKi8KLXN0cnVjdCBmY19ycG9ydCAqZmNfZGlzY19sb29rdXBfcnBvcnQoY29uc3Qgc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKLQkJCQkgICAgICB1MzIgcG9ydF9pZCkKLXsKLQljb25zdCBzdHJ1Y3QgZmNfZGlzYyAqZGlzYyA9ICZscG9ydC0+ZGlzYzsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCAqZm91bmQgPSBOVUxMOwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YTsKLQlpbnQgZGlzY19mb3VuZCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkYXRhLCAmZGlzYy0+cnBvcnRzLCBwZWVycykgewotCQlycG9ydCA9IFBSSVZfVE9fUlBPUlQocmRhdGEpOwotCQlpZiAocnBvcnQtPnBvcnRfaWQgPT0gcG9ydF9pZCkgewotCQkJZGlzY19mb3VuZCA9IDE7Ci0JCQlmb3VuZCA9IHJwb3J0OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoIWRpc2NfZm91bmQpCi0JCWZvdW5kID0gTlVMTDsKLQotCXJldHVybiBmb3VuZDsKLX0KLQotLyoqCiAgKiBmY19kaXNjX3N0b3BfcnBvcnRzKCkgLSBkZWxldGUgYWxsIHRoZSByZW1vdGUgcG9ydHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBscG9ydAogICogQGRpc2M6IFRoZSBkaXNjb3Zlcnkgam9iIHRvIHN0b3AgcnBvcnRzIG9uCiAgKgpAQCAtOTMsNzAgKzYwLDE3IEBACiB2b2lkIGZjX2Rpc2Nfc3RvcF9ycG9ydHMoc3RydWN0IGZjX2Rpc2MgKmRpc2MpCiB7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSwgKm5leHQ7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLCAqbmV4dDsKIAogCWxwb3J0ID0gZGlzYy0+bHBvcnQ7CiAKIAltdXRleF9sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmRhdGEsIG5leHQsICZkaXNjLT5ycG9ydHMsIHBlZXJzKSB7Ci0JCXJwb3J0ID0gUFJJVl9UT19SUE9SVChyZGF0YSk7Ci0JCWxpc3RfZGVsKCZyZGF0YS0+cGVlcnMpOwotCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJwb3J0KTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmRhdGEsIG5leHQsICZkaXNjLT5yb2d1ZV9ycG9ydHMsIHBlZXJzKSB7Ci0JCXJwb3J0ID0gUFJJVl9UT19SUE9SVChyZGF0YSk7Ci0JCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocnBvcnQpOwotCX0KLQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZGF0YSwgbmV4dCwgJmRpc2MtPnJwb3J0cywgcGVlcnMpCisJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocmRhdGEpOwogCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CiB9CiAKIC8qKgotICogZmNfZGlzY19ycG9ydF9jYWxsYmFjaygpIC0gRXZlbnQgaGFuZGxlciBmb3IgcnBvcnQgZXZlbnRzCi0gKiBAbHBvcnQ6IFRoZSBscG9ydCB3aGljaCBpcyByZWNlaXZpbmcgdGhlIGV2ZW50Ci0gKiBAcnBvcnQ6IFRoZSBycG9ydCB3aGljaCB0aGUgZXZlbnQgaGFzIG9jY3VyZWQgb24KLSAqIEBldmVudDogVGhlIGV2ZW50IHRoYXQgb2NjdXJlZAotICoKLSAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgc2hvdWxkIG5vdCBiZSBoZWxkIHdoZW4gY2FsbGluZwotICoJCSB0aGlzIGZ1bmN0aW9uLgotICovCi1zdGF0aWMgdm9pZCBmY19kaXNjX3Jwb3J0X2NhbGxiYWNrKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCi0JCQkJICAgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwKLQkJCQkgICBlbnVtIGZjX3Jwb3J0X2V2ZW50IGV2ZW50KQotewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCXN0cnVjdCBmY19kaXNjICpkaXNjID0gJmxwb3J0LT5kaXNjOwotCi0JRkNfRElTQ19EQkcoZGlzYywgIlJlY2VpdmVkIGEgJWQgZXZlbnQgZm9yIHBvcnQgKCU2eClcbiIsIGV2ZW50LAotCQkgICAgcnBvcnQtPnBvcnRfaWQpOwotCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgUlBPUlRfRVZfQ1JFQVRFRDoKLQkJaWYgKGRpc2MpIHsKLQkJCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwotCQkJbGlzdF9hZGRfdGFpbCgmcmRhdGEtPnBlZXJzLCAmZGlzYy0+cnBvcnRzKTsKLQkJCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBSUE9SVF9FVl9MT0dPOgotCWNhc2UgUlBPUlRfRVZfRkFJTEVEOgotCWNhc2UgUlBPUlRfRVZfU1RPUDoKLQkJbXV0ZXhfbG9jaygmZGlzYy0+ZGlzY19tdXRleCk7Ci0JCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7Ci0JCWlmIChyZGF0YS0+dHJhbnNfc3RhdGUgPT0gRkNfUE9SVFNUQVRFX1JPR1VFKQotCQkJbGlzdF9kZWwoJnJkYXRhLT5wZWVycyk7Ci0JCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQkJbXV0ZXhfdW5sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi19Ci0KLS8qKgogICogZmNfZGlzY19yZWN2X3JzY25fcmVxKCkgLSBIYW5kbGUgUmVnaXN0ZXJlZCBTdGF0ZSBDaGFuZ2UgTm90aWZpY2F0aW9uIChSU0NOKQogICogQHNwOiBDdXJyZW50IHNlcXVlbmNlIG9mIHRoZSBSU0NOIGV4Y2hhbmdlCiAgKiBAZnA6IFJTQ04gRnJhbWUKQEAgLTE2OSw4ICs4Myw2IEBACiAJCQkJICBzdHJ1Y3QgZmNfZGlzYyAqZGlzYykKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0OwotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhOwogCXN0cnVjdCBmY19lbHNfcnNjbiAqcnA7CiAJc3RydWN0IGZjX2Vsc19yc2NuX3BhZ2UgKnBwOwogCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgcmp0X2RhdGE7CkBAIC0yMjQsMTAgKzEzNiw3IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkcC0+bHAgPSBscG9ydDsKLQkJCWRwLT5pZHMucG9ydF9pZCA9IG50b2gyNChwcC0+cnNjbl9maWQpOwotCQkJZHAtPmlkcy5wb3J0X25hbWUgPSAtMTsKLQkJCWRwLT5pZHMubm9kZV9uYW1lID0gLTE7Ci0JCQlkcC0+aWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOworCQkJZHAtPnBvcnRfaWQgPSBudG9oMjQocHAtPnJzY25fZmlkKTsKIAkJCWxpc3RfYWRkX3RhaWwoJmRwLT5wZWVycywgJmRpc2NfcG9ydHMpOwogCQkJYnJlYWs7CiAJCWNhc2UgRUxTX0FERFJfRk1UX0FSRUE6CkBAIC0yNDAsNiArMTQ5LDE5IEBACiAJCX0KIAl9CiAJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19BQ0MsIE5VTEwpOworCisJLyoKKwkgKiBJZiBub3QgZG9pbmcgYSBjb21wbGV0ZSByZWRpc2NvdmVyeSwgZG8gR1BOX0lEIG9uCisJICogdGhlIGluZGl2aWR1YWwgcG9ydHMgbWVudGlvbmVkIGluIHRoZSBsaXN0LgorCSAqIElmIGFueSBvZiB0aGVzZSBnZXQgYW4gZXJyb3IsIGRvIGEgZnVsbCByZWRpc2NvdmVyeS4KKwkgKiBJbiBhbnkgY2FzZSwgZ28gdGhyb3VnaCB0aGUgbGlzdCBhbmQgZnJlZSB0aGUgZW50cmllcy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHAsIG5leHQsICZkaXNjX3BvcnRzLCBwZWVycykgeworCQlsaXN0X2RlbCgmZHAtPnBlZXJzKTsKKwkJaWYgKCFyZWRpc2MpCisJCQlyZWRpc2MgPSBmY19kaXNjX3NpbmdsZShscG9ydCwgZHApOworCQlrZnJlZShkcCk7CisJfQogCWlmIChyZWRpc2MpIHsKIAkJRkNfRElTQ19EQkcoZGlzYywgIlJTQ04gcmVjZWl2ZWQ6IHJlZGlzY292ZXJpbmdcbiIpOwogCQlmY19kaXNjX3Jlc3RhcnQoZGlzYyk7CkBAIC0yNDcsMTYgKzE2OSw2IEBACiAJCUZDX0RJU0NfREJHKGRpc2MsICJSU0NOIHJlY2VpdmVkOiBub3QgcmVkaXNjb3ZlcmluZy4gIgogCQkJICAgICJyZWRpc2MgJWQgc3RhdGUgJWQgaW5fcHJvZyAlZFxuIiwKIAkJCSAgICByZWRpc2MsIGxwb3J0LT5zdGF0ZSwgZGlzYy0+cGVuZGluZyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcCwgbmV4dCwgJmRpc2NfcG9ydHMsIHBlZXJzKSB7Ci0JCQlsaXN0X2RlbCgmZHAtPnBlZXJzKTsKLQkJCXJwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2xvb2t1cChscG9ydCwgZHAtPmlkcy5wb3J0X2lkKTsKLQkJCWlmIChycG9ydCkgewotCQkJCXJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0JCQkJbGlzdF9kZWwoJnJkYXRhLT5wZWVycyk7Ci0JCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihycG9ydCk7Ci0JCQl9Ci0JCQlmY19kaXNjX3NpbmdsZShkaXNjLCBkcCk7Ci0JCX0KIAl9CiAJZmNfZnJhbWVfZnJlZShmcCk7CiAJcmV0dXJuOwpAQCAtMzA4LDM1ICsyMjAsMzQgQEAKICAqLwogc3RhdGljIHZvaWQgZmNfZGlzY19yZXN0YXJ0KHN0cnVjdCBmY19kaXNjICpkaXNjKQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhLCAqbmV4dDsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7CisJaWYgKCFkaXNjLT5kaXNjX2NhbGxiYWNrKQorCQlyZXR1cm47CiAKIAlGQ19ESVNDX0RCRyhkaXNjLCAiUmVzdGFydGluZyBkaXNjb3ZlcnlcbiIpOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJkYXRhLCBuZXh0LCAmZGlzYy0+cnBvcnRzLCBwZWVycykgewotCQlycG9ydCA9IFBSSVZfVE9fUlBPUlQocmRhdGEpOwotCQlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKLQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihycG9ydCk7Ci0JfQotCiAJZGlzYy0+cmVxdWVzdGVkID0gMTsKLQlpZiAoIWRpc2MtPnBlbmRpbmcpCi0JCWZjX2Rpc2NfZ3BuX2Z0X3JlcShkaXNjKTsKKwlpZiAoZGlzYy0+cGVuZGluZykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBZHZhbmNlIGRpc2NfaWQuICBUaGlzIGlzIGFuIGFyYml0cmFyeSBub24temVybyBudW1iZXIgdGhhdCB3aWxsCisJICogbWF0Y2ggdGhlIHZhbHVlIGluIHRoZSBmY19ycG9ydF9wcml2IGFmdGVyIGRpc2NvdmVyeSBmb3IgYWxsCisJICogZnJlc2hseS1kaXNjb3ZlcmVkIHJlbW90ZSBwb3J0cy4gIEF2b2lkIHdyYXBwaW5nIHRvIHplcm8uCisJICovCisJZGlzYy0+ZGlzY19pZCA9IChkaXNjLT5kaXNjX2lkICsgMikgfCAxOworCWRpc2MtPnJldHJ5X2NvdW50ID0gMDsKKwlmY19kaXNjX2dwbl9mdF9yZXEoZGlzYyk7CiB9CiAKIC8qKgogICogZmNfZGlzY19zdGFydCgpIC0gRmlicmUgQ2hhbm5lbCBUYXJnZXQgZGlzY292ZXJ5CiAgKiBAbHBvcnQ6IEZDIGxvY2FsIHBvcnQKLSAqCi0gKiBSZXR1cm5zIG5vbi16ZXJvIGlmIGRpc2NvdmVyeSBjYW5ub3QgYmUgc3RhcnRlZC4KKyAqIEBkaXNjX2NhbGxiYWNrOiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBkaXNjb3ZlcnkgaXMgY29tcGxldGUKICAqLwogc3RhdGljIHZvaWQgZmNfZGlzY19zdGFydCh2b2lkICgqZGlzY19jYWxsYmFjaykoc3RydWN0IGZjX2xwb3J0ICosCiAJCQkJCQllbnVtIGZjX2Rpc2NfZXZlbnQpLAogCQkJICBzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIGlkczsKIAlzdHJ1Y3QgZmNfZGlzYyAqZGlzYyA9ICZscG9ydC0+ZGlzYzsKIAogCS8qCkBAIC0zNDUsMTQ1ICsyNTYsNDcgQEAKIAkgKiBhbmQgc2VuZCB0aGUgR1BOX0ZUIHJlcXVlc3QuCiAJICovCiAJbXV0ZXhfbG9jaygmZGlzYy0+ZGlzY19tdXRleCk7Ci0KIAlkaXNjLT5kaXNjX2NhbGxiYWNrID0gZGlzY19jYWxsYmFjazsKLQotCS8qCi0JICogSWYgbm90IHJlYWR5LCBvciBhbHJlYWR5IHJ1bm5pbmcgZGlzY292ZXJ5LCBqdXN0IHNldCByZXF1ZXN0IGZsYWcuCi0JICovCi0JZGlzYy0+cmVxdWVzdGVkID0gMTsKLQotCWlmIChkaXNjLT5wZW5kaW5nKSB7Ci0JCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIEhhbmRsZSBwb2ludC10by1wb2ludCBtb2RlIGFzIGEgc2ltcGxlIGRpc2NvdmVyeQotCSAqIG9mIHRoZSByZW1vdGUgcG9ydC4gWXVja3ksIHl1Y2t5LCB5dWNrLCB5dWNrIQotCSAqLwotCXJwb3J0ID0gZGlzYy0+bHBvcnQtPnB0cF9ycDsKLQlpZiAocnBvcnQpIHsKLQkJaWRzLnBvcnRfaWQgPSBycG9ydC0+cG9ydF9pZDsKLQkJaWRzLnBvcnRfbmFtZSA9IHJwb3J0LT5wb3J0X25hbWU7Ci0JCWlkcy5ub2RlX25hbWUgPSBycG9ydC0+bm9kZV9uYW1lOwotCQlpZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047Ci0JCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOwotCi0JCWlmICghZmNfZGlzY19uZXdfdGFyZ2V0KGRpc2MsIHJwb3J0LCAmaWRzKSkgewotCQkJZGlzYy0+ZXZlbnQgPSBESVNDX0VWX1NVQ0NFU1M7Ci0JCQlmY19kaXNjX2RvbmUoZGlzYyk7Ci0JCX0KLQkJcHV0X2RldmljZSgmcnBvcnQtPmRldik7Ci0JfSBlbHNlIHsKLQkJZmNfZGlzY19ncG5fZnRfcmVxKGRpc2MpOwkvKiBnZXQgcG9ydHMgYnkgRkMtNCB0eXBlICovCi0JfQotCisJZmNfZGlzY19yZXN0YXJ0KGRpc2MpOwogCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmNfcnBvcnRfb3BlcmF0aW9ucyBmY19kaXNjX3Jwb3J0X29wcyA9IHsKLQkuZXZlbnRfY2FsbGJhY2sgPSBmY19kaXNjX3Jwb3J0X2NhbGxiYWNrLAotfTsKLQotLyoqCi0gKiBmY19kaXNjX25ld190YXJnZXQoKSAtIEhhbmRsZSBuZXcgdGFyZ2V0IGZvdW5kIGJ5IGRpc2NvdmVyeQotICogQGxwb3J0OiBGQyBsb2NhbCBwb3J0Ci0gKiBAcnBvcnQ6IFRoZSBwcmV2aW91cyBGQyByZW1vdGUgcG9ydCAoTlVMTCBpZiBuZXcgcmVtb3RlIHBvcnQpCi0gKiBAaWRzOiBJZGVudGlmaWVycyBmb3IgdGhlIG5ldyBGQyByZW1vdGUgcG9ydAotICoKLSAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoYXQgdGhlIGRpc2NfbXV0ZXggaXMgbG9ja2VkCi0gKgkJIGJlZm9yZSBpdCBpcyBjYWxsZWQuCi0gKi8KLXN0YXRpYyBpbnQgZmNfZGlzY19uZXdfdGFyZ2V0KHN0cnVjdCBmY19kaXNjICpkaXNjLAotCQkJICAgICAgc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwKLQkJCSAgICAgIHN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyAqaWRzKQotewotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBkaXNjLT5scG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGE7Ci0JaW50IGVycm9yID0gMDsKLQotCWlmIChycG9ydCAmJiBpZHMtPnBvcnRfbmFtZSkgewotCQlpZiAocnBvcnQtPnBvcnRfbmFtZSA9PSAtMSkgewotCQkJLyoKLQkJCSAqIFNldCBXV04gYW5kIGZhbGwgdGhyb3VnaCB0byBub3RpZnkgb2YgY3JlYXRlLgotCQkJICovCi0JCQlmY19ycG9ydF9zZXRfbmFtZShycG9ydCwgaWRzLT5wb3J0X25hbWUsCi0JCQkJCSAgcnBvcnQtPm5vZGVfbmFtZSk7Ci0JCX0gZWxzZSBpZiAocnBvcnQtPnBvcnRfbmFtZSAhPSBpZHMtPnBvcnRfbmFtZSkgewotCQkJLyoKLQkJCSAqIFRoaXMgaXMgYSBuZXcgcG9ydCB3aXRoIHRoZSBzYW1lIEZDSUQgYXMKLQkJCSAqIGEgcHJldmlvdXNseS1kaXNjb3ZlcmVkIHBvcnQuICBQcmVzdW1hYmx5IHRoZSBvbGQKLQkJCSAqIHBvcnQgbG9nZ2VkIG91dCBhbmQgYSBuZXcgcG9ydCBsb2dnZWQgaW4gYW5kIHdhcwotCQkJICogYXNzaWduZWQgdGhlIHNhbWUgRkNJRC4gIFRoaXMgc2hvdWxkIGJlIHJhcmUuCi0JCQkgKiBEZWxldGUgdGhlIG9sZCBvbmUgYW5kIGZhbGwgdGhydSB0byByZS1jcmVhdGUuCi0JCQkgKi8KLQkJCWZjX2Rpc2NfZGVsX3RhcmdldChkaXNjLCBycG9ydCk7Ci0JCQlycG9ydCA9IE5VTEw7Ci0JCX0KLQl9Ci0JaWYgKCgoaWRzLT5wb3J0X25hbWUgIT0gLTEpIHx8IChpZHMtPnBvcnRfaWQgIT0gLTEpKSAmJgotCSAgICBpZHMtPnBvcnRfaWQgIT0gZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSAmJgotCSAgICBpZHMtPnBvcnRfbmFtZSAhPSBscG9ydC0+d3dwbikgewotCQlpZiAoIXJwb3J0KSB7Ci0JCQlycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIGlkcy0+cG9ydF9pZCk7Ci0JCQlpZiAoIXJwb3J0KSB7Ci0JCQkJc3RydWN0IGZjX2Rpc2NfcG9ydCBkcDsKLQkJCQlkcC5scCA9IGxwb3J0OwotCQkJCWRwLmlkcy5wb3J0X2lkID0gaWRzLT5wb3J0X2lkOwotCQkJCWRwLmlkcy5wb3J0X25hbWUgPSBpZHMtPnBvcnRfbmFtZTsKLQkJCQlkcC5pZHMubm9kZV9uYW1lID0gaWRzLT5ub2RlX25hbWU7Ci0JCQkJZHAuaWRzLnJvbGVzID0gaWRzLT5yb2xlczsKLQkJCQlycG9ydCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUoJmRwKTsKLQkJCX0KLQkJCWlmICghcnBvcnQpCi0JCQkJZXJyb3IgPSAtRU5PTUVNOwotCQl9Ci0JCWlmIChycG9ydCkgewotCQkJcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQkJCXJkYXRhLT5vcHMgPSAmZmNfZGlzY19ycG9ydF9vcHM7Ci0JCQlyZGF0YS0+cnBfc3RhdGUgPSBSUE9SVF9TVF9JTklUOwotCQkJbGlzdF9hZGRfdGFpbCgmcmRhdGEtPnBlZXJzLCAmZGlzYy0+cm9ndWVfcnBvcnRzKTsKLQkJCWxwb3J0LT50dC5ycG9ydF9sb2dpbihycG9ydCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKioKLSAqIGZjX2Rpc2NfZGVsX3RhcmdldCgpIC0gRGVsZXRlIGEgdGFyZ2V0Ci0gKiBAZGlzYzogRkMgZGlzY292ZXJ5IGNvbnRleHQKLSAqIEBycG9ydDogVGhlIHJlbW90ZSBwb3J0IHRvIGJlIHJlbW92ZWQKLSAqLwotc3RhdGljIHZvaWQgZmNfZGlzY19kZWxfdGFyZ2V0KHN0cnVjdCBmY19kaXNjICpkaXNjLCBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQotewotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBkaXNjLT5scG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQlsaXN0X2RlbCgmcmRhdGEtPnBlZXJzKTsKLQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJwb3J0KTsKLX0KLQogLyoqCiAgKiBmY19kaXNjX2RvbmUoKSAtIERpc2NvdmVyeSBoYXMgYmVlbiBjb21wbGV0ZWQKICAqIEBkaXNjOiBGQyBkaXNjb3ZlcnkgY29udGV4dAorICogQGV2ZW50OiBkaXNjb3ZlcnkgY29tcGxldGlvbiBzdGF0dXMKKyAqCiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHRoZSBkaXNjIG11dGV4IGlzIGxvY2tlZCBiZWZvcmUKICAqIGl0IGlzIGNhbGxlZC4gVGhlIGRpc2NvdmVyeSBjYWxsYmFjayBpcyB0aGVuIG1hZGUgd2l0aCB0aGUgbG9jayByZWxlYXNlZCwKICAqIGFuZCB0aGUgbG9jayBpcyByZS10YWtlbiBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhpcyBmdW5jdGlvbgogICovCi1zdGF0aWMgdm9pZCBmY19kaXNjX2RvbmUoc3RydWN0IGZjX2Rpc2MgKmRpc2MpCitzdGF0aWMgdm9pZCBmY19kaXNjX2RvbmUoc3RydWN0IGZjX2Rpc2MgKmRpc2MsIGVudW0gZmNfZGlzY19ldmVudCBldmVudCkKIHsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gZGlzYy0+bHBvcnQ7Ci0JZW51bSBmY19kaXNjX2V2ZW50IGV2ZW50OworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAogCUZDX0RJU0NfREJHKGRpc2MsICJEaXNjb3ZlcnkgY29tcGxldGVcbiIpOwogCi0JZXZlbnQgPSBkaXNjLT5ldmVudDsKLQlkaXNjLT5ldmVudCA9IERJU0NfRVZfTk9ORTsKKwlkaXNjLT5wZW5kaW5nID0gMDsKKwlpZiAoZGlzYy0+cmVxdWVzdGVkKSB7CisJCWZjX2Rpc2NfcmVzdGFydChkaXNjKTsKKwkJcmV0dXJuOworCX0KIAotCWlmIChkaXNjLT5yZXF1ZXN0ZWQpCi0JCWZjX2Rpc2NfZ3BuX2Z0X3JlcShkaXNjKTsKLQllbHNlCi0JCWRpc2MtPnBlbmRpbmcgPSAwOworCS8qCisJICogR28gdGhyb3VnaCBhbGwgcmVtb3RlIHBvcnRzLiAgSWYgdGhleSB3ZXJlIGZvdW5kIGluIHRoZSBsYXRlc3QKKwkgKiBkaXNjb3ZlcnksIHJldmVyaWZ5IG9yIGxvZyB0aGVtIGluLiAgT3RoZXJ3aXNlLCBsb2cgdGhlbSBvdXQuCisJICogU2tpcCBwb3J0cyB3aGljaCB3ZXJlIG5ldmVyIGRpc2NvdmVyZWQuICBUaGVzZSBhcmUgdGhlIGROUyBwb3J0CisJICogYW5kIHBvcnRzIHdoaWNoIHdlcmUgY3JlYXRlZCBieSBQTE9HSS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkYXRhLCAmZGlzYy0+cnBvcnRzLCBwZWVycykgeworCQlpZiAoIXJkYXRhLT5kaXNjX2lkKQorCQkJY29udGludWU7CisJCWlmIChyZGF0YS0+ZGlzY19pZCA9PSBkaXNjLT5kaXNjX2lkKQorCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ2luKHJkYXRhKTsKKwkJZWxzZQorCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihyZGF0YSk7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKIAlkaXNjLT5kaXNjX2NhbGxiYWNrKGxwb3J0LCBldmVudCk7CkBAIC01MjIsMTEgKzMzNSw4IEBACiAJCQl9CiAJCQlkaXNjLT5yZXRyeV9jb3VudCsrOwogCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkaXNjLT5kaXNjX3dvcmssIGRlbGF5KTsKLQkJfSBlbHNlIHsKLQkJCS8qIGV4Y2VlZGVkIHJldHJpZXMgKi8KLQkJCWRpc2MtPmV2ZW50ID0gRElTQ19FVl9GQUlMRUQ7Ci0JCQlmY19kaXNjX2RvbmUoZGlzYyk7Ci0JCX0KKwkJfSBlbHNlCisJCQlmY19kaXNjX2RvbmUoZGlzYywgRElTQ19FVl9GQUlMRUQpOwogCX0KIH0KIApAQCAtNTU1LDcgKzM2NSw3IEBACiAJaWYgKCFmcCkKIAkJZ290byBlcnI7CiAKLQlpZiAobHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIE5VTEwsIGZwLAorCWlmIChscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgMCwgZnAsCiAJCQkJIEZDX05TX0dQTl9GVCwKIAkJCQkgZmNfZGlzY19ncG5fZnRfcmVzcCwKIAkJCQkgZGlzYywgbHBvcnQtPmVfZF90b3YpKQpAQCAtNTY1LDEwICszNzUsMTIgQEAKIH0KIAogLyoqCi0gKiBmY19kaXNjX2dwbl9mdF9wYXJzZSgpIC0gUGFyc2UgdGhlIGxpc3Qgb2YgSURzIGFuZCBuYW1lcyByZXN1bHRpbmcgZnJvbSBhIHJlcXVlc3QKKyAqIGZjX2Rpc2NfZ3BuX2Z0X3BhcnNlKCkgLSBQYXJzZSB0aGUgYm9keSBvZiB0aGUgZE5TIEdQTl9GVCByZXNwb25zZS4KICAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBob3N0IHBvcnQgaW5zdGFuY2UKICAqIEBidWY6IEdQTl9GVCByZXNwb25zZSBidWZmZXIKICAqIEBsZW46IHNpemUgb2YgcmVzcG9uc2UgYnVmZmVyCisgKgorICogR29lcyB0aHJvdWdoIHRoZSBsaXN0IG9mIElEcyBhbmQgbmFtZXMgcmVzdWx0aW5nIGZyb20gYSByZXF1ZXN0LgogICovCiBzdGF0aWMgaW50IGZjX2Rpc2NfZ3BuX2Z0X3BhcnNlKHN0cnVjdCBmY19kaXNjICpkaXNjLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCiB7CkBAIC01NzgsMTEgKzM5MCwxMSBAQAogCXNpemVfdCBwbGVuOwogCXNpemVfdCB0bGVuOwogCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IGZjX2Rpc2NfcG9ydCBkcDsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YTsKKwlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgaWRzOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAogCWxwb3J0ID0gZGlzYy0+bHBvcnQ7CisJZGlzYy0+c2VxX2NvdW50Kys7CiAKIAkvKgogCSAqIEhhbmRsZSBwYXJ0aWFsIG5hbWUgcmVjb3JkIGxlZnQgb3ZlciBmcm9tIHByZXZpb3VzIGNhbGwuCkBAIC01OTEsNiArNDAzLDcgQEAKIAlwbGVuID0gbGVuOwogCW5wID0gKHN0cnVjdCBmY19ncG5fZnRfcmVzcCAqKWJwOwogCXRsZW4gPSBkaXNjLT5idWZfbGVuOworCWRpc2MtPmJ1Zl9sZW4gPSAwOwogCWlmICh0bGVuKSB7CiAJCVdBUk5fT04odGxlbiA+PSBzaXplb2YoKm5wKSk7CiAJCXBsZW4gPSBzaXplb2YoKm5wKSAtIHRsZW47CkBAIC02MjEsMzEgKzQzNCwyNSBAQAogCSAqIEFmdGVyIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHRoaW5ncyByZXR1cm4gdG8gIm5vcm1hbCIuCiAJICovCiAJd2hpbGUgKHBsZW4gPj0gc2l6ZW9mKCpucCkpIHsKLQkJZHAubHAgPSBscG9ydDsKLQkJZHAuaWRzLnBvcnRfaWQgPSBudG9oMjQobnAtPmZwX2ZpZCk7Ci0JCWRwLmlkcy5wb3J0X25hbWUgPSBudG9obGwobnAtPmZwX3d3cG4pOwotCQlkcC5pZHMubm9kZV9uYW1lID0gLTE7Ci0JCWRwLmlkcy5yb2xlcyA9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTjsKKwkJaWRzLnBvcnRfaWQgPSBudG9oMjQobnAtPmZwX2ZpZCk7CisJCWlkcy5wb3J0X25hbWUgPSBudG9obGwobnAtPmZwX3d3cG4pOwogCi0JCWlmICgoZHAuaWRzLnBvcnRfaWQgIT0gZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSkgJiYKLQkJICAgIChkcC5pZHMucG9ydF9uYW1lICE9IGxwb3J0LT53d3BuKSkgewotCQkJcnBvcnQgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKCZkcCk7Ci0JCQlpZiAocnBvcnQpIHsKLQkJCQlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCQkJCXJkYXRhLT5vcHMgPSAmZmNfZGlzY19ycG9ydF9vcHM7Ci0JCQkJcmRhdGEtPmxvY2FsX3BvcnQgPSBscG9ydDsKLQkJCQlsaXN0X2FkZF90YWlsKCZyZGF0YS0+cGVlcnMsCi0JCQkJCSAgICAgICZkaXNjLT5yb2d1ZV9ycG9ydHMpOwotCQkJCWxwb3J0LT50dC5ycG9ydF9sb2dpbihycG9ydCk7Ci0JCQl9IGVsc2UKKwkJaWYgKGlkcy5wb3J0X2lkICE9IGZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCkgJiYKKwkJICAgIGlkcy5wb3J0X25hbWUgIT0gbHBvcnQtPnd3cG4pIHsKKwkJCXJkYXRhID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZShscG9ydCwgaWRzLnBvcnRfaWQpOworCQkJaWYgKHJkYXRhKSB7CisJCQkJcmRhdGEtPmlkcy5wb3J0X25hbWUgPSBpZHMucG9ydF9uYW1lOworCQkJCXJkYXRhLT5kaXNjX2lkID0gZGlzYy0+ZGlzY19pZDsKKwkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibGliZmM6IEZhaWxlZCB0byBhbGxvY2F0ZSAiCiAJCQkJICAgICAgICJtZW1vcnkgZm9yIHRoZSBuZXdseSBkaXNjb3ZlcmVkIHBvcnQgIgotCQkJCSAgICAgICAiKCU2eClcbiIsIGRwLmlkcy5wb3J0X2lkKTsKKwkJCQkgICAgICAgIiglNngpXG4iLCBpZHMucG9ydF9pZCk7CisJCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJfQogCQl9CiAKIAkJaWYgKG5wLT5mcF9mbGFncyAmIEZDX05TX0ZJRF9MQVNUKSB7Ci0JCQlkaXNjLT5ldmVudCA9IERJU0NfRVZfU1VDQ0VTUzsKLQkJCWZjX2Rpc2NfZG9uZShkaXNjKTsKKwkJCWZjX2Rpc2NfZG9uZShkaXNjLCBESVNDX0VWX1NVQ0NFU1MpOwogCQkJbGVuID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC02NjUsOCArNDcyLDYgQEAKIAkJCW1lbWNweSgmZGlzYy0+cGFydGlhbF9idWYsIG5wLCBsZW4pOwogCQl9CiAJCWRpc2MtPmJ1Zl9sZW4gPSAodW5zaWduZWQgY2hhcikgbGVuOwotCX0gZWxzZSB7Ci0JCWRpc2MtPmJ1Zl9sZW4gPSAwOwogCX0KIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC02ODMsOCArNDg4LDcgQEAKIAkJCQkJICAgIHN0cnVjdCBmY19kaXNjLAogCQkJCQkgICAgZGlzY193b3JrLndvcmspOwogCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwotCWlmIChkaXNjLT5yZXF1ZXN0ZWQgJiYgIWRpc2MtPnBlbmRpbmcpCi0JCWZjX2Rpc2NfZ3BuX2Z0X3JlcShkaXNjKTsKKwlmY19kaXNjX2dwbl9mdF9yZXEoZGlzYyk7CiAJbXV0ZXhfdW5sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKIH0KIApAQCAtNzAzLDEwICs1MDcsMTAgQEAKIAlzdHJ1Y3QgZmNfZGlzYyAqZGlzYyA9IGRpc2NfYXJnOwogCXN0cnVjdCBmY19jdF9oZHIgKmNwOwogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOworCWVudW0gZmNfZGlzY19ldmVudCBldmVudCA9IERJU0NfRVZfTk9ORTsKIAl1bnNpZ25lZCBpbnQgc2VxX2NudDsKLQl2b2lkICpidWYgPSBOVUxMOwogCXVuc2lnbmVkIGludCBsZW47Ci0JaW50IGVycm9yOworCWludCBlcnJvciA9IDA7CiAKIAltdXRleF9sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKIAlGQ19ESVNDX0RCRyhkaXNjLCAiUmVjZWl2ZWQgYSBHUE5fRlQgcmVzcG9uc2VcbiIpOwpAQCAtNzIxLDc3ICs1MjUsMTU4IEBACiAJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAlsZW4gPSBmcl9sZW4oZnApIC0gc2l6ZW9mKCpmaCk7CiAJc2VxX2NudCA9IG50b2hzKGZoLT5maF9zZXFfY250KTsKLQlpZiAoZnJfc29mKGZwKSA9PSBGQ19TT0ZfSTMgJiYgc2VxX2NudCA9PSAwICYmCi0JICAgIGRpc2MtPnNlcV9jb3VudCA9PSAwKSB7CisJaWYgKGZyX3NvZihmcCkgPT0gRkNfU09GX0kzICYmIHNlcV9jbnQgPT0gMCAmJiBkaXNjLT5zZXFfY291bnQgPT0gMCkgewogCQljcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmNwKSk7CiAJCWlmICghY3ApIHsKIAkJCUZDX0RJU0NfREJHKGRpc2MsICJHUE5fRlQgcmVzcG9uc2UgdG9vIHNob3J0LCBsZW4gJWRcbiIsCiAJCQkJICAgIGZyX2xlbihmcCkpOworCQkJZXZlbnQgPSBESVNDX0VWX0ZBSUxFRDsKIAkJfSBlbHNlIGlmIChudG9ocyhjcC0+Y3RfY21kKSA9PSBGQ19GU19BQ0MpIHsKIAogCQkJLyogQWNjZXB0ZWQsIHBhcnNlIHRoZSByZXNwb25zZS4gKi8KLQkJCWJ1ZiA9IGNwICsgMTsKIAkJCWxlbiAtPSBzaXplb2YoKmNwKTsKKwkJCWVycm9yID0gZmNfZGlzY19ncG5fZnRfcGFyc2UoZGlzYywgY3AgKyAxLCBsZW4pOwogCQl9IGVsc2UgaWYgKG50b2hzKGNwLT5jdF9jbWQpID09IEZDX0ZTX1JKVCkgewogCQkJRkNfRElTQ19EQkcoZGlzYywgIkdQTl9GVCByZWplY3RlZCByZWFzb24gJXggZXhwICV4ICIKIAkJCQkgICAgIihjaGVjayB6b25pbmcpXG4iLCBjcC0+Y3RfcmVhc29uLAogCQkJCSAgICBjcC0+Y3RfZXhwbGFuKTsKLQkJCWRpc2MtPmV2ZW50ID0gRElTQ19FVl9GQUlMRUQ7Ci0JCQlmY19kaXNjX2RvbmUoZGlzYyk7CisJCQlldmVudCA9IERJU0NfRVZfRkFJTEVEOworCQkJaWYgKGNwLT5jdF9yZWFzb24gPT0gRkNfRlNfUkpUX1VOQUJMICYmCisJCQkgICAgY3AtPmN0X2V4cGxhbiA9PSBGQ19GU19FWFBfRlROUikKKwkJCQlldmVudCA9IERJU0NfRVZfU1VDQ0VTUzsKIAkJfSBlbHNlIHsKIAkJCUZDX0RJU0NfREJHKGRpc2MsICJHUE5fRlQgdW5leHBlY3RlZCByZXNwb25zZSBjb2RlICIKIAkJCQkgICAgIiV4XG4iLCBudG9ocyhjcC0+Y3RfY21kKSk7CisJCQlldmVudCA9IERJU0NfRVZfRkFJTEVEOwogCQl9Ci0JfSBlbHNlIGlmIChmcl9zb2YoZnApID09IEZDX1NPRl9OMyAmJgotCQkgICBzZXFfY250ID09IGRpc2MtPnNlcV9jb3VudCkgewotCQlidWYgPSBmaCArIDE7CisJfSBlbHNlIGlmIChmcl9zb2YoZnApID09IEZDX1NPRl9OMyAmJiBzZXFfY250ID09IGRpc2MtPnNlcV9jb3VudCkgeworCQllcnJvciA9IGZjX2Rpc2NfZ3BuX2Z0X3BhcnNlKGRpc2MsIGZoICsgMSwgbGVuKTsKIAl9IGVsc2UgewogCQlGQ19ESVNDX0RCRyhkaXNjLCAiR1BOX0ZUIHVuZXhwZWN0ZWQgZnJhbWUgLSBvdXQgb2Ygc2VxdWVuY2U/ICIKIAkJCSAgICAic2VxX2NudCAleCBleHBlY3RlZCAleCBzb2YgJXggZW9mICV4XG4iLAogCQkJICAgIHNlcV9jbnQsIGRpc2MtPnNlcV9jb3VudCwgZnJfc29mKGZwKSwgZnJfZW9mKGZwKSk7CisJCWV2ZW50ID0gRElTQ19FVl9GQUlMRUQ7CiAJfQotCWlmIChidWYpIHsKLQkJZXJyb3IgPSBmY19kaXNjX2dwbl9mdF9wYXJzZShkaXNjLCBidWYsIGxlbik7Ci0JCWlmIChlcnJvcikKLQkJCWZjX2Rpc2NfZXJyb3IoZGlzYywgZnApOwotCQllbHNlCi0JCQlkaXNjLT5zZXFfY291bnQrKzsKLQl9CisJaWYgKGVycm9yKQorCQlmY19kaXNjX2Vycm9yKGRpc2MsIGZwKTsKKwllbHNlIGlmIChldmVudCAhPSBESVNDX0VWX05PTkUpCisJCWZjX2Rpc2NfZG9uZShkaXNjLCBldmVudCk7CiAJZmNfZnJhbWVfZnJlZShmcCk7Ci0KIAltdXRleF91bmxvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOwogfQogCiAvKioKKyAqIGZjX2Rpc2NfZ3BuX2lkX3Jlc3AoKSAtIEhhbmRsZSBhIHJlc3BvbnNlIGZyYW1lIGZyb20gR2V0IFBvcnQgTmFtZXMgKEdQTl9JRCkKKyAqIEBzcDogZXhjaGFuZ2Ugc2VxdWVuY2UKKyAqIEBmcDogcmVzcG9uc2UgZnJhbWUKKyAqIEByZGF0YV9hcmc6IHJlbW90ZSBwb3J0IHByaXZhdGUgZGF0YQorICoKKyAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBkaXNjIG11dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGZjX2Rpc2NfZ3BuX2lkX3Jlc3Aoc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqZnAsCisJCQkJdm9pZCAqcmRhdGFfYXJnKQoreworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSA9IHJkYXRhX2FyZzsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqbmV3X3JkYXRhOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7CisJc3RydWN0IGZjX2Rpc2MgKmRpc2M7CisJc3RydWN0IGZjX2N0X2hkciAqY3A7CisJc3RydWN0IGZjX25zX2dpZF9wbiAqcG47CisJdTY0IHBvcnRfbmFtZTsKKworCWxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CisJZGlzYyA9ICZscG9ydC0+ZGlzYzsKKworCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOworCWlmIChQVFJfRVJSKGZwKSA9PSAtRkNfRVhfQ0xPU0VEKQorCQlnb3RvIG91dDsKKwlpZiAoSVNfRVJSKGZwKSkKKwkJZ290byByZWRpc2M7CisKKwljcCA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmNwKSk7CisJaWYgKCFjcCkKKwkJZ290byByZWRpc2M7CisJaWYgKG50b2hzKGNwLT5jdF9jbWQpID09IEZDX0ZTX0FDQykgeworCQlpZiAoZnJfbGVuKGZwKSA8IHNpemVvZihzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyKSArCisJCSAgICBzaXplb2YoKmNwKSArIHNpemVvZigqcG4pKQorCQkJZ290byByZWRpc2M7CisJCXBuID0gKHN0cnVjdCBmY19uc19naWRfcG4gKikoY3AgKyAxKTsKKwkJcG9ydF9uYW1lID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbi0+Zm5fd3dwbik7CisJCWlmIChyZGF0YS0+aWRzLnBvcnRfbmFtZSA9PSAtMSkKKwkJCXJkYXRhLT5pZHMucG9ydF9uYW1lID0gcG9ydF9uYW1lOworCQllbHNlIGlmIChyZGF0YS0+aWRzLnBvcnRfbmFtZSAhPSBwb3J0X25hbWUpIHsKKwkJCUZDX0RJU0NfREJHKGRpc2MsICJHUE5fSUQgYWNjZXB0ZWQuICBXV1BOIGNoYW5nZWQuICIKKwkJCQkgICAgIlBvcnQtaWQgJXggd3dwbiAlbGx4XG4iLAorCQkJCSAgICByZGF0YS0+aWRzLnBvcnRfaWQsIHBvcnRfbmFtZSk7CisJCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJkYXRhKTsKKworCQkJbmV3X3JkYXRhID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZShscG9ydCwKKwkJCQkJCQkgICByZGF0YS0+aWRzLnBvcnRfaWQpOworCQkJaWYgKG5ld19yZGF0YSkgeworCQkJCW5ld19yZGF0YS0+ZGlzY19pZCA9IGRpc2MtPmRpc2NfaWQ7CisJCQkJbHBvcnQtPnR0LnJwb3J0X2xvZ2luKG5ld19yZGF0YSk7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZGF0YS0+ZGlzY19pZCA9IGRpc2MtPmRpc2NfaWQ7CisJCWxwb3J0LT50dC5ycG9ydF9sb2dpbihyZGF0YSk7CisJfSBlbHNlIGlmIChudG9ocyhjcC0+Y3RfY21kKSA9PSBGQ19GU19SSlQpIHsKKwkJRkNfRElTQ19EQkcoZGlzYywgIkdQTl9JRCByZWplY3RlZCByZWFzb24gJXggZXhwICV4XG4iLAorCQkJICAgIGNwLT5jdF9yZWFzb24sIGNwLT5jdF9leHBsYW4pOworCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJkYXRhKTsKKwl9IGVsc2UgeworCQlGQ19ESVNDX0RCRyhkaXNjLCAiR1BOX0lEIHVuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZSAleFxuIiwKKwkJCSAgICBudG9ocyhjcC0+Y3RfY21kKSk7CityZWRpc2M6CisJCWZjX2Rpc2NfcmVzdGFydChkaXNjKTsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkaXNjLT5kaXNjX211dGV4KTsKKwlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIGxwb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKK30KKworLyoqCisgKiBmY19kaXNjX2dwbl9pZF9yZXEoKSAtIFNlbmQgR2V0IFBvcnQgTmFtZXMgYnkgSUQgKEdQTl9JRCkgcmVxdWVzdAorICogQGxwb3J0OiBsb2NhbCBwb3J0CisgKiBAcmRhdGE6IHJlbW90ZSBwb3J0IHByaXZhdGUgZGF0YQorICoKKyAqIExvY2tpbmcgTm90ZTogVGhpcyBmdW5jdGlvbiBleHBlY3RzIHRoYXQgdGhlIGRpc2NfbXV0ZXggaXMgbG9ja2VkCisgKgkJIGJlZm9yZSBpdCBpcyBjYWxsZWQuCisgKiBPbiBmYWlsdXJlLCBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IGZjX2Rpc2NfZ3BuX2lkX3JlcShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAorCQkJICAgICAgc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQoreworCXN0cnVjdCBmY19mcmFtZSAqZnA7CisKKwlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2Yoc3RydWN0IGZjX2N0X2hkcikgKworCQkJICAgIHNpemVvZihzdHJ1Y3QgZmNfbnNfZmlkKSk7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcmRhdGEtPmlkcy5wb3J0X2lkLCBmcCwgRkNfTlNfR1BOX0lELAorCQkJCSBmY19kaXNjX2dwbl9pZF9yZXNwLCByZGF0YSwgbHBvcnQtPmVfZF90b3YpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlrcmVmX2dldCgmcmRhdGEtPmtyZWYpOworCXJldHVybiAwOworfQorCisvKioKICAqIGZjX2Rpc2Nfc2luZ2xlKCkgLSBEaXNjb3ZlciB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSB0YXJnZXQKLSAqIEBscG9ydDogRkMgbG9jYWwgcG9ydAorICogQGxwb3J0OiBsb2NhbCBwb3J0CiAgKiBAZHA6IFRoZSBwb3J0IHRvIHJlZGlzY292ZXIKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHRoZSBkaXNjX211dGV4IGlzIGxvY2tlZAogICoJCSBiZWZvcmUgaXQgaXMgY2FsbGVkLgogICovCi1zdGF0aWMgdm9pZCBmY19kaXNjX3NpbmdsZShzdHJ1Y3QgZmNfZGlzYyAqZGlzYywgc3RydWN0IGZjX2Rpc2NfcG9ydCAqZHApCitzdGF0aWMgaW50IGZjX2Rpc2Nfc2luZ2xlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHN0cnVjdCBmY19kaXNjX3BvcnQgKmRwKQogewotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpuZXdfcnBvcnQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAotCWxwb3J0ID0gZGlzYy0+bHBvcnQ7Ci0KLQlpZiAoZHAtPmlkcy5wb3J0X2lkID09IGZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCkpCi0JCWdvdG8gb3V0OwotCi0JbmV3X3Jwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZShkcCk7Ci0JaWYgKG5ld19ycG9ydCkgewotCQlyZGF0YSA9IG5ld19ycG9ydC0+ZGRfZGF0YTsKLQkJcmRhdGEtPm9wcyA9ICZmY19kaXNjX3Jwb3J0X29wczsKLQkJa2ZyZWUoZHApOwotCQlsaXN0X2FkZF90YWlsKCZyZGF0YS0+cGVlcnMsICZkaXNjLT5yb2d1ZV9ycG9ydHMpOwotCQlscG9ydC0+dHQucnBvcnRfbG9naW4obmV3X3Jwb3J0KTsKLQl9Ci0JcmV0dXJuOwotb3V0OgotCWtmcmVlKGRwKTsKKwlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUobHBvcnQsIGRwLT5wb3J0X2lkKTsKKwlpZiAoIXJkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZGF0YS0+ZGlzY19pZCA9IDA7CisJcmV0dXJuIGZjX2Rpc2NfZ3BuX2lkX3JlcShscG9ydCwgcmRhdGEpOwogfQogCiAvKioKQEAgLTg0MSwxOCArNzI2LDEyIEBACiAJaWYgKCFscG9ydC0+dHQuZGlzY19yZWN2X3JlcSkKIAkJbHBvcnQtPnR0LmRpc2NfcmVjdl9yZXEgPSBmY19kaXNjX3JlY3ZfcmVxOwogCi0JaWYgKCFscG9ydC0+dHQucnBvcnRfbG9va3VwKQotCQlscG9ydC0+dHQucnBvcnRfbG9va3VwID0gZmNfZGlzY19sb29rdXBfcnBvcnQ7Ci0KIAlkaXNjID0gJmxwb3J0LT5kaXNjOwogCUlOSVRfREVMQVlFRF9XT1JLKCZkaXNjLT5kaXNjX3dvcmssIGZjX2Rpc2NfdGltZW91dCk7CiAJbXV0ZXhfaW5pdCgmZGlzYy0+ZGlzY19tdXRleCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRpc2MtPnJwb3J0cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRpc2MtPnJvZ3VlX3Jwb3J0cyk7CiAKIAlkaXNjLT5scG9ydCA9IGxwb3J0OwotCWRpc2MtPmRlbGF5ID0gRkNfRElTQ19ERUxBWTsKLQlkaXNjLT5ldmVudCA9IERJU0NfRVZfTk9ORTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2Vsc2N0LmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZWxzY3QuYwppbmRleCA1ODc4YjM0Li41Y2ZhNjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZWxzY3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZWxzY3QuYwpAQCAtMzIsNyArMzIsNyBAQAogICogZmNfZWxzY3Rfc2VuZCAtIHNlbmRzIEVMUy9DVCBmcmFtZQogICovCiBzdGF0aWMgc3RydWN0IGZjX3NlcSAqZmNfZWxzY3Rfc2VuZChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAotCQkJCSAgICBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LAorCQkJCSAgICB1MzIgZGlkLAogCQkJCSAgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgb3AsCiAJCQkJICAgIHZvaWQgKCpyZXNwKShzdHJ1Y3QgZmNfc2VxICosCkBAIC00MSwxNiArNDEsMTcgQEAKIAkJCQkgICAgdm9pZCAqYXJnLCB1MzIgdGltZXJfbXNlYykKIHsKIAllbnVtIGZjX3JjdGwgcl9jdGw7Ci0JdTMyIGRpZCA9IEZDX0ZJRF9OT05FOwogCWVudW0gZmNfZmhfdHlwZSBmaF90eXBlOwogCWludCByYzsKIAogCS8qIEVMUyByZXF1ZXN0cyAqLwogCWlmICgob3AgPj0gRUxTX0xTX1JKVCkgJiYgKG9wIDw9IEVMU19BVVRIX0VMUykpCi0JCXJjID0gZmNfZWxzX2ZpbGwobHBvcnQsIHJwb3J0LCBmcCwgb3AsICZyX2N0bCwgJmRpZCwgJmZoX3R5cGUpOwotCWVsc2UKKwkJcmMgPSBmY19lbHNfZmlsbChscG9ydCwgZGlkLCBmcCwgb3AsICZyX2N0bCwgJmZoX3R5cGUpOworCWVsc2UgewogCQkvKiBDVCByZXF1ZXN0cyAqLwotCQlyYyA9IGZjX2N0X2ZpbGwobHBvcnQsIGZwLCBvcCwgJnJfY3RsLCAmZGlkLCAmZmhfdHlwZSk7CisJCXJjID0gZmNfY3RfZmlsbChscG9ydCwgZGlkLCBmcCwgb3AsICZyX2N0bCwgJmZoX3R5cGUpOworCQlkaWQgPSBGQ19GSURfRElSX1NFUlY7CisJfQogCiAJaWYgKHJjKQogCQlyZXR1cm4gTlVMTDsKQEAgLTY5LDMgKzcwLDQxIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2Vsc2N0X2luaXQpOworCisvKioKKyAqIGZjX2Vsc19yZXNwX3R5cGUoKSAtIHJldHVybiBzdHJpbmcgZGVzY3JpYmluZyBFTFMgcmVzcG9uc2UgZm9yIGRlYnVnLgorICogQGZwOiBmcmFtZSBwb2ludGVyIHdpdGggcG9zc2libGUgZXJyb3IgY29kZS4KKyAqLworY29uc3QgY2hhciAqZmNfZWxzX3Jlc3BfdHlwZShzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCWNvbnN0IGNoYXIgKm1zZzsKKwlpZiAoSVNfRVJSKGZwKSkgeworCQlzd2l0Y2ggKC1QVFJfRVJSKGZwKSkgeworCQljYXNlIEZDX05PX0VSUjoKKwkJCW1zZyA9ICJyZXNwb25zZSBubyBlcnJvciI7CisJCQlicmVhazsKKwkJY2FzZSBGQ19FWF9USU1FT1VUOgorCQkJbXNnID0gInJlc3BvbnNlIHRpbWVvdXQiOworCQkJYnJlYWs7CisJCWNhc2UgRkNfRVhfQ0xPU0VEOgorCQkJbXNnID0gInJlc3BvbnNlIGNsb3NlZCI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1zZyA9ICJyZXNwb25zZSB1bmtub3duIGVycm9yIjsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChmY19mcmFtZV9wYXlsb2FkX29wKGZwKSkgeworCQljYXNlIEVMU19MU19BQ0M6CisJCQltc2cgPSAiYWNjZXB0IjsKKwkJCWJyZWFrOworCQljYXNlIEVMU19MU19SSlQ6CisJCQltc2cgPSAicmVqZWN0IjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNnID0gInJlc3BvbnNlIHVua25vd24gRUxTIjsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBtc2c7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2V4Y2guYwppbmRleCAxNDVhYjliLi5jMWMxNTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZXhjaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19leGNoLmMKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlIDxzY3NpL2xpYmZjLmg+CiAjaW5jbHVkZSA8c2NzaS9mY19lbmNvZGUuaD4KIAordTE2CWZjX2NwdV9tYXNrOwkJLyogY3B1IG1hc2sgZm9yIHBvc3NpYmxlIGNwdXMgKi8KK0VYUE9SVF9TWU1CT0woZmNfY3B1X21hc2spOworc3RhdGljIHUxNglmY19jcHVfb3JkZXI7CS8qIDIncyBwb3dlciB0byByZXByZXNlbnQgdG90YWwgcG9zc2libGUgY3B1cyAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmY19lbV9jYWNoZXA7ICAgICAgICAvKiBjYWNoZSBmb3IgZXhjaGFuZ2VzICovCiAKIC8qCkBAIC00OCw2ICs1MSwyMCBAQAogICovCiAKIC8qCisgKiBQZXIgY3B1IGV4Y2hhbmdlIHBvb2wKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBtYW5hZ2VzIHBlciBjcHUgZXhjaGFuZ2VzIGluIGFycmF5IG9mIGV4Y2hhbmdlIHBvaW50ZXJzLgorICogVGhpcyBhcnJheSBpcyBhbGxvY2F0ZWQgZm9sbG93ZWQgYnkgc3RydWN0IGZjX2V4Y2hfcG9vbCBtZW1vcnkgZm9yCisgKiBhc3NpZ25lZCByYW5nZSBvZiBleGNoYW5nZXMgdG8gcGVyIGNwdSBwb29sLgorICovCitzdHJ1Y3QgZmNfZXhjaF9wb29sIHsKKwl1MTYJCW5leHRfaW5kZXg7CS8qIG5leHQgcG9zc2libGUgZnJlZSBleGNoYW5nZSBpbmRleCAqLworCXUxNgkJdG90YWxfZXhjaGVzOwkvKiB0b3RhbCBhbGxvY2F0ZWQgZXhjaGFuZ2VzICovCisJc3BpbmxvY2tfdAlsb2NrOwkJLyogZXhjaCBwb29sIGxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWV4X2xpc3Q7CS8qIGFsbG9jYXRlZCBleGNoYW5nZXMgbGlzdCAqLworfTsKKworLyoKICAqIEV4Y2hhbmdlIG1hbmFnZXIuCiAgKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGNlbnRlciBmb3IgY3JlYXRpbmcgZXhjaGFuZ2VzIGFuZCBzZXF1ZW5jZXMuCkBAIC01NSwxNyArNzIsMTMgQEAKICAqLwogc3RydWN0IGZjX2V4Y2hfbWdyIHsKIAllbnVtIGZjX2NsYXNzCWNsYXNzOwkJLyogZGVmYXVsdCBjbGFzcyBmb3Igc2VxdWVuY2VzICovCi0Jc3BpbmxvY2tfdAllbV9sb2NrOwkvKiBleGNoYW5nZSBtYW5hZ2VyIGxvY2ssCi0JCQkJCSAgIG11c3QgYmUgdGFrZW4gYmVmb3JlIGV4X2xvY2sgKi8KLQl1MTYJCWxhc3RfeGlkOwkvKiBsYXN0IGFsbG9jYXRlZCBleGNoYW5nZSBJRCAqLworCXN0cnVjdCBrcmVmCWtyZWY7CQkvKiBleGNoYW5nZSBtZ3IgcmVmZXJlbmNlIGNvdW50ICovCiAJdTE2CQltaW5feGlkOwkvKiBtaW4gZXhjaGFuZ2UgSUQgKi8KIAl1MTYJCW1heF94aWQ7CS8qIG1heCBleGNoYW5nZSBJRCAqLwotCXUxNgkJbWF4X3JlYWQ7CS8qIG1heCBleGNoYW5nZSBJRCBmb3IgcmVhZCAqLwotCXUxNgkJbGFzdF9yZWFkOwkvKiBsYXN0IHhpZCBhbGxvY2F0ZWQgZm9yIHJlYWQgKi8KLQl1MzIJdG90YWxfZXhjaGVzOwkJLyogdG90YWwgYWxsb2NhdGVkIGV4Y2hhbmdlcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZXhfbGlzdDsJLyogYWxsb2NhdGVkIGV4Y2hhbmdlcyBsaXN0ICovCi0Jc3RydWN0IGZjX2xwb3J0CSpscDsJCS8qIGZjIGRldmljZSBpbnN0YW5jZSAqLwogCW1lbXBvb2xfdAkqZXBfcG9vbDsJLyogcmVzZXJ2ZSBlcCdzICovCisJdTE2CQlwb29sX21heF9pbmRleDsJLyogbWF4IGV4Y2ggYXJyYXkgaW5kZXggaW4gZXhjaCBwb29sICovCisJc3RydWN0IGZjX2V4Y2hfcG9vbCAqcG9vbDsJLyogcGVyIGNwdSBleGNoIHBvb2wgKi8KIAogCS8qCiAJICogY3VycmVudGx5IGV4Y2hhbmdlIG1nciBzdGF0cyBhcmUgdXBkYXRlZCBidXQgbm90IHVzZWQuCkBAIC04MCwxMCArOTMsMTUgQEAKIAkJYXRvbWljX3Qgc2VxX25vdF9mb3VuZDsKIAkJYXRvbWljX3Qgbm9uX2Jsc19yZXNwOwogCX0gc3RhdHM7Ci0Jc3RydWN0IGZjX2V4Y2ggKipleGNoZXM7CS8qIGZvciBleGNoIHBvaW50ZXJzIGluZGV4ZWQgYnkgeGlkICovCiB9OwogI2RlZmluZQlmY19zZXFfZXhjaChzcCkgY29udGFpbmVyX29mKHNwLCBzdHJ1Y3QgZmNfZXhjaCwgc2VxKQogCitzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVtYV9saXN0OworCXN0cnVjdCBmY19leGNoX21nciAqbXA7CisJYm9vbCAoKm1hdGNoKShzdHJ1Y3QgZmNfZnJhbWUgKik7Cit9OworCiBzdGF0aWMgdm9pZCBmY19leGNoX3JycShzdHJ1Y3QgZmNfZXhjaCAqKTsKIHN0YXRpYyB2b2lkIGZjX3NlcV9sc19hY2Moc3RydWN0IGZjX3NlcSAqKTsKIHN0YXRpYyB2b2lkIGZjX3NlcV9sc19yanQoc3RydWN0IGZjX3NlcSAqLCBlbnVtIGZjX2Vsc19yanRfcmVhc29uLApAQCAtMTY3LDggKzE4NSw4IEBACiAgKiBzZXF1ZW5jZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gbXVzdCBiZSBsb2NrZWQuCiAgKiAgLSBleGNoYW5nZSByZWZjbnQgY2FuIGJlIGRvbmUgYXRvbWljbHkgd2l0aG91dCBsb2Nrcy4KICAqICAtIHNlcXVlbmNlIGFsbG9jYXRpb24gbXVzdCBiZSBsb2NrZWQgYnkgZXhjaCBsb2NrLgotICogIC0gSWYgdGhlIGVtX2xvY2sgYW5kIGV4X2xvY2sgbXVzdCBiZSB0YWtlbiBhdCB0aGUgc2FtZSB0aW1lLCB0aGVuIHRoZQotICogICAgZW1fbG9jayBtdXN0IGJlIHRha2VuIGJlZm9yZSB0aGUgZXhfbG9jay4KKyAqICAtIElmIHRoZSBFTSBwb29sIGxvY2sgYW5kIGV4X2xvY2sgbXVzdCBiZSB0YWtlbiBhdCB0aGUgc2FtZSB0aW1lLCB0aGVuIHRoZQorICogICAgRU0gcG9vbCBsb2NrIG11c3QgYmUgdGFrZW4gYmVmb3JlIHRoZSBleF9sb2NrLgogICovCiAKIC8qCkBAIC0yNjgsOCArMjg2LDYgQEAKIAkJbXAgPSBlcC0+ZW07CiAJCWlmIChlcC0+ZGVzdHJ1Y3RvcikKIAkJCWVwLT5kZXN0cnVjdG9yKCZlcC0+c2VxLCBlcC0+YXJnKTsKLQkJaWYgKGVwLT5scC0+dHQuZXhjaF9wdXQpCi0JCQllcC0+bHAtPnR0LmV4Y2hfcHV0KGVwLT5scCwgbXAsIGVwLT54aWQpOwogCQlXQVJOX09OKCEoZXAtPmVzYl9zdGF0ICYgRVNCX1NUX0NPTVBMRVRFKSk7CiAJCW1lbXBvb2xfZnJlZShlcCwgbXAtPmVwX3Bvb2wpOwogCX0KQEAgLTI5OSwxNyArMzE1LDMxIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBmY19leGNoX21ncl9kZWxldGVfZXAoc3RydWN0IGZjX2V4Y2ggKmVwKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZmNfZXhjaCAqZmNfZXhjaF9wdHJfZ2V0KHN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2wsCisJCQkJCSAgICAgIHUxNiBpbmRleCkKIHsKLQlzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wOworCXN0cnVjdCBmY19leGNoICoqZXhjaGVzID0gKHN0cnVjdCBmY19leGNoICoqKShwb29sICsgMSk7CisJcmV0dXJuIGV4Y2hlc1tpbmRleF07Cit9CiAKLQltcCA9IGVwLT5lbTsKLQlzcGluX2xvY2tfYmgoJm1wLT5lbV9sb2NrKTsKLQlXQVJOX09OKG1wLT50b3RhbF9leGNoZXMgPD0gMCk7Ci0JbXAtPnRvdGFsX2V4Y2hlcy0tOwotCW1wLT5leGNoZXNbZXAtPnhpZCAtIG1wLT5taW5feGlkXSA9IE5VTEw7CitzdGF0aWMgaW5saW5lIHZvaWQgZmNfZXhjaF9wdHJfc2V0KHN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2wsIHUxNiBpbmRleCwKKwkJCQkgICBzdHJ1Y3QgZmNfZXhjaCAqZXApCit7CisJKChzdHJ1Y3QgZmNfZXhjaCAqKikocG9vbCArIDEpKVtpbmRleF0gPSBlcDsKK30KKworc3RhdGljIHZvaWQgZmNfZXhjaF9kZWxldGUoc3RydWN0IGZjX2V4Y2ggKmVwKQoreworCXN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2w7CisKKwlwb29sID0gZXAtPnBvb2w7CisJc3Bpbl9sb2NrX2JoKCZwb29sLT5sb2NrKTsKKwlXQVJOX09OKHBvb2wtPnRvdGFsX2V4Y2hlcyA8PSAwKTsKKwlwb29sLT50b3RhbF9leGNoZXMtLTsKKwlmY19leGNoX3B0cl9zZXQocG9vbCwgKGVwLT54aWQgLSBlcC0+ZW0tPm1pbl94aWQpID4+IGZjX2NwdV9vcmRlciwKKwkJCU5VTEwpOwogCWxpc3RfZGVsKCZlcC0+ZXhfbGlzdCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG9vbC0+bG9jayk7CiAJZmNfZXhjaF9yZWxlYXNlKGVwKTsJLyogZHJvcCBob2xkIGZvciBleGNoIGluIG1wICovCiB9CiAKQEAgLTMyMiw3ICszNTIsNyBAQAogCWlmIChlcC0+c3RhdGUgJiAoRkNfRVhfUlNUX0NMRUFOVVAgfCBGQ19FWF9ET05FKSkKIAkJcmV0dXJuOwogCi0JRkNfRVhDSF9EQkcoZXAsICJFeGNoYW5nZSB0aW1lZCBvdXQsIG5vdGlmeWluZyB0aGUgdXBwZXIgbGF5ZXJcbiIpOworCUZDX0VYQ0hfREJHKGVwLCAiRXhjaGFuZ2UgdGltZXIgYXJtZWRcbiIpOwogCiAJaWYgKHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZXAtPnRpbWVvdXRfd29yaywKIAkJCQkgIG1zZWNzX3RvX2ppZmZpZXModGltZXJfbXNlYykpKQpAQCAtNDA4LDYgKzQzOCw4IEBACiAJdTMyIGVfc3RhdDsKIAlpbnQgcmMgPSAxOwogCisJRkNfRVhDSF9EQkcoZXAsICJFeGNoYW5nZSB0aW1lZCBvdXRcbiIpOworCiAJc3Bpbl9sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiAJaWYgKGVwLT5zdGF0ZSAmIChGQ19FWF9SU1RfQ0xFQU5VUCB8IEZDX0VYX0RPTkUpKQogCQlnb3RvIHVubG9jazsKQEAgLTQyNyw3ICs0NTksNyBAQAogCQkJcmMgPSBmY19leGNoX2RvbmVfbG9ja2VkKGVwKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsKIAkJaWYgKCFyYykKLQkJCWZjX2V4Y2hfbWdyX2RlbGV0ZV9lcChlcCk7CisJCQlmY19leGNoX2RlbGV0ZShlcCk7CiAJCWlmIChyZXNwKQogCQkJcmVzcChzcCwgRVJSX1BUUigtRkNfRVhfVElNRU9VVCksIGFyZyk7CiAJCWZjX3NlcV9leGNoX2Fib3J0KHNwLCAyICogZXAtPnJfYV90b3YpOwpAQCAtNDYwLDY1ICs0OTIsMjAgQEAKIAlyZXR1cm4gc3A7CiB9CiAKLS8qCi0gKiBmY19lbV9hbGxvY194aWQgLSByZXR1cm5zIGFuIHhpZCBiYXNlZCBvbiByZXF1ZXN0IHR5cGUKLSAqIEBscCA6IHB0ciB0byBhc3NvY2lhdGVkIGxwb3J0Ci0gKiBAZnAgOiBwdHIgdG8gdGhlIGFzc29jYXRlZCBmcmFtZQorLyoqCisgKiBmY19leGNoX2VtX2FsbG9jKCkgLSBhbGxvY2F0ZSBhbiBleGNoYW5nZSBmcm9tIGEgc3BlY2lmaWVkIEVNLgorICogQGxwb3J0OglwdHIgdG8gdGhlIGxvY2FsIHBvcnQKKyAqIEBtcDoJCXB0ciB0byB0aGUgZXhjaGFuZ2UgbWFuYWdlcgogICoKLSAqIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGZjX2ZzcF9wa3QgdG8gZ2V0IHNjc2kgY29tbWFuZCB0eXBlIGFuZAotICogY29tbWFuZCBkaXJlY3Rpb24gdG8gZGVjaWRlIGZyb20gd2hpY2ggcmFuZ2UgdGhpcyBleGNoIGlkCi0gKiB3aWxsIGJlIGFsbG9jYXRlZCBmcm9tLgotICoKLSAqIFJldHVybnMgOiAwIG9yIGFuIHZhbGlkIHhpZAorICogUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYXRlZCBmY19leGNoIHdpdGggZXhjaCBsb2NrIGhlbGQuCiAgKi8KLXN0YXRpYyB1MTYgZmNfZW1fYWxsb2NfeGlkKHN0cnVjdCBmY19leGNoX21nciAqbXAsIGNvbnN0IHN0cnVjdCBmY19mcmFtZSAqZnApCi17Ci0JdTE2IHhpZCwgbWluLCBtYXg7Ci0JdTE2ICpwbGFzdDsKLQlzdHJ1Y3QgZmNfZXhjaCAqZXAgPSBOVUxMOwotCi0JaWYgKG1wLT5tYXhfcmVhZCkgewotCQlpZiAoZmNfZmNwX2lzX3JlYWQoZnJfZnNwKGZwKSkpIHsKLQkJCW1pbiA9IG1wLT5taW5feGlkOwotCQkJbWF4ID0gbXAtPm1heF9yZWFkOwotCQkJcGxhc3QgPSAmbXAtPmxhc3RfcmVhZDsKLQkJfSBlbHNlIHsKLQkJCW1pbiA9IG1wLT5tYXhfcmVhZCArIDE7Ci0JCQltYXggPSBtcC0+bWF4X3hpZDsKLQkJCXBsYXN0ID0gJm1wLT5sYXN0X3hpZDsKLQkJfQotCX0gZWxzZSB7Ci0JCW1pbiA9IG1wLT5taW5feGlkOwotCQltYXggPSBtcC0+bWF4X3hpZDsKLQkJcGxhc3QgPSAmbXAtPmxhc3RfeGlkOwotCX0KLQl4aWQgPSAqcGxhc3Q7Ci0JZG8gewotCQl4aWQgPSAoeGlkID09IG1heCkgPyBtaW4gOiB4aWQgKyAxOwotCQllcCA9IG1wLT5leGNoZXNbeGlkIC0gbXAtPm1pbl94aWRdOwotCX0gd2hpbGUgKChlcCAhPSBOVUxMKSAmJiAoeGlkICE9ICpwbGFzdCkpOwotCi0JaWYgKHVubGlrZWx5KGVwKSkKLQkJeGlkID0gMDsKLQllbHNlCi0JCSpwbGFzdCA9IHhpZDsKLQotCXJldHVybiB4aWQ7Ci19Ci0KLS8qCi0gKiBmY19leGNoX2FsbG9jIC0gYWxsb2NhdGUgYW4gZXhjaGFuZ2UuCi0gKiBAbXAgOiBwdHIgdG8gdGhlIGV4Y2hhbmdlIG1hbmFnZXIKLSAqIEB4aWQ6IGlucHV0IHhpZAotICoKLSAqIGlmIHhpZCBpcyBzdXBwbGllZCB6ZXJvIHRoZW4gYXNzaWduIG5leHQgZnJlZSBleGNoYW5nZSBJRAotICogZnJvbSBleGNoYW5nZSBtYW5hZ2VyLCBvdGhlcndpc2UgdXNlIHN1cHBsaWVkIHhpZC4KLSAqIFJldHVybnMgd2l0aCBleGNoIGxvY2sgaGVsZC4KLSAqLwotc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfYWxsb2Moc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKLQkJCSAgICAgIHN0cnVjdCBmY19mcmFtZSAqZnAsIHUxNiB4aWQpCitzdGF0aWMgc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfZW1fYWxsb2Moc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkJc3RydWN0IGZjX2V4Y2hfbWdyICptcCkKIHsKIAlzdHJ1Y3QgZmNfZXhjaCAqZXA7CisJdW5zaWduZWQgaW50IGNwdTsKKwl1MTYgaW5kZXg7CisJc3RydWN0IGZjX2V4Y2hfcG9vbCAqcG9vbDsKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgZXhjaGFuZ2UgKi8KIAllcCA9IG1lbXBvb2xfYWxsb2MobXAtPmVwX3Bvb2wsIEdGUF9BVE9NSUMpOwpAQCAtNTI4LDE2ICs1MTUsMTcgQEAKIAl9CiAJbWVtc2V0KGVwLCAwLCBzaXplb2YoKmVwKSk7CiAKLQlzcGluX2xvY2tfYmgoJm1wLT5lbV9sb2NrKTsKLQkvKiBhbGxvYyB4aWQgaWYgaW5wdXQgeGlkIDAgKi8KLQlpZiAoIXhpZCkgewotCQkvKiBhbGxvYyBhIG5ldyB4aWQgKi8KLQkJeGlkID0gZmNfZW1fYWxsb2NfeGlkKG1wLCBmcCk7Ci0JCWlmICgheGlkKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJsaWJmYzogRmFpbGVkIHRvIGFsbG9jYXRlIGFuIGV4aGFuZ2VcbiIpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlwb29sID0gcGVyX2NwdV9wdHIobXAtPnBvb2wsIGNwdSk7CisJc3Bpbl9sb2NrX2JoKCZwb29sLT5sb2NrKTsKKwlpbmRleCA9IHBvb2wtPm5leHRfaW5kZXg7CisJLyogYWxsb2NhdGUgbmV3IGV4Y2ggZnJvbSBwb29sICovCisJd2hpbGUgKGZjX2V4Y2hfcHRyX2dldChwb29sLCBpbmRleCkpIHsKKwkJaW5kZXggPSBpbmRleCA9PSBtcC0+cG9vbF9tYXhfaW5kZXggPyAwIDogaW5kZXggKyAxOworCQlpZiAoaW5kZXggPT0gcG9vbC0+bmV4dF9pbmRleCkKIAkJCWdvdG8gZXJyOwotCQl9CiAJfQorCXBvb2wtPm5leHRfaW5kZXggPSBpbmRleCA9PSBtcC0+cG9vbF9tYXhfaW5kZXggPyAwIDogaW5kZXggKyAxOwogCiAJZmNfZXhjaF9ob2xkKGVwKTsJLyogaG9sZCBmb3IgZXhjaCBpbiBtcCAqLwogCXNwaW5fbG9ja19pbml0KCZlcC0+ZXhfbG9jayk7CkBAIC01NDgsMTggKzUzNiwxOSBAQAogCSAqLwogCXNwaW5fbG9ja19iaCgmZXAtPmV4X2xvY2spOwogCi0JbXAtPmV4Y2hlc1t4aWQgLSBtcC0+bWluX3hpZF0gPSBlcDsKLQlsaXN0X2FkZF90YWlsKCZlcC0+ZXhfbGlzdCwgJm1wLT5leF9saXN0KTsKKwlmY19leGNoX3B0cl9zZXQocG9vbCwgaW5kZXgsIGVwKTsKKwlsaXN0X2FkZF90YWlsKCZlcC0+ZXhfbGlzdCwgJnBvb2wtPmV4X2xpc3QpOwogCWZjX3NlcV9hbGxvYyhlcCwgZXAtPnNlcV9pZCsrKTsKLQltcC0+dG90YWxfZXhjaGVzKys7Ci0Jc3Bpbl91bmxvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwlwb29sLT50b3RhbF9leGNoZXMrKzsKKwlzcGluX3VubG9ja19iaCgmcG9vbC0+bG9jayk7CiAKIAkvKgogCSAqICB1cGRhdGUgZXhjaGFuZ2UKIAkgKi8KLQllcC0+b3hpZCA9IGVwLT54aWQgPSB4aWQ7CisJZXAtPm94aWQgPSBlcC0+eGlkID0gKGluZGV4IDw8IGZjX2NwdV9vcmRlciB8IGNwdSkgKyBtcC0+bWluX3hpZDsKIAllcC0+ZW0gPSBtcDsKLQllcC0+bHAgPSBtcC0+bHA7CisJZXAtPnBvb2wgPSBwb29sOworCWVwLT5scCA9IGxwb3J0OwogCWVwLT5mX2N0bCA9IEZDX0ZDX0ZJUlNUX1NFUTsJLyogbmV4dCBzZXEgaXMgZmlyc3Qgc2VxICovCiAJZXAtPnJ4aWQgPSBGQ19YSURfVU5LTk9XTjsKIAllcC0+Y2xhc3MgPSBtcC0+Y2xhc3M7CkBAIC01NjcsMTEgKzU1NiwzNiBAQAogb3V0OgogCXJldHVybiBlcDsKIGVycjoKLQlzcGluX3VubG9ja19iaCgmbXAtPmVtX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5sb2NrKTsKIAlhdG9taWNfaW5jKCZtcC0+c3RhdHMubm9fZnJlZV9leGNoX3hpZCk7CiAJbWVtcG9vbF9mcmVlKGVwLCBtcC0+ZXBfcG9vbCk7CiAJcmV0dXJuIE5VTEw7CiB9CisKKy8qKgorICogZmNfZXhjaF9hbGxvYygpIC0gYWxsb2NhdGUgYW4gZXhjaGFuZ2UuCisgKiBAbHBvcnQ6CXB0ciB0byB0aGUgbG9jYWwgcG9ydAorICogQGZwOgkJcHRyIHRvIHRoZSBGQyBmcmFtZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIGxpc3Qgb2YgdGhlIGV4Y2hhbmdlIG1hbmFnZXIoRU0pCisgKiBhbmNob3JzIHRvIHNlbGVjdCBhIEVNIGZvciBuZXcgZXhjaGFuZ2UgYWxsb2NhdGlvbi4gVGhlCisgKiBFTSBpcyBzZWxlY3RlZCBoYXZpbmcgZWl0aGVyIGEgTlVMTCBtYXRjaCBmdW5jdGlvbiBwb2ludGVyCisgKiBvciBjYWxsIHRvIG1hdGNoIGZ1bmN0aW9uIHJldHVybmluZyB0cnVlLgorICovCitzdHJ1Y3QgZmNfZXhjaCAqZmNfZXhjaF9hbGxvYyhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYTsKKwlzdHJ1Y3QgZmNfZXhjaCAqZXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVtYSwgJmxwb3J0LT5lbWFfbGlzdCwgZW1hX2xpc3QpIHsKKwkJaWYgKCFlbWEtPm1hdGNoIHx8IGVtYS0+bWF0Y2goZnApKSB7CisJCQllcCA9IGZjX2V4Y2hfZW1fYWxsb2MobHBvcnQsIGVtYS0+bXApOworCQkJaWYgKGVwKQorCQkJCXJldHVybiBlcDsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KIEVYUE9SVF9TWU1CT0woZmNfZXhjaF9hbGxvYyk7CiAKIC8qCkBAIC01NzksMTYgKzU5MywxOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfZmluZChzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLCB1MTYgeGlkKQogeworCXN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2w7CiAJc3RydWN0IGZjX2V4Y2ggKmVwID0gTlVMTDsKIAogCWlmICgoeGlkID49IG1wLT5taW5feGlkKSAmJiAoeGlkIDw9IG1wLT5tYXhfeGlkKSkgewotCQlzcGluX2xvY2tfYmgoJm1wLT5lbV9sb2NrKTsKLQkJZXAgPSBtcC0+ZXhjaGVzW3hpZCAtIG1wLT5taW5feGlkXTsKKwkJcG9vbCA9IHBlcl9jcHVfcHRyKG1wLT5wb29sLCB4aWQgJiBmY19jcHVfbWFzayk7CisJCXNwaW5fbG9ja19iaCgmcG9vbC0+bG9jayk7CisJCWVwID0gZmNfZXhjaF9wdHJfZ2V0KHBvb2wsICh4aWQgLSBtcC0+bWluX3hpZCkgPj4gZmNfY3B1X29yZGVyKTsKIAkJaWYgKGVwKSB7CiAJCQlmY19leGNoX2hvbGQoZXApOwogCQkJV0FSTl9PTihlcC0+eGlkICE9IHhpZCk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBvb2wtPmxvY2spOwogCX0KIAlyZXR1cm4gZXA7CiB9CkBAIC02MDIsNyArNjE4LDcgQEAKIAlyYyA9IGZjX2V4Y2hfZG9uZV9sb2NrZWQoZXApOwogCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiAJaWYgKCFyYykKLQkJZmNfZXhjaF9tZ3JfZGVsZXRlX2VwKGVwKTsKKwkJZmNfZXhjaF9kZWxldGUoZXApOwogfQogRVhQT1JUX1NZTUJPTChmY19leGNoX2RvbmUpOwogCkBAIC02MTAsMTIgKzYyNiwxNCBAQAogICogQWxsb2NhdGUgYSBuZXcgZXhjaGFuZ2UgYXMgcmVzcG9uZGVyLgogICogU2V0cyB0aGUgcmVzcG9uZGVyIElEIGluIHRoZSBmcmFtZSBoZWFkZXIuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmNfZXhjaCAqZmNfZXhjaF9yZXNwKHN0cnVjdCBmY19leGNoX21nciAqbXAsIHN0cnVjdCBmY19mcmFtZSAqZnApCitzdGF0aWMgc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfcmVzcChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAorCQkJCSAgICBzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLAorCQkJCSAgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19leGNoICplcDsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAotCWVwID0gbXAtPmxwLT50dC5leGNoX2dldChtcC0+bHAsIGZwKTsKKwllcCA9IGZjX2V4Y2hfYWxsb2MobHBvcnQsIGZwKTsKIAlpZiAoZXApIHsKIAkJZXAtPmNsYXNzID0gZmNfZnJhbWVfY2xhc3MoZnApOwogCkBAIC02NDEsNyArNjU5LDcgQEAKIAkJCWVwLT5lc2Jfc3RhdCAmPSB+RVNCX1NUX1NFUV9JTklUOwogCiAJCWZjX2V4Y2hfaG9sZChlcCk7CS8qIGhvbGQgZm9yIGNhbGxlciAqLwotCQlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwkvKiBsb2NrIGZyb20gZXhjaF9nZXQgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsJLyogbG9jayBmcm9tIGZjX2V4Y2hfYWxsb2MgKi8KIAl9CiAJcmV0dXJuIGVwOwogfQpAQCAtNjUxLDcgKzY2OSw4IEBACiAgKiBJZiBmY19wZl9yanRfcmVhc29uIGlzIEZDX1JKVF9OT05FIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgYSBob2xkCiAgKiBvbiB0aGUgZXAgdGhhdCBzaG91bGQgYmUgcmVsZWFzZWQgYnkgdGhlIGNhbGxlci4KICAqLwotc3RhdGljIGVudW0gZmNfcGZfcmp0X3JlYXNvbiBmY19zZXFfbG9va3VwX3JlY2lwKHN0cnVjdCBmY19leGNoX21nciAqbXAsCitzdGF0aWMgZW51bSBmY19wZl9yanRfcmVhc29uIGZjX3NlcV9sb29rdXBfcmVjaXAoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkJCSBzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLAogCQkJCQkJIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKQEAgLTcwNSw3ICs3MjQsNyBAQAogCQkJCXJlamVjdCA9IEZDX1JKVF9SWF9JRDsKIAkJCQlnb3RvIHJlbDsKIAkJCX0KLQkJCWVwID0gZmNfZXhjaF9yZXNwKG1wLCBmcCk7CisJCQllcCA9IGZjX2V4Y2hfcmVzcChscG9ydCwgbXAsIGZwKTsKIAkJCWlmICghZXApIHsKIAkJCQlyZWplY3QgPSBGQ19SSlRfRVhDSF9FU1Q7CS8qIFhYWCAqLwogCQkJCWdvdG8gb3V0OwpAQCAtODIyLDcgKzg0MSw2IEBACiAJc3RydWN0IGZjX2V4Y2ggKmVwID0gZmNfc2VxX2V4Y2goc3ApOwogCiAJc3Bpbl9sb2NrX2JoKCZlcC0+ZXhfbG9jayk7Ci0JV0FSTl9PTigoZXAtPmVzYl9zdGF0ICYgRVNCX1NUX0NPTVBMRVRFKSAhPSAwKTsKIAlzcCA9IGZjX3NlcV9zdGFydF9uZXh0X2xvY2tlZChzcCk7CiAJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsKIApAQCAtOTk5LDggKzEwMTcsOCBAQAogCSAqLwogCW1lbWNweShmaC0+Zmhfc19pZCwgcnhfZmgtPmZoX2RfaWQsIDMpOwogCW1lbWNweShmaC0+ZmhfZF9pZCwgcnhfZmgtPmZoX3NfaWQsIDMpOwotCWZoLT5maF9veF9pZCA9IHJ4X2ZoLT5maF9yeF9pZDsKLQlmaC0+ZmhfcnhfaWQgPSByeF9maC0+Zmhfb3hfaWQ7CisJZmgtPmZoX294X2lkID0gcnhfZmgtPmZoX294X2lkOworCWZoLT5maF9yeF9pZCA9IHJ4X2ZoLT5maF9yeF9pZDsKIAlmaC0+Zmhfc2VxX2NudCA9IHJ4X2ZoLT5maF9zZXFfY250OwogCWZoLT5maF9yX2N0bCA9IEZDX1JDVExfQkFfUkpUOwogCWZoLT5maF90eXBlID0gRkNfVFlQRV9CTFM7CkBAIC0xMDk3LDcgKzExMTUsNyBAQAogCWVudW0gZmNfcGZfcmp0X3JlYXNvbiByZWplY3Q7CiAKIAlmcl9zZXEoZnApID0gTlVMTDsKLQlyZWplY3QgPSBmY19zZXFfbG9va3VwX3JlY2lwKG1wLCBmcCk7CisJcmVqZWN0ID0gZmNfc2VxX2xvb2t1cF9yZWNpcChscCwgbXAsIGZwKTsKIAlpZiAocmVqZWN0ID09IEZDX1JKVF9OT05FKSB7CiAJCXNwID0gZnJfc2VxKGZwKTsJLyogc2VxdWVuY2Ugd2lsbCBiZSBoZWxkICovCiAJCWVwID0gZmNfc2VxX2V4Y2goc3ApOwpAQCAtMTEyMyw3ICsxMTQxLDcgQEAKIAkJCWxwLT50dC5scG9ydF9yZWN2KGxwLCBzcCwgZnApOwogCQlmY19leGNoX3JlbGVhc2UoZXApOwkvKiByZWxlYXNlIGZyb20gbG9va3VwICovCiAJfSBlbHNlIHsKLQkJRkNfRU1fREJHKG1wLCAiZXhjaC9zZXEgbG9va3VwIGZhaWxlZDogcmVqZWN0ICV4XG4iLCByZWplY3QpOworCQlGQ19MUE9SVF9EQkcobHAsICJleGNoL3NlcSBsb29rdXAgZmFpbGVkOiByZWplY3QgJXhcbiIsIHJlamVjdCk7CiAJCWZjX2ZyYW1lX2ZyZWUoZnApOwogCX0KIH0KQEAgLTExOTMsNyArMTIxMSw3IEBACiAJCVdBUk5fT04oZmNfc2VxX2V4Y2goc3ApICE9IGVwKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmVwLT5leF9sb2NrKTsKIAkJaWYgKCFyYykKLQkJCWZjX2V4Y2hfbWdyX2RlbGV0ZV9lcChlcCk7CisJCQlmY19leGNoX2RlbGV0ZShlcCk7CiAJfQogCiAJLyoKQEAgLTEyMjksMTMgKzEyNDcsMTIgQEAKIAlzdHJ1Y3QgZmNfc2VxICpzcDsKIAogCXNwID0gZmNfc2VxX2xvb2t1cF9vcmlnKG1wLCBmcCk7CS8qIGRvZXNuJ3QgaG9sZCBzZXF1ZW5jZSAqLwotCWlmICghc3ApIHsKKworCWlmICghc3ApCiAJCWF0b21pY19pbmMoJm1wLT5zdGF0cy54aWRfbm90X2ZvdW5kKTsKLQkJRkNfRU1fREJHKG1wLCAic2VxIGxvb2t1cCBmYWlsZWRcbiIpOwotCX0gZWxzZSB7CisJZWxzZQogCQlhdG9taWNfaW5jKCZtcC0+c3RhdHMubm9uX2Jsc19yZXNwKTsKLQkJRkNfRU1fREJHKG1wLCAibm9uLUJMUyByZXNwb25zZSB0byBzZXF1ZW5jZSIpOwotCX0KKwogCWZjX2ZyYW1lX2ZyZWUoZnApOwogfQogCkBAIC0xMzA0LDcgKzEzMjEsNyBAQAogCQlyYyA9IGZjX2V4Y2hfZG9uZV9sb2NrZWQoZXApOwogCXNwaW5fdW5sb2NrX2JoKCZlcC0+ZXhfbG9jayk7CiAJaWYgKCFyYykKLQkJZmNfZXhjaF9tZ3JfZGVsZXRlX2VwKGVwKTsKKwkJZmNfZXhjaF9kZWxldGUoZXApOwogCiAJaWYgKHJlc3ApCiAJCXJlc3Aoc3AsIGZwLCBleF9yZXNwX2FyZyk7CkBAIC0xNDQ3LDQ0ICsxNDY0LDc3IEBACiAJcmMgPSBmY19leGNoX2RvbmVfbG9ja2VkKGVwKTsKIAlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwogCWlmICghcmMpCi0JCWZjX2V4Y2hfbWdyX2RlbGV0ZV9lcChlcCk7CisJCWZjX2V4Y2hfZGVsZXRlKGVwKTsKIAogCWlmIChyZXNwKQogCQlyZXNwKHNwLCBFUlJfUFRSKC1GQ19FWF9DTE9TRUQpLCBhcmcpOwogfQogCi0vKgotICogUmVzZXQgYW4gZXhjaGFuZ2UgbWFuYWdlciwgcmVsZWFzaW5nIGFsbCBzZXF1ZW5jZXMgYW5kIGV4Y2hhbmdlcy4KLSAqIElmIHNpZCBpcyBub24temVybywgcmVzZXQgb25seSBleGNoYW5nZXMgd2Ugc291cmNlIGZyb20gdGhhdCBGSUQuCi0gKiBJZiBkaWQgaXMgbm9uLXplcm8sIHJlc2V0IG9ubHkgZXhjaGFuZ2VzIGRlc3RpbmVkIHRvIHRoYXQgRklELgorLyoqCisgKiBmY19leGNoX3Bvb2xfcmVzZXQoKSAtIFJlc2V0cyBhbiBwZXIgY3B1IGV4Y2hlcyBwb29sLgorICogQGxwb3J0OglwdHIgdG8gdGhlIGxvY2FsIHBvcnQKKyAqIEBwb29sOglwdHIgdG8gdGhlIHBlciBjcHUgZXhjaGVzIHBvb2wKKyAqIEBzaWQ6CXNvdXJjZSBGQyBJRAorICogQGRpZDoJZGVzdGluYXRpb24gRkMgSUQKKyAqCisgKiBSZXNldHMgYW4gcGVyIGNwdSBleGNoZXMgcG9vbCwgcmVsZWFzaW5nIGl0cyBhbGwgc2VxdWVuY2VzCisgKiBhbmQgZXhjaGFuZ2VzLiBJZiBzaWQgaXMgbm9uLXplcm8sIHRoZW4gcmVzZXQgb25seSBleGNoYW5nZXMKKyAqIHdlIHNvdXJjZWQgZnJvbSB0aGF0IEZJRC4gSWYgZGlkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5CisgKiBleGNoYW5nZXMgZGVzdGluZWQgdG8gdGhhdCBGSUQuCiAgKi8KLXZvaWQgZmNfZXhjaF9tZ3JfcmVzZXQoc3RydWN0IGZjX2xwb3J0ICpscCwgdTMyIHNpZCwgdTMyIGRpZCkKK3N0YXRpYyB2b2lkIGZjX2V4Y2hfcG9vbF9yZXNldChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAorCQkJICAgICAgIHN0cnVjdCBmY19leGNoX3Bvb2wgKnBvb2wsCisJCQkgICAgICAgdTMyIHNpZCwgdTMyIGRpZCkKIHsKIAlzdHJ1Y3QgZmNfZXhjaCAqZXA7CiAJc3RydWN0IGZjX2V4Y2ggKm5leHQ7Ci0Jc3RydWN0IGZjX2V4Y2hfbWdyICptcCA9IGxwLT5lbXA7CiAKLQlzcGluX2xvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBvb2wtPmxvY2spOwogcmVzdGFydDoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXAsIG5leHQsICZtcC0+ZXhfbGlzdCwgZXhfbGlzdCkgewotCQlpZiAoKHNpZCA9PSAwIHx8IHNpZCA9PSBlcC0+c2lkKSAmJgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcCwgbmV4dCwgJnBvb2wtPmV4X2xpc3QsIGV4X2xpc3QpIHsKKwkJaWYgKChscG9ydCA9PSBlcC0+bHApICYmCisJCSAgICAoc2lkID09IDAgfHwgc2lkID09IGVwLT5zaWQpICYmCiAJCSAgICAoZGlkID09IDAgfHwgZGlkID09IGVwLT5kaWQpKSB7CiAJCQlmY19leGNoX2hvbGQoZXApOwotCQkJc3Bpbl91bmxvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5sb2NrKTsKIAogCQkJZmNfZXhjaF9yZXNldChlcCk7CiAKIAkJCWZjX2V4Y2hfcmVsZWFzZShlcCk7Ci0JCQlzcGluX2xvY2tfYmgoJm1wLT5lbV9sb2NrKTsKKwkJCXNwaW5fbG9ja19iaCgmcG9vbC0+bG9jayk7CiAKIAkJCS8qCi0JCQkgKiBtdXN0IHJlc3RhcnQgbG9vcCBpbmNhc2Ugd2hpbGUgbG9jayB3YXMgZG93bgotCQkJICogbXVsdGlwbGUgZXBzIHdlcmUgcmVsZWFzZWQuCisJCQkgKiBtdXN0IHJlc3RhcnQgbG9vcCBpbmNhc2Ugd2hpbGUgbG9jaworCQkJICogd2FzIGRvd24gbXVsdGlwbGUgZXBzIHdlcmUgcmVsZWFzZWQuCiAJCQkgKi8KIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19iaCgmbXAtPmVtX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5sb2NrKTsKK30KKworLyoqCisgKiBmY19leGNoX21ncl9yZXNldCgpIC0gUmVzZXRzIGFsbCBFTXMgb2YgYSBscG9ydAorICogQGxwb3J0OglwdHIgdG8gdGhlIGxvY2FsIHBvcnQKKyAqIEBzaWQ6CXNvdXJjZSBGQyBJRAorICogQGRpZDoJZGVzdGluYXRpb24gRkMgSUQKKyAqCisgKiBSZXNldCBhbGwgRU1zIG9mIGEgbHBvcnQsIHJlbGVhc2luZyBpdHMgYWxsIHNlcXVlbmNlcyBhbmQKKyAqIGV4Y2hhbmdlcy4gSWYgc2lkIGlzIG5vbi16ZXJvLCB0aGVuIHJlc2V0IG9ubHkgZXhjaGFuZ2VzCisgKiB3ZSBzb3VyY2VkIGZyb20gdGhhdCBGSUQuIElmIGRpZCBpcyBub24temVybywgcmVzZXQgb25seQorICogZXhjaGFuZ2VzIGRlc3RpbmVkIHRvIHRoYXQgRklELgorICovCit2b2lkIGZjX2V4Y2hfbWdyX3Jlc2V0KHN0cnVjdCBmY19scG9ydCAqbHBvcnQsIHUzMiBzaWQsIHUzMiBkaWQpCit7CisJc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciAqZW1hOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVtYSwgJmxwb3J0LT5lbWFfbGlzdCwgZW1hX2xpc3QpIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJCWZjX2V4Y2hfcG9vbF9yZXNldChscG9ydCwKKwkJCQkJICAgcGVyX2NwdV9wdHIoZW1hLT5tcC0+cG9vbCwgY3B1KSwKKwkJCQkJICAgc2lkLCBkaWQpOworCX0KIH0KIEVYUE9SVF9TWU1CT0woZmNfZXhjaF9tZ3JfcmVzZXQpOwogCkBAIC0xNzMwLDg1ICsxNzgwLDEyOSBAQAogCWZjX2ZyYW1lX2ZyZWUoZnApOwogfQogCitzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yICpmY19leGNoX21ncl9hZGQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkJICAgc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKKwkJCQkJICAgYm9vbCAoKm1hdGNoKShzdHJ1Y3QgZmNfZnJhbWUgKikpCit7CisJc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciAqZW1hOworCisJZW1hID0ga21hbGxvYyhzaXplb2YoKmVtYSksIEdGUF9BVE9NSUMpOworCWlmICghZW1hKQorCQlyZXR1cm4gZW1hOworCisJZW1hLT5tcCA9IG1wOworCWVtYS0+bWF0Y2ggPSBtYXRjaDsKKwkvKiBhZGQgRU0gYW5jaG9yIHRvIEVNIGFuY2hvcnMgbGlzdCAqLworCWxpc3RfYWRkX3RhaWwoJmVtYS0+ZW1hX2xpc3QsICZscG9ydC0+ZW1hX2xpc3QpOworCWtyZWZfZ2V0KCZtcC0+a3JlZik7CisJcmV0dXJuIGVtYTsKK30KK0VYUE9SVF9TWU1CT0woZmNfZXhjaF9tZ3JfYWRkKTsKKworc3RhdGljIHZvaWQgZmNfZXhjaF9tZ3JfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBmY19leGNoX21nciwga3JlZik7CisKKwltZW1wb29sX2Rlc3Ryb3kobXAtPmVwX3Bvb2wpOworCWZyZWVfcGVyY3B1KG1wLT5wb29sKTsKKwlrZnJlZShtcCk7Cit9CisKK3ZvaWQgZmNfZXhjaF9tZ3JfZGVsKHN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYSkKK3sKKwkvKiByZW1vdmUgRU0gYW5jaG9yIGZyb20gRU0gYW5jaG9ycyBsaXN0ICovCisJbGlzdF9kZWwoJmVtYS0+ZW1hX2xpc3QpOworCWtyZWZfcHV0KCZlbWEtPm1wLT5rcmVmLCBmY19leGNoX21ncl9kZXN0cm95KTsKKwlrZnJlZShlbWEpOworfQorRVhQT1JUX1NZTUJPTChmY19leGNoX21ncl9kZWwpOworCiBzdHJ1Y3QgZmNfZXhjaF9tZ3IgKmZjX2V4Y2hfbWdyX2FsbG9jKHN0cnVjdCBmY19scG9ydCAqbHAsCiAJCQkJICAgICAgZW51bSBmY19jbGFzcyBjbGFzcywKLQkJCQkgICAgICB1MTYgbWluX3hpZCwgdTE2IG1heF94aWQpCisJCQkJICAgICAgdTE2IG1pbl94aWQsIHUxNiBtYXhfeGlkLAorCQkJCSAgICAgIGJvb2wgKCptYXRjaCkoc3RydWN0IGZjX2ZyYW1lICopKQogewogCXN0cnVjdCBmY19leGNoX21nciAqbXA7Ci0Jc2l6ZV90IGxlbjsKKwl1MTYgcG9vbF9leGNoX3JhbmdlOworCXNpemVfdCBwb29sX3NpemU7CisJdW5zaWduZWQgaW50IGNwdTsKKwlzdHJ1Y3QgZmNfZXhjaF9wb29sICpwb29sOwogCi0JaWYgKG1heF94aWQgPD0gbWluX3hpZCB8fCBtaW5feGlkID09IDAgfHwgbWF4X3hpZCA9PSBGQ19YSURfVU5LTk9XTikgeworCWlmIChtYXhfeGlkIDw9IG1pbl94aWQgfHwgbWF4X3hpZCA9PSBGQ19YSURfVU5LTk9XTiB8fAorCSAgICAobWluX3hpZCAmIGZjX2NwdV9tYXNrKSAhPSAwKSB7CiAJCUZDX0xQT1JUX0RCRyhscCwgIkludmFsaWQgbWluX3hpZCAweDoleCBhbmQgbWF4X3hpZCAweDoleFxuIiwKIAkJCSAgICAgbWluX3hpZCwgbWF4X3hpZCk7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCS8qCi0JICogTWVtb3J5IG5lZWQgZm9yIEVNCisJICogYWxsb2NhdGUgbWVtb3J5IGZvciBFTQogCSAqLwotI2RlZmluZSB4aWRfb2soaSwgbTEsIG0yKSAoKChpKSA+PSAobTEpKSAmJiAoKGkpIDw9IChtMikpKQotCWxlbiA9IChtYXhfeGlkIC0gbWluX3hpZCArIDEpICogKHNpemVvZihzdHJ1Y3QgZmNfZXhjaCAqKSk7Ci0JbGVuICs9IHNpemVvZihzdHJ1Y3QgZmNfZXhjaF9tZ3IpOwotCi0JbXAgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CisJbXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZmNfZXhjaF9tZ3IpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW1wKQogCQlyZXR1cm4gTlVMTDsKIAogCW1wLT5jbGFzcyA9IGNsYXNzOwotCW1wLT50b3RhbF9leGNoZXMgPSAwOwotCW1wLT5leGNoZXMgPSAoc3RydWN0IGZjX2V4Y2ggKiopKG1wICsgMSk7Ci0JbXAtPmxwID0gbHA7CiAJLyogYWRqdXN0IGVtIGV4Y2ggeGlkIHJhbmdlIGZvciBvZmZsb2FkICovCiAJbXAtPm1pbl94aWQgPSBtaW5feGlkOwogCW1wLT5tYXhfeGlkID0gbWF4X3hpZDsKLQltcC0+bGFzdF94aWQgPSBtaW5feGlkIC0gMTsKLQltcC0+bWF4X3JlYWQgPSAwOwotCW1wLT5sYXN0X3JlYWQgPSAwOwotCWlmIChscC0+bHJvX2VuYWJsZWQgJiYgeGlkX29rKGxwLT5scm9feGlkLCBtaW5feGlkLCBtYXhfeGlkKSkgewotCQltcC0+bWF4X3JlYWQgPSBscC0+bHJvX3hpZDsKLQkJbXAtPmxhc3RfcmVhZCA9IG1pbl94aWQgLSAxOwotCQltcC0+bGFzdF94aWQgPSBtcC0+bWF4X3JlYWQ7Ci0JfSBlbHNlIHsKLQkJLyogZGlzYWJsZSBscm8gaWYgbm8geGlkIGNvbnRyb2wgb3ZlciByZWFkICovCi0JCWxwLT5scm9fZW5hYmxlZCA9IDA7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJm1wLT5leF9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmbXAtPmVtX2xvY2spOwogCiAJbXAtPmVwX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMiwgZmNfZW1fY2FjaGVwKTsKIAlpZiAoIW1wLT5lcF9wb29sKQogCQlnb3RvIGZyZWVfbXA7CiAKKwkvKgorCSAqIFNldHVwIHBlciBjcHUgZXhjaCBwb29sIHdpdGggZW50aXJlIGV4Y2hhbmdlIGlkIHJhbmdlIGVxdWFsbHkKKwkgKiBkaXZpZGVkIGFjcm9zcyBhbGwgY3B1cy4gVGhlIGV4Y2ggcG9pbnRlcnMgYXJyYXkgbWVtb3J5IGlzCisJICogYWxsb2NhdGVkIGZvciBleGNoIHJhbmdlIHBlciBwb29sLgorCSAqLworCXBvb2xfZXhjaF9yYW5nZSA9IChtcC0+bWF4X3hpZCAtIG1wLT5taW5feGlkICsgMSkgLyAoZmNfY3B1X21hc2sgKyAxKTsKKwltcC0+cG9vbF9tYXhfaW5kZXggPSBwb29sX2V4Y2hfcmFuZ2UgLSAxOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBwZXIgY3B1IGV4Y2ggcG9vbAorCSAqLworCXBvb2xfc2l6ZSA9IHNpemVvZigqcG9vbCkgKyBwb29sX2V4Y2hfcmFuZ2UgKiBzaXplb2Yoc3RydWN0IGZjX2V4Y2ggKik7CisJbXAtPnBvb2wgPSBfX2FsbG9jX3BlcmNwdShwb29sX3NpemUsIF9fYWxpZ25vZl9fKHN0cnVjdCBmY19leGNoX3Bvb2wpKTsKKwlpZiAoIW1wLT5wb29sKQorCQlnb3RvIGZyZWVfbWVtcG9vbDsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXBvb2wgPSBwZXJfY3B1X3B0cihtcC0+cG9vbCwgY3B1KTsKKwkJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxvY2spOworCQlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZXhfbGlzdCk7CisJfQorCisJa3JlZl9pbml0KCZtcC0+a3JlZik7CisJaWYgKCFmY19leGNoX21ncl9hZGQobHAsIG1wLCBtYXRjaCkpIHsKKwkJZnJlZV9wZXJjcHUobXAtPnBvb2wpOworCQlnb3RvIGZyZWVfbWVtcG9vbDsKKwl9CisKKwkvKgorCSAqIEFib3ZlIGtyZWZfaW5pdCgpIHNldHMgbXAtPmtyZWYgdG8gMSBhbmQgdGhlbgorCSAqIGNhbGwgdG8gZmNfZXhjaF9tZ3JfYWRkIGluY3JlbWVudGVkIG1wLT5rcmVmIGFnYWluLAorCSAqIHNvIGFkanVzdCB0aGF0IGV4dHJhIGluY3JlbWVudC4KKwkgKi8KKwlrcmVmX3B1dCgmbXAtPmtyZWYsIGZjX2V4Y2hfbWdyX2Rlc3Ryb3kpOwogCXJldHVybiBtcDsKIAorZnJlZV9tZW1wb29sOgorCW1lbXBvb2xfZGVzdHJveShtcC0+ZXBfcG9vbCk7CiBmcmVlX21wOgogCWtmcmVlKG1wKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woZmNfZXhjaF9tZ3JfYWxsb2MpOwogCi12b2lkIGZjX2V4Y2hfbWdyX2ZyZWUoc3RydWN0IGZjX2V4Y2hfbWdyICptcCkKK3ZvaWQgZmNfZXhjaF9tZ3JfZnJlZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQogewotCVdBUk5fT04oIW1wKTsKLQkvKgotCSAqIFRoZSB0b3RhbCBleGNoIGNvdW50IG11c3QgYmUgemVybwotCSAqIGJlZm9yZSBmcmVlaW5nIGV4Y2hhbmdlIG1hbmFnZXIuCi0JICovCi0JV0FSTl9PTihtcC0+dG90YWxfZXhjaGVzICE9IDApOwotCW1lbXBvb2xfZGVzdHJveShtcC0+ZXBfcG9vbCk7Ci0Ja2ZyZWUobXApOworCXN0cnVjdCBmY19leGNoX21ncl9hbmNob3IgKmVtYSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW1hLCBuZXh0LCAmbHBvcnQtPmVtYV9saXN0LCBlbWFfbGlzdCkKKwkJZmNfZXhjaF9tZ3JfZGVsKGVtYSk7CiB9CiBFWFBPUlRfU1lNQk9MKGZjX2V4Y2hfbWdyX2ZyZWUpOwogCi1zdHJ1Y3QgZmNfZXhjaCAqZmNfZXhjaF9nZXQoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKLXsKLQlpZiAoIWxwIHx8ICFscC0+ZW1wKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBmY19leGNoX2FsbG9jKGxwLT5lbXAsIGZwLCAwKTsKLX0KLUVYUE9SVF9TWU1CT0woZmNfZXhjaF9nZXQpOwogCiBzdHJ1Y3QgZmNfc2VxICpmY19leGNoX3NlcV9zZW5kKHN0cnVjdCBmY19scG9ydCAqbHAsCiAJCQkJc3RydWN0IGZjX2ZyYW1lICpmcCwKQEAgLTE4MjMsNyArMTkxNyw3IEBACiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CiAJaW50IHJjID0gMTsKIAotCWVwID0gbHAtPnR0LmV4Y2hfZ2V0KGxwLCBmcCk7CisJZXAgPSBmY19leGNoX2FsbG9jKGxwLCBmcCk7CiAJaWYgKCFlcCkgewogCQlmY19mcmFtZV9mcmVlKGZwKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xODQzLDcgKzE5MzcsOCBAQAogCWZjX2V4Y2hfc2V0dXBfaGRyKGVwLCBmcCwgZXAtPmZfY3RsKTsKIAlzcC0+Y250Kys7CiAKLQlmY19mY3BfZGRwX3NldHVwKGZyX2ZzcChmcCksIGVwLT54aWQpOworCWlmIChlcC0+eGlkIDw9IGxwLT5scm9feGlkKQorCQlmY19mY3BfZGRwX3NldHVwKGZyX2ZzcChmcCksIGVwLT54aWQpOwogCiAJaWYgKHVubGlrZWx5KGxwLT50dC5mcmFtZV9zZW5kKGxwLCBmcCkpKQogCQlnb3RvIGVycjsKQEAgLTE4NjAsNyArMTk1NSw3IEBACiAJcmMgPSBmY19leGNoX2RvbmVfbG9ja2VkKGVwKTsKIAlzcGluX3VubG9ja19iaCgmZXAtPmV4X2xvY2spOwogCWlmICghcmMpCi0JCWZjX2V4Y2hfbWdyX2RlbGV0ZV9lcChlcCk7CisJCWZjX2V4Y2hfZGVsZXRlKGVwKTsKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woZmNfZXhjaF9zZXFfc2VuZCk7CkBAIC0xODY4LDI0ICsxOTYzLDQ0IEBACiAvKgogICogUmVjZWl2ZSBhIGZyYW1lCiAgKi8KLXZvaWQgZmNfZXhjaF9yZWN2KHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19leGNoX21nciAqbXAsCi0JCSAgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3ZvaWQgZmNfZXhjaF9yZWN2KHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7CiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKLQl1MzIgZl9jdGw7CisJc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciAqZW1hOworCXUzMiBmX2N0bCwgZm91bmQgPSAwOworCXUxNiBveGlkOwogCiAJLyogbHBvcnQgbG9jayA/ICovCi0JaWYgKCFscCB8fCAhbXAgfHwgKGxwLT5zdGF0ZSA9PSBMUE9SVF9TVF9OT05FKSkgeworCWlmICghbHAgfHwgbHAtPnN0YXRlID09IExQT1JUX1NUX0RJU0FCTEVEKSB7CiAJCUZDX0xQT1JUX0RCRyhscCwgIlJlY2VpdmluZyBmcmFtZXMgZm9yIGFuIGxwb3J0IHRoYXQgIgogCQkJICAgICAiaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGNvcnJlY3RseVxuIik7CiAJCWZjX2ZyYW1lX2ZyZWUoZnApOwogCQlyZXR1cm47CiAJfQogCisJZl9jdGwgPSBudG9oMjQoZmgtPmZoX2ZfY3RsKTsKKwlveGlkID0gbnRvaHMoZmgtPmZoX294X2lkKTsKKwlpZiAoZl9jdGwgJiBGQ19GQ19FWF9DVFgpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbWEsICZscC0+ZW1hX2xpc3QsIGVtYV9saXN0KSB7CisJCQlpZiAoKG94aWQgPj0gZW1hLT5tcC0+bWluX3hpZCkgJiYKKwkJCSAgICAob3hpZCA8PSBlbWEtPm1wLT5tYXhfeGlkKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpIHsKKwkJCUZDX0xQT1JUX0RCRyhscCwgIlJlY2VpdmVkIHJlc3BvbnNlIGZvciBvdXQgIgorCQkJCSAgICAgIm9mIHJhbmdlIG94aWQ6JWh4XG4iLCBveGlkKTsKKwkJCWZjX2ZyYW1lX2ZyZWUoZnApOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlCisJCWVtYSA9IGxpc3RfZW50cnkobHAtPmVtYV9saXN0LnByZXYsIHR5cGVvZigqZW1hKSwgZW1hX2xpc3QpOworCiAJLyoKIAkgKiBJZiBmcmFtZSBpcyBtYXJrZWQgaW52YWxpZCwganVzdCBkcm9wIGl0LgogCSAqLwotCWZfY3RsID0gbnRvaDI0KGZoLT5maF9mX2N0bCk7CiAJc3dpdGNoIChmcl9lb2YoZnApKSB7CiAJY2FzZSBGQ19FT0ZfVDoKIAkJaWYgKGZfY3RsICYgRkNfRkNfRU5EX1NFUSkKQEAgLTE4OTMsMzQgKzIwMDgsMjQgQEAKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBGQ19FT0ZfTjoKIAkJaWYgKGZoLT5maF90eXBlID09IEZDX1RZUEVfQkxTKQotCQkJZmNfZXhjaF9yZWN2X2JscyhtcCwgZnApOworCQkJZmNfZXhjaF9yZWN2X2JscyhlbWEtPm1wLCBmcCk7CiAJCWVsc2UgaWYgKChmX2N0bCAmIChGQ19GQ19FWF9DVFggfCBGQ19GQ19TRVFfQ1RYKSkgPT0KIAkJCSBGQ19GQ19FWF9DVFgpCi0JCQlmY19leGNoX3JlY3Zfc2VxX3Jlc3AobXAsIGZwKTsKKwkJCWZjX2V4Y2hfcmVjdl9zZXFfcmVzcChlbWEtPm1wLCBmcCk7CiAJCWVsc2UgaWYgKGZfY3RsICYgRkNfRkNfU0VRX0NUWCkKLQkJCWZjX2V4Y2hfcmVjdl9yZXNwKG1wLCBmcCk7CisJCQlmY19leGNoX3JlY3ZfcmVzcChlbWEtPm1wLCBmcCk7CiAJCWVsc2UKLQkJCWZjX2V4Y2hfcmVjdl9yZXEobHAsIG1wLCBmcCk7CisJCQlmY19leGNoX3JlY3ZfcmVxKGxwLCBlbWEtPm1wLCBmcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUZDX0VNX0RCRyhtcCwgImRyb3BwaW5nIGludmFsaWQgZnJhbWUgKGVvZiAleCkiLCBmcl9lb2YoZnApKTsKKwkJRkNfTFBPUlRfREJHKGxwLCAiZHJvcHBpbmcgaW52YWxpZCBmcmFtZSAoZW9mICV4KSIsIGZyX2VvZihmcCkpOwogCQlmY19mcmFtZV9mcmVlKGZwKTsKLQkJYnJlYWs7CiAJfQogfQogRVhQT1JUX1NZTUJPTChmY19leGNoX3JlY3YpOwogCiBpbnQgZmNfZXhjaF9pbml0KHN0cnVjdCBmY19scG9ydCAqbHApCiB7Ci0JaWYgKCFscC0+dHQuZXhjaF9nZXQpIHsKLQkJLyoKLQkJICogIGV4Y2hfcHV0KCkgc2hvdWxkIGJlIE5VTEwgaWYKLQkJICogIGV4Y2hfZ2V0KCkgaXMgTlVMTAotCQkgKi8KLQkJV0FSTl9PTihscC0+dHQuZXhjaF9wdXQpOwotCQlscC0+dHQuZXhjaF9nZXQgPSBmY19leGNoX2dldDsKLQl9Ci0KIAlpZiAoIWxwLT50dC5zZXFfc3RhcnRfbmV4dCkKIAkJbHAtPnR0LnNlcV9zdGFydF9uZXh0ID0gZmNfc2VxX3N0YXJ0X25leHQ7CiAKQEAgLTE5NDIsNiArMjA0NywyOCBAQAogCWlmICghbHAtPnR0LnNlcV9leGNoX2Fib3J0KQogCQlscC0+dHQuc2VxX2V4Y2hfYWJvcnQgPSBmY19zZXFfZXhjaF9hYm9ydDsKIAorCS8qCisJICogSW5pdGlhbGl6ZSBmY19jcHVfbWFzayBhbmQgZmNfY3B1X29yZGVyLiBUaGUKKwkgKiBmY19jcHVfbWFzayBpcyBzZXQgZm9yIG5yX2NwdV9pZHMgcm91bmRlZCB1cAorCSAqIHRvIG9yZGVyIG9mIDIncyAqIHBvd2VyIGFuZCBvcmRlciBpcyBzdG9yZWQKKwkgKiBpbiBmY19jcHVfb3JkZXIgYXMgdGhpcyBpcyBsYXRlciByZXF1aXJlZCBpbgorCSAqIG1hcHBpbmcgYmV0d2VlbiBhbiBleGNoIGlkIGFuZCBleGNoIGFycmF5IGluZGV4CisJICogaW4gcGVyIGNwdSBleGNoIHBvb2wuCisJICoKKwkgKiBUaGlzIHJvdW5kIHVwIGlzIHJlcXVpcmVkIHRvIGFsaWduIGZjX2NwdV9tYXNrCisJICogdG8gZXhjaGFuZ2UgaWQncyBsb3dlciBiaXRzIHN1Y2ggdGhhdCBhbGwgaW5jb21pbmcKKwkgKiBmcmFtZXMgb2YgYW4gZXhjaGFuZ2UgZ2V0cyBkZWxpdmVyZWQgdG8gdGhlIHNhbWUKKwkgKiBjcHUgb24gd2hpY2ggZXhjaGFuZ2Ugb3JpZ2luYXRlZCBieSBzaW1wbGUgYml0d2lzZQorCSAqIEFORCBvcGVyYXRpb24gYmV0d2VlbiBmY19jcHVfbWFzayBhbmQgZXhjaGFuZ2UgaWQuCisJICovCisJZmNfY3B1X21hc2sgPSAxOworCWZjX2NwdV9vcmRlciA9IDA7CisJd2hpbGUgKGZjX2NwdV9tYXNrIDwgbnJfY3B1X2lkcykgeworCQlmY19jcHVfbWFzayA8PD0gMTsKKwkJZmNfY3B1X29yZGVyKys7CisJfQorCWZjX2NwdV9tYXNrLS07CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZmNfZXhjaF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYwppbmRleCBlMzAzZTBkLi41OWE0NDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2ZjcC5jCkBAIC01MDcsMzMgKzUwNyw2IEBACiAJZl9jdGwgPSBGQ19GQ19SRUxfT0ZGOwogCVdBUk5fT04oIXNlcSk7CiAKLQkvKgotCSAqIElmIGEgZ2V0X3BhZ2UoKS9wdXRfcGFnZSgpIHdpbGwgZmFpbCwgZG9uJ3QgdXNlIHNnIGxpc3RzCi0JICogaW4gdGhlIGZjX2ZyYW1lIHN0cnVjdHVyZS4KLQkgKgotCSAqIFRoZSBwdXRfcGFnZSgpIG1heSBiZSBsb25nIGFmdGVyIHRoZSBJL08gaGFzIGNvbXBsZXRlZAotCSAqIGluIHRoZSBjYXNlIG9mIEZDb0UsIHNpbmNlIHRoZSBuZXR3b3JrIGRyaXZlciBkb2VzIGl0Ci0JICogdmlhIGZyZWVfc2tiKCkuICBTZWUgdGhlIHRlc3QgaW4gZnJlZV9wYWdlc19jaGVjaygpLgotCSAqCi0JICogVGVzdCB0aGlzIGNhc2Ugd2l0aCAnZGQgPC9kZXYvemVybyA+L2Rldi9zdDAgYnM9NjRrJy4KLQkgKi8KLQlpZiAodXNpbmdfc2cpIHsKLQkJZm9yIChzZyA9IHNjc2lfc2dsaXN0KHNjKTsgc2c7IHNnID0gc2dfbmV4dChzZykpIHsKLQkJCWlmIChwYWdlX2NvdW50KHNnX3BhZ2Uoc2cpKSA9PSAwIHx8Ci0JCQkgICAgKHNnX3BhZ2Uoc2cpLT5mbGFncyAmICgxIDw8IFBHX2xydSB8Ci0JCQkJCQkgICAxIDw8IFBHX3ByaXZhdGUgfAotCQkJCQkJICAgMSA8PCBQR19sb2NrZWQgfAotCQkJCQkJICAgMSA8PCBQR19hY3RpdmUgfAotCQkJCQkJICAgMSA8PCBQR19zbGFiIHwKLQkJCQkJCSAgIDEgPDwgUEdfc3dhcGNhY2hlIHwKLQkJCQkJCSAgIDEgPDwgUEdfd3JpdGViYWNrIHwKLQkJCQkJCSAgIDEgPDwgUEdfcmVzZXJ2ZWQgfAotCQkJCQkJICAgMSA8PCBQR19idWRkeSkpKSB7Ci0JCQkJdXNpbmdfc2cgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQogCXNnID0gc2NzaV9zZ2xpc3Qoc2MpOwogCiAJd2hpbGUgKHJlbWFpbmluZyA+IDAgJiYgc2cpIHsKQEAgLTU2OSw4ICs1NDIsNiBAQAogCQl9CiAJCXNnX2J5dGVzID0gbWluKHRsZW4sIHNnLT5sZW5ndGggLSBvZmZzZXQpOwogCQlpZiAodXNpbmdfc2cpIHsKLQkJCVdBUk5fT04oc2tiX3NoaW5mbyhmcF9za2IoZnApKS0+bnJfZnJhZ3MgPgotCQkJCUZDX0ZSQU1FX1NHX0xFTik7CiAJCQlnZXRfcGFnZShzZ19wYWdlKHNnKSk7CiAJCQlza2JfZmlsbF9wYWdlX2Rlc2MoZnBfc2tiKGZwKSwKIAkJCQkJICAgc2tiX3NoaW5mbyhmcF9za2IoZnApKS0+bnJfZnJhZ3MsCkBAIC0xMzM3LDcgKzEzMDgsNyBAQAogCWZjX2ZpbGxfZmNfaGRyKGZwLCBGQ19SQ1RMX0VMU19SRVEsIHJwb3J0LT5wb3J0X2lkLAogCQkgICAgICAgZmNfaG9zdF9wb3J0X2lkKHJwLT5sb2NhbF9wb3J0LT5ob3N0KSwgRkNfVFlQRV9FTFMsCiAJCSAgICAgICBGQ19GQ19GSVJTVF9TRVEgfCBGQ19GQ19FTkRfU0VRIHwgRkNfRkNfU0VRX0lOSVQsIDApOwotCWlmIChscC0+dHQuZWxzY3Rfc2VuZChscCwgcnBvcnQsIGZwLCBFTFNfUkVDLCBmY19mY3BfcmVjX3Jlc3AsCisJaWYgKGxwLT50dC5lbHNjdF9zZW5kKGxwLCBycG9ydC0+cG9ydF9pZCwgZnAsIEVMU19SRUMsIGZjX2ZjcF9yZWNfcmVzcCwKIAkJCSAgICAgIGZzcCwgamlmZmllc190b19tc2VjcyhGQ19TQ1NJX1JFQ19UT1YpKSkgewogCQlmY19mY3BfcGt0X2hvbGQoZnNwKTsJCS8qIGhvbGQgd2hpbGUgUkVDIG91dHN0YW5kaW5nICovCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19scG9ydC5jIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKaW5kZXggNzQ1ZmE1NS4uYmQyZjc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmZjL2ZjX2xwb3J0LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogc3RhdGljIHZvaWQgZmNfbHBvcnRfZW50ZXJfbG9nbyhzdHJ1Y3QgZmNfbHBvcnQgKik7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpmY19scG9ydF9zdGF0ZV9uYW1lc1tdID0gewotCVtMUE9SVF9TVF9OT05FXSA9ICAgICAibm9uZSIsCisJW0xQT1JUX1NUX0RJU0FCTEVEXSA9ICJkaXNhYmxlZCIsCiAJW0xQT1JUX1NUX0ZMT0dJXSA9ICAgICJGTE9HSSIsCiAJW0xQT1JUX1NUX0ROU10gPSAgICAgICJkTlMiLAogCVtMUE9SVF9TVF9SUE5fSURdID0gICAiUlBOX0lEIiwKQEAgLTEzMyw1NyArMTMzLDQ0IEBACiAvKioKICAqIGZjX2xwb3J0X3Jwb3J0X2NhbGxiYWNrKCkgLSBFdmVudCBoYW5kbGVyIGZvciBycG9ydCBldmVudHMKICAqIEBscG9ydDogVGhlIGxwb3J0IHdoaWNoIGlzIHJlY2VpdmluZyB0aGUgZXZlbnQKLSAqIEBycG9ydDogVGhlIHJwb3J0IHdoaWNoIHRoZSBldmVudCBoYXMgb2NjdXJlZCBvbgorICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqIEBldmVudDogVGhlIGV2ZW50IHRoYXQgb2NjdXJlZAogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgc2hvdWxkIG5vdCBiZSBoZWxkIHdoZW4gY2FsbGluZwogICoJCSB0aGlzIGZ1bmN0aW9uLgogICovCiBzdGF0aWMgdm9pZCBmY19scG9ydF9ycG9ydF9jYWxsYmFjayhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LAotCQkJCSAgICBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LAorCQkJCSAgICBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsCiAJCQkJICAgIGVudW0gZmNfcnBvcnRfZXZlbnQgZXZlbnQpCiB7CiAJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSAlZCBldmVudCBmb3IgcG9ydCAoJTZ4KVxuIiwgZXZlbnQsCi0JCSAgICAgcnBvcnQtPnBvcnRfaWQpOworCQkgICAgIHJkYXRhLT5pZHMucG9ydF9pZCk7CiAKKwltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCXN3aXRjaCAoZXZlbnQpIHsKLQljYXNlIFJQT1JUX0VWX0NSRUFURUQ6Ci0JCWlmIChycG9ydC0+cG9ydF9pZCA9PSBGQ19GSURfRElSX1NFUlYpIHsKLQkJCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0JCQlpZiAobHBvcnQtPnN0YXRlID09IExQT1JUX1NUX0ROUykgewotCQkJCWxwb3J0LT5kbnNfcnAgPSBycG9ydDsKLQkJCQlmY19scG9ydF9lbnRlcl9ycG5faWQobHBvcnQpOwotCQkJfSBlbHNlIHsKLQkJCQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhbiBDUkVBVEVEIGV2ZW50ICIKLQkJCQkJICAgICAib24gcG9ydCAoJTZ4KSBmb3IgdGhlIGRpcmVjdG9yeSAiCi0JCQkJCSAgICAgInNlcnZlciwgYnV0IHRoZSBscG9ydCBpcyBub3QgIgotCQkJCQkgICAgICJpbiB0aGUgRE5TIHN0YXRlLCBpdCdzIGluIHRoZSAiCi0JCQkJCSAgICAgIiVkIHN0YXRlIiwgcnBvcnQtPnBvcnRfaWQsCi0JCQkJCSAgICAgbHBvcnQtPnN0YXRlKTsKLQkJCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJwb3J0KTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmbHBvcnQtPmxwX211dGV4KTsKLQkJfSBlbHNlCi0JCQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhbiBldmVudCBmb3IgcG9ydCAoJTZ4KSAiCi0JCQkJICAgICAid2hpY2ggaXMgbm90IHRoZSBkaXJlY3Rvcnkgc2VydmVyXG4iLAotCQkJCSAgICAgcnBvcnQtPnBvcnRfaWQpOworCWNhc2UgUlBPUlRfRVZfUkVBRFk6CisJCWlmIChscG9ydC0+c3RhdGUgPT0gTFBPUlRfU1RfRE5TKSB7CisJCQlscG9ydC0+ZG5zX3JwID0gcmRhdGE7CisJCQlmY19scG9ydF9lbnRlcl9ycG5faWQobHBvcnQpOworCQl9IGVsc2UgeworCQkJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYW4gUkVBRFkgZXZlbnQgIgorCQkJCSAgICAgIm9uIHBvcnQgKCU2eCkgZm9yIHRoZSBkaXJlY3RvcnkgIgorCQkJCSAgICAgInNlcnZlciwgYnV0IHRoZSBscG9ydCBpcyBub3QgIgorCQkJCSAgICAgImluIHRoZSBETlMgc3RhdGUsIGl0J3MgaW4gdGhlICIKKwkJCQkgICAgICIlZCBzdGF0ZSIsIHJkYXRhLT5pZHMucG9ydF9pZCwKKwkJCQkgICAgIGxwb3J0LT5zdGF0ZSk7CisJCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKHJkYXRhKTsKKwkJfQogCQlicmVhazsKIAljYXNlIFJQT1JUX0VWX0xPR086CiAJY2FzZSBSUE9SVF9FVl9GQUlMRUQ6CiAJY2FzZSBSUE9SVF9FVl9TVE9QOgotCQlpZiAocnBvcnQtPnBvcnRfaWQgPT0gRkNfRklEX0RJUl9TRVJWKSB7Ci0JCQltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotCQkJbHBvcnQtPmRuc19ycCA9IE5VTEw7Ci0JCQltdXRleF91bmxvY2soJmxwb3J0LT5scF9tdXRleCk7Ci0KLQkJfSBlbHNlCi0JCQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhbiBldmVudCBmb3IgcG9ydCAoJTZ4KSAiCi0JCQkJICAgICAid2hpY2ggaXMgbm90IHRoZSBkaXJlY3Rvcnkgc2VydmVyXG4iLAotCQkJCSAgICAgcnBvcnQtPnBvcnRfaWQpOworCQlscG9ydC0+ZG5zX3JwID0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBSUE9SVF9FVl9OT05FOgogCQlicmVhazsKIAl9CisJbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogfQogCiAvKioKQEAgLTIxMSwyMCArMTk4LDEzIEBACiAJCQkgICAgICAgdTMyIHJlbW90ZV9maWQsIHU2NCByZW1vdGVfd3dwbiwKIAkJCSAgICAgICB1NjQgcmVtb3RlX3d3bm4pCiB7Ci0Jc3RydWN0IGZjX2Rpc2NfcG9ydCBkcDsKLQotCWRwLmxwID0gbHBvcnQ7Ci0JZHAuaWRzLnBvcnRfaWQgPSByZW1vdGVfZmlkOwotCWRwLmlkcy5wb3J0X25hbWUgPSByZW1vdGVfd3dwbjsKLQlkcC5pZHMubm9kZV9uYW1lID0gcmVtb3RlX3d3bm47Ci0JZHAuaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOwotCi0JaWYgKGxwb3J0LT5wdHBfcnApIHsKKwltdXRleF9sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwlpZiAobHBvcnQtPnB0cF9ycCkKIAkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihscG9ydC0+cHRwX3JwKTsKLQkJbHBvcnQtPnB0cF9ycCA9IE5VTEw7Ci0JfQotCi0JbHBvcnQtPnB0cF9ycCA9IGxwb3J0LT50dC5ycG9ydF9jcmVhdGUoJmRwKTsKKwlscG9ydC0+cHRwX3JwID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZShscG9ydCwgcmVtb3RlX2ZpZCk7CisJbHBvcnQtPnB0cF9ycC0+aWRzLnBvcnRfbmFtZSA9IHJlbW90ZV93d3BuOworCWxwb3J0LT5wdHBfcnAtPmlkcy5ub2RlX25hbWUgPSByZW1vdGVfd3dubjsKKwltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOwogCiAJbHBvcnQtPnR0LnJwb3J0X2xvZ2luKGxwb3J0LT5wdHBfcnApOwogCkBAIC00NzIsNTYgKzQ1Miw2IEBACiB9CiAKIC8qKgotICogZmNfbHBvcnRfcmVjdl9hZGlzY19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBBZGRyZXNzIERpc2NvdmVyeSBSZXF1ZXN0Ci0gKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCByZWNpZXZpbmcgdGhlIEFESVNDCi0gKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIEFESVNDIGV4Y2hhbmdlCi0gKiBAZnA6IEFESVNDIHJlcXVlc3QgZnJhbWUKLSAqCi0gKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKLSAqIHRoaXMgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGZjX2xwb3J0X3JlY3ZfYWRpc2NfcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmluX2ZwLAotCQkJCSAgICBzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KQotewotCXN0cnVjdCBmY19mcmFtZSAqZnA7Ci0Jc3RydWN0IGZjX2V4Y2ggKmVwID0gZmNfc2VxX2V4Y2goc3ApOwotCXN0cnVjdCBmY19lbHNfYWRpc2MgKnJlcSwgKnJwOwotCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgcmp0X2RhdGE7Ci0Jc2l6ZV90IGxlbjsKLQl1MzIgZl9jdGw7Ci0KLQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBBRElTQyByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAotCQkgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7Ci0KLQlyZXEgPSBmY19mcmFtZV9wYXlsb2FkX2dldChpbl9mcCwgc2l6ZW9mKCpyZXEpKTsKLQlpZiAoIXJlcSkgewotCQlyanRfZGF0YS5mcCA9IE5VTEw7Ci0JCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfTE9HSUM7Ci0JCXJqdF9kYXRhLmV4cGxhbiA9IEVMU19FWFBMX05PTkU7Ci0JCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmcmp0X2RhdGEpOwotCX0gZWxzZSB7Ci0JCWxlbiA9IHNpemVvZigqcnApOwotCQlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBsZW4pOwotCQlpZiAoZnApIHsKLQkJCXJwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIGxlbik7Ci0JCQltZW1zZXQocnAsIDAsIGxlbik7Ci0JCQlycC0+YWRpc2NfY21kID0gRUxTX0xTX0FDQzsKLQkJCXJwLT5hZGlzY193d3BuID0gaHRvbmxsKGxwb3J0LT53d3BuKTsKLQkJCXJwLT5hZGlzY193d25uID0gaHRvbmxsKGxwb3J0LT53d25uKTsKLQkJCWh0b24yNChycC0+YWRpc2NfcG9ydF9pZCwKLQkJCSAgICAgICBmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpKTsKLQkJCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKLQkJCWZfY3RsID0gRkNfRkNfRVhfQ1RYIHwgRkNfRkNfTEFTVF9TRVE7Ci0JCQlmX2N0bCB8PSBGQ19GQ19FTkRfU0VRIHwgRkNfRkNfU0VRX0lOSVQ7Ci0JCQlmY19maWxsX2ZjX2hkcihmcCwgRkNfUkNUTF9FTFNfUkVQLCBlcC0+ZGlkLCBlcC0+c2lkLAotCQkJCSAgICAgICBGQ19UWVBFX0VMUywgZl9jdGwsIDApOwotCQkJbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBzcCwgZnApOwotCQl9Ci0JfQotCWZjX2ZyYW1lX2ZyZWUoaW5fZnApOwotfQotCi0vKioKICAqIGZjX2xwb3J0X3JlY3ZfbG9nb19yZXEoKSAtIEhhbmRsZSByZWNlaXZlZCBmYWJyaWMgTE9HTyByZXF1ZXN0CiAgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCByZWNpZXZpbmcgdGhlIExPR08KICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgTE9HTyBleGNoYW5nZQpAQCAtNTUwLDcgKzQ4MCw3IEBACiAJaW50IHJjID0gLTE7CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwotCWlmIChscG9ydC0+c3RhdGUgPT0gTFBPUlRfU1RfTk9ORSkgeworCWlmIChscG9ydC0+c3RhdGUgPT0gTFBPUlRfU1RfRElTQUJMRUQpIHsKIAkJZmNfbHBvcnRfZW50ZXJfcmVzZXQobHBvcnQpOwogCQlyYyA9IDA7CiAJfQpAQCAtNjM3LDEyICs1NjcsMTMgQEAKIGludCBmY19scG9ydF9kZXN0cm95KHN0cnVjdCBmY19scG9ydCAqbHBvcnQpCiB7CiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKLQlscG9ydC0+c3RhdGUgPSBMUE9SVF9TVF9OT05FOworCWxwb3J0LT5zdGF0ZSA9IExQT1JUX1NUX0RJU0FCTEVEOwogCWxwb3J0LT5saW5rX3VwID0gMDsKIAlscG9ydC0+dHQuZnJhbWVfc2VuZCA9IGZjX2ZyYW1lX2Ryb3A7CiAJbXV0ZXhfdW5sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCiAJbHBvcnQtPnR0LmZjcF9hYm9ydF9pbyhscG9ydCk7CisJbHBvcnQtPnR0LmRpc2Nfc3RvcF9maW5hbChscG9ydCk7CiAJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCAwLCAwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw3ICs2NTMsOCBAQAogCiAJZmNfbHBvcnRfc3RhdGVfZW50ZXIobHBvcnQsIExQT1JUX1NUX1JFQURZKTsKIAotCWxwb3J0LT50dC5kaXNjX3N0YXJ0KGZjX2xwb3J0X2Rpc2NfY2FsbGJhY2ssIGxwb3J0KTsKKwlpZiAoIWxwb3J0LT5wdHBfcnApCisJCWxwb3J0LT50dC5kaXNjX3N0YXJ0KGZjX2xwb3J0X2Rpc2NfY2FsbGJhY2ssIGxwb3J0KTsKIH0KIAogLyoqCkBAIC04MDgsOCArNzQwLDYgQEAKIAlmY19scG9ydF9wdHBfc2V0dXAobHBvcnQsIHJlbW90ZV9maWQsIHJlbW90ZV93d3BuLAogCQkJICAgZ2V0X3VuYWxpZ25lZF9iZTY0KCZmbHAtPmZsX3d3bm4pKTsKIAotCWxwb3J0LT50dC5kaXNjX3N0YXJ0KGZjX2xwb3J0X2Rpc2NfY2FsbGJhY2ssIGxwb3J0KTsKLQogb3V0OgogCXNwID0gZnJfc2VxKHJ4X2ZwKTsKIAlmY19mcmFtZV9mcmVlKHJ4X2ZwKTsKQEAgLTgzMiwxMCArNzYyLDYgQEAKIHsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOwogCXZvaWQgKCpyZWN2KSAoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKiwgc3RydWN0IGZjX2xwb3J0ICopOwotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7Ci0JdTMyIHNfaWQ7Ci0JdTMyIGRfaWQ7Ci0Jc3RydWN0IGZjX3NlcV9lbHNfZGF0YSByanRfZGF0YTsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAKQEAgLTg0NCwxMSArNzcwLDE0IEBACiAJICogUlNDTiBoZXJlLiAgVGhlc2UgZG9uJ3QgcmVxdWlyZSBhIHNlc3Npb24uCiAJICogRXZlbiBpZiB3ZSBoYWQgYSBzZXNzaW9uLCBpdCBtaWdodCBub3QgYmUgcmVhZHkuCiAJICovCi0JaWYgKGZoLT5maF90eXBlID09IEZDX1RZUEVfRUxTICYmIGZoLT5maF9yX2N0bCA9PSBGQ19SQ1RMX0VMU19SRVEpIHsKKwlpZiAoIWxwb3J0LT5saW5rX3VwKQorCQlmY19mcmFtZV9mcmVlKGZwKTsKKwllbHNlIGlmIChmaC0+ZmhfdHlwZSA9PSBGQ19UWVBFX0VMUyAmJgorCQkgZmgtPmZoX3JfY3RsID09IEZDX1JDVExfRUxTX1JFUSkgewogCQkvKgogCQkgKiBDaGVjayBvcGNvZGUuCiAJCSAqLwotCQlyZWN2ID0gTlVMTDsKKwkJcmVjdiA9IGxwb3J0LT50dC5ycG9ydF9yZWN2X3JlcTsKIAkJc3dpdGNoIChmY19mcmFtZV9wYXlsb2FkX29wKGZwKSkgewogCQljYXNlIEVMU19GTE9HSToKIAkJCXJlY3YgPSBmY19scG9ydF9yZWN2X2Zsb2dpX3JlcTsKQEAgLTg3MCwzNCArNzk5LDkgQEAKIAkJY2FzZSBFTFNfUk5JRDoKIAkJCXJlY3YgPSBmY19scG9ydF9yZWN2X3JuaWRfcmVxOwogCQkJYnJlYWs7Ci0JCWNhc2UgRUxTX0FESVNDOgotCQkJcmVjdiA9IGZjX2xwb3J0X3JlY3ZfYWRpc2NfcmVxOwotCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAocmVjdikKLQkJCXJlY3Yoc3AsIGZwLCBscG9ydCk7Ci0JCWVsc2UgewotCQkJLyoKLQkJCSAqIEZpbmQgc2Vzc2lvbi4KLQkJCSAqIElmIHRoaXMgaXMgYSBuZXcgaW5jb21pbmcgUExPR0ksIHdlIHdvbid0IGZpbmQgaXQuCi0JCQkgKi8KLQkJCXNfaWQgPSBudG9oMjQoZmgtPmZoX3NfaWQpOwotCQkJZF9pZCA9IG50b2gyNChmaC0+ZmhfZF9pZCk7Ci0KLQkJCXJwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2xvb2t1cChscG9ydCwgc19pZCk7Ci0JCQlpZiAocnBvcnQpCi0JCQkJbHBvcnQtPnR0LnJwb3J0X3JlY3ZfcmVxKHNwLCBmcCwgcnBvcnQpOwotCQkJZWxzZSB7Ci0JCQkJcmp0X2RhdGEuZnAgPSBOVUxMOwotCQkJCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfVU5BQjsKLQkJCQlyanRfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9OT05FOwotCQkJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLAotCQkJCQkJCSAgIEVMU19MU19SSlQsCi0JCQkJCQkJICAgJnJqdF9kYXRhKTsKLQkJCQlmY19mcmFtZV9mcmVlKGZwKTsKLQkJCX0KLQkJfQorCQlyZWN2KHNwLCBmcCwgbHBvcnQpOwogCX0gZWxzZSB7CiAJCUZDX0xQT1JUX0RCRyhscG9ydCwgImRyb3BwaW5nIGludmFsaWQgZnJhbWUgKGVvZiAleClcbiIsCiAJCQkgICAgIGZyX2VvZihmcCkpOwpAQCAtOTMwLDcgKzgzNCwyOCBAQAogRVhQT1JUX1NZTUJPTChmY19scG9ydF9yZXNldCk7CiAKIC8qKgotICogZmNfcnBvcnRfZW50ZXJfcmVzZXQoKSAtIFJlc2V0IHRoZSBsb2NhbCBwb3J0CisgKiBmY19scG9ydF9yZXNldF9sb2NrZWQoKSAtIFJlc2V0IHRoZSBsb2NhbCBwb3J0CisgKiBAbHBvcnQ6IEZpYnJlIENoYW5uZWwgbG9jYWwgcG9ydCB0byBiZSByZXNldAorICoKKyAqIExvY2tpbmcgTm90ZTogVGhlIGxwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZworICogdGhpcyByb3V0aW5lLgorICovCitzdGF0aWMgdm9pZCBmY19scG9ydF9yZXNldF9sb2NrZWQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKK3sKKwlpZiAobHBvcnQtPmRuc19ycCkKKwkJbHBvcnQtPnR0LnJwb3J0X2xvZ29mZihscG9ydC0+ZG5zX3JwKTsKKworCWxwb3J0LT5wdHBfcnAgPSBOVUxMOworCisJbHBvcnQtPnR0LmRpc2Nfc3RvcChscG9ydCk7CisKKwlscG9ydC0+dHQuZXhjaF9tZ3JfcmVzZXQobHBvcnQsIDAsIDApOworCWZjX2hvc3RfZmFicmljX25hbWUobHBvcnQtPmhvc3QpID0gMDsKKwlmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpID0gMDsKK30KKworLyoqCisgKiBmY19scG9ydF9lbnRlcl9yZXNldCgpIC0gUmVzZXQgdGhlIGxvY2FsIHBvcnQKICAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0IHRvIGJlIHJlc2V0CiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgbHBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCkBAIC05NDIsMjYgKzg2NywyOCBAQAogCQkgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CiAKIAlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfUkVTRVQpOwotCi0JaWYgKGxwb3J0LT5kbnNfcnApCi0JCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYobHBvcnQtPmRuc19ycCk7Ci0KLQlpZiAobHBvcnQtPnB0cF9ycCkgewotCQlscG9ydC0+dHQucnBvcnRfbG9nb2ZmKGxwb3J0LT5wdHBfcnApOwotCQlscG9ydC0+cHRwX3JwID0gTlVMTDsKLQl9Ci0KLQlscG9ydC0+dHQuZGlzY19zdG9wKGxwb3J0KTsKLQotCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgMCwgMCk7Ci0JZmNfaG9zdF9mYWJyaWNfbmFtZShscG9ydC0+aG9zdCkgPSAwOwotCWZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCkgPSAwOwotCisJZmNfbHBvcnRfcmVzZXRfbG9ja2VkKGxwb3J0KTsKIAlpZiAobHBvcnQtPmxpbmtfdXApCiAJCWZjX2xwb3J0X2VudGVyX2Zsb2dpKGxwb3J0KTsKIH0KIAogLyoqCisgKiBmY19scG9ydF9lbnRlcl9kaXNhYmxlZCgpIC0gZGlzYWJsZSB0aGUgbG9jYWwgcG9ydAorICogQGxwb3J0OiBGaWJyZSBDaGFubmVsIGxvY2FsIHBvcnQgdG8gYmUgcmVzZXQKKyAqCisgKiBMb2NraW5nIE5vdGU6IFRoZSBscG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKKyAqIHRoaXMgcm91dGluZS4KKyAqLworc3RhdGljIHZvaWQgZmNfbHBvcnRfZW50ZXJfZGlzYWJsZWQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKK3sKKwlGQ19MUE9SVF9EQkcobHBvcnQsICJFbnRlcmVkIGRpc2FibGVkIHN0YXRlIGZyb20gJXMgc3RhdGVcbiIsCisJCSAgICAgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKKworCWZjX2xwb3J0X3N0YXRlX2VudGVyKGxwb3J0LCBMUE9SVF9TVF9ESVNBQkxFRCk7CisJZmNfbHBvcnRfcmVzZXRfbG9ja2VkKGxwb3J0KTsKK30KKworLyoqCiAgKiBmY19scG9ydF9lcnJvcigpIC0gSGFuZGxlciBmb3IgYW55IGVycm9ycwogICogQGxwb3J0OiBUaGUgZmNfbHBvcnQgb2JqZWN0CiAgKiBAZnA6IFRoZSBmcmFtZSBwb2ludGVyCkBAIC05OTIsNyArOTE5LDcgQEAKIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbHBvcnQtPnJldHJ5X3dvcmssIGRlbGF5KTsKIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCAobHBvcnQtPnN0YXRlKSB7Ci0JCQljYXNlIExQT1JUX1NUX05PTkU6CisJCQljYXNlIExQT1JUX1NUX0RJU0FCTEVEOgogCQkJY2FzZSBMUE9SVF9TVF9SRUFEWToKIAkJCWNhc2UgTFBPUlRfU1RfUkVTRVQ6CiAJCQljYXNlIExQT1JUX1NUX1JQTl9JRDoKQEAgLTEwMjYsMTMgKzk1MywxMyBAQAogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwogCXN0cnVjdCBmY19jdF9oZHIgKmN0OwogCisJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBSRlRfSUQgJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKKwogCWlmIChmcCA9PSBFUlJfUFRSKC1GQ19FWF9DTE9TRUQpKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCi0JRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBSRlRfSUQgcmVzcG9uc2VcbiIpOwotCiAJaWYgKGxwb3J0LT5zdGF0ZSAhPSBMUE9SVF9TVF9SRlRfSUQpIHsKIAkJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBSRlRfSUQgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCiAJCQkgICAgICIlc1xuIiwgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKQEAgLTEwODAsMTMgKzEwMDcsMTMgQEAKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAlzdHJ1Y3QgZmNfY3RfaGRyICpjdDsKIAorCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgUlBOX0lEICVzXG4iLCBmY19lbHNfcmVzcF90eXBlKGZwKSk7CisKIAlpZiAoZnAgPT0gRVJSX1BUUigtRkNfRVhfQ0xPU0VEKSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAotCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgUlBOX0lEIHJlc3BvbnNlXG4iKTsKLQogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfUlBOX0lEKSB7CiAJCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgUlBOX0lEIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgogCQkJICAgICAiJXNcbiIsIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CkBAIC0xMTMyLDEzICsxMDU5LDEzIEBACiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IGxwX2FyZzsKIAl1OCBvcDsKIAorCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgU0NSICVzXG4iLCBmY19lbHNfcmVzcF90eXBlKGZwKSk7CisKIAlpZiAoZnAgPT0gRVJSX1BUUigtRkNfRVhfQ0xPU0VEKSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAotCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgU0NSIHJlc3BvbnNlXG4iKTsKLQogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfU0NSKSB7CiAJCUZDX0xQT1JUX0RCRyhscG9ydCwgIlJlY2VpdmVkIGEgU0NSIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgogCQkJICAgICAiJXNcbiIsIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CkBAIC0xMTg2LDcgKzExMTMsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgTlVMTCwgZnAsIEVMU19TQ1IsCisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgRkNfRklEX0ZDVFJMLCBmcCwgRUxTX1NDUiwKIAkJCQkgIGZjX2xwb3J0X3Njcl9yZXNwLCBscG9ydCwgbHBvcnQtPmVfZF90b3YpKQogCQlmY19scG9ydF9lcnJvcihscG9ydCwgZnApOwogfQpAQCAtMTIyNyw3ICsxMTU0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIE5VTEwsIGZwLCBGQ19OU19SRlRfSUQsCisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgRkNfRklEX0RJUl9TRVJWLCBmcCwgRkNfTlNfUkZUX0lELAogCQkJCSAgZmNfbHBvcnRfcmZ0X2lkX3Jlc3AsCiAJCQkJICBscG9ydCwgbHBvcnQtPmVfZF90b3YpKQogCQlmY19scG9ydF9lcnJvcihscG9ydCwgZnApOwpAQCAtMTI1Niw3ICsxMTgzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIE5VTEwsIGZwLCBGQ19OU19SUE5fSUQsCisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgRkNfRklEX0RJUl9TRVJWLCBmcCwgRkNfTlNfUlBOX0lELAogCQkJCSAgZmNfbHBvcnRfcnBuX2lkX3Jlc3AsCiAJCQkJICBscG9ydCwgbHBvcnQtPmVfZF90b3YpKQogCQlmY19scG9ydF9lcnJvcihscG9ydCwgZnApOwpAQCAtMTI3NSwyOCArMTIwMiwyMSBAQAogICovCiBzdGF0aWMgdm9pZCBmY19scG9ydF9lbnRlcl9kbnMoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YTsKLQlzdHJ1Y3QgZmNfZGlzY19wb3J0IGRwOwotCi0JZHAuaWRzLnBvcnRfaWQgPSBGQ19GSURfRElSX1NFUlY7Ci0JZHAuaWRzLnBvcnRfbmFtZSA9IC0xOwotCWRwLmlkcy5ub2RlX25hbWUgPSAtMTsKLQlkcC5pZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047Ci0JZHAubHAgPSBscG9ydDsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CiAKIAlGQ19MUE9SVF9EQkcobHBvcnQsICJFbnRlcmVkIEROUyBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAogCQkgICAgIGZjX2xwb3J0X3N0YXRlKGxwb3J0KSk7CiAKIAlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfRE5TKTsKIAotCXJwb3J0ID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZSgmZHApOwotCWlmICghcnBvcnQpCisJbXV0ZXhfbG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJcmRhdGEgPSBscG9ydC0+dHQucnBvcnRfY3JlYXRlKGxwb3J0LCBGQ19GSURfRElSX1NFUlYpOworCW11dGV4X3VubG9jaygmbHBvcnQtPmRpc2MuZGlzY19tdXRleCk7CisJaWYgKCFyZGF0YSkKIAkJZ290byBlcnI7CiAKLQlyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCXJkYXRhLT5vcHMgPSAmZmNfbHBvcnRfcnBvcnRfb3BzOwotCWxwb3J0LT50dC5ycG9ydF9sb2dpbihycG9ydCk7CisJbHBvcnQtPnR0LnJwb3J0X2xvZ2luKHJkYXRhKTsKIAlyZXR1cm47CiAKIGVycjoKQEAgLTEzMTYsNyArMTIzNiw3IEBACiAJbXV0ZXhfbG9jaygmbHBvcnQtPmxwX211dGV4KTsKIAogCXN3aXRjaCAobHBvcnQtPnN0YXRlKSB7Ci0JY2FzZSBMUE9SVF9TVF9OT05FOgorCWNhc2UgTFBPUlRfU1RfRElTQUJMRUQ6CiAJY2FzZSBMUE9SVF9TVF9SRUFEWToKIAljYXNlIExQT1JUX1NUX1JFU0VUOgogCQlXQVJOX09OKDEpOwpAQCAtMTM2MCwxMyArMTI4MCwxMyBAQAogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBscF9hcmc7CiAJdTggb3A7CiAKKwlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIExPR08gJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKKwogCWlmIChmcCA9PSBFUlJfUFRSKC1GQ19FWF9DTE9TRUQpKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZscG9ydC0+bHBfbXV0ZXgpOwogCi0JRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBMT0dPIHJlc3BvbnNlXG4iKTsKLQogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfTE9HTykgewogCQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIExPR08gcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCiAJCQkgICAgICIlc1xuIiwgZmNfbHBvcnRfc3RhdGUobHBvcnQpKTsKQEAgLTEzODIsNyArMTMwMiw3IEBACiAKIAlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOwogCWlmIChvcCA9PSBFTFNfTFNfQUNDKQotCQlmY19scG9ydF9lbnRlcl9yZXNldChscG9ydCk7CisJCWZjX2xwb3J0X2VudGVyX2Rpc2FibGVkKGxwb3J0KTsKIAllbHNlCiAJCWZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7CiAKQEAgLTE0MTUsOCArMTMzNSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBOVUxMLCBmcCwgRUxTX0xPR08sIGZjX2xwb3J0X2xvZ29fcmVzcCwKLQkJCQkgIGxwb3J0LCBscG9ydC0+ZV9kX3RvdikpCisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgRkNfRklEX0ZMT0dJLCBmcCwgRUxTX0xPR08sCisJCQkJICBmY19scG9ydF9sb2dvX3Jlc3AsIGxwb3J0LCBscG9ydC0+ZV9kX3RvdikpCiAJCWZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7CiB9CiAKQEAgLTE0NDIsMTMgKzEzNjIsMTMgQEAKIAl1bnNpZ25lZCBpbnQgZV9kX3RvdjsKIAl1MTYgbWZzOwogCisJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBGTE9HSSAlc1xuIiwgZmNfZWxzX3Jlc3BfdHlwZShmcCkpOworCiAJaWYgKGZwID09IEVSUl9QVFIoLUZDX0VYX0NMT1NFRCkpCiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmxwb3J0LT5scF9tdXRleCk7CiAKLQlGQ19MUE9SVF9EQkcobHBvcnQsICJSZWNlaXZlZCBhIEZMT0dJIHJlc3BvbnNlXG4iKTsKLQogCWlmIChscG9ydC0+c3RhdGUgIT0gTFBPUlRfU1RfRkxPR0kpIHsKIAkJRkNfTFBPUlRfREJHKGxwb3J0LCAiUmVjZWl2ZWQgYSBGTE9HSSByZXNwb25zZSwgYnV0IGluIHN0YXRlICIKIAkJCSAgICAgIiVzXG4iLCBmY19scG9ydF9zdGF0ZShscG9ydCkpOwpAQCAtMTUwMSwxNCArMTQyMSw2IEBACiAJCQkJZmNfbHBvcnRfZW50ZXJfZG5zKGxwb3J0KTsKIAkJCX0KIAkJfQotCi0JCWlmIChmbHApIHsKLQkJCWNzcF9mbGFncyA9IG50b2hzKGZscC0+ZmxfY3NwLnNwX2ZlYXR1cmVzKTsKLQkJCWlmICgoY3NwX2ZsYWdzICYgRkNfU1BfRlRfRlBPUlQpID09IDApIHsKLQkJCQlscG9ydC0+dHQuZGlzY19zdGFydChmY19scG9ydF9kaXNjX2NhbGxiYWNrLAotCQkJCQkJICAgICBscG9ydCk7Ci0JCQl9Ci0JCX0KIAl9IGVsc2UgewogCQlGQ19MUE9SVF9EQkcobHBvcnQsICJCYWQgRkxPR0kgcmVzcG9uc2VcbiIpOwogCX0KQEAgLTE1MzksNyArMTQ1MSw3IEBACiAJaWYgKCFmcCkKIAkJcmV0dXJuIGZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBOVUxMLCBmcCwgRUxTX0ZMT0dJLAorCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIEZDX0ZJRF9GTE9HSSwgZnAsIEVMU19GTE9HSSwKIAkJCQkgIGZjX2xwb3J0X2Zsb2dpX3Jlc3AsIGxwb3J0LCBscG9ydC0+ZV9kX3RvdikpCiAJCWZjX2xwb3J0X2Vycm9yKGxwb3J0LCBmcCk7CiB9CkBAIC0xNTUwLDcgKzE0NjIsNyBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZscG9ydC0+cmV0cnlfd29yaywgZmNfbHBvcnRfdGltZW91dCk7CiAJbXV0ZXhfaW5pdCgmbHBvcnQtPmxwX211dGV4KTsKIAotCWZjX2xwb3J0X3N0YXRlX2VudGVyKGxwb3J0LCBMUE9SVF9TVF9OT05FKTsKKwlmY19scG9ydF9zdGF0ZV9lbnRlcihscG9ydCwgTFBPUlRfU1RfRElTQUJMRUQpOwogCiAJZmNfbHBvcnRfYWRkX2ZjNF90eXBlKGxwb3J0LCBGQ19UWVBFX0ZDUCk7CiAJZmNfbHBvcnRfYWRkX2ZjNF90eXBlKGxwb3J0LCBGQ19UWVBFX0NUKTsKQEAgLTE1ODgsNiArMTUwMCw3IEBACiAJaWYgKGxwb3J0LT5saW5rX3N1cHBvcnRlZF9zcGVlZHMgJiBGQ19QT1JUU1BFRURfMTBHQklUKQogCQlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMobHBvcnQtPmhvc3QpIHw9IEZDX1BPUlRTUEVFRF8xMEdCSVQ7CiAKKwlJTklUX0xJU1RfSEVBRCgmbHBvcnQtPmVtYV9saXN0KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZmNfbHBvcnRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9saWJmYy9mY19ycG9ydC5jCmluZGV4IDcxNjIzODVmLi4wM2VhNjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfcnBvcnQuYwpAQCAtNTcsOTQgKzU3LDExNCBAQAogCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcnBvcnRfZXZlbnRfcXVldWU7CiAKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3Bsb2dpKHN0cnVjdCBmY19ycG9ydCAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3BybGkoc3RydWN0IGZjX3Jwb3J0ICopOwotc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcnR2KHN0cnVjdCBmY19ycG9ydCAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3JlYWR5KHN0cnVjdCBmY19ycG9ydCAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX2xvZ28oc3RydWN0IGZjX3Jwb3J0ICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcGxvZ2koc3RydWN0IGZjX3Jwb3J0X3ByaXYgKik7CitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9wcmxpKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcnR2KHN0cnVjdCBmY19ycG9ydF9wcml2ICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcmVhZHkoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKik7CitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9sb2dvKHN0cnVjdCBmY19ycG9ydF9wcml2ICopOworc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfYWRpc2Moc3RydWN0IGZjX3Jwb3J0X3ByaXYgKik7CiAKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKHN0cnVjdCBmY19ycG9ydCAqLAorc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEoc3RydWN0IGZjX2xwb3J0ICosCiAJCQkJICAgIHN0cnVjdCBmY19zZXEgKiwgc3RydWN0IGZjX2ZyYW1lICopOwotc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9wcmxpX3JlcShzdHJ1Y3QgZmNfcnBvcnQgKiwKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKiwKIAkJCQkgICBzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEoc3RydWN0IGZjX3Jwb3J0ICosCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X3BybG9fcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICosCiAJCQkJICAgc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7Ci1zdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2xvZ29fcmVxKHN0cnVjdCBmY19ycG9ydCAqLAorc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9sb2dvX3JlcShzdHJ1Y3QgZmNfbHBvcnQgKiwKIAkJCQkgICBzdHJ1Y3QgZmNfc2VxICosIHN0cnVjdCBmY19mcmFtZSAqKTsKIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICopOwotc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3Ioc3RydWN0IGZjX3Jwb3J0ICosIHN0cnVjdCBmY19mcmFtZSAqKTsKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KHN0cnVjdCBmY19ycG9ydCAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CitzdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcihzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CitzdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcl9yZXRyeShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqLCBzdHJ1Y3QgZmNfZnJhbWUgKik7CiBzdGF0aWMgdm9pZCBmY19ycG9ydF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmZjX3Jwb3J0X3N0YXRlX25hbWVzW10gPSB7Ci0JW1JQT1JUX1NUX05PTkVdID0gIk5vbmUiLAogCVtSUE9SVF9TVF9JTklUXSA9ICJJbml0IiwKIAlbUlBPUlRfU1RfUExPR0ldID0gIlBMT0dJIiwKIAlbUlBPUlRfU1RfUFJMSV0gPSAiUFJMSSIsCiAJW1JQT1JUX1NUX1JUVl0gPSAiUlRWIiwKIAlbUlBPUlRfU1RfUkVBRFldID0gIlJlYWR5IiwKIAlbUlBPUlRfU1RfTE9HT10gPSAiTE9HTyIsCisJW1JQT1JUX1NUX0FESVNDXSA9ICJBRElTQyIsCisJW1JQT1JUX1NUX0RFTEVURV0gPSAiRGVsZXRlIiwKIH07CiAKLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JvZ3VlX2Rlc3Ryb3koc3RydWN0IGRldmljZSAqZGV2KQorLyoqCisgKiBmY19ycG9ydF9sb29rdXAoKSAtIGxvb2t1cCBhIHJlbW90ZSBwb3J0IGJ5IHBvcnRfaWQKKyAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBob3N0IHBvcnQgaW5zdGFuY2UKKyAqIEBwb3J0X2lkOiByZW1vdGUgcG9ydCBwb3J0X2lkIHRvIG1hdGNoCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqZmNfcnBvcnRfbG9va3VwKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJCSAgICAgdTMyIHBvcnRfaWQpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IGRldl90b19ycG9ydChkZXYpOwotCUZDX1JQT1JUX0RCRyhycG9ydCwgIkRlc3Ryb3lpbmcgcm9ndWUgcnBvcnRcbiIpOwotCWtmcmVlKHJwb3J0KTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkYXRhLCAmbHBvcnQtPmRpc2MucnBvcnRzLCBwZWVycykKKwkJaWYgKHJkYXRhLT5pZHMucG9ydF9pZCA9PSBwb3J0X2lkICYmCisJCSAgICByZGF0YS0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfREVMRVRFKQorCQkJcmV0dXJuIHJkYXRhOworCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgZmNfcnBvcnQgKmZjX3Jwb3J0X3JvZ3VlX2NyZWF0ZShzdHJ1Y3QgZmNfZGlzY19wb3J0ICpkcCkKKy8qKgorICogZmNfcnBvcnRfY3JlYXRlKCkgLSBDcmVhdGUgYSBuZXcgcmVtb3RlIHBvcnQKKyAqIEBscG9ydDogICBUaGUgbG9jYWwgcG9ydCB0aGF0IHRoZSBuZXcgcmVtb3RlIHBvcnQgaXMgZm9yCisgKiBAcG9ydF9pZDogVGhlIHBvcnQgSUQgZm9yIHRoZSBuZXcgcmVtb3RlIHBvcnQKKyAqCisgKiBMb2NraW5nIG5vdGU6ICBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBkaXNjX211dGV4IGhlbGQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqZmNfcnBvcnRfY3JlYXRlKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCisJCQkJCSAgICAgdTMyIHBvcnRfaWQpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGE7Ci0JcnBvcnQgPSBremFsbG9jKHNpemVvZigqcnBvcnQpICsgc2l6ZW9mKCpyZGF0YSksIEdGUF9LRVJORUwpOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKIAotCWlmICghcnBvcnQpCisJcmRhdGEgPSBscG9ydC0+dHQucnBvcnRfbG9va3VwKGxwb3J0LCBwb3J0X2lkKTsKKwlpZiAocmRhdGEpCisJCXJldHVybiByZGF0YTsKKworCXJkYXRhID0ga3phbGxvYyhzaXplb2YoKnJkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGF0YSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZGF0YSA9IFJQT1JUX1RPX1BSSVYocnBvcnQpOworCXJkYXRhLT5pZHMubm9kZV9uYW1lID0gLTE7CisJcmRhdGEtPmlkcy5wb3J0X25hbWUgPSAtMTsKKwlyZGF0YS0+aWRzLnBvcnRfaWQgPSBwb3J0X2lkOworCXJkYXRhLT5pZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047CiAKLQlycG9ydC0+ZGRfZGF0YSA9IHJkYXRhOwotCXJwb3J0LT5wb3J0X2lkID0gZHAtPmlkcy5wb3J0X2lkOwotCXJwb3J0LT5wb3J0X25hbWUgPSBkcC0+aWRzLnBvcnRfbmFtZTsKLQlycG9ydC0+bm9kZV9uYW1lID0gZHAtPmlkcy5ub2RlX25hbWU7Ci0JcnBvcnQtPnJvbGVzID0gZHAtPmlkcy5yb2xlczsKLQlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9IEZDX01JTl9NQVhfUEFZTE9BRDsKLQkvKgotCSAqIE5vdGU6IGFsbCB0aGlzIGxpYmZjIHJvZ3VlIHJwb3J0IGNvZGUgd2lsbCBiZSByZW1vdmVkIGZvcgotCSAqIHVwc3RyZWFtIHNvIGl0IGZpbmUgdGhhdCB0aGlzIGlzIHJlYWxseSB1Z2x5IGFuZCBoYWNreSByaWdodCBub3cuCi0JICovCi0JZGV2aWNlX2luaXRpYWxpemUoJnJwb3J0LT5kZXYpOwotCXJwb3J0LT5kZXYucmVsZWFzZSA9IGZjX3Jwb3J0X3JvZ3VlX2Rlc3Ryb3k7Ci0KKwlrcmVmX2luaXQoJnJkYXRhLT5rcmVmKTsKIAltdXRleF9pbml0KCZyZGF0YS0+cnBfbXV0ZXgpOwotCXJkYXRhLT5sb2NhbF9wb3J0ID0gZHAtPmxwOwotCXJkYXRhLT50cmFuc19zdGF0ZSA9IEZDX1BPUlRTVEFURV9ST0dVRTsKKwlyZGF0YS0+bG9jYWxfcG9ydCA9IGxwb3J0OwogCXJkYXRhLT5ycF9zdGF0ZSA9IFJQT1JUX1NUX0lOSVQ7CiAJcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfTk9ORTsKIAlyZGF0YS0+ZmxhZ3MgPSBGQ19SUF9GTEFHU19SRUNfU1VQUE9SVEVEOwotCXJkYXRhLT5vcHMgPSBOVUxMOwotCXJkYXRhLT5lX2RfdG92ID0gZHAtPmxwLT5lX2RfdG92OwotCXJkYXRhLT5yX2FfdG92ID0gZHAtPmxwLT5yX2FfdG92OworCXJkYXRhLT5lX2RfdG92ID0gbHBvcnQtPmVfZF90b3Y7CisJcmRhdGEtPnJfYV90b3YgPSBscG9ydC0+cl9hX3RvdjsKKwlyZGF0YS0+bWF4ZnJhbWVfc2l6ZSA9IEZDX01JTl9NQVhfUEFZTE9BRDsKIAlJTklUX0RFTEFZRURfV09SSygmcmRhdGEtPnJldHJ5X3dvcmssIGZjX3Jwb3J0X3RpbWVvdXQpOwogCUlOSVRfV09SSygmcmRhdGEtPmV2ZW50X3dvcmssIGZjX3Jwb3J0X3dvcmspOwotCS8qCi0JICogRm9yIGdvb2QgbWVhc3VyZSwgYnV0IG5vdCBuZWNlc3NhcnkgYXMgd2Ugc2hvdWxkIG9ubHkKLQkgKiBhZGQgUkVBTCBycG9ydCB0byB0aGUgbHBvcnQgbGlzdC4KLQkgKi8KLQlJTklUX0xJU1RfSEVBRCgmcmRhdGEtPnBlZXJzKTsKKwlpZiAocG9ydF9pZCAhPSBGQ19GSURfRElSX1NFUlYpCisJCWxpc3RfYWRkKCZyZGF0YS0+cGVlcnMsICZscG9ydC0+ZGlzYy5ycG9ydHMpOworCXJldHVybiByZGF0YTsKK30KIAotCXJldHVybiBycG9ydDsKKy8qKgorICogZmNfcnBvcnRfZGVzdHJveSgpIC0gZnJlZSBhIHJlbW90ZSBwb3J0IGFmdGVyIGxhc3QgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLgorICogQGtyZWY6IHBvaW50ZXIgdG8ga3JlZiBpbnNpZGUgc3RydWN0IGZjX3Jwb3J0X3ByaXYKKyAqLworc3RhdGljIHZvaWQgZmNfcnBvcnRfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CisKKwlyZGF0YSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZmNfcnBvcnRfcHJpdiwga3JlZik7CisJa2ZyZWUocmRhdGEpOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X3N0YXRlKCkgLSByZXR1cm4gYSBzdHJpbmcgZm9yIHRoZSBzdGF0ZSB0aGUgcnBvcnQgaXMgaW4KLSAqIEBycG9ydDogVGhlIHJwb3J0IHdob3NlIHN0YXRlIHdlIHdhbnQgdG8gZ2V0IGEgc3RyaW5nIGZvcgorICogQHJkYXRhOiByZW1vdGUgcG9ydCBwcml2YXRlIGRhdGEKICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmZjX3Jwb3J0X3N0YXRlKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCitzdGF0aWMgY29uc3QgY2hhciAqZmNfcnBvcnRfc3RhdGUoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQogewogCWNvbnN0IGNoYXIgKmNwOwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCiAJY3AgPSBmY19ycG9ydF9zdGF0ZV9uYW1lc1tyZGF0YS0+cnBfc3RhdGVdOwogCWlmICghY3ApCkBAIC0xOTEsMTUgKzIxMSwxNCBAQAogCiAvKioKICAqIGZjX3Jwb3J0X3N0YXRlX2VudGVyKCkgLSBDaGFuZ2UgdGhlIHJwb3J0J3Mgc3RhdGUKLSAqIEBycG9ydDogVGhlIHJwb3J0IHdob3NlIHN0YXRlIHNob3VsZCBjaGFuZ2UKKyAqIEByZGF0YTogVGhlIHJwb3J0IHdob3NlIHN0YXRlIHNob3VsZCBjaGFuZ2UKICAqIEBuZXc6IFRoZSBuZXcgc3RhdGUgb2YgdGhlIHJwb3J0CiAgKgogICogTG9ja2luZyBOb3RlOiBDYWxsZWQgd2l0aCB0aGUgcnBvcnQgbG9jayBoZWxkCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3N0YXRlX2VudGVyKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsCitzdGF0aWMgdm9pZCBmY19ycG9ydF9zdGF0ZV9lbnRlcihzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsCiAJCQkJIGVudW0gZmNfcnBvcnRfc3RhdGUgbmV3KQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCWlmIChyZGF0YS0+cnBfc3RhdGUgIT0gbmV3KQogCQlyZGF0YS0+cmV0cmllcyA9IDA7CiAJcmRhdGEtPnJwX3N0YXRlID0gbmV3OwpAQCAtMjA4LDE0NyArMjI3LDE4NyBAQAogc3RhdGljIHZvaWQgZmNfcnBvcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJdTMyIHBvcnRfaWQ7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2LCBldmVudF93b3JrKTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjX3Jwb3J0X3ByaXYsIGV2ZW50X3dvcmspOworCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpycDsKIAllbnVtIGZjX3Jwb3J0X2V2ZW50IGV2ZW50OwotCWVudW0gZmNfcnBvcnRfdHJhbnNfc3RhdGUgdHJhbnNfc3RhdGU7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCXN0cnVjdCBmY19ycG9ydF9vcGVyYXRpb25zICpycG9ydF9vcHM7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IFBSSVZfVE9fUlBPUlQocmRhdGEpOworCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBpZHM7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKIAogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAJZXZlbnQgPSByZGF0YS0+ZXZlbnQ7CiAJcnBvcnRfb3BzID0gcmRhdGEtPm9wczsKKwlycG9ydCA9IHJkYXRhLT5ycG9ydDsKIAotCWlmIChldmVudCA9PSBSUE9SVF9FVl9DUkVBVEVEKSB7Ci0JCXN0cnVjdCBmY19ycG9ydCAqbmV3X3Jwb3J0OwotCQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqbmV3X3JkYXRhOwotCQlzdHJ1Y3QgZmNfcnBvcnRfaWRlbnRpZmllcnMgaWRzOworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIndvcmsgZXZlbnQgJXVcbiIsIGV2ZW50KTsKIAotCQlpZHMucG9ydF9pZCA9IHJwb3J0LT5wb3J0X2lkOwotCQlpZHMucm9sZXMgPSBycG9ydC0+cm9sZXM7Ci0JCWlkcy5wb3J0X25hbWUgPSBycG9ydC0+cG9ydF9uYW1lOwotCQlpZHMubm9kZV9uYW1lID0gcnBvcnQtPm5vZGVfbmFtZTsKLQorCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQT1JUX0VWX1JFQURZOgorCQlpZHMgPSByZGF0YS0+aWRzOworCQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9OT05FOworCQlrcmVmX2dldCgmcmRhdGEtPmtyZWYpOwogCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKLQkJbmV3X3Jwb3J0ID0gZmNfcmVtb3RlX3BvcnRfYWRkKGxwb3J0LT5ob3N0LCAwLCAmaWRzKTsKLQkJaWYgKG5ld19ycG9ydCkgewotCQkJLyoKLQkJCSAqIFN3aXRjaCBmcm9tIHRoZSByb2d1ZSBycG9ydCB0byB0aGUgcnBvcnQKLQkJCSAqIHJldHVybmVkIGJ5IHRoZSBGQyBjbGFzcy4KLQkJCSAqLwotCQkJbmV3X3Jwb3J0LT5tYXhmcmFtZV9zaXplID0gcnBvcnQtPm1heGZyYW1lX3NpemU7Ci0KLQkJCW5ld19yZGF0YSA9IG5ld19ycG9ydC0+ZGRfZGF0YTsKLQkJCW5ld19yZGF0YS0+ZV9kX3RvdiA9IHJkYXRhLT5lX2RfdG92OwotCQkJbmV3X3JkYXRhLT5yX2FfdG92ID0gcmRhdGEtPnJfYV90b3Y7Ci0JCQluZXdfcmRhdGEtPm9wcyA9IHJkYXRhLT5vcHM7Ci0JCQluZXdfcmRhdGEtPmxvY2FsX3BvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKLQkJCW5ld19yZGF0YS0+ZmxhZ3MgPSBGQ19SUF9GTEFHU19SRUNfU1VQUE9SVEVEOwotCQkJbmV3X3JkYXRhLT50cmFuc19zdGF0ZSA9IEZDX1BPUlRTVEFURV9SRUFMOwotCQkJbXV0ZXhfaW5pdCgmbmV3X3JkYXRhLT5ycF9tdXRleCk7Ci0JCQlJTklUX0RFTEFZRURfV09SSygmbmV3X3JkYXRhLT5yZXRyeV93b3JrLAotCQkJCQkgIGZjX3Jwb3J0X3RpbWVvdXQpOwotCQkJSU5JVF9MSVNUX0hFQUQoJm5ld19yZGF0YS0+cGVlcnMpOwotCQkJSU5JVF9XT1JLKCZuZXdfcmRhdGEtPmV2ZW50X3dvcmssIGZjX3Jwb3J0X3dvcmspOwotCi0JCQlmY19ycG9ydF9zdGF0ZV9lbnRlcihuZXdfcnBvcnQsIFJQT1JUX1NUX1JFQURZKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImxpYmZjOiBGYWlsZWQgdG8gYWxsb2NhdGUgIgotCQkJICAgICAgICIgbWVtb3J5IGZvciBycG9ydCAoJTZ4KVxuIiwgaWRzLnBvcnRfaWQpOwotCQkJZXZlbnQgPSBSUE9SVF9FVl9GQUlMRUQ7CisJCWlmICghcnBvcnQpCisJCQlycG9ydCA9IGZjX3JlbW90ZV9wb3J0X2FkZChscG9ydC0+aG9zdCwgMCwgJmlkcyk7CisJCWlmICghcnBvcnQpIHsKKwkJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkZhaWxlZCB0byBhZGQgdGhlIHJwb3J0XG4iKTsKKwkJCWxwb3J0LT50dC5ycG9ydF9sb2dvZmYocmRhdGEpOworCQkJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCBscG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CisJCQlyZXR1cm47CiAJCX0KLQkJaWYgKHJwb3J0LT5wb3J0X2lkICE9IEZDX0ZJRF9ESVJfU0VSVikKLQkJCWlmIChycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKQotCQkJCXJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2sobHBvcnQsIHJwb3J0LAotCQkJCQkJCSAgUlBPUlRfRVZfRkFJTEVEKTsKLQkJcHV0X2RldmljZSgmcnBvcnQtPmRldik7Ci0JCXJwb3J0ID0gbmV3X3Jwb3J0OwotCQlyZGF0YSA9IG5ld19ycG9ydC0+ZGRfZGF0YTsKLQkJaWYgKHJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2spCi0JCQlycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKGxwb3J0LCBycG9ydCwgZXZlbnQpOwotCX0gZWxzZSBpZiAoKGV2ZW50ID09IFJQT1JUX0VWX0ZBSUxFRCkgfHwKLQkJICAgKGV2ZW50ID09IFJQT1JUX0VWX0xPR08pIHx8Ci0JCSAgIChldmVudCA9PSBSUE9SVF9FVl9TVE9QKSkgewotCQl0cmFuc19zdGF0ZSA9IHJkYXRhLT50cmFuc19zdGF0ZTsKKwkJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwkJaWYgKHJkYXRhLT5ycG9ydCkKKwkJCUZDX1JQT1JUX0RCRyhyZGF0YSwgInJwb3J0IGFscmVhZHkgYWxsb2NhdGVkXG4iKTsKKwkJcmRhdGEtPnJwb3J0ID0gcnBvcnQ7CisJCXJwb3J0LT5tYXhmcmFtZV9zaXplID0gcmRhdGEtPm1heGZyYW1lX3NpemU7CisJCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IHJkYXRhLT5zdXBwb3J0ZWRfY2xhc3NlczsKKworCQlycCA9IHJwb3J0LT5kZF9kYXRhOworCQlycC0+bG9jYWxfcG9ydCA9IGxwb3J0OworCQlycC0+cnBfc3RhdGUgPSByZGF0YS0+cnBfc3RhdGU7CisJCXJwLT5mbGFncyA9IHJkYXRhLT5mbGFnczsKKwkJcnAtPmVfZF90b3YgPSByZGF0YS0+ZV9kX3RvdjsKKwkJcnAtPnJfYV90b3YgPSByZGF0YS0+cl9hX3RvdjsKIAkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwotCQlpZiAocnBvcnRfb3BzLT5ldmVudF9jYWxsYmFjaykKLQkJCXJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2sobHBvcnQsIHJwb3J0LCBldmVudCk7Ci0JCWlmICh0cmFuc19zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfUk9HVUUpCi0JCQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKLQkJZWxzZSB7Ci0JCQlwb3J0X2lkID0gcnBvcnQtPnBvcnRfaWQ7CisKKwkJaWYgKHJwb3J0X29wcyAmJiBycG9ydF9vcHMtPmV2ZW50X2NhbGxiYWNrKSB7CisJCQlGQ19SUE9SVF9EQkcocmRhdGEsICJjYWxsYmFjayBldiAlZFxuIiwgZXZlbnQpOworCQkJcnBvcnRfb3BzLT5ldmVudF9jYWxsYmFjayhscG9ydCwgcmRhdGEsIGV2ZW50KTsKKwkJfQorCQlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIGxwb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQT1JUX0VWX0ZBSUxFRDoKKwljYXNlIFJQT1JUX0VWX0xPR086CisJY2FzZSBSUE9SVF9FVl9TVE9QOgorCQlwb3J0X2lkID0gcmRhdGEtPmlkcy5wb3J0X2lkOworCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisKKwkJaWYgKHBvcnRfaWQgIT0gRkNfRklEX0RJUl9TRVJWKSB7CisJCQltdXRleF9sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwkJCWxpc3RfZGVsKCZyZGF0YS0+cGVlcnMpOworCQkJbXV0ZXhfdW5sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwkJfQorCisJCWlmIChycG9ydF9vcHMgJiYgcnBvcnRfb3BzLT5ldmVudF9jYWxsYmFjaykgeworCQkJRkNfUlBPUlRfREJHKHJkYXRhLCAiY2FsbGJhY2sgZXYgJWRcbiIsIGV2ZW50KTsKKwkJCXJwb3J0X29wcy0+ZXZlbnRfY2FsbGJhY2sobHBvcnQsIHJkYXRhLCBldmVudCk7CisJCX0KKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZyZGF0YS0+cmV0cnlfd29yayk7CisKKwkJLyoKKwkJICogUmVzZXQgYW55IG91dHN0YW5kaW5nIGV4Y2hhbmdlcyBiZWZvcmUgZnJlZWluZyBycG9ydC4KKwkJICovCisJCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgMCwgcG9ydF9pZCk7CisJCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgcG9ydF9pZCwgMCk7CisKKwkJaWYgKHJwb3J0KSB7CisJCQlycCA9IHJwb3J0LT5kZF9kYXRhOworCQkJcnAtPnJwX3N0YXRlID0gUlBPUlRfU1RfREVMRVRFOworCQkJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwkJCXJkYXRhLT5ycG9ydCA9IE5VTEw7CisJCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAJCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocnBvcnQpOwotCQkJbHBvcnQtPnR0LmV4Y2hfbWdyX3Jlc2V0KGxwb3J0LCAwLCBwb3J0X2lkKTsKLQkJCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgcG9ydF9pZCwgMCk7CiAJCX0KLQl9IGVsc2UKKwkJa3JlZl9wdXQoJnJkYXRhLT5rcmVmLCBscG9ydC0+dHQucnBvcnRfZGVzdHJveSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKIAkJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCQlicmVhazsKKwl9CiB9CiAKIC8qKgogICogZmNfcnBvcnRfbG9naW4oKSAtIFN0YXJ0IHRoZSByZW1vdGUgcG9ydCBsb2dpbiBzdGF0ZSBtYWNoaW5lCi0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQKKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydAogICoKICAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sgaGVsZC4gVGhpcwogICogZnVuY3Rpb24gd2lsbCBob2xkIHRoZSBycG9ydCBsb2NrLCBjYWxsIGFuIF9lbnRlcl8qCiAgKiBmdW5jdGlvbiBhbmQgdGhlbiB1bmxvY2sgdGhlIHJwb3J0LgorICoKKyAqIFRoaXMgaW5kaWNhdGVzIHRoZSBpbnRlbnQgdG8gYmUgbG9nZ2VkIGludG8gdGhlIHJlbW90ZSBwb3J0LgorICogSWYgaXQgYXBwZWFycyB3ZSBhcmUgYWxyZWFkeSBsb2dnZWQgaW4sIEFESVNDIGlzIHVzZWQgdG8gdmVyaWZ5CisgKiB0aGUgc2V0dXAuCiAgKi8KLWludCBmY19ycG9ydF9sb2dpbihzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQoraW50IGZjX3Jwb3J0X2xvZ2luKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJMb2dpbiB0byBwb3J0XG4iKTsKLQotCWZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJwb3J0KTsKLQorCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CisJY2FzZSBSUE9SVF9TVF9SRUFEWToKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQURJU0MgcG9ydFxuIik7CisJCWZjX3Jwb3J0X2VudGVyX2FkaXNjKHJkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiTG9naW4gdG8gcG9ydFxuIik7CisJCWZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJkYXRhKTsKKwkJYnJlYWs7CisJfQogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAogCXJldHVybiAwOwogfQogCiAvKioKKyAqIGZjX3Jwb3J0X2VudGVyX2RlbGV0ZSgpIC0gc2NoZWR1bGUgYSByZW1vdGUgcG9ydCB0byBiZSBkZWxldGVkLgorICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0CisgKiBAZXZlbnQ6IGV2ZW50IHRvIHJlcG9ydCBhcyB0aGUgcmVhc29uIGZvciBkZWxldGlvbgorICoKKyAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGggdGhlIHJwb3J0IGxvY2sgaGVsZC4KKyAqCisgKiBBbGxvdyBzdGF0ZSBjaGFuZ2UgaW50byBERUxFVEUgb25seSBvbmNlLgorICoKKyAqIENhbGwgcXVldWVfd29yayBvbmx5IGlmIHRoZXJlJ3Mgbm8gZXZlbnQgYWxyZWFkeSBwZW5kaW5nLgorICogU2V0IHRoZSBuZXcgZXZlbnQgc28gdGhhdCB0aGUgb2xkIHBlbmRpbmcgZXZlbnQgd2lsbCBub3Qgb2NjdXIuCisgKiBTaW5jZSB3ZSBoYXZlIHRoZSBtdXRleCwgZXZlbiBpZiBmY19ycG9ydF93b3JrKCkgaXMgYWxyZWFkeSBzdGFydGVkLAorICogaXQnbGwgc2VlIHRoZSBuZXcgZXZlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX2RlbGV0ZShzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsCisJCQkJICBlbnVtIGZjX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWlmIChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfREVMRVRFKQorCQlyZXR1cm47CisKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJEZWxldGUgcG9ydFxuIik7CisKKwlmY19ycG9ydF9zdGF0ZV9lbnRlcihyZGF0YSwgUlBPUlRfU1RfREVMRVRFKTsKKworCWlmIChyZGF0YS0+ZXZlbnQgPT0gUlBPUlRfRVZfTk9ORSkKKwkJcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwgJnJkYXRhLT5ldmVudF93b3JrKTsKKwlyZGF0YS0+ZXZlbnQgPSBldmVudDsKK30KKworLyoqCiAgKiBmY19ycG9ydF9sb2dvZmYoKSAtIExvZ29mZiBhbmQgcmVtb3ZlIGFuIHJwb3J0Ci0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gYmUgcmVtb3ZlZAorICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0CiAgKgogICogTG9ja2luZyBOb3RlOiBDYWxsZWQgd2l0aG91dCB0aGUgcnBvcnQgbG9jayBoZWxkLiBUaGlzCiAgKiBmdW5jdGlvbiB3aWxsIGhvbGQgdGhlIHJwb3J0IGxvY2ssIGNhbGwgYW4gX2VudGVyXyoKICAqIGZ1bmN0aW9uIGFuZCB0aGVuIHVubG9jayB0aGUgcnBvcnQuCiAgKi8KLWludCBmY19ycG9ydF9sb2dvZmYoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK2ludCBmY19ycG9ydF9sb2dvZmYoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhKQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCiAJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlbW92ZSBwb3J0XG4iKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZW1vdmUgcG9ydFxuIik7CiAKLQlpZiAocmRhdGEtPnJwX3N0YXRlID09IFJQT1JUX1NUX05PTkUpIHsKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiUG9ydCBpbiBOT05FIHN0YXRlLCBub3QgcmVtb3ZpbmdcbiIpOworCWlmIChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfREVMRVRFKSB7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlBvcnQgaW4gRGVsZXRlIHN0YXRlLCBub3QgcmVtb3ZpbmdcbiIpOwogCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWZjX3Jwb3J0X2VudGVyX2xvZ28ocnBvcnQpOworCWZjX3Jwb3J0X2VudGVyX2xvZ28ocmRhdGEpOwogCiAJLyoKLQkgKiBDaGFuZ2UgdGhlIHN0YXRlIHRvIE5PTkUgc28gdGhhdCB3ZSBkaXNjYXJkCisJICogQ2hhbmdlIHRoZSBzdGF0ZSB0byBEZWxldGUgc28gdGhhdCB3ZSBkaXNjYXJkCiAJICogdGhlIHJlc3BvbnNlLgogCSAqLwotCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJwb3J0LCBSUE9SVF9TVF9OT05FKTsKLQotCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmRhdGEtPnJldHJ5X3dvcmspOwotCi0JbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQotCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX1NUT1A7Ci0JcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwgJnJkYXRhLT5ldmVudF93b3JrKTsKLQorCWZjX3Jwb3J0X2VudGVyX2RlbGV0ZShyZGF0YSwgUlBPUlRfRVZfU1RPUCk7CiAJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCiBvdXQ6CkBAIC0zNTcsMjYgKzQxNiwyNSBAQAogCiAvKioKICAqIGZjX3Jwb3J0X2VudGVyX3JlYWR5KCkgLSBUaGUgcnBvcnQgaXMgcmVhZHkKLSAqIEBycG9ydDogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydCB0aGF0IGlzIHJlYWR5CisgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgcm91dGluZS4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcmVhZHkoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3JlYWR5KHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwlmY19ycG9ydF9zdGF0ZV9lbnRlcihyZGF0YSwgUlBPUlRfU1RfUkVBRFkpOwogCi0JZmNfcnBvcnRfc3RhdGVfZW50ZXIocnBvcnQsIFJQT1JUX1NUX1JFQURZKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJQb3J0IGlzIFJlYWR5XG4iKTsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlBvcnQgaXMgUmVhZHlcbiIpOwotCi0JcmRhdGEtPmV2ZW50ID0gUlBPUlRfRVZfQ1JFQVRFRDsKLQlxdWV1ZV93b3JrKHJwb3J0X2V2ZW50X3F1ZXVlLCAmcmRhdGEtPmV2ZW50X3dvcmspOworCWlmIChyZGF0YS0+ZXZlbnQgPT0gUlBPUlRfRVZfTk9ORSkKKwkJcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwgJnJkYXRhLT5ldmVudF93b3JrKTsKKwlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9SRUFEWTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF90aW1lb3V0KCkgLSBIYW5kbGVyIGZvciB0aGUgcmV0cnlfd29yayB0aW1lci4KLSAqIEB3b3JrOiBUaGUgd29yayBzdHJ1Y3Qgb2YgdGhlIGZjX3Jwb3J0X2xpYmZjX3ByaXYKKyAqIEB3b3JrOiBUaGUgd29yayBzdHJ1Y3Qgb2YgdGhlIGZjX3Jwb3J0X3ByaXYKICAqCiAgKiBMb2NraW5nIE5vdGU6IENhbGxlZCB3aXRob3V0IHRoZSBycG9ydCBsb2NrIGhlbGQuIFRoaXMKICAqIGZ1bmN0aW9uIHdpbGwgaG9sZCB0aGUgcnBvcnQgbG9jaywgY2FsbCBhbiBfZW50ZXJfKgpAQCAtMzg0LDYzICs0NDIsNjMgQEAKICAqLwogc3RhdGljIHZvaWQgZmNfcnBvcnRfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2LCByZXRyeV93b3JrLndvcmspOwotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBQUklWX1RPX1JQT1JUKHJkYXRhKTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZjX3Jwb3J0X3ByaXYsIHJldHJ5X3dvcmsud29yayk7CiAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCiAJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKIAljYXNlIFJQT1JUX1NUX1BMT0dJOgotCQlmY19ycG9ydF9lbnRlcl9wbG9naShycG9ydCk7CisJCWZjX3Jwb3J0X2VudGVyX3Bsb2dpKHJkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBSUE9SVF9TVF9QUkxJOgotCQlmY19ycG9ydF9lbnRlcl9wcmxpKHJwb3J0KTsKKwkJZmNfcnBvcnRfZW50ZXJfcHJsaShyZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgUlBPUlRfU1RfUlRWOgotCQlmY19ycG9ydF9lbnRlcl9ydHYocnBvcnQpOworCQlmY19ycG9ydF9lbnRlcl9ydHYocmRhdGEpOwogCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX0xPR086Ci0JCWZjX3Jwb3J0X2VudGVyX2xvZ28ocnBvcnQpOworCQlmY19ycG9ydF9lbnRlcl9sb2dvKHJkYXRhKTsKKwkJYnJlYWs7CisJY2FzZSBSUE9SVF9TVF9BRElTQzoKKwkJZmNfcnBvcnRfZW50ZXJfYWRpc2MocmRhdGEpOwogCQlicmVhazsKIAljYXNlIFJQT1JUX1NUX1JFQURZOgogCWNhc2UgUlBPUlRfU1RfSU5JVDoKLQljYXNlIFJQT1JUX1NUX05PTkU6CisJY2FzZSBSUE9SVF9TVF9ERUxFVEU6CiAJCWJyZWFrOwogCX0KIAogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9lcnJvcigpIC0gRXJyb3IgaGFuZGxlciwgY2FsbGVkIG9uY2UgcmV0cmllcyBoYXZlIGJlZW4gZXhoYXVzdGVkCi0gKiBAcnBvcnQ6IFRoZSBmY19ycG9ydCBvYmplY3QKKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydAogICogQGZwOiBUaGUgZnJhbWUgcG9pbnRlcgogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUKICAqIGNhbGxpbmcgdGhpcyByb3V0aW5lCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsIHN0cnVjdCBmY19mcmFtZSAqZnApCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lcnJvcihzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEsIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0KLQlGQ19SUE9SVF9EQkcocnBvcnQsICJFcnJvciAlbGQgaW4gc3RhdGUgJXMsIHJldHJpZXMgJWRcbiIsCi0JCSAgICAgUFRSX0VSUihmcCksIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSwgcmRhdGEtPnJldHJpZXMpOworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkVycm9yICVsZCBpbiBzdGF0ZSAlcywgcmV0cmllcyAlZFxuIiwKKwkJICAgICBJU19FUlIoZnApID8gLVBUUl9FUlIoZnApIDogMCwKKwkJICAgICBmY19ycG9ydF9zdGF0ZShyZGF0YSksIHJkYXRhLT5yZXRyaWVzKTsKIAogCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CiAJY2FzZSBSUE9SVF9TVF9QTE9HSToKLQljYXNlIFJQT1JUX1NUX1BSTEk6CiAJY2FzZSBSUE9SVF9TVF9MT0dPOgotCQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9GQUlMRUQ7Ci0JCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJwb3J0LCBSUE9SVF9TVF9OT05FKTsKLQkJcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwKLQkJCSAgICZyZGF0YS0+ZXZlbnRfd29yayk7CisJCWZjX3Jwb3J0X2VudGVyX2RlbGV0ZShyZGF0YSwgUlBPUlRfRVZfRkFJTEVEKTsKIAkJYnJlYWs7CiAJY2FzZSBSUE9SVF9TVF9SVFY6Ci0JCWZjX3Jwb3J0X2VudGVyX3JlYWR5KHJwb3J0KTsKKwkJZmNfcnBvcnRfZW50ZXJfcmVhZHkocmRhdGEpOwogCQlicmVhazsKLQljYXNlIFJQT1JUX1NUX05PTkU6CisJY2FzZSBSUE9SVF9TVF9QUkxJOgorCWNhc2UgUlBPUlRfU1RfQURJU0M6CisJCWZjX3Jwb3J0X2VudGVyX2xvZ28ocmRhdGEpOworCQlicmVhazsKKwljYXNlIFJQT1JUX1NUX0RFTEVURToKIAljYXNlIFJQT1JUX1NUX1JFQURZOgogCWNhc2UgUlBPUlRfU1RfSU5JVDoKIAkJYnJlYWs7CkBAIC00NDksNyArNTA3LDcgQEAKIAogLyoqCiAgKiBmY19ycG9ydF9lcnJvcl9yZXRyeSgpIC0gRXJyb3IgaGFuZGxlciB3aGVuIHJldHJpZXMgYXJlIGRlc2lyZWQKLSAqIEBycG9ydDogVGhlIGZjX3Jwb3J0IG9iamVjdAorICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqIEBmcDogVGhlIGZyYW1lIHBvaW50ZXIKICAqCiAgKiBJZiB0aGUgZXJyb3Igd2FzIGFuIGV4Y2hhbmdlIHRpbWVvdXQgcmV0cnkgaW1tZWRpYXRlbHksCkBAIC00NTgsNDUgKzUxNiw0MyBAQAogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZQogICogY2FsbGluZyB0aGlzIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfZXJyb3JfcmV0cnkoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCkKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2Vycm9yX3JldHJ5KHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwKKwkJCQkgc3RydWN0IGZjX2ZyYW1lICpmcCkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGRlbGF5ID0gRkNfREVGX0VfRF9UT1Y7CiAKIAkvKiBtYWtlIHN1cmUgdGhpcyBpc24ndCBhbiBGQ19FWF9DTE9TRUQgZXJyb3IsIG5ldmVyIHJldHJ5IHRob3NlICovCiAJaWYgKFBUUl9FUlIoZnApID09IC1GQ19FWF9DTE9TRUQpCi0JCXJldHVybiBmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCQlyZXR1cm4gZmNfcnBvcnRfZXJyb3IocmRhdGEsIGZwKTsKIAogCWlmIChyZGF0YS0+cmV0cmllcyA8IHJkYXRhLT5sb2NhbF9wb3J0LT5tYXhfcnBvcnRfcmV0cnlfY291bnQpIHsKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiRXJyb3IgJWxkIGluIHN0YXRlICVzLCByZXRyeWluZ1xuIiwKLQkJCSAgICAgUFRSX0VSUihmcCksIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIkVycm9yICVsZCBpbiBzdGF0ZSAlcywgcmV0cnlpbmdcbiIsCisJCQkgICAgIFBUUl9FUlIoZnApLCBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOwogCQlyZGF0YS0+cmV0cmllcysrOwogCQkvKiBubyBhZGRpdGlvbmFsIGRlbGF5IG9uIGV4Y2hhbmdlIHRpbWVvdXRzICovCiAJCWlmIChQVFJfRVJSKGZwKSA9PSAtRkNfRVhfVElNRU9VVCkKIAkJCWRlbGF5ID0gMDsKLQkJZ2V0X2RldmljZSgmcnBvcnQtPmRldik7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmRhdGEtPnJldHJ5X3dvcmssIGRlbGF5KTsKIAkJcmV0dXJuOwogCX0KIAotCXJldHVybiBmY19ycG9ydF9lcnJvcihycG9ydCwgZnApOworCXJldHVybiBmY19ycG9ydF9lcnJvcihyZGF0YSwgZnApOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X3Bsb2dpX3JlY3ZfcmVzcCgpIC0gSGFuZGxlIGluY29taW5nIEVMUyBQTE9HSSByZXNwb25zZQogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQTE9HSSBleGNoYW5nZQogICogQGZwOiByZXNwb25zZSBmcmFtZQotICogQHJwX2FyZzogRmlicmUgQ2hhbm5lbCByZW1vdGUgcG9ydAorICogQHJkYXRhX2FyZzogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sKICAqIGhlbGQsIGJ1dCBpdCB3aWxsIGxvY2ssIGNhbGwgYW4gX2VudGVyXyogZnVuY3Rpb24gb3IgZmNfcnBvcnRfZXJyb3IKICAqIGFuZCB0aGVuIHVubG9jayB0aGUgcnBvcnQuCiAgKi8KIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3Bsb2dpX3Jlc3Aoc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqZnAsCi0JCQkJdm9pZCAqcnBfYXJnKQorCQkJCXZvaWQgKnJkYXRhX2FyZykKIHsKLQlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0ID0gcnBfYXJnOwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSA9IHJkYXRhX2FyZzsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAJc3RydWN0IGZjX2Vsc19mbG9naSAqcGxwID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgdG92OwpAQCAtNTA2LDI2ICs1NjIsMjYgQEAKIAogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBhIFBMT0dJIHJlc3BvbnNlXG4iKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIFBMT0dJICVzXG4iLCBmY19lbHNfcmVzcF90eXBlKGZwKSk7CiAKIAlpZiAocmRhdGEtPnJwX3N0YXRlICE9IFJQT1JUX1NUX1BMT0dJKSB7Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIGEgUExPR0kgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCi0JCQkgICAgICIlc1xuIiwgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBQTE9HSSByZXNwb25zZSwgYnV0IGluIHN0YXRlICIKKwkJCSAgICAgIiVzXG4iLCBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOwogCQlpZiAoSVNfRVJSKGZwKSkKIAkJCWdvdG8gZXJyOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoSVNfRVJSKGZwKSkgewotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCQlnb3RvIGVycjsKIAl9CiAKIAlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOwogCWlmIChvcCA9PSBFTFNfTFNfQUNDICYmCiAJICAgIChwbHAgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCpwbHApKSkgIT0gTlVMTCkgewotCQlycG9ydC0+cG9ydF9uYW1lID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbHAtPmZsX3d3cG4pOwotCQlycG9ydC0+bm9kZV9uYW1lID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbHAtPmZsX3d3bm4pOworCQlyZGF0YS0+aWRzLnBvcnRfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmcGxwLT5mbF93d3BuKTsKKwkJcmRhdGEtPmlkcy5ub2RlX25hbWUgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJnBscC0+Zmxfd3dubik7CiAKIAkJdG92ID0gbnRvaGwocGxwLT5mbF9jc3Auc3BfZV9kX3Rvdik7CiAJCWlmIChudG9ocyhwbHAtPmZsX2NzcC5zcF9mZWF0dXJlcykgJiBGQ19TUF9GVF9FRFRSKQpAQCAtNTM3LDc1ICs1OTMsNjQgQEAKIAkJaWYgKGNzc3Bfc2VxIDwgY3NwX3NlcSkKIAkJCWNzcF9zZXEgPSBjc3NwX3NlcTsKIAkJcmRhdGEtPm1heF9zZXEgPSBjc3Bfc2VxOwotCQlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9Ci0JCQlmY19wbG9naV9nZXRfbWF4ZnJhbWUocGxwLCBscG9ydC0+bWZzKTsKLQotCQkvKgotCQkgKiBJZiB0aGUgcnBvcnQgaXMgb25lIG9mIHRoZSB3ZWxsIGtub3duIGFkZHJlc3NlcwotCQkgKiB3ZSBza2lwIFBSTEkgYW5kIFJUViBhbmQgZ28gc3RyYWlnaHQgdG8gUkVBRFkuCi0JCSAqLwotCQlpZiAocnBvcnQtPnBvcnRfaWQgPj0gRkNfRklEX0RPTV9NR1IpCi0JCQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7Ci0JCWVsc2UKLQkJCWZjX3Jwb3J0X2VudGVyX3BybGkocnBvcnQpOworCQlyZGF0YS0+bWF4ZnJhbWVfc2l6ZSA9IGZjX3Bsb2dpX2dldF9tYXhmcmFtZShwbHAsIGxwb3J0LT5tZnMpOworCQlmY19ycG9ydF9lbnRlcl9wcmxpKHJkYXRhKTsKIAl9IGVsc2UKLQkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKIAogb3V0OgogCWZjX2ZyYW1lX2ZyZWUoZnApOwogZXJyOgogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIHJkYXRhLT5sb2NhbF9wb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9lbnRlcl9wbG9naSgpIC0gU2VuZCBQb3J0IExvZ2luIChQTE9HSSkgcmVxdWVzdCB0byBwZWVyCi0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gc2VuZCBQTE9HSSB0bworICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4cGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgcm91dGluZS4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcGxvZ2koc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3Bsb2dpKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlBvcnQgZW50ZXJlZCBQTE9HSSBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAotCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7CisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUG9ydCBlbnRlcmVkIFBMT0dJIHN0YXRlIGZyb20gJXMgc3RhdGVcbiIsCisJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAotCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJwb3J0LCBSUE9SVF9TVF9QTE9HSSk7CisJZmNfcnBvcnRfc3RhdGVfZW50ZXIocmRhdGEsIFJQT1JUX1NUX1BMT0dJKTsKIAotCXJwb3J0LT5tYXhmcmFtZV9zaXplID0gRkNfTUlOX01BWF9QQVlMT0FEOworCXJkYXRhLT5tYXhmcmFtZV9zaXplID0gRkNfTUlOX01BWF9QQVlMT0FEOwogCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZihzdHJ1Y3QgZmNfZWxzX2Zsb2dpKSk7CiAJaWYgKCFmcCkgewotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOwogCQlyZXR1cm47CiAJfQogCXJkYXRhLT5lX2RfdG92ID0gbHBvcnQtPmVfZF90b3Y7CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19QTE9HSSwKLQkJCQkgIGZjX3Jwb3J0X3Bsb2dpX3Jlc3AsIHJwb3J0LCBscG9ydC0+ZV9kX3RvdikpCi0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcmRhdGEtPmlkcy5wb3J0X2lkLCBmcCwgRUxTX1BMT0dJLAorCQkJCSAgZmNfcnBvcnRfcGxvZ2lfcmVzcCwgcmRhdGEsIGxwb3J0LT5lX2RfdG92KSkKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKIAllbHNlCi0JCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOworCQlrcmVmX2dldCgmcmRhdGEtPmtyZWYpOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X3BybGlfcmVzcCgpIC0gUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVzcG9uc2UgaGFuZGxlcgogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQUkxJIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCi0gKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CisgKiBAcmRhdGFfYXJnOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgcnBvcnQgbG9jawogICogaGVsZCwgYnV0IGl0IHdpbGwgbG9jaywgY2FsbCBhbiBfZW50ZXJfKiBmdW5jdGlvbiBvciBmY19ycG9ydF9lcnJvcgogICogYW5kIHRoZW4gdW5sb2NrIHRoZSBycG9ydC4KICAqLwogc3RhdGljIHZvaWQgZmNfcnBvcnRfcHJsaV9yZXNwKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkJICAgICAgIHZvaWQgKnJwX2FyZykKKwkJCSAgICAgICB2b2lkICpyZGF0YV9hcmcpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHJwX2FyZzsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPSByZGF0YV9hcmc7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZjX2Vsc19wcmxpIHBybGk7CiAJCXN0cnVjdCBmY19lbHNfc3BwIHNwcDsKQEAgLTYxNiwyMSArNjYxLDI0IEBACiAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgYSBQUkxJIHJlc3BvbnNlXG4iKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIFBSTEkgJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKIAogCWlmIChyZGF0YS0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfUFJMSSkgewotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBhIFBSTEkgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCi0JCQkgICAgICIlc1xuIiwgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBQUkxJIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgorCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAJCWlmIChJU19FUlIoZnApKQogCQkJZ290byBlcnI7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJCWdvdG8gZXJyOwogCX0KIAorCS8qIHJlaW5pdGlhbGl6ZSByZW1vdGUgcG9ydCByb2xlcyAqLworCXJkYXRhLT5pZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047CisKIAlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOwogCWlmIChvcCA9PSBFTFNfTFNfQUNDKSB7CiAJCXBwID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqcHApKTsKQEAgLTY0MCw5MCArNjg4LDgyIEBACiAJCQkJcmRhdGEtPmZsYWdzIHw9IEZDX1JQX0ZMQUdTX1JFVFJZOwogCQl9CiAKLQkJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX0NMQVNTMzsKKwkJcmRhdGEtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX0NMQVNTMzsKIAkJaWYgKGZjcF9wYXJtICYgRkNQX1NQUEZfSU5JVF9GQ04pCiAJCQlyb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9JTklUSUFUT1I7CiAJCWlmIChmY3BfcGFybSAmIEZDUF9TUFBGX1RBUkdfRkNOKQogCQkJcm9sZXMgfD0gRkNfUlBPUlRfUk9MRV9GQ1BfVEFSR0VUOwogCi0JCXJwb3J0LT5yb2xlcyA9IHJvbGVzOwotCQlmY19ycG9ydF9lbnRlcl9ydHYocnBvcnQpOworCQlyZGF0YS0+aWRzLnJvbGVzID0gcm9sZXM7CisJCWZjX3Jwb3J0X2VudGVyX3J0dihyZGF0YSk7CiAKIAl9IGVsc2UgewotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJCYWQgRUxTIHJlc3BvbnNlIGZvciBQUkxJIGNvbW1hbmRcbiIpOwotCQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9GQUlMRUQ7Ci0JCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJwb3J0LCBSUE9SVF9TVF9OT05FKTsKLQkJcXVldWVfd29yayhycG9ydF9ldmVudF9xdWV1ZSwgJnJkYXRhLT5ldmVudF93b3JrKTsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQmFkIEVMUyByZXNwb25zZSBmb3IgUFJMSSBjb21tYW5kXG4iKTsKKwkJZmNfcnBvcnRfZW50ZXJfZGVsZXRlKHJkYXRhLCBSUE9SVF9FVl9GQUlMRUQpOwogCX0KIAogb3V0OgogCWZjX2ZyYW1lX2ZyZWUoZnApOwogZXJyOgogCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKLQlwdXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIHJkYXRhLT5sb2NhbF9wb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9sb2dvX3Jlc3AoKSAtIExvZ291dCAoTE9HTykgcmVzcG9uc2UgaGFuZGxlcgogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBMT0dPIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCi0gKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CisgKiBAcmRhdGFfYXJnOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgcnBvcnQgbG9jawogICogaGVsZCwgYnV0IGl0IHdpbGwgbG9jaywgY2FsbCBhbiBfZW50ZXJfKiBmdW5jdGlvbiBvciBmY19ycG9ydF9lcnJvcgogICogYW5kIHRoZW4gdW5sb2NrIHRoZSBycG9ydC4KICAqLwogc3RhdGljIHZvaWQgZmNfcnBvcnRfbG9nb19yZXNwKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkJICAgICAgIHZvaWQgKnJwX2FyZykKKwkJCSAgICAgICB2b2lkICpyZGF0YV9hcmcpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHJwX2FyZzsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEgPSByZGF0YV9hcmc7CiAJdTggb3A7CiAKIAltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwogCi0JRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgYSBMT0dPIHJlc3BvbnNlXG4iKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIExPR08gJXNcbiIsIGZjX2Vsc19yZXNwX3R5cGUoZnApKTsKIAogCWlmIChyZGF0YS0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfTE9HTykgewotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBhIExPR08gcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCi0JCQkgICAgICIlc1xuIiwgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBMT0dPIHJlc3BvbnNlLCBidXQgaW4gc3RhdGUgIgorCQkJICAgICAiJXNcbiIsIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAJCWlmIChJU19FUlIoZnApKQogCQkJZ290byBlcnI7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChJU19FUlIoZnApKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJCWdvdG8gZXJyOwogCX0KIAogCW9wID0gZmNfZnJhbWVfcGF5bG9hZF9vcChmcCk7Ci0JaWYgKG9wID09IEVMU19MU19BQ0MpIHsKLQkJZmNfcnBvcnRfZW50ZXJfcnR2KHJwb3J0KTsKLQl9IGVsc2UgewotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJCYWQgRUxTIHJlc3BvbnNlIGZvciBMT0dPIGNvbW1hbmRcbiIpOwotCQlyZGF0YS0+ZXZlbnQgPSBSUE9SVF9FVl9MT0dPOwotCQlmY19ycG9ydF9zdGF0ZV9lbnRlcihycG9ydCwgUlBPUlRfU1RfTk9ORSk7Ci0JCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsICZyZGF0YS0+ZXZlbnRfd29yayk7Ci0JfQorCWlmIChvcCAhPSBFTFNfTFNfQUNDKQorCQlGQ19SUE9SVF9EQkcocmRhdGEsICJCYWQgRUxTIHJlc3BvbnNlIG9wICV4IGZvciBMT0dPIGNvbW1hbmRcbiIsCisJCQkgICAgIG9wKTsKKwlmY19ycG9ydF9lbnRlcl9kZWxldGUocmRhdGEsIFJQT1JUX0VWX0xPR08pOwogCiBvdXQ6CiAJZmNfZnJhbWVfZnJlZShmcCk7CiBlcnI6CiAJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwotCXB1dF9kZXZpY2UoJnJwb3J0LT5kZXYpOworCWtyZWZfcHV0KCZyZGF0YS0+a3JlZiwgcmRhdGEtPmxvY2FsX3BvcnQtPnR0LnJwb3J0X2Rlc3Ryb3kpOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X2VudGVyX3BybGkoKSAtIFNlbmQgUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVxdWVzdCB0byBwZWVyCi0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gc2VuZCBQUkxJIHRvCisgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQgZGF0YQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogICogdGhpcyByb3V0aW5lLgogICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9wcmxpKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9wcmxpKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZjX2Vsc19wcmxpIHBybGk7CkBAIC03MzEsMjkgKzc3MSwzOCBAQAogCX0gKnBwOwogCXN0cnVjdCBmY19mcmFtZSAqZnA7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJQb3J0IGVudGVyZWQgUFJMSSBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAotCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7Ci0KLQlmY19ycG9ydF9zdGF0ZV9lbnRlcihycG9ydCwgUlBPUlRfU1RfUFJMSSk7Ci0KLQlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2YoKnBwKSk7Ci0JaWYgKCFmcCkgewotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCS8qCisJICogSWYgdGhlIHJwb3J0IGlzIG9uZSBvZiB0aGUgd2VsbCBrbm93biBhZGRyZXNzZXMKKwkgKiB3ZSBza2lwIFBSTEkgYW5kIFJUViBhbmQgZ28gc3RyYWlnaHQgdG8gUkVBRFkuCisJICovCisJaWYgKHJkYXRhLT5pZHMucG9ydF9pZCA+PSBGQ19GSURfRE9NX01HUikgeworCQlmY19ycG9ydF9lbnRlcl9yZWFkeShyZGF0YSk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19QUkxJLAotCQkJCSAgZmNfcnBvcnRfcHJsaV9yZXNwLCBycG9ydCwgbHBvcnQtPmVfZF90b3YpKQotCQlmY19ycG9ydF9lcnJvcl9yZXRyeShycG9ydCwgZnApOworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlBvcnQgZW50ZXJlZCBQUkxJIHN0YXRlIGZyb20gJXMgc3RhdGVcbiIsCisJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKKworCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJkYXRhLCBSUE9SVF9TVF9QUkxJKTsKKworCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqcHApKTsKKwlpZiAoIWZwKSB7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCByZGF0YS0+aWRzLnBvcnRfaWQsIGZwLCBFTFNfUFJMSSwKKwkJCQkgIGZjX3Jwb3J0X3BybGlfcmVzcCwgcmRhdGEsIGxwb3J0LT5lX2RfdG92KSkKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKIAllbHNlCi0JCWdldF9kZXZpY2UoJnJwb3J0LT5kZXYpOworCQlrcmVmX2dldCgmcmRhdGEtPmtyZWYpOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X2Vsc19ydHZfcmVzcCgpIC0gUmVxdWVzdCBUaW1lb3V0IFZhbHVlIHJlc3BvbnNlIGhhbmRsZXIKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUlRWIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCi0gKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CisgKiBAcmRhdGFfYXJnOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqCiAgKiBNYW55IHRhcmdldHMgZG9uJ3Qgc2VlbSB0byBzdXBwb3J0IHRoaXMuCiAgKgpAQCAtNzYyLDI2ICs4MTEsMjUgQEAKICAqIGFuZCB0aGVuIHVubG9jayB0aGUgcnBvcnQuCiAgKi8KIHN0YXRpYyB2b2lkIGZjX3Jwb3J0X3J0dl9yZXNwKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAotCQkJICAgICAgdm9pZCAqcnBfYXJnKQorCQkJICAgICAgdm9pZCAqcmRhdGFfYXJnKQogewotCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBycF9hcmc7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhID0gcmRhdGFfYXJnOwogCXU4IG9wOwogCiAJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIGEgUlRWIHJlc3BvbnNlXG4iKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIFJUViAlc1xuIiwgZmNfZWxzX3Jlc3BfdHlwZShmcCkpOwogCiAJaWYgKHJkYXRhLT5ycF9zdGF0ZSAhPSBSUE9SVF9TVF9SVFYpIHsKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgYSBSVFYgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCi0JCQkgICAgICIlc1xuIiwgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBSVFYgcmVzcG9uc2UsIGJ1dCBpbiBzdGF0ZSAiCisJCQkgICAgICIlc1xuIiwgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAkJaWYgKElTX0VSUihmcCkpCiAJCQlnb3RvIGVycjsKIAkJZ290byBvdXQ7CiAJfQogCiAJaWYgKElTX0VSUihmcCkpIHsKLQkJZmNfcnBvcnRfZXJyb3IocnBvcnQsIGZwKTsKKwkJZmNfcnBvcnRfZXJyb3IocmRhdGEsIGZwKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC04MDcsMTg0ICs4NTUsMzc2IEBACiAJCX0KIAl9CiAKLQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7CisJZmNfcnBvcnRfZW50ZXJfcmVhZHkocmRhdGEpOwogCiBvdXQ6CiAJZmNfZnJhbWVfZnJlZShmcCk7CiBlcnI6CiAJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOwotCXB1dF9kZXZpY2UoJnJwb3J0LT5kZXYpOworCWtyZWZfcHV0KCZyZGF0YS0+a3JlZiwgcmRhdGEtPmxvY2FsX3BvcnQtPnR0LnJwb3J0X2Rlc3Ryb3kpOwogfQogCiAvKioKICAqIGZjX3Jwb3J0X2VudGVyX3J0digpIC0gU2VuZCBSZXF1ZXN0IFRpbWVvdXQgVmFsdWUgKFJUVikgcmVxdWVzdCB0byBwZWVyCi0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gc2VuZCBSVFYgdG8KKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleHBlY3RlZCB0byBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCiAgKiB0aGlzIHJvdXRpbmUuCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X2VudGVyX3J0dihzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQorc3RhdGljIHZvaWQgZmNfcnBvcnRfZW50ZXJfcnR2KHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKIAlzdHJ1Y3QgZmNfZnJhbWUgKmZwOwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlBvcnQgZW50ZXJlZCBSVFYgc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKLQkJICAgICBmY19ycG9ydF9zdGF0ZShycG9ydCkpOworCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlBvcnQgZW50ZXJlZCBSVFYgc3RhdGUgZnJvbSAlcyBzdGF0ZVxuIiwKKwkJICAgICBmY19ycG9ydF9zdGF0ZShyZGF0YSkpOwogCi0JZmNfcnBvcnRfc3RhdGVfZW50ZXIocnBvcnQsIFJQT1JUX1NUX1JUVik7CisJZmNfcnBvcnRfc3RhdGVfZW50ZXIocmRhdGEsIFJQT1JUX1NUX1JUVik7CiAKIAlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2Yoc3RydWN0IGZjX2Vsc19ydHYpKTsKIAlpZiAoIWZwKSB7Ci0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCBycG9ydCwgZnAsIEVMU19SVFYsCi0JCQkJICAgICBmY19ycG9ydF9ydHZfcmVzcCwgcnBvcnQsIGxwb3J0LT5lX2RfdG92KSkKLQkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCByZGF0YS0+aWRzLnBvcnRfaWQsIGZwLCBFTFNfUlRWLAorCQkJCSAgICAgZmNfcnBvcnRfcnR2X3Jlc3AsIHJkYXRhLCBscG9ydC0+ZV9kX3RvdikpCisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJZWxzZQotCQlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwkJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9lbnRlcl9sb2dvKCkgLSBTZW5kIExvZ291dCAoTE9HTykgcmVxdWVzdCB0byBwZWVyCi0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdG8gc2VuZCBMT0dPIHRvCisgKiBAcmRhdGE6IHByaXZhdGUgcmVtb3RlIHBvcnQgZGF0YQogICoKICAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogICogdGhpcyByb3V0aW5lLgogICovCi1zdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9sb2dvKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9sb2dvKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSkKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKIAlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKIAotCUZDX1JQT1JUX0RCRyhycG9ydCwgIlBvcnQgZW50ZXJlZCBMT0dPIHN0YXRlIGZyb20gJXMgc3RhdGVcbiIsCi0JCSAgICAgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJQb3J0IGVudGVyZWQgTE9HTyBzdGF0ZSBmcm9tICVzIHN0YXRlXG4iLAorCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJkYXRhKSk7CiAKLQlmY19ycG9ydF9zdGF0ZV9lbnRlcihycG9ydCwgUlBPUlRfU1RfTE9HTyk7CisJZmNfcnBvcnRfc3RhdGVfZW50ZXIocmRhdGEsIFJQT1JUX1NUX0xPR08pOwogCiAJZnAgPSBmY19mcmFtZV9hbGxvYyhscG9ydCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfbG9nbykpOwogCWlmICghZnApIHsKLQkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocnBvcnQsIGZwKTsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICghbHBvcnQtPnR0LmVsc2N0X3NlbmQobHBvcnQsIHJwb3J0LCBmcCwgRUxTX0xPR08sCi0JCQkJICBmY19ycG9ydF9sb2dvX3Jlc3AsIHJwb3J0LCBscG9ydC0+ZV9kX3RvdikpCi0JCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJwb3J0LCBmcCk7CisJaWYgKCFscG9ydC0+dHQuZWxzY3Rfc2VuZChscG9ydCwgcmRhdGEtPmlkcy5wb3J0X2lkLCBmcCwgRUxTX0xPR08sCisJCQkJICBmY19ycG9ydF9sb2dvX3Jlc3AsIHJkYXRhLCBscG9ydC0+ZV9kX3RvdikpCisJCWZjX3Jwb3J0X2Vycm9yX3JldHJ5KHJkYXRhLCBmcCk7CiAJZWxzZQotCQlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKKwkJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKIH0KIAotCiAvKioKLSAqIGZjX3Jwb3J0X3JlY3ZfcmVxKCkgLSBSZWNlaXZlIGEgcmVxdWVzdCBmcm9tIGEgcnBvcnQKLSAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUExPR0kgZXhjaGFuZ2UKKyAqIGZjX3Jwb3J0X2Vsc19hZGlzY19yZXNwKCkgLSBBZGRyZXNzIERpc2NvdmVyeSByZXNwb25zZSBoYW5kbGVyCisgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIEFESVNDIGV4Y2hhbmdlCiAgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCi0gKiBAcnBfYXJnOiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0CisgKiBAcmRhdGFfYXJnOiByZW1vdGUgcG9ydCBwcml2YXRlLgogICoKLSAqIExvY2tpbmcgTm90ZTogQ2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sgaGVsZC4gVGhpcwotICogZnVuY3Rpb24gd2lsbCBob2xkIHRoZSBycG9ydCBsb2NrLCBjYWxsIGFuIF9lbnRlcl8qCi0gKiBmdW5jdGlvbiBhbmQgdGhlbiB1bmxvY2sgdGhlIHJwb3J0LgorICogTG9ja2luZyBOb3RlOiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIHJwb3J0IGxvY2sKKyAqIGhlbGQsIGJ1dCBpdCB3aWxsIGxvY2ssIGNhbGwgYW4gX2VudGVyXyogZnVuY3Rpb24gb3IgZmNfcnBvcnRfZXJyb3IKKyAqIGFuZCB0aGVuIHVubG9jayB0aGUgcnBvcnQuCiAgKi8KLXZvaWQgZmNfcnBvcnRfcmVjdl9yZXEoc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqZnAsCi0JCSAgICAgICBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQorc3RhdGljIHZvaWQgZmNfcnBvcnRfYWRpc2NfcmVzcChzdHJ1Y3QgZmNfc2VxICpzcCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKKwkJCSAgICAgIHZvaWQgKnJkYXRhX2FyZykKIHsKLQlzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiAqcmRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKLQlzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0ID0gcmRhdGEtPmxvY2FsX3BvcnQ7Ci0KLQlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKLQlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIGVsc19kYXRhOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSA9IHJkYXRhX2FyZzsKKwlzdHJ1Y3QgZmNfZWxzX2FkaXNjICphZGlzYzsKIAl1OCBvcDsKIAogCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CiAKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBhIEFESVNDIHJlc3BvbnNlXG4iKTsKKworCWlmIChyZGF0YS0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfQURJU0MpIHsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgYSBBRElTQyByZXNwIGJ1dCBpbiBzdGF0ZSAlc1xuIiwKKwkJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKKwkJaWYgKElTX0VSUihmcCkpCisJCQlnb3RvIGVycjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKElTX0VSUihmcCkpIHsKKwkJZmNfcnBvcnRfZXJyb3IocmRhdGEsIGZwKTsKKwkJZ290byBlcnI7CisJfQorCisJLyoKKwkgKiBJZiBhZGRyZXNzIHZlcmlmaWNhdGlvbiBmYWlsZWQuICBDb25zaWRlciB1cyBsb2dnZWQgb3V0IG9mIHRoZSBycG9ydC4KKwkgKiBTaW5jZSB0aGUgcnBvcnQgaXMgc3RpbGwgaW4gZGlzY292ZXJ5LCB3ZSB3YW50IHRvIGJlCisJICogbG9nZ2VkIGluLCBzbyBnbyB0byBQTE9HSSBzdGF0ZS4gIE90aGVyd2lzZSwgZ28gYmFjayB0byBSRUFEWS4KKwkgKi8KKwlvcCA9IGZjX2ZyYW1lX3BheWxvYWRfb3AoZnApOworCWFkaXNjID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqYWRpc2MpKTsKKwlpZiAob3AgIT0gRUxTX0xTX0FDQyB8fCAhYWRpc2MgfHwKKwkgICAgbnRvaDI0KGFkaXNjLT5hZGlzY19wb3J0X2lkKSAhPSByZGF0YS0+aWRzLnBvcnRfaWQgfHwKKwkgICAgZ2V0X3VuYWxpZ25lZF9iZTY0KCZhZGlzYy0+YWRpc2Nfd3dwbikgIT0gcmRhdGEtPmlkcy5wb3J0X25hbWUgfHwKKwkgICAgZ2V0X3VuYWxpZ25lZF9iZTY0KCZhZGlzYy0+YWRpc2Nfd3dubikgIT0gcmRhdGEtPmlkcy5ub2RlX25hbWUpIHsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQURJU0MgZXJyb3Igb3IgbWlzbWF0Y2hcbiIpOworCQlmY19ycG9ydF9lbnRlcl9wbG9naShyZGF0YSk7CisJfSBlbHNlIHsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiQURJU0MgT0tcbiIpOworCQlmY19ycG9ydF9lbnRlcl9yZWFkeShyZGF0YSk7CisJfQorb3V0OgorCWZjX2ZyYW1lX2ZyZWUoZnApOworZXJyOgorCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwlrcmVmX3B1dCgmcmRhdGEtPmtyZWYsIHJkYXRhLT5sb2NhbF9wb3J0LT50dC5ycG9ydF9kZXN0cm95KTsKK30KKworLyoqCisgKiBmY19ycG9ydF9lbnRlcl9hZGlzYygpIC0gU2VuZCBBZGRyZXNzIERpc2NvdmVyIChBRElTQykgcmVxdWVzdCB0byBwZWVyCisgKiBAcmRhdGE6IHJlbW90ZSBwb3J0IHByaXZhdGUgZGF0YQorICoKKyAqIExvY2tpbmcgTm90ZTogVGhlIHJwb3J0IGxvY2sgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZworICogdGhpcyByb3V0aW5lLgorICovCitzdGF0aWMgdm9pZCBmY19ycG9ydF9lbnRlcl9hZGlzYyhzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGEpCit7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OworCXN0cnVjdCBmY19mcmFtZSAqZnA7CisKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJzZW5kaW5nIEFESVNDIGZyb20gJXMgc3RhdGVcbiIsCisJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKKworCWZjX3Jwb3J0X3N0YXRlX2VudGVyKHJkYXRhLCBSUE9SVF9TVF9BRElTQyk7CisKKwlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2Yoc3RydWN0IGZjX2Vsc19hZGlzYykpOworCWlmICghZnApIHsKKwkJZmNfcnBvcnRfZXJyb3JfcmV0cnkocmRhdGEsIGZwKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWxwb3J0LT50dC5lbHNjdF9zZW5kKGxwb3J0LCByZGF0YS0+aWRzLnBvcnRfaWQsIGZwLCBFTFNfQURJU0MsCisJCQkJICBmY19ycG9ydF9hZGlzY19yZXNwLCByZGF0YSwgbHBvcnQtPmVfZF90b3YpKQorCQlmY19ycG9ydF9lcnJvcl9yZXRyeShyZGF0YSwgZnApOworCWVsc2UKKwkJa3JlZl9nZXQoJnJkYXRhLT5rcmVmKTsKK30KKworLyoqCisgKiBmY19ycG9ydF9yZWN2X2FkaXNjX3JlcSgpIC0gSGFuZGxlIGluY29taW5nIEFkZHJlc3MgRGlzY292ZXJ5IChBRElTQykgUmVxdWVzdAorICogQHJkYXRhOiByZW1vdGUgcG9ydCBwcml2YXRlCisgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIEFESVNDIGV4Y2hhbmdlCisgKiBAaW5fZnA6IEFESVNDIHJlcXVlc3QgZnJhbWUKKyAqCisgKiBMb2NraW5nIE5vdGU6ICBDYWxsZWQgd2l0aCB0aGUgbHBvcnQgYW5kIHJwb3J0IGxvY2tzIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfYWRpc2NfcmVxKHN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YSwKKwkJCQkgICAgc3RydWN0IGZjX3NlcSAqc3AsIHN0cnVjdCBmY19mcmFtZSAqaW5fZnApCit7CisJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OworCXN0cnVjdCBmY19mcmFtZSAqZnA7CisJc3RydWN0IGZjX2V4Y2ggKmVwID0gZmNfc2VxX2V4Y2goc3ApOworCXN0cnVjdCBmY19lbHNfYWRpc2MgKmFkaXNjOworCXN0cnVjdCBmY19zZXFfZWxzX2RhdGEgcmp0X2RhdGE7CisJdTMyIGZfY3RsOworCisJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgQURJU0MgcmVxdWVzdFxuIik7CisKKwlhZGlzYyA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGluX2ZwLCBzaXplb2YoKmFkaXNjKSk7CisJaWYgKCFhZGlzYykgeworCQlyanRfZGF0YS5mcCA9IE5VTEw7CisJCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfUFJPVDsKKwkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfSU5WX0xFTjsKKwkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZyanRfZGF0YSk7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlmcCA9IGZjX2ZyYW1lX2FsbG9jKGxwb3J0LCBzaXplb2YoKmFkaXNjKSk7CisJaWYgKCFmcCkKKwkJZ290byBkcm9wOworCWZjX2FkaXNjX2ZpbGwobHBvcnQsIGZwKTsKKwlhZGlzYyA9IGZjX2ZyYW1lX3BheWxvYWRfZ2V0KGZwLCBzaXplb2YoKmFkaXNjKSk7CisJYWRpc2MtPmFkaXNjX2NtZCA9IEVMU19MU19BQ0M7CisJc3AgPSBscG9ydC0+dHQuc2VxX3N0YXJ0X25leHQoc3ApOworCWZfY3RsID0gRkNfRkNfRVhfQ1RYIHwgRkNfRkNfTEFTVF9TRVEgfCBGQ19GQ19FTkRfU0VRIHwgRkNfRkNfU0VRX0lOSVQ7CisJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRUxTX1JFUCwgZXAtPmRpZCwgZXAtPnNpZCwKKwkJICAgICAgIEZDX1RZUEVfRUxTLCBmX2N0bCwgMCk7CisJbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBzcCwgZnApOworZHJvcDoKKwlmY19mcmFtZV9mcmVlKGluX2ZwKTsKK30KKworLyoqCisgKiBmY19ycG9ydF9yZWN2X2Vsc19yZXEoKSAtIGhhbmRsZSBhIHZhbGlkYXRlZCBFTFMgcmVxdWVzdC4KKyAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0CisgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBMT0dJIGV4Y2hhbmdlCisgKiBAZnA6IHJlc3BvbnNlIGZyYW1lCisgKgorICogSGFuZGxlIGluY29taW5nIEVMUyByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgcG9ydCBsb2dpbi4KKyAqIFRoZSBFTFMgb3Bjb2RlIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogTG9ja2luZyBOb3RlOiBDYWxsZWQgd2l0aCB0aGUgbHBvcnQgbG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZCBmY19ycG9ydF9yZWN2X2Vsc19yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkgIHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCXN0cnVjdCBmY19ycG9ydF9wcml2ICpyZGF0YTsKKwlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKKwlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIGVsc19kYXRhOworCiAJZWxzX2RhdGEuZnAgPSBOVUxMOwotCWVsc19kYXRhLmV4cGxhbiA9IEVMU19FWFBMX05PTkU7Ci0JZWxzX2RhdGEucmVhc29uID0gRUxTX1JKVF9OT05FOworCWVsc19kYXRhLnJlYXNvbiA9IEVMU19SSlRfVU5BQjsKKwllbHNfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9QTE9HSV9SRVFEOwogCiAJZmggPSBmY19mcmFtZV9oZWFkZXJfZ2V0KGZwKTsKIAotCWlmIChmaC0+Zmhfcl9jdGwgPT0gRkNfUkNUTF9FTFNfUkVRICYmIGZoLT5maF90eXBlID09IEZDX1RZUEVfRUxTKSB7Ci0JCW9wID0gZmNfZnJhbWVfcGF5bG9hZF9vcChmcCk7Ci0JCXN3aXRjaCAob3ApIHsKLQkJY2FzZSBFTFNfUExPR0k6Ci0JCQlmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcShycG9ydCwgc3AsIGZwKTsKLQkJCWJyZWFrOwotCQljYXNlIEVMU19QUkxJOgotCQkJZmNfcnBvcnRfcmVjdl9wcmxpX3JlcShycG9ydCwgc3AsIGZwKTsKLQkJCWJyZWFrOwotCQljYXNlIEVMU19QUkxPOgotCQkJZmNfcnBvcnRfcmVjdl9wcmxvX3JlcShycG9ydCwgc3AsIGZwKTsKLQkJCWJyZWFrOwotCQljYXNlIEVMU19MT0dPOgotCQkJZmNfcnBvcnRfcmVjdl9sb2dvX3JlcShycG9ydCwgc3AsIGZwKTsKLQkJCWJyZWFrOwotCQljYXNlIEVMU19SUlE6Ci0JCQllbHNfZGF0YS5mcCA9IGZwOwotCQkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19SUlEsICZlbHNfZGF0YSk7Ci0JCQlicmVhazsKLQkJY2FzZSBFTFNfUkVDOgotCQkJZWxzX2RhdGEuZnAgPSBmcDsKLQkJCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfUkVDLCAmZWxzX2RhdGEpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllbHNfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOU1VQOwotCQkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZlbHNfZGF0YSk7Ci0JCQlicmVhazsKLQkJfQorCW11dGV4X2xvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCXJkYXRhID0gbHBvcnQtPnR0LnJwb3J0X2xvb2t1cChscG9ydCwgbnRvaDI0KGZoLT5maF9zX2lkKSk7CisJaWYgKCFyZGF0YSkgeworCQltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCQlnb3RvIHJlamVjdDsKKwl9CisJbXV0ZXhfbG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOworCisJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKKwljYXNlIFJQT1JUX1NUX1BSTEk6CisJY2FzZSBSUE9SVF9TVF9SVFY6CisJY2FzZSBSUE9SVF9TVF9SRUFEWToKKwljYXNlIFJQT1JUX1NUX0FESVNDOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCWdvdG8gcmVqZWN0OworCX0KKworCXN3aXRjaCAoZmNfZnJhbWVfcGF5bG9hZF9vcChmcCkpIHsKKwljYXNlIEVMU19QUkxJOgorCQlmY19ycG9ydF9yZWN2X3BybGlfcmVxKHJkYXRhLCBzcCwgZnApOworCQlicmVhazsKKwljYXNlIEVMU19QUkxPOgorCQlmY19ycG9ydF9yZWN2X3BybG9fcmVxKHJkYXRhLCBzcCwgZnApOworCQlicmVhazsKKwljYXNlIEVMU19BRElTQzoKKwkJZmNfcnBvcnRfcmVjdl9hZGlzY19yZXEocmRhdGEsIHNwLCBmcCk7CisJCWJyZWFrOworCWNhc2UgRUxTX1JSUToKKwkJZWxzX2RhdGEuZnAgPSBmcDsKKwkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19SUlEsICZlbHNfZGF0YSk7CisJCWJyZWFrOworCWNhc2UgRUxTX1JFQzoKKwkJZWxzX2RhdGEuZnAgPSBmcDsKKwkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19SRUMsICZlbHNfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZjX2ZyYW1lX2ZyZWUoZnApOwkvKiBjYW4ndCBoYXBwZW4gKi8KKwkJYnJlYWs7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCXJldHVybjsKKworcmVqZWN0OgorCWxwb3J0LT50dC5zZXFfZWxzX3JzcF9zZW5kKHNwLCBFTFNfTFNfUkpULCAmZWxzX2RhdGEpOworCWZjX2ZyYW1lX2ZyZWUoZnApOworfQorCisvKioKKyAqIGZjX3Jwb3J0X3JlY3ZfcmVxKCkgLSBIYW5kbGUgYSByZWNlaXZlZCBFTFMgcmVxdWVzdCBmcm9tIGEgcnBvcnQKKyAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUExPR0kgZXhjaGFuZ2UKKyAqIEBmcDogcmVzcG9uc2UgZnJhbWUKKyAqIEBscG9ydDogRmlicmUgQ2hhbm5lbCBsb2NhbCBwb3J0CisgKgorICogTG9ja2luZyBOb3RlOiBDYWxsZWQgd2l0aCB0aGUgbHBvcnQgbG9jayBoZWxkLgorICovCit2b2lkIGZjX3Jwb3J0X3JlY3ZfcmVxKHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAorCQkgICAgICAgc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKK3sKKwlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIGVsc19kYXRhOworCisJLyoKKwkgKiBIYW5kbGUgUExPR0kgYW5kIExPR08gcmVxdWVzdHMgc2VwYXJhdGVseSwgc2luY2UgdGhleQorCSAqIGRvbid0IHJlcXVpcmUgcHJpb3IgbG9naW4uCisJICogQ2hlY2sgZm9yIHVuc3VwcG9ydGVkIG9wY29kZXMgZmlyc3QgYW5kIHJlamVjdCB0aGVtLgorCSAqIEZvciBzb21lIG9wcywgaXQgd291bGQgYmUgaW5jb3JyZWN0IHRvIHJlamVjdCB3aXRoICJQTE9HSSByZXF1aXJlZCIuCisJICovCisJc3dpdGNoIChmY19mcmFtZV9wYXlsb2FkX29wKGZwKSkgeworCWNhc2UgRUxTX1BMT0dJOgorCQlmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcShscG9ydCwgc3AsIGZwKTsKKwkJYnJlYWs7CisJY2FzZSBFTFNfTE9HTzoKKwkJZmNfcnBvcnRfcmVjdl9sb2dvX3JlcShscG9ydCwgc3AsIGZwKTsKKwkJYnJlYWs7CisJY2FzZSBFTFNfUFJMSToKKwljYXNlIEVMU19QUkxPOgorCWNhc2UgRUxTX0FESVNDOgorCWNhc2UgRUxTX1JSUToKKwljYXNlIEVMU19SRUM6CisJCWZjX3Jwb3J0X3JlY3ZfZWxzX3JlcShscG9ydCwgc3AsIGZwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZmNfZnJhbWVfZnJlZShmcCk7CisJCWVsc19kYXRhLmZwID0gTlVMTDsKKwkJZWxzX2RhdGEucmVhc29uID0gRUxTX1JKVF9VTlNVUDsKKwkJZWxzX2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKKwkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZlbHNfZGF0YSk7CisJCWJyZWFrOworCX0KIH0KIAogLyoqCiAgKiBmY19ycG9ydF9yZWN2X3Bsb2dpX3JlcSgpIC0gSGFuZGxlIGluY29taW5nIFBvcnQgTG9naW4gKFBMT0dJKSByZXF1ZXN0Ci0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdGhhdCBpbml0aWF0ZWQgUExPR0kKKyAqIEBscG9ydDogbG9jYWwgcG9ydAogICogQHNwOiBjdXJyZW50IHNlcXVlbmNlIGluIHRoZSBQTE9HSSBleGNoYW5nZQogICogQGZwOiBQTE9HSSByZXF1ZXN0IGZyYW1lCiAgKgotICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKLSAqIHRoaXMgZnVuY3Rpb24uCisgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGhlbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9wbG9naV9yZXEoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcGxvZ2lfcmVxKHN0cnVjdCBmY19scG9ydCAqbHBvcnQsCiAJCQkJICAgIHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwKQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKKwlzdHJ1Y3QgZmNfZGlzYyAqZGlzYzsKKwlzdHJ1Y3QgZmNfcnBvcnRfcHJpdiAqcmRhdGE7CiAJc3RydWN0IGZjX2ZyYW1lICpmcCA9IHJ4X2ZwOwogCXN0cnVjdCBmY19leGNoICplcDsKIAlzdHJ1Y3QgZmNfZnJhbWVfaGVhZGVyICpmaDsKIAlzdHJ1Y3QgZmNfZWxzX2Zsb2dpICpwbDsKIAlzdHJ1Y3QgZmNfc2VxX2Vsc19kYXRhIHJqdF9kYXRhOwotCXUzMiBzaWQ7Ci0JdTY0IHd3cG47Ci0JdTY0IHd3bm47Ci0JZW51bSBmY19lbHNfcmp0X3JlYXNvbiByZWplY3QgPSAwOwotCXUzMiBmX2N0bDsKKwl1MzIgc2lkLCBmX2N0bDsKKwogCXJqdF9kYXRhLmZwID0gTlVMTDsKLQogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7Ci0KLQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBQTE9HSSByZXF1ZXN0IHdoaWxlIGluIHN0YXRlICVzXG4iLAotCQkgICAgIGZjX3Jwb3J0X3N0YXRlKHJwb3J0KSk7Ci0KIAlzaWQgPSBudG9oMjQoZmgtPmZoX3NfaWQpOworCisJRkNfUlBPUlRfSURfREJHKGxwb3J0LCBzaWQsICJSZWNlaXZlZCBQTE9HSSByZXF1ZXN0XG4iKTsKKwogCXBsID0gZmNfZnJhbWVfcGF5bG9hZF9nZXQoZnAsIHNpemVvZigqcGwpKTsKIAlpZiAoIXBsKSB7Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIFBMT0dJIHRvbyBzaG9ydFxuIik7Ci0JCVdBUk5fT04oMSk7Ci0JCS8qIFhYWCBUQkQ6IHNlbmQgcmVqZWN0PyAqLwotCQlmY19mcmFtZV9mcmVlKGZwKTsKLQkJcmV0dXJuOworCQlGQ19SUE9SVF9JRF9EQkcobHBvcnQsIHNpZCwgIlJlY2VpdmVkIFBMT0dJIHRvbyBzaG9ydFxuIik7CisJCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfUFJPVDsKKwkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfSU5WX0xFTjsKKwkJZ290byByZWplY3Q7CiAJfQotCXd3cG4gPSBnZXRfdW5hbGlnbmVkX2JlNjQoJnBsLT5mbF93d3BuKTsKLQl3d25uID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbC0+Zmxfd3dubik7CisKKwlkaXNjID0gJmxwb3J0LT5kaXNjOworCW11dGV4X2xvY2soJmRpc2MtPmRpc2NfbXV0ZXgpOworCXJkYXRhID0gbHBvcnQtPnR0LnJwb3J0X2NyZWF0ZShscG9ydCwgc2lkKTsKKwlpZiAoIXJkYXRhKSB7CisJCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CisJCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfVU5BQjsKKwkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfSU5TVUZfUkVTOworCQlnb3RvIHJlamVjdDsKKwl9CisKKwltdXRleF9sb2NrKCZyZGF0YS0+cnBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZGlzYy0+ZGlzY19tdXRleCk7CisKKwlyZGF0YS0+aWRzLnBvcnRfbmFtZSA9IGdldF91bmFsaWduZWRfYmU2NCgmcGwtPmZsX3d3cG4pOworCXJkYXRhLT5pZHMubm9kZV9uYW1lID0gZ2V0X3VuYWxpZ25lZF9iZTY0KCZwbC0+Zmxfd3dubik7CiAKIAkvKgotCSAqIElmIHRoZSBzZXNzaW9uIHdhcyBqdXN0IGNyZWF0ZWQsIHBvc3NpYmx5IGR1ZSB0byB0aGUgaW5jb21pbmcgUExPR0ksCisJICogSWYgdGhlIHJwb3J0IHdhcyBqdXN0IGNyZWF0ZWQsIHBvc3NpYmx5IGR1ZSB0byB0aGUgaW5jb21pbmcgUExPR0ksCiAJICogc2V0IHRoZSBzdGF0ZSBhcHByb3ByaWF0ZWx5IGFuZCBhY2NlcHQgdGhlIFBMT0dJLgogCSAqCiAJICogSWYgd2UgaGFkIGFsc28gc2VudCBhIFBMT0dJLCBhbmQgaWYgdGhlIHJlY2VpdmVkIFBMT0dJIGlzIGZyb20gYQpAQCAtOTk2LDg2ICsxMjM2LDc2IEBACiAJICovCiAJc3dpdGNoIChyZGF0YS0+cnBfc3RhdGUpIHsKIAljYXNlIFJQT1JUX1NUX0lOSVQ6Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIFBMT0dJLCB3d3BuICVsbHggc3RhdGUgSU5JVCAiCi0JCQkgICAgICItIHJlamVjdFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl3d3BuKTsKLQkJcmVqZWN0ID0gRUxTX1JKVF9VTlNVUDsKKwkJRkNfUlBPUlRfREJHKHJkYXRhLCAiUmVjZWl2ZWQgUExPR0kgaW4gSU5JVCBzdGF0ZVxuIik7CiAJCWJyZWFrOwogCWNhc2UgUlBPUlRfU1RfUExPR0k6Ci0JCUZDX1JQT1JUX0RCRyhycG9ydCwgIlJlY2VpdmVkIFBMT0dJIGluIFBMT0dJIHN0YXRlICVkXG4iLAotCQkJICAgICByZGF0YS0+cnBfc3RhdGUpOwotCQlpZiAod3dwbiA8IGxwb3J0LT53d3BuKQotCQkJcmVqZWN0ID0gRUxTX1JKVF9JTlBST0c7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIFBMT0dJIGluIFBMT0dJIHN0YXRlXG4iKTsKKwkJaWYgKHJkYXRhLT5pZHMucG9ydF9uYW1lIDwgbHBvcnQtPnd3cG4pIHsKKwkJCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwkJCXJqdF9kYXRhLnJlYXNvbiA9IEVMU19SSlRfSU5QUk9HOworCQkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKKwkJCWdvdG8gcmVqZWN0OworCQl9CiAJCWJyZWFrOwogCWNhc2UgUlBPUlRfU1RfUFJMSToKIAljYXNlIFJQT1JUX1NUX1JFQURZOgotCQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBQTE9HSSBpbiBsb2dnZWQtaW4gc3RhdGUgJWQgIgorCWNhc2UgUlBPUlRfU1RfQURJU0M6CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIFBMT0dJIGluIGxvZ2dlZC1pbiBzdGF0ZSAlZCAiCiAJCQkgICAgICItIGlnbm9yZWQgZm9yIG5vd1xuIiwgcmRhdGEtPnJwX3N0YXRlKTsKIAkJLyogWFhYIFRCRCAtIHNob3VsZCByZXNldCAqLwogCQlicmVhazsKLQljYXNlIFJQT1JUX1NUX05PTkU6CisJY2FzZSBSUE9SVF9TVF9ERUxFVEU6CiAJZGVmYXVsdDoKLQkJRkNfUlBPUlRfREJHKHJwb3J0LCAiUmVjZWl2ZWQgUExPR0kgaW4gdW5leHBlY3RlZCAiCi0JCQkgICAgICJzdGF0ZSAlZFxuIiwgcmRhdGEtPnJwX3N0YXRlKTsKLQkJZmNfZnJhbWVfZnJlZShmcCk7Ci0JCXJldHVybjsKLQkJYnJlYWs7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIFBMT0dJIGluIHVuZXhwZWN0ZWQgc3RhdGUgJWRcbiIsCisJCQkgICAgIHJkYXRhLT5ycF9zdGF0ZSk7CisJCWZjX2ZyYW1lX2ZyZWUocnhfZnApOworCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAocmVqZWN0KSB7Ci0JCXJqdF9kYXRhLnJlYXNvbiA9IHJlamVjdDsKLQkJcmp0X2RhdGEuZXhwbGFuID0gRUxTX0VYUExfTk9ORTsKLQkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZyanRfZGF0YSk7Ci0JCWZjX2ZyYW1lX2ZyZWUoZnApOwotCX0gZWxzZSB7Ci0JCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqcGwpKTsKLQkJaWYgKGZwID09IE5VTEwpIHsKLQkJCWZwID0gcnhfZnA7Ci0JCQlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOQUI7Ci0JCQlyanRfZGF0YS5leHBsYW4gPSBFTFNfRVhQTF9OT05FOwotCQkJbHBvcnQtPnR0LnNlcV9lbHNfcnNwX3NlbmQoc3AsIEVMU19MU19SSlQsICZyanRfZGF0YSk7Ci0JCQlmY19mcmFtZV9mcmVlKGZwKTsKLQkJfSBlbHNlIHsKLQkJCXNwID0gbHBvcnQtPnR0LnNlcV9zdGFydF9uZXh0KHNwKTsKLQkJCVdBUk5fT04oIXNwKTsKLQkJCWZjX3Jwb3J0X3NldF9uYW1lKHJwb3J0LCB3d3BuLCB3d25uKTsKKwkvKgorCSAqIEdldCBzZXNzaW9uIHBheWxvYWQgc2l6ZSBmcm9tIGluY29taW5nIFBMT0dJLgorCSAqLworCXJkYXRhLT5tYXhmcmFtZV9zaXplID0gZmNfcGxvZ2lfZ2V0X21heGZyYW1lKHBsLCBscG9ydC0+bWZzKTsKKwlmY19mcmFtZV9mcmVlKHJ4X2ZwKTsKIAotCQkJLyoKLQkJCSAqIEdldCBzZXNzaW9uIHBheWxvYWQgc2l6ZSBmcm9tIGluY29taW5nIFBMT0dJLgotCQkJICovCi0JCQlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9Ci0JCQkJZmNfcGxvZ2lfZ2V0X21heGZyYW1lKHBsLCBscG9ydC0+bWZzKTsKLQkJCWZjX2ZyYW1lX2ZyZWUocnhfZnApOwotCQkJZmNfcGxvZ2lfZmlsbChscG9ydCwgZnAsIEVMU19MU19BQ0MpOworCS8qCisJICogU2VuZCBMU19BQ0MuCSBJZiB0aGlzIGZhaWxzLCB0aGUgb3JpZ2luYXRvciBzaG91bGQgcmV0cnkuCisJICovCisJc3AgPSBscG9ydC0+dHQuc2VxX3N0YXJ0X25leHQoc3ApOworCWlmICghc3ApCisJCWdvdG8gb3V0OworCWZwID0gZmNfZnJhbWVfYWxsb2MobHBvcnQsIHNpemVvZigqcGwpKTsKKwlpZiAoIWZwKQorCQlnb3RvIG91dDsKIAotCQkJLyoKLQkJCSAqIFNlbmQgTFNfQUNDLgkgSWYgdGhpcyBmYWlscywKLQkJCSAqIHRoZSBvcmlnaW5hdG9yIHNob3VsZCByZXRyeS4KLQkJCSAqLwotCQkJZl9jdGwgPSBGQ19GQ19FWF9DVFggfCBGQ19GQ19MQVNUX1NFUTsKLQkJCWZfY3RsIHw9IEZDX0ZDX0VORF9TRVEgfCBGQ19GQ19TRVFfSU5JVDsKLQkJCWVwID0gZmNfc2VxX2V4Y2goc3ApOwotCQkJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRUxTX1JFUCwgZXAtPmRpZCwgZXAtPnNpZCwKLQkJCQkgICAgICAgRkNfVFlQRV9FTFMsIGZfY3RsLCAwKTsKLQkJCWxwb3J0LT50dC5zZXFfc2VuZChscG9ydCwgc3AsIGZwKTsKLQkJCWlmIChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfUExPR0kpCi0JCQkJZmNfcnBvcnRfZW50ZXJfcHJsaShycG9ydCk7Ci0JCX0KLQl9CisJZmNfcGxvZ2lfZmlsbChscG9ydCwgZnAsIEVMU19MU19BQ0MpOworCWZfY3RsID0gRkNfRkNfRVhfQ1RYIHwgRkNfRkNfTEFTVF9TRVEgfCBGQ19GQ19FTkRfU0VRIHwgRkNfRkNfU0VRX0lOSVQ7CisJZXAgPSBmY19zZXFfZXhjaChzcCk7CisJZmNfZmlsbF9mY19oZHIoZnAsIEZDX1JDVExfRUxTX1JFUCwgZXAtPmRpZCwgZXAtPnNpZCwKKwkJICAgICAgIEZDX1RZUEVfRUxTLCBmX2N0bCwgMCk7CisJbHBvcnQtPnR0LnNlcV9zZW5kKGxwb3J0LCBzcCwgZnApOworCWZjX3Jwb3J0X2VudGVyX3BybGkocmRhdGEpOworb3V0OgorCW11dGV4X3VubG9jaygmcmRhdGEtPnJwX211dGV4KTsKKwlyZXR1cm47CisKK3JlamVjdDoKKwlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX1JKVCwgJnJqdF9kYXRhKTsKKwlmY19mcmFtZV9mcmVlKGZwKTsKIH0KIAogLyoqCiAgKiBmY19ycG9ydF9yZWN2X3BybGlfcmVxKCkgLSBIYW5kbGUgaW5jb21pbmcgUHJvY2VzcyBMb2dpbiAoUFJMSSkgcmVxdWVzdAotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRoYXQgaW5pdGlhdGVkIFBSTEkKKyAqIEByZGF0YTogcHJpdmF0ZSByZW1vdGUgcG9ydCBkYXRhCiAgKiBAc3A6IGN1cnJlbnQgc2VxdWVuY2UgaW4gdGhlIFBSTEkgZXhjaGFuZ2UKICAqIEBmcDogUFJMSSByZXF1ZXN0IGZyYW1lCiAgKgogICogTG9ja2luZyBOb3RlOiBUaGUgcnBvcnQgbG9jayBpcyBleGVjdGVkIHRvIGJlIGhlbGQgYmVmb3JlIGNhbGxpbmcKICAqIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEoc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsaV9yZXEoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAogCQkJCSAgIHN0cnVjdCBmY19zZXEgKnNwLCBzdHJ1Y3QgZmNfZnJhbWUgKnJ4X2ZwKQogewotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwogCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKIAlzdHJ1Y3QgZmNfZXhjaCAqZXA7CiAJc3RydWN0IGZjX2ZyYW1lICpmcDsKQEAgLTEwOTksMTIgKzEzMjksMTQgQEAKIAogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChyeF9mcCk7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBQUkxJIHJlcXVlc3Qgd2hpbGUgaW4gc3RhdGUgJXNcbiIsCi0JCSAgICAgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBQUkxJIHJlcXVlc3Qgd2hpbGUgaW4gc3RhdGUgJXNcbiIsCisJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAogCXN3aXRjaCAocmRhdGEtPnJwX3N0YXRlKSB7CiAJY2FzZSBSUE9SVF9TVF9QUkxJOgorCWNhc2UgUlBPUlRfU1RfUlRWOgogCWNhc2UgUlBPUlRfU1RfUkVBRFk6CisJY2FzZSBSUE9SVF9TVF9BRElTQzoKIAkJcmVhc29uID0gRUxTX1JKVF9OT05FOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTE0OSw2ICsxMzgxLDkgQEAKIAkJcHAtPnBybGkucHJsaV9sZW4gPSBodG9ucyhsZW4pOwogCQlsZW4gLT0gc2l6ZW9mKHN0cnVjdCBmY19lbHNfcHJsaSk7CiAKKwkJLyogcmVpbml0aWFsaXplIHJlbW90ZSBwb3J0IHJvbGVzICovCisJCXJkYXRhLT5pZHMucm9sZXMgPSBGQ19SUE9SVF9ST0xFX1VOS05PV047CisKIAkJLyoKIAkJICogR28gdGhyb3VnaCBhbGwgdGhlIHNlcnZpY2UgcGFyYW1ldGVyIHBhZ2VzIGFuZCBidWlsZAogCQkgKiByZXNwb25zZS4gIElmIHBsZW4gaW5kaWNhdGVzIGxvbmdlciBTUFAgdGhhbiBzdGFuZGFyZCwKQEAgLTExNjksMTIgKzE0MDQsMTIgQEAKIAkJCQlmY3BfcGFybSA9IG50b2hsKHJzcHAtPnNwcF9wYXJhbXMpOwogCQkJCWlmIChmY3BfcGFybSAqIEZDUF9TUFBGX1JFVFJZKQogCQkJCQlyZGF0YS0+ZmxhZ3MgfD0gRkNfUlBfRkxBR1NfUkVUUlk7Ci0JCQkJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gRkNfQ09TX0NMQVNTMzsKKwkJCQlyZGF0YS0+c3VwcG9ydGVkX2NsYXNzZXMgPSBGQ19DT1NfQ0xBU1MzOwogCQkJCWlmIChmY3BfcGFybSAmIEZDUF9TUFBGX0lOSVRfRkNOKQogCQkJCQlyb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9JTklUSUFUT1I7CiAJCQkJaWYgKGZjcF9wYXJtICYgRkNQX1NQUEZfVEFSR19GQ04pCiAJCQkJCXJvbGVzIHw9IEZDX1JQT1JUX1JPTEVfRkNQX1RBUkdFVDsKLQkJCQlycG9ydC0+cm9sZXMgPSByb2xlczsKKwkJCQlyZGF0YS0+aWRzLnJvbGVzID0gcm9sZXM7CiAKIAkJCQlzcHAtPnNwcF9wYXJhbXMgPQogCQkJCQlodG9ubChscG9ydC0+c2VydmljZV9wYXJhbXMpOwpAQCAtMTIwNCw5ICsxNDM5LDEwIEBACiAJCSAqLwogCQlzd2l0Y2ggKHJkYXRhLT5ycF9zdGF0ZSkgewogCQljYXNlIFJQT1JUX1NUX1BSTEk6Ci0JCQlmY19ycG9ydF9lbnRlcl9yZWFkeShycG9ydCk7CisJCQlmY19ycG9ydF9lbnRlcl9yZWFkeShyZGF0YSk7CiAJCQlicmVhazsKIAkJY2FzZSBSUE9SVF9TVF9SRUFEWToKKwkJY2FzZSBSUE9SVF9TVF9BRElTQzoKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CkBAIC0xMjE3LDE3ICsxNDUzLDE3IEBACiAKIC8qKgogICogZmNfcnBvcnRfcmVjdl9wcmxvX3JlcSgpIC0gSGFuZGxlIGluY29taW5nIFByb2Nlc3MgTG9nb3V0IChQUkxPKSByZXF1ZXN0Ci0gKiBAcnBvcnQ6IEZpYnJlIENoYW5uZWwgcmVtb3RlIHBvcnQgdGhhdCBpbml0aWF0ZWQgUFJMTworICogQHJkYXRhOiBwcml2YXRlIHJlbW90ZSBwb3J0IGRhdGEKICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgUFJMTyBleGNoYW5nZQogICogQGZwOiBQUkxPIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4ZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9wcmxvX3JlcShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCBzdHJ1Y3QgZmNfc2VxICpzcCwKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfcHJsb19yZXEoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhLAorCQkJCSAgIHN0cnVjdCBmY19zZXEgKnNwLAogCQkJCSAgIHN0cnVjdCBmY19mcmFtZSAqZnApCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwogCiAJc3RydWN0IGZjX2ZyYW1lX2hlYWRlciAqZmg7CkBAIC0xMjM1LDEzICsxNDcxLDggQEAKIAogCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7CiAKLQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBQUkxPIHJlcXVlc3Qgd2hpbGUgaW4gc3RhdGUgJXNcbiIsCi0JCSAgICAgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKLQotCWlmIChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfTk9ORSkgewotCQlmY19mcmFtZV9mcmVlKGZwKTsKLQkJcmV0dXJuOwotCX0KKwlGQ19SUE9SVF9EQkcocmRhdGEsICJSZWNlaXZlZCBQUkxPIHJlcXVlc3Qgd2hpbGUgaW4gc3RhdGUgJXNcbiIsCisJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKIAogCXJqdF9kYXRhLmZwID0gTlVMTDsKIAlyanRfZGF0YS5yZWFzb24gPSBFTFNfUkpUX1VOQUI7CkBAIC0xMjUyLDM1ICsxNDgzLDQ2IEBACiAKIC8qKgogICogZmNfcnBvcnRfcmVjdl9sb2dvX3JlcSgpIC0gSGFuZGxlIGluY29taW5nIExvZ291dCAoTE9HTykgcmVxdWVzdAotICogQHJwb3J0OiBGaWJyZSBDaGFubmVsIHJlbW90ZSBwb3J0IHRoYXQgaW5pdGlhdGVkIExPR08KKyAqIEBscG9ydDogbG9jYWwgcG9ydC4KICAqIEBzcDogY3VycmVudCBzZXF1ZW5jZSBpbiB0aGUgTE9HTyBleGNoYW5nZQogICogQGZwOiBMT0dPIHJlcXVlc3QgZnJhbWUKICAqCiAgKiBMb2NraW5nIE5vdGU6IFRoZSBycG9ydCBsb2NrIGlzIGV4ZWN0ZWQgdG8gYmUgaGVsZCBiZWZvcmUgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQgZmNfcnBvcnRfcmVjdl9sb2dvX3JlcShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LCBzdHJ1Y3QgZmNfc2VxICpzcCwKK3N0YXRpYyB2b2lkIGZjX3Jwb3J0X3JlY3ZfbG9nb19yZXEoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkgICBzdHJ1Y3QgZmNfc2VxICpzcCwKIAkJCQkgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQogewogCXN0cnVjdCBmY19mcmFtZV9oZWFkZXIgKmZoOwotCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpyZGF0YSA9IHJwb3J0LT5kZF9kYXRhOwotCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSByZGF0YS0+bG9jYWxfcG9ydDsKLQotCWZoID0gZmNfZnJhbWVfaGVhZGVyX2dldChmcCk7Ci0KLQlGQ19SUE9SVF9EQkcocnBvcnQsICJSZWNlaXZlZCBMT0dPIHJlcXVlc3Qgd2hpbGUgaW4gc3RhdGUgJXNcbiIsCi0JCSAgICAgZmNfcnBvcnRfc3RhdGUocnBvcnQpKTsKLQotCWlmIChyZGF0YS0+cnBfc3RhdGUgPT0gUlBPUlRfU1RfTk9ORSkgewotCQlmY19mcmFtZV9mcmVlKGZwKTsKLQkJcmV0dXJuOwotCX0KLQotCXJkYXRhLT5ldmVudCA9IFJQT1JUX0VWX0xPR087Ci0JZmNfcnBvcnRfc3RhdGVfZW50ZXIocnBvcnQsIFJQT1JUX1NUX05PTkUpOwotCXF1ZXVlX3dvcmsocnBvcnRfZXZlbnRfcXVldWUsICZyZGF0YS0+ZXZlbnRfd29yayk7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYgKnJkYXRhOworCXUzMiBzaWQ7CiAKIAlscG9ydC0+dHQuc2VxX2Vsc19yc3Bfc2VuZChzcCwgRUxTX0xTX0FDQywgTlVMTCk7CisKKwlmaCA9IGZjX2ZyYW1lX2hlYWRlcl9nZXQoZnApOworCXNpZCA9IG50b2gyNChmaC0+Zmhfc19pZCk7CisKKwltdXRleF9sb2NrKCZscG9ydC0+ZGlzYy5kaXNjX211dGV4KTsKKwlyZGF0YSA9IGxwb3J0LT50dC5ycG9ydF9sb29rdXAobHBvcnQsIHNpZCk7CisJaWYgKHJkYXRhKSB7CisJCW11dGV4X2xvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJCUZDX1JQT1JUX0RCRyhyZGF0YSwgIlJlY2VpdmVkIExPR08gcmVxdWVzdCB3aGlsZSBpbiBzdGF0ZSAlc1xuIiwKKwkJCSAgICAgZmNfcnBvcnRfc3RhdGUocmRhdGEpKTsKKworCQkvKgorCQkgKiBJZiB0aGUgcmVtb3RlIHBvcnQgd2FzIGNyZWF0ZWQgZHVlIHRvIGRpc2NvdmVyeSwKKwkJICogbG9nIGJhY2sgaW4uICBJdCBtYXkgaGF2ZSBzZWVuIGEgc3RhbGUgUlNDTiBhYm91dCB1cy4KKwkJICovCisJCWlmIChyZGF0YS0+cnBfc3RhdGUgIT0gUlBPUlRfU1RfREVMRVRFICYmIHJkYXRhLT5kaXNjX2lkKQorCQkJZmNfcnBvcnRfZW50ZXJfcGxvZ2kocmRhdGEpOworCQllbHNlCisJCQlmY19ycG9ydF9lbnRlcl9kZWxldGUocmRhdGEsIFJQT1JUX0VWX0xPR08pOworCQltdXRleF91bmxvY2soJnJkYXRhLT5ycF9tdXRleCk7CisJfSBlbHNlCisJCUZDX1JQT1JUX0lEX0RCRyhscG9ydCwgc2lkLAorCQkJCSJSZWNlaXZlZCBMT0dPIGZyb20gbm9uLWxvZ2dlZC1pbiBwb3J0XG4iKTsKKwltdXRleF91bmxvY2soJmxwb3J0LT5kaXNjLmRpc2NfbXV0ZXgpOwogCWZjX2ZyYW1lX2ZyZWUoZnApOwogfQogCkBAIC0xMjkxLDggKzE1MzMsMTEgQEAKIAogaW50IGZjX3Jwb3J0X2luaXQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCkKIHsKKwlpZiAoIWxwb3J0LT50dC5ycG9ydF9sb29rdXApCisJCWxwb3J0LT50dC5ycG9ydF9sb29rdXAgPSBmY19ycG9ydF9sb29rdXA7CisKIAlpZiAoIWxwb3J0LT50dC5ycG9ydF9jcmVhdGUpCi0JCWxwb3J0LT50dC5ycG9ydF9jcmVhdGUgPSBmY19ycG9ydF9yb2d1ZV9jcmVhdGU7CisJCWxwb3J0LT50dC5ycG9ydF9jcmVhdGUgPSBmY19ycG9ydF9jcmVhdGU7CiAKIAlpZiAoIWxwb3J0LT50dC5ycG9ydF9sb2dpbikKIAkJbHBvcnQtPnR0LnJwb3J0X2xvZ2luID0gZmNfcnBvcnRfbG9naW47CkBAIC0xMzA2LDYgKzE1NTEsOSBAQAogCWlmICghbHBvcnQtPnR0LnJwb3J0X2ZsdXNoX3F1ZXVlKQogCQlscG9ydC0+dHQucnBvcnRfZmx1c2hfcXVldWUgPSBmY19ycG9ydF9mbHVzaF9xdWV1ZTsKIAorCWlmICghbHBvcnQtPnR0LnJwb3J0X2Rlc3Ryb3kpCisJCWxwb3J0LT50dC5ycG9ydF9kZXN0cm95ID0gZmNfcnBvcnRfZGVzdHJveTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmY19ycG9ydF9pbml0KTsKQEAgLTEzMjcsOCArMTU3NSw4IEBACiAKIHZvaWQgZmNfcnBvcnRfdGVybWluYXRlX2lvKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCiB7Ci0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7Ci0Jc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OworCXN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICpycCA9IHJwb3J0LT5kZF9kYXRhOworCXN0cnVjdCBmY19scG9ydCAqbHBvcnQgPSBycC0+bG9jYWxfcG9ydDsKIAogCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgMCwgcnBvcnQtPnBvcnRfaWQpOwogCWxwb3J0LT50dC5leGNoX21ncl9yZXNldChscG9ydCwgcnBvcnQtPnBvcnRfaWQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCBhNzUxZjYyLi44ZGM3M2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtMTA5LDEyICsxMDksOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfY29ubl9xdWV1ZV93b3JrKTsKIAotdm9pZAotaXNjc2lfdXBkYXRlX2NtZHNuKHN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uLCBzdHJ1Y3QgaXNjc2lfbm9waW4gKmhkcikKK3N0YXRpYyB2b2lkIF9faXNjc2lfdXBkYXRlX2NtZHNuKHN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uLAorCQkJCSB1aW50MzJfdCBleHBfY21kc24sIHVpbnQzMl90IG1heF9jbWRzbikKIHsKLQl1aW50MzJfdCBtYXhfY21kc24gPSBiZTMyX3RvX2NwdShoZHItPm1heF9jbWRzbik7Ci0JdWludDMyX3QgZXhwX2NtZHNuID0gYmUzMl90b19jcHUoaGRyLT5leHBfY21kc24pOwotCiAJLyoKIAkgKiBzdGFuZGFyZCBzcGVjaWZpZXMgdGhpcyBjaGVjayBmb3Igd2hlbiB0byB1cGRhdGUgZXhwZWN0ZWQgYW5kCiAJICogbWF4IHNlcXVlbmNlIG51bWJlcnMKQEAgLTEzOCw2ICsxMzUsMTIgQEAKIAkJCWlzY3NpX2Nvbm5fcXVldWVfd29yayhzZXNzaW9uLT5sZWFkY29ubik7CiAJfQogfQorCit2b2lkIGlzY3NpX3VwZGF0ZV9jbWRzbihzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IGlzY3NpX25vcGluICpoZHIpCit7CisJX19pc2NzaV91cGRhdGVfY21kc24oc2Vzc2lvbiwgYmUzMl90b19jcHUoaGRyLT5leHBfY21kc24pLAorCQkJICAgICBiZTMyX3RvX2NwdShoZHItPm1heF9jbWRzbikpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfdXBkYXRlX2NtZHNuKTsKIAogLyoqCkBAIC0zMDEsOCArMzA0LDYgQEAKIAloZHItPmZsYWdzID0gSVNDU0lfQVRUUl9TSU1QTEU7CiAJaW50X3RvX3Njc2lsdW4oc2MtPmRldmljZS0+bHVuLCAoc3RydWN0IHNjc2lfbHVuICopaGRyLT5sdW4pOwogCW1lbWNweSh0YXNrLT5sdW4sIGhkci0+bHVuLCBzaXplb2YodGFzay0+bHVuKSk7Ci0JaGRyLT5jbWRzbiA9IHRhc2stPmNtZHNuID0gY3B1X3RvX2JlMzIoc2Vzc2lvbi0+Y21kc24pOwotCXNlc3Npb24tPmNtZHNuKys7CiAJaGRyLT5leHBfc3RhdHNuID0gY3B1X3RvX2JlMzIoY29ubi0+ZXhwX3N0YXRzbik7CiAJY21kX2xlbiA9IHNjLT5jbWRfbGVuOwogCWlmIChjbWRfbGVuIDwgSVNDU0lfQ0RCX1NJWkUpCkBAIC0zODgsNiArMzg5LDggQEAKIAkJcmV0dXJuIC1FSU87CiAKIAl0YXNrLT5zdGF0ZSA9IElTQ1NJX1RBU0tfUlVOTklORzsKKwloZHItPmNtZHNuID0gdGFzay0+Y21kc24gPSBjcHVfdG9fYmUzMihzZXNzaW9uLT5jbWRzbik7CisJc2Vzc2lvbi0+Y21kc24rKzsKIAogCWNvbm4tPnNjc2ljbWRfcGR1c19jbnQrKzsKIAlJU0NTSV9EQkdfU0VTU0lPTihzZXNzaW9uLCAiaXNjc2kgcHJlcCBbJXMgY2lkICVkIHNjICVwIGNkYiAweCV4ICIKQEAgLTQ5OSw2ICs1MDIsMzEgQEAKIAlfX2lzY3NpX3B1dF90YXNrKHRhc2spOwogfQogCisvKioKKyAqIGlzY3NpX2NvbXBsZXRlX3Njc2lfdGFzayAtIGZpbmlzaCBzY3NpIHRhc2sgbm9ybWFsbHkKKyAqIEB0YXNrOiBpc2NzaSB0YXNrIGZvciBzY3NpIGNtZAorICogQGV4cF9jbWRzbjogZXhwZWN0ZWQgY21kIHNuIGluIGNwdSBmb3JtYXQKKyAqIEBtYXhfY21kc246IG1heCBjbWQgc24gaW4gY3B1IGZvcm1hdAorICoKKyAqIFRoaXMgaXMgdXNlZCB3aGVuIGRyaXZlcnMgZG8gbm90IG5lZWQgb3IgY2Fubm90IHBlcmZvcm0KKyAqIGxvd2VyIGxldmVsIHBkdSBwcm9jZXNzaW5nLgorICoKKyAqIENhbGxlZCB3aXRoIHNlc3Npb24gbG9jaworICovCit2b2lkIGlzY3NpX2NvbXBsZXRlX3Njc2lfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywKKwkJCSAgICAgIHVpbnQzMl90IGV4cF9jbWRzbiwgdWludDMyX3QgbWF4X2NtZHNuKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKworCUlTQ1NJX0RCR19TRVNTSU9OKGNvbm4tPnNlc3Npb24sICJbaXR0IDB4JXhdXG4iLCB0YXNrLT5pdHQpOworCisJY29ubi0+bGFzdF9yZWN2ID0gamlmZmllczsKKwlfX2lzY3NpX3VwZGF0ZV9jbWRzbihjb25uLT5zZXNzaW9uLCBleHBfY21kc24sIG1heF9jbWRzbik7CisJaXNjc2lfY29tcGxldGVfdGFzayh0YXNrLCBJU0NTSV9UQVNLX0NPTVBMRVRFRCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2spOworCisKIC8qCiAgKiBzZXNzaW9uIGxvY2sgbXVzdCBiZSBoZWxkIGFuZCBpZiBub3QgY2FsbGVkIGZvciBhIHRhc2sgdGhhdCBpcwogICogc3RpbGwgcGVuZGluZyBvciBmcm9tIHRoZSB4bWl0IHRocmVhZCwgdGhlbiB4bWl0IHRocmVhZCBtdXN0CkBAIC04NTcsMjcgKzg4NSwxMDIgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgaXNjc2lfbm9wX291dF9yc3Aoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssCisJCQkgICAgIHN0cnVjdCBpc2NzaV9ub3BpbiAqbm9wLCBjaGFyICpkYXRhLCBpbnQgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IHRhc2stPmNvbm47CisJaW50IHJjID0gMDsKKworCWlmIChjb25uLT5waW5nX3Rhc2sgIT0gdGFzaykgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIG5vdCBpbiByZXNwb25zZSB0byBvbmUgb2Ygb3VyCisJCSAqIG5vcHMgdGhlbiBpdCBtdXN0IGJlIGZyb20gdXNlcnNwYWNlLgorCQkgKi8KKwkJaWYgKGlzY3NpX3JlY3ZfcGR1KGNvbm4tPmNsc19jb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKW5vcCwKKwkJCQkgICBkYXRhLCBkYXRhbGVuKSkKKwkJCXJjID0gSVNDU0lfRVJSX0NPTk5fRkFJTEVEOworCX0gZWxzZQorCQltb2RfdGltZXIoJmNvbm4tPnRyYW5zcG9ydF90aW1lciwgamlmZmllcyArIGNvbm4tPnJlY3ZfdGltZW91dCk7CisJaXNjc2lfY29tcGxldGVfdGFzayh0YXNrLCBJU0NTSV9UQVNLX0NPTVBMRVRFRCk7CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IGlzY3NpX2hhbmRsZV9yZWplY3Qoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV9oZHIgKmhkciwKIAkJCSAgICAgICBjaGFyICpkYXRhLCBpbnQgZGF0YWxlbikKIHsKIAlzdHJ1Y3QgaXNjc2lfcmVqZWN0ICpyZWplY3QgPSAoc3RydWN0IGlzY3NpX3JlamVjdCAqKWhkcjsKIAlzdHJ1Y3QgaXNjc2lfaGRyIHJlamVjdGVkX3BkdTsKKwlpbnQgb3Bjb2RlLCByYyA9IDA7CiAKIAljb25uLT5leHBfc3RhdHNuID0gYmUzMl90b19jcHUocmVqZWN0LT5zdGF0c24pICsgMTsKIAotCWlmIChyZWplY3QtPnJlYXNvbiA9PSBJU0NTSV9SRUFTT05fREFUQV9ESUdFU1RfRVJST1IpIHsKLQkJaWYgKG50b2gyNChyZWplY3QtPmRsZW5ndGgpID4gZGF0YWxlbikKLQkJCXJldHVybiBJU0NTSV9FUlJfUFJPVE87Ci0KLQkJaWYgKG50b2gyNChyZWplY3QtPmRsZW5ndGgpID49IHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSkgewotCQkJbWVtY3B5KCZyZWplY3RlZF9wZHUsIGRhdGEsIHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSk7Ci0JCQlpc2NzaV9jb25uX3ByaW50ayhLRVJOX0VSUiwgY29ubiwKLQkJCQkJICAicGR1IChvcCAweCV4KSByZWplY3RlZCAiCi0JCQkJCSAgImR1ZSB0byBEYXRhRGlnZXN0IGVycm9yLlxuIiwKLQkJCQkJICByZWplY3RlZF9wZHUub3Bjb2RlKTsKLQkJfQorCWlmIChudG9oMjQocmVqZWN0LT5kbGVuZ3RoKSA+IGRhdGFsZW4gfHwKKwkgICAgbnRvaDI0KHJlamVjdC0+ZGxlbmd0aCkgPCBzaXplb2Yoc3RydWN0IGlzY3NpX2hkcikpIHsKKwkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sICJDYW5ub3QgaGFuZGxlIHJlamVjdGVkICIKKwkJCQkgICJwZHUuIEludmFsaWQgZGF0YSBsZW5ndGggKHBkdSBkbGVuZ3RoICIKKwkJCQkgICIldSwgZGF0YWxlbiAlZFxuIiwgbnRvaDI0KHJlamVjdC0+ZGxlbmd0aCksCisJCQkJICBkYXRhbGVuKTsKKwkJcmV0dXJuIElTQ1NJX0VSUl9QUk9UTzsKIAl9Ci0JcmV0dXJuIDA7CisJbWVtY3B5KCZyZWplY3RlZF9wZHUsIGRhdGEsIHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSk7CisJb3Bjb2RlID0gcmVqZWN0ZWRfcGR1Lm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLOworCisJc3dpdGNoIChyZWplY3QtPnJlYXNvbikgeworCWNhc2UgSVNDU0lfUkVBU09OX0RBVEFfRElHRVNUX0VSUk9SOgorCQlpc2NzaV9jb25uX3ByaW50ayhLRVJOX0VSUiwgY29ubiwKKwkJCQkgICJwZHUgKG9wIDB4JXggaXR0IDB4JXgpIHJlamVjdGVkICIKKwkJCQkgICJkdWUgdG8gRGF0YURpZ2VzdCBlcnJvci5cbiIsCisJCQkJICByZWplY3RlZF9wZHUuaXR0LCBvcGNvZGUpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1JFQVNPTl9JTU1fQ01EX1JFSkVDVDoKKwkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sCisJCQkJICAicGR1IChvcCAweCV4IGl0dCAweCV4KSByZWplY3RlZC4gVG9vIG1hbnkgIgorCQkJCSAgImltbWVkaWF0ZSBjb21tYW5kcy5cbiIsCisJCQkJICByZWplY3RlZF9wZHUuaXR0LCBvcGNvZGUpOworCQkvKgorCQkgKiBXZSBvbmx5IHNlbmQgb25lIFRNRiBhdCBhIHRpbWUgc28gaWYgdGhlIHRhcmdldCBjb3VsZCBub3QKKwkJICogaGFuZGxlIGl0LCB0aGVuIGl0IHNob3VsZCBnZXQgZml4ZWQgKFJGQyBtYW5kYXRlcyB0aGF0CisJCSAqIGEgdGFyZ2V0IGNhbiBoYW5kbGUgb25lIGltbWVkaWF0ZSBUTUYgcGVyIGNvbm4pLgorCQkgKgorCQkgKiBGb3Igbm9wcy1vdXRzLCB3ZSBjb3VsZCBoYXZlIHNlbnQgbW9yZSB0aGFuIG9uZSBpZgorCQkgKiB0aGUgdGFyZ2V0IGlzIHNlbmRpbmcgdXMgbG90cyBvZiBub3AtaW5zCisJCSAqLworCQlpZiAob3Bjb2RlICE9IElTQ1NJX09QX05PT1BfT1VUKQorCQkJcmV0dXJuIDA7CisKKwkJIGlmIChyZWplY3RlZF9wZHUuaXR0ID09IGNwdV90b19iZTMyKElTQ1NJX1JFU0VSVkVEX1RBRykpCisJCQkvKgorCQkJICogbm9wLW91dCBpbiByZXNwb25zZSB0byB0YXJnZXQncyBub3Atb3V0IHJlamVjdGVkLgorCQkJICogSnVzdCByZXNlbmQuCisJCQkgKi8KKwkJCWlzY3NpX3NlbmRfbm9wb3V0KGNvbm4sCisJCQkJCSAgKHN0cnVjdCBpc2NzaV9ub3BpbiopJnJlamVjdGVkX3BkdSk7CisJCWVsc2UgeworCQkJc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2s7CisJCQkvKgorCQkJICogT3VyIG5vcCBhcyBwaW5nIGdvdCBkcm9wcGVkLiBXZSBrbm93IHRoZSB0YXJnZXQKKwkJCSAqIGFuZCB0cmFuc3BvcnQgYXJlIG9rIHNvIGp1c3QgY2xlYW4gdXAKKwkJCSAqLworCQkJdGFzayA9IGlzY3NpX2l0dF90b190YXNrKGNvbm4sIHJlamVjdGVkX3BkdS5pdHQpOworCQkJaWYgKCF0YXNrKSB7CisJCQkJaXNjc2lfY29ubl9wcmludGsoS0VSTl9FUlIsIGNvbm4sCisJCQkJCQkgIkludmFsaWQgcGR1IHJlamVjdC4gQ291bGQgIgorCQkJCQkJICJub3QgbG9va3VwIHJlamVjdGVkIHRhc2suXG4iKTsKKwkJCQlyYyA9IElTQ1NJX0VSUl9CQURfSVRUOworCQkJfSBlbHNlCisJCQkJcmMgPSBpc2NzaV9ub3Bfb3V0X3JzcCh0YXNrLAorCQkJCQkoc3RydWN0IGlzY3NpX25vcGluKikmcmVqZWN0ZWRfcGR1LAorCQkJCQlOVUxMLCAwKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlpc2NzaV9jb25uX3ByaW50ayhLRVJOX0VSUiwgY29ubiwKKwkJCQkgICJwZHUgKG9wIDB4JXggaXR0IDB4JXgpIHJlamVjdGVkLiBSZWFzb24gIgorCQkJCSAgImNvZGUgMHgleFxuIiwgcmVqZWN0ZWRfcGR1Lml0dCwKKwkJCQkgIHJlamVjdGVkX3BkdS5vcGNvZGUsIHJlamVjdC0+cmVhc29uKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0xMDM4LDE1ICsxMTQxLDggQEAKIAkJfQogCQljb25uLT5leHBfc3RhdHNuID0gYmUzMl90b19jcHUoaGRyLT5zdGF0c24pICsgMTsKIAotCQlpZiAoY29ubi0+cGluZ190YXNrICE9IHRhc2spCi0JCQkvKgotCQkJICogSWYgdGhpcyBpcyBub3QgaW4gcmVzcG9uc2UgdG8gb25lIG9mIG91cgotCQkJICogbm9wcyB0aGVuIGl0IG11c3QgYmUgZnJvbSB1c2Vyc3BhY2UuCi0JCQkgKi8KLQkJCWdvdG8gcmVjdl9wZHU7Ci0KLQkJbW9kX3RpbWVyKCZjb25uLT50cmFuc3BvcnRfdGltZXIsIGppZmZpZXMgKyBjb25uLT5yZWN2X3RpbWVvdXQpOwotCQlpc2NzaV9jb21wbGV0ZV90YXNrKHRhc2ssIElTQ1NJX1RBU0tfQ09NUExFVEVEKTsKKwkJcmMgPSBpc2NzaV9ub3Bfb3V0X3JzcCh0YXNrLCAoc3RydWN0IGlzY3NpX25vcGluKiloZHIsCisJCQkJICAgICAgIGRhdGEsIGRhdGFsZW4pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyYyA9IElTQ1NJX0VSUl9CQURfT1BDT0RFOwpAQCAtMTIxMiw2ICsxMzA4LDkgQEAKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayA9IGNvbm4tPnRhc2s7CiAJaW50IHJjOwogCisJaWYgKHRlc3RfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCkpCisJCXJldHVybiAtRU5PREFUQTsKKwogCV9faXNjc2lfZ2V0X3Rhc2sodGFzayk7CiAJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCXJjID0gY29ubi0+c2Vzc2lvbi0+dHQtPnhtaXRfdGFzayh0YXNrKTsKQEAgLTEyNjEsNyArMTM2MCw3IEBACiAJaW50IHJjID0gMDsKIAogCXNwaW5fbG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7Ci0JaWYgKHVubGlrZWx5KGNvbm4tPnN1c3BlbmRfdHgpKSB7CisJaWYgKHRlc3RfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCkpIHsKIAkJSVNDU0lfREJHX1NFU1NJT04oY29ubi0+c2Vzc2lvbiwgIlR4IHN1c3BlbmRlZCFcbiIpOwogCQlzcGluX3VubG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJCXJldHVybiAtRU5PREFUQTsKQEAgLTEyNzAsNyArMTM2OSw3IEBACiAJaWYgKGNvbm4tPnRhc2spIHsKIAkJcmMgPSBpc2NzaV94bWl0X3Rhc2soY29ubik7CiAJICAgICAgICBpZiAocmMpCi0JCSAgICAgICAgZ290byBhZ2FpbjsKKwkJICAgICAgICBnb3RvIGRvbmU7CiAJfQogCiAJLyoKQEAgLTEyOTAsNyArMTM4OSw3IEBACiAJCX0KIAkJcmMgPSBpc2NzaV94bWl0X3Rhc2soY29ubik7CiAJCWlmIChyYykKLQkJCWdvdG8gYWdhaW47CisJCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogcHJvY2VzcyBwZW5kaW5nIGNvbW1hbmQgcXVldWUgKi8KQEAgLTEzMTEsMTQgKzE0MTAsMTQgQEAKIAkJCQlsaXN0X2FkZF90YWlsKCZjb25uLT50YXNrLT5ydW5uaW5nLAogCQkJCQkgICAgICAmY29ubi0+Y21kcXVldWUpOwogCQkJCWNvbm4tPnRhc2sgPSBOVUxMOwotCQkJCWdvdG8gYWdhaW47CisJCQkJZ290byBkb25lOwogCQkJfSBlbHNlCiAJCQkJZmFpbF9zY3NpX3Rhc2soY29ubi0+dGFzaywgRElEX0FCT1JUKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXJjID0gaXNjc2lfeG1pdF90YXNrKGNvbm4pOwogCQlpZiAocmMpCi0JCQlnb3RvIGFnYWluOworCQkJZ290byBkb25lOwogCQkvKgogCQkgKiB3ZSBjb3VsZCBjb250aW51b3VzbHkgZ2V0IG5ldyB0YXNrIHJlcXVlc3RzIHNvCiAJCSAqIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG1nbXQgcXVldWUgZm9yIG5vcHMgdGhhdCBuZWVkIHRvCkBAIC0xMzQ0LDE2ICsxNDQzLDE0IEBACiAJCWNvbm4tPnRhc2stPnN0YXRlID0gSVNDU0lfVEFTS19SVU5OSU5HOwogCQlyYyA9IGlzY3NpX3htaXRfdGFzayhjb25uKTsKIAkJaWYgKHJjKQotCQkJZ290byBhZ2FpbjsKKwkJCWdvdG8gZG9uZTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZjb25uLT5tZ210cXVldWUpKQogCQkJZ290byBjaGVja19tZ210OwogCX0KIAlzcGluX3VubG9ja19iaCgmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJcmV0dXJuIC1FTk9EQVRBOwogCi1hZ2FpbjoKLQlpZiAodW5saWtlbHkoY29ubi0+c3VzcGVuZF90eCkpCi0JCXJjID0gLUVOT0RBVEE7Citkb25lOgogCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0xNDc0LDYgKzE1NzEsMTIgQEAKIAkJZ290byBmYXVsdDsKIAl9CiAKKwlpZiAodGVzdF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3R4KSkgeworCQlyZWFzb24gPSBGQUlMVVJFX1NFU1NJT05fSU5fUkVDT1ZFUlk7CisJCXNjLT5yZXN1bHQgPSBESURfUkVRVUVVRTsKKwkJZ290byBmYXVsdDsKKwl9CisKIAlpZiAoaXNjc2lfY2hlY2tfY21kc25fd2luZG93X2Nsb3NlZChjb25uKSkgewogCQlyZWFzb24gPSBGQUlMVVJFX1dJTkRPV19DTE9TRUQ7CiAJCWdvdG8gcmVqZWN0OwpAQCAtMTQ5Nyw2ICsxNjAwLDcgQEAKIAkJCX0KIAkJfQogCQlpZiAoc2Vzc2lvbi0+dHQtPnhtaXRfdGFzayh0YXNrKSkgeworCQkJc2Vzc2lvbi0+Y21kc24tLTsKIAkJCXJlYXNvbiA9IEZBSUxVUkVfU0VTU0lPTl9OT1RfUkVBRFk7CiAJCQlnb3RvIHByZXBkX3JlamVjdDsKIAkJfQpAQCAtMTcxMiw2ICsxODE2LDMzIEBACiAJfQogfQogCisvKioKKyAqIGlzY3NpX3N1c3BlbmRfcXVldWUgLSBzdXNwZW5kIGlzY3NpX3F1ZXVlY29tbWFuZAorICogQGNvbm46IGlzY3NpIGNvbm4gdG8gc3RvcCBxdWV1ZWluZyBJTyBvbgorICoKKyAqIFRoaXMgZ3JhYnMgdGhlIHNlc3Npb24gbG9jayB0byBtYWtlIHN1cmUgbm8gb25lIGlzIGluCisgKiB4bWl0X3Rhc2svcXVldWVjb21tYW5kLCBhbmQgdGhlbiBzZXRzIHN1c3BlbmQgdG8gcHJldmVudAorICogbmV3IGNvbW1hbmRzIGZyb20gYmVpbmcgcXVldWVkLiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkCisgKiBieSBvZmZsb2FkIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHN5bmMgYSBwYXRoIGxpa2UgZXAgZGlzY29ubmVjdAorICogd2l0aCB0aGUgaXNjc2lfcXVldWVjb21tYW5kL3htaXRfdGFzay4gVG8gc3RhcnQgSU8gYWdhaW4gbGliaXNjc2kKKyAqIHdpbGwgY2FsbCBpc2NzaV9zdGFydF90eCBhbmQgaXNjc2lfdW5ibG9ja19zZXNzaW9uIHdoZW4gaW4gRkZQLgorICovCit2b2lkIGlzY3NpX3N1c3BlbmRfcXVldWUoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCit7CisJc3Bpbl9sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKKwlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF90eCk7CisJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNjc2lfc3VzcGVuZF9xdWV1ZSk7CisKKy8qKgorICogaXNjc2lfc3VzcGVuZF90eCAtIHN1c3BlbmQgaXNjc2lfZGF0YV94bWl0CisgKiBAY29ubjogaXNjc2kgY29ubiB0cCBzdG9wIHByb2Nlc3NpbmcgSU8gb24uCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBzdXNwZW5kIGJpdCB0byBwcmV2ZW50IGlzY3NpX2RhdGFfeG1pdAorICogZnJvbSBzZW5kaW5nIG5ldyBJTywgYW5kIGlmIHdvcmsgaXMgcXVldWVkIG9uIHRoZSB4bWl0IHRocmVhZAorICogaXQgd2lsbCB3YWl0IGZvciBpdCB0byBiZSBjb21wbGV0ZWQuCisgKi8KIHZvaWQgaXNjc2lfc3VzcGVuZF90eChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNvbm4tPnNlc3Npb24tPmhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGlic3JwLmMgYi9kcml2ZXJzL3Njc2kvbGlic3JwLmMKaW5kZXggMjc0MmFlOC4uOWFkMzhlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNycC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJzcnAuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgcmluZ1tpXS0+YnVmLCByaW5nW2ldLT5kbWEpOwogCQlrZnJlZShyaW5nW2ldKTsKIAl9CisJa2ZyZWUocmluZyk7CiB9CiAKIGludCBzcnBfdGFyZ2V0X2FsbG9jKHN0cnVjdCBzcnBfdGFyZ2V0ICp0YXJnZXQsIHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL2xwZmMvTWFrZWZpbGUKaW5kZXggMWMyODY3MC4uYWQwNWQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvTWFrZWZpbGUKQEAgLTI4LDQgKzI4LDQgQEAKIAogbHBmYy1vYmpzIDo9IGxwZmNfbWVtLm8gbHBmY19zbGkubyBscGZjX2N0Lm8gbHBmY19lbHMubyBscGZjX2hiYWRpc2MubwlcCiAJbHBmY19pbml0Lm8gbHBmY19tYm94Lm8gbHBmY19ucG9ydGRpc2MubyBscGZjX3Njc2kubyBscGZjX2F0dHIubyBcCi0JbHBmY192cG9ydC5vIGxwZmNfZGVidWdmcy5vCisJbHBmY192cG9ydC5vIGxwZmNfZGVidWdmcy5vIGxwZmNfYnNnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmMuaAppbmRleCAxODc3ZDk4Li5hYTEwZjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmYy5oCkBAIC0zMTIsNiArMzEyLDcgQEAKICNkZWZpbmUgRkNfQllQQVNTRURfTU9ERSAgICAgICAgMHgyMDAwMAkgLyogTlBvcnQgaXMgaW4gYnlwYXNzZWQgbW9kZSAqLwogI2RlZmluZSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJCTB4ODAwMDAgIC8qIE5lZWRzIHRvIGhhdmUgaXRzIHZwaSByZWdpc3RlcmVkICovCiAjZGVmaW5lIEZDX1JTQ05fREVGRVJSRUQJMHgxMDAwMDAgLyogQSBkZWZlcnJlZCBSU0NOIGJlaW5nIHByb2Nlc3NlZCAqLworI2RlZmluZSBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSSAweDIwMDAwMCAvKiBOZWVkIHRvIElOSVRfVlBJIGJlZm9yZSBGRElTQyAqLwogCiAJdWludDMyX3QgY3RfZmxhZ3M7CiAjZGVmaW5lIEZDX0NUX1JGRl9JRAkJMHgxCSAvKiBSRkZfSUQgYWNjZXB0ZWQgYnkgc3dpdGNoICovCkBAIC00NDAsNiArNDQxLDEyIEBACiAJTVNJWCwKIH07CiAKK3N0cnVjdCB1bnNvbF9yY3ZfY3RfY3R4IHsKKwl1aW50MzJfdCBjdHh0X2lkOworCXVpbnQzMl90IFNJRDsKKwl1aW50MzJfdCBveGlkOworfTsKKwogc3RydWN0IGxwZmNfaGJhIHsKIAkvKiBTQ1NJIGludGVyZmFjZSBmdW5jdGlvbiBqdW1wIHRhYmxlIGVudHJpZXMgKi8KIAlpbnQgKCpscGZjX25ld19zY3NpX2J1ZikKQEAgLTUyNSw2ICs1MzIsOCBAQAogI2RlZmluZSBGQ1BfWFJJX0FCT1JUX0VWRU5UCTB4MjAKICNkZWZpbmUgRUxTX1hSSV9BQk9SVF9FVkVOVAkweDQwCiAjZGVmaW5lIEFTWU5DX0VWRU5UCQkweDgwCisjZGVmaW5lIExJTktfRElTQUJMRUQJCTB4MTAwIC8qIExpbmsgZGlzYWJsZWQgYnkgdXNlciAqLworI2RlZmluZSBGQ0ZfRElTQ19JTlBST0dSRVNTCTB4MjAwIC8qIEZDRiBkaXNjb3ZlcnkgaW4gcHJvZ3Jlc3MgKi8KIAlzdHJ1Y3QgbHBmY19kbWFidWYgc2xpbTJwOwogCiAJTUFJTEJPWF90ICptYm94OwpAQCAtNjE2LDYgKzYyNSw4IEBACiAJdWludDMyX3QgaGJxX2NvdW50OwkgICAgICAgIC8qIENvdW50IG9mIGNvbmZpZ3VyZWQgSEJRcyAqLwogCXN0cnVjdCBoYnFfcyBoYnFzW0xQRkNfTUFYX0hCUVNdOyAvKiBsb2NhbCBjb3B5IG9mIGhicSBpbmRpY2llcyAgKi8KIAorCXVpbnQzMl90IGZjcF9xaWR4OwkJLyogbmV4dCB3b3JrIHF1ZXVlIHRvIHBvc3Qgd29yayB0byAqLworCiAJdW5zaWduZWQgbG9uZyBwY2lfYmFyMF9tYXA7ICAgICAvKiBQaHlzaWNhbCBhZGRyZXNzIGZvciBQQ0kgQkFSMCAqLwogCXVuc2lnbmVkIGxvbmcgcGNpX2JhcjFfbWFwOyAgICAgLyogUGh5c2ljYWwgYWRkcmVzcyBmb3IgUENJIEJBUjEgKi8KIAl1bnNpZ25lZCBsb25nIHBjaV9iYXIyX21hcDsgICAgIC8qIFBoeXNpY2FsIGFkZHJlc3MgZm9yIFBDSSBCQVIyICovCkBAIC02ODIsNiArNjkzLDcgQEAKIAlzdHJ1Y3QgcGNpX3Bvb2wgKmxwZmNfbWJ1Zl9wb29sOwogCXN0cnVjdCBwY2lfcG9vbCAqbHBmY19ocmJfcG9vbDsJLyogaGVhZGVyIHJlY2VpdmUgYnVmZmVyIHBvb2wgKi8KIAlzdHJ1Y3QgcGNpX3Bvb2wgKmxwZmNfZHJiX3Bvb2w7IC8qIGRhdGEgcmVjZWl2ZSBidWZmZXIgcG9vbCAqLworCXN0cnVjdCBwY2lfcG9vbCAqbHBmY19oYnFfcG9vbDsJLyogU0xJMyBoYnEgYnVmZmVyIHBvb2wgKi8KIAlzdHJ1Y3QgbHBmY19kbWFfcG9vbCBscGZjX21idWZfc2FmZXR5X3Bvb2w7CiAKIAltZW1wb29sX3QgKm1ib3hfbWVtX3Bvb2w7CkBAIC03NjMsMTEgKzc3NSwxOCBAQAogLyogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgY2FuIGJlIG91dHN0YW5kaW5nIGF0IGFueSB0aW1lKi8KICNkZWZpbmUgTFBGQ19NQVhfRVZUX0NPVU5UIDUxMgogCWF0b21pY190IGZhc3RfZXZlbnRfY291bnQ7CisJdWludDMyX3QgZmNvZV9ldmVudHRhZzsKKwl1aW50MzJfdCBmY29lX2V2ZW50dGFnX2F0X2ZjZl9zY2FuOwogCXN0cnVjdCBscGZjX2ZjZiBmY2Y7CiAJdWludDhfdCBmY19tYXBbM107CiAJdWludDhfdCB2YWxpZF92bGFuOwogCXVpbnQxNl90IHZsYW5faWQ7CiAJc3RydWN0IGxpc3RfaGVhZCBmY2ZfY29ubl9yZWNfbGlzdDsKKworCXN0cnVjdCBtdXRleCBjdF9ldmVudF9tdXRleDsgLyogc3luY2hyb25pemUgYWNjZXNzIHRvIGN0X2V2X3dhaXRlcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGN0X2V2X3dhaXRlcnM7CisJc3RydWN0IHVuc29sX3Jjdl9jdF9jdHggY3RfY3R4WzY0XTsKKwl1aW50MzJfdCBjdHhfaWR4OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgU2NzaV9Ib3N0ICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKaW5kZXggZmMwN2JlNS4uZTFhMzBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19hdHRyLmMKQEAgLTM5NCw3ICszOTQsMTIgQEAKIAljYXNlIExQRkNfSU5JVF9NQlhfQ01EUzoKIAljYXNlIExQRkNfTElOS19ET1dOOgogCWNhc2UgTFBGQ19IQkFfRVJST1I6Ci0JCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sICJMaW5rIERvd25cbiIpOworCQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBMSU5LX0RJU0FCTEVEKQorCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFLWxlbiwKKwkJCQkiTGluayBEb3duIC0gVXNlciBkaXNhYmxlZFxuIik7CisJCWVsc2UKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRS1sZW4sCisJCQkJIkxpbmsgRG93blxuIik7CiAJCWJyZWFrOwogCWNhc2UgTFBGQ19MSU5LX1VQOgogCWNhc2UgTFBGQ19DTEVBUl9MQToKQEAgLTQxMjcsNiArNDEzMiw5IEBACiAJLnZwb3J0X2Rpc2FibGUgPSBscGZjX3Zwb3J0X2Rpc2FibGUsCiAKIAkuc2V0X3Zwb3J0X3N5bWJvbGljX25hbWUgPSBscGZjX3NldF92cG9ydF9zeW1ib2xpY19uYW1lLAorCisJLmJzZ19yZXF1ZXN0ID0gbHBmY19ic2dfcmVxdWVzdCwKKwkuYnNnX3RpbWVvdXQgPSBscGZjX2JzZ190aW1lb3V0LAogfTsKIAogc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIGxwZmNfdnBvcnRfdHJhbnNwb3J0X2Z1bmN0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYnNnLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNmJmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2JzZy5jCkBAIC0wLDAgKzEsOTA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEVtdWxleCBMaW51eCBEZXZpY2UgRHJpdmVyIGZvciAgICAgICAgICoKKyAqIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRW11bGV4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgKgorICogRU1VTEVYIGFuZCBTTEkgYXJlIHRyYWRlbWFya3Mgb2YgRW11bGV4LiAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIHd3dy5lbXVsZXguY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAgICoKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCAgICAgICAqCisgKiBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwuICoKKyAqIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCAgICAgICAgICAqCisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCAgKgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSAgICAgICoKKyAqIERJU0NMQUlNRUQsIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFRIQVQgU1VDSCBESVNDTEFJTUVSUyBBUkUgSEVMRCAqCisgKiBUTyBCRSBMRUdBTExZIElOVkFMSUQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciAgKgorICogbW9yZSBkZXRhaWxzLCBhIGNvcHkgb2Ygd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlIENPUFlJTkcgICoKKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBwYWNrYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ic2dfZmMuaD4KKworI2luY2x1ZGUgImxwZmNfaHc0LmgiCisjaW5jbHVkZSAibHBmY19ody5oIgorI2luY2x1ZGUgImxwZmNfc2xpLmgiCisjaW5jbHVkZSAibHBmY19zbGk0LmgiCisjaW5jbHVkZSAibHBmY19ubC5oIgorI2luY2x1ZGUgImxwZmNfZGlzYy5oIgorI2luY2x1ZGUgImxwZmNfc2NzaS5oIgorI2luY2x1ZGUgImxwZmMuaCIKKyNpbmNsdWRlICJscGZjX2xvZ21zZy5oIgorI2luY2x1ZGUgImxwZmNfY3J0bi5oIgorI2luY2x1ZGUgImxwZmNfdnBvcnQuaCIKKyNpbmNsdWRlICJscGZjX3ZlcnNpb24uaCIKKworLyoqCisgKiBscGZjX2JzZ19ycG9ydF9jdCAtIHNlbmQgYSBDVCBjb21tYW5kIGZyb20gYSBic2cgcmVxdWVzdAorICogQGpvYjogZmNfYnNnX2pvYiB0byBoYW5kbGUKKyAqLworc3RhdGljIGludAorbHBmY19ic2dfcnBvcnRfY3Qoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGpvYi0+c2hvc3Q7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gKHN0cnVjdCBscGZjX3Zwb3J0ICopam9iLT5zaG9zdC0+aG9zdGRhdGE7CisJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gdnBvcnQtPnBoYmE7CisJc3RydWN0IGxwZmNfcnBvcnRfZGF0YSAqcmRhdGEgPSBqb2ItPnJwb3J0LT5kZF9kYXRhOworCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwID0gcmRhdGEtPnBub2RlOworCXN0cnVjdCB1bHBfYmRlNjQgKmJwbCA9IE5VTEw7CisJdWludDMyX3QgdGltZW91dDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqY21kaW9jYnEgPSBOVUxMOworCXN0cnVjdCBscGZjX2lvY2JxICpyc3Bpb2NicSA9IE5VTEw7CisJSU9DQl90ICpjbWQ7CisJSU9DQl90ICpyc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpibXAgPSBOVUxMOworCWludCByZXF1ZXN0X25zZWc7CisJaW50IHJlcGx5X25zZWc7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2VsID0gTlVMTDsKKwlpbnQgbnVtYmRlOworCWRtYV9hZGRyX3QgYnVzYWRkcjsKKwlpbnQgcmMgPSAwOworCisJLyogaW4gY2FzZSBubyBkYXRhIGlzIHRyYW5zZmVycmVkICovCisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKworCWlmICghbHBmY19ubHBfZ2V0KG5kbHApKSB7CisJCWpvYi0+cmVwbHktPnJlc3VsdCA9IC1FTk9ERVY7CisJCXJldHVybiAwOworCX0KKworCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9FTFNfU05EX01BU0spIHsKKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfbmRscF9leGl0OworCX0KKworCXNwaW5fbG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJY21kaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJaWYgKCFjbWRpb2NicSkgeworCQlyYyA9IC1FTk9NRU07CisJCXNwaW5fdW5sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwkJZ290byBmcmVlX25kbHBfZXhpdDsKKwl9CisJY21kID0gJmNtZGlvY2JxLT5pb2NiOworCisJcnNwaW9jYnEgPSBscGZjX3NsaV9nZXRfaW9jYnEocGhiYSk7CisJaWYgKCFyc3Bpb2NicSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9jbWRpb2NicTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCisJcnNwID0gJnJzcGlvY2JxLT5pb2NiOworCisJYm1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibXApIHsKKwkJcmMgPSAtRU5PTUVNOworCQlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCQlnb3RvIGZyZWVfcnNwaW9jYnE7CisJfQorCisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlibXAtPnZpcnQgPSBscGZjX21idWZfYWxsb2MocGhiYSwgMCwgJmJtcC0+cGh5cyk7CisJaWYgKCFibXAtPnZpcnQpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfYm1wOworCX0KKwlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmYm1wLT5saXN0KTsKKwlicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSBibXAtPnZpcnQ7CisKKwlyZXF1ZXN0X25zZWcgPSBwY2lfbWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCQkgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJZm9yX2VhY2hfc2coam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwgc2dlbCwgcmVxdWVzdF9uc2VnLCBudW1iZGUpIHsKKwkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NDsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gc2dfZG1hX2xlbihzZ2VsKTsKKwkJYnBsLT50dXMudyA9IGNwdV90b19sZTMyKGJwbC0+dHVzLncpOworCQlicGwtPmFkZHJMb3cgPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhidXNhZGRyKSk7CisJCWJwbC0+YWRkckhpZ2ggPSBjcHVfdG9fbGUzMihwdXRQYWRkckhpZ2goYnVzYWRkcikpOworCQlicGwrKzsKKwl9CisKKwlyZXBseV9uc2VnID0gcGNpX21hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJZm9yX2VhY2hfc2coam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsIHNnZWwsIHJlcGx5X25zZWcsIG51bWJkZSkgeworCQlidXNhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2dlbCk7CisJCWJwbC0+dHVzLmYuYmRlRmxhZ3MgPSBCVUZGX1RZUEVfQkRFXzY0STsKKwkJYnBsLT50dXMuZi5iZGVTaXplID0gc2dfZG1hX2xlbihzZ2VsKTsKKwkJYnBsLT50dXMudyA9IGNwdV90b19sZTMyKGJwbC0+dHVzLncpOworCQlicGwtPmFkZHJMb3cgPSBjcHVfdG9fbGUzMihwdXRQYWRkckxvdyhidXNhZGRyKSk7CisJCWJwbC0+YWRkckhpZ2ggPSBjcHVfdG9fbGUzMihwdXRQYWRkckhpZ2goYnVzYWRkcikpOworCQlicGwrKzsKKwl9CisKKwljbWQtPnVuLmdlbnJlcTY0LmJkbC51bHBJb1RhZzMyID0gMDsKKwljbWQtPnVuLmdlbnJlcTY0LmJkbC5hZGRySGlnaCA9IHB1dFBhZGRySGlnaChibXAtPnBoeXMpOworCWNtZC0+dW4uZ2VucmVxNjQuYmRsLmFkZHJMb3cgPSBwdXRQYWRkckxvdyhibXAtPnBoeXMpOworCWNtZC0+dW4uZ2VucmVxNjQuYmRsLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JMUF82NDsKKwljbWQtPnVuLmdlbnJlcTY0LmJkbC5iZGVTaXplID0KKwkJKHJlcXVlc3RfbnNlZyArIHJlcGx5X25zZWcpICogc2l6ZW9mKHN0cnVjdCB1bHBfYmRlNjQpOworCWNtZC0+dWxwQ29tbWFuZCA9IENNRF9HRU5fUkVRVUVTVDY0X0NSOworCWNtZC0+dW4uZ2VucmVxNjQudzUuaGNzdy5GY3RsID0gKFNJIHwgTEEpOworCWNtZC0+dW4uZ2VucmVxNjQudzUuaGNzdy5EZmN0bCA9IDA7CisJY21kLT51bi5nZW5yZXE2NC53NS5oY3N3LlJjdGwgPSBGQ19VTlNPTF9DVEw7CisJY21kLT51bi5nZW5yZXE2NC53NS5oY3N3LlR5cGUgPSBGQ19DT01NT05fVFJBTlNQT1JUX1VMUDsKKwljbWQtPnVscEJkZUNvdW50ID0gMTsKKwljbWQtPnVscExlID0gMTsKKwljbWQtPnVscENsYXNzID0gQ0xBU1MzOworCWNtZC0+dWxwQ29udGV4dCA9IG5kbHAtPm5scF9ycGk7CisJY21kLT51bHBPd25lciA9IE9XTl9DSElQOworCWNtZGlvY2JxLT52cG9ydCA9IHBoYmEtPnBwb3J0OworCWNtZGlvY2JxLT5jb250ZXh0MSA9IE5VTEw7CisJY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCisJdGltZW91dCA9IHBoYmEtPmZjX3JhdG92ICogMjsKKwlqb2ItPmRkX2RhdGEgPSBjbWRpb2NicTsKKworCXJjID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLCByc3Bpb2NicSwKKwkJCQkJdGltZW91dCArIExQRkNfRFJWUl9USU1FT1VUKTsKKworCWlmIChyYyAhPSBJT0NCX1RJTUVET1VUKSB7CisJCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsCisJCQkgICAgIGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2NudCwgRE1BX1RPX0RFVklDRSk7CisJCXBjaV91bm1hcF9zZyhwaGJhLT5wY2lkZXYsIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LAorCQkJICAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCX0KKworCWlmIChyYyA9PSBJT0NCX1RJTUVET1VUKSB7CisJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgcnNwaW9jYnEpOworCQlyYyA9IC1FQUNDRVM7CisJCWdvdG8gZnJlZV9uZGxwX2V4aXQ7CisJfQorCisJaWYgKHJjICE9IElPQ0JfU1VDQ0VTUykgeworCQlyYyA9IC1FQUNDRVM7CisJCWdvdG8gZnJlZV9vdXRkbXA7CisJfQorCisJaWYgKHJzcC0+dWxwU3RhdHVzKSB7CisJCWlmIChyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKSB7CisJCQlzd2l0Y2ggKHJzcC0+dW4udWxwV29yZFs0XSAmIDB4ZmYpIHsKKwkJCWNhc2UgSU9FUlJfU0VRVUVOQ0VfVElNRU9VVDoKKwkJCQlyYyA9IC1FVElNRURPVVQ7CisJCQkJYnJlYWs7CisJCQljYXNlIElPRVJSX0lOVkFMSURfUlBJOgorCQkJCXJjID0gLUVGQVVMVDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcmMgPSAtRUFDQ0VTOworCQkJCWJyZWFrOworCQkJfQorCQkJZ290byBmcmVlX291dGRtcDsKKwkJfQorCX0gZWxzZQorCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPQorCQkJcnNwLT51bi5nZW5yZXE2NC5iZGwuYmRlU2l6ZTsKKworZnJlZV9vdXRkbXA6CisJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwlscGZjX21idWZfZnJlZShwaGJhLCBibXAtPnZpcnQsIGJtcC0+cGh5cyk7CitmcmVlX2JtcDoKKwlrZnJlZShibXApOworZnJlZV9yc3Bpb2NicToKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKK2ZyZWVfY21kaW9jYnE6CisJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCBjbWRpb2NicSk7CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworZnJlZV9uZGxwX2V4aXQ6CisJbHBmY19ubHBfcHV0KG5kbHApOworCisJLyogbWFrZSBlcnJvciBjb2RlIGF2YWlsYWJsZSB0byB1c2Vyc3BhY2UgKi8KKwlqb2ItPnJlcGx5LT5yZXN1bHQgPSByYzsKKwkvKiBjb21wbGV0ZSB0aGUgam9iIGJhY2sgdG8gdXNlcnNwYWNlICovCisJam9iLT5qb2JfZG9uZShqb2IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbHBmY19ic2dfcnBvcnRfZWxzIC0gc2VuZCBhbiBFTFMgY29tbWFuZCBmcm9tIGEgYnNnIHJlcXVlc3QKKyAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCisgKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX3Jwb3J0X2VscyhzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBscGZjX3Jwb3J0X2RhdGEgKnJkYXRhID0gam9iLT5ycG9ydC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqbmRscCA9IHJkYXRhLT5wbm9kZTsKKworCXVpbnQzMl90IGVsc2NtZDsKKwl1aW50MzJfdCBjbWRzaXplOworCXVpbnQzMl90IHJzcHNpemU7CisJc3RydWN0IGxwZmNfaW9jYnEgKnJzcGlvY2JxOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NicTsKKwlJT0NCX3QgKnJzcDsKKwl1aW50MTZfdCBycGkgPSAwOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqcGNtZDsKKwlzdHJ1Y3QgbHBmY19kbWFidWYgKnByc3A7CisJc3RydWN0IGxwZmNfZG1hYnVmICpwYnVmbGlzdCA9IE5VTEw7CisJc3RydWN0IHVscF9iZGU2NCAqYnBsOworCWludCBpb2NiX3N0YXR1czsKKwlpbnQgcmVxdWVzdF9uc2VnOworCWludCByZXBseV9uc2VnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlbCA9IE5VTEw7CisJaW50IG51bWJkZTsKKwlkbWFfYWRkcl90IGJ1c2FkZHI7CisJaW50IHJjID0gMDsKKworCS8qIGluIGNhc2Ugbm8gZGF0YSBpcyB0cmFuc2ZlcnJlZCAqLworCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisKKwlpZiAoIWxwZmNfbmxwX2dldChuZGxwKSkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWVsc2NtZCA9IGpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLnJfZWxzLmVsc19jb2RlOworCWNtZHNpemUgPSBqb2ItPnJlcXVlc3RfcGF5bG9hZC5wYXlsb2FkX2xlbjsKKwlyc3BzaXplID0gam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOworCXJzcGlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHBoYmEpOworCWlmICghcnNwaW9jYnEpIHsKKwkJbHBmY19ubHBfcHV0KG5kbHApOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJzcCA9ICZyc3Bpb2NicS0+aW9jYjsKKwlycGkgPSBuZGxwLT5ubHBfcnBpOworCisJY21kaW9jYnEgPSBscGZjX3ByZXBfZWxzX2lvY2IocGhiYS0+cHBvcnQsIDEsIGNtZHNpemUsIDAsIG5kbHAsCisJCQkJICAgICAgbmRscC0+bmxwX0RJRCwgZWxzY21kKTsKKworCWlmICghY21kaW9jYnEpIHsKKwkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLCByc3Bpb2NicSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWpvYi0+ZGRfZGF0YSA9IGNtZGlvY2JxOworCXBjbWQgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2JxLT5jb250ZXh0MjsKKwlwcnNwID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwY21kLT5saXN0Lm5leHQ7CisKKwlscGZjX21idWZfZnJlZShwaGJhLCBwY21kLT52aXJ0LCBwY21kLT5waHlzKTsKKwlrZnJlZShwY21kKTsKKwlscGZjX21idWZfZnJlZShwaGJhLCBwcnNwLT52aXJ0LCBwcnNwLT5waHlzKTsKKwlrZnJlZShwcnNwKTsKKwljbWRpb2NicS0+Y29udGV4dDIgPSBOVUxMOworCisJcGJ1Zmxpc3QgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIGNtZGlvY2JxLT5jb250ZXh0MzsKKwlicGwgPSAoc3RydWN0IHVscF9iZGU2NCAqKSBwYnVmbGlzdC0+dmlydDsKKworCXJlcXVlc3RfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcXVlc3RfcGF5bG9hZC5zZ19saXN0LAorCQkJCSAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKworCWZvcl9lYWNoX3NnKGpvYi0+cmVxdWVzdF9wYXlsb2FkLnNnX2xpc3QsIHNnZWwsIHJlcXVlc3RfbnNlZywgbnVtYmRlKSB7CisJCWJ1c2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZ2VsKTsKKwkJYnBsLT50dXMuZi5iZGVGbGFncyA9IEJVRkZfVFlQRV9CREVfNjQ7CisJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNnX2RtYV9sZW4oc2dlbCk7CisJCWJwbC0+dHVzLncgPSBjcHVfdG9fbGUzMihicGwtPnR1cy53KTsKKwkJYnBsLT5hZGRyTG93ID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3coYnVzYWRkcikpOworCQlicGwtPmFkZHJIaWdoID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKGJ1c2FkZHIpKTsKKwkJYnBsKys7CisJfQorCisJcmVwbHlfbnNlZyA9IHBjaV9tYXBfc2cocGhiYS0+cGNpZGV2LCBqb2ItPnJlcGx5X3BheWxvYWQuc2dfbGlzdCwKKwkJCQlqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LCBETUFfRlJPTV9ERVZJQ0UpOworCWZvcl9lYWNoX3NnKGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19saXN0LCBzZ2VsLCByZXBseV9uc2VnLCBudW1iZGUpIHsKKwkJYnVzYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnZWwpOworCQlicGwtPnR1cy5mLmJkZUZsYWdzID0gQlVGRl9UWVBFX0JERV82NEk7CisJCWJwbC0+dHVzLmYuYmRlU2l6ZSA9IHNnX2RtYV9sZW4oc2dlbCk7CisJCWJwbC0+dHVzLncgPSBjcHVfdG9fbGUzMihicGwtPnR1cy53KTsKKwkJYnBsLT5hZGRyTG93ID0gY3B1X3RvX2xlMzIocHV0UGFkZHJMb3coYnVzYWRkcikpOworCQlicGwtPmFkZHJIaWdoID0gY3B1X3RvX2xlMzIocHV0UGFkZHJIaWdoKGJ1c2FkZHIpKTsKKwkJYnBsKys7CisJfQorCisJY21kaW9jYnEtPmlvY2IudW4uZWxzcmVxNjQuYmRsLmJkZVNpemUgPQorCQkocmVxdWVzdF9uc2VnICsgcmVwbHlfbnNlZykgKiBzaXplb2Yoc3RydWN0IHVscF9iZGU2NCk7CisJY21kaW9jYnEtPmlvY2IudWxwQ29udGV4dCA9IHJwaTsKKwljbWRpb2NicS0+aW9jYl9mbGFnIHw9IExQRkNfSU9fTElCREZDOworCWNtZGlvY2JxLT5jb250ZXh0MSA9IE5VTEw7CisJY21kaW9jYnEtPmNvbnRleHQyID0gTlVMTDsKKworCWlvY2Jfc3RhdHVzID0gbHBmY19zbGlfaXNzdWVfaW9jYl93YWl0KHBoYmEsIExQRkNfRUxTX1JJTkcsIGNtZGlvY2JxLAorCQkJCQlyc3Bpb2NicSwgKHBoYmEtPmZjX3JhdG92ICogMikKKwkJCQkJICAgICAgICsgTFBGQ19EUlZSX1RJTUVPVVQpOworCisJLyogcmVsZWFzZSB0aGUgbmV3IG5kbHAgb25jZSB0aGUgaW9jYiBjb21wbGV0ZXMgKi8KKwlscGZjX25scF9wdXQobmRscCk7CisJaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpIHsKKwkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfbGlzdCwKKwkJCSAgICAgam9iLT5yZXF1ZXN0X3BheWxvYWQuc2dfY250LCBETUFfVE9fREVWSUNFKTsKKwkJcGNpX3VubWFwX3NnKHBoYmEtPnBjaWRldiwgam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCQkgICAgIGpvYi0+cmVwbHlfcGF5bG9hZC5zZ19jbnQsIERNQV9GUk9NX0RFVklDRSk7CisJfQorCisJaWYgKGlvY2Jfc3RhdHVzID09IElPQ0JfU1VDQ0VTUykgeworCQlpZiAocnNwLT51bHBTdGF0dXMgPT0gSU9TVEFUX1NVQ0NFU1MpIHsKKwkJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9CisJCQkJcnNwLT51bi5lbHNyZXE2NC5iZGwuYmRlU2l6ZTsKKwkJCXJjID0gMDsKKwkJfSBlbHNlIGlmIChyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfTFNfUkpUKSB7CisJCQlzdHJ1Y3QgZmNfYnNnX2N0ZWxzX3JlcGx5ICplbHNfcmVwbHk7CisJCQkvKiBMU19SSlQgZGF0YSByZXR1cm5lZCBpbiB3b3JkIDQgKi8KKwkJCXVpbnQ4X3QgKnJqdF9kYXRhID0gKHVpbnQ4X3QgKikmcnNwLT51bi51bHBXb3JkWzRdOworCisJCQllbHNfcmVwbHkgPSAmam9iLT5yZXBseS0+cmVwbHlfZGF0YS5jdGVsc19yZXBseTsKKwkJCWpvYi0+cmVwbHktPnJlc3VsdCA9IDA7CisJCQllbHNfcmVwbHktPnN0YXR1cyA9IEZDX0NURUxTX1NUQVRVU19SRUpFQ1Q7CisJCQllbHNfcmVwbHktPnJqdF9kYXRhLmFjdGlvbiA9IHJqdF9kYXRhWzBdOworCQkJZWxzX3JlcGx5LT5yanRfZGF0YS5yZWFzb25fY29kZSA9IHJqdF9kYXRhWzFdOworCQkJZWxzX3JlcGx5LT5yanRfZGF0YS5yZWFzb25fZXhwbGFuYXRpb24gPSByanRfZGF0YVsyXTsKKwkJCWVsc19yZXBseS0+cmp0X2RhdGEudmVuZG9yX3VuaXF1ZSA9IHJqdF9kYXRhWzNdOworCQl9IGVsc2UKKwkJCXJjID0gLUVJTzsKKwl9IGVsc2UKKwkJcmMgPSAtRUlPOworCisJaWYgKGlvY2Jfc3RhdHVzICE9IElPQ0JfVElNRURPVVQpCisJCWxwZmNfZWxzX2ZyZWVfaW9jYihwaGJhLCBjbWRpb2NicSk7CisKKwlscGZjX3NsaV9yZWxlYXNlX2lvY2JxKHBoYmEsIHJzcGlvY2JxKTsKKworb3V0OgorCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+am9iX2RvbmUoam9iKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbHBmY19jdF9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCWludCByZWY7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CisKKwkvKiBFdmVudCB0eXBlIGFuZCB3YWl0ZXIgaWRlbnRpZmllcnMgKi8KKwl1aW50MzJfdCB0eXBlX21hc2s7CisJdWludDMyX3QgcmVxX2lkOworCXVpbnQzMl90IHJlZ19pZDsKKworCS8qIG5leHQgdHdvIGZsYWdzIGFyZSBoZXJlIGZvciB0aGUgYXV0by1kZWxldGUgbG9naWMgKi8KKwl1bnNpZ25lZCBsb25nIHdhaXRfdGltZV9zdGFtcDsKKwlpbnQgd2FpdGluZzsKKworCS8qIHNlZW4gYW5kIG5vdCBzZWVuIGV2ZW50cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRzX3RvX2dldDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50c190b19zZWU7Cit9OworCitzdHJ1Y3QgZXZlbnRfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXVpbnQzMl90IHR5cGU7CisJdWludDMyX3QgaW1tZWRfZGF0OworCXZvaWQgKmRhdGE7CisJdWludDMyX3QgbGVuOworfTsKKworc3RhdGljIHN0cnVjdCBscGZjX2N0X2V2ZW50ICoKK2xwZmNfY3RfZXZlbnRfbmV3KGludCBldl9yZWdfaWQsIHVpbnQzMl90IGV2X3JlcV9pZCkKK3sKKwlzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0ID0ga3phbGxvYyhzaXplb2YoKmV2dCksIEdGUF9LRVJORUwpOworCWlmICghZXZ0KQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19nZXQpOworCUlOSVRfTElTVF9IRUFEKCZldnQtPmV2ZW50c190b19zZWUpOworCWV2dC0+cmVxX2lkID0gZXZfcmVxX2lkOworCWV2dC0+cmVnX2lkID0gZXZfcmVnX2lkOworCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZldnQtPndxKTsKKworCXJldHVybiBldnQ7Cit9CisKK3N0YXRpYyB2b2lkCitscGZjX2N0X2V2ZW50X2ZyZWUoc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dCkKK3sKKwlzdHJ1Y3QgZXZlbnRfZGF0YSAqZWQ7CisKKwlsaXN0X2RlbCgmZXZ0LT5ub2RlKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fZ2V0KSkgeworCQllZCA9IGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0Lm5leHQsIHR5cGVvZigqZWQpLCBub2RlKTsKKwkJbGlzdF9kZWwoJmVkLT5ub2RlKTsKKwkJa2ZyZWUoZWQtPmRhdGEpOworCQlrZnJlZShlZCk7CisJfQorCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZldnQtPmV2ZW50c190b19zZWUpKSB7CisJCWVkID0gbGlzdF9lbnRyeShldnQtPmV2ZW50c190b19zZWUubmV4dCwgdHlwZW9mKCplZCksIG5vZGUpOworCQlsaXN0X2RlbCgmZWQtPm5vZGUpOworCQlrZnJlZShlZC0+ZGF0YSk7CisJCWtmcmVlKGVkKTsKKwl9CisKKwlrZnJlZShldnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2xwZmNfY3RfZXZlbnRfcmVmKHN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQpCit7CisJZXZ0LT5yZWYrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitscGZjX2N0X2V2ZW50X3VucmVmKHN0cnVjdCBscGZjX2N0X2V2ZW50ICpldnQpCit7CisJaWYgKC0tZXZ0LT5yZWYgPCAwKQorCQlscGZjX2N0X2V2ZW50X2ZyZWUoZXZ0KTsKK30KKworI2RlZmluZSBTTElfQ1RfRUxYX0xPT1BCQUNLIDB4MTAKKworZW51bSBFTFhfTE9PUEJBQ0tfQ01EIHsKKwlFTFhfTE9PUEJBQ0tfWFJJX1NFVFVQLAorCUVMWF9MT09QQkFDS19EQVRBLAorfTsKKworLyoqCisgKiBscGZjX2JzZ19jdF91bnNvbF9ldmVudCAtIHByb2Nlc3MgYW4gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZAorICogQHBoYmE6CisgKiBAcHJpbmc6CisgKiBAcGlvY2JxOgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gdW5zb2xpY2l0ZWQgQ1QgY29tbWFuZCBpcyByZWNlaXZlZC4gIEl0CisgKiBmb3J3YXJkcyB0aGUgZXZlbnQgdG8gYW55IHByb2Nlc3NlcyByZWdpc3RlcmQgdG8gcmVjZWl2ZSBDVCBldmVudHMuCisgKi8KK3ZvaWQKK2xwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKnByaW5nLAorCQkJc3RydWN0IGxwZmNfaW9jYnEgKnBpb2NicSkKK3sKKwl1aW50MzJfdCBldnRfcmVxX2lkID0gMDsKKwl1aW50MzJfdCBjbWQ7CisJdWludDMyX3QgbGVuOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqZG1hYnVmID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0OworCXN0cnVjdCBldmVudF9kYXRhICpldnRfZGF0ID0gTlVMTDsKKwlzdHJ1Y3QgbHBmY19pb2NicSAqaW9jYnE7CisJc2l6ZV90IG9mZnNldCA9IDA7CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXN0cnVjdCB1bHBfYmRlNjQgKmJkZTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCBpOworCXN0cnVjdCBscGZjX2RtYWJ1ZiAqYmRlQnVmMSA9IHBpb2NicS0+Y29udGV4dDI7CisJc3RydWN0IGxwZmNfZG1hYnVmICpiZGVCdWYyID0gcGlvY2JxLT5jb250ZXh0MzsKKwlzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKmhicWU7CisJc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKmN0X3JlcTsKKworCUlOSVRfTElTVF9IRUFEKCZoZWFkKTsKKwlsaXN0X2FkZF90YWlsKCZoZWFkLCAmcGlvY2JxLT5saXN0KTsKKworCWlmIChwaW9jYnEtPmlvY2IudWxwQmRlQ291bnQgPT0gMCB8fAorCSAgICBwaW9jYnEtPmlvY2IudW4uY29udDY0WzBdLnR1cy5mLmJkZVNpemUgPT0gMCkKKwkJZ290byBlcnJvcl9jdF91bnNvbF9leGl0OworCisJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkKKwkJZG1hYnVmID0gYmRlQnVmMTsKKwllbHNlIHsKKwkJZG1hX2FkZHIgPSBnZXRQYWRkcihwaW9jYnEtPmlvY2IudW4uY29udDY0WzBdLmFkZHJIaWdoLAorCQkJCSAgICBwaW9jYnEtPmlvY2IudW4uY29udDY0WzBdLmFkZHJMb3cpOworCQlkbWFidWYgPSBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9nZXQocGhiYSwgcHJpbmcsIGRtYV9hZGRyKTsKKwl9CisKKwljdF9yZXEgPSAoc3RydWN0IGxwZmNfc2xpX2N0X3JlcXVlc3QgKilkbWFidWYtPnZpcnQ7CisJZXZ0X3JlcV9pZCA9IGN0X3JlcS0+RnNUeXBlOworCWNtZCA9IGN0X3JlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuQ21kUnNwOworCWxlbiA9IGN0X3JlcS0+Q29tbWFuZFJlc3BvbnNlLmJpdHMuU2l6ZTsKKwlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpKQorCQlscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQocGhiYSwgcHJpbmcsIGRtYWJ1Zik7CisKKwltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldnQsICZwaGJhLT5jdF9ldl93YWl0ZXJzLCBub2RlKSB7CisJCWlmIChldnQtPnJlcV9pZCAhPSBldnRfcmVxX2lkKQorCQkJY29udGludWU7CisKKwkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKworCQlldnRfZGF0ID0ga3phbGxvYyhzaXplb2YoKmV2dF9kYXQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFldnRfZGF0KSB7CisJCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCQkiMjYxNCBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgZm9yICIKKwkJCQkJIkNUIGV2ZW50XG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisKKwkJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkgeworCQkJLyogdGFrZSBhY2N1bXVsYXRlZCBieXRlIGNvdW50IGZyb20gdGhlIGxhc3QgaW9jYnEgKi8KKwkJCWlvY2JxID0gbGlzdF9lbnRyeShoZWFkLnByZXYsIHR5cGVvZigqaW9jYnEpLCBsaXN0KTsKKwkJCWV2dF9kYXQtPmxlbiA9IGlvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW47CisJCX0gZWxzZSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvY2JxLCAmaGVhZCwgbGlzdCkgeworCQkJCWZvciAoaSA9IDA7IGkgPCBpb2NicS0+aW9jYi51bHBCZGVDb3VudDsgaSsrKQorCQkJCQlldnRfZGF0LT5sZW4gKz0KKwkJCQkJaW9jYnEtPmlvY2IudW4uY29udDY0W2ldLnR1cy5mLmJkZVNpemU7CisJCQl9CisJCX0KKworCQlldnRfZGF0LT5kYXRhID0ga3phbGxvYyhldnRfZGF0LT5sZW4sIEdGUF9LRVJORUwpOworCQlpZiAoIWV2dF9kYXQtPmRhdGEpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJCSIyNjE1IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgIgorCQkJCQkiQ1QgZXZlbnQgZGF0YSwgc2l6ZSAlZFxuIiwKKwkJCQkJZXZ0X2RhdC0+bGVuKTsKKwkJCWtmcmVlKGV2dF9kYXQpOworCQkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQkJbHBmY19jdF9ldmVudF91bnJlZihldnQpOworCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQlnb3RvIGVycm9yX2N0X3Vuc29sX2V4aXQ7CisJCX0KKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvY2JxLCAmaGVhZCwgbGlzdCkgeworCQkJaWYgKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19IQlFfRU5BQkxFRCkgeworCQkJCWJkZUJ1ZjEgPSBpb2NicS0+Y29udGV4dDI7CisJCQkJYmRlQnVmMiA9IGlvY2JxLT5jb250ZXh0MzsKKwkJCX0KKwkJCWZvciAoaSA9IDA7IGkgPCBpb2NicS0+aW9jYi51bHBCZGVDb3VudDsgaSsrKSB7CisJCQkJaW50IHNpemUgPSAwOworCQkJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJgorCQkJCSAgICBMUEZDX1NMSTNfSEJRX0VOQUJMRUQpIHsKKwkJCQkJaWYgKGkgPT0gMCkgeworCQkJCQkJaGJxZSA9IChzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKikKKwkJCQkJCSAgJmlvY2JxLT5pb2NiLnVuLnVscFdvcmRbMF07CisJCQkJCQlzaXplID0gaGJxZS0+YmRlLnR1cy5mLmJkZVNpemU7CisJCQkJCQlkbWFidWYgPSBiZGVCdWYxOworCQkJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCQkJaGJxZSA9IChzdHJ1Y3QgbHBmY19oYnFfZW50cnkgKikKKwkJCQkJCQkmaW9jYnEtPmlvY2IudW5zbGkzLgorCQkJCQkJCXNsaTNXb3Jkc1s0XTsKKwkJCQkJCXNpemUgPSBoYnFlLT5iZGUudHVzLmYuYmRlU2l6ZTsKKwkJCQkJCWRtYWJ1ZiA9IGJkZUJ1ZjI7CisJCQkJCX0KKwkJCQkJaWYgKChvZmZzZXQgKyBzaXplKSA+IGV2dF9kYXQtPmxlbikKKwkJCQkJCXNpemUgPSBldnRfZGF0LT5sZW4gLSBvZmZzZXQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2l6ZSA9IGlvY2JxLT5pb2NiLnVuLmNvbnQ2NFtpXS4KKwkJCQkJCXR1cy5mLmJkZVNpemU7CisJCQkJCWJkZSA9ICZpb2NicS0+aW9jYi51bi5jb250NjRbaV07CisJCQkJCWRtYV9hZGRyID0gZ2V0UGFkZHIoYmRlLT5hZGRySGlnaCwKKwkJCQkJCQkgICAgYmRlLT5hZGRyTG93KTsKKwkJCQkJZG1hYnVmID0gbHBmY19zbGlfcmluZ3Bvc3RidWZfZ2V0KHBoYmEsCisJCQkJCQkJcHJpbmcsIGRtYV9hZGRyKTsKKwkJCQl9CisJCQkJaWYgKCFkbWFidWYpIHsKKwkJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLAorCQkJCQkJTE9HX0xJQkRGQywgIjI2MTYgTm8gZG1hYnVmICIKKwkJCQkJCSJmb3VuZCBmb3IgaW9jYnEgMHglcFxuIiwKKwkJCQkJCWlvY2JxKTsKKwkJCQkJa2ZyZWUoZXZ0X2RhdC0+ZGF0YSk7CisJCQkJCWtmcmVlKGV2dF9kYXQpOworCQkJCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQkJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJCQkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCQkJCWdvdG8gZXJyb3JfY3RfdW5zb2xfZXhpdDsKKwkJCQl9CisJCQkJbWVtY3B5KChjaGFyICopKGV2dF9kYXQtPmRhdGEpICsgb2Zmc2V0LAorCQkJCSAgICAgICBkbWFidWYtPnZpcnQsIHNpemUpOworCQkJCW9mZnNldCArPSBzaXplOworCQkJCWlmIChldnRfcmVxX2lkICE9IFNMSV9DVF9FTFhfTE9PUEJBQ0sgJiYKKwkJCQkgICAgIShwaGJhLT5zbGkzX29wdGlvbnMgJgorCQkJCSAgICAgIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpIHsKKwkJCQkJbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0KHBoYmEsIHByaW5nLAorCQkJCQkJCQkgZG1hYnVmKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzd2l0Y2ggKGNtZCkgeworCQkJCQljYXNlIEVMWF9MT09QQkFDS19YUklfU0VUVVA6CisJCQkJCQlpZiAoIShwaGJhLT5zbGkzX29wdGlvbnMgJgorCQkJCQkJICAgICAgTFBGQ19TTEkzX0hCUV9FTkFCTEVEKSkKKwkJCQkJCQlscGZjX3Bvc3RfYnVmZmVyKHBoYmEsCisJCQkJCQkJCQkgcHJpbmcsCisJCQkJCQkJCQkgMSk7CisJCQkJCQllbHNlCisJCQkJCQkJbHBmY19pbl9idWZfZnJlZShwaGJhLAorCQkJCQkJCQkJZG1hYnVmKTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJaWYgKCEocGhiYS0+c2xpM19vcHRpb25zICYKKwkJCQkJCSAgICAgIExQRkNfU0xJM19IQlFfRU5BQkxFRCkpCisJCQkJCQkJbHBmY19wb3N0X2J1ZmZlcihwaGJhLAorCQkJCQkJCQkJIHByaW5nLAorCQkJCQkJCQkJIDEpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCWlmIChwaGJhLT5zbGlfcmV2ID09IExQRkNfU0xJX1JFVjQpIHsKKwkJCWV2dF9kYXQtPmltbWVkX2RhdCA9IHBoYmEtPmN0eF9pZHg7CisJCQlwaGJhLT5jdHhfaWR4ID0gKHBoYmEtPmN0eF9pZHggKyAxKSAlIDY0OworCQkJcGhiYS0+Y3RfY3R4W2V2dF9kYXQtPmltbWVkX2RhdF0ub3hpZCA9CisJCQkJCQlwaW9jYnEtPmlvY2IudWxwQ29udGV4dDsKKwkJCXBoYmEtPmN0X2N0eFtldnRfZGF0LT5pbW1lZF9kYXRdLlNJRCA9CisJCQkJcGlvY2JxLT5pb2NiLnVuLnJjdmVscy5yZW1vdGVJRDsKKwkJfSBlbHNlCisJCQlldnRfZGF0LT5pbW1lZF9kYXQgPSBwaW9jYnEtPmlvY2IudWxwQ29udGV4dDsKKworCQlldnRfZGF0LT50eXBlID0gRkNfUkVHX0NUX0VWRU5UOworCQlsaXN0X2FkZCgmZXZ0X2RhdC0+bm9kZSwgJmV2dC0+ZXZlbnRzX3RvX3NlZSk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZXZ0LT53cSk7CisJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsKKwkJaWYgKGV2dF9yZXFfaWQgPT0gU0xJX0NUX0VMWF9MT09QQkFDSykKKwkJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKworZXJyb3JfY3RfdW5zb2xfZXhpdDoKKwlpZiAoIWxpc3RfZW1wdHkoJmhlYWQpKQorCQlsaXN0X2RlbCgmaGVhZCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogbHBmY19ic2dfc2V0X2V2ZW50IC0gcHJvY2VzcyBhIFNFVF9FVkVOVCBic2cgdmVuZG9yIGNvbW1hbmQKKyAqIEBqb2I6IFNFVF9FVkVOVCBmY19ic2dfam9iCisgKi8KK3N0YXRpYyBpbnQKK2xwZmNfYnNnX3NldF9ldmVudChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBzZXRfY3RfZXZlbnQgKmV2ZW50X3JlcTsKKwlzdHJ1Y3QgbHBmY19jdF9ldmVudCAqZXZ0OworCWludCByYyA9IDA7CisKKwlpZiAoam9iLT5yZXF1ZXN0X2xlbiA8CisJICAgIHNpemVvZihzdHJ1Y3QgZmNfYnNnX3JlcXVlc3QpICsgc2l6ZW9mKHN0cnVjdCBzZXRfY3RfZXZlbnQpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19MSUJERkMsCisJCQkJIjI2MTIgUmVjZWl2ZWQgU0VUX0NUX0VWRU5UIGJlbG93IG1pbmltdW0gIgorCQkJCSJzaXplXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXZlbnRfcmVxID0gKHN0cnVjdCBzZXRfY3RfZXZlbnQgKikKKwkJam9iLT5yZXF1ZXN0LT5ycXN0X2RhdGEuaF92ZW5kb3IudmVuZG9yX2NtZDsKKworCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2dCwgJnBoYmEtPmN0X2V2X3dhaXRlcnMsIG5vZGUpIHsKKwkJaWYgKGV2dC0+cmVnX2lkID09IGV2ZW50X3JlcS0+ZXZfcmVnX2lkKSB7CisJCQlscGZjX2N0X2V2ZW50X3JlZihldnQpOworCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisKKwlpZiAoJmV2dC0+bm9kZSA9PSAmcGhiYS0+Y3RfZXZfd2FpdGVycykgeworCQkvKiBubyBldmVudCB3YWl0aW5nIHN0cnVjdCB5ZXQgLSBmaXJzdCBjYWxsICovCisJCWV2dCA9IGxwZmNfY3RfZXZlbnRfbmV3KGV2ZW50X3JlcS0+ZXZfcmVnX2lkLAorCQkJCQlldmVudF9yZXEtPmV2X3JlcV9pZCk7CisJCWlmICghZXZ0KSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9XQVJOSU5HLCBMT0dfTElCREZDLAorCQkJCQkiMjYxNyBGYWlsZWQgYWxsb2NhdGlvbiBvZiBldmVudCAiCisJCQkJCSJ3YWl0ZXJcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJCWxpc3RfYWRkKCZldnQtPm5vZGUsICZwaGJhLT5jdF9ldl93YWl0ZXJzKTsKKwkJbHBmY19jdF9ldmVudF9yZWYoZXZ0KTsKKwkJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJfQorCisJZXZ0LT53YWl0aW5nID0gMTsKKwlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGV2dC0+d3EsCisJCQkJICAgICAhbGlzdF9lbXB0eSgmZXZ0LT5ldmVudHNfdG9fc2VlKSkpIHsKKwkJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7IC8qIHJlbGVhc2UgcmVmICovCisJCWxwZmNfY3RfZXZlbnRfdW5yZWYoZXZ0KTsgLyogZGVsZXRlICovCisJCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCQlyYyA9IC1FSU5UUjsKKwkJZ290byBzZXRfZXZlbnRfb3V0OworCX0KKworCWV2dC0+d2FpdF90aW1lX3N0YW1wID0gamlmZmllczsKKwlldnQtPndhaXRpbmcgPSAwOworCisJbXV0ZXhfbG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCWxpc3RfbW92ZShldnQtPmV2ZW50c190b19zZWUucHJldiwgJmV2dC0+ZXZlbnRzX3RvX2dldCk7CisJbHBmY19jdF9ldmVudF91bnJlZihldnQpOyAvKiByZWxlYXNlIHJlZiAqLworCW11dGV4X3VubG9jaygmcGhiYS0+Y3RfZXZlbnRfbXV0ZXgpOworCitzZXRfZXZlbnRfb3V0OgorCS8qIHNldF9ldmVudCBjYXJyaWVzIG5vIHJlcGx5IHBheWxvYWQgKi8KKwlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOworCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+am9iX2RvbmUoam9iKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGxwZmNfYnNnX2dldF9ldmVudCAtIHByb2Nlc3MgYSBHRVRfRVZFTlQgYnNnIHZlbmRvciBjb21tYW5kCisgKiBAam9iOiBHRVRfRVZFTlQgZmNfYnNnX2pvYgorICovCitzdGF0aWMgaW50CitscGZjX2JzZ19nZXRfZXZlbnQoc3RydWN0IGZjX2JzZ19qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQgPSAoc3RydWN0IGxwZmNfdnBvcnQgKilqb2ItPnNob3N0LT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSB2cG9ydC0+cGhiYTsKKwlzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICpldmVudF9yZXE7CisJc3RydWN0IGdldF9jdF9ldmVudF9yZXBseSAqZXZlbnRfcmVwbHk7CisJc3RydWN0IGxwZmNfY3RfZXZlbnQgKmV2dDsKKwlzdHJ1Y3QgZXZlbnRfZGF0YSAqZXZ0X2RhdCA9IE5VTEw7CisJaW50IHJjID0gMDsKKworCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwKKwkgICAgc2l6ZW9mKHN0cnVjdCBmY19ic2dfcmVxdWVzdCkgKyBzaXplb2Yoc3RydWN0IGdldF9jdF9ldmVudCkpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkiMjYxMyBSZWNlaXZlZCBHRVRfQ1RfRVZFTlQgcmVxdWVzdCBiZWxvdyAiCisJCQkJIm1pbmltdW0gc2l6ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWV2ZW50X3JlcSA9IChzdHJ1Y3QgZ2V0X2N0X2V2ZW50ICopCisJCWpvYi0+cmVxdWVzdC0+cnFzdF9kYXRhLmhfdmVuZG9yLnZlbmRvcl9jbWQ7CisKKwlldmVudF9yZXBseSA9IChzdHJ1Y3QgZ2V0X2N0X2V2ZW50X3JlcGx5ICopCisJCWpvYi0+cmVwbHktPnJlcGx5X2RhdGEudmVuZG9yX3JlcGx5LnZlbmRvcl9yc3A7CisKKwltdXRleF9sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldnQsICZwaGJhLT5jdF9ldl93YWl0ZXJzLCBub2RlKSB7CisJCWlmIChldnQtPnJlZ19pZCA9PSBldmVudF9yZXEtPmV2X3JlZ19pZCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmV2dC0+ZXZlbnRzX3RvX2dldCkpCisJCQkJYnJlYWs7CisJCQlscGZjX2N0X2V2ZW50X3JlZihldnQpOworCQkJZXZ0LT53YWl0X3RpbWVfc3RhbXAgPSBqaWZmaWVzOworCQkJZXZ0X2RhdCA9IGxpc3RfZW50cnkoZXZ0LT5ldmVudHNfdG9fZ2V0LnByZXYsCisJCQkJCSAgICAgc3RydWN0IGV2ZW50X2RhdGEsIG5vZGUpOworCQkJbGlzdF9kZWwoJmV2dF9kYXQtPm5vZGUpOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisKKwlpZiAoIWV2dF9kYXQpIHsKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKKwkJcmMgPSAtRU5PRU5UOworCQlnb3RvIGVycm9yX2dldF9ldmVudF9leGl0OworCX0KKworCWlmIChldnRfZGF0LT5sZW4gPiBqb2ItPnJlcGx5X3BheWxvYWQucGF5bG9hZF9sZW4pIHsKKwkJZXZ0X2RhdC0+bGVuID0gam9iLT5yZXBseV9wYXlsb2FkLnBheWxvYWRfbGVuOworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX0xJQkRGQywKKwkJCQkJIjI2MTggVHJ1bmNhdGVkIGV2ZW50IGRhdGEgYXQgJWQgIgorCQkJCQkiYnl0ZXNcbiIsCisJCQkJCWpvYi0+cmVwbHlfcGF5bG9hZC5wYXlsb2FkX2xlbik7CisJfQorCisJZXZlbnRfcmVwbHktPmltbWVkX2RhdGEgPSBldnRfZGF0LT5pbW1lZF9kYXQ7CisKKwlpZiAoZXZ0X2RhdC0+bGVuID4gMCkKKwkJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0KKwkJCXNnX2NvcHlfZnJvbV9idWZmZXIoam9iLT5yZXBseV9wYXlsb2FkLnNnX2xpc3QsCisJCQkJCSAgICBqb2ItPnJlcGx5X3BheWxvYWQuc2dfY250LAorCQkJCQkgICAgZXZ0X2RhdC0+ZGF0YSwgZXZ0X2RhdC0+bGVuKTsKKwllbHNlCisJCWpvYi0+cmVwbHktPnJlcGx5X3BheWxvYWRfcmN2X2xlbiA9IDA7CisJcmMgPSAwOworCisJaWYgKGV2dF9kYXQpCisJCWtmcmVlKGV2dF9kYXQtPmRhdGEpOworCWtmcmVlKGV2dF9kYXQpOworCW11dGV4X2xvY2soJnBoYmEtPmN0X2V2ZW50X211dGV4KTsKKwlscGZjX2N0X2V2ZW50X3VucmVmKGV2dCk7CisJbXV0ZXhfdW5sb2NrKCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisKK2Vycm9yX2dldF9ldmVudF9leGl0OgorCS8qIG1ha2UgZXJyb3IgY29kZSBhdmFpbGFibGUgdG8gdXNlcnNwYWNlICovCisJam9iLT5yZXBseS0+cmVzdWx0ID0gcmM7CisJLyogY29tcGxldGUgdGhlIGpvYiBiYWNrIHRvIHVzZXJzcGFjZSAqLworCWpvYi0+am9iX2RvbmUoam9iKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ19oc3RfdmVuZG9yIC0gcHJvY2VzcyBhIHZlbmRvci1zcGVjaWZpYyBmY19ic2dfam9iCisgKiBAam9iOiBmY19ic2dfam9iIHRvIGhhbmRsZQorICovCitzdGF0aWMgaW50CitscGZjX2JzZ19oc3RfdmVuZG9yKHN0cnVjdCBmY19ic2dfam9iICpqb2IpCit7CisJaW50IGNvbW1hbmQgPSBqb2ItPnJlcXVlc3QtPnJxc3RfZGF0YS5oX3ZlbmRvci52ZW5kb3JfY21kWzBdOworCisJc3dpdGNoIChjb21tYW5kKSB7CisJY2FzZSBMUEZDX0JTR19WRU5ET1JfU0VUX0NUX0VWRU5UOgorCQlyZXR1cm4gbHBmY19ic2dfc2V0X2V2ZW50KGpvYik7CisJCWJyZWFrOworCisJY2FzZSBMUEZDX0JTR19WRU5ET1JfR0VUX0NUX0VWRU5UOgorCQlyZXR1cm4gbHBmY19ic2dfZ2V0X2V2ZW50KGpvYik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisvKioKKyAqIGxwZmNfYnNnX3JlcXVlc3QgLSBoYW5kbGUgYSBic2cgcmVxdWVzdCBmcm9tIHRoZSBGQyB0cmFuc3BvcnQKKyAqIEBqb2I6IGZjX2JzZ19qb2IgdG8gaGFuZGxlCisgKi8KK2ludAorbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXVpbnQzMl90IG1zZ2NvZGU7CisJaW50IHJjID0gLUVJTlZBTDsKKworCW1zZ2NvZGUgPSBqb2ItPnJlcXVlc3QtPm1zZ2NvZGU7CisKKwlzd2l0Y2ggKG1zZ2NvZGUpIHsKKwljYXNlIEZDX0JTR19IU1RfVkVORE9SOgorCQlyYyA9IGxwZmNfYnNnX2hzdF92ZW5kb3Ioam9iKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19CU0dfUlBUX0VMUzoKKwkJcmMgPSBscGZjX2JzZ19ycG9ydF9lbHMoam9iKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19CU0dfUlBUX0NUOgorCQlyYyA9IGxwZmNfYnNnX3Jwb3J0X2N0KGpvYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBscGZjX2JzZ190aW1lb3V0IC0gaGFuZGxlIHRpbWVvdXQgb2YgYSBic2cgcmVxdWVzdCBmcm9tIHRoZSBGQyB0cmFuc3BvcnQKKyAqIEBqb2I6IGZjX2JzZ19qb2IgdGhhdCBoYXMgdGltZWQgb3V0CisgKgorICogVGhpcyBmdW5jdGlvbiBqdXN0IGFib3J0cyB0aGUgam9iJ3MgSU9DQi4gIFRoZSBhYm9ydGVkIElPQ0Igd2lsbCByZXR1cm4gdG8KKyAqIHRoZSB3YWl0aW5nIGZ1bmN0aW9uIHdoaWNoIHdpbGwgaGFuZGxlIHBhc3NpbmcgdGhlIGVycm9yIGJhY2sgdG8gdXNlcnNwYWNlCisgKi8KK2ludAorbHBmY19ic2dfdGltZW91dChzdHJ1Y3QgZmNfYnNnX2pvYiAqam9iKQoreworCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCA9IChzdHJ1Y3QgbHBmY192cG9ydCAqKWpvYi0+c2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX2hiYSAqcGhiYSA9IHZwb3J0LT5waGJhOworCXN0cnVjdCBscGZjX2lvY2JxICpjbWRpb2NiID0gKHN0cnVjdCBscGZjX2lvY2JxICopam9iLT5kZF9kYXRhOworCXN0cnVjdCBscGZjX3NsaV9yaW5nICpwcmluZyA9ICZwaGJhLT5zbGkucmluZ1tMUEZDX0VMU19SSU5HXTsKKworCWlmIChjbWRpb2NiKQorCQlscGZjX3NsaV9pc3N1ZV9hYm9ydF9pb3RhZyhwaGJhLCBwcmluZywgY21kaW9jYik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3J0bi5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKaW5kZXggZDJhOTIyOS4uMDgzMGYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmgKQEAgLTIxLDkgKzIxLDExIEBACiB0eXBlZGVmIGludCAoKm5vZGVfZmlsdGVyKShzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqLCB2b2lkICopOwogCiBzdHJ1Y3QgZmNfcnBvcnQ7Ci12b2lkIGxwZmNfZHVtcF9tZW0oc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MTZfdCk7Cit2b2lkIGxwZmNfZG93bl9saW5rKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7Cit2b2lkIGxwZmNfc2xpX3JlYWRfbGlua19zdGUoc3RydWN0IGxwZmNfaGJhICopOwordm9pZCBscGZjX2R1bXBfbWVtKHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDE2X3QsIHVpbnQxNl90KTsKIHZvaWQgbHBmY19kdW1wX3dha2V1cF9wYXJhbShzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwotdm9pZCBscGZjX2R1bXBfc3RhdGljX3Zwb3J0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKiwgdWludDE2X3QpOworaW50IGxwZmNfZHVtcF9zdGF0aWNfdnBvcnQoc3RydWN0IGxwZmNfaGJhICosIExQRkNfTUJPWFFfdCAqLCB1aW50MTZfdCk7CiBpbnQgbHBmY19kdW1wX2Zjb2VfcGFyYW0oc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKik7CiB2b2lkIGxwZmNfcmVhZF9udihzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX2NvbmZpZ19hc3luYyhzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICosIHVpbnQzMl90KTsKQEAgLTEzNSw2ICsxMzcsOSBAQAogaW50IGxwZmNfZWxzX2Rpc2NfcGxvZ2koc3RydWN0IGxwZmNfdnBvcnQgKik7CiB2b2lkIGxwZmNfZWxzX3RpbWVvdXQodW5zaWduZWQgbG9uZyk7CiB2b2lkIGxwZmNfZWxzX3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY192cG9ydCAqKTsKK3N0cnVjdCBscGZjX2lvY2JxICpscGZjX3ByZXBfZWxzX2lvY2Ioc3RydWN0IGxwZmNfdnBvcnQgKiwgdWludDhfdCwgdWludDE2X3QsCisJCQkJICAgICAgdWludDhfdCwgc3RydWN0IGxwZmNfbm9kZWxpc3QgKiwKKwkJCQkgICAgICB1aW50MzJfdCwgdWludDMyX3QpOwogdm9pZCBscGZjX2hiX3RpbWVvdXRfaGFuZGxlcihzdHJ1Y3QgbHBmY19oYmEgKik7CiAKIHZvaWQgbHBmY19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKQEAgLTE4MiwxMSArMTg3LDEyIEBACiBpbnQgbHBmY19tYm94X3Rtb192YWwoc3RydWN0IGxwZmNfaGJhICosIGludCk7CiB2b2lkIGxwZmNfaW5pdF92Zmkoc3RydWN0IGxwZmNNYm94cSAqLCBzdHJ1Y3QgbHBmY192cG9ydCAqKTsKIHZvaWQgbHBmY19yZWdfdmZpKHN0cnVjdCBscGZjTWJveHEgKiwgc3RydWN0IGxwZmNfdnBvcnQgKiwgZG1hX2FkZHJfdCk7Ci12b2lkIGxwZmNfaW5pdF92cGkoc3RydWN0IGxwZmNNYm94cSAqLCB1aW50MTZfdCk7Cit2b2lkIGxwZmNfaW5pdF92cGkoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjTWJveHEgKiwgdWludDE2X3QpOwogdm9pZCBscGZjX3VucmVnX3ZmaShzdHJ1Y3QgbHBmY01ib3hxICosIHVpbnQxNl90KTsKIHZvaWQgbHBmY19yZWdfZmNmaShzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNNYm94cSAqKTsKIHZvaWQgbHBmY191bnJlZ19mY2ZpKHN0cnVjdCBscGZjTWJveHEgKiwgdWludDE2X3QpOwogdm9pZCBscGZjX3Jlc3VtZV9ycGkoc3RydWN0IGxwZmNNYm94cSAqLCBzdHJ1Y3QgbHBmY19ub2RlbGlzdCAqKTsKK2ludCBscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgdWludDhfdCk7CiAKIHZvaWQgbHBmY19jb25maWdfaGJxKHN0cnVjdCBscGZjX2hiYSAqLCB1aW50MzJfdCwgc3RydWN0IGxwZmNfaGJxX2luaXQgKiwKIAl1aW50MzJfdCAsIExQRkNfTUJPWFFfdCAqKTsKQEAgLTIzNCw2ICsyNDAsNyBAQAogaW50IGxwZmNfc2xpX2lzc3VlX2lvY2Ioc3RydWN0IGxwZmNfaGJhICosIHVpbnQzMl90LAogCQkJc3RydWN0IGxwZmNfaW9jYnEgKiwgdWludDMyX3QpOwogdm9pZCBscGZjX3NsaV9wY2ltZW1fYmNvcHkodm9pZCAqLCB2b2lkICosIHVpbnQzMl90KTsKK3ZvaWQgbHBmY19zbGlfYmVtZW1fYmNvcHkodm9pZCAqLCB2b2lkICosIHVpbnQzMl90KTsKIHZvaWQgbHBmY19zbGlfYWJvcnRfaW9jYl9yaW5nKHN0cnVjdCBscGZjX2hiYSAqLCBzdHJ1Y3QgbHBmY19zbGlfcmluZyAqKTsKIHZvaWQgbHBmY19zbGlfZmx1c2hfZmNwX3JpbmdzKHN0cnVjdCBscGZjX2hiYSAqKTsKIGludCBscGZjX3NsaV9yaW5ncG9zdGJ1Zl9wdXQoc3RydWN0IGxwZmNfaGJhICosIHN0cnVjdCBscGZjX3NsaV9yaW5nICosCkBAIC0zNjAsMyArMzY3LDggQEAKICNkZWZpbmUgSEJBX0VWRU5UX0xJTktfVVAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBIQkFfRVZFTlRfTElOS19ET1dOICAgICAgICAgICAgICAzCiAKKy8qIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFNHSU92NC9ic2cgaW50ZXJmYWNlICovCitpbnQgbHBmY19ic2dfcmVxdWVzdChzdHJ1Y3QgZmNfYnNnX2pvYiAqKTsKK2ludCBscGZjX2JzZ190aW1lb3V0KHN0cnVjdCBmY19ic2dfam9iICopOwordm9pZCBscGZjX2JzZ19jdF91bnNvbF9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKiwgc3RydWN0IGxwZmNfc2xpX3JpbmcgKiwKKwkJCSAgICAgc3RydWN0IGxwZmNfaW9jYnEgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2N0LmMKaW5kZXggMGU1MzJmMC4uOWRmN2VkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtOTcsNiArOTcsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlzdHJ1Y3QgbHBmY19kbWFidWYgKmJkZUJ1ZjsKIAorCWxwZmNfYnNnX2N0X3Vuc29sX2V2ZW50KHBoYmEsIHByaW5nLCBwaW9jYnEpOworCiAJaWYgKHVubGlrZWx5KGljbWQtPnVscFN0YXR1cyA9PSBJT1NUQVRfTkVFRF9CVUZGRVIpKSB7CiAJCWxwZmNfc2xpX2hicWJ1Zl9hZGRfaGJxcyhwaGJhLCBMUEZDX0VMU19IQlEpOwogCX0gZWxzZSBpZiAoKGljbWQtPnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggZjcyZmRmMi4uNDUzMzdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKICAqICAgUG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkL3ByZXBhcmVkIGVscyBpb2NiIGRhdGEgc3RydWN0dXJlCiAgKiAgIE5VTEwgLSB3aGVuIGVscyBpb2NiIGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb24vcHJlcGFyYXRpb24gZmFpbGVkCiAgKiovCi1zdGF0aWMgc3RydWN0IGxwZmNfaW9jYnEgKgorc3RydWN0IGxwZmNfaW9jYnEgKgogbHBmY19wcmVwX2Vsc19pb2NiKHN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydCwgdWludDhfdCBleHBlY3RSc3AsCiAJCSAgIHVpbnQxNl90IGNtZFNpemUsIHVpbnQ4X3QgcmV0cnksCiAJCSAgIHN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCB1aW50MzJfdCBkaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCmluZGV4IGVkNDZiMjQuLmU2YTQ3ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaGJhZGlzYy5jCkBAIC02MSw2ICs2MSw3IEBACiAKIHN0YXRpYyB2b2lkIGxwZmNfZGlzY190aW1lb3V0X2hhbmRsZXIoc3RydWN0IGxwZmNfdnBvcnQgKik7CiBzdGF0aWMgdm9pZCBscGZjX2Rpc2NfZmx1c2hfbGlzdChzdHJ1Y3QgbHBmY192cG9ydCAqdnBvcnQpOworc3RhdGljIHZvaWQgbHBmY191bnJlZ2lzdGVyX2ZjZmlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogCiB2b2lkCiBscGZjX3Rlcm1pbmF0ZV9ycG9ydF9pbyhzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KQpAQCAtMTAwOSw5ICsxMDEwLDE1IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAlwaGJhLT5mY2YuZmNmX2ZsYWcgfD0gRkNGX1JFR0lTVEVSRUQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZmxhZ3MpOworCS8qIElmIHRoZXJlIGlzIGEgcGVuZGluZyBGQ29FIGV2ZW50LCByZXN0YXJ0IEZDRiB0YWJsZSBzY2FuLiAqLworCWlmIChscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChwaGJhLCAxKSkgeworCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm47CisJfQogCWlmICh2cG9ydC0+cG9ydF9zdGF0ZSAhPSBMUEZDX0ZMT0dJKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfSU5fVVNFKTsKKwkJcGhiYS0+aGJhX2ZsYWcgJj0gfkZDRl9ESVNDX0lOUFJPR1JFU1M7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAkJbHBmY19pbml0aWFsX2Zsb2dpKHZwb3J0KTsKIAl9CkBAIC0xMDU0LDYgKzEwNjEsMzkgQEAKIH0KIAogLyoqCisgKiBscGZjX3N3X25hbWVfbWF0Y2ggLSBDaGVjayBpZiB0aGUgZmNmIHN3aXRjaCBuYW1lIG1hdGNoLgorICogQGZhYl9uYW1lOiBwb2ludGVyIHRvIGZhYnJpYyBuYW1lLgorICogQG5ld19mY2ZfcmVjb3JkOiBwb2ludGVyIHRvIGZjZiByZWNvcmQuCisgKgorICogVGhpcyByb3V0aW5lIGNvbXBhcmUgdGhlIGZjZiByZWNvcmQncyBzd2l0Y2ggbmFtZSB3aXRoIHByb3ZpZGVkCisgKiBzd2l0Y2ggbmFtZS4gSWYgdGhlIHN3aXRjaCBuYW1lIGFyZSBpZGVudGljYWwgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyAxIGVsc2UgcmV0dXJuIDAuCisgKiovCitzdGF0aWMgdWludDMyX3QKK2xwZmNfc3dfbmFtZV9tYXRjaCh1aW50OF90ICpzd19uYW1lLCBzdHJ1Y3QgZmNmX3JlY29yZCAqbmV3X2ZjZl9yZWNvcmQpCit7CisJaWYgKChzd19uYW1lWzBdID09CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMCwgbmV3X2ZjZl9yZWNvcmQpKSAmJgorCSAgICAoc3dfbmFtZVsxXSA9PQorCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzEsIG5ld19mY2ZfcmVjb3JkKSkgJiYKKwkgICAgKHN3X25hbWVbMl0gPT0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCkpICYmCisJICAgIChzd19uYW1lWzNdID09CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMywgbmV3X2ZjZl9yZWNvcmQpKSAmJgorCSAgICAoc3dfbmFtZVs0XSA9PQorCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzQsIG5ld19mY2ZfcmVjb3JkKSkgJiYKKwkgICAgKHN3X25hbWVbNV0gPT0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV81LCBuZXdfZmNmX3JlY29yZCkpICYmCisJICAgIChzd19uYW1lWzZdID09CisJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNiwgbmV3X2ZjZl9yZWNvcmQpKSAmJgorCSAgICAoc3dfbmFtZVs3XSA9PQorCQliZl9nZXQobHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzcsIG5ld19mY2ZfcmVjb3JkKSkpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgogICogbHBmY19tYWNfYWRkcl9tYXRjaCAtIENoZWNrIGlmIHRoZSBmY2YgbWFjIGFkZHJlc3MgbWF0Y2guCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBuZXdfZmNmX3JlY29yZDogcG9pbnRlciB0byBmY2YgcmVjb3JkLgpAQCAtMTEyMyw2ICsxMTYzLDIyIEBACiAJCWJmX2dldChscGZjX2ZjZl9yZWNvcmRfbWFjXzUsIG5ld19mY2ZfcmVjb3JkKTsKIAlwaGJhLT5mY2YuZmNmX2luZHggPSBiZl9nZXQobHBmY19mY2ZfcmVjb3JkX2ZjZl9pbmRleCwgbmV3X2ZjZl9yZWNvcmQpOwogCXBoYmEtPmZjZi5wcmlvcml0eSA9IG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzBdID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8wLCBuZXdfZmNmX3JlY29yZCk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzFdID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8xLCBuZXdfZmNmX3JlY29yZCk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzJdID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8yLCBuZXdfZmNmX3JlY29yZCk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzNdID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zLCBuZXdfZmNmX3JlY29yZCk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzRdID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80LCBuZXdfZmNmX3JlY29yZCk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzVdID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV81LCBuZXdfZmNmX3JlY29yZCk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzZdID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82LCBuZXdfZmNmX3JlY29yZCk7CisJcGhiYS0+ZmNmLnN3aXRjaF9uYW1lWzddID0KKwkJYmZfZ2V0KGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV83LCBuZXdfZmNmX3JlY29yZCk7CiB9CiAKIC8qKgpAQCAtMTE1MCw2ICsxMjA2LDcgQEAKIAkvKiBUaGUgRkNGIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgc3RhcnQgZGlzY292ZXJ5ICovCiAJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9SRUdJU1RFUkVEKSB7CiAJCXBoYmEtPmZjZi5mY2ZfZmxhZyB8PSAoRkNGX0RJU0NPVkVSRUQgfCBGQ0ZfSU5fVVNFKTsKKwkJcGhiYS0+aGJhX2ZsYWcgJj0gfkZDRl9ESVNDX0lOUFJPR1JFU1M7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGZsYWdzKTsKIAkJaWYgKHBoYmEtPnBwb3J0LT5wb3J0X3N0YXRlICE9IExQRkNfRkxPR0kpCiAJCQlscGZjX2luaXRpYWxfZmxvZ2kocGhiYS0+cHBvcnQpOwpAQCAtMTIzOSw5ICsxMjk2LDEyIEBACiAKIAkJaWYgKChjb25uX2VudHJ5LT5jb25uX3JlYy5mbGFncyAmIEZDRkNOQ1RfRkJOTV9WQUxJRCkgJiYKIAkJCSFscGZjX2ZhYl9uYW1lX21hdGNoKGNvbm5fZW50cnktPmNvbm5fcmVjLmZhYnJpY19uYW1lLAotCQkJCW5ld19mY2ZfcmVjb3JkKSkKKwkJCQkJICAgICBuZXdfZmNmX3JlY29yZCkpCiAJCQljb250aW51ZTsKLQorCQlpZiAoKGNvbm5fZW50cnktPmNvbm5fcmVjLmZsYWdzICYgRkNGQ05DVF9TV05NX1ZBTElEKSAmJgorCQkJIWxwZmNfc3dfbmFtZV9tYXRjaChjb25uX2VudHJ5LT5jb25uX3JlYy5zd2l0Y2hfbmFtZSwKKwkJCQkJICAgIG5ld19mY2ZfcmVjb3JkKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoY29ubl9lbnRyeS0+Y29ubl9yZWMuZmxhZ3MgJiBGQ0ZDTkNUX1ZMQU5fVkFMSUQpIHsKIAkJCS8qCiAJCQkgKiBJZiB0aGUgdmxhbiBiaXQgbWFwIGRvZXMgbm90IGhhdmUgdGhlIGJpdCBzZXQgZm9yIHRoZQpAQCAtMTMzNiw2ICsxMzk2LDYwIEBACiB9CiAKIC8qKgorICogbHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQgLSBDaGVjayBpZiB0aGVyZSBpcyBwZW5kaW5nIGZjb2UgZXZlbnQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEB1bnJlZ19mY2Y6IFVucmVnaXN0ZXIgRkNGIGlmIEZDRiB0YWJsZSBuZWVkIHRvIGJlIHJlLXNjYW5lZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBmY29lIGV2ZW50IHBlbmRpbmcgd2hpbGUgZHJpdmVyCisgKiBzY2FuIEZDRiBlbnRyaWVzLiBJZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBldmVudCwgaXQgd2lsbCByZXN0YXJ0IHRoZQorICogRkNGIHNhbmluZyBhbmQgcmV0dXJuIDEgZWxzZSByZXR1cm4gMC4KKyAqLworaW50CitscGZjX2NoZWNrX3BlbmRpbmdfZmNvZV9ldmVudChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHVpbnQ4X3QgdW5yZWdfZmNmKQoreworCUxQRkNfTUJPWFFfdCAqbWJveDsKKwlpbnQgcmM7CisJLyoKKwkgKiBJZiB0aGUgTGluayBpcyB1cCBhbmQgbm8gRkNvRSBldmVudHMgd2hpbGUgaW4gdGhlCisJICogRkNGIGRpc2NvdmVyeSwgbm8gbmVlZCB0byByZXN0YXJ0IEZDRiBkaXNjb3ZlcnkuCisJICovCisJaWYgKChwaGJhLT5saW5rX3N0YXRlICA+PSBMUEZDX0xJTktfVVApICYmCisJCShwaGJhLT5mY29lX2V2ZW50dGFnID09IHBoYmEtPmZjb2VfZXZlbnR0YWdfYXRfZmNmX3NjYW4pKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX0FWQUlMQUJMRTsKKwlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCisJaWYgKHBoYmEtPmxpbmtfc3RhdGUgPj0gTFBGQ19MSU5LX1VQKQorCQlscGZjX3NsaTRfcmVhZF9mY2ZfcmVjb3JkKHBoYmEsIExQRkNfRkNPRV9GQ0ZfR0VUX0ZJUlNUKTsKKworCWlmICh1bnJlZ19mY2YpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCXBoYmEtPmZjZi5mY2ZfZmxhZyAmPSB+RkNGX1JFR0lTVEVSRUQ7CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CisJCW1ib3ggPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCQlpZiAoIW1ib3gpIHsKKwkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwKKwkJCQlMT0dfRElTQ09WRVJZfExPR19NQk9YLAorCQkJCSIyNjEwIFVOUkVHX0ZDRkkgbWJveCBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlscGZjX3VucmVnX2ZjZmkobWJveCwgcGhiYS0+ZmNmLmZjZmkpOworCQltYm94LT52cG9ydCA9IHBoYmEtPnBwb3J0OworCQltYm94LT5tYm94X2NtcGwgPSBscGZjX3VucmVnaXN0ZXJfZmNmaV9jbXBsOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveCwgTUJYX05PV0FJVCk7CisJCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUll8TE9HX01CT1gsCisJCQkJIjI2MTEgVU5SRUdfRkNGSSBpc3N1ZSBtYm94IGZhaWxlZFxuIik7CisJCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoqCiAgKiBscGZjX21ieF9jbXBsX3JlYWRfZmNmX3JlY29yZCAtIENvbXBsZXRpb24gaGFuZGxlciBmb3IgcmVhZF9mY2YgbWJveC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICogQG1ib3hxOiBwb2ludGVyIHRvIG1haWxib3ggb2JqZWN0LgpAQCAtMTM2Nyw2ICsxNDgxLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50MTZfdCB2bGFuX2lkOwogCisJLyogSWYgdGhlcmUgaXMgcGVuZGluZyBGQ29FIGV2ZW50IHJlc3RhcnQgRkNGIHRhYmxlIHNjYW4gKi8KKwlpZiAobHBmY19jaGVja19wZW5kaW5nX2Zjb2VfZXZlbnQocGhiYSwgMCkpIHsKKwkJbHBmY19zbGk0X21ib3hfY21kX2ZyZWUocGhiYSwgbWJveHEpOworCQlyZXR1cm47CisJfQorCiAJLyogR2V0IHRoZSBmaXJzdCBTR0UgZW50cnkgZnJvbSB0aGUgbm9uLWVtYmVkZGVkIERNQSBtZW1vcnkuIFRoaXMKIAkgKiByb3V0aW5lIG9ubHkgdXNlcyBhIHNpbmdsZSBTR0UuCiAJICovCkBAIC0xNDI0LDcgKzE1NDQsOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CiAJaWYgKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9JTl9VU0UpIHsKIAkJaWYgKGxwZmNfZmFiX25hbWVfbWF0Y2gocGhiYS0+ZmNmLmZhYnJpY19uYW1lLAotCQkJbmV3X2ZjZl9yZWNvcmQpICYmCisJCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgorCQkgICAgbHBmY19zd19uYW1lX21hdGNoKHBoYmEtPmZjZi5zd2l0Y2hfbmFtZSwKKwkJCQkJbmV3X2ZjZl9yZWNvcmQpICYmCiAJCSAgICBscGZjX21hY19hZGRyX21hdGNoKHBoYmEsIG5ld19mY2ZfcmVjb3JkKSkgewogCQkJcGhiYS0+ZmNmLmZjZl9mbGFnIHw9IEZDRl9BVkFJTEFCTEU7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5oYmFsb2NrLCBmbGFncyk7CkBAIC0xNDY0LDkgKzE1ODYsOSBAQAogCQkgKiBJZiB0aGVyZSBpcyBhIHJlY29yZCB3aXRoIGxvd2VyIHByaW9yaXR5IHZhbHVlIGZvcgogCQkgKiB0aGUgY3VycmVudCBGQ0YsIHVzZSB0aGF0IHJlY29yZC4KIAkJICovCi0JCWlmIChscGZjX2ZhYl9uYW1lX21hdGNoKHBoYmEtPmZjZi5mYWJyaWNfbmFtZSwgbmV3X2ZjZl9yZWNvcmQpCi0JCQkmJiAobmV3X2ZjZl9yZWNvcmQtPmZpcF9wcmlvcml0eSA8Ci0JCQkJcGhiYS0+ZmNmLnByaW9yaXR5KSkgeworCQlpZiAobHBmY19mYWJfbmFtZV9tYXRjaChwaGJhLT5mY2YuZmFicmljX25hbWUsCisJCQkJCW5ld19mY2ZfcmVjb3JkKSAmJgorCQkgICAgKG5ld19mY2ZfcmVjb3JkLT5maXBfcHJpb3JpdHkgPCBwaGJhLT5mY2YucHJpb3JpdHkpKSB7CiAJCQkvKiBVc2UgdGhpcyBGQ0YgcmVjb3JkICovCiAJCQlscGZjX2NvcHlfZmNmX3JlY29yZChwaGJhLCBuZXdfZmNmX3JlY29yZCk7CiAJCQlwaGJhLT5mY2YuYWRkcl9tb2RlID0gYWRkcl9tb2RlOwpAQCAtMTUxMiw2ICsxNjM0LDM5IEBACiB9CiAKIC8qKgorICogbHBmY19pbml0X3ZwaV9jbXBsIC0gQ29tcGxldGlvbiBoYW5kbGVyIGZvciBpbml0X3ZwaSBtYm94IGNvbW1hbmQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBtYm94cTogcG9pbnRlciB0byBtYWlsYm94IGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjb21wbGV0aW9uIG9mIGluaXQgdnBpIG1haWxib3ggY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQKK2xwZmNfaW5pdF92cGlfY21wbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqbWJveHEpCit7CisJc3RydWN0IGxwZmNfdnBvcnQgKnZwb3J0ID0gbWJveHEtPnZwb3J0OworCWlmIChtYm94cS0+dS5tYi5tYnhTdGF0dXMpIHsKKwkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9FUlIsCisJCQkJTE9HX01CT1gsCisJCQkJIjI2MDkgSW5pdCBWUEkgbWFpbGJveCBmYWlsZWQgMHgleFxuIiwKKwkJCQltYm94cS0+dS5tYi5tYnhTdGF0dXMpOworCQltZW1wb29sX2ZyZWUobWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKwl2cG9ydC0+ZmNfZmxhZyAmPSB+RkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CisKKwlpZiAocGhiYS0+bGlua19mbGFnICYgTFNfTlBJVl9GQUJfU1VQUE9SVEVEKQorCQlscGZjX2luaXRpYWxfZmRpc2ModnBvcnQpOworCWVsc2UgeworCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfTk9fRkFCUklDX1NVUFApOworCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX0VSUiwKKwkJCUxPR19FTFMsCisJCQkiMjYwNiBObyBOUElWIEZhYnJpYyBzdXBwb3J0XG4iKTsKKwl9CisJcmV0dXJuOworfQorCisvKioKICAqIGxwZmNfc3RhcnRfZmRpc2NzIC0gc2VuZCBmZGlzY3MgZm9yIGVhY2ggdnBvcnRzIG9uIHRoaXMgcG9ydC4KICAqIEBwaGJhOiBwb2ludGVyIHRvIGxwZmMgaGJhIGRhdGEgc3RydWN0dXJlLgogICoKQEAgLTE1MjMsNiArMTY3OCw4IEBACiB7CiAJc3RydWN0IGxwZmNfdnBvcnQgKip2cG9ydHM7CiAJaW50IGk7CisJTFBGQ19NQk9YUV90ICptYm94cTsKKwlpbnQgcmM7CiAKIAl2cG9ydHMgPSBscGZjX2NyZWF0ZV92cG9ydF93b3JrX2FycmF5KHBoYmEpOwogCWlmICh2cG9ydHMgIT0gTlVMTCkgewpAQCAtMTU0MCw2ICsxNjk3LDI5IEBACiAJCQkJCQkgICAgIEZDX1ZQT1JUX0xJTktET1dOKTsKIAkJCQljb250aW51ZTsKIAkJCX0KKwkJCWlmICh2cG9ydHNbaV0tPmZjX2ZsYWcgJiBGQ19WUE9SVF9ORUVEU19JTklUX1ZQSSkgeworCQkJCW1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQlpZiAoIW1ib3hxKSB7CisJCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKKwkJCQkJTE9HX01CT1gsICIyNjA3IEZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWxwZmNfaW5pdF92cGkocGhiYSwgbWJveHEsIHZwb3J0c1tpXS0+dnBpKTsKKwkJCQltYm94cS0+dnBvcnQgPSB2cG9ydHNbaV07CisJCQkJbWJveHEtPm1ib3hfY21wbCA9IGxwZmNfaW5pdF92cGlfY21wbDsKKwkJCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgbWJveHEsCisJCQkJCU1CWF9OT1dBSVQpOworCQkJCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CisJCQkJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnRzW2ldLCBLRVJOX0VSUiwKKwkJCQkJTE9HX01CT1gsICIyNjA4IEZhaWxlZCB0byBpc3N1ZSAiCisJCQkJCSJpbml0X3ZwaSBtYWlsYm94XG4iKTsKKwkJCQkJbWVtcG9vbF9mcmVlKG1ib3hxLAorCQkJCQkJcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKHBoYmEtPmxpbmtfZmxhZyAmIExTX05QSVZfRkFCX1NVUFBPUlRFRCkKIAkJCQlscGZjX2luaXRpYWxfZmRpc2ModnBvcnRzW2ldKTsKIAkJCWVsc2UgewpAQCAtMTc2OSw2ICsxOTQ5LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAJfSBlbHNlIHsKKwkJdnBvcnQtPnBvcnRfc3RhdGUgPSBMUEZDX1ZQT1JUX1VOS05PV047CiAJCS8qCiAJCSAqIEFkZCB0aGUgZHJpdmVyJ3MgZGVmYXVsdCBGQ0YgcmVjb3JkIGF0IEZDRiBpbmRleCAwIG5vdy4gVGhpcwogCQkgKiBpcyBwaGFzZSAxIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydCBGQ0YgaW5kZXggMCBhbmQgZHJpdmVyCkBAIC0xODA0LDYgKzE5ODUsMTIgQEAKIAkJICogVGhlIGRyaXZlciBpcyBleHBlY3RlZCB0byBkbyBGSVAvRkNGLiBDYWxsIHRoZSBwb3J0CiAJCSAqIGFuZCBnZXQgdGhlIEZDRiBUYWJsZS4KIAkJICovCisJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlpZiAocGhiYS0+aGJhX2ZsYWcgJiBGQ0ZfRElTQ19JTlBST0dSRVNTKSB7CisJCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQkJcmV0dXJuOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJCXJjID0gbHBmY19zbGk0X3JlYWRfZmNmX3JlY29yZChwaGJhLAogCQkJCQlMUEZDX0ZDT0VfRkNGX0dFVF9GSVJTVCk7CiAJCWlmIChyYykKQEAgLTIxMTMsMTMgKzIzMDAsMTUgQEAKIAlMUEZDX01CT1hRX3QgKnBtYiA9IE5VTEw7CiAJTUFJTEJPWF90ICptYjsKIAlzdHJ1Y3Qgc3RhdGljX3Zwb3J0X2luZm8gKnZwb3J0X2luZm87Ci0JaW50IHJjLCBpOworCWludCByYyA9IDAsIGk7CiAJc3RydWN0IGZjX3Zwb3J0X2lkZW50aWZpZXJzIHZwb3J0X2lkOwogCXN0cnVjdCBmY192cG9ydCAqbmV3X2ZjX3Zwb3J0OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCXN0cnVjdCBscGZjX3Zwb3J0ICp2cG9ydDsKIAl1aW50MTZfdCBvZmZzZXQgPSAwOwogCXVpbnQ4X3QgKnZwb3J0X2J1ZmY7CisJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKKwl1aW50MzJfdCBieXRlX2NvdW50ID0gMDsKIAogCXBtYiA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwbWIpIHsKQEAgLTIxNDIsNyArMjMzMSw5IEBACiAKIAl2cG9ydF9idWZmID0gKHVpbnQ4X3QgKikgdnBvcnRfaW5mbzsKIAlkbyB7Ci0JCWxwZmNfZHVtcF9zdGF0aWNfdnBvcnQocGhiYSwgcG1iLCBvZmZzZXQpOworCQlpZiAobHBmY19kdW1wX3N0YXRpY192cG9ydChwaGJhLCBwbWIsIG9mZnNldCkpCisJCQlnb3RvIG91dDsKKwogCQlwbWItPnZwb3J0ID0gcGhiYS0+cHBvcnQ7CiAJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIHBtYiwgTFBGQ19NQk9YX1RNTyk7CiAKQEAgLTIxNTUsMTcgKzIzNDYsMzAgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKG1iLT51bi52YXJEbXAud29yZF9jbnQgPgotCQkJc2l6ZW9mKHN0cnVjdCBzdGF0aWNfdnBvcnRfaW5mbykgLSBvZmZzZXQpCi0JCQltYi0+dW4udmFyRG1wLndvcmRfY250ID0KLQkJCXNpemVvZihzdHJ1Y3Qgc3RhdGljX3Zwb3J0X2luZm8pIC0gb2Zmc2V0OworCQlpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCQlieXRlX2NvdW50ID0gcG1iLT51Lm1xZS51bi5tYl93b3Jkc1s1XTsKKwkJCW1wID0gKHN0cnVjdCBscGZjX2RtYWJ1ZiAqKSBwbWItPmNvbnRleHQyOworCQkJaWYgKGJ5dGVfY291bnQgPiBzaXplb2Yoc3RydWN0IHN0YXRpY192cG9ydF9pbmZvKSAtCisJCQkJCW9mZnNldCkKKwkJCQlieXRlX2NvdW50ID0gc2l6ZW9mKHN0cnVjdCBzdGF0aWNfdnBvcnRfaW5mbykKKwkJCQkJLSBvZmZzZXQ7CisJCQltZW1jcHkodnBvcnRfYnVmZiArIG9mZnNldCwgbXAtPnZpcnQsIGJ5dGVfY291bnQpOworCQkJb2Zmc2V0ICs9IGJ5dGVfY291bnQ7CisJCX0gZWxzZSB7CisJCQlpZiAobWItPnVuLnZhckRtcC53b3JkX2NudCA+CisJCQkJc2l6ZW9mKHN0cnVjdCBzdGF0aWNfdnBvcnRfaW5mbykgLSBvZmZzZXQpCisJCQkJbWItPnVuLnZhckRtcC53b3JkX2NudCA9CisJCQkJCXNpemVvZihzdHJ1Y3Qgc3RhdGljX3Zwb3J0X2luZm8pCisJCQkJCQktIG9mZnNldDsKKwkJCWJ5dGVfY291bnQgPSBtYi0+dW4udmFyRG1wLndvcmRfY250OworCQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KCgodWludDhfdCAqKW1iKSArIERNUF9SU1BfT0ZGU0VULAorCQkJCXZwb3J0X2J1ZmYgKyBvZmZzZXQsCisJCQkJYnl0ZV9jb3VudCk7CiAKLQkJbHBmY19zbGlfcGNpbWVtX2Jjb3B5KCgodWludDhfdCAqKW1iKSArIERNUF9SU1BfT0ZGU0VULAotCQkJdnBvcnRfYnVmZiArIG9mZnNldCwKLQkJCW1iLT51bi52YXJEbXAud29yZF9jbnQpOwotCQlvZmZzZXQgKz0gbWItPnVuLnZhckRtcC53b3JkX2NudDsKKwkJCW9mZnNldCArPSBieXRlX2NvdW50OworCQl9CiAKLQl9IHdoaWxlIChtYi0+dW4udmFyRG1wLndvcmRfY250ICYmCisJfSB3aGlsZSAoYnl0ZV9jb3VudCAmJgogCQlvZmZzZXQgPCBzaXplb2Yoc3RydWN0IHN0YXRpY192cG9ydF9pbmZvKSk7CiAKIApAQCAtMjE5OCw3ICsyNDAyLDcgQEAKIAkJaWYgKCFuZXdfZmNfdnBvcnQpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19JTklULAogCQkJCSIwNTQ2IGxwZmNfY3JlYXRlX3N0YXRpY192cG9ydCBmYWlsZWQgdG8iCi0JCQkJIiBjcmVhdGUgdnBvcnQgXG4iKTsKKwkJCQkiIGNyZWF0ZSB2cG9ydFxuIik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMjA3LDE2ICsyNDExLDE1IEBACiAJfQogCiBvdXQ6Ci0JLyoKLQkgKiBJZiB0aGlzIGlzIHRpbWVkIG91dCBjb21tYW5kLCBzZXR0aW5nIE5VTEwgdG8gY29udGV4dDIgdGVsbCBTTEkKLQkgKiBsYXllciBub3QgdG8gdXNlIHRoaXMgYnVmZmVyLgotCSAqLwotCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwotCXBtYi0+Y29udGV4dDIgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7CiAJa2ZyZWUodnBvcnRfaW5mbyk7Ci0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQorCWlmIChyYyAhPSBNQlhfVElNRU9VVCkgeworCQlpZiAocG1iLT5jb250ZXh0MikgeworCQkJbXAgPSAoc3RydWN0IGxwZmNfZG1hYnVmICopIHBtYi0+Y29udGV4dDI7CisJCQlscGZjX21idWZfZnJlZShwaGJhLCBtcC0+dmlydCwgbXAtPnBoeXMpOworCQkJa2ZyZWUobXApOworCQl9CiAJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCX0KIAogCXJldHVybjsKIH0KQEAgLTQzNjAsNyArNDU2Myw3IEBACiAJZmNvZV9wYXJhbV9oZHIgPSAoc3RydWN0IGxwZmNfZmlwX3BhcmFtX2hkciAqKQogCQlidWZmOwogCWZjb2VfcGFyYW0gPSAoc3RydWN0IGxwZmNfZmNvZV9wYXJhbXMgKikKLQkJYnVmZiArIHNpemVvZihzdHJ1Y3QgbHBmY19maXBfcGFyYW1faGRyKTsKKwkJKGJ1ZmYgKyBzaXplb2Yoc3RydWN0IGxwZmNfZmlwX3BhcmFtX2hkcikpOwogCiAJaWYgKChmY29lX3BhcmFtX2hkci0+cGFybV92ZXJzaW9uICE9IEZJUFBfVkVSU0lPTikgfHwKIAkJKGZjb2VfcGFyYW1faGRyLT5sZW5ndGggIT0gRkNPRV9QQVJBTV9MRU5HVEgpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ody5oCmluZGV4IDhhM2EwMjYuLmNjYjI2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHcuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3LmgKQEAgLTI0OTYsOCArMjQ5Niw4IEBACiAjZGVmaW5lICBETVBfVlBPUlRfUkVHSU9OX1NJWkUJIDB4MjAwCiAjZGVmaW5lICBETVBfTUJPWF9PRkZTRVRfV09SRAkgMHg1CiAKLSNkZWZpbmUgIERNUF9SRUdJT05fRkNPRVBBUkFNCSAweDE3ICAgLyogZmNvZSBwYXJhbSByZWdpb24gKi8KLSNkZWZpbmUgIERNUF9GQ09FUEFSQU1fUkdOX1NJWkUJIDB4NDAwCisjZGVmaW5lICBETVBfUkVHSU9OXzIzCSAJIDB4MTcgICAvKiBmY29lIHBhcmFtICBhbmQgcG9ydCBzdGF0ZSByZWdpb24gKi8KKyNkZWZpbmUgIERNUF9SR04yM19TSVpFCSAJIDB4NDAwCiAKICNkZWZpbmUgIFdBS0VfVVBfUEFSTVNfUkVHSU9OX0lEICAgIDQKICNkZWZpbmUgIFdBS0VfVVBfUEFSTVNfV09SRF9TSVpFICAgMTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2h3NC5oCmluZGV4IDI5OTVkMTIuLjM2ODllZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaHc0LmgKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19odzQuaApAQCAtNTIsNiArNTIsMzEgQEAKIAl1aW50MzJfdCBhZGRyX2hpOwogfTsKIAorI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1dPUkQJMHg1OAorc3RydWN0IGxwZmNfc2xpX2ludGYgeworCXVpbnQzMl90IHdvcmQwOworI2RlZmluZSBscGZjX3NsaV9pbnRmX2lmdHlwZV9NQVNLIAkweDAwMDAwMDA3CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfaWZ0eXBlX1NISUZUCTAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9pZnR5cGVfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9NQVNLIAkJMHgwMDAwMDAwZgorI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9TSElGVAkJNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX3Jldl9XT1JECQl3b3JkMAorI2RlZmluZSBMUEZDX1NMSVJFVl9DT05GX1NMSTQJNAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZhbWlseV9NQVNLIAkweDAwMDAwMGZmCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmFtaWx5X1NISUZUCTgKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mYW1pbHlfV09SRAl3b3JkMAorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX01BU0sgCTB4MDAwMDAwZmYKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0MV9TSElGVAkxNgorI2RlZmluZSBscGZjX3NsaV9pbnRmX2ZlYXQxX1dPUkQJd29yZDAKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9NQVNLIAkweDAwMDAwMDFmCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfZmVhdDJfU0hJRlQJMjQKKyNkZWZpbmUgbHBmY19zbGlfaW50Zl9mZWF0Ml9XT1JECXdvcmQwCisjZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfTUFTSyAJMHgwMDAwMDAwNworI2RlZmluZSBscGZjX3NsaV9pbnRmX3ZhbGlkX1NISUZUCTI5CisjZGVmaW5lIGxwZmNfc2xpX2ludGZfdmFsaWRfV09SRAl3b3JkMAorI2RlZmluZSBMUEZDX1NMSV9JTlRGX1ZBTElECQk2Cit9OworCiAjZGVmaW5lIExQRkNfU0xJNF9CQVIwCQkxCiAjZGVmaW5lIExQRkNfU0xJNF9CQVIxCQkyCiAjZGVmaW5lIExQRkNfU0xJNF9CQVIyCQk0CkBAIC0xMTgxLDYgKzEyMDYsMzIgQEAKICNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX2ZjZl9zdGF0ZV9NQVNLCQkweDAwMDBGRkZGCiAjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9mY2Zfc3RhdGVfV09SRAkJd29yZDgKIAl1aW50OF90IHZsYW5fYml0bWFwWzUxMl07CisJdWludDMyX3Qgd29yZDEzNzsKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzBfU0hJRlQJMAorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMF9NQVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzBfV09SRAl3b3JkMTM3CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8xX1NISUZUCTgKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzFfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8xX1dPUkQJd29yZDEzNworI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMl9TSElGVAkxNgorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfMl9NQVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzJfV09SRAl3b3JkMTM3CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zX1NISUZUCTI0CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV8zX01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfM19XT1JECXdvcmQxMzcKKwl1aW50MzJfdCB3b3JkMTM4OworI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNF9TSElGVAkwCisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV80X01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNF9XT1JECXdvcmQxMzgKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzVfU0hJRlQJOAorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNV9NQVNLCTB4MDAwMDAwRkYKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzVfV09SRAl3b3JkMTM4CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82X1NISUZUCTE2CisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV82X01BU0sJMHgwMDAwMDBGRgorI2RlZmluZSBscGZjX2ZjZl9yZWNvcmRfc3dpdGNoX25hbWVfNl9XT1JECXdvcmQxMzgKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzdfU0hJRlQJMjQKKyNkZWZpbmUgbHBmY19mY2ZfcmVjb3JkX3N3aXRjaF9uYW1lXzdfTUFTSwkweDAwMDAwMEZGCisjZGVmaW5lIGxwZmNfZmNmX3JlY29yZF9zd2l0Y2hfbmFtZV83X1dPUkQJd29yZDEzOAogfTsKIAogc3RydWN0IGxwZmNfbWJ4X3JlYWRfZmNmX3RibCB7CkBAIC0xMzg1LDIwICsxNDM2LDE3IEBACiAKIHN0cnVjdCBscGZjX21ieF9yZXN1bWVfcnBpIHsKIAl1aW50MzJfdCB3b3JkMTsKLSNkZWZpbmUgbHBmY19yZXN1bWVfcnBpX3JwaV9TSElGVAkwCi0jZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9ycGlfTUFTSwkweDAwMDBGRkZGCi0jZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9ycGlfV09SRAl3b3JkMQorI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfaW5kZXhfU0hJRlQJMAorI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfaW5kZXhfTUFTSwkweDAwMDBGRkZGCisjZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9pbmRleF9XT1JECXdvcmQxCisjZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV9paV9TSElGVAkzMAorI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfaWlfTUFTSwkJMHgwMDAwMDAwMworI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfaWlfV09SRAkJd29yZDEKKyNkZWZpbmUgUkVTVU1FX0lOREVYX1JQSQkJMAorI2RlZmluZSBSRVNVTUVfSU5ERVhfVlBJCQkxCisjZGVmaW5lIFJFU1VNRV9JTkRFWF9WRkkJCTIKKyNkZWZpbmUgUkVTVU1FX0lOREVYX0ZDRkkJCTMKIAl1aW50MzJfdCBldmVudF90YWc7Ci0JdWludDMyX3Qgd29yZDNfcnN2ZDsKLQl1aW50MzJfdCB3b3JkNF9yc3ZkOwotCXVpbnQzMl90IHdvcmQ1X3JzdmQ7Ci0JdWludDMyX3Qgd29yZDY7Ci0jZGVmaW5lIGxwZmNfcmVzdW1lX3JwaV92cGlfU0hJRlQJMAotI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfdnBpX01BU0sJMHgwMDAwRkZGRgotI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfdnBpX1dPUkQJd29yZDYKLSNkZWZpbmUgbHBmY19yZXN1bWVfcnBpX3ZmaV9TSElGVAkxNgotI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfdmZpX01BU0sJMHgwMDAwRkZGRgotI2RlZmluZSBscGZjX3Jlc3VtZV9ycGlfdmZpX1dPUkQJd29yZDYKIH07CiAKICNkZWZpbmUgUkVHX0ZDRl9JTlZBTElEX1FJRAkweEZGRkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggZmM2N2NjNi4uNTYyZDhjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCQlnb3RvIG91dF9mcmVlX21ib3g7CiAKIAlkbyB7Ci0JCWxwZmNfZHVtcF9tZW0ocGhiYSwgcG1iLCBvZmZzZXQpOworCQlscGZjX2R1bXBfbWVtKHBoYmEsIHBtYiwgb2Zmc2V0LCBETVBfUkVHSU9OX1ZQRCk7CiAJCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9QT0xMKTsKIAogCQlpZiAocmMgIT0gTUJYX1NVQ0NFU1MpIHsKQEAgLTQyNSw2ICs0MjUsOSBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwkvKiBDaGVjayBpZiB0aGUgcG9ydCBpcyBkaXNhYmxlZCAqLworCWxwZmNfc2xpX3JlYWRfbGlua19zdGUocGhiYSk7CisKIAkvKiBSZXNldCB0aGUgREZUX0hCQV9RX0RFUFRIIHRvIHRoZSBtYXggeHJpICAqLwogCWlmIChwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoID4gKG1iLT51bi52YXJSZENvbmZpZy5tYXhfeHJpKzEpKQogCQlwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoID0KQEAgLTUyNCwyNyArNTI3LDQ2IEBACiAJLyogU2V0IHVwIGVycm9yIGF0dGVudGlvbiAoRVJBVFQpIHBvbGxpbmcgdGltZXIgKi8KIAltb2RfdGltZXIoJnBoYmEtPmVyYXR0X3BvbGwsIGppZmZpZXMgKyBIWiAqIExQRkNfRVJBVFRfUE9MTF9JTlRFUlZBTCk7CiAKLQlscGZjX2luaXRfbGluayhwaGJhLCBwbWIsIHBoYmEtPmNmZ190b3BvbG9neSwgcGhiYS0+Y2ZnX2xpbmtfc3BlZWQpOwotCXBtYi0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKLQlscGZjX3NldF9sb29wYmFja19mbGFnKHBoYmEpOwotCXJjID0gbHBmY19zbGlfaXNzdWVfbWJveChwaGJhLCBwbWIsIE1CWF9OT1dBSVQpOwotCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAorCWlmIChwaGJhLT5oYmFfZmxhZyAmIExJTktfRElTQUJMRUQpIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsCisJCQlLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMjU5OCBBZGFwdGVyIExpbmsgaXMgZGlzYWJsZWQuXG4iKTsKKwkJbHBmY19kb3duX2xpbmsocGhiYSwgcG1iKTsKKwkJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwkJaWYgKChyYyAhPSBNQlhfU1VDQ0VTUykgJiYgKHJjICE9IE1CWF9CVVNZKSkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsCisJCQlLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMjU5OSBBZGFwdGVyIGZhaWxlZCB0byBpc3N1ZSBET1dOX0xJTksiCisJCQkiIG1ib3ggY29tbWFuZCByYyAweCV4XG4iLCByYyk7CisKKwkJCW1lbXBvb2xfZnJlZShwbWIsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9IGVsc2UgeworCQlscGZjX2luaXRfbGluayhwaGJhLCBwbWIsIHBoYmEtPmNmZ190b3BvbG9neSwKKwkJCXBoYmEtPmNmZ19saW5rX3NwZWVkKTsKKwkJcG1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOworCQlscGZjX3NldF9sb29wYmFja19mbGFnKHBoYmEpOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfTk9XQUlUKTsKKwkJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAogCQkJCSIwNDU0IEFkYXB0ZXIgZmFpbGVkIHRvIGluaXQsIG1ieENtZCB4JXggIgogCQkJCSJJTklUX0xJTkssIG1ieFN0YXR1cyB4JXhcbiIsCiAJCQkJbWItPm1ieENvbW1hbmQsIG1iLT5tYnhTdGF0dXMpOwogCi0JCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHQgZW5hYmxlIGNvbmRpdGlvbnMgKi8KLQkJd3JpdGVsKDAsIHBoYmEtPkhDcmVnYWRkcik7Ci0JCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCi0JCS8qIENsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdHMgKi8KLQkJd3JpdGVsKDB4ZmZmZmZmZmYsIHBoYmEtPkhBcmVnYWRkcik7Ci0JCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCisJCQkvKiBDbGVhciBhbGwgaW50ZXJydXB0IGVuYWJsZSBjb25kaXRpb25zICovCisJCQl3cml0ZWwoMCwgcGhiYS0+SENyZWdhZGRyKTsKKwkJCXJlYWRsKHBoYmEtPkhDcmVnYWRkcik7IC8qIGZsdXNoICovCisJCQkvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCQl3cml0ZWwoMHhmZmZmZmZmZiwgcGhiYS0+SEFyZWdhZGRyKTsKKwkJCXJlYWRsKHBoYmEtPkhBcmVnYWRkcik7IC8qIGZsdXNoICovCiAKLQkJcGhiYS0+bGlua19zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOwotCQlpZiAocmMgIT0gTUJYX0JVU1kpCi0JCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKLQkJcmV0dXJuIC1FSU87CisJCQlwaGJhLT5saW5rX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CisJCQlpZiAocmMgIT0gTUJYX0JVU1kpCisJCQkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCX0KIAkvKiBNQk9YIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIGluIG1ib3ggY29tcGwgKi8KIAlwbWIgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwpAQCAtNTU4LDcgKzU4MCw3IEBACiAJCQkJS0VSTl9FUlIsCiAJCQkJTE9HX0lOSVQsCiAJCQkJIjA0NTYgQWRhcHRlciBmYWlsZWQgdG8gaXNzdWUgIgotCQkJCSJBU1lOQ0VWVF9FTkFCTEUgbWJveCBzdGF0dXMgeCV4IFxuLiIsCisJCQkJIkFTWU5DRVZUX0VOQUJMRSBtYm94IHN0YXR1cyB4JXhcbiIsCiAJCQkJcmMpOwogCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAl9CkBAIC01NzIsNyArNTk0LDcgQEAKIAogCWlmICgocmMgIT0gTUJYX0JVU1kpICYmIChyYyAhPSBNQlhfU1VDQ0VTUykpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwgIjA0MzUgQWRhcHRlciBmYWlsZWQgIgotCQkJCSJ0byBnZXQgT3B0aW9uIFJPTSB2ZXJzaW9uIHN0YXR1cyB4JXhcbi4iLCByYyk7CisJCQkJInRvIGdldCBPcHRpb24gUk9NIHZlcnNpb24gc3RhdHVzIHgleFxuIiwgcmMpOwogCQltZW1wb29sX2ZyZWUocG1iLCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAl9CiAKQEAgLTIxMzMsNiArMjE1NSw4IEBACiAJCQl2cG9ydHNbaV0tPmZjX2ZsYWcgJj0gfkZDX09GRkxJTkVfTU9ERTsKIAkJCWlmIChwaGJhLT5zbGkzX29wdGlvbnMgJiBMUEZDX1NMSTNfTlBJVl9FTkFCTEVEKQogCQkJCXZwb3J0c1tpXS0+ZmNfZmxhZyB8PSBGQ19WUE9SVF9ORUVEU19SRUdfVlBJOworCQkJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkKKwkJCQl2cG9ydHNbaV0tPmZjX2ZsYWcgfD0gRkNfVlBPUlRfTkVFRFNfSU5JVF9WUEk7CiAJCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CiAJCX0KIAkJbHBmY19kZXN0cm95X3Zwb3J0X3dvcmtfYXJyYXkocGhiYSwgdnBvcnRzKTsKQEAgLTI4MDcsNiArMjgzMSw3IEBACiAJYXR0X3R5cGUgPSBscGZjX3NsaTRfcGFyc2VfbGF0dF90eXBlKHBoYmEsIGFjcWVfbGluayk7CiAJaWYgKGF0dF90eXBlICE9IEFUX0xJTktfRE9XTiAmJiBhdHRfdHlwZSAhPSBBVF9MSU5LX1VQKQogCQlyZXR1cm47CisJcGhiYS0+ZmNvZV9ldmVudHRhZyA9IGFjcWVfbGluay0+ZXZlbnRfdGFnOwogCXBtYiA9IChMUEZDX01CT1hRX3QgKiltZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCWlmICghcG1iKSB7CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKQEAgLTI4OTQsMTggKzI5MTksMjAgQEAKIAl1aW50OF90IGV2ZW50X3R5cGUgPSBiZl9nZXQobHBmY19hY3FlX2Zjb2VfZXZlbnRfdHlwZSwgYWNxZV9mY29lKTsKIAlpbnQgcmM7CiAKKwlwaGJhLT5mY29lX2V2ZW50dGFnID0gYWNxZV9mY29lLT5ldmVudF90YWc7CiAJc3dpdGNoIChldmVudF90eXBlKSB7CiAJY2FzZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9ORVdfRkNGOgogCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19ESVNDT1ZFUlksCi0JCQkiMjU0NiBOZXcgRkNGIGZvdW5kIGluZGV4IDB4JXggdGFnIDB4JXggXG4iLAorCQkJIjI1NDYgTmV3IEZDRiBmb3VuZCBpbmRleCAweCV4IHRhZyAweCV4XG4iLAogCQkJYWNxZV9mY29lLT5mY2ZfaW5kZXgsCiAJCQlhY3FlX2Zjb2UtPmV2ZW50X3RhZyk7CiAJCS8qCi0JCSAqIElmIHRoZSBjdXJyZW50IEZDRiBpcyBpbiBkaXNjb3ZlcmVkIHN0YXRlLAotCQkgKiBkbyBub3RoaW5nLgorCQkgKiBJZiB0aGUgY3VycmVudCBGQ0YgaXMgaW4gZGlzY292ZXJlZCBzdGF0ZSwgb3IKKwkJICogRkNGIGRpc2NvdmVyeSBpcyBpbiBwcm9ncmVzcyBkbyBub3RoaW5nLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycSgmcGhiYS0+aGJhbG9jayk7Ci0JCWlmIChwaGJhLT5mY2YuZmNmX2ZsYWcgJiBGQ0ZfRElTQ09WRVJFRCkgeworCQlpZiAoKHBoYmEtPmZjZi5mY2ZfZmxhZyAmIEZDRl9ESVNDT1ZFUkVEKSB8fAorCQkgICAocGhiYS0+aGJhX2ZsYWcgJiBGQ0ZfRElTQ19JTlBST0dSRVNTKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZwaGJhLT5oYmFsb2NrKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yOTIyLDcgKzI5NDksNyBAQAogCiAJY2FzZSBMUEZDX0ZDT0VfRVZFTlRfVFlQRV9GQ0ZfVEFCTEVfRlVMTDoKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAotCQkJIjI1NDggRkNGIFRhYmxlIGZ1bGwgY291bnQgMHgleCB0YWcgMHgleCBcbiIsCisJCQkiMjU0OCBGQ0YgVGFibGUgZnVsbCBjb3VudCAweCV4IHRhZyAweCV4XG4iLAogCQkJYmZfZ2V0KGxwZmNfYWNxZV9mY29lX2ZjZl9jb3VudCwgYWNxZV9mY29lKSwKIAkJCWFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKIAkJYnJlYWs7CkBAIC0yOTMwLDcgKzI5NTcsNyBAQAogCWNhc2UgTFBGQ19GQ09FX0VWRU5UX1RZUEVfRkNGX0RFQUQ6CiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKIAkJCSIyNTQ5IEZDRiBkaXNjb25uZWN0ZWQgZnJvbiBuZXR3b3JrIGluZGV4IDB4JXgiCi0JCQkiIHRhZyAweCV4IFxuIiwgYWNxZV9mY29lLT5mY2ZfaW5kZXgsCisJCQkiIHRhZyAweCV4XG4iLCBhY3FlX2Zjb2UtPmZjZl9pbmRleCwKIAkJCWFjcWVfZmNvZS0+ZXZlbnRfdGFnKTsKIAkJLyogSWYgdGhlIGV2ZW50IGlzIG5vdCBmb3IgY3VycmVudGx5IHVzZWQgZmNmIGRvIG5vdGhpbmcgKi8KIAkJaWYgKHBoYmEtPmZjZi5mY2ZfaW5keCAhPSBhY3FlX2Zjb2UtPmZjZl9pbmRleCkKQEAgLTQxMzAsOCArNDE1Nyw3IEBACiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBIQkEgc3RydWN0dXJlICovCiAJcGhiYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBscGZjX2hiYSksIEdGUF9LRVJORUwpOwogCWlmICghcGhiYSkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCSIxNDE3IEZhaWxlZCB0byBhbGxvY2F0ZSBoYmEgc3RydWN0LlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBoYmEgc3RydWN0XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MTQ1LDYgKzQxNzEsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwltdXRleF9pbml0KCZwaGJhLT5jdF9ldmVudF9tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJnBoYmEtPmN0X2V2X3dhaXRlcnMpOworCiAJcmV0dXJuIHBoYmE7CiB9CiAKQEAgLTQ0ODksMjMgKzQ1MTgsNiBAQAogCWlmICghcGhiYS0+c2xpNF9oYmEuU1RBcmVnYWRkcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBXaXRoIHVuY292ZXJhYmxlIGVycm9yLCBsb2cgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybiBlcnJvciAqLwotCW9ubG5yZWcwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuT05MSU5FMHJlZ2FkZHIpOwotCW9ubG5yZWcxID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuT05MSU5FMXJlZ2FkZHIpOwotCWlmICgob25sbnJlZzAgIT0gTFBGQ19PTkxJTkVfTkVSUikgfHwgKG9ubG5yZWcxICE9IExQRkNfT05MSU5FX05FUlIpKSB7Ci0JCXVlcnJsb19yZWcud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5VRVJSTE9yZWdhZGRyKTsKLQkJdWVycmhpX3JlZy53b3JkMCA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLlVFUlJISXJlZ2FkZHIpOwotCQlpZiAodWVycmxvX3JlZy53b3JkMCB8fCB1ZXJyaGlfcmVnLndvcmQwKSB7Ci0JCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19JTklULAotCQkJCQkiMTQyMiBIQkEgVW5yZWNvdmVyYWJsZSBlcnJvcjogIgotCQkJCQkidWVycl9sb19yZWc9MHgleCwgdWVycl9oaV9yZWc9MHgleCwgIgotCQkJCQkib25saW5lMF9yZWc9MHgleCwgb25saW5lMV9yZWc9MHgleFxuIiwKLQkJCQkJdWVycmxvX3JlZy53b3JkMCwgdWVycmhpX3JlZy53b3JkMCwKLQkJCQkJb25sbnJlZzAsIG9ubG5yZWcxKTsKLQkJfQotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAkvKiBXYWl0IHVwIHRvIDMwIHNlY29uZHMgZm9yIHRoZSBTTEkgUG9ydCBQT1NUIGRvbmUgYW5kIHJlYWR5ICovCiAJZm9yIChpID0gMDsgaSA8IDMwMDA7IGkrKykgewogCQlzdGFfcmVnLndvcmQwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuU1RBcmVnYWRkcik7CkBAIC00NTQ1LDYgKzQ1NTcsMjMgQEAKIAkJCWJmX2dldChscGZjX3NjcmF0Y2hwYWRfZmVhdHVyZWxldmVsMSwgJnNjcmF0Y2hwYWQpLAogCQkJYmZfZ2V0KGxwZmNfc2NyYXRjaHBhZF9mZWF0dXJlbGV2ZWwyLCAmc2NyYXRjaHBhZCkpOwogCisJLyogV2l0aCB1bmNvdmVyYWJsZSBlcnJvciwgbG9nIHRoZSBlcnJvciBtZXNzYWdlIGFuZCByZXR1cm4gZXJyb3IgKi8KKwlvbmxucmVnMCA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLk9OTElORTByZWdhZGRyKTsKKwlvbmxucmVnMSA9IHJlYWRsKHBoYmEtPnNsaTRfaGJhLk9OTElORTFyZWdhZGRyKTsKKwlpZiAoKG9ubG5yZWcwICE9IExQRkNfT05MSU5FX05FUlIpIHx8IChvbmxucmVnMSAhPSBMUEZDX09OTElORV9ORVJSKSkgeworCQl1ZXJybG9fcmVnLndvcmQwID0gcmVhZGwocGhiYS0+c2xpNF9oYmEuVUVSUkxPcmVnYWRkcik7CisJCXVlcnJoaV9yZWcud29yZDAgPSByZWFkbChwaGJhLT5zbGk0X2hiYS5VRVJSSElyZWdhZGRyKTsKKwkJaWYgKHVlcnJsb19yZWcud29yZDAgfHwgdWVycmhpX3JlZy53b3JkMCkgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCQkJIjE0MjIgSEJBIFVucmVjb3ZlcmFibGUgZXJyb3I6ICIKKwkJCQkJInVlcnJfbG9fcmVnPTB4JXgsIHVlcnJfaGlfcmVnPTB4JXgsICIKKwkJCQkJIm9ubGluZTBfcmVnPTB4JXgsIG9ubGluZTFfcmVnPTB4JXhcbiIsCisJCQkJCXVlcnJsb19yZWcud29yZDAsIHVlcnJoaV9yZWcud29yZDAsCisJCQkJCW9ubG5yZWcwLCBvbmxucmVnMSk7CisJCX0KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJcmV0dXJuIHBvcnRfZXJyb3I7CiB9CiAKQEAgLTczNDcsNiArNzM3Niw5IEBACiAJLyogUGVyZm9ybSBwb3N0IGluaXRpYWxpemF0aW9uIHNldHVwICovCiAJbHBmY19wb3N0X2luaXRfc2V0dXAocGhiYSk7CiAKKwkvKiBDaGVjayBpZiB0aGVyZSBhcmUgc3RhdGljIHZwb3J0cyB0byBiZSBjcmVhdGVkLiAqLworCWxwZmNfY3JlYXRlX3N0YXRpY192cG9ydChwaGJhKTsKKwogCXJldHVybiAwOwogCiBvdXRfZGlzYWJsZV9pbnRyOgpAQCAtNzYzNiwxOSArNzY2OCwxNyBAQAogbHBmY19wY2lfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKQogewogCWludCByYzsKLQl1aW50MTZfdCBkZXZfaWQ7CisJc3RydWN0IGxwZmNfc2xpX2ludGYgaW50ZjsKIAotCWlmIChwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfREVWSUNFX0lELCAmZGV2X2lkKSkKKwlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIExQRkNfU0xJUkVWX0NPTkZfV09SRCwgJmludGYud29yZDApKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXN3aXRjaCAoZGV2X2lkKSB7Ci0JY2FzZSBQQ0lfREVWSUNFX0lEX1RJR0VSU0hBUks6CisJaWYgKChiZl9nZXQobHBmY19zbGlfaW50Zl92YWxpZCwgJmludGYpID09IExQRkNfU0xJX0lOVEZfVkFMSUQpICYmCisJCShiZl9nZXQobHBmY19zbGlfaW50Zl9yZXYsICZpbnRmKSA9PSBMUEZDX1NMSVJFVl9DT05GX1NMSTQpKQogCQlyYyA9IGxwZmNfcGNpX3Byb2JlX29uZV9zNChwZGV2LCBwaWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgorCWVsc2UKIAkJcmMgPSBscGZjX3BjaV9wcm9iZV9vbmVfczMocGRldiwgcGlkKTsKLQkJYnJlYWs7Ci0JfQorCiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCmluZGV4IDM0MjM1NzEuLjFhYjQwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWJveC5jCkBAIC01Miw0OCArNTIsODUgQEAKICAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBkdW1waW5nIGxpc3Qgb2Ygc3RhdGljCiAgKiB2cG9ydHMgdG8gYmUgY3JlYXRlZC4KICAqKi8KLXZvaWQKK2ludAogbHBmY19kdW1wX3N0YXRpY192cG9ydChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iLAogCQl1aW50MTZfdCBvZmZzZXQpCiB7CiAJTUFJTEJPWF90ICptYjsKLQl2b2lkICpjdHg7CisJc3RydWN0IGxwZmNfZG1hYnVmICptcDsKIAogCW1iID0gJnBtYi0+dS5tYjsKLQljdHggPSBwbWItPmNvbnRleHQyOwogCiAJLyogU2V0dXAgdG8gZHVtcCB2cG9ydCBpbmZvIHJlZ2lvbiAqLwogCW1lbXNldChwbWIsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKIAltYi0+bWJ4Q29tbWFuZCA9IE1CWF9EVU1QX01FTU9SWTsKLQltYi0+dW4udmFyRG1wLmN2ID0gMTsKIAltYi0+dW4udmFyRG1wLnR5cGUgPSBETVBfTlZfUEFSQU1TOwogCW1iLT51bi52YXJEbXAuZW50cnlfaW5kZXggPSBvZmZzZXQ7CiAJbWItPnVuLnZhckRtcC5yZWdpb25faWQgPSBETVBfUkVHSU9OX1ZQT1JUOwotCW1iLT51bi52YXJEbXAud29yZF9jbnQgPSBETVBfUlNQX1NJWkUvc2l6ZW9mKHVpbnQzMl90KTsKLQltYi0+dW4udmFyRG1wLmNvID0gMDsKLQltYi0+dW4udmFyRG1wLnJlc3Bfb2Zmc2V0ID0gMDsKLQlwbWItPmNvbnRleHQyID0gY3R4OwogCW1iLT5tYnhPd25lciA9IE9XTl9IT1NUOwogCi0JcmV0dXJuOworCS8qIEZvciBTTEkzIEhCQXMgZGF0YSBpcyBlbWJlZGRlZCBpbiBtYWlsYm94ICovCisJaWYgKHBoYmEtPnNsaV9yZXYgIT0gTFBGQ19TTElfUkVWNCkgeworCQltYi0+dW4udmFyRG1wLmN2ID0gMTsKKwkJbWItPnVuLnZhckRtcC53b3JkX2NudCA9IERNUF9SU1BfU0laRS9zaXplb2YodWludDMyX3QpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGb3IgU0xJNCBIQkFzIGRyaXZlciBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSAqLworCW1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxwZmNfZG1hYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1wKQorCQltcC0+dmlydCA9IGxwZmNfbWJ1Zl9hbGxvYyhwaGJhLCAwLCAmbXAtPnBoeXMpOworCisJaWYgKCFtcCB8fCAhbXAtPnZpcnQpIHsKKwkJa2ZyZWUobXApOworCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YLAorCQkJIjI2MDUgbHBmY19kdW1wX3N0YXRpY192cG9ydDogbWVtb3J5IgorCQkJIiBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAxOworCX0KKwltZW1zZXQobXAtPnZpcnQsIDAsIExQRkNfQlBMX1NJWkUpOworCUlOSVRfTElTVF9IRUFEKCZtcC0+bGlzdCk7CisJLyogc2F2ZSBhZGRyZXNzIGZvciBjb21wbGV0aW9uICovCisJcG1iLT5jb250ZXh0MiA9ICh1aW50OF90ICopIG1wOworCW1iLT51bi52YXJXb3Jkc1szXSA9IHB1dFBhZGRyTG93KG1wLT5waHlzKTsKKwltYi0+dW4udmFyV29yZHNbNF0gPSBwdXRQYWRkckhpZ2gobXAtPnBoeXMpOworCW1iLT51bi52YXJEbXAuc2xpNF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHN0YXRpY192cG9ydF9pbmZvKTsKKworCXJldHVybiAwOwogfQogCiAvKioKLSAqIGxwZmNfZHVtcF9tZW0gLSBQcmVwYXJlIGEgbWFpbGJveCBjb21tYW5kIGZvciByZXRyaWV2aW5nIEhCQSdzIFZQRCBtZW1vcnkKKyAqIGxwZmNfZG93bl9saW5rIC0gQnJpbmcgZG93biBIQkFzIGxpbmsuCiAgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KICAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCi0gKiBAb2Zmc2V0OiBvZmZzZXQgZm9yIGR1bXBpbmcgVlBEIG1lbW9yeSBtYWlsYm94IGNvbW1hbmQuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGEgbWFpbGJveCBjb21tYW5kIHRvIGJyaW5nIGRvd24gSEJBIGxpbmsuCisgKiovCit2b2lkCitscGZjX2Rvd25fbGluayhzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIExQRkNfTUJPWFFfdCAqcG1iKQoreworCU1BSUxCT1hfdCAqbWI7CisJbWVtc2V0KHBtYiwgMCwgc2l6ZW9mKExQRkNfTUJPWFFfdCkpOworCW1iID0gJnBtYi0+dS5tYjsKKwltYi0+bWJ4Q29tbWFuZCA9IE1CWF9ET1dOX0xJTks7CisJbWItPm1ieE93bmVyID0gT1dOX0hPU1Q7Cit9CisKKy8qKgorICogbHBmY19kdW1wX21lbSAtIFByZXBhcmUgYSBtYWlsYm94IGNvbW1hbmQgZm9yIHJlYWRpbmcgYSByZWdpb24uCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBwbWI6IHBvaW50ZXIgdG8gdGhlIGRyaXZlciBpbnRlcm5hbCBxdWV1ZSBlbGVtZW50IGZvciBtYWlsYm94IGNvbW1hbmQuCisgKiBAb2Zmc2V0OiBvZmZzZXQgaW50byB0aGUgcmVnaW9uLgorICogQHJlZ2lvbl9pZDogY29uZmlnIHJlZ2lvbiBpZC4KICAqCiAgKiBUaGUgZHVtcCBtYWlsYm94IGNvbW1hbmQgcHJvdmlkZXMgYSBtZXRob2QgZm9yIHRoZSBkZXZpY2UgZHJpdmVyIHRvIG9idGFpbgogICogdmFyaW91cyB0eXBlcyBvZiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBIQkEgZGV2aWNlLgogICoKLSAqIFRoaXMgcm91dGluZSBwcmVwYXJlcyB0aGUgbWFpbGJveCBjb21tYW5kIGZvciBkdW1waW5nIEhCQSBWaXRhbCBQcm9kdWN0Ci0gKiBEYXRhIChWUEQpIG1lbW9yeS4gVGhpcyBtYWlsYm94IGNvbW1hbmQgaXMgdG8gYmUgdXNlZCBmb3IgcmV0cmlldmluZyBhCi0gKiBwb3J0aW9uIChETVBfUlNQX1NJWkUgYnl0ZXMpIG9mIGEgSEJBJ3MgVlBEIGZyb20gdGhlIEhCQSBhdCBhbiBhZGRyZXNzCi0gKiBvZmZzZXQgc3BlY2lmaWVkIGJ5IHRoZSBvZmZzZXQgcGFyYW1ldGVyLgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIHRoZSBtYWlsYm94IGNvbW1hbmQgZm9yIGR1bXBpbmcgSEJBJ3MgY29uZmlnIHJlZ2lvbi4KICAqKi8KIHZvaWQKLWxwZmNfZHVtcF9tZW0oc3RydWN0IGxwZmNfaGJhICogcGhiYSwgTFBGQ19NQk9YUV90ICogcG1iLCB1aW50MTZfdCBvZmZzZXQpCitscGZjX2R1bXBfbWVtKHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgTFBGQ19NQk9YUV90ICpwbWIsIHVpbnQxNl90IG9mZnNldCwKKwkJdWludDE2X3QgcmVnaW9uX2lkKQogewogCU1BSUxCT1hfdCAqbWI7CiAJdm9pZCAqY3R4OwpAQCAtMTA3LDcgKzE0NCw3IEBACiAJbWItPnVuLnZhckRtcC5jdiA9IDE7CiAJbWItPnVuLnZhckRtcC50eXBlID0gRE1QX05WX1BBUkFNUzsKIAltYi0+dW4udmFyRG1wLmVudHJ5X2luZGV4ID0gb2Zmc2V0OwotCW1iLT51bi52YXJEbXAucmVnaW9uX2lkID0gRE1QX1JFR0lPTl9WUEQ7CisJbWItPnVuLnZhckRtcC5yZWdpb25faWQgPSByZWdpb25faWQ7CiAJbWItPnVuLnZhckRtcC53b3JkX2NudCA9IChETVBfUlNQX1NJWkUgLyBzaXplb2YgKHVpbnQzMl90KSk7CiAJbWItPnVuLnZhckRtcC5jbyA9IDA7CiAJbWItPnVuLnZhckRtcC5yZXNwX29mZnNldCA9IDA7CkBAIC0xNzg5LDYgKzE4MjYsNyBAQAogCiAvKioKICAqIGxwZmNfaW5pdF92cGkgLSBJbml0aWFsaXplIHRoZSBJTklUX1ZQSSBtYWlsYm94IGNvbW1hbmQKKyAqIEBwaGJhOiBwb2ludGVyIHRvIHRoZSBoYmEgc3RydWN0dXJlIHRvIGluaXQgdGhlIFZQSSBmb3IuCiAgKiBAbWJveDogcG9pbnRlciB0byBscGZjIG1ib3ggY29tbWFuZCB0byBpbml0aWFsaXplLgogICogQHZwaTogVlBJIHRvIGJlIGluaXRpYWxpemVkLgogICoKQEAgLTE3OTksMTEgKzE4MzcsMTQgQEAKICAqIHN1Y2Nlc3NmdWwgdmlydHVhbCBOUG9ydCBsb2dpbi4KICAqKi8KIHZvaWQKLWxwZmNfaW5pdF92cGkoc3RydWN0IGxwZmNNYm94cSAqbWJveCwgdWludDE2X3QgdnBpKQorbHBmY19pbml0X3ZwaShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIHN0cnVjdCBscGZjTWJveHEgKm1ib3gsIHVpbnQxNl90IHZwaSkKIHsKIAltZW1zZXQobWJveCwgMCwgc2l6ZW9mKCptYm94KSk7CiAJYmZfc2V0KGxwZmNfbXFlX2NvbW1hbmQsICZtYm94LT51Lm1xZSwgTUJYX0lOSVRfVlBJKTsKLQliZl9zZXQobHBmY19pbml0X3ZwaV92cGksICZtYm94LT51Lm1xZS51bi5pbml0X3ZwaSwgdnBpKTsKKwliZl9zZXQobHBmY19pbml0X3ZwaV92cGksICZtYm94LT51Lm1xZS51bi5pbml0X3ZwaSwKKwkgICAgICAgdnBpICsgcGhiYS0+dnBpX2Jhc2UpOworCWJmX3NldChscGZjX2luaXRfdnBpX3ZmaSwgJm1ib3gtPnUubXFlLnVuLmluaXRfdnBpLAorCSAgICAgICBwaGJhLT5wcG9ydC0+dmZpICsgcGhiYS0+dmZpX2Jhc2UpOwogfQogCiAvKioKQEAgLTE4NTIsNyArMTg5Myw3IEBACiAJCS8qIGR1bXBfZmNvZV9wYXJhbSBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5ICovCiAJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX1dBUk5JTkcsIExPR19NQk9YLAogCQkJIjI1NjkgbHBmY19kdW1wX2Zjb2VfcGFyYW06IG1lbW9yeSIKLQkJCSIgYWxsb2NhdGlvbiBmYWlsZWQgXG4iKTsKKwkJCSIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTE4NjQsOCArMTkwNSw4IEBACiAKIAltYi0+bWJ4Q29tbWFuZCA9IE1CWF9EVU1QX01FTU9SWTsKIAltYi0+dW4udmFyRG1wLnR5cGUgPSBETVBfTlZfUEFSQU1TOwotCW1iLT51bi52YXJEbXAucmVnaW9uX2lkID0gRE1QX1JFR0lPTl9GQ09FUEFSQU07Ci0JbWItPnVuLnZhckRtcC5zbGk0X2xlbmd0aCA9IERNUF9GQ09FUEFSQU1fUkdOX1NJWkU7CisJbWItPnVuLnZhckRtcC5yZWdpb25faWQgPSBETVBfUkVHSU9OXzIzOworCW1iLT51bi52YXJEbXAuc2xpNF9sZW5ndGggPSBETVBfUkdOMjNfU0laRTsKIAltYi0+dW4udmFyV29yZHNbM10gPSBwdXRQYWRkckxvdyhtcC0+cGh5cyk7CiAJbWItPnVuLnZhcldvcmRzWzRdID0gcHV0UGFkZHJIaWdoKG1wLT5waHlzKTsKIAlyZXR1cm4gMDsKQEAgLTE5MzgsOSArMTk3OSw3IEBACiAJbWVtc2V0KG1ib3gsIDAsIHNpemVvZigqbWJveCkpOwogCXJlc3VtZV9ycGkgPSAmbWJveC0+dS5tcWUudW4ucmVzdW1lX3JwaTsKIAliZl9zZXQobHBmY19tcWVfY29tbWFuZCwgJm1ib3gtPnUubXFlLCBNQlhfUkVTVU1FX1JQSSk7Ci0JYmZfc2V0KGxwZmNfcmVzdW1lX3JwaV9ycGksIHJlc3VtZV9ycGksIG5kbHAtPm5scF9ycGkpOwotCWJmX3NldChscGZjX3Jlc3VtZV9ycGlfdnBpLCByZXN1bWVfcnBpLAotCSAgICAgICBuZGxwLT52cG9ydC0+dnBpICsgbmRscC0+dnBvcnQtPnBoYmEtPnZwaV9iYXNlKTsKLQliZl9zZXQobHBmY19yZXN1bWVfcnBpX3ZmaSwgcmVzdW1lX3JwaSwKLQkgICAgICAgbmRscC0+dnBvcnQtPnZmaSArIG5kbHAtPnZwb3J0LT5waGJhLT52ZmlfYmFzZSk7CisJYmZfc2V0KGxwZmNfcmVzdW1lX3JwaV9pbmRleCwgcmVzdW1lX3JwaSwgbmRscC0+bmxwX3JwaSk7CisJYmZfc2V0KGxwZmNfcmVzdW1lX3JwaV9paSwgcmVzdW1lX3JwaSwgUkVTVU1FX0lOREVYX1JQSSk7CisJcmVzdW1lX3JwaS0+ZXZlbnRfdGFnID0gbmRscC0+cGhiYS0+ZmNfZXZlbnRUYWc7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tZW0uYwppbmRleCBlMTk4YzkxLi5hMWI2ZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21lbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbWVtLmMKQEAgLTExMCwxNyArMTEwLDI4IEBACiAJCQkJCQlzaXplb2Yoc3RydWN0IGxwZmNfbm9kZWxpc3QpKTsKIAlpZiAoIXBoYmEtPm5scF9tZW1fcG9vbCkKIAkJZ290byBmYWlsX2ZyZWVfbWJveF9wb29sOwotCXBoYmEtPmxwZmNfaHJiX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImxwZmNfaHJiX3Bvb2wiLAorCisJaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgeworCQlwaGJhLT5scGZjX2hyYl9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJscGZjX2hyYl9wb29sIiwKIAkJCQkJICAgICAgcGhiYS0+cGNpZGV2LAogCQkJCQkgICAgICBMUEZDX0hEUl9CVUZfU0laRSwgYWxpZ24sIDApOwotCWlmICghcGhiYS0+bHBmY19ocmJfcG9vbCkKLQkJZ290byBmYWlsX2ZyZWVfbmxwX21lbV9wb29sOwotCXBoYmEtPmxwZmNfZHJiX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImxwZmNfZHJiX3Bvb2wiLAorCQlpZiAoIXBoYmEtPmxwZmNfaHJiX3Bvb2wpCisJCQlnb3RvIGZhaWxfZnJlZV9ubHBfbWVtX3Bvb2w7CisKKwkJcGhiYS0+bHBmY19kcmJfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibHBmY19kcmJfcG9vbCIsCiAJCQkJCSAgICAgIHBoYmEtPnBjaWRldiwKIAkJCQkJICAgICAgTFBGQ19EQVRBX0JVRl9TSVpFLCBhbGlnbiwgMCk7Ci0JaWYgKCFwaGJhLT5scGZjX2RyYl9wb29sKQotCQlnb3RvIGZhaWxfZnJlZV9oYnFfcG9vbDsKLQorCQlpZiAoIXBoYmEtPmxwZmNfZHJiX3Bvb2wpCisJCQlnb3RvIGZhaWxfZnJlZV9ocmJfcG9vbDsKKwkJcGhiYS0+bHBmY19oYnFfcG9vbCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJcGhiYS0+bHBmY19oYnFfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibHBmY19oYnFfcG9vbCIsCisJCQlwaGJhLT5wY2lkZXYsIExQRkNfQlBMX1NJWkUsIGFsaWduLCAwKTsKKwkJaWYgKCFwaGJhLT5scGZjX2hicV9wb29sKQorCQkJZ290byBmYWlsX2ZyZWVfbmxwX21lbV9wb29sOworCQlwaGJhLT5scGZjX2hyYl9wb29sID0gTlVMTDsKKwkJcGhiYS0+bHBmY19kcmJfcG9vbCA9IE5VTEw7CisJfQogCS8qIHZwaSB6ZXJvIGlzIHJlc2VydmVkIGZvciB0aGUgcGh5c2ljYWwgcG9ydCBzbyBhZGQgMSB0byBtYXggKi8KIAlsb25ncyA9ICgocGhiYS0+bWF4X3ZwaSArIDEpICsgQklUU19QRVJfTE9ORyAtIDEpIC8gQklUU19QRVJfTE9ORzsKIAlwaGJhLT52cGlfYm1hc2sgPSBremFsbG9jKGxvbmdzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfS0VSTkVMKTsKQEAgLTEzMiw3ICsxNDMsNyBAQAogIGZhaWxfZnJlZV9kYnFfcG9vbDoKIAlwY2lfcG9vbF9kZXN0cm95KHBoYmEtPmxwZmNfZHJiX3Bvb2wpOwogCXBoYmEtPmxwZmNfZHJiX3Bvb2wgPSBOVUxMOwotIGZhaWxfZnJlZV9oYnFfcG9vbDoKKyBmYWlsX2ZyZWVfaHJiX3Bvb2w6CiAJcGNpX3Bvb2xfZGVzdHJveShwaGJhLT5scGZjX2hyYl9wb29sKTsKIAlwaGJhLT5scGZjX2hyYl9wb29sID0gTlVMTDsKICBmYWlsX2ZyZWVfbmxwX21lbV9wb29sOgpAQCAtMTc2LDExICsxODcsMTcgQEAKIAogCS8qIEZyZWUgSEJRIHBvb2xzICovCiAJbHBmY19zbGlfaGJxYnVmX2ZyZWVfYWxsKHBoYmEpOwotCXBjaV9wb29sX2Rlc3Ryb3kocGhiYS0+bHBmY19kcmJfcG9vbCk7CisJaWYgKHBoYmEtPmxwZmNfZHJiX3Bvb2wpCisJCXBjaV9wb29sX2Rlc3Ryb3kocGhiYS0+bHBmY19kcmJfcG9vbCk7CiAJcGhiYS0+bHBmY19kcmJfcG9vbCA9IE5VTEw7Ci0JcGNpX3Bvb2xfZGVzdHJveShwaGJhLT5scGZjX2hyYl9wb29sKTsKKwlpZiAocGhiYS0+bHBmY19ocmJfcG9vbCkKKwkJcGNpX3Bvb2xfZGVzdHJveShwaGJhLT5scGZjX2hyYl9wb29sKTsKIAlwaGJhLT5scGZjX2hyYl9wb29sID0gTlVMTDsKIAorCWlmIChwaGJhLT5scGZjX2hicV9wb29sKQorCQlwY2lfcG9vbF9kZXN0cm95KHBoYmEtPmxwZmNfaGJxX3Bvb2wpOworCXBoYmEtPmxwZmNfaGJxX3Bvb2wgPSBOVUxMOworCiAJLyogRnJlZSBOTFAgbWVtb3J5IHBvb2wgKi8KIAltZW1wb29sX2Rlc3Ryb3kocGhiYS0+bmxwX21lbV9wb29sKTsKIAlwaGJhLT5ubHBfbWVtX3Bvb2wgPSBOVUxMOwpAQCAtMzgwLDcgKzM5Nyw3IEBACiAJaWYgKCFoYnFicCkKIAkJcmV0dXJuIE5VTEw7CiAKLQloYnFicC0+ZGJ1Zi52aXJ0ID0gcGNpX3Bvb2xfYWxsb2MocGhiYS0+bHBmY19ocmJfcG9vbCwgR0ZQX0tFUk5FTCwKKwloYnFicC0+ZGJ1Zi52aXJ0ID0gcGNpX3Bvb2xfYWxsb2MocGhiYS0+bHBmY19oYnFfcG9vbCwgR0ZQX0tFUk5FTCwKIAkJCQkJICAmaGJxYnAtPmRidWYucGh5cyk7CiAJaWYgKCFoYnFicC0+ZGJ1Zi52aXJ0KSB7CiAJCWtmcmVlKGhicWJwKTsKQEAgLTQwNSw3ICs0MjIsNyBAQAogdm9pZAogbHBmY19lbHNfaGJxX2ZyZWUoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgaGJxX2RtYWJ1ZiAqaGJxYnApCiB7Ci0JcGNpX3Bvb2xfZnJlZShwaGJhLT5scGZjX2hyYl9wb29sLCBoYnFicC0+ZGJ1Zi52aXJ0LCBoYnFicC0+ZGJ1Zi5waHlzKTsKKwlwY2lfcG9vbF9mcmVlKHBoYmEtPmxwZmNfaGJxX3Bvb2wsIGhicWJwLT5kYnVmLnZpcnQsIGhicWJwLT5kYnVmLnBoeXMpOwogCWtmcmVlKGhicWJwKTsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25sLmgKaW5kZXggMjdkMWE4OC4uZDY1NWVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ubC5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbmwuaApAQCAtMTc3LDMgKzE3NywyMyBAQAogCXVpbnQzMl90IGRhdGE7CiB9OwogCisvKiBic2cgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTFBGQ19CU0dfVkVORE9SX1NFVF9DVF9FVkVOVAkxCisjZGVmaW5lIExQRkNfQlNHX1ZFTkRPUl9HRVRfQ1RfRVZFTlQJMgorCitzdHJ1Y3Qgc2V0X2N0X2V2ZW50IHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IGV2X3JlcV9pZDsKKwl1aW50MzJfdCBldl9yZWdfaWQ7Cit9OworCitzdHJ1Y3QgZ2V0X2N0X2V2ZW50IHsKKwl1aW50MzJfdCBjb21tYW5kOworCXVpbnQzMl90IGV2X3JlZ19pZDsKKwl1aW50MzJfdCBldl9yZXFfaWQ7Cit9OworCitzdHJ1Y3QgZ2V0X2N0X2V2ZW50X3JlcGx5IHsKKwl1aW50MzJfdCBpbW1lZF9kYXRhOworCXVpbnQzMl90IHR5cGU7Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwppbmRleCBkYTU5YzRmLi42MWQwODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYwpAQCAtMjE0Miw3ICsyMTQyLDcgQEAKIAl9IGVsc2UgaWYgKHJlc3BfaW5mbyAmIFJFU0lEX09WRVIpIHsKIAkJbHBmY19wcmludGZfdmxvZyh2cG9ydCwgS0VSTl9XQVJOSU5HLCBMT0dfRkNQLAogCQkJCSAiOTAyOCBGQ1AgY29tbWFuZCB4JXggcmVzaWR1YWwgb3ZlcnJ1biBlcnJvci4gIgotCQkJCSAiRGF0YTogeCV4IHgleCBcbiIsIGNtbmQtPmNtbmRbMF0sCisJCQkJICJEYXRhOiB4JXggeCV4XG4iLCBjbW5kLT5jbW5kWzBdLAogCQkJCSBzY3NpX2J1ZmZsZW4oY21uZCksIHNjc2lfZ2V0X3Jlc2lkKGNtbmQpKTsKIAkJaG9zdF9zdGF0dXMgPSBESURfRVJST1I7CiAKQEAgLTI4NDMsNyArMjg0Myw3IEBACiAJCQkJZGlmX29wX3N0cltzY3NpX2dldF9wcm90X29wKGNtbmQpXSk7CiAJCWxwZmNfcHJpbnRmX3Zsb2codnBvcnQsIEtFUk5fV0FSTklORywgTE9HX0JHLAogCQkJCSI5MDM0IEJMS0dSRDogQ0RCOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggIgotCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggXG4iLAorCQkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJCQkJY21uZC0+Y21uZFswXSwgY21uZC0+Y21uZFsxXSwgY21uZC0+Y21uZFsyXSwKIAkJCQljbW5kLT5jbW5kWzNdLCBjbW5kLT5jbW5kWzRdLCBjbW5kLT5jbW5kWzVdLAogCQkJCWNtbmQtPmNtbmRbNl0sIGNtbmQtPmNtbmRbN10sIGNtbmQtPmNtbmRbOF0sCkBAIC0yODcxLDcgKzI4NzEsNyBAQAogCQkJCWRpZl9vcF9zdHJbc2NzaV9nZXRfcHJvdF9vcChjbW5kKV0pOwogCQlscGZjX3ByaW50Zl92bG9nKHZwb3J0LCBLRVJOX1dBUk5JTkcsIExPR19CRywKIAkJCQkgIjkwMzkgQkxLR1JEOiBDREI6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAiCi0JCQkJICIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggXG4iLAorCQkJCSAiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCQkJCSBjbW5kLT5jbW5kWzBdLCBjbW5kLT5jbW5kWzFdLCBjbW5kLT5jbW5kWzJdLAogCQkJCSBjbW5kLT5jbW5kWzNdLCBjbW5kLT5jbW5kWzRdLCBjbW5kLT5jbW5kWzVdLAogCQkJCSBjbW5kLT5jbW5kWzZdLCBjbW5kLT5jbW5kWzddLCBjbW5kLT5jbW5kWzhdLApAQCAtMzU4NCw2ICszNTg0LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRU5BQkxFX0NMVVNURVJJTkcsCiAJLnNob3N0X2F0dHJzCQk9IGxwZmNfaGJhX2F0dHJzLAogCS5tYXhfc2VjdG9ycwkJPSAweEZGRkYsCisJLnZlbmRvcl9pZAkJPSBMUEZDX05MX1ZFTkRPUl9JRCwKIH07CiAKIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgbHBmY192cG9ydF90ZW1wbGF0ZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IGFjYzQzYjAuLjQzY2JlMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtNDEzOSw3ICs0MTM5LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRhdGFfbGVuZ3RoID0gbXFlLT51bi5tYl93b3Jkc1s1XTsKLQlpZiAoZGF0YV9sZW5ndGggPiBETVBfRkNPRVBBUkFNX1JHTl9TSVpFKSB7CisJaWYgKGRhdGFfbGVuZ3RoID4gRE1QX1JHTjIzX1NJWkUpIHsKIAkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbXAtPnZpcnQsIG1wLT5waHlzKTsKIAkJa2ZyZWUobXApOwogCQlyZXR1cm4gLUVJTzsKQEAgLTQzMDQsNyArNDMwNCw3IEBACiAJICovCiAJaWYgKGxwZmNfc2xpNF9yZWFkX2Zjb2VfcGFyYW1zKHBoYmEsIG1ib3hxKSkKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfTUJPWCB8IExPR19JTklULAotCQkJIjI1NzAgRmFpbGVkIHRvIHJlYWQgRkNvRSBwYXJhbWV0ZXJzIFxuIik7CisJCQkiMjU3MCBGYWlsZWQgdG8gcmVhZCBGQ29FIHBhcmFtZXRlcnNcbiIpOwogCiAJLyogSXNzdWUgUkVBRF9SRVYgdG8gY29sbGVjdCB2cGQgYW5kIEZXIGluZm9ybWF0aW9uLiAqLwogCXZwZF9zaXplID0gUEFHRV9TSVpFOwpAQCAtNDUyMiwxMiArNDUyMiw4IEBACiAJbHBmY19zbGk0X3JiX3NldHVwKHBoYmEpOwogCiAJLyogU3RhcnQgdGhlIEVMUyB3YXRjaGRvZyB0aW1lciAqLwotCS8qCi0JICogVGhlIGRyaXZlciBmb3IgU0xJNCBpcyBub3QgeWV0IHJlYWR5IHRvIHByb2Nlc3MgdGltZW91dHMKLQkgKiBvciBpbnRlcnJ1cHRzLiAgT25jZSBpdCBpcywgdGhlIGNvbW1lbnQgYmFycyBjYW4gYmUgcmVtb3ZlZC4KLQkgKi8KLQkvKiBtb2RfdGltZXIoJnZwb3J0LT5lbHNfdG1vZnVuYywKLQkgKiAgICAgICAgICAgamlmZmllcyArIEhaICogKHBoYmEtPmZjX3JhdG92KjIpKTsgKi8KKwltb2RfdGltZXIoJnZwb3J0LT5lbHNfdG1vZnVuYywKKwkJICBqaWZmaWVzICsgSFogKiAocGhiYS0+ZmNfcmF0b3YgKiAyKSk7CiAKIAkvKiBTdGFydCBoZWFydCBiZWF0IHRpbWVyICovCiAJbW9kX3RpbWVyKCZwaGJhLT5oYl90bW9mdW5jLApAQCAtNDcwNiwxMyArNDcwMiwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmhiYWxvY2ssIGRydnJfZmxhZyk7CiAJaWYgKCFwbWJveCkgeworCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOwogCQkvKiBwcm9jZXNzaW5nIG1ib3ggcXVldWUgZnJvbSBpbnRyX2hhbmRsZXIgKi8KIAkJaWYgKHVubGlrZWx5KHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTElfQVNZTkNfTUJYX0JMSykpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmhiYWxvY2ssIGRydnJfZmxhZyk7CiAJCQlyZXR1cm4gTUJYX1NVQ0NFU1M7CiAJCX0KIAkJcHJvY2Vzc2luZ19xdWV1ZSA9IDE7Ci0JCXBoYmEtPnNsaS5zbGlfZmxhZyAmPSB+TFBGQ19TTElfTUJPWF9BQ1RJVkU7CiAJCXBtYm94ID0gbHBmY19tYm94X2dldChwaGJhKTsKIAkJaWYgKCFwbWJveCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aGJhbG9jaywgZHJ2cl9mbGFnKTsKQEAgLTUyNzksNiArNTI3NSwxOCBAQAogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCWludCByYzsKIAorCXJjID0gbHBmY19tYm94X2Rldl9jaGVjayhwaGJhKTsKKwlpZiAodW5saWtlbHkocmMpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX01CT1ggfCBMT0dfU0xJLAorCQkJCSIoJWQpOjI1NDQgTWFpbGJveCBjb21tYW5kIHgleCAoeCV4KSAiCisJCQkJImNhbm5vdCBpc3N1ZSBEYXRhOiB4JXggeCV4XG4iLAorCQkJCW1ib3hxLT52cG9ydCA/IG1ib3hxLT52cG9ydC0+dnBpIDogMCwKKwkJCQltYm94cS0+dS5tYi5tYnhDb21tYW5kLAorCQkJCWxwZmNfc2xpNF9tYm94X29wY29kZV9nZXQocGhiYSwgbWJveHEpLAorCQkJCXBzbGktPnNsaV9mbGFnLCBmbGFnKTsKKwkJZ290byBvdXRfbm90X2ZpbmlzaGVkOworCX0KKwogCS8qIERldGVjdCBwb2xsaW5nIG1vZGUgYW5kIGp1bXAgdG8gYSBoYW5kbGVyICovCiAJaWYgKCFwaGJhLT5zbGk0X2hiYS5pbnRyX2VuYWJsZSkgewogCQlpZiAoZmxhZyA9PSBNQlhfUE9MTCkKQEAgLTUzMzgsMTcgKzUzNDYsNiBAQAogCQkJCXBzbGktPnNsaV9mbGFnLCBmbGFnKTsKIAkJZ290byBvdXRfbm90X2ZpbmlzaGVkOwogCX0KLQlyYyA9IGxwZmNfbWJveF9kZXZfY2hlY2socGhiYSk7Ci0JaWYgKHVubGlrZWx5KHJjKSkgewotCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsIExPR19NQk9YIHwgTE9HX1NMSSwKLQkJCQkiKCVkKToyNTQ0IE1haWxib3ggY29tbWFuZCB4JXggKHgleCkgIgotCQkJCSJjYW5ub3QgaXNzdWUgRGF0YTogeCV4IHgleFxuIiwKLQkJCQltYm94cS0+dnBvcnQgPyBtYm94cS0+dnBvcnQtPnZwaSA6IDAsCi0JCQkJbWJveHEtPnUubWIubWJ4Q29tbWFuZCwKLQkJCQlscGZjX3NsaTRfbWJveF9vcGNvZGVfZ2V0KHBoYmEsIG1ib3hxKSwKLQkJCQlwc2xpLT5zbGlfZmxhZywgZmxhZyk7Ci0JCWdvdG8gb3V0X25vdF9maW5pc2hlZDsKLQl9CiAKIAkvKiBQdXQgdGhlIG1haWxib3ggY29tbWFuZCB0byB0aGUgZHJpdmVyIGludGVybmFsIEZJRk8gKi8KIAlwc2xpLT5zbGlzdGF0Lm1ib3hfYnVzeSsrOwpAQCAtNTgxNywxOSArNTgxNCwyMSBAQAogLyoqCiAgKiBscGZjX3NsaTRfc2NtZF90b193cWlkeF9kaXN0ciAtIHNjc2kgY29tbWFuZCB0byBTTEk0IFdRIGluZGV4IGRpc3RyaWJ1dGlvbgogICogQHBoYmE6IFBvaW50ZXIgdG8gSEJBIGNvbnRleHQgb2JqZWN0LgotICogQHBpb2NiOiBQb2ludGVyIHRvIGNvbW1hbmQgaW9jYi4KICAqCiAgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgYSByb3VuZCByb2JpbiBTQ1NJIGNvbW1hbmQgdG8gU0xJNCBGQ1AgV1EgaW5kZXgKLSAqIGRpc3RyaWJ1dGlvbi4KKyAqIGRpc3RyaWJ1dGlvbi4gIFRoaXMgaXMgY2FsbGVkIGJ5IF9fbHBmY19zbGlfaXNzdWVfaW9jYl9zNCgpIHdpdGggdGhlIGhiYWxvY2sKKyAqIGhlbGQuCiAgKgogICogUmV0dXJuOiBpbmRleCBpbnRvIFNMSTQgZmFzdC1wYXRoIEZDUCBxdWV1ZSBpbmRleC4KICAqKi8KIHN0YXRpYyB1aW50MzJfdAotbHBmY19zbGk0X3NjbWRfdG9fd3FpZHhfZGlzdHIoc3RydWN0IGxwZmNfaGJhICpwaGJhLCBzdHJ1Y3QgbHBmY19pb2NicSAqcGlvY2IpCitscGZjX3NsaTRfc2NtZF90b193cWlkeF9kaXN0cihzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCiB7Ci0Jc3RhdGljIHVpbnQzMl90IGZjcF9xaWR4OworCSsrcGhiYS0+ZmNwX3FpZHg7CisJaWYgKHBoYmEtPmZjcF9xaWR4ID49IHBoYmEtPmNmZ19mY3Bfd3FfY291bnQpCisJCXBoYmEtPmZjcF9xaWR4ID0gMDsKIAotCXJldHVybiBmY3BfcWlkeCsrICUgcGhiYS0+Y2ZnX2ZjcF93cV9jb3VudDsKKwlyZXR1cm4gcGhiYS0+ZmNwX3FpZHg7CiB9CiAKIC8qKgpAQCAtNjE1Niw3ICs2MTU1LDcgQEAKIAkJcmV0dXJuIElPQ0JfRVJST1I7CiAKIAlpZiAocGlvY2ItPmlvY2JfZmxhZyAmICBMUEZDX0lPX0ZDUCkgewotCQlmY3Bfd3FpZHggPSBscGZjX3NsaTRfc2NtZF90b193cWlkeF9kaXN0cihwaGJhLCBwaW9jYik7CisJCWZjcF93cWlkeCA9IGxwZmNfc2xpNF9zY21kX3RvX3dxaWR4X2Rpc3RyKHBoYmEpOwogCQlpZiAobHBmY19zbGk0X3dxX3B1dChwaGJhLT5zbGk0X2hiYS5mY3Bfd3FbZmNwX3dxaWR4XSwgJndxZSkpCiAJCQlyZXR1cm4gSU9DQl9FUlJPUjsKIAl9IGVsc2UgewpAQCAtNjMyNyw3ICs2MzI2LDcgQEAKIAkJCUtFUk5fRVJSLAogCQkJTE9HX1NMSSwKIAkJCSIwMzQ2IFJpbmcgJWQgaGFuZGxlcjogdW5leHBlY3RlZCBBU1lOQ19TVEFUVVMiCi0JCQkiIGV2dF9jb2RlIDB4JXggXG4iCisJCQkiIGV2dF9jb2RlIDB4JXhcbiIKIAkJCSJXMCAgMHglMDh4IFcxICAweCUwOHggVzIgIDB4JTA4eCBXMyAgMHglMDh4XG4iCiAJCQkiVzQgIDB4JTA4eCBXNSAgMHglMDh4IFc2ICAweCUwOHggVzcgIDB4JTA4eFxuIgogCQkJIlc4ICAweCUwOHggVzkgIDB4JTA4eCBXMTAgMHglMDh4IFcxMSAweCUwOHhcbiIKQEAgLTY3OTAsNiArNjc4OSwzMyBAQAogCiAKIC8qKgorICogbHBmY19zbGlfYmVtZW1fYmNvcHkgLSBTTEkgbWVtb3J5IGNvcHkgZnVuY3Rpb24KKyAqIEBzcmNwOiBTb3VyY2UgbWVtb3J5IHBvaW50ZXIuCisgKiBAZGVzdHA6IERlc3RpbmF0aW9uIG1lbW9yeSBwb2ludGVyLgorICogQGNudDogTnVtYmVyIG9mIHdvcmRzIHJlcXVpcmVkIHRvIGJlIGNvcGllZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGNvcHlpbmcgZGF0YSBiZXR3ZWVuIGEgZGF0YSBzdHJ1Y3R1cmUKKyAqIHdpdGggYmlnIGVuZGlhbiByZXByZXNlbnRhdGlvbiB0byBsb2NhbCBlbmRpYW5uZXNzLgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NrLgorICoqLwordm9pZAorbHBmY19zbGlfYmVtZW1fYmNvcHkodm9pZCAqc3JjcCwgdm9pZCAqZGVzdHAsIHVpbnQzMl90IGNudCkKK3sKKwl1aW50MzJfdCAqc3JjID0gc3JjcDsKKwl1aW50MzJfdCAqZGVzdCA9IGRlc3RwOworCXVpbnQzMl90IGxkYXRhOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IChpbnQpY250OyBpICs9IHNpemVvZih1aW50MzJfdCkpIHsKKwkJbGRhdGEgPSAqc3JjOworCQlsZGF0YSA9IGJlMzJfdG9fY3B1KGxkYXRhKTsKKwkJKmRlc3QgPSBsZGF0YTsKKwkJc3JjKys7CisJCWRlc3QrKzsKKwl9Cit9CisKKy8qKgogICogbHBmY19zbGlfcmluZ3Bvc3RidWZfcHV0IC0gRnVuY3Rpb24gdG8gYWRkIGEgYnVmZmVyIHRvIHBvc3RidWZxCiAgKiBAcGhiYTogUG9pbnRlciB0byBIQkEgY29udGV4dCBvYmplY3QuCiAgKiBAcHJpbmc6IFBvaW50ZXIgdG8gZHJpdmVyIFNMSSByaW5nIG9iamVjdC4KQEAgLTc2NzgsMTIgKzc3MDQsNiBAQAogCQkJCQkib25saW5lMF9yZWc9MHgleCwgb25saW5lMV9yZWc9MHgleFxuIiwKIAkJCQkJdWVycl9zdGFfbG8sIHVlcnJfc3RhX2hpLAogCQkJCQlvbmxucmVnMCwgb25sbnJlZzEpOwotCQkJLyogVEVNUDogYXMgdGhlIGRyaXZlciBlcnJvciByZWNvdmVyIGxvZ2ljIGlzIG5vdAotCQkJICogZnVsbHkgZGV2ZWxvcGVkLCB3ZSBqdXN0IGxvZyB0aGUgZXJyb3IgbWVzc2FnZQotCQkJICogYW5kIHRoZSBkZXZpY2UgZXJyb3IgYXR0ZW50aW9uIGFjdGlvbiBpcyBub3cKLQkJCSAqIHRlbXBvcmFyaWx5IGRpc2FibGVkLgotCQkJICovCi0JCQlyZXR1cm4gMDsKIAkJCXBoYmEtPndvcmtfc3RhdHVzWzBdID0gdWVycl9zdGFfbG87CiAJCQlwaGJhLT53b3JrX3N0YXR1c1sxXSA9IHVlcnJfc3RhX2hpOwogCQkJLyogU2V0IHRoZSBkcml2ZXIgSEEgd29yayBiaXRtYXAgKi8KQEAgLTk0OTksOCArOTUxOSw3IEBACiAJZXEtPmhvc3RfaW5kZXggPSAwOwogCWVxLT5oYmFfaW5kZXggPSAwOwogCi0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQotCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTk2MDQsMTAgKzk2MjMsOSBAQAogCWNxLT5xdWV1ZV9pZCA9IGJmX2dldChscGZjX21ieF9jcV9jcmVhdGVfcV9pZCwgJmNxX2NyZWF0ZS0+dS5yZXNwb25zZSk7CiAJY3EtPmhvc3RfaW5kZXggPSAwOwogCWNxLT5oYmFfaW5kZXggPSAwOwotb3V0OgogCi0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQotCQltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CitvdXQ6CisJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTk3MTIsOCArOTczMCw3IEBACiAJLyogbGluayB0aGUgbXEgb250byB0aGUgcGFyZW50IGNxIGNoaWxkIGxpc3QgKi8KIAlsaXN0X2FkZF90YWlsKCZtcS0+bGlzdCwgJmNxLT5jaGlsZF9saXN0KTsKIG91dDoKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKKwltZW1wb29sX2ZyZWUobWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtOTc5NSw4ICs5ODEyLDcgQEAKIAkvKiBsaW5rIHRoZSB3cSBvbnRvIHRoZSBwYXJlbnQgY3EgY2hpbGQgbGlzdCAqLwogCWxpc3RfYWRkX3RhaWwoJndxLT5saXN0LCAmY3EtPmNoaWxkX2xpc3QpOwogb3V0OgotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC05OTcwLDggKzk5ODYsNyBAQAogCWxpc3RfYWRkX3RhaWwoJmRycS0+bGlzdCwgJmNxLT5jaGlsZF9saXN0KTsKIAogb3V0OgotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCW1lbXBvb2xfZnJlZShtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMDAyNiw4ICsxMDA0MSw3IEBACiAKIAkvKiBSZW1vdmUgZXEgZnJvbSBhbnkgbGlzdCAqLwogCWxpc3RfZGVsX2luaXQoJmVxLT5saXN0KTsKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94LCBlcS0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKG1ib3gsIGVxLT5waGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMDA4MCw4ICsxMDA5NCw3IEBACiAJfQogCS8qIFJlbW92ZSBjcSBmcm9tIGFueSBsaXN0ICovCiAJbGlzdF9kZWxfaW5pdCgmY3EtPmxpc3QpOwotCWlmIChyYyAhPSBNQlhfVElNRU9VVCkKLQkJbWVtcG9vbF9mcmVlKG1ib3gsIGNxLT5waGJhLT5tYm94X21lbV9wb29sKTsKKwltZW1wb29sX2ZyZWUobWJveCwgY3EtPnBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMTM0LDggKzEwMTQ3LDcgQEAKIAl9CiAJLyogUmVtb3ZlIG1xIGZyb20gYW55IGxpc3QgKi8KIAlsaXN0X2RlbF9pbml0KCZtcS0+bGlzdCk7Ci0JaWYgKHJjICE9IE1CWF9USU1FT1VUKQotCQltZW1wb29sX2ZyZWUobWJveCwgbXEtPnBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCW1lbXBvb2xfZnJlZShtYm94LCBtcS0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTAxODcsOCArMTAxOTksNyBAQAogCX0KIAkvKiBSZW1vdmUgd3EgZnJvbSBhbnkgbGlzdCAqLwogCWxpc3RfZGVsX2luaXQoJndxLT5saXN0KTsKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94LCB3cS0+cGhiYS0+bWJveF9tZW1fcG9vbCk7CisJbWVtcG9vbF9mcmVlKG1ib3gsIHdxLT5waGJhLT5tYm94X21lbV9wb29sKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0xMDI1OCw4ICsxMDI2OSw3IEBACiAJfQogCWxpc3RfZGVsX2luaXQoJmhycS0+bGlzdCk7CiAJbGlzdF9kZWxfaW5pdCgmZHJxLT5saXN0KTsKLQlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCi0JCW1lbXBvb2xfZnJlZShtYm94LCBocnEtPnBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCW1lbXBvb2xfZnJlZShtYm94LCBocnEtPnBoYmEtPm1ib3hfbWVtX3Bvb2wpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwOTMzLDYgKzEwOTQzLDcgQEAKIAlmaXJzdF9pb2NicSA9IGxwZmNfc2xpX2dldF9pb2NicSh2cG9ydC0+cGhiYSk7CiAJaWYgKGZpcnN0X2lvY2JxKSB7CiAJCS8qIEluaXRpYWxpemUgdGhlIGZpcnN0IElPQ0IuICovCisJCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gPSAwOwogCQlmaXJzdF9pb2NicS0+aW9jYi51bHBTdGF0dXMgPSBJT1NUQVRfU1VDQ0VTUzsKIAkJZmlyc3RfaW9jYnEtPmlvY2IudWxwQ29tbWFuZCA9IENNRF9JT0NCX1JDVl9TRVE2NF9DWDsKIAkJZmlyc3RfaW9jYnEtPmlvY2IudWxwQ29udGV4dCA9IGJlMTZfdG9fY3B1KGZjX2hkci0+Zmhfb3hfaWQpOwpAQCAtMTA5NDUsNiArMTA5NTYsOCBAQAogCQlmaXJzdF9pb2NicS0+aW9jYi51bi5jb250NjRbMF0udHVzLmYuYmRlU2l6ZSA9CiAJCQkJCQkJTFBGQ19EQVRBX0JVRl9TSVpFOwogCQlmaXJzdF9pb2NicS0+aW9jYi51bi5yY3ZlbHMucmVtb3RlSUQgPSBzaWQ7CisJCWZpcnN0X2lvY2JxLT5pb2NiLnVuc2xpMy5yY3ZzbGkzLmFjY19sZW4gKz0KKwkJCQliZl9nZXQobHBmY19yY3FlX2xlbmd0aCwgJnNlcV9kbWFidWYtPnJjcWUpOwogCX0KIAlpb2NicSA9IGZpcnN0X2lvY2JxOwogCS8qCkBAIC0xMDk2MSw2ICsxMDk3NCw4IEBACiAJCQlpb2NicS0+aW9jYi51bHBCZGVDb3VudCsrOwogCQkJaW9jYnEtPmlvY2IudW5zbGkzLnJjdnNsaTMuYmRlMi50dXMuZi5iZGVTaXplID0KIAkJCQkJCQlMUEZDX0RBVEFfQlVGX1NJWkU7CisJCQlmaXJzdF9pb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5hY2NfbGVuICs9CisJCQkJYmZfZ2V0KGxwZmNfcmNxZV9sZW5ndGgsICZzZXFfZG1hYnVmLT5yY3FlKTsKIAkJfSBlbHNlIHsKIAkJCWlvY2JxID0gbHBmY19zbGlfZ2V0X2lvY2JxKHZwb3J0LT5waGJhKTsKIAkJCWlmICghaW9jYnEpIHsKQEAgLTEwOTc4LDYgKzEwOTkzLDggQEAKIAkJCWlvY2JxLT5pb2NiLnVscEJkZUNvdW50ID0gMTsKIAkJCWlvY2JxLT5pb2NiLnVuLmNvbnQ2NFswXS50dXMuZi5iZGVTaXplID0KIAkJCQkJCQlMUEZDX0RBVEFfQlVGX1NJWkU7CisJCQlmaXJzdF9pb2NicS0+aW9jYi51bnNsaTMucmN2c2xpMy5hY2NfbGVuICs9CisJCQkJYmZfZ2V0KGxwZmNfcmNxZV9sZW5ndGgsICZzZXFfZG1hYnVmLT5yY3FlKTsKIAkJCWlvY2JxLT5pb2NiLnVuLnJjdmVscy5yZW1vdGVJRCA9IHNpZDsKIAkJCWxpc3RfYWRkX3RhaWwoJmlvY2JxLT5saXN0LCAmZmlyc3RfaW9jYnEtPmxpc3QpOwogCQl9CkBAIC0xMTMyNCw3ICsxMTM0MSw3IEBACiAJbWJveHEgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCWlmICghbWJveHEpCiAJCXJldHVybiAtRU5PTUVNOwotCWxwZmNfaW5pdF92cGkobWJveHEsIHZwaSk7CisJbHBmY19pbml0X3ZwaShwaGJhLCBtYm94cSwgdnBpKTsKIAltYm94X3RtbyA9IGxwZmNfbWJveF90bW9fdmFsKHBoYmEsIE1CWF9JTklUX1ZQSSk7CiAJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgbWJveHEsIG1ib3hfdG1vKTsKIAlpZiAocmMgIT0gTUJYX1RJTUVPVVQpCkBAIC0xMTUxOSw2ICsxMTUzNiw3IEBACiAJdWludDMyX3QgYWxsb2NfbGVuLCByZXFfbGVuOwogCXN0cnVjdCBscGZjX21ieF9yZWFkX2ZjZl90YmwgKnJlYWRfZmNmOwogCisJcGhiYS0+ZmNvZV9ldmVudHRhZ19hdF9mY2Zfc2NhbiA9IHBoYmEtPmZjb2VfZXZlbnR0YWc7CiAJbWJveHEgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOwogCWlmICghbWJveHEpIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKQEAgLTExNTcwLDcgKzExNTg4LDE0MCBAQAogCWlmIChyYyA9PSBNQlhfTk9UX0ZJTklTSEVEKSB7CiAJCWxwZmNfc2xpNF9tYm94X2NtZF9mcmVlKHBoYmEsIG1ib3hxKTsKIAkJZXJyb3IgPSAtRUlPOwotCX0gZWxzZQorCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOworCQlwaGJhLT5oYmFfZmxhZyB8PSBGQ0ZfRElTQ19JTlBST0dSRVNTOworCQlzcGluX3VubG9ja19pcnEoJnBoYmEtPmhiYWxvY2spOwogCQllcnJvciA9IDA7CisJfQogCXJldHVybiBlcnJvcjsKIH0KKworLyoqCisgKiBscGZjX3NsaV9yZWFkX2xpbmtfc3RlIC0gUmVhZCByZWdpb24gMjMgdG8gZGVjaWRlIGlmIGxpbmsgaXMgZGlzYWJsZWQuCisgKiBAcGhiYTogcG9pbnRlciB0byBscGZjIGhiYSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWQgcmVnaW9uIDIzIGFuZCBwYXJzZSBUTFYgZm9yIHBvcnQgc3RhdHVzIHRvCisgKiBkZWNpZGUgaWYgdGhlIHVzZXIgZGlzYWxlZCB0aGUgcG9ydC4gSWYgdGhlIFRMViBpbmRpY2F0ZXMgdGhlCisgKiBwb3J0IGlzIGRpc2FibGVkLCB0aGUgaGJhX2ZsYWcgaXMgc2V0IGFjY29yZGluZ2x5LgorICoqLwordm9pZAorbHBmY19zbGlfcmVhZF9saW5rX3N0ZShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCit7CisJTFBGQ19NQk9YUV90ICpwbWIgPSBOVUxMOworCU1BSUxCT1hfdCAqbWI7CisJdWludDhfdCAqcmduMjNfZGF0YSA9IE5VTEw7CisJdWludDMyX3Qgb2Zmc2V0ID0gMCwgZGF0YV9zaXplLCBzdWJfdGx2X2xlbiwgdGx2X29mZnNldDsKKwlpbnQgcmM7CisKKwlwbWIgPSBtZW1wb29sX2FsbG9jKHBoYmEtPm1ib3hfbWVtX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghcG1iKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMjYwMCBscGZjX3NsaV9yZWFkX3NlcmRlc19wYXJhbSBmYWlsZWQgdG8iCisJCQkiIGFsbG9jYXRlIG1haWxib3ggbWVtb3J5XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCW1iID0gJnBtYi0+dS5tYjsKKworCS8qIEdldCBhZGFwdGVyIFJlZ2lvbiAyMyBkYXRhICovCisJcmduMjNfZGF0YSA9IGt6YWxsb2MoRE1QX1JHTjIzX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghcmduMjNfZGF0YSkKKwkJZ290byBvdXQ7CisKKwlkbyB7CisJCWxwZmNfZHVtcF9tZW0ocGhiYSwgcG1iLCBvZmZzZXQsIERNUF9SRUdJT05fMjMpOworCQlyYyA9IGxwZmNfc2xpX2lzc3VlX21ib3gocGhiYSwgcG1iLCBNQlhfUE9MTCk7CisKKwkJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfSU5JVCwKKwkJCQkiMjYwMSBscGZjX3NsaV9yZWFkX2xpbmtfc3RlIGZhaWxlZCB0byIKKwkJCQkiIHJlYWQgY29uZmlnIHJlZ2lvbiAyMyByYyAweCV4IFN0YXR1cyAweCV4XG4iLAorCQkJCXJjLCBtYi0+bWJ4U3RhdHVzKTsKKwkJCW1iLT51bi52YXJEbXAud29yZF9jbnQgPSAwOworCQl9CisJCS8qCisJCSAqIGR1bXAgbWVtIG1heSByZXR1cm4gYSB6ZXJvIHdoZW4gZmluaXNoZWQgb3Igd2UgZ290IGEKKwkJICogbWFpbGJveCBlcnJvciwgZWl0aGVyIHdheSB3ZSBhcmUgZG9uZS4KKwkJICovCisJCWlmIChtYi0+dW4udmFyRG1wLndvcmRfY250ID09IDApCisJCQlicmVhazsKKwkJaWYgKG1iLT51bi52YXJEbXAud29yZF9jbnQgPiBETVBfUkdOMjNfU0laRSAtIG9mZnNldCkKKwkJCW1iLT51bi52YXJEbXAud29yZF9jbnQgPSBETVBfUkdOMjNfU0laRSAtIG9mZnNldDsKKworCQlscGZjX3NsaV9wY2ltZW1fYmNvcHkoKCh1aW50OF90ICopbWIpICsgRE1QX1JTUF9PRkZTRVQsCisJCQlyZ24yM19kYXRhICsgb2Zmc2V0LAorCQkJbWItPnVuLnZhckRtcC53b3JkX2NudCk7CisJCW9mZnNldCArPSBtYi0+dW4udmFyRG1wLndvcmRfY250OworCX0gd2hpbGUgKG1iLT51bi52YXJEbXAud29yZF9jbnQgJiYgb2Zmc2V0IDwgRE1QX1JHTjIzX1NJWkUpOworCisJZGF0YV9zaXplID0gb2Zmc2V0OworCW9mZnNldCA9IDA7CisKKwlpZiAoIWRhdGFfc2l6ZSkKKwkJZ290byBvdXQ7CisKKwkvKiBDaGVjayB0aGUgcmVnaW9uIHNpZ25hdHVyZSBmaXJzdCAqLworCWlmIChtZW1jbXAoJnJnbjIzX2RhdGFbb2Zmc2V0XSwgTFBGQ19SRUdJT04yM19TSUdOQVRVUkUsIDQpKSB7CisJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0lOSVQsCisJCQkiMjYxOSBDb25maWcgcmVnaW9uIDIzIGhhcyBiYWQgc2lnbmF0dXJlXG4iKTsKKwkJCWdvdG8gb3V0OworCX0KKwlvZmZzZXQgKz0gNDsKKworCS8qIENoZWNrIHRoZSBkYXRhIHN0cnVjdHVyZSB2ZXJzaW9uICovCisJaWYgKHJnbjIzX2RhdGFbb2Zmc2V0XSAhPSBMUEZDX1JFR0lPTjIzX1ZFUlNJT04pIHsKKwkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfSU5JVCwKKwkJCSIyNjIwIENvbmZpZyByZWdpb24gMjMgaGFzIGJhZCB2ZXJzaW9uXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCW9mZnNldCArPSA0OworCisJLyogUGFyc2UgVExWIGVudHJpZXMgaW4gdGhlIHJlZ2lvbiAqLworCXdoaWxlIChvZmZzZXQgPCBkYXRhX3NpemUpIHsKKwkJaWYgKHJnbjIzX2RhdGFbb2Zmc2V0XSA9PSBMUEZDX1JFR0lPTjIzX0xBU1RfUkVDKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIElmIHRoZSBUTFYgaXMgbm90IGRyaXZlciBzcGVjaWZpYyBUTFYgb3IgZHJpdmVyIGlkIGlzCisJCSAqIG5vdCBsaW51eCBkcml2ZXIgaWQsIHNraXAgdGhlIHJlY29yZC4KKwkJICovCisJCWlmICgocmduMjNfZGF0YVtvZmZzZXRdICE9IERSSVZFUl9TUEVDSUZJQ19UWVBFKSB8fAorCQkgICAgKHJnbjIzX2RhdGFbb2Zmc2V0ICsgMl0gIT0gTElOVVhfRFJJVkVSX0lEKSB8fAorCQkgICAgKHJnbjIzX2RhdGFbb2Zmc2V0ICsgM10gIT0gMCkpIHsKKwkJCW9mZnNldCArPSByZ24yM19kYXRhW29mZnNldCArIDFdICogNCArIDQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIERyaXZlciBmb3VuZCBhIGRyaXZlciBzcGVjaWZpYyBUTFYgaW4gdGhlIGNvbmZpZyByZWdpb24gKi8KKwkJc3ViX3Rsdl9sZW4gPSByZ24yM19kYXRhW29mZnNldCArIDFdICogNDsKKwkJb2Zmc2V0ICs9IDQ7CisJCXRsdl9vZmZzZXQgPSAwOworCisJCS8qCisJCSAqIFNlYXJjaCBmb3IgY29uZmlndXJlZCBwb3J0IHN0YXRlIHN1Yi1UTFYuCisJCSAqLworCQl3aGlsZSAoKG9mZnNldCA8IGRhdGFfc2l6ZSkgJiYKKwkJCSh0bHZfb2Zmc2V0IDwgc3ViX3Rsdl9sZW4pKSB7CisJCQlpZiAocmduMjNfZGF0YVtvZmZzZXRdID09IExQRkNfUkVHSU9OMjNfTEFTVF9SRUMpIHsKKwkJCQlvZmZzZXQgKz0gNDsKKwkJCQl0bHZfb2Zmc2V0ICs9IDQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocmduMjNfZGF0YVtvZmZzZXRdICE9IFBPUlRfU1RFX1RZUEUpIHsKKwkJCQlvZmZzZXQgKz0gcmduMjNfZGF0YVtvZmZzZXQgKyAxXSAqIDQgKyA0OworCQkJCXRsdl9vZmZzZXQgKz0gcmduMjNfZGF0YVtvZmZzZXQgKyAxXSAqIDQgKyA0OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBUaGlzIEhCQSBjb250YWlucyBQT1JUX1NURSBjb25maWd1cmVkICovCisJCQlpZiAoIXJnbjIzX2RhdGFbb2Zmc2V0ICsgMl0pCisJCQkJcGhiYS0+aGJhX2ZsYWcgfD0gTElOS19ESVNBQkxFRDsKKworCQkJZ290byBvdXQ7CisJCX0KKwl9CitvdXQ6CisJaWYgKHBtYikKKwkJbWVtcG9vbF9mcmVlKHBtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJa2ZyZWUocmduMjNfZGF0YSk7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGk0LmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAppbmRleCAzYjI3NmI0Li5iNWY0YmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaTQuaApAQCAtMTMyLDYgKzEzMiw3IEBACiAKIHN0cnVjdCBscGZjX2ZjZiB7CiAJdWludDhfdAkgZmFicmljX25hbWVbOF07CisJdWludDhfdAkgc3dpdGNoX25hbWVbOF07CiAJdWludDhfdCAgbWFjX2FkZHJbNl07CiAJdWludDE2X3QgZmNmX2luZHg7CiAJdWludDE2X3QgZmNmaTsKQEAgLTE1MCw2ICsxNTEsMTAgQEAKICNkZWZpbmUgTFBGQ19SRUdJT04yM19TSUdOQVRVUkUgIlJHMjMiCiAjZGVmaW5lIExQRkNfUkVHSU9OMjNfVkVSU0lPTgkxCiAjZGVmaW5lIExQRkNfUkVHSU9OMjNfTEFTVF9SRUMgIDB4ZmYKKyNkZWZpbmUgRFJJVkVSX1NQRUNJRklDX1RZUEUJMHhBMgorI2RlZmluZSBMSU5VWF9EUklWRVJfSUQJCTB4MjAKKyNkZWZpbmUgUE9SVF9TVEVfVFlQRQkJMHgxCisKIHN0cnVjdCBscGZjX2ZpcF9wYXJhbV9oZHIgewogCXVpbnQ4X3QgdHlwZTsKICNkZWZpbmUgRkNPRV9QQVJBTV9UWVBFCQkweEEwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCmluZGV4IDQxMDk0ZTAuLjlhZTIwYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdmVyc2lvbi5oCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBpbmNsdWRlZCB3aXRoIHRoaXMgcGFja2FnZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgTFBGQ19EUklWRVJfVkVSU0lPTiAiOC4zLjMiCisjZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMy40IgogCiAjZGVmaW5lIExQRkNfRFJJVkVSX05BTUUJCSJscGZjIgogI2RlZmluZSBMUEZDX1NQX0RSSVZFUl9IQU5ETEVSX05BTUUJImxwZmM6c3AiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Zwb3J0LmMKaW5kZXggZTBiNDk5Mi4uNjA2ZWZhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192cG9ydC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfdnBvcnQuYwpAQCAtMzEzLDIyICszMTMsNiBAQAogCQlnb3RvIGVycm9yX291dDsKIAl9CiAKLQkvKgotCSAqIEluIFNMSTQsIHRoZSB2cGkgbXVzdCBiZSBhY3RpdmF0ZWQgYmVmb3JlIGl0IGNhbiBiZSB1c2VkCi0JICogYnkgdGhlIHBvcnQuCi0JICovCi0JaWYgKHBoYmEtPnNsaV9yZXYgPT0gTFBGQ19TTElfUkVWNCkgewotCQlyYyA9IGxwZmNfc2xpNF9pbml0X3ZwaShwaGJhLCB2cGkpOwotCQlpZiAocmMpIHsKLQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1ZQT1JULAotCQkJCQkiMTgzOCBGYWlsZWQgdG8gSU5JVF9WUEkgb24gdnBpICVkICIKLQkJCQkJInN0YXR1cyAlZFxuIiwgdnBpLCByYyk7Ci0JCQlyYyA9IFZQT1JUX05PUkVTT1VSQ0VTOwotCQkJbHBmY19mcmVlX3ZwaShwaGJhLCB2cGkpOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLQl9Ci0KIAkvKiBBc3NpZ24gYW4gdW51c2VkIGJvYXJkIG51bWJlciAqLwogCWlmICgoaW5zdGFuY2UgPSBscGZjX2dldF9pbnN0YW5jZSgpKSA8IDApIHsKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfVlBPUlQsCkBAIC0zNjcsMTIgKzM1MSw4IEBACiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAotCW1lbWNweSh2cG9ydC0+ZmNfcG9ydG5hbWUudS53d24sIHZwb3J0LT5mY19zcGFyYW0ucG9ydE5hbWUudS53d24sIDgpOwotCW1lbWNweSh2cG9ydC0+ZmNfbm9kZW5hbWUudS53d24sIHZwb3J0LT5mY19zcGFyYW0ubm9kZU5hbWUudS53d24sIDgpOwotCWlmIChmY192cG9ydC0+bm9kZV9uYW1lICE9IDApCi0JCXU2NF90b193d24oZmNfdnBvcnQtPm5vZGVfbmFtZSwgdnBvcnQtPmZjX25vZGVuYW1lLnUud3duKTsKLQlpZiAoZmNfdnBvcnQtPnBvcnRfbmFtZSAhPSAwKQotCQl1NjRfdG9fd3duKGZjX3Zwb3J0LT5wb3J0X25hbWUsIHZwb3J0LT5mY19wb3J0bmFtZS51Lnd3bik7CisJdTY0X3RvX3d3bihmY192cG9ydC0+bm9kZV9uYW1lLCB2cG9ydC0+ZmNfbm9kZW5hbWUudS53d24pOworCXU2NF90b193d24oZmNfdnBvcnQtPnBvcnRfbmFtZSwgdnBvcnQtPmZjX3BvcnRuYW1lLnUud3duKTsKIAogCW1lbWNweSgmdnBvcnQtPmZjX3NwYXJhbS5wb3J0TmFtZSwgdnBvcnQtPmZjX3BvcnRuYW1lLnUud3duLCA4KTsKIAltZW1jcHkoJnZwb3J0LT5mY19zcGFyYW0ubm9kZU5hbWUsIHZwb3J0LT5mY19ub2RlbmFtZS51Lnd3biwgOCk7CkBAIC00MDQsNyArMzg0LDM0IEBACiAJKihzdHJ1Y3QgbHBmY192cG9ydCAqKilmY192cG9ydC0+ZGRfZGF0YSA9IHZwb3J0OwogCXZwb3J0LT5mY192cG9ydCA9IGZjX3Zwb3J0OwogCisJLyoKKwkgKiBJbiBTTEk0LCB0aGUgdnBpIG11c3QgYmUgYWN0aXZhdGVkIGJlZm9yZSBpdCBjYW4gYmUgdXNlZAorCSAqIGJ5IHRoZSBwb3J0LgorCSAqLworCWlmICgocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSAmJgorCQkocHBvcnQtPnZmaV9zdGF0ZSAmIExQRkNfVkZJX1JFR0lTVEVSRUQpKSB7CisJCXJjID0gbHBmY19zbGk0X2luaXRfdnBpKHBoYmEsIHZwaSk7CisJCWlmIChyYykgeworCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfVlBPUlQsCisJCQkJCSIxODM4IEZhaWxlZCB0byBJTklUX1ZQSSBvbiB2cGkgJWQgIgorCQkJCQkic3RhdHVzICVkXG4iLCB2cGksIHJjKTsKKwkJCXJjID0gVlBPUlRfTk9SRVNPVVJDRVM7CisJCQlscGZjX2ZyZWVfdnBpKHBoYmEsIHZwaSk7CisJCQlnb3RvIGVycm9yX291dDsKKwkJfQorCX0gZWxzZSBpZiAocGhiYS0+c2xpX3JldiA9PSBMUEZDX1NMSV9SRVY0KSB7CisJCS8qCisJCSAqIERyaXZlciBjYW5ub3QgSU5JVF9WUEkgbm93LiBTZXQgdGhlIGZsYWdzIHRvCisJCSAqIGluaXRfdnBpIHdoZW4gcmVnX3ZmaSBjb21wbGV0ZS4KKwkJICovCisJCXZwb3J0LT5mY19mbGFnIHw9IEZDX1ZQT1JUX05FRURTX0lOSVRfVlBJOworCQlscGZjX3Zwb3J0X3NldF9zdGF0ZSh2cG9ydCwgRkNfVlBPUlRfTElOS0RPV04pOworCQlyYyA9IFZQT1JUX09LOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoKHBoYmEtPmxpbmtfc3RhdGUgPCBMUEZDX0xJTktfVVApIHx8CisJICAgIChwcG9ydC0+cG9ydF9zdGF0ZSA8IExQRkNfRkFCUklDX0NGR19MSU5LKSB8fAogCSAgICAocGhiYS0+ZmNfdG9wb2xvZ3kgPT0gVE9QT0xPR1lfTE9PUCkpIHsKIAkJbHBmY192cG9ydF9zZXRfc3RhdGUodnBvcnQsIEZDX1ZQT1JUX0xJTktET1dOKTsKIAkJcmMgPSBWUE9SVF9PSzsKQEAgLTY2MSw3ICs2NjgsNyBAQAogCQkJCWxwZmNfcHJpbnRmX2xvZyh2cG9ydC0+cGhiYSwgS0VSTl9XQVJOSU5HLAogCQkJCQkJTE9HX1ZQT1JULAogCQkJCQkJIjE4MjkgQ1QgY29tbWFuZCBmYWlsZWQgdG8gIgotCQkJCQkJImRlbGV0ZSBvYmplY3RzIG9uIGZhYnJpYy4gXG4iKTsKKwkJCQkJCSJkZWxldGUgb2JqZWN0cyBvbiBmYWJyaWNcbiIpOwogCQl9CiAJCS8qIEZpcnN0IGxvb2sgZm9yIHRoZSBGYWJyaWMgbmRscCAqLwogCQluZGxwID0gbHBmY19maW5kbm9kZV9kaWQodnBvcnQsIEZhYnJpY19ESUQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCAzNWExMzg2Li5kOTVkMmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtOTQsNyArOTQsNyBAQAogCWludCByYzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKQorCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQogCQlnb3RvIHJlYXJtX3RpbWVyOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIApAQCAtNjg3LDYgKzY4NywxNCBAQAogCWlvYy0+bWFza19pbnRlcnJ1cHRzID0gMDsKIH0KIAordW5pb24gcmVwbHlfZGVzY3JpcHRvciB7CisJdTY0IHdvcmQ7CisJc3RydWN0IHsKKwkJdTMyIGxvdzsKKwkJdTMyIGhpZ2g7CisJfSB1OworfTsKKwogLyoqCiAgKiBfYmFzZV9pbnRlcnJ1cHQgLSBNUFQgYWRhcHRlciAoSU9DKSBzcGVjaWZpYyBpbnRlcnJ1cHQgaGFuZGxlci4KICAqIEBpcnE6IGlycSBudW1iZXIgKG5vdCB1c2VkKQpAQCAtNjk4LDQ3ICs3MDYsMzggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdAogX2Jhc2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmJ1c19pZCkKIHsKLQl1bmlvbiByZXBseV9kZXNjcmlwdG9yIHsKLQkJdTY0IHdvcmQ7Ci0JCXN0cnVjdCB7Ci0JCQl1MzIgbG93OwotCQkJdTMyIGhpZ2g7Ci0JCX0gdTsKLQl9OwogCXVuaW9uIHJlcGx5X2Rlc2NyaXB0b3IgcmQ7Ci0JdTMyIHBvc3RfaW5kZXgsIHBvc3RfaW5kZXhfbmV4dCwgY29tcGxldGVkX2NtZHM7CisJdTMyIGNvbXBsZXRlZF9jbWRzOwogCXU4IHJlcXVlc3RfZGVzcmlwdF90eXBlOwogCXUxNiBzbWlkOwogCXU4IGNiX2lkeDsKIAl1MzIgcmVwbHk7CiAJdTggVkZfSUQ7Ci0JaW50IGk7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jID0gYnVzX2lkOworCU1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdCAqcnBmOwogCiAJaWYgKGlvYy0+bWFza19pbnRlcnJ1cHRzKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlwb3N0X2luZGV4ID0gaW9jLT5yZXBseV9wb3N0X2hvc3RfaW5kZXg7Ci0JcmVxdWVzdF9kZXNyaXB0X3R5cGUgPSBpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KLQkgICAgRGVmYXVsdC5SZXBseUZsYWdzICYgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLOworCXJwZiA9ICZpb2MtPnJlcGx5X3Bvc3RfZnJlZVtpb2MtPnJlcGx5X3Bvc3RfaG9zdF9pbmRleF07CisJcmVxdWVzdF9kZXNyaXB0X3R5cGUgPSBycGYtPkRlZmF1bHQuUmVwbHlGbGFncworCSAgICAgJiBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UWVBFX01BU0s7CiAJaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09IE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJY29tcGxldGVkX2NtZHMgPSAwOwogCWRvIHsKLQkJcmQud29yZCA9IGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhdLldvcmRzOworCQlyZC53b3JkID0gcnBmLT5Xb3JkczsKIAkJaWYgKHJkLnUubG93ID09IFVJTlRfTUFYIHx8IHJkLnUuaGlnaCA9PSBVSU5UX01BWCkKIAkJCWdvdG8gb3V0OwogCQlyZXBseSA9IDA7CiAJCWNiX2lkeCA9IDB4RkY7Ci0JCXNtaWQgPSBsZTE2X3RvX2NwdShpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KLQkJICAgIERlZmF1bHQuRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxKTsKLQkJVkZfSUQgPSBpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KLQkJICAgIERlZmF1bHQuVkZfSUQ7CisJCXNtaWQgPSBsZTE2X3RvX2NwdShycGYtPkRlZmF1bHQuRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxKTsKKwkJVkZfSUQgPSBycGYtPkRlZmF1bHQuVkZfSUQ7CiAJCWlmIChyZXF1ZXN0X2Rlc3JpcHRfdHlwZSA9PQogCQkgICAgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfQUREUkVTU19SRVBMWSkgewotCQkJcmVwbHkgPSBsZTMyX3RvX2NwdShpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4XS4KLQkJCSAgICBBZGRyZXNzUmVwbHkuUmVwbHlGcmFtZUFkZHJlc3MpOworCQkJcmVwbHkgPSBsZTMyX3RvX2NwdQorCQkJCShycGYtPkFkZHJlc3NSZXBseS5SZXBseUZyYW1lQWRkcmVzcyk7CiAJCX0gZWxzZSBpZiAocmVxdWVzdF9kZXNyaXB0X3R5cGUgPT0KIAkJICAgIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVF9DT01NQU5EX0JVRkZFUikKIAkJCWdvdG8gbmV4dDsKQEAgLTc2NSwyMSArNzY0LDI3IEBACiAJCQkgICAgMCA6IGlvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4ICsgMTsKIAkJCWlvYy0+cmVwbHlfZnJlZVtpb2MtPnJlcGx5X2ZyZWVfaG9zdF9pbmRleF0gPQogCQkJICAgIGNwdV90b19sZTMyKHJlcGx5KTsKKwkJCXdtYigpOwogCQkJd3JpdGVsKGlvYy0+cmVwbHlfZnJlZV9ob3N0X2luZGV4LAogCQkJICAgICZpb2MtPmNoaXAtPlJlcGx5RnJlZUhvc3RJbmRleCk7Ci0JCQl3bWIoKTsKIAkJfQogCiAgbmV4dDoKLQkJcG9zdF9pbmRleF9uZXh0ID0gKHBvc3RfaW5kZXggPT0gKGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCAtCi0JCSAgICAxKSkgPyAwIDogcG9zdF9pbmRleCArIDE7CisKKwkJcnBmLT5Xb3JkcyA9IFVMTE9OR19NQVg7CisJCWlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4ID0gKGlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4ID09CisJCSAgICAoaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoIC0gMSkpID8gMCA6CisJCSAgICBpb2MtPnJlcGx5X3Bvc3RfaG9zdF9pbmRleCArIDE7CiAJCXJlcXVlc3RfZGVzcmlwdF90eXBlID0KLQkJICAgIGlvYy0+cmVwbHlfcG9zdF9mcmVlW3Bvc3RfaW5kZXhfbmV4dF0uRGVmYXVsdC5SZXBseUZsYWdzCi0JCSAgICAmIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSzsKKwkJICAgIGlvYy0+cmVwbHlfcG9zdF9mcmVlW2lvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4XS5EZWZhdWx0LgorCQkgICAgUmVwbHlGbGFncyAmIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RZUEVfTUFTSzsKIAkJY29tcGxldGVkX2NtZHMrKzsKIAkJaWYgKHJlcXVlc3RfZGVzcmlwdF90eXBlID09IE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1VOVVNFRCkKIAkJCWdvdG8gb3V0OwotCQlwb3N0X2luZGV4ID0gcG9zdF9pbmRleF9uZXh0OworCQlpZiAoIWlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4KQorCQkJcnBmID0gaW9jLT5yZXBseV9wb3N0X2ZyZWU7CisJCWVsc2UKKwkJCXJwZisrOwogCX0gd2hpbGUgKDEpOwogCiAgb3V0OgpAQCAtNzg3LDE5ICs3OTIsOCBAQAogCWlmICghY29tcGxldGVkX2NtZHMpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCS8qIHJlcGx5IHBvc3QgZGVzY3JpcHRvciBoYW5kbGluZyAqLwotCXBvc3RfaW5kZXhfbmV4dCA9IGlvYy0+cmVwbHlfcG9zdF9ob3N0X2luZGV4OwotCWZvciAoaSA9IDAgOyBpIDwgY29tcGxldGVkX2NtZHM7IGkrKykgewotCQlwb3N0X2luZGV4ID0gcG9zdF9pbmRleF9uZXh0OwotCQkvKiBwb2lzb24gdGhlIHJlcGx5IHBvc3QgZGVzY3JpcHRvciAqLwotCQlpb2MtPnJlcGx5X3Bvc3RfZnJlZVtwb3N0X2luZGV4X25leHRdLldvcmRzID0gVUxMT05HX01BWDsKLQkJcG9zdF9pbmRleF9uZXh0ID0gKHBvc3RfaW5kZXggPT0KLQkJICAgIChpb2MtPnJlcGx5X3Bvc3RfcXVldWVfZGVwdGggLSAxKSkKLQkJICAgID8gMCA6IHBvc3RfaW5kZXggKyAxOwotCX0KLQlpb2MtPnJlcGx5X3Bvc3RfaG9zdF9pbmRleCA9IHBvc3RfaW5kZXhfbmV4dDsKLQl3cml0ZWwocG9zdF9pbmRleF9uZXh0LCAmaW9jLT5jaGlwLT5SZXBseVBvc3RIb3N0SW5kZXgpOwogCXdtYigpOworCXdyaXRlbChpb2MtPnJlcGx5X3Bvc3RfaG9zdF9pbmRleCwgJmlvYy0+Y2hpcC0+UmVwbHlQb3N0SG9zdEluZGV4KTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTE1NDIsNiArMTUzNiw4IEBACiAJICAgKGlvYy0+Ymlvc19wZzMuQmlvc1ZlcnNpb24gJiAweDAwMDBGRjAwKSA+PiA4LAogCSAgICBpb2MtPmJpb3NfcGczLkJpb3NWZXJzaW9uICYgMHgwMDAwMDBGRik7CiAKKwlfYmFzZV9kaXNwbGF5X2RlbGxfYnJhbmRpbmcoaW9jKTsKKwogCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJQcm90b2NvbD0oIiwgaW9jLT5uYW1lKTsKIAogCWlmIChpb2MtPmZhY3RzLlByb3RvY29sRmxhZ3MgJiBNUEkyX0lPQ0ZBQ1RTX1BST1RPQ09MX1NDU0lfSU5JVElBVE9SKSB7CkBAIC0xNTU0LDggKzE1NTAsNiBAQAogCQlpKys7CiAJfQogCi0JX2Jhc2VfZGlzcGxheV9kZWxsX2JyYW5kaW5nKGlvYyk7Ci0KIAlpID0gMDsKIAlwcmludGsoIiksICIpOwogCXByaW50aygiQ2FwYWJpbGl0aWVzPSgiKTsKQEAgLTE2MjcsNiArMTYyMSw5IEBACiAJdTMyIGlvdW5pdF9wZzFfZmxhZ3M7CiAKIAltcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzAoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5tYW51X3BnMCk7CisJaWYgKGlvYy0+aXJfZmlybXdhcmUpCisJCW1wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMTAoaW9jLCAmbXBpX3JlcGx5LAorCQkgICAgJmlvYy0+bWFudV9wZzEwKTsKIAltcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzIoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5iaW9zX3BnMik7CiAJbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGczKGlvYywgJm1waV9yZXBseSwgJmlvYy0+Ymlvc19wZzMpOwogCW1wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4KGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW9jX3BnOCk7CkBAIC0xNjQ3LDcgKzE2NDQsNyBAQAogCQlpb3VuaXRfcGcxX2ZsYWdzIHw9CiAJCSAgICBNUEkyX0lPVU5JVFBBR0UxX0RJU0FCTEVfVEFTS19TRVRfRlVMTF9IQU5ETElORzsKIAlpb2MtPmlvdW5pdF9wZzEuRmxhZ3MgPSBjcHVfdG9fbGUzMihpb3VuaXRfcGcxX2ZsYWdzKTsKLQltcHQyc2FzX2NvbmZpZ19zZXRfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksIGlvYy0+aW91bml0X3BnMSk7CisJbXB0MnNhc19jb25maWdfc2V0X2lvdW5pdF9wZzEoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5pb3VuaXRfcGcxKTsKIH0KIAogLyoqCkBAIC0zMzAzLDEzICszMzAwLDExIEBACiAJaW9jLT50bV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKIAlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJbXV0ZXhfaW5pdCgmaW9jLT50bV9jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+dG1fY21kcy5kb25lKTsKIAogCS8qIGNvbmZpZyBwYWdlIGludGVybmFsIGNvbW1hbmQgYml0cyAqLwogCWlvYy0+Y29uZmlnX2NtZHMucmVwbHkgPSBremFsbG9jKGlvYy0+cmVwbHlfc3osIEdGUF9LRVJORUwpOwogCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJbXV0ZXhfaW5pdCgmaW9jLT5jb25maWdfY21kcy5tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUpOwogCiAJLyogY3RsIG1vZHVsZSBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAlpb2MtPmN0bF9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKQEAgLTM0MzMsNiArMzQyOCw3IEBACiAJCWlmIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1BFTkRJTkcpIHsKIAkJCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOwogCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIGlvYy0+Y29uZmlnX2NtZHMuc21pZCk7CisJCQlpb2MtPmNvbmZpZ19jbWRzLnNtaWQgPSBVU0hPUlRfTUFYOwogCQkJY29tcGxldGUoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CiAJCX0KIAkJYnJlYWs7CkBAIC0zNTAxLDIwICszNDk3LDEzIEBACiAJICAgIF9fZnVuY19fKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwotCWlmIChpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzcykgeworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGJ1c3lcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwogCWlvYy0+c2hvc3RfcmVjb3ZlcnkgPSAxOwotCWlmIChpb2MtPnNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SVU5OSU5HKSB7Ci0JCS8qIHNldCBiYWNrIHRvIFNIT1NUX1JVTk5JTkcgaW4gbXB0MnNhc19zY3NpaC5jICovCi0JCXNjc2lfaG9zdF9zZXRfc3RhdGUoaW9jLT5zaG9zdCwgU0hPU1RfUkVDT1ZFUlkpOwotCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicHV0dGluZyBjb250cm9sbGVyIGludG8gIgotCQkgICAgIlNIT1NUX1JFQ09WRVJZXG4iLCBpb2MtPm5hbWUpOwotCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CiAKIAlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfUFJFX1JFU0VUKTsKQEAgLTM1MzQsNyArMzUyMywxMCBAQAogCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCAoKHIgPT0gMCkgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIikpKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOworCWlvYy0+c2hvc3RfcmVjb3ZlcnkgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKworCWlmICghcikKKwkJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX1JVTk5JTkcpOwogCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAppbmRleCBhY2RjZmYxLi4yZmFhYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaApAQCAtNjksMTAgKzY5LDEwIEBACiAjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX05BTUUJCSJtcHQyc2FzIgogI2RlZmluZSBNUFQyU0FTX0FVVEhPUgkiTFNJIENvcnBvcmF0aW9uIDxETC1NUFRGdXNpb25MaW51eEBsc2kuY29tPiIKICNkZWZpbmUgTVBUMlNBU19ERVNDUklQVElPTgkiTFNJIE1QVCBGdXNpb24gU0FTIDIuMCBEZXZpY2UgRHJpdmVyIgotI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDEuMTAwLjA0LjAwIgorI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDEuMTAwLjA2LjAwIgogI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTAxCiAjZGVmaW5lIE1QVDJTQVNfTUlOT1JfVkVSU0lPTgkJMTAwCi0jZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDQKKyNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwNgogI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDAKIAogLyoKQEAgLTExOSw2ICsxMTksNyBAQAogI2RlZmluZSBNUFQyX0lPQ19QUkVfUkVTRVQJCTEgLyogcHJpb3IgdG8gaG9zdCByZXNldCAqLwogI2RlZmluZSBNUFQyX0lPQ19BRlRFUl9SRVNFVAkJMiAvKiBqdXN0IGFmdGVyIGhvc3QgcmVzZXQgKi8KICNkZWZpbmUgTVBUMl9JT0NfRE9ORV9SRVNFVAkJMyAvKiBsaW5rcyByZS1pbml0aWFsaXplZCAqLworI2RlZmluZSBNUFQyX0lPQ19SVU5OSU5HCQk0IC8qIHNob3N0IHJ1bm5pbmcgKi8KIAogLyoKICAqIGxvZ2dpbmcgZm9ybWF0CkBAIC0xOTYsNiArMTk3LDM4IEBACiAgKiBAYmxvY2s6IGRldmljZSBpcyBpbiBTREVWX0JMT0NLIHN0YXRlCiAgKiBAdGxyX3Nub29wX2NoZWNrOiBmbGFnIHVzZWQgaW4gZGV0ZXJtaW5pbmcgd2hldGhlciB0byBkaXNhYmxlIFRMUgogICovCisKKy8qIE9FTSBJZGVudGlmaWVycyAqLworI2RlZmluZSBNRkcxMF9PRU1fSURfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTUZHMTBfT0VNX0lEX0RFTEwgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCisjZGVmaW5lIE1GRzEwX09FTV9JRF9GU0MgICAgICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAyKQorI2RlZmluZSBNRkcxMF9PRU1fSURfU1VOICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMykKKyNkZWZpbmUgTUZHMTBfT0VNX0lEX0lCTSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisKKy8qIEdFTkVSSUMgRmxhZ3MgMCovCisjZGVmaW5lIE1GRzEwX0dGMF9PQ0VfRElTQUJMRUQgICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQorI2RlZmluZSBNRkcxMF9HRjBfUjFFX0RSSVZFX0NPVU5UICAgICAgICAgICAgICAoMHgwMDAwMDAwMikKKyNkZWZpbmUgTUZHMTBfR0YwX1IxMF9ESVNQTEFZICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDQpCisjZGVmaW5lIE1GRzEwX0dGMF9TU0RfREFUQV9TQ1JVQl9ESVNBQkxFICAgICAgICgweDAwMDAwMDA4KQorI2RlZmluZSBNRkcxMF9HRjBfU0lOR0xFX0RSSVZFX1IwICAgICAgICAgICAgICAoMHgwMDAwMDAxMCkKKworLyogT0VNIFNwZWNpZmljIEZsYWdzIHdpbGwgY29tZSBmcm9tIE9FTSBzcGVjaWZpYyBoZWFkZXIgZmlsZXMgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX0NPTkZJR19QQUdFX01BTl8xMCB7CisgICAgTVBJMl9DT05GSUdfUEFHRV9IRUFERVIgSGVhZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAwaCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE9FTUlkZW50aWZpZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwNGggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDVoICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDA4aCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwQ2ggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBHZW5lcmljRmxhZ3MwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTBoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgR2VuZXJpY0ZsYWdzMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE0aCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxOGggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBPRU1TcGVjaWZpY0ZsYWdzMDsgICAgICAgICAgICAgICAgICAgICAgLyogMUNoICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgT0VNU3BlY2lmaWNGbGFnczE7ICAgICAgICAgICAgICAgICAgICAgIC8qIDIwaCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNVsxOF07ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyNGgtNjBoKi8KK30gTVBJMl9DT05GSUdfUEFHRV9NQU5fMTAsCisgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9NQU5fMTAsCisgIE1waTJNYW51ZmFjdHVyaW5nUGFnZTEwX3QsIE1QSTJfUE9JTlRFUiBwTXBpMk1hbnVmYWN0dXJpbmdQYWdlMTBfdDsKKwogc3RydWN0IE1QVDJTQVNfREVWSUNFIHsKIAlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXQ7CiAJdW5zaWduZWQgaW50CWx1bjsKQEAgLTQzMSw3ICs0NjQsNyBAQAogICogQGZ3X2V2ZW50X2xpc3Q6IGxpc3Qgb2YgZncgZXZlbnRzCiAgKiBAYWVuX2V2ZW50X3JlYWRfZmxhZzogZXZlbnQgbG9nIHdhcyByZWFkCiAgKiBAYnJvYWRjYXN0X2Flbl9idXN5OiBicm9hZGNhc3QgYWVuIHdhaXRpbmcgdG8gYmUgc2VydmljZWQKLSAqIEBpb2NfcmVzZXRfaW5fcHJvZ3Jlc3M6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MKKyAqIEBzaG9zdF9yZWNvdmVyeTogaG9zdCByZXNldCBpbiBwcm9ncmVzcwogICogQGlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrOgogICogQGlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzOiBwaHkvaGFyZCByZXNldCBpbiBwcm9ncmVzcwogICogQGlnbm9yZV9sb2dpbmZvczogaWdub3JlIGxvZ2luZm9zIGR1cmluZyB0YXNrIG1hbmFnbWVudApAQCAtNDYwLDYgKzQ5Myw3IEBACiAgKiBAZmFjdHM6IHN0YXRpYyBmYWN0cyBkYXRhCiAgKiBAcGZhY3RzOiBzdGF0aWMgcG9ydCBmYWN0cyBkYXRhCiAgKiBAbWFudV9wZzA6IHN0YXRpYyBtYW51ZmFjdHVyaW5nIHBhZ2UgMAorICogQG1hbnVfcGcxMDogc3RhdGljIG1hbnVmYWN0dXJpbmcgcGFnZSAxMAogICogQGJpb3NfcGcyOiBzdGF0aWMgYmlvcyBwYWdlIDIKICAqIEBiaW9zX3BnMzogc3RhdGljIGJpb3MgcGFnZSAzCiAgKiBAaW9jX3BnODogc3RhdGljIGlvYyBwYWdlIDgKQEAgLTU0NCw3ICs1NzgsNiBAQAogCSAvKiBtaXNjIGZsYWdzICovCiAJaW50CQlhZW5fZXZlbnRfcmVhZF9mbGFnOwogCXU4CQlicm9hZGNhc3RfYWVuX2J1c3k7Ci0JdTgJCWlvY19yZXNldF9pbl9wcm9ncmVzczsKIAl1OAkJc2hvc3RfcmVjb3Zlcnk7CiAJc3BpbmxvY2tfdCAJaW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2s7CiAJdTgJCWlvY19saW5rX3Jlc2V0X2luX3Byb2dyZXNzOwpAQCAtNjYzLDYgKzY5Niw3IEBACiAJZG1hX2FkZHJfdAlkaWFnX2J1ZmZlcl9kbWFbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIAl1OAkJZGlhZ19idWZmZXJfc3RhdHVzW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CiAJdTMyCQl1bmlxdWVfaWRbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKKwlNcGkyTWFudWZhY3R1cmluZ1BhZ2UxMF90IG1hbnVfcGcxMDsKIAl1MzIJCXByb2R1Y3Rfc3BlY2lmaWNbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXVsyM107CiAJdTMyCQlkaWFnbm9zdGljX2ZsYWdzW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CiB9OwpAQCAtNzM0LDYgKzc2OCw4IEBACiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4ICpudW1fcGh5cyk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyTWFudWZhY3R1cmluZ1BhZ2UwX3QgKmNvbmZpZ19wYWdlKTsKK2ludCBtcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzEwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyTWFudWZhY3R1cmluZ1BhZ2UxMF90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X2Jpb3NfcGcyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKICAgICAqbXBpX3JlcGx5LCBNcGkyQmlvc1BhZ2UyX3QgKmNvbmZpZ19wYWdlKTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfYmlvc19wZzMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdApAQCAtNzQ5LDcgKzc4NSw3IEBACiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAogICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0MnNhc19jb25maWdfc2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAotICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90IGNvbmZpZ19wYWdlKTsKKyAgICAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UpOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9zYXNfaW91bml0X3BnMShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXBseV90CiAgICAgKm1waV9yZXBseSwgTXBpMlNhc0lPVW5pdFBhZ2UxX3QgKmNvbmZpZ19wYWdlLCB1MTYgc3opOwogaW50IG1wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgTXBpMkNvbmZpZ1JlcGx5X3QKQEAgLTc3Niw3ICs4MTIsNiBAQAogICAgIHUxNiAqdm9sdW1lX2hhbmRsZSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV93d2lkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHZvbHVtZV9oYW5kbGUsCiAgICAgdTY0ICp3d2lkKTsKLQogLyogY3RsIHNoYXJlZCBBUEkgKi8KIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXB0MnNhc19ob3N0X2F0dHJzW107CiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1wdDJzYXNfZGV2X2F0dHJzW107CkBAIC03OTgsOSArODMzLDExIEBACiAgICAgKm1wdDJzYXNfcGh5LCBNcGkyU2FzUGh5UGFnZTBfdCBwaHlfcGcwLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnRfZGV2KTsKIGludCBtcHQyc2FzX3RyYW5zcG9ydF9hZGRfZXhwYW5kZXJfcGh5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgc3RydWN0IF9zYXNfcGh5CiAgICAgKm1wdDJzYXNfcGh5LCBNcGkyRXhwYW5kZXJQYWdlMV90IGV4cGFuZGVyX3BnMSwgc3RydWN0IGRldmljZSAqcGFyZW50X2Rldik7Ci12b2lkIG1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9waHlfbGlua19jaGFuZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLAordm9pZCBtcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3Moc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgaGFuZGxlLAogICAgdTE2IGF0dGFjaGVkX2hhbmRsZSwgdTggcGh5X251bWJlciwgdTggbGlua19yYXRlKTsKIGV4dGVybiBzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdDJzYXNfdHJhbnNwb3J0X2Z1bmN0aW9uczsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKm1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlOworZXh0ZXJuIGludCBzY3NpX2ludGVybmFsX2RldmljZV9ibG9jayhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworZXh0ZXJuIGludCBzY3NpX2ludGVybmFsX2RldmljZV91bmJsb2NrKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiAKICNlbmRpZiAvKiBNUFQyU0FTX0JBU0VfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggNmRkZWUxNi4uYWI4YzU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC03MiwxNSArNzIsMTUgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgLSBvYnRhaW4gZG1hIG1lbW9yeSB2aWEgcm91dGluZQotICogQGNvbmZpZ19wYWdlX3N6OiBzaXplCi0gKiBAY29uZmlnX3BhZ2U6IHZpcnQgcG9pbnRlcgotICogQGNvbmZpZ19wYWdlX2RtYTogcGh5cyBwb2ludGVyCisgKiBAc3o6IHNpemUKKyAqIEBwYWdlOiB2aXJ0IHBvaW50ZXIKKyAqIEBwYWdlX2RtYTogcGh5cyBwb2ludGVyCiAgKgogICovCiBzdHJ1Y3QgY29uZmlnX3JlcXVlc3R7Ci0JdTE2CQkJY29uZmlnX3BhZ2Vfc3o7Ci0Jdm9pZAkJCSpjb25maWdfcGFnZTsKLQlkbWFfYWRkcl90CQljb25maWdfcGFnZV9kbWE7CisJdTE2CQkJc3o7CisJdm9pZAkJCSpwYWdlOworCWRtYV9hZGRyX3QJCXBhZ2VfZG1hOwogfTsKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwpAQCAtMTc1LDYgKzE3NSw1NSBAQAogI2VuZGlmCiAKIC8qKgorICogX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeSAtIG9idGFpbiBwaHlzaWNhbCBtZW1vcnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQG1lbTogc3RydWN0IGNvbmZpZ19yZXF1ZXN0CisgKgorICogQSB3cmFwcGVyIGZvciBvYnRhaW5pbmcgZG1hLWFibGUgbWVtb3J5IGZvciBjb25maWcgcGFnZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK19jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBjb25maWdfcmVxdWVzdCAqbWVtKQoreworCWludCByID0gMDsKKworCWlmIChtZW0tPnN6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgeworCQltZW0tPnBhZ2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmlvYy0+cGRldi0+ZGV2LCBtZW0tPnN6LAorCQkgICAgJm1lbS0+cGFnZV9kbWEsIEdGUF9LRVJORUwpOworCQlpZiAoIW1lbS0+cGFnZSkgeworCQkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGRtYV9hbGxvY19jb2hlcmVudCIKKwkJCSAgICAiIGZhaWxlZCBhc2tpbmcgZm9yICglZCkgYnl0ZXMhIVxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCBtZW0tPnN6KTsKKwkJCXIgPSAtRU5PTUVNOworCQl9CisJfSBlbHNlIHsgLyogdXNlIHRtcCBidWZmZXIgaWYgbGVzcyB0aGFuIDUxMiBieXRlcyAqLworCQltZW0tPnBhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOworCQltZW0tPnBhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7CisJfQorCXJldHVybiByOworfQorCisvKioKKyAqIF9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeSAtIHdyYXBwZXIgdG8gZnJlZSB0aGUgbWVtb3J5CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtZW06IHN0cnVjdCBjb25maWdfcmVxdWVzdAorICoKKyAqIEEgd3JhcHBlciB0byBmcmVlIGRtYS1hYmxlIG1lbW9yeSB3aGVuIHVzaW5nIF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkuCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK19jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGNvbmZpZ19yZXF1ZXN0ICptZW0pCit7CisJaWYgKG1lbS0+c3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQorCQlkbWFfZnJlZV9jb2hlcmVudCgmaW9jLT5wZGV2LT5kZXYsIG1lbS0+c3osIG1lbS0+cGFnZSwKKwkJICAgIG1lbS0+cGFnZV9kbWEpOworfQorCisvKioKICAqIG1wdDJzYXNfY29uZmlnX2RvbmUgLSBjb25maWcgcGFnZSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKQEAgLTIwNiw2ICsyNTUsNyBAQAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCV9jb25maWdfZGlzcGxheV9zb21lX2RlYnVnKGlvYywgc21pZCwgImNvbmZpZ19kb25lIiwgbXBpX3JlcGx5KTsKICNlbmRpZgorCWlvYy0+Y29uZmlnX2NtZHMuc21pZCA9IFVTSE9SVF9NQVg7CiAJY29tcGxldGUoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CiB9CiAKQEAgLTIxNSw3ICsyNjUsOSBAQAogICogQG1waV9yZXF1ZXN0OiByZXF1ZXN0IG1lc3NhZ2UgZnJhbWUKICAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQogICogQHRpbWVvdXQ6IHRpbWVvdXQgaW4gc2Vjb25kcwotICogQ29udGV4dDogc2xlZXAsIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIG5lZWRzIHRvIGFjcXVpcmUgdGhlIGNvbmZpZ19jbWRzLm11dGV4CisgKiBAY29uZmlnX3BhZ2U6IGNvbnRlbnRzIG9mIHRoZSBjb25maWcgcGFnZQorICogQGNvbmZpZ19wYWdlX3N6OiBzaXplIG9mIGNvbmZpZyBwYWdlCisgKiBDb250ZXh0OiBzbGVlcAogICoKICAqIEEgZ2VuZXJpYyBBUEkgZm9yIGNvbmZpZyBwYWdlIHJlcXVlc3RzIHRvIGZpcm13YXJlLgogICoKQEAgLTIyOCwxNiArMjgwLDE3IEBACiAgKi8KIHN0YXRpYyBpbnQKIF9jb25maWdfcmVxdWVzdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIE1waTJDb25maWdSZXF1ZXN0X3QKLSAgICAqbXBpX3JlcXVlc3QsIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIGludCB0aW1lb3V0KQorICAgICptcGlfcmVxdWVzdCwgTXBpMkNvbmZpZ1JlcGx5X3QgKm1waV9yZXBseSwgaW50IHRpbWVvdXQsCisgICAgdm9pZCAqY29uZmlnX3BhZ2UsIHUxNiBjb25maWdfcGFnZV9zeikKIHsKIAl1MTYgc21pZDsKIAl1MzIgaW9jX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCAqY29uZmlnX3JlcXVlc3Q7CiAJaW50IHI7Ci0JdTggcmV0cnlfY291bnQ7Ci0JdTggaXNzdWVfaG9zdF9yZXNldCA9IDA7CisJdTggcmV0cnlfY291bnQsIGlzc3VlX2hvc3RfcmVzZXQgPSAwOwogCXUxNiB3YWl0X3N0YXRlX2NvdW50OworCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKIAltdXRleF9sb2NrKCZpb2MtPmNvbmZpZ19jbWRzLm11dGV4KTsKIAlpZiAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKQEAgLTI0NiwxMiArMjk5LDQ0IEBACiAJCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KKwogCXJldHJ5X2NvdW50ID0gMDsKKwltZW1zZXQoJm1lbSwgMCwgc2l6ZW9mKHN0cnVjdCBjb25maWdfcmVxdWVzdCkpOworCisJaWYgKGNvbmZpZ19wYWdlKSB7CisJCW1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKKwkJbXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKKwkJbXBpX3JlcXVlc3QtPkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOworCQltcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOworCQltcGlfcmVxdWVzdC0+RXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKKwkJbXBpX3JlcXVlc3QtPkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKKwkJaWYgKG1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZUxlbmd0aCkKKwkJCW1lbS5zeiA9IG1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZUxlbmd0aCAqIDQ7CisJCWVsc2UKKwkJCW1lbS5zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OworCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworCQlpZiAociAhPSAwKQorCQkJZ290byBvdXQ7CisJCWlmIChtcGlfcmVxdWVzdC0+QWN0aW9uID09CisJCSAgICBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UKSB7CisJCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QtPlBhZ2VCdWZmZXJTR0UsCisJCQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1dSSVRFX1NHTEZMQUdTIHwgbWVtLnN6LAorCQkJICAgIG1lbS5wYWdlX2RtYSk7CisJCQltZW1jcHkobWVtLnBhZ2UsIGNvbmZpZ19wYWdlLCBtaW5fdCh1MTYsIG1lbS5zeiwKKwkJCSAgICBjb25maWdfcGFnZV9zeikpOworCQl9IGVsc2UgeworCQkJbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBjb25maWdfcGFnZV9zeik7CisJCQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QtPlBhZ2VCdWZmZXJTR0UsCisJCQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLnN6LCBtZW0ucGFnZV9kbWEpOworCQl9CisJfQogCiAgcmV0cnlfY29uZmlnOgogCWlmIChyZXRyeV9jb3VudCkgewotCQlpZiAocmV0cnlfY291bnQgPiAyKSAvKiBhdHRlbXB0IG9ubHkgMiByZXRyaWVzICovCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHJldHJ5X2NvdW50ID4gMikgeyAvKiBhdHRlbXB0IG9ubHkgMiByZXRyaWVzICovCisJCQlyID0gLUVGQVVMVDsKKwkJCWdvdG8gZnJlZV9tZW07CisJCX0KIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBhdHRlbXB0aW5nIHJldHJ5ICglZClcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fLCByZXRyeV9jb3VudCk7CiAJfQpAQCAtMjYyLDggKzM0Nyw5IEBACiAJCQlwcmludGsoTVBUMlNBU19FUlJfRk1UCiAJCQkgICAgIiVzOiBmYWlsZWQgZHVlIHRvIGlvYyBub3Qgb3BlcmF0aW9uYWxcbiIsCiAJCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCQlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCQkJciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZnJlZV9tZW07CiAJCX0KIAkJc3NsZWVwKDEpOwogCQlpb2Nfc3RhdGUgPSBtcHQyc2FzX2Jhc2VfZ2V0X2lvY3N0YXRlKGlvYywgMSk7CkBAIC0yNzksOCArMzY1LDkgQEAKIAlpZiAoIXNtaWQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAJCXIgPSAtRUFHQUlOOwotCQlnb3RvIG91dDsKKwkJZ290byBmcmVlX21lbTsKIAl9CiAKIAlyID0gMDsKQEAgLTI5Miw2ICszNzksNyBAQAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCV9jb25maWdfZGlzcGxheV9zb21lX2RlYnVnKGlvYywgc21pZCwgImNvbmZpZ19yZXF1ZXN0IiwgTlVMTCk7CiAjZW5kaWYKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CiAJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBjb25maWdfcmVxdWVzdC0+VkZfSUQpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUsCiAJICAgIHRpbWVvdXQqSFopOwpAQCAtMzAzLDIyICszOTEsMzEgQEAKIAkJcmV0cnlfY291bnQrKzsKIAkJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc21pZCA9PSBzbWlkKQogCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOwotCQlpZiAoKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHx8Ci0JCSAgICAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVNFVCkpCisJCWlmICgoaW9jLT5zaG9zdF9yZWNvdmVyeSkgfHwgKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYKKwkJICAgIE1QVDJfQ01EX1JFU0VUKSkKIAkJCWdvdG8gcmV0cnlfY29uZmlnOwogCQlpc3N1ZV9ob3N0X3Jlc2V0ID0gMTsKIAkJciA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGZyZWVfbWVtOwogCX0KKwogCWlmIChpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFUExZX1ZBTElEKQogCQltZW1jcHkobXBpX3JlcGx5LCBpb2MtPmNvbmZpZ19jbWRzLnJlcGx5LAogCQkgICAgc2l6ZW9mKE1waTJDb25maWdSZXBseV90KSk7CiAJaWYgKHJldHJ5X2NvdW50KQotCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IHJldHJ5IGNvbXBsZXRlZCEhXG4iLAotCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7Ci1vdXQ6CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogcmV0cnkgKCVkKSBjb21wbGV0ZWQhIVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18sIHJldHJ5X2NvdW50KTsKKwlpZiAoY29uZmlnX3BhZ2UgJiYgbXBpX3JlcXVlc3QtPkFjdGlvbiA9PQorCSAgICBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQpCisJCW1lbWNweShjb25maWdfcGFnZSwgbWVtLnBhZ2UsIG1pbl90KHUxNiwgbWVtLnN6LAorCQkgICAgY29uZmlnX3BhZ2Vfc3opKTsKKyBmcmVlX21lbToKKwlpZiAoY29uZmlnX3BhZ2UpCisJCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworIG91dDoKIAlpb2MtPmNvbmZpZ19jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX05PVF9VU0VEOwogCW11dGV4X3VubG9jaygmaW9jLT5jb25maWdfY21kcy5tdXRleCk7CisKIAlpZiAoaXNzdWVfaG9zdF9yZXNldCkKIAkJbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihpb2MsIENBTl9TTEVFUCwKIAkJICAgIEZPUkNFX0JJR19IQU1NRVIpOwpAQCAtMzI2LDQ1ICs0MjMsNiBAQAogfQogCiAvKioKLSAqIF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkgLSBvYnRhaW4gcGh5c2ljYWwgbWVtb3J5Ci0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBtZW06IHN0cnVjdCBjb25maWdfcmVxdWVzdAotICoKLSAqIEEgd3JhcHBlciBmb3Igb2J0YWluaW5nIGRtYS1hYmxlIG1lbW9yeSBmb3IgY29uZmlnIHBhZ2UgcmVxdWVzdC4KLSAqCi0gKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgotICovCi1zdGF0aWMgaW50Ci1fY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKLSAgICBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgKm1lbSkKLXsKLQlpbnQgciA9IDA7Ci0KLQltZW0tPmNvbmZpZ19wYWdlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBtZW0tPmNvbmZpZ19wYWdlX3N6LAotCSAgICAmbWVtLT5jb25maWdfcGFnZV9kbWEpOwotCWlmICghbWVtLT5jb25maWdfcGFnZSkKLQkJciA9IC1FTk9NRU07Ci0JcmV0dXJuIHI7Ci19Ci0KLS8qKgotICogX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5IC0gd3JhcHBlciB0byBmcmVlIHRoZSBtZW1vcnkKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQG1lbTogc3RydWN0IGNvbmZpZ19yZXF1ZXN0Ci0gKgotICogQSB3cmFwcGVyIHRvIGZyZWUgZG1hLWFibGUgbWVtb3J5IHdoZW4gdXNpbmcgX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeS4KLSAqCi0gKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgotICovCi1zdGF0aWMgdm9pZAotX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKLSAgICBzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgKm1lbSkKLXsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGlvYy0+cGRldiwgbWVtLT5jb25maWdfcGFnZV9zeiwgbWVtLT5jb25maWdfcGFnZSwKLQkgICAgbWVtLT5jb25maWdfcGFnZV9kbWEpOwotfQotCi0vKioKICAqIG1wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMCAtIG9idGFpbiBtYW51ZmFjdHVyaW5nIHBhZ2UgMAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKQEAgLTM3OSw5ICs0MzcsNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC0zOTAsMzcgKzQ0Niw1MCBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfTUFOVUZBQ1RVUklORzBfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkgICAgc2l6ZW9mKE1waTJNYW51ZmFjdHVyaW5nUGFnZTBfdCkpKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7Cisgb3V0OgorCXJldHVybiByOworfQogCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOworLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfbWFudWZhY3R1cmluZ19wZzEwIC0gb2J0YWluIG1hbnVmYWN0dXJpbmcgcGFnZSAxMAorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKKyAqIEBjb25maWdfcGFnZTogY29udGVudHMgb2YgdGhlIGNvbmZpZyBwYWdlCisgKiBDb250ZXh0OiBzbGVlcC4KKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorICovCitpbnQKK21wdDJzYXNfY29uZmlnX2dldF9tYW51ZmFjdHVyaW5nX3BnMTAoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIE1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJNYW51ZmFjdHVyaW5nUGFnZTEwX3QgKmNvbmZpZ19wYWdlKQoreworCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CisJaW50IHI7CiAKKwltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX01BTlVGQUNUVVJJTkc7CisJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxMDsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX01BTlVGQUNUVVJJTkcwX1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtNDQwLDkgKzUwOSw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMkJpb3NQYWdlMl90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTQ1MSwzNyArNTE4LDE0IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9CSU9TUEFHRTJfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkgICAgc2l6ZW9mKE1waTJCaW9zUGFnZTJfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC01MDEsOSArNTQ1LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyQmlvc1BhZ2UzX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtNTEyLDM3ICs1NTQsMTQgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0JJT1NQQUdFM19QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMkJpb3NQYWdlM190KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTU2Miw5ICs1ODEsNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJJT1VuaXRQYWdlMF90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTU3MywzNyArNTkwLDE0IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9JT1VOSVRQQUdFMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMklPVW5pdFBhZ2UwX3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtNjIzLDkgKzYxNyw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMklPVW5pdFBhZ2UxX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtNjM0LDM3ICs2MjYsMTQgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPVU5JVFBBR0UxX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aDsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkySU9Vbml0UGFnZTFfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC02ODAsMTEgKzY0OSwxMCBAQAogICovCiBpbnQKIG1wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKLSAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCBjb25maWdfcGFnZSkKKyAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkySU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UpCiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwpAQCAtNjk0LDM4ICs2NjIsMTQgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPVU5JVFBBR0UxX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9XUklURV9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQotCW1lbXNldChtZW0uY29uZmlnX3BhZ2UsIDAsIG1lbS5jb25maWdfcGFnZV9zeik7Ci0JbWVtY3B5KG1lbS5jb25maWdfcGFnZSwgJmNvbmZpZ19wYWdlLAotCSAgICBzaXplb2YoTXBpMklPVW5pdFBhZ2UxX3QpKTsKLQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fV1JJVEVfU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTc0NSw5ICs2ODksNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJJT0NQYWdlOF90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTc1NiwzNyArNjk4LDE0IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9JT0NQQUdFOF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMklPQ1BhZ2U4X3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtODA4LDkgKzcyNyw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc0RldmljZVBhZ2UwX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtODIwLDM5ICs3MzcsMTUgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IDA7CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkgICAgc2l6ZW9mKE1waTJTYXNEZXZpY2VQYWdlMF90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTg3NCw5ICs3NjcsNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJTYXNEZXZpY2VQYWdlMV90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTg4NiwzOSArNzc3LDE1IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAxOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9IGNwdV90b19sZTMyKGZvcm0gfCBoYW5kbGUpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyU2FzRGV2aWNlUGFnZTFfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC05MzYsMTEgKzgwMywxMSBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAl1MTYgaW9jX3N0YXR1czsKIAlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7CiAJTXBpMlNhc0lPVW5pdFBhZ2UwX3QgY29uZmlnX3BhZ2U7CiAKKwkqbnVtX3BoeXMgPSAwOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC05NTAsNDQgKzgxNywyMCBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTBfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHkuRXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS5FeHRQYWdlVHlwZTsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHkuRXh0UGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCAmbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCAmY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0UGFnZTBfdCkpOwogCWlmICghcikgewogCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgogCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKLQkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgewotCQkJbWVtY3B5KCZjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkJICAgIHNpemVvZihNcGkyU2FzSU9Vbml0UGFnZTBfdCkpKTsKKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykKIAkJCSpudW1fcGh5cyA9IGNvbmZpZ19wYWdlLk51bVBoeXM7Ci0JCX0KIAl9Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xMDExLDggKzg1NCw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc3opOworCiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTEwMjIsMzcgKzg2NCwxMyBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTBfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIHN6LCBtZW0uY29uZmlnX3BhZ2Vfc3opKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsIHN6KTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xMDc2LDkgKzg5NCw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzeik7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTEwODgsMzcgKzkwNCwxMyBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTSU9VTklUUEFHRTBfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIHN6LCBtZW0uY29uZmlnX3BhZ2Vfc3opKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsIHN6KTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xMTQwLDkgKzkzMiw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMkV4cGFuZGVyUGFnZTBfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC0xMTUyLDM5ICs5NDIsMTUgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgaGFuZGxlKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMkV4cGFuZGVyUGFnZTBfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xMjA3LDkgKzk3Myw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMkV4cGFuZGVyUGFnZTFfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC0xMjE5LDcgKzk4Myw3IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNFWFBBTkRFUjFfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIApAQCAtMTIyNywzMyArOTkxLDkgQEAKIAkgICAgY3B1X3RvX2xlMzIoTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9ITkRMX1BIWV9OVU0gfAogCSAgICAocGh5X251bWJlciA8PCBNUEkyX1NBU19FWFBBTkRfUEdBRF9QSFlOVU1fU0hJRlQpIHwgaGFuZGxlKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMkV4cGFuZGVyUGFnZTFfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xMjc1LDkgKzEwMTUsNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJTYXNFbmNsb3N1cmVQYWdlMF90KSk7CiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKIAltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKQEAgLTEyODcsMzkgKzEwMjUsMTUgQEAKIAltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX1NBU0VOQ0xPU1VSRTBfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5FeHRQYWdlTGVuZ3RoID0gbXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LT5FeHRQYWdlVHlwZTsKLQltZW0uY29uZmlnX3BhZ2Vfc3ogPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGgpICogNDsKLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikgewotCQlyID0gX2NvbmZpZ19hbGxvY19jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCQlpZiAocikKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCW1lbS5jb25maWdfcGFnZV9kbWEgPSBpb2MtPmNvbmZpZ19wYWdlX2RtYTsKLQkJbWVtLmNvbmZpZ19wYWdlID0gaW9jLT5jb25maWdfcGFnZTsKLQl9Ci0JaW9jLT5iYXNlX2FkZF9zZ19zaW5nbGUoJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UsCi0JICAgIE1QVDJfQ09ORklHX0NPTU1PTl9TR0xGTEFHUyB8IG1lbS5jb25maWdfcGFnZV9zeiwKLQkgICAgbWVtLmNvbmZpZ19wYWdlX2RtYSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7Ci0JaWYgKCFyKQotCQltZW1jcHkoY29uZmlnX3BhZ2UsIG1lbS5jb25maWdfcGFnZSwKLQkJICAgIG1pbl90KHUxNiwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCQkgICAgc2l6ZW9mKE1waTJTYXNFbmNsb3N1cmVQYWdlMF90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTEzNDAsOSArMTA1NCw3IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCi0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzaXplb2YoTXBpMlNhc1BoeVBhZ2UwX3QpKTsKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwpAQCAtMTM1Miw0MCArMTA2NCwxNiBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfU0FTUEhZMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPQogCSAgICBjcHVfdG9fbGUzMihNUEkyX1NBU19QSFlfUEdBRF9GT1JNX1BIWV9OVU1CRVIgfCBwaHlfbnVtYmVyKTsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VUeXBlOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VMZW5ndGggPSBtcGlfcmVwbHktPkV4dFBhZ2VMZW5ndGg7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZVR5cGUgPSBtcGlfcmVwbHktPkV4dFBhZ2VUeXBlOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMlNhc1BoeVBhZ2UwX3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtMTQwNiw5ICsxMDk0LDcgQEAKIHsKIAlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyU2FzUGh5UGFnZTFfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC0xNDE4LDQwICsxMTA0LDE2IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9TQVNQSFkxX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAotCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCk7CisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAltcGlfcmVxdWVzdC5QYWdlQWRkcmVzcyA9CiAJICAgIGNwdV90b19sZTMyKE1QSTJfU0FTX1BIWV9QR0FEX0ZPUk1fUEhZX05VTUJFUiB8IHBoeV9udW1iZXIpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVmVyc2lvbjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS0+RXh0UGFnZUxlbmd0aDsKLQltcGlfcmVxdWVzdC5FeHRQYWdlVHlwZSA9IG1waV9yZXBseS0+RXh0UGFnZVR5cGU7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOwotCWlmICghcikKLQkJbWVtY3B5KGNvbmZpZ19wYWdlLCBtZW0uY29uZmlnX3BhZ2UsCi0JCSAgICBtaW5fdCh1MTYsIG1lbS5jb25maWdfcGFnZV9zeiwKLQkJICAgIHNpemVvZihNcGkyU2FzUGh5UGFnZTFfdCkpKTsKLQotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKICBvdXQ6CiAJcmV0dXJuIHI7CiB9CkBAIC0xNDc0LDkgKzExMzYsNyBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAotCW1lbXNldChjb25maWdfcGFnZSwgMCwgc2l6ZW9mKE1waTJSYWlkVm9sUGFnZTFfdCkpOwogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CkBAIC0xNDg1LDM4ICsxMTQ1LDE1IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9SQUlEVk9MUEFHRTFfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMlJhaWRWb2xQYWdlMV90KSkpOwotCi0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opCi0JCV9jb25maWdfZnJlZV9jb25maWdfZG1hX21lbW9yeShpb2MsICZtZW0pOwotCisJICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKCpjb25maWdfcGFnZSkpOwogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTE1MzUsMTAgKzExNzIsOSBAQAogICAgIHU4ICpudW1fcGRzKQogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7Ci0JTXBpMlJhaWRWb2xQYWdlMF90ICpjb25maWdfcGFnZTsKKwlNcGkyUmFpZFZvbFBhZ2UwX3QgY29uZmlnX3BhZ2U7CiAJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwogCWludCByOwotCXN0cnVjdCBjb25maWdfcmVxdWVzdCBtZW07CiAJdTE2IGlvY19zdGF0dXM7CiAKIAltZW1zZXQoJm1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMkNvbmZpZ1JlcXVlc3RfdCkpOwpAQCAtMTU1MCw0MyArMTE4NiwyMyBAQAogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IE1QSTJfUkFJRFZPTFBBR0UwX1BBR0VWRVJTSU9OOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPQogCSAgICBjcHVfdG9fbGUzMihNUEkyX1JBSURfVk9MVU1FX1BHQURfRk9STV9IQU5ETEUgfCBoYW5kbGUpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VMZW5ndGggPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LkhlYWRlci5QYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsICZtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsICZjb25maWdfcGFnZSwKKwkgICAgc2l6ZW9mKE1waTJSYWlkVm9sUGFnZTBfdCkpOwogCWlmICghcikgewogCQlpb2Nfc3RhdHVzID0gbGUxNl90b19jcHUobXBpX3JlcGx5LklPQ1N0YXR1cykgJgogCQkgICAgTVBJMl9JT0NTVEFUVVNfTUFTSzsKLQkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykgewotCQkJY29uZmlnX3BhZ2UgPSBtZW0uY29uZmlnX3BhZ2U7Ci0JCQkqbnVtX3BkcyA9IGNvbmZpZ19wYWdlLT5OdW1QaHlzRGlza3M7Ci0JCX0KKwkJaWYgKGlvY19zdGF0dXMgPT0gTVBJMl9JT0NTVEFUVVNfU1VDQ0VTUykKKwkJCSpudW1fcGRzID0gY29uZmlnX3BhZ2UuTnVtUGh5c0Rpc2tzOwogCX0KIAotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQogIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTE2MTAsMTAgKzEyMjYsOCBAQAogewogCU1waTJDb25maWdSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJaW50IHI7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKIAogCW1lbXNldCgmbXBpX3JlcXVlc3QsIDAsIHNpemVvZihNcGkyQ29uZmlnUmVxdWVzdF90KSk7Ci0JbWVtc2V0KGNvbmZpZ19wYWdlLCAwLCBzeik7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0NPTkZJRzsKIAltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9IRUFERVI7CiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VUeXBlID0gTVBJMl9DT05GSUdfUEFHRVRZUEVfUkFJRF9WT0xVTUU7CkBAIC0xNjIxLDM3ICsxMjM1LDE0IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9SQUlEVk9MUEFHRTBfUEFHRVZFUlNJT047CiAJbXB0MnNhc19iYXNlX2J1aWxkX3plcm9fbGVuX3NnZShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIE5VTEwsIDApOwogCWlmIChyKQogCQlnb3RvIG91dDsKIAogCW1waV9yZXF1ZXN0LlBhZ2VBZGRyZXNzID0gY3B1X3RvX2xlMzIoZm9ybSB8IGhhbmRsZSk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBzeiwgbWVtLmNvbmZpZ19wYWdlX3N6KSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLCBzeik7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtMTY3NCwxMCArMTI2NSw4IEBACiB7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlpbnQgcjsKLQlzdHJ1Y3QgY29uZmlnX3JlcXVlc3QgbWVtOwogCiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKLQltZW1zZXQoY29uZmlnX3BhZ2UsIDAsIHNpemVvZihNcGkyUmFpZFBoeXNEaXNrUGFnZTBfdCkpOwogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9DT05GSUc7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfSEVBREVSOwogCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IE1QSTJfQ09ORklHX1BBR0VUWVBFX1JBSURfUEhZU0RJU0s7CkBAIC0xNjg1LDM4ICsxMjc0LDE1IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VWZXJzaW9uID0gTVBJMl9SQUlEUEhZU0RJU0tQQUdFMF9QQUdFVkVSU0lPTjsKIAltcHQyc2FzX2Jhc2VfYnVpbGRfemVyb19sZW5fc2dlKGlvYywgJm1waV9yZXF1ZXN0LlBhZ2VCdWZmZXJTR0UpOwogCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPSBjcHVfdG9fbGUzMihmb3JtIHwgZm9ybV9zcGVjaWZpYyk7CiAJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVmVyc2lvbiA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZU51bWJlcjsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBtcGlfcmVwbHktPkhlYWRlci5QYWdlVHlwZTsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZUxlbmd0aCA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VMZW5ndGg7Ci0JbWVtLmNvbmZpZ19wYWdlX3N6ID0gbGUxNl90b19jcHUobXBpX3JlcGx5LT5IZWFkZXIuUGFnZUxlbmd0aCkgKiA0OwotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KSB7Ci0JCXIgPSBfY29uZmlnX2FsbG9jX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0JCWlmIChyKQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIHsKLQkJbWVtLmNvbmZpZ19wYWdlX2RtYSA9IGlvYy0+Y29uZmlnX3BhZ2VfZG1hOwotCQltZW0uY29uZmlnX3BhZ2UgPSBpb2MtPmNvbmZpZ19wYWdlOwotCX0KLQlpb2MtPmJhc2VfYWRkX3NnX3NpbmdsZSgmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSwKLQkgICAgTVBUMl9DT05GSUdfQ09NTU9OX1NHTEZMQUdTIHwgbWVtLmNvbmZpZ19wYWdlX3N6LAotCSAgICBtZW0uY29uZmlnX3BhZ2VfZG1hKTsKIAlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCi0JICAgIE1QVDJfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VUKTsKLQlpZiAoIXIpCi0JCW1lbWNweShjb25maWdfcGFnZSwgbWVtLmNvbmZpZ19wYWdlLAotCQkgICAgbWluX3QodTE2LCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JCSAgICBzaXplb2YoTXBpMlJhaWRQaHlzRGlza1BhZ2UwX3QpKSk7Ci0KLQlpZiAobWVtLmNvbmZpZ19wYWdlX3N6ID4gaW9jLT5jb25maWdfcGFnZV9zeikKLQkJX2NvbmZpZ19mcmVlX2NvbmZpZ19kbWFfbWVtb3J5KGlvYywgJm1lbSk7Ci0KKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7CiAgb3V0OgogCXJldHVybiByOwogfQpAQCAtMTczNCwxMSArMTMwMCwxMCBAQAogbXB0MnNhc19jb25maWdfZ2V0X3ZvbHVtZV9oYW5kbGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgcGRfaGFuZGxlLAogICAgIHUxNiAqdm9sdW1lX2hhbmRsZSkKIHsKLQlNcGkyUmFpZENvbmZpZ3VyYXRpb25QYWdlMF90ICpjb25maWdfcGFnZTsKKwlNcGkyUmFpZENvbmZpZ3VyYXRpb25QYWdlMF90ICpjb25maWdfcGFnZSA9IE5VTEw7CiAJTXBpMkNvbmZpZ1JlcXVlc3RfdCBtcGlfcmVxdWVzdDsKIAlNcGkyQ29uZmlnUmVwbHlfdCBtcGlfcmVwbHk7Ci0JaW50IHIsIGk7Ci0Jc3RydWN0IGNvbmZpZ19yZXF1ZXN0IG1lbTsKKwlpbnQgciwgaSwgY29uZmlnX3BhZ2Vfc3o7CiAJdTE2IGlvY19zdGF0dXM7CiAKIAkqdm9sdW1lX2hhbmRsZSA9IDA7CkBAIC0xNzUxLDQwICsxMzE2LDI3IEBACiAJbXBpX3JlcXVlc3QuSGVhZGVyLlBhZ2VOdW1iZXIgPSAwOwogCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCiAJbXBpX3JlcXVlc3QuUGFnZUFkZHJlc3MgPQogCSAgICBjcHVfdG9fbGUzMihNUEkyX1JBSURfUEdBRF9GT1JNX0FDVElWRV9DT05GSUcpOwogCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX1JFQURfQ1VSUkVOVDsKLQltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBtcGlfcmVwbHkuSGVhZGVyLlBhZ2VWZXJzaW9uOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gbXBpX3JlcGx5LkhlYWRlci5QYWdlTnVtYmVyOwotCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlVHlwZSA9IG1waV9yZXBseS5IZWFkZXIuUGFnZVR5cGU7Ci0JbXBpX3JlcXVlc3QuRXh0UGFnZUxlbmd0aCA9IG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoOwotCW1waV9yZXF1ZXN0LkV4dFBhZ2VUeXBlID0gbXBpX3JlcGx5LkV4dFBhZ2VUeXBlOwotCW1lbS5jb25maWdfcGFnZV9zeiA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoKSAqIDQ7Ci0JaWYgKG1lbS5jb25maWdfcGFnZV9zeiA+IGlvYy0+Y29uZmlnX3BhZ2Vfc3opIHsKLQkJciA9IF9jb25maWdfYWxsb2NfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UgewotCQltZW0uY29uZmlnX3BhZ2VfZG1hID0gaW9jLT5jb25maWdfcGFnZV9kbWE7Ci0JCW1lbS5jb25maWdfcGFnZSA9IGlvYy0+Y29uZmlnX3BhZ2U7Ci0JfQotCWlvYy0+YmFzZV9hZGRfc2dfc2luZ2xlKCZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFLAotCSAgICBNUFQyX0NPTkZJR19DT01NT05fU0dMRkxBR1MgfCBtZW0uY29uZmlnX3BhZ2Vfc3osCi0JICAgIG1lbS5jb25maWdfcGFnZV9kbWEpOworCWNvbmZpZ19wYWdlX3N6ID0gKGxlMTZfdG9fY3B1KG1waV9yZXBseS5FeHRQYWdlTGVuZ3RoKSAqIDQpOworCWNvbmZpZ19wYWdlID0ga21hbGxvYyhjb25maWdfcGFnZV9zeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25maWdfcGFnZSkKKwkJZ290byBvdXQ7CiAJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgJm1waV9yZXBseSwKLQkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQpOworCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIGNvbmZpZ19wYWdlX3N6KTsKIAlpZiAocikKIAkJZ290byBvdXQ7CiAKIAlyID0gLTE7CiAJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYgTVBJMl9JT0NTVEFUVVNfTUFTSzsKIAlpZiAoaW9jX3N0YXR1cyAhPSBNUEkyX0lPQ1NUQVRVU19TVUNDRVNTKQotCQlnb3RvIGRvbmU7Ci0JY29uZmlnX3BhZ2UgPSBtZW0uY29uZmlnX3BhZ2U7CisJCWdvdG8gb3V0OwogCWZvciAoaSA9IDA7IGkgPCBjb25maWdfcGFnZS0+TnVtRWxlbWVudHM7IGkrKykgewogCQlpZiAoKGNvbmZpZ19wYWdlLT5Db25maWdFbGVtZW50W2ldLkVsZW1lbnRGbGFncyAmCiAJCSAgICBNUEkyX1JBSURDT05GSUcwX0VGTEFHU19NQVNLX0VMRU1FTlRfVFlQRSkgIT0KQEAgLTE3OTUsMTUgKzEzNDcsMTEgQEAKIAkJCSp2b2x1bWVfaGFuZGxlID0gbGUxNl90b19jcHUoY29uZmlnX3BhZ2UtPgogCQkJICAgIENvbmZpZ0VsZW1lbnRbaV0uVm9sRGV2SGFuZGxlKTsKIAkJCXIgPSAwOwotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0KLSBkb25lOgotCWlmIChtZW0uY29uZmlnX3BhZ2Vfc3ogPiBpb2MtPmNvbmZpZ19wYWdlX3N6KQotCQlfY29uZmlnX2ZyZWVfY29uZmlnX2RtYV9tZW1vcnkoaW9jLCAmbWVtKTsKLQogIG91dDoKKwlrZnJlZShjb25maWdfcGFnZSk7CiAJcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCmluZGV4IDE0ZTQ3M2QuLmMyYTUxMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwpAQCAtMTk2Myw3ICsxOTYzLDYgQEAKIHsKIAllbnVtIGJsb2NrX3N0YXRlIHN0YXRlOwogCWxvbmcgcmV0ID0gLUVJTlZBTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3RhdGUgPSAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gTk9OX0JMT0NLSU5HIDoKIAkgICAgQkxPQ0tJTkc7CkBAIC0xOTg5LDEzICsxOTg4LDggQEAKIAkJICAgICFpb2MpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwotCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywKLQkJCSAgICBmbGFncyk7CisJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQogCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChfSU9DX1NJWkUoY21kKSA9PSBzaXplb2Yoc3RydWN0IG1wdDJfaW9jdGxfY29tbWFuZCkpIHsKIAkJCXVhcmcgPSBhcmc7CkBAIC0yMDk4LDcgKzIwOTIsNiBAQAogCXN0cnVjdCBtcHQyX2lvY3RsX2NvbW1hbmQga2FyZzsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2M7CiAJZW51bSBibG9ja19zdGF0ZSBzdGF0ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKF9JT0NfU0laRShjbWQpICE9IHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kMzIpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIxMTMsMTMgKzIxMDYsOCBAQAogCWlmIChfY3RsX3ZlcmlmeV9hZGFwdGVyKGthcmczMi5oZHIuaW9jX251bWJlciwgJmlvYykgPT0gLTEgfHwgIWlvYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwotCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssCi0JCSAgICBmbGFncyk7CisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCiAJCXJldHVybiAtRUFHQUlOOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CiAKIAltZW1zZXQoJmthcmcsIDAsIHNpemVvZihzdHJ1Y3QgbXB0Ml9pb2N0bF9jb21tYW5kKSk7CiAJa2FyZy5oZHIuaW9jX251bWJlciA9IGthcmczMi5oZHIuaW9jX251bWJlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwppbmRleCAyZTlhNDQ0Li43NzRiMzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCkBAIC0xMDMsNyArMTAzLDYgQEAKIH07CiAKIAotI2RlZmluZSBNUFQyU0FTX1JFU0NBTl9BRlRFUl9IT1NUX1JFU0VUICgweEZGRkYpCiAvKioKICAqIHN0cnVjdCBmd19ldmVudF93b3JrIC0gZmlybXdhcmUgZXZlbnQgc3RydWN0CiAgKiBAbGlzdDogbGluayBsaXN0IGZyYW1ld29yawpAQCAtMTUwMiw3ICsxNTAxLDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBNUEkyX1JBSURfVk9MX1RZUEVfUkFJRDFFOgogCQkJcWRlcHRoID0gTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRIOwotCQkJcl9sZXZlbCA9ICJSQUlEMUUiOworCQkJaWYgKGlvYy0+bWFudV9wZzEwLk9FTUlkZW50aWZpZXIgJiYKKwkJCSAgICAoaW9jLT5tYW51X3BnMTAuR2VuZXJpY0ZsYWdzMCAmCisJCQkgICAgTUZHMTBfR0YwX1IxMF9ESVNQTEFZKSAmJgorCQkJICAgICEocmFpZF9kZXZpY2UtPm51bV9wZHMgJSAyKSkKKwkJCQlyX2xldmVsID0gIlJBSUQxMCI7CisJCQllbHNlCisJCQkJcl9sZXZlbCA9ICJSQUlEMUUiOwogCQkJYnJlYWs7CiAJCWNhc2UgTVBJMl9SQUlEX1ZPTF9UWVBFX1JBSUQxOgogCQkJcWRlcHRoID0gTVBUMlNBU19SQUlEX1FVRVVFX0RFUFRIOwpAQCAtMTc4NiwxNyArMTc5MSwxOCBAQAogCXUzMiBpb2Nfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKIAl1OCBWRl9JRCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQgfHwKLQkgICAgaW9jLT5zaG9zdF9yZWNvdmVyeSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB0bV9jbWQgYnVzeSEhIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKIAkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAogCWlvY19zdGF0ZSA9IG1wdDJzYXNfYmFzZV9nZXRfaW9jc3RhdGUoaW9jLCAwKTsKIAlpZiAoaW9jX3N0YXRlICYgTVBJMl9ET09SQkVMTF9VU0VEKSB7CkBAIC0xODMwLDYgKzE4MzYsNyBAQAogCW1waV9yZXF1ZXN0LT5UYXNrTUlEID0gY3B1X3RvX2xlMTYoc21pZF90YXNrKTsKIAlpbnRfdG9fc2NzaWx1bihsdW4sIChzdHJ1Y3Qgc2NzaV9sdW4gKiltcGlfcmVxdWVzdC0+TFVOKTsKIAltcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKGlvYywgaGFuZGxlKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+dG1fY21kcy5kb25lKTsKIAltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkLCBWRl9JRCk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+dG1fY21kcy5kb25lLCB0aW1lb3V0KkhaKTsKIAltcHQyc2FzX3Njc2loX2NsZWFyX3RtX2ZsYWcoaW9jLCBoYW5kbGUpOwpAQCAtMjIyMiw3ICsyMjI5LDcgQEAKIAkJCSAgICBNUFQyU0FTX0lORk9fRk1UICJTREVWX1JVTk5JTkc6ICIKIAkJCSAgICAiaGFuZGxlKDB4JTA0eClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlKSk7CiAJCQlzYXNfZGV2aWNlX3ByaXZfZGF0YS0+YmxvY2sgPSAwOwotCQkJc2NzaV9kZXZpY2Vfc2V0X3N0YXRlKHNkZXYsIFNERVZfUlVOTklORyk7CisJCQlzY3NpX2ludGVybmFsX2RldmljZV91bmJsb2NrKHNkZXYpOwogCQl9CiAJfQogfQpAQCAtMjI1MSw3ICsyMjU4LDcgQEAKIAkJCSAgICBNUFQyU0FTX0lORk9fRk1UICJTREVWX0JMT0NLOiAiCiAJCQkgICAgImhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOwogCQkJc2FzX2RldmljZV9wcml2X2RhdGEtPmJsb2NrID0gMTsKLQkJCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0JMT0NLKTsKKwkJCXNjc2lfaW50ZXJuYWxfZGV2aWNlX2Jsb2NrKHNkZXYpOwogCQl9CiAJfQogfQpAQCAtMjMyNyw2ICsyMzM0LDcgQEAKIAl1MTYgaGFuZGxlOwogCXUxNiByZWFzb25fY29kZTsKIAl1OCBwaHlfbnVtYmVyOworCXU4IGxpbmtfcmF0ZTsKIAogCWZvciAoaSA9IDA7IGkgPCBldmVudF9kYXRhLT5OdW1FbnRyaWVzOyBpKyspIHsKIAkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKQEAgLTIzMzcsNiArMjM0NSwxMSBAQAogCQkgICAgTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19NQVNLOwogCQlpZiAocmVhc29uX2NvZGUgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19ERUxBWV9OT1RfUkVTUE9ORElORykKIAkJCV9zY3NpaF9ibG9ja19pb19kZXZpY2UoaW9jLCBoYW5kbGUpOworCQlpZiAocmVhc29uX2NvZGUgPT0gTVBJMl9FVkVOVF9TQVNfVE9QT19SQ19QSFlfQ0hBTkdFRCkgeworCQkJbGlua19yYXRlID0gZXZlbnRfZGF0YS0+UEhZW2ldLkxpbmtSYXRlID4+IDQ7CisJCQlpZiAobGlua19yYXRlID49IE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81KQorCQkJCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlvYywgaGFuZGxlKTsKKwkJfQogCX0KIH0KIApAQCAtMjQwNSwyNyArMjQxOCw2IEBACiB9CiAKIC8qKgotICogX3Njc2loX3F1ZXVlX3Jlc2NhbiAtIHF1ZXVlIGEgdG9wb2xvZ3kgcmVzY2FuIGZyb20gdXNlciBjb250ZXh0Ci0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqCi0gKiBSZXR1cm4gbm90aGluZy4KLSAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9xdWV1ZV9yZXNjYW4oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQotewotCXN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudDsKLQotCWlmIChpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlKQotCQlyZXR1cm47Ci0JZndfZXZlbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZndfZXZlbnRfd29yayksIEdGUF9BVE9NSUMpOwotCWlmICghZndfZXZlbnQpCi0JCXJldHVybjsKLQlmd19ldmVudC0+ZXZlbnQgPSBNUFQyU0FTX1JFU0NBTl9BRlRFUl9IT1NUX1JFU0VUOwotCWZ3X2V2ZW50LT5pb2MgPSBpb2M7Ci0JX3Njc2loX2Z3X2V2ZW50X2FkZChpb2MsIGZ3X2V2ZW50KTsKLX0KLQotLyoqCiAgKiBfc2NzaWhfZmx1c2hfcnVubmluZ19jbWRzIC0gY29tcGxldGluZyBvdXRzdGFuZGluZyBjb21tYW5kcy4KICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICoKQEAgLTI0NTYsNDYgKzI0NDgsNiBAQAogfQogCiAvKioKLSAqIG1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGNhbGxiYWNrIGhhbmRsZXIgKGZvciBzY3NpaCkKLSAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQHJlc2V0X3BoYXNlOiBwaGFzZQotICoKLSAqIFRoZSBoYW5kbGVyIGZvciBkb2luZyBhbnkgcmVxdWlyZWQgY2xlYW51cCBvciBpbml0aWFsaXphdGlvbi4KLSAqCi0gKiBUaGUgcmVzZXQgcGhhc2UgY2FuIGJlIE1QVDJfSU9DX1BSRV9SRVNFVCwgTVBUMl9JT0NfQUZURVJfUkVTRVQsCi0gKiBNUFQyX0lPQ19ET05FX1JFU0VUCi0gKgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXZvaWQKLW1wdDJzYXNfc2NzaWhfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKLXsKLQlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7Ci0JY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6Ci0JCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKLQkJICAgICJNUFQyX0lPQ19QUkVfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKLQkJX3Njc2loX2Z3X2V2ZW50X29mZihpb2MpOwotCQlicmVhazsKLQljYXNlIE1QVDJfSU9DX0FGVEVSX1JFU0VUOgotCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCi0JCSAgICAiTVBUMl9JT0NfQUZURVJfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKLQkJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9QRU5ESU5HKSB7Ci0JCQlpb2MtPnRtX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX1JFU0VUOwotCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIGlvYy0+dG1fY21kcy5zbWlkKTsKLQkJCWNvbXBsZXRlKCZpb2MtPnRtX2NtZHMuZG9uZSk7Ci0JCX0KLQkJX3Njc2loX2Z3X2V2ZW50X29uKGlvYyk7Ci0JCV9zY3NpaF9mbHVzaF9ydW5uaW5nX2NtZHMoaW9jKTsKLQkJYnJlYWs7Ci0JY2FzZSBNUFQyX0lPQ19ET05FX1JFU0VUOgotCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCi0JCSAgICAiTVBUMl9JT0NfRE9ORV9SRVNFVFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwotCQlfc2NzaWhfcXVldWVfcmVzY2FuKGlvYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoqCiAgKiBfc2NzaWhfc2V0dXBfZWVkcCAtIHNldHVwIE1QSSByZXF1ZXN0IGZvciBFRURQIHRyYW5zZmVyCiAgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgb2JqZWN0CiAgKiBAbXBpX3JlcXVlc3Q6IHBvaW50ZXIgdG8gdGhlIFNDU0lfSU8gcmVxZXN0IG1lc3NhZ2UgZnJhbWUKQEAgLTI2MTUsNyArMjU2Nyw2IEBACiAJTXBpMlNDU0lJT1JlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CiAJdTMyIG1waV9jb250cm9sOwogCXUxNiBzbWlkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzY21kLT5zY3NpX2RvbmUgPSBkb25lOwogCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKQEAgLTI2MzQsMTMgKzI1ODUsMTAgQEAKIAl9CiAKIAkvKiBzZWUgaWYgd2UgYXJlIGJ1c3kgd2l0aCB0YXNrIG1hbmFnbWVudCBzdHVmZiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaWYgKHNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5IHx8Ci0JICAgIGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CisJaWYgKHNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5KQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOworCWVsc2UgaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkgfHwgaW9jLT5pb2NfbGlua19yZXNldF9pbl9wcm9ncmVzcykKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAogCWlmIChzY21kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpCiAJCW1waV9jb250cm9sID0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9SRUFEOwpAQCAtMzE4OSwyNSArMzEzNyw2IEBACiB9CiAKIC8qKgotICogX3Njc2loX2xpbmtfY2hhbmdlIC0gcHJvY2VzcyBwaHkgbGluayBjaGFuZ2VzCi0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBoYW5kbGU6IHBoeSBoYW5kbGUKLSAqIEBhdHRhY2hlZF9oYW5kbGU6IHZhbGlkIGZvciBkZXZpY2VzIGF0dGFjaGVkIHRvIGxpbmsKLSAqIEBwaHlfbnVtYmVyOiBwaHkgbnVtYmVyCi0gKiBAbGlua19yYXRlOiBuZXcgbGluayByYXRlCi0gKiBDb250ZXh0OiB1c2VyLgotICoKLSAqIFJldHVybiBub3RoaW5nLgotICovCi1zdGF0aWMgdm9pZAotX3Njc2loX2xpbmtfY2hhbmdlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSwgdTE2IGF0dGFjaGVkX2hhbmRsZSwKLSAgIHU4IHBoeV9udW1iZXIsIHU4IGxpbmtfcmF0ZSkKLXsKLQltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfcGh5X2xpbmtfY2hhbmdlKGlvYywgaGFuZGxlLCBhdHRhY2hlZF9oYW5kbGUsCi0JICAgIHBoeV9udW1iZXIsIGxpbmtfcmF0ZSk7Ci19Ci0KLS8qKgogICogX3Njc2loX3Nhc19ob3N0X3JlZnJlc2ggLSByZWZyZXNoaW5nIHNhcyBob3N0IG9iamVjdCBjb250ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAdXBkYXRlOiB1cGRhdGUgbGluayBpbmZvcm1hdGlvbgpAQCAtMzI1MSw3ICszMTgwLDggQEAKIAkJCSAgICBsZTE2X3RvX2NwdShzYXNfaW91bml0X3BnMC0+UGh5RGF0YVtpXS4KIAkJCQlDb250cm9sbGVyRGV2SGFuZGxlKTsKIAkJCWlmICh1cGRhdGUpCi0JCQkJX3Njc2loX2xpbmtfY2hhbmdlKGlvYywKKwkJCQltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3MoCisJCQkJICAgIGlvYywKIAkJCQkgICAgaW9jLT5zYXNfaGJhLnBoeVtpXS5oYW5kbGUsCiAJCQkJICAgIGxlMTZfdG9fY3B1KHNhc19pb3VuaXRfcGcwLT5QaHlEYXRhW2ldLgogCQkJCSAgICBBdHRhY2hlZERldkhhbmRsZSksIGksCkBAIC0zNDM2LDYgKzMzNjYsOSBAQAogCWlmICghaGFuZGxlKQogCQlyZXR1cm4gLTE7CiAKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKKwkJcmV0dXJuIC0xOworCiAJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfZXhwYW5kZXJfcGcwKGlvYywgJm1waV9yZXBseSwgJmV4cGFuZGVyX3BnMCwKIAkgICAgTVBJMl9TQVNfRVhQQU5EX1BHQURfRk9STV9ITkRMLCBoYW5kbGUpKSkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLApAQCAtMzU3Miw2ICszNTA1LDkgQEAKIAlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CiAJc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CkBAIC0zNzQzLDYgKzM2NzksOCBAQAogCQltdXRleF91bmxvY2soJmlvYy0+dG1fY21kcy5tdXRleCk7CiAJCWRld3RwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaXNzdWUgdGFyZ2V0IHJlc2V0ICIKIAkJICAgICJkb25lOiBoYW5kbGUoMHglMDR4KVxuIiwgaW9jLT5uYW1lLCBkZXZpY2VfaGFuZGxlKSk7CisJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQorCQkJZ290byBvdXQ7CiAJfQogCiAJLyogU0FTX0lPX1VOSVRfQ05UUiAtIHNlbmQgUkVNT1ZFX0RFVklDRSAqLwpAQCAtMzc2NSw2ICszNzAzLDkgQEAKIAkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LklPQ0xvZ0luZm8pKSk7CiAKICBvdXQ6CisKKwlfc2NzaWhfdWJsb2NrX2lvX2RldmljZShpb2MsIGhhbmRsZSk7CisKIAltcHQyc2FzX3RyYW5zcG9ydF9wb3J0X3JlbW92ZShpb2MsIHNhc19kZXZpY2UtPnNhc19hZGRyZXNzLAogCSAgICBzYXNfZGV2aWNlLT5wYXJlbnRfaGFuZGxlKTsKIApAQCAtMzkwOCw2ICszODQ5LDggQEAKIAkJCSAgICAiZXhwYW5kZXIgZXZlbnRcbiIsIGlvYy0+bmFtZSkpOwogCQkJcmV0dXJuOwogCQl9CisJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQorCQkJcmV0dXJuOwogCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCiAJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCiAJCQljb250aW51ZTsKQEAgLTM5MjMsOSArMzg2NiwxMCBAQAogCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19BRERFRDoKIAkJCWlmICghcGFyZW50X2hhbmRsZSkgewogCQkJCWlmIChwaHlfbnVtYmVyIDwgaW9jLT5zYXNfaGJhLm51bV9waHlzKQotCQkJCQlfc2NzaWhfbGlua19jaGFuZ2UoaW9jLAotCQkJCQkgICBpb2MtPnNhc19oYmEucGh5W3BoeV9udW1iZXJdLmhhbmRsZSwKLQkJCQkJICAgaGFuZGxlLCBwaHlfbnVtYmVyLCBsaW5rX3JhdGVfKTsKKwkJCQkJbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX2xpbmtzKAorCQkJCQlpb2MsCisJCQkJCWlvYy0+c2FzX2hiYS5waHlbcGh5X251bWJlcl0uaGFuZGxlLAorCQkJCQloYW5kbGUsIHBoeV9udW1iZXIsIGxpbmtfcmF0ZV8pOwogCQkJfSBlbHNlIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CiAJCQkJc2FzX2V4cGFuZGVyID0KQEAgLTM5MzUsMTcgKzM4NzksMTQgQEAKIAkJCQkgICAgZmxhZ3MpOwogCQkJCWlmIChzYXNfZXhwYW5kZXIpIHsKIAkJCQkJaWYgKHBoeV9udW1iZXIgPCBzYXNfZXhwYW5kZXItPm51bV9waHlzKQotCQkJCQkJX3Njc2loX2xpbmtfY2hhbmdlKGlvYywKLQkJCQkJCSAgIHNhc19leHBhbmRlci0+Ci0JCQkJCQkgICBwaHlbcGh5X251bWJlcl0uaGFuZGxlLAotCQkJCQkJICAgaGFuZGxlLCBwaHlfbnVtYmVyLAotCQkJCQkJICAgbGlua19yYXRlXyk7CisJCQkJCQltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3MoCisJCQkJCQlpb2MsCisJCQkJCQlzYXNfZXhwYW5kZXItPgorCQkJCQkJcGh5W3BoeV9udW1iZXJdLmhhbmRsZSwKKwkJCQkJCWhhbmRsZSwgcGh5X251bWJlciwKKwkJCQkJCWxpbmtfcmF0ZV8pOwogCQkJCX0KIAkJCX0KLQkJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1BIWV9DSEFOR0VEKSB7Ci0JCQkJaWYgKGxpbmtfcmF0ZV8gPj0gTVBJMl9TQVNfTkVHX0xJTktfUkFURV8xXzUpCi0JCQkJCV9zY3NpaF91YmxvY2tfaW9fZGV2aWNlKGlvYywgaGFuZGxlKTsKLQkJCX0KIAkJCWlmIChyZWFzb25fY29kZSA9PSBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfQURERUQpIHsKIAkJCQlpZiAobGlua19yYXRlXyA8IE1QSTJfU0FTX05FR19MSU5LX1JBVEVfMV81KQogCQkJCQlicmVhazsKQEAgLTQ0NTUsNyArNDM5Niw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlfc2NzaWhfbGlua19jaGFuZ2UoaW9jLAorCW1wdDJzYXNfdHJhbnNwb3J0X3VwZGF0ZV9saW5rcyhpb2MsCiAJICAgIGxlMTZfdG9fY3B1KHNhc19kZXZpY2VfcGcwLlBhcmVudERldkhhbmRsZSksCiAJICAgIGhhbmRsZSwgc2FzX2RldmljZV9wZzAuUGh5TnVtLCBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSk7CiAKQEAgLTQ3NDQsNyArNDY4NSw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlfc2NzaWhfbGlua19jaGFuZ2UoaW9jLAorCQltcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3MoaW9jLAogCQkgICAgbGUxNl90b19jcHUoc2FzX2RldmljZV9wZzAuUGFyZW50RGV2SGFuZGxlKSwKIAkJICAgIGhhbmRsZSwgc2FzX2RldmljZV9wZzAuUGh5TnVtLCBNUEkyX1NBU19ORUdfTElOS19SQVRFXzFfNSk7CiAKQEAgLTUxNTYsMjIgKzUwOTcsOSBAQAogX3Njc2loX3JlbW92ZV91bnJlc3BvbmRpbmdfZGV2aWNlcyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MpCiB7CiAJc3RydWN0IF9zYXNfZGV2aWNlICpzYXNfZGV2aWNlLCAqc2FzX2RldmljZV9uZXh0OwotCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlciwgKnNhc19leHBhbmRlcl9uZXh0OworCXN0cnVjdCBfc2FzX25vZGUgKnNhc19leHBhbmRlcjsKIAlzdHJ1Y3QgX3JhaWRfZGV2aWNlICpyYWlkX2RldmljZSwgKnJhaWRfZGV2aWNlX25leHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCV9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19zYXNfZGV2aWNlcyhpb2MpOwotCV9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19yYWlkX2RldmljZXMoaW9jKTsKLQlfc2NzaWhfc2VhcmNoX3Jlc3BvbmRpbmdfZXhwYW5kZXJzKGlvYyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwotCWlvYy0+c2hvc3RfcmVjb3ZlcnkgPSAwOwotCWlmIChpb2MtPnNob3N0LT5zaG9zdF9zdGF0ZSA9PSBTSE9TVF9SRUNPVkVSWSkgewotCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAicHV0dGluZyBjb250cm9sbGVyIGludG8gIgotCQkgICAgIlNIT1NUX1JVTk5JTkdcbiIsIGlvYy0+bmFtZSk7Ci0JCXNjc2lfaG9zdF9zZXRfc3RhdGUoaW9jLT5zaG9zdCwgU0hPU1RfUlVOTklORyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYXNfZGV2aWNlLCBzYXNfZGV2aWNlX25leHQsCiAJICAgICZpb2MtPnNhc19kZXZpY2VfbGlzdCwgbGlzdCkgewpAQCAtNTIwNywxNiArNTEzNSw2MyBAQAogCQlfc2NzaWhfcmFpZF9kZXZpY2VfcmVtb3ZlKGlvYywgcmFpZF9kZXZpY2UpOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYXNfZXhwYW5kZXIsIHNhc19leHBhbmRlcl9uZXh0LAotCSAgICAmaW9jLT5zYXNfZXhwYW5kZXJfbGlzdCwgbGlzdCkgeworIHJldHJ5X2V4cGFuZGVyX3NlYXJjaDoKKwlzYXNfZXhwYW5kZXIgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2FzX2V4cGFuZGVyLCAmaW9jLT5zYXNfZXhwYW5kZXJfbGlzdCwgbGlzdCkgewogCQlpZiAoc2FzX2V4cGFuZGVyLT5yZXNwb25kaW5nKSB7CiAJCQlzYXNfZXhwYW5kZXItPnJlc3BvbmRpbmcgPSAwOwogCQkJY29udGludWU7CiAJCX0KLQkJcHJpbnRrKCJcdHJlbW92aW5nIGV4cGFuZGVyOiBoYW5kbGUoMHglMDR4KSwgIgotCQkgICAgIiBzYXNfYWRkcigweCUwMTZsbHgpXG4iLCBzYXNfZXhwYW5kZXItPmhhbmRsZSwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2FzX2V4cGFuZGVyLT5zYXNfYWRkcmVzcyk7CiAJCV9zY3NpaF9leHBhbmRlcl9yZW1vdmUoaW9jLCBzYXNfZXhwYW5kZXItPmhhbmRsZSk7CisJCWdvdG8gcmV0cnlfZXhwYW5kZXJfc2VhcmNoOworCX0KK30KKworLyoqCisgKiBtcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIgLSByZXNldCBjYWxsYmFjayBoYW5kbGVyIChmb3Igc2NzaWgpCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEByZXNldF9waGFzZTogcGhhc2UKKyAqCisgKiBUaGUgaGFuZGxlciBmb3IgZG9pbmcgYW55IHJlcXVpcmVkIGNsZWFudXAgb3IgaW5pdGlhbGl6YXRpb24uCisgKgorICogVGhlIHJlc2V0IHBoYXNlIGNhbiBiZSBNUFQyX0lPQ19QUkVfUkVTRVQsIE1QVDJfSU9DX0FGVEVSX1JFU0VULAorICogTVBUMl9JT0NfRE9ORV9SRVNFVAorICoKKyAqIFJldHVybiBub3RoaW5nLgorICovCit2b2lkCittcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpCit7CisJc3dpdGNoIChyZXNldF9waGFzZSkgeworCWNhc2UgTVBUMl9JT0NfUFJFX1JFU0VUOgorCQlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiAiCisJCSAgICAiTVBUMl9JT0NfUFJFX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCV9zY3NpaF9md19ldmVudF9vZmYoaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBNUFQyX0lPQ19BRlRFUl9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX0FGVEVSX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCWlmIChpb2MtPnRtX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUEVORElORykgeworCQkJaW9jLT50bV9jbWRzLnN0YXR1cyB8PSBNUFQyX0NNRF9SRVNFVDsKKwkJCW1wdDJzYXNfYmFzZV9mcmVlX3NtaWQoaW9jLCBpb2MtPnRtX2NtZHMuc21pZCk7CisJCQljb21wbGV0ZSgmaW9jLT50bV9jbWRzLmRvbmUpOworCQl9CisJCV9zY3NpaF9md19ldmVudF9vbihpb2MpOworCQlfc2NzaWhfZmx1c2hfcnVubmluZ19jbWRzKGlvYyk7CisJCWJyZWFrOworCWNhc2UgTVBUMl9JT0NfRE9ORV9SRVNFVDoKKwkJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlczogIgorCQkgICAgIk1QVDJfSU9DX0RPTkVfUkVTRVRcbiIsIGlvYy0+bmFtZSwgX19mdW5jX18pKTsKKwkJX3Njc2loX3Nhc19ob3N0X3JlZnJlc2goaW9jLCAwKTsKKwkJX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX3Nhc19kZXZpY2VzKGlvYyk7CisJCV9zY3NpaF9zZWFyY2hfcmVzcG9uZGluZ19yYWlkX2RldmljZXMoaW9jKTsKKwkJX3Njc2loX3NlYXJjaF9yZXNwb25kaW5nX2V4cGFuZGVycyhpb2MpOworCQlicmVhazsKKwljYXNlIE1QVDJfSU9DX1JVTk5JTkc6CisJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiJXM6ICIKKwkJICAgICJNUFQyX0lPQ19SVU5OSU5HXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CisJCV9zY3NpaF9yZW1vdmVfdW5yZXNwb25kaW5nX2RldmljZXMoaW9jKTsKKwkJYnJlYWs7CiAJfQogfQogCkBAIC01MjM2LDE0ICs1MjExLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYyA9IGZ3X2V2ZW50LT5pb2M7CiAKLQkvKiBUaGlzIGlzIGludm9rZWQgYnkgY2FsbGluZyBfc2NzaWhfcXVldWVfcmVzY2FuKCkuICovCi0JaWYgKGZ3X2V2ZW50LT5ldmVudCA9PSBNUFQyU0FTX1JFU0NBTl9BRlRFUl9IT1NUX1JFU0VUKSB7Ci0JCV9zY3NpaF9md19ldmVudF9mcmVlKGlvYywgZndfZXZlbnQpOwotCQlfc2NzaWhfc2FzX2hvc3RfcmVmcmVzaChpb2MsIDEpOwotCQlfc2NzaWhfcmVtb3ZlX3VucmVzcG9uZGluZ19kZXZpY2VzKGlvYyk7Ci0JCXJldHVybjsKLQl9Ci0KIAkvKiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZCBzbyBpZ25vcmUgdGhpcyBldmVudCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKIAlpZiAoaW9jLT5md19ldmVudHNfb2ZmIHx8IGlvYy0+cmVtb3ZlX2hvc3QpIHsKQEAgLTUyNTMsMTMgKzUyMjAsMTAgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAkJX3Njc2loX2Z3X2V2ZW50X3JlcXVldWUoaW9jLCBmd19ldmVudCwgMTAwMCk7CiAJCXJldHVybjsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCiAJc3dpdGNoIChmd19ldmVudC0+ZXZlbnQpIHsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9MT0dZX0NIQU5HRV9MSVNUOgpAQCAtNTQ2MSw2ICs1NDI1LDggQEAKIAkJCWlmICghc2FzX2RldmljZSkKIAkJCQljb250aW51ZTsKIAkJCV9zY3NpaF9yZW1vdmVfZGV2aWNlKGlvYywgc2FzX2RldmljZS0+aGFuZGxlKTsKKwkJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQorCQkJCXJldHVybjsKIAkJCWdvdG8gcmV0cnlfZGV2aWNlX3NlYXJjaDsKIAkJfQogCX0KQEAgLTU0ODIsNiArNTQ0OCw4IEBACiAJCQlpZiAoIWV4cGFuZGVyX3NpYmxpbmcpCiAJCQkJY29udGludWU7CiAJCQlfc2NzaWhfZXhwYW5kZXJfcmVtb3ZlKGlvYywgZXhwYW5kZXJfc2libGluZy0+aGFuZGxlKTsKKwkJCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KQorCQkJCXJldHVybjsKIAkJCWdvdG8gcmV0cnlfZXhwYW5kZXJfc2VhcmNoOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggNjg2Njk1Yi4uNzQyMzI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC0xNDAsMTEgKzE0MCwxOCBAQAogCXUzMiBkZXZpY2VfaW5mbzsKIAl1MzIgaW9jX3N0YXR1czsKIAorCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCisJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCiAJaWYgKChtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2RldmljZV9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmc2FzX2RldmljZV9wZzAsCiAJICAgIE1QSTJfU0FTX0RFVklDRV9QR0FEX0ZPUk1fSEFORExFLCBoYW5kbGUpKSkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAorCiAJCSAgICBpb2MtPm5hbWUsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5YSU87CiAJfQogCiAJaW9jX3N0YXR1cyA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS5JT0NTdGF0dXMpICYKQEAgLTE1Myw3ICsxNjAsNyBAQAogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJoYW5kbGUoMHglMDR4KSwgaW9jX3N0YXR1cygweCUwNHgpIgogCQkgICAgIlxuZmFpbHVyZSBhdCAlczolZC8lcygpIVxuIiwgaW9jLT5uYW1lLCBoYW5kbGUsIGlvY19zdGF0dXMsCiAJCSAgICAgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCiAJbWVtc2V0KGlkZW50aWZ5LCAwLCBzaXplb2YoaWRlbnRpZnkpKTsKQEAgLTI4OCwyMSArMjk1LDE3IEBACiAJdm9pZCAqcHNnZTsKIAl1MzIgc2dsX2ZsYWdzOwogCXU4IGlzc3VlX3Jlc2V0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgKmRhdGFfb3V0ID0gTlVMTDsKIAlkbWFfYWRkcl90IGRhdGFfb3V0X2RtYTsKIAl1MzIgc3o7CiAJdTY0ICpzYXNfYWRkcmVzc19sZTsKIAl1MTYgd2FpdF9zdGF0ZV9jb3VudDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7Ci0JaWYgKGlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgewogCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAogCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrLCBmbGFncyk7CiAKIAltdXRleF9sb2NrKCZpb2MtPnRyYW5zcG9ydF9jbWRzLm11dGV4KTsKIApAQCAtNzg5LDcgKzc5Miw3IEBACiB9CiAKIC8qKgotICogbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX3BoeV9saW5rX2NoYW5nZSAtIHJlZnJlc2hpbmcgcGh5IGxpbmsgY2hhbmdlcyBhbmQgYXR0YWNoZWQgZGV2aWNlcworICogbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX2xpbmtzIC0gcmVmcmVzaGluZyBwaHkgbGluayBjaGFuZ2VzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBoYW5kbGU6IGhhbmRsZSB0byBzYXNfaG9zdCBvciBleHBhbmRlcgogICogQGF0dGFjaGVkX2hhbmRsZTogYXR0YWNoZWQgZGV2aWNlIGhhbmRsZQpAQCAtNzk5LDEzICs4MDIsMTkgQEAKICAqIFJldHVybnMgbm90aGluZy4KICAqLwogdm9pZAotbXB0MnNhc190cmFuc3BvcnRfdXBkYXRlX3BoeV9saW5rX2NoYW5nZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCittcHQyc2FzX3RyYW5zcG9ydF91cGRhdGVfbGlua3Moc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHUxNiBoYW5kbGUsIHUxNiBhdHRhY2hlZF9oYW5kbGUsIHU4IHBoeV9udW1iZXIsIHU4IGxpbmtfcmF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBfc2FzX25vZGUgKnNhc19ub2RlOwogCXN0cnVjdCBfc2FzX3BoeSAqbXB0MnNhc19waHk7CiAKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkJX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CiAJc2FzX25vZGUgPSBfdHJhbnNwb3J0X3Nhc19ub2RlX2ZpbmRfYnlfaGFuZGxlKGlvYywgaGFuZGxlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19ub2RlX2xvY2ssIGZsYWdzKTsKQEAgLTEwMjUsNyArMTAzNCw2IEBACiAJdm9pZCAqcHNnZTsKIAl1MzIgc2dsX2ZsYWdzOwogCXU4IGlzc3VlX3Jlc2V0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWRtYV9hZGRyX3QgZG1hX2FkZHJfaW4gPSAwOwogCWRtYV9hZGRyX3QgZG1hX2FkZHJfb3V0ID0gMDsKIAl1MTYgd2FpdF9zdGF0ZV9jb3VudDsKQEAgLTEwNDUsMTQgKzEwNTMsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKLQlpZiAoaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5pb2NfcmVzZXRfaW5fcHJvZ3Jlc3NfbG9jaywgZmxhZ3MpOworCWlmIChpb2MtPnNob3N0X3JlY292ZXJ5KSB7CiAJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaG9zdCByZXNldCBpbiBwcm9ncmVzcyFcbiIsCiAJCSAgICBfX2Z1bmNfXywgaW9jLT5uYW1lKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+aW9jX3Jlc2V0X2luX3Byb2dyZXNzX2xvY2ssIGZsYWdzKTsKIAogCXJjID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpb2MtPnRyYW5zcG9ydF9jbWRzLm11dGV4KTsKIAlpZiAocmMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYwppbmRleCA3MGI2MGFkLi5lMzJjMzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKQEAgLTE3MTMsNyArMTcxMyw3IEBACiAKIAluc3BfZGJnKE5TUF9ERUJVR19JTklULCAiaW4iKTsKIAotCWNmZ19tZW0gPSBremFsbG9jKHNpemVvZihjZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CisJY2ZnX21lbSA9IGt6YWxsb2Moc2l6ZW9mKCpjZmdfbWVtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjZmdfbWVtKQogCQlyZXR1cm4gLUVOT01FTTsKIAljZmdfbWVtLT5kYXRhID0gZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMDJmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0wLDAgKzEsNTYwNCBAQAorLyoKKyAqIHBtY3JhaWQuYyAtLSBkcml2ZXIgZm9yIFBNQyBTaWVycmEgTWF4UkFJRCBjb250cm9sbGVyIGFkYXB0ZXJzCisgKgorICogV3JpdHRlbiBCeTogUE1DIFNpZXJyYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBQTUMgU2llcnJhIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisgKiBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaWNhbS5oPgorCisjaW5jbHVkZSAicG1jcmFpZC5oIgorCisvKgorICogICBNb2R1bGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG1jcmFpZF9kZWJ1Z19sb2c7CitzdGF0aWMgdW5zaWduZWQgaW50IHBtY3JhaWRfZGlzYWJsZV9hZW47CitzdGF0aWMgdW5zaWduZWQgaW50IHBtY3JhaWRfbG9nX2xldmVsID0gSU9BU0NfTE9HX0xFVkVMX01VU1Q7CisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBtdWx0aXBsZSBhZGFwdGVycyBieSB0aGUgTExELgorICogcG1jcmFpZF9hZGFwdGVyX2NvdW50IC0gY291bnQgb2YgY29uZmlndXJlZCBhZGFwdGVycworICovCitzdGF0aWMgYXRvbWljX3QgcG1jcmFpZF9hZGFwdGVyX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CisKKy8qCisgKiBTdXBwb3J0aW5nIHVzZXItbGV2ZWwgY29udHJvbCBpbnRlcmZhY2UgdGhyb3VnaCBJT0NUTCBjb21tYW5kcy4KKyAqIHBtY3JhaWRfbWFqb3IgLSBtYWpvciBudW1iZXIgdG8gdXNlCisgKiBwbWNyYWlkX21pbm9yIC0gbWlub3IgbnVtYmVyKHMpIHRvIHVzZQorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHBtY3JhaWRfbWFqb3I7CitzdGF0aWMgc3RydWN0IGNsYXNzICpwbWNyYWlkX2NsYXNzOworREVDTEFSRV9CSVRNQVAocG1jcmFpZF9taW5vciwgUE1DUkFJRF9NQVhfQURBUFRFUlMpOworCisvKgorICogTW9kdWxlIHBhcmFtZXRlcnMKKyAqLworTU9EVUxFX0FVVEhPUigiUE1DIFNpZXJyYSBDb3Jwb3JhdGlvbiwgYW5pbF9yYXZpbmRyYW5hdGhAcG1jLXNpZXJyYS5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUE1DIFNpZXJyYSBNYXhSQUlEIENvbnRyb2xsZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihQTUNSQUlEX0RSSVZFUl9WRVJTSU9OKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGxvZ19sZXZlbCwgcG1jcmFpZF9sb2dfbGV2ZWwsIHVpbnQsIChTX0lSVUdPIHwgU19JV1VTUikpOworTU9EVUxFX1BBUk1fREVTQyhsb2dfbGV2ZWwsCisJCSAiRW5hYmxlcyBmaXJtd2FyZSBlcnJvciBjb2RlIGxvZ2dpbmcsIGRlZmF1bHQgOjEgaGlnaC1zZXZlcml0eSIKKwkJICIgZXJyb3JzLCAyOiBhbGwgZXJyb3JzIGluY2x1ZGluZyBoaWdoLXNldmVyaXR5IGVycm9ycywiCisJCSAiIDA6IGRpc2FibGVzIGxvZ2dpbmciKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBwbWNyYWlkX2RlYnVnX2xvZywgdWludCwgKFNfSVJVR08gfCBTX0lXVVNSKSk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorCQkgIkVuYWJsZSBkcml2ZXIgdmVyYm9zZSBtZXNzYWdlIGxvZ2dpbmcuIFNldCAxIHRvIGVuYWJsZS4iCisJCSAiKGRlZmF1bHQ6IDApIik7CisKK21vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX2FlbiwgcG1jcmFpZF9kaXNhYmxlX2FlbiwgdWludCwgKFNfSVJVR08gfCBTX0lXVVNSKSk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfYWVuLAorCQkgIkRpc2FibGUgZHJpdmVyIGFlbiBub3RpZmljYXRpb25zIHRvIGFwcHMuIFNldCAxIHRvIGRpc2FibGUuIgorCQkgIihkZWZhdWx0OiAwKSIpOworCisvKiBjaGlwIHNwZWNpZmljIGNvbnN0YW50cyBmb3IgUE1DIE1heFJBSUQgY29udHJvbGxlcnMgKHNhbWUgZm9yCisgKiAweDUyMjAgYW5kIDB4ODAxMAorICovCitzdGF0aWMgc3RydWN0IHBtY3JhaWRfY2hpcF9kZXRhaWxzIHBtY3JhaWRfY2hpcF9jZmdbXSA9IHsKKwl7CisJIC5pb2FzdGF0dXMgPSAweDAsCisJIC5pb2FycmluID0gMHgwMDA0MCwKKwkgLm1haWxib3ggPSAweDdGQzMwLAorCSAuZ2xvYmFsX2ludHJfbWFzayA9IDB4MDAwMzQsCisJIC5pb2FfaG9zdF9pbnRyID0gMHgwMDA5QywKKwkgLmlvYV9ob3N0X2ludHJfY2xyID0gMHgwMDBBMCwKKwkgLmlvYV9ob3N0X21hc2sgPSAweDdGQzI4LAorCSAuaW9hX2hvc3RfbWFza19jbHIgPSAweDdGQzI4LAorCSAuaG9zdF9pb2FfaW50ciA9IDB4MDAwMjAsCisJIC5ob3N0X2lvYV9pbnRyX2NsciA9IDB4MDAwMjAsCisJIC50cmFuc29wX3RpbWVvdXQgPSAzMDAKKwkgfQorfTsKKworLyoKKyAqIFBDSSBkZXZpY2UgaWRzIHN1cHBvcnRlZCBieSBwbWNyYWlkIGRyaXZlcgorICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcG1jcmFpZF9wY2lfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1BNQywgUENJX0RFVklDRV9JRF9QTUNfTUFYUkFJRCksCisJICAwLCAwLCAoa2VybmVsX3Vsb25nX3QpJnBtY3JhaWRfY2hpcF9jZmdbMF0KKwl9LAorCXt9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcG1jcmFpZF9wY2lfdGFibGUpOworCisKKworLyoqCisgKiBwbWNyYWlkX3NsYXZlX2FsbG9jIC0gUHJlcGFyZSBmb3IgY29tbWFuZHMgdG8gYSBkZXZpY2UKKyAqIEBzY3NpX2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgbWlkLWxheWVyIHByaW9yIHRvIHNlbmRpbmcgYW55IGNvbW1hbmQgdG8gdGhlIG5ldworICogZGV2aWNlLiBTdG9yZXMgcmVzb3VyY2UgZW50cnkgZGV0YWlscyBvZiB0aGUgZGV2aWNlIGluIHNjc2lfZGV2aWNlIHN0cnVjdC4KKyAqIFF1ZXVlY29tbWFuZCB1c2VzIHRoZSByZXNvdXJjZSBoYW5kbGUgYW5kIG90aGVyIGRldGFpbHMgdG8gZmlsbCB1cCBJT0FSQ0IKKyAqIHdoaWxlIHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIGRldmljZS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkgIDAgb24gc3VjY2VzcyAvIC1FTlhJTyBpZiBkZXZpY2UgZG9lcyBub3QgZXhpc3QKKyAqLworc3RhdGljIGludCBwbWNyYWlkX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYpCit7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnRlbXAsICpyZXMgPSBOVUxMOworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisJdTggdGFyZ2V0LCBidXMsIGx1bjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJaW50IHJjID0gLUVOWElPOworCXBpbnN0YW5jZSA9IHNob3N0X3ByaXYoc2NzaV9kZXYtPmhvc3QpOworCisJLyogRHJpdmVyIGV4cG9zZXMgVlNFVCBhbmQgR1NDU0kgcmVzb3VyY2VzIG9ubHk7IGFsbCBvdGhlciBkZXZpY2UgdHlwZXMKKwkgKiBhcmUgbm90IGV4cG9zZWQuIFJlc291cmNlIGxpc3QgaXMgc3luY2hyb25pemVkIHVzaW5nIHJlc291cmNlIGxvY2sKKwkgKiBzbyBhbnkgdHJhdmVyc2FsIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGxpc3Qgc2hvdWxkIGJlIGRvbmUgaW5zaWRlCisJICogdGhpcyBsb2NrCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wLCAmcGluc3RhbmNlLT51c2VkX3Jlc19xLCBxdWV1ZSkgeworCisJCS8qIGRvIG5vdCBleHBvc2UgVlNFVHMgd2l0aCBvcmRlci1pZHMgPj0gMjQwICovCisJCWlmIChSRVNfSVNfVlNFVCh0ZW1wLT5jZmdfZW50cnkpKSB7CisJCQl0YXJnZXQgPSB0ZW1wLT5jZmdfZW50cnkudW5pcXVlX2ZsYWdzMTsKKwkJCWlmICh0YXJnZXQgPj0gUE1DUkFJRF9NQVhfVlNFVF9UQVJHRVRTKQorCQkJCWNvbnRpbnVlOworCQkJYnVzID0gUE1DUkFJRF9WU0VUX0JVU19JRDsKKwkJCWx1biA9IDA7CisJCX0gZWxzZSBpZiAoUkVTX0lTX0dTQ1NJKHRlbXAtPmNmZ19lbnRyeSkpIHsKKwkJCXRhcmdldCA9IFJFU19UQVJHRVQodGVtcC0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MpOworCQkJYnVzID0gUE1DUkFJRF9QSFlTX0JVU19JRDsKKwkJCWx1biA9IFJFU19MVU4odGVtcC0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MpOworCQl9IGVsc2UgeworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYnVzID09IHNjc2lfZGV2LT5jaGFubmVsICYmCisJCSAgICB0YXJnZXQgPT0gc2NzaV9kZXYtPmlkICYmCisJCSAgICBsdW4gPT0gc2NzaV9kZXYtPmx1bikgeworCQkJcmVzID0gdGVtcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJlcykgeworCQlyZXMtPnNjc2lfZGV2ID0gc2NzaV9kZXY7CisJCXNjc2lfZGV2LT5ob3N0ZGF0YSA9IHJlczsKKwkJcmVzLT5jaGFuZ2VfZGV0ZWN0ZWQgPSAwOworCQlhdG9taWNfc2V0KCZyZXMtPnJlYWRfZmFpbHVyZXMsIDApOworCQlhdG9taWNfc2V0KCZyZXMtPndyaXRlX2ZhaWx1cmVzLCAwKTsKKwkJcmMgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssIGxvY2tfZmxhZ3MpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBwbWNyYWlkX3NsYXZlX2NvbmZpZ3VyZSAtIENvbmZpZ3VyZXMgYSBTQ1NJIGRldmljZQorICogQHNjc2lfZGV2OiBzY3NpIGRldmljZSBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1Y250aW9uIGlzIGV4ZWN1dGVkIGJ5IFNDU0kgbWlkIGxheWVyIGp1c3QgYWZ0ZXIgYSBkZXZpY2UgaXMgZmlyc3QKKyAqIHNjYW5uZWQgKGkuZS4gaXQgaGFzIHJlc3BvbmRlZCB0byBhbiBJTlFVSVJZKS4gRm9yIFZTRVQgcmVzb3VyY2VzLCB0aGUKKyAqIHRpbWVvdXQgdmFsdWUgKGRlZmF1bHQgMzBzKSB3aWxsIGJlIG92ZXItd3JpdHRlbiB0byBhIGhpZ2hlciB2YWx1ZSAoNjBzKQorICogYW5kIG1heF9zZWN0b3JzIHZhbHVlIHdpbGwgYmUgb3Zlci13cml0dGVuIHRvIDUxMi4gSXQgYWxzbyBzZXRzIHF1ZXVlIGRlcHRoCisgKiB0byBob3N0LT5jbWRfcGVyX2x1biB2YWx1ZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCSAgMCBvbiBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldikKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzID0gc2NzaV9kZXYtPmhvc3RkYXRhOworCisJaWYgKCFyZXMpCisJCXJldHVybiAwOworCisJLyogTExEIGV4cG9zZXMgVlNFVHMgYW5kIEVuY2xvc3VyZSBkZXZpY2VzIG9ubHkgKi8KKwlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSAmJgorCSAgICBzY3NpX2Rldi0+dHlwZSAhPSBUWVBFX0VOQ0xPU1VSRSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCXBtY3JhaWRfaW5mbygiY29uZmlndXJpbmcgJXg6JXg6JXg6JXhcbiIsCisJCSAgICAgc2NzaV9kZXYtPmhvc3QtPnVuaXF1ZV9pZCwKKwkJICAgICBzY3NpX2Rldi0+Y2hhbm5lbCwKKwkJICAgICBzY3NpX2Rldi0+aWQsCisJCSAgICAgc2NzaV9kZXYtPmx1bik7CisKKwlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSkgeworCQlzY3NpX2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CisJfSBlbHNlIGlmIChSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpIHsKKwkJc2NzaV9kZXYtPmFsbG93X3Jlc3RhcnQgPSAxOworCQlibGtfcXVldWVfcnFfdGltZW91dChzY3NpX2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJCQkgICAgIFBNQ1JBSURfVlNFVF9JT19USU1FT1VUKTsKKwkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHNjc2lfZGV2LT5yZXF1ZXN0X3F1ZXVlLAorCQkJCSAgICAgIFBNQ1JBSURfVlNFVF9NQVhfU0VDVE9SUyk7CisJfQorCisJaWYgKHNjc2lfZGV2LT50YWdnZWRfc3VwcG9ydGVkICYmCisJICAgIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpIHx8IFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkpIHsKKwkJc2NzaV9hY3RpdmF0ZV90Y3Eoc2NzaV9kZXYsIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aCk7CisJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHNjc2lfZGV2LCBNU0dfU0lNUExFX1RBRywKKwkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKKwl9IGVsc2UgeworCQlzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aChzY3NpX2RldiwgMCwKKwkJCQkJc2NzaV9kZXYtPmhvc3QtPmNtZF9wZXJfbHVuKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbWNyYWlkX3NsYXZlX2Rlc3Ryb3kgLSBVbmNvbmZpZ3VyZSBhIFNDU0kgZGV2aWNlIGJlZm9yZSByZW1vdmluZyBpdAorICoKKyAqIEBzY3NpX2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkgbWlkLWxheWVyIGJlZm9yZSByZW1vdmluZyBhIGRldmljZS4gUG9pbnRlciBhc3NpZ25tZW50cworICogZG9uZSBpbiBwbWNyYWlkX3NsYXZlX2FsbG9jIHdpbGwgYmUgcmVzZXQgdG8gTlVMTCBoZXJlLgorICoKKyAqIFJldHVybiB2YWx1ZQorICogICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfc2xhdmVfZGVzdHJveShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2KQoreworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXM7CisKKwlyZXMgPSAoc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKilzY3NpX2Rldi0+aG9zdGRhdGE7CisKKwlpZiAocmVzKQorCQlyZXMtPnNjc2lfZGV2ID0gTlVMTDsKKworCXNjc2lfZGV2LT5ob3N0ZGF0YSA9IE5VTEw7Cit9CisKKy8qKgorICogcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGggLSBDaGFuZ2UgdGhlIGRldmljZSdzIHF1ZXVlIGRlcHRoCisgKiBAc2NzaV9kZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQGRlcHRoOiBkZXB0aCB0byBzZXQKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqIAlhY3R1YWwgZGVwdGggc2V0CisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9jaGFuZ2VfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICpzY3NpX2RldiwgaW50IGRlcHRoKQoreworCWlmIChkZXB0aCA+IFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOKQorCQlkZXB0aCA9IFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOOworCisJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc2NzaV9kZXYsIHNjc2lfZ2V0X3RhZ190eXBlKHNjc2lfZGV2KSwgZGVwdGgpOworCisJcmV0dXJuIHNjc2lfZGV2LT5xdWV1ZV9kZXB0aDsKK30KKworLyoqCisgKiBwbWNyYWlkX2NoYW5nZV9xdWV1ZV90eXBlIC0gQ2hhbmdlIHRoZSBkZXZpY2UncyBxdWV1ZSB0eXBlCisgKiBAc2NzaV9kZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAorICogQHRhZzogdHlwZSBvZiB0YWdzIHRvIHVzZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAlhY3R1YWwgcXVldWUgdHlwZSBzZXQKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2NoYW5nZV9xdWV1ZV90eXBlKHN0cnVjdCBzY3NpX2RldmljZSAqc2NzaV9kZXYsIGludCB0YWcpCit7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKKworCXJlcyA9IChzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqKXNjc2lfZGV2LT5ob3N0ZGF0YTsKKworCWlmICgocmVzKSAmJiBzY3NpX2Rldi0+dGFnZ2VkX3N1cHBvcnRlZCAmJgorCSAgICAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSB8fCBSRVNfSVNfVlNFVChyZXMtPmNmZ19lbnRyeSkpKSB7CisJCXNjc2lfc2V0X3RhZ190eXBlKHNjc2lfZGV2LCB0YWcpOworCisJCWlmICh0YWcpCisJCQlzY3NpX2FjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKKwkJZWxzZQorCQkJc2NzaV9kZWFjdGl2YXRlX3RjcShzY3NpX2Rldiwgc2NzaV9kZXYtPnF1ZXVlX2RlcHRoKTsKKwl9IGVsc2UKKwkJdGFnID0gMDsKKworCXJldHVybiB0YWc7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX2luaXRfY21kYmxrIC0gaW5pdGlhbGl6ZXMgYSBjb21tYW5kIGJsb2NrCisgKgorICogQGNtZDogcG9pbnRlciB0byBzdHJ1Y3QgcG1jcmFpZF9jbWQgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEBpbmRleDogaWYgPj0wIGZpcnN0IHRpbWUgaW5pdGlhbGl6YXRpb247IG90aGVyd2lzZSByZWluaXRpYWxpemF0aW9uCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgTm9uZQorICovCit2b2lkIHBtY3JhaWRfaW5pdF9jbWRibGsoc3RydWN0IHBtY3JhaWRfY21kICpjbWQsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYiA9ICYoY21kLT5pb2FfY2ItPmlvYXJjYik7CisJZG1hX2FkZHJfdCBkbWFfYWRkciA9IGNtZC0+aW9hX2NiX2J1c19hZGRyOworCisJaWYgKGluZGV4ID49IDApIHsKKwkJLyogZmlyc3QgdGltZSBpbml0aWFsaXphdGlvbiAoY2FsbGVkIGZyb20gIHByb2JlKSAqLworCQl1MzIgaW9hc2Ffb2Zmc2V0ID0KKwkJCW9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX2NvbnRyb2xfYmxvY2ssIGlvYXNhKTsKKworCQljbWQtPmluZGV4ID0gaW5kZXg7CisJCWlvYXJjYi0+cmVzcG9uc2VfaGFuZGxlID0gY3B1X3RvX2xlMzIoaW5kZXggPDwgMik7CisJCWlvYXJjYi0+aW9hcmNiX2J1c19hZGRyID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpOworCQlpb2FyY2ItPmlvYXNhX2J1c19hZGRyID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIgKyBpb2FzYV9vZmZzZXQpOworCQlpb2FyY2ItPmlvYXNhX2xlbiA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2FzYSkpOworCX0gZWxzZSB7CisJCS8qIHJlLWluaXRpYWxpemF0aW9uIG9mIHZhcmlvdXMgbGVuZ3RocywgY2FsbGVkIG9uY2UgY29tbWFuZCBpcworCQkgKiBwcm9jZXNzZWQgYnkgSU9BCisJCSAqLworCQltZW1zZXQoJmNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiLCAwLCBQTUNSQUlEX01BWF9DREJfTEVOKTsKKwkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCA9IDA7CisJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczEgPSAwOworCQlpb2FyY2ItPmNtZF90aW1lb3V0ID0gMDsKKwkJaW9hcmNiLT5pb2FyY2JfYnVzX2FkZHIgJj0gKH4weDFGVUxMKTsKKwkJaW9hcmNiLT5pb2FkbF9idXNfYWRkciA9IDA7CisJCWlvYXJjYi0+aW9hZGxfbGVuZ3RoID0gMDsKKwkJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IDA7CisJCWlvYXJjYi0+YWRkX2NtZF9wYXJhbV9sZW5ndGggPSAwOworCQlpb2FyY2ItPmFkZF9jbWRfcGFyYW1fb2Zmc2V0ID0gMDsKKwkJY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjID0gMDsKKwkJY21kLT5pb2FfY2ItPmlvYXNhLnJlc2lkdWFsX2RhdGFfbGVuZ3RoID0gMDsKKwkJY21kLT51LnRpbWVfbGVmdCA9IDA7CisJfQorCisJY21kLT5jbWRfZG9uZSA9IE5VTEw7CisJY21kLT5zY3NpX2NtZCA9IE5VTEw7CisJY21kLT5yZWxlYXNlID0gMDsKKwljbWQtPmNvbXBsZXRpb25fcmVxID0gMDsKKwljbWQtPmRtYV9oYW5kbGUgPSAwOworCWluaXRfdGltZXIoJmNtZC0+dGltZXIpOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVpbml0X2NtZGJsayAtIHJlaW5pdGlhbGl6ZSBhIGNvbW1hbmQgYmxvY2sKKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIHN0cnVjdCBwbWNyYWlkX2NtZCB0byBiZSByZWluaXRpYWxpemVkCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgTm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3JlaW5pdF9jbWRibGsoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJcG1jcmFpZF9pbml0X2NtZGJsayhjbWQsIC0xKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2dldF9mcmVlX2NtZCAtIGdldCBhIGZyZWUgY21kIGJsb2NrIGZyb20gY29tbWFuZCBibG9jayBwb29sCisgKiBAcGluc3RhbmNlOiBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqCXJldHVybnMgcG9pbnRlciB0byBjbWQgYmxvY2sgb3IgTlVMTCBpZiBubyBibG9ja3MgYXJlIGF2YWlsYWJsZQorICovCitzdGF0aWMgc3RydWN0IHBtY3JhaWRfY21kICpwbWNyYWlkX2dldF9mcmVlX2NtZCgKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlCispCit7CisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCS8qIGZyZWUgY21kIGJsb2NrIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IGZyZWVfcG9vbF9sb2NrICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+ZnJlZV9wb29sX2xvY2ssIGxvY2tfZmxhZ3MpOworCisJaWYgKCFsaXN0X2VtcHR5KCZwaW5zdGFuY2UtPmZyZWVfY21kX3Bvb2wpKSB7CisJCWNtZCA9IGxpc3RfZW50cnkocGluc3RhbmNlLT5mcmVlX2NtZF9wb29sLm5leHQsCisJCQkJIHN0cnVjdCBwbWNyYWlkX2NtZCwgZnJlZV9saXN0KTsKKwkJbGlzdF9kZWwoJmNtZC0+ZnJlZV9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5mcmVlX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBjb21tYW5kIGJsb2NrIGJlZm9yZSBnaXZpbmcgaXQgdGhlIGNhbGxlciAqLworCWlmIChjbWQgIT0gTlVMTCkKKwkJcG1jcmFpZF9yZWluaXRfY21kYmxrKGNtZCk7CisJcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBwbWNyYWlkX3JldHVybl9jbWQgLSByZXR1cm4gYSBjb21wbGV0ZWQgY29tbWFuZCBibG9jayBiYWNrIGludG8gZnJlZSBwb29sCisgKiBAY21kOiBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGJsb2NrCisgKgorICogUmV0dXJuIFZhbHVlOgorICoJbm90aGluZworICovCit2b2lkIHBtY3JhaWRfcmV0dXJuX2NtZChzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5mcmVlX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY21kLT5mcmVlX2xpc3QsICZwaW5zdGFuY2UtPmZyZWVfY21kX3Bvb2wpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+ZnJlZV9wb29sX2xvY2ssIGxvY2tfZmxhZ3MpOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVhZF9pbnRlcnJ1cHRzIC0gIHJlYWRzIElPQSBpbnRlcnJ1cHRzCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiB2YWx1ZQorICoJIGludGVycnVwdHMgcmVhZCBmcm9tIElPQQorICovCitzdGF0aWMgdTMyIHBtY3JhaWRfcmVhZF9pbnRlcnJ1cHRzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJcmV0dXJuIGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X3JlZyk7Cit9CisKKy8qKgorICogcG1jcmFpZF9kaXNhYmxlX2ludGVycnVwdHMgLSBNYXNrcyBhbmQgY2xlYXJzIGFsbCBzcGVjaWZpZWQgaW50ZXJydXB0cworICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAaW50cnM6IGludGVycnVwdHMgdG8gZGlzYWJsZQorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9kaXNhYmxlX2ludGVycnVwdHMoCisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwKKwl1MzIgaW50cnMKKykKK3sKKwl1MzIgZ21hc2sgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmdsb2JhbF9pbnRlcnJ1cHRfbWFza19yZWcpOworCXUzMiBubWFzayA9IGdtYXNrIHwgR0xPQkFMX0lOVEVSUlVQVF9NQVNLOworCisJaW93cml0ZTMyKG5tYXNrLCBwaW5zdGFuY2UtPmludF9yZWdzLmdsb2JhbF9pbnRlcnJ1cHRfbWFza19yZWcpOworCWlvd3JpdGUzMihpbnRycywgcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyk7CisJaW93cml0ZTMyKGludHJzLCBwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9tYXNrX3JlZyk7CisJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpOworfQorCisvKioKKyAqIHBtY3JhaWRfZW5hYmxlX2ludGVycnVwdHMgLSBFbmFibGVzIHNwZWNpZmllZCBpbnRlcnJ1cHRzCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBpbnRyOiBpbnRlcnJ1cHRzIHRvIGVuYWJsZQorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9lbmFibGVfaW50ZXJydXB0cygKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCXUzMiBpbnRycworKQoreworCXUzMiBnbWFzayA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuZ2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZyk7CisJdTMyIG5tYXNrID0gZ21hc2sgJiAofkdMT0JBTF9JTlRFUlJVUFRfTUFTSyk7CisKKwlpb3dyaXRlMzIobm1hc2ssIHBpbnN0YW5jZS0+aW50X3JlZ3MuZ2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZyk7CisJaW93cml0ZTMyKH5pbnRycywgcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpOworCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKworCXBtY3JhaWRfaW5mbygiZW5hYmxlZCBpbnRlcnJ1cHRzIGdsb2JhbCBtYXNrID0gJXggaW50cl9tYXNrID0gJXhcbiIsCisJCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuZ2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZyksCisJCWlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXNldF90eXBlIC0gRGV0ZXJtaW5lIHRoZSByZXF1aXJlZCByZXNldCB0eXBlCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogSU9BIHJlcXVpcmVzIGhhcmQgcmVzZXQgaWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlLgorICogMS4gSWYgSFJSUSB2YWxpZCBpbnRlcnJ1cHQgaXMgbm90IG1hc2tlZAorICogMi4gSU9BIHJlc2V0IGFsZXJ0IGRvb3JiZWxsIGlzIHNldAorICogMy4gSWYgdGhlcmUgYXJlIGFueSBlcnJvciBpbnRlcnJ1cHRzCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVzZXRfdHlwZShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXUzMiBtYXNrOworCXUzMiBpbnRyczsKKwl1MzIgYWxlcnRzOworCisJbWFzayA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKwlpbnRycyA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X3JlZyk7CisJYWxlcnRzID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKTsKKworCWlmICgobWFzayAmIElOVFJTX0hSUlFfVkFMSUQpID09IDAgfHwKKwkgICAgKGFsZXJ0cyAmIERPT1JCRUxMX0lPQV9SRVNFVF9BTEVSVCkgfHwKKwkgICAgKGludHJzICYgUE1DUkFJRF9FUlJPUl9JTlRFUlJVUFRTKSkgeworCQlwbWNyYWlkX2luZm8oIklPQSByZXF1aXJlcyBoYXJkIHJlc2V0XG4iKTsKKwkJcGluc3RhbmNlLT5pb2FfaGFyZF9yZXNldCA9IDE7CisJfQorCisJLyogSWYgdW5pdCBjaGVjayBpcyBhY3RpdmUsIHRyaWdnZXIgdGhlIGR1bXAgKi8KKwlpZiAoaW50cnMgJiBJTlRSU19JT0FfVU5JVF9DSEVDSykKKwkJcGluc3RhbmNlLT5pb2FfdW5pdF9jaGVjayA9IDE7Cit9CisKKy8qKgorICogcG1jcmFpZF9iaXN0X2RvbmUgLSBjb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBQQ0kgQklTVAorICogQGNtZDogcG9pbnRlciB0byByZXNldCBjb21tYW5kCisgKiBSZXR1cm4gVmFsdWUKKyAqIAlub25lCisgKi8KKworc3RhdGljIHZvaWQgcG1jcmFpZF9pb2FfcmVzZXQoc3RydWN0IHBtY3JhaWRfY21kICopOworCitzdGF0aWMgdm9pZCBwbWNyYWlkX2Jpc3RfZG9uZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJaW50IHJjOworCXUxNiBwY2lfcmVnOworCisJcmMgPSBwY2lfcmVhZF9jb25maWdfd29yZChwaW5zdGFuY2UtPnBkZXYsIFBDSV9DT01NQU5ELCAmcGNpX3JlZyk7CisKKwkvKiBJZiBQQ0kgY29uZmlnIHNwYWNlIGNhbid0IGJlIGFjY2Vzc2VkIHdhaXQgZm9yIGFub3RoZXIgdHdvIHNlY3MgKi8KKwlpZiAoKHJjICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCB8fCAoIShwY2lfcmVnICYgUENJX0NPTU1BTkRfTUVNT1JZKSkpICYmCisJICAgIGNtZC0+dS50aW1lX2xlZnQgPiAwKSB7CisJCXBtY3JhaWRfaW5mbygiQklTVCBub3QgY29tcGxldGUsIHdhaXRpbmcgYW5vdGhlciAyIHNlY3NcbiIpOworCQljbWQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgY21kLT51LnRpbWVfbGVmdDsKKwkJY21kLT51LnRpbWVfbGVmdCA9IDA7CisJCWNtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNtZDsKKwkJY21kLT50aW1lci5mdW5jdGlvbiA9CisJCQkodm9pZCAoKikodW5zaWduZWQgbG9uZykpcG1jcmFpZF9iaXN0X2RvbmU7CisJCWFkZF90aW1lcigmY21kLT50aW1lcik7CisJfSBlbHNlIHsKKwkJY21kLT51LnRpbWVfbGVmdCA9IDA7CisJCXBtY3JhaWRfaW5mbygiQklTVCBpcyBjb21wbGV0ZSwgcHJvY2VlZGluZyB3aXRoIHJlc2V0XG4iKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQlwbWNyYWlkX2lvYV9yZXNldChjbWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9zdGFydF9iaXN0IC0gc3RhcnRzIEJJU1QKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gcmVzZXQgY21kCisgKiBSZXR1cm4gVmFsdWUKKyAqICAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3N0YXJ0X2Jpc3Qoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdTMyIGRvb3JiZWxscywgaW50cnM7CisKKwkvKiBwcm9jZWVkIHdpdGggYmlzdCBhbmQgd2FpdCBmb3IgMiBzZWNvbmRzICovCisJaW93cml0ZTMyKERPT1JCRUxMX0lPQV9TVEFSVF9CSVNULAorCQlwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpOworCWRvb3JiZWxscyA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaG9zdF9pb2FfaW50ZXJydXB0X3JlZyk7CisJaW50cnMgPSBpb3JlYWQzMihwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9yZWcpOworCXBtY3JhaWRfaW5mbygiZG9vcmJlbGxzIGFmdGVyIHN0YXJ0IGJpc3Q6ICV4IGludHJzOiAleCBcbiIsCisJCSAgICAgIGRvb3JiZWxscywgaW50cnMpOworCisJY21kLT51LnRpbWVfbGVmdCA9IG1zZWNzX3RvX2ppZmZpZXMoUE1DUkFJRF9CSVNUX1RJTUVPVVQpOworCWNtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNtZDsKKwljbWQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhQTUNSQUlEX0JJU1RfVElNRU9VVCk7CisJY21kLT50aW1lci5mdW5jdGlvbiA9ICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlwbWNyYWlkX2Jpc3RfZG9uZTsKKwlhZGRfdGltZXIoJmNtZC0+dGltZXIpOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVzZXRfYWxlcnRfZG9uZSAtIGNvbXBsZXRpb24gcm91dGluZSBmb3IgcmVzZXRfYWxlcnQKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gY29tbWFuZCBibG9jayB1c2VkIGluIHJlc2V0IHNlcXVlbmNlCisgKiBSZXR1cm4gdmFsdWUKKyAqICBOb25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVzZXRfYWxlcnRfZG9uZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1MzIgc3RhdHVzID0gaW9yZWFkMzIocGluc3RhbmNlLT5pb2Ffc3RhdHVzKTsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwkvKiBpZiB0aGUgY3JpdGljYWwgb3BlcmF0aW9uIGluIHByb2dyZXNzIGJpdCBpcyBzZXQgb3IgdGhlIHdhaXQgdGltZXMKKwkgKiBvdXQsIGludm9rZSByZXNldCBlbmdpbmUgdG8gcHJvY2VlZCB3aXRoIGhhcmQgcmVzZXQuIElmIHRoZXJlIGlzCisJICogc29tZSBtb3JlIHRpbWUgdG8gd2FpdCwgcmVzdGFydCB0aGUgdGltZXIKKwkgKi8KKwlpZiAoKChzdGF0dXMgJiBJTlRSU19DUklUSUNBTF9PUF9JTl9QUk9HUkVTUykgPT0gMCkgfHwKKwkgICAgY21kLT51LnRpbWVfbGVmdCA8PSAwKSB7CisJCXBtY3JhaWRfaW5mbygiY3JpdGljYWwgb3AgaXMgcmVzZXQgcHJvY2VlZGluZyB3aXRoIHJlc2V0XG4iKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQlwbWNyYWlkX2lvYV9yZXNldChjbWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwl9IGVsc2UgeworCQlwbWNyYWlkX2luZm8oImNyaXRpY2FsIG9wIGlzIG5vdCB5ZXQgcmVzZXQgd2FpdGluZyBhZ2FpblxuIik7CisJCS8qIHJlc3RhcnQgdGltZXIgaWYgc29tZSBtb3JlIHRpbWUgaXMgYXZhaWxhYmxlIHRvIHdhaXQgKi8KKwkJY21kLT51LnRpbWVfbGVmdCAtPSBQTUNSQUlEX0NIRUNLX0ZPUl9SRVNFVF9USU1FT1VUOworCQljbWQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljbWQ7CisJCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBQTUNSQUlEX0NIRUNLX0ZPUl9SRVNFVF9USU1FT1VUOworCQljbWQtPnRpbWVyLmZ1bmN0aW9uID0KKwkJCSh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlwbWNyYWlkX3Jlc2V0X2FsZXJ0X2RvbmU7CisJCWFkZF90aW1lcigmY21kLT50aW1lcik7CisJfQorfQorCisvKioKKyAqIHBtY3JhaWRfcmVzZXRfYWxlcnQgLSBhbGVydHMgSU9BIGZvciBhIHBvc3NpYmxlIHJlc2V0CisgKiBAY21kIDogY29tbWFuZCBibG9jayB0byBiZSB1c2VkIGZvciByZXNldCBzZXF1ZW5jZS4KKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCXJldHVybnMgMCBpZiBwY2kgY29uZmlnLXNwYWNlIGlzIGFjY2Vzc2libGUgYW5kIFJFU0VUX0RPT1JCRUxMIGlzCisgKglzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byBJT0EuIFJldHVybnMgbm9uLXplcm8gaW4gY2FzZSBwY2lfY29uZmlnX3NwYWNlCisgKglpcyBub3QgYWNjZXNzaWJsZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3Jlc2V0X2FsZXJ0KHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXUzMiBkb29yYmVsbHM7CisJaW50IHJjOworCXUxNiBwY2lfcmVnOworCisJLyogSWYgd2UgYXJlIGFibGUgdG8gYWNjZXNzIElPQSBQQ0kgY29uZmlnIHNwYWNlLCBhbGVydCBJT0EgdGhhdCB3ZSBhcmUKKwkgKiBnb2luZyB0byByZXNldCBpdCBzb29uLiBUaGlzIGVuYWJsZXMgSU9BIHRvIHByZXNlcnYgcGVyc2lzdGVudCBlcnJvcgorCSAqIGRhdGEgaWYgYW55LiBJbiBjYXNlIG1lbW9yeSBzcGFjZSBpcyBub3QgYWNjZXNzaWJsZSwgcHJvY2VlZCB3aXRoCisJICogQklTVCBvciBzbG90X3Jlc2V0CisJICovCisJcmMgPSBwY2lfcmVhZF9jb25maWdfd29yZChwaW5zdGFuY2UtPnBkZXYsIFBDSV9DT01NQU5ELCAmcGNpX3JlZyk7CisJaWYgKChyYyA9PSBQQ0lCSU9TX1NVQ0NFU1NGVUwpICYmIChwY2lfcmVnICYgUENJX0NPTU1BTkRfTUVNT1JZKSkgeworCisJCS8qIHdhaXQgZm9yIElPQSBwZXJtaXNzaW9uIGkuZSB1bnRpbCBDUklUSUNBTF9PUEVSQVRJT04gYml0IGlzCisJCSAqIHJlc2V0IElPQSBkb2Vzbid0IGdlbmVyYXRlIGFueSBpbnRlcnJ1cHRzIHdoZW4gQ1JJVElDQUwKKwkJICogT1BFUkFUSU9OIGJpdCBpcyByZXNldC4gQSB0aW1lciBpcyBzdGFydGVkIHRvIHdhaXQgZm9yIHRoaXMKKwkJICogYml0IHRvIGJlIHJlc2V0LgorCQkgKi8KKwkJY21kLT51LnRpbWVfbGVmdCA9IFBNQ1JBSURfUkVTRVRfVElNRU9VVDsKKwkJY21kLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpY21kOworCQljbWQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgUE1DUkFJRF9DSEVDS19GT1JfUkVTRVRfVElNRU9VVDsKKwkJY21kLT50aW1lci5mdW5jdGlvbiA9CisJCQkodm9pZCAoKikodW5zaWduZWQgbG9uZykpcG1jcmFpZF9yZXNldF9hbGVydF9kb25lOworCQlhZGRfdGltZXIoJmNtZC0+dGltZXIpOworCisJCWlvd3JpdGUzMihET09SQkVMTF9JT0FfUkVTRVRfQUxFUlQsCisJCQlwaW5zdGFuY2UtPmludF9yZWdzLmhvc3RfaW9hX2ludGVycnVwdF9yZWcpOworCQlkb29yYmVsbHMgPQorCQkJaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKTsKKwkJcG1jcmFpZF9pbmZvKCJkb29yYmVsbHMgYWZ0ZXIgcmVzZXQgYWxlcnQ6ICV4XG4iLCBkb29yYmVsbHMpOworCX0gZWxzZSB7CisJCXBtY3JhaWRfaW5mbygiUENJIGNvbmZpZyBpcyBub3QgYWNjZXNzaWJsZSBzdGFydGluZyBCSVNUXG4iKTsKKwkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fSEFSRF9SRVNFVDsKKwkJcG1jcmFpZF9zdGFydF9iaXN0KGNtZCk7CisJfQorfQorCisvKioKKyAqIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyIC0gIFRpbWVvdXQgaGFuZGxlciBmb3IgaW50ZXJuYWxseSBnZW5lcmF0ZWQgb3BzCisgKgorICogQGNtZCA6IHBvaW50ZXIgdG8gY29tbWFuZCBzdHJ1Y3R1cmUsIHRoYXQgZ290IHRpbWVkb3V0CisgKgorICogVGhpcyBmdW5jdGlvbiBibG9ja3MgaG9zdCByZXF1ZXN0cyBhbmQgaW5pdGlhdGVzIGFuIGFkYXB0ZXIgcmVzZXQuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogICBOb25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQkiQWRhcHRlciBiZWluZyByZXNldCBkdWUgdG8gY29tbWFuZCB0aW1lb3V0LlxuIik7CisKKwkvKiBDb21tYW5kIHRpbWVvdXRzIHJlc3VsdCBpbiBoYXJkIHJlc2V0IHNlcXVlbmNlLiBUaGUgY29tbWFuZCB0aGF0IGdvdAorCSAqIHRpbWVkIG91dCBtYXkgYmUgdGhlIG9uZSB1c2VkIGFzIHBhcnQgb2YgcmVzZXQgc2VxdWVuY2UuIEluIHRoaXMKKwkgKiBjYXNlIHJlc3RhcnQgcmVzZXQgc2VxdWVuY2UgdXNpbmcgdGhlIHNhbWUgY29tbWFuZCBibG9jayBldmVuIGlmCisJICogcmVzZXQgaXMgaW4gcHJvZ3Jlc3MuIE90aGVyd2lzZSBmYWlsIHRoaXMgY29tbWFuZCBhbmQgZ2V0IGEgZnJlZQorCSAqIGNvbW1hbmQgYmxvY2sgdG8gcmVzdGFydCB0aGUgcmVzZXQgc2VxdWVuY2UuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCWlmICghcGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJcGluc3RhbmNlLT5pb2FfcmVzZXRfYXR0ZW1wdHMgPSAwOworCQljbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJCS8qIElmIHdlIGFyZSBvdXQgb2YgY29tbWFuZCBibG9ja3MsIGp1c3QgcmV0dXJuIGhlcmUgaXRzZWxmLgorCQkgKiBTb21lIG90aGVyIGNvbW1hbmQncyB0aW1lb3V0IGhhbmRsZXIgY2FuIGRvIHRoZSByZXNldCBqb2IKKwkJICovCisJCWlmIChjbWQgPT0gTlVMTCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJICAgICAgIGxvY2tfZmxhZ3MpOworCQkJcG1jcmFpZF9lcnIoIm5vIGZyZWUgY21uZCBibG9jayBmb3IgdGltZW91dCBoYW5kbGVyXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXBpbnN0YW5jZS0+cmVzZXRfY21kID0gY21kOworCQlwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcyA9IDE7CisJfSBlbHNlIHsKKwkJcG1jcmFpZF9pbmZvKCJyZXNldCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXG4iKTsKKworCQlpZiAocGluc3RhbmNlLT5yZXNldF9jbWQgIT0gY21kKSB7CisJCQkvKiBUaGlzIGNvbW1hbmQgc2hvdWxkIGhhdmUgYmVlbiBnaXZlbiB0byBJT0EsIHRoaXMKKwkJCSAqIGNvbW1hbmQgd2lsbCBiZSBjb21wbGV0ZWQgYnkgZmFpbF9vdXRzdGFuZGluZ19jbWRzCisJCQkgKiBhbnl3YXkKKwkJCSAqLworCQkJcG1jcmFpZF9lcnIoImNtZCBpcyBwZW5kaW5nIGJ1dCByZXNldCBpbiBwcm9ncmVzc1xuIik7CisJCX0KKworCQkvKiBJZiB0aGlzIGNvbW1hbmQgd2FzIGJlaW5nIHVzZWQgYXMgcGFydCBvZiB0aGUgcmVzZXQKKwkJICogc2VxdWVuY2UsIHNldCBjbWRfZG9uZSBwb2ludGVyIHRvIHBtY3JhaWRfaW9hX3Jlc2V0LiBUaGlzCisJCSAqIGNhdXNlcyBmYWlsX291dHN0YW5kaW5nX2NvbW1hbmRzIG5vdCB0byByZXR1cm4gdGhlIGNvbW1hbmQKKwkJICogYmxvY2sgYmFjayB0byBmcmVlIHBvb2wKKwkJICovCisJCWlmIChjbWQgPT0gcGluc3RhbmNlLT5yZXNldF9jbWQpCisJCQljbWQtPmNtZF9kb25lID0gcG1jcmFpZF9pb2FfcmVzZXQ7CisKKwl9CisKKwlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9SRVNFVF9BTEVSVDsKKwlzY3NpX2Jsb2NrX3JlcXVlc3RzKHBpbnN0YW5jZS0+aG9zdCk7CisJcG1jcmFpZF9yZXNldF9hbGVydChjbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworfQorCisvKioKKyAqIHBtY3JhaWRfaW50ZXJuYWxfZG9uZSAtIGNvbXBsZXRpb24gcm91dGluZSBmb3IgaW50ZXJuYWxseSBnZW5lcmF0ZWQgY21kcworICoKKyAqIEBjbWQ6IGNvbW1hbmQgdGhhdCBnb3QgcmVzcG9uc2UgZnJvbSBJT0EKKyAqCisgKiBSZXR1cm4gVmFsdWU6CisgKgkgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2ludGVybmFsX2RvbmUoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJcG1jcmFpZF9pbmZvKCJyZXNwb25zZSBpbnRlcm5hbCBjbWQgQ0RCWzBdID0gJXggaW9hc2MgPSAleFxuIiwKKwkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpKTsKKworCS8qIFNvbWUgb2YgdGhlIGludGVybmFsIGNvbW1hbmRzIGFyZSBzZW50IHdpdGggY2FsbGVycyBibG9ja2luZyBmb3IgdGhlCisJICogcmVzcG9uc2UuIFNhbWUgd2lsbCBiZSBpbmRpY2F0ZWQgYXMgcGFydCBvZiBjbWQtPmNvbXBsZXRpb25fcmVxCisJICogZmllbGQuIFJlc3BvbnNlIHBhdGggbmVlZHMgdG8gd2FrZSB1cCBhbnkgd2FpdGVycyB3YWl0aW5nIGZvciBjbWQKKwkgKiBjb21wbGV0aW9uIGlmIHRoaXMgZmxhZyBpcyBzZXQuCisJICovCisJaWYgKGNtZC0+Y29tcGxldGlvbl9yZXEpIHsKKwkJY21kLT5jb21wbGV0aW9uX3JlcSA9IDA7CisJCWNvbXBsZXRlKCZjbWQtPndhaXRfZm9yX2NvbXBsZXRpb24pOworCX0KKworCS8qIG1vc3Qgb2YgdGhlIGludGVybmFsIGNvbW1hbmRzIGFyZSBjb21wbGV0ZWQgYnkgY2FsbGVyIGl0c2VsZiwgc28KKwkgKiBubyBuZWVkIHRvIHJldHVybiB0aGUgY29tbWFuZCBibG9jayBiYWNrIHRvIGZyZWUgcG9vbCB1bnRpbCB3ZSBhcmUKKwkgKiByZXF1aXJlZCB0byBkbyBzbyAoZS5nIG9uY2UgZG9uZSB3aXRoIGluaXRpYWxpemF0aW9uKS4KKwkgKi8KKwlpZiAoY21kLT5yZWxlYXNlKSB7CisJCWNtZC0+cmVsZWFzZSA9IDA7CisJCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX3JlaW5pdF9jZmd0YWJsZV9kb25lIC0gZG9uZSBmdW5jdGlvbiBmb3IgY2ZnIHRhYmxlIHJlaW5pdGlhbGl6YXRpb24KKyAqCisgKiBAY21kOiBjb21tYW5kIHRoYXQgZ290IHJlc3BvbnNlIGZyb20gSU9BCisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhZnRlciBkcml2ZXIgcmUtcmVhZHMgY29uZmlndXJhdGlvbiB0YWJsZSBkdWUgdG8gYQorICogbG9zdCBDQ04uIEl0IHJldHVybnMgdGhlIGNvbW1hbmQgYmxvY2sgYmFjayB0byBmcmVlIHBvb2wgYW5kIHNjaGVkdWxlcworICogd29ya2VyIHRocmVhZCB0byBhZGQvZGVsZXRlIGRldmljZXMgaW50byB0aGUgc3lzdGVtLgorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqCSBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVpbml0X2NmZ3RhYmxlX2RvbmUoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJcG1jcmFpZF9pbmZvKCJyZXNwb25zZSBpbnRlcm5hbCBjbWQgQ0RCWzBdID0gJXggaW9hc2MgPSAleFxuIiwKKwkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpKTsKKworCWlmIChjbWQtPnJlbGVhc2UpIHsKKwkJY21kLT5yZWxlYXNlID0gMDsKKwkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CisJfQorCXBtY3JhaWRfaW5mbygic2NoZWR1bGluZyB3b3JrZXIgZm9yIGNvbmZpZyB0YWJsZSByZWluaXRpYWxpemF0aW9uXG4iKTsKKwlzY2hlZHVsZV93b3JrKCZjbWQtPmRydl9pbnN0LT53b3JrZXJfcSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9lcnBfZG9uZSAtIFByb2Nlc3MgY29tcGxldGlvbiBvZiBTQ1NJIGVycm9yIHJlc3BvbnNlIGZyb20gZGV2aWNlCisgKiBAY21kOiBwbWNyYWlkX2NvbW1hbmQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgc2Vuc2UgYnVmZmVyIGludG8gdGhlIHNjc2lfY21kIHN0cnVjdCBhbmQgY29tcGxldGVzCisgKiBzY3NpX2NtZCBieSBjYWxsaW5nIHNjc2lfZG9uZSBmdW5jdGlvbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2VycF9kb25lKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kID0gY21kLT5zY3NpX2NtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1MzIgaW9hc2MgPSBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpOworCisJaWYgKFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA+IDApIHsKKwkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJcG1jcmFpZF9lcnIoImNvbW1hbmQgQ0RCWzBdID0gJXggZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwKKwkJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sIGlvYXNjKTsKKwl9CisKKwkvKiBpZiB3ZSBoYWQgYWxsb2NhdGVkIHNlbnNlIGJ1ZmZlcnMgZm9yIHJlcXVlc3Qgc2Vuc2UsIGNvcHkgdGhlIHNlbnNlCisJICogcmVsZWFzZSB0aGUgYnVmZmVycworCSAqLworCWlmIChjbWQtPnNlbnNlX2J1ZmZlciAhPSBOVUxMKSB7CisJCW1lbWNweShzY3NpX2NtZC0+c2Vuc2VfYnVmZmVyLAorCQkgICAgICAgY21kLT5zZW5zZV9idWZmZXIsCisJCSAgICAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBpbnN0YW5jZS0+cGRldiwKKwkJCQkgICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLAorCQkJCSAgICBjbWQtPnNlbnNlX2J1ZmZlciwgY21kLT5zZW5zZV9idWZmZXJfZG1hKTsKKwkJY21kLT5zZW5zZV9idWZmZXIgPSBOVUxMOworCQljbWQtPnNlbnNlX2J1ZmZlcl9kbWEgPSAwOworCX0KKworCXNjc2lfZG1hX3VubWFwKHNjc2lfY21kKTsKKwlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKwlzY3NpX2NtZC0+c2NzaV9kb25lKHNjc2lfY21kKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2ZpcmVfY29tbWFuZCAtIHNlbmRzIGFuIElPQSBjb21tYW5kIHRvIGFkYXB0ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGdpdmVuIGJsb2NrIGludG8gcGVuZGluZyBjb21tYW5kIGxpc3QKKyAqIGFuZCByZXR1cm5zIHdpdGhvdXQgd2FpdGluZworICoKKyAqIEBjbWQgOiBjb21tYW5kIHRvIGJlIHNlbnQgdG8gdGhlIGRldmljZQorICoKKyAqIFJldHVybiBWYWx1ZQorICoJTm9uZQorICovCitzdGF0aWMgdm9pZCBfcG1jcmFpZF9maXJlX2NvbW1hbmQoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJLyogQWRkIHRoaXMgY29tbWFuZCBibG9jayB0byBwZW5kaW5nIGNtZCBwb29sLiBXZSBkbyB0aGlzIHByaW9yIHRvCisJICogd3JpdHRpbmcgSU9BUkNCIHRvIGlvYXJyaW4gYmVjYXVzZSBJT0EgbWlnaHQgY29tcGxldGUgdGhlIGNvbW1hbmQKKwkgKiBieSB0aGUgdGltZSB3ZSBhcmUgYWJvdXQgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBSZXNwb25zZSBoYW5kbGVyCisJICogKGlzci90YXNrbGV0KSBsb29rcyBmb3IgY21iIGJsb2NrIGluIHRoZSBwZW5kaW5nIHBlbmRpbmcgbGlzdC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY21kLT5mcmVlX2xpc3QsICZwaW5zdGFuY2UtPnBlbmRpbmdfY21kX3Bvb2wpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+cGVuZGluZ19wb29sX2xvY2ssIGxvY2tfZmxhZ3MpOworCWF0b21pY19pbmMoJnBpbnN0YW5jZS0+b3V0c3RhbmRpbmdfY21kcyk7CisKKwkvKiBkcml2ZXIgd3JpdGVzIGxvd2VyIDMyLWJpdCB2YWx1ZSBvZiBJT0FSQ0IgYWRkcmVzcyBvbmx5ICovCisJbWIoKTsKKwlpb3dyaXRlMzIobGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXJjYi5pb2FyY2JfYnVzX2FkZHIpLAorCQkgIHBpbnN0YW5jZS0+aW9hcnJpbik7Cit9CisKKy8qKgorICogcG1jcmFpZF9zZW5kX2NtZCAtIGZpcmVzIGEgY29tbWFuZCB0byBJT0EKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsc28gc2V0cyB1cCB0aW1lb3V0IGZ1bmN0aW9uLCBhbmQgY29tbWFuZCBjb21wbGV0aW9uCisgKiBmdW5jdGlvbgorICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgYmxvY2sgdG8gYmUgZmlyZWQgdG8gSU9BCisgKiBAY21kX2RvbmU6IGNvbW1hbmQgY29tcGxldGlvbiBmdW5jdGlvbiwgY2FsbGVkIG9uY2UgSU9BIHJlc3BvbmRzCisgKiBAdGltZW91dDogdGltZW91dCB0byB3YWl0IGZvciB0aGlzIGNvbW1hbmQgY29tcGxldGlvbgorICogQHRpbWVvdXRfZnVuYzogdGltZW91dCBoYW5kbGVyCisgKgorICogUmV0dXJuIHZhbHVlCisgKiAgIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9zZW5kX2NtZCgKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwKKwl2b2lkICgqY21kX2RvbmUpIChzdHJ1Y3QgcG1jcmFpZF9jbWQgKiksCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LAorCXZvaWQgKCp0aW1lb3V0X2Z1bmMpIChzdHJ1Y3QgcG1jcmFpZF9jbWQgKikKKykKK3sKKwkvKiBpbml0aWFsaXplIGRvbmUgZnVuY3Rpb24gKi8KKwljbWQtPmNtZF9kb25lID0gY21kX2RvbmU7CisKKwlpZiAodGltZW91dF9mdW5jKSB7CisJCS8qIHNldHVwIHRpbWVvdXQgaGFuZGxlciAqLworCQljbWQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyljbWQ7CisJCWNtZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0OworCQljbWQtPnRpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKXRpbWVvdXRfZnVuYzsKKwkJYWRkX3RpbWVyKCZjbWQtPnRpbWVyKTsKKwl9CisKKwkvKiBmaXJlIHRoZSBjb21tYW5kIHRvIElPQSAqLworCV9wbWNyYWlkX2ZpcmVfY29tbWFuZChjbWQpOworfQorCisvKioKKyAqIHBtY3JhaWRfaW9hX3NodXRkb3duIC0gc2VuZHMgU0hVVERPV04gY29tbWFuZCB0byBpb2EKKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIHRoZSBjb21tYW5kIGJsb2NrIHVzZWQgYXMgcGFydCBvZiByZXNldCBzZXF1ZW5jZQorICoKKyAqIFJldHVybiBWYWx1ZQorICogIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9pb2Ffc2h1dGRvd24oc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJcG1jcmFpZF9pbmZvKCJyZXNwb25zZSBmb3IgQ2FuY2VsIENDTiBDREJbMF0gPSAleCBpb2FzYyA9ICV4XG4iLAorCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQkgICAgIGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYykpOworCisJLyogTm90ZSB0aGF0IGNvbW1hbmRzIHNlbnQgZHVyaW5nIHJlc2V0IHJlcXVpcmUgbmV4dCBjb21tYW5kIHRvIGJlIHNlbnQKKwkgKiB0byBJT0EuIEhlbmNlIHJlaW5pdCB0aGUgZG9uZSBmdW5jdGlvbiBhcyB3ZWxsIGFzIHRpbWVvdXQgZnVuY3Rpb24KKwkgKi8KKwlwbWNyYWlkX3JlaW5pdF9jbWRibGsoY21kKTsKKwljbWQtPmlvYV9jYi0+aW9hcmNiLnJlcXVlc3RfdHlwZSA9IFJFUV9UWVBFX0lPQUNNRDsKKwljbWQtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZSA9CisJCWNwdV90b19sZTMyKFBNQ1JBSURfSU9BX1JFU19IQU5ETEUpOworCWNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdID0gUE1DUkFJRF9JT0FfU0hVVERPV047CisJY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMV0gPSBQTUNSQUlEX1NIVVRET1dOX05PUk1BTDsKKworCS8qIGZpcmUgc2h1dGRvd24gY29tbWFuZCB0byBoYXJkd2FyZS4gKi8KKwlwbWNyYWlkX2luZm8oImZpcmluZyBub3JtYWwgc2h1dGRvd24gY29tbWFuZCAoJWQpIHRvIElPQVxuIiwKKwkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLnJlc3BvbnNlX2hhbmRsZSkpOworCisJcG1jcmFpZF9zZW5kX2NtZChjbWQsIHBtY3JhaWRfaW9hX3Jlc2V0LAorCQkJIFBNQ1JBSURfU0hVVERPV05fVElNRU9VVCwKKwkJCSBwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcik7Cit9CisKKy8qKgorICogcG1jcmFpZF9pZGVudGlmeV9ocnJxIC0gcmVnaXN0ZXJzIGhvc3QgcnJxIGJ1ZmZlcnMgd2l0aCBJT0EKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gY29tbWFuZCBibG9jayB0byBiZSB1c2VkIGZvciBpZGVudGlmeSBocnJxCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG90aGVyd2lzZSBub24temVybyBmYWlsdXJlIGNvZGUKKyAqLworCitzdGF0aWMgdm9pZCBwbWNyYWlkX3F1ZXJ5Y2ZnKHN0cnVjdCBwbWNyYWlkX2NtZCAqKTsKKworc3RhdGljIHZvaWQgcG1jcmFpZF9pZGVudGlmeV9ocnJxKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJaW50IGluZGV4ID0gMDsKKwlfX2JlNjQgaHJycV9hZGRyID0gY3B1X3RvX2JlNjQocGluc3RhbmNlLT5ocnJxX3N0YXJ0X2J1c19hZGRyW2luZGV4XSk7CisJdTMyIGhycnFfc2l6ZSA9IGNwdV90b19iZTMyKHNpemVvZih1MzIpICogUE1DUkFJRF9NQVhfQ01EKTsKKworCXBtY3JhaWRfcmVpbml0X2NtZGJsayhjbWQpOworCisJLyogSW5pdGlhbGl6ZSBpb2FyY2IgKi8KKwlpb2FyY2ItPnJlcXVlc3RfdHlwZSA9IFJFUV9UWVBFX0lPQUNNRDsKKwlpb2FyY2ItPnJlc291cmNlX2hhbmRsZSA9IGNwdV90b19sZTMyKFBNQ1JBSURfSU9BX1JFU19IQU5ETEUpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgaHJycSBudW1iZXIgd2hlcmUgSU9BIHdpbGwgcmVzcG9uZCB0byB0aGlzIGNvbW1hbmQgKi8KKwlpb2FyY2ItPmhycnFfaWQgPSBpbmRleDsKKwlpb2FyY2ItPmNkYlswXSA9IFBNQ1JBSURfSURFTlRJRllfSFJSUTsKKwlpb2FyY2ItPmNkYlsxXSA9IGluZGV4OworCisJLyogSU9BIGV4cGVjdHMgNjQtYml0IHBjaSBhZGRyZXNzIHRvIGJlIHdyaXR0ZW4gaW4gQi5FIGZvcm1hdAorCSAqIChpLmUgY2RiWzJdPU1TQnl0ZS4uY2RiWzldPUxTQi4KKwkgKi8KKwlwbWNyYWlkX2luZm8oIkhSUlFfSURFTlRJRlkgd2l0aCBocnJxOmlvYXJjYiA9PiAlbGx4OiVsbHhcbiIsCisJCSAgICAgaHJycV9hZGRyLCBpb2FyY2ItPmlvYXJjYl9idXNfYWRkcik7CisKKwltZW1jcHkoJihpb2FyY2ItPmNkYlsyXSksICZocnJxX2FkZHIsIHNpemVvZihocnJxX2FkZHIpKTsKKwltZW1jcHkoJihpb2FyY2ItPmNkYlsxMF0pLCAmaHJycV9zaXplLCBzaXplb2YoaHJycV9zaXplKSk7CisKKwkvKiBTdWJzZXF1ZW50IGNvbW1hbmRzIHJlcXVpcmUgSFJSUSBpZGVudGlmaWNhdGlvbiB0byBiZSBzdWNjZXNzZnVsLgorCSAqIE5vdGUgdGhhdCB0aGlzIGdldHMgY2FsbGVkIGV2ZW4gZHVyaW5nIHJlc2V0IGZyb20gU0NTSSBtaWQtbGF5ZXIKKwkgKiBvciB0YXNrbGV0CisJICovCisJcG1jcmFpZF9zZW5kX2NtZChjbWQsIHBtY3JhaWRfcXVlcnljZmcsCisJCQkgUE1DUkFJRF9JTlRFUk5BTF9USU1FT1VULAorCQkJIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKTsKK30KKworc3RhdGljIHZvaWQgcG1jcmFpZF9wcm9jZXNzX2NjbihzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCk7CitzdGF0aWMgdm9pZCBwbWNyYWlkX3Byb2Nlc3NfbGRuKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKTsKKworLyoqCisgKiBwbWNyYWlkX3NlbmRfaGNhbV9jbWQgLSBzZW5kIGFuIGluaXRpYWxpemVkIGNvbW1hbmQgYmxvY2soSENBTSkgdG8gSU9BCisgKgorICogQGNtZDogaW5pdGlhbGl6ZWQgY29tbWFuZCBibG9jayBwb2ludGVyCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAgIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9zZW5kX2hjYW1fY21kKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCWlmIChjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlsxXSA9PSBQTUNSQUlEX0hDQU1fQ09ERV9DT05GSUdfQ0hBTkdFKQorCQlhdG9taWNfc2V0KCYoY21kLT5kcnZfaW5zdC0+Y2NuLmlnbm9yZSksIDApOworCWVsc2UKKwkJYXRvbWljX3NldCgmKGNtZC0+ZHJ2X2luc3QtPmxkbi5pZ25vcmUpLCAwKTsKKworCXBtY3JhaWRfc2VuZF9jbWQoY21kLCBjbWQtPmNtZF9kb25lLCAwLCBOVUxMKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2luaXRfaGNhbSAtIHNlbmQgYW4gaW5pdGlhbGl6ZWQgY29tbWFuZCBibG9jayhIQ0FNKSB0byBJT0EKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAdHlwZTogSENBTSB0eXBlCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAgIHBvaW50ZXIgdG8gaW5pdGlhbGl6ZWQgcG1jcmFpZF9jbWQgc3RydWN0dXJlIG9yIE5VTEwKKyAqLworc3RhdGljIHN0cnVjdCBwbWNyYWlkX2NtZCAqcG1jcmFpZF9pbml0X2hjYW0KKygKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCXU4IHR5cGUKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYjsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjICppb2FkbDsKKwlzdHJ1Y3QgcG1jcmFpZF9ob3N0cmNiICpoY2FtOworCXZvaWQgKCpjbWRfZG9uZSkgKHN0cnVjdCBwbWNyYWlkX2NtZCAqKTsKKwlkbWFfYWRkcl90IGRtYTsKKwlpbnQgcmNiX3NpemU7CisKKwljbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJaWYgKCFjbWQpIHsKKwkJcG1jcmFpZF9lcnIoIm5vIGZyZWUgY29tbWFuZCBibG9ja3MgZm9yIGhjYW1cbiIpOworCQlyZXR1cm4gY21kOworCX0KKworCWlmICh0eXBlID09IFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpIHsKKwkJcmNiX3NpemUgPSBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9jY24pOworCQljbWRfZG9uZSA9IHBtY3JhaWRfcHJvY2Vzc19jY247CisJCWRtYSA9IHBpbnN0YW5jZS0+Y2NuLmJhZGRyICsgUE1DUkFJRF9BRU5fSERSX1NJWkU7CisJCWhjYW0gPSAmcGluc3RhbmNlLT5jY247CisJfSBlbHNlIHsKKwkJcmNiX3NpemUgPSBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4pOworCQljbWRfZG9uZSA9IHBtY3JhaWRfcHJvY2Vzc19sZG47CisJCWRtYSA9IHBpbnN0YW5jZS0+bGRuLmJhZGRyICsgUE1DUkFJRF9BRU5fSERSX1NJWkU7CisJCWhjYW0gPSAmcGluc3RhbmNlLT5sZG47CisJfQorCisJLyogaW5pdGlhbGl6ZSBjb21tYW5kIHBvaW50ZXIgdXNlZCBmb3IgSENBTSByZWdpc3RyYXRpb24gKi8KKwloY2FtLT5jbWQgPSBjbWQ7CisKKwlpb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKKwlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0gY3B1X3RvX2xlNjQoKGNtZC0+aW9hX2NiX2J1c19hZGRyKSArCisJCQkJCW9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX2lvYXJjYiwKKwkJCQkJCWFkZF9kYXRhLnUuaW9hZGxbMF0pKTsKKwlpb2FyY2ItPmlvYWRsX2xlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjKSk7CisJaW9hZGwgPSBpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGw7CisKKwkvKiBJbml0aWFsaXplIGlvYXJjYiAqLworCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gUkVRX1RZUEVfSENBTTsKKwlpb2FyY2ItPnJlc291cmNlX2hhbmRsZSA9IGNwdV90b19sZTMyKFBNQ1JBSURfSU9BX1JFU19IQU5ETEUpOworCWlvYXJjYi0+Y2RiWzBdID0gUE1DUkFJRF9IT1NUX0NPTlRST0xMRURfQVNZTkM7CisJaW9hcmNiLT5jZGJbMV0gPSB0eXBlOworCWlvYXJjYi0+Y2RiWzddID0gKHJjYl9zaXplID4+IDgpICYgMHhGRjsKKwlpb2FyY2ItPmNkYls4XSA9IChyY2Jfc2l6ZSkgJiAweEZGOworCisJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJjYl9zaXplKTsKKworCWlvYWRsWzBdLmZsYWdzIHw9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX1JFQURfTEFTVCk7CisJaW9hZGxbMF0uZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihyY2Jfc2l6ZSk7CisJaW9hZGxbMF0uYWRkcmVzcyA9IGNwdV90b19sZTMyKGRtYSk7CisKKwljbWQtPmNtZF9kb25lID0gY21kX2RvbmU7CisJcmV0dXJuIGNtZDsKK30KKworLyoqCisgKiBwbWNyYWlkX3NlbmRfaGNhbSAtIFNlbmQgYW4gSENBTSB0byBJT0EKKyAqIEBwaW5zdGFuY2U6IGlvYSBjb25maWcgc3RydWN0CisgKiBAdHlwZTogSENBTSB0eXBlCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgYSBIb3N0IENvbnRyb2xsZWQgQXN5bmMgY29tbWFuZCB0byBJT0EuCisgKgorICogUmV0dXJuIHZhbHVlOgorICogCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9zZW5kX2hjYW0oc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwgdTggdHlwZSkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCA9IHBtY3JhaWRfaW5pdF9oY2FtKHBpbnN0YW5jZSwgdHlwZSk7CisJcG1jcmFpZF9zZW5kX2hjYW1fY21kKGNtZCk7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX3ByZXBhcmVfY2FuY2VsX2NtZCAtIHByZXBhcmVzIGEgY29tbWFuZCBibG9jayB0byBhYm9ydCBhbm90aGVyCisgKgorICogQGNtZDogcG9pbnRlciB0byBjbWQgdGhhdCBpcyB1c2VkIGFzIGNhbmNlbGxpbmcgY29tbWFuZAorICogQGNtZF90b19jYW5jZWw6IHBvaW50ZXIgdG8gdGhlIGNvbW1hbmQgdGhhdCBuZWVkcyB0byBiZSBjYW5jZWxsZWQKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9wcmVwYXJlX2NhbmNlbF9jbWQoCisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQsCisJc3RydWN0IHBtY3JhaWRfY21kICpjbWRfdG9fY2FuY2VsCispCit7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2IgPSAmY21kLT5pb2FfY2ItPmlvYXJjYjsKKwlfX2JlNjQgaW9hcmNiX2FkZHIgPSBjbWRfdG9fY2FuY2VsLT5pb2FfY2ItPmlvYXJjYi5pb2FyY2JfYnVzX2FkZHI7CisKKwkvKiBHZXQgdGhlIHJlc291cmNlIGhhbmRsZSB0byB3aGVyZSB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkIGhhcyBiZWVuCisJICogc2VudC4KKwkgKi8KKwlpb2FyY2ItPnJlc291cmNlX2hhbmRsZSA9IGNtZF90b19jYW5jZWwtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZTsKKwlpb2FyY2ItPnJlcXVlc3RfdHlwZSA9IFJFUV9UWVBFX0lPQUNNRDsKKwltZW1zZXQoaW9hcmNiLT5jZGIsIDAsIFBNQ1JBSURfTUFYX0NEQl9MRU4pOworCWlvYXJjYi0+Y2RiWzBdID0gUE1DUkFJRF9BQk9SVF9DTUQ7CisKKwkvKiBJT0FSQ0IgYWRkcmVzcyBvZiB0aGUgY29tbWFuZCB0byBiZSBjYW5jZWxsZWQgaXMgZ2l2ZW4gaW4KKwkgKiBjZGJbMl0uLmNkYls5XSBpcyBCaWctRW5kaWFuIGZvcm1hdC4gTm90ZSB0aGF0IGxlbmd0aCBiaXRzIGluCisJICogSU9BUkNCIGFkZHJlc3MgYXJlIG5vdCBtYXNrZWQuCisJICovCisJaW9hcmNiX2FkZHIgPSBjcHVfdG9fYmU2NChpb2FyY2JfYWRkcik7CisJbWVtY3B5KCYoaW9hcmNiLT5jZGJbMl0pLCAmaW9hcmNiX2FkZHIsIHNpemVvZihpb2FyY2JfYWRkcikpOworfQorCisvKioKKyAqIHBtY3JhaWRfY2FuY2VsX2hjYW0gLSBzZW5kcyBBQk9SVCB0YXNrIHRvIGFib3J0IGEgZ2l2ZW4gSENBTQorICoKKyAqIEBjbWQ6IGNvbW1hbmQgdG8gYmUgdXNlZCBhcyBjYW5jZWxsaW5nIGNvbW1hbmQKKyAqIEB0eXBlOiBIQ0FNIHR5cGUKKyAqIEBjbWRfZG9uZTogb3AgZG9uZSBmdW5jdGlvbiBmb3IgdGhlIGNhbmNlbGxpbmcgY29tbWFuZAorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2NhbmNlbF9oY2FtKAorCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kLAorCXU4IHR5cGUsCisJdm9pZCAoKmNtZF9kb25lKSAoc3RydWN0IHBtY3JhaWRfY21kICopCispCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwlzdHJ1Y3QgcG1jcmFpZF9ob3N0cmNiICAqaGNhbTsKKworCXBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJaGNhbSA9ICAodHlwZSA9PSBQTUNSQUlEX0hDQU1fQ09ERV9MT0dfREFUQSkgPworCQkmcGluc3RhbmNlLT5sZG4gOiAmcGluc3RhbmNlLT5jY247CisKKwkvKiBwcmVwYXJlIGZvciBjYW5jZWxsaW5nIHByZXZpb3VzIGhjYW0gY29tbWFuZC4gSWYgdGhlIEhDQU0gaXMKKwkgKiBjdXJyZW50bHkgbm90IHBlbmRpbmcgd2l0aCBJT0EsIHdlIHdvdWxkIGhhdmUgaGNhbS0+Y21kIGFzIG5vbi1udWxsCisJICovCisJaWYgKGhjYW0tPmNtZCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwbWNyYWlkX3ByZXBhcmVfY2FuY2VsX2NtZChjbWQsIGhjYW0tPmNtZCk7CisKKwkvKiB3cml0aW5nIHRvIElPQVJSSU4gbXVzdCBiZSBwcm90ZWN0ZWQgYnkgaG9zdF9sb2NrLCBhcyBtaWQtbGF5ZXIKKwkgKiBzY2hlZHVsZSBxdWV1ZWNvbW1hbmQgd2hpbGUgd2UgYXJlIGRvaW5nIHRoaXMKKwkgKi8KKwlwbWNyYWlkX3NlbmRfY21kKGNtZCwgY21kX2RvbmUsCisJCQkgUE1DUkFJRF9JTlRFUk5BTF9USU1FT1VULAorCQkJIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2NhbmNlbF9jY24gLSBjYW5jZWwgQ0NOIEhDQU0gYWxyZWFkeSByZWdpc3RlcmVkIHdpdGggSU9BCisgKgorICogQGNtZDogY29tbWFuZCBibG9jayB0byBiZSB1c2VkIGZvciBjYW5jZWxsaW5nIHRoZSBIQ0FNCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfY2FuY2VsX2NjbihzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlwbWNyYWlkX2luZm8oInJlc3BvbnNlIGZvciBDYW5jZWwgTEROIENEQlswXSA9ICV4IGlvYXNjID0gJXhcbiIsCisJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCisJCSAgICAgbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKSk7CisKKwlwbWNyYWlkX3JlaW5pdF9jbWRibGsoY21kKTsKKworCXBtY3JhaWRfY2FuY2VsX2hjYW0oY21kLAorCQkJICAgIFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UsCisJCQkgICAgcG1jcmFpZF9pb2Ffc2h1dGRvd24pOworfQorCisvKioKKyAqIHBtY3JhaWRfY2FuY2VsX2xkbiAtIGNhbmNlbCBMRE4gSENBTSBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBJT0EKKyAqCisgKiBAY21kOiBjb21tYW5kIGJsb2NrIHRvIGJlIHVzZWQgZm9yIGNhbmNlbGxpbmcgdGhlIEhDQU0KKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9jYW5jZWxfbGRuKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXBtY3JhaWRfY2FuY2VsX2hjYW0oY21kLAorCQkJICAgIFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBLAorCQkJICAgIHBtY3JhaWRfY2FuY2VsX2Njbik7Cit9CisKKy8qKgorICogcG1jcmFpZF9leHBvc2VfcmVzb3VyY2UgLSBjaGVjayBpZiB0aGUgcmVzb3VyY2UgY2FuIGJlIGV4cG9zZWQgdG8gT1MKKyAqCisgKiBAY2ZndGU6IHBvaW50ZXIgdG8gY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyeSBvZiB0aGUgcmVzb3VyY2UKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJdHJ1ZSBpZiByZXNvdXJjZSBjYW4gYmUgYWRkZWQgdG8gbWlkbGF5ZXIsIGZhbHNlKDApIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IHBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSAqY2ZndGUpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoY2ZndGUtPnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfVlNFVCkKKwkJcmV0dmFsID0gKChjZmd0ZS0+dW5pcXVlX2ZsYWdzMSAmIDB4RkYpIDwgMHhGRSk7CisJZWxzZSBpZiAoY2ZndGUtPnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfR1NDU0kpCisJCXJldHZhbCA9IChSRVNfQlVTKGNmZ3RlLT5yZXNvdXJjZV9hZGRyZXNzKSAhPQorCQkJCVBNQ1JBSURfVklSVFVBTF9FTkNMX0JVU19JRCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogYXR0cmlidXRlcyBzdXBwb3J0ZWQgYnkgcG1jcmFpZF9ldmVudF9mYW1pbHkgKi8KK2VudW0geworCVBNQ1JBSURfQUVOX0FUVFJfVU5TUEVDLAorCVBNQ1JBSURfQUVOX0FUVFJfRVZFTlQsCisJX19QTUNSQUlEX0FFTl9BVFRSX01BWCwKK307CisjZGVmaW5lIFBNQ1JBSURfQUVOX0FUVFJfTUFYIChfX1BNQ1JBSURfQUVOX0FUVFJfTUFYIC0gMSkKKworLyogY29tbWFuZHMgc3VwcG9ydGVkIGJ5IHBtY3JhaWRfZXZlbnRfZmFtaWx5ICovCitlbnVtIHsKKwlQTUNSQUlEX0FFTl9DTURfVU5TUEVDLAorCVBNQ1JBSURfQUVOX0NNRF9FVkVOVCwKKwlfX1BNQ1JBSURfQUVOX0NNRF9NQVgsCit9OworI2RlZmluZSBQTUNSQUlEX0FFTl9DTURfTUFYIChfX1BNQ1JBSURfQUVOX0NNRF9NQVggLSAxKQorCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHBtY3JhaWRfZXZlbnRfZmFtaWx5ID0geworCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCisJLm5hbWUgPSAicG1jcmFpZCIsCisJLnZlcnNpb24gPSAxLAorCS5tYXhhdHRyID0gUE1DUkFJRF9BRU5fQVRUUl9NQVgKK307CisKKy8qKgorICogcG1jcmFpZF9uZXRsaW5rX2luaXQgLSByZWdpc3RlcnMgcG1jcmFpZF9ldmVudF9mYW1pbHkKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJMCBpZiB0aGUgcG1jcmFpZF9ldmVudF9mYW1pbHkgaXMgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQKKyAqIAl3aXRoIG5ldGxpbmsgZ2VuZXJpYywgbm9uLXplcm8gb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9uZXRsaW5rX2luaXQodm9pZCkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJnBtY3JhaWRfZXZlbnRfZmFtaWx5KTsKKworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwlwbWNyYWlkX2luZm8oInJlZ2lzdGVyZWQgTkVUTElOSyBHRU5FUklDIGdyb3VwOiAlZFxuIiwKKwkJICAgICBwbWNyYWlkX2V2ZW50X2ZhbWlseS5pZCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIHBtY3JhaWRfbmV0bGlua19yZWxlYXNlIC0gdW5yZWdpc3RlcnMgcG1jcmFpZF9ldmVudF9mYW1pbHkKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX25ldGxpbmtfcmVsZWFzZSh2b2lkKQoreworCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJnBtY3JhaWRfZXZlbnRfZmFtaWx5KTsKK30KKworLyoqCisgKiBwbWNyYWlkX25vdGlmeV9hZW4gLSBzZW5kcyBldmVudCBtc2cgdG8gdXNlciBzcGFjZSBhcHBsaWNhdGlvbgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQHR5cGU6IEhDQU0gdHlwZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCTAgaWYgc3VjY2VzcywgZXJyb3IgdmFsdWUgaW4gY2FzZSBvZiBhbnkgZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBwbWNyYWlkX25vdGlmeV9hZW4oc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwgdTggdHlwZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBwbWNyYWlkX2Flbl9tc2cgKmFlbl9tc2c7CisJdm9pZCAqbXNnX2hlYWRlcjsKKwlpbnQgZGF0YV9zaXplLCB0b3RhbF9zaXplOworCWludCByZXN1bHQ7CisKKworCWlmICh0eXBlID09IFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBKSB7CisJCWFlbl9tc2cgPSBwaW5zdGFuY2UtPmxkbi5tc2c7CisJCWRhdGFfc2l6ZSA9IHBpbnN0YW5jZS0+bGRuLmhjYW0tPmRhdGFfbGVuOworCX0gZWxzZSB7CisJCWFlbl9tc2cgPSBwaW5zdGFuY2UtPmNjbi5tc2c7CisJCWRhdGFfc2l6ZSA9IHBpbnN0YW5jZS0+Y2NuLmhjYW0tPmRhdGFfbGVuOworCX0KKworCWRhdGFfc2l6ZSArPSBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIpOworCWFlbl9tc2ctPmhvc3RubyA9IChwaW5zdGFuY2UtPmhvc3QtPnVuaXF1ZV9pZCA8PCAxNiB8CisJCQkgICBNSU5PUihwaW5zdGFuY2UtPmNkZXYuZGV2KSk7CisJYWVuX21zZy0+bGVuZ3RoID0gZGF0YV9zaXplOworCWRhdGFfc2l6ZSArPSBzaXplb2YoKmFlbl9tc2cpOworCisJdG90YWxfc2l6ZSA9IG5sYV90b3RhbF9zaXplKGRhdGFfc2l6ZSk7CisJc2tiID0gZ2VubG1zZ19uZXcodG90YWxfc2l6ZSwgR0ZQX0FUT01JQyk7CisKKworCWlmICghc2tiKSB7CisJCXBtY3JhaWRfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgYWVuIGRhdGEgU0tCIG9mIHNpemU6ICV4XG4iLAorCQkJICAgICB0b3RhbF9zaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogYWRkIHRoZSBnZW5ldGxpbmsgbWVzc2FnZSBoZWFkZXIgKi8KKwltc2dfaGVhZGVyID0gZ2VubG1zZ19wdXQoc2tiLCAwLCAwLAorCQkJCSAmcG1jcmFpZF9ldmVudF9mYW1pbHksIDAsCisJCQkJIFBNQ1JBSURfQUVOX0NNRF9FVkVOVCk7CisJaWYgKCFtc2dfaGVhZGVyKSB7CisJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gY29weSBjb21tYW5kIGRldGFpbHNcbiIpOworCQlubG1zZ19mcmVlKHNrYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlc3VsdCA9IG5sYV9wdXQoc2tiLCBQTUNSQUlEX0FFTl9BVFRSX0VWRU5ULCBkYXRhX3NpemUsIGFlbl9tc2cpOworCisJaWYgKHJlc3VsdCkgeworCQlwbWNyYWlkX2VycigiZmFpbGVkIHRvIGNvcHkgQUVOIGF0dHJpYnV0ZSBkYXRhIFxuIik7CisJCW5sbXNnX2ZyZWUoc2tiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc2VuZCBnZW5ldGxpbmsgbXVsdGljYXN0IG1lc3NhZ2UgdG8gbm90aWZ5IGFwcHBsaWNhdGlvbnMgKi8KKwlyZXN1bHQgPSBnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkZXIpOworCisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcG1jcmFpZF9lcnIoImdlbmxtc2dfZW5kIGZhaWxlZFxuIik7CisJCW5sbXNnX2ZyZWUoc2tiKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwlyZXN1bHQgPQorCQlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHBtY3JhaWRfZXZlbnRfZmFtaWx5LmlkLCBHRlBfQVRPTUlDKTsKKworCS8qIElmIHRoZXJlIGFyZSBubyBsaXN0ZW5lcnMsIGdlbmxtc2dfbXVsdGljYXN0IG1heSByZXR1cm4gbm9uLXplcm8KKwkgKiB2YWx1ZS4KKwkgKi8KKwlpZiAocmVzdWx0KQorCQlwbWNyYWlkX2luZm8oImZhaWxlZCB0byBzZW5kICVzIGV2ZW50IG1lc3NhZ2UgJXghXG4iLAorCQkJdHlwZSA9PSBQTUNSQUlEX0hDQU1fQ09ERV9MT0dfREFUQSA/ICJMRE4iIDogIkNDTiIsCisJCQlyZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogcG1jcmFpZF9oYW5kbGVfY29uZmlnX2NoYW5nZSAtIEhhbmRsZSBhIGNvbmZpZyBjaGFuZ2UgZnJvbSB0aGUgYWRhcHRlcgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2hhbmRsZV9jb25maWdfY2hhbmdlKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5ICpjZmdfZW50cnk7CisJc3RydWN0IHBtY3JhaWRfaGNhbV9jY24gKmNjbl9oY2FtOworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kOworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY2ZnY21kOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXMgPSBOVUxMOworCXUzMiBuZXdfZW50cnkgPSAxOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1bnNpZ25lZCBsb25nIGhvc3RfbG9ja19mbGFnczsKKwlpbnQgcmM7CisKKwljY25faGNhbSA9IChzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiAqKXBpbnN0YW5jZS0+Y2NuLmhjYW07CisJY2ZnX2VudHJ5ID0gJmNjbl9oY2FtLT5jZmdfZW50cnk7CisKKwlwbWNyYWlkX2luZm8KKwkJKCJDQ04oJXgpOiAleCB0eXBlOiAleCBsb3N0OiAleCBmbGFnczogJXggcmVzOiAleDoleDoleDoleFxuIiwKKwkJIHBpbnN0YW5jZS0+Y2NuLmhjYW0tPmlsaWQsCisJCSBwaW5zdGFuY2UtPmNjbi5oY2FtLT5vcF9jb2RlLAorCQkgcGluc3RhbmNlLT5jY24uaGNhbS0+bm90aWZpY2F0aW9uX3R5cGUsCisJCSBwaW5zdGFuY2UtPmNjbi5oY2FtLT5ub3RpZmljYXRpb25fbG9zdCwKKwkJIHBpbnN0YW5jZS0+Y2NuLmhjYW0tPmZsYWdzLAorCQkgcGluc3RhbmNlLT5ob3N0LT51bmlxdWVfaWQsCisJCSBSRVNfSVNfVlNFVCgqY2ZnX2VudHJ5KSA/IFBNQ1JBSURfVlNFVF9CVVNfSUQgOgorCQkgKFJFU19JU19HU0NTSSgqY2ZnX2VudHJ5KSA/IFBNQ1JBSURfUEhZU19CVVNfSUQgOgorCQkJUkVTX0JVUyhjZmdfZW50cnktPnJlc291cmNlX2FkZHJlc3MpKSwKKwkJIFJFU19JU19WU0VUKCpjZmdfZW50cnkpID8gY2ZnX2VudHJ5LT51bmlxdWVfZmxhZ3MxIDoKKwkJCVJFU19UQVJHRVQoY2ZnX2VudHJ5LT5yZXNvdXJjZV9hZGRyZXNzKSwKKwkJIFJFU19MVU4oY2ZnX2VudHJ5LT5yZXNvdXJjZV9hZGRyZXNzKSk7CisKKworCS8qIElmIHRoaXMgSENBTSBpbmRpY2F0ZXMgYSBsb3N0IG5vdGlmaWNhdGlvbiwgcmVhZCB0aGUgY29uZmlnIHRhYmxlICovCisJaWYgKHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm5vdGlmaWNhdGlvbl9sb3N0KSB7CisJCWNmZ2NtZCA9IHBtY3JhaWRfZ2V0X2ZyZWVfY21kKHBpbnN0YW5jZSk7CisJCWlmIChjZmdjbWQpIHsKKwkJCXBtY3JhaWRfaW5mbygibG9zdCBDQ04sIHJlYWRpbmcgY29uZmlnIHRhYmxlXGIiKTsKKwkJCXBpbnN0YW5jZS0+cmVpbml0X2NmZ190YWJsZSA9IDE7CisJCQlwbWNyYWlkX3F1ZXJ5Y2ZnKGNmZ2NtZCk7CisJCX0gZWxzZSB7CisJCQlwbWNyYWlkX2VycigibG9zdCBDQ04sIG5vIGZyZWUgY21kIGZvciBxdWVyeWNmZ1xuIik7CisJCX0KKwkJZ290byBvdXRfbm90aWZ5X2FwcHM7CisJfQorCisJLyogSWYgdGhpcyByZXNvdXJjZSBpcyBub3QgZ29pbmcgdG8gYmUgYWRkZWQgdG8gbWlkLWxheWVyLCBqdXN0IG5vdGlmeQorCSAqIGFwcGxpY2F0aW9ucyBhbmQgcmV0dXJuCisJICovCisJaWYgKCFwbWNyYWlkX2V4cG9zZV9yZXNvdXJjZShjZmdfZW50cnkpKQorCQlnb3RvIG91dF9ub3RpZnlfYXBwczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssIGxvY2tfZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzLCAmcGluc3RhbmNlLT51c2VkX3Jlc19xLCBxdWV1ZSkgeworCQlyYyA9IG1lbWNtcCgmcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcywKKwkJCSAgICAmY2ZnX2VudHJ5LT5yZXNvdXJjZV9hZGRyZXNzLAorCQkJICAgIHNpemVvZihjZmdfZW50cnktPnJlc291cmNlX2FkZHJlc3MpKTsKKwkJaWYgKCFyYykgeworCQkJbmV3X2VudHJ5ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKG5ld19lbnRyeSkgeworCisJCS8qIElmIHRoZXJlIGFyZSBtb3JlIG51bWJlciBvZiByZXNvdXJjZXMgdGhhbiB3aGF0IGRyaXZlciBjYW4KKwkJICogbWFuYWdlLCBkbyBub3Qgbm90aWZ5IHRoZSBhcHBsaWNhdGlvbnMgYWJvdXQgdGhlIENDTi4gSnVzdAorCQkgKiBpZ25vcmUgdGhpcyBub3RpZmljYXRpb25zIGFuZCByZS1yZWdpc3RlciB0aGUgc2FtZSBIQ0FNCisJCSAqLworCQlpZiAobGlzdF9lbXB0eSgmcGluc3RhbmNlLT5mcmVlX3Jlc19xKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLAorCQkJCQkJbG9ja19mbGFncyk7CisJCQlwbWNyYWlkX2VycigidG9vIG1hbnkgcmVzb3VyY2VzIGF0dGFjaGVkXG4iKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgIGhvc3RfbG9ja19mbGFncyk7CisJCQlwbWNyYWlkX3NlbmRfaGNhbShwaW5zdGFuY2UsCisJCQkJCSAgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXJlcyA9IGxpc3RfZW50cnkocGluc3RhbmNlLT5mcmVlX3Jlc19xLm5leHQsCisJCQkJIHN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5LCBxdWV1ZSk7CisKKwkJbGlzdF9kZWwoJnJlcy0+cXVldWUpOworCQlyZXMtPnNjc2lfZGV2ID0gTlVMTDsKKwkJcmVzLT5yZXNldF9wcm9ncmVzcyA9IDA7CisJCWxpc3RfYWRkX3RhaWwoJnJlcy0+cXVldWUsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EpOworCX0KKworCW1lbWNweSgmcmVzLT5jZmdfZW50cnksIGNmZ19lbnRyeSwKKwkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSkpOworCisJaWYgKHBpbnN0YW5jZS0+Y2NuLmhjYW0tPm5vdGlmaWNhdGlvbl90eXBlID09CisJICAgIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0RFTEVURUQpIHsKKwkJaWYgKHJlcy0+c2NzaV9kZXYpIHsKKwkJCXJlcy0+Y2hhbmdlX2RldGVjdGVkID0gUkVTX0NIQU5HRV9ERUw7CisJCQlyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9oYW5kbGUgPQorCQkJCVBNQ1JBSURfSU5WQUxJRF9SRVNfSEFORExFOworCQkJc2NoZWR1bGVfd29yaygmcGluc3RhbmNlLT53b3JrZXJfcSk7CisJCX0gZWxzZSB7CisJCQkvKiBUaGlzIG1heSBiZSBvbmUgb2YgdGhlIG5vbi1leHBvc2VkIHJlc291cmNlcyAqLworCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpOworCQl9CisJfSBlbHNlIGlmICghcmVzLT5zY3NpX2RldikgeworCQlyZXMtPmNoYW5nZV9kZXRlY3RlZCA9IFJFU19DSEFOR0VfQUREOworCQlzY2hlZHVsZV93b3JrKCZwaW5zdGFuY2UtPndvcmtlcl9xKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLCBsb2NrX2ZsYWdzKTsKKworb3V0X25vdGlmeV9hcHBzOgorCisJLyogTm90aWZ5IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0byByZWdpc3RlcmVkIGFwcGxpY2F0aW9ucy4qLworCWlmICghcG1jcmFpZF9kaXNhYmxlX2FlbikKKwkJcG1jcmFpZF9ub3RpZnlfYWVuKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSk7CisKKwljbWQgPSBwbWNyYWlkX2luaXRfaGNhbShwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpOworCWlmIChjbWQpCisJCXBtY3JhaWRfc2VuZF9oY2FtX2NtZChjbWQpOworfQorCisvKioKKyAqIHBtY3JhaWRfZ2V0X2Vycm9yX2luZm8gLSByZXR1cm4gZXJyb3Igc3RyaW5nIGZvciBhbiBpb2FzYworICogQGlvYXNjOiBpb2FzYyBjb2RlCisgKiBSZXR1cm4gVmFsdWUKKyAqCSBub25lCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG1jcmFpZF9pb2FzY19lcnJvciAqcG1jcmFpZF9nZXRfZXJyb3JfaW5mbyh1MzIgaW9hc2MpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1jcmFpZF9pb2FzY19lcnJvcl90YWJsZSk7IGkrKykgeworCQlpZiAocG1jcmFpZF9pb2FzY19lcnJvcl90YWJsZVtpXS5pb2FzY19jb2RlID09IGlvYXNjKQorCQkJcmV0dXJuICZwbWNyYWlkX2lvYXNjX2Vycm9yX3RhYmxlW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBwbWNyYWlkX2lvYXNjX2xvZ2dlciAtIGxvZyBJT0FTQyBpbmZvcm1hdGlvbiBiYXNlZCB1c2VyLXNldHRpbmdzCisgKiBAaW9hc2M6IGlvYXNjIGNvZGUKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gY29tbWFuZCB0aGF0IHJlc3VsdGVkIGluICdpb2FzYycKKyAqLwordm9pZCBwbWNyYWlkX2lvYXNjX2xvZ2dlcih1MzIgaW9hc2MsIHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2lvYXNjX2Vycm9yICplcnJvcl9pbmZvID0gcG1jcmFpZF9nZXRfZXJyb3JfaW5mbyhpb2FzYyk7CisKKwlpZiAoZXJyb3JfaW5mbyA9PSBOVUxMIHx8CisJCWNtZC0+ZHJ2X2luc3QtPmN1cnJlbnRfbG9nX2xldmVsIDwgZXJyb3JfaW5mby0+bG9nX2xldmVsKQorCQlyZXR1cm47CisKKwkvKiBsb2cgdGhlIGVycm9yIHN0cmluZyAqLworCXBtY3JhaWRfZXJyKCJjbWQgWyVkXSBmb3IgcmVzb3VyY2UgJXggZmFpbGVkIHdpdGggJXgoJXMpXG4iLAorCQljbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNvdXJjZV9oYW5kbGUsCisJCWxlMzJfdG9fY3B1KGlvYXNjKSwgZXJyb3JfaW5mby0+ZXJyb3Jfc3RyaW5nKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2hhbmRsZV9lcnJvcl9sb2cgLSBIYW5kbGUgYSBjb25maWcgY2hhbmdlIChlcnJvciBsb2cpIGZyb20gdGhlIElPQQorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIHZhbHVlOgorICogIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9oYW5kbGVfZXJyb3JfbG9nKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4gKmhjYW1fbGRuOworCXUzMiBpb2FzYzsKKworCWhjYW1fbGRuID0gKHN0cnVjdCBwbWNyYWlkX2hjYW1fbGRuICopcGluc3RhbmNlLT5sZG4uaGNhbTsKKworCXBtY3JhaWRfaW5mbworCQkoIkxETigleCk6ICV4IHR5cGU6ICV4IGxvc3Q6ICV4IGZsYWdzOiAleCBvdmVybGF5IGlkOiAleFxuIiwKKwkJIHBpbnN0YW5jZS0+bGRuLmhjYW0tPmlsaWQsCisJCSBwaW5zdGFuY2UtPmxkbi5oY2FtLT5vcF9jb2RlLAorCQkgcGluc3RhbmNlLT5sZG4uaGNhbS0+bm90aWZpY2F0aW9uX3R5cGUsCisJCSBwaW5zdGFuY2UtPmxkbi5oY2FtLT5ub3RpZmljYXRpb25fbG9zdCwKKwkJIHBpbnN0YW5jZS0+bGRuLmhjYW0tPmZsYWdzLAorCQkgcGluc3RhbmNlLT5sZG4uaGNhbS0+b3ZlcmxheV9pZCk7CisKKwkvKiBsb2cgb25seSB0aGUgZXJyb3JzLCBubyBuZWVkIHRvIGxvZyBpbmZvcm1hdGlvbmFsIGxvZyBlbnRyaWVzICovCisJaWYgKHBpbnN0YW5jZS0+bGRuLmhjYW0tPm5vdGlmaWNhdGlvbl90eXBlICE9CisJICAgIE5PVElGSUNBVElPTl9UWVBFX0VSUk9SX0xPRykKKwkJcmV0dXJuOworCisJaWYgKHBpbnN0YW5jZS0+bGRuLmhjYW0tPm5vdGlmaWNhdGlvbl9sb3N0ID09CisJICAgIEhPU1RSQ0JfTk9USUZJQ0FUSU9OU19MT1NUKQorCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIkVycm9yIG5vdGlmaWNhdGlvbnMgbG9zdFxuIik7CisKKwlpb2FzYyA9IGxlMzJfdG9fY3B1KGhjYW1fbGRuLT5lcnJvcl9sb2cuZmRfaW9hc2MpOworCisJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVCB8fAorCQlpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVRfQllfT1RIRVIpIHsKKwkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCQkiVW5pdEF0dGVudGlvbiBkdWUgdG8gSU9BIEJ1cyBSZXNldFxuIik7CisJCXNjc2lfcmVwb3J0X2J1c19yZXNldCgKKwkJCXBpbnN0YW5jZS0+aG9zdCwKKwkJCVJFU19CVVMoaGNhbV9sZG4tPmVycm9yX2xvZy5mZF9yYSkpOworCX0KKworCXJldHVybjsKK30KKworLyoqCisgKiBwbWNyYWlkX3Byb2Nlc3NfY2NuIC0gT3AgZG9uZSBmdW5jdGlvbiBmb3IgYSBDQ04uCisgKiBAY21kOiBwb2ludGVyIHRvIGNvbW1hbmQgc3RydWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgb3AgZG9uZSBmdW5jdGlvbiBmb3IgYSBjb25maWd1cmF0aW9uCisgKiBjaGFuZ2Ugbm90aWZpY2F0aW9uCisgKgorICogUmV0dXJuIHZhbHVlOgorICogbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3Byb2Nlc3NfY2NuKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCXUzMiBpb2FzYyA9IGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYyk7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCisJcGluc3RhbmNlLT5jY24uY21kID0gTlVMTDsKKwlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKworCS8qIElmIGRyaXZlciBpbml0aWF0ZWQgSU9BIHJlc2V0IGhhcHBlbmVkIHdoaWxlIHRoaXMgaGNhbSB3YXMgcGVuZGluZworCSAqIHdpdGggSU9BLCBvciBJT0EgYnJpbmdkb3duIHNlcXVlbmNlIGlzIGluIHByb2dyZXNzLCBubyBuZWVkIHRvCisJICogcmUtcmVnaXN0ZXIgdGhlIGhjYW0KKwkgKi8KKwlpZiAoaW9hc2MgPT0gUE1DUkFJRF9JT0FTQ19JT0FfV0FTX1JFU0VUIHx8CisJICAgIGF0b21pY19yZWFkKCZwaW5zdGFuY2UtPmNjbi5pZ25vcmUpID09IDEpIHsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoaW9hc2MpIHsKKwkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCQkiSG9zdCBSQ0IgKENDTikgZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwgaW9hc2MpOworCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCXBtY3JhaWRfc2VuZF9oY2FtKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCX0gZWxzZSB7CisJCXBtY3JhaWRfaGFuZGxlX2NvbmZpZ19jaGFuZ2UocGluc3RhbmNlKTsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9wcm9jZXNzX2xkbiAtIG9wIGRvbmUgZnVuY3Rpb24gZm9yIGFuIExETgorICogQGNtZDogcG9pbnRlciB0byBjb21tYW5kIGJsb2NrCisgKgorICogUmV0dXJuIHZhbHVlCisgKiAgIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9pbml0aWF0ZV9yZXNldChzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKTsKKworc3RhdGljIHZvaWQgcG1jcmFpZF9wcm9jZXNzX2xkbihzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwlzdHJ1Y3QgcG1jcmFpZF9oY2FtX2xkbiAqbGRuX2hjYW0gPQorCQkJKHN0cnVjdCBwbWNyYWlkX2hjYW1fbGRuICopcGluc3RhbmNlLT5sZG4uaGNhbTsKKwl1MzIgaW9hc2MgPSBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpOworCXUzMiBmZF9pb2FzYyA9IGxlMzJfdG9fY3B1KGxkbl9oY2FtLT5lcnJvcl9sb2cuZmRfaW9hc2MpOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKworCS8qIHJldHVybiB0aGUgY29tbWFuZCBibG9jayBiYWNrIHRvIGZyZWVwb29sICovCisJcGluc3RhbmNlLT5sZG4uY21kID0gTlVMTDsKKwlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKworCS8qIElmIGRyaXZlciBpbml0aWF0ZWQgSU9BIHJlc2V0IGhhcHBlbmVkIHdoaWxlIHRoaXMgaGNhbSB3YXMgcGVuZGluZworCSAqIHdpdGggSU9BLCBubyBuZWVkIHRvIHJlLXJlZ2lzdGVyIHRoZSBoY2FtIGFzIHJlc2V0IGVuZ2luZSB3aWxsIGRvIGl0CisJICogb25jZSByZXNldCBzZXF1ZW5jZSBpcyBjb21wbGV0ZQorCSAqLworCWlmIChpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX0lPQV9XQVNfUkVTRVQgfHwKKwkgICAgYXRvbWljX3JlYWQoJnBpbnN0YW5jZS0+Y2NuLmlnbm9yZSkgPT0gMSkgeworCQlyZXR1cm47CisJfSBlbHNlIGlmICghaW9hc2MpIHsKKwkJcG1jcmFpZF9oYW5kbGVfZXJyb3JfbG9nKHBpbnN0YW5jZSk7CisJCWlmIChmZF9pb2FzYyA9PSBQTUNSQUlEX0lPQVNDX05SX0lPQV9SRVNFVF9SRVFVSVJFRCkgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgbG9ja19mbGFncyk7CisJCQlwbWNyYWlkX2luaXRpYXRlX3Jlc2V0KHBpbnN0YW5jZSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgICAgICAgbG9ja19mbGFncyk7CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCSJIb3N0IFJDQihMRE4pIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKKwl9CisJLyogc2VuZCBuZXRsaW5rIG1lc3NhZ2UgZm9yIEhDQU0gbm90aWZpY2F0aW9uIGlmIGVuYWJsZWQgKi8KKwlpZiAoIXBtY3JhaWRfZGlzYWJsZV9hZW4pCisJCXBtY3JhaWRfbm90aWZ5X2FlbihwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBKTsKKworCWNtZCA9IHBtY3JhaWRfaW5pdF9oY2FtKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfTE9HX0RBVEEpOworCWlmIChjbWQpCisJCXBtY3JhaWRfc2VuZF9oY2FtX2NtZChjbWQpOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVnaXN0ZXJfaGNhbXMgLSByZWdpc3RlciBIQ0FNcyBmb3IgQ0NOIGFuZCBMRE4KKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZQorICogICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVnaXN0ZXJfaGNhbXMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlwbWNyYWlkX3NlbmRfaGNhbShwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpOworCXBtY3JhaWRfc2VuZF9oY2FtKHBpbnN0YW5jZSwgUE1DUkFJRF9IQ0FNX0NPREVfTE9HX0RBVEEpOworfQorCisvKioKKyAqIHBtY3JhaWRfdW5yZWdpc3Rlcl9oY2FtcyAtIGNhbmNlbCBIQ0FNcyByZWdpc3RlcmVkIGFscmVhZHkKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gY29tbWFuZCB1c2VkIGFzIHBhcnQgb2YgcmVzZXQgc2VxdWVuY2UKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF91bnJlZ2lzdGVyX2hjYW1zKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OworCisJLyogRHVyaW5nIElPQSBicmluZ2Rvd24sIEhDQU0gZ2V0cyBmaXJlZCBhbmQgdGFza2xldCBwcm9jZWVkcyB3aXRoCisJICogaGFuZGxpbmcgaGNhbSByZXNwb25zZSB0aG91Z2ggaXQgaXMgbm90IG5lY2Vzc2FyeS4gSW4gb3JkZXIgdG8KKwkgKiBwcmV2ZW50IHRoaXMsIHNldCAnaWdub3JlJywgc28gdGhhdCBicmluZy1kb3duIHNlcXVlbmNlIGRvZXNuJ3QKKwkgKiByZS1zZW5kIGFueSBtb3JlIGhjYW1zCisJICovCisJYXRvbWljX3NldCgmcGluc3RhbmNlLT5jY24uaWdub3JlLCAxKTsKKwlhdG9taWNfc2V0KCZwaW5zdGFuY2UtPmxkbi5pZ25vcmUsIDEpOworCisJLyogSWYgYWRhcHRlciByZXNldCB3YXMgZm9yY2VkIGFzIHBhcnQgb2YgcnVudGltZSByZXNldCBzZXF1ZW5jZSwKKwkgKiBzdGFydCB0aGUgcmVzZXQgc2VxdWVuY2UuCisJICovCisJaWYgKHBpbnN0YW5jZS0+Zm9yY2VfaW9hX3Jlc2V0ICYmICFwaW5zdGFuY2UtPmlvYV9icmluZ2Rvd24pIHsKKwkJcGluc3RhbmNlLT5mb3JjZV9pb2FfcmVzZXQgPSAwOworCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9SRVNFVF9BTEVSVDsKKwkJcG1jcmFpZF9yZXNldF9hbGVydChjbWQpOworCQlyZXR1cm47CisJfQorCisJLyogRHJpdmVyIHRyaWVzIHRvIGNhbmNlbCBIQ0FNcyBieSBzZW5kaW5nIEFCT1JUIFRBU0sgZm9yIGVhY2ggSENBTQorCSAqIG9uZSBhZnRlciB0aGUgb3RoZXIuIFNvIENDTiBjYW5jZWxsYXRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgYnkKKwkgKiBwbWNyYWlkX2NhbmNlbF9sZG4gaXRzZWxmLgorCSAqLworCXBtY3JhaWRfY2FuY2VsX2xkbihjbWQpOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVzZXRfZW5hYmxlX2lvYSAtIHJlLWVuYWJsZSBJT0EgYWZ0ZXIgYSBoYXJkIHJlc2V0CisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBSZXR1cm4gVmFsdWUKKyAqICAxIGlmIFRSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwgaXMgYWN0aXZlLCBvdGhlcndpc2UgMAorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3JlaW5pdF9idWZmZXJzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopOworCitzdGF0aWMgaW50IHBtY3JhaWRfcmVzZXRfZW5hYmxlX2lvYShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXUzMiBpbnRyczsKKworCXBtY3JhaWRfcmVpbml0X2J1ZmZlcnMocGluc3RhbmNlKTsKKwlpbnRycyA9IHBtY3JhaWRfcmVhZF9pbnRlcnJ1cHRzKHBpbnN0YW5jZSk7CisKKwlwbWNyYWlkX2VuYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgUE1DUkFJRF9QQ0lfSU5URVJSVVBUUyk7CisKKwlpZiAoaW50cnMgJiBJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMKSB7CisJCWlvd3JpdGUzMihJTlRSU19UUkFOU0lUSU9OX1RPX09QRVJBVElPTkFMLAorCQkJcGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcpOworCQlpb3dyaXRlMzIoSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCwKKwkJCXBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X2Nscl9yZWcpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9zb2Z0X3Jlc2V0IC0gcGVyZm9ybXMgYSBzb2Z0IHJlc2V0IGFuZCBtYWtlcyBJT0EgYmVjb21lIHJlYWR5CisgKiBAY21kIDogcG9pbnRlciB0byByZXNldCBjb21tYW5kIGJsb2NrCisgKgorICogUmV0dXJuIFZhbHVlCisgKglub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfc29mdF9yZXNldChzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1MzIgaW50X3JlZzsKKwl1MzIgZG9vcmJlbGw7CisKKwkvKiBUaGVyZSB3aWxsIGJlIGFuIGludGVycnVwdCB3aGVuIFRyYW5zaXRpb24gdG8gT3BlcmF0aW9uYWwgYml0IGlzCisJICogc2V0IHNvIHRhc2tsZXQgd291bGQgZXhlY3V0ZSBuZXh0IHJlc2V0IHRhc2suIFRoZSB0aW1lb3V0IGhhbmRsZXIKKwkgKiB3b3VsZCByZS1pbml0aWF0ZSBhIHJlc2V0CisJICovCisJY21kLT5jbWRfZG9uZSA9IHBtY3JhaWRfaW9hX3Jlc2V0OworCWNtZC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNtZDsKKwljbWQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKKwkJCSAgICAgbXNlY3NfdG9famlmZmllcyhQTUNSQUlEX1RSQU5TT1BfVElNRU9VVCk7CisJY21kLT50aW1lci5mdW5jdGlvbiA9ICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcjsKKworCWlmICghdGltZXJfcGVuZGluZygmY21kLT50aW1lcikpCisJCWFkZF90aW1lcigmY21kLT50aW1lcik7CisKKwkvKiBFbmFibGUgZGVzdHJ1Y3RpdmUgZGlhZ25vc3RpY3Mgb24gSU9BIGlmIGl0IGlzIG5vdCB5ZXQgaW4KKwkgKiBvcGVyYXRpb25hbCBzdGF0ZQorCSAqLworCWRvb3JiZWxsID0gRE9PUkJFTExfUlVOVElNRV9SRVNFVCB8CisJCSAgIERPT1JCRUxMX0VOQUJMRV9ERVNUUlVDVElWRV9ESUFHUzsKKworCWlvd3JpdGUzMihkb29yYmVsbCwgcGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKTsKKwlpbnRfcmVnID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfcmVnKTsKKwlwbWNyYWlkX2luZm8oIldhaXRpbmcgZm9yIElPQSB0byBiZWNvbWUgb3BlcmF0aW9uYWwgJXg6JXhcbiIsCisJCSAgICAgaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5ob3N0X2lvYV9pbnRlcnJ1cHRfcmVnKSwKKwkJICAgICBpbnRfcmVnKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2dldF9kdW1wIC0gcmV0cmlldmVzIElPQSBkdW1wIGluIGNhc2Ugb2YgVW5pdCBDaGVjayBpbnRlcnJ1cHQKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKglub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfZ2V0X2R1bXAoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlwbWNyYWlkX2luZm8oIiVzIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2ZhaWxfb3V0c3RhbmRpbmdfY21kcyAtIEZhaWxzIGFsbCBvdXRzdGFuZGluZyBvcHMuCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBmYWlscyBhbGwgb3V0c3RhbmRpbmcgb3BzLiBJZiB0aGV5IGFyZSBzdWJtaXR0ZWQgdG8gSU9BCisgKiBhbHJlYWR5LCBpdCBzZW5kcyBjYW5jZWwgYWxsIG1lc3NhZ2VzIGlmIElPQSBpcyBzdGlsbCBhY2NlcHRpbmcgSU9BUkNCcywKKyAqIG90aGVyd2lzZSBqdXN0IGNvbXBsZXRlcyB0aGUgY29tbWFuZHMgYW5kIHJldHVybnMgdGhlIGNtZCBibG9ja3MgdG8gZnJlZQorICogcG9vbC4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2ZhaWxfb3V0c3RhbmRpbmdfY21kcyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kLCAqdGVtcDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisKKwkvKiBwZW5kaW5nIGNvbW1hbmQgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgcGVuZGluZ19wb29sX2xvY2suIEl0cworCSAqIHRyYXZlcnNhbCBtdXN0IGJlIGRvbmUgYXMgd2l0aGluIHRoaXMgbG9jaworCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY21kLCB0ZW1wLCAmcGluc3RhbmNlLT5wZW5kaW5nX2NtZF9wb29sLAorCQkJCSBmcmVlX2xpc3QpIHsKKwkJbGlzdF9kZWwoJmNtZC0+ZnJlZV9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywKKwkJCQkJbG9ja19mbGFncyk7CisJCWNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYyA9CisJCQljcHVfdG9fbGUzMihQTUNSQUlEX0lPQVNDX0lPQV9XQVNfUkVTRVQpOworCQljbWQtPmlvYV9jYi0+aW9hc2EuaWxpZCA9CisJCQljcHVfdG9fYmUzMihQTUNSQUlEX0RSSVZFUl9JTElEKTsKKworCQkvKiBJbiBjYXNlIHRoZSBjb21tYW5kIHRpbWVyIGlzIHN0aWxsIHJ1bm5pbmcgKi8KKwkJZGVsX3RpbWVyKCZjbWQtPnRpbWVyKTsKKworCQkvKiBJZiB0aGlzIGlzIGFuIElPIGNvbW1hbmQsIGNvbXBsZXRlIGl0IGJ5IGludm9raW5nIHNjc2lfZG9uZQorCQkgKiBmdW5jdGlvbi4gSWYgdGhpcyBpcyBvbmUgb2YgdGhlIGludGVybmFsIGNvbW1hbmRzIG90aGVyCisJCSAqIHRoYW4gcG1jcmFpZF9pb2FfcmVzZXQgYW5kIEhDQU0gY29tbWFuZHMgaW52b2tlIGNtZF9kb25lIHRvCisJCSAqIGNvbXBsZXRlIGl0CisJCSAqLworCQlpZiAoY21kLT5zY3NpX2NtZCkgeworCisJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZCA9IGNtZC0+c2NzaV9jbWQ7CisJCQlfX2xlMzIgcmVzcCA9IGNtZC0+aW9hX2NiLT5pb2FyY2IucmVzcG9uc2VfaGFuZGxlOworCisJCQlzY3NpX2NtZC0+cmVzdWx0IHw9IERJRF9FUlJPUiA8PCAxNjsKKworCQkJc2NzaV9kbWFfdW5tYXAoc2NzaV9jbWQpOworCQkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CisKKworCQkJcG1jcmFpZF9pbmZvKCJmYWlsaW5nKCVkKSBDREJbMF0gPSAleCByZXN1bHQ6ICV4XG4iLAorCQkJCSAgICAgbGUzMl90b19jcHUocmVzcCkgPj4gMiwKKwkJCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQkJCSAgICAgc2NzaV9jbWQtPnJlc3VsdCk7CisJCQlzY3NpX2NtZC0+c2NzaV9kb25lKHNjc2lfY21kKTsKKwkJfSBlbHNlIGlmIChjbWQtPmNtZF9kb25lID09IHBtY3JhaWRfaW50ZXJuYWxfZG9uZSB8fAorCQkJICAgY21kLT5jbWRfZG9uZSA9PSBwbWNyYWlkX2VycF9kb25lKSB7CisJCQljbWQtPmNtZF9kb25lKGNtZCk7CisJCX0gZWxzZSBpZiAoY21kLT5jbWRfZG9uZSAhPSBwbWNyYWlkX2lvYV9yZXNldCkgeworCQkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CisJCX0KKworCQlhdG9taWNfZGVjKCZwaW5zdGFuY2UtPm91dHN0YW5kaW5nX2NtZHMpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywgbG9ja19mbGFncyk7Cit9CisKKy8qKgorICogcG1jcmFpZF9pb2FfcmVzZXQgLSBJbXBsZW1lbnRhdGlvbiBvZiBJT0EgcmVzZXQgbG9naWMKKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIHRoZSBjbWQgYmxvY2sgdG8gYmUgdXNlZCBmb3IgZW50aXJlIHJlc2V0IHByb2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGV4ZWN1dGVzIG1vc3Qgb2YgdGhlIHN0ZXBzIHJlcXVpcmVkIGZvciBJT0EgcmVzZXQuIFRoaXMgZ2V0cworICogY2FsbGVkIGJ5IHVzZXIgdGhyZWFkcyAobW9kcHJvYmUvaW5zbW9kL3JtbW9kKSB0aW1lciwgdGFza2xldCBhbmQgbWlkbGF5ZXIncworICogJ2VoXycgdGhyZWFkLiBBY2Nlc3MgdG8gdmFyaWFibGVzIHVzZWQgZm9yIGNvbnRyb2xpbmcgdGhlIHJlc2V0IHNlcXVlbmNlIGlzCisgKiBzeW5jaHJvbml6ZWQgdXNpbmcgaG9zdCBsb2NrLiBWYXJpb3VzIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHJlc2V0IHByb2Nlc3MKKyAqIHdvdWxkIG1ha2UgdXNlIG9mIGEgc2luZ2xlIGNvbW1hbmQgYmxvY2ssIHBvaW50ZXIgdG8gd2hpY2ggaXMgYWxzbyBzdG9yZWQgaW4KKyAqIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlLgorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9pb2FfcmVzZXQoc3RydWN0IHBtY3JhaWRfY21kICpjbWQpCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJdTggcmVzZXRfY29tcGxldGUgPSAwOworCisJcGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOworCisJaWYgKHBpbnN0YW5jZS0+cmVzZXRfY21kICE9IGNtZCkgeworCQlwbWNyYWlkX2VycigicmVzZXQgaXMgY2FsbGVkIHdpdGggZGlmZmVyZW50IGNvbW1hbmQgYmxvY2tcbiIpOworCQlwaW5zdGFuY2UtPnJlc2V0X2NtZCA9IGNtZDsKKwl9CisKKwlwbWNyYWlkX2luZm8oInJlc2V0X2VuZ2luZTogc3RhdGUgPSAlZCwgY29tbWFuZCA9ICVwXG4iLAorCQkgICAgICBwaW5zdGFuY2UtPmlvYV9zdGF0ZSwgY21kKTsKKworCXN3aXRjaCAocGluc3RhbmNlLT5pb2Ffc3RhdGUpIHsKKworCWNhc2UgSU9BX1NUQVRFX0RFQUQ6CisJCS8qIElmIElPQSBpcyBvZmZsaW5lLCB3aGF0ZXZlciBtYXkgYmUgdGhlIHJlc2V0IHJlYXNvbiwganVzdAorCQkgKiByZXR1cm4uIGNhbGxlcnMgbWlnaHQgYmUgd2FpdGluZyBvbiB0aGUgcmVzZXQgd2FpdF9xLCB3YWtlCisJCSAqIHVwIHRoZW0KKwkJICovCisJCXBtY3JhaWRfZXJyKCJJT0EgaXMgb2ZmbGluZSBubyByZXNldCBpcyBwb3NzaWJsZVxuIik7CisJCXJlc2V0X2NvbXBsZXRlID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIElPQV9TVEFURV9JTl9CUklOR0RPV046CisJCS8qIHdlIGVudGVyIGhlcmUsIG9uY2UgaW9hIHNodXRkb3duIGNvbW1hbmQgaXMgcHJvY2Vzc2VkIGJ5IElPQQorCQkgKiBBbGVydCBJT0EgZm9yIGEgcG9zc2libGUgcmVzZXQuIElmIHJlc2V0IGFsZXJ0IGZhaWxzLCBJT0EKKwkJICogZ29lcyB0aHJvdWdoIGhhcmQtcmVzZXQKKwkJICovCisJCXBtY3JhaWRfZGlzYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgfjApOworCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9SRVNFVF9BTEVSVDsKKwkJcG1jcmFpZF9yZXNldF9hbGVydChjbWQpOworCQlicmVhazsKKworCWNhc2UgSU9BX1NUQVRFX1VOS05PV046CisJCS8qIFdlIG1heSBiZSBjYWxsZWQgZHVyaW5nIHByb2JlIG9yIHJlc3VtZS4gU29tZSBwcmUtcHJvY2Vzc2luZworCQkgKiBpcyByZXF1aXJlZCBmb3IgcHJpb3IgdG8gcmVzZXQKKwkJICovCisJCXNjc2lfYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKKworCQkvKiBJZiBhc2tlZCB0byByZXNldCB3aGlsZSBJT0Egd2FzIHByb2Nlc3NpbmcgcmVzcG9uc2VzIG9yCisJCSAqIHRoZXJlIGFyZSBhbnkgZXJyb3IgcmVzcG9uc2VzIHRoZW4gSU9BIG1heSByZXF1aXJlCisJCSAqIGhhcmQtcmVzZXQuCisJCSAqLworCQlpZiAocGluc3RhbmNlLT5pb2FfaGFyZF9yZXNldCA9PSAwKSB7CisJCQlpZiAoaW9yZWFkMzIocGluc3RhbmNlLT5pb2Ffc3RhdHVzKSAmCisJCQkgICAgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCkgeworCQkJCXBtY3JhaWRfaW5mbygic3RpY2t5IGJpdCBzZXQsIGJyaW5nLXVwXG4iKTsKKwkJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9CUklOR1VQOworCQkJCXBtY3JhaWRfcmVpbml0X2NtZGJsayhjbWQpOworCQkJCXBtY3JhaWRfaWRlbnRpZnlfaHJycShjbWQpOworCQkJfSBlbHNlIHsKKwkJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9JTl9TT0ZUX1JFU0VUOworCQkJCXBtY3JhaWRfc29mdF9yZXNldChjbWQpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQWxlcnQgSU9BIG9mIGEgcG9zc2libGUgcmVzZXQgYW5kIHdhaXQgZm9yIGNyaXRpY2FsCisJCQkgKiBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgYml0IHRvIHJlc2V0CisJCQkgKi8KKwkJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX1JFU0VUX0FMRVJUOworCQkJcG1jcmFpZF9yZXNldF9hbGVydChjbWQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJT0FfU1RBVEVfSU5fUkVTRVRfQUxFUlQ6CisJCS8qIElmIGNyaXRpY2FsIG9wZXJhdGlvbiBpbiBwcm9ncmVzcyBiaXQgaXMgcmVzZXQgb3Igd2FpdCBnZXRzCisJCSAqIHRpbWVkIG91dCwgcmVzZXQgcHJvY2VlZHMgd2l0aCBzdGFydGluZyBCSVNUIG9uIHRoZSBJT0EuCisJCSAqIHBtY3JhaWRfaW9hX2hhcmRfcmVzZXQga2VlcHMgYSBjb3VudCBvZiByZXNldCBhdHRlbXB0cy4gSWYKKwkJICogdGhleSBhcmUgMyBvciBtb3JlLCByZXNldCBlbmdpbmUgbWFya3MgSU9BIGRlYWQgYW5kIHJldHVybnMKKwkJICovCisJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX0hBUkRfUkVTRVQ7CisJCXBtY3JhaWRfc3RhcnRfYmlzdChjbWQpOworCQlicmVhazsKKworCWNhc2UgSU9BX1NUQVRFX0lOX0hBUkRfUkVTRVQ6CisJCXBpbnN0YW5jZS0+aW9hX3Jlc2V0X2F0dGVtcHRzKys7CisKKwkJLyogcmV0cnkgcmVzZXQgaWYgd2UgaGF2ZW4ndCByZWFjaGVkIG1heGltdW0gYWxsb3dlZCBsaW1pdCAqLworCQlpZiAocGluc3RhbmNlLT5pb2FfcmVzZXRfYXR0ZW1wdHMgPiBQTUNSQUlEX1JFU0VUX0FUVEVNUFRTKSB7CisJCQlwaW5zdGFuY2UtPmlvYV9yZXNldF9hdHRlbXB0cyA9IDA7CisJCQlwbWNyYWlkX2VycigiSU9BIGRpZG4ndCByZXNwb25kIG1hcmtpbmcgaXQgYXMgZGVhZFxuIik7CisJCQlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9ERUFEOworCQkJcmVzZXRfY29tcGxldGUgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBPbmNlIGVpdGhlciBiaXN0IG9yIHBjaSByZXNldCBpcyBkb25lLCByZXN0b3JlIFBDSSBjb25maWcKKwkJICogc3BhY2UuIElmIHRoaXMgZmFpbHMsIHByb2NlZWQgd2l0aCBoYXJkIHJlc2V0IGFnYWluCisJCSAqLworCisJCWlmIChwY2lfcmVzdG9yZV9zdGF0ZShwaW5zdGFuY2UtPnBkZXYpKSB7CisJCQlwbWNyYWlkX2luZm8oImNvbmZpZy1zcGFjZSBlcnJvciByZXNldHRpbmcgYWdhaW5cbiIpOworCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fUkVTRVRfQUxFUlQ7CisJCQlwbWNyYWlkX3Jlc2V0X2FsZXJ0KGNtZCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGZhaWwgYWxsIHBlbmRpbmcgY29tbWFuZHMgKi8KKwkJcG1jcmFpZF9mYWlsX291dHN0YW5kaW5nX2NtZHMocGluc3RhbmNlKTsKKworCQkvKiBjaGVjayBpZiB1bml0IGNoZWNrIGlzIGFjdGl2ZSwgaWYgc28gZXh0cmFjdCBkdW1wICovCisJCWlmIChwaW5zdGFuY2UtPmlvYV91bml0X2NoZWNrKSB7CisJCQlwbWNyYWlkX2luZm8oInVuaXQgY2hlY2sgaXMgYWN0aXZlXG4iKTsKKwkJCXBpbnN0YW5jZS0+aW9hX3VuaXRfY2hlY2sgPSAwOworCQkJcG1jcmFpZF9nZXRfZHVtcChwaW5zdGFuY2UpOworCQkJcGluc3RhbmNlLT5pb2FfcmVzZXRfYXR0ZW1wdHMtLTsKKwkJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX1JFU0VUX0FMRVJUOworCQkJcG1jcmFpZF9yZXNldF9hbGVydChjbWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBpZiB0aGUgcmVzZXQgcmVhc29uIGlzIHRvIGJyaW5nLWRvd24gdGhlIGlvYSwgd2UgbWlnaHQgYmUKKwkJICogZG9uZSB3aXRoIHRoZSByZXNldCByZXN0b3JlIHBjaV9jb25maWdfc3BhY2UgYW5kIGNvbXBsZXRlCisJCSAqIHRoZSByZXNldAorCQkgKi8KKwkJaWYgKHBpbnN0YW5jZS0+aW9hX2JyaW5nZG93bikgeworCQkJcG1jcmFpZF9pbmZvKCJicmluZ2luZyBkb3duIHRoZSBhZGFwdGVyXG4iKTsKKwkJCXBpbnN0YW5jZS0+aW9hX3NodXRkb3duX3R5cGUgPSBTSFVURE9XTl9OT05FOworCQkJcGluc3RhbmNlLT5pb2FfYnJpbmdkb3duID0gMDsKKwkJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX1VOS05PV047CisJCQlyZXNldF9jb21wbGV0ZSA9IDE7CisJCX0gZWxzZSB7CisJCQkvKiBicmluZy11cCBJT0EsIHNvIHByb2NlZWQgd2l0aCBzb2Z0IHJlc2V0CisJCQkgKiBSZWluaXRpYWxpemUgaHJycV9idWZmZXJzIGFuZCB0aGVpciBpbmRpY2VzIGFsc28KKwkJCSAqIGVuYWJsZSBpbnRlcnJ1cHRzIGFmdGVyIGEgcGNpX3Jlc3RvcmVfc3RhdGUKKwkJCSAqLworCQkJaWYgKHBtY3JhaWRfcmVzZXRfZW5hYmxlX2lvYShwaW5zdGFuY2UpKSB7CisJCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fQlJJTkdVUDsKKwkJCQlwbWNyYWlkX2luZm8oImJyaW5naW5nIHVwIHRoZSBhZGFwdGVyXG4iKTsKKwkJCQlwbWNyYWlkX3JlaW5pdF9jbWRibGsoY21kKTsKKwkJCQlwbWNyYWlkX2lkZW50aWZ5X2hycnEoY21kKTsKKwkJCX0gZWxzZSB7CisJCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fU09GVF9SRVNFVDsKKwkJCQlwbWNyYWlkX3NvZnRfcmVzZXQoY21kKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgSU9BX1NUQVRFX0lOX1NPRlRfUkVTRVQ6CisJCS8qIFRSQU5TSVRJT04gVE8gT1BFUkFUSU9OQUwgaXMgb24gc28gc3RhcnQgaW5pdGlhbGl6YXRpb24KKwkJICogc2VxdWVuY2UKKwkJICovCisJCXBtY3JhaWRfaW5mbygiSW4gc29mdHJlc2V0IHByb2NlZWRpbmcgd2l0aCBicmluZy11cFxuIik7CisJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX0lOX0JSSU5HVVA7CisKKwkJLyogSW5pdGlhbGl6YXRpb24gY29tbWFuZHMgc3RhcnQgd2l0aCBIUlJRIGlkZW50aWZpY2F0aW9uLiBGcm9tCisJCSAqIG5vdyBvbiB0YXNrbGV0IGNvbXBsZXRlcyBtb3N0IG9mIHRoZSBjb21tYW5kcyBhcyBJT0EgaXMgdXAKKwkJICogYW5kIGludHJzIGFyZSBlbmFibGVkCisJCSAqLworCQlwbWNyYWlkX2lkZW50aWZ5X2hycnEoY21kKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQV9TVEFURV9JTl9CUklOR1VQOgorCQkvKiB3ZSBhcmUgZG9uZSB3aXRoIGJyaW5naW5nIHVwIG9mIElPQSwgY2hhbmdlIHRoZSBpb2Ffc3RhdGUgdG8KKwkJICogb3BlcmF0aW9uYWwgYW5kIHdha2UgdXAgYW55IHdhaXRlcnMKKwkJICovCisJCXBpbnN0YW5jZS0+aW9hX3N0YXRlID0gSU9BX1NUQVRFX09QRVJBVElPTkFMOworCQlyZXNldF9jb21wbGV0ZSA9IDE7CisJCWJyZWFrOworCisJY2FzZSBJT0FfU1RBVEVfT1BFUkFUSU9OQUw6CisJZGVmYXVsdDoKKwkJLyogV2hlbiBJT0EgaXMgb3BlcmF0aW9uYWwgYW5kIGEgcmVzZXQgaXMgcmVxdWVzdGVkLCBjaGVjayBmb3IKKwkJICogdGhlIHJlc2V0IHJlYXNvbi4gSWYgcmVzZXQgaXMgdG8gYnJpbmcgZG93biBJT0EsIHVucmVnaXN0ZXIKKwkJICogSENBTXMgYW5kIGluaXRpYXRlIHNodXRkb3duOyBpZiBhZGFwdGVyIHJlc2V0IGlzIGZvcmNlZCB0aGVuCisJCSAqIHJlc3RhcnQgcmVzZXQgc2VxdWVuY2UgYWdhaW4KKwkJICovCisJCWlmIChwaW5zdGFuY2UtPmlvYV9zaHV0ZG93bl90eXBlID09IFNIVVRET1dOX05PTkUgJiYKKwkJICAgIHBpbnN0YW5jZS0+Zm9yY2VfaW9hX3Jlc2V0ID09IDApIHsKKwkJCXJlc2V0X2NvbXBsZXRlID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmIChwaW5zdGFuY2UtPmlvYV9zaHV0ZG93bl90eXBlICE9IFNIVVRET1dOX05PTkUpCisJCQkJcGluc3RhbmNlLT5pb2Ffc3RhdGUgPSBJT0FfU1RBVEVfSU5fQlJJTkdET1dOOworCQkJcG1jcmFpZF9yZWluaXRfY21kYmxrKGNtZCk7CisJCQlwbWNyYWlkX3VucmVnaXN0ZXJfaGNhbXMoY21kKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKiByZXNldCB3aWxsIGJlIGNvbXBsZXRlZCBpZiBpb2Ffc3RhdGUgaXMgZWl0aGVyIERFQUQgb3IgVU5LTk9XTiBvcgorCSAqIE9QRVJBVElPTkFMLiBSZXNldCBhbGwgY29udHJvbCB2YXJpYWJsZXMgdXNlZCBkdXJpbmcgcmVzZXQsIHdha2UgdXAKKwkgKiBhbnkgd2FpdGluZyB0aHJlYWRzIGFuZCBsZXQgdGhlIFNDU0kgbWlkLWxheWVyIHNlbmQgY29tbWFuZHMuIE5vdGUKKwkgKiB0aGF0IGhvc3RfbG9jayBtdXN0IGJlIGhlbGQgYmVmb3JlIGludm9raW5nIHNjc2lfcmVwb3J0X2J1c19yZXNldC4KKwkgKi8KKwlpZiAocmVzZXRfY29tcGxldGUpIHsKKwkJcGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOworCQlwaW5zdGFuY2UtPmlvYV9yZXNldF9hdHRlbXB0cyA9IDA7CisJCXBpbnN0YW5jZS0+cmVzZXRfY21kID0gTlVMTDsKKwkJcGluc3RhbmNlLT5pb2Ffc2h1dGRvd25fdHlwZSA9IFNIVVRET1dOX05PTkU7CisJCXBpbnN0YW5jZS0+aW9hX2JyaW5nZG93biA9IDA7CisJCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworCisJCS8qIElmIHRhcmdldCBzdGF0ZSBpcyB0byBicmluZyB1cCB0aGUgYWRhcHRlciwgcHJvY2VlZCB3aXRoCisJCSAqIGhjYW0gcmVnaXN0cmF0aW9uIGFuZCByZXNvdXJjZSBleHBvc3VyZSB0byBtaWQtbGF5ZXIuCisJCSAqLworCQlpZiAocGluc3RhbmNlLT5pb2Ffc3RhdGUgPT0gSU9BX1NUQVRFX09QRVJBVElPTkFMKQorCQkJcG1jcmFpZF9yZWdpc3Rlcl9oY2FtcyhwaW5zdGFuY2UpOworCisJCXdha2VfdXBfYWxsKCZwaW5zdGFuY2UtPnJlc2V0X3dhaXRfcSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHBtY3JhaWRfaW5pdGlhdGVfcmVzZXQgLSBpbml0aWF0ZXMgcmVzZXQgc2VxdWVuY2UuIFRoaXMgaXMgY2FsbGVkIGZyb20KKyAqIElTUi90YXNrbGV0IGR1cmluZyBlcnJvciBpbnRlcnJ1cHRzIGluY2x1ZGluZyBJT0EgdW5pdCBjaGVjay4gSWYgcmVzZXQKKyAqIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGl0IGp1c3QgcmV0dXJucywgb3RoZXJ3aXNlIGluaXRpYXRlcyBJT0EgcmVzZXQKKyAqIHRvIGJyaW5nIElPQSB1cCB0byBvcGVyYXRpb25hbCBzdGF0ZS4KKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIHZhbHVlCisgKgkgbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2luaXRpYXRlX3Jlc2V0KHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQ7CisKKwkvKiBJZiB0aGUgcmVzZXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcywganVzdCByZXR1cm4sIG90aGVyd2lzZSBzdGFydAorCSAqIHJlc2V0IHNlcXVlbmNlIGFuZCByZXR1cm4KKwkgKi8KKwlpZiAoIXBpbnN0YW5jZS0+aW9hX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCXNjc2lfYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKKwkJY21kID0gcG1jcmFpZF9nZXRfZnJlZV9jbWQocGluc3RhbmNlKTsKKworCQlpZiAoY21kID09IE5VTEwpIHsKKwkJCXBtY3JhaWRfZXJyKCJubyBjbW5kIGJsb2NrcyBmb3IgaW5pdGlhdGVfcmVzZXRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJcGluc3RhbmNlLT5pb2Ffc2h1dGRvd25fdHlwZSA9IFNIVVRET1dOX05PTkU7CisJCXBpbnN0YW5jZS0+cmVzZXRfY21kID0gY21kOworCQlwaW5zdGFuY2UtPmZvcmNlX2lvYV9yZXNldCA9IDE7CisJCXBtY3JhaWRfaW9hX3Jlc2V0KGNtZCk7CisJfQorfQorCisvKioKKyAqIHBtY3JhaWRfcmVzZXRfcmVsb2FkIC0gdXRpbGl0eSByb3V0aW5lIGZvciBkb2luZyBJT0EgcmVzZXQgZWl0aGVyIHRvIGJyaW5ndXAKKyAqCQkJICBvciBicmluZ2Rvd24gSU9BCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAc2h1dGRvd25fdHlwZTogc2h1dGRvd24gdHlwZSB0byBiZSB1c2VkIE5PTkUsIE5PUk1BTCBvciBBQlJSRVYKKyAqIEB0YXJnZXRfc3RhdGU6IGV4cGVjdGVkIHRhcmdldCBzdGF0ZSBhZnRlciByZXNldAorICoKKyAqIE5vdGU6IFRoaXMgY29tbWFuZCBpbml0aWF0ZXMgcmVzZXQgYW5kIHdhaXRzIGZvciBpdHMgY29tcGxldGlvbi4gSGVuY2UgdGhpcworICogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpc3IvdGltZXIvdGFza2xldCBmdW5jdGlvbnMgKHRpbWVvdXQgaGFuZGxlcnMsCisgKiBlcnJvciByZXNwb25zZSBoYW5kbGVycyBhbmQgaW50ZXJydXB0IGhhbmRsZXJzKS4KKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSAxIGluIGNhc2UgaW9hX3N0YXRlIGlzIG5vdCB0YXJnZXRfc3RhdGUsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHBtY3JhaWRfcmVzZXRfcmVsb2FkKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsCisJdTggc2h1dGRvd25fdHlwZSwKKwl1OCB0YXJnZXRfc3RhdGUKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKnJlc2V0X2NtZCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCWludCByZXNldCA9IDE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisKKwlpZiAocGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MpIHsKKwkJcG1jcmFpZF9pbmZvKCJyZXNldF9yZWxvYWQ6IHJlc2V0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiIpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJCXdhaXRfZXZlbnQocGluc3RhbmNlLT5yZXNldF93YWl0X3EsCisJCQkgICAhcGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQlpZiAocGluc3RhbmNlLT5pb2Ffc3RhdGUgPT0gSU9BX1NUQVRFX0RFQUQpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBsb2NrX2ZsYWdzKTsKKwkJCXBtY3JhaWRfaW5mbygicmVzZXRfcmVsb2FkOiBJT0EgaXMgZGVhZFxuIik7CisJCQlyZXR1cm4gcmVzZXQ7CisJCX0gZWxzZSBpZiAocGluc3RhbmNlLT5pb2Ffc3RhdGUgPT0gdGFyZ2V0X3N0YXRlKSB7CisJCQlyZXNldCA9IDA7CisJCX0KKwl9CisKKwlpZiAocmVzZXQpIHsKKwkJcG1jcmFpZF9pbmZvKCJyZXNldF9yZWxvYWQ6IHByb2NlZWRpbmcgd2l0aCByZXNldFxuIik7CisJCXNjc2lfYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKKwkJcmVzZXRfY21kID0gcG1jcmFpZF9nZXRfZnJlZV9jbWQocGluc3RhbmNlKTsKKworCQlpZiAocmVzZXRfY21kID09IE5VTEwpIHsKKwkJCXBtY3JhaWRfZXJyKCJubyBmcmVlIGNtbmQgZm9yIHJlc2V0X3JlbG9hZFxuIik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgICAgICAgbG9ja19mbGFncyk7CisJCQlyZXR1cm4gcmVzZXQ7CisJCX0KKworCQlpZiAoc2h1dGRvd25fdHlwZSA9PSBTSFVURE9XTl9OT1JNQUwpCisJCQlwaW5zdGFuY2UtPmlvYV9icmluZ2Rvd24gPSAxOworCisJCXBpbnN0YW5jZS0+aW9hX3NodXRkb3duX3R5cGUgPSBzaHV0ZG93bl90eXBlOworCQlwaW5zdGFuY2UtPnJlc2V0X2NtZCA9IHJlc2V0X2NtZDsKKwkJcGluc3RhbmNlLT5mb3JjZV9pb2FfcmVzZXQgPSByZXNldDsKKwkJcG1jcmFpZF9pbmZvKCJyZXNldF9yZWxvYWQ6IGluaXRpYXRpbmcgcmVzZXRcbiIpOworCQlwbWNyYWlkX2lvYV9yZXNldChyZXNldF9jbWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwkJcG1jcmFpZF9pbmZvKCJyZXNldF9yZWxvYWQ6IHdhaXRpbmcgZm9yIHJlc2V0IHRvIGNvbXBsZXRlXG4iKTsKKwkJd2FpdF9ldmVudChwaW5zdGFuY2UtPnJlc2V0X3dhaXRfcSwKKwkJCSAgICFwaW5zdGFuY2UtPmlvYV9yZXNldF9pbl9wcm9ncmVzcyk7CisKKwkJcG1jcmFpZF9pbmZvKCJyZXNldF9yZWxvYWQ6IHJlc2V0IGlzIGNvbXBsZXRlICEhIFxuIik7CisJCXNjc2lfdW5ibG9ja19yZXF1ZXN0cyhwaW5zdGFuY2UtPmhvc3QpOworCQlpZiAocGluc3RhbmNlLT5pb2Ffc3RhdGUgPT0gdGFyZ2V0X3N0YXRlKQorCQkJcmVzZXQgPSAwOworCX0KKworCXJldHVybiByZXNldDsKK30KKworLyoqCisgKiBwbWNyYWlkX3Jlc2V0X2JyaW5nZG93biAtIHdyYXBwZXIgb3ZlciBwbWNyYWlkX3Jlc2V0X3JlbG9hZCB0byBicmluZ2Rvd24gSU9BCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIHdoYXRldmVyIGlzIHJldHVybmVkIGZyb20gcG1jcmFpZF9yZXNldF9yZWxvYWQKKyAqLworc3RhdGljIGludCBwbWNyYWlkX3Jlc2V0X2JyaW5nZG93bihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXJldHVybiBwbWNyYWlkX3Jlc2V0X3JlbG9hZChwaW5zdGFuY2UsCisJCQkJICAgIFNIVVRET1dOX05PUk1BTCwKKwkJCQkgICAgSU9BX1NUQVRFX1VOS05PV04pOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVzZXRfYnJpbmd1cCAtIHdyYXBwZXIgb3ZlciBwbWNyYWlkX3Jlc2V0X3JlbG9hZCB0byBicmluZyB1cCBJT0EKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbSBwbWNyYWlkX3Jlc2V0X3JlbG9hZAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfcmVzZXRfYnJpbmd1cChzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCXJldHVybiBwbWNyYWlkX3Jlc2V0X3JlbG9hZChwaW5zdGFuY2UsCisJCQkJICAgIFNIVVRET1dOX05PTkUsCisJCQkJICAgIElPQV9TVEFURV9PUEVSQVRJT05BTCk7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZXF1ZXN0X3NlbnNlIC0gU2VuZCByZXF1ZXN0IHNlbnNlIHRvIGEgZGV2aWNlCisgKiBAY21kOiBwbWNyYWlkIGNvbW1hbmQgc3RydWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHJlcXVlc3Qgc2Vuc2UgdG8gYSBkZXZpY2UgYXMgYSByZXN1bHQgb2YgYSBjaGVjaworICogY29uZGl0aW9uLiBUaGlzIG1ldGhvZCByZS11c2VzIHRoZSBzYW1lIGNvbW1hbmQgYmxvY2sgdGhhdCBmYWlsZWQgZWFybGllci4KKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZXF1ZXN0X3NlbnNlKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYyAqaW9hZGwgPSBpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGw7CisKKwkvKiBhbGxvY2F0ZSBETUFhYmxlIG1lbW9yeSBmb3Igc2Vuc2UgYnVmZmVycyAqLworCWNtZC0+c2Vuc2VfYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY21kLT5kcnZfaW5zdC0+cGRldiwKKwkJCQkJCSBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUsCisJCQkJCQkgJmNtZC0+c2Vuc2VfYnVmZmVyX2RtYSk7CisKKwlpZiAoY21kLT5zZW5zZV9idWZmZXIgPT0gTlVMTCkgeworCQlwbWNyYWlkX2VycgorCQkJKCJjb3VsZG4ndCBhbGxvY2F0ZSBzZW5zZSBidWZmZXIgZm9yIHJlcXVlc3Qgc2Vuc2VcbiIpOworCQlwbWNyYWlkX2VycF9kb25lKGNtZCk7CisJCXJldHVybjsKKwl9CisKKwkvKiByZS11c2UgdGhlIGNvbW1hbmQgYmxvY2sgKi8KKwltZW1zZXQoJmNtZC0+aW9hX2NiLT5pb2FzYSwgMCwgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lvYXNhKSk7CisJbWVtc2V0KGlvYXJjYi0+Y2RiLCAwLCBQTUNSQUlEX01BWF9DREJfTEVOKTsKKwlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwID0gKFNZTkNfQ09NUExFVEUgfAorCQkJCSAgTk9fTElOS19ERVNDUyB8CisJCQkJICBJTkhJQklUX1VMX0NIRUNLKTsKKwlpb2FyY2ItPnJlcXVlc3RfdHlwZSA9IFJFUV9UWVBFX1NDU0k7CisJaW9hcmNiLT5jZGJbMF0gPSBSRVFVRVNUX1NFTlNFOworCWlvYXJjYi0+Y2RiWzRdID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCisJaW9hcmNiLT5pb2FkbF9idXNfYWRkciA9IGNwdV90b19sZTY0KChjbWQtPmlvYV9jYl9idXNfYWRkcikgKworCQkJCQlvZmZzZXRvZihzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IsCisJCQkJCQlhZGRfZGF0YS51LmlvYWRsWzBdKSk7CisJaW9hcmNiLT5pb2FkbF9sZW5ndGggPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYykpOworCisJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisKKwlpb2FkbC0+YWRkcmVzcyA9IGNwdV90b19sZTY0KGNtZC0+c2Vuc2VfYnVmZmVyX2RtYSk7CisJaW9hZGwtPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwlpb2FkbC0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCisJLyogcmVxdWVzdCBzZW5zZSBtaWdodCBiZSBjYWxsZWQgYXMgcGFydCBvZiBlcnJvciByZXNwb25zZSBwcm9jZXNzaW5nCisJICogd2hpY2ggcnVucyBpbiB0YXNrbGV0cyBjb250ZXh0LiBJdCBpcyBwb3NzaWJsZSB0aGF0IG1pZC1sYXllciBtaWdodAorCSAqIHNjaGVkdWxlIHF1ZXVlY29tbWFuZCBkdXJpbmcgdGhpcyB0aW1lLCBoZW5jZSwgd3JpdHRpbmcgdG8gSU9BUlJJTgorCSAqIG11c3QgYmUgcHJvdGVjdCBieSBob3N0X2xvY2sKKwkgKi8KKwlwbWNyYWlkX3NlbmRfY21kKGNtZCwgcG1jcmFpZF9lcnBfZG9uZSwKKwkJCSBQTUNSQUlEX1JFUVVFU1RfU0VOU0VfVElNRU9VVCwKKwkJCSBwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcik7Cit9CisKKy8qKgorICogcG1jcmFpZF9jYW5jZWxfYWxsIC0gY2FuY2VsIGFsbCBvdXRzdGFuZGluZyBJT0FSQ0JzIGFzIHBhcnQgb2YgZXJyb3IgcmVjb3ZlcnkKKyAqIEBjbWQ6IGNvbW1hbmQgdGhhdCBmYWlsZWQKKyAqIEBzZW5zZTogdHJ1ZSBpZiByZXF1ZXN0X3NlbnNlIGlzIHJlcXVpcmVkIGFmdGVyIGNhbmNlbCBhbGwKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgY2FuY2VsIGFsbCB0byBhIGRldmljZSB0byBjbGVhciB0aGUgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfY2FuY2VsX2FsbChzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCwgdTMyIHNlbnNlKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kID0gY21kLT5zY3NpX2NtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYiA9ICZjbWQtPmlvYV9jYi0+aW9hcmNiOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwl2b2lkICgqY21kX2RvbmUpIChzdHJ1Y3QgcG1jcmFpZF9jbWQgKikgPSBzZW5zZSA/IHBtY3JhaWRfZXJwX2RvbmUKKwkJCQkJCQk6IHBtY3JhaWRfcmVxdWVzdF9zZW5zZTsKKworCW1lbXNldChpb2FyY2ItPmNkYiwgMCwgUE1DUkFJRF9NQVhfQ0RCX0xFTik7CisJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCA9IFNZTkNfT1ZFUlJJREU7CisJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9JT0FDTUQ7CisJaW9hcmNiLT5jZGJbMF0gPSBQTUNSQUlEX0NBTkNFTF9BTExfUkVRVUVTVFM7CisKKwlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSkKKwkJaW9hcmNiLT5jZGJbMV0gPSBQTUNSQUlEX1NZTkNfQ09NUExFVEVfQUZURVJfQ0FOQ0VMOworCisJaW9hcmNiLT5pb2FkbF9idXNfYWRkciA9IDA7CisJaW9hcmNiLT5pb2FkbF9sZW5ndGggPSAwOworCWlvYXJjYi0+ZGF0YV90cmFuc2Zlcl9sZW5ndGggPSAwOworCWlvYXJjYi0+aW9hcmNiX2J1c19hZGRyICY9ICh+MHgxRlVMTCk7CisKKwkvKiB3cml0aW5nIHRvIElPQVJSSU4gbXVzdCBiZSBwcm90ZWN0ZWQgYnkgaG9zdF9sb2NrLCBhcyBtaWQtbGF5ZXIKKwkgKiBzY2hlZHVsZSBxdWV1ZWNvbW1hbmQgd2hpbGUgd2UgYXJlIGRvaW5nIHRoaXMKKwkgKi8KKwlwbWNyYWlkX3NlbmRfY21kKGNtZCwgY21kX2RvbmUsCisJCQkgUE1DUkFJRF9SRVFVRVNUX1NFTlNFX1RJTUVPVVQsCisJCQkgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIpOworfQorCisvKioKKyAqIHBtY3JhaWRfZnJhbWVfYXV0b19zZW5zZTogZnJhbWUgZml4ZWQgZm9ybWF0IHNlbnNlIGluZm9ybWF0aW9uCisgKgorICogQGNtZDogcG9pbnRlciB0byBmYWlsaW5nIGNvbW1hbmQgYmxvY2sKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfZnJhbWVfYXV0b19zZW5zZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwl1OCAqc2Vuc2VfYnVmID0gY21kLT5zY3NpX2NtZC0+c2Vuc2VfYnVmZmVyOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXMgPSBjbWQtPnNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCXN0cnVjdCBwbWNyYWlkX2lvYXNhICppb2FzYSA9ICZjbWQtPmlvYV9jYi0+aW9hc2E7CisJdTMyIGlvYXNjID0gbGUzMl90b19jcHUoaW9hc2EtPmlvYXNjKTsKKwl1MzIgZmFpbGluZ19sYmEgPSAwOworCisJbWVtc2V0KHNlbnNlX2J1ZiwgMCwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKKwljbWQtPnNjc2lfY21kLT5yZXN1bHQgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CisKKwlpZiAoUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpICYmCisJICAgIGlvYXNjID09IFBNQ1JBSURfSU9BU0NfTUVfUkVBRF9FUlJPUl9OT19SRUFMTE9DICYmCisJICAgIGlvYXNhLT51LnZzZXQuZmFpbGluZ19sYmFfaGkgIT0gMCkgeworCisJCXNlbnNlX2J1ZlswXSA9IDB4NzI7CisJCXNlbnNlX2J1ZlsxXSA9IFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKTsKKwkJc2Vuc2VfYnVmWzJdID0gUE1DUkFJRF9JT0FTQ19TRU5TRV9DT0RFKGlvYXNjKTsKKwkJc2Vuc2VfYnVmWzNdID0gUE1DUkFJRF9JT0FTQ19TRU5TRV9RVUFMKGlvYXNjKTsKKworCQlzZW5zZV9idWZbN10gPSAxMjsKKwkJc2Vuc2VfYnVmWzhdID0gMDsKKwkJc2Vuc2VfYnVmWzldID0gMHgwQTsKKwkJc2Vuc2VfYnVmWzEwXSA9IDB4ODA7CisKKwkJZmFpbGluZ19sYmEgPSBsZTMyX3RvX2NwdShpb2FzYS0+dS52c2V0LmZhaWxpbmdfbGJhX2hpKTsKKworCQlzZW5zZV9idWZbMTJdID0gKGZhaWxpbmdfbGJhICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisJCXNlbnNlX2J1ZlsxM10gPSAoZmFpbGluZ19sYmEgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJc2Vuc2VfYnVmWzE0XSA9IChmYWlsaW5nX2xiYSAmIDB4MDAwMGZmMDApID4+IDg7CisJCXNlbnNlX2J1ZlsxNV0gPSBmYWlsaW5nX2xiYSAmIDB4MDAwMDAwZmY7CisKKwkJZmFpbGluZ19sYmEgPSBsZTMyX3RvX2NwdShpb2FzYS0+dS52c2V0LmZhaWxpbmdfbGJhX2xvKTsKKworCQlzZW5zZV9idWZbMTZdID0gKGZhaWxpbmdfbGJhICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisJCXNlbnNlX2J1ZlsxN10gPSAoZmFpbGluZ19sYmEgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJc2Vuc2VfYnVmWzE4XSA9IChmYWlsaW5nX2xiYSAmIDB4MDAwMGZmMDApID4+IDg7CisJCXNlbnNlX2J1ZlsxOV0gPSBmYWlsaW5nX2xiYSAmIDB4MDAwMDAwZmY7CisJfSBlbHNlIHsKKwkJc2Vuc2VfYnVmWzBdID0gMHg3MDsKKwkJc2Vuc2VfYnVmWzJdID0gUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpOworCQlzZW5zZV9idWZbMTJdID0gUE1DUkFJRF9JT0FTQ19TRU5TRV9DT0RFKGlvYXNjKTsKKwkJc2Vuc2VfYnVmWzEzXSA9IFBNQ1JBSURfSU9BU0NfU0VOU0VfUVVBTChpb2FzYyk7CisKKwkJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfTUVfUkVBRF9FUlJPUl9OT19SRUFMTE9DKSB7CisJCQlpZiAoUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpKQorCQkJCWZhaWxpbmdfbGJhID0KKwkJCQkJbGUzMl90b19jcHUoaW9hc2EtPnUuCisJCQkJCQkgdnNldC5mYWlsaW5nX2xiYV9sbyk7CisJCQlzZW5zZV9idWZbMF0gfD0gMHg4MDsKKwkJCXNlbnNlX2J1ZlszXSA9IChmYWlsaW5nX2xiYSA+PiAyNCkgJiAweGZmOworCQkJc2Vuc2VfYnVmWzRdID0gKGZhaWxpbmdfbGJhID4+IDE2KSAmIDB4ZmY7CisJCQlzZW5zZV9idWZbNV0gPSAoZmFpbGluZ19sYmEgPj4gOCkgJiAweGZmOworCQkJc2Vuc2VfYnVmWzZdID0gZmFpbGluZ19sYmEgJiAweGZmOworCQl9CisKKwkJc2Vuc2VfYnVmWzddID0gNjsgLyogYWRkaXRpb25hbCBsZW5ndGggKi8KKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9lcnJvcl9oYW5kbGVyIC0gRXJyb3IgcmVzcG9uc2UgaGFuZGxlcnMgZm9yIGEgU0NTSSBvcAorICogQGNtZDogcG9pbnRlciB0byBwbWNyYWlkX2NtZCB0aGF0IGhhcyBmYWlsZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gaW5pdGlhdGUgRVJQIG9uIHRoZSBhZmZlY3RlZAorICogZGV2aWNlLiBUaGlzIGlzIGNhbGxlZCBmcm9tIGEgdGFza2xldCwgd2hpY2ggZG9lc24ndCBob2xkIGFueSBsb2Nrcy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkgMCBpdCBjYWxsZXIgY2FuIGNvbXBsZXRlIHRoZSByZXF1ZXN0LCBvdGhlcndpc2UgMSB3aGVyZSBpbiBlcnJvcgorICoJIGhhbmRsZXIgaXRzZWxmIGNvbXBsZXRlcyB0aGUgcmVxdWVzdCBhbmQgcmV0dXJucyB0aGUgY29tbWFuZCBibG9jaworICoJIGJhY2sgdG8gZnJlZS1wb29sCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kID0gY21kLT5zY3NpX2NtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzID0gc2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJc3RydWN0IHBtY3JhaWRfaW9hc2EgKmlvYXNhID0gJmNtZC0+aW9hX2NiLT5pb2FzYTsKKwl1MzIgaW9hc2MgPSBsZTMyX3RvX2NwdShpb2FzYS0+aW9hc2MpOworCXUzMiBtYXNrZWRfaW9hc2MgPSBpb2FzYyAmIFBNQ1JBSURfSU9BU0NfU0VOU0VfTUFTSzsKKwl1MzIgc2Vuc2VfY29waWVkID0gMDsKKworCWlmICghcmVzKSB7CisJCXBtY3JhaWRfaW5mbygicmVzb3VyY2UgcG9pbnRlciBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSWYgdGhpcyB3YXMgYSBTQ1NJIHJlYWQvd3JpdGUgY29tbWFuZCBrZWVwIGNvdW50IG9mIGVycm9ycyAqLworCWlmIChTQ1NJX0NNRF9UWVBFKHNjc2lfY21kLT5jbW5kWzBdKSA9PSBTQ1NJX1JFQURfQ01EKQorCQlhdG9taWNfaW5jKCZyZXMtPnJlYWRfZmFpbHVyZXMpOworCWVsc2UgaWYgKFNDU0lfQ01EX1RZUEUoc2NzaV9jbWQtPmNtbmRbMF0pID09IFNDU0lfV1JJVEVfQ01EKQorCQlhdG9taWNfaW5jKCZyZXMtPndyaXRlX2ZhaWx1cmVzKTsKKworCWlmICghUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSAmJgorCQltYXNrZWRfaW9hc2MgIT0gUE1DUkFJRF9JT0FTQ19IV19ERVZJQ0VfQlVTX1NUQVRVU19FUlJPUikgeworCQlwbWNyYWlkX2ZyYW1lX2F1dG9fc2Vuc2UoY21kKTsKKwl9CisKKwkvKiBMb2cgSU9BU0MvSU9BU0EgaW5mb3JtYXRpb24gYmFzZWQgb24gdXNlciBzZXR0aW5ncyAqLworCXBtY3JhaWRfaW9hc2NfbG9nZ2VyKGlvYXNjLCBjbWQpOworCisJc3dpdGNoIChtYXNrZWRfaW9hc2MpIHsKKworCWNhc2UgUE1DUkFJRF9JT0FTQ19BQ19URVJNSU5BVEVEX0JZX0hPU1Q6CisJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9BQk9SVCA8PCAxNik7CisJCWJyZWFrOworCisJY2FzZSBQTUNSQUlEX0lPQVNDX0lSX0lOVkFMSURfUkVTT1VSQ0VfSEFORExFOgorCWNhc2UgUE1DUkFJRF9JT0FTQ19IV19DQU5OT1RfQ09NTVVOSUNBVEU6CisJCXNjc2lfY21kLT5yZXN1bHQgfD0gKERJRF9OT19DT05ORUNUIDw8IDE2KTsKKwkJYnJlYWs7CisKKwljYXNlIFBNQ1JBSURfSU9BU0NfTlJfU1lOQ19SRVFVSVJFRDoKKwkJcmVzLT5zeW5jX3JlcWQgPSAxOworCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfSU1NX1JFVFJZIDw8IDE2KTsKKwkJYnJlYWs7CisKKwljYXNlIFBNQ1JBSURfSU9BU0NfTUVfUkVBRF9FUlJPUl9OT19SRUFMTE9DOgorCQlzY3NpX2NtZC0+cmVzdWx0IHw9IChESURfUEFTU1RIUk9VR0ggPDwgMTYpOworCQlicmVhazsKKworCWNhc2UgUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUOgorCWNhc2UgUE1DUkFJRF9JT0FTQ19VQV9CVVNfV0FTX1JFU0VUX0JZX09USEVSOgorCQlpZiAoIXJlcy0+cmVzZXRfcHJvZ3Jlc3MpCisJCQlzY3NpX3JlcG9ydF9idXNfcmVzZXQocGluc3RhbmNlLT5ob3N0LAorCQkJCQkgICAgICBzY3NpX2NtZC0+ZGV2aWNlLT5jaGFubmVsKTsKKwkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJYnJlYWs7CisKKwljYXNlIFBNQ1JBSURfSU9BU0NfSFdfREVWSUNFX0JVU19TVEFUVVNfRVJST1I6CisJCXNjc2lfY21kLT5yZXN1bHQgfD0gUE1DUkFJRF9JT0FTQ19TRU5TRV9TVEFUVVMoaW9hc2MpOworCQlyZXMtPnN5bmNfcmVxZCA9IDE7CisKKwkJLyogaWYgY2hlY2tfY29uZGl0aW9uIGlzIG5vdCBhY3RpdmUgcmV0dXJuIHdpdGggZXJyb3Igb3RoZXJ3aXNlCisJCSAqIGdldC9mcmFtZSB0aGUgc2Vuc2UgYnVmZmVyCisJCSAqLworCQlpZiAoUE1DUkFJRF9JT0FTQ19TRU5TRV9TVEFUVVMoaW9hc2MpICE9CisJCSAgICBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04gJiYKKwkJICAgIFBNQ1JBSURfSU9BU0NfU0VOU0VfU1RBVFVTKGlvYXNjKSAhPSBTQU1fU1RBVF9BQ0FfQUNUSVZFKQorCQkJcmV0dXJuIDA7CisKKwkJLyogSWYgd2UgaGF2ZSBhdXRvIHNlbnNlIGRhdGEgYXMgcGFydCBvZiBJT0FTQSBwYXNzIGl0IHRvCisJCSAqIG1pZC1sYXllcgorCQkgKi8KKwkJaWYgKGlvYXNhLT5hdXRvX3NlbnNlX2xlbmd0aCAhPSAwKSB7CisJCQlzaG9ydCBzZW5zZV9sZW4gPSBpb2FzYS0+YXV0b19zZW5zZV9sZW5ndGg7CisJCQlpbnQgZGF0YV9zaXplID0gbWluX3QodTE2LCBsZTE2X3RvX2NwdShzZW5zZV9sZW4pLAorCQkJCQkgICAgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOworCisJCQltZW1jcHkoc2NzaV9jbWQtPnNlbnNlX2J1ZmZlciwKKwkJCSAgICAgICBpb2FzYS0+c2Vuc2VfZGF0YSwKKwkJCSAgICAgICBkYXRhX3NpemUpOworCQkJc2Vuc2VfY29waWVkID0gMTsKKwkJfQorCisJCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpKSB7CisJCQlwbWNyYWlkX2NhbmNlbF9hbGwoY21kLCBzZW5zZV9jb3BpZWQpOworCQl9IGVsc2UgaWYgKHNlbnNlX2NvcGllZCkgeworCQkJcG1jcmFpZF9lcnBfZG9uZShjbWQpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSAgeworCQkJcG1jcmFpZF9yZXF1ZXN0X3NlbnNlKGNtZCk7CisJCX0KKworCQlyZXR1cm4gMTsKKworCWNhc2UgUE1DUkFJRF9JT0FTQ19OUl9JTklUX0NNRF9SRVFVSVJFRDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpID4gUkVDT1ZFUkVEX0VSUk9SKQorCQkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVzZXRfZGV2aWNlIC0gZGV2aWNlIHJlc2V0IGhhbmRsZXIgZnVuY3Rpb25zCisgKgorICogQHNjc2lfY21kOiBzY3NpIGNvbW1hbmQgc3RydWN0CisgKiBAbW9kaWZpZXI6IHJlc2V0IG1vZGlmaWVyIGluZGljYXRpbmcgdGhlIHJlc2V0IHNlcXVlbmNlIHRvIGJlIHBlcmZvcm1lZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXNzdWVzIGEgZGV2aWNlIHJlc2V0IHRvIHRoZSBhZmZlY3RlZCBkZXZpY2UuCisgKiBBIExVTiByZXNldCB3aWxsIGJlIHNlbnQgdG8gdGhlIGRldmljZSBmaXJzdC4gSWYgdGhhdCBkb2VzCisgKiBub3Qgd29yaywgYSB0YXJnZXQgcmVzZXQgd2lsbCBiZSBzZW50LgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCVNVQ0NFU1MgLyBGQUlMRUQKKyAqLworc3RhdGljIGludCBwbWNyYWlkX3Jlc2V0X2RldmljZSgKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZCwKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsCisJdTggbW9kaWZpZXIKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXM7CisJc3RydWN0IHBtY3JhaWRfaW9hcmNiICppb2FyY2I7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOworCXUzMiBpb2FzYzsKKworCXBpbnN0YW5jZSA9CisJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCXJlcyA9IHNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCisJaWYgKCFyZXMpIHsKKwkJcG1jcmFpZF9lcnIoInJlc2V0X2RldmljZTogTlVMTCByZXNvdXJjZSBwb2ludGVyXG4iKTsKKwkJcmV0dXJuIEZBSUxFRDsKKwl9CisKKwkvKiBJZiBhZGFwdGVyIGlzIGN1cnJlbnRseSBnb2luZyB0aHJvdWdoIHJlc2V0L3JlbG9hZCwgcmV0dXJuIGZhaWxlZC4KKwkgKiBUaGlzIHdpbGwgZm9yY2UgdGhlIG1pZC1sYXllciB0byBjYWxsIF9laF9idXMvaG9zdCByZXNldCwgd2hpY2gKKwkgKiB3aWxsIHRoZW4gZ28gdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHRoZSByZXNldCB0byBjb21wbGV0ZQorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlpZiAocGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MgfHwKKwkgICAgcGluc3RhbmNlLT5pb2Ffc3RhdGUgPT0gSU9BX1NUQVRFX0RFQUQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCXJldHVybiBGQUlMRUQ7CisJfQorCisJcmVzLT5yZXNldF9wcm9ncmVzcyA9IDE7CisJcG1jcmFpZF9pbmZvKCJSZXNldHRpbmcgJXMgcmVzb3VyY2Ugd2l0aCBhZGRyICV4XG4iLAorCQkgICAgICgobW9kaWZpZXIgJiBSRVNFVF9ERVZJQ0VfTFVOKSA/ICJMVU4iIDoKKwkJICAgICAoKG1vZGlmaWVyICYgUkVTRVRfREVWSUNFX1RBUkdFVCkgPyAiVEFSR0VUIiA6ICJCVVMiKSksCisJCSAgICAgbGUzMl90b19jcHUocmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcykpOworCisJLyogZ2V0IGEgZnJlZSBjbWQgYmxvY2sgKi8KKwljbWQgPSBwbWNyYWlkX2dldF9mcmVlX2NtZChwaW5zdGFuY2UpOworCisJaWYgKGNtZCA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCQlwbWNyYWlkX2VycigiJXM6IG5vIGNtZCBibG9ja3MgYXJlIGF2YWlsYWJsZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gRkFJTEVEOworCX0KKworCWlvYXJjYiA9ICZjbWQtPmlvYV9jYi0+aW9hcmNiOworCWlvYXJjYi0+cmVzb3VyY2VfaGFuZGxlID0gcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfaGFuZGxlOworCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gUkVRX1RZUEVfSU9BQ01EOworCWlvYXJjYi0+Y2RiWzBdID0gUE1DUkFJRF9SRVNFVF9ERVZJQ0U7CisKKwkvKiBJbml0aWFsaXplIHJlc2V0IG1vZGlmaWVyIGJpdHMgKi8KKwlpZiAobW9kaWZpZXIpCisJCW1vZGlmaWVyID0gRU5BQkxFX1JFU0VUX01PRElGSUVSIHwgbW9kaWZpZXI7CisKKwlpb2FyY2ItPmNkYlsxXSA9IG1vZGlmaWVyOworCisJaW5pdF9jb21wbGV0aW9uKCZjbWQtPndhaXRfZm9yX2NvbXBsZXRpb24pOworCWNtZC0+Y29tcGxldGlvbl9yZXEgPSAxOworCisJcG1jcmFpZF9pbmZvKCJjbWQoQ0RCWzBdID0gJXgpIGZvciAleCB3aXRoIGluZGV4ID0gJWRcbiIsCisJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCisJCSAgICAgbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNvdXJjZV9oYW5kbGUpLAorCQkgICAgIGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FyY2IucmVzcG9uc2VfaGFuZGxlKSA+PiAyKTsKKworCXBtY3JhaWRfc2VuZF9jbWQoY21kLAorCQkJIHBtY3JhaWRfaW50ZXJuYWxfZG9uZSwKKwkJCSB0aW1lb3V0LAorCQkJIHBtY3JhaWRfdGltZW91dF9oYW5kbGVyKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJLyogUkVTRVRfREVWSUNFIGNvbW1hbmQgY29tcGxldGVzIGFmdGVyIGFsbCBwZW5kaW5nIElPQVJDQnMgYXJlCisJICogY29tcGxldGVkLiBPbmNlIHRoaXMgY29tbWFuZCBpcyBjb21wbGV0ZWQsIHBtY3JhaW5kX2ludGVybmFsX2RvbmUKKwkgKiB3aWxsIHdha2UgdXAgdGhlICdjb21wbGV0aW9uJyBxdWV1ZS4KKwkgKi8KKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjbWQtPndhaXRfZm9yX2NvbXBsZXRpb24pOworCisJLyogY29tcGxldGUgdGhlIGNvbW1hbmQgaGVyZSBpdHNlbGYgYW5kIHJldHVybiB0aGUgY29tbWFuZCBibG9jaworCSAqIHRvIGZyZWUgbGlzdAorCSAqLworCXBtY3JhaWRfcmV0dXJuX2NtZChjbWQpOworCXJlcy0+cmVzZXRfcHJvZ3Jlc3MgPSAwOworCWlvYXNjID0gbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKTsKKworCS8qIHNldCB0aGUgcmV0dXJuIHZhbHVlIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBpb2FzYyAqLworCXJldHVybiBQTUNSQUlEX0lPQVNDX1NFTlNFX0tFWShpb2FzYykgPyBGQUlMRUQgOiBTVUNDRVNTOworfQorCisvKioKKyAqIF9wbWNyYWlkX2lvX2RvbmUgLSBoZWxwZXIgZm9yIHBtY3JhaWRfaW9fZG9uZSBmdW5jdGlvbgorICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gcG1jcmFpZCBjb21tYW5kIHN0cnVjdAorICogQHJlc2xlbjogcmVzaWR1YWwgZGF0YSBsZW5ndGggdG8gYmUgc2V0IGluIHRoZSBpb2FzYQorICogQGlvYXNjOiBpb2FzYyBlaXRoZXIgcmV0dXJuZWQgYnkgSU9BIG9yIHNldCBieSBkcml2ZXIgaXRzZWxmLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBwbWNyYWlkX2lvX2RvbmUgdG8gY29tcGxldGUgbWlkLWxheWVyCisgKiBzY3NpIG9wcy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKgkgIDAgaWYgY2FsbGVyIGlzIHJlcXVpcmVkIHRvIHJldHVybiBpdCB0byBmcmVlX3Bvb2wuIFJldHVybnMgMSBpZgorICoJICBjYWxsZXIgbmVlZCBub3Qgd29ycnkgYWJvdXQgZnJlZWluZyBjb21tYW5kIGJsb2NrIGFzIGVycm9yIGhhbmRsZXIKKyAqCSAgd2lsbCB0YWtlIGNhcmUgb2YgdGhhdC4KKyAqLworCitzdGF0aWMgaW50IF9wbWNyYWlkX2lvX2RvbmUoc3RydWN0IHBtY3JhaWRfY21kICpjbWQsIGludCByZXNsZW4sIGludCBpb2FzYykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpX2NtZCA9IGNtZC0+c2NzaV9jbWQ7CisJaW50IHJjID0gMDsKKworCXNjc2lfc2V0X3Jlc2lkKHNjc2lfY21kLCByZXNsZW4pOworCisJcG1jcmFpZF9pbmZvKCJyZXNwb25zZSglZCkgQ0RCWzBdID0gJXggaW9hc2M6cmVzdWx0OiAleDoleFxuIiwKKwkJbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNwb25zZV9oYW5kbGUpID4+IDIsCisJCWNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLAorCQlpb2FzYywgc2NzaV9jbWQtPnJlc3VsdCk7CisKKwlpZiAoUE1DUkFJRF9JT0FTQ19TRU5TRV9LRVkoaW9hc2MpICE9IDApCisJCXJjID0gcG1jcmFpZF9lcnJvcl9oYW5kbGVyKGNtZCk7CisKKwlpZiAocmMgPT0gMCkgeworCQlzY3NpX2RtYV91bm1hcChzY3NpX2NtZCk7CisJCXNjc2lfY21kLT5zY3NpX2RvbmUoc2NzaV9jbWQpOworCX0KKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBwbWNyYWlkX2lvX2RvbmUgLSBTQ1NJIGNvbXBsZXRpb24gZnVuY3Rpb24KKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIHBtY3JhaWQgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgdGFza2xldC9taWQtbGF5ZXIgZXJyb3IgaGFuZGxlciB0byBjb21wbGV0aW5nCisgKiB0aGUgU0NTSSBvcHMgc2VudCBmcm9tIG1pZC1sYXllci4KKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCSAgbm9uZQorICovCisKK3N0YXRpYyB2b2lkIHBtY3JhaWRfaW9fZG9uZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwl1MzIgaW9hc2MgPSBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EuaW9hc2MpOworCXUzMiByZXNsZW4gPSBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hc2EucmVzaWR1YWxfZGF0YV9sZW5ndGgpOworCisJaWYgKF9wbWNyYWlkX2lvX2RvbmUoY21kLCByZXNsZW4sIGlvYXNjKSA9PSAwKQorCQlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2Fib3J0X2NtZCAtIEFib3J0cyBhIHNpbmdsZSBJT0FSQ0IgYWxyZWFkeSBzdWJtaXR0ZWQgdG8gSU9BCisgKgorICogQGNtZDogY29tbWFuZCBibG9jayBvZiB0aGUgY29tbWFuZCB0byBiZSBhYm9ydGVkCisgKgorICogUmV0dXJuIFZhbHVlOgorICoJIHJldHVybnMgcG9pbnRlciB0byBjb21tYW5kIHN0cnVjdHVyZSB1c2VkIGFzIGNhbmNlbGxpbmcgY21kCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG1jcmFpZF9jbWQgKnBtY3JhaWRfYWJvcnRfY21kKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY2FuY2VsX2NtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXM7CisKKwlwaW5zdGFuY2UgPSAoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKiljbWQtPmRydl9pbnN0OworCXJlcyA9IGNtZC0+c2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CisKKwljYW5jZWxfY21kID0gcG1jcmFpZF9nZXRfZnJlZV9jbWQocGluc3RhbmNlKTsKKworCWlmIChjYW5jZWxfY21kID09IE5VTEwpIHsKKwkJcG1jcmFpZF9lcnIoIiVzOiBubyBjbWQgYmxvY2tzIGFyZSBhdmFpbGFibGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcG1jcmFpZF9wcmVwYXJlX2NhbmNlbF9jbWQoY2FuY2VsX2NtZCwgY21kKTsKKworCXBtY3JhaWRfaW5mbygiYWJvcnRpbmcgY29tbWFuZCBDREJbMF09ICV4IHdpdGggaW5kZXggPSAlZFxuIiwKKwkJY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCisJCWNtZC0+aW9hX2NiLT5pb2FyY2IucmVzcG9uc2VfaGFuZGxlID4+IDIpOworCisJaW5pdF9jb21wbGV0aW9uKCZjYW5jZWxfY21kLT53YWl0X2Zvcl9jb21wbGV0aW9uKTsKKwljYW5jZWxfY21kLT5jb21wbGV0aW9uX3JlcSA9IDE7CisKKwlwbWNyYWlkX2luZm8oImNvbW1hbmQgKCVkKSBDREJbMF0gPSAleCBmb3IgJXhcbiIsCisJCWxlMzJfdG9fY3B1KGNhbmNlbF9jbWQtPmlvYV9jYi0+aW9hcmNiLnJlc3BvbnNlX2hhbmRsZSkgPj4gMiwKKwkJY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sCisJCWxlMzJfdG9fY3B1KGNhbmNlbF9jbWQtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZSkpOworCisJcG1jcmFpZF9zZW5kX2NtZChjYW5jZWxfY21kLAorCQkJIHBtY3JhaWRfaW50ZXJuYWxfZG9uZSwKKwkJCSBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQsCisJCQkgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIpOworCXJldHVybiBjYW5jZWxfY21kOworfQorCisvKioKKyAqIHBtY3JhaWRfYWJvcnRfY29tcGxldGUgLSBXYWl0cyBmb3IgQUJPUlQgVEFTSyBjb21wbGV0aW9uCisgKgorICogQGNhbmNlbF9jbWQ6IGNvbW1hbmQgYmxvY2sgdXNlIGFzIGNhbmNlbGxpbmcgY29tbWFuZAorICoKKyAqIFJldHVybiBWYWx1ZToKKyAqCSByZXR1cm5zIFNVQ0NFU1MgaWYgQUJPUlQgVEFTSyBoYXMgZ29vZCBjb21wbGV0aW9uCisgKgkgb3RoZXJ3aXNlIEZBSUxFRAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfYWJvcnRfY29tcGxldGUoc3RydWN0IHBtY3JhaWRfY21kICpjYW5jZWxfY21kKQoreworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICpyZXM7CisJdTMyIGlvYXNjOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmY2FuY2VsX2NtZC0+d2FpdF9mb3JfY29tcGxldGlvbik7CisJcmVzID0gY2FuY2VsX2NtZC0+dS5yZXM7CisJY2FuY2VsX2NtZC0+dS5yZXMgPSBOVUxMOworCWlvYXNjID0gbGUzMl90b19jcHUoY2FuY2VsX2NtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYyk7CisKKwkvKiBJZiB0aGUgYWJvcnQgdGFzayBpcyBub3QgdGltZWQgb3V0IHdlIHdpbGwgZ2V0IGEgR29vZCBjb21wbGV0aW9uCisJICogYXMgc2Vuc2Vfa2V5LCBvdGhlcndpc2Ugd2UgbWF5IGdldCBvbmUgdGhlIGZvbGxvd2luZyByZXNwb25zZXMKKwkgKiBkdWUgdG8gc3Vic3F1ZW50IGJ1cyByZXNldCBvciBkZXZpY2UgcmVzZXQuIEluIGNhc2UgSU9BU0MgaXMKKwkgKiBOUl9TWU5DX1JFUVVJUkVELCBzZXQgc3luY19yZXFkIGZsYWcgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHJlc291cmNlCisJICovCisJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVCB8fAorCSAgICBpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX05SX1NZTkNfUkVRVUlSRUQpIHsKKwkJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfTlJfU1lOQ19SRVFVSVJFRCkKKwkJCXJlcy0+c3luY19yZXFkID0gMTsKKwkJaW9hc2MgPSAwOworCX0KKworCS8qIGNvbXBsZXRlIHRoZSBjb21tYW5kIGhlcmUgaXRzZWxmICovCisJcG1jcmFpZF9yZXR1cm5fY21kKGNhbmNlbF9jbWQpOworCXJldHVybiBQTUNSQUlEX0lPQVNDX1NFTlNFX0tFWShpb2FzYykgPyBGQUlMRUQgOiBTVUNDRVNTOworfQorCisvKioKKyAqIHBtY3JhaWRfZWhfYWJvcnRfaGFuZGxlciAtIGVudHJ5IHBvaW50IGZvciBhYm9ydGluZyBhIHNpbmdsZSB0YXNrIG9uIGVycm9ycworICoKKyAqIEBzY3NpX2NtZDogICBzY3NpIGNvbW1hbmQgc3RydWN0IGdpdmVuIGJ5IG1pZC1sYXllci4gV2hlbiB0aGlzIGlzIGNhbGxlZAorICoJCW1pZC1sYXllciBlbnN1cmVzIHRoYXQgbm8gb3RoZXIgY29tbWFuZHMgYXJlIHF1ZXVlZC4gVGhpcworICoJCW5ldmVyIGdldHMgY2FsbGVkIHVuZGVyIGludGVycnVwdCwgYnV0IGEgc2VwYXJhdGUgZWggdGhyZWFkLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCSBTVUNDRVNTIC8gRkFJTEVECisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQ7CisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKKwl1bnNpZ25lZCBsb25nIGhvc3RfbG9ja19mbGFnczsKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmdfbG9ja19mbGFnczsKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNhbmNlbF9jbWQgPSBOVUxMOworCWludCBjbWRfZm91bmQgPSAwOworCWludCByYyA9IEZBSUxFRDsKKworCXBpbnN0YW5jZSA9CisJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCisJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCSJJL08gY29tbWFuZCB0aW1lZCBvdXQsIGFib3J0aW5nIGl0LlxuIik7CisKKwlyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKworCWlmIChyZXMgPT0gTlVMTCkKKwkJcmV0dXJuIHJjOworCisJLyogSWYgd2UgYXJlIGN1cnJlbnRseSBnb2luZyB0aHJvdWdoIHJlc2V0L3JlbG9hZCwgcmV0dXJuIGZhaWxlZC4KKwkgKiBUaGlzIHdpbGwgZm9yY2UgdGhlIG1pZC1sYXllciB0byBldmVudHVhbGx5IGNhbGwKKwkgKiBwbWNyYWlkX2VoX2hvc3RfcmVzZXQgd2hpY2ggd2lsbCB0aGVuIGdvIHRvIHNsZWVwIGFuZCB3YWl0IGZvciB0aGUKKwkgKiByZXNldCB0byBjb21wbGV0ZQorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBob3N0X2xvY2tfZmxhZ3MpOworCisJaWYgKHBpbnN0YW5jZS0+aW9hX3Jlc2V0X2luX3Byb2dyZXNzIHx8CisJICAgIHBpbnN0YW5jZS0+aW9hX3N0YXRlID09IElPQV9TVEFURV9ERUFEKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJICAgICAgIGhvc3RfbG9ja19mbGFncyk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBsb29wIG92ZXIgcGVuZGluZyBjbWQgbGlzdCB0byBmaW5kIGNtZCBjb3JyZXNwb25kaW5nIHRvIHRoaXMKKwkgKiBzY3NpX2NtZC4gTm90ZSB0aGF0IHRoaXMgY29tbWFuZCBtaWdodCBub3QgaGF2ZSBiZWVuIGNvbXBsZXRlZAorCSAqIGFscmVhZHkuIGxvY2tpbmc6IGFsbCBwZW5kaW5nIGNvbW1hbmRzIGFyZSBwcm90ZWN0ZWQgd2l0aAorCSAqIHBlbmRpbmdfcG9vbF9sb2NrLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLCBwZW5kaW5nX2xvY2tfZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY21kLCAmcGluc3RhbmNlLT5wZW5kaW5nX2NtZF9wb29sLCBmcmVlX2xpc3QpIHsKKworCQlpZiAoY21kLT5zY3NpX2NtZCA9PSBzY3NpX2NtZCkgeworCQkJY21kX2ZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGluc3RhbmNlLT5wZW5kaW5nX3Bvb2xfbG9jaywKKwkJCQlwZW5kaW5nX2xvY2tfZmxhZ3MpOworCisJLyogSWYgdGhlIGNvbW1hbmQgdG8gYmUgYWJvcnRlZCB3YXMgZ2l2ZW4gdG8gSU9BIGFuZCBzdGlsbCBwZW5kaW5nIHdpdGgKKwkgKiBpdCwgc2VuZCBBQk9SVF9UQVNLIHRvIGFib3J0IHRoaXMgYW5kIHdhaXQgZm9yIGl0cyBjb21wbGV0aW9uCisJICovCisJaWYgKGNtZF9mb3VuZCkKKwkJY2FuY2VsX2NtZCA9IHBtY3JhaWRfYWJvcnRfY21kKGNtZCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJICAgICAgIGhvc3RfbG9ja19mbGFncyk7CisKKwlpZiAoY2FuY2VsX2NtZCkgeworCQljYW5jZWxfY21kLT51LnJlcyA9IGNtZC0+c2NzaV9jbWQtPmRldmljZS0+aG9zdGRhdGE7CisJCXJjID0gcG1jcmFpZF9hYm9ydF9jb21wbGV0ZShjYW5jZWxfY21kKTsKKwl9CisKKwlyZXR1cm4gY21kX2ZvdW5kID8gcmMgOiBTVUNDRVNTOworfQorCisvKioKKyAqIHBtY3JhaWRfZWhfeHh4eF9yZXNldF9oYW5kbGVyIC0gYnVzL3RhcmdldC9kZXZpY2UgcmVzZXQgaGFuZGxlciBjYWxsYmFja3MKKyAqCisgKiBAc2NtZDogcG9pbnRlciB0byBzY3NpX2NtZCB0aGF0IHdhcyBzZW50IHRvIHRoZSByZXNvdXJjZSB0byBiZSByZXNldC4KKyAqCisgKiBBbGwgdGhlc2Ugcm91dGluZXMgaW52b2t2ZSBwbWNyYWlkX3Jlc2V0X2RldmljZSB3aXRoIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMuCisgKiBTaW5jZSB0aGVzZSBhcmUgY2FsbGVkIGZyb20gbWlkLWxheWVyIEVIIHRocmVhZCwgbm8gb3RoZXIgSU8gd2lsbCBiZSBxdWV1ZWQKKyAqIHRvIHRoZSByZXNvdXJjZSBiZWluZyByZXNldC4gSG93ZXZlciwgY29udHJvbCBwYXRoIChJT0NUTCkgbWF5IGJlIGFjdGl2ZSBzbworICogaXQgaXMgbmVjZXNzYXJ5IHRvIHN5bmNocm9uaXplIElPQVJSSU4gd3JpdGVzIHdoaWNoIHBtY3JhaWRfcmVzZXRfZGV2aWNlCisgKiB0YWtlcyBjYXJlIGJ5IGxvY2tpbmcvdW5sb2NraW5nIGhvc3RfbG9jay4KKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqIAlTVUNDRVNTIG9yIEZBSUxFRAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKK3sKKwlwbWNyYWlkX2VycigiRG9pbmcgZGV2aWNlIHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CisJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCisJCQkJICAgIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKKwkJCQkgICAgUkVTRVRfREVWSUNFX0xVTik7Cit9CisKK3N0YXRpYyBpbnQgcG1jcmFpZF9laF9idXNfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXBtY3JhaWRfZXJyKCJEb2luZyBidXMgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlyZXR1cm4gcG1jcmFpZF9yZXNldF9kZXZpY2Uoc2NtZCwKKwkJCQkgICAgUE1DUkFJRF9SRVNFVF9CVVNfVElNRU9VVCwKKwkJCQkgICAgUkVTRVRfREVWSUNFX0JVUyk7Cit9CisKK3N0YXRpYyBpbnQgcG1jcmFpZF9laF90YXJnZXRfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQoreworCXBtY3JhaWRfZXJyKCJEb2luZyB0YXJnZXQgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlyZXR1cm4gcG1jcmFpZF9yZXNldF9kZXZpY2Uoc2NtZCwKKwkJCQkgICAgUE1DUkFJRF9JTlRFUk5BTF9USU1FT1VULAorCQkJCSAgICBSRVNFVF9ERVZJQ0VfVEFSR0VUKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2VoX2hvc3RfcmVzZXRfaGFuZGxlciAtIGFkYXB0ZXIgcmVzZXQgaGFuZGxlciBjYWxsYmFjaworICoKKyAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2lfY21kIHRoYXQgd2FzIHNlbnQgdG8gYSByZXNvdXJjZSBvZiBhZGFwdGVyCisgKgorICogSW5pdGlhdGVzIGFkYXB0ZXIgcmVzZXQgdG8gYnJpbmcgaXQgdXAgdG8gb3BlcmF0aW9uYWwgc3RhdGUKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqIAlTVUNDRVNTIG9yIEZBSUxFRAorICovCitzdGF0aWMgaW50IHBtY3JhaWRfZWhfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJdW5zaWduZWQgbG9uZyBpbnRlcnZhbCA9IDEwMDAwOyAvKiAxMCBzZWNvbmRzIGludGVydmFsICovCisJaW50IHdhaXRzID0gamlmZmllc190b19tc2VjcyhQTUNSQUlEX1JFU0VUX0hPU1RfVElNRU9VVCkgLyBpbnRlcnZhbDsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0KKwkJKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopKHNjbWQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGEpOworCisKKwkvKiB3YWl0IGZvciBhbiBhZGRpdGlvbmFsIDE1MCBzZWNvbmRzIGp1c3QgaW4gY2FzZSBmaXJtd2FyZSBjb3VsZCBjb21lCisJICogdXAgYW5kIGlmIGl0IGNvdWxkIGNvbXBsZXRlIGFsbCB0aGUgcGVuZGluZyBjb21tYW5kcyBleGNsdWRpbmcgdGhlCisJICogdHdvIEhDQU0gKENDTiBhbmQgTEROKS4KKwkgKi8KKwl3aGlsZSAod2FpdHMtLSkgeworCQlpZiAoYXRvbWljX3JlYWQoJnBpbnN0YW5jZS0+b3V0c3RhbmRpbmdfY21kcykgPD0KKwkJICAgIFBNQ1JBSURfTUFYX0hDQU1fQ01EKQorCQkJcmV0dXJuIFNVQ0NFU1M7CisJCW1zbGVlcChpbnRlcnZhbCk7CisJfQorCisJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCSJBZGFwdGVyIGJlaW5nIHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CisJcmV0dXJuIHBtY3JhaWRfcmVzZXRfYnJpbmd1cChwaW5zdGFuY2UpID09IDAgPyBTVUNDRVNTIDogRkFJTEVEOworfQorCisvKioKKyAqIHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzIC0gVHJhbnNsYXRlIFNQSSBRLVRhZ3MgdG8gdGFzayBhdHRyaWJ1dGVzCisgKiBAc2NzaV9jbWQ6ICAgc2NzaSBjb21tYW5kIHN0cnVjdAorICoKKyAqIFJldHVybiB2YWx1ZQorICoJICBudW1iZXIgb2YgdGFncyBvciAwIGlmIHRoZSB0YXNrIGlzIG5vdCB0YWdnZWQKKyAqLworc3RhdGljIHU4IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21kKQoreworCWNoYXIgdGFnWzJdOworCXU4IHJjID0gMDsKKworCWlmIChzY3NpX3BvcHVsYXRlX3RhZ19tc2coc2NzaV9jbWQsIHRhZykpIHsKKwkJc3dpdGNoICh0YWdbMF0pIHsKKwkJY2FzZSBNU0dfU0lNUExFX1RBRzoKKwkJCXJjID0gVEFTS19UQUdfU0lNUExFOworCQkJYnJlYWs7CisJCWNhc2UgTVNHX0hFQURfVEFHOgorCQkJcmMgPSBUQVNLX1RBR19RVUVVRV9IRUFEOworCQkJYnJlYWs7CisJCWNhc2UgTVNHX09SREVSRURfVEFHOgorCQkJcmMgPSBUQVNLX1RBR19PUkRFUkVEOworCQkJYnJlYWs7CisJCX07CisJfQorCisJcmV0dXJuIHJjOworfQorCisKKy8qKgorICogcG1jcmFpZF9pbml0X2lvYWRscyAtIGluaXRpYWxpemVzIElPQURMIHJlbGF0ZWQgZmllbGRzIGluIElPQVJDQgorICogQGNtZDogcG1jcmFpZCBjb21tYW5kIHN0cnVjdAorICogQHNnY291bnQ6IGNvdW50IG9mIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnRzCisgKgorICogUmV0dXJuIHZhbHVlCisgKiAgIHJldHVybnMgcG9pbnRlciBwbWNyYWlkX2lvYWRsX2Rlc2MsIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGludGVybmFsCisgKiAgIG9yIGV4dGVybmFsIElPQURMcworICovCitzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjICoKK3BtY3JhaWRfaW5pdF9pb2FkbHMoc3RydWN0IHBtY3JhaWRfY21kICpjbWQsIGludCBzZ2NvdW50KQoreworCXN0cnVjdCBwbWNyYWlkX2lvYWRsX2Rlc2MgKmlvYWRsOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJaW50IGlvYWRsX2NvdW50ID0gMDsKKworCWlmIChpb2FyY2ItPmFkZF9jbWRfcGFyYW1fbGVuZ3RoKQorCQlpb2FkbF9jb3VudCA9IERJVl9ST1VORF9VUChpb2FyY2ItPmFkZF9jbWRfcGFyYW1fbGVuZ3RoLCAxNik7CisJaW9hcmNiLT5pb2FkbF9sZW5ndGggPQorCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYykgKiBzZ2NvdW50OworCisJaWYgKChzZ2NvdW50ICsgaW9hZGxfY291bnQpID4gKEFSUkFZX1NJWkUoaW9hcmNiLT5hZGRfZGF0YS51LmlvYWRsKSkpIHsKKwkJLyogZXh0ZXJuYWwgaW9hZGxzIHN0YXJ0IGF0IG9mZnNldCAweDgwIGZyb20gY29udHJvbF9ibG9jaworCQkgKiBzdHJ1Y3R1cmUsIHJlLXVzaW5nIDI0IG91dCBvZiAyNyBpb2FkbHMgcGFydCBvZiBJT0FSQ0IuCisJCSAqIEl0IGlzIG5lY2Vzc2FyeSB0byBpbmRpY2F0ZSB0byBmaXJtd2FyZSB0aGF0IGRyaXZlciBpcworCQkgKiB1c2luZyBpb2FkbHMgdG8gYmUgdHJlYXRlZCBhcyBleHRlcm5hbCB0byBJT0FSQ0IuCisJCSAqLworCQlpb2FyY2ItPmlvYXJjYl9idXNfYWRkciAmPSB+KDB4MUZVTEwpOworCQlpb2FyY2ItPmlvYWRsX2J1c19hZGRyID0KKwkJCWNwdV90b19sZTY0KChjbWQtPmlvYV9jYl9idXNfYWRkcikgKworCQkJCW9mZnNldG9mKHN0cnVjdCBwbWNyYWlkX2lvYXJjYiwKKwkJCQkJYWRkX2RhdGEudS5pb2FkbFszXSkpOworCQlpb2FkbCA9ICZpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGxbM107CisJfSBlbHNlIHsKKwkJaW9hcmNiLT5pb2FkbF9idXNfYWRkciA9CisJCQljcHVfdG9fbGU2NCgoY21kLT5pb2FfY2JfYnVzX2FkZHIpICsKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IsCisJCQkJCWFkZF9kYXRhLnUuaW9hZGxbaW9hZGxfY291bnRdKSk7CisKKwkJaW9hZGwgPSAmaW9hcmNiLT5hZGRfZGF0YS51LmlvYWRsW2lvYWRsX2NvdW50XTsKKwkJaW9hcmNiLT5pb2FyY2JfYnVzX2FkZHIgfD0KKwkJCQlESVZfUk9VTkRfQ0xPU0VTVChzZ2NvdW50ICsgaW9hZGxfY291bnQsIDgpOworCX0KKworCXJldHVybiBpb2FkbDsKK30KKworLyoqCisgKiBwbWNyYWlkX2J1aWxkX2lvYWRsIC0gQnVpbGQgYSBzY2F0dGVyL2dhdGhlciBsaXN0IGFuZCBtYXAgdGhlIGJ1ZmZlcgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGNtZDogcG1jcmFpZCBjb21tYW5kIHN0cnVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBxdWV1ZWNvbW1hbmQgZW50cnkgcG9pbnQgd2hpbGUgc2VuZGluZyBhIGNvbW1hbmQKKyAqIHRvIGZpcm13YXJlLiBUaGlzIGJ1aWxkcyBpb2FkbCBkZXNjcmlwdG9ycyBhbmQgc2V0cyB1cCBpb2FyY2IgZmllbGRzLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqIAkwIG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHBtY3JhaWRfYnVpbGRfaW9hZGwoCisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZAorKQoreworCWludCBpLCBuc2VnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0OworCisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQgPSBjbWQtPnNjc2lfY21kOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJihjbWQtPmlvYV9jYi0+aW9hcmNiKTsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjICppb2FkbCA9IGlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbDsKKworCXUzMiBsZW5ndGggPSBzY3NpX2J1ZmZsZW4oc2NzaV9jbWQpOworCisJaWYgKCFsZW5ndGgpCisJCXJldHVybiAwOworCisJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CisKKwlpZiAobnNlZyA8IDApIHsKKwkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsICJzY3NpX21hcF9kbWEgZmFpbGVkIVxuIik7CisJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKG5zZWcgPiBQTUNSQUlEX01BWF9JT0FETFMpIHsKKwkJc2NzaV9kbWFfdW5tYXAoc2NzaV9jbWQpOworCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJCSJzZyBjb3VudCBpcyAoJWQpIG1vcmUgdGhhbiBhbGxvd2VkIVxuIiwgbnNlZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIElPQVJDQiBkYXRhIHRyYW5zZmVyIGxlbmd0aCBmaWVsZHMgKi8KKwlpZiAoc2NzaV9jbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczAgfD0gVFJBTlNGRVJfRElSX1dSSVRFOworCisJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBOT19MSU5LX0RFU0NTOworCWlvYXJjYi0+ZGF0YV90cmFuc2Zlcl9sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpOworCWlvYWRsID0gcG1jcmFpZF9pbml0X2lvYWRscyhjbWQsIG5zZWcpOworCisJLyogSW5pdGlhbGl6ZSBJT0FETCBkZXNjcmlwdG9yIGFkZHJlc3NlcyAqLworCXNjc2lfZm9yX2VhY2hfc2coc2NzaV9jbWQsIHNnbGlzdCwgbnNlZywgaSkgeworCQlpb2FkbFtpXS5kYXRhX2xlbiA9IGNwdV90b19sZTMyKHNnX2RtYV9sZW4oc2dsaXN0KSk7CisJCWlvYWRsW2ldLmFkZHJlc3MgPSBjcHVfdG9fbGU2NChzZ19kbWFfYWRkcmVzcyhzZ2xpc3QpKTsKKwkJaW9hZGxbaV0uZmxhZ3MgPSAwOworCX0KKwkvKiBzZXR1cCBsYXN0IGRlc2NyaXB0b3IgKi8KKwlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9mcmVlX3NnbGlzdCAtIEZyZWVzIGFuIGFsbG9jYXRlZCBTRyBidWZmZXIgbGlzdAorICogQHNnbGlzdDogc2NhdHRlci9nYXRoZXIgbGlzdCBwb2ludGVyCisgKgorICogRnJlZSBhIERNQSdhYmxlIG1lbW9yeSBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIHBtY3JhaWRfYWxsb2Nfc2dsaXN0CisgKgorICogUmV0dXJuIHZhbHVlOgorICogCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9mcmVlX3NnbGlzdChzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnNnbGlzdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzZ2xpc3QtPm51bV9zZzsgaSsrKQorCQlfX2ZyZWVfcGFnZXMoc2dfcGFnZSgmKHNnbGlzdC0+c2NhdHRlcmxpc3RbaV0pKSwKKwkJCSAgICAgc2dsaXN0LT5vcmRlcik7CisKKwlrZnJlZShzZ2xpc3QpOworfQorCisvKioKKyAqIHBtY3JhaWRfYWxsb2Nfc2dsaXN0IC0gQWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBTRyBsaXN0CisgKiBAYnVmbGVuOiBidWZmZXIgbGVuZ3RoCisgKgorICogQWxsb2NhdGVzIGEgRE1BJ2FibGUgYnVmZmVyIGluIGNodW5rcyBhbmQgYXNzZW1ibGVzIGEgc2NhdHRlci9nYXRoZXIKKyAqIGxpc3QuCisgKgorICogUmV0dXJuIHZhbHVlCisgKiAJcG9pbnRlciB0byBzZ2xpc3QgLyBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIHN0cnVjdCBwbWNyYWlkX3NnbGlzdCAqcG1jcmFpZF9hbGxvY19zZ2xpc3QoaW50IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnNnbGlzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXR0ZXJsaXN0OworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBudW1fZWxlbSwgaSwgajsKKwlpbnQgc2dfc2l6ZTsKKwlpbnQgb3JkZXI7CisJaW50IGJzaXplX2VsZW07CisKKwlzZ19zaXplID0gYnVmbGVuIC8gKFBNQ1JBSURfTUFYX0lPQURMUyAtIDEpOworCW9yZGVyID0gKHNnX3NpemUgPiAwKSA/IGdldF9vcmRlcihzZ19zaXplKSA6IDA7CisJYnNpemVfZWxlbSA9IFBBR0VfU0laRSAqICgxIDw8IG9yZGVyKTsKKworCS8qIERldGVybWluZSB0aGUgYWN0dWFsIG51bWJlciBvZiBzZyBlbnRyaWVzIG5lZWRlZCAqLworCWlmIChidWZsZW4gJSBic2l6ZV9lbGVtKQorCQludW1fZWxlbSA9IChidWZsZW4gLyBic2l6ZV9lbGVtKSArIDE7CisJZWxzZQorCQludW1fZWxlbSA9IGJ1ZmxlbiAvIGJzaXplX2VsZW07CisKKwkvKiBBbGxvY2F0ZSBhIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgZm9yIHRoZSBETUEgKi8KKwlzZ2xpc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QpICsKKwkJCSAoc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiAobnVtX2VsZW0gLSAxKSksCisJCQkgR0ZQX0tFUk5FTCk7CisKKwlpZiAoc2dsaXN0ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJc2NhdHRlcmxpc3QgPSBzZ2xpc3QtPnNjYXR0ZXJsaXN0OworCXNnX2luaXRfdGFibGUoc2NhdHRlcmxpc3QsIG51bV9lbGVtKTsKKwlzZ2xpc3QtPm9yZGVyID0gb3JkZXI7CisJc2dsaXN0LT5udW1fc2cgPSBudW1fZWxlbTsKKwlzZ19zaXplID0gYnVmbGVuOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbGVtOyBpKyspIHsKKwkJcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUx8R0ZQX0RNQSwgb3JkZXIpOworCQlpZiAoIXBhZ2UpIHsKKwkJCWZvciAoaiA9IGkgLSAxOyBqID49IDA7IGotLSkKKwkJCQlfX2ZyZWVfcGFnZXMoc2dfcGFnZSgmc2NhdHRlcmxpc3Rbal0pLCBvcmRlcik7CisJCQlrZnJlZShzZ2xpc3QpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlzZ19zZXRfcGFnZSgmc2NhdHRlcmxpc3RbaV0sIHBhZ2UsCisJCQlzZ19zaXplIDwgYnNpemVfZWxlbSA/IHNnX3NpemUgOiBic2l6ZV9lbGVtLCAwKTsKKwkJc2dfc2l6ZSAtPSBic2l6ZV9lbGVtOworCX0KKworCXJldHVybiBzZ2xpc3Q7Cit9CisKKy8qKgorICogcG1jcmFpZF9jb3B5X3NnbGlzdCAtIENvcHkgdXNlciBidWZmZXIgdG8ga2VybmVsIGJ1ZmZlcidzIFNHIGxpc3QKKyAqIEBzZ2xpc3Q6IHNjYXR0ZXIvZ2F0aGVyIGxpc3QgcG9pbnRlcgorICogQGJ1ZmZlcjogYnVmZmVyIHBvaW50ZXIKKyAqIEBsZW46IGJ1ZmZlciBsZW5ndGgKKyAqIEBkaXJlY3Rpb246IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uCisgKgorICogQ29weSBhIHVzZXIgYnVmZmVyIGludG8gYSBidWZmZXIgYWxsb2NhdGVkIGJ5IHBtY3JhaWRfYWxsb2Nfc2dsaXN0CisgKgorICogUmV0dXJuIHZhbHVlOgorICogMCBvbiBzdWNjZXNzIC8gb3RoZXIgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHBtY3JhaWRfY29weV9zZ2xpc3QoCisJc3RydWN0IHBtY3JhaWRfc2dsaXN0ICpzZ2xpc3QsCisJdW5zaWduZWQgbG9uZyBidWZmZXIsCisJdTMyIGxlbiwKKwlpbnQgZGlyZWN0aW9uCispCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0dGVybGlzdDsKKwl2b2lkICprYWRkcjsKKwlpbnQgYnNpemVfZWxlbTsKKwlpbnQgaTsKKwlpbnQgcmMgPSAwOworCisJLyogRGV0ZXJtaW5lIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHBlciBlbGVtZW50ICovCisJYnNpemVfZWxlbSA9IFBBR0VfU0laRSAqICgxIDw8IHNnbGlzdC0+b3JkZXIpOworCisJc2NhdHRlcmxpc3QgPSBzZ2xpc3QtPnNjYXR0ZXJsaXN0OworCisJZm9yIChpID0gMDsgaSA8IChsZW4gLyBic2l6ZV9lbGVtKTsgaSsrLCBidWZmZXIgKz0gYnNpemVfZWxlbSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2UoJnNjYXR0ZXJsaXN0W2ldKTsKKworCQlrYWRkciA9IGttYXAocGFnZSk7CisJCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkKKwkJCXJjID0gX19jb3B5X2Zyb21fdXNlcihrYWRkciwKKwkJCQkJICAgICAgKHZvaWQgKilidWZmZXIsCisJCQkJCSAgICAgIGJzaXplX2VsZW0pOworCQllbHNlCisJCQlyYyA9IF9fY29weV90b191c2VyKCh2b2lkICopYnVmZmVyLCBrYWRkciwgYnNpemVfZWxlbSk7CisKKwkJa3VubWFwKHBhZ2UpOworCisJCWlmIChyYykgeworCQkJcG1jcmFpZF9lcnIoImZhaWxlZCB0byBjb3B5IHVzZXIgZGF0YSBpbnRvIHNnIGxpc3RcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKworCQlzY2F0dGVybGlzdFtpXS5sZW5ndGggPSBic2l6ZV9lbGVtOworCX0KKworCWlmIChsZW4gJSBic2l6ZV9lbGVtKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gc2dfcGFnZSgmc2NhdHRlcmxpc3RbaV0pOworCisJCWthZGRyID0ga21hcChwYWdlKTsKKworCQlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpCisJCQlyYyA9IF9fY29weV9mcm9tX3VzZXIoa2FkZHIsCisJCQkJCSAgICAgICh2b2lkICopYnVmZmVyLAorCQkJCQkgICAgICBsZW4gJSBic2l6ZV9lbGVtKTsKKwkJZWxzZQorCQkJcmMgPSBfX2NvcHlfdG9fdXNlcigodm9pZCAqKWJ1ZmZlciwKKwkJCQkJICAgIGthZGRyLAorCQkJCQkgICAgbGVuICUgYnNpemVfZWxlbSk7CisKKwkJa3VubWFwKHBhZ2UpOworCisJCXNjYXR0ZXJsaXN0W2ldLmxlbmd0aCA9IGxlbiAlIGJzaXplX2VsZW07CisJfQorCisJaWYgKHJjKSB7CisJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gY29weSB1c2VyIGRhdGEgaW50byBzZyBsaXN0XG4iKTsKKwkJcmMgPSAtRUZBVUxUOworCX0KKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBwbWNyYWlkX3F1ZXVlY29tbWFuZCAtIFF1ZXVlIGEgbWlkLWxheWVyIHJlcXVlc3QKKyAqIEBzY3NpX2NtZDogc2NzaSBjb21tYW5kIHN0cnVjdAorICogQGRvbmU6IGRvbmUgZnVuY3Rpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHF1ZXVlcyBhIHJlcXVlc3QgZ2VuZXJhdGVkIGJ5IHRoZSBtaWQtbGF5ZXIuIE1pZGxheWVyIGNhbGxzCisgKiB0aGlzIHJvdXRpbmUgd2l0aGluIGhvc3QtPmxvY2suIFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgYnkgcXVldWVjb21tYW5kCisgKiB3b3VsZCB1c2UgY21kIGJsb2NrIHF1ZXVlIGxvY2tzIChmcmVlX3Bvb2xfbG9jayBhbmQgcGVuZGluZ19wb29sX2xvY2spCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJICAwIG9uIHN1Y2Nlc3MKKyAqCSAgU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZIGlmIGRldmljZSBpcyBidXN5CisgKgkgIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1kgaWYgaG9zdCBpcyBidXN5CisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9xdWV1ZWNvbW1hbmQoCisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQsCisJdm9pZCAoKmRvbmUpIChzdHJ1Y3Qgc2NzaV9jbW5kICopCispCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiOworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kOworCWludCByYyA9IDA7CisKKwlwaW5zdGFuY2UgPQorCQkoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKKworCXNjc2lfY21kLT5zY3NpX2RvbmUgPSBkb25lOworCXJlcyA9IHNjc2lfY21kLT5kZXZpY2UtPmhvc3RkYXRhOworCXNjc2lfY21kLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KTsKKworCS8qIGlmIGFkYXB0ZXIgaXMgbWFya2VkIGFzIGRlYWQsIHNldCByZXN1bHQgdG8gRElEX05PX0NPTk5FQ1QgY29tcGxldGUKKwkgKiB0aGUgY29tbWFuZAorCSAqLworCWlmIChwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9PSBJT0FfU1RBVEVfREVBRCkgeworCQlwbWNyYWlkX2luZm8oIklPQSBpcyBkZWFkLCBidXQgcXVldWVjb21tYW5kIGlzIHNjaGVkdWxlZFxuIik7CisJCXNjc2lfY21kLT5yZXN1bHQgPSAoRElEX05PX0NPTk5FQ1QgPDwgMTYpOworCQlzY3NpX2NtZC0+c2NzaV9kb25lKHNjc2lfY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSWYgSU9BIHJlc2V0IGlzIGluIHByb2dyZXNzLCBjYW4ndCBxdWV1ZSB0aGUgY29tbWFuZHMgKi8KKwlpZiAocGluc3RhbmNlLT5pb2FfcmVzZXRfaW5fcHJvZ3Jlc3MpCisJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCisJLyogaW5pdGlhbGl6ZSB0aGUgY29tbWFuZCBhbmQgSU9BUkNCIHRvIGJlIHNlbnQgdG8gSU9BICovCisJY21kID0gcG1jcmFpZF9nZXRfZnJlZV9jbWQocGluc3RhbmNlKTsKKworCWlmIChjbWQgPT0gTlVMTCkgeworCQlwbWNyYWlkX2VycigiZnJlZSBjb21tYW5kIGJsb2NrIGlzIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwljbWQtPnNjc2lfY21kID0gc2NzaV9jbWQ7CisJaW9hcmNiID0gJihjbWQtPmlvYV9jYi0+aW9hcmNiKTsKKwltZW1jcHkoaW9hcmNiLT5jZGIsIHNjc2lfY21kLT5jbW5kLCBzY3NpX2NtZC0+Y21kX2xlbik7CisJaW9hcmNiLT5yZXNvdXJjZV9oYW5kbGUgPSByZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9oYW5kbGU7CisJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9TQ1NJOworCisJY21kLT5jbWRfZG9uZSA9IHBtY3JhaWRfaW9fZG9uZTsKKworCWlmIChSRVNfSVNfR1NDU0kocmVzLT5jZmdfZW50cnkpIHx8IFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSkgeworCQlpZiAoc2NzaV9jbWQtPnVuZGVyZmxvdyA9PSAwKQorCQkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBJTkhJQklUX1VMX0NIRUNLOworCisJCWlmIChyZXMtPnN5bmNfcmVxZCkgeworCQkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBTWU5DX0NPTVBMRVRFOworCQkJcmVzLT5zeW5jX3JlcWQgPSAwOworCQl9CisKKwkJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBOT19MSU5LX0RFU0NTOworCQlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MxIHw9IHBtY3JhaWRfdGFza19hdHRyaWJ1dGVzKHNjc2lfY21kKTsKKworCQlpZiAoUkVTX0lTX0dTQ1NJKHJlcy0+Y2ZnX2VudHJ5KSkKKwkJCWlvYXJjYi0+cmVxdWVzdF9mbGFnczEgfD0gREVMQVlfQUZURVJfUkVTRVQ7CisJfQorCisJcmMgPSBwbWNyYWlkX2J1aWxkX2lvYWRsKHBpbnN0YW5jZSwgY21kKTsKKworCXBtY3JhaWRfaW5mbygiY29tbWFuZCAoJWQpIENEQlswXSA9ICV4IGZvciAleDoleDoleDoleFxuIiwKKwkJICAgICBsZTMyX3RvX2NwdShpb2FyY2ItPnJlc3BvbnNlX2hhbmRsZSkgPj4gMiwKKwkJICAgICBzY3NpX2NtZC0+Y21uZFswXSwgcGluc3RhbmNlLT5ob3N0LT51bmlxdWVfaWQsCisJCSAgICAgUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpID8gUE1DUkFJRF9WU0VUX0JVU19JRCA6CisJCQlQTUNSQUlEX1BIWVNfQlVTX0lELAorCQkgICAgIFJFU19JU19WU0VUKHJlcy0+Y2ZnX2VudHJ5KSA/CisJCQlyZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxIDoKKwkJCVJFU19UQVJHRVQocmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcyksCisJCSAgICAgUkVTX0xVTihyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9hZGRyZXNzKSk7CisKKwlpZiAobGlrZWx5KHJjID09IDApKSB7CisJCV9wbWNyYWlkX2ZpcmVfY29tbWFuZChjbWQpOworCX0gZWxzZSB7CisJCXBtY3JhaWRfZXJyKCJxdWV1ZWNvbW1hbmQgY291bGQgbm90IGJ1aWxkIGlvYWRsXG4iKTsKKwkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CisJCXJjID0gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogcG1jcmFpZF9vcGVuIC1jaGFyIG5vZGUgIm9wZW4iIGVudHJ5LCBhbGxvd2VkIG9ubHkgdXNlcnMgd2l0aCBhZG1pbiBhY2Nlc3MKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2Nocl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCS8qIFBvcHVsYXRlIGFkYXB0ZXIgaW5zdGFuY2UgKiBwb2ludGVyIGZvciB1c2UgYnkgaW9jdGwgKi8KKwlwaW5zdGFuY2UgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UsIGNkZXYpOworCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBwaW5zdGFuY2U7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2UgLSBjaGFyIG5vZGUgInJlbGVhc2UiIGVudHJ5IHBvaW50CisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9jaHJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9CisJCSgoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilmaWxlcC0+cHJpdmF0ZV9kYXRhKTsKKworCWZpbGVwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWZhc3luY19oZWxwZXIoLTEsIGZpbGVwLCAwLCAmcGluc3RhbmNlLT5hZW5fcXVldWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9mYXN5bmMgLSBBc3luYyBub3RpZmllciByZWdpc3RyYXRpb24gZnJvbSBhcHBsaWNhdGlvbnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGNhbGxpbmcgcHJvY2VzcyB0byBhIGRyaXZlciBnbG9iYWwgcXVldWUuIFdoZW4gYW4KKyAqIGV2ZW50IG9jY3VycywgU0lHSU8gd2lsbCBiZSBzZW50IHRvIGFsbCBwcm9jZXNzZXMgaW4gdGhpcyBxdWV1ZS4KKyAqLworc3RhdGljIGludCBwbWNyYWlkX2Nocl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBtb2RlKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2U7CisJaW50IHJjOworCisJcGluc3RhbmNlID0gKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopZmlsZXAtPnByaXZhdGVfZGF0YTsKKwltdXRleF9sb2NrKCZwaW5zdGFuY2UtPmFlbl9xdWV1ZV9sb2NrKTsKKwlyYyA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGVwLCBtb2RlLCAmcGluc3RhbmNlLT5hZW5fcXVldWUpOworCW11dGV4X3VubG9jaygmcGluc3RhbmNlLT5hZW5fcXVldWVfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX2J1aWxkX3Bhc3N0aHJvdWdoX2lvYWRscyAtIGJ1aWxkcyBTRyBlbGVtZW50cyBmb3IgcGFzc3Rocm91Z2gKKyAqIGNvbW1hbmRzIHNlbnQgb3ZlciBJT0NUTCBpbnRlcmZhY2UKKyAqCisgKiBAY21kICAgICAgIDogcG9pbnRlciB0byBzdHJ1Y3QgcG1jcmFpZF9jbWQKKyAqIEBidWZsZW4gICAgOiBsZW5ndGggb2YgdGhlIHJlcXVlc3QgYnVmZmVyCisgKiBAZGlyZWN0aW9uIDogZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24KKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICAwIG9uIHN1Y2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgcG1jcmFpZF9idWlsZF9wYXNzdGhyb3VnaF9pb2FkbHMoCisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQsCisJaW50IGJ1ZmxlbiwKKwlpbnQgZGlyZWN0aW9uCispCit7CisJc3RydWN0IHBtY3JhaWRfc2dsaXN0ICpzZ2xpc3QgPSBOVUxMOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBOVUxMOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYyAqaW9hZGw7CisJaW50IGk7CisKKwlzZ2xpc3QgPSBwbWNyYWlkX2FsbG9jX3NnbGlzdChidWZsZW4pOworCisJaWYgKCFzZ2xpc3QpIHsKKwkJcG1jcmFpZF9lcnIoImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgcGFzc3Rocm91Z2ggU0dsc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNnbGlzdC0+bnVtX2RtYV9zZyA9IHBjaV9tYXBfc2coY21kLT5kcnZfaW5zdC0+cGRldiwKKwkJCQkJc2dsaXN0LT5zY2F0dGVybGlzdCwKKwkJCQkJc2dsaXN0LT5udW1fc2csIGRpcmVjdGlvbik7CisKKwlpZiAoIXNnbGlzdC0+bnVtX2RtYV9zZyB8fCBzZ2xpc3QtPm51bV9kbWFfc2cgPiBQTUNSQUlEX01BWF9JT0FETFMpIHsKKwkJZGV2X2VycigmY21kLT5kcnZfaW5zdC0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBtYXAgcGFzc3Rocm91Z2ggYnVmZmVyIVxuIik7CisJCXBtY3JhaWRfZnJlZV9zZ2xpc3Qoc2dsaXN0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJY21kLT5zZ2xpc3QgPSBzZ2xpc3Q7CisJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMCB8PSBOT19MSU5LX0RFU0NTOworCisJaW9hZGwgPSBwbWNyYWlkX2luaXRfaW9hZGxzKGNtZCwgc2dsaXN0LT5udW1fZG1hX3NnKTsKKworCS8qIEluaXRpYWxpemUgSU9BREwgZGVzY3JpcHRvciBhZGRyZXNzZXMgKi8KKwlmb3JfZWFjaF9zZyhzZ2xpc3QtPnNjYXR0ZXJsaXN0LCBzZywgc2dsaXN0LT5udW1fZG1hX3NnLCBpKSB7CisJCWlvYWRsW2ldLmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOworCQlpb2FkbFtpXS5hZGRyZXNzID0gY3B1X3RvX2xlNjQoc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJaW9hZGxbaV0uZmxhZ3MgPSAwOworCX0KKworCS8qIHNldHVwIHRoZSBsYXN0IGRlc2NyaXB0b3IgKi8KKwlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCisJcmV0dXJuIDA7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2VfcGFzc3Rocm91Z2hfaW9hZGxzIC0gcmVsZWFzZSBwYXNzdGhyb3VnaCBpb2FkbHMKKyAqCisgKiBAY21kOiBwb2ludGVyIHRvIHN0cnVjdCBwbWNyYWlkX2NtZCBmb3Igd2hpY2ggaW9hZGxzIHdlcmUgYWxsb2NhdGVkCisgKiBAYnVmbGVuOiBzaXplIG9mIHRoZSByZXF1ZXN0IGJ1ZmZlcgorICogQGRpcmVjdGlvbjogZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24KKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICAwIG9uIHN1Y2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVsZWFzZV9wYXNzdGhyb3VnaF9pb2FkbHMoCisJc3RydWN0IHBtY3JhaWRfY21kICpjbWQsCisJaW50IGJ1ZmxlbiwKKwlpbnQgZGlyZWN0aW9uCispCit7CisJc3RydWN0IHBtY3JhaWRfc2dsaXN0ICpzZ2xpc3QgPSBjbWQtPnNnbGlzdDsKKworCWlmIChidWZsZW4gPiAwKSB7CisJCXBjaV91bm1hcF9zZyhjbWQtPmRydl9pbnN0LT5wZGV2LAorCQkJICAgICBzZ2xpc3QtPnNjYXR0ZXJsaXN0LAorCQkJICAgICBzZ2xpc3QtPm51bV9zZywKKwkJCSAgICAgZGlyZWN0aW9uKTsKKwkJcG1jcmFpZF9mcmVlX3NnbGlzdChzZ2xpc3QpOworCQljbWQtPnNnbGlzdCA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIHBtY3JhaWRfaW9jdGxfcGFzc3Rocm91Z2ggLSBoYW5kbGluZyBwYXNzdGhyb3VnaCBJT0NUTCBjb21tYW5kcworICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBjbWQ6IGlvY3RsIGNvZGUKKyAqIEBhcmc6IHBvaW50ZXIgdG8gcG1jcmFpZF9wYXNzdGhyb3VnaF9idWZmZXIgdXNlciBidWZmZXIKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICAwIG9uIHN1Y2Vzcywgbm9uLXplcm8gZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBsb25nIHBtY3JhaWRfaW9jdGxfcGFzc3Rocm91Z2goCisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSwKKwl1bnNpZ25lZCBpbnQgaW9jdGxfY21kLAorCXVuc2lnbmVkIGludCBidWZsZW4sCisJdW5zaWduZWQgbG9uZyBhcmcKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9wYXNzdGhyb3VnaF9pb2N0bF9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYjsKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZDsKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNhbmNlbF9jbWQ7CisJdW5zaWduZWQgbG9uZyByZXF1ZXN0X2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHJlcXVlc3Rfb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgcmVxdWVzdF9zaXplOworCWludCBidWZmZXJfc2l6ZTsKKwl1OCBhY2Nlc3MsIGRpcmVjdGlvbjsKKwlpbnQgcmMgPSAwOworCisJLyogSWYgSU9BIHJlc2V0IGlzIGluIHByb2dyZXNzLCB3YWl0IDEwIHNlY3MgZm9yIHJlc2V0IHRvIGNvbXBsZXRlICovCisJaWYgKHBpbnN0YW5jZS0+aW9hX3Jlc2V0X2luX3Byb2dyZXNzKSB7CisJCXJjID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQkJcGluc3RhbmNlLT5yZXNldF93YWl0X3EsCisJCQkJIXBpbnN0YW5jZS0+aW9hX3Jlc2V0X2luX3Byb2dyZXNzLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsKKworCQlpZiAoIXJjKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCWVsc2UgaWYgKHJjIDwgMCkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJfQorCisJLyogSWYgYWRhcHRlciBpcyBub3QgaW4gb3BlcmF0aW9uYWwgc3RhdGUsIHJldHVybiBlcnJvciAqLworCWlmIChwaW5zdGFuY2UtPmlvYV9zdGF0ZSAhPSBJT0FfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJcG1jcmFpZF9lcnIoIklPQSBpcyBub3Qgb3BlcmF0aW9uYWxcbiIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlidWZmZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9wYXNzdGhyb3VnaF9pb2N0bF9idWZmZXIpOworCWJ1ZmZlciA9IGttYWxsb2MoYnVmZmVyX3NpemUsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWZmZXIpIHsKKwkJcG1jcmFpZF9lcnIoIm5vIG1lbW9yeSBmb3IgcGFzc3Rocm91Z2ggYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmVxdWVzdF9vZmZzZXQgPQorCSAgICBvZmZzZXRvZihzdHJ1Y3QgcG1jcmFpZF9wYXNzdGhyb3VnaF9pb2N0bF9idWZmZXIsIHJlcXVlc3RfYnVmZmVyKTsKKworCXJlcXVlc3RfYnVmZmVyID0gYXJnICsgcmVxdWVzdF9vZmZzZXQ7CisKKwlyYyA9IF9fY29weV9mcm9tX3VzZXIoYnVmZmVyLAorCQkJICAgICAoc3RydWN0IHBtY3JhaWRfcGFzc3Rocm91Z2hfaW9jdGxfYnVmZmVyICopIGFyZywKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlcikpOworCWlmIChyYykgeworCQlwbWNyYWlkX2VycigiaW9jdGw6IGNhbid0IGNvcHkgcGFzc3Rocm91Z2ggYnVmZmVyXG4iKTsKKwkJcmMgPSAtRUZBVUxUOworCQlnb3RvIG91dF9mcmVlX2J1ZmZlcjsKKwl9CisKKwlyZXF1ZXN0X3NpemUgPSBidWZmZXItPmlvYXJjYi5kYXRhX3RyYW5zZmVyX2xlbmd0aDsKKworCWlmIChidWZmZXItPmlvYXJjYi5yZXF1ZXN0X2ZsYWdzMCAmIFRSQU5TRkVSX0RJUl9XUklURSkgeworCQlhY2Nlc3MgPSBWRVJJRllfUkVBRDsKKwkJZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwl9IGVsc2UgeworCQlhY2Nlc3MgPSBWRVJJRllfV1JJVEU7CisJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwl9CisKKwlpZiAocmVxdWVzdF9zaXplID4gMCkgeworCQlyYyA9IGFjY2Vzc19vayhhY2Nlc3MsIGFyZywgcmVxdWVzdF9vZmZzZXQgKyByZXF1ZXN0X3NpemUpOworCisJCWlmICghcmMpIHsKKwkJCXJjID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOworCQl9CisJfQorCisJLyogY2hlY2sgaWYgd2UgaGF2ZSBhbnkgYWRkaXRpb25hbCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KKwlpZiAoYnVmZmVyLT5pb2FyY2IuYWRkX2NtZF9wYXJhbV9sZW5ndGggPiBQTUNSQUlEX0FERF9DTURfUEFSQU1fTEVOKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZnJlZV9idWZmZXI7CisJfQorCisJY21kID0gcG1jcmFpZF9nZXRfZnJlZV9jbWQocGluc3RhbmNlKTsKKworCWlmICghY21kKSB7CisJCXBtY3JhaWRfZXJyKCJmcmVlIGNvbW1hbmQgYmxvY2sgaXMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9idWZmZXI7CisJfQorCisJY21kLT5zY3NpX2NtZCA9IE5VTEw7CisJaW9hcmNiID0gJihjbWQtPmlvYV9jYi0+aW9hcmNiKTsKKworCS8qIENvcHkgdGhlIHVzZXItcHJvdmlkZWQgSU9BUkNCIHN0dWZmIGZpZWxkIGJ5IGZpZWxkICovCisJaW9hcmNiLT5yZXNvdXJjZV9oYW5kbGUgPSBidWZmZXItPmlvYXJjYi5yZXNvdXJjZV9oYW5kbGU7CisJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9IGJ1ZmZlci0+aW9hcmNiLmRhdGFfdHJhbnNmZXJfbGVuZ3RoOworCWlvYXJjYi0+Y21kX3RpbWVvdXQgPSBidWZmZXItPmlvYXJjYi5jbWRfdGltZW91dDsKKwlpb2FyY2ItPnJlcXVlc3RfdHlwZSA9IGJ1ZmZlci0+aW9hcmNiLnJlcXVlc3RfdHlwZTsKKwlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwID0gYnVmZmVyLT5pb2FyY2IucmVxdWVzdF9mbGFnczA7CisJaW9hcmNiLT5yZXF1ZXN0X2ZsYWdzMSA9IGJ1ZmZlci0+aW9hcmNiLnJlcXVlc3RfZmxhZ3MxOworCW1lbWNweShpb2FyY2ItPmNkYiwgYnVmZmVyLT5pb2FyY2IuY2RiLCBQTUNSQUlEX01BWF9DREJfTEVOKTsKKworCWlmIChidWZmZXItPmlvYXJjYi5hZGRfY21kX3BhcmFtX2xlbmd0aCkgeworCQlpb2FyY2ItPmFkZF9jbWRfcGFyYW1fbGVuZ3RoID0KKwkJCWJ1ZmZlci0+aW9hcmNiLmFkZF9jbWRfcGFyYW1fbGVuZ3RoOworCQlpb2FyY2ItPmFkZF9jbWRfcGFyYW1fb2Zmc2V0ID0KKwkJCWJ1ZmZlci0+aW9hcmNiLmFkZF9jbWRfcGFyYW1fb2Zmc2V0OworCQltZW1jcHkoaW9hcmNiLT5hZGRfZGF0YS51LmFkZF9jbWRfcGFyYW1zLAorCQkJYnVmZmVyLT5pb2FyY2IuYWRkX2RhdGEudS5hZGRfY21kX3BhcmFtcywKKwkJCWJ1ZmZlci0+aW9hcmNiLmFkZF9jbWRfcGFyYW1fbGVuZ3RoKTsKKwl9CisKKwlpZiAocmVxdWVzdF9zaXplKSB7CisJCXJjID0gcG1jcmFpZF9idWlsZF9wYXNzdGhyb3VnaF9pb2FkbHMoY21kLAorCQkJCQkJICAgICAgcmVxdWVzdF9zaXplLAorCQkJCQkJICAgICAgZGlyZWN0aW9uKTsKKwkJaWYgKHJjKSB7CisJCQlwbWNyYWlkX2VycigiY291bGRuJ3QgYnVpbGQgcGFzc3Rocm91Z2ggaW9hZGxzXG4iKTsKKwkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOworCQl9CisJfQorCisJLyogSWYgZGF0YSBpcyBiZWluZyB3cml0dGVuIGludG8gdGhlIGRldmljZSwgY29weSB0aGUgZGF0YSBmcm9tIHVzZXIKKwkgKiBidWZmZXJzCisJICovCisJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFICYmIHJlcXVlc3Rfc2l6ZSA+IDApIHsKKwkJcmMgPSBwbWNyYWlkX2NvcHlfc2dsaXN0KGNtZC0+c2dsaXN0LAorCQkJCQkgcmVxdWVzdF9idWZmZXIsCisJCQkJCSByZXF1ZXN0X3NpemUsCisJCQkJCSBkaXJlY3Rpb24pOworCQlpZiAocmMpIHsKKwkJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gY29weSB1c2VyIGJ1ZmZlclxuIik7CisJCQlnb3RvIG91dF9mcmVlX3NnbGlzdDsKKwkJfQorCX0KKworCS8qIHBhc3N0aHJvdWdoIGlvY3RsIGlzIGEgYmxvY2tpbmcgY29tbWFuZCBzbywgcHV0IHRoZSB1c2VyIHRvIHNsZWVwCisJICogdW50aWwgdGltZW91dC4gTm90ZSB0aGF0IGEgdGltZW91dCB2YWx1ZSBvZiAwIG1lYW5zLCBkbyB0aW1lb3V0LgorCSAqLworCWNtZC0+Y21kX2RvbmUgPSBwbWNyYWlkX2ludGVybmFsX2RvbmU7CisJaW5pdF9jb21wbGV0aW9uKCZjbWQtPndhaXRfZm9yX2NvbXBsZXRpb24pOworCWNtZC0+Y29tcGxldGlvbl9yZXEgPSAxOworCisJcG1jcmFpZF9pbmZvKCJjb21tYW5kKCVkKSAoQ0RCWzBdID0gJXgpIGZvciAleFxuIiwKKwkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLnJlc3BvbnNlX2hhbmRsZSkgPj4gMiwKKwkJICAgICBjbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSwKKwkJICAgICBsZTMyX3RvX2NwdShjbWQtPmlvYV9jYi0+aW9hcmNiLnJlc291cmNlX2hhbmRsZSkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCV9wbWNyYWlkX2ZpcmVfY29tbWFuZChjbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOworCisJLyogSWYgY29tbWFuZCB0aW1lb3V0IGlzIHNwZWNpZmllZCBwdXQgY2FsbGVyIHRvIHdhaXQgdGlsbCB0aGF0IHRpbWUsCisJICogb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGJsb2NraW5nIHdhaXQuIElmIGNvbW1hbmQgZ2V0cyB0aW1lZCBvdXQsIGl0CisJICogd2lsbCBiZSBhYm9ydGVkLgorCSAqLworCWlmIChidWZmZXItPmlvYXJjYi5jbWRfdGltZW91dCA9PSAwKSB7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNtZC0+d2FpdF9mb3JfY29tcGxldGlvbik7CisJfSBlbHNlIGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KAorCQkJJmNtZC0+d2FpdF9mb3JfY29tcGxldGlvbiwKKwkJCW1zZWNzX3RvX2ppZmZpZXMoYnVmZmVyLT5pb2FyY2IuY21kX3RpbWVvdXQgKiAxMDAwKSkpIHsKKworCQlwbWNyYWlkX2luZm8oImFib3J0aW5nIGNtZCAlZCAoQ0RCWzBdID0gJXgpIGR1ZSB0byB0aW1lb3V0XG4iLAorCQkJbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXJjYi5yZXNwb25zZV9oYW5kbGUgPj4gMiksCisJCQljbWQtPmlvYV9jYi0+aW9hcmNiLmNkYlswXSk7CisKKwkJcmMgPSAtRVRJTUVET1VUOworCQlzcGluX2xvY2tfaXJxc2F2ZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCWNhbmNlbF9jbWQgPSBwbWNyYWlkX2Fib3J0X2NtZChjbWQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKworCQlpZiAoY2FuY2VsX2NtZCkgeworCQkJd2FpdF9mb3JfY29tcGxldGlvbigmY2FuY2VsX2NtZC0+d2FpdF9mb3JfY29tcGxldGlvbik7CisJCQlwbWNyYWlkX3JldHVybl9jbWQoY2FuY2VsX2NtZCk7CisJCX0KKworCQlnb3RvIG91dF9mcmVlX3NnbGlzdDsKKwl9CisKKwkvKiBJZiB0aGUgY29tbWFuZCBmYWlsZWQgZm9yIGFueSByZWFzb24sIGNvcHkgZW50aXJlIElPQVNBIGJ1ZmZlciBhbmQKKwkgKiByZXR1cm4gSU9DVEwgc3VjY2Vzcy4gSWYgY29weWluZyBJT0FTQSB0byB1c2VyLWJ1ZmZlciBmYWlscywgcmV0dXJuCisJICogRUZBVUxUCisJICovCisJaWYgKGxlMzJfdG9fY3B1KGNtZC0+aW9hX2NiLT5pb2FzYS5pb2FzYykpIHsKKworCQl2b2lkICppb2FzYSA9CisJCSAgICAodm9pZCAqKShhcmcgKworCQkgICAgb2Zmc2V0b2Yoc3RydWN0IHBtY3JhaWRfcGFzc3Rocm91Z2hfaW9jdGxfYnVmZmVyLCBpb2FzYSkpOworCisJCXBtY3JhaWRfaW5mbygiY29tbWFuZCBmYWlsZWQgd2l0aCAleFxuIiwKKwkJCSAgICAgbGUzMl90b19jcHUoY21kLT5pb2FfY2ItPmlvYXNhLmlvYXNjKSk7CisJCWlmIChjb3B5X3RvX3VzZXIoaW9hc2EsICZjbWQtPmlvYV9jYi0+aW9hc2EsCisJCQkJIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2FzYSkpKSB7CisJCQlwbWNyYWlkX2VycigiZmFpbGVkIHRvIGNvcHkgaW9hc2EgYnVmZmVyIHRvIHVzZXJcbiIpOworCQkJcmMgPSAtRUZBVUxUOworCQl9CisJfQorCS8qIElmIHRoZSBkYXRhIHRyYW5zZmVyIHdhcyBmcm9tIGRldmljZSwgY29weSB0aGUgZGF0YSBvbnRvIHVzZXIKKwkgKiBidWZmZXJzCisJICovCisJZWxzZSBpZiAoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSAmJiByZXF1ZXN0X3NpemUgPiAwKSB7CisJCXJjID0gcG1jcmFpZF9jb3B5X3NnbGlzdChjbWQtPnNnbGlzdCwKKwkJCQkJIHJlcXVlc3RfYnVmZmVyLAorCQkJCQkgcmVxdWVzdF9zaXplLAorCQkJCQkgZGlyZWN0aW9uKTsKKwkJaWYgKHJjKSB7CisJCQlwbWNyYWlkX2VycigiZmFpbGVkIHRvIGNvcHkgdXNlciBidWZmZXJcbiIpOworCQkJcmMgPSAtRUZBVUxUOworCQl9CisJfQorCitvdXRfZnJlZV9zZ2xpc3Q6CisJcG1jcmFpZF9yZWxlYXNlX3Bhc3N0aHJvdWdoX2lvYWRscyhjbWQsIHJlcXVlc3Rfc2l6ZSwgZGlyZWN0aW9uKTsKKwlwbWNyYWlkX3JldHVybl9jbWQoY21kKTsKKworb3V0X2ZyZWVfYnVmZmVyOgorCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmM7Cit9CisKKworCisKKy8qKgorICogcG1jcmFpZF9pb2N0bF9kcml2ZXIgLSBpb2N0bCBoYW5kbGVyIGZvciBjb21tYW5kcyBoYW5kbGVkIGJ5IGRyaXZlciBpdHNlbGYKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAY21kOiBpb2N0bCBjb21tYW5kIHBhc3NlZCBpbgorICogQGJ1ZmxlbjogbGVuZ3RoIG9mIHVzZXJfYnVmZmVyCisgKiBAdXNlcl9idWZmZXI6IHVzZXIgYnVmZmVyIHBvaW50ZXIKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG90aGVyd2lzZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlCisgKi8KK3N0YXRpYyBsb25nIHBtY3JhaWRfaW9jdGxfZHJpdmVyKAorCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsCisJdW5zaWduZWQgaW50IGNtZCwKKwl1bnNpZ25lZCBpbnQgYnVmbGVuLAorCXZvaWQgX191c2VyICp1c2VyX2J1ZmZlcgorKQoreworCWludCByYyA9IC1FTk9TWVM7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNlcl9idWZmZXIsIF9JT0NfU0laRShjbWQpKSkgeworCQlwbWNyYWlkX2VycigiaW9jdGxfZHJpdmVyOiBhY2Nlc3MgZmF1bHQgaW4gcmVxdWVzdCBidWZmZXIgXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBNQ1JBSURfSU9DVExfUkVTRVRfQURBUFRFUjoKKwkJcG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSk7CisJCXJjID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogcG1jcmFpZF9jaGVja19pb2N0bF9idWZmZXIgLSBjaGVjayBmb3IgcHJvcGVyIGFjY2VzcyB0byB1c2VyIGJ1ZmZlcgorICoKKyAqIEBjbWQ6IGlvY3RsIGNvbW1hbmQKKyAqIEBhcmc6IHVzZXIgYnVmZmVyCisgKiBAaGRyOiBwb2ludGVyIHRvIGtlcm5lbCBtZW1vcnkgZm9yIHBtY3JhaWRfaW9jdGxfaGVhZGVyCisgKgorICogUmV0dXJuIFZhbHVlCisgKgluZWdldGl2ZSBlcnJvciBjb2RlIGlmIHRoZXJlIGFyZSBhY2Nlc3MgaXNzdWVzLCBvdGhlcndpc2UgemVyby4KKyAqCVVwb24gc3VjY2VzcywgcmV0dXJucyBpb2N0bCBoZWFkZXIgY29waWVkIG91dCBvZiB1c2VyIGJ1ZmZlci4KKyAqLworCitzdGF0aWMgaW50IHBtY3JhaWRfY2hlY2tfaW9jdGxfYnVmZmVyKAorCWludCBjbWQsCisJdm9pZCBfX3VzZXIgKmFyZywKKwlzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIgKmhkcgorKQoreworCWludCByYyA9IDA7CisJaW50IGFjY2VzcyA9IFZFUklGWV9SRUFEOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGhkciwgYXJnLCBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9jdGxfaGVhZGVyKSkpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGNvcHkgaW9jdGwgaGVhZGVyIGZyb20gdXNlciBidWZmZXJcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwkvKiBjaGVjayBmb3IgdmFsaWQgZHJpdmVyIHNpZ25hdHVyZSAqLworCXJjID0gbWVtY21wKGhkci0+c2lnbmF0dXJlLAorCQkgICAgUE1DUkFJRF9JT0NUTF9TSUdOQVRVUkUsCisJCSAgICBzaXplb2YoaGRyLT5zaWduYXR1cmUpKTsKKwlpZiAocmMpIHsKKwkJcG1jcmFpZF9lcnIoInNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogYnVmZmVyIGxlbmd0aCBjYW4ndCBiZSBuZWdldGl2ZSAqLworCWlmIChoZHItPmJ1ZmZlcl9sZW5ndGggPCAwKSB7CisJCXBtY3JhaWRfZXJyKCJpb2N0bDogaW52YWxpZCBidWZmZXIgbGVuZ3RoIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGZvciBhcHByb3ByaWF0ZSBidWZmZXIgYWNjZXNzICovCisJaWYgKChfSU9DX0RJUihjbWQpICYgX0lPQ19SRUFEKSA9PSBfSU9DX1JFQUQpCisJCWFjY2VzcyA9IFZFUklGWV9XUklURTsKKworCXJjID0gYWNjZXNzX29rKGFjY2VzcywKKwkJICAgICAgIChhcmcgKyBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9jdGxfaGVhZGVyKSksCisJCSAgICAgICBoZHItPmJ1ZmZlcl9sZW5ndGgpOworCWlmICghcmMpIHsKKwkJcG1jcmFpZF9lcnIoImFjY2VzcyBmYWlsZWQgZm9yIHVzZXIgYnVmZmVyIG9mIHNpemUgJWRcbiIsCisJCQkgICAgIGhkci0+YnVmZmVyX2xlbmd0aCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBwbWNyYWlkX2lvY3RsIC0gY2hhciBub2RlIGlvY3RsIGVudHJ5IHBvaW50CisgKi8KK3N0YXRpYyBsb25nIHBtY3JhaWRfY2hyX2lvY3RsKAorCXN0cnVjdCBmaWxlICpmaWxlcCwKKwl1bnNpZ25lZCBpbnQgY21kLAorCXVuc2lnbmVkIGxvbmcgYXJnCispCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IE5VTEw7CisJc3RydWN0IHBtY3JhaWRfaW9jdGxfaGVhZGVyICpoZHIgPSBOVUxMOworCWludCByZXR2YWwgPSAtRU5PVFRZOworCisJaGRyID0ga21hbGxvYyhHRlBfS0VSTkVMLCBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9jdGxfaGVhZGVyKSk7CisKKwlpZiAoIWhkcikgeworCQlwbWNyYWlkX2VycigiZmFpbGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpb2N0bCBoZWFkZXJcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR2YWwgPSBwbWNyYWlkX2NoZWNrX2lvY3RsX2J1ZmZlcihjbWQsICh2b2lkICopYXJnLCBoZHIpOworCisJaWYgKHJldHZhbCkgeworCQlwbWNyYWlkX2luZm8oImNocl9pb2N0bDogaGVhZGVyIGNoZWNrIGZhaWxlZFxuIik7CisJCWtmcmVlKGhkcik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcGluc3RhbmNlID0gKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopZmlsZXAtPnByaXZhdGVfZGF0YTsKKworCWlmICghcGluc3RhbmNlKSB7CisJCXBtY3JhaWRfaW5mbygiYWRhcHRlciBpbnN0YW5jZSBpcyBub3QgZm91bmRcbiIpOworCQlrZnJlZShoZHIpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisKKwlzd2l0Y2ggKF9JT0NfVFlQRShjbWQpKSB7CisKKwljYXNlIFBNQ1JBSURfUEFTU1RIUk9VR0hfSU9DVEw6CisJCS8qIElmIGlvY3RsIGNvZGUgaXMgdG8gZG93bmxvYWQgbWljcm9jb2RlLCB3ZSBuZWVkIHRvIGJsb2NrCisJCSAqIG1pZC1sYXllciByZXF1ZXN0cy4KKwkJICovCisJCWlmIChjbWQgPT0gUE1DUkFJRF9JT0NUTF9ET1dOTE9BRF9NSUNST0NPREUpCisJCQlzY3NpX2Jsb2NrX3JlcXVlc3RzKHBpbnN0YW5jZS0+aG9zdCk7CisKKwkJcmV0dmFsID0gcG1jcmFpZF9pb2N0bF9wYXNzdGhyb3VnaChwaW5zdGFuY2UsCisJCQkJCQkgICBjbWQsCisJCQkJCQkgICBoZHItPmJ1ZmZlcl9sZW5ndGgsCisJCQkJCQkgICBhcmcpOworCisJCWlmIChjbWQgPT0gUE1DUkFJRF9JT0NUTF9ET1dOTE9BRF9NSUNST0NPREUpCisJCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKKwkJYnJlYWs7CisKKwljYXNlIFBNQ1JBSURfRFJJVkVSX0lPQ1RMOgorCQlhcmcgKz0gc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lvY3RsX2hlYWRlcik7CisJCXJldHZhbCA9IHBtY3JhaWRfaW9jdGxfZHJpdmVyKHBpbnN0YW5jZSwKKwkJCQkJICAgICAgY21kLAorCQkJCQkgICAgICBoZHItPmJ1ZmZlcl9sZW5ndGgsCisJCQkJCSAgICAgICh2b2lkIF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVOT1RUWTsKKwkJYnJlYWs7CisJfQorCisJa2ZyZWUoaGRyKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogRmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZSBmb3IgbWFuYWdlbWVudCBpbnRlcmZhY2UKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG1jcmFpZF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gcG1jcmFpZF9jaHJfb3BlbiwKKwkucmVsZWFzZSA9IHBtY3JhaWRfY2hyX3JlbGVhc2UsCisJLmZhc3luYyA9IHBtY3JhaWRfY2hyX2Zhc3luYywKKwkudW5sb2NrZWRfaW9jdGwgPSBwbWNyYWlkX2Nocl9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IHBtY3JhaWRfY2hyX2lvY3RsLAorI2VuZGlmCit9OworCisKKworCisvKioKKyAqIHBtY3JhaWRfc2hvd19sb2dfbGV2ZWwgLSBEaXNwbGF5IGFkYXB0ZXIncyBlcnJvciBsb2dnaW5nIGxldmVsCisgKiBAZGV2OiBjbGFzcyBkZXZpY2Ugc3RydWN0CisgKiBAYnVmOiBidWZmZXIKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgdG8gYnVmZmVyCisgKi8KK3N0YXRpYyBzc2l6ZV90IHBtY3JhaWRfc2hvd19sb2dfbGV2ZWwoCisJc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9CisJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNob3N0LT5ob3N0ZGF0YTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgcGluc3RhbmNlLT5jdXJyZW50X2xvZ19sZXZlbCk7Cit9CisKKy8qKgorICogcG1jcmFpZF9zdG9yZV9sb2dfbGV2ZWwgLSBDaGFuZ2UgdGhlIGFkYXB0ZXIncyBlcnJvciBsb2dnaW5nIGxldmVsCisgKiBAZGV2OiBjbGFzcyBkZXZpY2Ugc3RydWN0CisgKiBAYnVmOiBidWZmZXIKKyAqIEBjb3VudDogbm90IHVzZWQKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgdG8gYnVmZmVyCisgKi8KK3N0YXRpYyBzc2l6ZV90IHBtY3JhaWRfc3RvcmVfbG9nX2xldmVsKAorCXN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGNvdW50CispCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyogbG9nLWxldmVsIHNob3VsZCBiZSBmcm9tIDAgdG8gMiAqLworCWlmICh2YWwgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlwaW5zdGFuY2UgPSAoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilzaG9zdC0+aG9zdGRhdGE7CisJcGluc3RhbmNlLT5jdXJyZW50X2xvZ19sZXZlbCA9IHZhbDsKKworCXJldHVybiBzdHJsZW4oYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBtY3JhaWRfbG9nX2xldmVsX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCSAubmFtZSA9ICJsb2dfbGV2ZWwiLAorCQkgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKKwkJIH0sCisJLnNob3cgPSBwbWNyYWlkX3Nob3dfbG9nX2xldmVsLAorCS5zdG9yZSA9IHBtY3JhaWRfc3RvcmVfbG9nX2xldmVsLAorfTsKKworLyoqCisgKiBwbWNyYWlkX3Nob3dfZHJ2X3ZlcnNpb24gLSBEaXNwbGF5IGRyaXZlciB2ZXJzaW9uCisgKiBAZGV2OiBjbGFzcyBkZXZpY2Ugc3RydWN0CisgKiBAYnVmOiBidWZmZXIKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAgbnVtYmVyIG9mIGJ5dGVzIHByaW50ZWQgdG8gYnVmZmVyCisgKi8KK3N0YXRpYyBzc2l6ZV90IHBtY3JhaWRfc2hvd19kcnZfdmVyc2lvbigKKwlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY2hhciAqYnVmCispCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAidmVyc2lvbjogJXMsIGJ1aWxkIGRhdGU6ICVzXG4iLAorCQkJUE1DUkFJRF9EUklWRVJfVkVSU0lPTiwgUE1DUkFJRF9EUklWRVJfREFURSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbWNyYWlkX2RyaXZlcl92ZXJzaW9uX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCSAubmFtZSA9ICJkcnZfdmVyc2lvbiIsCisJCSAubW9kZSA9IFNfSVJVR08sCisJCSB9LAorCS5zaG93ID0gcG1jcmFpZF9zaG93X2Rydl92ZXJzaW9uLAorfTsKKworLyoqCisgKiBwbWNyYWlkX3Nob3dfaW9fYWRhcHRlcl9pZCAtIERpc3BsYXkgZHJpdmVyIGFzc2lnbmVkIGFkYXB0ZXIgaWQKKyAqIEBkZXY6IGNsYXNzIGRldmljZSBzdHJ1Y3QKKyAqIEBidWY6IGJ1ZmZlcgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqICBudW1iZXIgb2YgYnl0ZXMgcHJpbnRlZCB0byBidWZmZXIKKyAqLworc3RhdGljIHNzaXplX3QgcG1jcmFpZF9zaG93X2FkYXB0ZXJfaWQoCisJc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNoYXIgKmJ1ZgorKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0KKwkJKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICopc2hvc3QtPmhvc3RkYXRhOworCXUzMiBhZGFwdGVyX2lkID0gKHBpbnN0YW5jZS0+cGRldi0+YnVzLT5udW1iZXIgPDwgOCkgfAorCQlwaW5zdGFuY2UtPnBkZXYtPmRldmZuOworCXUzMiBhZW5fZ3JvdXAgPSBwbWNyYWlkX2V2ZW50X2ZhbWlseS5pZDsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJCSJhZGFwdGVyIGlkOiAlZFxubWlub3I6ICVkXG5hZW4gZ3JvdXA6ICVkXG4iLAorCQkJYWRhcHRlcl9pZCwgTUlOT1IocGluc3RhbmNlLT5jZGV2LmRldiksIGFlbl9ncm91cCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbWNyYWlkX2FkYXB0ZXJfaWRfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJIC5uYW1lID0gImFkYXB0ZXJfaWQiLAorCQkgLm1vZGUgPSBTX0lSVUdPIHwgU19JV1VTUiwKKwkJIH0sCisJLnNob3cgPSBwbWNyYWlkX3Nob3dfYWRhcHRlcl9pZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqcG1jcmFpZF9ob3N0X2F0dHJzW10gPSB7CisJJnBtY3JhaWRfbG9nX2xldmVsX2F0dHIsCisJJnBtY3JhaWRfZHJpdmVyX3ZlcnNpb25fYXR0ciwKKwkmcG1jcmFpZF9hZGFwdGVyX2lkX2F0dHIsCisJTlVMTCwKK307CisKKworLyogaG9zdCB0ZW1wbGF0ZSBzdHJ1Y3R1cmUgZm9yIHBtY3JhaWQgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwbWNyYWlkX2hvc3RfdGVtcGxhdGUgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gUE1DUkFJRF9EUklWRVJfTkFNRSwKKwkucXVldWVjb21tYW5kID0gcG1jcmFpZF9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIgPSBwbWNyYWlkX2VoX2Fib3J0X2hhbmRsZXIsCisJLmVoX2J1c19yZXNldF9oYW5kbGVyID0gcG1jcmFpZF9laF9idXNfcmVzZXRfaGFuZGxlciwKKwkuZWhfdGFyZ2V0X3Jlc2V0X2hhbmRsZXIgPSBwbWNyYWlkX2VoX3RhcmdldF9yZXNldF9oYW5kbGVyLAorCS5laF9kZXZpY2VfcmVzZXRfaGFuZGxlciA9IHBtY3JhaWRfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIsCisJLmVoX2hvc3RfcmVzZXRfaGFuZGxlciA9IHBtY3JhaWRfZWhfaG9zdF9yZXNldF9oYW5kbGVyLAorCisJLnNsYXZlX2FsbG9jID0gcG1jcmFpZF9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlID0gcG1jcmFpZF9zbGF2ZV9jb25maWd1cmUsCisJLnNsYXZlX2Rlc3Ryb3kgPSBwbWNyYWlkX3NsYXZlX2Rlc3Ryb3ksCisJLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IHBtY3JhaWRfY2hhbmdlX3F1ZXVlX2RlcHRoLAorCS5jaGFuZ2VfcXVldWVfdHlwZSAgPSBwbWNyYWlkX2NoYW5nZV9xdWV1ZV90eXBlLAorCS5jYW5fcXVldWUgPSBQTUNSQUlEX01BWF9JT19DTUQsCisJLnRoaXNfaWQgPSAtMSwKKwkuc2dfdGFibGVzaXplID0gUE1DUkFJRF9NQVhfSU9BRExTLAorCS5tYXhfc2VjdG9ycyA9IFBNQ1JBSURfSU9BX01BWF9TRUNUT1JTLAorCS5jbWRfcGVyX2x1biA9IFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOLAorCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5zaG9zdF9hdHRycyA9IHBtY3JhaWRfaG9zdF9hdHRycywKKwkucHJvY19uYW1lID0gUE1DUkFJRF9EUklWRVJfTkFNRQorfTsKKworLyoqCisgKiBwbWNyYWlkX2lzcl9jb21tb24gLSBDb21tb24gaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZQorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZQorICogQGludHJzOiBhY3RpdmUgaW50ZXJydXB0cyAoY29udGVudHMgb2YgaW9hX2hvc3RfaW50ZXJydXB0IHJlZ2lzdGVyKQorICogQGhycnFfaWQ6IEhvc3QgUlJRIGluZGV4CisgKgorICogUmV0dXJuIFZhbHVlCisgKglub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfaXNyX2NvbW1vbigKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCXUzMiBpbnRycywKKwlpbnQgaHJycV9pZAorKQoreworCXUzMiBpbnRyc19jbGVhciA9CisJCShpbnRycyAmIElOVFJTX0NSSVRJQ0FMX09QX0lOX1BST0dSRVNTKSA/IGludHJzCisJCQkJCQkJOiBJTlRSU19IUlJRX1ZBTElEOworCWlvd3JpdGUzMihpbnRyc19jbGVhciwKKwkJICBwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKKwlpbnRycyA9IGlvcmVhZDMyKHBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X3JlZyk7CisKKwkvKiBocnJxIHZhbGlkIGJpdCB3YXMgc2V0LCBzY2hlZHVsZSB0YXNrbGV0IHRvIGhhbmRsZSB0aGUgcmVzcG9uc2UgKi8KKwlpZiAoaW50cnNfY2xlYXIgPT0gSU5UUlNfSFJSUV9WQUxJRCkKKwkJdGFza2xldF9zY2hlZHVsZSgmKHBpbnN0YW5jZS0+aXNyX3Rhc2tsZXRbaHJycV9pZF0pKTsKK30KKworLyoqCisgKiBwbWNyYWlkX2lzciAgLSBpbXBsZW1lbnRzIGludGVycnVwdCBoYW5kbGluZyByb3V0aW5lCisgKgorICogQGlycTogaW50ZXJydXB0IHZlY3RvciBudW1iZXIKKyAqIEBkZXZfaWQ6IHBvaW50ZXIgaHJycV92ZWN0b3IKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSBJUlFfSEFORExFRCBpZiBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBvciBJUlFfTk9ORSBpZiBpZ25vcmVkCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwbWNyYWlkX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHBtY3JhaWRfaXNyX3BhcmFtICpocnJxX3ZlY3RvcjsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1MzIgaW50cnM7CisKKwkvKiBJbiBjYXNlIG9mIGxlZ2FjeSBpbnRlcnJ1cHQgbW9kZSB3aGVyZSBpbnRlcnJ1cHRzIGFyZSBzaGFyZWQgYWNyb3NzCisJICogaXNycywgaXQgbWF5IGJlIHBvc3NpYmxlIHRoYXQgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGlzIG5vdCBmcm9tIElPQQorCSAqLworCWlmICghZGV2X2lkKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzKCk6IE5VTEwgaG9zdCBwb2ludGVyXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlocnJxX3ZlY3RvciA9IChzdHJ1Y3QgcG1jcmFpZF9pc3JfcGFyYW0gKilkZXZfaWQ7CisJcGluc3RhbmNlID0gaHJycV92ZWN0b3ItPmRydl9pbnN0OworCisJLyogQWNxdWlyZSB0aGUgbG9jayAoY3VycmVudGx5IGhvc3RfbG9jaykgd2hpbGUgcHJvY2Vzc2luZyBpbnRlcnJ1cHRzLgorCSAqIFRoaXMgaW50ZXJ2YWwgaXMgc21hbGwgYXMgbW9zdCBvZiB0aGUgcmVzcG9uc2UgcHJvY2Vzc2luZyBpcyBkb25lIGJ5CisJICogdGFza2xldCB3aXRob3V0IHRoZSBsb2NrLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKKwlpbnRycyA9IHBtY3JhaWRfcmVhZF9pbnRlcnJ1cHRzKHBpbnN0YW5jZSk7CisKKwlpZiAodW5saWtlbHkoKGludHJzICYgUE1DUkFJRF9QQ0lfSU5URVJSVVBUUykgPT0gMCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBBbnkgZXJyb3IgaW50ZXJydXB0cyBpbmNsdWRpbmcgdW5pdF9jaGVjaywgaW5pdGlhdGUgSU9BIHJlc2V0LgorCSAqIEluIGNhc2Ugb2YgdW5pdCBjaGVjayBpbmRpY2F0ZSB0byByZXNldF9zZXF1ZW5jZSB0aGF0IElPQSB1bml0CisJICogY2hlY2tlZCBhbmQgcHJlcGFyZSBmb3IgYSBkdW1wIGR1cmluZyByZXNldCBzZXF1ZW5jZQorCSAqLworCWlmIChpbnRycyAmIFBNQ1JBSURfRVJST1JfSU5URVJSVVBUUykgeworCisJCWlmIChpbnRycyAmIElOVFJTX0lPQV9VTklUX0NIRUNLKQorCQkJcGluc3RhbmNlLT5pb2FfdW5pdF9jaGVjayA9IDE7CisKKwkJaW93cml0ZTMyKGludHJzLAorCQkJICBwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKKwkJcG1jcmFpZF9lcnIoIklTUjogZXJyb3IgaW50ZXJydXB0czogJXggaW5pdGlhdGluZyByZXNldFxuIiwKKwkJCSAgICBpbnRycyk7CisJCWludHJzID0gaW9yZWFkMzIocGluc3RhbmNlLT5pbnRfcmVncy5pb2FfaG9zdF9pbnRlcnJ1cHRfcmVnKTsKKwkJcG1jcmFpZF9pbml0aWF0ZV9yZXNldChwaW5zdGFuY2UpOworCX0gZWxzZSB7CisJCXBtY3JhaWRfaXNyX2NvbW1vbihwaW5zdGFuY2UsIGludHJzLCBocnJxX3ZlY3Rvci0+aHJycV9pZCk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX3dvcmtlcl9mdW5jdGlvbiAtICB3b3JrZXIgdGhyZWFkIGZ1bmN0aW9uCisgKgorICogQHdvcmtwOiBwb2ludGVyIHRvIHN0cnVjdCB3b3JrIHF1ZXVlCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgTm9uZQorICovCisKK3N0YXRpYyB2b2lkIHBtY3JhaWRfd29ya2VyX2Z1bmN0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya3ApCit7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzOworCXN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5ICp0ZW1wOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBob3N0X2xvY2tfZmxhZ3M7CisJdTggYnVzLCB0YXJnZXQsIGx1bjsKKworCXBpbnN0YW5jZSA9IGNvbnRhaW5lcl9vZih3b3JrcCwgc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UsIHdvcmtlcl9xKTsKKwkvKiBhZGQgcmVzb3VyY2VzIG9ubHkgYWZ0ZXIgaG9zdCBpcyBhZGRlZCBpbnRvIHN5c3RlbSAqLworCWlmICghYXRvbWljX3JlYWQoJnBpbnN0YW5jZS0+ZXhwb3NlX3Jlc291cmNlcykpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssIGxvY2tfZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIHRlbXAsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EsIHF1ZXVlKSB7CisKKwkJaWYgKHJlcy0+Y2hhbmdlX2RldGVjdGVkID09IFJFU19DSEFOR0VfREVMICYmIHJlcy0+c2NzaV9kZXYpIHsKKwkJCXNkZXYgPSByZXMtPnNjc2lfZGV2OworCisJCQkvKiBob3N0X2xvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBjYWxsaW5nCisJCQkgKiBzY3NpX2RldmljZV9nZXQKKwkJCSAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCWlmICghc2NzaV9kZXZpY2VfZ2V0KHNkZXYpKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJCXBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkJaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCQlwbWNyYWlkX2luZm8oImRlbGV0aW5nICV4IGZyb20gbWlkbGF5ZXJcbiIsCisJCQkJCSAgICAgcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcyk7CisJCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsCisJCQkJCQkmcGluc3RhbmNlLT5mcmVlX3Jlc19xKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKAorCQkJCQkmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLAorCQkJCQlsb2NrX2ZsYWdzKTsKKwkJCQlzY3NpX3JlbW92ZV9kZXZpY2Uoc2Rldik7CisJCQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnJlc291cmNlX2xvY2ssCisJCQkJCQkgICBsb2NrX2ZsYWdzKTsKKwkJCQlyZXMtPmNoYW5nZV9kZXRlY3RlZCA9IDA7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCQlwaW5zdGFuY2UtPmhvc3QtPmhvc3RfbG9jaywKKwkJCQkJCWhvc3RfbG9ja19mbGFncyk7CisJCQl9CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJnBpbnN0YW5jZS0+dXNlZF9yZXNfcSwgcXVldWUpIHsKKworCQlpZiAocmVzLT5jaGFuZ2VfZGV0ZWN0ZWQgPT0gUkVTX0NIQU5HRV9BREQpIHsKKworCQkJaWYgKCFwbWNyYWlkX2V4cG9zZV9yZXNvdXJjZSgmcmVzLT5jZmdfZW50cnkpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoUkVTX0lTX1ZTRVQocmVzLT5jZmdfZW50cnkpKSB7CisJCQkJYnVzID0gUE1DUkFJRF9WU0VUX0JVU19JRDsKKwkJCQl0YXJnZXQgPSByZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxOworCQkJCWx1biA9IFBNQ1JBSURfVlNFVF9MVU5fSUQ7CisJCQl9IGVsc2UgeworCQkJCWJ1cyA9IFBNQ1JBSURfUEhZU19CVVNfSUQ7CisJCQkJdGFyZ2V0ID0KKwkJCQkgICAgIFJFU19UQVJHRVQoCisJCQkJCXJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MpOworCQkJCWx1biA9IFJFU19MVU4ocmVzLT5jZmdfZW50cnkucmVzb3VyY2VfYWRkcmVzcyk7CisJCQl9CisKKwkJCXJlcy0+Y2hhbmdlX2RldGVjdGVkID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywKKwkJCQkJCWxvY2tfZmxhZ3MpOworCQkJc2NzaV9hZGRfZGV2aWNlKHBpbnN0YW5jZS0+aG9zdCwgYnVzLCB0YXJnZXQsIGx1bik7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLAorCQkJCQkgICBsb2NrX2ZsYWdzKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7Cit9CisKKy8qKgorICogcG1jcmFpZF90YXNrbGV0X2Z1bmN0aW9uIC0gVGFza2xldCBmdW5jdGlvbgorICoKKyAqIEBpbnN0YW5jZTogcG9pbnRlciB0byBtc2l4IHBhcmFtIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZQorICoJTm9uZQorICovCit2b2lkIHBtY3JhaWRfdGFza2xldF9mdW5jdGlvbih1bnNpZ25lZCBsb25nIGluc3RhbmNlKQoreworCXN0cnVjdCBwbWNyYWlkX2lzcl9wYXJhbSAqaHJycV92ZWN0b3I7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZTsKKwl1bnNpZ25lZCBsb25nIGhycnFfbG9ja19mbGFnczsKKwl1bnNpZ25lZCBsb25nIHBlbmRpbmdfbG9ja19mbGFnczsKKwl1bnNpZ25lZCBsb25nIGhvc3RfbG9ja19mbGFnczsKKwlzcGlubG9ja190ICpsb2NrcDsgLyogaHJycSBidWZmZXIgbG9jayAqLworCWludCBpZDsKKwl1MzIgaW50cnM7CisJX19sZTMyIHJlc3A7CisKKwlocnJxX3ZlY3RvciA9IChzdHJ1Y3QgcG1jcmFpZF9pc3JfcGFyYW0gKilpbnN0YW5jZTsKKwlwaW5zdGFuY2UgPSBocnJxX3ZlY3Rvci0+ZHJ2X2luc3Q7CisJaWQgPSBocnJxX3ZlY3Rvci0+aHJycV9pZDsKKwlsb2NrcCA9ICYocGluc3RhbmNlLT5ocnJxX2xvY2tbaWRdKTsKKwlpbnRycyA9IHBtY3JhaWRfcmVhZF9pbnRlcnJ1cHRzKHBpbnN0YW5jZSk7CisKKwkvKiBJZiBpbnRlcnJ1cHRzIHdhcyBhcyBwYXJ0IG9mIHRoZSBpb2EgaW5pdGlhbGl6YXRpb24sIGNsZWFyIGFuZCBtYXNrCisJICogaXQuIERlbGV0ZSB0aGUgdGltZXIgYW5kIHdha2V1cCB0aGUgcmVzZXQgZW5naW5lIHRvIHByb2NlZWQgd2l0aAorCSAqIHJlc2V0IHNlcXVlbmNlCisJICovCisJaWYgKGludHJzICYgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCkgeworCQlpb3dyaXRlMzIoSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCwKKwkJCXBpbnN0YW5jZS0+aW50X3JlZ3MuaW9hX2hvc3RfaW50ZXJydXB0X21hc2tfcmVnKTsKKwkJaW93cml0ZTMyKElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwsCisJCQlwaW5zdGFuY2UtPmludF9yZWdzLmlvYV9ob3N0X2ludGVycnVwdF9jbHJfcmVnKTsKKworCQlpZiAocGluc3RhbmNlLT5yZXNldF9jbWQgIT0gTlVMTCkgeworCQkJZGVsX3RpbWVyKCZwaW5zdGFuY2UtPnJlc2V0X2NtZC0+dGltZXIpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCXBpbnN0YW5jZS0+cmVzZXRfY21kLT5jbWRfZG9uZShwaW5zdGFuY2UtPnJlc2V0X2NtZCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyogbG9vcCB0aHJvdWdoIGVhY2ggb2YgdGhlIGNvbW1hbmRzIHJlc3BvbmRlZCBieSBJT0EuIEVhY2ggSFJSUSBidWYgaXMKKwkgKiBwcm90ZWN0ZWQgYnkgaXRzIG93biBsb2NrLiBUcmF2ZXJzYWxzIG11c3QgYmUgZG9uZSB3aXRoaW4gdGhpcyBsb2NrCisJICogYXMgdGhlcmUgbWF5IGJlIG11bHRpcGxlIHRhc2tsZXRzIHJ1bm5pbmcgb24gbXVsdGlwbGUgQ1BVcy4gTm90ZQorCSAqIHRoYXQgdGhlIGxvY2sgaXMgaGVsZCBqdXN0IGZvciBwaWNraW5nIHVwIHRoZSByZXNwb25zZSBoYW5kbGUgYW5kCisJICogbWFuaXB1bGF0aW5nIGhycnFfY3Vyci90b2dnbGVfYml0IHZhbHVlcy4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZShsb2NrcCwgaHJycV9sb2NrX2ZsYWdzKTsKKworCXJlc3AgPSBsZTMyX3RvX2NwdSgqKHBpbnN0YW5jZS0+aHJycV9jdXJyW2lkXSkpOworCisJd2hpbGUgKChyZXNwICYgSFJSUV9UT0dHTEVfQklUKSA9PQorCQlwaW5zdGFuY2UtPmhvc3RfdG9nZ2xlX2JpdFtpZF0pIHsKKworCQlpbnQgY21kX2luZGV4ID0gcmVzcCA+PiAyOworCQlzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCA9IE5VTEw7CisKKwkJaWYgKGNtZF9pbmRleCA8IFBNQ1JBSURfTUFYX0NNRCkgeworCQkJY21kID0gcGluc3RhbmNlLT5jbWRfbGlzdFtjbWRfaW5kZXhdOworCQl9IGVsc2UgeworCQkJLyogSW4gY2FzZSBvZiBpbnZhbGlkIHJlc3BvbnNlIGhhbmRsZSwgaW5pdGlhdGUgSU9BCisJCQkgKiByZXNldCBzZXF1ZW5jZS4KKwkJCSAqLworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrcCwgaHJycV9sb2NrX2ZsYWdzKTsKKworCQkJcG1jcmFpZF9lcnIoIkludmFsaWQgcmVzcG9uc2UgJWQgaW5pdGlhdGluZyByZXNldFxuIiwKKwkJCQkgICAgY21kX2luZGV4KTsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJCXBtY3JhaWRfaW5pdGlhdGVfcmVzZXQocGluc3RhbmNlKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssCisJCQkJCSAgICAgICBob3N0X2xvY2tfZmxhZ3MpOworCisJCQlzcGluX2xvY2tfaXJxc2F2ZShsb2NrcCwgaHJycV9sb2NrX2ZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHBpbnN0YW5jZS0+aHJycV9jdXJyW2lkXSA8IHBpbnN0YW5jZS0+aHJycV9lbmRbaWRdKSB7CisJCQlwaW5zdGFuY2UtPmhycnFfY3VycltpZF0rKzsKKwkJfSBlbHNlIHsKKwkJCXBpbnN0YW5jZS0+aHJycV9jdXJyW2lkXSA9IHBpbnN0YW5jZS0+aHJycV9zdGFydFtpZF07CisJCQlwaW5zdGFuY2UtPmhvc3RfdG9nZ2xlX2JpdFtpZF0gXj0gMXU7CisJCX0KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2twLCBocnJxX2xvY2tfZmxhZ3MpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrLAorCQkJCSAgIHBlbmRpbmdfbG9ja19mbGFncyk7CisJCWxpc3RfZGVsKCZjbWQtPmZyZWVfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+cGVuZGluZ19wb29sX2xvY2ssCisJCQkJCXBlbmRpbmdfbG9ja19mbGFncyk7CisJCWRlbF90aW1lcigmY21kLT50aW1lcik7CisJCWF0b21pY19kZWMoJnBpbnN0YW5jZS0+b3V0c3RhbmRpbmdfY21kcyk7CisKKwkJaWYgKGNtZC0+Y21kX2RvbmUgPT0gcG1jcmFpZF9pb2FfcmVzZXQpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgIGhvc3RfbG9ja19mbGFncyk7CisJCQljbWQtPmNtZF9kb25lKGNtZCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHBpbnN0YW5jZS0+aG9zdC0+aG9zdF9sb2NrLAorCQkJCQkgICAgICAgaG9zdF9sb2NrX2ZsYWdzKTsKKwkJfSBlbHNlIGlmIChjbWQtPmNtZF9kb25lICE9IE5VTEwpIHsKKwkJCWNtZC0+Y21kX2RvbmUoY21kKTsKKwkJfQorCQkvKiBsb29wIG92ZXIgdW50aWwgd2UgYXJlIGRvbmUgd2l0aCBhbGwgcmVzcG9uc2VzICovCisJCXNwaW5fbG9ja19pcnFzYXZlKGxvY2twLCBocnJxX2xvY2tfZmxhZ3MpOworCQlyZXNwID0gbGUzMl90b19jcHUoKihwaW5zdGFuY2UtPmhycnFfY3VycltpZF0pKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGxvY2twLCBocnJxX2xvY2tfZmxhZ3MpOworfQorCisvKioKKyAqIHBtY3JhaWRfdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlciAtIGRlLXJlZ2lzdGVyIGludGVycnVwdHMgaGFuZGxlcnMKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIHJvdXRpbmUgdW4tcmVnaXN0ZXJzIHJlZ2lzdGVyZWQgaW50ZXJydXB0IGhhbmRsZXIgYW5kCisgKiBhbHNvIGZyZWVzIGlycXMvdmVjdG9ycy4KKyAqCisgKiBSZXR1biBWYWx1ZQorICoJTm9uZQorICovCitzdGF0aWMKK3ZvaWQgcG1jcmFpZF91bnJlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJZnJlZV9pcnEocGluc3RhbmNlLT5wZGV2LT5pcnEsICYocGluc3RhbmNlLT5ocnJxX3ZlY3RvclswXSkpOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIgLSByZWdpc3RlcnMgaW50ZXJydXB0IGhhbmRsZXIKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gcGVyLWFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkwIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50CitwbWNyYWlkX3JlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwaW5zdGFuY2UtPnBkZXY7CisKKwlwaW5zdGFuY2UtPmhycnFfdmVjdG9yWzBdLmhycnFfaWQgPSAwOworCXBpbnN0YW5jZS0+aHJycV92ZWN0b3JbMF0uZHJ2X2luc3QgPSBwaW5zdGFuY2U7CisJcGluc3RhbmNlLT5ocnJxX3ZlY3RvclswXS52ZWN0b3IgPSAwOworCXBpbnN0YW5jZS0+bnVtX2hycnEgPSAxOworCXJldHVybiByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHBtY3JhaWRfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCSAgIFBNQ1JBSURfRFJJVkVSX05BTUUsICZwaW5zdGFuY2UtPmhycnFfdmVjdG9yWzBdKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2VfY21kX2Jsb2NrcyAtIHJlbGVhc2UgYnV1ZmVycyBhbGxvY2F0ZWQgZm9yIGNvbW1hbmQgYmxvY2tzCisgKiBAcGluc3RhbmNlOiBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUgcG9pbnRlcgorICogQG1heF9pbmRleDogbnVtYmVyIG9mIGJ1ZmZlciBibG9ja3MgdG8gcmVsZWFzZQorICoKKyAqIFJldHVybiBWYWx1ZQorICogIE5vbmUKKyAqLworc3RhdGljIHZvaWQKK3BtY3JhaWRfcmVsZWFzZV9jbWRfYmxvY2tzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsIGludCBtYXhfaW5kZXgpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG1heF9pbmRleDsgaSsrKSB7CisJCWttZW1fY2FjaGVfZnJlZShwaW5zdGFuY2UtPmNtZF9jYWNoZXAsIHBpbnN0YW5jZS0+Y21kX2xpc3RbaV0pOworCQlwaW5zdGFuY2UtPmNtZF9saXN0W2ldID0gTlVMTDsKKwl9CisJa21lbV9jYWNoZV9kZXN0cm95KHBpbnN0YW5jZS0+Y21kX2NhY2hlcCk7CisJcGluc3RhbmNlLT5jbWRfY2FjaGVwID0gTlVMTDsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2VfY29udHJvbF9ibG9ja3MgLSByZWxlYXNlcyBidWZmZXJzIGFsbG9jZWQgZm9yIGNvbnRyb2wgYmxvY2tzCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIHBlciBhZGFwdGVyIGluc3RhbmNlIHN0cnVjdHVyZQorICogQG1heF9pbmRleDogbnVtYmVyIG9mIGJ1ZmZlcnMgKGZyb20gMCBvbndhcmRzKSB0byByZWxlYXNlCisgKgorICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIGNvbW1hbmQgYmxvY2tzIGZvciB3aGljaCBjb250cm9sIGJsb2NrcyBhcmUKKyAqIGxpbmtlZCBhcmUgbm90IHJlbGVhc2VkLgorICoKKyAqIFJldHVybiBWYWx1ZQorICoJIE5vbmUKKyAqLworc3RhdGljIHZvaWQKK3BtY3JhaWRfcmVsZWFzZV9jb250cm9sX2Jsb2NrcygKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlLAorCWludCBtYXhfaW5kZXgKKykKK3sKKwlpbnQgaTsKKworCWlmIChwaW5zdGFuY2UtPmNvbnRyb2xfcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2luZGV4OyBpKyspIHsKKwkJcGNpX3Bvb2xfZnJlZShwaW5zdGFuY2UtPmNvbnRyb2xfcG9vbCwKKwkJCSAgICAgIHBpbnN0YW5jZS0+Y21kX2xpc3RbaV0tPmlvYV9jYiwKKwkJCSAgICAgIHBpbnN0YW5jZS0+Y21kX2xpc3RbaV0tPmlvYV9jYl9idXNfYWRkcik7CisJCXBpbnN0YW5jZS0+Y21kX2xpc3RbaV0tPmlvYV9jYiA9IE5VTEw7CisJCXBpbnN0YW5jZS0+Y21kX2xpc3RbaV0tPmlvYV9jYl9idXNfYWRkciA9IDA7CisJfQorCXBjaV9wb29sX2Rlc3Ryb3kocGluc3RhbmNlLT5jb250cm9sX3Bvb2wpOworCXBpbnN0YW5jZS0+Y29udHJvbF9wb29sID0gTlVMTDsKK30KKworLyoqCisgKiBwbWNyYWlkX2FsbG9jYXRlX2NtZF9ibG9ja3MgLSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNtZCBibG9jayBzdHJ1Y3R1cmVzCisgKiBAcGluc3RhbmNlIC0gcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBBbGxvY2F0ZXMgbWVtb3J5IGZvciBjb21tYW5kIGJsb2NrcyB1c2luZyBrZXJuZWwgc2xhYiBhbGxvY2F0b3IuCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkwIGluIGNhc2Ugb2Ygc3VjY2VzczsgLUVOT01FTSBpbiBjYXNlIG9mIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK3BtY3JhaWRfYWxsb2NhdGVfY21kX2Jsb2NrcyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWludCBpOworCisJc3ByaW50ZihwaW5zdGFuY2UtPmNtZF9wb29sX25hbWUsICJwbWNyYWlkX2NtZF9wb29sXyVkIiwKKwkJcGluc3RhbmNlLT5ob3N0LT51bmlxdWVfaWQpOworCisKKwlwaW5zdGFuY2UtPmNtZF9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgKKwkJCQkJcGluc3RhbmNlLT5jbWRfcG9vbF9uYW1lLAorCQkJCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfY21kKSwgMCwKKwkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlpZiAoIXBpbnN0YW5jZS0+Y21kX2NhY2hlcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgUE1DUkFJRF9NQVhfQ01EOyBpKyspIHsKKwkJcGluc3RhbmNlLT5jbWRfbGlzdFtpXSA9CisJCQlrbWVtX2NhY2hlX2FsbG9jKHBpbnN0YW5jZS0+Y21kX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGluc3RhbmNlLT5jbWRfbGlzdFtpXSkgeworCQkJcG1jcmFpZF9yZWxlYXNlX2NtZF9ibG9ja3MocGluc3RhbmNlLCBpKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfYWxsb2NhdGVfY29udHJvbF9ibG9ja3MgLSBhbGxvY2F0ZXMgbWVtb3J5IGNvbnRyb2wgYmxvY2tzCisgKiBAcGluc3RhbmNlIDogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBQQ0kgbWVtb3J5IGZvciBETUFhYmxlIGJ1ZmZlcnMgbGlrZSBJT0FSQ0IsIElPQURMcworICogYW5kIElPQVNBcy4gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgY29tbWFuZCBibG9ja3MgYXJlIGFscmVhZHkgYWxsb2NhdGVkLgorICoKKyAqIFJldHVybiBWYWx1ZQorICogIDAgaW4gY2FzZSBpdCBjYW4gYWxsb2NhdGUgYWxsIGNvbnRyb2wgYmxvY2tzLCBvdGhlcndpc2UgLUVOT01FTQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcG1jcmFpZF9hbGxvY2F0ZV9jb250cm9sX2Jsb2NrcyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWludCBpOworCisJc3ByaW50ZihwaW5zdGFuY2UtPmN0bF9wb29sX25hbWUsICJwbWNyYWlkX2NvbnRyb2xfcG9vbF8lZCIsCisJCXBpbnN0YW5jZS0+aG9zdC0+dW5pcXVlX2lkKTsKKworCXBpbnN0YW5jZS0+Y29udHJvbF9wb29sID0KKwkJcGNpX3Bvb2xfY3JlYXRlKHBpbnN0YW5jZS0+Y3RsX3Bvb2xfbmFtZSwKKwkJCQlwaW5zdGFuY2UtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbnRyb2xfYmxvY2spLAorCQkJCVBNQ1JBSURfSU9BUkNCX0FMSUdOTUVOVCwgMCk7CisKKwlpZiAoIXBpbnN0YW5jZS0+Y29udHJvbF9wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBQTUNSQUlEX01BWF9DTUQ7IGkrKykgeworCQlwaW5zdGFuY2UtPmNtZF9saXN0W2ldLT5pb2FfY2IgPQorCQkJcGNpX3Bvb2xfYWxsb2MoCisJCQkJcGluc3RhbmNlLT5jb250cm9sX3Bvb2wsCisJCQkJR0ZQX0tFUk5FTCwKKwkJCQkmKHBpbnN0YW5jZS0+Y21kX2xpc3RbaV0tPmlvYV9jYl9idXNfYWRkcikpOworCisJCWlmICghcGluc3RhbmNlLT5jbWRfbGlzdFtpXS0+aW9hX2NiKSB7CisJCQlwbWNyYWlkX3JlbGVhc2VfY29udHJvbF9ibG9ja3MocGluc3RhbmNlLCBpKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1lbXNldChwaW5zdGFuY2UtPmNtZF9saXN0W2ldLT5pb2FfY2IsIDAsCisJCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfY29udHJvbF9ibG9jaykpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2VfaG9zdF9ycnFzIC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBocnJxIGJ1ZmZlcihzKQorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBtYXhpbmRleDogc2l6ZSBvZiBocnJxIGJ1ZmZlciBwb2ludGVyIGFycmF5CisgKgorICogUmV0dXJuIFZhbHVlCisgKglOb25lCisgKi8KK3N0YXRpYyB2b2lkCitwbWNyYWlkX3JlbGVhc2VfaG9zdF9ycnFzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UsIGludCBtYXhpbmRleCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4aW5kZXg7IGkrKykgeworCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGluc3RhbmNlLT5wZGV2LAorCQkJCSAgICBIUlJRX0VOVFJZX1NJWkUgKiBQTUNSQUlEX01BWF9DTUQsCisJCQkJICAgIHBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSwKKwkJCQkgICAgcGluc3RhbmNlLT5ocnJxX3N0YXJ0X2J1c19hZGRyW2ldKTsKKworCQkvKiByZXNldCBwb2ludGVycyBhbmQgdG9nZ2xlIGJpdCB0byB6ZXJvcyAqLworCQlwaW5zdGFuY2UtPmhycnFfc3RhcnRbaV0gPSBOVUxMOworCQlwaW5zdGFuY2UtPmhycnFfc3RhcnRfYnVzX2FkZHJbaV0gPSAwOworCQlwaW5zdGFuY2UtPmhvc3RfdG9nZ2xlX2JpdFtpXSA9IDA7CisJfQorfQorCisvKioKKyAqIHBtY3JhaWRfYWxsb2NhdGVfaG9zdF9ycnFzIC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaG9zdCBSUlEgYnVmZmVycworICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCTAgaHJycSBidWZmZXJzIGFyZSBhbGxvY2F0ZWQsIC1FTk9NRU0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcG1jcmFpZF9hbGxvY2F0ZV9ob3N0X3JycXMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwlpbnQgYnVmX2NvdW50ID0gUE1DUkFJRF9NQVhfQ01EIC8gcGluc3RhbmNlLT5udW1faHJycTsKKworCWZvciAoaSA9IDA7IGkgPCBwaW5zdGFuY2UtPm51bV9ocnJxOyBpKyspIHsKKwkJaW50IGJ1ZmZlcl9zaXplID0gSFJSUV9FTlRSWV9TSVpFICogYnVmX2NvdW50OworCisJCXBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudCgKKwkJCQkJcGluc3RhbmNlLT5wZGV2LAorCQkJCQlidWZmZXJfc2l6ZSwKKwkJCQkJJihwaW5zdGFuY2UtPmhycnFfc3RhcnRfYnVzX2FkZHJbaV0pKTsKKworCQlpZiAocGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldID09IDApIHsKKwkJCXBtY3JhaWRfZXJyKCJjb3VsZCBub3QgYWxsb2NhdGUgaG9zdCBycnE6ICVkXG4iLCBpKTsKKwkJCXBtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMocGluc3RhbmNlLCBpKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJbWVtc2V0KHBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSwgMCwgYnVmZmVyX3NpemUpOworCQlwaW5zdGFuY2UtPmhycnFfY3VycltpXSA9IHBpbnN0YW5jZS0+aHJycV9zdGFydFtpXTsKKwkJcGluc3RhbmNlLT5ocnJxX2VuZFtpXSA9CisJCQlwaW5zdGFuY2UtPmhycnFfc3RhcnRbaV0gKyBidWZfY291bnQgLSAxOworCQlwaW5zdGFuY2UtPmhvc3RfdG9nZ2xlX2JpdFtpXSA9IDE7CisJCXNwaW5fbG9ja19pbml0KCZwaW5zdGFuY2UtPmhycnFfbG9ja1tpXSk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9oY2FtcyAtIHJlbGVhc2UgSENBTSBidWZmZXJzCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVsZWFzZV9oY2FtcyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWlmIChwaW5zdGFuY2UtPmNjbi5tc2cgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBpbnN0YW5jZS0+cGRldiwKKwkJCQkgICAgUE1DUkFJRF9BRU5fSERSX1NJWkUgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9jY24pLAorCQkJCSAgICBwaW5zdGFuY2UtPmNjbi5tc2csCisJCQkJICAgIHBpbnN0YW5jZS0+Y2NuLmJhZGRyKTsKKworCQlwaW5zdGFuY2UtPmNjbi5tc2cgPSBOVUxMOworCQlwaW5zdGFuY2UtPmNjbi5oY2FtID0gTlVMTDsKKwkJcGluc3RhbmNlLT5jY24uYmFkZHIgPSAwOworCX0KKworCWlmIChwaW5zdGFuY2UtPmxkbi5tc2cgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBpbnN0YW5jZS0+cGRldiwKKwkJCQkgICAgUE1DUkFJRF9BRU5fSERSX1NJWkUgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4pLAorCQkJCSAgICBwaW5zdGFuY2UtPmxkbi5tc2csCisJCQkJICAgIHBpbnN0YW5jZS0+bGRuLmJhZGRyKTsKKworCQlwaW5zdGFuY2UtPmxkbi5tc2cgPSBOVUxMOworCQlwaW5zdGFuY2UtPmxkbi5oY2FtID0gTlVMTDsKKwkJcGluc3RhbmNlLT5sZG4uYmFkZHIgPSAwOworCX0KK30KKworLyoqCisgKiBwbWNyYWlkX2FsbG9jYXRlX2hjYW1zIC0gYWxsb2NhdGVzIEhDQU0gYnVmZmVycworICogQHBpbnN0YW5jZSA6IHBvaW50ZXIgdG8gcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlOgorICogICAwIGluIGNhc2Ugb2Ygc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uLCBub24temVybyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBwbWNyYWlkX2FsbG9jYXRlX2hjYW1zKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJcGluc3RhbmNlLT5jY24ubXNnID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJCQkJCXBpbnN0YW5jZS0+cGRldiwKKwkJCQkJUE1DUkFJRF9BRU5fSERSX1NJWkUgKworCQkJCQlzaXplb2Yoc3RydWN0IHBtY3JhaWRfaGNhbV9jY24pLAorCQkJCQkmKHBpbnN0YW5jZS0+Y2NuLmJhZGRyKSk7CisKKwlwaW5zdGFuY2UtPmxkbi5tc2cgPSBwY2lfYWxsb2NfY29uc2lzdGVudCgKKwkJCQkJcGluc3RhbmNlLT5wZGV2LAorCQkJCQlQTUNSQUlEX0FFTl9IRFJfU0laRSArCisJCQkJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9oY2FtX2xkbiksCisJCQkJCSYocGluc3RhbmNlLT5sZG4uYmFkZHIpKTsKKworCWlmIChwaW5zdGFuY2UtPmxkbi5tc2cgPT0gTlVMTCB8fCBwaW5zdGFuY2UtPmNjbi5tc2cgPT0gTlVMTCkgeworCQlwbWNyYWlkX3JlbGVhc2VfaGNhbXMocGluc3RhbmNlKTsKKwl9IGVsc2UgeworCQlwaW5zdGFuY2UtPmNjbi5oY2FtID0KKwkJCSh2b2lkICopcGluc3RhbmNlLT5jY24ubXNnICsgUE1DUkFJRF9BRU5fSERSX1NJWkU7CisJCXBpbnN0YW5jZS0+bGRuLmhjYW0gPQorCQkJKHZvaWQgKilwaW5zdGFuY2UtPmxkbi5tc2cgKyBQTUNSQUlEX0FFTl9IRFJfU0laRTsKKworCQlhdG9taWNfc2V0KCZwaW5zdGFuY2UtPmNjbi5pZ25vcmUsIDApOworCQlhdG9taWNfc2V0KCZwaW5zdGFuY2UtPmxkbi5pZ25vcmUsIDApOworCX0KKworCXJldHVybiAocGluc3RhbmNlLT5sZG4ubXNnID09IE5VTEwpID8gLUVOT01FTSA6IDA7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWxlYXNlX2NvbmZpZ19idWZmZXJzIC0gcmVsZWFzZSBjb25maWcudGFibGUgYnVmZmVycworICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBwZXIgYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gVmFsdWUKKyAqCSBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVsZWFzZV9jb25maWdfYnVmZmVycyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWlmIChwaW5zdGFuY2UtPmNmZ190YWJsZSAhPSBOVUxMICYmCisJICAgIHBpbnN0YW5jZS0+Y2ZnX3RhYmxlX2J1c19hZGRyICE9IDApIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwaW5zdGFuY2UtPnBkZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUpLAorCQkJCSAgICBwaW5zdGFuY2UtPmNmZ190YWJsZSwKKwkJCQkgICAgcGluc3RhbmNlLT5jZmdfdGFibGVfYnVzX2FkZHIpOworCQlwaW5zdGFuY2UtPmNmZ190YWJsZSA9IE5VTEw7CisJCXBpbnN0YW5jZS0+Y2ZnX3RhYmxlX2J1c19hZGRyID0gMDsKKwl9CisKKwlpZiAocGluc3RhbmNlLT5yZXNfZW50cmllcyAhPSBOVUxMKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBQTUNSQUlEX01BWF9SRVNPVVJDRVM7IGkrKykKKwkJCWxpc3RfZGVsKCZwaW5zdGFuY2UtPnJlc19lbnRyaWVzW2ldLnF1ZXVlKTsKKwkJa2ZyZWUocGluc3RhbmNlLT5yZXNfZW50cmllcyk7CisJCXBpbnN0YW5jZS0+cmVzX2VudHJpZXMgPSBOVUxMOworCX0KKworCXBtY3JhaWRfcmVsZWFzZV9oY2FtcyhwaW5zdGFuY2UpOworfQorCisvKioKKyAqIHBtY3JhaWRfYWxsb2NhdGVfY29uZmlnX2J1ZmZlcnMgLSBhbGxvY2F0ZXMgRE1BYWJsZSBtZW1vcnkgZm9yIGNvbmZpZyB0YWJsZQorICogQHBpbnN0YW5jZSA6IHBvaW50ZXIgdG8gcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKgkwIGZvciBzdWNjZXNzZnVsIGFsbG9jYXRpb24sIC1FTk9NRU0gZm9yIGFueSBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwbWNyYWlkX2FsbG9jYXRlX2NvbmZpZ19idWZmZXJzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlwaW5zdGFuY2UtPnJlc19lbnRyaWVzID0KKwkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5KSAqCisJCQkJUE1DUkFJRF9NQVhfUkVTT1VSQ0VTLCBHRlBfS0VSTkVMKTsKKworCWlmIChOVUxMID09IHBpbnN0YW5jZS0+cmVzX2VudHJpZXMpIHsKKwkJcG1jcmFpZF9lcnIoImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlc291cmNlIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBNQ1JBSURfTUFYX1JFU09VUkNFUzsgaSsrKQorCQlsaXN0X2FkZF90YWlsKCZwaW5zdGFuY2UtPnJlc19lbnRyaWVzW2ldLnF1ZXVlLAorCQkJICAgICAgJnBpbnN0YW5jZS0+ZnJlZV9yZXNfcSk7CisKKwlwaW5zdGFuY2UtPmNmZ190YWJsZSA9CisJCXBjaV9hbGxvY19jb25zaXN0ZW50KHBpbnN0YW5jZS0+cGRldiwKKwkJCQkgICAgIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUpLAorCQkJCSAgICAgJnBpbnN0YW5jZS0+Y2ZnX3RhYmxlX2J1c19hZGRyKTsKKworCWlmIChOVUxMID09IHBpbnN0YW5jZS0+Y2ZnX3RhYmxlKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBjb25maWcgdGFibGVcbiIpOworCQlwbWNyYWlkX3JlbGVhc2VfY29uZmlnX2J1ZmZlcnMocGluc3RhbmNlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKHBtY3JhaWRfYWxsb2NhdGVfaGNhbXMocGluc3RhbmNlKSkgeworCQlwbWNyYWlkX2VycigiY291bGQgbm90IGFsbG9jIERNQSBtZW1vcnkgZm9yIEhDQU1TXG4iKTsKKwkJcG1jcmFpZF9yZWxlYXNlX2NvbmZpZ19idWZmZXJzKHBpbnN0YW5jZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfaW5pdF90YXNrbGV0cyAtIHJlZ2lzdGVycyB0YXNrbGV0cyBmb3IgcmVzcG9uc2UgaGFuZGxpbmcKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIHZhbHVlCisgKglub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfaW5pdF90YXNrbGV0cyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBwaW5zdGFuY2UtPm51bV9ocnJxOyBpKyspCisJCXRhc2tsZXRfaW5pdCgmcGluc3RhbmNlLT5pc3JfdGFza2xldFtpXSwKKwkJCSAgICAgcG1jcmFpZF90YXNrbGV0X2Z1bmN0aW9uLAorCQkJICAgICAodW5zaWduZWQgbG9uZykmcGluc3RhbmNlLT5ocnJxX3ZlY3RvcltpXSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9raWxsX3Rhc2tsZXRzIC0gZGVzdHJveXMgdGFza2xldHMgcmVnaXN0ZXJlZCBmb3IgcmVzcG9uc2UgaGFuZGxpbmcKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIHZhbHVlCisgKglub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfa2lsbF90YXNrbGV0cyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBwaW5zdGFuY2UtPm51bV9ocnJxOyBpKyspCisJCXRhc2tsZXRfa2lsbCgmcGluc3RhbmNlLT5pc3JfdGFza2xldFtpXSk7Cit9CisKKy8qKgorICogcG1jcmFpZF9pbml0X2J1ZmZlcnMgLSBhbGxvY2F0ZXMgbWVtb3J5IGFuZCBpbml0aWFsaXplcyB2YXJpb3VzIHN0cnVjdHVyZXMKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gcGVyIGFkYXB0ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKgorICogVGhpcyByb3V0aW5lIHByZS1hbGxvY2F0ZXMgbWVtb3J5IGJhc2VkIG9uIHRoZSB0eXBlIG9mIGJsb2NrIGFzIGJlbG93OgorICogY21kYmxvY2tzKFBNQ1JBSURfTUFYX0NNRCk6IGtlcm5lbCBtZW1vcnkgdXNpbmcga2VybmVsJ3Mgc2xhYl9hbGxvY2F0b3IsCisgKiBJT0FSQ0JzKFBNQ1JBSURfTUFYX0NNRCkgIDogRE1BYWJsZSBtZW1vcnksIHVzaW5nIHBjaSBwb29sIGFsbG9jYXRvcgorICogY29uZmlnLXRhYmxlIGVudHJpZXMgICAgICA6IERNQWFibGUgbWVtb3J5IHVzaW5nIHBjaV9hbGxvY19jb25zaXN0ZW50CisgKiBIb3N0UlJRcyAgICAgICAgICAgICAgICAgIDogRE1BYWJsZSBtZW1vcnksIHVzaW5nIHBjaV9hbGxvY19jb25zaXN0ZW50CisgKgorICogUmV0dXJuIFZhbHVlCisgKgkgMCBpbiBjYXNlIGFsbCBvZiB0aGUgYmxvY2tzIGFyZSBhbGxvY2F0ZWQsIC1FTk9NRU0gb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbWNyYWlkX2luaXRfYnVmZmVycyhzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWludCBpOworCisJaWYgKHBtY3JhaWRfYWxsb2NhdGVfaG9zdF9ycnFzKHBpbnN0YW5jZSkpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgJWQgaG9zdCBycnFzXG4iLAorCQkJICAgICBwaW5zdGFuY2UtPm51bV9ocnJxKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKHBtY3JhaWRfYWxsb2NhdGVfY29uZmlnX2J1ZmZlcnMocGluc3RhbmNlKSkgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBjb25maWcgYnVmZmVyc1xuIik7CisJCXBtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMocGluc3RhbmNlLCBwaW5zdGFuY2UtPm51bV9ocnJxKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKHBtY3JhaWRfYWxsb2NhdGVfY21kX2Jsb2NrcyhwaW5zdGFuY2UpKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNtZCBibG9ja3MgXG4iKTsKKwkJcG1jcmFpZF9yZWxlYXNlX2NvbmZpZ19idWZmZXJzKHBpbnN0YW5jZSk7CisJCXBtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMocGluc3RhbmNlLCBwaW5zdGFuY2UtPm51bV9ocnJxKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKHBtY3JhaWRfYWxsb2NhdGVfY29udHJvbF9ibG9ja3MocGluc3RhbmNlKSkgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGNvbnRyb2wgYmxvY2tzIFxuIik7CisJCXBtY3JhaWRfcmVsZWFzZV9jb25maWdfYnVmZmVycyhwaW5zdGFuY2UpOworCQlwbWNyYWlkX3JlbGVhc2VfY21kX2Jsb2NrcyhwaW5zdGFuY2UsIFBNQ1JBSURfTUFYX0NNRCk7CisJCXBtY3JhaWRfcmVsZWFzZV9ob3N0X3JycXMocGluc3RhbmNlLCBwaW5zdGFuY2UtPm51bV9ocnJxKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogSW5pdGlhbGl6ZSBhbGwgdGhlIGNvbW1hbmQgYmxvY2tzIGFuZCBhZGQgdGhlbSB0byBmcmVlIHBvb2wuIE5vCisJICogbmVlZCB0byBsb2NrIChmcmVlX3Bvb2xfbG9jaykgYXMgdGhpcyBpcyBkb25lIGluIGluaXRpYWxpemF0aW9uCisJICogaXRzZWxmCisJICovCisJZm9yIChpID0gMDsgaSA8IFBNQ1JBSURfTUFYX0NNRDsgaSsrKSB7CisJCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kcCA9IHBpbnN0YW5jZS0+Y21kX2xpc3RbaV07CisJCXBtY3JhaWRfaW5pdF9jbWRibGsoY21kcCwgaSk7CisJCWNtZHAtPmRydl9pbnN0ID0gcGluc3RhbmNlOworCQlsaXN0X2FkZF90YWlsKCZjbWRwLT5mcmVlX2xpc3QsICZwaW5zdGFuY2UtPmZyZWVfY21kX3Bvb2wpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVpbml0X2J1ZmZlcnMgLSByZXNldHMgdmFyaW91cyBidWZmZXIgcG9pbnRlcnMKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZQorICogUmV0dXJuIHZhbHVlCisgKiAJbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3JlaW5pdF9idWZmZXJzKHN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UpCit7CisJaW50IGk7CisJaW50IGJ1ZmZlcl9zaXplID0gSFJSUV9FTlRSWV9TSVpFICogUE1DUkFJRF9NQVhfQ01EOworCisJZm9yIChpID0gMDsgaSA8IHBpbnN0YW5jZS0+bnVtX2hycnE7IGkrKykgeworCQltZW1zZXQocGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldLCAwLCBidWZmZXJfc2l6ZSk7CisJCXBpbnN0YW5jZS0+aHJycV9jdXJyW2ldID0gcGluc3RhbmNlLT5ocnJxX3N0YXJ0W2ldOworCQlwaW5zdGFuY2UtPmhycnFfZW5kW2ldID0KKwkJCXBpbnN0YW5jZS0+aHJycV9zdGFydFtpXSArIFBNQ1JBSURfTUFYX0NNRCAtIDE7CisJCXBpbnN0YW5jZS0+aG9zdF90b2dnbGVfYml0W2ldID0gMTsKKwl9Cit9CisKKy8qKgorICogcG1jcmFpZF9pbml0X2luc3RhbmNlIC0gaW5pdGlhbGl6ZSBwZXIgaW5zdGFuY2UgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBwZGV2OiBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAaG9zdDogcG9pbnRlciB0byBTY3NpX0hvc3Qgc3RydWN0dXJlCisgKiBAbWFwcGVkX3BjaV9hZGRyOiBtZW1vcnkgbWFwcGVkIElPQSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICoKKyAqIFJldHVybiBWYWx1ZQorICoJIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gaW4gY2FzZSBvZiBhbnkgZmFpbHVyZQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbWNyYWlkX2luaXRfaW5zdGFuY2UoCisJc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwKKwl2b2lkIF9faW9tZW0gKm1hcHBlZF9wY2lfYWRkcgorKQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPQorCQkoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKilob3N0LT5ob3N0ZGF0YTsKKworCXBpbnN0YW5jZS0+aG9zdCA9IGhvc3Q7CisJcGluc3RhbmNlLT5wZGV2ID0gcGRldjsKKworCS8qIEluaXRpYWxpemUgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisJcGluc3RhbmNlLT5tYXBwZWRfZG1hX2FkZHIgPSBtYXBwZWRfcGNpX2FkZHI7CisKKwkvKiBJbml0aWFsaXplIGNoaXAtc3BlY2lmaWMgZGV0YWlscyAqLworCXsKKwkJc3RydWN0IHBtY3JhaWRfY2hpcF9kZXRhaWxzICpjaGlwX2NmZyA9IHBpbnN0YW5jZS0+Y2hpcF9jZmc7CisJCXN0cnVjdCBwbWNyYWlkX2ludGVycnVwdHMgKnBpbnRfcmVncyA9ICZwaW5zdGFuY2UtPmludF9yZWdzOworCisJCXBpbnN0YW5jZS0+aW9hcnJpbiA9IG1hcHBlZF9wY2lfYWRkciArIGNoaXBfY2ZnLT5pb2FycmluOworCisJCXBpbnRfcmVncy0+aW9hX2hvc3RfaW50ZXJydXB0X3JlZyA9CisJCQltYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+aW9hX2hvc3RfaW50cjsKKwkJcGludF9yZWdzLT5pb2FfaG9zdF9pbnRlcnJ1cHRfY2xyX3JlZyA9CisJCQltYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+aW9hX2hvc3RfaW50cl9jbHI7CisJCXBpbnRfcmVncy0+aG9zdF9pb2FfaW50ZXJydXB0X3JlZyA9CisJCQltYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+aG9zdF9pb2FfaW50cjsKKwkJcGludF9yZWdzLT5ob3N0X2lvYV9pbnRlcnJ1cHRfY2xyX3JlZyA9CisJCQltYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+aG9zdF9pb2FfaW50cl9jbHI7CisKKwkJLyogQ3VycmVudCB2ZXJzaW9uIG9mIGZpcm13YXJlIGV4cG9zZXMgaW50ZXJydXB0IG1hc2sgc2V0CisJCSAqIGFuZCBtYXNrIGNsciByZWdpc3RlcnMgdGhyb3VnaCBtZW1vcnkgbWFwcGVkIGJhcjAuCisJCSAqLworCQlwaW5zdGFuY2UtPm1haWxib3ggPSBtYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+bWFpbGJveDsKKwkJcGluc3RhbmNlLT5pb2Ffc3RhdHVzID0gbWFwcGVkX3BjaV9hZGRyICsgY2hpcF9jZmctPmlvYXN0YXR1czsKKwkJcGludF9yZWdzLT5pb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWcgPQorCQkJbWFwcGVkX3BjaV9hZGRyICsgY2hpcF9jZmctPmlvYV9ob3N0X21hc2s7CisJCXBpbnRfcmVncy0+aW9hX2hvc3RfaW50ZXJydXB0X21hc2tfY2xyX3JlZyA9CisJCQltYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+aW9hX2hvc3RfbWFza19jbHI7CisJCXBpbnRfcmVncy0+Z2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZyA9CisJCQltYXBwZWRfcGNpX2FkZHIgKyBjaGlwX2NmZy0+Z2xvYmFsX2ludHJfbWFzazsKKwl9OworCisJcGluc3RhbmNlLT5pb2FfcmVzZXRfYXR0ZW1wdHMgPSAwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBpbnN0YW5jZS0+cmVzZXRfd2FpdF9xKTsKKworCWF0b21pY19zZXQoJnBpbnN0YW5jZS0+b3V0c3RhbmRpbmdfY21kcywgMCk7CisJYXRvbWljX3NldCgmcGluc3RhbmNlLT5leHBvc2VfcmVzb3VyY2VzLCAwKTsKKworCUlOSVRfTElTVF9IRUFEKCZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpOworCUlOSVRfTElTVF9IRUFEKCZwaW5zdGFuY2UtPnVzZWRfcmVzX3EpOworCUlOSVRfTElTVF9IRUFEKCZwaW5zdGFuY2UtPmZyZWVfY21kX3Bvb2wpOworCUlOSVRfTElTVF9IRUFEKCZwaW5zdGFuY2UtPnBlbmRpbmdfY21kX3Bvb2wpOworCisJc3Bpbl9sb2NrX2luaXQoJnBpbnN0YW5jZS0+ZnJlZV9wb29sX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwaW5zdGFuY2UtPnBlbmRpbmdfcG9vbF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrKTsKKwltdXRleF9pbml0KCZwaW5zdGFuY2UtPmFlbl9xdWV1ZV9sb2NrKTsKKworCS8qIFdvcmstcXVldWUgKFNoYXJlZCkgZm9yIGRlZmVycmVkIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxpbmcgKi8KKwlJTklUX1dPUksoJnBpbnN0YW5jZS0+d29ya2VyX3EsIHBtY3JhaWRfd29ya2VyX2Z1bmN0aW9uKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9nX2xldmVsICovCisJcGluc3RhbmNlLT5jdXJyZW50X2xvZ19sZXZlbCA9IHBtY3JhaWRfbG9nX2xldmVsOworCisJLyogU2V0dXAgdmFyaWFibGVzIHJlcXVpcmVkIGZvciByZXNldCBlbmdpbmUgKi8KKwlwaW5zdGFuY2UtPmlvYV9zdGF0ZSA9IElPQV9TVEFURV9VTktOT1dOOworCXBpbnN0YW5jZS0+cmVzZXRfY21kID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbWNyYWlkX3JlbGVhc2VfYnVmZmVycyAtIHJlbGVhc2UgcGVyLWFkYXB0ZXIgYnVmZmVycyBhbGxvY2F0ZWQKKyAqCisgKiBAcGluc3RhbmNlOiBwb2ludGVyIHRvIGFkYXB0ZXIgc29mdCBzdGF0ZQorICoKKyAqIFJldHVybiBWYWx1ZQorICogCW5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9yZWxlYXNlX2J1ZmZlcnMoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlwbWNyYWlkX3JlbGVhc2VfY29uZmlnX2J1ZmZlcnMocGluc3RhbmNlKTsKKwlwbWNyYWlkX3JlbGVhc2VfY29udHJvbF9ibG9ja3MocGluc3RhbmNlLCBQTUNSQUlEX01BWF9DTUQpOworCXBtY3JhaWRfcmVsZWFzZV9jbWRfYmxvY2tzKHBpbnN0YW5jZSwgUE1DUkFJRF9NQVhfQ01EKTsKKwlwbWNyYWlkX3JlbGVhc2VfaG9zdF9ycnFzKHBpbnN0YW5jZSwgcGluc3RhbmNlLT5udW1faHJycSk7CisKK30KKworLyoqCisgKiBwbWNyYWlkX3NodXRkb3duIC0gc2h1dGRvd24gYWRhcHRlciBjb250cm9sbGVyLgorICogQHBkZXY6IHBjaSBkZXZpY2Ugc3RydWN0CisgKgorICogSXNzdWVzIGFuIGFkYXB0ZXIgc2h1dGRvd24gdG8gdGhlIGNhcmQgd2FpdHMgZm9yIGl0cyBjb21wbGV0aW9uCisgKgorICogUmV0dXJuIHZhbHVlCisgKgkgIG5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXBtY3JhaWRfcmVzZXRfYnJpbmdkb3duKHBpbnN0YW5jZSk7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX2dldF9taW5vciAtIHJldHVybnMgdW51c2VkIG1pbm9yIG51bWJlciBmcm9tIG1pbm9yIG51bWJlciBiaXRtYXAKKyAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IHBtY3JhaWRfZ2V0X21pbm9yKHZvaWQpCit7CisJaW50IG1pbm9yOworCisJbWlub3IgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHBtY3JhaWRfbWlub3IsIHNpemVvZihwbWNyYWlkX21pbm9yKSk7CisJX19zZXRfYml0KG1pbm9yLCBwbWNyYWlkX21pbm9yKTsKKwlyZXR1cm4gbWlub3I7Cit9CisKKy8qKgorICogcG1jcmFpZF9yZWxlYXNlX21pbm9yIC0gcmVsZWFzZXMgZ2l2ZW4gbWlub3IgYmFjayB0byBtaW5vciBudW1iZXIgYml0bWFwCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVsZWFzZV9taW5vcih1bnNpZ25lZCBzaG9ydCBtaW5vcikKK3sKKwlfX2NsZWFyX2JpdChtaW5vciwgcG1jcmFpZF9taW5vcik7Cit9CisKKy8qKgorICogcG1jcmFpZF9zZXR1cF9jaHJkZXYgLSBhbGxvY2F0ZXMgYSBtaW5vciBudW1iZXIgYW5kIHJlZ2lzdGVycyBhIGNoYXIgZGV2aWNlCisgKgorICogQHBpbnN0YW5jZTogcG9pbnRlciB0byBhZGFwdGVyIGluc3RhbmNlIGZvciB3aGljaCB0byByZWdpc3RlciBkZXZpY2UKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqCTAgaW4gY2FzZSBvZiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8KKyAqLworc3RhdGljIGludCBwbWNyYWlkX3NldHVwX2NocmRldihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlKQoreworCWludCBtaW5vcjsKKwlpbnQgZXJyb3I7CisKKwltaW5vciA9IHBtY3JhaWRfZ2V0X21pbm9yKCk7CisJY2Rldl9pbml0KCZwaW5zdGFuY2UtPmNkZXYsICZwbWNyYWlkX2ZvcHMpOworCXBpbnN0YW5jZS0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOworCisJZXJyb3IgPSBjZGV2X2FkZCgmcGluc3RhbmNlLT5jZGV2LCBNS0RFVihwbWNyYWlkX21ham9yLCBtaW5vciksIDEpOworCisJaWYgKGVycm9yKQorCQlwbWNyYWlkX3JlbGVhc2VfbWlub3IobWlub3IpOworCWVsc2UKKwkJZGV2aWNlX2NyZWF0ZShwbWNyYWlkX2NsYXNzLCBOVUxMLCBNS0RFVihwbWNyYWlkX21ham9yLCBtaW5vciksCisJCQkgICAgICBOVUxMLCAicG1jc2FzJXUiLCBtaW5vcik7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVsZWFzZV9jaHJkZXYgLSB1bnJlZ2lzdGVycyBwZXItYWRhcHRlciBtYW5hZ2VtZW50IGludGVyZmFjZQorICoKKyAqIEBwaW5zdGFuY2U6IHBvaW50ZXIgdG8gYWRhcHRlciBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gdmFsdWUKKyAqICBub25lCisgKi8KK3N0YXRpYyB2b2lkIHBtY3JhaWRfcmVsZWFzZV9jaHJkZXYoc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSkKK3sKKwlwbWNyYWlkX3JlbGVhc2VfbWlub3IoTUlOT1IocGluc3RhbmNlLT5jZGV2LmRldikpOworCWRldmljZV9kZXN0cm95KHBtY3JhaWRfY2xhc3MsCisJCSAgICAgICBNS0RFVihwbWNyYWlkX21ham9yLCBNSU5PUihwaW5zdGFuY2UtPmNkZXYuZGV2KSkpOworCWNkZXZfZGVsKCZwaW5zdGFuY2UtPmNkZXYpOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVtb3ZlIC0gSU9BIGhvdCBwbHVnIHJlbW92ZSBlbnRyeSBwb2ludAorICogQHBkZXY6IHBjaSBkZXZpY2Ugc3RydWN0CisgKgorICogUmV0dXJuIHZhbHVlCisgKgkgIG5vbmUKKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IHBtY3JhaWRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiByZW1vdmUgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICgvZGV2IGZpbGUpIGZvciB0aGlzIGRldmljZSAqLworCXBtY3JhaWRfcmVsZWFzZV9jaHJkZXYocGluc3RhbmNlKTsKKworCS8qIHJlbW92ZSBob3N0IHRlbXBsYXRlIGZyb20gc2NzaSBtaWRsYXllciAqLworCXNjc2lfcmVtb3ZlX2hvc3QocGluc3RhbmNlLT5ob3N0KTsKKworCS8qIGJsb2NrIHJlcXVlc3RzIGZyb20gbWlkLWxheWVyICovCisJc2NzaV9ibG9ja19yZXF1ZXN0cyhwaW5zdGFuY2UtPmhvc3QpOworCisJLyogaW5pdGlhdGUgc2h1dGRvd24gYWRhcHRlciAqLworCXBtY3JhaWRfc2h1dGRvd24ocGRldik7CisKKwlwbWNyYWlkX2Rpc2FibGVfaW50ZXJydXB0cyhwaW5zdGFuY2UsIH4wKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJcG1jcmFpZF9raWxsX3Rhc2tsZXRzKHBpbnN0YW5jZSk7CisJcG1jcmFpZF91bnJlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CisJcG1jcmFpZF9yZWxlYXNlX2J1ZmZlcnMocGluc3RhbmNlKTsKKwlpb3VubWFwKHBpbnN0YW5jZS0+bWFwcGVkX2RtYV9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXNjc2lfaG9zdF9wdXQocGluc3RhbmNlLT5ob3N0KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKy8qKgorICogcG1jcmFpZF9zdXNwZW5kIC0gZHJpdmVyIHN1c3BlbmQgZW50cnkgcG9pbnQgZm9yIHBvd2VyIG1hbmFnZW1lbnQKKyAqIEBwZGV2OiAgIFBDSSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAc3RhdGU6ICBQQ0kgcG93ZXIgc3RhdGUgdG8gc3VzcGVuZCByb3V0aW5lCisgKgorICogUmV0dXJuIFZhbHVlIC0gMCBhbHdheXMKKyAqLworc3RhdGljIGludCBwbWNyYWlkX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcG1jcmFpZF9zaHV0ZG93bihwZGV2KTsKKwlwbWNyYWlkX2Rpc2FibGVfaW50ZXJydXB0cyhwaW5zdGFuY2UsIH4wKTsKKwlwbWNyYWlkX2tpbGxfdGFza2xldHMocGluc3RhbmNlKTsKKwlwY2lfc2V0X2RydmRhdGEocGluc3RhbmNlLT5wZGV2LCBwaW5zdGFuY2UpOworCXBtY3JhaWRfdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtY3JhaWRfcmVzdW1lIC0gZHJpdmVyIHJlc3VtZSBlbnRyeSBwb2ludCBQQ0kgcG93ZXIgbWFuYWdlbWVudAorICogQHBkZXY6IFBDSSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlIC0gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MuIEVycm9yIGNvZGUgaW4gY2FzZSBvZiBhbnkgZmFpbHVyZQorICovCitzdGF0aWMgaW50IHBtY3JhaWRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBpbnN0YW5jZS0+aG9zdDsKKwlpbnQgcmM7CisJaW50IGhycnFzOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKworCWlmIChyYykgeworCQlwbWNyYWlkX2VycigicG1jcmFpZDogRW5hYmxlIGRldmljZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA9PSA0KSB8fAorCSAgICAgcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkKKwkJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCisJaWYgKHJjID09IDApCisJCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCisJaWYgKHJjICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBQQ0kgRE1BIG1hc2tcbiIpOworCQlnb3RvIGRpc2FibGVfZGV2aWNlOworCX0KKworCWF0b21pY19zZXQoJnBpbnN0YW5jZS0+b3V0c3RhbmRpbmdfY21kcywgMCk7CisJaHJycXMgPSBwaW5zdGFuY2UtPm51bV9ocnJxOworCXJjID0gcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOworCisJaWYgKHJjKSB7CisJCXBtY3JhaWRfZXJyKCJyZXN1bWU6IGNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyc1xuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byByZWxlYXNlX2hvc3Q7CisJfQorCisJcG1jcmFpZF9pbml0X3Rhc2tsZXRzKHBpbnN0YW5jZSk7CisJcG1jcmFpZF9lbmFibGVfaW50ZXJydXB0cyhwaW5zdGFuY2UsIFBNQ1JBSURfUENJX0lOVEVSUlVQVFMpOworCisJLyogU3RhcnQgd2l0aCBoYXJkIHJlc2V0IHNlcXVlbmNlIHdoaWNoIGJyaW5ncyB1cCBJT0EgdG8gb3BlcmF0aW9uYWwKKwkgKiBzdGF0ZSBhcyB3ZWxsIGFzIGNvbXBsZXRlcyB0aGUgcmVzZXQgc2VxdWVuY2UuCisJICovCisJcGluc3RhbmNlLT5pb2FfaGFyZF9yZXNldCA9IDE7CisKKwkvKiBTdGFydCBJT0EgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIGJyaW5nIGNhcmQgdG8gT3BlcmF0aW9uYWwKKwkgKiBzdGF0ZS4KKwkgKi8KKwlpZiAocG1jcmFpZF9yZXNldF9icmluZ3VwKHBpbnN0YW5jZSkpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGluaXRpYWxpemUgSU9BIFxuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byByZWxlYXNlX3Rhc2tsZXRzOworCX0KKworCXJldHVybiAwOworCityZWxlYXNlX3Rhc2tsZXRzOgorCXBtY3JhaWRfa2lsbF90YXNrbGV0cyhwaW5zdGFuY2UpOworCXBtY3JhaWRfdW5yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOworCityZWxlYXNlX2hvc3Q6CisJc2NzaV9ob3N0X3B1dChob3N0KTsKKworZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcmV0dXJuIHJjOworfQorCisjZWxzZQorCisjZGVmaW5lIHBtY3JhaWRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHBtY3JhaWRfcmVzdW1lICBOVUxMCisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworLyoqCisgKiBwbWNyYWlkX2NvbXBsZXRlX2lvYV9yZXNldCAtIENhbGxlZCBieSBlaXRoZXIgdGltZXIgb3IgdGFza2xldCBkdXJpbmcKKyAqIAkgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uIG9mIHRoZSBpb2EgcmVzZXQKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gcmVzZXQgY29tbWFuZCBibG9jaworICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX2NvbXBsZXRlX2lvYV9yZXNldChzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlwbWNyYWlkX2lvYV9yZXNldChjbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlzY3NpX3VuYmxvY2tfcmVxdWVzdHMocGluc3RhbmNlLT5ob3N0KTsKKwlzY2hlZHVsZV93b3JrKCZwaW5zdGFuY2UtPndvcmtlcl9xKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3NldF9zdXBwb3J0ZWRfZGV2cyAtIHNlbmRzIFNFVCBTVVBQT1JURUQgREVWSUNFUyB0byBJT0FGUAorICoKKyAqIEBjbWQ6IHBvaW50ZXIgdG8gcG1jcmFpZF9jbWQgc3RydWN0dXJlCisgKgorICogUmV0dXJuIFZhbHVlCisgKiAgMCBmb3Igc3VjY2VzcyBvciBub24temVybyBmb3IgZmFpbHVyZSBjYXNlcworICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3NldF9zdXBwb3J0ZWRfZGV2cyhzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgKmlvYXJjYiA9ICZjbWQtPmlvYV9jYi0+aW9hcmNiOworCXZvaWQgKCpjbWRfZG9uZSkgKHN0cnVjdCBwbWNyYWlkX2NtZCAqKSA9IHBtY3JhaWRfY29tcGxldGVfaW9hX3Jlc2V0OworCisJcG1jcmFpZF9yZWluaXRfY21kYmxrKGNtZCk7CisKKwlpb2FyY2ItPnJlc291cmNlX2hhbmRsZSA9IGNwdV90b19sZTMyKFBNQ1JBSURfSU9BX1JFU19IQU5ETEUpOworCWlvYXJjYi0+cmVxdWVzdF90eXBlID0gUkVRX1RZUEVfSU9BQ01EOworCWlvYXJjYi0+Y2RiWzBdID0gUE1DUkFJRF9TRVRfU1VQUE9SVEVEX0RFVklDRVM7CisJaW9hcmNiLT5jZGJbMV0gPSBBTExfREVWSUNFU19TVVBQT1JURUQ7CisKKwkvKiBJZiB0aGlzIHdhcyBjYWxsZWQgYXMgcGFydCBvZiByZXNvdXJjZSB0YWJsZSByZWluaXRpYWxpemF0aW9uIGR1ZSB0bworCSAqIGxvc3QgQ0NOLCBpdCBpcyBlbm91Z2ggdG8gcmV0dXJuIHRoZSBjb21tYW5kIGJsb2NrIGJhY2sgdG8gZnJlZSBwb29sCisJICogYXMgcGFydCBvZiBzZXRfc3VwcG9ydGVkX2RldnMgY29tcGxldGlvbiBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoY21kLT5kcnZfaW5zdC0+cmVpbml0X2NmZ190YWJsZSkgeworCQljbWQtPmRydl9pbnN0LT5yZWluaXRfY2ZnX3RhYmxlID0gMDsKKwkJY21kLT5yZWxlYXNlID0gMTsKKwkJY21kX2RvbmUgPSBwbWNyYWlkX3JlaW5pdF9jZmd0YWJsZV9kb25lOworCX0KKworCS8qIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoZSByZXNldCBzZXF1ZW5jZSBhZnRlciBzZXQgc3VwcG9ydGVkIGRldmljZXMsCisJICogc2V0dXAgdGhlIGRvbmUgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBjb21tYW5kIGJsb2NrIGJhY2sgdG8gZnJlZQorCSAqIHBvb2wKKwkgKi8KKwlwbWNyYWlkX3NlbmRfY21kKGNtZCwKKwkJCSBjbWRfZG9uZSwKKwkJCSBQTUNSQUlEX1NFVF9TVVBfREVWX1RJTUVPVVQsCisJCQkgcG1jcmFpZF90aW1lb3V0X2hhbmRsZXIpOworCXJldHVybjsKK30KKworLyoqCisgKiBwbWNyYWlkX2luaXRfcmVzX3RhYmxlIC0gSW5pdGlhbGl6ZSB0aGUgcmVzb3VyY2UgdGFibGUKKyAqIEBjbWQ6ICBwb2ludGVyIHRvIHBtY3JhaWQgY29tbWFuZCBzdHJ1Y3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIHRocm91Z2ggdGhlIGV4aXN0aW5nIHJlc291cmNlIHRhYmxlLCBjb21wYXJpbmcKKyAqIGl0IHdpdGggdGhlIGNvbmZpZyB0YWJsZS4gVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgY2FyZSBvZiBvbGQvbmV3CisgKiBkZXZpY2VzIGFuZCBzY2hlZHVsZSBhZGRpbmcvcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBtaWQtbGF5ZXIKKyAqIGFzIGFwcHJvcHJpYXRlLgorICoKKyAqIFJldHVybiB2YWx1ZQorICoJIE5vbmUKKyAqLworc3RhdGljIHZvaWQgcG1jcmFpZF9pbml0X3Jlc190YWJsZShzdHJ1Y3QgcG1jcmFpZF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlID0gY21kLT5kcnZfaW5zdDsKKwlzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSAqcmVzLCAqdGVtcDsKKwlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgKmNmZ3RlOworCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwlpbnQgZm91bmQsIHJjLCBpOworCUxJU1RfSEVBRChvbGRfcmVzKTsKKworCWlmIChwaW5zdGFuY2UtPmNmZ190YWJsZS0+ZmxhZ3MgJiBNSUNST0NPREVfVVBEQVRFX1JFUVVJUkVEKQorCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIlJlcXVpcmUgbWljcm9jb2RlIGRvd25sb2FkXG4iKTsKKworCS8qIHJlc291cmNlIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IHBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jay4KKwkgKiBpbml0X3Jlc190YWJsZSBjYW4gYmUgY2FsbGVkIGZyb20gcHJvYmUgKHVzZXItdGhyZWFkKSBvciBydW50aW1lCisJICogcmVzZXQgKHRpbWVyL3Rhc2tsZXQpCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVzLCB0ZW1wLCAmcGluc3RhbmNlLT51c2VkX3Jlc19xLCBxdWV1ZSkKKwkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZvbGRfcmVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBwaW5zdGFuY2UtPmNmZ190YWJsZS0+bnVtX2VudHJpZXM7IGkrKykgeworCQljZmd0ZSA9ICZwaW5zdGFuY2UtPmNmZ190YWJsZS0+ZW50cmllc1tpXTsKKworCQlpZiAoIXBtY3JhaWRfZXhwb3NlX3Jlc291cmNlKGNmZ3RlKSkKKwkJCWNvbnRpbnVlOworCisJCWZvdW5kID0gMDsKKworCQkvKiBJZiB0aGlzIGVudHJ5IHdhcyBhbHJlYWR5IGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVzLCB0ZW1wLCAmb2xkX3JlcywgcXVldWUpIHsKKworCQkJcmMgPSBtZW1jbXAoJnJlcy0+Y2ZnX2VudHJ5LnJlc291cmNlX2FkZHJlc3MsCisJCQkJICAgICZjZmd0ZS0+cmVzb3VyY2VfYWRkcmVzcywKKwkJCQkgICAgc2l6ZW9mKGNmZ3RlLT5yZXNvdXJjZV9hZGRyZXNzKSk7CisJCQlpZiAoIXJjKSB7CisJCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsCisJCQkJCQkmcGluc3RhbmNlLT51c2VkX3Jlc19xKTsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBJZiB0aGlzIGlzIG5ldyBlbnRyeSwgaW5pdGlhbGl6ZSBpdCBhbmQgYWRkIGl0IHRoZSBxdWV1ZSAqLworCQlpZiAoIWZvdW5kKSB7CisKKwkJCWlmIChsaXN0X2VtcHR5KCZwaW5zdGFuY2UtPmZyZWVfcmVzX3EpKSB7CisJCQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCQkJCSJUb28gbWFueSBkZXZpY2VzIGF0dGFjaGVkXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZm91bmQgPSAxOworCQkJcmVzID0gbGlzdF9lbnRyeShwaW5zdGFuY2UtPmZyZWVfcmVzX3EubmV4dCwKKwkJCQkJIHN0cnVjdCBwbWNyYWlkX3Jlc291cmNlX2VudHJ5LCBxdWV1ZSk7CisKKwkJCXJlcy0+c2NzaV9kZXYgPSBOVUxMOworCQkJcmVzLT5jaGFuZ2VfZGV0ZWN0ZWQgPSBSRVNfQ0hBTkdFX0FERDsKKwkJCXJlcy0+cmVzZXRfcHJvZ3Jlc3MgPSAwOworCQkJbGlzdF9tb3ZlX3RhaWwoJnJlcy0+cXVldWUsICZwaW5zdGFuY2UtPnVzZWRfcmVzX3EpOworCQl9CisKKwkJLyogY29weSBuZXcgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyeSBkZXRhaWxzIGludG8gZHJpdmVyCisJCSAqIG1haW50YWluZWQgcmVzb3VyY2UgZW50cnkKKwkJICovCisJCWlmIChmb3VuZCkgeworCQkJbWVtY3B5KCZyZXMtPmNmZ19lbnRyeSwgY2ZndGUsCisJCQkJc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZV9lbnRyeSkpOworCQkJcG1jcmFpZF9pbmZvKCJOZXcgcmVzIHR5cGU6JXgsIHZzZXQ6JXgsIGFkZHI6JXg6XG4iLAorCQkJCSByZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV90eXBlLAorCQkJCSByZXMtPmNmZ19lbnRyeS51bmlxdWVfZmxhZ3MxLAorCQkJCSBsZTMyX3RvX2NwdShyZXMtPmNmZ19lbnRyeS5yZXNvdXJjZV9hZGRyZXNzKSk7CisJCX0KKwl9CisKKwkvKiBEZXRlY3QgYW55IGRlbGV0ZWQgZW50cmllcywgbWFyayB0aGVtIGZvciBkZWxldGlvbiBmcm9tIG1pZC1sYXllciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXMsIHRlbXAsICZvbGRfcmVzLCBxdWV1ZSkgeworCisJCWlmIChyZXMtPnNjc2lfZGV2KSB7CisJCQlyZXMtPmNoYW5nZV9kZXRlY3RlZCA9IFJFU19DSEFOR0VfREVMOworCQkJcmVzLT5jZmdfZW50cnkucmVzb3VyY2VfaGFuZGxlID0KKwkJCQlQTUNSQUlEX0lOVkFMSURfUkVTX0hBTkRMRTsKKwkJCWxpc3RfbW92ZV90YWlsKCZyZXMtPnF1ZXVlLCAmcGluc3RhbmNlLT51c2VkX3Jlc19xKTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfbW92ZV90YWlsKCZyZXMtPnF1ZXVlLCAmcGluc3RhbmNlLT5mcmVlX3Jlc19xKTsKKwkJfQorCX0KKworCS8qIHJlbGVhc2UgdGhlIHJlc291cmNlIGxpc3QgbG9jayAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpbnN0YW5jZS0+cmVzb3VyY2VfbG9jaywgbG9ja19mbGFncyk7CisJcG1jcmFpZF9zZXRfc3VwcG9ydGVkX2RldnMoY21kKTsKK30KKworLyoqCisgKiBwbWNyYWlkX3F1ZXJ5Y2ZnIC0gU2VuZCBhIFF1ZXJ5IElPQSBDb25maWcgdG8gdGhlIGFkYXB0ZXIuCisgKiBAY21kOiBwb2ludGVyIHBtY3JhaWRfY21kIHN0cnVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMgYSBRdWVyeSBJT0EgQ29uZmlndXJhdGlvbiBjb21tYW5kIHRvIHRoZSBhZGFwdGVyIHRvCisgKiByZXRyaWV2ZSB0aGUgSU9BIGNvbmZpZ3VyYXRpb24gdGFibGUuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoJbm9uZQorICovCitzdGF0aWMgdm9pZCBwbWNyYWlkX3F1ZXJ5Y2ZnKHN0cnVjdCBwbWNyYWlkX2NtZCAqY21kKQoreworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiAqaW9hcmNiID0gJmNtZC0+aW9hX2NiLT5pb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYyAqaW9hZGwgPSBpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGw7CisJc3RydWN0IHBtY3JhaWRfaW5zdGFuY2UgKnBpbnN0YW5jZSA9IGNtZC0+ZHJ2X2luc3Q7CisJaW50IGNmZ190YWJsZV9zaXplID0gY3B1X3RvX2JlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSkpOworCisJaW9hcmNiLT5yZXF1ZXN0X3R5cGUgPSBSRVFfVFlQRV9JT0FDTUQ7CisJaW9hcmNiLT5yZXNvdXJjZV9oYW5kbGUgPSBjcHVfdG9fbGUzMihQTUNSQUlEX0lPQV9SRVNfSEFORExFKTsKKworCWlvYXJjYi0+Y2RiWzBdID0gUE1DUkFJRF9RVUVSWV9JT0FfQ09ORklHOworCisJLyogZmlybXdhcmUgcmVxdWlyZXMgNC1ieXRlIGxlbmd0aCBmaWVsZCwgc3BlY2lmaWVkIGluIEIuRSBmb3JtYXQgKi8KKwltZW1jcHkoJihpb2FyY2ItPmNkYlsxMF0pLCAmY2ZnX3RhYmxlX3NpemUsIHNpemVvZihjZmdfdGFibGVfc2l6ZSkpOworCisJLyogU2luY2UgZW50aXJlIGNvbmZpZyB0YWJsZSBjYW4gYmUgZGVzY3JpYmVkIGJ5IHNpbmdsZSBJT0FETCwgaXQgY2FuCisJICogYmUgcGFydCBvZiBJT0FSQ0IgaXRzZWxmCisJICovCisJaW9hcmNiLT5pb2FkbF9idXNfYWRkciA9IGNwdV90b19sZTY0KChjbWQtPmlvYV9jYl9idXNfYWRkcikgKworCQkJCQlvZmZzZXRvZihzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IsCisJCQkJCQlhZGRfZGF0YS51LmlvYWRsWzBdKSk7CisJaW9hcmNiLT5pb2FkbF9sZW5ndGggPSBjcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYykpOworCWlvYXJjYi0+aW9hcmNiX2J1c19hZGRyICY9IH4oMHgxRlVMTCk7CisKKwlpb2FyY2ItPnJlcXVlc3RfZmxhZ3MwIHw9IE5PX0xJTktfREVTQ1M7CisJaW9hcmNiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCA9CisJCWNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUpKTsKKworCWlvYWRsID0gJihpb2FyY2ItPmFkZF9kYXRhLnUuaW9hZGxbMF0pOworCWlvYWRsLT5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisJaW9hZGwtPmFkZHJlc3MgPSBjcHVfdG9fbGU2NChwaW5zdGFuY2UtPmNmZ190YWJsZV9idXNfYWRkcik7CisJaW9hZGwtPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSkpOworCisJcG1jcmFpZF9zZW5kX2NtZChjbWQsIHBtY3JhaWRfaW5pdF9yZXNfdGFibGUsCisJCQkgUE1DUkFJRF9JTlRFUk5BTF9USU1FT1VULCBwbWNyYWlkX3RpbWVvdXRfaGFuZGxlcik7Cit9CisKKworLyoqCisgKiBwbWNyYWlkX3Byb2JlIC0gUENJIHByb2JlIGVudHJ5IHBvaW50ZXIgZm9yIFBNQyBNYXhSYWlkIGNvbnRyb2xsZXIgZHJpdmVyCisgKiBAcGRldjogcG9pbnRlciB0byBwY2kgZGV2aWNlIHN0cnVjdHVyZQorICogQGRldl9pZDogcG9pbnRlciB0byBkZXZpY2UgaWRzIHN0cnVjdHVyZQorICoKKyAqIFJldHVybiBWYWx1ZQorICoJcmV0dXJucyAwIGlmIHRoZSBkZXZpY2UgaXMgY2xhaW1lZCBhbmQgc3VjY2Vzc2Z1bGx5IGNvbmZpZ3VyZWQuCisgKglyZXR1cm5zIG5vbi16ZXJvIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBhbnkgZmFpbHVyZQorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbWNyYWlkX3Byb2JlKAorCXN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpkZXZfaWQKKykKK3sKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqcGluc3RhbmNlOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJdm9pZCBfX2lvbWVtICptYXBwZWRfcGNpX2FkZHI7CisJaW50IHJjID0gUENJQklPU19TVUNDRVNTRlVMOworCisJaWYgKGF0b21pY19yZWFkKCZwbWNyYWlkX2FkYXB0ZXJfY291bnQpID49IFBNQ1JBSURfTUFYX0FEQVBURVJTKSB7CisJCXBtY3JhaWRfZXJyCisJCQkoIm1heGltdW0gbnVtYmVyKCVkKSBvZiBzdXBwb3J0ZWQgYWRhcHRlcnMgcmVhY2hlZFxuIiwKKwkJCSBhdG9taWNfcmVhZCgmcG1jcmFpZF9hZGFwdGVyX2NvdW50KSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWF0b21pY19pbmMoJnBtY3JhaWRfYWRhcHRlcl9jb3VudCk7CisJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKworCWlmIChyYykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIGFkYXB0ZXJcbiIpOworCQlhdG9taWNfZGVjKCZwbWNyYWlkX2FkYXB0ZXJfY291bnQpOworCQlyZXR1cm4gcmM7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJIkZvdW5kIG5ldyBJT0EoJXg6JXgpLCBUb3RhbCBJT0EgY291bnQ6ICVkXG4iLAorCQkgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsCisJCSBhdG9taWNfcmVhZCgmcG1jcmFpZF9hZGFwdGVyX2NvdW50KSk7CisKKwlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgUE1DUkFJRF9EUklWRVJfTkFNRSk7CisKKwlpZiAocmMgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJDb3VsZG4ndCByZWdpc3RlciBtZW1vcnkgcmFuZ2Ugb2YgcmVnaXN0ZXJzXG4iKTsKKwkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CisJfQorCisJbWFwcGVkX3BjaV9hZGRyID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOworCisJaWYgKCFtYXBwZWRfcGNpX2FkZHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgbWFwIFBDSSByZWdpc3RlcnMgbWVtb3J5XG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yZWxlYXNlX3JlZ2lvbnM7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwkvKiBGaXJtd2FyZSByZXF1aXJlcyB0aGUgc3lzdGVtIGJ1cyBhZGRyZXNzIG9mIElPQVJDQiB0byBiZSB3aXRoaW4KKwkgKiAzMi1iaXQgYWRkcmVzc2FibGUgcmFuZ2UgdGhvdWdoIGl0IGhhcyA2NC1iaXQgSU9BUlJJTiByZWdpc3Rlci4KKwkgKiBIb3dldmVyLCBmaXJtd2FyZSBzdXBwb3J0cyA2NC1iaXQgc3RyZWFtaW5nIERNQSBidWZmZXJzLCB3aGVyZWFzCisJICogY29oZXJlbnQgYnVmZmVycyBhcmUgdG8gYmUgMzItYml0LiBTaW5jZSBwY2lfYWxsb2NfY29uc2lzdGVudCBhbHdheXMKKwkgKiByZXR1cm5zIG1lbW9yeSB3aXRoaW4gNEdCIChpZiBub3QsIGNoYW5nZSB0aGlzIGxvZ2ljKSwgY29oZXJlbnQKKwkgKiBidWZmZXJzIGFyZSB3aXRoaW4gZmlybXdhcmUgYWNjZXB0aWJsZSBhZGRyZXNzIHJhbmdlcy4KKwkgKi8KKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA9PSA0KSB8fAorCSAgICBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKQorCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwkvKiBmaXJtd2FyZSBleHBlY3RzIDMyLWJpdCBETUEgYWRkcmVzc2VzIGZvciBJT0FSUklOIHJlZ2lzdGVyOyBzZXQgMzIKKwkgKiBiaXQgbWFzayBmb3IgcGNpX2FsbG9jX2NvbnNpc3RlbnQgdG8gcmV0dXJuIGFkZHJlc3NlcyB3aXRoaW4gNEdCCisJICovCisJaWYgKHJjID09IDApCisJCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCisJaWYgKHJjICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBQQ0kgRE1BIG1hc2tcbiIpOworCQlnb3RvIGNsZWFudXBfbm9tZW07CisJfQorCisJaG9zdCA9IHNjc2lfaG9zdF9hbGxvYygmcG1jcmFpZF9ob3N0X3RlbXBsYXRlLAorCQkJCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSkpOworCisJaWYgKCFob3N0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInNjc2lfaG9zdF9hbGxvYyBmYWlsZWQhXG4iKTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFudXBfbm9tZW07CisJfQorCisJaG9zdC0+bWF4X2lkID0gUE1DUkFJRF9NQVhfTlVNX1RBUkdFVFNfUEVSX0JVUzsKKwlob3N0LT5tYXhfbHVuID0gUE1DUkFJRF9NQVhfTlVNX0xVTlNfUEVSX1RBUkdFVDsKKwlob3N0LT51bmlxdWVfaWQgPSBob3N0LT5ob3N0X25vOworCWhvc3QtPm1heF9jaGFubmVsID0gUE1DUkFJRF9NQVhfQlVTX1RPX1NDQU47CisJaG9zdC0+bWF4X2NtZF9sZW4gPSBQTUNSQUlEX01BWF9DREJfTEVOOworCisJLyogemVybyBvdXQgZW50aXJlIGluc3RhbmNlIHN0cnVjdHVyZSAqLworCXBpbnN0YW5jZSA9IChzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKWhvc3QtPmhvc3RkYXRhOworCW1lbXNldChwaW5zdGFuY2UsIDAsIHNpemVvZigqcGluc3RhbmNlKSk7CisKKwlwaW5zdGFuY2UtPmNoaXBfY2ZnID0KKwkJKHN0cnVjdCBwbWNyYWlkX2NoaXBfZGV0YWlscyAqKShkZXZfaWQtPmRyaXZlcl9kYXRhKTsKKworCXJjID0gcG1jcmFpZF9pbml0X2luc3RhbmNlKHBkZXYsIGhvc3QsIG1hcHBlZF9wY2lfYWRkcik7CisKKwlpZiAocmMgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGFkYXB0ZXIgaW5zdGFuY2VcbiIpOworCQlnb3RvIG91dF9zY3NpX2hvc3RfcHV0OworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwaW5zdGFuY2UpOworCisJLyogU2F2ZSBQQ0kgY29uZmlnLXNwYWNlIGZvciB1c2UgZm9sbG93aW5nIHRoZSByZXNldCAqLworCXJjID0gcGNpX3NhdmVfc3RhdGUocGluc3RhbmNlLT5wZGV2KTsKKworCWlmIChyYyAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBzYXZlIFBDSSBjb25maWcgc3BhY2VcbiIpOworCQlnb3RvIG91dF9zY3NpX2hvc3RfcHV0OworCX0KKworCXBtY3JhaWRfZGlzYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgfjApOworCisJcmMgPSBwbWNyYWlkX3JlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CisKKwlpZiAocmMpIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyXG4iKTsKKwkJZ290byBvdXRfc2NzaV9ob3N0X3B1dDsKKwl9CisKKwlwbWNyYWlkX2luaXRfdGFza2xldHMocGluc3RhbmNlKTsKKworCS8qIGFsbG9jYXRlIHZlcmlvdXMgYnVmZmVycyB1c2VkIGJ5IExMRC4qLworCXJjID0gcG1jcmFpZF9pbml0X2J1ZmZlcnMocGluc3RhbmNlKTsKKworCWlmIChyYykgeworCQlwbWNyYWlkX2VycigiY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGJsb2Nrc1xuIik7CisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfaXNyOworCX0KKworCS8qIGNoZWNrIHRoZSByZXNldCB0eXBlIHJlcXVpcmVkICovCisJcG1jcmFpZF9yZXNldF90eXBlKHBpbnN0YW5jZSk7CisKKwlwbWNyYWlkX2VuYWJsZV9pbnRlcnJ1cHRzKHBpbnN0YW5jZSwgUE1DUkFJRF9QQ0lfSU5URVJSVVBUUyk7CisKKwkvKiBTdGFydCBJT0EgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gYW5kIGJyaW5nIGNhcmQgdG8gT3BlcmF0aW9uYWwKKwkgKiBzdGF0ZS4KKwkgKi8KKwlwbWNyYWlkX2luZm8oInN0YXJ0aW5nIElPQSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZVxuIik7CisJaWYgKHBtY3JhaWRfcmVzZXRfYnJpbmd1cChwaW5zdGFuY2UpKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBpbml0aWFsaXplIElPQSBcbiIpOworCQlyYyA9IDE7CisJCWdvdG8gb3V0X3JlbGVhc2VfYnVmczsKKwl9CisKKwkvKiBBZGQgYWRhcHRlciBpbnN0YW5jZSBpbnRvIG1pZC1sYXllciBsaXN0ICovCisJcmMgPSBzY3NpX2FkZF9ob3N0KHBpbnN0YW5jZS0+aG9zdCwgJnBkZXYtPmRldik7CisJaWYgKHJjICE9IDApIHsKKwkJcG1jcmFpZF9lcnIoImNvdWxkbid0IGFkZCBob3N0IGludG8gbWlkLWxheWVyOiAlZFxuIiwgcmMpOworCQlnb3RvIG91dF9yZWxlYXNlX2J1ZnM7CisJfQorCisJc2NzaV9zY2FuX2hvc3QocGluc3RhbmNlLT5ob3N0KTsKKworCXJjID0gcG1jcmFpZF9zZXR1cF9jaHJkZXYocGluc3RhbmNlKTsKKworCWlmIChyYyAhPSAwKSB7CisJCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBjcmVhdGUgbWdtdCBpbnRlcmZhY2UsIGVycm9yOiAleFxuIiwKKwkJCSAgICAgcmMpOworCQlnb3RvIG91dF9yZW1vdmVfaG9zdDsKKwl9CisKKwkvKiBTY2hlZHVsZSB3b3JrZXIgdGhyZWFkIHRvIGhhbmRsZSBDQ04gYW5kIHRha2UgY2FyZSBvZiBhZGRpbmcgYW5kCisJICogcmVtb3ZpbmcgZGV2aWNlcyB0byBPUworCSAqLworCWF0b21pY19zZXQoJnBpbnN0YW5jZS0+ZXhwb3NlX3Jlc291cmNlcywgMSk7CisJc2NoZWR1bGVfd29yaygmcGluc3RhbmNlLT53b3JrZXJfcSk7CisJcmV0dXJuIHJjOworCitvdXRfcmVtb3ZlX2hvc3Q6CisJc2NzaV9yZW1vdmVfaG9zdChob3N0KTsKKworb3V0X3JlbGVhc2VfYnVmczoKKwlwbWNyYWlkX3JlbGVhc2VfYnVmZmVycyhwaW5zdGFuY2UpOworCitvdXRfdW5yZWdpc3Rlcl9pc3I6CisJcG1jcmFpZF9raWxsX3Rhc2tsZXRzKHBpbnN0YW5jZSk7CisJcG1jcmFpZF91bnJlZ2lzdGVyX2ludGVycnVwdF9oYW5kbGVyKHBpbnN0YW5jZSk7CisKK291dF9zY3NpX2hvc3RfcHV0OgorCXNjc2lfaG9zdF9wdXQoaG9zdCk7CisKK2NsZWFudXBfbm9tZW06CisJaW91bm1hcChtYXBwZWRfcGNpX2FkZHIpOworCitvdXRfcmVsZWFzZV9yZWdpb25zOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisKK291dF9kaXNhYmxlX2RldmljZToKKwlhdG9taWNfZGVjKCZwbWNyYWlkX2FkYXB0ZXJfY291bnQpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisgKiBQQ0kgZHJpdmVyIHN0cnVjdHVyZSBvZiBwY21yYWlkIGRyaXZlcgorICovCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcG1jcmFpZF9kcml2ZXIgPSB7CisJLm5hbWUgPSBQTUNSQUlEX0RSSVZFUl9OQU1FLAorCS5pZF90YWJsZSA9IHBtY3JhaWRfcGNpX3RhYmxlLAorCS5wcm9iZSA9IHBtY3JhaWRfcHJvYmUsCisJLnJlbW92ZSA9IHBtY3JhaWRfcmVtb3ZlLAorCS5zdXNwZW5kID0gcG1jcmFpZF9zdXNwZW5kLAorCS5yZXN1bWUgPSBwbWNyYWlkX3Jlc3VtZSwKKwkuc2h1dGRvd24gPSBwbWNyYWlkX3NodXRkb3duCit9OworCisKKy8qKgorICogcG1jcmFpZF9pbml0IC0gbW9kdWxlIGxvYWQgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBfX2luaXQgcG1jcmFpZF9pbml0KHZvaWQpCit7CisJZGV2X3QgZGV2OworCWludCBlcnJvcjsKKworCXBtY3JhaWRfaW5mbygiJXMgRGV2aWNlIERyaXZlciB2ZXJzaW9uOiAlcyAlc1xuIiwKKwkJCSBQTUNSQUlEX0RSSVZFUl9OQU1FLAorCQkJIFBNQ1JBSURfRFJJVkVSX1ZFUlNJT04sIFBNQ1JBSURfRFJJVkVSX0RBVEUpOworCisJZXJyb3IgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIDAsCisJCQkJICAgIFBNQ1JBSURfTUFYX0FEQVBURVJTLAorCQkJCSAgICBQTUNSQUlEX0RFVkZJTEUpOworCisJaWYgKGVycm9yKSB7CisJCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gZ2V0IGEgbWFqb3IgbnVtYmVyIGZvciBhZGFwdGVyc1xuIik7CisJCWdvdG8gb3V0X2luaXQ7CisJfQorCisJcG1jcmFpZF9tYWpvciA9IE1BSk9SKGRldik7CisJcG1jcmFpZF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgUE1DUkFJRF9ERVZGSUxFKTsKKworCWlmIChJU19FUlIocG1jcmFpZF9jbGFzcykpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKHBtY3JhaWRfY2xhc3MpOworCQlwbWNyYWlkX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIHdpdGggd2l0aCBzeXNmcywgZXJyb3IgPSAleFxuIiwKKwkJCSAgICBlcnJvcik7CisJCWdvdG8gb3V0X3VucmVnX2NocmRldjsKKwl9CisKKworCWVycm9yID0gcG1jcmFpZF9uZXRsaW5rX2luaXQoKTsKKworCWlmIChlcnJvcikKKwkJZ290byBvdXRfdW5yZWdfY2hyZGV2OworCisJZXJyb3IgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwbWNyYWlkX2RyaXZlcik7CisKKwlpZiAoZXJyb3IgPT0gMCkKKwkJZ290byBvdXRfaW5pdDsKKworCXBtY3JhaWRfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgcG1jcmFpZCBkcml2ZXIsIGVycm9yID0gJXhcbiIsCisJCSAgICAgZXJyb3IpOworCWNsYXNzX2Rlc3Ryb3kocG1jcmFpZF9jbGFzcyk7CisJcG1jcmFpZF9uZXRsaW5rX3JlbGVhc2UoKTsKKworb3V0X3VucmVnX2NocmRldjoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYocG1jcmFpZF9tYWpvciwgMCksIFBNQ1JBSURfTUFYX0FEQVBURVJTKTsKK291dF9pbml0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBwbWNyYWlkX2V4aXQgLSBtb2R1bGUgdW5sb2FkIGVudHJ5IHBvaW50CisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBwbWNyYWlkX2V4aXQodm9pZCkKK3sKKwlwbWNyYWlkX25ldGxpbmtfcmVsZWFzZSgpOworCWNsYXNzX2Rlc3Ryb3kocG1jcmFpZF9jbGFzcyk7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKE1LREVWKHBtY3JhaWRfbWFqb3IsIDApLAorCQkJCSBQTUNSQUlEX01BWF9BREFQVEVSUyk7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwbWNyYWlkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBtY3JhaWRfaW5pdCk7Cittb2R1bGVfZXhpdChwbWNyYWlkX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0YjNhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKQEAgLTAsMCArMSwxMDI5IEBACisvKgorICogcG1jcmFpZC5oIC0tIFBNQyBTaWVycmEgTWF4UkFJRCBjb250cm9sbGVyIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBQTUMgU2llcnJhIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2lmbmRlZiBfUE1DUkFJRF9ICisjZGVmaW5lIF9QTUNSQUlEX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nvbm5lY3Rvci5oPgorLyoKKyAqIERyaXZlciBuYW1lICAgOiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkcml2ZXIgbmFtZQorICogRGV2aWNlIGZpbGUgICA6IC9kZXYgZmlsZSB0byBiZSB1c2VkIGZvciBtYW5hZ2VtZW50IGludGVyZmFjZXMKKyAqIERyaXZlciB2ZXJzaW9uOiB2ZXJzaW9uIHN0cmluZyBpbiBtYWpvcl92ZXJzaW9uLm1pbm9yX3ZlcnNpb24ucGF0Y2ggZm9ybWF0CisgKiBEcml2ZXIgZGF0ZSAgIDogZGF0ZSBpbmZvcm1hdGlvbiBpbiAiTW9uIGRkIHl5eXkiIGZvcm1hdAorICovCisjZGVmaW5lIFBNQ1JBSURfRFJJVkVSX05BTUUgICAgICAgCSJQTUMgTWF4UkFJRCIKKyNkZWZpbmUgUE1DUkFJRF9ERVZGSUxFCQkJInBtY3NhcyIKKyNkZWZpbmUgUE1DUkFJRF9EUklWRVJfVkVSU0lPTiAgICAJIjEuMC4yIgorI2RlZmluZSBQTUNSQUlEX0RSSVZFUl9EQVRFICAgICAgIAlfX0RBVEVfXworCisvKiBNYXhpbXVtIG51bWJlciBvZiBhZGFwdGVycyBzdXBwb3J0ZWQgYnkgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgKi8KKyNkZWZpbmUgUE1DUkFJRF9NQVhfQURBUFRFUlMJCTEwMjQKKworLyogQml0IGRlZmluaXRpb25zIGFzIHBlciBmaXJtd2FyZSwgYml0IHBvc2l0aW9uIFswXVsxXVsyXS4uLi4uWzMxXSAqLworI2RlZmluZSBQTUNfQklUOChuKSAgICAgICAgICAoMSA8PCAoNy1uKSkKKyNkZWZpbmUgUE1DX0JJVDE2KG4pICAgICAgICAgKDEgPDwgKDE1LW4pKQorI2RlZmluZSBQTUNfQklUMzIobikgICAgICAgICAoMSA8PCAoMzEtbikpCisKKy8qIFBNQyBQQ0kgdmVuZG9yIElEIGFuZCBkZXZpY2UgSUQgdmFsdWVzICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUE1DCQkJMHgxMUY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUE1DX01BWFJBSUQJCTB4NTIyMAorCisvKgorICogTUFYX0NNRCAgICAgICAgICA6IG1heGltdW0gY29tbWFuZHMgdGhhdCBjYW4gYmUgb3V0c3RhbmRpbmcgd2l0aCBJT0EKKyAqIE1BWF9JT19DTUQgICAgICAgOiBjb21tYW5kIGJsb2NrcyBhdmFpbGFibGUgZm9yIElPIGNvbW1hbmRzCisgKiBNQVhfSENBTV9DTUQgICAgIDogY29tbWFuZCBibG9ja3MgYXZhaWJhbGUgZm9yIEhDQU1TCisgKiBNQVhfSU5URVJOQUxfQ01EIDogY29tbWFuZCBibG9ja3MgYXZhaWJsZSBmb3IgaW50ZXJuYWwgY29tbWFuZHMgbGlrZSByZXNldAorICovCisjZGVmaW5lIFBNQ1JBSURfTUFYX0NNRAkJCQkxMDI0CisjZGVmaW5lIFBNQ1JBSURfTUFYX0lPX0NNRAkJCTEwMjAKKyNkZWZpbmUgUE1DUkFJRF9NQVhfSENBTV9DTUQJCQkyCisjZGVmaW5lIFBNQ1JBSURfTUFYX0lOVEVSTkFMX0NNRAkJMgorCisvKiBNQVhfSU9BRExTICAgICAgIDogbWF4IG51bWJlciBvZiBzY2F0dGVyLWdhdGhlciBsaXN0cyBzdXBwb3J0ZWQgYnkgSU9BCisgKiBJT0FETFNfSU5URVJOQUwgIDogbnVtYmVyIG9mIGlvYWRscyBpbmNsdWRlZCBhcyBwYXJ0IG9mIElPQVJDQi4KKyAqIElPQURMU19FWFRFUk5BTCAgOiBudW1iZXIgb2YgaW9hZGxzIGFsbG9jYXRlZCBleHRlcm5hbCB0byBJT0FSQ0IKKyAqLworI2RlZmluZSBQTUNSQUlEX0lPQURMU19JTlRFUk5BTAkJCSAyNworI2RlZmluZSBQTUNSQUlEX0lPQURMU19FWFRFUk5BTAkJCSAzNworI2RlZmluZSBQTUNSQUlEX01BWF9JT0FETFMJCQkgUE1DUkFJRF9JT0FETFNfSU5URVJOQUwKKworLyogSFJSUV9FTlRSWV9TSVpFICA6IHNpemUgb2YgaHJycSBidWZmZXIKKyAqIElPQVJDQl9BTElHTk1FTlQgOiBhbGlnbm1lbnQgcmVxdWlyZWQgZm9yIElPQVJDQgorICogSU9BRExfQUxJR05NRU5UICA6IGFsaWdubWVudCByZXF1aXJlbWVudCBmb3IgSU9BRExzCisgKiBNU0lYX1ZFQ1RPUlMgICAgIDogbnVtYmVyIG9mIE1TSVggdmVjdG9ycyBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBIUlJRX0VOVFJZX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfX2xlMzIpCisjZGVmaW5lIFBNQ1JBSURfSU9BUkNCX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgUE1DUkFJRF9JT0FETF9BTElHTk1FTlQgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBQTUNSQUlEX0lPQVNBX0FMSUdOTUVOVCAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTICAgICAgICAgICAgICAgICAxCisKKy8qIHZhcmlvdXMgb3RoZXIgbGltaXRzICovCisjZGVmaW5lIFBNQ1JBSURfVkVORE9SX0lEX0xFTiAgICAgICAgICAgCSA4CisjZGVmaW5lIFBNQ1JBSURfUFJPRFVDVF9JRF9MRU4gICAgICAgICAgICAJIDE2CisjZGVmaW5lIFBNQ1JBSURfU0VSSUFMX05VTV9MRU4gICAgICAgICAgCSA4CisjZGVmaW5lIFBNQ1JBSURfTFVOX0xFTgkJCSAgICAgICAgIDgKKyNkZWZpbmUgUE1DUkFJRF9NQVhfQ0RCX0xFTiAgICAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBQTUNSQUlEX0RFVklDRV9JRF9MRU4JCQkgOAorI2RlZmluZSBQTUNSQUlEX1NFTlNFX0RBVEFfTEVOCQkJIDI1NgorI2RlZmluZSBQTUNSQUlEX0FERF9DTURfUEFSQU1fTEVOCQkgNDgKKworI2RlZmluZSBQTUNSQUlEX01BWF9CVVNfVE9fU0NBTiAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUE1DUkFJRF9NQVhfTlVNX1RBUkdFVFNfUEVSX0JVUyAgICAgICAgICAyNTYKKyNkZWZpbmUgUE1DUkFJRF9NQVhfTlVNX0xVTlNfUEVSX1RBUkdFVCAgICAgICAgICA4CisKKy8qIElPQSBidXMvdGFyZ2V0L2x1biBudW1iZXIgb2YgSU9BIHJlc291cmNlcyAqLworI2RlZmluZSBQTUNSQUlEX0lPQV9CVVNfSUQgICAgICAgICAgICAgICAgICAgICAgIDB4ZmUKKyNkZWZpbmUgUE1DUkFJRF9JT0FfVEFSR0VUX0lEICAgICAgICAgICAgICAgICAgICAweGZmCisjZGVmaW5lIFBNQ1JBSURfSU9BX0xVTl9JRCAgICAgICAgICAgICAgICAgICAgICAgMHhmZgorI2RlZmluZSBQTUNSQUlEX1ZTRVRfQlVTX0lEICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBQTUNSQUlEX1ZTRVRfTFVOX0lEICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBQTUNSQUlEX1BIWVNfQlVTX0lEICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBQTUNSQUlEX1ZJUlRVQUxfRU5DTF9CVVNfSUQgICAgICAgICAgICAgIDB4OAorI2RlZmluZSBQTUNSQUlEX01BWF9WU0VUX1RBUkdFVFMgICAgICAgICAgICAgICAgIDI0MAorI2RlZmluZSBQTUNSQUlEX01BWF9WU0VUX0xVTlNfUEVSX1RBUkdFVCAgICAgICAgIDgKKworI2RlZmluZSBQTUNSQUlEX0lPQV9NQVhfU0VDVE9SUyAgICAgICAgICAgICAgICAgIDMyNzY3CisjZGVmaW5lIFBNQ1JBSURfVlNFVF9NQVhfU0VDVE9SUyAgICAgICAgICAgICAgICAgNTEyCisjZGVmaW5lIFBNQ1JBSURfTUFYX0NNRF9QRVJfTFVOICAgICAgICAgICAgICAgICAgMjU0CisKKy8qIE51bWJlciBvZiBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMgKHJlc291cmNlcykgKi8KKyNkZWZpbmUgUE1DUkFJRF9NQVhfTlVNX09GX1ZTRVRTICAgICAgICAgICAgICAgICAyNDAKKworLyogVG9kbyA6IENoZWNrIG1heCBsaW1pdCBmb3IgUGhhc2UgMSAqLworI2RlZmluZSBQTUNSQUlEX01BWF9OVU1fT0ZfUEhZX0RFVlMgICAgICAgICAgICAgIDI1NgorCisvKiBNQVhfTlVNX09GX0RFVlMgaW5jbHVkZXMgMSBGUCwgMSBEdW1teSBFbmNsb3N1cmUgZGV2aWNlICovCisjZGVmaW5lIFBNQ1JBSURfTUFYX05VTV9PRl9ERVZTICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChQTUNSQUlEX01BWF9OVU1fT0ZfVlNFVFMgKyBQTUNSQUlEX01BWF9OVU1fT0ZfUEhZX0RFVlMgKyAyKQorCisjZGVmaW5lIFBNQ1JBSURfTUFYX1JFU09VUkNFUyAgICAgICAgICAgICAgICAgICAgUE1DUkFJRF9NQVhfTlVNX09GX0RFVlMKKworLyogQWRhcHRlciBDb21tYW5kcyB1c2VkIGJ5IGRyaXZlciAqLworI2RlZmluZSBQTUNSQUlEX1FVRVJZX1JFU09VUkNFX1NUQVRFICAgICAgICAgICAgIDB4QzIKKyNkZWZpbmUgUE1DUkFJRF9SRVNFVF9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAweEMzCisvKiBvcHRpb25zIHRvIHNlbGVjdCByZXNldCB0YXJnZXQgKi8KKyNkZWZpbmUgRU5BQkxFX1JFU0VUX01PRElGSUVSICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIFJFU0VUX0RFVklDRV9MVU4gICAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBSRVNFVF9ERVZJQ0VfVEFSR0VUICAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgUkVTRVRfREVWSUNFX0JVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisKKyNkZWZpbmUgUE1DUkFJRF9JREVOVElGWV9IUlJRICAgICAgICAgICAgICAgICAgICAweEM0CisjZGVmaW5lIFBNQ1JBSURfUVVFUllfSU9BX0NPTkZJRyAgICAgICAgICAgICAgICAgMHhDNQorI2RlZmluZSBQTUNSQUlEX1FVRVJZX0NNRF9TVEFUVVMJCSAweENCCisjZGVmaW5lIFBNQ1JBSURfQUJPUlRfQ01EICAgICAgICAgICAgICAgICAgICAgICAgMHhDNworCisvKiBDQU5DRUwgQUxMIGNvbW1hbmQsIHByb3ZpZGVzIG9wdGlvbiBmb3Igc2V0dGluZyBTWU5DX0NPTVBMRVRFCisgKiBvbiB0aGUgdGFyZ2V0IHJlc291cmNlcyBmb3Igd2hpY2ggY29tbWFuZHMgZ290IGNhbmNlbGxlZAorICovCisjZGVmaW5lIFBNQ1JBSURfQ0FOQ0VMX0FMTF9SRVFVRVNUUwkJIDB4Q0UKKyNkZWZpbmUgUE1DUkFJRF9TWU5DX0NPTVBMRVRFX0FGVEVSX0NBTkNFTCAgICAgICBQTUNfQklUOCgwKQorCisvKiBIQ0FNIGNvbW1hbmQgYW5kIHR5cGVzIG9mIEhDQU0gc3VwcG9ydGVkIGJ5IElPQSAqLworI2RlZmluZSBQTUNSQUlEX0hPU1RfQ09OVFJPTExFRF9BU1lOQyAgICAgICAgICAgIDB4Q0YKKyNkZWZpbmUgUE1DUkFJRF9IQ0FNX0NPREVfQ09ORklHX0NIQU5HRSAgICAgICAgICAweDAxCisjZGVmaW5lIFBNQ1JBSURfSENBTV9DT0RFX0xPR19EQVRBICAgICAgICAgICAgICAgMHgwMgorCisvKiBJT0Egc2h1dGRvd24gY29tbWFuZCBhbmQgdmFyaW91cyBzaHV0ZG93biB0eXBlcyAqLworI2RlZmluZSBQTUNSQUlEX0lPQV9TSFVURE9XTiAgICAgICAgICAgICAgICAgICAgIDB4RjcKKyNkZWZpbmUgUE1DUkFJRF9TSFVURE9XTl9OT1JNQUwgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFBNQ1JBSURfU0hVVERPV05fUFJFUEFSRV9GT1JfTk9STUFMICAgICAgMHg0MAorI2RlZmluZSBQTUNSQUlEX1NIVVRET1dOX05PTkUgICAgICAgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIFBNQ1JBSURfU0hVVERPV05fQUJCUkVWICAgICAgICAgICAgICAgICAgMHg4MAorCisvKiBTRVQgU1VQUE9SVEVEIERFVklDRVMgY29tbWFuZCBhbmQgdGhlIG9wdGlvbiB0byBzZWxlY3QgYWxsIHRoZQorICogZGV2aWNlcyB0byBiZSBzdXBwb3J0ZWQKKyAqLworI2RlZmluZSBQTUNSQUlEX1NFVF9TVVBQT1JURURfREVWSUNFUyAgICAgICAgICAgIDB4RkIKKyNkZWZpbmUgQUxMX0RFVklDRVNfU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICBQTUNfQklUOCgwKQorCisvKiBUaGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggU0NTSSBXUklURV9CVUZGRVIgY29tbWFuZCAqLworI2RlZmluZSBQTUNSQUlEX1dSX0JVRl9ET1dOTE9BRF9BTkRfU0FWRSAgICAgICAgIDB4MDUKKworLyogSU9BU0MgQ29kZXMgdXNlZCBieSBkcml2ZXIgKi8KKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19TRU5TRV9NQVNLICAgICAgICAgICAgICAgICAweEZGRkZGRjAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSAgICAgICAgICAgKChpb2FzYykgPj4gMjQpCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfU0VOU0VfQ09ERShpb2FzYykgICAgICAgICAgKCgoaW9hc2MpICYgMHgwMGZmMDAwMCkgPj4gMTYpCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfU0VOU0VfUVVBTChpb2FzYykgICAgICAgICAgKCgoaW9hc2MpICYgMHgwMDAwZmYwMCkgPj4gOCkKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19TRU5TRV9TVEFUVVMoaW9hc2MpICAgICAgICAoKGlvYXNjKSAmIDB4MDAwMDAwZmYpCisKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19HT09EX0NPTVBMRVRJT04JCQkweDAwMDAwMDAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfTlJfSU5JVF9DTURfUkVRVUlSRUQJCTB4MDIwNDAyMDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19OUl9JT0FfUkVTRVRfUkVRVUlSRUQJCTB4MDIwNDgwMDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19OUl9TWU5DX1JFUVVJUkVECQkJMHgwMjNGMDAwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX01FX1JFQURfRVJST1JfTk9fUkVBTExPQwkJMHgwMzExMEMwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX0hXX0NBTk5PVF9DT01NVU5JQ0FURQkJMHgwNDA1MDAwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX0hXX0RFVklDRV9USU1FT1VUCQkJMHgwNDA4MDEwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX0hXX0RFVklDRV9CVVNfU1RBVFVTX0VSUk9SCTB4MDQ0NDg1MDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19IV19JT0FfUkVTRVRfUkVRVUlSRUQJCTB4MDQ0NDg2MDAKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19JUl9JTlZBTElEX1JFU09VUkNFX0hBTkRMRSAgICAgICAgMHgwNTI1MDAwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX0FDX1RFUk1JTkFURURfQllfSE9TVAkJMHgwQjVBMDAwMAorI2RlZmluZSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVQgICAgICAgICAgIAkweDA2MjkwMDAwCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVF9CWV9PVEhFUiAgCTB4MDYyOTgwMDAKKworLyogRHJpdmVyIGRlZmluZWQgSU9BU0NzICovCisjZGVmaW5lIFBNQ1JBSURfSU9BU0NfSU9BX1dBU19SRVNFVCAgICAgICAgICAgICAgCTB4MTAwMDAwMDEKKyNkZWZpbmUgUE1DUkFJRF9JT0FTQ19QQ0lfQUNDRVNTX0VSUk9SICAgICAgICAgICAJMHgxMDAwMDAwMgorCisvKiBWYXJpb3VzIHRpbWVvdXQgdmFsdWVzIChpbiBtaWxsaXNlY29uZHMpIHVzZWQuIElmIGFueSBvZiB0aGVzZSBhcmUgY2hpcAorICogc3BlY2lmaWMsIG1vdmUgdGhlbSB0byBwbWNyYWlkX2NoaXBfZGV0YWlscyBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgUE1DUkFJRF9QQ0lfREVBU1NFUlRfVElNRU9VVAkJMjAwMAorI2RlZmluZSBQTUNSQUlEX0JJU1RfVElNRU9VVAkJCTIwMDAKKyNkZWZpbmUgUE1DUkFJRF9BRU5XQUlUX1RJTUVPVVQJCQk1MDAwCisjZGVmaW5lIFBNQ1JBSURfVFJBTlNPUF9USU1FT1VUCQkJNjAwMDAKKworI2RlZmluZSBQTUNSQUlEX1JFU0VUX1RJTUVPVVQJCQkoMiAqIEhaKQorI2RlZmluZSBQTUNSQUlEX0NIRUNLX0ZPUl9SRVNFVF9USU1FT1VUCQkoKEhaIC8gMTApKQorI2RlZmluZSBQTUNSQUlEX1ZTRVRfSU9fVElNRU9VVAkJCSg2MCAqIEhaKQorI2RlZmluZSBQTUNSQUlEX0lOVEVSTkFMX1RJTUVPVVQJCSg2MCAqIEhaKQorI2RlZmluZSBQTUNSQUlEX1NIVVRET1dOX1RJTUVPVVQJCSgxNTAgKiBIWikKKyNkZWZpbmUgUE1DUkFJRF9SRVNFVF9CVVNfVElNRU9VVAkJKDYwICogSFopCisjZGVmaW5lIFBNQ1JBSURfUkVTRVRfSE9TVF9USU1FT1VUCQkoMTUwICogSFopCisjZGVmaW5lIFBNQ1JBSURfUkVRVUVTVF9TRU5TRV9USU1FT1VUCQkoMzAgKiBIWikKKyNkZWZpbmUgUE1DUkFJRF9TRVRfU1VQX0RFVl9USU1FT1VUCQkoMiAqIDYwICogSFopCisKKy8qIHN0cnVjdHVyZSB0byByZXByZXNlbnQgYSBzY2F0dGVyLWdhdGhlciBlbGVtZW50IChJT0FETCBkZXNjcmlwdG9yKSAqLworc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYyB7CisJX19sZTY0IGFkZHJlc3M7CisJX19sZTMyIGRhdGFfbGVuOworCV9fdTggIHJlc2VydmVkWzNdOworCV9fdTggIGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoUE1DUkFJRF9JT0FETF9BTElHTk1FTlQpKSk7CisKKy8qIHBtY3JhaWRfaW9hZGxfZGVzYy5mbGFncyB2YWx1ZXMgKi8KKyNkZWZpbmUgSU9BRExfRkxBR1NfQ0hBSU5FRCAgICAgIFBNQ19CSVQ4KDApCisjZGVmaW5lIElPQURMX0ZMQUdTX0xBU1RfREVTQyAgICBQTUNfQklUOCgxKQorI2RlZmluZSBJT0FETF9GTEFHU19SRUFEX0xBU1QgICAgUE1DX0JJVDgoMSkKKyNkZWZpbmUgSU9BRExfRkxBR1NfV1JJVEVfTEFTVCAgIFBNQ19CSVQ4KDEpCisKKworLyogYWRkaXRpb25hbCBJT0FSQ0IgZGF0YSB3aGljaCBjYW4gYmUgQ0RCIG9yIGFkZGl0aW9uYWwgcmVxdWVzdCBwYXJhbWV0ZXJzCisgKiBvciBsaXN0IG9mIElPQURMcy4gRmlybXdhcmUgc3VwcG9ydHMgbWF4IG9mIDUxMiBieXRlcyBmb3IgSU9BUkNCLCBoZW5jZSB0aGVuCisgKiBudW1iZXIgb2YgSU9BRExzIGFyZSBsaW10ZWQgdG8gMjcuIEluIGNhc2UgdGhleSBhcmUgbW9yZSB0aGFuIDI3LCB0aGV5IHdpbGwKKyAqIGJlIHVzZWQgaW4gY2hhaW5lZCBmb3JtCisgKi8KK3N0cnVjdCBwbWNyYWlkX2lvYXJjYl9hZGRfZGF0YSB7CisJdW5pb24geworCQlzdHJ1Y3QgcG1jcmFpZF9pb2FkbF9kZXNjIGlvYWRsW1BNQ1JBSURfSU9BRExTX0lOVEVSTkFMXTsKKwkJX191OCBhZGRfY21kX3BhcmFtc1tQTUNSQUlEX0FERF9DTURfUEFSQU1fTEVOXTsKKwl9IHU7Cit9OworCisvKgorICogSU9BIFJlcXVlc3QgQ29udHJvbCBCbG9jaworICovCitzdHJ1Y3QgcG1jcmFpZF9pb2FyY2IgeworCV9fbGU2NCBpb2FyY2JfYnVzX2FkZHI7CisJX19sZTMyIHJlc291cmNlX2hhbmRsZTsKKwlfX2xlMzIgcmVzcG9uc2VfaGFuZGxlOworCV9fbGU2NCBpb2FkbF9idXNfYWRkcjsKKwlfX2xlMzIgaW9hZGxfbGVuZ3RoOworCV9fbGUzMiBkYXRhX3RyYW5zZmVyX2xlbmd0aDsKKwlfX2xlNjQgaW9hc2FfYnVzX2FkZHI7CisJX19sZTE2IGlvYXNhX2xlbjsKKwlfX2xlMTYgY21kX3RpbWVvdXQ7CisJX19sZTE2IGFkZF9jbWRfcGFyYW1fb2Zmc2V0OworCV9fbGUxNiBhZGRfY21kX3BhcmFtX2xlbmd0aDsKKwlfX2xlMzIgcmVzZXJ2ZWQxWzJdOworCV9fbGUzMiByZXNlcnZlZDI7CisJX191OCAgcmVxdWVzdF90eXBlOworCV9fdTggIHJlcXVlc3RfZmxhZ3MwOworCV9fdTggIHJlcXVlc3RfZmxhZ3MxOworCV9fdTggIGhycnFfaWQ7CisJX191OCAgY2RiW1BNQ1JBSURfTUFYX0NEQl9MRU5dOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYl9hZGRfZGF0YSBhZGRfZGF0YTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKFBNQ1JBSURfSU9BUkNCX0FMSUdOTUVOVCkpKTsKKworLyogd2VsbCBrbm93biByZXNvdXJjZSBoYW5kbGUgdmFsdWVzICovCisjZGVmaW5lIFBNQ1JBSURfSU9BX1JFU19IQU5ETEUgICAgICAgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgUE1DUkFJRF9JTlZBTElEX1JFU19IQU5ETEUgICAgMAorCisvKiBwbWNyYWlkX2lvYXJjYi5yZXF1ZXN0X3R5cGUgdmFsdWVzICovCisjZGVmaW5lIFJFUV9UWVBFX1NDU0kgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUkVRX1RZUEVfSU9BQ01EICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBSRVFfVFlQRV9IQ0FNICAgICAgICAgICAgICAgICAweDAyCisKKy8qIHBtY3JhaWRfaW9hcmNiLmZsYWdzMCB2YWx1ZXMgKi8KKyNkZWZpbmUgVFJBTlNGRVJfRElSX1dSSVRFICAgICAgICAgICAgUE1DX0JJVDgoMCkKKyNkZWZpbmUgSU5ISUJJVF9VTF9DSEVDSyAgICAgICAgICAgICAgUE1DX0JJVDgoMikKKyNkZWZpbmUgU1lOQ19PVkVSUklERSAgICAgICAgICAgICAgICAgUE1DX0JJVDgoMykKKyNkZWZpbmUgU1lOQ19DT01QTEVURSAgICAgICAgICAgICAgICAgUE1DX0JJVDgoNCkKKyNkZWZpbmUgTk9fTElOS19ERVNDUyAgICAgICAgICAgICAgICAgUE1DX0JJVDgoNSkKKworLyogcG1jcmFpZF9pb2FyY2IuZmxhZ3MxIHZhbHVlcyAqLworI2RlZmluZSBERUxBWV9BRlRFUl9SRVNFVCAgICAgICAgICAgICBQTUNfQklUOCgwKQorI2RlZmluZSBUQVNLX1RBR19TSU1QTEUgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFRBU0tfVEFHX09SREVSRUQgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVEFTS19UQUdfUVVFVUVfSEVBRCAgICAgICAgICAgMHgzMAorCisvKiB0b2dnbGUgYml0IG9mZnNldCBpbiByZXNwb25zZSBoYW5kbGUgKi8KKyNkZWZpbmUgSFJSUV9UT0dHTEVfQklUICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBIUlJRX1JFU1BPTlNFX0JJVCAgICAgICAgICAgICAweDAyCisKKy8qIElPQSBTdGF0dXMgQXJlYSAqLworc3RydWN0IHBtY3JhaWRfaW9hc2FfdnNldCB7CisJX19sZTMyIGZhaWxpbmdfbGJhX2hpOworCV9fbGUzMiBmYWlsaW5nX2xiYV9sbzsKKwlfX2xlMzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOworCitzdHJ1Y3QgcG1jcmFpZF9pb2FzYSB7CisJX19sZTMyIGlvYXNjOworCV9fbGUxNiByZXR1cm5lZF9zdGF0dXNfbGVuZ3RoOworCV9fbGUxNiBhdmFpbGFibGVfc3RhdHVzX2xlbmd0aDsKKwlfX2xlMzIgcmVzaWR1YWxfZGF0YV9sZW5ndGg7CisJX19sZTMyIGlsaWQ7CisJX19sZTMyIGZkX2lvYXNjOworCV9fbGUzMiBmZF9yZXNfYWRkcmVzczsKKwlfX2xlMzIgZmRfcmVzX2hhbmRsZTsKKwlfX2xlMzIgcmVzZXJ2ZWQ7CisKKwkvKiByZXNvdXJjZSBzcGVjaWZpYyBzZW5zZSBpbmZvcm1hdGlvbiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHBtY3JhaWRfaW9hc2FfdnNldCB2c2V0OworCX0gdTsKKworCS8qIElPQSBhdXRvc2Vuc2UgZGF0YSAqLworCV9fbGUxNiBhdXRvX3NlbnNlX2xlbmd0aDsKKwlfX2xlMTYgZXJyb3JfZGF0YV9sZW5ndGg7CisJX191OCAgc2Vuc2VfZGF0YVtQTUNSQUlEX1NFTlNFX0RBVEFfTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CisKKyNkZWZpbmUgUE1DUkFJRF9EUklWRVJfSUxJRCAgICAgICAgICAgMHhmZmZmZmZmZgorCisvKiBDb25maWcgVGFibGUgRW50cnkgcGVyIFJlc291cmNlICovCitzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgeworCV9fdTggIHJlc291cmNlX3R5cGU7CisJX191OCAgYnVzX3Byb3RvY29sOworCV9fbGUxNiBhcnJheV9pZDsKKwlfX3U4ICBjb21tb25fZmxhZ3MwOworCV9fdTggIGNvbW1vbl9mbGFnczE7CisJX191OCAgdW5pcXVlX2ZsYWdzMDsKKwlfX3U4ICB1bmlxdWVfZmxhZ3MxOwkvKmFsc28gdXNlZCBhcyB2c2V0IHRhcmdldF9pZCAqLworCV9fbGUzMiByZXNvdXJjZV9oYW5kbGU7CisJX19sZTMyIHJlc291cmNlX2FkZHJlc3M7CisJX191OCAgZGV2aWNlX2lkW1BNQ1JBSURfREVWSUNFX0lEX0xFTl07CisJX191OCAgbHVuW1BNQ1JBSURfTFVOX0xFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCwgYWxpZ25lZCg0KSkpOworCisvKiByZXNvdXJjZSB0eXBlcyAoY29uZmlnX3RhYmxlX2VudHJ5LnJlc291cmNlX3R5cGUgdmFsdWVzKSAqLworI2RlZmluZSBSRVNfVFlQRV9BRl9EQVNEICAgICAweDAwCisjZGVmaW5lIFJFU19UWVBFX0dTQ1NJICAgICAgIDB4MDEKKyNkZWZpbmUgUkVTX1RZUEVfVlNFVCAgICAgICAgMHgwMgorI2RlZmluZSBSRVNfVFlQRV9JT0FfRlAgICAgICAweEZGCisKKyNkZWZpbmUgUkVTX0lTX0lPQShyZXMpICAgICAgKChyZXMpLnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfSU9BX0ZQKQorI2RlZmluZSBSRVNfSVNfR1NDU0kocmVzKSAgICAoKHJlcykucmVzb3VyY2VfdHlwZSA9PSBSRVNfVFlQRV9HU0NTSSkKKyNkZWZpbmUgUkVTX0lTX1ZTRVQocmVzKSAgICAgKChyZXMpLnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfVlNFVCkKKyNkZWZpbmUgUkVTX0lTX0FGREFTRChyZXMpICAgKChyZXMpLnJlc291cmNlX3R5cGUgPT0gUkVTX1RZUEVfQUZfREFTRCkKKworLyogYnVzX3Byb3RvY29sIHZhbHVlcyB1c2VkIGJ5IGRyaXZlciAqLworI2RlZmluZSBSRVNfVFlQRV9WRU5DTE9TVVJFICAweDgKKworLyogY29uZmlnX3RhYmxlX2VudHJ5LmNvbW1vbl9mbGFnczAgKi8KKyNkZWZpbmUgTVVMVElQQVRIX1JFU09VUkNFICAgUE1DX0JJVDMyKDApCisKKy8qIHVuaXF1ZV9mbGFnczEgKi8KKyNkZWZpbmUgSU1QT1JUX01PREVfTUFOVUFMICAgUE1DX0JJVDgoMCkKKworLyogd2VsbCBrbm93biByZXNvdXJjZSBoYW5kbGUgdmFsdWVzICovCisjZGVmaW5lIFJFU19IQU5ETEVfSU9BICAgICAgIDB4RkZGRkZGRkYKKyNkZWZpbmUgUkVTX0hBTkRMRV9OT05FICAgICAgMHgwMDAwMDAwMAorCisvKiB3ZWxsIGtub3duIHJlc291cmNlIGFkZHJlc3MgdmFsdWVzICovCisjZGVmaW5lIFJFU19BRERSRVNTX0lPQUZQICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUkVTX0FERFJFU1NfSU5WQUxJRCAgMHhGRkZGRkZGRgorCisvKiBCVVMvVEFSR0VUL0xVTiB2YWx1ZXMgZnJvbSByZXNvdXJjZV9hZGRyciAqLworI2RlZmluZSBSRVNfQlVTKHJlc19hZGRyKSAgICAobGUzMl90b19jcHUocmVzX2FkZHIpICYgMHhGRikKKyNkZWZpbmUgUkVTX1RBUkdFVChyZXNfYWRkcikgKChsZTMyX3RvX2NwdShyZXNfYWRkcikgPj4gMTYpICYgMHhGRikKKyNkZWZpbmUgUkVTX0xVTihyZXNfYWRkcikgICAgMHgwCisKKy8qIGNvbmZpZ3VyYXRpb24gdGFibGUgc3RydWN0dXJlICovCitzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUgeworCV9fbGUxNiBudW1fZW50cmllczsKKwlfX3U4ICB0YWJsZV9mb3JtYXQ7CisJX191OCAgcmVzZXJ2ZWQxOworCV9fdTggIGZsYWdzOworCV9fdTggIHJlc2VydmVkMlsxMV07CisJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5IGVudHJpZXNbUE1DUkFJRF9NQVhfUkVTT1VSQ0VTXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CisKKy8qIGNvbmZpZ190YWJsZS5mbGFncyB2YWx1ZSAqLworI2RlZmluZSBNSUNST0NPREVfVVBEQVRFX1JFUVVJUkVECQlQTUNfQklUMzIoMCkKKworLyoKKyAqIEhDQU0gZm9ybWF0CisgKi8KKyNkZWZpbmUgUE1DUkFJRF9IT1NUUkNCX0xETlNJWkUgCQk0MDU2CisKKy8qIEVycm9yIGxvZyBub3RpZmljYXRpb24gZm9ybWF0ICovCitzdHJ1Y3QgcG1jcmFpZF9ob3N0cmNiX2Vycm9yIHsKKwlfX2xlMzIgZmRfaW9hc2M7CisJX19sZTMyIGZkX3JhOworCV9fbGUzMiBmZF9yaDsKKwlfX2xlMzIgcHJjOworCXVuaW9uIHsKKwkJX191OCBkYXRhW1BNQ1JBSURfSE9TVFJDQl9MRE5TSVpFXTsKKwl9IHU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKKworc3RydWN0IHBtY3JhaWRfaGNhbV9oZHIgeworCV9fdTggIG9wX2NvZGU7CisJX191OCAgbm90aWZpY2F0aW9uX3R5cGU7CisJX191OCAgbm90aWZpY2F0aW9uX2xvc3Q7CisJX191OCAgZmxhZ3M7CisJX191OCAgb3ZlcmxheV9pZDsKKwlfX3U4ICByZXNlcnZlZDFbM107CisJX19sZTMyIGlsaWQ7CisJX19sZTMyIHRpbWVzdGFtcDE7CisJX19sZTMyIHRpbWVzdGFtcDI7CisJX19sZTMyIGRhdGFfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKKworI2RlZmluZSBQTUNSQUlEX0FFTl9HUk9VUAkweDMKKworc3RydWN0IHBtY3JhaWRfaGNhbV9jY24geworCXN0cnVjdCBwbWNyYWlkX2hjYW1faGRyIGhlYWRlcjsKKwlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGVfZW50cnkgY2ZnX2VudHJ5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKTsKKworc3RydWN0IHBtY3JhaWRfaGNhbV9sZG4geworCXN0cnVjdCBwbWNyYWlkX2hjYW1faGRyIGhlYWRlcjsKKwlzdHJ1Y3QgcG1jcmFpZF9ob3N0cmNiX2Vycm9yIGVycm9yX2xvZzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSk7CisKKy8qIHBtY3JhaWRfaGNhbS5vcF9jb2RlIHZhbHVlcyAqLworI2RlZmluZSBIT1NUUkNCX1RZUEVfQ0NOCQkJMHhFMQorI2RlZmluZSBIT1NUUkNCX1RZUEVfTEROCQkJMHhFMgorCisvKiBwbWNyYWlkX2hjYW0ubm90aWZpY2F0aW9uX3R5cGUgdmFsdWVzICovCisjZGVmaW5lIE5PVElGSUNBVElPTl9UWVBFX0VOVFJZX0NIQU5HRUQJCTB4MAorI2RlZmluZSBOT1RJRklDQVRJT05fVFlQRV9FTlRSWV9ORVcJCTB4MQorI2RlZmluZSBOT1RJRklDQVRJT05fVFlQRV9FTlRSWV9ERUxFVEVECQkweDIKKyNkZWZpbmUgTk9USUZJQ0FUSU9OX1RZUEVfRVJST1JfTE9HCQkweDEwCisjZGVmaW5lIE5PVElGSUNBVElPTl9UWVBFX0lORk9STUFUSU9OX0xPRwkweDExCisKKyNkZWZpbmUgSE9TVFJDQl9OT1RJRklDQVRJT05TX0xPU1QJCVBNQ19CSVQ4KDApCisKKy8qIHBtY3JhaWRfaGNhbS5mbGFncyB2YWx1ZXMgKi8KKyNkZWZpbmUgSE9TVFJDQl9JTlRFUk5BTF9PUF9FUlJPUgkJUE1DX0JJVDgoMCkKKyNkZWZpbmUgSE9TVFJDQl9FUlJPUl9SRVNQT05TRV9TRU5UCQlQTUNfQklUOCgxKQorCisvKiBwbWNyYWlkX2hjYW0ub3ZlcmxheV9pZCB2YWx1ZXMgKi8KKyNkZWZpbmUgSE9TVFJDQl9PVkVSTEFZX0lEXzA4CQkJMHgwOAorI2RlZmluZSBIT1NUUkNCX09WRVJMQVlfSURfMDkJCQkweDA5CisjZGVmaW5lIEhPU1RSQ0JfT1ZFUkxBWV9JRF8xMQkJCTB4MTEKKyNkZWZpbmUgSE9TVFJDQl9PVkVSTEFZX0lEXzEyCQkJMHgxMgorI2RlZmluZSBIT1NUUkNCX09WRVJMQVlfSURfMTMJCQkweDEzCisjZGVmaW5lIEhPU1RSQ0JfT1ZFUkxBWV9JRF8xNAkJCTB4MTQKKyNkZWZpbmUgSE9TVFJDQl9PVkVSTEFZX0lEXzE2CQkJMHgxNgorI2RlZmluZSBIT1NUUkNCX09WRVJMQVlfSURfMTcJCQkweDE3CisjZGVmaW5lIEhPU1RSQ0JfT1ZFUkxBWV9JRF8yMAkJCTB4MjAKKyNkZWZpbmUgSE9TVFJDQl9PVkVSTEFZX0lEX0ZGCQkJMHhGRgorCisvKiBJbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBjYXJkIGRldGFpbHMgKi8KK3N0cnVjdCBwbWNyYWlkX2NoaXBfZGV0YWlscyB7CisJLyogaGFyZHdhcmUgcmVnaXN0ZXIgb2Zmc2V0cyAqLworCXVuc2lnbmVkIGxvbmcgIGlvYXN0YXR1czsKKwl1bnNpZ25lZCBsb25nICBpb2FycmluOworCXVuc2lnbmVkIGxvbmcgIG1haWxib3g7CisJdW5zaWduZWQgbG9uZyAgZ2xvYmFsX2ludHJfbWFzazsKKwl1bnNpZ25lZCBsb25nICBpb2FfaG9zdF9pbnRyOworCXVuc2lnbmVkIGxvbmcgIGlvYV9ob3N0X2ludHJfY2xyOworCXVuc2lnbmVkIGxvbmcgIGlvYV9ob3N0X21hc2s7CisJdW5zaWduZWQgbG9uZyAgaW9hX2hvc3RfbWFza19jbHI7CisJdW5zaWduZWQgbG9uZyAgaG9zdF9pb2FfaW50cjsKKwl1bnNpZ25lZCBsb25nICBob3N0X2lvYV9pbnRyX2NscjsKKworCS8qIHRpbWVvdXQgdXNlZCBkdXJpbmcgdHJhbnNpdGlvbmFsIHRvIG9wZXJhdGlvbmFsIHN0YXRlICovCisJdW5zaWduZWQgbG9uZyB0cmFuc29wX3RpbWVvdXQ7Cit9OworCisvKiBJT0EgdG8gSE9TVCBkb29yYmVsbHMgKGludGVycnVwdHMpICovCisjZGVmaW5lIElOVFJTX1RSQU5TSVRJT05fVE9fT1BFUkFUSU9OQUwJCVBNQ19CSVQzMigwKQorI2RlZmluZSBJTlRSU19JT0FSQ0JfVFJBTlNGRVJfRkFJTEVECQlQTUNfQklUMzIoMykKKyNkZWZpbmUgSU5UUlNfSU9BX1VOSVRfQ0hFQ0sJCQlQTUNfQklUMzIoNCkKKyNkZWZpbmUgSU5UUlNfTk9fSFJSUV9GT1JfQ01EX1JFU1BPTlNFCQlQTUNfQklUMzIoNSkKKyNkZWZpbmUgSU5UUlNfQ1JJVElDQUxfT1BfSU5fUFJPR1JFU1MJCVBNQ19CSVQzMig2KQorI2RlZmluZSBJTlRSU19JT19ERUJVR19BQ0sJCQlQTUNfQklUMzIoNykKKyNkZWZpbmUgSU5UUlNfSU9BUlJJTl9MT1NUCQkJUE1DX0JJVDMyKDI3KQorI2RlZmluZSBJTlRSU19TWVNURU1fQlVTX01NSU9fRVJST1IJCVBNQ19CSVQzMigyOCkKKyNkZWZpbmUgSU5UUlNfSU9BX1BST0NFU1NPUl9FUlJPUgkJUE1DX0JJVDMyKDI5KQorI2RlZmluZSBJTlRSU19IUlJRX1ZBTElECQkJUE1DX0JJVDMyKDMwKQorI2RlZmluZSBJTlRSU19PUEVSQVRJT05BTF9TVEFUVVMJCVBNQ19CSVQzMigwKQorCisvKiBIb3N0IHRvIElPQSBEb29yYmVsbHMgKi8KKyNkZWZpbmUgRE9PUkJFTExfUlVOVElNRV9SRVNFVAkJCVBNQ19CSVQzMigxKQorI2RlZmluZSBET09SQkVMTF9JT0FfUkVTRVRfQUxFUlQJCVBNQ19CSVQzMig3KQorI2RlZmluZSBET09SQkVMTF9JT0FfREVCVUdfQUxFUlQJCVBNQ19CSVQzMig5KQorI2RlZmluZSBET09SQkVMTF9FTkFCTEVfREVTVFJVQ1RJVkVfRElBR1MJUE1DX0JJVDMyKDgpCisjZGVmaW5lIERPT1JCRUxMX0lPQV9TVEFSVF9CSVNUCQkJUE1DX0JJVDMyKDIzKQorI2RlZmluZSBET09SQkVMTF9SRVNFVF9JT0EJCQlQTUNfQklUMzIoMzEpCisKKy8qIEdsb2JhbCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciB2YWx1ZSAqLworI2RlZmluZSBHTE9CQUxfSU5URVJSVVBUX01BU0sJCQkweDRVTEwKKworI2RlZmluZSBQTUNSQUlEX0VSUk9SX0lOVEVSUlVQVFMJKElOVFJTX0lPQVJDQl9UUkFOU0ZFUl9GQUlMRUQgfCBcCisJCQkJCSBJTlRSU19JT0FfVU5JVF9DSEVDSyB8IFwKKwkJCQkJIElOVFJTX05PX0hSUlFfRk9SX0NNRF9SRVNQT05TRSB8IFwKKwkJCQkJIElOVFJTX0lPQVJSSU5fTE9TVCB8IFwKKwkJCQkJIElOVFJTX1NZU1RFTV9CVVNfTU1JT19FUlJPUiB8IFwKKwkJCQkJIElOVFJTX0lPQV9QUk9DRVNTT1JfRVJST1IpCisKKyNkZWZpbmUgUE1DUkFJRF9QQ0lfSU5URVJSVVBUUwkJKFBNQ1JBSURfRVJST1JfSU5URVJSVVBUUyB8IFwKKwkJCQkJIElOVFJTX0hSUlFfVkFMSUQgfCBcCisJCQkJCSBJTlRSU19DUklUSUNBTF9PUF9JTl9QUk9HUkVTUyB8XAorCQkJCQkgSU5UUlNfVFJBTlNJVElPTl9UT19PUEVSQVRJT05BTCkKKworLyogY29udHJvbF9ibG9jaywgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlIGNvbW1hbmRzIGNvbnRhaW5zIElPQVJDQiwgSU9BRExzCisgKiBtZW1vcnkgZm9yIElPQVNBLiBBZGRpdGlvbmFsIDMgKiAxNiBieXRlcyBhcmUgYWxsb2NhdGVkIGluIG9yZGVyIHRvIHN1cHBvcnQKKyAqIGFkZGl0aW9uYWwgcmVxdWVzdCBwYXJhbWV0ZXJzIChvZiBtYXggc2l6ZSA0OCkgYW55IGNvbW1hbmQuCisgKi8KK3N0cnVjdCBwbWNyYWlkX2NvbnRyb2xfYmxvY2sgeworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiBpb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfaW9hZGxfZGVzYyBpb2FkbFtQTUNSQUlEX0lPQURMU19FWFRFUk5BTCArIDNdOworCXN0cnVjdCBwbWNyYWlkX2lvYXNhIGlvYXNhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkLCBhbGlnbmVkKFBNQ1JBSURfSU9BUkNCX0FMSUdOTUVOVCkpKTsKKworLyogcG1jcmFpZF9zZ2xpc3QgLSBTY2F0dGVyLWdhdGhlciBsaXN0IGFsbG9jYXRlZCBmb3IgcGFzc3Rocm91Z2ggaW9jdGxzCisgKi8KK3N0cnVjdCBwbWNyYWlkX3NnbGlzdCB7CisJdTMyIG9yZGVyOworCXUzMiBudW1fc2c7CisJdTMyIG51bV9kbWFfc2c7CisJdTMyIGJ1ZmZlcl9sZW47CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNjYXR0ZXJsaXN0WzFdOworfTsKKworLyogcG1jcmFpZF9jbWQgLSBMTEQgcmVwcmVzZW50YXRpb24gb2YgU0NTSSBjb21tYW5kICovCitzdHJ1Y3QgcG1jcmFpZF9jbWQgeworCisJLyogUHRyIGFuZCBidXMgYWRkcmVzcyBvZiBETUEuYWJsZSBjb250cm9sIGJsb2NrIGZvciB0aGlzIGNvbW1hbmQgKi8KKwlzdHJ1Y3QgcG1jcmFpZF9jb250cm9sX2Jsb2NrICppb2FfY2I7CisJZG1hX2FkZHJfdCBpb2FfY2JfYnVzX2FkZHI7CisKKwkvKiBzZW5zZSBidWZmZXIgZm9yIFJFUVVFU1QgU0VOU0UgY29tbWFuZCBpZiBmaXJtd2FyZSBpcyBub3Qgc2VuZGluZworCSAqIGF1dG8gc2Vuc2UgZGF0YQorCSAqLworCWRtYV9hZGRyX3Qgc2Vuc2VfYnVmZmVyX2RtYTsKKwlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CisJdTggKnNlbnNlX2J1ZmZlcjsKKworCS8qIHBvaW50ZXIgdG8gbWlkIGxheWVyIHN0cnVjdHVyZSBvZiBTQ1NJIGNvbW1hbmRzICovCisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQ7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiB3YWl0X2Zvcl9jb21wbGV0aW9uOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiBuZWVkZWQgZm9yIGludGVybmFsIGNvbW1hbmRzICovCisJdTMyIHRpbWVvdXQ7CQkJLyogY3VycmVudCB0aW1lb3V0IHZhbHVlICovCisJdTMyIGluZGV4OwkJCS8qIGluZGV4IGludG8gdGhlIGNvbW1hbmQgbGlzdCAqLworCXU4IGNvbXBsZXRpb25fcmVxOwkJLyogZm9yIGhhbmRsaW5nIGludGVybmFsIGNvbW1hbmRzICovCisJdTggcmVsZWFzZTsJCQkvKiBmb3IgaGFuZGxpbmcgY29tcGxldGlvbnMgKi8KKworCXZvaWQgKCpjbWRfZG9uZSkgKHN0cnVjdCBwbWNyYWlkX2NtZCAqKTsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqZHJ2X2luc3Q7CisKKwlzdHJ1Y3QgcG1jcmFpZF9zZ2xpc3QgKnNnbGlzdDsgLyogdXNlZCBmb3IgcGFzc3Rocm91Z2ggSU9DVExzICovCisKKwkvKiBzY3JhdGNoIHVzZWQgZHVyaW5nIHJlc2V0IHNlcXVlbmNlICovCisJdW5pb24geworCQl1bnNpZ25lZCBsb25nIHRpbWVfbGVmdDsKKwkJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlczsKKwl9IHU7Cit9OworCisvKgorICogSW50ZXJydXB0IHJlZ2lzdGVycyBvZiBJT0EKKyAqLworc3RydWN0IHBtY3JhaWRfaW50ZXJydXB0cyB7CisJdm9pZCBfX2lvbWVtICppb2FfaG9zdF9pbnRlcnJ1cHRfcmVnOworCXZvaWQgX19pb21lbSAqaW9hX2hvc3RfaW50ZXJydXB0X2Nscl9yZWc7CisJdm9pZCBfX2lvbWVtICppb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19yZWc7CisJdm9pZCBfX2lvbWVtICppb2FfaG9zdF9pbnRlcnJ1cHRfbWFza19jbHJfcmVnOworCXZvaWQgX19pb21lbSAqZ2xvYmFsX2ludGVycnVwdF9tYXNrX3JlZzsKKwl2b2lkIF9faW9tZW0gKmhvc3RfaW9hX2ludGVycnVwdF9yZWc7CisJdm9pZCBfX2lvbWVtICpob3N0X2lvYV9pbnRlcnJ1cHRfY2xyX3JlZzsKK307CisKKy8qIElTUiBwYXJhbWV0ZXJzIExMRCBhbGxvY2F0ZXMgKG9uZSBmb3IgZWFjaCBNU0ktWCBpZiBlbmFibGVkKSB2ZWN0b3JzICovCitzdHJ1Y3QgcG1jcmFpZF9pc3JfcGFyYW0geworCXU4IGhycnFfaWQ7CQkJLyogaHJycSBlbnRyeSBpbmRleCAqLworCXUxNiB2ZWN0b3I7CQkJLyogYWxsb2NhdGVkIG1zaS14IHZlY3RvciAqLworCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpkcnZfaW5zdDsKK307CisKKy8qIEFFTiBtZXNzYWdlIGhlYWRlciBzZW50IGFzIHBhcnQgb2YgZXZlbnQgZGF0YSB0byBhcHBsaWNhdGlvbnMgKi8KK3N0cnVjdCBwbWNyYWlkX2Flbl9tc2cgeworCXUzMiBob3N0bm87CisJdTMyIGxlbmd0aDsKKwl1OCAgcmVzZXJ2ZWRbOF07CisJdTggIGRhdGFbMF07Cit9OworCitzdHJ1Y3QgcG1jcmFpZF9ob3N0cmNiIHsKKwlzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqZHJ2X2luc3Q7CisJc3RydWN0IHBtY3JhaWRfYWVuX21zZyAqbXNnOworCXN0cnVjdCBwbWNyYWlkX2hjYW1faGRyICpoY2FtOwkvKiBwb2ludGVyIHRvIGhjYW0gYnVmZmVyICovCisJc3RydWN0IHBtY3JhaWRfY21kICAqY21kOyAgICAgICAvKiBwb2ludGVyIHRvIGNvbW1hbmQgYmxvY2sgdXNlZCAqLworCWRtYV9hZGRyX3QgYmFkZHI7CQkvKiBzeXN0ZW0gYWRkcmVzcyBvZiBoY2FtIGJ1ZmZlciAqLworCWF0b21pY190IGlnbm9yZTsJCS8qIHByb2Nlc3MgSENBTSByZXNwb25zZSA/ICovCit9OworCisjZGVmaW5lIFBNQ1JBSURfQUVOX0hEUl9TSVpFCXNpemVvZihzdHJ1Y3QgcG1jcmFpZF9hZW5fbXNnKQorCisKKworLyoKKyAqIFBlciBhZGFwdGVyIHN0cnVjdHVyZSBtYWludGFpbmVkIGJ5IExMRAorICovCitzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSB7CisJLyogQXJyYXkgb2YgYWxsb3dlZC10by1iZS1leHBvc2VkIHJlc291cmNlcywgaW5pdGlhbGl6ZWQgZnJvbQorCSAqIENvbmZpZ3V0YXRpb24gVGFibGUsIGxhdGVyIHVwZGF0ZWQgd2l0aCBDQ05zCisJICovCisJc3RydWN0IHBtY3JhaWRfcmVzb3VyY2VfZW50cnkgKnJlc19lbnRyaWVzOworCisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX3Jlc19xOwkvKiByZXNfZW50cmllcyBsaXN0cyBmb3IgZWFzeSBsb29rdXAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWRfcmVzX3E7CS8qIExpc3Qgb2YgdG8gYmUgZXhwb3NlZCByZXNvdXJjZXMgKi8KKwlzcGlubG9ja190IHJlc291cmNlX2xvY2s7CS8qIHNwaW5sb2NrIHRvIHByb3RlY3QgcmVzb3VyY2UgbGlzdCAqLworCisJdm9pZCBfX2lvbWVtICptYXBwZWRfZG1hX2FkZHI7CisJdm9pZCBfX2lvbWVtICppb2Ffc3RhdHVzOwkvKiBJb21hcHBlZCBJT0Egc3RhdHVzIHJlZ2lzdGVyICovCisJdm9pZCBfX2lvbWVtICptYWlsYm94OwkJLyogSW9tYXBwZWQgbWFpbGJveCByZWdpc3RlciAqLworCXZvaWQgX19pb21lbSAqaW9hcnJpbjsJCS8qIElPbWFwcGVkIElPQVJSIElOIHJlZ2lzdGVyICovCisKKwlzdHJ1Y3QgcG1jcmFpZF9pbnRlcnJ1cHRzIGludF9yZWdzOworCXN0cnVjdCBwbWNyYWlkX2NoaXBfZGV0YWlscyAqY2hpcF9jZmc7CisKKwkvKiBIb3N0UkNCcyBuZWVkZWQgZm9yIEhDQU0gKi8KKwlzdHJ1Y3QgcG1jcmFpZF9ob3N0cmNiIGxkbjsKKwlzdHJ1Y3QgcG1jcmFpZF9ob3N0cmNiIGNjbjsKKworCisJLyogQnVzIGFkZHJlc3Mgb2Ygc3RhcnQgb2YgSFJSUSAqLworCWRtYV9hZGRyX3QgaHJycV9zdGFydF9idXNfYWRkcltQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOworCisJLyogUG9pbnRlciB0byAxc3QgZW50cnkgb2YgSFJSUSAqLworCV9fYmUzMiAqaHJycV9zdGFydFtQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOworCisJLyogUG9pbnRlciB0byBsYXN0IGVudHJ5IG9mIEhSUlEgKi8KKwlfX2JlMzIgKmhycnFfZW5kW1BNQ1JBSURfTlVNX01TSVhfVkVDVE9SU107CisKKwkvKiBQb2ludGVyIHRvIGN1cnJlbnQgcG9pbnRlciBvZiBocnJxICovCisJX19iZTMyICpocnJxX2N1cnJbUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTXTsKKworCS8qIExvY2sgZm9yIEhSUlEgYWNjZXNzICovCisJc3BpbmxvY2tfdCBocnJxX2xvY2tbUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTXTsKKworCS8qIEV4cGVjdGVkIHRvZ2dsZSBiaXQgYXQgaG9zdCAqLworCXU4IGhvc3RfdG9nZ2xlX2JpdFtQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOworCisJLyogTm8gb2YgUmVzZXQgSU9BIHJldHJpZXMgLiBJT0EgbWFya2VkIGRlYWQgaWYgdGhyZXNob2xkIGV4Y2VlZHMgKi8KKwl1OCBpb2FfcmVzZXRfYXR0ZW1wdHM7CisjZGVmaW5lIFBNQ1JBSURfUkVTRVRfQVRURU1QVFMgMworCisJLyogV2FpdCBRIGZvciAgdGhyZWFkcyB0byB3YWl0IGZvciBSZXNldCBJT0EgY29tcGxldGlvbiAqLworCXdhaXRfcXVldWVfaGVhZF90IHJlc2V0X3dhaXRfcTsKKwlzdHJ1Y3QgcG1jcmFpZF9jbWQgKnJlc2V0X2NtZDsKKworCS8qIHN0cnVjdHVyZXMgZm9yIHN1cHBvcnRpbmcgU0lHSU8gYmFzZWQgQUVOLiAqLworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICphZW5fcXVldWU7CisJc3RydWN0IG11dGV4IGFlbl9xdWV1ZV9sb2NrOwkvKiBsb2NrIGZvciBhZW4gc3Vic2NyaWJlcnMgbGlzdCAqLworCXN0cnVjdCBjZGV2IGNkZXY7CisKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwkvKiBtaWQgbGF5ZXIgaW50ZXJmYWNlIHN0cnVjdHVyZSBoYW5kbGUgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsJLyogUENJIGRldmljZSBzdHJ1Y3R1cmUgaGFuZGxlICovCisKKwl1OCAgY3VycmVudF9sb2dfbGV2ZWw7CS8qIGRlZmF1bHQgbGV2ZWwgZm9yIGxvZ2dpbmcgSU9BU0MgZXJyb3JzICovCisKKwl1OCAgbnVtX2hycnE7CQkvKiBOdW1iZXIgb2YgaW50ZXJydXB0IHZlY3RvcnMgYWxsb2NhdGVkICovCisJZGV2X3QgZGV2OwkJLyogTWFqb3ItTWlub3IgbnVtYmVycyBmb3IgQ2hhciBkZXZpY2UgKi8KKworCS8qIFVzZWQgYXMgSVNSIGhhbmRsZXIgYXJndW1lbnQgKi8KKwlzdHJ1Y3QgcG1jcmFpZF9pc3JfcGFyYW0gaHJycV92ZWN0b3JbUE1DUkFJRF9OVU1fTVNJWF9WRUNUT1JTXTsKKworCS8qIGNvbmZpZ3VyYXRpb24gdGFibGUgKi8KKwlzdHJ1Y3QgcG1jcmFpZF9jb25maWdfdGFibGUgKmNmZ190YWJsZTsKKwlkbWFfYWRkcl90IGNmZ190YWJsZV9idXNfYWRkcjsKKworCS8qIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBjb21tYW5kIGJsb2NrcyAqLworCXN0cnVjdCBrbWVtX2NhY2hlICpjbWRfY2FjaGVwOwkJLyogY2FjaGUgZm9yIGNtZCBibG9ja3MgKi8KKwlzdHJ1Y3QgcGNpX3Bvb2wgKmNvbnRyb2xfcG9vbDsJCS8qIHBvb2wgZm9yIGNvbnRyb2wgYmxvY2tzICovCisJY2hhciAgIGNtZF9wb29sX25hbWVbNjRdOwkJLyogbmFtZSBvZiBjbWQgY2FjaGUgKi8KKwljaGFyICAgY3RsX3Bvb2xfbmFtZVs2NF07CQkvKiBuYW1lIG9mIGNvbnRyb2wgY2FjaGUgKi8KKworCXN0cnVjdCBwbWNyYWlkX2NtZCAqY21kX2xpc3RbUE1DUkFJRF9NQVhfQ01EXTsKKworCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9jbWRfcG9vbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfY21kX3Bvb2w7CisJc3BpbmxvY2tfdCBmcmVlX3Bvb2xfbG9jazsJIAkvKiBmcmVlIHBvb2wgbG9jayAqLworCXNwaW5sb2NrX3QgcGVuZGluZ19wb29sX2xvY2s7CSAJLyogcGVuZGluZyBwb29sIGxvY2sgKi8KKworCS8qIE5vIG9mIElPIGNvbW1hbmRzIHBlbmRpbmcgd2l0aCBGVyAqLworCWF0b21pY190IG91dHN0YW5kaW5nX2NtZHM7CisKKwkvKiBzaG91bGQgYWRkL2RlbGV0ZSByZXNvdXJjZXMgdG8gbWlkLWxheWVyIG5vdyA/Ki8KKwlhdG9taWNfdCBleHBvc2VfcmVzb3VyY2VzOworCisJLyogVGFza2xldCB0byBoYW5kbGUgZGVmZXJyZWQgcHJvY2Vzc2luZyAqLworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpc3JfdGFza2xldFtQTUNSQUlEX05VTV9NU0lYX1ZFQ1RPUlNdOworCisJLyogV29yay1xdWV1ZSAoU2hhcmVkKSBmb3IgZGVmZXJyZWQgcmVzZXQgcHJvY2Vzc2luZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrZXJfcTsKKworCisJdTMyIGlvYV9zdGF0ZTo0OwkvKiBGb3IgSU9BIFJlc2V0IHNlcXVlbmNlIEZTTSAqLworI2RlZmluZSBJT0FfU1RBVEVfT1BFUkFUSU9OQUwgICAgICAgMHgwCisjZGVmaW5lIElPQV9TVEFURV9VTktOT1dOICAgICAgICAgICAweDEKKyNkZWZpbmUgSU9BX1NUQVRFX0RFQUQgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBJT0FfU1RBVEVfSU5fU09GVF9SRVNFVCAgICAgMHgzCisjZGVmaW5lIElPQV9TVEFURV9JTl9IQVJEX1JFU0VUICAgICAweDQKKyNkZWZpbmUgSU9BX1NUQVRFX0lOX1JFU0VUX0FMRVJUICAgIDB4NQorI2RlZmluZSBJT0FfU1RBVEVfSU5fQlJJTkdET1dOICAgICAgMHg2CisjZGVmaW5lIElPQV9TVEFURV9JTl9CUklOR1VQICAgICAgICAweDcKKworCXUzMiBpb2FfcmVzZXRfaW5fcHJvZ3Jlc3M6MTsgLyogdHJ1ZSBpZiBJT0EgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MgKi8KKwl1MzIgaW9hX2hhcmRfcmVzZXQ6MTsJLyogVFJVRSBpZiBIYXJkIFJlc2V0IGlzIG5lZWRlZCAqLworCXUzMiBpb2FfdW5pdF9jaGVjazoxOwkvKiBJbmRpY2F0ZXMgVW5pdCBDaGVjayBjb25kaXRpb24gKi8KKwl1MzIgaW9hX2JyaW5nZG93bjoxOwkvKiB3aGV0aGVyIElPQSBuZWVkcyB0byBiZSBicm91Z2h0IGRvd24gKi8KKwl1MzIgZm9yY2VfaW9hX3Jlc2V0OjE7ICAvKiBmb3JjZSBhZGFwdGVyIHJlc2V0ID8gKi8KKwl1MzIgcmVpbml0X2NmZ190YWJsZToxOyAvKiByZWluaXQgY29uZmlnIHRhYmxlIGR1ZSB0byBsb3N0IENDTiAqLworCXUzMiBpb2Ffc2h1dGRvd25fdHlwZToyOy8qIHNodXRkb3duIHR5cGUgdXNlZCBkdXJpbmcgcmVzZXQgKi8KKyNkZWZpbmUgU0hVVERPV05fTk9ORSAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBTSFVURE9XTl9OT1JNQUwgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFNIVVRET1dOX0FCQlJFViAgICAgICAgICAgICAweDIKKworfTsKKworLyogTExEIG1haW50YWluZWQgcmVzb3VyY2UgZW50cnkgc3RydWN0dXJlICovCitzdHJ1Y3QgcG1jcmFpZF9yZXNvdXJjZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZTsJLyogbGluayB0byAidG8gYmUgZXhwb3NlZCIgcmVzb3VyY2VzICovCisJc3RydWN0IHBtY3JhaWRfY29uZmlnX3RhYmxlX2VudHJ5IGNmZ19lbnRyeTsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNjc2lfZGV2OwkvKiBMaW5rIHNjc2lfZGV2aWNlIHN0cnVjdHVyZSAqLworCWF0b21pY190IHJlYWRfZmFpbHVyZXM7CQkvKiBjb3VudCBvZiBmYWlsZWQgUkVBRCBjb21tYW5kcyAqLworCWF0b21pY190IHdyaXRlX2ZhaWx1cmVzOwkvKiBjb3VudCBvZiBmYWlsZWQgV1JJVEUgY29tbWFuZHMgKi8KKworCS8qIFRvIGluZGljYXRlIGFkZC9kZWxldGUvbW9kaWZ5IGR1cmluZyBDQ04gKi8KKwl1OCBjaGFuZ2VfZGV0ZWN0ZWQ7CisjZGVmaW5lIFJFU19DSEFOR0VfQUREICAgICAgICAgIDB4MQkvKiBhZGQgdGhpcyB0byBtaWQtbGF5ZXIgKi8KKyNkZWZpbmUgUkVTX0NIQU5HRV9ERUwgICAgICAgICAgMHgyCS8qIHJlbW92ZSB0aGlzIGZyb20gbWlkLWxheWVyICovCisKKwl1OCByZXNldF9wcm9ncmVzczsgICAgICAvKiBEZXZpY2UgaXMgcmVzZXR0aW5nICovCisKKwkvKgorCSAqIFdoZW4gSU9BIGFza3MgZm9yIHN5bmMgKGkuZS4gSU9BU0MgPSBOb3QgUmVhZHksIFN5bmMgUmVxdWlyZWQpLCB0aGlzCisJICogZmxhZyB3aWxsIGJlIHNldCwgbWlkIGxheWVyIHdpbGwgYmUgYXNrZWQgdG8gcmV0cnkuIEluIHRoZSBuZXh0CisJICogYXR0ZW1wdCwgdGhpcyBmbGFnIHdpbGwgYmUgY2hlY2tlZCBpbiBxdWV1ZWNvbW1hbmQoKSB0byBzZXQKKwkgKiBTWU5DX0NPTVBMRVRFIGZsYWcgaW4gSU9BUkNCIChmbGFnXzApLgorCSAqLworCXU4IHN5bmNfcmVxZDsKKworCS8qIHRhcmdldCBpbmRpY2F0ZXMgdGhlIG1hcHBlZCB0YXJnZXRfaWQgYXNzaWduZWQgdG8gdGhpcyByZXNvdXJjZSBpZgorCSAqIHRoaXMgaXMgVlNFVCByZXNvdXJjZS4gRm9yIG5vbi1WU0VUIHJlc291cmNlcyB0aGlzIHdpbGwgYmUgdW4tdXNlZAorCSAqIG9yIHplcm8KKwkgKi8KKwl1OCB0YXJnZXQ7Cit9OworCisvKiBEYXRhIHN0cnVjdHVyZXMgdXNlZCBpbiBJT0FTQyBlcnJvciBjb2RlIGxvZ2dpbmcgKi8KK3N0cnVjdCBwbWNyYWlkX2lvYXNjX2Vycm9yIHsKKwl1MzIgaW9hc2NfY29kZTsJCS8qIElPQVNDIGNvZGUgKi8KKwl1OCBsb2dfbGV2ZWw7CQkvKiBkZWZhdWx0IGxvZyBsZXZlbCBhc3NpZ25tZW50LiAqLworCWNoYXIgKmVycm9yX3N0cmluZzsKK307CisKKy8qIEluaXRpYWwgbG9nX2xldmVsIGFzc2lnbm1lbnRzIGZvciB2YXJpb3VzIElPQVNDcyAqLworI2RlZmluZSBJT0FTQ19MT0dfTEVWRUxfTk9ORQkgICAgMHgwIC8qIG5vIGxvZ2dpbmcgKi8KKyNkZWZpbmUgSU9BU0NfTE9HX0xFVkVMX01VU1QgICAgICAgIDB4MQkvKiBtdXN0IGxvZzogYWxsIGhpZ2gtc2V2ZXJpdHkgZXJyb3JzICovCisjZGVmaW5lIElPQVNDX0xPR19MRVZFTF9IQVJEICAgICAgICAweDIJLyogb3B0aW9uYWwg4oCTIGxvdyBzZXZlcml0eSBlcnJvcnMgKi8KKworLyogRXJyb3IgaW5mb3JtYXRpb24gbWFpbnRhaW5lZCBieSBMTEQuIExMRCBpbml0aWFsaXplcyB0aGUgcG1jcmFpZF9lcnJvcl90YWJsZQorICogc3RhdGljYWxseS4KKyAqLworc3RhdGljIHN0cnVjdCBwbWNyYWlkX2lvYXNjX2Vycm9yIHBtY3JhaWRfaW9hc2NfZXJyb3JfdGFibGVbXSA9IHsKKwl7MHgwMTE4MDYwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJSZWNvdmVyZWQgRXJyb3IsIHNvZnQgbWVkaWEgZXJyb3IsIHNlY3RvciByZWFzc2lnbm1lbnQgc3VnZ2VzdGVkIn0sCisJezB4MDE1RDAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiUmVjb3ZlcmVkIEVycm9yLCBmYWlsdXJlIHByZWRpY3Rpb24gdGhyZXNvbGQgZXhjZWVkZWQifSwKKwl7MHgwMTVEOTIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJSZWNvdmVyZWQgRXJyb3IsIHNvZnQgQ2FjaGUgQ2FyZCBCYXR0ZXJ5IGVycm9yIHRocmVzb2xkIn0sCisJezB4MDE1RDkyMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiUmVjb3ZlcmVkIEVycm9yLCBzb2Z0IENhY2hlIENhcmQgQmF0dGVyeSBlcnJvciB0aHJlc29sZCJ9LAorCXsweDAyMDQ4MDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIk5vdCBSZWFkeSwgSU9BIFJlc2V0IFJlcXVpcmVkIn0sCisJezB4MDI0MDg1MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiTm90IFJlYWR5LCBJT0EgbWljcm9jb2RlIGRvd25sb2FkIHJlcXVpcmVkIn0sCisJezB4MDMxMTBCMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiTWVkaXVtIEVycm9yLCBkYXRhIHVucmVhZGFibGUsIHJlYXNzaWdubWVudCBzdWdnZXN0ZWQifSwKKwl7MHgwMzExMEMwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJNZWRpdW0gRXJyb3IsIGRhdGEgdW5yZWFkYWJsZSBkbyBub3QgcmVhc3NpZ24ifSwKKwl7MHgwMzMxMDAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJNZWRpdW0gRXJyb3IsIG1lZGlhIGNvcnJ1cHRlZCJ9LAorCXsweDA0MDUwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBJT0EgY2FuJ3QgY29tbXVuaWNhdGUgd2l0aCBkZXZpY2UifSwKKwl7MHgwNDA4MDAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgZGV2aWNlIGJ1cyBlcnJvciJ9LAorCXsweDA0MDgwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBkZXZpY2UgYnVzIGlzIG5vdCBmdW5jdGlvbmluZyJ9LAorCXsweDA0MTE4MDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBJT0EgcmVzZXJ2ZWQgYXJlYSBkYXRhIGNoZWNrIn0sCisJezB4MDQxMTgxMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIElPQSByZXNlcnZlZCBhcmVhIGludmFsaWQgZGF0YSBwYXR0ZXJuIn0sCisJezB4MDQxMTgyMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIElPQSByZXNlcnZlZCBhcmVhIExSQyBlcnJvciJ9LAorCXsweDA0MzIwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCByZWFzc2lnbm1lbnQgc3BhY2UgZXhoYXVzdGVkIn0sCisJezB4MDQzMzAwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIGRhdGEgdHJhbnNmZXIgdW5kZXJsZW5ndGggZXJyb3IifSwKKwl7MHgwNDMzMDAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgZGF0YSB0cmFuc2ZlciBvdmVybGVuZ3RoIGVycm9yIn0sCisJezB4MDQ0MTgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIFBDSSBidXMgZXJyb3IifSwKKwl7MHgwNDQ0MDAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgZGV2aWNlIGVycm9yIn0sCisJezB4MDQ0NDgzMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIHVuZGVmaW5lZCBkZXZpY2UgcmVzcG9uc2UifSwKKwl7MHgwNDQ0ODQwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgSU9BIG1pY3JvY29kZSBlcnJvciJ9LAorCXsweDA0NDQ4NjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBJT0EgcmVzZXQgcmVxdWlyZWQifSwKKwl7MHgwNDQ0OTIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgaGFyZCBDYWNoZSBGZWFydWVlIENhcmQgQmF0dGVyeSBlcnJvciJ9LAorCXsweDA0NDRBMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBmYWlsZWQgZGV2aWNlIGFsdGVyZWQifSwKKwl7MHgwNDQ0QTIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgZGF0YSBjaGVjayBhZnRlciByZWFzc2lnbm1lbnQifSwKKwl7MHgwNDQ0QTMwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgTFJDIGVycm9yIGFmdGVyIHJlYXNzaWdubWVudCJ9LAorCXsweDA0NEEwMDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBkZXZpY2UgYnVzIGVycm9yIChtc2cvY21kIHBoYXNlKSJ9LAorCXsweDA0NjcwNDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBuZXcgZGV2aWNlIGNhbid0IGJlIHVzZWQifSwKKwl7MHgwNDY3ODAwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgaW52YWxpZCBtdWx0aWFkYXB0ZXIgY29uZmlndXJhdGlvbiJ9LAorCXsweDA0Njc4MTAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBpbmNvcnJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIGVuY2xvc3VyZXMifSwKKwl7MHgwNDY3ODIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJIYXJkd2FyZSBFcnJvciwgY29ubmVjdGlvbnMgZXhjZWVkIElPQSBkZXNpZ24gbGltaXRzIn0sCisJezB4MDQ2NzgzMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiSGFyZHdhcmUgRXJyb3IsIGluY29ycmVjdCBtdWx0aXBhdGggY29ubmVjdGlvbiJ9LAorCXsweDA0Njc5MDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkhhcmR3YXJlIEVycm9yLCBjb21tYW5kIHRvIExVTiBmYWlsZWQifSwKKwl7MHgwNjRDODAwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJVbml0IEF0dGVudGlvbiwgY2FjaGUgZXhpc3RzIGZvciBtaXNzaW5nL2ZhaWxlZCBkZXZpY2UifSwKKwl7MHgwNjY3MDEwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJVbml0IEF0dGVudGlvbiwgaW5jb21wYXRpYmxlIGV4cG9zZWQgbW9kZSBkZXZpY2UifSwKKwl7MHgwNjY3MDYwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJVbml0IEF0dGVudGlvbiwgYXR0YWNobWVudCBvZiBsb2dpY2FsIHVuaXQgZmFpbGVkIn0sCisJezB4MDY2NzgwMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiVW5pdCBBdHRlbnRpb24sIGNhYmxlcyBleGNlZWQgY29ubmVjdGl2ZSBkZXNpZ24gbGltaXQifSwKKwl7MHgwNjY3ODMwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJVbml0IEF0dGVudGlvbiwgaW5jb21wbGV0ZSBtdWx0aXBhdGggY29ubmVjdGlvbiBiZXR3ZWVuIiBcCisJICJJT0EgYW5kIGVuY2xvc3VyZSJ9LAorCXsweDA2Njc4NDAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBpbmNvbXBsZXRlIG11bHRpcGF0aCBjb25uZWN0aW9uIGJldHdlZW4iIFwKKwkgImRldmljZSBhbmQgZW5jbG9zdXJlIn0sCisJezB4MDY2Nzg1MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiVW5pdCBBdHRlbnRpb24sIGluY29tcGxldGUgbXVsdGlwYXRoIGNvbm5lY3Rpb24gYmV0d2VlbiIgXAorCSAiSU9BIGFuZCByZW1vdGUgSU9BIn0sCisJezB4MDY2Nzg2MDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiVW5pdCBBdHRlbnRpb24sIG1pc3NpbmcgcmVtb3RlIElPQSJ9LAorCXsweDA2Njc5MTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIlVuaXQgQXR0ZW50aW9uLCBlbmNsb3N1cmUgZG9lc24ndCBzdXBwb3J0IHJlcXVpcmVkIG11bHRpcGF0aCIgXAorCSAiZnVuY3Rpb24ifSwKKwl7MHgwNjY5ODIwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJVbml0IEF0dGVudGlvbiwgY29ycnVwdCBhcnJheSBwYXJpdHkgZGV0ZWN0ZWQgb24gZGV2aWNlIn0sCisJezB4MDY2QjAyMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiVW5pdCBBdHRlbnRpb24sIGFycmF5IGV4cG9zZWQifSwKKwl7MHgwNjZCODIwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJVbml0IEF0dGVudGlvbiwgZXhwb3NlZCBhcnJheSBpcyBzdGlsbCBwcm90ZWN0ZWQifSwKKwl7MHgwNjZCOTIwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJVbml0IEF0dGVudGlvbiwgTXVsdGlwYXRoIHJlZHVuZGFuY3kgbGV2ZWwgZ290IHdvcnNlIn0sCisJezB4MDcyNzAwMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiRGF0YSBQcm90ZWN0LCBkZXZpY2UgaXMgcmVhZC93cml0ZSBwcm90ZWN0ZWQgYnkgSU9BIn0sCisJezB4MDcyNzgwMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiRGF0YSBQcm90ZWN0LCBJT0EgZG9lc24ndCBzdXBwb3J0IGRldmljZSBhdHRyaWJ1dGUifSwKKwl7MHgwNzI3ODEwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJEYXRhIFByb3RlY3QsIE5WUkFNIG1pcnJvcmluZyBwcm9oaWJpdGVkIn0sCisJezB4MDcyNzg0MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBhcnJheSBpcyBzaG9ydCAyIG9yIG1vcmUgZGV2aWNlcyJ9LAorCXsweDA3Mjc4NjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgZXhwb3NlZCBhcnJheSBpcyBzaG9ydCBhIHJlcXVpcmVkIGRldmljZSJ9LAorCXsweDA3Mjc4NzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgYXJyYXkgbWVtYmVycyBub3QgYXQgcmVxdWlyZWQgYWRkcmVzc2VzIn0sCisJezB4MDcyNzg4MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBleHBvc2VkIG1vZGUgZGV2aWNlIHJlc291cmNlIGFkZHJlc3MgY29uZmxpY3QifSwKKwl7MHgwNzI3ODkwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJEYXRhIFByb3RlY3QsIGluY29ycmVjdCByZXNvdXJjZSBhZGRyZXNzIG9mIGV4cG9zZWQgbW9kZSBkZXZpY2UifSwKKwl7MHgwNzI3OEEwMCwgSU9BU0NfTE9HX0xFVkVMX01VU1QsCisJICJEYXRhIFByb3RlY3QsIEFycmF5IGlzIG1pc3NpbmcgYSBkZXZpY2UgYW5kIHBhcml0eSBpcyBvdXQgb2Ygc3luYyJ9LAorCXsweDA3Mjc4QjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgbWF4aW11bSBudW1iZXIgb2YgYXJyYXlzIGFscmVhZHkgZXhpc3QifSwKKwl7MHgwNzI3OEMwMCwgSU9BU0NfTE9HX0xFVkVMX0hBUkQsCisJICJEYXRhIFByb3RlY3QsIGNhbm5vdCBsb2NhdGUgY2FjaGUgZGF0YSBmb3IgZGV2aWNlIn0sCisJezB4MDcyNzhEMDAsIElPQVNDX0xPR19MRVZFTF9IQVJELAorCSAiRGF0YSBQcm90ZWN0LCBjYWNoZSBkYXRhIGV4aXRzIGZvciBhIGNoYW5nZWQgZGV2aWNlIn0sCisJezB4MDcyNzkxMDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBkZXRlY3Rpb24gb2YgYSBkZXZpY2UgcmVxdWlyaW5nIGZvcm1hdCJ9LAorCXsweDA3Mjc5MjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgSU9BIGV4Y2VlZHMgbWF4aW11bSBudW1iZXIgb2YgZGV2aWNlcyJ9LAorCXsweDA3Mjc5NjAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgbWlzc2luZyBhcnJheSwgdm9sdW1lIHNldCBpcyBub3QgZnVuY3Rpb25hbCJ9LAorCXsweDA3Mjc5NzAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgc2luZ2xlIGRldmljZSBmb3IgYSB2b2x1bWUgc2V0In0sCisJezB4MDcyNzk4MDAsIElPQVNDX0xPR19MRVZFTF9NVVNULAorCSAiRGF0YSBQcm90ZWN0LCBtaXNzaW5nIG11bHRpcGxlIGRldmljZXMgZm9yIGEgdm9sdW1lIHNldCJ9LAorCXsweDA3Mjc5OTAwLCBJT0FTQ19MT0dfTEVWRUxfSEFSRCwKKwkgIkRhdGEgUHJvdGVjdCwgbWF4aW11bSBudW1iZXIgb2Ygdm9sdW1lbnQgc2V0cyBhbHJlYWR5IGV4aXN0cyJ9LAorCXsweDA3Mjc5QTAwLCBJT0FTQ19MT0dfTEVWRUxfTVVTVCwKKwkgIkRhdGEgUHJvdGVjdCwgb3RoZXIgdm9sdW1lIHNldCBwcm9ibGVtIn0sCit9OworCisvKiBtYWNyb3MgdG8gaGVscCBpbiBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgcG1jcmFpZF9lcnIoLi4uKSAgXAorCXByaW50ayhLRVJOX0VSUiAiTWF4UkFJRDogIl9fVkFfQVJHU19fKQorCisjZGVmaW5lIHBtY3JhaWRfaW5mbyguLi4pIFwKKwlpZiAocG1jcmFpZF9kZWJ1Z19sb2cpIFwKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTWF4UkFJRDogIl9fVkFfQVJHU19fKQorCisvKiBjaGVjayBpZiBnaXZlbiBjb21tYW5kIGlzIGEgU0NTSSBSRUFEIG9yIFNDU0kgV1JJVEUgY29tbWFuZCAqLworI2RlZmluZSBTQ1NJX1JFQURfQ01EICAgICAgICAgICAweDEJLyogYW55IG9mIFNDU0kgUkVBRCBjb21tYW5kcyAqLworI2RlZmluZSBTQ1NJX1dSSVRFX0NNRCAgICAgICAgICAweDIJLyogYW55IG9mIFNDU0kgV1JJVEUgY29tbWFuZHMgKi8KKyNkZWZpbmUgU0NTSV9DTURfVFlQRShvcGNvZGUpIFwKKyh7ICB1OCBvcCA9IG9wY29kZTsgdTggX190eXBlID0gMDtcCisJaWYgKG9wID09IFJFQURfNiB8fCBvcCA9PSBSRUFEXzEwIHx8IG9wID09IFJFQURfMTIgfHwgb3AgPT0gUkVBRF8xNilcCisJCV9fdHlwZSA9IFNDU0lfUkVBRF9DTUQ7XAorCWVsc2UgaWYgKG9wID09IFdSSVRFXzYgfHwgb3AgPT0gV1JJVEVfMTAgfHwgb3AgPT0gV1JJVEVfMTIgfHwgXAorCQkgb3AgPT0gV1JJVEVfMTYpXAorCQlfX3R5cGUgPSBTQ1NJX1dSSVRFX0NNRDtcCisJX190eXBlO1wKK30pCisKKyNkZWZpbmUgSVNfU0NTSV9SRUFEX1dSSVRFKG9wY29kZSkgXAorKHsJdTggX190eXBlID0gU0NTSV9DTURfVFlQRShvcGNvZGUpOyBcCisJKF9fdHlwZSA9PSBTQ1NJX1JFQURfQ01EIHx8IF9fdHlwZSA9PSBTQ1NJX1dSSVRFX0NNRCkgPyAxIDogMDtcCit9KQorCisKKy8qCisgKiBwbWNyYWlkX2lvY3RsX2hlYWRlciAtIGRlZmluaXRpb24gb2YgaGVhZGVyIHN0cnVjdHVyZSB0aGF0IHByZWNlZWRzIGFsbCB0aGUKKyAqIGJ1ZmZlcnMgZ2l2ZW4gYXMgaW9jdGwgYXJndWVtZW50cy4KKyAqCisgKiAuc2lnbmF0dXJlICAgICAgICAgICA6IGFsd2F5cyBBU0NJSSBzdHJpbmcsICJQTUNSQUlEIgorICogLnJlc2VydmVkICAgICAgICAgICAgOiBub3QgdXNlZAorICogLmJ1ZmZlcl9sZW5ndGggICAgICAgOiBsZW5ndGggb2YgdGhlIGJ1ZmZlciBmb2xsb3dpbmcgdGhlIGhlYWRlcgorICovCitzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIgeworCXU4ICBzaWduYXR1cmVbOF07CisJdTMyIHJlc2VydmVkOworCXUzMiBidWZmZXJfbGVuZ3RoOworfTsKKworI2RlZmluZSBQTUNSQUlEX0lPQ1RMX1NJR05BVFVSRSAgICAgICJQTUNSQUlEIgorCisKKy8qCisgKiBwbWNyYWlkX2V2ZW50X2RldGFpbHMgLSBkZWZpbmVzIEFFTiBkZXRhaWxzIHRoYXQgYXBwcyBjYW4gcmV0cmlldmUgZnJvbSBMTEQKKyAqCisgKiAucmNiX2NjbiAtIGNvbXBsZXRlIFJDQiBvZiBDQ04KKyAqIC5yY2JfbGRuIC0gY29tcGxldGUgUkNCIG9mIENDTgorICovCitzdHJ1Y3QgcG1jcmFpZF9ldmVudF9kZXRhaWxzIHsKKwlzdHJ1Y3QgcG1jcmFpZF9oY2FtX2NjbiByY2JfY2NuOworCXN0cnVjdCBwbWNyYWlkX2hjYW1fbGRuIHJjYl9sZG47Cit9OworCisvKgorICogcG1jcmFpZF9kcml2ZXJfaW9jdGxfYnVmZmVyIC0gc3RydWN0dXJlIHBhc3NlZCBhcyBhcmd1bWVudCB0byBtb3N0IG9mIHRoZQorICogUE1DIGRyaXZlciBoYW5kbGVkIGlvY3Rscy4KKyAqLworc3RydWN0IHBtY3JhaWRfZHJpdmVyX2lvY3RsX2J1ZmZlciB7CisJc3RydWN0IHBtY3JhaWRfaW9jdGxfaGVhZGVyIGlvY3RsX2hlYWRlcjsKKwlzdHJ1Y3QgcG1jcmFpZF9ldmVudF9kZXRhaWxzIGV2ZW50X2RldGFpbHM7Cit9OworCisvKgorICogcG1jcmFpZF9wYXNzdGhyb3VnaF9pb2N0bF9idWZmZXIgLSBzdHJ1Y3R1cmUgZ2l2ZW4gYXMgYXJndW1lbnQgdG8KKyAqIHBhc3N0aHJvdWdoKG9yIGZpcm13YXJlIGhhbmRsZWQpIElPQ1RMIGNvbW1hbmRzLiBOb3RlIHRoYXQgaW9hcmNiIHJlcXVpcmVzCisgKiAzMi1ieXRlIGFsaWdubWVudCBzbywgaXQgaXMgbmVjZXNzYXJ5IHRvIHBhY2sgdGhpcyBzdHJ1Y3R1cmUgdG8gYXZvaWQgYW55CisgKiBob2xlcyBiZXR3ZWVuIGlvY3RsX2hlYWRlciBhbmQgcGFzc3Rocm91Z2ggYnVmZmVyCisgKgorICogLmlvYWN0bF9oZWFkZXIgOiBpb2N0bCBoZWFkZXIKKyAqIC5pb2FyY2IgICAgICAgIDogZmlsbGVkLXVwIGlvYXJjYiBidWZmZXIsIGRyaXZlciBhbHdheXMgcmVhZHMgdGhpcyBidWZmZXIKKyAqIC5pb2FzYSAgICAgICAgIDogYnVmZmVyIGZvciBpb2FzYSwgZHJpdmVyIGZpbGxzIHRoaXMgd2l0aCBJT0FTQSBmcm9tIGZpcm13YXJlCisgKiAucmVxdWVzdF9idWZmZXI6IFRoZSBJL08gYnVmZmVyIChmbGF0KSwgZHJpdmVyIHJlYWRzL3dyaXRlcyB0byB0aGlzIGJhc2VkIG9uCisgKiAgICAgICAgICAgICAgICAgIHRoZSB0cmFuc2ZlciBkaXJlY3Rpb25zIHBhc3NlZCBpbiBpb2FyY2IuZmxhZ3MwLiBDb250ZW50cworICogICAgICAgICAgICAgICAgICBvZiB0aGlzIGJ1ZmZlciBhcmUgdmFsaWQgb25seSB3aGVuIGlvYXJjYi5kYXRhX3RyYW5zZmVyX2xlbgorICogICAgICAgICAgICAgICAgICBpcyBub3QgemVyby4KKyAqLworc3RydWN0IHBtY3JhaWRfcGFzc3Rocm91Z2hfaW9jdGxfYnVmZmVyIHsKKwlzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIgaW9jdGxfaGVhZGVyOworCXN0cnVjdCBwbWNyYWlkX2lvYXJjYiBpb2FyY2I7CisJc3RydWN0IHBtY3JhaWRfaW9hc2EgIGlvYXNhOworCXU4ICByZXF1ZXN0X2J1ZmZlclsxXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICoga2V5cyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZHJpdmVyIGhhbmRsZWQgSU9DVExzIGFuZCBwYXNzdGhyb3VnaAorICogSU9DVExzIHBhc3NlZCB0byBJT0EuIGRyaXZlciBkZXRlcm1pbmVzIHRoZSBpb2N0bCB0eXBlIHVzaW5nIG1hY3JvCisgKiBfSU9DX1RZUEUKKyAqLworI2RlZmluZSBQTUNSQUlEX0RSSVZFUl9JT0NUTCAgICAgICAgICdEJworI2RlZmluZSBQTUNSQUlEX1BBU1NUSFJPVUdIX0lPQ1RMICAgICdGJworCisjZGVmaW5lIERSVl9JT0NUTChuLCBzaXplKSBcCisgICAgX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgUE1DUkFJRF9EUklWRVJfSU9DVEwsIChuKSwgKHNpemUpKQorCisjZGVmaW5lIEZNV19JT0NUTChuLCBzaXplKSBcCisgICAgX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgUE1DUkFJRF9QQVNTVEhST1VHSF9JT0NUTCwgIChuKSwgKHNpemUpKQorCisvKgorICogX0FSR1NJWkU6IG1hY3JvIHRoYXQgZ2l2ZXMgc2l6ZSBvZiB0aGUgYXJndW1lbnQgdHlwZSBwYXNzZWQgdG8gYW4gSU9DVEwgY21kLgorICogVGhpcyBpcyB0byBmYWNpbGl0YXRlIGFwcGxpY2F0aW9ucyBhdm9pZGluZyB1bi1uZWNlc3NhcnkgbWVtb3J5IGFsbG9jYXRpb25zLgorICogRm9yIGV4YW1wbGUsIG1vc3Qgb2YgZHJpdmVyIGhhbmRsZWQgaW9jdGxzIGRvIG5vdCByZXF1aXJlIGlvYXJjYiwgaW9hc2EuCisgKi8KKyNkZWZpbmUgX0FSR1NJWkUoYXJnKSAoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2lvY3RsX2hlYWRlcikgKyBzaXplb2YoYXJnKSkKKworLyogRHJpdmVyIGhhbmRsZWQgSU9DVEwgY29tbWFuZCBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIFBNQ1JBSURfSU9DVExfUkVTRVRfQURBUFRFUiAgICAgICAgICBcCisJRFJWX0lPQ1RMKDUsIHNpemVvZihzdHJ1Y3QgcG1jcmFpZF9pb2N0bF9oZWFkZXIpKQorCisvKiBwYXNzdGhyb3VnaC9maXJtd2FyZSBoYW5kbGVkIGNvbW1hbmRzICovCisjZGVmaW5lIFBNQ1JBSURfSU9DVExfUEFTU1RIUk9VR0hfQ09NTUFORCAgICAgICAgIFwKKwlGTVdfSU9DVEwoMSwgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlcikpCisKKyNkZWZpbmUgUE1DUkFJRF9JT0NUTF9ET1dOTE9BRF9NSUNST0NPREUgICAgIFwKKwlGTVdfSU9DVEwoMiwgc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX3Bhc3N0aHJvdWdoX2lvY3RsX2J1ZmZlcikpCisKKworI2VuZGlmIC8qIF9QTUNSQUlEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCmluZGV4IDBmODc5NjIuLmZiY2I4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwpAQCAtMTY3MCw3ICsxNjcwLDcgQEAKIAogCXFsYTI0eHhfdnBvcnRfZGlzYWJsZShmY192cG9ydCwgZGlzYWJsZSk7CiAKLQlpZiAocWwyeG11bHRpcXVlX3RhZykgeworCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpIHsKIAkJcmVxID0gaGEtPnJlcV9xX21hcFsxXTsKIAkJZ290byB2cG9ydF9xdWV1ZTsKIAl9IGVsc2UgaWYgKHFsMnhtYXhxdWV1ZXMgPT0gMSB8fCAhaGEtPm5waXZfaW5mbykKQEAgLTE3MzYsNiArMTczNiwxMSBAQAogCiAJcWxhMjR4eF9kZWFsbG9jYXRlX3ZwX2lkKHZoYSk7CiAKKwltdXRleF9sb2NrKCZoYS0+dnBvcnRfbG9jayk7CisJaGEtPmN1cl92cG9ydF9jb3VudC0tOworCWNsZWFyX2JpdCh2aGEtPnZwX2lkeCwgaGEtPnZwX2lkeF9tYXApOworCW11dGV4X3VubG9jaygmaGEtPnZwb3J0X2xvY2spOworCiAJaWYgKHZoYS0+dGltZXJfYWN0aXZlKSB7CiAJCXFsYTJ4MDBfdnBfc3RvcF90aW1lcih2aGEpOwogCQlERUJVRzE1KHByaW50ayAoInNjc2koJWxkKTogdGltZXIgZm9yIHRoZSB2cG9ydFslZF0gPSAlcCAiCkBAIC0xNzQzLDcgKzE3NDgsNyBAQAogCQkgICAgdmhhLT5ob3N0X25vLCB2aGEtPnZwX2lkeCwgdmhhKSk7CiAgICAgICAgIH0KIAotCWlmICh2aGEtPnJlcS0+aWQgJiYgIXFsMnhtdWx0aXF1ZV90YWcpIHsKKwlpZiAodmhhLT5yZXEtPmlkICYmICFoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpIHsKIAkJaWYgKHFsYTI1eHhfZGVsZXRlX3JlcV9xdWUodmhhLCB2aGEtPnJlcSkgIT0gUUxBX1NVQ0NFU1MpCiAJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCQkJIlF1ZXVlIGRlbGV0ZSBmYWlsZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCAwMGFhNDhkLi4yMTUwNjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC0xODksNiArMTg5LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3Qgc3JiIHsKIAlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OworCXVpbnQzMl90IGhhbmRsZTsKIAogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsJCS8qIExpbnV4IFNDU0kgY29tbWFuZCBwa3QgKi8KIApAQCAtMTk2LDYgKzE5Nyw4IEBACiAKIAl1aW50MzJfdCByZXF1ZXN0X3NlbnNlX2xlbmd0aDsKIAl1aW50OF90ICpyZXF1ZXN0X3NlbnNlX3B0cjsKKworCXZvaWQgKmN0eDsKIH0gc3JiX3Q7CiAKIC8qCkBAIC0yMDQsNiArMjA3LDI4IEBACiAjZGVmaW5lIFNSQl9ETUFfVkFMSUQJCUJJVF8wCS8qIENvbW1hbmQgc2VudCB0byBJU1AgKi8KIAogLyoKKyAqIFNSQiBleHRlbnNpb25zLgorICovCitzdHJ1Y3Qgc3JiX2N0eCB7CisjZGVmaW5lIFNSQl9MT0dJTl9DTUQJMQorI2RlZmluZSBTUkJfTE9HT1VUX0NNRAkyCisJdWludDE2X3QgdHlwZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKworCXZvaWQgKCpmcmVlKShzcmJfdCAqc3ApOworCXZvaWQgKCp0aW1lb3V0KShzcmJfdCAqc3ApOworfTsKKworc3RydWN0IHNyYl9sb2dpbyB7CisJc3RydWN0IHNyYl9jdHggY3R4OworCisjZGVmaW5lIFNSQl9MT0dJTl9SRVRSSUVECUJJVF8wCisjZGVmaW5lIFNSQl9MT0dJTl9DT05EX1BMT0dJCUJJVF8xCisjZGVmaW5lIFNSQl9MT0dJTl9TS0lQX1BSTEkJQklUXzIKKwl1aW50MTZfdCBmbGFnczsKK307CisKKy8qCiAgKiBJU1AgSS9PIFJlZ2lzdGVyIFNldCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCiAgKi8KIHN0cnVjdCBkZXZpY2VfcmVnXzJ4eHggewpAQCAtMTQ4Miw3ICsxNTA3LDcgQEAKIAkJdWludDhfdCBkb21haW47CiAJCXVpbnQ4X3QgYXJlYTsKIAkJdWludDhfdCBhbF9wYTsKLSNlbGlmIF9fTElUVExFX0VORElBTgorI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJCXVpbnQ4X3QgYWxfcGE7CiAJCXVpbnQ4X3QgYXJlYTsKIAkJdWludDhfdCBkb21haW47CkBAIC0xNTY1LDYgKzE1OTAsNyBAQAogI2RlZmluZSBGQ0ZfRkFCUklDX0RFVklDRQlCSVRfMAogI2RlZmluZSBGQ0ZfTE9HSU5fTkVFREVECUJJVF8xCiAjZGVmaW5lIEZDRl9UQVBFX1BSRVNFTlQJQklUXzIKKyNkZWZpbmUgRkNGX0ZDUDJfREVWSUNFCQlCSVRfMwogCiAvKiBObyBsb29wIElEIGZsYWcuICovCiAjZGVmaW5lIEZDX05PX0xPT1BfSUQJCTB4MTAwMApAQCAtMjA5Myw2ICsyMTE5LDEwIEBACiBlbnVtIHFsYV93b3JrX3R5cGUgewogCVFMQV9FVlRfQUVOLAogCVFMQV9FVlRfSURDX0FDSywKKwlRTEFfRVZUX0FTWU5DX0xPR0lOLAorCVFMQV9FVlRfQVNZTkNfTE9HSU5fRE9ORSwKKwlRTEFfRVZUX0FTWU5DX0xPR09VVCwKKwlRTEFfRVZUX0FTWU5DX0xPR09VVF9ET05FLAogfTsKIAogCkBAIC0yMTExLDYgKzIxNDEsMTEgQEAKICNkZWZpbmUgUUxBX0lEQ19BQ0tfUkVHUwk3CiAJCQl1aW50MTZfdCBtYltRTEFfSURDX0FDS19SRUdTXTsKIAkJfSBpZGNfYWNrOworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGZjX3BvcnQgKmZjcG9ydDsKKyNkZWZpbmUgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQJQklUXzAKKwkJCXUxNiBkYXRhWzJdOworCQl9IGxvZ2lvOwogCX0gdTsKIH07CiAKQEAgLTIyMjQsNiArMjI1OSw3IEBACiAJCXVpbnQzMl90CWNoaXBfcmVzZXRfZG9uZQkJOjE7CiAJCXVpbnQzMl90CXBvcnQwCQkJOjE7CiAJCXVpbnQzMl90CXJ1bm5pbmdfZ29sZF9mdwkJOjE7CisJCXVpbnQzMl90CWNwdV9hZmZpbml0eV9lbmFibGVkCToxOwogCX0gZmxhZ3M7CiAKIAkvKiBUaGlzIHNwaW5sb2NrIGlzIHVzZWQgdG8gcHJvdGVjdCAiaW8gdHJhbnNhY3Rpb25zIiwgeW91IG11c3QKQEAgLTIzNTAsNiArMjM4Niw3IEBACiAJCQkJKGhhKS0+ZmxhZ3MubXNpeF9lbmFibGVkKQogI2RlZmluZSBJU19GQUNfUkVRVUlSRUQoaGEpCShJU19RTEE4MVhYKGhhKSkKICNkZWZpbmUgSVNfTk9DQUNIRV9WUERfVFlQRShoYSkJKElTX1FMQTgxWFgoaGEpKQorI2RlZmluZSBJU19BTE9HSU9fQ0FQQUJMRShoYSkJKElTX1FMQTIzWFgoaGEpIHx8IElTX0ZXSTJfQ0FQQUJMRShoYSkpCiAKICNkZWZpbmUgSVNfSUlETUFfQ0FQQUJMRShoYSkgICAgKChoYSktPmRldmljZV90eXBlICYgRFRfSUlETUEpCiAjZGVmaW5lIElTX0ZXSTJfQ0FQQUJMRShoYSkgICAgICgoaGEpLT5kZXZpY2VfdHlwZSAmIERUX0ZXSTIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZncuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCmluZGV4IGRmZGUyZGQuLjY2YThkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9mdy5oCkBAIC0xMTI2LDcgKzExMjYsNyBAQAogCXVpbnQxNl90IGlkOwogCXVpbnQxNl90IHJlc2VydmVkXzQ7CiAJdWludDE2X3QgaG9wY3Q7Ci0JdWludDhfdCByZXNlcnZlZF81OworCXVpbnQ4X3QgcmVzZXJ2ZWRfNVsyXTsKIH07CiAKICNkZWZpbmUgVlBfUlBUX0lEX0lPQ0JfVFlQRQkweDMyCS8qIFJlcG9ydCBJRCBBY3F1aXNpdGlvbiBlbnRyeS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9nYmwuaAppbmRleCA2NWIxMmQ4Li5mM2QxZDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ2JsLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dibC5oCkBAIC01Miw2ICs1MiwxNCBAQAogCiBleHRlcm4gdm9pZCBxbGE4NHh4X3B1dF9jaGlwKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwogCitleHRlcm4gaW50IHFsYTJ4MDBfYXN5bmNfbG9naW4oc3RydWN0IHNjc2lfcWxhX2hvc3QgKiwgZmNfcG9ydF90ICosCisgICAgdWludDE2X3QgKik7CitleHRlcm4gaW50IHFsYTJ4MDBfYXN5bmNfbG9nb3V0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9hc3luY19sb2dpbl9kb25lKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqLAorICAgIHVpbnQxNl90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX2FzeW5jX2xvZ291dF9kb25lKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqLAorICAgIHVpbnQxNl90ICopOworCiAvKgogICogR2xvYmFsIERhdGEgaW4gcWxhX29zLmMgc291cmNlIGZpbGUuCiAgKi8KQEAgLTc2LDYgKzg0LDE1IEBACiBleHRlcm4gaW50IHFsYTJ4MDBfcG9zdF9hZW5fd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBlbnVtCiAgICAgZmNfaG9zdF9ldmVudF9jb2RlLCB1MzIpOwogZXh0ZXJuIGludCBxbGEyeDAwX3Bvc3RfaWRjX2Fja193b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHVpbnQxNl90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9naW5fd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLCBmY19wb3J0X3QgKiwKKyAgICB1aW50MTZfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9wb3N0X2FzeW5jX2xvZ2luX2RvbmVfd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLAorICAgIGZjX3BvcnRfdCAqLCB1aW50MTZfdCAqKTsKK2V4dGVybiBpbnQgcWxhMngwMF9wb3N0X2FzeW5jX2xvZ291dF93b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIGZjX3BvcnRfdCAqLAorICAgIHVpbnQxNl90ICopOworZXh0ZXJuIGludCBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9nb3V0X2RvbmVfd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqLAorICAgIGZjX3BvcnRfdCAqLCB1aW50MTZfdCAqKTsKKwogZXh0ZXJuIGludCBxbGE4MXh4X3Jlc3RhcnRfbXBpX2Zpcm13YXJlKHNjc2lfcWxhX2hvc3RfdCAqKTsKIAogZXh0ZXJuIHZvaWQgcWxhMngwMF9hYm9ydF9mY3BvcnRfY21kcyhmY19wb3J0X3QgKik7CkBAIC04Myw2ICsxMDAsOCBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqKTsKIGV4dGVybiB2b2lkIHFsYTJ4MDBfZnJlZV9ob3N0KHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOwogZXh0ZXJuIHZvaWQgcWxhMngwMF9yZWxvZ2luKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworZXh0ZXJuIHZvaWQgcWxhMngwMF9kb193b3JrKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopOworCiAvKgogICogR2xvYmFsIEZ1bmN0aW9ucyBpbiBxbGFfbWlkLmMgc291cmNlIGZpbGUuCiAgKi8KQEAgLTEzNSw2ICsxNTQsNyBAQAogCQkJCQkJdWludDE2X3QsIHVpbnQxNl90LCB1aW50OF90KTsKIGludCBfX3FsYTJ4MDBfbWFya2VyKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICosIHN0cnVjdCByZXFfcXVlICosIHN0cnVjdCByc3BfcXVlICosCiAJCQkJCQl1aW50MTZfdCwgdWludDE2X3QsIHVpbnQ4X3QpOworZXh0ZXJuIGludCBxbGEyeDAwX3N0YXJ0X3NwKHNyYl90ICopOwogCiAvKgogICogR2xvYmFsIEZ1bmN0aW9uIFByb3RvdHlwZXMgaW4gcWxhX21ieC5jIHNvdXJjZSBmaWxlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2dzLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwppbmRleCA5MTc1MzRiLi40NjQ3MDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZ3MuYwpAQCAtMTY3NCw2ICsxNjc0LDEwIEBACiBxbGEyeDAwX2ZkbWlfcmVnaXN0ZXIoc2NzaV9xbGFfaG9zdF90ICp2aGEpCiB7CiAJaW50IHJ2YWw7CisgICAgICAgc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisKKwlpZiAoSVNfUUxBMjEwMChoYSkgfHwgSVNfUUxBMjIwMChoYSkpCisJCXJldHVybiBRTEFfRlVOQ1RJT05fRkFJTEVEOwogCiAJcnZhbCA9IHFsYTJ4MDBfbWdtdF9zdnJfbG9naW4odmhhKTsKIAlpZiAocnZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCmluZGV4IGYyY2U4ZTMuLjllM2VhYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYwpAQCAtNDAsNiArNDAsMjEwIEBACiBzdGF0aWMgaW50IHFsYTg0eHhfaW5pdF9jaGlwKHNjc2lfcWxhX2hvc3RfdCAqKTsKIHN0YXRpYyBpbnQgcWxhMjV4eF9pbml0X3F1ZXVlcyhzdHJ1Y3QgcWxhX2h3X2RhdGEgKik7CiAKKy8qIFNSQiBFeHRlbnNpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQKK3FsYTJ4MDBfY3R4X3NwX3RpbWVvdXQodW5zaWduZWQgbG9uZyBfX2RhdGEpCit7CisJc3JiX3QgKnNwID0gKHNyYl90ICopX19kYXRhOworCXN0cnVjdCBzcmJfY3R4ICpjdHg7CisJZmNfcG9ydF90ICpmY3BvcnQgPSBzcC0+ZmNwb3J0OworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSBmY3BvcnQtPnZoYS0+aHc7CisJc3RydWN0IHJlcV9xdWUgKnJlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJcmVxID0gaGEtPnJlcV9xX21hcFswXTsKKwlyZXEtPm91dHN0YW5kaW5nX2NtZHNbc3AtPmhhbmRsZV0gPSBOVUxMOworCWN0eCA9IHNwLT5jdHg7CisJY3R4LT50aW1lb3V0KHNwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCisJY3R4LT5mcmVlKHNwKTsKK30KKworc3RhdGljIHZvaWQKK3FsYTJ4MDBfY3R4X3NwX2ZyZWUoc3JiX3QgKnNwKQoreworCXN0cnVjdCBzcmJfY3R4ICpjdHggPSBzcC0+Y3R4OworCisJa2ZyZWUoY3R4KTsKKwltZW1wb29sX2ZyZWUoc3AsIHNwLT5mY3BvcnQtPnZoYS0+aHctPnNyYl9tZW1wb29sKTsKK30KKworaW5saW5lIHNyYl90ICoKK3FsYTJ4MDBfZ2V0X2N0eF9zcChzY3NpX3FsYV9ob3N0X3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsIHNpemVfdCBzaXplLAorICAgIHVuc2lnbmVkIGxvbmcgdG1vKQoreworCXNyYl90ICpzcDsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzdHJ1Y3Qgc3JiX2N0eCAqY3R4OworCisJc3AgPSBtZW1wb29sX2FsbG9jKGhhLT5zcmJfbWVtcG9vbCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzcCkKKwkJZ290byBkb25lOworCWN0eCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpIHsKKwkJbWVtcG9vbF9mcmVlKHNwLCBoYS0+c3JiX21lbXBvb2wpOworCQlnb3RvIGRvbmU7CisJfQorCisJbWVtc2V0KHNwLCAwLCBzaXplb2YoKnNwKSk7CisJc3AtPmZjcG9ydCA9IGZjcG9ydDsKKwlzcC0+Y3R4ID0gY3R4OworCWN0eC0+ZnJlZSA9IHFsYTJ4MDBfY3R4X3NwX2ZyZWU7CisKKwlpbml0X3RpbWVyKCZjdHgtPnRpbWVyKTsKKwlpZiAoIXRtbykKKwkJZ290byBkb25lOworCWN0eC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0bW8gKiBIWjsKKwljdHgtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzcDsKKwljdHgtPnRpbWVyLmZ1bmN0aW9uID0gcWxhMngwMF9jdHhfc3BfdGltZW91dDsKKwlhZGRfdGltZXIoJmN0eC0+dGltZXIpOworZG9uZToKKwlyZXR1cm4gc3A7Cit9CisKKy8qIEFzeW5jaHJvbm91cyBMb2dpbi9Mb2dvdXQgUm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBFTFNfVE1PXzJfUkFUT1YoaGEpICgoaGEpLT5yX2FfdG92IC8gMTAgKiAyKQorCitzdGF0aWMgdm9pZAorcWxhMngwMF9hc3luY19sb2dpb190aW1lb3V0KHNyYl90ICpzcCkKK3sKKwlmY19wb3J0X3QgKmZjcG9ydCA9IHNwLT5mY3BvcnQ7CisJc3RydWN0IHNyYl9sb2dpbyAqbGlvID0gc3AtPmN0eDsKKworCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIHRpbWVvdXQuXG4iLAorCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwKKwkgICAgbGlvLT5jdHgudHlwZSA9PSBTUkJfTE9HSU5fQ01EID8gImxvZ2luIjogImxvZ291dCIpKTsKKworCWlmIChsaW8tPmN0eC50eXBlID09IFNSQl9MT0dJTl9DTUQpCisJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dvdXRfd29yayhmY3BvcnQtPnZoYSwgZmNwb3J0LCBOVUxMKTsKK30KKworaW50CitxbGEyeDAwX2FzeW5jX2xvZ2luKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0LAorICAgIHVpbnQxNl90ICpkYXRhKQoreworCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXNyYl90ICpzcDsKKwlzdHJ1Y3Qgc3JiX2xvZ2lvICpsaW87CisJaW50IHJ2YWw7CisKKwlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwlzcCA9IHFsYTJ4MDBfZ2V0X2N0eF9zcCh2aGEsIGZjcG9ydCwgc2l6ZW9mKHN0cnVjdCBzcmJfbG9naW8pLAorCSAgICBFTFNfVE1PXzJfUkFUT1YoaGEpICsgMik7CisJaWYgKCFzcCkKKwkJZ290byBkb25lOworCisJbGlvID0gc3AtPmN0eDsKKwlsaW8tPmN0eC50eXBlID0gU1JCX0xPR0lOX0NNRDsKKwlsaW8tPmN0eC50aW1lb3V0ID0gcWxhMngwMF9hc3luY19sb2dpb190aW1lb3V0OworCWxpby0+ZmxhZ3MgfD0gU1JCX0xPR0lOX0NPTkRfUExPR0k7CisJaWYgKGRhdGFbMV0gJiBRTEFfTE9HSU9fTE9HSU5fUkVUUklFRCkKKwkJbGlvLT5mbGFncyB8PSBTUkJfTE9HSU5fUkVUUklFRDsKKwlydmFsID0gcWxhMngwMF9zdGFydF9zcChzcCk7CisJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCWdvdG8gZG9uZV9mcmVlX3NwOworCisJREVCVUcyKHByaW50ayhLRVJOX0RFQlVHCisJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLWxvZ2luIC0gbG9vcC1pZD0leCBwb3J0aWQ9JTAyeCUwMnglMDJ4ICIKKwkgICAgInJldHJpZXM9JWQuXG4iLCBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgZmNwb3J0LT5sb29wX2lkLAorCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsIGZjcG9ydC0+ZF9pZC5iLmFsX3BhLAorCSAgICBmY3BvcnQtPmxvZ2luX3JldHJ5KSk7CisJcmV0dXJuIHJ2YWw7CisKK2RvbmVfZnJlZV9zcDoKKwlkZWxfdGltZXJfc3luYygmbGlvLT5jdHgudGltZXIpOworCWxpby0+Y3R4LmZyZWUoc3ApOworZG9uZToKKwlyZXR1cm4gcnZhbDsKK30KKworaW50CitxbGEyeDAwX2FzeW5jX2xvZ291dChzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhLCBmY19wb3J0X3QgKmZjcG9ydCkKK3sKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzcmJfdCAqc3A7CisJc3RydWN0IHNyYl9sb2dpbyAqbGlvOworCWludCBydmFsOworCisJcnZhbCA9IFFMQV9GVU5DVElPTl9GQUlMRUQ7CisJc3AgPSBxbGEyeDAwX2dldF9jdHhfc3AodmhhLCBmY3BvcnQsIHNpemVvZihzdHJ1Y3Qgc3JiX2xvZ2lvKSwKKwkgICAgRUxTX1RNT18yX1JBVE9WKGhhKSArIDIpOworCWlmICghc3ApCisJCWdvdG8gZG9uZTsKKworCWxpbyA9IHNwLT5jdHg7CisJbGlvLT5jdHgudHlwZSA9IFNSQl9MT0dPVVRfQ01EOworCWxpby0+Y3R4LnRpbWVvdXQgPSBxbGEyeDAwX2FzeW5jX2xvZ2lvX3RpbWVvdXQ7CisJcnZhbCA9IHFsYTJ4MDBfc3RhcnRfc3Aoc3ApOworCWlmIChydmFsICE9IFFMQV9TVUNDRVNTKQorCQlnb3RvIGRvbmVfZnJlZV9zcDsKKworCURFQlVHMihwcmludGsoS0VSTl9ERUJVRworCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy1sb2dvdXQgLSBsb29wLWlkPSV4IHBvcnRpZD0lMDJ4JTAyeCUwMnguXG4iLAorCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgZmNwb3J0LT5sb29wX2lkLAorCSAgICBmY3BvcnQtPmRfaWQuYi5kb21haW4sIGZjcG9ydC0+ZF9pZC5iLmFyZWEsIGZjcG9ydC0+ZF9pZC5iLmFsX3BhKSk7CisJcmV0dXJuIHJ2YWw7CisKK2RvbmVfZnJlZV9zcDoKKwlkZWxfdGltZXJfc3luYygmbGlvLT5jdHgudGltZXIpOworCWxpby0+Y3R4LmZyZWUoc3ApOworZG9uZToKKwlyZXR1cm4gcnZhbDsKK30KKworaW50CitxbGEyeDAwX2FzeW5jX2xvZ2luX2RvbmUoc3RydWN0IHNjc2lfcWxhX2hvc3QgKnZoYSwgZmNfcG9ydF90ICpmY3BvcnQsCisgICAgdWludDE2X3QgKmRhdGEpCit7CisJaW50IHJ2YWw7CisJdWludDhfdCBvcHRzID0gMDsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgTUJTX0NPTU1BTkRfQ09NUExFVEU6CisJCWlmIChmY3BvcnQtPmZsYWdzICYgRkNGX1RBUEVfUFJFU0VOVCkKKwkJCW9wdHMgfD0gQklUXzE7CisJCXJ2YWwgPSBxbGEyeDAwX2dldF9wb3J0X2RhdGFiYXNlKHZoYSwgZmNwb3J0LCBvcHRzKTsKKwkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCisJCQlxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QodmhhLCBmY3BvcnQsIDEsIDApOworCQllbHNlCisJCQlxbGEyeDAwX3VwZGF0ZV9mY3BvcnQodmhhLCBmY3BvcnQpOworCQlicmVhazsKKwljYXNlIE1CU19DT01NQU5EX0VSUk9SOgorCQlpZiAoZGF0YVsxXSAmIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEKQorCQkJc2V0X2JpdChSRUxPR0lOX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJZWxzZQorCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBNQlNfUE9SVF9JRF9VU0VEOgorCQlmY3BvcnQtPmxvb3BfaWQgPSBkYXRhWzFdOworCQlxbGEyeDAwX3Bvc3RfYXN5bmNfbG9naW5fd29yayh2aGEsIGZjcG9ydCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgTUJTX0xPT1BfSURfVVNFRDoKKwkJZmNwb3J0LT5sb29wX2lkKys7CisJCXJ2YWwgPSBxbGEyeDAwX2ZpbmRfbmV3X2xvb3BfaWQodmhhLCBmY3BvcnQpOworCQlpZiAocnZhbCAhPSBRTEFfU1VDQ0VTUykgeworCQkJcWxhMngwMF9tYXJrX2RldmljZV9sb3N0KHZoYSwgZmNwb3J0LCAxLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCXFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl93b3JrKHZoYSwgZmNwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBRTEFfU1VDQ0VTUzsKK30KKworaW50CitxbGEyeDAwX2FzeW5jX2xvZ291dF9kb25lKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICp2aGEsIGZjX3BvcnRfdCAqZmNwb3J0LAorICAgIHVpbnQxNl90ICpkYXRhKQoreworCXFsYTJ4MDBfbWFya19kZXZpY2VfbG9zdCh2aGEsIGZjcG9ydCwgMSwgMCk7CisJcmV0dXJuIFFMQV9TVUNDRVNTOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgIFFMb2dpYyBJU1AyeDAwIEhhcmR3YXJlIFN1cHBvcnQgRnVuY3Rpb25zLiAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05ODcsNyArMTE5MSw2IEBACiAJCQkJICAgIGhhLT5waHlfdmVyc2lvbik7CiAJCQkJaWYgKHJ2YWwgIT0gUUxBX1NVQ0NFU1MpCiAJCQkJCWdvdG8gZmFpbGVkOwotCiAJCQkJaGEtPmZsYWdzLm5waXZfc3VwcG9ydGVkID0gMDsKIAkJCQlpZiAoSVNfUUxBMlhYWF9NSURUWVBFKGhhKSAmJgogCQkJCQkgKGhhLT5md19hdHRyaWJ1dGVzICYgQklUXzIpKSB7CkBAIC0xNTkxLDcgKzE3OTQsOCBAQAogCWNoYXIgKnN0LCAqZW47CiAJdWludDE2X3QgaW5kZXg7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7Ci0JaW50IHVzZV90YmwgPSAhSVNfUUxBMjVYWChoYSkgJiYgIUlTX1FMQTgxWFgoaGEpOworCWludCB1c2VfdGJsID0gIUlTX1FMQTI0WFhfVFlQRShoYSkgJiYgIUlTX1FMQTI1WFgoaGEpICYmCisJICAgICFJU19RTEE4MVhYKGhhKTsKIAogCWlmIChtZW1jbXAobW9kZWwsIEJJTlpFUk8sIGxlbikgIT0gMCkgewogCQlzdHJuY3B5KGhhLT5tb2RlbF9udW1iZXIsIG1vZGVsLCBsZW4pOwpAQCAtMTk3OCw3ICsyMTgyLDcgQEAKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCiAJc3Bpbl9sb2NrX2lycShmY3BvcnQtPnZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQlycG9ydCA9IGZjcG9ydC0+ZHJwb3J0OworCXJwb3J0ID0gZmNwb3J0LT5kcnBvcnQgPyBmY3BvcnQtPmRycG9ydDogZmNwb3J0LT5ycG9ydDsKIAlmY3BvcnQtPmRycG9ydCA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOwogCWlmIChycG9ydCkKQEAgLTIzNDUsOCArMjU0OSw3IEBACiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAotCWlmIChmY3BvcnQtPmRycG9ydCkKLQkJcWxhMngwMF9ycG9ydF9kZWwoZmNwb3J0KTsKKwlxbGEyeDAwX3Jwb3J0X2RlbChmY3BvcnQpOwogCiAJcnBvcnRfaWRzLm5vZGVfbmFtZSA9IHd3bl90b191NjQoZmNwb3J0LT5ub2RlX25hbWUpOwogCXJwb3J0X2lkcy5wb3J0X25hbWUgPSB3d25fdG9fdTY0KGZjcG9ydC0+cG9ydF9uYW1lKTsKQEAgLTMwMzksNiArMzI0MiwxMiBAQAogCXJ2YWwgPSBRTEFfU1VDQ0VTUzsKIAlyZXRyeSA9IDA7CiAKKwlpZiAoSVNfQUxPR0lPX0NBUEFCTEUoaGEpKSB7CisJCXJ2YWwgPSBxbGEyeDAwX3Bvc3RfYXN5bmNfbG9naW5fd29yayh2aGEsIGZjcG9ydCwgTlVMTCk7CisJCWlmICghcnZhbCkKKwkJCXJldHVybiBydmFsOworCX0KKwogCXJ2YWwgPSBxbGEyeDAwX2ZhYnJpY19sb2dpbih2aGEsIGZjcG9ydCwgbmV4dF9sb29waWQpOwogCWlmIChydmFsID09IFFMQV9TVUNDRVNTKSB7CiAJCS8qIFNlbmQgYW4gQURJU0MgdG8gdGFwZSBkZXZpY2VzLiovCkBAIC0zMTMzLDcgKzMzNDIsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlmY3BvcnQtPnBvcnRfdHlwZSA9IEZDVF9UQVJHRVQ7CiAJCQkJaWYgKG1iWzFdICYgQklUXzEpIHsKLQkJCQkJZmNwb3J0LT5mbGFncyB8PSBGQ0ZfVEFQRV9QUkVTRU5UOworCQkJCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9GQ1AyX0RFVklDRTsKIAkJCQl9CiAJCQl9CiAKQEAgLTMyNDQsNyArMzQ1Myw3IEBACiAJc3RydWN0IHJlcV9xdWUgKnJlcTsKIAlzdHJ1Y3QgcnNwX3F1ZSAqcnNwOwogCi0JaWYgKHFsMnhtdWx0aXF1ZV90YWcpCisJaWYgKHZoYS0+aHctPmZsYWdzLmNwdV9hZmZpbml0eV9lbmFibGVkKQogCQlyZXEgPSB2aGEtPmh3LT5yZXFfcV9tYXBbMF07CiAJZWxzZQogCQlyZXEgPSB2aGEtPnJlcTsKQEAgLTMyODYsMTUgKzM0OTUsMTcgQEAKIH0KIAogdm9pZAotcWxhMngwMF91cGRhdGVfZmNwb3J0cyhzY3NpX3FsYV9ob3N0X3QgKnZoYSkKK3FsYTJ4MDBfdXBkYXRlX2ZjcG9ydHMoc2NzaV9xbGFfaG9zdF90ICpiYXNlX3ZoYSkKIHsKIAlmY19wb3J0X3QgKmZjcG9ydDsKKwlzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdHZwLCAqdmhhOwogCiAJLyogR28gd2l0aCBkZWZlcnJlZCByZW1vdmFsIG9mIHJwb3J0IHJlZmVyZW5jZXMuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZ2aGEtPnZwX2ZjcG9ydHMsIGxpc3QpCi0JCWlmIChmY3BvcnQgJiYgZmNwb3J0LT5kcnBvcnQgJiYKLQkJICAgIGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPSBGQ1NfVU5DT05GSUdVUkVEKQotCQkJcWxhMngwMF9ycG9ydF9kZWwoZmNwb3J0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmhhLCB0dnAsICZiYXNlX3ZoYS0+aHctPnZwX2xpc3QsIGxpc3QpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KQorCQkJaWYgKGZjcG9ydCAmJiBmY3BvcnQtPmRycG9ydCAmJgorCQkJICAgIGF0b21pY19yZWFkKCZmY3BvcnQtPnN0YXRlKSAhPSBGQ1NfVU5DT05GSUdVUkVEKQorCQkJCXFsYTJ4MDBfcnBvcnRfZGVsKGZjcG9ydCk7CiB9CiAKIC8qCkBAIC0zMzMxLDggKzM1NDIsNiBAQAogCQlpZiAoYXRvbWljX3JlYWQoJnZoYS0+bG9vcF9zdGF0ZSkgIT0gTE9PUF9ET1dOKSB7CiAJCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3Bfc3RhdGUsIExPT1BfRE9XTik7CiAJCQlxbGEyeDAwX21hcmtfYWxsX2RldmljZXNfbG9zdCh2aGEsIDApOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHZwLCB0dnAsICZoYS0+dnBfbGlzdCwgbGlzdCkKLQkJCSAgICAgICBxbGEyeDAwX21hcmtfYWxsX2RldmljZXNfbG9zdCh2cCwgMCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoIWF0b21pY19yZWFkKCZ2aGEtPmxvb3BfZG93bl90aW1lcikpCiAJCQkJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsCkBAIC00MjY0LDcgKzQ0NzMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJ2YWwgPSBxbGEyeDAwX2Z3X3JlYWR5KGJhc2VfdmhhKTsKLQlpZiAocWwyeG11bHRpcXVlX3RhZykKKwlpZiAoaGEtPmZsYWdzLmNwdV9hZmZpbml0eV9lbmFibGVkKQogCQlyZXEgPSBoYS0+cmVxX3FfbWFwWzBdOwogCWVsc2UKIAkJcmVxID0gdmhhLT5yZXE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwppbmRleCAxMzM5NmJlLi5jNWNjYWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKQEAgLTM1MCw2ICszNTAsNyBAQAogCS8qIEJ1aWxkIGNvbW1hbmQgcGFja2V0ICovCiAJcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZCA9IGhhbmRsZTsKIAlyZXEtPm91dHN0YW5kaW5nX2NtZHNbaGFuZGxlXSA9IHNwOworCXNwLT5oYW5kbGUgPSBoYW5kbGU7CiAJc3AtPmNtZC0+aG9zdF9zY3JpYmJsZSA9ICh1bnNpZ25lZCBjaGFyICopKHVuc2lnbmVkIGxvbmcpaGFuZGxlOwogCXJlcS0+Y250IC09IHJlcV9jbnQ7CiAKQEAgLTc3OCw2ICs3NzksNyBAQAogCS8qIEJ1aWxkIGNvbW1hbmQgcGFja2V0LiAqLwogCXJlcS0+Y3VycmVudF9vdXRzdGFuZGluZ19jbWQgPSBoYW5kbGU7CiAJcmVxLT5vdXRzdGFuZGluZ19jbWRzW2hhbmRsZV0gPSBzcDsKKwlzcC0+aGFuZGxlID0gaGFuZGxlOwogCXNwLT5jbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSh1bnNpZ25lZCBsb25nKWhhbmRsZTsKIAlyZXEtPmNudCAtPSByZXFfY250OwogCkBAIC04NTIsOSArODU0LDIxMSBAQAogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSBzcC0+ZmNwb3J0LT52aGEtPmh3OwogCWludCBhZmZpbml0eSA9IGNtZC0+cmVxdWVzdC0+Y3B1OwogCi0JaWYgKHFsMnhtdWx0aXF1ZV90YWcgJiYgYWZmaW5pdHkgPj0gMCAmJgorCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQgJiYgYWZmaW5pdHkgPj0gMCAmJgogCQlhZmZpbml0eSA8IGhhLT5tYXhfcnNwX3F1ZXVlcyAtIDEpCiAJCSpyc3AgPSBoYS0+cnNwX3FfbWFwW2FmZmluaXR5ICsgMV07CiAJIGVsc2UKIAkJKnJzcCA9IGhhLT5yc3BfcV9tYXBbMF07CiB9CisKKy8qIEdlbmVyaWMgQ29udHJvbC1TUkIgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4gKi8KKworc3RhdGljIHZvaWQgKgorcWxhMngwMF9hbGxvY19pb2NicyhzcmJfdCAqc3ApCit7CisJc2NzaV9xbGFfaG9zdF90CSp2aGEgPSBzcC0+ZmNwb3J0LT52aGE7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJc3RydWN0IHJlcV9xdWUgKnJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CisJZGV2aWNlX3JlZ190IF9faW9tZW0gKnJlZyA9IElTUF9RVUVfUkVHKGhhLCByZXEtPmlkKTsKKwl1aW50MzJfdCBpbmRleCwgaGFuZGxlOworCXJlcXVlc3RfdCAqcGt0OworCXVpbnQxNl90IGNudCwgcmVxX2NudDsKKworCXBrdCA9IE5VTEw7CisJcmVxX2NudCA9IDE7CisKKwkvKiBDaGVjayBmb3Igcm9vbSBpbiBvdXRzdGFuZGluZyBjb21tYW5kIGxpc3QuICovCisJaGFuZGxlID0gcmVxLT5jdXJyZW50X291dHN0YW5kaW5nX2NtZDsKKwlmb3IgKGluZGV4ID0gMTsgaW5kZXggPCBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFM7IGluZGV4KyspIHsKKwkJaGFuZGxlKys7CisJCWlmIChoYW5kbGUgPT0gTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKQorCQkJaGFuZGxlID0gMTsKKwkJaWYgKCFyZXEtPm91dHN0YW5kaW5nX2NtZHNbaGFuZGxlXSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaW5kZXggPT0gTUFYX09VVFNUQU5ESU5HX0NPTU1BTkRTKQorCQlnb3RvIHF1ZXVpbmdfZXJyb3I7CisKKwkvKiBDaGVjayBmb3Igcm9vbSBvbiByZXF1ZXN0IHF1ZXVlLiAqLworCWlmIChyZXEtPmNudCA8IHJlcV9jbnQpIHsKKwkJaWYgKGhhLT5tcWVuYWJsZSkKKwkJCWNudCA9IFJEX1JFR19EV09SRCgmcmVnLT5pc3AyNW1xLnJlcV9xX291dCk7CisJCWVsc2UgaWYgKElTX0ZXSTJfQ0FQQUJMRShoYSkpCisJCQljbnQgPSBSRF9SRUdfRFdPUkQoJnJlZy0+aXNwMjQucmVxX3Ffb3V0KTsKKwkJZWxzZQorCQkJY250ID0gcWxhMngwMF9kZWJvdW5jZV9yZWdpc3RlcigKKwkJCSAgICBJU1BfUkVRX1FfT1VUKGhhLCAmcmVnLT5pc3ApKTsKKworCQlpZiAgKHJlcS0+cmluZ19pbmRleCA8IGNudCkKKwkJCXJlcS0+Y250ID0gY250IC0gcmVxLT5yaW5nX2luZGV4OworCQllbHNlCisJCQlyZXEtPmNudCA9IHJlcS0+bGVuZ3RoIC0KKwkJCSAgICAocmVxLT5yaW5nX2luZGV4IC0gY250KTsKKwl9CisJaWYgKHJlcS0+Y250IDwgcmVxX2NudCkKKwkJZ290byBxdWV1aW5nX2Vycm9yOworCisJLyogUHJlcCBwYWNrZXQgKi8KKwlyZXEtPmN1cnJlbnRfb3V0c3RhbmRpbmdfY21kID0gaGFuZGxlOworCXJlcS0+b3V0c3RhbmRpbmdfY21kc1toYW5kbGVdID0gc3A7CisJcmVxLT5jbnQgLT0gcmVxX2NudDsKKworCXBrdCA9IHJlcS0+cmluZ19wdHI7CisJbWVtc2V0KHBrdCwgMCwgUkVRVUVTVF9FTlRSWV9TSVpFKTsKKwlwa3QtPmVudHJ5X2NvdW50ID0gcmVxX2NudDsKKwlwa3QtPmhhbmRsZSA9IGhhbmRsZTsKKwlzcC0+aGFuZGxlID0gaGFuZGxlOworCitxdWV1aW5nX2Vycm9yOgorCXJldHVybiBwa3Q7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyeDAwX3N0YXJ0X2lvY2JzKHNyYl90ICpzcCkKK3sKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gc3AtPmZjcG9ydC0+dmhhLT5odzsKKwlzdHJ1Y3QgcmVxX3F1ZSAqcmVxID0gaGEtPnJlcV9xX21hcFswXTsKKwlkZXZpY2VfcmVnX3QgX19pb21lbSAqcmVnID0gSVNQX1FVRV9SRUcoaGEsIHJlcS0+aWQpOworCXN0cnVjdCBkZXZpY2VfcmVnXzJ4eHggX19pb21lbSAqaW9yZWcgPSAmaGEtPmlvYmFzZS0+aXNwOworCisJLyogQWRqdXN0IHJpbmcgaW5kZXguICovCisJcmVxLT5yaW5nX2luZGV4Kys7CisJaWYgKHJlcS0+cmluZ19pbmRleCA9PSByZXEtPmxlbmd0aCkgeworCQlyZXEtPnJpbmdfaW5kZXggPSAwOworCQlyZXEtPnJpbmdfcHRyID0gcmVxLT5yaW5nOworCX0gZWxzZQorCQlyZXEtPnJpbmdfcHRyKys7CisKKwkvKiBTZXQgY2hpcCBuZXcgcmluZyBpbmRleC4gKi8KKwlpZiAoaGEtPm1xZW5hYmxlKSB7CisJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjVtcS5yZXFfcV9pbiwgcmVxLT5yaW5nX2luZGV4KTsKKwkJUkRfUkVHX0RXT1JEKCZpb3JlZy0+aGNjcik7CisJfSBlbHNlIGlmIChJU19GV0kyX0NBUEFCTEUoaGEpKSB7CisJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aXNwMjQucmVxX3FfaW4sIHJlcS0+cmluZ19pbmRleCk7CisJCVJEX1JFR19EV09SRF9SRUxBWEVEKCZyZWctPmlzcDI0LnJlcV9xX2luKTsKKwl9IGVsc2UgeworCQlXUlRfUkVHX1dPUkQoSVNQX1JFUV9RX0lOKGhhLCAmcmVnLT5pc3ApLCByZXEtPnJpbmdfaW5kZXgpOworCQlSRF9SRUdfV09SRF9SRUxBWEVEKElTUF9SRVFfUV9JTihoYSwgJnJlZy0+aXNwKSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcWxhMjR4eF9sb2dpbl9pb2NiKHNyYl90ICpzcCwgc3RydWN0IGxvZ2lvX2VudHJ5XzI0eHggKmxvZ2lvKQoreworCXN0cnVjdCBzcmJfbG9naW8gKmxpbyA9IHNwLT5jdHg7CisKKwlsb2dpby0+ZW50cnlfdHlwZSA9IExPR0lOT1VUX1BPUlRfSU9DQl9UWVBFOworCWxvZ2lvLT5jb250cm9sX2ZsYWdzID0gY3B1X3RvX2xlMTYoTENGX0NPTU1BTkRfUExPR0kpOworCWlmIChsaW8tPmZsYWdzICYgU1JCX0xPR0lOX0NPTkRfUExPR0kpCisJCWxvZ2lvLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KExDRl9DT05EX1BMT0dJKTsKKwlpZiAobGlvLT5mbGFncyAmIFNSQl9MT0dJTl9TS0lQX1BSTEkpCisJCWxvZ2lvLT5jb250cm9sX2ZsYWdzIHw9IGNwdV90b19sZTE2KExDRl9TS0lQX1BSTEkpOworCWxvZ2lvLT5ucG9ydF9oYW5kbGUgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKwlsb2dpby0+cG9ydF9pZFswXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5hbF9wYTsKKwlsb2dpby0+cG9ydF9pZFsxXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5hcmVhOworCWxvZ2lvLT5wb3J0X2lkWzJdID0gc3AtPmZjcG9ydC0+ZF9pZC5iLmRvbWFpbjsKKwlsb2dpby0+dnBfaW5kZXggPSBzcC0+ZmNwb3J0LT52cF9pZHg7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyeDAwX2xvZ2luX2lvY2Ioc3JiX3QgKnNwLCBzdHJ1Y3QgbWJ4X2VudHJ5ICptYngpCit7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHNwLT5mY3BvcnQtPnZoYS0+aHc7CisJc3RydWN0IHNyYl9sb2dpbyAqbGlvID0gc3AtPmN0eDsKKwl1aW50MTZfdCBvcHRzOworCisJbWJ4LT5lbnRyeV90eXBlID0gTUJYX0lPQ0JfVFlQRTs7CisJU0VUX1RBUkdFVF9JRChoYSwgbWJ4LT5sb29wX2lkLCBzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKwltYngtPm1iMCA9IGNwdV90b19sZTE2KE1CQ19MT0dJTl9GQUJSSUNfUE9SVCk7CisJb3B0cyA9IGxpby0+ZmxhZ3MgJiBTUkJfTE9HSU5fQ09ORF9QTE9HSSA/IEJJVF8wOiAwOworCW9wdHMgfD0gbGlvLT5mbGFncyAmIFNSQl9MT0dJTl9TS0lQX1BSTEkgPyBCSVRfMTogMDsKKwlpZiAoSEFTX0VYVEVOREVEX0lEUyhoYSkpIHsKKwkJbWJ4LT5tYjEgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5sb29wX2lkKTsKKwkJbWJ4LT5tYjEwID0gY3B1X3RvX2xlMTYob3B0cyk7CisJfSBlbHNlIHsKKwkJbWJ4LT5tYjEgPSBjcHVfdG9fbGUxNigoc3AtPmZjcG9ydC0+bG9vcF9pZCA8PCA4KSB8IG9wdHMpOworCX0KKwltYngtPm1iMiA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmRfaWQuYi5kb21haW4pOworCW1ieC0+bWIzID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+ZF9pZC5iLmFyZWEgPDwgOCB8CisJICAgIHNwLT5mY3BvcnQtPmRfaWQuYi5hbF9wYSk7CisJbWJ4LT5tYjkgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT52cF9pZHgpOworfQorCitzdGF0aWMgdm9pZAorcWxhMjR4eF9sb2dvdXRfaW9jYihzcmJfdCAqc3AsIHN0cnVjdCBsb2dpb19lbnRyeV8yNHh4ICpsb2dpbykKK3sKKwlsb2dpby0+ZW50cnlfdHlwZSA9IExPR0lOT1VUX1BPUlRfSU9DQl9UWVBFOworCWxvZ2lvLT5jb250cm9sX2ZsYWdzID0KKwkgICAgY3B1X3RvX2xlMTYoTENGX0NPTU1BTkRfTE9HT3xMQ0ZfSU1QTF9MT0dPKTsKKwlsb2dpby0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+bG9vcF9pZCk7CisJbG9naW8tPnBvcnRfaWRbMF0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuYWxfcGE7CisJbG9naW8tPnBvcnRfaWRbMV0gPSBzcC0+ZmNwb3J0LT5kX2lkLmIuYXJlYTsKKwlsb2dpby0+cG9ydF9pZFsyXSA9IHNwLT5mY3BvcnQtPmRfaWQuYi5kb21haW47CisJbG9naW8tPnZwX2luZGV4ID0gc3AtPmZjcG9ydC0+dnBfaWR4OworfQorCitzdGF0aWMgdm9pZAorcWxhMngwMF9sb2dvdXRfaW9jYihzcmJfdCAqc3AsIHN0cnVjdCBtYnhfZW50cnkgKm1ieCkKK3sKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gc3AtPmZjcG9ydC0+dmhhLT5odzsKKworCW1ieC0+ZW50cnlfdHlwZSA9IE1CWF9JT0NCX1RZUEU7OworCVNFVF9UQVJHRVRfSUQoaGEsIG1ieC0+bG9vcF9pZCwgc3AtPmZjcG9ydC0+bG9vcF9pZCk7CisJbWJ4LT5tYjAgPSBjcHVfdG9fbGUxNihNQkNfTE9HT1VUX0ZBQlJJQ19QT1JUKTsKKwltYngtPm1iMSA9IEhBU19FWFRFTkRFRF9JRFMoaGEpID8KKwkgICAgY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+bG9vcF9pZCk6CisJICAgIGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmxvb3BfaWQgPDwgOCk7CisJbWJ4LT5tYjIgPSBjcHVfdG9fbGUxNihzcC0+ZmNwb3J0LT5kX2lkLmIuZG9tYWluKTsKKwltYngtPm1iMyA9IGNwdV90b19sZTE2KHNwLT5mY3BvcnQtPmRfaWQuYi5hcmVhIDw8IDggfAorCSAgICBzcC0+ZmNwb3J0LT5kX2lkLmIuYWxfcGEpOworCW1ieC0+bWI5ID0gY3B1X3RvX2xlMTYoc3AtPmZjcG9ydC0+dnBfaWR4KTsKKwkvKiBJbXBsaWNpdDogbWJ4LT5tYngxMCA9IDAuICovCit9CisKK2ludAorcWxhMngwMF9zdGFydF9zcChzcmJfdCAqc3ApCit7CisJaW50IHJ2YWw7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHNwLT5mY3BvcnQtPnZoYS0+aHc7CisJdm9pZCAqcGt0OworCXN0cnVjdCBzcmJfY3R4ICpjdHggPSBzcC0+Y3R4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlydmFsID0gUUxBX0ZVTkNUSU9OX0ZBSUxFRDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKKwlwa3QgPSBxbGEyeDAwX2FsbG9jX2lvY2JzKHNwKTsKKwlpZiAoIXBrdCkKKwkJZ290byBkb25lOworCisJcnZhbCA9IFFMQV9TVUNDRVNTOworCXN3aXRjaCAoY3R4LT50eXBlKSB7CisJY2FzZSBTUkJfTE9HSU5fQ01EOgorCQlJU19GV0kyX0NBUEFCTEUoaGEpID8KKwkJICAgIHFsYTI0eHhfbG9naW5faW9jYihzcCwgcGt0KToKKwkJICAgIHFsYTJ4MDBfbG9naW5faW9jYihzcCwgcGt0KTsKKwkJYnJlYWs7CisJY2FzZSBTUkJfTE9HT1VUX0NNRDoKKwkJSVNfRldJMl9DQVBBQkxFKGhhKSA/CisJCSAgICBxbGEyNHh4X2xvZ291dF9pb2NiKHNwLCBwa3QpOgorCQkgICAgcWxhMngwMF9sb2dvdXRfaW9jYihzcCwgcGt0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJd21iKCk7CisJcWxhMngwMF9zdGFydF9pb2NicyhzcCk7Citkb25lOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5oYXJkd2FyZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJ2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggMjQ1ZTdhZi4uYjIwYTcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtNTk4LDkgKzU5OCw1NCBAQAogCQlicmVhazsKIAogCWNhc2UgTUJBX1BPUlRfVVBEQVRFOgkJLyogUG9ydCBkYXRhYmFzZSB1cGRhdGUgKi8KLQkJLyogT25seSBoYW5kbGUgU0NOcyBmb3Igb3VyIFZwb3J0IGluZGV4LiAqLwotCQlpZiAodmhhLT52cF9pZHggJiYgdmhhLT52cF9pZHggIT0gKG1iWzNdICYgMHhmZikpCisJCS8qCisJCSAqIEhhbmRsZSBvbmx5IGdsb2JhbCBhbmQgdm4tcG9ydCB1cGRhdGUgZXZlbnRzCisJCSAqCisJCSAqIFJlbGV2YW50IGlucHV0czoKKwkJICogbWJbMV0gPSBOX1BvcnQgaGFuZGxlIG9mIGNoYW5nZWQgcG9ydAorCQkgKiBPUiAweGZmZmYgZm9yIGdsb2JhbCBldmVudAorCQkgKiBtYlsyXSA9IE5ldyBsb2dpbiBzdGF0ZQorCQkgKiA3ID0gUG9ydCBsb2dnZWQgb3V0CisJCSAqIG1iWzNdID0gTFNCIGlzIHZwX2lkeCwgMHhmZiA9IGFsbCB2cHMKKwkJICoKKwkJICogU2tpcCBwcm9jZXNzaW5nIGlmOgorCQkgKiAgICAgICBFdmVudCBpcyBnbG9iYWwsIHZwX2lkeCBpcyBOT1QgYWxsIHZwcywKKwkJICogICAgICAgICAgIHZwX2lkeCBkb2VzIG5vdCBtYXRjaAorCQkgKiAgICAgICBFdmVudCBpcyBub3QgZ2xvYmFsLCB2cF9pZHggZG9lcyBub3QgbWF0Y2gKKwkJICovCisJCWlmICgobWJbMV0gPT0gMHhmZmZmICYmIChtYlszXSAmIDB4ZmYpICE9IDB4ZmYpCisJCQl8fCAobWJbMV0gIT0gMHhmZmZmKSkgeworCQkJaWYgKHZoYS0+dnBfaWR4ICE9IChtYlszXSAmIDB4ZmYpKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogR2xvYmFsIGV2ZW50IC0tIHBvcnQgbG9nb3V0IG9yIHBvcnQgdW5hdmFpbGFibGUuICovCisJCWlmIChtYlsxXSA9PSAweGZmZmYgJiYgbWJbMl0gPT0gMHg3KSB7CisJCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IEFzeW5jaHJvbm91cyBQT1JUIFVQREFURS5cbiIsCisJCQkgICAgdmhhLT5ob3N0X25vKSk7CisJCQlERUJVRyhwcmludGsoS0VSTl9JTkZPCisJCQkgICAgInNjc2koJWxkKTogUG9ydCB1bmF2YWlsYWJsZSAlMDR4ICUwNHggJTA0eC5cbiIsCisJCQkgICAgdmhhLT5ob3N0X25vLCBtYlsxXSwgbWJbMl0sIG1iWzNdKSk7CisKKwkJCWlmIChhdG9taWNfcmVhZCgmdmhhLT5sb29wX3N0YXRlKSAhPSBMT09QX0RPV04pIHsKKwkJCQlhdG9taWNfc2V0KCZ2aGEtPmxvb3Bfc3RhdGUsIExPT1BfRE9XTik7CisJCQkJYXRvbWljX3NldCgmdmhhLT5sb29wX2Rvd25fdGltZXIsCisJCQkJICAgIExPT1BfRE9XTl9USU1FKTsKKwkJCQl2aGEtPmRldmljZV9mbGFncyB8PSBERkxHX05PX0NBQkxFOworCQkJCXFsYTJ4MDBfbWFya19hbGxfZGV2aWNlc19sb3N0KHZoYSwgMSk7CisJCQl9CisKKwkJCWlmICh2aGEtPnZwX2lkeCkgeworCQkJCWF0b21pY19zZXQoJnZoYS0+dnBfc3RhdGUsIFZQX0ZBSUxFRCk7CisJCQkJZmNfdnBvcnRfc2V0X3N0YXRlKHZoYS0+ZmNfdnBvcnQsCisJCQkJICAgIEZDX1ZQT1JUX0ZBSUxFRCk7CisJCQkJcWxhMngwMF9tYXJrX2FsbF9kZXZpY2VzX2xvc3QodmhhLCAxKTsKKwkJCX0KKworCQkJdmhhLT5mbGFncy5tYW5hZ2VtZW50X3NlcnZlcl9sb2dnZWRfaW4gPSAwOworCQkJaGEtPmxpbmtfZGF0YV9yYXRlID0gUE9SVF9TUEVFRF9VTktOT1dOOwogCQkJYnJlYWs7CisJCX0KIAogCQkvKgogCQkgKiBJZiBQT1JUIFVQREFURSBpcyBnbG9iYWwgKHJlY2VpdmVkIExJUF9PQ0NVUlJFRC9MSVBfUkVTRVQKQEAgLTY0MCw4ICs2ODUsOSBAQAogCQlpZiAodmhhLT52cF9pZHggJiYgdGVzdF9iaXQoVlBfU0NSX05FRURFRCwgJnZoYS0+dnBfZmxhZ3MpKQogCQkJYnJlYWs7CiAJCS8qIE9ubHkgaGFuZGxlIFNDTnMgZm9yIG91ciBWcG9ydCBpbmRleC4gKi8KLQkJaWYgKHZoYS0+dnBfaWR4ICYmIHZoYS0+dnBfaWR4ICE9IChtYlszXSAmIDB4ZmYpKQorCQlpZiAoaGEtPmZsYWdzLm5waXZfc3VwcG9ydGVkICYmIHZoYS0+dnBfaWR4ICE9IChtYlszXSAmIDB4ZmYpKQogCQkJYnJlYWs7CisKIAkJREVCVUcyKHByaW50aygic2NzaSglbGQpOiBBc3luY2hyb25vdXMgUlNDUiBVUERBVEUuXG4iLAogCQkgICAgdmhhLT5ob3N0X25vKSk7CiAJCURFQlVHKHByaW50ayhLRVJOX0lORk8KQEAgLTg3NCw2ICs5MjAsMjQ5IEBACiAJfQogfQogCitzdGF0aWMgc3JiX3QgKgorcWxhMngwMF9nZXRfc3BfZnJvbV9oYW5kbGUoc2NzaV9xbGFfaG9zdF90ICp2aGEsIGNvbnN0IGNoYXIgKmZ1bmMsCisgICAgc3RydWN0IHJlcV9xdWUgKnJlcSwgdm9pZCAqaW9jYikKK3sKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlzdHNfZW50cnlfdCAqcGt0ID0gaW9jYjsKKwlzcmJfdCAqc3AgPSBOVUxMOworCXVpbnQxNl90IGluZGV4OworCisJaW5kZXggPSBMU1cocGt0LT5oYW5kbGUpOworCWlmIChpbmRleCA+PSBNQVhfT1VUU1RBTkRJTkdfQ09NTUFORFMpIHsKKwkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIiVzOiBJbnZhbGlkIGNvbXBsZXRpb24gaGFuZGxlICgleCkuXG4iLCBmdW5jLCBpbmRleCk7CisJCXNldF9iaXQoSVNQX0FCT1JUX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKKwkJZ290byBkb25lOworCX0KKwlzcCA9IHJlcS0+b3V0c3RhbmRpbmdfY21kc1tpbmRleF07CisJaWYgKCFzcCkgeworCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiJXM6IEludmFsaWQgY29tcGxldGlvbiBoYW5kbGUgKCV4KSAtLSB0aW1lZC1vdXQuXG4iLCBmdW5jLAorCQkgICAgaW5kZXgpOworCQlyZXR1cm4gc3A7CisJfQorCWlmIChzcC0+aGFuZGxlICE9IGluZGV4KSB7CisJCXFsYV9wcmludGsoS0VSTl9XQVJOSU5HLCBoYSwKKwkJICAgICIlczogU1JCIGhhbmRsZSAoJXgpIG1pc21hdGNoICV4LlxuIiwgZnVuYywgc3AtPmhhbmRsZSwKKwkJICAgIGluZGV4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJlcS0+b3V0c3RhbmRpbmdfY21kc1tpbmRleF0gPSBOVUxMOworZG9uZToKKwlyZXR1cm4gc3A7Cit9CisKK3N0YXRpYyB2b2lkCitxbGEyeDAwX21ieF9pb2NiX2VudHJ5KHNjc2lfcWxhX2hvc3RfdCAqdmhhLCBzdHJ1Y3QgcmVxX3F1ZSAqcmVxLAorICAgIHN0cnVjdCBtYnhfZW50cnkgKm1ieCkKK3sKKwljb25zdCBjaGFyIGZ1bmNbXSA9ICJNQlgtSU9DQiI7CisJY29uc3QgY2hhciAqdHlwZTsKKwlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKKwlmY19wb3J0X3QgKmZjcG9ydDsKKwlzcmJfdCAqc3A7CisJc3RydWN0IHNyYl9sb2dpbyAqbGlvOworCXVpbnQxNl90IGRhdGFbMl07CisKKwlzcCA9IHFsYTJ4MDBfZ2V0X3NwX2Zyb21faGFuZGxlKHZoYSwgZnVuYywgcmVxLCBtYngpOworCWlmICghc3ApCisJCXJldHVybjsKKworCXR5cGUgPSBOVUxMOworCWxpbyA9IHNwLT5jdHg7CisJc3dpdGNoIChsaW8tPmN0eC50eXBlKSB7CisJY2FzZSBTUkJfTE9HSU5fQ01EOgorCQl0eXBlID0gImxvZ2luIjsKKwkJYnJlYWs7CisJY2FzZSBTUkJfTE9HT1VUX0NNRDoKKwkJdHlwZSA9ICJsb2dvdXQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCisJCSAgICAiJXM6IFVucmVjb2duaXplZCBTUkI6ICglcCkgdHlwZT0lZC5cbiIsIGZ1bmMsIHNwLAorCQkgICAgbGlvLT5jdHgudHlwZSk7CisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXIoJmxpby0+Y3R4LnRpbWVyKTsKKwlmY3BvcnQgPSBzcC0+ZmNwb3J0OworCisJZGF0YVswXSA9IGRhdGFbMV0gPSAwOworCWlmIChtYngtPmVudHJ5X3N0YXR1cykgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZXJyb3IgZW50cnkgLSBlbnRyeS1zdGF0dXM9JXggIgorCQkgICAgInN0YXR1cz0leCBzdGF0ZS1mbGFnPSV4IHN0YXR1cy1mbGFncz0leC5cbiIsCisJCSAgICBmY3BvcnQtPnZoYS0+aG9zdF9ubywgc3AtPmhhbmRsZSwgdHlwZSwKKwkJICAgIG1ieC0+ZW50cnlfc3RhdHVzLCBsZTE2X3RvX2NwdShtYngtPnN0YXR1cyksCisJCSAgICBsZTE2X3RvX2NwdShtYngtPnN0YXRlX2ZsYWdzKSwKKwkJICAgIGxlMTZfdG9fY3B1KG1ieC0+c3RhdHVzX2ZsYWdzKSkpOworCQlERUJVRzIocWxhMngwMF9kdW1wX2J1ZmZlcigodWludDhfdCAqKW1ieCwgc2l6ZW9mKCptYngpKSk7CisKKwkJZGF0YVswXSA9IE1CU19DT01NQU5EX0VSUk9SOworCQlkYXRhWzFdID0gbGlvLT5mbGFncyAmIFNSQl9MT0dJTl9SRVRSSUVEID8KKwkJICAgIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEOiAwOworCQlnb3RvIGRvbmVfcG9zdF9sb2dpb19kb25lX3dvcms7CisJfQorCisJaWYgKCFtYngtPnN0YXR1cyAmJiBsZTE2X3RvX2NwdShtYngtPm1iMCkgPT0gTUJTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX0RFQlVHCisJCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBjb21wbGV0ZSAtIG1ieDE9JXguXG4iLAorCQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCisJCSAgICBsZTE2X3RvX2NwdShtYngtPm1iMSkpKTsKKworCQlkYXRhWzBdID0gTUJTX0NPTU1BTkRfQ09NUExFVEU7CisJCWlmIChsaW8tPmN0eC50eXBlID09IFNSQl9MT0dJTl9DTUQgJiYgbGUxNl90b19jcHUobWJ4LT5tYjEpICYgQklUXzEpCisJCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9GQ1AyX0RFVklDRTsKKworCQlnb3RvIGRvbmVfcG9zdF9sb2dpb19kb25lX3dvcms7CisJfQorCisJZGF0YVswXSA9IGxlMTZfdG9fY3B1KG1ieC0+bWIwKTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIE1CU19QT1JUX0lEX1VTRUQ6CisJCWRhdGFbMV0gPSBsZTE2X3RvX2NwdShtYngtPm1iMSk7CisJCWJyZWFrOworCWNhc2UgTUJTX0xPT1BfSURfVVNFRDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YVswXSA9IE1CU19DT01NQU5EX0VSUk9SOworCQlkYXRhWzFdID0gbGlvLT5mbGFncyAmIFNSQl9MT0dJTl9SRVRSSUVEID8KKwkJICAgIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEOiAwOworCQlicmVhazsKKwl9CisKKwlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBmYWlsZWQgLSBzdGF0dXM9JXggbWIwPSV4IG1iMT0leCBtYjI9JXggIgorCSAgICAibWI2PSV4IG1iNz0leC5cbiIsCisJICAgIGZjcG9ydC0+dmhhLT5ob3N0X25vLCBzcC0+aGFuZGxlLCB0eXBlLCBsZTE2X3RvX2NwdShtYngtPnN0YXR1cyksCisJICAgIGxlMTZfdG9fY3B1KG1ieC0+bWIwKSwgbGUxNl90b19jcHUobWJ4LT5tYjEpLAorCSAgICBsZTE2X3RvX2NwdShtYngtPm1iMiksIGxlMTZfdG9fY3B1KG1ieC0+bWI2KSwKKwkgICAgbGUxNl90b19jcHUobWJ4LT5tYjcpKSk7CisKK2RvbmVfcG9zdF9sb2dpb19kb25lX3dvcms6CisJbGlvLT5jdHgudHlwZSA9PSBTUkJfTE9HSU5fQ01EID8KKwkgICAgcWxhMngwMF9wb3N0X2FzeW5jX2xvZ2luX2RvbmVfd29yayhmY3BvcnQtPnZoYSwgZmNwb3J0LCBkYXRhKToKKwkgICAgcWxhMngwMF9wb3N0X2FzeW5jX2xvZ291dF9kb25lX3dvcmsoZmNwb3J0LT52aGEsIGZjcG9ydCwgZGF0YSk7CisKKwlsaW8tPmN0eC5mcmVlKHNwKTsKK30KKworc3RhdGljIHZvaWQKK3FsYTI0eHhfbG9naW9fZW50cnkoc2NzaV9xbGFfaG9zdF90ICp2aGEsIHN0cnVjdCByZXFfcXVlICpyZXEsCisgICAgc3RydWN0IGxvZ2lvX2VudHJ5XzI0eHggKmxvZ2lvKQoreworCWNvbnN0IGNoYXIgZnVuY1tdID0gIkxPR0lPLUlPQ0IiOworCWNvbnN0IGNoYXIgKnR5cGU7CisJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJZmNfcG9ydF90ICpmY3BvcnQ7CisJc3JiX3QgKnNwOworCXN0cnVjdCBzcmJfbG9naW8gKmxpbzsKKwl1aW50MTZfdCBkYXRhWzJdOworCXVpbnQzMl90IGlvcFsyXTsKKworCXNwID0gcWxhMngwMF9nZXRfc3BfZnJvbV9oYW5kbGUodmhhLCBmdW5jLCByZXEsIGxvZ2lvKTsKKwlpZiAoIXNwKQorCQlyZXR1cm47CisKKwl0eXBlID0gTlVMTDsKKwlsaW8gPSBzcC0+Y3R4OworCXN3aXRjaCAobGlvLT5jdHgudHlwZSkgeworCWNhc2UgU1JCX0xPR0lOX0NNRDoKKwkJdHlwZSA9ICJsb2dpbiI7CisJCWJyZWFrOworCWNhc2UgU1JCX0xPR09VVF9DTUQ6CisJCXR5cGUgPSAibG9nb3V0IjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkgICAgIiVzOiBVbnJlY29nbml6ZWQgU1JCOiAoJXApIHR5cGU9JWQuXG4iLCBmdW5jLCBzcCwKKwkJICAgIGxpby0+Y3R4LnR5cGUpOworCQlyZXR1cm47CisJfQorCisJZGVsX3RpbWVyKCZsaW8tPmN0eC50aW1lcik7CisJZmNwb3J0ID0gc3AtPmZjcG9ydDsKKworCWRhdGFbMF0gPSBkYXRhWzFdID0gMDsKKwlpZiAobG9naW8tPmVudHJ5X3N0YXR1cykgeworCQlERUJVRzIocHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgInNjc2koJWxkOiV4KTogQXN5bmMtJXMgZXJyb3IgZW50cnkgLSBlbnRyeS1zdGF0dXM9JXguXG4iLAorCQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCisJCSAgICBsb2dpby0+ZW50cnlfc3RhdHVzKSk7CisJCURFQlVHMihxbGEyeDAwX2R1bXBfYnVmZmVyKCh1aW50OF90ICopbG9naW8sIHNpemVvZigqbG9naW8pKSk7CisKKwkJZGF0YVswXSA9IE1CU19DT01NQU5EX0VSUk9SOworCQlkYXRhWzFdID0gbGlvLT5mbGFncyAmIFNSQl9MT0dJTl9SRVRSSUVEID8KKwkJICAgIFFMQV9MT0dJT19MT0dJTl9SRVRSSUVEOiAwOworCQlnb3RvIGRvbmVfcG9zdF9sb2dpb19kb25lX3dvcms7CisJfQorCisJaWYgKGxlMTZfdG9fY3B1KGxvZ2lvLT5jb21wX3N0YXR1cykgPT0gQ1NfQ09NUExFVEUpIHsKKwkJREVCVUcyKHByaW50ayhLRVJOX0RFQlVHCisJCSAgICAic2NzaSglbGQ6JXgpOiBBc3luYy0lcyBjb21wbGV0ZSAtIGlvcDA9JXguXG4iLAorCQkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCisJCSAgICBsZTMyX3RvX2NwdShsb2dpby0+aW9fcGFyYW1ldGVyWzBdKSkpOworCisJCWRhdGFbMF0gPSBNQlNfQ09NTUFORF9DT01QTEVURTsKKwkJaWYgKGxpby0+Y3R4LnR5cGUgPT0gU1JCX0xPR09VVF9DTUQpCisJCQlnb3RvIGRvbmVfcG9zdF9sb2dpb19kb25lX3dvcms7CisKKwkJaW9wWzBdID0gbGUzMl90b19jcHUobG9naW8tPmlvX3BhcmFtZXRlclswXSk7CisJCWlmIChpb3BbMF0gJiBCSVRfNCkgeworCQkJZmNwb3J0LT5wb3J0X3R5cGUgPSBGQ1RfVEFSR0VUOworCQkJaWYgKGlvcFswXSAmIEJJVF84KQorCQkJCWZjcG9ydC0+ZmxhZ3MgfD0gRkNGX0ZDUDJfREVWSUNFOworCQl9CisJCWlmIChpb3BbMF0gJiBCSVRfNSkKKwkJCWZjcG9ydC0+cG9ydF90eXBlID0gRkNUX0lOSVRJQVRPUjsKKwkJaWYgKGxvZ2lvLT5pb19wYXJhbWV0ZXJbN10gfHwgbG9naW8tPmlvX3BhcmFtZXRlcls4XSkKKwkJCWZjcG9ydC0+c3VwcG9ydGVkX2NsYXNzZXMgfD0gRkNfQ09TX0NMQVNTMjsKKwkJaWYgKGxvZ2lvLT5pb19wYXJhbWV0ZXJbOV0gfHwgbG9naW8tPmlvX3BhcmFtZXRlclsxMF0pCisJCQlmY3BvcnQtPnN1cHBvcnRlZF9jbGFzc2VzIHw9IEZDX0NPU19DTEFTUzM7CisKKwkJZ290byBkb25lX3Bvc3RfbG9naW9fZG9uZV93b3JrOworCX0KKworCWlvcFswXSA9IGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMF0pOworCWlvcFsxXSA9IGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMV0pOworCXN3aXRjaCAoaW9wWzBdKSB7CisJY2FzZSBMU0NfU0NPREVfUE9SVElEX1VTRUQ6CisJCWRhdGFbMF0gPSBNQlNfUE9SVF9JRF9VU0VEOworCQlkYXRhWzFdID0gTFNXKGlvcFsxXSk7CisJCWJyZWFrOworCWNhc2UgTFNDX1NDT0RFX05QT1JUX1VTRUQ6CisJCWRhdGFbMF0gPSBNQlNfTE9PUF9JRF9VU0VEOworCQlicmVhazsKKwljYXNlIExTQ19TQ09ERV9DTURfRkFJTEVEOgorCQlpZiAoKGlvcFsxXSAmIDB4ZmYpID09IDB4MDUpIHsKKwkJCWRhdGFbMF0gPSBNQlNfTk9UX0xPR0dFRF9JTjsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZhbGwgdGhyb3VnaC4gKi8KKwlkZWZhdWx0OgorCQlkYXRhWzBdID0gTUJTX0NPTU1BTkRfRVJST1I7CisJCWRhdGFbMV0gPSBsaW8tPmZsYWdzICYgU1JCX0xPR0lOX1JFVFJJRUQgPworCQkgICAgUUxBX0xPR0lPX0xPR0lOX1JFVFJJRUQ6IDA7CisJCWJyZWFrOworCX0KKworCURFQlVHMihwcmludGsoS0VSTl9XQVJOSU5HCisJICAgICJzY3NpKCVsZDoleCk6IEFzeW5jLSVzIGZhaWxlZCAtIGNvbXA9JXggaW9wMD0leCBpb3AxPSV4LlxuIiwKKwkgICAgZmNwb3J0LT52aGEtPmhvc3Rfbm8sIHNwLT5oYW5kbGUsIHR5cGUsCisJICAgIGxlMTZfdG9fY3B1KGxvZ2lvLT5jb21wX3N0YXR1cyksCisJICAgIGxlMzJfdG9fY3B1KGxvZ2lvLT5pb19wYXJhbWV0ZXJbMF0pLAorCSAgICBsZTMyX3RvX2NwdShsb2dpby0+aW9fcGFyYW1ldGVyWzFdKSkpOworCitkb25lX3Bvc3RfbG9naW9fZG9uZV93b3JrOgorCWxpby0+Y3R4LnR5cGUgPT0gU1JCX0xPR0lOX0NNRCA/CisJICAgIHFsYTJ4MDBfcG9zdF9hc3luY19sb2dpbl9kb25lX3dvcmsoZmNwb3J0LT52aGEsIGZjcG9ydCwgZGF0YSk6CisJICAgIHFsYTJ4MDBfcG9zdF9hc3luY19sb2dvdXRfZG9uZV93b3JrKGZjcG9ydC0+dmhhLCBmY3BvcnQsIGRhdGEpOworCisJbGlvLT5jdHguZnJlZShzcCk7Cit9CisKIC8qKgogICogcWxhMngwMF9wcm9jZXNzX3Jlc3BvbnNlX3F1ZXVlKCkgLSBQcm9jZXNzIHJlc3BvbnNlIHF1ZXVlIGVudHJpZXMuCiAgKiBAaGE6IFNDU0kgZHJpdmVyIEhBIGNvbnRleHQKQEAgLTkzNSw2ICsxMjI0LDkgQEAKIAkJY2FzZSBTVEFUVVNfQ09OVF9UWVBFOgogCQkJcWxhMngwMF9zdGF0dXNfY29udF9lbnRyeShyc3AsIChzdHNfY29udF9lbnRyeV90ICopcGt0KTsKIAkJCWJyZWFrOworCQljYXNlIE1CWF9JT0NCX1RZUEU6CisJCQlxbGEyeDAwX21ieF9pb2NiX2VudHJ5KHZoYSwgcnNwLT5yZXEsCisJCQkgICAgKHN0cnVjdCBtYnhfZW50cnkgKilwa3QpOwogCQlkZWZhdWx0OgogCQkJLyogVHlwZSBOb3QgU3VwcG9ydGVkLiAqLwogCQkJREVCVUc0KHByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTEyMjMsNiArMTUxNSw3IEBACiAJCQkJCWNwLT5kZXZpY2UtPmlkLCBjcC0+ZGV2aWNlLT5sdW4sIHJlc2lkLAogCQkJCQlzY3NpX2J1ZmZsZW4oY3ApKSk7CiAKKwkJCQlzY3NpX3NldF9yZXNpZChjcCwgcmVzaWQpOwogCQkJCWNwLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xNTQ0LDYgKzE4MzcsMTAgQEAKIAkJCXFsYTI0eHhfcmVwb3J0X2lkX2FjcXVpc2l0aW9uKHZoYSwKIAkJCSAgICAoc3RydWN0IHZwX3JwdF9pZF9lbnRyeV8yNHh4ICopcGt0KTsKIAkJCWJyZWFrOworCQljYXNlIExPR0lOT1VUX1BPUlRfSU9DQl9UWVBFOgorCQkJcWxhMjR4eF9sb2dpb19lbnRyeSh2aGEsIHJzcC0+cmVxLAorCQkJICAgIChzdHJ1Y3QgbG9naW9fZW50cnlfMjR4eCAqKXBrdCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCS8qIFR5cGUgTm90IFN1cHBvcnRlZC4gKi8KIAkJCURFQlVHNChwcmludGsoS0VSTl9XQVJOSU5HCkBAIC0xNzIzLDggKzIwMjAsMTAgQEAKIAogCXZoYSA9IHFsYTI1eHhfZ2V0X2hvc3QocnNwKTsKIAlxbGEyNHh4X3Byb2Nlc3NfcmVzcG9uc2VfcXVldWUodmhhLCByc3ApOwotCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKLQorCWlmICghaGEtPm1xZW5hYmxlKSB7CisJCVdSVF9SRUdfRFdPUkQoJnJlZy0+aGNjciwgSENDUlhfQ0xSX1JJU0NfSU5UKTsKKwkJUkRfUkVHX0RXT1JEX1JFTEFYRUQoJnJlZy0+aGNjcik7CisJfQogCXNwaW5fdW5sb2NrX2lycSgmaGEtPmhhcmR3YXJlX2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21ieC5jCmluZGV4IGZlNjlmMzAuLmI2MjAyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9tYnguYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWJ4LmMKQEAgLTE1MDcsNyArMTUwNyw3IEBACiAKIAlERUJVRzExKHByaW50aygiJXMoJWxkKTogZW50ZXJlZC5cbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8pKTsKIAotCWlmIChxbDJ4bXVsdGlxdWVfdGFnKQorCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpCiAJCXJlcSA9IGhhLT5yZXFfcV9tYXBbMF07CiAJZWxzZQogCQlyZXEgPSB2aGEtPnJlcTsKQEAgLTIzMjQsNyArMjMyNCw3IEBACiAJdmhhID0gZmNwb3J0LT52aGE7CiAJaGEgPSB2aGEtPmh3OwogCXJlcSA9IHZoYS0+cmVxOwotCWlmIChxbDJ4bXVsdGlxdWVfdGFnKQorCWlmIChoYS0+ZmxhZ3MuY3B1X2FmZmluaXR5X2VuYWJsZWQpCiAJCXJzcCA9IGhhLT5yc3BfcV9tYXBbdGFnICsgMV07CiAJZWxzZQogCQlyc3AgPSByZXEtPnJzcDsKQEAgLTI3NDYsNyArMjc0Niw4IEBACiAJaWYgKHJwdGlkX2VudHJ5LT5mb3JtYXQgPT0gMCkgewogCQlERUJVRzE1KHByaW50aygiJXM6Zm9ybWF0IDAgOiBzY3NpKCVsZCkgbnVtYmVyIG9mIFZQcyBzZXR1cCAlZCwiCiAJCQkiIG51bWJlciBvZiBWUHMgYWNxdWlyZWQgJWRcbiIsIF9fZnVuY19fLCB2aGEtPmhvc3Rfbm8sCi0JCQlNU0IocnB0aWRfZW50cnktPnZwX2NvdW50KSwgTFNCKHJwdGlkX2VudHJ5LT52cF9jb3VudCkpKTsKKwkJCU1TQihsZTE2X3RvX2NwdShycHRpZF9lbnRyeS0+dnBfY291bnQpKSwKKwkJCUxTQihsZTE2X3RvX2NwdShycHRpZF9lbnRyeS0+dnBfY291bnQpKSkpOwogCQlERUJVRzE1KHByaW50aygiJXMgcHJpbWFyeSBwb3J0IGlkICUwMnglMDJ4JTAyeFxuIiwgX19mdW5jX18sCiAJCQlycHRpZF9lbnRyeS0+cG9ydF9pZFsyXSwgcnB0aWRfZW50cnktPnBvcnRfaWRbMV0sCiAJCQlycHRpZF9lbnRyeS0+cG9ydF9pZFswXSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCmluZGV4IGNkNzhjNTAuLjQyYjc5OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKQEAgLTQyLDcgKzQyLDYgQEAKIAogCXNldF9iaXQodnBfaWQsIGhhLT52cF9pZHhfbWFwKTsKIAloYS0+bnVtX3Zob3N0cysrOwotCWhhLT5jdXJfdnBvcnRfY291bnQrKzsKIAl2aGEtPnZwX2lkeCA9IHZwX2lkOwogCWxpc3RfYWRkX3RhaWwoJnZoYS0+bGlzdCwgJmhhLT52cF9saXN0KTsKIAltdXRleF91bmxvY2soJmhhLT52cG9ydF9sb2NrKTsKQEAgLTU4LDcgKzU3LDYgQEAKIAltdXRleF9sb2NrKCZoYS0+dnBvcnRfbG9jayk7CiAJdnBfaWQgPSB2aGEtPnZwX2lkeDsKIAloYS0+bnVtX3Zob3N0cy0tOwotCWhhLT5jdXJfdnBvcnRfY291bnQtLTsKIAljbGVhcl9iaXQodnBfaWQsIGhhLT52cF9pZHhfbWFwKTsKIAlsaXN0X2RlbCgmdmhhLT5saXN0KTsKIAltdXRleF91bmxvY2soJmhhLT52cG9ydF9sb2NrKTsKQEAgLTIzNSw3ICsyMzMsMTEgQEAKIAkJCWF0b21pY19zZXQoJnZoYS0+bG9vcF9kb3duX3RpbWVyLCBMT09QX0RPV05fVElNRSk7CiAJfQogCi0JLyogVG8gZXhjbHVzaXZlbHkgcmVzZXQgdnBvcnQsIHdlIG5lZWQgdG8gbG9nIGl0IG91dCBmaXJzdC4qLworCS8qCisJICogVG8gZXhjbHVzaXZlbHkgcmVzZXQgdnBvcnQsIHdlIG5lZWQgdG8gbG9nIGl0IG91dCBmaXJzdC4gIE5vdGU6IHRoaXMKKwkgKiBjb250cm9sX3ZwIGNhbiBmYWlsIGlmIElTUCByZXNldCBpcyBhbHJlYWR5IGlzc3VlZCwgdGhpcyBpcworCSAqIGV4cGVjdGVkLCBhcyB0aGUgdnAgd291bGQgYmUgYWxyZWFkeSBsb2dnZWQgb3V0IGR1ZSB0byBJU1AgcmVzZXQuCisJICovCiAJaWYgKCF0ZXN0X2JpdChBQk9SVF9JU1BfQUNUSVZFLCAmdmhhLT5kcGNfZmxhZ3MpKQogCQlxbGEyNHh4X2NvbnRyb2xfdnAodmhhLCBWQ0VfQ09NTUFORF9ESVNBQkxFX1ZQU19MT0dPX0FMTCk7CiAKQEAgLTI0NywxOCArMjQ5LDExIEBACiBzdGF0aWMgaW50CiBxbGEyeDAwX2RvX2RwY192cChzY3NpX3FsYV9ob3N0X3QgKnZoYSkKIHsKLQlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKLQlzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKGhhLT5wZGV2KTsKKwlxbGEyeDAwX2RvX3dvcmsodmhhKTsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoVlBfSURYX0FDUVVJUkVELCAmdmhhLT52cF9mbGFncykpIHsKIAkJLyogVlAgYWNxdWlyZWQuIGNvbXBsZXRlIHBvcnQgY29uZmlndXJhdGlvbiAqLwotCQlpZiAoYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSA9PSBMT09QX1JFQURZKSB7Ci0JCQlxbGEyNHh4X2NvbmZpZ3VyZV92cCh2aGEpOwotCQl9IGVsc2UgewotCQkJc2V0X2JpdChWUF9JRFhfQUNRVUlSRUQsICZ2aGEtPnZwX2ZsYWdzKTsKLQkJCXNldF9iaXQoVlBfRFBDX05FRURFRCwgJmJhc2VfdmhhLT5kcGNfZmxhZ3MpOwotCQl9Ci0KKwkJcWxhMjR4eF9jb25maWd1cmVfdnAodmhhKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMDksNiArMzA0LDkgQEAKIAogCWNsZWFyX2JpdChWUF9EUENfTkVFREVELCAmdmhhLT5kcGNfZmxhZ3MpOwogCisJaWYgKCEoaGEtPmN1cnJlbnRfdG9wb2xvZ3kgJiBJU1BfQ0ZHX0YpKQorCQlyZXR1cm47CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodnAsIHR2cCwgJmhhLT52cF9saXN0LCBsaXN0KSB7CiAJCWlmICh2cC0+dnBfaWR4KQogCQkJcmV0ID0gcWxhMngwMF9kb19kcGNfdnAodnApOwpAQCAtNDEzLDYgKzQxMSwxMSBAQAogCiAJdmhhLT5mbGFncy5pbml0X2RvbmUgPSAxOwogCisJbXV0ZXhfbG9jaygmaGEtPnZwb3J0X2xvY2spOworCXNldF9iaXQodmhhLT52cF9pZHgsIGhhLT52cF9pZHhfbWFwKTsKKwloYS0+Y3VyX3Zwb3J0X2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZoYS0+dnBvcnRfbG9jayk7CisKIAlyZXR1cm4gdmhhOwogCiBjcmVhdGVfdmhvc3RfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBmMDM5NmU3Li5iNzlmY2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtMjg3LDkgKzI4NywxMiBAQAogCWludCBxdWVzLCByZXEsIHJldDsKIAlzdHJ1Y3QgcWxhX2h3X2RhdGEgKmhhID0gdmhhLT5odzsKIAorCWlmICghKGhhLT5md19hdHRyaWJ1dGVzICYgQklUXzYpKSB7CisJCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKKwkJCSJGaXJtd2FyZSBpcyBub3QgbXVsdGktcXVldWUgY2FwYWJsZVxuIik7CisJCWdvdG8gZmFpbDsKKwl9CiAJaWYgKHFsMnhtdWx0aXF1ZV90YWcpIHsKLQkJLyogQ1BVIGFmZmluaXR5IG1vZGUgKi8KLQkJaGEtPndxID0gY3JlYXRlX3dvcmtxdWV1ZSgicWxhMnh4eF93cSIpOwogCQkvKiBjcmVhdGUgYSByZXF1ZXN0IHF1ZXVlIGZvciBJTyAqLwogCQlvcHRpb25zIHw9IEJJVF83OwogCQlyZXEgPSBxbGEyNXh4X2NyZWF0ZV9yZXFfcXVlKGhhLCBvcHRpb25zLCAwLCAwLCAtMSwKQEAgLTI5OSw2ICszMDIsNyBAQAogCQkJCSJDYW4ndCBjcmVhdGUgcmVxdWVzdCBxdWV1ZVxuIik7CiAJCQlnb3RvIGZhaWw7CiAJCX0KKwkJaGEtPndxID0gY3JlYXRlX3dvcmtxdWV1ZSgicWxhMnh4eF93cSIpOwogCQl2aGEtPnJlcSA9IGhhLT5yZXFfcV9tYXBbcmVxXTsKIAkJb3B0aW9ucyB8PSBCSVRfMTsKIAkJZm9yIChxdWVzID0gMTsgcXVlcyA8IGhhLT5tYXhfcnNwX3F1ZXVlczsgcXVlcysrKSB7CkBAIC0zMDksNiArMzEzLDggQEAKIAkJCQlnb3RvIGZhaWwyOwogCQkJfQogCQl9CisJCWhhLT5mbGFncy5jcHVfYWZmaW5pdHlfZW5hYmxlZCA9IDE7CisKIAkJREVCVUcyKHFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKIAkJCSJDUFUgYWZmaW5pdHkgbW9kZSBlbmFibGVkLCBuby4gb2YgcmVzcG9uc2UiCiAJCQkiIHF1ZXVlczolZCwgbm8uIG9mIHJlcXVlc3QgcXVldWVzOiVkXG4iLApAQCAtMzE3LDggKzMyMywxMyBAQAogCXJldHVybiAwOwogZmFpbDI6CiAJcWxhMjV4eF9kZWxldGVfcXVldWVzKHZoYSk7CisJZGVzdHJveV93b3JrcXVldWUoaGEtPndxKTsKKwloYS0+d3EgPSBOVUxMOwogZmFpbDoKIAloYS0+bXFlbmFibGUgPSAwOworCWtmcmVlKGhhLT5yZXFfcV9tYXApOworCWtmcmVlKGhhLT5yc3BfcV9tYXApOworCWhhLT5tYXhfcmVxX3F1ZXVlcyA9IGhhLT5tYXhfcnNwX3F1ZXVlcyA9IDE7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ2Miw2ICs0NzMsNyBAQAogCXNwLT5mbGFncyA9IDA7CiAJQ01EX1NQKGNtZCkgPSAodm9pZCAqKXNwOwogCWNtZC0+c2NzaV9kb25lID0gZG9uZTsKKwlzcC0+Y3R4ID0gTlVMTDsKIAogCXJldHVybiBzcDsKIH0KQEAgLTU1NiwxMSArNTY4LDggQEAKIAl1bnNpZ25lZCBsb25nIHdhaXRfaXRlciA9IEFCT1JUX1dBSVRfSVRFUjsKIAlpbnQgcmV0ID0gUUxBX1NVQ0NFU1M7CiAKLQl3aGlsZSAoQ01EX1NQKGNtZCkpIHsKKwl3aGlsZSAoQ01EX1NQKGNtZCkgJiYgd2FpdF9pdGVyLS0pIHsKIAkJbXNsZWVwKEFCT1JUX1BPTExJTkdfUEVSSU9EKTsKLQotCQlpZiAoLS13YWl0X2l0ZXIpCi0JCQlicmVhazsKIAl9CiAJaWYgKENNRF9TUChjbWQpKQogCQlyZXQgPSBRTEFfRlVOQ1RJT05fRkFJTEVEOwpAQCAtNjk4LDYgKzcwNyw4IEBACiAJCQljb250aW51ZTsKIAkJaWYgKHNwLT5mY3BvcnQgIT0gZmNwb3J0KQogCQkJY29udGludWU7CisJCWlmIChzcC0+Y3R4KQorCQkJY29udGludWU7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhhcmR3YXJlX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGhhLT5pc3Bfb3BzLT5hYm9ydF9jb21tYW5kKHNwKSkgewpAQCAtNzgzLDcgKzc5NCw4IEBACiAKIAkJaWYgKHNwID09IE5VTEwpCiAJCQljb250aW51ZTsKLQorCQlpZiAoc3AtPmN0eCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoc3AtPmNtZCAhPSBjbWQpCiAJCQljb250aW51ZTsKIApAQCAtODQ4LDcgKzg2MCw4IEBACiAJCXNwID0gcmVxLT5vdXRzdGFuZGluZ19jbWRzW2NudF07CiAJCWlmICghc3ApCiAJCQljb250aW51ZTsKLQorCQlpZiAoc3AtPmN0eCkKKwkJCWNvbnRpbnVlOwogCQlpZiAodmhhLT52cF9pZHggIT0gc3AtPmZjcG9ydC0+dmhhLT52cF9pZHgpCiAJCQljb250aW51ZTsKIAkJbWF0Y2ggPSAwOwpAQCAtMTEwNiw4ICsxMTE5LDcgQEAKIAlzdHJ1Y3QgZmNfcG9ydCAqZmNwb3J0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCi0JaWYgKGhhLT5mbGFncy5lbmFibGVfbGlwX2Z1bGxfbG9naW4gJiYgIXZoYS0+dnBfaWR4ICYmCi0JICAgICFJU19RTEE4MVhYKGhhKSkgeworCWlmIChoYS0+ZmxhZ3MuZW5hYmxlX2xpcF9mdWxsX2xvZ2luICYmICFJU19RTEE4MVhYKGhhKSkgewogCQlyZXQgPSBxbGEyeDAwX2Z1bGxfbG9naW5fbGlwKHZoYSk7CiAJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkOiAiCkBAIC0xMTIwLDcgKzExMzIsNyBAQAogCQlxbGEyeDAwX3dhaXRfZm9yX2xvb3BfcmVhZHkodmhhKTsKIAl9CiAKLQlpZiAoaGEtPmZsYWdzLmVuYWJsZV9saXBfcmVzZXQgJiYgIXZoYS0+dnBfaWR4KSB7CisJaWYgKGhhLT5mbGFncy5lbmFibGVfbGlwX3Jlc2V0KSB7CiAJCXJldCA9IHFsYTJ4MDBfbGlwX3Jlc2V0KHZoYSk7CiAJCWlmIChyZXQgIT0gUUxBX1NVQ0NFU1MpIHsKIAkJCURFQlVHMl8zKHByaW50aygiJXMoJWxkKTogZmFpbGVkOiAiCkBAIC0xMTU0LDYgKzExNjYsNyBAQAogCWludCBxdWUsIGNudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNyYl90ICpzcDsKKwlzdHJ1Y3Qgc3JiX2N0eCAqY3R4OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OwogCXN0cnVjdCByZXFfcXVlICpyZXE7CiAKQEAgLTExNjYsOCArMTE3OSwxNCBAQAogCQkJc3AgPSByZXEtPm91dHN0YW5kaW5nX2NtZHNbY250XTsKIAkJCWlmIChzcCkgewogCQkJCXJlcS0+b3V0c3RhbmRpbmdfY21kc1tjbnRdID0gTlVMTDsKLQkJCQlzcC0+Y21kLT5yZXN1bHQgPSByZXM7Ci0JCQkJcWxhMngwMF9zcF9jb21wbChoYSwgc3ApOworCQkJCWlmICghc3AtPmN0eCkgeworCQkJCQlzcC0+Y21kLT5yZXN1bHQgPSByZXM7CisJCQkJCXFsYTJ4MDBfc3BfY29tcGwoaGEsIHNwKTsKKwkJCQl9IGVsc2UgeworCQkJCQljdHggPSBzcC0+Y3R4OworCQkJCQlkZWxfdGltZXJfc3luYygmY3R4LT50aW1lcik7CisJCQkJCWN0eC0+ZnJlZShzcCk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMTE5Myw2ICsxMjEyLDcgQEAKIAlzY3NpX3FsYV9ob3N0X3QgKnZoYSA9IHNob3N0X3ByaXYoc2Rldi0+aG9zdCk7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2Rldi0+c2Rldl90YXJnZXQpOworCWZjX3BvcnRfdCAqZmNwb3J0ID0gKihmY19wb3J0X3QgKiopcnBvcnQtPmRkX2RhdGE7CiAJc3RydWN0IHJlcV9xdWUgKnJlcSA9IHZoYS0+cmVxOwogCiAJaWYgKHNkZXYtPnRhZ2dlZF9zdXBwb3J0ZWQpCkBAIC0xMjAxLDYgKzEyMjEsOCBAQAogCQlzY3NpX2RlYWN0aXZhdGVfdGNxKHNkZXYsIHJlcS0+bWF4X3FfZGVwdGgpOwogCiAJcnBvcnQtPmRldl9sb3NzX3RtbyA9IGhhLT5wb3J0X2Rvd25fcmV0cnlfY291bnQ7CisJaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9UQVBFKQorCQlmY3BvcnQtPmZsYWdzIHw9IEZDRl9UQVBFX1BSRVNFTlQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5MjMsNiArMTk0NSw3IEBACiAJaWYgKHJldCkKIAkJZ290byBwcm9iZV9pbml0X2ZhaWxlZDsKIAkvKiBBbGxvYyBhcnJheXMgb2YgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcmluZyBwdHJzICovCitxdWVfaW5pdDoKIAlpZiAoIXFsYTJ4MDBfYWxsb2NfcXVldWVzKGhhKSkgewogCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCSJbRVJST1JdIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlIgpAQCAtMTk1OSwxMSArMTk4MiwxNCBAQAogCQlnb3RvIHByb2JlX2ZhaWxlZDsKIAl9CiAKLQlpZiAoaGEtPm1xZW5hYmxlKQotCQlpZiAocWxhMjV4eF9zZXR1cF9tb2RlKGJhc2VfdmhhKSkKKwlpZiAoaGEtPm1xZW5hYmxlKSB7CisJCWlmIChxbGEyNXh4X3NldHVwX21vZGUoYmFzZV92aGEpKSB7CiAJCQlxbGFfcHJpbnRrKEtFUk5fV0FSTklORywgaGEsCiAJCQkJIkNhbid0IGNyZWF0ZSBxdWV1ZXMsIGZhbGxpbmcgYmFjayB0byBzaW5nbGUiCiAJCQkJIiBxdWV1ZSBtb2RlXG4iKTsKKwkJCWdvdG8gcXVlX2luaXQ7CisJCX0KKwl9CiAKIAlpZiAoaGEtPmZsYWdzLnJ1bm5pbmdfZ29sZF9mdykKIAkJZ290byBza2lwX2RwYzsKQEAgLTIxNTUsMTcgKzIxODEsMTkgQEAKICAgICBpbnQgZGVmZXIpCiB7CiAJc3RydWN0IGZjX3Jwb3J0ICpycG9ydDsKKwlzY3NpX3FsYV9ob3N0X3QgKmJhc2VfdmhhOwogCiAJaWYgKCFmY3BvcnQtPnJwb3J0KQogCQlyZXR1cm47CiAKIAlycG9ydCA9IGZjcG9ydC0+cnBvcnQ7CiAJaWYgKGRlZmVyKSB7CisJCWJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKHZoYS0+aHctPnBkZXYpOwogCQlzcGluX2xvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJZmNwb3J0LT5kcnBvcnQgPSBycG9ydDsKIAkJc3Bpbl91bmxvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQkJc2V0X2JpdChGQ1BPUlRfVVBEQVRFX05FRURFRCwgJnZoYS0+ZHBjX2ZsYWdzKTsKLQkJcWxhMnh4eF93YWtlX2RwYyh2aGEpOworCQlzZXRfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7CisJCXFsYTJ4eHhfd2FrZV9kcGMoYmFzZV92aGEpOwogCX0gZWxzZQogCQlmY19yZW1vdGVfcG9ydF9kZWxldGUocnBvcnQpOwogfQpAQCAtMjIzNyw4ICsyMjY1LDkgQEAKIAlmY19wb3J0X3QgKmZjcG9ydDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7Ci0JCWlmICh2aGEtPnZwX2lkeCAhPSBmY3BvcnQtPnZwX2lkeCkKKwkJaWYgKHZoYS0+dnBfaWR4ICE9IDAgJiYgdmhhLT52cF9pZHggIT0gZmNwb3J0LT52cF9pZHgpCiAJCQljb250aW51ZTsKKwogCQkvKgogCQkgKiBObyBwb2ludCBpbiBtYXJraW5nIHRoZSBkZXZpY2UgYXMgbG9zdCwgaWYgdGhlIGRldmljZSBpcwogCQkgKiBhbHJlYWR5IERFQUQuCkBAIC0yMjQ2LDEwICsyMjc1LDEyIEBACiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX0RFVklDRV9ERUFEKQogCQkJY29udGludWU7CiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgPT0gRkNTX09OTElORSkgewotCQkJYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX0RFVklDRV9MT1NUKTsKLQkJCXFsYTJ4MDBfc2NoZWR1bGVfcnBvcnRfZGVsKHZoYSwgZmNwb3J0LCBkZWZlcik7Ci0JCX0gZWxzZQotCQkJYXRvbWljX3NldCgmZmNwb3J0LT5zdGF0ZSwgRkNTX0RFVklDRV9MT1NUKTsKKwkJCWlmIChkZWZlcikKKwkJCQlxbGEyeDAwX3NjaGVkdWxlX3Jwb3J0X2RlbCh2aGEsIGZjcG9ydCwgZGVmZXIpOworCQkJZWxzZSBpZiAodmhhLT52cF9pZHggPT0gZmNwb3J0LT52cF9pZHgpCisJCQkJcWxhMngwMF9zY2hlZHVsZV9ycG9ydF9kZWwodmhhLCBmY3BvcnQsIGRlZmVyKTsKKwkJfQorCQlhdG9taWNfc2V0KCZmY3BvcnQtPnN0YXRlLCBGQ1NfREVWSUNFX0xPU1QpOwogCX0KIH0KIApAQCAtMjU5OCw3ICsyNjI5LDMxIEBACiAJcmV0dXJuIHFsYTJ4MDBfcG9zdF93b3JrKHZoYSwgZSk7CiB9CiAKLXN0YXRpYyB2b2lkCisjZGVmaW5lIHFsYTJ4MDBfcG9zdF9hc3luY193b3JrKG5hbWUsIHR5cGUpCVwKK2ludCBxbGEyeDAwX3Bvc3RfYXN5bmNfIyNuYW1lIyNfd29yaygJCVwKKyAgICBzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhLAkJCVwKKyAgICBmY19wb3J0X3QgKmZjcG9ydCwgdWludDE2X3QgKmRhdGEpCQlcCit7CQkJCQkJXAorCXN0cnVjdCBxbGFfd29ya19ldnQgKmU7CQkJXAorCQkJCQkJXAorCWUgPSBxbGEyeDAwX2FsbG9jX3dvcmsodmhhLCB0eXBlKTsJXAorCWlmICghZSkJCQkJCVwKKwkJcmV0dXJuIFFMQV9GVU5DVElPTl9GQUlMRUQ7CVwKKwkJCQkJCVwKKwllLT51LmxvZ2lvLmZjcG9ydCA9IGZjcG9ydDsJCVwKKwlpZiAoZGF0YSkgewkJCQlcCisJCWUtPnUubG9naW8uZGF0YVswXSA9IGRhdGFbMF07CVwKKwkJZS0+dS5sb2dpby5kYXRhWzFdID0gZGF0YVsxXTsJXAorCX0JCQkJCVwKKwlyZXR1cm4gcWxhMngwMF9wb3N0X3dvcmsodmhhLCBlKTsJXAorfQorCitxbGEyeDAwX3Bvc3RfYXN5bmNfd29yayhsb2dpbiwgUUxBX0VWVF9BU1lOQ19MT0dJTik7CitxbGEyeDAwX3Bvc3RfYXN5bmNfd29yayhsb2dpbl9kb25lLCBRTEFfRVZUX0FTWU5DX0xPR0lOX0RPTkUpOworcWxhMngwMF9wb3N0X2FzeW5jX3dvcmsobG9nb3V0LCBRTEFfRVZUX0FTWU5DX0xPR09VVCk7CitxbGEyeDAwX3Bvc3RfYXN5bmNfd29yayhsb2dvdXRfZG9uZSwgUUxBX0VWVF9BU1lOQ19MT0dPVVRfRE9ORSk7CisKK3ZvaWQKIHFsYTJ4MDBfZG9fd29yayhzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqdmhhKQogewogCXN0cnVjdCBxbGFfd29ya19ldnQgKmUsICp0bXA7CkBAIC0yNjIwLDYgKzI2NzUsMjEgQEAKIAkJY2FzZSBRTEFfRVZUX0lEQ19BQ0s6CiAJCQlxbGE4MXh4X2lkY19hY2sodmhhLCBlLT51LmlkY19hY2subWIpOwogCQkJYnJlYWs7CisJCWNhc2UgUUxBX0VWVF9BU1lOQ19MT0dJTjoKKwkJCXFsYTJ4MDBfYXN5bmNfbG9naW4odmhhLCBlLT51LmxvZ2lvLmZjcG9ydCwKKwkJCSAgICBlLT51LmxvZ2lvLmRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgUUxBX0VWVF9BU1lOQ19MT0dJTl9ET05FOgorCQkJcWxhMngwMF9hc3luY19sb2dpbl9kb25lKHZoYSwgZS0+dS5sb2dpby5mY3BvcnQsCisJCQkgICAgZS0+dS5sb2dpby5kYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIFFMQV9FVlRfQVNZTkNfTE9HT1VUOgorCQkJcWxhMngwMF9hc3luY19sb2dvdXQodmhhLCBlLT51LmxvZ2lvLmZjcG9ydCk7CisJCQlicmVhazsKKwkJY2FzZSBRTEFfRVZUX0FTWU5DX0xPR09VVF9ET05FOgorCQkJcWxhMngwMF9hc3luY19sb2dvdXRfZG9uZSh2aGEsIGUtPnUubG9naW8uZmNwb3J0LAorCQkJICAgIGUtPnUubG9naW8uZGF0YSk7CisJCQlicmVhazsKIAkJfQogCQlpZiAoZS0+ZmxhZ3MgJiBRTEFfRVZUX0ZMQUdfRlJFRSkKIAkJCWtmcmVlKGUpOwpAQCAtMjYzNSw2ICsyNzA1LDcgQEAKIAlpbnQgc3RhdHVzOwogCXVpbnQxNl90ICAgICAgICBuZXh0X2xvb3BpZCA9IDA7CiAJc3RydWN0IHFsYV9od19kYXRhICpoYSA9IHZoYS0+aHc7CisJdWludDE2X3QgZGF0YVsyXTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmNwb3J0LCAmdmhhLT52cF9mY3BvcnRzLCBsaXN0KSB7CiAJLyoKQEAgLTI2NDQsNiArMjcxNSw3IEBACiAJCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0KIAkJCUZDU19PTkxJTkUgJiYgZmNwb3J0LT5sb2dpbl9yZXRyeSkgewogCisJCQlmY3BvcnQtPmxvZ2luX3JldHJ5LS07CiAJCQlpZiAoZmNwb3J0LT5mbGFncyAmIEZDRl9GQUJSSUNfREVWSUNFKSB7CiAJCQkJaWYgKGZjcG9ydC0+ZmxhZ3MgJiBGQ0ZfVEFQRV9QUkVTRU5UKQogCQkJCQloYS0+aXNwX29wcy0+ZmFicmljX2xvZ291dCh2aGEsCkBAIC0yNjUyLDEzICsyNzI0LDIyIEBACiAJCQkJCQkJZmNwb3J0LT5kX2lkLmIuYXJlYSwKIAkJCQkJCQlmY3BvcnQtPmRfaWQuYi5hbF9wYSk7CiAKLQkJCQlzdGF0dXMgPSBxbGEyeDAwX2ZhYnJpY19sb2dpbih2aGEsIGZjcG9ydCwKLQkJCQkJCQkmbmV4dF9sb29waWQpOworCQkJCWlmIChJU19BTE9HSU9fQ0FQQUJMRShoYSkpIHsKKwkJCQkJZGF0YVswXSA9IDA7CisJCQkJCWRhdGFbMV0gPSBRTEFfTE9HSU9fTE9HSU5fUkVUUklFRDsKKwkJCQkJc3RhdHVzID0gcWxhMngwMF9wb3N0X2FzeW5jX2xvZ2luX3dvcmsoCisJCQkJCSAgICB2aGEsIGZjcG9ydCwgZGF0YSk7CisJCQkJCWlmIChzdGF0dXMgPT0gUUxBX1NVQ0NFU1MpCisJCQkJCQljb250aW51ZTsKKwkJCQkJLyogQXR0ZW1wdCBhIHJldHJ5LiAqLworCQkJCQlzdGF0dXMgPSAxOworCQkJCX0gZWxzZQorCQkJCQlzdGF0dXMgPSBxbGEyeDAwX2ZhYnJpY19sb2dpbih2aGEsCisJCQkJCSAgICBmY3BvcnQsICZuZXh0X2xvb3BpZCk7CiAJCQl9IGVsc2UKIAkJCQlzdGF0dXMgPSBxbGEyeDAwX2xvY2FsX2RldmljZV9sb2dpbih2aGEsCiAJCQkJCQkJCWZjcG9ydCk7CiAKLQkJCWZjcG9ydC0+bG9naW5fcmV0cnktLTsKIAkJCWlmIChzdGF0dXMgPT0gUUxBX1NVQ0NFU1MpIHsKIAkJCQlmY3BvcnQtPm9sZF9sb29wX2lkID0gZmNwb3J0LT5sb29wX2lkOwogCkBAIC0yODMxLDYgKzI5MTIsOSBAQAogCSAqLwogCWhhLT5kcGNfYWN0aXZlID0gMDsKIAorCS8qIENsZWFudXAgYW55IHJlc2lkdWFsIENUWCBTUkJzLiAqLworCXFsYTJ4MDBfYWJvcnRfYWxsX2NtZHMoYmFzZV92aGEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yOTcxLDYgKzMwNTUsOCBAQAogCQkJCQlzcCA9IHJlcS0+b3V0c3RhbmRpbmdfY21kc1tpbmRleF07CiAJCQkJCWlmICghc3ApCiAJCQkJCQljb250aW51ZTsKKwkJCQkJaWYgKHNwLT5jdHgpCisJCQkJCQljb250aW51ZTsKIAkJCQkJc2ZjcCA9IHNwLT5mY3BvcnQ7CiAJCQkJCWlmICghKHNmY3AtPmZsYWdzICYgRkNGX1RBUEVfUFJFU0VOVCkpCiAJCQkJCQljb250aW51ZTsKQEAgLTI5ODcsOCArMzA3Myw3IEBACiAKIAkJLyogaWYgdGhlIGxvb3AgaGFzIGJlZW4gZG93biBmb3IgNCBtaW51dGVzLCByZWluaXQgYWRhcHRlciAqLwogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdmhhLT5sb29wX2Rvd25fdGltZXIpICE9IDApIHsKLQkJCWlmICghKHZoYS0+ZGV2aWNlX2ZsYWdzICYgREZMR19OT19DQUJMRSkgJiYKLQkJCSAgICAhdmhhLT52cF9pZHgpIHsKKwkJCWlmICghKHZoYS0+ZGV2aWNlX2ZsYWdzICYgREZMR19OT19DQUJMRSkpIHsKIAkJCQlERUJVRyhwcmludGsoInNjc2koJWxkKTogTG9vcCBkb3duIC0gIgogCQkJCSAgICAiYWJvcnRpbmcgSVNQLlxuIiwKIAkJCQkgICAgdmhhLT5ob3N0X25vKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAppbmRleCA4NDM2OTcwLi5hYzEwN2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKQEAgLTcsNyArNyw3IEBACiAvKgogICogRHJpdmVyIHZlcnNpb24KICAqLwotI2RlZmluZSBRTEEyWFhYX1ZFUlNJT04gICAgICAiOC4wMy4wMS1rNCIKKyNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDMuMDEtazYiCiAKICNkZWZpbmUgUUxBX0RSSVZFUl9NQUpPUl9WRVIJOAogI2RlZmluZSBRTEFfRFJJVkVSX01JTk9SX1ZFUgkzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaXNyLmMKaW5kZXggODAyNWVlMS4uYzE5NmQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pc3IuYwpAQCAtMjI3LDExICsyMjcsMTEgQEAKIAljYXNlIFNDU19EQVRBX1VOREVSUlVOOgogCWNhc2UgU0NTX0RBVEFfT1ZFUlJVTjoKIAkJaWYgKChzdHNfZW50cnktPmlzY3NpRmxhZ3MgJiBJU0NTSV9GTEFHX1JFU0lEVUFMX09WRVIpIHx8Ci0JCQkoc3RzX2VudHJ5LT5jb21wbGV0aW9uU3RhdHVzID09IFNDU19EQVRBX09WRVJSVU4pKSB7Ci0JCQlERUJVRzIocHJpbnRrKCJzY3NpJWxkOiVkOiVkOiVkOiAlczogIiAiRGF0YSBvdmVycnVuLCAiCi0JCQkJICAgICAgInJlc2lkdWFsID0gMHgleFxuIiwgaGEtPmhvc3Rfbm8sCisJCSAgICAgKHN0c19lbnRyeS0+Y29tcGxldGlvblN0YXR1cyA9PSBTQ1NfREFUQV9PVkVSUlVOKSkgeworCQkJREVCVUcyKHByaW50aygic2NzaSVsZDolZDolZDolZDogJXM6ICIgIkRhdGEgb3ZlcnJ1blxuIiwKKwkJCQkgICAgICBoYS0+aG9zdF9ubywKIAkJCQkgICAgICBjbWQtPmRldmljZS0+Y2hhbm5lbCwgY21kLT5kZXZpY2UtPmlkLAotCQkJCSAgICAgIGNtZC0+ZGV2aWNlLT5sdW4sIF9fZnVuY19fLCByZXNpZHVhbCkpOworCQkJCSAgICAgIGNtZC0+ZGV2aWNlLT5sdW4sIF9fZnVuY19fKSk7CiAKIAkJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2kuYwppbmRleCAyZGU1ZjNhLi5iNmUwMzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKQEAgLTk5NCw3ICs5OTQsNyBAQAogCSAqIGFsbCB0aGUgZXhpc3RpbmcgdXNlcnMgdHJpZWQgdGhpcyBoYXJkLgogCSAqLwogCXJlc3VsdCA9IHNjc2lfZXhlY3V0ZV9yZXEoc2RldiwgY21kLCBETUFfRlJPTV9ERVZJQ0UsIGJ1ZmZlciwKLQkJCQkgIGxlbiArIDQsIE5VTEwsIDMwICogSFosIDMsIE5VTEwpOworCQkJCSAgbGVuLCBOVUxMLCAzMCAqIEhaLCAzLCBOVUxMKTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCkBAIC0xMDIxLDEzICsxMDIxLDE0IEBACiB7CiAJaW50IGksIHJlc3VsdDsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoMjU5LCBHRlBfS0VSTkVMKTsKKwljb25zdCB1bnNpZ25lZCBpbnQgaW5pdF92cGRfbGVuID0gMjU1OworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoaW5pdF92cGRfbGVuLCBHRlBfS0VSTkVMKTsKIAogCWlmICghYnVmKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIEFzayBmb3IgYWxsIHRoZSBwYWdlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UgKi8KLQlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgMCwgMjU1KTsKKwlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgMCwgaW5pdF92cGRfbGVuKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWw7CiAKQEAgLTEwNTAsMTIgKzEwNTEsMTIgQEAKIAkgKiBTb21lIHBhZ2VzIGFyZSBsb25nZXIgdGhhbiAyNTUgYnl0ZXMuICBUaGUgYWN0dWFsIGxlbmd0aCBvZgogCSAqIHRoZSBwYWdlIGlzIHJldHVybmVkIGluIHRoZSBoZWFkZXIuCiAJICovCi0JbGVuID0gKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXTsKLQlpZiAobGVuIDw9IDI1NSkKKwlsZW4gPSAoKGJ1ZlsyXSA8PCA4KSB8IGJ1ZlszXSkgKyA0OworCWlmIChsZW4gPD0gaW5pdF92cGRfbGVuKQogCQlyZXR1cm4gYnVmOwogCiAJa2ZyZWUoYnVmKTsKLQlidWYgPSBrbWFsbG9jKGxlbiArIDQsIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlyZXN1bHQgPSBzY3NpX3ZwZF9pbnF1aXJ5KHNkZXYsIGJ1ZiwgcGFnZSwgbGVuKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCBhMTY4OTM1Li44NzcyMDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTM4Miw5ICszODIsMTMgQEAKIAkJICogd2hvIGtub3dzPyAgRklYTUUoZXJpYykKIAkJICovCiAJCXJldHVybiBTVUNDRVNTOworCWNhc2UgUkVTRVJWQVRJT05fQ09ORkxJQ1Q6CisJCS8qCisJCSAqIGxldCBpc3N1ZXIgZGVhbCB3aXRoIHRoaXMsIGl0IGNvdWxkIGJlIGp1c3QgZmluZQorCQkgKi8KKwkJcmV0dXJuIFNVQ0NFU1M7CiAJY2FzZSBCVVNZOgogCWNhc2UgUVVFVUVfRlVMTDoKLQljYXNlIFJFU0VSVkFUSU9OX0NPTkZMSUNUOgogCWRlZmF1bHQ6CiAJCXJldHVybiBGQUlMRUQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCBmM2M0MDg5Li41OTg3ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtODk2LDkgKzg5NiwxMiBAQAogCQkJc2NzaV9wcmludF9yZXN1bHQoY21kKTsKIAkJCWlmIChkcml2ZXJfYnl0ZShyZXN1bHQpICYgRFJJVkVSX1NFTlNFKQogCQkJCXNjc2lfcHJpbnRfc2Vuc2UoIiIsIGNtZCk7CisJCQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKIAkJfQotCQlibGtfZW5kX3JlcXVlc3RfYWxsKHJlcSwgLUVJTyk7Ci0JCXNjc2lfbmV4dF9jb21tYW5kKGNtZCk7CisJCWlmIChibGtfZW5kX3JlcXVlc3RfZXJyKHJlcSwgLUVJTykpCisJCQlzY3NpX3JlcXVldWVfY29tbWFuZChxLCBjbWQpOworCQllbHNlCisJCQlzY3NpX25leHRfY29tbWFuZChjbWQpOwogCQlicmVhazsKIAljYXNlIEFDVElPTl9SRVBSRVA6CiAJCS8qIFVucHJlcCB0aGUgcmVxdWVzdCBhbmQgcHV0IGl0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCAyOTJjMDJmLi5iOTg4ODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAjZGVmaW5lIEZDX1NUQVJHRVRfTlVNX0FUVFJTIAkzCiAjZGVmaW5lIEZDX1JQT1JUX05VTV9BVFRSUwkxMAogI2RlZmluZSBGQ19WUE9SVF9OVU1fQVRUUlMJOQotI2RlZmluZSBGQ19IT1NUX05VTV9BVFRSUwkyMQorI2RlZmluZSBGQ19IT1NUX05VTV9BVFRSUwkyMgogCiBzdHJ1Y3QgZmNfaW50ZXJuYWwgewogCXN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSB0OwpAQCAtMzQzMiw3ICszNDMyLDcgQEAKIAogLyoqCiAgKiBmY19ic2dfc29mdGlycV9kb25lIC0gc29mdGlycSBkb25lIHJvdXRpbmUgZm9yIGRlc3Ryb3lpbmcgdGhlIGJzZyByZXF1ZXN0cwotICogQHJlcTogICAgICAgIEJTRyByZXF1ZXN0IHRoYXQgaG9sZHMgdGhlIGpvYiB0byBiZSBkZXN0cm95ZWQKKyAqIEBycTogICAgICAgIEJTRyByZXF1ZXN0IHRoYXQgaG9sZHMgdGhlIGpvYiB0byBiZSBkZXN0cm95ZWQKICAqLwogc3RhdGljIHZvaWQgZmNfYnNnX3NvZnRpcnFfZG9uZShzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCmluZGV4IGI0NzI0MGMuLmFkODk3ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jCkBAIC0zNiw2ICszNiwzOCBAQAogCiAjZGVmaW5lIElTQ1NJX1RSQU5TUE9SVF9WRVJTSU9OICIyLjAtODcwIgogCitzdGF0aWMgaW50IGRiZ19zZXNzaW9uOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX3Nlc3Npb24sIGRiZ19zZXNzaW9uLCBpbnQsCisJCSAgIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfc2Vzc2lvbiwKKwkJICJUdXJuIG9uIGRlYnVnZ2luZyBmb3Igc2Vzc2lvbnMgaW4gc2NzaV90cmFuc3BvcnRfaXNjc2kgIgorCQkgIm1vZHVsZS4gU2V0IHRvIDEgdG8gdHVybiBvbiwgYW5kIHplcm8gdG8gdHVybiBvZmYuIERlZmF1bHQgIgorCQkgImlzIG9mZi4iKTsKKworc3RhdGljIGludCBkYmdfY29ubjsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Z19jb25uLCBkYmdfY29ubiwgaW50LAorCQkgICBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2Nvbm4sCisJCSAiVHVybiBvbiBkZWJ1Z2dpbmcgZm9yIGNvbm5lY3Rpb25zIGluIHNjc2lfdHJhbnNwb3J0X2lzY3NpICIKKwkJICJtb2R1bGUuIFNldCB0byAxIHRvIHR1cm4gb24sIGFuZCB6ZXJvIHRvIHR1cm4gb2ZmLiBEZWZhdWx0ICIKKwkJICJpcyBvZmYuIik7CisKKyNkZWZpbmUgSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oX3Nlc3Npb24sIGRiZ19mbXQsIGFyZy4uLikJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChkYmdfc2Vzc2lvbikJCQkJCVwKKwkJCWlzY3NpX2Nsc19zZXNzaW9uX3ByaW50ayhLRVJOX0lORk8sIF9zZXNzaW9uLAlcCisJCQkJCQkgIiVzOiAiIGRiZ19mbXQsCVwKKwkJCQkJCSBfX2Z1bmNfXywgIyNhcmcpOwlcCisJfSB3aGlsZSAoMCk7CisKKyNkZWZpbmUgSVNDU0lfREJHX1RSQU5TX0NPTk4oX2Nvbm4sIGRiZ19mbXQsIGFyZy4uLikJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAoZGJnX2Nvbm4pCQkJCQkJXAorCQkJaXNjc2lfY2xzX2Nvbm5fcHJpbnRrKEtFUk5fSU5GTywgX2Nvbm4sCQlcCisJCQkJCSAgICAgICIlczogIiBkYmdfZm10LAkJXAorCQkJCQkgICAgICBfX2Z1bmNfXywgIyNhcmcpOwlcCisJfSB3aGlsZSAoMCk7CisKIHN0cnVjdCBpc2NzaV9pbnRlcm5hbCB7CiAJc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlIHQ7CiAJc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqaXNjc2lfdHJhbnNwb3J0OwpAQCAtMzc3LDYgKzQwOSw3IEBACiAKIAlzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbik7CiAJc2NzaV9ob3N0X3B1dChzaG9zdCk7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRpbmcgc2Vzc2lvbiByZWxlYXNlXG4iKTsKIAlrZnJlZShzZXNzaW9uKTsKIH0KIApAQCAtNDQxLDYgKzQ3NCw5IEBACiAJCXJldHVybiAwOwogCiAJc2Vzc2lvbiA9IGlzY3NpX2Rldl90b19zZXNzaW9uKGRldik7CisKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiU2Nhbm5pbmcgc2Vzc2lvblxuIik7CisKIAlzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbik7CiAJaWhvc3QgPSBzaG9zdC0+c2hvc3RfZGF0YTsKIApAQCAtNDQ4LDggKzQ4NCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKIAlpZiAoc2Vzc2lvbi0+c3RhdGUgIT0gSVNDU0lfU0VTU0lPTl9MT0dHRURfSU4pIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwotCQltdXRleF91bmxvY2soJmlob3N0LT5tdXRleCk7Ci0JCXJldHVybiAwOworCQlnb3RvIHVzZXJfc2Nhbl9leGl0OwogCX0KIAlpZCA9IHNlc3Npb24tPnRhcmdldF9pZDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZXNzaW9uLT5sb2NrLCBmbGFncyk7CkBAIC00NjIsNyArNDk3LDEwIEBACiAJCQlzY3NpX3NjYW5fdGFyZ2V0KCZzZXNzaW9uLT5kZXYsIDAsIGlkLAogCQkJCQkgc2Nhbl9kYXRhLT5sdW4sIDEpOwogCX0KKwordXNlcl9zY2FuX2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZpaG9zdC0+bXV0ZXgpOworCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJDb21wbGV0ZWQgc2Vzc2lvbiBzY2FuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTIyLDcgKzU2MCw5IEBACiAJaWYgKHNlc3Npb24tPnRyYW5zcG9ydC0+c2Vzc2lvbl9yZWNvdmVyeV90aW1lZG91dCkKIAkJc2Vzc2lvbi0+dHJhbnNwb3J0LT5zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0KHNlc3Npb24pOwogCisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIlVuYmxvY2tpbmcgU0NTSSB0YXJnZXRcbiIpOwogCXNjc2lfdGFyZ2V0X3VuYmxvY2soJnNlc3Npb24tPmRldik7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRlZCB1bmJsb2NraW5nIFNDU0kgdGFyZ2V0XG4iKTsKIH0KIAogc3RhdGljIHZvaWQgX19pc2NzaV91bmJsb2NrX3Nlc3Npb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNTM0LDYgKzU3NCw3IEBACiAJc3RydWN0IGlzY3NpX2Nsc19ob3N0ICppaG9zdCA9IHNob3N0LT5zaG9zdF9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiVW5ibG9ja2luZyBzZXNzaW9uXG4iKTsKIAkvKgogCSAqIFRoZSByZWNvdmVyeSBhbmQgdW5ibG9jayB3b3JrIGdldCBydW4gZnJvbSB0aGUgc2FtZSB3b3JrcXVldWUsCiAJICogc28gdHJ5IHRvIGNhbmNlbCBpdCBpZiBpdCB3YXMgZ29pbmcgdG8gcnVuIGFmdGVyIHRoaXMgdW5ibG9jay4KQEAgLTU1Myw2ICs1OTQsNyBAQAogCQlpZiAoc2NzaV9xdWV1ZV93b3JrKHNob3N0LCAmc2Vzc2lvbi0+c2Nhbl93b3JrKSkKIAkJCWF0b21pY19pbmMoJmlob3N0LT5ucl9zY2Fucyk7CiAJfQorCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJDb21wbGV0ZWQgdW5ibG9ja2luZyBzZXNzaW9uXG4iKTsKIH0KIAogLyoqCkBAIC01NzksMTAgKzYyMSwxMiBAQAogCQkJCSAgICAgYmxvY2tfd29yayk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJCbG9ja2luZyBzZXNzaW9uXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwogCXNlc3Npb24tPnN0YXRlID0gSVNDU0lfU0VTU0lPTl9GQUlMRUQ7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2lvbi0+bG9jaywgZmxhZ3MpOwogCXNjc2lfdGFyZ2V0X2Jsb2NrKCZzZXNzaW9uLT5kZXYpOworCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJDb21wbGV0ZWQgU0NTSSB0YXJnZXQgYmxvY2tpbmdcbiIpOwogCXF1ZXVlX2RlbGF5ZWRfd29yayhpc2NzaV9laF90aW1lcl93b3JrcSwgJnNlc3Npb24tPnJlY292ZXJ5X3dvcmssCiAJCQkgICBzZXNzaW9uLT5yZWNvdmVyeV90bW8gKiBIWik7CiB9CkBAIC02MDIsNiArNjQ2LDggQEAKIAlzdHJ1Y3QgaXNjc2lfY2xzX2hvc3QgKmlob3N0ID0gc2hvc3QtPnNob3N0X2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJVbmJpbmRpbmcgc2Vzc2lvblxuIik7CisKIAkvKiBQcmV2ZW50IG5ldyBzY2FucyBhbmQgbWFrZSBzdXJlIHNjYW5uaW5nIGlzIG5vdCBpbiBwcm9ncmVzcyAqLwogCW11dGV4X2xvY2soJmlob3N0LT5tdXRleCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlc3Npb24tPmxvY2ssIGZsYWdzKTsKQEAgLTYxNiw2ICs2NjIsNyBAQAogCiAJc2NzaV9yZW1vdmVfdGFyZ2V0KCZzZXNzaW9uLT5kZXYpOwogCWlzY3NpX3Nlc3Npb25fZXZlbnQoc2Vzc2lvbiwgSVNDU0lfS0VWRU5UX1VOQklORF9TRVNTSU9OKTsKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiQ29tcGxldGVkIHRhcmdldCByZW1vdmFsXG4iKTsKIH0KIAogc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKQEAgLTY0Nyw2ICs2OTQsOCBAQAogCWRldmljZV9pbml0aWFsaXplKCZzZXNzaW9uLT5kZXYpOwogCWlmIChkZF9zaXplKQogCQlzZXNzaW9uLT5kZF9kYXRhID0gJnNlc3Npb25bMV07CisKKwlJU0NTSV9EQkdfVFJBTlNfU0VTU0lPTihzZXNzaW9uLCAiQ29tcGxldGVkIHNlc3Npb24gYWxsb2NhdGlvblxuIik7CiAJcmV0dXJuIHNlc3Npb247CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc2NzaV9hbGxvY19zZXNzaW9uKTsKQEAgLTcxMiw2ICs3NjEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlc3Nsb2NrLCBmbGFncyk7CiAKIAlpc2NzaV9zZXNzaW9uX2V2ZW50KHNlc3Npb24sIElTQ1NJX0tFVkVOVF9DUkVBVEVfU0VTU0lPTik7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRlZCBzZXNzaW9uIGFkZGluZ1xuIik7CiAJcmV0dXJuIDA7CiAKIHJlbGVhc2VfaG9zdDoKQEAgLTc1Miw2ICs4MDIsNyBAQAogCXN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiA9IGlzY3NpX2Rldl90b19jb25uKGRldik7CiAJc3RydWN0IGRldmljZSAqcGFyZW50ID0gY29ubi0+ZGV2LnBhcmVudDsKIAorCUlTQ1NJX0RCR19UUkFOU19DT05OKGNvbm4sICJSZWxlYXNpbmcgY29ublxuIik7CiAJa2ZyZWUoY29ubik7CiAJcHV0X2RldmljZShwYXJlbnQpOwogfQpAQCAtNzc0LDYgKzgyNSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyOwogCisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIlJlbW92aW5nIHNlc3Npb25cbiIpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNlc3Nsb2NrLCBmbGFncyk7CiAJbGlzdF9kZWwoJnNlc3Npb24tPnNlc3NfbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Vzc2xvY2ssIGZsYWdzKTsKQEAgLTgwNywxMiArODYwLDE1IEBACiAJCQkJCSAiZm9yIHNlc3Npb24uIEVycm9yICVkLlxuIiwgZXJyKTsKIAogCXRyYW5zcG9ydF91bnJlZ2lzdGVyX2RldmljZSgmc2Vzc2lvbi0+ZGV2KTsKKworCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJDb21wbGV0aW5nIHNlc3Npb24gcmVtb3ZhbFxuIik7CiAJZGV2aWNlX2RlbCgmc2Vzc2lvbi0+ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3JlbW92ZV9zZXNzaW9uKTsKIAogdm9pZCBpc2NzaV9mcmVlX3Nlc3Npb24oc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpzZXNzaW9uKQogeworCUlTQ1NJX0RCR19UUkFOU19TRVNTSU9OKHNlc3Npb24sICJGcmVlaW5nIHNlc3Npb25cbiIpOwogCWlzY3NpX3Nlc3Npb25fZXZlbnQoc2Vzc2lvbiwgSVNDU0lfS0VWRU5UX0RFU1RST1lfU0VTU0lPTik7CiAJcHV0X2RldmljZSgmc2Vzc2lvbi0+ZGV2KTsKIH0KQEAgLTgyOCw2ICs4ODQsNyBAQAogaW50IGlzY3NpX2Rlc3Ryb3lfc2Vzc2lvbihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJaXNjc2lfcmVtb3ZlX3Nlc3Npb24oc2Vzc2lvbik7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRpbmcgc2Vzc2lvbiBkZXN0cnVjdGlvblxuIik7CiAJaXNjc2lfZnJlZV9zZXNzaW9uKHNlc3Npb24pOwogCXJldHVybiAwOwogfQpAQCAtODg1LDYgKzk0Miw4IEBACiAJbGlzdF9hZGQoJmNvbm4tPmNvbm5fbGlzdCwgJmNvbm5saXN0KTsKIAljb25uLT5hY3RpdmUgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm5sb2NrLCBmbGFncyk7CisKKwlJU0NTSV9EQkdfVFJBTlNfQ09OTihjb25uLCAiQ29tcGxldGVkIGNvbm4gY3JlYXRpb25cbiIpOwogCXJldHVybiBjb25uOwogCiByZWxlYXNlX3BhcmVudF9yZWY6CkBAIC05MTIsNiArOTcxLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25ubG9jaywgZmxhZ3MpOwogCiAJdHJhbnNwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKCZjb25uLT5kZXYpOworCUlTQ1NJX0RCR19UUkFOU19DT05OKGNvbm4sICJDb21wbGV0aW5nIGNvbm4gZGVzdHJ1Y3Rpb25cbiIpOwogCWRldmljZV91bnJlZ2lzdGVyKCZjb25uLT5kZXYpOwogCXJldHVybiAwOwogfQpAQCAtMTIwMCw2ICsxMjYwLDkgQEAKIAkJCQkJICJDYW5ub3Qgbm90aWZ5IHVzZXJzcGFjZSBvZiBzZXNzaW9uICIKIAkJCQkJICJldmVudCAldS4gQ2hlY2sgaXNjc2kgZGFlbW9uXG4iLAogCQkJCQkgZXZlbnQpOworCisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwgIkNvbXBsZXRlZCBoYW5kbGluZyBldmVudCAlZCByYyAlZFxuIiwKKwkJCQlldmVudCwgcmMpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Nlc3Npb25fZXZlbnQpOwpAQCAtMTIyMSw2ICsxMjg0LDggQEAKIAlzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbik7CiAJZXYtPnIuY19zZXNzaW9uX3JldC5ob3N0X25vID0gc2hvc3QtPmhvc3Rfbm87CiAJZXYtPnIuY19zZXNzaW9uX3JldC5zaWQgPSBzZXNzaW9uLT5zaWQ7CisJSVNDU0lfREJHX1RSQU5TX1NFU1NJT04oc2Vzc2lvbiwKKwkJCQkiQ29tcGxldGVkIGNyZWF0aW5nIHRyYW5zcG9ydCBzZXNzaW9uXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI0Niw2ICsxMzExLDggQEAKIAogCWV2LT5yLmNfY29ubl9yZXQuc2lkID0gc2Vzc2lvbi0+c2lkOwogCWV2LT5yLmNfY29ubl9yZXQuY2lkID0gY29ubi0+Y2lkOworCisJSVNDU0lfREJHX1RSQU5TX0NPTk4oY29ubiwgIkNvbXBsZXRlZCBjcmVhdGluZyB0cmFuc3BvcnQgY29ublxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNTgsOCArMTMyNSwxMCBAQAogCWlmICghY29ubikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlJU0NTSV9EQkdfVFJBTlNfQ09OTihjb25uLCAiRGVzdHJveWluZyB0cmFuc3BvcnQgY29ublxuIik7CiAJaWYgKHRyYW5zcG9ydC0+ZGVzdHJveV9jb25uKQogCQl0cmFuc3BvcnQtPmRlc3Ryb3lfY29ubihjb25uKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKaW5kZXggMDg5NWQzYy4uZmQ0N2NiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYwpAQCAtMTY5MiwxMCArMTY5Miw2IEBACiAJaS0+ZiA9IGZ0OwogCiAJY291bnQgPSAwOwotCVNFVFVQX1BPUlRfQVRUUklCVVRFKG51bV9waHlzKTsKLQlpLT5ob3N0X2F0dHJzW2NvdW50XSA9IE5VTEw7Ci0KLQljb3VudCA9IDA7CiAJU0VUVVBfUEhZX0FUVFJJQlVURShpbml0aWF0b3JfcG9ydF9wcm90b2NvbHMpOwogCVNFVFVQX1BIWV9BVFRSSUJVVEUodGFyZ2V0X3BvcnRfcHJvdG9jb2xzKTsKIAlTRVRVUF9QSFlfQVRUUklCVVRFKGRldmljZV90eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggYjdiOWZlYy4uYTg5YzQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTIwMjEsNiArMjAyMSw3IEBACiAKIAlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsICJBdHRhY2hlZCBTQ1NJICVzZGlza1xuIiwKIAkJICBzZHAtPnJlbW92YWJsZSA/ICJyZW1vdmFibGUgIiA6ICIiKTsKKwlwdXRfZGV2aWNlKCZzZGtwLT5kZXYpOwogfQogCiAvKioKQEAgLTIxMDYsNiArMjEwNyw3IEBACiAKIAlnZXRfZGV2aWNlKCZzZHAtPnNkZXZfZ2VuZGV2KTsKIAorCWdldF9kZXZpY2UoJnNka3AtPmRldik7CS8qIHByZXZlbnQgcmVsZWFzZSBiZWZvcmUgYXN5bmNfc2NoZWR1bGUgKi8KIAlhc3luY19zY2hlZHVsZShzZF9wcm9iZV9hc3luYywgc2RrcCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZXMuYyBiL2RyaXZlcnMvc2NzaS9zZXMuYwppbmRleCA0ZjYxOGY0Li41NWIwMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2VzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Nlcy5jCkBAIC0zNDcsNiArMzQ3LDk3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgSU5JVF9BTExPQ19TSVpFIDMyCisKK3N0YXRpYyB2b2lkIHNlc19lbmNsb3N1cmVfZGF0YV9wcm9jZXNzKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsCisJCQkJICAgICAgIGludCBjcmVhdGUpCit7CisJdTMyIHJlc3VsdDsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMLCAqdHlwZV9wdHIsICpkZXNjX3B0ciwgKmFkZGxfZGVzY19wdHIgPSBOVUxMOworCWludCBpLCBqLCBwYWdlN19sZW4sIGxlbiwgY29tcG9uZW50czsKKwlzdHJ1Y3Qgc2VzX2RldmljZSAqc2VzX2RldiA9IGVkZXYtPnNjcmF0Y2g7CisJaW50IHR5cGVzID0gc2VzX2Rldi0+cGFnZTFbMTBdOworCXVuc2lnbmVkIGNoYXIgKmhkcl9idWYgPSBremFsbG9jKElOSVRfQUxMT0NfU0laRSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWhkcl9idWYpCisJCWdvdG8gc2ltcGxlX3BvcHVsYXRlOworCisJLyogcmUtcmVhZCBwYWdlIDEwICovCisJaWYgKHNlc19kZXYtPnBhZ2UxMCkKKwkJc2VzX3JlY3ZfZGlhZyhzZGV2LCAxMCwgc2VzX2Rldi0+cGFnZTEwLCBzZXNfZGV2LT5wYWdlMTBfbGVuKTsKKwkvKiBQYWdlIDcgZm9yIHRoZSBkZXNjcmlwdG9ycyBpcyBvcHRpb25hbCAqLworCXJlc3VsdCA9IHNlc19yZWN2X2RpYWcoc2RldiwgNywgaGRyX2J1ZiwgSU5JVF9BTExPQ19TSVpFKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIHNpbXBsZV9wb3B1bGF0ZTsKKworCXBhZ2U3X2xlbiA9IGxlbiA9IChoZHJfYnVmWzJdIDw8IDgpICsgaGRyX2J1ZlszXSArIDQ7CisJLyogYWRkIDEgZm9yIHRyYWlsaW5nICdcMCcgd2UnbGwgdXNlICovCisJYnVmID0ga3phbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBzaW1wbGVfcG9wdWxhdGU7CisJcmVzdWx0ID0gc2VzX3JlY3ZfZGlhZyhzZGV2LCA3LCBidWYsIGxlbik7CisJaWYgKHJlc3VsdCkgeworIHNpbXBsZV9wb3B1bGF0ZToKKwkJa2ZyZWUoYnVmKTsKKwkJYnVmID0gTlVMTDsKKwkJZGVzY19wdHIgPSBOVUxMOworCQlsZW4gPSAwOworCQlwYWdlN19sZW4gPSAwOworCX0gZWxzZSB7CisJCWRlc2NfcHRyID0gYnVmICsgODsKKwkJbGVuID0gKGRlc2NfcHRyWzJdIDw8IDgpICsgZGVzY19wdHJbM107CisJCS8qIHNraXAgcGFzdCBvdmVyYWxsIGRlc2NyaXB0b3IgKi8KKwkJZGVzY19wdHIgKz0gbGVuICsgNDsKKwkJaWYgKHNlc19kZXYtPnBhZ2UxMCkKKwkJCWFkZGxfZGVzY19wdHIgPSBzZXNfZGV2LT5wYWdlMTAgKyA4OworCX0KKwl0eXBlX3B0ciA9IHNlc19kZXYtPnBhZ2UxICsgMTIgKyBzZXNfZGV2LT5wYWdlMVsxMV07CisJY29tcG9uZW50cyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHR5cGVzOyBpKyssIHR5cGVfcHRyICs9IDQpIHsKKwkJZm9yIChqID0gMDsgaiA8IHR5cGVfcHRyWzFdOyBqKyspIHsKKwkJCWNoYXIgKm5hbWUgPSBOVUxMOworCQkJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wOworCisJCQlpZiAoZGVzY19wdHIpIHsKKwkJCQlpZiAoZGVzY19wdHIgPj0gYnVmICsgcGFnZTdfbGVuKSB7CisJCQkJCWRlc2NfcHRyID0gTlVMTDsKKwkJCQl9IGVsc2UgeworCQkJCQlsZW4gPSAoZGVzY19wdHJbMl0gPDwgOCkgKyBkZXNjX3B0clszXTsKKwkJCQkJZGVzY19wdHIgKz0gNDsKKwkJCQkJLyogQWRkIHRyYWlsaW5nIHplcm8gLSBwdXNoZXMgaW50bworCQkJCQkgKiByZXNlcnZlZCBzcGFjZSAqLworCQkJCQlkZXNjX3B0cltsZW5dID0gJ1wwJzsKKwkJCQkJbmFtZSA9IGRlc2NfcHRyOworCQkJCX0KKwkJCX0KKwkJCWlmICh0eXBlX3B0clswXSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0RFVklDRSB8fAorCQkJICAgIHR5cGVfcHRyWzBdID09IEVOQ0xPU1VSRV9DT01QT05FTlRfQVJSQVlfREVWSUNFKSB7CisKKwkJCQlpZiAoY3JlYXRlKQorCQkJCQllY29tcCA9CWVuY2xvc3VyZV9jb21wb25lbnRfcmVnaXN0ZXIoZWRldiwKKwkJCQkJCQkJCSAgICAgY29tcG9uZW50cysrLAorCQkJCQkJCQkJICAgICB0eXBlX3B0clswXSwKKwkJCQkJCQkJCSAgICAgbmFtZSk7CisJCQkJZWxzZQorCQkJCQllY29tcCA9ICZlZGV2LT5jb21wb25lbnRbY29tcG9uZW50cysrXTsKKworCQkJCWlmICghSVNfRVJSKGVjb21wKSAmJiBhZGRsX2Rlc2NfcHRyKQorCQkJCQlzZXNfcHJvY2Vzc19kZXNjcmlwdG9yKGVjb21wLAorCQkJCQkJCSAgICAgICBhZGRsX2Rlc2NfcHRyKTsKKwkJCX0KKwkJCWlmIChkZXNjX3B0cikKKwkJCQlkZXNjX3B0ciArPSBsZW47CisKKwkJCWlmIChhZGRsX2Rlc2NfcHRyKQorCQkJCWFkZGxfZGVzY19wdHIgKz0gYWRkbF9kZXNjX3B0clsxXSArIDI7CisKKwkJfQorCX0KKwlrZnJlZShidWYpOworCWtmcmVlKGhkcl9idWYpOworfQorCiBzdGF0aWMgdm9pZCBzZXNfbWF0Y2hfdG9fZW5jbG9zdXJlKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LAogCQkJCSAgIHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKQEAgLTM2MSw2ICs0NTIsOCBAQAogCWlmICghYnVmKQogCQlyZXR1cm47CiAKKwlzZXNfZW5jbG9zdXJlX2RhdGFfcHJvY2VzcyhlZGV2LCB0b19zY3NpX2RldmljZShlZGV2LT5lZGV2LnBhcmVudCksIDApOworCiAJdnBkX2xlbiA9ICgoYnVmWzJdIDw8IDgpIHwgYnVmWzNdKSArIDQ7CiAKIAlkZXNjID0gYnVmICsgNDsKQEAgLTM5NSwyOCArNDg4LDI2IEBACiAJa2ZyZWUoYnVmKTsKIH0KIAotI2RlZmluZSBJTklUX0FMTE9DX1NJWkUgMzIKLQogc3RhdGljIGludCBzZXNfaW50Zl9hZGQoc3RydWN0IGRldmljZSAqY2RldiwKIAkJCXN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoY2Rldi0+cGFyZW50KTsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnRtcF9zZGV2OwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEwsICpoZHJfYnVmLCAqdHlwZV9wdHIsICpkZXNjX3B0ciA9IE5VTEwsCi0JCSphZGRsX2Rlc2NfcHRyID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMLCAqaGRyX2J1ZiwgKnR5cGVfcHRyOwogCXN0cnVjdCBzZXNfZGV2aWNlICpzZXNfZGV2OwogCXUzMiByZXN1bHQ7Ci0JaW50IGksIGosIHR5cGVzLCBsZW4sIHBhZ2U3X2xlbiA9IDAsIGNvbXBvbmVudHMgPSAwOworCWludCBpLCB0eXBlcywgbGVuLCBjb21wb25lbnRzID0gMDsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAlzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldjsKIAlzdHJ1Y3Qgc2VzX2NvbXBvbmVudCAqc2NvbXAgPSBOVUxMOwogCiAJaWYgKCFzY3NpX2RldmljZV9lbmNsb3N1cmUoc2RldikpIHsKIAkJLyogbm90IGFuIGVuY2xvc3VyZSwgYnV0IG1pZ2h0IGJlIGluIG9uZSAqLwotCQllZGV2ID0gZW5jbG9zdXJlX2ZpbmQoJnNkZXYtPmhvc3QtPnNob3N0X2dlbmRldik7Ci0JCWlmIChlZGV2KSB7CisJCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICpwcmV2ID0gTlVMTDsKKworCQl3aGlsZSAoKGVkZXYgPSBlbmNsb3N1cmVfZmluZCgmc2Rldi0+aG9zdC0+c2hvc3RfZ2VuZGV2LCBwcmV2KSkgIT0gTlVMTCkgewogCQkJc2VzX21hdGNoX3RvX2VuY2xvc3VyZShlZGV2LCBzZGV2KTsKLQkJCXB1dF9kZXZpY2UoJmVkZXYtPmVkZXYpOworCQkJcHJldiA9IGVkZXY7CiAJCX0KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNTAwLDYgKzU5MSw3IEBACiAJCXNlc19kZXYtPnBhZ2UxMF9sZW4gPSBsZW47CiAJCWJ1ZiA9IE5VTEw7CiAJfQorCWtmcmVlKGhkcl9idWYpOwogCiAJc2NvbXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VzX2NvbXBvbmVudCkgKiBjb21wb25lbnRzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNjb21wKQpAQCAtNTE2LDcyICs2MDgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzOyBpKyspCiAJCWVkZXYtPmNvbXBvbmVudFtpXS5zY3JhdGNoID0gc2NvbXAgKyBpOwogCi0JLyogUGFnZSA3IGZvciB0aGUgZGVzY3JpcHRvcnMgaXMgb3B0aW9uYWwgKi8KLQlyZXN1bHQgPSBzZXNfcmVjdl9kaWFnKHNkZXYsIDcsIGhkcl9idWYsIElOSVRfQUxMT0NfU0laRSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBzaW1wbGVfcG9wdWxhdGU7Ci0KLQlwYWdlN19sZW4gPSBsZW4gPSAoaGRyX2J1ZlsyXSA8PCA4KSArIGhkcl9idWZbM10gKyA0OwotCS8qIGFkZCAxIGZvciB0cmFpbGluZyAnXDAnIHdlJ2xsIHVzZSAqLwotCWJ1ZiA9IGt6YWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCWdvdG8gc2ltcGxlX3BvcHVsYXRlOwotCXJlc3VsdCA9IHNlc19yZWN2X2RpYWcoc2RldiwgNywgYnVmLCBsZW4pOwotCWlmIChyZXN1bHQpIHsKLSBzaW1wbGVfcG9wdWxhdGU6Ci0JCWtmcmVlKGJ1Zik7Ci0JCWJ1ZiA9IE5VTEw7Ci0JCWRlc2NfcHRyID0gTlVMTDsKLQkJYWRkbF9kZXNjX3B0ciA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJZGVzY19wdHIgPSBidWYgKyA4OwotCQlsZW4gPSAoZGVzY19wdHJbMl0gPDwgOCkgKyBkZXNjX3B0clszXTsKLQkJLyogc2tpcCBwYXN0IG92ZXJhbGwgZGVzY3JpcHRvciAqLwotCQlkZXNjX3B0ciArPSBsZW4gKyA0OwotCQlpZiAoc2VzX2Rldi0+cGFnZTEwKQotCQkJYWRkbF9kZXNjX3B0ciA9IHNlc19kZXYtPnBhZ2UxMCArIDg7Ci0JfQotCXR5cGVfcHRyID0gc2VzX2Rldi0+cGFnZTEgKyAxMiArIHNlc19kZXYtPnBhZ2UxWzExXTsKLQljb21wb25lbnRzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgdHlwZXM7IGkrKywgdHlwZV9wdHIgKz0gNCkgewotCQlmb3IgKGogPSAwOyBqIDwgdHlwZV9wdHJbMV07IGorKykgewotCQkJY2hhciAqbmFtZSA9IE5VTEw7Ci0JCQlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXA7Ci0KLQkJCWlmIChkZXNjX3B0cikgewotCQkJCWlmIChkZXNjX3B0ciA+PSBidWYgKyBwYWdlN19sZW4pIHsKLQkJCQkJZGVzY19wdHIgPSBOVUxMOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWxlbiA9IChkZXNjX3B0clsyXSA8PCA4KSArIGRlc2NfcHRyWzNdOwotCQkJCQlkZXNjX3B0ciArPSA0OwotCQkJCQkvKiBBZGQgdHJhaWxpbmcgemVybyAtIHB1c2hlcyBpbnRvCi0JCQkJCSAqIHJlc2VydmVkIHNwYWNlICovCi0JCQkJCWRlc2NfcHRyW2xlbl0gPSAnXDAnOwotCQkJCQluYW1lID0gZGVzY19wdHI7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHR5cGVfcHRyWzBdID09IEVOQ0xPU1VSRV9DT01QT05FTlRfREVWSUNFIHx8Ci0JCQkgICAgdHlwZV9wdHJbMF0gPT0gRU5DTE9TVVJFX0NPTVBPTkVOVF9BUlJBWV9ERVZJQ0UpIHsKLQotCQkJCWVjb21wID0JZW5jbG9zdXJlX2NvbXBvbmVudF9yZWdpc3RlcihlZGV2LAotCQkJCQkJCSAgICAgY29tcG9uZW50cysrLAotCQkJCQkJCSAgICAgdHlwZV9wdHJbMF0sCi0JCQkJCQkJICAgICBuYW1lKTsKLQotCQkJCWlmICghSVNfRVJSKGVjb21wKSAmJiBhZGRsX2Rlc2NfcHRyKQotCQkJCQlzZXNfcHJvY2Vzc19kZXNjcmlwdG9yKGVjb21wLAotCQkJCQkJCSAgICAgICBhZGRsX2Rlc2NfcHRyKTsKLQkJCX0KLQkJCWlmIChkZXNjX3B0cikKLQkJCQlkZXNjX3B0ciArPSBsZW47Ci0KLQkJCWlmIChhZGRsX2Rlc2NfcHRyKQotCQkJCWFkZGxfZGVzY19wdHIgKz0gYWRkbF9kZXNjX3B0clsxXSArIDI7Ci0KLQkJfQotCX0KLQlrZnJlZShidWYpOwotCWtmcmVlKGhkcl9idWYpOworCXNlc19lbmNsb3N1cmVfZGF0YV9wcm9jZXNzKGVkZXYsIHNkZXYsIDEpOwogCiAJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGV2aWNlcyBtYXRjaGluZyBiZWZvcmUKIAkgKiB3ZSBmb3VuZCB0aGUgZW5jbG9zdXJlICovCkBAIC02MTUsMTcgKzY0MiwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzZXNfaW50Zl9yZW1vdmUoc3RydWN0IGRldmljZSAqY2RldiwKLQkJCSAgICBzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIHZvaWQgc2VzX2ludGZfcmVtb3ZlX2NvbXBvbmVudChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7Ci0Jc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoY2Rldi0+cGFyZW50KTsKKwlzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwgKnByZXYgPSBOVUxMOworCisJd2hpbGUgKChlZGV2ID0gZW5jbG9zdXJlX2ZpbmQoJnNkZXYtPmhvc3QtPnNob3N0X2dlbmRldiwgcHJldikpICE9IE5VTEwpIHsKKwkJcHJldiA9IGVkZXY7CisJCWlmICghZW5jbG9zdXJlX3JlbW92ZV9kZXZpY2UoZWRldiwgJnNkZXYtPnNkZXZfZ2VuZGV2KSkKKwkJCWJyZWFrOworCX0KKwlpZiAoZWRldikKKwkJcHV0X2RldmljZSgmZWRldi0+ZWRldik7Cit9CisKK3N0YXRpYyB2b2lkIHNlc19pbnRmX3JlbW92ZV9lbmNsb3N1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorewogCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2OwogCXN0cnVjdCBzZXNfZGV2aWNlICpzZXNfZGV2OwogCi0JaWYgKCFzY3NpX2RldmljZV9lbmNsb3N1cmUoc2RldikpCi0JCXJldHVybjsKLQotCWVkZXYgPSBlbmNsb3N1cmVfZmluZChjZGV2LT5wYXJlbnQpOworCS8qICBleGFjdCBtYXRjaCB0byB0aGlzIGVuY2xvc3VyZSAqLworCWVkZXYgPSBlbmNsb3N1cmVfZmluZCgmc2Rldi0+c2Rldl9nZW5kZXYsIE5VTEwpOwogCWlmICghZWRldikKIAkJcmV0dXJuOwogCkBAIC02NDMsNiArNjc5LDE3IEBACiAJZW5jbG9zdXJlX3VucmVnaXN0ZXIoZWRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHNlc19pbnRmX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJICAgIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gdG9fc2NzaV9kZXZpY2UoY2Rldi0+cGFyZW50KTsKKworCWlmICghc2NzaV9kZXZpY2VfZW5jbG9zdXJlKHNkZXYpKQorCQlzZXNfaW50Zl9yZW1vdmVfY29tcG9uZW50KHNkZXYpOworCWVsc2UKKwkJc2VzX2ludGZfcmVtb3ZlX2VuY2xvc3VyZShzZGV2KTsKK30KKwogc3RhdGljIHN0cnVjdCBjbGFzc19pbnRlcmZhY2Ugc2VzX2ludGVyZmFjZSA9IHsKIAkuYWRkX2Rldgk9IHNlc19pbnRmX2FkZCwKIAkucmVtb3ZlX2Rldgk9IHNlc19pbnRmX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggOTIzMDQwMi4uNDk2OGM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTE4MTEsNyArMTgxMSw3IEBACiAJcmV0dXJuIDA7CiBvdXQ6CiAJZm9yIChpID0gMDsgaSA8IGs7IGkrKykKLQkJX19mcmVlX3BhZ2VzKHNjaHAtPnBhZ2VzW2tdLCBvcmRlcik7CisJCV9fZnJlZV9wYWdlcyhzY2hwLT5wYWdlc1tpXSwgb3JkZXIpOwogCiAJaWYgKC0tb3JkZXIgPj0gMCkKIAkJZ290byByZXRyeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdGV4LmMgYi9kcml2ZXJzL3Njc2kvc3RleC5jCmluZGV4IDhkMmE5NWMuLjA5ZmE4ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdGV4LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0ZXguYwpAQCAtNTUsNiArNTUsNyBAQAogCU9JUwk9IDB4MzAsCS8qIE1VX09VVEJPVU5EX0lOVEVSUlVQVF9TVEFUVVMgKi8KIAlPSU0JPSAweDNjLAkvKiBNVV9PVVRCT1VORF9JTlRFUlJVUFRfTUFTSyAqLwogCisJWUlPQV9TVEFUVVMJCQkJPSAweDAwLAogCVlIMklfSU5UCQkJCT0gMHgyMCwKIAlZSU5UX0VOCQkJCQk9IDB4MzQsCiAJWUkySF9JTlQJCQkJPSAweDljLApAQCAtMTA4LDYgKzEwOSwxMCBAQAogCiAJU1NfSEVBRF9IQU5EU0hBS0UJCQk9IDB4ODAsCiAKKwlTU19IMklfSU5UX1JFU0VUCQkJPSAweDEwMCwKKworCVNTX01VX09QRVJBVElPTkFMCQkJPSAweDgwMDAwMDAwLAorCiAJU1RFWF9DREJfTEVOR1RICQkJCT0gMTYsCiAJU1RBVFVTX1ZBUl9MRU4JCQkJPSAxMjgsCiAKQEAgLTg4NCw3ICs4ODksNyBAQAogCQl0YWcgPSAodTE2KXZhbHVlOwogCQlpZiAodW5saWtlbHkodGFnID49IGhiYS0+aG9zdC0+Y2FuX3F1ZXVlKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkJCQkiKCVzKTogaW52YWxpZCB0YWdcbiIsIHBjaV9uYW1lKGhiYS0+cGRldikpOworCQkJCSIoJXMpOiBpbnZhbGlkIHRhZ1xuIiwgcGNpX25hbWUoaGJhLT5wZGV2KSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xMDQwLDE2ICsxMDQ1LDI3IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlID0gaGJhLT5tbWlvX2Jhc2U7CiAJc3RydWN0IHN0X21zZ19oZWFkZXIgKm1zZ19oOwogCXN0cnVjdCBoYW5kc2hha2VfZnJhbWUgKmg7Ci0JX19sZTMyICpzY3JhdGNoID0gaGJhLT5zY3JhdGNoOworCV9fbGUzMiAqc2NyYXRjaDsKIAl1MzIgZGF0YTsKIAl1bnNpZ25lZCBsb25nIGJlZm9yZTsKIAlpbnQgcmV0ID0gMDsKIAotCWggPSAoc3RydWN0IGhhbmRzaGFrZV9mcmFtZSAqKShoYmEtPmFsbG9jX3JxKGhiYSkpOwotCW1zZ19oID0gKHN0cnVjdCBzdF9tc2dfaGVhZGVyICopaCAtIDE7CisJYmVmb3JlID0gamlmZmllczsKKwl3aGlsZSAoKHJlYWRsKGJhc2UgKyBZSU9BX1NUQVRVUykgJiBTU19NVV9PUEVSQVRJT05BTCkgPT0gMCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBiZWZvcmUgKyBNVV9NQVhfREVMQVkgKiBIWikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJCSIoJXMpOiBmaXJtd2FyZSBub3Qgb3BlcmF0aW9uYWxcbiIsCisJCQkJcGNpX25hbWUoaGJhLT5wZGV2KSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJbXNsZWVwKDEpOworCX0KKworCW1zZ19oID0gKHN0cnVjdCBzdF9tc2dfaGVhZGVyICopaGJhLT5kbWFfbWVtOwogCW1zZ19oLT5oYW5kbGUgPSBjcHVfdG9fbGU2NChoYmEtPmRtYV9oYW5kbGUpOwogCW1zZ19oLT5mbGFnID0gU1NfSEVBRF9IQU5EU0hBS0U7CiAKKwloID0gKHN0cnVjdCBoYW5kc2hha2VfZnJhbWUgKikobXNnX2ggKyAxKTsKIAloLT5yYl9waHkgPSBjcHVfdG9fbGU2NChoYmEtPmRtYV9oYW5kbGUpOwogCWgtPnJlcV9zeiA9IGNwdV90b19sZTE2KGhiYS0+cnFfc2l6ZSk7CiAJaC0+cmVxX2NudCA9IGNwdV90b19sZTE2KGhiYS0+cnFfY291bnQrMSk7CkBAIC0xMjA1LDYgKzEyMjEsMTMgQEAKIAkJCWhiYS0+cGRldi0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldKTsKIH0KIAorc3RhdGljIHZvaWQgc3RleF9zc19yZXNldChzdHJ1Y3Qgc3RfaGJhICpoYmEpCit7CisJd3JpdGVsKFNTX0gySV9JTlRfUkVTRVQsIGhiYS0+bW1pb19iYXNlICsgWUgySV9JTlQpOworCXJlYWRsKGhiYS0+bW1pb19iYXNlICsgWUgySV9JTlQpOworCXNzbGVlcCg1KTsKK30KKwogc3RhdGljIGludCBzdGV4X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKIAlzdHJ1Y3Qgc3RfaGJhICpoYmE7CkBAIC0xMjIxLDYgKzEyNDQsOCBAQAogCiAJaWYgKGhiYS0+Y2FyZHR5cGUgPT0gc3Rfc2hhc3RhKQogCQlzdGV4X2hhcmRfcmVzZXQoaGJhKTsKKwllbHNlIGlmIChoYmEtPmNhcmR0eXBlID09IHN0X3llbCkKKwkJc3RleF9zc19yZXNldChoYmEpOwogCiAJaWYgKGhiYS0+Y2FyZHR5cGUgIT0gc3RfeW9zZW1pdGUpIHsKIAkJaWYgKHN0ZXhfaGFuZHNoYWtlKGhiYSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDY1NTM4MzMuLjAzNDIyY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAJaW50CiAJZGVwZW5kcyBvbiBBUk0gJiYgUExBVF9TM0MKIAlkZWZhdWx0IDIgaWYgQVJDSF9TM0MyNDAwCi0JZGVmYXVsdCA0IGlmIEFSQ0hfUzNDNjRYWCB8fCBDUFVfUzNDMjQ0MworCWRlZmF1bHQgNCBpZiBBUkNIX1M1UEMxWFggfHwgQVJDSF9TM0M2NFhYIHx8IENQVV9TM0MyNDQzCiAJZGVmYXVsdCAzCiAJaGVscAogCSAgU2VsZWN0IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIFVBUlQgcG9ydHMgZm9yIHRoZSBTYW1zdW5nIFMzQwpAQCAtNTMzLDYgKzUzMywxMyBAQAogCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgUzNDNjQwMCBhbmQgUzNDNjQxMAogCSAgU29DcwogCitjb25maWcgU0VSSUFMX1M1UEMxMDAKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTNVBDMTAwIFNlcmlhbCBwb3J0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORyAmJiBDUFVfUzVQQzEwMAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNlcmlhbCBwb3J0IHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFM1UEMxMDAgU29DcworCiBjb25maWcgU0VSSUFMX01BWDMxMDAKIAl0cmlzdGF0ZSAiTUFYMzEwMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1BJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IGQ1YTI5OTguLjk3ZjZmY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC00Myw2ICs0Myw3IEBACiBvYmotJChDT05GSUdfU0VSSUFMX1MzQzI0NDApICs9IHMzYzI0NDAubwogb2JqLSQoQ09ORklHX1NFUklBTF9TM0MyNEEwKSArPSBzM2MyNGEwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUzNDNjQwMCkgKz0gczNjNjQwMC5vCitvYmotJChDT05GSUdfU0VSSUFMX1M1UEMxMDApICs9IHMzYzY0MDAubwogb2JqLSQoQ09ORklHX1NFUklBTF9NQVgzMTAwKSArPSBtYXgzMTAwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfSVAyMl9aSUxPRykgKz0gaXAyMnppbG9nLm8KIG9iai0kKENPTkZJR19TRVJJQUxfTVVYKSArPSBtdXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IGJmODJlMjguLjcyYmEwYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTgyNiw2ICs4MjYsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwbDAxMV9zdXNwZW5kKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXAgPSBhbWJhX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIXVhcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdWFydF9zdXNwZW5kX3BvcnQoJmFtYmFfcmVnLCAmdWFwLT5wb3J0KTsKK30KKworc3RhdGljIGludCBwbDAxMV9yZXN1bWUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVhcnRfYW1iYV9wb3J0ICp1YXAgPSBhbWJhX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoIXVhcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdWFydF9yZXN1bWVfcG9ydCgmYW1iYV9yZWcsICZ1YXAtPnBvcnQpOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9pZCBwbDAxMV9pZHNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLmlkCT0gMHgwMDA0MTAxMSwKQEAgLTg0Nyw2ICs4NjksMTAgQEAKIAkuaWRfdGFibGUJPSBwbDAxMV9pZHMsCiAJLnByb2JlCQk9IHBsMDExX3Byb2JlLAogCS5yZW1vdmUJCT0gcGwwMTFfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gcGwwMTFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBsMDExX3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgcGwwMTFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCA1ZDdiNThmLi43NDg1YWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtNjcsMjEgKzY3LDggQEAKICNkZWZpbmUgVUJJUiAgMHhhNCAvKiBCUk0gSW5jcmVtZW50YWwgUmVnaXN0ZXIgKi8KICNkZWZpbmUgVUJNUiAgMHhhOCAvKiBCUk0gTW9kdWxhdG9yIFJlZ2lzdGVyICovCiAjZGVmaW5lIFVCUkMgIDB4YWMgLyogQmF1ZCBSYXRlIENvdW50IFJlZ2lzdGVyICovCi0jaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMgfHwgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIKLSNkZWZpbmUgT05FTVMgMHhiMCAvKiBPbmUgTWlsbGlzZWNvbmQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVRTICAgMHhiNCAvKiBVQVJUIFRlc3QgUmVnaXN0ZXIgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX01YMQotI2RlZmluZSBCSVBSMSAweGIwIC8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciAxICovCi0jZGVmaW5lIEJJUFIyIDB4YjQgLyogSW5jcmVtZW50YWwgUHJlc2V0IFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgQklQUjMgMHhiOCAvKiBJbmNyZW1lbnRhbCBQcmVzZXQgUmVnaXN0ZXIgMyAqLwotI2RlZmluZSBCSVBSNCAweGJjIC8qIEluY3JlbWVudGFsIFByZXNldCBSZWdpc3RlciA0ICovCi0jZGVmaW5lIEJNUFIxIDB4YzAgLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciAxICovCi0jZGVmaW5lIEJNUFIyIDB4YzQgLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciAyICovCi0jZGVmaW5lIEJNUFIzIDB4YzggLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciAzICovCi0jZGVmaW5lIEJNUFI0IDB4Y2MgLyogQlJNIE1vZHVsYXRvciBSZWdpc3RlciA0ICovCi0jZGVmaW5lIFVUUyAgIDB4ZDAgLyogVUFSVCBUZXN0IFJlZ2lzdGVyICovCi0jZW5kaWYKKyNkZWZpbmUgTVgyX09ORU1TIDB4YjAgLyogT25lIE1pbGxpc2Vjb25kIHJlZ2lzdGVyICovCisjZGVmaW5lIFVUUyAoY3B1X2lzX214MSgpID8gMHhkMCA6IDB4YjQpIC8qIFVBUlQgVGVzdCBSZWdpc3RlciAqLwogCiAvKiBVQVJUIENvbnRyb2wgUmVnaXN0ZXIgQml0IEZpZWxkcy4qLwogI2RlZmluZSAgVVJYRF9DSEFSUkRZICAgICgxPDwxNSkKQEAgLTEwMSwxMiArODgsNyBAQAogI2RlZmluZSAgVUNSMV9SVFNERU4gICAgICgxPDw1KQkgLyogUlRTIGRlbHRhIGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgIFVDUjFfU05EQlJLICAgICAoMTw8NCkJIC8qIFNlbmQgYnJlYWsgKi8KICNkZWZpbmUgIFVDUjFfVERNQUVOICAgICAoMTw8MykJIC8qIFRyYW5zbWl0dGVyIHJlYWR5IERNQSBlbmFibGUgKi8KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDEKLSNkZWZpbmUgIFVDUjFfVUFSVENMS0VOICAoMTw8MikJIC8qIFVBUlQgY2xvY2sgZW5hYmxlZCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMgfHwgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIKLSNkZWZpbmUgIFVDUjFfVUFSVENMS0VOICAoMCkJIC8qIG5vdCBwcmVzZW50IG9uIG14Mi9teDMgKi8KLSNlbmRpZgorI2RlZmluZSAgTVgxX1VDUjFfVUFSVENMS0VOICAoMTw8MikJIC8qIFVBUlQgY2xvY2sgZW5hYmxlZCwgbXgxIG9ubHkgKi8KICNkZWZpbmUgIFVDUjFfRE9aRSAgICAgICAoMTw8MSkJIC8qIERvemUgKi8KICNkZWZpbmUgIFVDUjFfVUFSVEVOICAgICAoMTw8MCkJIC8qIFVBUlQgZW5hYmxlZCAqLwogI2RlZmluZSAgVUNSMl9FU0NJICAgICAJICgxPDwxNSkgLyogRXNjYXBlIHNlcSBpbnRlcnJ1cHQgZW5hYmxlICovCkBAIC0xMzIsMTMgKzExNCw5IEBACiAjZGVmaW5lICBVQ1IzX1JYRFNFTgkgKDE8PDYpICAvKiBSZWNlaXZlIHN0YXR1cyBpbnRlcnJ1cHQgZW5hYmxlICovCiAjZGVmaW5lICBVQ1IzX0FJUklOVEVOICAgKDE8PDUpICAvKiBBc3luYyBJUiB3YWtlIGludGVycnVwdCBlbmFibGUgKi8KICNkZWZpbmUgIFVDUjNfQVdBS0VOCSAoMTw8NCkgIC8qIEFzeW5jIHdha2UgaW50ZXJydXB0IGVuYWJsZSAqLwotI2lmZGVmIENPTkZJR19BUkNIX01YMQotI2RlZmluZSAgVUNSM19SRUYyNSAJICgxPDwzKSAgLyogUmVmIGZyZXEgMjUgTUh6LCBvbmx5IG9uIG14MSAqLwotI2RlZmluZSAgVUNSM19SRUYzMCAJICgxPDwyKSAgLyogUmVmIEZyZXEgMzAgTUh6LCBvbmx5IG9uIG14MSAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIgfHwgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKLSNkZWZpbmUgIFVDUjNfUlhETVVYU0VMCSAoMTw8MikgIC8qIFJYRCBNdXhlZCBJbnB1dCBTZWxlY3QsIG9uIG14Mi9teDMgKi8KLSNlbmRpZgorI2RlZmluZSAgTVgxX1VDUjNfUkVGMjUgCSAoMTw8MykgIC8qIFJlZiBmcmVxIDI1IE1Ieiwgb25seSBvbiBteDEgKi8KKyNkZWZpbmUgIE1YMV9VQ1IzX1JFRjMwIAkgKDE8PDIpICAvKiBSZWYgRnJlcSAzMCBNSHosIG9ubHkgb24gbXgxICovCisjZGVmaW5lICBNWDJfVUNSM19SWERNVVhTRUwJICgxPDwyKSAgLyogUlhEIE11eGVkIElucHV0IFNlbGVjdCwgb24gbXgyL214MyAqLwogI2RlZmluZSAgVUNSM19JTlZUICAJICgxPDwxKSAgLyogSW52ZXJ0ZWQgSW5mcmFyZWQgdHJhbnNtaXNzaW9uICovCiAjZGVmaW5lICBVQ1IzX0JQRU4gIAkgKDE8PDApICAvKiBQcmVzZXQgcmVnaXN0ZXJzIGVuYWJsZSAqLwogI2RlZmluZSAgVUNSNF9DVFNUTF8zMiAgICgzMjw8MTApIC8qIENUUyB0cmlnZ2VyIGxldmVsICgzMiBjaGFycykgKi8KQEAgLTE4NiwxMiArMTY0LDEwIEBACiAjZGVmaW5lICBVVFNfU09GVFJTVAkgKDE8PDApCSAvKiBTb2Z0d2FyZSByZXNldCAqLwogCiAvKiBXZSd2ZSBiZWVuIGFzc2lnbmVkIGEgcmFuZ2Ugb24gdGhlICJMb3ctZGVuc2l0eSBzZXJpYWwgcG9ydHMiIG1ham9yICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVhDCiAjZGVmaW5lIFNFUklBTF9JTVhfTUFKT1IgICAgICAgIDIwNwogI2RlZmluZSBNSU5PUl9TVEFSVAkgICAgICAgIDE2CiAjZGVmaW5lIERFVl9OQU1FCQkidHR5bXhjIgogI2RlZmluZSBNQVhfSU5URVJOQUxfSVJRCU1YQ19JTlRFUk5BTF9JUlFTCi0jZW5kaWYKIAogLyoKICAqIFRoaXMgZGV0ZXJtaW5lcyBob3cgb2Z0ZW4gd2UgY2hlY2sgdGhlIG1vZGVtIHN0YXR1cyBzaWduYWxzCkBAIC03MDYsMTEgKzY4MiwxMSBAQAogCQl9CiAJfQogCi0jaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIgfHwgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKLQl0ZW1wID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjMpOwotCXRlbXAgfD0gVUNSM19SWERNVVhTRUw7Ci0Jd3JpdGVsKHRlbXAsIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IzKTsKLSNlbmRpZgorCWlmICghY3B1X2lzX214MSgpKSB7CisJCXRlbXAgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMyk7CisJCXRlbXAgfD0gTVgyX1VDUjNfUlhETVVYU0VMOworCQl3cml0ZWwodGVtcCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjMpOworCX0KIAogCWlmIChVU0VfSVJEQShzcG9ydCkpIHsKIAkJdGVtcCA9IHJlYWRsKHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1I0KTsKQEAgLTk0Miw5ICs5MTgsOSBAQAogCXdyaXRlbChudW0sIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQklSKTsKIAl3cml0ZWwoZGVub20sIHNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQk1SKTsKIAotI2lmZGVmIE9ORU1TCi0Jd3JpdGVsKHNwb3J0LT5wb3J0LnVhcnRjbGsgLyBkaXYgLyAxMDAwLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgT05FTVMpOwotI2VuZGlmCisJaWYgKCFjcHVfaXNfbXgxKCkpCisJCXdyaXRlbChzcG9ydC0+cG9ydC51YXJ0Y2xrIC8gZGl2IC8gMTAwMCwKKwkJCQlzcG9ydC0+cG9ydC5tZW1iYXNlICsgTVgyX09ORU1TKTsKIAogCXdyaXRlbChvbGRfdWNyMSwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjEpOwogCkBAIC0xMDc0LDE3ICsxMDUwLDIwIEBACiBpbXhfY29uc29sZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gaW14X3BvcnRzW2NvLT5pbmRleF07Ci0JdW5zaWduZWQgaW50IG9sZF91Y3IxLCBvbGRfdWNyMjsKKwl1bnNpZ25lZCBpbnQgb2xkX3VjcjEsIG9sZF91Y3IyLCB1Y3IxOwogCiAJLyoKIAkgKglGaXJzdCwgc2F2ZSBVQ1IxLzIgYW5kIHRoZW4gZGlzYWJsZSBpbnRlcnJ1cHRzCiAJICovCi0Jb2xkX3VjcjEgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMSk7CisJdWNyMSA9IG9sZF91Y3IxID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjEpOwogCW9sZF91Y3IyID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjIpOwogCi0Jd3JpdGVsKChvbGRfdWNyMSB8IFVDUjFfVUFSVENMS0VOIHwgVUNSMV9VQVJURU4pICYKLQkJfihVQ1IxX1RYTVBUWUVOIHwgVUNSMV9SUkRZRU4gfCBVQ1IxX1JUU0RFTiksCi0JCXNwb3J0LT5wb3J0Lm1lbWJhc2UgKyBVQ1IxKTsKKwlpZiAoY3B1X2lzX214MSgpKQorCQl1Y3IxIHw9IE1YMV9VQ1IxX1VBUlRDTEtFTjsKKwl1Y3IxIHw9IFVDUjFfVUFSVEVOOworCXVjcjEgJj0gfihVQ1IxX1RYTVBUWUVOIHwgVUNSMV9SUkRZRU4gfCBVQ1IxX1JUU0RFTik7CisKKwl3cml0ZWwodWNyMSwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVDUjEpOwogCiAJd3JpdGVsKG9sZF91Y3IyIHwgVUNSMl9UWEVOLCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVUNSMik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9rczg2OTUuYwppbmRleCBlMDY2NTYzLi41MmRiNWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfa3M4Njk1LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2tzODY5NS5jCkBAIC0xMTAsNyArMTEwLDExIEBACiBzdGF0aWMgdm9pZCBrczg2OTV1YXJ0X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAodHhfZW5hYmxlZChwb3J0KSkgewotCQlkaXNhYmxlX2lycShLUzg2OTVfSVJRX1VBUlRfVFgpOworCQkvKiB1c2UgZGlzYWJsZV9pcnFfbm9zeW5jKCkgYW5kIG5vdCBkaXNhYmxlX2lycSgpIHRvIGF2b2lkIHNlbGYKKwkJICogaW1wb3NlZCBkZWFkbG9jayBieSBub3Qgd2FpdGluZyBmb3IgaXJxIGhhbmRsZXIgdG8gZW5kLAorCQkgKiBzaW5jZSB0aGlzIGtzODY5NXVhcnRfc3RvcF90eCgpIGlzIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LgorCQkgKi8KKwkJZGlzYWJsZV9pcnFfbm9zeW5jKEtTODY5NV9JUlFfVUFSVF9UWCk7CiAJCXR4X2VuYWJsZShwb3J0LCAwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKaW5kZXggZGE3Njc5Ny4uYzBmOTUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCisrKyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwpAQCAtMzgsMTQgKzM4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKIC8qCiAgKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGVmaW5lIHNvbWUgcmVnaXN0ZXIgZGVmYXVsdCB2YWx1ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9LY29uZmlnIGIvZHJpdmVycy9zc2IvS2NvbmZpZwppbmRleCA1NDBhMjk0Li4yZDhjYzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3NiL0tjb25maWcKQEAgLTY2LDYgKzY2LDIwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4KIAorY29uZmlnIFNTQl9TRElPSE9TVF9QT1NTSUJMRQorCWJvb2wKKwlkZXBlbmRzIG9uIFNTQiAmJiAoTU1DID0geSB8fCBNTUMgPSBTU0IpCisJZGVmYXVsdCB5CisKK2NvbmZpZyBTU0JfU0RJT0hPU1QKKwlib29sICJTdXBwb3J0IGZvciBTU0Igb24gU0RJTy1idXMgaG9zdCIKKwlkZXBlbmRzIG9uIFNTQl9TRElPSE9TVF9QT1NTSUJMRQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGEgU29uaWNzIFNpbGljb24gQmFja3BsYW5lIG9uIHRvcAorCSAgb2YgYSBTRElPIGRldmljZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTgorCiBjb25maWcgU1NCX1NJTEVOVAogCWJvb2wgIk5vIFNTQiBrZXJuZWwgbWVzc2FnZXMiCiAJZGVwZW5kcyBvbiBTU0IgJiYgRU1CRURERUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL01ha2VmaWxlIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKaW5kZXggY2ZiYjc0Zi4uNjU2ZTU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiAjIGhvc3Qgc3VwcG9ydAogc3NiLSQoQ09ORklHX1NTQl9QQ0lIT1NUKQkJKz0gcGNpLm8gcGNpaG9zdF93cmFwcGVyLm8KIHNzYi0kKENPTkZJR19TU0JfUENNQ0lBSE9TVCkJCSs9IHBjbWNpYS5vCitzc2ItJChDT05GSUdfU1NCX1NESU9IT1NUKQkJKz0gc2Rpby5vCiAKICMgYnVpbHQtaW4gZHJpdmVycwogc3NiLXkJCQkJCSs9IGRyaXZlcl9jaGlwY29tbW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKaW5kZXggNGFhZGRlZS4uNjRhYmQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKQEAgLTI4LDYgKzI4LDIxIEBACiAJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEsIHZhbHVlKTsKIH0KIAorc3RhdGljIHZvaWQgc3NiX2NoaXBjb19yZWdjdGxfbWFza3NldChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJCSAgIHUzMiBvZmZzZXQsIHUzMiBtYXNrLCB1MzIgc2V0KQoreworCXUzMiB2YWx1ZTsKKworCWNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUkVHQ1RMX0FERFIpOworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1JFR0NUTF9BRERSLCBvZmZzZXQpOworCWNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUkVHQ1RMX0FERFIpOworCXZhbHVlID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19SRUdDVExfREFUQSk7CisJdmFsdWUgJj0gbWFzazsKKwl2YWx1ZSB8PSBzZXQ7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUkVHQ1RMX0RBVEEsIHZhbHVlKTsKKwljaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1JFR0NUTF9EQVRBKTsKK30KKwogc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5IHsKIAl1MTYgZnJlcTsJLyogQ3J5c3RhbCBmcmVxdWVuY3kgaW4ga0h6LiovCiAJdTggeGY7CQkvKiBDcnlzdGFsIGZyZXF1ZW5jeSB2YWx1ZSBmb3IgUE1VIGNvbnRyb2wgKi8KQEAgLTUwNiwzICs1MjEsODIgQEAKIAlzc2JfcG11X3BsbF9pbml0KGNjKTsKIAlzc2JfcG11X3Jlc291cmNlc19pbml0KGNjKTsKIH0KKwordm9pZCBzc2JfcG11X3NldF9sZG9fdm9sdGFnZShzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJICAgICBlbnVtIHNzYl9wbXVfbGRvX3ZvbHRfaWQgaWQsIHUzMiB2b2x0YWdlKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJdTMyIGFkZHIsIHNoaWZ0LCBtYXNrOworCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMyODoKKwljYXNlIDB4NTM1NDoKKwkJc3dpdGNoIChpZCkgeworCQljYXNlIExET19WT0xUMToKKwkJCWFkZHIgPSAyOworCQkJc2hpZnQgPSAyNTsKKwkJCW1hc2sgPSAweEY7CisJCQlicmVhazsKKwkJY2FzZSBMRE9fVk9MVDI6CisJCQlhZGRyID0gMzsKKwkJCXNoaWZ0ID0gMTsKKwkJCW1hc2sgPSAweEY7CisJCQlicmVhazsKKwkJY2FzZSBMRE9fVk9MVDM6CisJCQlhZGRyID0gMzsKKwkJCXNoaWZ0ID0gOTsKKwkJCW1hc2sgPSAweEY7CisJCQlicmVhazsKKwkJY2FzZSBMRE9fUEFSRUY6CisJCQlhZGRyID0gMzsKKwkJCXNoaWZ0ID0gMTc7CisJCQltYXNrID0gMHgzRjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJU1NCX1dBUk5fT04oMSk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweDQzMTI6CisJCWlmIChTU0JfV0FSTl9PTihpZCAhPSBMRE9fUEFSRUYpKQorCQkJcmV0dXJuOworCQlhZGRyID0gMDsKKwkJc2hpZnQgPSAyMTsKKwkJbWFzayA9IDB4M0Y7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlzc2JfY2hpcGNvX3JlZ2N0bF9tYXNrc2V0KGNjLCBhZGRyLCB+KG1hc2sgPDwgc2hpZnQpLAorCQkJCSAgKHZvbHRhZ2UgJiBtYXNrKSA8PCBzaGlmdCk7Cit9CisKK3ZvaWQgc3NiX3BtdV9zZXRfbGRvX3BhcmVmKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIGJvb2wgb24pCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwlpbnQgbGRvOworCisJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKKwljYXNlIDB4NDMxMjoKKwkJbGRvID0gU1NCX1BNVVJFU180MzEyX1BBX1JFRl9MRE87CisJCWJyZWFrOworCWNhc2UgMHg0MzI4OgorCQlsZG8gPSBTU0JfUE1VUkVTXzQzMjhfUEFfUkVGX0xETzsKKwkJYnJlYWs7CisJY2FzZSAweDUzNTQ6CisJCWxkbyA9IFNTQl9QTVVSRVNfNTM1NF9QQV9SRUZfTERPOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJaWYgKG9uKQorCQljaGlwY29fc2V0MzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssIDEgPDwgbGRvKTsKKwllbHNlCisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssIH4oMSA8PCBsZG8pKTsKKwljaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLKTsgLy9TUEVDIEZJWE1FIGZvdW5kIHZpYSBtbWlvdHJhY2UgLSBkdW1teSByZWFkPworfQorCitFWFBPUlRfU1lNQk9MKHNzYl9wbXVfc2V0X2xkb192b2x0YWdlKTsKK0VYUE9SVF9TWU1CT0woc3NiX3BtdV9zZXRfbGRvX3BhcmVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL21haW4uYyBiL2RyaXZlcnMvc3NiL21haW4uYwppbmRleCA2NWExZWQ5Li41NzliMTE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9tYWluLmMKKysrIGIvZHJpdmVycy9zc2IvbWFpbi5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3NiL3NzYl9kcml2ZXJfZ2lnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CkBAIC04OCw2ICs4OSwyNSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TU0JfUENNQ0lBSE9TVCAqLwogCisjaWZkZWYgQ09ORklHX1NTQl9TRElPSE9TVAorc3RydWN0IHNzYl9idXMgKnNzYl9zZGlvX2Z1bmNfdG9fYnVzKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1czsKKworCXNzYl9idXNlc19sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZidXNlcywgbGlzdCkgeworCQlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1NESU8gJiYKKwkJICAgIGJ1cy0+aG9zdF9zZGlvID09IGZ1bmMpCisJCQlnb3RvIGZvdW5kOworCX0KKwlidXMgPSBOVUxMOworZm91bmQ6CisJc3NiX2J1c2VzX3VubG9jaygpOworCisJcmV0dXJuIGJ1czsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1NCX1NESU9IT1NUICovCisKIGludCBzc2JfZm9yX2VhY2hfYnVzX2NhbGwodW5zaWduZWQgbG9uZyBkYXRhLAogCQkJICBpbnQgKCpmdW5jKShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1bnNpZ25lZCBsb25nIGRhdGEpKQogewpAQCAtNDY5LDYgKzQ4OSwxMiBAQAogCQkJZGV2LT5wYXJlbnQgPSAmYnVzLT5ob3N0X3BjbWNpYS0+ZGV2OwogI2VuZGlmCiAJCQlicmVhazsKKwkJY2FzZSBTU0JfQlVTVFlQRV9TRElPOgorI2lmZGVmIENPTkZJR19TU0JfU0RJTworCQkJc2Rldi0+aXJxID0gYnVzLT5ob3N0X3NkaW8tPmRldi5pcnE7CisJCQlkZXYtPnBhcmVudCA9ICZidXMtPmhvc3Rfc2Rpby0+ZGV2OworI2VuZGlmCisJCQlicmVhazsKIAkJY2FzZSBTU0JfQlVTVFlQRV9TU0I6CiAJCQlkZXYtPmRtYV9tYXNrID0gJmRldi0+Y29oZXJlbnRfZG1hX21hc2s7CiAJCQlicmVhazsKQEAgLTcyNCwxMiArNzUwLDE4IEBACiAJZXJyID0gc3NiX3BjaV94dGFsKGJ1cywgU1NCX0dQSU9fWFRBTCB8IFNTQl9HUElPX1BMTCwgMSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CisKKwkvKiBJbml0IFNESU8taG9zdCBkZXZpY2UgKGlmIGFueSksIGJlZm9yZSB0aGUgc2NhbiAqLworCWVyciA9IHNzYl9zZGlvX2luaXQoYnVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9kaXNhYmxlX3h0YWw7CisKIAlzc2JfYnVzZXNfbG9jaygpOwogCWJ1cy0+YnVzbnVtYmVyID0gbmV4dF9idXNudW1iZXI7CiAJLyogU2NhbiBmb3IgZGV2aWNlcyAoY29yZXMpICovCiAJZXJyID0gc3NiX2J1c19zY2FuKGJ1cywgYmFzZWFkZHIpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2Rpc2FibGVfeHRhbDsKKwkJZ290byBlcnJfc2Rpb19leGl0OwogCiAJLyogSW5pdCBQQ0ktaG9zdCBkZXZpY2UgKGlmIGFueSkgKi8KIAllcnIgPSBzc2JfcGNpX2luaXQoYnVzKTsKQEAgLTc3Niw2ICs4MDgsOCBAQAogCXNzYl9wY2lfZXhpdChidXMpOwogZXJyX3VubWFwOgogCXNzYl9pb3VubWFwKGJ1cyk7CitlcnJfc2Rpb19leGl0OgorCXNzYl9zZGlvX2V4aXQoYnVzKTsKIGVycl9kaXNhYmxlX3h0YWw6CiAJc3NiX2J1c2VzX3VubG9jaygpOwogCXNzYl9wY2lfeHRhbChidXMsIFNTQl9HUElPX1hUQUwgfCBTU0JfR1BJT19QTEwsIDApOwpAQCAtODI1LDYgKzg1OSwyOCBAQAogRVhQT1JUX1NZTUJPTChzc2JfYnVzX3BjbWNpYWJ1c19yZWdpc3Rlcik7CiAjZW5kaWYgLyogQ09ORklHX1NTQl9QQ01DSUFIT1NUICovCiAKKyNpZmRlZiBDT05GSUdfU1NCX1NESU9IT1NUCitpbnQgc3NiX2J1c19zZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsCisJCQkgICAgIHVuc2lnbmVkIGludCBxdWlya3MpCit7CisJaW50IGVycjsKKworCWJ1cy0+YnVzdHlwZSA9IFNTQl9CVVNUWVBFX1NESU87CisJYnVzLT5ob3N0X3NkaW8gPSBmdW5jOworCWJ1cy0+b3BzID0gJnNzYl9zZGlvX29wczsKKwlidXMtPnF1aXJrcyA9IHF1aXJrczsKKworCWVyciA9IHNzYl9idXNfcmVnaXN0ZXIoYnVzLCBzc2Jfc2Rpb19nZXRfaW52YXJpYW50cywgfjApOworCWlmICghZXJyKSB7CisJCXNzYl9wcmludGsoS0VSTl9JTkZPIFBGWCAiU29uaWNzIFNpbGljb24gQmFja3BsYW5lIGZvdW5kIG9uICIKKwkJCSAgICJTRElPIGRldmljZSAlc1xuIiwgc2Rpb19mdW5jX2lkKGZ1bmMpKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChzc2JfYnVzX3NkaW9idXNfcmVnaXN0ZXIpOworI2VuZGlmIC8qIENPTkZJR19TU0JfUENNQ0lBSE9TVCAqLworCiBpbnQgc3NiX2J1c19zc2JidXNfcmVnaXN0ZXIoc3RydWN0IHNzYl9idXMgKmJ1cywKIAkJCSAgICB1bnNpZ25lZCBsb25nIGJhc2VhZGRyLAogCQkJICAgIHNzYl9pbnZhcmlhbnRzX2Z1bmNfdCBnZXRfaW52YXJpYW50cykKQEAgLTEzNTgsOCArMTQxNCwxMCBAQAogCXNzYl9idXNlc19sb2NrKCk7CiAJZXJyID0gc3NiX2F0dGFjaF9xdWV1ZWRfYnVzZXMoKTsKIAlzc2JfYnVzZXNfdW5sb2NrKCk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CiAJCWJ1c191bnJlZ2lzdGVyKCZzc2JfYnVzdHlwZSk7CisJCWdvdG8gb3V0OworCX0KIAogCWVyciA9IGI0M19wY2lfc3NiX2JyaWRnZV9pbml0KCk7CiAJaWYgKGVycikgewpAQCAtMTM3NSw3ICsxNDMzLDcgQEAKIAkJLyogZG9uJ3QgZmFpbCBTU0IgaW5pdCBiZWNhdXNlIG9mIHRoaXMgKi8KIAkJZXJyID0gMDsKIAl9Ci0KK291dDoKIAlyZXR1cm4gZXJyOwogfQogLyogc3NiIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgUENJIGJ1dCBiZWZvcmUgdGhlIHNzYiBkcml2ZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNpLmMgYi9kcml2ZXJzL3NzYi9wY2kuYwppbmRleCA0MGVhNDE3Li5mODUzZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2kuYworKysgYi9kcml2ZXJzL3NzYi9wY2kuYwpAQCAtMTY5LDggKzE2OSwxNCBAQAogLyogR2V0IHRoZSB3b3JkLW9mZnNldCBmb3IgYSBTU0JfU1BST01fWFhYIGRlZmluZS4gKi8KICNkZWZpbmUgU1BPRkYob2Zmc2V0KQkoKChvZmZzZXQpIC0gU1NCX1NQUk9NX0JBU0UpIC8gc2l6ZW9mKHUxNikpCiAvKiBIZWxwZXIgdG8gZXh0cmFjdCBzb21lIF9vZmZzZXQsIHdoaWNoIGlzIG9uZSBvZiB0aGUgU1NCX1NQUk9NX1hYWCBkZWZpbmVzLiAqLwotI2RlZmluZSBTUEVYKF9vdXR2YXIsIF9vZmZzZXQsIF9tYXNrLCBfc2hpZnQpCVwKKyNkZWZpbmUgU1BFWDE2KF9vdXR2YXIsIF9vZmZzZXQsIF9tYXNrLCBfc2hpZnQpCVwKIAlvdXQtPl9vdXR2YXIgPSAoKGluW1NQT0ZGKF9vZmZzZXQpXSAmIChfbWFzaykpID4+IChfc2hpZnQpKQorI2RlZmluZSBTUEVYMzIoX291dHZhciwgX29mZnNldCwgX21hc2ssIF9zaGlmdCkJXAorCW91dC0+X291dHZhciA9ICgoKCh1MzIpaW5bU1BPRkYoKF9vZmZzZXQpKzIpXSA8PCAxNiB8IFwKKwkJCSAgIGluW1NQT0ZGKF9vZmZzZXQpXSkgJiAoX21hc2spKSA+PiAoX3NoaWZ0KSkKKyNkZWZpbmUgU1BFWChfb3V0dmFyLCBfb2Zmc2V0LCBfbWFzaywgX3NoaWZ0KSBcCisJU1BFWDE2KF9vdXR2YXIsIF9vZmZzZXQsIF9tYXNrLCBfc2hpZnQpCisKIAogc3RhdGljIGlubGluZSB1OCBzc2JfY3JjOCh1OCBjcmMsIHU4IGRhdGEpCiB7CkBAIC00NzQsMTIgKzQ4MCwxNCBAQAogCiAJLyogZXh0cmFjdCB0aGUgTUFDIGFkZHJlc3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCXYgPSBpbltTUE9GRihTU0JfU1BST00xX0lMME1BQykgKyBpXTsKKwkJdiA9IGluW1NQT0ZGKFNTQl9TUFJPTThfSUwwTUFDKSArIGldOwogCQkqKCgoX19iZTE2ICopb3V0LT5pbDBtYWMpICsgaSkgPSBjcHVfdG9fYmUxNih2KTsKIAl9CiAJU1BFWChjb3VudHJ5X2NvZGUsIFNTQl9TUFJPTThfQ0NPREUsIDB4RkZGRiwgMCk7CiAJU1BFWChib2FyZGZsYWdzX2xvLCBTU0JfU1BST004X0JGTExPLCAweEZGRkYsIDApOwogCVNQRVgoYm9hcmRmbGFnc19oaSwgU1NCX1NQUk9NOF9CRkxISSwgMHhGRkZGLCAwKTsKKwlTUEVYKGJvYXJkZmxhZ3MyX2xvLCBTU0JfU1BST004X0JGTDJMTywgMHhGRkZGLCAwKTsKKwlTUEVYKGJvYXJkZmxhZ3MyX2hpLCBTU0JfU1BST004X0JGTDJISSwgMHhGRkZGLCAwKTsKIAlTUEVYKGFudF9hdmFpbGFibGVfYSwgU1NCX1NQUk9NOF9BTlRBVkFJTCwgU1NCX1NQUk9NOF9BTlRBVkFJTF9BLAogCSAgICAgU1NCX1NQUk9NOF9BTlRBVkFJTF9BX1NISUZUKTsKIAlTUEVYKGFudF9hdmFpbGFibGVfYmcsIFNTQl9TUFJPTThfQU5UQVZBSUwsIFNTQl9TUFJPTThfQU5UQVZBSUxfQkcsCkBAIC00OTAsMTIgKzQ5OCw1NSBAQAogCVNQRVgobWF4cHdyX2EsIFNTQl9TUFJPTThfTUFYUF9BLCBTU0JfU1BST004X01BWFBfQV9NQVNLLCAwKTsKIAlTUEVYKGl0c3NpX2EsIFNTQl9TUFJPTThfTUFYUF9BLCBTU0JfU1BST004X0lUU1NJX0EsCiAJICAgICBTU0JfU1BST004X0lUU1NJX0FfU0hJRlQpOworCVNQRVgobWF4cHdyX2FoLCBTU0JfU1BST004X01BWFBfQUhMLCBTU0JfU1BST004X01BWFBfQUhfTUFTSywgMCk7CisJU1BFWChtYXhwd3JfYWwsIFNTQl9TUFJPTThfTUFYUF9BSEwsIFNTQl9TUFJPTThfTUFYUF9BTF9NQVNLLAorCSAgICAgU1NCX1NQUk9NOF9NQVhQX0FMX1NISUZUKTsKIAlTUEVYKGdwaW8wLCBTU0JfU1BST004X0dQSU9BLCBTU0JfU1BST004X0dQSU9BX1AwLCAwKTsKIAlTUEVYKGdwaW8xLCBTU0JfU1BST004X0dQSU9BLCBTU0JfU1BST004X0dQSU9BX1AxLAogCSAgICAgU1NCX1NQUk9NOF9HUElPQV9QMV9TSElGVCk7CiAJU1BFWChncGlvMiwgU1NCX1NQUk9NOF9HUElPQiwgU1NCX1NQUk9NOF9HUElPQl9QMiwgMCk7CiAJU1BFWChncGlvMywgU1NCX1NQUk9NOF9HUElPQiwgU1NCX1NQUk9NOF9HUElPQl9QMywKIAkgICAgIFNTQl9TUFJPTThfR1BJT0JfUDNfU0hJRlQpOworCVNQRVgodHJpMmcsIFNTQl9TUFJPTThfVFJJMjVHLCBTU0JfU1BST004X1RSSTJHLCAwKTsKKwlTUEVYKHRyaTVnLCBTU0JfU1BST004X1RSSTI1RywgU1NCX1NQUk9NOF9UUkk1RywKKwkgICAgIFNTQl9TUFJPTThfVFJJNUdfU0hJRlQpOworCVNQRVgodHJpNWdsLCBTU0JfU1BST004X1RSSTVHSEwsIFNTQl9TUFJPTThfVFJJNUdMLCAwKTsKKwlTUEVYKHRyaTVnaCwgU1NCX1NQUk9NOF9UUkk1R0hMLCBTU0JfU1BST004X1RSSTVHSCwKKwkgICAgIFNTQl9TUFJPTThfVFJJNUdIX1NISUZUKTsKKwlTUEVYKHJ4cG8yZywgU1NCX1NQUk9NOF9SWFBPLCBTU0JfU1BST004X1JYUE8yRywgMCk7CisJU1BFWChyeHBvNWcsIFNTQl9TUFJPTThfUlhQTywgU1NCX1NQUk9NOF9SWFBPNUcsCisJICAgICBTU0JfU1BST004X1JYUE81R19TSElGVCk7CisJU1BFWChyc3Npc21mMmcsIFNTQl9TUFJPTThfUlNTSVBBUk0yRywgU1NCX1NQUk9NOF9SU1NJU01GMkcsIDApOworCVNQRVgocnNzaXNtYzJnLCBTU0JfU1BST004X1JTU0lQQVJNMkcsIFNTQl9TUFJPTThfUlNTSVNNQzJHLAorCSAgICAgU1NCX1NQUk9NOF9SU1NJU01DMkdfU0hJRlQpOworCVNQRVgocnNzaXNhdjJnLCBTU0JfU1BST004X1JTU0lQQVJNMkcsIFNTQl9TUFJPTThfUlNTSVNBVjJHLAorCSAgICAgU1NCX1NQUk9NOF9SU1NJU0FWMkdfU0hJRlQpOworCVNQRVgoYnhhMmcsIFNTQl9TUFJPTThfUlNTSVBBUk0yRywgU1NCX1NQUk9NOF9CWEEyRywKKwkgICAgIFNTQl9TUFJPTThfQlhBMkdfU0hJRlQpOworCVNQRVgocnNzaXNtZjVnLCBTU0JfU1BST004X1JTU0lQQVJNNUcsIFNTQl9TUFJPTThfUlNTSVNNRjVHLCAwKTsKKwlTUEVYKHJzc2lzbWM1ZywgU1NCX1NQUk9NOF9SU1NJUEFSTTVHLCBTU0JfU1BST004X1JTU0lTTUM1RywKKwkgICAgIFNTQl9TUFJPTThfUlNTSVNNQzVHX1NISUZUKTsKKwlTUEVYKHJzc2lzYXY1ZywgU1NCX1NQUk9NOF9SU1NJUEFSTTVHLCBTU0JfU1BST004X1JTU0lTQVY1RywKKwkgICAgIFNTQl9TUFJPTThfUlNTSVNBVjVHX1NISUZUKTsKKwlTUEVYKGJ4YTVnLCBTU0JfU1BST004X1JTU0lQQVJNNUcsIFNTQl9TUFJPTThfQlhBNUcsCisJICAgICBTU0JfU1BST004X0JYQTVHX1NISUZUKTsKKwlTUEVYKHBhMGIwLCBTU0JfU1BST004X1BBMEIwLCAweEZGRkYsIDApOworCVNQRVgocGEwYjEsIFNTQl9TUFJPTThfUEEwQjEsIDB4RkZGRiwgMCk7CisJU1BFWChwYTBiMiwgU1NCX1NQUk9NOF9QQTBCMiwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWIwLCBTU0JfU1BST004X1BBMUIwLCAweEZGRkYsIDApOworCVNQRVgocGExYjEsIFNTQl9TUFJPTThfUEExQjEsIDB4RkZGRiwgMCk7CisJU1BFWChwYTFiMiwgU1NCX1NQUk9NOF9QQTFCMiwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWxvYjAsIFNTQl9TUFJPTThfUEExTE9CMCwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWxvYjEsIFNTQl9TUFJPTThfUEExTE9CMSwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWxvYjIsIFNTQl9TUFJPTThfUEExTE9CMiwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWhpYjAsIFNTQl9TUFJPTThfUEExSElCMCwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWhpYjEsIFNTQl9TUFJPTThfUEExSElCMSwgMHhGRkZGLCAwKTsKKwlTUEVYKHBhMWhpYjIsIFNTQl9TUFJPTThfUEExSElCMiwgMHhGRkZGLCAwKTsKKwlTUEVYKGNjazJncG8sIFNTQl9TUFJPTThfQ0NLMkdQTywgMHhGRkZGLCAwKTsKKwlTUEVYMzIob2ZkbTJncG8sIFNTQl9TUFJPTThfT0ZETTJHUE8sIDB4RkZGRkZGRkYsIDApOworCVNQRVgzMihvZmRtNWdscG8sIFNTQl9TUFJPTThfT0ZETTVHTFBPLCAweEZGRkZGRkZGLCAwKTsKKwlTUEVYMzIob2ZkbTVncG8sIFNTQl9TUFJPTThfT0ZETTVHUE8sIDB4RkZGRkZGRkYsIDApOworCVNQRVgzMihvZmRtNWdocG8sIFNTQl9TUFJPTThfT0ZETTVHSFBPLCAweEZGRkZGRkZGLCAwKTsKIAogCS8qIEV4dHJhY3QgdGhlIGFudGVubmEgZ2FpbiB2YWx1ZXMuICovCiAJU1BFWChhbnRlbm5hX2dhaW4uZ2h6MjQuYTAsIFNTQl9TUFJPTThfQUdBSU4wMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NjYW4uYyBiL2RyaXZlcnMvc3NiL3NjYW4uYwppbmRleCA2M2VlNWNmLi5iNzQyMTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zY2FuLmMKKysrIGIvZHJpdmVycy9zc2Ivc2Nhbi5jCkBAIC0xNzUsNiArMTc1LDkgQEAKIAkJfSBlbHNlCiAJCQlzc2JfcGNtY2lhX3N3aXRjaF9zZWdtZW50KGJ1cywgMCk7CiAJCWJyZWFrOworCWNhc2UgU1NCX0JVU1RZUEVfU0RJTzoKKwkJb2Zmc2V0ICs9IGN1cnJlbnRfY29yZWlkeCAqIFNTQl9DT1JFX1NJWkU7CisJCXJldHVybiBzc2Jfc2Rpb19zY2FuX3JlYWQzMihidXMsIG9mZnNldCk7CiAJfQogCXJldHVybiByZWFkbChidXMtPm1taW8gKyBvZmZzZXQpOwogfQpAQCAtMTg4LDYgKzE5MSw4IEBACiAJCXJldHVybiBzc2JfcGNpX3N3aXRjaF9jb3JlaWR4KGJ1cywgY29yZWlkeCk7CiAJY2FzZSBTU0JfQlVTVFlQRV9QQ01DSUE6CiAJCXJldHVybiBzc2JfcGNtY2lhX3N3aXRjaF9jb3JlaWR4KGJ1cywgY29yZWlkeCk7CisJY2FzZSBTU0JfQlVTVFlQRV9TRElPOgorCQlyZXR1cm4gc3NiX3NkaW9fc2Nhbl9zd2l0Y2hfY29yZWlkeChidXMsIGNvcmVpZHgpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIwNiw2ICsyMTEsOCBAQAogCQlTU0JfQlVHX09OKDEpOyAvKiBDYW4ndCByZWFjaCB0aGlzIGNvZGUuICovCiAjZW5kaWYKIAkJYnJlYWs7CisJY2FzZSBTU0JfQlVTVFlQRV9TRElPOgorCQlicmVhazsKIAl9CiAJYnVzLT5tbWlvID0gTlVMTDsKIAlidXMtPm1hcHBlZF9kZXZpY2UgPSBOVUxMOwpAQCAtMjMwLDYgKzIzNywxMCBAQAogCQlTU0JfQlVHX09OKDEpOyAvKiBDYW4ndCByZWFjaCB0aGlzIGNvZGUuICovCiAjZW5kaWYKIAkJYnJlYWs7CisJY2FzZSBTU0JfQlVTVFlQRV9TRElPOgorCQkvKiBOb3RoaW5nIHRvIGlvcmVtYXAgaW4gdGhlIFNESU8gY2FzZSwganVzdCBmYWtlIGl0ICovCisJCW1taW8gPSAodm9pZCBfX2lvbWVtICopYmFzZWFkZHI7CisJCWJyZWFrOwogCX0KIAogCXJldHVybiBtbWlvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc2Rpby5jIGIvZHJpdmVycy9zc2Ivc2Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDA1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NzYi9zZGlvLmMKQEAgLTAsMCArMSw2MTAgQEAKKy8qCisgKiBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyAqIFNESU8tSG9zdGJ1cyByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA5IEFsYmVydCBIZXJyYW56IDxhbGJlcnRfaGVycmFuekB5YWhvby5lcz4KKyAqCisgKiBCYXNlZCBvbiBkcml2ZXJzL3NzYi9wY21jaWEuYworICogQ29weXJpZ2h0IDIwMDYgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDggTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR05VL0dQTC4gU2VlIENPUFlJTkcgZm9yIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zc2Ivc3NiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW9fZnVuYy5oPgorCisjaW5jbHVkZSAic3NiX3ByaXZhdGUuaCIKKworLyogRGVmaW5lIHRoZSBmb2xsb3dpbmcgdG8gMSB0byBlbmFibGUgYSBwcmludGsgb24gZWFjaCBjb3Jlc3dpdGNoLiAqLworI2RlZmluZSBTU0JfVkVSQk9TRV9TRElPQ09SRVNXSVRDSF9ERUJVRwkJMQorCisKKy8qIEhhcmR3YXJlIGludmFyaWFudHMgQ0lTIHR1cGxlcyAqLworI2RlZmluZSBTU0JfU0RJT19DSVMJCQkweDgwCisjZGVmaW5lICBTU0JfU0RJT19DSVNfU1JPTVJFVgkJMHgwMAorI2RlZmluZSAgU1NCX1NESU9fQ0lTX0lECQkweDAxCisjZGVmaW5lICBTU0JfU0RJT19DSVNfQk9BUkRSRVYJCTB4MDIKKyNkZWZpbmUgIFNTQl9TRElPX0NJU19QQQkJMHgwMworI2RlZmluZSAgIFNTQl9TRElPX0NJU19QQV9QQTBCMF9MTwkwCisjZGVmaW5lICAgU1NCX1NESU9fQ0lTX1BBX1BBMEIwX0hJCTEKKyNkZWZpbmUgICBTU0JfU0RJT19DSVNfUEFfUEEwQjFfTE8JMgorI2RlZmluZSAgIFNTQl9TRElPX0NJU19QQV9QQTBCMV9ISQkzCisjZGVmaW5lICAgU1NCX1NESU9fQ0lTX1BBX1BBMEIyX0xPCTQKKyNkZWZpbmUgICBTU0JfU0RJT19DSVNfUEFfUEEwQjJfSEkJNQorI2RlZmluZSAgIFNTQl9TRElPX0NJU19QQV9JVFNTSQkJNgorI2RlZmluZSAgIFNTQl9TRElPX0NJU19QQV9NQVhQT1cJNworI2RlZmluZSAgU1NCX1NESU9fQ0lTX09FTU5BTUUJCTB4MDQKKyNkZWZpbmUgIFNTQl9TRElPX0NJU19DQ09ERQkJMHgwNQorI2RlZmluZSAgU1NCX1NESU9fQ0lTX0FOVEVOTkEJCTB4MDYKKyNkZWZpbmUgIFNTQl9TRElPX0NJU19BTlRHQUlOCQkweDA3CisjZGVmaW5lICBTU0JfU0RJT19DSVNfQkZMQUdTCQkweDA4CisjZGVmaW5lICBTU0JfU0RJT19DSVNfTEVEUwkJMHgwOQorCisjZGVmaW5lIENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCAgICAgICAgMHgwNAkvKiBzYW1lIGFzIGluIFBDTUNJQSAqLworCisKKy8qCisgKiBGdW5jdGlvbiAxIG1pc2NlbGxhbmVvdXMgcmVnaXN0ZXJzLgorICoKKyAqIERlZmluaXRpb25zIG1hdGNoIHNyYy9pbmNsdWRlL3Nic2Rpby5oIGZyb20gdGhlCisgKiBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIGh0dHA6Ly9hbmRyb2lkLmdpdC5rZXJuZWwub3JnLz9wPXBsYXRmb3JtL3N5c3RlbS93bGFuL2Jyb2FkY29tLmdpdAorICoKKyAqLworI2RlZmluZSBTQlNESU9fRlVOQzFfU0JBRERSTE9XCTB4MTAwMGEJLyogU0IgQWRkcmVzcyB3aW5kb3cgTG93IChiMTUpICovCisjZGVmaW5lIFNCU0RJT19GVU5DMV9TQkFERFJNSUQJMHgxMDAwYgkvKiBTQiBBZGRyZXNzIHdpbmRvdyBNaWQgKGIyMy1iMTYpICovCisjZGVmaW5lIFNCU0RJT19GVU5DMV9TQkFERFJISUdICTB4MTAwMGMJLyogU0IgQWRkcmVzcyB3aW5kb3cgSGlnaCAoYjI0LWIzMSkgKi8KKworLyogdmFsaWQgYml0cyBpbiBTQlNESU9fRlVOQzFfU0JBRERSeHh4IHJlZ3MgKi8KKyNkZWZpbmUgU0JTRElPX1NCQUREUkxPV19NQVNLCTB4ODAJLyogVmFsaWQgYWRkcmVzcyBiaXRzIGluIFNCQUREUkxPVyAqLworI2RlZmluZSBTQlNESU9fU0JBRERSTUlEX01BU0sJMHhmZgkvKiBWYWxpZCBhZGRyZXNzIGJpdHMgaW4gU0JBRERSTUlEICovCisjZGVmaW5lIFNCU0RJT19TQkFERFJISUdIX01BU0sJMHhmZgkvKiBWYWxpZCBhZGRyZXNzIGJpdHMgaW4gU0JBRERSSElHSCAqLworCisjZGVmaW5lIFNCU0RJT19TQl9PRlRfQUREUl9NQVNLCTB4N0ZGRgkvKiBzYiBvZmZzZXQgYWRkciBpcyA8PSAxNSBiaXRzLCAzMmsgKi8KKworLyogUkVWSVNJVDogdGhpcyBmbGFnIGRvZXNuJ3Qgc2VlbSB0byBtYXR0ZXIgKi8KKyNkZWZpbmUgU0JTRElPX1NCX0FDQ0VTU18yXzRCX0ZMQUcJMHg4MDAwCS8qIGZvcmNlcyAzMi1iaXQgU0IgYWNjZXNzICovCisKKworLyoKKyAqIEFkZHJlc3MgbWFwIHdpdGhpbiB0aGUgU0RJTyBmdW5jdGlvbiBhZGRyZXNzIHNwYWNlICgxMjhLKS4KKyAqCisgKiAgIFN0YXJ0ICAgRW5kICAgICBEZXNjcmlwdGlvbgorICogICAtLS0tLS0tIC0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgIDB4MDAwMDAgMHgwZmZmZiBzZWxlY3RlZCBiYWNrcGxhbmUgYWRkcmVzcyB3aW5kb3cgKDY0SykKKyAqICAgMHgxMDAwMCAweDFmZmZmIGJhY2twbGFuZSBjb250cm9sIHJlZ2lzdGVycyAobWF4IDY0SykKKyAqCisgKiBUaGUgY3VycmVudCBhZGRyZXNzIHdpbmRvdyBpcyBjb25maWd1cmVkIGJ5IHdyaXRpbmcgdG8gcmVnaXN0ZXJzCisgKiBTQkFERFJMT1csIFNCQUREUk1JRCBhbmQgU0JBRERSSElHSC4KKyAqCisgKiBJbiBvcmRlciB0byBhY2Nlc3MgdGhlIGNvbnRlbnRzIG9mIGEgMzItYml0IFNpbGljb24gQmFja3BsYW5lIGFkZHJlc3MKKyAqIHRoZSBiYWNrcGxhbmUgYWRkcmVzcyB3aW5kb3cgbXVzdCBiZSBmaXJzdCBsb2FkZWQgd2l0aCB0aGUgaGlnaGVzdAorICogMTYgYml0cyBvZiB0aGUgdGFyZ2V0IGFkZHJlc3MuIFRoZW4sIGFuIGFjY2VzcyBtdXN0IGJlIGRvbmUgdG8gdGhlCisgKiBTRElPIGZ1bmN0aW9uIGFkZHJlc3Mgc3BhY2UgdXNpbmcgdGhlIGxvd2VyIDE1IGJpdHMgb2YgdGhlIGFkZHJlc3MuCisgKiBCaXQgMTUgb2YgdGhlIGFkZHJlc3MgbXVzdCBiZSBzZXQgd2hlbiBkb2luZyAzMiBiaXQgYWNjZXNzZXMuCisgKgorICogMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTAKKyAqIFdXV1dXV1dXV1dXV1dXV1dXICAgICAgICAgICAgICAgICBTQiBBZGRyZXNzIFdpbmRvdworICogICAgICAgICAgICAgICAgIE9PT09PT09PT09PT09PT08gIE9mZnNldCB3aXRoaW4gU0IgQWRkcmVzcyBXaW5kb3cKKyAqICAgICAgICAgICAgICAgICBhICAgICAgICAgICAgICAgICAzMi1iaXQgYWNjZXNzIGZsYWcKKyAqLworCisKKy8qCisgKiBTU0IgSS9PIHZpYSBTRElPLgorICoKKyAqIE5PVEU6IFNESU8gYWRkcmVzcyBAYWRkciBpcyAxNyBiaXRzIGxvbmcgKFNESU8gYWRkcmVzcyBzcGFjZSBpcyAxMjhLKS4KKyAqLworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKnNzYl9zZGlvX2RldihzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQoreworCXJldHVybiAmYnVzLT5ob3N0X3NkaW8tPmRldjsKK30KKworLyogaG9zdCBjbGFpbWVkICovCitzdGF0aWMgaW50IHNzYl9zZGlvX3dyaXRlYihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgYWRkciwgdTggdmFsKQoreworCWludCBlcnJvciA9IDA7CisKKwlzZGlvX3dyaXRlYihidXMtPmhvc3Rfc2RpbywgdmFsLCBhZGRyLCAmZXJyb3IpOworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwOFggPC0gJTAyeCwgZXJyb3IgJWRcbiIsCisJCQlhZGRyLCB2YWwsIGVycm9yKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNpZiAwCitzdGF0aWMgdTggc3NiX3NkaW9fcmVhZGIoc3RydWN0IHNzYl9idXMgKmJ1cywgdW5zaWduZWQgaW50IGFkZHIpCit7CisJdTggdmFsOworCWludCBlcnJvciA9IDA7CisKKwl2YWwgPSBzZGlvX3JlYWRiKGJ1cy0+aG9zdF9zZGlvLCBhZGRyLCAmZXJyb3IpOworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwOFggLT4gJTAyeCwgZXJyb3IgJWRcbiIsCisJCQlhZGRyLCB2YWwsIGVycm9yKTsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorI2VuZGlmCisKKy8qIGhvc3QgY2xhaW1lZCAqLworc3RhdGljIGludCBzc2Jfc2Rpb19zZXRfc2JhZGRyX3dpbmRvdyhzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MzIgYWRkcmVzcykKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHNzYl9zZGlvX3dyaXRlYihidXMsIFNCU0RJT19GVU5DMV9TQkFERFJMT1csCisJCQkJKGFkZHJlc3MgPj4gOCkgJiBTQlNESU9fU0JBRERSTE9XX01BU0spOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBzc2Jfc2Rpb193cml0ZWIoYnVzLCBTQlNESU9fRlVOQzFfU0JBRERSTUlELAorCQkJCShhZGRyZXNzID4+IDE2KSAmIFNCU0RJT19TQkFERFJNSURfTUFTSyk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKwllcnJvciA9IHNzYl9zZGlvX3dyaXRlYihidXMsIFNCU0RJT19GVU5DMV9TQkFERFJISUdILAorCQkJCShhZGRyZXNzID4+IDI0KSAmIFNCU0RJT19TQkFERFJISUdIX01BU0spOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJYnVzLT5zZGlvX3NiYWRkciA9IGFkZHJlc3M7CitvdXQ6CisJaWYgKGVycm9yKSB7CisJCWRldl9kYmcoc3NiX3NkaW9fZGV2KGJ1cyksICJmYWlsZWQgdG8gc2V0IGFkZHJlc3Mgd2luZG93IgorCQkJIiB0byAweCUwOHgsIGVycm9yICVkXG4iLCBhZGRyZXNzLCBlcnJvcik7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCisvKiBmb3IgZW51bWVyYXRpb24gdXNlIG9ubHkgKi8KK3UzMiBzc2Jfc2Rpb19zY2FuX3JlYWQzMihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1MTYgb2Zmc2V0KQoreworCXUzMiB2YWw7CisJaW50IGVycm9yOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwl2YWwgPSBzZGlvX3JlYWRsKGJ1cy0+aG9zdF9zZGlvLCBvZmZzZXQsICZlcnJvcik7CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCA+ICUwOHgsIGVycm9yICVkXG4iLAorCQkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCB2YWwsIGVycm9yKTsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCisvKiBmb3IgZW51bWVyYXRpb24gdXNlIG9ubHkgKi8KK2ludCBzc2Jfc2Rpb19zY2FuX3N3aXRjaF9jb3JlaWR4KHN0cnVjdCBzc2JfYnVzICpidXMsIHU4IGNvcmVpZHgpCit7CisJdTMyIHNiYWRkcjsKKwlpbnQgZXJyb3I7CisKKwlzYmFkZHIgPSAoY29yZWlkeCAqIFNTQl9DT1JFX1NJWkUpICsgU1NCX0VOVU1fQkFTRTsKKwlzZGlvX2NsYWltX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCWVycm9yID0gc3NiX3NkaW9fc2V0X3NiYWRkcl93aW5kb3coYnVzLCBzYmFkZHIpOworCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2Vycihzc2Jfc2Rpb19kZXYoYnVzKSwgImZhaWxlZCB0byBzd2l0Y2ggdG8gY29yZSAldSwiCisJCQkiIGVycm9yICVkXG4iLCBjb3JlaWR4LCBlcnJvcik7CisJCWdvdG8gb3V0OworCX0KK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qIGhvc3QgbXVzdCBiZSBhbHJlYWR5IGNsYWltZWQgKi8KK2ludCBzc2Jfc2Rpb19zd2l0Y2hfY29yZShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KQoreworCXU4IGNvcmVpZHggPSBkZXYtPmNvcmVfaW5kZXg7CisJdTMyIHNiYWRkcjsKKwlpbnQgZXJyb3IgPSAwOworCisJc2JhZGRyID0gKGNvcmVpZHggKiBTU0JfQ09SRV9TSVpFKSArIFNTQl9FTlVNX0JBU0U7CisJaWYgKHVubGlrZWx5KGJ1cy0+c2Rpb19zYmFkZHIgIT0gc2JhZGRyKSkgeworI2lmIFNTQl9WRVJCT1NFX1NESU9DT1JFU1dJVENIX0RFQlVHCisJCWRldl9pbmZvKHNzYl9zZGlvX2RldihidXMpLAorCQkJICAgInN3aXRjaGluZyB0byAlcyBjb3JlLCBpbmRleCAlZFxuIiwKKwkJCSAgIHNzYl9jb3JlX25hbWUoZGV2LT5pZC5jb3JlaWQpLCBjb3JlaWR4KTsKKyNlbmRpZgorCQllcnJvciA9IHNzYl9zZGlvX3NldF9zYmFkZHJfd2luZG93KGJ1cywgc2JhZGRyKTsKKwkJaWYgKGVycm9yKSB7CisJCQlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiZmFpbGVkIHRvIHN3aXRjaCB0byIKKwkJCQkiIGNvcmUgJXUsIGVycm9yICVkXG4iLCBjb3JlaWR4LCBlcnJvcik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlidXMtPm1hcHBlZF9kZXZpY2UgPSBkZXY7CisJfQorCitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdTggc3NiX3NkaW9fcmVhZDgoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJdTggdmFsID0gMHhmZjsKKwlpbnQgZXJyb3IgPSAwOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAodW5saWtlbHkoc3NiX3NkaW9fc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkKKwkJZ290byBvdXQ7CisJb2Zmc2V0IHw9IGJ1cy0+c2Rpb19zYmFkZHIgJiAweGZmZmY7CisJb2Zmc2V0ICY9IFNCU0RJT19TQl9PRlRfQUREUl9NQVNLOworCXZhbCA9IHNkaW9fcmVhZGIoYnVzLT5ob3N0X3NkaW8sIG9mZnNldCwgJmVycm9yKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCA+ICUwMngsIGVycm9yICVkXG4iLAorCQkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCB2YWwsIGVycm9yKTsKKwl9CitvdXQ6CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUxNiBzc2Jfc2Rpb19yZWFkMTYoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJdTE2IHZhbCA9IDB4ZmZmZjsKKwlpbnQgZXJyb3IgPSAwOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAodW5saWtlbHkoc3NiX3NkaW9fc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkKKwkJZ290byBvdXQ7CisJb2Zmc2V0IHw9IGJ1cy0+c2Rpb19zYmFkZHIgJiAweGZmZmY7CisJb2Zmc2V0ICY9IFNCU0RJT19TQl9PRlRfQUREUl9NQVNLOworCXZhbCA9IHNkaW9fcmVhZHcoYnVzLT5ob3N0X3NkaW8sIG9mZnNldCwgJmVycm9yKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCA+ICUwNHgsIGVycm9yICVkXG4iLAorCQkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCB2YWwsIGVycm9yKTsKKwl9CitvdXQ6CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUzMiBzc2Jfc2Rpb19yZWFkMzIoc3RydWN0IHNzYl9kZXZpY2UgKmRldiwgdTE2IG9mZnNldCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJdTMyIHZhbCA9IDB4ZmZmZmZmZmY7CisJaW50IGVycm9yID0gMDsKKworCXNkaW9fY2xhaW1faG9zdChidXMtPmhvc3Rfc2Rpbyk7CisJaWYgKHVubGlrZWx5KHNzYl9zZGlvX3N3aXRjaF9jb3JlKGJ1cywgZGV2KSkpCisJCWdvdG8gb3V0OworCW9mZnNldCB8PSBidXMtPnNkaW9fc2JhZGRyICYgMHhmZmZmOworCW9mZnNldCAmPSBTQlNESU9fU0JfT0ZUX0FERFJfTUFTSzsKKwlvZmZzZXQgfD0gU0JTRElPX1NCX0FDQ0VTU18yXzRCX0ZMQUc7CS8qIDMyIGJpdCBkYXRhIGFjY2VzcyAqLworCXZhbCA9IHNkaW9fcmVhZGwoYnVzLT5ob3N0X3NkaW8sIG9mZnNldCwgJmVycm9yKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCA+ICUwOHgsIGVycm9yICVkXG4iLAorCQkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCB2YWwsIGVycm9yKTsKKwl9CitvdXQ6CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCisJcmV0dXJuIHZhbDsKK30KKworI2lmZGVmIENPTkZJR19TU0JfQkxPQ0tJTworc3RhdGljIHZvaWQgc3NiX3NkaW9fYmxvY2tfcmVhZChzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB2b2lkICpidWZmZXIsCisJCQkJICBzaXplX3QgY291bnQsIHUxNiBvZmZzZXQsIHU4IHJlZ193aWR0aCkKK3sKKwlzaXplX3Qgc2F2ZWRfY291bnQgPSBjb3VudDsKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJaW50IGVycm9yID0gMDsKKworCXNkaW9fY2xhaW1faG9zdChidXMtPmhvc3Rfc2Rpbyk7CisJaWYgKHVubGlrZWx5KHNzYl9zZGlvX3N3aXRjaF9jb3JlKGJ1cywgZGV2KSkpIHsKKwkJZXJyb3IgPSAtRUlPOworCQltZW1zZXQoYnVmZmVyLCAweGZmLCBjb3VudCk7CisJCWdvdG8gZXJyX291dDsKKwl9CisJb2Zmc2V0IHw9IGJ1cy0+c2Rpb19zYmFkZHIgJiAweGZmZmY7CisJb2Zmc2V0ICY9IFNCU0RJT19TQl9PRlRfQUREUl9NQVNLOworCisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIHNpemVvZih1OCk6IHsKKwkJZXJyb3IgPSBzZGlvX3JlYWRzYihidXMtPmhvc3Rfc2RpbywgYnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKKwkJYnJlYWs7CisJfQorCWNhc2Ugc2l6ZW9mKHUxNik6IHsKKwkJU1NCX1dBUk5fT04oY291bnQgJiAxKTsKKwkJZXJyb3IgPSBzZGlvX3JlYWRzYihidXMtPmhvc3Rfc2RpbywgYnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKKwkJYnJlYWs7CisJfQorCWNhc2Ugc2l6ZW9mKHUzMik6IHsKKwkJU1NCX1dBUk5fT04oY291bnQgJiAzKTsKKwkJb2Zmc2V0IHw9IFNCU0RJT19TQl9BQ0NFU1NfMl80Ql9GTEFHOwkvKiAzMiBiaXQgZGF0YSBhY2Nlc3MgKi8KKwkJZXJyb3IgPSBzZGlvX3JlYWRzYihidXMtPmhvc3Rfc2RpbywgYnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCVNTQl9XQVJOX09OKDEpOworCX0KKwlpZiAoIWVycm9yKQorCQlnb3RvIG91dDsKKworZXJyX291dDoKKwlkZXZfZGJnKHNzYl9zZGlvX2RldihidXMpLCAiJTA0WDolMDRYICh3aWR0aD0ldSwgbGVuPSV1KSwgZXJyb3IgJWRcbiIsCisJCWJ1cy0+c2Rpb19zYmFkZHIgPj4gMTYsIG9mZnNldCwgcmVnX3dpZHRoLCBzYXZlZF9jb3VudCwgZXJyb3IpOworb3V0OgorCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1NCX0JMT0NLSU8gKi8KKworc3RhdGljIHZvaWQgc3NiX3NkaW9fd3JpdGU4KHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHU4IHZhbCkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJaW50IGVycm9yID0gMDsKKworCXNkaW9fY2xhaW1faG9zdChidXMtPmhvc3Rfc2Rpbyk7CisJaWYgKHVubGlrZWx5KHNzYl9zZGlvX3N3aXRjaF9jb3JlKGJ1cywgZGV2KSkpCisJCWdvdG8gb3V0OworCW9mZnNldCB8PSBidXMtPnNkaW9fc2JhZGRyICYgMHhmZmZmOworCW9mZnNldCAmPSBTQlNESU9fU0JfT0ZUX0FERFJfTUFTSzsKKwlzZGlvX3dyaXRlYihidXMtPmhvc3Rfc2RpbywgdmFsLCBvZmZzZXQsICZlcnJvcik7CisJaWYgKGVycm9yKSB7CisJCWRldl9kYmcoc3NiX3NkaW9fZGV2KGJ1cyksICIlMDRYOiUwNFggPCAlMDJ4LCBlcnJvciAlZFxuIiwKKwkJCWJ1cy0+c2Rpb19zYmFkZHIgPj4gMTYsIG9mZnNldCwgdmFsLCBlcnJvcik7CisJfQorb3V0OgorCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKK30KKworc3RhdGljIHZvaWQgc3NiX3NkaW9fd3JpdGUxNihzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2LCB1MTYgb2Zmc2V0LCB1MTYgdmFsKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmJ1czsKKwlpbnQgZXJyb3IgPSAwOworCisJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+aG9zdF9zZGlvKTsKKwlpZiAodW5saWtlbHkoc3NiX3NkaW9fc3dpdGNoX2NvcmUoYnVzLCBkZXYpKSkKKwkJZ290byBvdXQ7CisJb2Zmc2V0IHw9IGJ1cy0+c2Rpb19zYmFkZHIgJiAweGZmZmY7CisJb2Zmc2V0ICY9IFNCU0RJT19TQl9PRlRfQUREUl9NQVNLOworCXNkaW9fd3JpdGV3KGJ1cy0+aG9zdF9zZGlvLCB2YWwsIG9mZnNldCwgJmVycm9yKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2RiZyhzc2Jfc2Rpb19kZXYoYnVzKSwgIiUwNFg6JTA0WCA8ICUwNHgsIGVycm9yICVkXG4iLAorCQkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCB2YWwsIGVycm9yKTsKKwl9CitvdXQ6CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworfQorCitzdGF0aWMgdm9pZCBzc2Jfc2Rpb193cml0ZTMyKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIHUzMiB2YWwpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+YnVzOworCWludCBlcnJvciA9IDA7CisKKwlzZGlvX2NsYWltX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworCWlmICh1bmxpa2VseShzc2Jfc2Rpb19zd2l0Y2hfY29yZShidXMsIGRldikpKQorCQlnb3RvIG91dDsKKwlvZmZzZXQgfD0gYnVzLT5zZGlvX3NiYWRkciAmIDB4ZmZmZjsKKwlvZmZzZXQgJj0gU0JTRElPX1NCX09GVF9BRERSX01BU0s7CisJb2Zmc2V0IHw9IFNCU0RJT19TQl9BQ0NFU1NfMl80Ql9GTEFHOwkvKiAzMiBiaXQgZGF0YSBhY2Nlc3MgKi8KKwlzZGlvX3dyaXRlbChidXMtPmhvc3Rfc2RpbywgdmFsLCBvZmZzZXQsICZlcnJvcik7CisJaWYgKGVycm9yKSB7CisJCWRldl9kYmcoc3NiX3NkaW9fZGV2KGJ1cyksICIlMDRYOiUwNFggPCAlMDh4LCBlcnJvciAlZFxuIiwKKwkJCWJ1cy0+c2Rpb19zYmFkZHIgPj4gMTYsIG9mZnNldCwgdmFsLCBlcnJvcik7CisJfQorCWlmIChidXMtPnF1aXJrcyAmIFNTQl9RVUlSS19TRElPX1JFQURfQUZURVJfV1JJVEUzMikKKwkJc2Rpb19yZWFkbChidXMtPmhvc3Rfc2RpbywgMCwgJmVycm9yKTsKK291dDoKKwlzZGlvX3JlbGVhc2VfaG9zdChidXMtPmhvc3Rfc2Rpbyk7Cit9CisKKyNpZmRlZiBDT05GSUdfU1NCX0JMT0NLSU8KK3N0YXRpYyB2b2lkIHNzYl9zZGlvX2Jsb2NrX3dyaXRlKHN0cnVjdCBzc2JfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkgICBzaXplX3QgY291bnQsIHUxNiBvZmZzZXQsIHU4IHJlZ193aWR0aCkKK3sKKwlzaXplX3Qgc2F2ZWRfY291bnQgPSBjb3VudDsKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5idXM7CisJaW50IGVycm9yID0gMDsKKworCXNkaW9fY2xhaW1faG9zdChidXMtPmhvc3Rfc2Rpbyk7CisJaWYgKHVubGlrZWx5KHNzYl9zZGlvX3N3aXRjaF9jb3JlKGJ1cywgZGV2KSkpIHsKKwkJZXJyb3IgPSAtRUlPOworCQltZW1zZXQoKHZvaWQgKilidWZmZXIsIDB4ZmYsIGNvdW50KTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlvZmZzZXQgfD0gYnVzLT5zZGlvX3NiYWRkciAmIDB4ZmZmZjsKKwlvZmZzZXQgJj0gU0JTRElPX1NCX09GVF9BRERSX01BU0s7CisKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2Ugc2l6ZW9mKHU4KToKKwkJZXJyb3IgPSBzZGlvX3dyaXRlc2IoYnVzLT5ob3N0X3NkaW8sIG9mZnNldCwKKwkJCQkgICAgICh2b2lkICopYnVmZmVyLCBjb3VudCk7CisJCWJyZWFrOworCWNhc2Ugc2l6ZW9mKHUxNik6CisJCVNTQl9XQVJOX09OKGNvdW50ICYgMSk7CisJCWVycm9yID0gc2Rpb193cml0ZXNiKGJ1cy0+aG9zdF9zZGlvLCBvZmZzZXQsCisJCQkJICAgICAodm9pZCAqKWJ1ZmZlciwgY291bnQpOworCQlicmVhazsKKwljYXNlIHNpemVvZih1MzIpOgorCQlTU0JfV0FSTl9PTihjb3VudCAmIDMpOworCQlvZmZzZXQgfD0gU0JTRElPX1NCX0FDQ0VTU18yXzRCX0ZMQUc7CS8qIDMyIGJpdCBkYXRhIGFjY2VzcyAqLworCQllcnJvciA9IHNkaW9fd3JpdGVzYihidXMtPmhvc3Rfc2Rpbywgb2Zmc2V0LAorCQkJCSAgICAgKHZvaWQgKilidWZmZXIsIGNvdW50KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQorCWlmICghZXJyb3IpCisJCWdvdG8gb3V0OworCitlcnJfb3V0OgorCWRldl9kYmcoc3NiX3NkaW9fZGV2KGJ1cyksICIlMDRYOiUwNFggKHdpZHRoPSV1LCBsZW49JXUpLCBlcnJvciAlZFxuIiwKKwkJYnVzLT5zZGlvX3NiYWRkciA+PiAxNiwgb2Zmc2V0LCByZWdfd2lkdGgsIHNhdmVkX2NvdW50LCBlcnJvcik7CitvdXQ6CisJc2Rpb19yZWxlYXNlX2hvc3QoYnVzLT5ob3N0X3NkaW8pOworfQorCisjZW5kaWYgLyogQ09ORklHX1NTQl9CTE9DS0lPICovCisKKy8qIE5vdCAic3RhdGljIiwgYXMgaXQncyB1c2VkIGluIG1haW4uYyAqLworY29uc3Qgc3RydWN0IHNzYl9idXNfb3BzIHNzYl9zZGlvX29wcyA9IHsKKwkucmVhZDgJCT0gc3NiX3NkaW9fcmVhZDgsCisJLnJlYWQxNgkJPSBzc2Jfc2Rpb19yZWFkMTYsCisJLnJlYWQzMgkJPSBzc2Jfc2Rpb19yZWFkMzIsCisJLndyaXRlOAkJPSBzc2Jfc2Rpb193cml0ZTgsCisJLndyaXRlMTYJPSBzc2Jfc2Rpb193cml0ZTE2LAorCS53cml0ZTMyCT0gc3NiX3NkaW9fd3JpdGUzMiwKKyNpZmRlZiBDT05GSUdfU1NCX0JMT0NLSU8KKwkuYmxvY2tfcmVhZAk9IHNzYl9zZGlvX2Jsb2NrX3JlYWQsCisJLmJsb2NrX3dyaXRlCT0gc3NiX3NkaW9fYmxvY2tfd3JpdGUsCisjZW5kaWYKK307CisKKyNkZWZpbmUgR09UT19FUlJPUl9PTihjb25kaXRpb24sIGRlc2NyaXB0aW9uKSBkbyB7CVwKKwlpZiAodW5saWtlbHkoY29uZGl0aW9uKSkgewkJCVwKKwkJZXJyb3JfZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsJXAorCQlnb3RvIGVycm9yOwkJCQlcCisJfQkJCQkJCVwKKyAgfSB3aGlsZSAoMCkKKworaW50IHNzYl9zZGlvX2dldF9pbnZhcmlhbnRzKHN0cnVjdCBzc2JfYnVzICpidXMsCisJCQkgICAgc3RydWN0IHNzYl9pbml0X2ludmFyaWFudHMgKml2KQoreworCXN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tID0gJml2LT5zcHJvbTsKKwlzdHJ1Y3Qgc3NiX2JvYXJkaW5mbyAqYmkgPSAmaXYtPmJvYXJkaW5mbzsKKwljb25zdCBjaGFyICplcnJvcl9kZXNjcmlwdGlvbiA9ICJub25lIjsKKwlzdHJ1Y3Qgc2Rpb19mdW5jX3R1cGxlICp0dXBsZTsKKwl2b2lkICptYWM7CisKKwltZW1zZXQoc3Byb20sIDB4RkYsIHNpemVvZigqc3Byb20pKTsKKwlzcHJvbS0+Ym9hcmRmbGFnc19sbyA9IDA7CisJc3Byb20tPmJvYXJkZmxhZ3NfaGkgPSAwOworCisJdHVwbGUgPSBidXMtPmhvc3Rfc2Rpby0+dHVwbGVzOworCXdoaWxlICh0dXBsZSkgeworCQlzd2l0Y2ggKHR1cGxlLT5jb2RlKSB7CisJCWNhc2UgMHgyMjogLyogZXh0ZW5kZWQgZnVuY3Rpb24gKi8KKwkJCXN3aXRjaCAodHVwbGUtPmRhdGFbMF0pIHsKKwkJCWNhc2UgQ0lTVFBMX0ZVTkNFX0xBTl9OT0RFX0lEOgorCQkJCUdPVE9fRVJST1JfT04oKHR1cGxlLT5zaXplICE9IDcpICYmCisJCQkJCSAgICAgICh0dXBsZS0+ZGF0YVsxXSAhPSA2KSwKKwkJCQkJICAgICAgIm1hYyB0cGwgc2l6ZSIpOworCQkJCS8qIGZldGNoIHRoZSBNQUMgYWRkcmVzcy4gKi8KKwkJCQltYWMgPSB0dXBsZS0+ZGF0YSArIDI7CisJCQkJbWVtY3B5KHNwcm9tLT5pbDBtYWMsIG1hYywgRVRIX0FMRU4pOworCQkJCW1lbWNweShzcHJvbS0+ZXQxbWFjLCBtYWMsIEVUSF9BTEVOKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAweDgwOiAvKiB2ZW5kb3Igc3BlY2lmaWMgdHVwbGUgKi8KKwkJCXN3aXRjaCAodHVwbGUtPmRhdGFbMF0pIHsKKwkJCWNhc2UgU1NCX1NESU9fQ0lTX1NST01SRVY6CisJCQkJR09UT19FUlJPUl9PTih0dXBsZS0+c2l6ZSAhPSAyLAorCQkJCQkgICAgICAic3JvbXJldiB0cGwgc2l6ZSIpOworCQkJCXNwcm9tLT5yZXZpc2lvbiA9IHR1cGxlLT5kYXRhWzFdOworCQkJCWJyZWFrOworCQkJY2FzZSBTU0JfU0RJT19DSVNfSUQ6CisJCQkJR09UT19FUlJPUl9PTigodHVwbGUtPnNpemUgIT0gNSkgJiYKKwkJCQkJICAgICAgKHR1cGxlLT5zaXplICE9IDcpLAorCQkJCQkgICAgICAiaWQgdHBsIHNpemUiKTsKKwkJCQliaS0+dmVuZG9yID0gdHVwbGUtPmRhdGFbMV0gfAorCQkJCQkgICAgICh0dXBsZS0+ZGF0YVsyXTw8OCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19CT0FSRFJFVjoKKwkJCQlHT1RPX0VSUk9SX09OKHR1cGxlLT5zaXplICE9IDIsCisJCQkJCSAgICAgICJib2FyZHJldiB0cGwgc2l6ZSIpOworCQkJCXNwcm9tLT5ib2FyZF9yZXYgPSB0dXBsZS0+ZGF0YVsxXTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1NCX1NESU9fQ0lTX1BBOgorCQkJCUdPVE9fRVJST1JfT04oKHR1cGxlLT5zaXplICE9IDkpICYmCisJCQkJCSAgICAgICh0dXBsZS0+c2l6ZSAhPSAxMCksCisJCQkJCSAgICAgICJwYSB0cGwgc2l6ZSIpOworCQkJCXNwcm9tLT5wYTBiMCA9IHR1cGxlLT5kYXRhWzFdIHwKKwkJCQkJICgodTE2KXR1cGxlLT5kYXRhWzJdIDw8IDgpOworCQkJCXNwcm9tLT5wYTBiMSA9IHR1cGxlLT5kYXRhWzNdIHwKKwkJCQkJICgodTE2KXR1cGxlLT5kYXRhWzRdIDw8IDgpOworCQkJCXNwcm9tLT5wYTBiMiA9IHR1cGxlLT5kYXRhWzVdIHwKKwkJCQkJICgodTE2KXR1cGxlLT5kYXRhWzZdIDw8IDgpOworCQkJCXNwcm9tLT5pdHNzaV9hID0gdHVwbGUtPmRhdGFbN107CisJCQkJc3Byb20tPml0c3NpX2JnID0gdHVwbGUtPmRhdGFbN107CisJCQkJc3Byb20tPm1heHB3cl9hID0gdHVwbGUtPmRhdGFbOF07CisJCQkJc3Byb20tPm1heHB3cl9iZyA9IHR1cGxlLT5kYXRhWzhdOworCQkJCWJyZWFrOworCQkJY2FzZSBTU0JfU0RJT19DSVNfT0VNTkFNRToKKwkJCQkvKiBOb3QgcHJlc2VudCAqLworCQkJCWJyZWFrOworCQkJY2FzZSBTU0JfU0RJT19DSVNfQ0NPREU6CisJCQkJR09UT19FUlJPUl9PTih0dXBsZS0+c2l6ZSAhPSAyLAorCQkJCQkgICAgICAiY2NvZGUgdHBsIHNpemUiKTsKKwkJCQlzcHJvbS0+Y291bnRyeV9jb2RlID0gdHVwbGUtPmRhdGFbMV07CisJCQkJYnJlYWs7CisJCQljYXNlIFNTQl9TRElPX0NJU19BTlRFTk5BOgorCQkJCUdPVE9fRVJST1JfT04odHVwbGUtPnNpemUgIT0gMiwKKwkJCQkJICAgICAgImFudCB0cGwgc2l6ZSIpOworCQkJCXNwcm9tLT5hbnRfYXZhaWxhYmxlX2EgPSB0dXBsZS0+ZGF0YVsxXTsKKwkJCQlzcHJvbS0+YW50X2F2YWlsYWJsZV9iZyA9IHR1cGxlLT5kYXRhWzFdOworCQkJCWJyZWFrOworCQkJY2FzZSBTU0JfU0RJT19DSVNfQU5UR0FJTjoKKwkJCQlHT1RPX0VSUk9SX09OKHR1cGxlLT5zaXplICE9IDIsCisJCQkJCSAgICAgICJhbnRnIHRwbCBzaXplIik7CisJCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMCA9IHR1cGxlLT5kYXRhWzFdOworCQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6MjQuYTEgPSB0dXBsZS0+ZGF0YVsxXTsKKwkJCQlzcHJvbS0+YW50ZW5uYV9nYWluLmdoejI0LmEyID0gdHVwbGUtPmRhdGFbMV07CisJCQkJc3Byb20tPmFudGVubmFfZ2Fpbi5naHoyNC5hMyA9IHR1cGxlLT5kYXRhWzFdOworCQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMCA9IHR1cGxlLT5kYXRhWzFdOworCQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMSA9IHR1cGxlLT5kYXRhWzFdOworCQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMiA9IHR1cGxlLT5kYXRhWzFdOworCQkJCXNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NS5hMyA9IHR1cGxlLT5kYXRhWzFdOworCQkJCWJyZWFrOworCQkJY2FzZSBTU0JfU0RJT19DSVNfQkZMQUdTOgorCQkJCUdPVE9fRVJST1JfT04oKHR1cGxlLT5zaXplICE9IDMpICYmCisJCQkJCSAgICAgICh0dXBsZS0+c2l6ZSAhPSA1KSwKKwkJCQkJICAgICAgImJmbCB0cGwgc2l6ZSIpOworCQkJCXNwcm9tLT5ib2FyZGZsYWdzX2xvID0gdHVwbGUtPmRhdGFbMV0gfAorCQkJCQkJICgodTE2KXR1cGxlLT5kYXRhWzJdIDw8IDgpOworCQkJCWJyZWFrOworCQkJY2FzZSBTU0JfU0RJT19DSVNfTEVEUzoKKwkJCQlHT1RPX0VSUk9SX09OKHR1cGxlLT5zaXplICE9IDUsCisJCQkJCSAgICAgICJsZWRzIHRwbCBzaXplIik7CisJCQkJc3Byb20tPmdwaW8wID0gdHVwbGUtPmRhdGFbMV07CisJCQkJc3Byb20tPmdwaW8xID0gdHVwbGUtPmRhdGFbMl07CisJCQkJc3Byb20tPmdwaW8yID0gdHVwbGUtPmRhdGFbM107CisJCQkJc3Byb20tPmdwaW8zID0gdHVwbGUtPmRhdGFbNF07CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQl0dXBsZSA9IHR1cGxlLT5uZXh0OworCX0KKworCXJldHVybiAwOworZXJyb3I6CisJZGV2X2Vycihzc2Jfc2Rpb19kZXYoYnVzKSwgImZhaWxlZCB0byBmZXRjaCBkZXZpY2UgaW52YXJpYW50czogJXNcbiIsCisJCWVycm9yX2Rlc2NyaXB0aW9uKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKwordm9pZCBzc2Jfc2Rpb19leGl0KHN0cnVjdCBzc2JfYnVzICpidXMpCit7CisJaWYgKGJ1cy0+YnVzdHlwZSAhPSBTU0JfQlVTVFlQRV9TRElPKQorCQlyZXR1cm47CisJLyogTm90aGluZyB0byBkbyBoZXJlLiAqLworfQorCitpbnQgc3NiX3NkaW9faW5pdChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQoreworCWlmIChidXMtPmJ1c3R5cGUgIT0gU1NCX0JVU1RZUEVfU0RJTykKKwkJcmV0dXJuIDA7CisKKwlidXMtPnNkaW9fc2JhZGRyID0gfjA7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmggYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCmluZGV4IDU3ZmE0ODIuLjI1NDMzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaApAQCAtMTE0LDYgKzExNCw0NiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TU0JfUENNQ0lBSE9TVCAqLwogCisvKiBzZGlvLmMgKi8KKyNpZmRlZiBDT05GSUdfU1NCX1NESU9IT1NUCitleHRlcm4gaW50IHNzYl9zZGlvX2dldF9pbnZhcmlhbnRzKHN0cnVjdCBzc2JfYnVzICpidXMsCisJCQkJICAgICBzdHJ1Y3Qgc3NiX2luaXRfaW52YXJpYW50cyAqaXYpOworCitleHRlcm4gdTMyIHNzYl9zZGlvX3NjYW5fcmVhZDMyKHN0cnVjdCBzc2JfYnVzICpidXMsIHUxNiBvZmZzZXQpOworZXh0ZXJuIGludCBzc2Jfc2Rpb19zd2l0Y2hfY29yZShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBzdHJ1Y3Qgc3NiX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgc3NiX3NkaW9fc2Nhbl9zd2l0Y2hfY29yZWlkeChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCB1OCBjb3JlaWR4KTsKK2V4dGVybiBpbnQgc3NiX3NkaW9faGFyZHdhcmVfc2V0dXAoc3RydWN0IHNzYl9idXMgKmJ1cyk7CitleHRlcm4gdm9pZCBzc2Jfc2Rpb19leGl0KHN0cnVjdCBzc2JfYnVzICpidXMpOworZXh0ZXJuIGludCBzc2Jfc2Rpb19pbml0KHN0cnVjdCBzc2JfYnVzICpidXMpOworCitleHRlcm4gY29uc3Qgc3RydWN0IHNzYl9idXNfb3BzIHNzYl9zZGlvX29wczsKKyNlbHNlIC8qIENPTkZJR19TU0JfU0RJT0hPU1QgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHNzYl9zZGlvX3NjYW5fcmVhZDMyKHN0cnVjdCBzc2JfYnVzICpidXMsIHUxNiBvZmZzZXQpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBzc2Jfc2Rpb19zd2l0Y2hfY29yZShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAorCQkJCQkgc3RydWN0IHNzYl9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNzYl9zZGlvX3NjYW5fc3dpdGNoX2NvcmVpZHgoc3RydWN0IHNzYl9idXMgKmJ1cywgdTggY29yZWlkeCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHNzYl9zZGlvX2hhcmR3YXJlX3NldHVwKHN0cnVjdCBzc2JfYnVzICpidXMpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgc3NiX3NkaW9fZXhpdChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQoreworfQorc3RhdGljIGlubGluZSBpbnQgc3NiX3NkaW9faW5pdChzdHJ1Y3Qgc3NiX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TU0JfU0RJT0hPU1QgKi8KKwogCiAvKiBzY2FuLmMgKi8KIGV4dGVybiBjb25zdCBjaGFyICpzc2JfY29yZV9uYW1lKHUxNiBjb3JlaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jCmluZGV4IDBlMDM0MDguLjQyZGI0MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKQEAgLTM4NCw3ICszODQsOCBAQAogLyoJCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhLCAiUlggRyIpOyAqLwogCQl9IGVsc2UKIAkJCWFnbnhfYnVnKCJVbmtub3duIHBhY2tldHMgdHlwZSIpOwotCQlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgc2tiLCAmc3RhdHVzKTsKKwkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7CisJCWllZWU4MDIxMV9yeF9pcnFzYWZlKHByaXYtPmh3LCBza2IpOwogCQlyeF9kZXNjX3JlaW5pdChwcml2LCBpKTsKIAogCX0gd2hpbGUgKHByaXYtPnJ4LmlkeCsrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9hdDc2X3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKaW5kZXggM2YzMDNhZS4uYzE2NWM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMKQEAgLTMxMzQsNyArMzEzNCw3IEBACiAJCSAgICAgICBuZXRkZXYtPm5hbWUsIF9fZnVuY19fKTsKIAkJLyogc2tpcCB0aGlzIHBhY2tldCAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCWlmIChwcml2LT50eF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKQEAgLTMxNDIsMTQgKzMxNDIsMTQgQEAKIAkJICAgICAgIG5ldGRldi0+bmFtZSwgX19mdW5jX18pOwogCQkvKiBza2lwIHRoaXMgcGFja2V0ICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCiAJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHNrYiB0b28gc2hvcnQgKCVkKVxuIiwKIAkJICAgICAgIG5ldGRldi0+bmFtZSwgX19mdW5jX18sIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlhdDc2X2xlZHRyaWdfdHhfYWN0aXZpdHkoKTsJLyogdGVsbCBsZWR0cmlnZ2VyIHdlIHNlbmQgYSBwYWNrZXQgKi8KQEAgLTMxNzMsNyArMzE3Myw3IEBACiAJCQkgICAgICAgc2tiLT5kYXRhW0VUSF9ITEVOICsgMV0sCiAJCQkgICAgICAgc2tiLT5kYXRhW0VUSF9ITEVOICsgMl0pOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogYWRkIFJGQyAxMDQyIGhlYWRlciBpbiBmcm9udCAqLwpAQCAtMzM5Niw3ICszMzk2LDcgQEAKIAlyZXR1cm4gcHJpdi0+bWFjX3N0YXRlID09IE1BQ19DT05ORUNURUQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXQ3Nl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYXQ3Nl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBhdDc2X2V0aHRvb2xfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rID0gYXQ3Nl9ldGh0b29sX2dldF9saW5rLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwppbmRleCBmYWQyNWI3Li5hYzg1NzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCkBAIC0xMTIsOCArMTEyLDkgQEAKIAkJICogSSB3b3JrZWQgd2l0aC4KIAkJICoKIAkJICogRW1wdHkgYmFycmllcnMgYXJlIG5vdCBhbGxvd2VkIGFueXdheSwgc2VlIDUxZmQ3N2JkOWY1MTIKLQkJICogZm9yIGV4YW1wbGUsIGFsdGhvdWdoIGxhdGVyIGl0IHdhcyBjaGFuZ2VkIHRvIGJpb19kaXNjYXJkKCkKLQkJICogb25seSwgd2hpY2ggZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2UuCisJCSAqIGZvciBleGFtcGxlLCBhbHRob3VnaCBsYXRlciBpdCB3YXMgY2hhbmdlZCB0bworCQkgKiBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19ESVNDQVJEKSBvbmx5LCB3aGljaCBkb2VzIG5vdAorCQkgKiB3b3JrIGluIHRoaXMgY2FzZS4KIAkJICovCiAJCS8vZXJyID0gLUVPUE5PVFNVUFA7CiAJCWVyciA9IDA7CkBAIC04NDYsMTAgKzg0Nyw5IEBACiAvKgogICogQ29uZmlndXJhdGlvbiBwYXJzZXIuCiAgKi8KLXN0YXRpYyB2b2lkIGNuX2RzdF9jYWxsYmFjayh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgY25fZHN0X2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZykKIHsKIAlzdHJ1Y3QgZHN0X2N0bCAqY3RsOwotCXN0cnVjdCBjbl9tc2cgKm1zZyA9IGRhdGE7CiAJaW50IGVycjsKIAlzdHJ1Y3QgZHN0X2N0bF9hY2sgYWNrOwogCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IE5VTEwsICp0bXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMKaW5kZXggMDc3NzI0YS4uN2I3Y2NlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9WaXJ0dWFsRXRoZXJuZXRMaW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvVmlydHVhbEV0aGVybmV0TGludXguYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAJfQogCiAgICAgICBFeGl0OgotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiAKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC1tZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwppbmRleCA5M2NhYjBhLi40MjIzMGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHMgPSB7CitzdHJ1Y3QgY29uc3QgZXRodG9vbF9vcHMgY3ZtX29jdF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBjdm1fb2N0X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBjdm1fb2N0X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gY3ZtX29jdF9zZXRfc2V0dGluZ3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LW1kaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCmluZGV4IDYzMTQxNDEuLmIzMzI4YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQtbWRpby5oCkBAIC00MSw2ICs0MSw2IEBACiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KICNlbmRpZiAvKiBDT05GSUdfWEZSTSAqLwogCi1leHRlcm4gc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGN2bV9vY3RfZXRodG9vbF9vcHM7CiBpbnQgY3ZtX29jdF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIGludCBjdm1fb2N0X21kaW9fc2V0dXBfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvdXNiZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwppbmRleCA1NDBjYmJiLi43Y2Q4N2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwpAQCAtNjU5LDcgKzY1OSw3IEBACiAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAKQEAgLTc5NiwxMyArNzk2LDEzIEBACiAgICAgaWYgKHZhcElkID49IFpNX1ZBUF9QT1JUX05VTUJFUikKICAgICB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogICAgIH0KICNpZiAxCiAgICAgaWYgKHZhcFt2YXBJZF0ub3BlbkZsYWcgPT0gMCkKICAgICB7CiAgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTkVUREVWX1RYX09LOwogICAgIH0KICNlbmRpZgogCkBAIC04MTksNyArODE5LDcgQEAKICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmFwX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3BrdC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9wa3QuYwppbmRleCA1ZGIwMDA0Li44OWE2YjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3BrdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfcGt0LmMKQEAgLTE1NiwxMCArMTU2LDcgQEAKICAgICBzd2l0Y2gobmV0aWZfcngoYnVmKSkKICNlbmRpZgogICAgIHsKLSAgICBjYXNlIE5FVF9SWF9CQUQ6CiAgICAgY2FzZSBORVRfUlhfRFJPUDoKLSAgICBjYXNlIE5FVF9SWF9DTl9NT0Q6Ci0gICAgY2FzZSBORVRfUlhfQ05fSElHSDoKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIG1hY3AtPmRydl9zdGF0cy5uZXRfc3RhdHMucnhfcGFja2V0cysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwppbmRleCBlNjNjOWJlLi5kMDA0YTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwpAQCAtOTIxLDE2ICs5MjEsMTYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9vdXRfdW5sb2NrOwogCi0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soJmtpb2NiLCAmaW92LCAxLCBwb3MpOworCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZSgma2lvY2IsICZpb3YsIDEsICZraW9jYi5raV9wb3MpOwogCSpwcG9zID0ga2lvY2Iua2lfcG9zOwogCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJV0FSTl9PTihyZXQgPCAwKTsKIAotCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7CisJaWYgKHJldCA+IDApIHsKIAkJc3NpemVfdCBlcnI7CiAKLQkJZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7CisJCWVyciA9IGdlbmVyaWNfd3JpdGVfc3luYyhmaWxlLCBwb3MsIHJldCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0ID0gZXJyOwogCQlXQVJOX09OKHJldCA8IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCmluZGV4IGYyOThiOWIuLjM1YzU5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKQEAgLTg2Miw3ICs4NjIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gc2tiLT5kZXY7CiAJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OwotCWludCBzdGF0dXMgPSAwOworCWludCBzdGF0dXMgPSBORVRERVZfVFhfT0s7CiAJUE5ESVNfUEFDS0VUIHBQYWNrZXQgPSAoUE5ESVNfUEFDS0VUKSBza2I7CiAKIAl7CkBAIC04OTIsNyArODkyLDcgQEAKIAogCVNUQVNlbmRQYWNrZXRzKChORElTX0hBTkRMRSlwQWQsIChQUE5ESVNfUEFDS0VUKSAmcFBhY2tldCwgMSk7CiAKLQlzdGF0dXMgPSAwOworCXN0YXR1cyA9IE5FVERFVl9UWF9PSzsKIGRvbmU6CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtOTIzLDcgKzkyMyw3IEBACiAJaWYgKCEobmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKQogCXsKIAkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIChQTkRJU19QQUNLRVQpc2tiX3AsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZza2JfcC0+Y2JbQ0JfT0ZGXSwgMTUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCAxMjk0ZTA1Li4xYjc3NDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtODAyLDEzICs4MDIsMTMgQEAKIAkJCWlmICgoKmllZWUtPmhhcmRfc3RhcnRfeG1pdCkodHhiLCBkZXYpID09IDApIHsKIAkJCQlzdGF0cy0+dHhfcGFja2V0cysrOwogCQkJCXN0YXRzLT50eF9ieXRlcyArPSB0eGItPnBheWxvYWRfc2l6ZTsKLQkJCQlyZXR1cm4gMDsKKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQkJfQogCQkJaWVlZTgwMjExX3R4Yl9mcmVlKHR4Yik7CiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgZmFpbGVkOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKaW5kZXggN2UyZmVjYS4uMjZhNTkxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMKQEAgLTMwNDAsNyArMzA0MCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAogCXJ0bDgxODBfdHgoZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBwcmlvcml0eSwKQEAgLTMwNTEsNyArMzA1MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8vIGxvbmdwcmUgMTQ0KzQ4IHNob3J0cHJlIDcyKzI0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKaW5kZXggZWQ0N2RiNS4uYjAxYTI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpAQCAtODQ1LDcgKzg0NSw3IEBACiAJCQkJIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7CiAJfQogeG1pdF9kb25lOgotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB4bWl0X2ZhaWw6CiAJc2xpY194bWl0X2ZhaWwoYWRhcHRlciwgc2tiLCBvZmZsb2FkY21kLCBza2J0eXBlLCBzdGF0dXMpOwogCWdvdG8geG1pdF9kb25lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwppbmRleCBhMTM3Yzc4Li4xMmQ0MTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYwpAQCAtMTQyOSw3ICsxNDI5LDggQEAKIAlzdGxjNDV4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IGRhdGEgMHglcCAlZCBCIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJc3RsYzQ1eHhfZHVtcChERUJVR19SWF9DT05URU5ULCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAotCWllZWU4MDIxMV9yeChzdGxjLT5odywgc2tiLCAmc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKwlpZWVlODAyMTFfcngoc3RsYy0+aHcsIHNrYik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmggYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCmluZGV4IGYwN2FhNzAuLjExMDA5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaApAQCAtNzgyLDYgKzc4Miw2IEBACiAjZGVmaW5lIFNJT0NTTElDU0VUSU5UQUdHICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrMTApCiAjZGVmaW5lIFNJT0NTTElDVFJBQ0VEVU1QICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrMTEpCiAKLWV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wczsKICNkZWZpbmUgU1hHX0NPTVBMRVRFX1NMT1dfU0VORF9MSU1JVAkxMjgKICNlbmRpZiAvKiAgX19TWEdfRFJJVkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfZXRodG9vbC5jIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfZXRodG9vbC5jCmluZGV4IGFkODljYjguLmY1YTA3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19ldGh0b29sLmMKQEAgLTMwMCw3ICszMDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZXRodG9vbF9vcHMgc3hnX25pY19ldGh0b29sX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzeGdfbmljX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBzeGdfbmljX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gc3hnX25pY19zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gc3hnX25pY19nZXRfZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKaW5kZXggM2U4Y2YwOC4uYjkwNWU3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMKQEAgLTQwLDcgKzQwLDggQEAKIAlyeF9zdGF0dXMucGh5bW9kZSA9IE1PREVfSUVFRTgwMjExQjsKICovCiAKLQlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiLCAmcnhfc3RhdHVzKTsKKwltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTsKKwlpZWVlODAyMTFfcnhfaXJxc2FmZShodywgc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgV2IzNVJ4X2FkanVzdChQREVTQ1JJUFRPUiBwUnhEZXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCmluZGV4IDkwZjQ5OWUuLmMyNzNjMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAlwODAyMTFfbWV0YXdlcF90IHA4MDIxMV93ZXA7CiAKIAlpZiAoc2tiID09IE5VTEwpCi0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJaWYgKHdsYW5kZXYtPnN0YXRlICE9IFdMQU5fREVWSUNFX09QRU4pIHsKIAkJcmVzdWx0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKaW5kZXggOTZmYjExOC4uZDJkZTEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfcGhvbmV0LmMKQEAgLTM1LDYgKzM1LDEwIEBACiAjaW5jbHVkZSAidV9waG9uZXQuaCIKIAogI2RlZmluZSBQTl9NRURJQV9VU0IJMHgxQgorI2RlZmluZSBNQVhQQUNLRVQJNTEyCisjaWYgKFBBR0VfU0laRSAlIE1BWFBBQ0tFVCkKKyNlcnJvciBNQVhQQUNLRVQgbXVzdCBkaXZpZGUgUEFHRV9TSVpFIQorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ1LDYgKzQ5LDEwIEBACiAKIHN0cnVjdCBmX3Bob25ldCB7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJZnVuY3Rpb247CisJc3RydWN0IHsKKwkJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJCXNwaW5sb2NrX3QJCWxvY2s7CisJfSByeDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkJKmRldjsKIAlzdHJ1Y3QgdXNiX2VwCQkJKmluX2VwLCAqb3V0X2VwOwogCkBAIC01Miw3ICs2MCw3IEBACiAJc3RydWN0IHVzYl9yZXF1ZXN0CQkqb3V0X3JlcXZbMF07CiB9OwogCi1zdGF0aWMgaW50IHBob25ldF9yeHFfc2l6ZSA9IDI7CitzdGF0aWMgaW50IHBob25ldF9yeHFfc2l6ZSA9IDE3OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmX3Bob25ldCAqZnVuY190b19wbihzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQogewpAQCAtMTM4LDcgKzE0Niw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KE1BWFBBQ0tFVCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC0yNTYsMjUgKzI2NCwxNSBAQAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHBuX25ldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7Ci0Jc3RydWN0IHBob25ldF9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAtRUJVU1k7Ci0KIAlpZiAoKG5ld19tdHUgPCBQSE9ORVRfTUlOX01UVSkgfHwgKG5ld19tdHUgPiBQSE9ORVRfTUFYX01UVSkpCiAJCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQlkZXYtPm10dSA9IG5ld19tdHU7Ci0JCWVyciA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gZXJyOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwbl9uZXRkZXZfb3BzID0gewpAQCAtMzA4LDIxICszMDYsMjEgQEAKIHN0YXRpYyBpbnQKIHBuX3J4X3N1Ym1pdChzdHJ1Y3QgZl9waG9uZXQgKmZwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JY29uc3Qgc2l6ZV90IHNpemUgPSBmcC0+ZGV2LT5tdHU7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGZwLT5kZXY7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGVycjsKIAotCXNrYiA9IGFsbG9jX3NrYihzaXplLCBnZnBfZmxhZ3MpOwotCWlmICghc2tiKQorCXBhZ2UgPSBfX25ldGRldl9hbGxvY19wYWdlKGRldiwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXBhZ2UpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmVxLT5idWYgPSBza2ItPmRhdGE7Ci0JcmVxLT5sZW5ndGggPSBzaXplOwotCXJlcS0+Y29udGV4dCA9IHNrYjsKKwlyZXEtPmJ1ZiA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlyZXEtPmxlbmd0aCA9IFBBR0VfU0laRTsKKwlyZXEtPmNvbnRleHQgPSBwYWdlOwogCiAJZXJyID0gdXNiX2VwX3F1ZXVlKGZwLT5vdXRfZXAsIHJlcSwgZ2ZwX2ZsYWdzKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJbmV0ZGV2X2ZyZWVfcGFnZShkZXYsIHBhZ2UpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMzMCwyNSArMzI4LDM3IEBACiB7CiAJc3RydWN0IGZfcGhvbmV0ICpmcCA9IGVwLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZnAtPmRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBwYWdlICpwYWdlID0gcmVxLT5jb250ZXh0OworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzID0gcmVxLT5zdGF0dXM7CiAKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgMDoKLQkJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKQotCQkJYnJlYWs7Ci0JCWlmICh1bmxpa2VseShyZXEtPmFjdHVhbCA8IDEpKQotCQkJYnJlYWs7Ci0JCXNrYl9wdXQoc2tiLCByZXEtPmFjdHVhbCk7Ci0JCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9QSE9ORVQpOwotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQlfX3NrYl9wdWxsKHNrYiwgMSk7Ci0JCXNrYi0+ZGV2ID0gZGV2OwotCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZwLT5yeC5sb2NrLCBmbGFncyk7CisJCXNrYiA9IGZwLT5yeC5za2I7CisJCWlmICghc2tiKQorCQkJc2tiID0gZnAtPnJ4LnNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCAxMik7CisJCWlmIChyZXEtPmFjdHVhbCA8IHJlcS0+bGVuZ3RoKSAvKiBMYXN0IGZyYWdtZW50ICovCisJCQlmcC0+cnguc2tiID0gTlVMTDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnAtPnJ4LmxvY2ssIGZsYWdzKTsKIAotCQluZXRpZl9yeChza2IpOwotCQlza2IgPSBOVUxMOworCQlpZiAodW5saWtlbHkoIXNrYikpCisJCQlicmVhazsKKwkJc2tiX2FkZF9yeF9mcmFnKHNrYiwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncywgcGFnZSwgMCwKKwkJCQlyZXEtPmFjdHVhbCk7CisJCXBhZ2UgPSBOVUxMOworCisJCWlmIChyZXEtPmFjdHVhbCA8IHJlcS0+bGVuZ3RoKSB7IC8qIExhc3QgZnJhZ21lbnQgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9QSE9ORVQpOworCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCXBza2JfcHVsbChza2IsIDEpOworCQkJc2tiLT5kZXYgPSBkZXY7CisJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwkJCW5ldGlmX3J4KHNrYik7CisJCX0KIAkJYnJlYWs7CiAKIAkvKiBEbyBub3QgcmVzdWJtaXQgaW4gdGhlc2UgY2FzZXM6ICovCkBAIC0zNjYsOCArMzc2LDggQEAKIAkJYnJlYWs7CiAJfQogCi0JaWYgKHNrYikKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlpZiAocGFnZSkKKwkJbmV0ZGV2X2ZyZWVfcGFnZShkZXYsIHBhZ2UpOwogCWlmIChyZXEpCiAJCXBuX3J4X3N1Ym1pdChmcCwgcmVxLCBHRlBfQVRPTUlDKTsKIH0KQEAgLTM4NSw2ICszOTUsMTAgQEAKIAogCXVzYl9lcF9kaXNhYmxlKGZwLT5vdXRfZXApOwogCXVzYl9lcF9kaXNhYmxlKGZwLT5pbl9lcCk7CisJaWYgKGZwLT5yeC5za2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoZnAtPnJ4LnNrYik7CisJCWZwLT5yeC5za2IgPSBOVUxMOworCX0KIH0KIAogc3RhdGljIGludCBwbl9zZXRfYWx0KHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsIHVuc2lnbmVkIGludGYsIHVuc2lnbmVkIGFsdCkKQEAgLTU4Myw2ICs1OTcsNyBAQAogCWZwLT5mdW5jdGlvbi5zZXRfYWx0ID0gcG5fc2V0X2FsdDsKIAlmcC0+ZnVuY3Rpb24uZ2V0X2FsdCA9IHBuX2dldF9hbHQ7CiAJZnAtPmZ1bmN0aW9uLmRpc2FibGUgPSBwbl9kaXNjb25uZWN0OworCXNwaW5fbG9ja19pbml0KCZmcC0+cngubG9jayk7CiAKIAllcnIgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZmcC0+ZnVuY3Rpb24pOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwppbmRleCAwMTZmNjNiLi5jNjY1MjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogICogICAtIC4uLiBwcm9iYWJseSBtb3JlIGV0aHRvb2wgb3BzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSBldGhfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CkBAIC00NjUsNyArNDY1LDggQEAKIAlyZXR1cm4gY2RjX2ZpbHRlciAmIFVTQl9DRENfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVM7CiB9CiAKLXN0YXRpYyBpbnQgZXRoX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3N0YXRpYyBuZXRkZXZfdHhfdCBldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBldGhfZGV2CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGggPSBza2ItPmxlbjsKQEAgLTQ4Nyw3ICs0ODgsNyBAQAogCiAJaWYgKCFpbikgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAkvKiBhcHBseSBvdXRnb2luZyBDREMgb3IgUk5ESVMgZmlsdGVycyAqLwpAQCAtNTA2LDcgKzUwNyw3IEBACiAJCQkJdHlwZSA9IFVTQl9DRENfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKIAkJCWlmICghKGNkY19maWx0ZXIgJiB0eXBlKSkgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJfQogCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfRElSRUNURUQgKi8KQEAgLTU4Niw3ICs1ODcsNyBAQAogCQlsaXN0X2FkZCgmcmVxLT5saXN0LCAmZGV2LT50eF9yZXFzKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKaW5kZXggYzdjMWNhMC4uMWQyNmJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCkBAIC0yMTY3LDggKzIxNjcsOSBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgbXVzYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBtdXNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXN0cnVjdCBtdXNiCSptdXNiID0gZGV2X3RvX211c2IoJnBkZXYtPmRldik7CiAKQEAgLTIxOTUsOCArMjE5Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXVzYl9yZXN1bWVfZWFybHkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgbXVzYl9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbXVzYgkqbXVzYiA9IGRldl90b19tdXNiKCZwZGV2LT5kZXYpOwogCiAJaWYgKCFtdXNiLT5jbG9jaykKQEAgLTIyMTQsOSArMjIxNiwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgbXVzYl9kZXZfcG1fb3BzID0geworCS5zdXNwZW5kCT0gbXVzYl9zdXNwZW5kLAorCS5yZXN1bWVfbm9pcnEJPSBtdXNiX3Jlc3VtZV9ub2lycSwKK307CisKKyNkZWZpbmUgTVVTQl9ERVZfUE1fT1BTICgmbXVzYl9kZXZfcG1fb3BzKQogI2Vsc2UKLSNkZWZpbmUJbXVzYl9zdXNwZW5kCU5VTEwKLSNkZWZpbmUJbXVzYl9yZXN1bWVfZWFybHkJTlVMTAorI2RlZmluZQlNVVNCX0RFVl9QTV9PUFMJTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG11c2JfZHJpdmVyID0gewpAQCAtMjIyNCwxMSArMjIzMSwxMCBAQAogCQkubmFtZQkJPSAoY2hhciAqKW11c2JfZHJpdmVyX25hbWUsCiAJCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wbQkJPSBNVVNCX0RFVl9QTV9PUFMsCiAJfSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG11c2JfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBtdXNiX3NodXRkb3duLAotCS5zdXNwZW5kCT0gbXVzYl9zdXNwZW5kLAotCS5yZXN1bWVfZWFybHkJPSBtdXNiX3Jlc3VtZV9lYXJseSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL2kxNDgwdS13bHAuaCBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvaTE0ODB1LXdscC5oCmluZGV4IDM0MjFkMzMuLjJlMzFmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvaTE0ODB1LXdscC5oCisrKyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvaTE0ODB1LXdscC5oCkBAIC0yNjcsNyArMjY3LDggQEAKIC8qIG5ldGRldiBpbnRlcmZhY2UgKi8KIGV4dGVybiBpbnQgaTE0ODB1X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBleHRlcm4gaW50IGkxNDgwdV9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwotZXh0ZXJuIGludCBpMTQ4MHVfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworZXh0ZXJuIG5ldGRldl90eF90IGkxNDgwdV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwKKwkJCQkJCXN0cnVjdCBuZXRfZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgaTE0ODB1X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBleHRlcm4gaW50IGkxNDgwdV9zZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBpZm1hcCAqKTsKIGV4dGVybiBpbnQgaTE0ODB1X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvdHguYyBiL2RyaXZlcnMvdXdiL2kxNDgwL2kxNDgwdS13bHAvdHguYwppbmRleCAyNmJhY2MwLi4zZGIzNDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MHUtd2xwL3R4LmMKKysrIGIvZHJpdmVycy91d2IvaTE0ODAvaTE0ODB1LXdscC90eC5jCkBAIC01MDMsNyArNTAzLDggQEAKICAqCiAgKiBAbmV0X2Rldi0+eG1pdF9sb2NrIGlzIGhlbGQKICAqLwotaW50IGkxNDgwdV9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCituZXRkZXZfdHhfdCBpMTQ4MHVfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBpMTQ4MHUgKmkxNDgwdSA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDNiNTRiMzkuLjE5OTliMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTkzNSw3ICs5MzUsNyBAQAogCiBjb25maWcgRkJfQVRNRUwKIAl0cmlzdGF0ZSAiQVQ5MS9BVDMyIExDRCBDb250cm9sbGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBGQiAmJiAoQVJDSF9BVDkxU0FNOTI2MSB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBBUkNIX0FUOTFDQVA5IHx8IEFWUjMyKQorCWRlcGVuZHMgb24gRkIgJiYgKEFSQ0hfQVQ5MVNBTTkyNjEgfHwgQVJDSF9BVDkxU0FNOUcxMCB8fCBBUkNIX0FUOTFTQU05MjYzIHx8IEFSQ0hfQVQ5MVNBTTlSTCB8fCBBUkNIX0FUOTFTQU05RzQ1IHx8IEFSQ0hfQVQ5MUNBUDkgfHwgQVZSMzIpCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApAQCAtOTUxLDcgKzk1MSw3IEBACiAKIGNvbmZpZyBGQl9BVE1FTF9TVE4KIAlib29sICJVc2UgYSBTVE4gZGlzcGxheSB3aXRoIEFUOTEvQVQzMiBMQ0QgQ29udHJvbGxlciIKLQlkZXBlbmRzIG9uIEZCX0FUTUVMICYmIE1BQ0hfQVQ5MVNBTTkyNjFFSworCWRlcGVuZHMgb24gRkJfQVRNRUwgJiYgKE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUspCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFNUTiBMQ0QgZGlzcGxheSB0byB0aGUgQVQ5MS9BVDMyIExDRApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jIGIvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCmluZGV4IGRhMDVmMDguLjI4MzBmZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKQEAgLTE4Miw3ICsxODIsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAKLQlpZiAoIShjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQzMmFwNzAwMCgpKSkKKwlpZiAoIShjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXNhbTlnMTAoKQorCQl8fCBjcHVfaXNfYXQzMmFwNzAwMCgpKSkKIAkJcmV0dXJuIHhyZXM7CiAKIAl2YWx1ZSA9IHhyZXM7CkBAIC04MjQsNyArODI1LDggQEAKIAlpbmZvLT5maXggPSBhdG1lbF9sY2RmYl9maXg7CiAKIAkvKiBFbmFibGUgTENEQyBDbG9ja3MgKi8KLQlpZiAoY3B1X2lzX2F0OTFzYW05MjYxKCkgfHwgY3B1X2lzX2F0MzJhcDcwMDAoKSkgeworCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjEoKSB8fCBjcHVfaXNfYXQ5MXNhbTlnMTAoKQorCSB8fCBjcHVfaXNfYXQzMmFwNzAwMCgpKSB7CiAJCXNpbmZvLT5idXNfY2xrID0gY2xrX2dldChkZXYsICJoY2sxIik7CiAJCWlmIChJU19FUlIoc2luZm8tPmJ1c19jbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHNpbmZvLT5idXNfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IGY5ZDE5YmUuLjkwODYxY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMTEwLDcgKzExMCw3IEBACiBjb25maWcgQkFDS0xJR0hUX0FUTUVMX0xDREMKIAlib29sICJBdG1lbCBMQ0RDIENvbnRyYXN0LWFzLUJhY2tsaWdodCBjb250cm9sIgogCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBGQl9BVE1FTAotCWRlZmF1bHQgeSBpZiBNQUNIX1NBTTkyNjFFSyB8fCBNQUNIX1NBTTkyNjNFSworCWRlZmF1bHQgeSBpZiBNQUNIX1NBTTkyNjFFSyB8fCBNQUNIX1NBTTlHMTBFSyB8fCBNQUNIX1NBTTkyNjNFSwogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgYSBiYWNrbGlnaHQgY29udHJvbCBpbnRlcm5hbCB0byB0aGUgQXRtZWwgTENEQwogCSAgZHJpdmVyLiAgSWYgdGhlIExDRCAiY29udHJhc3QgY29udHJvbCIgb24geW91ciBib2FyZCBpcyB3aXJlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IDE1YTBlZTYuLjMwYWUzMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qCiAgKiBDb21wbGFpbiBpZiBWQVIgaXMgb3V0IG9mIHJhbmdlLgpAQCAtMTI5LDYgKzEzMCwxMCBAQAogI2RlZmluZSBMQ0RJU1JfRU9GCSgxPDwxKQogI2RlZmluZSBMQ0RJU1JfQk9GCSgxPDwwKQogCisvKiBVc2VkIGZiLW1vZGUuIENhbiBiZSBzZXQgb24ga2VybmVsIGNvbW1hbmQgbGluZSwgdGhlcmVmb3JlIGZpbGUtc3RhdGljLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmZiX21vZGU7CisKKwogLyoKICAqIFRoZXNlIGFyZSB0aGUgYml0ZmllbGRzIGZvciBlYWNoCiAgKiBkaXNwbGF5IGRlcHRoIHRoYXQgd2Ugc3VwcG9ydC4KQEAgLTE0NSwxMCArMTUwLDYgQEAKIAl2b2lkIF9faW9tZW0JCSpyZWdzOwogCXN0cnVjdCBjbGsJCSpjbGs7CiAKLQl1X2ludAkJCW1heF9icHA7Ci0JdV9pbnQJCQltYXhfeHJlczsKLQl1X2ludAkJCW1heF95cmVzOwotCiAJLyoKIAkgKiBUaGVzZSBhcmUgdGhlIGFkZHJlc3NlcyB3ZSBtYXBwZWQKIAkgKiB0aGUgZnJhbWVidWZmZXIgbWVtb3J5IHJlZ2lvbiB0by4KQEAgLTE3Miw2ICsxNzMsOSBAQAogCQkJCWNtYXBfc3RhdGljOjEsCiAJCQkJdW51c2VkOjMwOwogCisJc3RydWN0IGlteF9mYl92aWRlb21vZGUgKm1vZGU7CisJaW50CQkJbnVtX21vZGVzOworCiAJdm9pZCAoKmxjZF9wb3dlcikoaW50KTsKIAl2b2lkICgqYmFja2xpZ2h0X3Bvd2VyKShpbnQpOwogfTsKQEAgLTI5OCw2ICszMDIsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlteF9mYl92aWRlb21vZGUgKmlteGZiX2ZpbmRfbW9kZShzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpKQoreworCXN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlICptOworCWludCBpOworCisJZm9yIChpID0gMCwgbSA9ICZmYmktPm1vZGVbMF07IGkgPCBmYmktPm51bV9tb2RlczsgaSsrLCBtKyspIHsKKwkJaWYgKCFzdHJjbXAobS0+bW9kZS5uYW1lLCBmYl9tb2RlKSkKKwkJCXJldHVybiBtOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKICAqICBpbXhmYl9jaGVja192YXIoKToKICAqICAgIFJvdW5kIHVwIGluIHRoZSBmb2xsb3dpbmcgb3JkZXI6IGJpdHNfcGVyX3BpeGVsLCB4cmVzLApAQCAtMzA4LDM1ICszMjQsODEgQEAKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCXN0cnVjdCBpbXhmYl9yZ2IgKnJnYjsKKwljb25zdCBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSAqaW14ZmJfbW9kZTsKKwl1bnNpZ25lZCBsb25nIGxjZF9jbGs7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKKwl1MzIgcGNyID0gMDsKIAogCWlmICh2YXItPnhyZXMgPCBNSU5fWFJFUykKIAkJdmFyLT54cmVzID0gTUlOX1hSRVM7CiAJaWYgKHZhci0+eXJlcyA8IE1JTl9ZUkVTKQogCQl2YXItPnlyZXMgPSBNSU5fWVJFUzsKLQlpZiAodmFyLT54cmVzID4gZmJpLT5tYXhfeHJlcykKLQkJdmFyLT54cmVzID0gZmJpLT5tYXhfeHJlczsKLQlpZiAodmFyLT55cmVzID4gZmJpLT5tYXhfeXJlcykKLQkJdmFyLT55cmVzID0gZmJpLT5tYXhfeXJlczsKLQl2YXItPnhyZXNfdmlydHVhbCA9IG1heCh2YXItPnhyZXNfdmlydHVhbCwgdmFyLT54cmVzKTsKLQl2YXItPnlyZXNfdmlydHVhbCA9IG1heCh2YXItPnlyZXNfdmlydHVhbCwgdmFyLT55cmVzKTsKKworCWlteGZiX21vZGUgPSBpbXhmYl9maW5kX21vZGUoZmJpKTsKKwlpZiAoIWlteGZiX21vZGUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFyLT54cmVzCQk9IGlteGZiX21vZGUtPm1vZGUueHJlczsKKwl2YXItPnlyZXMJCT0gaW14ZmJfbW9kZS0+bW9kZS55cmVzOworCXZhci0+Yml0c19wZXJfcGl4ZWwJPSBpbXhmYl9tb2RlLT5icHA7CisJdmFyLT5waXhjbG9jawkJPSBpbXhmYl9tb2RlLT5tb2RlLnBpeGNsb2NrOworCXZhci0+aHN5bmNfbGVuCQk9IGlteGZiX21vZGUtPm1vZGUuaHN5bmNfbGVuOworCXZhci0+bGVmdF9tYXJnaW4JPSBpbXhmYl9tb2RlLT5tb2RlLmxlZnRfbWFyZ2luOworCXZhci0+cmlnaHRfbWFyZ2luCT0gaW14ZmJfbW9kZS0+bW9kZS5yaWdodF9tYXJnaW47CisJdmFyLT52c3luY19sZW4JCT0gaW14ZmJfbW9kZS0+bW9kZS52c3luY19sZW47CisJdmFyLT51cHBlcl9tYXJnaW4JPSBpbXhmYl9tb2RlLT5tb2RlLnVwcGVyX21hcmdpbjsKKwl2YXItPmxvd2VyX21hcmdpbgk9IGlteGZiX21vZGUtPm1vZGUubG93ZXJfbWFyZ2luOworCXZhci0+c3luYwkJPSBpbXhmYl9tb2RlLT5tb2RlLnN5bmM7CisJdmFyLT54cmVzX3ZpcnR1YWwJPSBtYXgodmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eHJlcyk7CisJdmFyLT55cmVzX3ZpcnR1YWwJPSBtYXgodmFyLT55cmVzX3ZpcnR1YWwsIHZhci0+eXJlcyk7CiAKIAlwcl9kZWJ1ZygidmFyLT5iaXRzX3Blcl9waXhlbD0lZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisKKwlsY2RfY2xrID0gY2xrX2dldF9yYXRlKGZiaS0+Y2xrKTsKKworCXRtcCA9IHZhci0+cGl4Y2xvY2sgKiAodW5zaWduZWQgbG9uZyBsb25nKWxjZF9jbGs7CisKKwlkb19kaXYodG1wLCAxMDAwMDAwKTsKKworCWlmIChkb19kaXYodG1wLCAxMDAwMDAwKSA+IDUwMDAwMCkKKwkJdG1wKys7CisKKwlwY3IgPSAodW5zaWduZWQgaW50KXRtcDsKKworCWlmICgtLXBjciA+IDB4M0YpIHsKKwkJcGNyID0gMHgzRjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTXVzdCBsaW1pdCBwaXhlbCBjbG9jayB0byAlbHVIelxuIiwKKwkJCQlsY2RfY2xrIC8gcGNyKTsKKwl9CisKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDMyOgorCQlwY3IgfD0gUENSX0JQSVhfMTg7CiAJCXJnYiA9ICZkZWZfcmdiXzE4OwogCQlicmVhazsKIAljYXNlIDE2OgogCWRlZmF1bHQ6Ci0JCWlmIChmYmktPnBjciAmIFBDUl9URlQpCisJCWlmIChjcHVfaXNfbXgxKCkpCisJCQlwY3IgfD0gUENSX0JQSVhfMTI7CisJCWVsc2UKKwkJCXBjciB8PSBQQ1JfQlBJWF8xNjsKKworCQlpZiAoaW14ZmJfbW9kZS0+cGNyICYgUENSX1RGVCkKIAkJCXJnYiA9ICZkZWZfcmdiXzE2X3RmdDsKIAkJZWxzZQogCQkJcmdiID0gJmRlZl9yZ2JfMTZfc3RuOwogCQlicmVhazsKIAljYXNlIDg6CisJCXBjciB8PSBQQ1JfQlBJWF84OwogCQlyZ2IgPSAmZGVmX3JnYl84OwogCQlicmVhazsKIAl9CiAKKwkvKiBhZGQgc3luYyBwb2xhcml0aWVzICovCisJcGNyIHw9IGlteGZiX21vZGUtPnBjciAmIH4oMHgzZiB8ICg3IDw8IDI1KSk7CisKKwlmYmktPnBjciA9IHBjcjsKKwogCS8qCiAJICogQ29weSB0aGUgUkdCIHBhcmFtZXRlcnMgZm9yIHRoaXMgZGlzcGxheQogCSAqIGZyb20gdGhlIG1hY2hpbmUgc3BlY2lmaWMgcGFyYW1ldGVycy4KQEAgLTM5MywxMCArNDU1LDYgQEAKIAogCXdyaXRlbChmYmktPnNjcmVlbl9kbWEsIGZiaS0+cmVncyArIExDRENfU1NBKTsKIAotCS8qIHBoeXNpY2FsIHNjcmVlbiBzdGFydCBhZGRyZXNzCSAgICAqLwotCXdyaXRlbChWUFdfVlBXKGZiaS0+bWF4X3hyZXMgKiBmYmktPm1heF9icHAgLyA4IC8gNCksCi0JCWZiaS0+cmVncyArIExDRENfVlBXKTsKLQogCS8qIHBhbm5pbmcgb2Zmc2V0IDAgKDAgcGl4ZWwgb2Zmc2V0KSAgICAgICAgKi8KIAl3cml0ZWwoMHgwMDAwMDAwMCwgZmJpLT5yZWdzICsgTENEQ19QT1MpOwogCkBAIC00NjgsOCArNTI2LDYgQEAKIHN0YXRpYyBpbnQgaW14ZmJfYWN0aXZhdGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwotCXVuc2lnbmVkIGludCBwY3IsIGxjZF9jbGs7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAogCXByX2RlYnVnKCJ2YXI6IHhyZXM9JWQgaHNsZW49JWQgbG09JWQgcm09JWRcbiIsCiAJCXZhci0+eHJlcywgdmFyLT5oc3luY19sZW4sCkBAIC01MDUsNiArNTYxLDEwIEBACiAJCQlpbmZvLT5maXguaWQsIHZhci0+bG93ZXJfbWFyZ2luKTsKICNlbmRpZgogCisJLyogcGh5c2ljYWwgc2NyZWVuIHN0YXJ0IGFkZHJlc3MJICAgICovCisJd3JpdGVsKFZQV19WUFcodmFyLT54cmVzICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDggLyA0KSwKKwkJZmJpLT5yZWdzICsgTENEQ19WUFcpOworCiAJd3JpdGVsKEhDUl9IX1dJRFRIKHZhci0+aHN5bmNfbGVuIC0gMSkgfAogCQlIQ1JfSF9XQUlUXzEodmFyLT5yaWdodF9tYXJnaW4gLSAxKSB8CiAJCUhDUl9IX1dBSVRfMih2YXItPmxlZnRfbWFyZ2luIC0gMyksCkBAIC01MTgsMjIgKzU3OCw3IEBACiAJd3JpdGVsKFNJWkVfWE1BWCh2YXItPnhyZXMpIHwgU0laRV9ZTUFYKHZhci0+eXJlcyksCiAJCQlmYmktPnJlZ3MgKyBMQ0RDX1NJWkUpOwogCi0JbGNkX2NsayA9IGNsa19nZXRfcmF0ZShmYmktPmNsayk7Ci0JdG1wID0gdmFyLT5waXhjbG9jayAqICh1bnNpZ25lZCBsb25nIGxvbmcpbGNkX2NsazsKLQlkb19kaXYodG1wLCAxMDAwMDAwKTsKLQlpZiAoZG9fZGl2KHRtcCwgMTAwMDAwMCkgPiA1MDAwMDApCi0JCXRtcCsrOwotCXBjciA9ICh1bnNpZ25lZCBpbnQpdG1wOwotCWlmICgtLXBjciA+IDB4M0YpIHsKLQkJcGNyID0gMHgzRjsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTXVzdCBsaW1pdCBwaXhlbCBjbG9jayB0byAldUh6XG4iLAotCQkJCWxjZF9jbGsgLyBwY3IpOwotCX0KLQotCS8qIGFkZCBzeW5jIHBvbGFyaXRpZXMgKi8KLQlwY3IgfD0gZmJpLT5wY3IgJiB+MHgzRjsKLQotCXdyaXRlbChwY3IsIGZiaS0+cmVncyArIExDRENfUENSKTsKKwl3cml0ZWwoZmJpLT5wY3IsIGZiaS0+cmVncyArIExDRENfUENSKTsKIAl3cml0ZWwoZmJpLT5wd21yLCBmYmktPnJlZ3MgKyBMQ0RDX1BXTVIpOwogCXdyaXRlbChmYmktPmxzY3IxLCBmYmktPnJlZ3MgKyBMQ0RDX0xTQ1IxKTsKIAl3cml0ZWwoZmJpLT5kbWFjciwgZmJpLT5yZWdzICsgTENEQ19ETUFDUik7CkBAIC01NzUsNiArNjIwLDggQEAKIAlzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSAqbTsKKwlpbnQgaTsKIAogCXByX2RlYnVnKCIlc1xuIixfX2Z1bmNfXyk7CiAKQEAgLTYwMywzNSArNjUwLDE4IEBACiAJaW5mby0+ZmJvcHMJCQk9ICZpbXhmYl9vcHM7CiAJaW5mby0+ZmxhZ3MJCQk9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAogCQkJCQkgIEZCSU5GT19SRUFEU19GQVNUOwotCi0JZmJpLT5tYXhfeHJlcwkJCT0gcGRhdGEtPnhyZXM7Ci0JaW5mby0+dmFyLnhyZXMJCQk9IHBkYXRhLT54cmVzOwotCWluZm8tPnZhci54cmVzX3ZpcnR1YWwJCT0gcGRhdGEtPnhyZXM7Ci0JZmJpLT5tYXhfeXJlcwkJCT0gcGRhdGEtPnlyZXM7Ci0JaW5mby0+dmFyLnlyZXMJCQk9IHBkYXRhLT55cmVzOwotCWluZm8tPnZhci55cmVzX3ZpcnR1YWwJCT0gcGRhdGEtPnlyZXM7Ci0JZmJpLT5tYXhfYnBwCQkJPSBwZGF0YS0+YnBwOwotCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbAk9IHBkYXRhLT5icHA7Ci0JaW5mby0+dmFyLm5vbnN0ZAkJPSBwZGF0YS0+bm9uc3RkOwotCWluZm8tPnZhci5waXhjbG9jawkJPSBwZGF0YS0+cGl4Y2xvY2s7Ci0JaW5mby0+dmFyLmhzeW5jX2xlbgkJPSBwZGF0YS0+aHN5bmNfbGVuOwotCWluZm8tPnZhci5sZWZ0X21hcmdpbgkJPSBwZGF0YS0+bGVmdF9tYXJnaW47Ci0JaW5mby0+dmFyLnJpZ2h0X21hcmdpbgkJPSBwZGF0YS0+cmlnaHRfbWFyZ2luOwotCWluZm8tPnZhci52c3luY19sZW4JCT0gcGRhdGEtPnZzeW5jX2xlbjsKLQlpbmZvLT52YXIudXBwZXJfbWFyZ2luCQk9IHBkYXRhLT51cHBlcl9tYXJnaW47Ci0JaW5mby0+dmFyLmxvd2VyX21hcmdpbgkJPSBwZGF0YS0+bG93ZXJfbWFyZ2luOwotCWluZm8tPnZhci5zeW5jCQkJPSBwZGF0YS0+c3luYzsKIAlpbmZvLT52YXIuZ3JheXNjYWxlCQk9IHBkYXRhLT5jbWFwX2dyZXlzY2FsZTsKIAlmYmktPmNtYXBfaW52ZXJzZQkJPSBwZGF0YS0+Y21hcF9pbnZlcnNlOwogCWZiaS0+Y21hcF9zdGF0aWMJCT0gcGRhdGEtPmNtYXBfc3RhdGljOwotCWZiaS0+cGNyCQkJPSBwZGF0YS0+cGNyOwogCWZiaS0+bHNjcjEJCQk9IHBkYXRhLT5sc2NyMTsKIAlmYmktPmRtYWNyCQkJPSBwZGF0YS0+ZG1hY3I7CiAJZmJpLT5wd21yCQkJPSBwZGF0YS0+cHdtcjsKIAlmYmktPmxjZF9wb3dlcgkJCT0gcGRhdGEtPmxjZF9wb3dlcjsKIAlmYmktPmJhY2tsaWdodF9wb3dlcgkJPSBwZGF0YS0+YmFja2xpZ2h0X3Bvd2VyOwotCWluZm8tPmZpeC5zbWVtX2xlbgkJPSBmYmktPm1heF94cmVzICogZmJpLT5tYXhfeXJlcyAqCi0JCQkJCSAgZmJpLT5tYXhfYnBwIC8gODsKKworCWZvciAoaSA9IDAsIG0gPSAmcGRhdGEtPm1vZGVbMF07IGkgPCBwZGF0YS0+bnVtX21vZGVzOyBpKyssIG0rKykKKwkJaW5mby0+Zml4LnNtZW1fbGVuID0gbWF4X3Qoc2l6ZV90LCBpbmZvLT5maXguc21lbV9sZW4sCisJCQkJbS0+bW9kZS54cmVzICogbS0+bW9kZS55cmVzICogbS0+YnBwIC8gOCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0Miw5ICs2NzIsOSBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCi0JcHJpbnRrKCJpLk1YIEZyYW1lYnVmZmVyIGRyaXZlclxuIik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgImkuTVggRnJhbWVidWZmZXIgZHJpdmVyXG4iKTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCkBAIC02NjIsNiArNjkyLDkgQEAKIAogCWZiaSA9IGluZm8tPnBhcjsKIAorCWlmICghZmJfbW9kZSkKKwkJZmJfbW9kZSA9IHBkYXRhLT5tb2RlWzBdLm1vZGUubmFtZTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJcmV0ID0gaW14ZmJfaW5pdF9mYmluZm8ocGRldik7CkBAIC02ODQsNyArNzE3LDcgQEAKIAogCWZiaS0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZmJpLT5yZWdzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIkNhbm5vdCBtYXAgZnJhbWUgYnVmZmVyIHJlZ2lzdGVyc1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZnJhbWUgYnVmZmVyIHJlZ2lzdGVyc1xuIik7CiAJCWdvdG8gZmFpbGVkX2lvcmVtYXA7CiAJfQogCkBAIC03MTksNiArNzUyLDEzIEBACiAJCQlnb3RvIGZhaWxlZF9wbGF0Zm9ybV9pbml0OwogCX0KIAorCWZiaS0+bW9kZSA9IHBkYXRhLT5tb2RlOworCWZiaS0+bnVtX21vZGVzID0gcGRhdGEtPm51bV9tb2RlczsKKworCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5tb2RlbGlzdCk7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5udW1fbW9kZXM7IGkrKykKKwkJZmJfYWRkX3ZpZGVvbW9kZSgmcGRhdGEtPm1vZGVbaV0ubW9kZSwgJmluZm8tPm1vZGVsaXN0KTsKKwogCS8qCiAJICogVGhpcyBtYWtlcyBzdXJlIHRoYXQgb3VyIGNvbG91ciBiaXRmaWVsZAogCSAqIGRlc2NyaXB0b3JzIGFyZSBjb3JyZWN0bHkgaW5pdGlhbGlzZWQuCkBAIC03NTQsNyArNzk0LDcgQEAKIGZhaWxlZF9nZXRjbG9jazoKIAlpb3VubWFwKGZiaS0+cmVncyk7CiBmYWlsZWRfaW9yZW1hcDoKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIGZhaWxlZF9yZXE6CiAJa2ZyZWUoaW5mby0+cHNldWRvX3BhbGV0dGUpOwogZmFpbGVkX2luaXQ6CkBAIC03ODUsNyArODI1LDcgQEAKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCiAJaW91bm1hcChmYmktPnJlZ3MpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAljbGtfZGlzYWJsZShmYmktPmNsayk7CiAJY2xrX3B1dChmYmktPmNsayk7CiAKQEAgLTgxMSw4ICs4NTEsMzQgQEAKIAl9LAogfTsKIAorc3RhdGljIGludCBpbXhmYl9zZXR1cCh2b2lkKQoreworI2lmbmRlZiBNT0RVTEUKKwljaGFyICpvcHQsICpvcHRpb25zID0gTlVMTDsKKworCWlmIChmYl9nZXRfb3B0aW9ucygiaW14ZmIiLCAmb3B0aW9ucykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKG9wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISpvcHQpCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJZmJfbW9kZSA9IG9wdDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKwogaW50IF9faW5pdCBpbXhmYl9pbml0KHZvaWQpCiB7CisJaW50IHJldCA9IGlteGZiX3NldHVwKCk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmlteGZiX2RyaXZlciwgaW14ZmJfcHJvYmUpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCmluZGV4IGNhNWI0NjQuLmU5OGJhZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCkBAIC02Nyw5ICs2Nyw4IEBACiAgKiBmaW5kIHRoZSBrZXJuZWwgcGFydCBvZiB0aGUgdGFzayBzdHJ1Y3QsIGNvcHkgdGhlIHJlZ2lzdGVycyBhbmQKICAqIHRoZSBidWZmZXIgY29udGVudHMgYW5kIHRoZW4gY29tcGxldGUgdGhlIHRhc2suCiAgKi8KLXN0YXRpYyB2b2lkIHV2ZXNhZmJfY25fY2FsbGJhY2sodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIHV2ZXNhZmJfY25fY2FsbGJhY2soc3RydWN0IGNuX21zZyAqbXNnKQogewotCXN0cnVjdCBjbl9tc2cgKm1zZyA9IGRhdGE7CiAJc3RydWN0IHV2ZXNhZmJfdGFzayAqdXRhc2s7CiAJc3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnRhc2s7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzFfbmV0bGluay5jIGIvZHJpdmVycy93MS93MV9uZXRsaW5rLmMKaW5kZXggZmRmNzI4NS4uNTJjY2IzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9uZXRsaW5rLmMKKysrIGIvZHJpdmVycy93MS93MV9uZXRsaW5rLmMKQEAgLTMwNiw5ICszMDYsOCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgdzFfY25fY2FsbGJhY2sodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIHcxX2NuX2NhbGxiYWNrKHN0cnVjdCBjbl9tc2cgKm1zZykKIHsKLQlzdHJ1Y3QgY25fbXNnICptc2cgPSBkYXRhOwogCXN0cnVjdCB3MV9uZXRsaW5rX21zZyAqbSA9IChzdHJ1Y3QgdzFfbmV0bGlua19tc2cgKikobXNnICsgMSk7CiAJc3RydWN0IHcxX25ldGxpbmtfY21kICpjbWQ7CiAJc3RydWN0IHcxX3NsYXZlICpzbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL01ha2VmaWxlIGIvZHJpdmVycy94ZW4vTWFrZWZpbGUKaW5kZXggZWMyYTM5Yi4uN2MyODQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy94ZW4vTWFrZWZpbGUKQEAgLTEsNiArMSw5IEBACiBvYmoteQkrPSBncmFudC10YWJsZS5vIGZlYXR1cmVzLm8gZXZlbnRzLm8gbWFuYWdlLm8KIG9iai15CSs9IHhlbmJ1cy8KIAorbm9zdGFja3AgOj0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCitDRkxBR1NfZmVhdHVyZXMubwkJCTo9ICQobm9zdGFja3ApCisKIG9iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJKz0gY3B1X2hvdHBsdWcubwogb2JqLSQoQ09ORklHX1hFTl9YRU5DT01NKQkrPSB4ZW5jb21tLm8KIG9iai0kKENPTkZJR19YRU5fQkFMTE9PTikJKz0gYmFsbG9vbi5vCmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDYyMWRlOGUuLjg3ODMyOWMgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0zMiwxNiArMzIsMjAgQEAKIAkJCQkJIGFkYXB0ZWMvc3RhcmZpcmVfdHguYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FUQVJJX0RTUDU2SykgKz0gZHNwNTZrL2Jvb3RzdHJhcC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQVRNX0FNQkFTU0FET1IpICs9IGF0bXNhcjExLmZ3Ci1mdy1zaGlwcGVkLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC1lMS00LjguNTMuMC5mdyBibngyeC1lMWgtNC44LjUzLjAuZncKLWZ3LXNoaXBwZWQtJChDT05GSUdfQk5YMikgKz0gYm54Mi9ibngyLW1pcHMtMDktNC42LjE3LmZ3IFwKLQkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDktNC42LjE1LmZ3IFwKLQkJCSAgICAgYm54Mi9ibngyLW1pcHMtMDYtNC42LjE2LmZ3IFwKLQkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDYtNC42LjE2LmZ3Citmdy1zaGlwcGVkLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC1lMS01LjAuMjEuMC5mdyBibngyeC1lMWgtNS4wLjIxLjAuZncKK2Z3LXNoaXBwZWQtJChDT05GSUdfQk5YMikgKz0gYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZncgXAorCQkJICAgICBibngyL2JueDItcnYycC0wOS01LjAuMC5qMy5mdyBcCisJCQkgICAgIGJueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZncgXAorCQkJICAgICBibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdyBcCisJCQkgICAgIGJueDIvYm54Mi1ydjJwLTA2LTUuMC4wLmozLmZ3CiBmdy1zaGlwcGVkLSQoQ09ORklHX0NBU1NJTkkpICs9IHN1bi9jYXNzaW5pLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19DT01QVVRPTkUpICs9IGludGVsbGlwb3J0Mi5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQ0hFTFNJT19UMykgKz0gY3hnYjMvdDNiX3BzcmFtLTEuMS4wLmJpbiBcCiAJCQkJICAgY3hnYjMvdDNjX3BzcmFtLTEuMS4wLmJpbiBcCi0JCQkJICAgY3hnYjMvdDNmdy03LjQuMC5iaW4KKwkJCQkgICBjeGdiMy90M2Z3LTcuNC4wLmJpbiBcCisJCQkJICAgY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbiBcCisJCQkJICAgY3hnYjMvYWVsMjAwNV90d3hfZWRjLmJpbiBcCisJCQkJICAgY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19EVkJfQVY3MTEwKSArPSBhdjcxMTAvYm9vdGNvZGUuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0RWQl9UVFVTQl9CVURHRVQpICs9IHR0dXNiLWJ1ZGdldC9kc3Bib290Y29kZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRTEwMCkgKz0gZTEwMC9kMTAxbV91Y29kZS5iaW4gZTEwMC9kMTAxc191Y29kZS5iaW4gXApkaWZmIC0tZ2l0IGEvZmlybXdhcmUvV0hFTkNFIGIvZmlybXdhcmUvV0hFTkNFCmluZGV4IDBmNTY0OWEuLmQ5ZTNhOTQgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL1dIRU5DRQorKysgYi9maXJtd2FyZS9XSEVOQ0UKQEAgLTQxOCw2ICs0MTgsMjMgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRHJpdmVyOiBjeGdiMyAtIENoZWxzaW8gVGVybWluYXRvciAzIDFHLzEwRyBFdGhlcm5ldCBhZGFwdGVyCisKK0ZpbGU6IGN4Z2IzL2FlbDIwMDVfb3B0X2VkYy5iaW4uaWhleAorRmlsZTogY3hnYjMvYWVsMjAwNV90d3hfZWRjLmJpbi5paGV4CitGaWxlOiBjeGdiMy9hZWwyMDIwX3R3eF9lZGMuYmluLmloZXgKKworTGljZW5jZToKKyAqCUNvcHlyaWdodCAoYykgMjAwNy0yMDA5IE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLgorICoKKyAqCVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZQorICoJZGF0YSBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQKKyAqCW5vdGljZSBpcyBhY2NvbXBhbnlpbmcgaXQuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIERyaXZlcjogZTEwMCAtLSBJbnRlbCBQUk8vMTAwIEV0aGVybmV0IE5JQwogCiBGaWxlOiBlMTAwL2QxMDFtX3Vjb2RlLmJpbgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNC42LjE2LmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi00LjYuMTYuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRmMTBiNS4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi00LjYuMTYuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDU4MDUgKzAsMCBAQAotOjEwMDAwMDAwMDgwMDAwRjgwODAwMDAwMDAwMDA0REE0MDAwMDAwQzgyRgotOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDREQTRFNwotOjEwMDAyMDAwMDAwMDAwMTQwMDAwNEU2QzA4MDAwMDgwMDgwMDAwMDA3MgotOjEwMDAzMDAwMDAwMDU2Q0MwMDAwNEU4MDA4MDA1ODIwMDAwMDAwODRDQwotOjEwMDA0MDAwMDAwMEE1NEMwODAwNTZDQzAwMDAwMTM0MDAwMEE1RDBFQgotOjEwMDA1MDAwMDgwMDMxRDgwODAwMDAwMDAwMDA3MERDMDAwMEE3MDQ5MAotOjEwMDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDcwREMzQwotOjEwMDA3MDAwMDAwMDAwMjQwMDAxMTdFMDA4MDAwNDg4MDgwMDA0MDBDNAotOjEwMDA4MDAwMDAwMDE3NUMwMDAxMTgwNDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwMDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwMDBBMDAwMDgwMDAwOTgwODAwMDAwMDAwMDAzQTc0MDAwMTJGNjA2QQotOjEwMDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjA4MDBDMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MDgwMEM4MDAwQTAwMDAzRTAwMDAwMDAwRTgKLToxMDAwRDAwMDAwMDAwMDAwMDAwMDAwMEQ2MzZGNkQzNDJFMzYyRTMxREQKLToxMDAwRTAwMDM2MDAwMDAwMDQwNjEwMDIwMDAwMDAwMDAwMDAwMDAzQkIKLToxMDAwRjAwMDAwMDAwMDE0MDAwMDAwMzIwMDAwMDAwMzAwMDAwMDAwQjcKLToxMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMDAxMTAwMDAwMDAwMDEwMDAwMDAxMzYwMDAwRUE2MDAwMDAwMDAxNEQKLToxMDAxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QzcKLToxMDAxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMDAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMDAxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMDAxNjAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMDAxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMDAxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwNUYKLToxMDAxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMDAxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMDAxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMDAxQzAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMEYKLToxMDAxRDAwMDAwMDAwMDBEM0MwMjA4MDAyNDQyNERFMDNDMDMwODAwRjIKLToxMDAxRTAwMDI0NjM0RUQ0QUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZENUMKLToxMDAxRjAwMDI0NDIwMDA0M0MxRDA4MDAzN0JEN0ZGQzAzQTBGMDIxMTEKLToxMDAyMDAwMDNDMTAwODAwMjYxMDAwRjgzQzFDMDgwMDI3OUM0REUwMUMKLToxMDAyMTAwMDBFMDAwMkFBMDAwMDAwMDAwMDAwMDAwRDNDMDM2MDEwNjgKLToxMDAyMjAwMDhDNjQ1MDAwMjQwMkZGN0YzQzFBODAwMDAwODIyMDI0NEUKLToxMDAyMzAwMDM0ODQzODBDMjQwMjAwMzdBQzY0NTAwMEFGNDIwMDA4MEMKLToxMDAyNDAwMDI0MDIwQzgwQUY0MjAwMjQzQzFCODAwODNDMDYwODAwQkUKLToxMDAyNTAwMDI0QzYwNzlDM0MwMjA4MDAyNDQyNEUxODI0MDQwMDFCQkMKLToxMDAyNjAwMDI0ODRGRkZGQUM0NjAwMDAwNDgxRkZGRDI0NDIwMDA0MEIKLToxMDAyNzAwMDNDMDIwODAwMjQ0MjAzODAzQzAxMDgwMEFDMjI0RTIwQ0UKLToxMDAyODAwMDNDMDIwODAwMjQ0MjA2ODAzQzAxMDgwMEFDMjI0RTI0QjcKLToxMDAyOTAwMDNDMDIwODAwMjQ0MjBEODAzQzAxMDgwMEFDMjI0RTYwNjQKLToxMDAyQTAwMDNDMDIwODAwMjQ0MjBBMTAzQzAzMDgwMDI0NjMwOTA4QTkKLToxMDAyQjAwMDNDMDQwODAwMjQ4NDA5NDQzQzA1MDgwMDI0QTUzQzI0OEYKLToxMDAyQzAwMDNDMDEwODAwQUMyMjRFNjgzQzAyMDgwMDI0NDIwNTcwNDQKLToxMDAyRDAwMDNDMDEwODAwQUMyNjRFNjQzQzAxMDgwMEFDMjU0RTc0N0QKLToxMDAyRTAwMDNDMDEwODAwQUMyMzRFN0MzQzAxMDgwMEFDMjI0RTgwNEYKLToxMDAyRjAwMDNDMDEwODAwQUMyNDRFODQzQzAxMDgwMEFDMjM0RTFDOTkKLToxMDAzMDAwMDNDMDEwODAwQUMyMDRFMjgzQzAxMDgwMEFDMjA0RTJDREIKLToxMDAzMTAwMDNDMDEwODAwQUMyMDRFMzAzQzAxMDgwMEFDMjA0RTM0QkIKLToxMDAzMjAwMDNDMDEwODAwQUMyMDRFMzgzQzAxMDgwMEFDMjA0RTNDOUIKLToxMDAzMzAwMDNDMDEwODAwQUMyMDRFNDAzQzAxMDgwMEFDMjQ0RTQ0NzcKLToxMDAzNDAwMDNDMDEwODAwQUMyMDRFNDgzQzAxMDgwMEFDMjA0RTRDNUIKLToxMDAzNTAwMDNDMDEwODAwQUMyMDRFNTAzQzAxMDgwMEFDMjA0RTU0M0IKLToxMDAzNjAwMDNDMDEwODAwQUMyMDRFNTgzQzAxMDgwMEFDMjY0RTVDMTUKLToxMDAzNzAwMDNDMDEwODAwQUMyMDRFNkMzQzAxMDgwMEFDMjU0RTcwREUKLToxMDAzODAwMDNDMDEwODAwQUMyMzRFNzgwQTAwMDZGNDAwMDAwMDAwOEYKLToxMDAzOTAwMDNDMDMwODAwOEM2MzAwMjA4RjgyMDAwODEwNDMwMDAzOTgKLToxMDAzQTAwMDAwMDAwMDAwMEEwMDA1MkNBRjgzMDAwODAzRTAwMDA4RUQKLToxMDAzQjAwMDAwMDAwMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0ODEKLToxMDAzQzAwMDI3NTAwMTAwOTIwMjAwMDkxMDQwMDAxQTI0MDMwMDAxODYKLToxMDAzRDAwMDNDMDIwODAwOEM0MjAwMjAxMDQwMDAxNjAwMDAxODIxNEEKLToxMDAzRTAwMDBFMDAwNTY0MDAwMDAwMDA5NjAzMDAwODNDMDYwODAwQUIKLToxMDAzRjAwMDk0QzY0RTk2OEUwNDAwMTg4RjgyMDAyMDk2MDUwMDBDM0QKLToxMDA0MDAwMDAwMDMxQzAwMDA2NjE4MjVBQzQ0MDAwMEFDNDUwMDA0NDUKLToxMDA0MTAwMDI0MDQwMDAxQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQ0IKLToxMDA0MjAwMEFDNDAwMDE0QUM0MDAwMTgwRTAwMDU4OUFDNDMwMDFDMjEKLToxMDA0MzAwMDAwMDAxODIxOEZCRjAwMTQ4RkIwMDAxMDAwNjAxMDIxNDEKLToxMDA0NDAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwN0MKLToxMDA0NTAwMDk3NDIwMTA4MzA0MzcwMDAyNDAyMjAwMDEwNjIwMDBBMTUKLToxMDA0NjAwMDI4NjQyMDAxNTQ4MDAwMTI4RkJGMDAxMDI0MDI0MDAwMzUKLToxMDA0NzAwMDEwNjIwMDA4MjQwMjYwMDAxMDYyMDAwQThGQkYwMDEwQTIKLToxMDA0ODAwMDBBMDAwMEZCMDAwMDEwMjE4RkJGMDAxMDBBMDAwMEJCMTMKLToxMDA0OTAwMDI3QkQwMDE4MEUwMDAzRjYwMDAwMDAwMDBBMDAwMEZBNTUKLToxMDA0QTAwMDhGQkYwMDEwMEUwMDBGQjYwMDAwMDAwMDhGQkYwMDEwQkQKLToxMDA0QjAwMDAwMDAxMDIxMDNFMDAwMDgyN0JEMDAxODNDMDIwODAwREUKLToxMDA0QzAwMDhDNDIwMDIwMjdCREZGRTgxMDQwMDAyN0FGQkYwMDEwN0UKLToxMDA0RDAwMDBFMDAwNTY0MDAwMDAwMDA5NzQyMDEwODk3NDMwMTBDREMKLToxMDA0RTAwMDhGODUwMDIwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwODEKLToxMDA0RjAwMDAwNDMxMDI1QUNBMjAwMDA4RjQyMDEwMDNDMDYwODAwMUEKLToxMDA1MDAwMDk0QzY0RTk2OEZCRjAwMTBBQ0EyMDAwNDk3NDMwMTE2MEMKLToxMDA1MTAwMDk3NDQwMTBFM0MwMjIwMDAwMDAzMUMwMDMwODRGRkZGQzIKLToxMDA1MjAwMDAwNjQxODI1QUNBMzAwMDgwMEMyMzAyNTk3NDIwMTEwRDIKLToxMDA1MzAwMDk3NDMwMTEyMjQwNDAwMDEwMDAyMTQwMDMwNjNGRkZGRkUKLToxMDA1NDAwMDAwNDMxMDI1QUNBMjAwMEM5NzQyMDExNDI3QkQwMDE4RUYKLToxMDA1NTAwMDMwNDJGRkZGQUNBMjAwMTBBQ0EwMDAxNEFDQTAwMDE4MDkKLToxMDA1NjAwMDBBMDAwNTg5QUNBNjAwMUM4RkJGMDAxMDAzRTAwMDA4M0MKLToxMDA1NzAwMDI3QkQwMDE4M0MwMjA4MDA4QzQyMDAyMDI3QkRGRkU4ODAKLToxMDA1ODAwMDEwNDAwMDJBQUZCRjAwMTAwRTAwMDU2NDAwMDAwMDAwRkMKLToxMDA1OTAwMDk3NDIwMTA4OTc0MzAxMEM4Rjg1MDAyMDMwNDIwMDNFQUUKLToxMDA1QTAwMDMwNjNGRkZGMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwREUKLToxMDA1QjAwMDhGNDIwMTAwM0MwNjA4MDA5NEM2NEU5NjhGQkYwMDEwODMKLToxMDA1QzAwMEFDQTIwMDA0OTc0MzAxMTY5NzQ0MDEwRTNDMDIyMDAwQTAKLToxMDA1RDAwMDAwMDMxQzAwMzA4NEZGRkYwMDY0MTgyNUFDQTMwMDA4NTIKLToxMDA1RTAwMDAwQzIzMDI1OTc0MjAxMTA5NzQzMDExMjI0MDQwMDAxRjQKLToxMDA1RjAwMDAwMDIxNDAwMzA2M0ZGRkYwMDQzMTAyNUFDQTIwMDBDODIKLToxMDA2MDAwMDk3NDIwMTE0MjdCRDAwMTgzMDQyRkZGRkFDQTIwMDEwMzIKLToxMDA2MTAwMDhGNDIwMTE4QUNBMjAwMTQ5MzQyMDEwQjMwNDIwMEZGM0MKLToxMDA2MjAwMEFDQTIwMDE4MEEwMDA1ODlBQ0E2MDAxQzhGQkYwMDEwMDAKLToxMDA2MzAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFMEFGQjAwMDEwQTEKLToxMDA2NDAwMEFGQkYwMDE4QUZCMTAwMTQyNzUwMDEwMDkyMDMwMDBCOTgKLToxMDA2NTAwMDI0MDIwMDFBOTYxMTAwMDgxNDYyMDAzNTAwMDAyMDIxQkYKLToxMDA2NjAwMDMyMjIwMDAxMTA0MDAwMDkwMDAwMDAwMDhFMDIwMDAwNEMKLToxMDA2NzAwMDk2MDMwMDE0MDAwMjExQzIwMDAyMTA0MDAwNUExMDIxMUIKLToxMDA2ODAwMEE0NDMwMDgwMEEwMDAxNzkzMjIyMDAwMjBFMDAwMTJCRUYKLToxMDA2OTAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxOUYKLToxMDA2QTAwMDNDMDEwODAwQUMyMjAwNDAzMjIyMDAwMjAwMDIyMDJCNTQKLToxMDA2QjAwMDNDMDIwODAwOEM0MjAwNDQzMjIzMDAwNDI0NDIwMDAxMjIKLToxMDA2QzAwMDNDMDEwODAwQUMyMjAwNDQxMDYwMDAxQThGQkYwMDE4RTMKLToxMDA2RDAwMDhGNDIwMkI4MDQ0MTAwMDgyNDA0MDAwMTNDMDIwODAwRDMKLToxMDA2RTAwMDhDNDIwMDYwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDYwMDIKLToxMDA2RjAwMDBBMDAwMTlDOEZCMTAwMTQ4RTAyMDAyMDk2MDMwMDE2QTAKLToxMDA3MDAwMDAwMDAyMDIxQUY0MjAyODA4RTAyMDAwNEE3NDMwMjg0MzEKLToxMDA3MTAwMEFGNDIwMjg4M0MwMjEwMDBBRjQyMDJCODNDMDIwODAwMUYKLToxMDA3MjAwMDhDNDIwMDVDMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDVDQzkKLToxMDA3MzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxRkYKLToxMDA3NDAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEFGQjAwMDEwODgKLToxMDA3NTAwMEFGQkYwMDE4QUZCMTAwMTQyNzUwMDEwMDkyMDMwMDBCODcKLToxMDA3NjAwMDI0MDIwMDAzOTYxMTAwMDgxNDYyMDAzNTAwMDAyMDIxQzUKLToxMDA3NzAwMDMyMjIwMDAxMTA0MDAwMDkwMDAwMDAwMDhFMDIwMDAwM0IKLToxMDA3ODAwMDk2MDMwMDE0MDAwMjExQzIwMDAyMTA0MDAwNUExMDIxMEEKLToxMDA3OTAwMEE0NDMwMDgwMEEwMDAxQkQzMjIyMDAwMjBFMDAwMEZEQzkKLToxMDA3QTAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxOEUKLToxMDA3QjAwMDNDMDEwODAwQUMyMjAwNDAzMjIyMDAwMjAwMDIyMDJCNDMKLToxMDA3QzAwMDNDMDIwODAwOEM0MjAwNDQzMjIzMDAwNDI0NDIwMDAxMTEKLToxMDA3RDAwMDNDMDEwODAwQUMyMjAwNDQxMDYwMDAxQThGQkYwMDE4RDIKLToxMDA3RTAwMDhGNDIwMkI4MDQ0MTAwMDgyNDA0MDAwMTNDMDIwODAwQzIKLToxMDA3RjAwMDhDNDIwMDYwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDYwRjEKLToxMDA4MDAwMDBBMDAwMUUwOEZCMTAwMTQ4RTAyMDAyMDk2MDMwMDE2NEEKLToxMDA4MTAwMDAwMDAyMDIxQUY0MjAyODA4RTAyMDAwNEE3NDMwMjg0MjAKLToxMDA4MjAwMEFGNDIwMjg4M0MwMjEwMDBBRjQyMDJCODNDMDIwODAwMEUKLToxMDA4MzAwMDhDNDIwMDVDMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDVDQjgKLToxMDA4NDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxRUUKLToxMDA4NTAwMDAzRTAwMDA4MjdCRDAwMjA5MzYyMDAwMDAzRTAwMDA4QzkKLToxMDA4NjAwMEFGODAwMDA0MDNFMDAwMDgwMDAwMTAyMTI3QkRGRkU4NkUKLToxMDA4NzAwMEFGQkYwMDE0QUZCMDAwMTA4RjQyMDEwMEFGNDIwMDIwQTQKLToxMDA4ODAwMDhGNDIwMTA0QUY0MjAwQTg5MzUwMDEwQjBFMDAwMUU0MTcKLToxMDA4OTAwMDMyMTAwMEZGM0MwMjA4MDAyNDQyNEUxODAwMTAxODgwNUQKLToxMDA4QTAwMDJFMTAwMDFDMTYwMDAwMDQwMDYyMTAyMTBFMDAwMUU3NEIKLToxMDA4QjAwMDBBMDAwMUZGMDAwMDAwMDA4QzQyMDAwMDAwNDBGODA5MUYKLToxMDA4QzAwMDAwMDAwMDAwMTA0MDAwMDUzQzAyNDAwMDhGNDMwMTA0N0UKLToxMDA4RDAwMDNDMDI2MDIwQUM0MzAwMTQzQzAyNDAwMEFGNDIwMTM4QUYKLToxMDA4RTAwMDNDMDIwODAwOEM0MjAwMzQ4RkJGMDAxNDhGQjAwMDEwMEYKLToxMDA4RjAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDAzNDAzRTAwMDA4NUYKLToxMDA5MDAwMDI3QkQwMDE4MjdCREZGRThBRkJGMDAxMDhGNDIwMTQwOTAKLToxMDA5MTAwMDBFMDAwMUU0QUY0MjAwMjAwRTAwMDM4MDAwMDAwMDAwNDIKLToxMDA5MjAwMDNDMDI0MDAwQUY0MjAxNzgzQzAzMDgwMDI0NjMwMDM4RDkKLToxMDA5MzAwMDhDNjIwMDAwOEZCRjAwMTAyN0JEMDAxODI0NDIwMDAxMDgKLToxMDA5NDAwMDAzRTAwMDA4QUM2MjAwMDAyN0JERkZFOEFGQkYwMDEwNjUKLToxMDA5NTAwMDhGNDIwMTgwMEUwMDAxRTRBRjQyMDAyMDhGNDMwMTgwRUUKLToxMDA5NjAwMDI0MDIwRjAwMTQ2MjAwMDUwMDAwMDAwMDhGNDIwMTg4N0QKLToxMDA5NzAwMEE3NDIwMDlDMEEwMDAyMzkzQzAyNDAwMDkzNjIwMDAwM0EKLToxMDA5ODAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwODNDMDI0MDAwQTIKLToxMDA5OTAwMDBFMDAwMzY0MDAwMDAwMDAxNDQwMDAwNDNDMDI0MDAwMEMKLToxMDA5QTAwMDBFMDAwRTQyMDAwMDAwMDAzQzAyNDAwMEFGNDIwMUI4QzEKLToxMDA5QjAwMDNDMDIwODAwOEM0MjAwM0M4RkJGMDAxMDI0NDIwMDAxMjIKLToxMDA5QzAwMDNDMDEwODAwQUMyMjAwM0MwM0UwMDAwODI3QkQwMDE4RjEKLToxMDA5RDAwMDAzRTAwMDA4MDAwMDEwMjE4RjQzMDEwNDhGODIwMDEwMDMKLToxMDA5RTAwMDEwNDMwMDA4MDAwMDAwMDAzQzAyMDgwMDhDNDIwMDg0MTQKLToxMDA5RjAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA4NDhGNDIwMTA0MjMKLToxMDBBMDAwMEFGODIwMDEwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4RUYKLToxMDBBMTAwMEFGQkYwMDEwMjc0NDAxMDA5NDgyMDAwODMwNDMwMDAyNTkKLToxMDBBMjAwMDMwNDIwMDA0MTA0MDAwMUIwMDAwMDAwMDhGNDIwMkI4NUEKLToxMDBBMzAwMDA0NDEwMDA4MjQwNTAwMDEzQzAyMDgwMDhDNDIwMDYwQ0IKLToxMDBBNDAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA2MDBBMDAwMjgxM0YKLToxMDBBNTAwMDhGQkYwMDEwOEM4MjAwMjA5NDgzMDAxNjAwMDAyODIxOTQKLToxMDBBNjAwMEFGNDIwMjgwOEM4MjAwMDRBNzQzMDI4NEFGNDIwMjg4MTYKLToxMDBBNzAwMDNDMDIxMDAwQUY0MjAyQjgzQzAyMDgwMDhDNDIwMDVDMEQKLToxMDBBODAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA1QzBBMDAwMjgxMDMKLToxMDBBOTAwMDhGQkYwMDEwMTA2MDAwMDgyNDA1MDAwMTNDMDIwODAwMTAKLToxMDBBQTAwMDhDNDIwMDg0MjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg0RjYKLToxMDBBQjAwMDBBMDAwMjgxOEZCRjAwMTA4RjQ0MDEwMDBFMDAwMjQ0MjMKLToxMDBBQzAwMDAwMDAwMDAwMDAwMDI4MjE4RkJGMDAxMDAwQTAxMDIxQUUKLToxMDBBRDAwMDAzRTAwMDA4MjdCRDAwMTgzQzAyMDgwMDhDNDIwMDg4OTMKLToxMDBBRTAwMDI3NDMwMTAwOTQ2NTAwMEMyNDQyMDAwMTNDMDEwODAwRUEKLToxMDBBRjAwMEFDMjIwMDg4OEM2NDAwMTgwMzQ1MTAyMTkwNDU0MDAwMEEKLToxMDBCMDAwMEFGNDQwMDM4OEM2MjAwMUMyNDAzRkZGODAwMDUyRTAwNUYKLToxMDBCMTAwMDAwNDMxMDI0MzQ0MjAwMDRBRjQyMDAzQzNDMDIwMDA1NzQKLToxMDBCMjAwMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMDBCMzAwMEFGNDUwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMDBCNDAwMDNDMDIwMDA2MzQ0MjAwMDFBRjQyMDAzMDAwMDAwMDAwQzkKLToxMDBCNTAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDEwNDIKLToxMDBCNjAwMDEwNDBGRkZEMDAwMDEwMjEwM0UwMDAwODAwMDAwMDAwMUQKLToxMDBCNzAwMDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDBFMDAwMDU1NTUKLToxMDBCODAwMEFGQjAwMDEwM0MwMjgwMDAzNDQyMDA3MDhDNDIwMDAwODQKLToxMDBCOTAwMEFGODIwMDE0MEUwMDAwQjIwMDAwMDAwMDNDMDI4MDAwOTIKLToxMDBCQTAwMDM0NDYwMDcwM0MwMzA4MDA4QzYzMDBBMDNDMDIwODAwM0YKLToxMDBCQjAwMDhDNDIwMEE0MTA0MzAwMDQ4Rjg0MDAxNDNDMDEwODAwMDAKLToxMDBCQzAwMEFDMjMwMEE0QTc0MzAwOUU4Q0NBMDAwMDNDMDMwODAwOEQKLToxMDBCRDAwMDhDNjMwMEJDM0MwMjA4MDA4QzQyMDBCODAxNDQyMDIzMTYKLToxMDBCRTAwMDAwNjQxODIxMDAwMDQwMjEwMDY0MjAyQjAwNDgxMDIxREYKLToxMDBCRjAwMDAwNDQxMDIxM0MwMTA4MDBBQzIzMDBCQzNDMDEwODAwNkIKLToxMDBDMDAwMEFDMjIwMEI4OEY1MTAwMDAzMjIyMDAwNzEwNDBGRkUxRjMKLToxMDBDMTAwMEFGOEEwMDE0OENDNjAwMDAzQzA1MDgwMDhDQTUwMEJDRkYKLToxMDBDMjAwMDNDMDQwODAwOEM4NDAwQjgwMENBMzAyMzAwQTYyODIxQTgKLToxMDBDMzAwMDAwMDAxMDIxMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxRjgKLToxMDBDNDAwMDMyMjcwMDAxM0MwMTA4MDBBQzI1MDBCQzNDMDEwODAwMzMKLToxMDBDNTAwMEFDMjQwMEI4MTBFMDAwMjEzMjIyMDAwMjhGNDIwMTAwRDMKLToxMDBDNjAwMEFGNDIwMDIwOEY0MjAxMDRBRjQyMDBBODkzNDIwMTBCMjMKLToxMDBDNzAwMDBFMDAwMUU0MzA1MDAwRkYyRTAyMDAxQzU0NDAwMDA0MUUKLToxMDBDODAwMDAwMTAxMDgwMEUwMDAxRTcwQTAwMDJGODAwMDAwMDAwQ0EKLToxMDBDOTAwMDNDMDMwODAwMjQ2MzRFMTgwMDQzMTAyMThDNDIwMDAwREUKLToxMDBDQTAwMDAwNDBGODA5MDAwMDAwMDAxMDQwMDAwNTNDMDI0MDAwMzAKLToxMDBDQjAwMDhGNDMwMTA0M0MwMjYwMjBBQzQzMDAxNDNDMDI0MDAwMUUKLToxMDBDQzAwMEFGNDIwMTM4M0MwMjA4MDA4QzQyMDAzNDI0NDIwMDAxNEIKLToxMDBDRDAwMDNDMDEwODAwQUMyMjAwMzQzMjIyMDAwMjEwNDAwMDBFMTkKLToxMDBDRTAwMDMyMjIwMDA0OEY0MjAxNDAwRTAwMDFFNEFGNDIwMDIwOTYKLToxMDBDRjAwMDBFMDAwMzgwMDAwMDAwMDAzQzAyNDAwMEFGNDIwMTc4N0IKLToxMDBEMDAwMDNDMDIwODAwOEM0MjAwMzgyNDQyMDAwMTNDMDEwODAwRUIKLToxMDBEMTAwMEFDMjIwMDM4MzIyMjAwMDQxMDQwRkY5QjNDMDI4MDAwQ0QKLToxMDBEMjAwMDhGNDIwMTgwMEUwMDAxRTRBRjQyMDAyMDhGNDMwMTgwMUEKLToxMDBEMzAwMDI0MDIwRjAwMTQ2MjAwMDUwMDAwMDAwMDhGNDIwMTg4QTkKLToxMDBENDAwMEE3NDIwMDlDMEEwMDAzMkQzQzAyNDAwMDkzNjIwMDAwNzEKLToxMDBENTAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwODNDMDI0MDAwQ0UKLToxMDBENjAwMDBFMDAwMzY0MDAwMDAwMDA1NDQwMDAwNDNDMDI0MDAwRjgKLToxMDBENzAwMDBFMDAwRTQyMDAwMDAwMDAzQzAyNDAwMEFGNDIwMUI4RUQKLToxMDBEODAwMDNDMDIwODAwOEM0MjAwM0MyNDQyMDAwMTNDMDEwODAwNjcKLToxMDBEOTAwMEFDMjIwMDNDMEEwMDAyQjAzQzAyODAwMDNDMDI5MDAwMDEKLToxMDBEQTAwMDM0NDIwMDAxMDA4MjIwMjVBRjQ0MDAyMDhGNDIwMDIwMDEKLToxMDBEQjAwMDA0NDBGRkZFMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwMDcKLToxMDBEQzAwMDNDMDI4MDAwMzQ0MjAwMDEwMDgyMjAyNTAzRTAwMDA4M0MKLToxMDBERDAwMEFGNDQwMDIwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwNUEKLToxMDBERTAwMDAwODA4ODIxQUZCRjAwMTgwRTAwMDMzNTMwQjAwMEZGMkYKLToxMDBERjAwMDkzNjIwMDdEMDIyMDIwMjEwMjAyODAyNUEzNzAwMDdERTUKLToxMDBFMDAwMDhGNzAwMDc0M0MwMjgwMDAwRTAwMDMzRTAyMDI4MDI0QkEKLToxMDBFMTAwMDE2MDAwMDA5OEZCRjAwMTg4RjQyMDFGODA0NDBGRkZFNDIKLToxMDBFMjAwMDI0MDIwMDAyQUY1MTAxQzBBMzQyMDFDNDNDMDIxMDAwRTEKLToxMDBFMzAwMEFGNDIwMUY4OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQkYKLToxMDBFNDAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZEMDAwMDAxMDIxQ0YKLToxMDBFNTAwMDAzRTAwMDA4MjdCRDAwMzAyN0JERkZFOEFGQkYwMDEwNEEKLToxMDBFNjAwMDk3NDIwMTg0MzA0MjAyMDAxMDQwMDAwNTAwMDAyMDIxMUEKLToxMDBFNzAwMDBFMDAxMDc5MDAwMDAwMDAwQTAwMDM3ODI0MDQwMDAxMkQKLToxMDBFODAwMDhGNDIwMTg4MDQ0MDAwMDk4RkJGMDAxMDhGNDIwMTg4MDMKLToxMDBFOTAwMDNDMDNGRjAwMDA0MzEwMjQzQzAzMDQwMDE0NDMwMDAzMDAKLToxMDBFQTAwMDI0MDQwMDAxOTM2MjAwM0U4RkJGMDAxMDAwODAxMDIxRDcKLToxMDBFQjAwMDAzRTAwMDA4MjdCRDAwMThBMzYwMDAyMjhGNDQwMTQwMTIKLToxMDBFQzAwMDBBMDAwMzQzMjQwNTAwMDEyN0JERkZFOEFGQkYwMDE0NUIKLToxMDBFRDAwMEFGQjAwMDEwOTM2MjAwMDAyNDAzMDAyMDMwNDIwMEZGRjYKLToxMDBFRTAwMDEwNDMwMDBCMDAwMDAwMDA5MzYyMDAwMDI0MDMwMDMwNTgKLToxMDBFRjAwMDMwNDIwMEZGMTA0MzAwMDYwMDAwMDAwMDkzNjIwMDAwMzMKLToxMDBGMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDA2MjhGQkYwMDE0REUKLToxMDBGMTAwMDkzNDIwMTQ4MzA0MjAwRkYyNDQzRkZGRjJDNjIwMDA1NEEKLToxMDBGMjAwMDEwNDAwMDVDOEZCRjAwMTQwMDAzMTA4MDNDMDMwODAwRDkKLToxMDBGMzAwMDI0NjM0REE0MDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4QUYKLToxMDBGNDAwMDAwMDAwMDAwMEUwMDAzMzU4RjQ0MDE0MDhGNzAwMDBDM0MKLToxMDBGNTAwMDhGNDIwMTQ0MTYwMjAwMDIyNDAyMDAwMUFGNjIwMDBDMUQKLToxMDBGNjAwMDBFMDAwMzNFOEY0NDAxNDA4RjQyMDE0NDE0NTAwMDA0QTAKLToxMDBGNzAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMEZFRDI3QkQwMDE4QkUKLToxMDBGODAwMDhGNjIwMDBDMEEwMDAzRUMwMDAwMDAwMDk3NjIwMDEwNjIKLToxMDBGOTAwMDhGNDMwMTQ0MzA0MkZGRkYxNDYyMDAwOTAwMDAwMDAwNEIKLToxMDBGQTAwMDI0MDIwMDAxQTc2MjAwMTA4RjQyMDE0MEFGNDIwMjAwRkMKLToxMDBGQjAwMDNDMDIxMDAwQUY0MjAyMzgwQTAwMDNGMzhGQkYwMDE0NTYKLToxMDBGQzAwMDk3NjIwMDEwMEEwMDAzRUMwMDAwMDAwMDBFMDAwMzM1RDkKLToxMDBGRDAwMDhGNDQwMTQwOTc2MjAwMTI4RjQzMDE0NDMwNTBGRkZGNUQKLToxMDBGRTAwMDE2MDMwMDAyMjQwMjAwMDFBNzYyMDAxMjBFMDAwMzNFNTUKLToxMDBGRjAwMDhGNDQwMTQwOEY0MjAxNDQxNjAyMDAwNDhGQkYwMDE0NDkKLToxMDEwMDAwMDhGQjAwMDEwMEEwMDAzN0MyN0JEMDAxODk3NjIwMDEyMDEKLToxMDEwMTAwMDBBMDAwM0VDMDAwMDAwMDA5NzYyMDAxNDhGNDMwMTQ0QjMKLToxMDEwMjAwMDMwNDJGRkZGMTQ2MjAwMDY4RkJGMDAxNDI0MDIwMDAxNEIKLToxMDEwMzAwMDhGQjAwMDEwQTc2MjAwMTQwQTAwMTMxOTI3QkQwMDE4MTIKLToxMDEwNDAwMDk3NjIwMDE0MEEwMDAzRUMwMDAwMDAwMDk3NjIwMDE2OEIKLToxMDEwNTAwMDhGNDMwMTQ0MzA0MkZGRkYxNDYyMDAwNjI0MDIwMDAxNjYKLToxMDEwNjAwMDhGQkYwMDE0OEZCMDAwMTBBNzYyMDAxNjBBMDAwQkUwQkIKLToxMDEwNzAwMDI3QkQwMDE4OTc2MjAwMTYxNDQwMDAwNjhGQkYwMDE0QTkKLToxMDEwODAwMDNDMDIwODAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwMzAKLToxMDEwOTAwMEFDMjIwMDcwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4REMKLToxMDEwQTAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDkzNDMwMTA5QTQKLToxMDEwQjAwMDI0MDIwMDFGOEY1MDAxMDAxMDYyMDBBNTI4NjIwMDIwNEEKLToxMDEwQzAwMDEwNDAwMDE4MjQwMjAwMzgyODYyMDAwQTEwNDAwMDBDNkEKLToxMDEwRDAwMDI0MDIwMDBCMjg2MjAwMDgxMDQwMDAyQzAwMDAwMDAwRDEKLToxMDEwRTAwMDA0NjAwMEU3Mjg2MjAwMDIxNDQwMDAyODI0MDIwMDA2ODEKLToxMDEwRjAwMDEwNjIwMDI2OEZCRjAwMTQwQTAwMDRGMDhGQjAwMDEwQTkKLToxMDExMDAwMDEwNjIwMDVFMjg2MjAwMEIxNDQwMDBERThGQkYwMDE0RTYKLToxMDExMTAwMDI0MDIwMDBFMTA2MjAwNzM4RkIwMDAxMDBBMDAwNEYwNjkKLToxMDExMjAwMDAwMDAwMDAwMTA2MjAwQzIyODYyMDAzOTEwNDAwMDBBNkUKLToxMDExMzAwMDI0MDIwMDgwMjQwMjAwMzYxMDYyMDBDQzI4NjIwMDM3QUUKLToxMDExNDAwMDEwNDAwMEI2MjQwMjAwMzUxMDYyMDBDMzhGQkYwMDE0QTcKLToxMDExNTAwMDBBMDAwNEYwOEZCMDAwMTAxMDYyMDAyQjI4NjIwMDgxOUEKLToxMDExNjAwMDEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOTEwNjIwMEI2QjQKLToxMDExNzAwMDhGQkYwMDE0MEEwMDA0RjA4RkIwMDAxMDEwNjIwMDk5QjUKLToxMDExODAwMDhGQkYwMDE0MEEwMDA0RjA4RkIwMDAxMDNDMDIwODAwNkEKLToxMDExOTAwMDhDNDIwMDIwMTA0MDAwQkI4RkJGMDAxNDBFMDAwNTY0N0QKLToxMDExQTAwMDAwMDAwMDAwOEY0MjAxMDA4RjgzMDAyMDk3NDUwMTBDNTIKLToxMDExQjAwMDk3NDYwMTA4QUM2MjAwMDA4RjQyMDEwNDNDMDQwODAwMUQKLToxMDExQzAwMDk0ODQ0RTk2MDAwNTJDMDBBQzYyMDAwNDhGNDIwMTE4RjYKLToxMDExRDAwMDAwMDYzNDAwMDBDNDMwMjVBQzYyMDAwODhGNDIwMTFDQjgKLToxMDExRTAwMDI0MDQwMDAxQUM2MjAwMEM5MzQyMDEwQTAwQTIyODI1RUQKLToxMDExRjAwMEFDNjUwMDEwQUM2MDAwMTRBQzYwMDAxOEFDNjYwMDFDNUMKLToxMDEyMDAwMDBBMDAwNEM0OEZCRjAwMTQzQzAyMDgwMDhDNDIwMDIwNzYKLToxMDEyMTAwMDEwNDAwMDlDOEZCRjAwMTQwRTAwMDU2NDAwMDAwMDAwMDkKLToxMDEyMjAwMDk3NDQwMTA4M0MwMzA4MDA5NDYzNEU5Njk3NDUwMTBDQ0YKLToxMDEyMzAwMDAwMDQyMjAyOTc0NjAxMEU4RjgyMDAyMDAwMDQyNjAwM0YKLToxMDEyNDAwMDAwODMyMDI1MDAwNTJDMDAzQzAzMDA4MDAwQTYyODI1RjMKLToxMDEyNTAwMDAwODMyMDI1QUM0MDAwMDBBQzQwMDAwNEFDNDAwMDA4RjYKLToxMDEyNjAwMEFDNDAwMDBDQUM0NTAwMTBBQzQwMDAxNEFDNDAwMDE4ODEKLToxMDEyNzAwMEFDNDQwMDFDMEEwMDA0QzMyNDA0MDAwMTk3NDIwMTBDODIKLToxMDEyODAwMDE0NDAwMDE1MDAwMDAwMDA5MzYyMDAwNTMwNDIwMDEwNzkKLToxMDEyOTAwMDE0NDAwMDExMDAwMDAwMDAwRTAwMDMzNTAyMDAyMDIxNjAKLToxMDEyQTAwMDkzNjIwMDA1MDIwMDIwMjEzNDQyMDAxMDBFMDAwMzNFMkMKLToxMDEyQjAwMEEzNjIwMDA1OTM2MjAwMDAyNDAzMDAyMDMwNDIwMEZGNzcKLToxMDEyQzAwMDEwNDMwMDZGMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwNjgKLToxMDEyRDAwMDBBMDAxMDhGMjdCRDAwMTgwMDAwMDAwRDBBMDAwNEVGNUYKLToxMDEyRTAwMDhGQkYwMDE0M0MwMjA4MDA4QzQyMDAyMDEwNDAwMDY1QjMKLToxMDEyRjAwMDhGQkYwMDE0MEUwMDA1NjQwMDAwMDAwMDhGNDIwMTA0M0YKLToxMDEzMDAwMDhGODMwMDIwOTc0NDAxMEMzQzA1MDgwMDk0QTU0RTk2NUQKLToxMDEzMTAwMEFDNjIwMDAwOTc2MjAwMkMwMDA0MjQwMDMwNDJGRkZGMDIKLToxMDEzMjAwMDAwODIyMDI1M0MwMjQwMEUwMEEyMjgyNUFDNjQwMDA0NjcKLToxMDEzMzAwMEFDNjAwMDA4QUM2MDAwMENBQzYwMDAxMEFDNjAwMDE0NDUKLToxMDEzNDAwMEFDNjAwMDE4QUM2NTAwMUMwQTAwMDRDMzI0MDQwMDAxNTIKLToxMDEzNTAwMDBFMDAwMzM1MDIwMDIwMjFBNzYwMDAwODBFMDAwMzNFQTYKLToxMDEzNjAwMDAyMDAyMDIxMDIwMDIwMjEwRTAwMDM0MzI0MDUwMDAxNzkKLToxMDEzNzAwMDNDMDIwODAwOEM0MjAwMjAxMDQwMDA0MjhGQkYwMDE0NDUKLToxMDEzODAwMDBFMDAwNTY0MDAwMDAwMDA5NzQyMDEwQzhGODMwMDIwQ0UKLToxMDEzOTAwMDNDMDUwODAwOTRBNTRFOTYwMDAyMTQwMEFDNzAwMDAwQjUKLToxMDEzQTAwMEFDNjIwMDA0QUM2MDAwMDg4RjY0MDA0QzNDMDI0MDFGM0IKLToxMDEzQjAwMDAwQTIyODI1QUM2NDAwMEM4RjYyMDA1MDI0MDQwMDAxQjgKLToxMDEzQzAwMEFDNjIwMDEwOEY2MjAwNTRBQzYyMDAxNEFDNjAwMDE4NzQKLToxMDEzRDAwMEFDNjUwMDFDOEZCRjAwMTQ4RkIwMDAxMDBBMDAwNTg5OTcKLToxMDEzRTAwMDI3QkQwMDE4OTM2MjAwMDAyNDAzMDAyMDMwNDIwMEZGNTQKLToxMDEzRjAwMDEwNDMwMDI0OEZCRjAwMTQwRTAwMEZENzAyMDAyMDIxREQKLToxMDE0MDAwMDEwNDAwMDIwOEZCRjAwMTQwMjAwMjAyMThGQjAwMDEwNzgKLToxMDE0MTAwMDAwMDAyODIxMEEwMDAzNDMyN0JEMDAxODAyMDAyMDIxRjQKLToxMDE0MjAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMDY1MTI3QkQwMDE4QUUKLToxMDE0MzAwMDk3NDUwMTBDMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwQ0YKLToxMDE0NDAwMDBBMDAwNjcxMjdCRDAwMTgwMjAwMjAyMThGQjAwMDEwOEQKLToxMDE0NTAwMDBBMDAwNjk2MjdCRDAwMTg5MzQ1MDEwRDAyMDAyMDIxQzEKLToxMDE0NjAwMDhGQjAwMDEwMEEwMDA2RTAyN0JEMDAxODAyMDAyMDIxRkUKLToxMDE0NzAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMDZCQzI3QkQwMDE4RjMKLToxMDE0ODAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4QzQKLToxMDE0OTAwMDhGNDIwMjc4MDQ0MEZGRkUzNDgyMDA4MEFGNDIwMjQwNTcKLToxMDE0QTAwMDI0MDIwMDAyQTM0MjAyNDQzQzAyMTAwMDAzRTAwMDA4QjAKLToxMDE0QjAwMEFGNDIwMjc4M0MwNDA4MDA5NDg0NEVBMjNDMDIwODAwMkIKLToxMDE0QzAwMDhDNDI0RUFDMzA4M0ZGRkYwMDAzMThDMDAwNDMxMDIxNTQKLToxMDE0RDAwMEFGNDIwMDNDM0MwMjA4MDA4QzQyNEVBOEFGNDIwMDM4QUMKLToxMDE0RTAwMDNDMDIwMDUwMzQ0MjAwMDhBRjQyMDAzMDAwMDAwMDAwQ0YKLToxMDE0RjAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDIwODkKLToxMDE1MDAwMDEwNDBGRkZEMDAwMDAwMDA4RjQyMDQwMDNDMDEwODAwNzUKLToxMDE1MTAwMEFDMjI0RTk4OEY0MjA0MDQzQzAxMDgwMEFDMjI0RTlDNDEKLToxMDE1MjAwMDNDMDIwMDIwQUY0MjAwMzAwMDAwMDAwMDNDMDIwODAwRjYKLToxMDE1MzAwMDk0NDI0RUEwM0MwMzA4MDA5NDYzNEVBNDNDMDUwODAwNkUKLToxMDE1NDAwMDk0QTU0RUE2MjQ4NDAwMDEwMDQzMTAyMTMwODNGRkZGQTAKLToxMDE1NTAwMDNDMDEwODAwQTQyMjRFQTAzQzAxMDgwMEE0MjQ0RUEyOTUKLToxMDE1NjAwMDE0NjUwMDAzMDAwMDAwMDAzQzAxMDgwMEE0MjA0RUEyMDYKLToxMDE1NzAwMDAzRTAwMDA4MDAwMDAwMDAzQzA1MDAwQTI3QkRGRkU4NkEKLToxMDE1ODAwMDAzNDUyODIxM0MwNDA4MDAyNDg0NEU4OEFGQkYwMDEwODYKLToxMDE1OTAwMDBFMDAwNUVFMjQwNjAwMEEzQzAyMDgwMDk0NDI0RThBMjIKLToxMDE1QTAwMDNDMDMwODAwOTQ2MzRFQTYzMDQyMDAwRjI0NDIwMDAzMUYKLToxMDE1QjAwMDAwNDMxODA0MjQwMjdGRkYwMDQzMTAyQjEwNDAwMDAyNTgKLToxMDE1QzAwMEFGODMwMDFDMDAwMDAwMEQwRTAwMDRGQjAwMDAwMDAwQjMKLToxMDE1RDAwMDNDMDIwODAwOTQ0MjRFOTI4RkJGMDAxMDI3QkQwMDE4QjUKLToxMDE1RTAwMDAzRTAwMDA4QTc0MjAwQTIzQzAyMDAwQTAzNDIxMDIxQzcKLToxMDE1RjAwMDk0NDMwMDA2M0MwMjA4MDA5NDQyNEU5MjNDMDEwODAwQ0QKLToxMDE2MDAwMEE0MjM0RThFMDA0MzEwMjM4RjgzMDAxQzAwMDIxNDAwN0QKLToxMDE2MTAwMDAwMDIxNDAzMDA0MzEwMkIwM0UwMDAwODM4NDIwMDAxQ0QKLToxMDE2MjAwMDI3QkRGRkU4QUZCRjAwMTAzQzAyMDAwQTAzNDIxMDIxQjMKLToxMDE2MzAwMDk0NDIwMDA2M0MwMTA4MDBBNDIyNEU4RTBFMDAwNTQ4OEMKLToxMDE2NDAwMDAwMDAwMDAwNTQ0MEZGRjkzQzAyMDAwQThGQkYwMDEwNjgKLToxMDE2NTAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwNUEKLToxMDE2NjAwMDBFMDAwNTQ4MDAwMDAwMDAxMDQwMDAwMzAwMDAwMDAwQ0MKLToxMDE2NzAwMDBFMDAwNTU2MDAwMDAwMDAzQzAyMDgwMDhDNDI0RTk4MDcKLToxMDE2ODAwMDhGQkYwMDEwMjc0MzA0MDBBRjQyMDAzODNDMDIwODAwMUYKLToxMDE2OTAwMDhDNDI0RTlDMjdCRDAwMThBRjgzMDAyMEFGNDIwMDNDMTcKLToxMDE2QTAwMDNDMDIwMDA1QUY0MjAwMzAwM0UwMDAwOEFGODAwMDE4QTQKLToxMDE2QjAwMDhGODIwMDE4M0MwMzAwMDYwMDAyMTE0MDAwNDMxMDI1RjEKLToxMDE2QzAwMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMDE2RDAwMDhGNDIwMDAwMzA0MjAwMTAxMDQwRkZGRDI3NDIwNDAwRkUKLToxMDE2RTAwMEFGODIwMDIwMDNFMDAwMDhBRjgwMDAxODNDMDYwODAwMkQKLToxMDE2RjAwMDhDQzY0RTlDOEY4NTAwMTg4RjgzMDAyMDNDMDIwODAwMEEKLToxMDE3MDAwMDk0NDI0RTkyMjdCREZGRTAyNEE1MDAwMTI0NjMwMDIwRUYKLToxMDE3MTAwMDI0NDIwMDAxMjRDNzAwMjBBRkIxMDAxNEFGQjAwMDEwNzQKLToxMDE3MjAwMEFGQkYwMDE4QUY4NTAwMThBRjgzMDAyMDNDMDEwODAwNTAKLToxMDE3MzAwMEE0MjI0RTkyMzA5MDAwRkYzQzAxMDgwMEFDMjc0RTlDNDIKLToxMDE3NDAwMDA0QzEwMDA4MDAwMDg4MjEwNEUwMDAwNjAwMDAwMDAwMzkKLToxMDE3NTAwMDNDMDIwODAwOEM0MjRFOTgyNDQyMDAwMTNDMDEwODAwRTMKLToxMDE3NjAwMEFDMjI0RTk4M0MwMjA4MDA5NDQyNEU5MjNDMDMwODAwODIKLToxMDE3NzAwMDk0NjM0RUEwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxNDEKLToxMDE3ODAwMDAwNDQxMDI1MTQ0MDAwMDQ4RjgzMDAxODI0MDIwMDEwMjgKLToxMDE3OTAwMDE0NjIwMDBGMDAwMDAwMDAwRTAwMDU3QTI0MTEwMDAxMDEKLToxMDE3QTAwMDNDMDMwODAwOTQ2MzRFOTIzQzAyMDgwMDk0NDI0RUEwMTEKLToxMDE3QjAwMDE0NjIwMDAzMDAwMDAwMDAwRTAwMDRGQjAwMDAwMDAwQTMKLToxMDE3QzAwMDE2MDAwMDAzMDAwMDAwMDAwRTAwMDU2NDAwMDAwMDAwODkKLToxMDE3RDAwMDNDMDMwODAwOTQ2MzRFOTYzQzAyMDgwMDk0NDI0RTk0RTkKLToxMDE3RTAwMDI0NjMwMDAxMzA2NEZGRkYzQzAxMDgwMEE0MjM0RTk2RUYKLToxMDE3RjAwMDE0ODIwMDAzMDAwMDAwMDAzQzAxMDgwMEE0MjA0RTk2NjMKLToxMDE4MDAwMDEyMDAwMDA2MDAwMDAwMDAzQzAyMDgwMDk0NDI0RTkyQzQKLToxMDE4MTAwMEE3NDIwMEEyMEEwMDA1REMwMjIwMTAyMTBFMDAwNTQ4QTQKLToxMDE4MjAwMDAwMDAwMDAwMTA0MDAwMDQwMjIwMTAyMTBFMDAwNTU2QTgKLToxMDE4MzAwMDAwMDAwMDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OUIKLToxMDE4NDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDMwODRGRkZGQTgKLToxMDE4NTAwMDMwQTVGRkZGMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwRTUKLToxMDE4NjAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxNkYKLToxMDE4NzAwMDBBMDAwNUU0MDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxOEMKLToxMDE4ODAwMDEwQzAwMDA2MjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0OUYKLToxMDE4OTAwMEFDODIwMDAwMEEwMDA1RUUyNDg0MDAwNDAzRTAwMDA4ODYKLToxMDE4QTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwODkKLToxMDE4QjAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGN0YKLToxMDE4QzAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTIKLToxMDE4RDAwMDI0MDIwMDAxQUY2MjAwMENBNzYyMDAxMEE3NjIwMDEyOTAKLToxMDE4RTAwMEE3NjIwMDE0MDNFMDAwMDhBNzYyMDAxNjMwODIwMDdGQTAKLToxMDE4RjAwMDAzNDIxMDIxM0MwODAwMEUwMDQ4MTgyMTNDMDIwODAwNTkKLToxMDE5MDAwMDhDNDIwMDIwMjdCREZGRDgyNDA3RkY4MEFGQjMwMDFDMDYKLToxMDE5MTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwREQKLToxMDE5MjAwMDAwODA4MDIxMzBCMTAwRkYwMDg3MjAyNDMwRDIwMEZGRUEKLToxMDE5MzAwMDEwNDAwMDJGMDAwMDk4MjFBRjQ0MDAyQzkwNjIwMDAwNUUKLToxMDE5NDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwRTAwMDAwMDAwNEEKLToxMDE5NTAwMDNDMDIwODAwOEM0MjAwRTAwMjAyMTAyMTAwNDcxMDI0RTMKLToxMDE5NjAwMEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFMDAyMDIxMDIxMzEKLToxMDE5NzAwMDMwNDIwMDdGMDM0MjEwMjEwMDQ4MTAyMTk0NDIwMEQ0REQKLToxMDE5ODAwMDMwNTNGRkZGMEUwMDA1NjQwMDAwMDAwMDNDMDIwODAwMTkKLToxMDE5OTAwMDk0NDI0RTk2OEY4MzAwMjAwMDExMzQwMDAwQzIzMDI1RkYKLToxMDE5QTAwMDAwMTIyQzAwM0MwMjQwMDAwMEMyMzAyNTM0QTUwMDAxOEEKLToxMDE5QjAwMEFDNzAwMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4MzQKLToxMDE5QzAwMEFDNzMwMDA4OEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDMjYKLToxMDE5RDAwMEFDNjUwMDEwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxNEUKLToxMDE5RTAwMEFDNjAwMDE4MjdCRDAwMjgwQTAwMDU4OUFDNjYwMDFDMDEKLToxMDE5RjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NkUKLToxMDFBMDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODkzNDMwMTBGQUEKLToxMDFBMTAwMDI0MDIwMDEwMTA2MjAwMEUyODY1MDAxMTEwQTAwMDA3QkIKLToxMDFBMjAwMDI0MDIwMDEyMjQwMjAwMDgyNDA1MDAzQTEwNjIwMDA2NzUKLToxMDFBMzAwMDAwMDAzMDIxMDNFMDAwMDgwMDAwMDAwMDI0MDUwMDM1MEMKLToxMDFBNDAwMDE0NjJGRkZDMDAwMDMwMjEwQTAwMDYwOTAwMDAwMDAwQkIKLToxMDFBNTAwMDhGNDIwMDc0MjQ0MjBGQTAwM0UwMDAwOEFGNjIwMDBDMjQKLToxMDFBNjAwMDI3QkRGRkU4QUZCRjAwMTAwRTAwMDM0MzI0MDUwMDAxQUYKLToxMDFBNzAwMDhGQkYwMDEwMjQwMjAwMDFBNzYyMDAxMjI3QkQwMDE4Q0EKLToxMDFBODAwMDI0MDIwMDAxMDNFMDAwMDhBMzYwMDAyMjI3QkRGRkUwNUMKLToxMDFBOTAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxODMwQjFGRkZGRkUKLToxMDFBQTAwMDBFMDAwMzM1MDA4MDgwMjE5MzYyMDAzRjI0MDMwMDA0NzAKLToxMDFBQjAwMDMwNDIwMEZGMTQ0MzAwMEMwMjAwMjAyMTEyMjAwMDA4RDUKLToxMDFBQzAwMDI0MDIwMDBBMEUwMDA2MDIwMDAwMDAwMDkzNjIwMDA1RDYKLToxMDFBRDAwMDI0MDNGRkZFMDA0MzEwMjRBMzYyMDAwNTI0MDIwMDEyMjkKLToxMDFBRTAwMEEzNjIwMDNGMDIwMDIwMjEwRTAwMDMzRUEzNjAwMDgxOUMKLToxMDFBRjAwMDE2MjAwMDAzMDIwMDIwMjEwRTAwMDY2NjAwMDAwMDAwRjAKLToxMDFCMDAwMDAyMDAyMDIxMzIyNjAwRkY4RkJGMDAxODhGQjEwMDE0ODEKLToxMDFCMTAwMDhGQjAwMDEwMjQwNTAwMzgwQTAwMDYwOTI3QkQwMDIwRjgKLToxMDFCMjAwMDI3QkRGRkUwQUZCRjAwMUNBRkIyMDAxOEFGQjEwMDE0N0IKLToxMDFCMzAwMEFGQjAwMDEwMEUwMDAzMzUwMDgwODAyMTBFMDAwNjAyQjkKLToxMDFCNDAwMDAwMDAwMDAwOTM2MjAwM0YyNDEyMDAxODMwNTEwMEZGOTMKLToxMDFCNTAwMDEyMzIwMDAzMDIwMDIwMjEyNDAyMDAxMkEzNjIwMDNGN0YKLToxMDFCNjAwMDkzNjIwMDA1MjQwM0ZGRkUwMDQzMTAyNDBFMDAwMzNFOTEKLToxMDFCNzAwMEEzNjIwMDA1MDIwMDIwMjEyNDA1MDAyMDE2MzIwMDA3ODAKLToxMDFCODAwMDAwMDAzMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0RUQKLToxMDFCOTAwMDhGQjAwMDEwMEEwMDAzNDMyN0JEMDAyMDhGQkYwMDFDMzgKLToxMDFCQTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM5RDcKLToxMDFCQjAwMDBBMDAwNjA5MjdCRDAwMjAyN0JERkZFOEFGQjAwMDEwQ0UKLToxMDFCQzAwMEFGQkYwMDE0OTc0MjAxMEMyNDA1MDAzNjAwODA4MDIxMkQKLToxMDFCRDAwMDE0NDAwMDEwMzA0NjAwRkYwRTAwMDMzNTAwMDAwMDAwRTYKLToxMDFCRTAwMDI0MDIwMDEyQTM2MjAwM0Y5MzYyMDAwNTM0NDIwMDEwRjkKLToxMDFCRjAwMDBFMDAwNjAyQTM2MjAwMDUwRTAwMDMzRTAyMDAyMDIxMzMKLToxMDFDMDAwMDAyMDAyMDIxMEUwMDAzNDMyNDA1MDAyMDBBMDAwNkQ1MEYKLToxMDFDMTAwMDAwMDAwMDAwMEUwMDA2MDkwMDAwMDAwMDBFMDAwMzM1NjEKLToxMDFDMjAwMDAyMDAyMDIxOTM2MjAwMjMyNDAzRkY5RjAyMDAyMDIxNTEKLToxMDFDMzAwMDAwNDMxMDI0OEZCRjAwMTQ4RkIwMDAxMEEzNjIwMDIzNTQKLToxMDFDNDAwMDBBMDAwMzNFMjdCRDAwMTgyN0JERkZFMEFGQkYwMDE4MDQKLToxMDFDNTAwMEFGQjEwMDE0QUZCMDAwMTAzMEIxMDBGRjBFMDAwMzM1N0IKLToxMDFDNjAwMDAwODA4MDIxMjQwMjAwMTIwRTAwMDYwMkEzNjIwMDNGQzEKLToxMDFDNzAwMDBFMDAwMzNFMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxMUMKLToxMDFDODAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1RUQKLToxMDFDOTAwMDBBMDAwNjA5MjdCRDAwMjBBMzgwMDAyQzAzRTAwMDA4RUQKLToxMDFDQTAwMEEzODAwMDJEOEY0MjAyNzgwNDQwRkZGRThGODIwMDM0MTMKLToxMDFDQjAwMEFGNDIwMjQwMjQwMjAwMDJBMzQyMDI0NDNDMDIxMDAwNTAKLToxMDFDQzAwMDAzRTAwMDA4QUY0MjAyNzgzQzAzNjAwMDhDNjI1NDAwREQKLToxMDFDRDAwMDMwNDIwMDA4MTQ0MEZGRkQwMDAwMDAwMDhDNjI1NDA4RjAKLToxMDFDRTAwMEFGODIwMDAwMjQwMjAwNTJBQzYwNTQwOEFDNjQ1NDMwNEYKLToxMDFDRjAwMEFDNjI1NDM0MjQwMjAwMDgwM0UwMDAwOEFDNjI1NDAwRDMKLToxMDFEMDAwMDNDMDI2MDAwOEM0MjU0MDAzMDQyMDAwODEwNDAwMDA1NDQKLToxMDFEMTAwMDNDMDM2MDAwOEM2MjU0MDAzMDQyMDAwODE0NDBGRkZEMTgKLToxMDFEMjAwMDAwMDAwMDAwOEY4MzAwMDAzQzAyNjAwMDAzRTAwMDA4MTgKLToxMDFEMzAwMEFDNDM1NDA4OTBBMzAwMDAyNDAyMDAwNTAwODA0MDIxMTkKLToxMDFENDAwMDMwNjMwMDNGMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxNkMKLToxMDFENTAwMDkwQTIwMDFDOTRBMzAwMUUzMDQ5MDBGRjMwNkFGRkZGRDAKLToxMDFENjAwMEFEMDAwMDBDQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0ODEKLToxMDFENzAwMDhEMDUwMDFDOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMjAKLToxMDFEODAwMDAwMDIxMTAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzRTIKLToxMDFEOTAwMDAwQTIxMDJCMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDRTEKLToxMDFEQTAwMEFEMDQwMDE4QTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MTUKLToxMDFEQjAwMDAzRTAwMDA4QTUwQTAwMjI4RjQyMDFGODA0NDBGRkZFNUMKLToxMDFEQzAwMDI0MDIwMDAyQUY0NDAxQzBBMzQyMDFDNDNDMDIxMDAwM0YKLToxMDFERDAwMDAzRTAwMDA4QUY0MjAxRjgzQzAyMDgwMDhDNDIwMEI0NjYKLToxMDFERTAwMDI3QkRGRkU4QUZCRjAwMTQyNDQyMDAwMUFGQjAwMDEwRDAKLToxMDFERjAwMDNDMDEwODAwQUMyMjAwQjQ4RjQzMDAyNDNDMDIwMDFGQzkKLToxMDFFMDAwMDMwQUEwMEZGMzQ0MkZGODAzMEQ4MDBGRjAwNjI4MDI0RjcKLToxMDFFMTAwMDAwODBGODIxMzBFRjAwRkYxMTU4MDAzQjAxNDA1ODIxQUQKLToxMDFFMjAwMDI0MENGRjgwM0MxOTAwMEEzMTYzMDA3RjAwMDMxMEMwQkUKLToxMDFFMzAwMDAwMDMxOTQwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDQkIKLToxMDFFNDAwMDI1NjgwMDAxMzEwRDAwN0YwM0UyMTAyMTAwNDMxMDIxQkQKLToxMDFFNTAwMDMwNDMwMDdGMDM0MzE4MjEwMDRDMTAyNDAwNzk0ODIxQUYKLToxMDFFNjAwMEFGNDIwMDI0OEQyMjAwMjQwMTZDMTgyNDAwNkM3MDI2REYKLToxMDFFNzAwMEFEMjIwMDBDOEQyMjAwMjQzMTA4MDBGRkFEMjIwMDEwOUQKLToxMDFFODAwMDk1MjIwMDE0OTUyMzAwMjA4RDI3MDAxQzMwNDJGRkZGNkYKLToxMDFFOTAwMDMwNjNGRkZGOEQyNjAwMTgwMDQzMTAyMzAwMDIxMTAwNUQKLToxMDFFQTAwMDAwMDIyN0MzMDA0MDI4MjEwMEM0MzAyMzAwRTIxMDJCODkKLToxMDFFQjAwMDAwQzIzMDIzMDBFNTM4MjNBRDI3MDAxQ0FEMjYwMDE4RjIKLToxMDFFQzAwMDk1MjIwMDIwQTUyMjAwMTQ5NTIyMDAyMjE1NEIwMDBBMUQKLToxMDFFRDAwMEE1MjIwMDE2OEQyMzAwMjQ4RDIyMDAwODI1NDYwMDAxMkUKLToxMDFFRTAwMDMxNDUwMDgwMTQ2MjAwMDQzMEM0MDA3RjEwOEYwMDAyNkUKLToxMDFFRjAwMDM4QUEwMDgwMDBDMDUwMjE1MUFGMDAwMTMxQzgwMEZGNTYKLToxMDFGMDAwMDE1MThGRkM5MDEwMDU4MjE4Rjg0MDAzNDMwODIwMDdGRUEKLToxMDFGMTAwMDAzNDIxODIxM0MwMjAwMEEwMDYyMTgyMTI0MDJGRjgwQkIKLToxMDFGMjAwMDAwODIyMDI0QUY0NDAwMjRBMDZBMDA3OUEwNkEwMDgzQzQKLToxMDFGMzAwMDhDNjIwMDUwOEY4NDAwMzRBQzYyMDA3MDhDNjUwMDc0MzkKLToxMDFGNDAwMDNDMDI3RkZGMzQ0MkZGRkYwMEEyMjgyNDBFMDAwNzNDMjIKLToxMDFGNTAwMEFDNjUwMDc0QUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMjgKLToxMDFGNjAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZDMEFGQkUwMDM4NDIKLToxMDFGNzAwMEFGQjcwMDM0QUZCNTAwMkNBRkIyMDAyMEFGQjEwMDFDM0EKLToxMDFGODAwMEFGQjAwMDE4QUZCRjAwM0NBRkI2MDAzMEFGQjQwMDI4MTAKLToxMDFGOTAwMEFGQjMwMDI0OEY0NTAwMjQ4RjQ2MDAyODhGNDMwMDJDQzgKLToxMDFGQTAwMDNDMDIwMDFGMzQ0MkZGODAwMDYyMTgyNDAwQzIzMDI0MkIKLToxMDFGQjAwMDAwODBBODIxQUZBMzAwMTQwMEEyRjAyNDBFMDAwNzAwQTcKLToxMDFGQzAwMEFGQTYwMDEwM0MwMjA4MDA4QzQyMDBFMDI0MTBGRjgwMDUKLToxMDFGRDAwMDAzNjA4ODIxMDJBMjEwMjEwMDUwMTAyNEFGNDIwMDI0ODcKLToxMDFGRTAwMDNDMDIwODAwOEM0MjAwRTAwMkEyMTAyMTMwNDIwMDdGMzcKLToxMDFGRjAwMDAzNDIxODIxM0MwMjAwMEEwMDYyOTAyMTkyNDIwMEQyNjIKLToxMDIwMDAwMDkzNjMwMDg0MzA1NzAwRkYzMDYzMDBGRjI0MDIwMDAxMTcKLToxMDIwMTAwMDEwNjIwMDM0MDM2MDIwMjEyNDAyMDAwMjE0NjIwMDM2QTIKLToxMDIwMjAwMDAwMDAwMDAwMEUwMDEyRTUwMjQwMjgyMTkyMjMwMDgzRTgKLToxMDIwMzAwMDkyMjIwMDgzMzA2MzAwN0YzMDQyMDA3RjAwMDIxMEMwOTQKLToxMDIwNDAwMDAwMDMxOTQwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDQTkKLToxMDIwNTAwMDAyQTIxMDIxMDA0MzM4MjEwMEYwMTAyNEFGNDIwMDI4RDIKLToxMDIwNjAwMDkyMjUwMDc4OTIyNDAwODMzMEUyMDA3RjAzNDIxODIxRjkKLToxMDIwNzAwMDNDMDIwMDBDMTQ4NTAwMDcwMDYyODAyMTI0MDJGRkZGNEYKLToxMDIwODAwMEEyNDIwMEYxMjQwMkZGRkZBNjQyMDBGMjBBMDAwN0Y4NzQKLToxMDIwOTAwMDI0MDJGRkZGOTYwMjAwMjBBMjQyMDBGMTk2MDIwMDIyRDUKLToxMDIwQTAwMEE2NDIwMEYyOEUwMjAwMjRBRTQyMDBGNDkyMjIwMDgzODcKLToxMDIwQjAwMEEyNDIwMEYwOEU0MjAwQzhBRTQyMDBGQzhFNDIwMEM0MzQKLToxMDIwQzAwMEFFNDIwMEY4OEUyMjAwNTBBRTQyMDEwMDhFNDIwMENDOUIKLToxMDIwRDAwMEFFNDIwMTA0OTIyMjAwODUzMDQyMDAzRjBBMDAwODUzQkMKLToxMDIwRTAwMDM0NDIwMDQwMEUwMDEzMDgwMjQwMjgyMTkyMjIwMDg1NEQKLToxMDIwRjAwMDBBMDAwODUzMzA0MjAwM0Y5MzYyMDA4NTI0MDNGRkRGNEIKLToxMDIxMDAwMDMwNDIwMDNGQTM2MjAwODU5MzYyMDA4NTAwNDMxMDI0QTMKLToxMDIxMTAwMEEzNjIwMDg1OTM2MzAwODM5MzYyMDA3ODMwNzQwMEZGQUMKLToxMDIxMjAwMDMwNDIwMEZGMTA1NDAwMzYyNDBBRkY4MDNDMEMwMDBDQTMKLToxMDIxMzAwMDMyODMwMDdGMDAwMzEwQzAwMDAzMTk0MDAwNjIxODIxQTEKLToxMDIxNDAwMDNDMDIwODAwOEM0MjAwREMyNjg4MDAwMTMxMDkwMDdGMzcKLToxMDIxNTAwMDAyQTIxMDIxMDA0MzM4MjEzMEUyMDA3RjAzNDIxODIxRkYKLToxMDIxNjAwMDAwRUExMDI0QUY0MjAwMjgwMDZDODAyMThFMDIwMDI0NzcKLToxMDIxNzAwMDAyOEExODI0MDA2QTU4MjZBRTAyMDAwQzhFMDIwMDI0M0YKLToxMDIxODAwMDMxMDgwMEZGQUUwMjAwMTA5NjAyMDAxNDk2MDMwMDIwRjIKLToxMDIxOTAwMDhFMDcwMDFDMzA0MkZGRkYzMDYzRkZGRjhFMDYwMDE4RTEKLToxMDIxQTAwMDAwNDMxMDIzMDAwMjExMDAwMDAyMjdDMzAwNDAyODIxMzEKLToxMDIxQjAwMDAwQzQzMDIzMDBFMjEwMkIwMEMyMzAyMzAwRTUzODIzOTYKLToxMDIxQzAwMEFFMDcwMDFDQUUwNjAwMTg5NjAyMDAyMEE2MDIwMDE0RkUKLToxMDIxRDAwMDk2MDIwMDIyQTYwMjAwMTY5MjIyMDA3OTMwNDIwMEZGRTkKLToxMDIxRTAwMDEwNTQwMDA3MDAwMDAwMDA1MTM3MDAwMTMxNjgwMEZGNjMKLToxMDIxRjAwMDkyMjIwMDc4MzA0MjAwRkYxNDQ4RkZDRDAxMDBBMDIxNTgKLToxMDIyMDAwMDkyMjIwMDgzQTIyMjAwNzk4RTIyMDA1MDBBMDAwOEIzOTUKLToxMDIyMTAwMEFFMjIwMDcwQTIyMjAwODU4RTIyMDA0QzI0MDVGRjgwOTEKLToxMDIyMjAwMEFFNDIwMTBDOTIyMjAwODUzNDQyMDAyMEEyMjIwMDg1OTkKLToxMDIyMzAwMDkyNDIwMEQxM0MwMzA4MDA4QzYzMDBEQzMwNTQwMEZGNjQKLToxMDIyNDAwMDNDMDIwODAwOEM0MjAwRTQwMDE0MzE0MDAwMTQyMEMwMUQKLToxMDIyNTAwMDAyQTMxODIxMDBDNDIwMjEwMkEyMTAyMTAwNjQzODIxMDkKLToxMDIyNjAwMDAwNDYxMDIxMDA0NTE4MjQwMEU1MjgyNEFGNDUwMDI4MjkKLToxMDIyNzAwMEFGNDMwMDJDMzA0MjAwN0Y5MjQ0MDBEMDMwRTMwMDdGMTcKLToxMDIyODAwMDAzNDIyODIxMDM0MzE4MjEzQzAyMDAwQzAwNjI4MDIxRjQKLToxMDIyOTAwMDNDMDIwMDBFMzA5NjAwRkYwMEEyOTgyMTEyOTYwMDJBMDAKLToxMDIyQTAwMDAwMDAwMDAwOEUwMjAwMEMwMjAwMjAyMTAyNjAyODIxQTQKLToxMDIyQjAwMDEwNDAwMDI1MjYxMDAwMjgwRTAwMDcxQjAwMDAwMDAwMUIKLToxMDIyQzAwMDkyNjIwMDBEMjY4MzAwMDEzMDc0MDBGRjMwNDIwMDdGQ0YKLToxMDIyRDAwMEEyNjIwMDBEMjQwNEZGODAxNjk3RkZGMDI2NzMwMDIwRjEKLToxMDIyRTAwMDNDMDIwODAwOEM0MjAwREMwMDAwQTAyMTAyQTIxMDIxNjgKLToxMDIyRjAwMDAwNDQxMDI0QUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0NTUKLToxMDIzMDAwMDNDMDMwODAwOEM2MzAwREMwMkEyMTAyMTAwNDQxMDI0NkUKLToxMDIzMTAwMEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNDAyQTMxODIxQ0EKLToxMDIzMjAwMDMwNjMwMDdGMDJBMjEwMjEzMDQyMDA3RjAzNDIyMDIxNEYKLToxMDIzMzAwMDAzNDMxODIxM0MwMjAwMEMwMDYyODAyMTNDMDIwMDBFODUKLToxMDIzNDAwMDBBMDAwODc1MDA4Mjk4MjE4RTQyMDBEOEFFMjIwMDUwMDMKLToxMDIzNTAwMDhFNDIwMEQ4QUUyMjAwNzA5MjI1MDA4MzkyNDYwMEQxQjIKLToxMDIzNjAwMDkyMjMwMDgzOTI0NDAwRDEyNDAyRkY4MDAwQTIyODI0RkIKLToxMDIzNzAwMDMwNjMwMDdGMzA4NDAwRkYwMEE2MjgyNTAwNjQxODJBRkYKLToxMDIzODAwMDEwNjAwMDAyMzBBNTAwRkYzOEE1MDA4MEEyMjUwMDgzNjAKLToxMDIzOTAwMEEyMjUwMDc5MEUwMDA3MEUwMDAwMDAwMDkyMjIwMDdFQTgKLToxMDIzQTAwMDAyQTAyMDIxQTIyMjAwN0E4RTIzMDA3NDNDMDI3RkZGMkIKLToxMDIzQjAwMDM0NDJGRkZGMDA2MjE4MjQwRTAwMDczQ0FFMjMwMDc0NzUKLToxMDIzQzAwMDhGQTIwMDEwQUY1RTAwMjQ4RkJGMDAzQ0FGNDIwMDI4RjgKLToxMDIzRDAwMDhGQkUwMDM4OEZBMjAwMTQ4RkI3MDAzNDhGQjYwMDMwNDQKLToxMDIzRTAwMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwNEIKLToxMDIzRjAwMDhGQjEwMDFDOEZCMDAwMTgyN0JEMDA0MDAzRTAwMDA4MUIKLToxMDI0MDAwMEFGNDIwMDJDOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwRDQKLToxMDI0MTAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDBGQkIKLToxMDI0MjAwMDAwODAzMDIxQTBBMDAwMDAzQzAyMDgwMDhDNDIwMEU0QTMKLToxMDI0MzAwMDhGODQwMDM0MDA4MjIwMjEzMDgyMDA3RjAzNDIxODIxRTMKLToxMDI0NDAwMDNDMDIwMDBDMDA2MjE4MjEyNDAyRkY4MDAwODIyMDI0M0MKLToxMDI0NTAwMEFDQzMwMDAwMDNFMDAwMDhBRjQ0MDAyODhDODIwMDAwRjkKLToxMDI0NjAwMDI0NDIwMDIwMDNFMDAwMDhBQzgyMDAwMDk0QzIwMDAwNzcKLToxMDI0NzAwMDNDMDgwODAwOTUwODAwQ0EzMEU3RkZGRjAwODA0ODIxQUIKLToxMDI0ODAwMDAxMDIxMDIxQTRDMjAwMDA5NEMyMDAwMDMwNDJGRkZGRUMKLToxMDI0OTAwMDAwRTIxMDJCNTQ0MDAwMDFBNEM3MDAwMDk0QTIwMDAwRTkKLToxMDI0QTAwMDNDMDMwODAwOEM2MzAwQ0MyNDQyMDAwMUE0QTIwMDAwN0QKLToxMDI0QjAwMDk0QTIwMDAwMzA0MkZGRkY1NDQzMDAwNzhGODYwMDI4OUIKLToxMDI0QzAwMDAxMDcxMDJCQTRBMDAwMDA1NDQwMDAwMTAxMDAzODIxOTYKLToxMDI0RDAwMEE0QzcwMDAwOEY4NjAwMjg4Q0M0MDAxQ0FGNDQwMDNDQjkKLToxMDI0RTAwMDk0QTIwMDAwOEY0MzAwM0MzMDQyRkZGRjAwMDIxMEMwNjYKLToxMDI0RjAwMDAwNjIxODIxQUY0MzAwM0M4RjQyMDAzQzAwODIyMDIzNDEKLToxMDI1MDAwMDE4ODAwMDA0MDAwMDAwMDA4Q0MyMDAxODBBMDAwOTE0QTIKLToxMDI1MTAwMDI0NDIwMDAxOENDMjAwMThBRjQyMDAzODNDMDIwMDUwMzcKLToxMDI1MjAwMDM0NDIwMDEwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMDI1MzAwMDAwMDAwMDAwOEY0MjAwMDAzMDQyMDAyMDEwNDBGRkZERUMKLToxMDI1NDAwMDAwMDAwMDAwOEY0MjA0MDRBRDIyMDAwNDhGNDIwNDAwMEEKLToxMDI1NTAwMEFEMjIwMDAwM0MwMjAwMjBBRjQyMDAzMDAzRTAwMDA4NDIKLToxMDI1NjAwMDAwMDAwMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QkIKLToxMDI1NzAwMEFGQjAwMDEwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxQUIKLToxMDI1ODAwMDNDMTIwODAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwMzgKLToxMDI1OTAwMDk2MDMwMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OUYKLToxMDI1QTAwMDhGQjEwMDMwMEUwMDA4RTkwMjQwMzgyMTBBMDAwOTQ2QzgKLToxMDI1QjAwMDAwMDAwMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwNTAKLToxMDI1QzAwMDA0NjEwMDA3QUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MTMKLToxMDI1RDAwMDAwMDAwMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwNTgKLToxMDI1RTAwMDk2MDIwMDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOUEKLToxMDI1RjAwMDk2MjIwMDAwMjQ0MjAwMDFBNjIyMDAwMDhGODIwMDI4QkIKLToxMDI2MDAwMDk2MjMwMDAwOTQ0MjAwMTYxNDQzMDAwNDhGQkYwMDFDNjAKLToxMDI2MTAwMDI0MDIwMDAxQTYyMjAwMDA4RkJGMDAxQzhGQjIwMDE4MDgKLToxMDI2MjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMTgKLToxMDI2MzAwMDhGODkwMDI4MjdCREZGRTBBRkJGMDAxODhEMjIwMDI4M0EKLToxMDI2NDAwMDI3NDgwNDAwMzBFNzAwRkZBRjQyMDAzODhEMjIwMDJDRkQKLToxMDI2NTAwMEFGODgwMDMwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwODIKLToxMDI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMDI2NzAwMDAwMDAwMDAwMDAwMDAwMDA4QzgyMDAwQzhDODIwMDBDMjYKLToxMDI2ODAwMEFEMDIwMDAwOEM4MjAwMTBBRDAyMDAwNDhDODIwMDE4QTQKLToxMDI2OTAwMEFEMDIwMDA4OEM4MjAwMUNBRDAyMDAwQzhDQTIwMDE0NUMKLToxMDI2QTAwMEFEMDIwMDEwOEM4MjAwMjBBRDAyMDAxNDkwODIwMDA1NjMKLToxMDI2QjAwMDMwNDIwMEZGMDAwMjEyMDBBRDAyMDAxODhDQTIwMDE4ODgKLToxMDI2QzAwMEFEMDIwMDFDOENBMjAwMENBRDAyMDAyMDhDQTIwMDEwRjgKLToxMDI2RDAwMEFEMDIwMDI0OENBMjAwMUNBRDAyMDAyODhDQTIwMDIwQjgKLToxMDI2RTAwMEFEMDIwMDJDQUQwNjAwMzBBRDAwMDAzNDk3ODMwMDI2MEIKLToxMDI2RjAwMDM0MDJGRkZGMTQ2MjAwMDIwMDYwMjAyMTM0MDRGRkZGNTcKLToxMDI3MDAwMDEwRTAwMDExQUQwNDAwMzg5NTIzMDAzNjk1MjQwMDM2MDIKLToxMDI3MTAwMDI0MDIwMDAxMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxODIKLToxMDI3MjAwMDkwNjUwMDQwMzA4NDAwMDcwMDgyMTAwNDAwNDUxMDI1QTkKLToxMDI3MzAwMEEwNjIwMDQwOEY4MjAwMjg5NDQyMDA1NjMwNDJGRkZGODIKLToxMDI3NDAwMDBBMDAwOUFEQUQwMjAwM0M5NTIzMDAzNjk1MjQwMDM2MDEKLToxMDI3NTAwMDI0MDIwMDAxMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxNDIKLToxMDI3NjAwMDkwNjUwMDQwMzA4NDAwMDcwMDgyMTAwNDAwMDIxMDI3QUEKLToxMDI3NzAwMDAwNDUxMDI0QTA2MjAwNDBBRDAwMDAzQzAwMDAwMDAwQjUKLToxMDI3ODAwMDAwMDAwMDAwMDAwMDAwMDAzQzAyMDAwNjM0NDIwMDQwNEYKLToxMDI3OTAwMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMDI3QTAwMDhGNDIwMDAwMzA0MjAwMTAxMDQwRkZGRDhGODYwMDI4NEQKLToxMDI3QjAwMEFGODgwMDMwMjRDMjAwNTYyNEM3MDAzQzI0QzQwMDI4M0YKLToxMDI3QzAwMDI0QzUwMDMyMjRDNjAwMzYwRTAwMDkyN0FGQTIwMDEwMkYKLToxMDI3RDAwMDhGQkYwMDE4MDNFMDAwMDgyN0JEMDAyMDhGODMwMDI0NkUKLToxMDI3RTAwMDNDMDUwODAwOENBNTAwRTg4RjgyMDAzNDMwNjMzRkZGNzEKLToxMDI3RjAwMDAwMDMxOTgwMDA0NTEwMjEwMDQzMTAyMTI0MDNGRjgwQUQKLToxMDI4MDAwMDMwNDUwMDdGMDA0MzEwMjRBRjQyMDAyODAzNDUxODIxQzMKLToxMDI4MTAwMDNDMDIwMDBDMDA2MjMwMjE5MEMyMDAwRDAwMDAzODIxMDMKLToxMDI4MjAwMDM0NDIwMDEwQTBDMjAwMEQ4Rjg5MDAyODhGOEEwMDI0MzYKLToxMDI4MzAwMDk1MjMwMDM2MDAwQTEzODIzMDQ4MDAwMzI0MDIwMDAxNjkKLToxMDI4NDAwMEE0QzMwMDBFMTEwMjAwMEIyOTAyMDAwMjEwNDAwMDA1NzMKLToxMDI4NTAwMDI0MDIwMDAyMTEwMDAwMEMyNDAzMDAwMTBBMDAwOUYwMDgKLToxMDI4NjAwMDAwMDAxODIxMTEwMjAwMDYwMDAwMDAwMDBBMDAwOUYwMTMKLToxMDI4NzAwMDAwMDAxODIxOENDMjAwMkMwQTAwMDlGMDI0NDMwMDAxM0EKLToxMDI4ODAwMDhDQzIwMDE0MjQ0MzAwMDE4Q0MyMDAxODAwNDMxMDJCOUEKLToxMDI4OTAwMDE0NDAwMDAzMDAwMDAwMDAwQTAwMDlGOTI0MDcwMDAxQTkKLToxMDI4QTAwMDk1MjIwMDNFMjQ0MjAwMDFBNTIyMDAzRTAwMEExMzgyMjgKLToxMDI4QjAwMDMwNDMwMDAzMkM2MjAwMDIxMDQwMDAwOTAwODAyODIxRjAKLToxMDI4QzAwMDE0NjAwMDA0MDAwMDAwMDA5NEMyMDAzNjBBMDAwQTA5RTcKLToxMDI4RDAwMDMwNDZGRkZGOENDNjAwMzgwQTAwMEEwOTAwODAyODIxMTQKLToxMDI4RTAwMDAwMDAzMDIxM0MwNDA4MDAyNDg0NEVCMDBBMDAwOTVBM0MKLToxMDI4RjAwMDAwMDAwMDAwMjc0OTAxMDA4RDIyMDAwQzk1MjMwMDA2RUUKLToxMDI5MDAwMDAxMjAyMDIxMDAwMjE2MDIzMDQ1MDAzRjMwNjNGRkZGMDYKLToxMDI5MTAwMDI0MDIwMDI3MjhBNjAwMjgxMEEyMDAwRUFGODMwMDI0NUUKLToxMDI5MjAwMDEwQzAwMDA4MjQwMjAwMzEyNDAyMDAyMTEwQTIwMDA5NzYKLToxMDI5MzAwMDI0MDIwMDI1MTBBMjAwMDc5MzgyMDAyRDBBMDAwQTI3MTYKLToxMDI5NDAwMDAwMDAwMDAwMTBBMjAwMDU5MzgyMDAyRDBBMDAwQTI3NTMKLToxMDI5NTAwMDAwMDAwMDAwMEEwMDA5QzUwMDAwMDAwMDBBMDAwNkY3OTgKLToxMDI5NjAwMDAwMDAwMDAwOTUyMzAwMDY5MTI0MDAwNThEMjUwMDBDMzEKLToxMDI5NzAwMDhEMjYwMDEwOEQyNzAwMTg4RDI4MDAxQzhEMjkwMDIwMjEKLToxMDI5ODAwMDI0NDIwMDAxM0MwMTA4MDBBNDIzNEVCNjNDMDEwODAwOEIKLToxMDI5OTAwMEEwMjQ0RUI1M0MwMTA4MDBBQzI1NEVCQzNDMDEwODAwMEIKLToxMDI5QTAwMEFDMjY0RUMwM0MwMTA4MDBBQzI3NEVDODNDMDEwODAwRDQKLToxMDI5QjAwMEFDMjg0RUNDM0MwMTA4MDBBQzI5NEVEMDAzRTAwMDA4MDYKLToxMDI5QzAwMEEzODIwMDJEOEY4NzAwMjgyN0JERkZDMEFGQjMwMDM0M0UKLToxMDI5RDAwMEFGQjIwMDMwQUZCMTAwMkNBRkIwMDAyOEFGQkYwMDM4QUQKLToxMDI5RTAwMDNDMDIwODAwOEM0MjAwRDA5NEUzMDAzMDMwQjBGRkZGN0UKLToxMDI5RjAwMDAwNTAxMDA3MzA0NUZGRkYzMDYzRkZGRjAwQzA5ODIxRjMKLToxMDJBMDAwMEE3QTIwMDEwM0MxMTA4MDA5NjMxMDBDNjE0QTMwMDA2Q0UKLToxMDJBMTAwMDMwOTJGRkZGOENFMjAwMjQyNDQyMDAzMEFGNDIwMDNDQTEKLToxMDJBMjAwMDBBMDAwQTYwOENFMjAwMjA5NEUyMDAzMjMwNDJGRkZGOEMKLToxMDJBMzAwMDU0QTIwMDA4MjdBNDAwMTg4Q0UyMDAyQzI0NDIwMDMwODUKLToxMDJBNDAwMEFGNDIwMDNDOENFMjAwMjhBRjQyMDAzODBBMDAwQTZFMTgKLToxMDJBNTAwMDhGODQwMDI4MjdBNTAwMTAyN0E2MDAyMDAyMjAzODIxRjcKLToxMDJBNjAwMDBFMDAwOEU5QTdBMDAwMjA4RkEyMDAxODI0NDIwMDMwMjEKLToxMDJBNzAwMEFGNDIwMDM4OEZBMjAwMUNBRjQyMDAzQzhGODQwMDI4NzgKLToxMDJBODAwMDNDMDIwMDA1QUY0MjAwMzA5NDgyMDAzNDI3NDMwNDAwMkEKLToxMDJBOTAwMDMwNDJGRkZGMDIwMjEwMkIxNDQwMDAwN0FGODMwMDMwQ0EKLToxMDJBQTAwMDk0ODIwMDU0OTQ4MzAwMzQwMjAyMTAyMTAwNDMxMDIzQzYKLToxMDJBQjAwMDBBMDAwQTgyMzA0M0ZGRkY5NDgzMDA1NDk0ODIwMDM0NUEKLToxMDJBQzAwMDAyMjMxODIxMDA1MDEwMjMwMDYyMTgyMzMwNjNGRkZGRjcKLToxMDJBRDAwMDk0ODIwMDE2MzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwMDAKLToxMDJBRTAwMDBBMDAwQTkwMjQwMzAwMDE5NDgyMDAxNjMwNDJGRkZGN0UKLToxMDJBRjAwMDAwNDMxMDJCMTA0MDAwMDU4RjgyMDAzMDk0ODIwMDE2OTYKLToxMDJCMDAwMDAwNjIxMDIzMzA0M0ZGRkY4RjgyMDAzMEFDNTMwMDAwN0YKLToxMDJCMTAwMEFDNDAwMDA0QUM1MjAwMDhBQzQzMDAwQzNDMDIwMDA2ODAKLToxMDJCMjAwMDM0NDIwMDEwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMDJCMzAwMDAwMDAwMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZERjYKLToxMDJCNDAwMDAwMTAxOEMyMDA2NDE4MjE5MDY1MDA0MDMyMDQwMDA3OEMKLToxMDJCNTAwMDI0MDIwMDAxOEZCRjAwMzg4RkIzMDAzNDhGQjIwMDMwRTEKLToxMDJCNjAwMDhGQjEwMDJDOEZCMDAwMjgwMDgyMTAwNDAwNDUxMDI1ODIKLToxMDJCNzAwMDI3QkQwMDQwMDNFMDAwMDhBMDYyMDA0MDI3QkRGRkE4NzkKLToxMDJCODAwMEFGQjYwMDUwQUZCNTAwNENBRkI0MDA0OEFGQjMwMDQ0OEYKLToxMDJCOTAwMEFGQjEwMDNDQUZCRjAwNTRBRkIyMDA0MEFGQjAwMDM4OUYKLToxMDJCQTAwMDhDOTAwMDAwM0MwMjA4MDA4QzQyMDBFODhGODYwMDM0QzQKLToxMDJCQjAwMDk2MDMwMDAyMjQxM0ZGODAwMEMyMzAyMTMwNjMzRkZGRTAKLToxMDJCQzAwMDAwMDMxOTgwMDBDMzM4MjEwMEYzMTAyNDkwQjIwMDAwRTQKLToxMDJCRDAwMEFGNDIwMDJDOTIwMzAwMDIzMEUyMDA3RjAzNDIzMDIxMUEKLToxMDJCRTAwMDNDMDIwMDBFMDBDMjg4MjEzMDYzMDBDMDI0MDIwMDQwNzUKLToxMDJCRjAwMDAwODBBODIxMDBBMEIwMjExNDYyMDAyNjAwMDBBMDIxQkUKLToxMDJDMDAwMDhFMzQwMDM4OEUyMjAwMTgxNDQwMDAwMjI0MDIwMDAxODUKLToxMDJDMTAwMEFFMjIwMDE4OTIwMjAwMEQzMDQyMDAyMDE0NDAwMDE1MzAKLToxMDJDMjAwMDhGODIwMDM0M0MwMzA4MDA4QzYzMDBEQzAwMTIzOEMwNDMKLToxMDJDMzAwMDAwMTIzMTQwMDA0MzEwMjEwMEM3MzAyMTAwNDYzODIxRTYKLToxMDJDNDAwMDMwRTMwMDA3M0MwMjAwODAzMEU2MDA3ODAwQzIzMDI1MDcKLToxMDJDNTAwMDAzNDMxODIxMDBGMzEwMjRBRjQyMDgwMDI0NjMwOTAwNDUKLToxMDJDNjAwMEFGNDYwODEwOEUyMjAwMTg4QzYzMDAwODAwNDMxMDIxMjQKLToxMDJDNzAwMEFFMjIwMDE4OEUyMjAwMkM4RTIzMDAxODI0NDIwMDAxNjAKLToxMDJDODAwMDAwNjIxODJCMTA2MDAwM0QwMDAwMDAwMDBBMDAwQjQ0OTkKLToxMDJDOTAwMDAwMDAwMDAwOTIwMzAwMDIyNDAyRkZDMDAwNDMxMDI0NDEKLToxMDJDQTAwMDMwNDIwMEZGMTQ0MDAwMDUyNDAyMDAwMUFFMjIwMDE4NEIKLToxMDJDQjAwMDk2MjIwMDM2MEEwMDBCMkQzMDU0RkZGRjhFMjIwMDE0OUUKLToxMDJDQzAwMDI0NDIwMDAxQUUyMjAwMTg5MjAyMDAwMDAwMDIxNjAwMDkKLToxMDJDRDAwMDAwMDIxNjAzMDQ0MTAwMjkwMDAwMDAwMDk2MDIwMDAyRDEKLToxMDJDRTAwMDI3QTQwMDEwMDA4MDI4MjFBN0EyMDAxNjk2MDIwMDAyNDcKLToxMDJDRjAwMDI0MDcwMDAxMDAwMDMwMjEzMDQyRkZGRkFGODIwMDI0OTIKLToxMDJEMDAwMDBFMDAwOTVBQUZBMDAwMUM5NjAzMDAwMjNDMDQwODAwMDQKLToxMDJEMTAwMDhDODQwMEU4OEY4MjAwMzQzMDYzM0ZGRjAwMDMxOTgwMDkKLToxMDJEMjAwMDAwNDQxMDIxMDA0MzEwMjEzMDQzMDA3RjNDMDUwMDBDN0IKLToxMDJEMzAwMDAwNTMxMDI0MDM0MzE4MjFBRjQyMDAyODAwNjUxODIxRDYKLToxMDJENDAwMDkwNjIwMDBEMDAxMjIxNDAzMDQyMDA3RkEwNjIwMDBEMTEKLToxMDJENTAwMDNDMDMwODAwOEM2MzAwRTQ4RjgyMDAzNDAwNDMxMDIxQTAKLToxMDJENjAwMDAwNDQzODIxMzBFMjAwN0YwMzQyMTAyMTAwNDUxMDIxNDkKLToxMDJENzAwMDAwRjMxODI0QUY0MzAwMjhBRUEyMDAwMDkyMjIwMDBERjkKLToxMDJEODAwMDMwNDIwMDEwMTA0MDAwMTMwMkEwMjAyMThGODMwMDI4NDEKLToxMDJEOTAwMDhFQTQwMDAwMDI4MDMwMjE5NDYyMDAzRTI0NDJGRkZGOTYKLToxMDJEQTAwMEE0NjIwMDNFOTQ4NDAwMDI5NjI1MDAwRTMwODRGRkZGNEEKLToxMDJEQjAwMDBFMDAwQTNGMzBBNUZGRkY4RjgyMDAyODk0NDMwMDM0QTUKLToxMDJEQzAwMDk2MjIwMDBFMTQ0MzAwMDMwMkEwMjAyMTI0MDIwMDAxRDkKLToxMDJERDAwMEEzODIwMDJDMDJDMDI4MjEwRTAwMDhDRjAwMDAwMDAwQjIKLToxMDJERTAwMDhGQkYwMDU0OEZCNjAwNTA4RkI1MDA0QzhGQjQwMDQ4OTEKLToxMDJERjAwMDhGQjMwMDQ0OEZCMjAwNDA4RkIxMDAzQzhGQjAwMDM4RDkKLToxMDJFMDAwMDAzRTAwMDA4MjdCRDAwNTg4Rjg1MDAyODI3QkRGRkQwQUMKLToxMDJFMTAwMEFGQjQwMDI4QUZCMjAwMjBBRkJGMDAyQ0FGQjMwMDI0ODYKLToxMDJFMjAwMEFGQjEwMDFDQUZCMDAwMTg5MEE4MDBEMDkwQTYwMEQxQTAKLToxMDJFMzAwMDNDMDIwODAwOEM0MjAwRTQ4RjgzMDAzNDMwQzcwMEZGNUUKLToxMDJFNDAwMEEzQTYwMDEwMDA2MjE4MjEwMDA3MTE0MDAwNjIxODIxOUIKLToxMDJFNTAwMDMwNjIwMDdGMDM0MjIwMjEzQzAyMDAwQzAwODIyMDIxQ0UKLToxMDJFNjAwMDI0MDJGRjgwMDA2MjE4MjQzMTEyMDBGRjhDQjEwMEQ4QzgKLToxMDJFNzAwMEFGQTQwMDE0OENCMzAwREMwMDAwQTAyMUFGNDMwMDI4RjUKLToxMDJFODAwMDEwRjIwMDFGMjQwMjAwMDE4RkE2MDAxNDI3QTQwMDE0RDIKLToxMDJFOTAwMDI3QTUwMDEwOENDMjAwMDQwMjIyODAyMTAyNzAxMDIzOUEKLToxMDJFQTAwMDA0NDAwMDE3MjQwMjAwMDE5MEMzMDAwRDI0MDJGRjgwOUIKLToxMDJFQjAwMDAwNDMxMDI0MzA0MjAwRkYxNDQwMDAwNzAyMDA4ODIxMjQKLToxMDJFQzAwMDkwQzIwMDBEMzQ0MjAwNDAwRTAwMDhDRkEwQzIwMDBEOTkKLToxMDJFRDAwMDBBMDAwQjhCOTNBMjAwMTAwRTAwMEFBRDI0MTQwMDAxMEYKLToxMDJFRTAwMDhGODMwMDI4QUM3MDAwRDg5M0EyMDAxMEEwNjIwMEQxOUMKLToxMDJFRjAwMDkzQTIwMDEwMTQ1MkZGRTU4RkE2MDAxNDI0MDIwMDAxRDMKLToxMDJGMDAwMDE2ODIwMDA0OEZCRjAwMkMwRTAwMDZGNzAwMDAwMDAwQTAKLToxMDJGMTAwMDhGQkYwMDJDOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwMDUKLToxMDJGMjAwMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDMwRUYKLToxMDJGMzAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0NkIKLToxMDJGNDAwMEFGQjAwMDEwQUZCRjAwMjAwMDgwOTgyMTAwRTA4MDIxQ0EKLToxMDJGNTAwMDMwQjFGRkZGMEUwMDA1NjQzMEQyMDBGRjAwMDAwMDAwMUEKLToxMDJGNjAwMDAwMDAwMDAwMDAwMDAwMDA4RjgyMDAyMEFDNTEwMDAwMzMKLToxMDJGNzAwMEFDNTIwMDA0QUM1MzAwMDhBQzQwMDAwQ0FDNDAwMDEwNTQKLToxMDJGODAwMEFDNDAwMDE0QUM0MDAwMTgzQzAzMDgwMDk0NjM0RTk2MUIKLToxMDJGOTAwMDAyMDM4MDI1QUM1MDAwMUMwMDAwMDAwMDAwMDAwMDAwNkYKLToxMDJGQTAwMDAwMDAwMDAwMjQwNDAwMDE4RkJGMDAyMDhGQjMwMDFDMkMKLToxMDJGQjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAwNTg5N0QKLToxMDJGQzAwMDI3QkQwMDI4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0MzkKLToxMDJGRDAwMDMwQTVGRkZGMzBDNjAwRkYwMDgwODAyMTI0MDIwQzgwNTYKLToxMDJGRTAwMEFGNDIwMDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMDJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMEI5QTAwMDAwMDAwMUUKLToxMDMwMDAwMDNDMDQwODAwMjQ4NDAwRTA4QzgyMDAwMDI0MDNGRjgwM0MKLToxMDMwMTAwMDhGQkYwMDE0MDIwMjEwMjEwMDQzMTAyNEFGNDIwMDI0OEQKLToxMDMwMjAwMDhDODIwMDAwM0MwMzAwMEEwMjAyODAyMTMyMTAwMDdGRTMKLToxMDMwMzAwMDAzNTAxMDIxOEZCMDAwMTAwMDQzMTAyMTI3QkQwMDE4NEQKLToxMDMwNDAwMDAzRTAwMDA4QUY4MjAwMjgyN0JERkZFOEFGQkYwMDEwRjMKLToxMDMwNTAwMDhGNDQwMTQwM0MwMzA4MDA4QzYzMDBFMDI0MDJGRjgwQTEKLToxMDMwNjAwMEFGODQwMDM0MDA4MzE4MjEwMDYyMTAyNEFGNDIwMDI0OTIKLToxMDMwNzAwMDNDMDIwMDA4MDM0MjQwMjE5NTA1MDAwMjMwNjMwMDdGQjYKLToxMDMwODAwMDNDMDIwMDBBMDM0MzE4MjEwMDYyMTgyMTMwQTVGRkZGMEIKLToxMDMwOTAwMDM0MDJGRkZGMDAwMDMwMjEzQzA3NjAyMDEwQTIwMDA2MzAKLToxMDMwQTAwMEFGODMwMDI4MjQwMkZGRkZBNTAyMDAwMjk0NjUwMEQ0MkMKLToxMDMwQjAwMDBFMDAwQkJGMzBBNUZGRkY4RkJGMDAxMDI0MDIwQzgwNTUKLToxMDMwQzAwMDI3QkQwMDE4MDNFMDAwMDhBRjQyMDAyNDNDMDIwMDA4QkUKLToxMDMwRDAwMDAzNDI0MDIxOTUwMjAwMDIzQzBBMDgwMDk1NEEwMEM2QkUKLToxMDMwRTAwMDMwNDZGRkZGMTRDMDAwMDczNDAyRkZGRjhGODIwMDI4MjQKLToxMDMwRjAwMDhGODQwMDM0M0MwNzYwMjA5NDQ1MDBENDBBMDAwQzI4REIKLToxMDMxMDAwMDMwQTVGRkZGMTBDMjAwMjQ4Rjg3MDAyODk0RTIwMDU0RUUKLToxMDMxMTAwMDk0RTQwMDE2MzA0NUZGRkYwMEE2MTAyMzAwQTYxODJCRUMKLToxMDMxMjAwMDMwODlGRkZGMTA2MDAwMDQzMDQ0RkZGRjAwQzUxMDIzMEEKLToxMDMxMzAwMDAxMjIxMDIzMzA0NEZGRkYwMDhBMTAyQjEwNDAwMDBDQTYKLToxMDMxNDAwMDAxMkExMDIzMjQwMjAwMDFBNTAyMDAxNjI0MDJGRkZGMTkKLToxMDMxNTAwMEE1MDIwMDAyOTRFNTAwRDQ4Rjg0MDAzNDAwMDAzMDIxRTEKLToxMDMxNjAwMDMwQTVGRkZGM0MwNzYwMjAwQTAwMEJCRjAwMDAwMDAwRjUKLToxMDMxNzAwMDAwNDQxMDJBMTA0MDAwMDgwMDAwMDAwMDk1MDIwMDE2Q0MKLToxMDMxODAwMDMwNDIwMDAxMTA0MDAwMDQwMDAwMDAwMDk3NDIwMDdFMjEKLToxMDMxOTAwMDI0NDIwMDE0QTUwMjAwMTYwM0UwMDAwODAwMDAwMDAwMEQKLToxMDMxQTAwMDhGODQwMDI4MjdCREZGRTBBRkJGMDAxODk0ODIwMDM0NTEKLToxMDMxQjAwMDk0ODMwMDNFMTA2MDAwMUEzMDQ4RkZGRjkzODMwMDJDNzgKLToxMDMxQzAwMDI0MDIwMDAxMTQ2MjAwMjc4RkJGMDAxODhGODIwMDI4OUMKLToxMDMxRDAwMDAwMDgxOEMyMzEwODAwMDcwMDYyMTgyMTI0NDcwMDNBOEQKLToxMDMxRTAwMDI0NDkwMDU0MjQ0NDAwMjAyNDQ1MDAzMDI0NDYwMDM0NUYKLToxMDMxRjAwMDkwNjIwMDQwMzA0MjAwRkYwMTAyMTAwNzMwNDIwMDAxOUYKLToxMDMyMDAwMDEwNDAwMDE2OEZCRjAwMTgwRTAwMDkyN0FGQTkwMDEwNEMKLToxMDMyMTAwMDhGODIwMDI4OTQ0MjAwMzQwQTAwMEM0MTMwNDhGRkZGOUUKLToxMDMyMjAwMDk0ODMwMDM2OTQ4MjAwMzQxMDQzMDAwRThGQkYwMDE4NDAKLToxMDMyMzAwMDk0ODIwMDM2QTQ4MjAwMzQ5NDgyMDA1NkE0ODIwMDU0MDIKLToxMDMyNDAwMDhDODIwMDJDQUM4MjAwMjQ5NDgyMDAzMkE0ODIwMDMwNTQKLToxMDMyNTAwMDk0ODIwMDNDQTQ4MjAwM0E4RkJGMDAxODBBMDAwQzAxM0YKLToxMDMyNjAwMDI3QkQwMDIwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4QTAKLToxMDMyNzAwMEFGQkYwMDEwOEY0QTAxMDAzQzA1MDgwMDhDQTUwMEUwOUMKLToxMDMyODAwMDNDMDIwODAwOTA0MjRFQkMzQzBDMDgwMDk1OEM0RUI2QTcKLToxMDMyOTAwMDAxNDUyODIxMzA0QjAwM0YzMEEyMDA3RjAzNDI0MDIxRUUKLToxMDMyQTAwMDM5NjkwMDMyM0MwMjAwMEEzOTYzMDAzRjJDNjMwMDAxOTcKLToxMDMyQjAwMDAxMDI0MDIxMkQyOTAwMDEyNDAyRkY4MDAwQTIyODI0QzAKLToxMDMyQzAwMDAxMjM0ODI1QUY4QTAwMzQwMDgwMTgyMUFGNDUwMDI0MkYKLToxMDMyRDAwMDAwMDAzMDIxMDA4MDI4MjEyNDA3MDAwMUFGODgwMDI4NDkKLToxMDMyRTAwMDNDMDQwODAwMjQ4NDRFQjBBRjhDMDAyNDE1MjAwMDA2NTYKLToxMDMyRjAwMEEzODAwMDJEMjQwMjAwMjAxNTYyMDAwRTM0MDJGRkZGN0YKLToxMDMzMDAwMDE1ODIwMDBDMDAwMDAwMDAyNDAyMDAyMDE1NjIwMDA1NTgKLToxMDMzMTAwMDAwMDAwMDAwOEM2MzAwMTQyNDAyRkZGRjEwNjIwMDA3MEQKLToxMDMzMjAwMDAwMDAwMDAwMEUwMDA5NUEwMDAwMDAwMDBBMDAwQzlENzkKLToxMDMzMzAwMDAwMDAwMDAwMEUwMDA5QzUwMDYwMjAyMTBFMDAwQzM2QzAKLToxMDMzNDAwMDAwMDAwMDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4NzEKLToxMDMzNTAwMDAzRTAwMDA4QUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwNzkKLToxMDMzNjAwMDI3QkRGRkEwQUZCMTAwM0MwMDgyMTAyMTI0MTFGRjgwRDcKLToxMDMzNzAwMEFGQkUwMDU4QUZCNzAwNTRBRkIyMDA0MEFGQjAwMDM4OTYKLToxMDMzODAwMEFGQkYwMDVDQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4NjMKLToxMDMzOTAwMEFGQjMwMDQ0MDA1MTEwMjQ4RjQ4MDAyNDhGNDkwMDI4MDcKLToxMDMzQTAwMDhGNDcwMDI4QUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMTYKLToxMDMzQjAwMDAwODA5MDIxMjQwNjAwMDYwMDgyMTAyMTMwNDIwMDdGMDgKLToxMDMzQzAwMDAzNDIxODIxM0MwMjAwMEEwMDYyODAyMTNDMDIwMDFGRDcKLToxMDMzRDAwMDM0NDJGRjgwMDBFMjM4MjQyN0E0MDAxMDI2MDUwMEYwQzQKLToxMDMzRTAwMDAxMjJGMDI0MDEwMkI4MjQwRTAwMDVFRUFGQTcwMDMwNDAKLToxMDMzRjAwMDhGQTIwMDE4QUUwMjAwQzQ4RkEyMDAxQ0FFMDIwMEM4NEIKLToxMDM0MDAwMDhGQTIwMDI0QUUwMjAwQ0M5M0E0MDAxMDkyMDMwMEQxM0UKLToxMDM0MTAwMDI0MDJGRjgwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGNjEKLToxMDM0MjAwMDMwODMwMDdGMzEyMjAwN0YwMDYyMTAyQTEwNDAwMDA0QTgKLToxMDM0MzAwMDAwMDMxMEMwMDEzMTEwMjYzMDQ5MDBGRjAwMDMxMEMwMDYKLToxMDM0NDAwMDAwMDMxOTQwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDOTUKLToxMDM0NTAwMDkyMDQwMEQyMDI0MjEwMjEwMDQzMTAyMTAwNTExMDI0OTYKLToxMDM0NjAwMEFGNDIwMDI4OTNBMzAwMTAzMDYzMDA3RjAwMDMxMEMwMTgKLToxMDM0NzAwMDAwMDMxOTQwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDNjUKLToxMDM0ODAwMDAyNDIxMDIxMDA0MzEwMjEzMDQyMDA3RjAzNDIxODIxRTQKLToxMDM0OTAwMDNDMDIwMDBDMDA2MjQwMjE4RkEzMDAxNDI0MDJGRkZGQjUKLToxMDM0QTAwMDEwNjIwMDMwMzA5NTAwRkY5M0EyMDAxMTk1MDMwMDE0QzQKLToxMDM0QjAwMDMwNDQwMEZGMzA2M0ZGRkYwMDY0MTgyQjEwNjAwMDBERTQKLToxMDM0QzAwMDAwMDAwMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4RjQKLToxMDM0RDAwMDMwODRGRkZGMDA0NDIwMjMwMDA0MjEwMDAwMDAxMDIxNUQKLToxMDM0RTAwMDAwRTQzODIxMDBFNDIwMkIwMEMyMzAyMTBBMDAwRDE3MkYKLToxMDM0RjAwMDAwQzQzMDIxOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4QUYKLToxMDM1MDAwMDMwODRGRkZGMDA4MjIwMjMwMDA0MjEwMDAwMDAxMDIxRUUKLToxMDM1MTAwMDAwODAxODIxMDBDMjMwMjMwMEU0MjAyQjAwQzQzMDIzOTcKLToxMDM1MjAwMDAwRTMzODIzQUQwNzAwMUNBRDA2MDAxODkzQTIwMDExN0MKLToxMDM1MzAwMEE1MDIwMDE0OTdBMjAwMTJBNTAyMDAxNjhGQTIwMDE0ODMKLToxMDM1NDAwMEFEMDIwMDEwOEZBMjAwMTRBRDAyMDAwQzkzQTIwMDExNzYKLToxMDM1NTAwMEE1MDIwMDIwOTdBMjAwMTJBNTAyMDAyMjhGQTIwMDE0NEIKLToxMDM1NjAwMEFEMDIwMDI0MjQwNkZGODAwMjQ2MTAyNDMyNTYwMDdGNUMKLToxMDM1NzAwMEFGNDIwMDI0MDM1NjE4MjEzQzAyMDAwQTAwNjI4MDIxNTkKLToxMDM1ODAwMDhFMDIwMDRDOEZBMjAwMjAzMTI0MDA3RjAwMDQyOEMwNEUKLToxMDM1OTAwMEFFMDIwMDUwOEZBMjAwMjAwMDA0MjE0MDAwODUyODIxQTcKLToxMDM1QTAwMEFFMDIwMDcwOTNBMjAwMTAwMTIwODgyMUEyMDIwMDgzQzUKLToxMDM1QjAwMDkzQTIwMDEwQTIwMjAwNzk5MjAyMDA4NTMwNDIwMDNGREYKLToxMDM1QzAwMEEyMDIwMDg1M0MwMjA4MDA4QzQyMDBEQzAyNDIxMDIxNkQKLToxMDM1RDAwMDAwNDUxMDIxMDA0NjEwMjRBRjQyMDAyQzNDMDIwODAwOTgKLToxMDM1RTAwMDhDNDIwMEU0M0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxQTIKLToxMDM1RjAwMDAwNDQxMDIxMDA0NjEwMjRBRjQyMDAyODNDMDIwODAwN0QKLToxMDM2MDAwMDhDNDIwMEU0MDI0MzE4MjEwMDY1MTgyMTAyNDIxMDIxNzcKLToxMDM2MTAwMDAwNDQxMDIxMzA0MjAwN0YzMDYzMDA3RjkzQTUwMDEwRUEKLToxMDM2MjAwMDAzNDIyMDIxMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxODYKLToxMDM2MzAwMDNDMDIwMDBDMTBCMTAwOEMwMDgyNDgyMTMyMzMwMDdGMjQKLToxMDM2NDAwMDE2NjAwMDE5MjQwNEZGODAzQzAyMDgwMDhDNDIwMERDNTQKLToxMDM2NTAwMDAyNDIxMDIxMDA0NDEwMjRBRjQyMDAyQzNDMDIwODAwMUEKLToxMDM2NjAwMDhDNDIwMEU0M0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMjEKLToxMDM2NzAwMDAwNDQxMDI0QUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0QzEKLToxMDM2ODAwMDAyNDMxODIxMzA2MzAwN0YwMjQyMTAyMTMwNDIwMDdGNDQKLToxMDM2OTAwMDAzNDIyMDIxMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxMTYKLToxMDM2QTAwMDNDMDIwMDBDMDA4MjQ4MjE5MTI0MDAwRDI0MTRGRjgwNkMKLToxMDM2QjAwMDAwMDAxMDIxMDA5NDIwMjVBMTI0MDAwRDk1MDQwMDAyOTMKLToxMDM2QzAwMDk1MDUwMDE0OEQwNzAwMUMzMDg0RkZGRjMwQTVGRkZGMTcKLToxMDM2RDAwMDhEMDYwMDE4MDA4NTIwMjMwMDA0MjEwMDAwRTQzODIxMTUKLToxMDM2RTAwMDAwQzIzMDIxMDBFNDIwMkIwMEM0MzAyMUFEMDcwMDFDQjMKLToxMDM2RjAwMEFEMDYwMDE4OTUwMjAwMDJBNTAyMDAxNEE1MDAwMDE2RjAKLToxMDM3MDAwMDhEMDIwMDA4QUQwMjAwMTA4RDAyMDAwOEFEMDIwMDBDMTEKLToxMDM3MTAwMDk1MDIwMDAyQTUwMjAwMjBBNTAwMDAyMjhEMDIwMDA4RUIKLToxMDM3MjAwMEFEMDIwMDI0OTEyMjAwMEQzMDQyMDA0MDEwNDAwMDQyQzIKLToxMDM3MzAwMDI2MjIwMDAxM0MwMjA4MDA4QzQyMDBFMEEzQjMwMDI4Q0UKLToxMDM3NDAwMDNDMTAwMDBBMDI0MjEwMjEwMDU0MTAyNEFGNDIwMDI0MTEKLToxMDM3NTAwMDNDMDIwODAwOEM0MjAwRTBBMzgwMDAyQzI3QTQwMDJDMkYKLToxMDM3NjAwMDAyNDIxMDIxMzA0MjAwN0YwMzQyMTgyMTAwNzAxODIxQ0MKLToxMDM3NzAwMDhDNjIwMEQ4OEQyNjAwMDQyN0E1MDAyOEFGQTkwMDJDNTQKLToxMDM3ODAwMDAwNDYxMDIxQUM2MjAwRDgwRTAwMEFBREFGODMwMDI4QkQKLToxMDM3OTAwMDkzQTMwMDI4OEY4MjAwMjgwRTAwMDZGN0EwNDMwMEQxRDMKLToxMDM3QTAwMDBFMDAwQzM2MDAwMDAwMDAwMjU0MTAyNEFGNDIwMDI0MkEKLToxMDM3QjAwMDNDMDIwODAwOEM0MjAwREMwMDEzMjk0MDAwMTMyMEMwQUEKLToxMDM3QzAwMDAwQTQyMDIxMDI0MjEwMjEwMDQ0MTAyMTAwNTQxMDI0QTIKLToxMDM3RDAwMEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNDNDMDMwODAwOEQKLToxMDM3RTAwMDhDNjMwMERDMDM1NjMwMjEwMjQyMTAyMTAwNDUxMDIxNzkKLToxMDM3RjAwMDAwNTQxMDI0QUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MzAKLToxMDM4MDAwMDAyNDMxODIxMDA2NDE4MjEwMjQyMTAyMTAwNDUxMDIxQjIKLToxMDM4MTAwMDMwNDIwMDdGMzA2MzAwN0YwMzQyMjAyMTAzNDMxODIxQTAKLToxMDM4MjAwMDNDMDIwMDBFMDA2MjQwMjEzQzAyMDAwQzAwRDA4MDIxQ0UKLToxMDM4MzAwMDAwODI0ODIxMjYyMjAwMDEzMDQzMDA3RjE0NzUwMDA1RDQKLToxMDM4NDAwMDMwNDQwMEZGMjQwM0ZGODAwMjIzMTAyNDAwNDMxMDI2OEQKLToxMDM4NTAwMDMwNDQwMEZGOTNBMjAwMTAwMDgwODgyMTI1MDgwMDI4MzIKLToxMDM4NjAwMDE0NDRGRjc2MjUyOTAwMjA5M0E0MDAxMDhGQTMwMDE0OTAKLToxMDM4NzAwMDI0MDJGRkZGMTA2MjAwMEEzMDg5MDBGRjI0ODIwMDAxNDkKLToxMDM4ODAwMDI0ODMwMDAxMzA0MjAwN0YxNDU1MDAwNTMwNjkwMEZGOTkKLToxMDM4OTAwMDI0MDNGRjgwMDA4MzEwMjQwMDQzMTAyNjMwNDkwMEZGREEKLToxMDM4QTAwMDkyMDIwMDc4MzA1MzAwRkYxMTMzMDAzMjAxMjA4ODIxNEEKLToxMDM4QjAwMDNDMDIwODAwOEM0MjAwREMzMjI1MDA3RjAwMDUyMEMwNUQKLToxMDM4QzAwMDAwMDUyOTQwMDBBNDIwMjEwMjQyMTAyMTI0MDZGRjgwODcKLToxMDM4RDAwMDAwNDQxMDIxMDA0NjEwMjRBRjQyMDAyQzNDMDMwODAwOTUKLToxMDM4RTAwMDhDNjMwMERDM0MwMjA4MDA4QzQyMDBFNDAyNDMxODIxOTcKLToxMDM4RjAwMDAyNDIxMDIxMDA0NTEwMjEwMDY0MTgyMTAwNDYxMDI0QzYKLToxMDM5MDAwMDMwNjMwMDdGQUY0MjAwMjgwMzQzMTgyMTNDMDIwMDBFQzEKLToxMDM5MTAwMDAwNjI0MDIxM0MwMjA4MDA4QzQyMDBFNDhEMDYwMDBDNEQKLToxMDM5MjAwMDAxMDAyMDIxMDI0MjEwMjEwMDQ1MTAyMTMwNDIwMDdGNzkKLToxMDM5MzAwMDAzNDIxODIxM0MwMjAwMEMwMDYyNDgyMTEwQzAwMDBEMTcKLToxMDM5NDAwMDAxMjAyODIxMEUwMDA3MUIwMDAwMDAwMDI0MDJGRjgwMzgKLToxMDM5NTAwMDAyMjIxODI0MjYyNDAwMDEwMDYyMjgyNjMwODIwMDdGREIKLToxMDM5NjAwMDE0NTUwMDAyMzA4MzAwRkYzMEEzMDBGRjE0NzNGRkQwMTIKLToxMDM5NzAwMDAwNjA4ODIxOEUwMzAwNzQzQzAyN0ZGRjM0NDJGRkZGMDkKLToxMDM5ODAwMDAwNjIxODI0QUUwMzAwNzQwRTAwMDczQzAyNDAyMDIxQTAKLToxMDM5OTAwMEFGNTcwMDI0OEZBMjAwMzBBRjVFMDAyODhGQkYwMDVDQkQKLToxMDM5QTAwMDhGQkUwMDU4OEZCNzAwNTQ4RkI2MDA1MDhGQjUwMDRDQjMKLToxMDM5QjAwMDhGQjQwMDQ4OEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDRjkKLToxMDM5QzAwMDhGQjAwMDM4MjdCRDAwNjAwM0UwMDAwOEFGNDIwMDJDMzQKLToxMDM5RDAwMDI3QkRGRkQ4QUZCMTAwMUNBRkJGMDAyMEFGQjAwMDE4QUIKLToxMDM5RTAwMDI3NTEwMTg4OTIyMjAwMDMyNDA4RkY4MDNDMDMwMDBBMkIKLToxMDM5RjAwMDMwNDcwMDdGQTNBNzAwMTA4RjQ2MDE4MDNDMDIwODAwREIKLToxMDNBMDAwMDhDNDIwMEUwQUY4NjAwMzQwMEMyMjgyMTAwQTgxMDI0QjgKLToxMDNBMTAwMEFGNDIwMDI0OTIyNDAwMDAzMEEyMDA3RjAzNDIxMDIxMTQKLToxMDNBMjAwMDAwNDMxMDIxQUY4MjAwMjgzMDg0MDA3RjI0MDIwMDAyNkUKLToxMDNBMzAwMDE0ODIwMDI1MDAwNzE5NDAzQzAyMDgwMDhDNDIwMEU0NzMKLToxMDNBNDAwMDAwQzIxMDIxMDA0MzI4MjEzMEEyMDA3RjAzNDIxODIxMjgKLToxMDNBNTAwMDAwQTgxMDI0QUY0MjAwMjgzQzAyMDAwQzAwNjIxODIxOEMKLToxMDNBNjAwMDkwNjIwMDBEQUZBMzAwMTQwMDQ4MTAyNUEwNjIwMDBENjUKLToxMDNBNzAwMDhGQTMwMDE0OTA2MjAwMEQzMDQyMDA0MDUwNDAwMDZBNTUKLToxMDNBODAwMDhGQkYwMDIwOEY4NjAwMjhBMzgwMDAyQzI3QTQwMDE0NUQKLToxMDNBOTAwMDhDQzIwMEQ4OEM2MzAwMDQyN0E1MDAxMDAwNDMxMDIxQkQKLToxMDNBQTAwMDBFMDAwQUFEQUNDMjAwRDg5M0EzMDAxMDhGODIwMDI4OEMKLToxMDNBQjAwMDBFMDAwNkY3QTA0MzAwRDEwRTAwMEMzNjAwMDAwMDAwRjcKLToxMDNBQzAwMDBBMDAwRUQ4OEZCRjAwMjAwRTAwMDcwMDAwQzAyMDIxODIKLToxMDNBRDAwMDBFMDAwNzBFMDAwMDAwMDAzQzAyMDAwODAzNDI4MDIxOTcKLToxMDNBRTAwMDkyMjMwMDAxOTIwMjAwN0IxNDQzMDA0RjhGQkYwMDIwRkQKLToxMDNBRjAwMDkyMjIwMDAwMzA0NDAwN0YyNDAyMDAwNDEwODIwMDE3NEMKLToxMDNCMDAwMDI4ODIwMDA1MTA0MDAwMDYyNDAyMDAwNTI0MDIwMDAzNUMKLToxMDNCMTAwMDEwODIwMDA3OEZCMTAwMUMwQTAwMEVEOTAwMDAwMDAwQkYKLToxMDNCMjAwMDEwODIwMDEyOEZCRjAwMjAwQTAwMEVEOThGQjEwMDFDMzYKLToxMDNCMzAwMDkyMDUwMDgzOTIwNjAwNzg4RTA3MDA3NDhGODQwMDM0MEIKLToxMDNCNDAwMDMwQTUwMEZGMDAwNzNFMDIzMEM2MDBGRjBFMDAwNzQ0MEMKLToxMDNCNTAwMDMwRTcwMDdGMEEwMDBFRDg4RkJGMDAyMDBFMDAwQ0E0QjMKLToxMDNCNjAwMDhGODQwMDM0MEEwMDBFRDg4RkJGMDAyMDI0MDIwQzgwRkUKLToxMDNCNzAwMEFGNDIwMDI0OTIwMjAwM0UzMDQyMDA0MDEwNDAwMDIwM0MKLToxMDNCODAwMDAwMDAwMDAwOTIwMjAwM0UwMDAyMTYwMDAwMDIxNjAzMzAKLToxMDNCOTAwMDA0NDEwMDA2MDAwMDAwMDA4Rjg0MDAzNDBFMDAwNjcxMEUKLToxMDNCQTAwMDI0MDUwMDkzMEEwMDBFRDg4RkJGMDAyMDkyMDIwMDNGMjgKLToxMDNCQjAwMDI0MDMwMDE4MzA0MjAwRkYxNDQzMDAwQzhGODQwMDM0QUIKLToxMDNCQzAwMDI0MDUwMDM5MEUwMDA2MDkwMDAwMzAyMTBFMDAwMzM1REYKLToxMDNCRDAwMDhGODQwMDM0MjQwMjAwMTJBMjAyMDAzRjBFMDAwMzNFMzQKLToxMDNCRTAwMDhGODQwMDM0MEEwMDBFRDg4RkJGMDAyMDI0MDUwMDM2RDEKLToxMDNCRjAwMDBFMDAwNjA5MDAwMDMwMjEwQTAwMEVEODhGQkYwMDIwRjkKLToxMDNDMDAwMDBFMDAwMzM1OEY4NDAwMzQ5MjAyMDAwNTM0NDIwMDIwRjgKLToxMDNDMTAwMEEyMDIwMDA1MEUwMDAzM0U4Rjg0MDAzNDBFMDAxMDhGQjgKLToxMDNDMjAwMDhGODQwMDM0OEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4MkMKLToxMDNDMzAwMDI0MDIwQzgwMjdCRDAwMjgwM0UwMDAwOEFGNDIwMDI0QzYKLToxMDNDNDAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDI3NDMwMTAwNEQKLToxMDNDNTAwMDk0NjIwMDA4MDAwMjE0MDAwMDAyMTQwMzA0NDEwMDAyRjAKLToxMDNDNjAwMDAwMDA4MDIxMjQxMDAwMDE5NDYyMDAwODMwNDIwMDgwOEUKLToxMDNDNzAwMDEwNDAwMDFBMDIwMDEwMjE5NDYyMDAwODMwNDIyMDAwMTcKLToxMDNDODAwMDEwNDAwMDE2MDIwMDEwMjE4QzYzMDAxODNDMDIxQzJEMEQKLToxMDNDOTAwMDM0NDIxOUVEMjQwNjAwMDYxMDYyMDAwRjNDMDc2MDIxMzMKLToxMDNDQTAwMDNDMDIwODAwOEM0MjAwRDQxMDQwMDAwNzhGODIwMDI4OUMKLToxMDNDQjAwMDhGODMwMDI4OTA2MjAwNjIzMDQyMDAwRjM0NDIwMDQwM0YKLToxMDNDQzAwMEEwNjIwMDYyOEY4MjAwMjg4Rjg0MDAzNDk0NDUwMEQ0NjMKLToxMDNDRDAwMDBFMDAwQkJGMzBBNUZGRkYwMjAwMTAyMThGQkYwMDE0QTQKLToxMDNDRTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkUwREIKLToxMDNDRjAwMEFGQjEwMDE0QUZCMDAwMTBBMzgwMDAyQ0FGQkYwMDE4MEMKLToxMDNEMDAwMDhGNDUwMTAwM0MwMzA4MDA4QzYzMDBFMDI0MDJGRjgwMjMKLToxMDNEMTAwMEFGODUwMDM0MDBBMzE4MjEzMDY0MDA3RjAzNDQyMDIxQzQKLToxMDNEMjAwMDAwNjIxODI0M0MwMjAwMEEwMDgyMjAyMUFGNDMwMDI0RDQKLToxMDNEMzAwMDI3NTAwMTAwOEUwMjAwMTQ4QzgzMDBEQ0FGODQwMDI4MjEKLToxMDNENDAwMDAwNDMxMDIzMTg0MDAwMDQwMDAwODgyMThFMDIwMDE0NTQKLToxMDNENTAwMDBFMDAwQjUwQUM4MjAwREM5MjAyMDAwQjI0MDMwMDAyMjgKLToxMDNENjAwMDMwNDIwMEZGMTQ0MzAwMkYwMDAwMDAwMDk2MDIwMDA4QkMKLToxMDNENzAwMDMwNDMwMEZGMjQwMjAwODIxNDYyMDAwNTI0MDIwMDg0MDQKLToxMDNEODAwMDBFMDAwQTBCMDAwMDAwMDAwQTAwMEY2NDAwMDAwMDAwOTMKLToxMDNEOTAwMDE0NjIwMDA5MjQwMjAwODE4RjgyMDAyODhGODQwMDM0N0QKLToxMDNEQTAwMDNDMDc2MDIxOTQ0NTAwRDQ5MjA2MDAwNTMwQTVGRkZGMzIKLToxMDNEQjAwMDBBMDAwRjUzMzBDNjAwRkYxNDYyMDAyNzAwMDAwMDAwMDUKLToxMDNEQzAwMDkyMDIwMDBBMzA0MzAwRkYzMDYyMDAyMDEwNDAwMDA0REQKLToxMDNERDAwMDMwNjIwMDQwOEY4NDAwMzQwQTAwMEY0RjI0MDYwMDQwRjgKLToxMDNERTAwMDEwNDAwMDA0MDAwMzE2MDA4Rjg0MDAzNDBBMDAwRjRGQjcKLToxMDNERjAwMDI0MDYwMDQxMDAwMjE2MDMwNDQxMDAxNzhGODQwMDM0OUEKLToxMDNFMDAwMDI0MDYwMDQyOEY4MjAwMjgzQzA3NjAxOTk0NDUwMEQ0QTQKLToxMDNFMTAwMDMwQTVGRkZGMEUwMDBCQkYwMDAwMDAwMDBBMDAwRjY0N0EKLToxMDNFMjAwMDAwMDAwMDAwOTIwMjAwMEIyNDAzMDAxNjMwNDIwMEZGNDUKLToxMDNFMzAwMDEwNDMwMDA2MDAwMDAwMDA5MjAyMDAwQjI0MDMwMDE3NEMKLToxMDNFNDAwMDMwNDIwMEZGMTQ0MzAwMDQwMDAwMDAwMDBFMDAwRURFQUMKLToxMDNFNTAwMDAwMDAwMDAwMDA0MDg4MjEwRTAwMEMzNjAwMDAwMDAwMjkKLToxMDNFNjAwMDkyMDIwMDBBMzA0MjAwMDgxMDQwMDAwNjI0MDIwQzgwMzIKLToxMDNFNzAwMDhGODUwMDI4M0MwNDAwMDgwRTAwMTJCRDAzNDQyMDIxNTkKLToxMDNFODAwMDI0MDIwQzgwQUY0MjAwMjQ4RkJGMDAxODAyMjAxMDIxQjIKLToxMDNFOTAwMDhGQjAwMDEwOEZCMTAwMTQwM0UwMDAwODI3QkQwMDIwOTAKLToxMDNFQTAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDhGNTAwMDI0NTMKLToxMDNFQjAwMDNDMDMwODAwOEM2MzAwRTA4RjQ1MDEwMDI0MDJGRjgwNzIKLToxMDNFQzAwMDAwQTMxODIxMzA2NDAwN0YwMzQ0MjAyMTAwNjIxODI0REQKLToxMDNFRDAwMDNDMDIwMDBBMDA4MjIwMjFBRjg1MDAzNEFGNDMwMDI0NTkKLToxMDNFRTAwMDkwODIwMDYyQUY4NDAwMjgzMDQyMDAwRjM0NDIwMDUwQkMKLToxMDNFRjAwMEEwODIwMDYyM0MwMjAwMUYzNDQyRkY4MDBFMDAwNkY3RTEKLToxMDNGMDAwMDAyMDI4MDI0QUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMzUKLToxMDNGMTAwMDAzRTAwMDA4MjdCRDAwMTgzQzAyMDgwMDhDNDIwMDIwODYKLToxMDNGMjAwMDEwNDAwMDFEMjc0NTAxMDA5MEEzMDAwOTNDMDIwMDA4MzUKLToxMDNGMzAwMDAzNDIyMDIxMjQwMjAwMTg1NDYyMDAwMzNDMDIwMDA4QkUKLToxMDNGNDAwMDBBMDAwRkE1MjQwMjAwMDgwMzQyMjAyMTI0MDIwMDE2QzMKLToxMDNGNTAwMDE0NjIwMDA1MjQwMjAwMTcyNDAyMDAxMkEwODIwMDNGMTAKLToxMDNGNjAwMDBBMDAwRkFGOTRBNzAwMDg1NDYyMDAwNjk0QTcwMDA4NDcKLToxMDNGNzAwMDkzNjIwMDA1MjQwM0ZGRkUwMDQzMTAyNEEzNjIwMDA1QTIKLToxMDNGODAwMDk0QTcwMDA4OTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2MkUKLToxMDNGOTAwMDBBMDAwQjlBMDAwNzNDMDAwM0UwMDAwODAwMDAwMDAwNDQKLToxMDNGQTAwMDI3NDQwMTAwOTQ4MjAwMDgzMDQ1MDBGRjM4QTMwMDgyQjYKLToxMDNGQjAwMDM4QTIwMDg0MkM2MzAwMDEyQzQyMDAwMTAwNjIxODI1MDUKLToxMDNGQzAwMDEwNjAwMDA2MjQwMjAwODM5MzgyMDAyRDEwNDAwMDBEMzMKLToxMDNGRDAwMDAwMDAwMDAwMEEwMDBDNjkwMDAwMDAwMDE0QTIwMDA1QTcKLToxMDNGRTAwMDI0QTJGRjgwOEY0MzAxMDQzQzAyNjAyMDAzRTAwMDA4MEMKLToxMDNGRjAwMEFDNDMwMDE0MzA0MjAwRkYyQzQyMDAwMjEwNDAwMDAzOEEKLToxMDQwMDAwMDI0MDIwMDIyMEEwMDBGMDkwMDAwMDAwMDE0QTIwMDAzOEQKLToxMDQwMTAwMDAwMDAwMDAwMEEwMDBGNzYwMDAwMDAwMDBBMDAwRjk0NjQKLToxMDQwMjAwMDAwMDAwMDAwOTM2MzAwN0U5MzYyMDA3QTE0NDMwMDA5NEQKLToxMDQwMzAwMDAwMDAyMDIxOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGNjIKLToxMDQwNDAwMDE0NDMwMDA0MjQwNDAwMDE5MzYyMDA3RTI0NDIwMDAxMTIKLToxMDQwNTAwMEEzNjIwMDdFMDNFMDAwMDgwMDgwMTAyMThGNDIwMUY4NzcKLToxMDQwNjAwMDA0NDBGRkZFMjQwMjAwMDJBRjQ0MDFDMEEzNDIwMUM0ODkKLToxMDQwNzAwMDNDMDIxMDAwMDNFMDAwMDhBRjQyMDFGODI3QkRGRkU4NTIKLToxMDQwODAwMEFGQkYwMDEwOTM2MjAwM0YyNDAzMDAwQTMwNDIwMEZGREMKLToxMDQwOTAwMDE0NDMwMDQ2MDAwMDAwMDA4RjYzMDA1NDhGNjIwMDRDMDAKLToxMDQwQTAwMDEwNjIwMDdGMDM2MDMwMjE5MzYyMDAwMDI0MDMwMDUwRkYKLToxMDQwQjAwMDMwNDIwMEZGMTQ0MzAwMkYwMDAwMDAwMDhGNDQwMTQwRjUKLToxMDQwQzAwMDNDMDIwODAwOEM0MjAwRTAyNDAzRkY4MDAwODIxMDIxQTMKLToxMDQwRDAwMDAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwNjAKLToxMDQwRTAwMDhGNjUwMDU0M0MwMzAwMEEwMDgyMjAyMTMwODQwMDdGNDkKLToxMDQwRjAwMDAzNDQxMDIxMDA0MzEwMjFBQzQ1MDEwODk3NjIwMDNDQTUKLToxMDQxMDAwMDhGNjMwMDRDMzA0MkZGRkYwMDAyMTA0MDAwNjIxODIxMTQKLToxMDQxMTAwMEFGNjMwMDVDOEY2MzAwNTQ4RjY0MDA0Qzk3NjIwMDNDNzcKLToxMDQxMjAwMDAwNjQxODIzMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwRDAKLToxMDQxMzAwMDAwNDMxMDJBMTA0MDAwMDYwMDAwMDAwMDhGNjIwMDU0NjcKLToxMDQxNDAwMDhGNjMwMDRDMDA0MzEwMjMwQTAwMTAyNTAwMDIxMDQzMjcKLToxMDQxNTAwMDk3NjIwMDNDMzA0MkZGRkYwMDAyMTA0MEFDQzIwMDY0OTYKLToxMDQxNjAwMDI0MDIwMDAxQTBDMDAwN0NBMEMyMDA4NDI0MDIwQzgwQjQKLToxMDQxNzAwMEFGNDIwMDI0MEUwMDBGRDc4RjQ0MDE0MDEwNDAwMDQ5ODkKLToxMDQxODAwMDhGQkYwMDEwOEY0MzAxNDA4RjQyMDFGODA0NDBGRkZFQjMKLToxMDQxOTAwMDI0MDIwMDAyQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwNEMKLToxMDQxQTAwMEFGNDIwMUY4MEEwMDEwNzc4RkJGMDAxMDkzNjIwMDNGMDIKLToxMDQxQjAwMDI0MDMwMDEwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwRkMKLToxMDQxQzAwMDhGNDQwMTQwMEEwMDEwNjMwMDAwMjgyMTkzNjIwMDNGRTEKLToxMDQxRDAwMDI0MDMwMDE2MzA0MjAwRkYxNDQzMDAwNDI0MDIwMDE0OUMKLToxMDQxRTAwMEEzNjIwMDNGMEEwMDEwNzEwMDAwMDAwMDhGNjIwMDRDQzMKLToxMDQxRjAwMDhGNjMwMDUwMDA0MzEwMjMwNDQxMDAyQThGQkYwMDEwM0EKLToxMDQyMDAwMDkzNjIwMDgxMjQ0MjAwMDFBMzYyMDA4MTkzNjIwMDgxRDUKLToxMDQyMTAwMDNDMDMwODAwOEM2MzAwQzAzMDQyMDBGRjE0NDMwMDEwRDAKLToxMDQyMjAwMDAwMDAwMDAwOTM2MjAwM0YyNDAzMDAwNDMwNDIwMEZGQkUKLToxMDQyMzAwMDE0NDMwMDA2MDAwMDAwMDA4RjQ0MDE0MDhGQkYwMDEwQUYKLToxMDQyNDAwMDI0MDUwMDkzMEEwMDA2NzEyN0JEMDAxODhGNDQwMTQwMjEKLToxMDQyNTAwMDI0MDUwMDkzOEZCRjAwMTAwQTAwMDZFMDI3QkQwMDE4NTgKLToxMDQyNjAwMDhGNDQwMTQwMEUwMDAzMzUwMDAwMDAwMDhGNjIwMDU0QUYKLToxMDQyNzAwMDI0NDJGRkZGQUY2MjAwNTQ4RjYyMDA1MDI0NDJGRkZGRDAKLToxMDQyODAwMEFGNjIwMDUwMEUwMDAzM0U4RjQ0MDE0MDhGNDQwMTQwNTYKLToxMDQyOTAwMDhGQkYwMDEwMjQwNTAwMDQwQTAwMDM0MzI3QkQwMDE4NDcKLToxMDQyQTAwMDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODhGNDIwMTg4NkYKLToxMDQyQjAwMDkzNjMwMDdFMDAwMjE0MDIzMDQ0MDBGRjMwNjMwMEZGNkQKLToxMDQyQzAwMDE0NjQwMDBEMDAwMDAwMDA5MzYyMDA4MDMwNDIwMEZGODMKLToxMDQyRDAwMDEwNDQwMDA5MDAwMDAwMDBBMzY0MDA4MDkzNjIwMDAwMDUKLToxMDQyRTAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwOEIKLToxMDQyRjAwMDBBMDAwN0E4OEY0NDAxODBBMzY0MDA4MDAzRTAwMDA4M0YKLToxMDQzMDAwMDAwMDAwMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0RjEKLToxMDQzMTAwMDkzNjIwMDA1MjQwMzAwMzAzMDQyMDAzMDE0NDMwMDg5Q0EKLToxMDQzMjAwMDAwODA4MDIxM0MwMjA4MDA4QzQyMDAyMDEwNDAwMDgwNjgKLToxMDQzMzAwMDAyMDAyMDIxMEUwMDA1NjQwMDAwMDAwMDhGODUwMDIwOEYKLToxMDQzNDAwMEFDQjAwMDAwOTM2MjAwM0U5MzYzMDAzRjMwNDIwMEZGMzgKLToxMDQzNTAwMDAwMDIxMjAwMzA2MzAwRkYwMDQzMTAyNUFDQTIwMDA0RUQKLToxMDQzNjAwMDkzNjIwMDgyMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA1NTkKLToxMDQzNzAwMDAwMDAwMDAwM0MwMzA4MDA4QzYzMDA0ODBBMDAxMEI1RjAKLToxMDQzODAwMDAwMDAwMDAwOTM2MjAwM0UzMDQyMDA0MDE0NDAwMDAzRjEKLToxMDQzOTAwMDAwMDAxODIxOTM2MjAwODEzMDQzMDBGRjkzNjIwMDgyODUKLToxMDQzQTAwMDAwMDMxRTAwMzA0MjAwRkYwMDAyMTQwMDAwNjIxODI1QzYKLToxMDQzQjAwMEFDQTMwMDA4OEY2MjAwNDBBQ0EyMDAwQzhGNjIwMDQ4RTIKLToxMDQzQzAwMEFDQTIwMDEwOEY2MjAwNENBQ0EyMDAxNDhGNjIwMDUwQUYKLToxMDQzRDAwMDhGNjMwMDRDMDA0MzEwMjMwNDQxMDAwMzAwMDAwMDAwRTEKLToxMDQzRTAwMDBBMDAxMEM5OEY2MjAwNEM4RjYyMDA1MEFDQTIwMDE4MDYKLToxMDQzRjAwMDNDMDIwODAwOTQ0MjRFOTYzQzAzQzAwQjAwMDAyMDIxNzIKLToxMDQ0MDAwMDAwNDMxMDI1MEUwMDA1ODlBQ0EyMDAxQzhGNjIwMDU0RTkKLToxMDQ0MTAwMDhGODQwMDIwQUM4MjAwMDA4RjYyMDA1OEFDODIwMDA0QzAKLToxMDQ0MjAwMDhGNjIwMDVDQUM4MjAwMDg4RjYyMDA2MDhGNDMwMDc0NzIKLToxMDQ0MzAwMDAwNDMxMDIxQUM4MjAwMEM4RjYyMDA2NEFDODIwMDEwM0IKLToxMDQ0NDAwMDk3NjMwMDY4OTc2MjAwNkEwMDAzMUMwMDMwNDJGRkZGMTgKLToxMDQ0NTAwMDAwNjIxODI1QUM4MzAwMTQ5MzYyMDA4MjI0MDMwMDgwNUMKLToxMDQ0NjAwMDMwNDIwMEZGMTQ0MzAwMDMwMDAwMDAwMDBBMDAxMEZENkEKLToxMDQ0NzAwMEFDODAwMDE4OEY2MzAwMEMyNDAyMDAwMTEwNjIwMDBFNTMKLToxMDQ0ODAwMDI0MDJGRkZGOTM2MjAwM0UzMDQyMDA0MDE0NDAwMDBBQzUKLToxMDQ0OTAwMDI0MDJGRkZGOEY2MzAwMEM4RjQyMDA3NDAwNjIxODIzMTgKLToxMDQ0QTAwMDNDMDIwODAwMDA2MjEwMjQxNDQwMDAwMjAwMDAyODIxOTEKLToxMDQ0QjAwMDAwNjAyODIxMDAwNTEwNDNBQzgyMDAxODNDMDIwODAwNkYKLToxMDQ0QzAwMDk0NDI0RTk2M0MwM0MwMEMwMDAwMjAyMTAwNDMxMDI1NkUKLToxMDQ0RDAwMDhGODMwMDIwMEUwMDA1ODlBQzYyMDAxQzhGNjIwMDE4REIKLToxMDQ0RTAwMDhGODMwMDIwM0MwNTA4MDA5NEE1NEU5NjI0MDQwMDAxMEIKLToxMDQ0RjAwMEFDNjIwMDAwQUM2MDAwMDQ4RjY2MDA2QzNDMDI0MDBEQjIKLToxMDQ1MDAwMDAwQTIyODI1QUM2NjAwMDg4RjYyMDBEQ0FDNjIwMDBDQkIKLToxMDQ1MTAwMEFDNjAwMDEwOTM2MjAwMDUwMDAyMTYwMEFDNjIwMDE0NEIKLToxMDQ1MjAwMEFDNjAwMDE4MEUwMDA1ODlBQzY1MDAxQzAyMDAyMDIxNUIKLToxMDQ1MzAwMDhGQkYwMDE0OEZCMDAwMTBBMzYwMDAwNTBBMDAwNEYyQzIKLToxMDQ1NDAwMDI3QkQwMDE4OEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4RDMKLToxMDQ1NTAwMDI3QkQwMDE4OTc0MjAwN0MzMEM2MDBGRkEwODYwMDg0NkIKLToxMDQ1NjAwMDMwNDdGRkZGMjQwMjAwMDUxNEMyMDAwQjI0RTM0NjUwMkQKLToxMDQ1NzAwMDkwQTIwMTEyMkM0MjAwMDcxMDQwMDAwNzI0RTMwQTAwMTkKLToxMDQ1ODAwMDkwQTMwMTEyMjQwMjAwMTQwMDYyMTAwNDAwRTIxMDIxMjIKLToxMDQ1OTAwMDBBMDAxMTM1MzA0N0ZGRkYzMDY3RkZGRjAzRTAwMDA4RDYKLToxMDQ1QTAwMEE0ODcwMDE0QUM4NzAwNEM4Q0EyMDEwODAwODA0MDIxMzUKLToxMDQ1QjAwMDAwQTA0ODIxMDBFMjEwMjMzMEM2MDBGRjE4NDAwMDAzOEQKLToxMDQ1QzAwMDkzQUEwMDEzMjRFMkZGRkNBQ0EyMDEwODMwQzIwMDAxNTAKLToxMDQ1RDAwMDEwNDAwMDA4MDAwMDAwMDA4RDAyMDA1MDAwRTIxMDIzOEYKLToxMDQ1RTAwMDA0NDEwMDEzMjQwNjAwMDU4RDAyMDA1NDEwRTIwMDEwNUYKLToxMDQ1RjAwMDAwMDAwMDAwOEQwMjAwNTQxNEUyMDAxQTAwMDAwMDAwQzgKLToxMDQ2MDAwMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBRDIKLToxMDQ2MTAwMDI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4MzE0NDMwMDA2RjQKLToxMDQ2MjAwMDI0MDIwMDAxMDEwMDIwMjEwMTIwMjgyMTI0MDYwMDA0ODkKLToxMDQ2MzAwMDBBMDAxMTIzMDAwMDAwMDBBMTAwMDA4NDExNDAwMDA5QkQKLToxMDQ2NDAwMEE1MDIwMDE0OEY0MzAxMDA4RjQyMDFGODA0NDBGRkZFRDEKLToxMDQ2NTAwMDI0MDIwMDAyQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwODcKLToxMDQ2NjAwMEFGNDIwMUY4MDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUEKLToxMDQ2NzAwMDhGQTkwMDI4QUZCRjAwMTAwMDgwNDAyMTAwRTkxODIzNTcKLToxMDQ2ODAwMDE4NjAwMDczMzBDNjAwRkZBMDgwMDA3Q0EwODAwMDgxMEQKLToxMDQ2OTAwMDhDQTIwMTA4MDBFMjEwMjMwNDQwMDA0RDAwMDAwMDAwM0QKLToxMDQ2QTAwMDhDODIwMDUwOTQ4MzAwM0M4Qzg0MDA2NDAwNDc0ODIzMzMKLToxMDQ2QjAwMDMwNjNGRkZGMDEyMzE4MjEwMDgzMjAyQjEwODAwMDA0QUEKLToxMDQ2QzAwMDAwMDAwMDAwOEQwMjAwNjQwQTAwMTE4NjAwRTIxMDIxNDMKLToxMDQ2RDAwMDk1MDIwMDNDMzA0MkZGRkYwMTIyMTAyMTAwRTIxMDIxMzAKLToxMDQ2RTAwMEFEMDIwMDVDOTUwMjAwM0M4RDAzMDA1QzMwNDJGRkZGOTAKLToxMDQ2RjAwMDAwMDIxMDQwMDBFMjEwMjEwMDQzMTAyQjEwNDAwMDAzODQKLToxMDQ3MDAwMDAwMDAwMDAwMEEwMDExOTU4RDAyMDA1Qzk1MDIwMDNDM0IKLToxMDQ3MTAwMDMwNDJGRkZGMDAwMjEwNDAwMEUyMTAyMUFEMDIwMDVDQjkKLToxMDQ3MjAwMEExMDAwMDg0QUQwNzAwNEM4Q0EyMDEwODAwRTIxMDIzMTgKLToxMDQ3MzAwMDE4NDAwMDAyMjRFMkZGRkNBQ0EyMDEwODMwQzIwMDAxRDQKLToxMDQ3NDAwMDEwNDAwMDBBMDAwMDAwMDA4RDAyMDA1MDAwRTIxMDIzMUIKLToxMDQ3NTAwMDA0NDEwMDA0MDEwMDIwMjE4RDAyMDA1NDE0RTIwMDAzRjIKLToxMDQ3NjAwMDAwMDAwMDAwMEEwMDExQjcyNDA2MDAwNThEMDIwMDU0NjUKLToxMDQ3NzAwMDE0RTIwMDQ3OEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4QjIKLToxMDQ3ODAwMDMwNDIwMDIwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4MEEKLToxMDQ3OTAwMDkxMDIwMDgzMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxM0QKLToxMDQ3QTAwMDI0MDYwMDA0OEZCRjAwMTAwQTAwMTEyMzI3QkQwMDE4NDMKLToxMDQ3QjAwMEExMDAwMDg0QTUwMjAwMTQ4RjQzMDEwMDhGNDIwMUY4N0MKLToxMDQ3QzAwMDA0NDBGRkZFMjQwMjAwMDIwQTAwMTFEQzAwMDAwMDAwODkKLToxMDQ3RDAwMDhDODIwMDVDMDA0OTEwMjMwMDQzMTAyQjU0NDAwMDAxRTAKLToxMDQ3RTAwMEFDODcwMDVDOTUwMjAwM0MzMDQyRkZGRjAwNjIxMDJCNUEKLToxMDQ3RjAwMDE0NDAwMDA3MjQwMjAwMDI5NTAyMDAzQzhEMDMwMDVDNzcKLToxMDQ4MDAwMDMwNDJGRkZGMDA2MjE4MjFBRDAzMDA1QzI0MDIwMDAyNjkKLToxMDQ4MTAwMEFEMDcwMDRDQTEwMjAwODQwRTAwMEZENzhGNDQwMTAwQTkKLToxMDQ4MjAwMDEwNDAwMDFCOEZCRjAwMTA4RjQzMDEwMDhGNDIwMUY4MjIKLToxMDQ4MzAwMDA0NDBGRkZFMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0QjIKLToxMDQ4NDAwMDNDMDIxMDAwQUY0MjAxRjgwQTAwMTFGMjhGQkYwMDEwQzUKLToxMDQ4NTAwMDMwQzIwMDEwMTA0MDAwMEU4RkJGMDAxMDhDODMwMDVDMkYKLToxMDQ4NjAwMDk0ODIwMDNDMDA2OTE4MjMzMDQyRkZGRjAwNjIxODIxNDcKLToxMDQ4NzAwMDNDMDIzRkZGMzQ0NEZGRkYwMDgzMTAyQjU0NDAwMDAxRjMKLToxMDQ4ODAwMDAwODAxODIxMDEyMzEwMjFBRDAyMDA1QzhGQkYwMDEwQjEKLToxMDQ4OTAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFODhGQUEwMDI4MDUKLToxMDQ4QTAwMEFGQkYwMDEwMDA4MDQwMjEwMEVBNDgyMzE5MjAwMDIxRkEKLToxMDQ4QjAwMDMwQzYwMEZGOEM4MzAwNUM4QzgyMDA2NDAwNkExODIzODEKLToxMDQ4QzAwMDAwNDMxMDJCNTA0MDAwMTAwMDY5MTgyMTk0QTIwMTEwRTEKLToxMDQ4RDAwMDAxMjIxMDIxQTRBMjAxMTA5NEEyMDExMDMwNDJGRkZGNzYKLToxMDQ4RTAwMDAwNDMxMDJCMTQ0MDAwMEEzQzAyM0ZGRjk0QTIwMTEwMjkKLToxMDQ4RjAwMDAwNDMxMDIzQTRBMjAxMTA5NDgyMDAzQzMwNDJGRkZGMjkKLToxMDQ5MDAwMDBBMDAxMjExMDA2MjE4MjFBNEEwMDExMDNDMDIzRkZGMEUKLToxMDQ5MTAwMDM0NDRGRkZGMDA4MzEwMkI1NDQwMDAwMTAwODAxODIxMTUKLToxMDQ5MjAwMDAwNjcxMDIxQUQwMjAwNUNBMTAwMDA3QzBBMDAxMjU5NTIKLToxMDQ5MzAwMEExMDAwMDgxMzBDMjAwMTAxMDQwMDAzQzAwMDAwMDAwQzcKLToxMDQ5NDAwMDhDODIwMDUwMDA0QTEwMjMxODQwMDAzODAwMDAwMDAwRkMKLToxMDQ5NTAwMDkwODIwMDdDMjQ0MjAwMDFBMDgyMDA3QzkwODIwMDdDMzYKLToxMDQ5NjAwMDNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjAwNDMxMDJCRkUKLToxMDQ5NzAwMDE0NDAwMDVDOEZCRjAwMTA4Q0EyMDEwODAwRTIxMDIzREQKLToxMDQ5ODAwMDE4NDAwMDU4MDAwMDAwMDA4QzgzMDA1NDk0ODIwMDNDQzIKLToxMDQ5OTAwMDAwNkExODIzMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwNTIKLToxMDQ5QTAwMDAwNDMxMDJBMTA0MDAwMDUwMDAwMDAwMDhDODIwMDU0RDMKLToxMDQ5QjAwMDAwNEExMDIzMEEwMDEyNDAwMDAyMTA0Mzk0ODIwMDNDNzcKLToxMDQ5QzAwMDMwNDJGRkZGMDAwMjEwNDBBRDAyMDA2NDk1MDIwMDNDM0YKLToxMDQ5RDAwMDhEMDQwMDY0OTUwMzAwM0MzMDQyRkZGRjAwMDIxMDQwNEMKLToxMDQ5RTAwMDAwODIyMDIxMzA2M0ZGRkYwMDgzMTgyMTAxNDMxMDIxNDIKLToxMDQ5RjAwMEFEMDIwMDVDOEQwMjAwNTRBQ0EyMDEwODI0MDIwMDAyNEEKLToxMDRBMDAwMEExMDIwMDg0MEUwMDBGRDc4RjQ0MDEwMDEwNDAwMDM1MzIKLToxMDRBMTAwMDhGQkYwMDEwOEY0MzAxMDA4RjQyMDFGODA0NDBGRkZFNUEKLToxMDRBMjAwMDI0MDIwMDAyMEEwMDEyODIwMDAwMDAwMEFEMDcwMDRDQzAKLToxMDRBMzAwMDhDQTIwMTA4MDBFMjEwMjMxODQwMDAwMjI0RTJGRkZDQ0YKLToxMDRBNDAwMEFDQTIwMTA4MzBDMjAwMDExMDQwMDAwQTAwMDAwMDAwQzIKLToxMDRBNTAwMDhEMDIwMDUwMDBFMjEwMjMwNDQxMDAwNDAxMDAyMDIxRDcKLToxMDRBNjAwMDhEMDIwMDU0MTRFMjAwMDMwMDAwMDAwMDBBMDAxMjc5RDUKLToxMDRBNzAwMDI0MDYwMDA1OEQwMjAwNTQxNEUyMDAxQThGQkYwMDEwQjYKLToxMDRBODAwMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBNEUKLToxMDRBOTAwMDI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4MzE0NDMwMDA2NzAKLToxMDRBQTAwMDI0MDIwMDAxMDEwMDIwMjEyNDA2MDAwNDhGQkYwMDEwMTEKLToxMDRBQjAwMDBBMDAxMTIzMjdCRDAwMThBMTAwMDA4NEE1MDIwMDE0REMKLToxMDRBQzAwMDhGNDMwMTAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyRTAKLToxMDRBRDAwMEFGNDMwMUMwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4NDEKLToxMDRBRTAwMDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODhGQUEwMDEwMzgKLToxMDRBRjAwMDhDODIwMDUwMDA4MDQwMjEzMEM2MDBGRjAwNEExMDIzMDUKLToxMDRCMDAwMDAwQTA0ODIxMTg0MDAwMDcwMEUwMTgyMTI0MDIwMDAxRkQKLToxMDRCMTAwMEEwODAwMDg0QTBBMDAxMTJBNDgyMDAxNDBBMDAxMUY0NTUKLToxMDRCMjAwMEFGQUEwMDEwQTA4MDAwODFBRDA3MDA0QzhDQTIwMTA4NDQKLToxMDRCMzAwMDAwRTIxMDIzMTg0MDAwMDIyNEUyRkZGQ0FDQTIwMTA4QUUKLToxMDRCNDAwMDMwQzIwMDAxMTA0MDAwMDgwMDAwMDAwMDhEMDIwMDUwM0IKLToxMDRCNTAwMDAwNjIxMDIzMDQ0MTAwMTMyNDA2MDAwNThEMDIwMDU0NTYKLToxMDRCNjAwMDEwNjIwMDEwMDAwMDAwMDA4RDAyMDA1NDE0NjIwMDExNTkKLToxMDRCNzAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwQjcKLToxMDRCODAwMDEwNDAwMDBBMjQwMjAwMDE5MTAzMDA3ODkxMDIwMDgzODIKLToxMDRCOTAwMDE0NDMwMDA2MjQwMjAwMDEwMTAwMjAyMTAxMjAyODIxRTUKLToxMDRCQTAwMDI0MDYwMDA0MEEwMDExMjMwMDAwMDAwMEExMDAwMDg0NzQKLToxMDRCQjAwMEE1MDIwMDE0MDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwOEMKLToxMDRCQzAwMEFGQkYwMDE4Mjc0MjAxMDA5MDQ2MDAwQThDNDgwMDE0MkQKLToxMDRCRDAwMDhDOEIwMDRDOTA4MjAwODQzMEM5MDBGRjAxNjgxODIzNDAKLToxMDRCRTAwMDMwNEEwMEZGMUM2MDAwMUEyRDQ2MDAwNjI0MDIwMDAxMTYKLToxMDRCRjAwMDAxNDIxMDA0MTBDMDAwMTYzMDQzMDAwMzAxMjAzMDIxOTAKLToxMDRDMDAwMDAxMDAzODIxMTQ2MDAwMDczMDRDMDAwQzE1ODAwMDA5QTkKLToxMDRDMTAwMDMwNDIwMDMwMTQ0MDAwMEI4RkJGMDAxODBBMDAxMkUzMkUKLToxMDRDMjAwMDAwMDAwMDAwMEUwMDExRjRBRkFCMDAxMDBBMDAxMkUzMDgKLToxMDRDMzAwMDhGQkYwMDE4MEUwMDExNjlBRkFCMDAxMDBBMDAxMkUzMUQKLToxMDRDNDAwMDhGQkYwMDE4QUZBQjAwMTAwRTAwMTI4OUFGQUEwMDE0N0UKLToxMDRDNTAwMDhGQkYwMDE4MDNFMDAwMDgyN0JEMDAyMDI0MDIwMDAzRDYKLToxMDRDNjAwMEEwODIwMDg0OEM4MjAwNTQwM0UwMDAwOEFDQTIwMTA4RkEKLToxMDRDNzAwMDNDMDIwMDA4MDM0MjE4MjE5MDYyMDA4MTI0MDYwMDQzOTAKLToxMDRDODAwMDNDMDc2MDE5MjQ0MjAwMDFBMDYyMDA4MTkwNjMwMDgxMEEKLToxMDRDOTAwMDNDMDIwODAwOEM0MjAwQzAzMDYzMDBGRjE0NjIwMDEwMjgKLToxMDRDQTAwMDI0MDNGRjgwM0MwMjA4MDA4QzQyMDBFMDAwODIxMDIxQjcKLToxMDRDQjAwMDAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwNzQKLToxMDRDQzAwMDNDMDMwMDBBMDA4MjEwMjEzMDQyMDA3RjAzNDIxMDIxODEKLToxMDRDRDAwMDAwNDMxMDIxOTQ0NTAwRDQwQTAwMEJCRjMwQTVGRkZGMEMKLToxMDRDRTAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMEFGQkYwMDE4OTAKLToxMDRDRjAwMEFGQjEwMDE0QUZCMDAwMTA4RjQyMDE4MDAwODA4MDIxNUUKLToxMDREMDAwMDAwQTA4ODIxMEUwMDEyRUEwMDQwMjAyMUEyMDAwMDg0QTkKLToxMDREMTAwMDhFMDIwMDU0OEZCRjAwMTg4RkIwMDAxMEFFMjIwMTA4MjEKLToxMDREMjAwMDhGQjEwMDE0MDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwN0QKLToxMDREMzAwMDNDMDIwMDA4QUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0QzQKLToxMDRENDAwMDAzNDI4MDIxOEY1MTAxNDA5MjAzMDA4NDhFMDQwMDUwNjEKLToxMDRENTAwMDhFMDIwMDRDMTQ4MjAwNDAzMDY2MDBGRjNDMDIwODAwQzYKLToxMDRENjAwMDhDNDIwMEUwMjQwM0ZGODAwMjIyMTAyMTAwNDMxMDI0MjMKLToxMDRENzAwMEFGNDIwMDI0M0MwMjA4MDA4QzQyMDBFMDk3NDQwMDdDRDMKLToxMDREODAwMDkyMDUwMDgxMDIyMjEwMjEzMDQyMDA3RjAzNDIxODIxNDcKLToxMDREOTAwMDNDMDIwMDBBMDA2MjE4MjExNEEwMDAwQjMwODRGRkZGQkYKLToxMDREQTAwMDI0MDIwMDA1NTRDMjAwMTQyNDgyMDVEQzkwNjIwMTEyMjIKLToxMDREQjAwMDI0NDIwMDAxQTA2MjAxMTIyNDAyMEM4MEFGNDIwMDI0QjAKLToxMDREQzAwMDBBMDAxMzQyMjQwMjAwMDVBMDYwMDExMjI0MDIwMDA1MUIKLToxMDRERDAwMDE0QzIwMDA5MjQ4MjA1REM5MjAyMDA4MTJDNDIwMDA3RTMKLToxMDRERTAwMDUwNDAwMDA1MjQ4MjBBMDA5MjAzMDA4MTI0MDIwMDE0MkUKLToxMDRERjAwMDAwNjIxMDA0MDA4MjEwMjEzMDQ0RkZGRkE2MDQwMDE0NUEKLToxMDRFMDAwMDBFMDAxMkVBMDIyMDIwMjE5NjAyMDAzQzhFMDMwMDRDODQKLToxMDRFMTAwMDAyMjAyMDIxMzA0MkZGRkYwMDAyMTA0MDAwNjIxODIxRDIKLToxMDRFMjAwMDBFMDAwMzM1QUUwMzAwNUM5MjAyMDA3RDAyMjAyMDIxQkIKLToxMDRFMzAwMDM0NDIwMDQwMEUwMDAzM0VBMjAyMDA3RDhGNDIwMUY4ODIKLToxMDRFNDAwMDA0NDBGRkZFMjQwMjAwMDJBRjUxMDFDMEEzNDIwMUM0OEUKLToxMDRFNTAwMDNDMDIxMDAwQUY0MjAxRjg4RkJGMDAxODhGQjEwMDE0NjAKLTowQzRFNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDA4Ci06MDQ0RTZDMDAwODAwMEU3Q0IwCi06MTA0RTcwMDAwODAwMEVDNDA4MDAwRjA0MDgwMDBGNTAwODAwMEY4NDNCCi06MTA0RTgwMDAwQTAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREVCCi06MTA0RTkwMDA2MzcwMzQyRTM2MkUzMTM2MDAwMDAwMDAwNDA2MTAwNEY0Ci06MTA0RUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi06MTA0RUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCi06MTA0RUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMEMyCi06MTA0RUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCi06MTA0RUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCi06MTA0RUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAyQjg2Ci06MTA0RjAwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDgxCi06MTA0RjEwMDAwMDAwMDAwRDNDMDIwODAwMjQ0MjU4QTQzQzAzMDgwMDk1Ci06MTA0RjIwMDAyNDYzNUY3MEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDIxCi06MTA0RjMwMDAyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMTgzCi06MTA0RjQwMDAzQzEwMDgwMDI2MTAwMDgwM0MxQzA4MDAyNzlDNThBNDM4Ci06MTA0RjUwMDAwRTAwMDE5QzAwMDAwMDAwMDAwMDAwMEQyN0JERkZFOENFCi06MTA0RjYwMDAzQzA5NjAxOEFGQkYwMDEwOEQyQzUwMDAyNDBERkY3RjRFCi06MTA0RjcwMDAyNDA4MDAzMTAxOEQ1ODI0MzU2QTM4MEMyNDA3MEMwMEIwCi06MTA0RjgwMDAzQzFBODAwMEFEMkE1MDAwM0MwNDgwMEFBRjQ4MDAwODVCCi06MTA0RjkwMDAzQzFCODAwOEFGNDcwMDI0MEUwMDA5MjRBRjg0MDAxMDlBCi06MTA0RkEwMDAwRTAwMDhFNzAwMDAwMDAwMEUwMDA4MzQwMDAwMDAwMEJBCi06MTA0RkIwMDAwRTAwMTI1RTAwMDAwMDAwM0MwNDYwMTY4Qzg1MDAwMEFDCi06MTA0RkMwMDAzQzA2RkZGRjNDMDI1MzUzMDBBNjE4MjQxMDYyMDAzRjJBCi06MTA0RkQwMDAzNDg2N0MwMDk0QzIwMUYyQTc4MDAwMkMxMDQwMDAwM0FDCi06MTA0RkUwMDBBNzgwMDBDQzM4NTgxRTFFQTc5ODAwMkM5NEMyMDFGODQ4Ci06MTA0RkYwMDAxMDQwMDAwNDk3ODMwMENDMzg1OTFFMUVBNzk5MDBDQzlFCi06MTA1MDAwMDA5NzgzMDBDQzJDN0YwMDY3NTNFMDAwMDEyNDAzMDA2NkU3Ci06MTA1MDEwMDA5Nzg0MDAyQzJDODIwNDAxMTQ0MDAwMDIwMDYwMjgyMTk3Ci06MTA1MDIwMDAyNDA0MDQwMDNDMDc2MDAwOENFOTA0MzgyNDAzMTAzQzhECi06MTA1MDMwMDAzMTI4RkZGRjExMDMwMDE3MzBCOUZGRkY1NzIwMDAwQzg0Ci06MTA1MDQwMDBBMzgwMDBDRTI0MDIwMDUwQTM4MjAwQ0U5MzlGMDBDRTA2Ci06MTA1MDUwMDAxM0UwMDAwQThGQkYwMDEwMjdCRDAwMThBNzgwMDBDQzA2Ci06MTA1MDYwMDBBNzgwMDAyQ0E3ODAwMDM0MDNFMDAwMDhBNzgwMDBFNjlBCi06MTA1MDcwMDA5MzlGMDBDRTE3RTBGRkY4OEZCRjAwMTAyN0JEMDAxOEU4Ci06MTA1MDgwMDBBNzg1MDBDQ0E3ODQwMDJDQTc4MDAwMzQwM0UwMDAwODhCCi06MTA1MDkwMDBBNzgwMDBFNkEzODAwMENFOENDQjAwM0MzMTZBMDAwMUUzCi06MTA1MEEwMDAxMTQwMDAwRTAwMDAwMDAwMzBBN0ZGRkYxMEUwRkZFNkY3Ci06MTA1MEIwMDAyNDAyMDA1MDhDQ0MwMEM4MzE4NjAwMDExNEMwRkZFNEVCCi06MTA1MEMwMDA5MzlGMDBDRTBBMDAwMDcyMjQwMjAwNTE4QzhGMDAwNENFCi06MTA1MEQwMDAzQzBFNjAwMDBBMDAwMDU1MDFFRTMwMjE4Q0VGMDgwOEZDCi06MTA1MEUwMDAyNDBENTcwODAwMEY3NDAyMTFDRDAwMDQzMEI4RkZGRkUzCi06MTA1MEYwMDAyNDA1MDA2NjBBMDAwMDczMjQwNDA0MDAxNzAwRkZENDhFCi06MTA1MTAwMDA5MzlGMDBDRTBBMDAwMDcyMjQwMjAwNTA4Rjg2MDAxMDg4Ci06MTA1MTEwMDAzMDg5RkZGRjAwMDkzOTQwOENDMzAwMTAzQzA4MDA1MDYzCi06MTA1MTIwMDAwMEU4MjAyNUFGNDMwMDM4OENDNTAwMTQyNzQyMDQwMDU2Ci06MTA1MTMwMDBBRjgyMDAxQ0FGNDUwMDNDQUY0NDAwMzAwMDAwMDAwMENGCi06MTA1MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTA1MTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjRCMDAwMDc1Ci06MTA1MTYwMDAzMTZBMDAyMDExNDBGRkZEMDAwMDAwMDAwM0UwMDAwODRDCi06MTA1MTcwMDAwMDAwMDAwMDhGODQwMDEwOTQ4QTAwMUE4Qzg3MDAyNDlECi06MTA1MTgwMDAzMTQ5RkZGRjAwMDk0MEMwMDBFODMwMjFBRjQ2MDAzQzM0Ci06MTA1MTkwMDA4Qzg1MDAyNDhGNDMwMDNDMDBBMzEwMjMxODQwMDAyOTc1Ci06MTA1MUEwMDAwMDAwMDAwMDhDOEIwMDIwMjU2MjAwMDEzQzBEMDA1MEE3Ci06MTA1MUIwMDAzNUFDMDAwOEFGNDIwMDM4QUY0QzAwMzAwMDAwMDAwMEIyCi06MTA1MUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCi06MTA1MUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMEYxCi06MTA1MUUwMDAzMUVFMDAyMDExQzBGRkZEMDAwMDAwMDA4RjRBMDQwMEQ2Ci06MTA1MUYwMDAzQzA4MDAyMEFDOEEwMDEwOEY0OTA0MDRBQzg5MDAxNERDCi06MTA1MjAwMDBBRjQ4MDAzMDAwMDAwMDAwOTQ4NjAwMTg5NDg3MDAxQzBFCi06MTA1MjEwMDAwMEM3MTgyMUE0ODMwMDE4OTQ4NTAwMUEyNEEyMDAwMTU1Ci06MTA1MjIwMDBBNDgyMDAxQTk0OTgwMDFBOTQ5OTAwMUUxMzM4MDAwMzVGCi06MTA1MjMwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwODk4Ci06MTA1MjQwMDBBNDgwMDAxQThDODIwMDIwMEEwMDAwQ0MzQzBEMDA1MDgzCi06MTA1MjUwMDAwQTAwMDBCRDAwMDAwMDAwM0MwMzA4MDA4QzYzMDAyMDMxCi06MTA1MjYwMDA4RjgyMDAxODI3QkRGRkU4MTA2MjAwMDhBRkJGMDAxMDUyCi06MTA1MjcwMDAwRTAwMDBGNEFGODMwMDE4M0MwMzA4MDA4QzYzMDAyMDhDCi06MTA1MjgwMDAyNDA0MDAwMTEwNjQwMDA0OEY4OTAwMTA4RkJGMDAxMEY3Ci06MTA1MjkwMDAwM0UwMDAwODI3QkQwMDE4OEZCRjAwMTAzQzA3NjAxMjE0Ci06MTA1MkEwMDBBNTIwMDAwQTk1MjgwMDBBMzRFNTAwMTAyN0JEMDAxODQzCi06MTA1MkIwMDAzMTA2RkZGRjAzRTAwMDA4QUNBNjAwOTAzQzAyMDgwMEE2Ci06MTA1MkMwMDA4QzQyMDAyMDI3QkRGRkM4QUZCRjAwMzRBRkJFMDAzMDA2Ci06MTA1MkQwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEE0Ci06MTA1MkUwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MEIzCi06MTA1MkYwMDBBRkIwMDAxMDhGODQwMDEwOTQ4NjAwMDY5NDgzMDAwQURCCi06MTA1MzAwMDAwMEMzMjgyMzMwQjZGRkZGMTJDMDAwNEE4RkJGMDAzNDBECi06MTA1MzEwMDA5NDg5MDAxODk0OEEwMDBBMDEyQTQwMjMzMTAyRkZGRjcxCi06MTA1MzIwMDAwMkMyMzgyQjE0RTAwMDAyMDJDMDIwMjEwMDQwMjAyMURDCi06MTA1MzMwMDAyQzhDMDAwNTE1ODAwMDAyMDA4MEEwMjEyNDE0MDAwNDlDCi06MTA1MzQwMDAwRTAwMDBBMzAyODAyMDIxOEY4NzAwMTAwMjgwOTgyMTg4Ci06MTA1MzUwMDBBRjgwMDAxNDk0RUQwMDBBMDI4MDg4MjExMjgwMDA0RTc0Ci06MTA1MzYwMDAzMUIyRkZGRjNDMTc3MDAwM0MxNTQwMDAzQzFFNjAwMDRFCi06MTA1MzcwMDA4RjhGMDAxQzhERUUwMDAwMDFENzE4MjQ1MDc1MDA1MDRGCi06MTA1MzgwMDAwMjIwMjAyMTAyQTM4MDJCMTYwMDAwMzUzQzE4MjAwMEFCCi06MTA1MzkwMDA1MDc4MDA0NzAyMjAyMDIxMjQxMDAwMDE4RjgzMDAxNDQwCi06MTA1M0EwMDAxNDYwMDAzOTAyOTE1ODIzMDIzMEY4MjMwMjUwQzgyMUJBCi06MTA1M0IwMDAzM0YxRkZGRjE2MjBGRkVFMzMzMkZGRkY4Rjg3MDAxMDFGCi06MTA1M0MwMDAzQzExMDAyMEFGNTEwMDMwMDAwMDAwMDA5NEU2MDAwQUJDCi06MTA1M0QwMDAzQzFFNjAxMjM3RDUwMDEwMDI2NjI4MjFBNEU1MDAwQUExCi06MTA1M0UwMDA5NEUyMDAwQTk0RjIwMDBBOTRGNDAwMTgzMDU3RkZGRjg4Ci06MTA1M0YwMDAxMjkyMDAzQkFFQjcwMDkwOENFRDAwMTQ4Q0U0MDAxMENDCi06MTA1NDAwMDAwMDEzNzE0MDAxQUU0MDIxMDAwRTVGQzMwMTBFNTAyQjBFCi06MTA1NDEwMDAwMDhCNDgyMTAxMkExODIxQUNFODAwMTRBQ0UzMDAxMEVECi06MTA1NDIwMDAwMkQzMzgyMzMwRjZGRkZGMTZDMEZGQjk4Rjg0MDAxMDc3Ci06MTA1NDMwMDA4RkJGMDAzNDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODhFCi06MTA1NDQwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOERBCi06MTA1NDUwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzOEEyCi06MTA1NDYwMDAxMDdFMDAxQjAwMDAwMDAwMTQ3N0ZGQ0MyNDEwMDAwMTA4Ci06MTA1NDcwMDAwRTAwMTVBOTAwMDAwMDAwOEY4MzAwMTQxMDYwRkZDQjAwCi06MTA1NDgwMDAwMjMwRjgyMzAyOTE1ODIzOEY4NzAwMTAwMTcwMjAyMUU5Ci06MTA1NDkwMDAwQTAwMDE4NzMwOTNGRkZGOEY4MzAwMTQxNDYwRkZDQjU1Ci06MTA1NEEwMDAzQzExMDAyMEFGNTEwMDMwMEEwMDAxNTMwMDAwMDAwMDAxCi06MTA1NEIwMDAwRTAwMDc5QjAyNDAyODIxMEEwMDAxNDcwMDQwODAyMTdFCi06MTA1NEMwMDAwRTAwMDM0MTAyNDAyODIxMEEwMDAxNDcwMDQwODAyMUNDCi06MTA1NEQwMDAwRTAwMTQ3MTAyMjAyMDIxMEEwMDAxNDcwMDQwODAyMUEzCi06MTA1NEUwMDAwRTAwMDBCRDAwMDAwMDAwMEEwMDAxNjkwMkQzMzgyMzRECi06MTA1NEYwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQwRTAwMDAzN0FCCi06MTA1NTAwMDAwMDAwMDAwMDNDMDI4MDAwMzQ1MDAwNzAwQTAwMDFBQTM0Ci06MTA1NTEwMDA4RTA2MDAwMDhGNEYwMDAwMzlFRTAwMDEzMUMyMDAwMUZECi06MTA1NTIwMDAxMDQwMDAyNDhGODYwMEE4OEUwNzAwMDAzQzBDMDgwMDY1Ci06MTA1NTMwMDA4RDhDMDAzQzNDMDkwODAwOEQyOTAwMzgwMEU2NjgyMzZBCi06MTA1NTQwMDAwMThEMjgyMTAwMDA1MDIxMDBBRDMwMkIwMTJBNDAyMTdGCi06MTA1NTUwMDAwMTA2MjAyMTNDMDEwODAwQUMyNTAwM0NBRjg3MDBBOEQzCi06MTA1NTYwMDAzQzAxMDgwMEFDMjQwMDM4MEUwMDAwRjYwMDAwMDAwMEVBCi06MTA1NTcwMDAzQzAzMDgwMDhDNjMwMDcwMTA2MEZGRTYwMDYwMjAyMThGCi06MTA1NTgwMDAzQzA1MDgwMDhDQTUwMDY4M0MwNjA4MDA4Q0M2MDA2QzMxCi06MTA1NTkwMDAwRTAwMTUzODAwMDAwMDAwM0MwMTA4MDBBQzIwMDA3MDJGCi06MTA1NUEwMDA4RjRGMDAwMDM5RUUwMDAxMzFDMjAwMDExNDQwRkZERUQwCi06MTA1NUIwMDA4Rjg2MDBBODhFMEEwMDAwOEY4QjAwQTgzQzA1MDgwMDhCCi06MTA1NUMwMDA4Q0E1MDAzQzNDMDQwODAwOEM4NDAwMzgwMTRCNDgyMzI3Ci06MTA1NUQwMDAwMEE5MzgyMTAwODIxODIxMDBFOTQwMkIwMDY4MTAyMTIxCi06MTA1NUUwMDAzQzAxMDgwMEFDMjcwMDNDM0MwMTA4MDBBQzIyMDAzODFDCi06MTA1NUYwMDA4RjVGMDEwMDI0MTlGRjAwMjQxODBDMDAwM0Y5MjAyNEY4Ci06MTA1NjAwMDAxMDk4MDAxMkFGODQwMDAwQUY0NDAwMjA5MzZEMDAwMDlBCi06MTA1NjEwMDAyNDBDMDAyMDMxQTYwMEZGMTBDQzAwMTIyNDBFMDA1MEY0Ci06MTA1NjIwMDAxMENFMDAwNDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBMzE0Ci06MTA1NjMwMDAwMDAwMDAwMDBFMDAxMUQ0MDAwMDAwMDAzQzE5NDAwMEUyCi06MTA1NjQwMDBBRjU5MDEzODBBMDAwMUEzMDAwMDAwMDAwRTAwMDEwRjRECi06MTA1NjUwMDAwMDAwMDAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBM0M2Ci06MTA1NjYwMDAwMDAwMDAwMDhGNTgwMTAwMDA4MDI4MjEzMzBGMDBGRjQ4Ci06MTA1NjcwMDAwMUUwMjAyMTBFMDAwMkVFQUY4RjAwMDQzQzE5NDAwMDMzCi06MTA1NjgwMDBBRjU5MDEzODBBMDAwMUEzMDAwMDAwMDAwMEE0MTAyQjRDCi06MTA1NjkwMDAyNDAzMDAwMTEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MENCCi06MTA1NkEwMDAwMEE0MTAyQjA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQzhBCi06MTA1NkIwMDAwMDA1Mjg0MDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQjk0Ci06MTA1NkMwMDA1NEUwMDAwNDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzY1Ci06MTA1NkQwMDAwMDAzMTg0MjE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjRCCi06MTA1NkUwMDAwM0UwMDAwODAwQzMxMDIxMzA4NEZGRkYzMEE1RkZGRjU2Ci06MTA1NkYwMDA4RjQyMDFCODA0NDBGRkZFM0MwNzQwODAwMDg3MzAyNTAwCi06MTA1NzAwMDAzQzAzMTAwMEFGNDAwMTgwQUY0NTAxODRBRjQ2MDE4OEUzCi06MTA1NzEwMDAwM0UwMDAwOEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCOEI3Ci06MTA1NzIwMDAwNDQwRkZGRTNDMDc0MDM4OENBNjAwMDAwMDg3MjgyNTc3Ci06MTA1NzMwMDAzQzAzMTAwMEFGNDYwMTgwQUY0NTAxODgwM0UwMDAwODNDCi06MTA1NzQwMDBBRjQzMDFCODhGODMwMDM4OEY4NjAwMzAxMDY2MDAwQjlFCi06MTA1NzUwMDAwMDgwNDAyMTNDMDcwODAwMjRFNzVBMTgwMDAzMjhDMEI1Ci06MTA1NzYwMDAwMEE3MTAyMThDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTZDCi06MTA1NzcwMDAzMDYzMDAwRjU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwOEZFCi06MTA1NzgwMDAwMDAwMTAyMTNDMDcwODAwMjRFNzVBMUMwMEE3MzAyMTI0Ci06MTA1NzkwMDAwM0UwMDAwODhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTZBCi06MTA1N0EwMDAwMDgyMjAyNUFGNDQwMDIwOEY0NTAwMjAwNEEwRkZGRThBCi06MTA1N0IwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDNGCi06MTA1N0MwMDAzNDYyMDAwMTAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDdECi06MTA1N0QwMDAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMDY0Ci06MTA1N0UwMDBBRkJGMDAxODEyMjAwMDE1MDBBMDgwMjE4Q0E1MDAwMDdBCi06MTA1N0YwMDAxMEEwMDAxMzI0MDQwMDAyMEUwMDBDNkIyNDA2MDE0MENDCi06MTA1ODAwMDBBRTAwMDAwMDhGNDIwMUI4MDQ0MDAwMEQwMDAwMjgyMUM2Ci06MTA1ODEwMDAzQzA2NDAwMDAyMjYyMDI1OEZCRjAwMTg4RkIxMDAxNERGCi06MTA1ODIwMDA4RkIwMDAxMDNDMDMxMDAwMjdCRDAwMjBBRjQ1MDE4MDYxCi06MTA1ODMwMDBBRjQ0MDE4ODAzRTAwMDA4QUY0MzAxQjg4Q0E1MDAwMDI1Ci06MTA1ODQwMDA4RjQyMDFCODA0NDBGRkZFM0MwNjQwMDAwMjI2MjAyNTlFCi06MTA1ODUwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMEYwCi06MTA1ODYwMDAyN0JEMDAyMEFGNDUwMTgwQUY0NDAxODgwM0UwMDAwODU4Ci06MTA1ODcwMDBBRjQzMDFCODMwODZGRkZGOEY0MjAxQjgwNDQwRkZGRUZFCi06MTA1ODgwMDAzQzA5NDAwNjhDQTgwMDAwMDBDOTM4MjVBRjQ4MDE4MEJCCi06MTA1ODkwMDA4Q0E0MDAwNDNDMDMxMDAwQUY0NDAxODRBRjQ3MDE4ODhFCi06MTA1OEEwMDAwM0UwMDAwOEFGNDMwMUI4MjdCREZGRTBBRkIwMDAxMDMwCi06MTA1OEIwMDBBRkJGMDAxOEFGQjEwMDE0OTM2MzAwM0UwMDgwODAyMTk5Ci06MTA1OEMwMDAwMDgwMjgyMTMwNjIwMDQwMDAwMDIwMjExMDQwMDAwRjlECi06MTA1OEQwMDA4RTExMDAwMDBFMDAwODYwMDIyMDIwMjE5MzY3MDAwMDU2Ci06MTA1OEUwMDAyNDA0MDA1MDMwRTUwMEZGNTBBNDAwMTI4RTBGMDAwMDg5Ci06MTA1OEYwMDAwMjIwMjAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDNDCi06MTA1OTAwMDBBNzYyMDEzQzBBMDAwOTIwMjdCRDAwMjAwRTAwMDI3RDhECi06MTA1OTEwMDAwMDAwMDAwMDBFMDAwODYwMDIyMDIwMjE5MzY3MDAwMEI0Ci06MTA1OTIwMDAyNDA0MDA1MDMwRTUwMEZGMTRBNEZGRjIwMjIwMjAyMURGCi06MTA1OTMwMDA4RTBGMDAwMDNDMTAwODAwOEUxMDAwNTAzQzBEMDAwQzMzCi06MTA1OTQwMDAyNDBCRkY4MDAxRjA1MDIxMzE0RTAwN0YwMURBNjAyMUVECi06MTA1OTUwMDAwMThENDAyMTAxNEI0ODI0QUY0OTAwMjgwMjIwMjAyMTFECi06MTA1OTYwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBBNTAyMDBENkIxCi06MTA1OTcwMDAyN0JEMDAyMDBBMDAwOTIwQUY4ODAwRDAyN0JERkZFMDI2Ci06MTA1OTgwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTA5MzY2MDAwMUI0Ci06MTA1OTkwMDAwMDgwODAyMTBFMDAwMjQ2MzBEMTAwMDQ5MzY0MDAwNThGCi06MTA1OUEwMDAwMDEwMjlDMkE3NjUwMDAwMzQ4MzAwNDBBMzYzMDAwNUVFCi06MTA1OUIwMDAwRTAwMDI0RjAyMDAyMDIxMEUwMDA5MjIwMjAwMjAyMUM5Ci06MTA1OUMwMDAyNDAyMDAwMUFGNjIwMDBDMDIwMDI4MjFBNzYyMDAxMDJGCi06MTA1OUQwMDAyNDA0MDAwMkE3NjIwMDEyMjQwNjAxNDBBNzYyMDAxNEZBCi06MTA1OUUwMDAwRTAwMEM2QkE3NjIwMDE2MTYyMDAwMEY4RkJGMDAxODY4Ci06MTA1OUYwMDA5NzhDMDAzNDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRkU2Ci06MTA1QTAwMDAzMTA5RkZGRjI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNjRBCi06MTA1QTEwMDBBNzg4MDAzNDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEY4Ci06MTA1QTIwMDBBREFFMDA1MDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEMyCi06MTA1QTMwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNDQwCi06MTA1QTQwMDBBRkJGMDAxOEFGQjAwMDEwMDBBMDg4MjExMDgwMDAwQTdFCi06MTA1QTUwMDAzQzAzNjAwMDI0MDIwMDgwMTA4MjAwMTIwMDAwMDAwMDVECi06MTA1QTYwMDAwMDAwMDAwRDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDIwCi06MTA1QTcwMDAwM0UwMDAwODI3QkQwMDIwOEM2ODJCRjgwNTAwRkZGRTFFCi06MTA1QTgwMDAwMDAwMDAwMEFDNzEyQkMwOEZCRjAwMTg4RkIxMDAxNDU0Ci06MTA1QTkwMDA4RkIwMDAxMDNDMDkxMDAwMjdCRDAwMjAwM0UwMDAwODczCi06MTA1QUEwMDBBQzY5MkJGODBFMDAwMjQ2MDBBMDIwMjE5MzY1MDAwNThBCi06MTA1QUIwMDAwMjIwMjAyMTBFMDAwMjRGMzBCMDAwRkYyNDAzMDAzRUUwCi06MTA1QUMwMDAxNjAzRkZFNzAwMDAwMDAwOEY0NDAxNzgwNDgwRkZGRTBBCi06MTA1QUQwMDAyNDA3MDAwNzNDMDYxMDAwQUY1MTAxNDAwMjIwMjAyMTlFCi06MTA1QUUwMDBBMzQ3MDE0NDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDdFCi06MTA1QUYwMDBBRjQ2MDE3ODBBMDAwMkJGMjdCRDAwMjAyN0JERkZFODlFCi06MTA1QjAwMDBBRkJGMDAxNEFGQjAwMDEwOEY1MDAwMjAwMDAwMDAwMEE1Ci06MTA1QjEwMDAwRTAwMDkyMkFGNDQwMDIwQUY1MDAwMjA4RkJGMDAxNEI4Ci06MTA1QjIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgzMDg0RkZGRjhECi06MTA1QjMwMDA4RjQyMDFCODA0NDBGRkZFM0MwNzQwMzUwMDg3MzAyNTA2Ci06MTA1QjQwMDAzQzAzMTAwMEFGNDUwMTgwQUY0MDAxODRBRjQ2MDE4ODlGCi06MTA1QjUwMDAwM0UwMDAwOEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODczCi06MTA1QjYwMDAwNDQwRkZGRTNDMDc0MDM2MDA4NzMwMjUzQzAzMTAwMDEwCi06MTA1QjcwMDBBRjQ1MDE4MEFGNDAwMTg0QUY0NjAxODgwM0UwMDAwOEQzCi06MTA1QjgwMDBBRjQzMDFCODI3QkRGRkQwQUZCMzAwMUMzMDkzRkZGRjc4Ci06MTA1QjkwMDBBRkI1MDAyNEFGQjIwMDE4QUZCRjAwMjhBRkI0MDAyMEVCCi06MTA1QkEwMDBBRkIxMDAxNEFGQjAwMDEwMzBCNUZGRkYxMjYwMDAyNzk2Ci06MTA1QkIwMDAwMDAwOTAyMThGOTAwMDFDOEUwMzAwMDAzQzA2ODAwMEE2Ci06MTA1QkMwMDAyNDAyMDA0MDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RjY4Ci06MTA1QkQwMDAwMDY2ODgyNDE0ODIwMDFEMzBBNTAwRkY4RjgzMDAyOEYyCi06MTA1QkUwMDAyQzY4MDAwQTUxMDAwMDEwOEY5MTAwMTQwMDAzNTg4MEE3Ci06MTA1QkYwMDAzQzBDMDgwMDI1OEM1NkNDMDE2QzUwMjE4RDQ5MDAwMENFCi06MTA1QzAwMDAwMTIwMDAwODAwMDAwMDAwMDJCMjE4MjEzMDY1RkZGRkVCCi06MTA1QzEwMDAwRTAwMDIxQTI0MDQwMDg0MTYyMDAwMDI4RjkwMDAxQzNCCi06MTA1QzIwMDBBRjgwMDAyODhGOTEwMDE0MjYwQzAwMjAyNjRCMDAwMTI1Ci06MTA1QzMwMDAwMTgwODAyMTMxNzJGRkZGMTYyMDAwMDRBRjhDMDAxQzEwCi06MTA1QzQwMDAwMjUzNDAyQjE1MDBGRkRDMDAwMDAwMDAwMjQwMTAyMTMxCi06MTA1QzUwMDA4RkJGMDAyODhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQ0E1Ci06MTA1QzYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODRECi06MTA1QzcwMDAyN0JEMDAzMDI0MEQwMDM0MTRBRDAwRjYwMDAwMDAwMEY0Ci06MTA1QzgwMDA5MjBCMDAwRTI0MEExNjgwM0MwNzAwMENBMzZCMDAyMTI3Ci06MTA1QzkwMDA5MjAzMDAwRDAzNDdGODIxM0MwNjYwMDBBMzYzMDAyMDM3Ci06MTA1Q0EwMDA5NjExMDAxMjNDMDg3RkZGMzUwQ0ZGRkZBNzcxMDAzQ0U2Ci06MTA1Q0IwMDA5NjAyMDAxMDI0MEIwMDA1MzA1NEZGRkZBRjc0MDA4NERGCi06MTA1Q0MwMDA4RTE5MDAxQ0FGNEEwMDI4OEZGODAwMDA4Q0NGNDQ0ODgyCi06MTA1Q0QwMDAwMzE5NzAyNjAxRUUzMDIxQUY2NjAwNEM4RjY5MDA0QzJECi06MTA1Q0UwMDAyNENEMDAwMTNDMTk3RjAwQUY2OTAwNTA4RjY0MDA1MDQzCi06MTA1Q0YwMDBBRjY0MDA1NEFGNjYwMDcwQUY2RDAwNTg4RjY1MDA1OEY4Ci06MTA1RDAwMDAyNDA0MDA1MEFGNjUwMDVDQTM2MDAwMjNBRjZDMDA2NDA2Ci06MTA1RDEwMDBBMzZCMDAzNzhFMDMwMDE0QUY2MzAwNDg4RjcxMDA0OEY3Ci06MTA1RDIwMDBBRjcxMDAyNDhFMDIwMDE4QUY2MjAwNkM5MjE0MDAwQzU4Ci06MTA1RDMwMDBBMzc0MDAzNjkzNkEwMDNFMzU1RjAwMjBBMzdGMDAzRUM3Ci06MTA1RDQwMDA4Rjc4MDA3NDAzMTk3ODI0MzVFRTQwMDBBRjZFMDA3NDJDCi06MTA1RDUwMDA5MzcwMDAwMDMyMDkwMEZGMTEyNDAyMzMyNDE4RkY4MEUxCi06MTA1RDYwMDAzQzA0MDgwMDI0ODQ1QTk4MEUwMDAyOEEwMDAwMDAwMEI3Ci06MTA1RDcwMDAyNDA2MDAwNDI0MDcwMDAxM0MwNDA4MDA4Qzg0NUE5ODdGCi06MTA1RDgwMDBBMzY2MDA3REEzNjcwMDA1OEY0QTAxNzgwNTQwRkZGRUVBCi06MTA1RDkwMDAyNDAyMDAwMkFGNDQwMTQwQTM0MjAxNDQ4RjkwMDAxQzQyCi06MTA1REEwMDAzQzE0MTAwMEFGNTQwMTc4MEEwMDAzNjlBRjgwMDAyODRBCi06MTA1REIwMDAyQ0FEMDAzNzUxQTBGRjlDOEY5MTAwMTQwMDA1QTA4MEVFCi06MTA1REMwMDAzQzE4MDgwMDI3MTg1NkY0MDI5ODc4MjE4REVFMDAwMDQwCi06MTA1REQwMDAwMUMwMDAwODAwMDAwMDAwMjQwNjAwMDYxNEE2MDAxMUZGCi06MTA1REUwMDAwMDAwMDAwMDNDMUYwODAwOEZGRjVBOTgyNDA0MDAwNUEzCi06MTA1REYwMDBBRjVGMDAyMDhFMTkwMDE4QUY3OTAwMTg4Rjc4MDA0QzIzCi06MTA1RTAwMDBBRjc4MDAxQzhGNkYwMDUwMTIyMDAwQzJBRjZGMDA3MDdGCi06MTA1RTEwMDAwQTAwMDM2OUFGODQwMDI4MjQwQTAwMDcxMEFBMDA4NDNFCi06MTA1RTIwMDAyNDAzMDAwNjNDMDUwODAwMjRBNTVBOTgwRTAwMDI1NERECi06MTA1RTMwMDAyNDA0MDA4MThGOTAwMDFDMDAxMTEwMkIwQTAwMDM2OUJDCi06MTA1RTQwMDBBRjgyMDAyODI0MEEwMDA0MTRBQUZGRjYyNDAzMDA1MDlECi06MTA1RTUwMDAzQzBFMDgwMDhEQ0U1QTk4QUY0RTAwMjA4RTA5MDAwOEU3Ci06MTA1RTYwMDBBRjY5MDA0MDhFMDYwMDA4QUY2NjAwNDQ4RTA3MDAwQzQ0Ci06MTA1RTcwMDBBRjY3MDA0ODhFMDQwMDEwQUY2NDAwNEM4RTBEMDAxMDE4Ci06MTA1RTgwMDBBRjZEMDA4NDhFMDgwMDE0QUY2ODAwNTA4RTA1MDAxOEI2Ci06MTA1RTkwMDBBRjY1MDA1NDhFMEMwMDFDQUY2QzAwNTg5MzZCMDAwMDczCi06MTA1RUEwMDAzMTc0MDBGRjEyODMwMUY1MDAwMDAwMDA4RjY0MDA0ODg4Ci06MTA1RUIwMDA4RjY2MDA0MDAwODYzODIzMDRFMDAwMDQyNDA0MDA4QzMwCi06MTA1RUMwMDAxNjIwRkZERTI0MDIwMDAzMjQwNDAwODIzQzA1MDgwMEEzCi06MTA1RUQwMDAyNEE1NUE5ODBFMDAwMjdEMDAwMDAwMDA4RjkwMDAxQzNGCi06MTA1RUUwMDAwMDAwMTAyMTBBMDAwMzY5QUY4MjAwMjgyNDA5MDAwNTgwCi06MTA1RUYwMDAxNEE5RkZDQzI0MDUyMDAwM0MwQTA4MDA4RDRBNUE5OEJBCi06MTA1RjAwMDBBRjRBMDAyMDhFMUYwMDA0QUY3RjAwNUM5MjE5MDAwODhBCi06MTA1RjEwMDAyNDEwMDAwOEEzNzkwMDIxOEY5ODAwMUM5MzBGMDAwOTFBCi06MTA1RjIwMDBBMzZGMDAyMDhGODYwMDFDOTBDRTAwMEEzMUM0MDBGRkIyCi06MTA1RjMwMDAxMDkwMDAxMDI4ODMwMDA5MTQ2MDAwNkMyNDAyMDAwMkY1Ci06MTA1RjQwMDAyNDA4MDAyMDEwODgwMDBCMzQwNTgwMDAyODg1MDAyMURCCi06MTA1RjUwMDAxNEEwMDAwODI0MDU0MDAwMjQwRDAwNDAxMDhEMDAwNTA5Ci06MTA1RjYwMDAzQzA1MDAwMTI0MDcwMDgwMTA4NzAwMDIzQzA1MDAwMjY4Ci06MTA1RjcwMDAyNDA1NDAwMDhGNkUwMDc0M0MwRkZGMDAwMUNGODAyNDg5Ci06MTA1RjgwMDAwMjA1NDgyNUFGNjkwMDc0OTBDNDAwMEJBMzY0MDA4MTJBCi06MTA1RjkwMDA4Rjg0MDAxQzk0ODYwMDBDMTBDMDAxOUIwMDAwMDAwMDQwCi06MTA1RkEwMDA5NDhFMDAwQzI0MUZGRkJGMjQwNjAwMDRBNzZFMDAzQzQzCi06MTA1RkIwMDA5MDkwMDAwRUEzNzAwMDNFOEY4OTAwMUM5MTI0MDAwRjZBCi06MTA1RkMwMDBBMzY0MDAzRjhGOTQwMDFDOEU4RDAwMTA4RjQ3MDA3NEQ3Ci06MTA1RkQwMDAwMUE3MjgyM0FGNjUwMDYwOEU4ODAwMTRBRjY4MDA2NEI1Ci06MTA1RkUwMDA5NjhDMDAxOEE3NkMwMDY4OTY4QjAwMUFBNzZCMDA2QTQ1Ci06MTA1RkYwMDA4RTgyMDAxQ0FGNjIwMDZDOTY4MzAwMDJBNzYzMDEzRTk0Ci06MTA2MDAwMDA5MjhBMDAwRUEzNkEwMDNFOTM3OTAwM0UwMzNGQzAyNEFCCi06MTA2MDEwMDAxMjIwMDE2QUEzNzgwMDNFOEY5MDAwMUMwQTAwMDM2OUQ5Ci06MTA2MDIwMDBBRjg2MDAyODI0MTQwMDIyMTRCNEZGN0UyNDAzMDAwNzQ2Ci06MTA2MDMwMDAzQzAyMDgwMDhDNDI1QTk4MTIyMDAwMENBRjQyMDAyMDBCCi06MTA2MDQwMDAwQTAwMDM2OUFGODMwMDI4MjQwQzAwMzMxMEFDMDAxNDRECi06MTA2MDUwMDAyNDA4MDAyODNDMDUwODAwMjRBNTVBOTgwRTAwMDIyNkIyCi06MTA2MDYwMDAyNDA0MDA4MTBBMDAwM0VFOEY5MDAwMUMzQzA0MDgwMDA5Ci06MTA2MDcwMDAyNDg0NUE5ODBFMDAwMjhBMDAwMDAwMDA5MzZCMDAwMEVFCi06MTA2MDgwMDAyNDExMDA1MDMxNjMwMEZGMTA3MTAxNTQwMDAwMDAwMDIyCi06MTA2MDkwMDA4RjkwMDAxQzAwMDAxODIxMEEwMDAzNjlBRjgzMDAyOEJDCi06MTA2MEEwMDAzQzA1MDgwMDhDQTU1QTk4MjQwNDAwODFBRjQ1MDAyMEM3Ci06MTA2MEIwMDBBMzY4MDAzNDNDMDUwODAwMjRBNTVBOTgwRTAwMDIyNjY3Ci06MTA2MEMwMDAwMDAwMDAwMDhGOTAwMDFDMjQwMjAwMDkwQTAwMDM2OUYwCi06MTA2MEQwMDBBRjgyMDAyODAyQjI4ODIxMzIyNUZGRkYwRTAwMDIxQThCCi06MTA2MEUwMDAyNDA0MDA4NDBBMDAwMzY5OEY5MDAwMUMxMDgyRkZBMTIxCi06MTA2MEYwMDAyNDA1MDQwMDI4OTQwMDAzMTI4MDAxNzYyNDBDMDAwNDc3Ci06MTA2MTAwMDAyNDBCMDAwMTU0OEJGRjlCMjQwNTQwMDAwQTAwMDQzRDMyCi06MTA2MTEwMDAyNDA1MDEwMDNDMDQwODAwMjQ4NDVBOTg4RjYyMDA0QzM2Ci06MTA2MTIwMDAwRTAwMDI4QThGNjMwMDUwOEY5MDAwMUMwMDAwMjAyMTE3Ci06MTA2MTMwMDAwQTAwMDM2OUFGODQwMDI4OEUxMDAwMDQyNDA0MDA4QTNBCi06MTA2MTQwMDBBRjUwMDAyMDkzNkUwMDA1MzFDOTAwMDIxNTIwMDE2NTkzCi06MTA2MTUwMDAwMjAwMjgyMTkzNzgwMDIzMDIwMDI4MjEzMzBGMDAyMDE5Ci06MTA2MTYwMDAxNUUwMDE2MDI0MDQwMDhEOTM2MjAwM0YyNDE5MDAxMkExCi06MTA2MTcwMDAzMDVGMDBGRjEzRjkwMTVCMjQwNDAwODEwRTAwMDI0NjJBCi06MTA2MTgwMDAwMjAwMjAyMTkzNzQwMDIzMjQwQTAwMDQwMjAwMjAyMTJECi06MTA2MTkwMDAzNjgzMDA0MkEzNjMwMDIzMEUwMDAyNEZBMzZBMDA3REYyCi06MTA2MUEwMDA4RjRCMDE3ODA1NjBGRkZFMjQwNTAwMDJBRjUwMDE0MENGCi06MTA2MUIwMDBBMzQ1MDE0NDhGOTAwMDFDM0MwQzEwMDBBRjRDMDE3OEFCCi06MTA2MUMwMDAwQTAwMDNFRjAwMTExMDJCOEUxMDAwMDQyNDA0MDA4QTMzCi06MTA2MUQwMDBBRjUwMDAyMDkzNkQwMDA1MzFBODAwMDIxNTAwMDAxOTkyCi06MTA2MUUwMDAwMjAwMjgyMTkzNjcwMDNGMjQxNDAwMTIzMEU0MDBGRkNFCi06MTA2MUYwMDAxMDk0MDEwMTAwMDAwMDAwOTM2RTAwM0YyNDA2MDAwNDhCCi06MTA2MjAwMDAzMUM5MDBGRjExMjYwMEZDMDAwMDAwMDAwRTAwMDI0NjBDCi06MTA2MjEwMDAwMjAwMjAyMTkzNjIwMDIzMjQxOUZGRkUwMjAwMjAyMUE2Ci06MTA2MjIwMDAzNDVGMDAyMEEzN0YwMDIzQTM3NDAwM0Y5Mzc4MDAwNTEwCi06MTA2MjMwMDAwMzE5NzgyNDBFMDAwMjRGQTM2RjAwMDUwMjAwMjgyMUU1Ci06MTA2MjQwMDAwMDAwMjAyMTBFMDAwMzM2MDAwMDAwMDAwQTAwMDNFRUNCCi06MTA2MjUwMDA4RjkwMDAxQzhFMDUwMDA0M0MwRjAwMDgwMzRGNDAyMTY2Ci06MTA2MjYwMDBBRjQ1MDAyMDkxMEUwMDAwMjQwNjAwNTAzMUM5MDBGRjA4Ci06MTA2MjcwMDAxMTI2MDE3QTI0MDQwMDg4OEY1OTAxQjgwNzIwRkZGRUY3Ci06MTA2MjgwMDAzQzBDNDAwRTAwOEM1ODI1M0MwMzEwMDBBRjQ1MDE4MEFCCi06MTA2MjkwMDBBRjQwMDE4NEFGNEIwMTg4QUY0MzAxQjg5MTAyMDAwMEM5Ci06MTA2MkEwMDAyNDBBRkY4MDI0MDQwMDA0MDA0QUY4MjVBMTFGMDAwMEVFCi06MTA2MkIwMDAwRTAwMEM2QjI0MDYwMDMwMEEwMDAzRUU4RjkwMDAxQ0M5Ci06MTA2MkMwMDA4RTA0MDAxQzBFMDAwMjMxMDAwMDAwMDAxMDQwMDE0QzQyCi06MTA2MkQwMDAwMDQwNDgyMThGOTAwMDFDMjQwNTAwODk4RjREMDFCODkzCi06MTA2MkUwMDAwNUEwRkZGRTAwMDAwMDAwQUY0OTAxODA4RTBGMDAxQ0RBCi06MTA2MkYwMDAzQzE0NDAwMTAwMTE3MDJCMDBCNDQ4MjUzQzExMTAwMEUzCi06MTA2MzAwMDBBRjRGMDE4NEFGOEUwMDI4QUY0OTAxODhBRjUxMDFCODZCCi06MTA2MzEwMDAwQTAwMDM2QThGOTEwMDE0OTYxOTAwMDIzQzE0MDgwMEM5Ci06MTA2MzIwMDAyNjk0NUE5ODMzMzgwMDA0MTMwMDAwRjIzQzAyNjAwMEFGCi06MTA2MzMwMDA4RTFGMDAxQzNDMDEwODAwQUMzRjVBOThBRjVGMDAyMDQ0Ci06MTA2MzQwMDA5MjBDMDAxMDI0MEIwMDE0MzE4NDAwRkYxNDhCMDExQ0VDCi06MTA2MzUwMDAwMDAwMDAwMDk2MDkwMDAyMzEyRDAwMDExNUEwMDFCMkQ1Ci06MTA2MzYwMDAwMDAwMDAwMDhFMDIwMDA0QUU4MjAwMDgzQzBFMDgwMDBGCi06MTA2MzcwMDA4RENFNUFBMDExQzAwMUE4MDAwMDAwMDA4RjY5MDA3NEUyCi06MTA2MzgwMDAzQzBFODAwMDI0MDQwMDAxMDEyRTY4MjVBRjZEMDA3NENFCi06MTA2MzkwMDBBMzYwMDAwNUFGNjQwMDBDM0MwQzA4MDA4RDhDNUFBMDczCi06MTA2M0EwMDA4Rjg4MDAxQ0E3NjQwMDEwMDAwQzU5QzJBNzY0MDAxMjVCCi06MTA2M0IwMDBBNzY0MDAxNEE3NjQwMDE2QTc2QjAwMDg4RDAzMDAwOEVCCi06MTA2M0MwMDAyNDA0MDAwMkFGNjMwMDJDOEQwQTAwMENBRjZBMDAzMDc5Ci06MTA2M0QwMDA5MTA3MDAxMEEzNjcwMDM0OEY4MjAwMUM5MDQ1MDAxMUM0Ci06MTA2M0UwMDBBMzY1MDAzNThGODYwMDFDOTBEMDAwMTJBMzcwMDAzNjg0Ci06MTA2M0YwMDA4RjlGMDAxQzkzRjkwMDEzQTM3OTAwMzc4RjkwMDAxQzI2Ci06MTA2NDAwMDA5NjE4MDAxNEE3NzgwMDM4OTYxNDAwMTZBNzc0MDAzQTVFCi06MTA2NDEwMDA4RTBGMDAxOEFGNkYwMDI0NTYyMEZFMDJBRjg0MDAyOEI0Ci06MTA2NDIwMDAzQzA1MDgwMDI0QTU1QTk4MEUwMDAyNTQwMDAwMjAyMUMzCi06MTA2NDMwMDA4RjkwMDAxQzBBMDAwNEFDMDAwMDIwMjE4RTBGMDAwNDg1Ci06MTA2NDQwMDAzQzE0MDgwMDI2OTQ1QTk4M0MwMTA4MDBBQzJGNUE5ODM2Ci06MTA2NDUwMDBBRjRGMDAyMDkyMEUwMDAzMzFDOTAwMDQxMTIwMDAwMjRBCi06MTA2NDYwMDAyNDAyMDAxMjI0MDIwMDA2QTM2MjAwM0Y5MjAzMDAxQkQ0Ci06MTA2NDcwMDAyNDBBRkZDMDMwNjIwMDNGMDA0QUY4MjVBMzdGMDAzRTk3Ci06MTA2NDgwMDA5MjE5MDAwMzMzMzgwMDAxMTcwMDAwQzEwMDAwMDAwMDFBCi06MTA2NDkwMDA4RTAyMDAwOEFFODIwMDA4M0MwMjA4MDA4QzQyNUFBMDFFCi06MTA2NEEwMDAxMDQwMDBDMDAwMDAwMDAwMDAwMjIxQzJBNzY0MDAwOEU0Ci06MTA2NEIwMDA4RTBEMDAwQzI0MEIwMDAxMjQxNDAwMTRBRjZEMDAyQzcxCi06MTA2NEMwMDA4RTA4MDAxMEFGNjgwMDMwOTYwNTAwMTZBNzY1MDAzOEVBCi06MTA2NEQwMDA5NjBDMDAxNEE3NkMwMDNBQUY2QjAwMENBNzZCMDAxMDcxCi06MTA2NEUwMDBBNzZCMDAxMkE3NkIwMDE0QTc2QjAwMTYxMjIwMDBFQjFECi06MTA2NEYwMDBBMzc0MDAzNDkyMDYwMDAzMzBDNzAwMDIyQ0YwMDAwMUEwCi06MTA2NTAwMDAyNjAyMDAwODhGOTAwMDFDMEEwMDAzNjlBRjgyMDAyODUxCi06MTA2NTEwMDA4RTE0MDAwNDI0MDMwMDgxQUY1NDAwMjA5MzY4MDAyM0VDCi06MTA2NTIwMDAzMTA1MDAxMDEwQTAwMEFDMDAwMDAwMDA4RjQ0MDFCODNECi06MTA2NTMwMDAwNDgwRkZGRTNDMDY0MDFGMDAxMTM4MkIwMDY2MTAyNTJBCi06MTA2NTQwMDAzQzExMTAwMEFGNTQwMTgwQUY4NzAwMjhBRjQwMDE4NDk4Ci06MTA2NTUwMDBBRjQyMDE4OEFGNTEwMUI4MEEwMDAzNkE4RjkxMDAxNDVECi06MTA2NTYwMDA4RTA2MDAwNDNDMTkwMDA4MDM1OTIwMjFBRjQ2MDAyMDg0Ci06MTA2NTcwMDA4RTA3MDAwODkwOTgwMDAwMjQwRjAwNTAzMzE0MDBGRjhECi06MTA2NTgwMDAxMjhGMDBBNzI0MDUwMDg4OEY0NDAxQjgwNDgwRkZGRTA1Ci06MTA2NTkwMDAzQzBENDAwOTAwMTE2MDJCMDBBRDEwMjUzQzExMTAwMDhFCi06MTA2NUEwMDBBRjQ2MDE4MEFGOEMwMDI4QUY0NzAxODRBRjQyMDE4ODFECi06MTA2NUIwMDBBRjUxMDFCODBBMDAwMzZBOEY5MTAwMTQzQzA1MDgwMDJFCi06MTA2NUMwMDAyNEE1NUE5ODBFMDAwMjdEMjQwNDAwODI4RjkwMDAxQzlFCi06MTA2NUQwMDAwMDAwMzAyMTBBMDAwMzY5QUY4NjAwMjgzQzA0MDgwMDRGCi06MTA2NUUwMDA4Qzg0NUE5ODBFMDAxNEY2MDAwMDAwMDA4RjkwMDAxQzU2Ci06MTA2NUYwMDAwQTAwMDQ4NjAwMDAxODIxMEUwMDAzMzYyNDA0MDA4MURFCi06MTA2NjAwMDAwQTAwMDNFRThGOTAwMDFDM0MwNTA4MDAyNEE1NUE5ODUwCi06MTA2NjEwMDAwRTAwMDI3RDI0MDQwMDhCOEY5MDAwMUMwMDExMzAyQjkzCi06MTA2NjIwMDAwQTAwMDM2OUFGODYwMDI4M0MxOTA4MDA4RjM5NUE5ODgwCi06MTA2NjMwMDAzQzFGMDgwMDhGRkYwMDUwMjRDQ0ZGRkUwMzNGNzgyMTUxCi06MTA2NjQwMDAwMUY4NzAyNEFGNEUwMDI4M0MwNDA4MDA4Qzg0NUE5ODRFCi06MTA2NjUwMDAzQzA5MDgwMDhEMjkwMDUwMDA4OTY4MjEzMUE1MDA3RjgwCi06MTA2NjYwMDAwMEJBNDAyMTAxMDc4MDIxQUUwNjAwRDhBRjkwMDBEMENCCi06MTA2NjcwMDBBRTAwMDBEQzBBMDAwM0I4QUUwQzAxMDhBRjYwMDA4NDc1Ci06MTA2NjgwMDAzQzA4MDgwMDhEMDg1QTk4M0MwRDA4MDA4REFEMDA1MDVDCi06MTA2NjkwMDAyNDA1RkY4MDNDMDIwMDBDMDEwRDU4MjEwMTY1NjAyNDk3Ci06MTA2NkEwMDBBRjRDMDAyODhFMEEwMDE0MzE3NDAwN0YwMjlBMTgyMTIyCi06MTA2NkIwMDAwMDYyNzgyMUFERUEwMEQ4OEUxRjAwMTRBRjhGMDBEMEExCi06MTA2NkMwMDBBREZGMDBEQzhFMTkwMDEwMjczOEZGRkUwQTAwMDQwQjE2Ci06MTA2NkQwMDBBREY4MDEwODU0OENGRTI3MjQwNTQwMDAwQTAwMDQzRDUzCi06MTA2NkUwMDAyNDA1MTAwMDBFMDAwMzJCMDAwMDAwMDAwQTAwMDNFRTNBCi06MTA2NkYwMDA4RjkwMDAxQzhDNDY0NDJDM0MwNTZDNjIzNEIwNzk3MDQxCi06MTA2NzAwMDAzQzAxMDgwMEFDMjA1QTk4MTREMDAwMDgyNDA0MDAwMjcwCi06MTA2NzEwMDA5Nzg4MDAzNDk3OEEwMDJDMDI4MDI4MjEwMTBBMzgyQkEwCi06MTA2NzIwMDAxMEUwMDAxMTI0MDQwMDkyMjQwNDAwMDIwRTAwMEM4OUUxCi06MTA2NzMwMDAyNDA1MDE0MDNDMDEwODAwQUMyMjVBOThBRjQyMDAyMEQ5Ci06MTA2NzQwMDAzQzAzMDgwMDhDNjM1QTk4MTA2MDAwMDUyNDA0MDA4MzAxCi06MTA2NzUwMDAwRTAwMDg1NDAwMDAwMDAwMTA0MDAwMDkyNDA0MDA4M0NCCi06MTA2NzYwMDAzQzA1MDgwMDI0QTU1QTk4MEUwMDAyNTQwMDAwMDAwMEMxCi06MTA2NzcwMDA4RjkwMDAxQzAwMTEyMDJCMEEwMDAzNjlBRjg0MDAyOEIxCi06MTA2NzgwMDAwRTAwMDg1ODAwMDAwMDAwMEEwMDA1MzA4RjkwMDAxQzIxCi06MTA2NzkwMDA4RTA0MDAwODBFMDAwMjMxMDAwMDAwMDAwQTAwMDU4Njg5Ci06MTA2N0EwMDBBRTgyMDAwODNDMDUwODAwMjRBNTVBOTgwRTAwMDIyNjc3Ci06MTA2N0IwMDAyNDA0MDA4NzhGOTAwMDFDMEEwMDA1QTIwMDExMTAyQkYyCi06MTA2N0MwMDAwRTAwMDg1QzAwMDAwMDAwM0MwNTA4MDAyNEE1NUE5ODUzCi06MTA2N0QwMDAwQTAwMDYzQTI0MDQwMDhCMEUwMDAyNDYwMjgwMjAyMUEzCi06MTA2N0UwMDA5MzcwMDAyMzAyODAyMDIxMzYwRDAwMTAwRTAwMDI0RjBFCi06MTA2N0YwMDBBMzZEMDAyMzhGOTAwMDFDMEEwMDA1QUIwMDAwMTgyMTM4Ci06MTA2ODAwMDAyNDA0MDAwNDBFMDAwQzg5MjQwNTAwMzAxNDQwMDAyQUUyCi06MTA2ODEwMDAwMDQwNDgyMThGOTAwMDFDMEEwMDA1MTcyNDA1MDA4M0MyCi06MTA2ODIwMDA5MjA1MDAwQzMwQkYwMDAxMTNFMDAwMDMwMDAwMDAwMERGCi06MTA2ODMwMDA5NjAyMDAwRUE0ODIwMDJDOTIwQTAwMEMzMTQ4MDAwMjNECi06MTA2ODQwMDAxMTAwRkY1MTAwMDAyODIxOTYwQjAwMTI4RTAzMDAxNDQ2Ci06MTA2ODUwMDBBNDhCMDAxQTBBMDAwNUMyQUM4MzAwMUM4RjgzMDAzODg5Ci06MTA2ODYwMDA4Rjg3MDAzMDEwNjdGRTg0MDAwMDIwMjEzQzA5MDgwMDVCCi06MTA2ODcwMDAyNTI5NUExQzAwMDMyMEMwMDA4OTMwMjE4Q0Q0MDAwMDM3Ci06MTA2ODgwMDAxMjg1MDA1RTI0NzgwMDAxMzMwMzAwMEY1NDY3RkZGQTdECi06MTA2ODkwMDAwMDAzMjBDMDBBMDAwNEZFMDAwMDIwMjEzQzA1MDgwMDdGCi06MTA2OEEwMDAyNEE1NUE5ODBFMDAwMjdEMjQwNDAwODI4RjkwMDAxQ0JCCi06MTA2OEIwMDAwQTAwMDVBMjAwMDAxMDIxM0MwQjAwMDgwMzRCMjAyMTE4Ci06MTA2OEMwMDAyNDAzMDA1MDI0MEEwMDAxQUY0MjAwMjBBMDgzMDAwMEVFCi06MTA2OEQwMDBBMDhBMDAwMThGODgwMDFDOTEwNzAwMDRBMDg3MDAxODdGCi06MTA2OEUwMDA4RjgyMDAxQzkwNDUwMDA1QTA4NTAwMTk4Rjg2MDAxQzMyCi06MTA2OEYwMDA5MERGMDAwNkEwOUYwMDFBOEY5OTAwMUM5MzM4MDAwN0I0Ci06MTA2OTAwMDBBMDk4MDAxQjhGOTQwMDFDOTI4RjAwMDhBMDhGMDAxQzgxCi06MTA2OTEwMDA4RjkwMDAxQzkyMEUwMDA5QTA4RTAwMUQ4RjhEMDAxQzEwCi06MTA2OTIwMDA5MUFDMDAwQUEwOEMwMDFFOEY4QjAwMUMzQzBDMDgwMDUwCi06MTA2OTMwMDAyNThDNUExQzkxNjMwMDBCM0MwQjA4MDAyNTZCNUExOEUwCi06MTA2OTQwMDBBMDgzMDAxRjhGOEEwMDFDOTE0ODAwMENBMDg4MDAyMEEzCi06MTA2OTUwMDA4Rjg3MDAxQzkwRTUwMDBEQTA4NTAwMjE4RjgyMDAxQzEwCi06MTA2OTYwMDAyNDA1NDY0NjkwNDYwMDBFQTA4NjAwMjI4RjlGMDAxQ0ZDCi06MTA2OTcwMDA5M0Y5MDAwRkEwOTkwMDIzOEY5ODAwMUM5MzE0MDAxMDI2Ci06MTA2OTgwMDBBMDk0MDAyNDhGOEYwMDFDOTFGMDAwMTFBMDkwMDAyNThFCi06MTA2OTkwMDA4RjkwMDAxQzhGOEUwMDMwOEY5OTAwMzg5NjBEMDAxNDU4Ci06MTA2OUEwMDAwMDBFMThDMDI1QzgwMDAxQTQ4RDAwMjg5NjBBMDAxNjA0Ci06MTA2OUIwMDAwMDZDMzAyMTAwNkJGODIxQTQ4QTAwMkE5NjA3MDAxODg5Ci06MTA2OUMwMDAzMTA4MDAwRkE0ODcwMDJDQTQ4NTAwMkU4RTAyMDAxQzI1Ci06MTA2OUQwMDBBQ0M5MDAwMEFGODgwMDMwMTExOTAwMDNBRkUyMDAwMDFECi06MTA2OUUwMDAwQTAwMDUxNzAwMDAyODIxMjUwQzAwMDEzMTg0MDAwRjQyCi06MTA2OUYwMDAwMDAwMjgyMTBBMDAwNTE3QUY4NDAwMzgzQzA3MDgwMDcyCi06MTA2QTAwMDAyNEU3NUExODAwODc4MDIxMDAwMDIwMjFBQ0MwMDAwMDM0Ci06MTA2QTEwMDAwQTAwMDRGRUFFMDAwMDAwM0MwNTA4MDAyNEE1NUE5OEI4Ci06MTA2QTIwMDAwQTAwMDYzQTI0MDQwMDg3OEUwNDAwMDQwRTAwMDIzMTk2Ci06MTA2QTMwMDAwMDAwMDAwMDBBMDAwNTNCQUU4MjAwMDgzMDg0RkZGRjIyCi06MTA2QTQwMDAzMEM2MDBGRjhGNDIwMUI4MDQ0MEZGRkUwMDA2NDQwMDNDCi06MTA2QTUwMDAwMTA0MzAyNTNDMDcyMDAwMDBDNzIwMjUzQzAzMTAwMDFFCi06MTA2QTYwMDBBRjQwMDE4MEFGNDUwMTg0QUY0NDAxODgwM0UwMDAwOEQ2Ci06MTA2QTcwMDBBRjQzMDFCODI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNEFGCi06MTA2QTgwMDAzQzA3NjAwMDI0MDYwMDAyMTA4MDAwMDYwMEEwODAyMTYwCi06MTA2QTkwMDAwMDEwMTAyQjhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODBGCi06MTA2QUEwMDAyN0JEMDAxODNDMDk2MDBFQUQyMDAwMzQ4Q0U1MjAxQzg5Ci06MTA2QUIwMDA4RjgyMDAxQzI0MDhGRkZDMDBBODE4MjRBQ0UzMjAxQ0QzCi06MTA2QUMwMDAwRTAwMDZFRjhDNDUwMDBDMDAxMDEwMkI4RkJGMDAxNDM5Ci06MTA2QUQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgzQzAyNjAwRUQ0Ci06MTA2QUUwMDAzNDQ3MDEwMDI0MDkwMDE4Mjc0QTA0MDAwMDAwMDAwMDcwCi06MTA2QUYwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNjAwNTAzNEMzMDIwMDBCCi06MTA2QjAwMDBBRjQ0MDAzOEFGNDUwMDNDQUY0MzAwMzAwMTQwMTgyMThFCi06MTA2QjEwMDA4RjRCMDAwMDMxNjgwMDIwMTEwMEZGRkQyNDA2MDA3RjJDCi06MTA2QjIwMDAyNDA4RkZGRjhDNkMwMDAwMjRDNkZGRkYyNDYzMDAwNEQwCi06MTA2QjMwMDBBQ0VDMDAwMDE0QzhGRkZCMjRFNzAwMDQwMDAwMDAwMEQ4Ci06MTA2QjQwMDAwMDAwMDAwMDAwMDAwMDAwM0MwRjAwMjBBRjRGMDAzMEFDCi06MTA2QjUwMDAwMDAwMDAwMDI0QUQwMjAwMDFBNTcwMkIyNTI5RkZGRkQ1Ci06MTA2QjYwMDAwMDhFMjAyMTE1MjBGRkUxMDFBMDI4MjEwM0UwMDAwODZDCi06MTA2QjcwMDAwMDAwMDAwMDI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxODU4Ci06MTA2QjgwMDBBRkIwMDAxMDNDMDU2MDBFOENBMjAwMzQwMDgwODgyMTVDCi06MTA2QjkwMDAxNDQwMDAwNjNDMDQ2MDAwOEM4NzIwMUMyNDA4RkZGQzg1Ci06MTA2QkEwMDAwMEU4MzAyNDM0QzMwMDAxQUM4MzIwMUM4RjhCMDAxQzEwCi06MTA2QkIwMDAyNDA5MDAwMUFDQTkwMDM0OTU2OTAwMDI4RDY1MDAxNDE4Ci06MTA2QkMwMDA4RDcwMDAwQzJEMjQwMDgxOEQ2NzAwMDQ4RDY2MDAwOEY3Ci06MTA2QkQwMDAxMDgwMDAwNzhENkEwMDEwMkQyQzAwMDQxNTgwMDAwRTE3Ci06MTA2QkUwMDAzMENFMDAwNzMxMkQwMDAzMTFBMDAwMEIwMDAwMDAwMDgzCi06MTA2QkYwMDAyNDA0MDA4QjAyMDAyODIxMEUwMDA2RUYyNDA2MDAwMzY3Ci06MTA2QzAwMDAwMDExMTAyQjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDJGCi06MTA2QzEwMDAwM0UwMDAwODI3QkQwMDIwMTVDMEZGRjYyNDA0MDA4QjA4Ci06MTA2QzIwMDAzQzAzMDAyMEFGNDMwMDMwMDAwMDAwMDAyNDAyMDAwMUJDCi06MTA2QzMwMDBBRjgyMDAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCi06MTA2QzQwMDAzQzFGMDE1MDAxM0ZDODI1MjUzODAwMDMzQzBGNjAwRTUyCi06MTA2QzUwMDBBRjQ3MDAzODAwMTgxODgyQUY0NjAwM0MzNUU4MDAzQ0NBCi06MTA2QzYwMDBBRjU5MDAzMDI3NDcwNDAwOEY0NDAwMDAzMDg2MDAyMEQxCi06MTA2QzcwMDAxMEMwRkZGRDAwMDAwMDAwMTA2MDAwMDgyNDY2RkZGRjQ4Ci06MTA2QzgwMDAyNDAzRkZGRjhDRUIwMDAwMjRDNkZGRkYyNEU3MDAwNDcxCi06MTA2QzkwMDBBRDBCMDAwMDE0QzNGRkZCMjUwODAwMDQzQzA4NjAwRTg4Ci06MTA2Q0EwMDBBRDA5MDAzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Ci06MTA2Q0IwMDAzQzA3MDAyMEFGNDcwMDMwMDAwMDAwMDAwRTAwMDcxNzFGCi06MTA2Q0MwMDAwMTQwMjAyMTAyMDAyODIxMDAwMDIwMjEwRTAwMDZFRkIzCi06MTA2Q0QwMDAyNDA2MDAwMzAwMTExMDJCOEZCRjAwMTg4RkIxMDAxNDgxCi06MTA2Q0UwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZEOEFCCi06MTA2Q0YwMDBBRkIyMDAxODMwOTJGRkZGQUZCMTAwMTRBRkJGMDAyMDU5Ci06MTA2RDAwMDBBRkIzMDAxQ0FGQjAwMDEwMTI0MDAwMkMwMDAwODgyMTZGCi06MTA2RDEwMDAwQTAwMDdBRjI0MTMwMDAxNTBCMzAwM0M4Q0U1MDAwQ0JGCi06MTA2RDIwMDAwMDAwMDAwRDI2MkQwMDAxMzFCMUZGRkYyNEVDMDAyMEYyCi06MTA2RDMwMDAwMjMyMzgyQjEwRTAwMDIxQUY4QzAwMUM4RjgyMDAxNDJGCi06MTA2RDQwMDAxNDQwMDAxRThGODcwMDFDM0MwNjcwMDAzQzAzMjAwMDhFCi06MTA2RDUwMDA4Q0U0MDAwMDAwODYyODI0MTRBMzAwMTg4Rjg1MDAzQ0QyCi06MTA2RDYwMDAwMDA0NDQwMjNDMDk4MDAwMDA4OTgwMjQxNEEwRkZFQTRBCi06MTA2RDcwMDAzMTA2MDBGRjI0MDQwMDAyMTBDNDAwMUYyOENBMDAwM0NCCi06MTA2RDgwMDAxMTQwMDAxNjI0MEIwMDAzMTREM0ZGRTcyNjJEMDAwMTQ5Ci06MTA2RDkwMDAwMjAwMjgyMTBFMDAwNkZEMjQwNDAwMDE4Rjg3MDAxQzNDCi06MTA2REEwMDBBRjgyMDAzQzI2MkQwMDAxMzFCMUZGRkYyNEVDMDAyMDEyCi06MTA2REIwMDAwMjMyMzgyQjE0RTBGRkUxQUY4QzAwMUMwMjIwMTAyMUJFCi06MTA2REMwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDRBCi06MTA2REQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxNENCRkZEMkJECi06MTA2REUwMDAyNjJEMDAwMTBFMDAwNzNEMDIwMDIwMjE4Rjg3MDAxQzg4Ci06MTA2REYwMDAwQTAwMDdDOUFGODIwMDNDMDIwMDI4MjEwRTAwMDZGREYwCi06MTA2RTAwMDAwMDAwMjAyMTBBMDAwN0M4OEY4NzAwMUMwRTAwMDZFRjMzCi06MTA2RTEwMDAyNDA0MDA4NDE2MDBGRkMzOEY4NzAwMUMwQTAwMDdBOTAyCi06MTA2RTIwMDBBRjgwMDAzQzMwODJGRkZGMTQ0MDAwMDMwMDAwMTgyMUI3Ci06MTA2RTMwMDAwMDA0MjQwMjI0MDMwMDEwMzA4NTAwRkYxNEEwMDAwNTg0Ci06MTA2RTQwMDAzMDg3MDAwRjI0NjYwMDA4MDAwNDIyMDIzMEMzMDBGRkQwCi06MTA2RTUwMDAzMDg3MDAwRjE0RTAwMDA1MzA4OTAwMDMyNDY4MDAwNDI3Ci06MTA2RTYwMDAwMDA0MjEwMjMxMDMwMEZGMzA4OTAwMDMxNTIwMDAwNUQyCi06MTA2RTcwMDAzODhCMDAwMTI0NkEwMDAyMDAwNDIwODIzMTQzMDBGRkE1Ci06MTA2RTgwMDAzODhCMDAwMTMxNjQwMDAxMTA4MDAwMDIyNDZDMDAwMTg1Ci06MTA2RTkwMDAzMTgzMDBGRjAzRTAwMDA4MDA2MDEwMjEzMDhCRkZGRjBBCi06MTA2RUEwMDAwMDBCMzk0MjMwRTYwMEZGM0MwOTA4MDAyNTI5NTk5OEJCCi06MTA2RUIwMDAwMDA2NDA4MDAxMDk2MDIxOEQ4NzAwMDAzMTY0MDAxRkI5Ci06MTA2RUMwMDAyNDBBMDAwMTAwOEExODA0MzBBNTAwRkYwMEUzMjAyNUYxCi06MTA2RUQwMDAxNEEwMDAwMjAwMDMxMDI3MDBFMjIwMjQyNDBGMDAwMTY4Ci06MTA2RUUwMDAwMENGNzAwNDAxMDk2ODIxMDAwRTI4MjcxNDgwMDAwNUQ2Ci06MTA2RUYwMDBBREE0MDAwMDhGODYwMDBDMDBBNjEwMjQwM0UwMDAwODVCCi06MTA2RjAwMDBBRjgyMDAwQzhGODgwMDBDMDFDODEwMjUwM0UwMDAwODM4Ci06MTA2RjEwMDBBRjgyMDAwQzNDMDYwMDFGM0MwMzYwMDAzMDg0RkZGRjgyCi06MTA2RjIwMDAzNEM1RkY4MDI0MDIwMDIwQUM2MDIwMDhBQzYwMjAwQzM3Ci06MTA2RjMwMDBBQzYwMjAxMEFDNjUyMDE0QUM2NDIwMThBQzYyMjAwMDVBCi06MTA2RjQwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDU2Ci06MTA2RjUwMDAyN0JERkZFODI0MDJGRkZGQUZCRjAwMTBBRjgyMDAwQzg3Ci06MTA2RjYwMDAwMDAwMjAyMTNDMDYwODAwMjRDNjU5OTgyNDA1RkZGRjk0Ci06MTA2RjcwMDAyNDg5MDAwMTAwMDQ0MDgwMzEyNEZGRkYwMTA2MTgyMTBDCi06MTA2RjgwMDAyQzg3MDAyMDE0RTBGRkZBQUM2NTAwMDAwRTAwMDgyNUY1Ci06MTA2RjkwMDAwMDAwMjAyMTI0MDIwMDAxM0MwNDYwMDAyNDA1MDAyMEEwCi06MTA2RkEwMDBBQzgyMjAxOEFDODUyMDAwMDAwMDAwMDAwMDAwMDAwMDJBCi06MTA2RkIwMDAwMDAwMDAwMDI0NEEwMDAxMzE0MkZGRkYyQzQ2MDQwMDdCCi06MTA2RkMwMDAxNEMwRkZGNzhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEIyCi06MTA2RkQwMDA4RjgzMDAwODJDNjIwNDAwMDNFMDAwMDgzODQyMDAwMTlGCi06MTA2RkUwMDA4RjgzMDAwODI0NjIwMDAxMDNFMDAwMDhBRjgyMDAwOERDCi06MTA2RkYwMDA4RjgzMDAwODI0NjJGRkZGMDNFMDAwMDhBRjgyMDAwOENGCi06MTA3MDAwMDAyN0JERkZFMEFGQjEwMDE0QUZCRjAwMThBRkIwMDAxMDU0Ci06MTA3MDEwMDA4RjZCMDAzMDNDMDY2MDAwMDA4MDg4MjFBQ0NCMjAwOERDCi06MTA3MDIwMDA4RjZBMDAyQzNDMDI4MDAwMjQwMzAwMDhBQ0NBMjAwQ0FDCi06MTA3MDMwMDA5NzY5MDAzQTk3NjgwMDM4MDAwOTJDMDAzMTA3RkZGRjc0Ci06MTA3MDQwMDAwMEE3MjAyNUFDQzQyMDEwQUNDMjIwMTRBQ0MzMjAwMDgzCi06MTA3MDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzAzNjAwMDkxCi06MTA3MDYwMDA4QzZEMjAwMDMxQUMwMDA4MTU4MEZGRjkwMDAwMDAwMDk1Ci06MTA3MDcwMDA4QzZFMjAxNDA1QzAwMDIwMDAwMDAwMDAwRTAwMDdFOUZGCi06MTA3MDgwMDA4Rjg0MDAwQzAwMDI0MDgwM0MwOTA4MDAyNTI5NTk5ODkzCi06MTA3MDkwMDAwMTA5MzgyMThDRTQwMDAwMEUwMDA3RTkwMDAyODE0MDVDCi06MTA3MEEwMDAwMjAyMjAyMTMwOTBGRkZGMDIwMDIwMjEwRTAwMDgwNzdECi06MTA3MEIwMDAwMDAwMjgyMTNDMEM4MDAwMDIyQzU4MjUzMjEwRkZGRkQ0Ci06MTA3MEMwMDAzQzExNjAwMDI0MEEwMDIwQUUyQjIwMTRBRTMwMjAxOEEyCi06MTA3MEQwMDBBRTJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTA3MEUwMDAwMjAwMTAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDY0Ci06MTA3MEYwMDAwM0UwMDAwODI3QkQwMDIwOEM2NjIwMTQzQzAyMDAxRjFFCi06MTA3MTAwMDAzNDQzRkY4MDNDMUZGRkU4MDBDM0MwMjQzN0Y5MDgwMDY4Ci06MTA3MTEwMDAwMzE5ODAyMTAwMTA3OUMyM0MwQzgwMDAwMjJDNTgyNUY0Ci06MTA3MTIwMDAzMUYwRkZGRjNDMTE2MDAwMjQwQTAwMjBBRTJCMjAxNDM4Ci06MTA3MTMwMDBBRTMwMjAxOEFFMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDQxCi06MTA3MTQwMDAwMDAwMDAwMDAyMDAxMDIxOEZCRjAwMTg4RkIxMDAxNDUyCi06MTA3MTUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFODI2Ci06MTA3MTYwMDBBRkIwMDAxMDM0MDJGRkZGMzA5MEZGRkZBRkJGMDAxNDNDCi06MTA3MTcwMDAxMjAyMDAwNjAyMDAyMDIxMEUwMDA4MjUwMDAwMDAwMDc3Ci06MTA3MTgwMDAwMjAwMjAyMTBFMDAwODA3MjQwNTAwMDE4Rjg0MDAwODVBCi06MTA3MTkwMDA4RkJGMDAxNDhGQjAwMDEwMjQ4M0ZGRkYyN0JEMDAxODlECi06MTA3MUEwMDAwM0UwMDAwOEFGODMwMDA4MDAwNDM5QzIzMEU2MDAzRjY2Ci06MTA3MUIwMDAwMDA0M0I0MjAwMDcxODQwMjQwMjEwMDAyQ0M0MDAyMEE5Ci06MTA3MUMwMDAyNEM4RkZFMEFGNDIwMDJDMjQ2MzAwMDExNDgwMDAwM0I4Ci06MTA3MUQwMDAzMEE5MDBGRjAwMDcxODQwMzEwNjAwRkYwMDAzNjA4MDVGCi06MTA3MUUwMDAyNDA4MDAwMTAxOUE1ODIxM0MwQTAwMEUwMEM4MjgwNDE2Ci06MTA3MUYwMDAwMTZBMzgyMTExMjAwMDA1MDAwNTMwMjc4Q0U5MDAwMEM0Ci06MTA3MjAwMDAwMTI1MzAyNTAzRTAwMDA4QUNFNjAwMDA4Q0VFMDAwMDBDCi06MTA3MjEwMDAwMUM2NjgyNDAzRTAwMDA4QUNFRDAwMDAyN0JERkZFOENDCi06MTA3MjIwMDBBRkJGMDAxNEFGQjAwMDEwM0MwNDYwMDA4Qzg1MDgwOEFDCi06MTA3MjMwMDAzNDAzRjAwMDMwQTJGMDAwNTA0MzAwMDYyNDAyMDAwMUE1Ci06MTA3MjQwMDA4Qzg3MDgwODM0MDRFMDAwMzBFNkYwMDAxMEM0MDAxRTBCCi06MTA3MjUwMDAyNDAyMDAwMkFGODIwMDQwM0MxMDYwMDAzQzBBMDIwMEExCi06MTA3MjYwMDBBRTBBMDgxNDI0MDkxMDAwM0MwODAwMEU4RTAzNDQwMEU2Ci06MTA3MjcwMDAwMzQ4MjAyMUFGNDkwMDJDMjQwNTAxMjAwRTAwMENDRjJCCi06MTA3MjgwMDAwMDAwMzAyMThGODMwMDQwMTA2MDAwMDQzQzAyMTY5MTAyCi06MTA3MjkwMDAyNDBCMDAwMTEwNkIwMDBFM0MwMjNENkMzNDRGMDA5MDNCCi06MTA3MkEwMDBBRTBGNDQwODhGQkYwMDE0OEZCMDAwMTAzQzBDNjAwMDdDCi06MTA3MkIwMDAyNDBFMTAwMDNDMEQwMjAwMjdCRDAwMThBRDhFNDQyMEE2Ci06MTA3MkMwMDAwM0UwMDAwOEFEOEQwODEwMEEwMDA4RjZBRjgwMDA0MDBBCi06MTA3MkQwMDAzQzAyMThEQTM0NEYwMDkwQUUwRjQ0MDg4RkJGMDAxNDAwCi06MTA3MkUwMDA4RkIwMDAxMDNDMEM2MDAwMjQwRTEwMDAzQzBEMDIwMDFBCi06MTA3MkYwMDAyN0JEMDAxOEFEOEU0NDIwMDNFMDAwMDhBRDhEMDgxMEI2Ci06MTA3MzAwMDAwQTAwMDhDQTI0MDUwMDAxMEEwMDA4Q0EwMDAwMjgyMTUyCi06MTA3MzEwMDAzQzA4MDgwMDI1MDg1REE0MjQwNEZGRkYwMTAwMTgyMTkzCi06MTA3MzIwMDAyNDAyMDAxRTI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDY0Ci06MTA3MzMwMDAyNDYzMDAwNDNDMDcwODAwMjRFNzVFMjA4Q0U1RkZGQzgyCi06MTA3MzQwMDAyNDA0MDAxQzI0MDYwMDAxMzA4QTAwMUYwMTQ2NDgwNDYyCi06MTA3MzUwMDAyNDg0MDAwMTAwMDkxMDI3MkM4MzAwMjAxNDYwRkZGQTA4Ci06MTA3MzYwMDAwMEEyMjgyNEFDRTVGRkZDM0MwNTY2NjYzNEE0NjE2RUVGCi06MTA3MzcwMDAzQzA2MDgwMDI0QzY1RUUwQUY4NDAwNThBRjg4MDA5QzNECi06MTA3MzgwMDAyNDA0RkZGRjAwQzAxODIxMjQwMjAwMUYyNDQyRkZGRjM1Ci06MTA3MzkwMDBBQzY0MDAwMDA0NDFGRkZEMjQ2MzAwMDQzQzA3NjY2NjAyCi06MTA3M0EwMDAzQzA1MDgwMDI0QTU1RUEwQUY4NjAwNDgzNEU2NjE2RTY3Ci06MTA3M0IwMDBBRjg2MDA5ODI0MDRGRkZGMDBBMDE4MjEyNDAyMDAwRkNDCi06MTA3M0MwMDAyNDQyRkZGRkFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDdECi06MTA3M0QwMDAzQzBCNjY2NjNDMDYwODAwMjRDNjVFMjAzNTY4NjE2RTdDCi06MTA3M0UwMDBBRjg1MDBBNEFGODgwMDcwMjQwNEZGRkYwMEMwMTgyMUZGCi06MTA3M0YwMDAyNDAyMDAxRjI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDkzCi06MTA3NDAwMDAyNDYzMDAwNDNDMEQ2NjY2M0MwQTA4MDAyNTRBNUY2MDYwCi06MTA3NDEwMDAzNUFDNjE2RUFGODYwMDkwQUY4QzAwNUMyNDA0RkZGRjNBCi06MTA3NDIwMDAwMTQwMTgyMTI0MDIwMDAzMjQ0MkZGRkZBQzY0MDAwMDQ1Ci06MTA3NDMwMDAwNDQxRkZGRDI0NjMwMDA0M0MwOTA4MDAyNTI5NUY3MDE2Ci06MTA3NDQwMDA4RDI3RkZGQzI0MDQwMDA2MjQwNTAwMDEzMDk5MDAxRjRECi06MTA3NDUwMDAwMzI1QzAwNDI0ODQwMDAxMDAxODc4MjcyQzhFMDAyMDA2Ci06MTA3NDYwMDAxNUMwRkZGQTAwRUYzODI0QUQyN0ZGRkMzQzA5NjY2NjIzCi06MTA3NDcwMDAyNDAzMDQwMDI0MDQwM0RDMjQwNTAyMDAyNDA2MDA2NjFGCi06MTA3NDgwMDAzNTIyNjE2RTNDMDgwODAwMjUwODVBQTRBRjgyMDA3NEJBCi06MTA3NDkwMDBBRjgzMDA0NEFGODMwMDZDQUY4MzAwNTBBRjgzMDA4NEEwCi06MTA3NEEwMDBBRjhBMDA4Q0FGODQwMDY0QUY4NTAwNENBRjg2MDA1NDc3Ci06MTA3NEIwMDBBRjg0MDA3OEFGODUwMDYwQUY4NjAwODAwMTAwMTgyMTlFCi06MTA3NEMwMDAyNDAyMDAwMjI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGREUzCi06MTA3NEQwMDAyNDYzMDAwNDI0MDQwMDAzMjQwMzAwMEMzQzBBMDgwMDc1Ci06MTA3NEUwMDAyNTRBNUFCMEFGOEEwMDY4MEEwMDA5OUQyNDA1RkZGRkFCCi06MTA3NEYwMDAwMDA0MTg4MDI0ODQwMDAxMDA2ODU4MjEyQzg3MDBDMEYzCi06MTA3NTAwMDAxNEUwRkZGQkFENjUwMDAwM0MwRTY2NjYzNUNENjE2RTk0Ci06MTA3NTEwMDAyNDBDMTdBMDI0MDgxODAwQUY4RDAwODhBRjhDMDA5NEFECi06MTA3NTIwMDAwM0UwMDAwOEFGODgwMDdDMjQ4NDAwN0YwMDA0MjFDMkFGCi06MTA3NTMwMDAwMDAwNDAyMTAwMDAzMDIxMDAwMDM4MjEwMDAwMjgyMUY3Ci06MTA3NTQwMDAwQTAwMDlCNEFGODQwMEEwMTA2MDAwMDYyNEU3MDAwMTFGCi06MTA3NTUwMDAwMEM0MzAyMTI0QTUwMDAxMkNDMjBCRjUxNDQwRkZGQTExCi06MTA3NTYwMDAyQ0EzMDA2NjNDMDkwODAwMjUyOTVGNjAwMTIwMTgyMTMyCi06MTA3NTcwMDAyNDAyMDAwMzI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGRDMxCi06MTA3NTgwMDAyNDYzMDAwNDEwRTAwMDFBMjRFM0ZGRkYwMDAzMjk0MkYzCi06MTA3NTkwMDAxMEEwMDAwQTAwMDAyMDIxMjQwNkZGRkYzQzAzMDgwMDgxCi06MTA3NUEwMDAyNDYzNUY2MDI0ODQwMDAxMDA4NTUwMkJBQzY2MDAwMERBCi06MTA3NUIwMDAyNTA4MDAwMTE1NDBGRkZCMjQ2MzAwMDQzMEUyMDAxRjkyCi06MTA3NUMwMDAxMDQwMDAwODAwMDg2ODgwMjQwQzAwMDEwMDRDMzgwNEJBCi06MTA3NUQwMDAwMDA4NTg4MDAxNjkyODIxMjRFNkZGRkYwM0UwMDAwODI1Ci06MTA3NUUwMDBBQ0E2MDAwMDAxQTk0MDIxMjQwOUZGRkZBRDA5MDAwMDVECi06MTA3NUYwMDAwM0UwMDAwODAwMDAwMDAwQUY0NDAwMjgzQzA0MDAwQzM5Ci06MTA3NjAwMDAwMzQ0MjAyMTAwMDUyODgyMEEwMDBDQ0YwMDAwMzAyMTBECi06MTA3NjEwMDAwMDA0MjE4MDNDMDM2MDAwQUM2NDEwMDgwMDAwMDAwMEZFCi06MTA3NjIwMDAwMDA1Mjk4MEFDNjUxMDBDMDAwMDAwMDAwM0UwMDAwODk0Ci06MTA3NjMwMDA4QzYyMTAwQzI3QkRGRkU4MDA4MDI4MjEyNDA0MDAzODRDCi06MTA3NjQwMDBBRkJGMDAxNDBFMDAwOUU0QUZCMDAwMTAyNDA0MEUwMDE4Ci06MTA3NjUwMDBBRjQ0MDAyODNDMTAwMDBDMDM1MDIwMjEyNDA1MDAxMEVBCi06MTA3NjYwMDAwRTAwMENDRjAwMDAzMDIxMDM1MDEwMjFBQzQwMDAwMDcwCi06MTA3NjcwMDBBQzQwMDAwNDI0MDQwMDM4OEZCRjAwMTQ4RkIwMDAxMDA5Ci06MTA3NjgwMDAyNDA1M0ZGRjI3QkQwMDE4MEEwMDA5RTQ4QzQzMDAwMEQxCi06MTA3NjkwMDAwMDA0MjE4MDNDMDM2MDAwQUM2NDEwMDgwMDAwMDAwMDdFCi06MTA3NkEwMDA4QzYyMTAwQzAzRTAwMDA4MDAwMjExODIyN0JERkZDOEE1Ci06MTA3NkIwMDBBRkI0MDAyMDhGOTQwMDY4QUZCRTAwMzBBRkI3MDAyQzhECi06MTA3NkMwMDBBRkI2MDAyODAwMDBCODIxMDA4MEIwMjEyNDFFMDBDMDAxCi06MTA3NkQwMDBBRkJGMDAzNEFGQjUwMDI0QUZCMzAwMUNBRkIyMDAxODg5Ci06MTA3NkUwMDBBRkIxMDAxNEFGQjAwMDEwMEEwMDBBMjFBRkE1MDAzQ0YyCi06MTA3NkYwMDA1MDQwMDAwMThGOTQwMDY4MjdERUZGRkYxM0MwMDAyODcwCi06MTA3NzAwMDAyNjk0MDAwNDhFOTIwMDAwM0MwMzA4MDAyNDYzNURBMEQwCi06MTA3NzEwMDAxMjQwRkZGNzAyODMxMDJCM0MwNDA4MDAyNDg0NUFBNDczCi06MTA3NzIwMDAwMjg0MTAyMzAwMDJBOEMwMDAwMDk4MjEwQTAwMEEzMDM5Ci06MTA3NzMwMDAyNDExMDAwMTAwMTE4ODQwMTIyMDAwMjYwMDAwMDAwMEUyCi06MTA3NzQwMDAwMkIzODAyMTAyNTEyODI0MDIwMDIwMjExMEEwRkZGOTU5Ci06MTA3NzUwMDAyNjczMDAwMTBFMDAwOUVEMDAwMDAwMDAwMDE2Njg0MENECi06MTA3NzYwMDAzMkVDMDAwMTAxQUMyMDIxMEUwMDA5RTQwMjAwMjgyMUM2Ci06MTA3NzcwMDA4Rjg5MDA5NDI2RjcwMDAxOEZBNjAwM0MzQUVCMDAwMUE4Ci06MTA3NzgwMDAzMTZBMDAwMTI1MjhGRkZGMDAxMTM4MjcwMkNBQjAyMTA1Ci06MTA3NzkwMDBBRjg4MDA5NDE2RTZGRkU3MDI0NzkwMjRBRTkyMDAwMEZGCi06MTA3N0EwMDAwMkUwMTAyMThGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQzU1Ci06MTA3N0IwMDA4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzMzCi06MTA3N0MwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEQyCi06MTA3N0QwMDAyN0JEMDAzODNDMEUwODAwMjVDRTVEQTAwMjhFMTAyQjgwCi06MTA3N0UwMDAwQTAwMEExQ0FFOTIwMDAwMjdCREZGRDhBRkIxMDAxNEZBCi06MTA3N0YwMDBBRkIwMDAxMEFGQkYwMDIwQUZCMzAwMUNBRkIyMDAxODk1Ci06MTA3ODAwMDAwMEEwODgyMTEwQTAwMDFGMDAwNDgwNDAzQzEzMDgwMDQ1Ci06MTA3ODEwMDAyNjczNUFBNDBBMDAwQTY5MjQxMjAwMDExMjIwMDAxOUQyCi06MTA3ODIwMDAyNjEwMDAwMTBFMDAwQTA0MDIwMDIwMjEwMDAyMzE0MjRECi06MTA3ODMwMDAyNDQ0RkZBMDAwMDYxODgwMzA0NTAwMUYyQzgyMTdBMUE5Ci06MTA3ODQwMDAwMDczMTgyMTI2MzFGRkZGMTA0MEZGRjQwMEIyMzAwNDBFCi06MTA3ODUwMDA4QzY5MDAwMDAyMDAyMDIxMjQwNTNGRkYwMTI2NDAyNEZFCi06MTA3ODYwMDAxNTAwRkZFRTAxMjYzODI1MEUwMDA5RTRBQzY3MDAwMDg0Ci06MTA3ODcwMDA4RjhBMDA5NDI2MTAwMDAxMjU0NzAwMDExNjIwRkZFOTk5Ci06MTA3ODgwMDBBRjg3MDA5NDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODA5Ci06MTA3ODkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODRFCi06MTA3OEEwMDA4Rjg1MDA5QzAwODA1ODIxMDAwMDQwMjEwMDAwNDgyMTY1Ci06MTA3OEIwMDAyNDBBMDAxRjNDMEMwODAwMjU4QzVFMUMzQzBEMDgwMEFGCi06MTA3OEMwMDAyNUFENURBNDhDQTYwMDAwNTBDMDAwMTQwMDAwNDAyMTJFCi06MTA3OEQwMDAwMEFEMTAyMzAwMDIzOEMwMjQwMzAwMDEwQTAwMEFBMkYwCi06MTA3OEUwMDAwMDAwMjAyMTE1MDAwMDAzMDBFNDEwMjEyNDQ4MjAyNDdBCi06MTA3OEYwMDAwMDAwNDgyMTI1MjkwMDAxNTEyQjAwMTMyNTA2REZEQzVCCi06MTA3OTAwMDAxMDYwMDAwNjI0ODQwMDAxMDBDMzcwMjQxNUMwRkZGNTM4Ci06MTA3OTEwMDAwMDAzMTg0MDBBMDAwQUEwMDAwMDQwMjExMEFDMDAyNjE1Ci06MTA3OTIwMDAyNEEzMDAwNDAwNjAyODIxMjU0QUZGRkYxNTQwRkZFNTNECi06MTA3OTMwMDBBRjg1MDA5QzUxMkIwMDA0MjUwNkRGREMwMDAwNDAyMUIwCi06MTA3OTQwMDAwM0UwMDAwODAxMDAxMDIxMDAwNjYxNDIzMEM1MDAxRjVECi06MTA3OTUwMDAwMDBDNTA4MDNDMDcwODAwMjRFNzVEQTQyNDA0MDAwMUNCCi06MTA3OTYwMDAwMTQ3MzAyMTExMjAwMDBGMDBBNDIwMDQzQzA1MDgwMDJECi06MTA3OTcwMDAyNEE1NUUyMDE0ODAwMDA1MjUyOUZGRkYyNEM2MDAwNEVECi06MTA3OTgwMDAxMEM1MDAxMTAwMDAwMDAwMjQwNDAwMDE4Q0NGMDAwMDhECi06MTA3OTkwMDAwMDA0QzAyNzAwMDQyMDQwMDFGODY4MjQxNTIwRkZGNUVBCi06MTA3OUEwMDBBQ0NEMDAwMDhGOTkwMDc4MDEwMDEwMjEwMzJCNDgyM0YzCi06MTA3OUIwMDAwM0UwMDAwOEFGODkwMDc4M0MwNTA4MDAyNEE1NURBNDE5Ci06MTA3OUMwMDAwQTAwMEFBQTAwMDA0MDIxM0MwNjA4MDAyNEM2NURBNDYzCi06MTA3OUQwMDAwQTAwMEFDMzI0MDQwMDAxMzA4ODAwRkYyNDAyMDAwMkM4Ci06MTA3OUUwMDAxMTAyMDAwQTI0MDMwMDAzMTEwMzAwNUM4Rjg5MDBBNDI0Ci06MTA3OUYwMDAyNDA0MDAwNDExMDQwMDVGMjQwNTAwMDUxMTA1MDA2NzNDCi06MTA3QTAwMDAwMDAwMTgyMTAzRTAwMDA4MDA2MDEwMjE4Rjg5MDA0ODYxCi06MTA3QTEwMDAzQzBDMDgwMDI1OEM1RUUwM0MwNDA4MDAyNDg0NUY2MDc4Ci06MTA3QTIwMDAyNDAzMDAyMDEwNjAwMDBGMDAwMDU4MjEyNDBEMDAwMkU0Ci06MTA3QTMwMDAyNDBFMDAwMzNDMEYwODAwMjVFRjVFRTA4RDI3MDAwMEI4Ci06MTA3QTQwMDAxNEUwMDAwQjMwRjlGRkZGMjUyOTAwMDQwMTI0QzAyQkFFCi06MTA3QTUwMDA1MzAwMDAwMTAxODA0ODIxMjQ2M0ZGRkY1NDYwRkZGOEI4Ci06MTA3QTYwMDA4RDI3MDAwMDAxNjAxODIxMDNFMDAwMDgwMDYwMTAyMTRDCi06MTA3QTcwMDAxMzIwMDAzMjNDMDUwMEZGMzBFMjAwRkYwMDQwMzAyMUJGCi06MTA3QTgwMDAxMDQwMDA0MjAwMDA1MDIxMjQwNTAwMDEwMDAwMjAyMTg4Ci06MTA3QTkwMDAwMDA1Qzg0MDAwQTZDMDI0MTcwMDAwMDMzMzI1MDBGRkRFCi06MTA3QUEwMDAxNEEwRkZGQjI0ODQwMDAxMDEyQ0MwMjMwMDE4MjhDMDZGCi06MTA3QUIwMDAwMEFBNjAyMTAwOEM1MDIxMzE0NDAwMUYyNDBDMDAwMUQ5Ci06MTA3QUMwMDAwMDhDMTgwNDAwMDMxMDI3MDBFMjMwMjQxMTBEMDA0MTNGCi06MTA3QUQwMDBBRDI2MDAwMDExMEUwMDRDMDAwQTE4NDAxMTBEMDAzNkIyCi06MTA3QUUwMDA4Rjg3MDA2QzUxMEUwMDU2OEY4QzAwNjAyNDBEMDAwNEFGCi06MTA3QUYwMDAxMTBEMDA1QThGOEUwMDg0MjQwRTAwMDUxNTBFRkZEQTNBCi06MTA3QjAwMDAwMTYwMTgyMTI0MEIxNDMwMTE0MDAwMDYwMDAwMTgyMUQ4Ci06MTA3QjEwMDA4Rjg0MDBBMDI0NjMwMDAxMDA2QTQwMkIxNTAwRkZGRDQ0Ci06MTA3QjIwMDAwMTY0NTgyMThGOEEwMDgwQUY4OTAwOEMwMTYwMTgyMTgwCi06MTA3QjMwMDAyNTQ5RkZGRjBBMDAwQUZBQUY4OTAwODAwMEU1MjAyNEVBCi06MTA3QjQwMDAwMDA3MzYwMjEwODBGRkQwMjQwQTAwMTgwMDA3NTQwMkY0Ci06MTA3QjUwMDAzMTQ2MDBGRjBBMDAwQjAyMjQwQTAwMTAzQzBDMDgwMDBBCi06MTA3QjYwMDAyNThDNUVBMDNDMDQwODAwMjQ4NDVFRTAwQTAwMEFFOTNCCi06MTA3QjcwMDAyNDAzMDAxMDNDMEMwODAwMjU4QzVFMjAzQzA0MDgwMDA3Ci06MTA3QjgwMDAyNDg0NUVBMDBBMDAwQUU4OEY4OTAwOTAwMDA3MUEwMjg4Ci06MTA3QjkwMDAzMDY2MDBGRjBBMDAwQjAyMjQwQTAwMDg4Rjg5MDA4QzVGCi06MTA3QkEwMDAzQzBDMDgwMDI1OEM1RjYwM0MwNDA4MDAyNDg0NUY3MDU2Ci06MTA3QkIwMDAwQTAwMEFFOTI0MDMwMDA0MDAwQTQwODAyNTBCMDAzMDczCi06MTA3QkMwMDAyNEU2RkZGRjAxNjAxODIxQUY4OTAwNDgwQTAwMEFGQTg1Ci06MTA3QkQwMDBBRjg2MDA2QzAwMEFDOTgyMDAxOTc4ODAzQzA3MDgwMDUzCi06MTA3QkUwMDAyNEU3NUVBMDAxRTcyMDIxMDAwQTE4NDI4QzhGMDAwMEU0Ci06MTA3QkYwMDAzMDc5MDAxRjAzMkMzODA0MDAwN0MwMjcwMUY4NjAyNEU3Ci06MTA3QzAwMDAwQTAwMEIxN0FDOEMwMDAwMDAwMzMxNDIwMDA2Mjg4MEVDCi06MTA3QzEwMDAwMEFGMjgyMTMwNjIwMDFGOENCODAwMDAyNDYzMDAwMUVGCi06MTA3QzIwMDAwMDRDQzgwNDAwMDMyMTQyMDAxOTM4MjcwMDA0MTA4MENBCi06MTA3QzMwMDAwMzA3MzAyNDAwNEYyMDIxMEEwMDBCNUJBQ0E2MDAwMDk0Ci06MTA3QzQwMDAwMDBBNjhDMDI1QUIwMDMyMjU4QUZGRkYwMTYwMTgyMUI5Ci06MTA3QzUwMDBBRjg5MDBBNDBBMDAwQUZBQUY4QTAwNjAyNTRCMTAzMEYxCi06MTA3QzYwMDBBRjg5MDA5MDAxNjAxODIxMjVDOUZGRkYwQTAwMEFGQUI4Ci06MTA3QzcwMDBBRjg5MDA4NDMwODYwMDA3MkNDMjAwMDYxMDQwMDAxNDMzCi06MTA3QzgwMDAwMDAwMDAwMDAwMDY0MDgwM0MwMzA4MDAyNDYzNTdEMDM5Ci06MTA3QzkwMDAwMTAzMzgyMThDRTQwMDAwMDA4MDAwMDgwMDAwMDAwMDhGCi06MTA3Q0EwMDAyNDA5MDAwMzEwQTkwMDBFMDAwMDAwMDAyNDBBMDAwNUFBCi06MTA3Q0IwMDAxMEFBMDAwQjAwMDAwMDAwMjQwQjAwMDExMEFCMDAwODBDCi06MTA3Q0MwMDAwMDAwMDAwMDhGOEMwMEEwMTBBQzAwMDUwMDAwMDAwMDM4Ci06MTA3Q0QwMDAwM0UwMDAwODAwMDAxMDIxMEEwMDBBODgwMEEwMjAyMTBCCi06MTA3Q0UwMDAwQTAwMEFENjAwQzAyMDIxMjdCREZGRTgzMDg0MDBGRjJCCi06MTA3Q0YwMDAyNDAzMDAwMjEwODMwMDBCQUZCRjAwMTAyNDA2MDAwMzEyCi06MTA3RDAwMDAxMDg2MDAzQTI0MDgwMDA0MTA4ODAwNjgyNDBFMDAwNTNDCi06MTA3RDEwMDAxMDhFMDA3RjJDQUYxNDMwOEZCRjAwMTAwM0UwMDAwOERFCi06MTA3RDIwMDAyN0JEMDAxODJDQTIwMDMwMTQ0MEZGRkM4RkJGMDAxMEFDCi06MTA3RDMwMDAyNEE1RkZEMDAwMDUzMUMyMDAwNjY4ODAzQzA3MDgwMDdBCi06MTA3RDQwMDAyNEU3NUVFMDAxQTczMDIxOENDOTAwMDAwMDA1Mjg4MkVECi06MTA3RDUwMDAzMEFDMDAxRjI0MEIwMDAxMDE4QjUwMDQ4Rjg0MDA0OEJECi06MTA3RDYwMDAwMTJBNDAyNUFDQzgwMDAwOEM4MzAwMDA1MDYwMDAwMTRGCi06MTA3RDcwMDBBRjg2MDA0ODhGOTgwMDZDMzBBRTAwMDEyNEE2RkZGRjRDCi06MTA3RDgwMDAyNzBGMDAwMTE1QzAwMDAyQUY4RjAwNkMyNEE2MDAwMTcwCi06MTA3RDkwMDAwMDA2NDE0MjAwMDgyMDgwMDA4NzE4MjE4Qzc5MDAwMEVECi06MTA3REEwMDAzMEMyMDAxRjI0MDYwMDAxMDA0NkY4MDQwMzNGMzgyNEI3Ci06MTA3REIwMDAxMEUwRkZEQThGQkYwMDEwMDAwNUMxODIwMDE4NzA4MDRDCi06MTA3REMwMDAzQzBGMDgwMDI1RUY1RUEwMDFDRjQ4MjE4RDJCMDAwMDVECi06MTA3REQwMDAwMDA1Njg0MjMxQTUwMDFGMDBBNjYwMDQwMTZDNTAyNTEzCi06MTA3REUwMDAyN0JEMDAxODAzRTAwMDA4QUQyQTAwMDAyQ0E3MDAzMEQyCi06MTA3REYwMDAxNEUwRkZDQThGQkYwMDEwMzBCOTAwMDcxNzIzRkZDNzc4Ci06MTA3RTAwMDAyNEE4RkZDRTAwMDg2QTAyMDAwRDYwODAzQzBCMDgwMDI5Ci06MTA3RTEwMDAyNTZCNUVBMDAxOEIzMDIxOENDNDAwMDAwMDA4MjhDMkI1Ci06MTA3RTIwMDAzMEFBMDAxRjI0MDgwMDAxMDE0ODQ4MDQ4RjgyMDBBNEUyCi06MTA3RTMwMDAwMDg5MTgyNUFDQzMwMDAwOEM1RjAwMDA1M0UwMDAwMUVFCi06MTA3RTQwMDBBRjg2MDBBNDAwMDU3MDQwMDAwRTc5NDIwMDBGMjg4MDI0Ci06MTA3RTUwMDAzQzA0MDgwMDI0ODQ1RUUwMDBBNDE4MjE4QzZCMDAwMDIwCi06MTA3RTYwMDAyNURGMDAwMTMxQ0QwMDFGMDAxRjUxNDIwMUE4NjAwNDMxCi06MTA3RTcwMDAwMTZDNDgyNTAwMEExMDgwQUM2OTAwMDAwMDQ0MjgyMUVDCi06MTA3RTgwMDA4Q0E2MDAwMDhGOTgwMDYwMzNGOTAwMUY4RkJGMDAxMDkwCi06MTA3RTkwMDAwMzI4MzgwNDAwQzc3ODI1MjcwRTAwMDEyN0JEMDAxOEU1Ci06MTA3RUEwMDBBQ0FGMDAwMDAzRTAwMDA4QUY4RTAwNjAyNEE1RUZEMDY3Ci06MTA3RUIwMDAyQ0I4MDQwMDEzMDBGRjk5OEZCRjAwMTAwMDA1MzE0MjU5Ci06MTA3RUMwMDAwMDA2NTg4MDNDMEEwODAwMjU0QTVFMjAwMTZBMzAyMURECi06MTA3RUQwMDA4Q0M0MDAwMDMwQTMwMDFGMjQwOTAwMDEwMDY5MTAwNEI1Ci06MTA3RUUwMDA4Rjk5MDA5MDAwODJGODI1QUNERjAwMDA4RjI3MDAwMEZBCi06MTA3RUYwMDA1MEUwMDAwMUFGODYwMDkwOEY4RDAwODQ4RkJGMDAxMDhFCi06MTA3RjAwMDAyN0JEMDAxODI1QUMwMDAxMDNFMDAwMDhBRjhDMDA4NEY5Ci06MTA3RjEwMDAxNUUwRkY4MjhGQkYwMDEwOEY4NjAwQTAwMDA2MTA0MDgyCi06MTA3RjIwMDAwMDQ2RjgyMTAwMUYyMTAwMDNFNEM4MjEwMDE5Mzg0MDUxCi06MTA3RjMwMDAyNEY4MTQzMDAwQjg0MDJCMTEwMEZGNzg4RkJGMDAxMEQ4Ci06MTA3RjQwMDAyNEE0RUJEMDBFMDAwMjAzMDBDMDI4MjEwMDAyNzk0MkQ1Ci06MTA3RjUwMDAwMDBGNzA4MDNDMEQwODAwMjVBRDVGNjAwMUNEMjAyMTMxCi06MTA3RjYwMDA4QzhCMDAwMDMwNEMwMDFGMjQwNjAwMDEwMTg2MTgwNDkxCi06MTA3RjcwMDA4Rjg5MDA4QzAxNjM1MDI1QUM4QTAwMDA4RDI1MDAwMDlDCi06MTA3RjgwMDA1MEEwMDAwMUFGODQwMDhDOEY5ODAwODA4RkJGMDAxMDNDCi06MTA3RjkwMDAyN0JEMDAxODI3MDgwMDAxMDNFMDAwMDhBRjg4MDA4MDEzCi06MTA3RkEwMDAzMEE1MDAwNzI0MDMwMDAzMTBBMzAwMTAyOEEyMDAwNDNBCi06MTA3RkIwMDAxNDQwMDAwODI0MDcwMDAyMjQwMzAwMDQxMEEzMDAxNTQ1Ci06MTA3RkMwMDAyNDA4MDAwNTEwQTgwMDBGOEY4NTAwQTAwM0UwMDAwODFBCi06MTA3RkQwMDAwMDAwMDAwMDE0QTdGRkZEMDA4MDI4MjExNEMzRkZGQjUwCi06MTA3RkUwMDAyNDA0MDAwMjBBMDAwQjlBMDAwMDAwMDAyNDA5MDAwNTg2Ci06MTA3RkYwMDAwMDgwMjgyMTEwQzlGRkZCMjQwNDAwMDMwM0UwMDAwOENGCi06MTA4MDAwMDAwMDAwMDAwMDE0QzVGRkYxMDA4MDI4MjEwQTAwMEI5QTJGCi06MTA4MDEwMDAyNDA0MDAwNTI0MEEwMDAxMDA4MDI4MjExMENBRkZGMTcxCi06MTA4MDIwMDAyNDA0MDAwNDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDc2Ci06MTA4MDMwMDBBRkIwMDAxMDAwMDU4MUMyMjYwM0ZGRDAyNEM1MDAzRjY5Ci06MTA4MDQwMDAyQzYyMjNEMDI0QzYwMDdGQUZCMjAwMThBRkIxMDAxNDU5Ci06MTA4MDUwMDBBRkJGMDAxQzMwOTEwMEZGMDAwNjkxQzIwMDA1Mjk4MkNECi06MTA4MDYwMDAwMjAwMjAyMTEwNDAwMDA4MjQwM0ZGRkYwRTAwMEE1QURFCi06MTA4MDcwMDAwMDAwMDAwMDAyMDAyMDIxMDIyMDI4MjEwRTAwMEM0OEYwCi06MTA4MDgwMDAwMjQwMzAyMTAwMDAxODIxOEZCRjAwMUM4RkIyMDAxODYxCi06MTA4MDkwMDA4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjEwM0UwMDAwOEMxCi06MTA4MEEwMDAyN0JEMDAyMDI3QkRGRkQ4MjRBMjAwN0ZBRkIzMDAxQzRFCi06MTA4MEIwMDBBRkIyMDAxODAwMDI5OUMyMzA5MjAwRkYyNEEzMDAzRjIzCi06MTA4MEMwMDAwMjQwMjAyMTAyNjAyODIxQUZCMTAwMTRBRkIwMDAxMDlGCi06MTA4MEQwMDBBRkJGMDAyMDBFMDAwQjdEMDAwMzg5ODIwMDQwODAyMThECi06MTA4MEUwMDAwMDQwMjAyMTAyMjAyODIxMTQ0MDAwMDkwMDAwMTgyMTBFCi06MTA4MEYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDA3Ci06MTA4MTAwMDA4RkIwMDAxMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyODk4Ci06MTA4MTEwMDAwRTAwMEEwQjAwMDAwMDAwMDA0MDI4MjEwMjAwMjAyMTcwCi06MTA4MTIwMDAxMDUxRkZGMzAwMTAxOUMwMEUwMDBBNUEwMDAwMDAwMEExCi06MTA4MTMwMDAwMjAwMjAyMTAyNDAyODIxMEUwMDBDNDgwMjYwMzAyMTVDCi06MTA4MTQwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEI2Ci06MTA4MTUwMDA4RkIwMDAxMDAwMDAxODIxMDA2MDEwMjEwM0UwMDAwODFCCi06MTA4MTYwMDAyN0JEMDAyODMwODRGRkZGMzBBNUZGRkYxMDgwMDAwN0U3Ci06MTA4MTcwMDAwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjVCCi06MTA4MTgwMDAwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwODZCCi06MTA4MTkwMDAwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMDQ5Ci06MTA4MUEwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQjFFCi06MTA4MUIwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODcwCi06MTA4MUMwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTA4MUQwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNERCCi06MTA4MUUwMDAwM0UwMDAwODAwMDAwMDAwMzBBNUZGRkY4RjQyMDFCODQ3Ci06MTA4MUYwMDAwNDQwRkZGRTNDMDc2MDE1MDBBNzMwMjUzQzAzMTAwMDNCCi06MTA4MjAwMDBBRjQ0MDE4MEFGNDAwMTg0QUY0NjAxODgwM0UwMDAwODFECi06MTA4MjEwMDBBRjQzMDFCODhGODUwMEQwMkM4NjQwMDAwMDgwMTgyMTI0Ci06MTA4MjIwMDA4Q0E3MDA4NDAwODcxMDJCMTQ0MDAwMTAwMDAwMDAwMDcxCi06MTA4MjMwMDA4Q0E4MDA4NDJEMDY0MDAwNTBDMDAwMEYyNDAzNDAwMDhECi06MTA4MjQwMDA4Q0FBMDA4NDAwOEE0ODJCNTEyMDAwMDE4Q0EzMDA4NDUyCi06MTA4MjUwMDAwMDAzNUE0MjAwMEIyMDgwM0MwNTA4MDAyNEE1NTgyMDRBCi06MTA4MjYwMDAwMDg1MTgyMTAzRTAwMDA4OEM2MjAwMDAxNEMwRkZGNEIwCi06MTA4MjcwMDAwMDAwMDAwMDI0MDM0MDAwMDAwMzVBNDIwMDBCMjA4MDRECi06MTA4MjgwMDAzQzA1MDgwMDI0QTU1ODIwMDA4NTE4MjEwM0UwMDAwOEJCCi06MTA4MjkwMDA4QzYyMDAwMDhGODMwMEQwOTA2NjAwRDAyNEM1MDAwMTVFCi06MTA4MkEwMDBBMDY1MDBEMDhGODUwMEQwOTA2NDAwRDA5MEEyMDBEMjRECi06MTA4MkIwMDAxMDQ0MDAxNzAwMDAwMDAwOTM2QzAwNzg4RjhCMDBCQzA2Ci06MTA4MkMwMDAzMThBMDBGRkExNkEwMDBDMjU0OTAwMDE5Mzg3MDBDNDkwCi06MTA4MkQwMDAzMTIyMDBGRjMwNDgwMDdGMTEwNzAwMEIwMDAyNjgyN0ExCi06MTA4MkUwMDBBMzYyMDA3ODhGNEUwMTc4MDVDMEZGRkU4Rjk5MDBCMDIxCi06MTA4MkYwMDAyNDE4MDAwMjNDMEYxMDAwQUY1OTAxNDBBMzU4MDE0NDVDCi06MTA4MzAwMDAwM0UwMDAwOEFGNEYwMTc4MEEwMDBEMTgzMUEyMDA4MDg5Ci06MTA4MzEwMDBBMEEwMDBEMDBBMDAwRDBFMDAwMDAwMDA4Rjg3MDBEMDQyCi06MTA4MzIwMDAyN0JERkZDOEFGQkYwMDMwQUZCNzAwMkNBRkI2MDAyOEU1Ci06MTA4MzMwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxODNCCi06MTA4MzQwMDBBRkIxMDAxNEFGQjAwMDEwOTRFMzAwRTA5NEUyMDBFMjlCCi06MTA4MzUwMDAxMDQzMDBENzI0MDVGRkZGM0MwNDdGRkYzNDk3RkZGRjQ1Ci06MTA4MzYwMDAyNDE1RkY4MDBBMDAwREZGM0MxNjAwMEUxMDhBMDBEMTc0Ci06MTA4MzcwMDA4RkJGMDAzMDhGOTEwMEIwM0MxODA4MDA4RjE4MDA1QzUwCi06MTA4MzgwMDAwMDEyMzBDMDAwMTI5MTQwMDMxMTcwMjEwMUQ1NzgyNEYxCi06MTA4MzkwMDBBRjRGMDAyQzk0RUMwMEUyMzFDRDAwN0YwMUJBNTgyMUEwCi06MTA4M0EwMDAzMThBN0ZGRjAxNzY0ODIxMDAwQTgwNDAwMjA5MTAyMUFFCi06MTA4M0IwMDA5NDUzMDAwMDNDMDgwODAwOEQwODAwNTgwMjQ2QzAyMTc0Ci06MTA4M0MwMDAzMjczM0ZGRjAwMTMxOTgwMDEwMzIwMjEwMjI0MjgyMTZBCi06MTA4M0QwMDAzMEJGMDA3RjAzRkFDODIxMDBCNUEwMjRBRjU0MDAyQ0ExCi06MTA4M0UwMDAwMzM2QTAyMThFODcwMDEwOEU4RjAwMzAwMzc4NTgyMTJECi06MTA4M0YwMDAyNTZEMDA4ODAwRUY3MDIzMjQwQzAwMDJBRThFMDAxMDYzCi06MTA4NDAwMDBBRjhEMDBBQ0ExNkMwMDg4OTc2QTAwM0M4RTg0MDAzMDcwCi06MTA4NDEwMDA4RjkxMDBBQzBFMDAwQ0U1MzE1MEZGRkYwMDAyNEI4MDQ1Ci06MTA4NDIwMDAwMjA5NDAyNTNDMDI0MjAwMDEwMjIwMjVBRTI0MDAwNDNFCi06MTA4NDMwMDA4RTgzMDAwNDhGOEQwMEFDOEU4NjAwMDAyNDBFMDAwODExCi06MTA4NDQwMDBBREEzMDAxQ0FEQTYwMDE4QURBMDAwMENBREEwMDAxMDlGCi06MTA4NDUwMDA5MjlGMDAwQTMzRjkwMEZGQTVCOTAwMTQ5Njg1MDAwODIxCi06MTA4NDYwMDAzQzFGMDAwQ0E1QTUwMDE2OTI5ODAwMEEzMzExMDBGRkNFCi06MTA4NDcwMDBBNUIxMDAyMDk2OTAwMDA4MjQxODAwMDVBNUIwMDAyMkEwCi06MTA4NDgwMDBBREEwMDAyNDkyOEYwMDBCMjQxMEMwMDAzMUU3MDBGRjQ0Ci06MTA4NDkwMDBBNUE3MDAwMkExQUUwMDAxOEU4QzAwMzA4RjhCMDBBQzJFCi06MTA4NEEwMDA4Rjg0MDBCMEFENkMwMDA4M0MwQTA4MDA4RDRBMDA1NDZGCi06MTA4NEIwMDAwMTQ0NDgyMTAxMzU0MDI0QUY0ODAwMjgzQzAyMDgwMDBGCi06MTA4NEMwMDA4QzQyMDA1NDAwNDQzMDIxMzBDMzAwN0YwMDdBQzgyMTIwCi06MTA4NEQwMDAwMzNGMjgyMTAyNDU4ODIxQUY5MTAwQkNBRjg1MDBDMDMxCi06MTA4NEUwMDBBMjM4MDAwMDhGOEEwMEJDMjQwM0ZGQkYyNDE4RkZERkRFCi06MTA4NEYwMDA5NTRGMDAwMjAxRjAzODI0MDBGMzcwMjVBNTRFMDAwMkNDCi06MTA4NTAwMDA5MTREMDAwMjMxQUMwMDNGMzU4QjAwNDBBMTRCMDAwMjgxCi06MTA4NTEwMDA4Rjg2MDBCQzhGODkwMEQwQUNDMDAwMDQ4RDI4MDA3QzAxCi06MTA4NTIwMDAzQzA5ODAwMEFDQzgwMDA4OTBDNDAwMEQzMDgyMDA3Rjc4Ci06MTA4NTMwMDBBMEMyMDAwRDhGODUwMEJDOTBCRjAwMEQwM0UzQzgyNENFCi06MTA4NTQwMDBBMEI5MDAwRDhGOTEwMEJDOTIzMzAwMEQwMjc4OTAyNEU5Ci06MTA4NTUwMDBBMjMyMDAwRDhFOTAwMDM0OEY4QjAwQkNBRDcwMDAxMEU1Ci06MTA4NTYwMDA4RTg3MDAyQzhFOEYwMDMwMDBFRjcwMjNBRDZFMDAxNENDCi06MTA4NTcwMDA5MTZEMDAxODMxQUMwMDdGQTE2QzAwMTg4RjlGMDBCQzdBCi06MTA4NTgwMDA4RThBMDAzMDhGRTgwMDE4MDE1NzIwMjQwMTA5MzAyNDFBCi06MTA4NTkwMDAwMEM0MTAyNUFGRTIwMDE4OTI4MzAwMEFBM0UzMDAxQzc4Ci06MTA4NUEwMDA5Njk5MDAwODhGODUwMEJDOEY5ODAwRDBBNEI5MDAxRTUyCi06MTA4NUIwMDA4RTkwMDAzMDhFODQwMDMwMEUwMDAyMDM4RjA1MDA4NDAwCi06MTA4NUMwMDA4Rjg1MDBEMDAwMDI5MTQwMDAwMjk5MDA5MEFGMDBCQzVFCi06MTA4NUQwMDAwMjUzODgyMTAwNDAzMDIxMzFFNzAwMDIxMEUwMDAwM0ZGCi06MTA4NUUwMDAwMjExODAyMTAwMDI5MDgwMDIxMjgwMjE5MEI5MDBCQzBCCi06MTA4NUYwMDAzMzI3MDAwNDEwRTAwMDAyMDAwNkY4ODAwMjFGODAyMUVCCi06MTA4NjAwMDA4RTk4MDAzMDhGOEIwMEJDMjQwNjgwMDAzMzBGMDAwMzRGCi06MTA4NjEwMDAwMDBGNzAyMzMxQ0QwMDAzMDIwRDYwMjFBRDZDMDAwNDBBCi06MTA4NjIwMDA5NEE0MDBFMjk0QUEwMEUyOTRCMDAwRTIzMTQ5N0ZGRkYyCi06MTA4NjMwMDAyNTIyMDAwMTMwNTM3RkZGMDIwNjE4MjQwMDczNDAyNUQ1Ci06MTA4NjQwMDBBNEE4MDBFMjk0QTQwMEUyM0MxNDA4MDA4RTk0MDA2MDA4Ci06MTA4NjUwMDAzMDkxN0ZGRjEyMzQwMDIyMDAwMDAwMDAwRTAwMEQwNTUzCi06MTA4NjYwMDAwMDAwMDAwMDhGODcwMEQwMDAwMDI4MjE5NEYzMDBFMDc0Ci06MTA4NjcwMDA5NEYwMDBFMjEyMTMwMDBGOEZCRjAwMzA5MEU5MDBEMDk5Ci06MTA4NjgwMDA5MEU4MDBEMTMxMzIwMEZGMzEwNDAwRkYwMjQ0MzAyQjZBCi06MTA4NjkwMDAxNEMwRkYzNjI2NEEwMDAxOTBFRTAwRDIyNjRCMDAwMTlFCi06MTA4NkEwMDAzMUNEMDBGRjAwOEQ2MDIxMTU4QkZGMzM4RjkxMDBCMDFECi06MTA4NkIwMDA4RkJGMDAzMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNEY1Ci06MTA4NkMwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDNDCi06MTA4NkQwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAzODczCi06MTA4NkUwMDA5NEEzMDBFMjAwNjY0MDI0QTRBODAwRTI5MEE0MDBFMjYzCi06MTA4NkYwMDA5MEI5MDBFMjMwOTEwMEZGMDAxMUExQzIwMDE0RjgyN0U4Ci06MTA4NzAwMDAwMDFGMzlDMDMzMzIwMDdGMDI0NzMwMjUwQTAwMERGN0MxCi06MTA4NzEwMDBBMEE2MDBFMjMwODRGRkZGMzBBNUZGRkZBRjQ0MDAxOEExCi06MTA4NzIwMDBBRjQ1MDAxQzAzRTAwMDA4OEY0MjAwMTQyN0JERkZCOENFCi06MTA4NzMwMDBBRkIwMDAyMDhGOTAwMEQwMzA4NEZGRkZBRkE0MDAxMEI2Ci06MTA4NzQwMDBBRkJGMDA0NEFGQkUwMDQwQUZCNzAwM0NBRkI2MDAzODhCCi06MTA4NzUwMDBBRkI1MDAzNEFGQjQwMDMwQUZCMzAwMkNBRkIyMDAyOEQ3Ci06MTA4NzYwMDBBRkIxMDAyNEE3QTAwMDE4OTIwNjAwRDE5MjA1MDBEMDU2Ci06MTA4NzcwMDAzMEM0MDBGRjMwQTMwMEZGMDA2NDEwMkIxMDQwMDEyMjIyCi06MTA4NzgwMDBBRkEwMDAxNDkyMDkwMEQwOEZCNTAwMTAzMTI4MDBGRjZGCi06MTA4NzkwMDAwMDg4MzgyMzI0RjRGRkZGMDAxNDg4MkIwMDE1OTgyQjQxCi06MTA4N0EwMDAwMjMzOTAyNDUyNDAwMTI2OEZCNDAwMTQ5NjFFMDAxMjBBCi06MTA4N0IwMDA5NjFGMDAxMDhGQjcwMDEwMDNERkM4MjMwMDE3MTQwMEE2Ci06MTA4N0MwMDAwMDE5QzQwMDAwMDIyNDAzMDAxODE0MDMwMkUyQjAyQUI2Ci06MTA4N0QwMDA1MkMwMDAwMTAwNDAyMDIxMDI4NDI4MkIxMEEwMDAwMjdBCi06MTA4N0UwMDAwMDgwMTgyMTAyODAxODIxMDAwMzNDMDAwMDA3MUMwM0IwCi06MTA4N0YwMDAzMDY0RkZGRjJDODYwMDA5MTRDMDAwMDIwMDYwQjgyMTFECi06MTA4ODAwMDAyNDE3MDAwODhFMEEwMDA4MDAxNzY5ODA4RTA5MDAwQ0UyCi06MTA4ODEwMDAzMUFCRkZGRjNDMEMwMDEwMDE2QzQwMjUyNzUyMDQwMEQ3Ci06MTA4ODIwMDBBRjRBMDAzOEFGOTIwMEI4QUY0OTAwM0NBRjQ4MDAzMEMzCi06MTA4ODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Ci06MTA4ODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Ci06MTA4ODUwMDA4RjRGMDAwMDMxRUUwMDIwMTFDMEZGRkQwMDE3OTgyQTU1Ci06MTA4ODYwMDAwMjcxMTAyNDBBMDAwRTkyMDAwMEIwMjE1NUUwMDEwMUFGCi06MTA4ODcwMDA5MjU4MDAwMTMxMTMwMDgwMTI2MDAxQ0YwMTIwMjAyMUE1Ci06MTA4ODgwMDA5NjU1MDAxMjMyQTVGRkZGMEUwMDBDREFBN0I1MDAxOEFFCi06MTA4ODkwMDA4RjkwMDBEMDAyOTFBMDIzMjZDODAwMDE4RjkxMDBCOENDCi06MTA4OEEwMDAwMDA4QjQwMDAwMTZCNDAzMjYyQzAwNDAwMkQ3NzgyQTMyCi06MTA4OEIwMDAwMDE0ODgyQjI0MEIwMDAxMDE4MDkwMjEwMUYxMTAyNDY5Ci06MTA4OEMwMDBBRjhDMDBCOEFGQUIwMDE0MTA0MDAxQkM4Rjg5MDBCMDcyCi06MTA4OEQwMDAzQzBDMDgwMDhEOEMwMDU0MjQwQkZGODA5MjFFMDBEMEFECi06MTA4OEUwMDAwMTg5NTAyMTAxNEIyODI0OTIxOTAwRDBBRjQ1MDAyODVFCi06MTA4OEYwMDA4RTQ3MDAxMDNDMDgwODAwOEQwODAwNTgzQzE4MDgwMEZFCi06MTA4OTAwMDA4RjE4MDA1NDMwRTMzRkZGMDAwMzIxODAwMTA0MzAyMTIxCi06MTA4OTEwMDAwMTI2NTgyMTI0MDJGRjgwMDE2MkY4MjQ5MjBDMDBEMDI1Ci06MTA4OTIwMDBBRjVGMDAyQzkyNDgwMDAwMzNEMTAwRkYzMzM1MDBGRkM5Ci06MTA4OTMwMDAwMzA5OTgyMTAwMTE3MTQwMDAxNTc4QzAzMjZEMDA3RjQ1Ci06MTA4OTQwMDAwMUNGMzgyMTAxQkEyODIxMzE4MzAwRkYzMTY0MDA3RjMzCi06MTA4OTUwMDAzQzBBMDAwQzAwQUE4ODIxMDM2N0YwMjEwMDAzMzE0MDgzCi06MTA4OTYwMDAwMDlBMTAyMTMxMDgwMDNGM0MxRjAwMEUwMEQxQzAyMUE5Ci06MTA4OTcwMDAwMDVGOTgyMTI3RDkwMDg4MkQxNTAwMDhBRjkxMDBDMDBECi06MTA4OTgwMDBBRjk5MDBBQ0FGOTgwMEJDQUY5MzAwQjQxMkEwMDE4QUJECi06MTA4OTkwMDAwMDAwODgyMTI0MEUwMDAxMDEwRTQwMDQzMTBEMDA1RDBECi06MTA4OUEwMDAxMUEwRkZCMjMxMEYwMDAyOEU0QTAwMjgzQzAzMDA4MDY0Ci06MTA4OUIwMDAzQzA0RkZFRkFFNkEwMDAwOEU0NTAwMjRBMjYwMDAwQTZFCi06MTA4OUMwMDAzNDg4RkZGRkFFNjUwMDA0OTI0NzAwMkMzQzFGRkY5RkQ4Ci06MTA4OUQwMDAzN0ZFRkZGRkEyNjcwMDBDOEU2MjAwMEMzQzE4MDA0MEJGCi06MTA4OUUwMDBBMjY3MDAwQjAwNDMzMDI1MDBDOEM4MjQwMzNFODgyNDNBCi06MTA4OUYwMDAwMjM4QTgyNUFFNzUwMDBDOEU0OTAwMDRBRTYwMDAxODQwCi06MTA4QTAwMDAzQzBGMDBGRkFFNjkwMDE0OEU0RDAwMkMzNUVFRkZGRkM5Ci06MTA4QTEwMDA4RjhCMDBCMDAxQUU2MDI0QUU2QzAwMTA4RTQ3MDAwODUyCi06MTA4QTIwMDBBNjYwMDAwODk2NDUwMDEyQUU2NzAwMjA4RTQyMDAwQzNBCi06MTA4QTMwMDAzMEIwM0ZGRjAwMTA1MTgwQUU2MjAwMjQ4RTVFMDAxNDAzCi06MTA4QTQwMDAwMTRCMTgyMTMwQTQwMDAxQUU3RTAwMjg4RTU5MDAxODc5Ci06MTA4QTUwMDAwMDAzMzFDMjAwMDQ0MzgwQUU3OTAwMkM4RTUxMDAxQzBCCi06MTA4QTYwMDAwMEM4RjgyMUE2N0YwMDFDQUU3MTAwMzA5NjU4MDAwMkE1Ci06MTA4QTcwMDA4RTU1MDAyMEE2NzgwMDFFQUU3NTAwMzQ5MjQ5MDAzMzUyCi06MTA4QTgwMDAzMTMwMDAwNDU2MDAwMDA1OTI1MDAwMDA4RjhDMDBEMDU5Ci06MTA4QTkwMDA4RDhCMDA3Q0FFNkIwMDMwOTI1MDAwMDA4RjhGMDBCQzNECi06MTA4QUEwMDBBMUYwMDAwMDkyNEUwMDMzMzFDRDAwMDI1MUEwMDAwNzJBCi06MTA4QUIwMDA5MjVFMDAwMThGODkwMEJDMjQxOEZGODA5MTMxMDAwMDc0Ci06MTA4QUMwMDAwMzExQTgyNUExMzUwMDAwOTI1RTAwMDE4Rjk5MDBCQzFBCi06MTA4QUQwMDAyNDA5RkZCRjI0MEJGRkRGQTMzRTAwMDE4Rjk1MDBCQ0RDCi06MTA4QUUwMDA5MkI4MDAwRDMzMTEwMDdGQTJCMTAwMEQ4RjhFMDBCQzMzCi06MTA4QUYwMDA5MUQwMDAwRDAyMDk3ODI0QTFDRjAwMEQ4Rjg4MDBCQzExCi06MTA4QjAwMDA4RTZEMDAxNDkxMEEwMDBEMkRBQzAwMDEwMDBDMjk0MDVGCi06MTA4QjEwMDAwMTRCMzgyNDAwRTUxODI1QTEwMzAwMEQ5NjQyMDAxMkYwCi06MTA4QjIwMDA4Rjg4MDBCQzhGODcwMEQwQTUwMjAwMDI4RTQ1MDAwNDBDCi06MTA4QjMwMDA5MEZGMDBCQzMwQTQwMDAzMDAwNDMwMjMzMERFMDAwM0FCCi06MTA4QjQwMDAwMEJFMTAyMTMzRjkwMDAyMTcyMDAwMDIyNDQ0MDAzNDMzCi06MTA4QjUwMDAyNDQ0MDAzMDkwRTIwMEJDMDBBMjMwMjQzMERGMDAwNDQ2Ci06MTA4QjYwMDAxN0UwMDAwMjI0ODMwMDA0MDA4MDE4MjE4RjhGMDBBQ0RFCi06MTA4QjcwMDAyNDA5MDAwMkFEMDMwMDA0QTFFOTAwMDA5MjRFMDAzRjY5Ci06MTA4QjgwMDA4RjhEMDBBQ0ExQUUwMDAxOEY5NTAwQUM5MjRDMDAzRkUwCi06MTA4QjkwMDA4RTQ0MDAwNEE2QUMwMDAyOTc2QjAwM0MwRTAwMENFNTZFCi06MTA4QkEwMDAzMTcwRkZGRjAwMDI1MzgwMDIwQTM4MjUzQzA1NDIwMDY1Ci06MTA4QkIwMDAwMEU1MTgyNUFFQTMwMDA0OEY4NjAwQUM4RTQ4MDAzODZGCi06MTA4QkMwMDBBQ0M4MDAxODhFNDQwMDM0QUNDNDAwMUNBQ0MwMDAwQzBGCi06MTA4QkQwMDBBQ0MwMDAxMEE0QzAwMDE0QTRDMDAwMTZBNEMwMDAyMEEzCi06MTA4QkUwMDBBNEMwMDAyMkFDQzAwMDI0OEU2NDAwMTQ1MDgwMDAwMTk4Ci06MTA4QkYwMDAyNDA0MDAwMUFDQzQwMDA4MEUwMDBEMDUyNDExMDAwMTdFCi06MTA4QzAwMDAwQTAwMEU4NThGOTAwMEQwOTIwRjAwRDI5MjBFMDBEMEY1Ci06MTA4QzEwMDA4RkI1MDAxMDMxRUIwMEZGMzFDRDAwRkYwMDhENjAyM0Q4Ci06MTA4QzIwMDAwMTZDNTAyMTI1NTRGRkZGMDAxNDg4MkIwMDE1OTgyQjUwCi06MTA4QzMwMDAwMjMzOTAyNDE2NDBGRUREMDAwMDAwMDA4RkI0MDAxNEMzCi06MTA4QzQwMDA4RkJGMDA0NDhGQkUwMDQwM0E4MjAwMDE4RkI3MDAzQ0M2Ci06MTA4QzUwMDA4RkI2MDAzODhGQjUwMDM0OEZCNDAwMzA4RkIzMDAyQzNFCi06MTA4QzYwMDA4RkIyMDAyODhGQjEwMDI0OEZCMDAwMjAwM0UwMDAwOEVECi06MTA4QzcwMDAyN0JEMDA0ODMzMTEwMDIwMTIyMDAwRUUyNDE1MDAwMTBBCi06MTA4QzgwMDA5MjFFMDBCQzI0MUYwMDAxMDAwMEE4MjEzM0Q5MDAwMTVFCi06MTA4QzkwMDAxMzIwMDAwREFGQkYwMDFDOEU0NDAwMTQ4RTA4MDA4NDBBCi06MTA4Q0EwMDAwMDg4MTAyQjE0NDAwMDAyMDA4MDMwMjE4RTA2MDA4NEMyCi06MTA4Q0IwMDA4RTAzMDA2NDAwQzNBODJCMTZBMDAwMDIwMEMwMjAyMTcwCi06MTA4Q0MwMDA4RTA0MDA2NDAwODBBODIxOEU0NzAwMTQ4RTA1MDA2NDg1Ci06MTA4Q0QwMDAwMEU1MzAyQjE0QzAwMDAyMDBFMDIwMjE4RTA0MDA2NDY3Ci06MTA4Q0UwMDAwMDk1RjAyMzEzQzAwMDA0OEZBQzAwMUMyNDBBMDAwMjdFCi06MTA4Q0YwMDBBRkFBMDAxQzhGQUMwMDFDMDI4QzU4MkIxNTYwMDBBODdBCi06MTA4RDAwMDAwMDAwMTgyMThFNEYwMDM4OEU2RDAwMEMzQzBFMDA4MDQ0Ci06MTA4RDEwMDBBRTZGMDAwMDhFNEEwMDM0M0MxMEZGOUYwMUFFNTgyNTE0Ci06MTA4RDIwMDBBRTZBMDAwNDkyNDYwMDNGMzYwQ0ZGRkYwMTZDMzgyNDA3Ci06MTA4RDMwMDAzQzA1MDAyMDNDMDNGRkVGQTI2NjAwMEIwMEU1MTAyNTc4Ci06MTA4RDQwMDAzNDY4RkZGRjhGODcwMEI4MDA0OEY4MjQzQzA0MDAwODBGCi06MTA4RDUwMDAwM0U0QzgyNUFFNzkwMDBDOENGODAwMTRBRTYwMDAxODRFCi06MTA4RDYwMDAwMkJFNzgyMUFFNzgwMDE0OENGMTAwMThBRTcxMDAxQ0EwCi06MTA4RDcwMDA4Q0U5MDAwOEFFNjkwMDI0OENFRTAwMENBRTZGMDAyQzZDCi06MTA4RDgwMDBBRTYwMDAyOEFFNkUwMDIwQTY2MDAwMzhBNjYwMDAzQUYzCi06MTA4RDkwMDA4Q0VEMDAxNDAxQjU4MDIzMDIxRTkwMjMxMjQwMDAxMUI3Ci06MTA4REEwMDBBRTcyMDAxMDkwRUEwMDNEOEU2NTAwMDQ4RTY0MDAwMEYzCi06MTA4REIwMDAwMDBBMzEwMDAwQTZDODIxMDAwMDEwMjEwMzI2NDAyQjI0Ci06MTA4REMwMDAwMDgyRjgyMTAzRThDMDIxQUU3OTAwMDRBRTc4MDAwMEVCCi06MTA4REQwMDA5MEYxMDAzREEyNzEwMDBBOEY4OTAwQjg5NTMyMDAwNjFCCi06MTA4REUwMDBBNjcyMDAwODhGOTgwMEFDMjQxOTAwMDIwMkEwMjAyMTZFCi06MTA4REYwMDBBMzE5MDAwMDk3NjkwMDNDOEY5MjAwQUMwRTAwMENFNUFGCi06MTA4RTAwMDAzMTMxRkZGRjAwMDI3QjgwOEY4NTAwQjgwMjJGNjgyNTdCCi06MTA4RTEwMDAzQzBFNDIwMDAxQUU4MDI1QUU1MDAwMDQ4Rjg0MDBBQ0IxCi06MTA4RTIwMDA4Q0FDMDAzOEFDOEMwMDE4OENBQjAwMzRBQzhCMDAxQ0M0Ci06MTA4RTMwMDBBQzgwMDAwQ0FDODAwMDEwQTQ4MDAwMTRBNDgwMDAxNjRDCi06MTA4RTQwMDBBNDgwMDAyMEE0ODAwMDIyQUM4MDAwMjQ5MEE3MDAzRkQyCi06MTA4RTUwMDBBNDg3MDAwMjEyQTAwMTM0MjQwMzAwMDE1M0MwMDAwMkMxCi06MTA4RTYwMDA5MEEyMDAzRDkwQTIwMDNFMjQ0ODAwMDFBMDg4MDAwMThECi06MTA4RTcwMDA4RjlGMDBBQ0FGRjUwMDA4OEY4MzAwRDAyNDA3MDAzNDJCCi06MTA4RTgwMDA5MDY2MDBCQzMwQzUwMDAyNTBBMDAwMDEyNDA3MDAzMEVECi06MTA4RTkwMDA4RjkyMDBCODhGOEEwMEJDOTA2RDAwQkM5MjRCMDAwMDhFCi06MTA4RUEwMDAyNDEyQzAwMDMyQTUwMDAzQTE0QjAwMDA4Rjg2MDBCODM5Ci06MTA4RUIwMDA4Rjg4MDBCQzI0MDIwMDA0OTBDNDAwMDEwMDQ1MTgyM0UwCi06MTA4RUMwMDAzMDc5MDAwM0ExMDQwMDAxOEY4QTAwQkM4RjlGMDBCODk1Ci06MTA4RUQwMDAwMEY1MzgyMTk1NTgwMDAyOTdFOTAwMTIwMEY5MzgyMTcxCi06MTA4RUUwMDAwMzEyODgyNDMxMkYzRkZGMDIyRjcwMjVBNTRFMDAwMjY4Ci06MTA4RUYwMDA5MTUwMDAwMjMxQTgwMDA0MzIwQzAwM0YzNThCMDA0MDM1Ci06MTA4RjAwMDBBMTRCMDAwMjEyQTAwMDAyOEY4NTAwQkMwMEU4MzgyMUFFCi06MTA4RjEwMDA4RjhFMDBEMEFDQTcwMDA0MjQwQkZGQkY4RENEMDA3QzRBCi06MTA4RjIwMDAyRUE0MDAwMTI0MDNGRkRGQUNBRDAwMDg5MEIwMDAwREJCCi06MTA4RjMwMDAwMDA0NDE0MDMyMEMwMDdGQTBBQzAwMEQ4Rjg2MDBCQ0M1Ci06MTA4RjQwMDA5MENBMDAwRDAxNEIxMDI0QTBDMjAwMEQ4Rjg3MDBCQ0Y5Ci06MTA4RjUwMDA5MEU1MDAwRDAwQTNGODI0MDNFOEM4MjVBMEY5MDAwRDUyCi06MTA4RjYwMDA4RjkxMDBCODhGOEQwMEJDOEUzODAwMjBBREI4MDAxMEY2Ci06MTA4RjcwMDA4RTI5MDAyNEFEQTkwMDE0OEUyRjAwMjhBREFGMDAxODUzCi06MTA4RjgwMDA4RTJFMDAyQzBFMDAwRDA1QURBRTAwMUM4RkIwMDAxQzA3Ci06MTA4RjkwMDAyNDBDMDAwMjEyMEMwMEVEOEY5MDAwRDA4RkEzMDAxQzU3Ci06MTA4RkEwMDAwMDYwODgyMTE0NjAwMDAyMDA2MEE4MjEwMDAwQTAyMTU4Ci06MTA4RkIwMDA1NkEwRkUzOTAyOTFBMDIzMDAxNDg4MkI4RkFFMDAxMDFBCi06MTA4RkMwMDA5NjA3MDAxMDNDMEEwMDIwMDFENkYwMjMwMkM3QzAyMUZBCi06MTA4RkQwMDAzM0QyRkZGRkE2MTgwMDEwQUZCMjAwMTBBRjRBMDAzMDI2Ci06MTA4RkUwMDAwMDAwMDAwMDk2MTcwMDEwOTYxMzAwMTIxMjc3MDA4RUYyCi06MTA4RkYwMDAwMDE2NDE4MDhFMTYwMDBDOEUwRjAwMDgwMDA4MTdDMzYzCi06MTA5MDAwMDAwMkM4MjgyMTAwQTg1ODJCMDFFMkE4MjEwMkFCMTgyMTkwCi06MTA5MDEwMDBBRTA1MDAwQ0FFMDMwMDA4OEZCMzAwMTAwMDEzQjgyQjkwCi06MTA5MDIwMDAwMjM3ODAyNDEyMDBGRjA1OEY5MDAwRDAwQTAwMEU0QkZCCi06MTA5MDMwMDAwMDAwMDAwMDhFNDgwMDM4QTY2MDAwMDgyNDBGMDAwM0RFCi06MTA5MDQwMDBBRTY4MDAwMDhFNEMwMDM0QTI2MDAwMEE4RjkwMDBCODE5Ci06MTA5MDUwMDBBRTZDMDAwNDNDMDUwMDgwOTIwQjAwM0ZBMjZGMDAwQzM4Ci06MTA5MDYwMDA4RTYyMDAwQzNDMTFGRjlGQTI2QjAwMEIwMDQ1NjgyNTJGCi06MTA5MDcwMDAzNjIzRkZGRjNDMDRGRkVGOEY4QzAwQjgwMUEzMzAyNEEwCi06MTA5MDgwMDAzNDlGRkZGRjAwREZDODI0QUU3OTAwMEM4RDg5MDAxNEU3Ci06MTA5MDkwMDA5NTlFMDAxMjhGOTgwMEIwQUU2OTAwMTA4RDhFMDAxNDVFCi06MTA5MEEwMDBBRTYwMDAxOEFFNjAwMDIwQUU2RTAwMTRBRTYwMDAyNDBBCi06MTA5MEIwMDA4RDg3MDAxODMzQ0UzRkZGMDAwRTUxODBBRTY3MDAyODI5Ci06MTA5MEMwMDA4RDg4MDAwODAxNTg5MDIxMzNEMDAwMDFBRTY4MDAzMDJGCi06MTA5MEQwMDA4RDkxMDAwQzhGOEQwMEFDMDAxMjU5QzIwMDEwN0I4MDY2Ci06MTA5MEUwMDAwMTZGMjgyMTI0MDIwMDAyQTY2NTAwMUNBNjYwMDAzNjNDCi06MTA5MEYwMDBBRTcxMDAyQ0ExQTIwMDAwOTc2MzAwM0M4Rjk4MDBBQ0Q5Ci06MTA5MTAwMDAzQzA0NDIwMDMwN0ZGRkZGMDNFNDMwMjVBRjA2MDAwNDNCCi06MTA5MTEwMDA4Rjk5MDBCODI0MDcwMDAxMjQwQkMwMDA4RjMzMDAzODVBCi06MTA5MTIwMDAyNDA2MDAzNEFGMTMwMDE4OEYyOTAwMzRBRjA5MDAxQzQ3Ci06MTA5MTMwMDBBRjAwMDAwQ0FGMDAwMDEwQTcwMDAwMTRBNzAwMDAxNjNECi06MTA5MTQwMDBBNzAwMDAyMEE3MDAwMDIyQUYwMDAwMjRBNzE1MDAwMkZFCi06MTA5MTUwMDBBMzA3MDAwMThGOEEwMEFDOEY5RTAwQjg4RjhDMDBCQ0UzCi06MTA5MTYwMDBBRDU1MDAwODkzQzgwMDAwQTE4ODAwMDA4RjkyMDBCODk4Ci06MTA5MTcwMDA4RjhGMDBCQzkyNTAwMDAxQTFGMDAwMDE4Rjg0MDBCQ0QxCi06MTA5MTgwMDA5NDkxMDAwMjAyMkIyODI0MDBBRTEwMjVBNDgyMDAwMjM0Ci06MTA5MTkwMDA5MDhEMDAwMjMxQTMwMDNGQTA4MzAwMDI4RjgzMDBEMDk2Ci06MTA5MUEwMDA4Rjg0MDBCQzkwN0YwMEJDMzNGMzAwMDI1MjYwMDAwMTRBCi06MTA5MUIwMDAyNDA2MDAzMEFDODYwMDA0OEM2NTAwN0MyNDBERkZCRkMzCi06MTA5MUMwMDAwMkEwODgyMUFDODUwMDA4OTA4MjAwMEQzMDQzMDA3RjBBCi06MTA5MUQwMDBBMDgzMDAwRDhGODYwMEJDOTBDNDAwMEQwMDhERjgyNDg0Ci06MTA5MUUwMDBBMERGMDAwRDhGOEUwMEJDOTFEOTAwMEQzNzI5MDAyMDIzCi06MTA5MUYwMDBBMUM5MDAwRDhGOUUwMEI4OEY5MzAwQkM4RkM3MDAyMEJGCi06MTA5MjAwMDBBRTY3MDAxMDhGRDgwMDI0QUU3ODAwMTQ4RkNBMDAyOEYzCi06MTA5MjEwMDBBRTZBMDAxODhGRDIwMDJDMEUwMDBEMDVBRTcyMDAxQzM1Ci06MTA5MjIwMDAwQTAwMTA0QzhGOTAwMEQwOTYwMjAwMTQ4RTA0MDAwNEE3Ci06MTA5MjMwMDAzMDQzRkZGRjAwMDM2OEMwMDA4REY4MjFBRjVGMDAzQ0EyCi06MTA5MjQwMDA4RTE5MDAwNDhGNDYwMDNDMDMyNjQ4MjMxOTIwMDAzQzU5Ci06MTA5MjUwMDAwMDAwMDAwMDhFMDUwMDAwMjRBMjAwMDEzQzBCMDAxMDVECi06MTA5MjYwMDAzNTc1MDAwOEFGNDIwMDM4QUY1NTAwMzAwMDAwMDAwMEVGCi06MTA5MjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCi06MTA5MjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjRDMDAwMDAzCi06MTA5MjkwMDAzMThGMDAyMDExRTBGRkZEMDAwMDAwMDA4RjUzMDQwMDFCCi06MTA5MkEwMDAzQzA4MDAyMEFFMTMwMDA4OEY1NzA0MDRBRTE3MDAwQ0QyCi06MTA5MkIwMDBBRjQ4MDAzMDAwMDAwMDAwM0MwNjA4MDA4Q0M2MDA0NEE3Ci06MTA5MkMwMDAyNDE2MDAwMTEwRDYwMEJCMDAwMDAwMDA5NjE5MDAxMjAxCi06MTA5MkQwMDAzQzA1MDgwMDhDQTUwMDQwMDBCOTQ4MjFBNjA5MDAxMkYxCi06MTA5MkUwMDA5NjBFMDAxNDI1QzcwMDAxQTYwNzAwMTQ5NjE4MDAxNDU2Ci06MTA5MkYwMDAzMzA0RkZGRjU0ODZGRjQ5OEZCMzAwMTBBNjAwMDAxNDBCCi06MTA5MzAwMDAwRTAwMEUyNTMwQTVGRkZGM0MwNDA4MDA4Qzg0MDAyNENECi06MTA5MzEwMDA5NjFGMDAxMjAwNDQ2ODIzMDNFRDMwMjNBNjA2MDAxMkI2Ci06MTA5MzIwMDAwQTAwMTA2NzhGQjMwMDEwQTA4MzAwMDE4RjgyMDBBQzg5Ci06MTA5MzMwMDAyNDA0MDAwMUFDNDQwMDA4MEEwMDBGRkY4RjgzMDBEMDEyCi06MTA5MzQwMDA4RTAyMDAwMDBBMDAxMEY4M0MwQjAwMTA4RjlGMDBDMDM2Ci06MTA5MzUwMDA4RkI4MDAxQzkyMEYwMEQwOTIwQjAwRDA5MjBEMDBEMDVECi06MTA5MzYwMDAzMUYxMDBGRjMxNkUwMEZGMDAwRTI4QzAwMDExMTE0MEU2Ci06MTA5MzcwMDAwMDQ1MTgyMTMxQTYwMEZGMDM2MzUwMjEwMDA2Qzk0MEIzCi06MTA5MzgwMDAwMzNGMzgyMTI1NDkwMDg4QUY4OTAwQUNBRjg3MDBCQzc2Ci06MTA5MzkwMDBBMTU4MDA4ODk3NjgwMDNDMDNDMDIwMjE4RjkxMDBBQzQxCi06MTA5M0EwMDAwRTAwMENFNTMxMTBGRkZGMDAwMjYzODAwMjBDNzgyNUVGCi06MTA5M0IwMDAzQzA0NDIwMDhGOEMwMEI4MDFFNDU4MjVBRTJCMDAwNDE5Ci06MTA5M0MwMDA4RDkxMDAzODhGOEIwMEFDMDAwMDY4MjEwMDBEMTEwMERBCi06MTA5M0QwMDBBRDcxMDAxODhEOEUwMDM0M0MwODdGRkYzNTA0RkZGRjBGCi06MTA5M0UwMDBBRDZFMDAxQzkxODMwMDNFOEQ2NTAwMUM4RDc5MDAxOEM4Ci06MTA5M0YwMDAwMDAzMzEwMDAwMDM4NzAyMDBBNkMwMjEwMDUwRjgyNUI5Ci06MTA5NDAwMDAwMzA2NDgyQjAzM0YzODIxMDBFOTUwMjFBRDc4MDAxQ0FBCi06MTA5NDEwMDBBRDZBMDAxOEFENjAwMDBDQUQ2MDAwMTA5MThGMDAzRTg5Ci06MTA5NDIwMDAyNDA1MDAwNTAzQzQ1MDI0QTU2RjAwMTQ5NTkxMDAwNDgxCi06MTA5NDMwMDAwM0MwMjAyMUE1NzEwMDE2OTE4RTAwM0VBNTZFMDAyMDZDCi06MTA5NDQwMDA5NThEMDAwNEE1NkQwMDIyQUQ2MDAwMjQ5MTkwMDAzRjMxCi06MTA5NDUwMDBBNTcwMDAwMjkxODIwMDNEMjQ0MzAwMDFBMTYzMDAwMTM4Ci06MTA5NDYwMDA4Rjg2MDBBQzhGOUYwMEJDQUNERTAwMDhBM0U1MDAwMDM3Ci06MTA5NDcwMDA4RjkwMDBCQzhGOTkwMEI4MjQwNUZGQkY5NjA3MDAwMkFCCi06MTA5NDgwMDA5NzM4MDAxMjAyNDc3ODI0MzMwOTNGRkYwMUU5ODgyNTA1Ci06MTA5NDkwMDBBNjExMDAwMjkyMTIwMDAyMjQxOEZGREYzMjRFMDAzRjk0Ci06MTA5NEEwMDAzNUNEMDA0MEEyMEQwMDAyOEY4NjAwQkM4RjhDMDBEMDBECi06MTA5NEIwMDAyNDEyRkZGRkFDQzAwMDA0OEQ4QjAwN0MzQzBDODAwMEFDCi06MTA5NEMwMDBBQ0NCMDAwODkwQzIwMDBEMzA0MzAwN0ZBMEMzMDAwRDVDCi06MTA5NEQwMDA4Rjg3MDBCQzkwRkYwMDBEMDNFNUM4MjRBMEY5MDAwREE0Ci06MTA5NEUwMDA4RjkxMDBCQzkyMjkwMDBEMDEzODc4MjRBMjJGMDAwRDI1Ci06MTA5NEYwMDA4RjkwMDBCQ0FFMTIwMDEwQUUxNTAwMTQ5MjBFMDAxODMyCi06MTA5NTAwMDAyNDE1RkY4MDAyQUU2ODI1QTIwRDAwMTg4Rjg1MDBCQ0NGCi06MTA5NTEwMDA4RjgzMDBCODhDQUIwMDE4MDE2QzEwMjQwMDRBMzAyNUYyCi06MTA5NTIwMDBBQ0E2MDAxODkwNjgwMDNFQTBBODAwMUM4RjlGMDBCODUxCi06MTA5NTMwMDA4Rjg3MDBCQzhGOTgwMEQwOTdGOTAwMDRBNEY5MDAxRTEzCi06MTA5NTQwMDAwRTAwMDIwMzhGMDUwMDg0OEY4NjAwRDAwMDAyNzk0MDUwCi06MTA5NTUwMDAwMDAyNDkwMDkwRDIwMEJDMDFFOTg4MjEwMDQwMjgyMTg2Ci06MTA5NTYwMDAzMjU1MDAwMjEyQTAwMDAzMDNEMTIwMjEwMDAyQTg4MDdFCi06MTA5NTcwMDAwMDk1MjAyMTkwQ0MwMEJDMzE5MjAwMDQxMjQwMDAwM0UxCi06MTA5NTgwMDAzM0M5MDAwMzAwMDU0MDgwMDA4ODIwMjEyNDE5MDAwNDBECi06MTA5NTkwMDA4RjlFMDBCQzAzMjkzODIzMzBGODAwMDMwMDk4NTAyMTI3Ci06MTA5NUEwMDBBRkNBMDAwNDBFMDAwRDA1QTY2NTAwMzgwQTAwMTA0NzdBCi06MTA5NUIwMDA4RjkwMDBEMDk2MEEwMDEyM0MxRTA4MDA4RkRFMDAyNDE3Ci06MTA5NUMwMDAwM0NBOTAyMUE2MTIwMDEyMEEwMDEwNjc4RkIzMDAxMDgwCi06MTA5NUQwMDAyN0JERkZFMDNDMTgwODAwOEYxODAwNTBBRkIwMDAxMDA2Ci06MTA5NUUwMDBBRkJGMDAxOEFGQjEwMDE0QUY4NDAwQjA5MzcxMDA3NDI2Ci06MTA5NUYwMDAwMzA0NzgyMTI0MTBGRjgwMzFFRTAwN0YzMjI1MDA3RkE0Ci06MTA5NjAwMDAwMUYwNTgyNDAxREE2ODIxM0MwQzAwMEFBMzg1MDBDNDRCCi06MTA5NjEwMDAwMUFDMjgyMUFGNEIwMDI0OTRBOTAwMTA5NzY4MDAwNkU0Ci06MTA5NjIwMDA5MEE2MDA2MjAwODAzODIxMjQwMjAwMzAwMTA5MjAyMzI2Ci06MTA5NjMwMDAzMEMzMDBGMEFGODUwMEQwMTA2MjAwMTkzMDkwRkZGRkZBCi06MTA5NjQwMDA5MEFFMDA2MjI0MERGRkYwMjQwQTAwNTAwMUFFNjAyNEE5Ci06MTA5NjUwMDAzMThCMDBGRjExNkEwMDJGMDAwMDAwMDAxNjAwMDAwNzg4Ci06MTA5NjYwMDAyNDFGMEMwMEFGNUYwMDI0OEZCMTAwMTQ4RkJGMDAxOEJGCi06MTA5NjcwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAwRTAwMEUyQjY1Ci06MTA5NjgwMDAwMjAwMjAyMTI0MUYwQzAwQUY1RjAwMjQ4RkIxMDAxNEMyCi06MTA5NjkwMDA4RkJGMDAxODhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI2Ci06MTA5NkEwMDA5NEEyMDBFMDk0QTQwMEUyOTBCRjAxMTMwMDgyMTgyNjY3Ci06MTA5NkIwMDAzMDc5RkZGRjMzRTcwMEMwMTRFMDAwMDkyRjMxMDAwMUNCCi06MTA5NkMwMDAxNjAwMDAzODAwMDAwMDAwNTYyMEZGRTYyNDFGMEMwMEEyCi06MTA5NkQwMDAwRTAwMEQyNzAwMDAwMDAwMEEwMDExRjkyNDFGMEMwMEU1Ci06MTA5NkUwMDAxNjIwRkZERTAwMDAwMDAwMEUwMDBEMjcwMDAwMDAwMDI1Ci06MTA5NkYwMDAxNDQwRkZEQzI0MUYwQzAwMTYwMDAwMjI4RjgzMDBEMEQyCi06MTA5NzAwMDA5MDY5MDExMzMxMjIwMDNGQTA2MjAxMTMwQTAwMTFGOTkwCi06MTA5NzEwMDAyNDFGMEMwMDk0QUYwMEQ0OEY4NjAwRDQwMEUwMjgyMUQxCi06MTA5NzIwMDAyNDA0MDAwNTBFMDAwQzZCMzFGMEZGRkYxNDQwMDAwNTBGCi06MTA5NzMwMDAyNDAzMDAwMzk3OTEwMEU2MDAwMDE4MjEyNjI1RkZGRjZGCi06MTA5NzQwMDBBNzg1MDBFNjhGNTgwMUI4MDcwMEZGRkUzQzE5NjAxMzlCCi06MTA5NzUwMDBBRjQwMDE4MDI0MUYwQzAwQUY1MDAxODQwMDc5MzgyNUYwCi06MTA5NzYwMDAzQzEwMTAwMEFGNDcwMTg4OEZCMTAwMTRBRjUwMDFCODEyCi06MTA5NzcwMDBBRjVGMDAyNDhGQjAwMDEwOEZCRjAwMTgwM0UwMDAwODE3Ci06MTA5NzgwMDAyN0JEMDAyMDBFMDAwRTJCMDIwMDIwMjE1MDQwRkZCNTA3Ci06MTA5NzkwMDAyNDFGMEMwMDhGODMwMEQwOTA2OTAxMTMwQTAwMTIyMjRECi06MTA5N0EwMDAzMTIyMDAzRjBFMDAwRTJCMDIwMDIwMjExNDQwRkZBRDlECi06MTA5N0IwMDAyNDFGMEMwMDEyMjAwMDA3OEY4MzAwRDA5MDY4MDExMzMzCi06MTA5N0MwMDAzMTA2MDAzRjM0QzIwMDQwQTA2MjAxMTMwQTAwMTFGOUMzCi06MTA5N0QwMDAyNDFGMEMwMDBFMDAwRDI3MDAwMDAwMDA1MDQwRkZBMUM4Ci06MTA5N0UwMDAyNDFGMEMwMDhGODMwMEQwOTA2ODAxMTMzMTA2MDAzRkM2Ci06MTA5N0YwMDAwQTAwMTI1MjM0QzIwMDQwQUY5QjAwQzgwM0UwMDAwOEM4Ci06MTA5ODAwMDBBRjgwMDBFQzMwODlGRkZGMDAwOTQwNDIyRDAyMDA0MThCCi06MTA5ODEwMDAwMDA5Mjk4MDE0NDAwMDAyMDAwOTUwNDAyNDA4MDA0MDNCCi06MTA5ODIwMDAwMDA4Nzk0MDAwMDhDMEMwMDFGODU4MjEyNTY3MDFBODQ4Ci06MTA5ODMwMDAwMEVGNzAyMTI1Q0MwMDdGMjQwREZGODAwMThEMTgyNEJFCi06MTA5ODQwMDAwMDY1MzAyMTAwQ0EyODIxMjU2NDAwODgyNDBBMDA4ODg4Ci06MTA5ODUwMDAzQzAxMDgwMEFDMkEwMDRDM0MwMTA4MDBBQzI0MDA1MDNDCi06MTA5ODYwMDBBRjg1MDBENDNDMDEwODAwQUMyOTAwNjAzQzAxMDgwMDMxCi06MTA5ODcwMDBBQzI4MDA2NDNDMDEwODAwQUMyNzAwNTQzQzAxMDgwMEZGCi06MTA5ODgwMDBBQzIzMDA1ODNDMDEwODAwQUMyNjAwNUMwM0UwMDAwODUzCi06MTA5ODkwMDAwMDAwMDAwMDMwODMwMEZGMzBDNkZGRkYzMEU0MDBGRjBGCi06MTA5OEEwMDA4RjQyMDFCODA0NDBGRkZFMDAwMzRDMDAwMTI0MzgyNTFDCi06MTA5OEIwMDAzQzA4NjAwMDAwRTgyMDI1M0MwMzEwMDBBRjQ1MDE4MDEzCi06MTA5OEMwMDBBRjQ2MDE4NEFGNDQwMTg4MDNFMDAwMDhBRjQzMDFCODBDCi06MTA5OEQwMDA4Rjg2MDAxQzNDMDk2MDEyMzUyNzAwMTA4Q0NCMDAwNEQ5Ci06MTA5OEUwMDAzQzBDNjAwRTM1ODUwMDEwMzE2QTAwMDYyRDQ4MDAwMUUxCi06MTA5OEYwMDBBQ0U4MDBDNDhDQzQwMDA0QUNBNDMxODA4Q0MyMDAwODY1Ci06MTA5OTAwMDA5NEMzMDAwMkFDQTIzMTg0MDNFMDAwMDhBNzgzMDBFNDAyCi06MTA5OTEwMDAzQzAzMDgwMDhDNjMwMDUwOEY4NDAwRTg4Rjg2MDAxQzk1Ci06MTA5OTIwMDAyNDAyRkY4MDAwNjRDMDIxMDMwMkM4MjRBRjU5MDAyODJDCi06MTA5OTMwMDA4Q0NEMDAwNDMzMDUwMDdGMDBCQTc4MjEzQzBFMDAwQzZBCi06MTA5OTQwMDAwMUVFMjgyMUFDQUQwMDU4OENDODAwMDhBRjg1MDBEMENFCi06MTA5OTUwMDAzQzA3NjAxMkFDQTgwMDVDOENDQzAwMTAzNEU4MDAxMDBFCi06MTA5OTYwMDBBQ0FDMDAwQzhDQ0IwMDBDQUNBQjAwMDg5NEFBMDAxNDdGCi06MTA5OTcwMDAzQzAyMDgwMDhDNDIwMDQ0MjU0OTAwMDFBNEE5MDAxNEJGCi06MTA5OTgwMDA5NEE0MDAxNDMwODNGRkZGMTA2MjAwMTc4Rjg0MDBEMDZFCi06MTA5OTkwMDAzQzBBMDgwMDhENEEwMDQwQTRBQTAwMTI4Q0NFMDAxODkwCi06MTA5OUEwMDBBQzhFMDAyNDhDQ0QwMDE0QUM4RDAwMjA4Q0M3MDAxODI4Ci06MTA5OUIwMDBBQzg3MDAyQzhDQ0MwMDE0MjQwNjAwMDFBQzhDMDAyODUxCi06MTA5OUMwMDA4RDBCMDBCQzUxNjYwMDFBOEQwMjAwQjQ4RDAyMDBCOEU4Ci06MTA5OUQwMDBBNDgyMDAzQTk0OEYwMDNBQTQ4RjAwM0M5NDg4MDBENDZCCi06MTA5OUUwMDAwM0UwMDAwODMxMDJGRkZGM0MwOTA4MDA4RDI5MDAyNDM0Ci06MTA5OUYwMDBBNEEwMDAxNDhGODQwMEQwQTRBOTAwMTI4Q0NFMDAxODVCCi06MTA5QTAwMDBBQzhFMDAyNDhDQ0QwMDE0QUM4RDAwMjA4Q0M3MDAxOEM3Ci06MTA5QTEwMDBBQzg3MDAyQzhDQ0MwMDE0MjQwNjAwMDFBQzhDMDAyOEYwCi06MTA5QTIwMDA4RDBCMDBCQzU1NjZGRkVBOEQwMjAwQjg4RDAyMDBCNEI0Ci06MTA5QTMwMDBBNDgyMDAzQTk0OEYwMDNBQTQ4RjAwM0M5NDg4MDBENDBBCi06MTA5QTQwMDAwM0UwMDAwODMxMDJGRkZGOEY4NjAwMUMzQzBDMDgwMDc5Ci06MTA5QTUwMDA4RDhDMDA1MDI0MEJGRjgwOENDRDAwMDgzQzAzMDAwQzQzCi06MTA5QTYwMDAwMDBENTFDMDAxOEE0MDIxMDEwQjQ4MjRBRjhBMDBFODUzCi06MTA5QTcwMDBBRjQ5MDAyODkwQzcwMDA3MzEwNTAwN0YwMEJBMTAyMUM4Ci06MTA5QTgwMDAwMDQzMjgyMTMwRTQwMDA0MTA4MDAwMkZBRjg1MDBEMDZGCi06MTA5QTkwMDA5MENGMDAwNzMxRUUwMDA4MTFDMDAwM0MwMDAwMDAwMDJDCi06MTA5QUEwMDA4Q0Q5MDAwQzhDQzQwMDE0MDMyNEMwMkIxMzAwMDAyNjk2Ci06MTA5QUIwMDAwMDAwMDAwMDhDQzIwMDBDQUNBMjAwNjQ4Q0NEMDAxODI5Ci06MTA5QUMwMDAyNDAyRkZGOEFDQUQwMDY4OENDQzAwMTBBQ0FDMDA4MDc4Ci06MTA5QUQwMDA4Q0NCMDAwQ0FDQUIwMDg0OENDQTAwMUNBQ0FBMDA3QzA0Ci06MTA5QUUwMDA5MEE5MDBCQzAxMjI0MDI0QTBBODAwQkM5MEMzMDAwNzlDCi06MTA5QUYwMDAzMDY3MDAwODEwRTAwMDA0OEY4NTAwRDA5MEFGMDBCQ0Y0Ci06MTA5QjAwMDAzNUVFMDAwMUEwQUUwMEJDOTBEOTAwMDczMzM4MDAwMTRCCi06MTA5QjEwMDAxMzAwMDAwRjhGODQwMEQwMjQwNzAwMjA5MDgyMDBCQzI3Ci06MTA5QjIwMDAzNDQ5MDAwMkEwODkwMEJDOEY4NDAwRDA5MDg4MDA2Mjc0Ci06MTA5QjMwMDAzMTAzMDBGMDE0NjcwMDA2MjQwQTAwMzRBQzhBMDBDMDI4Ci06MTA5QjQwMDAwQTAwMTMzNDAwMDAwMDAwMEEwMDEzMEU4Q0MyMDAxNDM3Ci06MTA5QjUwMDA5MENCMDAwNzMxNjYwMDAyMTBDMDAwMDUwMDAwMDAwMDM1Ci06MTA5QjYwMDA5MDhEMDBCQzM1QUMwMDA0QTA4QzAwQkM4Rjg0MDBEMDZDCi06MTA5QjcwMDA5MDk4MDExMzMzMEYwMDNGQTA4RjAxMTM4RjhFMDBEMEY4Ci06MTA5QjgwMDA5NUM1MDBENDAzRTAwMDA4MzBBMkZGRkZBQ0EwMDA2NDNDCi06MTA5QjkwMDAwQTAwMTMwRjAwMDAwMDAwMjdCREZGRDhBRkIwMDAxMDZGCi06MTA5QkEwMDA4RjkwMDAxQ0FGQkYwMDI0QUZCNDAwMjBBRkIyMDAxOEVDCi06MTA5QkIwMDBBRkIxMDAxNEFGQjMwMDFDOTYxMzAwMEUzQzA3NjAwQTRGCi06MTA5QkMwMDAzQzE0NjAwNjMyNjRGRkZGMzY5MzAwMTAwRTAwMTI2MUYxCi06MTA5QkQwMDAzNEY0MDQxMDhGODQwMEQ0M0MxMTYwMEUwRTAwMDlBQUU2Ci06MTA5QkUwMDAzNjMxMDAxMDkyMEUwMDE1M0MwNzA4MDA4Q0U3MDA2MDJCCi06MTA5QkYwMDAzQzEyNjAxMjMxQ0QwMDBGQTM4RDAwRjA4RTBFMDAwNEQ4Ci06MTA5QzAwMDA4RTBEMDAwODk2MDgwMDEyOTYxRjAwMTA5NjE5MDAxQTczCi06MTA5QzEwMDA5NjE4MDAxRTk2MEYwMDFDMzEwQ0ZGRkYzM0VCRkZGRjYwCi06MTA5QzIwMDAzMzJBRkZGRjMzMDlGRkZGMzFFNkZGRkYzQzAxMDgwMDQ1Ci06MTA5QzMwMDBBQzJCMDA0MDNDMDEwODAwQUMyQzAwMjQzQzAxMDgwMDg3Ci06MTA5QzQwMDBBQzJBMDA0NEFFMjkzMTc4QUUyNjMxN0M5MjAyMDAxNTUwCi06MTA5QzUwMDA5NjAzMDAxNjM2NTIwMDEwMzA0NDAwRkYzMDY1RkZGRkI3Ci06MTA5QzYwMDAzQzA2MDgwMDhDQzYwMDY0QUUyNDMxODhBRTQ1MDBCNEMyCi06MTA5QzcwMDA5MjA4MDAxNDk2MTkwMDE4MjQxRjAwMDEwMTFGQzAwNDQ3Ci06MTA5QzgwMDAzMzJGRkZGRjNDMDUwODAwOENBNTAwNThBRTU4MDBCOEU0Ci06MTA5QzkwMDBBRTRGMDBCQzkyMEMwMDE0QUY4RTAwRDhBRjhEMDBEQzJDCi06MTA5Q0EwMDAzMThCMDBGRkFFNEIwMEMwOTIwQTAwMTVBRTY3MDA0ODMyCi06MTA5Q0IwMDBBRTY2MDA0QzMxNDkwMEZGQUU0OTAwQzhBRTY1MDA3QzdECi06MTA5Q0MwMDAzQzAzMDgwMDhDNjMwMDUwM0MwNDA4MDA4Qzg0MDA0QzZBCi06MTA5Q0QwMDAzQzA4MDgwMDhEMDgwMDU0M0MwMjA4MDA4QzQyMDA1Q0RGCi06MTA5Q0UwMDA4RkJGMDAyNEFFNjMwMDgwOEZCMDAwMTBBRTgzMDA3NDdECi06MTA5Q0YwMDA4RkIzMDAxQ0FFMjIzMTlDQUU0MjAwRENBRTI3MzFBMEY3Ci06MTA5RDAwMDBBRTI2MzFBNEFFMjQzMThDQUUyMzMxOTBBRTI4MzE5NEVFCi06MTA5RDEwMDBBRTI1MzE5OEFFODcwMDUwQUU4NjAwNTRBRTg1MDA3MEY3Ci06MTA5RDIwMDA4RkIxMDAxNEFFNDcwMEUwQUU0NjAwRTRBRTQ0MDBDQzc0Ci06MTA5RDMwMDBBRTQzMDBEMEFFNDgwMEQ0QUU0NTAwRDg4RkI0MDAyMDZBCi06MTA5RDQwMDA4RkIyMDAxODAzRTAwMDA4MjdCRDAwMjgyN0JERkZFMDAwCi06MTA5RDUwMDBBRkIxMDAxNEFGQkYwMDE4MjQxMTAwMDEwRTAwMDg1NDY5Ci06MTA5RDYwMDBBRkIwMDAxMDEwNTEwMDA1OTc4NDAwRTY5NzgzMDBDQzM3Ci06MTA5RDcwMDAwMDgzMTAyQjE0NDAwMDA4OEY4NTAwRDQyNDA3MDAwMkI0Ci06MTA5RDgwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMEUwMTAyMUI5Ci06MTA5RDkwMDAwM0UwMDAwODI3QkQwMDIwMEUwMDBDODkyNDA0MDAwNTA0Ci06MTA5REEwMDBBRjgyMDBFODEwNDBGRkY2MjQwNzAwMDIwRTAwMDg1OEJBCi06MTA5REIwMDA4RjkwMDAxQzk3OUYwMEU2OEY5OTAwRTg4RjhEMDBDODU4Ci06MTA5REMwMDAyN0VGMDAwMTI0MEUwMDUwQUY1OTAwMjBBNzhGMDBFNkI2Ci06MTA5REQwMDBBMUFFMDAwMDNDMEMwODAwOEQ4QzAwNjQ4Rjg2MDBDODhBCi06MTA5REUwMDAyNDBBODAwMDAwMEM1RTAwQUNDQjAwNzRBNEMwMDAwNjA2Ci06MTA5REYwMDA5NEM5MDAwQTI0MUZGRjgwM0MwRDAwMEMwMTJBQzAyNEQ2Ci06MTA5RTAwMDBBNEQ4MDAwQTkwQzgwMDBBMjQxODIwMDAwMTFGMTgyNUIxCi06MTA5RTEwMDBBMEMzMDAwQThGODcwMEM4QTBFMDAwNzg4Rjg1MDBDODIzCi06MTA5RTIwMDAwMDAwMzgyMUEwQTAwMDgzM0MwMjA4MDA4QzQyMDA1MEIyCi06MTA5RTMwMDA4Rjg0MDBFODAwNDQ3ODIxMDFGRkM4MjRBRjU5MDAyODJFCi06MTA5RTQwMDA5NjBCMDAwMjMxRUUwMDdGMDFEQTYwMjEwMThEMzAyMTk2Ci06MTA5RTUwMDBBNENCMDBENDk2MEEwMDAyQUY4NjAwRDAzQzBFMDAwNENBCi06MTA5RTYwMDAyNTQ5MjQwMUE0QzkwMEU2OEUwODAwMDRBQ0M4MDAwNEZBCi06MTA5RTcwMDA4RTAzMDAwOEFDQzMwMDAwQTRDMDAwMTBBNEMwMDAxNEVFCi06MTA5RTgwMDBBMEMwMDBEMDhGODUwMEQwMjQwM0ZGQkZBMEEwMDBEMUM4Ci06MTA5RTkwMDAzQzA0MDgwMDhDODQwMDY0OEY4MjAwRDBBMDQ0MDBEMjZGCi06MTA5RUEwMDA4RTFGMDAwQzhGOEEwMEQwOTc4RjAwRTRBRDVGMDAxQ0RFCi06MTA5RUIwMDA4RTE5MDAxMDI0MTAwMDMwQUQ1OTAwMThBNTQwMDAzMDU0Ci06MTA5RUMwMDBBNTUxMDA1NEE1NTEwMDU2QTU0RjAwMTZBRDRFMDA2ODhGCi06MTA5RUQwMDBBRDU4MDA4MEFENTgwMDg0OTE0RDAwNjIzMUFDMDAwRjQ4Ci06MTA5RUUwMDAzNThCMDAxMEExNEIwMDYyOEY4NjAwRDA5MEM5MDA2M0IzCi06MTA5RUYwMDAzMTI4MDA3RkEwQzgwMDYzOEY4NDAwRDAyNDA2RkZGRkI0Ci06MTA5RjAwMDA5MDg1MDA2MzAwQTMxMDI0QTA4MjAwNjM4RjkxMDBEMDhECi06MTA5RjEwMDAwMEUwMTAyMTkyM0YwMEJDMzdGOTAwMDFBMjM5MDBCQ0RCCi06MTA5RjIwMDA4RjhBMDBEMDkzOEYwMEYwQUQ1ODAwNjRBRDUwMDBDMDEwCi06MTA5RjMwMDA5MTRFMDBEMzAwMEY2OTAwMzFDQzAwMEYwMThENTgyNUUwCi06MTA5RjQwMDBBMTRCMDBEMzhGODUwMEQwOEY4OTAwRENBQ0E5MDBFODNECi06MTA5RjUwMDA4Rjg4MDBEODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDA5Ci06MTA5RjYwMDAyN0JEMDAyMEFDQTgwMEVDQTRBNjAwRDZBNEEwMDBFMDY5Ci06MTA5RjcwMDBBNEEwMDBFMjAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDBECi06MTA5RjgwMDBBRkIwMDAxMDhGOTAwMDFDQUZCMTAwMTRBRkJGMDAxODJECi06MTA5RjkwMDA4RTE5MDAwNDNDMTgwODAwOEYxODAwNTAyNDBGRkY4MDExCi06MTA5RkEwMDAwMDE5ODlDMDAyMzg3MDIxMzFDRDAwN0YwMUNGNjAyNEIzCi06MTA5RkIwMDAwMUJBNTAyMTNDMEIwMDBDQUY0QzAwMjgwMTRCNDAyMTUyCi06MTA5RkMwMDA5NTA5MDBENDk1MDQwMEQ2OEUwNzAwMDQzMTMxRkZGRkI3Ci06MTA5RkQwMDBBRjg4MDBEMDBFMDAwOTIyMDAwNzIxQzA4RTA2MDAwNEMxCi06MTA5RkUwMDA4RjgzMDBDODAwMDYyOUMwQUY0NTAwMjA5MDY0MDAzRTYyCi06MTA5RkYwMDAzMDgyMDA0MDE0NDAwMDA2OEY4NDAwRDAzNDFGRkZGRkUxCi06MTBBMDAwMDA5NDgzMDBENjMwNjJGRkZGMTQ1RjAwMDQwMDAwMDAwMDVDCi06MTBBMDEwMDA5NDg0MDBENjBFMDAwOEI3MzA4NEZGRkY4RTA1MDAwNDNDCi06MTBBMDIwMDAwMjIwMzAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEI0Ci06MTBBMDMwMDAyNDA0MDAyMjAwMDAzODIxMDAwNTI5QzAwQTAwMTI4NUVFCi06MTBBMDQwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRjE2Ci06MTBBMDUwMDBBRkIwMDAxMEFGQkYwMDE4MTIyMDAwMUQwMDAwODAyMTFCCi06MTBBMDYwMDA4Rjg2MDAxQzhDQzUwMDAwMjQwMzAwMDYwMDA1M0YwMkZCCi06MTBBMDcwMDAwMDA1MTQwMjMwRTQwMDA3MTQ4MzAwMTUzMDQ1MDBGRjhBCi06MTBBMDgwMDAyQ0E4MDAwNjExMDAwMDREMDAwNTU4ODAzQzBDMDgwMDZCCi06MTBBMDkwMDAyNThDNTdFODAxNkM1MDIxOEQ0OTAwMDAwMTIwMDAwOEYzCi06MTBBMEEwMDAwMDAwMDAwMDhGOEUwMEVDMjQwRDAwMDExMUNEMDA1OTNFCi06MTBBMEIwMDAwMDAwMDAwMDI2MEIwMDAxMzE3MEZGRkYyNENBMDAyMEMxCi06MTBBMEMwMDAwMjExMjAyQjAxNDAzMDIxMTQ4MEZGRTZBRjhBMDAxQ0QyCi06MTBBMEQwMDAwMjAwMTAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDQ0Ci06MTBBMEUwMDAwM0UwMDAwODI3QkQwMDIwOTM4NzAwQ0UxNEUwMDAzODZECi06MTBBMEYwMDAyNDA0MDAxNDBFMDAxMzQ2MDAwMDAwMDA4Rjg2MDAxQzhDCi06MTBBMTAwMDAyNDAyMDAwMTBBMDAxNDhEQUY4MjAwRUM4Rjg5MDBFQzVDCi06MTBBMTEwMDAyNDA4MDAwMjExMjgwMDNCMjQwNDAwMTMwMDAwMjgyMTE5Ci06MTBBMTIwMDAwMDAwMzAyMTI0MDcwMDAxMEUwMDEyODUwMDAwMDAwMDBECi06MTBBMTMwMDAwQTAwMTQ4RDhGODYwMDFDOEY4NzAwRUMyNDA1MDAwMjE2Ci06MTBBMTQwMDAxNEU1RkZGNjI0MDQwMDEyMEUwMDEyRjIwMDAwMDAwMEQ1Ci06MTBBMTUwMDA4Rjg1MDBFODAwNDAzMDIxMjQwNDAwMTIwRTAwMTI4NTkzCi06MTBBMTYwMDAwMDAwMzgyMTBBMDAxNDhEOEY4NjAwMUM4RjgzMDBFQ0JDCi06MTBBMTcwMDAyNDFGMDAwMzE0N0ZGRkQwMjYwQjAwMDEwRTAwMTJBNDQxCi06MTBBMTgwMDAwMDAwMDAwMDhGODUwMEU4MDA0MDMwMjEyNDAyMDAwMjFBCi06MTBBMTkwMDAyNDA0MDAxMDAwMDAzODIxQUY4MjAwRUMwRTAwMTI4NTZDCi06MTBBMUEwMDAwMDAwMDAwMDBBMDAxNDhEOEY4NjAwMUM4RjhGMDBFQ0M5Ci06MTBBMUIwMDAyNDA2MDAwMjExRTYwMDBCMDAwMDAwMDAyNDA0MDAxMDM5Ci06MTBBMUMwMDAwMDAwMjgyMTAwMDAzMDIxMEEwMDE0QUEyNDA3MDAwMTAxCi06MTBBMUQwMDAwMDAwMjgyMTBFMDAxMjg1MDAwMDMwMjEwQTAwMTQ4RDk1Ci06MTBBMUUwMDA4Rjg2MDAxQzBFMDAxM0IzMDAwMDAwMDAxNDQwMDAxMjA0Ci06MTBBMUYwMDA4Rjk5MDAxQzhGODYwMDFDMjQwMjAwMDMwQTAwMTQ4RDE2Ci06MTBBMjAwMDBBRjgyMDBFQzBFMDAxNDNGMDAwMDAwMDAwQTAwMTQ4RDI1Ci06MTBBMjEwMDA4Rjg2MDAxQzBFMDAxMjk0MDAwMDAwMDAyNDAyMDAwMjMxCi06MTBBMjIwMDAyNDA0MDAxNDAwMDAyODIxMDAwMDMwMjEwMDAwMzgyMUZGCi06MTBBMjMwMDAwQTAwMTRDN0FGODIwMEVDMDA0MDM4MjEyNDA0MDAxMDRCCi06MTBBMjQwMDA5NzM4MDAwMjAwMDAyODIxMEUwMDEyODUzMzA2RkZGRjE4Ci06MTBBMjUwMDAwQTAwMTQ4RDhGODYwMDFDOEY4NDAwQzgzQzA3N0ZGRjg2Ci06MTBBMjYwMDAzNEU2RkZGRjhDODUwMDc0MjQwMjAwMDEwMEE2MTgyNDQ4Ci06MTBBMjcwMDBBQzgzMDA3NDAzRTAwMDA4QTA4MjAwMDUxMEEwMDAzNjQzCi06MTBBMjgwMDAyQ0EyMDA4MDI3NEEwNDAwM0MwQjAwMDUyNDA5MDA4MDEyCi06MTBBMjkwMDAxMDQwMDAwNzI0MDgwMDgwMzBBNjAwMEYwMEM1NDAyMUIwCi06MTBBMkEwMDAyRDAzMDA4MTE0NjAwMDAyMDBBMDQ4MjEyNDA4MDA4MEQyCi06MTBBMkIwMDBBRjRCMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBBMkMwMDAxMTAwMDAwOTAwMDAzODIxMDE0MDMwMjE4QzhEMDAwMDcwCi06MTBBMkQwMDAyNEU3MDAwNDAwRTg2MDJCQUNDRDAwMDAyNDg0MDAwNEQ3Ci06MTBBMkUwMDAxNTgwRkZGQTI0QzYwMDA0MDAwMDAwMDAwMDAwMDAwMEYyCi06MTBBMkYwMDAwMDAwMDAwMDNDMEUwMDA2MDEwRTM4MjVBRjQ3MDAzMDdDCi06MTBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMDZGCi06MTBBMzEwMDAzMUU4MDAxMDExMDBGRkZEMDAwMDAwMDA4RjQyMDAzQ0ZBCi06MTBBMzIwMDA4RjQzMDAzQzAwNDlDODIxMDMyM0MwMkIxMzAwMDAwNEM1Ci06MTBBMzMwMDAwMDAwMDAwMDhGNEMwMDM4MjU4NjAwMDFBRjQ2MDAzODMxCi06MTBBMzQwMDA4RjQ3MDAzQzAwQTkyODIzMDBFOTY4MjFBRjREMDAzQzVECi06MTBBMzUwMDAxNEEwRkZDRTJDQTIwMDgwMDNFMDAwMDgwMDAwMDAwMDQzCi06MTBBMzYwMDAyN0JERkZEMDNDMDIwMDAyQUZCMTAwMTQzQzExMDAwQzJECi06MTBBMzcwMDBBRjQ1MDAzOEFGQjMwMDFDQUY0NjAwM0MwMDgwOTgyMUM5Ci06MTBBMzgwMDBBRjQyMDAzMDI0MDUwMDg4QUY0NDAwMjgwMzUxMjAyMTRCCi06MTBBMzkwMDBBRkJGMDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIyMDAxOEEzCi06MTBBM0EwMDAwRTAwMTRGRkFGQjAwMDEwM0MxRjA4MDA4RkZGMDA0Q0UwCi06MTBBM0IwMDAzQzE4MDgwMDhGMTgwMDY0MjQxMEZGODAwM0YzQTgyMUM0Ci06MTBBM0MwMDAzMkI5MDA3RjAyQjA3ODI0MDAxOEEwQzAwMzNBNzAyMThGCi06MTBBM0QwMDAwMDE4OTE0MDAxRDEyMDIxQUY0RjAwMjgwRTAwMTRGRjNBCi06MTBBM0UwMDAwMjU0MjgyMTNDMEQwODAwOERBRDAwNTAyNDA1MDEyMEE5Ci06MTBBM0YwMDAwMUIzNTgyMTMxNkMwMDdGMDE3MDUwMjQwMTlBNDgyMTJCCi06MTBBNDAwMDAwMTMxMjAyMTBFMDAxNEZGQUY0QTAwMjgzQzA4MDgwMDRCCi06MTBBNDEwMDA4RDA4MDA1NDNDMDUwODAwOENBNTAwNjQwMTEzMzgyMTA4Ci06MTBBNDIwMDAzMEU2MDA3RjAwRjAxODI0MDBEQTIwMjEwMDkxMjAyMTdFCi06MTBBNDMwMDBBRjQzMDAyODBFMDAxNEZGMDAwNTI5NDAzQzAyMDgwMDJECi06MTBBNDQwMDA4QzQyMDA1ODNDMTAwODAwOEUxMDAwNjAxMjAwMDAxQzY2Ci06MTBBNDUwMDAwMDUzODgyMTI0MTVGRjgwMEEwMDE1ODIzQzE0MDAwQzRCCi06MTBBNDYwMDAzMjI2MDA3RjAyMzUxODI0MDBEQTIwMjEwMjQwMjgyMUZDCi06MTBBNDcwMDBBRjQzMDAyODAwOTQyMDIxMEUwMDE0RkYyNjEwRkZDMEQ3Ci06MTBBNDgwMDAxMjAwMDAwRjAyMzI4ODIxMkUwNTAwNDExMEEwRkZGNEI3Ci06MTBBNDkwMDAyNDEyMTAwMDMyMjYwMDdGMDAxMDkxODAwMjM1MTgyNDBCCi06MTBBNEEwMDAwMERBMjAyMTAyNDAyODIxQUY0MzAwMjgwMDk0MjAyMTE3Ci06MTBBNEIwMDAwRTAwMTRGRjAwMDA4MDIxMTYwMEZGRjMwMjMyODgyMUY1Ci06MTBBNEMwMDAzQzBCMDgwMDhENkIwMDVDMjQwQUZGODAyNDA1MDAwMjExCi06MTBBNEQwMDAwMTczNDAyMTAxMEE0ODI0QUY0OTAwMjgzQzA0MDgwMEM4Ci06MTBBNEUwMDA5NDg0MDA2MjMxMTAwMDdGMDIxQTg4MjEzQzA3MDAwQzFFCi06MTBBNEYwMDAwRTAwMENCOTAyMjc5ODIxMDA0MDI4MjEwMjYwMjAyMTdCCi06MTBBNTAwMDA4RkJGMDAyODhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQ0FDCi06MTBBNTEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMTRGRjIyCi06MTBBNTIwMDAyN0JEMDAzMDhGODMwMDFDOEM2MjAwMDQxMDQwMDAwM0E0Ci06MTBBNTMwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA4QzY0MDAxMDMwCi06MENBNTQwMDA4QzY1MDAwODBBMDAxNTM4OEM2NjAwMENDMQotOjA0QTU0QzAwMDAwMDAwMDAwQgotOjEwQTU1MDAwMDAwMDAwMUIwMDAwMDAwRjAwMDAwMDBBMDAwMDAwMDhCRgotOjEwQTU2MDAwMDAwMDAwMDYwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDRENwotOjEwQTU3MDAwMDAwMDAwMDQwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDNDRQotOjEwQTU4MDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDJDMQotOjEwQTU5MDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDJCMwotOjEwQTVBMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDJBMwotOjEwQTVCMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI5MwotOjEwQTVDMDAwMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDE4NgotOjEwQTVEMDAwMDgwMDBGMzAwODAwMEQ4ODA4MDAwRkM0MDgwMDEwNkMzOAotOjEwQTVFMDAwMDgwMDBGNTgwODAwMEY5ODA4MDAxMUE0MDgwMDBEQTRENwotOjEwQTVGMDAwMDgwMDExQzgwODAwMERGNDA4MDAxNDk4MDgwMDE0NDA2MQotOjEwQTYwMDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDEyNTRCMQotOjEwQTYxMDAwMDgwMDEyNTQwODAwMERBNDA4MDAwREE0MDgwMDE2RTA1QwotOjEwQTYyMDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBEQTQ0NgotOjEwQTYzMDAwMDgwMDEzRDQwODAwMERBNDA4MDAwREE0MDgwMDBEQTQwMAotOjEwQTY0MDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBEQTQyNgotOjEwQTY1MDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBEQTQxNgotOjEwQTY2MDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBGQjhGMAotOjEwQTY3MDAwMDgwMDBEQTQwODAwMERBNDA4MDAxNjkwMDgwMDBEQTQwMQotOjEwQTY4MDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBEQTRFNgotOjEwQTY5MDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBEQTRENgotOjEwQTZBMDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBEQTRDNgotOjEwQTZCMDAwMDgwMDBEQTQwODAwMERBNDA4MDAwREE0MDgwMDBEQTRCNgotOjEwQTZDMDAwMDgwMDE1QkMwODAwMERBNDA4MDAwREE0MDgwMDEzNDhEQwotOjEwQTZEMDAwMDgwMDEyQjgwODAwMkU1MDA4MDAyRTU4MDgwMDJFMjAzRQotOjEwQTZFMDAwMDgwMDJFMkMwODAwMkUzODA4MDAyRTQ0MDgwMDUzMkM5OQotOjEwQTZGMDAwMDgwMDUyRUMwODAwNTJCODA4MDA1MjhDMDgwMDUyNjg1QQotOjA0QTcwMDAwMDgwMDUyMjRENwotOjBDQTcwNDAwMEEwMDBDNzYwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEE3MTAwMDAwMDAwMDBENzI3ODcwMzQyRTM2MkUzMTM2MDAwMDAwQTUKLToxMEE3MjAwMDA0MDYxMDAzMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMEIKLToxMEE3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEE3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEE3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEE3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEE3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEE3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEE3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEE3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEE3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEE3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEE3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEE4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEE4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEE4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEE4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEE4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEE4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEE4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEE4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEE4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEE4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEE4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEE4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEE4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEE5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEE5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEE5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEE5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEE5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEE5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEFBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEFBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEFBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEFBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEFBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEFBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEFBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEFBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEFBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEFBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEFBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEFCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEFCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEFCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEFFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEFFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEFFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEFFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEFGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEFGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEIzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEIzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEIzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEIzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEIzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEIzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEIzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEIzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEI0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEI0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEI0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEI0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEI0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEI0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEI0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEI0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEI0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEI0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEI0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEI0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEI0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEI1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEI1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEI1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEI1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEI1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEI1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEI1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEI1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEI2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEI2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEI3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEI3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEI3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEI3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEI3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEI3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEI3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEI3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEI4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEI4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEI4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEI4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEI4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEI4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEI4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEI4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEI4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEI4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEI4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEI5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEI5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEJBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEJBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEJBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEJBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEJBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEJBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEJCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEJCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEJCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEJCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEJDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEJDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEJDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEJDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEJDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEJDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEJDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEJDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEJDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEJDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEJDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEJDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEJDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEJEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEJEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEJENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEJEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEJEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEJEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEJEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEJERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEJFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEJFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEJFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEJFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEJFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEJFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEJFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEJFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEJFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEJFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEJGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEJGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEJGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEJGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEMwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEMwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEMwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEMwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEMwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEMwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEMwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEMwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEMwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEMwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEMwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEMwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEMxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEMxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEMxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEMxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEMxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEMxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEMxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEMxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEMyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEMyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEMyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEMyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEMyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEMyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEMyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEMyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEMyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEMyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEMyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEMyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEMzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEMzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEMzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEMzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEMzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEMzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEMzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEMzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEMzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEMzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEMzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEMzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEMzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEMzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEMzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEM0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEM0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEM0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEM0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEM0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEM0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEM0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEM0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEM0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEM1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEM1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEM1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEM1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEM1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEM1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEM1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEM1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEM2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEM2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEM2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEM2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEM2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEM2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEM2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEM2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEM2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEM2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEM2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEM2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEM3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEM3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEM3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEM3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEM3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEM3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEM3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEM3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEM3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEM4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEM4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEM4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEM4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEM4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEM4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEM4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEM4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEM5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEM5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEM5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEM5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEM5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEM5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEM5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEM5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEM5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEM5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEM5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEM5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEM5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMENBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMENBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMENBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMENBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMENBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMENBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMENBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMENBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMENBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMENBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMENBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMENBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMENBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMENBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMENBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMENBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMENCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMENCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMENCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMENCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMENCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMENCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMENCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMENCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMENCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMENCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMENCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMENCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMENCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMENCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMENCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMENCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMENDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMENDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMENDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMENDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMENDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMENDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMENDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMENDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMENDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMENDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMENDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMENDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMENDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMENDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMENDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMENDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMENEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMENEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMENEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMENEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMENENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMENENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMENENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMENENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMENEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMENEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMENEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMENEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMENEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMENERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMENERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMENERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMENFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMENFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMENFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMENFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMENFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMENFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMENFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMENFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMENFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMENFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMENFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMENFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMENFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMENFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMENFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMENGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMENGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMENGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMENGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMENGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMENGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMENGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMENGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMENGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMENGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMENGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMENGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMENGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMENGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMENGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEQyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEQzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEQzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEQzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEQzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEQzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEQzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEQzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEQ0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEQ0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEQ0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEQ0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEQ0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEQ1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEQ1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEQ1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEQ1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEQ1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEQ1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEQ1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEQ1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEQ1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEQ1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEQ2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEQ2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEQ2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEQ2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEQ2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEQ2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEQ2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEQ2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEQ2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEQ3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEQ3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEQ3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEQ3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEQ3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEQ3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEQ3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEQ3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEQ3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEQ3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEQ4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEQ4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEQ4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEQ4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEQ4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEQ4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEQ4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEQ4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEQ4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEQ4RTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEMEIKLToxMEQ4RjAwMDNDMDIwODAwMjQ0MjcxMjAzQzAzMDgwMDI0NjM3NUM4RTAKLToxMEQ5MDAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0QTMKLToxMEQ5MTAwMDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMkYKLToxMEQ5MjAwMDI2MTAzMUQ4M0MxQzA4MDAyNzlDNzEyMDBFMDAxMTY0ODEKLToxMEQ5MzAwMDAwMDAwMDAwMDAwMDAwMEQzMEE1RkZGRjMwQzYwMEZGMTIKLToxMEQ5NDAwMDI3NDMwMTgwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAyRjkKLToxMEQ5NTAwMEFDNjQwMDAwQTQ2NTAwMDhBMDY2MDAwQUEwNjIwMDBCODkKLToxMEQ5NjAwMDNDMDIxMDAwQUM2NzAwMTgwM0UwMDAwOEFGNDIwMUI4QTkKLToxMEQ5NzAwMDNDMDM2MDAwOEM2MjRGRjgwNDQwRkZGRTNDMDIwMjAwNTIKLToxMEQ5ODAwMEFDNjQ0RkMwQUM2MjRGQzQzQzAyMTAwMDAzRTAwMDA4MUUKLToxMEQ5OTAwMEFDNjI0RkY4MjdCREZGRThBRkJGMDAxNEFGQjAwMDEwNzYKLToxMEQ5QTAwMDBFMDAxMUIzMDA4MDgwMjE5MzYyMDAwNTI0MDNGRkZFNjYKLToxMEQ5QjAwMDAyMDAyMDIxMDA0MzEwMjQ4RkJGMDAxNDhGQjAwMDEwRkMKLToxMEQ5QzAwMEEzNjIwMDA1MEEwMDExQkMyN0JEMDAxODI3QkRGRkU4QUYKLToxMEQ5RDAwMEFGQjAwMDEwQUZCRjAwMTQwRTAwMEVBNDAwODA4MDIxNzUKLToxMEQ5RTAwMDkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0RkYKLToxMEQ5RjAwMDI0MDIwMTAwQUY0MjAxODAwQTAwMENDMTAyMDAyMDIxNzQKLToxMERBMDAwMEFGNDAwMTgwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwQjIKLToxMERBMTAwMDBBMDAwRjdEMjdCRDAwMTgyN0JERkY5OEFGQkUwMDYwMkMKLToxMERBMjAwMEFGQjcwMDVDQUZCMjAwNDhBRkJGMDA2NEFGQjYwMDU4RkMKLToxMERBMzAwMEFGQjUwMDU0QUZCNDAwNTBBRkIzMDA0Q0FGQjEwMDQ0MjkKLToxMERBNDAwMEFGQjAwMDQwOEY1MDAxMjg5MzYzMDAzRjkzNjIwMDA1MDAKLToxMERBNTAwMDAwMDBGMDIxMzA3MjAwRkYwMDAyMTAyNzMwNDIwMDAxNjgKLToxMERBNjAwMDAwMDBCODIxMTQ0MDAwNjZBRkEwMDAzODkzNDIwMTE2QjAKLToxMERBNzAwMDkzNDMwMTEyMzA0MjAwRkYzMDYzMDBGRjAzNDIyMDIxMzQKLToxMERBODAwMDAzNDMxMDIxMjQ0NTQwMDA4RjgyMDAwMDEwNDAwMDE4RkQKLToxMERBOTAwMDI0ODg0MDAwOEY0MjAxMDQzQzAzMDAwMTAwNDMxMDI0MEQKLToxMERBQTAwMDEwNDAwMDEzMDAwMDAwMDA4Q0EzMDAwQzhGNjIwMDMwQjcKLToxMERBQjAwMDE0NjIwMUEyMjQwMjAwMDE4Q0EzMDAxMDhGNjIwMDJDQ0EKLToxMERBQzAwMDE0NjIwMTlFMjQwMjAwMDE5NzYyMDAzQTk0ODM0MDAwOTAKLToxMERBRDAwMDMwNDJGRkZGMTQ2MjAxOTkyNDAyMDAwMTk3NjIwMDM4NkUKLToxMERBRTAwMDk1MDMwMDAyMzA0MkZGRkYxNDYyMDE5NDI0MDIwMDAxRkEKLToxMERBRjAwMDkzNjIwMDAwMzA0MzAwRkYyNDAyMDAyMDEwNjIwMDA1MDIKLToxMERCMDAwMDI0MDIwMDUwMTA2MjAwMDYwMDAwMDAwMDBBMDAwRDBCMDUKLToxMERCMTAwMDAwMDAwMDAwMDAwMDAwMEQwQTAwMEQxNEFGQTAwMDMwNEUKLToxMERCMjAwMDNDMUUwODAwMjdERTcxODgwQTAwMEQxNEFGQTAwMDMwRUIKLToxMERCMzAwMDNDMDIwODAwOEM0MjAwREMyNDQyMDAwMTNDMDEwODAwNDkKLToxMERCNDAwMEFDMjIwMERDMEUwMDEyN0QwMDAwMDAwMDBBMDAwRThGRTcKLToxMERCNTAwMDhGQkYwMDY0OEY0MjAxMDQzQzAzMDAyMDkxMTMwMDBEMkQKLToxMERCNjAwMDAwNDMxMDI0MDAwMjIwMkIwMDA0MjE0MEFGQTQwMDMwMDkKLToxMERCNzAwMDhGNDMwMTA0M0MwMjAwNDAwMDYyMTgyNDE0NjAwMDAyM0MKLToxMERCODAwMDM0ODcwMDQwMDA4MDM4MjEzMjYyMDAyMEFGQTcwMDMwODcKLToxMERCOTAwMDE0NDAwMDAyMzRFNjAwODAwMEUwMzAyMTEwQzAwMDBCODkKLToxMERCQTAwMEFGQTYwMDMwOTNDNTAwMDg4RjY3MDA0QzAyMDAyMDIxMEIKLToxMERCQjAwMDAwMDUyQjAwMzRBNTAwODEzMEE1RjA4MTBFMDAwQzhERUUKLToxMERCQzAwMDMwQzYwMEZGMEEwMDBFOEMwMDAwMDAwMDkzNjIwMDNFODkKLToxMERCRDAwMDMwNDIwMDQwMTA0MDAwMEUyNDAyMDAwNDU2NDIwMDA2NkQKLToxMERCRTAwMDI0MDIwMDEyMDIwMDIwMjEwRTAwMTNEQTAxMDAzMDIxNkQKLToxMERCRjAwMDBBMDAwRThGOEZCRjAwNjQxNjQyMDAwNTAwMDAwMDAwNkYKLToxMERDMDAwMDBFMDAwQ0IyMDAwMDIwMjEwQTAwMEU4RjhGQkYwMDY0QUUKLToxMERDMTAwMDk3NDIwMTFBOTUwNDAwMEU5MzYzMDAzNTMyNjUwMDA0QTMKLToxMERDMjAwMDMwNTVGRkZGMDA2NDIwMDRBRkE0MDAzQzhEMTEwMDA0QjgKLToxMERDMzAwMDEwQTAwMDE1OEQxNDAwMDg5MzYyMDAzRTMwNDIwMDQwOTEKLToxMERDNDAwMDEwNDAwMDA3MDAwMDAwMDAwRTAwMTMzQjAyMjAyMDIxQkUKLToxMERDNTAwMDEwNDAwMDBEMDAwMDAwMDAwQTAwMEU4QzAwMDAwMDAwQzMKLToxMERDNjAwMDhGNjIwMDQ0MDIyMjEwMjMwNDQwMDEzMjAwMDAwMDAwQjEKLToxMERDNzAwMDhGNjIwMDQ4MDIyMjEwMjMwNDQxMDEyRTI0MDQwMDE2NjIKLToxMERDODAwMDBBMDAwREEyOEZDMjAwMDQ4RjYyMDA0ODAyMjIxMDIzRjYKLToxMERDOTAwMDA0NDAwMDA4MDAwMDAwMDAzQzAyMDgwMDhDNDIzMTAwRjMKLToxMERDQTAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMzEwMDBBMDAwRTgxMzAKLToxMERDQjAwMDAwMDAwMDAwOEY2MjAwNDAwMjIyMTAyMzE4NDAwMDA5N0IKLToxMERDQzAwMDI0MDIwMDBDM0MwMjA4MDA4QzQyMzEwMDMyNzMwMEZDM0MKLToxMERDRDAwMDAwMDBBODIxMjQ0MjAwMDEzQzAxMDgwMEFDMjIzMTAwRDAKLToxMERDRTAwMDI0MDIwMDBDQUZBMjAwMzA4RjYyMDA0MDAwNTExODIzQzQKLToxMERDRjAwMDE4NjAwMDBEMDJBMzEwMkExNDQwMDEwMzAwMDAwMDAwNjgKLToxMEREMDAwMDE0NzUwMDA2MDJBMzEwMjMzQTYyMDAwMTMwNDIwMDAxOUMKLToxMEREMTAwMDE0NDAwMEZEMDAwMDAwMDAwMkEzMTAyMzAyMjM4ODIxMEMKLToxMEREMjAwMDBBMDAwRDhBMzA1NUZGRkYwMDAwMTgyMTMyNjIwMDAyMDAKLToxMEREMzAwMDEwNDAwMDFBMzI2MjAwMTA5MzYyMDAzRTMwNDIwMDQwRjAKLToxMERENDAwMDUwNDAwMDExOEZDMjAwMDQwRTAwMTFCMzAyMDAyMDIxQzgKLToxMERENTAwMDI0MDIwMDE4QTM2MjAwM0Y5MzYyMDAwNTI0MDNGRkZFMjMKLToxMERENjAwMDAyMDAyMDIxMDA0MzEwMjQwRTAwMTFCQ0EzNjIwMDA1MTQKLToxMERENzAwMDI0MDQwMDM5MDAwMDI4MjEwRTAwMTMyNDI0MDYwMDE4NzIKLToxMEREODAwMDBBMDAwRThFMjQwMjAwMDEyNDA0MDAxNzAwNDBGODA5NDYKLToxMEREOTAwMDAwMDAwMDAwMEEwMDBFOEUyNDAyMDAwMTEwNDAwMEU1ODEKLToxMEREQTAwMDAwMDAwMDAwOEY2NDAwNEM4RjYyMDA1NDAyODIxMDIzMzgKLToxMEREQjAwMDFDNDAwMEUwMDI4NDEwMjMwNDQyMDAwMTAwODBBMDIxRTYKLToxMEREQzAwMEFGQTMwMDE4QUZCMTAwMTBBRkI1MDAxNDkzNDIwMTIwMEIKLToxMERERDAwMDhGNjYwMDQwOTc2NDAwM0MzMDQyMDBGRjAzNDIyODIxRDgKLToxMERERTAwMDhGQTIwMDNDMDBBMzI4MjE4RkEzMDAzMDMwODRGRkZGQzYKLToxMERERjAwMDAwNDQyMDJCOEZDMjAwMDAwMDY0MTgyNTI0QTU0MDAwOTkKLToxMERFMDAwMEFGQTUwMDIwQUZBNjAwMjhBRkEzMDAzMEFGQTYwMDI0MjYKLToxMERFMTAwMEFGQTAwMDJDQUZCNDAwMzQwMDQwRjgwOTI3QTQwMDEwRDQKLToxMERFMjAwMDhGQTIwMDMwMzA0MjAwMDI1NDQwMDAwMTMyNzMwMEZFRTUKLToxMERFMzAwMDkzNjIwMDNFMzA0MjAwNDAxMDQwMDAzNzhGQTMwMDE0MzAKLToxMERFNDAwMDhGNjIwMDU0MTY4MjAwMUEzMjYyMDAwMTI0MDIwMDE0MEMKLToxMERFNTAwMDEyNDIwMDEwMkE0MjAwMTUxMDQwMDAwNjI0MDIwMDE2NEIKLToxMERFNjAwMDI0MDIwMDBDMTI0MjAwMDczMjYyMDAwMTBBMDAwREVCOEUKLToxMERFNzAwMDAwMDAwMDAwMTI0MjAwMDUzMjYyMDAwMTBBMDAwREVCQjIKLToxMERFODAwMDAwMDAwMDAwMEEwMDBERTYyNDE3MDAwRTBBMDAwREU2NEYKLToxMERFOTAwMDI0MTcwMDEwMEEwMDBERUEyNDE3MDAxMjkzNjIwMDIzRDEKLToxMERFQTAwMDI0MDNGRkJEMDA0MzEwMjRBMzYyMDAyMzMyNjIwMDAxNUIKLToxMERFQjAwMDEwNDAwMDE5OEZBMzAwMTQyNDAyMDAwQzEyNDIwMDBFMUYKLToxMERFQzAwMDJBNDIwMDBEMTA0MDAwMDYyNDAyMDAwRTI0MDIwMDBBMUYKLToxMERFRDAwMDEyNDIwMDA3OEZBMjAwMjQwQTAwMEUwMzI0NDIwMDAxMTAKLToxMERFRTAwMDEyNDIwMDA4OEZBMjAwMjQwQTAwMEUwMzI0NDIwMDAxRkYKLToxMERFRjAwMDBBMDAwRTAxMjQxNzAwMDgyNDAyMDAwRTE2RTIwMDAyOTgKLToxMERGMDAwMDI0MTcwMDE2MjQxNzAwMTA4RkEyMDAyNDI0NDIwMDAxQjkKLToxMERGMTAwMEFGQTIwMDI0OEZBMzAwMTQ4RkEyMDAyNDhGNzYwMDQwQUMKLToxMERGMjAwMDAwNDMxMDIxQUY2MjAwNDA4RkEyMDAzQzkzNjQwMDM2OTIKLToxMERGMzAwMDhGNjMwMDQwMDI4MjkwMjEzNDAyRkZGRjAwODIxMDA0QjAKLToxMERGNDAwMDAwNjIxODIxQUY2MzAwNDg4RkE2MDAzMDMwQzIwMDA4N0QKLToxMERGNTAwMDEwNDAwMDBFMDAwMDAwMDA4RjYyMDA1ODE2NDIwMDA0QkUKLToxMERGNjAwMDMwQzYwMEZGOTc0MjAxMUE1MDQwMDAwMTM0QzYwMDEwMkQKLToxMERGNzAwMDkzQzUwMDA4OEZBNzAwMzQwMjAwMjAyMTAwMDUyQjAwNjQKLToxMERGODAwMDM0QTUwMDgwMEUwMDBDOEQzMEE1RjA4MDhGNjIwMDQwMUIKLToxMERGOTAwMDAwNTYxMDIzMTg0MDAwMTc4RkEyMDAxODNDMDIwODAwRkEKLToxMERGQTAwMDhDNDIzMTk4MzA0MjAwMTAxMDQwMDAwOTI0MDIwMDAxRDgKLToxMERGQjAwMDk3NjIwMDY4MTQ0MDAwMDYyNDAyMDAwMUE3NjIwMDY4MEUKLToxMERGQzAwMDk3NDIwMDdBMjQ0MjAwMEEwQTAwMEU0N0E3NjIwMDEyMTQKLToxMERGRDAwMEE3NjIwMDEyMEUwMDExQjMwMjAwMjAyMTkzNjIwMDdEOUYKLToxMERGRTAwMDI0MDMwMDAxMDIwMDIwMjEzNDQyMDAwMTBBMDAwRTQ1RjIKLToxMERGRjAwMEFGQTMwMDM4MTg0MDAwMEEwMDAwMDAwMDBFMDAxMUIzNjMKLToxMEUwMDAwMDAyMDAyMDIxOTM2MjAwN0QyNDAzMDAwMTAyMDAyMDIxRjAKLToxMEUwMTAwMEFGQTMwMDM4MzQ0MjAwMDQwRTAwMTFCQ0EzNjIwMDdEOUYKLToxMEUwMjAwMDkzNjIwMDNFMzA0MjAwNDAxNDQwMDAwQzMyNjIwMDAxMTYKLToxMEUwMzAwMDEwNDAwMDBBMDAwMDAwMDA4RjYzMDA0MDhGQzIwMDA0RkYKLToxMEUwNDAwMDI0MDQwMDE4MjQ2MzAwMDEwMDQwRjgwOUFGNjMwMDQwNzUKLToxMEUwNTAwMDhGQTIwMDMwMEEwMDBFOEUzMDQyMDAwNDhGNjIwMDU4RkEKLToxMEUwNjAwMDEwNTIwMDEwMDAwMDAwMDA4RjYyMDAxODAyMjIxMDIzREUKLToxMEUwNzAwMDFDNDAwMDA4MjQwMjAwMDE4RjYyMDAxODE2MjIwMDA5Q0IKLToxMEUwODAwMDAwMDAwMDAwOEY2MjAwMUMwMjgyMTAyMzA0NDAwMDA1ODMKLToxMEUwOTAwMDI0MDIwMDAxQUY3MjAwNThBRkEyMDAzOEFGNzEwMDE4MUYKLToxMEUwQTAwMEFGNzQwMDFDMTJFMDAwMEI4RkEzMDAzODBFMDAxMUIzRjgKLToxMEUwQjAwMDAyMDAyMDIxQTM3NzAwM0YwRTAwMTFCQzAyMDAyMDIxQTYKLToxMEUwQzAwMDAyRTAzMDIxMjQwNDAwMzcwRTAwMTMyNDAwMDAyODIxMzAKLToxMEUwRDAwMDhGQTMwMDM4MTA2MDAwMDMwMDAwMDAwMDBFMDAwQzlCQUUKLToxMEUwRTAwMDAyMDAyMDIxMTJBMDAwMDUwMDAwMTgyMThGQTIwMDMwOUMKLToxMEUwRjAwMDMwNDIwMDA0NTA0MDAwMTEwMDYwMTAyMTI0MDMwMDAxNTAKLToxMEUxMDAwMDBBMDAwRThFMDA2MDEwMjEwRTAwMTFCMzAyMDAyMDIxQzMKLToxMEUxMTAwMDkzNjIwMDdEMDIwMDIwMjEzNDQyMDAwNDBFMDAxMUJDRjUKLToxMEUxMjAwMEEzNjIwMDdEMEUwMDBDOUIwMjAwMjAyMTBBMDAwRThFQ0YKLToxMEUxMzAwMDI0MDIwMDAxQUY0MDAwNDQyNDAyMDAwMThGQkYwMDY0QUMKLToxMEUxNDAwMDhGQkUwMDYwOEZCNzAwNUM4RkI2MDA1ODhGQjUwMDU0NEIKLToxMEUxNTAwMDhGQjQwMDUwOEZCMzAwNEM4RkIyMDA0ODhGQjEwMDQ0OTEKLToxMEUxNjAwMDhGQjAwMDQwMDNFMDAwMDgyN0JEMDA2ODhDODcwMDA0RTIKLToxMEUxNzAwMDhDODYwMDAwMDAwMDEwMjEwMEU1MzgyMTAwRTUyODJCRTYKLToxMEUxODAwMDAwQzIzMDIxMDBDNTMwMjFBQzg3MDAwNDAzRTAwMDA4NDQKLToxMEUxOTAwMEFDODYwMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwODAwNTQKLToxMEUxQTAwMEFGNDIwMUI4MDNFMDAwMDgwMDAwMDAwMDNDMDIwMDA4OTQKLToxMEUxQjAwMDAzNDIyODIxOTRBMjAwNDgzMDg0RkZGRjEwNDAwMDFCMzYKLToxMEUxQzAwMDI0ODQwMDEyOTRBMjAwNDgzMDQyRkZGRjAwNDQxMDJBMjkKLToxMEUxRDAwMDEwNDAwMDE3MjQwMjAwMDMyNDAyMDAxQTkzNDMwMTIwNzgKLToxMEUxRTAwMEEzNDIwMThCOEY4MjAwMDgzMDYzMDBGRjMwNDI0MDAwNjEKLToxMEUxRjAwMDEwNDAwMDA5MjQ2M0ZGRkU5NEEyMDA0ODMwNDJGRkZGNTQKLToxMEUyMDAwMDAwNDMxMDJCMTQ0MDAwMDU4RjgyMDAxNEE3NDMwMTk0OTMKLToxMEUyMTAwMDBBMDAwRUM4MzQ0MjAwMDE4RjgyMDAxNDI0MDNGRkZFNUUKLToxMEUyMjAwMDAwNDMxMDI0MDNFMDAwMDhBRjgyMDAxNDI0MDIwMDAzMUUKLToxMEUyMzAwMDAzRTAwMDA4QTM0MjAxOEIyN0JERkZFMEFGQjIwMDE4NDYKLToxMEUyNDAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzMwQjFGRkZGODIKLToxMEUyNTAwMDMwRDBGRkZGMzBGMkZGRkY4RjQyMDFCODA0NDBGRkZFRDUKLToxMEUyNjAwMDAwMDAwMDAwQUY0NDAxODBBRjQ0MDAyMDBFMDAwRUFBNjEKLToxMEUyNzAwMDAyMDAyMDIxOEY4MzAwMDg4Rjg0MDAxNEE3NTEwMThDOTUKLToxMEUyODAwMEE3NTAwMThFQTc0MzAxOTA4RjgzMDAwNDMwODI4MDAwNDUKLToxMEUyOTAwMEFGNDMwMUE4QTc1MjAxODgxMDQwMDAwRThGODIwMDE0REUKLToxMEUyQTAwMDkzNDIwMTE2MzA0MjAwRkMyNDQyMDAwNDAwNUExMDIxMUYKLToxMEUyQjAwMDhDNDI0MDAwMzA0MkZGRkYxNDQwMDAwNjhGODIwMDE0NjEKLToxMEUyQzAwMDNDMDJGRkZGMzQ0MjdGRkYwMDgyMTAyNEFGODIwMDE0MjMKLToxMEUyRDAwMDhGODIwMDE0MjQwM0JGRkYwMDQzMTAyNEE3NDIwMUE2MkQKLToxMEUyRTAwMDk3NDMwMTBDOEY0MjAxMDQwMDAzMUMwMDMwNDJGRkZGRTIKLToxMEUyRjAwMDAwNjIxODI1QUY0MzAxQUMzQzAyMTAwMEFGNDIwMUI4RTgKLToxMEUzMDAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwQTcKLToxMEUzMTAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEFGQjIwMDE4RDIKLToxMEUzMjAwMDMwRDJGRkZGQUY0NDAxODBBRjQ0MDAyMDAyNDAyMDIxRTMKLToxMEUzMzAwMEFGQjEwMDE0QUZCMDAwMTAzMEYxRkZGRkFGQkYwMDFDNTEKLToxMEUzNDAwMDBFMDAwRUFBMzBCMEZGRkY4RjgzMDAxNDI0MDJCRkZGMUYKLToxMEUzNTAwMEE3NTAwMThDMDA2MjE4MjQ4RjgyMDAwOEE3NTIwMThFRkEKLToxMEUzNjAwMEE3NTEwMTg4QTc0MzAxQTZBNzQyMDE5MDNDMDIxMDAwRDMKLToxMEUzNzAwMEFGNDIwMUI4OEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0REMKLToxMEUzODAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3NDMwMTgwNjQKLToxMEUzOTAwMDhGNDIwMUI4MDQ0MEZGRkUyNDAyMjAwMEE0NjIwMDA4NUUKLToxMEUzQTAwMDI0MDIwMDAyQTA2MjAwMEJBNDYwMDAxMDNDMDIxMDAwRDYKLToxMEUzQjAwMEFGNDIwMUI4MDNFMDAwMDgwMDAwMDAwMDhGNDcwMDcwODIKLToxMEUzQzAwMDkzNDIwMTEyOEY4MzAwMDgyN0JERkZGMDMwNDIwMEZGMDcKLToxMEUzRDAwMDAwMDIyODgyMzA2MjAxMDAwMDAwMzAyMTEwNDAwMDQzMUEKLToxMEUzRTAwMDI0QTQwMDAzMzA2MjQwMDAxMDQwMDAxMDMwNjIyMDAwN0UKLToxMEUzRjAwMDAwMDQxMDgwMDA1QTEwMjE4QzQzNDAwMDI0QTQwMDA0MjMKLToxMEU0MDAwMDAwMDQxMDgwQUZBMzAwMDAwMDVBMTAyMThDNDI0MDAwOEQKLToxMEU0MTAwMEFGQTIwMDA0OTM0MjAxMTYzMDQyMDBGQzAwNUExMDIxQzIKLToxMEU0MjAwMDhDNDI0MDAwMEEwMDBGNTZBRkEyMDAwODEwNDAwMDJGOTcKLToxMEU0MzAwMDAwMDAzMDIxMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwNUQKLToxMEU0NDAwMDI0QTQwMDA0MDAwNDEwODBBRkEzMDAwMDAwNUExMDIxOEYKLToxMEU0NTAwMDhDNDI0MDAwQUZBMDAwMDhBRkEyMDAwNDhGQTgwMDA4QzMKLToxMEU0NjAwMDAwMDAzMDIxMDAwMDIwMjEyNDBBMDAwODNDMDkwODAwOTcKLToxMEU0NzAwMDI1MjkwMTAwMDNBNDEwMjExNDhBMDAwMzAwMDQyQTAwQTYKLToxMEU0ODAwMDExMDAwMDBBMDAwMDAwMDA5MDQyMDAwMDI0ODQwMDAxRjYKLToxMEU0OTAwMDJDODMwMDBDMDBBMjEwMjEwMDAyMTA4MDAwNDkxMDIxRTIKLToxMEU0QTAwMDhDNDIwMDAwMTQ2MEZGRjMwMEMyMzAyNjNDMDQwODAwRDgKLToxMEU0QjAwMDhDODQzMTA0OEY0MjAwNzAyQzgzMDAyMDEwNjAwMDA5OEUKLToxMEU0QzAwMDAwNDczODIzM0MwMzA4MDAyNDYzMzEwODAwMDQxMDgwMEYKLToxMEU0RDAwMDAwNDMxMDIxMjQ4MzAwMDFBQzQ3MDAwMDNDMDEwODAwRTgKLToxMEU0RTAwMEFDMjMzMTA0QUY4NjAwMDQyNDA2MDAwMTAwQzAxMDIxRDMKLToxMEU0RjAwMDAzRTAwMDA4MjdCRDAwMTAzQzAyMDgwMDhDNDIwMDM4RjEKLToxMEU1MDAwMDI3QkRGRkQwQUZCNTAwMjRBRkIzMDAxQ0FGQkYwMDI4QkMKLToxMEU1MTAwMEFGQjQwMDIwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMUMKLToxMEU1MjAwMDNDMTUwODAwMjZCNTAwMzgxNDQwMDAwMjI0NTNGRkZGQjQKLToxMEU1MzAwMDAwMDA5ODIxOEY4NDAwMDgzMDgyNDAwMDEwNDAwMDBBQkIKLToxMEU1NDAwMDMwODI4MDAwM0MwMjAwMjAwMDgyMTAyNDUwNDAwMDA2RUYKLToxMEU1NTAwMDMwODI4MDAwOEY4MjAwMTQyNDAzQkZGRjAwODMxODI0QzAKLToxMEU1NjAwMDBBMDAwRkEyMzQ0MjEwMDAxMDQwMDAwQTNDMDIwMDIwQjIKLToxMEU1NzAwMDAwODIxMDI0MTA0MDAwMDc4RjgyMDAxNDNDMDNGRkZGMkMKLToxMEU1ODAwMDM0NjM3RkZGMDA4MzE4MjQzNDQyODAwMEFGODIwMDE0N0MKLToxMEU1OTAwMEFGODMwMDA4MEUwMDBGMkUwMDAwMDAwMDE0NDAwMDA4OUEKLToxMEU1QTAwMDhGODQwMDA4OTc0MzAxMUU5NzQyMDExQzMwNjNGRkZGRDAKLToxMEU1QjAwMDAwMDIxNDAwMDA2MjE4MjVBRjgzMDAwNDhGODQwMDA4NTUKLToxMEU1QzAwMDk3NDIwMTBDMzA4MzEwMDAxMDYwMDAxMTMwNDZGRkZGQUQKLToxMEU1RDAwMDMwODIwMDIwMTQ0MDAwMEYyNDEyMDAwNTNDMDIxMDAwN0QKLToxMEU1RTAwMDAwODIxMDI0MTA0MDAwMEIyNDEyMDAwMTNDMDMwRTAwOTYKLToxMEU1RjAwMDNDMDIwREZGMDA4MzE4MjQzNDQyRkZGRjAwNDMxMDJCMjAKLToxMEU2MDAwMDEwNDAwMDA0MDAwMDAwMDAwQTAwMEZDNDI0MTIwMDA1OUUKLToxMEU2MTAwMDI0MTIwMDAxM0MwNTA4MDA4Q0E1MDAzNDU0QTAwMDE5MDgKLToxMEU2MjAwMDhGODQwMDA4OEY4MjAwMUM1NDQwMDAxNjhGODQwMDA4REQKLToxMEU2MzAwMDhGODIwMDE0MzA0MjQwMDA1NDQwMDAxMjhGODQwMDA4NDIKLToxMEU2NDAwMDNDMDIxRjAxMDA4MjEwMjQzQzAzMTAwMDE0NDMwMDBEMDMKLToxMEU2NTAwMDhGODQwMDA4MzBDMjAyMDAxNDQwMDAwQjNDMDIwMDAxMEQKLToxMEU2NjAwMDk3NDYwMTBFMzY0NzAwMDIwMDAwMjAyMTI0QzYwMDA0MTAKLToxMEU2NzAwMDMwQzZGRkZGMEUwMDBGMDUyNDA1MDAwMjBBMDAxMDhEQjIKLToxMEU2ODAwMDhGQkYwMDI4M0MwMjAwMDEwMDgyMTAyNDEwNDAwMDBDQzMKLToxMEU2OTAwMDhGODMwMDE0M0MwMjA4MDA4QzQyMDBEODk3NDYwMTBFN0MKLToxMEU2QTAwMDI0MDQwMDgwMjQ0MjAwMDEzMEM2RkZGRjI0MDUwMDAyM0MKLToxMEU2QjAwMDNDMDEwODAwQUMyMjAwRDgwQTAwMTA4QTI0MDcwMDAzOUQKLToxMEU2QzAwMDMwNjI0MDAwMTA0MDAwMDYzQzAyMTAwMDNDMDIwRjAwODcKLToxMEU2RDAwMDAwODIxMDI0NTA0MDAwMDE5MzQyMDExNjNDMDIxMDAwQjkKLToxMEU2RTAwMDAwODIxMDI0MTA0MDAwNDQwMDAwMDAwMDNDMDIwODAwOUEKLToxMEU2RjAwMDhDNDIwMDMwMTA0MDAwMEMzMDYyNDAwMDEwNDAwMDBBOTQKLToxMEU3MDAwMDNDMDMwRjAwMDA4MzE4MjQzQzAyMDEwMDAwNDMxMDJCM0YKLToxMEU3MTAwMDE0NDAwMDA1MDAwMDAwMDA5NzQ2MDEwRTM2NDcwMDAyMzUKLToxMEU3MjAwMDBBMDAxMDg3MjQwNDAwODAxMEEwMDAwRDMwODIwMTAwMzAKLToxMEU3MzAwMDEwNDAwMDBCM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwM0EKLToxMEU3NDAwMDEwNDMwMDA3OEY4MjAwMDQwMDUzMTAyNDAwNTUxMDIxNEQKLToxMEU3NTAwMDkwNDIwMDA0MjQ0MjAwMDQwQTAwMTAzQTAwMDIyMUMwNDIKLToxMEU3NjAwMDAwMDAwMDAwOEY4NjAwMDgzQzA1MDgwMDhDQTUwMEQwNDIKLToxMEU3NzAwMDAwMDYxNjAyMzA1MDAwMEYzOEEyMDAwMTJDNDIwMDAxQTIKLToxMEU3ODAwMDJFMDMwMDBDMDA0MzEwMjQxNDQwMDAxODAwMTAyMUMwNzgKLToxMEU3OTAwMDI2MDJGRkZDMkM0MjAwMDQ1NDQwMDAxNDAwMDAyMDIxRkIKLToxMEU3QTAwMDM4QTIwMDAyMkM0MjAwMDEwMDQzMTAyNDEwNDAwMDAzNTQKLToxMEU3QjAwMDAwMDYxMjQyMEEwMDEwM0EwMDAwMjAyMTAwMTAxODJCMTcKLToxMEU3QzAwMDAwNDMxMDI0NTA0MDAwMDkwMDEwMjFDMDk3NDYwMTBFNUMKLToxMEU3RDAwMDAwMDAyMDIxMjQwNTAwMDIyNEM2MDAwNDMwQzZGRkZGRUIKLToxMEU3RTAwMDBFMDAwRUNEMzI0N0ZGRkIwMDEwMjFDMDk3NDYwMTBFRjAKLToxMEU3RjAwMDBBMDAxMDg3MzY0NzAwMDI4RjQyNDAwMDNDMTEwODAwOTMKLToxMEU4MDAwMDhFMzEwMDI0MzA0MjAxMDAxMDQwMDA0MDMyMjIwMDAxQ0QKLToxMEU4MTAwMDAyMjA4MDIxMTBBMDAwMTczMjU0MDAwNDMwODIwMTAwMzEKLToxMEU4MjAwMDEwNDAwMDE1MjQwMjAwMDEzQzAyMEYwMDAwODIxMDI0NTkKLToxMEU4MzAwMDNDMDMwMjAwMTA0MzAwMEY4RjgyMDAwNDk3NDYwMTBFMzQKLToxMEU4NDAwMDAyNDAzODIxMDA1MzEwMjQwMDU1MTAyMTkwNDQwMDA0NDgKLToxMEU4NTAwMDI0QzYwMDA0MzBDNkZGRkYyNDg0MDAwNDAwMDQyMUMwNDUKLToxMEU4NjAwMDBFMDAwRUNEMjQwNTAwMDIyNDAyRkZGRTAyMjI4MDI0QTkKLToxMEU4NzAwMDMyNTJGRkZCMjQwMjAwMDExNjAyMDAwNzMyMDIwMDAxOUYKLToxMEU4ODAwMDMyNDIwMDA0NTA0MDAwMDEzNjUyMDAwMjk3NDYwMTBFMDkKLToxMEU4OTAwMDBBMDAxMDg2MDI0MDM4MjExMDQwMDAwQTMyMDIwMDA0QUIKLToxMEU4QTAwMDk3NDYwMTBFMDI0MDM4MjEwMDAwMjAyMTI0QzYwMDA0QjIKLToxMEU4QjAwMDMwQzZGRkZGMEUwMDBFQ0QyNDA1MDAwMjMyNTJGRkZCRDIKLToxMEU4QzAwMDMyMDIwMDA0MTA0MDAwMEI4RjgyMDAwODMwNDIwODAwMjIKLToxMEU4RDAwMDEwNDAwMDA4MDAwMDAwMDA5NzQ2MDEwRTAyNDAzODIxNTkKLToxMEU4RTAwMDI0MDQwMTAwMjRDNjAwMDQzMEM2RkZGRjBFMDAwRUNEMzQKLToxMEU4RjAwMDI0MDUwMDAyNTY4MDAwMTA4RkJGMDAyODBFMDAwRjIyNTIKLToxMEU5MDAwMDAwMDAwMDAwMEEwMDEwOEQ4RkJGMDAyODEwNDAwMDBBOTAKLToxMEU5MTAwMDhGQkYwMDI4OTc0NjAxMEUzNjQ3MDAwMjAwMDAyMDIxRDUKLToxMEU5MjAwMDI0QzYwMDA0MzBDNkZGRkYyNDA1MDAwMjBFMDAwRUNERjEKLToxMEU5MzAwMDAwMDAwMDAwOEZCRjAwMjg4RkI1MDAyNDhGQjQwMDIwOTYKLToxMEU5NDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNkQKLToxMEU5NTAwMDAwMDAxMDIxMDNFMDAwMDgyN0JEMDAzMDI3NDMwMTgwOUMKLToxMEU5NjAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDhGNDIwMTQ4QzIKLToxMEU5NzAwMDAwMDIxNDAyQTQ2MjAwMDgyNDAyMDAwMkEwNjIwMDBCM0MKLToxMEU5ODAwMDhGNDIwMTQ4QTQ2MjAwMTA4RjQyMDE0NEFDNjIwMDI0MEYKLToxMEU5OTAwMDNDMDIxMDAwMDNFMDAwMDhBRjQyMDFCODI3QkRGRkU4QzkKLToxMEU5QTAwMEFGQjAwMDEwM0MwNDYwMENBRkJGMDAxNDhDODI1MDAwNkMKLToxMEU5QjAwMDI0MDNGRjdGM0MxQTgwMDAwMDQzMTAyNDM0NDIzODBDQUIKLToxMEU5QzAwMEFDODI1MDAwMjQwMjAwMDMzQzEwNjAwMEFGNDIwMDA4RkIKLToxMEU5RDAwMDhFMDIwODA4M0MxQjgwMDgzQzAxMDgwMEFDMjAwMDIwODcKLToxMEU5RTAwMDMwNDJGRkYwMzg0MjAwMTAyQzQyMDAwMTBFMDAxQjM5NkIKLToxMEU5RjAwMEFGODIwMDAwM0MwNEZGRkYzQzAyMDQwMDM0ODMwODA2QTEKLToxMEVBMDAwMDM0NDIwMDBDQUUwMjE5NDhBRTAzMTk0QzNDMDU2MDE2QTYKLToxMEVBMTAwMDhFMDIxOTgwOENBMzAwMDAzNDQyMDIwMDAwNjQxODI0ODYKLToxMEVBMjAwMEFFMDIxOTgwM0MwMjUzNTMxNDYyMDAwMzM0QTQ3QzAwRUMKLToxMEVBMzAwMDhDQTIwMDA0MDA1MDIwMjE4QzgyMDA3QzhDODMwMDc4MDIKLToxMEVBNDAwMDhGQkYwMDE0OEZCMDAwMTAyN0JEMDAxOEFGODIwMDE4RDAKLToxMEVBNTAwMDAzRTAwMDA4QUY4MzAwMTAyN0JERkZFOEFGQkYwMDEwNDAKLToxMEVBNjAwMDhGNDM0MDAwMzQwMkZGRkYzQzA0MDgwMDI0ODQwMEYwODAKLToxMEVBNzAwMDEwNjIwMDA3MDAwMDAwMDA4RjQyNDAwMDNDMDQwODAwQzQKLToxMEVBODAwMDI0ODQwMEU4MzA0MjAxMDAxMDQwMDAwOTAwMDAwMDAwMkEKLToxMEVBOTAwMDk3NDUwMTBFMEUwMDBFOUEzMEE1RkZGRjk3NDUwMTBFMTcKLToxMEVBQTAwMDNDMDQwODAwMjQ4NDMxQzgwQTAwMTBGQzhGQkYwMDEwMDkKLToxMEVBQjAwMDhGNDM0MDAwOEY4MjAwMTAzQzA0MDgwMDI0ODQwMEUwNTMKLToxMEVBQzAwMDE0NjIwMDBBMDAwMDAwMDA4RjQzNDAwNDhGODIwMDE4ODcKLToxMEVBRDAwMDE0NjIwMDA2MDAwMDAwMDA5NzQ1MDEwRTNDMDQwODAwODcKLToxMEVBRTAwMDI0ODQzMUI4MEEwMDEwRkM4RkJGMDAxMDk3NDUwMTBFMzYKLToxMEVBRjAwMDhGQkYwMDEwMzBBNUZGRkYwQTAwMEU5QTI3QkQwMDE4MzcKLToxMEVCMDAwMDI3QkRGRkU4QUZCRjAwMTA4RjQyMDEyOEFGNDIwMDIwQjEKLToxMEVCMTAwMDhGNDIwMTA0OEY0MzAxMDBBRjgyMDAwODBFMDAwRUE0NTMKLToxMEVCMjAwMEFGODMwMDE0MEUwMDEwRDUwMDAwMDAwMDNDMDIwODAwNjYKLToxMEVCMzAwMDhDNDIwMEMwMTA0MDAwMDg4Rjg0MDAwODNDMDIwODAwOEUKLToxMEVCNDAwMDhDNDIwMEM0MjQ0MjAwMDEzQzAxMDgwMEFDMjIwMEM0RjUKLToxMEVCNTAwMDBBMDAxMTM1MDAwMDAwMDAzQzAyMDAxMDAwODIxMDI0NjEKLToxMEVCNjAwMDE0NDAwMDBBOEY4MzAwMTQzQzAyMDgwMDhDNDIwMDIwRUQKLToxMEVCNzAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDAyMDBFMDAwRjdENjEKLToxMEVCODAwMDAwMDAyMDIxMEEwMDExMzMwMDAwMDAwMDI0MDJCRkZGMTIKLToxMEVCOTAwMDAwNjIxMDI0MTA0MDAwMDgwMDAwMDAwMDI0MDI4N0ZGREIKLToxMEVCQTAwMDAwNjIxMDI0MTQ0MDAwMDgzQzAyMDA2MDAwODIxMDI0MUYKLToxMEVCQjAwMDEwNDAwMDA1MDAwMDAwMDAwRTAwMENDNTAwMDAwMDAwMjEKLToxMEVCQzAwMDBBMDAxMTMzMDAwMDAwMDAwRTAwMTE5RDAwMDAwMDAwM0IKLToxMEVCRDAwMDEwNDAwMDA2M0MwMjQwMDA4RjQzMDEyNDNDMDI2MDIwQUMKLToxMEVCRTAwMEFDNDMwMDE0MDAwMDAwMDAzQzAyNDAwMEFGNDIwMTM4N0EKLToxMEVCRjAwMDAwMDAwMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4RDAKLToxMEVDMDAwMDI3QkRGRkU4QUZCRjAwMTA4RjQyMDE0MDNDMDQ0MDAwMjkKLToxMEVDMTAwMEFGNDIwMDIwOEY0MzAxNDgzQzAyNzAwMDAwNjIxODI0N0MKLToxMEVDMjAwMDEwNjQwMDEwMDA4MzEwMkIxNDQwMDAwNjNDMDI2MDAwQUEKLToxMEVDMzAwMDNDMDIyMDAwMTA2MjAwMDcwMDAwMDAwMDBBMDAxMTVGODMKLToxMEVDNDAwMDNDMDI0MDAwMTA2MjAwMEIzQzAyNDAwMDBBMDAxMTVGRDEKLToxMEVDNTAwMDAwMDAwMDAwMEUwMDEwOTYwMDAwMDAwMDBBMDAxMTVGODYKLToxMEVDNjAwMDNDMDI0MDAwMEUwMDExQzEwMDAwMDAwMDBBMDAxMTVGQ0MKLToxMEVDNzAwMDNDMDI0MDAwMEUwMDFCNDYwMDAwMDAwMDNDMDI0MDAwMjkKLToxMEVDODAwMEFGNDIwMTc4MDAwMDAwMDA4RkJGMDAxMDAzRTAwMDA4RDEKLToxMEVDOTAwMDI3QkQwMDE4MjdCREZGRThBRkJGMDAxNDBFMDAxMEE2NjcKLToxMEVDQTAwMEFGQjAwMDEwM0MwMjgwMDAzNDQyMDA3MDhDNDMwMDAwODIKLToxMEVDQjAwMDAwNDAzODIxQUY4MzAwMjAwMDYwMzAyMThDRTgwMDAwNDQKLToxMEVDQzAwMDNDMDUwODAwOENBNTAwRkMzQzA0MDgwMDhDODQwMEY4N0UKLToxMEVDRDAwMDAxMDYzMDIzMDAwMDEwMjEwMEE2MjgyMTAwQTYzMDJCQjkKLToxMEVDRTAwMDAwODIyMDIxMDA4NjIwMjEzQzAxMDgwMEFDMjUwMEZDODgKLToxMEVDRjAwMDNDMDEwODAwQUMyNDAwRjg4RjUwMDAwMDMyMDIwMDAzRjEKLToxMEVEMDAwMDEwNDBGRkVFMDEwMDMwMjE4Q0U2MDAwMDNDMDUwODAwQjkKLToxMEVEMTAwMDhDQTUwMEZDM0MwNDA4MDA4Qzg0MDBGODAwQzgzMDIzNUIKLToxMEVEMjAwMDAwQTYyODIxMDAwMDEwMjEwMEE2MzAyQjAwODIyMDIxRkYKLToxMEVEMzAwMDAwODYyMDIxMzIwNzAwMDEzQzAxMDgwMEFDMjUwMEZDQzAKLToxMEVENDAwMEFGODgwMDIwM0MwMTA4MDBBQzI0MDBGODEwRTAwMDA0NkIKLToxMEVENTAwMDMyMDIwMDAyMEUwMDEwRkYwMDAwMDAwMDMyMDIwMDAyMkEKLToxMEVENjAwMDUwNDBGRkQxM0MwMjgwMDAwRTAwMTEzRjAwMDAwMDAwMjcKLToxMEVENzAwMDBBMDAxMTY5M0MwMjgwMDA4RjQyMDEwMDMwNDIwMDNFQ0YKLToxMEVEODAwMDE0NDAwMDExMjQwMjAwMDFBRjQwMDA0ODhGNDIwMTAwRUUKLToxMEVEOTAwMDMwNDIwN0MwMTA0MDAwMDUwMDAwMDAwMEFGNDAwMDRDQUEKLToxMEVEQTAwMEFGNDAwMDUwMDNFMDAwMDgyNDAyMDAwMUFGNDAwMDU0Q0YKLToxMEVEQjAwMEFGNDAwMDQwOEY0MjAxMDAzMDQyMzgwMDU0NDAwMDAxMTMKLToxMEVEQzAwMEFGNDAwMDQ0MjQwMjAwMDEwM0UwMDAwODAwMDAwMDAwRkUKLToxMEVERDAwMDNDMDI5MDAwMzQ0MjAwMDEwMDgyMjAyNUFGNDQwMDIwMTQKLToxMEVERTAwMDhGNDIwMDIwMDQ0MEZGRkUwMDAwMDAwMDAzRTAwMDA4MDYKLToxMEVERjAwMDAwMDAwMDAwM0MwMjgwMDAzNDQyMDAwMTAwODIyMDI1MTcKLToxMEVFMDAwMDAzRTAwMDA4QUY0NDAwMjAyN0JERkZFMEFGQjIwMDE4QzgKLToxMEVFMTAwMEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMDhGNTAwMTQwNjUKLToxMEVFMjAwMDhGNTEwMTQ4M0MwMjgwMDAwMDExOTQwMjAyMjIyMDI0RUMKLToxMEVFMzAwMDMyNDMwMEZGMjQwMjAwMEUxMDYyMDA4QTI4NjIwMDBGOTUKLToxMEVFNDAwMDEwNDAwMDEyMjg2MjAwMzcyNDAyMDAwNjEwNjIwMDNCQzYKLToxMEVFNTAwMDI4NjIwMDA3MTA0MDAwMDcyNDAyMDAwOTEwNjAwMDFBMTEKLToxMEVFNjAwMDI0MDIwMDAxMTA2MjAwMjUwMDAwMDAwMDBBMDAxMjc2NTIKLToxMEVFNzAwMDAwMDAwMDAwMTA2MjAwN0IyNDAyMDAwQjEwNjIwMDVCQTcKLToxMEVFODAwMDMyMjJGRkZGMEEwMDEyNzYwMDAwMDAwMDEwNDAwMDA4NDYKLToxMEVFOTAwMDI0MDIwMDM4Mjg2MjAwMzUxMDQwMDA4MDI0MDIwMDFGNDAKLToxMEVFQTAwMDEwNjIwMDdFMDAwMDAwMDAwQTAwMTI3NjAwMDAwMDAwRTAKLToxMEVFQjAwMDEwNjIwMDdBMjQwMjAwODAxMDYyMDA0MjAwMDAwMDAwMEMKLToxMEVFQzAwMDBBMDAxMjc2MDAwMDAwMDA4RjQyMDFCODA0NDBGRkZFRTUKLToxMEVFRDAwMDI0MDIwMDAxQUY1MDAxODBBRjQwMDE4NEE3NTIwMTg4OTUKLToxMEVFRTAwMEEzNDIwMThBMjQwMjAwMDJBMzQyMDE4QkE3NTEwMTkwOTAKLToxMEVFRjAwMDhGNDIwMTQ0MEEwMDEyNzFBRjQyMDFBNDEwODAwMDBBM0YKLToxMEVGMDAwMDI0MDIwMDAyM0MwMTA4MDBBMDIyNzE3ODNDMDEwODAwQTQKLToxMEVGMTAwMEFDMzA3MTgwOEY0MjAxNDQzQzAxMDgwMEFDMjI3MTdDMEUKLToxMEVGMjAwMDBBMDAxMjc4OEZCRjAwMUM4RjQyMDFCODA0NDBGRkZFMTgKLToxMEVGMzAwMDI0MDIwMDAyMEEwMDEyNUIwMDAwMDAwMDhGNDIwMUI4QTgKLToxMEVGNDAwMDA0NDBGRkZFMDAwMDAwMDBBRjUwMDE4MDNDMDIwODAwQkEKLToxMEVGNTAwMDkwNDI3MTc4MTA0MDAwMDMwMDAwMTgyMTNDMDMwODAwMjMKLToxMEVGNjAwMDhDNjM3MTgwQUY0MzAxODRBNzUyMDE4ODNDMDIwODAwODIKLToxMEVGNzAwMDkwNDI3MTc4MDAwMDE4MjEzNDQyMDAwMUEzNDIwMThBQjYKLToxMEVGODAwMDI0MDIwMDAyQTM0MjAxOEJBNzUxMDE5MDhGNDIwMTQ0NDkKLToxMEVGOTAwMEFGNDIwMUE0M0MwMjA4MDA5MDQyNzE3ODEwNDAwMDAzODcKLToxMEVGQTAwMDNDMDIxMDAwM0MwMzA4MDA4QzYzNzE3Q0FGNDMwMUE4NTUKLToxMEVGQjAwMEFGNDIwMUI4M0MwMTA4MDBBMDIwNzE3ODBBMDAxMjc4MjUKLToxMEVGQzAwMDhGQkYwMDFDOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAyRTQKLToxMEVGRDAwMEEzNDIwMThCQTc1MjAxODhBNzUxMDE5MDhGNDIwMTQ0OUYKLToxMEVGRTAwMEE3NDIwMTkyMEEwMDEyNzMzQzAyMTAwMDE0NDAwMDFENTcKLToxMEVGRjAwMDAwMDAwMDAwOTM2MjAwMDUzMDQyMDAwNDE0NDAwMDM3MTYKLToxMEYwMDAwMDAwMDAwMDAwMEUwMDExQjMwMjAwMjAyMTkzNjIwMDA1RjEKLToxMEYwMTAwMDAyMDAyMDIxMzQ0MjAwMDQwRTAwMTFCQ0EzNjIwMDA1NEUKLToxMEYwMjAwMDkzNjIwMDA1MzA0MjAwMDQxNDQwMDAwMjAwMDAwMDAwMUEKLToxMEYwMzAwMDAwMDAwMDBEOTM2MjAwMDAyNDAzMDAyMDMwNDIwMEZGMTYKLToxMEYwNDAwMDE0NDMwMDA4MDAwMDAwMDA4RjQyMDFCODA0NDBGRkZFOTYKLToxMEYwNTAwMDI0MDIwMDA1QUY1MDAxODBBMzQyMDE4QjNDMDIxMDAwNDYKLToxMEYwNjAwMEFGNDIwMUI4OEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAyMDMKLToxMEYwNzAwMEFGNDAwMTgwQUY1MDAxODRBNzUyMDE4OEEzNDIwMThBQUEKLToxMEYwODAwMEEzNDIwMThCQTc1MTAxOTBBRjQwMDFBNDhGNDIwMTQ0REMKLToxMEYwOTAwMEFGNDIwMUE4MEEwMDEyNzMzQzAyMTAwMDhGNDIwMUI4NkYKLToxMEYwQTAwMDA0NDBGRkZFMjQwMjAwMDFBRjUwMDE4MEFGNDAwMTg0MDQKLToxMEYwQjAwMEE3NTIwMTg4QTM0MjAxOEEyNDAyMDAwMkEzNDIwMThCQzUKLToxMEYwQzAwMEE3NTEwMTkwQUY0MDAxQTRBRjQwMDFBODNDMDIxMDAwM0QKLToxMEYwRDAwMEFGNDIwMUI4MEEwMDEyNzg4RkJGMDAxQzAwMDAwMDBEN0IKLToxMEYwRTAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwQkEKLToxMEYwRjAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFOEFGQkYwMDEwRDgKLToxMEYxMDAwMDBFMDAwRUE0MDAwMDAwMDBBRjQwMDE4MDhGQkYwMDEwNzEKLToxMEYxMTAwMDAwMDAyMDIxMEEwMDBGN0QyN0JEMDAxODMwODRGRkZGNkEKLToxMEYxMjAwMDMwQTVGRkZGMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwM0MKLToxMEYxMzAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxQzYKLToxMEYxNDAwMDBBMDAxMjg5MDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMzEKLToxMEYxNTAwMDEwQzAwMDA2MjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0RjYKLToxMEYxNjAwMEFDODIwMDAwMEEwMDEyOTMyNDg0MDAwNDAzRTAwMDA4MkIKLToxMEYxNzAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwRTAKLToxMEYxODAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGRDYKLToxMEYxOTAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwNjkKLToxMEYxQTAwMDI3QkRGRkUwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwNDAKLToxMEYxQjAwMEFGQkYwMDFDOTQ4MjAwMEMwMEEwODgyMTI0OTAwMDE0OTIKLToxMEYxQzAwMDAwMDIxMzAyMDAwMjEwODAwMDgyOTAyMTAwMDAzMDIxMTIKLToxMEYxRDAwMDAwQTAyMDIxMEUwMDEyOUMyNDA1MDAwNTAyMTIxMDJCMTUKLToxMEYxRTAwMDEwNDAwMDU3MDAwMDEwMjE5MjAzMDAwMDJDNjIwMDA5MUIKLToxMEYxRjAwMDUwNDAwMDUxOTIwMjAwMDEwMDAzMTA4MDNDMDMwODAwQkYKLToxMEYyMDAwMDI0NjM3MERDMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4QTEKLToxMEYyMTAwMDAwMDAwMDAwOTIwMzAwMDEyNDAyMDAwQzE0NjIwMDQ4NjgKLToxMEYyMjAwMDI0MDIwMDAxMDI1MDEwMjMyQzQyMDAwQTE0NDAwMDM2MzAKLToxMEYyMzAwMDI2MTAwMDAyOEUyMjAwMDAzNDQyMDEwMEFFMjIwMDAwOUYKLToxMEYyNDAwMDkyMDIwMDAwOTIwMzAwMDE5MjA0MDAwMjkyMDUwMDAzNjIKLToxMEYyNTAwMDAwMDMxQzAwMDAwMjE2MDAwMDQzMTAyNTAwMDQyMjAwRDkKLToxMEYyNjAwMDAwNDQxMDI1MDA0NTEwMjUyNjEwMDAwNEFFMjIwMDA0OUQKLToxMEYyNzAwMDkyMDIwMDAwOTIwMzAwMDE5MjA0MDAwMjkyMDUwMDAzMzIKLToxMEYyODAwMDAwMDIxNjAwMDAwMzFDMDAwMDQzMTAyNTAwMDQyMjAwQTkKLToxMEYyOTAwMDAwNDQxMDI1MDA0NTEwMjUyNjEwMDAwNDBBMDAxMkI2NkYKLToxMEYyQTAwMEFFMjIwMDA4OTIwMzAwMDEyNDAyMDAwNDE0NjIwMDE2M0EKLToxMEYyQjAwMDI2MTAwMDAyOTIwMjAwMDA5MjA0MDAwMThFMjMwMDAwM0EKLToxMEYyQzAwMDAwMDIxMjAwMDA0NDEwMjUzNDYzMDAwNDI2MTAwMDAyREUKLToxMEYyRDAwMEFFMjIwMDBDMEEwMDEyQjZBRTIzMDAwMDkyMDMwMDAxMTkKLToxMEYyRTAwMDI0MDIwMDAzMTQ2MjAwMDgyNjEwMDAwMjhFMjIwMDAwOEYKLToxMEYyRjAwMDkyMDMwMDAwMjYxMDAwMDEzNDQyMDAwOEEyMjMwMDEwRUYKLToxMEYzMDAwMDBBMDAxMkI2QUUyMjAwMDAwQTAwMTMwRjI0MDIwMDAxMDgKLToxMEYzMTAwMDkyMDMwMDAxMjQwMjAwMDIxMDYyMDAwMjI2MDQwMDAyOEYKLToxMEYzMjAwMDAyNDAyMDIxMEEwMDEyQjYwMDgwODAyMTBBMDAxMkI2OTUKLToxMEYzMzAwMDI2MTAwMDAxOTIwMjAwMDEwQTAwMTJCNjAyMDI4MDIxOEEKLToxMEYzNDAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNTcKLToxMEYzNTAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFOEFGQkYwMDE0NzEKLToxMEYzNjAwMEFGQjAwMDEwMEUwMDExQjMwMDgwODAyMTkzNjIwMDdEQzkKLToxMEYzNzAwMDAyMDAyMDIxMzQ0MjAwMjAwRTAwMTFCQ0EzNjIwMDdENTcKLToxMEYzODAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBBMDAwQzlCRDgKLToxMEYzOTAwMDI3QkQwMDE4MzA4MzAwRkYzMEE1MDBGRjMwQzYwMEZGRjYKLToxMEYzQTAwMDI3NDcwMTgwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwQTMKLToxMEYzQjAwMDhGNDIwMTI4MzQ2MzQwMDBBQ0UyMDAwMDI0MDIwMDAxQzcKLToxMEYzQzAwMEFDRTAwMDA0QTRFMzAwMDhBMEUyMDAwQTI0MDIwMDAyNkEKLToxMEYzRDAwMEEwRTIwMDBCM0MwMjEwMDBBNEU1MDAxMEFDRTAwMDI0MDkKLToxMEYzRTAwMEFDRTAwMDI4QTRFNjAwMTIwM0UwMDAwOEFGNDIwMUI4MzgKLToxMEYzRjAwMDI3QkRGRkU4QUZCRjAwMTA5MzYyMDAzRjI0MDMwMDEyNTcKLToxMEY0MDAwMDMwNDIwMEZGMTA0MzAwMEQwMDgwMzAyMThGNjIwMDQ0MjUKLToxMEY0MTAwMDAwODIxMDIzMDQ0MDAwMEE4RkJGMDAxMDhGNjIwMDQ4NTIKLToxMEY0MjAwMDI0MDQwMDM5MDAwMDI4MjEwMEMyMTAyMzA0NDEwMDA0RjQKLToxMEY0MzAwMDI0MDYwMDEyMEUwMDEzMjQwMDAwMDAwMDhGQkYwMDEwRUQKLToxMEY0NDAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODI3QkRGRkM4MDMKLToxMEY0NTAwMEFGQjEwMDJDMDBBMDg4MjFBRkIyMDAzMDI3QTUwMDEwNkEKLToxMEY0NjAwMDAwODA5MDIxMDIyMDIwMjFBRkJGMDAzNDBFMDAxMkE3OUYKLToxMEY0NzAwMEFGQjAwMDI4MTA0MDAwMDkwMjQwMjAyMThFMjIwMDA4NzEKLToxMEY0ODAwMEFGNjIwMDg0MEUwMDEzMTVBRjYwMDA0MDI0MDQwMDM4MDIKLToxMEY0OTAwMDI0MDUwMDhEMEEwMDEzRDEyNDA2MDAxMjkzNjIwMDM0NjMKLToxMEY0QTAwMDkzNjMwMDM3OEY2NDAwODQzMDQyMDBGRjMwNjMwMEZGQjUKLToxMEY0QjAwMDAwNDMyODIxMDBBNDIwMkIxMDgwMDAwQjAwMDAwMDAwMzYKLToxMEY0QzAwMDk3NjMwMDNDOEY2MjAwODQzMDYzRkZGRjAwNDUxMDIzODgKLToxMEY0RDAwMDAwNjIxODJCMTQ2MDAwMDQwMDAwMDAwMDhGNjIwMDg0OUEKLToxMEY0RTAwMDBBMDAxMzdCMDA0NTgwMjM5NzYyMDAzQzMwNTBGRkZGRTkKLToxMEY0RjAwMDhGQTMwMDEwMzA2MjAwMDQ1MDQwMDAwMzJFMDIwMjE4NTcKLToxMEY1MDAwMDhGQTIwMDFDMDIwMjEwMkIxNDQwMDAwNTAyMDAyMDIxRDMKLToxMEY1MTAwMDMwNjIwMDA0MTA0MDAwMDIyNDA0MDIxODhGQTQwMDFDNzIKLToxMEY1MjAwMDJDODIwMDgwMTA0MDAwMDIwMDgwODAyMTI0MTAwMDgwODYKLToxMEY1MzAwMDBFMDAxMUIzMDI0MDIwMjEyNDAyMDAwMUFGNjIwMDBDMzIKLToxMEY1NDAwMDkzNjIwMDNFMDAxMDIwNDAzMDQyMDA3RkEzNjIwMDNFRTQKLToxMEY1NTAwMDhFMjIwMDA0MjQ0MjAwMDFBRjYyMDA0MEE3NzAwMDNDRUMKLToxMEY1NjAwMDhGNjIwMDUwOTYyMzAwMEUwMDQzMTAyMUFGNjIwMDU4QjYKLToxMEY1NzAwMDhGNjIwMDUwMDA0NDEwMjFBRjYyMDA1QzhFMjIwMDA0QjQKLToxMEY1ODAwMEFGNjIwMDE4OEUyMjAwMDhBRjYyMDAxQzhGQTIwMDEwMkMKLToxMEY1OTAwMDMwNDIwMDA4NTQ0MDAwMEE5M0EyMDAyMEEzNjAwMDM2QzUKLToxMEY1QTAwMDkzNjIwMDM2MjQwM0ZGREZBMzYyMDAzNTkzNjIwMDNFQkUKLToxMEY1QjAwMDAwNDMxMDI0QTM2MjAwM0UwQTAwMTNCMThFMjIwMDA4MEIKLToxMEY1QzAwMEEzNjIwMDM1OEUyMjAwMDhBRjYyMDA0QzhGNjIwMDI0RDcKLToxMEY1RDAwMDhGNjMwMDQwMDA0MzEwMjFBRjYyMDA0ODkzNjIwMDAwMzcKLToxMEY1RTAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAxMjI0MDNGRjgwMjQKLToxMEY1RjAwMDNDMDIwODAwOEM0MjMxQTAwMjQyMTAyMTAwNDMxMDI0M0EKLToxMEY2MDAwMEFGNDIwMDI4M0MwMjA4MDA4QzQyMzFBMDhFMjQwMDA4NDIKLToxMEY2MTAwMDNDMDMwMDBDMDI0MjEwMjEzMDQyMDA3RjAzNDIxMDIxQzMKLToxMEY2MjAwMDAwNDMxMDIxQUM0NDAwRDg4RTIzMDAwOEFGODIwMDI4OEMKLToxMEY2MzAwMEFDNDMwMERDMEUwMDExQkMwMjQwMjAyMTI0MDQwMDM4NDEKLToxMEY2NDAwMDAwMDAyODIxMjQwNjAwMEEwRTAwMTMyNDAwMDAwMDAwRjgKLToxMEY2NTAwMDhGQkYwMDM0OEZCMjAwMzA4RkIxMDAyQzhGQjAwMDI4RTQKLToxMEY2NjAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAzODI3QkRGRkU4QTEKLToxMEY2NzAwMEFGQkYwMDEwOTBDNzAwMEQwMEMwMjgyMTMwRTYwMDEwNzkKLToxMEY2ODAwMDEwQzAwMDBBMzBFMjAwMDQ4Q0EzMDAwODhGNjIwMDU0MEUKLToxMEY2OTAwMDEwNjIwMDA2MzBFMjAwMDQxNDQwMDAxNzhGQkYwMDEwMTMKLToxMEY2QTAwMDAwMDAyMDIxMEEwMDBDQjIyN0JEMDAxODEwNDAwMDBERjgKLToxMEY2QjAwMDMwRTMwMDEyMTBDMDAwMTA4RkJGMDAxMDhDQTMwMDA4QjAKLToxMEY2QzAwMDhGNjIwMDU0MTQ2MjAwMEQyNDAyMDAwMTI0MDQwMDM4RUIKLToxMEY2RDAwMDI0MDUwMDhEMEUwMDEzMjQyNDA2MDAxMjBBMDAxM0ZERDkKLToxMEY2RTAwMDhGQkYwMDEwMjQwMjAwMTIxNDYyMDAwMzhGQkYwMDEwQUQKLToxMEY2RjAwMDBBMDAxMzUyMjdCRDAwMTgyNDAyMDAwMTAzRTAwMDA4OEQKLToxMEY3MDAwMDI3QkQwMDE4MjdCREZGRjgyNzQyMDE4MEFGQTIwMDAwRTcKLToxMEY3MTAwMDMwOEEwMEZGOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwNjUKLToxMEY3MjAwMDhGNDYwMTI4M0MwMjA4MDA4QzQyMzFBMDI0MDNGRjgwNTAKLToxMEY3MzAwMEFGODYwMDUwMDBDMjEwMjEwMDQzMTAyNEFGNDIwMDI0QzUKLToxMEY3NDAwMDNDMDIwODAwOEM0MjMxQTA4RkE5MDAwMDhGQTgwMDAwNjUKLToxMEY3NTAwMDAwQzIxMDIxMzA0MjAwN0YwMzQyMTgyMTNDMDIwMDBBRkYKLToxMEY3NjAwMDAwNjIxODIxOTQ2NDAwRDQ4RkE3MDAwMDhGQTUwMDAwQzgKLToxMEY3NzAwMDI0MDIwMDAyQUY4MzAwMjhBMEEyMDAwQjhGQTMwMDAwODgKLToxMEY3ODAwMDM1NDI2MDAwMzA4NEZGRkZBNEUyMDAwODNDMDIxMDAwMTQKLToxMEY3OTAwMEFEMjYwMDAwQUQwNDAwMDRBQzYwMDAyNDI3QkQwMDA4QzUKLToxMEY3QTAwMEFGNDIwMUI4MDNFMDAwMDgyNDAyMDAwMThDODIwMDA0OEIKLToxMEY3QjAwMDhGODMwMDI4MDA0NTEwMjNBQzgyMDAwNDkwNjIwMDYzMTAKLToxMEY3QzAwMDMwNDIwMDdGQTA2MjAwNjM4QzgyMDAyMDkzODMwMDMwNkYKLToxMEY3RDAwMDhGODUwMDI4MzQ0MjAwMDJBRjgzMDA0NEE3ODAwMDQyOTYKLToxMEY3RTAwMEFDODIwMDIwQTRBMDAwRTQ5MEEyMDA2MzI0MDNGRkJGMjkKLToxMEY3RjAwMDAwNDMxMDI0MDNFMDAwMDhBMEEyMDA2MzI3NDMwMTgwMTcKLToxMEY4MDAwMDhGNDIwMUI4MDQ0MEZGRkU4RjgyMDA1MEFDNjIwMDAwQkUKLToxMEY4MTAwMDhGNDIwMTI0QUM2MjAwMDQyNDAyNjA4M0E0NjIwMDA4QzkKLToxMEY4MjAwMDI0MDIwMDAyQTA2MjAwMEIzQzAyMTAwMDAzRTAwMDA4NkEKLToxMEY4MzAwMEFGNDIwMUI4OEY4ODAwNDQ5MzgyMDAzMDhGODMwMDI4NDQKLToxMEY4NDAwMDNDMDcwODAwMjRFNzc1OTQwMDQ4MTAyMzMwNDIwMEZGNkQKLToxMEY4NTAwMDMwNDkwMEZDMjQ2NTAwODg4Rjg2MDA0ODMwNEEwMDAzNDgKLToxMEY4NjAwMDExMjAwMDA5MDAwMDIwMjEyNDgyMDAwNDhDQTMwMDAwNDQKLToxMEY4NzAwMDMwNDQwMEZGMDA4OTEwMkFBQ0UzMDAwMDI0QTUwMDA0RjYKLToxMEY4ODAwMDE0NDBGRkY5MjRFNzAwMDQxMTQwMDAwOTAwMDAyMDIxODIKLToxMEY4OTAwMDI0ODIwMDAxOTBBMzAwMDAzMDQ0MDBGRjAwOEExMDJCNTYKLToxMEY4QTAwMEEwRTMwMDAwMjRBNTAwMDExNDQwRkZGOTI0RTcwMDAxQjMKLToxMEY4QjAwMDMwQzIwMDAzMTQ0MDAwMDQ4Rjg1MDA0NDMxMDIwMDAzNkQKLToxMEY4QzAwMDEwNDAwMDBEMDAwMDAwMDAxMEEwMDAwOTAwMDAyMDIxRTEKLToxMEY4RDAwMDI0ODIwMDAxOTBDMzAwMDAzMDQ0MDBGRjAwODUxMDJCRkIKLToxMEY4RTAwMEEwRTMwMDAwMjRDNjAwMDExNDQwRkZGOTI0RTcwMDAxNTIKLToxMEY4RjAwMDAzRTAwMDA4MDAwMDAwMDAxMTAwRkZGRDAwMDAyMDIxQ0YKLToxMEY5MDAwMDI0ODIwMDA0OENDMzAwMDAzMDQ0MDBGRjAwODgxMDJCQzgKLToxMEY5MTAwMEFDRTMwMDAwMjRDNjAwMDQxNDQwRkZGOTI0RTcwMDA0MEYKLToxMEY5MjAwMDAzRTAwMDA4MDAwMDAwMDA4RjgzMDA0NDkzODIwMDMwNTEKLToxMEY5MzAwMDMwQzYwMEZGMzBBNTAwRkYwMDQzMTAyMzMwNDMwMEZGMTYKLToxMEY5NDAwMDhGODIwMDI4MDA4MDM4MjEwMDQzMTAyMTE0QzAwMDAyNUIKLToxMEY5NTAwMDI0NDgwMDg4MDA4MzM4MjEzMEUyMDAwMzE0NDAwMDA1NjkKLToxMEY5NjAwMDMwQTIwMDAzMTQ0MDAwMDMzMDYyMDAwMzEwNDAwMDBENzkKLToxMEY5NzAwMDAwMDAwMDAwMTBBMDAwMDkwMDAwMjAyMTI0ODIwMDAxRTYKLToxMEY5ODAwMDkwRTMwMDAwMzA0NDAwRkYwMDg1MTAyQkExMDMwMDAwMkQKLToxMEY5OTAwMDI0RTcwMDAxMTQ0MEZGRjkyNTA4MDAwMTAzRTAwMDA4RjYKLToxMEY5QTAwMDAwMDAwMDAwMTBBMEZGRkQwMDAwMjAyMTI0ODIwMDA0QzAKLToxMEY5QjAwMDhDRTMwMDAwMzA0NDAwRkYwMDg1MTAyQkFEMDMwMDAwRjUKLToxMEY5QzAwMDI0RTcwMDA0MTQ0MEZGRjkyNTA4MDAwNDAzRTAwMDA4QzAKLToxMEY5RDAwMDAwMDAwMDAwMjdCREZGRjgyNDAyRkZGRkFGQTIwMDAwRDcKLToxMEY5RTAwMDAwODAzODIxMjQwNTAwMkYzQzA5MDgwMDI1Mjk3MTk0NDYKLToxMEY5RjAwMDI0MDgwMEZGMjQwNkZGRkY5MEUyMDAwMDI0QTNGRkZGN0QKLToxMEZBMDAwMDAwMDYyMjAyMDBDMjEwMjYzMDQyMDBGRjAwMDIxMDgwRDEKLToxMEZBMTAwMDAwNDkxMDIxOEM0MjAwMDAzMDY1MDBGRjI0RTcwMDAxRkUKLToxMEZBMjAwMDE0QThGRkY1MDA4MjMwMjYwMDA2MTAyN0FGQTIwMDA0QkMKLToxMEZBMzAwMEFGQTIwMDAwMDAwMDI4MjEyN0E2MDAwNDAwQzUxMDIzNjMKLToxMEZBNDAwMDkwNDQwMDAzMjRBMjAwMDEwMEJEMTgyMTMwNDUwMEZGQUUKLToxMEZBNTAwMDJDQTIwMDA0MTQ0MEZGRjlBMDY0MDAwMDhGQTIwMDAwNTMKLToxMEZBNjAwMDAzRTAwMDA4MjdCRDAwMDgwMDgwNDgyMTMwQUFGRkZGRkUKLToxMEZBNzAwMDMwQzYwMEZGMzBFN0ZGRkYyNzQ4MDE4MDhGNDIwMUI4MDIKLToxMEZBODAwMDA0NDBGRkZFOEY4MjAwNTBBRDAyMDAwMDhGNDIwMTI0MkYKLToxMEZBOTAwMEFEMDIwMDA0OEQyMjAwMjBBNTA3MDAwOEExMDIwMDBBODMKLToxMEZBQTAwMDI0MDIwMDE2QTEwMjAwMEI5MzQzMDEyMDhEMjIwMDA4QkUKLToxMEZBQjAwMDhEMjQwMDA0MzA2MzAwRkYwMDQzMTAyMTk3ODMwMDQyMkYKLToxMEZBQzAwMDAwNDQxMDIxOEQyNTAwMjQwMDQzMTAyMzNDMDMwODAwMkUKLToxMEZBRDAwMDhDNjMzMUEwOEY4NDAwMjhBNTAyMDAwQzI0NjMwMEU4MDkKLToxMEZBRTAwMDI0MDJGRkZGQTUwQTAwMEVBNTAzMDAxMEE1MDYwMDEyQzAKLToxMEZBRjAwMEFEMDUwMDE4QUQwMjAwMjQ5NDgyMDExNDI0MDNGRkY3MjEKLToxMEZCMDAwMDMwNDJGRkZGQUQwMjAwMjg4QzgyMDExOEFEMDIwMDJDQUMKLToxMEZCMTAwMDNDMDIxMDAwQUQwMDAwMzBBRjQyMDFCODhEMjIwMDIwNDEKLToxMEZCMjAwMDAwNDMxMDI0MDNFMDAwMDhBRDIyMDAyMDhGODIwMDI4NEIKLToxMEZCMzAwMDMwRTdGRkZGMDA4MDQ4MjE5MDQyMDBEMzMwQTVGRkZGNEYKLToxMEZCNDAwMDMwQzYwMEZGMDAwMjExMDAzMDQyMEYwMDAwRTIzODI1RUQKLToxMEZCNTAwMDI3NDgwMTgwOEY0MjAxQjgwNDQwRkZGRThGODIwMDUwODkKLToxMEZCNjAwMEFEMDIwMDAwOEY0MjAxMjRBRDAyMDAwNDhEMjIwMDIwNkUKLToxMEZCNzAwMEE1MDcwMDA4QTEwMjAwMEEyNDAyMDAxN0ExMDIwMDBCMzkKLToxMEZCODAwMDkzNDMwMTIwOEQyMjAwMDg4RDI0MDAwNDMwNjMwMEZGODAKLToxMEZCOTAwMDAwNDMxMDIxOTc4MzAwNDIwMDQ0MTAyMThGODQwMDI4RTUKLToxMEZCQTAwMDAwNDMxMDIzM0MwMzA4MDA4QzYzMzFBMEE1MDIwMDBDMjUKLToxMEZCQjAwMEE1MDUwMDBFMjQ2MzAwRThBNTAzMDAxMEE1MDYwMDEyQTkKLToxMEZCQzAwMEFEMDAwMDE0OEQyMjAwMjRBRDAyMDAxODhDODIwMDVDNzAKLToxMEZCRDAwMEFEMDIwMDFDOEM4MjAwNThBRDAyMDAyMDI0MDJGRkZGMDEKLToxMEZCRTAwMEFEMDIwMDI0OTQ4MjAwRTYzMDQyRkZGRkFEMDIwMDI4RkYKLToxMEZCRjAwMDk0ODIwMDYwOTQ4MzAwQkUzMDQyN0ZGRjMwNjNGRkZGMzkKLToxMEZDMDAwMDAwMDIxMjAwMDA0MzEwMjFBRDAyMDAyQzNDMDIxMDAwNDMKLToxMEZDMTAwMEFEMDAwMDMwQUY0MjAxQjg5NDgyMDBCRTI0MDNGRkY3NkMKLToxMEZDMjAwMDAwQTIxMDIxQTQ4MjAwQkU4RDIyMDAyMDAwNDMxMDI0RDcKLToxMEZDMzAwMDAzRTAwMDA4QUQyMjAwMjAyNzQzMDE4MDhGNDIwMUI4NzUKLToxMEZDNDAwMDA0NDBGRkZFMjQwMjAwMThBQzY0MDAwMEEwNjIwMDBCMTgKLToxMEZDNTAwMDhGODIwMDI4OTQ0MjAwRTZBNDYyMDAxMDNDMDIxMDAwNEIKLToxMEZDNjAwMEFDNjAwMDMwMDNFMDAwMDhBRjQyMDFCODI3NDMwMTgwRDgKLToxMEZDNzAwMDhGNDIwMUI4MDQ0MEZGRkU4RjgyMDAyQzk0NDIwMDFDOEEKLToxMEZDODAwMDMwNDJGRkZGMDAwMjExQzBBQzYyMDAwMDI0MDIwMDE5RTQKLToxMEZDOTAwMEEwNjIwMDBCM0MwMjEwMDBBQzYwMDAzMDAzRTAwMDA4RTIKLToxMEZDQTAwMEFGNDIwMUI4OEY4NzAwMzQzMEMzMDBGRjhGNDIwMUI4RTQKLToxMEZDQjAwMDA0NDBGRkZFOEY4MjAwNTAzNDYzNjAwMEFDQTIwMDAwNUQKLToxMEZDQzAwMDkzODIwMDRDQTBBMjAwMDU4Q0UyMDAxMEE0QTIwMDA2QzIKLToxMEZDRDAwMEE0QTMwMDA4OEM4MjAwMjAyNDAzRkZGN0EwQTIwMDBBM0UKLToxMEZDRTAwMDI0MDIwMDAyQTBBMjAwMEI4Q0UyMDAwMEFDQTIwMDEwRDMKLToxMEZDRjAwMDhDRTIwMDA0QUNBMjAwMTQ4Q0UyMDAxQ0FDQTIwMDI0MzQKLToxMEZEMDAwMDhDRTIwMDIwQUNBMjAwMjg4Q0UyMDAyQ0FDQTIwMDJDREIKLToxMEZEMTAwMDhDODIwMDI0QUNBMjAwMTgzQzAyMTAwMEFGNDIwMUI4NTMKLToxMEZEMjAwMDhDODIwMDIwMDA0MzEwMjQwM0UwMDAwOEFDODIwMDIwRjUKLToxMEZEMzAwMDkzODIwMDRDMjQwMzAwMDEyN0JERkZFODAwNDMzMDA0RjgKLToxMEZENDAwMDJDNDIwMDIwQUZCMDAwMTBBRkJGMDAxNDI0MTBGRkZFMDMKLToxMEZENTAwMDEwNDAwMDA1Mjc0NTAxODAzQzAyMDgwMDhDNDIzMTkwOEMKLToxMEZENjAwMDBBMDAxNTlDMDA0NjEwMjQzQzAyMDgwMDhDNDIzMTk0ODUKLToxMEZENzAwMDAwNDYxMDI0MTQ0MDAwMDcyNDA2MDA4NDhGODMwMDI4QzYKLToxMEZEODAwMDI0MTBGRkZGOTA2MjAwNjIzMDQyMDAwRjM0NDIwMDQwQjYKLToxMEZEOTAwMEEwNjIwMDYyMEUwMDE1NjgwMDAwMDAwMDAyMDAxMDIxNDEKLToxMEZEQTAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4QkIKLToxMEZEQjAwMDhGODMwMDJDMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0NTUKLToxMEZEQzAwMEFGQjAwMDEwQUZCRjAwMUM5MDYyMDAwRDAwQTA5MDIxRUEKLToxMEZERDAwMDMwRDEwMEZGMzA0MjAwN0ZBMDYyMDAwRDhGODUwMDI4RTcKLToxMEZERTAwMDhFNDMwMDE4MDA4MDgwMjE4Q0EyMDA3QzE0NjIwMDA1RTQKLToxMEZERjAwMDI0MDIwMDBFOTBBMjAwNjMzNDQyMDAyMDBBMDAxNUM1QzAKLToxMEZFMDAwMEEwQTIwMDYzMEUwMDE1OEJBMzgyMDA0QzI0MDNGRkZGMDkKLToxMEZFMTAwMDEwNDMwMDQ3MjQwNEZGRkY1MjIwMDA0NTAwMDAyMDIxMkEKLToxMEZFMjAwMDhFNDMwMDAwM0MwMjAwMTAwMDYyMTAyNDUwNDAwMDA0ODkKLToxMEZFMzAwMDNDMDIwMDA4MDIwMDIwMjEwQTAwMTVENDI0MDIwMDE1MEIKLToxMEZFNDAwMDAwNjIxMDI0NTA0MDAwMDk4RTQ1MDAwMDAyMDAyMDIxNkQKLToxMEZFNTAwMDI0MDIwMDE0MEUwMDE1OEJBMzgyMDA0QzI0MDNGRkZGMjQKLToxMEZFNjAwMDEwNDMwMDMzMjQwNEZGRkY4RTQ1MDAwMDNDMDIwMDAyRDMKLToxMEZFNzAwMDAwQTIxMDI0MTA0MDAwMTYzQzAyMDAwNDhGODYwMDJDQzMKLToxMEZFODAwMDhDQzIwMDE0OENDMzAwMTA4Q0M0MDAxNDAwNDMxMDIzRDcKLToxMEZFOTAwMDAwNDQxMDJCNTA0MDAwMDUwMjAwMjAyMThFNDMwMDJDMEUKLToxMEZFQTAwMDhDQzIwMDEwMTA2MjAwMDMwMjAwMjAyMTBBMDAxNjA1MTcKLToxMEZFQjAwMDI0MDIwMDEyM0MwMjAwMDQwMEEyMTAyNDUwNDAwMDFDNDYKLToxMEZFQzAwMDAwMDAyMDIxMDIwMDIwMjEwQTAwMTYwNTI0MDIwMDEzNTAKLToxMEZFRDAwMDAwQTIxMDI0MTA0MDAwMDY4RjgzMDAyQzhDNjIwMDEwQkEKLToxMEZFRTAwMDUwNDAwMDEzMDAwMDIwMjEwQTAwMTVGRjAyMDAyMDIxQ0QKLToxMEZFRjAwMDhDNjIwMDEwNTA0MDAwMDQ4RTQyMDAyQzAyMDAyMDIxMzEKLToxMEZGMDAwMDBBMDAxNjA1MjQwMjAwMTE1MDQwMDAwOTAwMDAyMDIxQkIKLToxMEZGMTAwMDAyMDAyMDIxMjQwMjAwMTcwRTAwMTU4QkEzODIwMDRDNDIKLToxMEZGMjAwMDI0MDNGRkZGMTA0MzAwMDIyNDA0RkZGRjAwMDAyMDIxRjAKLToxMEZGMzAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNUIKLToxMEZGNDAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDkzODMwMDMwQ0IKLToxMEZGNTAwMDI3QkRGRkUwMjQwMjAwMzRBRkIyMDAxOEFGQjEwMDE0OTcKLToxMEZGNjAwMEFGQkYwMDFDQUZCMDAwMTAwMDgwODgyMTE0NjIwMDBDRUQKLToxMEZGNzAwMDAwQTA5MDIxOEY4NDAwMzQwRTAwMTRCNDhDOTAwMDMwQzcKLToxMEZGODAwMDEyMDIwMDA3MjQwMjAwMDUwMjIwMjAyMTBFMDAxNThCMUEKLToxMEZGOTAwMEEzODIwMDRDMjQwM0ZGRkYxMDQzMDA1RjI0MDRGRkZGRjMKLToxMEZGQTAwMDkyNDIwMDA0MTA0MDAwMDk4RjgyMDAyODAyMjAyMDIxODQKLToxMEZGQjAwMDI0MDIwMDBDMEUwMDE1OEJBMzgyMDA0QzI0MDNGRkZGQ0IKLToxMEZGQzAwMDEwNDMwMDU1MjQwNEZGRkY4RjgyMDAyOEEzODAwMDI0RTMKLToxMEZGRDAwMDhFNDMwMDA0OEM0NDAwODAzQzAyMDBGRjM0NDJGRkZGNEIKLToxMEZGRTAwMDAwNjIxODI0MDA4MzIwMkIxMDgwMDAwOEFGODMwMDNDOUYKLToxMEZGRjAwMDAyMjAyMDIxMjQwMjAwMTkwRTAwMTU4QkEzODIwMDRDNDAKLTowMjAwMDAwNDAwMDFGOQotOjEwMDAwMDAwMjQwM0ZGRkYxMDQzMDA0NDI0MDRGRkZGOTc4MjAwNDJCMwotOjEwMDAxMDAwOEY4NzAwNDQ4Rjg4MDAzQzAwNDcxMDIzMTEwMDAwMzk2RgotOjEwMDAyMDAwQTc4MjAwNDI4Rjg2MDAyODMwNDVGRkZGOEY4NDAwNTA1MgotOjEwMDAzMDAwOTBDMzAwQkMzQzAyMDgwMDhDNDIzMUEwMDAwMzE4ODIyRgotOjEwMDA0MDAwMzA3MDAwMDEwMDgyMjAyMTAwMTAxMDgwMDEwMjEwMjE3OAotOjEwMDA1MDAwMDBBMjI4MkIxMEEwMDAxMDI0ODIwMDg4OEY4NDAwMzQ3NgotOjEwMDA2MDAwMTA4MjAwMEQzQzAzM0YwMThFNDIwMDAwMDA0MzEwMjQyQgotOjEwMDA3MDAwM0MwMzI1MDAxNDQzMDAwNjMwRTUwMEZGOEM4MjAwMDA5RAotOjEwMDA4MDAwQUNDMjAwODg4QzgyMDAxMDBBMDAxNjY1QUNDMjAwOThEMQotOjEwMDA5MDAwMEUwMDE0ODkwMDAwMzAyMThGODUwMDNDOTM4MzAwMjREQQotOjEwMDBBMDAwOEY4NjAwMjgzMEEyMDAwMzAwMDIxMDIzMzA0MjAwMDM5NAotOjEwMDBCMDAwMDA0MzM4MjFBMzg3MDAyNDk0QzQwMEU0MDBBMjI4MjEyRgotOjEwMDBDMDAwOEY4MzAwNDQ4RjgyMDA0ODM0ODQxMDAwQTRDNDAwRTQ2RAotOjEwMDBEMDAwMDA0MzEwMjFBRjgyMDA0ODEyMDAwMDBFQUY4NTAwNDQ5QgotOjEwMDBFMDAwMjRFMjAwMDRBMzgyMDAyNDk0QzIwMEU0MjRBMzAwMDRCOAotOjEwMDBGMDAwQUY4MzAwNDQzNDQyMjAwMEE0QzIwMEU0MEEwMDE2ODUwNQotOjEwMDEwMDAwMDAwMDIwMjE4RjgyMDA0OEFGODAwMDQ0MDA0NzEwMjE2QQotOjEwMDExMDAwQUY4MjAwNDgwMDAwMjAyMThGQkYwMDFDOEZCMjAwMTg2MgotOjEwMDEyMDAwOEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDg5MAotOjEwMDEzMDAwMjdCRDAwMjA4Rjg2MDAyODI3QkRGRkU4QUZCRjAwMTQzMQotOjEwMDE0MDAwQUZCMDAwMTA5MEMyMDA2MzMwNDIwMDIwMTA0MDAwMDhBMQotOjEwMDE1MDAwMzBBNTAwRkY4Q0MyMDA3QzI0MDNGRkRGMjQ0MjAwMDE5NQotOjEwMDE2MDAwQUNDMjAwN0M5MEMyMDA2MzAwNDMxMDI0QTBDMjAwNjNCNAotOjEwMDE3MDAwMTBBMDAwMjM4RjgzMDAyODI3NTAwMTgwMDIwMDI4MjEyRgotOjEwMDE4MDAwMEUwMDE1NjgyNDA2MDA4MjhGODIwMDI4OTA0MjAwNjNDQQotOjEwMDE5MDAwMzA0MjAwNDA1MDQwMDAxOUEzODAwMDRDOEY4MzAwMzQ0RgotOjEwMDFBMDAwOEY0MjAxQjgwNDQwRkZGRThGODIwMDUwQUUwMjAwMDA3MwotOjEwMDFCMDAwMjQwMjYwODJBNjAyMDAwODI0MDIwMDAyQTIwMjAwMEJCMAotOjEwMDFDMDAwOEM2MjAwMDhBRTAyMDAxMDhDNjIwMDBDQUUwMjAwMTRCQgotOjEwMDFEMDAwOEM2MjAwMTRBRTAyMDAxODhDNjIwMDE4QUUwMjAwMjQ3QgotOjEwMDFFMDAwOEM2MjAwMjRBRTAyMDAyODhDNjIwMDI4QUUwMjAwMkMzMwotOjEwMDFGMDAwM0MwMjEwMDBBRjQyMDFCOEEzODAwMDRDOEY4MzAwMjg1RQotOjEwMDIwMDAwOEZCRjAwMTQ4RkIwMDAxMDkwNjIwMDYzMjdCRDAwMThFQwotOjEwMDIxMDAwMzA0MjAwN0ZBMDYyMDA2Mzk3ODIwMDQyOEY4NjAwNDRENAotOjEwMDIyMDAwOEY4NTAwMjg5MzgzMDAzMDAwNDYxMDIzQTc4MjAwNDI2OAotOjEwMDIzMDAwQTRBMDAwRTQ5MEE0MDA2MzhGODIwMDQ4QUY4MzAwNDQzMAotOjEwMDI0MDAwMjQwM0ZGQkYwMDQ2MTAyMTAwODMyMDI0QUY4MjAwNDgxMgotOjEwMDI1MDAwQTBBNDAwNjM4RjgyMDAyOEEwNDAwMEJEOEY4MjAwMjhFOAotOjEwMDI2MDAwMDNFMDAwMDhBNDQwMDBCRThGOEEwMDI4MjdCREZGRTBGRAotOjEwMDI3MDAwQUZCMTAwMTRBRkIwMDAxMDhGODgwMDQ0QUZCRjAwMThCQQotOjEwMDI4MDAwOTM4OTAwMjQ5NTQyMDBFNDMwRDEwMEZGMDEwOTE4MkIyNgotOjEwMDI5MDAwMDA4MDgwMjEzMEFDMDBGRjMwNDdGRkZGMDAwMDU4MjE3NAotOjEwMDJBMDAwMTQ2MDAwMDMzMTA2MDBGRjAxMjAzMDIxMDEwOTU4MjNBQQotOjEwMDJCMDAwOTc4MzAwNDIwMDY4MTAyQjE0NDAwMDMyMDAwMDAwMDBCOQotOjEwMDJDMDAwMTQ2ODAwMDcyNDAyMDAwMThFMDIwMDIwMjQwM0ZGRkJCMwotOjEwMDJEMDAwMzRFNzgwMDAwMDQzMTAyNEFFMDIwMDIwMjQwMjAwMDExNQotOjEwMDJFMDAwMzRFNzA4ODAxNTgyMDAwNTMxNjVGRkZGMEUwMDE0RDk0MAotOjEwMDJGMDAwMDIwMDIwMjEwQTAwMTcxQTAyMDAyMDIxMEUwMDE1MEExMAotOjEwMDMwMDAwMDIwMDIwMjEwRTAwMTU0RDhGODQwMDUwOEY4NDAwMjg5QwotOjEwMDMxMDAwOTQ4MjAwNjAyNDQyMDAwMUE0ODIwMDYwOTQ4MjAwNjAwNAotOjEwMDMyMDAwM0MwMzA4MDA4QzYzMzE4ODMwNDI3RkZGNTQ0MzAwMEY0OAotOjEwMDMzMDAwMDIwMDIwMjE5NDgyMDA2MDI0MDM4MDAwMDA0MzEwMjRFNgotOjEwMDM0MDAwQTQ4MjAwNjA5MDgyMDA2MDkwODMwMDYwMzA0MjAwRkZEMQotOjEwMDM1MDAwMDAwMjExQzIwMDAyMTAyNzAwMDIxMUMwMzA2MzAwN0ZBQQotOjEwMDM2MDAwMDA2MjE4MjVBMDgzMDA2MDAyMDAyMDIxMDIyMDI4MjFCRAotOjEwMDM3MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE2OENDOAotOjEwMDM4MDAwMjdCRDAwMjA5MTQyMDA2MzI0MDNGRjgwMDA0MzEwMjUxNQotOjEwMDM5MDAwQTE0MjAwNjM5NzgyMDA0MjMwNDhGRkZGMTEwMDAwMjAxNQotOjEwMDNBMDAwOTM4MzAwMjQ4Rjg0MDAyODAwNEIxMDIzMzA0NjAwRkZFNQotOjEwMDNCMDAwOTQ4MzAwRTQyNDAyRUZGRjAxNjgyODJCMDA2MjE4MjRENAotOjEwMDNDMDAwQTQ4MzAwRTQxNEEwMDAwMzhFMDIwMDIwMDEwMDU4MjE0MQotOjEwMDNEMDAwMDAwMDMwMjEyNDAzRkZGQjM0RTc4MDAwMDA0MzEwMjQ5OQotOjEwMDNFMDAwQUUwMjAwMjAyNDAyMDAwMTE1ODIwMDA1MzE2NUZGRkZFNgotOjEwMDNGMDAwMEUwMDE0RDkwMjAwMjAyMTBBMDAxNzQyOTc4MzAwNDIwMAotOjEwMDQwMDAwMEUwMDE1MEEwMjAwMjAyMTk3ODMwMDQyOEY4MjAwNDRDQgotOjEwMDQxMDAwQTc4MDAwNDIwMDQzMTAyM0FGODIwMDQ0OTM4MzAwMjQ0RQotOjEwMDQyMDAwOEY4MjAwMjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA4QQotOjEwMDQzMDAwMjdCRDAwMjAwM0UwMDAwOEEwNDMwMEJEOEY4MjAwMjhGNAotOjEwMDQ0MDAwOTA0MzAwODg5MDQ1MDBCRDI0NDkwMDg4MzA2MzAwM0ZGOAotOjEwMDQ1MDAwMjQ2M0ZGRTAyNDAyMDAwMTAwNjIzODA0MkM2MzAwMjBDMgotOjEwMDQ2MDAwMzBFODAwMTlBMzg1MDAyNDEwNjAwMDEwQUY4OTAwMzQyMwotOjEwMDQ3MDAwM0MwMjgwMDAzNDQyMDAwMjI0MDUwMDAxMjQwNjAwMDFGMQotOjEwMDQ4MDAwMTUwMDAwMDgwMEUyMTgyNDAwMDAyODIxMTQ2MDAwMDU2RgotOjEwMDQ5MDAwMzBFMjAwMjAxMDQwMDAwNTI0MDUwMDAxOTEyNjAwMDFGMwotOjEwMDRBMDAwMzBDNjAwMDEwQTAwMTZEOTAwMDAwMDAwMDNFMDAwMDg3MQotOjEwMDRCMDAwMDAwMDAwMDAyN0JERkZEOEFGQjAwMDEwOEY5MDAwMzRCRgotOjEwMDRDMDAwQUZCNDAwMjBBRkIxMDAxNEFGQkYwMDI0QUZCMzAwMUMyNQotOjEwMDREMDAwQUZCMjAwMTg4RTA1MDAxMDNDMDIwODAwOEM0MjMxQjAwQgotOjEwMDRFMDAwOEY4NjAwMzgzMEEzM0ZGRjAwNjIxODJCOENEMzAwMTQ5NgotOjEwMDRGMDAwMDA4MDg4MjE4Q0QyMDAyMDEwNjAwMDc4MDAwMEEwMjFBQwotOjEwMDUwMDAwOTBDMzAwMEQyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkZGRQotOjEwMDUxMDAwNTA0MDAwNzMwMjIwMjAyMTAwMDUxMzgyMzA0MjAwMDM2NgotOjEwMDUyMDAwNTQ0MDAwNkYwMjIwMjAyMTk0QzMwMDFDOEY4MjAwMjhCOQotOjEwMDUzMDAwOEUwNTAwMjhBNDQzMDExNDhDQzIwMDEwMDI2MjE4MjMwNwotOjEwMDU0MDAwMTQ2NTAwMDcyNDAyMDAxRjhGODIwMDNDMDA2MjEwMjEwNgotOjEwMDU1MDAwMDI2MjEwMkIxMDQwMDAwODhGODMwMDJDMjQwMjAwMTgyOAotOjEwMDU2MDAwMEUwMDE1OEJBMzgyMDA0QzI0MDNGRkZGMTA0MzAwNkY4NQotOjEwMDU3MDAwMjQwNEZGRkY4RjgzMDAyQzhGODQwMDNDOEM2MjAwMTBDQQotOjEwMDU4MDAwMDI0NDkwMjEwMDQ0MTAyM0FDNjIwMDEwOEY4MjAwMjhBNgotOjEwMDU5MDAwQUM3MjAwMjA4QzQyMDA2ODAwNTIxMDJCMTA0MDAwMDkwMQotOjEwMDVBMDAwOEY4MzAwMzgwMjIwMjAyMTI0MDIwMDFEMEUwMDE1OEJBRAotOjEwMDVCMDAwQTM4MjAwNEMyNDAzRkZGRjEwNDMwMDVDMjQwNEZGRkZEMAotOjEwMDVDMDAwOEY4MzAwMzg4RTAyMDAyNDhDNjMwMDI0MTA0MzAwMDdDMAotOjEwMDVEMDAwMDIyMDIwMjEyNDAyMDAxQzBFMDAxNThCQTM4MjAwNEM1NwotOjEwMDVFMDAwMjQwM0ZGRkYxMDQzMDA1MTI0MDRGRkZGOEY4NDAwMkNERAotOjEwMDVGMDAwOEM4MjAwMjQyNDQyMDAwMUFDODIwMDI0MTI1MzAwMDRBNwotOjEwMDYwMDAwOEY4MjAwMjg4QzQyMDA2ODU2NDIwMDBFOEUwMjAwMDA0NQotOjEwMDYxMDAwOEUwMjAwMDAzQzAzMDA4MDAwNDMxMDI0MTQ0MDAwMERCMwotOjEwMDYyMDAwMjQwMjAwMUEwMjIwMjAyMTBFMDAxNThCQTM4MjAwNEMwOAotOjEwMDYzMDAwMjQwM0ZGRkYxMDQzMDAzRDI0MDRGRkZGMEEwMDE3RDZFOAotOjEwMDY0MDAwOEUwMjAwMTQzQzAzMDA4MDAwNDMxMDI0NTA0MDAwMDMzRAotOjEwMDY1MDAwOEUwMjAwMTRBQzgwMDAyMDhFMDIwMDE0MjQxMkZGRkZEMgotOjEwMDY2MDAwMTA1MjAwMDYyNDAyMDAxQjAyMjAyMDIxMEUwMDE1OEJEMAotOjEwMDY3MDAwQTM4MjAwNEMxMDUyMDAyRDI0MDRGRkZGOEUwMzAwMDBDMwotOjEwMDY4MDAwM0MwMjAwMDEwMDYyMTAyNDEwNDAwMDFGM0MwMjAwODA2OAotOjEwMDY5MDAwMDA2MjEwMjQxNDQwMDAwODAyMjAyMDIxMjQwMjAwMUFDNQotOjEwMDZBMDAwMEUwMDE1OEJBMzgyMDA0QzI0MDNGRkZGMTA0MzAwMUY5NAotOjEwMDZCMDAwMjQwNEZGRkYwMjIwMjAyMTAyMDAyODIxMEUwMDE1QUI5OAotOjEwMDZDMDAwMjQwNjAwMDEyNDAzRkZGRjI0MDRGRkZGMTQ0MzAwMEU0RgotOjEwMDZEMDAwMjQxNDAwMDEwQTAwMTgwQjhGQkYwMDI0MDIyMDIwMjFERgotOjEwMDZFMDAwMjQwMjAwMEQ4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUNBNAotOjEwMDZGMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjhGMgotOjEwMDcwMDAwMEEwMDE1OEJBMzgyMDA0QzhGODMwMDJDMDIyMDIwMjEyRAotOjEwMDcxMDAwMDI4MDMwMjE5NDYyMDAzNjI0MDUwMDAxMjQ0MjAwMDE0OQotOjEwMDcyMDAwMEUwMDE2RDlBNDYyMDAzNjAwMDAyMDIxOEZCRjAwMjRERAotOjEwMDczMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0QgotOjEwMDc0MDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjhCMgotOjEwMDc1MDAwOEY4MzAwMjgyN0JERkZEOEFGQjQwMDIwQUZCMzAwMUNBMwotOjEwMDc2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjQ5QgotOjEwMDc3MDAwOTA2MjAwNjM4RjkxMDAzNDI0MTJGRkZGMzQ0MjAwNDBFNgotOjEwMDc4MDAwOTIyNTAwMDBBMDYyMDA2MzhFMjIwMDEwMDA4MDk4MjE1NAotOjEwMDc5MDAwMzBCMDAwM0YxMDUyMDAwNjAzNjBBMDIxMjQwMjAwMEQ3QgotOjEwMDdBMDAwMEUwMDE1OEJBMzgyMDA0QzEwNTIwMDUyMjQwNEZGRkY1MAotOjEwMDdCMDAwOEY4MzAwMjg4RTIyMDAxODhDNjMwMDdDMTA0MzAwMDc3MgotOjEwMDdDMDAwMDI2MDIwMjEyNDAyMDAwRTBFMDAxNThCQTM4MjAwNEMzMwotOjEwMDdEMDAwMjQwM0ZGRkYxMDQzMDA0NzI0MDRGRkZGMjQwNDAwMjBFQwotOjEwMDdFMDAwMTIwNDAwMDQ4RjgzMDAyODkwNjIwMDYzMzQ0MjAwMjBDQQotOjEwMDdGMDAwQTA2MjAwNjM4Rjg1MDAzQzEwQTAwMDFFMDAwMDAwMDA3NgotOjEwMDgwMDAwNTYwNDAwMDQ4RjgyMDAyODAyNjAyMDIxMEEwMDE4NTUzNwotOjEwMDgxMDAwMjQwMjAwMEE5NjgzMDAwQTI0MDRGRkZEOTQ0MjAwNjAyQgotOjEwMDgyMDAwMzA0MkZGRkYxMDQzMDAzNDhGQkYwMDI0M0MwMjA4MDAxOQotOjEwMDgzMDAwOEM0MjMxOEMwMDQ1MTAyQjE0NDAwMDA2MDI2MDIwMjFCMAotOjEwMDg0MDAwMDAwMDI4MjEwRTAwMTZEOTI0MDYwMDAxMEEwMDE4N0M5OQotOjEwMDg1MDAwMDAwMDIwMjEyNDAyMDAyRDBFMDAxNThCQTM4MjAwNENFNQotOjEwMDg2MDAwMjQwM0ZGRkYxMDQzMDAyMzI0MDRGRkZGMEEwMDE4N0MyOQotOjEwMDg3MDAwMDAwMDIwMjExNjA0MDAwNThGODQwMDI4OEUyMzAwMTQxOAotOjEwMDg4MDAwMjQwMkZGRkY1MDYyMDAxODAyNjAyMDIxOTQ4MjAwNjA2MQotOjEwMDg5MDAwMjQ0MjAwMDFBNDgyMDA2MDk0ODIwMDYwM0MwMzA4MDBBRQotOjEwMDhBMDAwOEM2MzMxODgzMDQyN0ZGRjU0NDMwMDBGMDI2MDIwMjE2NwotOjEwMDhCMDAwOTQ4MjAwNjAyNDAzODAwMDAwNDMxMDI0QTQ4MjAwNjAxRQotOjEwMDhDMDAwOTA4MjAwNjA5MDgzMDA2MDMwNDIwMEZGMDAwMjExQzJGRAotOjEwMDhEMDAwMDAwMjEwMjcwMDAyMTFDMDMwNjMwMDdGMDA2MjE4MjU1QgotOjEwMDhFMDAwQTA4MzAwNjAwMjYwMjAyMTBFMDAxNjhDMjQwNTAwMDEwOAotOjEwMDhGMDAwMDAwMDIwMjE4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4NAotOjEwMDkwMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEzQQotOjEwMDkxMDAwMDNFMDAwMDgyN0JEMDAyODhGODMwMDI4MjdCREZGRThEQgotOjEwMDkyMDAwQUZCMDAwMTBBRkJGMDAxNDkwNjIwMDYzOEY4NzAwMzQzNwotOjEwMDkzMDAwMDA4MDgwMjEzNDQyMDA0MDhDRTYwMDEwQTA2MjAwNjNGOQotOjEwMDk0MDAwM0MwMzA4MDA4QzYzMzFCMDMwQzIzRkZGMDA0MzEwMkJFMgotOjEwMDk1MDAwMTA0MDAwNEU4Rjg1MDAzODI0MDJGRjgwOTBBMzAwMERDOAotOjEwMDk2MDAwMDA0MzEwMjQzMDQyMDBGRjUwNDAwMDQ5MDIwMDIwMjE4MwotOjEwMDk3MDAwMDAwNjEzODIzMDQ4MDAwMzI0MDIwMDAyNTUwMjAwNDQ5RQotOjEwMDk4MDAwMDIwMDIwMjE5NEEyMDAxQzhGODUwMDI4MjQwMzAwMjM0QwotOjEwMDk5MDAwQTRBMjAxMTQ4Q0U2MDAwMDAwMDYxNjAyMzA0MjAwM0ZCQgotOjEwMDlBMDAwMTA0MzAwMTAzQzAzMDA4MzhDRTMwMDE4OENBMjAwN0NGMQotOjEwMDlCMDAwMTA2MjAwMDYyNDAyMDAwRTBFMDAxNThCQTM4MjAwNEM2QwotOjEwMDlDMDAwMjQwM0ZGRkYxMDQzMDAzODI0MDRGRkZGOEY4MzAwMjgxNwotOjEwMDlEMDAwOTA2MjAwNjMzNDQyMDAyMEEwNjIwMDYzMEEwMDE4QzFFNAotOjEwMDlFMDAwOEY4MzAwMkMwMEMzMTAyNDE0NDMwMDA3OEY4MzAwMkMzNgotOjEwMDlGMDAwOTBBMjAwNjIzMDQyMDAwRjM0NDIwMDIwQTBBMjAwNjJBOAotOjEwMEEwMDAwQTM4ODAwNDA4RjgzMDAyQzkwNjIwMDBEMzA0MjAwN0Y0RAotOjEwMEExMDAwQTA2MjAwMEQ4RjgzMDAzQzEwNjAwMDE4MDIwMDIwMjFBRQotOjEwMEEyMDAwOEY4NDAwMzg4QzgyMDAxMDAwNDMxMDJCMTA0MDAwMDk4NgotOjEwMEEzMDAwMjQwMjAwMTgwMjAwMjAyMTBFMDAxNThCQTM4MjAwNEMxNgotOjEwMEE0MDAwMjQwM0ZGRkYxMDQzMDAxODI0MDRGRkZGMEEwMDE4RTlFNQotOjEwMEE1MDAwMDAwMDIwMjE4QzgyMDAxMDI0MDUwMDAxMDIwMDIwMjFDQQotOjEwMEE2MDAwMDA0MzEwMjM4RjgzMDAyQzI0MDYwMDAxMEUwMDE2RDlBQQotOjEwMEE3MDAwQUM2MjAwMTAwQTAwMThFOTAwMDAyMDIxMEUwMDE2OEM1QwotOjEwMEE4MDAwMjQwNTAwMDEwQTAwMThFOTAwMDAyMDIxMDIwMDIwMjFBRAotOjEwMEE5MDAwMjQwMjAwMEQ4RkJGMDAxNDhGQjAwMDEwMjdCRDAwMTg3NgotOjEwMEFBMDAwMEEwMDE1OEJBMzgyMDA0QzhGQkYwMDE0OEZCMDAwMTA3QQotOjEwMEFCMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDE4MjdCREZGRDhFMwotOjEwMEFDMDAwQUZCMDAwMTA4RjkwMDAzNEFGQjMwMDFDQUZCRjAwMjA1OAotOjEwMEFEMDAwQUZCMjAwMThBRkIxMDAxNDhFMTIwMDEwM0MwMzA4MDAzMgotOjEwMEFFMDAwOEM2MzMxQjAzMjQyM0ZGRjAwNDMxMDJCMTA0MDAwN0MzQQotOjEwMEFGMDAwMDA4MDk4MjE4Rjg1MDAzODI0MDJGRjgwOTBBMzAwMEQ4QwotOjEwMEIwMDAwMDA0MzEwMjQzMDQyMDBGRjUwNDAwMDc2MDI2MDIwMjE1NAotOjEwMEIxMDAwMDAxMjEzODIzMDQyMDAwMzI0MDMwMDAxNTQ0MzAwNzE4OQotOjEwMEIyMDAwMDI2MDIwMjE5MEEyMDAwRDMwNDIwMDA4NTQ0MDAwMDNEMgotOjEwMEIzMDAwOEY4MjAwM0MwQTAwMTkxOTI0MDIwMDI0NTA0MDAwMDM0RgotOjEwMEI0MDAwOEUwMzAwMEMwQTAwMTkxOTI0MDIwMDI3OENBMjAwMjAzMQotOjEwMEI1MDAwMTQ2MjAwMDUyNDAyMDAyMDhFMDMwMDA4OENBMjAwMjRFOQotOjEwMEI2MDAwMTA2MjAwMDgyNDAyMDAyMDBFMDAxNThCQTM4MjAwNENBNgotOjEwMEI3MDAwMjQwM0ZGRkYxMDQzMDA2QTI0MDRGRkZGMEEwMDE5NDQwNgotOjEwMEI4MDAwOEY4NDAwMkM4RTAyMDAxNDI0MTFGRkZGMTQ1MTAwMDNFNwotOjEwMEI5MDAwOEY4NzAwMjgwQTAwMTkzRjI0MDIwMDI1OEUwMzAwMThDMQotOjEwMEJBMDAwOENFMjAwN0MxNDYyMDAxNjI0MDIwMDBFOEUwMzAwMjRFNgotOjEwMEJCMDAwOENBMjAwMjgxNDYyMDAxMjI0MDIwMDIxOEUwNjAwMjg1NAotOjEwMEJDMDAwOENBMjAwMkMxNEMyMDAwRTI0MDIwMDFGOEUwMzAwMkNFNQotOjEwMEJEMDAwMTA2MDAwMEIyNDAyMDAyMzhDRTIwMDY4MDA0MzEwMkJGRAotOjEwMEJFMDAwMTQ0MDAwMDcyNDAyMDAyNjhDQTIwMDE0MDA2NjE4MjE3RAotOjEwMEJGMDAwMDA0MzEwMkI1MDQwMDAwNzhGODQwMDJDMjQwMjAwMjI1OQotOjEwMEMwMDAwMEUwMDE1OEJBMzgyMDA0QzEwNTEwMDQ1MjQwNEZGRkZGOQotOjEwMEMxMDAwOEY4NDAwMkMyNDAzRkZGNzkwODIwMDBEMDA0MzEwMjRFMgotOjEwMEMyMDAwQTA4MjAwMEQ4Rjg2MDAyODNDMDMwODAwOEM2MzMxQUM0NQotOjEwMEMzMDAwOEY4MjAwNTA5NEM0MDBFMDhGODUwMDJDMDA0MzEwMjE2NwotOjEwMEM0MDAwMzA4NDdGRkYwMDA0MjA0MDAwNDQxMDIxMzA0MzAwN0ZBNwotOjEwMEM1MDAwMDM0MzIwMjEzQzAzMDAwRTAwODMyMDIxMjQwM0ZGODA1NgotOjEwMEM2MDAwMDA0MzEwMjRBRjQyMDAyQ0E0OTIwMDAwOENBMjAwMjg2NAotOjEwMEM3MDAwMjQ0MjAwMDFBQ0EyMDAyODhDQTIwMDJDOEUwMzAwMkM4MAotOjEwMEM4MDAwMDA0MzEwMjFBQ0EyMDAyQzhFMDIwMDJDQUNBMjAwMzAzQwotOjEwMEM5MDAwOEUwMjAwMTRBQ0EyMDAzNDk0QTIwMDNBMjQ0MjAwMDE1NwotOjEwMENBMDAwQTRBMjAwM0E5NEM2MDBFMDNDMDIwODAwOEM0MjMxQjA5NQotOjEwMENCMDAwMjRDNDAwMDEzMDgzN0ZGRjE0NjIwMDEzMDA4MDMwMjFDMAotOjEwMENDMDAwMjQwMjgwMDAwMDgyMzAyNDMwQzJGRkZGMDAwMjEzQzJFMQotOjEwMENEMDAwMzA0MjAwRkYwMDAyMTAyNzBBMDAxOTgxMDAwMjMzQzBEMQotOjEwMENFMDAwMDI2MDIwMjEyNDAyMDAwRDhGQkYwMDIwOEZCMzAwMUM2MgotOjEwMENGMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjhFQwotOjEwMEQwMDAwMEEwMDE1OEJBMzgyMDA0QzhGODIwMDI4MDI2MDIwMjFFQwotOjEwMEQxMDAwMjQwNTAwMDEwRTAwMTY4Q0E0NDYwMEUwMDAwMDIwMjFFRQotOjEwMEQyMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0QQotOjEwMEQzMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjhCQwotOjEwMEQ0MDAwMjdCREZGRTBBRkIxMDAxNDhGOTEwMDM0QUZCMDAwMTBBOQotOjEwMEQ1MDAwQUZCRjAwMTg4RTI2MDAxMDNDMDMwODAwOEM2MzMxQjAzMgotOjEwMEQ2MDAwMzBDMjNGRkYwMDQzMTAyQjEwNDAwMDVFMDA4MDgwMjEwNgotOjEwMEQ3MDAwOEY4NTAwMzgyNDAyRkY4MDkwQTMwMDBEMDA0MzEwMjRDQgotOjEwMEQ4MDAwMzA0MjAwRkY1MDQwMDA1ODAyMDAyMDIxOEY4MjAwM0M3QQotOjEwMEQ5MDAwMTA0MDAwMDgwMDA2MTM4MjhGODIwMDI4OTc2MzAwMEEyMwotOjEwMERBMDAwMjQwNEZGRkQ5NDQyMDA2MDMwNDJGRkZGMTA0MzAwNTVEMQotOjEwMERCMDAwMDAwNjEzODIzMDQyMDAwMzE0NDAwMDBFMDAwMDAwMDBDMQotOjEwMERDMDAwOTIyMjAwMDIxMDQwMDAwNThFMjMwMDI0NTA2MDAwMTU3RQotOjEwMEREMDAwOTIyMzAwMDMwQTAwMTlCQTAyMDAyMDIxOENBMjAwMjRFOQotOjEwMERFMDAwNTA2MjAwMTA5MjIzMDAwMzAyMDAyMDIxMEEwMDE5QzI2MQotOjEwMERGMDAwMjQwMjAwMEY5MEEyMDAwRDMwNDIwMDA4NTQ0MDAwMDk2OAotOjEwMEUwMDAwOTIyMzAwMDMwMjAwMjAyMTI0MDIwMDEwMEUwMDE1OEIwMwotOjEwMEUxMDAwQTM4MjAwNEMyNDAzRkZGRjEwNDMwMDNBMjQwNEZGRkY4OQotOjEwMEUyMDAwOTIyMzAwMDMyNDAyMDAwMjU0NjIwMDBDOTIyMjAwMDM2OQotOjEwMEUzMDAwOEY4MjAwM0M1NDQwMDAwOTkyMjIwMDAzMDIwMDIwMjFDRQotOjEwMEU0MDAwMjQwMjAwMkMwRTAwMTU4QkEzODIwMDRDMjQwM0ZGRkYwQwotOjEwMEU1MDAwMTA0MzAwMkMyNDA0RkZGRjkyMjIwMDAzMDIyMDI4MjFDQgotOjEwMEU2MDAwMDIwMDIwMjEzODQ2MDAxMDJDQzYwMDAxMkM0MjAwMDE0RgotOjEwMEU3MDAwMEUwMDE1QUIwMDQ2MzAyNTI0MTFGRkZGMTA1MTAwMjE1NAotOjEwMEU4MDAwMjQwNEZGRkY4RjgzMDAzQzEwNjAwMDEyMDIwMDIwMjEyOQotOjEwMEU5MDAwM0MwMjA4MDA4QzQyMzE4QzAwNDMxMDJCMTQ0MDAwMDZBOQotOjEwMEVBMDAwMDAwMDAwMDAwMDAwMjgyMTBFMDAxNkQ5MjQwNjAwMDFEMQotOjEwMEVCMDAwMEEwMDFBMDAwMDAwMjAyMTI0MDIwMDJEMEUwMDE1OEJDQwotOjEwMEVDMDAwQTM4MjAwNEMxMDUxMDAwRjI0MDRGRkZGMEEwMDFBMDBGNwotOjEwMEVEMDAwMDAwMDIwMjEwRTAwMTY4QzI0MDUwMDAxMEEwMDFBMDBEMwotOjEwMEVFMDAwMDAwMDIwMjEwMjAwMjAyMTI0MDIwMDBEOEZCRjAwMThFNQotOjEwMEVGMDAwOEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwMEEwMDE1OEJBMQotOjEwMEYwMDAwQTM4MjAwNEM4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA2NwotOjEwMEYxMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOTM4MzAwNDBEQgotOjEwMEYyMDAwMjdCREZGRTAyNDAyMDAwMkFGQjEwMDE0QUZCMDAwMTBGMwotOjEwMEYzMDAwMDA4MDg4MjFBRkJGMDAxODAwMDA4MDIxMTA2MjAwOEM2MwotOjEwMEY0MDAwMjQwNEZGRkQ5Nzg1MDA0MjhGODMwMDQ0MzBBMkZGRkZGOQotOjEwMEY1MDAwMDA0MzEwMkI1NDQwMDA3RDhGODQwMDQ4MEUwMDE0NEMzOQotOjEwMEY2MDAwMDAwMDAwMDAzQzAyMDgwMDI0NDI3NTk0MDIyMDIwMjE2OQotOjEwMEY3MDAwMDA0MDI4MjEwRTAwMTYxMkFGODIwMDM0MjQwOUZGRkYyMgotOjEwMEY4MDAwMTA0OTAwN0IyNDA0RkZGRjNDMDgwODAwOEQwODc1QTQ2RAotOjEwMEY5MDAwM0MwMjA4MDA4QzQyMzFCMDNDMDMwODAwOTA2Mzc1OTQxOQotOjEwMEZBMDAwMzEwNDNGRkYwMDgyMTAyQjEwNDAwMDFCMzA2NzAwM0ZEMAotOjEwMEZCMDAwM0MwMjA4MDA4QzQyMzFBODhGODMwMDUwMDAwNDIxODAzRAotOjEwMEZDMDAwMDA2MjE4MjEwMDY0MTgyMTMwNjIwMDdGMDM0MjI4MjE0QQotOjEwMEZEMDAwM0MwMjAwMEMwMEEyMjgyMTNDMDIwMDgwMzQ0MjAwMDFBNwotOjEwMEZFMDAwMzA2NjAwNzgwMEMyMzAyNTI0MDJGRjgwMDA2MjEwMjRBMQotOjEwMEZGMDAwQUY0MjAwMjgzMDY0MDAwN0FGNDIwODA0OEY4MjAwMjgwNwotOjEwMTAwMDAwMDM0NDIwMjEyNDg0MDk0MEFGNDYwODE0QUY4NTAwMkNGNgotOjEwMTAxMDAwQUY4NDAwMzhBQzQzMDExODkzODMwMDQwMjQwMjAwMDNERQotOjEwMTAyMDAwMTQ2MjAwM0IyNDAyMDAwMTI0MDIwMDI2MTBFMjAwM0Q2RAotOjEwMTAzMDAwMjhFMjAwMjcxMDQwMDAxMzI0MDIwMDMyMjQwMjAwMjI3QwotOjEwMTA0MDAwMTBFMjAwMzgyOEUyMDAyMzEwNDAwMDA4MjQwMjAwMjRBNwotOjEwMTA1MDAwMjQwMjAwMjAxMEUyMDAyNDI0MDIwMDIxMTBFMjAwMUVERAotOjEwMTA2MDAwMDIyMDIwMjEwQTAwMUE3RjI0MDIwMDBCMTBFMjAwMkQyQQotOjEwMTA3MDAwMjQwMjAwMjUxMEUyMDAxMDAyMjAyMDIxMEEwMDFBN0YxRAotOjEwMTA4MDAwMjQwMjAwMEIxMEUyMDAxQTI4RTIwMDMzMTA0MDAwMDY5MAotOjEwMTA5MDAwMjQwMjAwM0YyNDAyMDAzMTEwRTIwMDBCMDIyMDIwMjEzNAotOjEwMTBBMDAwMEEwMDFBN0YyNDAyMDAwQjEwRTIwMDExMDIyMDIwMjEwNgotOjEwMTBCMDAwMEEwMDFBN0YyNDAyMDAwQjBFMDAxNzZDMDIyMDIwMjE2OAotOjEwMTBDMDAwMEEwMDFBOUEwMDQwODAyMTBFMDAxOEVFMDIyMDIwMjEwQQotOjEwMTBEMDAwMEEwMDFBOUEwMDQwODAyMTBFMDAxOThGMDIyMDIwMjE1OAotOjEwMTBFMDAwMEEwMDFBOUEwMDQwODAyMTE1MDkwMDBFMDAwMDAwMDAzNQotOjEwMTBGMDAwMEUwMDE4MTMwMjIwMjAyMTBBMDAxQTlBMDA0MDgwMjFCNQotOjEwMTEwMDAwMEUwMDE1OEJBMzgyMDA0QzBBMDAxQTlBMDA0MDgwMjEyMQotOjEwMTExMDAwMTQ2MjAwMTcwMjAwMjAyMTI0MDIwMDIzMTRFMjAwMDVCQgotOjEwMTEyMDAwMjQwMjAwMEIwRTAwMTg4NTAyMjAyMDIxMEEwMDFBOUFDMgotOjEwMTEzMDAwMDA0MDgwMjEwMjIwMjAyMUEzODIwMDRDMEUwMDE1OEI0QwotOjEwMTE0MDAwMjQxMEZGRkYwQTAwMUE5QjAyMDAyMDIxMzBBNTAwRkY5NwotOjEwMTE1MDAwMEUwMDE0ODkyNDA2MDAwMTk3ODMwMDQyOEY4MjAwNDQwOAotOjEwMTE2MDAwQTc4MDAwNDIwMDQzMTAyM0FGODIwMDQ0MDIwMDIwMjFFOAotOjEwMTE3MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjFCNQotOjEwMTE4MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkUwQUZCMTAwMTQzOQotOjEwMTE5MDAwQUZCRjAwMThBRkIwMDAxMDhGNDYwMTI4M0MwMzA4MDAxNQotOjEwMTFBMDAwOEM2MzMxQTAyNDAyRkY4MEFGODYwMDUwMDBDMzE4MjE1OQotOjEwMTFCMDAwMzA2NTAwN0YwMzQ1MjgyMTAwNjIxODI0M0MwMjAwMEFBNAotOjEwMTFDMDAwQUY0MzAwMjQwMEEyMjgyMTkwQTIwMDYyMDA4MDg4MjE2MQotOjEwMTFEMDAwQUY4NTAwMjgzMDQyMDBGRjAwMDIxMTAyQTM4MjAwNDBDOAotOjEwMTFFMDAwOTBBMjAwQkMzMDQyMDAwMjE0NDAwMDAyMjQwMzAwMzRFQwotOjEwMTFGMDAwMjQwMzAwMzA4RjgyMDAyOEEzODMwMDMwOTM4MzAwNDBCMwotOjEwMTIwMDAwOEM0MjAwQzBBMzgwMDA0Q0FGODIwMDQ0MjQwMjAwMDQ0MgotOjEwMTIxMDAwMTA2MjAwMzA4Rjg0MDA0NDhFMjQwMDA0NTA4MDAwMkQyMgotOjEwMTIyMDAwOEY4NDAwNDQ4RTIyMDAxMDMwODNGRkZGQTc4NDAwNDI4OQotOjEwMTIzMDAwMTA2MDAwMUZBRjgyMDA0ODhGODMwMDI4MjQwNUZGODBDNAotOjEwMTI0MDAwMDIyMDIwMjE5MDYyMDA2MzAwQTIxMDI0MzA0MjAwRkY5RgotOjEwMTI1MDAwMTQ0MDAwMEQwMDAwMDAwMDBFMDAxQTA2OTc5MDAwNDI5NgotOjEwMTI2MDAwMTA0MDAwMTAwMDQwMTgyMTI0MDJGRkZENTQ2MjAwMTFCQwotOjEwMTI3MDAwOEUyMzAwMjAwMjAwMjgyMTBFMDAxNDJBMDIyMDIwMjFBMwotOjEwMTI4MDAwMEEwMDFBRUM4RTIzMDAyMDkwNjIwMDYzMDBBMjEwMjQ1MgotOjEwMTI5MDAwMzA0MjAwRkYxMDQwMDAwMzAyMjAyMDIxMEUwMDE3NEVCNAotOjEwMTJBMDAwMDAwMDAwMDA5NzgyMDA0MjE0NDBGRkU0OEY4MzAwMjg3MgotOjEwMTJCMDAwOEUyMzAwMjAzMDYyMDAwNDEwNDAwMDA2OEY4NDAwNDQxQQotOjEwMTJDMDAwMjQwMkZGRkIwMDYyMTAyNDBFMDAxNDNFQUUyMjAwMjAxOAotOjEwMTJEMDAwOEY4NDAwNDQ4RjgzMDAyODhGQkYwMDE4OEZCMTAwMTRDMwotOjEwMTJFMDAwOEZCMDAwMTAyNDAyMDAwMTI3QkQwMDIwMDNFMDAwMDg5OQotOjEwMTJGMDAwQUM2NDAwQzAzMEE1MDBGRjI0MDMwMDAxMjRBOTAwMDE1NAotOjEwMTMwMDAwMDA2OTEwMkIxMDQwMDAwQzAwMDA0MDIxMjQwQTAwMDE0RAotOjEwMTMxMDAwMDBBMzEwMjMwMDRBMzgwNDI0NjMwMDAxMzA4MjAwMDEzNgotOjEwMTMyMDAwMDA2OTMwMkIxMDQwMDAwMjAwMDQyMDQyMDEwNzQwMjVENAotOjEwMTMzMDAwNTRDMEZGRjgwMEEzMTAyMzAzRTAwMDA4MDEwMDEwMjFBRgotOjEwMTM0MDAwMjdCREZGRTAzQzAyMUVEQ0FGQjIwMDE4QUZCMTAwMTRCNQotOjEwMTM1MDAwQUZCRjAwMUNBRkIwMDAxMDM0NTI2RjQxMDAwMDg4MjFCNQotOjEwMTM2MDAwMjQwNTAwMDgwRTAwMUFGQzAyMjAyMDIxMDAxMTgwODBCNAotOjEwMTM3MDAwM0MwNzA4MDAyNEU3NzE5NDAwMDIxNjAwMDIwNzE4MjFCOAotOjEwMTM4MDAwQUM2MjAwMDAwMDAwMjgyMTI0QTIwMDAxMzA0NUZGRkZDQwotOjEwMTM5MDAwOEM2MjAwMDAyQ0E2MDAwODA0NDEwMDAyMDAwMjIwNDBEQwotOjEwMTNBMDAwMDA5MjIwMjYxNEMwRkZGOEFDNjQwMDAwMDIwNzgwMjFFMAotOjEwMTNCMDAwOEUwNDAwMDAwRTAwMUFGQzI0MDUwMDIwMjYyMzAwMDFFNAotOjEwMTNDMDAwMzA3MUZGRkYyRTIzMDEwMDE0NjBGRkU1QUUwMjAwMDAyNAotOjEwMTNEMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBNwotOjEwMTNFMDAwMDNFMDAwMDgyN0JEMDAyMDNDMDIwODAwMjQ0MjZBODQ3NAotOjEwMTNGMDAwM0MwMTA4MDBBQzIyNzE4ODNDMDIwODAwMjQ0MjUwMDBFNQotOjEwMTQwMDAwM0MwMTA4MDBBQzIyNzE4QzI0MDIwMDA2M0MwMTA4MDA1QgotOjEwMTQxMDAwQTAyMjcxOTAwQTAwMUIwRjAwMDAwMDAwMjdCREZGRDgxQQotOjEwMTQyMDAwQUZCMzAwMUNBRkIyMDAxOEFGQkYwMDIwQUZCMTAwMTRDMwotOjEwMTQzMDAwQUZCMDAwMTA4RjUxMDE0MDhGNDgwMTQ4MDAwODk0MDI1RQotOjEwMTQ0MDAwMzI0MzAwRkYzMTEzMDBGRjhGNDIwMUI4MDQ0MEZGRkUxQQotOjEwMTQ1MDAwMjc1MDAxODBBRTExMDAwMDhGNDIwMTQ0QUUwMjAwMDQwQgotOjEwMTQ2MDAwMjQwMjAwMDJBNjEyMDAwOEEyMDIwMDBCMjQwMjAwMTRBQgotOjEwMTQ3MDAwQUUxMzAwMjQxMDYyMDAyNTI4NjIwMDE1MTA0MDAwMDhGOQotOjEwMTQ4MDAwMjQwMjAwMTUyNDAyMDAxMDEwNjIwMDMwMjQwMjAwMTIxMQotOjEwMTQ5MDAwMTA2MjAwMDk4RkJGMDAyMDBBMDAxQzMwOEZCMzAwMUNBRgotOjEwMTRBMDAwMTA2MjAwNjcyNDAyMDAyMjEwNjIwMDM3OEZCRjAwMjAwNAotOjEwMTRCMDAwMEEwMDFDMzA4RkIzMDAxQzNDMDIwODAwOEM0MjMxQTA5MwotOjEwMTRDMDAwMjQwM0ZGODAwMjIyMTAyMTAwNDMxMDI0QUY0MjAwMjQ5NQotOjEwMTREMDAwM0MwMjA4MDA4QzQyMzFBMDAyMjIxMDIxMzA0MjAwN0ZFMQotOjEwMTRFMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxMTY2MDAwQjM3MgotOjEwMTRGMDAwQUY4MzAwMjg5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwMzAxNwotOjEwMTUwMDAwQTA2MjAwNjIwQTAwMUMyRjhGQkYwMDIwM0MwNDYwMDAxNAotOjEwMTUxMDAwOEM4MzJDMDgzQzAyRjAwMzM0NDJGRkZGMDA2MjE4MjQ0NQotOjEwMTUyMDAwQUM4MzJDMDgzQzAyMDgwMDhDNDIzMUEwOEM4MzJDMDgzMAotOjEwMTUzMDAwMjQ0MjAwNzQwMDAyMTA4MjAwMDIxNDgwMDA2MjE4MjUwOAotOjEwMTU0MDAwQUM4MzJDMDgwQTAwMUMyRjhGQkYwMDIwM0MwMjA4MDAyRgotOjEwMTU1MDAwOEM0MjMxQTAyNDAzRkY4MDAyMjIxMDIxMDA0MzEwMjQ3QQotOjEwMTU2MDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIzMUEwM0MwMzAwMEEzOAotOjEwMTU3MDAwMDIyMjEwMjEzMDQyMDA3RjAzNDIxMDIxMDA0MzEwMjEzQgotOjEwMTU4MDAwMEEwMDFDMkVBRjgyMDAyODNDMDIwODAwOEM0MjMxQTBDOQotOjEwMTU5MDAwMjQwNEZGODAwMjIyMTAyMTAwNDQxMDI0QUY0MjAwMjRDMgotOjEwMTVBMDAwM0MwMjA4MDA4QzQyMzFBMDAyMjIxMDIxMzA0MjAwN0YxMAotOjEwMTVCMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxOTA2MjAwNjM3NQotOjEwMTVDMDAwMDA4MjEwMjQzMDQyMDBGRjEwNDAwMDdDQUY4MzAwMjhDRQotOjEwMTVEMDAwMjQ2MjAwODg5NDQzMDAxMjNDMDIwODAwOEM0MjMxQTgyNwotOjEwMTVFMDAwMzA2MzNGRkYwMDAzMTk4MDAyMjIxMDIxMDA0MzEwMjFDNQotOjEwMTVGMDAwMzA0MzAwN0YwMzQzMTgyMTAwNDQxMDI0M0MwNDAwMENCNgotOjEwMTYwMDAwMDA2NDE4MjFBRjQyMDAyODBFMDAxNTVBQUY4MzAwMkM0OQotOjEwMTYxMDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwQUUxMTAwMDA0MAotOjEwMTYyMDAwOEY0MjAxNDRBRTAyMDAwNDI0MDIwMDAyQTYxMjAwMDgwOAotOjEwMTYzMDAwQTIwMjAwMEJBRTEzMDAyNDBBMDAxQzJGOEZCRjAwMjA1MwotOjEwMTY0MDAwMjQwNkZGODAwMjI2MTAyNEFGNDIwMDIwM0MwMjA4MDAzRQotOjEwMTY1MDAwOEM0MjMxQTAzMTA0M0ZGRjAwMDQyMTgwMDIyMjEwMjE3RQotOjEwMTY2MDAwMDA0NjEwMjRBRjQyMDAyNDNDMDMwODAwOEM2MzMxQThEQwotOjEwMTY3MDAwM0MwMjA4MDA4QzQyMzFBMDMyMjcwMDdGMDIyMzE4MjE0RgotOjEwMTY4MDAwMDIyMjEwMjEwMDY0MTgyMTMwNDIwMDdGMzA2NDAwN0Y2NAotOjEwMTY5MDAwMDM0MjI4MjEzQzAyMDAwQTAwNjYxODI0MDBBMjI4MjFFNwotOjEwMTZBMDAwMDM0NDIwMjEzQzAyMDAwQzAwODIyMDIxQUY0MzAwMjg4QgotOjEwMTZCMDAwM0MwMjAwMDgwMzQ3MTgyMTAwNjI5MDIxQUY4NTAwMjhGMgotOjEwMTZDMDAwQUY4NDAwMkMwRTAwMTU1QTAxMDA4MDIxOEY0MjAxQjgxMgotOjEwMTZEMDAwMDQ0MEZGRkU4RjgyMDAyQzhGODQwMDI4Mjc0NTAxODA2NAotOjEwMTZFMDAwOTA0MjAwMERBQ0IxMDAwMEE0QjAwMDA2MDAwMjE2MDA0QwotOjEwMTZGMDAwMDAwMjE2MDMwMDAyMTAyNzAwMDIzN0MyMTRDMDAwMTZCMQotOjEwMTcwMDAwMjQ4MjAwODg5NDQyMDAxMjMyMDMzRkZGMzA0MjNGRkZBMAotOjEwMTcxMDAwMTQ0MzAwMTIyNDAyNjA4MjkwODMwMDYzMjQwMkZGODAzRAotOjEwMTcyMDAwMDA0MzEwMjQzMDQyMDBGRjUwNDAwMDBDMjQwMjYwODIyRAotOjEwMTczMDAwOTA4MjAwNjIzMDQyMDAwRjM0NDIwMDQwQTA4MjAwNjI3QQotOjEwMTc0MDAwMjQwMjYwODRBNEEyMDAwODI0MDIwMDBEQTBBMjAwMDVDNwotOjEwMTc1MDAwMEEwMDFDMTkzQzAyMjcwMDI0MDI2MDgyQTRBMjAwMDg4RgotOjEwMTc2MDAwQTBBMDAwMDUzQzAyMjcwMDAwMDYxQzAwMDA2MjE4MjUwRQotOjEwMTc3MDAwMjQwMjAwMDJBMEEyMDAwQkFDQTMwMDEwQUNBMDAwMTQzNQotOjEwMTc4MDAwQUNBMDAwMjRBQ0EwMDAyOEFDQTAwMDJDOEU0MjAwNENFMQotOjEwMTc5MDAwOEY4NDAwMkNBQ0EyMDAxODkwODMwMDBEMjQwMkZGODBERgotOjEwMTdBMDAwMDA0MzEwMjQzMDQyMDBGRjEwNDAwMDA1OEZCRjAwMjA4RQotOjEwMTdCMDAwOTA4MjAwMEQzMDQyMDA3RkEwODIwMDBEOEZCRjAwMjA3QwotOjEwMTdDMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBCRgotOjEwMTdEMDAwM0MwMjEwMDAyN0JEMDAyODAzRTAwMDA4QUY0MjAxQjgxQQotOjEwMTdFMDAwMDgwMDRDMjgwODAwNEMyODA4MDA0QkEwMDgwMDRCRDhFMwotOjEwMTdGMDAwMDgwMDRDMEMwODAwNEMzMDA4MDA0QzMwMDgwMDRDMzBGRAotOjA0MTgwMDAwMDgwMDRCMTA4MQotOjBDMTgwNDAwMEEwMDAxMjIwMDAwMDAwMDAwMDAwMDAwQUIKLToxMDE4MTAwMDAwMDAwMDBENzQ3MDYxMzQyRTM2MkUzMTM2MDAwMDAwNDkKLToxMDE4MjAwMDA0MDYxMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMDE4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMDE4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMDE4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMDE4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMDE4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMDE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMDE4OTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEMUIKLToxMDE4QTAwMDNDMDIwODAwMjQ0MjFCODAzQzAzMDgwMDI0NjMyMDE0RUYKLToxMDE4QjAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0QjQKLToxMDE4QzAwMDNDMUQwODAwMzdCRDJGRkMwM0EwRjAyMTNDMTAwODAwOTAKLToxMDE4RDAwMDI2MTAwNDg4M0MxQzA4MDAyNzlDMUI4MDBFMDAwMTVBMUYKLToxMDE4RTAwMDAwMDAwMDAwMDAwMDAwMEQzMDg0RkZGRjMwODIwMDA3ODAKLToxMDE4RjAwMDhGODUwMDE4MTA0MDAwMDIyNDgzMDAwNzMwNjRGRkY4MzEKLToxMDE5MDAwMDAwODUzMDIxMzBDNDFGRkYwMzQ0MTgyMTI0N0I0MDAwOTAKLToxMDE5MTAwMEFGODUwMDFDQUY4NDAwMTgwM0UwMDAwOEFGNDQwMDg0Q0EKLToxMDE5MjAwMDMwODRGRkZGMzA4MjAwMDc4Rjg1MDAyMDhGODYwMDI4REIKLToxMDE5MzAwMDEwNDAwMDAyMjQ4MzAwMDczMDY0RkZGODAwODUyMDIxNTYKLToxMDE5NDAwMDAwODYxODJCMTQ2MDAwMDJBRjg1MDAyNDAwODYyMDIzMzcKLToxMDE5NTAwMDAzNDQyODIxMzQwNjgwMDBBRjg0MDAyMEFGNDQwMDgwNzcKLToxMDE5NjAwMDAwQTYyMDIxMDNFMDAwMDhBRjg0MDAzODI3QkRGRkQ4N0YKLToxMDE5NzAwMEFGQjMwMDFDQUZCMjAwMThBRkIwMDAxMEFGQkYwMDI0NkYKLToxMDE5ODAwMEFGQjQwMDIwQUZCMTAwMTQzQzA4NjAwODhEMTQ1MDAwQzMKLToxMDE5OTAwMDI0MThGRjdGM0MxQTgwMDAwMjk4OTgyNDM2NzIzODBDNzUKLToxMDE5QTAwMEFEMTI1MDAwOEY1MTAwMDgzQzA3NjAxQzNDMDg2MDAwREQKLToxMDE5QjAwMDM2MzAwMDAxQUY1MDAwMDhBRjgwMDAxOEFGNDAwMDgwMDMKLToxMDE5QzAwMEFGNDAwMDg0OENFNjAwMDg4RDBGMDgwODNDMDc2MDE2QzUKLToxMDE5RDAwMDhDRUMwMDAwMzFFRUZGRjAzOUNBMDAxMDNDMERGRkZGMjcKLToxMDE5RTAwMDM0MEI4MDAwM0MwMzAwODAwMzRCNDgyMTJENDQwMDAxNTAKLToxMDE5RjAwMDAxOEQyODI0M0MwMjUzNTMzQzAxMDgwMEFDMjMwNDIwRjEKLToxMDFBMDAwMEFGODkwMDM4QUY4NjAwMjhBRjg0MDAxMDI3NUI0MDAwMDQKLToxMDFBMTAwMDE0QTIwMDAzMzRFMzdDMDA4Q0Y5MDAwNDAzMjgxODIxOEQKLToxMDFBMjAwMDhDN0YwMDdDOEM2NTAwNzgzQzAyODAwMDM0NTIwMDcwMTIKLToxMDFBMzAwMEFGODUwMDNDQUY5RjAwNDAzQzEzMDgwMDI2NzMxQkM0RDkKLToxMDFBNDAwMDAyNDBBMDIxOEU0ODAwMDA4RjQ2MDAwMDM4QzMwMDAxRUMKLToxMDFBNTAwMDMwNjQwMDAxMTA4MDAwMTdBRjg4MDAzNDAyODA0ODIxRjQKLToxMDFBNjAwMDhEMkQwMDAwM0MxOTA4MDA4RjM5MDQ1QzNDMTEwODAwRTIKLToxMDFBNzAwMDhFMzEwNDU4MDFBOEY4MjMwMzNGNzgyMTAwMDA0MDIxNEIKLToxMDFBODAwMDAyMjgzODIxMDFGRjgwMkIwMEYwNzAyMTNDMDEwODAwNjIKLToxMDFBOTAwMEFDMkYwNDVDM0MwMTA4MDBBQzJFMDQ1ODhGNEMwMDAwQjUKLToxMDFBQTAwMDM5OEIwMDAxMzE2QTAwMDExNTQwRkZFRDAxQTA0MDIxOTIKLToxMDFBQjAwMEFGOEQwMDM0OEU0RTAwMDAzQzBDMDgwMDhEOEMwNDVDMTEKLToxMDFBQzAwMDNDMEEwODAwOEQ0QTA0NTgwMUM4NjgyMzAxOEQyODIxNkEKLToxMDFBRDAwMDAwMDA1ODIxMDBBRDMwMkIwMTRCMjAyMTAwODYxMDIxNDEKLToxMDFBRTAwMDNDMDEwODAwQUMyNTA0NUMzQzAxMDgwMEFDMjIwNDU4MTEKLToxMDFBRjAwMDhGNDUwMTA4OEY0NDAxMDAzMEE5MjAwMEFGODUwMDAwMDgKLToxMDFCMDAwMEFGODQwMDBDMTEyMDAwMEEwMEEwMzAyMTNDMDcwODAwMUYKLToxMDFCMTAwMDhDRTcwNDJDMjRFRjAwMDEzQzAxMDgwMEFDMkYwNDJDQkUKLToxMDFCMjAwMDNDMTA0MDAwQUY1MDAxMzgwQTAwMDE5MDAwMDAwMDAwNTYKLToxMDFCMzAwMDMwQjAwMjAwMTYwMDAwMTQyNDExMEYwMDEwOTEwMDEyQTIKLToxMDFCNDAwMDI0MDcwRDAwMTA4NzAyMzMzMEIwMDAwNjUyMDBGRkY1NjUKLToxMDFCNTAwMDNDMTA0MDAwOTM2RDAwMDAyNDBDMDAxMDMxQTYwMEYwRjIKLToxMDFCNjAwMDEwQ0MwMjY5MjQwRTAwNzAxMENFMDJERDhGOEIwMDE0QTEKLToxMDFCNzAwMDI1NjcwMDAxQUY4NzAwMTQzQzEwNDAwMEFGNTAwMTM4Q0EKLToxMDFCODAwMDBBMDAwMTkwMDAwMDAwMDA5NzQ4MDEwNDExMDBGRkU1RTEKLToxMDFCOTAwMDNDMTA0MDAwMzBCODQwMDAxNzAwMDBBMjAwMDAwMDAwRDgKLToxMDFCQTAwMDhGNTkwMTc4MDcyMEZGRkU4Rjg3MDAzODI0MDkwMDA4MkQKLToxMDFCQjAwMDI0MDUwODAwOENFMzAwMDhBRjQ1MDE3OEE3NDkwMTQwREYKLToxMDFCQzAwMEE3NDAwMTQyOTc0MjAxMDQ4Rjg2MDAwMDMwNDlGRkZGODEKLToxMDFCRDAwMDMwREYwMDAxMTNFMDAyRDUwMTIwNDAyMTI1MjRGRkZFNjMKLToxMDFCRTAwMDI0MEEwMDAyQTc0QTAxNDYzMDg4RkZGRkE3NDQwMTQ4QTMKLToxMDFCRjAwMDNDMEIwODAwOEQ2QjA0M0MxNTYwMDJDNDhGOEYwMDBDRjkKLToxMDFDMDAwMDMwQzMwMDIwMTQ2MDAwMDIyNDA0MDAwOTI0MDQwMDAxRjEKLToxMDFDMTAwMDMwQ0QwQzAwMjQwQzA0MDA1MUFDMDAwMTM0ODQwMDA0Q0QKLToxMDFDMjAwMEE3NDQwMTRBM0MwNTA4MDA4Q0E1MDQyMDNDMDIwMDQ4NUEKLToxMDFDMzAwMDNDMTkwMDAxMDBBMkY4MjUzMEQ4MDAwMjAzRjkyODI1M0MKLToxMDFDNDAwMDEzMDAwMDA0MDAwMDE4MjEzQzA0MDEwMDAwQTQyODI1MTIKLToxMDFDNTAwMDI0MDMwMDAxMzBDQTAwMDQ1MTQwMDAwNUFGODMwMDA4OEUKLToxMDFDNjAwMDNDMDYwMDEwMDBBNjI4MjUyNDAzMDAwMUFGODMwMDA4Q0QKLToxMDFDNzAwMEFGNDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMDFDODAwMDAwMDAwMDAwOEY4MzAwMDgxMDYwMDAyMzAwMDAwMDAwQTcKLToxMDFDOTAwMDhGNEIxMDAwMDU2MUZGRkUwMDAwMDAwMDEwNjAwMDFFNjkKLToxMDFDQTAwMDAwMDAwMDAwOEY0RDEwMDAzQzAzMDAyMDAxQTM2MDI0QzEKLToxMDFDQjAwMDExODAwMDE5OEY4RjAwMDAzMUVFMDAwMjExQzAwMDE2NTQKLToxMDFDQzAwMDAwMDAwMDAwOTc1MDEwMTQxNjAwMDAxMzAwMDAwMDAwRTAKLToxMDFDRDAwMDk3NDUxMDA4MzBCRkZGRkYyN0Y4MDAwNjAwMThDODgyOUMKLToxMDFDRTAwMDAwMTkzMDgwMDBDNzI4MjEzMzExMDAwMTMzMDMwMDAzOUQKLToxMDFDRjAwMDEyMjAwMzIwOENBMjAwMDAwMDAwMDAwRDAwQzdGODIxNzQKLToxMDFEMDAwMEFGRTIwMDAwM0MxOTA4MDA4RjM5MDQzMDI3MjYwMDAxOUIKLToxMDFEMTAwMDNDMDEwODAwQUMyNjA0MzA4RjZBMDAwMDM0MDVGRkZGNDgKLToxMDFEMjAwMEFGOEEwMDA0OENFMjAwMDAxMDQ1MDI5QTAwMDAyMDIxRDYKLToxMDFEMzAwMDhDRTUwMDAwMzBCRjAxMDAxM0UwMDI3RTAxMDAyMDIxOEQKLToxMDFENDAwMDNDMDcwODAwOENFNzA0NzQzQzEwMDgwMDhFMTAwNDRDMUIKLToxMDFENTAwMDAwRTg1ODIxM0MxODA4MDA4RjE4MDQ3MDAxNjg4ODJCOEYKLToxMDFENjAwMDNDMDgwODAwOEQwODA0NDgwMDAwNzgyMTAyMDQ2MDIxMjYKLToxMDFENzAwMDAzMEYxODIxMDE4NDcwMkIwMTBGNjgyMTAwNzE1MDIxN0QKLToxMDFEODAwMDAxQUUxMDIxM0MwMTA4MDBBQzJDMDQ0QzNDMDEwODAwQzEKLToxMDFEOTAwMEFDMjIwNDQ4M0MwMTA4MDBBQzJCMDQ3NDNDMDEwODAwNTAKLToxMDFEQTAwMEFDMkEwNDcwOEY4RDAwMTgwMTIwMzAyMTMxMjkwMDA3RTIKLToxMDFEQjAwMDI1QUUwMDA4MzFDMjFGRkYwMzQyNjAyMUFGOEQwMDFDMTkKLToxMDFEQzAwMEFGODIwMDE4MjU5QjQwMDBBRjQyMDA4NDExMjAwMDAzMjEKLToxMDFERDAwMDhGOTAwMDIwMjRDODAwMDczMTA2RkZGODhGODQwMDI4NjgKLToxMDFERTAwMDAwRDAyODIxMDBBNDc4MkIxNUUwMDAwMkFGOTAwMDI0MzkKLToxMDFERjAwMDAwQTQyODIzMDM0NTIwMjEzNDAzODAwMDAwODMxMDIxMDAKLToxMDFFMDAwMDNDMDYxMDAwQUY4NTAwMjBBRjgyMDAzOEFGNDUwMDgwNEYKLToxMDFFMTAwMEFGNDYwMTc4OEY4QjAwMTQyNTY3MDAwMTBBMDAwMUREQjEKLToxMDFFMjAwMEFGODcwMDE0OEY2MjAwMDg4RjY3MDAwMDI0MTEwMDMwMTQKLToxMDFFMzAwMDAwMDdDNjAyMzMwMzAwRjAxMDcxMDBBMjI0MTkwMDQwMEQKLToxMDFFNDAwMDE0NzlGRjRCOEY4QjAwMTQ4RjRBMDE3ODA1NDBGRkZFRjkKLToxMDFFNTAwMDMwQTcwMjAwMTRFMDAwMDMwMDA1MTI4MjAwMDAwMDBEMEMKLToxMDFFNjAwMDAwMDUxMjgyMzA1MDAwMDMwMDEwNDkwMDAxMzA3MDIxM0IKLToxMDFFNzAwMDAwMEU2ODgwMDFCMDYwMjEwMDBDNTg4MDAxNzM4MDIxNDEKLToxMDFFODAwMDhFMDgwMDAwMTUwMDAwMDIwMDAwMDAwMDAwMDAwMDBEOTgKLToxMDFFOTAwMDhGNkYwMDA0MDVFMjAyQjE5MjAzMDAwNjkyMDcwMDA1NkQKLToxMDFFQTAwMDkyMEYwMDA0M0MwMjAwMDEwMDA3Mjg4MDAwQjA2MDIxNkUKLToxMDFFQjAwMDhEODkwMDE4Mjc3MTAwMDgyNUVFMDAwNTAxMjI2ODIxOTAKLToxMDFFQzAwMDAwMEUzMDgyQUQ4RDAwMTgwMjIwMjAyMTBFMDAwNTgwMEEKLToxMDFFRDAwMDI2MDUwMDE0OTIwQjAwMDY4RjdGMDAwNDNDMDg3RkZGNEMKLToxMDFFRTAwMDAwMEIyMDgwMDA5MTMwMjE4Q0MzMDAwNDM1MEFGRkZGRDUKLToxMDFFRjAwMDAzRUFDODI0MDA3OUMwMjFBQ0Q4MDAwNDkyMDcwMDA1ODkKLToxMDFGMDAwMDkyMDkwMDA0OTYwRDAwMDgwMDA3Mjg4MDAwQjFGODIxMEUKLToxMDFGMTAwMDhGRUYwMDAwOTc0MjAxMDQzQzA3RkZGRjAxRTc1MDI0QzgKLToxMDFGMjAwMDMwNEVGRkZGMDFDOTYwMjEwMThENTgyMzMxNjhGRkZGNEEKLToxMDFGMzAwMDAxNDgyMDI1QUZFNDAwMDA5MjAzMDAwNzI0MTkwMDAxQTYKLToxMDFGNDAwMDEwNzkwMjY5MjQwNjAwMDMxMDY2MDI3OTAwMDAwMDAwN0YKLToxMDFGNTAwMDhFMTkwMDEwMjQxRjAwMEFBNzVGMDE0MEE3NTkwMTQyRjMKLToxMDFGNjAwMDkyMDMwMDA0OEY4NjAwMDAyNDA3MDAwMUE3NDMwMTQ0NjgKLToxMDFGNzAwMEE3NDAwMTQ2OTc1ODAxMDQzMEQxMDAwMjNDMDUwMDQxQkEKLToxMDFGODAwMEE3NTgwMTQ4MDAwMDE4MjFBNzQ3MDE0QTEyMjAwMDAzNjIKLToxMDFGOTAwMDMwQ0EwMDA0M0MwNTAxNDEyNDAzMDAwMTUxNDAwMDA1MDIKLToxMDFGQTAwMEFGODMwMDA4M0MwODAwMTAwMEE4MjgyNTI0MDMwMDAxODYKLToxMDFGQjAwMEFGODMwMDA4QUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMDFGQzAwMDAwMDAwMDAwMDAwMDAwMDA4RjhCMDAwODExNjAwMDA0N0EKLToxMDFGRDAwMDAwMDAwMDAwOEY0NDEwMDAwNDgxRkZGRTAwMDAwMDAwOUMKLToxMDFGRTAwMDhGNkEwMDAwOTIwNzAwMDQzQzA1MDgwMDhDQTUwNDQ0OTkKLToxMDFGRjAwMEFGOEEwMDA0OTc1RjAxMDQzQzBGMDgwMDhERUYwNDQwOTYKLToxMDIwMDAwMDMwRTMwMEZGMzNGOUZGRkYwMDc5QzAyMTAwQjg2ODIxRjkKLToxMDIwMTAwMDAwMDAxMDIxMjRFNjAwMEEzMEM4RkZGRjAxQjg0ODJCNTkKLToxMDIwMjAwMDAxRTI3MDIxMDFDOTYwMjEzMTEwMDAwNzNDMDEwODAwNjQKLToxMDIwMzAwMEFDMkQwNDQ0M0MwMTA4MDBBQzJDMDQ0MDEyMDAwMDAzMDkKLToxMDIwNDAwMDhGOEQwMDE4MjUwQjAwMDczMTY4RkZGODAxMEQ3MDIxRjYKLToxMDIwNTAwMDMxQ0MxRkZGQUY4RDAwMUNBRjhDMDAxOEFGNEMwMDg0M0IKLToxMDIwNjAwMDk3NDQwMTA0MDM0QzgwMjEzMDg0RkZGRjMwODgwMDA3MkYKLToxMDIwNzAwMDExMDAwMDAzMjYxQjQwMDAyNDg5MDAwNzMxMjRGRkY4Q0IKLToxMDIwODAwMDhGODIwMDIwOEY4NTAwMjgwMDgyMjAyMTAwODU3ODJCRjgKLToxMDIwOTAwMDE1RTAwMDAyQUY4MjAwMjQwMDg1MjAyMzAzNDQ4ODIxM0MKLToxMDIwQTAwMDM0MDU4MDAwMDIyNTEwMjEzQzA2MTAwMEFGODQwMDIwN0EKLToxMDIwQjAwMEFGODIwMDM4QUY0NDAwODBBRjQ2MDE3ODBBMDAwMjg1NDUKLToxMDIwQzAwMDhGOEIwMDE0OEY1RjAxNzgwN0UwRkZGRTMwQUEwMjAwQkIKLToxMDIwRDAwMDE1NDAwMDAzMDAwNTQyODIwMDAwMDAwRDAwMDU0MjgyMDkKLToxMDIwRTAwMDMxMDIwMDAzMDAwMjcxMDAwMUMyNjgyMTAwMEQ2MDgwMEUKLToxMDIwRjAwMDAxODI0ODIxMDAwOTI4ODAwMEIzODAyMThFMEIwMDAwNTYKLToxMDIxMDAwMDExNjAwMDAyMDAwMDAwMDAwMDAwMDAwRDhGNkYwMDBDNDUKLToxMDIxMTAwMDA1RTAwMUYzOEY4NzAwMzgyNDE5MDAwMUFFMTkwMDAwOTMKLToxMDIxMjAwMDhDRTMwMDA4QTIwMDAwMDc4Rjc4MDAwNDAwMTgxQzAyNEUKLToxMDIxMzAwMDMwNjYwMEZGMjREMTAwMDUwMDExMzA4MzJDQzQwMDQxMUIKLToxMDIxNDAwMDE0ODAwMDAyQTIwMzAwMDQwMDAwMDAwRDhGNkIwMDA0NDUKLToxMDIxNTAwMDNDMEVGRkZGMDBFMDI4MjEzMTY0RkZGRjI0OEYwMDBCQkQKLToxMDIxNjAwMDAwMEY0MDgyMDAwODEwODAwMDQ3NDgyMThEMkQwMDAwOUMKLToxMDIxNzAwMDI2MDQwMDE0QTYwQjAwMDgwMUFFNjAyNDBFMDAwNTgwQTIKLToxMDIxODAwMEFEMkMwMDAwOEY1RjAxMDgzQzBBMTAwMDAzRUEzODI0RTAKLToxMDIxOTAwMDEwRTAwMUEzMDAwMDAwMDA5NzQ2MDEwNDkyMDMwMDA3MkQKLToxMDIxQTAwMDI0RDFGRkVDMzQ2NTAwMDIzMjI0RkZGRkEyMDUwMDA3QjIKLToxMDIxQjAwMDk2MDYwMDA4MkNDNzAwMTM1NEUwMDAwNTkyMDMwMDA3QTAKLToxMDIxQzAwMDkyMEEwMDA3MzU1RjAwMDFBMjFGMDAwNzkyMDMwMDA3NzMKLToxMDIxRDAwMDI0MEIwMDAxMTA2QjAxQkEyNDA5MDAwMzEwNjkwMUNEMjIKLToxMDIxRTAwMDhGODgwMDM4MzBDRkZGRkYyNUU0MDAwMjAwMDRDODgzNDkKLToxMDIxRjAwMDMzM0YwMEZGMDAxRjI4ODBBMjE5MDAwNTAwQTg1ODIxQzYKLToxMDIyMDAwMDhENzgwMDAwOTc1MTAxMDQzQzAzRkZGRjAzMDM2MDI0MTUKLToxMDIyMTAwMDMyMjJGRkZGMDA0RjcwMjMyNUNERkZGRTAxOEQ0ODI1QTAKLToxMDIyMjAwMEFENjkwMDAwOTIwNjAwMDUzQzAyRkZGNjM0NEVGRkZGNDgKLToxMDIyMzAwMDMwQ0EwMEZGMDAwQTM4ODAwMEYwMjAyMTkwOTkwMDE0NzUKLToxMDIyNDAwMDNDMUZGRjdGMzdFN0ZGRkYzMzIzMDAwRjAwNjY3ODIxMzUKLToxMDIyNTAwMDMxRjgwMEZGMDAxODI4ODAwMEIwODgyMThFMkQwMDIwNjIKLToxMDIyNjAwMDAwQTg2MDIxQTIwRjAwMDYwMUFFNDgyNEFFMEQwMDBDQUMKLToxMDIyNzAwMEFEODkwMDBDOTIwQjAwMDY4RTA0MDAwQzAxMjdGODI0OTcKLToxMDIyODAwMDAwMEI1MDgwMDE1MEM4MjE5NzI2MDAyNjAxNDhDMDIxMkMKLToxMDIyOTAwMDAwODc0MDI0QUYyNjAwMjRBRTA4MDAwQ0FGM0YwMDIwOEEKLToxMDIyQTAwMEFGMDYwMDEwOEY4NjAwMDAyNDBDMDAxMDI0MDkwMDAyRTUKLToxMDIyQjAwMEE3NEMwMTQwQTc0MDAxNDJBNzQwMDE0NEE3NDkwMTQ2NUQKLToxMDIyQzAwMDk3NEIwMTA0MjQwNzAwMDEzMEM4MDAwMjI1NkFGRkZFNzUKLToxMDIyRDAwMEE3NEEwMTQ4M0MwNTAwMDlBNzQ3MDE0QTExMDAwMDAzMkQKLToxMDIyRTAwMDAwMDAxODIxM0MwNTAxMDkyNDAzMDAwMTMwQ0QwMDA0NDEKLToxMDIyRjAwMDUxQTAwMDA1QUY4MzAwMDgzQzA2MDAxMDAwQTYyODI1NjkKLToxMDIzMDAwMDI0MDMwMDAxQUY4MzAwMDhBRjQ1MTAwMDAwMDAwMDAwNjcKLToxMDIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyMTgwMDA0MEYKLToxMDIzMjAwMDI3MTEwMDAyMzIyRjAwMDcwMDBGMTAyMzMwNEUwMDA3NDQKLToxMDIzMzAwMEFFMEUwMDEwOEY5MDAwMDgxMjAwMDAwNDAwMDAwMDAwOTQKLToxMDIzNDAwMDhGNDMxMDAwMDQ2MUZGRkUwMDAwMDAwMDhGNzgwMDAwNDIKLToxMDIzNTAwMDhGOEYwMDE4M0MxMDA4MDA4RTEwMDQ0NEFGOTgwMDA0QzIKLToxMDIzNjAwMDk3NTEwMTA0MjVFNjAwMTAzMENBMUZGRjMyMjJGRkZGRkIKLToxMDIzNzAwMEFGOEYwMDFDQUY4QTAwMThBRjRBMDA4NDI0NDlGRkZFQ0IKLToxMDIzODAwMDNDMEIwODAwOEQ2QjA0NDA5NzRFMDEwNDAxMjA2ODIxMkUKLToxMDIzOTAwMDAwMDk2N0MzMDIwRDI4MjEzMUM5RkZGRjAwQUQ0MDJCQTIKLToxMDIzQTAwMDAxNkMzODIxMDBFODIwMjEwMzRBRjgyMTMxMzkwMDA3NjcKLToxMDIzQjAwMDNDMDEwODAwQUMyNTA0NDQzQzAxMDgwMEFDMjQwNDQwNjYKLToxMDIzQzAwMDEzMjAwMDAzMjdGQjQwMDAyNTIzMDAwNzMwNjlGRkY4OTYKLToxMDIzRDAwMDhGOUYwMDIwOEY4NDAwMjgwMTNGMzgyMTAwRTRDODJCMDQKLToxMDIzRTAwMDE3MjAwMDAyQUY5RjAwMjQwMEU0MzgyMzAzNDcyMDIxNzgKLToxMDIzRjAwMDM0MDU4MDAwMDA4NTEwMjEzQzA2MTAwMEFGODcwMDIwQzYKLToxMDI0MDAwMEFGODIwMDM4QUY0NzAwODBBRjQ2MDE3ODBBMDAwMjg1RUUKLToxMDI0MTAwMDhGOEIwMDE0OTc1ODAxMDQxMzAwRkRDMjNDMTA0MDAwM0MKLToxMDI0MjAwMDhGNDMwMTc4MDQ2MEZGRkUzMEI5NDAwMDEzMjAwMDAzQTEKLToxMDI0MzAwMDNDMDQwMDA4MDAwMDAwMEQzQzA0MDAwOEFGNDQwMTQwQ0IKLToxMDI0NDAwMDI0MDgwODAwQUY0ODAxNzg4RjhCMDAwMDk3NEEwMTA0RTgKLToxMDI0NTAwMDMxN0YwMDAxMTNFMDAwRTkzMTQ2RkZGRjI0RDBGRkZFODkKLToxMDI0NjAwMDI0MEMwMDAyQTc0QzAxNDZBNzUwMDE0ODhGOEYwMDE4OEEKLToxMDI0NzAwMDI0MDUwMDBEQTc0NTAxNEE4RjcxMDAwMDI1RTIwMDA4RTAKLToxMDI0ODAwMDMwNDkxRkZGMDM0OTcwMjEzMENEMDAwN0FGOTEwMDA0OTAKLToxMDI0OTAwMEFGOEYwMDFDQUY4OTAwMTgwMEMwMzgyMUFGNDkwMDg0RkQKLToxMDI0QTAwMDExQTAwMDAzMjVEQjQwMDAyNEM2MDAwNzMwQzdGRkY4NTkKLToxMDI0QjAwMDhGOTgwMDIwOEY4NDAwMjgwMEY4MzAyMTAwQzQzODJCMkEKLToxMDI0QzAwMDE0RTAwMDAyQUY5ODAwMjQwMEM0MzAyMzhGOEEwMDE0NjcKLToxMDI0RDAwMDAzNDY1ODIxMzQwODgwMDAwMTY4RjgyMTI1NTkwMDAxN0QKLToxMDI0RTAwMDNDMDMxMDAwM0MxMDQwMDBBRjg2MDAyMEFGOUYwMDM4MzYKLToxMDI0RjAwMEFGNDYwMDgwQUY0MzAxNzhBRjk5MDAxNEFGNTAwMTM4NjgKLToxMDI1MDAwMDBBMDAwMTkwMDAwMDAwMDA4RjY5MDAwMDk3NDQwMTA0NTgKLToxMDI1MTAwMDMxMjdGRkZGMzA4OEZGRkY4RjRGMDE3ODA1RTBGRkZFNzYKLToxMDI1MjAwMDMwRkYwMDA3MDAxRjE4MjMzMDc4MDAwNzI0RTZGRkZFNjUKLToxMDI1MzAwMDI0MTkwMDBBQTc1OTAxNDBBNzU4MDE0MkE3NDYwMTQ0OUYKLToxMDI1NDAwMEE3NDAwMTQ2QTc0ODAxNDg4RjQyMDEwODMwNTEwMDIwQUEKLToxMDI1NTAwMDE2MjAwMDAyMjQwMzAwMDkyNDAzMDAwMTMwQUEwMDAyMEYKLToxMDI1NjAwMEE3NDMwMTRBM0MwNDAwNDExMTQwMDAwMzAwMDAxODIxMjgKLToxMDI1NzAwMDNDMDQwMTQxMjQwMzAwMDEzMEFCMDAwNDUxNjAwMDA1MUMKLToxMDI1ODAwMEFGODMwMDA4M0MwNTAwMTAwMDg1MjAyNTI0MDMwMDAxQ0UKLToxMDI1OTAwMEFGODMwMDA4QUY0NDEwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMDI1QTAwMDAwMDAwMDAwMDAwMDAwMDA4RjkwMDAwODEyMDAwMDA0RUUKLToxMDI1QjAwMDAwMDAwMDAwOEY0QzEwMDAwNTgxRkZGRTAwMDAwMDAwQUQKLToxMDI1QzAwMDhGNzgwMDAwMjc2MjAwMDg4RjhEMDAzQ0FGOTgwMDA0RDAKLToxMDI1RDAwMDk0NDYwMDA4OTQ1MTAwMEE5NDRGMDAwQzMwQ0VGRkZGM0YKLToxMDI1RTAwMDAwMTEyNDAwMzFFOUZGRkYxMUNEMDBBMjAwODkyMDI1NTAKLToxMDI1RjAwMDNDMDMwODAwOEM2MzA0NDQzQzE4MDgwMDhGMTgwNDQwMTYKLToxMDI2MDAwMDAwRTg1MDIxMjU1RkZGRkUwMDdGNzgyMTAwMDAxMDIxQTcKLToxMDI2MTAwMDAxRkYzMDJCMDMwMjg4MjEwMjI2NDgyMTNDMDEwODAwREIKLToxMDI2MjAwMEFDMkYwNDQ0M0MwMTA4MDBBQzI5MDQ0MDI0RUIwMDA4MTIKLToxMDI2MzAwMDMxNjJGRkZGMzA0NzAwMDcxMEUwMDAwMzhGODUwMDE4NkMKLToxMDI2NDAwMDI0NTAwMDA3MzIwMkZGRjgzMTA2RkZGRjMwQzgwMDA3QjAKLToxMDI2NTAwMDAwNDU3MDIxMzFDRDFGRkYwMzRENjAyMUFGODUwMDFDNjcKLToxMDI2NjAwMEFGOEQwMDE4MjU5QjQwMDBBRjREMDA4NDExMDAwMDAzODIKLToxMDI2NzAwMDhGOEYwMDIwMjRDNDAwMDczMDg2RkZGODhGODQwMDI4NDUKLToxMDI2ODAwMDAwQ0YyODIxMDBBNDQ4MkIxNTIwMDAwMkFGOEYwMDI0ODIKLToxMDI2OTAwMDAwQTQyODIzQUY4NTAwMjBBRjQ1MDA4MDNDMTEwODAwMkUKLToxMDI2QTAwMDhFMzEwNDM0MDM0NUMwMjEzNDAyODAwMDAzMDIzMDIxRkUKLToxMDI2QjAwMDEyMjAwMDA1QUY4NjAwMzg5MzgzMDAxNzI0MTkwMDBFRkUKLToxMDI2QzAwMDEwNzkwMDBEMjQxRjA0M0YzQzBBMTAwMEFGNEEwMTc4MjYKLToxMDI2RDAwMDhGOEIwMDE0MjU2NzAwMDEwQTAwMDFEREFGODcwMDE0MEQKLToxMDI2RTAwMDBFMDAwNUE2M0MxMDQwMDA4RjhCMDAxNDI1NjcwMDAxRUEKLToxMDI2RjAwMDBBMDAwMURFQUY4NzAwMTQzQzBBMTAwMEE3NUYwMTQ4MDIKLToxMDI3MDAwMEFGNEEwMTc4MEEwMDA0QjQ4RjhCMDAxNDI0MEUwRjAwMjYKLToxMDI3MTAwMDExRUUwMDNEMzBEMTAwMjAxNjIwMDAwMjI0MDMwMDA5RjQKLToxMDI3MjAwMDI0MDMwMDAxMEEwMDAyMDhBNzQzMDE0QTBBMDAwMUZCMzIKLToxMDI3MzAwMEE3NDAwMTQ2OTRFNTAwMDg5NEUyMDAwQTk0RUIwMDBDREYKLToxMDI3NDAwMDhGODYwMDNDMDAwMkZDMDAzMTZBRkZGRjMwQjlGRkZGQkEKLToxMDI3NTAwMDEzMjYwMDM3MDNFQTIwMjUzQzA1MDgwMDhDQTUwNDQ0MTUKLToxMDI3NjAwMDNDMUYwODAwOEZGRjA0NDAwMDAwNTAyMTAwQTgzODIxQzIKLToxMDI3NzAwMDAwRTgzMDJCMDNFQUM4MjEwMzI2QzAyMTNDMDEwODAwRjEKLToxMDI3ODAwMEFDMjcwNDQ0M0MwMTA4MDBBQzM4MDQ0MDBBMDAwMjY5NEMKLToxMDI3OTAwMDhGOEQwMDE4M0MxOTA4MDA4RjM5MDQ3QzNDMDMwODAwMTkKLToxMDI3QTAwMDhDNjMwNDU0M0MwNjA4MDA4Q0M2MDQ3ODNDMEYwODAwNzcKLToxMDI3QjAwMDhERUYwNDUwMDMyODM4MjEwMDY4NjgyMTAwRThDMDJCMDEKLToxMDI3QzAwMDAwQzQ4ODIxMDFBODQwMkIwMUU0NzAyMTAyMzg1ODIxNUYKLToxMDI3RDAwMDAxQzg2MDIxM0MwMTA4MDBBQzJEMDQ1NDNDMDEwODAwRjQKLToxMDI3RTAwMEFDMkMwNDUwM0MwMTA4MDBBQzI3MDQ3QzNDMDEwODAwRTAKLToxMDI3RjAwMEFDMkIwNDc4MEEwMDAyNjk4RjhEMDAxOEE3NDAwMTQ2QUYKLToxMDI4MDAwMDBBMDAwNDFCOEY4RjAwMTgzMEQwMDAyMDE2MDBGRkM1NkYKLToxMDI4MTAwMDI0MDMwMDBEMjQwMzAwMDUwQTAwMDIwOEE3NDMwMTRBMEYKLToxMDI4MjAwMDk3NTkwMTA0MjczOEZGRjAwQTAwMDM2QjMzMDRGRkZGQjgKLToxMDI4MzAwMDhGOEMwMDQwMTQ4Q0ZGQzgwMDAwODAyMTNDMTEwODAwRTAKLToxMDI4NDAwMDhFMzEwNDZDM0MwNDA4MDA4Qzg0MDQ2ODAyMjg3MDIxREEKLToxMDI4NTAwMDAxQzg3ODJCMDA5MDQwMjEwMTBGNjgyMTNDMDEwODAwM0QKLToxMDI4NjAwMEFDMkUwNDZDM0MwMTA4MDBBQzJEMDQ2ODBBMDAwMjY5MUYKLToxMDI4NzAwMDhGOEQwMDE4OEY5OTAwNDAxNDk5RkY1RDAwMDA2MDIxMzIKLToxMDI4ODAwMDNDMDUwODAwOENBNTA0NkMzQzEwMDgwMDhFMTAwNDY4MDAKLToxMDI4OTAwMDAwRTgyMDIxMjQ4RUZGRkUwMEFFRjgyMTAzRUU1ODJCMjUKLToxMDI4QTAwMDAyMEM1MDIxMDE0QjE4MjEzQzAxMDgwMEFDM0YwNDZDODQKLToxMDI4QjAwMDNDMDEwODAwQUMyMzA0NjgwQTAwMDQ4QjI0RUIwMDA4RTgKLToxMDI4QzAwMDhGODgwMDM4M0MwMkZGRkY4RDBFMDAwQzAxQzI2ODI0ODcKLToxMDI4RDAwMDAxQTQ2MDI1QUQwQzAwMEMwQTAwMDM3OTMwQ0ZGRkZGODYKLToxMDI4RTAwMDBBMDAwM0E5QUUwMDAwMDA5NzRCMDEwNDkyMDQwMDA0MDMKLToxMDI4RjAwMDhFMkEwMDBDMDE2NDQwMjEyNTFGRkZGMjAxNDcxODI0OTUKLToxMDI5MDAwMDMzRjlGRkZGMDA3OUMwMjVBRTM4MDAwQzBBMDAwMkQ0NkQKLToxMDI5MTAwMDhFMTkwMDEwM0MwM0ZGRkY4RDExMDAxMDAyMjMyODI0QTQKLToxMDI5MjAwMDAwQTQ3ODI1QUQwRjAwMTAwQTAwMDM3OTMwQ0ZGRkZGMTcKLToxMDI5MzAwMDk3NDUwMTA0OTIwNjAwMDQ4RTJGMDAxMDAwQTYxMDIxNzYKLToxMDI5NDAwMDI0NDlGRkVFMDFFNzY4MjQzMTJFRkZGRjAxQUU2MDI1MjgKLToxMDI5NTAwMEFFMkMwMDEwMEEwMDAyRDQ4RTE5MDAxMDhFMDYwMDBDNTYKLToxMDI5NjAwMEFFMDAwMDAwMDAwM0MwODAwMzEwODgyMTBBMDAwMkE2MDgKLToxMDI5NzAwMEFFMjYwMDIwMTQ2MDAwMEQzMDUwRkZGRjNDMDRGRkZGMjYKLToxMDI5ODAwMDAwNDQ2MDI0MDE4NDY4MjYwMDBENTgyQjAwMEM1MDJCNTUKLToxMDI5OTAwMDAxNEIxMDI0MTA0MDAwMDIwMDAwMDAwMDAwMDAwMDBENTgKLToxMDI5QTAwMDhDQTMwMDAwMEEwMDAyM0UwMDY0MTAyNTNBMTFGRkZGQ0MKLToxMDI5QjAwMDAwMTE3ODJCMDAxMDcwMkIwMUNGMjAyNDEwODAwMDAyMTIKLToxMDI5QzAwMDAwMDAwMDAwMDAwMDAwMEQ4Q0I4MDAwMDBBMDAwMjNFNkMKLToxMDI5RDAwMDM3MDJGRkZGMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3QTQKLToxMDI5RTAwMDAwMDAxODIxMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyNDMKLToxMDI5RjAwMDAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4NTMKLToxMDJBMDAwMDAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwMzAKLToxMDJBMTAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMDUKLToxMDJBMjAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4NTcKLToxMDJBMzAwMDI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMDJBNDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0QzIKLToxMDJBNTAwMDAzRTAwMDA4MDAwMDAwMDAzMDhFRkZGRjMwRDhGRkZGQzkKLToxMDJBNjAwMDAwMDU3QzAwMDFGODYwMjUzOUNERkZGRjAxQUM1MDIxNDUKLToxMDJBNzAwMDAxNEM1ODJCMDE0QjQ4MjEwMDA5NDQwMjMxMjdGRkZGMkMKLToxMDJBODAwMDAwRTgzMDIxMDAwNjI0MDIzMEM1RkZGRjAwQTQxODIxMTEKLToxMDJBOTAwMDM4NjJGRkZGMDNFMDAwMDgzMDQyRkZGRjNDMEMwODAwRjMKLToxMDJBQTAwMDhEOEMwNDg0MjQwQkZGODAyN0JERkZEMDAxODQ1MDIxMkUKLToxMDJBQjAwMDAxNEI0ODI0QUY0OTAwMjAzQzA4MDgwMDhEMDgwNDg0REQKLToxMDJBQzAwMEFGQjIwMDIwQUZCMDAwMThBRkJGMDAyOEFGQjMwMDI0RjIKLToxMDJBRDAwMEFGQjEwMDFDOTM2NjAwMDQwMTA0MzgyMTMwRTQwMDdGOEMKLToxMDJBRTAwMDAwOUExMDIxM0MwMzAwMDgwMDQzOTAyMTMwQzUwMDIwQ0IKLToxMDJBRjAwMDAzNjA4MDIxM0MwODAxMTEyNzdCMDAwODE0QTAwMDAyMUMKLToxMDJCMDAwMDI2NDYwMDcwMjY0NjAwNkM5MjEzMDAwNDk3NTEwMTA0N0IKLToxMDJCMTAwMDkyMEYwMDA0MzI2NzAwMEYzMjJFRkZGRjMxRUQwMDQwQUMKLToxMDJCMjAwMDAxQzcyODIzMTFBMDAwMDUwMDAwNDgyMTkyNTkwMEJDQ0MKLToxMDJCMzAwMDMzMzgwMDA0MTcwMDAwOTAwMDAwMDAwMDkyNDMwMEJDRUUKLToxMDJCNDAwMDMwN0YwMDA0MTNFMDAwMEYwMDAwMDAwMDEwQTAwMDBEMTMKLToxMDJCNTAwMDAwMDAwMDAwOTYwRTAwMDIyNDBBRkY4MDAwQTc2MDIxRkEKLToxMDJCNjAwMDI1Q0RGRkZFQTc0RDEwMTY5MjBCMDAwNDAxNEIyMDI0MkIKLToxMDJCNzAwMDMwODIwMEZGMTA0MDAwODUwMTBDNDAyNTNDMEYwNDAwMEUKLToxMDJCODAwMDAxMEY0MDI1OEY1MzAxNzgwNjYwRkZGRTI0MDQwMDBBRTAKLToxMDJCOTAwMEE3NDQwMTQwOTYwRDAwMDIyNDA0MDAwOTMxQUMwMDA3NEYKLToxMDJCQTAwMDAwMEM1ODIzMzE2QTAwMDdBNzRBMDE0Mjk2MDIwMDAyMkUKLToxMDJCQjAwMDI0NDNGRkZFQTc0MzAxNDRBNzQwMDE0Njk3NUYwMTA0NTkKLToxMDJCQzAwMEE3NUYwMTQ4OEY1OTAxMDgzMzM4MDAyMDUzMDAwMDAxRTYKLToxMDJCRDAwMDI0MDQwMDAxOTIwRjAwMDQzMUVFMDAxMDE1QzAwMDAyMjEKLToxMDJCRTAwMDM0ODMwMDEwMDA4MDE4MjFBNzQzMDE0QTAwMDAwMDAwMzAKLToxMDJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGNDgxMDAwQ0UKLToxMDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMDJDMTAwMDhGNTExMDAwMDYyMUZGRkUzMTEzRkZGRjEyNjAwMDAzRTkKLToxMDJDMjAwMDAwMDAwMDAwOEY0ODEwMThBQ0M4MDAwMDk2MDMwMDA2OTIKLToxMDJDMzAwMDMwN0ZGRkZGMjdGOTAwMDIwMDE5OTg4MjAwMTM4ODgwNzcKLToxMDJDNDAwMDAyM0IzMDIxOENEODAwMDAxNTIwMDA1NzAwMTgzNDAyQjgKLToxMDJDNTAwMDkyMDMwMDA0MjQwNUZGODAwMEEzRjgyNDMzRjEwMEZGNTEKLToxMDJDNjAwMDEyMjAwMDJDMDAwMDAwMDA5MjQ3MDBCQzMwRjIwMDAyNEQKLToxMDJDNzAwMDEyNDAwMDI4MDAwMDAwMDA5NzRCMTAwQzI1NjJGRkZFNTgKLToxMDJDODAwMEE3NDIxMDE2MDAwMDAwMDAzQzBBMDQwMDM1NDkwMDMwM0QKLToxMDJDOTAwMEFGNDkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMDJDQTAwMDAwMDAwMDAwOEY0QzEwMDAwNTgxRkZGRTAwMDAwMDAwQjYKLToxMDJDQjAwMDk3NDkxMDBDOEY1MTEwMUMwMEMwMjAyMTMxMjdGRkZGQjUKLToxMDJDQzAwMDI0RjIwMDMwMDAxMjE4ODIwMDAzMjg4MDAwQkJGODIxOTMKLToxMDJDRDAwMDMyMjZGRkZGQUZGMTAwMDAwRTAwMDU5NTAwMTEyQzAyMTcKLToxMDJDRTAwMDAwMTNDODgwMDMzQjk4MjE4RTc4MDAwMDAwMDI3NDAwMTYKLToxMDJDRjAwMEFGQjgwMDEwOEZBODAwMTAzMTBGRkZGRkFGQUYwMDEwNkEKLToxMDJEMDAwMDhGQTQwMDEwMDFDNDY4MjVBRkFEMDAxMDhGQTYwMDEwN0QKLToxMDJEMTAwMEFFNjYwMDAwOTc3MzAwMDg5NzZEMDAwQTk3NjYwMDBDNzYKLToxMDJEMjAwMDhGOEEwMDNDMDAwRDVDMDAzMENDRkZGRjMyNjJGRkZGNTkKLToxMDJEMzAwMDEwNEEwMDM2MDE2QzIwMjU5NjA2MDAwMjNDMTAxMDAwNTcKLToxMDJENDAwMDI0RDMwMDA4MEUwMDAxMzkzMjY0RkZGRjk3NEMwMTA0QzAKLToxMDJENTAwMDBFMDAwMTQ3MzE4NEZGRkZBRjUwMDE3ODhGQkYwMDI4N0MKLToxMDJENjAwMDhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4RTkKLToxMDJENzAwMDAzRTAwMDA4MjdCRDAwMzAxMEEwRkY3MDAwMDAwMDAwMzUKLToxMDJEODAwMDI0QTVGRkZDMEEwMDA1Q0UyNDA5MDAwNDhDRDEwMDAwMTQKLToxMDJEOTAwMEFGNTExMDE4OEY1MzAxNzgwNjYwRkY3QTI0MDQwMDBBOUYKLToxMDJEQTAwMDBBMDAwNUUzMDAwMDAwMDAwMEE3QzgyMThGODgwMDM4NTIKLToxMDJEQjAwMDhGNEUxMDFDMDAxOUMwODIwMDE4Nzg4MDAxRTgyMDIxNzUKLToxMDJEQzAwMEFDOEUwMDAwMDAwRTJDMDIwMEMwMjAyMTBFMDAwNTk1RTQKLToxMDJERDAwMDMxQzZGRkZGMDIzQjI4MjE4Q0FEMDAwMDAwMDI1NDAwRTkKLToxMDJERTAwMDAwNDAzMDIxQUZBRDAwMTA4RkFDMDAxMDMxOEJGRkZGRTEKLToxMDJERjAwMEFGQUIwMDEwOEZBMjAwMTAwMTQyNDgyNUFGQTkwMDEwMTAKLToxMDJFMDAwMDhGQTcwMDEwMEEwMDA2MTNBQ0E3MDAwMDhGOEYwMDQwQTgKLToxMDJFMTAwMDE0OEZGRkM5MDAwMDAwMDA5NzQyMDEwNDk2MEIwMDAyQzYKLToxMDJFMjAwMDNDMDUwODAwOENBNTA0NkMzMDQ5RkZGRjMxNkFGRkZGQTgKLToxMDJFMzAwMDNDMTEwODAwOEUzMTA0NjgwMTJBMzgyMTI0RjJGRkZFN0IKLToxMDJFNDAwMDAwQjI0MDIxMDAxMkZGQzMwMTEyQzgyQjAyM0ZDMDIxNzMKLToxMDJFNTAwMDAzMTkyMDIxM0MwMTA4MDBBQzI4MDQ2QzNDMDEwODAwNDcKLToxMDJFNjAwMEFDMjQwNDY4MEEwMDA2NEQwMDAwMDAwMDAwQTQxMDJCRUEKLToxMDJFNzAwMDEwNDAwMDA5MjQwMzAwMDEwMDA1Mjg0MDAwQTQxMDJCODUKLToxMDJFODAwMDA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQzAwMDUyODQwNDQKLToxMDJFOTAwMDEwNjAwMDA3MDAwMDAwMDAwMDg1MzAyQjE0QzAwMDAyMDUKLToxMDJFQTAwMDAwMDMxODQyMDA4NTIwMjMxNDYwRkZGQjAwMDUyODQyMjAKLToxMDJFQjAwMDAzRTAwMDA4MDA4MDEwMjE4Rjg1MDAyQzI3QkRGRkU4NkIKLToxMDJFQzAwMDAwMDUzMDI3MkNDMzAwMDEyQ0E0MDAwMjAwODMxMDI1MkMKLToxMDJFRDAwMDEwNDAwMDAzQUZCRjAwMTAyNDA1MDA3RkFGODUwMDJDMTkKLToxMDJFRTAwMDAwMDUyODI3MzBBNUZGRkYwRTAwMDU3NDI0MDQyNkY1RjEKLToxMDJFRjAwMDhGODMwMDMwMjQwNDAyQkQwMDQwMzAyMTAwODMzODJCMzIKLToxMDJGMDAwMDEwRTAwMDA5MjQwNTAwMDEwMDA0MjA0MDAwODMxMDJCN0MKLToxMDJGMTAwMDA0ODAwMDAzMDAwNTI4NDA1NDQwRkZGQzAwMDQyMDQwQ0EKLToxMDJGMjAwMDEwQTAwMDA4MDBDMzUwMjEwMDY0NDAyQjE1MDAwMDAyQ0YKLToxMDJGMzAwMDAwMDUyODQyMDA2NDE4MjMxNEEwRkZGQjAwMDQyMDQyNkYKLToxMDJGNDAwMDAwQzM1MDIxOEZCRjAwMTAwMDBBNEMwMjMxMjIwMEZGNDUKLToxMDJGNTAwMDI3QkQwMDE4QUY4QTAwMkMwM0UwMDAwOEFGODkwMDMwQkQKLToxMDJGNjAwMDBBMDAwMDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMjQKLToxMDJGNzAwMDc0Nzg3MDM0MkUzNjJFMzEzNjAwMDAwMDA0MDYxMDAwQUUKLToxMDJGODAwMDAwMDAwMDBBMDAwMDAxMzYwMDAwRUE2MDAwMDAwMDAwQjYKLToxMDJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMDJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMDJGQzAwMDAwMDAwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMDJGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMDJGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMDJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzQkUKLToxMDMwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwNjAKLToxMDMwMTAwMDI0NDIzQUEwM0MwMzA4MDAyNDYzM0M1NEFDNDAwMDAwMjYKLToxMDMwMjAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwQjcKLToxMDMwMzAwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDI2MTAwMDk4NEIKLToxMDMwNDAwMDNDMUMwODAwMjc5QzNBQTAwRTAwMDMwNTAwMDAwMDAwNkQKLToxMDMwNTAwMDAwMDAwMDBEOEY4MzAwMzgzQzA4ODAwMDM1MDcwMDcwQTkKLToxMDMwNjAwMDhDRTUwMDAwMDA4MzMwMjUzQzAyOTAwMDAwQzIyMDI1NDIKLToxMDMwNzAwMEFGODUwMDMwQUY0NDAwMjA4RjQ5MDAyMDA1MjBGRkZFQkYKLToxMDMwODAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ1MDAwMDhGODYwMDMwNjUKLToxMDMwOTAwMDNDMTkwODAwOEYzOTAwN0MzQzBFMDgwMDhEQ0UwMDc4NkEKLToxMDMwQTAwMDAwQTYyMDIzMDMyNDU4MjEwMDAwNzgyMTAxNjQ2ODJCMDYKLToxMDMwQjAwMDAxQ0Y2MDIxMDE4RDUwMjEzQzAxMDgwMEFDMkIwMDdDMjgKLToxMDMwQzAwMDNDMDEwODAwQUMyQTAwNzgwM0UwMDAwODAwMDAwMDAwODIKLToxMDMwRDAwMDBBMDAwMDNEMjQwNDAwMDE4Rjg0MDAzODNDMDU4MDAwNzQKLToxMDMwRTAwMDM0QTIwMDAxMDA4MjE4MjUwM0UwMDAwOEFGNDMwMDIwNEQKLToxMDMwRjAwMDAzRTAwMDA4MDAwMDEwMjEzMDg0RkZGRjMwQTVGRkZGMkYKLToxMDMxMDAwMDEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyRUEKLToxMDMxMTAwMDAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwQjAKLToxMDMxMjAwMDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwNEMKLToxMDMxMzAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwN0UKLToxMDMxNDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMUEKLToxMDMxNTAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwQzAKLToxMDMxNjAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBNDcKLToxMDMxNzAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDMwOEFGRkZGMDAKLToxMDMxODAwMDkzQTgwMDEzQTc0QTAxNDQ5NzQ5MEUxNjMwQzYwMEZGQzIKLToxMDMxOTAwMDNDMDIxMDAwQTc0OTAxNDZBRjQ1MDE0OEEzNDYwMTUyMzEKLToxMDMxQTAwMEE3NDgwMTVBQUY0NzAxNjA4RkE0MDAxODhGQTMwMDE0RUQKLToxMDMxQjAwMEE3NDQwMTU4QUY0MzAxNTQwM0UwMDAwOEFGNDIwMTc4MkYKLToxMDMxQzAwMDAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDM0NjIwMDcwNEYKLToxMDMxRDAwMDhDNDkwMDAwOEY4ODAwM0MyNDg0MDAwNzI3QkRGRkY4M0QKLToxMDMxRTAwMDMwODRGRkY4QUY4OTAwMzA5NzREMDA4QTMxQUNGRkZGODMKLToxMDMxRjAwMEFGQUMwMDAwOEZBQjAwMDAwMTY4NTAyMzI1NDdGRkZGRjQKLToxMDMyMDAwMDMwRTYxRkZGMDBDNDI4MkIxNEEwRkZGNzNDMEM4MDAwMDEKLToxMDMyMTAwMDM1OEIwMDcwOEQ2QTAwMDAzQzA3MDgwMDhDRTcwMDg0NDUKLToxMDMyMjAwMDNDMDYwODAwOENDNjAwODAwMDA4MTA4MjAxNDkxODIzNjMKLToxMDMyMzAwMDAwMDI3ODgwMDBFMzcwMjEwMDAwMjAyMTAxQzNDODJCMjgKLToxMDMyNDAwMDAwQzRDMDIxMDFGQTQwMjEwMzE5NDgyMTI1MDI0MDAwOTEKLToxMDMyNTAwMDI3QkQwMDA4M0MwMTA4MDBBQzJFMDA4NDNDMDEwODAwOUEKLToxMDMyNjAwMEFDMjkwMDgwMDNFMDAwMDgwMDAwMDAwMDhGODIwMDNDRDEKLToxMDMyNzAwMDI0ODYwMDA3MzBDNUZGRjgwMEEyMTgyMTMwNjQxRkZGMjQKLToxMDMyODAwMDAzRTAwMDA4QUY4NDAwM0MzQzBFMjBGRjI3QkRGRkUwQjgKLToxMDMyOTAwMDNDMUE4MDAwM0MwRjgwMDgzNUNERkZGREFGQkYwMDE4MDEKLToxMDMyQTAwMEFGQjEwMDE0QUZCMDAwMTBBRjhGMDA0NEFGNEQwRTAwQUYKLToxMDMyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMDMyQzAwMDAwMDAwMDAwM0MwQzAwRkYzNThCRkZGREFGNEIwRTAwRjMKLToxMDMyRDAwMDNDMDY2MDA0OENDOTUwMDAyNDBBRkY3RjNDMTE2MDAwNEEKLToxMDMyRTAwMDAxMkE0MDI0MzUwNzM4MENBQ0M3NTAwMDhFMjQwNDM4MUUKLToxMDMyRjAwMDI0MDUwMDA5QUY0NTAwMDgzMDgzRkZGRjM4NjIyRjcxQjUKLToxMDMzMDAwMDI0NTBDMEIzQUY4MDAwNEMwRTAwMDA2NEFGODAwMDNDN0UKLToxMDMzMTAwMDUyMDAwMDAxQUUyMDQ0MkMwRTAwMDQ2MDAwMDAwMDAwQUEKLToxMDMzMjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAwRTc3MDUKLToxMDMzMzAwMDI3QkQwMDIwMjdCREZGRDBBRkIyMDAyOEFGQjEwMDI0QzkKLToxMDMzNDAwMEFGQkYwMDJDQUZCMDAwMjA5MzYyMDAwODAwODA5MDIxMzYKLToxMDMzNTAwMDAwQTA4ODIxMTQ0MDAwMkQyNDA0MDAxMDBFMDAwMDlBQzMKLToxMDMzNjAwMDAwMDAwMDAwOEY4RTAwNEMzQzEwMzIwMDMxQzYwMEZGODAKLToxMDMzNzAwMDAwMDY3QzAwMDFGMDYwMjUyNUNEMDAwMUFGOEQwMDRDREEKLToxMDMzODAwMEFDNEMwMDAwOTM2QjAwMDk5MzY5MDAwQTMxNkEwMEZGOUUKLToxMDMzOTAwMDAwMEEzQzAwMzEyODAwRkYwMEU4MjAyNUFDNDQwMDA0NkUKLToxMDMzQTAwMDhGODMwMDRDMDY0MDAwNDNBQzQzMDAwOEFDNDAwMDBDNDcKLToxMDMzQjAwMDk3OTgwMDQwMzMwNTAwMDgxNEEwMDAwMjI2MjgwMDA2NTQKLToxMDMzQzAwMDI2MjgwMDAyOTc0MjBFMTQ4RjQ1MEUxQzhGNjcwMDA0QkEKLToxMDMzRDAwMDkzN0YwMDAyMzA0NEZGRkYzM0Y5MDBGRkFGQjkwMDEwQzQKLToxMDMzRTAwMDhGNzEwMDE0QUZBODAwMTgwRTAwMDA4N0FGQjEwMDE0NTEKLToxMDMzRjAwMDhGQkYwMDJDOEZCMjAwMjg4RkIxMDAyNDhGQjAwMDIwMjcKLToxMDM0MDAwMDI0MDQwMDEwMEEwMDAwQzMyN0JEMDAzMDkzNjkwMDA5OUUKLToxMDM0MTAwMDkzNjgwMDBCMzEyMzAwRkYzMTAyMDBGRjAwNjI4MDIxMUUKLToxMDM0MjAwMDI2MUYwMDBBMzNGMEZGRkYwRTAwMDA5QTAyMDAyMDIxNDEKLToxMDM0MzAwMDhGODYwMDRDM0MwRDQxMDAyNEQ5MDAwMUFGOTkwMDRDMEYKLToxMDM0NDAwMDkzNzgwMDA5MzBDNjAwRkYwMDA2NzQwMDMzMDUwMEZGQzIKLToxMDM0NTAwMDI0QUYwMDAyMDFDRjYwMjUwMThENTgyNUFDNEIwMDAwNDAKLToxMDM0NjAwMDhGNkEwMDBDOTc0NDBFMTQwMTUyMzgyNUFDNDcwMDA0QjMKLToxMDM0NzAwMDhGNDUwRTFDOEY2NzAwMDQ5MzY5MDAwMjMwODRGRkZGQTQKLToxMDM0ODAwMDMxMjgwMEZGQUZBODAwMTA4RjYzMDAxNEFGQjEwMDE4RkYKLToxMDM0OTAwMDBFMDAwMDg3QUZBMzAwMTQwMjAwMjAyMThGQkYwMDJDNzQKLToxMDM0QTAwMDhGQjIwMDI4OEZCMTAwMjQ4RkIwMDAyMDBBMDAwMEMzMjMKLToxMDM0QjAwMDI3QkQwMDMwM0MxMjgwMDAwQTAwMDExNEFDNTIwMDBDMDEKLToxMDM0QzAwMDI3QkRGRkQ4QUZCMzAwMUNBRkJGMDAyMEFGQjIwMDE4QkMKLToxMDM0RDAwMEFGQjEwMDE0QUZCMDAwMTA5MzYyMDAwODE0NDAwMDgxMzcKLToxMDM0RTAwMDAwODA5ODIxQUY2MDAwMEM5Nzg1MDA0MDMwQTQ0MDAwMTgKLToxMDM0RjAwMDEwODAwMDhCMjQwMzAwMTYyNDEwNDAwN0EzNjMwMDBBRTkKLToxMDM1MDAwMEFGNzAwMDE0OTM4RjAwNDI4RjZDMDAxNDMxRUUwMDA3RUYKLToxMDM1MTAwMDAwMEU2QTQwMDE4RDU4MjVBRjZCMDAxNDk3OEEwMDQwNTkKLToxMDM1MjAwMDhGNjgwMDE0MzE0OTAwMTAwMTA5MzgyNUFGNjcwMDE0NzUKLToxMDM1MzAwMDk3ODYwMDQwMzBDMzAwMDg1MDYwMDA4RDAwMDAyODIxQUQKLToxMDM1NDAwMDhGNjYwMDE0M0MwMzEwMDAzQzAyODEwMDAwQzMyODI1NTQKLToxMDM1NTAwMEFGNjUwMDE0OTc0NDBFMEEyNDE4MDAwRTM0MDVGRkZDRDIKLToxMDM1NjAwMDMwOUZGRkZGMDNFMkM4MjVBRjc5MDAwNEEzNzgwMDAyNzMKLToxMDM1NzAwMDkzNzIwMDBBMjY1MTAwMDRBMzcxMDAwQTk3ODMwMDQwNDkKLToxMDM1ODAwMDkzNjQwMDBBMzA2NjFGMDAwMDA2MTE4MzAwNDRGODIxOEUKLToxMDM1OTAwMDI3RjkwMDI4QTM3OTAwMDk5NzU4MEUwQ0E3NzgwMDEwODYKLToxMDM1QTAwMDkzNzIwMDA5MjY1MTAwMDIzMjMwMDAwNzAwMTA3ODIzODAKLToxMDM1QjAwMDMxRUUwMDA3QTM2RTAwMEI5MzZEMDAwOTk3NkMwMDEwQUQKLToxMDM1QzAwMDhGOTAwMDM0OTc4OTAwNDAzMUFCMDBGRjAxNkM1MDIxOEYKLToxMDM1RDAwMDAxNDU0MDIxMzEyNzAwNDAxMEUwMDAwNTMxMDVGRkZGODMKLToxMDM1RTAwMDAwQjAzODJCM0MwNjgwMDAxMEUwMDAxNDAwMDA4ODIxNTkKLToxMDM1RjAwMDAyMDU0MDJCMTUwMDAwMzMwMDAwMjAyMThGNEEwRTE0RDUKLToxMDM2MDAwMEFGNEEwRTEwOEY0OTBFMUNBRjQ5MEUxOEFGNDUwRTAwODEKLToxMDM2MTAwMDhGNEMwMDAwMzE4QjAwMDgxMTYwRkZGRDAwMDAwMDAwOUUKLToxMDM2MjAwMDk3NEQwRTA4MDBBMDgwMjEwMDAwMzAyMUE3OEQwMDQwOUEKLToxMDM2MzAwMDhGNDUwRTA0MjQxMTAwMDFBRjg1MDAzNDk3NkUwMDEwRjEKLToxMDM2NDAwMDMxRDJGRkZGOEU2NDAwMDAwMDkwMTAyMzE0NDAwMDA5NjcKLToxMDM2NTAwMEFFNjIwMDAwOEY2QTAwMTQ4Rjg3MDA0ODM1NDkwMDQwMzEKLToxMDM2NjAwMEFGNjkwMDE0OEY0ODBFMTBBQ0U4MDAyMDhGNDMwRTE4OEQKLToxMDM2NzAwMEFDRTMwMDI0MDBDMDIwMjEwRTAwMDBGNTAyMDAyODIxNDgKLToxMDM2ODAwMDhFNjYwMDAwMTRDMDAwMDUwMDAwMDAwMDhGNkIwMDE0NUYKLToxMDM2OTAwMDI0MENGRkJGMDE2Qzk4MjRBRjczMDAxNDhGNkQwMDBDRDUKLToxMDM2QTAwMDAxQjIyODIxQUY2NTAwMEM5MzcyMDAwODE2NDAwMDAzOTgKLToxMDM2QjAwMDAwMDAwMDAwMTYyMDAwMzEwMDAwMDAwMEEzNzEwMDA4ODcKLToxMDM2QzAwMDAyMDAyMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OTIKLToxMDM2RDAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4QUIKLToxMDM2RTAwMDI3QkQwMDI4OEY5MDAwMzQ5NzkxMDA0MDNDMDY4MDAwNTEKLToxMDM2RjAwMDAyMDA5MDIxMzIyRjAwNDAxNUUwRkZEMjAwMDA4ODIxMDcKLToxMDM3MDAwMDk3N0YwMDEwOEY5ODAwMzQzM0Y5RkZGRjE3MzhGRkVERDMKLToxMDM3MTAwMDAwMDAyMDIxMDAwMDMwMjEwQTAwMDFCOTI0MTEwMDAxMUQKLToxMDM3MjAwMDI0MDMwMDBFMjQxMDQwMDdBMzYzMDAwQUFGNzAwMDE0QTYKLToxMDM3MzAwMDkzOEYwMDQyOEY2QzAwMTQzMUVFMDAwNzAwMEU2QTQwMzgKLToxMDM3NDAwMDAxOEQ1ODI1QUY2QjAwMTQ5NzhBMDA0MDhGNjgwMDE0RDQKLToxMDM3NTAwMDMxNDkwMDEwMDEwOTM4MjVBRjY3MDAxNDk3ODYwMDQwRjEKLToxMDM3NjAwMDMwQzMwMDA4MTQ2MEZGNzYwMDAwMDAwMDAwMDAyODIxMkMKLToxMDM3NzAwMEFGNjAwMDA0MEEwMDAxODdBMzYwMDAwMjhGNkYwMDE0OEQKLToxMDM3ODAwMDNDMTlFRkZGMzczOEZGRkUwMUY4NzAyNDBBMDAwMUQ3MUIKLToxMDM3OTAwMEFGNkUwMDE0OEY4NzAwMzg4RjhBMDA0NDI3QkRGRkUwOEEKLToxMDM3QTAwMDhGODYwMDQ4QUZCMDAwMThBRkJGMDAxQzhGNDUwMTA0RTIKLToxMDM3QjAwMDhENDkwMEFDQUY0NzAwODA4Q0M4MDAyMDAwQTkzODIzOTkKLToxMDM3QzAwMDAwMDA4MDIxQUY0ODBFMTA4RjQ0MEUxMDAwMDA0ODIxRTkKLToxMDM3RDAwMEFGNDQwRTE0OENDMjAwMjRBRjQyMEUxODhGNDMwRTE4NTMKLToxMDM3RTAwMEFGNDMwRTFDMTBFMDAwMzYyRDM5MDAwMTkzNkIwMDA4MkEKLToxMDM3RjAwMDExNjAwMDRGMDAwMDAwMDA5NzZFMDAxMDMxQ0RGRkZGRjgKLToxMDM4MDAwMDAwRUQ2MDJCMTU4MDAwNEEwMDAwMDAwMDk3NzgwMDEwNDIKLToxMDM4MTAwMDMzMEZGRkZGQUY0RjBFMDA4RjVGMDAwMDMzRjkwMDA4M0EKLToxMDM4MjAwMDEzMjBGRkZEMDAwMDAwMDA5NzQyMEUwODhGNDYwRTA0OTMKLToxMDM4MzAwMDMwNDVGRkZGMzBBMzAwMDExMDYwMDA4QTAwMDAwMDAwNDcKLToxMDM4NDAwMDAwMDAwMDBEMzBBOEEwNDAyNDA0MDA0MDExMDQwMDNCRkIKLToxMDM4NTAwMDMwQTlBMDAwMTEyMDAwODUwMDAwMDAwMDkzNkMwMDA4MzIKLToxMDM4NjAwMDUxODAwMDA5MjdBNDAwMTA5NzZGMDAxMDMxRUVGRkZGNzAKLToxMDM4NzAwMDAwQ0U2ODJCMTFBMDAwMDQyN0E0MDAxMDMwQjgwMDQwMkYKLToxMDM4ODAwMDEzMDAwMDdBMDAwMDAwMDBBRkE3MDAxMEE3ODUwMDQwRDkKLToxMDM4OTAwMEFGODYwMDM0MEUwMDAxNTgwMDAwMDAwMDAwNDA0ODIxQUYKLToxMDM4QTAwMDE0NDBGRkQwOEZBNzAwMTA4RjQyMEUxNDhGODQwMDQ4NjEKLToxMDM4QjAwMEFDODIwMDIwOEY0NzBFMUNBQzg3MDAyNDJEMzkwMDAxRkMKLToxMDM4QzAwMDAzMzAzMDI1MTBDMDAwMTc4RkJGMDAxQzhGODQwMDM4RDQKLToxMDM4RDAwMDI0MTAwRjAwMTA5MDAwODUwMDAwMDAwMDhGNEYwMTc4MjkKLToxMDM4RTAwMDA1RTBGRkZFMjQxODBGMDAxMDk4MDA2RjAwMDAwMDAwOTQKLToxMDM4RjAwMDhGNDcwRTE0MjQwMjAyNDAzQzEwMTAwMEFGNDcwMTQ0RDEKLToxMDM5MDAwMDhGNDkwRTFDQUY0OTAxNDhBMzQwMDE1MkE3NDAwMTVBRkMKLToxMDM5MTAwMEFGNDAwMTYwQTc0MDAxNThBRjQyMDE1NEFGNTAwMTc4NTkKLToxMDM5MjAwMDhGQkYwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDIwRTcKLToxMDM5MzAwMEFGNDcwRTAwMEEwMDAyMkUwMDAwMDAwMDhGNDkwMTc4RjgKLToxMDM5NDAwMDA1MjBGRkZFMjQwQTA4MDA4Rjg0MDAzQ0FGNEEwMTc4NUUKLToxMDM5NTAwMDk3NTgwMDhBMzMwRkZGRkYwMUU0NzAyMzI1Q0RGRkZGNDYKLToxMDM5NjAwMDMxQUMxRkZGMkQ4QjAwMDgxNTYwRkZGOTAwMDAwMDAwMkYKLToxMDM5NzAwMDhGODMwMDRDOEY5RjAwMzgwMEMwNDgyMTAzNDQyMDIxRDIKLToxMDM5ODAwMDI0NjYwMDAxMjQxOTBGMDBBRjg2MDA0QzMwNkEwMEZGNDYKLToxMDM5OTAwMDAwRTkzODIzMjQ4NjQwMDAxM0Y5MDAwNTI0MDgwMDAxQkIKLToxMDM5QTAwMDkzOEIwMDQyMzE2ODAwMDcwMDA4MTI0MDM0NDgwMDAxNDAKLToxMDM5QjAwMDAwMEE3QzAwM0MxODAxMDAwMUY4NzAyNUFDOEU0MDAwMjQKLToxMDM5QzAwMDhGOEQwMDRDMzBBQzAwMzYzMEE0MDAwOEFDQ0QwMDA0MjQKLToxMDM5RDAwMDEwODAwMDJFMDEwQzMwMjU5NzREMEUwQThGOEMwMDNDNzQKLToxMDM5RTAwMDNDMDI4MTAwMzFBNEZGRkYyNThCMDAwODAwODI0MDI1QTYKLToxMDM5RjAwMDNDMDMxMDAwMzE2NTFGRkYyNTM5MDAwNjI0MUYwMDBFMEYKLToxMDNBMDAwMEFGNDgwMTYwMDBDMzMwMjVBNzVGMDE1QUFGODUwMDNDNzUKLToxMDNBMTAwMEE3NTkwMTU4MTRFMDAwMEE4RjlGMDAzODI0MDUwRjAwQjEKLToxMDNBMjAwMDUzRTUwMDAyMjQxMDAwMDEzNEM2MDA0MDhGNDMwRTEwRkQKLToxMDNBMzAwMDhGODgwMDQ4QUQwMzAwMjA4RjRCMEUxOEFEMEIwMDI0N0IKLToxMDNBNDAwMDhGNDIwRTE0QUY0MjAxNDQ4RjQ0MEUxQ0FGNDQwMTQ4MTQKLToxMDNBNTAwMEEzNEEwMTUyM0MwQTEwMDBBRjQ2MDE1NDBBMDAwMjIxNTkKLToxMDNBNjAwMEFGNEEwMTc4MTRDMEZGNzgzMEE4QTA0MDhGNDIwRTE0RUUKLToxMDNBNzAwMDhGODQwMDQ4MDAwMDQ4MjFBQzgyMDAyMDhGNDcwRTFDMzQKLToxMDNBODAwMEFDODcwMDI0MEEwMDAyNTgyRDM5MDAwMThGOTgwMDNDQjEKLToxMDNBOTAwMDI1MzkwMDAyQTc1OTAxNTgyNzBGMDAwODMxRUUxRkZGRjIKLToxMDNBQTAwMDBBMDAwMkFEQUY4RTAwM0NBRjQwMDE0QzExMjAwMDJDNEIKLToxMDNBQjAwMDAwMDAwMDAwOEY0NjBFMTBBRjQ2MDE0NDhGNDMwRTE4RTEKLToxMDNBQzAwMDI0MDIwMDQwM0MxMDEwMDBBRjQzMDE0OEEzNDAwMTUyQzMKLToxMDNBRDAwMEE3NDAwMTVBQUY0MDAxNjBBNzQwMDE1OEFGNDIwMTU0Q0UKLToxMDNBRTAwMEFGNTAwMTc4MEEwMDAyNzE4RkJGMDAxQzExMjAwMDA2NDAKLToxMDNBRjAwMDAwMDAwMDAwOTc1RjBFMDgzM0U1MDA0MDE0QTAwMDAyQUMKLToxMDNCMDAwMDAwMDAwMDAwMDAwMDAwMEQ4RjQ4MDE3ODA1MDBGRkZFNTYKLToxMDNCMTAwMDAwMDAwMDAwOTc0RTBFMTAzQzBEMDUwMDI0MDMyMDAwMEQKLToxMDNCMjAwMDMxQ0NGRkZGMDE4RDEwMjVBRjQyMDE0QzhGNDQwRTE0QTQKLToxMDNCMzAwMDNDMEIxMDAwQUY0NDAxNDQ4RjRBMEUxQ0FGNEEwMTQ4QjEKLToxMDNCNDAwMEEzNDAwMTUyOEY4NDAwMzhBNzQwMDE1QUFGNDAwMTYwNjIKLToxMDNCNTAwMEE3NDAwMTU4QUY0MzAxNTQwQTAwMDI1RkFGNEIwMTc4MDAKLToxMDNCNjAwMDhGNTkwRTE0QUY1OTAxNDQ4RjQzMEUxQzBBMDAwMkQ5MUQKLToxMDNCNzAwMDI0MDIwMDQwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0MkYKLToxMDNCODAwMEFGQjAwMDEwQUZCRjAwMUMwRTAwMDBDQTAwMDAwMDAwNjQKLToxMDNCOTAwMDNDMDI4MDAwOEY4QTAwNDQzNDUwMDA3MDNDMTIwODAwQzAKLToxMDNCQTAwMDI2NTIzQjcwMDIwMDg4MjE4RTA4MDAwMDhGNDUwMDAwREQKLToxMDNCQjAwMDM4QTQwMDAxMzA4MzAwMDExMDYwMDAxN0FGODgwMDMwODYKLToxMDNCQzAwMDAyMjA0ODIxOEQyQzAwMDAzQzAyMDgwMDhDNDIwMDZDMzEKLToxMDNCRDAwMDNDMTgwODAwOEYxODAwNjgwMTg4MTgyMzAwNDM2ODIxRUEKLToxMDNCRTAwMDAwMDBDODIxMDFBMzc4MkIwMzE5NzAyMTAxQ0Y0MDIxQzcKLToxMDNCRjAwMDNDMDEwODAwQUMyRDAwNkMzQzAxMDgwMEFDMjgwMDY4QkEKLToxMDNDMDAwMDhGNEIwMDAwMzk2NzAwMDEzMEU2MDAwMTE0QzBGRkVENjIKLToxMDNDMTAwMDAxODA0MDIxQUY4QzAwMzA4RTE4MDAwMDNDMEUwODAwNUYKLToxMDNDMjAwMDhEQ0UwMDZDM0MwQzA4MDA4RDhDMDA2ODAzMDg3ODIzNTYKLToxMDNDMzAwMDAxQ0YyODIxMDAwMDQwMjEwMEFGMzAyQjAxODg1ODIxRkUKLToxMDNDNDAwMDAxNjYyMDIxM0MwMTA4MDBBQzI1MDA2QzNDMDEwODAwMDUKLToxMDNDNTAwMEFDMjQwMDY4OEY0OTAxMDAyNTQ3MDA4OEFGODcwMDQ4RTEKLToxMDNDNjAwMEFGODkwMDM4QUY0OTAwMjA4RTA3MDAwMEFGODcwMDMwRDEKLToxMDNDNzAwMDhGNTkwMTc4MDcyMEZGRkUwMDAwMDAwMDhFMEYwMDAwMjIKLToxMDNDODAwMDNDMEQwODAwOERBRDAwNzQzQzBDMDgwMDhEOEMwMDcwNUMKLToxMDNDOTAwMDAxRTc3MDIzMDFBRTI4MjEwMDAwMzAyMTAwQUU1ODJCMkYKLToxMDNDQTAwMDAxODYyMDIxMDA4QjM4MjEyNDA5MDgwMDNDMDEwODAwRUUKLToxMDNDQjAwMEFDMjUwMDc0M0MwMTA4MDBBQzI3MDA3MEFGNDkwMTc4QzYKLToxMDNDQzAwMDkzNDMwMTA4QTM4MzAwNDI5MzgyMDA0MjMwNUYwMDAxQzYKLToxMDNDRDAwMDE3RTAwMDE1OEY4MzAwMzgyNDFGMEQwMDEwN0YwMDE5OTYKLToxMDNDRTAwMDI0MDIwRjAwMTA2MjAwMUQwMDAwMDAwMDkxNDcwMDAwMzgKLToxMDNDRjAwMDI0MDMwMDUwMzBFOTAwRkYxMTIzMDAwNDNDMDU0MDAwN0MKLToxMDNEMDAwMEFGNDUwMTM4MEEwMDAzMTIwMDAwMDAwMDBFMDAwOERBNzcKLToxMDNEMTAwMDAwMDAwMDAwOEY4QTAwNDQzQzA1NDAwMEFGNDUwMTM4OTgKLToxMDNEMjAwMDBBMDAwMzEyMDAwMDAwMDA5Mzk5MDA0MjMzMzgwMDA2OTUKLToxMDNEMzAwMDAwMTg1MTAwMEUwMDAyMEQwMTUyRDgyMTBBMDAwMzZFMzYKLToxMDNENDAwMDhGOEEwMDQ0M0MxQjA4MDAyNzdCM0JGMDBFMDAwMjBEQ0QKLToxMDNENTAwMDAwMDAwMDAwMEEwMDAzNkU4RjhBMDA0NDNDMUIwODAwMkMKLToxMDNENjAwMDI3N0IzQzEwMEUwMDAyMEQwMDAwMDAwMDBBMDAwMzZFQ0QKLToxMDNENzAwMDhGOEEwMDQ0OTBBQTAwMDE4RkFCMDAxMDhDQUMwMDEwMTkKLToxMDNEODAwMDNDMDMwMEZGOEQ2ODAwMDRBRDZDMDAyMDhDQUQwMDE0NzYKLToxMDNEOTAwMDAwRTA2MDIxMzQ2MkZGRkZBRDZEMDAyNDhDQTcwMDE4QTUKLToxMDNEQTAwMDNDMDlGRjAwMDEwOUMwMjRBRDY3MDAyODhDQUUwMDFDNEYKLToxMDNEQjAwMDAxODJDODI0MDMxOTc4MjVBRDZGMDAwNEFENkUwMDJDNzQKLToxMDNEQzAwMDhDQUQwMDA4MzE0QTAwRkZBRDZEMDAxQzk0QTkwMDAyQzMKLToxMDNERDAwMDMxMjhGRkZGQUQ2ODAwMTA5MEE3MDAwMEE1NjAwMDAyMjkKLToxMDNERTAwMEExNjAwMDA0QTE2NzAwMDA5MEEzMDAwMjMwNjIwMEZGMDAKLToxMDNERjAwMDAwMDIxOTgyMTA2MDAwMDUyNDA1MDAwMTEwNjUwMDBFMDQKLToxMDNFMDAwMDAwMDAwMDAwMDNFMDAwMDhBMTZBMDAwMThDRDgwMDI4MkYKLToxMDNFMTAwMDM1NEEwMDgwQUQ3ODAwMTg4Q0NGMDAxNEFENkYwMDE0QzcKLToxMDNFMjAwMDhDQ0UwMDMwQUQ2RTAwMDg4Q0M0MDAyQ0ExNkEwMDAxNUQKLToxMDNFMzAwMDAzRTAwMDA4QUQ2NDAwMEM4Q0NEMDAxQ0FENkQwMDE4RDMKLToxMDNFNDAwMDhDQzkwMDE0QUQ2OTAwMTQ4Q0M4MDAyNEFENjgwMDA4NEEKLToxMDNFNTAwMDhDQzcwMDIwQUQ2NzAwMEM4Q0MyMDAxNDhDODMwMDY0RkEKLToxMDNFNjAwMDAwNDNDODJCMTMyMDAwMDcwMDAwMDAwMDhDQzIwMDE0ODAKLToxMDNFNzAwMDE0NENGRkU0MDAwMDAwMDAzNTRBMDA4MDAzRTAwMDA4MTUKLToxMDNFODAwMEExNkEwMDAxOEM4MjAwNjQwQTAwMDNDNDAwMDAwMDAwRTMKLToxMDNFOTAwMDkwQUEwMDAwMjdCREZGRjg4RkE5MDAxQ0EzQUEwMDAwNkMKLToxMDNFQTAwMDhGQUUwMDAwM0MwRkZGODA4RkE4MDAxODM1RTJGRkZGQTcKLToxMDNFQjAwMDhDQ0QwMDJDMDFDMjYwMjRBRkFDMDAwMEExMjAwMDA0MTYKLToxMDNFQzAwMDAwRTA2MDIxQTdBMDAwMDI4RkI4MDAwMDhEMjcwMDA0NDkKLToxMDNFRDAwMDAxODgxODIxMDBBMDU4MjEwMEMwNTAyMTAwNkQyODI2MUIKLToxMDNFRTAwMDNDMDZGRjdGM0MwRjAwRkYyQ0FEMDAwMTM1RUVGRkZGQ0QKLToxMDNFRjAwMDM0RDlGRkZGM0MwMkZGMDAwMzE5MzAyNDAwMEQxREMwMjAKLToxMDNGMDAwMDAxMEVDODI0MDBFMkMwMjQwMEMzNzAyNTAzMTk3ODI1REYKLToxMDNGMTAwMEFEMkUwMDAwQUQyRjAwMDQ4RDQ1MDAyNEFGQUUwMDAwOTMKLToxMDNGMjAwMEFEMjUwMDA4OEQ0RDAwMjAyNDA1RkZGRkFEMkQwMDBDQjAKLToxMDNGMzAwMDk1NjgwMDAyMzEwN0ZGRkZBRDI3MDAxMDkxNjYwMDE4NTkKLToxMDNGNDAwMDMwQzIwMEZGMDAwMjE5QzI1MDYwMDAwMThENDUwMDM0RUMKLToxMDNGNTAwMEFEMjUwMDE0OEQ2NzAwMDgyN0JEMDAwOEFEMjcwMDFDQTMKLToxMDNGNjAwMDhDOEIwMENDQUQyQzAwMjhBRDIwMDAyQ0FEMkIwMDI0NzgKLToxMDNGNzAwMEFEMjAwMDE4MDNFMDAwMDhBRDIwMDAyMDI3QkRGRkUwQzEKLToxMDNGODAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDNEIKLToxMDNGOTAwMDkwOTgwMDAwMDBDMDg4MjEzQzBEMDBGRjMzMEYwMDdGODcKLToxMDNGQTAwMEEwQ0YwMDAwOTA4RTAwMDEzNUFDRkZGRjNDMEFGRjAwNUYKLToxMDNGQjAwMEEwQ0UwMDAxOTRBNjAwMUVBMjIwMDAwNDhDQUIwMDE0MjkKLToxMDNGQzAwMDhFMjkwMDA0MDBBMDgwMjEwMTZDMjgyNDAxMkE0MDI0QUQKLToxMDNGRDAwMDAwODA5MDIxMDEwNTIwMjVBNjI2MDAwMkFFMjQwMDA0QzEKLToxMDNGRTAwMDI2MDUwMDIwMjYyNDAwMDgwRTAwMDA3MjI0MDYwMDAyODgKLToxMDNGRjAwMDkyNDcwMDAwMjYwNTAwMjgyNjI0MDAxNDAwMDcxRTAwMTIKLToxMDQwMDAwMDAwMDMxNjAzMjQwNjAwMDQwNDQwMDAwMzI0MDNGRkZGRkEKLToxMDQwMTAwMDk2NTkwMDAyMzMyM0ZGRkYwRTAwMDA3MkFFMjMwMDEwRkEKLToxMDQwMjAwMDI2MjQwMDI0OEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0MEIKLToxMDQwMzAwMDhGQjAwMDEwMjQwNTAwMDMwMDAwMzAyMTBBMDAwMDdDMkUKLToxMDQwNDAwMDI3QkQwMDIwMjdCREZGRDhBRkIxMDAxQ0FGQjAwMDE4QkUKLToxMDQwNTAwMEFGQkYwMDIwOTBBODAwMDAyNDAyMDAwMThGQjAwMDNDRjgKLToxMDQwNjAwMDMxMDMwMDNGMDA4MDg4MjExMDYyMDAxNDhGQUEwMDM4QkQKLToxMDQwNzAwMDI0MEIwMDA1NTA2QjAwMTZBRkFBMDAxMDAwQTAyMDIxRjEKLToxMDQwODAwMDAwQzAyODIxMEUwMDA0MDcwMjAwMzAyMTkyMjQwMEJDNDkKLToxMDQwOTAwMDMwODMwMDAyMTA2MDAwMDMyNjA2MDAzMEFDQzAwMDAwMzAKLToxMDQwQTAwMDI0QzYwMDA0OEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4MDEKLToxMDQwQjAwMDAwQzAxMDIxMDNFMDAwMDgyN0JEMDAyODAxNDAzODIxN0UKLToxMDQwQzAwMDBFMDAwMzg1QUZCMDAwMTAwQTAwMDQ0QjAwMDAwMDAwOTIKLToxMDQwRDAwMDBFMDAwM0NDQUZCMDAwMTQwQTAwMDQ0QjAwMDAwMDAwMzcKLToxMDQwRTAwMDNDMDIwMDBBMDM0MjE4MjEzQzA0MDgwMDI0ODQzQjA4RDcKLToxMDQwRjAwMDI0MDUwMDFBMDAwMDMwMjEwQTAwMDA3Q0FGODMwMDJDNDgKLToxMDQxMDAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ4MDAwMDAwQTA1ODIxRkQKLToxMDQxMTAwMDAwQzA0ODIxMzA4QTAwRkZBRjg4MDAzMDhGNDQwMTc4MEEKLToxMDQxMjAwMDA0ODBGRkZFM0MwQzgwMDAzNTg2MDA3MDhDQzUwMDAwQ0EKLToxMDQxMzAwMDNDMDMwODAwOEM2MzAwNzQzQzE4MDgwMDhGMTgwMDcwNjIKLToxMDQxNDAwMDAwQTgyMDIzMDA2NDY4MjEwMDAwQzgyMTAxQTQ3ODJCNjYKLToxMDQxNTAwMDAzMTk3MDIxMDFDRjYwMjEzQzAxMDgwMEFDMkQwMDc0Q0YKLToxMDQxNjAwMDNDMDEwODAwQUMyQzAwNzA4RjQ4MEUxNEFGNDgwMTQ0OEQKLToxMDQxNzAwMEFGNDcwMTRDQTM0QTAxNTJBNzRCMDE1ODkzNDYwMTA4OEYKLToxMDQxODAwMDMwQzUwMDA4NTRBMDAwMDEzNTI5MTAwMDkzNEIwOTAwRTgKLToxMDQxOTAwMDI0MDcwMDUwMzE2QTAwRkYxMTQ3MDAwNzAwMDAwMDAwQUIKLToxMDQxQTAwMDhGNDUwRTFDQUY0NTAxNDhBRjQ5MDE1NDNDMDkxMDAwMzIKLToxMDQxQjAwMDAzRTAwMDA4QUY0OTAxNzg5MzREMDEwODMxQTgwMDA4RDkKLToxMDQxQzAwMDExMDAwMDEwMDAwMDAwMDA5MzRGMDEwODMxRUUwMDEwQjQKLToxMDQxRDAwMDUxQzAwMDAxMzUyOTAwMDgzQzA0MDgwMDkwODQzQjZDNjQKLToxMDQxRTAwMEEzNDQwMTUwOEY0MzA5QTRBRjQzMDE0ODhGNDIwOUEwNjMKLToxMDQxRjAwMEFGNDIwMTQ0QUY0OTAxNTQzQzA5MTAwMDAzRTAwMDA4RkMKLToxMDQyMDAwMEFGNDkwMTc4M0MxOTA4MDA4RjM5M0IyODMzMzgwMDA4NDIKLToxMDQyMTAwMDU3MDBGRkYxMzUyOTAwMDgwQTAwMDQ5RTAwMDAwMDAwNDUKLToxMDQyMjAwMDI0MDcwMDQwQUY0NzA4MTRBRjQwMDgxMDhGNDIwOTQ0RUMKLToxMDQyMzAwMDhGNDMwOTUwOEY0NDA5NTQ4RjQ1MDk1QzhGNDYwOTRDQzAKLToxMDQyNDAwMEFGODIwMDY0QUY4MzAwNTRBRjg0MDA1MEFGODUwMDVDNDAKLToxMDQyNTAwMDAzRTAwMDA4QUY4NjAwNjA5MzQ2MDEwOTMwQzUwMDdGODcKLToxMDQyNjAwMDAwMDUxOEMwMDAwNTIxNDAwMDgzMTAyMTAzRTAwMDA4NkMKLToxMDQyNzAwMDI0NDIwMDg4M0MwQTA4MDA5MTRBM0IyRDNDMDkwODAwNzIKLToxMDQyODAwMDk1MjkzQjI2M0MwNTExMDAwMDBBM0MwMDI1MjgwMDAyMjgKLToxMDQyOTAwMDAwRTgzMDI1MDBDNTE4MjUyNDgyMDAwOEFDODMwMDAwMDIKLToxMDQyQTAwMDAzRTAwMDA4QUM4MDAwMDQ4RjRBMDAyQzk3NEQwOTA4RjkKLToxMDQyQjAwMDNDMEUwMDBFMDM0RTM4MjEzMUFDRkZGRjAwMEM0MUMwMTQKLToxMDQyQzAwMEFGNDgwMDJDOTc0MzA5MDg5NEVCMDAxQTAwODA0MDIxNjYKLToxMDQyRDAwMDI0MDIwMDAxMzE2OUZGRkZBQzg5MDAwMDhDRTYwMDFDNUMKLToxMDQyRTAwMDAwQTA1ODIxQUM4NjAwMDQ4Q0U0MDAyMEFEMDQwMDA4MzYKLToxMDQyRjAwMDkwRTMwMDE5MzA2MzAwMDMxMDYyMDAzRTAwMDAwMDAwRUMKLToxMDQzMDAwMDI4NjUwMDAyMTRBMDAwNzEyNDBGMDAwMjEwNkYwMDRDRjkKLToxMDQzMTAwMDAwMDAwMDAwMjQxODAwMDMxMDc4MDA1NTAwMDAwMDAwODEKLToxMDQzMjAwMDNDMDkwODAwOTUyOTNCMUM5MzQzMDkzNDkzNEYwOTIxMEMKLToxMDQzMzAwMDNDMDUwODAwOTRBNTNCMjIzMDY0MDBGRjk0RUUwMDJBNUYKLToxMDQzNDAwMDAwMDQ2ODgyMzFFQzAwRkY5NzhGMDA1ODAwMERDNjAwMTIKLToxMDQzNTAwMDAwMENDQzAwMzEyN0ZGRkYwMzE5MTAyNTAwQTczMDIxRTYKLToxMDQzNjAwMDAwNDYyMDI1MDFDRjY4MjEzQzAzNDAwMDAwODM2MDI1RTIKLToxMDQzNzAwMDAwMEQ0QzAwQUQwOTAwMDRBRDBDMDAwMDkzNTkwOTIwNUMKLToxMDQzODAwMDNDMTgwMDA2MjUwOTAwMTQwMDE5M0UwMDAwRjgyODI1RjUKLToxMDQzOTAwMEFEMDUwMDA4OEY0RTA5MkMyNUU2MDAwMTMwQzI3RkZGRDUKLToxMDQzQTAwMEFEMEUwMDBDOEY0NDA5MzBBNzgyMDA1ODI1MDIwMDI4NkEKLToxMDQzQjAwMEFEMDQwMDEwOEY0RDA5MzhBRDBEMDAxNEFEMkIwMDA0NzUKLToxMDQzQzAwMDhGNEMwOTQwQUQyQzAwMDg5MzQzMDkzNzNDMTkwODAwNzUKLToxMDQzRDAwMDkzMzkzQjJDQUQyMDAwMTAwMDAzNDcwMDAwMTlDNDAwQTYKLToxMDQzRTAwMDAxMTg1ODI1MzU2N0ZGRkZBRDI3MDAwQzAzRTAwMDA4RDIKLToxMDQzRjAwMEFGNEEwMDJDM0MwOTA4MDA5NTI5M0IxQzNDMEQwODAwRTUKLToxMDQ0MDAwMDk1QUQzQjI2M0MwQzA4MDA5NThDM0IxODk0RTQwMDI0QTkKLToxMDQ0MTAwMDMxMkVGRkZGMDFBRTMwMjEwMENDMTgyMzAwMDRDQzAwNjgKLToxMDQ0MjAwMDI0NjJGRkYyMDMyMkMwMjUyNDBGMDgwMEFEMTgwMDBDRkYKLToxMDQ0MzAwMEFEMEYwMDE0QUQwMDAwMTAwQTAwMDRGMjI1MDgwMDE4QUEKLToxMDQ0NDAwMDk0RTUwMDI0OTRFRTAwMjgzQzA5MDgwMDk1MjkzQjFDQzMKLToxMDQ0NTAwMDAwMDU2QzAwMDAwRTY0MDAzNUE2ODEwMDM1ODQwODAwNUMKLToxMDQ0NjAwMEFEMDYwMDBDQUQwNDAwMTAwQTAwMDRGMjI1MDgwMDE0OEIKLToxMDQ0NzAwMDNDMDkwODAwOTUyOTNCMUMzQzBGMDgwMDk1RUYzQjI2QTIKLToxMDQ0ODAwMDNDMDYwODAwOTRDNjNCMTg5NEU0MDAyNDMxMjVGRkZGNDUKLToxMDQ0OTAwMDk0RUQwMDI4MDFFNTcwMjEwMUM2NjAyMzAwMDRDQzAwRTIKLToxMDQ0QTAwMDAwMEQxQzAwMjU4MkZGRUUwMDYyNzgyNTM3Mzg4MTAwNjAKLToxMDQ0QjAwMDI0MDUwODAwQUQxODAwMENBRDBGMDAxMEFEMDUwMDE4NjQKLToxMDQ0QzAwMEFEMDAwMDE0MEEwMDA0RjIyNTA4MDAxQzE0NjBGRjk0REIKLToxMDQ0RDAwMDAwMDAwMDAwOTRFMzAwMjQzQzA5MDgwMDk1MjkzQjFDREYKLToxMDQ0RTAwMDAwMDMxNDAwMzQ1OTA4MDBBRDE5MDAwQzBBMDAwNEYyNEUKLToxMDQ0RjAwMDI1MDgwMDEwMDNFMDAwMDgyNDAyMDFGNDI3QkRGRkU4QUUKLToxMDQ1MDAwMEFGQjAwMDEwQUZCRjAwMTQwRTAwMDA1QzAwODA4MDIxMkYKLToxMDQ1MTAwMDI0MDUwMDQwQUY0NTA4MTQ4RjgzMDA1NDhGODQwMDUwNTkKLToxMDQ1MjAwMDhGODUwMDVDMDA3MDE4MjEwMDY0MTAyMzE4NDAwMDA0N0YKLToxMDQ1MzAwMEFGODMwMDU0QUY2MzAwNTQ4RjY2MDA1NEFGODYwMDUwQzEKLToxMDQ1NDAwMDEyMDAwMDBDMDAwMDAwMDA4RjQ0MDA3NDkzNjgwMDgxOEEKLToxMDQ1NTAwMDM0MDlGQTAwMkQwNzAwMDcxMEUwMDAwNTAwODkxMDIxM0EKLToxMDQ1NjAwMDkzNkMwMDgxMjQwQjAxRjQwMThCNTAwNDAxNDQxMDIxNTEKLToxMDQ1NzAwMEFGNjIwMDBDOEY0RTA5NUMwMUM1NjgyMzE5QTAwMDA0Q0UKLToxMDQ1ODAwMDhGQkYwMDE0OEY0RjA5NUNBRjhGMDA1QzhGQkYwMDE0OEEKLToxMDQ1OTAwMDhGQjAwMDEwMEEwMDAwNUUyN0JEMDAxODhGODQwMDY0RjEKLToxMDQ1QTAwMDhGODMwMDU0OEY4MjAwNTBBRjY0MDA0NEFGNjMwMDUwOEIKLToxMDQ1QjAwMDAzRTAwMDA4QUY2MjAwNTQzQzAzODAwMDM0NjIwMDcwRTYKLToxMDQ1QzAwMDhDNDMwMDAwMjdCREZGRjgzMDg3MDBGRjMwQTkwMEZGQjMKLToxMDQ1RDAwMDMwQzgwMEZGQUY4MzAwMzA4RjQ0MDE3ODA0ODBGRkZFQjUKLToxMDQ1RTAwMDNDMDI4MDAwMzQ1OTAwNzA4RjM4MDAwMEEzQTcwMDAzRkMKLToxMDQ1RjAwMDNDMDcwODAwOENFNzAwNzQ4RkFDMDAwMDNDMDYwODAwMDQKLToxMDQ2MDAwMDhDQzYwMDcwMDMwMzc4MjMzQzBFN0ZGRjAwRUZDODIxQTcKLToxMDQ2MTAwMDM1Q0RGRkZGMDAwMDUwMjEwMThEMjgyNDAwQ0ExODIxNEMKLToxMDQ2MjAwMDAwMDg0N0MwMDMyRjIwMkIwMEE4MTAyNTAwNjRDMDIxREMKLToxMDQ2MzAwMEFGQTIwMDAwM0MwMTA4MDBBQzM5MDA3NDNDMDEwODAwNDYKLToxMDQ2NDAwMEFDMzgwMDcwOTM0RjAxMEFBM0EwMDAwMjNDMEU4MEZGMUIKLToxMDQ2NTAwMEEzQUYwMDAxOEZBQzAwMDAzMTJCMDA3RjM1Q0RGRkZGRjEKLToxMDQ2NjAwMDAxOEQ0ODI0MDAwQjU2MDAwMTJBNDAyNTI0MDczMDAwMDQKLToxMDQ2NzAwMDI0MDZGRjgwM0MwNTEwMDAyN0JEMDAwOEFGNDgwMTRDMTAKLToxMDQ2ODAwMEFGNDcwMTU0QTc0MDAxNThBMzQ2MDE1MjAzRTAwMDA4NzgKLToxMDQ2OTAwMEFGNDUwMTc4MjdCREZGRThBRkJGMDAxNEFGQjAwMDEwRjEKLToxMDQ2QTAwMDhGNjUwMDc0M0MwNjgwMDAzMDkwMDBGRjAwQTYyMDI1MzYKLToxMDQ2QjAwMDBFMDAwMDVDQUY2NDAwNzQ5MzYzMDAwNTM0NjIwMDA4NzAKLToxMDQ2QzAwMDBFMDAwMDVFQTM2MjAwMDUwMjAwMjAyMThGQkYwMDE0Q0YKLToxMDQ2RDAwMDhGQjAwMDEwMjQwNTAwMDUyNDA2MDAwMTBBMDAwNTk2OEQKLToxMDQ2RTAwMDI3QkQwMDE4MjdCREZGRTAzQzAzODAwMEFGQjAwMDEwREQKLToxMDQ2RjAwMEFGQkYwMDE4QUZCMTAwMTQzNDYyMDA3MDhDNDcwMDAwRTcKLToxMDQ3MDAwMDMwOTAwMEZGMzBBODAwRkZBRjg3MDAzMDhGNDQwMTc4NjEKLToxMDQ3MTAwMDA0ODBGRkZFM0MxODgwMDAzNzExMDA3MDhFMkYwMDAwQ0YKLToxMDQ3MjAwMDNDMEQwODAwOERBRDAwNzQzQzBBMDgwMDhENEEwMDcwRjUKLToxMDQ3MzAwMDAxRTc3MDIzMDFBRTI4MjEwMDAwNTgyMTAwQUUzMDJCODQKLToxMDQ3NDAwMDAxNEI0ODIxMDEyNjM4MjEzQzAxMDgwMEFDMjUwMDc0QUEKLToxMDQ3NTAwMDAwMDA4ODIxM0MwMTA4MDBBQzI3MDA3MDExMDAwMDBGMDgKLToxMDQ3NjAwMDAwMDAwMDAwOEY2MjAwNzQyNjE5RkZGRjMyMDgwMDdGRUUKLToxMDQ3NzAwMDAwMDJGRTAyMzNFNTAwN0YxNTAwMDAwNjMzMjIwMEZGMzEKLToxMDQ3ODAwMDI0MDdGRjgwMDIwNzIwMjYyNEEzRkZGRjAwODM4MDI1NDMKLToxMDQ3OTAwMDMyMDIwMEZGMDA0MDgwMjEyNDExMTAwODBFMDAwMDVDNEUKLToxMDQ3QTAwMDAwMDAwMDAwOEY0OTA4MTgzMTI1MDAwNDE0QTBGRkZEMDcKLToxMDQ3QjAwMDMyMTgwMDdGMDAxODc4QzAwMDE4NzE0MDAxQ0Y2ODIxQkUKLToxMDQ3QzAwMDI1QUMwMDg4QUY0QzA4MTgyNzRBMDk4MDhENEIwMDIwODMKLToxMDQ3RDAwMEFGNEIwMTQ0OEQ0NjAwMjRBRjQ2MDE0OEEzNTAwMTUwMjEKLToxMDQ3RTAwMDBFMDAwMDVFQTc0MDAxNTgwMjIwMTAyMThGQkYwMDE4NjQKLToxMDQ3RjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjcKLToxMDQ4MDAwMDI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMDBFMDAwNUUxQjgKLToxMDQ4MTAwMDMwQTUwMEZGOEY4MzAwNTQ4RkJGMDAxMDM0NDUwMDQwNDcKLToxMDQ4MjAwMDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxOEFGNDMwMTRDNDgKLToxMDQ4MzAwMEEzNDQwMTUyQUY0NTAxNTQwM0UwMDAwOEFGNDIwMTc4QTAKLToxMDQ4NDAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDkzNDUwOTNGOEMKLToxMDQ4NTAwMDI0MDIwMDA2M0MwODA4MDA5NTA4M0IyMjMwQTMwMEZGMTQKLToxMDQ4NjAwMDI0ODdGRkQ4MjQwNTAwMDQxMDYyMDAzNjI0MDYwMDAyQzUKLToxMDQ4NzAwMDk3NEUwOTNDM0MwRDAyMDQwMDA2MzQwMDMxQ0NGRkZGOEEKLToxMDQ4ODAwMDAxOEQ1ODI1QUM4QjAwMDA5MzRBMDkzRTMxNDkwMDIwMjgKLToxMDQ4OTAwMDExMjAwMDA4MDAwMDAwMDA5MzVGMDkzNjNDMTkwMTAzNTUKLToxMDQ4QTAwMDM3MzgwMzAwMzNGMDAwRkYwMjE4NzgyNTI0MDUwMDA4OEMKLToxMDQ4QjAwMEFDOEYwMDA0OTM1ODA5MzQ5MzREMDkyMTNDMTA0MDAwRkIKLToxMDQ4QzAwMDMzMEUwMEZGMDAwRTYwODIzMUFCMDBGRjAwMEM1NjAwN0IKLToxMDQ4RDAwMDAwMEIxNDAwMDE0MjE4MjUwMDY4RjgyNTAzRjBDODI1RDQKLToxMDQ4RTAwMEFDOTlGRkQ4OTM1ODA5Mzc4RjRDMDk0ODhGNEQwOTQwMzAKLToxMDQ4RjAwMDAwMDU3ODgyMzMwRTAwRkYwMUNGNTgyMTAxOEQyODIzNTcKLToxMDQ5MDAwMDAwMEI1NzAwMDE0NjEwMjUzMEEzRkZGRjAwNDM0MDI1NTAKLToxMDQ5MTAwMDAwMEY0ODgwMDEyNzMwMjFBQ0U4MDAyMDBFMDAwMDVDMjkKLToxMDQ5MjAwMDI0RDAwMDI4MjQwNDAwMDQwRTAwMDA1RUEzNjQwMDNGOEQKLToxMDQ5MzAwMDAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4QTgKLToxMDQ5NDAwMDI3QkQwMDE4MEEwMDA2NDQyNDA2MDAxMjI3QkRGRkQwMjgKLToxMDQ5NTAwMDI0MDkwMDEwQUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDOTEKLToxMDQ5NjAwMEFGQjEwMDE0QUZCMDAwMTAzQzAxMDgwMEEwMjkzQjJDRUYKLToxMDQ5NzAwMEFGQkYwMDI4QUZCMjAwMTg5NzQ4MDkwODMwOTQwMEZGNzUKLToxMDQ5ODAwMDNDMDIwMDBFMzEwN0ZGRkYwMDA3MzFDMEFGNDYwMDJDOEMKLToxMDQ5OTAwMDk3NDQwOTA4OTM0NDAxMEIzMEIzMDBGRjAzNDI4MDIxODAKLToxMDQ5QTAwMDMwODMwMDMwMDAwMEE4MjExMDYwMDBFNDAwMDA4ODIxNUUKLToxMDQ5QjAwMDI0MEMwMDA0M0MwMTA4MDBBMDJDM0IyQzkzNEIwOTNFMjYKLToxMDQ5QzAwMDAwMEI1NjAwMDAwQTJFMDMwNEEwMDEzMTAwMDAwMDAwNzUKLToxMDQ5RDAwMEFGNDAwMDQ4OTM1MjAxMEIzMjRGMDAyMDExRTAwMDA2MTcKLToxMDQ5RTAwMDAwMDAwMDAwOTM1RjA5M0UwMDFGQ0UwMDAwMTlDNjAzQkYKLToxMDQ5RjAwMDA3MDAwMTQ4MDAwMDAwMDA5MzQ2MDEwQjMwQzIwMDQwNTAKLToxMDRBMDAwMDEwNDAwMDAzOEY5MjAwNTQ4Rjg3MDA1NDI0RjJGRkZGNjAKLToxMDRBMTAwMDk2MEEwMDJDOTM0NTA5MzQ5MzQ5MDkzN0E3OEEwMDU4MTAKLToxMDRBMjAwMDMwQTYwMEZGMzEyNzAwRkYwMDA3MTA4MDAwNDYyMDIxM0MKLToxMDRBMzAwMDAwOTFGODIxM0MwMTA4MDBBNDNGM0IyMjkyMDMwMDE4OUEKLToxMDRBNDAwMDNDMDEwODAwQTQyMDNCMUMzQzAxMDgwMEE0MjAzQjE4QUEKLToxMDRBNTAwMDMwNzAwMEZGMDNGMDQwMjEyNTBCMDAwQTMxNzBGRkZGOEEKLToxMDRBNjAwMDNDMDEwODAwQTQyODNCMjQzQzAxMDgwMEE0MjgzQjI2NjQKLToxMDRBNzAwMDBFMDAwMDlBMDIwMDIwMjEwRTAwMDRDNTAwNDAyMDIxRjMKLToxMDRBODAwMDhGNEIwMDJDOTc1ODA5MDgzQzE5MDAwRTAzNTk0MDIxMDAKLToxMDRBOTAwMDMzMEZGRkZGMDAwRjcxQzBBRjRFMDAyQzk3NDMwOTA4ODIKLToxMDRBQTAwMDk1MEQwMDFBMjQxMTAwMDEwMDQwMzgyMTMxQUNGRkZGQTAKLToxMDRBQjAwMEFDNEMwMDAwOEQwQTAwMUNBQzRBMDAwNDhEMDUwMDIwOUYKLToxMDRBQzAwMEFDNDUwMDA4OTEwOTAwMTkzMTIzMDAwMzEwNzEwMEJEQTUKLToxMDRBRDAwMDI4NzEwMDAyMTYyMDAxMDMyNDBDMDAwMjEwNkMwMEY1NUUKLToxMDRBRTAwMDI0MEQwMDAzMTA2RDAwQ0EwMDAwMDAwMDNDMDkwODAwRkUKLToxMDRBRjAwMDk1MjkzQjFDOTM0MzA5MzQ5MzU4MDkyMTNDMEEwODAwMkIKLToxMDRCMDAwMDk1NEEzQjIyMzA2NDAwRkY5NTBDMDAyQTAwMDRGODgyOEQKLToxMDRCMTAwMDMzMTkwMEZGOTc5ODAwNTgwMDFGNzYwMDAwMTk3QzAwOTkKLToxMDRCMjAwMDMxMjZGRkZGMDFDRjQwMjUwMTQ2NjgyMTAxMEQ4ODI1NzAKLToxMDRCMzAwMDAxOTgyODIxM0MwODQwMDAwMjI4MTAyNTAwMDU0QzAwNUYKLToxMDRCNDAwMEFDRTkwMDA0QUNFMjAwMDA5MzQzMDkyMDNDMDQwMDA2RjkKLToxMDRCNTAwMDI0RTkwMDE0MDAwM0ZFMDAwM0U0QzgyNUFDRjkwMDA4QjIKLToxMDRCNjAwMDhGNEUwOTJDMjcwRjAwMDEzMUU2N0ZGRkFDRUUwMDBDQzEKLToxMDRCNzAwMDhGNEQwOTMwQTc4NjAwNTgyNEU2MDAyOEFDRUQwMDEwQzAKLToxMDRCODAwMDhGNEMwOTM4QUNFQzAwMTRBRDMyMDAwNDhGNTEwOTQwNTEKLToxMDRCOTAwMEFEMzEwMDA4OTM0MjA5MzczQzA1MDgwMDkwQTUzQjJDMzUKLToxMDRCQTAwMEFEMjAwMDEwMDAwMjI3MDAwMDA1MUMwMDAwODNGODI1M0UKLToxMDRCQjAwMDM3RjJGRkZGQUQzMjAwMENBRjRCMDAyQzEyQTAwMDMzRDgKLToxMDRCQzAwMDAwMDAwMDAwOTM1MjA5M0YyNDE1MDAwNjI0MDUwMDA0NEMKLToxMDRCRDAwMDMyNEIwMEZGMTE3NTAwQ0QyNDA5MDAwMjk3NEYwOTNDQUMKLToxMDRCRTAwMDNDMEUwMjA0MzFFREZGRkYwMUFFNjAyNUFDRUMwMDI4NjUKLToxMDRCRjAwMDkzNTEwOTNFMzIyMjAwMjAxMDQwMDAwODAwMDAwMDAwQkUKLToxMDRDMDAwMDkzNDQwOTM2M0MxODAxMDMzNzFGMDMwMDMwOTkwMEZGMTUKLToxMDRDMTAwMDAzM0YyODI1QUNDNTAwMDQyNDA1MDAwODkzNTIwOTM0M0QKLToxMDRDMjAwMDkzNDMwOTIxMDAwNTYwODIzMjRCMDBGRjAwMEJBODgyRUMKLToxMDRDMzAwMDMwNjQwMEZGMDAxNUZFMDAwMDA0QzQwMDAzRjhDODI1MUUKLToxMDRDNDAwMDAzMkE3ODI1MDFFODcwMjVBQ0NFRkZEODkzNEQwOTM3QUIKLToxMDRDNTAwMDhGNTIwOTQ4OEY0MjA5NDAzMUIxMDBGRjAyMkM1ODIxODAKLToxMDRDNjAwMDAyNDIzMDIzMDAwQjFGMDAwMDA5QUMwMDAwNzU0ODI1RUMKLToxMDRDNzAwMDMwQzhGRkZGMDEyODUwMjUwRTAwMDA1Q0FDRUEwMDIwODAKLToxMDRDODAwMDI0MDcwMDA0MEUwMDAwNUVBMzY3MDAzRjBFMDAwMEMzNkYKLToxMDRDOTAwMDAyMDAyMDIxM0MwNTA4MDA5MEE1M0IyQzMwQjAwMDAzMDkKLToxMDRDQTAwMDEyMDAwMDBGMDI4MDIwMjE4Rjg4MDA1NDI1MDkwMDAxODYKLToxMDRDQjAwMEFGODkwMDU0QUY2OTAwNTA4RjZBMDA1NDAxNDkzODIzMEUKLToxMDRDQzAwMDE4RTAwMDAyMDEyMDIwMjE4RjY0MDA1NEFGNjQwMDU0REEKLToxMDRDRDAwMDhGNDIwMDc0MjQ0NjAxRjRBRjY2MDAwQzAyODAyMDIxNEMKLToxMDRDRTAwMDAyNjAyODIxQTc2MDAwNjgwRTAwMDVFMTNDMTMxMDAwNTcKLToxMDRDRjAwMDhGOEUwMDU0MzQ1NDAwMDZBRjRFMDE0QzhGOEQwMDRDMDMKLToxMDREMDAwMDhGQkYwMDI4OEZCNTAwMjQzMUIxMDBGRjI1QUMwMDAxMTIKLToxMDREMTAwMEFGOEMwMDRDOEZCMjAwMThBMzUxMDE1MjhGQjAwMDEwMUQKLToxMDREMjAwMEFGNTQwMTU0OEZCMTAwMTRBRjUzMDE3ODhGQjQwMDIwRjkKLToxMDREMzAwMDhGQjMwMDFDMDNFMDAwMDgyN0JEMDAzMDkzNTkwOTNFRTMKLToxMDRENDAwMDAwMTlDNjAwMDAxODk2MDMwNjQyMDA0ODI0MTEwMDAyMEMKLToxMDRENTAwMDkzNDIwOTIzMzA0NDAwMDIxMDgwRkYxRThGODcwMDYwQjkKLToxMDRENjAwMDhGODYwMDU0MTRFNkZGMUIwMDAwMDAwMDBFMDAwMDVDNUMKLToxMDRENzAwMDAwMDAwMDAwOTM2NTAwM0YyNDA4MDAxNjMwQTkwMEZGRTIKLToxMDREODAwMDExMjgwMDBDMjQwQTAwMDgzQzBEMDgwMDkxQUQzQjJDQjIKLToxMDREOTAwMDM1QUMwMDAxM0MwMTA4MDBBMDJDM0IyQzkzNkIwMDNGN0MKLToxMDREQTAwMDMxNjMwMEZGMTA2QTAwNjUyNDBFMDAwQTEwNkUwMDVFNzkKLToxMDREQjAwMDI0MDIwMDBDMEUwMDAwNUUwMDAwMDAwMDBBMDAwNjlEQTgKLToxMDREQzAwMDAwMDAwMDAwM0MwOTA4MDA5NTI5M0IxQzNDMTkwODAwMjQKLToxMDRERDAwMDk3MzkzQjI2M0MxODA4MDA5NzE4M0IxODk1MEUwMDI0N0QKLToxMDRERTAwMDMxM0ZGRkZGMDMzRjc4MjEwMUY4NjgyMzAwMEU4QzAwNUMKLToxMDRERjAwMDI1QUNGRkYyMDIyQzUwMjUyNDA1MDgwMDI0NDcwMDE4OUEKLToxMDRFMDAwMEFDNEEwMDBDQUM0NTAwMTQwQTAwMDZFNUFDNDAwMDEwQUEKLToxMDRFMTAwMDNDMDkwODAwOTUyOTNCMUMzQzE4MDgwMDk3MTgzQjI2QzQKLToxMDRFMjAwMDNDMEYwODAwOTVFRjNCMTg5NTBEMDAyNDMxMzlGRkZGMkEKLToxMDRFMzAwMDk1MEMwMDI4MDMxOTcwMjEwMUNGODgyMzAwMEQyQzAwNDgKLToxMDRFNDAwMDAwMEM1NDAwMjYyMkZGRUUwMTQyMzAyNTM0QTQ4MTAwREMKLToxMDRFNTAwMDI0MDMwODAwQUNFNDAwMENBQ0U2MDAxMEFDRTMwMDE4M0UKLToxMDRFNjAwMEFDRTAwMDE0MEEwMDA2RTUyNEU3MDAxQzNDMDEwODAwNDEKLToxMDRFNzAwMEEwMzEzQjJDOTM0MzA5M0UyNDE1MDAwMTMwN0YwMDIwRDQKLToxMDRFODAwMDE3RTBGRUQ0MjQxMTAwMDgwQTAwMDY5RDI0MTEwMDA0MzYKLToxMDRFOTAwMDhGNkUwMDg0OEY0RDA5NDAxMUEwRkVDREFGOEUwMDU0NUYKLToxMDRFQTAwMDI0MEYwMDE0M0MwMTA4MDBBMDJGM0IyQzBBMDAwNjlDOTQKLToxMDRFQjAwMDAwMDAwMDAwOTUwMjAwMjQ5NTA2MDAyODNDMDkwODAwMjcKLToxMDRFQzAwMDk1MjkzQjFDMDAwMjI0MDAwMDA2MUMwMDM0OUY4MTAwMzEKLToxMDRFRDAwMDM0NzkwODAwQUNGRjAwMENBQ0Y5MDAxMDBBMDAwNkU1QkMKLToxMDRFRTAwMDI0RTcwMDE0MTQ2MEZGMDEwMDAwMDAwMDk1MTgwMDI0NUUKLToxMDRFRjAwMDNDMDkwODAwOTUyOTNCMUMyNDQ3MDAxMDAwMTg3QzAwNDEKLToxMDRGMDAwMDM1RUUwODAwMEEwMDA2RTVBQzRFMDAwQzBBMDAwNzFGNEIKLToxMDRGMTAwMDI0MDkwMDEyOEY2NDAwNENBRjY0MDA1NDhGNjMwMDU0NjYKLToxMDRGMjAwMDBBMDAwNkE2QUY2MzAwNTBBMzYyMDAzRjBFMDAwMDVFQjkKLToxMDRGMzAwMDAwMDAwMDAwMEEwMDA2OUQwMDAwMDAwMDI0MDIwMDE0OEEKLToxMDRGNDAwMDBBMDAwN0YzQTM2MjAwM0YyN0JERkZFODMwODQwMEZGOUIKLToxMDRGNTAwMEFGQkYwMDEwMEUwMDA1RTEzMEE1MDBGRjkzNzgwMDdFODIKLToxMDRGNjAwMDkzNzkwMDdGOTM2RTAwODA5MzY4MDA3QTMzMkYwMEZGNUYKLToxMDRGNzAwMDAwMTg2NjAwMDAwRjZDMDAzMUNCMDBGRjAxOEQ0ODI1NDIKLToxMDRGODAwMDAwMEI1MjAwOEZCRjAwMTAwMTJBMzgyNTMxMDYwMEZGQTgKLToxMDRGOTAwMDM0NDQ3MDAwMDBFNjI4MjUyNDAyRkY4MTNDMDMxMDAwMDEKLToxMDRGQTAwMDI3QkQwMDE4QUY0NTAxNENBRjQ0MDE1NEEzNDIwMTUyNDQKLToxMDRGQjAwMDAzRTAwMDA4QUY0MzAxNzgyN0JERkZEOEFGQjIwMDE4NjcKLToxMDRGQzAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMEFGQjMwMDFDRjIKLToxMDRGRDAwMDkzNDIwMTA5MzA4NjAwRkYzMEIwMDBGRjAwMDYxOEMyN0UKLToxMDRGRTAwMDMyMDQwMDAyMzA3MTAwMDExNDgwMDAwNTMwNTIwMEZGQ0QKLToxMDRGRjAwMDkzNjcwMDA1MzBFNTAwMDgxMEEwMDAwRDMwQzgwMDEwRDAKLToxMDUwMDAwMDAyNDAyMDIxMEUwMDA1Q0QwMjIwMjgyMTI0MDQwMDAxQTkKLToxMDUwMTAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MTcKLToxMDUwMjAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDI4ODkKLToxMDUwMzAwMDE1MDAwMDMyMDAwMDAwMDA5MzQzMDEwOTAwMDAyODIxMDAKLToxMDUwNDAwMDMwNjIwMDdGMDAwMjIwQzAwMDAyRjk0MDAzRTQ5ODIxOTIKLToxMDUwNTAwMDI2NzkwMDg4MDMzQjk4MjE4RTc4MDAyNDhFNkYwMDA4MDMKLToxMDUwNjAwMDEzMEYwMDQ2MDAwMDAwMDA4RjY0MDA4NDI0MTgwMDAyMjMKLToxMDUwNzAwMDAwMDRGRDgyMzNGOTAwMDMxMzM4MDA3QzAwMDAwMDAwQjcKLToxMDUwODAwMDkzNjYwMDgzOTM0QTAxMDk1MTQ2MDAwNDMyMDUwMDdDNkYKLToxMDUwOTAwMDEwQTAwMDYwMDAwMDAwMDAzMjA1MDA3QzE0QTAwMDUzNDYKLToxMDUwQTAwMDAyNDAyMDIxMTYyMDAwMDYzMjA0MDAwMThFN0YwMDI0RDkKLToxMDUwQjAwMDhGNTkwMTA0MTdGOUZGRDYwMDAwMjAyMTMyMDQwMDAxQTYKLToxMDUwQzAwMDEwODAwMDBBMDI0MDIwMjE4RjQyMDk0MDhGOTMwMDY0MjMKLToxMDUwRDAwMDEwNTMwMDA2MDAwMDAwMDAwRTAwMDY3QjAyMjAyODIxNkQKLToxMDUwRTAwMDhGNDMwOTQwQUY2MzAwNDQwMjQwMjAyMTBFMDAwNjI4OTAKLToxMDUwRjAwMDAyMjAyODIxMEEwMDA4MkMyNDA0MDAwMTNDMDkwODAwOTEKLToxMDUxMDAwMDhEMjkwMDY0MjUyNjAwMDEzQzAxMDgwMEFDMjYwMDY0QkUKLToxMDUxMTAwMDE2MDAwMDEyMDAwMDAwMDA4RjZEMDA4NDNDMEUwMEMwREQKLToxMDUxMjAwMDAxQUU2MDI0MTU4MDAwMDUwMjQwMjAyMTBFMDAwN0ZBMjAKLToxMDUxMzAwMDAyMjAyODIxMEEwMDA4MkMyNDA0MDAwMTI0MDUwMDA0NzAKLToxMDUxNDAwMDBFMDAwNTk2MjQwNjAwMDEwMjQwMjAyMTBFMDAwN0ZBRjkKLToxMDUxNTAwMDAyMjAyODIxMEEwMDA4MkMyNDA0MDAwMTBFMDAwMDNEMzIKLToxMDUxNjAwMDI0MDQwMDAxOTM2QjAwN0QwMjBCNTAyNTBFMDAwMDVFQUQKLToxMDUxNzAwMEEzNkEwMDdEMEEwMDA4NkY4RjZEMDA4NDhGNjYwMDc0M0IKLToxMDUxODAwMDhGNDgwMTA0OEU2NzAwMjQwMDA2NEUwMjE1MDdGRkI2MDMKLToxMDUxOTAwMDMxMjYwMDdGOTM2QjAwODMyNjQ0MDAwMTMwOEEwMDdGMTQKLToxMDUxQTAwMDExNDYwMDQzMzE2MzAwRkY1NDY0RkZCMDhGNjQwMDg0RjQKLToxMDUxQjAwMDI2NDUwMDAxMzBCMTAwN0YzMEEyMDBGRjEyMjYwMDA0MTYKLToxMDUxQzAwMDI0MDUwMDAxMDA0MDkwMjEwQTAwMDg0MjI0MTEwMDAxM0EKLToxMDUxRDAwMDI0MEZGRjgwMDI0RjcwMjQwMUNGOTAyNjMyNDIwMEZGM0YKLToxMDUxRTAwMDAwNDA5MDIxMEEwMDA4NDIyNDExMDAwMTBFMDAwNjdCQjUKLToxMDUxRjAwMDAyMjAyODIxMzIxODAwMzAxMzAwRkZBQTMyMTAwMDgyNEEKLToxMDUyMDAwMDAyNDAyMDIxMEUwMDA1Q0QwMjIwMjgyMTBBMDAwODJDOTIKLToxMDUyMTAwMDI0MDQwMDAxOEY2RTAwNzQzQzBGODAwMDI0MDUwMDAzRkQKLToxMDUyMjAwMDAxQ0Y5MDI1QUY3MjAwNzQ5MzcxMDA4MzI0MDYwMDAxQjIKLToxMDUyMzAwMDBFMDAwNTk2MzIyNDAwRkYwRTAwMDAzRDI0MDQwMDAxRkMKLToxMDUyNDAwMDkzNkQwMDdEMDIwRDYwMjUwRTAwMDA1RUEzNkMwMDdENTUKLToxMDUyNTAwMDNDMEIwODAwOEQ2QjAwNTQyNTcwMDAwMTNDMDEwODAwRDgKLToxMDUyNjAwMEFDMzAwMDU0MEEwMDA4MkMyNDA0MDAwMThGNjgwMDc0M0MKLToxMDUyNzAwMDNDMDk4MDAwMjQwNTAwMDQwMTA5MzgyNUFGNjcwMDc0NEIKLToxMDUyODAwMDkzNjMwMDgzMjQwNjAwMDEwRTAwMDU5NjMwNjQwMEZGM0UKLToxMDUyOTAwMDBFMDAwMDNEMjQwNDAwMDE5MzYyMDA3RDAyMDI5ODI1NjcKLToxMDUyQTAwMDBFMDAwMDVFQTM3MzAwN0QwQTAwMDgyQzI0MDQwMDAxOTgKLToxMDUyQjAwMDMyNEQwMDgwMzlBQzAwODA1NDZDRkY2QzhGNjQwMDg0RTgKLToxMDUyQzAwMDBBMDAwODk1MjY0NTAwMDEyN0JERkZEMDNDMEEwMDA4Q0EKLToxMDUyRDAwMEFGQkYwMDJDQUZCNDAwMjhBRkIzMDAyNEFGQjIwMDIwQTIKLToxMDUyRTAwMEFGQjEwMDFDQUZCMDAwMTgwMzRBRDgyMTI0MDkwMDQwMTgKLToxMDUyRjAwMEFGNDkwODE0QUY0MDA4MTA4RjQyMDk0NDhGNDMwOTUwNEEKLToxMDUzMDAwMDhGNDYwOTU0OEY0NzA5NUM4RjQ4MDk0QzkzNDQwMTA4MjQKLToxMDUzMTAwMDkzNDUwMTBCQUY4MjAwNjQzMDg0MDBGRjMwQTUwMEZGOEQKLToxMDUzMjAwMEFGODMwMDU0QUY4NjAwNTBBRjg3MDA1QzBFMDAwODE2QjQKLToxMDUzMzAwMEFGODgwMDYwMTQ0MDAxNUE4RkJGMDAyQ0E3NjAwMDY4M0UKLToxMDUzNDAwMDkzNEQwOTAwMjQwQjAwNTAzQzE0MDgwMDI2OTQzQzMwNzcKLToxMDUzNTAwMDMxQUMwMEZGM0MxMjA4MDAyNjUyM0M0MDExOEIwMDAzODgKLToxMDUzNjAwMDAwMDAwMDAwMDAwMEEwMjEwMDAwOTAyMTkzNEYwMTA5REYKLToxMDUzNzAwMDhGODgwMDU0MjQwMjAwMTAzMUYxMDA3RjAwMTE3MEMwQUEKLToxMDUzODAwMDAwMTE2OTQwMDFBRTI4MjEyNEI4MDA4OEFGNTgwODE4RTAKLToxMDUzOTAwMDhGNEEwMTA0OEY0QjA5QTQzQzBDMDAwRTAzNENDODIxMUEKLToxMDUzQTAwMDAxNEI0ODIzM0MwMTA4MDBBQzI5M0IwODhGNDQwOTU4QjUKLToxMDUzQjAwMDNDMDEwODAwQTAyMjNCMkM5NzQ2MDkwODAwODgxODIzQ0UKLToxMDUzQzAwMDNDMDEwODAwQUMyMzNCMEMzMEM3RkZGRjAwMDdGOUMwQ0QKLToxMDUzRDAwMDNDMDEwODAwQUMyODNCMzBBRjVGMDAyQzk3NDIwOTA4MjUKLToxMDUzRTAwMDk3MzAwMDJDOEU5MTAwMDA5MzJGMDAxODAzNzg5ODIxOUQKLToxMDUzRjAwMEE3OTAwMDU4QUY5MzAwNDgwMjIwRjgwOTMxRjAwMEZGNTEKLToxMDU0MDAwMDMwNEUwMDAyMTVDMDAxOEUzMDUzMDAwMTEyNjAwMTQyN0YKLToxMDU0MTAwMDAwMDAwMDAwOEY0RjA5QTQyNDEzMDAwMTNDMDEwODAwODQKLToxMDU0MjAwMEFDMkYzQjM0OTM1MTA5MzQ5MzRFMDkzNzMyMjUwMEZGOUEKLToxMDU0MzAwMDMxQ0QwMEZGMDAwRDYwODAwMTg1NTAyMTAxNTA1ODIxQzEKLToxMDU0NDAwMDNDMDEwODAwQTQyQjNCMjQzQzAxMDgwMEE0MkEzQjIyNzkKLToxMDU0NTAwMDkzNDkwOTM0MzEyMjAwRkYwMjAyMjAyMTI0OTAwMDEwRDgKLToxMDU0NjAwMDNDMDEwODAwQTQzMDNCMjAyNDA4MDAwNjhGOTkwMDU0MUEKLToxMDU0NzAwMDNDMDEwODAwQUMyODNCMjg4RjlGMDA1QzhGNTgwOTU4REUKLToxMDU0ODAwMDAwMDA4MDIxMDNGOTI4MjMwNEEwMDEzQzAzMTkyMDIzRjQKLToxMDU0OTAwMDA0ODAwMTNBMDBBNDM4MkIxMEUwMDEzQzAwMDAwMDAwMTkKLToxMDU0QTAwMDNDMDEwODAwQUMyNTNCMEM4RTQyMDAwMDAwNDBGODA5OEUKLToxMDU0QjAwMDAwMDAwMDAwMzA0NjAwMDIxNEMwMDBERDAwNDA4ODIxREEKLToxMDU0QzAwMDMwNDMwMDAxNTQ2MDAwMTA4RTQyMDAwNDNDMDQwODAwODgKLToxMDU0RDAwMDhDODQzQjEwM0MwOUMwMDAwMDg5ODAyNUFGNTAwRTAwMzEKLToxMDU0RTAwMDhGNEIwMDAwMzE2QTAwMDgxMTQwRkZGRDAwMDAwMDAwRjIKLToxMDU0RjAwMDk3NDUwRTA4MjQxMDAwMDFBNzg1MDA0MDhGNEMwRTA0MkMKLToxMDU1MDAwMEFGOEMwMDM0OEU0MjAwMDQwMDQwRjgwOTAwMDAwMDAwMTcKLToxMDU1MTAwMDAyMjI4ODI1MzIyRDAwMDIxNUEwMDE1OTAwMDAwMDAwNEEKLToxMDU1MjAwMDNDMDkwODAwOTUyOTNCMTgzQzA2MDgwMDk0QzYzQjI0MUEKLToxMDU1MzAwMDNDMDQwODAwOTQ4NDNCMUEzQzE5MDgwMDhGMzkzQjEwNDYKLToxMDU1NDAwMDAxMjY1ODIxM0MxODA4MDA4RjE4M0IzNDNDMUYwODAwRTYKLToxMDU1NTAwMDk3RkYzQjJFMDE2NDE4MjE4RjRFMDk0MDAzMjkyODIxMTMKLToxMDU1NjAwMDI0NkYwMDAyMDMxOTY4MjEwMEJGNjAyMTNDMDEwODAwN0MKLToxMDU1NzAwMEE0MkIzQjI2QUY4RTAwNjQzQzAxMDgwMEFDMkQzQjM0Q0QKLToxMDU1ODAwMDNDMDEwODAwQTQyQzNCMUMwRTAwMDA5QTMxRTRGRkZGRjQKLToxMDU1OTAwMDhGODcwMDRDMDA0MDIwMjEzQzAxMDgwMEEwMjczQjJEQjQKLToxMDU1QTAwMDhFNDIwMDA4MjRFODAwMDFBRjg4MDA0QzAwNDBGODA5NTIKLToxMDU1QjAwMDAwMDAwMDAwOEY0QjAwMkM5NzQ5MDkwODNDMEEwMDBFQTAKLToxMDU1QzAwMDAzNEEzODIxMzEyNEZGRkYwMDA0MTlDMDhGOEEwMDU0OTgKLToxMDU1RDAwMEFGNDMwMDJDOTc0MzA5MDg5NEU2MDAxQTAwNDA0MDIxOEQKLToxMDU1RTAwMDMwREZGRkZGQUM1RjAwMDA4Q0Y5MDAxQ0FDNTkwMDA0RjkKLToxMDU1RjAwMDhDRjgwMDIwQUM1ODAwMDg5MEVGMDAxOTMxRTMwMDAzNEMKLToxMDU2MDAwMDEwNzMwMEU2MDAwMDAwMDAyODYyMDAwMjE0NDAwMTAyNEUKLToxMDU2MTAwMDI0MEMwMDAyMTA2QzAwRjQyNDBEMDAwMzEwNkQwMEE3OTAKLToxMDU2MjAwMDAwMDAwMDAwM0MwOTA4MDA5NTI5M0IxQzkzNDUwOTM0MDMKLToxMDU2MzAwMDkzNEMwOTIxM0MwRjA4MDA5NUVGM0IyMjMwQkYwMEZGM0YKLToxMDU2NDAwMDk0RUUwMDJBMDAxRjY4ODIzMTk5MDBGRjk3OEMwMDU4NjEKLToxMDU2NTAwMDAwMEQxNjAwMDAxOUM0MDAzMTI0RkZGRjAxRTQzMDIxQzEKLToxMDU2NjAwMDAwNTg0ODI1MDEyNjM4MjUwMUNDMjgyMTNDMDM0MDAwNUMKLToxMDU2NzAwMDAwRTNGODI1MDAwNTZDMDBBRDBEMDAwNEFEMUYwMDAwMkYKLToxMDU2ODAwMDkzNTkwOTIwM0MxODAwMDYyNTBEMDAxNDAwMTk3RTAwQ0UKLToxMDU2OTAwMDAxRjg3MDI1QUQwRTAwMDg4RjQyMDkyQzI1ODYwMDAxMDcKLToxMDU2QTAwMDhFNEMwMDBDQUQwMjAwMEM4RjQ0MDkzMDMwQzk3RkZGRDYKLToxMDU2QjAwMEE3ODkwMDU4QUQwNDAwMTA4RjQ3MDkzODI1MDQwMDI4MzkKLToxMDU2QzAwMEFEMDcwMDE0QURBQTAwMDQ4RjQ1MDk0MEFEQTUwMDA4NDAKLToxMDU2RDAwMDkzNDMwOTM3M0MxRjA4MDA5M0ZGM0IyQ0FEQTAwMDEwRkIKLToxMDU2RTAwMDAwMDNDNzAwMDAxRkNDMDAwMzE5NzgyNTM1RUVGRkZGMkIKLToxMDU2RjAwMEFEQUUwMDBDQUY0QjAwMkMwMTgwRjgwOTAwMDAwMDAwOUIKLToxMDU3MDAwMDNDMDYwODAwOTRDNjNCMjYzQzAyMDgwMDk0NDIzQjFBMjMKLToxMDU3MTAwMDAwQzI0ODIxMjUyQjAwMDIwRTAwMDBDMzMxNjRGRkZGQTgKLToxMDU3MjAwMDNDMDgwODAwOEQwODNCMDgzQzA3MDgwMDhDRTczQjEwNEMKLToxMDU3MzAwMDAxMDc1MDIzM0MwMTA4MDBBQzJBM0IwODE1NDAwMDA2MzUKLToxMDU3NDAwMDAwMDAwMDAwM0MwODA4MDA4RDA4M0IyODM1MEEwMDQwOTYKLToxMDU3NTAwMDNDMDEwODAwQUMyQTNCMjgxMjAwMDA4NDhGODMwMDQ4REIKLToxMDU3NjAwMDhGNDcwRTEwOEY5MDAwNDhBRTA3MDAyMDhGNEIwRTE4MDkKLToxMDU3NzAwMEFFMEIwMDI0M0MxMDA4MDA5NjEwM0IxQzBFMDAwMDVDOTEKLToxMDU3ODAwMDAwMDAwMDAwMjQwRjAwNDBBRjRGMDgxNDhGODYwMDU0MjMKLToxMDU3OTAwMDhGODkwMDUwMDBEMDE4MjEwMDY5NzAyMzE5QzAwMDA0QkYKLToxMDU3QTAwMEFGODMwMDU0QUY2MzAwNTQ4RjY0MDA1NEFGODQwMDUwNDMKLToxMDU3QjAwMDEyMDAwMDBDMDAwMDAwMDA4RjQ0MDA3NDkzNzgwMDgxRjgKLToxMDU3QzAwMDM0MTlGQTAwMkYwMjAwMDcxMDQwMDAwNTAwOTkxODIxMzMKLToxMDU3RDAwMDkzN0YwMDgxMjQwQzAxRjQwM0VDNjgwNDAxQTQxODIxRDgKLToxMDU3RTAwMEFGNjMwMDBDOEY0QTA5NUM4Rjg4MDA1QzAxNDgyODIzNTYKLToxMDU3RjAwMDE4QTAwMDAzMDAwMDAwMDA4RjUwMDk1Q0FGOTAwMDVDMEYKLToxMDU4MDAwMDBFMDAwMDVFMDAwMDAwMDA4RjgzMDA1NDhFNDcwMDEwRTEKLToxMDU4MTAwMDNDMDEwODAwQUMyMzNCMzAwMEUwRjgwOTAwMDAwMDAwMjgKLToxMDU4MjAwMDNDMEIwODAwOEQ2QjNCMDgxNTYwRkYxMDI0MDgwMDA2MzgKLToxMDU4MzAwMDhGNTkwMDI0OTc1RjA5MDg4Rjg5MDA2NDhGOEUwMDU0NjgKLToxMDU4NDAwMDNDMEMwMDFGOTc4NDAwNTg4RjhGMDAyQzhGOTMwMDUwQzIKLToxMDU4NTAwMDMzRjhGRkZGMzU4REZGODAwMzJEMzAyNDAwMTgxMUMwNzEKLToxMDU4NjAwMDMyMzIwMDEwQUY0MjAwMjRBNUU0MDAyQ0FGNDYwMDI0RTEKLToxMDU4NzAwMEFGNjkwMDQ0QUY2RTAwNTBBRjczMDA1NDU2NDAwMDdDRDcKLToxMDU4ODAwMDhFODUwMDA0MzIyQTAwNDA1NTQwMDAzMThFOTEwMDA4NzgKLToxMDU4OTAwMDhFODgwMDBDMDEwMEY4MDkwMDAwMDAwMDhGQkYwMDJDNkEKLToxMDU4QTAwMDhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDNkEKLToxMDU4QjAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzMDNDMDkwODAwNDUKLToxMDU4QzAwMDk1MjkzQjFDM0MwMzA4MDA5NDYzM0IyNjNDMDQwODAwREMKLToxMDU4RDAwMDk0ODQzQjE4OTRGOTAwMjQzMTI1RkZGRjk0RjgwMDI4QTQKLToxMDU4RTAwMDAwNjVGODIxMDNFNDc4MjMwMDE5NjQwMDAwMTg2QzAwQjcKLToxMDU4RjAwMDI1RUVGRkVFMDFBRTMwMjUzNTgyODEwMDI0MDMwODAwM0QKLToxMDU5MDAwMEFEMDIwMDBDQUQwNjAwMTBBRDAzMDAxOEFEMDAwMDE0OTAKLToxMDU5MTAwMDBBMDAwOUIzMjUwODAwMUM5MzQzMDEwOThGODYwMDM4NEIKLToxMDU5MjAwMDAwMDMzRTAwMDBFNjQwMjVBRjQ4MDA4MDhGNUYwOUEwREQKLToxMDU5MzAwMDhGNTgwOUE0QUZCRjAwMTBBRjVGMEUxNDhGQjkwMDEwQ0QKLToxMDU5NDAwMEFGNTkwRTEwQUY1ODBFMUMwQTAwMDkyREFGNTgwRTE4OTMKLToxMDU5NTAwMDAyMjBGODA5MDAwMDAwMDA4RTg4MDAwQzAxMDBGODA5MDAKLToxMDU5NjAwMDAwMDAwMDAwMEEwMDBBNTA4RkJGMDAyQ0E0NjAwMDIwMzUKLToxMDU5NzAwMEE0NzMwMDIyMEEwMDBBMDVBQzczMDAyNDNDMDEwODAwNEQKLToxMDU5ODAwMEFDMjAzQjBDMEEwMDA5NTM4RTQyMDAwMDNDMDEwODAwODkKLToxMDU5OTAwMEFDMjQzQjBDMEEwMDA5NTM4RTQyMDAwMDNDMDkwODAwNkQKLToxMDU5QTAwMDk1MjkzQjFDM0MxRjA4MDA5N0ZGM0IyNjNDMDUwODAwM0YKLToxMDU5QjAwMDk0QTUzQjE4OTRGODAwMjQzMTI0RkZGRjAzRTRDODIxODgKLToxMDU5QzAwMDAzMjU3ODIzMDAxODZDMDAyNUVFRkZGMjAxQUU2MDI1NTgKLToxMDU5RDAwMEFDNEMwMDBDMjQwMjA4MDBBRDAyMDAxNEFEMDAwMDEwMTUKLToxMDU5RTAwMDBBMDAwOUIzMjUwODAwMTg5NEU2MDAyNDk0RTMwMDI4NkYKLToxMDU5RjAwMDNDMDkwODAwOTUyOTNCMUMwMDA2MjQwMDAwMDNGQzAwMUMKLToxMDVBMDAwMDM0ODU4MTAwMzdGOTA4MDBBRDA1MDAwQ0FEMTkwMDEwOTAKLToxMDVBMTAwMDBBMDAwOUIzMjUwODAwMTQxNDYwRkYwMjAwMDAwMDAwMEEKLToxMDVBMjAwMDk0RjgwMDI0M0MwOTA4MDA5NTI5M0IxQzAwMTg3QzAwRDAKLToxMDVBMzAwMDM1RUUwODAwQUQwRTAwMEMwQTAwMDlCMzI1MDgwMDEwNzEKLToxMDVBNDAwMDkzNTIwMTA5MDAwMDI4MjEwRTAwMDYyODMyNDQwMEZGNkQKLToxMDVBNTAwMDhGQkYwMDJDOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOUEKLToxMDVBNjAwMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDMwODQKLToxMDVBNzAwMDAwQTBGODA5MDAwMDAwMDAwQTAwMEE0QTMyMkEwMDQwOEIKLToxMDVBODAwMDEyMDBGRjZCMDAwMDAwMDA4RjRFMEUxNDhGOTIwMDQ4MzIKLToxMDVBOTAwMEFFNEUwMDIwOEY1MzBFMUMwQTAwMEEzNEFFNTMwMDI0NzEKLToxMDVBQTAwMDhGODIwMDE4MDA4MDQwMjEzQzA0MDEwMDkwNDcwMDg1NEYKLToxMDVBQjAwMDMwRTMwMDIwMTA2MDAwMDkwMDAwMDAwMDNDMDcwODAwRUYKLToxMDVBQzAwMDhDRTczQjMwOEY4MzAwMTQwMEUzMjAyMzA0ODAwMDA4MjAKLToxMDVBRDAwMDkzODkwMDAwMTRFMzAwMDMwMTAwMjAyMTAzRTAwMDA4ODMKLToxMDVBRTAwMDAwODAxMDIxM0MwNDAxMDAwM0UwMDAwODAwODAxMDIxMjgKLToxMDVBRjAwMDExMjAwMDBCMDA2NzM4MjM4RjhDMDAxQzI0MDkwMDM0MTAKLToxMDVCMDAwMDkxOEIwMEJDMzE2QTAwMDI1MTQwMDAwMTI0MDkwMDMwMzEKLToxMDVCMTAwMDAwRTk2ODJCMTVBMEZGRjEwMTAwMjAyMTAwRTkzODIzREUKLToxMDVCMjAwMDI0MTlGRkZDMDBCOUMwMjQwMEY5NzgyNDAwRjg3MDJCNzgKLToxMDVCMzAwMDE1QzBGRkVBMDFFODIwMjEzMEMyMDAwMzAwMDIxODIzNEIKLToxMDVCNDAwMDE0QzAwMDEyMzA2OTAwMDMwMDAwMzAyMTAwQTk3MDIxNDgKLToxMDVCNTAwMDAxQzY2ODIxMDBFRDYwMkIxMTgwRkZFMDNDMDQwMTAwQ0MKLToxMDVCNjAwMDJEMkYwMDAxMDAwNjQ4MkIwMTA1MzgyMTAxRTkzMDI0QzIKLToxMDVCNzAwMDE0QzBGRkRBMjRFNEZGRkMyNDE5RkZGQzAwQjlDMDI0QTAKLToxMDVCODAwMDAzMDgyMDIxMDNFMDAwMDgwMDgwMTAyMThGOEIwMDFDRjcKLToxMDVCOTAwMDI0MDYwMDA0OTE2QTAwQkMzMTQ0MDAwNDE0ODBGRkVDMjgKLToxMDVCQTAwMDAwQTk3MDIxMEEwMDBBRkMwMDAwMzAyMTI3QkRGRkU4OEYKLToxMDVCQjAwMEFGQkYwMDEwOEY0NjAxMDA5MzRBMDEwOTNDMUYwODAwNDcKLToxMDVCQzAwMDhGRkYwMDkwMjQwN0ZGODAzMTRGMDBGRjMxRTgwMDdGRjYKLToxMDVCRDAwMDAwMDg2MTQwMDNFNkM4MjEwMzJDQzAyMTI3MDkwMTIwRTkKLToxMDVCRTAwMDAxMjc3MDI0M0MwMTA4MDBBMDJGM0I2Q0FGNEUwODBDMkQKLToxMDVCRjAwMDNDMEQwODAwOERBRDAwOTAzQzA0MDA4MDM0ODIwMDAzMTEKLToxMDVDMDAwMDAxQTY1ODIxMDE2QzE4MjEyNDY1MDEyMDMwQUEwMDc4RDIKLToxMDVDMTAwMDAxNDI0MDI1QUY0ODA4MUMzQzFGMDgwMDhGRkYwMDkwNDAKLToxMDVDMjAwMDhGODgwMDQ0MDNFNkMwMjEzMzE5MDAwNzAzMDc0ODI0ODYKLToxMDVDMzAwMDAzM0E3ODIxQUY0OTAwMjgyNUU5MDlDMDk1MkUwMDAyRDIKLToxMDVDNDAwMDNDMEQwODAwOERBRDAwOEMzQzBBMDgwMDhENEEwMDkwODgKLToxMDVDNTAwMDMxQ0MzRkZGMDFBNjE4MjEwMDBDNTk4MDAwNkIyODIxOTAKLToxMDVDNjAwMDAwQTcyMDI0QUY0NDAwMkM5NTIyMDAwMjNDMUYwODAwMEUKLToxMDVDNzAwMDhGRkYwMDhDOTEwNzAwODUzMDU5M0ZGRjAzRTY3ODIxQTQKLToxMDVDODAwMDAwMTlDMTgwMDE0NjcwMjEwMUY4NjgyMTMxQ0MwMDdGRTQKLToxMDVDOTAwMDMxQUIwMDdGMDE5QTI4MjEwMTdBNTAyMTNDMDMwMDBDOEUKLToxMDVDQTAwMDNDMDQwMDBFMDBBMzI4MjEwMTQ0MTAyMTMwRTYwMDIwMEUKLToxMDVDQjAwMDI3NDcwOTgwQUY4MjAwMjhBRjg4MDAxOEFGODkwMDIwRUQKLToxMDVDQzAwMEFGODUwMDFDMTBDMDAwMDZBRjg3MDAyNDhEMDIwMDUwNzUKLToxMDVDRDAwMDhDQTQwMTBDMDA0NDMwMjMxOEMwMDA3NzAwMDAwMDAwQTEKLToxMDVDRTAwMDkxMEMwMDg1MjQwREZGREYwMThEMzgyNEExMDcwMDg1NkMKLToxMDVDRjAwMDhGOEIwMDE4OEY4OTAwMjA4Rjg3MDAyNDhENjUwMDRDQzIKLToxMDVEMDAwMEFGODUwMDE0OTEyRjAwMEQzMUVFMDAyMDExQzAwMDE3NTcKLToxMDVEMTAwMDAwMDAwMDAwMjQwOTAwMDFBMzg5MDAwMEFGODAwMDA4RjIKLToxMDVEMjAwMDhDRTQwMDI0OEY4NTAwMDgyNDBBMDAwOEFGODAwMDA0NUEKLToxMDVEMzAwMEFGODAwMDBDM0MwMTA4MDBBNDJBM0IxQTNDMDEwODAwN0IKLToxMDVENDAwMEE0MjAzQjJFMEUwMDBBRDAwMDAwMzAyMThGODUwMDIwQjkKLToxMDVENTAwMDhGQkYwMDEwQUY4MjAwMTA5MEE4MDAwRDI3QkQwMDE4NjMKLToxMDVENjAwMDAwMDgzOTQyMDNFMDAwMDgzMEUyMDAwMTkxM0YwMDAyRTAKLToxMDVENzAwMDI0MTgwMDAxMzNGOTAwRkYwMDE5MjE4MjEwOTgwMDM5MUUKLToxMDVEODAwMDI0MDgwMDAyMTA4ODAwNUI4Rjg2MDAyODhDRTUwMDI0MjAKLToxMDVEOTAwMDE0QTAwMDFCOEY5RjAwMUM5MTIyMDAwMDI0MEEwMDA1MDQKLToxMDVEQTAwMDMwNDYwMDNGMTBDQTAwNDcyNDA0MDAwMThGODYwMDA0REIKLToxMDVEQjAwMEEzODQwMDAwQUY4NjAwMENBRjg2MDAwODhDRTQwMDI0QUEKLToxMDVEQzAwMDhGODUwMDA4MjQwQTAwMDgzQzAxMDgwMEE0MkEzQjFBMTkKLToxMDVERDAwMDNDMDEwODAwQTQyMDNCMkUwRTAwMEFEMDAwMDAwMDAwNjkKLToxMDVERTAwMDhGODUwMDIwOEZCRjAwMTBBRjgyMDAxMDkwQTgwMDBEOUIKLToxMDVERjAwMDI3QkQwMDE4MDAwODM5NDIwM0UwMDAwODMwRTIwMDAxMjYKLToxMDVFMDAwMDhDRjgwMDA4OENGOTAwMjQ4RkVFMDBDNEEzODAwMDAwRjkKLToxMDVFMTAwMDhDRTQwMDI0QUY4RTAwMDg4Rjg1MDAwODhGODYwMDA0NzQKLToxMDVFMjAwMDAzMTk3ODIzMjQwQTAwMDhBRjhGMDAwQzNDMDEwODAwRjYKLToxMDVFMzAwMEE0MkEzQjFBM0MwMTA4MDBBNDIwM0IyRTBFMDAwQUQwRTUKLToxMDVFNDAwMDAwMDAwMDAwOEY4NTAwMjA4RkJGMDAxMEFGODIwMDEwN0YKLToxMDVFNTAwMDkwQTgwMDBEMjdCRDAwMTgwMDA4Mzk0MjAzRTAwMDA4OTMKLToxMDVFNjAwMDMwRTIwMDAxOTEyMzAwMDAzMDYyMDAzRjEwNDQwMDI3MUYKLToxMDVFNzAwMDhGODUwMDFDOENFNDAwMjQxNDgwMDAyMTAwMDAwMDAwQTkKLToxMDVFODAwMDhEMkUwMDE4M0MxODdGRkY4Rjg1MDAxQzM3MEZGRkZGRjkKLToxMDVFOTAwMDAxQ0YxODI0QUY4MzAwMDQ4RjlGMDAwNDhDQTgwMDg0RDYKLToxMDVFQTAwMDAzRThDODJCMTcyMDAwMDIwM0UwMjAyMThDQTQwMDg0MDMKLToxMDVFQjAwMDBBMDAwQjhCQUY4NDAwMDQ4Q0EzMDEwQzBBMDAwQjY5NTEKLToxMDVFQzAwMEFGODMwMDE0OEQyQzAwMTg4Rjg2MDAwNDNDMEQ3RkZGREIKLToxMDVFRDAwMDhGODkwMDFDMzVBM0ZGRkYwMTgzNTgyNDI0MDQwMDAxOEYKLToxMDVFRTAwMEFGOEIwMDBDQUQyMDAwQ0NBMzg0MDAwMDBBMDAwQjk3MDAKLToxMDVFRjAwMEFGODYwMDA4OENDQTAwMTQwQTAwMEI4QkFGOEEwMDA0MUUKLToxMDVGMDAwMDhDQTMwMEM4MEEwMDBCQ0VBRjgzMDAwNDhGODQwMDI4NDYKLToxMDVGMTAwMDhDQUMwMDY0OEM4RDAwMTQwMThENTgyQjExNjAwMDA0MzIKLToxMDVGMjAwMDAwMDAwMDAwOENBMjAwNjQwQTAwMEJDRUFGODIwMDA0QzcKLToxMDVGMzAwMDhDODIwMDE0MEEwMDBCQ0VBRjgyMDAwNDhGODUwMDA4MEIKLToxMDVGNDAwMDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDE0QTAwMDA3RDkKLToxMDVGNTAwMEFGQjAwMDEwOEY4NjAwMjAyNDAyMDAwNTkwQzQwMDAwMUUKLToxMDVGNjAwMDMwODMwMDNGMTA2MjAwQjY4Rjg0MDAxQzhGOTEwMDA0QzQKLToxMDVGNzAwMDAwQTA4MDIxOEY4QzAwMjQzQzA1MDgwMDhDQTUzQjBDRTAKLToxMDVGODAwMDhEOEIwMDA0MzE2NjNGRkYwMEM1NTAyQjU1NDAwMDAxNEEKLToxMDVGOTAwMDAwQzAyODIxOTM4RDAwMDAxMUEwMDA3MzAwQjBGODJCRTEKLToxMDVGQTAwMDhGOTgwMDFDMjQwNDAwMzQ5MzBGMDBCQzMxRUUwMDAyRDMKLToxMDVGQjAwMDUxQzAwMDAxMjQwNDAwMzAwMEE0QzgyQjE3MjAwMEQxRDgKLToxMDVGQzAwMDAwMDAwMDAwMDBBNDI4MjMwMEIwRjgyQjNDMDEwODAwQ0EKLToxMDVGRDAwMEE0MjQzQjE4MTdFMDAwNjgwMjAwMjAyMTNDMDMwODAwQkQKLToxMDVGRTAwMDhDNjMzQjA4MDA4MzEwMkI1NDQwMDAwMTAwODAxODIxNzMKLToxMDVGRjAwMDhGODgwMDIwM0MwMTA4MDBBQzIzM0IxMDAwMDA0ODIxQTIKLToxMDYwMDAwMDkxMDQwMDBEMzA4MzAwMjA1MDYwMDAwMThGNDkwRTE4NkMKLToxMDYwMTAwMDhGODMwMDEwMDEyMzM4MkIxMEUwMDA1OTAwMDAwMDAwOEUKLToxMDYwMjAwMDNDMDQwODAwOEM4NDNCMTAwMDg5NTgyMTAwNkI1MDJCRTUKLToxMDYwMzAwMDExNDAwMDU2MDA5MDYwMkIwMDY5MzAyMzAwQzAyMDIxRTEKLToxMDYwNDAwMDNDMDEwODAwQUMyNjNCMTAxMjAwMDAwMzI0MUZGRkZDOUIKLToxMDYwNTAwMDEwOTAwMDhBMzIyNzAwMDMwMDlGQzgyNDNDMDEwODAwRUEKLToxMDYwNjAwMEFDMzkzQjEwM0MwMTA4MDBBNDIwM0IyRThGODQwMDA4NzMKLToxMDYwNzAwMDEyMDQwMDA3OEY4MzAwMUNBRjkxMDAwNDAyMDAyMDIxNEUKLToxMDYwODAwMDhDNzEwMENDQUY5MDAwMDgyNjMwMDAwMUFDNzAwMENDQzEKLToxMDYwOTAwMDNDMDIwODAwOEM0MjNCMTA4RjhBMDAwQzI0MDcwMDE4MzkKLToxMDYwQTAwMDAwODIyMDIzMDE0MjI4MjNBRjg0MDAwODEwODAwMDAyRDAKLToxMDYwQjAwMEFGODUwMDBDMjQwNzAwMTA4Rjg2MDAxODNDMDEwODAwRjMKLToxMDYwQzAwMEEwMjczQjJDMjQwNzAwNDA5MENDMDA4NTMxOEIwMEMwREEKLToxMDYwRDAwMDExNjcwMDQwOEY4RDAwMTAxNEEwMDAxNTAwMDAyMDIxRDIKLToxMDYwRTAwMDkzNEEwMTA5OEY0MjA5NzQzMTQ1MDBGRjAwMDIyNjAyREMKLToxMDYwRjAwMDI0QTMwMDAxMzA5MDAwN0YzMDcxMDA3RjEyMzAwMDdBQkQKLToxMDYxMDAwMDI0MDdGRjgwQTBDMzAwODMzQzA5MDgwMDhEMjkzQjI4OTkKLToxMDYxMTAwMDhGODgwMDIwMjQwRDAwMDIzNTJDMDAwODNDMDEwODAwNjcKLToxMDYxMjAwMEEwMkQzQjZEM0MwMTA4MDBBQzJDM0IyODI0MDQwMDEwNDIKLToxMDYxMzAwMDkxMEUwMDBEMzFDNjAwMjAxMEMwMDAwNTAwODAxODIxMEUKLToxMDYxNDAwMDI0MDgwMDAxM0MwMTA4MDBBQzI4M0IxMDM0ODMwMDAxMDYKLToxMDYxNTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwNjAxMDIxQTUKLToxMDYxNjAwMDAzRTAwMDA4MjdCRDAwMjAzQzAxMDgwMEE0MjAzQjE4RTQKLToxMDYxNzAwMDEzRTBGRjlBMDIwMDIwMjEwQTAwMEMxRjAwQTAyMDIxM0EKLToxMDYxODAwMDNDMDQwODAwOEM4NDNCMTAwMDkwNjAyQjExODBGRkFFMTMKLToxMDYxOTAwMDAwMDAwMDAwM0MwRjA4MDA5NUVGM0IxODAxRTQ3MDIxNUYKLToxMDYxQTAwMDAxQzY2ODJCMTFBMDAwMDcyQzgyMDAwNDNDMUY2MDAwNzAKLToxMDYxQjAwMDhGRjk1NDA0MzMzODAwM0YxNzAwRkZFNTI0MDMwMDQyRjEKLToxMDYxQzAwMDJDODIwMDA0MTA0MEZGQTAyNDAzMDA0MjBBMDAwQzdEMzIKLToxMDYxRDAwMDhGQkYwMDE4MTUyREZGQzAwMDAwMDAwMDhDREYwMDc0NzkKLToxMDYxRTAwMDNDMDM4MDAwMjQwNUZGODAwM0UzQzgyNUFDRDkwMDc0N0MKLToxMDYxRjAwMDkwRDgwMDg1MjQwRTAwMDQyNDA0MDAxMDMzMEYwMDNGQzMKLToxMDYyMDAwMDAxRTU0MDI1QTBDODAwODU4Rjg4MDAyMDNDMDEwODAwREEKLToxMDYyMTAwMEEwMkUzQjZEMjQwMzAwMDE5MTA2MDAwRDMwQzkwMDIwMjMKLToxMDYyMjAwMDE1MjAwMDAzMDAwMDAwMDAzQzAzMDgwMDhDNjMzQjEwQjUKLToxMDYyMzAwMDNDMDEwODAwQUMyMzNCMDgwQTAwMEM3NDAwMDAwMDAwN0QKLToxMDYyNDAwMDhGODcwMDBDOEM4ODAwODQwMEU4MjgyQjE0QTAwMDAyQTMKLToxMDYyNTAwMDAwRTA4ODIxOEM5MTAwODQyNDA5MDAwMUEzODkwMDAwQkEKLToxMDYyNjAwMDhGNDQwRTE4MDIyMDI4MjEwRTAwMEFEMDAyMjAzMDIxNkYKLToxMDYyNzAwMDAyMjA4MDIxMEEwMDBDMDVBRjgyMDAxMDAwMDcxODIzQkQKLToxMDYyODAwMDMwNjYwMDAzM0MwMTA4MDBBNDI2M0IyRTEyMjAwMDA1QzYKLToxMDYyOTAwMDhGOEMwMDFDOTE4QjAwQkMzMTZBMDAwNDE1NDAwMDE1RTYKLToxMDYyQTAwMDI0Q0QwMDA0M0MwRjA4MDA5NUVGM0IyRTAxRTQ3MDIxNDMKLToxMDYyQjAwMDAwQUUzMDJCNTBDMEZGNkU4Rjg0MDAwODJDODUwMDA1ODcKLToxMDYyQzAwMDE0QTBGRkEzMjQwMzAwNDIzMDk4MDAwMzE3MDAwMDAyMkIKLToxMDYyRDAwMDAwOTgxODIzMjQ4M0ZGRkMzQzAxMDgwMEFDMjMzQjEwRUEKLToxMDYyRTAwMDBBMDAwQzQxMDAwMDAwMDAwMEE3NTgyNDBBMDAwQzY5QjUKLToxMDYyRjAwMDAxNjcxODI2M0MwMTA4MDBBNDJEM0IyRTBBMDAwQ0QxOTIKLToxMDYzMDAwMDAwMDAwMDAwM0MwMTA4MDBBQzIwM0IxMDBBMDAwQzdDOUYKLToxMDYzMTAwMDI0MDMwMDQyOEY4MzAwMEMxNDYwMDAwNzAwMDAxMDIxNEEKLToxMDYzMjAwMDhGODgwMDIwMjQwNTAwMDU5MTA2MDAwMDMwQzQwMEZGN0UKLToxMDYzMzAwMDEwODUwMDAzMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwREEKLToxMDYzNDAwMDkxMEEwMDE4MzE0OTAwRkYwMDA5MzlDMjE0RTBGRkZBMzAKLToxMDYzNTAwMDhGODUwMDE4M0MwNDA4MDA5NDg0M0IxODNDMDMwODAwMTcKLToxMDYzNjAwMDhDNjMzQjMwM0MxOTA4MDA4RjM5M0IxMDNDMEYwODAwMTAKLToxMDYzNzAwMDk1RUYzQjJFMDA2NEMwMjE4Q0FEMDA1NDAzMTk3MDIxQjEKLToxMDYzODAwMDAxQ0Y2MDIxMDE4RDU4MjMxOTYwMDAxRDAwMDAwMDAwMUQKLToxMDYzOTAwMDkxMEUwMDFDOEY4QzAwMjg5NzRCMEUxMDMxQ0QwMEZGMDIKLToxMDYzQTAwMDhEODUwMDA0MDE2RDMwMjM4RDg4MDAwMDMwQ0VGRkZGMDUKLToxMDYzQjAwMDAwMEU1MTAwMDBBQUM4MjEwMDAwMzgyMTAxMDcyMDIxNDkKLToxMDYzQzAwMDAzMkExODJCMDA4M0MwMjFBRDk5MDAwNEFEOTgwMDAwNkEKLToxMDYzRDAwMDkxOEYwMDBBMDFDRjY4MjFBMThEMDAwQThGODgwMDI4QzMKLToxMDYzRTAwMDk3NEIwRTEyQTUwQjAwMDg5NTBBMDAzODI1NDkwMDAxQUQKLToxMDYzRjAwMEE1MDkwMDM4OTEwNzAwMEQzNEU2MDAwOEExMDYwMDBEM0MKLToxMDY0MDAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDkzODcwMDAwQzQKLToxMDY0MTAwMDhGOEYwMDIwOEZBRDAwMTQzQzBFN0ZGRjhGODkwMDA4MDYKLToxMDY0MjAwMDM1QzhGRkZGQUZCRjAwMUNBRkIwMDAxODAxQTgxODI0OEIKLToxMDY0MzAwMDkxRUEwMDBEMDAwNzE3QzAzQzFGQkZGRjAwNjI1ODI1RkUKLToxMDY0NDAwMDJEMkUwMDAxOEY5MDAwMTQzN0Y5RkZGRjNDMTgwODAwMzMKLToxMDY0NTAwMDhGMTgzQjMwM0MwRjA4MDA5NUVGM0IyNjAxNzk2ODI0RUMKLToxMDY0NjAwMDAwMEU0NzgwM0MwN0VGRkYzQzA1RjBGRjAxQTgxODI1MTAKLToxMDY0NzAwMDMxNDkwMDIwMzRFMkZGRkYzNEFDRkZGRjAzMTA1ODIzMDIKLToxMDY0ODAwMDI3QTUwMDEwMjQwNjAwMDIyNUVBMDAwMjAwNjIxODI0NTUKLToxMDY0OTAwMDAwODA4MDIxMTUyMDAwMDIwMDAwNDAyMThGNDgwRTFDNDIKLToxMDY0QTAwMEE3QUEwMDEyMDU2MDAwMzcyNDA3MDAwMDMwRkYwMEZGOTQKLToxMDY0QjAwMDAwMUZDRjAwOEY4QjAwMTgwMDc5MzgyNUFGQTcwMDE0N0MKLToxMDY0QzAwMDkxNkYwMDg1M0MwODA4MDA5MTA4M0IyRDNDMThERkZGQzgKLToxMDY0RDAwMDMxRUUwMEMwMzcwQUZGRkYwMDBFMTgyQjNDMUYwODAwRUEKLToxMDY0RTAwMDk3RkYzQjIwMDBFQTY4MjRBM0E4MDAxMTAwMDMxNzQwOEYKLToxMDY0RjAwMDAxQTI0ODI1OEZCOTAwMTBBRkE5MDAxNDNDMEEwODAwN0EKLToxMDY1MDAwMDkxNEEzQjJGQTdCRjAwMTY4RkE4MDAxNDAzMkNDMDI0NkMKLToxMDY1MTAwMDNDMEIwMTAwM0MwRjBGRkYwMzBCMTgyNTMxNDcwMDAzMTQKLToxMDY1MjAwMDM1RUVGRkZGMDEwQzY4MjQwMDA3MTYwMDAwNkVGODI0MEEKLToxMDY1MzAwMDNDMDk3MDAwMDFBMkM4MjUwM0U5NTgyNUFGQjkwMDE0MzEKLToxMDY1NDAwMEFGQUIwMDEwMEUwMDAwNzJBM0EwMDAxNThGOEMwMDIwQ0UKLToxMDY1NTAwMDI2MDIwMDA4OTE4NjAwMEQzMEM0MDAyMDEwODAwMDA2M0QKLToxMDY1NjAwMDhGQkYwMDFDM0MwNTA4MDA5NEE1M0IxQzI0QjBGRkZGMTYKLToxMDY1NzAwMDNDMDEwODAwQTQzMDNCMUM4RkIwMDAxODAzRTAwMDA4NjkKLToxMDY1ODAwMDI3QkQwMDIwOEY5ODAwMTAwMTE4NTAyQjU1NDBGRkM3RTEKLToxMDY1OTAwMDI0MDcwMDAxMEEwMDBENTQzMEZGMDBGRjkzODIwMDAwMjEKLToxMDY1QTAwMDI3QkRGRkUwQUZCRjAwMTgxMDQwMDAwRjAwODA1MDIxNTIKLToxMDY1QjAwMDhGODgwMDIwMjQwQjAwMDU4Rjg5MDAwNDkxMDcwMDAwQkMKLToxMDY1QzAwMDhGODQwMDFDMDEwMDI4MjEzMEUzMDAzRjhGODYwMDI4QzMKLToxMDY1RDAwMDEwNkIwMDA4MDAwMDM4MjFBRkE5MDAxMDBFMDAwNDM5MkMKLToxMDY1RTAwMEFGQUEwMDE0QTM4MDAwMDA4RkJGMDAxODAzRTAwMDA4Q0EKLToxMDY1RjAwMDI3QkQwMDIwOEQxOTAwMTgzQzBGMDgwMDhERUYzQjEwQkYKLToxMDY2MDAwMDhGOTgwMDBDM0MwMjdGRkY4RDA4MDAxNDM0NUZGRkZGNjEKLToxMDY2MTAwMDAzM0Y2ODI0MDFGODcwMjEwMUFFNjAyMzAxODgzODIxMEUKLToxMDY2MjAwMEFGQTkwMDEwMEUwMDA0MzlBRkFBMDAxNDBBMDAwREEyOTEKLToxMDY2MzAwMEEzODAwMDAwOEY4NzAwMjAzQzA1MDgwMDk0QTUzQjJFMTYKLToxMDY2NDAwMDNDMDIwODAwOEM0MjNCMjg5MEU2MDAwRDAwMDUyNDAwMjcKLToxMDY2NTAwMDMwQzMwMDIwMTA2MDAwMkMwMDQ0NDAyNThGODUwMDE4QjYKLToxMDY2NjAwMDAwMDA2MDIxMjQwQjAwMDE5MEEzMDA4NTAwMDA0ODIxNTgKLToxMDY2NzAwMDI0MEEwMDAxM0MwRjgwMDAzNUVFMDA3MDhEQzcwMDAwMzkKLToxMDY2ODAwMEFGODcwMDMwOEY1ODAxNzgwNzAwRkZGRTNDMDM4MDAwODEKLToxMDY2OTAwMDM0NzkwMDcwOEYzODAwMDAzQzA1MDgwMDhDQTUwMDc0MjgKLToxMDY2QTAwMDNDMEQwODAwOERBRDAwNzAwMzA3NzgyMzAwQUYzODIxNDIKLToxMDY2QjAwMDAwMDAxMDIxMDBFRjMwMkIwMUEyMjAyMTAwODYxODIxQkMKLToxMDY2QzAwMDNDMDEwODAwQUMyNzAwNzQzQzAxMDgwMEFDMjMwMDcwQkEKLToxMDY2RDAwMEFGNEIwMTQ4M0MxOTA4MDA4RjM5M0IzMEE3NDkwMTQ0QjIKLToxMDY2RTAwMEE3NEEwMTQ2QUY1OTAxNEMzQzBCMDgwMDkxNkIzQjJENkEKLToxMDY2RjAwMEEzNEIwMTUyQUY0ODAxNTQzQzA4MTAwMEE3NEMwMTU4NkQKLToxMDY3MDAwMDAzRTAwMDA4QUY0ODAxNzg4RjRCMEUxQzNDMEEwODAwREMKLToxMDY3MTAwMDhENEEzQjEwOTc0OTBFMTY5NzREMEUxNDAxNDU2MDIxODYKLToxMDY3MjAwMDMxMkFGRkZGMEEwMDBEQzUzMUE5RkZGRjhGODMwMDIwMkEKLToxMDY3MzAwMDkwNjQwMDBEMzA4MjAwMjAxMDQwMDAyOTAwMDAwMDAwMEQKLToxMDY3NDAwMDAwMDA0ODIxMDAwMDUwMjEwMDAwNDAyMTNDMDc4MDAwNEIKLToxMDY3NTAwMDM0RUIwMDcwOEQ2NzAwMDBBRjg3MDAzMDhGNEMwMTc4RkMKLToxMDY3NjAwMDA1ODBGRkZFM0MwRDgwMDAzNUFDMDA3MDhEOEIwMDAwNzUKLToxMDY3NzAwMDNDMDUwODAwOENBNTAwNzQzQzA0MDgwMDhDODQwMDcwNjMKLToxMDY3ODAwMDAxNjczMDIzMDBBNjc4MjEwMDAwMTAyMTAxRTZDODJCMDQKLToxMDY3OTAwMDAwODJDMDIxMDMxOTcwMjEzQzAxMDgwMEFDMkYwMDc0NTUKLToxMDY3QTAwMDNDMDEwODAwQUMyRTAwNzBBRjQ5MDE0ODNDMEQwODAwQzgKLToxMDY3QjAwMDhEQUQzQjMwQTc0ODAxNDQyNDA5MDA0MEE3NEEwMTQ2NUIKLToxMDY3QzAwMDNDMDgxMDAwMjQwQUZGOTFBRjREMDE0Q0EzNEEwMTUyMkUKLToxMDY3RDAwMEFGNDkwMTU0QTc0MDAxNTgwM0UwMDAwOEFGNDgwMTc4RDEKLToxMDY3RTAwMDhGNDkwRTE4OTc0NjBFMTI5NzQ1MEUxMDMwQ0FGRkZGQkMKLToxMDY3RjAwMDBBMDAwREZCMzBBOEZGRkY4RjgzMDAyMDI3QkRGRkY4QTQKLToxMDY4MDAwMDkwNjQwMDBEMzA4MjAwMjAxMDQwMDAzQTAwMDAwMDAwMkIKLToxMDY4MTAwMDI0MEIwMDAxMDAwMDQ4MjEyNDBBMDAwMTNDMDg4MDAwRUMKLToxMDY4MjAwMDM1MDcwMDcwOENFMzAwMDBBRjgzMDAzMDhGNEMwMTc4OTcKLToxMDY4MzAwMDA1ODBGRkZFM0MwRTgwMDAzQzA0MDgwMDkwODQzQjZDMDkKLToxMDY4NDAwMDM1QzcwMDcwOENFQzAwMDAzQzA1MDgwMDhDQTUwMDc0NzYKLToxMDY4NTAwMEEzQTQwMDAzM0MxOTA4MDA4RjM5MDA3MDhGQUQwMDAwMUQKLToxMDY4NjAwMDAxODMzMDIzMDBBNjM4MjEwMDAwMTAyMTAzMjI3ODIxNjMKLToxMDY4NzAwMDAwRTZDMDJCMDFGODYwMjEwMUFFNDAyNUFGQTgwMDAwNjIKLToxMDY4ODAwMDNDMDEwODAwQUMyNzAwNzQzQzAxMDgwMEFDMkMwMDcwRUYKLToxMDY4OTAwMDkzNDYwMTBBM0MwNDA4MDA5MDg0M0I2REEzQTAwMDAyQ0IKLToxMDY4QTAwMEEzQTYwMDAxOEZBMzAwMDAzQzA1ODBGRjMwOTkwMDdGNjQKLToxMDY4QjAwMDM0QTJGRkZGMDA2Mjc4MjQwMDE5QzYwMDAxRjg3MDI1OTkKLToxMDY4QzAwMDI0MEQzMDAwQUY0RTAxNEMyN0JEMDAwOEFGNEQwMTU0RTAKLToxMDY4RDAwMEE3NDAwMTU4QUY0QjAxNDhBNzQ5MDE0NEE3NEEwMTQ2QzgKLToxMDY4RTAwMDNDMDkxMDAwMjQwQUZGODBBMzRBMDE1MjAzRTAwMDA4N0IKLToxMDY4RjAwMEFGNDkwMTc4OEY0QjBFMTg5NzQ2MEUxMjk3NDUwRTEwMzAKLToxMDY5MDAwMDMwQ0FGRkZGMEEwMDBFMkYzMEE5RkZGRjhGODUwMDE4NDUKLToxMDY5MTAwMDI0MDIwMDgwOTBBNDAwODUzMDgzMDBDMDEwNjIwMDA1MkUKLToxMDY5MjAwMDhGODYwMDFDOEY4ODAwMDQ4Rjg3MDAwOEFDQzgwMEM4QzEKLToxMDY5MzAwMEFDQzcwMEM0MDNFMDAwMDgwMDAwMDAwMDNDMEEwODAwRTcKLToxMDY5NDAwMDI1NEEzN0NDM0MwOTA4MDAyNTI5Mzg5ODNDMDgwODAwMUUKLToxMDY5NTAwMDI1MDgyQzRDM0MwNzA4MDAyNEU3MzlBQzNDMDYwODAwMEQKLToxMDY5NjAwMDI0QzYzNjNDM0MwNTA4MDAyNEE1MzNCNDNDMDQwODAwOEEKLToxMDY5NzAwMDI0ODQyRkRDM0MwMzA4MDAyNDYzMzZENDNDMDIwODAwNDYKLToxMDY5ODAwMDI0NDIzNEE4M0MwMTA4MDBBQzJBM0MzODNDMDEwODAwRjEKLToxMDY5OTAwMEFDMjkzQzM0M0MwMTA4MDBBQzI4M0MzMDNDMDEwODAwRTgKLToxMDY5QTAwMEFDMjczQzNDM0MwMTA4MDBBQzI2M0M0QzNDMDEwODAwQjgKLToxMDY5QjAwMEFDMjUzQzQ0M0MwMTA4MDBBQzI0M0M0MDNDMDEwODAwQjAKLToxMDY5QzAwMEFDMjMzQzUwM0MwMTA4MDBBQzIyM0M0ODAzRTAwMDA4RUEKLTowNDY5RDAwMDAwMDAwMDAwQzMKLTowMDAwMDAwMUZGCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQotICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotICogYWNjb21wYW55aW5nIGl0LgotICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTJlNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncuaWhleApAQCAtMCwwICsxLDU4NDEgQEAKKzoxMDAwMDAwMDA4MDAwMTEwMDgwMDAwMDAwMDAwNENDODAwMDAwMEM4RjMKKzoxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA0Q0M4QzQKKzoxMDAwMjAwMDAwMDAwMDE0MDAwMDREOTAwODAwMDA4ODA4MDAwMDAwNDcKKzoxMDAwMzAwMDAwMDA1OEQwMDAwMDREQTQwODAwNUE0MDAwMDAwMDg0ODEKKzoxMDAwNDAwMDAwMDBBNjc0MDgwMDU4RDAwMDAwMDE1NDAwMDBBNkY4NzMKKzoxMDAwNTAwMDA4MDAzMUQ4MDgwMDAwMDAwMDAwNzBGMDAwMDBBODRDMzMKKzoxMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA3MEYwMjgKKzoxMDAwNzAwMDAwMDAwMDI0MDAwMTE5M0MwODAwMDQ4ODA4MDAwNDAwNjYKKzoxMDAwODAwMDAwMDAxNzVDMDAwMTE5NjAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDAwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDAwQTAwMDA4MDAwMEE4MDgwMDAwMDAwMDAwM0IzODAwMDEzMEJDMzgKKzoxMDAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKKzowODAwQzAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjA4MDBDODAwMEEwMDAwNDQwMDAwMDAwMEUyCis6MTAwMEQwMDAwMDAwMDAwMDAwMDAwMDBENjM2RjZEMzUyRTMwMkUzMEUzCis6MTAwMEUwMDA2QTMzMDAwMDA1MDAwMDAyMDAwMDAwMDAwMDAwMDAwMzY5Cis6MTAwMEYwMDAwMDAwMDAxNDAwMDAwMDMyMDAwMDAwMDMwMDAwMDAwMEI3Cis6MTAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTAwMTEwMDAwMDAwMDAxMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwNTQ5Cis6MTAwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM3Cis6MTAwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTAwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTAwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTAwMTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDVGCis6MTAwMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTAwMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzBDCis6MTAwMUUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMEFGCis6MTAwMUYwMDAyNDQyNEQwMDNDMDMwODAwMjQ2MzRERkNBQzQwMDAwMDQ5Cis6MTAwMjAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDA1Cis6MTAwMjEwMDAzN0JEN0ZGQzAzQTBGMDIxM0MxMDA4MDAyNjEwMDExMDIwCis6MTAwMjIwMDAzQzFDMDgwMDI3OUM0RDAwMEUwMDAyMTQwMDAwMDAwMDNBCis6MTAwMjMwMDAwMDAwMDAwRDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMEY1Cis6MTAwMjQwMDA5NzQyMDEwODMwNDM3MDAwMjQwMjIwMDAxMDYyMDAwQjI2Cis6MTAwMjUwMDAyODYyMjAwMTE0NDAwMDJGMDAwMDEwMjEyNDAyNDAwMEQ5Cis6MTAwMjYwMDAxMDYyMDAyNTAwMDAwMDAwMjQwMjYwMDAxMDYyMDAyNkQ5Cis6MTAwMjcwMDAwMDAwMTAyMTBBMDAwMDk0OEZCRjAwMTQyNzUwMDEwMEQ1Cis6MTAwMjgwMDA5MjAyMDAwOTEwNDAwMDFBMjQwMzAwMDEzQzAyMDgwMEY5Cis6MTAwMjkwMDA4QzQyMDAyMDEwNDAwMDE2MDAwMDE4MjEwRTAwMDUyQjkzCis6MTAwMkEwMDAwMDAwMDAwMDk2MDMwMDA4M0MwNjA4MDA5NEM2NERCRUZFCis6MTAwMkIwMDA4RTA0MDAxODhGODIwMDIwOTYwNTAwMEMwMDAzMUMwMDlECis6MTAwMkMwMDAwMDY2MTgyNUFDNDQwMDAwQUM0NTAwMDQyNDA0MDAwMTdECis6MTAwMkQwMDBBQzQwMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNDM2Cis6MTAwMkUwMDBBQzQwMDAxODBFMDAwNTUwQUM0MzAwMUMwMDAwMTgyMTYzCis6MTAwMkYwMDAwQTAwMDA5MzAwNjAxMDIxMEUwMDAzQkQwMDAwMDAwMDAyCis6MTAwMzAwMDAwQTAwMDA5MzAwMDAxMDIxMEUwMDBGODEwMDAwMDAwMDgxCis6MTAwMzEwMDAwMDAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODEwCis6MTAwMzIwMDAyN0JEMDAxODI3QkRGRkUwQUZCMDAwMTBBRkJGMDAxODE5Cis6MTAwMzMwMDBBRkIxMDAxNDI3NTAwMTAwOTIwMzAwMEIyNDAyMDAxQUYxCis6MTAwMzQwMDA5NjExMDAwODE0NjIwMDVCMDAwMDI4MjEzMjIyMDAwMThGCis6MTAwMzUwMDAxMDQwMDAwODAwMDAwMDAwOEUwMjAwMDA5NjAzMDAxNDA4Cis6MTAwMzYwMDAwMDAyMTFDMjAwMDIxMDQwMDA1QTEwMjEwQTAwMDBEQkY2Cis6MTAwMzcwMDBBNDQzMDA4MDNDMDIwODAwOEM0MjAwMjAxMDQwMDAyODZBCis6MTAwMzgwMDAwMDAwMDAwMDBFMDAwNTJCMDAwMDAwMDA5NzQyMDEwODRECis6MTAwMzkwMDA5NzQzMDEwQzhGODUwMDIwMzA0MjAwM0UzMDYzRkZGRjAxCis6MTAwM0EwMDAwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDA4RjQyMDEwMDlGCis6MTAwM0IwMDAzQzA2MDgwMDk0QzY0REJFQUNBMjAwMDQ5NzQzMDExNjRCCis6MTAwM0MwMDA5NzQ0MDEwRTNDMDIyMDAwMDAwMzFDMDAzMDg0RkZGRjE0Cis6MTAwM0QwMDAwMDY0MTgyNUFDQTMwMDA4MDBDMjMwMjU5NzQyMDExMDI0Cis6MTAwM0UwMDA5NzQzMDExMjI0MDQwMDAxMDAwMjE0MDAzMDYzRkZGRjUwCis6MTAwM0YwMDAwMDQzMTAyNUFDQTIwMDBDOTc0MjAxMTQzMDQyRkZGRkNECis6MTAwNDAwMDBBQ0EyMDAxMDhGNDIwMTE4QUNBMjAwMTQ5MzQyMDEwQjYxCis6MTAwNDEwMDAzMDQyMDBGRkFDQTIwMDE4MEUwMDA1NTBBQ0E2MDAxQzM0Cis6MTAwNDIwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDEzQzAxMDgwMENDCis6MTAwNDMwMDBBQzIyMDA0MDNDMDMwODAwOEM2MzAwNDQzMjIyMDAwMkRFCis6MTAwNDQwMDAzMjI0MDAwNDI0NjMwMDAxM0MwMTA4MDBBQzIzMDA0NDcyCis6MTAwNDUwMDAxMDgwMDAxODAwMDIyODJCOEY0MjAyQjgwNDQzMDAwOEM1Cis6MTAwNDYwMDA4RTAyMDAyMDNDMDIwODAwOEM0MjAwNjAyNDQyMDAwMTAxCis6MTAwNDcwMDAzQzAxMDgwMEFDMjIwMDYwMEEwMDAwRkIyNDA1MDAwMURBCis6MTAwNDgwMDA5NjAzMDAxNjAwMDAyODIxQUY0MjAyODA4RTAyMDAwNDZECis6MTAwNDkwMDBBNzQzMDI4NEFGNDIwMjg4M0MwMjEwMDBBRjQyMDJCODc4Cis6MTAwNEEwMDAzQzAyMDgwMDhDNDIwMDVDMjQ0MjAwMDEzQzAxMDgwMDMwCis6MTAwNEIwMDBBQzIyMDA1QzhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDA5Cis6MTAwNEMwMDAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEE5Cis6MTAwNEQwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQyNzUwMDEwMDNCCis6MTAwNEUwMDA5MjAzMDAwQjI0MDIwMDAzOTYxMTAwMDgxNDYyMDA2REIxCis6MTAwNEYwMDAwMDAwMjAyMTMyMjIwMDAxMTA0MDAwMDgwMDAwMDAwMDBFCis6MTAwNTAwMDA4RTAyMDAwMDk2MDMwMDE0MDAwMjExQzIwMDAyMTA0MDg3Cis6MTAwNTEwMDAwMDVBMTAyMTBBMDAwMTQyQTQ0MzAwODAzQzAyMDgwMDU2Cis6MTAwNTIwMDA4QzQyMDAyMDEwNDAwMDI1MDAwMDAwMDAwRTAwMDUyQjJBCis6MTAwNTMwMDAwMDAwMDAwMDk3NDIwMTA4OTc0MzAxMEM4Rjg1MDAyMEJFCis6MTAwNTQwMDAzMDQyMDAzRTMwNjNGRkZGMDAwMjE0MDAwMDQzMTAyNURDCis6MTAwNTUwMDBBQ0EyMDAwMDhGNDIwMTAwM0MwNjA4MDA5NEM2NERCRUNDCis6MTAwNTYwMDBBQ0EyMDAwNDk3NDMwMTE2OTc0NDAxMEUzQzAyMjAwMDAwCis6MTAwNTcwMDAwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjVBQ0EzMDAwOEIyCis6MTAwNTgwMDAwMEMyMzAyNTk3NDIwMTEwOTc0MzAxMTIyNDA0MDAwMTU0Cis6MTAwNTkwMDAwMDAyMTQwMDMwNjNGRkZGMDA0MzEwMjVBQ0EyMDAwQ0UyCis6MTAwNUEwMDA5NzQyMDExNDMwNDJGRkZGQUNBMjAwMTBBQ0EwMDAxNDJGCis6MTAwNUIwMDBBQ0EwMDAxODBFMDAwNTUwQUNBNjAwMUMzQzAyMDgwMEMwCis6MTAwNUMwMDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA0MDYzCis6MTAwNUQwMDAzQzAyMDgwMDhDNDIwMDQ0MzIyMzAwMDQyNDQyMDAwMTAzCis6MTAwNUUwMDAzQzAxMDgwMEFDMjIwMDQ0MTA2MDAwMUEzMjIyMDAwMkQ0Cis6MTAwNUYwMDA4RjQyMDJCODA0NDMwMDA4OEUwMjAwMjAzQzAyMDgwMDJCCis6MTAwNjAwMDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA2MEUyCis6MTAwNjEwMDAwQTAwMDE3NzI0MDQwMDAxOTYwMzAwMTYwMDAwMjAyMTNGCis6MTAwNjIwMDBBRjQyMDI4MDhFMDIwMDA0QTc0MzAyODRBRjQyMDI4OEQ4Cis6MTAwNjMwMDAzQzAyMTAwMEFGNDIwMkI4M0MwMjA4MDA4QzQyMDA1QzUxCis6MTAwNjQwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNUMwQTAwMDE3ODUxCis6MTAwNjUwMDA4RkJGMDAxODEwNDAwMDEzMDAwMDIwMjE4RjQzMDEwNEI5Cis6MTAwNjYwMDAzQzAyNjAyMEFDNDMwMDE0OEM0MjAwMDQyNDAzMDFGRUQxCis6MTAwNjcwMDAzMDQyMDNGRjE0NDMwMDBCMDAwMDIwMjE4RjQyMDEwMDkxCis6MTAwNjgwMDAwMDAyMTFDMDI0NDJGRkZDMkM0MjAwMDgxMDQwMDAwMjZFCis6MTAwNjkwMDAyNDAzMDAwMjAwMDMxRjQwM0MwMjYwMDBBQzQzNjkxNEM1Cis6MTAwNkEwMDAwMDAwMjAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwCis6MTAwNkIwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA4RjQzMDEwMEM3Cis6MTAwNkMwMDAyNDAyMDEwMDUwNjIwMDAzMDAwMzExQzIwMDAwMDAwRDZCCis6MTAwNkQwMDAwMDAzMTFDMjAwMDIxMDQwMDA1QTEwMjFBNDQwMDA4MDAzCis6MTAwNkUwMDAwM0UwMDAwODAwMDAxMDIxOTM2MjAwMDAwM0UwMDAwODBFCis6MTAwNkYwMDBBRjgwMDAwMDAzRTAwMDA4MDAwMDEwMjEwM0UwMDAwOEM0Cis6MTAwNzAwMDAwMDAwMTAyMTI0MDIwMTAwMTQ4MjAwMDgwMDAwMDAwMEYzCis6MTAwNzEwMDAzQzAyMDgwMDhDNDIwMEZDMjQ0MjAwMDEzQzAxMDgwMDFECis6MTAwNzIwMDBBQzIyMDBGQzBBMDAwMTlGMzBBMjAwMjAzQzAyMDgwMDFECis6MTAwNzMwMDA4QzQyMDA4NDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA4NDY5Cis6MTAwNzQwMDAzMEEyMDAyMDEwNDAwMDA4MzBBMzAwMTAzQzAyMDgwMDM2Cis6MTAwNzUwMDA4QzQyMDEwODI0NDIwMDAxM0MwMTA4MDBBQzIyMDEwODNGCis6MTAwNzYwMDAwM0UwMDAwODAwMDAwMDAwMTA2MDAwMDgwMDAwMDAwMDI2Cis6MTAwNzcwMDAzQzAyMDgwMDhDNDIwMTA0MjQ0MjAwMDEzQzAxMDgwMEI0Cis6MTAwNzgwMDBBQzIyMDEwNDAzRTAwMDA4MDAwMDAwMDAzQzAyMDgwMDY1Cis6MTAwNzkwMDA4QzQyMDEwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDEwMDBGCis6MTAwN0EwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThBRkJGMDAxMDE1Cis6MTAwN0IwMDAyNzQ0MDEwMDk0ODMwMDA4MzA2MjAwMDQxMDQwMDAxQkFECis6MTAwN0MwMDAzMDY2MDAwMjhGNDIwMkI4MDQ0MTAwMDgyNDA1MDAwMThGCis6MTAwN0QwMDAzQzAyMDgwMDhDNDIwMDYwMjQ0MjAwMDEzQzAxMDgwMEY5Cis6MTAwN0UwMDBBQzIyMDA2MDBBMDAwMUVCOEZCRjAwMTA4QzgyMDAyMDU5Cis6MTAwN0YwMDA5NDgzMDAxNjAwMDAyODIxQUY0MjAyODA4QzgyMDAwNEZFCis6MTAwODAwMDBBNzQzMDI4NEFGNDIwMjg4M0MwMjEwMDBBRjQyMDJCODA0Cis6MTAwODEwMDAzQzAyMDgwMDhDNDIwMDVDMjQ0MjAwMDEzQzAxMDgwMEJDCis6MTAwODIwMDBBQzIyMDA1QzBBMDAwMUVCOEZCRjAwMTAxMEMwMDAwNjc0Cis6MTAwODMwMDAwMDYwMjgyMThGNDQwMTAwMEUwMDAxOEYwMDAwMDAwMDlECis6MTAwODQwMDAwQTAwMDFFQTI0MDUwMDAxOEY4MjAwMDg4RjQzMDEwNDk5Cis6MTAwODUwMDA1MDQzMDAwNzAwMDAyODIxOEY0NDAxMDAwRTAwMDE4RjQzCis6MTAwODYwMDAwMDAwMDAwMDhGNDIwMTA0QUY4MjAwMDgwMDAwMjgyMTMwCis6MTAwODcwMDA4RkJGMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAxODYyCis6MTAwODgwMDAzQzAyMDgwMDhDNDIwMDg4Mjc0MzAxMDA5NDY1MDAwQzVDCis6MTAwODkwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwODg4QzY0MDAxODRFCis6MTAwOEEwMDAwMzQ1MTAyMTkwNDU0MDAwQUY0NDAwMzg4QzYyMDAxQzg1Cis6MTAwOEIwMDAyNDAzRkZGODAwMDUyRTAwMDA0MzEwMjQzNDQyMDAwNEY2Cis6MTAwOEMwMDBBRjQyMDAzQzNDMDIwMDA1QUY0MjAwMzAwMDAwMDAwMDk3Cis6MTAwOEQwMDAwMDAwMDAwMDAwMDAwMDAwQUY0NTA0MDQwMDAwMDAwMDFDCis6MTAwOEUwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwMDYzNDQyMDAwMTRECis6MTAwOEYwMDBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTAwOTAwMDA4RjQyMDAwMDMwNDIwMDEwMTA0MEZGRkQwMDAwMTAyMTE3Cis6MTAwOTEwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRTBBRkIyMDAxOEIwCis6MTAwOTIwMDAzQzAzNjAxMEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMEFCCis6MTAwOTMwMDA4QzY0NTAwMDI0MDJGRjdGM0MxQTgwMDAwMDgyMjAyNDM3Cis6MTAwOTQwMDAzNDg0MzgwQzI0MDIwMDM3QUM2NDUwMDAzQzEyMDgwMDk4Cis6MTAwOTUwMDAyNjUyNEQzOEFGNDIwMDA4MjQwMjBDODBBRjQyMDAyNERBCis6MTAwOTYwMDAzQzFCODAwODNDMDYwODAwMjRDNjA2MkMwMjQwMTAyMUNGCis6MTAwOTcwMDAyNDA0MDAxQzI0ODRGRkZGQUM0NjAwMDAwNDgxRkZGRDFBCis6MTAwOTgwMDAyNDQyMDAwNDNDMDIwODAwMjQ0MjAxNkMzQzAxMDgwMDlGCis6MTAwOTkwMDBBQzIyNEQ0MDNDMDIwODAwMjQ0MjA0MDQzQzAxMDgwMDAzCis6MTAwOUEwMDBBQzIyNEQ0NDNDMDIwODAwMjQ0MjA3QjgzQzAxMDgwMDM4Cis6MTAwOUIwMDBBQzIyNEQ4ODNDMDIwODAwMjQ0MjAyNUMzQzAzMDgwMDQzCis6MTAwOUMwMDAyNDYzMDYzNDNDMDQwODAwMjQ4NDA2RTAzQzA1MDgwMDQ3Cis6MTAwOUQwMDAyNEE1M0I1MDNDMDEwODAwQUMyMjREQTAzQzAyMDgwMDdECis6MTAwOUUwMDAyNDQyMDVGNDNDMDEwODAwQUMyNjREODQzQzAxMDgwMDdCCis6MTAwOUYwMDBBQzI1NEQ5NDNDMDEwODAwQUMyMzREOUMzQzAxMDgwMDAzCis6MTAwQTAwMDBBQzI0NERBNDNDMDEwODAwQUMyMjREQTgzQzAxMDgwMEQ4Cis6MTAwQTEwMDBBQzIzNEQzQzNDMDEwODAwQUMyMDRENDgzQzAxMDgwMDkzCis6MTAwQTIwMDBBQzIwNEQ0QzNDMDEwODAwQUMyMDRENTAzQzAxMDgwMDZFCis6MTAwQTMwMDBBQzIwNEQ1NDNDMDEwODAwQUMyMDRENTgzQzAxMDgwMDRFCis6MTAwQTQwMDBBQzIwNEQ1QzNDMDEwODAwQUMyMDRENjAzQzAxMDgwMDJFCis6MTAwQTUwMDBBQzI0NEQ2NDNDMDEwODAwQUMyMDRENjgzQzAxMDgwMDBBCis6MTAwQTYwMDBBQzIwNEQ2QzNDMDEwODAwQUMyMDRENzAzQzAxMDgwMEVFCis6MTAwQTcwMDBBQzIwNEQ3NDNDMDEwODAwQUMyMDRENzgzQzAxMDgwMENFCis6MTAwQTgwMDBBQzI2NEQ3QzNDMDEwODAwQUMyNjREODAzQzAxMDgwMEEyCis6MTAwQTkwMDBBQzIwNEQ4QzNDMDEwODAwQUMyNTREOTAzQzAxMDgwMDc5Cis6MTAwQUEwMDBBQzIzNEQ5ODBFMDAwNkJCMDAwMDAwMDAzQzAyODAwMDA1Cis6MTAwQUIwMDAzNDQyMDA3MDhDNDIwMDAwQUY4MjAwMTQzQzAzMDgwMEY2Cis6MTAwQUMwMDA4QzYzMDAyMDhGODIwMDA0MTA0MzAwMDQzQzAyODAwMEVECis6MTAwQUQwMDAwRTAwMDRGM0FGODMwMDA0M0MwMjgwMDAzNDQ2MDA3MDMzCis6MTAwQUUwMDAzQzAzMDgwMDhDNjMwMEEwM0MwMjA4MDA4QzQyMDBBNDc4Cis6MTAwQUYwMDAxMDQzMDAwNDhGODQwMDE0M0MwMTA4MDBBQzIzMDBBNEMwCis6MTAwQjAwMDBBNzQzMDA5RThDQ0EwMDAwM0MwMzA4MDA4QzYzMDBCQzE1Cis6MTAwQjEwMDAzQzAyMDgwMDhDNDIwMEI4MDE0NDIwMjMwMDY0MTgyMUU0Cis6MTAwQjIwMDAwMDAwNDAyMTAwNjQyMDJCMDA0ODEwMjEwMDQ0MTAyMUM3Cis6MTAwQjMwMDAzQzAxMDgwMEFDMjMwMEJDM0MwMTA4MDBBQzIyMDBCODFBCis6MTAwQjQwMDA4RjUxMDAwMDMyMjIwMDA3MTA0MEZGRENBRjhBMDAxNEYyCis6MTAwQjUwMDA4Q0M2MDAwMDNDMDUwODAwOENBNTAwQkMzQzA0MDgwMEM1Cis6MTAwQjYwMDA4Qzg0MDBCODAwQ0EzMDIzMDBBNjI4MjEwMDAwMTAyMTgwCis6MTAwQjcwMDAwMEE2MzAyQjAwODIyMDIxMDA4NjIwMjEzMjI3MDAwMTkwCis6MTAwQjgwMDAzQzAxMDgwMEFDMjUwMEJDM0MwMTA4MDBBQzI0MDBCOEM2Cis6MTAwQjkwMDAxMEUwMDAxRjMyMjIwMDAyOEY0MjAxMDBBRjQyMDAyMDBECis6MTAwQkEwMDA4RjQyMDEwNEFGNDIwMEE4OTM0MjAxMEIwRTAwMDE4ODVFCis6MTAwQkIwMDAzMDUwMDBGRjJFMDIwMDFENTQ0MDAwMDQwMDEwMTA4MDMxCis6MTAwQkMwMDAwRTAwMDE4QjBBMDAwMkM1MDAwMDAwMDAwMDUyMTAyMTM3Cis6MTAwQkQwMDA4QzQyMDAwMDAwNDBGODA5MDAwMDAwMDAxMDQwMDAwNUIxCis6MTAwQkUwMDAzQzAyNDAwMDhGNDMwMTA0M0MwMjYwMjBBQzQzMDAxNEVGCis6MTAwQkYwMDAzQzAyNDAwMEFGNDIwMTM4M0MwMjA4MDA4QzQyMDAzNDA1Cis6MTAwQzAwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwMzQzMjIyMDAwMkUwCis6MTAwQzEwMDAxMDQwMDAwRTMyMjIwMDA0OEY0MjAxNDAwRTAwMDE4ODc1Cis6MTAwQzIwMDBBRjQyMDAyMDBFMDAwMzRCMDAwMDAwMDAzQzAyNDAwMEQ5Cis6MTAwQzMwMDBBRjQyMDE3ODNDMDIwODAwOEM0MjAwMzgyNDQyMDAwMTk3Cis6MTAwQzQwMDAzQzAxMDgwMEFDMjIwMDM4MzIyMjAwMDQxMDQwRkY5ODFBCis6MTAwQzUwMDAzQzAyODAwMDhGNDIwMTgwMEUwMDAxODhBRjQyMDAyMERDCis6MTAwQzYwMDA4RjQzMDE4MDI0MDIwRjAwMTQ2MjAwMDUwMDAwMDAwMDgxCis6MTAwQzcwMDA4RjQyMDE4OEE3NDIwMDlDMEEwMDAyRkEzQzAyNDAwMDExCis6MTAwQzgwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwODI4Cis6MTAwQzkwMDAzQzAyNDAwMDBFMDAwMzJEMDAwMDAwMDA1NDQwMDAwNDAwCis6MTAwQ0EwMDAzQzAyNDAwMDBFMDAwRTBEMDAwMDAwMDAzQzAyNDAwMDFGCis6MTAwQ0IwMDBBRjQyMDFCODNDMDIwODAwOEM0MjAwM0MyNDQyMDAwMUQzCis6MTAwQ0MwMDAzQzAxMDgwMEFDMjIwMDNDMEEwMDAyN0EzQzAyODAwMDkxCis6MTAwQ0QwMDAzQzAyOTAwMDM0NDIwMDAxMDA4MjIwMjVBRjQ0MDAyMEY1Cis6MTAwQ0UwMDA4RjQyMDAyMDA0NDBGRkZFMDAwMDAwMDAwM0UwMDAwOEU3Cis6MTAwQ0YwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MjAwMDEwMDgyMjAyNUY4Cis6MTAwRDAwMDAwM0UwMDAwOEFGNDQwMDIwMjdCREZGRTBBRkIxMDAxNEFFCis6MTAwRDEwMDBBRkIwMDAxMDAwODA4ODIxQUZCRjAwMTgwRTAwMDMwMkEyCis6MTAwRDIwMDAzMEIwMDBGRjkzNjIwMDdEMDIyMDIwMjEwMjAyODAyNTY2Cis6MTAwRDMwMDBBMzcwMDA3RDhGNzAwMDc0M0MwMjgwMDAwRTAwMDMwQkQ2Cis6MTAwRDQwMDAwMjAyODAyNDE2MDAwMDA5OEZCRjAwMTg4RjQyMDFGOEFDCis6MTAwRDUwMDAwNDQwRkZGRTI0MDIwMDAyQUY1MTAxQzBBMzQyMDFDNEJGCis6MTAwRDYwMDAzQzAyMTAwMEFGNDIwMUY4OEZCRjAwMTg4RkIxMDAxNDkxCis6MTAwRDcwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFODZBCis6MTAwRDgwMDBBRkJGMDAxMDk3NDIwMTg0MzA0MjAyMDAxMDQwMDAwNUJFCis6MTAwRDkwMDAwMDAwMjAyMTBFMDAxMDQyMDAwMDAwMDAwQTAwMDM0MTY0Cis6MTAwREEwMDAyNDA0MDAwMThGNDIwMTg4MDQ0MDAwMDk4RkJGMDAxMDE1Cis6MTAwREIwMDA4RjQyMDE4ODNDMDNGRjAwMDA0MzEwMjQzQzAzMDQwMEUxCis6MTAwREMwMDAxNDQzMDAwMzI0MDQwMDAxOTM2MjAwM0U4RkJGMDAxMDBGCis6MTAwREQwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMTgyNDAyMDAwMTU0Cis6MTAwREUwMDBBMzYwMDAyMkE3NjIwMDE2OEY0NDAxNDAwQTAwMDMxMDhFCis6MTAwREYwMDAyNDA1MDAwMTI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDBECis6MTAwRTAwMDA5MzYyMDAwMDMwNDQwMEZGMzg4MzAwMjAzODgyMDAzMEI1Cis6MTAwRTEwMDAwMDAzMTgyQjAwMDIxMDJCMDA2MjE4MjQxMDYwMDAwMzNFCis6MTAwRTIwMDAyNDAyMDA1MDE0ODIwMDYyOEZCRjAwMTQ5MzQyMDE0OEQ0Cis6MTAwRTMwMDAzMDQyMDBGRjI0NDNGRkZGMkM2MjAwMDUxMDQwMDA1QzlECis6MTAwRTQwMDA4RkJGMDAxNDAwMDMxMDgwM0MwMzA4MDAyNDYzNENDOENCCis6MTAwRTUwMDAwMDQzMTAyMThDNDIwMDAwMDA0MDAwMDgwMDAwMDAwMDA4Cis6MTAwRTYwMDAwRTAwMDMwMjhGNDQwMTQwOEY3MDAwMEM4RjQyMDE0NDNBCis6MTAwRTcwMDAxNjAyMDAwMjI0MDIwMDAxQUY2MjAwMEMwRTAwMDMwQkY4Cis6MTAwRTgwMDA4RjQ0MDE0MDhGNDIwMTQ0MTQ1MDAwMDQ4RkJGMDAxNDZFCis6MTAwRTkwMDA4RkIwMDAxMDBBMDAwRkI4MjdCRDAwMTg4RjYyMDAwQzM5Cis6MTAwRUEwMDAwQTAwMDNCMzAwMDAwMDAwOTc2MjAwMTA4RjQzMDE0NDYyCis6MTAwRUIwMDAzMDQyRkZGRjE0NjIwMDA5MDAwMDAwMDAyNDAyMDAwMTFDCis6MTAwRUMwMDBBNzYyMDAxMDhGNDIwMTQwQUY0MjAyMDAzQzAyMTAwMEI2Cis6MTAwRUQwMDBBRjQyMDIzODBBMDAwM0JBOEZCRjAwMTQ5NzYyMDAxMEI1Cis6MTAwRUUwMDAwQTAwMDNCMzAwMDAwMDAwMEUwMDAzMDI4RjQ0MDE0MDFCCis6MTAwRUYwMDA5NzYyMDAxMjhGNDMwMTQ0MzA1MEZGRkYxNjAzMDAwMjM3Cis6MTAwRjAwMDAyNDAyMDAwMUE3NjIwMDEyMEUwMDAzMEI4RjQ0MDE0MDZGCis6MTAwRjEwMDA4RjQyMDE0NDE2MDIwMDA0OEZCRjAwMTQ4RkIwMDAxMEVFCis6MTAwRjIwMDAwQTAwMDM0NTI3QkQwMDE4OTc2MjAwMTIwQTAwMDNCM0E4Cis6MTAwRjMwMDAwMDAwMDAwMDk3NjIwMDE0OEY0MzAxNDQzMDQyRkZGRjFECis6MTAwRjQwMDAxNDYyMDAwNjhGQkYwMDE0MjQwMjAwMDE4RkIwMDAxMDRECis6MTAwRjUwMDBBNzYyMDAxNDBBMDAxMkUyMjdCRDAwMTg5NzYyMDAxNDZECis6MTAwRjYwMDAwQTAwMDNCMzAwMDAwMDAwOTc2MjAwMTY4RjQzMDE0NDlCCis6MTAwRjcwMDAzMDQyRkZGRjE0NjIwMDA2MjQwMjAwMDE4RkJGMDAxNEZDCis6MTAwRjgwMDA4RkIwMDAxMEE3NjIwMDE2MEEwMDBCQUEyN0JEMDAxODM4Cis6MTAwRjkwMDA5NzYyMDAxNjE0NDAwMDA2OEZCRjAwMTQzQzAyMDgwMDQwCis6MTAwRkEwMDA4QzQyMDA3MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA3MDE5Cis6MTAwRkIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFODMwCis6MTAwRkMwMDBBRkJGMDAxNEFGQjAwMDEwOEY1MDAxMDA5MzYyMDAwMDVCCis6MTAwRkQwMDA5MzQzMDEwOTMwNDQwMEZGMjQwMjAwMUYxMDYyMDBBNTYyCis6MTAwRkUwMDAyODYyMDAyMDEwNDAwMDE4MjQwMjAwMzgyODYyMDAwQUZECis6MTAwRkYwMDAxMDQwMDAwQzI0MDIwMDBCMjg2MjAwMDgxMDQwMDAyQzU2Cis6MTAxMDAwMDAwMDAwMDAwMDA0NjAwMEU1Mjg2MjAwMDIxNDQwMDAyODhGCis6MTAxMDEwMDAyNDAyMDAwNjEwNjIwMDI2OEZCRjAwMTQwQTAwMDRCN0U1Cis6MTAxMDIwMDA4RkIwMDAxMDEwNjIwMDVFMjg2MjAwMEIxNDQwMDBEQ0RDCis6MTAxMDMwMDA4RkJGMDAxNDI0MDIwMDBFMTA2MjAwNzM4RkIwMDAxMEU2Cis6MTAxMDQwMDAwQTAwMDRCNzAwMDAwMDAwMTA2MjAwQzAyODYyMDAzOUU2Cis6MTAxMDUwMDAxMDQwMDAwQTI0MDIwMDgwMjQwMjAwMzYxMDYyMDBDQUY4Cis6MTAxMDYwMDAyODYyMDAzNzEwNDAwMEI0MjQwMjAwMzUxMDYyMDBDMTJECis6MTAxMDcwMDA4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTAxMDYyMDAyQjVECis6MTAxMDgwMDAyODYyMDA4MTEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOUIyCis6MTAxMDkwMDAxMDYyMDBCNDhGQkYwMDE0MEEwMDA0Qjc4RkIwMDAxMEI0Cis6MTAxMEEwMDAxMDYyMDA5OThGQkYwMDE0MEEwMDA0Qjc4RkIwMDAxMEJGCis6MTAxMEIwMDAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwQjk4RkJGMDAxNDkxCis6MTAxMEMwMDAwRTAwMDUyQjAwMDAwMDAwOEY0MjAxMDA4RjgzMDAyMERFCis6MTAxMEQwMDA5NzQ1MDEwQzk3NDYwMTA4QUM2MjAwMDA4RjQyMDEwNDVECis6MTAxMEUwMDAzQzA0MDgwMDk0ODQ0REJFMDAwNTJDMDBBQzYyMDAwNDUyCis6MTAxMEYwMDA4RjQyMDExODAwMDYzNDAwMDBDNDMwMjVBQzYyMDAwODlECis6MTAxMTAwMDA4RjQyMDExQzI0MDQwMDAxQUM2MjAwMEM5MzQyMDEwQUNFCis6MTAxMTEwMDAwMEEyMjgyNUFDNjUwMDEwQUM2MDAwMTRBQzYwMDAxODdCCis6MTAxMTIwMDBBQzY2MDAxQzBBMDAwNDhEOEZCRjAwMTQzQzAyMDgwMDRFCis6MTAxMTMwMDA4QzQyMDAyMDEwNDAwMDlBOEZCRjAwMTQwRTAwMDUyQjM3Cis6MTAxMTQwMDAwMDAwMDAwMDk3NDQwMTA4M0MwMzA4MDA5NDYzNERCRTcyCis6MTAxMTUwMDA5NzQ1MDEwQzAwMDQyMjAyOTc0NjAxMEU4RjgyMDAyMDYxCis6MTAxMTYwMDAwMDA0MjYwMDAwODMyMDI1MDAwNTJDMDAzQzAzMDA4MDlECis6MTAxMTcwMDAwMEE2MjgyNTAwODMyMDI1QUM0MDAwMDBBQzQwMDAwNEQ4Cis6MTAxMTgwMDBBQzQwMDAwOEFDNDAwMDBDQUM0NTAwMTBBQzQwMDAxNDcyCis6MTAxMTkwMDBBQzQwMDAxOEFDNDQwMDFDMEEwMDA0OEMyNDA0MDAwMTdDCis6MTAxMUEwMDA5NzQyMDEwQzE0NDAwMDE1MDAwMDAwMDA5MzYyMDAwNUY2Cis6MTAxMUIwMDAzMDQyMDAxMDE0NDAwMDExMDAwMDAwMDAwRTAwMDMwMjM1Cis6MTAxMUMwMDAwMjAwMjAyMTkzNjIwMDA1MDIwMDIwMjEzNDQyMDAxMDE5Cis6MTAxMUQwMDAwRTAwMDMwQkEzNjIwMDA1OTM2MjAwMDAyNDAzMDAyMEFECis6MTAxMUUwMDAzMDQyMDBGRjEwNDMwMDZEMDIwMDIwMjE4RkJGMDAxNDI5Cis6MTAxMUYwMDA4RkIwMDAxMDBBMDAxMDU4MjdCRDAwMTgwMDAwMDAwRDI1Cis6MTAxMjAwMDAwQTAwMDRCNjhGQkYwMDE0M0MwMjA4MDA4QzQyMDAyMDg0Cis6MTAxMjEwMDAxMDQwMDA2MzhGQkYwMDE0MEUwMDA1MkIwMDAwMDAwMDdCCis6MTAxMjIwMDA4RjQyMDEwNDhGODMwMDIwOTc0NDAxMEMzQzA1MDgwMDg1Cis6MTAxMjMwMDA5NEE1NERCRUFDNjIwMDAwOTc2MjAwMkMwMDA0MjQwMDBGCis6MTAxMjQwMDAzMDQyRkZGRjAwODIyMDI1M0MwMjQwMEUwMEEyMjgyNUVDCis6MTAxMjUwMDBBQzY0MDAwNEFDNjAwMDA4QUM2MDAwMENBQzYwMDAxMDMyCis6MTAxMjYwMDBBQzYwMDAxNEFDNjAwMDE4QUM2NTAwMUMwQTAwMDQ4QzczCis6MTAxMjcwMDAyNDA0MDAwMTBFMDAwMzAyMDIwMDIwMjFBNzYwMDAwOEUwCis6MTAxMjgwMDAwRTAwMDMwQjAyMDAyMDIxMDIwMDIwMjEwRTAwMDMxMDlCCis6MTAxMjkwMDAyNDA1MDAwMTNDMDIwODAwOEM0MjAwMjAxMDQwMDA0MDYwCis6MTAxMkEwMDA4RkJGMDAxNDBFMDAwNTJCMDAwMDAwMDA5NzQyMDEwQ0I4Cis6MTAxMkIwMDA4RjgzMDAyMDNDMDUwODAwOTRBNTREQkUwMDAyMTQwMDU5Cis6MTAxMkMwMDBBQzcwMDAwMEFDNjIwMDA0QUM2MDAwMDg4RjY0MDA0QzlECis6MTAxMkQwMDAzQzAyNDAxRjAwQTIyODI1QUM2NDAwMEM4RjYyMDA1MDI1Cis6MTAxMkUwMDAyNDA0MDAwMUFDNjIwMDEwOEY2MjAwNTRBQzYyMDAxNDUwCis6MTAxMkYwMDBBQzYwMDAxOEFDNjUwMDFDOEZCRjAwMTQ4RkIwMDAxMEVDCis6MTAxMzAwMDAwQTAwMDU1MDI3QkQwMDE4MjQwMjAwMjA1MDgyMDAyNTQ1Cis6MTAxMzEwMDA4RkIwMDAxMDBFMDAwRkEyMDIwMDIwMjExMDQwMDAyMDBDCis6MTAxMzIwMDA4RkJGMDAxNDAyMDAyMDIxOEZCMDAwMTAwMDAwMjgyMTgwCis6MTAxMzMwMDAwQTAwMDMxMDI3QkQwMDE4MDIwMDIwMjE4RkJGMDAxNEVGCis6MTAxMzQwMDA4RkIwMDAxMDBBMDAwNjE4MjdCRDAwMTg5NzQ1MDEwQzQxCis6MTAxMzUwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMDYzODUxCis6MTAxMzYwMDAyN0JEMDAxODAyMDAyMDIxOEZCMDAwMTAwQTAwMDY1RDgyCis6MTAxMzcwMDAyN0JEMDAxODkzNDUwMTBEMDIwMDIwMjE4RkIwMDAxMEY5Cis6MTAxMzgwMDAwQTAwMDZBNzI3QkQwMDE4MDIwMDIwMjE4RkJGMDAxNDA1Cis6MTAxMzkwMDA4RkIwMDAxMDBBMDAwNjgzMjdCRDAwMTg4RkJGMDAxNDBECis6MTAxM0EwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4RjQyMDI3OEJDCis6MTAxM0IwMDAwNDQwRkZGRTI0MDIwMDAyMzQ4NDAwODBBRjQ0MDI0MDU3Cis6MTAxM0MwMDBBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDhBRjQyMDI3ODRFCis6MTAxM0QwMDAzQzA0MDgwMDk0ODQ0RENBM0MwMjA4MDA4QzQyNERENDYxCis6MTAxM0UwMDAzMDgzRkZGRjAwMDMxOEMwMDA0MzEwMjFBRjQyMDAzQ0QwCis6MTAxM0YwMDAzQzAyMDgwMDhDNDI0REQwQUY0MjAwMzgzQzAyMDA1MDA1Cis6MTAxNDAwMDAzNDQyMDAwOEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAxNDEwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMjAxMDQwRkZGRDFECis6MTAxNDIwMDAwMDAwMDAwMDhGNDIwNDAwM0MwMTA4MDBBQzIyNERDMEM3Cis6MTAxNDMwMDA4RjQyMDQwNDNDMDEwODAwQUMyMjREQzQzQzAyMDAyMDUxCis6MTAxNDQwMDBBRjQyMDAzMDAwMDAwMDAwM0MwMjA4MDA5NDQyNERDODRBCis6MTAxNDUwMDAzQzAzMDgwMDk0NjM0RENDM0MwNTA4MDA5NEE1NERDRTk4Cis6MTAxNDYwMDAyNDg0MDAwMTAwNDMxMDIxMzA4M0ZGRkYzQzAxMDgwMDY5Cis6MTAxNDcwMDBBNDIyNERDODNDMDEwODAwQTQyNDREQ0ExNDY1MDAwM0YxCis6MTAxNDgwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDREQ0EwM0UwMDAwODUxCis6MTAxNDkwMDAwMDAwMDAwMDNDMDUwMDBBMjdCREZGRTgwMzQ1MjgyMUE1Cis6MTAxNEEwMDAzQzA0MDgwMDI0ODQ0REIwQUZCRjAwMTAwRTAwMDVCNTA5Cis6MTAxNEIwMDAyNDA2MDAwQTNDMDIwODAwOTQ0MjREQjIzQzAzMDgwMDk2Cis6MTAxNEMwMDA5NDYzNERDRTMwNDIwMDBGMjQ0MjAwMDMwMDQzMTgwNEMxCis6MTAxNEQwMDAyNDAyN0ZGRjAwNDMxMDJCMTA0MDAwMDJBRjgzMDAxQzRBCis6MTAxNEUwMDAwMDAwMDAwRDBFMDAwNEMyMDAwMDAwMDAzQzAyMDgwMEQ1Cis6MTAxNEYwMDA5NDQyNERCQThGQkYwMDEwMjdCRDAwMTgwM0UwMDAwOENBCis6MTAxNTAwMDBBNzQyMDBBMjNDMDIwMDBBMDM0MjEwMjE5NDQzMDAwNkI1Cis6MTAxNTEwMDAzQzAyMDgwMDk0NDI0REJBM0MwMTA4MDBBNDIzNERCNjk5Cis6MTAxNTIwMDAwMDQzMTAyMzhGODMwMDFDMDAwMjE0MDAwMDAyMTQwM0U4Cis6MTAxNTMwMDAwMDQzMTAyQjAzRTAwMDA4Mzg0MjAwMDEyN0JERkZFOEZDCis6MTAxNTQwMDBBRkJGMDAxMDNDMDIwMDBBMDM0MjEwMjE5NDQyMDAwNjgzCis6MTAxNTUwMDAzQzAxMDgwMEE0MjI0REI2MEUwMDA1MEYwMDAwMDAwMDVCCis6MTAxNTYwMDA1NDQwRkZGOTNDMDIwMDBBOEZCRjAwMTAwM0UwMDAwODVFCis6MTAxNTcwMDAyN0JEMDAxODI3QkRGRkU4QUZCRjAwMTAwRTAwMDUwRjA0Cis6MTAxNTgwMDAwMDAwMDAwMDEwNDAwMDAzMDAwMDAwMDAwRTAwMDUxREQ4Cis6MTAxNTkwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjREQzA4RkJGMDAxMENDCis6MTAxNUEwMDAyNzQzMDQwMEFGNDIwMDM4M0MwMjA4MDA4QzQyNERDNDdGCis6MTAxNUIwMDAyN0JEMDAxOEFGODMwMDIwQUY0MjAwM0MzQzAyMDAwNTZECis6MTAxNUMwMDBBRjQyMDAzMDAzRTAwMDA4QUY4MDAwMTg4RjgyMDAxODlGCis6MTAxNUQwMDAzQzAzMDAwNjAwMDIxMTQwMDA0MzEwMjVBRjQyMDAzMERBCis6MTAxNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMDJBCis6MTAxNUYwMDAzMDQyMDAxMDEwNDBGRkZEMjc0MjA0MDBBRjgyMDAyMDVGCis6MTAxNjAwMDAwM0UwMDAwOEFGODAwMDE4M0MwNjA4MDA4Q0M2NERDNEZCCis6MTAxNjEwMDA4Rjg1MDAxODhGODMwMDIwM0MwMjA4MDA5NDQyNERCQTQ5Cis6MTAxNjIwMDAyN0JERkZFMDI0QTUwMDAxMjQ2MzAwMjAyNDQyMDAwMTFGCis6MTAxNjMwMDAyNEM3MDAyMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxODM2Cis6MTAxNjQwMDBBRjg1MDAxOEFGODMwMDIwM0MwMTA4MDBBNDIyNERCQUVBCis6MTAxNjUwMDAzMDkwMDBGRjNDMDEwODAwQUMyNzREQzQwNEMxMDAwOEQ1Cis6MTAxNjYwMDAwMDAwODgyMTA0RTAwMDA2MDAwMDAwMDAzQzAyMDgwMEExCis6MTAxNjcwMDA4QzQyNERDMDI0NDIwMDAxM0MwMTA4MDBBQzIyNERDMDA4Cis6MTAxNjgwMDAzQzAyMDgwMDk0NDI0REJBM0MwMzA4MDA5NDYzNERDOEU0Cis6MTAxNjkwMDAwMDEwMjAyQjAwNDMxMDI2MkM0MjAwMDEwMDQ0MTAyNThFCis6MTAxNkEwMDAxNDQwMDAwNDhGODMwMDE4MjQwMjAwMTAxNDYyMDAwRkZECis6MTAxNkIwMDAwMDAwMDAwMDBFMDAwNTQxMjQxMTAwMDEzQzAzMDgwMDU5Cis6MTAxNkMwMDA5NDYzNERCQTNDMDIwODAwOTQ0MjREQzgxNDYyMDAwMzcyCis6MTAxNkQwMDAwMDAwMDAwMDBFMDAwNEMyMDAwMDAwMDAxNjAwMDAwMzFECis6MTAxNkUwMDAwMDAwMDAwMDBFMDAwNTJCMDAwMDAwMDAzQzAzMDgwMDc1Cis6MTAxNkYwMDA5NDYzNERCRTNDMDIwODAwOTQ0MjREQkMyNDYzMDAwMTNCCis6MTAxNzAwMDAzMDY0RkZGRjNDMDEwODAwQTQyMzREQkUxNDgyMDAwMzk3Cis6MTAxNzEwMDAwMDAwMDAwMDNDMDEwODAwQTQyMDREQkUxMjAwMDAwNjlECis6MTAxNzIwMDAwMDAwMDAwMDNDMDIwODAwOTQ0MjREQkFBNzQyMDBBMjBCCis6MTAxNzMwMDAwQTAwMDVBMzAyMjAxMDIxMEUwMDA1MEYwMDAwMDAwMDgyCis6MTAxNzQwMDAxMDQwMDAwNDAyMjAxMDIxMEUwMDA1MUQwMDAwMDAwMEMyCis6MTAxNzUwMDAwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDJECis6MTAxNzYwMDAwM0UwMDAwODI3QkQwMDIwMzA4NEZGRkYzMEE1RkZGRjA1Cis6MTAxNzcwMDAwMDAwMTgyMTEwODAwMDA3MDAwMDAwMDAzMDgyMDAwMUU2Cis6MTAxNzgwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjEwQTAwMDVBQjQ5Cis6MTAxNzkwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNjhBCis6MTAxN0EwMDAyNEM2RkZGRjhDQTIwMDAwMjRBNTAwMDRBQzgyMDAwMDI4Cis6MTAxN0IwMDAwQTAwMDVCNTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMENFCis6MTAxN0MwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMDZBCis6MTAxN0QwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQUYxCis6MTAxN0UwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAyNDAyMDAwMTNCCis6MTAxN0YwMDBBRjYyMDAwQ0E3NjIwMDEwQTc2MjAwMTJBNzYyMDAxNDdCCis6MTAxODAwMDAwM0UwMDAwOEE3NjIwMDE2MzA4MjAwN0YwMzQyMTAyMTI3Cis6MTAxODEwMDAzQzA4MDAwRTAwNDgxODIxM0MwMjA4MDA4QzQyMDAyMEMxCis6MTAxODIwMDAyN0JERkZEODI0MDdGRjgwQUZCMzAwMUNBRkIyMDAxODVDCis6MTAxODMwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjAwMDgwODAyMTE2Cis6MTAxODQwMDAzMEIxMDBGRjAwODcyMDI0MzBEMjAwRkYxMDQwMDAyRjZECis6MTAxODUwMDAwMDAwOTgyMUFGNDQwMDJDOTA2MjAwMDAyNDAzMDA1MDQ3Cis6MTAxODYwMDAzMDQyMDBGRjE0NDMwMDBFMDAwMDAwMDAzQzAyMDgwMDVDCis6MTAxODcwMDA4QzQyMDBFMDAyMDIxMDIxMDA0NzEwMjRBRjQyMDAyQ0VECis6MTAxODgwMDAzQzAyMDgwMDhDNDIwMEUwMDIwMjEwMjEzMDQyMDA3RjNFCis6MTAxODkwMDAwMzQyMTAyMTAwNDgxMDIxOTQ0MjAwRDQzMDUzRkZGRjJFCis6MTAxOEEwMDAwRTAwMDUyQjAwMDAwMDAwM0MwMjA4MDA5NDQyNERCRUQzCis6MTAxOEIwMDA4RjgzMDAyMDAwMTEzNDAwMDBDMjMwMjUwMDEyMkMwMDVDCis6MTAxOEMwMDAzQzAyNDAwMDAwQzIzMDI1MzRBNTAwMDFBQzcwMDAwMDhECis6MTAxOEQwMDA4RkJGMDAyMEFDNjAwMDA0OEZCMjAwMThBQzczMDAwODBBCis6MTAxOEUwMDA4RkIxMDAxNEFDNjAwMDBDOEZCMzAwMUNBQzY1MDAxMDBECis6MTAxOEYwMDA4RkIwMDAxMEFDNjAwMDE0MjQwNDAwMDFBQzYwMDAxODJDCis6MTAxOTAwMDAyN0JEMDAyODBBMDAwNTUwQUM2NjAwMUM4RkJGMDAyMEQwCis6MTAxOTEwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDZECis6MTAxOTIwMDAwM0UwMDAwODI3QkQwMDI4OTM0MzAxMEYyNDAyMDAxMEE0Cis6MTAxOTMwMDAxMDYyMDAwRTI4NjUwMDExMTBBMDAwMDcyNDAyMDAxMjlBCis6MTAxOTQwMDAyNDAyMDAwODI0MDUwMDNBMTA2MjAwMDYwMDAwMzAyMTNECis6MTAxOTUwMDAwM0UwMDAwODAwMDAwMDAwMjQwNTAwMzUxNDYyRkZGQ0NECis6MTAxOTYwMDAwMDAwMzAyMTBBMDAwNUQwMDAwMDAwMDA4RjQyMDA3NDAyCis6MTAxOTcwMDAyNDQyMEZBMDAzRTAwMDA4QUY2MjAwMEMyN0JERkZFODdGCis6MTAxOTgwMDBBRkJGMDAxMDBFMDAwMzEwMjQwNTAwMDE4RkJGMDAxMDMwCis6MTAxOTkwMDAyNDAyMDAwMUE3NjIwMDEyMjdCRDAwMTgyNDAyMDAwMUUyCis6MTAxOUEwMDAwM0UwMDAwOEEzNjAwMDIyMjdCREZGRTBBRkIxMDAxNEYwCis6MTAxOUIwMDBBRkIwMDAxMEFGQkYwMDE4MzBCMUZGRkYwRTAwMDMwMjQwCis6MTAxOUMwMDAwMDgwODAyMTkzNjIwMDNGMjQwMzAwMDQzMDQyMDBGRjI2Cis6MTAxOUQwMDAxNDQzMDAwQzAyMDAyMDIxMTIyMDAwMDgyNDAyMDAwQUY3Cis6MTAxOUUwMDAwRTAwMDVDOTAwMDAwMDAwOTM2MjAwMDUyNDAzRkZGRUZECis6MTAxOUYwMDAwMDQzMTAyNEEzNjIwMDA1MjQwMjAwMTJBMzYyMDAzRkVBCis6MTAxQTAwMDAwMjAwMjAyMTBFMDAwMzBCQTM2MDAwODExNjIwMDAwM0JBCis6MTAxQTEwMDAwMjAwMjAyMTBFMDAwNjJEMDAwMDAwMDAwMjAwMjAyMUZGCis6MTAxQTIwMDAzMjI2MDBGRjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDU2Cis6MTAxQTMwMDAyNDA1MDAzODBBMDAwNUQwMjdCRDAwMjAyN0JERkZFMDlGCis6MTAxQTQwMDBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEIwCis6MTAxQTUwMDAwRTAwMDMwMjAwODA4MDIxMEUwMDA1QzkwMDAwMDAwMDc2Cis6MTAxQTYwMDA5MzYyMDAzRjI0MTIwMDE4MzA1MTAwRkYxMjMyMDAwMzJECis6MTAxQTcwMDAwMjAwMjAyMTI0MDIwMDEyQTM2MjAwM0Y5MzYyMDAwNUFECis6MTAxQTgwMDAyNDAzRkZGRTAwNDMxMDI0MEUwMDAzMEJBMzYyMDAwNTk1Cis6MTAxQTkwMDAwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDcwMDAwMzAyMTFBCis6MTAxQUEwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEQwCis6MTAxQUIwMDAwQTAwMDMxMDI3QkQwMDIwOEZCRjAwMUM4RkIyMDAxODQyCis6MTAxQUMwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzkwQTAwMDVEMDMyCis6MTAxQUQwMDAyN0JEMDAyMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDQ2Cis6MTAxQUUwMDA5NzQyMDEwQzI0MDUwMDM2MDA4MDgwMjExNDQwMDAxMDJDCis6MTAxQUYwMDAzMDQ2MDBGRjBFMDAwMzAyMDAwMDAwMDAyNDAyMDAxMjI2Cis6MTAxQjAwMDBBMzYyMDAzRjkzNjIwMDA1MzQ0MjAwMTAwRTAwMDVDOTM1Cis6MTAxQjEwMDBBMzYyMDAwNTBFMDAwMzBCMDIwMDIwMjEwMjAwMjAyMTE5Cis6MTAxQjIwMDAwRTAwMDMxMDI0MDUwMDIwMEEwMDA2OUMwMDAwMDAwMDlGCis6MTAxQjMwMDAwRTAwMDVEMDAwMDAwMDAwMEUwMDAzMDIwMjAwMjAyMTZDCis6MTAxQjQwMDA5MzYyMDAyMzI0MDNGRjlGMDIwMDIwMjEwMDQzMTAyNEZFCis6MTAxQjUwMDA4RkJGMDAxNDhGQjAwMDEwQTM2MjAwMjMwQTAwMDMwQjk0Cis6MTAxQjYwMDAyN0JEMDAxODI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNEJDCis6MTAxQjcwMDBBRkIwMDAxMDMwQjEwMEZGMEUwMDAzMDIwMDgwODAyMUUyCis6MTAxQjgwMDAyNDAyMDAxMjBFMDAwNUM5QTM2MjAwM0YwRTAwMDMwQkUxCis6MTAxQjkwMDAwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjE4RkJGMDAxOEU2Cis6MTAxQkEwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzUwQTAwMDVEMDU1Cis6MTAxQkIwMDAyN0JEMDAyMEEzODAwMDJDMDNFMDAwMDhBMzgwMDAyRDk3Cis6MTAxQkMwMDA4RjQyMDI3ODA0NDBGRkZFOEY4MjAwMzRBRjQyMDI0MDExCis6MTAxQkQwMDAyNDAyMDAwMkEzNDIwMjQ0M0MwMjEwMDAwM0UwMDAwODc5Cis6MTAxQkUwMDBBRjQyMDI3ODNDMDM2MDAwOEM2MjU0MDAzMDQyMDAwODJGCis6MTAxQkYwMDAxNDQwRkZGRDAwMDAwMDAwOEM2MjU0MDhBRjgyMDAwQzBFCis6MTAxQzAwMDAyNDAyMDA1MkFDNjA1NDA4QUM2NDU0MzBBQzYyNTQzNENBCis6MTAxQzEwMDAyNDAyMDAwODAzRTAwMDA4QUM2MjU0MDAzQzAyNjAwMEFCCis6MTAxQzIwMDA4QzQyNTQwMDMwNDIwMDA4MTA0MDAwMDUzQzAzNjAwMDI0Cis6MTAxQzMwMDA4QzYyNTQwMDMwNDIwMDA4MTQ0MEZGRkQwMDAwMDAwMDk4Cis6MTAxQzQwMDA4RjgzMDAwQzNDMDI2MDAwMDNFMDAwMDhBQzQzNTQwOEEyCis6MTAxQzUwMDA5MEEzMDAwMDI0MDIwMDA1MDA4MDQwMjEzMDYzMDAzRjczCis6MTAxQzYwMDAwMDAwNDgyMTE0NjIwMDA1MDAwMDUwMjE5MEEyMDAxQ0QxCis6MTAxQzcwMDA5NEEzMDAxRTMwNDkwMEZGMzA2QUZGRkZBRDAwMDAwQzQ2Cis6MTAxQzgwMDBBRDAwMDAxMEFEMDAwMDI0OTUwMjAwMTQ4RDA1MDAxQzZECis6MTAxQzkwMDA4RDA0MDAxODMwNDJGRkZGMDA0OTEwMjMwMDAyMTEwMDlDCis6MTAxQ0EwMDAwMDAyMzdDMzAwNDAzODIxMDA4NjIwMjMwMEEyMTAyQkY5Cis6MTAxQ0IwMDAwMDgyMjAyMzAwQTcyODIzQUQwNTAwMUNBRDA0MDAxOEQ2Cis6MTAxQ0MwMDBBNTA5MDAxNEE1MDkwMDIwQTUwQTAwMTYwM0UwMDAwOEQ0Cis6MTAxQ0QwMDBBNTBBMDAyMjhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMjAwCis6MTAxQ0UwMDBBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDAwM0UwMDAwODVECis6MTAxQ0YwMDBBRjQyMDFGODNDMDIwODAwOEM0MjAwQjQyN0JERkZFODY3Cis6MTAxRDAwMDBBRkJGMDAxNDI0NDIwMDAxQUZCMDAwMTAzQzAxMDgwMDM2Cis6MTAxRDEwMDBBQzIyMDBCNDhGNDMwMDI0M0MwMjAwMUYzMEFBMDBGRjE1Cis6MTAxRDIwMDAzNDQyRkY4MDMwRDgwMEZGMDA2MjgwMjQwMDgwRjgyMTE4Cis6MTAxRDMwMDAzMEVGMDBGRjExNTgwMDNCMDE0MDU4MjEyNDBDRkY4MDc4Cis6MTAxRDQwMDAzQzE5MDAwQTMxNjMwMDdGMDAwMzEwQzAwMDAzMTk0MEYyCis6MTAxRDUwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMyNTY4MDAwMTZBCis6MTAxRDYwMDAzMTBEMDA3RjAzRTIxMDIxMDA0MzEwMjEzMDQzMDA3RjNBCis6MTAxRDcwMDAwMzQzMTgyMTAwNEMxMDI0MDA3OTQ4MjFBRjQyMDAyNDZECis6MTAxRDgwMDA4RDIyMDAyNDAxNkMxODI0MDA2QzcwMjZBRDIyMDAwQ0ZBCis6MTAxRDkwMDA4RDIyMDAyNDMxMDgwMEZGQUQyMjAwMTA5NTIyMDAxNDhFCis6MTAxREEwMDA5NTIzMDAyMDhEMjcwMDFDMzA0MkZGRkYzMDYzRkZGRjhBCis6MTAxREIwMDA4RDI2MDAxODAwNDMxMDIzMDAwMjExMDAwMDAyMjdDM0UzCis6MTAxREMwMDAwMDQwMjgyMTAwQzQzMDIzMDBFMjEwMkIwMEMyMzAyMzQxCis6MTAxREQwMDAwMEU1MzgyM0FEMjcwMDFDQUQyNjAwMTg5NTIyMDAyMDExCis6MTAxREUwMDBBNTIyMDAxNDk1MjIwMDIyMTU0QjAwMEFBNTIyMDAxNkY4Cis6MTAxREYwMDA4RDIzMDAyNDhEMjIwMDA4MjU0NjAwMDEzMTQ1MDA4MEY2Cis6MTAxRTAwMDAxNDYyMDAwNDMwQzQwMDdGMTA4RjAwMDIzOEFBMDA4MEUyCis6MTAxRTEwMDAwMEMwNTAyMTUxQUYwMDAxMzFDODAwRkYxNTE4RkZDOUEzCis6MTAxRTIwMDAwMTAwNTgyMThGODQwMDM0MzA4MjAwN0YwMzQyMTgyMTQyCis6MTAxRTMwMDAzQzAyMDAwQTAwNjIxODIxMjQwMkZGODAwMDgyMjAyNDU0Cis6MTAxRTQwMDBBRjQ0MDAyNEEwNkEwMDc5QTA2QTAwODM4QzYyMDA1MDJECis6MTAxRTUwMDA4Rjg0MDAzNEFDNjIwMDcwOEM2NTAwNzQzQzAyN0ZGRjlDCis6MTAxRTYwMDAzNDQyRkZGRjAwQTIyODI0MEUwMDA3MDNBQzY1MDA3NDczCis6MTAxRTcwMDBBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEEzCis6MTAxRTgwMDAyN0JEMDAxODI3QkRGRkMwQUZCRTAwMzhBRkI3MDAzNDc0Cis6MTAxRTkwMDBBRkI1MDAyQ0FGQjIwMDIwQUZCMTAwMUNBRkIwMDAxODNFCis6MTAxRUEwMDBBRkJGMDAzQ0FGQjYwMDMwQUZCNDAwMjhBRkIzMDAyNEUyCis6MTAxRUIwMDA4RjQ1MDAyNDhGNDYwMDI4OEY0MzAwMkMzQzAyMDAxRkQyCis6MTAxRUMwMDAzNDQyRkY4MDAwNjIxODI0MDBDMjMwMjQwMDgwQTgyMTIwCis6MTAxRUQwMDBBRkEzMDAxNDAwQTJGMDI0MEUwMDA2QzdBRkE2MDAxMEE2Cis6MTAxRUUwMDAzQzAyMDgwMDhDNDIwMEUwMjQxMEZGODAwMzYwODgyMTNGCis6MTAxRUYwMDAwMkEyMTAyMTAwNTAxMDI0QUY0MjAwMjQzQzAyMDgwMDJFCis6MTAxRjAwMDA4QzQyMDBFMDAyQTIxMDIxMzA0MjAwN0YwMzQyMTgyMURGCis6MTAxRjEwMDAzQzAyMDAwQTAwNjI5MDIxOTI0MjAwRDI5MzYzMDA4NDQ2Cis6MTAxRjIwMDAzMDU3MDBGRjMwNjMwMEZGMjQwMjAwMDExMDYyMDAzNENDCis6MTAxRjMwMDAwMzYwMjAyMTI0MDIwMDAyMTQ2MjAwMzYwMDAwMDAwMDI5Cis6MTAxRjQwMDAwRTAwMTJBRTAyNDAyODIxOTIyMzAwODM5MjIyMDA4M0M5Cis6MTAxRjUwMDAzMDYzMDA3RjMwNDIwMDdGMDAwMjEwQzAwMDAzMTk0MDUwCis6MTAxRjYwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMwMkEyMTAyMTExCis6MTAxRjcwMDAwMDQzMzgyMTAwRjAxMDI0QUY0MjAwMjg5MjI1MDA3ODU5Cis6MTAxRjgwMDA5MjI0MDA4MzMwRTIwMDdGMDM0MjE4MjEzQzAyMDAwQ0JGCis6MTAxRjkwMDAxNDg1MDAwNzAwNjI4MDIxMjQwMkZGRkZBMjQyMDBGMUE1Cis6MTAxRkEwMDAyNDAyRkZGRkE2NDIwMEYyMEEwMDA3QkYyNDAyRkZGRjNGCis6MTAxRkIwMDA5NjAyMDAyMEEyNDIwMEYxOTYwMjAwMjJBNjQyMDBGMjAwCis6MTAxRkMwMDA4RTAyMDAyNEFFNDIwMEY0OTIyMjAwODNBMjQyMDBGMDZFCis6MTAxRkQwMDA4RTQyMDBDOEFFNDIwMEZDOEU0MjAwQzRBRTQyMDBGODAxCis6MTAxRkUwMDA4RTIyMDA1MEFFNDIwMTAwOEU0MjAwQ0NBRTQyMDEwNDZGCis6MTAxRkYwMDA5MjIyMDA4NTMwNDIwMDNGMEEwMDA4MUEzNDQyMDA0MDE1Cis6MTAyMDAwMDAwRTAwMTJEMTAyNDAyODIxOTIyMjAwODUwQTAwMDgxQUVGCis6MTAyMDEwMDAzMDQyMDAzRjkzNjIwMDg1MjQwM0ZGREYzMDQyMDAzRkRGCis6MTAyMDIwMDBBMzYyMDA4NTkzNjIwMDg1MDA0MzEwMjRBMzYyMDA4NUFCCis6MTAyMDMwMDA5MzYzMDA4MzkzNjIwMDc4MzA3NDAwRkYzMDQyMDBGRkE2Cis6MTAyMDQwMDAxMDU0MDAzNjI0MEFGRjgwM0MwQzAwMEMzMjgzMDA3RkMxCis6MTAyMDUwMDAwMDAzMTBDMDAwMDMxOTQwMDA2MjE4MjEzQzAyMDgwMDcwCis6MTAyMDYwMDA4QzQyMDBEQzI2ODgwMDAxMzEwOTAwN0YwMkEyMTAyMTg5Cis6MTAyMDcwMDAwMDQzMzgyMTMwRTIwMDdGMDM0MjE4MjEwMEVBMTAyNDk3Cis6MTAyMDgwMDBBRjQyMDAyODAwNkM4MDIxOEUwMjAwMjQwMjhBMTgyNEFFCis6MTAyMDkwMDAwMDZBNTgyNkFFMDIwMDBDOEUwMjAwMjQzMTA4MDBGRkIwCis6MTAyMEEwMDBBRTAyMDAxMDk2MDIwMDE0OTYwMzAwMjA4RTA3MDAxQzVBCis6MTAyMEIwMDAzMDQyRkZGRjMwNjNGRkZGOEUwNjAwMTgwMDQzMTAyM0ZECis6MTAyMEMwMDAwMDAyMTEwMDAwMDIyN0MzMDA0MDI4MjEwMEM0MzAyMzcxCis6MTAyMEQwMDAwMEUyMTAyQjAwQzIzMDIzMDBFNTM4MjNBRTA3MDAxQ0JECis6MTAyMEUwMDBBRTA2MDAxODk2MDIwMDIwQTYwMjAwMTQ5NjAyMDAyMkY2Cis6MTAyMEYwMDBBNjAyMDAxNjkyMjIwMDc5MzA0MjAwRkYxMDU0MDAwNzE5Cis6MTAyMTAwMDAwMDAwMDAwMDUxMzcwMDAxMzE2ODAwRkY5MjIyMDA3ODgyCis6MTAyMTEwMDAzMDQyMDBGRjE0NDhGRkNEMDEwMEEwMjE5MjIyMDA4MzJECis6MTAyMTIwMDBBMjIyMDA3OThFMjIwMDUwMEEwMDA4N0FBRTIyMDA3MEE2Cis6MTAyMTMwMDBBMjIyMDA4NThFMjIwMDRDMjQwNUZGODBBRTQyMDEwQ0I1Cis6MTAyMTQwMDA5MjIyMDA4NTM0NDIwMDIwQTIyMjAwODU5MjQyMDBEMUQyCis6MTAyMTUwMDAzQzAzMDgwMDhDNjMwMERDMzA1NDAwRkYzQzAyMDgwMEE0Cis6MTAyMTYwMDA4QzQyMDBFNDAwMTQzMTQwMDAxNDIwQzAwMkEzMTgyMTY2Cis6MTAyMTcwMDAwMEM0MjAyMTAyQTIxMDIxMDA2NDM4MjEwMDQ2MTAyMTUxCis6MTAyMTgwMDAwMDQ1MTgyNDAwRTUyODI0QUY0NTAwMjhBRjQzMDAyQzYzCis6MTAyMTkwMDAzMDQyMDA3RjkyNDQwMEQwMzBFMzAwN0YwMzQyMjgyMTg4Cis6MTAyMUEwMDAwMzQzMTgyMTNDMDIwMDBDMDA2MjgwMjEzQzAyMDAwRTE3Cis6MTAyMUIwMDAzMDk2MDBGRjAwQTI5ODIxMTI5NjAwMkEwMDAwMDAwMDJECis6MTAyMUMwMDA4RTAyMDAwQzAyMDAyMDIxMDI2MDI4MjExMDQwMDAyNTEwCis6MTAyMUQwMDAyNjEwMDAyODBFMDAwNkUyMDAwMDAwMDA5MjYyMDAwREFBCis6MTAyMUUwMDAyNjgzMDAwMTMwNzQwMEZGMzA0MjAwN0ZBMjYyMDAwREEwCis6MTAyMUYwMDAyNDA0RkY4MDE2OTdGRkYwMjY3MzAwMjAzQzAyMDgwMDlECis6MTAyMjAwMDA4QzQyMDBEQzAwMDBBMDIxMDJBMjEwMjEwMDQ0MTAyNDE2Cis6MTAyMjEwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQzQzAzMDgwMDY2Cis6MTAyMjIwMDA4QzYzMDBEQzAyQTIxMDIxMDA0NDEwMjRBRjQyMDAyQzc5Cis6MTAyMjMwMDAzQzAyMDgwMDhDNDIwMEU0MDJBMzE4MjEzMDYzMDA3RkI2Cis6MTAyMjQwMDAwMkEyMTAyMTMwNDIwMDdGMDM0MjIwMjEwMzQzMTgyMUMzCis6MTAyMjUwMDAzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEUwQTAwMDgzQzk3Cis6MTAyMjYwMDAwMDgyOTgyMThFNDIwMEQ4QUUyMjAwNTA4RTQyMDBEOEMzCis6MTAyMjcwMDBBRTIyMDA3MDkyMjUwMDgzOTI0NjAwRDE5MjIzMDA4MzAzCis6MTAyMjgwMDA5MjQ0MDBEMTI0MDJGRjgwMDBBMjI4MjQzMDYzMDA3RjAyCis6MTAyMjkwMDAzMDg0MDBGRjAwQTYyODI1MDA2NDE4MkExMDYwMDAwMjgwCis6MTAyMkEwMDAzMEE1MDBGRjM4QTUwMDgwQTIyNTAwODNBMjI1MDA3OTczCis6MTAyMkIwMDAwRTAwMDZENTAwMDAwMDAwOTIyMjAwN0UwMkEwMjAyMTIwCis6MTAyMkMwMDBBMjIyMDA3QThFMjMwMDc0M0MwMjdGRkYzNDQyRkZGRjdCCis6MTAyMkQwMDAwMDYyMTgyNDBFMDAwNzAzQUUyMzAwNzQ4RkEyMDAxMEMyCis6MTAyMkUwMDBBRjVFMDAyNDhGQkYwMDNDQUY0MjAwMjg4RkJFMDAzODk1Cis6MTAyMkYwMDA4RkEyMDAxNDhGQjcwMDM0OEZCNjAwMzA4RkI1MDAyQzNBCis6MTAyMzAwMDA4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQzNGCis6MTAyMzEwMDA4RkIwMDAxODI3QkQwMDQwMDNFMDAwMDhBRjQyMDAyQzNBCis6MTAyMzIwMDA5MEEyMDAwMDI0NDIwMDAxQTBBMjAwMDAzQzAzMDgwMDhCCis6MTAyMzMwMDA4QzYzMDBGNDMwNDIwMEZGMTQ0MzAwMEYwMDgwMzAyMTEyCis6MTAyMzQwMDBBMEEwMDAwMDNDMDIwODAwOEM0MjAwRTQ4Rjg0MDAzNDBFCis6MTAyMzUwMDAwMDgyMjAyMTMwODIwMDdGMDM0MjE4MjEzQzAyMDAwQ0MxCis6MTAyMzYwMDAwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjRBQ0MzMDAwMEY4Cis6MTAyMzcwMDAwM0UwMDAwOEFGNDQwMDI4OEM4MjAwMDAyNDQyMDAyMEMzCis6MTAyMzgwMDAwM0UwMDAwOEFDODIwMDAwOTRDMjAwMDAzQzA4MDgwMDkyCis6MTAyMzkwMDA5NTA4MDBDQTMwRTdGRkZGMDA4MDQ4MjEwMTAyMTAyMUE0Cis6MTAyM0EwMDBBNEMyMDAwMDk0QzIwMDAwMzA0MkZGRkYwMEUyMTAyQkU0Cis6MTAyM0IwMDA1NDQwMDAwMUE0QzcwMDAwOTRBMjAwMDAzQzAzMDgwMEEwCis6MTAyM0MwMDA4QzYzMDBDQzI0NDIwMDAxQTRBMjAwMDA5NEEyMDAwMDZGCis6MTAyM0QwMDAzMDQyRkZGRjU0NDMwMDA3OEY4NjAwMjgwMTA3MTAyQjZGCis6MTAyM0UwMDBBNEEwMDAwMDU0NDAwMDAxMDEwMDM4MjFBNEM3MDAwMDRGCis6MTAyM0YwMDA4Rjg2MDAyODhDQzQwMDFDQUY0NDAwM0M5NEEyMDAwMENGCis6MTAyNDAwMDA4RjQzMDAzQzMwNDJGRkZGMDAwMjEwQzAwMDYyMTgyMUUxCis6MTAyNDEwMDBBRjQzMDAzQzhGNDIwMDNDMDA4MjIwMjMxODgwMDAwNDIwCis6MTAyNDIwMDAwMDAwMDAwMDhDQzIwMDE4MEEwMDA4REIyNDQyMDAwMUYyCis6MTAyNDMwMDA4Q0MyMDAxOEFGNDIwMDM4M0MwMjAwNTAzNDQyMDAxMEY5Cis6MTAyNDQwMDBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTAyNDUwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkQwMDAwMDAwMENECis6MTAyNDYwMDA4RjQyMDQwNEFEMjIwMDA0OEY0MjA0MDBBRDIyMDAwMDFDCis6MTAyNDcwMDAzQzAyMDAyMEFGNDIwMDMwMDNFMDAwMDgwMDAwMDAwMEYyCis6MTAyNDgwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDJECis6MTAyNDkwMDBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjEzQzEyMDgwMEE1Cis6MTAyNEEwMDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDA5NjAzMDAwMEQ2Cis6MTAyNEIwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDU4RkIxMDAzMEE5Cis6MTAyNEMwMDAwRTAwMDhCMDAyNDAzODIxMEEwMDA5MEQwMDAwMDAwMDhCCis6MTAyNEQwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDAwNDYxMDAwN0M1Cis6MTAyNEUwMDBBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQwMDAwMDAwMDYwCis6MTAyNEYwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDA5NjAyMDAwMEExCis6MTAyNTAwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDA5NjIyMDAwMDVBCis6MTAyNTEwMDAyNDQyMDAwMUE2MjIwMDAwOEY4MjAwMjg5NjIzMDAwMDlBCis6MTAyNTIwMDA5NDQyMDAxNjE0NDMwMDA0OEZCRjAwMUMyNDAyMDAwMUQzCis6MTAyNTMwMDBBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEJDCis6MTAyNTQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4Rjg5MDAyODBECis6MTAyNTUwMDAyN0JERkZFMEFGQkYwMDE4OEQyMjAwMjgyNzQ4MDQwMEU4Cis6MTAyNTYwMDAzMEU3MDBGRkFGNDIwMDM4OEQyMjAwMkNBRjg4MDAzMEVBCis6MTAyNTcwMDBBRjQyMDAzQzNDMDIwMDA1QUY0MjAwMzAwMDAwMDAwMENBCis6MTAyNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTAyNTkwMDAwMDAwMDAwMDhDODIwMDBDOEM4MjAwMENBRDAyMDAwMDU4Cis6MTAyNUEwMDA4QzgyMDAxMEFEMDIwMDA0OEM4MjAwMThBRDAyMDAwODdECis6MTAyNUIwMDA4QzgyMDAxQ0FEMDIwMDBDOENBMjAwMTRBRDAyMDAxMDM1Cis6MTAyNUMwMDA4QzgyMDAyMEFEMDIwMDE0OTA4MjAwMDUzMDQyMDBGRjkyCis6MTAyNUQwMDAwMDAyMTIwMEFEMDIwMDE4OENBMjAwMThBRDAyMDAxQzBGCis6MTAyNUUwMDA4Q0EyMDAwQ0FEMDIwMDIwOENBMjAwMTBBRDAyMDAyNEQxCis6MTAyNUYwMDA4Q0EyMDAxQ0FEMDIwMDI4OENBMjAwMjBBRDAyMDAyQzkxCis6MTAyNjAwMDBBRDA2MDAzMEFEMDAwMDM0OTc4MzAwMjYzNDAyRkZGRjkyCis6MTAyNjEwMDAxNDYyMDAwMjAwNjAyMDIxMzQwNEZGRkYxMEUwMDAxMTZBCis6MTAyNjIwMDBBRDA0MDAzODk1MjMwMDM2OTUyNDAwMzYyNDAyMDAwMUJECis6MTAyNjMwMDAzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE5MDY1MDA0MDU1Cis6MTAyNjQwMDAzMDg0MDAwNzAwODIxMDA0MDA0NTEwMjVBMDYyMDA0MDdECis6MTAyNjUwMDA4RjgyMDAyODk0NDIwMDU2MzA0MkZGRkYwQTAwMDk3NDFFCis6MTAyNjYwMDBBRDAyMDAzQzk1MjMwMDM2OTUyNDAwMzYyNDAyMDAwMTdCCis6MTAyNjcwMDAzMDYzRkZGRjAwMDMxOEMyMDA2OTE4MjE5MDY1MDA0MDE1Cis6MTAyNjgwMDAzMDg0MDAwNzAwODIxMDA0MDAwMjEwMjcwMDQ1MTAyNDQ3Cis6MTAyNjkwMDBBMDYyMDA0MEFEMDAwMDNDMDAwMDAwMDAwMDAwMDAwMDBGCis6MTAyNkEwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDBBRjQyMDAzMDBGCis6MTAyNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMDAwMDQ5Cis6MTAyNkMwMDAzMDQyMDAxMDEwNDBGRkZEOEY4NjAwMjhBRjg4MDAzMDk4Cis6MTAyNkQwMDAyNEMyMDA1NjI0QzcwMDNDMjRDNDAwMjgyNEM1MDAzMjZDCis6MTAyNkUwMDAyNEM2MDAzNjBFMDAwOEVFQUZBMjAwMTA4RkJGMDAxOEZGCis6MTAyNkYwMDAwM0UwMDAwODI3QkQwMDIwOEY4MzAwMjQzQzA2MDgwMDZCCis6MTAyNzAwMDA4Q0M2MDBFODhGODIwMDM0MzA2MzNGRkYwMDAzMTk4MERECis6MTAyNzEwMDAwMDQ2MTAyMTAwNDMxMDIxMjQwM0ZGODAzMDQ2MDA3RjMzCis6MTAyNzIwMDAwMDQzMTAyNEFGNDIwMDI4MDM0NjE4MjEzQzAyMDAwQzRECis6MTAyNzMwMDAwMDYyMzAyMTkwQzIwMDBEMzBBNTAwRkYwMDAwMzgyMTVBCis6MTAyNzQwMDAzNDQyMDAxMEEwQzIwMDBEOEY4OTAwMjg4RjhBMDAyNDE3Cis6MTAyNzUwMDA5NTIzMDAzNjAwMEExMzgyMzA0ODAwMDMyNDAyMDAwMTRBCis6MTAyNzYwMDBBNEMzMDAwRTExMDIwMDBCMjkwMjAwMDIxMDQwMDAwNTU0Cis6MTAyNzcwMDAyNDAyMDAwMjExMDAwMDBDMjQwMzAwMDEwQTAwMDlCODIxCis6MTAyNzgwMDAwMDAwMTgyMTExMDIwMDA2MDAwMDAwMDAwQTAwMDlCODJDCis6MTAyNzkwMDAwMDAwMTgyMThDQzIwMDJDMEEwMDA5QjgyNDQzMDAwMTUzCis6MTAyN0EwMDA4Q0MyMDAxNDI0NDMwMDAxOENDMjAwMTgwMDQzMTAyQjdCCis6MTAyN0IwMDA1MDQwMDAwOTI0MDcwMDAxMjQwMjAwMjcxNEEyMDAwMzRFCis6MTAyN0MwMDAwMDAwMDAwMDBBMDAwOUM0MjQwNzAwMDE5NTIyMDAzRTExCis6MTAyN0QwMDAyNDQyMDAwMUE1MjIwMDNFMDAwQTEzODIzMDQzMDAwMzc4Cis6MTAyN0UwMDAyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjExNDYwMDAwNEJGCis6MTAyN0YwMDAwMDAwMDAwMDk0QzIwMDM2MEEwMDA5RDQzMDQ2RkZGRkYyCis6MTAyODAwMDA4Q0M2MDAzODBBMDAwOUQ0MDA4MDI4MjEwMDAwMzAyMTNECis6MTAyODEwMDAzQzA0MDgwMDI0ODQ0REQ4MEEwMDA5MjEwMDAwMDAwMDZGCis6MTAyODIwMDAyNzQ5MDEwMDhEMjIwMDBDOTUyMzAwMDYwMTIwMjAyMTVDCis6MTAyODMwMDAwMDAyMTYwMjMwNDYwMDNGMzA2M0ZGRkYyNDAyMDAyN0VCCis6MTAyODQwMDAwMEMwMjgyMTI4QzcwMDI4MTBDMjAwMEVBRjgzMDAyNDMyCis6MTAyODUwMDAxMEUwMDAwODI0MDIwMDMxMjQwMjAwMjExMEMyMDAwOTA3Cis6MTAyODYwMDAyNDAyMDAyNTEwQzIwMDA3OTM4MjAwMkQwQTAwMDlGM0ZDCis6MTAyODcwMDAwMDAwMDAwMDEwQzIwMDA1OTM4MjAwMkQwQTAwMDlGMzM5Cis6MTAyODgwMDAwMDAwMDAwMDBBMDAwOThDMDAwMDAwMDAwQTAwMDZCRURCCis6MTAyODkwMDAwMDAwMDAwMDk1MjMwMDA2OTEyNDAwMDU4RDI1MDAwQzAyCis6MTAyOEEwMDA4RDI2MDAxMDhEMjcwMDE4OEQyODAwMUM4RDI5MDAyMEYyCis6MTAyOEIwMDAyNDQyMDAwMTNDMDEwODAwQTQyMzREREUzQzAxMDgwMDM1Cis6MTAyOEMwMDBBMDI0NERERDNDMDEwODAwQUMyNTRERTQzQzAxMDgwMDhFCis6MTAyOEQwMDBBQzI2NERFODNDMDEwODAwQUMyNzRERjAzQzAxMDgwMDU3Cis6MTAyOEUwMDBBQzI4NERGNDNDMDEwODAwQUMyOTRERjgwM0UwMDAwODg5Cis6MTAyOEYwMDBBMzgyMDAyRDhGODcwMDI4MjdCREZGQzBBRkIzMDAzNDBGCis6MTAyOTAwMDBBRkIyMDAzMEFGQjEwMDJDQUZCMDAwMjhBRkJGMDAzODdECis6MTAyOTEwMDAzQzAyMDgwMDhDNDIwMEQwOTRFMzAwMzAzMEIwRkZGRjRFCis6MTAyOTIwMDAwMDUwMTAwNzMwNDVGRkZGMzA2M0ZGRkYwMEMwOTgyMUMzCis6MTAyOTMwMDBBN0EyMDAxMDNDMTEwODAwOTYzMTAwQzYxNEEzMDAwNjlGCis6MTAyOTQwMDAzMDkyRkZGRjhDRTIwMDI0MjQ0MjAwMzBBRjQyMDAzQzcyCis6MTAyOTUwMDAwQTAwMEEyQzhDRTIwMDIwOTRFMjAwMzIzMDQyRkZGRjkxCis6MTAyOTYwMDA1NEEyMDAwODI3QTQwMDE4OENFMjAwMkMyNDQyMDAzMDU2Cis6MTAyOTcwMDBBRjQyMDAzQzhDRTIwMDI4QUY0MjAwMzgwQTAwMEEzQTFECis6MTAyOTgwMDA4Rjg0MDAyODI3QTUwMDEwMjdBNjAwMjAwMjIwMzgyMUM4Cis6MTAyOTkwMDAwRTAwMDhCMEE3QTAwMDIwOEZBMjAwMTgyNDQyMDAzMDJCCis6MTAyOUEwMDBBRjQyMDAzODhGQTIwMDFDQUY0MjAwM0M4Rjg0MDAyODQ5Cis6MTAyOUIwMDAzQzAyMDAwNUFGNDIwMDMwOTQ4MjAwMzQyNzQzMDQwMEZCCis6MTAyOUMwMDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDdBRjgzMDAzMDlCCis6MTAyOUQwMDA5NDgyMDA1NDk0ODMwMDM0MDIwMjEwMjEwMDQzMTAyMzk3Cis6MTAyOUUwMDAwQTAwMEE0RTMwNDNGRkZGOTQ4MzAwNTQ5NDgyMDAzNDVGCis6MTAyOUYwMDAwMjIzMTgyMTAwNTAxMDIzMDA2MjE4MjMzMDYzRkZGRkM4Cis6MTAyQTAwMDA5NDgyMDAxNjMwNDJGRkZGMTQ0MzAwMDMwMDAwMDAwMEQwCis6MTAyQTEwMDAwQTAwMEE1QzI0MDMwMDAxOTQ4MjAwMTYzMDQyRkZGRjgyCis6MTAyQTIwMDAwMDQzMTAyQjEwNDAwMDA1OEY4MjAwMzA5NDgyMDAxNjY2Cis6MTAyQTMwMDAwMDYyMTAyMzMwNDNGRkZGOEY4MjAwMzBBQzUzMDAwMDUwCis6MTAyQTQwMDBBQzQwMDAwNEFDNTIwMDA4QUM0MzAwMEMzQzAyMDAwNjUxCis6MTAyQTUwMDAzNDQyMDAxMEFGNDIwMDMwMDAwMDAwMDAwMDAwMDAwMENGCis6MTAyQTYwMDAwMDAwMDAwMDhGNDIwMDAwMzA0MjAwMTAxMDQwRkZGREM3Cis6MTAyQTcwMDAwMDEwMThDMjAwNjQxODIxOTA2NTAwNDAzMjA0MDAwNzVECis6MTAyQTgwMDAyNDAyMDAwMThGQkYwMDM4OEZCMzAwMzQ4RkIyMDAzMEIyCis6MTAyQTkwMDA4RkIxMDAyQzhGQjAwMDI4MDA4MjEwMDQwMDQ1MTAyNTUzCis6MTAyQUEwMDAyN0JEMDA0MDAzRTAwMDA4QTA2MjAwNDAyN0JERkZBODRBCis6MTAyQUIwMDBBRkI2MDA1MEFGQjUwMDRDQUZCNDAwNDhBRkIzMDA0NDYwCis6MTAyQUMwMDBBRkIxMDAzQ0FGQkYwMDU0QUZCMjAwNDBBRkIwMDAzODcwCis6MTAyQUQwMDA4QzkwMDAwMDNDMDIwODAwOEM0MjAwRTg4Rjg2MDAzNDk1Cis6MTAyQUUwMDA5NjAzMDAwMjI0MTNGRjgwMDBDMjMwMjEzMDYzM0ZGRkIxCis6MTAyQUYwMDAwMDAzMTk4MDAwQzMzODIxMDBGMzEwMjQ5MEIyMDAwMEI1Cis6MTAyQjAwMDBBRjQyMDAyQzkyMDMwMDAyMzBFMjAwN0YwMzQyMzAyMUVBCis6MTAyQjEwMDAzQzAyMDAwRTAwQzI4ODIxMzA2MzAwQzAyNDAyMDA0MDQ1Cis6MTAyQjIwMDAwMDgwQTgyMTAwQTBCMDIxMTQ2MjAwMjYwMDAwQTAyMThFCis6MTAyQjMwMDA4RTM0MDAzODhFMjIwMDE4MTQ0MDAwMDIyNDAyMDAwMTU2Cis6MTAyQjQwMDBBRTIyMDAxODkyMDIwMDBEMzA0MjAwMjAxNDQwMDAxNTAxCis6MTAyQjUwMDA4RjgyMDAzNDNDMDMwODAwOEM2MzAwREMwMDEyMzhDMDE0Cis6MTAyQjYwMDAwMDEyMzE0MDAwNDMxMDIxMDBDNzMwMjEwMDQ2MzgyMUI3Cis6MTAyQjcwMDAzMEUzMDAwNzNDMDIwMDgwMzBFNjAwNzgwMEMyMzAyNUQ4Cis6MTAyQjgwMDAwMzQzMTgyMTAwRjMxMDI0QUY0MjA4MDAyNDYzMDkwMDE2Cis6MTAyQjkwMDBBRjQ2MDgxMDhFMjIwMDE4OEM2MzAwMDgwMDQzMTAyMUY1Cis6MTAyQkEwMDBBRTIyMDAxODhFMjIwMDJDOEUyMzAwMTgyNDQyMDAwMTMxCis6MTAyQkIwMDAwMDYyMTgyQjEwNjAwMDNEMDAwMDAwMDAwQTAwMEIxMDlFCis6MTAyQkMwMDAwMDAwMDAwMDkyMDMwMDAyMjQwMkZGQzAwMDQzMTAyNDEyCis6MTAyQkQwMDAzMDQyMDBGRjE0NDAwMDA1MjQwMjAwMDFBRTIyMDAxODFDCis6MTAyQkUwMDA5NjIyMDAzNjBBMDAwQUY5MzA1NEZGRkY4RTIyMDAxNEE0Cis6MTAyQkYwMDAyNDQyMDAwMUFFMjIwMDE4OTIwMjAwMDAwMDAyMTYwMERBCis6MTAyQzAwMDAwMDAyMTYwMzA0NDEwMDI5MDAwMDAwMDA5NjAyMDAwMkExCis6MTAyQzEwMDAyN0E0MDAxMDAwODAyODIxQTdBMjAwMTY5NjAyMDAwMjE3Cis6MTAyQzIwMDAyNDA3MDAwMTAwMDAzMDIxMzA0MkZGRkZBRjgyMDAyNDYyCis6MTAyQzMwMDAwRTAwMDkyMUFGQTAwMDFDOTYwMzAwMDIzQzA0MDgwMDBFCis6MTAyQzQwMDA4Qzg0MDBFODhGODIwMDM0MzA2MzNGRkYwMDAzMTk4MERBCis6MTAyQzUwMDAwMDQ0MTAyMTAwNDMxMDIxMzA0MzAwN0YzQzA1MDAwQzRDCis6MTAyQzYwMDAwMDUzMTAyNDAzNDMxODIxQUY0MjAwMjgwMDY1MTgyMUE3Cis6MTAyQzcwMDA5MDYyMDAwRDAwMTIyMTQwMzA0MjAwN0ZBMDYyMDAwREUyCis6MTAyQzgwMDAzQzAzMDgwMDhDNjMwMEU0OEY4MjAwMzQwMDQzMTAyMTcxCis6MTAyQzkwMDAwMDQ0MzgyMTMwRTIwMDdGMDM0MjEwMjEwMDQ1MTAyMTFBCis6MTAyQ0EwMDAwMEYzMTgyNEFGNDMwMDI4QUVBMjAwMDA5MjIyMDAwRENBCis6MTAyQ0IwMDAzMDQyMDAxMDEwNDAwMDEzMDJBMDIwMjE4RjgzMDAyODEyCis6MTAyQ0MwMDA4RUE0MDAwMDAyODAzMDIxOTQ2MjAwM0UyNDQyRkZGRjY3Cis6MTAyQ0QwMDBBNDYyMDAzRTk0ODQwMDAyOTYyNTAwMEUzMDg0RkZGRjFCCis6MTAyQ0UwMDAwRTAwMEEwQjMwQTVGRkZGOEY4MjAwMjg5NDQzMDAzNEFBCis6MTAyQ0YwMDA5NjIyMDAwRTE0NDMwMDAzMDJBMDIwMjEyNDAyMDAwMUFBCis6MTAyRDAwMDBBMzgyMDAyQzAyQzAyODIxMEUwMDA4OTYwMDAwMDAwMEJCCis6MTAyRDEwMDA4RkJGMDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0ODYxCis6MTAyRDIwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzOEE5Cis6MTAyRDMwMDAwM0UwMDAwODI3QkQwMDU4OEY4MjAwMjgyN0JERkZEMDgwCis6MTAyRDQwMDBBRkI0MDAyOEFGQjIwMDIwQUZCRjAwMkNBRkIzMDAyNDU3Cis6MTAyRDUwMDBBRkIxMDAxQ0FGQjAwMDE4OTA0NDAwRDA5MDQzMDBEMTM4Cis6MTAyRDYwMDAwMDAwQTAyMTMwOTIwMEZGQTNBMzAwMTAzMDYzMDBGRkY5Cis6MTAyRDcwMDA4QzUxMDBEODhDNTMwMERDMTA3MjAwMkIyNDAyMDAwMTBGCis6MTAyRDgwMDAzQzAzMDgwMDhDNjMwMEU0OTNBNDAwMTA4RjgyMDAzNDlECis6MTAyRDkwMDAyNDA2RkY4MDAwMDQyMTQwMDA0MzEwMjEwMDQ0MTAyMTNDCis6MTAyREEwMDAzMDQzMDA3RjAwNDYxMDI0QUY0MjAwMjgwMzQzMTgyMTFGCis6MTAyREIwMDAzQzAyMDAwQzAwNjIxODIxOEM2MjAwMDQyN0E0MDAxNDVECis6MTAyREMwMDAyN0E1MDAxMDAyMjI4MDIxMDI3MDEwMjMwNDQwMDAxNTY0Cis6MTAyREQwMDBBRkEzMDAxNDkwNjIwMDBEMDBDMjEwMjQzMDQyMDBGRjI3Cis6MTAyREUwMDAxNDQwMDAwNzAyMDA4ODIxOTA2MjAwMEQzNDQyMDA0MDI4Cis6MTAyREYwMDAwRTAwMDg5NkEwNjIwMDBEMEEwMDBCNTU5M0EyMDAxMDY5Cis6MTAyRTAwMDAwRTAwMEE3OTI0MTQwMDAxOEY4MzAwMjhBQzcwMDBEOENBCis6MTAyRTEwMDA5M0EyMDAxMEEwNjIwMEQxOTNBMjAwMTAxNDUyRkZEODE4Cis6MTAyRTIwMDAwMDAwMDAwMDI0MDIwMDAxMTY4MjAwMDQ4RkJGMDAyQzY1Cis6MTAyRTMwMDAwRTAwMDZCRTAwMDAwMDAwOEZCRjAwMkM4RkI0MDAyOERCCis6MTAyRTQwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODA4Cis6MTAyRTUwMDAwM0UwMDAwODI3QkQwMDMwMjdCREZGRDhBRkIzMDAxQzNBCis6MTAyRTYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDc4Cis6MTAyRTcwMDAwMDgwOTgyMTAwRTA4MDIxMzBCMUZGRkYwRTAwMDUyQjdCCis6MTAyRTgwMDAzMEQyMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTAyRTkwMDA4RjgyMDAyMEFDNTEwMDAwQUM1MjAwMDRBQzUzMDAwOEZCCis6MTAyRUEwMDBBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTRBQzQwMDAxODJBCis6MTAyRUIwMDAzQzAzMDgwMDk0NjM0REJFMDIwMzgwMjVBQzUwMDAxQzA3Cis6MTAyRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNDA0MDAwMUQ5Cis6MTAyRUQwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDc5Cis6MTAyRUUwMDA4RkIwMDAxMDBBMDAwNTUwMjdCRDAwMjgyN0JERkZFODVECis6MTAyRUYwMDBBRkIwMDAxMEFGQkYwMDE0MzBBNUZGRkYzMEM2MDBGRjE5Cis6MTAyRjAwMDAwMDgwODAyMTI0MDIwQzgwQUY0MjAwMjQwMDAwMDAwMEQ5Cis6MTAyRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTAyRjIwMDAwRTAwMEI2NDAwMDAwMDAwM0MwNDA4MDAyNDg0MDBFMDU0Cis6MTAyRjMwMDA4QzgyMDAwMDI0MDNGRjgwOEZCRjAwMTQwMjAyMTAyMTQ2Cis6MTAyRjQwMDAwMDQzMTAyNEFGNDIwMDI0OEM4MjAwMDAzQzAzMDAwQTlFCis6MTAyRjUwMDAwMjAyODAyMTMyMTAwMDdGMDM1MDEwMjE4RkIwMDAxMDM4Cis6MTAyRjYwMDAwMDQzMTAyMTI3QkQwMDE4MDNFMDAwMDhBRjgyMDAyOEFECis6MTAyRjcwMDAyN0JERkZFOEFGQkYwMDEwOEY0NDAxNDAzQzAzMDgwMEFECis6MTAyRjgwMDA4QzYzMDBFMDI0MDJGRjgwQUY4NDAwMzQwMDgzMTgyMUFBCis6MTAyRjkwMDAwMDYyMTAyNEFGNDIwMDI0M0MwMjAwMDgwMzQyNDAyMTlBCis6MTAyRkEwMDA5NTA1MDAwMjMwNjMwMDdGM0MwMjAwMEEwMzQzMTgyMUFDCis6MTAyRkIwMDAwMDYyMTgyMTMwQTVGRkZGMzQwMkZGRkYwMDAwMzAyMTFFCis6MTAyRkMwMDAzQzA3NjAyMDEwQTIwMDA2QUY4MzAwMjgyNDAyRkZGRjA4Cis6MTAyRkQwMDBBNTAyMDAwMjk0NjUwMEQ0MEUwMDBCODkzMEE1RkZGRjA2Cis6MTAyRkUwMDA4RkJGMDAxMDI0MDIwQzgwMjdCRDAwMTgwM0UwMDAwOEVBCis6MTAyRkYwMDBBRjQyMDAyNDNDMDIwMDA4MDM0MjQwMjE5NTAyMDAwMjM3Cis6MTAzMDAwMDAzQzBBMDgwMDk1NEEwMEM2MzA0NkZGRkYxNEMwMDAwNzdFCis6MTAzMDEwMDAzNDAyRkZGRjhGODIwMDI4OEY4NDAwMzQzQzA3NjAyMDM5Cis6MTAzMDIwMDA5NDQ1MDBENDBBMDAwQkYyMzBBNUZGRkYxMEMyMDAyNDIzCis6MTAzMDMwMDA4Rjg3MDAyODk0RTIwMDU0OTRFNDAwMTYzMDQ1RkZGRjg3Cis6MTAzMDQwMDAwMEE2MTAyMzAwQTYxODJCMzA4OUZGRkYxMDYwMDAwNDkzCis6MTAzMDUwMDAzMDQ0RkZGRjAwQzUxMDIzMDEyMjEwMjMzMDQ0RkZGRjNFCis6MTAzMDYwMDAwMDhBMTAyQjEwNDAwMDBDMDEyQTEwMjMyNDAyMDAwMUJBCis6MTAzMDcwMDBBNTAyMDAxNjI0MDJGRkZGQTUwMjAwMDI5NEU1MDBENDc5Cis6MTAzMDgwMDA4Rjg0MDAzNDAwMDAzMDIxMzBBNUZGRkYzQzA3NjAyMDEyCis6MTAzMDkwMDAwQTAwMEI4OTAwMDAwMDAwMDA0NDEwMkExMDQwMDAwOEJDCis6MTAzMEEwMDAwMDAwMDAwMDk1MDIwMDE2MzA0MjAwMDExMDQwMDAwNEFDCis6MTAzMEIwMDAwMDAwMDAwMDk3NDIwMDdFMjQ0MjAwMTRBNTAyMDAxNjgyCis6MTAzMEMwMDAwM0UwMDAwODAwMDAwMDAwOEY4NDAwMjgyN0JERkZFMDE3Cis6MTAzMEQwMDBBRkJGMDAxODk0ODIwMDM0OTQ4MzAwM0UxMDYwMDAxQTQxCis6MTAzMEUwMDAzMDQ4RkZGRjkzODMwMDJDMjQwMjAwMDExNDYyMDAyNzY0Cis6MTAzMEYwMDA4RkJGMDAxODhGODIwMDI4MDAwODE4QzIzMTA4MDAwNzBGCis6MTAzMTAwMDAwMDYyMTgyMTI0NDcwMDNBMjQ0OTAwNTQyNDQ0MDAyMDM2Cis6MTAzMTEwMDAyNDQ1MDAzMDI0NDYwMDM0OTA2MjAwNDAzMDQyMDBGRkQ1Cis6MTAzMTIwMDAwMTAyMTAwNzMwNDIwMDAxMTA0MDAwMTY4RkJGMDAxODQ2Cis6MTAzMTMwMDAwRTAwMDhFRUFGQTkwMDEwOEY4MjAwMjg5NDQyMDAzNEUwCis6MTAzMTQwMDAwQTAwMEMwQjMwNDhGRkZGOTQ4MzAwMzY5NDgyMDAzNDUxCis6MTAzMTUwMDAxMDQzMDAwRThGQkYwMDE4OTQ4MjAwMzZBNDgyMDAzNDAyCis6MTAzMTYwMDA5NDgyMDA1NkE0ODIwMDU0OEM4MjAwMkNBQzgyMDAyNEVECis6MTAzMTcwMDA5NDgyMDAzMkE0ODIwMDMwOTQ4MjAwM0NBNDgyMDAzQUZGCis6MTAzMTgwMDA4RkJGMDAxODBBMDAwQkNCMjdCRDAwMjAwM0UwMDAwODBBCis6MTAzMTkwMDAyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTA4RjRBMDEwMDA4Cis6MTAzMUEwMDAzQzA1MDgwMDhDQTUwMEUwM0MwMjA4MDA5MDQyNERFNDdDCis6MTAzMUIwMDAzQzBDMDgwMDk1OEM0RERFMDE0NTI4MjEzMDRCMDAzRjJBCis6MTAzMUMwMDAzMEEyMDA3RjAzNDI0MDIxMzk2OTAwMzIzQzAyMDAwQUVDCis6MTAzMUQwMDAzOTYzMDAzRjJDNjMwMDAxMDEwMjQwMjEyRDI5MDAwMUM5Cis6MTAzMUUwMDAyNDAyRkY4MDAwQTIyODI0MDEyMzQ4MjVBRjhBMDAzNDRFCis6MTAzMUYwMDAwMDgwMTgyMUFGNDUwMDI0MDAwMDMwMjEwMDgwMjgyMUU0Cis6MTAzMjAwMDAyNDA3MDAwMUFGODgwMDI4M0MwNDA4MDAyNDg0NEREODFFCis6MTAzMjEwMDBBRjhDMDAyNDE1MjAwMDA3QTM4MDAwMkQyNDAyMDAyMDdECis6MTAzMjIwMDA1NTYyMDAwRjAwNjAyMDIxMzQwMkZGRkY1NTgyMDAwQzIwCis6MTAzMjMwMDAwMDYwMjAyMTI0MDIwMDIwMTU2MjAwMDUwMDAwMDAwMDJCCis6MTAzMjQwMDA4QzYzMDAxNDI0MDJGRkZGMTA2MjAwMDcwMDAwMDAwMERFCis6MTAzMjUwMDAwRTAwMDkyMTAwMDAwMDAwMEEwMDBDNjgwMDAwMDAwMEI4Cis6MTAzMjYwMDAwRTAwMDk4QzAxNjAyODIxMEUwMDBDMDAwMDAwMDAwMEY3Cis6MTAzMjcwMDA4RkJGMDAxMDI0MDIwQzgwMjdCRDAwMTgwM0UwMDAwODU3Cis6MTAzMjgwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTAyN0JERkZBMEIyCis6MTAzMjkwMDBBRkIxMDAzQzAwODIxMDIxMjQxMUZGODBBRkJFMDA1ODY2Cis6MTAzMkEwMDBBRkI3MDA1NEFGQjIwMDQwQUZCMDAwMzhBRkJGMDA1QzYyCis6MTAzMkIwMDBBRkI2MDA1MEFGQjUwMDRDQUZCNDAwNDhBRkIzMDA0NDU4Cis6MTAzMkMwMDAwMDUxMTAyNDhGNDgwMDI0OEY0OTAwMjg4RjQ3MDAyODgwCis6MTAzMkQwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTAwMDgwOTAyMUI0Cis6MTAzMkUwMDAyNDA2MDAwNjAwODIxMDIxMzA0MjAwN0YwMzQyMTgyMThDCis6MTAzMkYwMDAzQzAyMDAwQTAwNjI4MDIxM0MwMjAwMUYzNDQyRkY4MDMxCis6MTAzMzAwMDAwMEUyMzgyNDI3QTQwMDEwMjYwNTAwRjAwMTIyRjAyNDUyCis6MTAzMzEwMDAwMTAyQjgyNDBFMDAwNUI1QUZBNzAwMzA4RkEyMDAxODM3Cis6MTAzMzIwMDBBRTAyMDBDNDhGQTIwMDFDQUUwMjAwQzg4RkEyMDAyNDBGCis6MTAzMzMwMDBBRTAyMDBDQzkzQTQwMDEwOTIwMzAwRDEyNDAyRkY4MEJGCis6MTAzMzQwMDAwMDgyMTAyNDAwNDMxMDI1MzA0OTAwRkYzMDgzMDA3RkE1Cis6MTAzMzUwMDAzMTIyMDA3RjAwNjIxMDJBMTA0MDAwMDQwMDAzMTBDMEQ4Cis6MTAzMzYwMDAwMTMxMTAyNjMwNDkwMEZGMDAwMzEwQzAwMDAzMTk0MDRFCis6MTAzMzcwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREM5MjA0MDBEMjVBCis6MTAzMzgwMDAwMjQyMTAyMTAwNDMxMDIxMDA1MTEwMjRBRjQyMDAyOEI2Cis6MTAzMzkwMDA5M0EzMDAxMDMwNjMwMDdGMDAwMzEwQzAwMDAzMTk0MEE2Cis6MTAzM0EwMDAwMDYyMTgyMTNDMDIwODAwOEM0MjAwREMwMjQyMTAyMTFECis6MTAzM0IwMDAwMDQzMTAyMTMwNDIwMDdGMDM0MjE4MjEzQzAyMDAwQ0UwCis6MTAzM0MwMDAwMDYyNDAyMThGQTMwMDE0MjQwMkZGRkYxMDYyMDAzMDJFCis6MTAzM0QwMDAzMDk1MDBGRjkzQTIwMDExOTUwMzAwMTQzMDQ0MDBGRkM0Cis6MTAzM0UwMDAzMDYzRkZGRjAwNjQxODJCMTA2MDAwMEQwMDAwMDAwMDI4Cis6MTAzM0YwMDA5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMTgzMDg0RkZGRjEzCis6MTAzNDAwMDAwMDQ0MjAyMzAwMDQyMTAwMDAwMDEwMjEwMEU0MzgyMUEyCis6MTAzNDEwMDAwMEU0MjAyQjAwQzIzMDIxMEEwMDBDRTIwMEM0MzAyMTVECis6MTAzNDIwMDA5NTA0MDAxNDhEMDcwMDFDOEQwNjAwMTgzMDg0RkZGRkUyCis6MTAzNDMwMDAwMDgyMjAyMzAwMDQyMTAwMDAwMDEwMjEwMDgwMTgyMUI4Cis6MTAzNDQwMDAwMEMyMzAyMzAwRTQyMDJCMDBDNDMwMjMwMEUzMzgyM0UzCis6MTAzNDUwMDBBRDA3MDAxQ0FEMDYwMDE4OTNBMjAwMTFBNTAyMDAxNEQwCis6MTAzNDYwMDA5N0EyMDAxMkE1MDIwMDE2OEZBMjAwMTRBRDAyMDAxMDUwCis6MTAzNDcwMDA4RkEyMDAxNEFEMDIwMDBDOTNBMjAwMTFBNTAyMDAyMDNGCis6MTAzNDgwMDA5N0EyMDAxMkE1MDIwMDIyOEZBMjAwMTRBRDAyMDAyNDEwCis6MTAzNDkwMDAyNDA2RkY4MDAyNDYxMDI0MzI1NjAwN0ZBRjQyMDAyNEVCCis6MTAzNEEwMDAwMzU2MTgyMTNDMDIwMDBBMDA2MjgwMjE4RTAyMDA0QzYzCis6MTAzNEIwMDA4RkEyMDAyMDMxMjQwMDdGMDAwNDI4QzBBRTAyMDA1MEZCCis6MTAzNEMwMDA4RkEyMDAyMDAwMDQyMTQwMDA4NTI4MjFBRTAyMDA3MDU4Cis6MTAzNEQwMDA5M0EyMDAxMDAxMjA4ODIxQTIwMjAwODM5M0EyMDAxMDcxCis6MTAzNEUwMDBBMjAyMDA3OTkyMDIwMDg1MzA0MjAwM0ZBMjAyMDA4NUNDCis6MTAzNEYwMDAzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjEwMDQ1MTAyMUYxCis6MTAzNTAwMDAwMDQ2MTAyNEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNDJDCis6MTAzNTEwMDAzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjEwMDQ0MTAyMUFGCis6MTAzNTIwMDAwMDQ2MTAyNEFGNDIwMDI4M0MwMjA4MDA4QzQyMDBFNDEwCis6MTAzNTMwMDAwMjQzMTgyMTAwNjUxODIxMDI0MjEwMjEwMDQ0MTAyMTg1Cis6MTAzNTQwMDAzMDQyMDA3RjMwNjMwMDdGOTNBNTAwMTAwMzQyMjAyMUFBCis6MTAzNTUwMDAwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjEzQzAyMDAwQzkzCis6MTAzNTYwMDAxMEIxMDA4QzAwODI0ODIxMzIzMzAwN0YxNjYwMDAxOUIwCis6MTAzNTcwMDAyNDA0RkY4MDNDMDIwODAwOEM0MjAwREMwMjQyMTAyMTNGCis6MTAzNTgwMDAwMDQ0MTAyNEFGNDIwMDJDM0MwMjA4MDA4QzQyMDBFNEFFCis6MTAzNTkwMDAzQzAzMDgwMDhDNjMwMERDMDI0MjEwMjEwMDQ0MTAyNDJDCis6MTAzNUEwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQwMjQzMTgyMThDCis6MTAzNUIwMDAzMDYzMDA3RjAyNDIxMDIxMzA0MjAwN0YwMzQyMjAyMTBECis6MTAzNUMwMDAwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjEzQzAyMDAwQzIzCis6MTAzNUQwMDAwMDgyNDgyMTkxMjQwMDBEMjQxNEZGODAwMDAwMTAyMTU2Cis6MTAzNUUwMDAwMDk0MjAyNUExMjQwMDBEOTUwNDAwMDI5NTA1MDAxNEU3Cis6MTAzNUYwMDA4RDA3MDAxQzMwODRGRkZGMzBBNUZGRkY4RDA2MDAxOEVCCis6MTAzNjAwMDAwMDg1MjAyMzAwMDQyMTAwMDBFNDM4MjEwMEMyMzAyMTdECis6MTAzNjEwMDAwMEU0MjAyQjAwQzQzMDIxQUQwNzAwMUNBRDA2MDAxOENCCis6MTAzNjIwMDA5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTY4RDAyMDAwOEY0Cis6MTAzNjMwMDBBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMEM5NTAyMDAwMkUwCis6MTAzNjQwMDBBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDhBRDAyMDAyNDgyCis6MTAzNjUwMDA5MTIyMDAwRDMwNDIwMDQwMTA0MDAwNDIyNjIyMDAwMTFECis6MTAzNjYwMDAzQzAyMDgwMDhDNDIwMEUwQTNCMzAwMjgzQzEwMDAwQTkyCis6MTAzNjcwMDAwMjQyMTAyMTAwNTQxMDI0QUY0MjAwMjQzQzAyMDgwMEYyCis6MTAzNjgwMDA4QzQyMDBFMEEzODAwMDJDMjdBNDAwMkMwMjQyMTAyMUQxCis6MTAzNjkwMDAzMDQyMDA3RjAzNDIxODIxMDA3MDE4MjE4QzYyMDBEODRDCis6MTAzNkEwMDA4RDI2MDAwNDI3QTUwMDI4QUZBOTAwMkMwMDQ2MTAyMTc0Cis6MTAzNkIwMDBBQzYyMDBEODBFMDAwQTc5QUY4MzAwMjg5M0EzMDAyOERCCis6MTAzNkMwMDA4RjgyMDAyODBFMDAwNkJFQTA0MzAwRDEwRTAwMEMwMDIxCis6MTAzNkQwMDAwMDAwMDAwMDAyNTQxMDI0QUY0MjAwMjQzQzAyMDgwMDA1Cis6MTAzNkUwMDA4QzQyMDBEQzAwMTMyOTQwMDAxMzIwQzAwMEE0MjAyMURDCis6MTAzNkYwMDAwMjQyMTAyMTAwNDQxMDIxMDA1NDEwMjRBRjQyMDAyQzNCCis6MTAzNzAwMDAzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA4QzYzMDBEQ0FGCis6MTAzNzEwMDAwMzU2MzAyMTAyNDIxMDIxMDA0NTEwMjEwMDU0MTAyNDhDCis6MTAzNzIwMDBBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQwMjQzMTgyMTBBCis6MTAzNzMwMDAwMDY0MTgyMTAyNDIxMDIxMDA0NTEwMjEzMDQyMDA3RjEwCis6MTAzNzQwMDAzMDYzMDA3RjAzNDIyMDIxMDM0MzE4MjEzQzAyMDAwRTE2Cis6MTAzNzUwMDAwMDYyNDAyMTNDMDIwMDBDMDBEMDgwMjEwMDgyNDgyMTAwCis6MTAzNzYwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3NTAwMDUzMDQ0MDBGRjFECis6MTAzNzcwMDAyNDAzRkY4MDAyMjMxMDI0MDA0MzEwMjYzMDQ0MDBGRjVFCis6MTAzNzgwMDA5M0EyMDAxMDAwODA4ODIxMjUwODAwMjgxNDQ0RkY3NkE5Cis6MTAzNzkwMDAyNTI5MDAyMDkzQTQwMDEwOEZBMzAwMTQyNDAyRkZGRjBBCis6MTAzN0EwMDAxMDYyMDAwQTMwODkwMEZGMjQ4MjAwMDEyNDgzMDAwMTk2Cis6MTAzN0IwMDAzMDQyMDA3RjE0NTUwMDA1MzA2OTAwRkYyNDAzRkY4MDZDCis6MTAzN0MwMDAwMDgzMTAyNDAwNDMxMDI2MzA0OTAwRkY5MjAyMDA3ODQ1Cis6MTAzN0QwMDAzMDUzMDBGRjExMzMwMDMyMDEyMDg4MjEzQzAyMDgwMEUxCis6MTAzN0UwMDA4QzQyMDBEQzMyMjUwMDdGMDAwNTIwQzAwMDA1Mjk0MDA2Cis6MTAzN0YwMDAwMEE0MjAyMTAyNDIxMDIxMjQwNkZGODAwMDQ0MTAyMTUxCis6MTAzODAwMDAwMDQ2MTAyNEFGNDIwMDJDM0MwMzA4MDA4QzYzMDBEQzBGCis6MTAzODEwMDAzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjEwMjQyMTAyMUJECis6MTAzODIwMDAwMDQ1MTAyMTAwNjQxODIxMDA0NjEwMjQzMDYzMDA3RkY5Cis6MTAzODMwMDBBRjQyMDAyODAzNDMxODIxM0MwMjAwMEUwMDYyNDAyMUUxCis6MTAzODQwMDAzQzAyMDgwMDhDNDIwMEU0OEQwNjAwMEMwMTAwMjAyMTlGCis6MTAzODUwMDAwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0YwMzQyMTgyMTBFCis6MTAzODYwMDAzQzAyMDAwQzAwNjI0ODIxMTBDMDAwMEQwMTIwMjgyMUZDCis6MTAzODcwMDAwRTAwMDZFMjAwMDAwMDAwMjQwMkZGODAwMjIyMTgyNDRECis6MTAzODgwMDAyNjI0MDAwMTAwNjIyODI2MzA4MjAwN0YxNDU1MDAwMkExCis6MTAzODkwMDAzMDgzMDBGRjMwQTMwMEZGMTQ3M0ZGRDAwMDYwODgyMTQ1Cis6MTAzOEEwMDA4RTAzMDA3NDNDMDI3RkZGMzQ0MkZGRkYwMDYyMTgyNDQ1Cis6MTAzOEIwMDBBRTAzMDA3NDBFMDAwNzAzMDI0MDIwMjFBRjU3MDAyNDFFCis6MTAzOEMwMDA4RkEyMDAzMEFGNUUwMDI4OEZCRjAwNUM4RkJFMDA1ODEzCis6MTAzOEQwMDA4RkI3MDA1NDhGQjYwMDUwOEZCNTAwNEM4RkI0MDA0ODlFCis6MTAzOEUwMDA4RkIzMDA0NDhGQjIwMDQwOEZCMTAwM0M4RkIwMDAzOERFCis6MTAzOEYwMDAyN0JEMDA2MDAzRTAwMDA4QUY0MjAwMkMyN0JERkZEOEMxCis6MTAzOTAwMDBBRkIxMDAxQ0FGQkYwMDIwQUZCMDAwMTgyNzUxMDE4ODM1Cis6MTAzOTEwMDA5MjIyMDAwMzI0MDhGRjgwM0MwMzAwMEEzMDQ3MDA3RjA2Cis6MTAzOTIwMDBBM0E3MDAxMDhGNDYwMTgwM0MwMjA4MDA4QzQyMDBFMEYzCis6MTAzOTMwMDBBRjg2MDAzNDAwQzIyODIxMDBBODEwMjRBRjQyMDAyNDIyCis6MTAzOTQwMDA5MjI0MDAwMDMwQTIwMDdGMDM0MjEwMjEwMDQzMTAyMTg2Cis6MTAzOTUwMDBBRjgyMDAyODMwODQwMDdGMjQwMjAwMDIxNDgyMDAyNUY4Cis6MTAzOTYwMDAwMDA3MTk0MDNDMDIwODAwOEM0MjAwRTQwMEMyMTAyMTBDCis6MTAzOTcwMDAwMDQzMjgyMTMwQTIwMDdGMDM0MjE4MjEwMEE4MTAyNDEwCis6MTAzOTgwMDBBRjQyMDAyODNDMDIwMDBDMDA2MjE4MjE5MDYyMDAwRDNBCis6MTAzOTkwMDBBRkEzMDAxNDAwNDgxMDI1QTA2MjAwMEQ4RkEzMDAxNEVGCis6MTAzOUEwMDA5MDYyMDAwRDMwNDIwMDQwNTA0MDAwNkE4RkJGMDAyMEZFCis6MTAzOUIwMDA4Rjg2MDAyOEEzODAwMDJDMjdBNDAwMTQ4Q0MyMDBEODc2Cis6MTAzOUMwMDA4QzYzMDAwNDI3QTUwMDEwMDA0MzEwMjEwRTAwMEE3OTIzCis6MTAzOUQwMDBBQ0MyMDBEODkzQTMwMDEwOEY4MjAwMjgwRTAwMDZCRTUwCis6MTAzOUUwMDBBMDQzMDBEMTBFMDAwQzAwMDAwMDAwMDAwQTAwMEVBMzRFCis6MTAzOUYwMDA4RkJGMDAyMDBFMDAwNkM3MDBDMDIwMjEwRTAwMDZENTk0Cis6MTAzQTAwMDAwMDAwMDAwMDNDMDIwMDA4MDM0MjgwMjE5MjIzMDAwMUQ0Cis6MTAzQTEwMDA5MjAyMDA3QjE0NDMwMDRGOEZCRjAwMjA5MjIyMDAwMENGCis6MTAzQTIwMDAzMDQ0MDA3RjI0MDIwMDA0MTA4MjAwMTcyODgyMDAwNTIxCis6MTAzQTMwMDAxMDQwMDAwNjI0MDIwMDA1MjQwMjAwMDMxMDgyMDAwNzQzCis6MTAzQTQwMDA4RkIxMDAxQzBBMDAwRUE0MDAwMDAwMDAxMDgyMDAxMkJBCis6MTAzQTUwMDA4RkJGMDAyMDBBMDAwRUE0OEZCMTAwMUM5MjA1MDA4M0M2Cis6MTAzQTYwMDA5MjA2MDA3ODhFMDcwMDc0OEY4NDAwMzQzMEE1MDBGRjIyCis6MTAzQTcwMDAwMDA3M0UwMjMwQzYwMEZGMEUwMDA3MEIzMEU3MDA3RjU0Cis6MTAzQTgwMDAwQTAwMEVBMzhGQkYwMDIwMEUwMDBDNkY4Rjg0MDAzNDNECis6MTAzQTkwMDAwQTAwMEVBMzhGQkYwMDIwMjQwMjBDODBBRjQyMDAyNDM2Cis6MTAzQUEwMDA5MjAyMDAzRTMwNDIwMDQwMTA0MDAwMjAwMDAwMDAwMDIyCis6MTAzQUIwMDA5MjAyMDAzRTAwMDIxNjAwMDAwMjE2MDMwNDQxMDAwNkI2Cis6MTAzQUMwMDAwMDAwMDAwMDhGODQwMDM0MEUwMDA2MzgyNDA1MDA5M0E3Cis6MTAzQUQwMDAwQTAwMEVBMzhGQkYwMDIwOTIwMjAwM0YyNDAzMDAxOEFCCis6MTAzQUUwMDAzMDQyMDBGRjE0NDMwMDBDOEY4NDAwMzQyNDA1MDAzOTU5Cis6MTAzQUYwMDAwRTAwMDVEMDAwMDAzMDIxMEUwMDAzMDI4Rjg0MDAzNDM4Cis6MTAzQjAwMDAyNDAyMDAxMkEyMDIwMDNGMEUwMDAzMEI4Rjg0MDAzNDM3Cis6MTAzQjEwMDAwQTAwMEVBMzhGQkYwMDIwMjQwNTAwMzYwRTAwMDVEMDNBCis6MTAzQjIwMDAwMDAwMzAyMTBBMDAwRUEzOEZCRjAwMjAwRTAwMDMwMjA4Cis6MTAzQjMwMDA4Rjg0MDAzNDkyMDIwMDA1MzQ0MjAwMjBBMjAyMDAwNTY2Cis6MTAzQjQwMDAwRTAwMDMwQjhGODQwMDM0MEUwMDEwNTg4Rjg0MDAzNDU1Cis6MTAzQjUwMDA4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMTgyNDAyMEM4MDkyCis6MTAzQjYwMDAyN0JEMDAyODAzRTAwMDA4QUY0MjAwMjQyN0JERkZFODdFCis6MTAzQjcwMDBBRkIwMDAxMEFGQkYwMDE0Mjc0MzAxMDA5NDYyMDAwOEVCCis6MTAzQjgwMDAwMDAyMTQwMDAwMDIxNDAzMDQ0MTAwMDIwMDAwODAyMTFFCis6MTAzQjkwMDAyNDEwMDAwMTk0NjIwMDA4MzA0MjAwODAxMDQwMDAxQTk2Cis6MTAzQkEwMDAwMjAwMTAyMTk0NjIwMDA4MzA0MjIwMDAxMDQwMDAxNkVDCis6MTAzQkIwMDAwMjAwMTAyMThDNjMwMDE4M0MwMjFDMkQzNDQyMTlFREM4Cis6MTAzQkMwMDAyNDA2MDAwNjEwNjIwMDBGM0MwNzYwMjEzQzAyMDgwMDNBCis6MTAzQkQwMDA4QzQyMDBENDEwNDAwMDA3OEY4MjAwMjg4RjgzMDAyODc5Cis6MTAzQkUwMDA5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MkU2Cis6MTAzQkYwMDA4RjgyMDAyODhGODQwMDM0OTQ0NTAwRDQwRTAwMEI4OUY2Cis6MTAzQzAwMDAzMEE1RkZGRjAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMEZECis6MTAzQzEwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTBBRkIxMDAxNDg2Cis6MTAzQzIwMDBBRkIwMDAxMEEzODAwMDJDQUZCRjAwMTg4RjQ1MDEwMDdCCis6MTAzQzMwMDAzQzAzMDgwMDhDNjMwMEUwMjQwMkZGODBBRjg1MDAzNDYxCis6MTAzQzQwMDAwMEEzMTgyMTMwNjQwMDdGMDM0NDIwMjEwMDYyMTgyNDVGCis6MTAzQzUwMDAzQzAyMDAwQTAwODIyMDIxQUY0MzAwMjQyNzUwMDEwMENCCis6MTAzQzYwMDA4RTAyMDAxNDhDODMwMERDQUY4NDAwMjgwMDQzMTAyM0Y0Cis6MTAzQzcwMDAxODQwMDAwNDAwMDA4ODIxOEUwMjAwMTQwRTAwMEIxQzY2Cis6MTAzQzgwMDBBQzgyMDBEQzkyMDIwMDBCMjQwMzAwMDIzMDQyMDBGRkYxCis6MTAzQzkwMDAxNDQzMDAyRjAwMDAwMDAwOTYwMjAwMDgzMDQzMDBGRjhDCis6MTAzQ0EwMDAyNDAyMDA4MjE0NjIwMDA1MjQwMjAwODQwRTAwMDlENjVBCis6MTAzQ0IwMDAwMDAwMDAwMDBBMDAwRjJGMDAwMDAwMDAxNDYyMDAwOTNECis6MTAzQ0MwMDAyNDAyMDA4MThGODIwMDI4OEY4NDAwMzQzQzA3NjAyMTA5Cis6MTAzQ0QwMDA5NDQ1MDBENDkyMDYwMDA1MzBBNUZGRkYwQTAwMEYxRTkwCis6MTAzQ0UwMDAzMEM2MDBGRjE0NjIwMDI3MDAwMDAwMDA5MjAyMDAwQUE0Cis6MTAzQ0YwMDAzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDQzMDYyMDA0MDdBCis6MTAzRDAwMDA4Rjg0MDAzNDBBMDAwRjFBMjQwNjAwNDAxMDQwMDAwNDdCCis6MTAzRDEwMDAwMDAzMTYwMDhGODQwMDM0MEEwMDBGMUEyNDA2MDA0MUE1Cis6MTAzRDIwMDAwMDAyMTYwMzA0NDEwMDE3OEY4NDAwMzQyNDA2MDA0MjY5Cis6MTAzRDMwMDA4RjgyMDAyODNDMDc2MDE5OTQ0NTAwRDQzMEE1RkZGRjBFCis6MTAzRDQwMDAwRTAwMEI4OTAwMDAwMDAwMEEwMDBGMkYwMDAwMDAwMDg5Cis6MTAzRDUwMDA5MjAyMDAwQjI0MDMwMDE2MzA0MjAwRkYxMDQzMDAwNkJECis6MTAzRDYwMDAwMDAwMDAwMDkyMDIwMDBCMjQwMzAwMTczMDQyMDBGRjA1Cis6MTAzRDcwMDAxNDQzMDAwNDAwMDAwMDAwMEUwMDBFQTkwMDAwMDAwMDIzCis6MTAzRDgwMDAwMDQwODgyMTBFMDAwQzAwMDAwMDAwMDA5MjAyMDAwQTkyCis6MTAzRDkwMDAzMDQyMDAwODEwNDAwMDA2MjQwMjBDODA4Rjg1MDAyODY1Cis6MTAzREEwMDAzQzA0MDAwODBFMDAxMjg2MDM0NDIwMjEyNDAyMEM4MEVCCis6MTAzREIwMDBBRjQyMDAyNDhGQkYwMDE4MDIyMDEwMjE4RkIwMDAxMEU2Cis6MTAzREMwMDA4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFOEU1Cis6MTAzREQwMDBBRkJGMDAxNEFGQjAwMDEwOEY1MDAwMjQzQzAzMDgwMEE4Cis6MTAzREUwMDA4QzYzMDBFMDhGNDUwMTAwMjQwMkZGODAwMEEzMTgyMUFFCis6MTAzREYwMDAzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjQzQzAyMDAwQTQyCis6MTAzRTAwMDAwMDgyMjAyMUFGODUwMDM0QUY0MzAwMjQ5MDgyMDA2MkZECis6MTAzRTEwMDBBRjg0MDAyODMwNDIwMDBGMzQ0MjAwNTBBMDgyMDA2MjdDCis6MTAzRTIwMDAzQzAyMDAxRjM0NDJGRjgwMEUwMDA2QkUwMjAyODAyNEM2Cis6MTAzRTMwMDBBRjUwMDAyNDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEMzCis6MTAzRTQwMDAyN0JEMDAxODNDMDIwODAwOEM0MjAwMjAxMDQwMDAxREQ1Cis6MTAzRTUwMDAyNzQ1MDEwMDkwQTMwMDA5M0MwMjAwMDgwMzQyMjAyMUVECis6MTAzRTYwMDAyNDAyMDAxODU0NjIwMDAzM0MwMjAwMDgwQTAwMEY3MDhDCis6MTAzRTcwMDAyNDAyMDAwODAzNDIyMDIxMjQwMjAwMTYxNDYyMDAwNUQ3Cis6MTAzRTgwMDAyNDAyMDAxNzI0MDIwMDEyQTA4MjAwM0YwQTAwMEY3QUM5Cis6MTAzRTkwMDA5NEE3MDAwODU0NjIwMDA2OTRBNzAwMDg5MzYyMDAwNUU2Cis6MTAzRUEwMDAyNDAzRkZGRTAwNDMxMDI0QTM2MjAwMDU5NEE3MDAwODJBCis6MTAzRUIwMDA5MEE2MDAxQjhDQTQwMDAwOTRBNTAwMDYwQTAwMEI2NEM5Cis6MTAzRUMwMDAwMDA3M0MwMDAzRTAwMDA4MDAwMDAwMDAyNzQ0MDEwMDU4Cis6MTAzRUQwMDA5NDgyMDAwODMwNDUwMEZGMzhBMzAwODIzOEEyMDA4NDk1Cis6MTAzRUUwMDAyQzYzMDAwMTJDNDIwMDAxMDA2MjE4MjUxMDYwMDAwNkJFCis6MTAzRUYwMDAyNDAyMDA4MzkzODIwMDJEMTA0MDAwMEQwMDAwMDAwMDdBCis6MTAzRjAwMDAwQTAwMEMzMzAwMDAwMDAwMTRBMjAwMDUyNEEyRkY4MDY4Cis6MTAzRjEwMDA4RjQzMDEwNDNDMDI2MDIwMDNFMDAwMDhBQzQzMDAxNDFFCis6MTAzRjIwMDAzMDQyMDBGRjJDNDIwMDAyMTA0MDAwMDMyNDAyMDAyMjE1Cis6MTAzRjMwMDAwQTAwMEVENDAwMDAwMDAwMTRBMjAwMDMwMDAwMDAwMERDCis6MTAzRjQwMDAwQTAwMEY0MTAwMDAwMDAwMEEwMDBGNUYwMDAwMDAwMDlGCis6MTAzRjUwMDA5MzYzMDA3RTkzNjIwMDdBMTQ0MzAwMDkwMDAwMjAyMURECis6MTAzRjYwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDE5Cis6MTAzRjcwMDAyNDA0MDAwMTkzNjIwMDdFMjQ0MjAwMDFBMzYyMDA3RUJCCis6MTAzRjgwMDAwM0UwMDAwODAwODAxMDIxOEY0MjAxRjgwNDQwRkZGRThBCis6MTAzRjkwMDAyNDAyMDAwMkFGNDQwMUMwQTM0MjAxQzQzQzAyMTAwMDRECis6MTAzRkEwMDAwM0UwMDAwOEFGNDIwMUY4MjdCREZGRThBRkJGMDAxMEYzCis6MTAzRkIwMDA5MzYyMDAzRjI0MDMwMDBBMzA0MjAwRkYxNDQzMDA0NjhFCis6MTAzRkMwMDAwMDAwMDAwMDhGNjMwMDU0OEY2MjAwNEMxMDYyMDA3RDdGCis6MTAzRkQwMDAwMzYwMzAyMTkzNjIwMDAwMjQwMzAwNTAzMDQyMDBGRjUwCis6MTAzRkUwMDAxNDQzMDAyRjAwMDAwMDAwOEY0NDAxNDAzQzAyMDgwMEYxCis6MTAzRkYwMDA4QzQyMDBFMDI0MDNGRjgwMDA4MjEwMjEwMDQzMTAyNDQzCis6MTA0MDAwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA4RjY1MDA1NDVGCis6MTA0MDEwMDAzQzAzMDAwQTAwODIyMDIxMzA4NDAwN0YwMzQ0MTAyMUU5Cis6MTA0MDIwMDAwMDQzMTAyMUFDNDUwMTA4OTc2MjAwM0M4RjYzMDA0Q0FGCis6MTA0MDMwMDAzMDQyRkZGRjAwMDIxMDQwMDA2MjE4MjFBRjYzMDA1Q0I1Cis6MTA0MDQwMDA4RjYzMDA1NDhGNjQwMDRDOTc2MjAwM0MwMDY0MTgyMzE3Cis6MTA0MDUwMDAzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDAwMDQzMTAyQUMzCis6MTA0MDYwMDAxMDQwMDAwNjAwMDAwMDAwOEY2MjAwNTQ4RjYzMDA0Qzc3Cis6MTA0MDcwMDAwMDQzMTAyMzBBMDAwRkYwMDAwMjEwNDM5NzYyMDAzQzM3Cis6MTA0MDgwMDAzMDQyRkZGRjAwMDIxMDQwQUNDMjAwNjQyNDAyMDAwMTc1Cis6MTA0MDkwMDBBMEMwMDA3Q0EwQzIwMDg0MjQwMjBDODBBRjQyMDAyNDk3Cis6MTA0MEEwMDAwRTAwMEZBMjhGNDQwMTQwMTA0MDAwNDc4RkJGMDAxMDQ4Cis6MTA0MEIwMDA4RjQzMDE0MDhGNDIwMUY4MDQ0MEZGRkUyNDAyMDAwMkJBCis6MTA0MEMwMDBBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDBBRjQyMDFGODVCCis6MTA0MEQwMDAwQTAwMTA0MDhGQkYwMDEwOTM2MjAwM0YyNDAzMDAxMEJECis6MTA0MEUwMDAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDA4RjQ0MDE0MEYwCis6MTA0MEYwMDAwQTAwMTAyQzAwMDAyODIxOTM2MjAwM0YyNDAzMDAxNkMwCis6MTA0MTAwMDAzMDQyMDBGRjE0NDMwMDA0MjQwMjAwMTRBMzYyMDAzRjY1Cis6MTA0MTEwMDAwQTAwMTAzQTAwMDAwMDAwOEY2MjAwNEM4RjYzMDA1MENDCis6MTA0MTIwMDAwMDQzMTAyMzA0NDEwMDI4OEZCRjAwMTA5MzYyMDA4MUQ4Cis6MTA0MTMwMDAyNDQyMDAwMUEzNjIwMDgxOTM2MjAwODEyQzQyMDAwNEFBCis6MTA0MTQwMDAxNDQwMDAxMDAwMDAwMDAwOTM2MjAwM0YyNDAzMDAwNEFDCis6MTA0MTUwMDAzMDQyMDBGRjE0NDMwMDA2MDAwMDAwMDA4RjQ0MDE0MDdECis6MTA0MTYwMDA4RkJGMDAxMDI0MDUwMDkzMEEwMDA2MzgyN0JEMDAxOEYxCis6MTA0MTcwMDA4RjQ0MDE0MDI0MDUwMDkzOEZCRjAwMTAwQTAwMDZBNzVBCis6MTA0MTgwMDAyN0JEMDAxODhGNDQwMTQwMEUwMDAzMDIwMDAwMDAwMDBDCis6MTA0MTkwMDA4RjYyMDA1NDI0NDJGRkZGQUY2MjAwNTQ4RjYyMDA1MEQwCis6MTA0MUEwMDAyNDQyRkZGRkFGNjIwMDUwMEUwMDAzMEI4RjQ0MDE0MDFBCis6MTA0MUIwMDA4RjQ0MDE0MDhGQkYwMDEwMjQwNTAwMDQwQTAwMDMxMDQzCis6MTA0MUMwMDAyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEFFCis6MTA0MUQwMDA4RjQyMDE4ODkzNjMwMDdFMDAwMjE0MDIzMDQ0MDBGRjg2Cis6MTA0MUUwMDAzMDYzMDBGRjE0NjQwMDBEMDAwMDAwMDA5MzYyMDA4MDQzCis6MTA0MUYwMDAzMDQyMDBGRjEwNDQwMDA5MDAwMDAwMDBBMzY0MDA4MDZBCis6MTA0MjAwMDA5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDc2Cis6MTA0MjEwMDAwMDAwMDAwMDBBMDAwNzZGOEY0NDAxODBBMzY0MDA4MDQzCis6MTA0MjIwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThBRkIwMDAxMDY5Cis6MTA0MjMwMDBBRkJGMDAxNDkzNjIwMDA1MjQwMzAwMzAzMDQyMDAzMDA5Cis6MTA0MjQwMDAxNDQzMDA4OTAwODA4MDIxM0MwMjA4MDA4QzQyMDAyMDM5Cis6MTA0MjUwMDAxMDQwMDA4MDAyMDAyMDIxMEUwMDA1MkIwMDAwMDAwMDBECis6MTA0MjYwMDA4Rjg1MDAyMEFDQjAwMDAwOTM2MjAwM0U5MzYzMDAzRjU2Cis6MTA0MjcwMDAzMDQyMDBGRjAwMDIxMjAwMzA2MzAwRkYwMDQzMTAyNUFGCis6MTA0MjgwMDBBQ0EyMDAwNDkzNjIwMDgyMDAwMjE2MDAwMDAyMTYwMzMyCis6MTA0MjkwMDAwNDQxMDAwNTAwMDAwMDAwM0MwMzA4MDA4QzYzMDA0ODU2Cis6MTA0MkEwMDAwQTAwMTA3RTAwMDAwMDAwOTM2MjAwM0UzMDQyMDA0MDkxCis6MTA0MkIwMDAxNDQwMDAwMzAwMDAxODIxOTM2MjAwODEzMDQzMDBGRjg2Cis6MTA0MkMwMDA5MzYyMDA4MjAwMDMxRTAwMzA0MjAwRkYwMDAyMTQwMENGCis6MTA0MkQwMDAwMDYyMTgyNUFDQTMwMDA4OEY2MjAwNDBBQ0EyMDAwQzVECis6MTA0MkUwMDA4RjYyMDA0OEFDQTIwMDEwOEY2MjAwNENBQ0EyMDAxNDk4Cis6MTA0MkYwMDA4RjYyMDA1MDhGNjMwMDRDMDA0MzEwMjMwNDQxMDAwMzgxCis6MTA0MzAwMDAwMDAwMDAwMDBBMDAxMDkyOEY2MjAwNEM4RjYyMDA1MDgzCis6MTA0MzEwMDBBQ0EyMDAxODNDMDIwODAwOTQ0MjREQkUzQzAzQzAwQjA2Cis6MTA0MzIwMDAwMDAwMjAyMTAwNDMxMDI1MEUwMDA1NTBBQ0EyMDAxQzA3Cis6MTA0MzMwMDA4RjYyMDA1NDhGODQwMDIwQUM4MjAwMDA4RjYyMDA1ODhFCis6MTA0MzQwMDBBQzgyMDAwNDhGNjIwMDVDQUM4MjAwMDg4RjYyMDA2MDY3Cis6MTA0MzUwMDA4RjQzMDA3NDAwNDMxMDIxQUM4MjAwMEM4RjYyMDA2NDE0Cis6MTA0MzYwMDBBQzgyMDAxMDk3NjMwMDY4OTc2MjAwNkEwMDAzMUMwMDJCCis6MTA0MzcwMDAzMDQyRkZGRjAwNjIxODI1QUM4MzAwMTQ5MzYyMDA4Mjc0Cis6MTA0MzgwMDAyNDAzMDA4MDMwNDIwMEZGMTQ0MzAwMDMwMDAwMDAwMEJCCis6MTA0MzkwMDAwQTAwMTBDNkFDODAwMDE4OEY2MzAwMEMyNDAyMDAwMUQ0Cis6MTA0M0EwMDAxMDYyMDAwRTI0MDJGRkZGOTM2MjAwM0UzMDQyMDA0MDg0Cis6MTA0M0IwMDAxNDQwMDAwQTI0MDJGRkZGOEY2MzAwMEM4RjQyMDA3NDM4Cis6MTA0M0MwMDAwMDYyMTgyMzNDMDIwODAwMDA2MjEwMjQxNDQwMDAwMjFFCis6MTA0M0QwMDAwMDAwMjgyMTAwNjAyODIxMDAwNTEwNDNBQzgyMDAxODRECis6MTA0M0UwMDAzQzAyMDgwMDk0NDI0REJFM0MwM0MwMEMwMDAwMjAyMTVBCis6MTA0M0YwMDAwMDQzMTAyNThGODMwMDIwMEUwMDA1NTBBQzYyMDAxQzg2Cis6MTA0NDAwMDA4RjYyMDAxODhGODMwMDIwM0MwNTA4MDA5NEE1NERCRUU0Cis6MTA0NDEwMDAyNDA0MDAwMUFDNjIwMDAwQUM2MDAwMDQ4RjY2MDA2Q0Y0Cis6MTA0NDIwMDAzQzAyNDAwRDAwQTIyODI1QUM2NjAwMDg4RjYyMDBEQzJCCis6MTA0NDMwMDBBQzYyMDAwQ0FDNjAwMDEwOTM2MjAwMDUwMDAyMTYwMDM0Cis6MTA0NDQwMDBBQzYyMDAxNEFDNjAwMDE4MEUwMDA1NTBBQzY1MDAxQzk2Cis6MTA0NDUwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTBBMzYwMDAwNTYwCis6MTA0NDYwMDAwQTAwMDRCOTI3QkQwMDE4OEZCRjAwMTQ4RkIwMDAxMEQ4Cis6MTA0NDcwMDAwM0UwMDAwODI3QkQwMDE4OTc0MjAwN0MzMEM2MDBGRjBCCis6MTA0NDgwMDBBMDg2MDA4NDMwNDdGRkZGMjQwMjAwMDUxNEMyMDAwQjAxCis6MTA0NDkwMDAyNEUzNDY1MDkwQTIwMTEyMkM0MjAwMDcxMDQwMDAwNzZFCis6MTA0NEEwMDAyNEUzMEEwMDkwQTMwMTEyMjQwMjAwMTQwMDYyMTAwNDA1Cis6MTA0NEIwMDAwMEUyMTAyMTBBMDAxMEZFMzA0N0ZGRkYzMDY3RkZGRkM3Cis6MTA0NEMwMDAwM0UwMDAwOEE0ODcwMDE0QUM4NzAwNEM4Q0EyMDEwODBDCis6MTA0NEQwMDAwMDgwNDAyMTAwQTA0ODIxMDBFMjEwMjMzMEM2MDBGRkU4Cis6MTA0NEUwMDAxODQwMDAwMzkzQUEwMDEzMjRFMkZGRkNBQ0EyMDEwOEM5Cis6MTA0NEYwMDAzMEMyMDAwMTEwNDAwMDA4MDAwMDAwMDA4RDAyMDA1MDkyCis6MTA0NTAwMDAwMEUyMTAyMzA0NDEwMDEzMjQwNjAwMDU4RDAyMDA1NDJDCis6MTA0NTEwMDAxMEUyMDAxMDAwMDAwMDAwOEQwMjAwNTQxNEUyMDAxQUE2Cis6MTA0NTIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDBECis6MTA0NTMwMDAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4M0Q4Cis6MTA0NTQwMDAxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjEwMTIwMjgyMTNCCis6MTA0NTUwMDAyNDA2MDAwNDBBMDAxMEVDMDAwMDAwMDBBMTAwMDA4NDAyCis6MTA0NTYwMDAxMTQwMDAwOUE1MDIwMDE0OEY0MzAxMDA4RjQyMDFGODk5Cis6MTA0NTcwMDAwNDQwRkZGRTI0MDIwMDAyQUY0MzAxQzBBMzQyMDFDNDc1Cis6MTA0NTgwMDAzQzAyMTAwMEFGNDIwMUY4MDNFMDAwMDgwMDAwMDAwMDA4Cis6MTA0NTkwMDAyN0JERkZFODhGQTkwMDI4QUZCRjAwMTAwMDgwNDAyMTkxCis6MTA0NUEwMDAwMEU5MTgyMzE4NjAwMDczMzBDNjAwRkZBMDgwMDA3QzZCCis6MTA0NUIwMDBBMDgwMDA4MThDQTIwMTA4MDBFMjEwMjMwNDQwMDA0RDdECis6MTA0NUMwMDAwMDAwMDAwMDhDODIwMDUwOTQ4MzAwM0M4Qzg0MDA2NEM2Cis6MTA0NUQwMDAwMDQ3NDgyMzMwNjNGRkZGMDEyMzE4MjEwMDgzMjAyQjZECis6MTA0NUUwMDAxMDgwMDAwNDAwMDAwMDAwOEQwMjAwNjQwQTAwMTE0RkRBCis6MTA0NUYwMDAwMEUyMTAyMTk1MDIwMDNDMzA0MkZGRkYwMTIyMTAyMTExCis6MTA0NjAwMDAwMEUyMTAyMUFEMDIwMDVDOTUwMjAwM0M4RDAzMDA1Q0NECis6MTA0NjEwMDAzMDQyRkZGRjAwMDIxMDQwMDBFMjEwMjEwMDQzMTAyQjQ3Cis6MTA0NjIwMDAxMDQwMDAwMzAwMDAwMDAwMEEwMDExNUU4RDAyMDA1Q0QzCis6MTA0NjMwMDA5NTAyMDAzQzMwNDJGRkZGMDAwMjEwNDAwMEUyMTAyMUQyCis6MTA0NjQwMDBBRDAyMDA1Q0ExMDAwMDg0QUQwNzAwNEM4Q0EyMDEwODAzCis6MTA0NjUwMDAwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNBQ0EyMDEwODkzCis6MTA0NjYwMDAzMEMyMDAwMTEwNDAwMDBBMDAwMDAwMDA4RDAyMDA1MDFFCis6MTA0NjcwMDAwMEUyMTAyMzA0NDEwMDA0MDEwMDIwMjE4RDAyMDA1NEI3Cis6MTA0NjgwMDAxNEUyMDAwMzAwMDAwMDAwMEEwMDExODAyNDA2MDAwNTY3Cis6MTA0NjkwMDA4RDAyMDA1NDE0RTIwMDQ3OEZCRjAwMTAzQzAyMDgwMDU2Cis6MTA0NkEwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEEyNDAyMDAwMTUxCis6MTA0NkIwMDA5MTAzMDA3ODkxMDIwMDgzMTQ0MzAwMDYyNDAyMDAwMTU0Cis6MTA0NkMwMDAwMTAwMjAyMTI0MDYwMDA0OEZCRjAwMTAwQTAwMTBFQzE2Cis6MTA0NkQwMDAyN0JEMDAxOEExMDAwMDg0QTUwMjAwMTQ4RjQzMDEwMDJCCis6MTA0NkUwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDIwQTAwMTFBNUQ3Cis6MTA0NkYwMDAwMDAwMDAwMDhDODIwMDVDMDA0OTEwMjMwMDQzMTAyQjU2Cis6MTA0NzAwMDA1NDQwMDAwMUFDODcwMDVDOTUwMjAwM0MzMDQyRkZGRjQyCis6MTA0NzEwMDAwMDYyMTAyQjE0NDAwMDA3MjQwMjAwMDI5NTAyMDAzQ0E2Cis6MTA0NzIwMDA4RDAzMDA1QzMwNDJGRkZGMDA2MjE4MjFBRDAzMDA1Qzg2Cis6MTA0NzMwMDAyNDAyMDAwMkFEMDcwMDRDQTEwMjAwODQwRTAwMEZBMjZCCis6MTA0NzQwMDA4RjQ0MDEwMDEwNDAwMDFCOEZCRjAwMTA4RjQzMDEwMEY5Cis6MTA0NzUwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJBRjQzMDFDMDczCis6MTA0NzYwMDBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjgwQTAwMTFCQjkxCis6MTA0NzcwMDA4RkJGMDAxMDMwQzIwMDEwMTA0MDAwMEU4RkJGMDAxMDFECis6MTA0NzgwMDA4QzgzMDA1Qzk0ODIwMDNDMDA2OTE4MjMzMDQyRkZGRjU4Cis6MTA0NzkwMDAwMDYyMTgyMTNDMDIzRkZGMzQ0NEZGRkYwMDgzMTAyQkNFCis6MTA0N0EwMDA1NDQwMDAwMTAwODAxODIxMDEyMzEwMjFBRDAyMDA1QzVCCis6MTA0N0IwMDA4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZFOEU5Cis6MTA0N0MwMDA4RkFBMDAyOEFGQkYwMDEwMDA4MDQwMjEwMEVBNDgyM0Q0Cis6MTA0N0QwMDAxOTIwMDAyMTMwQzYwMEZGOEM4MzAwNUM4QzgyMDA2NEFECis6MTA0N0UwMDAwMDZBMTgyMzAwNDMxMDJCNTA0MDAwMTAwMDY5MTgyMTY0Cis6MTA0N0YwMDA5NEEyMDExMDAxMjIxMDIxQTRBMjAxMTA5NEEyMDExMDgwCis6MTA0ODAwMDAzMDQyRkZGRjAwNDMxMDJCMTQ0MDAwMEEzQzAyM0ZGRkUwCis6MTA0ODEwMDA5NEEyMDExMDAwNDMxMDIzQTRBMjAxMTA5NDgyMDAzQzMyCis6MTA0ODIwMDAzMDQyRkZGRjBBMDAxMURBMDA2MjE4MjFBNEEwMDExMDMzCis6MTA0ODMwMDAzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkI1NDQwMDAwMTMzCis6MTA0ODQwMDAwMDgwMTgyMTAwNjcxMDIxQUQwMjAwNUNBMTAwMDA3Q0VGCis6MTA0ODUwMDAwQTAwMTIyMkExMDAwMDgxMzBDMjAwMTAxMDQwMDAzQzZBCis6MTA0ODYwMDAwMDAwMDAwMDhDODIwMDUwMDA0QTEwMjMxODQwMDAzOERECis6MTA0ODcwMDAwMDAwMDAwMDkwODIwMDdDMjQ0MjAwMDFBMDgyMDA3Q0E1Cis6MTA0ODgwMDA5MDgyMDA3QzNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRkNGCis6MTA0ODkwMDAwMDQzMTAyQjE0NDAwMDVDOEZCRjAwMTA4Q0EyMDEwODU1Cis6MTA0OEEwMDAwMEUyMTAyMzE4NDAwMDU4MDAwMDAwMDA4QzgzMDA1NEUwCis6MTA0OEIwMDA5NDgyMDAzQzAwNkExODIzMzA0MkZGRkYwMDAzMTg0MzMzCis6MTA0OEMwMDAwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDUwMDAwMDAwMEM0Cis6MTA0OEQwMDA4QzgyMDA1NDAwNEExMDIzMEEwMDEyMDkwMDAyMTA0MzdGCis6MTA0OEUwMDA5NDgyMDAzQzMwNDJGRkZGMDAwMjEwNDBBRDAyMDA2NEExCis6MTA0OEYwMDA5NTAyMDAzQzhEMDQwMDY0OTUwMzAwM0MzMDQyRkZGRkFDCis6MTA0OTAwMDAwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYwMDgzMTgyMTQ1Cis6MTA0OTEwMDAwMTQzMTAyMUFEMDIwMDVDOEQwMjAwNTRBQ0EyMDEwOERECis6MTA0OTIwMDAyNDAyMDAwMkExMDIwMDg0MEUwMDBGQTI4RjQ0MDEwMEE1Cis6MTA0OTMwMDAxMDQwMDAzNThGQkYwMDEwOEY0MzAxMDA4RjQyMDFGOEY3Cis6MTA0OTQwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDEyNEIwMDAwMDAwMDk3Cis6MTA0OTUwMDBBRDA3MDA0QzhDQTIwMTA4MDBFMjEwMjMxODQwMDAwMkIxCis6MTA0OTYwMDAyNEUyRkZGQ0FDQTIwMTA4MzBDMjAwMDExMDQwMDAwQUEyCis6MTA0OTcwMDAwMDAwMDAwMDhEMDIwMDUwMDBFMjEwMjMwNDQxMDAwNEZBCis6MTA0OTgwMDAwMTAwMjAyMThEMDIwMDU0MTRFMjAwMDMwMDAwMDAwMDA5Cis6MTA0OTkwMDAwQTAwMTI0MjI0MDYwMDA1OEQwMjAwNTQxNEUyMDAxQTk3Cis6MTA0OUEwMDA4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDJCCis6MTA0OUIwMDAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzg5MTAyMDA4MzU0Cis6MTA0OUMwMDAxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjEyNDA2MDAwNEYzCis6MTA0OUQwMDA4RkJGMDAxMDBBMDAxMEVDMjdCRDAwMThBMTAwMDA4NDUyCis6MTA0OUUwMDBBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjgwNDQwRkZGRTJFCis6MTA0OUYwMDAyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzQzQzAyMTAwMEU0Cis6MTA0QTAwMDBBRjQyMDFGODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODc3Cis6MTA0QTEwMDA4RkFBMDAxMDhDODIwMDUwMDA4MDQwMjEzMEM2MDBGRjE5Cis6MTA0QTIwMDAwMDRBMTAyMzAwQTA0ODIxMTg0MDAwMDcwMEUwMTgyMTg4Cis6MTA0QTMwMDAyNDAyMDAwMUEwODAwMDg0QTBBMDAxMTJBNDgyMDAxNDFFCis6MTA0QTQwMDAwQTAwMTFCREFGQUEwMDEwQTA4MDAwODFBRDA3MDA0Qzg0Cis6MTA0QTUwMDA4Q0EyMDEwODAwRTIxMDIzMTg0MDAwMDIyNEUyRkZGQ0FGCis6MTA0QTYwMDBBQ0EyMDEwODMwQzIwMDAxMTA0MDAwMDgwMDAwMDAwMEE0Cis6MTA0QTcwMDA4RDAyMDA1MDAwNjIxMDIzMDQ0MTAwMTMyNDA2MDAwNTNCCis6MTA0QTgwMDA4RDAyMDA1NDEwNjIwMDEwMDAwMDAwMDA4RDAyMDA1NERFCis6MTA0QTkwMDAxNDYyMDAxMTAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEOEEzCis6MTA0QUEwMDAzMDQyMDAyMDEwNDAwMDBBMjQwMjAwMDE5MTAzMDA3OEU3Cis6MTA0QUIwMDA5MTAyMDA4MzE0NDMwMDA2MjQwMjAwMDEwMTAwMjAyMTFBCis6MTA0QUMwMDAwMTIwMjgyMTI0MDYwMDA0MEEwMDEwRUMwMDAwMDAwMDQ4Cis6MTA0QUQwMDBBMTAwMDA4NEE1MDIwMDE0MDNFMDAwMDgwMDAwMDAwMDBCCis6MTA0QUUwMDAyN0JERkZFMEFGQkYwMDE4Mjc0MjAxMDA5MDQ2MDAwQTMzCis6MTA0QUYwMDA4QzQ4MDAxNDhDOEIwMDRDOTA4MjAwODQzMEM5MDBGRkRECis6MTA0QjAwMDAwMTY4MTgyMzMwNEEwMEZGMUM2MDAwMUEyRDQ2MDAwNjc5Cis6MTA0QjEwMDAyNDAyMDAwMTAxNDIxMDA0MTBDMDAwMTYzMDQzMDAwM0JCCis6MTA0QjIwMDAwMTIwMzAyMTAxMDAzODIxMTQ2MDAwMDczMDRDMDAwQ0I2Cis6MTA0QjMwMDAxNTgwMDAwOTMwNDIwMDMwMTQ0MDAwMEI4RkJGMDAxODcwCis6MTA0QjQwMDAwQTAwMTJBQzAwMDAwMDAwMEUwMDExQkRBRkFCMDAxMDU3Cis6MTA0QjUwMDAwQTAwMTJBQzhGQkYwMDE4MEUwMDExMzJBRkFCMDAxMDZDCis6MTA0QjYwMDAwQTAwMTJBQzhGQkYwMDE4QUZBQjAwMTAwRTAwMTI1MjNCCis6MTA0QjcwMDBBRkFBMDAxNDhGQkYwMDE4MDNFMDAwMDgyN0JEMDAyMDczCis6MTA0QjgwMDAyNDAyMDAwM0EwODIwMDg0OEM4MjAwNTQwM0UwMDAwODA5Cis6MTA0QjkwMDBBQ0EyMDEwODNDMDIwMDA4MDM0MjE4MjE5MDYyMDA4MTg3Cis6MTA0QkEwMDAyNDA2MDA0MzNDMDc2MDE5MjQ0MjAwMDFBMDYyMDA4MUYyCis6MTA0QkIwMDA5MDYzMDA4MTNDMDIwODAwOEM0MjAwQzAzMDYzMDBGRjFCCis6MTA0QkMwMDAxNDYyMDAxMDI0MDNGRjgwM0MwMjA4MDA4QzQyMDBFMEM1Cis6MTA0QkQwMDAwMDgyMTAyMTAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDUwCis6MTA0QkUwMDA4QzQyMDBFMDNDMDMwMDBBMDA4MjEwMjEzMDQyMDA3RjJBCis6MTA0QkYwMDAwMzQyMTAyMTAwNDMxMDIxOTQ0NTAwRDQwQTAwMEI4OTgwCis6MTA0QzAwMDAzMEE1RkZGRjAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDIzCis6MTA0QzEwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTA4RjQyMDE4MEQ5Cis6MTA0QzIwMDAwMDgwODAyMTAwQTA4ODIxMEUwMDEyQjMwMDQwMjAyMUM2Cis6MTA0QzMwMDBBMjAwMDA4NDhFMDIwMDU0OEZCRjAwMTg4RkIwMDAxMEI1Cis6MTA0QzQwMDBBRTIyMDEwODhGQjEwMDE0MDNFMDAwMDgyN0JEMDAyMDQ4Cis6MTA0QzUwMDAyN0JERkZFMDNDMDIwMDA4QUZCMDAwMTBBRkJGMDAxODU2Cis6MTA0QzYwMDBBRkIxMDAxNDAzNDI4MDIxOEY1MTAxNDA5MjAzMDA4NEIwCis6MTA0QzcwMDA4RTA0MDA1MDhFMDIwMDRDMTQ4MjAwNDAzMDY2MDBGRjBCCis6MTA0QzgwMDAzQzAyMDgwMDhDNDIwMEUwMjQwM0ZGODAwMjIyMTAyMTM1Cis6MTA0QzkwMDAwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA4QzQyMDBFMDk0Cis6MTA0Q0EwMDA5NzQ0MDA3QzkyMDUwMDgxMDIyMjEwMjEzMDQyMDA3RjRGCis6MTA0Q0IwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjExNEEwMDAwQkQ0Cis6MTA0Q0MwMDAzMDg0RkZGRjI0MDIwMDA1NTRDMjAwMTQyNDgyMDVEQzU2Cis6MTA0Q0QwMDA5MDYyMDExMjI0NDIwMDAxQTA2MjAxMTIyNDAyMEM4MEExCis6MTA0Q0UwMDBBRjQyMDAyNDBBMDAxMzBCMjQwMjAwMDVBMDYwMDExMjQ5Cis6MTA0Q0YwMDAyNDAyMDAwNTE0QzIwMDA5MjQ4MjA1REM5MjAyMDA4MTBFCis6MTA0RDAwMDAyQzQyMDAwNzUwNDAwMDA1MjQ4MjBBMDA5MjAzMDA4MUQzCis6MTA0RDEwMDAyNDAyMDAxNDAwNjIxMDA0MDA4MjEwMjEzMDQ0RkZGRkJFCis6MTA0RDIwMDBBNjA0MDAxNDBFMDAxMkIzMDIyMDIwMjE5NjAyMDAzQ0JCCis6MTA0RDMwMDA4RTAzMDA0QzAyMjAyMDIxMzA0MkZGRkYwMDAyMTA0MDcxCis6MTA0RDQwMDAwMDYyMTgyMTBFMDAwMzAyQUUwMzAwNUM5MjAyMDA3RDk3Cis6MTA0RDUwMDAwMjIwMjAyMTM0NDIwMDQwMEUwMDAzMEJBMjAyMDA3REZECis6MTA0RDYwMDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJBRjUxMDFDMDRGCis6MTA0RDcwMDBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg4RkJGMDAxOEVCCis6MTA0RDgwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDkxCis6MTA0RDkwMDAwODAwMEQ5ODA4MDAwREUwMDgwMDBFMjAwODAwMEU2Q0I5Cis6MDQ0REEwMDAwODAwMEVBMDU5Cis6MEM0REE0MDAwQTAwMDAyMjAwMDAwMDAwMDAwMDAwMDBENworOjEwNERCMDAwMDAwMDAwMEQ2MzcwMzUyRTMwMkUzMDZBMzMwMDAwMDA4NQorOjEwNERDMDAwMDUwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwNEREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwNERFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjBBMworOjEwNERGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwNEUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5MQorOjEwNEUyMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwNEUzMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQ0NQorOjEwNEU0MDAwM0MwMjA4MDAyNDQyNUFDNDNDMDMwODAwMjQ2MzYxOTBEOQorOjEwNEU1MDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDRERQorOjEwNEU2MDAwM0MxRDA4MDAzN0JEN0ZGQzAzQTBGMDIxM0MxMDA4MDA2QQorOjEwNEU3MDAwMjYxMDAwODgzQzFDMDgwMDI3OUM1QUM0MEUwMDAxQTY3RQorOjEwNEU4MDAwMDAwMDAwMDAwMDAwMDAwRDI3QkRGRkU4M0MwOTYwMTg4RAorOjEwNEU5MDAwQUZCRjAwMTA4RDJDNTAwMDI0MERGRjdGMjQwODAwMzE3RgorOjEwNEVBMDAwMDE4RDU4MjQzNTZBMzgwQzI0MDcwQzAwM0MxQTgwMDAwOAorOjEwNEVCMDAwQUQyQTUwMDAzQzA0ODAwQUFGNDgwMDA4M0MxQjgwMDgyMworOjEwNEVDMDAwQUY0NzAwMjQwRTAwMDkzOEFGODQwMDEwMEUwMDA4RkIyNQorOjEwNEVEMDAwMDAwMDAwMDAwRTAwMDg0ODAwMDAwMDAwMEUwMDEyREY3NQorOjEwNEVFMDAwMDAwMDAwMDAzQzA0NjAxNjhDODUwMDAwM0MwNkZGRkZCQgorOjEwNEVGMDAwM0MwMjUzNTMwMEE2MTgyNDEwNjIwMDQ3MzQ4NjdDMDBGRAorOjEwNEYwMDAwOTRDMjAxRjJBNzgwMDAyQzEwNDAwMDAzQTc4MDAwQ0NCRgorOjEwNEYxMDAwMzg1ODFFMUVBNzk4MDAyQzk0QzIwMUY4MTA0MDAwMDRCNworOjEwNEYyMDAwOTc4MzAwQ0MzODU5MUUxRUE3OTkwMENDOTc4MzAwQ0NEQworOjEwNEYzMDAwMkM3RjAwNjc1M0UwMDAwMTI0MDMwMDY2OTc4NDAwMkM1NworOjEwNEY0MDAwMkM4MjA0MDExNDQwMDAwMjAwNjAyODIxMjQwNDA0MDA4MworOjEwNEY1MDAwM0MwNzYwMDA4Q0U5MDQzODI0MDMxMDNDMzEyOEZGRkYzMworOjEwNEY2MDAwMTEwMzAwMUYzMEI5RkZGRjU3MjAwMDEwQTM4MDAwQ0VBRgorOjEwNEY3MDAwMjQwMjAwNTBBMzgyMDBDRTkzOUYwMENFNTNFMDAwMEY4NgorOjEwNEY4MDAwQTc4NTAwQ0NBNzgwMDBDQzk3ODUwMENDOEZCRjAwMTBGMAorOjEwNEY5MDAwQTc4MDAwMkNBNzgwMDAzNEE3ODAwMEU2M0MwMTA4MDAxMQorOjEwNEZBMDAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4OTM5RjAwQ0VDOQorOjEwNEZCMDAwNTdFMEZGRjVBNzgwMDBDQ0E3ODUwMENDOTc4NTAwQ0NGMworOjEwNEZDMDAwOEZCRjAwMTBBNzg0MDAyQ0E3ODAwMDM0QTc4MDAwRTZDNAorOjEwNEZEMDAwM0MwMTA4MDBBQzI1MDA4MDAzRTAwMDA4MjdCRDAwMTg1NAorOjEwNEZFMDAwQTM4MDAwQ0U4Q0NCMDAzQzMxNkEwMDAxMTE0MDAwMEU0MgorOjEwNEZGMDAwMDAwMDAwMDAzMEE3RkZGRjEwRTBGRkRFMjQwMjAwNTA5OQorOjEwNTAwMDAwOENDQzAwQzgzMTg2MDAwMTE0QzBGRkRDOTM5RjAwQ0UxOQorOjEwNTAxMDAwMEEwMDAwNzQyNDAyMDA1MThDOEYwMDA0M0MwRTYwMDBEMgorOjEwNTAyMDAwMEEwMDAwNTcwMUVFMzAyMThDRUYwODA4MjQwRDU3MDhDNAorOjEwNTAzMDAwMDAwRjc0MDIxMUNEMDAwNDMwQjhGRkZGMjQwNTAwNjY5NAorOjEwNTA0MDAwMEEwMDAwNzUyNDA0MDQwMDE3MDBGRkNDOTM5RjAwQ0VEMworOjEwNTA1MDAwMEEwMDAwNzQyNDAyMDA1MDhGODYwMDEwMzA4OUZGRkY4MAorOjEwNTA2MDAwMDAwOTM5NDA4Q0MzMDAxMDNDMDgwMDUwMDBFODIwMjU5RQorOjEwNTA3MDAwQUY0MzAwMzg4Q0M1MDAxNDI3NDIwNDAwQUY4MjAwMUNFNworOjEwNTA4MDAwQUY0NTAwM0NBRjQ0MDAzMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwNTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNTBBMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEIwMDAwMzE2QTAwMjA2QgorOjEwNTBCMDAwMTE0MEZGRkQwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDBCOAorOjEwNTBDMDAwOEY4NDAwMTA5NDhBMDAxQThDODcwMDI0MzE0OUZGRkZENgorOjEwNTBEMDAwMDAwOTQwQzAwMEU4MzAyMUFGNDYwMDNDOEM4NTAwMjQyOAorOjEwNTBFMDAwOEY0MzAwM0MwMEEzMTAyMzE4NDAwMDI5MDAwMDAwMDA1QgorOjEwNTBGMDAwOEM4QjAwMjAyNTYyMDAwMTNDMEQwMDUwMzVBQzAwMDg2RgorOjEwNTEwMDAwQUY0MjAwMzhBRjRDMDAzMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwNTExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNTEyMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEYwMDAwMzFFRTAwMjA2MgorOjEwNTEzMDAwMTFDMEZGRkQwMDAwMDAwMDhGNEEwNDAwM0MwODAwMjA2MQorOjEwNTE0MDAwQUM4QTAwMTA4RjQ5MDQwNEFDODkwMDE0QUY0ODAwMzBDOQorOjEwNTE1MDAwMDAwMDAwMDA5NDg2MDAxODk0ODcwMDFDMDBDNzE4MjFFNgorOjEwNTE2MDAwQTQ4MzAwMTg5NDg1MDAxQTI0QTIwMDAxQTQ4MjAwMUFDNgorOjEwNTE3MDAwOTQ5ODAwMUE5NDk5MDAxRTEzMzgwMDAzMDAwMDAwMDA1MAorOjEwNTE4MDAwMDNFMDAwMDgwMDAwMDAwMDAzRTAwMDA4QTQ4MDAwMUEwQgorOjEwNTE5MDAwOEM4MjAwMjAwQTAwMDBENjNDMEQwMDUwMEEwMDAwQzc5NworOjEwNTFBMDAwMDAwMDAwMDAzQzAzMDgwMDhDNjMwMDIwOEY4MjAwMTg4MAorOjEwNTFCMDAwMjdCREZGRTgxMDYyMDAwOEFGQkYwMDEwMEUwMDAwRkUyMAorOjEwNTFDMDAwQUY4MzAwMTgzQzAzMDgwMDhDNjMwMDIwMjQwNDAwMDExNgorOjEwNTFEMDAwMTA2NDAwMDQ4Rjg5MDAxMDhGQkYwMDEwMDNFMDAwMDhFNgorOjEwNTFFMDAwMjdCRDAwMTg4RkJGMDAxMDNDMDc2MDEyQTUyMDAwMEFFMQorOjEwNTFGMDAwOTUyODAwMEEzNEU1MDAxMDI3QkQwMDE4MzEwNkZGRkY4RQorOjEwNTIwMDAwMDNFMDAwMDhBQ0E2MDA5MDNDMDIwODAwOEM0MjAwMjA5RAorOjEwNTIxMDAwMjdCREZGQzhBRkJGMDAzNEFGQkUwMDMwQUZCNzAwMkMxMgorOjEwNTIyMDAwQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUM2OAorOjEwNTIzMDAwQUZCMjAwMThBRkIxMDAxNDEwNDAwMDUwQUZCMDAwMTA3MgorOjEwNTI0MDAwOEY4NDAwMTA5NDg2MDAwNjk0ODMwMDBBMDBDMzI4MjNFQworOjEwNTI1MDAwMzBCNkZGRkYxMkMwMDA0QThGQkYwMDM0OTQ4OTAwMTg5NworOjEwNTI2MDAwOTQ4QTAwMEEwMTJBNDAyMzMxMDJGRkZGMDJDMjM4MkIzMAorOjEwNTI3MDAwMTRFMDAwMDIwMkMwMjAyMTAwNDAyMDIxMkM4QzAwMDVGNworOjEwNTI4MDAwMTU4MDAwMDIwMDgwQTAyMTI0MTQwMDA0MEUwMDAwQUQ0RgorOjEwNTI5MDAwMDI4MDIwMjE4Rjg3MDAxMDAyODA5ODIxQUY4MDAwMTRBNworOjEwNTJBMDAwOTRFRDAwMEEwMjgwODgyMTEyODAwMDRFMzFCMkZGRkY4NworOjEwNTJCMDAwM0MxNzcwMDAzQzE1NDAwMDNDMUU2MDAwOEY4RjAwMUNBNgorOjEwNTJDMDAwOERFRTAwMDAwMUQ3MTgyNDUwNzUwMDUwMDIyMDIwMjFENworOjEwNTJEMDAwMDJBMzgwMkIxNjAwMDAzNTNDMTgyMDAwNTA3ODAwNDdCMAorOjEwNTJFMDAwMDIyMDIwMjEyNDEwMDAwMThGODMwMDE0MTQ2MDAwMzk1MworOjEwNTJGMDAwMDI5MTU4MjMwMjMwRjgyMzAyNTBDODIxMzNGMUZGRkZGNgorOjEwNTMwMDAwMTYyMEZGRUUzMzMyRkZGRjhGODcwMDEwM0MxMTAwMjA4NAorOjEwNTMxMDAwQUY1MTAwMzAwMDAwMDAwMDk0RTYwMDBBM0MxRTYwMTIwRAorOjEwNTMyMDAwMzdENTAwMTAwMjY2MjgyMUE0RTUwMDBBOTRFMjAwMEE5RAorOjEwNTMzMDAwOTRGMjAwMEE5NEY0MDAxODMwNTdGRkZGMTI5MjAwM0JEOQorOjEwNTM0MDAwQUVCNzAwOTA4Q0VEMDAxNDhDRTQwMDEwMDAxMzcxNDA5NworOjEwNTM1MDAwMDFBRTQwMjEwMDBFNUZDMzAxMEU1MDJCMDA4QjQ4MjE4RgorOjEwNTM2MDAwMDEyQTE4MjFBQ0U4MDAxNEFDRTMwMDEwMDJEMzM4MjM2MgorOjEwNTM3MDAwMzBGNkZGRkYxNkMwRkZCOThGODQwMDEwOEZCRjAwMzRENgorOjEwNTM4MDAwOEZCRTAwMzA4RkI3MDAyQzhGQjYwMDI4OEZCNTAwMjQ1OQorOjEwNTM5MDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ5RgorOjEwNTNBMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDM4MTA3RTAwMUJGRQorOjEwNTNCMDAwMDAwMDAwMDAxNDc3RkZDQzI0MTAwMDAxMEUwMDE2MkExNAorOjEwNTNDMDAwMDAwMDAwMDA4RjgzMDAxNDEwNjBGRkNCMDIzMEY4MjMzMAorOjEwNTNEMDAwMDI5MTU4MjM4Rjg3MDAxMDAxNzAyMDIxMEEwMDAxOTE0QgorOjEwNTNFMDAwMzA5M0ZGRkY4RjgzMDAxNDE0NjBGRkNCM0MxMTAwMjAyQgorOjEwNTNGMDAwQUY1MTAwMzAwQTAwMDE1RDAwMDAwMDAwMEUwMDA3QTE1RgorOjEwNTQwMDAwMDI0MDI4MjEwQTAwMDE1MTAwNDA4MDIxMEUwMDAzNEI3OAorOjEwNTQxMDAwMDI0MDI4MjEwQTAwMDE1MTAwNDA4MDIxMEUwMDE0RjJCMAorOjEwNTQyMDAwMDIyMDIwMjEwQTAwMDE1MTAwNDA4MDIxMEUwMDAwQzcwNworOjEwNTQzMDAwMDAwMDAwMDAwQTAwMDE3MzAyRDMzODIzMjdCREZGRThGMworOjEwNTQ0MDAwQUZCMDAwMTBBRkJGMDAxNDBFMDAwMDM5MDAwMDAwMDAyNAorOjEwNTQ1MDAwM0MwMjgwMDAzNDUwMDA3MDBBMDAwMUI0OEUwNjAwMDA0NworOjEwNTQ2MDAwOEY0RjAwMDAzOUVFMDAwMTMxQzIwMDAxMTA0MDAwMjRDRQorOjEwNTQ3MDAwOEY4NjAwQTg4RTA3MDAwMDNDMEMwODAwOEQ4QzAwM0MzNQorOjEwNTQ4MDAwM0MwOTA4MDA4RDI5MDAzODAwRTY2ODIzMDE4RDI4MjE5OQorOjEwNTQ5MDAwMDAwMDUwMjEwMEFEMzAyQjAxMkE0MDIxMDEwNjIwMjFCRgorOjEwNTRBMDAwM0MwMTA4MDBBQzI1MDAzQ0FGODcwMEE4M0MwMTA4MDA4NworOjEwNTRCMDAwQUMyNDAwMzgwRTAwMDEwMDAwMDAwMDAwM0MwMzA4MDA4RQorOjEwNTRDMDAwOEM2MzAwNzAxMDYwRkZFNjAwNjAyMDIxM0MwNTA4MDAzRQorOjEwNTREMDAwOENBNTAwNjgzQzA2MDgwMDhDQzYwMDZDMEUwMDE1Qjk0RgorOjEwNTRFMDAwMDAwMDAwMDAzQzAxMDgwMEFDMjAwMDcwOEY0RjAwMDA1RAorOjEwNTRGMDAwMzlFRTAwMDEzMUMyMDAwMTE0NDBGRkRFOEY4NjAwQThBMgorOjEwNTUwMDAwOEUwQTAwMDA4RjhCMDBBODNDMDUwODAwOENBNTAwM0M4QgorOjEwNTUxMDAwM0MwNDA4MDA4Qzg0MDAzODAxNEI0ODIzMDBBOTM4MjE0MgorOjEwNTUyMDAwMDA4MjE4MjEwMEU5NDAyQjAwNjgxMDIxM0MwMTA4MDA4RQorOjEwNTUzMDAwQUMyNzAwM0MzQzAxMDgwMEFDMjIwMDM4OEY1RjAxMDAyMgorOjEwNTU0MDAwMjQxOUZGMDAyNDE4MEMwMDAzRjkyMDI0MTA5ODAwMTJERAorOjEwNTU1MDAwQUY4NDAwMDBBRjQ0MDAyMDkzNkQwMDAwMjQwQzAwMjBCNQorOjEwNTU2MDAwMzFBNjAwRkYxMENDMDAxMjI0MEUwMDUwMTBDRTAwMDQxMworOjEwNTU3MDAwM0MxOTQwMDBBRjU5MDEzODBBMDAwMUFEMDAwMDAwMDA5RAorOjEwNTU4MDAwMEUwMDEyNTUwMDAwMDAwMDNDMTk0MDAwQUY1OTAxMzhEMAorOjEwNTU5MDAwMEEwMDAxQUQwMDAwMDAwMDBFMDAwMTE5MDAwMDAwMDAyQgorOjEwNTVBMDAwM0MxOTQwMDBBRjU5MDEzODBBMDAwMUFEMDAwMDAwMDA2RAorOjEwNTVCMDAwOEY1ODAxMDAwMDgwMjgyMTMzMEYwMEZGMDFFMDIwMjFENworOjEwNTVDMDAwMEUwMDAyRjhBRjhGMDAwNDNDMTk0MDAwQUY1OTAxMzhCQgorOjEwNTVEMDAwMEEwMDAxQUQwMDAwMDAwMDAwQTQxMDJCMjQwMzAwMDEwQworOjEwNTVFMDAwMTA0MDAwMDkwMDAwMzAyMTAwMDUyODQwMDBBNDEwMkJDNQorOjEwNTVGMDAwMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDMDAwNTI4NDBBRAorOjEwNTYwMDAwNTA2MDAwMEEwMDA0MTgyQjAwODUzODJCNTRFMDAwMDQ3OQorOjEwNTYxMDAwMDAwMzE4NDIwMEMzMzAyNTAwODUyMDIzMDAwMzE4NDJGMAorOjEwNTYyMDAwMTQ2MEZGRjkwMDA1Mjg0MjAwMDQxODJCMDNFMDAwMDg2RAorOjEwNTYzMDAwMDBDMzEwMjEzMDg0RkZGRjMwQTVGRkZGOEY0MjAxQjg2NworOjEwNTY0MDAwMDQ0MEZGRkUzQzA3NDA4MDAwODczMDI1M0MwMzEwMDBFQgorOjEwNTY1MDAwQUY0MDAxODBBRjQ1MDE4NEFGNDYwMTg4MDNFMDAwMDhGOAorOjEwNTY2MDAwQUY0MzAxQjgzMDg0RkZGRjhGNDIwMUI4MDQ0MEZGRkUxMgorOjEwNTY3MDAwM0MwNzQwMzg4Q0E2MDAwMDAwODcyODI1M0MwMzEwMDAxQQorOjEwNTY4MDAwQUY0NjAxODBBRjQ1MDE4ODAzRTAwMDA4QUY0MzAxQjg5MQorOjEwNTY5MDAwOEY4MzAwMzg4Rjg2MDAzMDEwNjYwMDBCMDA4MDQwMjExOQorOjEwNTZBMDAwM0MwNzA4MDAyNEU3NUMzODAwMDMyOEMwMDBBNzEwMjE0RAorOjEwNTZCMDAwOEM0NDAwMDAyNDYzMDAwMTEwODgwMDA1MzA2MzAwMEY1MworOjEwNTZDMDAwNTQ2NkZGRkEwMDAzMjhDMDAzRTAwMDA4MDAwMDEwMjEyMAorOjEwNTZEMDAwM0MwNzA4MDAyNEU3NUMzQzAwQTczMDIxMDNFMDAwMDhGOQorOjEwNTZFMDAwOENDMjAwMDAzQzAzOTAwMDM0NjIwMDAxMDA4MjIwMjUzRgorOjEwNTZGMDAwQUY0NDAwMjA4RjQ1MDAyMDA0QTBGRkZFMDAwMDAwMDAwMgorOjEwNTcwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMzQ2MjAwMDE1OAorOjEwNTcxMDAwMDA4MjIwMjUwM0UwMDAwOEFGNDQwMDIwMjdCREZGRTAwMQorOjEwNTcyMDAwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwQUZCRjAwMTg1MQorOjEwNTczMDAwMTIyMDAwMTUwMEEwODAyMThDQTUwMDAwMTBBMDAwMTNFRAorOjEwNTc0MDAwMjQwNDAwMDIwRTAwMEM3RjI0MDYwMTQwQUUwMDAwMDA3RAorOjEwNTc1MDAwOEY0MjAxQjgwNDQwMDAwRDAwMDAyODIxM0MwNjQwMDBBMworOjEwNTc2MDAwMDIyNjIwMjU4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBDMworOjEwNTc3MDAwM0MwMzEwMDAyN0JEMDAyMEFGNDUwMTgwQUY0NDAxODhFNQorOjEwNTc4MDAwMDNFMDAwMDhBRjQzMDFCODhDQTUwMDAwOEY0MjAxQjhDOAorOjEwNTc5MDAwMDQ0MEZGRkUzQzA2NDAwMDAyMjYyMDI1OEZCRjAwMTg3MworOjEwNTdBMDAwOEZCMTAwMTQ4RkIwMDAxMDNDMDMxMDAwMjdCRDAwMjAwMworOjEwNTdCMDAwQUY0NTAxODBBRjQ0MDE4ODAzRTAwMDA4QUY0MzAxQjg2MgorOjEwNTdDMDAwMzA4NkZGRkY4RjQyMDFCODA0NDBGRkZFM0MwOTQwMDZDRgorOjEwNTdEMDAwOENBODAwMDAwMEM5MzgyNUFGNDgwMTgwOENBNDAwMDRDMworOjEwNTdFMDAwM0MwMzEwMDBBRjQ0MDE4NEFGNDcwMTg4MDNFMDAwMDg4OAorOjEwNTdGMDAwQUY0MzAxQjgyN0JERkZFMEFGQjAwMDEwQUZCRjAwMTg0NgorOjEwNTgwMDAwQUZCMTAwMTQ5MzYzMDAzRTAwODA4MDIxMDA4MDI4MjEwNgorOjEwNTgxMDAwMzA2MjAwNDAwMDAwMjAyMTEwNDAwMDBGOEUxMTAwMDA3NworOjEwNTgyMDAwMEUwMDA4NzQwMjIwMjAyMTkzNjcwMDAwMjQwNDAwNTAxOQorOjEwNTgzMDAwMzBFNTAwRkY1MEE0MDAxMjhFMEYwMDAwMDIyMDIwMjE0RQorOjEwNTg0MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQTc2MjAxM0MwOQorOjEwNTg1MDAwMEEwMDA5MzQyN0JEMDAyMDBFMDAwMjg3MDAwMDAwMDA2NgorOjEwNTg2MDAwMEUwMDA4NzQwMjIwMjAyMTkzNjcwMDAwMjQwNDAwNTBEOQorOjEwNTg3MDAwMzBFNTAwRkYxNEE0RkZGMjAyMjAyMDIxOEUwRjAwMDA2QgorOjEwNTg4MDAwM0MxMDA4MDA4RTEwMDA1MDNDMEQwMDBDMjQwQkZGODBEMworOjEwNTg5MDAwMDFGMDUwMjEzMTRFMDA3RjAxREE2MDIxMDE4RDQwMjE1RAorOjEwNThBMDAwMDE0QjQ4MjRBRjQ5MDAyODAyMjAyMDIxOEZCRjAwMTg1NworOjEwNThCMDAwOEZCMTAwMTQ4RkIwMDAxMEE1MDIwMEQ2MjdCRDAwMjBDNAorOjEwNThDMDAwMEEwMDA5MzRBRjg4MDBEMDI3QkRGRkUwQUZCRjAwMTg0MQorOjEwNThEMDAwQUZCMTAwMTRBRkIwMDAxMDkzNjYwMDAxMDA4MDgwMjFDQQorOjEwNThFMDAwMEUwMDAyNTAzMEQxMDAwNDkzNjQwMDA1MDAxMDI5QzI1QworOjEwNThGMDAwQTc2NTAwMDAzNDgzMDA0MEEzNjMwMDA1MEUwMDAyNTkzMQorOjEwNTkwMDAwMDIwMDIwMjEwRTAwMDkzNjAyMDAyMDIxMjQwMjAwMDE5RAorOjEwNTkxMDAwQUY2MjAwMEMwMjAwMjgyMUE3NjIwMDEwMjQwNDAwMDJEQworOjEwNTkyMDAwQTc2MjAwMTIyNDA2MDE0MEE3NjIwMDE0MEUwMDBDN0YzQgorOjEwNTkzMDAwQTc2MjAwMTYxNjIwMDAwRjhGQkYwMDE4OTc4QzAwMzQ0NgorOjEwNTk0MDAwM0MwQjA4MDA4RDZCMDA3ODI1ODhGRkZGMzEwOUZGRkZCNQorOjEwNTk1MDAwMjU2QTAwMDEwMTJBMzgyQjEwRTAwMDA2QTc4ODAwMzREMAorOjEwNTk2MDAwM0MwRjYwMDYyNDBFMDAxNjM1RUQwMDEwQURBRTAwNTA2MQorOjEwNTk3MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgzMworOjEwNTk4MDAwMjdCRDAwMjAyN0JERkZFMEFGQjEwMDE0QUZCRjAwMTg1NgorOjEwNTk5MDAwQUZCMDAwMTAwMEEwODgyMTEwODAwMDBBM0MwMzYwMDAxNgorOjEwNTlBMDAwMjQwMjAwODAxMDgyMDAxMjAwMDAwMDAwMDAwMDAwMERBMAorOjEwNTlCMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhGMworOjEwNTlDMDAwMjdCRDAwMjA4QzY4MkJGODA1MDBGRkZFMDAwMDAwMDBCQQorOjEwNTlEMDAwQUM3MTJCQzA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBCNgorOjEwNTlFMDAwM0MwOTEwMDAyN0JEMDAyMDAzRTAwMDA4QUM2OTJCRjgzQgorOjEwNTlGMDAwMEUwMDAyNTAwMEEwMjAyMTkzNjUwMDA1MDIyMDIwMjEwNgorOjEwNUEwMDAwMEUwMDAyNTkzMEIwMDBGRjI0MDMwMDNFMTYwM0ZGRTdFQQorOjEwNUExMDAwMDAwMDAwMDA4RjQ0MDE3ODA0ODBGRkZFMjQwNzAwMDc4NworOjEwNUEyMDAwM0MwNjEwMDBBRjUxMDE0MDAyMjAyMDIxQTM0NzAxNDQ1MQorOjEwNUEzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQUY0NjAxNzhFRgorOjEwNUE0MDAwMEEwMDAyQzkyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTQzMAorOjEwNUE1MDAwQUZCMDAwMTA4RjUwMDAyMDAwMDAwMDAwMEUwMDA5MzY4QgorOjEwNUE2MDAwQUY0NDAwMjBBRjUwMDAyMDhGQkYwMDE0OEZCMDAwMTA1MworOjEwNUE3MDAwMDNFMDAwMDgyN0JEMDAxODMwODRGRkZGOEY0MjAxQjgwMworOjEwNUE4MDAwMDQ0MEZGRkUzQzA3NDAzNTAwODczMDI1M0MwMzEwMDBGMgorOjEwNUE5MDAwQUY0NTAxODBBRjQwMDE4NEFGNDYwMTg4MDNFMDAwMDhCNAorOjEwNUFBMDAwQUY0MzAxQjgzMDg0RkZGRjhGNDIwMUI4MDQ0MEZGRkVDRQorOjEwNUFCMDAwM0MwNzQwMzYwMDg3MzAyNTNDMDMxMDAwQUY0NTAxODA4RAorOjEwNUFDMDAwQUY0MDAxODRBRjQ2MDE4ODAzRTAwMDA4QUY0MzAxQjg0RQorOjEwNUFEMDAwMjdCREZGRDBBRkIzMDAxQzMwOTNGRkZGQUZCNTAwMjQ0QworOjEwNUFFMDAwQUZCMjAwMThBRkJGMDAyOEFGQjQwMDIwQUZCMTAwMTRCMAorOjEwNUFGMDAwQUZCMDAwMTAzMEI1RkZGRjEyNjAwMDI3MDAwMDkwMjEwQQorOjEwNUIwMDAwOEY5MDAwMUM4RTAzMDAwMDNDMDY4MDAwMjQwMjAwNDBBMQorOjEwNUIxMDAwMDAwMzNFMDIwMDAzMkMwMjMwRTQwMDdGMDA2Njg4MjQ2QworOjEwNUIyMDAwMTQ4MjAwMUQzMEE1MDBGRjhGODMwMDI4MkM2ODAwMEExNgorOjEwNUIzMDAwNTEwMDAwMTA4RjkxMDAxNDAwMDM1ODgwM0MwQzA4MDBBNQorOjEwNUI0MDAwMjU4QzU4RDAwMTZDNTAyMThENDkwMDAwMDEyMDAwMDg5RgorOjEwNUI1MDAwMDAwMDAwMDAwMkIyMTgyMTMwNjVGRkZGMEUwMDAyMjQ5MQorOjEwNUI2MDAwMjQwNDAwODQxNjIwMDAwMjhGOTAwMDFDQUY4MDAwMjhCRgorOjEwNUI3MDAwOEY5MTAwMTQyNjBDMDAyMDI2NEIwMDAxMDE4MDgwMjEwQgorOjEwNUI4MDAwMzE3MkZGRkYxNjIwMDAwNEFGOEMwMDFDMDI1MzI4MkIzQgorOjEwNUI5MDAwMTRBMEZGREMwMDAwMDAwMDAyNDAxMDIxOEZCRjAwMjg4RAorOjEwNUJBMDAwOEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg3MworOjEwNUJCMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMzA0MworOjEwNUJDMDAwMjQwRDAwMzQxNEFEMDBGNjAwMDAwMDAwOTIwQjAwMEUwRQorOjEwNUJEMDAwMjQwQTE2ODAzQzA3MDAwQ0EzNkIwMDIxOTIwMzAwMERFMQorOjEwNUJFMDAwMDM0N0Y4MjEzQzA2NjAwMEEzNjMwMDIwOTYxMTAwMTJEMQorOjEwNUJGMDAwM0MwNTdGRkYzNEFDRkZGRkE3NzEwMDNDOTYwMjAwMTAwQworOjEwNUMwMDAwMjQwQjAwMDUzMDU0RkZGRkFGNzQwMDg0OEUxOTAwMUM3NAorOjEwNUMxMDAwQUY0QTAwMjg4RkY4MDAwMDhDQ0Y0NDQ4MDMxOTcwMjY0MworOjEwNUMyMDAwMDFFRTMwMjFBRjY2MDA0QzhGNjkwMDRDMjRDRDAwMDE5RAorOjEwNUMzMDAwM0MxOTdGMDBBRjY5MDA1MDhGNjQwMDUwQUY2NDAwNTQ3RQorOjEwNUM0MDAwQUY2NjAwNzBBRjZEMDA1ODhGNjgwMDU4MjQwNDAwNTA5NAorOjEwNUM1MDAwQUY2ODAwNUNBMzYwMDAyM0FGNkMwMDY0QTM2QjAwMzdFNworOjEwNUM2MDAwOEUwMzAwMTRBRjYzMDA0ODhGNzEwMDQ4QUY3MTAwMjRBOQorOjEwNUM3MDAwOEUwMjAwMThBRjYyMDA2QzkyMTQwMDBDQTM3NDAwMzYwMAorOjEwNUM4MDAwOTM2QTAwM0UzNTVGMDAyMEEzN0YwMDNFOEY3ODAwNzQ0QQorOjEwNUM5MDAwMDMxOTc4MjQzNUVFNDAwMEFGNkUwMDc0OTM2OTAwMDA1QworOjEwNUNBMDAwMzEzMDAwRkYxMjA0MDIyQjI0MThGRjgwM0MwNDA4MDA0RQorOjEwNUNCMDAwMjQ4NDVDQjgwRTAwMDI5NDAwMDAwMDAwMjQwNjAwMDQ1NgorOjEwNUNDMDAwMjQwNzAwMDEzQzA0MDgwMDhDODQ1Q0I4QTM2NjAwN0RCNgorOjEwNUNEMDAwQTM2NzAwMDU4RjRBMDE3ODA1NDBGRkZFMjQwMjAwMDJGOQorOjEwNUNFMDAwQUY0NDAxNDBBMzQyMDE0NDhGOTAwMDFDM0MxNDEwMDBCQgorOjEwNUNGMDAwQUY1NDAxNzgwQTAwMDM3M0FGODAwMDI4MkNBRDAwMzc0MQorOjEwNUQwMDAwNTFBMEZGOUM4RjkxMDAxNDAwMDVBMDgwM0MxODA4MDA1MgorOjEwNUQxMDAwMjcxODU4RjgwMjk4NzgyMThERUUwMDAwMDFDMDAwMDg3RAorOjEwNUQyMDAwMDAwMDAwMDAyNDA2MDAwNjE0QTYwMDExMDAwMDAwMDA3OAorOjEwNUQzMDAwM0MxRjA4MDA4RkZGNUNCODI0MDQwMDA1QUY1RjAwMjAwMworOjEwNUQ0MDAwOEUxOTAwMThBRjc5MDAxODhGNzgwMDRDQUY3ODAwMUNCRQorOjEwNUQ1MDAwOEY2RjAwNTAxMjIwMDBDMkFGNkYwMDcwMEEwMDAzNzNGMworOjEwNUQ2MDAwQUY4NDAwMjgyNDBBMDAwNzEwQUEwMDg0MjQwMzAwMDYzOAorOjEwNUQ3MDAwM0MwNTA4MDAyNEE1NUNCODBFMDAwMjVFMjQwNDAwODFFNgorOjEwNUQ4MDAwOEY5MDAwMUMwMDExMTAyQjBBMDAwMzczQUY4MjAwMjhCMworOjEwNUQ5MDAwMjQwMjAwMDQxNEEyRkZGNjI0MEEwMDUwM0MwOTA4MDA2MworOjEwNURBMDAwOEQyOTVDQjhBRjQ5MDAyMDhFMDQwMDA4QUY2NDAwNDAyNAorOjEwNURCMDAwOEUwNjAwMDhBRjY2MDA0NDhFMDcwMDBDQUY2NzAwNDhFRgorOjEwNURDMDAwOEUwRDAwMTBBRjZEMDA0QzhFMDgwMDEwQUY2ODAwODQ3RgorOjEwNUREMDAwOEUwNTAwMTRBRjY1MDA1MDhFMEMwMDE4QUY2QzAwNTQ5NworOjEwNURFMDAwOEUwQjAwMUNBRjZCMDA1ODkzNzQwMDAwMzI4MzAwRkZEMQorOjEwNURGMDAwMTA2QTAxRUQwMDAwMDAwMDhGNjcwMDQ4OEY2NjAwNDBDOAorOjEwNUUwMDAwMDBFNjY4MjMwNUEwMDAwNDI0MDQwMDhDMTYyMEZGREVCMQorOjEwNUUxMDAwMjQwMjAwMDMyNDA0MDA4MjNDMDUwODAwMjRBNTVDQjg4OQorOjEwNUUyMDAwMEUwMDAyODcwMDAwMDAwMDhGOTAwMDFDMDAwMDEwMjE2RgorOjEwNUUzMDAwMEEwMDAzNzNBRjgyMDAyODI0MDQwMDA1MTRBNEZGQ0NEOQorOjEwNUU0MDAwMjQwNTIwMDAzQzFGMDgwMDhGRkY1Q0I4QUY1RjAwMjBENgorOjEwNUU1MDAwOEUxOTAwMDRBRjc5MDA1QzkyMTgwMDA4MjQxMDAwMDgyNQorOjEwNUU2MDAwQTM3ODAwMjE4RjhGMDAxQzkxRUUwMDA5QTM2RTAwMjAwMworOjEwNUU3MDAwOEY4NjAwMUM5MEM5MDAwQTMxMjQwMEZGMTA5MDAwMTA4QQorOjEwNUU4MDAwMjg4QTAwMDkxNTQwMDA2QzI0MDIwMDAyMjQwQzAwMjAxRQorOjEwNUU5MDAwMTA4QzAwMEIzNDA1ODAwMDI4ODUwMDIxMTRBMDAwMDgxOAorOjEwNUVBMDAwMjQwNTQwMDAyNDA4MDA0MDEwODgwMDA1M0MwNTAwMDEzRQorOjEwNUVCMDAwMjQwRDAwODAxMDhEMDAwMjNDMDUwMDAyMjQwNTQwMDBFNgorOjEwNUVDMDAwOEY2RTAwNzQzQzBGRkYwMDAxQ0Y0ODI0MDEyNTgwMjUxMAorOjEwNUVEMDAwQUY3MDAwNzQ5MEM0MDAwQkEzNjQwMDgxOEY4NDAwMUMxOQorOjEwNUVFMDAwOTQ4NzAwMEMxMEUwMDE5MzAwMDAwMDAwOTQ4RTAwMENEOQorOjEwNUVGMDAwMjQxRkZGQkYyNDA2MDAwNEE3NkUwMDNDOTA4OTAwMEVGQgorOjEwNUYwMDAwQTM2OTAwM0U4RjkwMDAxQzkyMDQwMDBGQTM2NDAwM0YyMQorOjEwNUYxMDAwOEY5NDAwMUM4RThEMDAxMDhGNDcwMDc0MDFBNzQwMjNDMgorOjEwNUYyMDAwQUY2ODAwNjA4RTg1MDAxNEFGNjUwMDY0OTY4QzAwMTgyMQorOjEwNUYzMDAwQTc2QzAwNjg5NjhCMDAxQUE3NkIwMDZBOEU4MzAwMUMwMgorOjEwNUY0MDAwQUY2MzAwNkM5NjgyMDAwMkE3NjIwMTNFOTI4QTAwMEU0NworOjEwNUY1MDAwQTM2QTAwM0U5Mzc5MDAzRTAzM0ZDMDI0MTIyMDAxNjZFRAorOjEwNUY2MDAwQTM3ODAwM0U4RjkwMDAxQzBBMDAwMzczQUY4NjAwMjhDMAorOjEwNUY3MDAwMjQxNDAwMjIxNEI0RkY3RTI0MDMwMDA3M0MwMjA4MDAwRQorOjEwNUY4MDAwOEM0MjVDQjgxMjIwMDAwQ0FGNDIwMDIwMEEwMDAzNzM2MAorOjEwNUY5MDAwQUY4MzAwMjgyNDBDMDAzMzEwQUMwMDE0MjQwNTAwMjgyMworOjEwNUZBMDAwM0MwNTA4MDAyNEE1NUNCODBFMDAwMjMwMjQwNDAwODFFMgorOjEwNUZCMDAwMEEwMDAzRjg4RjkwMDAxQzNDMDQwODAwMjQ4NDVDQjg5RAorOjEwNUZDMDAwMEUwMDAyOTQwMDAwMDAwMDkzNkIwMDAwMjQxMTAwNTBBQQorOjEwNUZEMDAwMzE2MzAwRkYxMDcxMDE1MDAwMDAwMDAwOEY5MDAwMUMyMQorOjEwNUZFMDAwMDAwMDE4MjEwQTAwMDM3M0FGODMwMDI4M0MwODA4MDA1MgorOjEwNUZGMDAwOEQwODVDQjgyNDA0MDA4MUFGNDgwMDIwQTM2NTAwMzRGQworOjEwNjAwMDAwM0MwNTA4MDAyNEE1NUNCODBFMDAwMjMwMDAwMDAwMDAyQQorOjEwNjAxMDAwOEY5MDAwMUMyNDAyMDAwOTBBMDAwMzczQUY4MjAwMjgzRAorOjEwNjAyMDAwMDJCMjg4MjEzMjI1RkZGRjBFMDAwMjI0MjQwNDAwODRERQorOjEwNjAzMDAwMEEwMDAzNzM4RjkwMDAxQzEwODJGRkExMjQwNTA0MDA0NgorOjEwNjA0MDAwMjg4MzAwMDMxMDYwMDE2RTI0MEIwMDA0MjQxNDAwMDE1NworOjEwNjA1MDAwNTQ5NEZGOUIyNDA1NDAwMDBBMDAwNDQ3MjQwNTAxMDBENgorOjEwNjA2MDAwM0MwNDA4MDAyNDg0NUNCODhGNjIwMDRDMEUwMDAyOTQ0QgorOjEwNjA3MDAwOEY2MzAwNTA4RjkwMDAxQzAwMDAyMDIxMEEwMDAzNzNFMgorOjEwNjA4MDAwQUY4NDAwMjg4RTEwMDAwNDI0MDQwMDhBQUY1MDAwMjA0MgorOjEwNjA5MDAwOTM2RTAwMDUzMUM5MDAwMjE1MjAwMTVEMDIwMDI4MjEyMAorOjEwNjBBMDAwOTM3ODAwMjMwMjAwMjgyMTMzMEYwMDIwMTVFMDAxNThDNworOjEwNjBCMDAwMjQwNDAwOEQ5MzYyMDAzRjI0MTkwMDEyMzA1RjAwRkYxQQorOjEwNjBDMDAwMTNGOTAxNTMyNDA0MDA4MTBFMDAwMjUwMDIwMDIwMjEyNAorOjEwNjBEMDAwOTM3NDAwMjMyNDBBMDAwNDAyMDAyMDIxMzY4MzAwNDIyNgorOjEwNjBFMDAwQTM2MzAwMjMwRTAwMDI1OUEzNkEwMDdEOEY0QjAxNzg0MQorOjEwNjBGMDAwMDU2MEZGRkUyNDA1MDAwMkFGNTAwMTQwQTM0NTAxNDRBNgorOjEwNjEwMDAwOEY5MDAwMUMzQzBDMTAwMEFGNEMwMTc4MEEwMDAzRjk4MgorOjEwNjExMDAwMDAxMTEwMkI4RTEwMDAwNEFGNTAwMDIwOTM2RDAwMDU2RAorOjEwNjEyMDAwMzFBODAwMDI1NTAwMDE3ODI0MDQwMDhBOTM2NDAwM0ZERQorOjEwNjEzMDAwMjQwNzAwMDQwMjAwMjgyMTMwODYwMEZGMTBDNzAwMTA0OQorOjEwNjE0MDAwMjQwNDAwODEwRTAwMDI1MDAyMDAyMDIxOTM3RjAwMjNDRQorOjEwNjE1MDAwMjQxODAwMTIyNDBGRkZGRTM3RjkwMDIwQTM3OTAwMjMzMgorOjEwNjE2MDAwQTM3ODAwM0Y5MzZFMDAwNTAyMDAyMDIxMDFDRjQ4MjQ1MAorOjEwNjE3MDAwMEUwMDAyNTlBMzY5MDAwNTAyMDAyODIxMDAwMDIwMjExOQorOjEwNjE4MDAwMEUwMDAzNDAwMDAwMDAwMDBBMDAwM0Y4OEY5MDAwMUM3RQorOjEwNjE5MDAwOEUwNTAwMDQzQzBGMDAwODAzNEY0MDIxQUY0NTAwMjA0RQorOjEwNjFBMDAwOTEwRTAwMDAyNDA2MDA1MDMxQzkwMEZGMTEyNjAxN0EyQgorOjEwNjFCMDAwMjQwNDAwODg4RjU5MDFCODA3MjBGRkZFM0MwQzQwMEVENAorOjEwNjFDMDAwMDA4QzU4MjUzQzAzMTAwMEFGNDUwMTgwQUY0MDAxODQ4RQorOjEwNjFEMDAwQUY0QjAxODhBRjQzMDFCODkxMDIwMDAwMjQwQUZGODA1MQorOjEwNjFFMDAwMjQwNDAwMDQwMDRBRjgyNUExMUYwMDAwMEUwMDBDN0ZDMworOjEwNjFGMDAwMjQwNjAwMzAwQTAwMDNGODhGOTAwMDFDOEUwRjAwMDQ2NAorOjEwNjIwMDAwM0MxNDA4MDAyNjk0NUNCODNDMDEwODAwQUMyRjVDQjgzNAorOjEwNjIxMDAwQUY0RjAwMjA5MjBFMDAwMzMxQzkwMDA0MTEyMDAwMDI4QworOjEwNjIyMDAwMjQwMjAwMTIyNDAyMDAwNkEzNjIwMDNGOTIwMzAwMUIxNgorOjEwNjIzMDAwMjQwQUZGQzAzMDYyMDAzRjAwNEFGODI1QTM3RjAwM0VEOQorOjEwNjI0MDAwOTIxOTAwMDMzMzM4MDAwMTE3MDAwMTIyMDAwMDAwMDBGQQorOjEwNjI1MDAwOEUwMjAwMDhBRTgyMDAwODNDMDIwODAwOEM0MjVDQzAzRQorOjEwNjI2MDAwMTA0MDAxMkQwMDAwMDAwMDAwMDIyMUMyQTc2NDAwMDhCOAorOjEwNjI3MDAwOEUwRDAwMEMyNDBCMDAwMTI0MTQwMDE0QUY2RDAwMkNCMworOjEwNjI4MDAwOEUwODAwMTBBRjY4MDAzMDk2MDUwMDE2QTc2NTAwMzgyQworOjEwNjI5MDAwOTYwQzAwMTRBNzZDMDAzQUFGNkIwMDBDQTc2QjAwMTBCMworOjEwNjJBMDAwQTc2QjAwMTJBNzZCMDAxNEE3NkIwMDE2MTIyMDAxNEFGRgorOjEwNjJCMDAwQTM3NDAwMzQ5MjA2MDAwMzMwQzcwMDAyMkNGMDAwMDFFMgorOjEwNjJDMDAwMjYwMjAwMDg4RjkwMDAxQzBBMDAwMzczQUY4MjAwMjg4QQorOjEwNjJEMDAwOEUxNDAwMDQyNDAzMDA4MUFGNTQwMDIwOTM2ODAwMjMyRgorOjEwNjJFMDAwMzEwNTAwMTAxMEEwMDExMzAwMDAwMDAwOEY0NDAxQjgxOAorOjEwNjJGMDAwMDQ4MEZGRkUzQzA2NDAxRjAwMTEzODJCMDA2NjEwMjU2RAorOjEwNjMwMDAwM0MxMTEwMDBBRjU0MDE4MEFGODcwMDI4QUY0MDAxODREQQorOjEwNjMxMDAwQUY0MjAxODhBRjUxMDFCODBBMDAwMzc0OEY5MTAwMTQ5NQorOjEwNjMyMDAwOEUwNjAwMDQzQzE5MDAwODAzNTkyMDIxQUY0NjAwMjBDNgorOjEwNjMzMDAwOEUwNzAwMDg5MDk4MDAwMDI0MEYwMDUwMzMxNDAwRkZDRgorOjEwNjM0MDAwMTI4RjAxMDYyNDA1MDA4ODhGNDQwMUI4MDQ4MEZGRkVFNworOjEwNjM1MDAwM0MwRDQwMDkwMDExNjAyQjAwQUQxMDI1M0MxMTEwMDBEMAorOjEwNjM2MDAwQUY0NjAxODBBRjhDMDAyOEFGNDcwMTg0QUY0MjAxODg1RgorOjEwNjM3MDAwQUY1MTAxQjgwQTAwMDM3NDhGOTEwMDE0OEUwNDAwMUMwMQorOjEwNjM4MDAwMEUwMDAyM0IwMDAwMDAwMDEwNDAwMEQ3MDA0MDQ4MjFGMgorOjEwNjM5MDAwOEY5MDAwMUMyNDA1MDA4OThGNEQwMUI4MDVBMEZGRkVEOQorOjEwNjNBMDAwMDAwMDAwMDBBRjQ5MDE4MDhFMEYwMDFDM0MxNDQwMDEyQQorOjEwNjNCMDAwMDAxMTcwMkIwMEI0NDgyNTNDMTExMDAwQUY0RjAxODQzMAorOjEwNjNDMDAwQUY4RTAwMjhBRjQ5MDE4OEFGNTEwMUI4MEEwMDAzNzRBRAorOjEwNjNEMDAwOEY5MTAwMTQ5NjE5MDAwMjNDMTQwODAwMjY5NDVDQjhCMgorOjEwNjNFMDAwMzMzODAwMDQxMzAwMDA4RTNDMDI2MDAwOEUxRjAwMUMzNgorOjEwNjNGMDAwM0MwMTA4MDBBQzNGNUNCOEFGNUYwMDIwOTIwQzAwMTA3RAorOjEwNjQwMDAwMjQwQjAwMTQzMTg0MDBGRjE0OEIwMEFDMDAwMDAwMDA0QQorOjEwNjQxMDAwOTYwOTAwMDIzMTJEMDAwMTE1QTAwMTUyMDAwMDAwMDA3NAorOjEwNjQyMDAwOEUwMjAwMDRBRTgyMDAwODNDMEUwODAwOERDRTVDQzBENworOjEwNjQzMDAwMTFDMDAxNDgwMDAwMDAwMDhGNjkwMDc0M0MwRTgwMDAwQworOjEwNjQ0MDAwMjQwNDAwMDEwMTJFNjgyNUFGNkQwMDc0QTM2MDAwMDVDRgorOjEwNjQ1MDAwQUY2NDAwMEMzQzBDMDgwMDhEOEM1Q0MwOEY4ODAwMUM2NQorOjEwNjQ2MDAwQTc2NDAwMTAwMDBDNTlDMkE3NjQwMDEyQTc2NDAwMTRBRQorOjEwNjQ3MDAwQTc2NDAwMTZBNzZCMDAwODhEMDMwMDA4MjQwNDAwMDIxRgorOjEwNjQ4MDAwQUY2MzAwMkM4RDBBMDAwQ0FGNkEwMDMwOTEwNzAwMTAzQQorOjEwNjQ5MDAwQTM2NzAwMzQ4RjgyMDAxQzkwNDUwMDExQTM2NTAwMzU2RQorOjEwNjRBMDAwOEY4NjAwMUM5MEQwMDAxMkEzNzAwMDM2OEY5RjAwMUNCNgorOjEwNjRCMDAwOTNGOTAwMTNBMzc5MDAzNzhGOTAwMDFDOTYxODAwMTRFRAorOjEwNjRDMDAwQTc3ODAwMzg5NjE0MDAxNkE3NzQwMDNBOEUwRjAwMThBQgorOjEwNjREMDAwQUY2RjAwMjQ1NjIwRkRBNkFGODQwMDI4M0MwNTA4MDBCRAorOjEwNjRFMDAwMjRBNTVDQjgwRTAwMDI1RTAwMDAyMDIxOEY5MDAwMUNFNQorOjEwNjRGMDAwMEEwMDA0QjYwMDAwMjAyMTNDMDUwODAwMjRBNTVDQjg3MQorOjEwNjUwMDAwMEUwMDAyODcyNDA0MDA4MjhGOTAwMDFDMDAwMDMwMjFCRQorOjEwNjUxMDAwMEEwMDAzNzNBRjg2MDAyODNDMDQwODAwOEM4NDVDQjgzMgorOjEwNjUyMDAwMEUwMDE1NzcwMDAwMDAwMDhGOTAwMDFDMEEwMDA0OTBGOAorOjEwNjUzMDAwMDAwMDE4MjEzQzA1MDgwMDI0QTU1Q0I4MEUwMDAyODc2NQorOjEwNjU0MDAwMjQwNDAwOEI4RjkwMDAxQzAwMTEzMDJCMEEwMDAzNzM3MQorOjEwNjU1MDAwQUY4NjAwMjgzQzE5MDgwMDhGMzk1Q0I4M0MxRjA4MDA0MgorOjEwNjU2MDAwOEZGRjAwNTAyNENDRkZGRTAzM0Y3ODIxMDFGODcwMjRGOAorOjEwNjU3MDAwQUY0RTAwMjgzQzA0MDgwMDhDODQ1Q0I4M0MwOTA4MDAzRAorOjEwNjU4MDAwOEQyOTAwNTAwMDg5NjgyMTMxQTgwMDdGMDExQTI4MjEzNworOjEwNjU5MDAwMDBBNzgwMjFBRTA2MDBEOEFGOTAwMEQwQUUwMDAwREM4RQorOjEwNjVBMDAwMEEwMDAzQzJBRTBDMDEwOEFGNjAwMDg0M0MwNTA4MDA3RAorOjEwNjVCMDAwOENBNTVDQjgzQzA4MDgwMDhEMDgwMDUwMjQwQ0ZGODBCNgorOjEwNjVDMDAwM0MwMjAwMEMwMEE4QTAyMTAyOEM1ODI0QUY0QjAwMjhFQworOjEwNjVEMDAwOEUxRjAwMTQzMjgzMDA3RjAwN0E1MDIxMDE0MjcwMjEwNworOjEwNjVFMDAwQURERjAwRDg4RTE5MDAxNEFGOEUwMEQwQUREOTAwREMxRAorOjEwNjVGMDAwOEUxODAwMTAyNzBGRkZGRTBBMDAwNDE1QURDRjAxMDgwQQorOjEwNjYwMDAwNTQ4QkZFMkYyNDA1NDAwMDBBMDAwNDQ3MjQwNTEwMDA4NworOjEwNjYxMDAwMEUwMDAzMzUwMDAwMDAwMDBBMDAwM0Y4OEY5MDAwMUNGNAorOjEwNjYyMDAwOEM0NjQ0MkMzQzA1NkM2MjM0QjA3OTcwM0MwMTA4MDAwNworOjEwNjYzMDAwQUMyMDVDQjgxNEQwMDAwODI0MDQwMDAyOTc4ODAwMzQxMQorOjEwNjY0MDAwOTc4QTAwMkMwMjgwMjgyMTAxMEEzODJCMTBFMDAwMTFDMworOjEwNjY1MDAwMjQwNDAwOTIyNDA0MDAwMjBFMDAwQzlEMjQwNTAxNDAzNQorOjEwNjY2MDAwM0MwMTA4MDBBQzIyNUNCOEFGNDIwMDIwM0MwMzA4MDBBQgorOjEwNjY3MDAwOEM2MzVDQjgxMDYwMDAwNTI0MDQwMDgzMEUwMDA4Njg3OQorOjEwNjY4MDAwMDAwMDAwMDAxMDQwMDAwOTI0MDQwMDgzM0MwNTA4MDBCRAorOjEwNjY5MDAwMjRBNTVDQjgwRTAwMDI1RTAwMDAwMDAwOEY5MDAwMUM3NAorOjEwNjZBMDAwMDAxMTIwMkIwQTAwMDM3M0FGODQwMDI4MEUwMDA4NkMzMQorOjEwNjZCMDAwMDAwMDAwMDAwQTAwMDU5NjhGOTAwMDFDMEUwMDA4NzA3NAorOjEwNjZDMDAwMDAwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4MEEwMDA2M0M1OAorOjEwNjZEMDAwMjQwNDAwOEI4RTA0MDAwODBFMDAwMjNCMDAwMDAwMDAyMgorOjEwNjZFMDAwMEEwMDA1MkRBRTgyMDAwODI0MDQwMDA0MEUwMDBDOUQ1MworOjEwNjZGMDAwMjQwNTAwMzAxNDQwMDAzRjAwNDA0ODIxOEY5MDAwMUNDQQorOjEwNjcwMDAwMEEwMDA1N0QyNDA1MDA4MzBFMDAwMzQwMDIwMDI4MjFCNQorOjEwNjcxMDAwMEEwMDA0RTIwMDAwMDAwMDNDMDUwODAwMjRBNTVDQjg2MworOjEwNjcyMDAwMEUwMDAyMzAyNDA0MDA4NzhGOTAwMDFDMEEwMDA1NDlFNworOjEwNjczMDAwMDAxMTEwMkIwRTAwMDI1MDAyODAyMDIxOTM3MDAwMjNDNAorOjEwNjc0MDAwMDI4MDIwMjEzNjBEMDAxMDBFMDAwMjU5QTM2RDAwMjM5NworOjEwNjc1MDAwOEY5MDAwMUMwQTAwMDU1MjAwMDAxODIxOTIwNTAwMENDMQorOjEwNjc2MDAwMzBCRjAwMDExM0UwMDAwMzAwMDAwMDAwOTYwMjAwMEU5RAorOjEwNjc3MDAwQTQ4MjAwMkM5MjBBMDAwQzMxNDgwMDAyMTEwMEZFRjJBMworOjEwNjc4MDAwMDAwMDI4MjE5NjBCMDAxMjhFMDMwMDE0QTQ4QjAwMUExRgorOjEwNjc5MDAwMEEwMDA1NjlBQzgzMDAxQzhGODMwMDM4OEY4NzAwMzBBNgorOjEwNjdBMDAwMTA2N0ZFODQwMDAwMjAyMTNDMDkwODAwMjUyOTVDM0M3QworOjEwNjdCMDAwMDAwMzIwQzAwMDg5MzAyMThDRDQwMDAwMTI4NTAwNUVDNworOjEwNjdDMDAwMjQ3ODAwMDEzMzAzMDAwRjU0NjdGRkZBMDAwMzIwQzA1MAorOjEwNjdEMDAwMEEwMDA1MDQwMDAwMjAyMTNDMDUwODAwMjRBNTVDQjgzRgorOjEwNjdFMDAwMEUwMDAyODcyNDA0MDA4MjhGOTAwMDFDMEEwMDA1NDlENQorOjEwNjdGMDAwMDAwMDEwMjEzQzBCMDAwODAzNEIyMDIxMjQwMzAwNTAxMworOjEwNjgwMDAwMjQwQTAwMDFBRjQyMDAyMEEwODMwMDAwQTA4QTAwMDFGQQorOjEwNjgxMDAwOEY4ODAwMUM5MTA3MDAwNEEwODcwMDE4OEY4MjAwMUMzRAorOjEwNjgyMDAwOTA0NTAwMDVBMDg1MDAxOThGODYwMDFDOTBERjAwMDZBQQorOjEwNjgzMDAwQTA5RjAwMUE4Rjk5MDAxQzkzMzgwMDA3QTA5ODAwMUI5NgorOjEwNjg0MDAwOEY5NDAwMUM5MjhGMDAwOEEwOEYwMDFDOEY5MDAwMUM1QQorOjEwNjg1MDAwOTIwRTAwMDlBMDhFMDAxRDhGOEQwMDFDOTFBQzAwMEFDNQorOjEwNjg2MDAwQTA4QzAwMUU4RjhCMDAxQzNDMEMwODAwMjU4QzVDM0MwRgorOjEwNjg3MDAwOTE2MzAwMEIzQzBCMDgwMDI1NkI1QzM4QTA4MzAwMUY2NAorOjEwNjg4MDAwOEY4QTAwMUM5MTQ4MDAwQ0EwODgwMDIwOEY4NzAwMUM3NAorOjEwNjg5MDAwOTBFNTAwMERBMDg1MDAyMThGODIwMDFDMjQwNTQ2NDY0RQorOjEwNjhBMDAwOTA0NjAwMEVBMDg2MDAyMjhGOUYwMDFDOTNGOTAwMEZENworOjEwNjhCMDAwQTA5OTAwMjM4Rjk4MDAxQzkzMTQwMDEwQTA5NDAwMjQyQQorOjEwNjhDMDAwOEY4RjAwMUM5MUYwMDAxMUEwOTAwMDI1OEY5MDAwMUM2QworOjEwNjhEMDAwOEY4RTAwMzA4Rjk5MDAzODk2MEQwMDE0MDAwRTE4QzA2RQorOjEwNjhFMDAwMjVDODAwMDFBNDhEMDAyODk2MEEwMDE2MDA2QzMwMjFFRQorOjEwNjhGMDAwMDA2QkY4MjFBNDhBMDAyQTk2MDcwMDE4MzEwODAwMEZCRgorOjEwNjkwMDAwQTQ4NzAwMkNBNDg1MDAyRThFMDIwMDFDQUNDOTAwMDBCOAorOjEwNjkxMDAwQUY4ODAwMzAxMTE5MDAwM0FGRTIwMDAwMEEwMDA1N0RDNgorOjEwNjkyMDAwMDAwMDI4MjEyNTBDMDAwMTMxODQwMDBGMDAwMDI4MjFERgorOjEwNjkzMDAwMEEwMDA1N0RBRjg0MDAzODNDMDcwODAwMjRFNzVDMzg3NgorOjEwNjk0MDAwMDA4NzgwMjEwMDAwMjAyMUFDQzAwMDAwMEEwMDA1MDQ1RgorOjEwNjk1MDAwQUUwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4MEEwMDA2M0MxNworOjEwNjk2MDAwMjQwNDAwODc4RTA0MDAwNDBFMDAwMjNCMDAwMDAwMDA5NworOjEwNjk3MDAwMEEwMDA1QTFBRTgyMDAwODMwODRGRkZGMzBDNjAwRkY4OAorOjEwNjk4MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDY0NDAwMDEwNDMwMjU5OAorOjEwNjk5MDAwM0MwNzIwMDAwMEM3MjAyNTNDMDMxMDAwQUY0MDAxODBDOQorOjEwNjlBMDAwQUY0NTAxODRBRjQ0MDE4ODAzRTAwMDA4QUY0MzAxQjg1QworOjEwNjlCMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0M0MwNzYwMDA3OAorOjEwNjlDMDAwMjQwNjAwMDIxMDgwMDAwNjAwQTA4MDIxMDAxMDEwMkI3OQorOjEwNjlEMDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgxRgorOjEwNjlFMDAwM0MwOTYwMEVBRDIwMDAzNDhDRTUyMDFDOEY4MjAwMUMxOQorOjEwNjlGMDAwMjQwOEZGRkMwMEE4MTgyNEFDRTMyMDFDMEUwMDA2RjVCOAorOjEwNkEwMDAwOEM0NTAwMEMwMDEwMTAyQjhGQkYwMDE0OEZCMDAwMTBBRAorOjEwNkExMDAwMDNFMDAwMDgyN0JEMDAxODNDMDI2MDBFMzQ0NzAxMDA2NworOjEwNkEyMDAwMjQwOTAwMTgyNzRBMDQwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwNkEzMDAwMDAwMDAwMDAzQzA2MDA1MDM0QzMwMjAwQUY0NDAwMzhBMAorOjEwNkE0MDAwQUY0NTAwM0NBRjQzMDAzMDAxNDAxODIxOEY0QjAwMDBBMAorOjEwNkE1MDAwMzE2ODAwMjAxMTAwRkZGRDI0MDYwMDdGMjQwOEZGRkY5RAorOjEwNkE2MDAwOEM2QzAwMDAyNEM2RkZGRjI0NjMwMDA0QUNFQzAwMDAyMworOjEwNkE3MDAwMTRDOEZGRkIyNEU3MDAwNDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwNkE4MDAwMDAwMDAwMDAzQzBGMDAyMEFGNEYwMDMwMDAwMDAwMDA2RAorOjEwNkE5MDAwMjRBRDAyMDAwMUE1NzAyQjI1MjlGRkZGMDA4RTIwMjFDNworOjEwNkFBMDAwMTUyMEZGRTEwMUEwMjgyMTAzRTAwMDA4MDAwMDAwMDBGQworOjEwNkFCMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4QUZCMDAwMTBBQQorOjEwNkFDMDAwM0MwNTYwMEU4Q0EyMDAzNDAwODA4ODIxMTQ0MDAwMDYzMgorOjEwNkFEMDAwM0MwNDYwMDA4Qzg3MjAxQzI0MDhGRkZDMDBFODMwMjQ2NAorOjEwNkFFMDAwMzRDMzAwMDFBQzgzMjAxQzhGOEIwMDFDMjQwOTAwMDFERgorOjEwNkFGMDAwQUNBOTAwMzQ5NTY5MDAwMjhENjUwMDE0OEQ3MDAwMENGRQorOjEwNkIwMDAwMkQyNDAwODE4RDY3MDAwNDhENjYwMDA4MTA4MDAwMDcyOQorOjEwNkIxMDAwOEQ2QTAwMTAyRDJDMDAwNDE1ODAwMDBFMzBDRTAwMDc2OQorOjEwNkIyMDAwMzEyRDAwMDMxMUEwMDAwQjAwMDAwMDAwMjQwNDAwOEI5NQorOjEwNkIzMDAwMDIwMDI4MjEwRTAwMDZGNTI0MDYwMDAzMDAxMTEwMkI4OAorOjEwNkI0MDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg1MQorOjEwNkI1MDAwMjdCRDAwMjAxNUMwRkZGNjI0MDQwMDhCM0MwMzAwMjA1NQorOjEwNkI2MDAwQUY0MzAwMzAwMDAwMDAwMDI0MDIwMDAxQUY4MjAwMTQ5NworOjEwNkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MxRjAxNTA2OQorOjEwNkI4MDAwMDEzRkM4MjUyNTM4MDAwMzNDMEY2MDBFQUY0NzAwMzg5MQorOjEwNkI5MDAwMDAxODE4ODJBRjQ2MDAzQzM1RTgwMDNDQUY1OTAwMzA4MQorOjEwNkJBMDAwMjc0NzA0MDA4RjQ0MDAwMDMwODYwMDIwMTBDMEZGRkRGRQorOjEwNkJCMDAwMDAwMDAwMDAxMDYwMDAwODI0NjZGRkZGMjQwM0ZGRkZCMAorOjEwNkJDMDAwOENFQjAwMDAyNEM2RkZGRjI0RTcwMDA0QUQwQjAwMDA5RgorOjEwNkJEMDAwMTRDM0ZGRkIyNTA4MDAwNDNDMDg2MDBFQUQwOTAwMzgxMworOjEwNkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNzAwMjA0MgorOjEwNkJGMDAwQUY0NzAwMzAwMDAwMDAwMDBFMDAwNzFEMDE0MDIwMjFCQgorOjEwNkMwMDAwMDIwMDI4MjEwMDAwMjAyMTBFMDAwNkY1MjQwNjAwMDNDMgorOjEwNkMxMDAwMDAxMTEwMkI4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxRgorOjEwNkMyMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4QUZCMjAwMTg0MQorOjEwNkMzMDAwMzA5MkZGRkZBRkIxMDAxNEFGQkYwMDIwQUZCMzAwMUMxNAorOjEwNkM0MDAwQUZCMDAwMTAxMjQwMDAyQzAwMDA4ODIxMEEwMDA3QjVFOAorOjEwNkM1MDAwMjQxMzAwMDE1MEIzMDA0MDhDRTUwMDBDMDAwMDAwMEQyRgorOjEwNkM2MDAwMjYzOTAwMDEzMzMxRkZGRjI0RjgwMDIwMDIzMjM4MkI4RgorOjEwNkM3MDAwMTBFMDAwMjFBRjk4MDAxQzhGODIwMDE0MTQ0MDAwMUUwOQorOjEwNkM4MDAwOEY4NzAwMUMzQzA2NzAwMDNDMDMyMDAwOENFNDAwMDA1MQorOjEwNkM5MDAwMDA4NjI4MjQxNEEzMDAxODhGODUwMDNDMDAwNDQ0MDJCOQorOjEwNkNBMDAwM0MwOTgwMDAwMDg5ODAyNDE0QTBGRkVBMzEwNjAwRkYxRgorOjEwNkNCMDAwMjQwQTAwMDIxMENBMDAyRTI4Q0IwMDAzMTE2MDAwMTYxRgorOjEwNkNDMDAwMjQwQzAwMDMxNEQzRkZFNzI2MzkwMDAxMDIwMDI4MjExOQorOjEwNkNEMDAwMEUwMDA3MDMyNDA0MDAwMThGODcwMDFDQUY4MjAwM0NENAorOjEwNkNFMDAwMjYzOTAwMDEzMzMxRkZGRjI0RjgwMDIwMDIzMjM4MkIwRgorOjEwNkNGMDAwMTRFMEZGRTFBRjk4MDAxQzAyMjAxMDIxOEZCRjAwMjA5QworOjEwNkQwMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyOQorOjEwNkQxMDAwMDNFMDAwMDgyN0JEMDAyODEwQ0MwMDFBMjQwRDAwMDQ1MQorOjEwNkQyMDAwMTRDREZGRDAyNjM5MDAwMTMwOEVGRkZGMDAwRTE5QzBCMAorOjEwNkQzMDAwOEY0NDAxQjgwNDgwRkZGRTNDMEYxMDAwM0MxMDIwMDQ3QgorOjEwNkQ0MDAwQUY0MzAxODBBRjQwMDE4NEFGNTAwMTg4QUY0RjAxQjgxRAorOjEwNkQ1MDAwMEEwMDA3QjAyNjM5MDAwMTBFMDAwNkY1MjQwNDAwODQ1RAorOjEwNkQ2MDAwMTYwMEZGQkY4Rjg3MDAxQzBBMDAwN0FGQUY4MDAwM0NGMgorOjEwNkQ3MDAwMDIwMDI4MjEwRTAwMDcwMzAwMDAyMDIxMEEwMDA3Q0U5MAorOjEwNkQ4MDAwOEY4NzAwMUMwRTAwMDc0MzAyMDAyMDIxOEY4NzAwMUMwNAorOjEwNkQ5MDAwMEEwMDA3Q0ZBRjgyMDAzQzMwODJGRkZGMTQ0MDAwMDM5RgorOjEwNkRBMDAwMDAwMDE4MjEwMDA0MjQwMjI0MDMwMDEwMzA4NTAwRkY5NQorOjEwNkRCMDAwMTRBMDAwMDUzMDg3MDAwRjI0NjYwMDA4MDAwNDIyMDI5QQorOjEwNkRDMDAwMzBDMzAwRkYzMDg3MDAwRjE0RTAwMDA1MzA4OTAwMDM1NgorOjEwNkREMDAwMjQ2ODAwMDQwMDA0MjEwMjMxMDMwMEZGMzA4OTAwMDMwRAorOjEwNkRFMDAwMTUyMDAwMDUzODhCMDAwMTI0NkEwMDAyMDAwNDIwODI2RgorOjEwNkRGMDAwMzE0MzAwRkYzODhCMDAwMTMxNjQwMDAxMTA4MDAwMDIzNAorOjEwNkUwMDAwMjQ2QzAwMDEzMTgzMDBGRjAzRTAwMDA4MDA2MDEwMjFDMgorOjEwNkUxMDAwMzA4QkZGRkYwMDBCMzk0MjMwRTYwMEZGM0MwOTA4MDBEMQorOjEwNkUyMDAwMjUyOTVCQjgwMDA2NDA4MDAxMDk2MDIxOEQ4NzAwMDA5QworOjEwNkUzMDAwMzE2NDAwMUYyNDBBMDAwMTAwOEExODA0MzBBNTAwRkZGNQorOjEwNkU0MDAwMDBFMzIwMjUxNEEwMDAwMjAwMDMxMDI3MDBFMjIwMjQwNAorOjEwNkU1MDAwMjQwRjAwMDEwMENGNzAwNDAxMDk2ODIxMDAwRTI4MjdDQgorOjEwNkU2MDAwMTQ4MDAwMDVBREE0MDAwMDhGODYwMDBDMDBBNjEwMjQzRAorOjEwNkU3MDAwMDNFMDAwMDhBRjgyMDAwQzhGODgwMDBDMDFDODEwMjVDOQorOjEwNkU4MDAwMDNFMDAwMDhBRjgyMDAwQzNDMDYwMDFGM0MwMzYwMDBEQQorOjEwNkU5MDAwMzA4NEZGRkYzNEM1RkY4MDI0MDIwMDIwQUM2MDIwMDg0RQorOjEwNkVBMDAwQUM2MDIwMENBQzYwMjAxMEFDNjUyMDE0QUM2NDIwMThFMQorOjEwNkVCMDAwQUM2MjIwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMDAwMDhCOQorOjEwNkVDMDAwMDAwMDAwMDAyN0JERkZFODI0MDJGRkZGQUZCRjAwMTA1NQorOjEwNkVEMDAwQUY4MjAwMEMwMDAwMjAyMTNDMDYwODAwMjRDNjVCQjhFRAorOjEwNkVFMDAwMjQwNUZGRkYyNDg5MDAwMTAwMDQ0MDgwMzEyNEZGRkZCNgorOjEwNkVGMDAwMDEwNjE4MjEyQzg3MDAyMDE0RTBGRkZBQUM2NTAwMDA4MQorOjEwNkYwMDAwMEUwMDA4MzkwMDAwMjAyMTI0MDIwMDAxM0MwNDYwMDAyQQorOjEwNkYxMDAwMjQwNTAwMjBBQzgyMjAxOEFDODUyMDAwMDAwMDAwMDA3MQorOjEwNkYyMDAwMDAwMDAwMDAwMDAwMDAwMDI0NEEwMDAxMzE0MkZGRkY4MQorOjEwNkYzMDAwMkM0NjA0MDAxNEMwRkZGNzhGQkYwMDEwMDNFMDAwMDhDOAorOjEwNkY0MDAwMjdCRDAwMTg4RjgzMDAwODJDNjIwNDAwMDNFMDAwMDhBRQorOjEwNkY1MDAwMzg0MjAwMDE4RjgzMDAwODI0NjIwMDAxMDNFMDAwMDgyQQorOjEwNkY2MDAwQUY4MjAwMDg4RjgzMDAwODI0NjJGRkZGMDNFMDAwMDg1RgorOjEwNkY3MDAwQUY4MjAwMDgyN0JERkZFMEFGQjEwMDE0QUZCRjAwMTgxQgorOjEwNkY4MDAwQUZCMDAwMTA4RjZCMDAzMDNDMDY2MDAwMDA4MDg4MjE5RAorOjEwNkY5MDAwQUNDQjIwMDg4RjZBMDAyQzNDMDI4MDAwMjQwMzAwMDg0MAorOjEwNkZBMDAwQUNDQTIwMEM5NzY5MDAzQTk3NjgwMDM4MDAwOTJDMDA5OQorOjEwNkZCMDAwMzEwN0ZGRkYwMEE3MjAyNUFDQzQyMDEwQUNDMjIwMTQ2RAorOjEwNkZDMDAwQUNDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwNkZEMDAwM0MwMzYwMDA4QzZEMjAwMDMxQUMwMDA4MTU4MEZGRjk4NworOjEwNkZFMDAwMDAwMDAwMDA4QzZFMjAxNDA1QzAwMDIwMDAwMDAwMDA4RQorOjEwNkZGMDAwMEUwMDA3RkQ4Rjg0MDAwQzAwMDI0MDgwM0MwOTA4MDA1MQorOjEwNzAwMDAwMjUyOTVCQjgwMTA5MzgyMThDRTQwMDAwMEUwMDA3RkQzQQorOjEwNzAxMDAwMDAwMjgxNDAwMjAyMjAyMTMwOTBGRkZGMDIwMDIwMjE2NworOjEwNzAyMDAwMEUwMDA4MUIwMDAwMjgyMTNDMEM4MDAwMDIyQzU4MjU3MworOjEwNzAzMDAwMzIxMEZGRkYzQzExNjAwMDI0MEEwMDIwQUUyQjIwMTQwOAorOjEwNzA0MDAwQUUzMDIwMThBRTJBMjAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwNzA1MDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE4OEZCMTAwMTQ0MworOjEwNzA2MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEM2NjIwMTRCQworOjEwNzA3MDAwM0MwMjAwMUYzNDQzRkY4MDNDMUZGRkU4MDBDM0MwMjRENAorOjEwNzA4MDAwMzdGOTA4MDAwMzE5ODAyMTAwMTA3OUMyM0MwQzgwMDBGOAorOjEwNzA5MDAwMDIyQzU4MjUzMUYwRkZGRjNDMTE2MDAwMjQwQTAwMjAyQgorOjEwNzBBMDAwQUUyQjIwMTRBRTMwMjAxOEFFMkEyMDAwMDAwMDAwMDBDNQorOjEwNzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAxMDIxOEZCRjAwMTgzNworOjEwNzBDMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyRQorOjEwNzBEMDAwMjdCREZGRThBRkIwMDAxMDM0MDJGRkZGMzA5MEZGRkY4NAorOjEwNzBFMDAwQUZCRjAwMTQxMjAyMDAwNjAyMDAyMDIxMEUwMDA4Mzk3MgorOjEwNzBGMDAwMDAwMDAwMDAwMjAwMjAyMTBFMDAwODFCMjQwNTAwMDFGMgorOjEwNzEwMDAwOEY4NDAwMDg4RkJGMDAxNDhGQjAwMDEwMjQ4M0ZGRkYwRQorOjEwNzExMDAwMjdCRDAwMTgwM0UwMDAwOEFGODMwMDA4MDAwNDM5QzI0RgorOjEwNzEyMDAwMzBFNjAwM0YwMDA0M0I0MjAwMDcxODQwMjQwMjEwMDBGNAorOjEwNzEzMDAwMkNDNDAwMjAyNEM4RkZFMEFGNDIwMDJDMjQ2MzAwMDFDRgorOjEwNzE0MDAwMTQ4MDAwMDMzMEE5MDBGRjAwMDcxODQwMzEwNjAwRkYzQgorOjEwNzE1MDAwMDAwMzYwODAyNDA4MDAwMTAxOUE1ODIxM0MwQTAwMEVCNworOjEwNzE2MDAwMDBDODI4MDQwMTZBMzgyMTExMjAwMDA1MDAwNTMwMjdENQorOjEwNzE3MDAwOENFOTAwMDAwMTI1MzAyNTAzRTAwMDA4QUNFNjAwMDBBMgorOjEwNzE4MDAwOENFRTAwMDAwMUM2NjgyNDAzRTAwMDA4QUNFRDAwMDBBRQorOjEwNzE5MDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwM0MwNDYwMDA5MworOjEwNzFBMDAwOEM4NTA4MDgzNDAzRjAwMDMwQTJGMDAwNTA0MzAwMDYzQworOjEwNzFCMDAwMjQwMjAwMDE4Qzg3MDgwODM0MDRFMDAwMzBFNkYwMDA2NworOjEwNzFDMDAwMTBDNDAwMUUyNDAyMDAwMkFGODIwMDQwM0MxMDYwMDA4OAorOjEwNzFEMDAwM0MwQTAyMDBBRTBBMDgxNDI0MDkxMDAwM0MwODAwMEUwNAorOjEwNzFFMDAwOEUwMzQ0MDAwMzQ4MjAyMUFGNDkwMDJDMjQwNTAxMjBEMAorOjEwNzFGMDAwMEUwMDBDRTMwMDAwMzAyMThGODMwMDQwMTA2MDAwMDQ3QgorOjEwNzIwMDAwM0MwMjE2OTEyNDBCMDAwMTEwNkIwMDBFM0MwMjNENkNGOQorOjEwNzIxMDAwMzQ0RjAwOTBBRTBGNDQwODhGQkYwMDE0OEZCMDAwMTBBMQorOjEwNzIyMDAwM0MwQzYwMDAyNDBFMTAwMDNDMEQwMjAwMjdCRDAwMTgyRAorOjEwNzIzMDAwQUQ4RTQ0MjAwM0UwMDAwOEFEOEQwODEwMEEwMDA5MEE1NQorOjEwNzI0MDAwQUY4MDAwNDAzQzAyMThEQTM0NEYwMDkwQUUwRjQ0MDg4MworOjEwNzI1MDAwOEZCRjAwMTQ4RkIwMDAxMDNDMEM2MDAwMjQwRTEwMDA5MworOjEwNzI2MDAwM0MwRDAyMDAyN0JEMDAxOEFEOEU0NDIwMDNFMDAwMDg0RAorOjEwNzI3MDAwQUQ4RDA4MTAwQTAwMDhERTI0MDUwMDAxMEEwMDA4REVCMgorOjEwNzI4MDAwMDAwMDI4MjEzQzA4MDgwMDI1MDg1RkM0MjQwNEZGRkZGMworOjEwNzI5MDAwMDEwMDE4MjEyNDAyMDAxRTI0NDJGRkZGQUM2NDAwMDBGQworOjEwNzJBMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMDcwODAwMjRFNzYwNDAxQworOjEwNzJCMDAwOENFNUZGRkMyNDA0MDAxQzI0MDYwMDAxMzA4QTAwMUYxQQorOjEwNzJDMDAwMDE0NjQ4MDQyNDg0MDAwMTAwMDkxMDI3MkM4MzAwMjA3MworOjEwNzJEMDAwMTQ2MEZGRkEwMEEyMjgyNEFDRTVGRkZDM0MwNTY2NjZCQQorOjEwNzJFMDAwMzRBNDYxNkUzQzA2MDgwMDI0QzY2MTAwQUY4NDAwNThENworOjEwNzJGMDAwQUY4ODAwOUMyNDA0RkZGRjAwQzAxODIxMjQwMjAwMUY1NworOjEwNzMwMDAwMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZEMjQ2MzAwMDQzRAorOjEwNzMxMDAwM0MwNzY2NjYzQzA1MDgwMDI0QTU2MEMwQUY4NjAwNDhBRgorOjEwNzMyMDAwMzRFNjYxNkVBRjg2MDA5ODI0MDRGRkZGMDBBMDE4MjFBOAorOjEwNzMzMDAwMjQwMjAwMEYyNDQyRkZGRkFDNjQwMDAwMDQ0MUZGRkQ2MworOjEwNzM0MDAwMjQ2MzAwMDQzQzBCNjY2NjNDMDYwODAwMjRDNjYwNDBDQgorOjEwNzM1MDAwMzU2ODYxNkVBRjg1MDBBNEFGODgwMDcwMjQwNEZGRkYxQworOjEwNzM2MDAwMDBDMDE4MjEyNDAyMDAxRjI0NDJGRkZGQUM2NDAwMDA2QgorOjEwNzM3MDAwMDQ0MUZGRkQyNDYzMDAwNDNDMEQ2NjY2M0MwQTA4MDBERQorOjEwNzM4MDAwMjU0QTYxODAzNUFDNjE2RUFGODYwMDkwQUY4QzAwNUNBMQorOjEwNzM5MDAwMjQwNEZGRkYwMTQwMTgyMTI0MDIwMDAzMjQ0MkZGRkZDMAorOjEwNzNBMDAwQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0M0MwOTA4MDBCNAorOjEwNzNCMDAwMjUyOTYxOTA4RDI3RkZGQzI0MDQwMDA2MjQwNTAwMDE4NworOjEwNzNDMDAwMzA5OTAwMUYwMzI1QzAwNDI0ODQwMDAxMDAxODc4Mjc4OQorOjEwNzNEMDAwMkM4RTAwMjAxNUMwRkZGQTAwRUYzODI0QUQyN0ZGRkNFQgorOjEwNzNFMDAwM0MwOTY2NjYyNDAzMDQwMDI0MDQwM0RDMjQwNTAyMDAyRgorOjEwNzNGMDAwMjQwNjAwNjYzNTIyNjE2RTNDMDgwODAwMjUwODVDQzQzRQorOjEwNzQwMDAwQUY4MjAwNzRBRjgzMDA0NEFGODMwMDZDQUY4MzAwNTA0MQorOjEwNzQxMDAwQUY4MzAwODRBRjhBMDA4Q0FGODQwMDY0QUY4NTAwNENEQQorOjEwNzQyMDAwQUY4NjAwNTRBRjg0MDA3OEFGODUwMDYwQUY4NjAwODBERgorOjEwNzQzMDAwMDEwMDE4MjEyNDAyMDAwMjI0NDJGRkZGQUM2MDAwMDA3QQorOjEwNzQ0MDAwMDQ0MUZGRkQyNDYzMDAwNDI0MDQwMDAzMjQwMzAwMEMxMgorOjEwNzQ1MDAwM0MwQTA4MDAyNTRBNUNEMEFGOEEwMDY4MEEwMDA5QjFERQorOjEwNzQ2MDAwMjQwNUZGRkYwMDA0MTg4MDI0ODQwMDAxMDA2ODU4MjFDRgorOjEwNzQ3MDAwMkM4NzAwQzAxNEUwRkZGQkFENjUwMDAwM0MwRTY2NjY4MworOjEwNzQ4MDAwMzVDRDYxNkUyNDBDMTdBMDI0MDgxODAwQUY4RDAwODgzQworOjEwNzQ5MDAwQUY4QzAwOTQwM0UwMDAwOEFGODgwMDdDMjQ4NDAwN0Y1OAorOjEwNzRBMDAwMDAwNDIxQzIwMDAwNDAyMTAwMDAzMDIxMDAwMDM4MjFFQQorOjEwNzRCMDAwMDAwMDI4MjEwQTAwMDlDOEFGODQwMEEwMTA2MDAwMDY1RgorOjEwNzRDMDAwMjRFNzAwMDEwMEM0MzAyMTI0QTUwMDAxMkNDMjBCRjVFMworOjEwNzREMDAwMTQ0MEZGRkEyQ0EzMDA2NjNDMDkwODAwMjUyOTYxODBBRQorOjEwNzRFMDAwMDEyMDE4MjEyNDAyMDAwMzI0NDJGRkZGQUM2MDAwMDBBOQorOjEwNzRGMDAwMDQ0MUZGRkQyNDYzMDAwNDEwRTAwMDFBMjRFM0ZGRkZCMQorOjEwNzUwMDAwMDAwMzI5NDIxMEEwMDAwQTAwMDAyMDIxMjQwNkZGRkZFQQorOjEwNzUxMDAwM0MwMzA4MDAyNDYzNjE4MDI0ODQwMDAxMDA4NTUwMkIxMworOjEwNzUyMDAwQUM2NjAwMDAyNTA4MDAwMTE1NDBGRkZCMjQ2MzAwMDQ0MQorOjEwNzUzMDAwMzBFMjAwMUYxMDQwMDAwODAwMDg2ODgwMjQwQzAwMDFBMQorOjEwNzU0MDAwMDA0QzM4MDQwMDA4NTg4MDAxNjkyODIxMjRFNkZGRkYxOAorOjEwNzU1MDAwMDNFMDAwMDhBQ0E2MDAwMDAxQTk0MDIxMjQwOUZGRkZCOAorOjEwNzU2MDAwQUQwOTAwMDAwM0UwMDAwODAwMDAwMDAwQUY0NDAwMjg1RgorOjEwNzU3MDAwM0MwNDAwMEMwMzQ0MjAyMTAwMDUyODgyMEEwMDBDRTM4RgorOjEwNzU4MDAwMDAwMDMwMjEwMDA0MjE4MDNDMDM2MDAwQUM2NDEwMDgzRQorOjEwNzU5MDAwMDAwMDAwMDAwMDA1Mjk4MEFDNjUxMDBDMDAwMDAwMDAxMAorOjEwNzVBMDAwMDNFMDAwMDg4QzYyMTAwQzI3QkRGRkU4MDA4MDI4MjE1MgorOjEwNzVCMDAwMjQwNDAwMzhBRkJGMDAxNDBFMDAwOUY4QUZCMDAwMTA2QgorOjEwNzVDMDAwMjQwNDBFMDBBRjQ0MDAyODNDMTAwMDBDMDM1MDIwMjE3RQorOjEwNzVEMDAwMjQwNTAwMTAwRTAwMENFMzAwMDAzMDIxMDM1MDEwMjFBMAorOjEwNzVFMDAwQUM0MDAwMDBBQzQwMDAwNDI0MDQwMDM4OEZCRjAwMTRGRAorOjEwNzVGMDAwOEZCMDAwMTAyNDA1M0ZGRjI3QkQwMDE4MEEwMDA5RjhDRQorOjEwNzYwMDAwOEM0MzAwMDAwMDA0MjE4MDNDMDM2MDAwQUM2NDEwMDgzRgorOjEwNzYxMDAwMDAwMDAwMDA4QzYyMTAwQzAzRTAwMDA4MDAwMjExODJFMAorOjEwNzYyMDAwMjdCREZGQzhBRkI0MDAyMDhGOTQwMDY4QUZCRTAwMzAwNAorOjEwNzYzMDAwQUZCNzAwMkNBRkI2MDAyODAwMDBCODIxMDA4MEIwMjEwMQorOjEwNzY0MDAwMjQxRTAwQzBBRkJGMDAzNEFGQjUwMDI0QUZCMzAwMUM5MAorOjEwNzY1MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMEEwMDBBMzU4NQorOjEwNzY2MDAwQUZBNTAwM0M1MDQwMDAwMThGOTQwMDY4MjdERUZGRkY2QgorOjEwNzY3MDAwMTNDMDAwMjgyNjk0MDAwNDhFOTIwMDAwM0MwMzA4MDBFQQorOjEwNzY4MDAwMjQ2MzVGQzAxMjQwRkZGNzAyODMxMDJCM0MwNDA4MDAwNAorOjEwNzY5MDAwMjQ4NDVDQzQwMjg0MTAyMzAwMDJBOEMwMDAwMDk4MjE0NgorOjEwNzZBMDAwMEEwMDBBNDQyNDExMDAwMTAwMTE4ODQwMTIyMDAwMjYxQgorOjEwNzZCMDAwMDAwMDAwMDAwMkIzODAyMTAyNTEyODI0MDIwMDIwMjE5MgorOjEwNzZDMDAwMTBBMEZGRjkyNjczMDAwMTBFMDAwQTAxMDAwMDAwMDA1RgorOjEwNzZEMDAwMDAxNjY4NDAzMkVDMDAwMTAxQUMyMDIxMEUwMDA5RjhEMAorOjEwNzZFMDAwMDIwMDI4MjE4Rjg5MDA5NDI2RjcwMDAxOEZBNjAwM0MxNAorOjEwNzZGMDAwM0FFQjAwMDEzMTZBMDAwMTI1MjhGRkZGMDAxMTM4MjcwRAorOjEwNzcwMDAwMDJDQUIwMjFBRjg4MDA5NDE2RTZGRkU3MDI0NzkwMjQzMgorOjEwNzcxMDAwQUU5MjAwMDAwMkUwMTAyMThGQkYwMDM0OEZCRTAwMzAxNworOjEwNzcyMDAwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjBBRgorOjEwNzczMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBFRgorOjEwNzc0MDAwMDNFMDAwMDgyN0JEMDAzODNDMEUwODAwMjVDRTVGQzBDRQorOjEwNzc1MDAwMDI4RTEwMkIwQTAwMEEzMEFFOTIwMDAwMjdCREZGRDgxRgorOjEwNzc2MDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwQUZCMzAwMUMyQQorOjEwNzc3MDAwQUZCMjAwMTgwMEEwODgyMTEwQTAwMDFGMDAwNDgwNDBCNAorOjEwNzc4MDAwM0MxMzA4MDAyNjczNUNDNDBBMDAwQTdEMjQxMjAwMDEyMQorOjEwNzc5MDAwMTIyMDAwMTkyNjEwMDAwMTBFMDAwQTE4MDIwMDIwMjFGNAorOjEwNzdBMDAwMDAwMjMxNDIyNDQ0RkZBMDAwMDYxODgwMzA0NTAwMUYyQgorOjEwNzdCMDAwMkM4MjE3QTEwMDczMTgyMTI2MzFGRkZGMTA0MEZGRjQxRgorOjEwNzdDMDAwMDBCMjMwMDQ4QzY5MDAwMDAyMDAyMDIxMjQwNTNGRkYzNAorOjEwNzdEMDAwMDEyNjQwMjQxNTAwRkZFRTAxMjYzODI1MEUwMDA5Rjg4OQorOjEwNzdFMDAwQUM2NzAwMDA4RjhBMDA5NDI2MTAwMDAxMjU0NzAwMDEzNQorOjEwNzdGMDAwMTYyMEZGRTlBRjg3MDA5NDhGQkYwMDIwOEZCMzAwMUNENQorOjEwNzgwMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg5MQorOjEwNzgxMDAwMjdCRDAwMjg4Rjg1MDA5QzAwODA1ODIxMDAwMDQwMjE1MgorOjEwNzgyMDAwMDAwMDQ4MjEyNDBBMDAxRjNDMEMwODAwMjU4QzYwM0MwNQorOjEwNzgzMDAwM0MwRDA4MDAyNUFENUZDNDhDQTYwMDAwNTBDMDAwMTRBQworOjEwNzg0MDAwMDAwMDQwMjEwMEFEMTAyMzAwMDIzOEMwMjQwMzAwMDFENQorOjEwNzg1MDAwMEEwMDBBQjYwMDAwMjAyMTE1MDAwMDAzMDBFNDEwMjFGMAorOjEwNzg2MDAwMjQ0ODIwMjQwMDAwNDgyMTI1MjkwMDAxNTEyQjAwMTMyMQorOjEwNzg3MDAwMjUwNkRGREMxMDYwMDAwNjI0ODQwMDAxMDBDMzcwMjRBQworOjEwNzg4MDAwMTVDMEZGRjUwMDAzMTg0MDBBMDAwQUI0MDAwMDQwMjFBQgorOjEwNzg5MDAwMTBBQzAwMjYyNEEzMDAwNDAwNjAyODIxMjU0QUZGRkYyNQorOjEwNzhBMDAwMTU0MEZGRTVBRjg1MDA5QzUxMkIwMDA0MjUwNkRGREM2OQorOjEwNzhCMDAwMDAwMDQwMjEwM0UwMDAwODAxMDAxMDIxMDAwNjYxNDJBMQorOjEwNzhDMDAwMzBDNTAwMUYwMDBDNTA4MDNDMDcwODAwMjRFNzVGQzQ0RgorOjEwNzhEMDAwMjQwNDAwMDEwMTQ3MzAyMTExMjAwMDBGMDBBNDIwMDRERQorOjEwNzhFMDAwM0MwNTA4MDAyNEE1NjA0MDE0ODAwMDA1MjUyOUZGRkYwMQorOjEwNzhGMDAwMjRDNjAwMDQxMEM1MDAxMTAwMDAwMDAwMjQwNDAwMDE4QgorOjEwNzkwMDAwOENDRjAwMDAwMDA0QzAyNzAwMDQyMDQwMDFGODY4MjQ0OAorOjEwNzkxMDAwMTUyMEZGRjVBQ0NEMDAwMDhGOTkwMDc4MDEwMDEwMjFGMworOjEwNzkyMDAwMDMyQjQ4MjMwM0UwMDAwOEFGODkwMDc4M0MwNTA4MDBEQQorOjEwNzkzMDAwMjRBNTVGQzQwQTAwMEFCRTAwMDA0MDIxM0MwNjA4MDBERQorOjEwNzk0MDAwMjRDNjVGQzQwQTAwMEFENzI0MDQwMDAxMzA4ODAwRkY1RgorOjEwNzk1MDAwMjQwMjAwMDIxMTAyMDAwQTI0MDMwMDAzMTEwMzAwNUM0OAorOjEwNzk2MDAwOEY4OTAwQTQyNDA0MDAwNDExMDQwMDVGMjQwNTAwMDU4RAorOjEwNzk3MDAwMTEwNTAwNjcwMDAwMTgyMTAzRTAwMDA4MDA2MDEwMjFENQorOjEwNzk4MDAwOEY4OTAwNDgzQzBDMDgwMDI1OEM2MTAwM0MwNDA4MDBFRAorOjEwNzk5MDAwMjQ4NDYxODAyNDAzMDAyMDEwNjAwMDBGMDAwMDU4MjExRgorOjEwNzlBMDAwMjQwRDAwMDIyNDBFMDAwMzNDMEYwODAwMjVFRjYxMDBBNworOjEwNzlCMDAwOEQyNzAwMDAxNEUwMDAwQjMwRjlGRkZGMjUyOTAwMDQ5QgorOjEwNzlDMDAwMDEyNEMwMkI1MzAwMDAwMTAxODA0ODIxMjQ2M0ZGRkZFNAorOjEwNzlEMDAwNTQ2MEZGRjg4RDI3MDAwMDAxNjAxODIxMDNFMDAwMDhDMworOjEwNzlFMDAwMDA2MDEwMjExMzIwMDAzMjNDMDUwMEZGMzBFMjAwRkY1MAorOjEwNzlGMDAwMDA0MDMwMjExMDQwMDA0MjAwMDA1MDIxMjQwNTAwMDFDOQorOjEwN0EwMDAwMDAwMDIwMjEwMDA1Qzg0MDAwQTZDMDI0MTcwMDAwMDM4NAorOjEwN0ExMDAwMzMyNTAwRkYxNEEwRkZGQjI0ODQwMDAxMDEyQ0MwMjNBOAorOjEwN0EyMDAwMDAxODI4QzAwMEFBNjAyMTAwOEM1MDIxMzE0NDAwMUY5QQorOjEwN0EzMDAwMjQwQzAwMDEwMDhDMTgwNDAwMDMxMDI3MDBFMjMwMjRGRAorOjEwN0E0MDAwMTEwRDAwNDFBRDI2MDAwMDExMEUwMDRDMDAwQTE4NDAzNworOjEwN0E1MDAwMTEwRDAwMzY4Rjg3MDA2QzUxMEUwMDU2OEY4QzAwNjAyMAorOjEwN0E2MDAwMjQwRDAwMDQxMTBEMDA1QThGOEUwMDg0MjQwRTAwMDU5MQorOjEwN0E3MDAwMTUwRUZGREEwMTYwMTgyMTI0MEIxNDMwMTE0MDAwMDZBNgorOjEwN0E4MDAwMDAwMDE4MjE4Rjg0MDBBMDI0NjMwMDAxMDA2QTQwMkJBRAorOjEwN0E5MDAwMTUwMEZGRkQwMTY0NTgyMThGOEEwMDgwQUY4OTAwOEM5QQorOjEwN0FBMDAwMDE2MDE4MjEyNTQ5RkZGRjBBMDAwQjBFQUY4OTAwODBGNQorOjEwN0FCMDAwMDBFNTIwMjQwMDA3MzYwMjEwODBGRkQwMjQwQTAwMThCOQorOjEwN0FDMDAwMDAwNzU0MDIzMTQ2MDBGRjBBMDAwQjE2MjQwQTAwMTA3QQorOjEwN0FEMDAwM0MwQzA4MDAyNThDNjBDMDNDMDQwODAwMjQ4NDYxMDAzNAorOjEwN0FFMDAwMEEwMDBBRkQyNDAzMDAxMDNDMEMwODAwMjU4QzYwNDBBRAorOjEwN0FGMDAwM0MwNDA4MDAyNDg0NjBDMDBBMDAwQUZDOEY4OTAwOTBCRQorOjEwN0IwMDAwMDAwNzFBMDIzMDY2MDBGRjBBMDAwQjE2MjQwQTAwMDg1QworOjEwN0IxMDAwOEY4OTAwOEMzQzBDMDgwMDI1OEM2MTgwM0MwNDA4MDA5NworOjEwN0IyMDAwMjQ4NDYxOTAwQTAwMEFGRDI0MDMwMDA0MDAwQTQwODBCNgorOjEwN0IzMDAwMjUwQjAwMzAyNEU2RkZGRjAxNjAxODIxQUY4OTAwNDhDMworOjEwN0I0MDAwMEEwMDBCMEVBRjg2MDA2QzAwMEFDOTgyMDAxOTc4ODAwQgorOjEwN0I1MDAwM0MwNzA4MDAyNEU3NjBDMDAxRTcyMDIxMDAwQTE4NDIyMgorOjEwN0I2MDAwOEM4RjAwMDAzMDc5MDAxRjAzMkMzODA0MDAwN0MwMjdEOQorOjEwN0I3MDAwMDFGODYwMjQwQTAwMEIyQkFDOEMwMDAwMDAwMzMxNDI5QQorOjEwN0I4MDAwMDAwNjI4ODAwMEFGMjgyMTMwNjIwMDFGOENCODAwMDA1QQorOjEwN0I5MDAwMjQ2MzAwMDEwMDRDQzgwNDAwMDMyMTQyMDAxOTM4Mjc2NworOjEwN0JBMDAwMDAwNDEwODAwMzA3MzAyNDAwNEYyMDIxMEEwMDBCNkZDRgorOjEwN0JCMDAwQUNBNjAwMDAwMDBBNjhDMDI1QUIwMDMyMjU4QUZGRkY5MgorOjEwN0JDMDAwMDE2MDE4MjFBRjg5MDBBNDBBMDAwQjBFQUY4QTAwNjA4MworOjEwN0JEMDAwMjU0QjEwMzBBRjg5MDA5MDAxNjAxODIxMjVDOUZGRkZBNworOjEwN0JFMDAwMEEwMDBCMEVBRjg5MDA4NDMwODYwMDA3MkNDMjAwMDYwNQorOjEwN0JGMDAwMTA0MDAwMTQwMDAwMDAwMDAwMDY0MDgwM0MwMzA4MDAxNAorOjEwN0MwMDAwMjQ2MzU5RDQwMTAzMzgyMThDRTQwMDAwMDA4MDAwMDg2QgorOjEwN0MxMDAwMDAwMDAwMDAyNDA5MDAwMzEwQTkwMDBFMDAwMDAwMDA2RAorOjEwN0MyMDAwMjQwQTAwMDUxMEFBMDAwQjAwMDAwMDAwMjQwQjAwMDEyQworOjEwN0MzMDAwMTBBQjAwMDgwMDAwMDAwMDhGOEMwMEEwMTBBQzAwMDUwNQorOjEwN0M0MDAwMDAwMDAwMDAwM0UwMDAwODAwMDAxMDIxMEEwMDBBOUM2OAorOjEwN0M1MDAwMDBBMDIwMjEwQTAwMEFFQTAwQzAyMDIxMjdCREZGRTg3OQorOjEwN0M2MDAwMzA4NDAwRkYyNDAzMDAwMjEwODMwMDBCQUZCRjAwMTAxQworOjEwN0M3MDAwMjQwNjAwMDMxMDg2MDAzQTI0MDgwMDA0MTA4ODAwNjhENworOjEwN0M4MDAwMjQwRTAwMDUxMDhFMDA3RjJDQUYxNDMwOEZCRjAwMTAyMworOjEwN0M5MDAwMDNFMDAwMDgyN0JEMDAxODJDQTIwMDMwMTQ0MEZGRkNCMAorOjEwN0NBMDAwOEZCRjAwMTAyNEE1RkZEMDAwMDUzMUMyMDAwNjY4ODBGOAorOjEwN0NCMDAwM0MwNzA4MDAyNEU3NjEwMDAxQTczMDIxOENDOTAwMDBCRgorOjEwN0NDMDAwMDAwNTI4ODIzMEFDMDAxRjI0MEIwMDAxMDE4QjUwMDRGQQorOjEwN0NEMDAwOEY4NDAwNDgwMTJBNDAyNUFDQzgwMDAwOEM4MzAwMDAzNgorOjEwN0NFMDAwNTA2MDAwMDFBRjg2MDA0ODhGOTgwMDZDMzBBRTAwMDFGNAorOjEwN0NGMDAwMjRBNkZGRkYyNzBGMDAwMTE1QzAwMDAyQUY4RjAwNkMwNAorOjEwN0QwMDAwMjRBNjAwMDEwMDA2NDE0MjAwMDgyMDgwMDA4NzE4MjFCNworOjEwN0QxMDAwOEM3OTAwMDAzMEMyMDAxRjI0MDYwMDAxMDA0NkY4MDRFMAorOjEwN0QyMDAwMDMzRjM4MjQxMEUwRkZEQThGQkYwMDEwMDAwNUMxODI0NgorOjEwN0QzMDAwMDAxODcwODAzQzBGMDgwMDI1RUY2MEMwMDFDRjQ4MjE3QgorOjEwN0Q0MDAwOEQyQjAwMDAwMDA1Njg0MjMxQTUwMDFGMDBBNjYwMDRDRAorOjEwN0Q1MDAwMDE2QzUwMjUyN0JEMDAxODAzRTAwMDA4QUQyQTAwMDA4MworOjEwN0Q2MDAwMkNBNzAwMzAxNEUwRkZDQThGQkYwMDEwMzBCOTAwMDcwNQorOjEwN0Q3MDAwMTcyM0ZGQzcyNEE4RkZDRTAwMDg2QTAyMDAwRDYwODAwOQorOjEwN0Q4MDAwM0MwQjA4MDAyNTZCNjBDMDAxOEIzMDIxOENDNDAwMDBDNworOjEwN0Q5MDAwMDAwODI4QzIzMEFBMDAxRjI0MDgwMDAxMDE0ODQ4MDQzNgorOjEwN0RBMDAwOEY4MjAwQTQwMDg5MTgyNUFDQzMwMDAwOEM1RjAwMDBGRQorOjEwN0RCMDAwNTNFMDAwMDFBRjg2MDBBNDAwMDU3MDQwMDAwRTc5NDIzOAorOjEwN0RDMDAwMDAwRjI4ODAzQzA0MDgwMDI0ODQ2MTAwMDBBNDE4MjFDRQorOjEwN0REMDAwOEM2QjAwMDAyNURGMDAwMTMxQ0QwMDFGMDAxRjUxNDJEOAorOjEwN0RFMDAwMDFBODYwMDQwMTZDNDgyNTAwMEExMDgwQUM2OTAwMDBGRAorOjEwN0RGMDAwMDA0NDI4MjE4Q0E2MDAwMDhGOTgwMDYwMzNGOTAwMUZGMgorOjEwN0UwMDAwOEZCRjAwMTAwMzI4MzgwNDAwQzc3ODI1MjcwRTAwMDExMworOjEwN0UxMDAwMjdCRDAwMThBQ0FGMDAwMDAzRTAwMDA4QUY4RTAwNjA4MworOjEwN0UyMDAwMjRBNUVGRDAyQ0I4MDQwMDEzMDBGRjk5OEZCRjAwMTBEOQorOjEwN0UzMDAwMDAwNTMxNDIwMDA2NTg4MDNDMEEwODAwMjU0QTYwNDA4RgorOjEwN0U0MDAwMDE2QTMwMjE4Q0M0MDAwMDMwQTMwMDFGMjQwOTAwMDEwNgorOjEwN0U1MDAwMDA2OTEwMDQ4Rjk5MDA5MDAwODJGODI1QUNERjAwMDBDMworOjEwN0U2MDAwOEYyNzAwMDA1MEUwMDAwMUFGODYwMDkwOEY4RDAwODRDNgorOjEwN0U3MDAwOEZCRjAwMTAyN0JEMDAxODI1QUMwMDAxMDNFMDAwMDhFQgorOjEwN0U4MDAwQUY4QzAwODQxNUUwRkY4MjhGQkYwMDEwOEY4NjAwQTBBQQorOjEwN0U5MDAwMDAwNjEwNDAwMDQ2RjgyMTAwMUYyMTAwMDNFNEM4MjExRAorOjEwN0VBMDAwMDAxOTM4NDAyNEY4MTQzMDAwQjg0MDJCMTEwMEZGNzgzNgorOjEwN0VCMDAwOEZCRjAwMTAyNEE0RUJEMDBFMDAwMjBEMDBDMDI4MjFCQgorOjEwN0VDMDAwMDAwMjc5NDIwMDBGNzA4MDNDMEQwODAwMjVBRDYxODBGMgorOjEwN0VEMDAwMDFDRDIwMjE4QzhCMDAwMDMwNEMwMDFGMjQwNjAwMDFCNgorOjEwN0VFMDAwMDE4NjE4MDQ4Rjg5MDA4QzAxNjM1MDI1QUM4QTAwMDAzQworOjEwN0VGMDAwOEQyNTAwMDA1MEEwMDAwMUFGODQwMDhDOEY5ODAwODA3OQorOjEwN0YwMDAwOEZCRjAwMTAyN0JEMDAxODI3MDgwMDAxMDNFMDAwMDhGQworOjEwN0YxMDAwQUY4ODAwODAzMEE1MDAwNzI0MDMwMDAzMTBBMzAwMTBFMQorOjEwN0YyMDAwMjhBMjAwMDQxNDQwMDAwODI0MDcwMDAyMjQwMzAwMDRDRgorOjEwN0YzMDAwMTBBMzAwMTUyNDA4MDAwNTEwQTgwMDBGOEY4NTAwQTBDRAorOjEwN0Y0MDAwMDNFMDAwMDgwMDAwMDAwMDE0QTdGRkZEMDA4MDI4MjFDNgorOjEwN0Y1MDAwMTRDM0ZGRkIyNDA0MDAwMjBBMDAwQkFFMDAwMDAwMDA2MworOjEwN0Y2MDAwMjQwOTAwMDUwMDgwMjgyMTEwQzlGRkZCMjQwNDAwMDMxOAorOjEwN0Y3MDAwMDNFMDAwMDgwMDAwMDAwMDE0QzVGRkYxMDA4MDI4MjE4NAorOjEwN0Y4MDAwMEEwMDBCQUUyNDA0MDAwNTI0MEEwMDAxMDA4MDI4MjEwOQorOjEwN0Y5MDAwMTBDQUZGRjEyNDA0MDAwNDAzRTAwMDA4MDAwMDAwMDAwMAorOjEwN0ZBMDAwMjdCREZGRTBBRkIwMDAxMDAwMDU4MUMyMjYwM0ZGRDA1RgorOjEwN0ZCMDAwMjRDNTAwM0YyQzYyMjNEMDI0QzYwMDdGQUZCMjAwMTgzNgorOjEwN0ZDMDAwQUZCMTAwMTRBRkJGMDAxQzMwOTEwMEZGMDAwNjkxQzI5QQorOjEwN0ZEMDAwMDAwNTI5ODIwMjAwMjAyMTEwNDAwMDA4MjQwM0ZGRkYzMQorOjEwN0ZFMDAwMEUwMDBBNkUwMDAwMDAwMDAyMDAyMDIxMDIyMDI4MjE1RAorOjEwN0ZGMDAwMEUwMDBDNUMwMjQwMzAyMTAwMDAxODIxOEZCRjAwMUNENQorOjEwODAwMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA2MDEwMjFFMworOjEwODAxMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4MjRBMjAwN0Y3MQorOjEwODAyMDAwQUZCMzAwMUNBRkIyMDAxODAwMDI5OUMyMzA5MjAwRkYzQgorOjEwODAzMDAwMjRBMzAwM0YwMjQwMjAyMTAyNjAyODIxQUZCMTAwMTQ5OAorOjEwODA0MDAwQUZCMDAwMTBBRkJGMDAyMDBFMDAwQjkxMDAwMzg5ODI3QgorOjEwODA1MDAwMDA0MDgwMjEwMDQwMjAyMTAyMjAyODIxMTQ0MDAwMDlGNgorOjEwODA2MDAwMDAwMDE4MjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThCMgorOjEwODA3MDAwOEZCMTAwMTQ4RkIwMDAxMDAwNjAxMDIxMDNFMDAwMDhFMQorOjEwODA4MDAwMjdCRDAwMjgwRTAwMEExRjAwMDAwMDAwMDA0MDI4MjEyNAorOjEwODA5MDAwMDIwMDIwMjExMDUxRkZGMzAwMTAxOUMwMEUwMDBBNkVEQgorOjEwODBBMDAwMDAwMDAwMDAwMjAwMjAyMTAyNDAyODIxMEUwMDBDNUM4QworOjEwODBCMDAwMDI2MDMwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThFOAorOjEwODBDMDAwOEZCMTAwMTQ4RkIwMDAxMDAwMDAxODIxMDA2MDEwMjE0MworOjEwODBEMDAwMDNFMDAwMDgyN0JEMDAyODMwODRGRkZGMzBBNUZGRkYyNAorOjEwODBFMDAwMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDJCQgorOjEwODBGMDAwMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDA4MQorOjEwODEwMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDAxQworOjEwODExMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDA0RQorOjEwODEyMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDBFQQorOjEwODEzMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDA5MAorOjEwODE0MDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkExNworOjEwODE1MDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMzBBNUZGRkZCNQorOjEwODE2MDAwOEY0MjAxQjgwNDQwRkZGRTNDMDc2MDE1MDBBNzMwMjU5MAorOjEwODE3MDAwM0MwMzEwMDBBRjQ0MDE4MEFGNDAwMTg0QUY0NjAxODg0QQorOjEwODE4MDAwMDNFMDAwMDhBRjQzMDFCODhGODUwMEQwMkM4NjQwMDA4MworOjEwODE5MDAwMDA4MDE4MjE4Q0E3MDA4NDAwODcxMDJCMTQ0MDAwMTA0OQorOjEwODFBMDAwMDAwMDAwMDA4Q0E4MDA4NDJEMDY0MDAwNTBDMDAwMEY4NQorOjEwODFCMDAwMjQwMzQwMDA4Q0FBMDA4NDAwOEE0ODJCNTEyMDAwMDEyRgorOjEwODFDMDAwOENBMzAwODQwMDAzNUE0MjAwMEIyMDgwM0MwNTA4MDA2OQorOjEwODFEMDAwMjRBNTVBNDAwMDg1MTgyMTAzRTAwMDA4OEM2MjAwMDBBNQorOjEwODFFMDAwMTRDMEZGRjQwMDAwMDAwMDI0MDM0MDAwMDAwMzVBNDJDMgorOjEwODFGMDAwMDAwQjIwODAzQzA1MDgwMDI0QTU1QTQwMDA4NTE4MjE2QQorOjEwODIwMDAwMDNFMDAwMDg4QzYyMDAwMDhGODMwMEQwOTA2NjAwRDBFRAorOjEwODIxMDAwMjRDNTAwMDFBMDY1MDBEMDhGODUwMEQwOTA2NDAwRDBGNworOjEwODIyMDAwOTBBMjAwRDIxMDQ0MDAxNzAwMDAwMDAwOTM2QzAwNzg2OAorOjEwODIzMDAwOEY4QjAwQkMzMThBMDBGRkExNkEwMDBDMjU0OTAwMDEyOAorOjEwODI0MDAwOTM4NzAwQzQzMTIyMDBGRjMwNDgwMDdGMTEwNzAwMEJFNAorOjEwODI1MDAwMDAwMjY4MjdBMzYyMDA3ODhGNEUwMTc4MDVDMEZGRkVGOAorOjEwODI2MDAwOEY5OTAwQjAyNDE4MDAwMjNDMEYxMDAwQUY1OTAxNDA1NAorOjEwODI3MDAwQTM1ODAxNDQwM0UwMDAwOEFGNEYwMTc4MEEwMDBEMkMxOQorOjEwODI4MDAwMzFBMjAwODBBMEEwMDBEMDBBMDAwRDIyMDAwMDAwMDA1MgorOjEwODI5MDAwMjdCREZGRDhBRkIyMDAxODhGOTIwMEI4QUZCRjAwMjA0MworOjEwODJBMDAwQUZCMzAwMUNBRkIwMDAxMEFGQjEwMDE0OEY5MzAwQjQ5NworOjEwODJCMDAwOEU1OTAwMjgzQzEwMDA4MDNDMEVGRkVGQUU3OTAwMDA4NAorOjEwODJDMDAwOEU1ODAwMjRBMjYwMDAwQTM1Q0RGRkZGQUU3ODAwMDQ2RQorOjEwODJEMDAwOTI1MTAwMkMzQzBCRkY5RjM1NkFGRkZGQTI3MTAwMENFRQorOjEwODJFMDAwOEU2RjAwMEMzQzA4MDA0MEEyNzEwMDBCMDFGMDYwMjU2RAorOjEwODJGMDAwMDE4RDQ4MjQwMTJBMzgyNDAwRTgzMDI1QUU2NjAwMENBMAorOjEwODMwMDAwOEU0NTAwMDRBRTYwMDAxODNDMDQwMEZGQUU2NTAwMTQwQQorOjEwODMxMDAwOEU0MzAwMkMzNDgyRkZGRkE2NjAwMDA4MDA2MkY4MjQyMAorOjEwODMyMDAwQUU3RjAwMTA4RTU5MDAwODhGOTAwMEIwOTY0RTAwMTI1QworOjEwODMzMDAwQUU3OTAwMjA4RTUxMDAwQzMxRDgzRkZGMDAxODc5ODBCMworOjEwODM0MDAwQUU3MTAwMjQ4RTREMDAxNDAxRjA2MDIxMzFDQjAwMDE4QworOjEwODM1MDAwQUU2RDAwMjg4RTRBMDAxODAwMEM0MUMyMDAwQjRCODAwNQorOjEwODM2MDAwQUU2QTAwMkM4RTQ2MDAxQzAxMDkzODIxQTY2NzAwMUM0RAorOjEwODM3MDAwQUU2NjAwMzA5NjQ1MDAwMjhFNDQwMDIwQTY2NTAwMUVDMQorOjEwODM4MDAwQUU2NDAwMzQ5MjQzMDAzMzMwNjIwMDA0NTQ0MDAwMDU3MAorOjEwODM5MDAwOTI0NjAwMDA4RjgzMDBEMDhDN0YwMDdDQUU3RjAwMzAzRgorOjEwODNBMDAwOTI0NjAwMDA4Rjg1MDBCQ0EwQTYwMDAwOTI0NDAwMzNENgorOjEwODNCMDAwMzA4MjAwMDI1MDQwMDAwNzkyNEUwMDAxOEY4NzAwQkNCRgorOjEwODNDMDAwMjQwQUZGODA5MEU5MDAwMDAxMkE0MDI1QTBFODAwMDA2RgorOjEwODNEMDAwOTI0RTAwMDE4RjhEMDBCQzI0MDlGRkJGMjQwNEZGREZGMworOjEwODNFMDAwQTFBRTAwMDE4RjhBMDBCQzkxNEMwMDBEMzE4QjAwN0Y0MworOjEwODNGMDAwQTE0QjAwMEQ4Rjg2MDBCQzkwQzgwMDBEMDEwOTM4MjRFOAorOjEwODQwMDAwQTBDNzAwMEQ4RjkxMDBCQzhFNjUwMDE0OTIyMzAwMEQ1MworOjEwODQxMDAwMkNBMjAwMDEwMDAyRjk0MDAwNjRDODI0MDMzRkMwMjVEQgorOjEwODQyMDAwQTIzODAwMEQ4Rjg4MDBCQzk2NTAwMDEyOEY4NzAwRDBCNAorOjEwODQzMDAwQTUxMDAwMDI4RTQ1MDAwNDkwRUQwMEJDMzBBRjAwMDM5MworOjEwODQ0MDAwMDAwRjcwMjMzMUNDMDAwMzAwQUMxMDIxMzFBQjAwMDJDRgorOjEwODQ1MDAwMTU2MDAwMDIyNDQ0MDAzNDI0NDQwMDMwOTBGMTAwQkMzNAorOjEwODQ2MDAwMDBCMTgwMjQzMjBGMDAwNDE1RTAwMDAyMjQ4MzAwMDREMAorOjEwODQ3MDAwMDA4MDE4MjE4Rjg5MDBBQzI0MEEwMDAyQUQwMzAwMDQ5QgorOjEwODQ4MDAwQTEyQTAwMDA5MjQ4MDAzRjhGODcwMEFDQTBFODAwMDFCRAorOjEwODQ5MDAwOEY5MTAwQUM5MjQ2MDAzRjhFNDQwMDA0QTYyNjAwMDI1NQorOjEwODRBMDAwOTc2NTAwM0MwRTAwMENGOTMwQjBGRkZGMDAwMjEzODAwRQorOjEwODRCMDAwMDA1MDIwMjUzQzAzNDIwMDAwODNGODI1QUUzRjAwMDQxNQorOjEwODRDMDAwOEY4NTAwQUM4RTU5MDAzOEFDQjkwMDE4OEU1ODAwMzQzNgorOjEwODREMDAwQUNCODAwMUNBQ0EwMDAwQ0FDQTAwMDEwQTRBMDAwMTQxMAorOjEwODRFMDAwQTRBMDAwMTZBNEEwMDAyMEE0QTAwMDIyQUNBMDAwMjRGOAorOjEwODRGMDAwOEU2MjAwMTQ1MDQwMDAwMTI0MDIwMDAxOEZCRjAwMjA1MgorOjEwODUwMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAxMQorOjEwODUxMDAwQUNBMjAwMDgwQTAwMEQxOTI3QkQwMDI4OEY4NjAwRDBFNAorOjEwODUyMDAwMjdCREZGRDBBRkJGMDAyQ0FGQjYwMDI4QUZCNTAwMjRFOQorOjEwODUzMDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQ0RAorOjEwODU0MDAwQUZCMDAwMTA5NEMzMDBFMDk0QzIwMEUyMTA0MzAwNDFCOQorOjEwODU1MDAwMjQwNUZGRkYzQzE2MDAwRTkwQzQwMEQwOTBDODAwRDE0NworOjEwODU2MDAwMzA5MjAwRkYzMTA0MDBGRjAyNDQzODJCMTBFMDAwNDQzOQorOjEwODU3MDAwMjY0OTAwMDExMDg5MDAzNzhGOTgwMEIwM0MwNTA4MDA5QgorOjEwODU4MDAwOENBNTAwNUMyNDE0RkY4MDAwQjg2MDIxMDE5NDY4MjQ0RAorOjEwODU5MDAwQUY0RDAwMkM5NENBMDBFMjMxOEIwMDdGMDE3QTQ4MjE1NAorOjEwODVBMDAwMzE0NDdGRkYwMTM2NDAyMTAwMDQxMDQwMDA0OEE4MjFEQgorOjEwODVCMDAwOTZBNzAwMDAzQzFGMDgwMDhGRkYwMDU4MzBGNTNGRkZEMgorOjEwODVDMDAwMDAxNTE5ODAwM0UzQzgyMTAzMTk4ODIxMzIzMzAwN0Y4NQorOjEwODVEMDAwMDI3QTc4MjEwMjM0ODAyNEFGNTAwMDJDMDFGNjk4MjFEMQorOjEwODVFMDAwOTI2RTAwMEQzMUM1MDAwNDEwQTAwMDQ4MDAwMDAwMDA4QworOjEwODVGMDAwOTRDMzAwRTI5NEMzMDBFMjk0RDgwMEUyMjQwNDgwMDAxMworOjEwODYwMDAwMzA3RjdGRkYyN0Y5MDAwMTMzMzE3RkZGMDMwNDgwMjQ4RgorOjEwODYxMDAwMDIxMTc4MjVBNENGMDBFMjk0Q0UwMEUyM0MxMjA4MDBCQgorOjEwODYyMDAwOEU1MjAwNjAzMUQ0N0ZGRjEyOTIwMERGMDAwMDAwMDAwNAorOjEwODYzMDAwOEU3MjAwMTgwMDAwMjgyMTI2NDZGRkZGQUU2NjAwMkMyRgorOjEwODY0MDAwOEY4NjAwRDA5NEM4MDBFMDk0QzkwMEUyMTUyOEZGQzJDQworOjEwODY1MDAwMDAwMDAwMDA4RkJGMDAyQzhGQjYwMDI4OEZCNTAwMjRDQgorOjEwODY2MDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ5QworOjEwODY3MDAwOEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMzBEQgorOjEwODY4MDAwOTBDRDAwRDIyNjRBMDAwMTMxQUMwMEZGMDA4QzU4MjE2OQorOjEwODY5MDAwMTE2QUZGRjA4Rjk4MDBCMDNDMDUwODAwOENBNTAwNUNDMworOjEwODZBMDAwMjQxNEZGODAwMEI4NjAyMTAxOTQ2ODI0QUY0RDAwMkM5MQorOjEwODZCMDAwOTRDQTAwRTIzMThCMDA3RjAxN0E0ODIxMzE0NDdGRkY2OAorOjEwODZDMDAwMDEzNjQwMjEwMDA0MTA0MDAwNDhBODIxOTZBNzAwMDA3MAorOjEwODZEMDAwM0MxRjA4MDA4RkZGMDA1ODMwRjUzRkZGMDAxNTE5ODA0MAorOjEwODZFMDAwMDNFM0M4MjEwMzE5ODgyMTMyMzMwMDdGMDI3QTc4MjFGRAorOjEwODZGMDAwMDIzNDgwMjRBRjUwMDAyQzAxRjY5ODIxOTI2RTAwMERCOAorOjEwODcwMDAwMzFDNTAwMDQxNEEwRkZCQTAwMDAwMDAwOEU2NjAwMTBGRQorOjEwODcxMDAwMDAxMkMwQzA4RTZFMDAzMDAwMTI5MTQwMDI1ODc4MjFDNQorOjEwODcyMDAwMDM2RjU4MjEwMENFNjgyMzI1NkMwMDg4MjQwMjAwMDJDNAorOjEwODczMDAwQUU2RDAwMTBBRjhDMDBBQ0ExNjIwMDg4OTc2QTAwM0M1RgorOjEwODc0MDAwOEU2NDAwMzA4RjkxMDBBQzBFMDAwQ0Y5MzE1MEZGRkZBOQorOjEwODc1MDAwMDAwMjIzODAwMDkwNDgyNTNDMDM0MjAwMDEyMzQwMjU2RAorOjEwODc2MDAwQUUyODAwMDQ4RTY3MDAwNDhGOEMwMEFDOEU3RjAwMDA2MgorOjEwODc3MDAwMjQwRDAwMDhBRDg3MDAxQ0FEOUYwMDE4QUQ4MDAwMENEMworOjEwODc4MDAwQUQ4MDAwMTA5MjY1MDAwQTMwQjkwMEZGQTU5OTAwMTQ3MQorOjEwODc5MDAwOTY3ODAwMDgzQzA1MDAwQ0E1OTgwMDE2OTI3MTAwMEExNgorOjEwODdBMDAwMzIyRjAwRkZBNThGMDAyMDk2NzAwMDA4MjQxMTAwMDVDRAorOjEwODdCMDAwQTU5MDAwMjJBRDgwMDAyNDkyNkUwMDBCMjQxMEMwMDAxMgorOjEwODdDMDAwMzFDNjAwRkZBNTg2MDAwMkExOEQwMDAxOEU2QjAwMzAyRQorOjEwODdEMDAwOEY4MjAwQUM4Rjg4MDBCMEFDNEIwMDA4M0MwQTA4MDBDOAorOjEwODdFMDAwOEQ0QTAwNTQwMTQ4MjAyMTAwOTQ0ODI0QUY0OTAwMjhCNAorOjEwODdGMDAwM0MwMzA4MDA4QzYzMDA1NDAwNjgzODIxMzBGRjAwN0Y4MAorOjEwODgwMDAwMDNGQUM4MjEwMzI1QzAyMTAyNTg3ODIxQUY4RjAwQkM4QworOjEwODgxMDAwQUY5ODAwQzBBMUYxMDAwMDhGOEIwMEJDMjQwM0ZGQkYwNAorOjEwODgyMDAwMjQwNUZGREY5NTZFMDAwMjAxRDBBMDI0MDI5NTkwMjU1QgorOjEwODgzMDAwQTU3MjAwMDI5MTY2MDAwMjMwQ0QwMDNGMzVBQzAwNDBDOQorOjEwODg0MDAwQTE2QzAwMDI4Rjg4MDBCQzhGODIwMEQwM0MwQzdGRkY5RgorOjEwODg1MDAwQUQwMDAwMDQ4QzRBMDA3QzM1OEJGRkZGM0MwMjgwMDA5OQorOjEwODg2MDAwQUQwQTAwMDg5MTA0MDAwRDMwODkwMDdGQTEwOTAwMERCOAorOjEwODg3MDAwOEY5RjAwQkM5M0Y1MDAwRDAyQTMzODI0QTNFNzAwMERFMQorOjEwODg4MDAwOEY5MTAwQkM5MjM5MDAwRDAzMjVDMDI0QTIzODAwMEQ0MQorOjEwODg5MDAwOEU2RjAwMzQ4RjhEMDBCQ0FEQUYwMDEwOEU2RTAwMkMzQgorOjEwODhBMDAwOEU3MDAwMzAwMUQwQTAyM0FEQjQwMDE0OTFCMjAwMTgzNgorOjEwODhCMDAwMzI0NjAwN0ZBMUE2MDAxODhGODcwMEJDOEU2QTAwMzA2OAorOjEwODhDMDAwOENFNDAwMTgwMTRCNDgyNDAwODI0MDI0MDEwOUE4MjVBQgorOjEwODhEMDAwQUNGNTAwMTg5MjYzMDAwQUEwRTMwMDFDOTY3RjAwMDgyNAorOjEwODhFMDAwOEY4NTAwQkM4Rjk5MDBEMEE0QkYwMDFFOEU3MDAwMzAxMQorOjEwODhGMDAwOEU2NDAwMzAwRTAwMDIwRDhGMjUwMDg0OEY4NTAwRDAxRAorOjEwODkwMDAwMDAwMjg5NDAwMDAyQzEwMDkwQUUwMEJDMDIzODc4MjEwQworOjEwODkxMDAwMDA0MDMwMjEzMUQ0MDAwMjEyODAwMDAzMDIwRjgwMjE3OAorOjEwODkyMDAwMDAwMkE4ODAwMjE1ODAyMTkwQjIwMEJDMzI1NDAwMDRERAorOjEwODkzMDAwMTI4MDAwMDIwMDA2Qzg4MDAyMTk4MDIxOEU2RjAwMzA2QworOjEwODk0MDAwOEY4QjAwQkMyNDA2ODAwMDMxRUUwMDAzMDAwRTY4MjNFQworOjEwODk1MDAwMzFBQzAwMDMwMjBDMTAyMUFENjIwMDA0OTRBNDAwRTJDQgorOjEwODk2MDAwOTRBQTAwRTI5NEEzMDBFMjMxNTA3RkZGMjYwNDAwMDFBNAorOjEwODk3MDAwMzA4OTdGRkYwMDY2NDAyNDAxMDk4ODI1QTRCMTAwRTIwOAorOjEwODk4MDAwOTRBNzAwRTIzQzEzMDgwMDhFNzMwMDYwMzBGRjdGRkY2NQorOjEwODk5MDAwMTNGMzAwMTIwMDAwMDAwMDBFMDAwRDE5MDAwMDAwMDA4QgorOjEwODlBMDAwMEEwMDBFMjcwMDAwMjgyMTk0Q0QwMEUyMDFBNDYwMjREMworOjEwODlCMDAwQTRDQzAwRTI5MENCMDBFMjkwQzIwMEUyMzE2QTAwRkY1QQorOjEwODlDMDAwMDAwQTQ5QzIwMDA5MjAyNzAwMDQ0MUMwMzA1NTAwN0YzOQorOjEwODlEMDAwMDJBODM4MjUwQTAwMEUyM0EwQzcwMEUyOTRCMTAwRTJFNQorOjEwODlFMDAwMDIyNjM4MjRBNEE3MDBFMjkwQkYwMEUyOTBCNDAwRTI3RgorOjEwODlGMDAwMzNGMzAwRkYwMDEzQzlDMjAwMTk5MDI3MzI5ODAwN0Y5QgorOjEwOEEwMDAwMDAxMkE5QzAwMzE1MzAyNTBFMDAwRDE5QTBBNjAwRTIyMgorOjEwOEExMDAwMEEwMDBFMjcwMDAwMjgyMTMwODRGRkZGMzBBNUZGRkY0OQorOjEwOEEyMDAwQUY0NDAwMThBRjQ1MDAxQzAzRTAwMDA4OEY0MjAwMTQ1QgorOjEwOEEzMDAwMjdCREZGQjBBRkIwMDAyODhGOTAwMEQwQUZCNDAwMzg5MgorOjEwOEE0MDAwQUZCRjAwNENBRkJFMDA0OEFGQjcwMDQ0QUZCNjAwNDA2OAorOjEwOEE1MDAwQUZCNTAwM0NBRkIzMDAzNEFGQjIwMDMwQUZCMTAwMkNDMworOjEwOEE2MDAwQTdBMDAwMTQ5MjA2MDBEMTkyMDUwMEQwMzA5NEZGRkYxOQorOjEwOEE3MDAwMzBDNDAwRkYzMEEzMDBGRjAwNjQxMDJCQTdBMDAwMUUyRAorOjEwOEE4MDAwMTA0MDAwNzFBRkEwMDAxMDkyMDkwMEQwMDAxNDk4MkI4NAorOjEwOEE5MDAwMzEyODAwRkYwMDg4MzgyMzI0RjJGRkZGMDAxMjg4MkJDMgorOjEwOEFBMDAwMDIzMzc4MjQ1MUUwMDA3NThGQjIwMDEwOTYxODAwMTIzRQorOjEwOEFCMDAwOTYxOTAwMTAwMDE0RjQwMDAzMTlCODIzMDAxN0I0MDAyRAorOjEwOEFDMDAwMDAxNjE0MDMwMjgyQTgyQTE2QTAwMDAyMDAxRTI0MDMyNgorOjEwOEFEMDAwMDA0MDIwMjEwMjQ0RjgyQjEzRTAwMDAyMDA4MDE4MjFGRQorOjEwOEFFMDAwMDI0MDE4MjEwMDAzMzQwMDAwMDYxQzAzMzA2NUZGRkYxQworOjEwOEFGMDAwMkNBMjAwMDkxNDQwMDAwMjAwNjA5ODIxMjQxMzAwMDhGMQorOjEwOEIwMDAwOEUwOTAwMDgwMDEzNTk4MDhFMDgwMDBDMzE2NEZGRkZBNQorOjEwOEIxMDAwM0MwQTAwMTAwMDhBMzgyNTI3NEEwNDAwQUY0OTAwMzg3MworOjEwOEIyMDAwQUY4QTAwQjhBRjQ4MDAzQ0FGNDcwMDMwMDAwMDAwMDBGQgorOjEwOEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwOEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0RDAwMDA0OQorOjEwOEI1MDAwMzFBQzAwMjAxMTgwRkZGRDAwMTM3MDJBMDFEMTEwMjREOAorOjEwOEI2MDAwMDAwMEE4MjExMDQwMDFDMDAwMDAwMDAwOEY5ODAwQjA1NAorOjEwOEI3MDAwM0MwQjA4MDA4RDZCMDA1NDI0MTFGRjgwOTIxRTAwRDAyNgorOjEwOEI4MDAwMDE3ODIwMjEwMDkxMTAyNDkyMTkwMEQwQUY0MjAwMjhEMgorOjEwOEI5MDAwOEQ0NTAwMTAzQzA2MDgwMDhDQzYwMDU4M0MxNzA4MDBBNAorOjEwOEJBMDAwOEVGNzAwNTQzMEE3M0ZGRjAwMDcxOTgwMDBDMzQwMjExMworOjEwOEJCMDAwMDMwODIwMjEwMDkxRjgyNDkyMEIwMEQwQUY1RjAwMkMxNQorOjEwOEJDMDAwOTE0ODAwMDAzM0Q2MDBGRjMzMkYwMEZGMDJGODcwMjFEOAorOjEwOEJEMDAwMDAxNjYxNDAwMDBGNjhDMDMxQzkwMDdGMDE4RDM4MjE0NworOjEwOEJFMDAwMDEzQTI4MjEzMTYzMDBGRjMwODYwMDdGM0MwMjAwMENFRgorOjEwOEJGMDAwMDBBMkIwMjEwMDAzODk0MDAzNjdDODIxMDBEQUY4MjFGMAorOjEwOEMwMDAwMzEwODAwM0YzQzFFMDAwRTAyMzZCODIxMjczODAwODg4QworOjEwOEMxMDAwMDNGRTg4MjEyRDBGMDAwOEFGOTgwMEFDQUY5NzAwQkM3MQorOjEwOEMyMDAwQUY5NjAwQzAxMUUwMDE4RkFGOTEwMEI0MDAwODY4ODBEQQorOjEwOEMzMDAwM0MwRTA4MDAyNUNFNTlFQzAxQUU2MDIxOEQ4OTAwMDA2NAorOjEwOEM0MDAwMDEyMDAwMDgwMDAwMDAwMDkyMEUwMEQyOTIwRDAwRDAxQQorOjEwOEM1MDAwMDAxNDk4MkIzMUNBMDBGRjMxQUMwMEZGMDA4QzU4MjM2MAorOjEwOEM2MDAwMDE0QjIwMjEyNDkyRkZGRjAwMTI4ODJCMDIzMzc4MjQyRAorOjEwOEM3MDAwMTVFMEZGOEUwMDAwMDAwMDhGQjIwMDEwOEZCRjAwNEM4NworOjEwOEM4MDAwOEZCRTAwNDgzQTQyMDAwMThGQjcwMDQ0OEZCNjAwNDBDMworOjEwOEM5MDAwOEZCNTAwM0M4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzBGMgorOjEwOENBMDAwOEZCMTAwMkM4RkIwMDAyODAzRTAwMDA4MjdCRDAwNTBEMgorOjEwOENCMDAwOTE1ODAwMDEzMzE3MDAyMDEyRTAwMjA0MjQxNjAwMDEyRAorOjEwOENDMDAwOTIxRjAwQkMwMDAwQjAyMTMzRjkwMDAxMTMyMDAwMERGOQorOjEwOENEMDAwMjQxRTAwMDE4RDQ4MDAxNDhFMDMwMDg0MDEwM0IwMkI3NAorOjEwOENFMDAwMTZDMDAwMDIwMTAwMzAyMThFMDYwMDg0OEUwNTAwNjQ0QgorOjEwOENGMDAwMDBDNTM4MkIxNEUwMDAwMjAwQzAyMDIxOEUwNDAwNjQ1RgorOjEwOEQwMDAwMDA4MEIwMjE4RDQyMDAxNDhFMEIwMDY0MDA0QjMwMkI4QworOjEwOEQxMDAwMTRDMDAwMDIwMDQwMjAyMThFMDQwMDY0MDA5NkI4MjM5NQorOjEwOEQyMDAwNTZFMDAwMDEyNDFFMDAwMjAyNUUyMDJCMTQ4MDAxNDg0MAorOjEwOEQzMDAwMDAwMDE4MjE4RDU5MDAzODhFMkYwMDBDM0MxODAwODAzRgorOjEwOEQ0MDAwQUUzOTAwMDA4RDUwMDAzNDNDMEVGRjlGMDFGODYwMjVDNQorOjEwOEQ1MDAwQUUzMDAwMDQ5MTQ5MDAzRjM1Q0RGRkZGMDE4RDIwMjQ0NgorOjEwOEQ2MDAwM0MwQTAwMjAzQzBCRkZFRkEyMjkwMDBCMDA4QTM4MjVBQgorOjEwOEQ3MDAwMzU2MkZGRkYwMEUyMjgyNDNDMDYwMDA4OEY4NzAwQjgxOAorOjEwOEQ4MDAwMDBBNkM4MjVBRTM5MDAwQzhDRTMwMDE0QUUyMDAwMThGNAorOjEwOEQ5MDAwM0MwOEZGRkJBRTIzMDAxNDhDRjgwMDE4MzUxRkZGRkZDMgorOjEwOERBMDAwMDMzRjcwMjRBRTM4MDAxQzhDRUYwMDA4MDJENzgwMjFFRQorOjEwOERCMDAwQUUyRjAwMjQ4Q0VEMDAwQ0FFMzAwMDJDQUUyRTAwMEMzQgorOjEwOERDMDAwQUUyRDAwMjBBRTIwMDAyOEE2MjAwMDM4QTYyMDAwM0FCNAorOjEwOEREMDAwOENFQzAwMTQwMTk2NDgyMzAxMzc1MDIzMTE0MDAwMTFGOAorOjEwOERFMDAwQUUyQTAwMTA5MEVFMDAzRDhFMkMwMDA0OEUyNDAwMDA3MAorOjEwOERGMDAwMDAwRTY5MDAwMThEMjgyMTAwMDA1MDIxMDBBRDMwMkJBQworOjEwOEUwMDAwMDA4QTU4MjEwMTY2MTAyMUFFMjUwMDA0QUUyMjAwMDAyMAorOjEwOEUxMDAwOTBFMzAwM0RBMjIzMDAwQThGODgwMEI4OTUxRjAwMDY0QQorOjEwOEUyMDAwQTYzRjAwMDg4RjhCMDBBQzI0MDYwMDAyMDJDMDIwMjE2MAorOjEwOEUzMDAwQTE2NjAwMDA5NzY1MDAzQzhGOTAwMEFDMzBBMkZGRkY1OAorOjEwOEU0MDAwMEUwMDBDRjlBRkEyMDAyMDhGQTMwMDIwMDAwMjQzODA4NworOjEwOEU1MDAwOEY4NTAwQjgwMTAzQzgyNTNDMUY0MjAwMDMzRkMwMjU5MQorOjEwOEU2MDAwQUUxODAwMDQ4Rjg0MDBBQzhDQUYwMDM4QUM4RjAwMThCMworOjEwOEU3MDAwOENCMDAwMzRBQzkwMDAxQ0FDODAwMDBDQUM4MDAwMTBCNgorOjEwOEU4MDAwQTQ4MDAwMTRBNDgwMDAxNkE0ODAwMDIwQTQ4MDAwMjJFNgorOjEwOEU5MDAwQUM4MDAwMjQ5MEE3MDAzRkE0ODcwMDAyMTJDMDAyMTBGQgorOjEwOEVBMDAwMjQwRDAwMDE1MkUwMDAwMjkwQTIwMDNEOTBBMjAwM0U3RAorOjEwOEVCMDAwMjQ0QTAwMDFBMDhBMDAwMThGODQwMEFDQUM5NjAwMDgwRgorOjEwOEVDMDAwOEY4MzAwRDAyNDA3MDAzNDkwNkYwMEJDMzFFRTAwMDI4NQorOjEwOEVEMDAwNTFDMDAwMDEyNDA3MDAzMDhGODIwMEI4OEY5OTAwQkM3OAorOjEwOEVFMDAwOTA2ODAwQkM5MDVGMDAwMDI0MTAwMDA0MzJDRjAwMDNBMworOjEwOEVGMDAwQTMzRjAwMDA4Rjk4MDBCODhGOEMwMEJDMDIwRjcwMjMzNgorOjEwOEYwMDAwOTMwRDAwMDEyNDA1QzAwMDMxQ0EwMDAzQTE4RDAwMDFBQQorOjEwOEYxMDAwOEY5MDAwQkM4Rjg5MDBCODAwRjYzODIxOTYwNDAwMDJCQgorOjEwOEYyMDAwOTUyNjAwMTIwMEVBMzgyMTAwODU1ODI0MzBDMzNGRkZGRgorOjEwOEYzMDAwMDE2MzEwMjVBNjAyMDAwMjkyMUYwMDAyMzEwODAwMDRGRQorOjEwOEY0MDAwMzNGOTAwM0YzNzM4MDA0MEEyMTgwMDAyMTJDMDAwMDI3NworOjEwOEY1MDAwOEY4NTAwQkMwMEU4MzgyMThGODYwMEQwQUNBNzAwMDRDNAorOjEwOEY2MDAwMjQxRkZGQkY4Q0MzMDA3QzJFQ0IwMDAxMjQwRkZGREYyQQorOjEwOEY3MDAwQUNBMzAwMDg5MEE4MDAwRDAwMEI2OTQwMzEwMjAwN0ZFRgorOjEwOEY4MDAwQTBBMjAwMEQ4RjkwMDBCQzkyMTkwMDBEMDMzRkMwMjREOQorOjEwOEY5MDAwQTIxODAwMEQ4RjhBMDBCQzkxNEUwMDBEMDFDRjYwMjRGNQorOjEwOEZBMDAwMDE4RDQ4MjVBMTQ5MDAwRDhGODYwMEI4OEY4QjAwQkMyQworOjEwOEZCMDAwOENDNzAwMjBBRDY3MDAxMDhDQzUwMDI0QUQ2NTAwMTQ3RgorOjEwOEZDMDAwOENDNDAwMjhBRDY0MDAxODhDQzMwMDJDMEUwMDBEMTk1MQorOjEwOEZEMDAwQUQ2MzAwMUMyNDA4MDAwMjU3QzgwMDlDOEY5MDAwRDA4RAorOjEwOEZFMDAwOEY4RjAwRDA4RjhBMDBDMDAyRTAyMDIxOTFFODAwRDA0RQorOjEwOEZGMDAwOTFFQjAwRDA5MUU3MDBEMDMxMTAwMEZGMzE2RTAwRkZGRgorOjEwOTAwMDAwMDAxMDY5NDAwMDBFMjhDMDAxQTUxODIxMzBFOTAwRkZCQQorOjEwOTAxMDAwMDM2M0M4MjEwMDA5MzE0MDAwQ0FGODIxMjcyMjAwODhEMworOjEwOTAyMDAwQUY4MjAwQUNBRjlGMDBCQ0EzM0UwMDg4MEUwMDBDRjlERAorOjEwOTAzMDAwOEY5MDAwQUM4RkI4MDAyMDAwMDI2MzgwM0MwRjQyMDA4QworOjEwOTA0MDAwMDE5ODQwMjU4RjhDMDBCODAxMEY1ODI1QUUwQjAwMDQwNQorOjEwOTA1MDAwOEQ4NDAwMzg4RjhCMDBBQzAwMDAyODIxMDAwNTM5MDA3QQorOjEwOTA2MDAwQUQ2NDAwMTg4RDhFMDAzNDNDMEY3RkZGMzVFOEZGRkZBNAorOjEwOTA3MDAwQUQ2RTAwMUM5MTgzMDAzRThENjkwMDFDOEQ2NjAwMTg0QQorOjEwOTA4MDAwMDAwMzUxMDAwMDAzNkYwMjAxMkFDMDIxMDBFRDEwMjVFQQorOjEwOTA5MDAwMDMwQUY4MkIwMEMyQzgyMTAzM0Y4MDIxQUQ3ODAwMUNEMQorOjEwOTBBMDAwQUQ3MDAwMThBRDYwMDAwQ0FENjAwMDEwOTE4NDAwM0UwMgorOjEwOTBCMDAwMjQxRjAwMDUyNDEwQzAwMEE1NjQwMDE0OTU4RTAwMDQzMAorOjEwOTBDMDAwMDJFODQwMjQwMkUwMjAyMUE1NkUwMDE2OTE4NTAwM0VCMgorOjEwOTBEMDAwQTU2NTAwMjA5NThEMDAwNEE1NkQwMDIyQUQ2MDAwMjREQgorOjEwOTBFMDAwOTE4NzAwM0ZBNTY3MDAwMjkxODMwMDNFOTE4OTAwM0Q3MgorOjEwOTBGMDAwMDEyMzUwMjMyNTQ2MDAwMUExNjYwMDAxOEY4MjAwQUNBOAorOjEwOTEwMDAwOEY5OTAwQkNBQzU3MDAwOEEzM0YwMDAwOEY4QTAwQkNCOQorOjEwOTExMDAwOEY5ODAwQjg5NTRGMDAwMjk3MEUwMDEyMjQxOEZGQkZEOQorOjEwOTEyMDAwMDIwRjY4MjQzMUM1M0ZGRjAxQTUzODI1QTU0NzAwMDI3RAorOjEwOTEzMDAwOTE0QzAwMDIyNDA1RkZERjMxODkwMDNGMzUyMzAwNDBCOAorOjEwOTE0MDAwQTE0MzAwMDI4Rjk5MDBCQzhGODYwMEQwMjQwOUZGRkY0NQorOjEwOTE1MDAwQUYyMDAwMDQ4Q0NCMDA3QzI0MDNGRjgwQUYyQjAwMDhFMQorOjEwOTE2MDAwOTMyMjAwMEQzQzBCODAwMDMwNUYwMDdGQTMzRjAwMEQ3OQorOjEwOTE3MDAwOEY4RTAwQkM5MUQwMDAwRDAyMTg3ODI0QTFDRjAwMEQ3NQorOjEwOTE4MDAwOEY4QzAwQkM5MThEMDAwRDAxQTUzODI0QTE4NzAwMERBNgorOjEwOTE5MDAwOEY4NjAwQkNBQ0M5MDAxMEFDRDYwMDE0OTBDQTAwMTg3MQorOjEwOTFBMDAwMDE0M0IwMjVBMEQ2MDAxODhGOEYwMEJDOEY5ODAwQjg1RgorOjEwOTFCMDAwOERFMjAwMTgwMDRCRjgyNDAzRThDODI1QURGOTAwMTgyQgorOjEwOTFDMDAwOTMxMDAwM0VBMUYwMDAxQzhGOEUwMEI4OEY4RDAwQkM2NAorOjEwOTFEMDAwOEY4NzAwRDA5NUM1MDAwNEE1QTUwMDFFMEUwMDAyMERDNgorOjEwOTFFMDAwOENFNTAwODQ4Rjg3MDBEMDAwMDI2MTQwMDAwMjIxMDBERQorOjEwOTFGMDAwOTBFQTAwQkMwMTg0NDgyMTAwNDAyODIxMzE1NjAwMDIzOQorOjEwOTIwMDAwMTJDMDAwMDMwMkU5MzAyMTAwMDJCMDgwMDBENjMwMjFGNAorOjEwOTIxMDAwOTBFQzAwQkMzMTg0MDAwNDEwODAwMDAzMzJFQTAwMDNBQgorOjEwOTIyMDAwMDAwNUMwODAwMEQ4MzAyMTI0MDkwMDA0OEY5NzAwQkNCRAorOjEwOTIzMDAwMDEyQTEwMjMzMDVGMDAwMzAwREZDODIxQUVGOTAwMDRDQgorOjEwOTI0MDAwMEUwMDBEMTlBNjI1MDAzODhGOTAwMEQwMDNDMDE4MjFGQworOjEwOTI1MDAwMTQ2MDAwMDIwMDYwQjAyMTAwMDA5MDIxNTZDMDAwODYxQQorOjEwOTI2MDAwOEY5NzAwQjgwMDEyODgyQjk2MDkwMDEwMDI5NTUwMjNBMgorOjEwOTI3MDAwM0MxNDAwMjAwMkE5MTAyMUE2MDIwMDEwQUY1NDAwMzBCNworOjEwOTI4MDAwMzE1NEZGRkYwMDAwMDAwMDk2MTMwMDEwOTYxRjAwMTJEQgorOjEwOTI5MDAwMTNGMzAwMTEwMDAwMDAwMDhFMTcwMDBDOEUwQzAwMDg2NAorOjEwOTJBMDAwMDAxNUM5ODAwMkY5NDAyMTAwMTkyN0MzMDExOUIwMkIwQworOjEwOTJCMDAwMDE4NDc4MjEwMUY2NTgyMUFFMDgwMDBDQUUwQjAwMDg5RAorOjEwOTJDMDAwMDAxNEE4MkIwMjM1ODAyNDEyMDBGRTZCOEY5MDAwRDA3MgorOjEwOTJEMDAwMEEwMDBGNDIwMDAwMDAwMDk2MEIwMDE0OEUwNTAwMDRFNworOjEwOTJFMDAwMzE2M0ZGRkYwMDAzNzBDMDAwQUUzODIxQUY0NzAwM0M4MAorOjEwOTJGMDAwOEUwNjAwMDQ4RjREMDAzQzAwQ0RGMDIzMUJDMDAwMzZDRAorOjEwOTMwMDAwMDAwMDAwMDA4RTA4MDAwMDI1MDIwMDAxM0MxNjAwMTAzRAorOjEwOTMxMDAwMzZDRjAwMDhBRjQyMDAzOEFGNEYwMDMwMDAwMDAwMDBFOQorOjEwOTMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwOTMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0NDAwMDA1QQorOjEwOTM0MDAwMzA4QzAwMjAxMTgwRkZGRDAwMDAwMDAwOEY1OTA0MDBDOAorOjEwOTM1MDAwM0MxNzAwMjBBRTE5MDAwODhGNTUwNDA0QUUxNTAwMEMxMAorOjEwOTM2MDAwQUY1NzAwMzAwMDAwMDAwMDNDMDYwODAwOENDNjAwNDRFNworOjEwOTM3MDAwMjQxODAwMDExMEQ4MDBEMzAwMDAwMDAwOTYwNzAwMTI0NgorOjEwOTM4MDAwM0MwNTA4MDA4Q0E1MDA0MDAwQTc2ODIxQTYwRDAwMTIyRQorOjEwOTM5MDAwOTYxRTAwMTQyN0M5MDAwMUE2MDkwMDE0OTYwMjAwMTRBNQorOjEwOTNBMDAwMzA0NEZGRkY1NDg2RkZDNzAwMTRBODJCMzBBNUZGRkZGMQorOjEwOTNCMDAwMEUwMDBGMURBNjAwMDAxNDNDMDMwODAwOEM2MzAwMjQ1RgorOjEwOTNDMDAwOTYwNTAwMTIwMDQzNzAyMzAwQUUzMDIzQTYwNjAwMTI1QgorOjEwOTNEMDAwMEEwMDExNDgwMDE0QTgyQjhFMDIwMDAwMEEwMDExNUIzRAorOjEwOTNFMDAwM0MxNjAwMTA5MTU2MDAwMTI0MTAwMDAxMDAxNjc4NDIyRQorOjEwOTNGMDAwMTVGMDAwMUM5N0E4MDAxRThENUYwMDE0MjQxMUMwMDBGQQorOjEwOTQwMDAwMzNGRTNGRkYwMTExQzgyNDNDMTgwODAwOEYxODAwNjA4QworOjEwOTQxMDAwMDMzRUI4MjUzMkU1M0ZGRjAwQjg1MDJCMTE0MDAwMTE0NAorOjEwOTQyMDAwQTdCNzAwMUUzQzEwMDgwMDhFMTAwMDU4OEY4RjAwQjBBOAorOjEwOTQzMDAwMDAwNTcxODAyNDBDRkY4MDAyMEY2ODIxMDFBRTQ4MjFENQorOjEwOTQ0MDAwMzEyNDAwN0YwMTJDNTgyNDAwOUEyODIxM0MwMjAwMEU3MAorOjEwOTQ1MDAwQUY0QjAwMkMwMEEyMzAyMTkwQzcwMDBEMzRFMzAwMDQ3NAorOjEwOTQ2MDAwQTBDMzAwMEQwRTAwMEQzQjAwMDAwMDAwOEY5MDAwRDA0NworOjEwOTQ3MDAwMjQwMzAwMDE4Rjk3MDBCODI2QjkwMDAxMDAxOUFDMDA0MQorOjEwOTQ4MDAwMDI0MzkwMjMwMDE1QUMwMzI2RjgwMDQwMDJCMzIwMkFDMworOjEwOTQ5MDAwMDAxMjg4MkIyNDBDMDAwMTAzMDA1MDIxMDA5MTEwMjQ5RAorOjEwOTRBMDAwQUY5ODAwQjgwQTAwMEY3MEFGQUMwMDEwOTU1NjAwMTJDQworOjEwOTRCMDAwOEY4NDAwQjAzMkM1RkZGRjBFMDAwQ0VFQTdCNjAwMTQ3QgorOjEwOTRDMDAwOEY5MDAwRDAwQTAwMTFCNDAwMDAxODIxOEQ1OTAwMzg4NworOjEwOTREMDAwQTYyMDAwMDgyNDA0MDAwM0FFMzkwMDAwOEQ1NzAwMzQ5NAorOjEwOTRFMDAwQTIyMDAwMEE4Rjk4MDBCOEFFMzcwMDA0M0MwRjAwODAxRAorOjEwOTRGMDAwOTMwQzAwM0ZBMjI0MDAwQzhFMjgwMDBDM0MwQkZGOUYxNQorOjEwOTUwMDAwQTIyQzAwMEIwMTBGMTgyNTM1NkVGRkZGM0MwNUZGRUY2NQorOjEwOTUxMDAwOEY5NzAwQjgwMDZFNjgyNDM0QTdGRkZGMDFBNzMwMjQ5RQorOjEwOTUyMDAwQUUyNjAwMEM4RUZFMDAxNDk2RkYwMDEyOEY4MjAwQjA1MworOjEwOTUzMDAwQUUzRTAwMTA4RUYwMDAxNEFFMjAwMDE4QUUyMDAwMjBDOQorOjEwOTU0MDAwQUUzMDAwMTRBRTIwMDAyNDhFRTkwMDE4MzNGMDNGRkY0NworOjEwOTU1MDAwMDAxMDUxODBBRTI5MDAyODhFRjkwMDA4MDE0MkMwMjE3OAorOjEwOTU2MDAwMzNFQzAwMDFBRTM5MDAzMDhFRUIwMDBDOEY4NTAwQUM3RgorOjEwOTU3MDAwMDAxODc5QzIwMDBDMjM4MDAxRTQ0MDIxMjQwRTAwMDI2RgorOjEwOTU4MDAwQTYyODAwMUNBNjIwMDAzNkFFMkIwMDJDQTBBRTAwMDBBMgorOjEwOTU5MDAwOTc2NzAwM0M4RjhBMDBBQzNDMDM0MjAwMzBFREZGRkYzMAorOjEwOTVBMDAwMDFBMzMwMjVBRDQ2MDAwNDhGOUUwMEI4MjQwMjAwMDFCRgorOjEwOTVCMDAwMjQwOEMwMDA4RkQxMDAzODI0MDYwMDM0QUQ1MTAwMThCMworOjEwOTVDMDAwOEZDOTAwMzRBRDQ5MDAxQ0FENDAwMDBDQUQ0MDAwMTAwNworOjEwOTVEMDAwQTU0MDAwMTRBNTQwMDAxNkE1NDAwMDIwQTU0MDAwMjI4QgorOjEwOTVFMDAwQUQ0MDAwMjRBNTU2MDAwMkExNDIwMDAxOEY5RjAwQUNBRgorOjEwOTVGMDAwOEY5OTAwQjg4Rjk4MDBCQ0FGRjYwMDA4OTMzNzAwMDAzMQorOjEwOTYwMDAwQTMxNzAwMDA4RjhDMDBCODhGOEYwMEJDOTE4NDAwMDFERAorOjEwOTYxMDAwQTFFNDAwMDE4RjhEMDBCQzk1QUIwMDAyMDE2ODcwMjRBRAorOjEwOTYyMDAwMDFEMDI4MjVBNUE1MDAwMjkxQTcwMDAyMzBFMzAwM0Y0NAorOjEwOTYzMDAwQTFBMzAwMDI4RjgzMDBEMDhGODQwMEJDOTA3MTAwQkM3NgorOjEwOTY0MDAwMzIzRTAwMDI1M0MwMDAwMTI0MDYwMDMwQUM4NjAwMDQwNAorOjEwOTY1MDAwOEM2RjAwN0MyNDAzRkZCRkFDOEYwMDA4OTA4ODAwMEQ0NgorOjEwOTY2MDAwMzEwQjAwN0ZBMDhCMDAwRDhGODcwMEJDOTBFRTAwMERBQQorOjEwOTY3MDAwMDFDMzI4MjRBMEU1MDAwRDhGOUUwMEJDOTNDRDAwMERGMgorOjEwOTY4MDAwMzVBNjAwMjBBM0M2MDAwRDhGOEEwMEI4OEY5MTAwQkNCQworOjEwOTY5MDAwOEQ1MDAwMjBBRTMwMDAxMDhENDkwMDI0QUUyOTAwMTRGQQorOjEwOTZBMDAwOEQ0MjAwMjhBRTIyMDAxODhENUYwMDJDQUUzRjAwMUNCQQorOjEwOTZCMDAwMEUwMDBEMTkwMDAwMDAwMDhGOTAwMEQwMEEwMDExMkUzRQorOjEwOTZDMDAwMDJDMDE4MjE5NjBBMDAxMjNDMUYwODAwOEZGRjAwMjREOAorOjEwOTZEMDAwMDNFQTk4MjFBNjEzMDAxMjBBMDAxMTQ4MDAxNEE4MkJDRgorOjEwOTZFMDAwQTA4RDAwMDE4Rjg5MDBBQzI0MEMwMDAxQUQyQzAwMDg3NgorOjEwOTZGMDAwMEEwMDEwNDg4RjgzMDBEMDI3QkRGRkUwM0MxODA4MDAwNworOjEwOTcwMDAwOEYxODAwNTBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTRGOQorOjEwOTcxMDAwQUY4NDAwQjA5MzcxMDA3NDAzMDQ3ODIxMjQxMEZGODA5QgorOjEwOTcyMDAwMzFFRTAwN0YzMjI1MDA3RjAxRjA1ODI0MDFEQTY4MjFGNAorOjEwOTczMDAwM0MwQzAwMEFBMzg1MDBDNDAxQUMyODIxQUY0QjAwMjRENworOjEwOTc0MDAwOTRBOTAwMTA5NzY4MDAwNjkwQTYwMDYyMDA4MDM4MjE1NgorOjEwOTc1MDAwMjQwMjAwMzAwMTA5MjAyMzMwQzMwMEYwQUY4NTAwRDA3RgorOjEwOTc2MDAwMTA2MjAwMTkzMDkwRkZGRjkwQUUwMDYyMjQwREZGRjBGMAorOjEwOTc3MDAwMjQwQTAwNTAwMUFFNjAyNDMxOEIwMEZGMTE2QTAwMkZEMworOjEwOTc4MDAwMDAwMDAwMDAxNjAwMDAwNzI0MUYwQzAwQUY1RjAwMjQzQgorOjEwOTc5MDAwOEZCMTAwMTQ4RkJGMDAxODhGQjAwMDEwMDNFMDAwMDhENQorOjEwOTdBMDAwMjdCRDAwMjAwRTAwMEYyMzAyMDAyMDIxMjQxRjBDMDBFMworOjEwOTdCMDAwQUY1RjAwMjQ4RkIxMDAxNDhGQkYwMDE4OEZCMDAwMTA2RQorOjEwOTdDMDAwMDNFMDAwMDgyN0JEMDAyMDk0QTIwMEUwOTRBNDAwRTI3QQorOjEwOTdEMDAwOTBCRjAxMTMwMDgyMTgyNjMwNzlGRkZGMzNFNzAwQzBFNQorOjEwOTdFMDAwMTRFMDAwMDkyRjMxMDAwMTE2MDAwMDM4MDAwMDAwMDBDRAorOjEwOTdGMDAwNTYyMEZGRTYyNDFGMEMwMDBFMDAwRERFMDAwMDAwMDBDNgorOjEwOTgwMDAwMEEwMDEyN0EyNDFGMEMwMDE2MjBGRkRFMDAwMDAwMDA2MAorOjEwOTgxMDAwMEUwMDBEREUwMDAwMDAwMDE0NDBGRkRDMjQxRjBDMDBEMQorOjEwOTgyMDAwMTYwMDAwMjI4RjgzMDBEMDkwNjkwMTEzMzEyMjAwM0Y3RgorOjEwOTgzMDAwQTA2MjAxMTMwQTAwMTI3QTI0MUYwQzAwOTRBRjAwRDQxNgorOjEwOTg0MDAwOEY4NjAwRDQwMEUwMjgyMTI0MDQwMDA1MEUwMDBDN0Y0MAorOjEwOTg1MDAwMzFGMEZGRkYxNDQwMDAwNTI0MDMwMDAzOTc5MTAwRTY1OAorOjEwOTg2MDAwMDAwMDE4MjEyNjI1RkZGRkE3ODUwMEU2OEY1ODAxQjhDNAorOjEwOTg3MDAwMDcwMEZGRkUzQzE5NjAxM0FGNDAwMTgwMjQxRjBDMDA1RAorOjEwOTg4MDAwQUY1MDAxODQwMDc5MzgyNTNDMTAxMDAwQUY0NzAxODhBMworOjEwOTg5MDAwOEZCMTAwMTRBRjUwMDFCOEFGNUYwMDI0OEZCMDAwMTAzQgorOjEwOThBMDAwOEZCRjAwMTgwM0UwMDAwODI3QkQwMDIwMEUwMDBGMjMyMworOjEwOThCMDAwMDIwMDIwMjE1MDQwRkZCNTI0MUYwQzAwOEY4MzAwRDBGMAorOjEwOThDMDAwOTA2OTAxMTMwQTAwMTJBMzMxMjIwMDNGMEUwMDBGMjNGQQorOjEwOThEMDAwMDIwMDIwMjExNDQwRkZBRDI0MUYwQzAwMTIyMDAwMDdCRAorOjEwOThFMDAwOEY4MzAwRDA5MDY4MDExMzMxMDYwMDNGMzRDMjAwNDBERQorOjEwOThGMDAwQTA2MjAxMTMwQTAwMTI3QTI0MUYwQzAwMEUwMDBEREU3NAorOjEwOTkwMDAwMDAwMDAwMDA1MDQwRkZBMTI0MUYwQzAwOEY4MzAwRDBGNgorOjEwOTkxMDAwOTA2ODAxMTMzMTA2MDAzRjBBMDAxMkQzMzRDMjAwNDBBMAorOjEwOTkyMDAwQUY5QjAwQzgwM0UwMDAwOEFGODAwMEVDMzA4OUZGRkY2OAorOjEwOTkzMDAwMDAwOTQwNDIyRDAyMDA0MTAwMDkyOTgwMTQ0MDAwMDIyNAorOjEwOTk0MDAwMDAwOTUwNDAyNDA4MDA0MDAwMDg3OTQwMDAwOEMwQzBDOQorOjEwOTk1MDAwMDFGODU4MjEyNTY3MDFBODAwRUY3MDIxMjVDQzAwN0Y3MAorOjEwOTk2MDAwMjQwREZGODAwMThEMTgyNDAwNjUzMDIxMDBDQTI4MjFCNAorOjEwOTk3MDAwMjU2NDAwODgyNDBBMDA4ODNDMDEwODAwQUMyQTAwNENCOQorOjEwOTk4MDAwM0MwMTA4MDBBQzI0MDA1MEFGODUwMEQ0M0MwMTA4MDAyNQorOjEwOTk5MDAwQUMyOTAwNjAzQzAxMDgwMEFDMjgwMDY0M0MwMTA4MDBEMAorOjEwOTlBMDAwQUMyNzAwNTQzQzAxMDgwMEFDMjMwMDU4M0MwMTA4MDBERgorOjEwOTlCMDAwQUMyNjAwNUMwM0UwMDAwODAwMDAwMDAwMzA4MzAwRkZEQworOjEwOTlDMDAwMzBDNkZGRkYzMEU0MDBGRjhGNDIwMUI4MDQ0MEZGRkVDNQorOjEwOTlEMDAwMDAwMzRDMDAwMTI0MzgyNTNDMDg2MDAwMDBFODIwMjVFNQorOjEwOTlFMDAwM0MwMzEwMDBBRjQ1MDE4MEFGNDYwMTg0QUY0NDAxODhCRAorOjEwOTlGMDAwMDNFMDAwMDhBRjQzMDFCODhGODYwMDFDM0MwOTYwMTJFOQorOjEwOUEwMDAwMzUyNzAwMTA4Q0NCMDAwNDNDMEM2MDBFMzU4NTAwMTAwRgorOjEwOUExMDAwMzE2QTAwMDYyRDQ4MDAwMUFDRTgwMEM0OENDNDAwMDQ4MworOjEwOUEyMDAwQUNBNDMxODA4Q0MyMDAwODk0QzMwMDAyQUNBMjMxODQ4MworOjEwOUEzMDAwMDNFMDAwMDhBNzgzMDBFNDNDMDMwODAwOEM2MzAwNTBBNworOjEwOUE0MDAwOEY4NDAwRTg4Rjg2MDAxQzI0MDJGRjgwMDA2NEMwMjEwMAorOjEwOUE1MDAwMDMwMkM4MjRBRjU5MDAyODhDQ0QwMDA0MzMwNTAwN0ZEMQorOjEwOUE2MDAwMDBCQTc4MjEzQzBFMDAwQzAxRUUyODIxQUNBRDAwNTg2NAorOjEwOUE3MDAwOENDODAwMDhBRjg1MDBEMDNDMDc2MDEyQUNBODAwNUMyMQorOjEwOUE4MDAwOENDQzAwMTAzNEU4MDAxMEFDQUMwMDBDOENDQjAwMEM3QgorOjEwOUE5MDAwQUNBQjAwMDg5NEFBMDAxNDNDMDIwODAwOEM0MjAwNDRCRAorOjEwOUFBMDAwMjU0OTAwMDFBNEE5MDAxNDk0QTQwMDE0MzA4M0ZGRkZFOQorOjEwOUFCMDAwMTA2MjAwMTc4Rjg0MDBEMDNDMEEwODAwOEQ0QTAwNDBENQorOjEwOUFDMDAwQTRBQTAwMTI4Q0NFMDAxOEFDOEUwMDI0OENDRDAwMTRGOQorOjEwOUFEMDAwQUM4RDAwMjA4Q0M3MDAxOEFDODcwMDJDOENDQzAwMTRGNworOjEwOUFFMDAwMjQwNjAwMDFBQzhDMDAyODhEMEIwMEJDNTE2NjAwMUFDNgorOjEwOUFGMDAwOEQwMjAwQjQ4RDAyMDBCOEE0ODIwMDNBOTQ4RjAwM0ExRgorOjEwOUIwMDAwQTQ4RjAwM0M5NDg4MDBENDAzRTAwMDA4MzEwMkZGRkZEQQorOjEwOUIxMDAwM0MwOTA4MDA4RDI5MDAyNEE0QTAwMDE0OEY4NDAwRDBFMworOjEwOUIyMDAwQTRBOTAwMTI4Q0NFMDAxOEFDOEUwMDI0OENDRDAwMTQ5OQorOjEwOUIzMDAwQUM4RDAwMjA4Q0M3MDAxOEFDODcwMDJDOENDQzAwMTQ5NgorOjEwOUI0MDAwMjQwNjAwMDFBQzhDMDAyODhEMEIwMEJDNTU2NkZGRUE5MgorOjEwOUI1MDAwOEQwMjAwQjg4RDAyMDBCNEE0ODIwMDNBOTQ4RjAwM0FCRQorOjEwOUI2MDAwQTQ4RjAwM0M5NDg4MDBENDAzRTAwMDA4MzEwMkZGRkY3QQorOjEwOUI3MDAwOEY4NjAwMUMzQzBDMDgwMDhEOEMwMDUwMjQwQkZGODA0RAorOjEwOUI4MDAwOENDRDAwMDgzQzAzMDAwQzAwMEQ1MUMwMDE4QTQwMjExRgorOjEwOUI5MDAwMDEwQjQ4MjRBRjhBMDBFOEFGNDkwMDI4OTBDNzAwMDdBRQorOjEwOUJBMDAwMzEwNTAwN0YwMEJBMTAyMTAwNDMyODIxMzBFNDAwMDQ3MQorOjEwOUJCMDAwMTA4MDAwMkZBRjg1MDBEMDkwQ0YwMDA3MzFFRTAwMDg1NQorOjEwOUJDMDAwMTFDMDAwM0MwMDAwMDAwMDhDRDkwMDBDOENDNDAwMTRCMworOjEwOUJEMDAwMDMyNEMwMkIxMzAwMDAyNjAwMDAwMDAwOENDMjAwMENFMAorOjEwOUJFMDAwQUNBMjAwNjQ4Q0NEMDAxODI0MDJGRkY4QUNBRDAwNjg3NAorOjEwOUJGMDAwOENDQzAwMTBBQ0FDMDA4MDhDQ0IwMDBDQUNBQjAwODRFNworOjEwOUMwMDAwOENDQTAwMUNBQ0FBMDA3QzkwQTkwMEJDMDEyMjQwMjQ5NAorOjEwOUMxMDAwQTBBODAwQkM5MEMzMDAwNzMwNjcwMDA4MTBFMDAwMDQ1MworOjEwOUMyMDAwOEY4NTAwRDA5MEFGMDBCQzM1RUUwMDAxQTBBRTAwQkMyNworOjEwOUMzMDAwOTBEOTAwMDczMzM4MDAwMTEzMDAwMDBGOEY4NDAwRDA0MworOjEwOUM0MDAwMjQwNzAwMjA5MDgyMDBCQzM0NDkwMDAyQTA4OTAwQkM5NworOjEwOUM1MDAwOEY4NDAwRDA5MDg4MDA2MjMxMDMwMEYwMTQ2NzAwMDYwMgorOjEwOUM2MDAwMjQwQTAwMzRBQzhBMDBDMDBBMDAxM0I1MDAwMDAwMDBDQQorOjEwOUM3MDAwMEEwMDEzOEY4Q0MyMDAxNDkwQ0IwMDA3MzE2NjAwMDJEQgorOjEwOUM4MDAwMTBDMDAwMDUwMDAwMDAwMDkwOEQwMEJDMzVBQzAwMDQ0MQorOjEwOUM5MDAwQTA4QzAwQkM4Rjg0MDBEMDkwOTgwMTEzMzMwRjAwM0YzQworOjEwOUNBMDAwQTA4RjAxMTM4RjhFMDBEMDk1QzUwMEQ0MDNFMDAwMDg2QgorOjEwOUNCMDAwMzBBMkZGRkZBQ0EwMDA2NDBBMDAxMzkwMDAwMDAwMDA3NworOjEwOUNDMDAwMjdCREZGRDhBRkIwMDAxMDhGOTAwMDFDQUZCRjAwMjQ5RAorOjEwOUNEMDAwQUZCNDAwMjBBRkIyMDAxOEFGQjEwMDE0QUZCMzAwMUM5NgorOjEwOUNFMDAwOTYxMzAwMEUzQzA3NjAwQTNDMTQ2MDA2MzI2NEZGRkZDNgorOjEwOUNGMDAwMzY5MzAwMTAwRTAwMTJFMjM0RjQwNDEwOEY4NDAwRDQ2NgorOjEwOUQwMDAwM0MxMTYwMEUwRTAwMDlCRTM2MzEwMDEwOTIwRTAwMTU5NworOjEwOUQxMDAwM0MwNzA4MDA4Q0U3MDA2MDNDMTI2MDEyMzFDRDAwMEY1OAorOjEwOUQyMDAwQTM4RDAwRjA4RTBFMDAwNDhFMEQwMDA4OTYwODAwMTIyMAorOjEwOUQzMDAwOTYxRjAwMTA5NjE5MDAxQTk2MTgwMDFFOTYwRjAwMUMwOAorOjEwOUQ0MDAwMzEwQ0ZGRkYzM0VCRkZGRjMzMkFGRkZGMzMwOUZGRkYyNworOjEwOUQ1MDAwMzFFNkZGRkYzQzAxMDgwMEFDMkIwMDQwM0MwMTA4MDA0RAorOjEwOUQ2MDAwQUMyQzAwMjQzQzAxMDgwMEFDMkEwMDQ0QUUyOTMxNzgxOAorOjEwOUQ3MDAwQUUyNjMxN0M5MjAyMDAxNTk2MDMwMDE2MzY1MjAwMTA3MgorOjEwOUQ4MDAwMzA0NDAwRkYzMDY1RkZGRjNDMDYwODAwOENDNjAwNjRDRAorOjEwOUQ5MDAwQUUyNDMxODhBRTQ1MDBCNDkyMDgwMDE0OTYxOTAwMTgxQworOjEwOURBMDAwMjQxRjAwMDEwMTFGQzAwNDMzMkZGRkZGM0MwNTA4MDBFMgorOjEwOURCMDAwOENBNTAwNThBRTU4MDBCOEFFNEYwMEJDOTIwQzAwMTRGMQorOjEwOURDMDAwQUY4RTAwRDhBRjhEMDBEQzMxOEIwMEZGQUU0QjAwQzBGMgorOjEwOUREMDAwOTIwQTAwMTVBRTY3MDA0OEFFNjYwMDRDMzE0OTAwRkY5QworOjEwOURFMDAwQUU0OTAwQzhBRTY1MDA3QzNDMDMwODAwOEM2MzAwNTA5RgorOjEwOURGMDAwM0MwNDA4MDA4Qzg0MDA0QzNDMDgwODAwOEQwODAwNTQ4QQorOjEwOUUwMDAwM0MwMjA4MDA4QzQyMDA1QzhGQkYwMDI0QUU2MzAwODBERgorOjEwOUUxMDAwOEZCMDAwMTBBRTgzMDA3NDhGQjMwMDFDQUUyMjMxOUM1MworOjEwOUUyMDAwQUU0MjAwRENBRTI3MzFBMEFFMjYzMUE0QUUyNDMxOEM4OAorOjEwOUUzMDAwQUUyMzMxOTBBRTI4MzE5NEFFMjUzMTk4QUU4NzAwNTBENAorOjEwOUU0MDAwQUU4NjAwNTRBRTg1MDA3MDhGQjEwMDE0QUU0NzAwRTBCRQorOjEwOUU1MDAwQUU0NjAwRTRBRTQ0MDBDQ0FFNDMwMEQwQUU0ODAwRDRFMQorOjEwOUU2MDAwQUU0NTAwRDg4RkI0MDAyMDhGQjIwMDE4MDNFMDAwMDg4MAorOjEwOUU3MDAwMjdCRDAwMjgyN0JERkZFMEFGQjEwMDE0QUZCRjAwMTgxOQorOjEwOUU4MDAwMjQxMTAwMDEwRTAwMDg2OEFGQjAwMDEwMTA1MTAwMDU0OQorOjEwOUU5MDAwOTc4NDAwRTY5NzgzMDBDQzAwODMxMDJCMTQ0MDAwMDhDMQorOjEwOUVBMDAwOEY4NTAwRDQyNDA3MDAwMjhGQkYwMDE4OEZCMTAwMTRFMworOjEwOUVCMDAwOEZCMDAwMTAwMEUwMTAyMTAzRTAwMDA4MjdCRDAwMjA1MworOjEwOUVDMDAwMEUwMDBDOUQyNDA0MDAwNUFGODIwMEU4MTA0MEZGRjY1MAorOjEwOUVEMDAwMjQwNzAwMDIwRTAwMDg2QzhGOTAwMDFDOTc5RjAwRTY3QworOjEwOUVFMDAwOEY5OTAwRTg4RjhEMDBDODI3RUYwMDAxMjQwRTAwNTBFNQorOjEwOUVGMDAwQUY1OTAwMjBBNzhGMDBFNkExQUUwMDAwM0MwQzA4MDA3RgorOjEwOUYwMDAwOEQ4QzAwNjQ4Rjg2MDBDODI0MEE4MDAwMDAwQzVFMDBERgorOjEwOUYxMDAwQUNDQjAwNzRBNEMwMDAwNjk0QzkwMDBBMjQxRkZGODBDMworOjEwOUYyMDAwM0MwRDAwMEMwMTJBQzAyNEE0RDgwMDBBOTBDODAwMEFFNQorOjEwOUYzMDAwMjQxODIwMDAwMTFGMTgyNUEwQzMwMDBBOEY4NzAwQzgxRAorOjEwOUY0MDAwQTBFMDAwNzg4Rjg1MDBDODAwMDAzODIxQTBBMDAwODMyMQorOjEwOUY1MDAwM0MwMjA4MDA4QzQyMDA1MDhGODQwMEU4MDA0NDc4MjFDNQorOjEwOUY2MDAwMDFGRkM4MjRBRjU5MDAyODk2MEIwMDAyMzFFRTAwN0Y5NAorOjEwOUY3MDAwMDFEQTYwMjEwMThEMzAyMUE0Q0IwMEQ0OTYwQTAwMDJDMQorOjEwOUY4MDAwQUY4NjAwRDAzQzBFMDAwNDI1NDkyNDAxQTRDOTAwRTY5OAorOjEwOUY5MDAwOEUwODAwMDRBQ0M4MDAwNDhFMDMwMDA4QUNDMzAwMDBBNworOjEwOUZBMDAwQTRDMDAwMTBBNEMwMDAxNEEwQzAwMEQwOEY4NTAwRDBCMQorOjEwOUZCMDAwMjQwM0ZGQkZBMEEwMDBEMTNDMDQwODAwOEM4NDAwNjRFRgorOjEwOUZDMDAwOEY4MjAwRDBBMDQ0MDBEMjhFMUYwMDBDOEY4QTAwRDA1OAorOjEwOUZEMDAwOTc4RjAwRTRBRDVGMDAxQzhFMTkwMDEwMjQxMDAwMzAzNAorOjEwOUZFMDAwQUQ1OTAwMThBNTQwMDAzMEE1NTEwMDU0QTU1MTAwNTZBOAorOjEwOUZGMDAwQTU0RjAwMTZBRDRFMDA2OEFENTgwMDgwQUQ1ODAwODRFNgorOjEwQTAwMDAwOTE0RDAwNjIzMUFDMDAwRjM1OEIwMDEwQTE0QjAwNjIwNgorOjEwQTAxMDAwOEY4NjAwRDA5MEM5MDA2MzMxMjgwMDdGQTBDODAwNjNGQworOjEwQTAyMDAwOEY4NDAwRDAyNDA2RkZGRjkwODUwMDYzMDBBMzEwMjRENgorOjEwQTAzMDAwQTA4MjAwNjM4RjkxMDBEMDAwRTAxMDIxOTIzRjAwQkMwRAorOjEwQTA0MDAwMzdGOTAwMDFBMjM5MDBCQzhGOEEwMEQwOTM4RjAwRjA0RAorOjEwQTA1MDAwQUQ1ODAwNjRBRDUwMDBDMDkxNEUwMEQzMDAwRjY5MDBCMAorOjEwQTA2MDAwMzFDQzAwMEYwMThENTgyNUExNEIwMEQzOEY4NTAwRDAzNgorOjEwQTA3MDAwOEY4OTAwRENBQ0E5MDBFODhGODgwMEQ4OEZCRjAwMTg1QQorOjEwQTA4MDAwOEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwQUNBODAwRUNFOQorOjEwQTA5MDAwQTRBNjAwRDZBNEEwMDBFMEE0QTAwMEUyMDNFMDAwMDg2QgorOjEwQTBBMDAwMDAwMDAwMDAyN0JERkZFMEFGQjAwMDEwOEY5MDAwMUM0MworOjEwQTBCMDAwQUZCMTAwMTRBRkJGMDAxODhFMTkwMDA0M0MxODA4MDA5RgorOjEwQTBDMDAwOEYxODAwNTAyNDBGRkY4MDAwMTk4OUMwMDIzODcwMjFCQQorOjEwQTBEMDAwMzFDRDAwN0YwMUNGNjAyNDAxQkE1MDIxM0MwQjAwMEMzMAorOjEwQTBFMDAwQUY0QzAwMjgwMTRCNDAyMTk1MDkwMEQ0OTUwNDAwRDZCRgorOjEwQTBGMDAwOEUwNzAwMDQzMTMxRkZGRkFGODgwMEQwMEUwMDA5MzYxMworOjEwQTEwMDAwMDAwNzIxQzA4RTA2MDAwNDhGODMwMEM4MDAwNjI5QzAwNgorOjEwQTExMDAwQUY0NTAwMjA5MDY0MDAzRTMwODIwMDQwMTQ0MDAwMDZBRAorOjEwQTEyMDAwOEY4NDAwRDAzNDFGRkZGRjk0ODMwMEQ2MzA2MkZGRkY3RQorOjEwQTEzMDAwMTQ1RjAwMDQwMDAwMDAwMDk0ODQwMEQ2MEUwMDA4Q0JEOQorOjEwQTE0MDAwMzA4NEZGRkY4RTA1MDAwNDAyMjAzMDIxOEZCRjAwMThFRAorOjEwQTE1MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyMDAwMDM4MjFCOQorOjEwQTE2MDAwMDAwNTI5QzAwQTAwMTMwNjI3QkQwMDIwMjdCREZGRTAxNworOjEwQTE3MDAwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwQUZCRjAwMThCNworOjEwQTE4MDAwMTIyMDAwMUQwMDAwODAyMThGODYwMDFDOENDNTAwMDA1RAorOjEwQTE5MDAwMjQwMzAwMDYwMDA1M0YwMjAwMDUxNDAyMzBFNDAwMDcxNgorOjEwQTFBMDAwMTQ4MzAwMTUzMDQ1MDBGRjJDQTgwMDA2MTEwMDAwNEQ1NworOjEwQTFCMDAwMDAwNTU4ODAzQzBDMDgwMDI1OEM1QTBDMDE2QzUwMjE3RAorOjEwQTFDMDAwOEQ0OTAwMDAwMTIwMDAwODAwMDAwMDAwOEY4RTAwRUM4NworOjEwQTFEMDAwMjQwRDAwMDExMUNEMDA1OTAwMDAwMDAwMjYwQjAwMDFFNAorOjEwQTFFMDAwMzE3MEZGRkYyNENBMDAyMDAyMTEyMDJCMDE0MDMwMjFEMgorOjEwQTFGMDAwMTQ4MEZGRTZBRjhBMDAxQzAyMDAxMDIxOEZCRjAwMThGOAorOjEwQTIwMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBCQworOjEwQTIxMDAwOTM4NzAwQ0UxNEUwMDAzODI0MDQwMDE0MEUwMDEzQzcwNgorOjEwQTIyMDAwMDAwMDAwMDA4Rjg2MDAxQzI0MDIwMDAxMEEwMDE1MEVBOQorOjEwQTIzMDAwQUY4MjAwRUM4Rjg5MDBFQzI0MDgwMDAyMTEyODAwM0I1QgorOjEwQTI0MDAwMjQwNDAwMTMwMDAwMjgyMTAwMDAzMDIxMjQwNzAwMDEwRAorOjEwQTI1MDAwMEUwMDEzMDYwMDAwMDAwMDBBMDAxNTBFOEY4NjAwMUM3OQorOjEwQTI2MDAwOEY4NzAwRUMyNDA1MDAwMjE0RTVGRkY2MjQwNDAwMTI5OQorOjEwQTI3MDAwMEUwMDEzNzMwMDAwMDAwMDhGODUwMEU4MDA0MDMwMjFCRAorOjEwQTI4MDAwMjQwNDAwMTIwRTAwMTMwNjAwMDAzODIxMEEwMDE1MEVFNworOjEwQTI5MDAwOEY4NjAwMUM4RjgzMDBFQzI0MUYwMDAzMTQ3RkZGRDBFNworOjEwQTJBMDAwMjYwQjAwMDEwRTAwMTMyNTAwMDAwMDAwOEY4NTAwRTgzQQorOjEwQTJCMDAwMDA0MDMwMjEyNDAyMDAwMjI0MDQwMDEwMDAwMDM4MjE1NAorOjEwQTJDMDAwQUY4MjAwRUMwRTAwMTMwNjAwMDAwMDAwMEEwMDE1MEUxRAorOjEwQTJEMDAwOEY4NjAwMUM4RjhGMDBFQzI0MDYwMDAyMTFFNjAwMEIxNQorOjEwQTJFMDAwMDAwMDAwMDAyNDA0MDAxMDAwMDAyODIxMDAwMDMwMjE5QworOjEwQTJGMDAwMEEwMDE1MkIyNDA3MDAwMTAwMDAyODIxMEUwMDEzMDY3OAorOjEwQTMwMDAwMDAwMDMwMjEwQTAwMTUwRThGODYwMDFDMEUwMDE0MzQ0OAorOjEwQTMxMDAwMDAwMDAwMDAxNDQwMDAxMjhGOTkwMDFDOEY4NjAwMUM2MgorOjEwQTMyMDAwMjQwMjAwMDMwQTAwMTUwRUFGODIwMEVDMEUwMDE0QzBEOAorOjEwQTMzMDAwMDAwMDAwMDAwQTAwMTUwRThGODYwMDFDMEUwMDEzMTU4OQorOjEwQTM0MDAwMDAwMDAwMDAyNDAyMDAwMjI0MDQwMDE0MDAwMDI4MjE2MAorOjEwQTM1MDAwMDAwMDMwMjEwMDAwMzgyMTBBMDAxNTQ4QUY4MjAwRUNDRgorOjEwQTM2MDAwMDA0MDM4MjEyNDA0MDAxMDk3MzgwMDAyMDAwMDI4MjEwMgorOjEwQTM3MDAwMEUwMDEzMDYzMzA2RkZGRjBBMDAxNTBFOEY4NjAwMUMyMQorOjEwQTM4MDAwOEY4NDAwQzgzQzA3N0ZGRjM0RTZGRkZGOEM4NTAwNzQ5NAorOjEwQTM5MDAwMjQwMjAwMDEwMEE2MTgyNEFDODMwMDc0MDNFMDAwMDgyNgorOjEwQTNBMDAwQTA4MjAwMDUxMEEwMDAzNjJDQTIwMDgwMjc0QTA0MDBERAorOjEwQTNCMDAwM0MwQjAwMDUyNDA5MDA4MDEwNDAwMDA3MjQwODAwODBBMQorOjEwQTNDMDAwMzBBNjAwMEYwMEM1NDAyMTJEMDMwMDgxMTQ2MDAwMDI1QgorOjEwQTNEMDAwMDBBMDQ4MjEyNDA4MDA4MEFGNEIwMDMwMDAwMDAwMDA5RQorOjEwQTNFMDAwMDAwMDAwMDAwMDAwMDAwMDExMDAwMDA5MDAwMDM4MjFGQQorOjEwQTNGMDAwMDE0MDMwMjE4QzhEMDAwMDI0RTcwMDA0MDBFODYwMkIzMAorOjEwQTQwMDAwQUNDRDAwMDAyNDg0MDAwNDE1ODBGRkZBMjRDNjAwMDRBQgorOjEwQTQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwRTAwMDZFQworOjEwQTQyMDAwMDEwRTM4MjVBRjQ3MDAzMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQTQzMDAwMDAwMDAwMDA4RjRGMDAwMDMxRTgwMDEwMTEwMEZGRkQwOAorOjEwQTQ0MDAwMDAwMDAwMDA4RjQyMDAzQzhGNDMwMDNDMDA0OUM4MjFCRgorOjEwQTQ1MDAwMDMyM0MwMkIxMzAwMDAwNDAwMDAwMDAwOEY0QzAwMzhDMQorOjEwQTQ2MDAwMjU4NjAwMDFBRjQ2MDAzODhGNDcwMDNDMDBBOTI4MjMwRAorOjEwQTQ3MDAwMDBFOTY4MjFBRjREMDAzQzE0QTBGRkNFMkNBMjAwODA2MworOjEwQTQ4MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQwM0MwMjAwMDJFRQorOjEwQTQ5MDAwQUZCMTAwMTQzQzExMDAwQ0FGNDUwMDM4QUZCMzAwMUM0NQorOjEwQTRBMDAwQUY0NjAwM0MwMDgwOTgyMUFGNDIwMDMwMjQwNTAwODg3MAorOjEwQTRCMDAwQUY0NDAwMjgwMzUxMjAyMUFGQkYwMDI4QUZCNTAwMjRDRQorOjEwQTRDMDAwQUZCNDAwMjBBRkIyMDAxODBFMDAxNTgwQUZCMDAwMTA3RQorOjEwQTREMDAwM0MxRjA4MDA4RkZGMDA0QzNDMTgwODAwOEYxODAwNjREOAorOjEwQTRFMDAwMjQxMEZGODAwM0YzQTgyMTMyQjkwMDdGMDJCMDc4MjQ0MgorOjEwQTRGMDAwMDAxOEEwQzAwMzNBNzAyMTAwMTg5MTQwMDFEMTIwMjExQQorOjEwQTUwMDAwQUY0RjAwMjgwRTAwMTU4MDAyNTQyODIxM0MwRDA4MDA5MgorOjEwQTUxMDAwOERBRDAwNTAyNDA1MDEyMDAxQjM1ODIxMzE2QzAwN0YxRQorOjEwQTUyMDAwMDE3MDUwMjQwMTlBNDgyMTAxMzEyMDIxMEUwMDE1ODAyQworOjEwQTUzMDAwQUY0QTAwMjgzQzA4MDgwMDhEMDgwMDU0M0MwNTA4MDA3QworOjEwQTU0MDAwOENBNTAwNjQwMTEzMzgyMTMwRTYwMDdGMDBGMDE4MjQ0OAorOjEwQTU1MDAwMDBEQTIwMjEwMDkxMjAyMUFGNDMwMDI4MEUwMDE1ODA1MQorOjEwQTU2MDAwMDAwNTI5NDAzQzAyMDgwMDhDNDIwMDU4M0MxMDA4MDBCRAorOjEwQTU3MDAwOEUxMDAwNjAxMjAwMDAxQzAwNTM4ODIxMjQxNUZGODBGQgorOjEwQTU4MDAwMEEwMDE2MDMzQzE0MDAwQzMyMjYwMDdGMDIzNTE4MjQwMgorOjEwQTU5MDAwMDBEQTIwMjEwMjQwMjgyMUFGNDMwMDI4MDA5NDIwMjEyNgorOjEwQTVBMDAwMEUwMDE1ODAyNjEwRkZDMDEyMDAwMDBGMDIzMjg4MjExNQorOjEwQTVCMDAwMkUwNTAwNDExMEEwRkZGNDI0MTIxMDAwMzIyNjAwN0Y2NworOjEwQTVDMDAwMDAxMDkxODAwMjM1MTgyNDAwREEyMDIxMDI0MDI4MjE1MQorOjEwQTVEMDAwQUY0MzAwMjgwMDk0MjAyMTBFMDAxNTgwMDAwMDgwMjE0OAorOjEwQTVFMDAwMTYwMEZGRjMwMjMyODgyMTNDMEIwODAwOEQ2QjAwNUNFMworOjEwQTVGMDAwMjQwQUZGODAyNDA1MDAwMjAxNzM0MDIxMDEwQTQ4MjQzNworOjEwQTYwMDAwQUY0OTAwMjgzQzA0MDgwMDk0ODQwMDYyMzExMDAwN0ZBOAorOjEwQTYxMDAwMDIxQTg4MjEzQzA3MDAwQzBFMDAwQ0NEMDIyNzk4MjE1RAorOjEwQTYyMDAwMDA0MDI4MjEwMjYwMjAyMThGQkYwMDI4OEZCNTAwMjQyMAorOjEwQTYzMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRBQworOjEwQTY0MDAwOEZCMDAwMTAwQTAwMTU4MDI3QkQwMDMwOEY4MzAwMUNEQQorOjEwQTY1MDAwOEM2MjAwMDQxMDQwMDAwMzAwMDAwMDAwMDNFMDAwMDhDQQorOjEwQTY2MDAwMDAwMDAwMDA4QzY0MDAxMDhDNjUwMDA4MEEwMDE1QjkxOQorOjA0QTY3MDAwOEM2NjAwMENFOAorOjBDQTY3NDAwMDAwMDAwMDAwMDAwMDAxQjAwMDAwMDBGQjAKKzoxMEE2ODAwMDAwMDAwMDBBMDAwMDAwMDgwMDAwMDAwNjAwMDAwMDA1QUQKKzoxMEE2OTAwMDAwMDAwMDA1MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzQUEKKzoxMEE2QTAwMDAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzOUUKKzoxMEE2QjAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyOTIKKzoxMEE2QzAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyODIKKzoxMEE2RDAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyNzIKKzoxMEE2RTAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAxNjMKKzowOEE2RjAwMDAwMDAwMDAxMDAwMDAwMDE2MAorOjA4QTZGODAwMDgwMDBGNTgwODAwMERCMDI2Cis6MTBBNzAwMDAwODAwMEZFQzA4MDAxMDk0MDgwMDBGODAwODAwMEZDMDJDCis6MTBBNzEwMDAwODAwMTFDQzA4MDAwRENDMDgwMDExRjAwODAwMEUxQzM4Cis6MTBBNzIwMDAwODAwMTYzMDA4MDAxNUQ4MDgwMDBEQ0MwODAwMERDQzI0Cis6MTBBNzMwMDAwODAwMERDQzA4MDAxMjdDMDgwMDEyN0MwODAwMERDQzJCCis6MTBBNzQwMDAwODAwMERDQzA4MDAxNTdDMDgwMDBEQ0MwODAwMERDQ0NECis6MTBBNzUwMDAwODAwMERDQzA4MDAwRENDMDgwMDEzRUMwODAwMERDQzRGCis6MTBBNzYwMDAwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzY1Cis6MTBBNzcwMDAwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzU1Cis6MTBBNzgwMDAwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzQ1Cis6MTBBNzkwMDAwODAwMERDQzA4MDAwRkUwMDgwMDBEQ0MwODAwMERDQzFGCis6MTBBN0EwMDAwODAwMTUyQzA4MDAwRENDMDgwMDBEQ0MwODAwMERDQ0JECis6MTBBN0IwMDAwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzE1Cis6MTBBN0MwMDAwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwODAwMERDQzA1Cis6MTBBN0QwMDAwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwODAwMERDQ0Y1Cis6MTBBN0UwMDAwODAwMERDQzA4MDAwRENDMDgwMDE0NTgwODAwMERDQzUyCis6MTBBN0YwMDAwODAwMERDQzA4MDAxMzcwMDgwMDEyRTAwODAwMkVBMDFECis6MTBBODAwMDAwODAwMkVBODA4MDAyRTcwMDgwMDJFN0MwODAwMkU4ODU0Cis6MTBBODEwMDAwODAwMkU5NDA4MDA0NkMwMDgwMDNGMEMwODAwNDY0MDdGCis6MTBBODIwMDAwODAwNDZDMDA4MDA0NkMwMDgwMDQ0QzAwODAwNDZDMEYyCis6MTBBODMwMDAwODAwNDcwODA4MDA1NTMwMDgwMDU0RjAwODAwNTRCQ0QwCis6MENBODQwMDAwODAwNTQ5MDA4MDA1NDZDMDgwMDU0MjhENAorOjA0QTg0QzAwMEEwMDBDNzY3QworOjEwQTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENzI3ODcwMzU1QworOjEwQTg2MDAwMkUzMDJFMzA2QTMzMDAwMDA1MDAwMDAzMDAwMDAwMDA4NworOjEwQTg3MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQjM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQjM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQjNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQjNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQjNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQjNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQjNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQjQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQjQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQjQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQjQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQjQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQjQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQjQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQjRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQjREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQjRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQjUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQjUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQjU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQjU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQjU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQjVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQjVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQjY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQjZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQjZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQjcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQjcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQjczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQjc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQjc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQjc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQjc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQjc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQjdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQjdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQjdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQjdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQjdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQjgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQjgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQjg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQkFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQkIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQkM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQkNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQkQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQkQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQkU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQkU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQkYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQkZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQzAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQzA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQzA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQzA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQzA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQzBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQzBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQzBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQzEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQzE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQzE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQzE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQzE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQzFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQzFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQzFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQzIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQzIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQzI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQzI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQzI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQzI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQzJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQzJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQzJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQzJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQzJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQzMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQzMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQzM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQzM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQzM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQzM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQzM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQzM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQzNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQzNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQzNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQzNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQzQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQzQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQzQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQzQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQzQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQzQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQzQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQzRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQzRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQzREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQzRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQzUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQzUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQzUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQzU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQzU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQzU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQzU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQzU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQzVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQzVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQzVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQzVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQzVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQzYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQzYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQzYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQzY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQzY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQzY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQzY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQzZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQzZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQzZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQzZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQzcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQzcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQzczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQzc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQzc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQzdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQzdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQzdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQzgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQzg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQzg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQzhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQzhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQzhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQzhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQzkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQzkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQzkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQzk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQzk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQzk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQzk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQzk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQzk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQzlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQzlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQzlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQzlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQ0ExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQ0EyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQ0EzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQ0E0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQ0E1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQ0E2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQ0E3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQ0E4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQ0E5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQ0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQ0FCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQ0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQ0FEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQ0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQ0FGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQ0IxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQ0IyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQ0IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQ0I0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQ0I1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQ0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQ0I3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQ0I4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQ0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQ0JBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQ0JCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQ0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQ0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQ0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQ0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQ0MxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQ0MyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQ0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQ0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQ0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQ0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQ0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQ0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQ0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQ0NBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQ0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQ0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQ0NEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQ0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQ0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQ0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQ0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQ0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQ0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQ0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQ0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQ0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQ0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQ0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQ0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQ0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQ0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQ0REMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQ0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQ0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQ0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQ0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQ0UzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQ0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQ0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQ0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQ0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQ0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQ0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQ0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQ0VCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQ0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQ0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQ0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQ0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQ0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQ0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQ0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQ0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQ0Y2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQ0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQ0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQ0Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQ0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQ0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQ0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQ0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQ0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQ0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwRDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwRDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwRDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwRDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwRDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwRDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwRDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwRDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwRDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwRDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwRDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwRDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwRDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwRDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwRDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwRDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwRDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwRDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwRDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwRDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwRDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwRDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwRDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwRDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwRDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwRDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwRDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwRDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwRDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwRDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwRDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwRDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwRDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwRDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwRDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwRDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwRDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwRDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwRDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwRDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwRDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwRDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwRDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwRDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwRDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwRDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwRDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwRDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwRDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwRDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwRDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwRDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwRDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwRDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwRDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwRDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwRDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwRDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwRDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwRDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwRDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwRDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwRDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwRDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwRDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwRDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwRDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwRDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwRDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwRDREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwRDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwRDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwRDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwRDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwRDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwRDU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwRDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwRDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwRDU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwRDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwRDU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwRDVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwRDVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwRDVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwRDVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwRDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwRDVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwRDYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwRDYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwRDYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwRDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwRDY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwRDY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwRDY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwRDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwRDY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwRDZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwRDZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwRDZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwRDZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwRDZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwRDZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwRDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwRDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwRDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwRDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwRDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwRDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwRDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwRDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwRDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwRDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwRDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwRDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwRDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwRDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwRDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwRDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwRDgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwRDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwRDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwRDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwRDg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwRDg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwRDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwRDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwRDhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwRDhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwRDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwRDhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwRDhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwRDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwRDkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwRDkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwRDkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwRDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwRDk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwRDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwRDk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwRDk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwRDk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwRDlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwRDlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwRDlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwRDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwRDlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwRDlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwREExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwREEyMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzMDAwMDAwMDBFMworOjEwREEzMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwMjQ0MjcxNDA2RgorOjEwREE0MDAwM0MwMzA4MDAyNDYzNzVFMEFDNDAwMDAwMDA0MzIwMkIzOQorOjEwREE1MDAwMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwMzdCRDdGRkNGQworOjEwREE2MDAwMDNBMEYwMjEzQzEwMDgwMDI2MTAzMUQ4M0MxQzA4MDAwRgorOjEwREE3MDAwMjc5QzcxNDAwRTAwMTBFRDAwMDAwMDAwMDAwMDAwMEQxQQorOjEwREE4MDAwMzBBNUZGRkYzMEM2MDBGRjI3NDMwMTgwOEY0MjAxQjg1OQorOjEwREE5MDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMDAwQTQ2NTAwMDhGQworOjEwREFBMDAwQTA2NjAwMEFBMDYyMDAwQjNDMDIxMDAwQUM2NzAwMThFMAorOjEwREFCMDAwMDNFMDAwMDhBRjQyMDFCODNDMDM2MDAwOEM2MjRGRjhGRAorOjEwREFDMDAwMDQ0MEZGRkUzQzAyMDIwMEFDNjQ0RkMwQUM2MjRGQzQ5NQorOjEwREFEMDAwM0MwMjEwMDAwM0UwMDAwOEFDNjI0RkY4OTQ4MjAwMEM5NgorOjEwREFFMDAwMjQ4NjAwMTQwMEEwMzgyMTAwMDIxMzAyMDAwMjEwODBENgorOjEwREFGMDAwMDA4MjQwMjEwMEM4MTAyQjEwNDAwMDU3MDAwMDAwMDA5OQorOjEwREIwMDAwOTBDMzAwMDAyQzYyMDAwOTUwNDAwMDUxOTBDMjAwMDFGNworOjEwREIxMDAwMDAwMzEwODAzQzAzMDgwMDI0NjM3MEYwMDA0MzEwMjFEMAorOjEwREIyMDAwOEM0MjAwMDAwMDQwMDAwODAwMDAwMDAwOTBDMzAwMDE4QgorOjEwREIzMDAwMjQwMjAwMEExNDYyMDAzQTAwMDAwMDAwMDEwNjEwMjNDQgorOjEwREI0MDAwMkM0MjAwMEExNDQwMDAzNjI0QzYwMDAyOENFMjAwMDA3OQorOjEwREI1MDAwMzQ0MjAxMDBBQ0UyMDAwMDkwQzIwMDAwOTBDMzAwMDExQQorOjEwREI2MDAwOTBDNDAwMDI5MEM1MDAwMzAwMDMxQzAwMDAwMjE2MDBEMAorOjEwREI3MDAwMDA0MzEwMjUwMDA0MjIwMDAwNDQxMDI1MDA0NTEwMjUxNAorOjEwREI4MDAwMjRDNjAwMDRBQ0UyMDAwNDkwQzIwMDAwOTBDMzAwMDE2RgorOjEwREI5MDAwOTBDNDAwMDI5MEM1MDAwMzAwMDIxNjAwMDAwMzFDMDBBMAorOjEwREJBMDAwMDA0MzEwMjUwMDA0MjIwMDAwNDQxMDI1MDA0NTEwMjVFNAorOjEwREJCMDAwMjRDNjAwMDQwQTAwMENBQUFDRTIwMDA4OTBDMzAwMDFDRAorOjEwREJDMDAwMjQwMjAwMDQxNDYyMDAxNjI0QzYwMDAyOTBDMjAwMDA2MQorOjEwREJEMDAwOTBDNDAwMDE4Q0UzMDAwMDAwMDIxMjAwMDA0NDEwMjVGNAorOjEwREJFMDAwMzQ2MzAwMDQyNEM2MDAwMkFDRTIwMDBDMEEwMDBDQUE1NAorOjEwREJGMDAwQUNFMzAwMDA5MEMzMDAwMTI0MDIwMDAzMTQ2MjAwMDg5QgorOjEwREMwMDAwMjRDNjAwMDI4Q0UyMDAwMDkwQzMwMDAwMjRDNjAwMDE3QworOjEwREMxMDAwMzQ0MjAwMDhBMEUzMDAxMDBBMDAwQ0FBQUNFMjAwMDBBNQorOjEwREMyMDAwMDNFMDAwMDgyNDAyMDAwMTkwQzMwMDAxMjQwMjAwMDI2NgorOjEwREMzMDAwMTA2MjAwMDIyNEM0MDAwMjAxMDAyMDIxMEEwMDBDQUE4NAorOjEwREM0MDAwMDA4MDMwMjEwQTAwMENBQTI0QzYwMDAxOTBDMjAwMDEwNQorOjEwREM1MDAwMEEwMDBDQUEwMEMyMzAyMTAzRTAwMDA4MDAwMDEwMjFENQorOjEwREM2MDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwMEUwMDExRkVEQgorOjEwREM3MDAwMDA4MDgwMjE5MzYyMDAwNTI0MDNGRkZFMDIwMDIwMjEyMgorOjEwREM4MDAwMDA0MzEwMjQ4RkJGMDAxNDhGQjAwMDEwQTM2MjAwMDU2MgorOjEwREM5MDAwMEEwMDEyMDcyN0JEMDAxODI3QkRGRkU4QUZCMDAwMTAyQgorOjEwRENBMDAwQUZCRjAwMTQwRTAwMEYxODAwODA4MDIxOTM2MjAwMDBBNworOjEwRENCMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDA0MjQwMjAxMDBGQQorOjEwRENDMDAwQUY0MjAxODAwQTAwMEQyMjAyMDAyMDIxQUY0MDAxODBGNgorOjEwRENEMDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDBGNzlCRQorOjEwRENFMDAwMjdCRDAwMTgyN0JERkY4MEFGQkUwMDc4QUZCNzAwNzQxNgorOjEwRENGMDAwQUZCMzAwNjRBRkJGMDA3Q0FGQjYwMDcwQUZCNTAwNkNDRgorOjEwREQwMDAwQUZCNDAwNjhBRkIyMDA2MEFGQjEwMDVDQUZCMDAwNTgxNAorOjEwREQxMDAwOEY1MDAxMjg5MzYzMDAzRjkzNjIwMDA1MDAwMEYwMjFCQgorOjEwREQyMDAwMzA3MzAwRkYwMDAyMTAyNzMwNDIwMDAxMDAwMEI4MjFDQworOjEwREQzMDAwMTQ0MDAwNjZBRkEwMDA1MDkzNDIwMTE2OTM0MzAxMTJCNQorOjEwREQ0MDAwMzA0MjAwRkYzMDYzMDBGRjAzNDIyMDIxMDM0MzEwMjFEMworOjEwREQ1MDAwMjQ0NTQwMDA4RjgyMDAxODEwNDAwMDE4MjQ5MTQwMDA5NAorOjEwREQ2MDAwOEY0MjAxMDQzQzAzMDAwMTAwNDMxMDI0MTA0MDAwMTNDMworOjEwREQ3MDAwMDAwMDAwMDA4Q0EzMDAwQzhGNjIwMDMwMTQ2MjAxQjUxQgorOjEwREQ4MDAwMjQwMjAwMDE4Q0EzMDAxMDhGNjIwMDJDMTQ2MjAxQjFFOAorOjEwREQ5MDAwMjQwMjAwMDE5NzYyMDAzQTk0ODM0MDAwMzA0MkZGRkY2MgorOjEwRERBMDAwMTQ2MjAxQUMyNDAyMDAwMTk3NjIwMDM4OTYyMzAwMDIzRAorOjEwRERCMDAwMzA0MkZGRkYxNDYyMDFBNzI0MDIwMDAxOTM2MjAwMDBCOQorOjEwRERDMDAwMzA0MzAwRkYyNDAyMDAyMDEwNjIwMDA1MjQwMjAwNTBBRQorOjEwREREMDAwMTA2MjAwMDYwMDAwMDAwMDBBMDAwRDZDMDAwMDAwMDA0OAorOjEwRERFMDAwMDAwMDAwMEQwQTAwMEQ3NUFGQTAwMDMwM0MxRTA4MDBCOQorOjEwRERGMDAwMjdERTcxQTAwQTAwMEQ3NUFGQTAwMDMwM0MwMjA4MDBCQworOjEwREUwMDAwOEM0MjAwREMyNDQyMDAwMTNDMDEwODAwQUMyMjAwREMxMgorOjEwREUxMDAwMEUwMDEyQzgwMDAwMDAwMDBBMDAwRjAzOEZCRjAwN0MzNAorOjEwREUyMDAwOEY0MjAxMDQzQzAzMDAyMDkyMzQwMDBEMDA0MzEwMjQ3MworOjEwREUzMDAwMDAwMjIwMkIwMDA0MjE0MEFGQTQwMDMwOEY0MzAxMDRENgorOjEwREU0MDAwM0MwMjAwNDAwMDYyMTgyNDE0NjAwMDAyMzQ4NzAwNDA0NQorOjEwREU1MDAwMDA4MDM4MjEzMjgyMDAyMEFGQTcwMDMwMTQ0MDAwMDIzOQorOjEwREU2MDAwMzRFNjAwODAwMEUwMzAyMTEwQzAwMDBCQUZBNjAwMzA4NworOjEwREU3MDAwOTNDNTAwMDg4RjY3MDA0QzAyMDAyMDIxMDAwNTJCMDA4RAorOjEwREU4MDAwMzRBNTAwODEzMEE1RjA4MTBFMDAwQzhEMzBDNjAwRkY1NgorOjEwREU5MDAwMEEwMDBGMDAwMDAwMDAwMDkzNjIwMDNFMzA0MjAwNDA4NAorOjEwREVBMDAwMTA0MDAwMEUyNDAyMDAwNDU2NjIwMDA2MjQwMjAwMTJGNAorOjEwREVCMDAwMDIwMDIwMjEwRTAwMTNENjAyMjAzMDIxMEEwMDBGMDM5OQorOjEwREVDMDAwOEZCRjAwN0MxNjYyMDAwNTAwMDAwMDAwMEUwMDBEMTNERAorOjEwREVEMDAwMDAwMDIwMjEwQTAwMEYwMzhGQkYwMDdDOTc0MzAxMUEyNgorOjEwREVFMDAwOTYyNDAwMEU5MzYyMDAzNTMyODUwMDA0MzA3NkZGRkZFMQorOjEwREVGMDAwMDA0NDIwMDRBRkE0MDA1NDhFMzIwMDA0MTBBMDAwMTU4QQorOjEwREYwMDAwOEUzNTAwMDg5MzYyMDAzRTMwNDIwMDQwMTA0MDAwMDcwQQorOjEwREYxMDAwMDAwMDAwMDAwRTAwMTMxODAyNDAyMDIxMTA0MDAwMERFOAorOjEwREYyMDAwMDAwMDAwMDAwQTAwMEYwMDAwMDAwMDAwOEY2MjAwNDRBMworOjEwREYzMDAwMDI0MjEwMjMwNDQwMDE0NTAwMDAwMDAwOEY2MjAwNDhBNworOjEwREY0MDAwMDI0MjEwMjMwNDQxMDE0MTI0MDQwMDE2MEEwMDBFMDM3QQorOjEwREY1MDAwOEZDMjAwMDQ4RjYyMDA0ODAyNDIxMDIzMDQ0MDAwMDg3MAorOjEwREY2MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIzMTAwMjQ0MjAwMDEwNQorOjEwREY3MDAwM0MwMTA4MDBBQzIyMzEwMDBBMDAwRUY1MDAwMDAwMDA1MAorOjEwREY4MDAwOEY2MjAwNDAwMjQyMTAyMzE4NDAwMDA5MjQwMjAwMEM1NgorOjEwREY5MDAwM0MwMjA4MDA4QzQyMzEwMDMyOTQwMEZDMDAwMEIwMjFBOQorOjEwREZBMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIzMTAwMjQwMjAwMEM5NAorOjEwREZCMDAwQUZBMjAwMzA4RjYyMDA0MDAwNTIyMDIzMTg4MDAwMEQ3NQorOjEwREZDMDAwMDJDNDEwMkExNDQwMDExNjAwMDAwMDAwMTQ5NjAwMDYzNgorOjEwREZEMDAwMDJDNDEwMjMzQTgyMDAwMTMwNDIwMDAxMTQ0MDAxMTBCMworOjEwREZFMDAwMDAwMDAwMDAwMkM0MTAyMzAyNDQ5MDIxMEEwMDBERUIzRgorOjEwREZGMDAwMzA1NkZGRkYwMDAwMjAyMTMyODIwMDAyMTA0MDAwMUEzQworOjEwRTAwMDAwMzI4MjAwMTA5MzYyMDAzRTMwNDIwMDQwNTA0MDAwMTFDNgorOjEwRTAxMDAwOEZDMjAwMDQwRTAwMTFGRTAyMDAyMDIxMjQwMjAwMTgwRAorOjEwRTAyMDAwQTM2MjAwM0Y5MzYyMDAwNTI0MDNGRkZFMDIwMDIwMjE0QgorOjEwRTAzMDAwMDA0MzEwMjQwRTAwMTIwN0EzNjIwMDA1MjQwNDAwMzlENworOjEwRTA0MDAwMDAwMDI4MjEwRTAwMTMwMTI0MDYwMDE4MEEwMDBGMDIwOAorOjEwRTA1MDAwMjQwMjAwMDEyNDA0MDAxNzAwNDBGODA5MDAwMDAwMDAxOQorOjEwRTA2MDAwMEEwMDBGMDIyNDAyMDAwMTEwNDAwMEY4MDAwMDAwMDAyNgorOjEwRTA3MDAwOEY2MzAwNEM4RjYyMDA1NDAyQTIxMDIzMUM0MDAwRjNGNworOjEwRTA4MDAwMDJBMzEwMjMwNDQyMDAwMTAwNjBBODIxQUZBNDAwMThERAorOjEwRTA5MDAwQUZCMjAwMTBBRkI2MDAxNDkzNDIwMTIwOEY2NTAwNDA2QworOjEwRTBBMDAwOTc2MzAwM0MzMDQyMDBGRjAzNDIxMDIxMDA0NDEwMjFERQorOjEwRTBCMDAwOEZBNDAwNTQzMDYzRkZGRjI0NDI0MDAwMDA4MzE4MkJEQworOjEwRTBDMDAwOEZBNDAwMzBBRkEyMDAyMEFGQTUwMDI4MDA4MzIwMjUzOAorOjEwRTBEMDAwQUZBNDAwMzBBRkE1MDAyNEFGQTAwMDJDQUZCNTAwMzQzMgorOjEwRTBFMDAwOTM2MjAwM0UzMDQyMDAwODUwNDAwMDExOEZDMjAwMDA5MQorOjEwRTBGMDAwMDIyMDIwMjEyN0E1MDAzODBFMDAwQ0E0QUZBMDAwMzg3NAorOjEwRTEwMDAwNTQ0MDAwMEI4RkMyMDAwMDhGQTIwMDM4MzA0MjAxMDA0MworOjEwRTExMDAwNTA0MDAwMDc4RkMyMDAwMDhGQTMwMDNDOEY2MjAwNjA1OAorOjEwRTEyMDAwMDA2MjEwMjMwNDQzMDAwMUFGNjMwMDYwOEZDMjAwMDA0RgorOjEwRTEzMDAwMDA0MEY4MDkyN0E0MDAxMDhGQTIwMDMwMzA0MjAwMDJFRQorOjEwRTE0MDAwNTQ0MDAwMDEzMjk0MDBGRTkzNjIwMDNFMzA0MjAwNDA5MQorOjEwRTE1MDAwMTA0MDAwMzc4RkEzMDAxNDhGNjIwMDU0MTZBMjAwMUFEQgorOjEwRTE2MDAwMzI4MjAwMDEyNDAyMDAxNDEyNjIwMDEwMkE2MjAwMTU5QgorOjEwRTE3MDAwMTA0MDAwMDYyNDAyMDAxNjI0MDIwMDBDMTI2MjAwMDc2MAorOjEwRTE4MDAwMzI4MjAwMDEwQTAwMEU1RjAwMDAwMDAwMTI2MjAwMDVFQQorOjEwRTE5MDAwMzI4MjAwMDEwQTAwMEU1RjAwMDAwMDAwMEEwMDBFNUFFMQorOjEwRTFBMDAwMjQxNzAwMEUwQTAwMEU1QTI0MTcwMDEwMEEwMDBFNUVGMworOjEwRTFCMDAwMjQxNzAwMTI5MzYyMDAyMzI0MDNGRkJEMDA0MzEwMjRBMAorOjEwRTFDMDAwQTM2MjAwMjMzMjgyMDAwMTEwNDAwMDE5OEZBMzAwMTRDMworOjEwRTFEMDAwMjQwMjAwMEMxMjYyMDAwRTJBNjIwMDBEMTA0MDAwMDY5QworOjEwRTFFMDAwMjQwMjAwMEUyNDAyMDAwQTEyNjIwMDA3OEZBMjAwMjRGQgorOjEwRTFGMDAwMEEwMDBFNzcyNDQyMDAwMTEyNjIwMDA4OEZBMjAwMjQ1OAorOjEwRTIwMDAwMEEwMDBFNzcyNDQyMDAwMTBBMDAwRTc1MjQxNzAwMDg0OAorOjEwRTIxMDAwMjQwMjAwMEUxNkUyMDAwMjI0MTcwMDE2MjQxNzAwMTAzNAorOjEwRTIyMDAwOEZBMjAwMjQyNDQyMDAwMUFGQTIwMDI0OEZBMzAwMTQ3NworOjEwRTIzMDAwOEZBMjAwMjQ4RjczMDA0MDAwNDMxMDIxQUY2MjAwNDA4MgorOjEwRTI0MDAwOEZBMjAwNTQ5MzY0MDAzNjhGNjMwMDQwMDJBMjg4MjE5RAorOjEwRTI1MDAwMzQwMkZGRkYwMDgyMTAwNDAwNjIxODIxQUY2MzAwNDhGRgorOjEwRTI2MDAwOEZBNjAwMzAzMEMyMDAwODEwNDAwMDBFMDAwMDAwMDBGMQorOjEwRTI3MDAwOEY2MjAwNTgxNjIyMDAwNDMwQzYwMEZGOTc0MjAxMUEzMAorOjEwRTI4MDAwNTA0MDAwMDEzNEM2MDAxMDkzQzUwMDA4OEZBNzAwMzQyOQorOjEwRTI5MDAwMDIwMDIwMjEwMDA1MkIwMDM0QTUwMDgwMEUwMDBDOEQwQgorOjEwRTJBMDAwMzBBNUYwODA4RjYyMDA0MDAwNTMxMDIzMTg0MDAwMTcwMworOjEwRTJCMDAwOEZBMjAwMTgzQzAyMDgwMDhDNDIzMTk4MzA0MjAwMTBCNgorOjEwRTJDMDAwMTA0MDAwMDkyNDAyMDAwMTk3NjIwMDY4MTQ0MDAwMDYxMworOjEwRTJEMDAwMjQwMjAwMDFBNzYyMDA2ODk3NDIwMDdBMjQ0MjAwMEFFMworOjEwRTJFMDAwMEEwMDBFQkJBNzYyMDAxMkE3NjIwMDEyMEUwMDExRkUwOAorOjEwRTJGMDAwMDIwMDIwMjE5MzYyMDA3RDI0MDMwMDAxMDIwMDIwMjFGRQorOjEwRTMwMDAwMzQ0MjAwMDEwQTAwMEVCOUFGQTMwMDUwMTg0MDAwMEFDMQorOjEwRTMxMDAwMDAwMDAwMDAwRTAwMTFGRTAyMDAyMDIxOTM2MjAwN0QyQgorOjEwRTMyMDAwMjQwMzAwMDEwMjAwMjAyMUFGQTMwMDUwMzQ0MjAwMDQ2NgorOjEwRTMzMDAwMEUwMDEyMDdBMzYyMDA3RDkzNjIwMDNFMzA0MjAwNDA0RgorOjEwRTM0MDAwMTQ0MDAwMEMzMjgyMDAwMTEwNDAwMDBBMDAwMDAwMDA1RQorOjEwRTM1MDAwOEY2MzAwNDA4RkMyMDAwNDI0MDQwMDE4MjQ2MzAwMDE2RQorOjEwRTM2MDAwMDA0MEY4MDlBRjYzMDA0MDhGQTIwMDMwMEEwMDBGMDI5RQorOjEwRTM3MDAwMzA0MjAwMDQ4RjYyMDA1ODEwNTEwMDEwMDAwMDAwMDA2RAorOjEwRTM4MDAwOEY2MjAwMTgwMjQyMTAyMzFDNDAwMDA4MjQwNDAwMDE4MAorOjEwRTM5MDAwOEY2MjAwMTgxNjQyMDAwOTAwMDAwMDAwOEY2MjAwMUMwNgorOjEwRTNBMDAwMDJBMjEwMjMwNDQwMDAwNTAwMDAwMDAwQUY3MTAwNThENQorOjEwRTNCMDAwQUZBNDAwNTBBRjcyMDAxOEFGNzUwMDFDMTJFMDAwMEI0NAorOjEwRTNDMDAwOEZBMjAwNTAwRTAwMTFGRTAyMDAyMDIxQTM3NzAwM0YxMworOjEwRTNEMDAwMEUwMDEyMDcwMjAwMjAyMTAyRTAzMDIxMjQwNDAwMzc0MQorOjEwRTNFMDAwMEUwMDEzMDEwMDAwMjgyMThGQTIwMDUwMTA0MDAwMDNFRQorOjEwRTNGMDAwMDAwMDAwMDAwRTAwMEM5QjAyMDAyMDIxMTJDMDAwMDU0RQorOjEwRTQwMDAwMDAwMDE4MjE4RkEyMDAzMDMwNDIwMDA0NTA0MDAwMTE1QgorOjEwRTQxMDAwMDA2MDEwMjEyNDAzMDAwMTBBMDAwRjAyMDA2MDEwMjE5NworOjEwRTQyMDAwMEUwMDExRkUwMjAwMjAyMTkzNjIwMDdEMDIwMDIwMjFENworOjEwRTQzMDAwMzQ0MjAwMDQwRTAwMTIwN0EzNjIwMDdEMEUwMDBDOUIwNAorOjEwRTQ0MDAwMDIwMDIwMjEwQTAwMEYwMjI0MDIwMDAxQUY0MDAwNDQxNAorOjEwRTQ1MDAwMjQwMjAwMDE4RkJGMDA3QzhGQkUwMDc4OEZCNzAwNzQ0QworOjEwRTQ2MDAwOEZCNjAwNzA4RkI1MDA2QzhGQjQwMDY4OEZCMzAwNjRGNgorOjEwRTQ3MDAwOEZCMjAwNjA4RkIxMDA1QzhGQjAwMDU4MDNFMDAwMDhERAorOjEwRTQ4MDAwMjdCRDAwODA4Qzg3MDAwNDhDODYwMDAwMDAwMDEwMjFDRQorOjEwRTQ5MDAwMDBFNTM4MjEwMEU1MjgyQjAwQzIzMDIxMDBDNTMwMjFERAorOjEwRTRBMDAwQUM4NzAwMDQwM0UwMDAwOEFDODYwMDAwOEY0MjAxQjg4RQorOjEwRTRCMDAwMDQ0MEZGRkUyNDAyMDgwMEFGNDIwMUI4MDNFMDAwMDg1OAorOjEwRTRDMDAwMDAwMDAwMDAzQzAyMDAwODAzNDIyODIxOTRBMjAwNDhGQQorOjEwRTREMDAwMzA4NEZGRkYxMDQwMDAxQjI0ODQwMDEyOTRBMjAwNDhFNworOjEwRTRFMDAwMzA0MkZGRkYwMDQ0MTAyQTEwNDAwMDE3MjQwMjAwMDNBRQorOjEwRTRGMDAwMjQwMjAwMUE5MzQzMDEyMEEzNDIwMThCOEY4MjAwMDA2MworOjEwRTUwMDAwMzA2MzAwRkYzMDQyNDAwMDEwNDAwMDA5MjQ2M0ZGRkVFQQorOjEwRTUxMDAwOTRBMjAwNDgzMDQyRkZGRjAwNDMxMDJCMTQ0MDAwMDUzNgorOjEwRTUyMDAwOEY4MjAwMDRBNzQzMDE5NDBBMDAwRjNDMzQ0MjAwMDE4QgorOjEwRTUzMDAwOEY4MjAwMDQyNDAzRkZGRTAwNDMxMDI0MDNFMDAwMDg0MAorOjEwRTU0MDAwQUY4MjAwMDQyNDAyMDAwMzAzRTAwMDA4QTM0MjAxOEIxMQorOjEwRTU1MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA5QworOjEwRTU2MDAwQUZCRjAwMUMzMEIxRkZGRjMwRDBGRkZGMzBGMkZGRkYyNAorOjEwRTU3MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwQUY0NDAxODA1QworOjEwRTU4MDAwQUY0NDAwMjAwRTAwMEYxRTAyMDAyMDIxOEY4MzAwMDBFOAorOjEwRTU5MDAwOEY4NDAwMDRBNzUxMDE4Q0E3NTAwMThFQTc0MzAxOTBERQorOjEwRTVBMDAwOEY4MzAwMDgzMDgyODAwMEFGNDMwMUE4QTc1MjAxODgwMgorOjEwRTVCMDAwMTA0MDAwMEU4RjgyMDAwNDkzNDIwMTE2MzA0MjAwRkM4RQorOjEwRTVDMDAwMjQ0MjAwMDQwMDVBMTAyMThDNDI0MDAwMzA0MkZGRkZEOAorOjEwRTVEMDAwMTQ0MDAwMDY4RjgyMDAwNDNDMDJGRkZGMzQ0MjdGRkY5QworOjEwRTVFMDAwMDA4MjEwMjRBRjgyMDAwNDhGODIwMDA0MjQwM0JGRkY0NgorOjEwRTVGMDAwMDA0MzEwMjRBNzQyMDFBNjk3NDMwMTBDOEY0MjAxMDQ1NworOjEwRTYwMDAwMDAwMzFDMDAzMDQyRkZGRjAwNjIxODI1QUY0MzAxQUMzRAorOjEwRTYxMDAwM0MwMjEwMDBBRjQyMDFCODhGQkYwMDFDOEZCMjAwMTgzRgorOjEwRTYyMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA1OAorOjEwRTYzMDAwM0MwMjA4MDA4QzQyMDAzODI3QkRGRkM4QUZCMjAwMjg1QQorOjEwRTY0MDAwQUZCRjAwMzBBRkIzMDAyQ0FGQjEwMDI0QUZCMDAwMjA5QgorOjEwRTY1MDAwMDAwMDkwMjEzQzBFMDgwMDI1Q0UwMDM4MTQ0MDAwMDIzNgorOjEwRTY2MDAwMjQ0REZGRkYwMDAwNjgyMThGODQwMDAwMzA4MjQwMDBBRAorOjEwRTY3MDAwMTA0MDAwMEEzMDgyODAwMDNDMDIwMDIwMDA4MjEwMjRGQQorOjEwRTY4MDAwNTA0MDAwMDYzMDgyODAwMDhGODIwMDA0MjQwM0JGRkZDOAorOjEwRTY5MDAwMDA4MzE4MjQwQTAwMEY5RDM0NDIxMDAwMTA0MDAwMEEyNQorOjEwRTZBMDAwM0MwMjAwMjAwMDgyMTAyNDEwNDAwMDA3OEY4MjAwMDRFQQorOjEwRTZCMDAwM0MwM0ZGRkYzNDYzN0ZGRjAwODMxODI0MzQ0MjgwMDA1MworOjEwRTZDMDAwQUY4MjAwMDRBRjgzMDAwMDhGNDgwMDcwOTM0MjAxMTJCNAorOjEwRTZEMDAwOEY4NjAwMDAzMDQyMDBGRjAwMDIyODgyMzBDMjAxMDAxNQorOjEwRTZFMDAwMTA0MDAwNDMyNEE0MDAwMzMwQzI0MDAwMTA0MDAwMTAzQQorOjEwRTZGMDAwMzBDMjIwMDAwMDA0MTA4MDAwNUExMDIxOEM0MzQwMDBEQQorOjEwRTcwMDAwMjRBNDAwMDQwMDA0MTA4MEFGQTMwMDEwMDA1QTEwMjFCQworOjEwRTcxMDAwOEM0MjQwMDBBRkEyMDAxNDkzNDIwMTE2MzA0MjAwRkMyQworOjEwRTcyMDAwMDA1QTEwMjE4QzQyNDAwMDBBMDAwRkM0QUZBMjAwMTgwQQorOjEwRTczMDAwMTA0MDAwMkYwMDA0MTA4MDAwNUExMDIxOEM0MzQwMDAyQworOjEwRTc0MDAwMjRBNDAwMDQwMDA0MTA4MEFGQTMwMDEwMDA1QTEwMjE3QworOjEwRTc1MDAwOEM0MjQwMDBBRkEwMDAxOEFGQTIwMDE0OEZBOTAwMTg4RgorOjEwRTc2MDAwMDAwMDM4MjEwMDAwMjAyMTI0MEMwMDA4MjdBQjAwMTBGNQorOjEwRTc3MDAwM0MwQTA4MDAyNTRBMDEwMDAxNjQxMDIxMTQ4QzAwMDNBMgorOjEwRTc4MDAwMDAwNDJBMDAxMTIwMDAwQTAwMDAwMDAwOTA0MjAwMDA0RQorOjEwRTc5MDAwMjQ4NDAwMDEyQzgzMDAwQzAwQTIxMDIxMDAwMjEwODBCMAorOjEwRTdBMDAwMDA0QTEwMjE4QzQyMDAwMDE0NjBGRkYzMDBFMjM4MjY3QQorOjEwRTdCMDAwM0MwNDA4MDA4Qzg0MzEwNDhGNDIwMDcwMkM4MzAwMjBCQworOjEwRTdDMDAwMTA2MDAwMDkwMDQ4NDAyMzNDMDMwODAwMjQ2MzMxMDgxRQorOjEwRTdEMDAwMDAwNDEwODAwMDQzMTAyMTI0ODMwMDAxQUM0ODAwMDA5NQorOjEwRTdFMDAwM0MwMTA4MDBBQzIzMzEwNDBBMDAwRkVGQUY4NzAwMDg5QQorOjEwRTdGMDAwOTc0MzAxMUU5NzQyMDExQzMwNjNGRkZGMDAwMjE0MDA4MworOjEwRTgwMDAwMDA2MjE4MjVBRjgzMDAwODk3NDIwMTBDOEY0MzQwMDAzNworOjEwRTgxMDAwMzA0NEZGRkYzNDAyRkZGRjE0NjIwMDAzMDAwMDAwMDBEOQorOjEwRTgyMDAwMEEwMDBGRkIyNDEyMDAyMDhGNDI0MDAwMzA0MjAxMDBGQQorOjEwRTgzMDAwNTQ0MDAwMDEyNDEyMDAxMDMwQzIxMDAwNTA0MDAwMTQ1NworOjEwRTg0MDAwMzY1MjAwMDEzMEMyMDAyMDE0NDAwMDBCM0MwMjEwMDA4MAorOjEwRTg1MDAwMDBDMjEwMjQ1MDQwMDAwRTM2NTIwMDAxM0MwMzBFMDA0RQorOjEwRTg2MDAwM0MwMjBERkYwMEMzMTgyNDM0NDJGRkZGMDA0MzEwMkI2RAorOjEwRTg3MDAwNTA0MDAwMDczNjUyMDAwMTNDMDIwODAwOEM0MjAwMkMzOAorOjEwRTg4MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDJDMzY1MjAwMDU1NQorOjEwRTg5MDAwM0MwNTA4MDA4Q0E1MDAzNDU0QTAwMDI0OEY4NDAwMDA5RgorOjEwRThBMDAwOEY4MjAwMEM1NDQwMDAyMThGODQwMDAwOEY4MjAwMDQ2RQorOjEwRThCMDAwMzA0MjQwMDA1NDQwMDAxRDhGODQwMDAwM0MwMjFGMDE4NAorOjEwRThDMDAwMDBDMjg4MjQzQzAyMTAwMDU2MjIwMDE4OEY4NDAwMDBFOQorOjEwRThEMDAwMzA4MjAyMDAxNDQwMDAxNThGODQwMDAwOTc1MDAxMEUxMgorOjEwRThFMDAwQUY0MDAxODBBRjQwMDAyMDI2MTAwMDA0MzIxMEZGRkYyRgorOjEwRThGMDAwMEUwMDBGMUUwMjAwMjAyMThGODMwMDA0MjQwMkJGRkZBMAorOjEwRTkwMDAwMzY0NDAwMDIwMDYyMTgyNDI0MDIwMDAyQTc0MjAxOEM0RgorOjEwRTkxMDAwOEY4MjAwMDBBNzUwMDE4RUE3NDQwMTg4QTc0MzAxQTY1QgorOjEwRTkyMDAwQTc0MjAxOTBBRjUxMDFCODBBMDAxMEQ5M0MwMjAwMDE4MgorOjEwRTkzMDAwMDA4MjEwMjQxMDQwMDAwQzNDMDIxMDAwM0MwMjA4MDAzMQorOjEwRTk0MDAwOEM0MjAwRDg5NzQ2MDEwRTI0MDQwMDgwMjQ0MjAwMDEyNgorOjEwRTk1MDAwMzBDNkZGRkYyNDA1MDAwMjNDMDEwODAwQUMyMjAwRDhBRAorOjEwRTk2MDAwMEEwMDEwRTMyNDA3MDAwMzAwODIxMDI0MTA0MDAwNDUzMQorOjEwRTk3MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMDMwMTA0MDAwMERGNgorOjEwRTk4MDAwOEY4MjAwMDQzMDQyNDAwMDEwNDAwMDBBM0MwMzBGMDAxOAorOjEwRTk5MDAwMDA4MzE4MjQzQzAyMDEwMDAwNDMxMDJCMTQ0MDAwMDVBMgorOjEwRTlBMDAwMDAwMDAwMDA5NzQ2MDEwRTM2NDcwMDAyMEEwMDEwRTAwMgorOjEwRTlCMDAwMjQwNDAwODAxMEEwMDAwRDMwODIwMTAwMTA0MDAwMEJFNAorOjEwRTlDMDAwM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwMTA0MzAwMDdBOQorOjEwRTlEMDAwOEY4MjAwMDgwMDREMTAyNDAwNEUxMDIxOTA0MjAwMDQ0OAorOjEwRTlFMDAwMjQ0MjAwMDQwQTAwMTA4QjAwMDIyMUMwMDAwMDAwMDAzNQorOjEwRTlGMDAwOEY4NjAwMDAzQzA1MDgwMDhDQTUwMEQwMDAwNjE2MDI5QQorOjEwRUEwMDAwMzA1MDAwMEYzOEEyMDAwMTJDNDIwMDAxMkUwMzAwMENGMAorOjEwRUExMDAwMDA0MzEwMjQxNDQwMDAxODAwMTAyMUMwMjYwMkZGRkNGRgorOjEwRUEyMDAwMkM0MjAwMDQ1NDQwMDAxNDAwMDAyMDIxMzhBMjAwMDJBRgorOjEwRUEzMDAwMkM0MjAwMDEwMDQzMTAyNDEwNDAwMDAzMDAwNjEyNDI0MworOjEwRUE0MDAwMEEwMDEwOEIwMDAwMjAyMTAwMTAxODJCMDA0MzEwMjQxNgorOjEwRUE1MDAwNTA0MDAwMDkwMDEwMjFDMDk3NDYwMTBFMDAwMDIwMjFGRgorOjEwRUE2MDAwMjQwNTAwMDIyNEM2MDAwNDMwQzZGRkZGMEUwMDBGNDEzQgorOjEwRUE3MDAwMzI0N0ZGRkIwMDEwMjFDMDk3NDYwMTBFMEEwMDEwRTA0QworOjEwRUE4MDAwMzY0NzAwMDI4RjQyNDAwMDNDMTEwODAwOEUzMTAwMjRCRQorOjEwRUE5MDAwMzA0MjAxMDAxMDQwMDA0ODMyMjIwMDAxMDIyMDgwMjE1MworOjEwRUFBMDAwMTBBMDAwMTczMjUzMDAwNDMwODIwMTAwMTA0MDAwMTVGRQorOjEwRUFCMDAwMjQwMjAwMDEzQzAyMEYwMDAwODIxMDI0M0MwMzAyMDBFQgorOjEwRUFDMDAwMTA0MzAwMEY4RjgyMDAwODk3NDYwMTBFMDI0MDM4MjE0NAorOjEwRUFEMDAwMDA0RDEwMjQwMDRFMTAyMTkwNDQwMDA0MjRDNjAwMDQ3MAorOjEwRUFFMDAwMzBDNkZGRkYyNDg0MDAwNDAwMDQyMUMwMEUwMDBGNDE0MworOjEwRUFGMDAwMjQwNTAwMDIyNDAyRkZGRTAyMjI4MDI0MzI1MkZGRkI4MgorOjEwRUIwMDAwMjQwMjAwMDExNjAyMDAwNzMyMDIwMDAxMzI0MjAwMDQxMgorOjEwRUIxMDAwNTA0MDAwMDEzNjUyMDAwMjk3NDYwMTBFMEEwMDEwREZGNQorOjEwRUIyMDAwMDI0MDM4MjExMDQwMDAwQTMyMDIwMDA0OTc0NjAxMEVDQworOjEwRUIzMDAwMDI0MDM4MjEwMDAwMjAyMTI0QzYwMDA0MzBDNkZGRkYxNworOjEwRUI0MDAwMEUwMDBGNDEyNDA1MDAwMjMyNTJGRkZCMzIwMjAwMDQ4NgorOjEwRUI1MDAwMTA0MDAwMEI4RjgyMDAwMDMwNDIwODAwMTA0MDAwMDg3NworOjEwRUI2MDAwMDAwMDAwMDA5NzQ2MDEwRTAyNDAzODIxMjQwNDAxMDBGNQorOjEwRUI3MDAwMjRDNjAwMDQzMEM2RkZGRjBFMDAwRjQxMjQwNTAwMDIyQQorOjEwRUI4MDAwMTY2MDAwMTg4RkJGMDAzMDI3NDMwMTgwOEY0MjAxQjgwNAorOjEwRUI5MDAwMDQ0MEZGRkUyNDAyMjAwMEE0NjIwMDA4MjQwMjAwMDJCOAorOjEwRUJBMDAwQTA2MjAwMEJBNDYwMDAxMDNDMDIxMDAwQUY0MjAxQjg0QworOjEwRUJCMDAwMEEwMDEwRTY4RkJGMDAzMDEwNDAwMDBBOEZCRjAwMzBGRgorOjEwRUJDMDAwOTc0NjAxMEUzNjQ3MDAwMjAwMDAyMDIxMjRDNjAwMDRBQgorOjEwRUJEMDAwMzBDNkZGRkYyNDA1MDAwMjBFMDAwRjQxMDAwMDAwMDBCOAorOjEwRUJFMDAwOEZCRjAwMzA4RkIzMDAyQzhGQjIwMDI4OEZCMTAwMjQ2QworOjEwRUJGMDAwOEZCMDAwMjAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMzg3RQorOjEwRUMwMDAwMjdCREZGRThBRkIwMDAxMDNDMDQ2MDBDQUZCRjAwMTQ5QworOjEwRUMxMDAwOEM4MjUwMDAyNDAzRkY3RjNDMUE4MDAwMDA0MzEwMjRBNAorOjEwRUMyMDAwMzQ0MjM4MENBQzgyNTAwMDI0MDIwMDAzM0MxMDYwMDBENworOjEwRUMzMDAwQUY0MjAwMDg4RTAyMDgwODNDMUI4MDA4M0MwMTA4MDAxNworOjEwRUM0MDAwQUMyMDAwMjAzMDQyRkZGMDM4NDIwMDEwMkM0MjAwMDE3RQorOjEwRUM1MDAwMEUwMDFCMzVBRjgyMDAxODNDMDRGRkZGM0MwMjA0MDA4RAorOjEwRUM2MDAwMzQ4MzA4MDYzNDQyMDAwQ0FFMDIxOTQ4QUUwMzE5NEMzNgorOjEwRUM3MDAwM0MwNTYwMTY4RTAyMTk4MDhDQTMwMDAwMzQ0MjAyMDAwRAorOjEwRUM4MDAwMDA2NDE4MjRBRTAyMTk4MDNDMDI1MzUzMTQ2MjAwMDMzRQorOjEwRUM5MDAwMzRBNDdDMDA4Q0EyMDAwNDAwNTAyMDIxOEM4MjAwN0NEMworOjEwRUNBMDAwOEM4MzAwNzhBRjgyMDAxNEFGODMwMDEwM0MwMjgwMDA5OAorOjEwRUNCMDAwMzQ0MjAwNzA4QzQzMDAwMDAwNDAzODIxQUY4MzAwMUNCOAorOjEwRUNDMDAwMDA2MDMwMjE4Q0U4MDAwMDNDMDUwODAwOENBNTAwRkNBOQorOjEwRUNEMDAwM0MwNDA4MDA4Qzg0MDBGODAxMDYzMDIzMDAwMDEwMjE1OQorOjEwRUNFMDAwMDBBNjI4MjEwMEE2MzAyQjAwODIyMDIxMDA4NjIwMjFBQQorOjEwRUNGMDAwM0MwMTA4MDBBQzI1MDBGQzNDMDEwODAwQUMyNDAwRjhGNQorOjEwRUQwMDAwOEY1MDAwMDAzMjAyMDAwMzEwNDBGRkVFMDEwMDMwMjE1RQorOjEwRUQxMDAwOENFNjAwMDAzQzA1MDgwMDhDQTUwMEZDM0MwNDA4MDBDMworOjEwRUQyMDAwOEM4NDAwRjgwMEM4MzAyMzAwQTYyODIxMDAwMDEwMjFBMAorOjEwRUQzMDAwMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxMzIwNzAwMDEwRQorOjEwRUQ0MDAwM0MwMTA4MDBBQzI1MDBGQ0FGODgwMDFDM0MwMTA4MDAxOQorOjEwRUQ1MDAwQUMyNDAwRjgxMEUwMDA2NDMyMDIwMDAyOEY0MjAxMjg2NworOjEwRUQ2MDAwQUY0MjAwMjA4RjQyMDEwNDhGNDMwMTAwQUY4MjAwMDBCOAorOjEwRUQ3MDAwMEUwMDBGMThBRjgzMDAwNDhGNDM0MDAwMzQwMkZGRkZFMgorOjEwRUQ4MDAwMTQ2MjAwMDYwMDAwMDAwMDk3NDUwMTBFM0MwNDA4MDBENAorOjEwRUQ5MDAwMjQ4NDAwRjAwQTAwMTE1QjAwMDAwMDAwOEY0MjQwMDA1NAorOjEwRURBMDAwMzA0MjAxMDAxMDQwMDAwQjAwMDAwMDAwOTc0NTAxMEVBQQorOjEwRURCMDAwM0MwNDA4MDAyNDg0MDBFODBFMDAwRjBFMzBBNUZGRkY3RAorOjEwRURDMDAwOTc0NTAxMEUzQzA0MDgwMDI0ODQzMUM4MEEwMDExNzJFMgorOjEwRUREMDAwMDAwMDAwMDA4RjQzNDAwMDhGODIwMDEwMTQ2MjAwMEE4MAorOjEwRURFMDAwMDAwMDAwMDA4RjQzNDAwNDhGODIwMDE0MTQ2MjAwMDY2QworOjEwRURGMDAwMDAwMDAwMDA5NzQ1MDEwRTNDMDQwODAwMjQ4NDMxQjg0RgorOjEwRUUwMDAwMEEwMDExNzIwMDAwMDAwMDk3NDUwMTBFM0MwNDA4MDA0MgorOjEwRUUxMDAwMjQ4NDAwRTAwRTAwMEYwRTMwQTVGRkZGM0MwMjA4MDAyNgorOjEwRUUyMDAwOEM0MjAwQzAxMDQwMDAwODhGODQwMDAwM0MwMjA4MDBBMworOjEwRUUzMDAwOEM0MjAwQzQyNDQyMDAwMTNDMDEwODAwQUMyMjAwQzQwMgorOjEwRUU0MDAwMEEwMDExOUYwMDAwMDAwMDNDMDIwMDEwMDA4MjEwMjQwNAorOjEwRUU1MDAwMTQ0MDAwMEE4RjgzMDAwNDNDMDIwODAwOEM0MjAwMjAwQQorOjEwRUU2MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDIwMEUwMDBGNzk3MgorOjEwRUU3MDAwMDAwMDIwMjEwQTAwMTE5RDAwMDAwMDAwMjQwMkJGRkZCNQorOjEwRUU4MDAwMDA2MjEwMjQxMDQwMDAwODAwMDAwMDAwMjQwMjg3RkZFOAorOjEwRUU5MDAwMDA2MjEwMjQxNDQwMDAwODNDMDIwMDYwMDA4MjEwMjQyQworOjEwRUVBMDAwMTA0MDAwMDUwMDAwMDAwMDBFMDAwRDI2MDAwMDAwMDBDQworOjEwRUVCMDAwMEEwMDExOUQwMDAwMDAwMDBFMDAxMUU4MDAwMDAwMDA5MworOjEwRUVDMDAwMTA0MDAwMDYzQzAyNDAwMDhGNDMwMTI0M0MwMjYwMjBCOQorOjEwRUVEMDAwQUM0MzAwMTQwMDAwMDAwMDNDMDI0MDAwQUY0MjAxMzg4NworOjEwRUVFMDAwMDAwMDAwMDAzMjAyMDAwMjEwNDBGRjcxM0MwMjgwMDA2RQorOjEwRUVGMDAwOEY0MjAxNDAzQzA0NDAwMEFGNDIwMDIwOEY0MzAxNDg1NAorOjEwRUYwMDAwM0MwMjcwMDAwMDYyMTgyNDEwNjQwMDJEMDAwMDAwMDAxNAorOjEwRUYxMDAwMDA4MzEwMkIxNDQwMDAwNjNDMDI2MDAwM0MwMjIwMDBERAorOjEwRUYyMDAwMTA2MjAwMDczQzAyNDAwMDBBMDAxMUU0MDAwMDAwMDBFQgorOjEwRUYzMDAwMTA2MjAwMjcwMDAwMDAwMDBBMDAxMUU0M0MwMjQwMDBCQgorOjEwRUY0MDAwOEY0MjAxNDgyNDAzMDAwNDAwMDIxNDAyMzA0MjAwRkZGMworOjEwRUY1MDAwMTQ0MzAwMEIyNzQ0MDE4MDhGNDMwMTQwOEY0MjAxQjhDNgorOjEwRUY2MDAwMDQ0MEZGRkUyNDAyMDAxQ0FDODMwMDAwQTA4MjAwMEJDMgorOjEwRUY3MDAwM0MwMjEwMDBBRjQyMDFCODBBMDAxMUU0M0MwMjQwMDAxQworOjEwRUY4MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwOEY0MjAxNDg5QworOjEwRUY5MDAwMDAwMjE0MDJBNDgyMDAwODI0MDIwMDAyQTA4MjAwMEJENgorOjEwRUZBMDAwOEY0MjAxNDhBNDgyMDAxMDhGNDIwMTQ0QUM4MjAwMjRBOQorOjEwRUZCMDAwM0MwMjEwMDBBRjQyMDFCODBBMDAxMUU0M0MwMjQwMDBEQworOjEwRUZDMDAwMEUwMDEyMEMwMDAwMDAwMDBBMDAxMUU0M0MwMjQwMDA5OAorOjEwRUZEMDAwMEUwMDFCNDIwMDAwMDAwMDNDMDI0MDAwQUY0MjAxNzhERQorOjEwRUZFMDAwMDAwMDAwMDAwQTAwMTExOTNDMDI4MDAwOEY0MjAxMDA1RAorOjEwRUZGMDAwMzA0MjAwM0UxNDQwMDAxMTI0MDIwMDAxQUY0MDAwNDg5RQorOjEwRjAwMDAwOEY0MjAxMDAzMDQyMDdDMDEwNDAwMDA1MDAwMDAwMDBBMAorOjEwRjAxMDAwQUY0MDAwNENBRjQwMDA1MDAzRTAwMDA4MjQwMjAwMDE2NAorOjEwRjAyMDAwQUY0MDAwNTRBRjQwMDA0MDhGNDIwMTAwMzA0MjM4MDBGMgorOjEwRjAzMDAwNTQ0MDAwMDFBRjQwMDA0NDI0MDIwMDAxMDNFMDAwMDhGNgorOjEwRjA0MDAwMDAwMDAwMDAzQzAyOTAwMDM0NDIwMDAxMDA4MjIwMjVCNAorOjEwRjA1MDAwQUY0NDAwMjA4RjQyMDAyMDA0NDBGRkZFMDAwMDAwMDA2QgorOjEwRjA2MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwMzQ0MjAwMDE4MAorOjEwRjA3MDAwMDA4MjIwMjUwM0UwMDAwOEFGNDQwMDIwMjdCREZGRTAwOAorOjEwRjA4MDAwQUZCMjAwMThBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTA5QQorOjEwRjA5MDAwOEY1MDAxNDA4RjUxMDE0ODNDMDI4MDAwMDAxMTk0MDJDMgorOjEwRjBBMDAwMDIyMjIwMjQzMjQzMDBGRjI0MDIwMDBFMTA2MjAwOEE1NAorOjEwRjBCMDAwMjg2MjAwMEYxMDQwMDAxMjI4NjIwMDM3MjQwMjAwMDY2OAorOjEwRjBDMDAwMTA2MjAwM0IyODYyMDAwNzEwNDAwMDA3MjQwMjAwMDk3QworOjEwRjBEMDAwMTA2MDAwMUEyNDAyMDAwMTEwNjIwMDI1MDAwMDAwMDBFOAorOjEwRjBFMDAwMEEwMDEyQzEwMDAwMDAwMDEwNjIwMDdCMjQwMjAwMEIyNQorOjEwRjBGMDAwMTA2MjAwNUIzMjIyRkZGRjBBMDAxMkMxMDAwMDAwMDAxNAorOjEwRjEwMDAwMTA0MDAwMDgyNDAyMDAzODI4NjIwMDM1MTA0MDAwODBCQQorOjEwRjExMDAwMjQwMjAwMUYxMDYyMDA3RTAwMDAwMDAwMEEwMDEyQzFERAorOjEwRjEyMDAwMDAwMDAwMDAxMDYyMDA3QTI0MDIwMDgwMTA2MjAwNDI5OQorOjEwRjEzMDAwMDAwMDAwMDAwQTAwMTJDMTAwMDAwMDAwOEY0MjAxQjg2OAorOjEwRjE0MDAwMDQ0MEZGRkUyNDAyMDAwMUFGNTAwMTgwQUY0MDAxODQ2MworOjEwRjE1MDAwQTc1MjAxODhBMzQyMDE4QTI0MDIwMDAyQTM0MjAxOEIyNAorOjEwRjE2MDAwQTc1MTAxOTA4RjQyMDE0NDBBMDAxMkJDQUY0MjAxQTQ5MgorOjEwRjE3MDAwMTA4MDAwMEEyNDAyMDAwMjNDMDEwODAwQTAyMjcxOTBDNQorOjEwRjE4MDAwM0MwMTA4MDBBQzMwNzE5ODhGNDIwMTQ0M0MwMTA4MDBGQQorOjEwRjE5MDAwQUMyMjcxOTQwQTAwMTJDMzhGQkYwMDFDOEY0MjAxQjhDOQorOjEwRjFBMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMkE2MDAwMDAwMDAzNAorOjEwRjFCMDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwQUY1MDAxODAwNAorOjEwRjFDMDAwM0MwMjA4MDA5MDQyNzE5MDEwNDAwMDAzMDAwMDE4MjE5QQorOjEwRjFEMDAwM0MwMzA4MDA4QzYzNzE5OEFGNDMwMTg0QTc1MjAxODhGNworOjEwRjFFMDAwM0MwMjA4MDA5MDQyNzE5MDAwMDAxODIxMzQ0MjAwMDE1NgorOjEwRjFGMDAwQTM0MjAxOEEyNDAyMDAwMkEzNDIwMThCQTc1MTAxOTA3RAorOjEwRjIwMDAwOEY0MjAxNDRBRjQyMDFBNDNDMDIwODAwOTA0MjcxOTAzOQorOjEwRjIxMDAwMTA0MDAwMDMzQzAyMTAwMDNDMDMwODAwOEM2MzcxOTQxMgorOjEwRjIyMDAwQUY0MzAxQThBRjQyMDFCODNDMDEwODAwQTAyMDcxOTA5MworOjEwRjIzMDAwMEEwMDEyQzM4RkJGMDAxQzhGNDIwMUI4MDQ0MEZGRkVCQQorOjEwRjI0MDAwMjQwMjAwMDJBMzQyMDE4QkE3NTIwMTg4QTc1MTAxOTAxQQorOjEwRjI1MDAwOEY0MjAxNDRBNzQyMDE5MjBBMDAxMkJFM0MwMjEwMDBGNAorOjEwRjI2MDAwMTQ0MDAwMUQwMDAwMDAwMDkzNjIwMDA1MzA0MjAwMDRCRAorOjEwRjI3MDAwMTQ0MDAwMzcwMDAwMDAwMDBFMDAxMUZFMDIwMDIwMjFBMworOjEwRjI4MDAwOTM2MjAwMDUwMjAwMjAyMTM0NDIwMDA0MEUwMDEyMDdBMAorOjEwRjI5MDAwQTM2MjAwMDU5MzYyMDAwNTMwNDIwMDA0MTQ0MDAwMDI5RQorOjEwRjJBMDAwMDAwMDAwMDAwMDAwMDAwRDkzNjIwMDAwMjQwMzAwMjAxNQorOjEwRjJCMDAwMzA0MjAwRkYxNDQzMDAwODAwMDAwMDAwOEY0MjAxQjhGNAorOjEwRjJDMDAwMDQ0MEZGRkUyNDAyMDAwNUFGNTAwMTgwQTM0MjAxOEJFMQorOjEwRjJEMDAwM0MwMjEwMDBBRjQyMDFCODhGNDIwMUI4MDQ0MEZGRkU2QgorOjEwRjJFMDAwMjQwMjAwMDJBRjQwMDE4MEFGNTAwMTg0QTc1MjAxODg4MAorOjEwRjJGMDAwQTM0MjAxOEFBMzQyMDE4QkE3NTEwMTkwQUY0MDAxQTQxMAorOjEwRjMwMDAwOEY0MjAxNDRBRjQyMDFBODBBMDAxMkJFM0MwMjEwMDAyNQorOjEwRjMxMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAxQUY1MDAxODA3QgorOjEwRjMyMDAwQUY0MDAxODRBNzUyMDE4OEEzNDIwMThBMjQwMjAwMDI0RgorOjEwRjMzMDAwQTM0MjAxOEJBNzUxMDE5MEFGNDAwMUE0QUY0MDAxQThBNworOjEwRjM0MDAwM0MwMjEwMDBBRjQyMDFCODBBMDAxMkMzOEZCRjAwMUM3QworOjEwRjM1MDAwMDAwMDAwMEQ4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4OQorOjEwRjM2MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTg5NAorOjEwRjM3MDAwQUZCRjAwMTAwRTAwMEYxODAwMDAwMDAwQUY0MDAxODA2QQorOjEwRjM4MDAwOEZCRjAwMTAwMDAwMjAyMTBBMDAwRjc5MjdCRDAwMTg1MAorOjEwRjM5MDAwMzA4NEZGRkYzMEE1RkZGRjAwMDAxODIxMTA4MDAwMDcxOAorOjEwRjNBMDAwMDAwMDAwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDJGMgorOjEwRjNCMDAwMDA2NTE4MjEwQTAwMTJENDAwMDUyODQwMDNFMDAwMDg2NworOjEwRjNDMDAwMDA2MDEwMjExMEMwMDAwNjI0QzZGRkZGOENBMjAwMDBDMAorOjEwRjNEMDAwMjRBNTAwMDRBQzgyMDAwMDBBMDAxMkRFMjQ4NDAwMDQ4QworOjEwRjNFMDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZCNQorOjEwRjNGMDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkZCNworOjEwRjQwMDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDg3MQorOjEwRjQxMDAwMDAwMDAwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAzMAorOjEwRjQyMDAwMEUwMDExRkUwMDgwODAyMTkzNjIwMDdEMDIwMDIwMjFFOQorOjEwRjQzMDAwMzQ0MjAwMjAwRTAwMTIwN0EzNjIwMDdEMDIwMDIwMjE0QQorOjEwRjQ0MDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwQzlCMjdCRDAwMTg1RQorOjEwRjQ1MDAwMzA4MzAwRkYzMEE1MDBGRjMwQzYwMEZGMjc0NzAxODA0MgorOjEwRjQ2MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwOEY0MjAxMjhENworOjEwRjQ3MDAwMzQ2MzQwMDBBQ0UyMDAwMDI0MDIwMDAxQUNFMDAwMDQ3MAorOjEwRjQ4MDAwQTRFMzAwMDhBMEUyMDAwQTI0MDIwMDAyQTBFMjAwMEJBQworOjEwRjQ5MDAwM0MwMjEwMDBBNEU1MDAxMEFDRTAwMDI0QUNFMDAwMjgyMQorOjEwRjRBMDAwQTRFNjAwMTIwM0UwMDAwOEFGNDIwMUI4MjdCREZGRTg2MAorOjEwRjRCMDAwQUZCRjAwMTA5MzYyMDAzRjI0MDMwMDEyMzA0MjAwRkZGMAorOjEwRjRDMDAwMTA0MzAwMEQwMDgwMzAyMThGNjIwMDQ0MDA4MjEwMjMyMQorOjEwRjREMDAwMDQ0MDAwMEE4RkJGMDAxMDhGNjIwMDQ4MjQwNDAwMzlFNgorOjEwRjRFMDAwMDAwMDI4MjEwMEMyMTAyMzA0NDEwMDA0MjQwNjAwMTI1OQorOjEwRjRGMDAwMEUwMDEzMDEwMDAwMDAwMDhGQkYwMDEwMjQwMjAwMDE2NQorOjEwRjUwMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkM4QUZCMTAwMkNERAorOjEwRjUxMDAwMDBBMDg4MjFBRkIyMDAzMDI3QTUwMDEwMDA4MDkwMjEwNAorOjEwRjUyMDAwMDIyMDIwMjFBRkJGMDAzNEFGQjAwMDI4MEUwMDBDQTQ5MQorOjEwRjUzMDAwQUZBMDAwMTAxMDQwMDAwOTAyNDAyMDIxOEUyMjAwMDhEOAorOjEwRjU0MDAwQUY2MjAwODQwRTAwMTJGMkFGNjAwMDQwMjQwNDAwMzg2NQorOjEwRjU1MDAwMjQwNTAwOEQwQTAwMTNDRDI0MDYwMDEyOTM2MjAwM0U5QworOjEwRjU2MDAwMzA0MjAwMDgxMDQwMDAwRjhGQTIwMDEwMzA0MjAxMDAwRQorOjEwRjU3MDAwMTA0MDAwMDc4RkEzMDAxNDhGNjIwMDYwMDA2MjEwMjMwOAorOjEwRjU4MDAwMDQ0MzAwMDhBRjYzMDA2MDBBMDAxMzU2MDAwMDAwMDA0NworOjEwRjU5MDAwQUY2MDAwNjA5MzYyMDAzRTI0MDNGRkY3MDA0MzEwMjQzNQorOjEwRjVBMDAwQTM2MjAwM0U5MzYyMDAzRTMwNDIwMDA4MTQ0MDAwMDIxNQorOjEwRjVCMDAwMjQwNjAwMDMwMDAwMzAyMTkzNjIwMDM0OTM2MzAwMzc3NworOjEwRjVDMDAwOEY2NDAwODQzMDQyMDBGRjMwNjMwMEZGMDA2NjE4MjEyMgorOjEwRjVEMDAwMDAwMzE4ODAwMDQzMjgyMTAwQTQyMDJCMTA4MDAwMEI3QQorOjEwRjVFMDAwMDAwMDAwMDA5NzYzMDAzQzhGNjIwMDg0MzA2M0ZGRkZERgorOjEwRjVGMDAwMDA0NTEwMjMwMDYyMTgyQjE0NjAwMDA0MDAwMDAwMDA3NgorOjEwRjYwMDAwOEY2MjAwODQwQTAwMTM3MjAwNDU4MDIzOTc2MjAwM0NEOQorOjEwRjYxMDAwMzA1MEZGRkY4RkEzMDAxMDMwNjIwMDA0MTA0MDAwMDQ0MAorOjEwRjYyMDAwMDAwNjI4ODA4RkEyMDAxQzBBMDAxMzdBMDIwMjEwMkIwOQorOjEwRjYzMDAwMkUwMjAyMTg1MDQwMDAwMzI0MDIwMjE4MEEwMDEzODMwRAorOjEwRjY0MDAwMDIwNTEwMjMzMDYzMDAwNDEwNjAwMDAzMDA0NTEwMjNGRQorOjEwRjY1MDAwOEZBMjAwMUMwMDQ1MTAyMzAwNDA4MDIxMkM0MjAwODAxNgorOjEwRjY2MDAwNTQ0MDAwMDEyNDEwMDA4MDBFMDAxMUZFMDI0MDIwMjFCMQorOjEwRjY3MDAwMjQwMjAwMDFBRjYyMDAwQzkzNjIwMDNFMDAxMDIwNDBBMworOjEwRjY4MDAwMzA0MjAwN0ZBMzYyMDAzRThFMjIwMDA0MjQ0MjAwMDEyQgorOjEwRjY5MDAwQUY2MjAwNDBBNzcwMDAzQzhGNjIwMDUwOTYyMzAwMEVCRQorOjEwRjZBMDAwMDA0MzEwMjFBRjYyMDA1ODhGNjIwMDUwMDA0NDEwMjFDNworOjEwRjZCMDAwQUY2MjAwNUM4RTIyMDAwNEFGNjIwMDE4OEUyMjAwMDg0OAorOjEwRjZDMDAwQUY2MjAwMUM4RkEyMDAxMDMwNDIwMDA4NTQ0MDAwMEFCNAorOjEwRjZEMDAwOTNBMjAwMjBBMzYwMDAzNjkzNjIwMDM2MjQwM0ZGREY2QworOjEwRjZFMDAwQTM2MjAwMzU5MzYyMDAzRTAwNDMxMDI0QTM2MjAwM0VGMworOjEwRjZGMDAwMEEwMDEzQUQ4RTIyMDAwOEEzNjIwMDM1OEUyMjAwMDg5NgorOjEwRjcwMDAwQUY2MjAwNEM4RjYyMDAyNDhGNjMwMDQwMDA0MzEwMjFFMQorOjEwRjcxMDAwQUY2MjAwNDg5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkZCMworOjEwRjcyMDAwMTQ0MzAwMTIyNDAzRkY4MDNDMDIwODAwOEM0MjMxQTBFNQorOjEwRjczMDAwMDI0MjEwMjEwMDQzMTAyNEFGNDIwMDI4M0MwMjA4MDA3RQorOjEwRjc0MDAwOEM0MjMxQTA4RTI0MDAwODNDMDMwMDBDMDI0MjEwMjFBMAorOjEwRjc1MDAwMzA0MjAwN0YwMzQyMTAyMTAwNDMxMDIxQUM0NDAwRDgwNgorOjEwRjc2MDAwOEUyMzAwMDhBRjgyMDAyNEFDNDMwMERDMEUwMDEyMDc5OQorOjEwRjc3MDAwMDI0MDIwMjEyNDA0MDAzODAwMDAyODIxMjQwNjAwMEEyOQorOjEwRjc4MDAwMEUwMDEzMDEwMDAwMDAwMDhGQkYwMDM0OEZCMjAwMzA2NAorOjEwRjc5MDAwOEZCMTAwMkM4RkIwMDAyODI0MDIwMDAxMDNFMDAwMDg4NAorOjEwRjdBMDAwMjdCRDAwMzgyN0JERkZFOEFGQkYwMDEwOTBDNzAwMEQ5MAorOjEwRjdCMDAwMDBDMDI4MjEzMEU2MDAxMDEwQzAwMDBBMzBFMjAwMDQyQQorOjEwRjdDMDAwOENBMzAwMDg4RjYyMDA1NDEwNjIwMDA2MzBFMjAwMDQyRgorOjEwRjdEMDAwMTQ0MDAwMTc4RkJGMDAxMDAwMDAyMDIxMEEwMDBEMTNGNQorOjEwRjdFMDAwMjdCRDAwMTgxMDQwMDAwRDMwRTMwMDEyMTBDMDAwMTBCQgorOjEwRjdGMDAwOEZCRjAwMTA4Q0EzMDAwODhGNjIwMDU0MTQ2MjAwMERBQworOjEwRjgwMDAwMjQwMjAwMDEyNDA0MDAzODI0MDUwMDhEMEUwMDEzMDE5OQorOjEwRjgxMDAwMjQwNjAwMTIwQTAwMTNGOThGQkYwMDEwMjQwMjAwMTIwMAorOjEwRjgyMDAwMTQ2MjAwMDM4RkJGMDAxMDBBMDAxMzJGMjdCRDAwMThCOQorOjEwRjgzMDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGRjhERgorOjEwRjg0MDAwMjc0MjAxODBBRkEyMDAwMDMwOEEwMEZGOEY0MjAxQjgzQQorOjEwRjg1MDAwMDQ0MEZGRkUwMDAwMDAwMDhGNDYwMTI4M0MwMjA4MDAyMworOjEwRjg2MDAwOEM0MjMxQTAyNDAzRkY4MEFGODYwMDRDMDBDMjEwMjFERgorOjEwRjg3MDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTAxNworOjEwRjg4MDAwOEZBOTAwMDA4RkE4MDAwMDAwQzIxMDIxMzA0MjAwN0YyNQorOjEwRjg5MDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxOTQ2NDAwRDQzQgorOjEwRjhBMDAwOEZBNzAwMDA4RkE1MDAwMDI0MDIwMDAyQUY4MzAwMjQ3MAorOjEwRjhCMDAwQTBBMjAwMEI4RkEzMDAwMDM1NDI2MDAwMzA4NEZGRkY0MAorOjEwRjhDMDAwQTRFMjAwMDgzQzAyMTAwMEFEMjYwMDAwQUQwNDAwMDRENAorOjEwRjhEMDAwQUM2MDAwMjQyN0JEMDAwOEFGNDIwMUI4MDNFMDAwMDg3NworOjEwRjhFMDAwMjQwMjAwMDE4QzgyMDAwNDhGODMwMDI0MDA0NTEwMjMzMQorOjEwRjhGMDAwQUM4MjAwMDQ5MDYyMDA2MzMwNDIwMDdGQTA2MjAwNjMyQgorOjEwRjkwMDAwOEM4MjAwMjA5MzgzMDAyQzhGODUwMDI0MzQ0MjAwMDJENworOjEwRjkxMDAwQUY4MzAwNDBBNzgwMDAzRUFDODIwMDIwQTRBMDAwRTQ5QQorOjEwRjkyMDAwOTBBMjAwNjMyNDAzRkZCRjAwNDMxMDI0MDNFMDAwMDhGQgorOjEwRjkzMDAwQTBBMjAwNjMyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkU2QworOjEwRjk0MDAwOEY4MjAwNENBQzYyMDAwMDhGNDIwMTI0QUM2MjAwMDQ0NAorOjEwRjk1MDAwMjQwMjYwODNBNDYyMDAwODI0MDIwMDAyQTA2MjAwMEI1QgorOjEwRjk2MDAwM0MwMjEwMDAwM0UwMDAwOEFGNDIwMUI4OEY4ODAwNDA1RAorOjEwRjk3MDAwOTM4MjAwMkM4RjgzMDAyNDNDMDcwODAwMjRFNzc1QUM5OQorOjEwRjk4MDAwMDA0ODEwMjMzMDQyMDBGRjMwNDkwMEZDMjQ2NTAwODgwNQorOjEwRjk5MDAwOEY4NjAwNDQzMDRBMDAwMzExMjAwMDA5MDAwMDIwMjExNgorOjEwRjlBMDAwMjQ4MjAwMDQ4Q0EzMDAwMDMwNDQwMEZGMDA4OTEwMkE0OAorOjEwRjlCMDAwQUNFMzAwMDAyNEE1MDAwNDE0NDBGRkY5MjRFNzAwMDQ5MAorOjEwRjlDMDAwMTE0MDAwMDkwMDAwMjAyMTI0ODIwMDAxOTBBMzAwMDBDMgorOjEwRjlEMDAwMzA0NDAwRkYwMDhBMTAyQkEwRTMwMDAwMjRBNTAwMDFBMgorOjEwRjlFMDAwMTQ0MEZGRjkyNEU3MDAwMTMwQzIwMDAzMTQ0MDAwMDQ3MgorOjEwRjlGMDAwOEY4NTAwNDAzMTAyMDAwMzEwNDAwMDBEMDAwMDAwMDAyMAorOjEwRkEwMDAwMTBBMDAwMDkwMDAwMjAyMTI0ODIwMDAxOTBDMzAwMDAwMgorOjEwRkExMDAwMzA0NDAwRkYwMDg1MTAyQkEwRTMwMDAwMjRDNjAwMDE0NQorOjEwRkEyMDAwMTQ0MEZGRjkyNEU3MDAwMTAzRTAwMDA4MDAwMDAwMDA5MworOjEwRkEzMDAwMTEwMEZGRkQwMDAwMjAyMTI0ODIwMDA0OENDMzAwMDA3RgorOjEwRkE0MDAwMzA0NDAwRkYwMDg4MTAyQkFDRTMwMDAwMjRDNjAwMDQwMworOjEwRkE1MDAwMTQ0MEZGRjkyNEU3MDAwNDAzRTAwMDA4MDAwMDAwMDA2MAorOjEwRkE2MDAwOEY4MzAwNDA5MzgyMDAyQzMwQzYwMEZGMzBBNTAwRkYzQQorOjEwRkE3MDAwMDA0MzEwMjMzMDQzMDBGRjhGODIwMDI0MDA4MDM4MjE5MAorOjEwRkE4MDAwMDA0MzEwMjExNEMwMDAwMjI0NDgwMDg4MDA4MzM4MjE1QworOjEwRkE5MDAwMzBFMjAwMDMxNDQwMDAwNTMwQTIwMDAzMTQ0MDAwMDNDQworOjEwRkFBMDAwMzA2MjAwMDMxMDQwMDAwRDAwMDAwMDAwMTBBMDAwMDlBQgorOjEwRkFCMDAwMDAwMDIwMjEyNDgyMDAwMTkwRTMwMDAwMzA0NDAwRkY3OAorOjEwRkFDMDAwMDA4NTEwMkJBMTAzMDAwMDI0RTcwMDAxMTQ0MEZGRjk3QQorOjEwRkFEMDAwMjUwODAwMDEwM0UwMDAwODAwMDAwMDAwMTBBMEZGRkQ2MQorOjEwRkFFMDAwMDAwMDIwMjEyNDgyMDAwNDhDRTMwMDAwMzA0NDAwRkY0OQorOjEwRkFGMDAwMDA4NTEwMkJBRDAzMDAwMDI0RTcwMDA0MTQ0MEZGRjkzQgorOjEwRkIwMDAwMjUwODAwMDQwM0UwMDAwODAwMDAwMDAwMjdCREZGRjhGRQorOjEwRkIxMDAwMjQwMkZGRkZBRkEyMDAwMDAwODAzODIxMjQwNTAwMkYzRgorOjEwRkIyMDAwM0MwOTA4MDAyNTI5NzFBQzI0MDgwMEZGMjQwNkZGRkZDQQorOjEwRkIzMDAwOTBFMjAwMDAyNEEzRkZGRjAwMDYyMjAyMDBDMjEwMjY2QworOjEwRkI0MDAwMzA0MjAwRkYwMDAyMTA4MDAwNDkxMDIxOEM0MjAwMDA2QQorOjEwRkI1MDAwMzA2NTAwRkYyNEU3MDAwMTE0QThGRkY1MDA4MjMwMjY3RAorOjEwRkI2MDAwMDAwNjEwMjdBRkEyMDAwNEFGQTIwMDAwMDAwMDI4MjE2OQorOjEwRkI3MDAwMjdBNjAwMDQwMEM1MTAyMzkwNDQwMDAzMjRBMjAwMDExRQorOjEwRkI4MDAwMDBCRDE4MjEzMDQ1MDBGRjJDQTIwMDA0MTQ0MEZGRjlFRAorOjEwRkI5MDAwQTA2NDAwMDA4RkEyMDAwMDAzRTAwMDA4MjdCRDAwMDg1OQorOjEwRkJBMDAwMDA4MDQ4MjEzMEFBRkZGRjMwQzYwMEZGMzBFN0ZGRkY4QQorOjEwRkJCMDAwMjc0ODAxODA4RjQyMDFCODA0NDBGRkZFOEY4MjAwNEMyRAorOjEwRkJDMDAwQUQwMjAwMDA4RjQyMDEyNEFEMDIwMDA0OEQyMjAwMjAwRQorOjEwRkJEMDAwQTUwNzAwMDhBMTAyMDAwQTI0MDIwMDE2QTEwMjAwMEJEQQorOjEwRkJFMDAwOTM0MzAxMjA4RDIyMDAwODhEMjQwMDA0MzA2MzAwRkYyMAorOjEwRkJGMDAwMDA0MzEwMjE5NzgzMDAzRTAwNDQxMDIxOEQyNTAwMjRFRQorOjEwRkMwMDAwMDA0MzEwMjMzQzAzMDgwMDhDNjMzMUEwOEY4NDAwMjQ0MAorOjEwRkMxMDAwQTUwMjAwMEMyNDYzMDBFODI0MDJGRkZGQTUwQTAwMEVFMQorOjEwRkMyMDAwQTUwMzAwMTBBNTA2MDAxMkFEMDUwMDE4QUQwMjAwMjRDMgorOjEwRkMzMDAwOTQ4MjAxMTQyNDAzRkZGNzMwNDJGRkZGQUQwMjAwMjgzNQorOjEwRkM0MDAwOEM4MjAxMThBRDAyMDAyQzNDMDIxMDAwQUQwMDAwMzA4NworOjEwRkM1MDAwQUY0MjAxQjg4RDIyMDAyMDAwNDMxMDI0MDNFMDAwMDhDOQorOjEwRkM2MDAwQUQyMjAwMjA4RjgyMDAyNDMwRTdGRkZGMDA4MDQ4MjE3MgorOjEwRkM3MDAwOTA0MjAwRDMzMEE1RkZGRjMwQzYwMEZGMDAwMjExMDAwNAorOjEwRkM4MDAwMzA0MjBGMDAwMEUyMzgyNTI3NDgwMTgwOEY0MjAxQjgzQQorOjEwRkM5MDAwMDQ0MEZGRkU4RjgyMDA0Q0FEMDIwMDAwOEY0MjAxMjQyMQorOjEwRkNBMDAwQUQwMjAwMDQ4RDIyMDAyMEE1MDcwMDA4QTEwMjAwMEE3MQorOjEwRkNCMDAwMjQwMjAwMTdBMTAyMDAwQjkzNDMwMTIwOEQyMjAwMDhBQgorOjEwRkNDMDAwOEQyNDAwMDQzMDYzMDBGRjAwNDMxMDIxOTc4MzAwM0UyMQorOjEwRkNEMDAwMDA0NDEwMjE4Rjg0MDAyNDAwNDMxMDIzM0MwMzA4MDBCQgorOjEwRkNFMDAwOEM2MzMxQTBBNTAyMDAwQ0E1MDUwMDBFMjQ2MzAwRTg3QQorOjEwRkNGMDAwQTUwMzAwMTBBNTA2MDAxMkFEMDAwMDE0OEQyMjAwMjRGQgorOjEwRkQwMDAwQUQwMjAwMTg4QzgyMDA1Q0FEMDIwMDFDOEM4MjAwNTg5MQorOjEwRkQxMDAwQUQwMjAwMjAyNDAyRkZGRkFEMDIwMDI0OTQ4MjAwRTYyMQorOjEwRkQyMDAwMzA0MkZGRkZBRDAyMDAyODk0ODIwMDYwOTQ4MzAwQkU0MQorOjEwRkQzMDAwMzA0MjdGRkYzMDYzRkZGRjAwMDIxMjAwMDA0MzEwMjFCQQorOjEwRkQ0MDAwQUQwMjAwMkMzQzAyMTAwMEFEMDAwMDMwQUY0MjAxQjgwMworOjEwRkQ1MDAwOTQ4MjAwQkUyNDAzRkZGNzAwQTIxMDIxQTQ4MjAwQkVGQgorOjEwRkQ2MDAwOEQyMjAwMjAwMDQzMTAyNDAzRTAwMDA4QUQyMjAwMjA3MworOjEwRkQ3MDAwMjc0MzAxODA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMTg4RgorOjEwRkQ4MDAwQUM2NDAwMDBBMDYyMDAwQjhGODIwMDI0OTQ0MjAwRTY2NQorOjEwRkQ5MDAwQTQ2MjAwMTAzQzAyMTAwMEFDNjAwMDMwMDNFMDAwMDhEOAorOjEwRkRBMDAwQUY0MjAxQjgyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkVGMworOjEwRkRCMDAwOEY4MjAwMjg5NDQyMDAxQzMwNDJGRkZGMDAwMjExQzBENQorOjEwRkRDMDAwQUM2MjAwMDAyNDAyMDAxOUEwNjIwMDBCM0MwMjEwMDA4QgorOjEwRkREMDAwQUM2MDAwMzAwM0UwMDAwOEFGNDIwMUI4OEY4NzAwMzAwQworOjEwRkRFMDAwMzBDMzAwRkY4RjQyMDFCODA0NDBGRkZFOEY4MjAwNENGOQorOjEwRkRGMDAwMzQ2MzYwMDBBQ0EyMDAwMDkzODIwMDQ4QTBBMjAwMDUxQQorOjEwRkUwMDAwOENFMjAwMTBBNEEyMDAwNkE0QTMwMDA4OEM4MjAwMjBBQgorOjEwRkUxMDAwMjQwM0ZGRjdBMEEyMDAwQTI0MDIwMDAyQTBBMjAwMEIwNAorOjEwRkUyMDAwOENFMjAwMDBBQ0EyMDAxMDhDRTIwMDA0QUNBMjAwMTQzMgorOjEwRkUzMDAwOENFMjAwMUNBQ0EyMDAyNDhDRTIwMDIwQUNBMjAwMjhDMgorOjEwRkU0MDAwOENFMjAwMkNBQ0EyMDAyQzhDODIwMDI0QUNBMjAwMTgwNgorOjEwRkU1MDAwM0MwMjEwMDBBRjQyMDFCODhDODIwMDIwMDA0MzEwMjQwNQorOjEwRkU2MDAwMDNFMDAwMDhBQzgyMDAyMDkzODIwMDQ4MjQwMzAwMDFENAorOjEwRkU3MDAwMjdCREZGRTgwMDQzMzAwNDJDNDIwMDIwQUZCMDAwMTA0MworOjEwRkU4MDAwQUZCRjAwMTQyNDEwRkZGRTEwNDAwMDA1Mjc0NTAxODA3RAorOjEwRkU5MDAwM0MwMjA4MDA4QzQyMzE5MDBBMDAxNTk4MDA0NjEwMjQ1QworOjEwRkVBMDAwM0MwMjA4MDA4QzQyMzE5NDAwNDYxMDI0MTQ0MDAwMDdBNAorOjEwRkVCMDAwMjQwNjAwODQ4RjgzMDAyNDI0MTBGRkZGOTA2MjAwNjJEOAorOjEwRkVDMDAwMzA0MjAwMEYzNDQyMDA0MEEwNjIwMDYyMEUwMDE1NjQxMAorOjEwRkVEMDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAzRQorOjEwRkVFMDAwMDNFMDAwMDgyN0JEMDAxODhGODMwMDI4MjdCREZGRTAyRQorOjEwRkVGMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMxQworOjEwRkYwMDAwOTA2MjAwMEQwMEEwOTAyMTMwRDEwMEZGMzA0MjAwN0ZCMAorOjEwRkYxMDAwQTA2MjAwMEQ4Rjg1MDAyNDhFNDMwMDE4MDA4MDgwMjE5MAorOjEwRkYyMDAwOENBMjAwN0MxNDYyMDAwNTI0MDIwMDBFOTBBMjAwNjNFMworOjEwRkYzMDAwMzQ0MjAwMjAwQTAwMTVDMUEwQTIwMDYzMEUwMDE1ODdGQworOjEwRkY0MDAwQTM4MjAwNDgyNDAzRkZGRjEwNDMwMDQ3MjQwNEZGRkY1RgorOjEwRkY1MDAwNTIyMDAwNDUwMDAwMjAyMThFNDMwMDAwM0MwMjAwMTA4QQorOjEwRkY2MDAwMDA2MjEwMjQ1MDQwMDAwNDNDMDIwMDA4MDIwMDIwMjFERQorOjEwRkY3MDAwMEEwMDE1RDAyNDAyMDAxNTAwNjIxMDI0NTA0MDAwMDkyOAorOjEwRkY4MDAwOEU0NTAwMDAwMjAwMjAyMTI0MDIwMDE0MEUwMDE1ODc3NworOjEwRkY5MDAwQTM4MjAwNDgyNDAzRkZGRjEwNDMwMDMzMjQwNEZGRkYyMworOjEwRkZBMDAwOEU0NTAwMDAzQzAyMDAwMjAwQTIxMDI0MTA0MDAwMTYwMgorOjEwRkZCMDAwM0MwMjAwMDQ4Rjg2MDAyODhDQzIwMDE0OENDMzAwMTAwMQorOjEwRkZDMDAwOENDNDAwMTQwMDQzMTAyMzAwNDQxMDJCNTA0MDAwMDU0MworOjEwRkZEMDAwMDIwMDIwMjE4RTQzMDAyQzhDQzIwMDEwMTA2MjAwMDMwRQorOjEwRkZFMDAwMDIwMDIwMjEwQTAwMTYwMTI0MDIwMDEyM0MwMjAwMDQzMworOjEwRkZGMDAwMDBBMjEwMjQ1MDQwMDAxQzAwMDAyMDIxMDIwMDIwMjFGQgorOjAyMDAwMDA0MDAwMUY5Cis6MTAwMDAwMDAwQTAwMTYwMTI0MDIwMDEzMDBBMjEwMjQxMDQwMDAwNjZBCis6MTAwMDEwMDA4RjgzMDAyODhDNjIwMDEwNTA0MDAwMTMwMDAwMjAyMUM0Cis6MTAwMDIwMDAwQTAwMTVGQjAyMDAyMDIxOEM2MjAwMTA1MDQwMDAwNEUxCis6MTAwMDMwMDA4RTQyMDAyQzAyMDAyMDIxMEEwMDE2MDEyNDAyMDAxMTI5Cis6MTAwMDQwMDA1MDQwMDAwOTAwMDAyMDIxMDIwMDIwMjEyNDAyMDAxNzU2Cis6MTAwMDUwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDAwMjBGCis6MTAwMDYwMDAyNDA0RkZGRjAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODY2Cis6MTAwMDcwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODQxCis6MTAwMDgwMDAyN0JEMDAyMDkzODMwMDJDMjdCREZGRTAyNDAyMDAzNDBECis6MTAwMDkwMDBBRkIyMDAxOEFGQjEwMDE0QUZCRjAwMUNBRkIwMDAxMDdBCis6MTAwMEEwMDAwMDgwODgyMTE0NjIwMDBDMDBBMDkwMjE4Rjg0MDAzMDExCis6MTAwMEIwMDAwRTAwMTRCMDhDOTAwMDMwMTIwMjAwMDcyNDAyMDAwNURDCis6MTAwMEMwMDAwMjIwMjAyMTBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjkxCis6MTAwMEQwMDAxMDQzMDA1RjI0MDRGRkZGOTI0MjAwMDQxMDQwMDAwOTE3Cis6MTAwMEUwMDA4RjgyMDAyNDAyMjAyMDIxMjQwMjAwMEMwRTAwMTU4NzlDCis6MTAwMEYwMDBBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNTUyNDA0RkZGRkEwCis6MTAwMTAwMDA4RjgyMDAyNEEzODAwMDIwOEU0MzAwMDQ4QzQ0MDA4MDUyCis6MTAwMTEwMDAzQzAyMDBGRjM0NDJGRkZGMDA2MjE4MjQwMDgzMjAyQkMyCis6MTAwMTIwMDAxMDgwMDAwOEFGODMwMDM4MDIyMDIwMjEyNDAyMDAxOTJCCis6MTAwMTMwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDA0NEVDCis6MTAwMTQwMDAyNDA0RkZGRjk3ODIwMDNFOEY4NzAwNDA4Rjg4MDAzODhECis6MTAwMTUwMDAwMDQ3MTAyMzExMDAwMDM5QTc4MjAwM0U4Rjg2MDAyNDNCCis6MTAwMTYwMDAzMDQ1RkZGRjhGODQwMDRDOTBDMzAwQkMzQzAyMDgwMDY4Cis6MTAwMTcwMDA4QzQyMzFBMDAwMDMxODgyMzA3MDAwMDEwMDgyMjAyMURGCis6MTAwMTgwMDAwMDEwMTA4MDAxMDIxMDIxMDBBMjI4MkIxMEEwMDAxMEU2Cis6MTAwMTkwMDAyNDgyMDA4ODhGODQwMDMwMTA4MjAwMEQzQzAzM0YwMUQwCis6MTAwMUEwMDA4RTQyMDAwMDAwNDMxMDI0M0MwMzI1MDAxNDQzMDAwNjQ3Cis6MTAwMUIwMDAzMEU1MDBGRjhDODIwMDAwQUNDMjAwODg4QzgyMDAxMDA5Cis6MTAwMUMwMDAwQTAwMTY2MUFDQzIwMDk4MEUwMDE0ODUwMDAwMzAyMUIwCis6MTAwMUQwMDA4Rjg1MDAzODkzODMwMDIwOEY4NjAwMjQzMEEyMDAwMzhGCis6MTAwMUUwMDAwMDAyMTAyMzMwNDIwMDAzMDA0MzM4MjFBMzg3MDAyMDdGCis6MTAwMUYwMDA5NEM0MDBFNDAwQTIyODIxOEY4MzAwNDA4RjgyMDA0NDMxCis6MTAwMjAwMDAzNDg0MTAwMEE0QzQwMEU0MDA0MzEwMjFBRjgyMDA0NEYxCis6MTAwMjEwMDAxMjAwMDAwRUFGODUwMDQwMjRFMjAwMDRBMzgyMDAyMEZCCis6MTAwMjIwMDA5NEMyMDBFNDI0QTMwMDA0QUY4MzAwNDAzNDQyMjAwMEMxCis6MTAwMjMwMDBBNEMyMDBFNDBBMDAxNjgxMDAwMDIwMjE4RjgyMDA0NDNECis6MTAwMjQwMDBBRjgwMDA0MDAwNDcxMDIxQUY4MjAwNDQwMDAwMjAyMTExCis6MTAwMjUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDM4Cis6MTAwMjYwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA4Rjg2MDAyNEI1Cis6MTAwMjcwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA5MEMyMDA2MzBECis6MTAwMjgwMDAzMDQyMDAyMDEwNDAwMDA4MzBBNTAwRkY4Q0MyMDA3Q0U2Cis6MTAwMjkwMDAyNDAzRkZERjI0NDIwMDAxQUNDMjAwN0M5MEMyMDA2MzUzCis6MTAwMkEwMDAwMDQzMTAyNEEwQzIwMDYzMTBBMDAwMjM4RjgzMDAyNDA5Cis6MTAwMkIwMDAyNzUwMDE4MDAyMDAyODIxMEUwMDE1NjQyNDA2MDA4MkM4Cis6MTAwMkMwMDA4RjgyMDAyNDkwNDIwMDYzMzA0MjAwNDA1MDQwMDAxOTY5Cis6MTAwMkQwMDBBMzgwMDA0ODhGODMwMDMwOEY0MjAxQjgwNDQwRkZGRUE2Cis6MTAwMkUwMDA4RjgyMDA0Q0FFMDIwMDAwMjQwMjYwODJBNjAyMDAwODQ5Cis6MTAwMkYwMDAyNDAyMDAwMkEyMDIwMDBCOEM2MjAwMDhBRTAyMDAxMDcxCis6MTAwMzAwMDA4QzYyMDAwQ0FFMDIwMDE0OEM2MjAwMTRBRTAyMDAxODY1Cis6MTAwMzEwMDA4QzYyMDAxOEFFMDIwMDI0OEM2MjAwMjRBRTAyMDAyODE5Cis6MTAwMzIwMDA4QzYyMDAyOEFFMDIwMDJDM0MwMjEwMDBBRjQyMDFCOEUzCis6MTAwMzMwMDBBMzgwMDA0ODhGODMwMDI0OEZCRjAwMTQ4RkIwMDAxMDZCCis6MTAwMzQwMDA5MDYyMDA2MzI3QkQwMDE4MzA0MjAwN0ZBMDYyMDA2MzA2Cis6MTAwMzUwMDA5NzgyMDAzRThGODYwMDQwOEY4NTAwMjQ5MzgzMDAyQzc3Cis6MTAwMzYwMDAwMDQ2MTAyM0E3ODIwMDNFQTRBMDAwRTQ5MEE0MDA2M0VFCis6MTAwMzcwMDA4RjgyMDA0NEFGODMwMDQwMjQwM0ZGQkYwMDQ2MTAyMTVBCis6MTAwMzgwMDAwMDgzMjAyNEFGODIwMDQ0QTBBNDAwNjM4RjgyMDAyNDU1Cis6MTAwMzkwMDBBMDQwMDBCRDhGODIwMDI0MDNFMDAwMDhBNDQwMDBCRUZFCis6MTAwM0EwMDA4RjhBMDAyNDI3QkRGRkUwQUZCMTAwMTRBRkIwMDAxMDZBCis6MTAwM0IwMDA4Rjg4MDA0MEFGQkYwMDE4OTM4OTAwMjA5NTQyMDBFNDY5Cis6MTAwM0MwMDAzMEQxMDBGRjAxMDkxODJCMDA4MDgwMjEzMEFDMDBGRkU0Cis6MTAwM0QwMDAzMDQ3RkZGRjAwMDA1ODIxMTQ2MDAwMDMzMTA2MDBGRjgyCis6MTAwM0UwMDAwMTIwMzAyMTAxMDk1ODIzOTc4MzAwM0UwMDY4MTAyQjFCCis6MTAwM0YwMDAxNDQwMDAzMjAwMDAwMDAwMTQ2ODAwMDcyNDAyMDAwMUNECis6MTAwNDAwMDA4RTAyMDAyMDI0MDNGRkZCMzRFNzgwMDAwMDQzMTAyNDA5Cis6MTAwNDEwMDBBRTAyMDAyMDI0MDIwMDAxMzRFNzA4ODAxNTgyMDAwNUE2Cis6MTAwNDIwMDAzMTY1RkZGRjBFMDAxNEQ1MDIwMDIwMjEwQTAwMTcxNkM3Cis6MTAwNDMwMDAwMjAwMjAyMTBFMDAxNTA2MDIwMDIwMjEwRTAwMTU0OUExCis6MTAwNDQwMDA4Rjg0MDA0QzhGODQwMDI0OTQ4MjAwNjAyNDQyMDAwMTM5Cis6MTAwNDUwMDBBNDgyMDA2MDk0ODIwMDYwM0MwMzA4MDA4QzYzMzE4OEIxCis6MTAwNDYwMDAzMDQyN0ZGRjU0NDMwMDBGMDIwMDIwMjE5NDgyMDA2MDNECis6MTAwNDcwMDAyNDAzODAwMDAwNDMxMDI0QTQ4MjAwNjA5MDgyMDA2MDY2Cis6MTAwNDgwMDA5MDgzMDA2MDMwNDIwMEZGMDAwMjExQzIwMDAyMTAyNzdBCis6MTAwNDkwMDAwMDAyMTFDMDMwNjMwMDdGMDA2MjE4MjVBMDgzMDA2MDU1Cis6MTAwNEEwMDAwMjAwMjAyMTAyMjAyODIxOEZCRjAwMTg4RkIxMDAxNEU0Cis6MTAwNEIwMDA4RkIwMDAxMDBBMDAxNjg4MjdCRDAwMjA5MTQyMDA2MzBCCis6MTAwNEMwMDAyNDAzRkY4MDAwNDMxMDI1QTE0MjAwNjM5NzgyMDAzRTcxCis6MTAwNEQwMDAzMDQ4RkZGRjExMDAwMDIwOTM4MzAwMjA4Rjg0MDAyNDA4Cis6MTAwNEUwMDAwMDRCMTAyMzMwNDYwMEZGOTQ4MzAwRTQyNDAyRUZGRjBBCis6MTAwNEYwMDAwMTY4MjgyQjAwNjIxODI0QTQ4MzAwRTQxNEEwMDAwM0UwCis6MTAwNTAwMDA4RTAyMDAyMDAxMDA1ODIxMDAwMDMwMjEyNDAzRkZGQjRGCis6MTAwNTEwMDAzNEU3ODAwMDAwNDMxMDI0QUUwMjAwMjAyNDAyMDAwMUQyCis6MTAwNTIwMDAxNTgyMDAwNTMxNjVGRkZGMEUwMDE0RDUwMjAwMjAyMTYxCis6MTAwNTMwMDAwQTAwMTczRTk3ODMwMDNFMEUwMDE1MDYwMjAwMjAyMTk4Cis6MTAwNTQwMDA5NzgzMDAzRThGODIwMDQwQTc4MDAwM0UwMDQzMTAyMzI3Cis6MTAwNTUwMDBBRjgyMDA0MDkzODMwMDIwOEY4MjAwMjQ4RkJGMDAxODU5Cis6MTAwNTYwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwOEY5Cis6MTAwNTcwMDBBMDQzMDBCRDhGODIwMDI0OTA0MzAwODg5MDQ1MDBCREI5Cis6MTAwNTgwMDAyNDQ5MDA4ODMwNjMwMDNGMjQ2M0ZGRTAyNDAyMDAwMTE3Cis6MTAwNTkwMDAwMDYyMzgwNDJDNjMwMDIwMzBFODAwMTlBMzg1MDAyMDk1Cis6MTAwNUEwMDAxMDYwMDAxMEFGODkwMDMwM0MwMjgwMDAzNDQyMDAwMjJECis6MTAwNUIwMDAyNDA1MDAwMTI0MDYwMDAxMTUwMDAwMDgwMEUyMTgyNEFCCis6MTAwNUMwMDAwMDAwMjgyMTE0NjAwMDA1MzBFMjAwMjAxMDQwMDAwNUUyCis6MTAwNUQwMDAyNDA1MDAwMTkxMjYwMDAxMzBDNjAwMDEwQTAwMTZENTRECis6MTAwNUUwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZEODY1Cis6MTAwNUYwMDBBRkIwMDAxMDhGOTAwMDMwQUZCNDAwMjBBRkIxMDAxNDQ2Cis6MTAwNjAwMDBBRkJGMDAyNEFGQjMwMDFDQUZCMjAwMTg4RTA1MDAxMEJFCis6MTAwNjEwMDAzQzAyMDgwMDhDNDIzMUIwOEY4NjAwMzQzMEEzM0ZGRjhCCis6MTAwNjIwMDAwMDYyMTgyQjhDRDMwMDE0MDA4MDg4MjE4Q0QyMDAyMDBCCis6MTAwNjMwMDAxMDYwMDA3ODAwMDBBMDIxOTBDMzAwMEQyNDAyRkY4MDBDCis6MTAwNjQwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNzMwMjIwMjAyMTVDCis6MTAwNjUwMDAwMDA1MTM4MjMwNDIwMDAzNTQ0MDAwNkYwMjIwMjAyMTI1Cis6MTAwNjYwMDA5NEMzMDAxQzhGODIwMDI0OEUwNTAwMjhBNDQzMDExNDJCCis6MTAwNjcwMDA4Q0MyMDAxMDAyNjIxODIzMTQ2NTAwMDcyNDAyMDAxRkI4Cis6MTAwNjgwMDA4RjgyMDAzODAwNjIxMDIxMDI2MjEwMkIxMDQwMDAwODk3Cis6MTAwNjkwMDA4RjgzMDAyODI0MDIwMDE4MEUwMDE1ODdBMzgyMDA0OENCCis6MTAwNkEwMDAyNDAzRkZGRjEwNDMwMDZGMjQwNEZGRkY4RjgzMDAyODAzCis6MTAwNkIwMDA4Rjg0MDAzODhDNjIwMDEwMDI0NDkwMjEwMDQ0MTAyMzgzCis6MTAwNkMwMDBBQzYyMDAxMDhGODIwMDI0QUM3MjAwMjA4QzQyMDA2ODYzCis6MTAwNkQwMDAwMDUyMTAyQjEwNDAwMDA5OEY4MzAwMzQwMjIwMjAyMThCCis6MTAwNkUwMDAyNDAyMDAxRDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjhCCis6MTAwNkYwMDAxMDQzMDA1QzI0MDRGRkZGOEY4MzAwMzQ4RTAyMDAyNDJCCis6MTAwNzAwMDA4QzYzMDAyNDEwNDMwMDA3MDIyMDIwMjEyNDAyMDAxQ0Q3Cis6MTAwNzEwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDA1MUY5Cis6MTAwNzIwMDAyNDA0RkZGRjhGODQwMDI4OEM4MjAwMjQyNDQyMDAwMUNGCis6MTAwNzMwMDBBQzgyMDAyNDEyNTMwMDA0OEY4MjAwMjQ4QzQyMDA2ODkzCis6MTAwNzQwMDA1NjQyMDAwRThFMDIwMDAwOEUwMjAwMDAzQzAzMDA4MDI0Cis6MTAwNzUwMDAwMDQzMTAyNDE0NDAwMDBEMjQwMjAwMUEwMjIwMjAyMTFFCis6MTAwNzYwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDAzREJECis6MTAwNzcwMDAyNDA0RkZGRjBBMDAxN0QyOEUwMjAwMTQzQzAzMDA4MEZECis6MTAwNzgwMDAwMDQzMTAyNDUwNDAwMDAzOEUwMjAwMTRBQzgwMDAyMDZGCis6MTAwNzkwMDA4RTAyMDAxNDI0MTJGRkZGMTA1MjAwMDYyNDAyMDAxQkQ4Cis6MTAwN0EwMDAwMjIwMjAyMTBFMDAxNTg3QTM4MjAwNDgxMDUyMDAyRDQwCis6MTAwN0IwMDAyNDA0RkZGRjhFMDMwMDAwM0MwMjAwMDEwMDYyMTAyNEFECis6MTAwN0MwMDAxMDQwMDAxRjNDMDIwMDgwMDA2MjEwMjQxNDQwMDAwODBBCis6MTAwN0QwMDAwMjIwMjAyMTI0MDIwMDFBMEUwMDE1ODdBMzgyMDA0ODVGCis6MTAwN0UwMDAyNDAzRkZGRjEwNDMwMDFGMjQwNEZGRkYwMjIwMjAyMUU5Cis6MTAwN0YwMDAwMjAwMjgyMTBFMDAxNUE3MjQwNjAwMDEyNDAzRkZGRjk0Cis6MTAwODAwMDAyNDA0RkZGRjE0NDMwMDBFMjQxNDAwMDEwQTAwMTgwN0ZCCis6MTAwODEwMDA4RkJGMDAyNDAyMjAyMDIxMjQwMjAwMEQ4RkJGMDAyNDVFCis6MTAwODIwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDVBCis6MTAwODMwMDA4RkIwMDAxMDI3QkQwMDI4MEEwMDE1ODdBMzgyMDA0ODRBCis6MTAwODQwMDA4RjgzMDAyODAyMjAyMDIxMDI4MDMwMjE5NDYyMDAzNjBDCis6MTAwODUwMDAyNDA1MDAwMTI0NDIwMDAxMEUwMDE2RDVBNDYyMDAzNkQyCis6MTAwODYwMDAwMDAwMjAyMThGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzE0Cis6MTAwODcwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMUNCCis6MTAwODgwMDAwM0UwMDAwODI3QkQwMDI4OEY4MzAwMjQyN0JERkZEODgwCis6MTAwODkwMDBBRkI0MDAyMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDZBCis6MTAwOEEwMDBBRkIwMDAxMEFGQkYwMDI0OTA2MjAwNjM4RjkxMDAzMEEyCis6MTAwOEIwMDAyNDEyRkZGRjM0NDIwMDQwOTIyNTAwMDBBMDYyMDA2MzMyCis6MTAwOEMwMDA4RTIyMDAxMDAwODA5ODIxMzBCMDAwM0YxMDUyMDAwNkE4Cis6MTAwOEQwMDAwMzYwQTAyMTI0MDIwMDBEMEUwMDE1ODdBMzgyMDA0OEFBCis6MTAwOEUwMDAxMDUyMDA1MjI0MDRGRkZGOEY4MzAwMjQ4RTIyMDAxODMwCis6MTAwOEYwMDA4QzYzMDA3QzEwNDMwMDA3MDI2MDIwMjEyNDAyMDAwRTVDCis6MTAwOTAwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDA0NzExCis6MTAwOTEwMDAyNDA0RkZGRjI0MDQwMDIwMTIwNDAwMDQ4RjgzMDAyNDE5Cis6MTAwOTIwMDA5MDYyMDA2MzM0NDIwMDIwQTA2MjAwNjM4Rjg1MDAzODJCCis6MTAwOTMwMDAxMEEwMDAxRTAwMDAwMDAwNTYwNDAwMDQ4RjgyMDAyNDU2Cis6MTAwOTQwMDAwMjYwMjAyMTBBMDAxODUxMjQwMjAwMEE5NjgzMDAwQTNFCis6MTAwOTUwMDAyNDA0RkZGRDk0NDIwMDYwMzA0MkZGRkYxMDQzMDAzNDQ2Cis6MTAwOTYwMDA4RkJGMDAyNDNDMDIwODAwOEM0MjMxOEMwMDQ1MTAyQkM0Cis6MTAwOTcwMDAxNDQwMDAwNjAyNjAyMDIxMDAwMDI4MjEwRTAwMTZENTM4Cis6MTAwOTgwMDAyNDA2MDAwMTBBMDAxODc4MDAwMDIwMjEyNDAyMDAyRDBFCis6MTAwOTkwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDAyM0E1Cis6MTAwOUEwMDAyNDA0RkZGRjBBMDAxODc4MDAwMDIwMjExNjA0MDAwNTI3Cis6MTAwOUIwMDA4Rjg0MDAyNDhFMjMwMDE0MjQwMkZGRkY1MDYyMDAxODRECis6MTAwOUMwMDAwMjYwMjAyMTk0ODIwMDYwMjQ0MjAwMDFBNDgyMDA2MDIxCis6MTAwOUQwMDA5NDgyMDA2MDNDMDMwODAwOEM2MzMxODgzMDQyN0ZGRkMyCis6MTAwOUUwMDA1NDQzMDAwRjAyNjAyMDIxOTQ4MjAwNjAyNDAzODAwMEExCis6MTAwOUYwMDAwMDQzMTAyNEE0ODIwMDYwOTA4MjAwNjA5MDgzMDA2MDE1Cis6MTAwQTAwMDAzMDQyMDBGRjAwMDIxMUMyMDAwMjEwMjcwMDAyMTFDMDk0Cis6MTAwQTEwMDAzMDYzMDA3RjAwNjIxODI1QTA4MzAwNjAwMjYwMjAyMUZGCis6MTAwQTIwMDAwRTAwMTY4ODI0MDUwMDAxMDAwMDIwMjE4RkJGMDAyNDNECis6MTAwQTMwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDQ4Cis6MTAwQTQwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyOEFGCis6MTAwQTUwMDA4RjgzMDAyNDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNEE0Cis6MTAwQTYwMDA5MDYyMDA2MzhGODcwMDMwMDA4MDgwMjEzNDQyMDA0MDE0Cis6MTAwQTcwMDA4Q0U2MDAxMEEwNjIwMDYzM0MwMzA4MDA4QzYzMzFCMDc4Cis6MTAwQTgwMDAzMEMyM0ZGRjAwNDMxMDJCMTA0MDAwNEU4Rjg1MDAzNEQyCis6MTAwQTkwMDAyNDAyRkY4MDkwQTMwMDBEMDA0MzEwMjQzMDQyMDBGRjg5Cis6MTAwQUEwMDA1MDQwMDA0OTAyMDAyMDIxMDAwNjEzODIzMDQ4MDAwMzE0Cis6MTAwQUIwMDAyNDAyMDAwMjU1MDIwMDQ0MDIwMDIwMjE5NEEyMDAxQ0RFCis6MTAwQUMwMDA4Rjg1MDAyNDI0MDMwMDIzQTRBMjAxMTQ4Q0U2MDAwMEQ3Cis6MTAwQUQwMDAwMDA2MTYwMjMwNDIwMDNGMTA0MzAwMTAzQzAzMDA4MzIyCis6MTAwQUUwMDA4Q0UzMDAxODhDQTIwMDdDMTA2MjAwMDYyNDAyMDAwRTI5Cis6MTAwQUYwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDAzODJGCis6MTAwQjAwMDAyNDA0RkZGRjhGODMwMDI0OTA2MjAwNjMzNDQyMDAyMDlFCis6MTAwQjEwMDBBMDYyMDA2MzBBMDAxOEJEOEY4MzAwMjgwMEMzMTAyNDYwCis6MTAwQjIwMDAxNDQzMDAwNzhGODMwMDI4OTBBMjAwNjIzMDQyMDAwRjE4Cis6MTAwQjMwMDAzNDQyMDAyMEEwQTIwMDYyQTM4ODAwM0M4RjgzMDAyOERBCis6MTAwQjQwMDA5MDYyMDAwRDMwNDIwMDdGQTA2MjAwMEQ4RjgzMDAzODVDCis6MTAwQjUwMDAxMDYwMDAxODAyMDAyMDIxOEY4NDAwMzQ4QzgyMDAxMDY1Cis6MTAwQjYwMDAwMDQzMTAyQjEwNDAwMDA5MjQwMjAwMTgwMjAwMjAyMTJECis6MTAwQjcwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDAxOENFCis6MTAwQjgwMDAyNDA0RkZGRjBBMDAxOEU1MDAwMDIwMjE4QzgyMDAxMEQ5Cis6MTAwQjkwMDAyNDA1MDAwMTAyMDAyMDIxMDA0MzEwMjM4RjgzMDAyODM4Cis6MTAwQkEwMDAyNDA2MDAwMTBFMDAxNkQ1QUM2MjAwMTAwQTAwMThFNUZDCis6MTAwQkIwMDAwMDAwMjAyMTBFMDAxNjg4MjQwNTAwMDEwQTAwMThFNTE3Cis6MTAwQkMwMDAwMDAwMjAyMTAyMDAyMDIxMjQwMjAwMEQ4RkJGMDAxNDBDCis6MTAwQkQwMDA4RkIwMDAxMDI3QkQwMDE4MEEwMDE1ODdBMzgyMDA0OEI3Cis6MTAwQkUwMDA4RkJGMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwOEI4Cis6MTAwQkYwMDAyN0JEMDAxODI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzMDgwCis6MTAwQzAwMDBBRkIzMDAxQ0FGQkYwMDIwQUZCMjAwMThBRkIxMDAxNEVCCis6MTAwQzEwMDA4RTEyMDAxMDNDMDMwODAwOEM2MzMxQjAzMjQyM0ZGRjVCCis6MTAwQzIwMDAwMDQzMTAyQjEwNDAwMDdDMDA4MDk4MjE4Rjg1MDAzNEY5Cis6MTAwQzMwMDAyNDAyRkY4MDkwQTMwMDBEMDA0MzEwMjQzMDQyMDBGRkU3Cis6MTAwQzQwMDA1MDQwMDA3NjAyNjAyMDIxMDAxMjEzODIzMDQyMDAwM0RGCis6MTAwQzUwMDAyNDAzMDAwMTU0NDMwMDcxMDI2MDIwMjE5MEEyMDAwRDgyCis6MTAwQzYwMDAzMDQyMDAwODU0NDAwMDAzOEY4MjAwMzgwQTAwMTkxNUYyCis6MTAwQzcwMDAyNDAyMDAyNDUwNDAwMDAzOEUwMzAwMEMwQTAwMTkxNUMyCis6MTAwQzgwMDAyNDAyMDAyNzhDQTIwMDIwMTQ2MjAwMDUyNDAyMDAyMDA4Cis6MTAwQzkwMDA4RTAzMDAwODhDQTIwMDI0MTA2MjAwMDgyNDAyMDAyMEE5Cis6MTAwQ0EwMDAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYxMDQzMDA2QTRCCis6MTAwQ0IwMDAyNDA0RkZGRjBBMDAxOTQwOEY4NDAwMjg4RTAyMDAxNENDCis6MTAwQ0MwMDAyNDExRkZGRjE0NTEwMDAzOEY4NzAwMjQwQTAwMTkzQkYxCis6MTAwQ0QwMDAyNDAyMDAyNThFMDMwMDE4OENFMjAwN0MxNDYyMDAxNkFBCis6MTAwQ0UwMDAyNDAyMDAwRThFMDMwMDI0OENBMjAwMjgxNDYyMDAxMjNECis6MTAwQ0YwMDAyNDAyMDAyMThFMDYwMDI4OENBMjAwMkMxNEMyMDAwRUIzCis6MTAwRDAwMDAyNDAyMDAxRjhFMDMwMDJDMTA2MDAwMEIyNDAyMDAyMzFECis6MTAwRDEwMDA4Q0UyMDA2ODAwNDMxMDJCMTQ0MDAwMDcyNDAyMDAyNkQ4Cis6MTAwRDIwMDA4Q0EyMDAxNDAwNjYxODIxMDA0MzEwMkI1MDQwMDAwN0NECis6MTAwRDMwMDA4Rjg0MDAyODI0MDIwMDIyMEUwMDE1ODdBMzgyMDA0ODE5Cis6MTAwRDQwMDAxMDUxMDA0NTI0MDRGRkZGOEY4NDAwMjgyNDAzRkZGNzdGCis6MTAwRDUwMDA5MDgyMDAwRDAwNDMxMDI0QTA4MjAwMEQ4Rjg2MDAyNDk1Cis6MTAwRDYwMDAzQzAzMDgwMDhDNjMzMUFDOEY4MjAwNEM5NEM0MDBFMERCCis6MTAwRDcwMDA4Rjg1MDAyODAwNDMxMDIxMzA4NDdGRkYwMDA0MjA0MDJECis6MTAwRDgwMDAwMDQ0MTAyMTMwNDMwMDdGMDM0MzIwMjEzQzAzMDAwRTI4Cis6MTAwRDkwMDAwMDgzMjAyMTI0MDNGRjgwMDA0MzEwMjRBRjQyMDAyQzU1Cis6MTAwREEwMDBBNDkyMDAwMDhDQTIwMDI4MjQ0MjAwMDFBQ0EyMDAyOERBCis6MTAwREIwMDA4Q0EyMDAyQzhFMDMwMDJDMDA0MzEwMjFBQ0EyMDAyQzJFCis6MTAwREMwMDA4RTAyMDAyQ0FDQTIwMDMwOEUwMjAwMTRBQ0EyMDAzNEMzCis6MTAwREQwMDA5NEEyMDAzQTI0NDIwMDAxQTRBMjAwM0E5NEM2MDBFMDgyCis6MTAwREUwMDAzQzAyMDgwMDhDNDIzMUIwMjRDNDAwMDEzMDgzN0ZGRkY0Cis6MTAwREYwMDAxNDYyMDAxMzAwODAzMDIxMjQwMjgwMDAwMDgyMzAyNDFECis6MTAwRTAwMDAzMEMyRkZGRjAwMDIxM0MyMzA0MjAwRkYwMDAyMTAyNzcxCis6MTAwRTEwMDAwQTAwMTk3RDAwMDIzM0MwMDI2MDIwMjEyNDAyMDAwRDY3Cis6MTAwRTIwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDQ5Cis6MTAwRTMwMDA4RkIwMDAxMDI3QkQwMDI4MEEwMDE1ODdBMzgyMDA0ODQ0Cis6MTAwRTQwMDA4RjgyMDAyNDAyNjAyMDIxMjQwNTAwMDEwRTAwMTY4OEY0Cis6MTAwRTUwMDBBNDQ2MDBFMDAwMDAyMDIxOEZCRjAwMjA4RkIzMDAxQ0JCCis6MTAwRTYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMUQ1Cis6MTAwRTcwMDAwM0UwMDAwODI3QkQwMDI4MjdCREZGRTBBRkIxMDAxNDQ0Cis6MTAwRTgwMDA4RjkxMDAzMEFGQjAwMDEwQUZCRjAwMTg4RTI2MDAxMDU5Cis6MTAwRTkwMDAzQzAzMDgwMDhDNjMzMUIwMzBDMjNGRkYwMDQzMTAyQjhECis6MTAwRUEwMDAxMDQwMDA1RTAwODA4MDIxOEY4NTAwMzQyNDAyRkY4MDg2Cis6MTAwRUIwMDA5MEEzMDAwRDAwNDMxMDI0MzA0MjAwRkY1MDQwMDA1ODIyCis6MTAwRUMwMDAwMjAwMjAyMThGODIwMDM4MTA0MDAwMDgwMDA2MTM4MkEzCis6MTAwRUQwMDA4RjgyMDAyNDk3NjMwMDBBMjQwNEZGRkQ5NDQyMDA2MDdGCis6MTAwRUUwMDAzMDQyRkZGRjEwNDMwMDU1MDAwNjEzODIzMDQyMDAwM0RBCis6MTAwRUYwMDAxNDQwMDAwRTAwMDAwMDAwOTIyMjAwMDIxMDQwMDAwNTg1Cis6MTAwRjAwMDA4RTIzMDAyNDUwNjAwMDE1OTIyMzAwMDMwQTAwMTlCNkI2Cis6MTAwRjEwMDAwMjAwMjAyMThDQTIwMDI0NTA2MjAwMTA5MjIzMDAwM0MyCis6MTAwRjIwMDAwMjAwMjAyMTBBMDAxOUJFMjQwMjAwMEY5MEEyMDAwRDI5Cis6MTAwRjMwMDAzMDQyMDAwODU0NDAwMDA5OTIyMzAwMDMwMjAwMjAyMTlGCis6MTAwRjQwMDAyNDAyMDAxMDBFMDAxNTg3QTM4MjAwNDgyNDAzRkZGRjJGCis6MTAwRjUwMDAxMDQzMDAzQTI0MDRGRkZGOTIyMzAwMDMyNDAyMDAwMkZFCis6MTAwRjYwMDA1NDYyMDAwQzkyMjIwMDAzOEY4MjAwMzg1NDQwMDAwOTIyCis6MTAwRjcwMDA5MjIyMDAwMzAyMDAyMDIxMjQwMjAwMkMwRTAwMTU4NzdCCis6MTAwRjgwMDBBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMkMyNDA0RkZGRjJBCis6MTAwRjkwMDA5MjIyMDAwMzAyMjAyODIxMDIwMDIwMjEzODQ2MDAxMDVFCis6MTAwRkEwMDAyQ0M2MDAwMTJDNDIwMDAxMEUwMDE1QTcwMDQ2MzAyNTdBCis6MTAwRkIwMDAyNDExRkZGRjEwNTEwMDIxMjQwNEZGRkY4RjgzMDAzODBDCis6MTAwRkMwMDAxMDYwMDAxMjAyMDAyMDIxM0MwMjA4MDA4QzQyMzE4QzhCCis6MTAwRkQwMDAwMDQzMTAyQjE0NDAwMDA2MDAwMDAwMDAwMDAwMjgyMUYwCis6MTAwRkUwMDAwRTAwMTZENTI0MDYwMDAxMEEwMDE5RkMwMDAwMjAyMTdECis6MTAwRkYwMDAyNDAyMDAyRDBFMDAxNTg3QTM4MjAwNDgxMDUxMDAwRjE3Cis6MTAxMDAwMDAyNDA0RkZGRjBBMDAxOUZDMDAwMDIwMjEwRTAwMTY4OEFFCis6MTAxMDEwMDAyNDA1MDAwMTBBMDAxOUZDMDAwMDIwMjEwMjAwMjAyMTAzCis6MTAxMDIwMDAyNDAyMDAwRDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDg0Cis6MTAxMDMwMDAyN0JEMDAyMDBBMDAxNTg3QTM4MjAwNDg4RkJGMDAxODMzCis6MTAxMDQwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODYxCis6MTAxMDUwMDAyN0JEMDAyMDkzODMwMDNDMjdCREZGRTAyNDAyMDAwMjRGCis6MTAxMDYwMDBBRkIxMDAxNEFGQjAwMDEwMDA4MDg4MjFBRkJGMDAxOEVFCis6MTAxMDcwMDAwMDAwODAyMTEwNjIwMDhDMjQwNEZGRkQ5Nzg1MDAzRTUzCis6MTAxMDgwMDA4RjgzMDA0MDMwQTJGRkZGMDA0MzEwMkI1NDQwMDA3REFGCis6MTAxMDkwMDA4Rjg0MDA0NDBFMDAxNDQ4MDAwMDAwMDAzQzAyMDgwMDQ5Cis6MTAxMEEwMDAyNDQyNzVBQzAyMjAyMDIxMDA0MDI4MjEwRTAwMTYwRTlCCis6MTAxMEIwMDBBRjgyMDAzMDI0MDlGRkZGMTA0OTAwN0IyNDA0RkZGRkFBCis6MTAxMEMwMDAzQzA4MDgwMDhEMDg3NUJDM0MwMjA4MDA4QzQyMzFCMDE5Cis6MTAxMEQwMDAzQzAzMDgwMDkwNjM3NUFDMzEwNDNGRkYwMDgyMTAyQjg1Cis6MTAxMEUwMDAxMDQwMDAxQjMwNjcwMDNGM0MwMjA4MDA4QzQyMzFBOEQyCis6MTAxMEYwMDA4RjgzMDA0QzAwMDQyMTgwMDA2MjE4MjEwMDY0MTgyMUI1Cis6MTAxMTAwMDAzMDYyMDA3RjAzNDIyODIxM0MwMjAwMEMwMEEyMjgyMTBCCis6MTAxMTEwMDAzQzAyMDA4MDM0NDIwMDAxMzA2NjAwNzgwMEMyMzAyNTc1Cis6MTAxMTIwMDAyNDAyRkY4MDAwNjIxMDI0QUY0MjAwMjgzMDY0MDAwN0QwCis6MTAxMTMwMDBBRjQyMDgwNDhGODIwMDI0MDM0NDIwMjEyNDg0MDk0MDA0Cis6MTAxMTQwMDBBRjQ2MDgxNEFGODUwMDI4QUY4NDAwMzRBQzQzMDExOEMzCis6MTAxMTUwMDA5MzgzMDAzQzI0MDIwMDAzMTQ2MjAwM0IyNDAyMDAwMTNDCis6MTAxMTYwMDAyNDAyMDAyNjEwRTIwMDNEMjhFMjAwMjcxMDQwMDAxMzcwCis6MTAxMTcwMDAyNDAyMDAzMjI0MDIwMDIyMTBFMjAwMzgyOEUyMDAyMzc4Cis6MTAxMTgwMDAxMDQwMDAwODI0MDIwMDI0MjQwMjAwMjAxMEUyMDAyNDYxCis6MTAxMTkwMDAyNDAyMDAyMTEwRTIwMDFFMDIyMDIwMjEwQTAwMUE3QkY2Cis6MTAxMUEwMDAyNDAyMDAwQjEwRTIwMDJEMjQwMjAwMjUxMEUyMDAxMEEyCis6MTAxMUIwMDAwMjIwMjAyMTBBMDAxQTdCMjQwMjAwMEIxMEUyMDAxQUYwCis6MTAxMUMwMDAyOEUyMDAzMzEwNDAwMDA2MjQwMjAwM0YyNDAyMDAzMUQwCis6MTAxMUQwMDAxMEUyMDAwQjAyMjAyMDIxMEEwMDFBN0IyNDAyMDAwQkRGCis6MTAxMUUwMDAxMEUyMDAxMTAyMjAyMDIxMEEwMDFBN0IyNDAyMDAwQkM5Cis6MTAxMUYwMDAwRTAwMTc2ODAyMjAyMDIxMEEwMDFBOTYwMDQwODAyMTY0Cis6MTAxMjAwMDAwRTAwMThFQTAyMjAyMDIxMEEwMDFBOTYwMDQwODAyMUQwCis6MTAxMjEwMDAwRTAwMTk4QjAyMjAyMDIxMEEwMDFBOTYwMDQwODAyMTFFCis6MTAxMjIwMDAxNTA5MDAwRTAwMDAwMDAwMEUwMDE4MEYwMjIwMjAyMUZBCis6MTAxMjMwMDAwQTAwMUE5NjAwNDA4MDIxMEUwMDE1ODdBMzgyMDA0OEZDCis6MTAxMjQwMDAwQTAwMUE5NjAwNDA4MDIxMTQ2MjAwMTcwMjAwMjAyMTMzCis6MTAxMjUwMDAyNDAyMDAyMzE0RTIwMDA1MjQwMjAwMEIwRTAwMTg4MTcyCis6MTAxMjYwMDAwMjIwMjAyMTBBMDAxQTk2MDA0MDgwMjEwMjIwMjAyMTFECis6MTAxMjcwMDBBMzgyMDA0ODBFMDAxNTg3MjQxMEZGRkYwQTAwMUE5NzZBCis6MTAxMjgwMDAwMjAwMjAyMTMwQTUwMEZGMEUwMDE0ODUyNDA2MDAwMTc1Cis6MTAxMjkwMDA5NzgzMDAzRThGODIwMDQwQTc4MDAwM0UwMDQzMTAyM0NBCis6MTAxMkEwMDBBRjgyMDA0MDAyMDAyMDIxOEZCRjAwMTg4RkIxMDAxNEQwCis6MTAxMkIwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDNGCis6MTAxMkMwMDAyN0JERkZFMEFGQjEwMDE0QUZCRjAwMThBRkIwMDAxMEYyCis6MTAxMkQwMDA4RjQ2MDEyODNDMDMwODAwOEM2MzMxQTAyNDAyRkY4MDY0Cis6MTAxMkUwMDBBRjg2MDA0QzAwQzMxODIxMzA2NTAwN0YwMzQ1MjgyMURDCis6MTAxMkYwMDAwMDYyMTgyNDNDMDIwMDBBQUY0MzAwMjQwMEEyMjgyMTA3Cis6MTAxMzAwMDA5MEEyMDA2MjAwODA4ODIxQUY4NTAwMjQzMDQyMDBGRjU3Cis6MTAxMzEwMDAwMDAyMTEwMkEzODIwMDNDOTBBMjAwQkMzMDQyMDAwMkY1Cis6MTAxMzIwMDAxNDQwMDAwMjI0MDMwMDM0MjQwMzAwMzA4RjgyMDAyNDgwCis6MTAxMzMwMDBBMzgzMDAyQzkzODMwMDNDOEM0MjAwQzBBMzgwMDA0ODEwCis6MTAxMzQwMDBBRjgyMDA0MDI0MDIwMDA0MTA2MjAwMzA4Rjg0MDA0MDBECis6MTAxMzUwMDA4RTI0MDAwNDUwODAwMDJEOEY4NDAwNDA4RTIyMDAxMEM3Cis6MTAxMzYwMDAzMDgzRkZGRkE3ODQwMDNFMTA2MDAwMUZBRjgyMDA0NDVGCis6MTAxMzcwMDA4RjgzMDAyNDI0MDVGRjgwMDIyMDIwMjE5MDYyMDA2M0Q3Cis6MTAxMzgwMDAwMEEyMTAyNDMwNDIwMEZGMTQ0MDAwMEQwMDAwMDAwMEI1Cis6MTAxMzkwMDAwRTAwMUEwMjk3OTAwMDNFMTA0MDAwMTAwMDQwMTgyMUU1Cis6MTAxM0EwMDAyNDAyRkZGRDU0NjIwMDExOEUyMzAwMjAwMjAwMjgyMTM4Cis6MTAxM0IwMDAwRTAwMTQyNjAyMjAyMDIxMEEwMDFBRTg4RTIzMDAyMEE1Cis6MTAxM0MwMDA5MDYyMDA2MzAwQTIxMDI0MzA0MjAwRkYxMDQwMDAwMzJFCis6MTAxM0QwMDAwMjIwMjAyMTBFMDAxNzRBMDAwMDAwMDA5NzgyMDAzRUU0Cis6MTAxM0UwMDAxNDQwRkZFNDhGODMwMDI0OEUyMzAwMjAzMDYyMDAwNDI5Cis6MTAxM0YwMDAxMDQwMDAwNjhGODQwMDQwMjQwMkZGRkIwMDYyMTAyNDhFCis6MTAxNDAwMDAwRTAwMTQzQUFFMjIwMDIwOEY4NDAwNDA4RjgzMDAyNDA3Cis6MTAxNDEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwMTlDCis6MTAxNDIwMDAyN0JEMDAyMDAzRTAwMDA4QUM2NDAwQzAzMEE1MDBGRjI5Cis6MTAxNDMwMDAyNDAzMDAwMTI0QTkwMDAxMDA2OTEwMkIxMDQwMDAwQ0I2Cis6MTAxNDQwMDAwMDAwNDAyMTI0MEEwMDAxMDBBMzEwMjMwMDRBMzgwNEIwCis6MTAxNDUwMDAyNDYzMDAwMTMwODIwMDAxMDA2OTMwMkIxMDQwMDAwMjNCCis6MTAxNDYwMDAwMDA0MjA0MjAxMDc0MDI1NTRDMEZGRjgwMEEzMTAyM0M4Cis6MTAxNDcwMDAwM0UwMDAwODAxMDAxMDIxMjdCREZGRTAzQzAyMUVEQzU0Cis6MTAxNDgwMDBBRkIyMDAxOEFGQjEwMDE0QUZCRjAwMUNBRkIwMDAxMDc2Cis6MTAxNDkwMDAzNDUyNkY0MTAwMDA4ODIxMjQwNTAwMDgwRTAwMUFGODFDCis6MTAxNEEwMDAwMjIwMjAyMTAwMTE4MDgwM0MwNzA4MDAyNEU3NzFBQzU1Cis6MTAxNEIwMDAwMDAyMTYwMDAyMDcxODIxQUM2MjAwMDAwMDAwMjgyMTdCCis6MTAxNEMwMDAyNEEyMDAwMTMwNDVGRkZGOEM2MjAwMDAyQ0E2MDAwODFBCis6MTAxNEQwMDAwNDQxMDAwMjAwMDIyMDQwMDA5MjIwMjYxNEMwRkZGOEMwCis6MTAxNEUwMDBBQzY0MDAwMDAyMDc4MDIxOEUwNDAwMDAwRTAwMUFGODkwCis6MTAxNEYwMDAyNDA1MDAyMDI2MjMwMDAxMzA3MUZGRkYyRTIzMDEwMDY4Cis6MTAxNTAwMDAxNDYwRkZFNUFFMDIwMDAwOEZCRjAwMUM4RkIyMDAxODEwCis6MTAxNTEwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDM5Cis6MTAxNTIwMDAzQzAyMDgwMDI0NDI2QTc0M0MwMTA4MDBBQzIyNzFBMDBECis6MTAxNTMwMDAzQzAyMDgwMDI0NDI0RkYwM0MwMTA4MDBBQzIyNzFBNDk4Cis6MTAxNTQwMDAyNDAyMDAwNjNDMDEwODAwQTAyMjcxQTgwQTAwMUIwQjFGCis6MTAxNTUwMDAwMDAwMDAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxOEQ5Cis6MTAxNTYwMDBBRkJGMDAyMEFGQjEwMDE0QUZCMDAwMTA4RjUxMDE0MEU5Cis6MTAxNTcwMDA4RjQ4MDE0ODAwMDg5NDAyMzI0MzAwRkYzMTEzMDBGRkY2Cis6MTAxNTgwMDA4RjQyMDFCODA0NDBGRkZFMjc1MDAxODBBRTExMDAwMEQ5Cis6MTAxNTkwMDA4RjQyMDE0NEFFMDIwMDA0MjQwMjAwMDJBNjEyMDAwODk5Cis6MTAxNUEwMDBBMjAyMDAwQjI0MDIwMDE0QUUxMzAwMjQxMDYyMDAyNUQ2Cis6MTAxNUIwMDAyODYyMDAxNTEwNDAwMDA4MjQwMjAwMTUyNDAyMDAxMEMzCis6MTAxNUMwMDAxMDYyMDAzMDI0MDIwMDEyMTA2MjAwMDk4RkJGMDAyMDU4Cis6MTAxNUQwMDAwQTAwMUMzNThGQjMwMDFDMTA2MjAwNzAyNDAyMDAyMjI4Cis6MTAxNUUwMDAxMDYyMDAzNzhGQkYwMDIwMEEwMDFDMzU4RkIzMDAxQzJCCis6MTAxNUYwMDAzQzAyMDgwMDhDNDIzMUEwMjQwM0ZGODAwMjIyMTAyMTBCCis6MTAxNjAwMDAwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA4QzQyMzFBMDY5Cis6MTAxNjEwMDAwMjIyMTAyMTMwNDIwMDdGMDM0MjE4MjEzQzAyMDAwQUJFCis6MTAxNjIwMDAwMDYyMTgyMTE2NjAwMEJDQUY4MzAwMjQ5MDYyMDA2MjQzCis6MTAxNjMwMDAzMDQyMDAwRjM0NDIwMDMwQTA2MjAwNjIwQTAwMUMzNEM1Cis6MTAxNjQwMDA4RkJGMDAyMDNDMDQ2MDAwOEM4MzJDMDgzQzAyRjAwMzE4Cis6MTAxNjUwMDAzNDQyRkZGRjAwNjIxODI0QUM4MzJDMDgzQzAyMDgwMENGCis6MTAxNjYwMDA4QzQyMzFBMDhDODMyQzA4MjQ0MjAwNzQwMDAyMTA4MjJBCis6MTAxNjcwMDAwMDAyMTQ4MDAwNjIxODI1QUM4MzJDMDgwQTAwMUMzNDc4Cis6MTAxNjgwMDA4RkJGMDAyMDNDMDIwODAwOEM0MjMxQTAyNDAzRkY4MDYxCis6MTAxNjkwMDAwMjIyMTAyMTAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDIzCis6MTAxNkEwMDA4QzQyMzFBMDNDMDMwMDBBMDIyMjEwMjEzMDQyMDA3RjBDCis6MTAxNkIwMDAwMzQyMTAyMTAwNDMxMDIxMEEwMDFDMzNBRjgyMDAyNDkyCis6MTAxNkMwMDAzQzAyMDgwMDhDNDIzMUEwMjQwNUZGODAwMjIyMTAyMTM4Cis6MTAxNkQwMDAwMDQ1MTAyNEFGNDIwMDI0M0MwMjA4MDA4QzQyMzFBMDk3Cis6MTAxNkUwMDAwMjIyMTAyMTMwNDIwMDdGMDM0MjE4MjEzQzAyMDAwQUVFCis6MTAxNkYwMDAwMDYyMTgyMTkwNjIwMDYzMDBBMjEwMjQzMDQyMDBGRkIzCis6MTAxNzAwMDAxMDQwMDA4NUFGODMwMDI0MjQ2MjAwODg5NDQzMDAxMkI3Cis6MTAxNzEwMDAzQzAyMDgwMDhDNDIzMUE4MzA2MzNGRkYwMDAzMTk4MDZGCis6MTAxNzIwMDAwMjIyMTAyMTAwNDMxMDIxMzA0MzAwN0YwMzQzMjAyMTc3Cis6MTAxNzMwMDAwMDQ1MTAyNDNDMDMwMDBDMDA4MzIwMjFBRjQyMDAyODA4Cis6MTAxNzQwMDA5MDgyMDAwRDAwQTIxMDI0MzA0MjAwRkYxMDQwMDA3MjcxCis6MTAxNzUwMDBBRjg0MDAyODkwODIwMDBEMzA0MjAwMTAxNDQwMDA2RkNBCis6MTAxNzYwMDA4RkJGMDAyMDBFMDAxNTU2MDAwMDAwMDA4RjQyMDFCODA4Cis6MTAxNzcwMDAwNDQwRkZGRTAwMDAwMDAwQUUxMTAwMDA4RjQyMDE0NDUzCis6MTAxNzgwMDBBRTAyMDAwNDI0MDIwMDAyQTYxMjAwMDhBMjAyMDAwQjBFCis6MTAxNzkwMDBBRTEzMDAyNDBBMDAxQzM0OEZCRjAwMjAyNDA2RkY4MEYzCis6MTAxN0EwMDAwMjI2MTAyNEFGNDIwMDIwM0MwMjA4MDA4QzQyMzFBMEU3Cis6MTAxN0IwMDAzMTA0M0ZGRjAwMDQyMTgwMDIyMjEwMjEwMDQ2MTAyNDQyCis6MTAxN0MwMDBBRjQyMDAyNDNDMDMwODAwOEM2MzMxQTgzQzAyMDgwMEFGCis6MTAxN0QwMDA4QzQyMzFBMDMyMjcwMDdGMDIyMzE4MjEwMjIyMTAyMURGCis6MTAxN0UwMDAwMDY0MTgyMTMwNDIwMDdGMzA2NDAwN0YwMzQyMjgyMUNBCis6MTAxN0YwMDAzQzAyMDAwQTAwNjYxODI0MDBBMjI4MjEwMzQ0MjAyMThDCis6MTAxODAwMDAzQzAyMDAwQzAwODIyMDIxQUY0MzAwMjgzQzAyMDAwODZCCis6MTAxODEwMDAwMzQ3MTgyMTAwNjI5MDIxQUY4NTAwMjRBRjg0MDAyODdGCis6MTAxODIwMDAwRTAwMTU1NjAxMDA4MDIxOEY0MjAxQjgwNDQwRkZGRUQyCis6MTAxODMwMDA4RjgyMDAyODhGODQwMDI0Mjc0NTAxODA5MDQyMDAwRDZDCis6MTAxODQwMDBBQ0IxMDAwMEE0QjAwMDA2MDAwMjE2MDAwMDAyMTYwM0FFCis6MTAxODUwMDAwMDAyMTAyNzAwMDIzN0MyMTRDMDAwMTYyNDgyMDA4ODNDCis6MTAxODYwMDA5NDQyMDAxMjMyMDMzRkZGMzA0MjNGRkYxNDQzMDAxMjA0Cis6MTAxODcwMDAyNDAyNjA4MjkwODMwMDYzMjQwMkZGODAwMDQzMTAyNENFCis6MTAxODgwMDAzMDQyMDBGRjUwNDAwMDBDMjQwMjYwODI5MDgyMDA2MkNGCis6MTAxODkwMDAzMDQyMDAwRjM0NDIwMDQwQTA4MjAwNjIyNDAyNjA4NDgzCis6MTAxOEEwMDBBNEEyMDAwODI0MDIwMDBEQTBBMjAwMDUwQTAwMUMxRTJDCis6MTAxOEIwMDAzQzAyMjcwMDI0MDI2MDgyQTRBMjAwMDhBMEEwMDAwNTI4Cis6MTAxOEMwMDAzQzAyMjcwMDAwMDYxQzAwMDA2MjE4MjUyNDAyMDAwMkNBCis6MTAxOEQwMDBBMEEyMDAwQkFDQTMwMDEwQUNBMDAwMTRBQ0EwMDAyNDhDCis6MTAxOEUwMDBBQ0EwMDAyOEFDQTAwMDJDOEU0MjAwNEM4Rjg0MDAyOEI1Cis6MTAxOEYwMDBBQ0EyMDAxODkwODMwMDBEMjQwMkZGODAwMDQzMTAyNDQ2Cis6MTAxOTAwMDAzMDQyMDBGRjEwNDAwMDA1OEZCRjAwMjA5MDgyMDAwRDg0Cis6MTAxOTEwMDAzMDQyMDA3RkEwODIwMDBEOEZCRjAwMjA4RkIzMDAxQ0RCCis6MTAxOTIwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzQzAyMTAwMDZECis6MEMxOTMwMDAyN0JEMDAyODAzRTAwMDA4QUY0MjAxQjgwQQorOjA0MTkzQzAwMDgwMDMzRjg3NAorOjEwMTk0MDAwMDgwMDMzRjgwODAwMzM3MDA4MDAzM0E4MDgwMDMzRENCRgorOjEwMTk1MDAwMDgwMDM0MDAwODAwMzQwMDA4MDAzNDAwMDgwMDMyRTBCOQorOjEwMTk2MDAwMEEwMDAxMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzRAorOjEwMTk3MDAwNzQ3MDYxMzUyRTMwMkUzMDZBMzMwMDAwMDUwMDAwMDE4RQorOjEwMTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwMTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwMTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwMTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDNFNAorOjEwMTlGMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDA4NworOjEwMUEwMDAwMjQ0MjFCODAzQzAzMDgwMDI0NjMyMDE0QUM0MDAwMDBFNworOjEwMUExMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDBERAorOjEwMUEyMDAwMzdCRDJGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDA0ODhDRAorOjEwMUEzMDAwM0MxQzA4MDAyNzlDMUI4MDBFMDAwMTVBMDAwMDAwMDA3RgorOjEwMUE0MDAwMDAwMDAwMEQzMDg0RkZGRjMwODIwMDA3OEY4NTAwMThGMgorOjEwMUE1MDAwMTA0MDAwMDIyNDgzMDAwNzMwNjRGRkY4MDA4NTMwMjEyNQorOjEwMUE2MDAwMzBDNDFGRkYwMzQ0MTgyMTI0N0I0MDAwQUY4NTAwMUNCNQorOjEwMUE3MDAwQUY4NDAwMTgwM0UwMDAwOEFGNDQwMDg0MzA4NEZGRkYwNworOjEwMUE4MDAwMzA4MjAwMDc4Rjg1MDAyMDhGODYwMDI4MTA0MDAwMDJEQQorOjEwMUE5MDAwMjQ4MzAwMDczMDY0RkZGODAwODUyMDIxMDA4NjE4MkI3RQorOjEwMUFBMDAwMTQ2MDAwMDJBRjg1MDAyNDAwODYyMDIzMDM0NDI4MjEwRgorOjEwMUFCMDAwMzQwNjgwMDBBRjg0MDAyMEFGNDQwMDgwMDBBNjIwMjFCRgorOjEwMUFDMDAwMDNFMDAwMDhBRjg0MDAzODI3QkRGRkQ4QUZCMzAwMUM4NworOjEwMUFEMDAwQUZCMjAwMThBRkIwMDAxMEFGQkYwMDI0QUZCNDAwMjAwOQorOjEwMUFFMDAwQUZCMTAwMTQzQzA4NjAwODhEMTQ1MDAwMjQxOEZGN0YyQgorOjEwMUFGMDAwM0MxQTgwMDAwMjk4OTgyNDM2NzIzODBDQUQxMjUwMDBCRgorOjEwMUIwMDAwOEY1MTAwMDgzQzA3NjAxQzNDMDg2MDAwMzYzMDAwMDEyMworOjEwMUIxMDAwQUY1MDAwMDhBRjgwMDAxOEFGNDAwMDgwQUY0MDAwODQ5NQorOjEwMUIyMDAwOENFNjAwMDg4RDBGMDgwODNDMDc2MDE2OENFQzAwMDA1RQorOjEwMUIzMDAwMzFFRUZGRjAzOUNBMDAxMDNDMERGRkZGMzQwQjgwMDA3RQorOjEwMUI0MDAwM0MwMzAwODAwMzRCNDgyMTJENDQwMDAxMDE4RDI4MjREMworOjEwMUI1MDAwM0MwMjUzNTMzQzAxMDgwMEFDMjMwNDIwQUY4OTAwMzhGOQorOjEwMUI2MDAwQUY4NjAwMjhBRjg0MDAxMDI3NUI0MDAwMTRBMjAwMDM1QQorOjEwMUI3MDAwMzRFMzdDMDA4Q0Y5MDAwNDAzMjgxODIxOEM3RjAwN0M1RQorOjEwMUI4MDAwOEM2NTAwNzgzQzAyODAwMDM0NTIwMDcwQUY4NTAwM0NDOAorOjEwMUI5MDAwQUY5RjAwNDAzQzEzMDgwMDI2NzMxQkM0MDI0MEEwMjFFNQorOjEwMUJBMDAwOEU0ODAwMDA4RjQ2MDAwMDM4QzMwMDAxMzA2NDAwMDFGOQorOjEwMUJCMDAwMTA4MDAwMTdBRjg4MDAzNDAyODA0ODIxOEQyRDAwMDA2RQorOjEwMUJDMDAwM0MxOTA4MDA4RjM5MDQ1QzNDMTEwODAwOEUzMTA0NTgyMAorOjEwMUJEMDAwMDFBOEY4MjMwMzNGNzgyMTAwMDA0MDIxMDIyODM4MjE4MgorOjEwMUJFMDAwMDFGRjgwMkIwMEYwNzAyMTNDMDEwODAwQUMyRjA0NUM0OQorOjEwMUJGMDAwM0MwMTA4MDBBQzJFMDQ1ODhGNEMwMDAwMzk4QjAwMDFDQQorOjEwMUMwMDAwMzE2QTAwMDExNTQwRkZFRDAxQTA0MDIxQUY4RDAwMzQ4NQorOjEwMUMxMDAwOEU0RTAwMDAzQzBDMDgwMDhEOEMwNDVDM0MwQTA4MDBEMQorOjEwMUMyMDAwOEQ0QTA0NTgwMUM4NjgyMzAxOEQyODIxMDAwMDU4MjFERAorOjEwMUMzMDAwMDBBRDMwMkIwMTRCMjAyMTAwODYxMDIxM0MwMTA4MDAxMworOjEwMUM0MDAwQUMyNTA0NUMzQzAxMDgwMEFDMjIwNDU4OEY0NTAxMDgxNworOjEwMUM1MDAwOEY0NDAxMDAzMEE5MjAwMEFGODUwMDAwQUY4NDAwMEM0NAorOjEwMUM2MDAwMTEyMDAwMEEwMEEwMzAyMTNDMDcwODAwOENFNzA0MkM1QQorOjEwMUM3MDAwMjRFRjAwMDEzQzAxMDgwMEFDMkYwNDJDM0MxMDQwMDA3NAorOjEwMUM4MDAwQUY1MDAxMzgwQTAwMDE5MDAwMDAwMDAwMzBCMDAyMDA5RgorOjEwMUM5MDAwMTYwMDAwMTQyNDExMEYwMDEwOTEwMDEyMjQwNzBEMDBFQgorOjEwMUNBMDAwMTA4NzAyMzMzMEIwMDAwNjUyMDBGRkY1M0MxMDQwMDBCMAorOjEwMUNCMDAwOTM2RDAwMDAyNDBDMDAxMDMxQTYwMEYwMTBDQzAyNjlENgorOjEwMUNDMDAwMjQwRTAwNzAxMENFMDJERDhGOEIwMDE0MjU2NzAwMDFGQQorOjEwMUNEMDAwQUY4NzAwMTQzQzEwNDAwMEFGNTAwMTM4MEEwMDAxOTA1QgorOjEwMUNFMDAwMDAwMDAwMDA5NzQ4MDEwNDExMDBGRkU1M0MxMDQwMDA4RgorOjEwMUNGMDAwMzBCODQwMDAxNzAwMDBBMjAwMDAwMDAwOEY1OTAxNzhBMgorOjEwMUQwMDAwMDcyMEZGRkU4Rjg3MDAzODI0MDkwMDA4MjQwNTA4MDBGQgorOjEwMUQxMDAwOENFMzAwMDhBRjQ1MDE3OEE3NDkwMTQwQTc0MDAxNDI4NAorOjEwMUQyMDAwOTc0MjAxMDQ4Rjg2MDAwMDMwNDlGRkZGMzBERjAwMDEzOQorOjEwMUQzMDAwMTNFMDAyRDUwMTIwNDAyMTI1MjRGRkZFMjQwQTAwMDJFMQorOjEwMUQ0MDAwQTc0QTAxNDYzMDg4RkZGRkE3NDQwMTQ4M0MwQjA4MDAyMgorOjEwMUQ1MDAwOEQ2QjA0M0MxNTYwMDJDNDhGOEYwMDBDMzBDMzAwMjBEMworOjEwMUQ2MDAwMTQ2MDAwMDIyNDA0MDAwOTI0MDQwMDAxMzBDRDBDMDA5QQorOjEwMUQ3MDAwMjQwQzA0MDA1MUFDMDAwMTM0ODQwMDA0QTc0NDAxNEEzRgorOjEwMUQ4MDAwM0MwNTA4MDA4Q0E1MDQyMDNDMDIwMDQ4M0MxOTAwMDFEOQorOjEwMUQ5MDAwMDBBMkY4MjUzMEQ4MDAwMjAzRjkyODI1MTMwMDAwMDQxQQorOjEwMURBMDAwMDAwMDE4MjEzQzA0MDEwMDAwQTQyODI1MjQwMzAwMDFBMAorOjEwMURCMDAwMzBDQTAwMDQ1MTQwMDAwNUFGODMwMDA4M0MwNjAwMTAwMworOjEwMURDMDAwMDBBNjI4MjUyNDAzMDAwMUFGODMwMDA4QUY0NTEwMDBCQQorOjEwMUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwMURFMDAwOEY4MzAwMDgxMDYwMDAyMzAwMDAwMDAwOEY0QjEwMDA1QworOjEwMURGMDAwMDU2MUZGRkUwMDAwMDAwMDEwNjAwMDFFMDAwMDAwMDBGMgorOjEwMUUwMDAwOEY0RDEwMDAzQzAzMDAyMDAxQTM2MDI0MTE4MDAwMTlCNQorOjEwMUUxMDAwOEY4RjAwMDAzMUVFMDAwMjExQzAwMDE2MDAwMDAwMDA5QworOjEwMUUyMDAwOTc1MDEwMTQxNjAwMDAxMzAwMDAwMDAwOTc0NTEwMDg4QQorOjEwMUUzMDAwMzBCRkZGRkYyN0Y4MDAwNjAwMThDODgyMDAxOTMwODA2NQorOjEwMUU0MDAwMDBDNzI4MjEzMzExMDAwMTMzMDMwMDAzMTIyMDAzMjBBRgorOjEwMUU1MDAwOENBMjAwMDAwMDAwMDAwRDAwQzdGODIxQUZFMjAwMDBENgorOjEwMUU2MDAwM0MxOTA4MDA4RjM5MDQzMDI3MjYwMDAxM0MwMTA4MDA4NgorOjEwMUU3MDAwQUMyNjA0MzA4RjZBMDAwMDM0MDVGRkZGQUY4QTAwMDRFRgorOjEwMUU4MDAwOENFMjAwMDAxMDQ1MDI5QTAwMDAyMDIxOENFNTAwMDA0MQorOjEwMUU5MDAwMzBCRjAxMDAxM0UwMDI3RTAxMDAyMDIxM0MwNzA4MDA1MgorOjEwMUVBMDAwOENFNzA0NzQzQzEwMDgwMDhFMTAwNDRDMDBFODU4MjFBNAorOjEwMUVCMDAwM0MxODA4MDA4RjE4MDQ3MDAxNjg4ODJCM0MwODA4MDA0MworOjEwMUVDMDAwOEQwODA0NDgwMDAwNzgyMTAyMDQ2MDIxMDMwRjE4MjFDNgorOjEwMUVEMDAwMDE4NDcwMkIwMTBGNjgyMTAwNzE1MDIxMDFBRTEwMjE4NworOjEwMUVFMDAwM0MwMTA4MDBBQzJDMDQ0QzNDMDEwODAwQUMyMjA0NDgyNgorOjEwMUVGMDAwM0MwMTA4MDBBQzJCMDQ3NDNDMDEwODAwQUMyQTA0NzBCRgorOjEwMUYwMDAwOEY4RDAwMTgwMTIwMzAyMTMxMjkwMDA3MjVBRTAwMDhFRgorOjEwMUYxMDAwMzFDMjFGRkYwMzQyNjAyMUFGOEQwMDFDQUY4MjAwMTg0OQorOjEwMUYyMDAwMjU5QjQwMDBBRjQyMDA4NDExMjAwMDAzOEY5MDAwMjBDOQorOjEwMUYzMDAwMjRDODAwMDczMTA2RkZGODhGODQwMDI4MDBEMDI4MjEyQworOjEwMUY0MDAwMDBBNDc4MkIxNUUwMDAwMkFGOTAwMDI0MDBBNDI4MjMwMQorOjEwMUY1MDAwMDM0NTIwMjEzNDAzODAwMDAwODMxMDIxM0MwNjEwMDAzQgorOjEwMUY2MDAwQUY4NTAwMjBBRjgyMDAzOEFGNDUwMDgwQUY0NjAxNzhEMgorOjEwMUY3MDAwOEY4QjAwMTQyNTY3MDAwMTBBMDAwMUREQUY4NzAwMTQ3NAorOjEwMUY4MDAwOEY2MjAwMDg4RjY3MDAwMDI0MTEwMDMwMDAwN0M2MDIyRQorOjEwMUY5MDAwMzMwMzAwRjAxMDcxMDBBMjI0MTkwMDQwMTQ3OUZGNEJBNAorOjEwMUZBMDAwOEY4QjAwMTQ4RjRBMDE3ODA1NDBGRkZFMzBBNzAyMDA5NgorOjEwMUZCMDAwMTRFMDAwMDMwMDA1MTI4MjAwMDAwMDBEMDAwNTEyODJFQgorOjEwMUZDMDAwMzA1MDAwMDMwMDEwNDkwMDAxMzA3MDIxMDAwRTY4ODA3RAorOjEwMUZEMDAwMDFCMDYwMjEwMDBDNTg4MDAxNzM4MDIxOEUwODAwMDA0MAorOjEwMUZFMDAwMTUwMDAwMDIwMDAwMDAwMDAwMDAwMDBEOEY2RjAwMDRDQgorOjEwMUZGMDAwMDVFMjAyQjE5MjAzMDAwNjkyMDcwMDA1OTIwRjAwMDQ2OQorOjEwMjAwMDAwM0MwMjAwMDEwMDA3Mjg4MDAwQjA2MDIxOEQ4OTAwMTg4MworOjEwMjAxMDAwMjc3MTAwMDgyNUVFMDAwNTAxMjI2ODIxMDAwRTMwODI5QworOjEwMjAyMDAwQUQ4RDAwMTgwMjIwMjAyMTBFMDAwNTgwMjYwNTAwMTQyOQorOjEwMjAzMDAwOTIwQjAwMDY4RjdGMDAwNDNDMDg3RkZGMDAwQjIwODA3RQorOjEwMjA0MDAwMDA5MTMwMjE4Q0MzMDAwNDM1MEFGRkZGMDNFQUM4MjQ0NQorOjEwMjA1MDAwMDA3OUMwMjFBQ0Q4MDAwNDkyMDcwMDA1OTIwOTAwMDQ2MQorOjEwMjA2MDAwOTYwRDAwMDgwMDA3Mjg4MDAwQjFGODIxOEZFRjAwMDBDRQorOjEwMjA3MDAwOTc0MjAxMDQzQzA3RkZGRjAxRTc1MDI0MzA0RUZGRkY2OQorOjEwMjA4MDAwMDFDOTYwMjEwMThENTgyMzMxNjhGRkZGMDE0ODIwMjVENworOjEwMjA5MDAwQUZFNDAwMDA5MjAzMDAwNzI0MTkwMDAxMTA3OTAyNjlERgorOjEwMjBBMDAwMjQwNjAwMDMxMDY2MDI3OTAwMDAwMDAwOEUxOTAwMTA1QgorOjEwMjBCMDAwMjQxRjAwMEFBNzVGMDE0MEE3NTkwMTQyOTIwMzAwMDRCMAorOjEwMjBDMDAwOEY4NjAwMDAyNDA3MDAwMUE3NDMwMTQ0QTc0MDAxNDY3MgorOjEwMjBEMDAwOTc1ODAxMDQzMEQxMDAwMjNDMDUwMDQxQTc1ODAxNDgzRgorOjEwMjBFMDAwMDAwMDE4MjFBNzQ3MDE0QTEyMjAwMDAzMzBDQTAwMDQ0QgorOjEwMjBGMDAwM0MwNTAxNDEyNDAzMDAwMTUxNDAwMDA1QUY4MzAwMDg2NQorOjEwMjEwMDAwM0MwODAwMTAwMEE4MjgyNTI0MDMwMDAxQUY4MzAwMDgyNAorOjEwMjExMDAwQUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjEyMDAwMDAwMDAwMDA4RjhCMDAwODExNjAwMDA0MDAwMDAwMDAxOAorOjEwMjEzMDAwOEY0NDEwMDAwNDgxRkZGRTAwMDAwMDAwOEY2QTAwMDA0MQorOjEwMjE0MDAwOTIwNzAwMDQzQzA1MDgwMDhDQTUwNDQ0QUY4QTAwMDRGMworOjEwMjE1MDAwOTc1RjAxMDQzQzBGMDgwMDhERUYwNDQwMzBFMzAwRkY1RgorOjEwMjE2MDAwMzNGOUZGRkYwMDc5QzAyMTAwQjg2ODIxMDAwMDEwMjE3OQorOjEwMjE3MDAwMjRFNjAwMEEzMEM4RkZGRjAxQjg0ODJCMDFFMjcwMjFCNQorOjEwMjE4MDAwMDFDOTYwMjEzMTEwMDAwNzNDMDEwODAwQUMyRDA0NDQ1NgorOjEwMjE5MDAwM0MwMTA4MDBBQzJDMDQ0MDEyMDAwMDAzOEY4RDAwMTg5NQorOjEwMjFBMDAwMjUwQjAwMDczMTY4RkZGODAxMEQ3MDIxMzFDQzFGRkZBRQorOjEwMjFCMDAwQUY4RDAwMUNBRjhDMDAxOEFGNEMwMDg0OTc0NDAxMDQxNQorOjEwMjFDMDAwMDM0QzgwMjEzMDg0RkZGRjMwODgwMDA3MTEwMDAwMDM5QQorOjEwMjFEMDAwMjYxQjQwMDAyNDg5MDAwNzMxMjRGRkY4OEY4MjAwMjA0RAorOjEwMjFFMDAwOEY4NTAwMjgwMDgyMjAyMTAwODU3ODJCMTVFMDAwMDJEMQorOjEwMjFGMDAwQUY4MjAwMjQwMDg1MjAyMzAzNDQ4ODIxMzQwNTgwMDAxOQorOjEwMjIwMDAwMDIyNTEwMjEzQzA2MTAwMEFGODQwMDIwQUY4MjAwMzg2OAorOjEwMjIxMDAwQUY0NDAwODBBRjQ2MDE3ODBBMDAwMjg1OEY4QjAwMTQxRQorOjEwMjIyMDAwOEY1RjAxNzgwN0UwRkZGRTMwQUEwMjAwMTU0MDAwMDMyRgorOjEwMjIzMDAwMDAwNTQyODIwMDAwMDAwRDAwMDU0MjgyMzEwMjAwMDNDOQorOjEwMjI0MDAwMDAwMjcxMDAwMUMyNjgyMTAwMEQ2MDgwMDE4MjQ4MjFGNgorOjEwMjI1MDAwMDAwOTI4ODAwMEIzODAyMThFMEIwMDAwMTE2MDAwMDI2RAorOjEwMjI2MDAwMDAwMDAwMDAwMDAwMDAwRDhGNkYwMDBDMDVFMDAxRjM3RQorOjEwMjI3MDAwOEY4NzAwMzgyNDE5MDAwMUFFMTkwMDAwOENFMzAwMDg5NAorOjEwMjI4MDAwQTIwMDAwMDc4Rjc4MDAwNDAwMTgxQzAyMzA2NjAwRkZDRgorOjEwMjI5MDAwMjREMTAwMDUwMDExMzA4MjJDQzQwMDQxMTQ4MDAwMDJCQQorOjEwMjJBMDAwQTIwMzAwMDQwMDAwMDAwRDhGNkIwMDA0M0MwRUZGRkYzMgorOjEwMjJCMDAwMDBFMDI4MjEzMTY0RkZGRjI0OEYwMDBCMDAwRjQwODJEMworOjEwMjJDMDAwMDAwODEwODAwMDQ3NDgyMThEMkQwMDAwMjYwNDAwMTRDRQorOjEwMjJEMDAwQTYwQjAwMDgwMUFFNjAyNDBFMDAwNTgwQUQyQzAwMDBBNgorOjEwMjJFMDAwOEY1RjAxMDgzQzBBMTAwMDAzRUEzODI0MTBFMDAxQTNDNAorOjEwMjJGMDAwMDAwMDAwMDA5NzQ2MDEwNDkyMDMwMDA3MjREMUZGRUM4MAorOjEwMjMwMDAwMzQ2NTAwMDIzMjI0RkZGRkEyMDUwMDA3OTYwNjAwMDg4QworOjEwMjMxMDAwMkNDNzAwMTM1NEUwMDAwNTkyMDMwMDA3OTIwQTAwMDczRgorOjEwMjMyMDAwMzU1RjAwMDFBMjFGMDAwNzkyMDMwMDA3MjQwQjAwMDE4NAorOjEwMjMzMDAwMTA2QjAxQkEyNDA5MDAwMzEwNjkwMUNEOEY4ODAwMzhBMQorOjEwMjM0MDAwMzBDRkZGRkYyNUU0MDAwMjAwMDRDODgzMzMzRjAwRkZDNQorOjEwMjM1MDAwMDAxRjI4ODBBMjE5MDAwNTAwQTg1ODIxOEQ3ODAwMDBEMAorOjEwMjM2MDAwOTc1MTAxMDQzQzAzRkZGRjAzMDM2MDI0MzIyMkZGRkY2NworOjEwMjM3MDAwMDA0RjcwMjMyNUNERkZGRTAxOEQ0ODI1QUQ2OTAwMDA3QgorOjEwMjM4MDAwOTIwNjAwMDUzQzAyRkZGNjM0NEVGRkZGMzBDQTAwRkYwNAorOjEwMjM5MDAwMDAwQTM4ODAwMEYwMjAyMTkwOTkwMDE0M0MxRkZGN0YzNAorOjEwMjNBMDAwMzdFN0ZGRkYzMzIzMDAwRjAwNjY3ODIxMzFGODAwRkY4NQorOjEwMjNCMDAwMDAxODI4ODAwMEIwODgyMThFMkQwMDIwMDBBODYwMjEwMAorOjEwMjNDMDAwQTIwRjAwMDYwMUFFNDgyNEFFMEQwMDBDQUQ4OTAwMEMzMgorOjEwMjNEMDAwOTIwQjAwMDY4RTA0MDAwQzAxMjdGODI0MDAwQjUwODA5RAorOjEwMjNFMDAwMDE1MEM4MjE5NzI2MDAyNjAxNDhDMDIxMDA4NzQwMjRCQgorOjEwMjNGMDAwQUYyNjAwMjRBRTA4MDAwQ0FGM0YwMDIwQUYwNjAwMTA0RgorOjEwMjQwMDAwOEY4NjAwMDAyNDBDMDAxMDI0MDkwMDAyQTc0QzAxNDAxNAorOjEwMjQxMDAwQTc0MDAxNDJBNzQwMDE0NEE3NDkwMTQ2OTc0QjAxMDQ0OAorOjEwMjQyMDAwMjQwNzAwMDEzMEM4MDAwMjI1NkFGRkZFQTc0QTAxNDhDMAorOjEwMjQzMDAwM0MwNTAwMDlBNzQ3MDE0QTExMDAwMDAzMDAwMDE4MjFDQworOjEwMjQ0MDAwM0MwNTAxMDkyNDAzMDAwMTMwQ0QwMDA0NTFBMDAwMDUyMgorOjEwMjQ1MDAwQUY4MzAwMDgzQzA2MDAxMDAwQTYyODI1MjQwMzAwMDFENQorOjEwMjQ2MDAwQUY4MzAwMDhBRjQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMjQ3MDAwMDAwMDAwMDAwMDAwMDAwMDkyMTgwMDA0MjcxMTAwMDI3NAorOjEwMjQ4MDAwMzIyRjAwMDcwMDBGMTAyMzMwNEUwMDA3QUUwRTAwMTA1MQorOjEwMjQ5MDAwOEY5MDAwMDgxMjAwMDAwNDAwMDAwMDAwOEY0MzEwMDAxRAorOjEwMjRBMDAwMDQ2MUZGRkUwMDAwMDAwMDhGNzgwMDAwOEY4RjAwMTg4RAorOjEwMjRCMDAwM0MxMDA4MDA4RTEwMDQ0NEFGOTgwMDA0OTc1MTAxMDRBQQorOjEwMjRDMDAwMjVFNjAwMTAzMENBMUZGRjMyMjJGRkZGQUY4RjAwMUMyRAorOjEwMjREMDAwQUY4QTAwMThBRjRBMDA4NDI0NDlGRkZFM0MwQjA4MDA3NQorOjEwMjRFMDAwOEQ2QjA0NDA5NzRFMDEwNDAxMjA2ODIxMDAwOTY3QzNFOQorOjEwMjRGMDAwMDIwRDI4MjEzMUM5RkZGRjAwQUQ0MDJCMDE2QzM4MjFBRQorOjEwMjUwMDAwMDBFODIwMjEwMzRBRjgyMTMxMzkwMDA3M0MwMTA4MDA4NgorOjEwMjUxMDAwQUMyNTA0NDQzQzAxMDgwMEFDMjQwNDQwMTMyMDAwMDMxMworOjEwMjUyMDAwMjdGQjQwMDAyNTIzMDAwNzMwNjlGRkY4OEY5RjAwMjAxQworOjEwMjUzMDAwOEY4NDAwMjgwMTNGMzgyMTAwRTRDODJCMTcyMDAwMDJCNworOjEwMjU0MDAwQUY5RjAwMjQwMEU0MzgyMzAzNDcyMDIxMzQwNTgwMDA5NgorOjEwMjU1MDAwMDA4NTEwMjEzQzA2MTAwMEFGODcwMDIwQUY4MjAwMzhCNAorOjEwMjU2MDAwQUY0NzAwODBBRjQ2MDE3ODBBMDAwMjg1OEY4QjAwMTRDOAorOjEwMjU3MDAwOTc1ODAxMDQxMzAwRkRDMjNDMTA0MDAwOEY0MzAxNzhCRQorOjEwMjU4MDAwMDQ2MEZGRkUzMEI5NDAwMDEzMjAwMDAzM0MwNDAwMDg0MworOjEwMjU5MDAwMDAwMDAwMEQzQzA0MDAwOEFGNDQwMTQwMjQwODA4MDA3RQorOjEwMjVBMDAwQUY0ODAxNzg4RjhCMDAwMDk3NEEwMTA0MzE3RjAwMDEwQQorOjEwMjVCMDAwMTNFMDAwRTkzMTQ2RkZGRjI0RDBGRkZFMjQwQzAwMDJBNworOjEwMjVDMDAwQTc0QzAxNDZBNzUwMDE0ODhGOEYwMDE4MjQwNTAwMEQyNQorOjEwMjVEMDAwQTc0NTAxNEE4RjcxMDAwMDI1RTIwMDA4MzA0OTFGRkYxRQorOjEwMjVFMDAwMDM0OTcwMjEzMENEMDAwN0FGOTEwMDA0QUY4RjAwMUM2QworOjEwMjVGMDAwQUY4OTAwMTgwMEMwMzgyMUFGNDkwMDg0MTFBMDAwMDM0MgorOjEwMjYwMDAwMjVEQjQwMDAyNEM2MDAwNzMwQzdGRkY4OEY5ODAwMjA2NAorOjEwMjYxMDAwOEY4NDAwMjgwMEY4MzAyMTAwQzQzODJCMTRFMDAwMDIxOQorOjEwMjYyMDAwQUY5ODAwMjQwMEM0MzAyMzhGOEEwMDE0MDM0NjU4MjEzOQorOjEwMjYzMDAwMzQwODgwMDAwMTY4RjgyMTI1NTkwMDAxM0MwMzEwMDA4RQorOjEwMjY0MDAwM0MxMDQwMDBBRjg2MDAyMEFGOUYwMDM4QUY0NjAwODBBRQorOjEwMjY1MDAwQUY0MzAxNzhBRjk5MDAxNEFGNTAwMTM4MEEwMDAxOTBFMAorOjEwMjY2MDAwMDAwMDAwMDA4RjY5MDAwMDk3NDQwMTA0MzEyN0ZGRkYzQworOjEwMjY3MDAwMzA4OEZGRkY4RjRGMDE3ODA1RTBGRkZFMzBGRjAwMDczNQorOjEwMjY4MDAwMDAxRjE4MjMzMDc4MDAwNzI0RTZGRkZFMjQxOTAwMEFGMworOjEwMjY5MDAwQTc1OTAxNDBBNzU4MDE0MkE3NDYwMTQ0QTc0MDAxNDY1NworOjEwMjZBMDAwQTc0ODAxNDg4RjQyMDEwODMwNTEwMDIwMTYyMDAwMDIzRgorOjEwMjZCMDAwMjQwMzAwMDkyNDAzMDAwMTMwQUEwMDAyQTc0MzAxNEFCMQorOjEwMjZDMDAwM0MwNDAwNDExMTQwMDAwMzAwMDAxODIxM0MwNDAxNDE3QQorOjEwMjZEMDAwMjQwMzAwMDEzMEFCMDAwNDUxNjAwMDA1QUY4MzAwMDgwMworOjEwMjZFMDAwM0MwNTAwMTAwMDg1MjAyNTI0MDMwMDAxQUY4MzAwMDg2RAorOjEwMjZGMDAwQUY0NDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwMjcwMDAwMDAwMDAwMDA4RjkwMDAwODEyMDAwMDA0MDAwMDAwMDA4QworOjEwMjcxMDAwOEY0QzEwMDAwNTgxRkZGRTAwMDAwMDAwOEY3ODAwMDA0NAorOjEwMjcyMDAwMjc2MjAwMDg4RjhEMDAzQ0FGOTgwMDA0OTQ0NjAwMDg5MworOjEwMjczMDAwOTQ1MTAwMEE5NDRGMDAwQzMwQ0VGRkZGMDAxMTI0MDA4QQorOjEwMjc0MDAwMzFFOUZGRkYxMUNEMDBBMjAwODkyMDI1M0MwMzA4MDBEQworOjEwMjc1MDAwOEM2MzA0NDQzQzE4MDgwMDhGMTgwNDQwMDBFODUwMjFBMgorOjEwMjc2MDAwMjU1RkZGRkUwMDdGNzgyMTAwMDAxMDIxMDFGRjMwMkI0NAorOjEwMjc3MDAwMDMwMjg4MjEwMjI2NDgyMTNDMDEwODAwQUMyRjA0NDRCMgorOjEwMjc4MDAwM0MwMTA4MDBBQzI5MDQ0MDI0RUIwMDA4MzE2MkZGRkY0MworOjEwMjc5MDAwMzA0NzAwMDcxMEUwMDAwMzhGODUwMDE4MjQ1MDAwMDcyMQorOjEwMjdBMDAwMzIwMkZGRjgzMTA2RkZGRjMwQzgwMDA3MDA0NTcwMjFGNAorOjEwMjdCMDAwMzFDRDFGRkYwMzRENjAyMUFGODUwMDFDQUY4RDAwMTg4OAorOjEwMjdDMDAwMjU5QjQwMDBBRjREMDA4NDExMDAwMDAzOEY4RjAwMjAzNworOjEwMjdEMDAwMjRDNDAwMDczMDg2RkZGODhGODQwMDI4MDBDRjI4MjEwQQorOjEwMjdFMDAwMDBBNDQ4MkIxNTIwMDAwMkFGOEYwMDI0MDBBNDI4MjM0QQorOjEwMjdGMDAwQUY4NTAwMjBBRjQ1MDA4MDNDMTEwODAwOEUzMTA0MzRDNQorOjEwMjgwMDAwMDM0NUMwMjEzNDAyODAwMDAzMDIzMDIxMTIyMDAwMDU1QworOjEwMjgxMDAwQUY4NjAwMzg5MzgzMDAxNzI0MTkwMDBFMTA3OTAwMEQzRAorOjEwMjgyMDAwMjQxRjA0M0YzQzBBMTAwMEFGNEEwMTc4OEY4QjAwMTQyQworOjEwMjgzMDAwMjU2NzAwMDEwQTAwMDFEREFGODcwMDE0MEUwMDA1QTYyMAorOjEwMjg0MDAwM0MxMDQwMDA4RjhCMDAxNDI1NjcwMDAxMEEwMDAxREU1OAorOjEwMjg1MDAwQUY4NzAwMTQzQzBBMTAwMEE3NUYwMTQ4QUY0QTAxNzgxNworOjEwMjg2MDAwMEEwMDA0QjQ4RjhCMDAxNDI0MEUwRjAwMTFFRTAwM0RGQgorOjEwMjg3MDAwMzBEMTAwMjAxNjIwMDAwMjI0MDMwMDA5MjQwMzAwMDFBNworOjEwMjg4MDAwMEEwMDAyMDhBNzQzMDE0QTBBMDAwMUZCQTc0MDAxNDZDQgorOjEwMjg5MDAwOTRFNTAwMDg5NEUyMDAwQTk0RUIwMDBDOEY4NjAwM0M1QgorOjEwMjhBMDAwMDAwMkZDMDAzMTZBRkZGRjMwQjlGRkZGMTMyNjAwMzczQQorOjEwMjhCMDAwMDNFQTIwMjUzQzA1MDgwMDhDQTUwNDQ0M0MxRjA4MDBDMQorOjEwMjhDMDAwOEZGRjA0NDAwMDAwNTAyMTAwQTgzODIxMDBFODMwMkI4MQorOjEwMjhEMDAwMDNFQUM4MjEwMzI2QzAyMTNDMDEwODAwQUMyNzA0NDRCOAorOjEwMjhFMDAwM0MwMTA4MDBBQzM4MDQ0MDBBMDAwMjY5OEY4RDAwMThEMgorOjEwMjhGMDAwM0MxOTA4MDA4RjM5MDQ3QzNDMDMwODAwOEM2MzA0NTRBNQorOjEwMjkwMDAwM0MwNjA4MDA4Q0M2MDQ3ODNDMEYwODAwOERFRjA0NTA4QworOjEwMjkxMDAwMDMyODM4MjEwMDY4NjgyMTAwRThDMDJCMDBDNDg4MjEwMgorOjEwMjkyMDAwMDFBODQwMkIwMUU0NzAyMTAyMzg1ODIxMDFDODYwMjEyMAorOjEwMjkzMDAwM0MwMTA4MDBBQzJEMDQ1NDNDMDEwODAwQUMyQzA0NTBCMAorOjEwMjk0MDAwM0MwMTA4MDBBQzI3MDQ3QzNDMDEwODAwQUMyQjA0Nzg1NworOjEwMjk1MDAwMEEwMDAyNjk4RjhEMDAxOEE3NDAwMTQ2MEEwMDA0MUI3NworOjEwMjk2MDAwOEY4RjAwMTgzMEQwMDAyMDE2MDBGRkM1MjQwMzAwMEQwMworOjEwMjk3MDAwMjQwMzAwMDUwQTAwMDIwOEE3NDMwMTRBOTc1OTAxMDRFRAorOjEwMjk4MDAwMjczOEZGRjAwQTAwMDM2QjMzMDRGRkZGOEY4QzAwNDBGMQorOjEwMjk5MDAwMTQ4Q0ZGQzgwMDAwODAyMTNDMTEwODAwOEUzMTA0NkNBQgorOjEwMjlBMDAwM0MwNDA4MDA4Qzg0MDQ2ODAyMjg3MDIxMDFDODc4MkIzQworOjEwMjlCMDAwMDA5MDQwMjEwMTBGNjgyMTNDMDEwODAwQUMyRTA0NkNGRQorOjEwMjlDMDAwM0MwMTA4MDBBQzJEMDQ2ODBBMDAwMjY5OEY4RDAwMThENAorOjEwMjlEMDAwOEY5OTAwNDAxNDk5RkY1RDAwMDA2MDIxM0MwNTA4MDBCQworOjEwMjlFMDAwOENBNTA0NkMzQzEwMDgwMDhFMTAwNDY4MDBFODIwMjFCRgorOjEwMjlGMDAwMjQ4RUZGRkUwMEFFRjgyMTAzRUU1ODJCMDIwQzUwMjE2RQorOjEwMkEwMDAwMDE0QjE4MjEzQzAxMDgwMEFDM0YwNDZDM0MwMTA4MDA1QworOjEwMkExMDAwQUMyMzA0NjgwQTAwMDQ4QjI0RUIwMDA4OEY4ODAwMzg3QworOjEwMkEyMDAwM0MwMkZGRkY4RDBFMDAwQzAxQzI2ODI0MDFBNDYwMjU0QQorOjEwMkEzMDAwQUQwQzAwMEMwQTAwMDM3OTMwQ0ZGRkZGMEEwMDAzQTk5OAorOjEwMkE0MDAwQUUwMDAwMDA5NzRCMDEwNDkyMDQwMDA0OEUyQTAwMEM5MworOjEwMkE1MDAwMDE2NDQwMjEyNTFGRkZGMjAxNDcxODI0MzNGOUZGRkZDRAorOjEwMkE2MDAwMDA3OUMwMjVBRTM4MDAwQzBBMDAwMkQ0OEUxOTAwMTA3RgorOjEwMkE3MDAwM0MwM0ZGRkY4RDExMDAxMDAyMjMyODI0MDBBNDc4MjVCOQorOjEwMkE4MDAwQUQwRjAwMTAwQTAwMDM3OTMwQ0ZGRkZGOTc0NTAxMDQxNgorOjEwMkE5MDAwOTIwNjAwMDQ4RTJGMDAxMDAwQTYxMDIxMjQ0OUZGRUU5QworOjEwMkFBMDAwMDFFNzY4MjQzMTJFRkZGRjAxQUU2MDI1QUUyQzAwMTAzNworOjEwMkFCMDAwMEEwMDAyRDQ4RTE5MDAxMDhFMDYwMDBDQUUwMDAwMDAzMQorOjEwMkFDMDAwMDAwM0MwODAwMzEwODgyMTBBMDAwMkE2QUUyNjAwMjA2MQorOjEwMkFEMDAwMTQ2MDAwMEQzMDUwRkZGRjNDMDRGRkZGMDA0NDYwMjRGMQorOjEwMkFFMDAwMDE4NDY4MjYwMDBENTgyQjAwMEM1MDJCMDE0QjEwMjQzQworOjEwMkFGMDAwMTA0MDAwMDIwMDAwMDAwMDAwMDAwMDBEOENBMzAwMDA0OAorOjEwMkIwMDAwMEEwMDAyM0UwMDY0MTAyNTNBMTFGRkZGMDAxMTc4MkJFNQorOjEwMkIxMDAwMDAxMDcwMkIwMUNGMjAyNDEwODAwMDAyMDAwMDAwMDA2NAorOjEwMkIyMDAwMDAwMDAwMEQ4Q0I4MDAwMDBBMDAwMjNFMzcwMkZGRkZEMworOjEwMkIzMDAwMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjE0MAorOjEwMkI0MDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjE3QworOjEwMkI1MDAwMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjFGRQorOjEwMkI2MDAwMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkY3OAorOjEwMkI3MDAwMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDRFMAorOjEwMkI4MDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZERAorOjEwMkI5MDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkZERgorOjEwMkJBMDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDg5QQorOjEwMkJCMDAwMDAwMDAwMDAzMDhFRkZGRjMwRDhGRkZGMDAwNTdDMDBEMgorOjEwMkJDMDAwMDFGODYwMjUzOUNERkZGRjAxQUM1MDIxMDE0QzU4MkI5NQorOjEwMkJEMDAwMDE0QjQ4MjEwMDA5NDQwMjMxMjdGRkZGMDBFODMwMjE2MgorOjEwMkJFMDAwMDAwNjI0MDIzMEM1RkZGRjAwQTQxODIxMzg2MkZGRkY1MQorOjEwMkJGMDAwMDNFMDAwMDgzMDQyRkZGRjNDMEMwODAwOEQ4QzA0ODQ4OQorOjEwMkMwMDAwMjQwQkZGODAyN0JERkZEMDAxODQ1MDIxMDE0QjQ4MjRCNQorOjEwMkMxMDAwQUY0OTAwMjAzQzA4MDgwMDhEMDgwNDg0QUZCMjAwMjBCMgorOjEwMkMyMDAwQUZCMDAwMThBRkJGMDAyOEFGQjMwMDI0QUZCMTAwMUM5NQorOjEwMkMzMDAwOTM2NjAwMDQwMTA0MzgyMTMwRTQwMDdGMDA5QTEwMjFEQgorOjEwMkM0MDAwM0MwMzAwMDgwMDQzOTAyMTMwQzUwMDIwMDM2MDgwMjEzMAorOjEwMkM1MDAwM0MwODAxMTEyNzdCMDAwODE0QTAwMDAyMjY0NjAwNzBFMgorOjEwMkM2MDAwMjY0NjAwNkM5MjEzMDAwNDk3NTEwMTA0OTIwRjAwMDQ1MQorOjEwMkM3MDAwMzI2NzAwMEYzMjJFRkZGRjMxRUQwMDQwMDFDNzI4MjNERAorOjEwMkM4MDAwMTFBMDAwMDUwMDAwNDgyMTkyNTkwMEJDMzMzODAwMDQwRgorOjEwMkM5MDAwMTcwMDAwOTAwMDAwMDAwMDkyNDMwMEJDMzA3RjAwMDQ0OQorOjEwMkNBMDAwMTNFMDAwMEYwMDAwMDAwMDEwQTAwMDBEMDAwMDAwMDA2NQorOjEwMkNCMDAwOTYwRTAwMDIyNDBBRkY4MDAwQTc2MDIxMjVDREZGRkVBQQorOjEwMkNDMDAwQTc0RDEwMTY5MjBCMDAwNDAxNEIyMDI0MzA4MjAwRkYwOAorOjEwMkNEMDAwMTA0MDAwODUwMTBDNDAyNTNDMEYwNDAwMDEwRjQwMjVFOQorOjEwMkNFMDAwOEY1MzAxNzgwNjYwRkZGRTI0MDQwMDBBQTc0NDAxNDBDOAorOjEwMkNGMDAwOTYwRDAwMDIyNDA0MDAwOTMxQUMwMDA3MDAwQzU4MjM5MworOjEwMkQwMDAwMzE2QTAwMDdBNzRBMDE0Mjk2MDIwMDAyMjQ0M0ZGRkVFRgorOjEwMkQxMDAwQTc0MzAxNDRBNzQwMDE0Njk3NUYwMTA0QTc1RjAxNDgwQworOjEwMkQyMDAwOEY1OTAxMDgzMzM4MDAyMDUzMDAwMDAxMjQwNDAwMDFBQQorOjEwMkQzMDAwOTIwRjAwMDQzMUVFMDAxMDE1QzAwMDAyMzQ4MzAwMTAyMQorOjEwMkQ0MDAwMDA4MDE4MjFBNzQzMDE0QTAwMDAwMDAwMDAwMDAwMDA5NQorOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMEFGNDgxMDAwMDAwMDAwMDA2QworOjEwMkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY1MTEwMDA3MworOjEwMkQ3MDAwMDYyMUZGRkUzMTEzRkZGRjEyNjAwMDAzMDAwMDAwMDA3OAorOjEwMkQ4MDAwOEY0ODEwMThBQ0M4MDAwMDk2MDMwMDA2MzA3RkZGRkY4NAorOjEwMkQ5MDAwMjdGOTAwMDIwMDE5OTg4MjAwMTM4ODgwMDIzQjMwMjEzNQorOjEwMkRBMDAwOENEODAwMDAxNTIwMDA1NzAwMTgzNDAyOTIwMzAwMDQ0QworOjEwMkRCMDAwMjQwNUZGODAwMEEzRjgyNDMzRjEwMEZGMTIyMDAwMkMyQgorOjEwMkRDMDAwMDAwMDAwMDA5MjQ3MDBCQzMwRjIwMDAyMTI0MDAwMjhEMAorOjEwMkREMDAwMDAwMDAwMDA5NzRCMTAwQzI1NjJGRkZFQTc0MjEwMTY2MgorOjEwMkRFMDAwMDAwMDAwMDAzQzBBMDQwMDM1NDkwMDMwQUY0OTEwMDBFMworOjEwMkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwMkUwMDAwOEY0QzEwMDAwNTgxRkZGRTAwMDAwMDAwOTc0OTEwMEM1OAorOjEwMkUxMDAwOEY1MTEwMUMwMEMwMjAyMTMxMjdGRkZGMjRGMjAwMzAwOQorOjEwMkUyMDAwMDAxMjE4ODIwMDAzMjg4MDAwQkJGODIxMzIyNkZGRkYyMQorOjEwMkUzMDAwQUZGMTAwMDAwRTAwMDU5NTAwMTEyQzAyMDAxM0M4ODBCMAorOjEwMkU0MDAwMDMzQjk4MjE4RTc4MDAwMDAwMDI3NDAwQUZCODAwMTA5OAorOjEwMkU1MDAwOEZBODAwMTAzMTBGRkZGRkFGQUYwMDEwOEZBNDAwMTAzQworOjEwMkU2MDAwMDFDNDY4MjVBRkFEMDAxMDhGQTYwMDEwQUU2NjAwMDA0QgorOjEwMkU3MDAwOTc3MzAwMDg5NzZEMDAwQTk3NjYwMDBDOEY4QTAwM0NENAorOjEwMkU4MDAwMDAwRDVDMDAzMENDRkZGRjMyNjJGRkZGMTA0QTAwMzZCRAorOjEwMkU5MDAwMDE2QzIwMjU5NjA2MDAwMjNDMTAxMDAwMjREMzAwMDg4NworOjEwMkVBMDAwMEUwMDAxMzkzMjY0RkZGRjk3NEMwMTA0MEUwMDAxNDcwOAorOjEwMkVCMDAwMzE4NEZGRkZBRjUwMDE3ODhGQkYwMDI4OEZCMzAwMjQwQgorOjEwMkVDMDAwOEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgwMworOjEwMkVEMDAwMjdCRDAwMzAxMEEwRkY3MDAwMDAwMDAwMjRBNUZGRkNGQgorOjEwMkVFMDAwMEEwMDA1Q0UyNDA5MDAwNDhDRDEwMDAwQUY1MTEwMTg0RgorOjEwMkVGMDAwOEY1MzAxNzgwNjYwRkY3QTI0MDQwMDBBMEEwMDA1RTM3NAorOjEwMkYwMDAwMDAwMDAwMDAwMEE3QzgyMThGODgwMDM4OEY0RTEwMUNEOQorOjEwMkYxMDAwMDAxOUMwODIwMDE4Nzg4MDAxRTgyMDIxQUM4RTAwMDBFMgorOjEwMkYyMDAwMDAwRTJDMDIwMEMwMjAyMTBFMDAwNTk1MzFDNkZGRkZDNworOjEwMkYzMDAwMDIzQjI4MjE4Q0FEMDAwMDAwMDI1NDAwMDA0MDMwMjFFQgorOjEwMkY0MDAwQUZBRDAwMTA4RkFDMDAxMDMxOEJGRkZGQUZBQjAwMTBBNgorOjEwMkY1MDAwOEZBMjAwMTAwMTQyNDgyNUFGQTkwMDEwOEZBNzAwMTBEMgorOjEwMkY2MDAwMEEwMDA2MTNBQ0E3MDAwMDhGOEYwMDQwMTQ4RkZGQzkyMgorOjEwMkY3MDAwMDAwMDAwMDA5NzQyMDEwNDk2MEIwMDAyM0MwNTA4MDA4NworOjEwMkY4MDAwOENBNTA0NkMzMDQ5RkZGRjMxNkFGRkZGM0MxMTA4MDAzQgorOjEwMkY5MDAwOEUzMTA0NjgwMTJBMzgyMTI0RjJGRkZFMDBCMjQwMjE1QworOjEwMkZBMDAwMDAxMkZGQzMwMTEyQzgyQjAyM0ZDMDIxMDMxOTIwMjFDOAorOjEwMkZCMDAwM0MwMTA4MDBBQzI4MDQ2QzNDMDEwODAwQUMyNDA0NjgwNworOjEwMkZDMDAwMEEwMDA2NEQwMDAwMDAwMDAwQTQxMDJCMTA0MDAwMDk2QworOjEwMkZEMDAwMjQwMzAwMDEwMDA1Mjg0MDAwQTQxMDJCMDRBMDAwMDNENgorOjEwMkZFMDAwMDAwMzE4NDA1NDQwRkZGQzAwMDUyODQwMTA2MDAwMDcxMworOjEwMkZGMDAwMDAwMDAwMDAwMDg1MzAyQjE0QzAwMDAyMDAwMzE4NDJCRQorOjEwMzAwMDAwMDA4NTIwMjMxNDYwRkZGQjAwMDUyODQyMDNFMDAwMDgzMAorOjEwMzAxMDAwMDA4MDEwMjE4Rjg1MDAyQzI3QkRGRkU4MDAwNTMwMjc5OAorOjEwMzAyMDAwMkNDMzAwMDEyQ0E0MDAwMjAwODMxMDI1MTA0MDAwMDNEMworOjEwMzAzMDAwQUZCRjAwMTAyNDA1MDA3RkFGODUwMDJDMDAwNTI4MjdCNgorOjEwMzA0MDAwMzBBNUZGRkYwRTAwMDU3NDI0MDQyNkY1OEY4MzAwMzBBMQorOjEwMzA1MDAwMjQwNDAyQkQwMDQwMzAyMTAwODMzODJCMTBFMDAwMDkxOQorOjEwMzA2MDAwMjQwNTAwMDEwMDA0MjA0MDAwODMxMDJCMDQ4MDAwMDM4RAorOjEwMzA3MDAwMDAwNTI4NDA1NDQwRkZGQzAwMDQyMDQwMTBBMDAwMDgzOAorOjEwMzA4MDAwMDBDMzUwMjEwMDY0NDAyQjE1MDAwMDAyMDAwNTI4NDJCNworOjEwMzA5MDAwMDA2NDE4MjMxNEEwRkZGQjAwMDQyMDQyMDBDMzUwMjE0OQorOjEwMzBBMDAwOEZCRjAwMTAwMDBBNEMwMjMxMjIwMEZGMjdCRDAwMTgxQworOjBDMzBCMDAwQUY4QTAwMkMwM0UwMDAwOEFGODkwMDMwNUMKKzowNDMwQkMwMDBBMDAwMDJBREMKKzoxMDMwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDc0Nzg3MDM1NjIKKzoxMDMwRDAwMDJFMzAyRTMwNkEzMzAwMDAwNTAwMDAwMDAwMDAwMDBBODgKKzoxMDMwRTAwMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDMwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2OTkKKzoxMDMxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDMxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKKzoxMDMxNTAwMDAwMDAwMDAwMDAwMDEzODgwMDAwMDAwMDAwMDAwNURDRjMKKzoxMDMxNjAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwNEMKKzoxMDMxNzAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMDI0NDIzQjYwRUUKKzoxMDMxODAwMDNDMDMwODAwMjQ2MzNEMTRBQzQwMDAwMDAwNDMyMDJCQTYKKzoxMDMxOTAwMDE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDM3QkQ3RkZDNjUKKzoxMDMxQTAwMDAzQTBGMDIxM0MxMDA4MDAyNjEwMDBBODNDMUMwODAwRDkKKzoxMDMxQjAwMDI3OUMzQjYwMEUwMDAyQkEwMDAwMDAwMDAwMDAwMDBEREEKKzoxMDMxQzAwMDhGODMwMDM4M0MwODgwMDAzNTA3MDA3MDhDRTUwMDAwRDQKKzoxMDMxRDAwMDAwODMzMDI1M0MwMjkwMDAwMEMyMjAyNUFGODUwMDMwREUKKzoxMDMxRTAwMEFGNDQwMDIwOEY0OTAwMjAwNTIwRkZGRTNDMDM4MDAwRjMKKzoxMDMxRjAwMDM0NjIwMDcwOEM0NTAwMDA4Rjg2MDAzMDNDMTkwODAwNTYKKzoxMDMyMDAwMDhGMzkwMDdDM0MwRTA4MDA4RENFMDA3ODAwQTYyMDIzNkMKKzoxMDMyMTAwMDAzMjQ1ODIxMDAwMDc4MjEwMTY0NjgyQjAxQ0Y2MDIxMkMKKzoxMDMyMjAwMDAxOEQ1MDIxM0MwMTA4MDBBQzJCMDA3QzNDMDEwODAwQzIKKzoxMDMyMzAwMEFDMkEwMDc4MDNFMDAwMDgwMDAwMDAwMDBBMDAwMDQxMEEKKzoxMDMyNDAwMDI0MDQwMDAxOEY4NDAwMzgzQzA1ODAwMDM0QTIwMDAxNzIKKzoxMDMyNTAwMDAwODIxODI1MDNFMDAwMDhBRjQzMDAyMDAzRTAwMDA4QzcKKzoxMDMyNjAwMDAwMDAxMDIxMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3MTEKKzoxMDMyNzAwMDAwMDAxODIxMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyQUEKKzoxMDMyODAwMDAwNjUxODIxMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4QkEKKzoxMDMyOTAwMDAwNjAxMDIxMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwOTgKKzoxMDMyQTAwMDI0QzZGRkZGMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCNkQKKzoxMDMyQjAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4QkYKKzoxMDMyQzAwMDI0QTNGRkZGQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKKzoxMDMyRDAwMDI0MDJGRkZGMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MkEKKzoxMDMyRTAwMDAzRTAwMDA4MDAwMDAwMDAzMDhBRkZGRjkzQTgwMDEzRUQKKzoxMDMyRjAwMEE3NEEwMTQ0OTc0OTBFMTYzMEM2MDBGRjNDMDIxMDAwNTEKKzoxMDMzMDAwMEE3NDkwMTQ2QUY0NTAxNDhBMzQ2MDE1MkE3NDgwMTVBQzMKKzoxMDMzMTAwMEFGNDcwMTYwOEZBNDAwMTg4RkEzMDAxNEE3NDQwMTU4ODEKKzoxMDMzMjAwMEFGNDMwMTU0MDNFMDAwMDhBRjQyMDE3ODAzRTAwMDA4MTYKKzoxMDMzMzAwMDAwMDAwMDAwM0MwMzgwMDAzNDYyMDA3MDhDNDkwMDAwRjMKKzoxMDMzNDAwMDhGODgwMDAwMjQ4NDAwMDcyN0JERkZGODMwODRGRkY4MzEKKzoxMDMzNTAwMEFGODkwMDMwOTc0RDAwOEEzMUFDRkZGRkFGQUMwMDAwNjEKKzoxMDMzNjAwMDhGQUIwMDAwMDE2ODUwMjMyNTQ3RkZGRjMwRTYxRkZGQTkKKzoxMDMzNzAwMDAwQzQyODJCMTRBMEZGRjczQzBDODAwMDM1OEIwMDcwOTQKKzoxMDMzODAwMDhENkEwMDAwM0MwNzA4MDA4Q0U3MDA4NDNDMDYwODAwQkEKKzoxMDMzOTAwMDhDQzYwMDgwMDAwODEwODIwMTQ5MTgyMzAwMDI3ODgwNDIKKzoxMDMzQTAwMDAwRTM3MDIxMDAwMDIwMjEwMUMzQzgyQjAwQzRDMDIxMEMKKzoxMDMzQjAwMDAxRkE0MDIxMDMxOTQ4MjEyNTAyNDAwMDI3QkQwMDA4RDkKKzoxMDMzQzAwMDNDMDEwODAwQUMyRTAwODQzQzAxMDgwMEFDMjkwMDgwQzAKKzoxMDMzRDAwMDAzRTAwMDA4MDAwMDAwMDA4RjgyMDAwMDI0ODYwMDA3NDAKKzoxMDMzRTAwMDMwQzVGRkY4MDBBMjE4MjEzMDY0MUZGRjAzRTAwMDA4NzkKKzoxMDMzRjAwMEFGODQwMDAwOEY4NzAwMzg4RjhBMDA0MDI3QkRGRkI4NTgKKzoxMDM0MDAwMDhGODYwMDQ0QUZCNjAwNDBBRkJGMDA0NEFGQjUwMDNDNkMKKzoxMDM0MTAwMEFGQjQwMDM4QUZCMzAwMzRBRkIyMDAzMEFGQjEwMDJDNUUKKzoxMDM0MjAwMEFGQjAwMDI4OEY0NTAxMDQ4RDQ5MDBBQ0FGNDcwMDgwNDQKKzoxMDM0MzAwMDhDQzgwMDIwMDBBOTM4MjMwMDAwQjAyMUFGNDgwRTEwMkUKKzoxMDM0NDAwMDhGNDQwRTEwMDAwMDQ4MjFBRjQ0MEUxNDhDQzIwMDI0OUIKKzoxMDM0NTAwMEFGNDIwRTE4OEY0MzBFMThBRjQzMEUxQzEwRTAwMTI1MkIKKzoxMDM0NjAwMDJEMjMwMDAxOTM2QjAwMDgxMTYwMDBENDAwMDAwMDAwQzAKKzoxMDM0NzAwMDk3NkUwMDEwMzFDREZGRkYwMEVENjAyQjE1ODAwMENGNUYKKzoxMDM0ODAwMDAwMDAwMDAwOTc3MDAwMTAzMjBGRkZGRkFGNEYwRTAwREEKKzoxMDM0OTAwMDhGNTIwMDAwMzI1MTAwMDgxMjIwRkZGRDAwMDAwMDAwOTIKKzoxMDM0QTAwMDk3NTQwRTA4OEY0NjBFMDQzMjg1RkZGRjMwQjMwMDAxOUIKKzoxMDM0QjAwMDEyNjAwMTMyMDAwMDAwMDAwMDAwMDAwRDMwQjhBMDQwOTIKKzoxMDM0QzAwMDI0MTUwMDQwMTMxNTAwQzAzMEE5QTAwMDExMjAwMTJEQzMKKzoxMDM0RDAwMDAwMDAwMDAwOTM3RjAwMDgxM0UwMDAwODAwMDAwMDAwRDcKKzoxMDM0RTAwMDk3NjMwMDEwMzA2QkZGRkYwMENCNDAyQjExMDAwMDAzRUYKKzoxMDM0RjAwMDMwQUMwMDQwMTE4MDAxMjMwMDAwMDAwMEE3ODUwMDNDOTMKKzoxMDM1MDAwMEFGODYwMDM0OTM2NjAwMDgwMEUwMjgyMUFGQTcwMDIwQjIKKzoxMDM1MTAwMDE0QzAwMTI0MjdCMzAwMjBBRjYwMDAwQzk3ODIwMDNDNDgKKzoxMDM1MjAwMDMwNDc0MDAwMTRFMDAwMDIyNDAzMDAxNjI0MDMwMDBFN0MKKzoxMDM1MzAwMDI0MTk0MDA3QTM2MzAwMEFBRjc5MDAxNDkzOEEwMDNFNjAKKzoxMDM1NDAwMDhGNzQwMDE0MzE1ODAwMDcwMDE4QUE0MDAyOTU5MDI1ODYKKzoxMDM1NTAwMEFGNzIwMDE0OTc4NDAwM0M4RjcwMDAxNDMwOTEwMDEwRkIKKzoxMDM1NjAwMDAyMTE3ODI1QUY2RjAwMTQ5NzhFMDAzQzMxQ0QwMDA4MTIKKzoxMDM1NzAwMDExQTAwMTQ3MDAwMDI4MjE4RjY3MDAxNDNDMDIxMDAwQjEKKzoxMDM1ODAwMDNDMEM4MTAwMDBFMjI4MjVBRjY1MDAxNDk3NDYwRTBBMjYKKzoxMDM1OTAwMDI0MDgwMDBFMzQwNUZGRkMzMEMzRkZGRjAwNkM1ODI1RTMKKzoxMDM1QTAwMEFGNkIwMDA0QTM2ODAwMDI5MzdGMDAwQTI3RTkwMDA0QzAKKzoxMDM1QjAwMEEzNjkwMDBBOTc4NjAwM0M5MzYzMDAwQTMwQ0MxRjAwODEKKzoxMDM1QzAwMDAwMEM1OTgzMDE2MzQwMjEyNTFGMDAyOEEzN0YwMDA5QjcKKzoxMDM1RDAwMDk3NDkwRTBDQTc2OTAwMTA5Mzc5MDAwOTI3MkEwMDAyNjkKKzoxMDM1RTAwMDMxNTgwMDA3MDAxOEE4MjMzMkIxMDAwN0EzNzEwMDBCNUYKKzoxMDM1RjAwMDkzNzQwMDA5OTc2NDAwMTA4RjkxMDAzNDk3OEYwMDNDRkEKKzoxMDM2MDAwMDMyOTIwMEZGMDI0NDgwMjEwMjA1NzAyMTMxRUQwMDQwMUEKKzoxMDM2MTAwMDExQTAwMDA1MzFDNEZGRkYwMDkxMjgyQjNDMTI4MDAwNEYKKzoxMDM2MjAwMDEwQTAwMDE0MDAwMEEwMjEwMjI0MzgyQjE0RTAwMTFCN0MKKzoxMDM2MzAwMDhGQTUwMDIwOEY0RDBFMTRBRjREMEUxMDhGNDIwRTFDMjMKKzoxMDM2NDAwMEFGNDIwRTE4QUY0NDBFMDA4RjRGMDAwMDMxRUUwMDA4NUQKKzoxMDM2NTAwMDExQzBGRkZEMDAwMDAwMDA5NzU0MEUwODAwODA4ODIxNzMKKzoxMDM2NjAwMDAwMDA5MDIxQTc5NDAwM0M4RjUwMEUwNDI0MTQwMDAxMDgKKzoxMDM2NzAwMEFGOTAwMDM0OTc2NDAwMTAzMDk1RkZGRjhFNjgwMDAwMTMKKzoxMDM2ODAwMDAxMTFGODIzMTdFMDAwMDlBRTdGMDAwMDhGNjUwMDE0RDgKKzoxMDM2OTAwMDhGOEIwMDQ0MzRBNjAwNDBBRjY2MDAxNDhGNEMwRTEwOTAKKzoxMDM2QTAwMEFENkMwMDIwOEY0MzBFMThBRDYzMDAyNDkzNjcwMDA4QjMKKzoxMDM2QjAwMDE0RTAwMEQyMDAwMDAwMDAwRTAwMDA5RTI0MDQwMDEwNjAKKzoxMDM2QzAwMDhGODkwMDQ4M0MwODMyMDAwMDQwMjgyMTMxMjYwMEZGNDUKKzoxMDM2RDAwMDAwMDZGQzAwMDNFODUwMjUyNTM5MDAwMUFGOTkwMDQ4OTkKKzoxMDM2RTAwMEFDNEEwMDAwOTM3ODAwMDk5MzcwMDAwQTMzMDQwMEZGOEQKKzoxMDM2RjAwMDAwMDQ3NDAwMzIwRjAwRkYwMUNGNjgyNUFDNEQwMDA0QjgKKzoxMDM3MDAwMDhGODIwMDQ4MDY0MDAwRUFBQ0EyMDAwOEFDQTAwMDBDODIKKzoxMDM3MTAwMDk3ODMwMDNDMzA2QjAwMDgxNTYwMDAwMjI2MjgwMDA2RTUKKzoxMDM3MjAwMDI2MjgwMDAyOTc0RTBFMTQ4RjQ1MEUxQzhGNjcwMDA0NEEKKzoxMDM3MzAwMDkzNkQwMDAyMzFDNEZGRkYzMUEyMDBGRkFGQTIwMDEwNjEKKzoxMDM3NDAwMDhGNkMwMDE0QUZBODAwMTgwRTAwMDA4QkFGQUMwMDE0RjMKKzoxMDM3NTAwMDI0MDQwMDEwMEUwMDAwQzcwMDAwMDAwMDhFNzIwMDAwNUMKKzoxMDM3NjAwMDE2NDAwMDA1MDAwMDAwMDA4RjY0MDAxNDI0MDVGRkJGMTAKKzoxMDM3NzAwMDAwODU5ODI0QUY3MzAwMTQ4Rjc5MDAwQzAzMzUzODIxMkQKKzoxMDM3ODAwMEFGNjcwMDBDOTM3NTAwMDgxNkEwMDAwODAwMDAwMDAwNDkKKzoxMDM3OTAwMDEyODAwMDA2MDAwMDAwMDA4RjdGMDAxNDNDMEJFRkZGM0EKKzoxMDM3QTAwMDM1NjhGRkZFMDNFODQ4MjRBRjY5MDAxNEEzNzQwMDA4REQKKzoxMDM3QjAwMDhGQTUwMDIwMEEwMDAyNDYwMjIwMjAyMUFGNDcwRTAwRkMKKzoxMDM3QzAwMDBBMDAwMEY1MDAwMDAwMDA4RjU5MDE3ODA3MjBGRkZFNzUKKzoxMDM3RDAwMDI0MUYwODAwOEY4NDAwMDBBRjVGMDE3ODk3NEIwMDhBOTgKKzoxMDM3RTAwMDMxNkFGRkZGMDE0NDQ4MjMyNTI4RkZGRjMxMDIxRkZGRjQKKzoxMDM3RjAwMDJDNDMwMDA4MTQ2MEZGRjkwMDAwMDAwMDhGOEUwMDQ4ODEKKzoxMDM4MDAwMDhGOEQwMDM4MDBDMDQ4MjEwMzQ0MjAyMTI1QzYwMDAxQzcKKzoxMDM4MTAwMDI0MEMwRjAwQUY4NjAwNDgwMEU5MzgyMzI0ODY0MDAwQkUKKzoxMDM4MjAwMDMxQ0EwMEZGMTFBQzAwMDUyNDA4MDAwMTkzOTEwMDNFNEQKKzoxMDM4MzAwMDMyMzAwMDA3MDAxMDdBNDAzNUU4MDAwMTAwMEFBQzAwODEKKzoxMDM4NDAwMDNDMTgwMTAwMDJCOEEwMjVBQzk0NDAwMDhGOTMwMDQ4QkEKKzoxMDM4NTAwMDMwQjIwMDM2MzBBNDAwMDhBQ0QzMDAwNDEwODAwMDk3Q0EKKzoxMDM4NjAwMDAxMTIzMDI1OTc0RTBFMEE4RjhEMDAwMDNDMDI4MTAwMTgKKzoxMDM4NzAwMDMxQ0NGRkZGMjVBQjAwMDgwMTgyNDAyNTNDMDMxMDAwM0UKKzoxMDM4ODAwMDMxNjUxRkZGMjUzOTAwMDYyNDFGMDAwRUFGNDgwMTYwNzcKKzoxMDM4OTAwMDAwQzMzMDI1QTc1RjAxNUFBRjg1MDAwMEE3NTkwMTU4MjIKKzoxMDM4QTAwMDE0RTAwMDBBOEY5MzAwMzgyNDEyMEYwMDUyNzIwMDAyQjUKKzoxMDM4QjAwMDI0MTYwMDAxMzRDNjAwNDA4RjU4MEUxMDhGOTQwMDQ0MjcKKzoxMDM4QzAwMEFFOTgwMDIwOEY1NTBFMThBRTk1MDAyNDhGNDUwRTE0MkIKKzoxMDM4RDAwMEFGNDUwMTQ0OEY1OTBFMUNBRjU5MDE0OEEzNEEwMTUyMEMKKzoxMDM4RTAwMDNDMEExMDAwQUY0NjAxNTRBRjRBMDE3ODE0RTBGRURERjcKKzoxMDM4RjAwMDJEMjMwMDAxMDA3NkEwMjUxMjgwMDAxNzhGQkYwMDQ0MDEKKzoxMDM5MDAwMDhGODQwMDM4MjQxNjBGMDAxMDk2MDA4NDAwMDAwMDAwRjkKKzoxMDM5MTAwMDhGNDUwMTc4MDRBMEZGRkUyNDE1MEYwMDEwOTUwMDZFNUUKKzoxMDM5MjAwMDAwMDAwMDAwOEY0NzBFMTQyNDAyMDI0MDNDMUYxMDAwQ0MKKzoxMDM5MzAwMEFGNDcwMTQ0OEY0NDBFMUNBRjQ0MDE0OEEzNDAwMTUyREQKKzoxMDM5NDAwMEE3NDAwMTVBQUY0MDAxNjBBNzQwMDE1OEFGNDIwMTU0NUYKKzoxMDM5NTAwMEFGNUYwMTc4OEZCRjAwNDQ4RkI2MDA0MDhGQjUwMDNDNDkKKzoxMDM5NjAwMDhGQjQwMDM4OEZCMzAwMzQ4RkIyMDAzMDhGQjEwMDJDODkKKzoxMDM5NzAwMDhGQjAwMDI4MDNFMDAwMDgyN0JEMDA0ODE0QzBGRUQwMjcKKzoxMDM5ODAwMDMwQjhBMDQwOEY0MjBFMTQ4Rjg0MDA0NDAwMDA0ODIxQkMKKzoxMDM5OTAwMEFDODIwMDIwOEY1MTBFMUNBQzkxMDAyNDBBMDAwMjBFNTQKKzoxMDM5QTAwMDJEMjMwMDAxOEY5MTAwMzQ5NzhBMDAzQzNDMTI4MDAwNDcKKzoxMDM5QjAwMDAyMjBBODIxMzE1ODAwNDAxNzAwRkYzMDAwMDBBMDIxNEMKKzoxMDM5QzAwMDk3NjkwMDEwOEY5MjAwMzQzMTM5RkZGRjEzMzIwMDM1QjAKKzoxMDM5RDAwMDAwMDAyMDIxMDA4MDQ4MjExNDgwRkVBMDAwQTAzODIxOTIKKzoxMDM5RTAwMDhGNDIwRTE0OEY4NDAwNDRBQzgyMDAyMDhGNTEwRTFDMzUKKzoxMDM5RjAwMEFDOTEwMDI0MEEwMDAyMEUyRDIzMDAwMTkzNkEwMDA5RjUKKzoxMDNBMDAwMDkzNzgwMDBCMzE1MDAwRkYzMzBGMDBGRjAyMEY3MDIxM0QKKzoxMDNBMTAwMDI1QzIwMDBBMzA1MEZGRkYwRTAwMDA5RTAyMDAyMDIxNDgKKzoxMDNBMjAwMDhGODYwMDQ4M0MxRjQxMDAyNENEMDAwMUFGOEQwMDQ4MjcKKzoxMDNBMzAwMDkzNkMwMDA5MzBDNjAwRkYwMDA2NDQwMDMxODMwMEZGOEMKKzoxMDNBNDAwMDI0NkIwMDAyMDEwQjQ4MjUwMTNGQzgyNUFDNTkwMDAwM0EKKzoxMDNBNTAwMDhGNjcwMDBDOTc0NDBFMTQwMEYyMjgyNUFDNDUwMDA0MzMKKzoxMDNBNjAwMDhGNDUwRTFDOEY2NzAwMDQ5MzZBMDAwMjMwODRGRkZGQUQKKzoxMDNBNzAwMDMxNTgwMEZGQUZCODAwMTA4RjZGMDAxNEFGQjEwMDE4QkQKKzoxMDNBODAwMDBFMDAwMDhCQUZBRjAwMTQwQTAwMDFBNjAyMDAyMDIxMzcKKzoxMDNBOTAwMEFGNjAwMDA0MEEwMDAxM0VBMzYwMDAwMjBBMDAwMjQ2NzMKKzoxMDNBQTAwMDAwMDAyMDIxMDAwMDkwMjEwQTAwMDE3MDI0MTQwMDAxNzAKKzoxMDNBQjAwMDNDMTI4MDAwMEEwMDAxOTVBQ0IyMDAwQzhGOTEwMDAwMEUKKzoxMDNBQzAwMDI1MjQwMDAyQTc0NDAxNTgyNjMwMDAwODMyMEYxRkZGQUEKKzoxMDNBRDAwMDBBMDAwMUY5QUY4RjAwMDBBRjQwMDE0QzExMjAwMDJDMEIKKzoxMDNBRTAwMDAwMDAwMDAwOEY1OTBFMTBBRjU5MDE0NDhGNDMwRTE4OEIKKzoxMDNBRjAwMDI0MDIwMDQwM0MxRjEwMDBBRjQzMDE0OEEzNDAwMTUyODQKKzoxMDNCMDAwMEE3NDAwMTVBQUY0MDAxNjBBNzQwMDE1OEFGNDIwMTU0OUQKKzoxMDNCMTAwMEFGNUYwMTc4MEEwMDAyMjc4RkJGMDA0NDExMjAwMDA2MjIKKzoxMDNCMjAwMDAwMDAwMDAwOTc0NjBFMDgzMENDMDA0MDE1ODAwMDAyQ0YKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwMEQ4RjREMDE3ODA1QTBGRkZFODEKKzoxMDNCNDAwMDAwMDAwMDAwOTc1MzBFMTAzQzEyMDUwMDI0MEUyMDAwQzgKKzoxMDNCNTAwMDMyNkFGRkZGMDE1MkMwMjVBRjU4MDE0QzhGNEYwRTE0M0YKKzoxMDNCNjAwMDNDMDIxMDAwQUY0RjAxNDQ4RjUwMEUxQ0FGNTAwMTQ4NzMKKzoxMDNCNzAwMEEzNDAwMTUyOEY4NDAwMzhBNzQwMDE1QUFGNDAwMTYwMzIKKzoxMDNCODAwMEE3NDAwMTU4QUY0RTAxNTQwQTAwMDIxNUFGNDIwMTc4MTgKKzoxMDNCOTAwMDhGNDkwRTE0QUY0OTAxNDQ4RjQzMEUxQzBBMDAwMjhFNTgKKzoxMDNCQTAwMDI0MDIwMDQwM0MwRTIwRkYyN0JERkZFMDNDMUE4MDAwQUQKKzoxMDNCQjAwMDNDMEY4MDA4MzVDREZGRkRBRkJGMDAxQ0FGQjIwMDE4MzEKKzoxMDNCQzAwMEFGQjEwMDE0QUZCMDAwMTBBRjhGMDA0MEFGNEQwRTAwOEEKKzoxMDNCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDNCRTAwMDAwMDAwMDAwM0MwQzAwRkYzNThCRkZGREFGNEIwRTAwQ0EKKzoxMDNCRjAwMDNDMDY2MDA0OENDOTUwMDAyNDBBRkY3RjNDMTE2MDAwMjEKKzoxMDNDMDAwMDAxMkE0MDI0MzUwNzM4MENBQ0M3NTAwMDhFMjQwNDM4RjQKKzoxMDNDMTAwMDI0MDUwMDA5QUY0NTAwMDgzMDgzRkZGRjM4NjIyRjcxOEIKKzoxMDNDMjAwMDI0NTBDMEIzQUY4MDAwNDgwRTAwMDA2OEFGODAwMDAwOTEKKzoxMDNDMzAwMDUyMDAwMDAxQUUyMDQ0MkMwRTAwMDQzNTNDMTE4MDAwREYKKzoxMDNDNDAwMDBFMDAwRUE4MzYzMDAwNzA4RjhBMDA0MDNDMTIwODAwMkIKKzoxMDNDNTAwMDI2NTIzQkM4MDIwMDg4MjE4RTA4MDAwMDhGNUYwMDAwQkEKKzoxMDNDNjAwMDNCRjkwMDAxMzMzODAwMDExMzAwMDAxN0FGODgwMDMwMjIKKzoxMDNDNzAwMDAyMjA0ODIxOEQyNzAwMDAzQzBGMDgwMDhERUYwMDZDQ0EKKzoxMDNDODAwMDNDMEMwODAwOEQ4QzAwNjgwMEU4QzAyMzAxRjgyODIxNTYKKzoxMDNDOTAwMDAwMDA2ODIxMDBCODMwMkIwMThENTgyMTAxNjY0MDIxQjkKKzoxMDNDQTAwMDNDMDEwODAwQUMyNTAwNkMzQzAxMDgwMEFDMjgwMDY4MTEKKzoxMDNDQjAwMDhGNDQwMDAwMzg4MzAwMDEzMDYyMDAwMTE0NDBGRkVEQTIKKzoxMDNDQzAwMDAwRTA0MDIxQUY4NzAwMzA4RTBDMDAwMDNDMDUwODAwNkEKKzoxMDNDRDAwMDhDQTUwMDZDM0MwNDA4MDA4Qzg0MDA2ODAxODgzMDIzQUIKKzoxMDNDRTAwMDAwQTYzODIxMDAwMDEwMjEwMEU2NDAyQjAwODIxODIxOTgKKzoxMDNDRjAwMDAwNjhGODIxM0MwMTA4MDBBQzI3MDA2QzNDMDEwODAwN0EKKzoxMDNEMDAwMEFDM0YwMDY4OEY0OTAxMDAyNTU5MDA4OEFGOTkwMDQ0RjUKKzoxMDNEMTAwMEFGODkwMDM4QUY0OTAwMjA4RTA3MDAwMEFGODcwMDMwMjAKKzoxMDNEMjAwMDhGNEQwMTc4MDVBMEZGRkUwMDAwMDAwMDhFMDYwMDAwMDgKKzoxMDNEMzAwMDNDMEIwODAwOEQ2QjAwNzQzQzA0MDgwMDhDODQwMDcwMDAKKzoxMDNENDAwMDAwQzcyODIzMDE2NUY4MjEwMDAwMTAyMTAzRTU0MDJCNUUKKzoxMDNENTAwMDAwODIzODIxMDBFOEM4MjEyNDA5MDgwMDNDMDEwODAwM0QKKzoxMDNENjAwMEFDM0YwMDc0M0MwMTA4MDBBQzM5MDA3MEFGNDkwMTc4RTkKKzoxMDNENzAwMDkzNTgwMTA4QTM5ODAwM0U5MzhGMDAzRTMxRUUwMDAxNTYKKzoxMDNEODAwMDE1QzAwMDE1OEY4MzAwMzgyNDBFMEQwMDEwNkUwMDE5MjkKKzoxMDNEOTAwMDI0MEYwRjAwMTA2RjAwMUQwMDAwMDAwMDkxNTkwMDAwNUIKKzoxMDNEQTAwMDI0MTgwMDUwMzMyOTAwRkYxMTM4MDAwNDNDMUY0MDAwNDQKKzoxMDNEQjAwMEFGNUYwMTM4MEEwMDAyRTcwMDAwMDAwMDBFMDAwOEVFQzUKKzoxMDNEQzAwMDAwMDAwMDAwOEY4QTAwNDAzQzFGNDAwMEFGNUYwMTM4QjgKKzoxMDNERDAwMDBBMDAwMkU3MDAwMDAwMDA5MzhEMDAzRTMxQUMwMDA2QUYKKzoxMDNERTAwMDAwMEM1MTAwMEUwMDAwQ0UwMTUyRDgyMTBBMDAwMzQzRkUKKzoxMDNERjAwMDhGOEEwMDQwM0MxQjA4MDAyNzdCM0M0ODBFMDAwMENFMDkKKzoxMDNFMDAwMDAwMDAwMDAwMEEwMDAzNDM4RjhBMDA0MDNDMUIwODAwQUEKKzoxMDNFMTAwMDI3N0IzQzY4MEUwMDAwQ0UwMDAwMDAwMDBBMDAwMzQzMzAKKzoxMDNFMjAwMDhGOEEwMDQwOTBBQTAwMDE4RkFCMDAxMDhDQUMwMDEwNkMKKzoxMDNFMzAwMDNDMDMwMEZGOEQ2ODAwMDRBRDZDMDAyMDhDQUQwMDE0QzUKKzoxMDNFNDAwMDAwRTA2MDIxMzQ2MkZGRkZBRDZEMDAyNDhDQTcwMDE4RjQKKzoxMDNFNTAwMDNDMDlGRjAwMDEwOUMwMjRBRDY3MDAyODhDQUUwMDFDOUUKKzoxMDNFNjAwMDAxODJDODI0MDMxOTc4MjVBRDZGMDAwNEFENkUwMDJDQzMKKzoxMDNFNzAwMDhDQUQwMDA4MzE0QTAwRkZBRDZEMDAxQzk0QTkwMDAyMTIKKzoxMDNFODAwMDMxMjhGRkZGQUQ2ODAwMTA5MEE3MDAwMEE1NjAwMDAyNzgKKzoxMDNFOTAwMEExNjAwMDA0QTE2NzAwMDA5MEEzMDAwMjMwNjIwMEZGNEYKKzoxMDNFQTAwMDAwMDIxOTgyMTA2MDAwMDUyNDA1MDAwMTEwNjUwMDBFNTMKKzoxMDNFQjAwMDAwMDAwMDAwMDNFMDAwMDhBMTZBMDAwMThDRDgwMDI4N0YKKzoxMDNFQzAwMDM1NEEwMDgwQUQ3ODAwMTg4Q0NGMDAxNEFENkYwMDE0MTcKKzoxMDNFRDAwMDhDQ0UwMDMwQUQ2RTAwMDg4Q0M0MDAyQ0ExNkEwMDAxQUQKKzoxMDNFRTAwMDAzRTAwMDA4QUQ2NDAwMEM4Q0NEMDAxQ0FENkQwMDE4MjMKKzoxMDNFRjAwMDhDQzkwMDE0QUQ2OTAwMTQ4Q0M4MDAyNEFENjgwMDA4OUEKKzoxMDNGMDAwMDhDQzcwMDIwQUQ2NzAwMEM4Q0MyMDAxNDhDODMwMDY0NDkKKzoxMDNGMTAwMDAwNDNDODJCMTMyMDAwMDcwMDAwMDAwMDhDQzIwMDE0Q0YKKzoxMDNGMjAwMDE0NENGRkU0MDAwMDAwMDAzNTRBMDA4MDAzRTAwMDA4NjQKKzoxMDNGMzAwMEExNkEwMDAxOEM4MjAwNjQwQTAwMDM5OTAwMDAwMDAwNUQKKzoxMDNGNDAwMDkwQUEwMDAwMjdCREZGRjg4RkE5MDAxQ0EzQUEwMDAwQkIKKzoxMDNGNTAwMDhGQUUwMDAwM0MwRkZGODA4RkE4MDAxODM1RTJGRkZGRjYKKzoxMDNGNjAwMDhDQ0QwMDJDMDFDMjYwMjRBRkFDMDAwMEExMjAwMDA0NjUKKzoxMDNGNzAwMDAwRTA2MDIxQTdBMDAwMDI4RkI4MDAwMDhEMjcwMDA0OTgKKzoxMDNGODAwMDAxODgxODIxMDBBMDU4MjEwMEMwNTAyMTAwNkQyODI2NkEKKzoxMDNGOTAwMDNDMDZGRjdGM0MwRjAwRkYyQ0FEMDAwMTM1RUVGRkZGMUMKKzoxMDNGQTAwMDM0RDlGRkZGM0MwMkZGMDAwMzE5MzAyNDAwMEQxREMwNkYKKzoxMDNGQjAwMDAxMEVDODI0MDBFMkMwMjQwMEMzNzAyNTAzMTk3ODI1MkYKKzoxMDNGQzAwMEFEMkUwMDAwQUQyRjAwMDQ4RDQ1MDAyNEFGQUUwMDAwRTMKKzoxMDNGRDAwMEFEMjUwMDA4OEQ0RDAwMjAyNDA1RkZGRkFEMkQwMDBDMDAKKzoxMDNGRTAwMDk1NjgwMDAyMzEwN0ZGRkZBRDI3MDAxMDkxNjYwMDE4QTkKKzoxMDNGRjAwMDMwQzIwMEZGMDAwMjE5QzI1MDYwMDAwMThENDUwMDM0M0MKKzoxMDQwMDAwMEFEMjUwMDE0OEQ2NzAwMDgyN0JEMDAwOEFEMjcwMDFDRjIKKzoxMDQwMTAwMDhDOEIwMENDQUQyQzAwMjhBRDIwMDAyQ0FEMkIwMDI0QzcKKzoxMDQwMjAwMEFEMjAwMDE4MDNFMDAwMDhBRDIwMDAyMDI3QkRGRkUwMTAKKzoxMDQwMzAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDOUEKKzoxMDQwNDAwMDkwOTgwMDAwMDBDMDg4MjEzQzBEMDBGRjMzMEYwMDdGRDYKKzoxMDQwNTAwMEEwQ0YwMDAwOTA4RTAwMDEzNUFDRkZGRjNDMEFGRjAwQUUKKzoxMDQwNjAwMEEwQ0UwMDAxOTRBNjAwMUVBMjIwMDAwNDhDQUIwMDE0NzgKKzoxMDQwNzAwMDhFMjkwMDA0MDBBMDgwMjEwMTZDMjgyNDAxMkE0MDI0RkMKKzoxMDQwODAwMDAwODA5MDIxMDEwNTIwMjVBNjI2MDAwMkFFMjQwMDA0MTAKKzoxMDQwOTAwMDI2MDUwMDIwMjYyNDAwMDgwRTAwMDA3NjI0MDYwMDAyRDMKKzoxMDQwQTAwMDkyNDcwMDAwMjYwNTAwMjgyNjI0MDAxNDAwMDcxRTAwNjEKKzoxMDQwQjAwMDAwMDMxNjAzMjQwNjAwMDQwNDQwMDAwMzI0MDNGRkZGNEEKKzoxMDQwQzAwMDk2NTkwMDAyMzMyM0ZGRkYwRTAwMDA3NkFFMjMwMDEwNDYKKzoxMDQwRDAwMDI2MjQwMDI0OEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0NUIKKzoxMDQwRTAwMDhGQjAwMDEwMjQwNTAwMDMwMDAwMzAyMTBBMDAwMDgwN0EKKzoxMDQwRjAwMDI3QkQwMDIwMjdCREZGRDhBRkIxMDAxQ0FGQjAwMDE4MEUKKzoxMDQxMDAwMEFGQkYwMDIwOTBBODAwMDAyNDAyMDAwMThGQjAwMDNDNDcKKzoxMDQxMTAwMDMxMDMwMDNGMDA4MDg4MjExMDYyMDAxNDhGQUEwMDM4MEMKKzoxMDQxMjAwMDI0MEIwMDA1NTA2QjAwMTZBRkFBMDAxMDAwQTAyMDIxNDAKKzoxMDQxMzAwMDAwQzAyODIxMEUwMDAzREMwMjAwMzAyMTkyMjQwMEJDQzQKKzoxMDQxNDAwMDMwODMwMDAyMTA2MDAwMDMyNjA2MDAzMEFDQzAwMDAwN0YKKzoxMDQxNTAwMDI0QzYwMDA0OEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4NTAKKzoxMDQxNjAwMDAwQzAxMDIxMDNFMDAwMDgyN0JEMDAyODAxNDAzODIxQ0QKKzoxMDQxNzAwMDBFMDAwMzVBQUZCMDAwMTAwQTAwMDQyMDAwMDAwMDAwMzcKKzoxMDQxODAwMDBFMDAwM0ExQUZCMDAwMTQwQTAwMDQyMDAwMDAwMDAwREMKKzoxMDQxOTAwMDNDMDIwMDBBMDM0MjE4MjEzQzA0MDgwMDI0ODQzQ0FDODEKKzoxMDQxQTAwMDI0MDUwMDFBMDAwMDMwMjEwQTAwMDA4MEFGODMwMDU0NkIKKzoxMDQxQjAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ4MDAwMDAwQTA1ODIxNEQKKzoxMDQxQzAwMDAwQzA0ODIxMzA4QTAwRkZBRjg4MDAzMDhGNDQwMTc4NUEKKzoxMDQxRDAwMDA0ODBGRkZFM0MwQzgwMDAzNTg2MDA3MDhDQzUwMDAwMUEKKzoxMDQxRTAwMDNDMDMwODAwOEM2MzAwNzQzQzE4MDgwMDhGMTgwMDcwQjIKKzoxMDQxRjAwMDAwQTgyMDIzMDA2NDY4MjEwMDAwQzgyMTAxQTQ3ODJCQjYKKzoxMDQyMDAwMDAzMTk3MDIxMDFDRjYwMjEzQzAxMDgwMEFDMkQwMDc0MUUKKzoxMDQyMTAwMDNDMDEwODAwQUMyQzAwNzA4RjQ4MEUxNEFGNDgwMTQ0REMKKzoxMDQyMjAwMEFGNDcwMTRDQTM0QTAxNTJBNzRCMDE1ODkzNDYwMTA4REUKKzoxMDQyMzAwMDMwQzUwMDA4NTRBMDAwMDEzNTI5MTAwMDkzNEIwOTAwMzcKKzoxMDQyNDAwMDI0MDcwMDUwMzE2QTAwRkYxMTQ3MDAwNzAwMDAwMDAwRkEKKzoxMDQyNTAwMDhGNDUwRTFDQUY0NTAxNDhBRjQ5MDE1NDNDMDkxMDAwODEKKzoxMDQyNjAwMDAzRTAwMDA4QUY0OTAxNzg5MzREMDEwODMxQTgwMDA4MjgKKzoxMDQyNzAwMDExMDAwMDEwMDAwMDAwMDA5MzRGMDEwODMxRUUwMDEwMDMKKzoxMDQyODAwMDUxQzAwMDAxMzUyOTAwMDgzQzA0MDgwMDkwODQzRDEwMEQKKzoxMDQyOTAwMEEzNDQwMTUwOEY0MzA5QTRBRjQzMDE0ODhGNDIwOUEwQjIKKzoxMDQyQTAwMEFGNDIwMTQ0QUY0OTAxNTQzQzA5MTAwMDAzRTAwMDA4NEIKKzoxMDQyQjAwMEFGNDkwMTc4M0MxOTA4MDA4RjM5M0NDQzMzMzgwMDA4RUQKKzoxMDQyQzAwMDU3MDBGRkYxMzUyOTAwMDgwQTAwMDQ3MzAwMDAwMDAwQzAKKzoxMDQyRDAwMDI0MDcwMDQwQUY0NzA4MTRBRjQwMDgxMDhGNDIwOTQ0M0MKKzoxMDQyRTAwMDhGNDMwOTUwOEY0NDA5NTQ4RjQ1MDk1QzhGNDYwOTRDMTAKKzoxMDQyRjAwMEFGODIwMDY0QUY4MzAwNTBBRjg0MDA0Q0FGODUwMDVDOTgKKzoxMDQzMDAwMDAzRTAwMDA4QUY4NjAwNjA5MzQ2MDEwOTMwQzUwMDdGRDYKKzoxMDQzMTAwMDAwMDUxOEMwMDAwNTIxNDAwMDgzMTAyMTAzRTAwMDA4QkIKKzoxMDQzMjAwMDI0NDIwMDg4M0MwQTA4MDA5MTRBM0NEMTNDMDkwODAwMUMKKzoxMDQzMzAwMDk1MjkzQ0NBM0MwNTExMDAwMDBBM0MwMDI1MjgwMDAyRDIKKzoxMDQzNDAwMDAwRTgzMDI1MDBDNTE4MjUyNDgyMDAwOEFDODMwMDAwNTEKKzoxMDQzNTAwMDAzRTAwMDA4QUM4MDAwMDQ4RjRBMDAyQzk3NEUwOTA4NDcKKzoxMDQzNjAwMDNDMEYwMDBFMDM0RjM4MjEzMUNERkZGRjAwMEQ0MUMwM0YKKzoxMDQzNzAwMEFGNDgwMDJDOTc0MzA5MDg5NEVDMDAxQTAwODA0MDIxQjQKKzoxMDQzODAwMDI0MDIwMDAxMzE4QkZGRkZBQzhCMDAwMDhDRTkwMDFDODQKKzoxMDQzOTAwMDAwQTA1ODIxMDBDMDYwMjFBQzg5MDAwNDhDRTQwMDIwRkEKKzoxMDQzQTAwMEFEMDQwMDA4OTBFMzAwMTkzMDYzMDAwMzEwNjIwMDQwODAKKzoxMDQzQjAwMDAwMDAwMDAwMjg2NTAwMDIxNEEwMDA3MzI0MDYwMDAyMUIKKzoxMDQzQzAwMDEwNjYwMDRFMDAwMDAwMDAyNDE4MDAwMzEwNzgwMDU3MEIKKzoxMDQzRDAwMDAwMDAwMDAwM0MwOTA4MDA5NTI5M0NDMDkzNDUwOTM0QzEKKzoxMDQzRTAwMDkzNDYwOTIxM0MwRTA4MDA5NUNFM0NDNjMwQTIwMEZGNDIKKzoxMDQzRjAwMDAwMDJDODgyOTRFNTAwMkEzMEM0MDBGRjk3ODcwMDU4NjUKKzoxMDQ0MDAwMDAwMTlDNjAwMDAwNDFDMDAzMTJGRkZGRjAzMDMxMDI1MTQKKzoxMDQ0MTAwMDAxQ0Y2ODIxMDA0REM4MjUwMEE3MjAyMTNDMDY0MDAwOUYKKzoxMDQ0MjAwMDAzMjZDMDI1MDAwNDRDMDBBRDA5MDAwNEFEMTgwMDAwQUYKKzoxMDQ0MzAwMDkzNEYwOTIwM0MwMzAwMDYyNTA5MDAxNDAwMEY3NjAwNjUKKzoxMDQ0NDAwMDAxQzM2ODI1QUQwRDAwMDg4RjQyMDkyQzI0RTUwMDAxNDkKKzoxMDQ0NTAwMDMwQTY3RkZGQUQwMjAwMEM4RjU5MDkzMDI1MDIwMDI4REQKKzoxMDQ0NjAwMEE3ODYwMDU4QUQxOTAwMTA4RjQ0MDkzOEFEMDQwMDE0MTgKKzoxMDQ0NzAwMEFEMkIwMDA0OEY1ODA5NDBBRDM4MDAwODkzNEYwOTM3MjEKKzoxMDQ0ODAwMDNDMEQwODAwOTFBRDNDRDBBRDIwMDAxMDMxRUUwMEZGOTYKKzoxMDQ0OTAwMDAxQ0MxODIxMDAwMzY3MDAwMDBENDQwMDAxODg1ODI1NTUKKzoxMDQ0QTAwMDM1NjdGRkZGQUQyNzAwMEMwM0UwMDAwOEFGNEEwMDJDODIKKzoxMDQ0QjAwMDNDMDkwODAwOTUyOTNDQzAzQzA1MDgwMDk0QTUzQ0NBNkQKKzoxMDQ0QzAwMDNDMEYwODAwOTVFRjNDQkM5NEU0MDAyNDMxMjZGRkZGMkMKKzoxMDQ0RDAwMDAwQTY3MDIxMDFDRjY4MjMwMDA0MUMwMDI1QTJGRkYyNzIKKzoxMDQ0RTAwMDAwNjJDODI1MjQxODA4MDBBRDE5MDAwQ0FEMTgwMDE0OEUKKzoxMDQ0RjAwMEFEMDAwMDEwMEEwMDA0QzgyNTA4MDAxODk0RTYwMDI0NDYKKzoxMDQ1MDAwMDk0RTUwMDI4M0MwOTA4MDA5NTI5M0NDMDAwMDY3QzAwODEKKzoxMDQ1MTAwMDAwMDU3NDAwMzVFRDgxMDAzNUM0MDgwMEFEMEQwMDBDQjgKKzoxMDQ1MjAwMEFEMDQwMDEwMEEwMDA0QzgyNTA4MDAxNDNDMDkwODAwNjYKKzoxMDQ1MzAwMDk1MjkzQ0MwM0MwMjA4MDA5NDQyM0NDQTNDMDYwODAwNTUKKzoxMDQ1NDAwMDk0QzYzQ0JDOTRFNDAwMjQzMTI1RkZGRjk0RjgwMDI4NzUKKzoxMDQ1NTAwMDAwNDVDODIxMDMyNjc4MjMwMDE4MUMwMDAwMDQ2QzAwQzUKKzoxMDQ1NjAwMDI1RUVGRkVFMDA2RUM4MjUzNUEyODEwMDI0MTgwODAwNTQKKzoxMDQ1NzAwMEFEMDIwMDBDQUQxOTAwMTBBRDE4MDAxOEFEMDAwMDE0MEMKKzoxMDQ1ODAwMDBBMDAwNEM4MjUwODAwMUMxNDYwRkY5MjAwMDAwMDAwMDcKKzoxMDQ1OTAwMDk0RTMwMDI0M0MwOTA4MDA5NTI5M0NDMDAwMDMxNDAwNjIKKzoxMDQ1QTAwMDM0NTkwODAwQUQxOTAwMEMwQTAwMDRDODI1MDgwMDEwOTEKKzoxMDQ1QjAwMDAzRTAwMDA4MjQwMjAxRjQyN0JERkZFOEFGQjAwMDEwQkIKKzoxMDQ1QzAwMEFGQkYwMDE0MEUwMDAwNjAwMDgwODAyMTI0MDUwMDQwNzEKKzoxMDQ1RDAwMEFGNDUwODE0OEY4MzAwNTA4Rjg0MDA0QzhGODUwMDVDOUEKKzoxMDQ1RTAwMDAwNzAxODIxMDA2NDEwMjMxODQwMDAwNEFGODMwMDUwQUQKKzoxMDQ1RjAwMEFGNjMwMDU0OEY2NjAwNTRBRjg2MDA0QzEyMDAwMDBDNkQKKzoxMDQ2MDAwMDAwMDAwMDAwOEY0NDAwNzQ5MzY4MDA4MTM0MDlGQTAwQjAKKzoxMDQ2MTAwMDJEMDcwMDA3MTBFMDAwMDUwMDg5MTAyMTkzNkMwMDgxMzAKKzoxMDQ2MjAwMDI0MEIwMUY0MDE4QjUwMDQwMTQ0MTAyMUFGNjIwMDBDRjMKKzoxMDQ2MzAwMDhGNEUwOTVDMDFDNTY4MjMxOUEwMDAwNDhGQkYwMDE0QzgKKzoxMDQ2NDAwMDhGNEYwOTVDQUY4RjAwNUM4RkJGMDAxNDhGQjAwMDEwREMKKzoxMDQ2NTAwMDBBMDAwMDYyMjdCRDAwMTg4Rjg0MDA2NDhGODMwMDUwMTkKKzoxMDQ2NjAwMDhGODIwMDRDQUY2NDAwNDRBRjYzMDA1MDAzRTAwMDA4NDkKKzoxMDQ2NzAwMEFGNjIwMDU0M0MwMzgwMDAzNDYyMDA3MDhDNDMwMDAwNDEKKzoxMDQ2ODAwMDI3QkRGRkY4MzA4NzAwRkYzMEE5MDBGRjMwQzgwMEZGQ0EKKzoxMDQ2OTAwMEFGODMwMDMwOEY0NDAxNzgwNDgwRkZGRTNDMDI4MDAwMkQKKzoxMDQ2QTAwMDM0NTkwMDcwOEYzODAwMDBBM0E3MDAwMzNDMDcwODAwQUUKKzoxMDQ2QjAwMDhDRTcwMDc0OEZBQzAwMDAzQzA2MDgwMDhDQzYwMDcwQ0MKKzoxMDQ2QzAwMDAzMDM3ODIzM0MwRTdGRkYwMEVGQzgyMTM1Q0RGRkZGQTkKKzoxMDQ2RDAwMDAwMDA1MDIxMDE4RDI4MjQwMENBMTgyMTAwMDg0N0MwN0QKKzoxMDQ2RTAwMDAzMkYyMDJCMDBBODEwMjUwMDY0QzAyMUFGQTIwMDAwREEKKzoxMDQ2RjAwMDNDMDEwODAwQUMzOTAwNzQzQzAxMDgwMEFDMzgwMDcwODMKKzoxMDQ3MDAwMDkzNEYwMTBBQTNBMDAwMDIzQzBFODBGRkEzQUYwMDAxNUIKKzoxMDQ3MTAwMDhGQUMwMDAwMzEyQjAwN0YzNUNERkZGRjAxOEQ0ODI0ODkKKzoxMDQ3MjAwMDAwMEI1NjAwMDEyQTQwMjUyNDA3MzAwMDI0MDZGRjgwOTQKKzoxMDQ3MzAwMDNDMDUxMDAwMjdCRDAwMDhBRjQ4MDE0Q0FGNDcwMTU0QUQKKzoxMDQ3NDAwMEE3NDAwMTU4QTM0NjAxNTIwM0UwMDAwOEFGNDUwMTc4OTUKKzoxMDQ3NTAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDhGNjUwMDc0MzUKKzoxMDQ3NjAwMDNDMDY4MDAwMzA5MDAwRkYwMEE2MjAyNTBFMDAwMDYwNkYKKzoxMDQ3NzAwMEFGNjQwMDc0OTM2MzAwMDUzNDYyMDAwODBFMDAwMDYyQTkKKzoxMDQ3ODAwMEEzNjIwMDA1MDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMkIKKzoxMDQ3OTAwMDI0MDUwMDA1MjQwNjAwMDEwQTAwMDU2RTI3QkQwMDE4NDcKKzoxMDQ3QTAwMDI3QkRGRkUwM0MwMzgwMDBBRkIwMDAxMEFGQkYwMDE4OTIKKzoxMDQ3QjAwMEFGQjEwMDE0MzQ2MjAwNzA4QzQ3MDAwMDMwOTAwMEZGRUQKKzoxMDQ3QzAwMDMwQTgwMEZGQUY4NzAwMzA4RjQ0MDE3ODA0ODBGRkZFREYKKzoxMDQ3RDAwMDNDMTg4MDAwMzcxMTAwNzA4RTJGMDAwMDNDMEQwODAwM0YKKzoxMDQ3RTAwMDhEQUQwMDc0M0MwQTA4MDA4RDRBMDA3MDAxRTc3MDIzMEIKKzoxMDQ3RjAwMDAxQUUyODIxMDAwMDU4MjEwMEFFMzAyQjAxNEI0ODIxOEEKKzoxMDQ4MDAwMDAxMjYzODIxM0MwMTA4MDBBQzI1MDA3NDAwMDA4ODIxRjUKKzoxMDQ4MTAwMDNDMDEwODAwQUMyNzAwNzAxMTAwMDAwRjAwMDAwMDAwRjAKKzoxMDQ4MjAwMDhGNjIwMDc0MjYxOUZGRkYzMjA4MDA3RjAwMDJGRTAyMkIKKzoxMDQ4MzAwMDMzRTUwMDdGMTUwMDAwMDYzMzIyMDBGRjI0MDdGRjgwQzgKKzoxMDQ4NDAwMDAyMDcyMDI2MjRBM0ZGRkYwMDgzODAyNTMyMDIwMEZGRjkKKzoxMDQ4NTAwMDAwNDA4MDIxMjQxMTEwMDgwRTAwMDA2MDAwMDAwMDAwQkMKKzoxMDQ4NjAwMDhGNDkwODE4MzEyNTAwMDQxNEEwRkZGRDMyMTgwMDdGN0QKKzoxMDQ4NzAwMDAwMTg3OEMwMDAxODcxNDAwMUNGNjgyMTI1QUMwMDg4NkQKKzoxMDQ4ODAwMEFGNEMwODE4Mjc0QTA5ODA4RDRCMDAyMEFGNEIwMTQ0REMKKzoxMDQ4OTAwMDhENDYwMDI0QUY0NjAxNDhBMzUwMDE1MDBFMDAwMDYyMkYKKzoxMDQ4QTAwMEE3NDAwMTU4MDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0QkIKKzoxMDQ4QjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4RUYKKzoxMDQ4QzAwMDMwODQwMEZGQUZCRjAwMTAwRTAwMDVCOTMwQTUwMEZGMTcKKzoxMDQ4RDAwMDhGODMwMDUwOEZCRjAwMTAzNDQ1MDA0MDI0MDRGRjkwQTgKKzoxMDQ4RTAwMDNDMDIxMDAwMjdCRDAwMThBRjQzMDE0Q0EzNDQwMTUyMDUKKzoxMDQ4RjAwMEFGNDUwMTU0MDNFMDAwMDhBRjQyMDE3ODkzNDMwOTNFRkQKKzoxMDQ5MDAwMDMwNjIwMDA4MTA0MDAwMEQzQzA5MDEwMTM1MjgwODBBRkEKKzoxMDQ5MTAwMEFDODgwMDAwOEY0NzAwNzRBQzg3MDAwNDNDMDYwODAwOTgKKzoxMDQ5MjAwMDkwQzYzQ0QwMzBDNTAwMTA1MEEwMDAwNkFDODAwMDA4RjYKKzoxMDQ5MzAwMDhGNkEwMDYwQUM4QTAwMDgyNDg0MDAwQzAzRTAwMDA4NDEKKzoxMDQ5NDAwMDAwODAxMDIxMEEwMDA2MjAyNDg0MDAwQzI3QkRGRkU4MDcKKzoxMDQ5NTAwMEFGQkYwMDE0QUZCMDAwMTA5MzQ2MDkzRjAwQTA1MDIxMzQKKzoxMDQ5NjAwMDAwMDUyODgwMDA4NTM4MjMzMEMyMDBGRjI0MDMwMDA2OUMKKzoxMDQ5NzAwMDNDMDkwODAwOTUyOTNDQzYyNEU4RkZEODI0MDUwMDA0MUEKKzoxMDQ5ODAwMDEwNDMwMDM3MjQwNjAwMDI5NzUwMDkzQzNDMEYwMjA0RjQKKzoxMDQ5OTAwMDAwMDYzNDAwMzIwRUZGRkYwMUNGNjgyNUFDOEQwMDAwMDkKKzoxMDQ5QTAwMDkzNEMwOTNFMzE4QjAwMjAxMTYwMDAwODAwMDAwMDAwOEMKKzoxMDQ5QjAwMDkzNDMwOTM2M0MwMjAxMDMzNDVGMDMwMDMwNzkwMEZGNjIKKzoxMDQ5QzAwMDAzM0ZDMDI1MjQwNTAwMDhBQzk4MDAwNDkzNDMwOTM0MzQKKzoxMDQ5RDAwMDkzNTkwOTIxMDAwNUY4ODIzMDYyMDBGRjAwMDJDMDgyNkQKKzoxMDQ5RTAwMDMzMkYwMEZGMDAxODZFMDAwMDBGNzQwMDAxQUU2MDI1MjkKKzoxMDQ5RjAwMDAxODkyMDI1M0MwOTQwMDAwMDg5ODAyNUFDRjBGRkQ4QzIKKzoxMDRBMDAwMDkzNDMwOTM3OEY0RjA5NDg4RjU4MDk0MDMwNjIwMEZGQTAKKzoxMDRBMTAwMDAwNEFDODIxMDMzRjcwMjEwMUY4NjAyMzAwMEU2RjAwOTcKKzoxMDRBMjAwMDAxQTY1MDI1MzE4NUZGRkYwMDFGNTg4MDAxNDU0ODI1MEMKKzoxMDRBMzAwMDAxNjgzODIxQUQwOTAwMjAwRTAwMDA2MDI0RjAwMDI4MzQKKzoxMDRBNDAwMDI0MDQwMDA0MEUwMDAwNjJBMzY0MDAzRjAyMDAxMDIxNTEKKzoxMDRBNTAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4QkUKKzoxMDRBNjAwMDBBMDAwNjMzMjQwNjAwMTIyN0JERkZEMDI0MDkwMDEwRDcKKzoxMDRBNzAwMEFGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEFGQjEwMDE0MkEKKzoxMDRBODAwMEFGQjAwMDEwM0MwMTA4MDBBMDI5M0NEMEFGQkYwMDJDMDMKKzoxMDRBOTAwMEFGQjMwMDFDQUZCMjAwMTg5NzQ4MDkwODMwOTUwMEZGNkIKKzoxMDRBQTAwMDNDMDIwMDBFMzEwN0ZGRkYwMDA3MzFDMEFGNDYwMDJDNkIKKzoxMDRBQjAwMDk3NDQwOTA4OTM0NDAxMEIzMEI0MDBGRjAzNDI4MDIxNUUKKzoxMDRBQzAwMDMwODMwMDMwMDAwMEIwMjExMDYwMDEwNzAwMDA4ODIxMTEKKzoxMDRBRDAwMDI0MEMwMDA0M0MwMTA4MDBBMDJDM0NEMDkzNEIwOTNFNjAKKzoxMDRBRTAwMDAwMEI1NjAwMDAwQTJFMDMwNEEwMDE0QjAwMDAwMDAwM0EKKzoxMDRBRjAwMEFGNDAwMDQ4OTM0RjAxMEIzMUVFMDAyMDExQzAwMDA2N0IKKzoxMDRCMDAwMDAwMDAwMDAwOTM1ODA5M0UwMDE4OUUwMDAwMTM5NjAzMTEKKzoxMDRCMTAwMDA2NDAwMTZCMDAwMDAwMDA5MzQ0MDEwQjMwODMwMDQwMEQKKzoxMDRCMjAwMDEwNjAwMDAzOEY5MzAwNTA4RjgyMDA1MDI0NTNGRkZGQ0EKKzoxMDRCMzAwMDkzNDcwOTNFMzBFNjAwMDgxNEMwMDAwMjI0MTIwMDAzMjcKKzoxMDRCNDAwMDAwMDA5MDIxOTYxOTAwMkM5MzU4MDkzNDkzNEYwOTM3OEYKKzoxMDRCNTAwMEE3OTkwMDU4MzMwQzAwRkYzMUVFMDBGRjAyNEU2ODIxODgKKzoxMDRCNjAwMDAwMEQ1ODgwMDE2QzUwMjEwMTUxNDAyMTNDMDEwODAwOEEKKzoxMDRCNzAwMEE0MjgzQ0M2OTIwNTAwMTgzMEE5MDBGRjAxMDkxODIxOUQKKzoxMDRCODAwMDNDMDEwODAwQTQyMzNDQzg5MjExMDAxODE2MjAwMDAzMjEKKzoxMDRCOTAwMDI0NjcwMDBBMDAwMDAwMEQyNDY3MDAwQTMwRjBGRkZGQzAKKzoxMDRCQTAwMDNDMDEwODAwQTQyMzNDQ0EzQzAxMDgwMEE0MjAzQ0MwRUUKKzoxMDRCQjAwMDNDMDEwODAwQTQyMDNDQkMwRTAwMDA5RTAyMDAyMDIxMDUKKzoxMDRCQzAwMDBFMDAwNDlBMDA0MDIwMjE4RjRCMDAyQzk3NEEwOTA4QzAKKzoxMDRCRDAwMDNDMEMwMDBFMDM0QzM4MjEzMTQ1RkZGRjAwMDU0OUMwNTUKKzoxMDRCRTAwMEFGNDkwMDJDOTc0MzA5MDg5NEYxMDAxQTAwNDA0MDIxNzYKKzoxMDRCRjAwMDI0MUYwMDAxMzIyNkZGRkZBQzQ2MDAwMDhDRTIwMDFDOUYKKzoxMDRDMDAwMEFEMDIwMDA0OENFNDAwMjBBRDA0MDAwODkwRTMwMDE5MUMKKzoxMDRDMTAwMDMwNjMwMDAzMTA3RjAwRDYyODZEMDAwMjE1QTAwMTFDMzAKKzoxMDRDMjAwMDI0MEUwMDAyMTA2RTAxMEUyNDBGMDAwMzEwNkYwMEUzMkIKKzoxMDRDMzAwMDAwMDAwMDAwM0MwOTA4MDA5NTI5M0NDMDkzNEUwOTM0NEYKKzoxMDRDNDAwMDkzNTEwOTIxM0MwQTA4MDA5NTRBM0NDNjMxQ0QwMEZGMkEKKzoxMDRDNTAwMDk0RjkwMDJBMDAwRDE4ODI5Nzg3MDA1ODMyMkMwMEZGMjMKKzoxMDRDNjAwMDAwMDMyRTAwMDAwQzI0MDAzMTI2RkZGRjMxNDJGRkZGMUQKKzoxMDRDNzAwMDAwQTRGODI1MDA0NjQ4MjEwM0U5NzgyNTAzMjc3MDIxODAKKzoxMDRDODAwMDNDMTg0MDAwMDFGODY4MjUwMDBFOEMwMEFEMEQwMDAwQjYKKzoxMDRDOTAwMEFEMTEwMDA0OTM0QzA5MjAzQzAzMDAwNjI1MTEwMDE0QkIKKzoxMDRDQTAwMDAwMEMyRTAwMDBBMzEwMjVBRDAyMDAwODhGNDkwOTJDMkUKKzoxMDRDQjAwMDI0RTQwMDAxMzA5RjdGRkZBRDA5MDAwQzhGNDYwOTMwQ0UKKzoxMDRDQzAwMDI1MDkwMDI4QTc5RjAwNThBRDA2MDAxMDhGNTkwOTM4MDQKKzoxMDRDRDAwMDAxMjAzMDIxQUQxOTAwMTRBRTMzMDAwNDhGNTgwOTQwNzMKKzoxMDRDRTAwMEFFMzgwMDA4OTM0RjA5MzczQzBDMDgwMDkxOEMzQ0QwM0IKKzoxMDRDRjAwMEFFMjAwMDEwMzFFRTAwRkYwMUQyNjgyMTAwMEQyRjAwMjAKKzoxMDREMDAwMDAwMEMxQzAwMDBBMzEwMjUzNDQ3RkZGRkFFMjcwMDBDNDkKKzoxMDREMTAwMEFGNEIwMDJDOTM0QjA5M0UzMTczMDAwODEyNjAwMDBEMUQKKzoxMDREMjAwMDNDMEYwMTAxMzVFNzA4MEFBRDA3MDAyODhGNEIwMDc0REUKKzoxMDREMzAwMEFEMkIwMDA0M0MxMzA4MDA5MjczM0NEMDMyNjgwMDEwODUKKzoxMDRENDAwMDUxMDAwMDAzQUQyMDAwMDg4Rjc4MDA2MEFEMzgwMDA4RTYKKzoxMDRENTAwMDI1MjYwMDBDMTJDMDAwMzgwMDAwMDAwMDkzNUYwOTNGQjgKKzoxMDRENjAwMDI0MTYwMDA2MjQwNzAwMDQzM0Y5MDBGRjEzMzYwMEQyOEUKKzoxMDRENzAwMDI0MDgwMDAyOTc0MzA5M0MzQzBDMDIwNDMwNjRGRkZGMDYKKzoxMDREODAwMDAwOEMyODI1QUNDNTAwMDA5MzQyMDkzRTMwNDkwMDIwMjQKKzoxMDREOTAwMDExMjAwMDA4MDAwMDAwMDA5MzRCMDkzNjNDMTMwMTAzNkEKKzoxMDREQTAwMDM2NkUwMzAwMzE2RDAwRkYwMUFFODgyNUFDRDEwMDA0RTIKKzoxMDREQjAwMDI0MDcwMDA4OTM0OTA5MzQ5MzU5MDkyMTMxNEJGRkZGMTcKKzoxMDREQzAwMDMxM0YwMEZGMDAxRkIwODIzMzM4MDBGRjAwMTY1NjAwNEQKKzoxMDRERDAwMDAwMTg3QzAwMDE0Rjk4MjUwMDEyMjg4MDAyNkI2ODI1N0UKKzoxMDRERTAwMDNDMEU0MDAwMDBDNTUwMjMwMUFFODgyNUFENTFGRkQ4RDAKKzoxMDRERjAwMDkzNDMwOTM3OEY1RjA5NDg4RjQ5MDk0MDMwNkMwMEZGQTIKKzoxMDRFMDAwMDAxOTIxMDIxMDAwNzIwODIwMDQ0QzgyMTAzRTk3ODIzODEKKzoxMDRFMTAwMDAwMTlDNzAwMDAwOEI0MDAwMzE2NDAyNTMxRTdGRkZGNjIKKzoxMDRFMjAwMDAxMDczMDI1MEUwMDAwNjBBRDQ2RkZGODI0MTIwMDA0OTMKKzoxMDRFMzAwMDBFMDAwMDYyQTM3MjAwM0YwRTAwMDBDNzAyMDAyMDIxOTYKKzoxMDRFNDAwMDNDMTIwODAwOTI1MjNDRDAzMjUwMDAwMzEyMDAwMDBGNzYKKzoxMDRFNTAwMDAyQTAyMDIxOEY4MjAwNTAyNDQ3MDAwMUFGODcwMDUwMUMKKzoxMDRFNjAwMEFGNjcwMDUwOEY2ODAwNTQwMTA3MzAyMzE4QzAwMDAyNUMKKzoxMDRFNzAwMDAwRTAyMDIxOEY2NDAwNTRBRjY0MDA1NDhGNEMwMDc0MTQKKzoxMDRFODAwMDI1ODQwMUY0QUY2NDAwMEMwMkEwMjAyMTAyODAyODIxQjcKKzoxMDRFOTAwMEE3NjAwMDY4MEUwMDA1QjkzQzE0MTAwMDhGOEQwMDUwMEIKKzoxMDRFQTAwMDM0NTUwMDA2QUY0RDAxNEM4RjkxMDA0ODhGQkYwMDJDNDgKKzoxMDRFQjAwMDhGQjYwMDI4MjYyMzAwMDFBRjgzMDA0ODhGQjMwMDFDNjMKKzoxMDRFQzAwMEEzNTEwMTUyOEZCMjAwMThBRjU1MDE1NDhGQjEwMDE0OTUKKzoxMDRFRDAwMEFGNTQwMTc4OEZCNTAwMjQ4RkI0MDAyMDhGQjAwMDEwM0MKKzoxMDRFRTAwMDAzRTAwMDA4MjdCRDAwMzA5MzU4MDkzRTAwMTg5RTAwREIKKzoxMDRFRjAwMDAwMTM5NjAzMDY0MjAwNTEyNDExMDAwMjkzNDQwOTIzMzMKKzoxMDRGMDAwMDMwODMwMDAyMTA2MEZFRkI4Rjg2MDA2MDhGODIwMDUwQUQKKzoxMDRGMTAwMDE0QzJGRUY4MDAwMDAwMDAwRTAwMDA2MDAwMDAwMDAwNTcKKzoxMDRGMjAwMDkzNjkwMDNGMjQwNzAwMTYzMTI4MDBGRjExMDcwMDBDODkKKzoxMDRGMzAwMDI0MDUwMDA4M0MwQzA4MDA5MThDM0NEMDM1OEIwMDAxMDYKKzoxMDRGNDAwMDNDMDEwODAwQTAyQjNDRDA5MzZBMDAzRjMxNDMwMEZGOTYKKzoxMDRGNTAwMDEwNjUwMDY1MjQwRDAwMEExMDZEMDA1RTI0MDIwMDBDMkYKKzoxMDRGNjAwMDBFMDAwMDYyMDAwMDAwMDAwQTAwMDY4RTAwMDAwMDAwMzMKKzoxMDRGNzAwMDNDMDkwODAwOTUyOTNDQzAzQzA0MDgwMDk0ODQzQ0NBQzQKKzoxMDRGODAwMDNDMUYwODAwOTdGRjNDQkM5NEY4MDAyNDMxMjNGRkZGMkUKKzoxMDRGOTAwMDAwODNDODIxMDMzRjc4MjMwMDE4NkMwMDI1RUVGRkYyNDAKKzoxMDRGQTAwMDAxQUU2MDI1MjQwQTA4MDBBRDBDMDAwQ0FEMEEwMDE0MDcKKzoxMDRGQjAwMEFEMDAwMDEwMEEwMDA2RTAyNTA4MDAxODNDMDkwODAwQjIKKzoxMDRGQzAwMDk1MjkzQ0MwM0MxRjA4MDA5N0ZGM0NDQTNDMTkwODAwQ0IKKzoxMDRGRDAwMDk3MzkzQ0JDOTRFRjAwMjQzMTI0RkZGRjk0RUUwMDI4NjUKKzoxMDRGRTAwMDAzRTRDMDIxMDMxOTY4MjMwMDBGMkMwMDAwMEU1NDAwQjUKKzoxMDRGRjAwMDI1QUNGRkVFMDE0Qzg4MjUzNEEyODEwMDI0MDYwODAwNzAKKzoxMDUwMDAwMEFEMDIwMDBDQUQxMTAwMTBBRDA2MDAxOEFEMDAwMDE0OEIKKzoxMDUwMTAwMDBBMDAwNkUwMjUwODAwMUM4RjZFMDA4NDhGNEQwOTQwQjEKKzoxMDUwMjAwMDExQTBGRUIzQUY4RTAwNTAyNDBGMDAxNDNDMDEwODAwMDUKKzoxMDUwMzAwMEEwMkYzQ0QwMEEwMDA2OEQwMDAwMDAwMDNDMDEwODAwQjMKKzoxMDUwNDAwMEEwMzEzQ0QwOTM1RjA5M0UyNDE2MDAwMTMzRjkwMDIwQzMKKzoxMDUwNTAwMDE3MjBGRUE4MjQxMTAwMDgwQTAwMDY4RTI0MTEwMDA0NUYKKzoxMDUwNjAwMDk0RTUwMDI0OTRGMTAwMjgzQzA5MDgwMDk1MjkzQ0MwRUYKKzoxMDUwNzAwMDAwMDUxNDAwMDAxMTM0MDAzNDQ0ODEwMDM0QzMwODAwREEKKzoxMDUwODAwMEFEMDQwMDBDQUQwMzAwMTAwQTAwMDZFMDI1MDgwMDE0NzIKKzoxMDUwOTAwMDE0NjBGRUU4MDAwMDAwMDA5NEZGMDAyNDNDMDkwODAwQjIKKzoxMDUwQTAwMDk1MjkzQ0MwMDAxRkNDMDAzNzM4MDgwMEFEMTgwMDBDMTMKKzoxMDUwQjAwMDBBMDAwNkUwMjUwODAwMTAwQTAwMDcyRTI0MDgwMDEyNDYKKzoxMDUwQzAwMDhGN0YwMDRDQUY3RjAwNTQ4Rjc5MDA1NDBBMDAwNjk3MDEKKzoxMDUwRDAwMEFGNzkwMDUwQTM2MjAwM0YwRTAwMDA2MjAwMDAwMDAwQTQKKzoxMDUwRTAwMDBBMDAwNjhFMDAwMDAwMDAyNDAyMDAxNDBBMDAwODA3Q0YKKzoxMDUwRjAwMEEzNjIwMDNGMjdCREZGRTgzMDg0MDBGRkFGQkYwMDEwNzAKKzoxMDUxMDAwMDBFMDAwNUI5MzBBNTAwRkY5Mzc4MDA3RTkzNzkwMDdGRUIKKzoxMDUxMTAwMDkzNkUwMDgwOTM2ODAwN0EzMzJGMDBGRjAwMTg2NjAwQkEKKzoxMDUxMjAwMDAwMEY2QzAwMzFDQjAwRkYwMThENDgyNTAwMEI1MjAwQjEKKzoxMDUxMzAwMDhGQkYwMDEwMDEyQTM4MjUzMTA2MDBGRjM0NDQ3MDAwNkIKKzoxMDUxNDAwMDAwRTYyODI1MjQwMkZGODEzQzAzMTAwMDI3QkQwMDE4M0IKKzoxMDUxNTAwMEFGNDUwMTRDQUY0NDAxNTRBMzQyMDE1MjAzRTAwMDA4QTMKKzoxMDUxNjAwMEFGNDMwMTc4MjdCREZGRDhBRkIyMDAxOEFGQjEwMDE0MkMKKzoxMDUxNzAwMEFGQjAwMDEwQUZCRjAwMjBBRkIzMDAxQzkzNDIwMTA5RDUKKzoxMDUxODAwMDMwODYwMEZGMzBCMDAwRkYwMDA2MThDMjMyMDQwMDAyNzMKKzoxMDUxOTAwMDMwNzEwMDAxMTQ4MDAwMDUzMDUyMDBGRjkzNjcwMDA1NTQKKzoxMDUxQTAwMDMwRTUwMDA4MTBBMDAwMEQzMEM4MDAxMDAyNDAyMDIxOUEKKzoxMDUxQjAwMDBFMDAwNUE1MDIyMDI4MjEyNDA0MDAwMThGQkYwMDIwMzUKKzoxMDUxQzAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwODUKKzoxMDUxRDAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODE1MDAwMDMyRTAKKzoxMDUxRTAwMDAwMDAwMDAwOTM0MzAxMDkwMDAwMjgyMTMwNjIwMDdGODUKKzoxMDUxRjAwMDAwMDIyMEMwMDAwMkY5NDAwM0U0OTgyMTI2NzkwMDg4Q0IKKzoxMDUyMDAwMDAzM0I5ODIxOEU3ODAwMjQ4RTZGMDAwODEzMEYwMDQ2MTAKKzoxMDUyMTAwMDAwMDAwMDAwOEY2NDAwODQyNDE4MDAwMjAwMDRGRDgyNTYKKzoxMDUyMjAwMDMzRjkwMDAzMTMzODAwN0MwMDAwMDAwMDkzNjYwMDgzMEMKKzoxMDUyMzAwMDkzNEEwMTA5NTE0NjAwMDQzMjA1MDA3QzEwQTAwMDYwMjkKKzoxMDUyNDAwMDAwMDAwMDAwMzIwNTAwN0MxNEEwMDA1MzAyNDAyMDIxMjEKKzoxMDUyNTAwMDE2MjAwMDA2MzIwNDAwMDE4RTdGMDAyNDhGNTkwMTA0QkQKKzoxMDUyNjAwMDE3RjlGRkQ2MDAwMDIwMjEzMjA0MDAwMTEwODAwMDBBNDcKKzoxMDUyNzAwMDAyNDAyMDIxOEY0MjA5NDA4RjkzMDA2NDEwNTMwMDA2QTIKKzoxMDUyODAwMDAwMDAwMDAwMEUwMDA2NkIwMjIwMjgyMThGNDMwOTQwMTkKKzoxMDUyOTAwMEFGNjMwMDQ0MDI0MDIwMjEwRTAwMDYwMDAyMjAyODIxQjYKKzoxMDUyQTAwMDBBMDAwODQwMjQwNDAwMDEzQzA5MDgwMDhEMjkwMDY0MUMKKzoxMDUyQjAwMDI1MjYwMDAxM0MwMTA4MDBBQzI2MDA2NDE2MDAwMDEyRkYKKzoxMDUyQzAwMDAwMDAwMDAwOEY2RDAwODQzQzBFMDBDMDAxQUU2MDI0MjEKKzoxMDUyRDAwMDE1ODAwMDA1MDI0MDIwMjEwRTAwMDgwRTAyMjAyODIxMjIKKzoxMDUyRTAwMDBBMDAwODQwMjQwNDAwMDEyNDA1MDAwNDBFMDAwNTZFOTUKKzoxMDUyRjAwMDI0MDYwMDAxMDI0MDIwMjEwRTAwMDgwRTAyMjAyODIxNzEKKzoxMDUzMDAwMDBBMDAwODQwMjQwNDAwMDEwRTAwMDA0MTI0MDQwMDAxQUEKKzoxMDUzMTAwMDkzNkIwMDdEMDIwQjUwMjUwRTAwMDA2MkEzNkEwMDdEOTYKKzoxMDUzMjAwMDBBMDAwODgzOEY2RDAwODQ4RjY2MDA3NDhGNDgwMTA0MjMKKzoxMDUzMzAwMDhFNjcwMDI0MDAwNjRFMDIxNTA3RkZCNjMxMjYwMDdGNTcKKzoxMDUzNDAwMDkzNkIwMDgzMjY0NDAwMDEzMDhBMDA3RjExNDYwMDQzOUUKKzoxMDUzNTAwMDMxNjMwMEZGNTQ2NEZGQjA4RjY0MDA4NDI2NDUwMDAxNzAKKzoxMDUzNjAwMDMwQjEwMDdGMzBBMjAwRkYxMjI2MDAwNDI0MDUwMDAxQTYKKzoxMDUzNzAwMDAwNDA5MDIxMEEwMDA4NTYyNDExMDAwMTI0MEZGRjgwRUMKKzoxMDUzODAwMDAyNEY3MDI0MDFDRjkwMjYzMjQyMDBGRjAwNDA5MDIxNEUKKzoxMDUzOTAwMDBBMDAwODU2MjQxMTAwMDEwRTAwMDY2QjAyMjAyODIxODUKKzoxMDUzQTAwMDMyMTgwMDMwMTMwMEZGQUEzMjEwMDA4MjAyNDAyMDIxODAKKzoxMDUzQjAwMDBFMDAwNUE1MDIyMDI4MjEwQTAwMDg0MDI0MDQwMDAxNEYKKzoxMDUzQzAwMDhGNkUwMDc0M0MwRjgwMDAyNDA1MDAwMzAxQ0Y5MDI1RjAKKzoxMDUzRDAwMEFGNzIwMDc0OTM3MTAwODMyNDA2MDAwMTBFMDAwNTZFMDUKKzoxMDUzRTAwMDMyMjQwMEZGMEUwMDAwNDEyNDA0MDAwMTkzNkQwMDdENzMKKzoxMDUzRjAwMDAyMEQ2MDI1MEUwMDAwNjJBMzZDMDA3RDNDMEIwODAwQ0UKKzoxMDU0MDAwMDhENkIwMDU0MjU3MDAwMDEzQzAxMDgwMEFDMzAwMDU0NDUKKzoxMDU0MTAwMDBBMDAwODQwMjQwNDAwMDE4RjY4MDA3NDNDMDk4MDAwRTEKKzoxMDU0MjAwMDI0MDUwMDA0MDEwOTM4MjVBRjY3MDA3NDkzNjMwMDgzRTUKKzoxMDU0MzAwMDI0MDYwMDAxMEUwMDA1NkUzMDY0MDBGRjBFMDAwMDQxREUKKzoxMDU0NDAwMDI0MDQwMDAxOTM2MjAwN0QwMjAyOTgyNTBFMDAwMDYyOTAKKzoxMDU0NTAwMEEzNzMwMDdEMEEwMDA4NDAyNDA0MDAwMTMyNEQwMDgwM0YKKzoxMDU0NjAwMDM5QUMwMDgwNTQ2Q0ZGNkM4RjY0MDA4NDBBMDAwOEE5N0EKKzoxMDU0NzAwMDI2NDUwMDAxMjdCREZGQzgzQzBBMDAwOEFGQkYwMDMwMjkKKzoxMDU0ODAwMEFGQjUwMDJDQUZCNDAwMjhBRkIzMDAyNEFGQjIwMDIwRkEKKzoxMDU0OTAwMEFGQjEwMDFDQUZCMDAwMTgwMzRBRDgyMTI0MDkwMDQwNjYKKzoxMDU0QTAwMEFGNDkwODE0QUY0MDA4MTA4RjQyMDk0NDhGNDMwOTUwOTgKKzoxMDU0QjAwMDhGNDYwOTU0OEY0NzA5NUM4RjQ4MDk0QzkzNDQwMTA4NzMKKzoxMDU0QzAwMDkzNDUwMTBCQUY4MjAwNjQzMDg0MDBGRjMwQTUwMEZGREMKKzoxMDU0RDAwMEFGODMwMDUwQUY4NjAwNENBRjg3MDA1QzBFMDAwODJBRjcKKzoxMDU0RTAwMEFGODgwMDYwMTQ0MDAxNzQ4RkJGMDAzMEE3NjAwMDY4NkYKKzoxMDU0RjAwMDkzNEQwOTAwMjQwQjAwNTAzQzE1MDgwMDI2QjUzQzg4NEMKKzoxMDU1MDAwMDMxQUMwMEZGM0MxMjA4MDAyNjUyM0M5ODExOEIwMDAzN0UKKzoxMDU1MTAwMDAwMDAwMDAwMDAwMEE4MjEwMDAwOTAyMTkzNTEwMTA5MjMKKzoxMDU1MjAwMDhGOUYwMDUwMjQwNDAwMTAzMjJFMDA3RjAwMEU2OEMwQjAKKzoxMDU1MzAwMDAwMEU2MTQwMDE4RDI4MjEyNEI0MDA4OEFGNTQwODE4NjIKKzoxMDU1NDAwMDhGNDkwMTA0OEY0QTA5QTQzQzBCMDAwRTAzNEJDMDIxNzQKKzoxMDU1NTAwMDAxMkExMDIzM0MwMTA4MDBBQzIyM0NBQzhGNDMwOTU4QkYKKzoxMDU1NjAwMDNDMDEwODAwQTAyNDNDRDA5NzQ3MDkwODAwN0YzMDIzNjUKKzoxMDU1NzAwMDNDMDEwODAwQUMyNjNDQjAzMEU4RkZGRjAwMDhDOUMwODEKKzoxMDU1ODAwMDNDMDEwODAwQUMzRjNDRDRBRjU5MDAyQzk3NDIwOTA4QkQKKzoxMDU1OTAwMDk3MTAwMDJDOEVCMTAwMDA5MzBGMDAxODAzNzQ5ODIxMEYKKzoxMDU1QTAwMEE3OTAwMDU4QUY5MzAwNDQwMjIwRjgwOTMxRjAwMEZGQTMKKzoxMDU1QjAwMDMwNEUwMDAyMTVDMDAxQTkzMDRGMDAwMTExRTAwMTVEMUQKKzoxMDU1QzAwMDAwMDAwMDAwOTM0MzA5M0UzMDY2MDAwODE0QzAwMDAyNEEKKzoxMDU1RDAwMDI0MTQwMDAzMDAwMEEwMjE4RjU4MDlBNDI0MTMwMDAxMDMKKzoxMDU1RTAwMDNDMDEwODAwQUMzODNDRDg5MzRGMDkzNDkzNTEwOTM3M0IKKzoxMDU1RjAwMDMxRUMwMEZGMzIyRTAwRkYwMjhFNjgyMTAwMEQyODgwNjIKKzoxMDU2MDAwMDAwQUM1MDIxMDE1MDU4MjEzQzAxMDgwMEE0MkIzQ0M4OUIKKzoxMDU2MTAwMDNDMDEwODAwQTQyQTNDQzY5MzQ5MDkzNDMxMjIwMEZGMEEKKzoxMDU2MjAwMDAyMDIyMDIxMjQ5MDAwMTAzQzAxMDgwMEE0MzAzQ0M0NTgKKzoxMDU2MzAwMDI0MDcwMDA2OEY5RjAwNTAzQzAxMDgwMEFDMjczQ0NDOUIKKzoxMDU2NDAwMDhGODgwMDVDOEY1OTA5NTgwMDAwODAyMTAxMUYyODIzOTIKKzoxMDU2NTAwMDA0QTAwMTUxMDMzRjIwMjMwNDgwMDE0RjAwQTQzMDJCRkMKKzoxMDU2NjAwMDEwQzAwMTUxMDAwMDAwMDAzQzAxMDgwMEFDMjUzQ0IwMTYKKzoxMDU2NzAwMDhFNDIwMDAwMDA0MEY4MDkwMDAwMDAwMDMwNDMwMDAyQTQKKzoxMDU2ODAwMDE0NjAwMEYxMDA0MDg4MjEzMDQ0MDAwMTU0ODAwMDEwNzMKKzoxMDU2OTAwMDhFNDIwMDA0M0MwOTA4MDA4RDI5M0NCNDNDMEFDMDAwM0QKKzoxMDU2QTAwMDAxMkE4MDI1QUY1MDBFMDA4RjQ1MDAwMDMwQUIwMDA4NjYKKzoxMDU2QjAwMDExNjBGRkZEMDAwMDAwMDA5NzREMEUwODI0MTAwMDAxNEUKKzoxMDU2QzAwMEE3OEQwMDNDOEY0QzBFMDRBRjhDMDAzNDhFNDIwMDA0M0EKKzoxMDU2RDAwMDAwNDBGODA5MDAwMDAwMDAwMjIyODgyNTMyMkUwMDAyNTYKKzoxMDU2RTAwMDE1QzAwMTZGMDAwMDAwMDAzQzA5MDgwMDk1MjkzQ0JDNzIKKzoxMDU2RjAwMDNDMDYwODAwOTRDNjNDQzgzQzA0MDgwMDk0ODQzQ0JFQTgKKzoxMDU3MDAwMDNDMTgwODAwOEYxODNDQjQwMTI2NTgyMTNDMEYwODAwQjMKKzoxMDU3MTAwMDhERUYzQ0Q4M0MxRjA4MDA5N0ZGM0NEMjAxNjQxODIxNTQKKzoxMDU3MjAwMDhGNEQwOTQwMDMwOUM4MjEyNDZFMDAwMjAzM0YyODIxNDAKKzoxMDU3MzAwMDAxRjg2MDIxM0MwMTA4MDBBNDJCM0NDQUFGOEQwMDY0MzUKKzoxMDU3NDAwMDNDMDEwODAwQUMyQzNDRDgzQzAxMDgwMEE0MjUzQ0MwMUUKKzoxMDU3NTAwMDBFMDAwMDlFMzFDNEZGRkY4Rjg3MDA0ODAwNDAyMDIxQ0IKKzoxMDU3NjAwMDNDMDEwODAwQTAyNzNDRDE4RTQyMDAwODI0RTgwMDAxM0IKKzoxMDU3NzAwMEFGODgwMDQ4MDA0MEY4MDkwMDAwMDAwMDhGNEIwMDJDNjMKKzoxMDU3ODAwMDk3NDkwOTA4M0MwQTAwMEUwMzRBMzgyMTMxMjRGRkZGREIKKzoxMDU3OTAwMDAwMDQxOUMwOEY4QTAwNTBBRjQzMDAyQzk3NDMwOTA4QkEKKzoxMDU3QTAwMDk0RTYwMDFBMDA0MDQwMjEzMERGRkZGRkFDNUYwMDAwQUMKKzoxMDU3QjAwMDhDRjkwMDFDQUM1OTAwMDQ4Q0Y4MDAyMEFDNTgwMDA4OEYKKzoxMDU3QzAwMDkwRUYwMDE5MzFFMzAwMDMxMDczMDBGQjAwMDAwMDAwQUMKKzoxMDU3RDAwMDI4NjIwMDAyMTQ0MDAxMTcyNDA1MDAwMjEwNjUwMTA5MjcKKzoxMDU3RTAwMDI0MEMwMDAzMTA2QzAwQkMwMDAwMDAwMDNDMDkwODAwMDEKKzoxMDU3RjAwMDk1MjkzQ0MwOTM1RjA5MzQ5MzRDMDkyMTNDMEQwODAwNjYKKzoxMDU4MDAwMDk1QUQzQ0M2MzNGOTAwRkY5NEU1MDAyQTAwMTlDMDgyMkIKKzoxMDU4MTAwMDMxOEYwMEZGOTc4QzAwNTgwMDE4MTYwMDAwMEY3NDAwOUQKKzoxMDU4MjAwMDMxMjRGRkZGMDA0RTM4MjUwMUE0MzAyMTAwRTZGODI1ODEKKzoxMDU4MzAwMDAwQUNDODIxM0MwMzQwMDAwM0UzQzAyNTAwMTk0QzAwMjQKKzoxMDU4NDAwMEFEMTgwMDAwQUQwOTAwMDQ5MzRGMDkyMDNDMEUwMDA2N0UKKzoxMDU4NTAwMDI1MDkwMDE0MDAwRjZFMDAwMUFFMjgyNUFEMDUwMDA4RDMKKzoxMDU4NjAwMDhGNDYwOTJDMjU4MjAwMDEzMDQ3N0ZGRkFEMDYwMDBDRDIKKzoxMDU4NzAwMDhGNDQwOTMwQTc4NzAwNTgyNTA2MDAyOEFEMDQwMDEwODIKKzoxMDU4ODAwMDhGNDMwOTM4MDBDMDIwMjFBRDAzMDAxNEFEMkEwMDA0NjUKKzoxMDU4OTAwMDhGNUYwOTQwQUQzRjAwMDg5MzU5MDkzNzNDMEUwODAwNUYKKzoxMDU4QTAwMDkxQ0UzQ0QwQUQyMDAwMTAzMzM4MDBGRjAzMTQ3ODIxOTYKKzoxMDU4QjAwMDAwMEY2NzAwMDAwRTZDMDAwMThEMjgyNTM0QTJGRkZGNDkKKzoxMDU4QzAwMEFEMjIwMDBDQUY0QjAwMkM5MzQ3MDkzRTMwRUEwMDA4OTQKKzoxMDU4RDAwMDUxNDAwMDBGOEU1ODAwMEMzQzAzMDEwMTM0NjkwODBBNDYKKzoxMDU4RTAwMEFEMDkwMDI4OEY0QTAwNzRBQ0NBMDAwNDNDMEIwODAwQzQKKzoxMDU4RjAwMDkxNkIzQ0QwMzE2ODAwMTA1MTAwMDAwM0FDQzAwMDA4MkYKKzoxMDU5MDAwMDhGNjUwMDYwQUNDNTAwMDgyNEM0MDAwQzhFNTgwMDBDRTQKKzoxMDU5MTAwMDAzMDBGODA5MDAwMDAwMDAzQzBGMDgwMDk1RUYzQ0NBQTYKKzoxMDU5MjAwMDNDMDIwODAwOTQ0MjNDQkUwMUUyNzAyMTI1QzQwMDAyMDIKKzoxMDU5MzAwMDBFMDAwMEM3MzA4NEZGRkYzQzA2MDgwMDhDQzYzQ0FDNUMKKzoxMDU5NDAwMDNDMEQwODAwOERBRDNDQjQwMENEMzgyMzNDMDEwODAwNkYKKzoxMDU5NTAwMEFDMjczQ0FDMTRFMDAwMDYwMDAwMDAwMDNDMTkwODAwMzUKKzoxMDU5NjAwMDhGMzkzQ0NDMzcyQzAwNDAzQzAxMDgwMEFDMkMzQ0NDOUYKKzoxMDU5NzAwMDEyMDAwMDg1OEY4QjAwNDQ4RjQ4MEUxMDhGOTAwMDQ0REEKKzoxMDU5ODAwMEFFMDgwMDIwOEY1RjBFMThBRTFGMDAyNDNDMTAwODAwRTgKKzoxMDU5OTAwMDk2MTAzQ0MwMEUwMDAwNjAwMDAwMDAwMDI0MDUwMDQwOEUKKzoxMDU5QTAwMEFGNDUwODE0OEY4MzAwNTA4Rjg5MDA0QzAwNzAxODIxNzgKKzoxMDU5QjAwMDAwNjk1MDIzMTk0MDAwMDRBRjgzMDA1MEFGNjMwMDU0QzYKKzoxMDU5QzAwMDhGNjcwMDU0QUY4NzAwNEMxMjAwMDAwQzAwMDAwMDAwRUQKKzoxMDU5RDAwMDhGNDQwMDc0OTM2RDAwODEzNDBFRkEwMDJEQTYwMDA3RTkKKzoxMDU5RTAwMDEwQzAwMDA1MDA4RTE4MjE5Mzc4MDA4MTI0MDIwMUY0NzQKKzoxMDU5RjAwMDAzMDI3ODA0MDFFNDE4MjFBRjYzMDAwQzhGNEMwOTVDQUEKKzoxMDVBMDAwMDhGOTkwMDVDMDE5OTIwMjMxODgwMDAwMzAwMDAwMDAwOUEKKzoxMDVBMTAwMDhGNTAwOTVDQUY5MDAwNUMwRTAwMDA2MjAwMDAwMDAwMzcKKzoxMDVBMjAwMDhGOEIwMDUwOEU0ODAwMTAzQzAxMDgwMEFDMkIzQ0Q0RkEKKzoxMDVBMzAwMDAxMDBGODA5MDAwMDAwMDAzQzFGMDgwMDhGRkYzQ0FDOEIKKzoxMDVBNDAwMDE3RTBGRUZDMjQwNzAwMDY4RjQ1MDAyNDk3NDIwOTA4NTIKKzoxMDVBNTAwMDhGOEEwMDY0OEY5NDAwNTAzQzBGMDAxRjk3ODcwMDU4NzYKKzoxMDVBNjAwMDhGODMwMDU0OEY5MzAwNEMzMDRERkZGRjM1RUVGRjgwNDUKKzoxMDVBNzAwMDAwQUU0ODI0MDAwRDMxQzAzMjMyMDAxMEFGNDYwMDI0ODEKKzoxMDVBODAwMEE0NjcwMDJDQUY0OTAwMjRBRjZBMDA0NEFGNzQwMDUwRjMKKzoxMDVBOTAwMEFGNzMwMDU0NTY0MDAwN0U4RUI4MDAwNDMyMjQwMDQwOUMKKzoxMDVBQTAwMDU0ODAwMDMyOEVCMTAwMDg4RUFDMDAwQzAxODBGODA5RTEKKzoxMDVBQjAwMDAwMDAwMDAwOEZCRjAwMzA4RkI1MDAyQzhGQjQwMDI4OEQKKzoxMDVBQzAwMDhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4NUMKKzoxMDVBRDAwMDAzRTAwMDA4MjdCRDAwMzgzQzA5MDgwMDk1MjkzQ0MwQjgKKzoxMDVBRTAwMDNDMDQwODAwOTQ4NDNDQ0EzQzFGMDgwMDk3RkYzQ0JDNUYKKzoxMDVBRjAwMDk0RjgwMDI0MzEyM0ZGRkY5NEVGMDAyODAwODNDODIxOEQKKzoxMDVCMDAwMDAzM0Y3MDIzMDAxODJDMDAwMDBGNjQwMDI1Q0RGRkVFMkEKKzoxMDVCMTAwMDAxOEQzMDI1MzRBMjgxMDAyNDAzMDgwMEFEMDIwMDBDNjEKKzoxMDVCMjAwMEFEMDYwMDEwQUQwMzAwMThBRDAwMDAxNDBBMDAwOUNFNDgKKzoxMDVCMzAwMDI1MDgwMDFDOTM0NzAxMDk4Rjg4MDAzODAwMDdGRTAwRTQKKzoxMDVCNDAwMDAzRThDODI1QUY1OTAwODA4RjU4MDlBMDhGNTMwOUE0RDYKKzoxMDVCNTAwMEFGQjgwMDEwQUY1ODBFMTQ4RkI0MDAxMEFGNTQwRTEwMzEKKzoxMDVCNjAwMEFGNTMwRTFDMEEwMDA5NDJBRjUzMEUxODAyMjBGODA5NjkKKzoxMDVCNzAwMDAwMDAwMDAwOEVBQzAwMEMwMTgwRjgwOTAwMDAwMDAwNUQKKzoxMDVCODAwMDBBMDAwQTdGOEZCRjAwMzBBNTYwMDAyMEE1NzMwMDIyQTUKKzoxMDVCOTAwMDBBMDAwQTM0QUQ3MzAwMjQzQzAxMDgwMEFDMjAzQ0IwN0MKKzoxMDVCQTAwMDBBMDAwOTZFOEU0MjAwMDAzQzAxMDgwMEFDMjQzQ0IwQTMKKzoxMDVCQjAwMDBBMDAwOTZFOEU0MjAwMDAzQzA5MDgwMDk1MjkzQ0MwOEQKKzoxMDVCQzAwMDNDMUYwODAwOTdGRjNDQ0EzQzE5MDgwMDk3MzkzQ0JDQjEKKzoxMDVCRDAwMDk0RUYwMDI0MzEyNEZGRkYwM0U0QzAyMTAzMTk3MDIzNTQKKzoxMDVCRTAwMDAwMEY2NDAwMjVDREZGRjIwMThEMjgyNUFDNDUwMDBDODcKKzoxMDVCRjAwMDI0MDIwODAwQUQwMjAwMTRBRDAwMDAxMDBBMDAwOUNFMTYKKzoxMDVDMDAwMDI1MDgwMDE4OTRFNjAwMjQ5NEUzMDAyODNDMDkwODAwQzUKKzoxMDVDMTAwMDk1MjkzQ0MwMDAwNjI0MDAwMDAzRkMwMDM0OTk4MTAwNTMKKzoxMDVDMjAwMDM3RjgwODAwQUQxOTAwMENBRDE4MDAxMDBBMDAwOUNFQjUKKzoxMDVDMzAwMDI1MDgwMDE0MTQ2MEZFRUQwMDAwMDAwMDk0RUYwMDI0MUQKKzoxMDVDNDAwMDNDMDkwODAwOTUyOTNDQzAwMDBGNzQwMDM1Q0QwODAwQzAKKzoxMDVDNTAwMEFEMEQwMDBDMEEwMDA5Q0UyNTA4MDAxMDkzNTIwMTA5NzEKKzoxMDVDNjAwMDAwMDAyODIxMEUwMDA2MDAzMjQ0MDBGRjhGQkYwMDMwRTQKKzoxMDVDNzAwMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwODIKKzoxMDVDODAwMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODI3QkQwMDM4NUEKKzoxMDVDOTAwMDAzMDBGODA5MDAwMDAwMDAwQTAwMEE3OTMyMjQwMDQwREQKKzoxMDVDQTAwMDEyMDBGRjY5MDAwMDAwMDA4RjU0MEUxNDhGOTIwMDQ0MTAKKzoxMDVDQjAwMEFFNTQwMDIwOEY1MzBFMUMwQTAwMEE2M0FFNTMwMDI0MUEKKzoxMDVDQzAwMDhGODIwMDFDMDA4MDQwMjEzQzA0MDEwMDkwNDcwMDg1MjkKKzoxMDVDRDAwMDMwRTMwMDIwMTA2MDAwMDkwMDAwMDAwMDNDMDcwODAwQ0QKKzoxMDVDRTAwMDhDRTczQ0Q0OEY4MzAwMTgwMEUzMjAyMzA0ODAwMDA4NTUKKzoxMDVDRjAwMDkzODkwMDA0MTRFMzAwMDMwMTAwMjAyMTAzRTAwMDA4NUQKKzoxMDVEMDAwMDAwODAxMDIxM0MwNDAxMDAwM0UwMDAwODAwODAxMDIxMDUKKzoxMDVEMTAwMDExMjAwMDBCMDA2NzM4MjM4RjhDMDAyMDI0MDkwMDM0RTkKKzoxMDVEMjAwMDkxOEIwMEJDMzE2QTAwMDI1MTQwMDAwMTI0MDkwMDMwMEYKKzoxMDVEMzAwMDAwRTk2ODJCMTVBMEZGRjEwMTAwMjAyMTAwRTkzODIzQkMKKzoxMDVENDAwMDI0MTlGRkZDMDBCOUMwMjQwMEY5NzgyNDAwRjg3MDJCNTYKKzoxMDVENTAwMDE1QzBGRkVBMDFFODIwMjEzMEMyMDAwMzAwMDIxODIzMjkKKzoxMDVENjAwMDE0QzAwMDEyMzA2OTAwMDMwMDAwMzAyMTAwQTk3MDIxMjYKKzoxMDVENzAwMDAxQzY2ODIxMDBFRDYwMkIxMTgwRkZFMDNDMDQwMTAwQUEKKzoxMDVEODAwMDJEMkYwMDAxMDAwNjQ4MkIwMTA1MzgyMTAxRTkzMDI0QTAKKzoxMDVEOTAwMDE0QzBGRkRBMjRFNEZGRkMyNDE5RkZGQzAwQjlDMDI0N0UKKzoxMDVEQTAwMDAzMDgyMDIxMDNFMDAwMDgwMDgwMTAyMThGOEIwMDIwRDEKKzoxMDVEQjAwMDI0MDYwMDA0OTE2QTAwQkMzMTQ0MDAwNDE0ODBGRkVDMDYKKzoxMDVEQzAwMDAwQTk3MDIxMEEwMDBCMkQwMDAwMzAyMTI3QkRGRkU4M0IKKzoxMDVERDAwMEFGQkYwMDEwOEY0NjAxMDA5MzRBMDEwOTNDMUYwODAwMjUKKzoxMDVERTAwMDhGRkYwMDkwMjQwN0ZGODAzMTRGMDBGRjMxRTgwMDdGRDQKKzoxMDVERjAwMDAwMDg2MTQwMDNFNkM4MjEwMzJDQzAyMTI3MDkwMTIwQzcKKzoxMDVFMDAwMDAxMjc3MDI0M0MwMTA4MDBBMDJGM0QxMEFGNEUwODBDNjQKKzoxMDVFMTAwMDNDMEQwODAwOERBRDAwOTAzQzA0MDA4MDM0ODIwMDAzRUUKKzoxMDVFMjAwMDAxQTY1ODIxMDE2QzE4MjEyNDY1MDEyMDMwQUEwMDc4QjAKKzoxMDVFMzAwMDAxNDI0MDI1QUY0ODA4MUMzQzFGMDgwMDhGRkYwMDkwMUUKKzoxMDVFNDAwMDhGODgwMDQwMDNFNkMwMjEzMzE5MDAwNzAzMDc0ODI0NjgKKzoxMDVFNTAwMDAzM0E3ODIxQUY0OTAwMjgyNUU5MDlDMDk1MkUwMDAyQjAKKzoxMDVFNjAwMDNDMEQwODAwOERBRDAwOEMzQzBBMDgwMDhENEEwMDkwNjYKKzoxMDVFNzAwMDMxQ0MzRkZGMDFBNjE4MjEwMDBDNTk4MDAwNkIyODIxNkUKKzoxMDVFODAwMDAwQTcyMDI0QUY0NDAwMkM5NTIyMDAwMjNDMUYwODAwRUMKKzoxMDVFOTAwMDhGRkYwMDhDOTEwNzAwODUzMDU5M0ZGRjAzRTY3ODIxODIKKzoxMDVFQTAwMDAwMTlDMTgwMDE0NjcwMjEwMUY4NjgyMTMxQ0MwMDdGQzIKKzoxMDVFQjAwMDMxQUIwMDdGMDE5QTI4MjEwMTdBNTAyMTNDMDMwMDBDNkMKKzoxMDVFQzAwMDNDMDQwMDBFMDBBMzI4MjEwMTQ0MTAyMTMwRTYwMDIwRUMKKzoxMDVFRDAwMDI3NDcwOTgwQUY4MjAwMkNBRjg4MDAxQ0FGODkwMDI0QkYKKzoxMDVFRTAwMEFGODUwMDIwMTBDMDAwMDZBRjg3MDAyODhEMDIwMDUwNEIKKzoxMDVFRjAwMDhDQTQwMTBDMDA0NDMwMjMxOEMwMDA3NzAwMDAwMDAwN0YKKzoxMDVGMDAwMDkxMEMwMDg1MjQwREZGREYwMThEMzgyNEExMDcwMDg1NDkKKzoxMDVGMTAwMDhGOEIwMDFDOEY4OTAwMjQ4Rjg3MDAyODhENjUwMDRDOTMKKzoxMDVGMjAwMEFGODUwMDE4OTEyRjAwMEQzMUVFMDAyMDExQzAwMDE3MzEKKzoxMDVGMzAwMDAwMDAwMDAwMjQwOTAwMDFBMzg5MDAwNEFGODAwMDBDQzgKKzoxMDVGNDAwMDhDRTQwMDI0OEY4NTAwMEMyNDBBMDAwOEFGODAwMDA4MzAKKzoxMDVGNTAwMEFGODAwMDEwM0MwMTA4MDBBNDJBM0NCRTNDMDEwODAwQjAKKzoxMDVGNjAwMEE0MjAzQ0QyMEUwMDBCMDEwMDAwMzAyMThGODUwMDI0QkMKKzoxMDVGNzAwMDhGQkYwMDEwQUY4MjAwMTQ5MEE4MDAwRDI3QkQwMDE4M0QKKzoxMDVGODAwMDAwMDgzOTQyMDNFMDAwMDgzMEUyMDAwMTkxM0YwMDAyQkUKKzoxMDVGOTAwMDI0MTgwMDAxMzNGOTAwRkYwMDE5MjE4MjEwOTgwMDM5RkMKKzoxMDVGQTAwMDI0MDgwMDAyMTA4ODAwNUI4Rjg2MDAyQzhDRTUwMDI0RkEKKzoxMDVGQjAwMDE0QTAwMDFCOEY5RjAwMjA5MTIyMDAwMDI0MEEwMDA1REUKKzoxMDVGQzAwMDMwNDYwMDNGMTBDQTAwNDcyNDA0MDAwMThGODYwMDA4QjUKKzoxMDVGRDAwMEEzODQwMDA0QUY4NjAwMTBBRjg2MDAwQzhDRTQwMDI0N0MKKzoxMDVGRTAwMDhGODUwMDBDMjQwQTAwMDgzQzAxMDgwMEE0MkEzQ0JFNEUKKzoxMDVGRjAwMDNDMDEwODAwQTQyMDNDRDIwRTAwMEIwMTAwMDAwMDAwNzAKKzoxMDYwMDAwMDhGODUwMDI0OEZCRjAwMTBBRjgyMDAxNDkwQTgwMDBENzAKKzoxMDYwMTAwMDI3QkQwMDE4MDAwODM5NDIwM0UwMDAwODMwRTIwMDAxMDMKKzoxMDYwMjAwMDhDRjgwMDA4OENGOTAwMjQ4RkVFMDBDNEEzODAwMDA0RDMKKzoxMDYwMzAwMDhDRTQwMDI0QUY4RTAwMEM4Rjg1MDAwQzhGODYwMDA4NDYKKzoxMDYwNDAwMDAzMTk3ODIzMjQwQTAwMDhBRjhGMDAxMDNDMDEwODAwRDAKKzoxMDYwNTAwMEE0MkEzQ0JFM0MwMTA4MDBBNDIwM0NEMjBFMDAwQjAxNDcKKzoxMDYwNjAwMDAwMDAwMDAwOEY4NTAwMjQ4RkJGMDAxMEFGODIwMDE0NTUKKzoxMDYwNzAwMDkwQTgwMDBEMjdCRDAwMTgwMDA4Mzk0MjAzRTAwMDA4NzEKKzoxMDYwODAwMDMwRTIwMDAxOTEyMzAwMDAzMDYyMDAzRjEwNDQwMDI3RkQKKzoxMDYwOTAwMDhGODUwMDIwOENFNDAwMjQxNDgwMDAyMTAwMDAwMDAwODMKKzoxMDYwQTAwMDhEMkUwMDE4M0MxODdGRkY4Rjg1MDAyMDM3MEZGRkZGRDMKKzoxMDYwQjAwMDAxQ0YxODI0QUY4MzAwMDg4RjlGMDAwODhDQTgwMDg0QUMKKzoxMDYwQzAwMDAzRThDODJCMTcyMDAwMDIwM0UwMjAyMThDQTQwMDg0RTEKKzoxMDYwRDAwMDBBMDAwQkJDQUY4NDAwMDg4Q0EzMDEwQzBBMDAwQjlBQzkKKzoxMDYwRTAwMEFGODMwMDE4OEQyQzAwMTg4Rjg2MDAwODNDMEQ3RkZGQjEKKzoxMDYwRjAwMDhGODkwMDIwMzVBM0ZGRkYwMTgzNTgyNDI0MDQwMDAxNjkKKzoxMDYxMDAwMEFGOEIwMDEwQUQyMDAwQ0NBMzg0MDAwNDBBMDAwQkM4QTQKKzoxMDYxMTAwMEFGODYwMDBDOENDQTAwMTQwQTAwMEJCQ0FGOEEwMDA4QzIKKzoxMDYxMjAwMDhDQTMwMEM4MEEwMDBCRkZBRjgzMDAwODhGODQwMDJDRUIKKzoxMDYxMzAwMDhDQUMwMDY0OEM4RDAwMTQwMThENTgyQjExNjAwMDA0MTAKKzoxMDYxNDAwMDAwMDAwMDAwOENBMjAwNjQwQTAwMEJGRkFGODIwMDA4NzAKKzoxMDYxNTAwMDhDODIwMDE0MEEwMDBCRkZBRjgyMDAwODhGODUwMDBDQjAKKzoxMDYxNjAwMDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDE0QTAwMDA3QjcKKzoxMDYxNzAwMEFGQjAwMDEwOEY4NjAwMjQyNDAyMDAwNTkwQzQwMDAwRjgKKzoxMDYxODAwMDMwODMwMDNGMTA2MjAwQjY4Rjg0MDAyMDhGOTEwMDA4OUEKKzoxMDYxOTAwMDAwQTA4MDIxOEY4QzAwMjgzQzA1MDgwMDhDQTUzQ0IwMTUKKzoxMDYxQTAwMDhEOEIwMDA0MzE2NjNGRkYwMEM1NTAyQjU1NDAwMDAxMjgKKzoxMDYxQjAwMDAwQzAyODIxOTM4RDAwMDQxMUEwMDA3MzAwQjBGODJCQkIKKzoxMDYxQzAwMDhGOTgwMDIwMjQwNDAwMzQ5MzBGMDBCQzMxRUUwMDAyQUQKKzoxMDYxRDAwMDUxQzAwMDAxMjQwNDAwMzAwMEE0QzgyQjE3MjAwMEQxQjYKKzoxMDYxRTAwMDAwMDAwMDAwMDBBNDI4MjMwMEIwRjgyQjNDMDEwODAwQTgKKzoxMDYxRjAwMEE0MjQzQ0JDMTdFMDAwNjgwMjAwMjAyMTNDMDMwODAwRjYKKzoxMDYyMDAwMDhDNjMzQ0FDMDA4MzEwMkI1NDQwMDAwMTAwODAxODIxQUIKKzoxMDYyMTAwMDhGODgwMDI0M0MwMTA4MDBBQzIzM0NCNDAwMDA0ODIxRDYKKzoxMDYyMjAwMDkxMDQwMDBEMzA4MzAwMjA1MDYwMDAwMThGNDkwRTE4NEEKKzoxMDYyMzAwMDhGODMwMDE0MDEyMzM4MkIxMEUwMDA1OTAwMDAwMDAwNjgKKzoxMDYyNDAwMDNDMDQwODAwOEM4NDNDQjQwMDg5NTgyMTAwNkI1MDJCMUUKKzoxMDYyNTAwMDExNDAwMDU2MDA5MDYwMkIwMDY5MzAyMzAwQzAyMDIxQkYKKzoxMDYyNjAwMDNDMDEwODAwQUMyNjNDQjQxMjAwMDAwMzI0MUZGRkZDRDQKKzoxMDYyNzAwMDEwOTAwMDhBMzIyNzAwMDMwMDlGQzgyNDNDMDEwODAwQzgKKzoxMDYyODAwMEFDMzkzQ0I0M0MwMTA4MDBBNDIwM0NEMjhGODQwMDBDMDMKKzoxMDYyOTAwMDEyMDQwMDA3OEY4MzAwMjBBRjkxMDAwODAyMDAyMDIxMjQKKzoxMDYyQTAwMDhDNzEwMENDQUY5MDAwMEMyNjMwMDAwMUFDNzAwMENDOUIKKzoxMDYyQjAwMDNDMDIwODAwOEM0MjNDQjQ4RjhBMDAxMDI0MDcwMDE4NkUKKzoxMDYyQzAwMDAwODIyMDIzMDE0MjI4MjNBRjg0MDAwQzEwODAwMDAyQUEKKzoxMDYyRDAwMEFGODUwMDEwMjQwNzAwMTA4Rjg2MDAxQzNDMDEwODAwQzkKKzoxMDYyRTAwMEEwMjczQ0QwMjQwNzAwNDA5MENDMDA4NTMxOEIwMEMwMTMKKzoxMDYyRjAwMDExNjcwMDQwOEY4RDAwMTQxNEEwMDAxNTAwMDAyMDIxQUMKKzoxMDYzMDAwMDkzNEEwMTA5OEY0MjA5NzQzMTQ1MDBGRjAwMDIyNjAyQjkKKzoxMDYzMTAwMDI0QTMwMDAxMzA5MDAwN0YzMDcxMDA3RjEyMzAwMDdBOUEKKzoxMDYzMjAwMDI0MDdGRjgwQTBDMzAwODMzQzA5MDgwMDhEMjkzQ0NDRDIKKzoxMDYzMzAwMDhGODgwMDI0MjQwRDAwMDIzNTJDMDAwODNDMDEwODAwNDEKKzoxMDYzNDAwMEEwMkQzRDExM0MwMTA4MDBBQzJDM0NDQzI0MDQwMDEwRDUKKzoxMDYzNTAwMDkxMEUwMDBEMzFDNjAwMjAxMEMwMDAwNTAwODAxODIxRUMKKzoxMDYzNjAwMDI0MDgwMDAxM0MwMTA4MDBBQzI4M0NCNDM0ODMwMDAxM0YKKzoxMDYzNzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwNjAxMDIxODMKKzoxMDYzODAwMDAzRTAwMDA4MjdCRDAwMjAzQzAxMDgwMEE0MjAzQ0JDMUQKKzoxMDYzOTAwMDEzRTBGRjlBMDIwMDIwMjEwQTAwMEM1MDAwQTAyMDIxRTcKKzoxMDYzQTAwMDNDMDQwODAwOEM4NDNDQjQwMDkwNjAyQjExODBGRkFFNEMKKzoxMDYzQjAwMDAwMDAwMDAwM0MwRjA4MDA5NUVGM0NCQzAxRTQ3MDIxOTgKKzoxMDYzQzAwMDAxQzY2ODJCMTFBMDAwMDcyQzgyMDAwNDNDMUY2MDAwNEUKKzoxMDYzRDAwMDhGRjk1NDA0MzMzODAwM0YxNzAwRkZFNTI0MDMwMDQyQ0YKKzoxMDYzRTAwMDJDODIwMDA0MTA0MEZGQTAyNDAzMDA0MjBBMDAwQ0FFREYKKzoxMDYzRjAwMDhGQkYwMDE4MTUyREZGQzAwMDAwMDAwMDhDREYwMDc0NTcKKzoxMDY0MDAwMDNDMDM4MDAwMjQwNUZGODAwM0UzQzgyNUFDRDkwMDc0NTkKKzoxMDY0MTAwMDkwRDgwMDg1MjQwRTAwMDQyNDA0MDAxMDMzMEYwMDNGQTAKKzoxMDY0MjAwMDAxRTU0MDI1QTBDODAwODU4Rjg4MDAyNDNDMDEwODAwQjQKKzoxMDY0MzAwMEEwMkUzRDExMjQwMzAwMDE5MTA2MDAwRDMwQzkwMDIwNUIKKzoxMDY0NDAwMDE1MjAwMDAzMDAwMDAwMDAzQzAzMDgwMDhDNjMzQ0I0RUUKKzoxMDY0NTAwMDNDMDEwODAwQUMyMzNDQUMwQTAwMENBNTAwMDAwMDAwODUKKzoxMDY0NjAwMDhGODcwMDEwOEM4ODAwODQwMEU4MjgyQjE0QTAwMDAyN0QKKzoxMDY0NzAwMDAwRTA4ODIxOEM5MTAwODQyNDA5MDAwMUEzODkwMDA0OTQKKzoxMDY0ODAwMDhGNDQwRTE4MDIyMDI4MjEwRTAwMEIwMTAyMjAzMDIxMUIKKzoxMDY0OTAwMDAyMjA4MDIxMEEwMDBDMzZBRjgyMDAxNDAwMDcxODIzNjYKKzoxMDY0QTAwMDMwNjYwMDAzM0MwMTA4MDBBNDI2M0NEMjEyMjAwMDA1RkYKKzoxMDY0QjAwMDhGOEMwMDIwOTE4QjAwQkMzMTZBMDAwNDE1NDAwMDE1QzAKKzoxMDY0QzAwMDI0Q0QwMDA0M0MwRjA4MDA5NUVGM0NEMjAxRTQ3MDIxN0MKKzoxMDY0RDAwMDAwQUUzMDJCNTBDMEZGNkU4Rjg0MDAwQzJDODUwMDA1NjEKKzoxMDY0RTAwMDE0QTBGRkEzMjQwMzAwNDIzMDk4MDAwMzE3MDAwMDAyMDkKKzoxMDY0RjAwMDAwOTgxODIzMjQ4M0ZGRkMzQzAxMDgwMEFDMjMzQ0I0MjMKKzoxMDY1MDAwMDBBMDAwQzcyMDAwMDAwMDAwMEE3NTgyNDBBMDAwQzlBMzAKKzoxMDY1MTAwMDAxNjcxODI2M0MwMTA4MDBBNDJEM0NEMjBBMDAwRDAyOTgKKzoxMDY1MjAwMDAwMDAwMDAwM0MwMTA4MDBBQzIwM0NCNDBBMDAwQ0FEQTcKKzoxMDY1MzAwMDI0MDMwMDQyOEY4MzAwMTAxNDYwMDAwNzAwMDAxMDIxMjQKKzoxMDY1NDAwMDhGODgwMDI0MjQwNTAwMDU5MTA2MDAwMDMwQzQwMEZGNTgKKzoxMDY1NTAwMDEwODUwMDAzMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwQjgKKzoxMDY1NjAwMDkxMEEwMDE4MzE0OTAwRkYwMDA5MzlDMjE0RTBGRkZBMEUKKzoxMDY1NzAwMDhGODUwMDFDM0MwNDA4MDA5NDg0M0NCQzNDMDMwODAwNEMKKzoxMDY1ODAwMDhDNjMzQ0Q0M0MxOTA4MDA4RjM5M0NCNDNDMEYwODAwQTQKKzoxMDY1OTAwMDk1RUYzQ0QyMDA2NEMwMjE4Q0FEMDA1NDAzMTk3MDIxRUEKKzoxMDY1QTAwMDAxQ0Y2MDIxMDE4RDU4MjMxOTYwMDAxRDAwMDAwMDAwRkIKKzoxMDY1QjAwMDkxMEUwMDFDOEY4QzAwMkM5NzRCMEUxMDMxQ0QwMEZGREMKKzoxMDY1QzAwMDhEODUwMDA0MDE2RDMwMjM4RDg4MDAwMDMwQ0VGRkZGRTMKKzoxMDY1RDAwMDAwMEU1MTAwMDBBQUM4MjEwMDAwMzgyMTAxMDcyMDIxMjcKKzoxMDY1RTAwMDAzMkExODJCMDA4M0MwMjFBRDk5MDAwNEFEOTgwMDAwNDgKKzoxMDY1RjAwMDkxOEYwMDBBMDFDRjY4MjFBMThEMDAwQThGODgwMDJDOUQKKzoxMDY2MDAwMDk3NEIwRTEyQTUwQjAwMDg5NTBBMDAzODI1NDkwMDAxOEEKKzoxMDY2MTAwMEE1MDkwMDM4OTEwNzAwMEQzNEU2MDAwOEExMDYwMDBEMTkKKzoxMDY2MjAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMDkzODcwMDA0OUUKKzoxMDY2MzAwMDhGOEYwMDI0OEZBRDAwMTQzQzBFN0ZGRjhGODkwMDBDREMKKzoxMDY2NDAwMDM1QzhGRkZGQUZCRjAwMUNBRkIwMDAxODAxQTgxODI0NjkKKzoxMDY2NTAwMDkxRUEwMDBEMDAwNzE3QzAzQzFGQkZGRjAwNjI1ODI1REMKKzoxMDY2NjAwMDJEMkUwMDAxOEY5MDAwMTgzN0Y5RkZGRjNDMTgwODAwMEQKKzoxMDY2NzAwMDhGMTgzQ0Q0M0MwRjA4MDA5NUVGM0NDQTAxNzk2ODI0ODAKKzoxMDY2ODAwMDAwMEU0NzgwM0MwN0VGRkYzQzA1RjBGRjAxQTgxODI1RUUKKzoxMDY2OTAwMDMxNDkwMDIwMzRFMkZGRkYzNEFDRkZGRjAzMTA1ODIzRTAKKzoxMDY2QTAwMDI3QTUwMDEwMjQwNjAwMDIyNUVBMDAwMjAwNjIxODI0MzMKKzoxMDY2QjAwMDAwODA4MDIxMTUyMDAwMDIwMDAwNDAyMThGNDgwRTFDMjAKKzoxMDY2QzAwMEE3QUEwMDEyMDU2MDAwMzcyNDA3MDAwMDMwRkYwMEZGNzIKKzoxMDY2RDAwMDAwMUZDRjAwOEY4QjAwMUMwMDc5MzgyNUFGQTcwMDE0NTYKKzoxMDY2RTAwMDkxNkYwMDg1M0MwODA4MDA5MTA4M0NEMTNDMThERkZGMDEKKzoxMDY2RjAwMDMxRUUwMEMwMzcwQUZGRkYwMDBFMTgyQjNDMUYwODAwQzgKKzoxMDY3MDAwMDk3RkYzQ0M0MDBFQTY4MjRBM0E4MDAxMTAwMDMxNzQwQzcKKzoxMDY3MTAwMDAxQTI0ODI1OEZCOTAwMTBBRkE5MDAxNDNDMEEwODAwNTcKKzoxMDY3MjAwMDkxNEEzQ0QzQTdCRjAwMTY4RkE4MDAxNDAzMkNDMDI0QTUKKzoxMDY3MzAwMDNDMEIwMTAwM0MwRjBGRkYwMzBCMTgyNTMxNDcwMDAzRjIKKzoxMDY3NDAwMDM1RUVGRkZGMDEwQzY4MjQwMDA3MTYwMDAwNkVGODI0RTgKKzoxMDY3NTAwMDNDMDk3MDAwMDFBMkM4MjUwM0U5NTgyNUFGQjkwMDE0MEYKKzoxMDY3NjAwMEFGQUIwMDEwMEUwMDAwNzZBM0EwMDAxNThGOEMwMDI0QTQKKzoxMDY3NzAwMDI2MDIwMDA4OTE4NjAwMEQzMEM0MDAyMDEwODAwMDA2MUIKKzoxMDY3ODAwMDhGQkYwMDFDM0MwNTA4MDA5NEE1M0NDMDI0QjBGRkZGNEYKKzoxMDY3OTAwMDNDMDEwODAwQTQzMDNDQzA4RkIwMDAxODAzRTAwMDA4QTIKKzoxMDY3QTAwMDI3QkQwMDIwOEY5ODAwMTQwMTE4NTAyQjU1NDBGRkM3QkIKKzoxMDY3QjAwMDI0MDcwMDAxMEEwMDBEODUzMEZGMDBGRjkzODIwMDA0Q0EKKzoxMDY3QzAwMDI3QkRGRkUwQUZCRjAwMTgxMDQwMDAwRjAwODA1MDIxMzAKKzoxMDY3RDAwMDhGODgwMDI0MjQwQjAwMDU4Rjg5MDAwODkxMDcwMDAwOTIKKzoxMDY3RTAwMDhGODQwMDIwMDEwMDI4MjEzMEUzMDAzRjhGODYwMDJDOTkKKzoxMDY3RjAwMDEwNkIwMDA4MDAwMDM4MjFBRkE5MDAxMDBFMDAwNDBFMzUKKzoxMDY4MDAwMEFGQUEwMDE0QTM4MDAwMDQ4RkJGMDAxODAzRTAwMDA4QTMKKzoxMDY4MTAwMDI3QkQwMDIwOEQxOTAwMTgzQzBGMDgwMDhERUYzQ0I0RjcKKzoxMDY4MjAwMDhGOTgwMDEwM0MwMjdGRkY4RDA4MDAxNDM0NUZGRkZGM0IKKzoxMDY4MzAwMDAzM0Y2ODI0MDFGODcwMjEwMUFFNjAyMzAxODgzODIxRUMKKzoxMDY4NDAwMEFGQTkwMDEwMEUwMDA0MEVBRkFBMDAxNDBBMDAwREQzNjkKKzoxMDY4NTAwMEEzODAwMDA0OEY4NzAwMjQzQzA1MDgwMDk0QTUzQ0QyNDcKKzoxMDY4NjAwMDNDMDIwODAwOEM0MjNDQ0M5MEU2MDAwRDAwMDUyNDAwNjAKKzoxMDY4NzAwMDMwQzMwMDIwMTA2MDAwMkMwMDQ0NDAyNThGODUwMDFDOTAKKzoxMDY4ODAwMDAwMDA2MDIxMjQwQjAwMDE5MEEzMDA4NTAwMDA0ODIxMzYKKzoxMDY4OTAwMDI0MEEwMDAxM0MwRjgwMDAzNUVFMDA3MDhEQzcwMDAwMTcKKzoxMDY4QTAwMEFGODcwMDMwOEY1ODAxNzgwNzAwRkZGRTNDMDM4MDAwNUYKKzoxMDY4QjAwMDM0NzkwMDcwOEYzODAwMDAzQzA1MDgwMDhDQTUwMDc0MDYKKzoxMDY4QzAwMDNDMEQwODAwOERBRDAwNzAwMzA3NzgyMzAwQUYzODIxMjAKKzoxMDY4RDAwMDAwMDAxMDIxMDBFRjMwMkIwMUEyMjAyMTAwODYxODIxOUEKKzoxMDY4RTAwMDNDMDEwODAwQUMyNzAwNzQzQzAxMDgwMEFDMjMwMDcwOTgKKzoxMDY4RjAwMEFGNEIwMTQ4M0MxOTA4MDA4RjM5M0NENEE3NDkwMTQ0RUIKKzoxMDY5MDAwMEE3NEEwMTQ2QUY1OTAxNEMzQzBCMDgwMDkxNkIzQ0QxQTIKKzoxMDY5MTAwMEEzNEIwMTUyQUY0ODAxNTQzQzA4MTAwMEE3NEMwMTU4NEEKKzoxMDY5MjAwMDAzRTAwMDA4QUY0ODAxNzg4RjRCMEUxQzNDMEEwODAwQkEKKzoxMDY5MzAwMDhENEEzQ0I0OTc0OTBFMTY5NzREMEUxNDAxNDU2MDIxQkYKKzoxMDY5NDAwMDMxMkFGRkZGMEEwMDBERjYzMUE5RkZGRjhGODMwMDI0RDMKKzoxMDY5NTAwMDkwNjQwMDBEMzA4MjAwMjAxMDQwMDAyOTAwMDAwMDAwRUIKKzoxMDY5NjAwMDAwMDA0ODIxMDAwMDUwMjEwMDAwNDAyMTNDMDc4MDAwMjkKKzoxMDY5NzAwMDM0RUIwMDcwOEQ2NzAwMDBBRjg3MDAzMDhGNEMwMTc4REEKKzoxMDY5ODAwMDA1ODBGRkZFM0MwRDgwMDAzNUFDMDA3MDhEOEIwMDAwNTMKKzoxMDY5OTAwMDNDMDUwODAwOENBNTAwNzQzQzA0MDgwMDhDODQwMDcwNDEKKzoxMDY5QTAwMDAxNjczMDIzMDBBNjc4MjEwMDAwMTAyMTAxRTZDODJCRTIKKzoxMDY5QjAwMDAwODJDMDIxMDMxOTcwMjEzQzAxMDgwMEFDMkYwMDc0MzMKKzoxMDY5QzAwMDNDMDEwODAwQUMyRTAwNzBBRjQ5MDE0ODNDMEQwODAwQTYKKzoxMDY5RDAwMDhEQUQzQ0Q0QTc0ODAxNDQyNDA5MDA0MEE3NEEwMTQ2OTQKKzoxMDY5RTAwMDNDMDgxMDAwMjQwQUZGOTFBRjREMDE0Q0EzNEEwMTUyMEMKKzoxMDY5RjAwMEFGNDkwMTU0QTc0MDAxNTgwM0UwMDAwOEFGNDgwMTc4QUYKKzoxMDZBMDAwMDhGNDkwRTE4OTc0NjBFMTI5NzQ1MEUxMDMwQ0FGRkZGOTkKKzoxMDZBMTAwMDBBMDAwRTJDMzBBOEZGRkY4RjgzMDAyNDI3QkRGRkY4NEIKKzoxMDZBMjAwMDkwNjQwMDBEMzA4MjAwMjAxMDQwMDAzQTAwMDAwMDAwMDkKKzoxMDZBMzAwMDI0MEIwMDAxMDAwMDQ4MjEyNDBBMDAwMTNDMDg4MDAwQ0EKKzoxMDZBNDAwMDM1MDcwMDcwOENFMzAwMDBBRjgzMDAzMDhGNEMwMTc4NzUKKzoxMDZBNTAwMDA1ODBGRkZFM0MwRTgwMDAzQzA0MDgwMDkwODQzRDEwNDEKKzoxMDZBNjAwMDM1QzcwMDcwOENFQzAwMDAzQzA1MDgwMDhDQTUwMDc0NTQKKzoxMDZBNzAwMEEzQTQwMDAzM0MxOTA4MDA4RjM5MDA3MDhGQUQwMDAwRkIKKzoxMDZBODAwMDAxODMzMDIzMDBBNjM4MjEwMDAwMTAyMTAzMjI3ODIxNDEKKzoxMDZBOTAwMDAwRTZDMDJCMDFGODYwMjEwMUFFNDAyNUFGQTgwMDAwNDAKKzoxMDZBQTAwMDNDMDEwODAwQUMyNzAwNzQzQzAxMDgwMEFDMkMwMDcwQ0QKKzoxMDZBQjAwMDkzNDYwMTBBM0MwNDA4MDA5MDg0M0QxMUEzQTAwMDAyMDMKKzoxMDZBQzAwMEEzQTYwMDAxOEZBMzAwMDAzQzA1ODBGRjMwOTkwMDdGNDIKKzoxMDZBRDAwMDM0QTJGRkZGMDA2Mjc4MjQwMDE5QzYwMDAxRjg3MDI1NzcKKzoxMDZBRTAwMDI0MEQzMDAwQUY0RTAxNEMyN0JEMDAwOEFGNEQwMTU0QkUKKzoxMDZBRjAwMEE3NDAwMTU4QUY0QjAxNDhBNzQ5MDE0NEE3NEEwMTQ2QTYKKzoxMDZCMDAwMDNDMDkxMDAwMjQwQUZGODBBMzRBMDE1MjAzRTAwMDA4NTgKKzoxMDZCMTAwMEFGNDkwMTc4OEY0QjBFMTg5NzQ2MEUxMjk3NDUwRTEwMEQKKzoxMDZCMjAwMDMwQ0FGRkZGMEEwMDBFNjAzMEE5RkZGRjhGODUwMDFDRUUKKzoxMDZCMzAwMDI0MDIwMDgwOTBBNDAwODUzMDgzMDBDMDEwNjIwMDA1MEMKKzoxMDZCNDAwMDhGODYwMDIwOEY4ODAwMDg4Rjg3MDAwQ0FDQzgwMEM4OTMKKzoxMDZCNTAwMEFDQzcwMEM0MDNFMDAwMDgwMDAwMDAwMDNDMEEwODAwQzUKKzoxMDZCNjAwMDI1NEEzODkwM0MwOTA4MDAyNTI5Mzk1QzNDMDgwODAwNzIKKzoxMDZCNzAwMDI1MDgyRDEwM0MwNzA4MDAyNEU3M0E3MDNDMDYwODAwNjEKKzoxMDZCODAwMDI0QzYzNzAwM0MwNTA4MDAyNEE1MzQ3ODNDMDQwODAwREUKKzoxMDZCOTAwMDI0ODQzMEEwM0MwMzA4MDAyNDYzMzc5ODNDMDIwODAwOUEKKzoxMDZCQTAwMDI0NDIzNTZDM0MwMTA4MDBBQzJBM0M5MDNDMDEwODAwQjIKKzoxMDZCQjAwMEFDMjkzQzhDM0MwMTA4MDBBQzI4M0M4ODNDMDEwODAwMTYKKzoxMDZCQzAwMEFDMjczQzk0M0MwMTA4MDBBQzI2M0NBNDNDMDEwODAwRTYKKzoxMDZCRDAwMEFDMjUzQzlDM0MwMTA4MDBBQzI0M0M5ODNDMDEwODAwREUKKzoxMDZCRTAwMEFDMjMzQ0E4M0MwMTA4MDBBQzIyM0NBMDAzRTAwMDA4MTgKKzowNDZCRjAwMDAwMDAwMDAwQTEKKzowMDAwMDAwMUZGCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wOS00LjYuMTcuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTQuNi4xNy5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjY3YzY2Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTQuNi4xNy5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsNTgxNiArMCwwIEBACi06MTAwMDAwMDAwODAwMDBGODA4MDAwMDAwMDAwMDRBQzgwMDAwMDBDODBFCi06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNEFDOEM2Ci06MTAwMDIwMDAwMDAwMDAzMDAwMDA0QjkwMDgwMDAwODAwODAwMDAwMDM1Ci06MTAwMDMwMDAwMDAwNTNBODAwMDA0QkMwMDgwMDU1NDAwMDAwMDA4NDk5Ci06MTAwMDQwMDAwMDAwOUY2ODA4MDA1M0E4MDAwMDAxNkMwMDAwOUZFQ0FFCi06MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDc5MDgwMDAwQTE1ODBECi06MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNzkwODA3Ci06MTAwMDcwMDAwMDAwMDEyNDAwMDExQTYwMDgwMDA0ODgwODAwMDQwMDQwCi06MTAwMDgwMDAwMDAwMTNBNDAwMDExQjg0MDAwMDAwMDAwMDAwMDAwMDE5Ci06MTAwMDkwMDAwMDAwMDAwMDA4MDAxN0E0MDAwMDAwMDQwMDAxMkYyODQxCi06MTAwMEEwMDAwODAwMDA5ODA4MDAwMDAwMDAwMDNBRkMwMDAxMkYyQzE2Ci06MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwM0FGQzAyCi06MDgwMEMwMDAwMDAwMDAzMDAwMDE2QTI4NzUKLTowODAwQzgwMDBBMDAwMDNFMDAwMDAwMDBFOAotOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM0MkUzNjJFMzFERAotOjEwMDBFMDAwMzYwMDAwMDAwNDA2MTAwMjAwMDAwMDAwMDAwMDAwMDNCQgotOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNwotOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDE0RAotOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNwotOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgotOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwMDFDMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwRgotOjEwMDFEMDAwMDAwMDAwMEQzQzAyMDgwMDI0NDI0QjIwM0MwMzA4MDBCNAotOjEwMDFFMDAwMjQ2MzRDMThBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQxQQotOjEwMDFGMDAwMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjFGMQotOjEwMDIwMDAwM0MxMDA4MDAyNjEwMDBGODNDMUMwODAwMjc5QzRCMjBERQotOjEwMDIxMDAwMEUwMDAyNzMwMDAwMDAwMDAwMDAwMDBEMjdCREZGRTg4MwotOjEwMDIyMDAwM0MwMjgwMDBBRkIwMDAxMEFGQkYwMDE0MzQ1MDAxMDA5QQotOjEwMDIzMDAwOTIwMjAwMDkxMDQwMDAxQTI0MDMwMDAxM0MwMjA4MDA0OQotOjEwMDI0MDAwOEM0MjAwMjAxMDQwMDAxNjAwMDAxODIxMEUwMDBENzE5NQotOjEwMDI1MDAwMDAwMDAwMDA5NjAzMDAwODNDMDYwODAwOTRDNjRCRkUxMAotOjEwMDI2MDAwOEUwNDAwMTg4RjgyMDAyQzk2MDUwMDBDMDAwMzFDMDBFMQotOjEwMDI3MDAwMDA2NjE4MjVBQzQ0MDAwMEFDNDUwMDA0MjQwNDAwMDFDRAotOjEwMDI4MDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQ4NgotOjEwMDI5MDAwQUM0MDAwMTgwRTAwMEQ5OEFDNDMwMDFDMDAwMDE4MjE2MwotOjEwMDJBMDAwOEZCRjAwMTQ4RkIwMDAxMDAwNjAxMDIxMDNFMDAwMDgyMQotOjEwMDJCMDAwMjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwM0MwMjgwMDAzQgotOjEwMDJDMDAwOTQ0MjAxMDgzMDQzNzAwMDI0MDIyMDAwMTA2MjAwMEFBQQotOjEwMDJEMDAwMjg2NDIwMDE1NDgwMDAxMjhGQkYwMDEwMjQwMjQwMDBDNwotOjEwMDJFMDAwMTA2MjAwMDgyNDAyNjAwMDEwNjIwMDBBOEZCRjAwMTAzNAotOjEwMDJGMDAwMEEwMDAwOTcwMDAwMTAyMThGQkYwMDEwMEEwMDAwNTU2RgotOjEwMDMwMDAwMjdCRDAwMTgwRTAwMDQzMzAwMDAwMDAwMEEwMDAwOTYwQwotOjEwMDMxMDAwOEZCRjAwMTAwRTAwMEM4MTAwMDAwMDAwOEZCRjAwMTA4NgotOjEwMDMyMDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDE4M0MwMjA4MDA2RgotOjEwMDMzMDAwOEM0MjAwMjAyN0JERkZFODEwNDAwMDI4QUZCRjAwMTAwRQotOjEwMDM0MDAwMEUwMDBENzEwMDAwMDAwMDNDMDU4MDAwOTRBMjAxMDgyMQotOjEwMDM1MDAwOTRBMzAxMEM4Rjg2MDAyQzMwNDIwMDNFMzA2M0ZGRkZENwotOjEwMDM2MDAwMDAwMjE0MDAwMDQzMTAyNUFDQzIwMDAwOENBMjAxMDA2MgotOjEwMDM3MDAwM0MwNzA4MDA5NEU3NEJGRThGQkYwMDEwQUNDMjAwMDQ5RQotOjEwMDM4MDAwOTRBMzAxMTY5NEE0MDEwRTNDMDIyMDAwMDAwMzFDMDA1QgotOjEwMDM5MDAwMzA4NEZGRkYwMDY0MTgyNUFDQzMwMDA4MDBFMjM4MjU1NAotOjEwMDNBMDAwOTRBMjAxMTA5NEEzMDExMjI0MDQwMDAxMDAwMjE0MDA3RAotOjEwMDNCMDAwMzA2M0ZGRkYwMDQzMTAyNUFDQzIwMDBDOTRBMjAxMTQ2RgotOjEwMDNDMDAwMjdCRDAwMTgzMDQyRkZGRkFDQzIwMDEwQUNDMDAwMTRDMwotOjEwMDNEMDAwQUNDMDAwMTgwQTAwMEQ5OEFDQzcwMDFDOEZCRjAwMTBGRAotOjEwMDNFMDAwMDNFMDAwMDgyN0JEMDAxODNDMDY4MDAwOENDMjAyQjg1QwotOjEwMDNGMDAwMjQwMzAwMDEwNDQxMDAwODAwODAyODIxM0MwMjA4MDA3OQotOjEwMDQwMDAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjBFNAotOjEwMDQxMDAwMDNFMDAwMDgwMDYwMTAyMThDODMwMDIwOTQ4MjAwMTYwNQotOjEwMDQyMDAwQUNDMzAyODAyNDQyRkZGQ0E0QzIwMjg0M0MwMjA4MDA0OAotOjEwMDQzMDAwOEM0MjAwNUM4Qzg0MDAwNDk0QTMwMDBFMjQ0MjAwMDFEMgotOjEwMDQ0MDAwM0MwMTA4MDBBQzIyMDA1QzNDMDIxMDAwQTRDMzAyODYwMAotOjEwMDQ1MDAwQUNDNDAyODgwMDAwMTgyMUFDQzIwMkI4MDNFMDAwMDg1NgotOjEwMDQ2MDAwMDA2MDEwMjEzQzAyMDgwMDhDNDIwMDIwMjdCREZGRThGQwotOjEwMDQ3MDAwMTA0MDAwMkJBRkJGMDAxMDBFMDAwRDcxMDAwMDAwMDBGNwotOjEwMDQ4MDAwM0MwNTgwMDA5NEEyMDEwODk0QTMwMTBDOEY4NjAwMkNFNwotOjEwMDQ5MDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjU4RAotOjEwMDRBMDAwQUNDMjAwMDA4Q0EyMDEwMDNDMDcwODAwOTRFNzRCRkVBMAotOjEwMDRCMDAwOEZCRjAwMTBBQ0MyMDAwNDk0QTMwMTE2OTRBNDAxMEVENwotOjEwMDRDMDAwM0MwMjIwMDAwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjU1QwotOjEwMDREMDAwQUNDMzAwMDgwMEUyMzgyNTk0QTIwMTEwOTRBMzAxMTJENQotOjEwMDRFMDAwMjQwNDAwMDEwMDAyMTQwMDMwNjNGRkZGMDA0MzEwMjVDNAotOjEwMDRGMDAwQUNDMjAwMEM5NEEyMDExNDI3QkQwMDE4MzA0MkZGRkZDQgotOjEwMDUwMDAwQUNDMjAwMTA4Q0EyMDExOEFDQzIwMDE0OTBBMjAxMEI2NgotOjEwMDUxMDAwMzA0MjAwRkZBQ0MyMDAxODBBMDAwRDk4QUNDNzAwMUNBNgotOjEwMDUyMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTBDMwotOjEwMDUzMDAwQUZCMDAwMTAzQzEwODAwMEFGQjIwMDE4QUZCRjAwMUM3RAotOjEwMDU0MDAwQUZCMTAwMTQzNjEyMDEwMDkyNDMwMDBCMjQwMjAwMUFDRQotOjEwMDU1MDAwOTY1MTAwMDgxNDYyMDA1QjAwMDAyODIxMzIyMjAwMDEzRAotOjEwMDU2MDAwMTA0MDAwMTgwMDAwMDAwMDhFNDIwMDAwMDAwMjIzNDBFRQotOjEwMDU3MDAwM0MwMjAwM0YzNDQyRkZGRjAwNDQxMDJCMTA0MDAwMDRCNwotOjEwMDU4MDAwM0MwMzAwNDA5NjQyMDAxNDBBMDAwMTNCMDA4MzIwMjFGNgotOjEwMDU5MDAwOEUwMzAxMDAyNDAyMDEwMDU0NjIwMDA2OTY0MjAwMTRGQQotOjEwMDVBMDAwM0MwMjgwMDg5NDQyMDAwNDMwNDIwMDBGMDAwMjI1MDAwMwotOjEwMDVCMDAwOTY0MjAwMTQwMDgyMTAyNUFFMDIwMDgwMEEwMDAxNkZFRQotOjEwMDVDMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMjg3RgotOjEwMDVEMDAwMDAwMDAwMDAwRTAwMEQ3MTAwMDAwMDAwOTYwMjAxMDhFRQotOjEwMDVFMDAwOTYwMzAxMEM4Rjg1MDAyQzMwNDIwMDNFMzA2M0ZGRkZFNAotOjEwMDVGMDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEUwMjAxMDA4RQotOjEwMDYwMDAwM0MwNjA4MDA5NEM2NEJGRUFDQTIwMDA0OTYwMzAxMTZGQgotOjEwMDYxMDAwOTYwNDAxMEUzQzAyMjAwMDAwMDMxQzAwMzA4NEZGRkYwMgotOjEwMDYyMDAwMDA2NDE4MjVBQ0EzMDAwODAwQzIzMDI1OTYwMjAxMTAxMgotOjEwMDYzMDAwOTYwMzAxMTIyNDA0MDAwMTAwMDIxNDAwMzA2M0ZGRkYzRQotOjEwMDY0MDAwMDA0MzEwMjVBQ0EyMDAwQzk2MDIwMTE0MzA0MkZGRkZCQgotOjEwMDY1MDAwQUNBMjAwMTA4RTAyMDExOEFDQTIwMDE0OTIwMjAxMEI5MQotOjEwMDY2MDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwRDk4QUNBNjAwMUM5MgotOjEwMDY3MDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDA3QQotOjEwMDY4MDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDI4QwotOjEwMDY5MDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQyMAotOjEwMDZBMDAwMTA4MDAwMDgwMDAyMjgyQjAyNDAyMDIxOEZCRjAwMUM3MAotOjEwMDZCMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAwQzg2QwotOjEwMDZDMDAwMjdCRDAwMjA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQwRgotOjEwMDZEMDAwOEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMjAwQgotOjEwMDZFMDAwMjdCREZGRTAzQzA1ODAwMEFGQjEwMDE0QUZCRjAwMTg4QwotOjEwMDZGMDAwQUZCMDAwMTAzNEIxMDEwMDkyMjMwMDBCMjQwMjAwMDNCQwotOjEwMDcwMDAwMTQ2MjAwNDM5NjMwMDAwODMyMDIwMDAxMTA0MDAwMTZDNwotOjEwMDcxMDAwM0MwMjAwM0Y4RTIzMDAwMDM0NDJGRkZGMDAwMzIzNDBEMQotOjEwMDcyMDAwMDA0NDEwMkI1MDQwMDAwNTI0MDIwMTAwOTYyMjAwMTRDMgotOjEwMDczMDAwM0MwMzAwNDAwQTAwMDFBNDAwODMyMDIxNTQ2MjAwMDYwQgotOjEwMDc0MDAwOTYyMjAwMTQzQzAyODAwODk0NDIwMDA0MzA0MjAwMEZCQwotOjEwMDc1MDAwMDAwMjI1MDA5NjIyMDAxNDAwODIxMDI1QUNBMjAwODAyMQotOjEwMDc2MDAwMEEwMDAxQUYwMDAwMDAwMDBFMDAwMDk5MDAwMDAwMDAyOAotOjEwMDc3MDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDA3OQotOjEwMDc4MDAwQUMyMjAwNDAzQzAyMDgwMDhDNDIwMDQ0MzIwMzAwMDRDQQotOjEwMDc5MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDQ0MTA2MDAwMDcyNAotOjEwMDdBMDAwMzIwMjAwMDIwMjIwMjAyMThGQkYwMDE4OEZCMTAwMTRGNgotOjEwMDdCMDAwOEZCMDAwMTAwQTAwMDBDODI3QkQwMDIwMTA0MDAwMTVBRgotOjEwMDdDMDAwOEZCRjAwMTgzQzA0ODAwMDhDODMwMTA0M0MwMjYwMjAzMQotOjEwMDdEMDAwQUM0MzAwMTQ4QzQyMDAwNDI0MDMwMUZFMzA0MjAzRkZBQQotOjEwMDdFMDAwMTQ0MzAwMEM4RkJGMDAxODhDODIwMTAwMDAwMjE5QzI1NAotOjEwMDdGMDAwMjQ2MkZGRkMyQzQyMDAwODEwNDAwMDAzMjQwNDAwMDI4NQotOjEwMDgwMDAwMjQ2MkZGRkQwMDQ0MjAwNDNDMDI2MDAwQUM0NDY5MTRGMwotOjEwMDgxMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAwMDEwMjE5RQotOjEwMDgyMDAwMDNFMDAwMDgyN0JEMDAyMDNDMDQ4MDAwOEM4MzAxMDAwOQotOjEwMDgzMDAwMjQwMjAxMDA1MDYyMDAwMzNDMDI4MDA4MDAwMDAwMEQwOQotOjEwMDg0MDAwM0MwMjgwMDg5NDQzMDAwNDAwMDAxMDIxMzA2MzAwMEYzNAotOjEwMDg1MDAwMDAwMzFEMDAwM0UwMDAwOEFDODMwMDgwM0MwMjgwMDgxOAotOjEwMDg2MDAwMzQ0MjAwODA5MDQyMDAwMDAzRTAwMDA4QUY4MDAwMDBBNgotOjEwMDg3MDAwMDNFMDAwMDgwMDAwMTAyMTI3QkRGRkU4M0MwMjgwMDBEMwotOjEwMDg4MDAwQUZCRjAwMTRBRkIwMDAxMDhDNDMwMTAwQUM0MzAwMjA5OAotOjEwMDg5MDAwOEM0MzAxMDRBQzQzMDBBODkwNTAwMTBCMEUwMDAxRTUwRAotOjEwMDhBMDAwMzIxMDAwRkYzQzAyMDgwMDI0NDI0QjU4MDAxMDE4ODAxMAotOjEwMDhCMDAwMkUxMDAwMUQxNjAwMDAwNTAwNjIxMDIxMEUwMDAxRUEzNgotOjEwMDhDMDAwMDA0MDE4MjEwQTAwMDIwNTAwMDAwMDAwOEM0MjAwMDBEMAotOjEwMDhEMDAwMDA0MEY4MDkwMDAwMDAwMDAwNDAxODIxM0MwMjA4MDAxOAotOjEwMDhFMDAwOEM0MjAwMzQxMDYwMDAwNTI0NDQwMDAxM0MwMjgwMDA2QQotOjEwMDhGMDAwOEM0MzAxMDQzQzAyNjAyMEFDNDMwMDE0OEZCRjAwMTQwMQotOjEwMDkwMDAwOEZCMDAwMTAzQzAzNDAwMDNDMDI4MDAwMjdCRDAwMTg1RgotOjEwMDkxMDAwQUM0MzAxMzgzQzAxMDgwMEFDMjQwMDM0MDNFMDAwMDg3QgotOjEwMDkyMDAwMDAwMDAwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwQgotOjEwMDkzMDAwM0MxMDgwMDA4RTAyMDE0MDBFMDAwMUU1QUUwMjAwMjA1NgotOjEwMDk0MDAwMEUwMDAzOTkwMDAwMDAwMDNDMDQwODAwMjQ4NDAwMzhENQotOjEwMDk1MDAwOEM4MjAwMDAzQzAzNDAwMEFFMDMwMTc4OEZCRjAwMTQ3RQotOjEwMDk2MDAwOEZCMDAwMTAyNDQyMDAwMTI3QkQwMDE4MDNFMDAwMDhFQQotOjEwMDk3MDAwQUM4MjAwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ4RAotOjEwMDk4MDAwM0MxMDgwMDA4RTAyMDE4MDBFMDAwMUU1QUUwMjAwMjBDNgotOjEwMDk5MDAwOEUwMzAxODAyNDAyMEYwMDU0NjIwMDA4M0MwMjgwMDg4QwotOjEwMDlBMDAwOEUwMjAxODgzQzAzMDBFMDMwNDJGRkZGMDA0MzEwMjUyNwotOjEwMDlCMDAwQUUwMjAwODAwQTAwMDI0QTNDMDI4MDAwMzQ0MjAwODBGRAotOjEwMDlDMDAwOTA0MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDgwRQotOjEwMDlEMDAwM0MwMjgwMDAwRTAwMDM3OTAwMDAwMDAwMTQ0MDAwMDQ3NwotOjEwMDlFMDAwM0MwMjgwMDAwRTAwMDk2NzAwMDAwMDAwM0MwMjgwMDAwRAotOjEwMDlGMDAwM0MwMzQwMDBBQzQzMDFCODNDMDIwODAwOEM0MjAwM0M4MAotOjEwMEEwMDAwOEZCRjAwMTQ4RkIwMDAxMDI0NDIwMDAxM0MwMTA4MDA4OQotOjEwMEExMDAwQUMyMjAwM0MwM0UwMDAwODI3QkQwMDE4MDNFMDAwMDhGQQotOjEwMEEyMDAwMDAwMDEwMjEzQzA1ODAwMDM0QTQwMTAwOTQ4MjAwMDhERAotOjEwMEEzMDAwMzA0MzAwMDIzMDQyMDAwNDEwNDAwMDAzMDAwMDAwMDA3OAotOjEwMEE0MDAwMEEwMDAwQzgwMDAwMDAwMDEwNjAwMDA1MjQwNDAwMDEzNgotOjEwMEE1MDAwM0MwMjA4MDA4QzQyMDA4NDBBMDAwMjZGMjQ0MjAwMDExQwotOjEwMEE2MDAwOENBMzAxMDQ4RjgyMDAwQzEwNDMwMDA4MDAwMDIwMjE5OQotOjEwMEE3MDAwOENBMzAxMDQzQzAyMDgwMDhDNDIwMDg0QUY4MzAwMEM2QwotOjEwMEE4MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg0MDNFMDAwMDg3RAotOjEwMEE5MDAwMDA4MDEwMjEyN0JERkZFODNDMDM2MDEwQUZCRjAwMTRBOQotOjEwMEFBMDAwQUZCMDAwMTA4QzY1NTAwMDI0MDJGRjdGM0MwNDgwMDAzMgotOjEwMEFCMDAwMDBBMjI4MjQzNEE1MzgwQzI0MDIwMDM3QUM2NTUwMDA2RAotOjEwMEFDMDAwQUM4MjAwMDgyNDAyMEM4MEFDODIwMDI0M0MwNjA4MDBBMgotOjEwMEFEMDAwMjRDNjA3QTgzQzAyMDgwMDI0NDI0QjU4MjQwNTAwMUNFOQotOjEwMEFFMDAwMjRBNUZGRkZBQzQ2MDAwMDA0QTFGRkZEMjQ0MjAwMDQ0MgotOjEwMEFGMDAwM0MwMjA4MDAyNDQyMDFFQzNDMDEwODAwQUMyMjRCNjA5RgotOjEwMEIwMDAwM0MwMjA4MDAyNDQyMDYxODNDMDEwODAwQUMyMjRCNjQ1OQotOjEwMEIxMDAwM0MwMjA4MDAyNDQyMEQxMDNDMDEwODAwQUMyMjRCQTAwRQotOjEwMEIyMDAwM0MwMjA4MDAyNDQyMDQ2NDNDMDMwODAwMjQ2MzA5NTQ4NgotOjEwMEIzMDAwM0MwNDA4MDAyNDg0MDk1QzNDMDUwODAwMjRBNTJDOTQ4RQotOjEwMEI0MDAwM0MwMTA4MDBBQzIyNEJDMDNDMDIwODAwMjQ0MjA3NjA3NAotOjEwMEI1MDAwM0MwMTA4MDBBQzI2NEJBODNDMDEwODAwQUMyNTRCQjQ3NgotOjEwMEI2MDAwM0MwMTA4MDBBQzIzNEJCQzNDMDEwODAwQUMyNDRCQzQ0NgotOjEwMEI3MDAwM0MwMTA4MDBBQzIyNEJDODNDMDEwODAwQUMyMzRCNUM5NAotOjEwMEI4MDAwM0MwMTA4MDBBQzIwNEI2ODNDMDEwODAwQUMyMDRCNkNEOQotOjEwMEI5MDAwM0MwMTA4MDBBQzIwNEI3MDNDMDEwODAwQUMyMDRCNzRCOQotOjEwMEJBMDAwM0MwMTA4MDBBQzIwNEI3ODNDMDEwODAwQUMyMDRCN0M5OQotOjEwMEJCMDAwM0MwMTA4MDBBQzIwNEI4MDNDMDEwODAwQUMyNDRCODQ3NQotOjEwMEJDMDAwM0MwMTA4MDBBQzIwNEI4ODNDMDEwODAwQUMyMDRCOEM1OQotOjEwMEJEMDAwM0MwMTA4MDBBQzIwNEI5MDNDMDEwODAwQUMyMDRCOTQzOQotOjEwMEJFMDAwM0MwMTA4MDBBQzIwNEI5ODNDMDEwODAwQUMyNjRCOUMxMwotOjEwMEJGMDAwM0MwMTA4MDBBQzI2NEJBNDNDMDEwODAwQUMyMDRCQUNFNwotOjEwMEMwMDAwM0MwMTA4MDBBQzI1NEJCMDNDMDEwODAwQUMyMzRCQjhCQwotOjEwMEMxMDAwMEUwMDA1NUEwMDAwMDAwMDNDMDI4MDAwMzQ0MjAwNzBDMwotOjEwMEMyMDAwOEM0MjAwMDBBRjgyMDAxMDNDMDMwODAwOEM2MzAwMjA1RgotOjEwMEMzMDAwOEY4MjAwMDQxMDQzMDAwNDNDMDU4MDAwMEUwMDBEMzczNQotOjEwMEM0MDAwQUY4MzAwMDQzQzA1ODAwMDM0QTkwMDcwOEQyODAwMDBBQgotOjEwMEM1MDAwOEY4NDAwMTAzQzA3MDgwMDhDRTcwMEJDM0MwNjA4MDBBRAotOjEwMEM2MDAwOENDNjAwQjgwMTA0MjAyMzAwMDAxMDIxMDBFNDM4MjFDNAotOjEwMEM3MDAwMDBDMjMwMjEwMEU0MjAyQjAwQzQzMDIxM0MwMTA4MDBEOAotOjEwMEM4MDAwQUMyNzAwQkMzQzAxMDgwMEFDMjYwMEI4OENCMDAwMDBDQQotOjEwMEM5MDAwMzIwMjAwMDcxMDQwRkZFNEFGODgwMDEwOEQyNjAwMDBFQwotOjEwMENBMDAwM0MwNTA4MDA4Q0E1MDBCQzNDMDQwODAwOEM4NDAwQjhGRQotOjEwMENCMDAwMDBDODMwMjMwMEE2MjgyMTAwMDAxMDIxMDBBNjMwMkJGOAotOjEwMENDMDAwMDA4MjIwMjEwMDg2MjAyMTMyMDcwMDAxM0MwMTA4MDAxQgotOjEwMENEMDAwQUMyNTAwQkMzQzAxMDgwMEFDMjQwMEI4MTBFMDAwMDRDNgotOjEwMENFMDAwMzIwMjAwMDIwRTAwMDFFQzAwMDAwMDAwMzIwMjAwMDI5RAotOjEwMENGMDAwMTA0MDAwMDQzMjAyMDAwNDBFMDAwMjE3MDAwMDAwMDA0MQotOjEwMEQwMDAwMzIwMjAwMDQ1MDQwRkZDNTNDMDI4MDAwMEUwMDAyMkI1RQotOjEwMEQxMDAwMDAwMDAwMDAwQTAwMDJENTNDMDI4MDAwM0MwMjkwMDA2NgotOjEwMEQyMDAwMzQ0MjAwMDEwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjBCNwotOjEwMEQzMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDBBNQotOjEwMEQ0MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDE4MgotOjEwMEQ1MDAwMDA4MzIwMjUwM0UwMDAwOEFDNDQwMDIwMjdCREZGRTAwRAotOjEwMEQ2MDAwQUZCMTAwMTRBRkIwMDAxMDAwODA4ODIxQUZCRjAwMThGMQotOjEwMEQ3MDAwMEUwMDAzMTUzMEIwMDBGRjhGODNGRkFDMDIyMDIwMjE0RQotOjEwMEQ4MDAwOTA2MjAwMjUwMjAyODAyNUEwNzAwMDI1OEM3MDAwMTg1QQotOjEwMEQ5MDAwM0MwMjgwMDAwRTAwMDMyMDAyMDI4MDI0MTYwMDAwMEE5QwotOjEwMERBMDAwOEZCRjAwMTgzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkVGNgotOjEwMERCMDAwMjQwMjAwMDJBQzcxMDFDMEEwNjIwMUM0M0MwMjEwMDAxOAotOjEwMERDMDAwQUM2MjAxRjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxMwotOjEwMEREMDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkI4QUZCRjAwNDRENwotOjEwMERFMDAwQUZCMDAwNDAzQzA3ODAwMDhDRTYwMTA0OEY4MkZGQTg3MgotOjEwMERGMDAwQUZBNjAwMjg4QzQ1MDAyMEFGQTUwMDJDOEM0NDAwM0NGOQotOjEwMEUwMDAwQUZBNDAwMzA4QzQzMDA0MEFGQTMwMDM0OEM0MjAwNENCMAotOjEwMEUxMDAwQUZBNjAwMTBBRkE1MDAxNEFGQTIwMDIwQUZBMjAwMzgwQgotOjEwMEUyMDAwM0MwMjA4MDA4QzQyMDAyMEFGQTQwMDE4QUZBMzAwMUNCNQotOjEwMEUzMDAwOENGMDAxMDAxMDQwMDAxOThGQkYwMDQ0MEUwMDBENzFBRQotOjEwMEU0MDAwMDAwMDAwMDA4RjgzMDAyQzNDMDUwODAwOTRBNTRCRkU5OQotOjEwMEU1MDAwM0MwMjQwMThBQzcwMDAwMDAwQTIyODI1OEZBMjAwMTBCMAotOjEwMEU2MDAwMjQwNDAwMDFBQzYyMDAwNDhGQTIwMDE0QUM2MjAwMDhFQwotOjEwMEU3MDAwOEZBMjAwMThBQzYyMDAwQzhGQTIwMDFDQUM2MjAwMTBBNAotOjEwMEU4MDAwOEZBMjAwMjBBQzYyMDAxNDhGQTIwMDI0QUM2MjAwMTg3NAotOjEwMEU5MDAwMEUwMDBEOThBQzY1MDAxQzhGQkYwMDQ0OEZCMDAwNDA2MQotOjEwMEVBMDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDQ4MjdCREZGRTgyRgotOjEwMEVCMDAwQUZCRjAwMTAzQzAzODAwMDk0NjIwMTg0MzA0MjAyMDAwNgotOjEwMEVDMDAwMTA0MDAwMDUwMDAwMjAyMTBFMDAwRkUzMDAwMDAwMDA4QwotOjEwMEVEMDAwMEEwMDAzOEYyNDA0MDAwMThDNjIwMTg4MDQ0MDAwMEE4OAotOjEwMEVFMDAwOEZCRjAwMTA4QzYyMDE4ODNDMDNGRjAwMDA0MzEwMjQ3OAotOjEwMEVGMDAwM0MwMzA0MDAxNDQzMDAwNDI0MDQwMDAxOEY4MkZGQUM2RgotOjEwMEYwMDAwOTA0MjAwMDg4RkJGMDAxMDAwODAxMDIxMDNFMDAwMDgwRAotOjEwMEYxMDAwMjdCRDAwMTg4RjgyRkZCMDI0MDUwMDAxQTA0MDAwMUFGMQotOjEwMEYyMDAwM0MwMjgwMDAwQTAwMDMyNThDNDQwMTQwMjdCREZGRTBGRAotOjEwMEYzMDAwQUZCMTAwMTQ4RjkxRkZBQ0FGQkYwMDFDQUZCMjAwMTg2RgotOjEwMEY0MDAwQUZCMDAwMTA5MjIyMDAwMDI0MDMwMDIwMzA0MjAwRkZDNgotOjEwMEY1MDAwMTA0MzAwMEMzQzAyODAwMDkyMjIwMDAwMjQwMzAwMzA2OQotOjEwMEY2MDAwMzA0MjAwRkYxMDQzMDAwNzNDMDI4MDAwOTIyMjAwMDA0NAotOjEwMEY3MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDgxOEZCRjAwMUM0NwotOjEwMEY4MDAwM0MwMjgwMDA5MDQyMDE0ODMwNDIwMEZGMjQ0M0ZGRkZCMgotOjEwMEY5MDAwMkM2MjAwMDUxMDQwMDA3QThGQkYwMDFDMDAwMzEwODBGNwotOjEwMEZBMDAwM0MwMzA4MDAyNDYzNEFEODAwNDMxMDIxOEM0MjAwMDAwRgotOjEwMEZCMDAwMDA0MDAwMDgwMDAwMDAwMDNDMTE4MDAwOEUyNDAxNDAyOQotOjEwMEZDMDAwMEUwMDAzMTU4RjkyRkZBQzhFNTAwMDBDOEUyMjAxNDQ1MAotOjEwMEZEMDAwMTYwMjAwMDIyNDAyMDAwMUFFNDIwMDBDMEUwMDAzMjBBMwotOjEwMEZFMDAwOEUyNDAxNDA4RTIyMDE0NDE0NTAwMDA2OEZCRjAwMUM0NQotOjEwMEZGMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBGNTE4QgotOjEwMTAwMDAwMjdCRDAwMjA4RTQyMDAwQzBBMDAwNDI3MDAwMDAwMDBDQgotOjEwMTAxMDAwOTYyMjAwMTAzQzA0ODAwMDhDODMwMTQ0MzA0MkZGRkY4NAotOjEwMTAyMDAwMTQ2MjAwMDkwMDAwMDAwMDI0MDIwMDAxQTYyMjAwMTA0MgotOjEwMTAzMDAwOEM4MjAxNDBBQzgyMDIwMDNDMDIxMDAwQUM4MjAyMzg3QgotOjEwMTA0MDAwMEEwMDA0MkU4RkJGMDAxQzk2MjIwMDEwMEEwMDA0MjdGRAotOjEwMTA1MDAwMDAwMDAwMDA5MjIyMDAwMDI0MDMwMDIwMzA0MjAwRkYyNAotOjEwMTA2MDAwMTQ0MzAwMEIzQzEyODAwMDk2MjIwMDEyM0MwMzgwMDBDNwotOjEwMTA3MDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDE4MDAwMDAwMDAzRQotOjEwMTA4MDAwMjQwMjAwMDFBNjIyMDAxMjBBMDAwNDAwOEZCRjAwMUNFNwotOjEwMTA5MDAwOEU0NDAxNDAwRTAwMDMxNTAwMDAwMDAwOTYyMjAwMTI0RAotOjEwMTBBMDAwOEU0MzAxNDQzMDUwRkZGRjE2MDMwMDAyMjQwMjAwMDE2QQotOjEwMTBCMDAwQTYyMjAwMTIwRTAwMDMyMDhFNDQwMTQwOEU0MjAxNDRGRAotOjEwMTBDMDAwMTYwMjAwMDY4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRFQgotOjEwMTBEMDAwOEZCMDAwMTAwQTAwMDM5MzI3QkQwMDIwOTYyMjAwMTI1MwotOjEwMTBFMDAwMEEwMDA0MjcwMDAwMDAwMDk2MjIwMDE0M0MwMzgwMDA0MAotOjEwMTBGMDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDA5MDAwMDAwMDBDRAotOjEwMTEwMDAwMjQwMjAwMDFBNjIyMDAxNDhGQkYwMDFDOEZCMjAwMTgxOQotOjEwMTExMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxMjY4MjdCRDAwMjBBNAotOjEwMTEyMDAwOTYyMjAwMTQwQTAwMDQyNzAwMDAwMDAwOTYyMjAwMTZGMAotOjEwMTEzMDAwM0MwMzgwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDhDRQotOjEwMTE0MDAwMjQwMjAwMDFBNjIyMDAxNjhGQkYwMDFDOEZCMjAwMThENwotOjEwMTE1MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwQjBCMjdCRDAwMjBDOAotOjEwMTE2MDAwOTYyMjAwMTYxNDQwMDAwNjhGQkYwMDFDM0MwMjA4MDBBNwotOjEwMTE3MDAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzA0NwotOjEwMTE4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg3OAotOjEwMTE5MDAwMjdCRDAwMjAyN0JERkZFMDNDMDI4MDAwQUZCMTAwMTQ1NgotOjEwMTFBMDAwQUZCRjAwMUNBRkIyMDAxOEFGQjAwMDEwMzQ1MTAxMDA0NwotOjEwMTFCMDAwOTIyMzAwMDk4QzUwMDEwMDI0MDIwMDFGMTA2MjAwQUEzMwotOjEwMTFDMDAwMjg2MjAwMjAxMDQwMDAxODI0MDIwMDM4Mjg2MjAwMEExQgotOjEwMTFEMDAwMTA0MDAwMEMyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkM3NAotOjEwMTFFMDAwMDAwMDAwMDAwNDYwMDEwMDI4NjIwMDAyMTQ0MDAwMjg5MgotOjEwMTFGMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDFDMEEwMDA1NEE2OAotOjEwMTIwMDAwOEZCMjAwMTgxMDYyMDA2MDI4NjIwMDBCMTQ0MDAwRjdEMwotOjEwMTIxMDAwOEZCRjAwMUMyNDAyMDAwRTEwNjIwMDc3OEZCMjAwMThFRQotOjEwMTIyMDAwMEEwMDA1NEEwMDAwMDAwMDEwNjIwMEQzMjg2MjAwMzk1RAotOjEwMTIzMDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwRTNGRAotOjEwMTI0MDAwMjg2MjAwMzcxMDQwMDBDNTI0MDIwMDM1MTA2MjAwRDgyMwotOjEwMTI1MDAwOEZCRjAwMUMwQTAwMDU0QThGQjIwMDE4MTA2MjAwMkREMwotOjEwMTI2MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlEMAotOjEwMTI3MDAwMTA2MjAwQzk4RkJGMDAxQzBBMDAwNTRBOEZCMjAwMTgxNwotOjEwMTI4MDAwMTA2MjAwQTI4RkJGMDAxQzBBMDAwNTRBOEZCMjAwMTgyRQotOjEwMTI5MDAwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMEQ0OEZCRjAwMUM4QwotOjEwMTJBMDAwMEUwMDBENzEwMDAwMDAwMDNDMDI4MDAwMzQ0MjAxMDA3RAotOjEwMTJCMDAwOEM0NDAwMDA4RjgzMDAyQzk0NDcwMDA4M0MwNTA4MDBGNAotOjEwMTJDMDAwOTRBNTRCRkVBQzY0MDAwMDhDNDQwMDA0MDAwNzNDMDA3NQotOjEwMTJEMDAwMDBFNTM4MjVBQzY0MDAwNDhDNDQwMDE4OTQ0NjAwMENFQQotOjEwMTJFMDAwQUM2NDAwMDg4QzQ1MDAxQzAwMDYzNDAwMjQwNDAwMDE5NgotOjEwMTJGMDAwQUM2NTAwMEM5MDQyMDAwQTAwQzIzMDI1QUM2NjAwMTBCQwotOjEwMTMwMDAwQUM2MDAwMTRBQzYwMDAxOEFDNjcwMDFDMEEwMDA1MEM0RgotOjEwMTMxMDAwOEZCRjAwMUMzQzAyMDgwMDhDNDIwMDIwMTA0MDAwQjMyQwotOjEwMTMyMDAwOEZCRjAwMUMwRTAwMEQ3MTAwMDAwMDAwOTYyNDAwMDgwNQotOjEwMTMzMDAwM0MwMzA4MDA5NDYzNEJGRTk2MjUwMDBDMDAwNDIyMDIzNwotOjEwMTM0MDAwOTYyNjAwMEU4RjgyMDAyQzAwMDQyNjAwMDA4MzIwMjVBNAotOjEwMTM1MDAwMDAwNTJDMDAzQzAzMDA4MDAwQTYyODI1MDA4MzIwMjVFMgotOjEwMTM2MDAwQUM0MDAwMDBBQzQwMDAwNEFDNDAwMDA4QUM0MDAwMENCNQotOjEwMTM3MDAwQUM0NTAwMTBBQzQwMDAxNEFDNDAwMDE4QUM0NDAwMUM1QwotOjEwMTM4MDAwMEEwMDA1MEIyNDA0MDAwMTk2MjIwMDBDMTQ0MDAwMTdFQgotOjEwMTM5MDAwOEY5MUZGQUM5MjIyMDAwNTMwNDIwMDEwMTQ0MDAwMTNFMAotOjEwMTNBMDAwMDAwMDAwMDAwRTAwMDMxNTAyMDAyMDIxOTIyMjAwMDUxQgotOjEwMTNCMDAwMDIwMDIwMjEzNDQyMDAxMDBFMDAwMzIwQTIyMjAwMDU2QQotOjEwMTNDMDAwOTIyMjAwMDAyNDAzMDAyMDMwNDIwMEZGMTA0MzAwODZEOAotOjEwMTNEMDAwMDIwMDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRCMwotOjEwMTNFMDAwOEZCMDAwMTAwQTAwMTA0QzI3QkQwMDIwMDAwMDAwMEQzNwotOjEwMTNGMDAwMEEwMDA1NDk4RkJGMDAxQzNDMDIwODAwOEM0MjAwMjBGNwotOjEwMTQwMDAwMTA0MDAwN0E4RkJGMDAxQzBFMDAwRDcxMDAwMDAwMDAxQwotOjEwMTQxMDAwOEUyMjAwMDQ4RjgzMDAyQzk2MjQwMDBDM0MwNTA4MDBDQgotOjEwMTQyMDAwOTRBNTRCRkVBQzYyMDAwMDNDMDI4MDA4OTQ0MjAwMkM2NAotOjEwMTQzMDAwMDAwNDI0MDAzMDQyRkZGRjAwODIyMDI1M0MwMjQwMEVDMQotOjEwMTQ0MDAwMDBBMjI4MjVBQzY0MDAwNEFDNjAwMDA4QUM2MDAwMEM2RAotOjEwMTQ1MDAwQUM2MDAwMTBBQzYwMDAxNEFDNjAwMDE4QUM2NTAwMUNGRgotOjEwMTQ2MDAwMEEwMDA1MEIyNDA0MDAwMTBFMDAwMzE1MDIwMDIwMjFEMAotOjEwMTQ3MDAwOEY5MkZGQjAwMjAwMjAyMTBFMDAwMzIwQTY0MDAwMEMzNgotOjEwMTQ4MDAwMDIwMDIwMjEwRTAwMDMyNTI0MDUwMDAxM0MwMjA4MDA3MwotOjEwMTQ5MDAwOEM0MjAwMjAxMDQwMDA1NThGQkYwMDFDMEUwMDBENzFDMwotOjEwMTRBMDAwMDAwMDAwMDA5NjIyMDAwQzhGODMwMDJDOEY4NEZGQUM3QwotOjEwMTRCMDAwMDAwMjE0MDBBQzcwMDAwMEFDNjIwMDA0QUM2MDAwMDhENAotOjEwMTRDMDAwOEM4MjAwMzgzQzA1MDgwMDk0QTU0QkZFQUM2MjAwMENGMQotOjEwMTREMDAwOEM4NjAwM0MzQzAyNDAxRjAwQTIyODI1QUM2NjAwMTAxMAotOjEwMTRFMDAwOEU0MjAwMDQyNDA0MDAwMUFDNjIwMDE0QUM2MDAwMThCOQotOjEwMTRGMDAwQUM2NTAwMUM4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRBOAotOjEwMTUwMDAwOEZCMDAwMTAwQTAwMEQ5ODI3QkQwMDIwOEY4MkZGQUMxRAotOjEwMTUxMDAwMjQwMzAwMjA5MDQyMDAwMDMwNDIwMEZGMTA0MzAwMzNCQgotOjEwMTUyMDAwOEZCRjAwMUMwRTAwMEYzNzAwMDAwMDAwMTA0MDAwMkY3RQotOjEwMTUzMDAwOEZCRjAwMUMzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkU1QQotOjEwMTU0MDAwMjQwMjAwMDJBQzcwMDFDMEEwNjIwMUM0M0MwMjEwMDA4MQotOjEwMTU1MDAwQUM2MjAxRjgwQTAwMDU0OThGQkYwMDFDMDIwMDIwMjE3RgotOjEwMTU2MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAxNQotOjEwMTU3MDAwMEEwMDBFODAyN0JEMDAyMDk2MjUwMDBDMDIwMDIwMjFDNQotOjEwMTU4MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBGNQotOjEwMTU5MDAwMEEwMDBFQTUyN0JEMDAyMDAyMDAyMDIxOEZCMjAwMThFRQotOjEwMTVBMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUQwMjdCRDAwMjBBQwotOjEwMTVCMDAwOTIyNTAwMEQwMjAwMjAyMThGQjIwMDE4OEZCMTAwMTQ3NwotOjEwMTVDMDAwOEZCMDAwMTAwQTAwMEYyMTI3QkQwMDIwMDIwMDIwMjE0QgotOjEwMTVEMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBNQotOjEwMTVFMDAwMEEwMDBFRjgyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTgyNAotOjEwMTVGMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA1OQotOjEwMTYwMDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFMjQwMjAwMDI0QQotOjEwMTYxMDAwQUM2NDAyNDBBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhGNwotOjEwMTYyMDAwQUM2MjAyNzgwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDBDQQotOjEwMTYzMDAwQTM4MDAwMTgwM0UwMDAwOEEzODAwMDE5M0MwMzgwMDA4OQotOjEwMTY0MDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDFDQUM2MjAyNDA3NAotOjEwMTY1MDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhFMQotOjEwMTY2MDAwQUM2MjAyNzgwM0UwMDAwODAwMDAwMDAwOTA4MzAwMzBDNAotOjEwMTY3MDAwMjQwMjAwMDUwMDgwNDAyMTMwNjMwMDNGMDAwMDQ4MjEyMwotOjEwMTY4MDAwMTQ2MjAwMDUwMDAwNTAyMTkwODIwMDRDOTQ4MzAwNEVBQgotOjEwMTY5MDAwMzA0OTAwRkYzMDZBRkZGRkFEMDAwMDBDQUQwMDAwMTBDNAotOjEwMTZBMDAwQUQwMDAwMjQ5NTAyMDAxNDhEMDUwMDFDOEQwNDAwMTg2NwotOjEwMTZCMDAwMzA0MkZGRkYwMDQ5MTAyMzAwMDIxMTAwMDAwMjM3QzMyRgotOjEwMTZDMDAwMDA0MDM4MjEwMDg2MjAyMzAwQTIxMDJCMDA4MjIwMjMxNgotOjEwMTZEMDAwMDBBNzI4MjNBRDA1MDAxQ0FEMDQwMDE4QTUwOTAwMTRCRgotOjEwMTZFMDAwQTUwOTAwMjBBNTBBMDAxNjAzRTAwMDA4QTUwQTAwMjJBQgotOjEwMTZGMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQ4QUZCMjAwMThDQgotOjEwMTcwMDAwM0MxMjgwMDhBRkI0MDAyMEFGQjMwMDFDQUZCMTAwMTQ4RQotOjEwMTcxMDAwQUZCRjAwMjRBRkIwMDAxMDM2NTEwMTAwOTIyMjAwMEM4MAotOjEwMTcyMDAwM0MxNDA4MDA5Mjk0MDBGNzMwNDMwMEZGMjQwMjAwMDFBQgotOjEwMTczMDAwMTA2MjAwMzEwMDgwOTgyMTI0MDIwMDAyMTQ2MjAwMzRGQgotOjEwMTc0MDAwMzY1MDAwODAwRTAwMTI0MjAwMDAwMDAwOTIwNDAwNEM0RgotOjEwMTc1MDAwMEUwMDA1NTczMDg0MDA3RjAyNjIxMDIxMjQwM0ZGODBCMQotOjEwMTc2MDAwMDA0MzE4MjQzQzA0ODAwMEFDODMwMDk0OTI0NTAwMDg5OAotOjEwMTc3MDAwOTIwNDAwNEMzMDQyMDA3RjNDMDM4MDA2MTQ4NTAwMDczMQotOjEwMTc4MDAwMDA0MzgwMjEyNDAyRkZGRkEyMjIwMDExMjQwMkZGRkY1OAotOjEwMTc5MDAwQTYyMjAwMTIwQTAwMDVCQTI0MDJGRkZGOTYwMjAwMjBDQQotOjEwMTdBMDAwQTIyMjAwMTE5NjAyMDAyMkE2MjIwMDEyOEUwMjAwMjQxQwotOjEwMTdCMDAwM0MwNDgwMDhBRTIyMDAxNDM0ODUwMDgwOTBBMjAwNENDNgotOjEwMTdDMDAwMzQ4MzAxMDBBMDYyMDAxMDhDQTIwMDNDQUM2MjAwMThCRgotOjEwMTdEMDAwOEM4MjAwNjhBQzYyMDBFNDhDODIwMDY0QUM2MjAwRTA0MQotOjEwMTdFMDAwOEM4MjAwNkNBQzYyMDBFODI0MDIwMDAxQTBBMjAwNjhCOAotOjEwMTdGMDAwMEEwMDA1RDYzQzA0ODAwODBFMDAxMjVCMDAwMDAwMDBDMQotOjEwMTgwMDAwMzY0MjAwODBBMDQwMDA2ODBBMDAwNUQ2M0MwNDgwMDhFQgotOjEwMTgxMDAwQTIwMDAwNjhBMjAwMDA2OTBBMDAwNjEyM0MwMjgwMDhDQgotOjEwMTgyMDAwMzQ4MzAwODA4QzYyMDAzODM0ODUwMTAwQUM2MjAwNkMyNwotOjEwMTgzMDAwMjQwMjAwMDFBMDYyMDA2OTkwQTIwMEM1OTA4MzAwMDgwNAotOjEwMTg0MDAwMzA1MTAwRkYzMDcyMDA3RjEyMzIwMDFCM0MwODgwMDhDQwotOjEwMTg1MDAwMEUwMDA1NTcwMjIwMjAyMTAyNjIxMDIxMjQwM0ZGODA4MAotOjEwMTg2MDAwMDA0MzE4MjQzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0Y4NQotOjEwMTg3MDAwM0MwMzgwMDYwMDQzODAyMThFMDIwMDBDMTA0MDAwMERDNgotOjEwMTg4MDAwMDIwMDIwMjEwRTAwMDU2OTAwMDAwMDAwMjYyMjAwMDE1MAotOjEwMTg5MDAwMzA1MTAwRkY5MjAzMDAzQzAyMzQxMDI2MDAwMjEwMkI0RQotOjEwMThBMDAwMDAwMjEwMjMzMDYzMDA3RjAyMjI4ODI0MEEwMDA1RTAzMgotOjEwMThCMDAwQTIwMzAwM0MzQzA4ODAwODM1MDQwMTAwOEM4MjAwRDA2MwotOjEwMThDMDAwMzUwNzAwODBBQ0UyMDAzQzhDODIwMEQwQUQwMjAwMDAwNQotOjEwMThEMDAwOTBFNTAwNEM5MDg2MDBDNTkwRTMwMDRDOTA4NDAwQzVENAotOjEwMThFMDAwMjQwMkZGODAwMEEyMjgyNDMwNjMwMDdGMzA4NDAwRkZBMAotOjEwMThGMDAwMDBBNjI4MjUwMDY0MTgyQTEwNjAwMDAyMzBBNTAwRkYwOQotOjEwMTkwMDAwMzhBNTAwODBBMEU1MDA0Q0ExMDUwMDA5M0MwMjgwMDgzNAotOjEwMTkxMDAwOTA0MzAwMEUzNDQ0MDA4MDNDMDU4MDAwQTA0MzAwMEE0MAotOjEwMTkyMDAwOEM4MzAwMTgzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjRDMgotOjEwMTkzMDAwQUM4MzAwMTg4Q0EyMDFGODA0NDBGRkZFMDAwMDAwMDBGOAotOjEwMTk0MDAwQUNCMzAxQzA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM0NAotOjEwMTk1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDI2MwotOjEwMTk2MDAwQTBBMjAxQzQyN0JEMDAyODNDMDIxMDAwMDNFMDAwMDgyQgotOjEwMTk3MDAwQUNBMjAxRjg5MEEyMDAwMDI3QkRGRkUwQUZCMjAwMThCMgotOjEwMTk4MDAwMjQ0MjAwMDFBMEEyMDAwMDNDMDMwODAwOEM2MzAwRjQ4NAotOjEwMTk5MDAwMzA0MjAwRkZBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTA2OQotOjEwMTlBMDAwMDBBMDg4MjExNDQzMDAwMjAwODA5MDIxQTBBMDAwMDAyNAotOjEwMTlCMDAwMEUwMDA1NTc5MjI0MDAwMDhGOTAwMDFDMjQwM0ZGODAyNgotOjEwMTlDMDAwMDIwMjEwMjEwMDQzMTAyNDNDMDM4MDAwQUM2MjAwMjQ3QQotOjEwMTlEMDAwMEUwMDA1NTc5MjI0MDAwMDAyMDI4MDIxMzIxMDAwN0Y4MQotOjEwMTlFMDAwM0MwMjgwMEEwMjAyODAyMUFFNTAwMDAwOEZCRjAwMUMyMgotOjEwMTlGMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgwMAotOjEwMUEwMDAwMjdCRDAwMjA5NDgyMDAwNjkwODMwMDA1OEM4NTAwMEM4MQotOjEwMUExMDAwOEM4NjAwMTA4Qzg3MDAxODhDODgwMDFDOEM4NDAwMjAxOQotOjEwMUEyMDAwM0MwMTA4MDBBNDIyNEJEMjNDMDEwODAwQTAyMzRCRDE2QQotOjEwMUEzMDAwM0MwMTA4MDBBQzI1NEJEODNDMDEwODAwQUMyNjRCREMyRgotOjEwMUE0MDAwM0MwMTA4MDBBQzI3NEJFNDNDMDEwODAwQUMyODRCRTgwMwotOjEwMUE1MDAwM0MwMTA4MDBBQzI0NEJFQzAzRTAwMDA4MDAwMDAwMDA0RgotOjEwMUE2MDAwM0MwMjgwMDgzNDQyMDEwMDhDNDQwMDM0M0MwMzgwMDA3NgotOjEwMUE3MDAwMzQ2NTA0MDBBQzY0MDAzODhDNDIwMDM4QUY4NTAwMzAxNwotOjEwMUE4MDAwQUM2MjAwM0MzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDA4QgotOjEwMUE5MDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjAwMDYxNwotOjEwMUFBMDAwMzA4NDAwRkYwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMzBERQotOjEwMUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMzgwMDA2NwotOjEwMUFDMDAwOEM2MjAwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDBDMAotOjEwMUFEMDAwMDNFMDAwMDhBRjgyMDAzMDk0QzIwMDAwM0MwODA4MDAxOAotOjEwMUFFMDAwOTUwODAwQ0EzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjE1RAotOjEwMUFGMDAwQTRDMjAwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkI5RAotOjEwMUIwMDAwNTQ0MDAwMDFBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDA1OAotOjEwMUIxMDAwOEM2MzAwQ0MyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDAyNwotOjEwMUIyMDAwMzA0MkZGRkYxNDQzMDAwNzNDMDI4MDA4MDEwNzEwMkJERQotOjEwMUIzMDAwQTRBMDAwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDAwNwotOjEwMUI0MDAwM0MwMjgwMDgzNDQ2MDEwMDhDQzMwMDI4OTRBMjAwMDBBNwotOjEwMUI1MDAwM0MwNDgwMDAzMDQyRkZGRTAwMDIxMEMwMDA2MjEwMjFGMQotOjEwMUI2MDAwQUM4MjAwM0M4QzgyMDAzQzAwNjIxODIzMTg2MDAwMDRBOAotOjEwMUI3MDAwMDAwMDAwMDA4Q0MyMDAyNDBBMDAwNkFGMjQ0MjAwMDFDRAotOjEwMUI4MDAwOENDMjAwMjRBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTA2OQotOjEwMUI5MDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwMUJBMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQ2OQotOjEwMUJCMDAwMDAwMDAwMDA5NEEyMDAwMDNDMDQ4MDAwMzA0MjAwMDFCQwotOjEwMUJDMDAwMDAwMjEwQzAwMDQ0MTAyMThDNDMwNDAwQUQyMzAwMDAyQgotOjEwMUJEMDAwOEM0MjA0MDRBRDIyMDAwNDNDMDIwMDIwMDNFMDAwMDgxMwotOjEwMUJFMDAwQUM4MjAwMzAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRFNwotOjEwMUJGMDAwQUZCMDAwMTBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjEzNQotOjEwMUMwMDAwM0MxMjA4MDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDBDMQotOjEwMUMxMDAwOTYwMzAwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDUyOAotOjEwMUMyMDAwOEZCMTAwMzAwRTAwMDY4NDAyNDAzODIxMEEwMDA2RTYxQgotOjEwMUMzMDAwMDAwMDAwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDBEOQotOjEwMUM0MDAwMDQ2MTAwMDdBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQ5QwotOjEwMUM1MDAwMDAwMDAwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDBFMQotOjEwMUM2MDAwOTYwMjAwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDAyMwotOjEwMUM3MDAwOTYyMjAwMDAyNDQyMDAwMUE2MjIwMDAwM0MwMjgwMDhCNwotOjEwMUM4MDAwMzQ0MjAxMDA5NjIzMDAwMDk0NDIwMDNDMTQ0MzAwMDRCNwotOjEwMUM5MDAwOEZCRjAwMUMyNDAyMDAwMUE2MjIwMDAwOEZCRjAwMUM4MQotOjEwMUNBMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg0RAotOjEwMUNCMDAwMjdCRDAwMjAyN0JERkZFMDNDMDI4MDA4QUZCRjAwMTgxMQotOjEwMUNDMDAwMzQ0MjAxMDA4QzQ4MDAzNDNDMDM4MDAwMzQ2OTA0MDAzNQotOjEwMUNEMDAwQUM2ODAwMzg4QzQyMDAzODMwRTcwMEZGQUY4OTAwMzAzNAotOjEwMUNFMDAwQUM2MjAwM0MzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDAyOQotOjEwMUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwMUQwMDAwMDAwMDAwMDA4QzgyMDAwQzhDODIwMDBDOTc4MzAwMTY2RgotOjEwMUQxMDAwQUQyMjAwMDA4QzgyMDAxMDAwNjA0MDIxQUQyMjAwMDQ0MgotOjEwMUQyMDAwOEM4MjAwMThBRDIyMDAwODhDODIwMDFDQUQyMjAwMENCMQotOjEwMUQzMDAwOENBMjAwMTRBRDIyMDAxMDhDODIwMDIwQUQyMjAwMTQ3MQotOjEwMUQ0MDAwOTA4MjAwMDUzMDQyMDBGRjAwMDIxMjAwQUQyMjAwMTgxMAotOjEwMUQ1MDAwOENBMjAwMThBRDIyMDAxQzhDQTIwMDBDQUQyMjAwMjAyOQotOjEwMUQ2MDAwOENBMjAwMTBBRDIyMDAyNDhDQTIwMDFDQUQyMjAwMjgwMQotOjEwMUQ3MDAwOENBMjAwMjBBRDIyMDAyQzM0MDJGRkZGQUQyNjAwMzBFMwotOjEwMUQ4MDAwQUQyMDAwMzQ1MDYyMDAwMTM0MDhGRkZGQUQyODAwMzg1OAotOjEwMUQ5MDAwNTBFMDAwMTEzQzAyODAwODNDMDQ4MDA4MzQ4NDAxMDBCQgotOjEwMURBMDAwOTQ4MjAwNTAzMDQyRkZGRkFEMjIwMDNDOTQ4MzAwNDRGNwotOjEwMURCMDAwOTQ4NTAwNDQyNDAyMDAwMTMwNjNGRkZGMDAwMzE4QzIzMQotOjEwMURDMDAwMDA2NDE4MjE5MDY0MDA1NDMwQTUwMDA3MDBBMjEwMDQ5QwotOjEwMUREMDAwMEEwMDA3NTEwMDQ0MTAyNTM0NDIwMTAwQUQyMDAwM0NBOAotOjEwMURFMDAwOTQ0MzAwNDQ5NDQ0MDA0NDMwNjNGRkZGMDAwMzE4QzI0RQotOjEwMURGMDAwMDA2MjE4MjEzMDg0MDAwNzkwNjUwMDU0MjQwMjAwMDExRAotOjEwMUUwMDAwMDA4MjEwMDQwMDAyMTAyNzAwNDUxMDI0QTA2MjAwNTQzNAotOjEwMUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwMDY3RQotOjEwMUUyMDAwMzQ0MjAwNDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDBGRgotOjEwMUUzMDAwMDAwMDAwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAzMgotOjEwMUU0MDAwMTA0MEZGRkQzQzA2ODAwODM0QzIwMTUwMzQ2MzA0MDA5QQotOjEwMUU1MDAwMzRDNzAxNEEzNEM0MDEzNDM0QzUwMTQwMzRDNjAxNDQ5NgotOjEwMUU2MDAwQUZBMjAwMTAwRTAwMDZDN0FGODMwMDMwOEZCRjAwMTg2RQotOjEwMUU3MDAwMDNFMDAwMDgyN0JEMDAyMDhGODMwMDE0M0MwNTA4MDAwNAotOjEwMUU4MDAwOENBNTAwRTg4RjgyMDAxQzMwNjMzRkZGMDAwMzE5ODA5RgotOjEwMUU5MDAwMDA0NTEwMjEwMDQzMTAyMTI0MDNGRjgwMDA0MzE4MjQzMwotOjEwMUVBMDAwM0MwNTgwMDBBQ0EzMDAyODMwNDIwMDdGM0MwMzgwMEMzRQotOjEwMUVCMDAwMDA0MzMwMjE5MEMyMDAwRDAwMDAzODIxMzQ0MjAwMTA1MAotOjEwMUVDMDAwQTBDMjAwMEQ4Rjg5MDAxNDNDMDI4MDA4MzQ0MjAxMDAzQQotOjEwMUVEMDAwOTQ0MzAwNDQwMDA5MTM4MjMwNDgwMDAzMjQwMjAwMDFBNwotOjEwMUVFMDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDVERAotOjEwMUVGMDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA3OThDQwotOjEwMUYwMDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA3OThENgotOjEwMUYxMDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwNzk4MjQ0MzAwMDFGRAotOjEwMUYyMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkIwMwotOjEwMUYzMDAwMTQ0MDAwMDMzQzAzODAwODBBMDAwN0EyMjQwNzAwMDFBNAotOjEwMUY0MDAwMzQ2MzAxMDA5NDYyMDA0QzI0NDIwMDAxQTQ2MjAwNENGRQotOjEwMUY1MDAwMDAwOTEzODIzMDQzMDAwMzJDNjIwMDAyMTA0MDAwMDk4NAotOjEwMUY2MDAwMDA4MDI4MjExNDYwMDAwNDAwMDAwMDAwOTRDMjAwMzRBNgotOjEwMUY3MDAwMEEwMDA3QjIzMDQ2RkZGRjhDQzYwMDM4MEEwMDA3QjJERAotOjEwMUY4MDAwMDA4MDI4MjEwMDAwMzAyMTNDMDQwODAwMjQ4NDRCQ0MzMAotOjEwMUY5MDAwMEEwMDA2RkIwMDAwMDAwMDI3QkRGRjkwQUZCNjAwNjhGNgotOjEwMUZBMDAwQUZCNTAwNjRBRkI0MDA2MEFGQjMwMDVDQUZCMjAwNTgyRgotOjEwMUZCMDAwQUZCMTAwNTRBRkJGMDA2Q0FGQjAwMDUwOEM5MDAwMDBDOAotOjEwMUZDMDAwMDA4MEIwMjEzQzAyMDgwMDhDNDIwMEU4OTYwNDAwMzJGOAotOjEwMUZEMDAwOEY4MzAwMUMyNDE0RkY4MDMwODQzRkZGMDA2MjE4MjE4RgotOjEwMUZFMDAwMDAwNDIxODAwMDY0MTgyMTAwNzQxMDI0M0MxMzgwMDAzOAotOjEwMUZGMDAwMDBBMDkwMjE5MEE1MDAwMEFFNjIwMDI4OTIwNDAwMzI1QgotOjEwMjAwMDAwM0MwMjgwMEMzMDYzMDA3RjAwNjI4ODIxMzA4NDAwQzA3NQotOjEwMjAxMDAwMjQwMjAwNDAxNDgyMDAyRDAwMDBBODIxOEUzNTAwMzhEMwotOjEwMjAyMDAwOEUyMjAwMTgxNDQwMDAwMjI0MDIwMDAxQUUyMjAwMTg4MwotOjEwMjAzMDAwOTIwMjAwM0MzMDQyMDAyMDE0NDAwMDBGMDAwMDAwMDBEQgotOjEwMjA0MDAwMEUwMDA1NTcwMEEwMjAyMThGODMwMDFDMDA2MjE4MjE3QwotOjEwMjA1MDAwMzA2NDAwNzgzQzAyMDA4MDAwODIyMDI1MDA3NDE4MjQzRgotOjEwMjA2MDAwQUU2MzA4MDBBRTY0MDgxMDhFMjIwMDE4OEUwMzAwMDhDQwotOjEwMjA3MDAwMDA0MzEwMjFBRTIyMDAxODhFMjIwMDJDOEUyMzAwMTg1RgotOjEwMjA4MDAwMjQ0MjAwMDEwMDYyMTgyQjEwNjAwMDNEMDAwMDAwMDA5NwotOjEwMjA5MDAwOTI0MjAwMDAyNDQyMDAwMUEyNDIwMDAwM0MwMzA4MDBEQQotOjEwMjBBMDAwOEM2MzAwRjQzMDQyMDBGRjUwNDMwMDAxQTI0MDAwMDA2NgotOjEwMjBCMDAwMEUwMDA1NTc5MjQ0MDAwMDhGOTAwMDFDMDIwMjEwMjE3MAotOjEwMjBDMDAwMDA1NDEwMjQwQTAwMDhCOEFFNjIwMDI0OTIwMzAwMzJDMwotOjEwMjBEMDAwMjQwMkZGQzAwMDQzMTAyNDMwNDIwMEZGMTQ0MDAwMDVEQQotOjEwMjBFMDAwMjQwMjAwMDFBRTIyMDAxODk2MjIwMDM0MEEwMDA4MkVCNQotOjEwMjBGMDAwMzA1NUZGRkY4RTIyMDAxNDI0NDIwMDAxQUUyMjAwMTg0QQotOjEwMjEwMDAwOTIwMjAwMzAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMUM3NwotOjEwMjExMDAwMDAwMDAwMDA5NjAyMDAzMjI3QTQwMDEwMDA4MDI4MjE1MQotOjEwMjEyMDAwQTdBMjAwMTY5NjAyMDAzMjAwMDAzMDIxMjQwNzAwMDEwOQotOjEwMjEzMDAwMzA0MkZGRkZBRjgyMDAxNDBFMDAwNkZCQUZBMDAwMUM3MAotOjEwMjE0MDAwOTYwMjAwMzI4RjgzMDAxQzNDMDQwODAwOEM4NDAwRTg1NwotOjEwMjE1MDAwMzA0MjNGRkYwMDAyMTE4MDAwNjQxODIxMDA2MjE4MjEwNAotOjEwMjE2MDAwMDA3NDEwMjRBRTYyMDAyQzMwNjMwMDdGM0MwMjgwMEVBRAotOjEwMjE3MDAwMDA2MjE4MjE5MDYyMDAwRDMwNDIwMDdGQTA2MjAwMERDNQotOjEwMjE4MDAwOTIyMjAwMEQzMDQyMDAxMDUwNDAwMDc4OTI0MjAwMDAzMAotOjEwMjE5MDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODIwMDRDOEVDMzAwMDA0RAotOjEwMjFBMDAwM0MxMzA4MDA5NjczMDBDNjI0NDJGRkZGQTQ4MjAwNEMzMwotOjEwMjFCMDAwOTQ2MjAwMzI5NjIzMDAwRTMwNTRGRkZGMzA3MEZGRkYxMAotOjEwMjFDMDAwM0MwMzA4MDA4QzYzMDBEMDAwNzAxODA3QTdBMzAwMzhGOAotOjEwMjFEMDAwOTQ4MjAwM0UzMDYzRkZGRjMwNDJGRkZGMTQ2MjAwMDcyRAotOjEwMjFFMDAwMDAwMDAwMDA4QzgyMDAzMDNDMDM4MDAwMjQ0MjAwMzA1QwotOjEwMjFGMDAwQUM2MjAwM0MwQTAwMDg1NjhDODIwMDJDOTQ4MjAwNDA5RAotOjEwMjIwMDAwMzA0MkZGRkY1NDYyMDAwOTI3QTQwMDQwOEM4MjAwMzg0RQotOjEwMjIxMDAwM0MwMzgwMDAyNDQyMDAzMEFDNjIwMDNDOEM4MjAwMzRERAotOjEwMjIyMDAwQUM2MjAwMzgwQTAwMDg2NTNDMDM4MDAwMjdBNTAwMzgyRQotOjEwMjIzMDAwMjdBNjAwNDgwMjYwMzgyMTBFMDAwNjg0QTdBMDAwNDhBNwotOjEwMjI0MDAwOEZBMzAwNDAzQzAyODAwMDI0NjMwMDMwQUM0MzAwMzg4MAotOjEwMjI1MDAwOEZBMzAwNDRBQzQzMDAzQzNDMDM4MDAwM0MwMjAwMDVEQgotOjEwMjI2MDAwQUM2MjAwMzAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNDI5OQotOjEwMjI3MDAwMzQ2MzA0MDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDdCOQotOjEwMjI4MDAwQUY4MzAwMzA5NDgyMDA0RTk0ODMwMDQyMDIwMjEwMjFGQQotOjEwMjI5MDAwMDA0MzEwMjMwQTAwMDg3QjMwNDNGRkZGOTQ4MzAwNEU2NQotOjEwMjJBMDAwOTQ4MjAwNDIwMjYzMTgyMTAwNTAxMDIzMDA2MjE4MjMxOAotOjEwMjJCMDAwMzA2M0ZGRkYzQzAyODAwODM0NDQwMTAwOTQ4MjAwM0NGQwotOjEwMjJDMDAwMzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwMEEwMDA4OEJBNwotOjEwMjJEMDAwMjQwMzAwMDE5NDgyMDAzQzMwNDJGRkZGMDA2MjEwMkI3NwotOjEwMjJFMDAwMTQ0MDAwMDU4RjgyMDAzMDk0ODIwMDNDMDA2MjEwMjM2RAotOjEwMjJGMDAwMzA0M0ZGRkY4RjgyMDAzMEFDNTUwMDAwQUM0MDAwMDQzQgotOjEwMjMwMDAwQUM1NDAwMDhBQzQzMDAwQzNDMDIwMDA2MzQ0MjAwMTAwMAotOjEwMjMxMDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwMjMyMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRGMQotOjEwMjMzMDAwM0MwNDgwMDgzNDg0MDEwMDAwMTAxOEMyMDA2NDE4MjE5NQotOjEwMjM0MDAwOTA2NTAwNTQzMjAyMDAwNzI0MDYwMDAxMDA0NjEwMDQ4NAotOjEwMjM1MDAwMDA0NTEwMjVBMDYyMDA1NDk0ODMwMDQyOTYyMjAwMEU4RQotOjEwMjM2MDAwNTA0MzAwMDFBMzg2MDAxODkyNDIwMDAwMjQ0MjAwMDE1RAotOjEwMjM3MDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkZERQotOjEwMjM4MDAwNTA0MzAwMDFBMjQwMDAwMDBFMDAwNTU3OTI0NDAwMDA5NwotOjEwMjM5MDAwOEY5MDAwMUMyNDAzRkY4MDAyMDIxMDIxMDA0MzEwMjRCMAotOjEwMjNBMDAwM0MwMzgwMDBBQzYyMDAyNDBFMDAwNTU3OTI0NDAwMDBGQwotOjEwMjNCMDAwMDIwMjgwMjEzMjEwMDA3RjNDMDI4MDBBMDIwMjgwMjE0QQotOjEwMjNDMDAwQUVEMDAwMDA4RkJGMDA2QzhGQjYwMDY4OEZCNTAwNjQ4MAotOjEwMjNEMDAwOEZCNDAwNjA4RkIzMDA1QzhGQjIwMDU4OEZCMTAwNTQ4RgotOjEwMjNFMDAwOEZCMDAwNTAwM0UwMDAwODI3QkQwMDcwMjdCREZGRDg2NAotOjEwMjNGMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAwMwotOjEwMjQwMDAwQUZCRjAwMjAwMDgwOTgyMTAwRTA4MDIxMzBCMUZGRkZBNQotOjEwMjQxMDAwMEUwMDBENzEzMEQyMDBGRjAwMDAwMDAwMDAwMDAwMDAyRgotOjEwMjQyMDAwMDAwMDAwMDA4RjgyMDAyQ0FDNTEwMDAwQUM1MjAwMDQ3MAotOjEwMjQzMDAwQUM1MzAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTRBMQotOjEwMjQ0MDAwQUM0MDAwMTgzQzAzMDgwMDk0NjM0QkZFMDIwMzgwMjU1NwotOjEwMjQ1MDAwQUM1MDAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwMjQ2MDAwMjQwNDAwMDE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTgxRQotOjEwMjQ3MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRDk4MjdCRDAwMjhGRQotOjEwMjQ4MDAwMzBBNUZGRkYzMEM2MDBGRjI0MDMwQzgwM0MwMjgwMDAxMwotOjEwMjQ5MDAwQUM0MzAwMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwMjRBMDAwMDAwMDAwMDAwMDAwMDAwMDBBMDAwOEM5MDAwMDAwMDA1MQotOjEwMjRCMDAwM0MwMjgwMDgzNDQzMDEwMDk0NjIwMDBFM0MwODA4MDA4RQotOjEwMjRDMDAwOTUwODAwQzYzMDQ2RkZGRjE0QzAwMDA0MzQwMkZGRkYyOQotOjEwMjREMDAwOTQ2NTAwREEwQTAwMDkxRjhGODQwMDFDMTBDMjAwMjdDRgotOjEwMjRFMDAwMDAwMDAwMDA5NDYyMDA0RTk0NjQwMDNDMzA0NUZGRkYwMQotOjEwMjRGMDAwMDBBNjEwMjMwMEE2MTgyQjMwODdGRkZGMTA2MDAwMDRGMQotOjEwMjUwMDAwMzA0NEZGRkYwMEM1MTAyMzAwRTIxMDIzMzA0NEZGRkZEQQotOjEwMjUxMDAwMDA4ODEwMkIxMDQwMDAwRTAwRTgxMDIzM0MwMjgwMDhCOQotOjEwMjUyMDAwMzQ0NDAxMDAyNDAzMDAwMTM0NDIwMDgwQTQ0MzAwMTYxNwotOjEwMjUzMDAwMjQwMkZGRkZBNDgyMDAwRTk0ODUwMERBOEY4NDAwMUMyMQotOjEwMjU0MDAwMDAwMDMwMjEzMEE1RkZGRjBBMDAwOEVFM0MwNzYwMjBBNAotOjEwMjU1MDAwMDA0NDEwMkExMDQwMDAwOTNDMDI4MDA4MzQ0MzAwODBFNwotOjEwMjU2MDAwOTQ2MjAwMTYzMDQyMDAwMTEwNDAwMDA0M0MwMjgwMDBEQQotOjEwMjU3MDAwOTQ0MjAwN0UyNDQyMDAxNEE0NjIwMDE2MDNFMDAwMDg4NgotOjEwMjU4MDAwMDAwMDAwMDAyN0JERkZFMDNDMDI4MDA4QUZCRjAwMUMzOAotOjEwMjU5MDAwQUZCMDAwMTgzNDQyMDEwMDk0NDMwMDQyOTQ0MjAwNEMxMgotOjEwMjVBMDAwMTA0MDAwMTkzMDY4RkZGRjkzODMwMDE4MjQwMjAwMDFENwotOjEwMjVCMDAwMTQ2MjAwMjk4RkJGMDAxQzNDMDY4MDA4MzREMDAxMDA0MwotOjEwMjVDMDAwMDAwODEwQzIwMDUwMTAyMTkwNDIwMDU0MzEwMzAwMDc0RgotOjEwMjVEMDAwMzRDNzAxNDgzMDQyMDBGRjAwNjIxMDA3MzA0MjAwMDE1QQotOjEwMjVFMDAwMzRDOTAxNEUzNEM0MDEyQzM0QzUwMTNFMTA0MDAwMTZEQwotOjEwMjVGMDAwMzRDNjAxNDIwRTAwMDZDN0FGQTkwMDEwOTYwMjAwNDI4MQotOjEwMjYwMDAwMEEwMDA5M0MzMDQ4RkZGRjNDMDI4MDA4MzQ0NDAxMDBDNgotOjEwMjYxMDAwOTQ4MzAwNDQ5NDgyMDA0MjEwNDMwMDBGOEZCRjAwMUMzQgotOjEwMjYyMDAwOTQ4MjAwNDRBNDgyMDA0Mjk0ODIwMDUwQTQ4MjAwNEUwRQotOjEwMjYzMDAwOEM4MjAwMzhBQzgyMDAzMDk0ODIwMDQwQTQ4MjAwM0UzQwotOjEwMjY0MDAwOTQ4MjAwNEFBNDgyMDA0ODhGQkYwMDFDOEZCMDAwMThGQgotOjEwMjY1MDAwMEEwMDA4RkEyN0JEMDAyMDhGQjAwMDE4MDNFMDAwMDgyOAotOjEwMjY2MDAwMjdCRDAwMjAyN0JERkZBMEFGQjEwMDRDM0MxMTgwMDA2QQotOjEwMjY3MDAwQUZCRjAwNThBRkIzMDA1NEFGQjIwMDUwQUZCMDAwNDg4NgotOjEwMjY4MDAwMzYyNjAxODg5MEMyMDAwMzMwNDQwMDdGQTNBNDAwMTBDNgotOjEwMjY5MDAwOEUzMjAxODA5MEMyMDAwMDMwNDMwMDdGMjQwMjAwMDM4QwotOjEwMjZBMDAwMTA2MjAwM0JBRjkyMDAxQzI4NjIwMDA0MTA0MDAwMDYzQwotOjEwMjZCMDAwMjQwMjAwMDQyNDAyMDAwMjEwNjIwMDA5OEZCRjAwNThBNwotOjEwMjZDMDAwMEEwMDBCMDM4RkIzMDA1NDEwNjIwMDRCMjQwMjAwMDU3NAotOjEwMjZEMDAwMTA2MjAxNEM4RkJGMDA1ODBBMDAwQjAzOEZCMzAwNTRFNwotOjEwMjZFMDAwMDAwNDExQzAwMjQyMTAyMTI0MDRGRjgwMjQ0MjAyNDA1MQotOjEwMjZGMDAwMDA0NDEwMjQyNjQzMDA0MEFFMjIwMDI0MzA2MzAwN0ZCMwotOjEwMjcwMDAwM0MwMjgwMEEwMDYyMTgyMTkwNjIwMDNDQUZBMzAwM0NBQQotOjEwMjcxMDAwMDA0NDEwMjVBMDYyMDAzQzhGQTMwMDNDOTA2MjAwM0M2NgotOjEwMjcyMDAwMzA0MjAwNDAxMDQwMDE2QThGQkYwMDU4M0MxMDgwMDhDMgotOjEwMjczMDAwQTM4MDAwMTgzNjEwMDEwMDhFMDIwMEQwOEM2MzAwMzQ5NAotOjEwMjc0MDAwMjdBNDAwM0MyN0E1MDAxMDAwNDMxMDIxMEUwMDA3QjQ2OQotOjEwMjc1MDAwQUUwMjAwRDA5M0EyMDAxMDNDMDM4MDAwQTIwMjAwQzU4QwotOjEwMjc2MDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDFDQUM2MjAyNDA0MwotOjEwMjc3MDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwQUM2MjAyNzgxMwotOjEwMjc4MDAwMEUwMDA5MkYwMDAwMDAwMDBBMDAwQjAyOEZCRjAwNTg0NgotOjEwMjc5MDAwM0MwNTgwMDg5MEMzMDAwMTkwQTIwMDBCMTQ0MzAxNEMzQgotOjEwMjdBMDAwOEZCRjAwNTgzNEE0MDA4MDhDODIwMDE4OTA4MjAwNENBNwotOjEwMjdCMDAwOTBBMjAwMDg4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY4OAotOjEwMjdDMDAwMDA2MjE4MjQzQzAyMDgwMDhDNDIwMEI0QUM4MzAwMTg1QwotOjEwMjdEMDAwM0MwMzgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwQjQwQwotOjEwMjdFMDAwOEM2MjAxRjgwNDQwRkZGRThGODIwMDFDQUM2MjAxQzBDNQotOjEwMjdGMDAwMEEwMDBBQ0EyNDAyMDAwMjNDMTA4MDA4OTBDMzAwMDFBQgotOjEwMjgwMDAwOTIwMjAwMEIxNDQzMDEzMjhGQkYwMDU4MzYwNTAxMTBBRAotOjEwMjgxMDAwMjdBNDAwMTgwRTAwMEUyMDI0MDYwMDAzMjdBNDAwMjg3OQotOjEwMjgyMDAwMzYwNTAxRTAwRTAwMEUyMDI0MDYwMDAzOEZBMjAwMjhDQQotOjEwMjgzMDAwMzYwMzAxMDBBRTAyMDA2NDhGQTIwMDJDQUUwMjAwNjhENQotOjEwMjg0MDAwOEZBMjAwMzBBRTAyMDA2QzkzQTQwMDE4OTA2MzAwQzUwNAotOjEwMjg1MDAwMjQwMkZGODAwMDgyMTAyNDAwNDMxMDI1MzA1MDAwRkYyNgotOjEwMjg2MDAwMzA4NDAwN0YzMjAyMDA3RjAwODIxMDJBNTQ0MDAwMDEzMQotOjEwMjg3MDAwM0ExMDAwODAwRTAwMDU1NzAwMDAwMDAwMDI0MjEwMjFBRgotOjEwMjg4MDAwMjQwM0ZGODAwMDQzMTAyNEFFMjIwMDk0OTNBNDAwMTg3OAotOjEwMjg5MDAwM0MxMzA4MDA5MjczMDBGNzBFMDAwNTU3MzA4NDAwN0Y0OAotOjEwMjhBMDAwMDI0MjEwMjEzMDQyMDA3RjNDMDM4MDA2MDA0MzQwMjE1OQotOjEwMjhCMDAwOEZBMzAwMUMyNDAyRkZGRjEwNjIwMDM0QUZBODAwNDA2OQotOjEwMjhDMDAwOTNBMjAwMTk5NTAzMDAxNDMwNDQwMEZGMzA2M0ZGRkYwQQotOjEwMjhEMDAwMDA2NDE4MkIxMDYwMDAxMDAwMDAwMDAwOTUwNDAwMTQyNAotOjEwMjhFMDAwOEQwNzAwMUM4RDA2MDAxODMwODRGRkZGMDA0NDIwMjM1NAotOjEwMjhGMDAwMDAwNDIxMDAwMEU0MzgyMTAwMDAxMDIxMDBFNDIwMkIxNgotOjEwMjkwMDAwMDBDMjMwMjEwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMTgwNAotOjEwMjkxMDAwMEEwMDBBMjM5M0EyMDAxOTk1MDQwMDE0OEQwNzAwMUNENQotOjEwMjkyMDAwOEQwNjAwMTgzMDg0RkZGRjAwODIyMDIzMDAwNDIxMDA2MAotOjEwMjkzMDAwMDAwMDEwMjEwMDgwMTgyMTAwQzIzMDIzMDBFNDIwMkI2OQotOjEwMjk0MDAwMDBDNDMwMjMwMEUzMzgyM0FEMDcwMDFDQUQwNjAwMTg5NwotOjEwMjk1MDAwOTNBMjAwMTk4RkEzMDA0MEE0NjIwMDE0OTdBMjAwMUE0QQotOjEwMjk2MDAwQTQ2MjAwMTY4RkEyMDAxQ0FDNjIwMDEwOEZBMjAwMUM5MwotOjEwMjk3MDAwQUM2MjAwMEM5M0EyMDAxOUE0NjIwMDIwOTdBMjAwMUE3NgotOjEwMjk4MDAwQTQ2MjAwMjI4RkEyMDAxQ0FDNjIwMDI0M0MwNDgwMDhEOAotOjEwMjk5MDAwMzQ4MzAwODA4QzYyMDAzODhGQTIwMDIwMDIwMDg4MjFERQotOjEwMjlBMDAwQUM2MjAwM0M4RkEyMDAyMEFDODIwMDAwOTNBMjAwMTgxMQotOjEwMjlCMDAwQTA2MjAwNEM5M0EyMDAxOEEwODIwMDA5QTA2MDAwNjhFOQotOjEwMjlDMDAwOTNBMjAwMTgxMDUxMDA1MjkzQTQwMDE4MzIzMDAwN0ZENwotOjEwMjlEMDAwMEUwMDA1NTcwMjAwMjAyMTAyNDIxMDIxMjQwN0ZGODAyQgotOjEwMjlFMDAwMzA0NjAwN0YzQzAzODAwMDAwNDcxMDI0QUM2MjAwOTQxNgotOjEwMjlGMDAwM0MwMjgwMDYwMEMyMzAyMTkwQzIwMDNDQUZBNjAwNDBERAotOjEwMkEwMDAwMDAwMDIwMjEwMDQ3MTAyNUEwQzIwMDNDOEZBODAwNDBGNAotOjEwMkExMDAwOTUwMjAwMDI5NTAzMDAxNDhEMDcwMDFDMzA0MkZGRkY1MQotOjEwMkEyMDAwMzA2M0ZGRkY4RDA2MDAxODAwNDMxMDIzMDAwMjExMDBFMQotOjEwMkEzMDAwMDBFMjM4MjEwMEUyMTAyQjAwQzQzMDIxMDBDMjMwMjExNgotOjEwMkE0MDAwQUQwNzAwMUNBRDA2MDAxODk1MDIwMDAyQTUwMjAwMTQ5NwotOjEwMkE1MDAwQTUwMDAwMTY4RDAyMDAwOEFEMDIwMDEwOEQwMjAwMDhDRQotOjEwMkE2MDAwQUQwMjAwMEM5NTAyMDAwMkE1MDIwMDIwQTUwMDAwMjI4NAotOjEwMkE3MDAwOEQwMjAwMDhBRDAyMDAyNDkxMDIwMDNDMzA0MjAwNDA2QgotOjEwMkE4MDAwMTA0MDAwMUEyNjIyMDAwMUEzQjAwMDM4M0MxMDgwMDgzNAotOjEwMkE5MDAwQTM4MDAwMTgzNjEwMDEwMDhFMDIwMEQwOEQwMzAwMzQ5MAotOjEwMkFBMDAwMjdBNDAwNDAyN0E1MDAzODAwNDMxMDIxMEUwMDA3QjREQQotOjEwMkFCMDAwQUUwMjAwRDA5M0EyMDAzODNDMDM4MDAwQTIwMjAwQzUwMQotOjEwMkFDMDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDFDQUM2MjAyNDBFMAotOjEwMkFEMDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwQUM2MjAyNzhCMAotOjEwMkFFMDAwMEUwMDA5MkYwMDAwMDAwMDI2MjIwMDAxMzA0MzAwN0Y2NQotOjEwMkFGMDAwMTQ3MzAwMDQwMDQwMjAyMTI0MDNGRjgwMDIyMzEwMjRDQgotOjEwMkIwMDAwMDA0MzIwMjY5M0EyMDAxODBBMDAwQTNGMzA5MTAwRkZEQwotOjEwMkIxMDAwOEZBMzAwMUMyNDAyRkZGRjEwNjIwMDBBMzA5MDAwRkYwOAotOjEwMkIyMDAwMjQ4MjAwMDEyNDgzMDAwMTMwNDIwMDdGMTQ1MzAwMDVGOQotOjEwMkIzMDAwMzA3MDAwRkYyNDAzRkY4MDAwODMxMDI0MDA0MzEwMjYyMAotOjEwMkI0MDAwMzA1MDAwRkYzQzAyODAwODkwNDIwMDA4MDIwMDg4MjFCQgotOjEwMkI1MDAwMzA1MDAwRkYxMjMwMDAxOTMyMjIwMDdGMDAwMjExQzBGNQotOjEwMkI2MDAwMDI0MjEwMjEyNDQyMDI0MDI0MDNGRjgwMDA0MzE4MjQyMwotOjEwMkI3MDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDYxQwotOjEwMkI4MDAwMDA0MzEwMjE4QzQzMDAwQzAwNDAyMDIxMTA2MDAwMEJGQQotOjEwMkI5MDAwQUZBMjAwNDAwRTAwMDU2OTAwMDAwMDAwMjYyMzAwMDFERQotOjEwMkJBMDAwMjQwNUZGODAzMDYyMDA3RjE0NTMwMDAyMDIyNTIwMjQ5OAotOjEwMkJCMDAwMDA4NTE4MjYwQTAwMEFBMzMwNzEwMEZGM0MwNDgwMDgzMwotOjEwMkJDMDAwMzQ4NDAwODA4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY3NgotOjEwMkJEMDAwMDA2MjE4MjRBQzgzMDAxODNDMDM4MDAwOEM2MjAxRjg2QQotOjEwMkJFMDAwMDQ0MEZGRkUwMDAwMDAwMEFDNzIwMUMwMjQwMjAwMDI5RAotOjEwMkJGMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDBCMDJBMgotOjEwMkMwMDAwOEZCRjAwNTgzQzA0ODAwODkwQzMwMDAxOTA4MjAwMEJFNQotOjEwMkMxMDAwMTQ0MzAwMkY4RkJGMDA1ODM0OTAwMDgwOTIwMjAwMDhBOAotOjEwMkMyMDAwMzA0MjAwNDAxMDQwMDAyMDAwMDAwMDAwOTIwMjAwMDhFNgotOjEwMkMzMDAwMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA1MDI0MDIwMjE5NAotOjEwMkM0MDAwMEUwMDBFQTUyNDA1MDA5MzBBMDAwQjAyOEZCRjAwNTg0QQotOjEwMkM1MDAwOTIwMjAwMDkyNDAzMDAxODMwNDIwMEZGMTQ0MzAwMERDMwotOjEwMkM2MDAwMDI0MDIwMjEyNDA1MDAzOTBFMDAwRTNEMDAwMDMwMjFENQotOjEwMkM3MDAwMEUwMDAzMTU4Rjg0MDAxQzhGODJGRkFDMjQwMzAwMTIwQQotOjEwMkM4MDAwQTA0MzAwMDkwRTAwMDMyMDhGODQwMDFDMEEwMDBCMDJFMQotOjEwMkM5MDAwOEZCRjAwNTgyNDA1MDAzNjBFMDAwRTNEMDAwMDMwMjE4NQotOjEwMkNBMDAwMEEwMDBCMDI4RkJGMDA1ODBFMDAwMzE1MDI0MDIwMjFCRQotOjEwMkNCMDAwOTIwMjAwMDU4Rjg0MDAxQzM0NDIwMDIwMEUwMDAzMjA4NQotOjEwMkNDMDAwQTIwMjAwMDUwRTAwMTA0QzhGODQwMDFDOEZCRjAwNTgxQwotOjEwMkNEMDAwOEZCMzAwNTQ4RkIyMDA1MDhGQjEwMDRDOEZCMDAwNDhCQQotOjEwMkNFMDAwMjQwMzBDODAzQzAyODAwMDI3QkQwMDYwMDNFMDAwMDg0NAotOjEwMkNGMDAwQUM0MzAwMjQyN0JERkZFODNDMDI4MDA4QUZCMDAwMTBDMQotOjEwMkQwMDAwQUZCRjAwMTQzNDQ1MDEwMDNDMTA4MDAwOEUwMjAxNDAyQQotOjEwMkQxMDAwOTRBMzAwMEUwMDAwMzAyMTAwNDAyMDIxQUY4MjAwMUM0RgotOjEwMkQyMDAwMzA2M0ZGRkYzNDAyRkZGRjEwNjIwMDA2M0MwNzYwMjBBMwotOjEwMkQzMDAwMjQwMkZGRkZBNEEyMDAwRTk0QTUwMERBMEUwMDA4RUUwNAotOjEwMkQ0MDAwMzBBNUZGRkYyNDAyMEM4MEFFMDIwMDI0OEZCRjAwMTRDOAotOjEwMkQ1MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGQzA5QQotOjEwMkQ2MDAwM0MwOTgwMDAzQzA1ODAwOEFGQjcwMDM0QUZCMjAwMjBCQQotOjEwMkQ3MDAwQUZCRjAwMzhBRkI2MDAzMEFGQjUwMDJDQUZCNDAwMjhGRAotOjEwMkQ4MDAwQUZCMzAwMjRBRkIxMDAxQ0FGQjAwMDE4MzUzMjAxMDA2MgotOjEwMkQ5MDAwMzRBODAxMDA4RDI3MDEwMDhFNDIwMDE0OEQwMzAwRDQ1OQotOjEwMkRBMDAwMDAwMEI4MjFBMzgwMDAxODAwNDMxMDIzMTg0MDAwNTVFQwotOjEwMkRCMDAwQUY4NzAwMUM4RTQyMDAxNDI0MDNGRjgwMjRFNDAwNDBFRgotOjEwMkRDMDAwQUQwMjAwRDQ5MEE2MDAwODkxMDUwMEM1MzA4NDAwN0ZCNAotOjEwMkREMDAwMzBEMzAwN0YzMEEyMDBGRjAwMDIxMUMwMDBFMjEwMjFCQQotOjEwMkRFMDAwMjQ0MjAyNDBBM0E1MDAxMDAwNDMxMDI0OEQxNDAwRDBGQgotOjEwMkRGMDAwOEQxNTAwRDRBRDIyMDAyNDkzQTMwMDEwM0MwMjgwMEE1QwotOjEwMkUwMDAwMDA4MjIwMjFBRkE0MDAxNDEwNzMwMDMzMDAwMEIwMjExMQotOjEwMkUxMDAwOEZBMzAwMTQyN0E0MDAxNDI3QTUwMDEwOEM2MjAwMzQ4RgotOjEwMkUyMDAwMDI4MjgwMjEwMkIwMTAyMzA0NDAwMDJCMjQxMUZGODA3NQotOjEwMkUzMDAwOTA2MjAwM0MwMjIyMTAyNDMwNDIwMEZGMTQ0MDAwMUIyQwotOjEwMkU0MDAwMDIwMEEwMjE5MDYyMDAzQzM0NDIwMDQwQTA2MjAwM0M5RAotOjEwMkU1MDAwOTNBMjAwMTAyNDQyMDAwMTMwNDMwMEZGQTNBMjAwMTBGRgotOjEwMkU2MDAwM0MwMjA4MDA4QzQyMDBGNDUwNjIwMDAxQTNBMDAwMTA1NAotOjEwMkU3MDAwMEUwMDA1NTc5M0E0MDAxMDhGOTAwMDFDM0MwMzgwMDBBNwotOjEwMkU4MDAwMDIwMjEwMjEwMDUxMTAyNEFDNjIwMDI0MEUwMDA1NTdFQwotOjEwMkU5MDAwOTNBNDAwMTAwMjAyODAyMTMyMTAwMDdGM0MwMjgwMEFCRAotOjEwMkVBMDAwMDIwMjgwMjEwQTAwMEI4MUFGQjAwMDE0MEUwMDA3QjRBQgotOjEwMkVCMDAwMDAwMDAwMDAzQzAyODAwODM0NDIwMTAwQUM1MDAwRDAwOQotOjEwMkVDMDAwOTNBMzAwMTAyNDE2MDAwMUEwNDMwMEM1OTNBMjAwMTA5NAotOjEwMkVEMDAwMTQ1M0ZGRDA4RkEzMDAxNDI0MDIwMDAxMTZDMjAwMDk2RQotOjEwMkVFMDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUM0RAotOjEwMkVGMDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDBDNAotOjEwMkYwMDAwQUM2MjAyNzg5MjQyMDAwQjI0MDMwMDAyMzA0MjAwRkZDMAotOjEwMkYxMDAwMTQ0MzAwNzIwMDAwMDAwMDk2NDIwMDA4MzA0MzAwRkY5NgotOjEwMkYyMDAwMjQwMjAwODIxNDYyMDA0MDI0MDIwMDg0M0MwMjgwMDBEQgotOjEwMkYzMDAwMzQ0OTAxMDA4RDIyMDAwQzk1MjMwMDA2MDAwMjE2MDI4MAotOjEwMkY0MDAwMzA2M0ZGRkYzMDQ0MDAzRjI0MDIwMDI3MTA4MjAwMEY0RgotOjEwMkY1MDAwQUY4MzAwMTQyODgyMDAyODEwNDAwMDA4MjQwMjAwMzFBQQotOjEwMkY2MDAwMjQwMjAwMjExMDgyMDAwOTI0MDIwMDI1MTA4MjAwMDc5QgotOjEwMkY3MDAwOTM4MjAwMTkwQTAwMEJDMDAwMDAwMDAwMTA4MjAwMDdCNQotOjEwMkY4MDAwOTM4MjAwMTkwQTAwMEJDMDAwMDAwMDAwMEUwMDA3NkNCRAotOjEwMkY5MDAwMDEyMDIwMjEwQTAwMEM0MDAwMDAwMDAwM0MwMzgwMDBCQQotOjEwMkZBMDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDFDQUM2MjAyNDBGQgotOjEwMkZCMDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwQUM2MjAyNzhDQgotOjEwMkZDMDAwMEEwMDBDNDAwMDAwMDAwMDk1MjMwMDA2OTEyNDAwMDUzMwotOjEwMkZEMDAwOEQyNTAwMEM4RDI2MDAxMDhEMjcwMDE4OEQyODAwMUNEMwotOjEwMkZFMDAwOEQyOTAwMjAyNDQyMDAwMTNDMDEwODAwQTQyMzRCRDI3QgotOjEwMkZGMDAwM0MwMTA4MDBBMDI0NEJEMTNDMDEwODAwQUMyNTRCRDg3MwotOjEwMzAwMDAwM0MwMTA4MDBBQzI2NEJEQzNDMDEwODAwQUMyNzRCRTQzQgotOjEwMzAxMDAwM0MwMTA4MDBBQzI4NEJFODNDMDEwODAwQUMyOTRCRUMxMwotOjEwMzAyMDAwMEEwMDBDNDBBMzgyMDAxOTE0NjIwMDBBMjQwMjAwODFFNQotOjEwMzAzMDAwM0MwMjgwMDgzNDQyMDEwMDk0NDUwMERBOTI0NjAwMDVDMwotOjEwMzA0MDAwOEY4NDAwMUMzMEE1RkZGRjMwQzYwMEZGMEEwMDBDMDE3MgotOjEwMzA1MDAwM0MwNzYwMjExNDYyMDA1QzAwMDAwMDAwOTI0MjAwMEFGQwotOjEwMzA2MDAwMzA0MzAwRkYzMDYyMDAyMDEwNDAwMDA3MzA2MjAwNDAxMwotOjEwMzA3MDAwM0MwMjgwMDgzNDQyMDEwMDk0NDUwMERBOEY4NDAwMUMzMQotOjEwMzA4MDAwMEEwMDBCRkYyNDA2MDA0MDEwNDAwMDA3MDAwMzE2MDA1MgotOjEwMzA5MDAwM0MwMjgwMDgzNDQyMDEwMDk0NDUwMERBOEY4NDAwMUMxMQotOjEwMzBBMDAwMEEwMDBCRkYyNDA2MDA0MTAwMDIxNjAzMDQ0MTAwNDZGQgotOjEwMzBCMDAwM0MwMjgwMDgzNDQyMDEwMDk0NDUwMERBOEY4NDAwMUNGMQotOjEwMzBDMDAwMjQwNjAwNDIzMEE1RkZGRjNDMDc2MDE5MEUwMDA4RUUwMQotOjEwMzBEMDAwMDAwMDAwMDAwQTAwMEM0MDAwMDAwMDAwOTI0MjAwMEJCQgotOjEwMzBFMDAwMjQwNDAwMTYzMDQyMDBGRjEwNDQwMDA2M0MwNjgwMDAxNQotOjEwMzBGMDAwOTI0MjAwMEIyNDAzMDAxNzMwNDIwMEZGMTQ0MzAwMzJCOQotOjEwMzEwMDAwMDAwMDAwMDAzNEM1MDEwMDkwQTIwMDBCMzA0MjAwRkYxNwotOjEwMzExMDAwMTQ0NDAwMEIwMDAwODAyMThDQTIwMDIwOENBNDAwMjAwRAotOjEwMzEyMDAwMjQwM0ZGODAwMDQzMTAyNDAwMDIxMTQwMzA4NDAwN0ZGQwotOjEwMzEzMDAwMDA0NDEwMjUzQzAzMjAwMDAwNDMxMDI1QUNDMjA4MzA5OQotOjEwMzE0MDAwOTRBMjAwMDgwMDAyMTQwMDAwMDIxNDAzMDQ0MjAwMDFDQgotOjEwMzE1MDAwMjQxMDAwMDE5NEEyMDAwODMwNDIwMDgwNTA0MDAwMUE2MAotOjEwMzE2MDAwMDIwMEI4MjE5NEEyMDAwODMwNDIyMDAwNTA0MDAwMTYwRQotOjEwMzE3MDAwMDIwMEI4MjE4Q0EzMDAxODNDMDIxQzJEMzQ0MjE5RUQyQQotOjEwMzE4MDAwMTA2MjAwMTEwMjAwQjgyMTNDMDIwODAwOEM0MjAwRDRGOQotOjEwMzE5MDAwMTA0MDAwMDUzQzAyODAwODI0MDMwMDA0MzQ0MjAxMDA3MgotOjEwMzFBMDAwQTA0MzAwRUMzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE2MAotOjEwMzFCMDAwOEY4NDAwMUMyNDA2MDAwNjMwQTVGRkZGMEUwMDA4RUVEOQotOjEwMzFDMDAwM0MwNzYwMjEwMjAwQjgyMTBFMDAwOTJGMDAwMDAwMDAxQQotOjEwMzFEMDAwOTI0MjAwMEEzMDQyMDAwODEwNDAwMDA0M0MwMjgwMDA4NQotOjEwMzFFMDAwMEUwMDEyMUYwMDAwMDAwMDNDMDI4MDAwMjQwMzBDODAyRgotOjEwMzFGMDAwQUM0MzAwMjQ4RkJGMDAzODAyRTAxMDIxOEZCNjAwMzBBRQotOjEwMzIwMDAwOEZCNzAwMzQ4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQwMwotOjEwMzIxMDAwOEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDhBRgotOjEwMzIyMDAwMjdCRDAwNDAyNDAyRkY4MDAwODIyMDI0M0MwMjkwMDA0MQotOjEwMzIzMDAwMzQ0MjAwMDcwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjA3QwotOjEwMzI0MDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDA3MAotOjEwMzI1MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMjQwMkZGODAxRgotOjEwMzI2MDAwMDA4MjIwMjQzNDYyMDAwNzAwODIyMDI1QUM2NDAwMjAwNAotOjEwMzI3MDAwOEM2MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDgxNAotOjEwMzI4MDAwMDAwMDAwMDAzQzAyODAwODI0MDMwMDA1MzQ0MjAxMDBENQotOjEwMzI5MDAwQTA0MzAwRUMzQzAyODAwMDhDNDIwMTAwM0MwMzgwMDAxMwotOjEwMzJBMDAwQUY4MjAwMUM4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMUNGQgotOjEwMzJCMDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDAwMAotOjEwMzJDMDAwQUM2MjAyNzgwM0UwMDAwODAwMDAwMDAwMjdCREZGRThDMAotOjEwMzJEMDAwM0MwNjgwMDBBRkJGMDAxMDM0QzUwMTAwOTRBMjAwMDg3NgotOjEwMzJFMDAwMzA0NDAwRkYzODgzMDA4MjM4ODIwMDg0MkM2MzAwMDE2MAotOjEwMzJGMDAwMkM0MjAwMDEwMDYyMTgyNTEwNjAwMDMwMjQwMjAwODM3NwotOjEwMzMwMDAwOTM4MjAwMTk1MDQwMDAzOThGQkYwMDEwM0MwMjA4MDAyMgotOjEwMzMxMDAwOTA0MjRCRDg4Q0M0MDEwMDNDMDcwODAwOTRFNzRCRDI4NAotOjEwMzMyMDAwMzA0NjAwM0YzOEMzMDAzMjM4QzIwMDNGMkM2MzAwMDFGMgotOjEwMzMzMDAwMkM0MjAwMDEwMDYyMTgyNUFGODQwMDFDQUY4NzAwMTRFNgotOjEwMzM0MDAwQTM4MDAwMTkxNDYwMDAwNjAwQTAyMDIxMjQwMjAwMjBBMAotOjEwMzM1MDAwMTRDMjAwMTEzNDAyRkZGRjE0RTIwMDBGMDAwMDAwMDA0RAotOjEwMzM2MDAwMjQwMjAwMjAxNEMyMDAwNTAwMDAwMDAwOENBMzAwMTRGOQotOjEwMzM3MDAwMjQwMkZGRkYxMDYyMDAwQTAwMDAwMDAwM0MwNDA4MDA2NQotOjEwMzM4MDAwMjQ4NDRCQ0MwMDAwMzAyMTBFMDAwNkZCMjQwNzAwMDFGMgotOjEwMzM5MDAwMEEwMDBDQjYwMDAwMDAwMDBFMDAwNzZDMDAwMDAwMDBFMAotOjEwMzNBMDAwMEUwMDA5MkYwMDAwMDAwMDI0MDMwQzgwM0MwMjgwMDA2NgotOjEwMzNCMDAwQUM0MzAwMjQwQTAwMENFRjhGQkYwMDEwMTQ4MjAwMDZGQgotOjEwMzNDMDAwMjQ4MkZGODA4Q0MzMDEwNDNDMDI2MDIwQUM0MzAwMTRDMwotOjEwMzNEMDAwMEEwMDBDRUY4RkJGMDAxMDMwNDIwMEZGMkM0MjAwMDJBOQotOjEwMzNFMDAwMTA0MDAwMDQyNDAyMDAyMjhGQkYwMDEwMEEwMDBCMjVBOQotOjEwMzNGMDAwMjdCRDAwMTgxNDgyMDAwMzhGQkYwMDEwMEEwMDBDNkY1NQotOjEwMzQwMDAwMjdCRDAwMTgzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMUQxRgotOjEwMzQxMDAwMjQwMjAwMTg5MEEzMDAwOTE0NjIwMDAzMjQwMjAwMTY3RAotOjEwMzQyMDAwMEEwMDBDREIyNDAzMDAwODE0NjIwMDA3MjQwMjAwMTdDMgotOjEwMzQzMDAwMjQwMzAwMTIzQzAyODAwODM0NDIwMDgwQTA0MzAwMDlBQgotOjEwMzQ0MDAwMEEwMDBDRTg5NEE3MDAwODU0NjIwMDA3OTRBNzAwMDgzQgotOjEwMzQ1MDAwOEY4MkZGQUMyNDA0RkZGRTkwNDMwMDA1MDA2NDE4MjQxMwotOjEwMzQ2MDAwQTA0MzAwMDU5NEE3MDAwODkwQTYwMDFCOENBNDAwMDBCMAotOjEwMzQ3MDAwOTRBNTAwMDY4RkJGMDAxMDAwMDczQzAwMEEwMDA4Qzk5MQotOjEwMzQ4MDAwMjdCRDAwMTgwM0UwMDAwODI3QkQwMDE4M0MwNTA4MDAxMAotOjEwMzQ5MDAwOTRBNTRDMEEzQzAzMDgwMDhDNjM0QzE0M0MwNDgwMDA0NwotOjEwMzRBMDAwMzBBMkZGRkYwMDAyMzBDMDI0MDJGRkYwMDBDMjEwMjQ0RgotOjEwMzRCMDAwMDA2MjE4MjFBQzgzMDAzQzNDMDIwODAwOEM0MjRDMTA5NgotOjEwMzRDMDAwM0MwMzgwMDBBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTBDMwotOjEwMzREMDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwMzRFMDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMzBDMjAwMDgxNgotOjEwMzRGMDAwMTA0MDAwMDkzQzAyODAwMDhDNjIwNDA4OEM2MzA0MENCQwotOjEwMzUwMDAwM0MwMTA4MDBBQzIyNEMwMDNDMDEwODAwQUMyMzRDMDRGOAotOjEwMzUxMDAwMEEwMDBEMUIzQzAzMDAyMDhDNDMwNDAwOEM0MjA0MDQ3MQotOjEwMzUyMDAwM0MwMTA4MDBBQzIzNEMwMDNDMDEwODAwQUMyMjRDMDREOAotOjEwMzUzMDAwM0MwMzAwMjAzQzAyODAwMEFDNDMwMDMwM0MwNzgwMDA4QwotOjEwMzU0MDAwOENFMjAwMzAwMDQzMTAyNDE0NDBGRkZEMDAwMDAwMDAxNgotOjEwMzU1MDAwM0MwMzA4MDA5NDYzNEMwODNDMDIwODAwOTQ0MjRDMEM2NQotOjEwMzU2MDAwM0MwNjA4MDA5NEM2NEMwRTI0QTUwMDAxMDA2MjE4MjFGOAotOjEwMzU3MDAwMzBBNEZGRkYzQzAyMDA0MEFDRTIwMDMwM0MwMTA4MDBGOAotOjEwMzU4MDAwQTQyMzRDMDgzQzAxMDgwMEE0MjU0QzBBMTQ4NjAwMDMxRgotOjEwMzU5MDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0QzBBMDNFMDAwMDhFMQotOjEwMzVBMDAwMDAwMDAwMDAyN0JERkZFODNDMDQwODAwMjQ4NDRCRjAyNQotOjEwMzVCMDAwM0MwNTgwMEFBRkJGMDAxMDBFMDAwRTIwMjQwNjAwMEE1MgotOjEwMzVDMDAwM0MwMjA4MDA5NDQyNEJGMjNDMDMwODAwOTQ2MzRDMEUwQQotOjEwMzVEMDAwMzA0MjAwMEYyNDQyMDAwMzAwNDMxODA0MjQwMjdGRkZGRQotOjEwMzVFMDAwMDA0MzEwMkIxMDQwMDAwMkFGODMwMDI4MDAwMDAwMERBNAotOjEwMzVGMDAwMEUwMDBDRjEwMDAwMDAwMDNDMDIwODAwOTQ0MjRCRjQ2NQotOjEwMzYwMDAwM0MwMzA4MDA5NDYzNEJGQThGQkYwMDEwMzA0MjAwMEY1OAotOjEwMzYxMDAwMDAwMjE1MDAwMDYyMTgyNTI3QkQwMDE4M0MwMjgwMDAzQQotOjEwMzYyMDAwMDNFMDAwMDhBQzQzMDBBMDNDMDI4MDBBOTQ0MzAwMDY3QgotOjEwMzYzMDAwM0MwMjA4MDA5NDQyNEJGQTNDMDEwODAwQTQyMzRCRjZEQwotOjEwMzY0MDAwMDA0MzEwMjM4RjgzMDAyODMwNDJGRkZGMDA0MzEwMkJEQwotOjEwMzY1MDAwMDNFMDAwMDgzODQyMDAwMTI3QkRGRkU4QUZCRjAwMTBCQgotOjEwMzY2MDAwM0MwMjgwMEE5NDQyMDAwNjNDMDEwODAwQTQyMjRCRjY2QQotOjEwMzY3MDAwMEUwMDBENTgwMDAwMDAwMDU0NDBGRkZBM0MwMjgwMEE4MgotOjEwMzY4MDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgyQQotOjEwMzY5MDAwQUZCRjAwMTAwRTAwMEQ1ODAwMDAwMDAwMTA0MDAwMDNFNgotOjEwMzZBMDAwMDAwMDAwMDAwRTAwMEQ2NDAwMDAwMDAwM0MwMjA4MDA1NQotOjEwMzZCMDAwOEM0MjRDMDAzQzAzODAwMDhGQkYwMDEwQUM2MjAwMzg4RAotOjEwMzZDMDAwM0MwMjA4MDA4QzQyNEMwNDM0NjQwNDAwMjdCRDAwMThGRQotOjEwMzZEMDAwQUM2MjAwM0MzQzAyMDAwNUFDNjIwMDMwQUY4NDAwMkNDMAotOjEwMzZFMDAwMDNFMDAwMDhBRjgwMDAyNDhGODIwMDI0M0MwMzAwMDYyMgotOjEwMzZGMDAwMDAwMjExNDAwMDQzMTAyNTNDMDM4MDAwQUM2MjAwMzAwMgotOjEwMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDBDQgotOjEwMzcxMDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwQUY4MjAwMkNFNAotOjEwMzcyMDAwMDNFMDAwMDhBRjgwMDAyNDNDMDYwODAwOENDNjRDMDQ2RgotOjEwMzczMDAwOEY4NTAwMjQ4RjgzMDAyQzNDMDIwODAwOTQ0MjRCRkFCMgotOjEwMzc0MDAwMjdCREZGRTAyNEE1MDAwMTI0NjMwMDIwMjQ0MjAwMDFERQotOjEwMzc1MDAwMjRDNzAwMjBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMThGNQotOjEwMzc2MDAwQUY4NTAwMjRBRjgzMDAyQzNDMDEwODAwQTQyMjRCRkE1MwotOjEwMzc3MDAwMzA5MDAwRkYzQzAxMDgwMEFDMjc0QzA0MDRDMTAwMDg1NQotOjEwMzc4MDAwMDAwMDg4MjEwNEUwMDAwNjAwMDAwMDAwM0MwMjA4MDA2MAotOjEwMzc5MDAwOEM0MjRDMDAyNDQyMDAwMTNDMDEwODAwQUMyMjRDMDA0OQotOjEwMzdBMDAwM0MwNDA4MDA5NDg0NEMwODNDMDIwODAwOTQ0MjRCRkEwNAotOjEwMzdCMDAwMkUwMzAwMDEwMDQ0MTAyNjJDNDQwMDAxMDA4MzE4MjQyRAotOjEwMzdDMDAwMTA2MDAwMDQwMDEwMTAyQjI0MDIwMDAxQUY4MjAwMjBDMgotOjEwMzdEMDAwMDAxMDEwMkIwMDgyMTAyNTE0NDAwMDA2OEY4MjAwMjA1QwotOjEwMzdFMDAwMTQ0MDAwMDQ4RjgzMDAyNDI0MDIwMDEwMTQ2MjAwMEY5MAotOjEwMzdGMDAwMDAwMDAwMDAwRTAwMEQ4ODI0MTEwMDAxM0MwMzA4MDBBOQotOjEwMzgwMDAwOTQ2MzRCRkEzQzAyMDgwMDk0NDI0QzA4MTQ2MjAwMDM5MwotOjEwMzgxMDAwMDAwMDAwMDAwRTAwMENGMTAwMDAwMDAwMTYwMDAwMDM4NAotOjEwMzgyMDAwMDAwMDAwMDAwRTAwMEQ3MTAwMDAwMDAwM0MwMzA4MDBDNQotOjEwMzgzMDAwOTQ2MzRCRkUzQzAyMDgwMDk0NDI0QkZDMjQ2MzAwMDE1RAotOjEwMzg0MDAwMzA2NEZGRkYzQzAxMDgwMEE0MjM0QkZFMTQ4MjAwMDNGOAotOjEwMzg1MDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0QkZFMTIwMDAwMEJGOQotOjEwMzg2MDAwMDAwMDAwMDAzQzAyMDgwMDk0NDI0QkY0M0MwMzA4MDBCNgotOjEwMzg3MDAwOTQ2MzRCRkEwMDAyMTUwMDAwNjIxODI1M0MwMjgwMDA5OAotOjEwMzg4MDAwQUM0MzAwQTAwQTAwMERGN0FGODAwMDIwMEUwMDBENThEOQotOjEwMzg5MDAwMDAwMDAwMDAxMDQwMDAwNDAyMjAxMDIxMEUwMDBENjQwMgotOjEwMzhBMDAwMDAwMDAwMDAwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQwQgotOjEwMzhCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMDNFMDAwMDhERgotOjEwMzhDMDAwMDAwMDAwMDA4RjgyMDAzNDNDMDMwMDA2MDAwMjExNDAxQgotOjEwMzhEMDAwMDA0MzEwMjUzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDA3MwotOjEwMzhFMDAwMDAwMDAwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTA2OAotOjEwMzhGMDAwMTA0MEZGRkQzNDYyMDQwMEFGODIwMDMwMDNFMDAwMDg5NgotOjEwMzkwMDAwQUY4MDAwMzQwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDg0RAotOjEwMzkxMDAwMDAwMDAwMDAzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjFFOQotOjEwMzkyMDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDJGQgotOjEwMzkzMDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAwRTE2MDAwNTI4NDBFOAotOjEwMzk0MDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkYzRAotOjEwMzk1MDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDBFMjAwNgotOjEwMzk2MDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgwOAotOjEwMzk3MDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwMzk4MDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQ3MwotOjEwMzk5MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODA4MAotOjEwMzlBMDAwMjQwMzAwMDFBQzQzMDAwQ0E0NDMwMDEwQTQ0MzAwMTIwNAotOjEwMzlCMDAwQTQ0MzAwMTQwM0UwMDAwOEE0NDMwMDE2MjdCREZGRDg2OQotOjEwMzlDMDAwMjQ4MjAwODAyNDA3RkY4MDMwNDMwMDdGQUZCMDAwMTBDNgotOjEwMzlEMDAwMDA4MDgwMjEwMDQ3MjAyNDNDMDIwODAwOEM0MjAwMjAwNwotOjEwMzlFMDAwM0MwODgwMEVBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQ5QQotOjEwMzlGMDAwQUZCRjAwMjAzQzA5ODAwMDAwNjgxODIxMzBCMTAwRkZGMwotOjEwM0EwMDAwMzBEMjAwRkYxMDQwMDAyOTAwMDA5ODIxMjYwMjAxMDA1QQotOjEwM0ExMDAwQUQyNDAwMkMwMDQ3MjgyNDMwNDIwMDdGMDA0ODIwMjE5QwotOjEwM0EyMDAwOTA2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQ2MQotOjEwM0EzMDAwMDAwMDAwMDBBRDI1MDAyQzk0ODIwMERBMzA1M0ZGRkYxNwotOjEwM0E0MDAwMEUwMDBENzEwMDAwMDAwMDNDMDMwODAwOTQ2MzRCRkU2MwotOjEwM0E1MDAwOEY4MjAwMkMwMDExMkMwMDAwQTMyODI1MDAxMjI0MDBDNgotOjEwM0E2MDAwM0MwMzQwMDAzNDg0MDAwMTAwQTMyODI1QUM1MDAwMDAzMgotOjEwM0E3MDAwOEZCRjAwMjBBQzQwMDAwNDhGQjIwMDE4QUM1MzAwMDg4OAotOjEwM0E4MDAwOEZCMTAwMTRBQzQwMDAwQzhGQjMwMDFDQUM0NDAwMTA4QwotOjEwM0E5MDAwOEZCMDAwMTBBQzQwMDAxNDI0MDQwMDAxQUM0MDAwMThBQQotOjEwM0FBMDAwMjdCRDAwMjgwQTAwMEQ5OEFDNDUwMDFDOEZCRjAwMjBFMAotOjEwM0FCMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBQwotOjEwM0FDMDAwMDNFMDAwMDgyN0JEMDAyODNDMDY4MDAwMzRDMjAxMDA0NgotOjEwM0FEMDAwOTA0MzAwMEYyNDAyMDAxMDEwNjIwMDBFMjg2NTAwMTFCMAotOjEwM0FFMDAwMTBBMDAwMDcyNDAyMDAxMjI0MDIwMDA4MjQwNTAwM0E1NgotOjEwM0FGMDAwMTA2MjAwMDYwMDAwMzAyMTAzRTAwMDA4MDAwMDAwMDAxMgotOjEwM0IwMDAwMjQwNTAwMzUxNDYyRkZGQzAwMDAzMDIxMEEwMDBFM0Q0MAotOjEwM0IxMDAwMDAwMDAwMDA4Q0MyMDA3NDhGODNGRkFDMjQ0MjBGQTAxMQotOjEwM0IyMDAwMDNFMDAwMDhBQzYyMDAwQzI3QkRGRkU4QUZCRjAwMTA0NwotOjEwM0IzMDAwMEUwMDAzMjUyNDA1MDAwMTNDMDQ4MDA4OEZCRjAwMTBGRgotOjEwM0I0MDAwMjQwMjAwMDEzNDgzMDA4MEE0NjIwMDEyMjdCRDAwMTgwMwotOjEwM0I1MDAwMjQwMjAwMDEwM0UwMDAwOEEwODAwMDFBMjdCREZGRTA1NgotOjEwM0I2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM2RgotOjEwM0I3MDAwMzBCMkZGRkYwRTAwMDMxNTAwODA4ODIxM0MwMjgwMDg1MAotOjEwM0I4MDAwMzQ1MDAwODA5MjAyMDAwOTI0MDMwMDA0MzA0MjAwRkZGOAotOjEwM0I5MDAwMTQ0MzAwMEMzQzAyODAwODEyNDAwMDA4MjQwMjAwMEE3MgotOjEwM0JBMDAwMEUwMDBFMzQwMDAwMDAwMDkyMDIwMDA1MjQwM0ZGRkUwOAotOjEwM0JCMDAwMDA0MzEwMjRBMjAyMDAwNTI0MDIwMDEyQTIwMjAwMDkwMAotOjEwM0JDMDAwM0MwMjgwMDgzNDQyMDA4MDAyMjAyMDIxMEUwMDAzMjBBNQotOjEwM0JEMDAwQTA0MDAwMjcxNjQwMDAwMzAyMjAyMDIxMEUwMDBFOTg2RQotOjEwM0JFMDAwMDAwMDAwMDAwMjIwMjAyMTMyNDYwMEZGOEZCRjAwMUM5MQotOjEwM0JGMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzg2OAotOjEwM0MwMDAwMEEwMDBFM0QyN0JEMDAyMDI3QkRGRkUwQUZCRjAwMUMwRQotOjEwM0MxMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMEUwMDAzMTUyMgotOjEwM0MyMDAwMDA4MDgwMjEwRTAwMEUzNDAwMDAwMDAwM0MwMjgwMDg1RAotOjEwM0MzMDAwMzQ0NTAwODA5MEEyMDAwOTI0MTIwMDE4MzA1MTAwRkY4MgotOjEwM0M0MDAwMTIzMjAwMDMwMjAwMjAyMTI0MDIwMDEyQTBBMjAwMDk2NwotOjEwM0M1MDAwOTBBMjAwMDUyNDAzRkZGRTAwNDMxMDI0MEUwMDAzMjA2MQotOjEwM0M2MDAwQTBBMjAwMDUwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDczMgotOjEwM0M3MDAwMDAwMDMwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTREQwotOjEwM0M4MDAwOEZCMDAwMTAwQTAwMDMyNTI3QkQwMDIwOEZCRjAwMUM0NQotOjEwM0M5MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzlDNgotOjEwM0NBMDAwMEEwMDBFM0QyN0JEMDAyMDI3QkRGRkU4M0MwMjgwMDAzMgotOjEwM0NCMDAwQUZCMDAwMTBBRkJGMDAxNDM0NDIwMTAwOTQ0MjAwMENCQQotOjEwM0NDMDAwMjQwNTAwMzYwMDgwODAyMTE0NDAwMDEyMzA0NjAwRkY5OQotOjEwM0NEMDAwMEUwMDAzMTUwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODAwMgotOjEwM0NFMDAwMjQwMzAwMTJBMDQzMDAwOTkwNDMwMDA1MzQ2MzAwMTAzMAotOjEwM0NGMDAwMEUwMDBFMzRBMDQzMDAwNTBFMDAwMzIwMDIwMDIwMjExOAotOjEwM0QwMDAwMDIwMDIwMjEwRTAwMDMyNTI0MDUwMDIwMEEwMDBGMTVDMwotOjEwM0QxMDAwMDAwMDAwMDAwRTAwMEUzRDAwMDAwMDAwMEUwMDAzMTUyNAotOjEwM0QyMDAwMDIwMDIwMjEzQzAyODAwODkwNDMwMDFCMjQwNUZGOUZENQotOjEwM0QzMDAwMDIwMDIwMjEwMDY1MTgyNDhGQkYwMDE0OEZCMDAwMTBFRQotOjEwM0Q0MDAwQTA0MzAwMUIwQTAwMDMyMDI3QkQwMDE4MjdCREZGRTA4OQotOjEwM0Q1MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzBCMTAwRkYxQQotOjEwM0Q2MDAwMEUwMDAzMTUwMDgwODAyMTNDMDI4MDA4MjQwMzAwMTIwRAotOjEwM0Q3MDAwMzQ0MjAwODAwRTAwMEUzNEEwNDMwMDA5MEUwMDAzMjBFMAotOjEwM0Q4MDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMThENAotOjEwM0Q5MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDBFM0RDRAotOjEwM0RBMDAwMjdCRDAwMjAzQzA0ODAwODkwODMwMDBFOTA4MjAwMEEwQQotOjEwM0RCMDAwMTQ0MzAwMEIwMDAwMjgyMThGODJGRkFDMjQwMzAwNTAyNQotOjEwM0RDMDAwMjQwNTAwMDE5MDQyMDAwMDMwNDIwMEZGMTQ0MzAwMDQyQgotOjEwM0REMDAwMDAwMDAwMDA5MDgyMDAwRTI0NDIwMDAxQTA4MjAwMEUyQwotOjEwM0RFMDAwMDNFMDAwMDgwMEEwMTAyMTNDMDM4MDAwOEM2MjAxRjg3MQotOjEwM0RGMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzRDMgotOjEwM0UwMDAwM0MwMjEwMDAwM0UwMDAwOEFDNjIwMUY4MjdCREZGRTBBRgotOjEwM0UxMDAwQUZCMjAwMTgzQzEyODAwOEFGQjEwMDE0QUZCRjAwMUM1NQotOjEwM0UyMDAwQUZCMDAwMTAzNjUxMDA4MDkyMjIwMDA5MjQwMzAwMEEyRQotOjEwM0UzMDAwMzA0MjAwRkYxNDQzMDAzQTAwMDAwMDAwOEU0MzAwMDRBQgotOjEwM0U0MDAwOEUyMjAwMzg1MDYyMDA3RThGQkYwMDFDOTIyMjAwMDAzQwotOjEwM0U1MDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDI1M0MwMjgwMDA0MAotOjEwM0U2MDAwOEM0MjAxNDA4RTQzMDAwNDM2NDIwMTAwMDIyMDI4MjE4QQotOjEwM0U3MDAwQUM0MzAwMUM5NjIyMDA1QzhFMjMwMDM4MzA0MkZGRkZDQQotOjEwM0U4MDAwMDAwMjEwNDAwMDYyMTgyMUFFMjMwMDFDOEU0MzAwMDQ4MwotOjEwM0U5MDAwOEUyNDAwMzg5NjIyMDA1QzAwNjQxODIzMzA0MkZGRkYxNQotOjEwM0VBMDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDY4RgotOjEwM0VCMDAwMDAwMDAwMDA4RTQyMDAwNDhFMjMwMDM4MDA0MzEwMjNDRgotOjEwM0VDMDAwMEEwMDBGODMwMDAyMjA0Mzk2MjIwMDVDMzA0MkZGRkY2RAotOjEwM0VEMDAwMDAwMjIwNDAzQzAyODAwODM0NDMwMTAwMzQ0MjAwODA0QwotOjEwM0VFMDAwQUNBNDAwMkNBMDQwMDAyNDI0MDIwMDAxQTA2MjAwMEMxRAotOjEwM0VGMDAwMEUwMDBGMzcwMDAwMDAwMDEwNDAwMDUxOEZCRjAwMUM2MwotOjEwM0YwMDAwM0MwMjgwMDA4QzQ0MDE0MDhGQkYwMDFDOEZCMjAwMTgxRgotOjEwM0YxMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjQ4MjdCRDAwMjA5OQotOjEwM0YyMDAwOTIyMjAwMDkyNDAzMDAxMDMwNDIwMEZGMTQ0MzAwMDREMQotOjEwM0YzMDAwM0MwMjgwMDA4QzQ0MDE0MDBBMDAwRkM1MDAwMDI4MjE4QgotOjEwM0Y0MDAwOTIyMjAwMDkyNDAzMDAxNjMwNDIwMEZGMTQ0MzAwMDZBOQotOjEwM0Y1MDAwMjQwMjAwMTRBMjIyMDAwOTNDMDI4MDAwOEM0NDAxNDA4QgotOjEwM0Y2MDAwMEEwMDBGRDg4RkJGMDAxQzhFMjIwMDM4OEUyMzAwM0MyMQotOjEwM0Y3MDAwMDA0MzEwMjMwNDQxMDAzMjhGQkYwMDFDOTIyMjAwMjcwRgotOjEwM0Y4MDAwMjQ0MjAwMDFBMjIyMDAyNzkyMjIwMDI3M0MwMzA4MDBCRAotOjEwM0Y5MDAwOEM2MzAwNDgzMDQyMDBGRjE0NDMwMDE2M0MxMDgwMDA0MAotOjEwM0ZBMDAwOTIyMjAwMDkyNDAzMDAwNDMwNDIwMEZGMTQ0MzAwMDk1OAotOjEwM0ZCMDAwM0MwMjgwMDA4QzQ0MDE0MDhGQkYwMDFDOEZCMjAwMTg2RgotOjEwM0ZDMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDkzMEEwMDBFQTVENQotOjEwM0ZEMDAwMjdCRDAwMjA4QzQ0MDE0MDI0MDUwMDkzOEZCRjAwMUNBNgotOjEwM0ZFMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBGMjE5QgotOjEwM0ZGMDAwMjdCRDAwMjA4RTA0MDE0MDBFMDAwMzE1MDAwMDAwMDBDNAotOjEwNDAwMDAwOEU0MjAwMDQyNDQyRkZGRkFFNDIwMDA0OEUyMjAwM0M5OAotOjEwNDAxMDAwMjQ0MkZGRkZBRTIyMDAzQzBFMDAwMzIwOEUwNDAxNDAyQwotOjEwNDAyMDAwOEUwNDAxNDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRBNgotOjEwNDAzMDAwOEZCMDAwMTAyNDA1MDAwNDBBMDAwMzI1MjdCRDAwMjBDRQotOjEwNDA0MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg4OQotOjEwNDA1MDAwMjdCRDAwMjAzQzA2ODAwMDhDQzIwMTg4M0MwMzgwMDhGQwotOjEwNDA2MDAwMzQ2NTAwODA5MDYzMDAwRTAwMDIxNDAyMzA0NDAwRkZBQgotOjEwNDA3MDAwMzA2MzAwRkYxNDY0MDAwRTNDMDI4MDA4OTBBMjAwMjYwQQotOjEwNDA4MDAwMzA0MjAwRkYxMDQ0MDAwOThGODJGRkFDQTBBNDAwMjYzQwotOjEwNDA5MDAwMjQwMzAwNTA5MDQyMDAwMDMwNDIwMEZGMTQ0MzAwMDYwOQotOjEwNDBBMDAwMDAwMDAwMDAwQTAwMDU4QzhDQzQwMTgwM0MwMjgwMDhERQotOjEwNDBCMDAwMzQ0MjAwODBBMDQ0MDAyNjAzRTAwMDA4MDAwMDAwMDAxNQotOjEwNDBDMDAwMjdCREZGRTAzMEU3MDBGRkFGQjIwMDE4QUZCRjAwMUMxNAotOjEwNDBEMDAwQUZCMTAwMTRBRkIwMDAxMDAwODA5MDIxMTRFMDAwMDZEMgotOjEwNDBFMDAwMzBDNjAwRkYwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDBDRQotOjEwNDBGMDAwMEEwMDEwMzcyNDAwMDExNzNDMDM4MDA4OTA2MjAwMEU2QwotOjEwNDEwMDAwMzA0MjAwRkYxNDQ2MDAyMzM0NjIwMDgwOTA0MjAwMjZCMwotOjEwNDExMDAwMzA0MjAwRkYxNDQ2MDAxRjAwMDAwMDAwOTA2MjAwMEZCNAotOjEwNDEyMDAwMzA0MjAwRkYxNDQ2MDAxQjAwMDAwMDAwOTA2MjAwMEFBRAotOjEwNDEzMDAwMzA0MjAwRkYxNDQ2MDAwMzhGOTBGRkFDMDAwMDAwMEREQQotOjEwNDE0MDAwOEY5MEZGQUM4RjgyRkZCMDNDMTE4MDAwQUUwNTAwM0MyOQotOjEwNDE1MDAwQUM0NTAwMDBBMDY2MDAwQTBFMDAwMzE1OEUyNDAxMDA4NQotOjEwNDE2MDAwQTIwMDAwMjQwRTAwMDMyMDhFMjQwMTAwM0MwMzgwMDBFNgotOjEwNDE3MDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM3MjAxQzAxMAotOjEwNDE4MDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDEwMzhDMQotOjEwNDE5MDAwOEZCRjAwMUMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDBBOAotOjEwNDFBMDAwMjQwMDAxNDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ5MwotOjEwNDFCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4M0ZGQUMwNAotOjEwNDFDMDAwM0MwMjgwMDA4QzQ0MDEwMDM0NDIwMTAwOEM2NTAwM0NCQwotOjEwNDFEMDAwOTA0NjAwMUIwQTAwMEZGRTI0MDcwMDAxM0MwMjgwMDhFNQotOjEwNDFFMDAwOTA0MzAwMEU5MDQyMDAwQTAwNDMxMDI2MzA0MjAwRkYyOAotOjEwNDFGMDAwMDNFMDAwMDgwMDAyMTAyQjI3QkRGRkUwM0MwMjgwMDgwRQotOjEwNDIwMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDE4MzQ1MDAwODA0MQotOjEwNDIxMDAwOTIwMjAwMDUyNDAzMDAzMDMwNDIwMDMwMTQ0MzAwODQzMQotOjEwNDIyMDAwMDA4MDg4MjEzQzAyMDgwMDhDNDIwMDIwMTA0MDAwODE2MAotOjEwNDIzMDAwOEZCRjAwMTgwRTAwMEQ3MTAwMDAwMDAwOEY4NjAwMkM0QgotOjEwNDI0MDAwQUNEMTAwMDA5MjAyMDAwODkyMDMwMDA5MzA0MjAwRkY0NgotOjEwNDI1MDAwMDAwMjEyMDAzMDYzMDBGRjAwNDMxMDI1QUNDMjAwMDRDRQotOjEwNDI2MDAwOTIwMjAwNEQwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDVGMAotOjEwNDI3MDAwMDAwMDAwMDAzQzAzMDgwMDhDNjMwMDQ4MEEwMDEwNzYzMAotOjEwNDI4MDAwM0MxMDgwMDg5MjAyMDAwODMwNDIwMDQwMTQ0MDAwMDNCNQotOjEwNDI5MDAwMDAwMDE4MjE5MjAyMDAyNzMwNDMwMEZGM0MxMDgwMDhFNAotOjEwNDJBMDAwMzYxMTAwODA5MjIyMDA0RDAwMDMxRTAwM0MwNTA4MDBEQwotOjEwNDJCMDAwOTRBNTRCRkUzMDQyMDBGRjAwMDIxNDAwMDA2MjE4MjU1NgotOjEwNDJDMDAwQUNDMzAwMDg4RTIzMDAzMDNDMDJDMDBCMDBBMjI4MjU5RQotOjEwNDJEMDAwQUNDMzAwMEM4RTIyMDAzNDAwMDAyMDIxQUNDMjAwMTBDMAotOjEwNDJFMDAwOEUyMjAwMzhBQ0MyMDAxNDhFMjIwMDNDQUNDMjAwMThGMgotOjEwNDJGMDAwMEUwMDBEOThBQ0M1MDAxQzhFMDIwMDA0OEY4NDAwMkNBQgotOjEwNDMwMDAwM0MwNTgwMDBBQzgyMDAwMDhFMjIwMDIwQUM4MjAwMDRCQwotOjEwNDMxMDAwOEUyMjAwMUNBQzgyMDAwODhFMjIwMDU4OENBMzAwNzRGMAotOjEwNDMyMDAwMDA0MzEwMjFBQzgyMDAwQzhFMjIwMDJDQUM4MjAwMTBDNQotOjEwNDMzMDAwOEUyMjAwNDA4RTIzMDA0NDAwMDIxNDAwMDA0MzEwMjUwQQotOjEwNDM0MDAwQUM4MjAwMTQ5MjIyMDA0RDI0MDMwMDgwMzA0MjAwRkYxMgotOjEwNDM1MDAwMTQ0MzAwMDMwMDAwMDAwMDBBMDAxMEI4QUM4MDAwMThFRAotOjEwNDM2MDAwOEUyMzAwMEMyNDAyMDAwMTEwNjIwMDBFMjQwMkZGRkZDNQotOjEwNDM3MDAwOTIyMjAwMDgzMDQyMDA0MDE0NDAwMDBBMjQwMkZGRkY0RAotOjEwNDM4MDAwOEUyMzAwMEM4Q0EyMDA3NDAwNjIxODIzM0MwMjA4MDBFQgotOjEwNDM5MDAwMDA2MjEwMjQxNDQwMDAwMjAwMDAyODIxMDA2MDI4MjEzRgotOjEwNDNBMDAwMDAwNTEwNDNBQzgyMDAxODNDMDIwODAwOTQ0MjRCRkUwQQotOjEwNDNCMDAwM0MwM0MwMEMwMDAwMjAyMTAwNDMxMDI1OEY4MzAwMkNGQgotOjEwNDNDMDAwMEUwMDBEOThBQzYyMDAxQzNDMDQ4MDA4MzQ4MjAxMDA5MQotOjEwNDNEMDAwOEM0MjAwMDA4RjgzMDAyQzM0ODQwMDgwM0MwNjA4MDA0RgotOjEwNDNFMDAwOTRDNjRCRkVBQzYyMDAwMEFDNjAwMDA0OEM4NTAwNDhCMwotOjEwNDNGMDAwM0MwMjQwMEQwMEMyMzAyNUFDNjUwMDA4QUM2MDAwMENFQQotOjEwNDQwMDAwQUM2MDAwMTA5MDgyMDAwNThGQkYwMDE4OEZCMTAwMTRCRgotOjEwNDQxMDAwMDAwMjE2MDBBQzYyMDAxNDhGQjAwMDEwQUM2MDAwMThFRgotOjEwNDQyMDAwMjQwNDAwMDFBQzY2MDAxQzBBMDAwRDk4MjdCRDAwMjA4MgotOjEwNDQzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg4OAotOjEwNDQ0MDAwMjdCRDAwMjAzQzAyODAwMDk0NDMwMDdDM0MwMjgwMDg5MQotOjEwNDQ1MDAwMzQ0NjAxMDAzMDg0MDBGRjMwNjVGRkZGMjQwMjAwMDU3MAotOjEwNDQ2MDAwMjRBMzQ2NTBBMEM0MDAwQzU0ODIwMDBDMzA2NUZGRkYwQQotOjEwNDQ3MDAwOTBDMjAwMEQyQzQyMDAwNzEwNDAwMDA3MjRBMzBBMDA0MAotOjEwNDQ4MDAwOTBDMzAwMEQyNDAyMDAxNDAwNjIxMDA0MDBBMjEwMjE0OQotOjEwNDQ5MDAwMEEwMDEwRjUzMDQ1RkZGRjMwNjVGRkZGM0MwMjgwMDg0MQotOjEwNDRBMDAwMzQ0MjAwODAwM0UwMDAwOEE0NDUwMDE0M0MwMzgwMDg2NwotOjEwNDRCMDAwMzQ2ODAwODBBRDA1MDAzODM0NjcwMTAwOENFMjAwMUNEMAotOjEwNDRDMDAwMzA4NDAwRkYwMEEyMTAyMzE4NDAwMDAzMzBDNjAwRkYxNAotOjEwNDREMDAwMjRBMkZGRkNBQ0UyMDAxQzMwODIwMDAxNTA0MDAwMDgyNgotOjEwNDRFMDAwM0MwMzgwMDg4RDAyMDAzQzAwQTIxMDIzMDQ0MTAwMTIwRQotOjEwNDRGMDAwMjQwNDAwMDU4QzYyMDAwNDEwQTIwMDBGM0MwMzgwMDgxNQotOjEwNDUwMDAwOEM2MjAwMDQxNEEyMDAxODAwMDAwMDAwM0MwMjA4MDBBNQotOjEwNDUxMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDA5M0MwMjgwMDg0NAotOjEwNDUyMDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDQwMQotOjEwNDUzMDAwM0MwMjgwMDgyNDA0MDAwNDBBMDAxMERGMDAwMDAwMDA5MAotOjEwNDU0MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFFQQotOjEwNDU1MDAwQTQ2MjAwMTQxMEMwMDAwNDNDMDI4MDAwOEM0NDAxMDBERQotOjEwNDU2MDAwMEEwMDBGNDgwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDBGRgotOjEwNDU3MDAwMjdCREZGRTgwMEE2MTgyM0FGQkYwMDEwMTg2MDAwNEU0QgotOjEwNDU4MDAwMzA4ODAwRkYzQzAyODAwODM0NDcwMDgwQTBFMDAwMjQwRgotOjEwNDU5MDAwMzQ0NDAxMDBBMEUwMDAyNzhDODIwMDFDMDBBMjEwMjNGQwotOjEwNDVBMDAwMDQ0MDAwMkIwMDAwMDAwMDhDRTIwMDNDOTRFMzAwNUMxRgotOjEwNDVCMDAwOENFNDAwMkMwMDQ1MzAyMzMwNjNGRkZGMDBDMzE4MjEzQQotOjEwNDVDMDAwMDA4MzIwMkIxMDgwMDAwNDAwRTAxODIxOENFMjAwMkNENgotOjEwNDVEMDAwMEEwMDExNDgwMEEyMTAyMTk0RTIwMDVDMzA0MkZGRkY2MwotOjEwNDVFMDAwMDBDMjEwMjEwMEEyMTAyMUFDNjIwMDFDM0MwMjgwMDgxNQotOjEwNDVGMDAwMzQ0NzAwODA5NEUyMDA1QzhDRTMwMDFDMzA0MkZGRkZGMwotOjEwNDYwMDAwMDAwMjEwNDAwMEEyMTAyMTAwNDMxMDJCMTA0MDAwMDNCNAotOjEwNDYxMDAwMDAwMDAwMDAwQTAwMTE1OThDRTIwMDFDOTRFMjAwNUNDQQotOjEwNDYyMDAwMzA0MkZGRkYwMDAyMTA0MDAwQTIxMDIxQUNFMjAwMUM0QgotOjEwNDYzMDAwM0MwMjgwMDgzNDQyMDEwMDhGQkYwMDEwMDEwMDIwMjE5RAotOjEwNDY0MDAwMjQwNjAwMDFBMDQwMDAwQzBBMDAxMEY5MjdCRDAwMTg0NAotOjEwNDY1MDAwOENFMjAwMUMwMDQ2MTAyMzAwNDMxMDJCNTQ0MDAwMDE0NAotOjEwNDY2MDAwQUNFNTAwMUM5NEUyMDA1QzMwNDJGRkZGMDA2MjEwMkJCRQotOjEwNDY3MDAwMTQ0MDAwMDcyNDAyMDAwMjk0RTIwMDVDOENFMzAwMUM1QQotOjEwNDY4MDAwMzA0MkZGRkYwMDYyMTgyMUFDRTMwMDFDMjQwMjAwMDI0QwotOjEwNDY5MDAwQUNFNTAwMzgwRTAwMEYzN0EwODIwMDBDMTA0MDAwMTg2NwotOjEwNDZBMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwOEZCRjAwMTBCRgotOjEwNDZCMDAwMEEwMDBGNDgyN0JEMDAxODMxMDIwMDEwMTA0MDAwMTBGQQotOjEwNDZDMDAwOEZCRjAwMTAzQzAyODAwODM0NDUwMDgwOENBMzAwMUM4MgotOjEwNDZEMDAwOTRBMjAwNUMwMDY2MTgyMzMwNDJGRkZGMDA2MjE4MjE5QwotOjEwNDZFMDAwM0MwMjNGRkYzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDE4NQotOjEwNDZGMDAwMDA4MDE4MjEwMEMzMTAyMUFDQTIwMDFDOEZCRjAwMTA0NQotOjEwNDcwMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4MDBDMDQwMjFENgotOjEwNDcxMDAwMDBBNjMwMjNBRkJGMDAxMDE4QzAwMDI2MzA4QTAwRkY2QgotOjEwNDcyMDAwM0MwMjgwMDgzNDQ5MDA4MDhEMjQwMDFDOEQyMzAwMkMxRAotOjEwNDczMDAwMDA4ODIwMjMwMDY0MTgyQjEwNjAwMDBGMzQ0NzAxMDAwQwotOjEwNDc0MDAwOENFMjAwMjAwMDQ2MTAyMUFDRTIwMDIwOENFMjAwMjAyOAotOjEwNDc1MDAwMDA0NDEwMkIxNDQwMDAwQjNDMDIzRkZGOENFMjAwMjA3MQotOjEwNDc2MDAwMDA0NDEwMjNBQ0UyMDAyMDk1MjIwMDVDMzA0MkZGRkZBMQotOjEwNDc3MDAwMEEwMDExQUUwMDgyMjAyMUFDRTAwMDIwMDA4NjIwMjEzQQotOjEwNDc4MDAwM0MwMjNGRkYzNDQzRkZGRjAwNjQxMDJCNTQ0MDAwMDEwNAotOjEwNDc5MDAwMDA2MDIwMjEzQzAyODAwODM0NDIwMDgwMDA4NTE4MjFGRQotOjEwNDdBMDAwQUM0MzAwMUNBMDQwMDAyNEEwNDAwMDI3MEEwMDExRkREQgotOjEwNDdCMDAwOEZCRjAwMTAzMTQyMDAxMDEwNDAwMDQwOEZCRjAwMTAyQQotOjEwNDdDMDAwM0MwNjgwMDgzNEM0MDA4MDhDODIwMDNDMDA0ODEwMjNFMgotOjEwNDdEMDAwNTg0MDAwM0IwMTQwMjAyMTkwODIwMDI0MjQ0MjAwMDFFNwotOjEwNDdFMDAwQTA4MjAwMjQ5MDgyMDAyNDNDMDMwODAwOEM2MzAwMjRGMwotOjEwNDdGMDAwMzA0MjAwRkYwMDQzMTAyQjU0NDAwMDM0OEZCRjAwMTBBNAotOjEwNDgwMDAwMzRDMjAxMDA4QzQyMDAxQzAwQTIxMDIzMTg0MDAwMkY2QgotOjEwNDgxMDAwOEZCRjAwMTA4Q0MzMDAwNDk0ODIwMDVDMDA2ODE4MjNEMgotOjEwNDgyMDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFFQgotOjEwNDgzMDAwMTA0MDAwMDUwMDAwMDAwMDhDQzIwMDA0MDA0ODEwMjM1NgotOjEwNDg0MDAwMEEwMDExRTMwMDAyMTA0Mzk0ODIwMDVDMzA0MkZGRkYzMwotOjEwNDg1MDAwMDAwMjEwNDAzQzA2ODAwOEFDODIwMDJDMzRDNTAwODA2OQotOjEwNDg2MDAwOTRBMjAwNUM4Q0E0MDAyQzk0QTMwMDVDMzA0MkZGRkY1NwotOjEwNDg3MDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzIwMjFDRQotOjEwNDg4MDAwMDEwNDEwMjFBQ0EyMDAxQzhDQzIwMDA0MzRDNjAxMDAzQgotOjEwNDg5MDAwQUNDMjAwMUMyNDAyMDAwMjBFMDAwRjM3QTBDMjAwMENBNAotOjEwNDhBMDAwMTA0MDAwMEE4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDBDMQotOjEwNDhCMDAwOEZCRjAwMTAwQTAwMEY0ODI3QkQwMDE4MDE0MDIwMjFCQgotOjEwNDhDMDAwMjQwNjAwMDEwQTAwMTBGOTI3QkQwMDE4MDNFMDAwMDhDMwotOjEwNDhEMDAwMjdCRDAwMTgzQzA5ODAwODM1MkEwMDgwOEQ0MjAwM0MyNQotOjEwNDhFMDAwMzA4MzAwRkYzNTJCMDEwMDAwNDYxMDIzMzBFNzAwRkYyNgotOjEwNDhGMDAwMTg0MDAwMDYwMDYwMjAyMTI0MDIwMDAxQTE2MDAwMEM4NQotOjEwNDkwMDAwQTE2MDAwMEQwQTAwMTE5MEE1NDIwMDE0MjQwMjAwMDVDOAotOjEwNDkxMDAwMzUyOTAxMDAwMDAwMzAyMTE0RTIwMDA4QTE0MDAwMjdFMQotOjEwNDkyMDAwOTEyMjAwMEQyQzQyMDAwNjEwNDAwMDA0MDAwMDAwMDBGRgotOjEwNDkzMDAwOTEyMjAwMEQyNDQyMDAwMUExMjIwMDBEMEEwMDEwRjk2RAotOjEwNDk0MDAwMDAwMDAwMDAzQzAzODAwODNDMDI4MDAwMzQ0MjAxMDA2QgotOjEwNDk1MDAwMzQ2NDAwODAzNDYzMDEwMDkwNDUwMDBBOEM0ODAwMTRFMAotOjEwNDk2MDAwOEM4OTAwMzg5MDYyMDAwQzMwQUEwMEZGMDEyODE4MjNCRgotOjEwNDk3MDAwMzA0NzAwRkYxQzYwMDAwRTJDRTQwMDA2MjQwMjAwMDFGQQotOjEwNDk4MDAwMDBFMjEwMDQxMDgwMDAwQTMwNDMwMDAzMDE0MDIwMjE5RgotOjEwNDk5MDAwMDEwMDI4MjEwMTIwMzAyMTE0NjAwMDA3MzA0QjAwMEM1OQotOjEwNDlBMDAwMTU2MDAwMDczMDQyMDAzMDE0NDAwMDA3MDAwMDAwMDA4RQotOjEwNDlCMDAwMDNFMDAwMDgwMDAwMDAwMDBBMDAxMTkwMDAwMDAwMDA2MQotOjEwNDlDMDAwMEEwMDExMkEwMDAwMDAwMDBBMDAxMjAzMDAwMDAwMDA4MwotOjEwNDlEMDAwM0MwMzgwMDgzNDY0MDEwMDI0MDIwMDAzQTA4MjAwMEMyMAotOjEwNDlFMDAwOEM2MjAwMDQwM0UwMDAwOEFDODIwMDFDM0MwNTgwMDhENwotOjEwNDlGMDAwMzRBMzAwODA5MDYyMDAyNzM0QTUwMTAwMjQwNjAwNDMwMAotOjEwNEEwMDAwMjQ0MjAwMDFBMDYyMDAyNzkwNjMwMDI3M0MwMjA4MDBCNgotOjEwNEExMDAwOEM0MjAwNDgzMDYzMDBGRjE0NjIwMDA0M0MwNzYwMjFCMAotOjEwNEEyMDAwOTRBNTAwREEwQTAwMDhFRTMwQTVGRkZGMDNFMDAwMDhCNQotOjEwNEEzMDAwMDAwMDAwMDAyN0JERkZFOEFGQkYwMDEwM0MwMjgwMDA2RgotOjEwNEE0MDAwMEUwMDEyNDk4QzQ0MDE4MDNDMDI4MDA4MzQ0MzAxMDA2RQotOjEwNEE1MDAwQTA2MDAwMEM4QzQyMDAwNDhGQkYwMDEwMjdCRDAwMTgxRQotOjEwNEE2MDAwMDNFMDAwMDhBQzYyMDAxQzI3QkRGRkUwM0MwMjgwMDhBOAotOjEwNEE3MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzQ0NTAwODBENAotOjEwNEE4MDAwMzQ0NjAxMDAzQzA4ODAwMDhEMDkwMTQwOTBDMzAwMENCMQotOjEwNEE5MDAwOENBNDAwM0M4Q0EyMDAzODE0ODIwMDM4MzA2NzAwRkZFMAotOjEwNEFBMDAwOTUwMjAwN0M5MEEzMDAyNzE0NjAwMDA5MzA0NUZGRkZBOQotOjEwNEFCMDAwMjQwMjAwMDU1NEUyMDAwODNDMDQ4MDA4OTBDMjAwMEQ2NgotOjEwNEFDMDAwMjQ0MjAwMDFBMEMyMDAwRDBBMDAxMjg0M0MwNDgwMDhBOAotOjEwNEFEMDAwQTBDMDAwMEQzQzA0ODAwODM0ODIwMTAwOTA0MjAwMEMwQwotOjEwNEFFMDAwMjQwMzAwMDUzMDQyMDBGRjE0NDMwMDBBMjRBMjA1REMyMQotOjEwNEFGMDAwMzQ4MzAwODA5MDYyMDAyNzJDNDIwMDA3NTA0MDAwMDU1QwotOjEwNEIwMDAwMjRBMjBBMDA5MDYzMDAyNzI0MDIwMDE0MDA2MjEwMDQwQgotOjEwNEIxMDAwMDBBMjEwMjEzQzEwODAwODM2MTAwMDgwMzA0NUZGRkZCNQotOjEwNEIyMDAwMDEyMDIwMjEwRTAwMTI0OUE2MDUwMDE0OTYwMjAwNUMwNwotOjEwNEIzMDAwOEUwMzAwMzgzQzExODAwMDMwNDJGRkZGMDAwMjEwNDAxRAotOjEwNEI0MDAwMDA2MjE4MjFBRTAzMDAxQzBFMDAwMzE1OEUyNDAxNDBFNAotOjEwNEI1MDAwOTIwMjAwMjUzNDQyMDA0MEEyMDIwMDI1MEUwMDAzMjBFQwotOjEwNEI2MDAwOEUyNDAxNDA4RTI0MDE0MDhGQkYwMDE4OEZCMTAwMTRBNQotOjEwNEI3MDAwOEZCMDAwMTAwQTAwMEY0ODI3QkQwMDIwOEZCRjAwMTgxQgotOjEwNEI4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA5MwotOjEwNEI5MDAwODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwODAwODAyNDAzMgotOjEwNEJBMDAwMDgwMDBFRjAwODAwMEY0ODA4MDAwRjhDMDgwMDEwMjBDNQotOjEwNEJCMDAwMDgwMDEwNjQ4MDA4MDEwMDgwMDgwMDgwODAwODAwMDA2MAotOjEwNEJDMDAwMEEwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBRQotOjEwNEJEMDAwNjM3MDM0MkUzNjJFMzEzNzAwMDAwMDAwMDQwNjExMDRCNQotOjEwNEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwNEJGMDAwMDAwMDAwMDAzODAwM0MwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMDA4NAotOjEwNEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwNEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwNEMzMDAwMDAwMDAwMDAyMTAwMzgwMDAwMDAwMDAxMDAwMDAwMkJFRgotOjEwNEM0MDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQ0NAotOjEwNEM1MDAwMDAwMDAwMEQzQzAyMDgwMDI0NDI1NUM0M0MwMzA4MDAzQgotOjEwNEM2MDAwMjQ2MzU3RjRBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQ2OAotOjEwNEM3MDAwMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjEyNgotOjEwNEM4MDAwM0MxMDA4MDAyNjEwMDA4MDNDMUMwODAwMjc5QzU1QzRERQotOjEwNEM5MDAwMEUwMDAyNkEwMDAwMDAwMDAwMDAwMDBEMDBBMDE4MjFCNAotOjEwNENBMDAwMDA4MDEwMjEwMDgwMjgyMTNDMDQ2MDAwM0MwNzYwMDA0NwotOjEwNENCMDAwMjQwNjAwMDgxMDYwMDAwNjM0ODQyMDc4OEM0MjAwMDAyRQotOjEwNENDMDAwQUNFMjIwMDg4QzYzMDAwMDAzRTAwMDA4QUNFMzIwMEM5OQotOjEwNENEMDAwMEEwMDBFMUMwMDAwMDAwMDI0MDMwMDQwM0MwMjYwMDA5QgotOjEwNENFMDAwMDNFMDAwMDhBQzQzMjAwMDNDMDc2MDAwOEY4NjAwMDAxMgotOjEwNENGMDAwOENFNTIwNzQwMDg2MTAyMTAwQTIxODJCMTQ2MDAwMDc5OAotOjEwNEQwMDAwMDAwMDI4MjE4RjhBRkRFQzI0MDUwMDAxQTE0NDAwMTMzNgotOjEwNEQxMDAwOEY4OTAwMDAwMTI0NDAyMUFGODgwMDAwMDNFMDAwMDhEMwotOjEwNEQyMDAwMDBBMDEwMjE4Rjg0RkRFQzhGODUwMDAwOTA4NjAwMTM3OQotOjEwNEQzMDAwMzBDMzAwRkYwMEEzMTAyM0FGODIwMDAwMDNFMDAwMDg4RgotOjEwNEQ0MDAwQTA4MDAwMTM4Rjg0RkRFQzI3QkRGRkU4QUZCMDAwMTBGQQotOjEwNEQ1MDAwQUZCRjAwMTQ5MDg5MDAxMTkwODcwMDExMjQwMjAwMjgzMQotOjEwNEQ2MDAwMzEyODAwRkYzOTA2MDAyODMwRTMwMEZGMjQ4NTAwMkM5RAotOjEwNEQ3MDAwMkNEMDAwMDExMDYyMDAxNjI0ODQwMDFDMEUwMDAwMzdBNQotOjEwNEQ4MDAwMDAwMDAwMDA4RjhGRkRFQzNDMDU2MDAwMjQwMjAyMDQ0RgotOjEwNEQ5MDAwOTVFRTAwM0U5NUVEMDAzQzAwMEU1QzAwMzFBQ0ZGRkY0RgotOjEwNERBMDAwMDE2QzUwMjVBQ0FBMjAxMDUyMDAwMDAxMjQwMjAwMDQxRQotOjEwNERCMDAwQUNBMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwNERDMDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg0QgotOjEwNEREMDAwMEEwMDAwNkYwMDAwMjgyMThGODVGREVDMjdCREZGRDg1OQotOjEwNERFMDAwQUZCRjAwMjBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRDQQotOjEwNERGMDAwQUZCMDAwMTAwMDgwOTgyMTkwQTQwMDExMjRCMDAwMUNENgotOjEwNEUwMDAwMjRCMTAwMkMzMDgzMDBGRjM4NjIwMDI4MEUwMDAwNTlDNgotOjEwNEUxMDAwMkM1MjAwMDEwRTAwMDA2MTAwMDAwMDAwMDIwMDIwMjE2MQotOjEwNEUyMDAwMTI0MDAwMDIwMjIwMjgyMTAwMDAyODIxMEUwMDAwMzczNQotOjEwNEUzMDAwMDAwMDAwMDA4RjhERkRFQzNDMDg4MDAwM0MwNTYwMDAwOAotOjEwNEU0MDAwOTVBQzAwM0U5NUFCMDAzQzAyNjgzMDI1MDAwQzRDMDA1MAotOjEwNEU1MDAwMzE2QUZGRkYwMTJBMzgyNUFDQTcyMDEwMjQwMjAyMDI4NAotOjEwNEU2MDAwQUNBNjIwMTQ1MjQwMDAwMTI0MDIwMDAyOEZCRjAwMjA5MwotOjEwNEU3MDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBEOAotOjEwNEU4MDAwMjdCRDAwMjgwM0UwMDAwOEFDQTIyMDAwMjdCREZGRTBGQQotOjEwNEU5MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMyQwotOjEwNEVBMDAwM0MxMTYwMDA4RTIzMjA3NDhGODIwMDAwMzBEMEZGRkYwMQotOjEwNEVCMDAwMzBGMkZGRkYxMDYyMDAwQzI0MDYwMDhGMEUwMDAwMzc1NgotOjEwNEVDMDAwMDAwMDAwMDAzQzA2ODAxRjAwMTA0NDAwMzRDNUZGMDBCNQotOjEwNEVEMDAwMDExMjM4MjUyNDA0MDAwMkFFMjcyMDEwMDAwMDMwMjFFMgotOjEwNEVFMDAwQUUyNTIwMTRBRTI0MjAwMDhGQkYwMDFDOEZCMjAwMTgwNgotOjEwNEVGMDAwOEZCMTAwMTQ4RkIwMDAxMDAwQzAxMDIxMDNFMDAwMDgzMwotOjEwNEYwMDAwMjdCRDAwMjAyN0JERkZFMEFGQjAwMDEwMzBEMEZGRkY2RAotOjEwNEYxMDAwQUZCRjAwMThBRkIxMDAxNDBFMDAwMDM3MzBGMUZGRkYzMwotOjEwNEYyMDAwMDAxMDI0MDAwMDkxODAyNTNDMDM2MDAwQUM3MDIwMTAyQwotOjEwNEYzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDQzRQotOjEwNEY0MDAwQUM2MjIwMDAyN0JEMDAyMDAzRTAwMDA4MDAwMDEwMjExMwotOjEwNEY1MDAwMjdCREZGRTgzQzBDNjAxOEFGQkYwMDEwOEQ5ODUwMDBEMwotOjEwNEY2MDAwMjQxOUZGN0YzQzA4ODAwMDAzMTk3ODI0MzVFRTM4MENBMwotOjEwNEY3MDAwMzQwRDgwNzEyNDBBMDAzMTI0MDkwQzAwQUQ4RTUwMDBEQwotOjEwNEY4MDAwM0MwQjgwMEFBRDhENTNCQ0FEMEEwMDA4QUQwOTAwMjQ2RQotOjEwNEY5MDAwMEUwMDA0OERBRjhCMDAyQzBFMDAwNDRCMDAwMDAwMDBBRgotOjEwNEZBMDAwMEUwMDAwNDYwMDAwMDAwMDNDMDc2MDAwOENFNTA4MDg4OQotOjEwNEZCMDAwMjQwNkZGRjAzQzAzNTcwOTAwQTYyMDI0MzQ2MkYwMDBDOQotOjEwNEZDMDAwMTA4MjAwNDgyNDFGMDAwMUFGODAwMDM4MEUwMDBCQUU5NQotOjEwNEZEMDAwMDAwMDAwMDAzQzA2NjAxNjhDQzcwMDAwM0MwODYwMTQwRQotOjEwNEZFMDAwOEQwNTAwQTAzQzAzRkZGRjAwRTMyMDI0M0MwMjUzNTM0NwotOjEwNEZGMDAwMDAwNTFGQzIxMDgyMDAzNTM0QzU3QzAwOTRBMjAxRjI2NgotOjEwNTAwMDAwQTc4MDAwNTAxMDQwMDAwM0E3ODAwMDYwMzg0QzFFMUU4RgotOjEwNTAxMDAwQTc4QzAwNTA5NEEyMDFGODEwNDAwMDA0OEY4RTAwMzgzNQotOjEwNTAyMDAwMzg0RDFFMUVBNzhEMDA2MDhGOEUwMDM4MTFDMDAwMDQwMQotOjEwNTAzMDAwOTc4NDAwNjAyNDBGMDAyMEE3OEYwMDUwOTc4NDAwNjBBMQotOjEwNTA0MDAwMkM5ODAwODE1MzAwMDAwMTI0MDQwMDgwOTc4NTAwNTBCMwotOjEwNTA1MDAwMkNCOTA0MDE1MzIwMDAwMTI0MDUwNDAwM0MwMzYwMDAyNgotOjEwNTA2MDAwOEM2NzA0MzgyNDFGMTAzQzMwRTJGRkZGMTA1RjAwMDMwMAotOjEwNTA3MDAwMzA4OEZGRkY1MTAwMDAwQjI0MDYwMDUwQTM4MDAwNjIxRgotOjEwNTA4MDAwOTM4OTAwNjIxMTIwMDAwQjhGQkYwMDEwMjdCRDAwMTgwQwotOjEwNTA5MDAwQTc4MDAwNjBBNzgwMDA1MEE3ODAwMDU4MDNFMDAwMDhBOAotOjEwNTBBMDAwQTc4MDAwNzZBMzg2MDA2MjkzODkwMDYyMTUyMEZGRjcyRgotOjEwNTBCMDAwOEZCRjAwMTAyN0JEMDAxOEE3ODQwMDYwQTc4NTAwNTA4RgotOjEwNTBDMDAwQTc4MDAwNTgwM0UwMDAwOEE3ODAwMDc2MDAwMzU4ODBGRQotOjEwNTBEMDAwMDE2NjUwMjE4RDQ5MDAwNDNDMDY2MDAwMEEwMDAxMEY2MgotOjEwNTBFMDAwMDEyNjI4MjEwQTAwMDEwM0FGOUYwMDM4MzA4M0ZGRkYwQgotOjEwNTBGMDAwOEY4ODAwMkM4Rjg3MDAyODAwMDMyMTQwM0MwNTgwMDAwQQotOjEwNTEwMDAwM0MwMjAwNTAwMDgyNDgyNTNDMDY2MDAwM0MwQTAxMDAzOQotOjEwNTExMDAwMzRBQzA0MDA4Q0NEMDhFMDAxQUE1ODI0MTE2MDAwMDVDRAotOjEwNTEyMDAwMDAwMDAwMDA4Q0NGMDhFMDI0RTcwMDAxMDFFQTcwMjVCMAotOjEwNTEzMDAwQUNDRTA4RTA4RDE5MDAxMDAxODA1ODIxQUNCOTAwMzhDMAotOjEwNTE0MDAwOEQxODAwMTRBQ0I4MDAzQ0FDQTkwMDMwMDAwMDAwMDA4MQotOjEwNTE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwNTE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMzgwMDA4MAotOjEwNTE3MDAwOEM2NDAwMDAzMDgyMDAyMDEwNDBGRkZEM0MwRjYwMDA3NgotOjEwNTE4MDAwOERFRDA4RTAzQzBFMDEwMDAxQUUxODI0MTQ2MEZGRTEzMwotOjEwNTE5MDAwMDAwMDAwMDBBRjg3MDAyODAzRTAwMDA4QUY4QjAwM0M1MAotOjEwNTFBMDAwOEY4NTAwMkMyNDBCRkZGMDNDMDY4MDAwOTRBNzAwMUE4QQotOjEwNTFCMDAwOENBOTAwMjQzMEVDRkZGRjAwMEMzOEMwMDBFQjUwMjQxOQotOjEwNTFDMDAwMDEyQTQwMjFBQ0M4MDAzQzhDQTQwMDI0OENDMzAwM0NDNAotOjEwNTFEMDAwMDA4MzEwMjMxODQwMDAzMzAwMDAwMDAwOENBRDAwMjAzNQotOjEwNTFFMDAwMjVBMjAwMDEzQzBGMDA1MEFDQzIwMDM4MzVFRTAwMTA4MwotOjEwNTFGMDAwM0MwNjgwMDBBQ0NFMDAzMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwNTIxMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDQ4MDAwOEM5OTAwMDBBOQotOjEwNTIyMDAwMzMzODAwMjAxMzAwRkZGRDMwRTIwMDA4MTA0MDAwMTc2MwotOjEwNTIzMDAwM0MwOTgwMDA4Qzg4MDQwOEFDQTgwMDEwOEM4MzA0MEMwNgotOjEwNTI0MDAwQUNBMzAwMTQzQzE5MDAyMDNDMTg4MDAwQUYxOTAwMzBCQQotOjEwNTI1MDAwOTRBRTAwMTg5NEFGMDAxQzAxQ0YzMDIxQTRBNjAwMTgxMgotOjEwNTI2MDAwOTRBRDAwMUEyNUE3MDAwMUE0QTcwMDFBOTRBQjAwMUE1OAotOjEwNTI3MDAwOTRBQzAwMUUxMThCMDAwMzAwMDAwMDAwMDNFMDAwMDg0NgotOjEwNTI4MDAwMDAwMDAwMDAwM0UwMDAwOEE0QTAwMDFBOEQyQTA0MDAxQQotOjEwNTI5MDAwQUNBQTAwMTA4RDI0MDQwNEFDQTQwMDE0MEEwMDAxQTJERQotOjEwNTJBMDAwM0MxOTAwMjA4Q0EyMDAyMDBBMDAwMThBM0MwRjAwNTAwQgotOjEwNTJCMDAwMEEwMDAxNzgwMDAwMDAwMDNDMDMwODAwOEM2MzAwMjAxNQotOjEwNTJDMDAwOEY4MjAwMzQyN0JERkZFODEwNjIwMDA4QUZCRjAwMTBENgotOjEwNTJEMDAwMEUwMDAxQkNBRjgzMDAzNDNDMDMwODAwOEM2MzAwMjA0NwotOjEwNTJFMDAwMjQwNDAwMDExMDY0MDAwNDhGOEMwMDJDOEZCRjAwMTA3OAotOjEwNTJGMDAwMDNFMDAwMDgyN0JEMDAxODhGQkYwMDEwM0MwNTgwMDBBOAotOjEwNTMwMDAwQTU4MDAwMEE5NThCMDAwQTk1OEEwMDA0MjdCRDAwMTgyNQotOjEwNTMxMDAwMzE2N0ZGRkYzMTQ5MDAwRjAwMDk0NTAwMDBFODMwMjVFMwotOjEwNTMyMDAwMDNFMDAwMDhBQ0E2MDA4MDNDMDIwODAwOEM0MjAwMjA4QwotOjEwNTMzMDAwMjdCREZGQzhBRkJGMDAzNEFGQkUwMDMwQUZCNzAwMkNGMQotOjEwNTM0MDAwQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUM0NwotOjEwNTM1MDAwQUZCMjAwMThBRkIxMDAxNDEwNDAwMDUzQUZCMDAwMTA0RQotOjEwNTM2MDAwOEY4NDAwMkM5NDg2MDAwNjk0ODMwMDBBMDBDMzI4MjNBRgotOjEwNTM3MDAwMzBCNkZGRkYxMkMwMDA0RDhGQkYwMDM0OTQ4OTAwMTg3MwotOjEwNTM4MDAwOTQ4QTAwMEEwMTJBNDAyMzMxMDJGRkZGMDJDMjM4MkIwRgotOjEwNTM5MDAwMTRFMDAwMDIwMkMwMjAyMTAwNDAyMDIxMkM4QzAwMDVENgotOjEwNTNBMDAwMTU4MDAwMDIwMDgwQTAyMTI0MTQwMDA0MEUwMDAxNEI4RgotOjEwNTNCMDAwMDI4MDIwMjE4Rjg3MDAyQzAyODA5ODIxQUY4MDAwMzA0RQotOjEwNTNDMDAwOTRFRDAwMEEwMjgwODgyMTEyODAwMDUxMzFCMkZGRkY2MwotOjEwNTNEMDAwM0MxNzcwMDAzQzE1NDAwMDNDMUU2MDAwOEY4RjAwM0M2NQotOjEwNTNFMDAwOERFRTAwMDAwMUQ3MTgyNDUwNzUwMDUzMDIyMDIwMjFCMwotOjEwNTNGMDAwMDJBMzgwMkIxNjAwMDAzODNDMTgyMDAwMTA3ODAwNEFDOQotOjEwNTQwMDAwMDAwMDAwMDAyNDEwMDAwMThGODMwMDMwMTQ2MDAwM0M3NQotOjEwNTQxMDAwMDI5MTU4MjMwMjMwRjgyMzAyNTBDODIxMzNGMUZGRkZENAotOjEwNTQyMDAwMTYyMEZGRUUzMzMyRkZGRjhGODcwMDJDM0MxMjAwMjA0NgotOjEwNTQzMDAwM0MxMTgwMDBBRTMyMDAzMDk0RUEwMDBBM0MxNzgwMDAzNAotOjEwNTQ0MDAwMDI2QTQ4MjFBNEU5MDAwQTk0RTMwMDBBOTRFODAwMDRFRgotOjEwNTQ1MDAwMzA2NUZGRkYzMTA2MDAwRjAwMDYxNTAwMDBBMkYwMjVBMQotOjEwNTQ2MDAwQUVGRTAwODA5NEY0MDAwQTk0RjUwMDE4MTJCNDAwM0FERAotOjEwNTQ3MDAwMDAxM0M5NDA4Q0Y4MDAxNDhDRUUwMDEwMDMxOTU4MjE1OQotOjEwNTQ4MDAwMDAwMDc4MjEwMTc5NjgyQjAxQ0Y2MDIxMDE4RDIwMjE1NgotOjEwNTQ5MDAwQUNFQjAwMTRBQ0U0MDAxMDAyRDMzODIzMzBGNkZGRkY2RAotOjEwNTRBMDAwMTZDMEZGQjY4Rjg0MDAyQzhGQkYwMDM0OEZCRTAwMzAzMwotOjEwNTRCMDAwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjA0MgotOjEwNTRDMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA4MgotOjEwNTREMDAwMDNFMDAwMDgyN0JEMDAzODEwN0UwMDFCMDAwMDAwMDAxQwotOjEwNTRFMDAwMTQ3N0ZGQzkyNDEwMDAwMTBFMDAxNEUwMDAwMDAwMDAzMgotOjEwNTRGMDAwOEY4MzAwMzAxMDYwRkZDODAyMzBGODIzMDI5MTU4MjNEOAotOjEwNTUwMDAwOEY4NzAwMkMwMTcwMjAyMTBBMDAwMjU1MzA5M0ZGRkY4NQotOjEwNTUxMDAwOEY4MzAwMzAxNDYwRkZDODNDMTIwMDIwM0MxMTgwMDBEMwotOjEwNTUyMDAwMEEwMDAyMUVBRTMyMDAzMDBFMDAwM0NFMDIyMDIwMjFGRgotOjEwNTUzMDAwMEEwMDAyMTIwMDQwODAyMTBFMDAwN0M2MDI0MDI4MjEwNgotOjEwNTU0MDAwMEEwMDAyMTIwMDQwODAyMTBFMDAwRDdEMDIyMDIwMjE2MQotOjEwNTU1MDAwMEEwMDAyMTIwMDQwODAyMTBFMDAwMTc4MDAwMDAwMDBDNQotOjEwNTU2MDAwMEEwMDAyMzcwMkQzMzgyMzI3QkRGRkQwQUZCNTAwMjQ4RAotOjEwNTU3MDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQzRAotOjEwNTU4MDAwQUZCMDAwMTBBRkJGMDAyODBFMDAwMEU0M0MxNDgwMDA1NAotOjEwNTU5MDAwM0MwMjgwMDgzQzAzMjAwMDNDMDEwODAwQUMyMDAwNzA2NQotOjEwNTVBMDAwMzQ1NTAwODAzNDcyMDAwMzI0MTMwMDAxMzY5MDAwNzBEQgotOjEwNTVCMDAwMjQxMUZGODAwQTAwMDI4NThFMDYwMDAwM0MxOTgwMDAzRAotOjEwNTVDMDAwOEYzODAwMDAzQjBGMDAwMTMxRTIwMDAxMTA0MDAwMjU0MAotOjEwNTVEMDAwOEY4NjAwODQ4RTA3MDAwMDNDMEQwODAwOERBRDAwM0NENgotOjEwNTVFMDAwM0MwQTA4MDA4RDRBMDAzODAwRTY3MDIzMDFBRTQwMjFENQotOjEwNTVGMDAwMDAwMDU4MjEwMTBFMzAyQjAxNEI0ODIxMDEyNjIwMjFBQgotOjEwNTYwMDAwM0MwMTA4MDBBQzI4MDAzQ0FGODcwMDg0M0MwMTA4MDA0NgotOjEwNTYxMDAwQUMyNDAwMzgwRTAwMDFCRTAwMDAwMDAwM0MwNTA4MDA2QwotOjEwNTYyMDAwOENBNTAwNzAxMEEwRkZFNTAwQTAyMDIxM0MwNTA4MDAxQgotOjEwNTYzMDAwOENBNTAwNjgzQzA2MDgwMDhDQzYwMDZDMEUwMDE0ODMyNAotOjEwNTY0MDAwMDAwMDAwMDAzQzAxMDgwMEFDMjAwMDcwM0MxOTgwMDAwNAotOjEwNTY1MDAwOEYzODAwMDAzQjBGMDAwMTMxRTIwMDAxMTQ0MEZGRERGNAotOjEwNTY2MDAwOEY4NjAwODQ4RTBDMDAwMDhGOEQwMDg0M0MwNzA4MDAxQwotOjEwNTY3MDAwOENFNzAwM0MzQzA2MDgwMDhDQzYwMDM4MDE4RDU4MjM5RQotOjEwNTY4MDAwMDBFQjI4MjEwMEFCMjAyQjAwQzI0ODIxMDEyNDEwMjE2RgotOjEwNTY5MDAwM0MwMTA4MDBBQzI1MDAzQzNDMDg4MDAwM0MwMTA4MDBBRgotOjEwNTZBMDAwQUMyMjAwMzg4RDAzMDEwMDI0MUYwQzAwMTA3RjAwMjY1RgotOjEwNTZCMDAwMDAwMDAwMDA4RDE4MDEwMDI0MEUwMDIwQUQxODAwMjAwRAotOjEwNTZDMDAwOTJBRjAwMDAzMUUzMDBGRjEwNkUwMDIzMjQxOTAwNTA1OAotOjEwNTZEMDAwMTA3OTAwMjYwMDAwMDAwMDNDMDQ4MDAwOEM4ODAxMDA0NgotOjEwNTZFMDAwMTUwMDAwMDMwMDAwMDAwMDU2NjAwMDE0M0MwNDQwMDA1OAotOjEwNTZGMDAwOEM5OTAxMDA4QzhGMDEwMDAwMDA5ODIxMDMzMUMwMjQ5NwotOjEwNTcwMDAwMDAxODY5NDAzMUVFMDA3RjAxQUU2MDI1MDE5MjU4MjVGNgotOjEwNTcxMDAwQUM4QjA4MzA4Qzg3MDEwMDhDODkwMTAwMjRFQTAxMDBFMQotOjEwNTcyMDAwMDE1MTMwMjQwMDA2Mjk0MDMxMjMwMDdGMDBBMzEwMjVCOQotOjEwNTczMDAwMDA1MkY4MjVBQzlGMDgzMDNDMDQ0MDAwQUU4NDAxMzg4QwotOjEwNTc0MDAwMEEwMDAyN0QwMDAwMDAwMDBFMDAwMURBMDAwMDAwMDBFNwotOjEwNTc1MDAwMEEwMDAyQzczQzA0ODAwMDhEMDQwMTAwMEUwMDA3N0Y5MAotOjEwNTc2MDAwMDAwMDAwMDAwQTAwMDJDNzNDMDQ4MDAwOEQwNDAxMDAxNAotOjEwNTc3MDAwMEUwMDEzOUIwMDAwMDAwMDBBMDAwMkM3M0MwNDgwMDBEQQotOjEwNTc4MDAwMDBBNDEwMkIyNDAzMDAwMTEwNDAwMDA5MDAwMDMwMjE2OAotOjEwNTc5MDAwMDAwNTI4NDAwMEE0MTAyQjA0QTAwMDAzMDAwMzE4NDBCQgotOjEwNTdBMDAwNTQ0MEZGRkMwMDA1Mjg0MDUwNjAwMDBBMDAwNDE4MkJGQwotOjEwNTdCMDAwMDA4NTM4MkI1NEUwMDAwNDAwMDMxODQyMDBDMzMwMjU1NAotOjEwNTdDMDAwMDA4NTIwMjMwMDAzMTg0MjE0NjBGRkY5MDAwNTI4NDJEOQotOjEwNTdEMDAwMDAwNDE4MkIwM0UwMDAwODAwQzMxMDIxMzA4NEZGRkZGMQotOjEwNTdFMDAwMzBDNjAwRkYzQzA3ODAwMDhDRTIwMUI4MDQ0MEZGRkU5OQotOjEwNTdGMDAwMDAwNjRDMDAwMTI0MzAyNTNDMDgyMDAwMDBDODIwMjU2QwotOjEwNTgwMDAwM0MwMzEwMDBBQ0UwMDE4MEFDRTUwMTg0QUNFNDAxODgwRAotOjEwNTgxMDAwMDNFMDAwMDhBQ0UzMDFCODNDMDY2MDAwOENDNTIwMUMyNgotOjEwNTgyMDAwMjQwMkZGRjAzMDgzMDIwMDMwODYwMTAwMTA2MDAwMEU3OQotOjEwNTgzMDAwMDBBMjI4MjQzNEE1MDAwMTMwODczMDAwMTBFMDAwMDVDNAotOjEwNTg0MDAwMzA4MzBDMDAzNEE1MDAwNDNDMDQ2MDAwMDNFMDAwMDgzMQotOjEwNTg1MDAwQUM4NTIwMUMxMDYwRkZGRDNDMDQ2MDAwMzRBNTAwMDhFRQotOjEwNTg2MDAwMDNFMDAwMDhBQzg1MjAxQzU0QzBGRkYzMzRBNTAwMDJGRgotOjEwNTg3MDAwMEEwMDAzMUYzMDg3MzAwMDI3QkRGRkU4QUZCMDAwMTBEQgotOjEwNTg4MDAwQUZCRjAwMTQzQzA3NjAwMDI0MDYwMDAyMTA4MDAwMTEyNgotOjEwNTg5MDAwMDBBMDgwMjE4RjgzMDAzQzBFMDAwMzE2OEM2NDAwMTg0QQotOjEwNThBMDAwOEY4MjAwM0MwMDAwMjAyMTI0MDYwMDAxOEM0NTAwMEM2MgotOjEwNThCMDAwMEUwMDAzMDcwMDAwMDAwMDE2MDAwMDAyMjQwMjAwMDM4RgotOjEwNThDMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgwQgotOjEwNThEMDAwMjdCRDAwMTg4Q0U4MjAxQzI0MDlGRkYwMDEwOTI4MjRBQQotOjEwNThFMDAwQUNFNTIwMUM4Rjg3MDAzQzBBMDAwMzNDOENFNTAwMENEMwotOjEwNThGMDAwM0MwMjYwMEUwMDgwNDAyMTM0NDYwMTAwMjQwOTAwMTg1QgotOjEwNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwQTAwNTAwMQotOjEwNTkxMDAwM0MwMzgwMDAzNTQ3MDIwMEFDNjgwMDM4MzQ2NDA0MDA2MgotOjEwNTkyMDAwQUM2NTAwM0NBQzY3MDAzMDhDNkMwMDAwMzE4QjAwMjAxMwotOjEwNTkzMDAwMTE2MEZGRkQyNDA3RkZGRjI0MDMwMDdGOEM4RDAwMDAxMgotOjEwNTk0MDAwMjQ2M0ZGRkYyNDg0MDAwNEFDQ0QwMDAwMTQ2N0ZGRkIzOAotOjEwNTk1MDAwMjRDNjAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwNTk2MDAwMjRBNDAyMDAwMDg1MjgyQjNDMDMwMDIwM0MwRTgwMDA2QwotOjEwNTk3MDAwMjUyOUZGRkYwMTA1NDAyMUFEQzMwMDMwMTUyMEZGRTBDMAotOjEwNTk4MDAwMDA4MDI4MjEwM0UwMDAwODAwMDAwMDAwOEY4MjAwM0MxNgotOjEwNTk5MDAwMjdCREZGRDhBRkIzMDAxQ0FGQkYwMDIwQUZCMjAwMThDNwotOjEwNTlBMDAwQUZCMTAwMTRBRkIwMDAxMDk0NDYwMDAyMDA4MDk4MjFGRgotOjEwNTlCMDAwOEM1MjAwMTgyQ0MzMDA4MThDNDgwMDA0OEM0NzAwMDhDRQotOjEwNTlDMDAwOEM1MTAwMEM4QzQ5MDAxMDEwNjAwMDA3OEM0QTAwMTRBOAotOjEwNTlEMDAwMkNDNDAwMDQxNDgwMDAxMzMwRUIwMDA3MzBDNTAwMDMxMgotOjEwNTlFMDAwMTBBMDAwMTAwMDAwMDAwMDI0MTAwMDhCMDIwMDIwMjFGNQotOjEwNTlGMDAwMDIyMDI4MjEwRTAwMDMwNzI0MDYwMDAzMTY2MDAwMDI3RgotOjEwNUEwMDAwMjQwMjAwMDMwMDAwMTAyMThGQkYwMDIwOEZCMzAwMUM3MAotOjEwNUExMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg5RgotOjEwNUEyMDAwMjdCRDAwMjgxNTYwRkZGMTI0MTAwMDhCM0MwQzgwMDA3RQotOjEwNUEzMDAwM0MwMzAwMjAyNDFGMDAwMUFEODMwMDMwQUY5RjAwMzBFNQotOjEwNUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQxOUZGRjAyQQotOjEwNUE1MDAwMjREODAwMEYwMzE5NzgyNDNDMTAwMEQwQUQ4ODAwMzhGQQotOjEwNUE2MDAwMDFGMDcwMjUyNENEMDAwMzNDMDg2MDBFQUQ4NzAwM0M5QQotOjEwNUE3MDAwMzU4NTA0MDBBRDhFMDAzMDAwMEQzODgyMzUwNDAwM0NDMQotOjEwNUE4MDAwM0MwMzgwMDA4QzZCMDAwMDMxNjIwMDIwMTA0MEZGRkQ2MQotOjEwNUE5MDAwMDAwMDAwMDAxMEUwMDAwODI0RTNGRkZGMjQwN0ZGRkZFMAotOjEwNUFBMDAwOENBODAwMDAyNDYzRkZGRjI0QTUwMDA0QUM4ODAwMDAzQwotOjEwNUFCMDAwMTQ2N0ZGRkIyNDg0MDAwNDNDMDQ2MDBFQUM4NjAwMzhBRAotOjEwNUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNzAwMjA3MwotOjEwNUFEMDAwM0MwNjgwMDAwMTIwMjAyMTAxNDAyODIxQUNDNzAwMzA3NQotOjEwNUFFMDAwMEUwMDAzNEMwMDAwODAyMTBFMDAwMzE2MDI0MDIwMjEwRQotOjEwNUFGMDAwMEEwMDAzOEMwMjAwMjAyMTI3QkRGRkQ4QUZCMjAwMTg5NgotOjEwNUIwMDAwMzA5MkZGRkZBRkIxMDAxNEFGQkYwMDIwQUZCMzAwMUM1NQotOjEwNUIxMDAwQUZCMDAwMTAxMjQwMDAyRDAwMDA4ODIxMEEwMDAzRTJGRgotOjEwNUIyMDAwMjQxMzAwMDM1MEIzMDA0MjhDRTUwMDBDMDAwMDAwMEQ2QwotOjEwNUIzMDAwMjYzOTAwMDEzMzMxRkZGRjI0RjgwMDIwMDIzMjM4MkJEMAotOjEwNUI0MDAwMTBFMDAwMjJBRjk4MDAzQzhGODIwMDMwMTQ0MDAwMUYwQwotOjEwNUI1MDAwOEY4NzAwM0MzQzA2NzAwMDNDMDMyMDAwOENFNDAwMDA3MgotOjEwNUI2MDAwMDA4NjI4MjQxNEEzMDAxOThGODUwMDQ0MDAwNDQ0MDJGMQotOjEwNUI3MDAwM0MwOTgwMDAwMDg5ODAyNDE0QTBGRkVBMzEwNjAwRkY2MAotOjEwNUI4MDAwMjQwQTAwMDIxMENBMDAzMDI4Q0IwMDAzMTE2MDAwMTc1RAotOjEwNUI5MDAwMDAwMDAwMDAyNDA0MDAwMTE0QzRGRkU2MjYzOTAwMDFCRgotOjEwNUJBMDAwMDIwMDI4MjEwRTAwMDMyRTI0MDQwMDAxOEY4NzAwM0NGMAotOjEwNUJCMDAwQUY4MjAwNDQyNjM5MDAwMTMzMzFGRkZGMjRGODAwMjA3MgotOjEwNUJDMDAwMDIzMjM4MkIxNEUwRkZFMEFGOTgwMDNDMDIyMDEwMjE5NQotOjEwNUJEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0QwotOjEwNUJFMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MTBEMzAwMUI3MQotOjEwNUJGMDAwMjQwQzAwMDQxNENDRkZDRjI2MzkwMDAxMzA4REZGRkZBOAotOjEwNUMwMDAwMDAwRDE5QzAzQzA0ODAwMDhDOEUwMUI4MDVDMEZGRkU1OQotOjEwNUMxMDAwM0MwRjEwMDAzQzEwMjAwNEFDODMwMTgwQUM4MDAxODQ1OAotOjEwNUMyMDAwQUM5MDAxODhBQzhGMDFCODBBMDAwM0REMjYzOTAwMDE3MQotOjEwNUMzMDAwMEUwMDAzMDcyNDA0MDA4NDE2MDBGRkJEOEY4NzAwM0M3QwotOjEwNUM0MDAwMEEwMDAzRENBRjgwMDA0NDAyMDAyODIxMEUwMDAzMkU2RQotOjEwNUM1MDAwMDAwMDIwMjEwQTAwMDNGQzhGODcwMDNDMEUwMDAzNzMyNAotOjEwNUM2MDAwMDIwMDIwMjE4Rjg3MDAzQzBBMDAwM0ZEQUY4MjAwNDQyMAotOjEwNUM3MDAwMDAwNDQ5QzIzMTI3MDAzRjAwMDQ0MzQyM0MwMjgwMDAzNwotOjEwNUM4MDAwMDAwODIwNDAyNDAzMTY4MDJDRTYwMDIwQUM0MzAwMkNBMgotOjEwNUM5MDAwMjRFQUZGRTAyNDgyMDAwMTE0QzAwMDAzMzBBOTAwRkZDMQotOjEwNUNBMDAwMDA4MDEwMjEzMTQ3MDBGRjAwMDI2MDgwM0MwRDgwMDAyMQotOjEwNUNCMDAwMjQwQTAwMDEwMThEMjAyMTNDMEIwMDBFMDBFQTI4MDQ3QgotOjEwNUNDMDAwMDA4QjMwMjExMTIwMDAwNTAwMDUzODI3OENDRTAwMDAwNAotOjEwNUNEMDAwMDFDNTM4MjUwM0UwMDAwOEFDQzcwMDAwOENEODAwMDBERgotOjEwNUNFMDAwMDMwNzc4MjQwM0UwMDAwOEFDQ0YwMDAwMjdCREZGRTBFNQotOjEwNUNGMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDE4M0MwNzYwMDA5OAotOjEwNUQwMDAwOENFNDA4MDgzNDAyRjAwMDNDMTE2MDAwMzA4M0YwMDA5RAotOjEwNUQxMDAwMjQwNTAxQzAzQzA0ODAwRTAwMDAzMDIxMTA2MjAwMDYwMgotOjEwNUQyMDAwMjQxMDAwMDE4Q0VBMDgwODMxNDlGMDAwMzkyOEUwMDAwRAotOjEwNUQzMDAwMDAwODM4MkIwMDA3ODA0MDNDMEQwMjAwQUUyRDA4MTRFRgotOjEwNUQ0MDAwMjQwQzE2ODAzQzBCODAwMDhFMjc0NDAwMEUwMDBFMjY4QgotOjEwNUQ1MDAwQUQ2QzAwMkMxMjAwMDAwNDNDMDIxNjkxMjQwNTAwMDFEOQotOjEwNUQ2MDAwMTIwNTAwMTAzQzAyM0Q2QzM0NTgwMEUwQUUzODQ0MDg4NwotOjEwNUQ3MDAwM0MxMTA4MDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDA4QgotOjEwNUQ4MDAwMDAxMTg1NDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTBCRgotOjEwNUQ5MDAwM0MwRTAyMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhFOQotOjEwNURBMDAwQUNDRTA4MTAzQzAyMThEQTM0NTgwMEUwQUUzODQ0MDg5MwotOjEwNURCMDAwM0MxMTA4MDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDA0QgotOjEwNURDMDAwMDAxMTg1NDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTA3RgotOjEwNUREMDAwM0MwRTAyMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhBOQotOjEwNURFMDAwQUNDRTA4MTAwQTAwMDQyQzI0MDUwMDAxMEEwMDA0MkM4MwotOjEwNURGMDAwMDAwMDI4MjEyNDAyMDQwMEE3ODIwMDBDQTc4MDAwMDREMAotOjEwNUUwMDAwMDAwMDIwMjEzQzA2MDgwMDI0QzY1NjU4MjQwNUZGRkY0OAotOjEwNUUxMDAwMjQ4OTAwMDEwMDA0NDA4MDMxMjRGRkZGMDEwNjE4MjE3RAotOjEwNUUyMDAwMkM4NzAwMjAxNEUwRkZGQUFDNjUwMDAwMjQwNDA0MDA3NQotOjEwNUUzMDAwQTc4NDAwMEVBNzgwMDAwNjAwMDAyMDIxM0MwNjA4MDA3MQotOjEwNUU0MDAwMjRDNjU2RDgyNDA1RkZGRjI0OEQwMDAxMDAwNDYwODA3RAotOjEwNUU1MDAwMzFBNEZGRkYwMTg2NTgyMTJDOEEwMDIwMTU0MEZGRkE0QgotOjEwNUU2MDAwQUQ2NTAwMDBBNzgwMDAxMEE3ODAwMDA4QTc4MDAwMEE4OQotOjEwNUU3MDAwMDAwMDIwMjEzQzA2MDgwMDI0QzY1NzU4MjQwNUZGRkZENwotOjEwNUU4MDAwMjQ5OTAwMDEwMDA0QzA4MDMzMjRGRkZGMDMwNjc4MjExOQotOjEwNUU5MDAwMkM4RTAwMDQxNUMwRkZGQUFERTUwMDAwM0MwNTYwMDA0MwotOjEwNUVBMDAwOENBNzNEMDAyNDAzRTA4RjAwRTMxMDI0MzQ0NjAxNDAxQQotOjEwNUVCMDAwMDNFMDAwMDhBQ0E2M0QwMDI0ODcwMDdGMDAwNzMxQzI0NAotOjEwNUVDMDAwMjRDNUZGRkYwMDA1MThDMjI0NjQwMDAxMzA4MkZGRkZEMwotOjEwNUVEMDAwMDAwMjM4QzBBNzg0MDAxODNDMDEwODAwQUMyNzAwMzAzRAotOjEwNUVFMDAwQUY4MDAwMTQwMDAwMjgyMTAwMDAyMDIxMDAwMDMwMjE5NAotOjEwNUVGMDAwMjQ4OTAwMDEwMEE3MjgyMTMxMjRGRkZGMkNBODE3MDFDNQotOjEwNUYwMDAwMTEwMDAwMDMyQzgzMDA4MDE0NjBGRkY5MjRDNjAwMDFGNwotOjEwNUYxMDAwMDBDMDI4MjFBRjg2MDAxNDEwQzAwMDFEQTc4NjAwMTIwMwotOjEwNUYyMDAwMjRDQUZGRkYwMDBBMTE0MjNDMDgwODAwMjUwODU3NTgwMAotOjEwNUYzMDAwMTA0MDAwMEEwMDAwMjAyMTAwNDAzMDIxMjQwN0ZGRkYwQwotOjEwNUY0MDAwMjQ4RTAwMDEwMDA0Njg4MDMxQzRGRkZGMDFBODYwMjE5NQotOjEwNUY1MDAwMDA4NjU4MkIxNTYwRkZGQUFEODcwMDAwMzBBMjAwMUZBNQotOjEwNUY2MDAwNTA0MDAwMDgwMDA0MzA4MDI0MDMwMDAxMDA0M0M4MDRBRQotOjEwNUY3MDAwMDAwNDEwODAwMDQ4NzgyMTI3MzhGRkZGMDNFMDAwMDg2NAotOjEwNUY4MDAwQURGODAwMDAwMEM4MjAyMTI0MDVGRkZGQUM4NTAwMDAwQgotOjEwNUY5MDAwMDNFMDAwMDgwMDAwMDAwMDMwQTVGRkZGMzBDNkZGRkY0RgotOjEwNUZBMDAwMzBBODAwMUYwMDgwNjAyMTMwRTcwMEZGMDAwNTI5NDI3MwotOjEwNUZCMDAwMDAwMDUwMjExMEMwMDAxRDI0MDkwMDAxMjQwQjAwMDEyNQotOjEwNUZDMDAwMjUxODAwMDEwMTBCMjAwNDMzMDgwMEZGMDEyNjc4MjY2NAotOjEwNUZEMDAwMzkwRTAwMjAyREVEMDAwMTJEQzIwMDAxMDFBMjE4MjU2RgotOjEwNUZFMDAwMTA2MDAwMEQwMTQ0NTAyNTAwMDVDODgwMDMyQzQwMjE5RAotOjEwNUZGMDAwMDEwMDE4MjExMEUwMDAwRjAwMEEyMDI3OEQwNDAwMDA4NgotOjEwNjAwMDAwMDA4QTE4MjVBRDAzMDAwMDI0QUQwMDAxMDAwMDQwMjFFNgotOjEwNjAxMDAwMDAwMDUwMjEzMUE1RkZGRjI1MkUwMDAxMzFDOUZGRkZFRgotOjEwNjAyMDAwMDBDOTEwMkIxMDQwRkZFNzI1MTgwMDAxMDNFMDAwMDgwRAotOjEwNjAzMDAwMDAwMDAwMDA4RDBBMDAwMDAxNDQ0MDI0MEEwMDA1MTJGRgotOjEwNjA0MDAwQUM2ODAwMDAyN0JERkZFODMwQTVGRkZGMzBDNkZGRkZBQQotOjEwNjA1MDAwQUZCMDAwMTBBRkJGMDAxNDMwRTdGRkZGMDAwMDUwMjFDOQotOjEwNjA2MDAwMzQxMEZGRkYwMDAwNjAyMTI0QUYwMDFGMDBDMDQ4MjE1MgotOjEwNjA3MDAwMjQxODAwMDEyNDE5MDAyMDA1RTAwMDE2MDFFMDEwMjE3OQotOjEwNjA4MDAwMDAwMkY5NDMwMTlGNjgyQTAwMDk3MDJCMDFBRTQwMjRFOQotOjEwNjA5MDAwMTEwMDAwMTcwMDBDMTg4MDAwNjQxMDIxMTBFMDAwMDVBQQotOjEwNjBBMDAwOEM0QjAwMDAwMEY4NDAwNDAwMDgzODIzMDE2NzU4MjQ5NgotOjEwNjBCMDAwMDAwMDM4MjExNTQwMDA0MTAwMDA0MDIxNTU2MDAwMTZDNQotOjEwNjBDMDAwMzE2OUZGRkYyNThCMDAwMTMxNkNGRkZGMDVFMUZGRUMxQgotOjEwNjBEMDAwMDFFMDEwMjEyNEEyMDAzRTAwMDJGOTQzMDE5RjY4MkEzQQotOjEwNjBFMDAwMDAwOTcwMkIwMUFFNDAyNDE1MDBGRkVCMDAwQzE4ODA1NgotOjEwNjBGMDAwMTU0NjAwMDUzNDAyRkZGRjAyMDAyODIxMEUwMDA0RjZCOQotOjEwNjEwMDAwMDAwMDM4MjEwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTA1MgotOjEwNjExMDAwMDNFMDAwMDgyN0JEMDAxODE1MjAwMDAzMDE2MDE4MjFDNgotOjEwNjEyMDAwMDAwQjFDMDIyNDA4MDAxMDMwNkEwMEZGMTU0MDAwMDUxNwotOjEwNjEzMDAwMzA2RTAwMEYyNTBEMDAwODAwMDMxQTAyMzFBODAwRkY4MQotOjEwNjE0MDAwMzA2RTAwMEYxNUMwMDAwNTMwN0YwMDAzMjUxMDAwMDRERAotOjEwNjE1MDAwMDAwMzE5MDIzMjA4MDBGRjMwN0YwMDAzMTdFMDAwMDUzQQotOjEwNjE2MDAwMzg2OTAwMDEyNTAyMDAwMjAwMDMxODgyMzA0ODAwRkY1MAotOjEwNjE3MDAwMzg2OTAwMDEzMTIzMDAwMTEwNjAwMDA0MzEwMzAwRkY4MQotOjEwNjE4MDAwMjUwQTAwMDEzMTQ4MDBGRjMxMDMwMEZGMDAwQzY5NDA3RgotOjEwNjE5MDAwMDFBMzQwMjEyNDBBMDAwMTEwQ0FGRkQ1MzExMEZGRkZERQotOjEwNjFBMDAwMjQ2RTAwMDEzMUM4MDBGRjExMTlGRkM2MzhDOTAwMDE3MwotOjEwNjFCMDAwMkQxRjAwMjA1M0UwMDAxQzI1OEIwMDAxMjQwRDAwMDE0MQotOjEwNjFDMDAwMEEwMDA1ODkyNDBFMDAyMDUxNDYwMDE3MjU4QjAwMDE4NgotOjEwNjFEMDAwMjUwOTAwMDEzMTI4MDBGRjJEMDkwMDIwNTEyMDAwMTI1RgotOjEwNjFFMDAwMjU4QjAwMDEyNTQzMDAwMTAxMEQ1MDA0MDE0QjEwMjRCMwotOjEwNjFGMDAwMjUwOTAwMDExNDQwRkZGNDMwNkFGRkZGMzEyN0ZGRkYzQgotOjEwNjIwMDAwMTBFRTAwMEMyNTgyRkZGRjMwNENGRkZGMDAwMDUwMjFGNAotOjEwNjIxMDAwMzQxMEZGRkYzMTI4MDBGRjJEMDkwMDIwNTUyMEZGRjIyOAotOjEwNjIyMDAwMjU0MzAwMDEyNThCMDAwMTAxNDY0ODI2MEEwMDA1NDM0RAotOjEwNjIzMDAwMzE2Q0ZGRkYwMDAwMzgyMTAwMDA1MDIxMEEwMDA1OTU1NQotOjEwNjI0MDAwMzQxMEZGRkYyN0JERkZEOEFGQjAwMDEwMzBGMEZGRkZDNAotOjEwNjI1MDAwQUZCMTAwMTQwMDEwMzk0MjMyMTFGRkUwMDAwNzEwODA4NgotOjEwNjI2MDAwQUZCMzAwMUMwMEIxMjgyMzMwRDNGRkZGQUZCMjAwMTgzQQotOjEwNjI3MDAwMzBBNUZGRkYwMDgwOTAyMTAyNjAzMDIxMDA0NDIwMjFFMgotOjEwNjI4MDAwQUZCRjAwMjAwRTAwMDUyMTMyMDcwMDFGMDIyMjg4MjEyNwotOjEwNjI5MDAwMzQwM0ZGRkYwMjQwMjAyMTAyMDAyODIxMDI2MDMwMjE0OAotOjEwNjJBMDAwMDAwMDM4MjExMDQzMDAwOTMyMzFGRkZGMDIyMDEwMjE4NQotOjEwNjJCMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ2NQotOjEwNjJDMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MEUwMDA1MjE1NAotOjEwNjJEMDAwMDAwMDAwMDAwMDQwODgyMTAyMjAxMDIxOEZCRjAwMjAxNAotOjEwNjJFMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA1NAotOjEwNjJGMDAwMDNFMDAwMDgyN0JEMDAyODAwMDQyNDAwM0MwMzYwMDBFMAotOjEwNjMwMDAwQUM2MDNEMDgxMEEwMDAwMjM0ODIxMDA2MzQ4MjEwMTZFMgotOjEwNjMxMDAwMDNFMDAwMDhBQzYyM0QwNDI3QkRGRkUwQUZCMDAwMTAxMQotOjEwNjMyMDAwMzA5MDAwRkYyRTAyMDAwNkFGQkYwMDE4MTA0MDAwMDg5QQotOjEwNjMzMDAwQUZCMTAwMTQwMDEwMzA4MDNDMDMwODAwMjQ2MzUzQjQ1NAotOjEwNjM0MDAwMDBDMzI4MjE4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDA4OQotOjEwNjM1MDAwMDAwMDIwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBGMwotOjEwNjM2MDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOTc5MTAwMTI1MwotOjEwNjM3MDAwMTYyMDAwNTEwMDAwMjAyMTNDMDIwODAwOTA0MjAwMzMwQQotOjEwNjM4MDAwMEEwMDA1RkMwMDAwMDAwMDk3OEQwMDBFMTVBMDAwMzFFQQotOjEwNjM5MDAwMDAwMDIwMjEwQTAwMDVGQzI0MDIwMDA4OTc4NzAwMEM1OQotOjEwNjNBMDAwMTRFMDAwMUEwMDAwMTgyMTAwNjAyMDIxMjQwMjAwMDFERQotOjEwNjNCMDAwMTA4MEZGRTk4RkJGMDAxODAwMDQyOUMyMDA0NTMwMjE3QQotOjEwNjNDMDAwMDBBNjU4MkIxMTYwRkZFNDNDMDg4MDAwM0MwNzIwMDAyOQotOjEwNjNEMDAwMDAwNTY5QzAwMUE3NjAyNUFEMEMwMDIwM0MwMzgwMDhDMgotOjEwNjNFMDAwMjQwMjAwMUYyNDQyRkZGRkFDNjAwMDAwMDQ0MUZGRkRCNwotOjEwNjNGMDAwMjQ2MzAwMDQyNEE1MDAwMTAwQTY3MDJCMTVDMEZGRjUzRQotOjEwNjQwMDAwMDAwNTY5QzAwQTAwMDVFNjhGQkYwMDE4OTc4NzAwMDRFMQotOjEwNjQxMDAwM0MwNDA4MDAyNDg0NTY1ODI0MDUwNDAwMEUwMDA1QTFGRAotOjEwNjQyMDAwMjQwNjAwMDE5NzhCMDAwQzI0NDQwMDAxMzA4QUZGRkZGMgotOjEwNjQzMDAwMjU2OUZGRkYyRDQ4MDQwMDAwNDAyODIxMTUwMDAwNDA3OQotOjEwNjQ0MDAwQTc4OTAwMEMyNEFDMzgwMDAwMEMxOUMwMEEwMDA1RkExQQotOjEwNjQ1MDAwQTc4MDAwMDQ5Nzg3MDAwNjNDMDQwODAwMjQ4NDU2RDhDRgotOjEwNjQ2MDAwMjQwNTA0MDAwRTAwMDVBMTI0MDYwMDAxOTc5OTAwMEVFMgotOjEwNjQ3MDAwMjQ0NDAwMDEzMDk4RkZGRjI3MkZGRkZGMkYwRTA0MDA1OAotOjEwNjQ4MDAwMDA0MDg4MjExNUMwMDAyQ0E3OEYwMDBFQTc4MDAwMDZCMQotOjEwNjQ5MDAwM0EwMjAwMDMyNjI0MDEwMDMwODRGRkZGMEUwMDA1Q0VERgotOjEwNjRBMDAwMkM0NTAwMDEwMDExRjhDMDI3RjAwMTAwMDAxMDIxQzBBOAotOjEwNjRCMDAwMEEwMDA1RkMyNDAyMDAwODk3ODUwMDE2OTc4NzAwMEE0OQotOjEwNjRDMDAwM0MwNDA4MDAyNDg0NTc1ODBFMDAwNUExMjQwNjAwMDE0RQotOjEwNjREMDAwOTc4NzAwMTI4Rjg5MDAxNDI0NDUwMDAxMzBBOEZGRkYyMAotOjEwNjRFMDAwMjRFM0ZGRkYwMTA5MzAyQjAwNDA4MDIxMTRDMDAwMTg3NQotOjEwNjRGMDAwQTc4MzAwMTJBNzgwMDAwQTk3ODUwMDE4MEUwMDBFMTBDRgotOjEwNjUwMDAwMDIwMDIwMjEyNDRBMDUwMDMxNDRGRkZGMEUwMDA1Q0U4MQotOjEwNjUxMDAwMjQwNTAwMDEzQzA1MDgwMDk0QTUwMDMyMEUwMDBFMTA3MQotOjEwNjUyMDAwMDIwMDIwMjEyNDQ1MjEwMDNDMDIwODAwOTA0MjAwMzM1MwotOjEwNjUzMDAwMEEwMDA1RkMwMDA1MjFDMDBBMDAwNjM0QTc4NDAwMDZGNQotOjEwNjU0MDAwMjRBQzM4MDAwMDBDMTlDMDBBMDAwNUZBQTc4NDAwMDQyNgotOjEwNjU1MDAwMEEwMDA2NEVBNzg1MDAwQTMwODQwMEZGMjdCREZGRTgyOQotOjEwNjU2MDAwMkM4MjAwMDZBRkJGMDAxNEFGQjAwMDEwMTA0MDAwMTUyMQotOjEwNjU3MDAwMDBBMDM4MjEwMDA0NDA4MDNDMDMwODAwMjQ2MzUzQ0M3MQotOjEwNjU4MDAwMDEwMzI4MjE4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDAwNgotOjEwNjU5MDAwMjRDQzAwN0YwMDA3NTFDMjAwMEM1OUMyMzE3MEZGRkZBQwotOjEwNjVBMDAwMjU0N0M0MDAzMEU1RkZGRjI3ODQwMDA0MDIwMDMwMjFBNgotOjEwNjVCMDAwMEUwMDA0RjYyNDA3MDAwMTk3ODYwMDEwMDIwNjIwMjEzMQotOjEwNjVDMDAwQTc4NDAwMTA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhGNAotOjEwNjVEMDAwMjdCRDAwMTgzQzA1MDgwMDhDQTUwMDMwMDAwNzc5QzJEMwotOjEwNjVFMDAwMEUwMDAyRjAyNUU0REYwMDMwNDVGRkZGM0MwNDA4MDAwOAotOjEwNjVGMDAwMjQ4NDU3NTgyNDA2MDAwMTBFMDAwNEY2MjQwNzAwMDFFNQotOjEwNjYwMDAwOTc4RTAwMTI4RkJGMDAxNDhGQjAwMDEwMjVDRDAwMDFBRgotOjEwNjYxMDAwMjdCRDAwMTgwM0UwMDAwOEE3OEQwMDEyMDAwN0M5QzJCQgotOjEwNjYyMDAwMjczOEZGMDAwMDE4NzhDMjMxRjBGRkZGM0MwNDA4MDA1MwotOjEwNjYzMDAwMjQ4NDU2RDgwMjAwMjgyMTI0MDYwMDAxMEUwMDA0RjYwNgotOjEwNjY0MDAwMjQwNzAwMDE5NzhEMDAwRTI2MEUwMTAwMDAwRTg0MDAyNQotOjEwNjY1MDAwMjVBQzAwMDEzQzBCNjAwMEE3OEMwMDBFQUQ2MDNEMDgyRQotOjEwNjY2MDAwMzYwNDAwMDYwMDAwMzAyMTNDMDc2MDAwOENFMjNEMDQ0NwotOjEwNjY3MDAwMzA1RjAwMDYxN0UwRkZGRDI0QzkwMDAxMDAwNjFCMDA4MwotOjEwNjY4MDAwMzEyNjAwRkYwMDY0NDAyNTJDQzUwMDA0QUNFODNEMDQyMQotOjEwNjY5MDAwMTRBMEZGRjY4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhCNQotOjEwNjZBMDAwMjdCRDAwMTgwMDA3NTFDMjI1NDlDODAwMjQwNjAwMDE3MwotOjEwNjZCMDAwMjQwNzAwMDEzQzA0MDgwMDI0ODQ1NjU4MEUwMDA0RjYwOAotOjEwNjZDMDAwMzEyNUZGRkY5Nzg3MDAwQzhGQkYwMDE0OEZCMDAwMTA5QgotOjEwNjZEMDAwMjRFNjAwMDEyN0JEMDAxODAzRTAwMDA4QTc4NjAwMEM4RgotOjEwNjZFMDAwMzA4NEZGRkYzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjg1QwotOjEwNjZGMDAwMDQ0MEZGRkUzQzA4NDA4MDAwODgzODI1M0MwMzEwMDAyMQotOjEwNjcwMDAwQUNDMDAxODBBQ0M1MDE4NEFDQzcwMTg4MDNFMDAwMDhCRgotOjEwNjcxMDAwQUNDMzAxQjgzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjhENgotOjEwNjcyMDAwMDQ0MEZGRkUzQzA4NDAzODhDQTcwMDAwMDA4ODI4MjU2NAotOjEwNjczMDAwM0MwMzEwMDBBQ0M3MDE4MEFDQzUwMTg4MDNFMDAwMDgzMQotOjEwNjc0MDAwQUNDMzAxQjg4RjgzMDA1QzhGODYwMDU0MTA2NjAwMEJDOQotOjEwNjc1MDAwMDA4MDQwMjEzQzA3MDgwMDI0RTc1NzY4MDAwMzI4QzA1OAotOjEwNjc2MDAwMDBBNzEwMjE4QzQ0MDAwMDI0NjMwMDAxMTA4ODAwMDU1QwotOjEwNjc3MDAwMzA2MzAwMEY1NDY2RkZGQTAwMDMyOEMwMDNFMDAwMDhFRQotOjEwNjc4MDAwMDAwMDEwMjEzQzA3MDgwMDI0RTc1NzZDMDBBNzMwMjFDNwotOjEwNjc5MDAwMDNFMDAwMDg4Q0MyMDAwMDNDMDM5MDAwMzQ2MjAwMDE1QQotOjEwNjdBMDAwMDA4MjIwMjUzQzAzODAwMEFDNjQwMDIwOEM2NTAwMjAyMgotOjEwNjdCMDAwMDRBMEZGRkUwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA0RAotOjEwNjdDMDAwM0MwMjgwMDAzNDQzMDAwMTAwODMyMDI1MDNFMDAwMDhFMAotOjEwNjdEMDAwQUM0NDAwMjAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkZCMwotOjEwNjdFMDAwQUZCMDAwMTBBRkJGMDAxODEyMjAwMDEyMDBBMDgwMjEyRgotOjEwNjdGMDAwOENBNTAwMDAxNEEwMDAxMTI0MDQwMDAyM0MwNjgwMDBCNwotOjEwNjgwMDAwOENDMjAxQjgwNDQwRkZGRTNDMDc0MDAwMDIyNzIwMjU0RgotOjEwNjgxMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwM0MwMzEwMDAyMAotOjEwNjgyMDAwMjdCRDAwMjBBQ0M1MDE4MEFDQzQwMTg4MDNFMDAwMDg4RQotOjEwNjgzMDAwQUNDMzAxQjgwQTAwMDcwRjhDQTUwMDAwMEUwMDA2NjY2NQotOjEwNjg0MDAwMjQwNjAyMDAwMDAwMjgyMTBBMDAwNzBGQUUwMDAwMDAwNQotOjEwNjg1MDAwMzA4N0ZGRkYzQzA2ODAwMDhDQzIwMUI4MDQ0MEZGRkU3OQotOjEwNjg2MDAwM0MwQTQwMDY4Q0E5MDAwMDAwRUE0MDI1QUNDOTAxODAyMgotOjEwNjg3MDAwOENBNDAwMDQzQzAzMTAwMEFDQzQwMTg0QUNDODAxODhBMwotOjEwNjg4MDAwMDNFMDAwMDhBQ0MzMDFCODhGODNGREU4MjdCREZGRTgzMwotOjEwNjg5MDAwQUZCRjAwMTRBRkIwMDAxMDkwNjcwMDA4MDA4MDEwMjE1NwotOjEwNjhBMDAwMDA4MDI4MjEzMEU2MDA0MDAwMDAyMDIxMTBDMDAwMDhCMAotOjEwNjhCMDAwOEM1MDAwMDAwRTAwMDA4NjAyMDAyMDIxMDIwMDIwMjFFMgotOjEwNjhDMDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwNDg5MjdCRDAwMTg4NAotOjEwNjhEMDAwMEUwMDA3MjQwMDAwMDAwMDBFMDAwMDg2MDIwMDIwMjFBOAotOjEwNjhFMDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDA0ODkxRAotOjEwNjhGMDAwMjdCRDAwMTgyN0JERkZFMEFGQjAwMDEwOEY5MEZERTg2NgotOjEwNjkwMDAwQUZCRjAwMUNBRkIyMDAxOEFGQjEwMDE0OTIwNjAwMDE3NwotOjEwNjkxMDAwMDA4MDg4MjEwRTAwMDZGNjMwRDIwMDA0OTIwNDAwMDVBMwotOjEwNjkyMDAwMDAxMTI5QzJBNjA1MDAwMDM0ODMwMDQwQTIwMzAwMDUxRgotOjEwNjkzMDAwMEUwMDA3MDAwMjIwMjAyMTBFMDAwNDhCMDIyMDIwMjFERgotOjEwNjk0MDAwMjQwMjAwMDFBRTAyMDAwQzAyMjAyODIxQTYwMjAwMTA0MQotOjEwNjk1MDAwMjQwNDAwMDJBNjAyMDAxMjI0MDYwMjAwQTYwMjAwMTQ2QgotOjEwNjk2MDAwMEUwMDA2NjZBNjAyMDAxNjE2NDAwMDBGOEZCRjAwMUMyMAotOjEwNjk3MDAwOTc4QzAwNTgzQzBCMDgwMDhENkIwMDc4MjU4OEZGRkYzMgotOjEwNjk4MDAwMzEwOUZGRkYyNTZBMDAwMTAxMkEzODJCMTBFMDAwMDZCQgotOjEwNjk5MDAwQTc4ODAwNTgzQzBGNjAwNjI0MEUwMDE2MzVFRDAwMTA0NQotOjEwNjlBMDAwQURBRTAwNTA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQyNQotOjEwNjlCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBENgotOjEwNjlDMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMEUwMDA2RjY1NAotOjEwNjlEMDAwMDA4MDg4MjE4Rjg1RkRFODAyMjAyMDIxOTBBMzAwMDVGQQotOjEwNjlFMDAwMEUwMDA3MDAzMDcwMDBGRjI0MDIwMDNFMTIwMjAwMDU3NgotOjEwNjlGMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhBMwotOjEwNkEwMDAwMjdCRDAwMjAzQzA1ODAwMDhDQTQwMTc4MDQ4MEZGRkU5NwotOjEwNkExMDAwMjQwNzAwMDczQzA2MTAwMEFDQjEwMTQwMDIyMDIwMjFGMQotOjEwNkEyMDAwQTBBNzAxNDQ4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBEMQotOjEwNkEzMDAwQUNBNjAxNzgwQTAwMDc0RDI3QkQwMDIwMjdCREZGRTA2NgotOjEwNkE0MDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0M0MxMDgwMDAxMQotOjEwNkE1MDAwOEUxMTAwMjAwMDAwMDAwMDBFMDAwNDhCQUUwNDAwMjAwOAotOjEwNkE2MDAwQUUxMTAwMjA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAzRQotOjEwNkE3MDAwMDNFMDAwMDgyN0JEMDAyMDMwODRGRkZGM0MwNjgwMDBCMwotOjEwNkE4MDAwOENDMjAxQjgwNDQwRkZGRTNDMDg0MDM1MDA4ODM4MjUyMAotOjEwNkE5MDAwM0MwMzEwMDBBQ0M1MDE4MEFDQzAwMTg0QUNDNzAxODhDOAotOjEwNkFBMDAwMDNFMDAwMDhBQ0MzMDFCODMwODRGRkZGM0MwNjgwMDA1RgotOjEwNkFCMDAwOENDMjAxQjgwNDQwRkZGRTNDMDg0MDM2MDA4ODM4MjVFRgotOjEwNkFDMDAwM0MwMzEwMDBBQ0M1MDE4MEFDQzAwMTg0QUNDNzAxODg5OAotOjEwNkFEMDAwMDNFMDAwMDhBQ0MzMDFCODI3QkRGRkQwQUZCNTAwMjQ2OAotOjEwNkFFMDAwMzA5NUZGRkZBRkI2MDAyOEFGQjQwMDIwQUZCRjAwMkMzOQotOjEwNkFGMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBCQwotOjEwNkIwMDAwMzBCNkZGRkYxMkEwMDAyNzAwMDBBMDIxOEY5MjAwM0NBQQotOjEwNkIxMDAwOEU0MzAwMDAzQzA2ODAwMDI0MDIwMDQwMDAwMzNFMDIzOQotOjEwNkIyMDAwMDAwMzJDMDIzMEU0MDA3RjAwNjY5ODI0MTQ4MjAwMURDQwotOjEwNkIzMDAwMzBBNTAwRkY4RjgzMDA0QzJDNjgwMDBBNTEwMDAwMTAyNAotOjEwNkI0MDAwOEY4NjAwMzAwMDAzNTg4MDNDMEMwODAwMjU4QzUzRThFOQotOjEwNkI1MDAwMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4MDAwMDAwMDA1OAotOjEwNkI2MDAwMDJENDQ4MjEzMTI1RkZGRjBFMDAwNkM4MjQwNDAwODQwQQotOjEwNkI3MDAwMTY2MDAwMDI4RjkyMDAzQ0FGODAwMDRDOEY4NjAwMzA4MAotOjEwNkI4MDAwMjY1ODAwMjAyNjhGMDAwMTAzMDA5MDIxMzFGNEZGRkZEQQotOjEwNkI5MDAwMTRDMDAwMDRBRjk4MDAzQzAyOTUyODJCMTRBMEZGREMyMQotOjEwNkJBMDAwMDAwMDAwMDAwMjgwMTAyMThGQkYwMDJDOEZCNjAwMjg0QgotOjEwNkJCMDAwOEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg1MwotOjEwNkJDMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMzAyMwotOjEwNkJEMDAwMjQwNzAwMzQxNEE3MDE0NjAwMDAwMDAwOTI0NzAwMEU2RAotOjEwNkJFMDAwOEY5OUZERUM4RjkwRkRFODI0MTgxNjAwQTMyNzAwMTk1QgotOjEwNkJGMDAwOTI0QTAwMEQzQzA4ODAwMDNDMDc4MDBDQTMyQTAwMTgzNAotOjEwNkMwMDAwOTY0NDAwMTIzQzBGNjAwMDNDMTE3RkZGQTYwNDAwNUMxQwotOjEwNkMxMDAwOTY1RjAwMTAzNjIyRkZGRjI0MEEwMDA1MzNFNUZGRkZEMAotOjEwNkMyMDAwQUUwNTAwNTQ4RTQ2MDAxQ0FEMTgwMDI4OENFOTAwMDAwQgotOjEwNkMzMDAwOERFRTQ0NDgwMTI2NjgyNjAxQ0QzMDIxQUUwNjAwMzg4RAotOjEwNkM0MDAwOEUwMzAwMzgyNENCMDAwMTNDMEU3RjAwQUUwMzAwM0NENQotOjEwNkM1MDAwOEUwQzAwM0NBRjJDMDAwNEFFMEIwMDIwOEUxMzAwMjBFNQotOjEwNkM2MDAwQUUxMzAwMUNBMzIwMDAxQkFFMDIwMDJDQTMyQTAwMTJBRQotOjEwNkM3MDAwOEU0NDAwMTQyNDEzMDA1MEFFMDQwMDM0OEUxRjAwMzRFMAotOjEwNkM4MDAwQUYzRjAwMTQ4RTQ1MDAxOEFFMDUwMDQ4OTI1ODAwMEMyNgotOjEwNkM5MDAwQTIxODAwNEU5MjBGMDAwODM1RTkwMDIwQTIwOTAwMDg1MgotOjEwNkNBMDAwOEUwRDAwMTgwMUFFMTgyNDM0NkM0MDAwQUUwQzAwMTg5NAotOjEwNkNCMDAwOTIwQjAwMDAzMTcyMDBGRjEyNTMwMkFEMjQxM0ZGODBDQgotOjEwNkNDMDAwM0MwNDA4MDAyNDg0NTdFODBFMDAwNzMyMDAwMDAwMDA0RQotOjEwNkNEMDAwMjQwMzAwMDQyNDA4MDAwMTNDMDUwODAwOENBNTU3RThBMwotOjEwNkNFMDAwM0MwNDgwMDBBMjAzMDAyNUEyMDgwMDA1OEM5MDAxNzhENgotOjEwNkNGMDAwMDYwMEZGRkU4RjkyMDAzQzI0MEUwMDAyM0MwRDEwMDBBNwotOjEwNkQwMDAwQUM4NTAxNDBBMDhFMDE0NEFDOEQwMTc4MEEwMDA3RUZFQwotOjEwNkQxMDAwQUY4MDAwNEMyQ0FEMDAzNzExQTBGRjk5OEY4NjAwMzA1QQotOjEwNkQyMDAwMDAwNTgwODAzQzExMDgwMDI2MzE1NDEwMDIxMTc4MjFBMgotOjEwNkQzMDAwOERFRTAwMDAwMUMwMDAwODAwMDAwMDAwMjQxMDAwMDRENwotOjEwNkQ0MDAwMTRCMDAwOEUzQzA3ODAwMDNDMEMwODAwOEQ4QzU3RTg4NgotOjEwNkQ1MDAwOEY4NkZERThBQ0VDMDAyMDhFNEIwMDA4OEY5OEZERUM5MAotOjEwNkQ2MDAwMjQwOTAwNTBBQ0NCMDAzMDhFNDMwMDA4QUNDMzAwNTA2NwotOjEwNkQ3MDAwOEU0MjAwMENBQ0MyMDAzNDhFNEEwMDEwQUNDQTAwMzhGRgotOjEwNkQ4MDAwOEU0NDAwMTBBQ0M0MDA1NDhFNUYwMDE0QUNERjAwM0M5NQotOjEwNkQ5MDAwOEU1OTAwMThBRjE5MDAwNDhFNEYwMDFDQUNDRjAwMjA5NAotOjEwNkRBMDAwOTBEMTAwMDAzMjI1MDBGRjEwQTkwMjdEMDAwMDAwMDBGNAotOjEwNkRCMDAwOENEMTAwMzQ4Q0NGMDAzMDAyMkYzMDIzMDRDMDAwRjM3QwotOjEwNkRDMDAwMjQwNDAwOEMxMjYwMDBGMDI0MDIwMDAzMEEwMDA3RUY4NAotOjEwNkREMDAwQUY4MjAwNEMyNDE4MDAwNTE0QjgwMDY4M0MwQjgwMDBGQQotOjEwNkRFMDAwM0MwQzA4MDA4RDhDNTdFODhGODZGREU4QUQ2QzAwMjBDOAotOjEwNkRGMDAwOEU0MzAwMDQ4RjlGRkRFQzI0MDcyMDAwQUNDMzAwMUNEMQotOjEwNkUwMDAwOTI0MjAwMDgyNDEyMDAwOEEzRTIwMDE5OEY4QTAwM0M3NQotOjEwNkUxMDAwOTE0NDAwMDlBM0U0MDAxODhGODUwMDNDOTBCOTAwMEE1MgotOjEwNkUyMDAwMzMyNDAwRkYxMDkyMDAxMDI4ODgwMDA5MTUwMDAwQkNEMAotOjEwNkUzMDAwMjQwRDAwMDIyNDA5MDAyMDEwODkwMDBCMzQwNzgwMDA3MwotOjEwNkU0MDAwMjg5MTAwMjExNjIwMDAwODI0MDc0MDAwMjQwRjAwNDA0QwotOjEwNkU1MDAwMTA4RjAwMDUzQzA3MDAwMTI0MTgwMDgwMTA5ODAwMDJFNAotOjEwNkU2MDAwM0MwNzAwMDIyNDA3NDAwMDhDQzQwMDE4M0MwQUZGMDBDNQotOjEwNkU3MDAwMDA4QUY4MjQwM0U3QzgyNUFDRDkwMDE4OTBCMjAwMEJBQgotOjEwNkU4MDAwQTBEMjAwMjc4RjgzMDAzQzk0NjUwMDBDMTBBMDAyMzEzMwotOjEwNkU5MDAwMDAwMDAwMDA5NDY3MDAwQzNDMUY4MDAwQTRDNzAwNUM0OQotOjEwNkVBMDAwOTA2MjAwMEUyNDAzRkZCRjI0MDcwMDA0QTBDMjAwMDg2NAotOjEwNkVCMDAwOEY4QTAwM0M5MTQ0MDAwRkEwQzQwMDA5OEY4ODAwM0NEOQotOjEwNkVDMDAwOEQxMjAwMTA4RkY5MDA3NDAyNTkyODIzQUNDNTAwNThBOAotOjEwNkVEMDAwOEQxODAwMTRBQ0Q4MDAyQzk1MEYwMDE4MzFGMUZGRkY2RAotOjEwNkVFMDAwQUNEMTAwNDA5NTA5MDAxQTMxMzBGRkZGQUNEMDAwNDQwRQotOjEwNkVGMDAwOEQwRTAwMUNBQ0NFMDA0ODk1MEQwMDAyQTRDRDAwNzg4QwotOjEwNkYwMDAwOTEwQzAwMEVBMENDMDAwODkwQ0IwMDA4MDE2MzEwMjQ2NwotOjEwNkYxMDAwMTI2MDAxRDdBMEMyMDAwODhGOTIwMDNDMEEwMDA3RUY2MAotOjEwNkYyMDAwQUY4NzAwNEMyNDA2MDAwNjE0QTYwMDE0M0MwRTgwMDAxNwotOjEwNkYzMDAwM0MxMDA4MDA4RTEwNTdFODhGOENGREU0QUREMDAwMjA4NwotOjEwNkY0MDAwOEU0RDAwMTg4Rjg2RkRFODhGOEJGREVDQUQ4RDAwMDAxNwotOjEwNkY1MDAwOENDODAwMzgyNDA0MDAwNUFEODgwMDA0OENDMzAwM0NCNAotOjEwNkY2MDAwMTI2MDAwODFBRDYzMDAwMDBBMDAwN0VGQUY4NDAwNEM5RgotOjEwNkY3MDAwMjQwOTAwMDcxMEE5MDA0QjI0MDQwMDA2M0MwNTA4MDA2MgotOjEwNkY4MDAwMjRBNTU3RTgwRTAwMDcwNTI0MDQwMDgxOEY5MjAwM0NEOQotOjEwNkY5MDAwMDAxMzEwMkIwQTAwMDdFRkFGODIwMDRDMjQxRjAwMjNDMAotOjEwNkZBMDAwMTRCRkZGRjYzQzBDODAwMDNDMDMwODAwOEM2MzU3RThEQwotOjEwNkZCMDAwOEY4QkZERUNBRDgzMDAyMDhGOTFGREU4OEU0NjAwMDRBMQotOjEwNkZDMDAwMjU2NDAwMjAyNjQ1MDAxNEFFMjYwMDI4MjQwNjAwMDM3MAotOjEwNkZEMDAwMEUwMDBFMUMyNTcwMDAzMDhGODcwMDNDMDIwMDIwMjExRgotOjEwNkZFMDAwMjQwNjAwMDMwRTAwMEUxQzI0RTUwMDA4M0MwNDA4MDBFMwotOjEwNkZGMDAwMjQ4NDU3RTgwRTAwMDczMjAwMDAwMDAwOTIyMjAwMDBBRgotOjEwNzAwMDAwMjQwNDAwNTAzMDRBMDBGRjU1NDRGRkUxOEY5MjAwM0NCOQotOjEwNzAxMDAwMEUwMDBFMDcwMDAwMDAwMDBBMDAwOEY0OEY5MjAwM0NFQQotOjEwNzAyMDAwMjQwODAwMzMxNEE4MDAzMjNDMDI4MDAwM0MxMTA4MDAwMAotOjEwNzAzMDAwOEUzMTU3RTg4Rjg5RkRFQ0FDNTEwMDIwOEU0QTAwMDg1NAotOjEwNzA0MDAwMjQwRjAwMjg4RjhERkRFOEFEMkEwMDMwOEU0NDAwMENGRgotOjEwNzA1MDAwMjQwNjAwMDlBRDI0MDAzNDhFNUYwMDEwQUQzRjAwMzhENwotOjEwNzA2MDAwOEU1OTAwMTRBRDM5MDAyMDhFNDUwMDE4QUQyNTAwMjQzRQotOjEwNzA3MDAwOEU1ODAwMUNBRDM4MDAyOEExMkYwMDExOEU0RTAwMDQ0MAotOjEwNzA4MDAwMTI2MDAwMzFBREFFMDAyODhGOTIwMDNDMEEwMDA3RUY3RAotOjEwNzA5MDAwQUY4NjAwNEMyNDExMDAyMjE0QjFGRkI4MDAwMDAwMDA5QwotOjEwNzBBMDAwMjQwNDAwMDczQzE4MDgwMDhGMTg1N0U4M0MwRjgwMDBBNAotOjEwNzBCMDAwQURGODAwMjA1NjYwRkVCMUFGODQwMDRDM0MwNDA4MDBERgotOjEwNzBDMDAwMjQ4NDU3RTgwRTAwMDczMjI0MTMwMDUwOEY5OUZERThGRQotOjEwNzBEMDAwOTMzMjAwMDAzMjQ1MDBGRjEwQjMwMTZDMDAwMDAwMDA0NQotOjEwNzBFMDAwOEY5MjAwM0MwMDAwMjAyMTBBMDAwN0VGQUY4NDAwNEM4MwotOjEwNzBGMDAwM0MwNTA4MDAyNEE1NTdFODBFMDAwNkQ1MjQwNDAwODFBRAotOjEwNzEwMDAwMEEwMDA4RjQ4RjkyMDAzQzAyRDQ5ODIxMzI2NUZGRkZGOAotOjEwNzExMDAwMEUwMDA2QzgyNDA0MDA4NDBBMDAwN0VGOEY5MjAwM0M4QQotOjEwNzEyMDAwMTA4REZGNTEyNDA3MDQwMDI4ODcwMDAzMTBFMDAxQUFGNgotOjEwNzEzMDAwMjQxMDAwMDQyNDBFMDAwMTU0OEVGRjRCMjQwNzQwMDA0RAotOjEwNzE0MDAwMEEwMDA4QUEyNDA3MDEwMDNDMDUwODAwMjRBNTU3RTgwNgotOjEwNzE1MDAwMEUwMDA3MjQyNDA0MDA4MjhGOTIwMDNDMDAwMDMwMjE5RQotOjEwNzE2MDAwMEEwMDA3RUZBRjg2MDA0QzNDMDQwODAwMjQ4NDU3RTg2RgotOjEwNzE3MDAwOENDMjAwMzgwRTAwMDczMjhDQzMwMDNDOEY5MjAwM0M1QQotOjEwNzE4MDAwMEEwMDA5NEEwMDAwMjAyMTI0MDQwMDgyM0MwNTA4MDA2RQotOjEwNzE5MDAwMjRBNTU3RTgwRTAwMDcyNDAwMDAwMDAwOEY5MjAwM0M1MQotOjEwNzFBMDAwMDAwMDEwMjEwQTAwMDdFRkFGODIwMDRDOEU1MDAwMDQ0RgotOjEwNzFCMDAwOEY5MUZERTgzQzBBODAwMEFENTAwMDIwOTIyMjAwMDUyRQotOjEwNzFDMDAwMDIwMDI4MjEzMDQ2MDAwMjE0QzAwMTg3MjQwNDAwOEFFRQotOjEwNzFEMDAwOEY5MkZERUMwMjAwMjgyMTI0MDQwMDhEOTI0QjAwMUJBRAotOjEwNzFFMDAwMzE2MzAwMjAxNDYwMDE4MDAwMDAwMDAwOTIyRDAwMDkyRQotOjEwNzFGMDAwMjQwQzAwMTIzMUE4MDBGRjExMEMwMTdCMjQwNDAwODEzMwotOjEwNzIwMDAwMEUwMDA2RjYwMjAwMjAyMTkyNDUwMDFCMjQwRTAwMDQwOQotOjEwNzIxMDAwMDIwMDIwMjEzNEE5MDA0MkEyNDkwMDFCMEUwMDA3MDBGMQotOjEwNzIyMDAwQTIyRTAwMjUzQzA0ODAwMDhDOTEwMTc4MDYyMEZGRkVGMAotOjEwNzIzMDAwMjQxODAwMDJBQzkwMDE0MEEwOTgwMTQ0OEY5MjAwM0NCOQotOjEwNzI0MDAwM0MwRjEwMDBBQzhGMDE3ODBBMDAwOEY1MDAxMzEwMkJEQQotOjEwNzI1MDAwOEU1MDAwMDQ4RjkxRkRFODNDMUY4MDAwQUZGMDAwMjBBRAotOjEwNzI2MDAwOTIzOTAwMDUwMjAwMjgyMTMzMjcwMDAyMTRFMDAwMUE5OQotOjEwNzI3MDAwMjQwNDAwOEE5MjI2MDAwOTI0MTIwMDEyMzBDNDAwRkY2MAotOjEwNzI4MDAwMTA5MjAxMTEwMDAwMDAwMDkyMjMwMDA5MjQwQTAwMDQ1QQotOjEwNzI5MDAwMzA2MjAwRkYxMDRBMDEwQzAwMDAwMDAwMEUwMDA2RjZFQwotOjEwNzJBMDAwMDIwMDIwMjE4Rjg4RkRFQzI0MENGRkZFMDIwMDIwMjEyQgotOjEwNzJCMDAwOTEwRTAwMUIzNUNEMDAyMEExMEQwMDFCQTIzMjAwMDk0QwotOjEwNzJDMDAwOTIyQjAwMDUwMTZDOTAyNDBFMDAwNzAwQTIzMjAwMDVFRAotOjEwNzJEMDAwMDIwMDI4MjEwMDAwMjAyMTBFMDAwN0JBMDAwMDAwMDA1MwotOjEwNzJFMDAwMEEwMDA4RjQ4RjkyMDAzQzhFNTEwMDA0M0MwMjgwMDA5QQotOjEwNzJGMDAwM0MxMDA4MDAyNjEwNTdFOEFDNTEwMDIwM0MwMTA4MDA2MwotOjEwNzMwMDAwQUMzMTU3RTg5MjQ2MDAwMzMwQzQwMDA0MTA4MDAxNjk5NAotOjEwNzMxMDAwOEY4NEZERTgyNDAyMDAwNkEwODIwMDA5OTI0RDAwMUIyNAotOjEwNzMyMDAwMjQwOEZGQzAzMUFDMDAzRjAxODg1ODI1QTA4QjAwMDgxRAotOjEwNzMzMDAwOTI0MzAwMDMzMDZBMDAwMTE1NDAwMTYwMDAwMDAwMDAyNAotOjEwNzM0MDAwOEU0MjAwMDhBRTAyMDAwODNDMDIwODAwOEM0MjU3RjA1MgotOjEwNzM1MDAwMTA0MDAxNUY4RjhFRkRFQzAwMDI4MUMyOEY4NUZERTgzOQotOjEwNzM2MDAwQTVEMDAwMEM4RTVGMDAwQzI0MEYwMDAxMjQwOTAwMTQyRQotOjEwNzM3MDAwQURERjAwMkM4RTU5MDAxMEFERDkwMDFDOTY0NzAwMTZDOQotOjEwNzM4MDAwQTVDNzAwM0M5NjU4MDAxNEE1RDgwMDNFQUNBRjAwMEMzMQotOjEwNzM5MDAwQTRBRjAwMTBBNEFGMDAxMkE0QUYwMDE0QTRBRjAwMTY1NQotOjEwNzNBMDAwMTI2MDAxNjNBMUM5MDAxMTkyNDQwMDAzMzA5MjAwMDJFRgotOjEwNzNCMDAwMkU1MzAwMDE4RjkyMDAzQzI2NjIwMDA4MEEwMDA3RUY1RQotOjEwNzNDMDAwQUY4MjAwNEM4RTQ2MDAwNDNDMDU4MDAwM0MwNDgwMDhERgotOjEwNzNEMDAwQUNBNjAwMjA4RTQ3MDAwODkwODkwMDAwMjQxMTAwNTBDMAotOjEwNzNFMDAwMzEyMjAwRkYxMDUxMDBCQzI0MDUwMDg4M0MwNDgwMDBCRAotOjEwNzNGMDAwOEM4RjAxQjgwNUUwRkZGRTAwMTM4MDJCM0MxODQwMDk3QwotOjEwNzQwMDAwMDBCODEwMjVBRjkwMDA0QzNDMTAxMDAwQUM4NjAxODBGNQotOjEwNzQxMDAwQUM4NzAxODRBQzgyMDE4OEFDOTAwMUI4MEEwMDA3RjAwNwotOjEwNzQyMDAwOEY4NjAwMzA4RTQ1MDAwNDNDMDY4MDAwM0MwOTgwMDhCMQotOjEwNzQzMDAwQUNDNTAwMjA5MTNGMDAwMDI0MDQwMDUwMzNGOTAwRkY0OAotOjEwNzQ0MDAwMTMyNDAwQjQyNDA2MDA4ODNDMDQ4MDAwOEM4QTAxQjgxMAotOjEwNzQ1MDAwMDU0MEZGRkUzQzBFNDAwRTAwQ0U2ODI1M0MwODEwMDBBMwotOjEwNzQ2MDAwQUM4NTAxODBBQzgwMDE4NEFDOEQwMTg4QUM4ODAxQjgwQQotOjEwNzQ3MDAwOTEyQjAwMDAyNDBDRkY4MDI0MDQwMDA0MDE2QzE4MjVDQgotOjEwNzQ4MDAwMjQwNjAwMzAwRTAwMDY2NkExMjMwMDAwMEEwMDA4RjQ1RQotOjEwNzQ5MDAwOEY5MjAwM0M4RTUwMDAwNDhGOTFGREVDM0MwRjgwMDBEOQotOjEwNzRBMDAwQURGMDAwMjA5MjI1MDAxQjMwQTkwMDEwMTEyMDAwN0NCNwotOjEwNzRCMDAwMjQwMzAwODEzQzA0ODAwMDhDODcwMUI4MDRFMEZGRkVCNwotOjEwNzRDMDAwM0MxRjQwMUZBQzkwMDE4MDAwN0YxMDI1MDAxM0M4MkI4QgotOjEwNzREMDAwM0MxMDEwMDBBQzgwMDE4NEFGOTkwMDRDQUM4MjAxODg1NAotOjEwNzRFMDAwQUM5MDAxQjgwQTAwMDdGMDhGODYwMDMwOEU0NDAwMUM3MwotOjEwNzRGMDAwMEUwMDA2RTEwMDAwMDAwMDEwNDAwMEZDMDA0MDM4MjFCMgotOjEwNzUwMDAwOEY5MjAwM0MyNDA2MDA4OTNDMDU4MDAwOENBRTAxQjhCNwotOjEwNzUxMDAwMDVDMEZGRkUwMDAwMDAwMEFDQTcwMTgwOEU1MDAwMUNEQgotOjEwNzUyMDAwM0MxMTQwMDEwMDEzNzgyQjAwRDEzODI1M0MxMzEwMDA4QQotOjEwNzUzMDAwQUNCMDAxODRBRjhGMDA0Q0FDQTcwMTg4QUNCMzAxQjhFQwotOjEwNzU0MDAwMEEwMDA3RjA4Rjg2MDAzMDk2NTkwMDAyM0MxMDA4MDBCMAotOjEwNzU1MDAwMjYxMDU3RTgzMzM4MDAwNDEzMDAwMEE3M0MwNDYwMDBFRAotOjEwNzU2MDAwOEU1RjAwMUMzQzA2ODAwMEFDREYwMDIwM0MwMTA4MDA2MAotOjEwNzU3MDAwQUMzRjU3RTg5NjRGMDAwMjMxRTcwMDAxMTRFMDAwRTcwNgotOjEwNzU4MDAwMDAwMDAwMDA4RTQyMDAwNEFFMDIwMDA4M0MxMDA4MDAxQgotOjEwNzU5MDAwOEUxMDU3RjAxMjAwMDBERDNDMDY4MDAwOEY4NUZERTg1QwotOjEwNzVBMDAwMjQxMDAwMDE4Q0JGMDAxODhGOTFGREVDOEY4OUZERTQ0MQotOjEwNzVCMDAwMDNFNkM4MjVBQ0I5MDAxOEEwQTAwMDA1QUNCMDAwMENDQgotOjEwNzVDMDAwM0MxODA4MDA4RjE4NTdGMDhGODcwMDNDQTRCMDAwMTBCQgotOjEwNzVEMDAwMDAxODc5QzJBNEIwMDAxMkE0QjAwMDE0QTRCMDAwMTYyMAotOjEwNzVFMDAwQTYyRjAwMEM4Q0VFMDAwODhGOEQwMDNDOEY4QzAwM0M4OQotOjEwNzVGMDAwQUUyRTAwMkM4REE4MDAwQzI0MDcwMDAyQUUyODAwMUMyMwotOjEwNzYwMDAwOTE4QjAwMTBBMjJCMDAxMThGODMwMDNDOTA2QTAwMTExNwotOjEwNzYxMDAwQTEyQTAwMDg4RjgyMDAzQzkwNDQwMDEyQTBBNDAwNEVEMgotOjEwNzYyMDAwOEY5MjAwM0M5MjQ2MDAxM0EyMjYwMDEyOEY5MjAwM0NEQgotOjEwNzYzMDAwOTY1RjAwMTRBNjNGMDAzQzk2NTkwMDE2QTYzOTAwM0VGRQotOjEwNzY0MDAwOEU1ODAwMThBRTM4MDAxNDU2NjBGRDRDQUY4NzAwNENDMQotOjEwNzY1MDAwM0MwNTA4MDAyNEE1NTdFODBFMDAwNzA1MDAwMDIwMjE3RQotOjEwNzY2MDAwOEY5MjAwM0MwMDAwMzgyMTBBMDAwN0VGQUY4NzAwNENFMgotOjEwNzY3MDAwM0MwNTA4MDAyNEE1NTdFODBFMDAwNzI0MjQwNDAwODJENgotOjEwNzY4MDAwOEY5MjAwM0MwQTAwMDhENzAwMDAzODIxMEUwMDBFMDczOAotOjEwNzY5MDAwMDAwMDAwMDA4RjkyMDAzQzBBMDAwOTRBMDAwMDIwMjFFRgotOjEwNzZBMDAwMEUwMDA2RjYwMjAwMjAyMTkyMzIwMDFCMDIwMDIwMjE2QgotOjEwNzZCMDAwMzY1ODAwMTAwRTAwMDcwMEEyMzgwMDFCOEY5MjAwM0NDNQotOjEwNzZDMDAwMEEwMDBBM0QwMDAwMTgyMTBFMDAwN0JBMjQwNDAwODFCOAotOjEwNzZEMDAwMEEwMDA4RjQ4RjkyMDAzQzkyNDMwMDBDMzA2QTAwMDFDQgotOjEwNzZFMDAwMTE0MDAwMDMwMDAwMDAwMDk2NEIwMDBFQTQ4QjAwMkNGQwotOjEwNzZGMDAwOTI0ODAwMEMzMTBDMDAwMjExODBGRjNDMDAwMDI4MjE1MAotOjEwNzcwMDAwOTY0RTAwMTI4RTREMDAxNEE0OEUwMDFBMEEwMDBBMEIyOQotOjEwNzcxMDAwQUM4RDAwMUM4RjgzMDA1QzhGODcwMDU0MTA2N0ZGNEE3QwotOjEwNzcyMDAwMDAwMDMwMjEzQzA4MDgwMDI1MDg1NzZDMDAwMzIwQzBFOQotOjEwNzczMDAwMDA4ODMwMjE4Q0QxMDAwMDEyMjUwMEM4MjQ2MjAwMDE4RAotOjEwNzc0MDAwMzA0MzAwMEYxNDY3RkZGQTAwMDMyMEMwMEEwMDBBMjIyQQotOjEwNzc1MDAwMDAwMDMwMjEzQzA1MDgwMDI0QTU1N0U4MEUwMDA3MjQ0RQotOjEwNzc2MDAwMjQwNDAwOEI4RjkyMDAzQzBBMDAwOEQ3MDAxMzM4MkJBQQotOjEwNzc3MDAwM0MwQzA4MDA4RDhDNTdFODI0RDlGRkZFMjU5MTAxMDBCMAotOjEwNzc4MDAwMzIyQjAwN0YwMTY3OTAyMTAyMzMxMDI0QUQwMjAwMjhDNAotOjEwNzc5MDAwQUU0NjAwRDBBRTQwMDBENDBBMDAwODQwQUU1OTAwMUNFRQotOjEwNzdBMDAwQUNDMDAwNTQzQzA5MDgwMDhEMjk1N0U4M0MwNTgwMEMwQQotOjEwNzdCMDAwMzRBODAxMDBBQ0U5MDAyODhFNTAwMDE0QUQxMDAwRDBCMAotOjEwNzdDMDAwOEU0RTAwMTRBRDBFMDBENDhFNEQwMDEwMjVBN0ZGRkU4NgotOjEwNzdEMDAwMEEwMDA4N0NBRDA3MDAxQzU0OTBGREEzMjQwNzQwMDA1QwotOjEwNzdFMDAwMEEwMDA4QUEyNDA3MTAwMDBFMDAwN0FFMDAwMDAwMDBERgotOjEwNzdGMDAwMEEwMDA4RjQ4RjkyMDAzQzhDODM0NDJDM0MwNURFQUREQgotOjEwNzgwMDAwMzRCMkJFRUYzQzAxMDgwMEFDMjA1N0U4MTA3MjAwNEZDNAotOjEwNzgxMDAwMDAwMDAwMDAzQzA0NkM2MjM0ODI3OTcwMTQ2MjAwMDgzRAotOjEwNzgyMDAwMjQwNDAwMDI5NzhBMDA1ODk3ODMwMDUwMDIwMDI4MjEwMAotOjEwNzgzMDAwMDE0MzQ4MkIxMTIwMDAxOTI0MDQwMDkyMjQwNDAwMDI2MwotOjEwNzg0MDAwMEUwMDA1RDYyNDA1MDIwMDNDMEI4MDAwQUQ2MjAwMjAyRQotOjEwNzg1MDAwM0MwMTA4MDBBQzIyNTdFODEwNDAwMDBEOEY4RTAwM0MyMAotOjEwNzg2MDAwMjQwQzAwMjgyNDA0MDAwMzkxQ0QwMDEwMzFBODAwRkY0RgotOjEwNzg3MDAwNTUwQzAwMDEyNDA0MDAwMTBFMDAwMDRBMDAwMDAwMDAyNQotOjEwNzg4MDAwMTA0MDAwMDQyNDA0MDA4MzBBMDAwQTZEOEY5MjAwM0MxQgotOjEwNzg5MDAwMjQwNDAwODMzQzA1MDgwMDI0QTU1N0U4MEUwMDA3MDVEMgotOjEwNzhBMDAwMDAwMDAwMDA4RjkyMDAzQzAwMTMzODJCMEEwMDA3RUYwNQotOjEwNzhCMDAwQUY4NzAwNEMwQTAwMDlENjI0MDIwMDEyOEU0NDAwMDg0QgotOjEwNzhDMDAwMEUwMDA2RTEwMDAwMDAwMDBBMDAwOUUyQUUwMjAwMDgxNgotOjEwNzhEMDAwM0MwNTA4MDAyNEE1NTdFODBFMDAwNkQ1MjQwNDAwODdCRgotOjEwNzhFMDAwOEY5MjAwM0MwQTAwMDlGRjAwMTMxMDJCMjQwNDAwMDRBRgotOjEwNzhGMDAwMEUwMDA1RDYyNDA1MDAzMDE0NDAwMDE3MDA0MDM4MjE0MgotOjEwNzkwMDAwOEY5MjAwM0MwQTAwMEE1MjI0MDYwMDgzM0MwNTA4MDBCRQotOjEwNzkxMDAwMjRBNTU3RTgwQTAwMEIzNzI0MDQwMDg3OEU0NDAwMDQ4RQotOjEwNzkyMDAwMEUwMDA2RTEwMDAwMDAwMDBBMDAwQTczQUUwMjAwMDgyMwotOjEwNzkzMDAwM0MwNTA4MDAyNEE1NTdFODBFMDAwNzI0MjQwNDAwODIxMwotOjEwNzk0MDAwOEY5MjAwM0MwQTAwMDlGRjAwMDAxMDIxOEM4MzQ0MkMxOAotOjEwNzk1MDAwMEEwMDBCMTYzQzA0NkM2MjhGOTIwMDNDM0MwODgwMDhDNQotOjEwNzk2MDAwM0MwQzgwMDAyNDBCMDA1MDI0MEEwMDAxQUQ4MjAwMjA1MgotOjEwNzk3MDAwQTEwQjAwMDBBMTBBMDAwMTkyNDkwMDA0QTEwOTAwMTgwRQotOjEwNzk4MDAwOTI0NDAwMDVBMTA0MDAxOTkyNDMwMDA2M0MwNDA4MDAzQgotOjEwNzk5MDAwMjQ4NDU3NkNBMTAzMDAxQTkyNDIwMDA3M0MwMzA4MDA5QwotOjEwNzlBMDAwMjQ2MzU3NjhBMTAyMDAxQjkyNDUwMDA4QTEwNTAwMUMzMgotOjEwNzlCMDAwOTI0NjAwMDlBMTA2MDAxRDkyNUYwMDBBQTExRjAwMUU0OQotOjEwNzlDMDAwOTI1OTAwMEJBMTE5MDAxRjkyNTgwMDBDQTExODAwMjAxOQotOjEwNzlEMDAwOTI1MTAwMERBMTExMDAyMTkyNTAwMDBFQTExMDAwMjIyMQotOjEwNzlFMDAwOTI0RjAwMEZBMTBGMDAyMzkyNEUwMDEwQTEwRTAwMjQxMQotOjEwNzlGMDAwOTI0RDAwMTFBMTBEMDAyNTk2NEMwMDE0QTUwQzAwMjhGNQotOjEwN0EwMDAwOTY0QjAwMTY4RjhBMDA1NDhGOTgwMDVDQTUwQjAwMkFCNQotOjEwN0ExMDAwOTY0OTAwMTgwMDBBMTBDMDI1NDUwMDAxQTUwOTAwMkM1MAotOjEwN0EyMDAwOEU0NjAwMUMwMDQ0QzgyMTAwNDNGODIxMzBBNTAwMEZGOQotOjEwN0EzMDAwQUZFNjAwMDBBRjI3MDAwMDEwQjgwMDAzQUY4NTAwNTQ4OAotOjEwN0E0MDAwMEEwMDBBNTIwMDAwMzAyMTI0QUQwMDAxMzFBODAwMEZDNQotOjEwN0E1MDAwMDAwMDMwMjEwQTAwMEE1MkFGODgwMDVDM0MwNzA4MDA5MQotOjEwN0E2MDAwMjRFNzU3NjgwMDg3OTAyMUFDQzAwMDAwMDAwMDMwMjE1NwotOjEwN0E3MDAwMEEwMDBBMjJBRTQwMDAwMDNDMDQ4MjAxM0MwMzYwMDA4MAotOjEwN0E4MDAwMzQ4MjBFMDJBQzYwM0Q2OEFGODAwMDdDMDNFMDAwMDhFOQotOjEwN0E5MDAwQUM2MjNENkMyN0JERkZFOEFGQjAwMDEwMzA5MEZGRkYzNwotOjEwN0FBMDAwMDAxMDE4NDIyQzYyMDA0MUFGQkYwMDE0MTQ0MDAwMDJDNQotOjEwN0FCMDAwMjQwNDAwODAyNDAzMDA0MDNDMDEwODAwQUMzMDAwNjAzNgotOjEwN0FDMDAwM0MwMTA4MDBBQzIzMDA2NDBFMDAwRTEwMDA2MDI4MjE2OQotOjEwN0FEMDAwMjQ0ODAyQkYyNDA5RkY4MDAxMDkyODI0MDAxMDM5ODBBRQotOjEwN0FFMDAwMDAxMDMwNDA4RkJGMDAxNDhGQjAwMDEwMDBBNzIwMjE3RAotOjEwN0FGMDAwMDA4NjE4MjFBRjgzMDA2NDNDMDEwODAwQUMyNTAwNThDMwotOjEwN0IwMDAwM0MwMTA4MDBBQzI0MDA1QzAzRTAwMDA4MjdCRDAwMTgxRAotOjEwN0IxMDAwMzA4MzAwRkYzMEM2RkZGRjMwRTQwMEZGM0MwODgwMDBFOAotOjEwN0IyMDAwOEQwMjAxQjgwNDQwRkZGRTAwMDM1NDAwMDE0NDM4MjVEMwotOjEwN0IzMDAwM0MwOTYwMDAwMEU5MjAyNTNDMDMxMDAwQUQwNTAxODBGMAotOjEwN0I0MDAwQUQwNjAxODRBRDA0MDE4ODAzRTAwMDA4QUQwMzAxQjg2RgotOjEwN0I1MDAwOEY4NjAwM0MzQzA5NjAxMjM1MjcwMDEwOENDQjAwMDQ1NgotOjEwN0I2MDAwM0MwQzYwMEUzNTg1MDAxMDMxNkEwMDA2MkQ0ODAwMDE3RQotOjEwN0I3MDAwQUNFODAwQzQ4Q0M0MDAwNEFDQTQzMTgwOENDMjAwMDgwMgotOjEwN0I4MDAwOTRDMzAwMDJBQ0EyMzE4NDAzRTAwMDA4QTc4MzAwNzQxMAotOjEwN0I5MDAwOEY4NTAwM0M4Rjg3RkY0MDhGODZGRjQ4OENBRTAwMDRBNgotOjEwN0JBMDAwM0MwRjYwMTIzNUU4MDAxMEFDRUUwMDY4OENBRDAwMDhBOAotOjEwN0JCMDAwQUNFRDAwNkM4Q0FDMDAxMEFDQ0MwMDRDOENBQjAwMEM3MQotOjEwN0JDMDAwQUNDQjAwNDg5NENBMDA1NDNDMDIwODAwOEM0MjAwNDRFQwotOjEwN0JEMDAwMjU0OTAwMDFBNEM5MDA1NDk0QzQwMDU0MzA4M0ZGRkYxOAotOjEwN0JFMDAwMTA2MjAwMTcwMDAwMDAwMDNDMDIwODAwOEM0MjAwNDBCOAotOjEwN0JGMDAwQTRDMjAwNTI4Q0EzMDAxOEFDRTMwMDMwOENBMjAwMTQ4NQotOjEwN0MwMDAwQUNFMjAwMkM4Q0I5MDAxOEFDRjkwMDM4OENCODAwMTQyOAotOjEwN0MxMDAwMjQwNTAwMDFBQ0Y4MDAzNDhEMDYwMEJDNTBDNTAwMTlFNQotOjEwN0MyMDAwOEQwMjAwQjQ4RDAyMDBCOEE0RTIwMDQ4OTRFNDAwNDgzQwotOjEwN0MzMDAwQTRFNDAwNEE5NEU4MDBEQTAzRTAwMDA4MzEwMkZGRkYwMAotOjEwN0M0MDAwM0MwMjA4MDA4QzQyMDAyNEE0QzAwMDU0QTRDMjAwNTI4QwotOjEwN0M1MDAwOENBMzAwMThBQ0UzMDAzMDhDQTIwMDE0QUNFMjAwMkMyMgotOjEwN0M2MDAwOENCOTAwMThBQ0Y5MDAzODhDQjgwMDE0MjQwNTAwMDE1OAotOjEwN0M3MDAwQUNGODAwMzQ4RDA2MDBCQzU0QzVGRkVCOEQwMjAwQjg5MwotOjEwN0M4MDAwOEQwMjAwQjRBNEUyMDA0ODk0RTQwMDQ4QTRFNDAwNEE1MQotOjEwN0M5MDAwOTRFODAwREEwM0UwMDAwODMxMDJGRkZGOEY4NjAwM0MyMQotOjEwN0NBMDAwM0MwNDgwMDA4Q0M5MDAwODhDQzgwMDA4MDAwOTI5QzA2OQotOjEwN0NCMDAwMDAwODM5QzBBQzg3MDAyMDkwQzMwMDA3MzA2MjAwMDQ4MAotOjEwN0NDMDAwMTA0MDAwM0FBRjg1MDA3ODkwQ0IwMDA3MzE2QTAwMDg3OQotOjEwN0NEMDAwMTE0MDAwMzk4Rjg3RkY0NDhDQ0QwMDBDOENDRTAwMTRFRQotOjEwN0NFMDAwMDFBRTYwMkIxMTgwMDAzMjAwMDAwMDAwOENDMjAwMEMzRAotOjEwN0NGMDAwQUNFMjAwNzA4Q0NCMDAxODhGODVGRjQwOEY4OEZGNDg2NgotOjEwN0QwMDAwQUNFQjAwNzQ4Q0NBMDAxMDI0MDJGRkY4QUNBQTAwQzhDNwotOjEwN0QxMDAwOENDOTAwMENBRDA5MDA2MDhDQzQwMDFDQUNBNDAwQzA3MAotOjEwN0QyMDAwOTBFMzAwN0MwMDYyQzgyNEEwRjkwMDdDOTBEODAwMDc5MgotOjEwN0QzMDAwMzMwRjAwMDgxMUUwMDAwNDAwMDAwMDAwOTBFRDAwN0MwQgotOjEwN0Q0MDAwMzVBQzAwMDFBMEVDMDA3QzkwQ0YwMDA3MzFFRTAwMDFDMwotOjEwN0Q1MDAwMTFDMDAwMDkwMDAwMDAwMDkwRTQwMDdDMjQxODAwMDIxQgotOjEwN0Q2MDAwMzQ4MjAwMDJBMEUyMDA3QzkwQTMwMEVDMzA3OTAwRkY5NgotOjEwN0Q3MDAwMTMzODAwMTMyNDA4MDAzNDkwQzkwMDA3MzEyNjAwMDI4QwotOjEwN0Q4MDAwMTBDMDAwMDQwMDAwMDAwMDkwRUIwMDdDMzU2QTAwMDQ4NQotOjEwN0Q5MDAwQTBFQTAwN0M5MEVEMDA3RDMxQUMwMDNGQTBFQzAwN0RCRQotOjEwN0RBMDAwOTRBNzAwREEwM0UwMDAwODMwRTJGRkZGOEY4N0ZGNDQ2QQotOjEwN0RCMDAwMEEwMDBDNEM4Q0MyMDAxNDBBMDAwQzREQUNFMDAwNzBBMAotOjEwN0RDMDAwMEEwMDBDNkVBQ0E4MDBDQzhGOEMwMDNDMjdCREZGRDhGRAotOjEwN0REMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjBBRgotOjEwN0RFMDAwQUZCMTAwMTQ5MThGMDAxNTNDMTM2MDBFMzY3MzAwMTA3NAotOjEwN0RGMDAwMzFFQjAwMEZBMzhCMDA4MDhEOEYwMDA0OEQ4QjAwMDg2QQotOjEwN0UwMDAwOTU5RjAwMTI5NTk5MDAxMDk1ODQwMDFBOTU5ODAwMUU3MAotOjEwN0UxMDAwOTU4RTAwMUMzM0VERkZGRjMzMkFGRkZGMzA4OUZGRkZGMwotOjEwN0UyMDAwMzMwOEZGRkYzMUM3RkZGRjNDMDEwODAwQUMyRDAwMjRFMQotOjEwN0UzMDAwM0MwMTA4MDBBQzI5MDA0NDNDMDEwODAwQUMyQTAwNDA4OQotOjEwN0U0MDAwQUU2ODMxNzhBRTY3MzE3QzkxODUwMDE1OTU5MTAwMTY0QQotOjEwN0U1MDAwM0MxMjYwMTIzNjUyMDAxMDMwQTIwMEZGMzIzMEZGRkY5OQotOjEwN0U2MDAwQUU2MjMxODhBRTUwMDBCNDkxODMwMDE0OTU5RjAwMTgyMwotOjEwN0U3MDAwMjQwNjAwMDEwMDY2QzgwNDMzRjhGRkZGQUU1OTAwQjhCRAotOjEwN0U4MDAwQUU1ODAwQkM5MThFMDAxNEFGOEYwMDY4M0MwODYwMDZBRAotOjEwN0U5MDAwMzFDRDAwRkZBRTREMDBDMDkxOEEwMDE1OTU4NDAwMEVEMwotOjEwN0VBMDAwM0MwNzYwMEEzMTQ5MDBGRkFGOEIwMDZDMzA4NEZGRkY1NAotOjEwN0VCMDAwQUU0OTAwQzgzNTExMDAxMDBFMDAwQkI1MzRGMDA0MTBBNwotOjEwN0VDMDAwM0MwMjA4MDA4QzQyMDA2MDNDMDMwODAwOEM2MzAwNjRBNAotOjEwN0VEMDAwM0MwNjA4MDA4Q0M2MDA1ODNDMDUwODAwOENBNTAwNUNEOAotOjEwN0VFMDAwOEY4NDAwNjQ4RkJGMDAyMEFFMjMwMDRDQUU2NTMxOUNCMAotOjEwN0VGMDAwQUUwMzAwNTRBRTQ1MDBEQ0FFNjIzMUEwQUU2MzMxQTRFNwotOjEwN0YwMDAwQUU2NjMxOThBRTIyMDA0ODhGQjMwMDFDQUUwMjAwNTAxRQotOjEwN0YxMDAwOEZCMTAwMTRBRTQyMDBFMEFFNDMwMEU0QUU0NjAwRDg5QwotOjEwN0YyMDAwOEZCMDAwMTA4RkIyMDAxODBBMDAwNEJFMjdCRDAwMjhEMQotOjEwN0YzMDAwOTc4NTAwNzY5NzgzMDA2MDI3QkRGRkU4QUZCMDAwMTBGQgotOjEwN0Y0MDAwMDBBMzEwMkJBRkJGMDAxNDI0MDQwMDA1OEY5MDAwM0M0OQotOjEwN0Y1MDAwMTA0MDAwNTUyNDA5MDAwMjBFMDAwNUQ2OEY4NTAwNjRFQwotOjEwN0Y2MDAwQUY4MjAwNzgyNDA0MDAwMzEwNDAwMDRGMjQwOTAwMDI2RgotOjEwN0Y3MDAwM0MwNjgwMDAwRTAwMDA0QUFDQzIwMDIwMjQwNzAwMDEyRAotOjEwN0Y4MDAwMjQwODIwMDAxMDQwMDA0RDI0MDQwMDA1OTc4RTAwNzY0MAotOjEwN0Y5MDAwOEY4QUZGNDQyNDA5MDA1MDI1QzUwMDAxQTc4NTAwNzY3QgotOjEwN0ZBMDAwQTE0OTAwMDAzQzBEMDgwMDhEQUQwMDY0MjQwMzgwMDA1MQotOjEwN0ZCMDAwOEY4NEZGNDAwMDBENjYwMEFENEMwMDE4QTU0MDAwMDYwMAotOjEwN0ZDMDAwOTU0QjAwMEE4Rjg1RkY0ODI0MDJGRjgwMDE2MzMwMjQwRgotOjEwN0ZEMDAwQTU0NjAwMEE5MTVGMDAwQTAwMDA0ODIxMDNFMkM4MjU3NwotOjEwN0ZFMDAwQTE1OTAwMEFBMEEwMDAwOEExNDAwMDRDQTA4MDAwQzUzMwotOjEwN0ZGMDAwOTYxODAwMDI5NzgzMDA3NDNDMDIwMDA0QTQ5ODAwREFFQgotOjEwODAwMDAwOTYwRjAwMDIyNDE4RkZCRjI1RUUyNDAxQTQ4RTAwQUVCNwotOjEwODAxMDAwOEUwRDAwMDRBQ0FEMDA0NDhFMEMwMDA4QUNBQzAwNDBFQQotOjEwODAyMDAwQTRBMDAwNTBBNEEwMDA1NDhFMEIwMDBDMjQwQzAwMzAxRgotOjEwODAzMDAwQUM4QjAwMjg4RTA2MDAxMEFDODYwMDI0QTQ4MDAwM0U4NQotOjEwODA0MDAwQTQ4NzAwNEVBNDg3MDA1MEE0ODMwMDNDQUQ0MjAwNzQ3NgotOjEwODA1MDAwQUM4ODAwQzhBQ0E4MDA2MEEwODcwMEVDOTA5RjAwQzQ2QQotOjEwODA2MDAwMzNGOTAwN0ZBMDk5MDBDNDkwOTAwMEM0MDIxODc4MjRDRQotOjEwODA3MDAwQTA4RjAwQzQ5MTRFMDA3QzM1Q0QwMDAxQTE0RDAwN0M0NQotOjEwODA4MDAwOTM4QjAwODBBRDQ4MDA3MEFDOEMwMENDQTA4QjAwQzZGOAotOjEwODA5MDAwOEY4ODAwNkM4Rjg3MDA2OEFDODgwMEI0QUM4NzAwQjgwQwotOjEwODBBMDAwQTU0MDAwNzhBNTQwMDA3QThGQkYwMDE0OEZCMDAwMTA2MwotOjEwODBCMDAwMDEyMDEwMjEwM0UwMDAwODI3QkQwMDE4OEY4NTAwNzhGQgotOjEwODBDMDAwMEUwMDA2NjY4Rjg2MDA2NDBBMDAwRDNBMjQwOTAwMDIzRAotOjEwODBEMDAwMjdCREZGRTBBRkIwMDAxMDhGOTAwMDNDQUZCMTAwMTQ5RgotOjEwODBFMDAwQUZCRjAwMTg4RTA5MDAwNDBFMDAwNDhCMDAwOTIxQzBFOAotOjEwODBGMDAwOEUwODAwMDQ4Rjg0RkY0MDhGODJGRjQ4MDAwODM5QzAzQgotOjEwODEwMDAwM0MwNjgwMDBBQ0M3MDAyMDk0ODUwMERBOTA0MzAwMTM0MQotOjEwODExMDAwMTQ2MDAwMUMzMEIxRkZGRjhGOENGRjQ0OTE4QjAwMDg2RQotOjEwODEyMDAwMzE2QTAwNDAxNTQwMDAwQjAwMDAwMDAwOEUwRDAwMDQ3NQotOjEwODEzMDAwMDIyMDMwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBDMwotOjEwODE0MDAwMjQwNDAwMjIwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRDRBRAotOjEwODE1MDAwMjdCRDAwMjAwRTAwMDA2MTAwMDAwMDAwOEUwRDAwMDQwRAotOjEwODE2MDAwMDIyMDMwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA5MwotOjEwODE3MDAwMjQwNDAwMjIwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRDQ3RAotOjEwODE4MDAwMjdCRDAwMjAwRTAwMDA1OTAwMDAwMDAwOEUwRDAwMDRFNQotOjEwODE5MDAwMDIyMDMwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA2MwotOjEwODFBMDAwMjQwNDAwMjIwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRDQ0RAotOjEwODFCMDAwMjdCRDAwMjAyN0JERkZFMEFGQjIwMDE4MzA5MkZGRkZCRgotOjEwODFDMDAwQUZCMDAwMTBBRkJGMDAxQ0FGQjEwMDE0MTI0MDAwMUVEMgotOjEwODFEMDAwMDAwMDgwMjE4Rjg2MDAzQzhDQzUwMDAwMjQwMzAwMDYyRgotOjEwODFFMDAwMDAwNTNGMDIwMDA1MTQwMjMwRTQwMDA3MTQ4MzAwMTY2NgotOjEwODFGMDAwMzA0NTAwRkYyQ0E4MDAwNjExMDAwMDQwMDAwNTU4ODAwMwotOjEwODIwMDAwM0MwQzA4MDAyNThDNTRFQzAxNkM1MDIxOEQ0OTAwMDA3OQotOjEwODIxMDAwMDEyMDAwMDgwMDAwMDAwMDhGOEUwMDdDMjQwRDAwMDE2QQotOjEwODIyMDAwMTFDRDAwNTAyNDAyMDAwMkFGODIwMDdDMjYwOTAwMDExQgotOjEwODIzMDAwMzEzMEZGRkYyNEM4MDAyMDAyMTIyMDJCMDEwMDMwMjEyMgotOjEwODI0MDAwMTQ4MEZGRTVBRjg4MDAzQzAyMDAxMDIxOEZCRjAwMUNBNgotOjEwODI1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgzNwotOjEwODI2MDAwMjdCRDAwMjA5Mzg3MDA2MjU0RTAwMDM0MDAwMDMwMjFENQotOjEwODI3MDAwMEUwMDBDODIwMDAwMDAwMDhGODYwMDNDMEEwMDBEOUE2MAotOjEwODI4MDAwMjQwMjAwMDE4Rjg3MDA3QzI0MDUwMDAyMTBFNTAwMzFFNAotOjEwODI5MDAwMjQwNDAwMTMwMDAwMjgyMTAwMDAzMDIxMjQwNzAwMDFERAotOjEwODJBMDAwMEUwMDBCRDQwMDAwMDAwMDBBMDAwRDlCOEY4NjAwM0NERQotOjEwODJCMDAwOEY4MzAwN0MyNDAyMDAwMjE0NjJGRkY2MjQwNDAwMTI2MwotOjEwODJDMDAwMEUwMDBDMzcwMDAwMDAwMDhGODUwMDc4MDA0MDMwMjE0MAotOjEwODJEMDAwMjQwNDAwMTIwRTAwMEJENDAwMDAzODIxMEEwMDBEOUI2QwotOjEwODJFMDAwOEY4NjAwM0M4RjgzMDA3QzI0MTEwMDAzMTA3MTAwMjlDRAotOjEwODJGMDAwMjQxRjAwMDIxMDdGRkZDRTI2MDkwMDAxMjQwNDAwMTA3NQotOjEwODMwMDAwMDAwMDI4MjEwMDAwMzAyMTBBMDAwREI4MjQwNzAwMDFEOAotOjEwODMxMDAwOEY5MTAwN0MyNDA2MDAwMjE2MjZGRkY5MjQwNDAwMTAyOQotOjEwODMyMDAwMEUwMDBDREMwMDAwMDAwMDE0NDAwMDIzOEY5ODAwM0M3RAotOjEwODMzMDAwOEY4NjAwM0MwQTAwMEQ5QTI0MDIwMDAzMjQwNDAwMTRENgotOjEwODM0MDAwMEUwMDBCRDQwMDAwMjgyMThGODYwMDNDMEEwMDBEOUFGNQotOjEwODM1MDAwMjQwMjAwMDIwRTAwMEQ0NDAwMDAwMDAwMEEwMDBEOUJFNAotOjEwODM2MDAwOEY4NjAwM0MwRTAwMEJFNDAwMDAwMDAwMjQxOTAwMDI4MAotOjEwODM3MDAwMjQwNDAwMTQwMDAwMjgyMTAwMDAzMDIxMDAwMDM4MjFDRQotOjEwODM4MDAwQUY5OTAwN0MwRTAwMEJENDAwMDAwMDAwMEEwMDBEOUI4QQotOjEwODM5MDAwOEY4NjAwM0MwRTAwMEJGNDAwMDAwMDAwOEY4NTAwNzhGMwotOjEwODNBMDAwMjQxOTAwMDIwMDQwMzAyMTI0MDQwMDEwMDAwMDM4MjE2QwotOjEwODNCMDAwMEEwMDBERjFBRjk5MDA3QzAwNDAzODIxMjQwNDAwMTAyMAotOjEwODNDMDAwOTcwRjAwMDIwMDAwMjgyMTBFMDAwQkQ0MzFFNkZGRkZCQQotOjEwODNEMDAwOEY4NjAwM0MwQTAwMEQ5QkFGOTEwMDdDOEY4NEZGNDQ4OAotOjEwODNFMDAwM0MwNzdGRkYzNEU2RkZGRjhDODUwMDE4MjQwMjAwMDE2NAotOjEwODNGMDAwMDBBNjE4MjRBQzgzMDAxODAzRTAwMDA4QTA4MjAwMDU0MgotOjEwODQwMDAwMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjExNwotOjEwODQxMDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjE1MwotOjEwODQyMDAwMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjFENQotOjEwODQzMDAwMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkY0RgotOjEwODQ0MDAwMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDRCNwotOjEwODQ1MDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZCNAotOjEwODQ2MDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkZCNgotOjEwODQ3MDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDg3MQotOjEwODQ4MDAwMDAwMDAwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDA4NAotOjEwODQ5MDAwMjdCREZGRThBRkIwMDAxMDAwODA4MDIxQUZCRjAwMTRGRgotOjEwODRBMDAwMEUwMDBFMzEwMEEwMjAyMTAwNTA0ODIxMjQwQUZGODAzOAotOjEwODRCMDAwOEZCRjAwMTQ4RkIwMDAxMDAxMkEzMDI0MzEyNzAwN0ZCNQotOjEwODRDMDAwM0MwODgwMEEzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjU1MwotOjEwODREMDAwM0MwMzgwMDAyN0JEMDAxOEFDNjUwMDI0QUY4MjAwMjA1QgotOjEwODRFMDAwQUM0MDAwMDBBQzY1MDAyNDAzRTAwMDA4QUM0MDAwNDA1NAotOjEwODRGMDAwM0MwRDA4MDA4REFEMDA1ODAwMDU2MTgwMjQwQUZGODAwNgotOjEwODUwMDAwMDFBNDU4MjEwMTZDNDgyMTAxMkEzMDI0MzEyNzAwN0YyMQotOjEwODUxMDAwM0MwODgwMEMzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjUwMAotOjEwODUyMDAwM0MwMzgwMDBBQzY1MDAyOEFGODIwMDFDMDNFMDAwMDgxQgotOjEwODUzMDAwQUM0MDAwMjQzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjg4RgotOjEwODU0MDAwMDQ0MEZGRkUzQzA4NjAxNTAwQTgzODI1M0MwMzEwMDBERAotOjEwODU1MDAwQUNDNDAxODBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDg1MgotOjEwODU2MDAwQUNDMzAxQjgzQzBEMDgwMDhEQUQwMDU4MDAwNTYxODAxQQotOjEwODU3MDAwMjQwQUZGODAwMUE0NTgyMTAxNkM0MDIxMDEwQTQ4MjRFQgotOjEwODU4MDAwMDAwOTMxNDAzMTA3MDA3RjAwQzcyODI1M0MwNDIwMDA0NgotOjEwODU5MDAwMDBBNDE4MjUzQzAyODAwMEFDNDMwODMwMDNFMDAwMDgyQQotOjEwODVBMDAwQUY4MDAwMUMyN0JERkZFOEFGQjAwMDEwMDA4MDgwMjEyNQotOjEwODVCMDAwQUZCRjAwMTQwRTAwMEUzMTAwQTAyMDIxMDA1MDQ4MjE1MgotOjEwODVDMDAwMjQwQkZGODAwMTJCNTAyNDAwMEEzOTQwMzEyODAwN0YwMgotOjEwODVEMDAwM0MwNjIwMDA4RkJGMDAxNDhGQjAwMDEwMDBFODI4MjU1MwotOjEwODVFMDAwMzRDMjAwMDEwMEEyMTgyNTNDMDQ4MDAwMjdCRDAwMThGOQotOjEwODVGMDAwQUM4MzA4MzAwM0UwMDAwOEFGODAwMDIwM0MwNTgwMDgxMQotOjEwODYwMDAwOENBNzAwNjAzQzA2ODAwODAwODcxMDJCMTQ0MDAwMTFFNgotOjEwODYxMDAwMkM4MzQwMDA4Q0E4MDA2MDJEMDM0MDAwMTA2MDAwMEZFOAotOjEwODYyMDAwMjQwMzQwMDA4Q0M5MDA2MDAwODkyODJCMTRBMDAwMDI5QwotOjEwODYzMDAwMDA4MDE4MjE4Q0MzMDA2MDAwMDM1QTQyMDAwQjMwODA3OAotOjEwODY0MDAwM0MwQTA4MDAyNTRBNTU0MDAwQ0EyMDIxMDNFMDAwMDhFMgotOjEwODY1MDAwOEM4MjAwMDAxNDYwRkZGMzI0MDM0MDAwMDAwMzVBNDJBMAotOjEwODY2MDAwMDAwQjMwODAzQzBBMDgwMDI1NEE1NTQwMDBDQTIwMjFGMgotOjEwODY3MDAwMDNFMDAwMDg4QzgyMDAwMDNDMDU4MDA4OTBBNjAwMDhGQQotOjEwODY4MDAwOTM4NDAwOTAyNEMyMDAwMTMwNDIwMEZGMzA0MzAwN0ZGOQotOjEwODY5MDAwMTA2NDAwMEMwMDAyMzgyN0EwQTIwMDA4M0MwNDgwMDBFRgotOjEwODZBMDAwOEM4NTAxNzgwNEEwRkZGRThGOEEwMDg4MjQwOTAwMDJDRgotOjEwODZCMDAwM0MwODEwMDBBQzhBMDE0MEEwODkwMTQ0MDNFMDAwMDg5NgotOjEwODZDMDAwQUM4ODAxNzgwQTAwMEVCNjMwRTIwMDgwMjdCREZGQzhGMgotOjEwODZEMDAwM0MwNTgwMDgzNEE0MDA4MEFGQkYwMDM0QUZCRTAwMzAzQQotOjEwODZFMDAwQUZCNzAwMkNBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjA2MAotOjEwODZGMDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBMAotOjEwODcwMDAwOTQ4MzAwNzg5NDgyMDA3QTEwNDMwMENEMjQwNUZGRkYwMwotOjEwODcxMDAwM0MxRTgwMDgwMDgwQjgyMTBBMDAwRjkyM0MxNjgwMDBBMQotOjEwODcyMDAwMTA4QTAwQzg4RkJGMDAzNDhGODQwMDg4M0MwQjA4MDA3QgotOjEwODczMDAwOEQ2QjAwNUMyNDBBRkY4MDNDMDc4MDBFMDE2NDQwMjFBMQotOjEwODc0MDAwMDEwQTQ4MjRBRUM5MDAyQzk2RTYwMDdBMzEwMjAwN0Y2NwotOjEwODc1MDAwMDA0NzE4MjEzMEM1N0ZGRjAwMDU4MDQwMDIwM0E4MjE5MwotOjEwODc2MDAwOTZCRjAwMDAzQzE5MDgwMDhGMzkwMDU4MjQwRkZGODA4NQotOjEwODc3MDAwMzNGNTNGRkYwMzI0ODgyMTAwMTVDMTgwMDIzODkwMjE4MgotOjEwODc4MDAwMDI0RjU4MjQzQzBDMDEwMDAxNkM1MDI1MzI0RTAwN0ZGMgotOjEwODc5MDAwM0MwRDgwMEMwMUNEOTAyMTAyODAyODIxMEUwMDBFMzQ2QQotOjEwODdBMDAwQUVDQTAwMjg4RTQ4MDAxMDhFNDkwMDMwOEY4NjAwMjAwNwotOjEwODdCMDAwMjQwMjAwMDIwMTA5MzgyM0FFNDcwMDEwQTBDMjAwMDBDNQotOjEwODdDMDAwOTZFMzAwNUM4RTQ0MDAzMDhGOTEwMDIwMEUwMDBFOEZFNwotOjEwODdEMDAwMzA3MEZGRkYwMDAyMkI4MDAyMDVDODI1M0MxRjQyMDBCRAotOjEwODdFMDAwMDMzRkMwMjVBRTM4MDAwNDhFNTEwMDA0OEY4NzAwMjA1RgotOjEwODdGMDAwOEU0RjAwMDAyNDA4MDAwOEFDRjEwMDFDQUNFRjAwMThGQwotOjEwODgwMDAwQUNFMDAwMENBQ0UwMDAxMDkyNTAwMDBBMjQwNjAwMDUxOQotOjEwODgxMDAwMjQwNUMwMDAzMjBFMDBGRkE0RUUwMDE0OTY0RDAwMDg5RgotOjEwODgyMDAwMDJFMDk4MjFBNEVEMDAxNjkyNEMwMDBBM0MwRDgwMDg0RAotOjEwODgzMDAwMzE4QjAwRkZBNEVCMDAyMDk2NDQwMDA4MzVBQzAxMDAwQQotOjEwODg0MDAwQTRFNDAwMjJBQ0UwMDAyNDkyNEEwMDBCMzE0OTAwRkY2RQotOjEwODg1MDAwQTRFOTAwMDJBMEU4MDAwMThFNDIwMDMwOEY4MzAwMjBDRQotOjEwODg2MDAwMjQwOEZGQkZBQzYyMDAwOEEwNjYwMDMwOEY4RTAwMjA5NQotOjEwODg3MDAwMjQwM0ZGREY5NURGMDAzMjAzRTVDODI0MDMzNUMwMjU1QwotOjEwODg4MDAwQTVEODAwMzI5MUQxMDAzMjMyMkYwMDNGMzVGMDAwNDBBMAotOjEwODg5MDAwQTFEMDAwMzI4Rjg5MDAyMEFEMjAwMDM0OEQ4QjAwQzAyNAotOjEwODhBMDAwQUQyQjAwMzg5MTI0MDAzQzNDMEI3RkZGMzA4QTAwN0ZDOQotOjEwODhCMDAwQTEyQTAwM0M4Rjg2MDAyMDM1NjRGRkZGOTBDNzAwM0M1MgotOjEwODhDMDAwMDBFODEwMjRBMEMyMDAzQzhGOTkwMDIwOTMyNTAwM0NCMgotOjEwODhEMDAwMDBBM0Y4MjRBMzNGMDAzQzhFNTgwMDM0OEY4QzAwMjA2NgotOjEwODhFMDAwQUQ5ODAwNDA4RTRGMDAyQzhFNTEwMDMwMDFGMTgwMjM1NgotOjEwODhGMDAwQUQ5MDAwNDQ5MThFMDA0ODMxQ0QwMDdGQTE4RDAwNDg5RAotOjEwODkwMDAwOEY4NTAwMjA4RTRBMDAzMDhDQTkwMDQ4MDE0NDQwMjQwNQotOjEwODkxMDAwMDEzNjM4MjQwMEU4MzAyNUFDQTYwMDQ4OTI0MjAwMEEwRgotOjEwODkyMDAwQTBBMjAwNEM5NjQzMDAwODhGOUYwMDIwQTdFMzAwNEVCMgotOjEwODkzMDAwOEU1MDAwMzA4RTQ0MDAzMDBFMDAwMkYwOEZDNTAwNjA3MwotOjEwODk0MDAwOTJGMTAwN0MwMDAyQzE0MDAwMDJDOTAwMDMxOTc4MjFBNQotOjEwODk1MDAwMzIyRTAwMDIwMDQwMjgyMTExQzAwMDAzMDIwRjgwMjFBNgotOjEwODk2MDAwMDAwMjIwODAwMjA0ODAyMTkyNkQwMDdDMzFBQzAwMDQ2MgotOjEwODk3MDAwMTE4MDAwMDIwMDA1NzA4MDAyMEU4MDIxOEU0NDAwMzBCQwotOjEwODk4MDAwOEY4NzAwMjAyNDA1ODAwMDMwOEIwMDAzMDAwQjUwMjNDQwotOjEwODk5MDAwMzE0OTAwMDMwMjA5NDAyMUFDRTgwMDM0OTY2NDAwN0FCMgotOjEwODlBMDAwOTY2MjAwN0E5NjcwMDA3QTMwNDY3RkZGMjRDMzAwMDFGOQotOjEwODlCMDAwMzA3RjdGRkYwMjA1QzgyNDAzM0ZDMDI1QTY3ODAwN0FEOAotOjEwODlDMDAwOTY3MTAwN0EzQzEyMDgwMDhFNTIwMDYwMzIyRjdGRkZCMQotOjEwODlEMDAwMTFGMjAwMjgwMDAwMDAwMDhGODQwMDg4MEUwMDBFNjk0QwotOjEwODlFMDAwMDJBMDI4MjE4Rjg0MDA4ODBFMDAwRTc5MDI4MDI4MjFBMQotOjEwODlGMDAwMEUwMDBFQUUwMDAwMDAwMDk2RjMwMDc4OTZGNDAwN0FBOAotOjEwOEEwMDAwMTI5MzAwMEYwMDAwMjgyMTNDMDk4MDA4MzUyNDAxMDA0MgotOjEwOEExMDAwOTNDODAwMDg5MDg3MDBDNTMxMTQwMDdGMzBFNDAwRkY0MAotOjEwOEEyMDAwMDI4NDMwMkIxNEMwRkYzRTI2OEEwMDAxOTM4RDAwOTBGMwotOjEwOEEzMDAwMjY4QjAwMDEwMDhENjAyMTE1OEJGRjNDOEY4NDAwODgwMAotOjEwOEE0MDAwOEZCRjAwMzQ4RkJFMDAzMDhGQjcwMDJDOEZCNjAwMjg0OAotOjEwOEE1MDAwOEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg5NAotOjEwOEE2MDAwOEZCMTAwMTQ4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDhBNwotOjEwOEE3MDAwMjdCRDAwMzg5NjdGMDA3QTAzRTVDODI0QTY3OTAwN0FERQotOjEwOEE4MDAwOTI3ODAwN0E5MjZFMDA3QTMzMTEwMEZGMDAxMTc5QzI1OQotOjEwOEE5MDAwMDAwRjkwMjcwMDEyNjlDMDMxQ0MwMDdGMDE4RDI4MjU3RQotOjEwOEFBMDAwQTI2NTAwN0EwQTAwMEY4NzhGODQwMDg4M0MwMzgwMDA0QgotOjEwOEFCMDAwMzA4NEZGRkYzMEE1RkZGRkFDNjQwMDE4QUM2NTAwMUNEQwotOjEwOEFDMDAwMDNFMDAwMDg4QzYyMDAxNDI3QkRGRkE4M0MwNjgwMDg2NAotOjEwOEFEMDAwQUZCRjAwNTRBRkJFMDA1MEFGQjcwMDRDQUZCNjAwNDhCOAotOjEwOEFFMDAwQUZCNTAwNDRBRkI0MDA0MEFGQjMwMDNDQUZCMjAwMzgwNAotOjEwOEFGMDAwQUZCMTAwMzRBRkIwMDAzMDM0QzgwMTAwOTEwNTAwQzVGQgotOjEwOEIwMDAwOTBDNzAwMDgzMDg0RkZGRjMwQTUwMEZGMzBFMjAwN0ZFRgotOjEwOEIxMDAwMDA0NTE4MkFBRkE0MDAxMEE3QTAwMDE4MTA2MDAwOUMwMAotOjEwOEIyMDAwQUZBMDAwMTQ5MENBMDAwODMxNDkwMDdGMDBBOTMwMjM4QgotOjEwOEIzMDAwMjRENEZGRkYwMDE0ODgyQjhGQjMwMDEwMDAxMzkwMkI1OAotOjEwOEI0MDAwMDIzMjgwMjQ1MjAwMDA4NThGQjQwMDE0M0MwMzgwMDg1OAotOjEwOEI1MDAwOTQ3OTAwNTI5NDdFMDA1MDhGQjYwMDEwMDMzRUMwMjNEQgotOjEwOEI2MDAwMDAxOEJDMDAwMDE3MTQwMzAwMTZGQzAwMDJDMkE4MkE1QgotOjEwOEI3MDAwMTZBMDAwMDIwMDFGMkMwMzAwNDAyODIxMDAxNDNDMDAxNgotOjEwOEI4MDAwMDAwNzI0MDMwMEE0MTAyQTU0NDAwMDAxMDBBMDIwMjE2MwotOjEwOEI5MDAwMjg4NTAwMDkxNEEwMDAwMjAwODBCMDIxMjQxNjAwMDhENgotOjEwOEJBMDAwM0MwQzgwMDg4RDg2MDA0ODAwMTY1OTgwOEQ4ODAwNEM0QQotOjEwOEJCMDAwM0MwMzgwMDAzMTY5RkZGRjNDMEEwMDEwMDEyQTIwMjU5OAotOjEwOEJDMDAwMzQ3MDA0MDBBQzY2MDAzOEFGOTAwMDhDQUM2ODAwM0M5OAotOjEwOEJEMDAwQUM2NDAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwOEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwOEJGMDAwMDAwMDAwMDA4QzZFMDAwMDMxQ0QwMDIwMTFBMEZGRkRCMAotOjEwOEMwMDAwMDAxNjkwMkEwMjUxNzgyNDExRTAwMDM2MDAwMEI4MjFBNQotOjEwOEMxMDAwM0MxNTgwMDAzQzExODAwODkyMjIwMDA4OEVBNDAxMDBCRgotOjEwOEMyMDAwMDAwMDg4MjEzMDVFMDA3RjBFMDAwRTM0MDNDMDI4MjEzMgotOjEwOEMzMDAwOEUxRjAwMTA4RUE0MDEwMDMzRjkzRkZGMDMyMDI4MjE2RQotOjEwOEM0MDAwMEUwMDBFNENBRkI5MDAxQzkyMTgwMDAwMzMwMjAwM0YxQQotOjEwOEM1MDAwMkM1MzAwMDg1MjYwMDAwRDAwMDA4MDIxMjQwNTAwMDEwMwotOjEwOEM2MDAwMDA0NTE4MDQzMDY3MDA1RDE0RTAwMEIxOEY5MjAwOEM1RAotOjEwOEM3MDAwMzA2NDAwMDIxNDgwMDE0RDhGODYwMDhDMzA2ODAwODBDMwotOjEwOEM4MDAwNTUwMDAwNEE5NjE4MDAxMjAwMDA4MDIxOEVBNDAxMDBCMQotOjEwOEM5MDAwMEUwMDBFNjk4RkE1MDAxQzhFQTQwMTAwMEUwMDBFNzkzNwotOjEwOENBMDAwMDNDMDI4MjExMjAwMDA0RjNDMDc4MDA4MjZFNDAwMDE4MQotOjEwOENCMDAwOEY4QzAwOEMwMDA0QkMwMDAyOTFBMDIzMDAxN0JDMDMyMQotOjEwOENDMDAwMDJGNjMwMkEwMDE0ODgyQjI1OUYwMDQwMjQxMjAwMDE1MAotOjEwOENEMDAwMDBEMUYwMjQwM0UwODAyMUFGOUYwMDhDMTdDMEZGQ0RBRQotOjEwOENFMDAwQUZCMjAwMTQzQzA3ODAwODk0RTgwMDUwOEZCMzAwMTAyNgotOjEwOENGMDAwM0MwNTgwMDAwMkU4MTAyMTNDMEQwMDIwQTRFMjAwNTA1OQotOjEwOEQwMDAwQUNBRDAwMzA5NEY1MDA1MDk0RjYwMDUyMDI3NzUwMjMzOQotOjEwOEQxMDAwMzE0OUZGRkYxMkQ1MDA0MUFGQTkwMDEwOENGNjAwNEM3RAotOjEwOEQyMDAwMDAxNzQ5ODA4Q0Y3MDA0ODAyQzlGODIxMDAwMDIwMjE3MwotOjEwOEQzMDAwMDNFOTMwMkIwMkU0NjAyMTAxODY4MDIxQUNGRjAwNEM2NgotOjEwOEQ0MDAwQUNGMDAwNDg4RkIzMDAxMDAwMTM5MDJCMDIzMjgwMjQ0NwotOjEwOEQ1MDAwMTYwMEZGN0YzQzAzODAwODhGQjQwMDE0OEZCRjAwNTRCRgotOjEwOEQ2MDAwOEZCRTAwNTAzQTgyMDAwMThGQjcwMDRDOEZCNjAwNDg4QQotOjEwOEQ3MDAwOEZCNTAwNDQ4RkI0MDA0MDhGQjMwMDNDOEZCMjAwMzhGMQotOjEwOEQ4MDAwOEZCMTAwMzQ4RkIwMDAzMDAzRTAwMDA4MjdCRDAwNThEOQotOjEwOEQ5MDAwOTBDRjAwMDg5MzhDMDA5MDMxRUUwMDdGMDBBRTY4MjNFNgotOjEwOERBMDAwMDE4RDU4MjEwQTAwMEZERDI1NzRGRkZGOEY4NDAwODg5NAotOjEwOERCMDAwMjQxMDAwMDFBN0I4MDAxODBFMDAwRTVEOTdBNTAwMTgzQQotOjEwOERDMDAwOEVBNDAxMDAwRTAwMEU2OThGQTUwMDFDOEVBNDAxMDA2OAotOjEwOEREMDAwMEUwMDBFNzkwM0MwMjgyMTE2MDBGRkI1MjZFNDAwMDExRAotOjEwOERFMDAwM0MwNzgwMDg5NEU4MDA1MDhGQjMwMDEwM0MwNTgwMDBEOQotOjEwOERGMDAwMDJFODEwMjEzQzBEMDAyMEE0RTIwMDUwQUNBRDAwMzA5MAotOjEwOEUwMDAwOTRGNTAwNTA5NEY2MDA1MjAyNzc1MDIzMzE0OUZGRkY0OQotOjEwOEUxMDAwMDAxNDg4MkIxNkQ1RkZDMUFGQTkwMDEwOTRGRTAwNTQ5MgotOjEwOEUyMDAwOENGMDAwNDQzM0Q4RkZGRTAwMTg3OEMwMDIwRjcwMjE4OAotOjEwOEUzMDAwQUNBRTAwM0M4Q0Y5MDA0NDhDQTMwMDNDMDMyMzU4MjNDNwotOjEwOEU0MDAwMTk2MDAyRUEwMDAwMDAwMDhDRjIwMDQwMjY0MjAwMDE5NgotOjEwOEU1MDAwQUNBMjAwMzgzQzA1MDA1MDM0QTcwMDEwM0MwMzgwMDA1MQotOjEwOEU2MDAwQUM2NzAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwOEU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwOEU4MDAwMDAwMDAwMDA4QzdGMDAwMDMzRTYwMDIwMTBDMEZGRkREMgotOjEwOEU5MDAwM0MxMDgwMDg5NjBEMDA1NDNDMTc4MDAwM0MwNjgwMDg2QQotOjEwOEVBMDAwMzFCMzAwMDEwMDEzNTBDMDAxNTdCMDIxOEVDOTA0MDAzNgotOjEwOEVCMDAwM0MwNzA4MDA4Q0U3MDA0NDNDMDQwMDIwQUNDOTAwNDg5MwotOjEwOEVDMDAwOEVENTA0MDQyNDBDMDAwMUFDRDUwMDRDMTBFQzAyRDA2QgotOjEwOEVEMDAwQUVFNDAwMzA5NjE4MDA1MjNDMDUwODAwOENBNTAwNDAxNgotOjEwOEVFMDAwMDBCODc4MjFBNjBGMDA1Mjk2MEUwMDU0MjVDMzAwMDE0OQotOjEwOEVGMDAwQTYwMzAwNTQ5NjE5MDA1NDMzMjRGRkZGNTQ4N0ZGMEYzNAotOjEwOEYwMDAwOEZCMzAwMTAzMEE1RkZGRjBFMDAwRkJCQTYwMDAwNTQ2QQotOjEwOEYxMDAwM0MwNTA4MDA4Q0E1MDAyNDk2MTIwMDUyMDA0NTM4MjMxOQotOjEwOEYyMDAwMDI0N0YwMjNBNjFFMDA1MjBBMDAwRkRGOEZCMzAwMTA4NQotOjEwOEYzMDAwOEY5MzAwMUMzQzA3MDA4MDhFNDQwMDI4M0MxRkZGRUZFRAotOjEwOEY0MDAwMzdGOUZGRkZBRTY0MDAwMDhFNDIwMDI0QTI2MDAwMEFFMQotOjEwOEY1MDAwM0MwRkZGOUZBRTYyMDAwNDkyNDUwMDJDMzVFRUZGRkZGMAotOjEwOEY2MDAwM0MwQzAwNDBBMjY1MDAwQzhFNzEwMDBDQTI2NTAwMEI0OQotOjEwOEY3MDAwM0MwNjAwRkYwMjI3QzAyNTAzMTk2ODI0MDFBRTU4MjRDRgotOjEwOEY4MDAwMDE2QzUwMjVBRTZBMDAwQzhFNDkwMDA0QUU2MDAwMThEQQotOjEwOEY5MDAwMzREMEZGRkZBRTY5MDAxNDhFNDgwMDJDOEY4MjAwODgwOQotOjEwOEZBMDAwQTY2MDAwMDgwMTEwMjAyNEFFNjQwMDEwOEU1MTAwMDg1NQotOjEwOEZCMDAwOTY0NzAwMTJBRTcxMDAyMDhFNTgwMDBDMzBFMzNGRkY0MAotOjEwOEZDMDAwMDAwMzI5ODBBRTc4MDAyNDhFNEMwMDE0MDBBMkY4MjEwMgotOjEwOEZEMDAwMzBGOTAwMDFBRTZDMDAyODhFNEIwMDE4MDAxRjcxQzJFMgotOjEwOEZFMDAwMDAxOTdCODBBRTZCMDAyQzhFNDkwMDFDMDFDRjY4MjFEQwotOjEwOEZGMDAwQTY2RDAwMUNBRTY5MDAzMDk2NEEwMDAyOEU0NjAwMjAyNQotOjEwOTAwMDAwQTY2QTAwMUVBRTY2MDAzNDkyNDMwMDMzMzA3MDAwMDQzRQotOjEwOTAxMDAwNTYwMDAwMDY5MjRCMDAwMDNDMDY4MDA4MzREMDAxMDA0OAotOjEwOTAyMDAwOEUwODAwQzBBRTY4MDAzMDkyNEIwMDAwOEY4QTAwMjA4RQotOjEwOTAzMDAwQTE0QjAwMzA5MjQ5MDAzMzMxMjMwMDAyNTA2MDAwMDdGOQotOjEwOTA0MDAwOTI0NDAwMDE4RjhDMDAyMDI0MEZGRjgwOTE4RTAwMzAwRAotOjEwOTA1MDAwMDFDRjY4MjVBMThEMDAzMDkyNDQwMDAxOEY4MjAwMjA0RAotOjEwOTA2MDAwMjQxOEZGQkYyNDBBRkZERkEwNDQwMDMxOEY5OTAwMjA5RAotOjEwOTA3MDAwM0MwODgwMDgzNTA0MDA4MDkzMzEwMDNDMzIzRjAwN0Y3QgotOjEwOTA4MDAwQTMzRjAwM0M4RjhEMDAyMDkxQUYwMDNDMDFGODcwMjQ3RAotOjEwOTA5MDAwQTFBRTAwM0M4Rjg3MDAyMDhFNkMwMDE0OTBFMzAwM0M1MgotOjEwOTBBMDAwMkQ4QjAwMDEwMDBCNDk0MDAwNkEzMDI0MDBDOTgwMjU0NwotOjEwOTBCMDAwQTBGMDAwM0M5NjQ1MDAxMjhGODcwMDIwQTRFNTAwMzIwNgotOjEwOTBDMDAwOEU0NTAwMDQ5MDlGMDA3QzMwQTIwMDAzMDAwMjg4MjM5QwotOjEwOTBEMDAwMzIzOTAwMDMwMEI5MTAyMTMzRjgwMDAyMTcwMDAwMDJGMgotOjEwOTBFMDAwMjQ0NDAwMzQyNDQ0MDAzMDNDMDM4MDA4MzQ2NjAwODA2QgotOjEwOTBGMDAwOTBDOTAwN0MwMEE5ODAyNDMyMDgwMDA0MTUwMDAwMDJGOQotOjEwOTEwMDAwMjQ4MzAwMDQwMDgwMTgyMThGODQwMDIwMjQwODAwMDI5QQotOjEwOTExMDAwQUNFMzAwMzRBMDg4MDAwMDkyNDIwMDNGOEY5RjAwMjAwMwotOjEwOTEyMDAwM0MxODgwMDgzNzBGMDA4MEEzRTIwMDAxOEY5MTAwMjBENwotOjEwOTEzMDAwOTI1OTAwM0Y4RTQ0MDAwNEE2MzkwMDAyOTVFRTAwNUM2RgotOjEwOTE0MDAwMEUwMDBFOEYzMUQwRkZGRjAwMDI2QjgwMDIwRDU4MjVGQwotOjEwOTE1MDAwM0MwQzQyMDAwMTZDMjgyNUFFMjUwMDA0OEU0QTAwMzhFNAotOjEwOTE2MDAwOEY4NTAwMjBBQ0FBMDAxODhFNDcwMDM0QUNBNzAwMUNFNQotOjEwOTE3MDAwQUNBMDAwMENBQ0EwMDAxMEE0QTAwMDE0QTRBMDAwMTY4OQotOjEwOTE4MDAwQTRBMDAwMjBBNEEwMDAyMkFDQTAwMDI0OEU2MjAwMTRBMQotOjEwOTE5MDAwNTA0MDAwMDEyNDAyMDAwMUFDQTIwMDA4MEUwMDBFQUVGNwotOjEwOTFBMDAwMjQxMTAwMDEwQTAwMTAzMzI0MTAwMDAxOTBEMzAwMDFBMwotOjEwOTFCMDAwMzI3MjAwMjAxMjQwMDE4QTI0MTAwMDAxM0MwQTgwMDgwQgotOjEwOTFDMDAwMzU0NzAwODA5MEUzMDA3QzhGOTMwMDFDQUZBMDAwMjQwMwotOjEwOTFEMDAwMzA2OTAwMDExMTIwMDAxMUFGQjAwMDIwM0MwNTgwMDg2QgotOjEwOTFFMDAwOENDQjAwMTQ4Q0FDMDA2MDAxNkM4ODJCMTYyMDAwMDMyMwotOjEwOTFGMDAwMDE2MDI4MjEzQzEwODAwODhFMDUwMDYwM0MwRjgwMDgyQgotOjEwOTIwMDAwMzVFMzAwODA4QzZFMDA3MDAwQUU2ODJCMTVBMDAwMDI2NAotOjEwOTIxMDAwMDBBMDIwMjE4QzY0MDA3MEFGQTQwMDI0OEY4MkZGNEMzQQotOjEwOTIyMDAwOENDNDAwMTQ4QzU5MDA3MDAwOTlDMDJCNTMwMDAwMDFBRAotOjEwOTIzMDAwOEM0NDAwNzA4RkEyMDAyNDAwODJGODIzMTNFMDAwMDMwNgotOjEwOTI0MDAwQUZCRjAwMjgyNDA0MDAwMkFGQTQwMDIwOEZCMjAwMjA4QQotOjEwOTI1MDAwMDI5MjQwMkIxNTAwMDE1QjAwMDAxODIxOENDNTAwMzhEQwotOjEwOTI2MDAwOEU2QjAwMEMzQzBDMDA4MEFFNjUwMDAwOENDOTAwMzQ5NQotOjEwOTI3MDAwM0MxMUZGOUYwMTZDNTAyNUFFNjkwMDA0OTBDODAwM0Y2RgotOjEwOTI4MDAwMzYyM0ZGRkYwMTQzMTAyNDNDMTIwMDIwM0MwNEZGRUY3MwotOjEwOTI5MDAwQTI2ODAwMEIwMDUyMzgyNTM0OUZGRkZGMDBGRkMwMjQ1NgotOjEwOTJBMDAwM0MxOTAwMDg4Rjg3MDA4QzAzMTk3ODI1QUU2RjAwMENERAotOjEwOTJCMDAwOENFRDAwMTRBRTYwMDAxODhGQjEwMDI0QUU2RDAwMTQ2OAotOjEwOTJDMDAwOENGMDAwMTg4RkFFMDAyOEFFNzAwMDFDOENFNTAwMDhGMgotOjEwOTJEMDAwMDIyRTYwMjFBRTY1MDAyNDhDRUIwMDBDQTY2MDAwMzhFNQotOjEwOTJFMDAwQTY2MDAwM0FBRTZDMDAyQ0FFNjAwMDI4QUU2QjAwMjA4OQotOjEwOTJGMDAwOENFQTAwMTQ4RkEzMDAyODAxNTE0ODIzMDEyMzMwMjM1NgotOjEwOTMwMDAwMTBDMDAwMTFBRTY2MDAxMDkwRTkwMDNEOEU2MjAwMDRBRQotOjEwOTMxMDAwOEU3RjAwMDAwMDA5OTEwMDAwNTI3ODIxMDAwMDIwMjE3QQotOjEwOTMyMDAwMDFGMkM4MkIwM0U0QzAyMTAzMTk3MDIxQUU2RjAwMDRDMQotOjEwOTMzMDAwQUU2RTAwMDA5MEVEMDAzREEyNkQwMDBBOEY5MDAwOEM5MwotOjEwOTM0MDAwOTYwNjAwMDZBNjY2MDAwODhGOTgwMDIwMjQxOTAwMDJFMQotOjEwOTM1MDAwM0MwRjgwMDg4RkE0MDAyNDM1RUUwMDgwQTMxOTAwMDA4NAotOjEwOTM2MDAwOTVDRDAwNUM4RjkyMDAyMDBFMDAwRThGMzFCMEZGRkY3NAotOjEwOTM3MDAwMDAwMjJCODAwMjA1NjAyNTNDMDY0MjAwOEY4NTAwOEM5MAotOjEwOTM4MDAwMDE4NjU4MjVBRTRCMDAwNDhGODQwMDIwOENCMTAwMzgzNAotOjEwOTM5MDAwQUM5MTAwMTg4Q0EzMDAzNEFDODMwMDFDQUM4MDAwMEM5MgotOjEwOTNBMDAwQUM4MDAwMTBBNDgwMDAxNEE0ODAwMDE2QTQ4MDAwMjBDQgotOjEwOTNCMDAwQTQ4MDAwMjJBQzgwMDAyNDkwQUEwMDNGOEZBNzAwMjQ0NAotOjEwOTNDMDAwQTQ4QTAwMDIxMEUwMDAwQzI0MDkwMDAxOEZCRjAwMjhDRAotOjEwOTNEMDAwNTNFMDAxODg5MEEyMDAzRDkwQTIwMDNFMjQ0ODAwMDE4NQotOjEwOTNFMDAwQTA4ODAwMDE4Rjg1MDAyMDhGQTQwMDI0QUNBNDAwMDg3MQotOjEwOTNGMDAwMEEwMDEyMTMzQzExODAwOEEwODkwMDAxOEY4NTAwMjAwQgotOjEwOTQwMDAwMjQwMjAwMDFBQ0EyMDAwODNDMTE4MDA4MzYyMzAwODAzMQotOjEwOTQxMDAwOTA2QTAwN0MzMTQ3MDAwMjE0RTAwMDAyMjQwNjAwMzQwOAotOjEwOTQyMDAwMjQwNjAwMzA4RjhEMDA4QzNDMEY4MDA4MzVFRTAwODBDNAotOjEwOTQzMDAwOTFBQzAwMDA5MUM4MDA3QzhGQjAwMDI0QTBBQzAwMzAzQgotOjEwOTQ0MDAwOEY5MTAwOEM4RjgyMDAyMDhGQUEwMDI0OTIyNzAwMDEyOAotOjEwOTQ1MDAwMzIxMjAwMDMyNDBCMDAwNEEwNDcwMDMxMDE3MjE4MjNDQwotOjEwOTQ2MDAwOEY4NDAwOEM4RjhCMDAyMDI0MUZDMDAwOTQ5ODAwMTJFMgotOjEwOTQ3MDAwOTU3OTAwMzIzMDY5MDAwMzMzMEYzRkZGMDMzRjcwMjRCQQotOjEwOTQ4MDAwMDFDRjY4MjVBNTZEMDAzMjkxNjUwMDMyMDBDQTMwMjFGOAotOjEwOTQ5MDAwMDBDOTMwMjEzMEIwMDAzRjM2MEMwMDQwQTE2QzAwMzJEMgotOjEwOTRBMDAwOEZCMjAwMjQzMTA3MDAwNDEyNDAwMDAyOEY4NTAwMjA5MwotOjEwOTRCMDAwMDBDNzMwMjEzQzA0ODAwOEFDQTYwMDM0MzQ4ODAxMDA4OQotOjEwOTRDMDAwOEQxOTAwQzA4RkJGMDAyNDI0MERGRkJGQUNCOTAwMzgzOAotOjEwOTREMDAwOTBBRjAwM0MyRkY4MDAwMTI0MTJGRkRGMzFFRTAwN0YzNwotOjEwOTRFMDAwQTBBRTAwM0M4RjhCMDAyMDAwMTg4OTQwOTE3MDAwM0M5QQotOjEwOTRGMDAwMDIwRDYwMjRBMTZDMDAzQzhGODcwMDIwOTBFMzAwM0NBQgotOjEwOTUwMDAwMDA3MjUwMjQwMTUxMTAyNUEwRTIwMDNDOEY4ODAwOEM4RAotOjEwOTUxMDAwOEY5OTAwMjA4RDA5MDAyMEFGMjkwMDQwOEQwNjAwMjQ3RQotOjEwOTUyMDAwQUYyNjAwNDQ4RDA0MDAyOEFGMjQwMDQ4OEQxRjAwMkM3NgotOjEwOTUzMDAwQUYzRjAwNEMwRTAwMEVBRTAwMDAwMDAwOEZCODAwMjBDMAotOjEwOTU0MDAwMjQwNTAwMDI1NzA1MDA5RjhGQTMwMDIwM0MxRjgwMDBDOAotOjEwOTU1MDAwM0MxMjgwMDg4RkU0MDEwMDkyNTgwMDA4OEY5MkZGNEM2MwotOjEwOTU2MDAwMEUwMDBFMzQzMzA1MDA3RjhGOEUwMDIwOEZBRjAwMjA1OQotOjEwOTU3MDAwOEZBNDAwMjhBMUNGMDAwMDk2NTkwMDVDOEY5MTAwMjA5NQotOjEwOTU4MDAwMEUwMDBFOEYzMzMwRkZGRjAwMDI1QjgwMDIwQjY4MjU1OAotOjEwOTU5MDAwM0MwODQyMDA4RjhCMDA4QzAxQTgzMDI1QUUyNjAwMDRDOQotOjEwOTVBMDAwOEQ3MDAwMzg4Rjg2MDAyMDAwMDAyODIxMDAwNTExMDBGMgotOjEwOTVCMDAwQUNEMDAwMTg4RDZDMDAzNDNDMDQ3RkZGMzQ4OEZGRkY3MgotOjEwOTVDMDAwQUNDQzAwMUM5MTcxMDAzRThDQ0EwMDFDOENERjAwMThEMgotOjEwOTVEMDAwMDAxMTM5MDAwMDExMUYwMjAxNDc3MDIxMDA0MzQ4MjU4NgotOjEwOTVFMDAwMDFDN0MwMkIwM0U5NzgyMTAxRjhDODIxQUNDRTAwMUNDQgotOjEwOTVGMDAwQUNEOTAwMThBQ0MwMDAwQ0FDQzAwMDEwOTE2RDAwM0U5RQotOjEwOTYwMDAwOEZBQTAwMjgyNDA3MDAwNUE0Q0QwMDE0OTU3MDAwMDQzQgotOjEwOTYxMDAwMjQxOEMwMDAwMTQ4QzgyNEE0RDAwMDE2OTE2QzAwM0U1NAotOjEwOTYyMDAwMDE0MDIwMjFBNENDMDAyMDk1NjUwMDA0QTRDNTAwMjI5RgotOjEwOTYzMDAwQUNDMDAwMjQ5MTYzMDAzRkE0QzMwMDAyOTE3MTAwM0RCRgotOjEwOTY0MDAwMjYyMjAwMDFBMEMyMDAwMThGODkwMDIwM0MwMjgwMDg3MAotOjEwOTY1MDAwMzQ0NjAxMDBBRDJBMDAwOEExMjcwMDMwOEY5MTAwMjA3OAotOjEwOTY2MDAwOEY5RjAwOEMyNDAyRkY4MDk2MkYwMDMyOTdFRTAwMTIwRAotOjEwOTY3MDAwMDMwRjgwMjQzMUNEM0ZGRjAyMEQ2MDI1QTYyQzAwMzI2MAotOjEwOTY4MDAwOTIyNTAwMzIyNDE4RkZCRjI0MTBGRkRGMzBBQjAwM0ZDQgotOjEwOTY5MDAwMzU2MzAwNDBBMjIzMDAzMjhGOUYwMDIwMjQwM0ZGRkY4OAotOjEwOTZBMDAwQUZFMDAwMzQ4Q0NBMDBDMEFGRUEwMDM4OTNFNzAwM0M1QQotOjEwOTZCMDAwMzBFOTAwN0ZBM0U5MDAzQzhGOEQwMDIwM0MwOTgwMDA0OQotOjEwOTZDMDAwOTFBRjAwM0MwMUY4NzAyNEExQUUwMDNDOEY4QjAwMjBDQwotOjEwOTZEMDAwOTE2QzAwM0MwMTkwMjgyNEExNjUwMDNDOEY4NzAwMjBGQwotOjEwOTZFMDAwQUNFMzAwNDA4RkIxMDAyNDNDMDM4MDA4QUNGMTAwNDQ5RgotOjEwOTZGMDAwOTBFQTAwNDgwMTQyMzAyNUEwRTYwMDQ4OEY5MDAwMjAwMwotOjEwOTcwMDAwOEY4RTAwOEM4RTFGMDA0ODAzRTlDMDI0MDMxOTc4MjUzMgotOjEwOTcxMDAwQUUwRjAwNDg5MUNEMDAzRUEyMEQwMDRDOEY4QzAwOEMwNgotOjEwOTcyMDAwOEY4QjAwMjA5NTg1MDAwNEE1NjUwMDRFMEUwMDAyRjA4OQotOjEwOTczMDAwOEM2NTAwNjA5MjRBMDA3QzAwNDAyODIxOEZBNjAwMjg5QQotOjEwOTc0MDAwMDAwMjExNDAwMDA1ODkwMDAwNTEzODIxMzE0OTAwMDIxMgotOjEwOTc1MDAwMTEyMDAwMDMwMEM3MTgyMTAwMDUyMDgwMDA2NDE4MjE5MwotOjEwOTc2MDAwM0MwMjgwMDgzNDRBMDA4MDkxNDcwMDdDMzBFOTAwMDRDNAotOjEwOTc3MDAwMTEyMDAwMDM4RkI5MDAyODAwMDU2MDgwMDA2QzE4MjFCQgotOjEwOTc4MDAwMjQwQjAwMDQ4RjkxMDAyMDMzMzAwMDAzMDE3MDQwMjMyQwotOjEwOTc5MDAwMzEwRDAwMDMwMDZEMzAyMUFFMjYwMDM0M0MwMzgwMDhGQgotOjEwOTdBMDAwQTY2NTAwMzgzQzA1ODAwMDhDQTQwMTAwOTA3MzAwMDg3OQotOjEwOTdCMDAwMEUwMDBFNzkzMjY1MDA3RjBFMDAwRUFFMDAwMDAwMDAzNAotOjEwOTdDMDAwOEZBMzAwMjAwMDAzNzgyQjAwMEY4MDIzMDI5MEEwMjQ5OQotOjEwOTdEMDAwMDA2MDgwMjEwMDYwODgyMTBBMDAxMDMzMDAxMDgwMkI3NwotOjEwOTdFMDAwOEY5MTAwMUM4Q0Q4MDAzODI0MTkwMDAzQTYyMDAwMDg5MwotOjEwOTdGMDAwQUUzODAwMDA4Q0NGMDAzNEEyMjAwMDBBOEY4RTAwOEM3RgotOjEwOTgwMDAwQUUyRjAwMDQzQzA1MDA4MDkxQ0IwMDNGQTIzOTAwMEMzNAotOjEwOTgxMDAwOEUyODAwMEMzQzBERkY5RkEyMkIwMDBCMDEwNTEwMjU4QwotOjEwOTgyMDAwMzVBM0ZGRkYzQzEzRkZFRjhGOEUwMDhDMDA0MzM4MjRERAotOjEwOTgzMDAwMzY2QUZGRkYwMEVBNDgyNEFFMjkwMDBDOERDNDAwMTRFQwotOjEwOTg0MDAwOTVEODAwMTI4Rjg2MDA4OEFFMjQwMDEwOERDQzAwMTRBRAotOjEwOTg1MDAwQUUyMDAwMThBRTIwMDAyMEFFMkMwMDE0QUUyMDAwMjQ1NAotOjEwOTg2MDAwOERERjAwMTgzMzBDM0ZGRjAwMEM5MTgwQUUzRjAwMjhDNQotOjEwOTg3MDAwOERDRjAwMDgwMjQ2QzgyMTMzMEIwMDAxQUUyRjAwMzAwNwotOjEwOTg4MDAwOERDMzAwMEM4RjkzMDAyMDAwMTk0MUMyMDAwQjJCODA2OAotOjEwOTg5MDAwMDEwNTY4MjEyNDAyMDAwMjNDMEE4MDA4QTYyRDAwMUM1NAotOjEwOThBMDAwQTYyMDAwMzRBRTIzMDAyQzM1NDcwMDgwQTI2MjAwMDBDMQotOjEwOThCMDAwOTRFOTAwNUM4Rjk5MDAyMDNDMDQ0MjAwMzEzRkZGRkY5NwotOjEwOThDMDAwMDNFNDMwMjVBRjI2MDAwNDhGOTgwMDhDMjQwRTAwMDE5RAotOjEwOThEMDAwMjQwMkMwMDA4RjEyMDAzODI0MDYwMDM0QUYzMjAwMTg3MgotOjEwOThFMDAwOEYwRjAwMzQzQzEyODAwODM2NTgwMDgwQUYyRjAwMUNDOAotOjEwOThGMDAwQUYyMDAwMENBRjIwMDAxMEE3MjAwMDE0QTcyMDAwMTZGNgotOjEwOTkwMDAwQTcyMDAwMjBBNzIwMDAyMkFGMjAwMDI0QTczMDAwMDJCQgotOjEwOTkxMDAwQTMyRTAwMDE4RjhEMDAyMDhGOEIwMDhDQURCMDAwMDgyRQotOjEwOTkyMDAwOTE2ODAwMDBBMUE4MDAzMDhGOTEwMDhDOEY4MzAwMjBFNwotOjEwOTkzMDAwOTIyNTAwMDFBMDY1MDAzMThGOUYwMDIwOTdGMzAwMzIyRgotOjEwOTk0MDAwMDI2MjUwMjQwMTRDMzgyNUE3RTcwMDMyOTNFOTAwMzIyNwotOjEwOTk1MDAwMzEyNDAwM0ZBM0U0MDAzMjkzMEYwMDdDMzFFRTAwMDI3QgotOjEwOTk2MDAwMTVDMDAwMDI4Rjg0MDAyMDI0MDYwMDMwM0MwRTgwMDhDMQotOjEwOTk3MDAwQUM4NjAwMzQzNUQxMDEwMDhFMzkwMEMwMjQwM0ZGQkYwRQotOjEwOTk4MDAwMDIwMDg4MjFBQzk5MDAzODkwOEIwMDNDMDAxMDgwMkI5RAotOjEwOTk5MDAwMzE2NTAwN0ZBMDg1MDAzQzhGOEQwMDIwOTFBODAwM0NBMAotOjEwOTlBMDAwMDEwMzEwMjRBMUEyMDAzQzhGODcwMDIwOTBGMzAwM0MwQgotOjEwOTlCMDAwMzY2QTAwMjBBMEVBMDAzQzhGOUYwMDhDOEY5MjAwMjAyNgotOjEwOTlDMDAwOEZFOTAwMjBBRTQ5MDA0MDhGRTQwMDI0QUU0NDAwNDRGQgotOjEwOTlEMDAwOEZFQzAwMjhBRTRDMDA0ODhGRTYwMDJDMEUwMDBFQUUzNwotOjEwOTlFMDAwQUU0NjAwNEMwQTAwMTAzMzAwMDAwMDAwMEEwMDEwQTQyQwotOjEwOTlGMDAwOENFMjAwNDAyNDQ4MDAwMUEwODgwMDAxOEY4NTAwMjBFRgotOjEwOUEwMDAwOEZBNDAwMjRBQ0E0MDAwODBBMDAxMjEzM0MxMTgwMDhBMwotOjEwOUExMDAwOTRDQjAwNTIzQzA4MDgwMDhEMDgwMDI0MDEwQjEwMjE1MwotOjEwOUEyMDAwQTRDMjAwNTIwQTAwMEZERjhGQjMwMDEwMjdCREZGRTA3MQotOjEwOUEzMDAwM0MwRDgwMDhBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMUNFMwotOjEwOUE0MDAwQUZCMTAwMTQzNUIyMDA4MDhFNEMwMDE4MzVBODAxMDA2QgotOjEwOUE1MDAwOTY0QjAwMDY5NUE3MDA1MDkxMDkwMEVDMDAwQzU2MDJBOQotOjEwOUE2MDAwMDE2NzI4MjMzMTQzMDA3RjMxMjYwMEZGMjQwMjAwMDNEMQotOjEwOUE3MDAwQTM4MzAwOTBBRjg0MDA4ODEwQzIwMDFCMzBCMEZGRkZBQQotOjEwOUE4MDAwOTEwNjAwRUMyNDEyMDAwNTMwQzIwMEZGMTA1MjAwMzM5MgotOjEwOUE5MDAwMDAwMDAwMDAxNjAwMDAwOThGQkYwMDFDOEZCMjAwMThFNAotOjEwOUFBMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MEQwQzAwM0MwQzgwMDAwRQotOjEwOUFCMDAwMjdCRDAwMjAwM0UwMDAwOEFEOEQwMDI0MEUwMDBGQzI3QQotOjEwOUFDMDAwMDIwMDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQzQwotOjEwOUFEMDAwOEZCMDAwMTAyNDBEMEMwMDNDMEM4MDAwMjdCRDAwMjAyRQotOjEwOUFFMDAwMDNFMDAwMDhBRDhEMDAyNDk2NTgwMDc4OTY1MTAwN0E2NgotOjEwOUFGMDAwOTI0RTAwN0QwMjM4NzgyNjMxRThGRkZGMzFDNDAwQzA2NQotOjEwOUIwMDAwMTQ4MDAwMDkyRDExMDAwMTE2MDAwMDM3MDAwMDAwMDAyQwotOjEwOUIxMDAwNTYyMEZGRTI4RkJGMDAxQzBFMDAwRUMzMDAwMDAwMDBBNQotOjEwOUIyMDAwMEEwMDEzQjc4RkJGMDAxQzE2MjBGRkRBMDAwMDAwMDBFOAotOjEwOUIzMDAwMEUwMDBFQzMwMDAwMDAwMDE0NDBGRkQ4OEZCRjAwMUNCMQotOjEwOUI0MDAwMTYwMDAwMjIwMDAwMDAwMDkyNUYwMDdEMzNFMjAwM0YxQgotOjEwOUI1MDAwQTI0MjAwN0QwQTAwMTNCNzhGQkYwMDFDOTUwOTAwREFFRQotOjEwOUI2MDAwOEY4NjAwNjQwMDgwMjgyMTI0MDQwMDA1MEUwMDA2NjYwQwotOjEwOUI3MDAwMzEzMEZGRkY5NzgzMDA3NjNDMDQ4MDAwMjQ2NUZGRkZBRgotOjEwOUI4MDAwQTc4NTAwNzY4QzhBMDFCODA1NDBGRkZFMDAwMDAwMDAyMgotOjEwOUI5MDAwQUM4MDAxODA4RkJGMDAxQ0FDOTAwMTg0OEZCMjAwMTg5NAotOjEwOUJBMDAwOEZCMTAwMTQ4RkIwMDAxMDNDMDc2MDEzM0MwQjEwMDAwNQotOjEwOUJCMDAwMjQwRDBDMDAzQzBDODAwMDI3QkQwMDIwQUM4NzAxODhFMAotOjEwOUJDMDAwQUM4QjAxQjgwM0UwMDAwOEFEOEQwMDI0MEUwMDBGQzI3RAotOjEwOUJEMDAwMDIwMDIwMjE1MDQwRkZCMThGQkYwMDFDOTI1RjAwN0QyQQotOjEwOUJFMDAwMEEwMDEzRTQzM0UyMDAzRjBFMDAwRkMyMDIwMDIwMjFGRQotOjEwOUJGMDAwMTQ0MEZGQUE4RkJGMDAxQzEyMjAwMDA3MDAwMDAwMDBDNQotOjEwOUMwMDAwOTI1OTAwN0QzMzMwMDAzRjM2MDIwMDQwQTI0MjAwN0Q3MQotOjEwOUMxMDAwMEEwMDEzQjc4RkJGMDAxQzBFMDAwRUMzMDAwMDAwMDAyNwotOjEwOUMyMDAwNTA0MEZGOUU4RkJGMDAxQzkyNTkwMDdEMzMzMDAwM0Y5MwotOjEwOUMzMDAwMEEwMDE0MTMzNjAyMDA0MDAwMDQxMUMwMDNFMDAwMDhCQgotOjEwOUM0MDAwMjQ0MjAyNDAzQzA1MDAwNjAwODUxMDI1M0MwMzgwMDBBQwotOjEwOUM1MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwOUM2MDAwM0MwNTgwMDA4Q0E3MDAwMDMwRTYwMDEwMTBDMEZGRkQwRQotOjEwOUM3MDAwMDAwMDAwMDA4Q0FCMDAzQzhDQUEwMDNDMDE2NDQ4MjEzMQotOjEwOUM4MDAwMDEyQTQwMkIxMTAwMDAwNDNDMDY4MDAwOENBRDAwMzhGNgotOjEwOUM5MDAwMjVBQzAwMDFBQ0FDMDAzODhDQ0YwMDNDMDFFNDcwMjE1NQotOjEwOUNBMDAwMDNFMDAwMDhBQ0NFMDAzQzI3QkRGRkQwQUZCMjAwMThFNwotOjEwOUNCMDAwQUZCMDAwMTBBRkJGMDAyOEFGQjUwMDI0QUZCNDAwMjA5NAotOjEwOUNDMDAwQUZCMzAwMUNBRkIxMDAxNDAwQTA5MDIxMTRBMDAwMTI4QgotOjEwOUNEMDAwMDA4MDgwMjE4RjgyMDAyNDAwMDIxODgwMTQ2MDAwMzdFOQotOjEwOUNFMDAwMjQwNDAwMTAwRTAwMTQyMTAwMDAwMDAwOEZCRjAwMjg4MwotOjEwOUNGMDAwOEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThFMgotOjEwOUQwMDAwOEZCMTAwMTQ4RkIwMDAxMDAwMDAxMDIxMjdCRDAwMzA2QgotOjEwOUQxMDAwMDNFMDAwMDhBRjgwMDAyNDEwQTAwMDFFMDAwMDg4MjE4RQotOjEwOUQyMDAwM0MxMzgwMDAyNDE0MDAyMDBBMDAxNDYwM0MxNTAwMDUzOAotOjEwOUQzMDAwMjYzMTAwMDQwMjMyNTAyQjExNDAwMDE3MDI0MDEwMjEzRQotOjEwOUQ0MDAwOEY4ODAwMjQ4RTA3MDAwMDI0MDQwMDgwMDAwODQ4ODBDQgotOjEwOUQ1MDAwMDEzMzE4MjEyNTA2MDAwMUFDNjcwNDAwMjYxMDAwMDQxOQotOjEwOUQ2MDAwMTRENEZGRjNBRjg2MDAyNDBFMDAxNDIxMDAwMDAwMDA3RAotOjEwOUQ3MDAwQUU3NTAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwOUQ4MDAwMDAwMDAwMDAyNjMxMDAwNDAyMzI1MDJCMTU0MEZGRUM4OQotOjEwOUQ5MDAwQUY4MDAwMjQwMjQwMTAyMThGQkYwMDI4OEZCNTAwMjQxRgotOjEwOURBMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0NQotOjEwOURCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwMDAwMzIwMjMwRgotOjEwOURDMDAwMzA4NTAwMEYwQTAwMTQ0OTAwNjUyMDIxMjdCREZGRDgwNwotOjEwOUREMDAwM0MwMzgwMDAwMEEwMzgyMUFDNjcwMDM4QUZCMTAwMTQwQwotOjEwOURFMDAwQUM2NjAwM0MwMDgwODgyMTNDMDYwMDIyQUM2NjAwMzA1NgotOjEwOURGMDAwQUZCMDAwMTBBQzcxMDAyODNDMTA4MDBDM0MwNDgwMEMwQgotOjEwOUUwMDAwMjQwNTAwNzBBRkJGMDAyNEFGQjQwMDIwQUZCMzAwMUMyNgotOjEwOUUxMDAwMEUwMDE0M0FBRkIyMDAxODI2MDQwMDgwMEUwMDE0M0E2NwotOjEwOUUyMDAwMjQwNTAwODAyNjA0MDEwMDBFMDAxNDNBMjQwNTAwRjBFOQotOjEwOUUzMDAwM0MwMjA4MDA4QzQyMDA2NDEwNDAwMDEzMDAwMDgwMjFBNgotOjEwOUU0MDAwM0MxNDgwMDAyNDEzRkY4MDNDMTI4MDBDMEUwMDE0MUU3MgotOjEwOUU1MDAwMDIwMDIwMjEwMDUxNDgyMTMxMkEwMDdGMDEzMzQwMjQ5MwotOjEwOUU2MDAwMDE1MjIwMjEyNDA1MDA1MEFFODgwMDI4MEUwMDE0M0EyQgotOjEwOUU3MDAwMjYxMDAwMDEzQzA1MDgwMDhDQTUwMDY0MDIwNTIwMkI3QgotOjEwOUU4MDAwMTQ4MEZGRjIwMDAwMDAwMDNDMDYwODAwOENDNjAwNjA1MQotOjEwOUU5MDAwMTBDMDAwMTUwMDAwODAyMTNDMTQ4MDAwMjQxM0ZGODBCNgotOjEwOUVBMDAwM0MxMjgwMEMzQzE5MDgwMDhGMzkwMDU4MDAxMEMxODAwQQotOjEwOUVCMDAwMjQwNTAwNDAwMzMxNzgyMTAxRjg2ODIxMzFBRTAwN0Y4QwotOjEwOUVDMDAwMDFCMzYwMjQwMUQyMjAyMUFFOEMwMDI4MEUwMDE0M0E4OAotOjEwOUVEMDAwMjYxMDAwMDEzQzA2MDgwMDhDQzYwMDYwMDIwNjU4MkJDNAotOjEwOUVFMDAwMTU2MEZGRjAwMDAwMDAwMDNDMTAwODAwOEUxMDAwNUNDMAotOjEwOUVGMDAwMjQxNEZGODAzQzFGODAwQzAyMTE5ODIxMDI3NDkwMjRDRQotOjEwOUYwMDAwMzI2MjAwN0YzQzExODAwMDAwNUYyMDIxQUUzMjAwMjhDOQotOjEwOUYxMDAwMEUwMDE0M0EwMDA2Mjg0MDhGQkYwMDI0OEZCNDAwMjBBMgotOjEwOUYyMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBENwotOjEwOUYzMDAwMDAwMDIwMjEwMDAwMjgyMTBBMDAxNDNBMjdCRDAwMjgzMwotOjEwOUY0MDAwOEY4MzAwM0M4QzYyMDAwNDEwNDAwMDAzMDAwMDAwMDA3RQotOjEwOUY1MDAwMDNFMDAwMDgwMDAwMDAwMDhDNjQwMDEwOEM2NTAwMDgxRAotOjA4OUY2MDAwMEEwMDE0ODM4QzY2MDAwQzVBCi06MDg5RjY4MDAwMDAwMDAwMDAwMDAwMDFCRDYKLToxMDlGNzAwMDAwMDAwMDBGMDAwMDAwMEEwMDAwMDAwODAwMDAwMDA2QkEKLToxMDlGODAwMDAwMDAwMDA1MDAwMDAwMDUwMDAwMDAwNDAwMDAwMDA0QkYKLToxMDlGOTAwMDAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzQjUKLToxMDlGQTAwMDAwMDAwMDAzMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyQTgKLToxMDlGQjAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyOTkKLToxMDlGQzAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyODkKLToxMDlGRDAwMDAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyNzkKLTowQzlGRTAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMTcyCi06MDQ5RkVDMDA4MDA4MDEwMEU4Ci06MTA5RkYwMDA4MDA4MDA4MDgwMDgwMDAwMDgwMDE3OTAwODAwMTc5MDczCi06MTBBMDAwMDAwODAwMTdDODA4MDAxN0M4MDgwMDE3REMwODAwMTdBQ0JDCi06MTBBMDEwMDAwODAwMUEwNDA4MDAxOUQwMDgwMDFBNUMwODAwMUE1QzJECi06MTBBMDIwMDAwODAwMUFFNDA4MDAxQTE0ODAwODAyNDAwODAwMjE1NEFECi06MTBBMDMwMDAwODAwMUZBMDA4MDAyMTdDMDgwMDIyMTQwODAwMjM2NEU3Ci06MTBBMDQwMDAwODAwMjNCMDA4MDAyNEQ0MDgwMDIzREMwODAwMjQ2MEEyCi06MTBBMDUwMDAwODAwMjAxMDA4MDAyOTg4MDgwMDI5MkMwODAwMUZCQ0NGCi06MTBBMDYwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDI1NDgwODAwMjU0ODQwCi06MTBBMDcwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDI4MDQwODAwMUZCQzAzCi06MTBBMDgwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMjg2NDkzCi06MTBBMDkwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzM0Ci06MTBBMEEwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzI0Ci06MTBBMEIwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQzE0Ci06MTBBMEMwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDIzRDAwODAwMUZCQ0VDCi06MTBBMEQwMDAwODAwMUZCQzA4MDAyOEQ0MDgwMDFGQkMwODAwMUZCQ0QzCi06MTBBMEUwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQ0U0Ci06MTBBMEYwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQ0Q0Ci06MTBBMTAwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMUZCQ0MzCi06MTBBMTEwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDFGQkMwODAwMjcyODNGCi06MTBBMTIwMDAwODAwMUZCQzA4MDAxRkJDMDgwMDI2OTAwODAwMjVFQzkyCi06MTBBMTMwMDAwODAwMzc1MDA4MDAzNzI0MDgwMDM2RjAwODAwMzZDNEZECi06MTBBMTQwMDAwODAwMzZBNDA4MDAzNjU4ODAwODAxMDA4MDA4MDA4MDA2Ci06MDhBMTUwMDA4MDA4MDAwMDgwMDgwMDgwNzcKLTowOEExNTgwMDBBMDAwQzc2MDAwMDAwMDA3MwotOjEwQTE2MDAwMDAwMDAwMDAwMDAwMDAwRDcyNzg3MDM0MkUzNjJFMzE5MQotOjEwQTE3MDAwMzYwMDAwMDAwNDA2MTAwMzAwMDAwMDAwMDAwMDAwMDE4QgotOjEwQTE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwQTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwQTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwQTFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwQTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwQTFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwQTFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwQTFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwQTIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwQTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwQTIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwQTI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwQTI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwQTI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwQTI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwQTI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwQTI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwQTJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwQTJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwQTJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwQTJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwQTJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwQTJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwQTMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwQTMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwQTMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwQTM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwQTM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwQTM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwQTM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwQTM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwQTM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwQTNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwQTNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwQTNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwQTNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwQTNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwQTNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwQTQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwQTQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwQTQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwQTQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwQTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwQTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwQTQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwQTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwQTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwQTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwQTRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwQTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwQTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwQTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwQTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwQTUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwQTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwQTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwQTU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgotOjEwQTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwQTU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgotOjEwQTU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwQTU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwQTU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwQTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwQTVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwQTVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwQTVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwQTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwQTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwQTYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwQTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQotOjEwQTYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwQTY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwQTY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwQTY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwQTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwQTY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQotOjEwQTY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQotOjEwQTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwQTZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwQTZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwQTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwQTZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwQTZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQotOjEwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQotOjEwQTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQotOjEwQTcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwQTczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwQTc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwQTc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwQTc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwQTc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwQTc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwQTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwQTdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQotOjEwQTdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwQTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwQTdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwQTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwQTdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwQTgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwQTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAotOjEwQTgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwQTg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwQTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwQTg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwQTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwQTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwQTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwQThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwQThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwQThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwQThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwQThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwQThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NwotOjEwQTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNwotOjEwQTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNwotOjEwQTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwQTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwQTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwQTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwQTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwQTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwQTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwQTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNwotOjEwQTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwQTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwQTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwQTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwQTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NwotOjEwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwQUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwQUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwQUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwQUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwQUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwQUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgotOjEwQUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwQUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwQUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwQUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwQUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwQUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwQUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwQUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwQUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwQUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwQUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwQUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwQUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwQUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwQUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwQUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwQUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwQUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwQUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwQUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwQUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwQUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQotOjEwQUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwQUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwQUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwQUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwQUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAotOjEwQUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwQUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwQUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwQUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwQUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwQUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAotOjEwQUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwQUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwQUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwQUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwQUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwQUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwQUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMwotOjEwQUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMwotOjEwQUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwQUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotOjEwQUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwQUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwQUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwQUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwQUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwQURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwQURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwQURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwQUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwQURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MwotOjEwQURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MwotOjEwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwQUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwQUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwQUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwQUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwQUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwQUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwQUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgotOjEwQUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwQUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwQUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgotOjEwQUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwQUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwQUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwQUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwQUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQotOjEwQUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwQUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwQUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwQUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwQUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwQUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwQUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwQUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwQUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwQUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwQUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwQUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwQUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQotOjEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjEwQjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwQjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAotOjEwQjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotOjEwQjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotOjEwQjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwQjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwQjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwQjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwQjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwQjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwQjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwQjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwQjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAotOjEwQjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwQjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwQjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwQjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwQjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgotOjEwQjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwQjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwQjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgotOjEwQjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwQjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwQjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwQjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwQjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwQjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwQjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwQjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwQjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwQjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwQjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwQjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwQjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwQjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwQjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwQjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwQjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwQjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwQjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwQjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwQjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwQjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwQjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwQjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwQjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwQjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwQjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwQjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwQjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwQjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwQjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwQjM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwQjM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwQjNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwQjNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwQjNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwQjNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwQjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwQjNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwQjQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwQjQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwQjQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwQjQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwQjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwQjQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwQjQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwQjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwQjQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwQjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwQjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwQjRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwQjREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwQjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwQjRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwQjUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwQjUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwQjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgotOjEwQjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwQjU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgotOjEwQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwQjU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwQjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwQjU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwQjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwQjVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwQjVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwQjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQotOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwQjY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwQjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwQjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwQjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQotOjEwQjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQotOjEwQjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwQjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwQjZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwQjZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwQjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQotOjEwQjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQotOjEwQjcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwQjcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwQjczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwQjc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwQjc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwQjc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwQjc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwQjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwQjc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQotOjEwQjdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwQjdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwQjdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwQjdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwQjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwQjdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQotOjEwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwQjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAotOjEwQjgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwQjgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwQjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwQjg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwQjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwQjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwQjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwQjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwQjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwQjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwQjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwQjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwQjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNwotOjEwQjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNwotOjEwQjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwQjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwQjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwQjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwQjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwQjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwQjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNwotOjEwQjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwQjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwQjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NwotOjEwQjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NwotOjEwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwQkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwQkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwQkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwQkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgotOjEwQkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwQkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwQkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwQkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwQkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwQkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwQkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwQkFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwQkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwQkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwQkIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwQkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwQkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwQkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwQkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwQkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwQkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwQkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwQkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwQkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQotOjEwQkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwQkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwQkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwQkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwQkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAotOjEwQkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwQkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwQkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwQkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwQkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwQkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAotOjEwQkM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwQkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwQkNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwQkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwQkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwQkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwQkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMwotOjEwQkQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMwotOjEwQkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwQkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotOjEwQkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwQkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwQkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwQkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwQkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwQkQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwQkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwQkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwQkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwQkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MwotOjEwQkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MwotOjEwQkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwQkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwQkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwQkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQkU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwQkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwQkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwQkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgotOjEwQkU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwQkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwQkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgotOjEwQkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwQkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwQkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwQkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwQkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQotOjEwQkYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwQkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwQkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwQkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwQkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwQkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwQkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwQkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwQkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwQkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwQkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwQkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwQkZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQotOjEwQkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwQzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAotOjEwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotOjEwQzAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotOjEwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwQzA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwQzA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwQzA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwQzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwQzA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwQzBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwQzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwQzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAotOjEwQzBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwQzBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwQzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjEwQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwQzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwQzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgotOjEwQzEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwQzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwQzE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgotOjEwQzE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwQzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwQzE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwQzE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwQzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwQzFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwQzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwQzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwQzFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwQzFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwQzIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwQzIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwQzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwQzI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwQzI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwQzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwQzI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwQzI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwQzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwQzJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwQzJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwQzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwQzJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwQzJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwQzJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAotOjEwQzMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwQzMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwQzM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAotOjEwQzM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAotOjEwQzM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAotOjEwQzM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwQzM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAotOjEwQzM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAotOjEwQzNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwQzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAotOjEwQzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAotOjEwQzNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAotOjEwQzNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAotOjEwQzNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwQzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQwotOjEwQzQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwQzQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwQzQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQwotOjEwQzQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQwotOjEwQzQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQwotOjEwQzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQwotOjEwQzQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQwotOjEwQzQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QwotOjEwQzRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QwotOjEwQzRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QwotOjEwQzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QwotOjEwQzREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QwotOjEwQzRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QwotOjEwQzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQwotOjEwQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgotOjEwQzUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwQzUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgotOjEwQzUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgotOjEwQzU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgotOjEwQzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgotOjEwQzU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwQzU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgotOjEwQzU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgotOjEwQzU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgotOjEwQzVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgotOjEwQzVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgotOjEwQzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwQzVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwQzVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwQzVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgotOjEwQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQotOjEwQzYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQotOjEwQzYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQotOjEwQzYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQotOjEwQzY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQotOjEwQzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQotOjEwQzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQotOjEwQzY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQotOjEwQzY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQotOjEwQzY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQotOjEwQzZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQotOjEwQzZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQotOjEwQzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQotOjEwQzZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQotOjEwQzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQotOjEwQzZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQotOjEwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwQzcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQotOjEwQzcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotOjEwQzczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQotOjEwQzc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQotOjEwQzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQotOjEwQzc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQotOjEwQzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwQzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQotOjEwQzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQotOjEwQzdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwQzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQotOjEwQzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQotOjEwQzdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQotOjEwQzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQotOjEwQzdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQotOjEwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAotOjEwQzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAotOjEwQzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotOjEwQzgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwQzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwQzg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAotOjEwQzg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAotOjEwQzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjEwQzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAotOjEwQzhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAotOjEwQzhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAotOjEwQzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAotOjEwQzhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAotOjEwQzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAotOjEwQzhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAotOjEwQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNwotOjEwQzkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwQzkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwQzkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwQzk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwQzk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwQzk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwQzk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwQzk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNwotOjEwQzk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwQzlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NwotOjEwQzlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwQzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwQzlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NwotOjEwQzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NwotOjEwQzlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNwotOjEwQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwQ0ExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwQ0EyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwQ0EzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgotOjEwQ0E0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgotOjEwQ0E1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwQ0E2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwQ0E3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwQ0E4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwQ0E5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwQ0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwQ0FCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwQ0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwQ0FEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwQ0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgotOjEwQ0FGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwQ0IxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwQ0IyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwQ0IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwQ0I0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwQ0I1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwQ0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwQ0I3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwQ0I4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwQ0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQotOjEwQ0JBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwQ0JCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQotOjEwQ0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwQ0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwQ0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQotOjEwQ0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwQ0MxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAotOjEwQ0MyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotOjEwQ0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwQ0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAotOjEwQ0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwQ0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAotOjEwQ0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAotOjEwQ0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwQ0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAotOjEwQ0NBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAotOjEwQ0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwQ0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAotOjEwQ0NEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwQ0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwQ0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAotOjEwQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMwotOjEwQ0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwQ0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotOjEwQ0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwQ0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwQ0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMwotOjEwQ0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwQ0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMwotOjEwQ0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwQ0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwQ0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MwotOjEwQ0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwQ0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MwotOjEwQ0REMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MwotOjEwQ0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwQ0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMwotOjEwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgotOjEwQ0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwQ0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotOjEwQ0UzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgotOjEwQ0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwQ0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwQ0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwQ0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgotOjEwQ0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwQ0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwQ0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgotOjEwQ0VCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwQ0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwQ0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgotOjEwQ0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwQ0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQotOjEwQ0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotOjEwQ0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotOjEwQ0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQotOjEwQ0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQotOjEwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQotOjEwQ0Y2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwQ0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwQ0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQotOjEwQ0Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQotOjEwQ0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQotOjEwQ0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQotOjEwQ0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwQ0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQotOjEwQ0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwQ0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQotOjEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAotOjEwRDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotOjEwRDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotOjEwRDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAotOjEwRDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwRDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAotOjEwRDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjEwRDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAotOjEwRDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAotOjEwRDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAotOjEwRDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAotOjEwRDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwRDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAotOjEwRDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAotOjEwRDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAotOjEwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgotOjEwRDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgotOjEwRDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgotOjEwRDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwRDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgotOjEwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwRDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwRDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwRDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwRDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgotOjEwRDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwRDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgotOjEwRDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwRDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwRDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwRDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwRDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwRDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQotOjEwRDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwRDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQotOjEwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQotOjEwRDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQotOjEwRDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQotOjEwRDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQotOjEwRDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQotOjEwRDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQotOjEwRDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQotOjEwRDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQotOjEwRDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQotOjEwRDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQotOjEwRDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQotOjEwRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAotOjEwRDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAotOjEwRDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAotOjEwRDMzMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMERDRAotOjEwRDM0MDAwMDAwMDAwMEQzQzAyMDgwMDI0NDI3QTYwM0MwMzA4MDAwMwotOjEwRDM1MDAwMjQ2MzdBRDhBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkRFQQotOjEwRDM2MDAwMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjFBRgotOjEwRDM3MDAwM0MxMDA4MDAyNjEwMzFEODNDMUMwODAwMjc5QzdBNjAxRAotOjEwRDM4MDAwMEUwMDEyNTMwMDAwMDAwMDAwMDAwMDBEM0MwMjgwMDA1RgotOjEwRDM5MDAwMzBBNUZGRkYzMEM2MDBGRjM0NDMwMTgwM0MwODgwMDAwOQotOjEwRDNBMDAwOEQwOTAxQjgwNTIwRkZGRTAwMDAwMDAwQUM2NDAwMDBGQwotOjEwRDNCMDAwMjQwNDAwMDJBNDY1MDAwOEEwNjYwMDBBQTA2NDAwMEIxMwotOjEwRDNDMDAwQUM2NzAwMTgzQzAzMTAwMDAzRTAwMDA4QUQwMzAxQjg4RgotOjEwRDNEMDAwM0MwNTYwMDA4Q0EyNEZGODA0NDBGRkZFMDAwMDAwMDBGNgotOjEwRDNFMDAwQUNBNDRGQzAzQzAzMTAwMDNDMDQwMjAwQUNBNDRGQzRFQQotOjEwRDNGMDAwMDNFMDAwMDhBQ0EzNEZGODI3QkRGRkU4QUZCRjAwMTQ1RgotOjEwRDQwMDAwQUZCMDAwMTAwRTAwMTJBNTAwODA4MDIxM0MwNDgwMDhGRgotOjEwRDQxMDAwMzQ4NTAwODA5MEE2MDAwNTI0MDNGRkZFMDIwMDIwMjEzMQotOjEwRDQyMDAwMDBDMzEwMjQ4RkJGMDAxNDhGQjAwMDEwQTBBMjAwMDUwRAotOjEwRDQzMDAwMEEwMDEyQUYyN0JEMDAxODI3QkRGRkU4QUZCMDAwMTBFQgotOjEwRDQ0MDAwQUZCRjAwMTQwRTAwMEVENjAwODA4MDIxM0MwNjgwMDg3RAotOjEwRDQ1MDAwMzRDNTAwODA5MEE0MDAwMDI0MDIwMDUwMzA4MzAwRkZGNwotOjEwRDQ2MDAwMTA2MjAwMDczQzA5ODAwMDAyMDAyMDIxOEZCRjAwMTREOQotOjEwRDQ3MDAwOEZCMDAwMTBBRDIwMDE4MDBBMDAwRkM1MjdCRDAwMTgzNQotOjEwRDQ4MDAwMjQwODAxMDAzQzA3ODAwMDAyMDAyMDIxOEZCRjAwMTQwNwotOjEwRDQ5MDAwOEZCMDAwMTBBQ0U4MDE4MDBBMDAwRkM1MjdCRDAwMTg0RQotOjEwRDRBMDAwMjdCREZGODgzQzA4ODAwOEFGQkUwMDcwQUZCNjAwNjg5QgotOjEwRDRCMDAwQUZCNDAwNjBBRkIwMDA1MEFGQkYwMDc0QUZCNzAwNkM0NgotOjEwRDRDMDAwQUZCNTAwNjRBRkIzMDA1Q0FGQjIwMDU4QUZCMTAwNTQ2OQotOjEwRDREMDAwMzUwNTAwODAzQzA3ODAwMDhDRjEwMTI4OTBBNDAwMDlFQwotOjEwRDRFMDAwQUNFMDAwODQ5MEE2MDAwNTMwOTAwMEZGMDAwMEEwMjE3MQotOjEwRDRGMDAwMDAwNjE4MjczMDYyMDAwMTAwMDBCMDIxMTQ0MDAwNjdDOAotOjEwRDUwMDAwMDAwMEYwMjE5MEE5MDAwMDI0MDUwMDIwMzEyNDAwRkYzNAotOjEwRDUxMDAwMTA4NTAwMTYyNDBBMDA1MDEwOEEwMDhEMDAwMDAwMDBCQgotOjEwRDUyMDAwM0MwQzA4MDA4RDhDMDBEQzI1OEIwMDAxM0MwMTA4MDBDMAotOjEwRDUzMDAwQUMyQjAwREMwRTAwMTM5QjAwMDAwMDAwOEZCRjAwNzRCQQotOjEwRDU0MDAwOEZCRTAwNzA4RkI3MDA2QzhGQjYwMDY4OEZCNTAwNjQxNwotOjEwRDU1MDAwOEZCNDAwNjA4RkIzMDA1QzhGQjIwMDU4OEZCMTAwNTQ1RAotOjEwRDU2MDAwOEZCMDAwNTAwM0UwMDAwODI3QkQwMDc4MDAwMDAwMEREOAotOjEwRDU3MDAwM0MxNTgwMDBBRkEwMDAzMDk2QTIwMTE2OEVCOTAxMDRDMAotOjEwRDU4MDAwM0MxRjAwMjAzNkIyMEMwMDAzM0ZDMDI0MDAxOEI4MkIwQgotOjEwRDU5MDAwMDAxNzMxNDBBRkE2MDAzMDhFQUUwMTA0MzA1M0ZGRkZCQwotOjEwRDVBMDAwM0MwRjAwNDAwMjcyMzgyMTAxQ0Y2ODI0OTBGMjAwMEQzOAotOjEwRDVCMDAwMTFBMDAwNDgzNEM0MDA0MDMyNDMwMDIwMTQ2MDAwMDIyRgotOjEwRDVDMDAwMzQ4NjAwODAwMDgwMzAyMTE0QzAwMDk0QUZBNjAwMzA2MwotOjEwRDVEMDAwM0MwOTgwMDgzNTI1MDA4MDkwQTgwMDA4MzEwNjAwNDBFRAotOjEwRDVFMDAwNTBDMDAwMDYzQzA4ODAwODI0MEEwMDA0MTIwQTAwQTM2OAotOjEwRDVGMDAwMjQwQjAwMTIxMjBCMDAyOTNDMDg4MDA4MzUxNTAxMDA4RAotOjEwRDYwMDAwM0MxNzgwMDA5NkYzMDExQTk0RUUwMDBFOTJBRjAwMDhDQQotOjEwRDYxMDAwMzI0QzAwMDQzMjc1RkZGRjAxRUU2ODA0QUZBRDAwM0NGMAotOjEwRDYyMDAwOENGMzAwMDQxMTgwMDAzMThDRjcwMDA4MzUwMzAwODA3MgotOjEwRDYzMDAwOTA3ODAwMDgzMzA3MDA0MDE0RTAwMDI4MDAwMDAwMDA0NAotOjEwRDY0MDAwOEM3MjAwNTAwMjcyODgyMzA2MjAwMDA2M0MwNjgwMDA3RgotOjEwRDY1MDAwOEM3RjAwMzQwMjdGQzgyMzA3MjIwMDg0OEU4MjAwMDg1QQotOjEwRDY2MDAwM0MwNjgwMDBBQ0MwMDA0NDI0MDIwMDAxOEZCRjAwNzQ1RgotOjEwRDY3MDAwOEZCRTAwNzA4RkI3MDA2QzhGQjYwMDY4OEZCNTAwNjRFNgotOjEwRDY4MDAwOEZCNDAwNjA4RkIzMDA1QzhGQjIwMDU4OEZCMTAwNTQyQwotOjEwRDY5MDAwOEZCMDAwNTAwM0UwMDAwODI3QkQwMDc4MEUwMDBDQjhFMgotOjEwRDZBMDAwMDAwMDIwMjE4RkJGMDA3NDhGQkUwMDcwOEZCNzAwNkMwOAotOjEwRDZCMDAwOEZCNjAwNjg4RkI1MDA2NDhGQjQwMDYwOEZCMzAwNUNENAotOjEwRDZDMDAwOEZCMjAwNTg4RkIxMDA1NDhGQjAwMDUwMDNFMDAwMDhCMwotOjEwRDZEMDAwMjdCRDAwNzgwQTAwMEQxODAwQzAyMDIxMEUwMDE0NkMzMAotOjEwRDZFMDAwMDI2MDIwMjExNDQwRkZERjNDMDY4MDAwM0MwMzgwMDhEQwotOjEwRDZGMDAwMzQ2MzAwODA4QzY0MDAzNDAyNjQxMDIzMDQ0MDAwMThGQQotOjEwRDcwMDAwMDAwMDAwMDAzQzE0MDgwMDhFOTQzMTAwMjY5MDAwMDFCNwotOjEwRDcxMDAwM0MwMTA4MDBBQzMwMzEwMDBFMDAxMkE1MDIyMDIwMjE4RgotOjEwRDcyMDAwM0MwNDgwMDgzNDlGMDA4MDkzRkUwMDI1MDIyMDIwMjFDNQotOjEwRDczMDAwMzdDOTAwMDRBM0U5MDAyNTBFMDAxMkFGMDAwMDAwMDA2NQotOjEwRDc0MDAwMEUwMDBDOUUwMjIwMjAyMTBBMDAwRDQ1MjQwMjAwMDEzQgotOjEwRDc1MDAwM0MxNDA4MDAyNjk0N0FDODBBMDAwRDA3M0MxNTgwMDA4NgotOjEwRDc2MDAwOEM2ODAwMzAwMjY4MzAyMzE4QzAwMDA4MjQwQjAwMENCRAotOjEwRDc3MDAwM0MwOTA4MDA4RDI5MzEwMDMyNTIwMEZDMDAwMEE4MjEyQwotOjEwRDc4MDAwMjUyNTAwMDEzQzAxMDgwMEFDMjUzMTAwQUZBQjAwMzA3RAotOjEwRDc5MDAwOEM2QTAwMzAwMTUzNDAyMzE5MDAwMEUwMDJBODYwMkE3RgotOjEwRDdBMDAwMTU4MEZGREQwMDAwMDAwMDEyQTgwMDJBMDJBODc4MjNERgotOjEwRDdCMDAwMDI2ODk4MjEzMUY1RkZGRjMyNDcwMDAyMTBFMDAwMzQ4MwotOjEwRDdDMDAwMzI1OTAwMTAzQzEzODAwODM2NzAwMDgwOTIxRTAwMDgwOQotOjEwRDdEMDAwMzNENjAwNDA1MkMwMDBEMzhFODIwMDA4MDIyMDIwMjFBMAotOjEwRDdFMDAwMEUwMDEyQTUyNDEyMDAxOEEyMTIwMDA5OTIxNzAwMDVCQgotOjEwRDdGMDAwMjQxOEZGRkUwMjIwMjAyMTAyRjhBODI0MEUwMDEyQUZGOAotOjEwRDgwMDAwQTIxNTAwMDUyNDA0MDAzOTAwMDAyODIxMEUwMDE0NDc0OQotOjEwRDgxMDAwMjQwNjAwMTgwQTAwMEQ0NTI0MDIwMDAxOTI5NjAwMEMwRgotOjEwRDgyMDAwM0MwNDgwMDgzNDlFMDA4MDhGQzcwMDM4MDAxNkEzMDA5NwotOjEwRDgzMDAwMzY5MDAwODEzMEM2MDBGRjAyMjAyMDIxMEUwMDBDOERBMgotOjEwRDg0MDAwMzIwNUYwODEzQzA2ODAwMEFDQzAwMDQ0MEEwMDBENDU2MgotOjEwRDg1MDAwMjQwMjAwMDEzQTRFMDAwMTMxQ0QwMDAxMTVBMEZGQUVCNwotOjEwRDg2MDAwMDI2ODk4MjEwQTAwMEQ5NzAwMDAwMDAwMDA0MEY4MDlBNgotOjEwRDg3MDAwMjQwNDAwMTYwQTAwMEQ0NTI0MDIwMDAxMDIyMDIwMjE4NAotOjEwRDg4MDAwMEUwMDE1MjkwMEUwMjgyMTBBMDAwQ0ZBOEZCRjAwNzQ1MQotOjEwRDg5MDAwMTMyMEZGNzMzQzA0ODAwODM0ODkwMDgwOEQyMzAwMzhGNgotOjEwRDhBMDAwOEM4MjAwMDQwMkUyRjgyMzFGRTBGRjZFM0MwNjgwMDAzOQotOjEwRDhCMDAwMDJFMzMwMjMwNEMyMDAwMTAwNjBCODIxQUZBODAwMThDMQotOjEwRDhDMDAwM0MxOTgwMDBBRkIzMDAxMEFGQjUwMDE0OTcyNjAxMjBCQgotOjEwRDhEMDAwOEQyQTAwMzA5NTI0MDA1QzhGQjgwMDNDOEZBRDAwMzA1RAotOjEwRDhFMDAwMzA4N0ZGRkYzMERGRkZGRjAzRTg3MDIxMzcyRjQwMDA1NAotOjEwRDhGMDAwMDMwNzI4MkI4RTgyMDAwNDAxQ0Y2MDIxMDFBNTU4MjU0MwotOjEwRDkwMDAwQUZBOTAwNDhBRkFDMDAyMEFGQUEwMDI4QUZBQjAwMzBGMQotOjEwRDkxMDAwQUZBQTAwMjRBRkEwMDAyQ0FGQjcwMDM0MDA0MEY4MDkzNAotOjEwRDkyMDAwMjdBNDAwMTA4RkE4MDAzMDMxMDMwMDAyMTA2MDAwMDIwRAotOjEwRDkzMDAwOEZBOTAwNDgzMjUyMDBGRTkxMjMwMDA4MzA2OTAwNDA1MAotOjEwRDk0MDAwNTEyMDAwMTM4RkE0MDAyNDNDMDI4MDA4OEM0ODAwMDQ1RQotOjEwRDk1MDAwMTExNzAwQTQyNDBBMDAxNDMyNTgwMDAxNTMwMDAwMENDRgotOjEwRDk2MDAwOEZBNDAwMjQyNDE5MDAwQzEyMTkwMEMwMkExRjAwMERENgotOjEwRDk3MDAwMTNFMDAwQkEyNDA2MDAwRTI0MDQwMDBBNTIwNDAwMDEzOQotOjEwRDk4MDAwMjQxNjAwMDg4RkE5MDAyNDI1MjQwMDAxQUZBNDAwMjQzOAotOjEwRDk5MDAwM0MxODgwMDgzNzA1MDA4MDhGQTcwMDE0OENBRjAwMzAzQQotOjEwRDlBMDAwMzQwQ0ZGRkYwMDg3NzAyMUFDQUUwMDMwQUZBRjAwMzgwMQotOjEwRDlCMDAwOTBBRDAwNEU4Q0FCMDAzMDhGQTgwMDNDMDFBQzEwMDQ0MQotOjEwRDlDMDAwMDE2MjUwMjFBQ0FBMDAzNDhGQTYwMDMwMDJFODIwMjE2OQotOjEwRDlEMDAwMzBDMzAwMDgxMDYwMDAwQkFGQTQwMDQwOENCOTAwMjBEOQotOjEwRDlFMDAwMTMyNDAwOEYzMEM2MDBGRjkyODkwMDBDOEZBNzAwMzRFQgotOjEwRDlGMDAwMDAwOTgzMDAzNjA0MDA4MDMwODVGMDgwMEUwMDBDOEQxNQotOjEwREEwMDAwMDIyMDIwMjEzQzBBODAwODM1NTAwMDgwOEUwMzAwMzAxRgotOjEwREExMDAwOEZBODAwMzgwMDY4MzAyMzE4QzAwMDY1MjYyRjAwODBDQQotOjEwREEyMDAwM0MwRTA4MDA4RENFMzE5ODI0MDdGRjgwMDFFNzY4MjQ2MgotOjEwREEzMDAwMzFFQzAwN0YzQzA2ODAwMDNDMDI4MDA0MzFDQjAwMTBCQQotOjEwREE0MDAwQUNDRDAwOTAxMTYwMDAzQjAxODIyODIxOTBCODAwNkJBMgotOjEwREE1MDAwNTcwMDAwMzkzQzA0ODAwODI0MUYwMDAxQTBCRjAwNkI2MAotOjEwREE2MDAwOTRDNTAwN0EyNEI5MDAwQUE2MTkwMDEyM0MwQTgwMDg1RAotOjEwREE3MDAwMzU0NTAwODA5MEE4MDAwODMxMTAwMDQwMTYwMDAwMDREMQotOjEwREE4MDAwM0MwMzgwMDgzMjRCMDAwMTE1NjAwMDZCMDAwMDAwMDA3MQotOjEwREE5MDAwMzQ2NDAwODA4QzhDMDAyMDhGQjIwMDQwMTE5MjAwMDkwOQotOjEwREFBMDAwMzQ2MzAxMDA4QzZEMDAwMDAyNkQxMDIzMTg0MDAwMTJEOQotOjEwREFCMDAwOEZCODAwNDAyNDFFMDAwMUFDOTgwMDIwQUM3MzAwMDAxOQotOjEwREFDMDAwQUM3NzAwMDQxNkMwMDAyRDAwMDAwMDAwMTdDMDAwMjcyRQotOjEwREFEMDAwMDAwMDAwMDAxMkEwMDAwNTAwMDAxODIxOEZBNTAwMzBGMgotOjEwREFFMDAwMzBCNTAwMDQ1MkEwRkU5NTAwNjAxMDIxMjQwMzAwMDEwRgotOjEwREFGMDAwMEEwMDBDRjkwMDYwMTAyMThDNkUwMDAwMTVEM0ZGRjFCNAotOjEwREIwMDAwMDAwMDAwMDA4QzY3MDAwNDAyRTc3ODIzMDVFMUZGRTlDQwotOjEwREIxMDAwOEZCODAwNDAwQTAwMEU1QjAwMDAwMDAwMEEwMDBEOTg1QwotOjEwREIyMDAwMDAwMDQwMjEwMDQwRjgwOTI0MDQwMDE3MEEwMDBENDVCOAotOjEwREIzMDAwMjQwMjAwMDEzQzA0ODAwODM0OTAwMDgwMjQxRTAwMDE2RgotOjEwREI0MDAwMDIyMDIwMjEwRTAwMTJBNUE2MUUwMDEyOTIwOTAwMjUxNwotOjEwREI1MDAwMDIyMDIwMjEyNDFFMDAwMTM1MjIwMDAxMEUwMDEyQUZGOAotOjEwREI2MDAwQTIwMjAwMjUwQTAwMEU0NjNDMEE4MDA4MEUwMDBDOUUwOAotOjEwREI3MDAwMDIyMDIwMjEwQTAwMEU1RjAwMDAwMDAwMEUwMDEyQTUwNgotOjEwREI4MDAwMDIyMDIwMjEzQzE5ODAwODM3MzcwMDgwMDIyMDIwMjEwNAotOjEwREI5MDAwMEUwMDEyQUZBMkY2MDAwOTAyQzAzMDIxMjQwNDAwMzdBMwotOjEwREJBMDAwMEUwMDE0NDcwMDAwMjgyMTBBMDAwRTVEMDAwMDAwMDA0RQotOjEwREJCMDAwOEZBNjAwMTg1OEMwRkZBRTNDMEE4MDA4MEUwMDEyQTVDMAotOjEwREJDMDAwMDIyMDIwMjE5MjAzMDAyNTAyMjAyMDIxMjQxRTAwMDE5MgotOjEwREJEMDAwMzQ2MjAwMDQwRTAwMTJBRkEyMDIwMDI1MEEwMDBFNDZCNQotOjEwREJFMDAwM0MwQTgwMDgxMjBBMDAzMDJBMEIwMDE1MTE2MDAwMjQzQwotOjEwREJGMDAwMjQwRDAwMTYyNDBDMDAwQzU2MENGRjU4MzI1ODAwMDE1RQotOjEwREMwMDAwM0MwNTgwMDg5MEFGMDAxQjI0MDdGRkJEMjQxNjAwMEVDMgotOjEwREMxMDAwMDFFNzcwMjRBMEFFMDAxQjBBMDAwRTAxMzI1ODAwMDE3QgotOjEwREMyMDAwM0MxRjgwMDA5N0U1MDExQTUwQTBGRjZGMzRDNjAwMTAxQQotOjEwREMzMDAwMEEwMDBFMjU5Mjg5MDAwQzhDQjMwMDMwOEU5NjAwMDhFNQotOjEwREM0MDAwMjQwNDAwMTgyNjc0MDAwMTAyQzBGODA5QUNCNDAwMzBBNgotOjEwREM1MDAwOEZCMTAwMzAwQTAwMENGOTMyMjIwMDA0MTYwNkZGNEE4OAotOjEwREM2MDAwOEZBOTAwMjQwQTAwMEUwQzI0MTYwMDEwMjQxMDAwMEVBOAotOjEwREM3MDAwNTJEMEZGNDQyNDE2MDAxMDBBMDAwRTBCMjQxNjAwMTY4MgotOjEwREM4MDAwNTYwREZGMzYzMjU4MDAwMTNDMDU4MDA4OTBBRjAwMUI0RQotOjEwREM5MDAwMjQwN0ZGQkQyNDE2MDAxMDAxRTc3MDI0QTBBRTAwMUI2RQotOjEwRENBMDAwMEEwMDBFMDEzMjU4MDAwMTBBMDAwRTAwMjQxNjAwMTI2QwotOjEwRENCMDAwM0MwMzgwMDA4QzYyMDFCODA0NDBGRkZFMjQwNDA4MDA4RAotOjEwRENDMDAwQUM2NDAxQjgwM0UwMDAwODAwMDAwMDAwM0MwNTgwMDhENwotOjEwRENEMDAwOTRBMjAwNDgzMDg0RkZGRjEwNDAwMDE5MjQ4NDAwMTJGMQotOjEwRENFMDAwOTRBOTAwNDgzQzAzODAwMDMxMjhGRkZGMDEwNDM4MkEzMgotOjEwRENGMDAwMTBFMDAwMTMzNDY2MDE4MDk0NkQwMTIwOEY4QzAwMDRDNQotOjEwREQwMDAwMjQwQjAwMUEzMUFBRkZGRjMxODM0MDAwQTBDQjAwMEI4NwotOjEwREQxMDAwMTA2MDAwMTAyNTQ0RkZGRTk0QUYwMDQ4MzFFRUZGRkY3NQotOjEwREQyMDAwMDFDNDI4MkIxNEEwMDAwQzhGOTgwMDBDQTRDNDAwMTQ2QwotOjEwREQzMDAwOEY4NjAwMEMzNEMyMDAwMTAzRTAwMDA4QUY4MjAwMENBMwotOjEwREQ0MDAwM0MwNzgwMDAyNDA0MDAwMzM0RTIwMTgwMDNFMDAwMDg2MwotOjEwREQ1MDAwQTA0NDAwMEI4Rjk4MDAwQzI0MTlGRkZFMDMxOTEwMjQxNwotOjEwREQ2MDAwMDNFMDAwMDhBRjgyMDAwQzI3QkRGRkQ4QUZCNDAwMjA0RAotOjEwREQ3MDAwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCRjAwMjRBNgotOjEwREQ4MDAwQUZCMDAwMTAwMDgwMTgyMTMwQjNGRkZGMzBEMkZGRkY4QQotOjEwREQ5MDAwMzBGNEZGRkYzQzExODAwMDhFMjIwMUI4MDQ0MEZGRkVFQQotOjEwRERBMDAwMzYzMDAxODBBRTAzMDAwMDAyNDAyMDIxMEUwMDBFREQ1RgotOjEwRERCMDAwQUUyMzAwMjA4Rjg2MDAwQzhGODUwMDA0OEY4MzAwMDAyNwotOjEwRERDMDAwMzBDNDgwMDBBNjEzMDAwQ0E2MTIwMDBFQTYwNTAwMTA5OQotOjEwREREMDAwQUUwMzAwMjhBNjE0MDAwODEwODAwMDBFM0MwRjgwMDAzRgotOjEwRERFMDAwOTYyQzAxMTYzMThCRkZGQzI1NkEwMDA0MDE1MTQ4MjE1NQotOjEwRERGMDAwOEQyODQwMDAzMTA3RkZGRjE0RTAwMDA3MjQxNEJGRkYwNwotOjEwREUwMDAwM0MwRUZGRkYzNUNEN0ZGRjAwQ0QzMDI0QUY4NjAwMENFOAotOjEwREUxMDAwM0MwRjgwMDAyNDE0QkZGRjM1RjEwMTgwMDBENDk4MjQwQQotOjEwREUyMDAwQTYzMzAwMjY4REYyMDEwNEFFMzIwMDJDM0MwNjEwMDAxMQotOjEwREUzMDAwQURFNjAxQjg4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM2MwotOjEwREU0MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDhFQgotOjEwREU1MDAwMjdCRDAwMjgyN0JERkZEOEFGQjEwMDE0M0MxMTgwMDBCQQotOjEwREU2MDAwMDA4MDQwMjFBRkI0MDAyMEFGQjAwMDEwMzBENEZGRkZERAotOjEwREU3MDAwMzYzMDAxODAwMjgwMjAyMUFFMDgwMDAwQUUyODAwMjA0QwotOjEwREU4MDAwQUZCMzAwMUNBRkIyMDAxODMwRjNGRkZGQUZCRjAwMjRFOAotOjEwREU5MDAwMEUwMDBFREQzMEIyRkZGRjhGODUwMDBDOEY4MzAwMDQ3MwotOjEwREVBMDAwMjQwNkJGRkYwMEE2MjAyNEE2MTIwMDBDQTYxNDAwMEUxNAotOjEwREVCMDAwQTYxMzAwMDhBNjA0MDAyNkE2MDMwMDEwM0MwMjEwMDBDQQotOjEwREVDMDAwQUUyMjAxQjg4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM5NgotOjEwREVEMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg1QgotOjEwREVFMDAwMjdCRDAwMjgzQzAyODAwMDM0NDUwMTgwM0MwNDgwMDBBRQotOjEwREVGMDAwOEM4MzAxQjgwNDYwRkZGRTI0MDcyMDAwMjQwNjAwMDI4MgotOjEwREYwMDAwQTRBNzAwMDhBMEE2MDAwQkE0QTAwMDEwM0MwNTEwMDBDOAotOjEwREYxMDAwQUM4NTAxQjgwM0UwMDAwODAwMDAwMDAwM0MwNTgwMDA2QgotOjEwREYyMDAwMzRBNDAwNzA4QzhBMDAwMDkwQTYwMTEyOEY4NDAwMDQzMwotOjEwREYzMDAwMjdCREZGRjAzMEMzMDBGRjAwMDMxODgyMzA4MjAxMDBDQwotOjEwREY0MDAwMDAwMDM4MjExMDQwMDAzOTI0NjYwMDAzMzA4NzQwMDA2QgotOjEwREY1MDAwNTBFMDAwMzkzMDg4MjAwMDAwMDYxMDgwMDA0NUM4MjFCQwotOjEwREY2MDAwOEYyRjQwMDAyNDc4MDAwNDAwMTg3MDgwQUZBRjAwMDBBRAotOjEwREY3MDAwMDFDNTY4MjE4REFDNDAwMEFGQUMwMDA0OTRBQjAxMTYyNAotOjEwREY4MDAwMzE2OUZGRkMwMTI1NDAyMThEMDU0MDAwQUZBNTAwMDg0NwotOjEwREY5MDAwOEZBOTAwMDgwMDAwMzAyMTAwMDAyODIxM0MwNzA4MDA1QwotOjEwREZBMDAwMjRFNzAxMDAwQTAwMEY5RTI0MDgwMDA4OTA0MjAwMDBBOAotOjEwREZCMDAwMjRBNTAwMDEyQ0FEMDAwQzAwNjJDODIxMDAxOUMwODAwRQotOjEwREZDMDAwMDMwNzc4MjE4REVFMDAwMDExQTAwMDA2MDBDRTMwMjY1OAotOjEwREZEMDAwMDNBNTEwMjExNEE4RkZGNTAwMDUxQTAwNTUyMEZGRjQzMQotOjEwREZFMDAwOTA0MjAwMDAzQzA0ODAwMDM0ODcwMDcwM0MwNTA4MDAyQgotOjEwREZGMDAwOENBNTMxMDQ4Q0UzMDAwMDJDQTgwMDIwMTEwMDAwMDkzRQotOjEwRTAwMDAwMDA2QTM4MjMwMDA1NTg4MDNDMEMwODAwMjU4QzMxMDgzNAotOjEwRTAxMDAwMDE2QzQ4MjEyNEFBMDAwMUFEMjcwMDAwM0MwMTA4MDA0MgotOjEwRTAyMDAwQUMyQTMxMDRBRjg2MDAwMDI0MDcwMDAxMDBFMDEwMjE3MwotOjEwRTAzMDAwMDNFMDAwMDgyN0JEMDAxMDExMDBGRkZDMDAwMDM4MjE5QwotOjEwRTA0MDAwMDAwNjYwODAwMTg1NTgyMThENjQ0MDAwMjQ2OTAwMDQyOQotOjEwRTA1MDAwMDAwOTM4ODBBRkE0MDAwMDAwRTUxODIxOEM2NjQwMDA1QwotOjEwRTA2MDAwQUZBMDAwMDgwQTAwMEY4RUFGQTYwMDA0M0MwMjA4MDAxMwotOjEwRTA3MDAwOEM0MjAwMzgyN0JERkZEOEFGQjQwMDIwQUZCMjAwMThFMwotOjEwRTA4MDAwQUZCRjAwMjRBRkIzMDAxQ0FGQjEwMDE0QUZCMDAwMTA5RAotOjEwRTA5MDAwM0MxNDA4MDAyNjk0MDAzODE0NDAwMDAyMjQ1MkZGRkY2QwotOjEwRTBBMDAwMDAwMDkwMjE4Rjg1MDAwNDMwQTM0MDAwMTA2MDAwMEYxNQotOjEwRTBCMDAwMzBBOTgwMDAzQzA2MDAyMDAwQTYyMDI0MTA4MDAwMEIyMAotOjEwRTBDMDAwOEY4NzAwMEMyNDA4QkZGRjAwQTgyODI0MzRFMzEwMDAyOQotOjEwRTBEMDAwQUY4NTAwMDQzMEFGMjAwMDE1RTAwMDBBM0MxMTAwMDRCOQotOjEwRTBFMDAwMjQxM0ZGQkYwQTAwMEZFRjAwNzMxMDI0MTUyMDAwNjJGNQotOjEwRTBGMDAwM0MwQjAwMjAzMEFGMjAwMDExRTBGRkY5OEY4MzAwMENCMwotOjEwRTEwMDAwM0MxMTAwMDQwMEIxODAyNDEyMDBGRkY2MjQxM0ZGQkY2RAotOjEwRTExMDAwMzQ2MjAwNDAzMEI4MDEwMDEzMDAwMDBGQUY4MjAwMENFMQotOjEwRTEyMDAwM0MxRjAwMjAwMEJGQzgyNDEzMjAwMDA1M0MwQTgwMDBDQgotOjEwRTEzMDAwM0MwMzAwMDQwMEEzMTAyNDEwNDAwMEM4MDAwMDAwMDBBRAotOjEwRTE0MDAwOTU0OTAxMUU5NTQ4MDExQzMxMjZGRkZGMDAwODNDMDAzRgotOjEwRTE1MDAwMDBDNzIwMjVBRjg0MDAwMDNDMEQ4MDAwOTVBQzAxMEM2OQotOjEwRTE2MDAwMzBBQjEwMDAxMTYwMDAwODMxODZGRkZGMzBBRTAwMjA5OAotOjEwRTE3MDAwMTVDMDAwMDYyNDExMDAwNTNDMTAxMDAwMDBCMDc4MjRFMgotOjEwRTE4MDAwMTVFMDAwNzMzQzFGMEMwMDI0MTEwMDAxMzBBMjAxMDBCNwotOjEwRTE5MDAwNTQ0MDAwMDkzQzBDMDAwMThGODMwMDE0NTQ2MDAwMDZCOQotOjEwRTFBMDAwM0MwQzAwMDE4Rjg3MDAwQzMwRTQ0MDAwMTA4MDAwOUE4NgotOjEwRTFCMDAwM0MwQTFGMDEzQzBDMDAwMTAwQUMzMDI0MTRDMDAwNkM3MAotOjEwRTFDMDAwM0MxMDgwMDA4Rjg0MDAwQzMwOTM0MDAwMTI2MDAwMDZFOQotOjEwRTFEMDAwM0MwMzEwMDAzQzE5MEYwMDAwQjlDMDI0MTMwMDAwOEI1MQotOjEwRTFFMDAwM0MxRjgwMDAzQzAzMTAwMDAwQTMxMDI0MTA0MDAwMkNCMgotOjEwRTFGMDAwM0MwNjgwMDAzQzA3MDgwMDhDRTcwMDMwMTRFMDAwNzMwOAotOjEwRTIwMDAwMzA4ODQwMDAzMEE2MDEwMDEwQzAwMDk4M0MwRTBGMDA3RQotOjEwRTIxMDAwMDBBRTY4MjQzQzBDMDIwMDExQUMwMDk0OEY5MzAwMDAwNwotOjEwRTIyMDAwMDI3MjgwMjQwMjE0NzgyMTkxRjQwMDA0MjY5MjAwMDRFMgotOjEwRTIzMDAwMDAxMjIxQzAzQzBFODAwMDk1QzYwMTBFMzYyNzAwMDI1OAotOjEwRTI0MDAwMjRENDAwMDQzMjg2RkZGRjI0MDUwMDAyMEUwMDBGMDREMAotOjEwRTI1MDAwMDAwMDAwMDA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4QgotOjEwRTI2MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAwMDEwMjE4MQotOjEwRTI3MDAwMDNFMDAwMDgyN0JEMDAyODAwQUI1MDI0MTE0MEZGOUU5QQotOjEwRTI4MDAwMzBBRjIwMDA4RjhDMDAwQzNDMEVGRkZGMzVDRDdGRkZBMAotOjEwRTI5MDAwMDBBRDI4MjQzNTgzODAwMDBBMDAwRkRGQUY4NTAwMDQxRAotOjEwRTJBMDAwOENEMDQwMDAzMjBGMDEwMDExRTAwMDNDMzBCODAxMDA3QQotOjEwRTJCMDAwM0MxMDA4MDA4RTEwMDAyNDEzMDAwMDE0MzIzMzAwMDRCOAotOjEwRTJDMDAwM0MwMjBGMDAwMEEyRjgyNDNDMTkwMjAwMTNGOTAwMEZEMQotOjEwRTJEMDAwOEY4MzAwMDA5NEM5MDEwRTAyMjAzODIxMDA3MjU4MjQ1NwotOjEwRTJFMDAwMDE3NDUwMjE5MTQ4MDAwNDI1MjQwMDA0MzA4NkZGRkY2QQotOjEwRTJGMDAwMjUxNDAwMDQwMDE0MjFDMDI0MDUwMDAyMEUwMDBGMDRBMAotOjEwRTMwMDAwMjQxMkZGRkUwMjEyODAyNDMyMzFGRkZCMjQwNzAwMDE5OQotOjEwRTMxMDAwMTIwNzAwNkYzMjA2MDAwMTE0QzAwMDkwM0MwRTgwMDAwRQotOjEwRTMyMDAwMzIwRjAwMDQxMUUwMDAwNDhGOTgwMDA0MzMxMDA4MDAzRAotOjEwRTMzMDAwMTYwMDAwNzgzQzFGODAwMDU2NjBGRkM3OEZCRjAwMjQ4NgotOjEwRTM0MDAwMEUwMDBGNjMwMDAwMDAwMDBBMDAxMDQwOEZCRjAwMjQ4MQotOjEwRTM1MDAwM0MxOTBCRkYwMEJGQzAyNDM3MzNGRkZGMDI3ODg4MkIyNgotOjEwRTM2MDAwNTIyMEZGOEEyNDExMDAwMTBBMDAxMDBEMjQxMTAwMDUxQgotOjEwRTM3MDAwM0MwRTA4MDA4RENFMDBEODk2MEYwMTBFMjQwNDAwODBCQwotOjEwRTM4MDAwMjVDRDAwMDEzMUU2RkZGRjI0MDUwMDAyM0MwMTA4MDAxNQotOjEwRTM5MDAwQUMyRDAwRDgwQTAwMTAzRDI0MDcwMDAzM0MxMjA4MDBGMQotOjEwRTNBMDAwOEU1MjAwMjQzMjQyMDAwMTEwNDBGRkFCOEZCRjAwMjQ4OAotOjEwRTNCMDAwOTRDNjAxMEUzNjI3MDAwMjAwMDAyMDIxMjRENDAwMDQ1OAotOjEwRTNDMDAwMzI4NkZGRkYwQTAwMTAzRDI0MDUwMDAyMTEwMEZGOEU3NwotOjEwRTNEMDAwMzBBNjAxMDAzQzBCMEYwMDAwQUI1MDI0M0MwOTAxMDBBQgotOjEwRTNFMDAwMDEyQTIwMkIxNDgwRkY4ODAwMDAwMDAwM0MwNTgwMDBEQgotOjEwRTNGMDAwOTRBNjAxMEUzNjI3MDAwMjI0MDQwMDgwMjRENDAwMDREMQotOjEwRTQwMDAwMzI4NkZGRkYwQTAwMTAzRDI0MDUwMDAyOTdFMzAxMTY0MwotOjEwRTQxMDAwMEEwMDEwMjQzQzAzMTAwMDAwQUE0ODI0M0MwODEwMDAwNQotOjEwRTQyMDAwMTUyOEZGNjUzQzBDMDAwMTMwQ0IwMjAwMTU2MEZGNjMyRQotOjEwRTQzMDAwMDBBQzMwMjQzQzE0ODAwMDk2OTIwMTBFMzYyNzAwMDI3NgotOjEwRTQ0MDAwMDAwMDIwMjEyNjQ1MDAwNDMwQTZGRkZGMEUwMDBGM0ZFQwotOjEwRTQ1MDAwMjQwNTAwMDIwQTAwMTA0MDhGQkYwMDI0MEUwMDBGNzEzNwotOjEwRTQ2MDAwMDAwMDAwMDAwQTAwMTAwMDhGODUwMDA0MDAwMDAwMDA3QQotOjEwRTQ3MDAwM0MwNjA4MDA4Q0M2MDBEMDAwMDUxNjAyMzA1MDAwMEY4NAotOjEwRTQ4MDAwMzhERjAwMDEyRkY5MDAwMTJFMDMwMDBDMDMyM0MwMjQwNAotOjEwRTQ5MDAwMTcwMEZGNjgwMDEwMjFDMDI2MDhGRkZDMkQwNzAwMDRBQwotOjEwRTRBMDAwMTRFMDAwMDczQzBFODAwMDM4Q0EwMDAyMkQ0OTAwMDEyQwotOjEwRTRCMDAwMDEyMzIwMjQ1MDgwMDAwRTAwMDUzMjQyM0MwRTgwMDBEMwotOjEwRTRDMDAwOTVDNjAxMEUwMDAwMjAyMTBBMDAxMDNBMzYyNzAwMDJFRQotOjEwRTREMDAwMzIzMzAwMDQ1MjYwMDAwMTM2MzEwMDAyM0MwQzgwMDBFRgotOjEwRTRFMDAwOTU4NjAxMEUwMjIwMzgyMTBBMDAxMDk5MDAwMDIwMjE5MwotOjEwRTRGMDAwMDAxMDE4MkIwMEMzNTgyNDE1NjAwMDBGM0MwNTgwMDA0NQotOjEwRTUwMDAwMDAxMDIxQzAzQzBFODAwMDk1QzYwMTBFMEEwMDEwM0E5MgotOjEwRTUxMDAwMzYyNzAwMDI5N0Y5MDEwRTAyMjAzODIxMjQwNDAxMDA1OQotOjEwRTUyMDAwMjczMTAwMDQzMjI2RkZGRjBFMDAwRjA0MjQwNTAwMDJFRAotOjEwRTUzMDAwMEEwMDEwNzgwMDAwMDAwMDk0QUQwMTBFMDAwMDIwMjFCOAotOjEwRTU0MDAwMjQwNTAwMDIyNUFDMDAwNDMxODZGRkZGMEUwMDBGMDRGNQotOjEwRTU1MDAwMzIyN0ZGRkIwQTAwMTBFQjAwMTAyMUMwOTVDNTAxMEUwOQotOjEwRTU2MDAwMDIyMDM4MjEwMDAwMjAyMTI0QUQwMDA0MzFBNkZGRkY0NQotOjEwRTU3MDAwMEUwMDBGMDQyNDA1MDAwMjBBMDAxMDcyMzIzMUZGRkI2NgotOjEwRTU4MDAwM0MwNTgwMDA4Q0E3MDE0ODI0MDMwMDA0MzRBNjAxODBDOAotOjEwRTU5MDAwMDAwNzI0MDIzMDgyMDBGRjEwNDMwMDEwM0MwNDgwMDA3QQotOjEwRTVBMDAwOEM4OTAxQjgwNTIwRkZGRTAwMDAwMDAwOEM4RjAxNDgxNwotOjEwRTVCMDAwMjQwRDAwMDIzQzBBMTAwMDAwMEY3NDAyQTRDRTAwMDhEMwotOjEwRTVDMDAwQTBDRDAwMEI4QzhDMDE0OEE0Q0MwMDEwOEM4QjAxNDQ5NgotOjEwRTVEMDAwQUNDQjAwMjQwM0UwMDAwOEFDOEEwMUI4OENBNDAxNDA1NQotOjEwRTVFMDAwM0MwMzgwMDAwMEMwMjgyMThDNjYwMUI4MDRDMEZGRkVGNwotOjEwRTVGMDAwMjQwODAwMUNBQ0E0MDAwMEEwQTgwMDBCM0MwNTEwMDBERgotOjEwRTYwMDAwQUM2NTAxQjgwM0UwMDAwODAwMDAwMDAwMjdCREZGRTg4QQotOjEwRTYxMDAwQUZCMDAwMTBBRkJGMDAxNDNDMTA2MDBDOEUwRDUwMDA2NgotOjEwRTYyMDAwMjQwRUZGN0YyNDA2MDAwMzAxQUU2MDI0MzU4ODM4MENEOQotOjEwRTYzMDAwM0MwNTgwMDBBRTA4NTAwMEFDQTYwMDA4M0MwMTA4MDA3NAotOjEwRTY0MDAwQUMyMDAwMjAwRTAwMTU1NTAwMDAwMDAwM0MwODYwMTZBQwotOjEwRTY1MDAwOEQwQTAwMDAzQzBCRkZGRjNDMDkwMDEwMzUyMzgwNTE2MAotOjEwRTY2MDAwM0MwNDYwMDAwMTRCMzgyNDNDMDI1MzUzQUUwMzUzN0NGRQotOjEwRTY3MDAwMzQ4NDIwMjAzQzA1MDgwMDI0QTU3OTA4MjQwNjAwMEFEQgotOjEwRTY4MDAwMTBFMjAwMDkzNTAzN0MwMDhDN0YwMDdDOEM3OTAwNzhENwotOjEwRTY5MDAwOEZCMDAwMTBBRjlGMDAxMDhGQkYwMDE0MjdCRDAwMTg2RgotOjEwRTZBMDAwMEEwMDEzQjFBRjk5MDAwODhEMEYwMDA0M0MxODYwMDBGOAotOjEwRTZCMDAwOEZCMDAwMTAwMUY4MTgyMThDN0YwMDdDOEM3OTAwNzhENQotOjEwRTZDMDAwQUY5RjAwMTA4RkJGMDAxNDI3QkQwMDE4MEEwMDEzQjFDMAotOjEwRTZEMDAwQUY5OTAwMDgzQzA0ODAwMDhDODM0MDAwMzQwMkZGRkZBNwotOjEwRTZFMDAwMTA2MjAwM0EwMDAwMDAwMDhDODc0MDAwMzBFNTAxMDAxNQotOjEwRTZGMDAwMTBBMDAwMjEwMDAwMDAwMDk0ODcwMTBFM0MwMjA4MDBEOQotOjEwRTcwMDAwOEM0MjAwRUM5NDg1MDEwRTNDMEQwODAwOERBRDMxQ0M5RgotOjEwRTcxMDAwMzBFM0ZGRkYzQzE4MDgwMDhGMTgwMEU4M0MwOTA4MDBCMAotOjEwRTcyMDAwOEQyOTMxQzgwMDQzNjAyMTMwQUJGRkZGMDE4Mzc4MkI3NgotOjEwRTczMDAwMDAwMEM4MjEwMUFCMTgyMTAwMDA1MDIxMDMxOTcwMjFFRAotOjEwRTc0MDAwMDA2QjMwMkIwMTJBNDAyMTAxQ0YyMDIxMDEwNjEwMjEyRQotOjEwRTc1MDAwM0MwMTA4MDBBQzJDMDBFQzNDMDEwODAwQUMyNDAwRThCMwotOjEwRTc2MDAwM0MwMTA4MDBBQzIzMzFDQzNDMDEwODAwQUMyMjMxQzg4QwotOjEwRTc3MDAwMDNFMDAwMDgwMDAwMDAwMDhDODg0MDAwOEY4QzAwMDgzNwotOjEwRTc4MDAwMTEwQzAwMzIzQzBEODAwMDk1QUIwMTBFM0MwQTA4MDBENAotOjEwRTc5MDAwOEQ0QTAwRTQzQzA4MDgwMDhEMDgwMEUwMzE2OUZGRkY2NQotOjEwRTdBMDAwMDE0OTI4MjEwMDAwMzAyMTAwQTk2MDJCMDEwNjM4MjFGMQotOjEwRTdCMDAwMDBFQzEwMjEzQzAxMDgwMEFDMjUwMEU0M0MwMTA4MDBGRAotOjEwRTdDMDAwQUMyMjAwRTAwM0UwMDAwODAwMDAwMDAwOTQ4MzAxMEU4QQotOjEwRTdEMDAwOTQ4MjAxMEUzQzE5MDgwMDhGMzkwMEY0M0MwOTA4MDBBRQotOjEwRTdFMDAwOEQyOTMxQ0MzQzBFMDgwMDhEQ0UwMEYwM0MwODA4MDA4RAotOjEwRTdGMDAwOEQwODMxQzgzMDc4RkZGRjMwNEJGRkZGMDMzODI4MjFFOAotOjEwRTgwMDAwMDEyQjE4MjEwMDAwNzgyMTAwMDA1MDIxMDBCODY4MkI0RQotOjEwRTgxMDAwMDFDRjYwMjEwMDZCMzAyQjAxMEEzODIxMDE4RDIwMjFBRQotOjEwRTgyMDAwMDBFNjEwMjEzQzAxMDgwMEFDMjUwMEY0M0MwMTA4MDA4MgotOjEwRTgzMDAwQUMyNDAwRjAzQzAxMDgwMEFDMjMzMUNDM0MwMTA4MDBDMgotOjEwRTg0MDAwQUMyMjMxQzgwM0UwMDAwODAwMDAwMDAwOEM4OTQwMDRCRAotOjEwRTg1MDAwOEY4NjAwMTAxNTI2RkZDQzNDMEQ4MDAwOTQ4MzAxMEU5RQotOjEwRTg2MDAwM0MxOTA4MDA4RjM5MzFCQzNDMEUwODAwOERDRTMxQjgwMAotOjEwRTg3MDAwMzA3OEZGRkYwMzM4NTgyMTAwMDA3ODIxMDE3ODIwMkJFMQotOjEwRTg4MDAwMDFDRjY4MjEwMUE0NTAyMTNDMDEwODAwQUMyQjMxQkMxMAotOjEwRTg5MDAwM0MwMTA4MDBBQzJBMzFCODAzRTAwMDA4MDAwMDAwMDA4OQotOjEwRThBMDAwMjdCREZGRTgzQzA1ODAwMEFGQkYwMDE0QUZCMDAwMTBFQgotOjEwRThCMDAwOENCMDAxMjhBQ0IwMDAyMDhDQTMwMTA0OENBNDAxMDAxMgotOjEwRThDMDAwQUY4MzAwMDQwRTAwMEVENkFGODQwMDBDMEUwMDExNUY2MwotOjEwRThEMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEMwMTA0MDAwMjZFRQotOjEwRThFMDAwOEY4NDAwMDQzQzA3MDgwMDhDRTcwMEM0MjRFNjAwMDE4NAotOjEwRThGMDAwM0MwMTA4MDBBQzI2MDBDNDNDMDI4MDAwOEM0NDAxMjQ4QQotOjEwRTkwMDAwM0MxRjYwMjBBRkU0MDAxNDAwMDAwMDAwM0MwNjgwMDBDMwotOjEwRTkxMDAwM0MwMzQwMDBBQ0MzMDEzODAwMDAwMDAwMTIwMDAwMTNBQgotOjEwRTkyMDAwOEZCRjAwMTQyNjBGMDE0MDI2MTkwMDgwMjQwNEZGODBBOQotOjEwRTkzMDAwMDFFNEMwMjQwMzI0RjgyNDAwMUY2OTQwMzMyRTAwN0YyMwotOjEwRTk0MDAwMDAxODU5NDAzMUVDMDA3RjNDMEEyMDAwMzU0ODAwMDI5NQotOjEwRTk1MDAwMDFBRTM4MjUwMTZDNDgyNTAxMjg4MDI1MDBFODI4MjVDRQotOjEwRTk2MDAwQUNDNTA4MzBBQ0QwMDgzMDhGQkYwMDE0OEZCMDAwMTA5OQotOjEwRTk3MDAwMDNFMDAwMDgyN0JEMDAxODNDMDkwMDEwMDA4OTQwMjQ2RQotOjEwRTk4MDAwMTEwMDAwMEY4RjgzMDAwQzI0MERCRkZGMDA2RDYwMjQ2OQotOjEwRTk5MDAwMTE4MDAwMDcyNDBGODdGRjAwNkY3MDI0MTVDMDAwMTMzQgotOjEwRTlBMDAwM0MxOTAwNjAwMDk5QzAyNDEzMDAwMDEwMDAwMDAwMDAxMgotOjEwRTlCMDAwMEUwMDBDRDIwMDAwMDAwMDBBMDAxMjIxMDAwMDAwMDAyRQotOjEwRTlDMDAwM0MwQjA4MDA4RDZCMDAyMDI1NkEwMDAxM0MwMTA4MDAwQgotOjEwRTlEMDAwQUMyQTAwMjAwRTAwMEZDNTAwMDAyMDIxMTA0MEZGQ0MwMwotOjEwRTlFMDAwM0MwNjgwMDAwQTAwMTFFOTNDMDI4MDAwMEUwMDEyOEVGNQotOjEwRTlGMDAwMDAwMDAwMDAwQTAwMTIyMTAwMDAwMDAwMjdCREZGRTgwRgotOjEwRUEwMDAwM0MwMjgwMDBBRkJGMDAxMDhDNDYwMTQwM0MwMzcwMDAwOAotOjEwRUExMDAwM0MwNTQwMDBBQzQ2MDAyMDhDNDQwMTQ4MDA4MzIwMjQ4MwotOjEwRUEyMDAwMTA4NTAwMTMwMEE0MTAyQjEwNDAwMDBCM0MwNzIwMDBBMQotOjEwRUEzMDAwM0MwODYwMDAxMDg4MDAxNzAwMDAwMDAwM0MwQTQwMDBGRAotOjEwRUE0MDAwM0MwOTgwMDBBRDJBMDE3ODAwMDAwMDAwOEZCRjAwMTA1MwotOjEwRUE1MDAwMDNFMDAwMDgyN0JEMDAxODU0ODdGRkY5M0MwQTQwMDA3NgotOjEwRUE2MDAwMEUwMDExMEEwMDAwMDAwMDBBMDAxMjNBM0MwQTQwMDBBMQotOjEwRUE3MDAwMEUwMDEyQjQwMDAwMDAwMDNDMEE0MDAwM0MwOTgwMDA3NwotOjEwRUE4MDAwQUQyQTAxNzgwMDAwMDAwMDhGQkYwMDEwMDNFMDAwMDhFRAotOjEwRUE5MDAwMjdCRDAwMTgwRTAwMUQ2RjAwMDAwMDAwMEEwMDEyM0E4QQotOjEwRUFBMDAwM0MwQTQwMDAyN0JERkZFMEFGQjIwMDE4M0MxMjgwMDBENgotOjEwRUFCMDAwQUZCMTAwMTRBRkJGMDAxQ0FGQjAwMDEwMEUwMDExMkQ5RAotOjEwRUFDMDAwMzY1MTAwNzA4RTI2MDAwMEFGODYwMDE4OEUyODAwMDA5OAotOjEwRUFEMDAwM0MwQjA4MDA4RDZCMDBGQzNDMDcwODAwOENFNzAwRjgzRAotOjEwRUFFMDAwMDEwNjYwMjMwMTZDMjgyMTAwMDA0ODIxMDBBQzMwMkI3NgotOjEwRUFGMDAwMDBFOTE4MjEwMDY2MjAyMTNDMDEwODAwQUMyNTAwRkMzQgotOjEwRUIwMDAwM0MwMTA4MDBBQzI0MDBGODhFNTAwMDAwMzIwMjAwMDNFMwotOjEwRUIxMDAwMTA0MEZGRUUwMTAwMzAyMThFMjYwMDAwM0MwNTA4MDA2OQotOjEwRUIyMDAwOENBNTAwRkMzQzFGMDgwMDhGRkYwMEY4MDBDODE4MjNDQwotOjEwRUIzMDAwMDBBMzc4MjEwMDAwMTAyMTAxRTNDODJCMDNFMkMwMjFDQgotOjEwRUI0MDAwMDMxOTcwMjEzMjBEMDAwMTNDMDEwODAwQUMyRjAwRkNCQwotOjEwRUI1MDAwQUY4ODAwMTgzQzAxMDgwMEFDMkUwMEY4MTVBMDAwMDg5MgotOjEwRUI2MDAwMDAwMDAwMDAzMjA4MDAwMjExMDBGRkQ2MDAwMDAwMDA4MwotOjEwRUI3MDAwMEUwMDEyMjkwMDAwMDAwMDBBMDAxMjVCMDAwMDAwMDBENQotOjEwRUI4MDAwMEUwMDExRDIwMDAwMDAwMDBBMDAxMjg0MzIwODAwMDJCOAotOjEwRUI5MDAwM0MwMzgwMDA4QzY0MDEwMDMwODIwMDNFMTQ0MDAwMDg3OQotOjEwRUJBMDAwMDAwMDAwMDBBQzYwMDA0ODhDNjYwMTAwMzBDNTA3QzA2MgotOjEwRUJCMDAwMTBBMDAwMDUwMDAwMDAwMEFDNjAwMDRDQUM2MDAwNTBFQwotOjEwRUJDMDAwMDNFMDAwMDgyNDAyMDAwMUFDNjAwMDU0QUM2MDAwNDA4NwotOjEwRUJEMDAwOEM2ODAxMDAzMTA3MzgwMDEwRTBGRkY5MDAwMDAwMDBFOAotOjEwRUJFMDAwMjQwMjAwMDEwM0UwMDAwOEFDNjAwMDQ0M0MwMzkwMDBGNAotOjEwRUJGMDAwMzQ2MjAwMDEwMDgyMjAyNTNDMDM4MDAwQUM2NDAwMjBDOAotOjEwRUMwMDAwOEM2NTAwMjAwNEEwRkZGRTAwMDAwMDAwMDNFMDAwMDg2NwotOjEwRUMxMDAwMDAwMDAwMDAzQzAyODAwMDM0NDMwMDAxMDA4MzIwMjVGNgotOjEwRUMyMDAwMDNFMDAwMDhBQzQ0MDAyMDI3QkRGRkQ4QUZCMTAwMTRCQQotOjEwRUMzMDAwM0MwNDgwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMjAwMTg4RgotOjEwRUM0MDAwQUZCMDAwMTA4QzkyMDE0MDhDOTAwMTQ4MjQwMjAwMEU1RAotOjEwRUM1MDAwMDAxMDhDMDIzMjIzMDBGRjEwNjIwMDU5MDIwNDI4MjRBNQotOjEwRUM2MDAwMjg2NjAwMEYxMEMwMDAxMzI4NkEwMDM3MjQwNzAwMDYyQQotOjEwRUM3MDAwMTA2NzAwOEUyODY4MDAwNzUxMDAwMDJEMjQwNDAwMDk0OQotOjEwRUM4MDAwMTA2MDAwNzgzQzA2ODAwMDI0MDkwMDAxMTA2OTAwQjA4MwotOjEwRUM5MDAwMDAwMDAwMDAwMDAwMDAwRDhGQkYwMDIwOEZCMzAwMUM5QgotOjEwRUNBMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg3RAotOjEwRUNCMDAwMjdCRDAwMjgxMTQwMDA1OTI0MEQwMDM4Mjg2QjAwMzU2RAotOjEwRUNDMDAwMTE2MDAwMDUzQzA1ODAwMDI0MEMwMDFGMTQ2Q0ZGRjE0RQotOjEwRUNEMDAwMDAwMDAwMDAzQzA1ODAwMDhDQjgwMUI4MDcwMEZGRkU3MgotOjEwRUNFMDAwMzRCOTAxODBBRjMyMDAwMDI0MUYwMDAxMjQxMjAwMDI1OQotOjEwRUNGMDAwM0MwMjEwMDBBRjIwMDAwNEE3MzEwMDA4QTMzRjAwMEEyNwotOjEwRUQwMDAwQTMzMjAwMEJBNzMwMDAxMEFGMjAwMDI0QUYyMDAwMjg1MgotOjEwRUQxMDAwQUNBMjAxQjg4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThDNwotOjEwRUQyMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjg0OQotOjEwRUQzMDAwMTA2NDAwMjMyNDA1MDAwQjE0NjVGRkQ2MzIxOEZGRkY3MgotOjEwRUQ0MDAwMTcwMDAwMjAzQzA1ODAwMDhGOTNGRUQ0OTI3RjAwMDVDMQotOjEwRUQ1MDAwMzNGOTAwMDQxNzIwRkZDRjAwMDAwMDAwMEUwMDEyQTVCOQotOjEwRUQ2MDAwMDI0MDIwMjE5MjY5MDAwNTAyNDAyMDIxMzUyODAwMDQzQwotOjEwRUQ3MDAwMEUwMDEyQUZBMjY4MDAwNTkyNjcwMDA1MzBFMjAwMDRBMQotOjEwRUQ4MDAwMTQ0MDAwMDIwMDAwMDAwMDAwMDAwMDBEOTI2QjAwMDAyMwotOjEwRUQ5MDAwMjQwNjAwMjAzMTZBMDBGRjE1NDYwMDBBM0MwNTgwMDA2OQotOjEwRURBMDAwOENBNDAxQjgwNDgwRkZGRTM0QUQwMTgwMjQwRTAwMDU2MAotOjEwRURCMDAwM0MwQzEwMDBBREIyMDAwMEExQUUwMDBCQUNBQzAxQjgzMQotOjEwRURDMDAwM0MwNTgwMDA4Q0EzMDFCODA0NjBGRkZFMzRBRjAxODBENQotOjEwRUREMDAwMjQxMzAwMDJBREUwMDAwMEFERjIwMDA0QTVGMTAwMDgyQwotOjEwRURFMDAwQTFGMzAwMEFBMUYzMDAwQkE1RjAwMDEwQURFMDAwMjQ5MAotOjEwRURGMDAwOENCMTAxNDQzQzEwMTAwMEFERjEwMDI4QUNCMDAxQjg1QQotOjEwRUUwMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4OQotOjEwRUUxMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MTA2REZGQUQ4MwotOjEwRUUyMDAwMjQwRTAwODAxNDZFRkY5QjAwMDAwMDAwM0MwNTgwMDA1MwotOjEwRUUzMDAwOENBMzAxQjgwNDYwRkZGRTM0QUYwMTgwMjQxMjAwMDJFRAotOjEwRUU0MDAwQTFGMjAwMEJBNUYxMDAwOEE1RjAwMDEwOENCMzAxNDQ1RAotOjEwRUU1MDAwM0MwMjEwMDBBNUYzMDAxMkFDQTIwMUI4MEEwMDEyRjBBNwotOjEwRUU2MDAwOEZCRjAwMjA4Q0MzMDFCODA0NjBGRkZFMzREMzAxODA0MwotOjEwRUU3MDAwQUU3MjAwMDBBRTYwMDAwNDI0MTIwMDAxQTY3MTAwMDgwQQotOjEwRUU4MDAwMjQxMTAwMDJBMjcyMDAwQUEyNzEwMDBCQTY3MDAwMTBFOQotOjEwRUU5MDAwOENEMDAxNDQzQzBGMTAwMEFFNzAwMDI0QUU2MDAwMjhGRQotOjEwRUVBMDAwQUNDRjAxQjgwQTAwMTMyQjhGQkYwMDIwM0MwMzgwMDBCOQotOjEwRUVCMDAwOEM2NjAxQjgwNEMwRkZGRTM0NjIwMTgwM0MwNjA4MDA4NQotOjEwRUVDMDAwOTBDNjdBQjhBQzUyMDAwMDEwQzAwMDAzMDAwMDM4MjE5MAotOjEwRUVEMDAwM0MwNzA4MDA4Q0U3N0FDMDNDMDU4MDAwMzRBQTAxODAxQQotOjEwRUVFMDAwMjQwNDAwMDIzNENDMDAwMUFDNDcwMDA0QTU1MTAwMDgwMgotOjEwRUVGMDAwQTE0QzAwMEFBMTQ0MDAwQkE1NTAwMDEwOENBQjAxNDRBQQotOjEwRUYwMDAwMDAwMDIwMjEwMTQwMjgyMUFENEIwMDI0MTBDMDAwMDM0NwotOjEwRUYxMDAwOEZCRjAwMjAzQzA0MDgwMDhDODQ3QUJDOEZCMzAwMUM5NwotOjEwRUYyMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0MwRTEwMDA4QgotOjEwRUYzMDAwM0MwRDgwMDAyN0JEMDAyOEFDQTQwMDI4QURBRTAxQjg3MAotOjEwRUY0MDAwM0MwMTA4MDBBMDIwN0FCODAzRTAwMDA4MDAwMDAwMDA5RgotOjEwRUY1MDAwMTBBMDAwMEIzQzA2ODAwMDhDOTgwMTQ0MjQxOTAwMDI4QwotOjEwRUY2MDAwM0MwMTA4MDBBMDM5N0FCODNDMDEwODAwQUMzMjdBQzBGNAotOjEwRUY3MDAwM0MwMTA4MDBBQzM4N0FCQzBBMDAxMzJCOEZCRjAwMjA3QwotOjEwRUY4MDAwOENERjAxQjgwN0UwRkZGRTM0QzcwMTgwMjQwOTAwMDJDRQotOjEwRUY5MDAwQUNFMDAwMDBBQ0YyMDAwNEE0RjEwMDA4QTBFOTAwMEExMwotOjEwRUZBMDAwQTBFOTAwMEJBNEYwMDAxMEFDRTAwMDI0OENDODAxNDRFMAotOjEwRUZCMDAwM0MwMjEwMDBBQ0U4MDAyOEFDQzIwMUI4MEEwMDEzMkJEOAotOjEwRUZDMDAwOEZCRjAwMjAyN0JERkZFOEFGQkYwMDEwMEUwMDBFRDY5OAotOjEwRUZEMDAwMDAwMDAwMDAzQzAyODAwMDhGQkYwMDEwMDAwMDIwMjFENAotOjEwRUZFMDAwQUM0MDAxODAwQTAwMEZDNTI3QkQwMDE4MzA4NEZGRkYyOAotOjEwRUZGMDAwMzBBNUZGRkYxMDgwMDAwNzAwMDAxODIxMzA4MjAwMDFCQgotOjEwRjAwMDAwMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxMTQ4MEZGRkIxQwotOjEwRjAxMDAwMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDczMAotOjEwRjAyMDAwMDAwMDAwMDA4Q0EyMDAwMDI0QzZGRkZGMjRBNTAwMDRGRAotOjEwRjAzMDAwQUM4MjAwMDAxNEMwRkZGQjI0ODQwMDA0MDNFMDAwMDgzRAotOjEwRjA0MDAwMDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGQUM4NjAwMDAxMQotOjEwRjA1MDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGMjQ2M0ZGRkYwNwotOjEwRjA2MDAwMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDA5QQotOjEwRjA3MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA3MQotOjEwRjA4MDAwQUZCRjAwMUM5NDg2MDAwQzAwQTA5MDIxMjQ5MDAwMTRCNwotOjEwRjA5MDAwMDAwNjFCMDIwMDAzMTA4MDAwNDQ4ODIxMDAwMDMwMjE3QwotOjEwRjBBMDAwMDBBMDIwMjEwRTAwMTNCQjI0MDUwMDA1MDIxMTIwMkIxNwotOjEwRjBCMDAwMTA4MDAwMTIwMDAwMTAyMTkyMDMwMDAwMkM2NTAwMDk0RQotOjEwRjBDMDAwNTBBMDAwMDk5MjAyMDAwMTAwMDM0ODgwM0MwQTA4MDA5OQotOjEwRjBEMDAwMjU0QTc5M0MwMTJBNDAyMThEMDcwMDAwMDBFMDAwMDgwNAotOjEwRjBFMDAwMDAwMDAwMDA5MjAyMDAwMTAyMDI4MDIxMDIxMTIwMkI4OAotOjEwRjBGMDAwNTQ4MEZGRjI5MjAzMDAwMDAwMDAxMDIxOEZCRjAwMUMxQgotOjEwRjEwMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgxOAotOjEwRjExMDAwMjdCRDAwMjAwQTAwMTNENTI2MTAwMDAxOTIwQzAwMDEyMwotOjEwRjEyMDAwMjQwQjAwMEMxNThCMDA0MDAyMzA3MDIzMkRDRDAwMEFGQgotOjEwRjEzMDAwMTVBMDAwM0QyNjA4MDAwNjhFNDMwMDAwMjYwMjAwMDJBRQotOjEwRjE0MDAwMzQ2NDAxMDBBRTQ0MDAwMDkyMUYwMDAyOTA1OTAwMDE5NwotOjEwRjE1MDAwOTA0RTAwMDI5MDRCMDAwMzAwMUY3RTAwMDAxOUM0MDA3NwotOjEwRjE2MDAwMDFGODYwMjUwMDBFNkEwMDAxOEQ1MDI1MDE0QjQ4MjVFRAotOjEwRjE3MDAwQUU0OTAwMDQ5MjA3MDAwNjkxMDUwMDAxOTEwNDAwMDJDNwotOjEwRjE4MDAwOTExOTAwMDMwMDA3MUUwMDAwMDUzNDAwMDA2NkY4MjVGMQotOjEwRjE5MDAwMDAwNDEyMDAwM0UyQzAyNTAzMTk3ODI1MjYxMDAwMEE5NgotOjEwRjFBMDAwMEEwMDEzRDVBRTRGMDAwODkyMUYwMDAxMjYwNDAwMDI4QQotOjEwRjFCMDAwMjQxMDAwMDI1N0YwMDAwMTAyMjAyMDIxMEEwMDEzRDU3QwotOjEwRjFDMDAwMDA4MDgwMjE5MjBFMDAwMTI0MEQwMDAzMTVDREZGQ0I5RAotOjEwRjFEMDAwMjQwMjAwMDE4RTU5MDAwMDkyMTgwMDAyMjYxMDAwMDMzQwotOjEwRjFFMDAwMzcyRjAwMDhBMjU4MDAxMDBBMDAxM0Q1QUU0RjAwMDBCOAotOjEwRjFGMDAwOTIwNTAwMDEyNDA2MDAwNDE0QTZGRkMwMjQwMjAwMDFBOQotOjEwRjIwMDAwOTIwQzAwMDI5MjBCMDAwMzhFNDkwMDAwMDAwQzUyMDA4OQotOjEwRjIxMDAwMDE0QjQwMjUzNTI3MDAwNDI2MTAwMDA0QUU0ODAwMENBMQotOjEwRjIyMDAwMEEwMDEzRDVBRTQ3MDAwMDBBMDAxM0U5MjQwMjAwMDFDQQotOjEwRjIzMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwMEUwMDEyQTU0RAotOjEwRjI0MDAwMDA4MDgwMjEzQzA0ODAwODM0ODMwMDgwOTA2NTAwMjU4NAotOjEwRjI1MDAwMDIwMDIwMjEzNEEyMDAyMDBFMDAxMkFGQTA2MjAwMjU3RgotOjEwRjI2MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDBDOUVGNgotOjEwRjI3MDAwMjdCRDAwMTgzQzAzODAwMDI3QkRGRkY4MzQ2MjAxODBFMQotOjEwRjI4MDAwQUZBMjAwMDAzMDhDMDBGRjMwQUQwMEZGMzBDRTAwRkY5OQotOjEwRjI5MDAwM0MwQjgwMDA4RDY0MDFCODA0ODBGRkZFMDAwMDAwMDA3QwotOjEwRjJBMDAwOEZBOTAwMDA4RDY4MDEyODhGQUEwMDAwOEZBNzAwMDA5OQotOjEwRjJCMDAwOEZBNDAwMDAyNDA1MDAwMTI0MDIwMDAyQTA4NTAwMEE5QQotOjEwRjJDMDAwOEZBMzAwMDAzNTk5NDAwMDNDMDUxMDAwQTA2MjAwMEJBMAotOjEwRjJEMDAwOEZCODAwMDA4RkFDMDAwMDhGQTYwMDAwOEZBRjAwMDAzOQotOjEwRjJFMDAwMjdCRDAwMDhBRDI4MDAwMEFENDAwMDA0QUQ4MDAwMjQxQgotOjEwRjJGMDAwQUNDMDAwMjhBNEY5MDAwOEE3MEQwMDEwQTVFRTAwMTI2QwotOjEwRjMwMDAwMDNFMDAwMDhBRDY1MDFCODNDMDY4MDA4MjdCREZGRThCMgotOjEwRjMxMDAwMzRDNTAwODBBRkJGMDAxMDkwQTcwMDA5MjQwMjAwMTI3RQotOjEwRjMyMDAwMzBFMzAwRkYxMDYyMDAwQjAwODAzMDIxOENBODAwNTBGOQotOjEwRjMzMDAwMDA4ODIwMjMwNDgwMDAwODhGQkYwMDEwOENBQTAwMzRBRQotOjEwRjM0MDAwMjQwNDAwMzkwMDAwMjgyMTAwQ0E0ODIzMDUyMDAwMDVCNAotOjEwRjM1MDAwMjQwNjAwMTI4RkJGMDAxMDI0MDIwMDAxMDNFMDAwMDgwMQotOjEwRjM2MDAwMjdCRDAwMTgwRTAwMTQ0NzAwMDAwMDAwOEZCRjAwMTBEQQotOjEwRjM3MDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGQzhENAotOjEwRjM4MDAwQUZCMTAwMkMwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTAzQgotOjEwRjM5MDAwMDA4MDkwMjEwMjIwMjAyMUFGQkYwMDM0MEUwMDEzQzY1MAotOjEwRjNBMDAwQUZCMDAwMjgxNDQwMDA4MTNDMEM4MDA4OTE4QjAwMTEwNAotOjEwRjNCMDAwOTE4QTAwMTIzNTg2MDA4MDhDQzgwMDU0MzE2NTAwRkZBOAotOjEwRjNDMDAwMzE0OTAwRkYwMEE5MjgyMTAwQTgzODJCMTRFMDAwNEY4NAotOjEwRjNEMDAwOEZBMzAwMTA5NERGMDA1QzMwNjYwMDA0MTBDMDAwNTY1QwotOjEwRjNFMDAwMzNFNEZGRkY4RkEyMDAxQzAwODIxMDJCNTQ0MDAwMDU2NQotOjEwRjNGMDAwMkM4MzAwODAzMDY3MDAwNDE0RTAwMDdFMjQwNDAyMTg4RgotOjEwRjQwMDAwMkM4MzAwODAxMDYwMDAwMjAwODA4MDIxMjQxMDAwODA4NgotOjEwRjQxMDAwMEUwMDEyQTUwMjQwMjAyMTNDMDM4MDA4MzQ2NjAwODBDMwotOjEwRjQyMDAwMjQwNzAwMDFBQ0M3MDAwQzkwQzIwMDA4MDAxMDYwNDAyNwotOjEwRjQzMDAwMzQ2NzAxMDAzMDVGMDA3RkEwREYwMDA4OEUzOTAwMDREMAotOjEwRjQ0MDAwMjczODAwMDFBQ0Q4MDAzMEE0RDAwMDVDOENDRTAwM0M0MgotOjEwRjQ1MDAwOTYyRjAwMEUwMUNGNjgyMUFDQ0QwMDIwOENDQjAwM0M1NAotOjEwRjQ2MDAwMDE2QzUwMjFBQ0NBMDAxQzhFMjkwMDA0QUNFOTAwMDBEQwotOjEwRjQ3MDAwOEUyNTAwMDhBQ0U1MDAwNDhGQTgwMDEwMzEwNDAwMDhCOAotOjEwRjQ4MDAwNTQ4MDAwMkY5M0E2MDAyMEEwQzAwMDRFOTBDNTAwNEVDRgotOjEwRjQ5MDAwMjQwOEZGREYzQzE4ODAwOEEwRTUwMDA4OTBDNDAwMDg5RAotOjEwRjRBMDAwMzcwQzAwODAyNDA5MDA1MDAwODg4MDI0QTBEMDAwMDg3OAotOjEwRjRCMDAwOEUzOTAwMDhBRDk5MDAzODhGMEUwMDE0OEQ4RjAwMzAwMgotOjEwRjRDMDAwMDFDRjY4MjFBRDhEMDAzNDkxOEIwMDAwMzE2QTAwRkZCRgotOjEwRjREMDAwMTE0OTAwMjkyNjQ4MDEwMDBFMDAxMkFGMDI0MDIwMjFFOAotOjEwRjRFMDAwMjQwNDAwMzgwMDAwMjgyMTBFMDAxNDQ3MjQwNjAwMEFENgotOjEwRjRGMDAwOEZCRjAwMzQ4RkIyMDAzMDhGQjEwMDJDOEZCMDAwMjg0NgotOjEwRjUwMDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDM4OTREODAwNUMwNQotOjEwRjUxMDAwOENEMDAwNTQzMzBFRkZGRjAyMDU3ODIzMDFDRjY4MkJGNwotOjEwRjUyMDAwMTVBMEZGQUM4RkEzMDAxMDhDRDkwMDU0MzA2NjAwMDRFNgotOjEwRjUzMDAwMTRDMEZGQUMwMzI1MjAyMzBBMDAxNEE1MkM4MjAyMTg1NgotOjEwRjU0MDAwM0MxODgwMDgzNzBDMDA4MEEwRTYwMDA4OEUzOTAwMDhCRgotOjEwRjU1MDAwMjQwOTAwNTBBRDk5MDAzODhGMEUwMDE0OEQ4RjAwMzBCMwotOjEwRjU2MDAwMDFDRjY4MjFBRDhEMDAzNDkxOEIwMDAwMzE2QTAwRkYxRQotOjEwRjU3MDAwMTU0OUZGRDkyNjQ4MDEwMDI0MDZGRjgwMDEwNjI4MjRFQQotOjEwRjU4MDAwM0MwNDgwMDBBQzg1MDAyODhFMjcwMDA4MzEwMzAwN0ZGMgotOjEwRjU5MDAwM0MxMDgwMEMwMDcwRjgyMUFGRTcwMEQwOEUyMjAwMDhFQwotOjEwRjVBMDAwQUY5RjAwMjQwQTAwMTRFMEFGRTIwMEQ0OEUyMzAwMDhDRAotOjEwRjVCMDAwM0MwNDgwMDgzNDgyMDA4MEFDNDMwMDU0MDI0MDIwMjE4NwotOjEwRjVDMDAwMEUwMDE0MzZBQzQwMDAzMDI0MDQwMDM4MjQwNTAwOERCMQotOjEwRjVEMDAwMEUwMDE0NDcyNDA2MDAxMjhGQkYwMDM0OEZCMjAwMzA5MwotOjEwRjVFMDAwOEZCMTAwMkM4RkIwMDAyODI0MDIwMDAxMDNFMDAwMDgzNgotOjEwRjVGMDAwMjdCRDAwMzgwQTAwMTRBQThGQTQwMDFDMjdCREZGRTgwRAotOjEwRjYwMDAwQUZCRjAwMTA5MEE2MDAwRDMwQzcwMDEwMTBFMDAwMEMzNgotOjEwRjYxMDAwMDA4MDQwMjEzQzAyODAwODhDNDQwMDA0OENBMzAwMDgzOAotOjEwRjYyMDAwMTA2NDAwMDgzMEM5MDAwNDMwQzUwMDA0MTBBMDAwMUM5QwotOjEwRjYzMDAwOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMTg1RQotOjEwRjY0MDAwMzBDOTAwMDQxMTIwMDAxMDMwQ0IwMDEyMTBFMEZGRjk4NwotOjEwRjY1MDAwOEZCRjAwMTAzQzA4ODAwODhDQTcwMDA4OEQwNjAwMDRBRQotOjEwRjY2MDAwMTRFNkZGRjUyNDAyMDAwMTI0MDQwMDM4MjQwNTAwOEQ2RgotOjEwRjY3MDAwMEUwMDE0NDcyNDA2MDAxMjhGQkYwMDEwMjQwMjAwMDE2MAotOjEwRjY4MDAwMDNFMDAwMDgyN0JEMDAxODI0MEEwMDEyMTU2QUZGRTlFQwotOjEwRjY5MDAwOEZCRjAwMTAwMTAwMjAyMTBBMDAxNDg5MjdCRDAwMTgyNwotOjEwRjZBMDAwMDAwMDIwMjEwQTAwMENCODI3QkQwMDE4M0MwNTA4MDAwNgotOjEwRjZCMDAwMjRBNTU1OTgzQzA0MDgwMDI0ODQ3MzU4M0MwMjA4MDA5MwotOjEwRjZDMDAwMjQ0MjU1QTAyNDAzMDAwNjNDMDEwODAwQUMyNTdBQzg1QQotOjEwRjZEMDAwM0MwMTA4MDBBQzI0N0FDQzNDMDEwODAwQUMyMjdBRDA3MgotOjEwRjZFMDAwM0MwMTA4MDBBMDIzN0FENDAzRTAwMDA4MDAwMDAwMDBEOQotOjEwRjZGMDAwMDNFMDAwMDgyNDAyMDAwMTNDMDI4MDAwMzA4ODAwRkY4MwotOjEwRjcwMDAwMzQ0NzAxODAzQzA2ODAwMDhDQzMwMUI4MDQ2MEZGRkVEMgotOjEwRjcxMDAwMDAwMDAwMDA4Q0M1MDEyODI0MThGRjgwM0MwRDgwMEFFMQotOjEwRjcyMDAwMjRBRjAxMDAwMUY4NzAyNDMxRUMwMDdGQUNDRTAwMjQzRQotOjEwRjczMDAwMDE4RDIwMjFBQ0U1MDAwMDk0OEIwMERBMzUwOTYwMDBEMgotOjEwRjc0MDAwMjQwODAwMDIzMTZBRkZGRkFDRUEwMDA0MjQwMjAwMDEzMQotOjEwRjc1MDAwQTRFOTAwMDhBMEU4MDAwQkFDRTAwMDI0M0MwNzEwMDA3RQotOjEwRjc2MDAwQUNDNzAxQjhBRjg0MDAyNDAzRTAwMDA4QUY4NTAwNTRBMwotOjEwRjc3MDAwOEM5OTAwMDQ4RjhEMDAyNDI0MDlGRkJGMDMyNUMwMjMyQQotOjEwRjc4MDAwQUM5ODAwMDQ5MUFGMDBDNDI0MDNGRkVGMzFFRTAwN0Y3QQotOjEwRjc5MDAwQTFBRTAwQzQ4QzhDMDAyMDkzOEIwMDMwOEY4NjAwMjQ5NwotOjEwRjdBMDAwMzU4QTAwMDJBRjhCMDA0OEE3ODAwMDQ0QUM4QTAwMjA1NQotOjEwRjdCMDAwQTRDMDAwQUM5MEM4MDBDNDAxMDkzODI0QTBDNzAwQzQ4QwotOjEwRjdDMDAwOEY4NDAwMjRBQzgwMDBEQzkwODUwMEM0MDBBMzEwMjQ0QQotOjEwRjdEMDAwMDNFMDAwMDhBMDgyMDBDNDNDMDI4MDAwMzQ0NTAxODBBMAotOjEwRjdFMDAwM0MwNDgwMDA4QzgzMDFCODA0NjBGRkZFOEY4OTAwNTRDNAotOjEwRjdGMDAwMjQwNzYwODMyNDA2MDAwMkFDQTkwMDAwOEM4ODAxMjQ0MQotOjEwRjgwMDAwQUNBODAwMDRBNEE3MDAwOEEwQTYwMDBCM0MwNTEwMDBBQgotOjEwRjgxMDAwMDNFMDAwMDhBQzg1MDFCODkzODgwMDMwOEY4OTAwNDg2OAotOjEwRjgyMDAwOEY4MjAwMjQzMEM2MDBGRjAxMDkzODIzMzBFOTAwRkYzMQotOjEwRjgzMDAwMDEyMjE4MjEzMEE1MDBGRjI0NjgwMDc4MTBDMDAwMDJDMgotOjEwRjg0MDAwMDEyNDM4MjEwMDgwMzgyMTMwRTQwMDAzMTQ4MDAwMDNCMwotOjEwRjg1MDAwMzBBQTAwMDMxMTQwMDAwRDMxMkIwMDAzMTBBMDAwMDk1NQotOjEwRjg2MDAwMDAwMDEwMjE5MEVEMDAwMDI0NEUwMDAxMzFDMjAwRkY4NQotOjEwRjg3MDAwMDA0NTYwMkJBMTBEMDAwMDI0RTcwMDAxMTU4MEZGRjk3MQotOjEwRjg4MDAwMjUwODAwMDEwM0UwMDAwODAwMDAwMDAwMTU2MEZGRjNGOAotOjEwRjg5MDAwMDAwMDAwMDAxMEEwRkZGQjAwMDAxMDIxOENGODAwMDAwOQotOjEwRjhBMDAwMjQ1OTAwMDQzMzIyMDBGRjAwNDU3ODJCQUQxODAwMDBENgotOjEwRjhCMDAwMjRFNzAwMDQxNUUwRkZGOTI1MDgwMDA0MDNFMDAwMDgzMAotOjEwRjhDMDAwMDAwMDAwMDA5Mzg1MDAzMDkzODgwMDQwOEY4NzAwNDgzNwotOjEwRjhEMDAwMDAwNDMyMDAzMTAzMDA3RjAwRTUxMDJCMzBDNDdGMDBBQwotOjEwRjhFMDAwMTA0MDAwMEYwMDY0MjgyNThGODQwMDI0M0MwOTgwMDAwQwotOjEwRjhGMDAwOEM4QTAwRENBRDJBMDBBNDNDMDM4MDAwMDBBMzU4MjVCQwotOjEwRjkwMDAwQUM2QjAwQTA4QzZDMDBBMDA1ODBGRkZFMDAwMDAwMDAyNgotOjEwRjkxMDAwOEM2RDAwQUNBQzhEMDBEQzAzRTAwMDA4OEM2MjAwQThBQwotOjEwRjkyMDAwMEEwMDE1RTg4Rjg0MDAyNDkzODgwMDQxM0MwMjgwMDA3RgotOjEwRjkzMDAwMDA4MDUwMjEzMTAzMDBGRUEzODMwMDQxMzBBQkZGRkY2NAotOjEwRjk0MDAwMzBDQzAwRkYzMEU3RkZGRjM0NDgwMTgwM0MwOTgwMDBFNQotOjEwRjk1MDAwOEQyNDAxQjgwNDgwRkZGRThGOEQwMDU0MjQxODAwMTZGQQotOjEwRjk2MDAwQUQwRDAwMDA4RDIyMDEyNDhGOEQwMDI0QUQwMjAwMDQxNgotOjEwRjk3MDAwOEQ1OTAwMjBBNTA3MDAwODI0MDIwMUI0QTExOTAwMEEyRQotOjEwRjk4MDAwQTExODAwMEI5NTJGMDEyMDhENEUwMDA4OEQ0NzAwMDQxMwotOjEwRjk5MDAwOTc4MzAwNDQ4RDU5MDAyNDAxQ0YzMDIxMDBDNzI4MjFDRQotOjEwRjlBMDAwMDBBMzIwMjMyNDE4RkZGRkE1MDQwMDBDQTUwQjAwMEVDNAotOjEwRjlCMDAwQTUwMjAwMTBBNTBDMDAxMkFEMTkwMDE4QUQxODAwMjQwNgotOjEwRjlDMDAwOTVBRjAwRDgzQzBCMTAwMDI0MDdGRkY3MzFFRUZGRkY4NgotOjEwRjlEMDAwQUQwRTAwMjg4REFDMDA3NEFEMEMwMDJDQUQyQjAxQjgyMQotOjEwRjlFMDAwOEQ0NjAwMjAwMEM3MjgyNDAzRTAwMDA4QUQ0NTAwMjAxNAotOjEwRjlGMDAwOEY4ODAwMjQwMDgwNTgyMTMwRTdGRkZGOTEwOTAwQzY1RQotOjEwRkEwMDAwM0MwMjgwMDAzMEE1RkZGRjMxMjQwMEZGMDAwNDFBMDBGMwotOjEwRkExMDAwMDA2NzUwMjUzMEM2MDBGRjM0NDcwMTgwM0MwOTgwMDA1NAotOjEwRkEyMDAwOEQyQzAxQjgwNTgwRkZGRThGODIwMDU0MjQwRjAwMTczMwotOjEwRkEzMDAwQUNFMjAwMDA4RDM5MDEyNEFDRjkwMDA0OEQ3ODAwMjA3RgotOjEwRkE0MDAwQTRFQTAwMDgyNDE5MDFCNEEwRjgwMDBBQTBFRjAwMEJGMgotOjEwRkE1MDAwOTUyMzAxMjA4RDZFMDAwODhENkQwMDA0OTc4NDAwNDQ2RAotOjEwRkE2MDAwMDFDMzUwMjEwMTRENjAyMTAxODQxMDIzQTRFMjAwMEM0OAotOjEwRkE3MDAwQTRFNTAwMEVBNEY5MDAxMEE0RTYwMDEyQUNFMDAwMTQwNgotOjEwRkE4MDAwOEQ3ODAwMjQyNDBERkZGRkFDRjgwMDE4OEQwRjAwNkM1QQotOjEwRkE5MDAwQUNFRjAwMUM4RDBFMDA2ODNDMEYxMDAwQUNFRTAwMjA5NwotOjEwRkFBMDAwQUNFRDAwMjQ5NTBBMDBBRTI0MERGRkY3MzE0NkZGRkZCMAotOjEwRkFCMDAwQUNFNjAwMjg5NTBDMDA3MDk1MDQwMDcyMzE4MzdGRkYzRQotOjEwRkFDMDAwMDAwM0NBMDAzMDgyRkZGRjAzMjJDMDIxQUNGODAwMkNFMwotOjEwRkFEMDAwQUQyRjAxQjg5NTBFMDA3MjhENkEwMDIwMDBBRTMwMjE2NgotOjEwRkFFMDAwMDE0RDI4MjRBNTA2MDA3MjAzRTAwMDA4QUQ2NTAwMjA0MgotOjEwRkFGMDAwM0MwMjgwMDAzNDQ2MDE4MDNDMDU4MDAwOENBMzAxQjhBNAotOjEwRkIwMDAwMDQ2MEZGRkUyNDA5MDAxOEFDQzQwMDAwQTBDOTAwMEI2QgotOjEwRkIxMDAwOEY4ODAwMjQzQzA0MTAwMDk1MDcwMEFFQTRDNzAwMTA5NQotOjEwRkIyMDAwQUNDMDAwMzAwM0UwMDAwOEFDQTQwMUI4M0MwMjgwMDA4NwotOjEwRkIzMDAwMzQ0NTAxODAzQzA0ODAwMDhDODMwMUI4MDQ2MEZGRkVFMgotOjEwRkI0MDAwOEY4QTAwMkMyNDA2MDAxOTk1NDkwMDFDMzEyOEZGRkZEQwotOjEwRkI1MDAwMDAwODM5QzBBQ0E3MDAwMEEwQTYwMDBCM0MwNTEwMDBBRgotOjEwRkI2MDAwMDNFMDAwMDhBQzg1MDFCODhGODcwMDM0MDA4MDQwMjE5NQotOjEwRkI3MDAwMzBDNDAwRkYzQzA2ODAwMDhDQzIwMUI4MDQ0MEZGRkU4OAotOjEwRkI4MDAwOEY4OTAwNTQ5MzgzMDA1MDM0OTk2MDAwQUNBOTAwMDAyMQotOjEwRkI5MDAwQTBBMzAwMDU4Q0UyMDAxMDI0MEYwMDAyMjQwM0ZGRjc0RAotOjEwRkJBMDAwQTRBMjAwMDZBNEI5MDAwODhEMTgwMDIwQTBCODAwMEE3RAotOjEwRkJCMDAwQTBBRjAwMEI4Q0VFMDAwMEFDQUUwMDEwOENFRDAwMDQ4QQotOjEwRkJDMDAwQUNBRDAwMTQ4Q0VDMDAxQ0FDQUMwMDI0OENFQjAwMjAyMQotOjEwRkJEMDAwQUNBQjAwMjg4Q0VBMDAyQzNDMDcxMDAwQUNBQTAwMkMyRgotOjEwRkJFMDAwOEQwOTAwMjRBQ0E5MDAxOEFDQzcwMUI4OEQwNTAwMjAxMAotOjEwRkJGMDAwMDBBMzIwMjQwM0UwMDAwOEFEMDQwMDIwOTM4NTAwNTBGQQotOjEwRkMwMDAwMjQwMzAwMDEyN0JERkZFODAwQTMzMDA0MkNBMjAwMjAzQwotOjEwRkMxMDAwQUZCMDAwMTBBRkJGMDAxNDAwQzAxODIxMTA0MDAwMTM5NwotOjEwRkMyMDAwMjQxMEZGRkUzQzA3MDgwMDhDRTczMTkwMDBFNjEwMjQwQQotOjEwRkMzMDAwM0MwODgwMDAzNTA1MDE4MDE0NDAwMDA1MjQwNjAwODQzRQotOjEwRkM0MDAwOEY4OTAwMjQyNDBBMDAwNDI0MTBGRkZGQTEyQTAwRUM1RAotOjEwRkM1MDAwMEUwMDE2ODQwMDAwMDAwMDAyMDAxMDIxOEZCRjAwMTQ2NwotOjEwRkM2MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4M0MwNjA4MDAxNAotOjEwRkM3MDAwOENDNjMxOTQwQTAwMTZCNjAwQzMxMDI0OEY4NzAwMkM1RQotOjEwRkM4MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA1NQotOjEwRkM5MDAwQUZCRjAwMUMzMEQwMDBGRjkwRTYwMDBEMDBBMDg4MjEwRgotOjEwRkNBMDAwMDA4MDkwMjEzMEM1MDA3RkEwRTUwMDBEOEY4NTAwMjRFNQotOjEwRkNCMDAwOEUyMzAwMTg4Q0EyMDBDMDEwNjIwMDJFMjQwQTAwMEVCMQotOjEwRkNDMDAwMEUwMDE2QTlBMzhBMDA1MDI0MDlGRkZGMTA0OTAwMjI0NAotOjEwRkNEMDAwMjQwNEZGRkY1MjAwMDAyMDAwMDAyMDIxOEUyNjAwMDA5NwotOjEwRkNFMDAwM0MwQzAwMTAwMENDNTgyNDE1NjAwMDM5M0MwRTAwMDg3NAotOjEwRkNGMDAwMDBDRTY4MjQ1NUEwMDAzRjAyNDAyMDIxM0MxODAwMDI5RAotOjEwRkQwMDAwMDBEODgwMjQxMjAwMDAxRjNDMEEwMDA0OEY4NzAwMkNCQQotOjEwRkQxMDAwOENFMjAwMTQ4Q0UzMDAxMDhDRTUwMDE0MDA0M0Y4MjNGRgotOjEwRkQyMDAwMDNFNUM4MkIxMzIwMDAwNTAyNDAyMDIxOEUyNDAwMkM1RgotOjEwRkQzMDAwOENGMTAwMTAxMDkxMDAzMTAyNDAyMDIxMjQwMjAwMTJBOQotOjEwRkQ0MDAwQTM4MjAwNTAwRTAwMTZBOTI0MTJGRkZGMTA1MjAwMDJEOQotOjEwRkQ1MDAwMjQwNEZGRkYwMDAwMjAyMThGQkYwMDFDOEZCMjAwMTg3OQotOjEwRkQ2MDAwOEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDg1NAotOjEwRkQ3MDAwMjdCRDAwMjA5MEE4MDBDNDM1MDQwMDIwMEEwMDE2REYyQgotOjEwRkQ4MDAwQTBBNDAwQzQwMENBNDgyNDE1MjAwMDBCOEY4QjAwMkNBRgotOjEwRkQ5MDAwOEY4RDAwMkM4REFDMDAxMDE1ODAwMDBCMDI0MDIwMjFBRgotOjEwRkRBMDAwOEUyRTAwMkM1MUMwRkZFQzAwMDAyMDIxMDI0MDIwMjFBQgotOjEwRkRCMDAwMEEwMDE2RkEyNDAyMDAxNzhENjYwMDEwNTBDMEZGRTZGNAotOjEwRkRDMDAwMDAwMDIwMjEwMjQwMjAyMTBBMDAxNkZBMjQwMjAwMTExRQotOjEwRkREMDAwMDI0MDIwMjEyNDAyMDAxNTBFMDAxNkE5QTM4MjAwNTAyMwotOjEwRkRFMDAwMjQwRkZGRkYxMDRGRkZEQzI0MDRGRkZGMEEwMDE2RTk3OQotOjEwRkRGMDAwOEUyNjAwMDAwQTAwMTcyMDI0MDIwMDE0M0MwODAwMDQ4QwotOjEwRkUwMDAwMDBDODM4MjQ1MEUwRkZENDAwMDAyMDIxMDI0MDIwMjEwNwotOjEwRkUxMDAwMEEwMDE2RkEyNDAyMDAxMzhGODYwMDI0MjdCREZGRTA5MwotOjEwRkUyMDAwQUZCMTAwMTRBRkJGMDAxOEFGQjAwMDEwOTBDMzAwQzQ1MgotOjEwRkUzMDAwMzBBNTAwRkYzMDYyMDAyMDEwNDAwMDA4MDA4MDg4MjFCQgotOjEwRkU0MDAwOENDQjAwQzAyNDA5RkZERjI1NkEwMDAxQUNDQTAwQzBDQQotOjEwRkU1MDAwOTBDODAwQzQwMTA5MzgyNEEwQzcwMEM0MTRBMDAwNDAwMQotOjEwRkU2MDAwM0MwQzgwMDA4Rjg0MDAyNDkwODcwMEM0MjQxOEZGQkZCRQotOjEwRkU3MDAwMjQwNkZGRUYzMEUzMDA3RkEwODMwMEM0OTc5RjAwNDQ3NwotOjEwRkU4MDAwOEY4MjAwNDg4RjhEMDAyNDAzRTJDODIzQTc5OTAwNDQ4NQotOjEwRkU5MDAwQTVBMDAwQUM5MUFGMDBDNDAxRjg3MDI0QTFBRTAwQzRDRAotOjEwRkVBMDAwOEY4QzAwMjRBMTgwMDBDNzhGOEEwMDI0QTU0MDAwNzI5NwotOjEwRkVCMDAwQUQ0MDAwREM5MTQ1MDBDNDAwQTY1ODI0QTE0QjAwQzQwRAotOjEwRkVDMDAwOEY5MDAwMjA4Rjg0MDA0ODk3ODYwMDQ0MDIwNDI4MjFFOAotOjEwRkVEMDAwMTBDMDAwMEZBRjg1MDAyMEEzODAwMDQwM0MwNzgwMDBDOQotOjEwRkVFMDAwOEUyQzAwMDg5NEVEMDEyMDhFMkIwMDA0MDE4RDUwMjFGMgotOjEwRkVGMDAwMDE0QjgwMjEwMjA2MjAyMzMwODZGRkZGMzBDODAwMEYwRgotOjEwRkYwMDAwMzkwOTAwMDEzMTMxMDAwMTE2MjAwMDA5QTM4ODAwNDBBMQotOjEwRkYxMDAwOTM4NjAwMzA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA4RgotOjEwRkYyMDAwMjdCRDAwMjBBRjg1MDA0QzAzRTAwMDA4QUY4NjAwNDhFNQotOjEwRkYzMDAwMDBDODcwMjM4RkJGMDAxODkzODYwMDMwOEZCMTAwMTQ2MwotOjEwRkY0MDAwOEZCMDAwMTAzNEVGMEMwMDAxMEYyODIxMjdCRDAwMjBENgotOjEwRkY1MDAwQUNFRTAwODRBRjg1MDA0QzAzRTAwMDA4QUY4NjAwNDg5QgotOjEwRkY2MDAwMzU5MDAxODAwMjAwMjgyMTBFMDAxNjg0MjQwNjAwODJBQwotOjEwRkY3MDAwOEY4NDAwMjQ5MDg2MDBDNDMwQzUwMDQwNTBBMEZGQkE5MgotOjEwRkY4MDAwQTM4MDAwNTA4Rjg1MDAzNDNDMDY4MDAwOENDRDAxQjhFMgotOjEwRkY5MDAwMDVBMEZGRkU4Rjg5MDA1NDI0MDg2MDgyMjQwNzAwMDIxOAotOjEwRkZBMDAwQUUwOTAwMDBBNjA4MDAwOEEyMDcwMDBCOENBMzAwMDhGOQotOjEwRkZCMDAwM0MwRTEwMDBBRTAzMDAxMDhDQTIwMDBDQUUwMjAwMTQyOAotOjEwRkZDMDAwOENCRjAwMTRBRTFGMDAxODhDQjkwMDE4QUUxOTAwMjRBNQotOjEwRkZEMDAwOENCODAwMjRBRTE4MDAyODhDQUYwMDI4QUUwRjAwMkM3RgotOjEwRkZFMDAwQUNDRTAxQjgwQTAwMTc0NEEzODAwMDUwOEY4QTAwMjRDOQotOjEwRkZGMDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwOEY4ODAwNDhGQwotOjAyMDAwMDA0MDAwMUY5Ci06MTAwMDAwMDBBRkJGMDAxODkzODkwMDI4OTU0MjAwQUMzMEQxMDBGRkEzCi06MTAwMDEwMDAwMTA5MTgyQjAwODA4MDIxMzBBQzAwRkYzMDQ3RkZGRjIyCi06MTAwMDIwMDAwMDAwNTgyMTE0NjAwMDAzMzEwNjAwRkYwMTIwMzAyMTM4Ci06MTAwMDMwMDAwMTA5NTgyMzk3ODMwMDQ0MDA2ODIwMkIxNDgwMDAxQjdCCi06MTAwMDQwMDAwMDAwMDAwMDEwNjgwMDQzMjQwQTAwMDExMThBMDA0OEUzCi06MTAwMDUwMDAzNEU3MDg4MDMxNjVGRkZGMEUwMDE2MjYwMjAwMjAyMURDCi06MTAwMDYwMDAwRTAwMTY2NjhGODQwMDU0OEY4NDAwMjQ5NDhEMDA3MEQ3Ci06MTAwMDcwMDAyNUFDMDAwMUE0OEMwMDcwOTQ4QjAwNzAzQzA2MDgwMDM1Ci06MTAwMDgwMDA4Q0M2MzE4ODMxNjc3RkZGMTBFNjAwNEYwMDAwMDAwMDBBCi06MTAwMDkwMDAwMjAwMjAyMTAyMjAyODIxOEZCRjAwMTg4RkIxMDAxNEY4Ci06MTAwMEEwMDA4RkIwMDAxMDBBMDAxNzMwMjdCRDAwMjA5MTQ0MDBDNDEzCi06MTAwMEIwMDAyNDA2RkY4MDAwODY4ODI1QTE1MTAwQzQ5Nzg0MDA0NDRGCi06MTAwMEMwMDAzMDg4RkZGRjExMDAwMDFDOTM4OTAwMjg4RjhFMDAyNEM4Ci06MTAwMEQwMDAyNDE5RUZGRjAwOEJGODIzOTVEODAwQUMwMTY4NjgyQjNBCi06MTAwMEUwMDAzM0U5MDBGRjAzMTk3ODI0QTVDRjAwQUM1MUEwMDAyQTAyCi06MTAwMEYwMDAwMTAwNTgyMThFMDUwMDIwMjQwOEZGRkIyNDAzMDAwMTg1Ci06MTAwMTAwMDAwMEE4MTAyNEFFMDIwMDIwMTE4MzAwMjUzNEU3ODAwMEVGCi06MTAwMTEwMDAwMjAwMjAyMTMxNjVGRkZGMEUwMDE2MjYwMTIwMzAyMTRDCi06MTAwMTIwMDA5NzhCMDA0NDhGODcwMDQ4QTc4MDAwNDQwMEVCODAyMzEyCi06MTAwMTMwMDBBRjkwMDA0ODkzODkwMDI4OEY4QzAwMjQ4RkJGMDAxODRGCi06MTAwMTQwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwODFECi06MTAwMTUwMDBBMTg5MDBDNzhFMDgwMDIwMjQwOUZGRkIzNEU3ODAwMDM2Ci06MTAwMTYwMDAwMTA5MjgyNEFFMDUwMDIwMTU4QUZGQkEzNEU3MDg4MDZCCi06MTAwMTcwMDAwMjAwMjAyMTBFMDAxNUY0MzE2NUZGRkYwMjAwMjAyMTRFCi06MTAwMTgwMDAwMjIwMjgyMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEZCCi06MTAwMTkwMDAwQTAwMTczMDI3QkQwMDIwMEEwMDE3RTcwMDAwNDgyMTk5Ci06MTAwMUEwMDAwMjAwMjAyMTMxNjVGRkZGMEUwMDE1RjQwMTIwMzAyMUVGCi06MTAwMUIwMDA5NzhCMDA0NDhGODcwMDQ4QTc4MDAwNDQwMEVCODAyMzgyCi06MTAwMUMwMDAwQTAwMTdGN0FGOTAwMDQ4OTQ4OTAwNzAyNDBBODAwMDU1Ci06MTAwMUQwMDAwMTJBNDAyNEE0ODgwMDcwOTA4NTAwNzA5MDk5MDA3MEQ2Ci06MTAwMUUwMDAzMEEyMDBGRjAwMDIxOUMyMDAwM0Y4MjcwMDFGQzFDMDlGCi06MTAwMUYwMDAzMzJGMDA3RjAxRjg3MDI1QTA4RTAwNzAwQTAwMTdDRjAyCi06MTAwMjAwMDAwMjAwMjAyMThGODgwMDI0MjQwMzAwMDE5MTBBMDA3ODM1Ci06MTAwMjEwMDA5MTA1MDBDNzI1MDkwMDc4MzE0NzAwM0YyNEU2RkZFMDNCCi06MTAwMjIwMDAwMEMzMTgwNDJDQzIwMDIwMzA2NzAwMTlBMzg1MDAyOEUxCi06MTAwMjMwMDAxMDQwMDAxQUFGODkwMDM0M0MwQTgwMDAzNTRCMDAwMkEwCi06MTAwMjQwMDAyNDA1MDAwMTI0MDYwMDAxMTRFMDAwMTYwMDZCMTAyNEIwCi06MTAwMjUwMDAwMDAwMjgyMTE0NDAwMDBGMzA2MzAwMjAxMDYwMDAwRkMwCi06MTAwMjYwMDAyNDA1MDAwMThEMDYwMDc0OEQxOTAwNzQyNDAzRkY4MDlECi06MTAwMjcwMDAwMEMzMTAyNDAwMDI3OTQwMzMzODAwN0YwMUY4NjgyNTVDCi06MTAwMjgwMDAzQzBFMTAwMDAxQUU2MDI1QUQ0QzA4MzA5MTI4MDAwMUY1Ci06MTAwMjkwMDAzMTA2MDAwMTBBMDAxN0E1MDAwMDAwMDAwM0UwMDAwODc1Ci06MTAwMkEwMDAwMDAwMDAwMDhEMEYwMDc0OEQwRDAwNzQyNDE4RkY4MDc1Ci06MTAwMkIwMDAwMUY4NzAyNDAwMEU0MTQwMzFBQzAwN0YwMTBDNTAyNTQ0Ci06MTAwMkMwMDAzQzBCMTAwMDAxNEIzODI1M0MwOTgwMDAwQTAwMTdBNUEzCi06MTAwMkQwMDBBRDI3MDgzMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzNDk1Ci06MTAwMkUwMDBBRkI0MDAyMEFGQjEwMDE0QUZCRjAwMjRBRkIzMDAxQzA3Ci06MTAwMkYwMDBBRkIyMDAxODhFMDUwMDEwM0MwMjA4MDA4QzQyMzFCMEVECi06MTAwMzAwMDA4Rjg2MDAzODMwQTczRkZGMDBFMjE4MkI4Q0QyMDAxNEY0Ci06MTAwMzEwMDAwMDgwODgyMThDRDMwMDIwMTA2MDAwMDcwMDAwQTAyMUZECi06MTAwMzIwMDA5MENCMDAwRDI0MEFGRjgwMDE0QjQ4MjQzMTI4MDBGRkE4Ci06MTAwMzMwMDAxNTAwMDAwQzAwMDU2MzgyMDIyMDIwMjEyNDExMDAwRDBECi06MTAwMzQwMDBBMzkxMDA1MDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQ0Y2Ci06MTAwMzUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMTZBOUQ4Ci06MTAwMzYwMDAyN0JEMDAyODMxODUwMDAzNTRBMEZGRjQwMjIwMjAyMTdFCi06MTAwMzcwMDA5NENGMDAxQzhGOEUwMDI0OEUwNzAwMjhBNUNGMDBEOEI0Ci06MTAwMzgwMDA4Q0NEMDAxMDAyNEQzMDIzMTBFNjAwNUMyNDAyMDAxRkNCCi06MTAwMzkwMDAwRTAwMTZBOUEzODIwMDUwMjQxRkZGRkYxMDVGMDA0RTFECi06MTAwM0EwMDAyNDA0RkZGRjhGODMwMDNDOEY4ODAwMkMwMjYzOTgyMTc4Ci06MTAwM0IwMDA4RDA5MDAxMDAxMjMxMDIzOEY4MzAwMUNBRDAyMDAxMDUzCi06MTAwM0MwMDBBRDEzMDAyMDhDNjcwMDc0MDBGMzIwMkIxNDgwMDA2MkIyCi06MTAwM0QwMDAwMjIwMjAyMThGODYwMDM4OEUwQzAwMjQ4Q0M1MDAyNDNBCi06MTAwM0UwMDAxMTg1MDAwNzAyMjAyMDIxMjQwRTAwMUMwRTAwMTZBOUYyCi06MTAwM0YwMDBBMzhFMDA1MDI0MERGRkZGMTA0RDAwMzcyNDA0RkZGRjkzCi06MTAwNDAwMDA4Rjg0MDAyQzhDOTgwMDI0MjcwRjAwMDFBQzhGMDAyNENGCi06MTAwNDEwMDAxMjcyMDA0NDhGOTkwMDFDOEYzMjAwNzQxMjUzMDA0MUY1Ci06MTAwNDIwMDAzQzBBMDA4MDhFMDkwMDAwMDEyQTEwMjQxNDQwMDAzQTgyCi06MTAwNDMwMDAwMDAwMDAwMDhFMDQwMDE0MjQxMkZGRkYxMDkyMDAwNjNBCi06MTAwNDQwMDAyNDBCMDAxQjAyMjAyMDIxMEUwMDE2QTlBMzhCMDA1MEI0Ci06MTAwNDUwMDAxMDUyMDAyMTI0MDRGRkZGOEUwMzAwMDAzQzBDMDAwMTE5Ci06MTAwNDYwMDAwMDZDMjgyNDEwQTAwMDEzM0MwNjAwODAwMDY2QTAyNDI1Ci06MTAwNDcwMDAxNjgwMDAwOTAyMDAyODIxMDIyMDIwMjEyNDBFMDAxQUUzCi06MTAwNDgwMDAwRTAwMTZBOUEzOEUwMDUwMjQwREZGRkYxMDREMDAxMjgwCi06MTAwNDkwMDAyNDA0RkZGRjAyMDAyODIxMDIyMDIwMjEwRTAwMTZDOTlCCi06MTAwNEEwMDAyNDA2MDAwMTI0MTBGRkZGMjQwNEZGRkYxMDUwMDAwQTVGCi06MTAwNEIwMDAyNDE0MDAwMThGOEYwMDJDMDIyMDIwMjEwMjgwMzAyMTgzCi06MTAwNEMwMDA5NUYyMDAzNDI0MDUwMDAxMjY1ODAwMDEwRTAwMTdBNUZFCi06MTAwNEQwMDBBNUY4MDAzNDAwMDAyMDIxOEZCRjAwMjQ4RkI0MDAyMDM1Ci06MTAwNEUwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEIyCi06MTAwNEYwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjg4RjgzMDAzQzA2Ci06MTAwNTAwMDAwMEUzQzgyMTAyNTlDMDJCMTMwMEZGQTg4Rjg4MDAyQ0RDCi06MTAwNTEwMDAwQTAwMTg4RTI0MDIwMDE4QUM4MDAwMjAwQTAwMThCOEM3Ci06MTAwNTIwMDA4RTA0MDAxNDhFMUYwMDAwM0MwNzAwODAwM0U3OTgyNDBGCi06MTAwNTMwMDAxNjYwRkZGOTI0MDgwMDFBMDIyMDIwMjEwRTAwMTZBOUQ3Ci06MTAwNTQwMDBBMzg4MDA1MDI0MDNGRkZGMTQ0M0ZGQkEyNDA0RkZGRkQ1Ci06MTAwNTUwMDAwQTAwMThFMThGQkYwMDI0MjQwQjAwMUQwRTAwMTZBOTBECi06MTAwNTYwMDBBMzhCMDA1MDI0MEFGRkZGMTQ0QUZGOUEyNDA0RkZGRkM0Ci06MTAwNTcwMDAwQTAwMThFMThGQkYwMDI0OEY4NTAwMjQyN0JERkZEODEzCi06MTAwNTgwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDkxCi06MTAwNTkwMDBBRkJGMDAyMDkwQTcwMEM0OEY5MDAwMzQyNDEyRkZGRjRCCi06MTAwNUEwMDAzNEUyMDA0MDkyMDYwMDAwQTBBMjAwQzQ4RTAzMDAxMEI2Ci06MTAwNUIwMDAwMDgwOTgyMTEwNzIwMDA2MzBEMTAwM0YyNDA4MDAwRDAxCi06MTAwNUMwMDAwRTAwMTZBOUEzODgwMDUwMTA1MjAwMjYyNDA2RkZGRjMzCi06MTAwNUQwMDA4RjhBMDAyNDhFMDkwMDE4OEQ0NDAwQzAxMTI0MDAwNzYyCi06MTAwNUUwMDAyNDBDMDAwRTAyNjAyMDIxMEUwMDE2QTlBMzhDMDA1MERFCi06MTAwNUYwMDAyNDBCRkZGRjEwNEIwMDFCMjQwNkZGRkYyNDA0MDAyMEU4Ci06MTAwNjAwMDAxMjI0MDAwNDhGOEQwMDI0OTFBRjAwQzQzNUVFMDAyMDI5Ci06MTAwNjEwMDBBMUFFMDBDNDhGODUwMDNDMTBBMDAwMUEwMDAwMDAwMEFECi06MTAwNjIwMDAxMjI0MDA0QjhGOTgwMDI0OEY5MkZFRDQyNDA2RkZGREU1Ci06MTAwNjMwMDA5NzEwMDA3MDk2NTEwMDBBMTIzMDAwMEI4RkJGMDAyMEY3Ci06MTAwNjQwMDAzQzFGMDgwMDhGRkYzMThDMDNFNUM4MkIxNzIwMDAxRUNDCi06MTAwNjUwMDAwMjYwMjAyMTAwMDAyODIxMEUwMDE3QTUyNDA2MDAwMUI5Ci06MTAwNjYwMDAwMDAwMzAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODE0Ci06MTAwNjcwMDA4RkIxMDAxNDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwOEZCCi06MTAwNjgwMDAyN0JEMDAyODUyMjQwMDJBOEUwMzAwMTQ4Rjg0MDAyNEUyCi06MTAwNjkwMDA5NDg5MDA3MDI1MjgwMDAxQTQ4ODAwNzA5NDg3MDA3MDU4Ci06MTAwNkEwMDAzQzA1MDgwMDhDQTUzMTg4MzBFMjdGRkYxMDQ1MDAwRTI0Ci06MTAwNkIwMDAwMDAwMDAwMDAyNjAyMDIxMEUwMDE3MzAyNDA1MDAwMTE4Ci06MTAwNkMwMDAwQTAwMTk0MzAwMDAzMDIxMjQwMjAwMkRBMzgyMDA1MEFCCi06MTAwNkQwMDAwRTAwMTZBOTI0MTNGRkZGMTQ1M0ZGRTEyNDA2RkZGRkE5Ci06MTAwNkUwMDAwQTAwMTk0NDhGQkYwMDIwOTQ5ODAwNzAyNDE5ODAwMERDCi06MTAwNkYwMDAyNDA1MDAwMTAzMTk5MDI0QTQ5MjAwNzA5MDkxMDA3MEM5Ci06MTAwNzAwMDA5MDhEMDA3MDMyMzAwMEZGMDAxMDc5QzIwMDBGNzAyNzBBCi06MTAwNzEwMDAwMDBFNjFDMDMxQUIwMDdGMDE2QzUwMjVBMDhBMDA3MEQzCi06MTAwNzIwMDAwRTAwMTczMDAyNjAyMDIxMEEwMDE5NDMwMDAwMzAyMTFBCi06MTAwNzMwMDAyNDA2RkZGRjE0NjZGRkQ2OEY4NDAwMjQwMjYwMjAyMTY4Ci06MTAwNzQwMDAwRTAwMTczMDI0MDUwMDAxMEEwMDE5NDMwMDAwMzAyMTczCi06MTAwNzUwMDAwMjYwMjAyMTBBMDAxOTVEMjQwMjAwMEE4Rjg4MDAyNDBCCi06MTAwNzYwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ5MTBBMDBDNDZFCi06MTAwNzcwMDA4Rjg3MDAzNDAwODA4MDIxMzU0OTAwNDA4Q0U2MDAxMENFCi06MTAwNzgwMDBBMTA5MDBDNDNDMDIwODAwOEM0MjMxQjAzMEM1M0ZGRkQzCi06MTAwNzkwMDAwMEEyMTgyQjEwNjAwMDA3OEY4NTAwMzgyNDBERkY4MDAxCi06MTAwN0EwMDA5MEFFMDAwRDAxQUU2MDI0MzE4QjAwRkYxNTYwMDAwODkzCi06MTAwN0IwMDAwMDA2QzM4MjAyMDAyMDIxMjQwMzAwMEQ4RkJGMDAxNDE1Ci06MTAwN0MwMDA4RkIwMDAxMDI3QkQwMDE4MEEwMDE2QTlBMzgzMDA1MDlGCi06MTAwN0QwMDAzMzA2MDAwMzI0MEYwMDAyNTRDRkZGRjcwMjAwMjAyMTRDCi06MTAwN0UwMDA5NEEyMDAxQzhGODUwMDI0MjQxOTAwMjNBNEEyMDBEODAxCi06MTAwN0YwMDA4Q0U4MDAwMDAwMDgxRTAyMzA3RjAwM0YxM0Y5MDAzNTJFCi06MTAwODAwMDAzQzBBMDA4MzhDRTgwMDE4OENBNjAwQzAxMTA2MDAwODgyCi06MTAwODEwMDAwMDAwMDAwMDI0MDUwMDBFMEUwMDE2QTlBMzg1MDA1MDVDCi06MTAwODIwMDAyNDA3RkZGRjEwNDcwMDE4MjQwNEZGRkY4Rjg1MDAyNEQyCi06MTAwODMwMDA5MEE5MDBDNDM1MjQwMDIwQTBBNDAwQzQ4RjhDMDAyQ0YzCi06MTAwODQwMDA5MThFMDAwRDMxQ0QwMDdGQTE4RDAwMEQ4RjgzMDAzQzc2Ci06MTAwODUwMDAxMDYwMDAxQzAyMDAyMDIxOEY4NDAwMzg4Qzk4MDAxMDRBCi06MTAwODYwMDAwMzAzNzgyQjExRTAwMDBEMjQxOTAwMTgwMjAwMjAyMTQ5Ci06MTAwODcwMDBBMzk5MDA1MDBFMDAxNkE5MjQxMEZGRkYxMDUwMDAwMjhCCi06MTAwODgwMDAyNDA0RkZGRjAwMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDUwCi06MTAwODkwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMTg4Qzg2MDAxMDlFCi06MTAwOEEwMDA4RjlGMDAyQzAyMDAyMDIxMDBDMzEwMjNBRkUyMDAxMDE0Ci06MTAwOEIwMDAyNDA1MDAwMTBFMDAxN0E1MjQwNjAwMDEwQTAwMTlDQzJBCi06MTAwOEMwMDAwMDAwMjAyMTBFMDAxNzMwMjQwNTAwMDEwQTAwMTlDQzc5Ci06MTAwOEQwMDAwMDAwMjAyMTAxMEE1ODI0MTU2QUZGRDk4RjhDMDAyQ0IyCi06MTAwOEUwMDBBMEE2MDBFQzBBMDAxOUI5QTM4NjAwNDIyN0JERkZEOEQ0Ci06MTAwOEYwMDBBRkIwMDAxMDhGOTAwMDM0QUZCMjAwMThBRkJGMDAyMDJGCi06MTAwOTAwMDBBRkIzMDAxQ0FGQjEwMDE0OEUxMTAwMTAzQzAzMDgwMEZGCi06MTAwOTEwMDA4QzYzMzFCMDMyMjUzRkZGMDBBMzEwMkIxMDQwMDAwODNDCi06MTAwOTIwMDAwMDgwOTAyMThGODYwMDM4MjQwOUZGODA5MENBMDAwRDM2Ci06MTAwOTMwMDAwMTJBNDAyNDMxMDcwMEZGMTRFMDAwMEIwMDExNkI4MkY0Ci06MTAwOTQwMDAwMjQwMjAyMTI0MTIwMDBEQTM5MjAwNTA4RkJGMDAyMEVFCi06MTAwOTUwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNECi06MTAwOTYwMDAwQTAwMTZBOTI3QkQwMDI4MzFBQzAwMDMyNDBCMDAwMUEyCi06MTAwOTcwMDA1NThCRkZGNDAyNDAyMDIxOTBDRjAwMEQzMUVFMDAwODhFCi06MTAwOTgwMDAxMUMwMDA2MDhGOTMwMDNDMTY2MDAwMDkyNDAyMDAyNzBDCi06MTAwOTkwMDA4RTE5MDAwQzhDRDgwMDIwMTczODAwMDUyNDAyMDAyMDg2Ci06MTAwOUEwMDA4RTAyMDAwODhDREYwMDI0MTA1RjAwNDAyNDAyMDAyMDJCCi06MTAwOUIwMDAwRTAwMTZBOUEzODIwMDUwMjQwNkZGRkYxMDQ2MDAzMzQ0Ci06MTAwOUMwMDAyNDA0RkZGRjhGOTkwMDJDMjQwQUZGRjczQzEzODAwRUFDCi06MTAwOUQwMDA5MzI5MDAwRDI0MDRGRjgwM0MwRDgwMDAwMTJBRjgyNDk3Ci06MTAwOUUwMDBBMzNGMDAwRDhGOTkwMDFDM0MwODA4MDA4RDA4MzFBQzE2Ci06MTAwOUYwMDA4RjgzMDA1NDk3MjcwMDc4OEY5RjAwMkMwMTAzMTAyMUNDCi06MTAwQTAwMDAzMEU1N0ZGRjAwMDUzMDQwMDA0Njc4MjEzMUY4MDA3RjU3Ci06MTAwQTEwMDAwMzEzNjAyMTAxRTQ3MDI0QURBRTAwMkNBNTkxMDAwMDA5Ci06MTAwQTIwMDA4RkVCMDAyODI1NkEwMDAxQUZFQTAwMjg4RkUzMDAyQzM1Ci06MTAwQTMwMDA4RTA5MDAyQzAwNjk0MDIxQUZFODAwMkM4RTA3MDAyQ0E1Ci06MTAwQTQwMDBBRkU3MDAzMDhFMDUwMDE0QUZFNTAwMzQ5N0U2MDAzQUJBCi06MTAwQTUwMDAyNEMyMDAwMUE3RTIwMDNBOTczMzAwNzgzQzEwMDgwMDU2Ci06MTAwQTYwMDA4RTEwMzFCMDI2NjMwMDAxMzA3MTdGRkYxMjMwMDAyN0Y1Ci06MTAwQTcwMDAwMDYwMzAyMThGOEYwMDFDMDI0MDIwMjEyNDA1MDAwMURFCi06MTAwQTgwMDAwRTAwMTczMEE1RTYwMDc4MDAwMDIwMjE4RkJGMDAyMDVGCi06MTAwQTkwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEZDCi06MTAwQUEwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjg4RTA1MDAxNEY3Ci06MTAwQUIwMDAyNDEzRkZGRjEwQjMwMDFEOEY4MzAwMjQ4RTA4MDAxODNECi06MTAwQUMwMDA4QzY3MDBDMDE1MDcwMDA5MjQwMjAwMEU4RTBBMDAyNDVFCi06MTAwQUQwMDA4Q0M5MDAyODE1NDkwMDA1MjQwMjAwMjE4RTA3MDAyODMyCi06MTAwQUUwMDA4Q0NCMDAyQzEwRUIwMDEzMjQwMjAwMUYwRTAwMTZBOTYzCi06MTAwQUYwMDBBMzgyMDA1MDE0NTNGRkIzMjQwNEZGRkYwQTAwMUE0RUQwCi06MTAwQjAwMDA4RkJGMDAyMDBBMDAxQTE2MjQwMjAwMjQyNDBFODAwMDQxCi06MTAwQjEwMDAwMDZFNjgyNDMxQUNGRkZGMDAwQzVCQzIzMTcxMDBGRjM2Ci06MTAwQjIwMDAwMDExODAyNzBBMDAxQTQ3MDAxMDMzQzAwQTAwMUE2NTE2Ci06MTAwQjMwMDAyNDAyMDAyNThFMDUwMDJDMTBBMEZGRUMyNDAyMDAyM0M3Ci06MTAwQjQwMDA4RjhFMDAxQzhEQ0QwMDc0MDFBNTYwMkIxNTgwRkZFN0YyCi06MTAwQjUwMDAyNDAyMDAyNjhDQ0YwMDE0MDBBN0MwMjEwMUY4MjAyQjBFCi06MTAwQjYwMDAxMDgwRkY5OThGOTkwMDJDMDI0MDIwMjEwQTAwMUE2NUZECi06MTAwQjcwMDAyNDAyMDAyMjI3QkRGRkUwQUZCMDAwMTA4RjkwMDAzNEE4Ci06MTAwQjgwMDBBRkIxMDAxNEFGQkYwMDE4OEUwNTAwMTAzQzAzMDgwMDgxCi06MTAwQjkwMDA4QzYzMzFCMDAwODA4ODIxMzBBNDNGRkYwMDgzMTAyQjhDCi06MTAwQkEwMDAxMDQwMDAwNzhGODYwMDM4MjQwOUZGODA5MENBMDAwRDhFCi06MTAwQkIwMDAwMTJBNDAyNDMxMDcwMEZGMTRFMDAwMDk4RjhCMDAzQzFDCi06MTAwQkMwMDAyNDEwMDAwRDAyMjAyMDIxQTM5MDAwNTA4RkJGMDAxODk4Ci06MTAwQkQwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDE2QTkyN0JEMDAyMEE1Ci06MTAwQkUwMDAxMTYwMDAwODAwMDVDMzgyOEY4RjAwMjQ4RjhFRkVENDExCi06MTAwQkYwMDAyNDA3RkZGRDk1RUMwMDcwOTVDRDAwMEExMUFDMDAzODdDCi06MTAwQzAwMDA4RkJGMDAxODMzMDUwMDAzMTRBMDAwMTAwMDAwMDAwMDdGCi06MTAwQzEwMDA5MjE5MDAwMjEzMjAwMDQxMDAwMDAwMDA4RTA2MDAyNEZCCi06MTAwQzIwMDA1MEMwMDAwRjkyMDQwMDAzMDIyMDIwMjEyNDAyMDAwRjc0Ci06MTAwQzMwMDAwRTAwMTZBOUEzODIwMDUwMjQwOEZGRkYxNDQ4MDAwN0U1Ci06MTAwQzQwMDAyNDA3RkZGRjBBMDAxQUUyOEZCRjAwMTg5MEMzMDAwREFGCi06MTAwQzUwMDAzMDY0MDAwODEwODAwMDM3MDIyMDIwMjE5MjA0MDAwMzM1Ci06MTAwQzYwMDAyNDA3MDAwMjMwODkwMEZGMTUyNzAwMDUzMDhGMDBGRkEwCi06MTAwQzcwMDA4RjhBMDAzQzExNDAwMDMxMjQwQzAwMkMzMDhGMDBGRjgzCi06MTAwQzgwMDAzOUU1MDAxMDJDQUQwMDAxMkRFRTAwMDEwMjAwMjgyMUY1Ci06MTAwQzkwMDAwMUNEMzAyNTBFMDAxNkM5MDIyMDIwMjEyNDEwRkZGRkFGCi06MTAwQ0EwMDAxMDUwMDAwRTI0MDdGRkZGOEY4MzAwM0MxMDYwMDAxN0Q4Ci06MTAwQ0IwMDAwMjIwMjAyMTNDMTkwODAwOEYzOTMxOEMwMzIzQzAyQkRFCi06MTAwQ0MwMDA1NzAwMDAwQzI0MTEwMDJEMDIyMDIwMjEwMDAwMjgyMUIzCi06MTAwQ0QwMDAwRTAwMTdBNTI0MDYwMDAxMDAwMDM4MjE4RkJGMDAxODYwCi06MTAwQ0UwMDA4RkIxMDAxNDhGQjAwMDEwMDBFMDEwMjEwM0UwMDAwODY1Ci06MTAwQ0YwMDAyN0JEMDAyMDBFMDAxNkE5QTM5MTAwNTAxNDUwRkZGNjQ2Ci06MTAwRDAwMDAyNDA3RkZGRjBBMDAxQUUyOEZCRjAwMTgwRTAwMTczMEY5Ci06MTAwRDEwMDAyNDA1MDAwMTBBMDAxQUUxMDAwMDM4MjE4Q0RGMDAyNEJDCi06MTAwRDIwMDA4RTAyMDAyNDU0NUZGRkMxMDIyMDIwMjEwQTAwMUFDMjUzCi06MTAwRDMwMDA5MjA0MDAwMzBBMDAxQUI2MjQwMjAwMTAwMjIwMjAyMUE3Ci06MTAwRDQwMDAwRTAwMTZBOUEzOEMwMDUwMjQwQkZGRkYxMDRCRkZFM0VECi06MTAwRDUwMDAyNDA3RkZGRjBBMDAxQUM5OTIwNDAwMDMzMEE1MDBGRjEwCi06MTAwRDYwMDAyNDA2MDAwMTI0QTkwMDAxMDBDOTEwMkIxMDQwMDAwQzJBCi06MTAwRDcwMDAwMDAwNDAyMTI0MEEwMDAxMDBBNjE4MjMzMDhCMDAwMTQ2Ci06MTAwRDgwMDAyNEM2MDAwMTAwNkEzODA0MDAwNDIwNDIxMTYwMDAwMkY5Ci06MTAwRDkwMDAwMEM5MTgyQjAxMDc0MDI1MTQ2MEZGRjgwMEE2MTgyMzhFCi06MTAwREEwMDAwM0UwMDAwODAxMDAxMDIxMjdCREZGRDhBRkIwMDAxOEY0Ci06MTAwREIwMDA4RjkwMDAzNEFGQjEwMDFDQUZCRjAwMjAyNDAzRkZGRkIxCi06MTAwREMwMDAyNDExMDAyRkFGQTMwMDEwOTIwNjAwMDAyNDA1MDAwODk0Ci06MTAwREQwMDAyNjEwMDAwMTAwNjYyMDI2MEUwMDFCMDEzMDg0MDBGRjUzCi06MTAwREUwMDAwMDAyMUUwMDNDMDIxRURDMzQ0NjZGNDEwQTAwMUIyOTMzCi06MTAwREYwMDAwMDAwMTAyMTEwQTAwMDA5MDA4MDE4MjEyNDQ1MDAwMUU2Ci06MTAwRTAwMDAzMEEyRkZGRjJDNDUwMDA4MDQ2MUZGRkEwMDAzMjA0MEQ4Ci06MTAwRTEwMDAwMDg2MjAyNjE0QTBGRkY5MDA4MDE4MjEwRTAwMUIwMTc3Ci06MTAwRTIwMDAyNDA1MDAyMDhGQTMwMDEwMjYyOUZGRkYzMTMxMDBGRjg5Ci06MTAwRTMwMDAwMDAzNDIwMjI0MDcwMEZGMTYyN0ZGRTIwMTAyMTgyNkUyCi06MTAwRTQwMDAwMDAzNTAyN0FGQUEwMDE0QUZBQTAwMTAwMDAwMzAyMTAxCi06MTAwRTUwMDAyN0E4MDAxMDI3QTcwMDE0MDBFNjc4MjM5MUVEMDAwM0NGCi06MTAwRTYwMDAyNENFMDAwMTAwQzg2MDIxMzFDNjAwRkYyQ0NCMDAwNDU1Ci06MTAwRTcwMDAxNTYwRkZGOUExOEQwMDAwOEZBMjAwMTA4RkJGMDAyMDI4Ci06MTAwRTgwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyOEI4Ci06MTAwRTkwMDA5MzgzMDAzMDI3QkRGRkUwMjQwMjAwMzRBRkIxMDAxNDdCCi06MTAwRUEwMDBBRkIwMDAxMEFGQkYwMDFDQUZCMjAwMTgwMDgwODgyMUE3Ci06MTAwRUIwMDAxMDYyMDA2MjAwQTA4MDIxOTIwNDAwMDQxNDgwMDA0NUFBCi06MTAwRUMwMDA4Rjg4MDAyNEEzODAwMDI4OEUwNTAwMDQ4RDA2MDBDOEFBCi06MTAwRUQwMDAzQzA3MDBGRjM0RTNGRkZGMDBBMzI4MjQwMEM1MTAyQkNDCi06MTAwRUUwMDAxNDQwMDA0REFGODUwMDNDOTc4QTAwNDQ4Rjg3MDA0ODJFCi06MTAwRUYwMDAwMTQ3MTAyMzEwQTAwMDMyQTc4MjAwNDQ4Rjk4MDAxQ0U1Ci06MTAwRjAwMDAzMDRDRkZGRjkzMTIwMDdDMDAxMjc4ODIzMUYxMDAwMTE3Ci06MTAwRjEwMDAwMDExNzA4MDAxQzU2ODIxMDE4RDU4MkIxMTYwMDA2MTlFCi06MTAwRjIwMDA4Rjg2MDAyNDhGODkwMDIwOEY4NDAwNEMxMDg5MDA1RUZBCi06MTAwRjMwMDAzQzAyM0YwMThFMUYwMDAwM0MxMDI1MDAwM0UyQzgyNDQ0Ci06MTAwRjQwMDAxNzMwMDA3QThGODQwMDM0OEY4NzAwMzQ4Rjg2MDAyNDE2Ci06MTAwRjUwMDA4Q0UzMDAwMEFDQzMwMDc4OENFNTAwMTBBQ0M1MDA4OEMxCi06MTAwRjYwMDA4Rjg3MDA0ODhGODUwMDNDOTM4RDAwMjgzMEFFMDAwM0FBCi06MTAwRjcwMDAwMDBFNDAyMzMxMEEwMDAzMDE0RDQwMjFBMzg4MDAyOEMwCi06MTAwRjgwMDA5NENCMDBBQzAxMjc2MDIxQUY4QzAwMjAzNTY5MTAwMEE0Ci06MTAwRjkwMDBBNEM5MDBBQzE2MjAwMDUxMDE0NTIwMjFBRjg0MDA0OEFGCi06MTAwRkEwMDAwMDAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEU5Ci06MTAwRkIwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDQyCi06MTAwRkMwMDA4Rjg0MDAyMEFGODAwMDQ4MDA4NzMwMjEwQTAwMUI5MkU4Ci06MTAwRkQwMDBBRjg2MDAyMDI0MUYwMDBDQTM5RjAwNTAwRTAwMTZBOTBFCi06MTAwRkUwMDAwMjIwMjAyMTI0MTlGRkZGMTA1OUZGRUUyNDA0RkZGRkU3Ci06MTAwRkYwMDA4Rjg4MDAyNEEzODAwMDI4OEUwNTAwMDQ4RDA2MDBDODc5Ci06MTAxMDAwMDAzQzA3MDBGRjM0RTNGRkZGMDBBMzI4MjQwMEM1MTAyQjlBCi06MTAxMDEwMDAxMDQwRkZCNUFGODUwMDNDMDIyMDIwMjEyNDA5MDAxOUIzCi06MTAxMDIwMDBBMzg5MDA1MDBFMDAxNkE5MjQxMUZGRkYxMDUxRkZERDA3Ci06MTAxMDMwMDAyNDA0RkZGRjBBMDAxQjY0OEY4NTAwM0M4Rjg0MDAyNDdBCi06MTAxMDQwMDA4Rjg3MDAzNDhDRjIwMDMwOTA4NjAwQzQzMEM1MDAxMEM5Ci06MTAxMDUwMDAxNEEwMDAxMDhGODMwMDQ4MkM2ODAwMDUxNTAwMDAyODlDCi06MTAxMDYwMDAwMDAwMDAwMDkwOEEwMEM0MjQ2QkZGRkMzMTQ5MDAxMDhFCi06MTAxMDcwMDAxNTIwMDAwODMxNjQwMEZGOEY4RDAwNEM4RjhDMDAyMEZDCi06MTAxMDgwMDAxMUFDMDAwNDM4OEYwMDAxMzFFRTAwMDExNUMwMDAyRkIzCi06MTAxMDkwMDAwMDAwMDAwMDBFMDAxQjE0MDAwMDAwMDAwQTAwMUJFQjAzCi06MTAxMEEwMDAwMDAwMDAwMDhGODkwMDIwOTM4RDAwMjgzMEFFMDAwM0RGCi06MTAxMEIwMDAwMDBFNDAyMzMxMEEwMDAzMDE0RDQwMjFBMzg4MDAyODdGCi06MTAxMEMwMDA5NENCMDBBQzAxMjc2MDIxQUY4QzAwMjAzNTY5MTAwMDYzCi06MTAxMEQwMDBBNEM5MDBBQzEyMjBGRkIxMDE0NTIwMjEyNTE4MDAwNDRECi06MTAxMEUwMDBBMzk4MDAyODk0Q0YwMEFDMjQ5MjAwMDRBRjkyMDA0ODRCCi06MTAxMEYwMDAzNUYxMjAwMEE0RDEwMEFDMEEwMDFCOTMwMDAwMjAyMTkwCi06MTAxMTAwMDA4QzgyMDBEQzEyNDJGRjZDMDIyMDIwMjEyNDE4MDAwNTkyCi06MTAxMTEwMDBBMzk4MDA1MDBFMDAxNkE5MjQxMkZGRkYxNDUyRkY2Njc4Ci06MTAxMTIwMDAyNDA0RkZGRjBBMDAxQjk0OEZCRjAwMUMzMEU1MDBGRjYyCi06MTAxMTMwMDAwRTAwMTVCMDAwMDAzMDIxOEY4NjAwMjQ4Rjg3MDA0OEY0Ci06MTAxMTQwMDA4Rjg5MDAyMDBBMDAxQjg0OEY4NTAwM0MwRTAwMTVEQjcwCi06MTAxMTUwMDAwMDAwMDAwMDBBMDAxQkVCMDAwMDAwMDA5MzgzMDA0MjI3Ci06MTAxMTYwMDAyN0JERkZFMDI0MDIwMDAyQUZCMjAwMThBRkIxMDAxNEE3Ci06MTAxMTcwMDBBRkJGMDAxQzAwODA4ODIxQUZCMDAwMTAwMDAwOTAyMTlDCi06MTAxMTgwMDAxMDYyMDA1NTI0MDRGRkZEOTc4MzAwNDQ4Rjg1MDA0OEJBCi06MTAxMTkwMDAzMDY2RkZGRjAwQzUyMDJCMTQ4MDAwNUI5Mzg3MDAzMDcyCi06MTAxMUEwMDAzQzA4ODAwMDk1MDQwMTIwMTBFNTAwNTI4RjhBMDAyMDQxCi06MTAxMUIwMDA4Rjg0MDA0QzMwQTUwMEZGMEUwMDE1QjAyNDA2MDAwMUZFCi06MTAxMUMwMDA4RjlGMDA1NDNDMDU4MDAwM0MxOTQwODAyN0VEMDE3ODNBCi06MTAxMUQwMDAzMUIwMDA3ODI0MEVGRjgwMDIxOTU4MjUzNEFGMDkwMDgxCi06MTAxMUUwMDAzMUI4MDAwNzAxQUU2MDI0QUNBQzA4MDAwMzBGODAyMUM5Ci06MTAxMUYwMDBBQ0FCMDgxMDAyMjAyMDIxMDIwMDI4MjEwRTAwMUI0RTVCCi06MTAxMjAwMDBBRjkwMDAzNDI0MDNGRkZGMTA0MzAwMzMyNDA0RkZGRjlBCi06MTAxMjEwMDA4RTBDMDAxMDNDMDcwODAwOENFNzMxQjA5MjA2MDAwMEVECi06MTAxMjIwMDAzMTg0M0ZGRjAwODcxMDJCMTA0MDAwMjMzMENEMDAzRjVBCi06MTAxMjMwMDA4Rjk4MDA1NDAwMDQ3MTgwM0MwNDA4MDA4Qzg0MzFBODBECi06MTAxMjQwMDAyNDA5RkY4MDkzOTAwMDQxMDA5ODQwMjEwMTBFMjAyMTQ1Ci06MTAxMjUwMDAwMDg5NzAyNDAwMEU1MTQwM0MwOTgwMDAzMDk5MDA3RkM1Ci06MTAxMjYwMDAzQzBGMDA4MDhGODgwMDI0MzUyNTA5NDAzNUUyMDAwMUJECi06MTAxMjcwMDAwMTU5MzgyNTMwOEIwMDc4MzA4NjAwMDczQzAzMTAwMDc4Ci06MTAxMjgwMDAzQzFGODAwQzAwQzVDMDIxMDE2MjU4MjUwMEUzNTAyNTk5Ci06MTAxMjkwMDAwMzNGNzgyMTM2MDUwMDAxQUQyRTA4MDRBRjk4MDAzOEQxCi06MTAxMkEwMDBBRDJCMDgxNEFGOEYwMDJDQUQyRTAwMjhBRDA0MDA3NEI4Ci06MTAxMkIwMDBBRDJBMDgzMEEzODUwMDQxOTM4MzAwNDIyNDEwMDAwMzI3Ci06MTAxMkMwMDA1MDcwMDAyNzI1QTNGRkUwMjQwQzAwMDExMDZDMDAxQ0M3Ci06MTAxMkQwMDAyNDA2MDAyMzAyNDAyMDIxOEZCRjAwMUM4RkIyMDAxODdCCi06MTAxMkUwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwOEJGCi06MTAxMkYwMDAyN0JEMDAyMDMxNDkwMDAzNTUyMEZGQUU4Rjg0MDA0Q0VDCi06MTAxMzAwMDAwQTAwMUMyNzhGOTAwMDRDOEY4NDAwNEMzMDY1MDBGRjMyCi06MTAxMzEwMDAwRTAwMTVCMDI0MDYwMDAxOTM4QjAwMzAyNDA1MDAzNDI0Ci06MTAxMzIwMDAxMTY1MDAxODk3ODMwMDQ0OEY4NTAwNDgzMDYyRkZGRkU1Ci06MTAxMzMwMDAwMEEyNTgyM0FGOEIwMDQ4MEEwMDFDNUZBNzgwMDA0NDFFCi06MTAxMzQwMDAxMUE2MDAzNzAwMDAwMDAwMDIyMDIwMjEyNDExMDAwQjBDCi06MTAxMzUwMDAwRTAwMTZBOUEzOTEwMDUwMEEwMDFDNUYwMDQwOTAyMUM2Ci06MTAxMzYwMDAyQzcyMDAyMDEyNDBGRkY4MDAwM0Y4ODAzQzA3MDgwMEIwCi06MTAxMzcwMDAyNEU3Nzk2MDAzRTdDODIxOEYyRDAwMDAwMUEwMDAwODUxCi06MTAxMzgwMDAwMDAwMDAwMDhGODUwMDQ4MkNBMjAwMDU1NDQwMDAxRDdECi06MTAxMzkwMDBBNzgwMDA0NDk3OEEwMDQ0MzE0OEZGRkYwMEE4NDgyM0YzCi06MTAxM0EwMDAyRDJGMDAwNTExRTAwMDAzMzE0NDAwRkYyNEFFRkZGQ0E3Ci06MTAxM0IwMDAzMUM0MDBGRjhGOTAwMDRDOEY5ODAwMjAxMjE4MDAwNDU5Ci06MTAxM0MwMDAzODk5MDAwMTMzMkQwMDAxMTVBMDAwMjkwMDAwMDAwMDBDCi06MTAxM0QwMDA4RjkxMDAyNDkyMjUwMEM0MzRBMzAwMTBBMjIzMDBDNERFCi06MTAxM0UwMDA5NzgzMDA0NDhGODUwMDQ4OEY4NDAwMjQzMDYyRkZGRjdDCi06MTAxM0YwMDAwMEEyNTgyM0FDODAwMERDQTc4MDAwNDQwQTAwMUM1RkQ4Ci06MTAxNDAwMDBBRjhCMDA0ODMwNjJGRkZGMDBBMjU4MjMwQTAwMUM1RjI4Ci06MTAxNDEwMDBBRjhCMDA0ODI0MDNGRkZGMTE4MzAwMDUwMDAwMDAwMDhDCi06MTAxNDIwMDAwRTAwMTk4MTAyMjAyMDIxMEEwMDFDNUYwMDQwOTAyMTNCCi06MTAxNDMwMDAwRTAwMTkwODAyMjAyMDIxMEEwMDFDNUYwMDQwOTAyMUE0Ci06MTAxNDQwMDAwRTAwMTlFNTAyMjAyMDIxMEEwMDFDNUYwMDQwOTAyMUI3Ci06MTAxNDUwMDAwRTAwMTg1RjAyMjAyMDIxMEEwMDFDNUYwMDQwOTAyMTJFCi06MTAxNDYwMDAwRTAwMUE4NzAyMjAyMDIxMEEwMDFDNUYwMDQwOTAyMUY0Ci06MTAxNDcwMDAwRTAwMTVEQjAwMDAwMDAwOTc4MzAwNDQ4Rjg1MDA0OEI0Ci06MTAxNDgwMDAzMDZDRkZGRjAwQUMzODIzMkNGRjAwMDU1M0UwRkZBOEIxCi06MTAxNDkwMDAzMDYyRkZGRjhGODYwMDI0QTc4MDAwNDRBQ0MyMDBEQ0NFCi06MTAxNEEwMDAzMDYyRkZGRjAwQTI1ODIzMEEwMDFDNUZBRjhCMDA0ODg4Ci06MTAxNEIwMDAyN0JERkZEMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyOEZCCi06MTAxNEMwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIxMDAxNDFGCi06MTAxNEQwMDAzQzBDODAwMDhEODgwMTI4MjQwRkZGODAzQzA3ODAwQTg3Ci06MTAxNEUwMDAyNTEwMDEwMDI1MEIwMDgwMDIwRjY4MjQzMjA1MDA3RkMzCi06MTAxNEYwMDAwMTZGNzAyNEFEOEUwMDkwMDBBNzI4MjFBRDhEMDAyNENGCi06MTAxNTAwMDA5MEE3MDBFQzMxNjkwMDdGM0MwQTgwMDQwMTJBMTgyMTcxCi06MTAxNTEwMDBBMzg3MDA0MjkwNjYwMDdDMDA4MDkwMjFBRjgzMDAxQzZFCi06MTAxNTIwMDAzMEMyMDAwMkFGODgwMDU0QUY4NTAwMjQwMEEwMTgyMTBCCi06MTAxNTMwMDAxNDQwMDAwMjI0MDQwMDM0MjQwNDAwMzBBMzg0MDAzMDRBCi06MTAxNTQwMDA4QzY2MDBDQzMwRjEwMEZGMjQwNDAwMDRBRjg2MDA0ODE0Ci06MTAxNTUwMDAxMjI0MDAwNEEzODAwMDUwOEU1MzAwMDQxNjYwMDAxRDY2Ci06MTAxNTYwMDAzQzA4ODAwMDkzODcwMDQxMzBGMjAwMDExMjQwMDAwRkQ4Ci06MTAxNTcwMDA4RkJGMDAyODhDQjgwMDc0OENBNDAwNzQyNDE5RkY4MERECi06MTAxNTgwMDAwMzE5ODgyNDAwMTE3MTQwMzA4RjAwN0YwMUNGNjAyNTNFCi06MTAxNTkwMDAzQzBEMjAwMDAxOEQ1ODI1MzBGNTAwRkUzQzBBODAwMEVFCi06MTAxNUEwMDBBRDRCMDgzMEEzOTUwMDQxOEZCRjAwMjg4RkI1MDAyNEI0Ci06MTAxNUIwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEJECi06MTAxNUMwMDA4RkIwMDAxMDI0MDIwMDAxMjdCRDAwMzAwM0UwMDAwOEE2Ci06MTAxNUQwMDBBQ0E2MDBDQzhFNTkwMDA4OTUxRjAxMjA4RTQ2MDAxMDQ1Ci06MTAxNUUwMDAwMzNGQzAyMTMzMDdGRkZGMzBGNTAwMEYzMkI0MDAwMTg1Ci06MTAxNUYwMDBBRjg2MDAyMDE2ODAwMDNCQTM5NTAwNDAzNTA2MEMwMDA2Ci06MTAxNjAwMDAwMkE2MTAyMTAwRjUxODIzQUQwMzAwODRBRjgyMDA0QzIwCi06MTAxNjEwMDA4RTQ5MDAwNDMxMjhGRkZGMTEwMDAwMkJBNzg5MDA0NEU4Ci06MTAxNjIwMDAyNDEwRkY4MDNDMTU4MDAwM0MxNDIwMDAwQTAwMUQ0RDUyCi06MTAxNjMwMDAyNDEzRkZGRTkwQUUwMEM0MDIwRTY4MjQzMUFDMDBGRkZDCi06MTAxNjQwMDAxNTgwMDAyQTAyNDAyMDIxOTM4NDAwNDE5Nzg2MDA0NDlGCi06MTAxNjUwMDAzMDhGMDAwMTExRTAwMDBCMDI2NDI4MjQ4Rjg5MDAyNEUwCi06MTAxNjYwMDA4RDIzMDA3NDhEMjgwMDc0QTM4NTAwNDEwMDcwMTAyNDIwCi06MTAxNjcwMDAwMDAyQzk0MDMxMUYwMDdGMDMzRkMwMjUwMzE0ODgyNUE1Ci06MTAxNjgwMDBBRUIxMDgzMDEwQzAwMDEwOEY4NTAwMjQ5MEE3MDBDNEIwCi06MTAxNjkwMDAwMjA3NTgyNDMxNkEwMEZGMTU0MEZGRTYwMjQwMjAyMTZFCi06MTAxNkEwMDAwRTAwMUMwMTk3OTEwMDQ0MTA0MEZGRTg5Mzg0MDA0MTE0Ci06MTAxNkIwMDAyNDA1RkZGRDU0NDUwMDA1OEU0MzAwMjAwMjIwMjgyMTBCCi06MTAxNkMwMDAwRTAwMTU4NjAyNDAyMDIxOEU0MzAwMjAzMDcwMDAwNDU5Ci06MTAxNkQwMDAxNjAwMDAwQTI0MTRGRkZCOEY4NTAwMjQwQTAwMUQwMzU2Ci06MTAxNkUwMDA4Rjg2MDA0ODBBMDAxRDJFQUY4NjAwNEMwRTAwMTgyQjc2Ci06MTAxNkYwMDAwMDAwMDAwMDBBMDAxRDNEOTM4NDAwNDEwMDc0OTgyNEZFCi06MTAxNzAwMDAwRTAwMTVBMEFFNTMwMDIwOEY4NTAwMjQwQTAwMUQwMzkzCi06MTAxNzEwMDA4Rjg2MDA0ODI3QkRGRkQ4QUZCMzAwMUNBRkIxMDAxNEJGCi06MTAxNzIwMDBBRkJGMDAyMEFGQjIwMDE4QUZCMDAwMTAzQzAyODAwMDg1Ci06MTAxNzMwMDA4QzUyMDE0MDhDNEIwMTQ4M0MwNDgwMDAwMDBCOEMwMjExCi06MTAxNzQwMDAzMjIzMDBGRjMxNzMwMEZGOEM4NTAxQjgwNEEwRkZGRTM3Ci06MTAxNzUwMDAzNDkwMDE4MEFFMTIwMDAwOEM4NzAxNDQyNDY0RkZGMEI1Ci06MTAxNzYwMDAyNDA2MDAwMjJDODMwMDEzQUUwNzAwMDRBNjExMDAwODEzCi06MTAxNzcwMDBBMjA2MDAwQkFFMTMwMDI0MTA2MDAwNEY4RkJGMDAyMEE0Ci06MTAxNzgwMDAwMDA0NDg4MDNDMEEwODAwMjU0QTc5RTAwMTJBNDAyMUVCCi06MTAxNzkwMDA4RDA0MDAwMDAwODAwMDA4MDAwMDAwMDAzQzEwMDgwMERDCi06MTAxN0EwMDA4RTEwMzFBODMxNzMzRkZGMDAxMzg5ODAwMjEyMjgyMTY3Ci06MTAxN0IwMDAyNDBDRkY4MDAwQjEyMDIxMjY0RDAxMDAyNjQ3MDA4MDI3Ci06MTAxN0MwMDAzQzBGODAwMDNDMDM4MDA0MzFBODAwN0YzMEU5MDA3RjlCCi06MTAxN0QwMDAzMDhBMDA3RjNDMEU4MDBBM0MwMjgwMEMwMDhDQzAyNEMyCi06MTAxN0UwMDAwMUFDMzAyNDAwRUNDODI0MDEyMzk4MjEwMTQyODAyMTVGCi06MTAxN0YwMDBBREU2MDAyNDAxMEVGODIxQURGOTAwOTBBREY4MDAyODA3Ci06MTAxODAwMDBBRjkwMDAyQ0FGOUYwMDI0QUY5MzAwMUMwRTAwMTY3NTA0Ci06MTAxODEwMDAwMTYwODAyMTNDMDM4MDAwOEM2QjAxQjgwNTYwRkZGRUY1Ci06MTAxODIwMDA4Rjg3MDAyQzhGODYwMDI0MzQ2NTAxODA5MEY5MDAwRDhECi06MTAxODMwMDBBQ0IyMDAwMDI0QzIwMDc4MDAxOUM2MDAwMDE4N0UwMzc0Ci06MTAxODQwMDAwMDBGOTAyNzAwMTIyN0MyQTRCMDAwMDYxMDgwMDA3MDdECi06MTAxODUwMDAyNDBFNjA4MkE0QUUwMDA4QTBBMDAwMDUyNDBGMDAwMkEwCi06MTAxODYwMDBBMEFGMDAwQjAwMDRDNDAwOEY4QjAwMUMzQzE5MjcwMEE0Ci06MTAxODcwMDAwMzE5OTAyNUFDQjIwMDEwQUNBMDAwMTRBQ0EwMDAyNDU5Ci06MTAxODgwMDBBQ0EwMDAyOEFDQTAwMDJDOEQ3MzAwMzgyNDExRkY4MDgwCi06MTAxODkwMDBBQ0IzMDAxODkwRjAwMDBEMDIzMDI4MjQzMEE0MDBGRkYzCi06MTAxOEEwMDAxMDgwMDAwNThGQkYwMDIwOTBFQzAwMEQzMTlGMDA3RjVECi06MTAxOEIwMDBBMEZGMDAwRDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODU3Ci06MTAxOEMwMDA4RkIxMDAxNDhGQjAwMDEwM0MwQTEwMDAzQzBEODAwMDU2Ci06MTAxOEQwMDAyN0JEMDAyODAzRTAwMDA4QURBQTAxQjgyNjVGMDEwMDdCCi06MTAxOEUwMDAyNDA1RkY4MDMzRjgwMDdGM0MwNjgwMDAwM0U1NzgyNDYwCi06MTAxOEYwMDAzQzE5ODAwQTAzMTkyMDIxQUNDRjAwMjQ5MDhFMDBDNDJCCi06MTAxOTAwMDAwMEFFNjgyNDMxQUMwMEZGMTE4MEZGRUFBRjg0MDAyNEYwCi06MTAxOTEwMDAyNDhFMDA3ODk1Q0QwMDEyM0MwQzA4MDA4RDhDMzFBOEU3Ci06MTAxOTIwMDAzQzAzODAwQzMxQUIzRkZGMDE5MjQ4MjEwMDBCNTE4MEZBCi06MTAxOTMwMDAwMTJBNDAyMTMxMDQwMDdGMDEwNTEwMjQwMDgzMzgyMTUxCi06MTAxOTQwMDBBQ0MyMDAyODBFMDAxNjc1QUY4NzAwMkMzQzAzODAwMDQ3Ci06MTAxOTUwMDA4QzY1MDFCODA0QTBGRkZFMDAwMDAwMDBBRTEyMDAwMDdDCi06MTAxOTYwMDA4QzcyMDE0NEFFMTIwMDA0QTYxMTAwMDgyNDExMDAwMjdBCi06MTAxOTcwMDBBMjExMDAwQkFFMTMwMDI0MEEwMDFERDg4RkJGMDAyMDU3Ci06MTAxOTgwMDAzQzEyNjAwMDhFNDUyQzA4M0MwM0YwMDMzNDYyRkZGRkRDCi06MTAxOTkwMDAwMEEyRjgyNEFFNUYyQzA4OEU1ODJDMDgzQzE5MDFCMDI4Ci06MTAxOUEwMDAwMzE5OTgyNUFFNTMyQzA4MEEwMDFERDg4RkJGMDAyMEJDCi06MTAxOUIwMDAyNjREMDEwMDMxQUYwMDdGM0MxMDgwMEEyNDBFRkY4MENECi06MTAxOUMwMDAwMUYwMjgyMTAxQUU2MDI0M0MwQjgwMDBBRDZDMDAyNEE2Ci06MTAxOUQwMDAxNjYwRkZCOEFGODUwMDI0MjQxMTAwMDNBMEIxMDBFQzBECi06MTAxOUUwMDAwQTAwMUREODhGQkYwMDIwMjY0ODAxMDAzMTBBMDA3RjYxCi06MTAxOUYwMDAzQzBCODAwQTI0MDlGRjgwMDE0QjMwMjEwMTA5MjAyNDdGCi06MTAxQTAwMDAzQzA3ODAwMEFDRTQwMDI0MEEwMDFERDdBRjg2MDAyNDA4Ci06MTAxQTEwMDA5NDREMDAxMjMyMUYzRkZGMzFBQzNGRkYxNTlGRkY4REU5Ci06MTAxQTIwMDAyNDBFNjA4MjkwQzMwMEM0MjQwOUZGODAwMTIzMTAyNDg3Ci06MTAxQTMwMDAzMDRBMDBGRjExNDBGRjg3MDAwMDAwMDAyNDA3MDAwNDI3Ci06MTAxQTQwMDBBMEM3MDBFQzhGODcwMDJDMjQwODYwODQyNDA2MDAwREJBCi06MTAxQTUwMDBBNEE4MDAwOEEwQTYwMDA1MEEwMDFEQzIyNDBGMDAwMkM5Ci06MTAxQTYwMDA1Rjg2NTQzN0U0QUM2MkNDNTAxMDNBNDUzNjYyMTk4NTMzCi06MTAxQTcwMDBCRjE0QzBFODFCQzI3QTFFODRGNEI1NTYwOTRFQTZGRUY4Ci06MTAxQTgwMDA3RERBMDFFN0MwNEQ3NDgxODAwODAxMDA4MDA4MDA4MDg0Ci06MTAxQTkwMDA4MDA4MDAwMDA4MDA0RkJDMDgwMDRGQkMwODAwNTA5OEE4Ci06MTAxQUEwMDAwODAwNTA2QzA4MDA1MDUwMDgwMDRGOEMwODAwNEY4QzA0Ci06MTAxQUIwMDAwODAwNEY4QzA4MDA0RkM0MDgwMDcyQkMwODAwNzMwODZGCi06MTAxQUMwMDAwODAwNzJDODA4MDA3MUYwMDgwMDcyQzgwODAwNzJGOEI3Ci06MTAxQUQwMDAwODAwNzJDODA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDg5Ci06MTAxQUUwMDAwODAwNzFGMDA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDUyCi06MTAxQUYwMDAwODAwNzFGMDA4MDA3MUYwMDgwMDcxRjAwODAwNzJFODQ5Ci06MTAxQjAwMDAwODAwNzJEODA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDQ4Ci06MTAxQjEwMDAwODAwNzFGMDA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDIxCi06MTAxQjIwMDAwODAwNzFGMDA4MDA3MUYwMDgwMDcxRjAwODAwNzFGMDExCi06MTAxQjMwMDAwODAwNzFGMDA4MDA3MkQ4MDgwMDc4OTAwODAwNzc1Q0ZGCi06MTAxQjQwMDAwODAwNzg1ODA4MDA3NzVDMDgwMDc4MjgwODAwNzY0NDc4Ci06MTAxQjUwMDAwODAwNzc1QzA4MDA3NzVDMDgwMDc3NUMwODAwNzc1QzE5Ci06MTAxQjYwMDAwODAwNzc1QzA4MDA3NzVDMDgwMDc3NUMwODAwNzc1QzA5Ci06MTAxQjcwMDAwODAwNzc1QzA4MDA3NzVDMDgwMDc3NUMwODAwNzc1Q0Y5Ci06MDQxQjgwMDAwODAwNzc4NDVFCi06MEMxQjg0MDAwQTAwMDEyMjAwMDAwMDAwMDAwMDAwMDAyOAotOjEwMUI5MDAwMDAwMDAwMEQ3NDcwNjEzNDJFMzYyRTMxMzUwMDAwMDBDNwotOjEwMUJBMDAwMDQwNjBGMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgotOjEwMUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwMUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQotOjEwMUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwMUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwMUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQotOjEwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwMUMxMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQ5NwotOjEwMUMyMDAwM0MwMjA4MDAyNDQyMTdDMDNDMDMwODAwMjQ2MzJBQjQ4NQotOjEwMUMzMDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQzMAotOjEwMUM0MDAwM0MxRDA4MDAzN0JEMkZGQzAzQTBGMDIxM0MxMDA4MDAwQwotOjEwMUM1MDAwMjYxMDA0ODgzQzFDMDgwMDI3OUMxN0MwMEUwMDAyNUU1QQotOjEwMUM2MDAwMDAwMDAwMDAwMDAwMDAwRDI0MDJGRjgwMjdCREZGRTBGRgotOjEwMUM3MDAwMDA4MjEwMjRBRkIwMDAxMEFGNDIwMDIwQUZCRjAwMThBOAotOjEwMUM4MDAwQUZCMTAwMTQ5MzY1MDAwNDMwODQwMDdGMDM0NDE4MjEzMQotOjEwMUM5MDAwM0MwMjAwMDgwMDYyMTgyMTMwQTUwMDIwMDM2MDgwMjE2QQotOjEwMUNBMDAwM0MwODAxMTEyNzdCMDAwODE0QTAwMDAyMjQ2NjAwNUM5OAotOjEwMUNCMDAwMjQ2NjAwNTg5MjAyMDAwNDk3NDMwMTA0OTIwNDAwMDQzMQotOjEwMUNDMDAwMzA0NzAwMEYzMDYzRkZGRjMwODQwMDQwMDA2NzI4MjM1NwotOjEwMUNEMDAwMTA4MDAwMDkwMDAwNDgyMTkyMDIwMDA1MzA0MjAwMDRGMwotOjEwMUNFMDAwMTA0MDAwMDUwMDAwMDAwMDEwQTAwMDAzMDAwMDAwMDBFQwotOjEwMUNGMDAwMjRBNUZGRkMyNDA5MDAwNDkyMDIwMDA1MzA0MjAwMDRFMAotOjEwMUQwMDAwMTA0MDAwMTIwMDAwMDAwMDEwQTAwMDEwMDAwMDAwMDBCMQotOjEwMUQxMDAwOTYwMjAwMDIwMEE3MjAyMTAxMDQ0MDI1MjQ0MkZGRkU3NAotOjEwMUQyMDAwQTc0MjEwMTY5MjAzMDAwNDI0MDJGRjgwMDA0MzEwMjRFRgotOjEwMUQzMDAwMzA0MjAwRkYxMDQwMDAwMzNDMDIwNDAwMEEwMDAxNzIyMAotOjEwMUQ0MDAwMDEwMjQwMjU4Q0MyMDAwMEFGNDIxMDE4OEY0MjAxNzg3QQotOjEwMUQ1MDAwMDQ0MEZGRkUyNDAyMDAwQUE3NDIwMTQwOTYwMjAwMDI0RQotOjEwMUQ2MDAwMjQwNDAwMDkzMDQyMDAwNzAwMDIxMDIzMzA0MjAwMDcxQgotOjEwMUQ3MDAwQTc0MjAxNDI5NjAyMDAwMjI0NDJGRkZFQTc0MjAxNDQwQwotOjEwMUQ4MDAwQTc0MDAxNDY5NzQyMDEwNEE3NDIwMTQ4OEY0MjAxMDgzQgotOjEwMUQ5MDAwMzA0MjAwMjA1MDQwMDAwMTI0MDQwMDAxOTIwMjAwMDQ1RgotOjEwMURBMDAwMzA0MjAwMTAxNDQwMDAwMjM0ODMwMDEwMDA4MDE4MjFEQgotOjEwMURCMDAwQTc0MzAxNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQotOjEwMURDMDAwMDAwMDAwMDBBRjQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwQwotOjEwMUREMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIxMDAwMDQ0MUZGRkVFMAotOjEwMURFMDAwMzEwMkZGRkYxMDQwMDAwNzAwMDAwMDAwOTIwMjAwMDREMwotOjEwMURGMDAwMzA0MjAwNDAxNDQwMDAwMzAwMDAwMDAwOEY0MjEwMThFMQotOjEwMUUwMDAwQUNDMjAwMDA5NjAyMDAwNjMwNDJGRkZGMjQ0MjAwMDJFRQotOjEwMUUxMDAwMDAwMjEwNDMwMDAyMTA0MDAzNjI4ODIxOTYyMjAwMDA1NQotOjEwMUUyMDAwMTEyMDAwMEQzMDQ0RkZGRjAwQTcxMDIxOEY4MzAwM0NEQwotOjEwMUUzMDAwOEY0NTEwMUMwMDAyMTA4MjAwMDIxMDgwMDA0MzEwMjEwOAotOjEwMUU0MDAwQUM0NTAwMDAzMEE2RkZGRjBFMDAwNUI3MDAwNTJDMDJEMAotOjEwMUU1MDAwMDA0MDIwMjFBNjIyMDAwMDkyMDMwMDA0MjQwMkZGODBGQgotOjEwMUU2MDAwMDA0MzEwMjQzMDQyMDBGRjEwNDAwMDFGMDAwMDAwMDAxQgotOjEwMUU3MDAwOTIwMjAwMDUzMDQyMDAwMjEwNDAwMDFCMDAwMDAwMDBFQQotOjEwMUU4MDAwOTc0MjEwMEMyNDQyRkZGRUE3NDIxMDE2MDAwMDAwMDBFQgotOjEwMUU5MDAwM0MwMjA0MDAzNDQyMDAzMEFGNDIxMDAwMDAwMDAwMDA1OQotOjEwMUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjEwMDA1MQotOjEwMUVCMDAwMDQ0MUZGRkUwMDAwMDAwMDk3NDIxMDBDOEY0NTEwMUNFQgotOjEwMUVDMDAwMzA0MkZGRkYyNDQyMDAzMDAwMDIxMDgyMDAwMjEwODBFNgotOjEwMUVEMDAwMDA1QjEwMjFBQzQ1MDAwMDMwQTZGRkZGMEUwMDA1QjdFNwotOjEwMUVFMDAwMDAwNTJDMDJBNjIyMDAwMDk2MDQwMDAyMjQ4NDAwMDhBQgotOjEwMUVGMDAwMEUwMDAxRTczMDg0RkZGRjk3NDQwMTA0MEUwMDAxRjU1NgotOjEwMUYwMDAwMzA4NEZGRkY4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAxNgotOjEwMUYxMDAwM0MwMjEwMDAyN0JEMDAyMDAzRTAwMDA4QUY0MjAxNzgxQQotOjEwMUYyMDAwMzA4NEZGRkYzMDgyMDAwNzhGODUwMDI0MTA0MDAwMDJCQwotOjEwMUYzMDAwMjQ4MzAwMDczMDY0RkZGODAwQTQxMDIxMzA0MjFGRkYwMwotOjEwMUY0MDAwMDM0MjE4MjEyNDdCNDAwMEFGODUwMDI4QUY4MjAwMjQ4MwotOjEwMUY1MDAwMDNFMDAwMDhBRjQyMDA4NDMwODRGRkZGMzA4MjAwMEZBRQotOjEwMUY2MDAwOEY4NTAwMkM4Rjg2MDAzNDEwNDAwMDAyMjQ4MzAwMEZFMAotOjEwMUY3MDAwMzA2NEZGRjAwMEE0MTAyMTAwNDYxODJCQUY4NTAwMzAxQwotOjEwMUY4MDAwMDA0NjIwMjMxNDYwMDAwMkFGODIwMDJDQUY4NDAwMkM5NgotOjEwMUY5MDAwOEY4MjAwMkMzNDA0ODAwMDAzNDIxODIxMDA2NDE4MjEzMQotOjEwMUZBMDAwQUY4MzAwM0MwM0UwMDAwOEFGNDIwMDgwOEY4MjAwMTQ0MgotOjEwMUZCMDAwMTA0MDAwMDg4RjgyMDAwNDhGODJGRkU0MTQ0MDAwMDU2NwotOjEwMUZDMDAwOEY4MjAwMDQzQzAyRkZCRjM0NDJGRkZGMDA4MjIwMjRDNgotOjEwMUZEMDAwOEY4MjAwMDQzMDQzMDAwNjI0MDIwMDAyMTA2MjAwMEZDQQotOjEwMUZFMDAwM0MwMjAxMDEyQzYyMDAwMzUwNDAwMDA1MjQwMjAwMDQ2MQotOjEwMUZGMDAwMTA2MDAwMEYzQzAyMDAwMTBBMDAwMjJFMDAwMDAwMDBFOQotOjEwMjAwMDAwMTA2MjAwMDUyNDAyMDAwNjE0NjIwMDBDM0MwMjAxMTE1QgotOjEwMjAxMDAwMEEwMDAyMjcwMDgyMTAyNTNDMDIwMDExMDA4MjEwMjVEMAotOjEwMjAyMDAwQUY0MjEwMDAyNDAyMDAwMTBBMDAwMjJFQUY4MjAwMEMxMQotOjEwMjAzMDAwMDA4MjEwMjVBRjQyMTAwMEFGODAwMDBDMDAwMDAwMDBBRAotOjEwMjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDBBNQotOjEwMjA1MDAwOEY4MjAwMEMxMDQwMDAwNDAwMDAwMDAwOEY0MjEwMDAyRQotOjEwMjA2MDAwMDQ0MUZGRkUwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA0MwotOjEwMjA3MDAwOEY4MjAwMTAwMDAyMjlDMjI0QTNGRkYwMDAwMzE4NDIzRgotOjEwMjA4MDAwMjQ0NEY4MDAwMDAzMTE0MDAwNDMxMDIxMDAwMjEwODA5NgotOjEwMjA5MDAwMDA0MzEwMjEwMDAyMTA4MDNDMDMwODAwMjQ2MzE4MDA1NAotOjEwMjBBMDAwMkM4NDAzMDExNDgwMDAxMzAwNDMzMDIxOEY4NDAwMTgxNgotOjEwMjBCMDAwMDBBNDEwMkIxNDQwMDAwRjAwMDAzMDIxMDBBNDEwMjNCNgotOjEwMjBDMDAwMDAwMjE5NDAwMDYyMTgyMTAwMDMxODgwMDA2MjE4MjFFNAotOjEwMjBEMDAwOEY4MjAwMUMwMDgyMTAyMTI0NDJGRkZGMDA0NTEwMkIzQwotOjEwMjBFMDAwMTQ0MDAwMDQwMDAzMTg4MDNDMDIwODAwMjQ0MjFBMTQyMwotOjEwMjBGMDAwMDA2MjMwMjEwM0UwMDAwODAwQzAxMDIxMjdCREZGRTA4RQotOjEwMjEwMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwM0MwNDYwMDhCRQotOjEwMjExMDAwOEM4MjUwMDAyNDAzRkY3RjNDMDY2MDAwMDA0MzEwMjRBMwotOjEwMjEyMDAwMzQ0MjM4MENBQzgyNTAwMDhDQzI0QzFDM0MxQTgwMDBFQgotOjEwMjEzMDAwMDAwMjE2MDIzMDQyMDAwRjEwNDAwMDA3QUY4MjAwMUM2MAotOjEwMjE0MDAwOENDMzRDMUMzQzAyMDAxRjM0NDJGQzAwMDA2MjE4MjQ2QgotOjEwMjE1MDAwMDAwMzE5QzJBRjgzMDAxODhGNDIwMDA4Mjc1QjQwMDBCQwotOjEwMjE2MDAwMzQ0MjAwMDFBRjQyMDAwOEFGODAwMDI0M0MwMjYwMUNGMgotOjEwMjE3MDAwQUY0MDAwODBBRjQwMDA4NDhDNDUwMDA4OENDMzA4MDg0NQotOjEwMjE4MDAwMzQwMjgwMDAwMzQyMjAyMTI0MDJGRkYwMDA2MjE4MjQ2MAotOjEwMjE5MDAwM0MwMjAwODAzQzAxMDgwMEFDMjIwNDIwM0MwMjU3MDlBQwotOjEwMjFBMDAwQUY4NDAwM0MxNDYyMDAwNEFGODUwMDM0MjQwMjAwMDFCNwotOjEwMjFCMDAwMEEwMDAyOEVBRjgyMDAxNEFGODAwMDE0M0MwMjgwMDAzRgotOjEwMjFDMDAwMzQ0NDAwNzA4QzgzMDAwMDhGNDIwMDAwMzg0MjAwMDFDQwotOjEwMjFEMDAwMzA0MjAwMDExMDQwMDAxOEFGODMwMDM4MDA4MDQwMjFEOQotOjEwMjFFMDAwMDA2MDMwMjE4RDA3MDAwMDNDMDUwODAwOENBNTA0NUNEMAotOjEwMjFGMDAwM0MwNDA4MDA4Qzg0MDQ1ODAwRTYzMDIzMDAwMDEwMjFDMQotOjEwMjIwMDAwMDBBNjI4MjEwMEE2MzAyQjAwODIyMDIxMDA4NjIwMjE1NAotOjEwMjIxMDAwM0MwMTA4MDBBQzI1MDQ1QzNDMDEwODAwQUMyNDA0NThENwotOjEwMjIyMDAwOEY0MjAwMDAzODQyMDAwMTMwNDIwMDAxMTQ0MEZGRURBRgotOjEwMjIzMDAwMDBFMDMwMjFBRjg3MDAzODNDMDI4MDAwMzQ0MjAwNzA1QgotOjEwMjI0MDAwOEM0NzAwMDA4Rjg2MDAzODNDMDUwODAwOENBNTA0NUM5NAotOjEwMjI1MDAwM0MwNDA4MDA4Qzg0MDQ1ODAwRTYzODIzMDAwMDEwMjE1OAotOjEwMjI2MDAwMDBBNzI4MjEwMDgyMjAyMThGODIwMDE0MDBBNzMwMkI5NAotOjEwMjI3MDAwMDA4NjIwMjEzQzAxMDgwMEFDMjUwNDVDM0MwMTA4MDBEQwotOjEwMjI4MDAwQUMyNDA0NTgxMDQwMDAxNjAwMDAwMDAwOTc0MjAxMDRERQotOjEwMjI5MDAwMTA0MDAwMDU4RjgzMDAwMDE0NjAwMDA3MjQ2MkZGRkZEOAotOjEwMjJBMDAwMEEwMDAyRDAyQzYyMDAwQTJDNjIwMDEwNTA0MDAwMDQ4OAotOjEwMjJCMDAwOEY4MzAwMDAyNDYyMDAwMUFGODIwMDAwOEY4MzAwMDA0MgotOjEwMjJDMDAwMkM2MjAwMEExNDQwMDAwMzJDNjIwMDA3MEEwMDAyRDdBNwotOjEwMjJEMDAwQUY4MEZGRTQxMDQwMDAwMjI0MDIwMDAxQUY4MkZGRTQ1RgotOjEwMjJFMDAwOEY0MzAxMDg4RjQ0MDEwMDMwNjIyMDAwQUY4MzAwMDQ1NwotOjEwMjJGMDAwMTA0MDAwMDhBRjg0MDAxMDNDMDIwODAwOEM0MjA0MkNGRgotOjEwMjMwMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwNDJDMEEwMDA1QjM2MQotOjEwMjMxMDAwM0MwMjQwMDAzMDY1MDIwMDE0QTAwMDAzMjQwMjBGMDBCQwotOjEwMjMyMDAwMTQ4MjAyNjAyNDAyMEQwMDk3NDIwMTA0MTA0MDAyQzg4QQotOjEwMjMzMDAwM0MwMjQwMDAzMDYyNDAwMDE0NDAwMEFEOEY4MjAwM0NGRgotOjEwMjM0MDAwOEM0NDAwMDg4RjQyMDE3ODA0NDBGRkZFMjQwMjA4MDBGQwotOjEwMjM1MDAwQUY0MjAxNzgyNDAyMDAwOEE3NDIwMTQwQTc0MDAxNDI5MQotOjEwMjM2MDAwOTc0MjAxMDQ4Rjg0MDAwNDMwNTFGRkZGMzA4MjAwMDE0NgotOjEwMjM3MDAwMTA0MDAwMDcwMjIwODAyMTI2MjNGRkZFMjQwMjAwMDJENQotOjEwMjM4MDAwMzA3MEZGRkZBNzQyMDE0NjBBMDAwMzA0QTc0MzAxNDgzQgotOjEwMjM5MDAwQTc0MDAxNDYzQzAyMDgwMDhDNDIwNDNDMTQ0MDAwMEQ1QQotOjEwMjNBMDAwOEY4MzAwMTAzMDgyMDAyMDE0NDAwMDAyMjQwMzAwMDlCMwotOjEwMjNCMDAwMjQwMzAwMDEwMDYwMjAyMThGODMwMDEwMjQwMjA5MDAwMwotOjEwMjNDMDAwNTA2MjAwMDEzNDg0MDAwNEE3NDQwMTRBMEEwMDAzMUYzQwotOjEwMjNEMDAwMDAwMDAwMDAyNDAyMEYwMDE0NjIwMDA1MzA4MjAwMjA3QgotOjEwMjNFMDAwMTQ0MDAwMDYyNDAzMDAwRDBBMDAwMzFFMjQwMzAwMDUwOAotOjEwMjNGMDAwMTQ0MDAwMDIyNDAzMDAwOTI0MDMwMDAxQTc0MzAxNEFGQQotOjEwMjQwMDAwM0MwMjA4MDA4QzQyMDQyMDNDMDQwMDQ4MEUwMDAyMEFGMgotOjEwMjQxMDAwMDA0NDIwMjUwRTAwMDIzMzAwMDAwMDAwOEY4MjAwMENEMwotOjEwMjQyMDAwMTA0MDAwM0UwMDAwMDAwMDhGNDIxMDAwM0MwMzAwMjBERQotOjEwMjQzMDAwMDA0MzEwMjQxMDQwMDAzOThGODIwMDA0MzA0MjAwMDIxMwotOjEwMjQ0MDAwMTA0MDAwMzYwMDAwMDAwMDk3NDIxMDE0MTQ0MDAwMzM4MgotOjEwMjQ1MDAwMDAwMDAwMDA5NzQyMTAwODhGODgwMDNDMzA0MkZGRkZDOAotOjEwMjQ2MDAwMjQ0MjAwMDYwMDAyMTg4MjAwMDMzODgwMDBFODMwMjE3MAotOjEwMjQ3MDAwMzA0MzAwMDE4Q0M0MDAwMDEwNjAwMDA0MzA0MjAwMDNBRgotOjEwMjQ4MDAwMDAwMDAwMEQwQTAwMDM2MDAwRTgxMDIxNTQ0MDAwMTAxNQotOjEwMjQ5MDAwMzA4NEZGRkYzQzA1RkZGRjAwODUyMDI0MDA4NTE4MjZCRgotOjEwMjRBMDAwMDAwMzE4MkIwMDA0MTAyQjAwNDMxMDI0MTA0MDAwMDVEQgotOjEwMjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAwRgotOjEwMjRDMDAwMjQwMDAxQ0I4Q0MyMDAwMDBBMDAwMzVGMDA0NTIwMjVEOAotOjEwMjREMDAwMzg4M0ZGRkYwMDAzMTgyQjAwMDQxMDJCMDA0MzEwMjQ0NwotOjEwMjRFMDAwMTA0MDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4QQotOjEwMjRGMDAwMDAwMDAwMDAyNDAwMDFENDhDQzIwMDAwMzQ0NEZGRkYxRgotOjEwMjUwMDAwMDBFODEwMjFBQzQ0MDAwMDNDMDIwODAwOEM0MjA0MzA3QQotOjEwMjUxMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwNDMwOEY2MjAwMDAxQwotOjEwMjUyMDAwOEY4NDAwM0NBRjgyMDAwODhDODMwMDAwMzQwMkZGRkZFMAotOjEwMjUzMDAwMTQ2MjAwMEYwMDAwMTAyMTNDMDUwODAwOENBNTA0NTQxMwotOjEwMjU0MDAwM0MwNDA4MDA4Qzg0MDQ1MDAwQjAyODIxMDBCMDMwMkJEQgotOjEwMjU1MDAwMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwQUMyNTA0NTQ4MwotOjEwMjU2MDAwM0MwMTA4MDBBQzI0MDQ1MDBBMDAwNUE5MjQwNDAwMDgxQQotOjEwMjU3MDAwOEM4MjAwMDAzMDQyMDEwMDEwNDAwMDBGMDAwMDEwMjE0QQotOjEwMjU4MDAwM0MwNTA4MDA4Q0E1MDQ0QzNDMDQwODAwOEM4NDA0NDhERAotOjEwMjU5MDAwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxMDA4NjIwMjFBRAotOjEwMjVBMDAwM0MwMTA4MDBBQzI1MDQ0QzNDMDEwODAwQUMyNDA0NDg2NAotOjEwMjVCMDAwMEEwMDA1QTkyNDA0MDAwODNDMDUwODAwOENBNTA0NDQ3MQotOjEwMjVDMDAwM0MwNDA4MDA4Qzg0MDQ0MDAwQjAyODIxMDBCMDMwMkI2QgotOjEwMjVEMDAwMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwQUMyNTA0NDQxMwotOjEwMjVFMDAwM0MwMTA4MDBBQzI0MDQ0MDBBMDAwNUE5MjQwNDAwMDhBQQotOjEwMjVGMDAwOEY2MjAwMDg4RjYyMDAwMDAwMDIxNjAyMzA0MzAwRjA3NAotOjEwMjYwMDAwMjQwMjAwMzAxMDYyMDAwNTI0MDIwMDQwMTA2MjAwRTA0NQotOjEwMjYxMDAwOEY4MjAwMjAwQTAwMDVCMTI0NDIwMDAxMTRBMDAwMDVBOQotOjEwMjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDA5RAotOjEwMjYzMDAwMjQwMDAxRkU4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDBFQwotOjEwMjY0MDAwMEUwMDAyM0IwMDAwMDAwMDE0NDAwMDA1MDA0MDgwMjEwNQotOjEwMjY1MDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyMDU0MgotOjEwMjY2MDAwOEUwMjAwMDAxMDQwMDAwNTAwMDAwMDAwMDAwMDAwMDA4NQotOjEwMjY3MDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjA4OEY2MjAwMEMyMgotOjEwMjY4MDAwMDQ0MzAwMDMyNDAyMDAwMTBBMDAwNDU3QUUwMDAwMDBDNgotOjEwMjY5MDAwQUUwMjAwMDA4RjgyMDAzQzhDNDgwMDA4QTIwMDAwMDdCOAotOjEwMjZBMDAwOEY2NTAwMEM4RjY0MDAwNDMwQTNGRkZGMDAwNDI0MDIzOAotOjEwMjZCMDAwMDA4NTIwMjMzMDgyMDBGRjAwNDMxMDIxMjQ0MjAwMDVDMgotOjEwMjZDMDAwMDAwMjMwODMyQ0MyMDA4MUE2MDUwMDBBMTQ0MDAwMDVEOAotOjEwMjZEMDAwQTIwNDAwMDQwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDA0MwotOjEwMjZFMDAwMjQwMDAyMjA4Rjg1MDAzQzBFMDAwNUQ1MjYwNDAwMTQyRQotOjEwMjZGMDAwOEY2MjAwMDQ4RjQzMDEwOEE2MDIwMDA4M0MwMjEwMDAwQwotOjEwMjcwMDAwMDA2MjE4MjQxMDYwMDAwODAwMDAwMDAwOTc0MjAxMDRENQotOjEwMjcxMDAwOTIwMzAwMDcyNDQyRkZFQzM0NjMwMDAyMzA0NUZGRkZDMAotOjEwMjcyMDAwMEEwMDAzRUNBMjAzMDAwNzk3NDIwMTA0MjQ0MkZGRjBEMQotOjEwMjczMDAwMzA0NUZGRkY5NjA2MDAwODJDQzIwMDEzNTQ0MDAwMDVFOAotOjEwMjc0MDAwOTIwMzAwMDc5MjAyMDAwNzM0NDIwMDAxQTIwMjAwMDczMAotOjEwMjc1MDAwOTIwMzAwMDcyNDAyMDAwMTEwNjIwMDA1MjQwMjAwMDMxNgotOjEwMjc2MDAwMTA2MjAwMEI4RjgyMDAzQzBBMDAwNDA5MzBDNkZGRkY5NAotOjEwMjc3MDAwOEY4MjAwM0MzQzA0RkZGRjhDNDMwMDBDMDA2NDE4MjQ1MwotOjEwMjc4MDAwMDA2NTE4MjVBQzQzMDAwQzBBMDAwNDA5MzBDNkZGRkZBMQotOjEwMjc5MDAwM0MwNEZGRkY4QzQzMDAxMDAwNjQxODI0MDA2NTE4MjVEQQotOjEwMjdBMDAwQUM0MzAwMTAzMEM2RkZGRjI0QzIwMDAyMDAwMjEwODNCOQotOjEwMjdCMDAwQTIwMjAwMDU4RjgzMDAzQzMwNDIwMEZGMDAwMjEwODAxRgotOjEwMjdDMDAwMDA0MzI4MjE4Q0E4MDAwMDhDQTIwMDAwMjQwMzAwMDRGMAotOjEwMjdEMDAwMDAwMjE3MDIxNDQzMDAxMjAwMDAwMDAwOTc0MjAxMDQ5NwotOjEwMjdFMDAwM0MwM0ZGRkYwMTAzMTgyNDMwNDJGRkZGMDA0NjEwMjM4MwotOjEwMjdGMDAwMjQ0MkZGRkUwMDYyNDAyNUFDQTgwMDAwOTIwMzAwMDVDMQotOjEwMjgwMDAwMzA2MjAwRkYwMDAyMTA4MDAwNTAxMDIxOTA0MjAwMTQzRQotOjEwMjgxMDAwMzA0MjAwMEYwMDQzMTAyMTBBMDAwNDNFQTIwMjAwMDZDRAotOjEwMjgyMDAwOENBNDAwMDQ5NzQyMDEwNDk2MDMwMDBBMzA4OEZGRkYzRAotOjEwMjgzMDAwMzA0MkZGRkYwMDQ2MTAyMzI0NDJGRkQ2MDAwMjE0MDA1RQotOjEwMjg0MDAwMDEwMjQwMjVBQ0E4MDAwNDkyMDIwMDA3OTIwNDAwMDU5MgotOjEwMjg1MDAwMjQ2MzAwMjgwMDAzMTg4MzAwNjQxODIxMzQ0MjAwMDQxNAotOjEwMjg2MDAwQTIwMzAwMDZBMjAyMDAwNzhGODIwMDA0MjQwM0ZGRkJEQwotOjEwMjg3MDAwMzQ0MjAwMDIwMDQzMTAyNEFGODIwMDA0OTIwMzAwMDY5OQotOjEwMjg4MDAwOEY4NzAwM0MwMDAzMTg4MDAwNzAxMDIxOEM0NDAwMjBDQQotOjEwMjg5MDAwM0MwMkZGRjYzNDQyRkZGRjAwODI0MDI0MDA2NzE4MjEwQgotOjEwMjhBMDAwQUUwNDAwMENBQzY4MDAwQzkyMDUwMDA2M0MwM0ZGN0ZGMAotOjEwMjhCMDAwOEUwMjAwMEMwMDA1Mjg4MDAwQjAyMDIxMzQ2M0ZGRkY0OQotOjEwMjhDMDAwMDEwMzMwMjQ5NDg4MDAyNjAwQTcyODIxMDA0MzEwMjQwNwotOjEwMjhEMDAwQUUwMjAwMENBQzg2MDAyMEFDODgwMDI0QUNBODAwMTAyRQotOjEwMjhFMDAwMjQwMjAwMTBBNzQyMDE0MDI0MDIwMDAyQTc0MDAxNDIzNgotOjEwMjhGMDAwQTc0MDAxNDRBNzQyMDE0Njk3NDIwMTA0M0MwNDAwMDg1NgotOjEwMjkwMDAwMjQ0MkZGRkVBNzQyMDE0ODI0MDIwMDAxMEUwMDAyMEFGMQotOjEwMjkxMDAwQTc0MjAxNEE5NjAzMDAwQTkyMDIwMDA0MDA0MzEwMjFENAotOjEwMjkyMDAwMjQ0MjAwMDIzMDQyMDAwNzAwMDIxMDIzMzA0MjAwMDcxOAotOjEwMjkzMDAwMEUwMDAyMzNBRTAyMDAxMDhGNjIwMDAwM0MwMzA4MDA1QwotOjEwMjk0MDAwOEM2MzA0NDQyNDA0MDAxMEFGODIwMDA4OTc0MjAxMDQwMQotOjEwMjk1MDAwMzA0MkZGRkYyNDQyRkZGRTAwNDAzODIxMDAwMjM3QzMwRgotOjEwMjk2MDAwM0MwMjA4MDA4QzQyMDQ0MDAwNjcxODIxMDA2NzI4MkJCNQotOjEwMjk3MDAwMDA0NjEwMjEwMDQ1MTAyMTNDMDEwODAwQUMyMzA0NDQwRQotOjEwMjk4MDAwM0MwMTA4MDBBQzIyMDQ0MDBBMDAwNTNFMDAwMDAwMDBBMwotOjEwMjk5MDAwMTRBMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3MQotOjEwMjlBMDAwMDAwMDAwMDAyNDAwMDI5RThGNDIwMTc4MDQ0MEZGRkVEOAotOjEwMjlCMDAwMDAwMDAwMDAwRTAwMDIzQjAwMDAwMDAwMTQ0MDAwMDU3MwotOjEwMjlDMDAwMDA0MDgwMjEwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAxOQotOjEwMjlEMDAwMjQwMDAyQTU4RTAyMDAwMDU0NDAwMDA2OTIwMjAwMDc2NwotOjEwMjlFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyQTgwQwotOjEwMjlGMDAwOTIwMjAwMDczMDQyMDAwNDEwNDAwMDA1OEY4MjAwMDQ1QwotOjEwMkEwMDAwMjQwM0ZGRkIzNDQyMDAwMjAwNDMxMDI0QUY4MjAwMDQ4MQotOjEwMkExMDAwOEY2MjAwMDQwNDQzMDAwODkyMDIwMDA3OTIwMjAwMDYzRAotOjEwMkEyMDAwOEUwMzAwMENBRTAwMDAwMDAwMDIxMDgwMDA1MDEwMjE0OAotOjEwMkEzMDAwQUM0MzAwMjA5MjAyMDAwNzMwNDIwMDA0NTQ0MDAwMDlEOQotOjEwMkE0MDAwOTYwMjAwMEE5MjAyMDAwNTNDMDMwMDAxMDAwMjEwODA3OQotOjEwMkE1MDAwMDA1MDEwMjE4QzQ2MDAxODAwQzMzMDIxQUM0NjAwMThFRAotOjEwMkE2MDAwOTYwMjAwMEE5MjA2MDAwNDI3NzEwMDA4MDIyMDIwMjEyNQotOjEwMkE3MDAwMDBDMjMwMjEyNEM2MDAwNTI2MDUwMDE0MEUwMDA1RDUyRAotOjEwMkE4MDAwMDAwNjMwODI5MjA0MDAwNjhGNjUwMDA0M0MwMjdGRkYzRQotOjEwMkE5MDAwMDAwNDIwODAwMDkxMjAyMThDODMwMDA0MzQ0MkZGRkYzOQotOjEwMkFBMDAwMDBBMjI4MjQwMDY1MTgyMUFDODMwMDA0OTIwMjAwMDdDQwotOjEwMkFCMDAwOTIwNDAwMDU5MjAzMDAwNDMwNDIwMDA0MTA0MDAwMTQwOAotOjEwMkFDMDAwOTYwNzAwMDgzMDg0MDBGRjAwMDQyMDgwMDA5MTIwMjEzOAotOjEwMkFEMDAwOEM4NjAwMDQ5NzQyMDEwNDk2MDUwMDBBMzA2MzAwRkZDQgotOjEwMkFFMDAwMzA0MkZGRkYwMDQzMTAyMTAwNDUxMDIxMzBFM0ZGRkY3QgotOjEwMkFGMDAwMDA0MzEwMjMyNDQyRkZEODMwQzZGRkZGMDAwMjE0MDAxOQotOjEwMkIwMDAwMDBDMjMwMjVBQzg2MDAwNDBBMDAwNEYyOTIwMzAwMDdEQwotOjEwMkIxMDAwMzA4NTAwRkYwMDA1Mjg4MDAwQjEyODIxOENBNDAwMDAyQQotOjEwMkIyMDAwOTc0MjAxMDQzMDYzMDBGRjMwNDJGRkZGMDA0MzEwMjE1MQotOjEwMkIzMDAwMDA0NzEwMjMzQzAzRkZGRjAwODMyMDI0MzA0MkZGRkZBNwotOjEwMkI0MDAwMDA4MjIwMjVBQ0E0MDAwMDkyMDMwMDA3MjQwMjAwMDFBQgotOjEwMkI1MDAwMTA2MjAwMDYwMDAwMDAwMDI0MDIwMDAzMTA2MjAwMTE1MQotOjEwMkI2MDAwMDAwMDAwMDAwQTAwMDUxNThFMDMwMDEwOTc0MjAxMDRDMgotOjEwMkI3MDAwOTIwMzAwMDQ5NjA1MDAwQThFMjQwMDBDMDA0MzEwMjFFNQotOjEwMkI4MDAwMDA0NTEwMjEyNDQyRkZGMjNDMDNGRkZGMDA4MzIwMjQ3NAotOjEwMkI5MDAwMzA0MkZGRkYwMDgyMjAyNUFFMjQwMDBDMEEwMDA1MTVGQwotOjEwMkJBMDAwOEUwMzAwMTA5NzQyMDEwNDkyMDMwMDA0OTYwNTAwMEE2OAotOjEwMkJCMDAwOEUyNDAwMTAwMDQzMTAyMTAwNDUxMDIxMjQ0MkZGRUUxNgotOjEwMkJDMDAwM0MwM0ZGRkYwMDgzMjAyNDMwNDJGRkZGMDA4MjIwMjVDQQotOjEwMkJEMDAwQUUyNDAwMTA4RTAzMDAxMDI0MDIwMDBBQTc0MjAxNDAxOAotOjEwMkJFMDAwQTc0MzAxNDI5NjAzMDAwQTkyMDIwMDA0M0MwNDAwNDBGRAotOjEwMkJGMDAwMDA0MzEwMjFBNzQyMDE0NEE3NDAwMTQ2OTc0MjAxMDQyNwotOjEwMkMwMDAwQTc0MjAxNDgyNDAyMDAwMTBFMDAwMjBBQTc0MjAxNEExRAotOjEwMkMxMDAwMEUwMDAyMzMwMDAwMDAwMDhGNjIwMDAwOTIwMzAwMDRFNwotOjEwMkMyMDAwMDAwMDIwMjFBRjgyMDAwODk3NDIwMTA0OTYwNjAwMEFBNgotOjEwMkMzMDAwMzA0MkZGRkYwMDYyMTgyMTAwNjAyODIxM0MwMzA4MDA5OQotOjEwMkM0MDAwOEM2MzA0NDQzQzAyMDgwMDhDNDIwNDQwMDA2NTE4MjE1NwotOjEwMkM1MDAwMDA0NDEwMjEwMDY1MzgyQjAwNDcxMDIxM0MwMTA4MDA3QQotOjEwMkM2MDAwQUMyMzA0NDQzQzAxMDgwMEFDMjIwNDQwOTIwNDAwMDQ1QwotOjEwMkM3MDAwMDA4NjIwMjEyNDg0MDAwQTMwODRGRkZGMEUwMDAxRTczMwotOjEwMkM4MDAwMDAwMDAwMDA5NzQ0MDEwNDMwODRGRkZGMEUwMDAxRjVBRQotOjEwMkM5MDAwMDAwMDAwMDAzQzAyMTAwMEFGNDIwMTc4MEEwMDA1QjBCRAotOjEwMkNBMDAwOEY4MjAwMjAxNDgyMDAyNzMwNjIwMDA2OTc0MjAxMDRDMAotOjEwMkNCMDAwMTA0MDAwNjczQzAyNDAwMDMwNjI0MDAwMTA0MDAwMDVCOAotOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDBGNwotOjEwMkNEMDAwMjQwMDAzOTY4RjQyMDE3ODA0NDBGRkZFMjQwMjA4MDA3RQotOjEwMkNFMDAwQUY0MjAxNzgyNDAyMDAwOEE3NDIwMTQwQTc0MDAxNDJGOAotOjEwMkNGMDAwOEY4MjAwMDQ5NzQzMDEwNDMwNDIwMDAxMTA0MDAwMDcxNgotOjEwMkQwMDAwMzA3MEZGRkYyNjAzRkZGRTI0MDIwMDAyQTc0MjAxNDZBNwotOjEwMkQxMDAwQTc0MzAxNDgwQTAwMDU2ODI0MDIwMDBEQTc0MDAxNDZBOAotOjEwMkQyMDAwMjQwMjAwMERBNzQyMDE0QThGNjIwMDAwMjQwNDAwMDgxQgotOjEwMkQzMDAwQUY4MjAwMDgwRTAwMDFFNzAwMDAwMDAwMEEwMDA1NDIxMwotOjEwMkQ0MDAwMDIwMDIwMjExMDQwMDA0MjNDMDI0MDAwOTM2MjAwMDAzQgotOjEwMkQ1MDAwMzA0MzAwRjAyNDAyMDAxMDEwNjIwMDA1MjQwMjAwNzBDRAotOjEwMkQ2MDAwMTA2MjAwMzUwMDAwMDAwMDBBMDAwNUIwOEY4MjAwMjBDQwotOjEwMkQ3MDAwOEY2MjAwMDA5NzQzMDEwNDMwNTBGRkZGMzA3MUZGRkY2NgotOjEwMkQ4MDAwOEY0MjAxNzgwNDQwRkZGRTMyMDIwMDA3MDAwMjEwMjM0OAotOjEwMkQ5MDAwMzA0MjAwMDcyNDAzMDAwQTI2MDRGRkZFQTc0MzAxNDAzNwotOjEwMkRBMDAwQTc0MjAxNDJBNzQ0MDE0NEE3NDAwMTQ2QTc1MTAxNDg1OAotOjEwMkRCMDAwOEY0MjAxMDgzMDQyMDAyMDE0NDAwMDAyMjQwMzAwMDkyMQotOjEwMkRDMDAwMjQwMzAwMDFBNzQzMDE0QTBFMDAwMjBBM0MwNDAwNDAwQwotOjEwMkREMDAwMEUwMDAyMzMwMDAwMDAwMDNDMDcwODAwOENFNzA0NDRBQQotOjEwMkRFMDAwMDIxMTEwMjEyNDQyRkZGRTNDMDYwODAwOENDNjA0NDA1QwotOjEwMkRGMDAwMDA0MDE4MjEwMEUzMzgyMTAwMDAxMDIxOEY2NTAwMDBGOQotOjEwMkUwMDAwMDBFMzQwMkIwMEMyMzAyMTI2MDQwMDA4MDBDODMwMjExNgotOjEwMkUxMDAwMzA4NEZGRkZBRjg1MDAwODNDMDEwODAwQUMyNzA0NDQ2NAotOjEwMkUyMDAwM0MwMTA4MDBBQzI2MDQ0MDBFMDAwMUU3MDAwMDAwMDA1MQotOjEwMkUzMDAwMEEwMDA1NDIwMjIwMjAyMTBFMDAwMTM5MDAwMDAwMDA5NgotOjEwMkU0MDAwOEY4MjAwMjAyNDQyMDAwMUFGODIwMDIwM0MwMjQwMDAxQgotOjEwMkU1MDAwQUY0MjAxMzgwMDAwMDAwMDBBMDAwMjhGM0MwMjgwMDBFRgotOjEwMkU2MDAwMzA4NEZGRkYzMEM2RkZGRjAwMDUyQzAwMDBBNjI4MjU5OAotOjEwMkU3MDAwMzg4MkZGRkYwMDQ1MTAyMTAwNDUyODJCMDA0NTEwMjExNgotOjEwMkU4MDAwMDAwMjFDMDIzMDQyRkZGRjAwNDMxMDIxMDAwMjFDMDIxRQotOjEwMkU5MDAwMzA0MkZGRkYwMDQzMTAyMTM4NDJGRkZGMDNFMDAwMDhFQgotOjEwMkVBMDAwMzA0MkZGRkYzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjFGNAotOjEwMkVCMDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDI3NgotOjEwMkVDMDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAwNUNCMDAwNTI4NDBCNwotOjEwMkVEMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkZCOAotOjEwMkVFMDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDA1RDVENQotOjEwMkVGMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg4MwotOjEwMkYwMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDBDQQotOjEwMkYxMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDRFRAotOjA4MkYyMDAwMDNFMDAwMDgwMDAwMDAwMEJFCi06MDQyRjI4MDAwMDAwMDAwMUE0Ci06MDQyRjJDMDAwQTAwMDAyNjcxCi06MTAyRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3NDc4NzAzNEY0Ci06MTAyRjQwMDAyRTM2MkUzMTM2MDAwMDAwMDQwNjEwMDAwMDAwMDAwQTY0Ci06MTAyRjUwMDAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDAwMDAwMDAwMEYwCi06MTAyRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCi06MTAyRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCi06MTAyRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRDI0Ci06MTAyRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCi06MTAyRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCi06MTAyRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi06MTAyRkMwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMEVFCi06MTAyRkQwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAyNDQyM0I2MDkwCi06MTAyRkUwMDAzQzAzMDgwMDI0NjMzRTE4QUM0MDAwMDAwMDQzMjAyQjQzCi06MTAyRkYwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEN0ZGQzA3Ci06MTAzMDAwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDAwOTgzQzFDMDgwMDhBCi06MTAzMDEwMDAyNzlDM0I2MDBFMDAwNEFFMDAwMDAwMDAwMDAwMDAwRDg1Ci06MTAzMDIwMDAzQzA1ODAwMDhGODMwMDMwMzRBODAwNzA4RDA3MDAwMEJECi06MTAzMDMwMDAwMDgzMzAyNTNDMDI5MDAwMDBDMjIwMjVBQ0E0MDAyMDczCi06MTAzMDQwMDBBRjg3MDAyNDNDMDQ4MDAwOEM4OTAwMjAwNTIwRkZGRTBGCi06MTAzMDUwMDAwMDAwMDAwMDM0ODQwMDcwOEM4NTAwMDAzQzE4MDgwMERCCi06MTAzMDYwMDA4RjE4MDA3QzNDMEQwODAwOERBRDAwNzgwMEE3QzgyM0E4Ci06MTAzMDcwMDAwMzE5NTAyMTAwMDA3MDIxMDE1OTYwMkIwMUFFNTgyMTI1Ci06MTAzMDgwMDAwMTZDMzgyMTNDMDEwODAwQUMyQTAwN0MzQzAxMDgwMDlFCi06MTAzMDkwMDBBQzI3MDA3ODAzRTAwMDA4MDAwMDAwMDAwQTAwMDAzREIzCi06MTAzMEEwMDAyNDA0MDAwMThGODUwMDMwM0MwNDgwMDAzNDgzMDAwMTNCCi06MTAzMEIwMDAwMEEzMTAyNTAzRTAwMDA4QUM4MjAwMjAwM0UwMDAwODE0Ci06MTAzMEMwMDAwMDAwMTAyMTMwODRGRkZGMzBBNUZGRkYxMDgwMDAwN0IzCi06MTAzMEQwMDAwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjRDCi06MTAzMEUwMDAwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwODVDCi06MTAzMEYwMDAwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMDNBCi06MTAzMTAwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQjBFCi06MTAzMTEwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODYwCi06MTAzMTIwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MTAzMTMwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNENCCi06MTAzMTQwMDAwM0UwMDAwODAwMDAwMDAwOTBBQTAwMzE4RkFCMDAxMERGCi06MTAzMTUwMDA4Q0FDMDA0MDNDMDMwMEZGOEQ2ODAwMDRBRDZDMDAyMDg3Ci06MTAzMTYwMDA4Q0FEMDA0NDAwRTA2MDIxMzQ2MkZGRkZBRDZEMDAyNEFGCi06MTAzMTcwMDA4Q0E3MDA0ODNDMDlGRjAwMDEwOUMwMjRBRDY3MDAyODY2Ci06MTAzMTgwMDA4Q0FFMDA0QzAxODJDODI0MDMxOTc4MjVBRDZGMDAwNDcxCi06MTAzMTkwMDBBRDZFMDAyQzhDQUQwMDM4MzE0QTAwRkZBRDZEMDAxQ0M3Ci06MTAzMUEwMDA5NEE5MDAzMjMxMjhGRkZGQUQ2ODAwMTA5MEE3MDAzMENECi06MTAzMUIwMDBBNTYwMDAwMkExNjAwMDA0QTE2NzAwMDA5MEEzMDAzMjk2Ci06MTAzMUMwMDAzMDYyMDBGRjAwMDIxOTgyMTA2MDAwMDUyNDA1MDAwMTMyCi06MTAzMUQwMDAxMDY1MDAwRTAwMDAwMDAwMDNFMDAwMDhBMTZBMDAwMTc1Ci06MTAzMUUwMDA4Q0Q4MDAyODM1NEEwMDgwQUQ3ODAwMTg4Q0NGMDAxNEE4Ci06MTAzMUYwMDBBRDZGMDAxNDhDQ0UwMDMwQUQ2RTAwMDg4Q0M0MDAyQzc2Ci06MTAzMjAwMDBBMTZBMDAwMTAzRTAwMDA4QUQ2NDAwMEM4Q0NEMDAxQzM1Ci06MTAzMjEwMDBBRDZEMDAxODhDQzkwMDE0QUQ2OTAwMTQ4Q0M4MDAyNDcxCi06MTAzMjIwMDBBRDY4MDAwODhDQzcwMDIwQUQ2NzAwMEM4Q0MyMDAxNDhDCi06MTAzMjMwMDA4QzgzMDA3MDAwNDNDODJCMTMyMDAwMDcwMDAwMDAwMDlGCi06MTAzMjQwMDA4Q0MyMDAxNDE0NENGRkU0MDAwMDAwMDAzNTRBMDA4MERBCi06MTAzMjUwMDAwM0UwMDAwOEExNkEwMDAxOEM4MjAwNzAwQTAwMDBDNjI5Ci06MTAzMjYwMDAwMDAwMDAwMDkwODkwMDMwMjdCREZGRjg4RkE4MDAxQ0U3Ci06MTAzMjcwMDBBM0E5MDAwMDhGQTMwMDAwM0MwREZGODAzNUEyRkZGRjMzCi06MTAzMjgwMDA4Q0FDMDAyQzAwNjI1ODI0QUZBQjAwMDBBMTAwMDAwNEZECi06MTAzMjkwMDAwMEMwNTgyMUE3QTAwMDAyOEQwNjAwMDQwMEEwNDgyMTBDCi06MTAzMkEwMDAwMTY3QzgyMThGQTUwMDAwMDA4MDUwMjEzQzE4RkY3RkQ2Ci06MTAzMkIwMDAwMzJDMjAyNjNDMEUwMEZGMkM4QzAwMDEzNzBGRkZGRjUzCi06MTAzMkMwMDAzNUNERkZGRjNDMDJGRjAwMDBBRkM4MjQwMEVEQzAyNDU1Ci06MTAzMkQwMDAwMEMyNzgyNDAwMEMxREMwMDMyMzY4MjUwMUY4NzAyNTY2Ci06MTAzMkUwMDBBRDBEMDAwMEFEMEUwMDA0OEQyNDAwMjRBRkFEMDAwMDM0Ci06MTAzMkYwMDBBRDA0MDAwODhEMkMwMDIwMjQwNEZGRkZBRDBDMDAwQzUxCi06MTAzMzAwMDA5NTQ3MDAzMjMwRTZGRkZGQUQwNjAwMTA5MTQ1MDA0OEJBCi06MTAzMzEwMDAzMEEyMDBGRjAwMDIxOUMyNTA2MDAwMDE4RDI0MDAzNDY5Ci06MTAzMzIwMDBBRDA0MDAxNDhENDcwMDM4OEZBQTAwMTgyN0JEMDAwODhGCi06MTAzMzMwMDBBRDBCMDAyOEFEMEEwMDI0QUQwNzAwMUNBRDAwMDAyQzI5Ci06MTAzMzQwMDBBRDAwMDAxODAzRTAwMDA4QUQwMDAwMjAyN0JERkZFMDNECi06MTAzMzUwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzg3Ci06MTAzMzYwMDA5MDk4MDAzMDAwQzA4ODIxM0MwRDAwRkYzMzBGMDA3RjkzCi06MTAzMzcwMDBBMENGMDAwMDkwOEUwMDMxMzVBQ0ZGRkYzQzBBRkYwMDZCCi06MTAzMzgwMDBBMENFMDAwMTk0QTYwMDFFQTIyMDAwMDQ4Q0FCMDAxNDY1Ci06MTAzMzkwMDA4RTI5MDAwNDAwQTA4MDIxMDE2QzI4MjQwMTJBNDAyNEU5Ci06MTAzM0EwMDAwMDgwOTAyMTAxMDUyMDI1QTYyNjAwMDJBRTI0MDAwNEZECi06MTAzM0IwMDAyNjA1MDAyMDI2MjQwMDA4MEUwMDAwNzIyNDA2MDAwMkM0Ci06MTAzM0MwMDA5MjQ3MDAzMDI2MDUwMDI4MjYyNDAwMTQwMDA3MUUwMDFFCi06MTAzM0QwMDAwMDAzMTYwMzI0MDYwMDA0MDQ0MDAwMDMyNDAzRkZGRjM3Ci06MTAzM0UwMDA5NjU5MDAzMjMzMjNGRkZGMEUwMDAwNzJBRTIzMDAxMDA3Ci06MTAzM0YwMDAyNjI0MDAyNDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDQ4Ci06MTAzNDAwMDA4RkIwMDAxMDI0MDUwMDAzMDAwMDMwMjEwQTAwMDA3QzZBCi06MTAzNDEwMDAyN0JEMDAyMDI3QkRGRkQ4QUZCMTAwMUNBRkIwMDAxOEZBCi06MTAzNDIwMDBBRkJGMDAyMDkwQTkwMDMwMjQwMjAwMDEwMEUwNTAyMTJECi06MTAzNDMwMDAzMTIzMDAzRjAwQTA0MDIxOEZCMDAwNDAwMDgwODgyMTUwCi06MTAzNDQwMDAwMEMwNDgyMTEwNjIwMDE0OEZBNzAwMzgyNDBCMDAwNTJCCi06MTAzNDUwMDAwMEEwMjAyMTAwQzAyODIxMTA2QjAwMTMwMjAwMzAyMUExCi06MTAzNDYwMDAwRTAwMDEwODAwMDAwMDAwOTIyNTAwN0MzMEE0MDAwMjNDCi06MTAzNDcwMDAxMDgwMDAwMzI2MDMwMDMwQUUwMDAwMzAyNjAzMDAzNDI1Ci06MTAzNDgwMDA4RkJGMDAyMDhGQjEwMDFDOEZCMDAwMTgwMDYwMTAyMThBCi06MTAzNDkwMDAwM0UwMDAwODI3QkQwMDI4MEUwMDAwODdBRkIwMDAxMDMxCi06MTAzNEEwMDAwQTAwMDE0RjAwMDAwMDAwOEZBMzAwM0MwMTAwMjAyMTEyCi06MTAzNEIwMDAwMTIwMjgyMTAxNDAzMDIxQUZBMzAwMTAwRTAwMDBDRUQyCi06MTAzNEMwMDBBRkIwMDAxNDBBMDAwMTRGMDAwMDAwMDA4RjgyMDA1MENFCi06MTAzNEQwMDAyNDQzMDAwMTMwNDIwMEZGQUY4MzAwNTAwM0UwMDAwOEE2Ci06MTAzNEUwMDAwMDAwMDAwMDNDMDU4MDAwOENBMzBFMTA4Rjg0MDA0NDc3Ci06MTAzNEYwMDBBQzgzMDAyMDhDQTIwRTE4MDNFMDAwMDhBQzgyMDAyNEVDCi06MTAzNTAwMDAzQzA1ODAwMDhDQTMwRTE0OEY4NDAwNDRBQzgzMDAyMDAzCi06MTAzNTEwMDA4Q0EyMEUxQzAzRTAwMDA4QUM4MjAwMjQ5MzgyMDAzOEM5Ci06MTAzNTIwMDAxMDQwMDAxQjI0ODMwMDBGMjQwNEZGRjAwMDY0MzgyNEEzCi06MTAzNTMwMDAxMEUwMDAxOTk3OEIwMDJDOTc4NDAwNEM5Mzg5MDAyRTgzCi06MTAzNTQwMDAzQzBBNjAxQzBBMDAwMTkwMDE2NDQwMjMwMTAzNzAyMUMxCi06MTAzNTUwMDAwMDY0MjgyMzExMjYwMDAyMzFDMkZGRkYzMEEyRkZGRkMyCi06MTAzNTYwMDAwMDQ3MzAyQjUwQzAwMDBFMDBFNDQ4MjE4RDREMDAwQzY4Ci06MTAzNTcwMDAzMUEzRkZGRjAwMDM2NDAwMDAwQzJDMDMwNEExRkZGMzQwCi06MTAzNTgwMDAwMDAwMzAyMTMwNjM3RkZGMEEwMDAxODgyNDA2MDAwMTFCCi06MTAzNTkwMDAwM0UwMDAwODAwMDAwMDAwOTc4NDAwNEMwMEU0NDgyMThDCi06MTAzNUEwMDAzMTIzRkZGRjMxNjhGRkZGMDA2ODM4MkI1NEUwRkZGODNDCi06MTAzNUIwMDBBNzgzMDA0QzkzOEEwMDJFMTE0MDAwMDUyNDBGMDAwMUMwCi06MTAzNUMwMDAwMDZCQzAyM0EzODAwMDJFMDNFMDAwMDhBNzk4MDA0Q0U2Ci06MTAzNUQwMDAwMDZCQzAyM0EzOEYwMDJFMDNFMDAwMDhBNzk4MDA0Q0M3Ci06MTAzNUUwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThBRkIwMDAxMEI2Ci06MTAzNUYwMDAzMDg0RkZGRjNDMTA4MDAwOTNBODAwMkJBRkJGMDAxNDY1Ci06MTAzNjAwMDBBNjA0MDE0NDk2MEEwRTE2MzBDNjAwRkY4RkE5MDAzMEFBCi06MTAzNjEwMDBBNjBBMDE0NkFFMDUwMTQ4QTIwNjAxNTJBNjA4MDE1QUIzCi06MTAzNjIwMDBBRTA3MDE2MDhGQTMwMDJDQTYwOTAxNTgwMTIwMjAyMUJDCi06MTAzNjMwMDAwRTAwMDE3Q0FFMDMwMTU0M0MwMjEwMDBBRTAyMDE3ODgyCi06MTAzNjQwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEUyCi06MTAzNjUwMDAzQzAzODAwMDM0NjIwMDcwOEM0OTAwMDA4Rjg3MDAzQzdFCi06MTAzNjYwMDAyNDg0MDAwNzI3QkRGRkY4MzA4NEZGRjhBRjg5MDAyNEM5Ci06MTAzNjcwMDAzQzA4ODAwMDk1MEUwMDhBMzFDREZGRkZBRkFEMDAwMDAxCi06MTAzNjgwMDA4RkFDMDAwMDAxODc1ODIzMjU2QUZGRkYzMTQ2MUZGRkRBCi06MTAzNjkwMDAwMEM0MjgyQjE0QTBGRkY3MzUwRDAwNzA4REFDMDAwMDdFCi06MTAzNkEwMDAzQzA1MDgwMDhDQTUwMDg0M0MwQTA4MDA4RDRBMDA4MDc3Ci06MTAzNkIwMDAwMTg5NTgyMzAwMDAxMDIxMDBBQkMwMjEwMDA3Qzg4MkY3Ci06MTAzNkMwMDAwMTQyMjAyMTAzMEIzMDJCMDAxOTM4ODAzNTA5NDAwMEJFCi06MTAzNkQwMDAwMDg2NzgyMTAwRTkxMDIxMjdCRDAwMDgzQzAxMDgwMDgwCi06MTAzNkUwMDBBQzM4MDA4NDNDMDEwODAwQUMyRjAwODAwM0UwMDAwOEU3Ci06MTAzNkYwMDAwMDAwMDAwMDhGODIwMDNDMjQ4NjAwMDczMEM1RkZGOEUwCi06MTAzNzAwMDAwMEEyMTgyMTMwNjQxRkZGMDNFMDAwMDhBRjg0MDAzQ0QyCi06MTAzNzEwMDAzQzAzMjBGRjI3QkRGRkU4M0MwNzYwMDAzQzA4ODAwMDE5Ci06MTAzNzIwMDAyNDA1MDAxMDM0NjRGRkZEQUNFNTMwMDhBRkJGMDAxMDg1Ci06MTAzNzMwMDBBRDA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCi06MTAzNzQwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwRkYzNDVGRkZGREFECi06MTAzNzUwMDBBRDFGMEUwMDNDMEI2MDA0OEQ3ODUwMDAyNDE5RkY3RkQ0Ci06MTAzNzYwMDAzQzBFMDAwMjAzMTk3ODI0MzVFQzM4MEMzNUNEMDEwOUU0Ci06MTAzNzcwMDBBQ0VENEMxODI0MDYwMDA5QUQ2QzUwMDA4Q0VBMDQzOEZFCi06MTAzNzgwMDBBRDA2MDAwOEFEMDAwMDE0OENFOTRDMUMzMTQ1RkZGRjZDCi06MTAzNzkwMDAzQzA2NTcwOTAwMDkxRTAyMzhBNDJGNzEzMDYyMDAwRjQxCi06MTAzN0EwMDAzNEM4MDAxMEFGODIwMDQ4MTA0MDAwMDcyNDg1QzBCMzIxCi06MTAzN0IwMDA4Q0VCNEMxQzNDMEQwMDFGMzVBQ0ZDMDAwMTZDNTAyNDA0Ci06MTAzN0MwMDAwMDBBNDlDMkFGODkwMDM0OENGOTA4MDgyNDFGRjAwMEIwCi06MTAzN0QwMDAwMzNGQzAyNDAzMDg3MDI2MDMwNjc4MjYyREU4MDAwMTY1Ci06MTAzN0UwMDAyREM2MDAwMTAxMDYzODI1NTBFMDAwMDlBMzgwMDAzOEVECi06MTAzN0YwMDAzQzA5NjAxQzhEMjQwMDA4MjQwMzAwMDFBMzgzMDAzOEM5Ci06MTAzODAwMDAzMDgyN0MwMEE3ODAwMDRDQTM4MDAwMkVBNzgyMDAyQzcxCi06MTAzODEwMDBBRjgwMDA1MDE0QTAwMDAzQUY4MDAwM0MzQzA1NjAwMDY2Ci06MTAzODIwMDBBQ0EwNDQyQzBFMDAwNTU5MDAwMDAwMDA4RkJGMDAxMDEyCi06MTAzODMwMDAwQTAwMEU5OTI3QkQwMDE4MjdCREZGQzhBRkIzMDAyQ0EyCi06MTAzODQwMDBBRkIyMDAyOEFGQkYwMDMwQUZCMTAwMjRBRkIwMDAyMDRFCi06MTAzODUwMDA5MzYyMDAwODAwODA5ODIxMDBBMDkwMjExNDQwMDAzNTU4Ci06MTAzODYwMDAyNDA0MDAxMDBFMDAwMUM5MDAwMDAwMDAwRTAwMDE2OEQxCi06MTAzODcwMDAwMDQwODAyMTAwMDJDNDAwM0MxOTMyMDAwMzE5ODgyNTUxCi06MTAzODgwMDBBRTExMDAwMDkzNkYwMDA5OTc2RTAwMTI5MzZBMDAwQTUwCi06MTAzODkwMDAzMUVDMDBGRjMxQ0RGRkZGMDE4RDU4MjEwMDBCNDQwMEJBCi06MTAzOEEwMDAzMTQ5MDBGRjAxMDkzODI1QUUwNzAwMDQ4Rjg1MDA1MDFCCi06MTAzOEIwMDA5Nzg0MDA0MDAwNDAzMDIxMzA4MzIwMDAxNDYwMDA0RDg4Ci06MTAzOEMwMDBBRTA1MDAwOEFFMDAwMDBDM0MwNTgwMDA5Nzg0MDA0MDY3Ci06MTAzOEQwMDAwNjYyMDA0RjhFMDMwMDBDMzA5MDAwMDgxNjAwMDAwMkI0Ci06MTAzOEUwMDAyNjQ4MDAwNjI2NDgwMDAyOTRBNDBFMTQ4Q0E1MEUxQzNGCi06MTAzOEYwMDA4RjY3MDAwNDkzNkEwMDAyMzA4NEZGRkYzMTQ5MDBGRkE0Ci06MTAzOTAwMDBBRkE5MDAxMDhGNzIwMDE0QUZBODAwMTgwRTAwMDFBRjBECi06MTAzOTEwMDBBRkIyMDAxNDhGQkYwMDMwOEZCMzAwMkM4RkIyMDAyOERECi06MTAzOTIwMDA4RkIxMDAyNDhGQjAwMDIwMjQwNDAwMTAwQTAwMDFGMjlGCi06MTAzOTMwMDAyN0JEMDAzODkzNjUwMDA5OTc3MTAwMTI5MzZDMDAwQjQ2Ci06MTAzOTQwMDAzMEFEMDBGRjAxQjEzMDIxMzE4QjAwRkYwMENCODAyMTcxCi06MTAzOTUwMDAyNjAyMDAwQTMwNTBGRkZGMEUwMDAxQzkwMjAwMjAyMTlDCi06MTAzOTYwMDAwRTAwMDE2ODAwNDA4ODIxOTM2ODAwMDk5NzY0MDAxMkU2Ci06MTAzOTcwMDAwMDAyRkMwMDMxMDkwMEZGMzA4QUZGRkYwMTJBMzgyMUQ0Ci06MTAzOTgwMDAyNEUzMDAwMjAzRTNDMDI1M0MxOTQxMDAwMzE5NzgyNTE0Ci06MTAzOTkwMDBBRTJGMDAwMDhGNkUwMDBDM0MwRDgwMDA5NUFDMEUxNDE1Ci06MTAzOUEwMDAwMUQzMjgyNUFFMjUwMDA0OERBNTBFMUM4RjY3MDAwNEM5Ci06MTAzOUIwMDA5MzZCMDAwMjMxODRGRkZGMzE2NjAwRkZBRkE2MDAxMDU5Ci06MTAzOUMwMDA4RjY4MDAxNDAwNDAzMDIxQUZCMjAwMTgwRTAwMDFBRjI0Ci06MTAzOUQwMDBBRkE4MDAxNDAyMDAyMDIxOEZCRjAwMzA4RkIzMDAyQzRECi06MTAzOUUwMDA4RkIyMDAyODhGQjEwMDI0OEZCMDAwMjAwQTAwMDFGMkFFCi06MTAzOUYwMDAyN0JEMDAzODk3NjIwMDEyM0MwNTgwMDA5Nzg0MDA0MDg0Ci06MTAzQTAwMDAzMDVGRkZGRjA2NjFGRkI0QUUxRjAwMEM4RTAzMDAwQzk5Ci06MTAzQTEwMDAzQzA3ODAwMDAwNjc5ODI1MEEwMDAyNkJBRTEzMDAwQzdCCi06MTAzQTIwMDAyN0JERkZEOEFGQjQwMDIwQUZCRjAwMjRBRkIzMDAxQzQ4Ci06MTAzQTMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA5MzYyMDAwODJECi06MTAzQTQwMDAxNDQwMDA5NDAwODBBMDIxQUY2MDAwMEM5Nzg1MDA0MEQ2Ci06MTAzQTUwMDAzMEE0NDAwMDEwODAwMDlFMjQwMzAwMTYyNDEwNDAwNzZDCi06MTAzQTYwMDBBMzYzMDAwQUFGNzAwMDE0OTM4RjAwNDI4RjZDMDAxNEEwCi06MTAzQTcwMDAzMUVFMDAwMTAwMEU2QTQwMDE4RDU4MjVBRjZCMDAxNDM1Ci06MTAzQTgwMDA5NzhBMDA0MDhGNjgwMDE0MzE0OTAwMTAwMTA5MzgyNUQ5Ci06MTAzQTkwMDBBRjY3MDAxNDk3ODYwMDQwMzBDMzAwMDgxMDYwMDA5Rjk1Ci06MTAzQUEwMDAwMDAwMDAwMDhGNjYwMDE0M0MwMzEwMDAzQzA0ODAwMEZFCi06MTAzQUIwMDAwMEMzMjgyNUFGNjUwMDE0OTQ4MjBFMEEzQzFGODEwMEM0Ci06MTAzQUMwMDAyNDEzMDAwRTMwNTlGRkZGMDMzRkMwMjVBRjc4MDAwNEQ4Ci06MTAzQUQwMDBBMzczMDAwMjkzNzIwMDBBMzQwNkZGRkMyNjUxMDAwNDBGCi06MTAzQUUwMDBBMzcxMDAwQTk3ODgwMDQwMzEwNzIwMDAxMEUwMDA5MTgwCi06MTAzQUYwMDAwMDAwMDAwMDNDMEI4MDAwOTc4OTAwNDA5NTY4MEUwQzg4Ci06MTAzQjAwMDA5Nzg0MDA0MDAwMDkxODQyMzEwN0MwMDAzMDY1MDAwMzY3Ci06MTAzQjEwMDAwMDA3MTMwMzMwOUYxMDAwMDBBMkMwMjUwMDFGQ0EwMzM2Ci06MTAzQjIwMDAwMzE5OTgyNTAwMTM5MEMwQTc3MjAwMTI5NzkxMDA0MEM2Ci06MTAzQjMwMDA5MzZGMDAwQTAwMTE4MTgyMzIwRTAwM0MwMUNGNjgyMTkwCi06MTAzQjQwMDAyNUFDMDAzQ0EzNkMwMDA5OTU2QTBFMEMzMTQ5M0ZGRjdGCi06MTAzQjUwMDBBNzY5MDAxMDk3NkQwMDEyOTM2QzAwMDkwMThENTgyMTIwCi06MTAzQjYwMDAyNTZBMDAwMjMxNDkwMDA3MDAwOTQwMjMzMTAzMDAwNzlDCi06MTAzQjcwMDBBMzYzMDAwQjkzNjcwMDA5OTc2NDAwMTI5NzY1MDAxMDE4Ci06MTAzQjgwMDAzMEUyMDBGRjhGOTAwMDI4OTc5ODAwNDAwMDQ0RjgyMTExCi06MTAzQjkwMDAwM0U1QzgyMTAzMjY5ODIxMzMxMjAwNDAxMjQwMDAwNTk2Ci06MTAzQkEwMDAzMjY2RkZGRjAwRDA3MDJCM0MxMTgwMDAxMUMwMDAxNjYwCi06MTAzQkIwMDAwMDAwOTAyMTAyMDY3ODJCMTVFMDAwMkQwMDAwMjAyMTQ2Ci06MTAzQkMwMDAzQzEwODAwMDhFMTIwRTE0M0MwNTgwMDBBRTEyMEUxMEM4Ci06MTAzQkQwMDA4RTExMEUxQ0FFMTEwRTE4QUUwNjBFMDA4Q0I4MDAwMDMxCi06MTAzQkUwMDAzMzEzMDAwODEyNjBGRkZEMDAwMDAwMDA5NEI5MEUwOEI2Ci06MTAzQkYwMDAwMEMwODAyMTAwMDA4ODIxQTc5OTAwNDA4Q0E2MEUwNEY3Ci06MTAzQzAwMDAyNDEyMDAwMUFGODYwMDI4OTc3RjAwMTAzM0YzRkZGRkQ2Ci06MTAzQzEwMDA4RTg5MDAwMDAxMzAyMDIzMTA4MDAwNThBRTg0MDAwMEZGCi06MTAzQzIwMDAwMjIwMjAyMTBFMDAwMjQzMDIwMDI4MjE4RThDMDAwMDc5Ci06MTAzQzMwMDAxNTgwMDAwNTAwMDAwMDAwOEY2RDAwMTQyNDBFRkZCRkVBCi06MTAzQzQwMDAwMUFFQTAyNEFGNzQwMDE0OEY3ODAwMEMwMzEzODgyMUY4Ci06MTAzQzUwMDBBRjcxMDAwQzkzNkYwMDA4MTVFMDAwMDMwMDAwMDAwMDM2Ci06MTAzQzYwMDAxNjQwMDA0MDAwMDAwMDAwQTM3MjAwMDgwMjAwMjAyMTVFCi06MTAzQzcwMDA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEI4Ci06MTAzQzgwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwOEY1Ci06MTAzQzkwMDAyN0JEMDAyODhGOTAwMDI4OTc4MjAwNDAzQzExODAwMEFCCi06MTAzQ0EwMDAwMjAwOTgyMTMwNDUwMDQwMTRBMEZGRDkwMDAwOTAyMTY3Ci06MTAzQ0IwMDA5NzY4MDAxMDhGODcwMDI4MzEwM0ZGRkYxNDY3RkZFQzFGCi06MTAzQ0MwMDAwMDAwMjAyMTAwMDA4ODIxMEEwMDAzMzkyNDEyMDAwMThECi06MTAzQ0QwMDAyNDAzMDAwRTI0MTA0MDA3QTM2MzAwMEFBRjcwMDAxNEYxCi06MTAzQ0UwMDA5MzhGMDA0MjhGNkMwMDE0MzFFRTAwMDEwMDBFNkE0MDg5Ci06MTAzQ0YwMDAwMThENTgyNUFGNkIwMDE0OTc4QTAwNDA4RjY4MDAxNDFGCi06MTAzRDAwMDAzMTQ5MDAxMDAxMDkzODI1QUY2NzAwMTQ5Nzg2MDA0MDNCCi06MTAzRDEwMDAzMEMzMDAwODE0NjBGRjYzMDAwMDAwMDBBRjYwMDAwNEJGCi06MTAzRDIwMDBBMzYwMDAwMjk3ODgwMDQwMzEwNzIwMDAxNEUwRkY3MTczCi06MTAzRDMwMDAwMDAwMzAyMUE3NjAwMDEyOTc5MTAwNDA5MzZGMDAwQUE1Ci06MTAzRDQwMDAzQzBCODAwMDMyMzAxRjAwMDAxMDcxODMwMUNGNjgyMUNFCi06MTAzRDUwMDAyNUFDMDAyOEEzNkMwMDA5OTU2QTBFMEMwQTAwMDMwQTIyCi06MTAzRDYwMDBBNzZBMDAxMDhGNjYwMDE0M0MxRkVGRkYzN0Y5RkZGRUIzCi06MTAzRDcwMDAwMEQ5OTgyNDBBMDAwMzRGQUY3MzAwMTQ4RjZCMDAxNDBFCi06MTAzRDgwMDAzNTZBMDA0MDBFMDAwMTZFQUY2QTAwMTQwQTAwMDMzRTVGCi06MTAzRDkwMDAwMjIwMjAyMThGODUwMDQ0OEY4QTAwMzAyN0JERkZDMDdDCi06MTAzREEwMDAzQzA0ODAwMEFGQjcwMDM0QUZCNDAwMjhBRkIxMDAxQ0IyCi06MTAzREIwMDBBRkJGMDAzOEFGQjYwMDMwQUZCNTAwMkNBRkIzMDAyNEIyCi06MTAzREMwMDBBRkIyMDAyMEFGQjAwMDE4OEM4NzAxMDQ4Q0E5MDAyNDhBCi06MTAzREQwMDBBQzhBMDA4MDhDQTgwMDIwMDBFOTg4MjMwMDAwQjgyMTZDCi06MTAzREUwMDBBQzg4MEUxMDhDQTYwMDI0MDAwMEEwMjFBQzg2MEUxODEyCi06MTAzREYwMDA4QzgyMEUxMEFDODIwRTE0OEM4MzBFMThBQzgzMEUxQ0I5Ci06MTAzRTAwMDAxMjIwMDAzMzNDMTY4MDAwOTM2QjAwMDgxMTYwMDA1NEIwCi06MTAzRTEwMDAwMDAwMDAwMDk3NkUwMDEwMzFDREZGRkYwMjJENjAyQkQ3Ci06MTAzRTIwMDAxNTgwMDA0RjAwMDAwMDAwOTc3MDAwMTAzMjBGRkZGRjU4Ci06MTAzRTMwMDBBRUNGMEUwMDNDMDU4MDAwOENCMzAwMDAzMjcyMDAwODRCCi06MTAzRTQwMDAxMjQwRkZGRDAwMDAwMDAwOTRCNTBFMDg4Q0E1MEUwNDgyCi06MTAzRTUwMDAzMkIwRkZGRjMyMTQwMDAxMTI4MDAwNDQwMDAwMDAwMDY1Ci06MTAzRTYwMDAwMDAwMDAwRDMyMTlBMDQwMjQxODAwNDAxMzM4MDA0NTBFCi06MTAzRTcwMDAzMjE0QTAwMDEyODAwMDNGMDAwMDAwMDA5MzczMDAwODdECi06MTAzRTgwMDAxMjYwMDAwOTI3QTQwMDEwOTc2MjAwMTAzMDVGRkZGRjQ2Ci06MTAzRTkwMDAwMEJGQzgyQjUzMjAwMDA1QUZCMTAwMTAzMjA4MDA0MDBFCi06MTAzRUEwMDAxMTAwMDAzNDAwMDAwMDAwQUZCMTAwMTBBNzkwMDA0MEU2Ci06MTAzRUIwMDBBRjg1MDAyODBFMDAwMkJEMDAwMDAwMDAwMDQwQTAyMUQ4Ci06MTAzRUMwMDAxMDQwMDBCRThGQjEwMDEwMTYyMEZGQ0YwMDAwMDAwMDkwCi06MTAzRUQwMDAyRTk2MDAwMTAyRDc4ODI1MTIyMDAwMTc4RkJGMDAzOEM4Ci06MTAzRUUwMDA4Rjg1MDAzMDI0MTcwRjAwMTBCNzAwNzEzQzA0ODAwMDRDCi06MTAzRUYwMDA4QzhGMDE3ODA1RTBGRkZFMjQxODBGMDA1MEI4MDA4RjZBCi06MTAzRjAwMDAzQzA0ODAwMDhDOTkwRTE0MjQxNDAyNDAzQzA1MTAwMERGCi06MTAzRjEwMDBBQzk5MDE0NDhDOTMwRTFDQUM5MzAxNDhBMDgwMDE1MkQzCi06MTAzRjIwMDBBNDgwMDE1QUFDODAwMTYwQTQ4MDAxNThBQzk0MDE1NDczCi06MTAzRjMwMDBBQzg1MDE3ODhGQkYwMDM4OEZCNzAwMzQ4RkI2MDAzMDYyCi06MTAzRjQwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMENGCi06MTAzRjUwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDA0MDlGCi06MTAzRjYwMDBBRUQxMEUwMDBBMDAwM0MzM0MwNTgwMDAxNEEwRkZCRUMyCi06MTAzRjcwMDAzMjE5QTA0MDBFMDAwMTc1MDAwMEEwMjEwQTAwMDNFQURBCi06MTAzRjgwMDAyRTk2MDAwMTNDMDM4MDAwOEM3RjAxNzgwN0UwRkZGRTQ1Ci06MTAzRjkwMDAyNDAyMDgwMDhGODQwMDNDQUM2MjAxNzgzQzAzODAwMDVFCi06MTAzRkEwMDA5NDZCMDA4QTMxNkFGRkZGMDE0NDM4MjMyNEU5RkZGRjQ0Ci06MTAzRkIwMDAzMTI4MUZGRjJEMDYwMDA4MTRDMEZGRjkzNDZDNDAwMEEzCi06MTAzRkMwMDAwMEEwQTAyMTBFMDAwMTY4MDA4QzkwMjE4RjgzMDAzMDlBCi06MTAzRkQwMDAyNDA0MEYwMDAwNDBBODIxMDIzNDg4MjMzQzA2ODAwMEZFCi06MTAzRkUwMDAxMDY0MDAwNTI0MDUwMDAxOTM4RTAwNDIzMUM1MDAwMUQ0Ci06MTAzRkYwMDAwMDA1NkE0MDM1QTUwMDAxMDAxNUZDMDAzQzAyMDEwMEU3Ci06MTA0MDAwMDAwM0UyQzgyNUFFNTkwMDAwOEY5MzAwNTAzMjE4MDAzNkU1Ci06MTA0MDEwMDAzMjBGMDAwOEFFNTMwMDA0MTFFMDAwNDEwMEI4OTgyNUFCCi06MTA0MDIwMDA5NEMzMEUwQThGODQwMDNDM0MwQjgxMDAzMDZBRkZGRjcyCi06MTA0MDMwMDAyNDkyMDAwODMyNDgxRkZGMDE0QjQ4MjUzQzA3MTAwMDFFCi06MTA0MDQwMDAyNjkyMDAwNjI0MTAwMDBFQUNDOTAxNjAwMjY3OTgyNTc0Ci06MTA0MDUwMDBBNEQwMDE1QUFGODgwMDNDQTREMjAxNTgxNjIwMDAwODExCi06MTA0MDYwMDAzQzEwODAwMDhGOEUwMDMwMjQwNTBGMDA1MUM1MDAwMkU3Ci06MTA0MDcwMDAyNDE3MDAwMTM2NzMwMDQwMEUwMDAxNkUzQzEwODAwMEQyCi06MTA0MDgwMDA4RTE4MEUxNDAyNDAyMDIxQUUxODAxNDQ4RTBGMEUxQzEzCi06MTA0MDkwMDBBRTBGMDE0OEEyMTUwMTUyQUUxMzAxNTQwRTAwMDE3QzZGCi06MTA0MEEwMDAzQzE1MTAwMEFFMTUwMTc4MEEwMDAzRTcwMDAwMDAwMDdGCi06MTA0MEIwMDAxMjgwMDAwNTNDMDc4MDAwOTRGMjBFMDgzMjQ5MDA0MDRGCi06MTA0MEMwMDAxMTIwMDA0MjAwMDAwMDAwOEM4QTAxNzgwNTQwRkZGRUFDCi06MTA0MEQwMDAwMDAwMDAwMDk0OTUwRTEwM0MxMDA1MDAyNDAzMjAwMDAxCi06MTA0MEUwMDAzMkFFRkZGRjAxRDA2ODI1QUM4RDAxNEM4QzhDMEUxNEQ0Ci06MTA0MEYwMDAzQzBCMTAwMEFDOEMwMTQ0OEM4NjBFMUNBQzg2MDE0ODM1Ci06MTA0MTAwMDBBMDgwMDE1MkE0ODAwMTVBQUM4MDAxNjBBNDgwMDE1OEIzCi06MTA0MTEwMDBBQzgzMDE1NEFDOEIwMTc4MEEwMDAzRjEzQzA0ODAwMEFECi06MTA0MTIwMDA4RjhEMDAzQzI2OTIwMDAyQTREMjAxNTgyNUFDMDAwOEQ1Ci06MTA0MTMwMDAzMTg2MUZGRjBBMDAwNDRDQUY4NjAwM0NBQzgwMDE0QzY2Ci06MTA0MTQwMDAxMjgwMDAxOTAwMDAwMDAwOEM5RjBFMTBBQzlGMDE0NEVCCi06MTA0MTUwMDA4QzgzMEUxODNDMDg4MDAwMjQxMTAwNDBBQzgzMDE0ODc5Ci06MTA0MTYwMDA4RkJGMDAzOEExMDAwMTUyOEZCNzAwMzRBNTAwMDE1QTVCCi06MTA0MTcwMDA4RkI2MDAzMEFEMDAwMTYwOEZCNTAwMkNBNTAwMDE1ODRFCi06MTA0MTgwMDA4RkI0MDAyOEFEMTEwMTU0OEZCMzAwMjQ4RkIyMDAyMEVBCi06MTA0MTkwMDA4RkIxMDAxQzhGQjAwMDE4M0MwNDEwMDAyN0JEMDA0MEY4Ci06MTA0MUEwMDAwM0UwMDAwOEFEMDQwMTc4OEM4MjBFMTRBQzgyMDE0NDU3Ci06MTA0MUIwMDA4QzgzMEUxQzBBMDAwNDhCM0MwODgwMDAwRTAwMDE3NUU1Ci06MTA0MUMwMDAyRTk2MDAwMTBBMDAwM0VCMDJENzg4MjUwMDAwMDAwMEFDCi06MTA0MUQwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzM0EwQTAwMDQ2N0ZDCi06MTA0MUUwMDAzQzA0ODAwMDI3QkRGRkQ4QUZCMTAwMTQzQzExODAwMDEzCi06MTA0MUYwMDBBRkIwMDAxMEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxOEQ2Ci06MTA0MjAwMDBBRkJGMDAyNDNDMTMwODAwMjY3MzNDMzQwRTAwMDFGOUI0Ci06MTA0MjEwMDAzNjMwMDA3MDNDMTQwODAwMjY5NDNDQjQwMjAwOTAyMTEzCi06MTA0MjIwMDA4RTA4MDAwMDhFMjQwMDAwMzg4MzAwMDEzMDYyMDAwMUY3Ci06MTA0MjMwMDAxMDQwMDAxNjNDMEE4MDAwMDI0MDQ4MjE4RDI3MDAwMEYzCi06MTA0MjQwMDAzQzFGMDgwMDhGRkYwMDZDM0MwRjA4MDA4REVGMDA2OERBCi06MTA0MjUwMDAwMEU4MTAyMzAzRTI2MDIxMDAwMEMwMjEwMTgyNzAyQkRFCi06MTA0MjYwMDAwMUY4NjgyMTAxQUU0MDIxM0MwMTA4MDBBQzJDMDA2QzMzCi06MTA0MjcwMDAzQzAxMDgwMEFDMjgwMDY4OEQ0QjAwMDAzOTY2MDAwMTQ1Ci06MTA0MjgwMDAzMEM1MDAwMTE0QTBGRkVEMDBFMDQwMjE4RTFGMDAwMEFBCi06MTA0MjkwMDAzQzE4MDgwMDhGMTgwMDZDM0MwRDA4MDA4REFEMDA2OEJDCi06MTA0MkEwMDAwM0U4QzgyMzAzMTkzODIxMDAwMDcwMjEwMEY5NjAyQkFFCi06MTA0MkIwMDAwMUFFNDAyMTAxMEM1ODIxM0MwMTA4MDBBQzI3MDA2Q0U0Ci06MTA0MkMwMDAzQzAxMDgwMEFDMkIwMDY4OEUyODAxMDAyNDA2RkY4MDBBCi06MTA0MkQwMDAzQzA0ODAwQTI1MDUwMjQwMDBBNjQ4MjRBRTI4MDAyMEEwCi06MTA0MkUwMDBBRTI5MDAyNDhFMDkwMDAwMzBBMzAwN0YwMDY0NTAyMTE1Ci06MTA0MkYwMDAzQzA3ODAwMEFGOEEwMDQ0QUY4ODAwMzBBRjg5MDAyNEJCCi06MTA0MzAwMDA4Q0UyMDE3ODA0NDBGRkZFMDAwMDAwMDA4RTFGMDAwMEQ4Ci06MTA0MzEwMDAzQzE4MDgwMDhGMTgwMDc0M0MwRDA4MDA4REFEMDA3MDJCCi06MTA0MzIwMDAwM0U5QzgyMzAzMTk1ODIxMDAwMDcwMjEwMTc5MzAyQkJCCi06MTA0MzMwMDAwMUFFNjAyMTAxODY0ODIxMjQwNTA4MDAzQzAxMDgwMEU3Ci06MTA0MzQwMDBBQzJCMDA3NDNDMDEwODAwQUMyOTAwNzBBQ0U1MDE3ODhFCi06MTA0MzUwMDA5MEU0MDEwOEEzODQwMDQyOTM4MzAwNDIzMDZBMDAwMTg0Ci06MTA0MzYwMDAxMTQwMDAwRjI0MEUwRDAwMjUwMkY4MDAyQzQ3MDMwMTE4Ci06MTA0MzcwMDAxMEUwMDAxQzAwMDgxOUMyMjQ2NEZGRjAwMDA0NTA0MjQxCi06MTA0MzgwMDAwMDBBNDE0MDBFMDAwMzlBMDExM0Q4MjEzQzBBNDAwMDY0Ci06MTA0MzkwMDAzQzA4ODAwMEFEMEEwMTM4MEEwMDA0QkQwMDAwMDAwMDlFCi06MTA0M0EwMDAxMTBFMDAyNjI0MEYwRjAwMTEwRjAwMkEzQzAyODAwODc2Ci06MTA0M0IwMDAzNDQ3MDA4MDkwRkYwMDAwMjQxODAwNTAzM0Y5MDBGRkJDCi06MTA0M0MwMDAxNzM4RkZGMzNDMEE0MDAwMEUwMDA5QTMwMDAwMDAwMDZDCi06MTA0M0QwMDAzQzBBNDAwMDNDMDg4MDAwQUQwQTAxMzgwQTAwMDRCREQ4Ci06MTA0M0UwMDAwMDAwMDAwMDhGODQwMDM0MDA2NDI4MkIxNEEwMDAwQjEwCi06MTA0M0YwMDA4Rjg2MDA0ODAwODY2MDIxMjU4QkZGRkYwMTYzNDgyQkQ0Ci06MTA0NDAwMDAxNTIwMDAwNjAwNjQ2ODIzMDAwRDE5NDAwRTAwMDM5QTcxCi06MTA0NDEwMDAwMDc0RDgyMTBBMDAwNTE5M0MwQTQwMDAwMDAwMDAwMDgxCi06MTA0NDIwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzQUQwRTAwMDM5QTAwCi06MTA0NDMwMDAwMDAwMDAwMDBBMDAwNTE5M0MwQTQwMDAzQzFCMDgwMDZGCi06MTA0NDQwMDAyNzdCM0RCNDBFMDAwMzlBMDAwMDAwMDAwQTAwMDUxOTA2Ci06MTA0NDUwMDAzQzBBNDAwMDNDMUIwODAwMjc3QjNERDQwRTAwMDM5QTE5Ci06MTA0NDYwMDAwMDAwMDAwMDBBMDAwNTE5M0MwQTQwMDA4RjgyMDA1MDNECi06MTA0NDcwMDAyNDQzMDAwMTMwNDIwMEZGQUY4MzAwNTAwM0UwMDAwOEY2Ci06MTA0NDgwMDAwMDAwMDAwMDAwMDQxMUMwMDNFMDAwMDgyNDQyMDI0MEM0Ci06MTA0NDkwMDAzQzA0MDgwMDI0ODQzQkNDMjQwNTAwMUEwQTAwMDA3QzVDCi06MTA0NEEwMDAwMDAwMzAyMTI3QkRGRkUwQUZCRjAwMUNBRkIyMDAxOEY1Ci06MTA0NEIwMDBBRkIxMDAxNEFGQjAwMDEwM0MxMDgwMDA5MjBCMDEwOUE2Ci06MTA0NEMwMDAyNDEyRkY4MDBFMDAwNTU2MzE2NDAwN0Y4RjkxMDAzMDZBCi06MTA0NEQwMDAwMDUxNTAyMTAxNTI0MDI0QUUwODAwMjQ5MjAzMDEwOUVBCi06MTA0NEUwMDAwRTAwMDU1NjMwNjQwMDdGMjQwNjAwODAyNDA3MDBDMEJCCi06MTA0NEYwMDAyNDA0MDA0MEFFMDAwODEwQUUwNDA4MTRBRTA2MDgxOEVDCi06MTA0NTAwMDBBRTA3MDgxQzkyMEMwMTA5MDA1MUY4MjEzM0Y4MDA3RjE2Ci06MTA0NTEwMDAzQzE5ODAwQTAzMTkxMDIxMzE4NDAwN0YwRTAwMDU1NkQyCi06MTA0NTIwMDBBRjgyMDA0NDhFMTEwMTAwM0MwQzAwODAzNTg1MDAwMUYzCi06MTA0NTMwMDAwMjIyNzgyMTAxRjI0ODI0QUUwOTA4MDQ4RTBFMDEwMEZGCi06MTA0NTQwMDAzNTk4MDAwMjM2MDkwOTAwMDFDMjY4MjEzMUFCMDA3OEI0Ci06MTA0NTUwMDAwMTY1NTAyNUFFMEEwODIwOEUwNTAxMDA4RTA4MDEwMDc1Ci06MTA0NTYwMDAzNjA1MDk4MDAxMDIxODIxMjQ2NDAwNDAwMDkyMzAyNDlECi06MTA0NTcwMDBBRTA2MDgwODhFMDcwMTAwMDBFMkY4MjEyN0Y5MDA0MDg2Ci06MTA0NTgwMDAzMzMyMDA3ODAyNTg4ODI1QUUxMTA4MjQ4RTA0MDEwMEM5Ci06MTA0NTkwMDA5NTJGMDAwQzhGQkYwMDFDOEZCMjAwMTgzMUVFRkZGRjZCCi06MTA0NUEwMDAwMDBFNjlDMEFFMEQwODAwQUUwQzA4Mjg5NTJCMDAwQzVCCi06MTA0NUIwMDA4RkIxMDAxNDMxNkFGRkZGMDAwQTQxQzBBRTA4MDAyQzIxCi06MTA0NUMwMDA4Q0EzMDA1MDhGQjAwMDEwOENBMjAwM0M4RDI0MDAwNEZFCi06MTA0NUQwMDA4Q0E2MDAxQzhDQTcwMDM4MjdCRDAwMjBBRjgzMDA2ODg0Ci06MTA0NUUwMDBBRjgyMDA1OEFGODQwMDU0QUY4NjAwNjAwM0UwMDAwODNCCi06MTA0NUYwMDBBRjg3MDA2NDNDMEEwODAwOTE0QTNCRjEzQzA5MDgwMDdGCi06MTA0NjAwMDA5NTI5M0JFQTNDMDUxMTAwMDAwQTNDMDAyNTI4MDAwMkUwCi06MTA0NjEwMDAwMEU4MzAyNTAwQzUxODI1MjQ4MjAwMDhBQzgzMDAwMDdFCi06MTA0NjIwMDAwM0UwMDAwOEFDODAwMDA0M0MwODgwMDAzNTA3MDkwMDY2Ci06MTA0NjMwMDA5MEU2MDAxMTI0MDIwMDI4MDA4MDUwMjEzMEMzMDBGRkMyCi06MTA0NjQwMDAwMEEwNjAyMTEwNjIwMDAyMzQwQjg2REQyNDBCMDgwMEZDCi06MTA0NjUwMDAzQzA3ODAwMDM0RTIwQTlBOTQ1OTAwMDAzNEVGMEE5QzI3Ci06MTA0NjYwMDAzNEVEMEFBMDMzMzhGRkZGQUQ1ODAwMDA4REVFMDAwMDk2Ci06MTA0NjcwMDAzNEU4MEE4MDI0MDQwMDAxQUQ0RTAwMDQ4REE5MDAwMDM2Ci06MTA0NjgwMDBBRDQ5MDAwODkxMDUwMDE5MzBBMzAwMDMxMDY0MDA0M0YwCi06MTA0NjkwMDAyODY2MDAwMjE0QzAwMEIwMjQwNDAwMDIxMDY0MDA4QkRECi06MTA0NkEwMDAyNDA1MDAwMzEwNjUwMDk2MzRFNjBBQTQzQzA5MDgwMEJFCi06MTA0NkIwMDA5NTI5M0JFMDI0MDIwODAwNTE2MjAwNEQzQzBFODAwMDI5Ci06MTA0NkMwMDAzQzBFODAwMDM1QzUwOTAwOTBBNjAwMTI5MEI5MDAxOTczCi06MTA0NkQwMDAzNUNCMDk4MDhENjgwMDI4MzBDNzAwRkYwMDA3Nzg4MDNGCi06MTA0NkUwMDAzMTM4RkZGRjMzMjMwMEZGMDFGODEwMjEwMDAzMjUwMEJDCi06MTA0NkYwMDAwMDg4NzAyNTAwMDI1QzAwM0MwRDYwMDAwMUNEMzAyNTczCi06MTA0NzAwMDAzNTY5MDZGRkFENDkwMDA0QUQ0NjAwMDA4Q0E3MDAyQ0JBCi06MTA0NzEwMDAyNTQ5MDAyOEFENDcwMDA4OENCOTAwMzBBRDU5MDAwQzgwCi06MTA0NzIwMDA4Q0I4MDAzNEFENTgwMDEwOENBRjAwMzhBRDRGMDAxNDc5Ci06MTA0NzMwMDA4Q0EzMDAxQ0FENDMwMDE4OENBODAwMjAzQzAzODAwMDEzCi06MTA0NzQwMDAzNDYyMDkzQ0FENDgwMDFDOENBNDAwMjQzNDZGMDkwMDdECi06MTA0NzUwMDBBRDQ0MDAyMDhDQUQwMDI4QUQ0RDAwMjQ4QzU5MDAwMEU0Ci06MTA0NzYwMDBBRDJDMDAwNDI1MjIwMDE0QUQzOTAwMDA4Qzc4MDEwQzFBCi06MTA0NzcwMDBBRDM4MDAwODkxRTgwMDEyM0MwNDA4MDA5MDg0M0JGMDNBCi06MTA0NzgwMDBBRDIwMDAxMDAwMDgyRjAwMDAwNDZDMDAwMEFENjAyNTczCi06MTA0NzkwMDAzNThBRkZGRjAzRTAwMDA4QUQyQTAwMEMzQzA5MDgwMDQxCi06MTA0N0EwMDA5NTI5M0JFMDNDMEYwODAwOTVFRjNCRUEzNEY5MEFBNDU5Ci06MTA0N0IwMDAzQzBFMDgwMDk1Q0UzQkRDOTcyODAwMDAzMTM4RkZGRjA3Ci06MTA0N0MwMDAwMUY4NjgyMTAxQUUzODIzMDAwODJDMDAyNEUzRkZGMjMxCi06MTA0N0QwMDAwMEEzMjAyNTI0MDIwODAwQUQ0NDAwMENBRDQwMDAxMEM5Ci06MTA0N0UwMDBBRDRCMDAxNDE1NjJGRkI2MjU0QTAwMTgzQzBFODAwMDQwCi06MTA0N0YwMDAzNUNEMDkwMDkxQTIwMDExOTFBNzAwMTkzQzA1MDgwMEQwCi06MTA0ODAwMDA5NEE1M0JFNjMwNDYwMEZGMzVDQjBBODA5NTZFMDAyQTIyCi06MTA0ODEwMDAwMDA2Qzg4MjMwRjgwMEZGOTc4NzAwNUMwMDE5MUUwMDcwCi06MTA0ODIwMDAwMDE4N0MwMDMxMjhGRkZGMDBBODIwMjEwMDZGNDgyNUQ4Ci06MTA0ODMwMDAwMTI0MTAyNTAxQzczMDIxM0MwQjQwMDAwMDRCQzgyNTQ2Ci06MTA0ODQwMDAwMDA2QzQwMEFENTkwMDAwQUQ1ODAwMDQ5MUFGMDAxODM3Ci06MTA0ODUwMDAzQzAzMDAwNjI0RTkwMDAxMDAwRjQ2MDAwMTAzNzAyNTE3Ci06MTA0ODYwMDBBRDRFMDAwODhEQTUwMDJDM0MwMzgwMDAzNDYyMDkzQzRECi06MTA0ODcwMDBBRDQ1MDAwQzhEQUIwMDFDMzEyNDdGRkYyNTQ5MDAxNDkxCi06MTA0ODgwMDBBRDRCMDAxMDhDNTkwMDAwQUQyQzAwMDQzNDZGMDkwMEIyCi06MTA0ODkwMDBBRDM5MDAwMDhDNzgwMTBDQTc4NDAwNUMyNTIyMDAxNDNGCi06MTA0OEEwMDBBRDM4MDAwODkxRTgwMDEyM0MwNDA4MDA5MDg0M0JGMDA5Ci06MTA0OEIwMDBBRDIwMDAxMDAwMDgyRjAwMDAwNDZDMDAwMEFENjAyNTQyCi06MTA0OEMwMDAzNThBRkZGRjAzRTAwMDA4QUQyQTAwMEMzNEUyMEFBNDk5Ci06MTA0OEQwMDA5NDQ2MDAwMDk1MTkwMDI4M0MwOTA4MDA5NTI5M0JFMDAyCi06MTA0OEUwMDAwMDA2QzQwMDAwMTk3QzAwMzcwRTgxMDAwMUVCNjgyNTJBCi06MTA0OEYwMDBBRDRFMDAwQ0FENEQwMDEwMEEwMDA1RTIyNTRBMDAxNDMzCi06MTA0OTAwMDAzQzA5MDgwMDk1MjkzQkUwM0MxODA4MDA5NzE4M0JFQTUxCi06MTA0OTEwMDAzQzBGMDgwMDk1RUYzQkRDOTRDRTAwMDAzMTM5RkZGRkRGCi06MTA0OTIwMDA5NTBEMDAyODAzMTk0MDIxMDEwRjM4MjMwMDBFMjQwMEEzCi06MTA0OTMwMDAwMDBEMkMwMDI0RTNGRkVFMDBBMzMwMjUzNDgyODEwMDFCCi06MTA0OTQwMDBBRDQyMDAwQ0FENDYwMDEwQUQ0MDAwMTRBRDRCMDAxODU4Ci06MTA0OTUwMDAwQTAwMDVFMjI1NEEwMDFDMTQ2MEZGNTQzNEU5MEFBNDQ5Ci06MTA0OTYwMDA5NTI4MDAwMDNDMDkwODAwOTUyOTNCRTAwMDA4M0MwMDIwCi06MTA0OTcwMDAwMEVCMTgyNUFENDMwMDBDMEEwMDA1RTIyNTRBMDAxMEEzCi06MTA0OTgwMDAwM0UwMDAwODI0MDIwN0QwMjdCREZGRTBBRkIyMDAxODAzCi06MTA0OTkwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMwRTAwMDA1QzQwCi06MTA0OUEwMDAwMDgwODgyMThGODgwMDU4OEY4NzAwNTQzQzA1ODAwODNDCi06MTA0OUIwMDAzNEIyMDA4MDAxMTEyODIxM0MxMDgwMDAyNDAyMDA4MEM0Ci06MTA0OUMwMDAyNDAzMDBDMDAwQTcyMDIzQUUwMjA4MTgzQzA2ODAwODdDCi06MTA0OUQwMDBBRTAzMDgxQzE4ODAwMDA0QUY4NTAwNThBQ0M1MDAwNDY1Ci06MTA0OUUwMDA4Q0M5MDAwNEFGODkwMDU0MTIyMDAwMDkzNjA0MDk4MEU0Ci06MTA0OUYwMDAwRTAwMDY5NTAwMDAwMDAwOTI0QzAwMjc4RTBCMDA3NEZDCi06MTA0QTAwMDAwMTgyNTAwNDAxNEIzMDIxQUU0NjAwMEMzNjA0MDk4MDZGCi06MTA0QTEwMDA4QzhFMDAxQzhGOEYwMDYwMDFDRjY4MjMxOUEwMDAwNENBCi06MTA0QTIwMDA4RkJGMDAxQzhDOTAwMDFDQUY5MDAwNjA4RkJGMDAxQ0RCCi06MTA0QTMwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMDA1RTEyCi06MTA0QTQwMDAyN0JEMDAyMDhGODYwMDY4OEY4MzAwNTg4RjgyMDA1NDE2Ci06MTA0QTUwMDAzQzA1ODAwODM0QTQwMDgwQUM4NjAwNTBBQzgzMDAzQzQ4Ci06MTA0QTYwMDAwM0UwMDAwOEFDQTIwMDA0M0MwMzgwMDAzNDY3MDA3MDNGCi06MTA0QTcwMDA4Q0UzMDAwMDMwODcwMEZGM0MwNDA4MDA4Qzg0MDA1NDY1Ci06MTA0QTgwMDAyN0JERkZGODMwQUEwMEZGMjQ4MjAwMDEzQzAxMDgwMDg2Ci06MTA0QTkwMDBBQzIyMDA1NDMwQzgwMEZGQUY4MzAwMjQzQzA5ODAwMEUyCi06MTA0QUEwMDA4RDI1MDE3ODA0QTBGRkZFMzUyQjAwNzA4RDY1MDAwMDc4Ci06MTA0QUIwMDBBM0E3MDAwMzNDMTgwODAwOEYxODAwNzQ4RkI5MDAwMEVBCi06MTA0QUMwMDAzQzBEMDgwMDhEQUQwMDcwMDBBMzM4MjMzQzA0N0ZGRjJGCi06MTA0QUQwMDAwMEUwNzgyMTM0ODJGRkZGMDMwNzM4MjEwMDAwNzAyMUI1Ci06MTA0QUUwMDAwMzIyNTgyNDAxQUUzMDIxMDBFRjYwMkIwMDA4NDdDMDlDCi06MTA0QUYwMDAwMENDMTgyMTAxNjgyODI1QUZBNTAwMDAzQzAxMDgwMDYyCi06MTA0QjAwMDBBQzI3MDA3NDNDMDEwODAwQUMyMzAwNzA5MTI0MDEwQTFBCi06MTA0QjEwMDBBM0EwMDAwMjNDMDI4MEZGQTNBNDAwMDE4RkI4MDAwMDA0Ci06MTA0QjIwMDAzMTRGMDA3RjM0NTlGRkZGMDMxOTY4MjQwMDBGNzYwMENFCi06MTA0QjMwMDAzQzBCMDAyMDAxQUU2MDI1MzU2QTIwMDAyNDA4RkY4MDcwCi06MTA0QjQwMDAzQzA2MTAwMDI3QkQwMDA4QUQyQzAxNENBRDJBMDE1NEQ1Ci06MTA0QjUwMDBBNTIwMDE1OEExMjgwMTUyMDNFMDAwMDhBRDI2MDE3OEU0Ci06MTA0QjYwMDAzQzAzODAwMDM0NjIwMDcwOEM0ODAwMDAzMDhBMDBGRkYzCi06MTA0QjcwMDAzMEE5MDBGRkFGODgwMDI0M0MwNDgwMDA4Qzg1MDE3OEI4Ci06MTA0QjgwMDAwNEEwRkZGRTM0ODcwMDcwOENFQjAwMDAzQzA1MDgwMDk5Ci06MTA0QjkwMDA4Q0E1MDA3NDNDMTkwODAwOEYzOTAwNzAwMTY4MjAyMzJGCi06MTA0QkEwMDAwMEE0NzAyMTAwMDAxMDIxMDFDNEMwMkIwMzIyNzgyMTMxCi06MTA0QkIwMDAzQzA3ODAwMDAxRjg2ODIxM0MwMTA4MDBBQzJFMDA3NDFECi06MTA0QkMwMDAzNEU2MEEwMDNDMDEwODAwQUMyRDAwNzA4Q0NDMDAyMEJCCi06MTA0QkQwMDAwMDA5NTgyQjM0RTgwOTgwQUNFQzAxNDQ4Q0M5MDAyNDRFCi06MTA0QkUwMDAwMDBCMTU0MEFDRTkwMTQ4QTBFQTAxNTA5MTA0MDA0Q0NCCi06MTA0QkYwMDBBMEU0MDE2RDAzRTAwMDA4QTRFMDAxNTgyN0JERkZFODMwCi06MTA0QzAwMDAzMDg0MDBGRkFGQkYwMDEwMEUwMDA3MEQzMEE1MDBGRjdECi06MTA0QzEwMDA4RjgzMDA1ODhGQkYwMDEwM0MwNTgwMDAzNDQ2MDA0MDUxCi06MTA0QzIwMDAyNDA0RkY5MDNDMDIxMDAwMjdCRDAwMThBQ0EzMDE0Q0U3Ci06MTA0QzMwMDBBMEE0MDE1MkFDQTYwMTU0MDNFMDAwMDhBQ0EyMDE3ODg0Ci06MTA0QzQwMDAyN0JERkZFMDNDMDg4MDA4QUZCRjAwMUNBRkIyMDAxOEQyCi06MTA0QzUwMDBBRkIxMDAxNEFGQjAwMDEwMzUxMDAwODA4RTA2MDAxODAwCi06MTA0QzYwMDAzQzA3ODAwMDMwOTIwMEZGMDBDNzIwMjVBRTA0MDAxOEVBCi06MTA0QzcwMDAwRTAwMDA1QzMwQjEwMEZGOTIwMzAwMDUzNDYyMDAwOEIyCi06MTA0QzgwMDAwRTAwMDA1RUEyMDIwMDA1MDI0MDIwMjEwRTAwMDczNDQzCi06MTA0QzkwMDAwMjIwMjgyMTAyNDAyMDIxOEZCRjAwMUM4RkIyMDAxODYzCi06MTA0Q0EwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDUyNDA2MDAwMTA4Ci06MTA0Q0IwMDAwQTAwMDZDRjI3QkQwMDIwM0MwODgwMDAyN0JERkZFODgyCi06MTA0Q0MwMDBBRkIwMDAxMDM1MDUwOTgwQUZCRjAwMTQ5MEE3MDAwOUYwCi06MTA0Q0QwMDAyNDAyMDAwNjM1MDYwOTAwMzBFMzAwRkYyNDEwMDAwNDFBCi06MTA0Q0UwMDAxMDYyMDA3MjI0MDgwMDAyOTRBRTAwNUMzQzBEMDIwNEM1Ci06MTA0Q0YwMDAzMUNDRkZGRjAxOEQ1ODI1QUM4QjAwMDA5MEFBMDAwODM1Ci06MTA0RDAwMDAzMTQ5MDAyMDExMjAwMDA4MDAwMDAwMDA5MEJGMDA0RTMzCi06MTA0RDEwMDAzQzE5MDEwMzM3MzgwMzAwMzNFRjAwRkYwMUY4MjgyNTYxCi06MTA0RDIwMDAyNDEwMDAwOEFDODUwMDA0OTBDQzAwMTE5MEM5MDAxMTNCCi06MTA0RDMwMDAzMThBMDBGRjAwMEE1ODgyMzEyNzAwRkYyNTZBMDAwNUVBCi06MTA0RDQwMDAwMDBBMTA4MDM4RTMwMDI4MTQ2MDAwMjkwMDgyNDgyM0ZDCi06MTA0RDUwMDA5MENGMDAxMjNDMTk4MDAwMzcyMjA5MDAzMUU1MDBGRjk2Ci06MTA0RDYwMDAwMDA1NzA4MDAxRDA2ODIxMDAwRDM0MDAzNEM0MDZGRkI2Ci06MTA0RDcwMDBBRDI0MDAwNDkwNEMwMDExOTA1ODAwMTIzNzNGMDk4MDc4Ci06MTA0RDgwMDA4RkU0MDAzNDhGMkYwMTBDMDAxMDU4ODIzMzA1MDBGRjkwCi06MTA0RDkwMDAwMEFCNzAyMTAwMDgzNDAwMDA4RjE4MjMwMDBFNkYwMDU0Ci06MTA0REEwMDAwMUE2MTAyNTMxOUYwMEZDMzA2N0ZGRkYwM0U5QzAyMUY5Ci06MTA0REIwMDAwMDQ3QzgyNTAxNEI3ODIxMDAwRjI4ODBBRjE5MDAwQzRGCi06MTA0REMwMDAwRTAwMDA1QzAxMjU4MDIxM0MwQTgwMDgyNDA5MDAwNEIzCi06MTA0REQwMDAzNTQ4MDA4MDBFMDAwMDVFQTEwOTAwMDkwMjAwMTAyMTg0Ci06MTA0REUwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODJCCi06MTA0REYwMDA5MENFMDAxMTkwQ0QwMDE5M0MwNzA4MDA5NEU3M0JFNkU3Ci06MTA0RTAwMDAzMUM2MDBGRjAwMDYyMDgyMzFBQzAwRkYwMDA0NUUwMEM2Ci06MTA0RTEwMDAwMDBDMUMwMDAxNjMxMDI1MDA0N0M4MjUzQzFGNDAwMDAyCi06MTA0RTIwMDAwMzNGQzAyNTNDMTk4MDAwQUQzODAwMDAzNzIyMDkwMDNGCi06MTA0RTMwMDA5MDRDMDAxMTkwNTgwMDEyMzczRjA5ODA4RkU0MDAzNEU1Ci06MTA0RTQwMDA4RjJGMDEwQzAwMTA1ODgyMzMwNTAwRkYwMEFCNzAyMTNBCi06MTA0RTUwMDAwMDA4MzQwMDAwOEYxODIzMDAwRTZGMDAwMUE2MTAyNUYzCi06MTA0RTYwMDAzMTlGMDBGQzMwNjdGRkZGMDNFOUMwMjEwMDQ3QzgyNUUwCi06MTA0RTcwMDAwMTRCNzgyMTAwMEYyODgwQUYxOTAwMEMwRTAwMDA1QzU4Ci06MTA0RTgwMDAwMTI1ODAyMTNDMEE4MDA4MjQwOTAwMDQzNTQ4MDA4MDVGCi06MTA0RTkwMDAwRTAwMDA1RUExMDkwMDA5MDIwMDEwMjE4RkJGMDAxNDVFCi06MTA0RUEwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgwQTAwMDc2RjRDCi06MTA0RUIwMDAyNDA4MDAxMjI3QkRGRkQ4QUZCNDAwMjBBRkIzMDAxQ0Y4Ci06MTA0RUMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCRjAwMjRBRkIwMDAxMEY0Ci06MTA0RUQwMDAzQzA2ODAwMDkwQzMwMTBCMzA5MjAwRkYzMEIzMDBGRjBFCi06MTA0RUUwMDAzMDYyMDAzMDAwMDBBMDIxMTA0MDAwNzAwMDAwODgyMUQ2Ci06MTA0RUYwMDAzNEM0MDk4MDkwODgwMDA4MDAwODNFMDAwMDA3MkUwMzkzCi06MTA0RjAwMDAwNEEwMDA5NzI0MDQwMDA0OEY4ODAwNTgzQzAxMDgwMDg2Ci06MTA0RjEwMDBBMDI0M0JGMDNDMEM4MDAwQUQ4MDAwNDgzQzAzODAwMEE2Ci06MTA0RjIwMDA5MDZFMDEwQjMxQzUwMDIwMTBBMDAwMDczQzAyODAwMEVDCi06MTA0RjMwMDAzNDc5MDk4MDkzMzgwMDA4MDAxODg2MDAwMDEwN0UwMzM5Ci06MTA0RjQwMDAwNUUyMDA5QzNDMDI4MDA4MzQ1MDA5MDAzNDQ3MEE4MDg2Ci06MTA0RjUwMDA5MDREMDEwQjk0RUIwMDJDOTIwMzAwMTE5MjFGMDAxMjU0Ci06MTA0RjYwMDA5MEU1MDAxODMwNzgwMEZGMzNGOTAwRkYwMDE5Nzg4MEQxCi06MTA0RjcwMDAwMUY4NzAyMTAxRDE1MDIxMzBCMTAwRkYwMTUxNDgyMUM5Ci06MTA0RjgwMDAyNTI0MDAwQTMxQUMwMDQwMzA5MUZGRkYwMDBDMzAyQjhCCi06MTA0RjkwMDAwMjIwMjAyMUE3OEIwMDVDM0MwMTA4MDBBNDJBM0JFNkVDCi06MTA0RkEwMDAzQzAxMDgwMEE0MjkzQkU4M0MwMTA4MDBBNDI5M0JFQTk1Ci06MTA0RkIwMDAzQzAxMDgwMEE0MjAzQkUwM0MwMTA4MDBBNDIwM0JEQ0FECi06MTA0RkMwMDAwRTAwMDFDOTAxMDY4MDIzMEUwMDA1QjIwMDQwMjAyMTE5Ci06MTA0RkQwMDAwMDQwMjAyMTBFMDAwNUJGMDIwMDI4MjExNjgwMDA1QzQxCi06MTA0RkUwMDAwMDAwMDAwMDBFMDAwMUYyMDIyMDIwMjEzQzA4MDgwMDExCi06MTA0RkYwMDA5MTA4M0JGMDMxMTQwMDAzMTI4MDAwMTYzQzFGODAwODFBCi06MTA1MDAwMDA4Rjg0MDA1ODNDMEM4MDA4MzU4NjAwODAyNDhCMDAwMTdBCi06MTA1MDEwMDBBQ0NCMDAzQzNDMDU4MDA4OENBQTAwMDQwMTYwMjAyMTM4Ci06MTA1MDIwMDAwMTRCNDgyMzE5MjAwMDAyQUY4QjAwNTg4Q0E0MDAwNEM4Ci06MTA1MDMwMDAwRTAwMDY5NUFDQTQwMDA0M0MwRjgwMDA4REVFMDA3NEI5Ci06MTA1MDQwMDAzQzA1ODAwODM0QUQwMDgwMDA0RTg4MjFBREIxMDAwQ0Q1Ci06MTA1MDUwMDAzQzFGODAwODM3RjkwMDgwMDI0MDIwMjEwMjYwMjgyMThGCi06MTA1MDYwMDBBMzIwMDA2QjBFMDAwNzBEM0MxMjgwMDA4Rjk4MDA1OEEzCi06MTA1MDcwMDAzNDUwMDAwNkFFNTgwMTRDMEUwMDA1NTAzQzEzMTAwMDkxCi06MTA1MDgwMDBBMjQyMDE1MjhGQkYwMDI0QUU1MDAxNTQ4RkI0MDAyMEMxCi06MTA1MDkwMDBBRTUzMDE3ODhGQjEwMDE0OEZCMzAwMUM4RkIyMDAxODhCCi06MTA1MEEwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgzNEMzMDk4MDNBCi06MTA1MEIwMDA5MDZGMDAwODAwMEY3NjAwMDAwRTZFMDMwNUEwMDAzMzBECi06MTA1MEMwMDAzNEMyMDkwMDkwNTkwMDFCMjQxRjAwMTAzQzAxMDgwMDQ1Ci06MTA1MEQwMDBBMDNGM0JGMDMzMzgwMDAyMTMwMEZGOTA4Rjg4MDA1ODQ4Ci06MTA1MEUwMDA4RjgzMDA2NDE0NjhGRjhFM0MwMzgwMDAwRTAwMDA1QzE4Ci06MTA1MEYwMDAwMDAwMDAwMDNDMDk4MDA4MzUyNTAwODA5MEE0MDAwOUNDCi06MTA1MTAwMDAyNDA3MDAxNjMwODgwMEZGMTEwNzAwMEQwMDAwMDAwMDgyCi06MTA1MTEwMDA5MEE2MDAwOTNDMEMwODAwOTE4QzNCRjAyNDBBMDAwODgyCi06MTA1MTIwMDAzMEM0MDBGRjM1OEIwMDAxM0MwMTA4MDBBMDJCM0JGMDkwCi06MTA1MTMwMDAxMDhBMDAyRjI0MEQwMDBBMTA4RDAwMjgyNDAyMDAwQzc0Ci06MTA1MTQwMDAwRTAwMDA1RTAwMDAwMDAwMEEwMDA3RkM4Rjg4MDA1ODc3Ci06MTA1MTUwMDAwRTAwMDc2MzAwNDAyMDIxMEEwMDA4MkUwMDAwMDAwMDE2Ci06MTA1MTYwMDAzQzBCODAwODM1NkEwMDgwOEQ0ODAwNTQ4Q0M5MDEwQ0M2Ci06MTA1MTcwMDAxMTIwRkY2NkFGODgwMDU4MjQwNjAwMTQzQzAxMDgwMDg3Ci06MTA1MTgwMDBBMDI2M0JGMDBBMDAwN0ZCM0MwQzgwMDA5MDcxMDAwODUxCi06MTA1MTkwMDAyNDE0MDAwMjNDMDEwODAwQTAzNDNCRjAzMjMwMDAyMDBGCi06MTA1MUEwMDAxMjAwMDAwQjI0MTQwMDAxOEY4ODAwNTgwQTAwMDdGQzJECi06MTA1MUIwMDAyNDExMDAwODM0NUYwMDgwOEZFNzAwMzhBQzQ3MDAwNEZBCi06MTA1MUMwMDA4QzQzMDAwNEFGRTMwMDNDMEEwMDA4MDczQzAyODAwMDY3Ci06MTA1MUQwMDA4Rjg4MDA1ODBBMDAwN0ZDMjQxMTAwMDRBMEEyMDAwOUNGCi06MTA1MUUwMDAwRTAwMDA1RTAwMDAwMDAwMEEwMDA3RkM4Rjg4MDA1OEQ3Ci06MTA1MUYwMDAyNDAyMDAxNDBBMDAwOEFEQTBBMjAwMDkyN0JERkZFOEEwCi06MTA1MjAwMDBBRkJGMDAxNEFGQjAwMDEwM0MxMDgwMDA5MjAyMDEwOTQzCi06MTA1MjEwMDAyNDA1MDAwMTBFMDAwNzBEMzA0NDAwRkYzQzFGODAwOEVDCi06MTA1MjIwMDA5M0Y4MDAwRTM3RTMwMDgwOTNGOTAwMEY5MDZFMDAyNjhDCi06MTA1MjMwMDA5M0U5MDAwQTMzMkYwMEZGMDAxODY2MDAwMDBGNkMwMDhFCi06MTA1MjQwMDAzMUNCMDBGRjAxOEQ1MDI1MDAwQjMyMDAwMTQ2MzgyNTdGCi06MTA1MjUwMDAzMTI4MDBGRjM0NDU2MDAwMDBFODIwMjUyNDAyRkY4MTRBCi06MTA1MjYwMDAzQzAzMTAwMEFFMDQwMTRDOEZCRjAwMTRBRTA1MDE1NDg2Ci06MTA1MjcwMDBBMjAyMDE1MkFFMDMwMTc4OEZCMDAwMTAwM0UwMDAwOEQzCi06MTA1MjgwMDAyN0JEMDAxODI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMDI2Ci06MTA1MjkwMDAwRTAwMDcwRDMwQTUwMEZGMzQ0NjAwNDAzQzA0ODAwMDlFCi06MTA1MkEwMDAyNDA1RkY5MkFDODYwMTU0QTA4NTAxNTI4RjgzMDA1OERCCi06MTA1MkIwMDA4RkJGMDAxMDNDMDIxMDAwMjdCRDAwMThBQzgzMDE0Q0NBCi06MTA1MkMwMDAwM0UwMDAwOEFDODIwMTc4MjdCREZGRDhBRkIyMDAxODE4Ci06MTA1MkQwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBBRkIzMDAxQ0RGCi06MTA1MkUwMDAzQzA3ODAwMDkwRTIwMTA5MzA4NjAwRkYzMEIwMDBGRkVCCi06MTA1MkYwMDAwMDA2MThDMjMyMDQwMDAyMzA3MTAwMDExNDgwMDAwNzU5Ci06MTA1MzAwMDAzMDUyMDBGRjNDMDk4MDA4MzUzMzAwODA5MjY4MDAwNTY4Ci06MTA1MzEwMDAzMTA1MDAwODEwQTAwMDBDMzBDQTAwMTAwMjQwMjAyMTA2Ci06MTA1MzIwMDAwRTAwMDc0NTAyMjAyODIxMjQwMjAwMDE4RkJGMDAyMDIzCi06MTA1MzMwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDEzCi06MTA1MzQwMDAwM0UwMDAwODI3QkQwMDI4MTU0MDAwMzAzNEU1MEEwMEJFCi06MTA1MzUwMDA4Q0I5MDAyNDhDQjgwMDA4MTMzODAwNDcwMDAwNDAyMUE1Ci06MTA1MzYwMDAzQzBFODAwODM1RDMwMDgwOTI2RDAwNjgyNDBCMDAwMjRCCi06MTA1MzcwMDAzMUFDMDBGRjExOEIwMDgwM0MwNjgwMDA5MjdGMDA0QzE2Ci06MTA1MzgwMDA5MEM0MDEwOTUwOUYwMDA0MzIxMzAwN0MxMTAwMDA2NzkzCi06MTA1MzkwMDAwMDAwMDAwMDMyMTMwMDdDMTY2MDAwNUEwMjQwMjAyMUY5Ci06MTA1M0EwMDAxNjIwMDAwODMyMEMwMDAxM0MwNzgwMDAzNEVCMEEwMDk0Ci06MTA1M0IwMDA4RDY1MDAyNDhDRTgwMTA0MTRBOEZGREMwMDAwMTAyMTk2Ci06MTA1M0MwMDAzMjBDMDAwMTExODAwMDBEMDI0MDIwMjEzQzEwODAwMEIxCi06MTA1M0QwMDA4RTBFMDEwQzhGOEQwMDY4MTFDRDAwMDgwMDAwMDAwMEJBCi06MTA1M0UwMDAwRTAwMDdFMjAyMjAyODIxOEUwRjAxMEMzQzE4ODAwOEQ1Ci06MTA1M0YwMDAzNzEwMDA4MEFFMEYwMDUwMDI0MDIwMjEwRTAwMDczNDBECi06MTA1NDAwMDAwMjIwMjgyMTBBMDAwOTAwMjQwMjAwMDEzQzA3MDgwMEFDCi06MTA1NDEwMDA4Q0U3MDA2NDI0RTYwMDAxM0MwMTA4MDBBQzI2MDA2NDJGCi06MTA1NDIwMDAxNjAwMDAwRDAwMDAwMDAwMDIyMDI4MjEwRTAwMDczNEE1Ci06MTA1NDMwMDAwMjQwMjAyMTkyNkYwMDY4MjQwRDAwMDIzMUVFMDBGRjJGCi06MTA1NDQwMDAxMUNEMDAyMjAyNDAyMDIxMEUwMDA4QjQwMDAwMDAwMDBGCi06MTA1NDUwMDAwQTAwMDkwMDI0MDIwMDAxMEUwMDAwM0QyNDA0MDAwMTlFCi06MTA1NDYwMDA5MjZDMDAyNTAyMEM1ODI1MEUwMDAwNUVBMjZCMDAyNUYwCi06MTA1NDcwMDAwQTAwMDk0MDAyMjAyODIxOEU2MzAwMTg4Q0U0MDEwNEYwCi06MTA1NDgwMDA4Q0JGMDAyNDAwMDMxNjAyMTQ5RkZGQjUzMDQ1MDA3RjM3Ci06MTA1NDkwMDA5MjY5MDA0QzI2NDQwMDAxMzA5MzAwN0YxMjY1MDA0MDYxCi06MTA1NEEwMDAzMTIzMDBGRjE0NjRGRkFGM0MwRTgwMDgyNjQ4MDAwMTQyCi06MTA1NEIwMDAzMTExMDA3RjMxMDIwMEZGMTIyNTAwMEIyNDA4MDAwMThBCi06MTA1NEMwMDAwMDQwOTAyMTBBMDAwOTBEMjQxMTAwMDEyNDA1MDAwNDY4Ci06MTA1NEQwMDAwRTAwMDZDRjI0MDYwMDAxMEUwMDA4QjQwMDAwMDAwMEY0Ci06MTA1NEUwMDAwQTAwMDkwMDI0MDIwMDAxMjQwN0ZGODAwMjQ3MjgyNDQzCi06MTA1NEYwMDAwMEE3OTAyNjMyNDIwMEZGMDA0MDkwMjEwQTAwMDkwRENCCi06MTA1NTAwMDAyNDExMDAwMTBFMDAwN0UyMDIyMDI4MjEzMjA2MDAzMDlCCi06MTA1NTEwMDAxMEMwRkZBMzMyMTAwMDgyMDI0MDIwMjEwRTAwMDc0NTc4Ci06MTA1NTIwMDAwMjIwMjgyMTBBMDAwOTAwMjQwMjAwMDE4RTYzMDAxOENECi06MTA1NTMwMDAwMjQwMjAyMTAyMjAyODIxMDA2NjEwMjUwRTAwMDhENkY2Ci06MTA1NTQwMDBBRTYyMDAxODkyNjQwMDRDMjQwNTAwMDMyNDA2MDAwMTlBCi06MTA1NTUwMDAwRTAwMDZDRjMwODQwMEZGMEUwMDAwM0QyNDA0MDAwMTQxCi06MTA1NTYwMDA5MjZBMDAyNTAyMEE0ODI1MEUwMDAwNUVBMjY5MDAyNTA1Ci06MTA1NTcwMDAwQTAwMDkwMDI0MDIwMDAxOEU3ODAwMTgzQzE5ODAwMEZFCi06MTA1NTgwMDAwMjQwMjAyMTAzMTk3ODI1MDIyMDI4MjEwRTAwMDczNDJCCi06MTA1NTkwMDBBRTZGMDAxODkyNjQwMDRDMEEwMDA5ODgyNDA1MDAwNENDCi06MTA1NUEwMDAzMjQ2MDA4MDM4Q0EwMDgwMTQ2QUZGNkUzQzBFODAwOEM0Ci06MTA1NUIwMDAwQTAwMDk2MTI2NDgwMDAxMjdCREZGQzBBRkIwMDAxOEVFCi06MTA1NUMwMDAzQzEwODAwMEFGQkYwMDM4QUZCNzAwMzRBRkI2MDAzMDNBCi06MTA1NUQwMDBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRBRkIyMDAyMEE5Ci06MTA1NUUwMDAwRTAwMDU1RUFGQjEwMDFDOTIwNDAxMDg5MjA1MDEwQjhDCi06MTA1NUYwMDAzMDg0MDBGRjBFMDAwOEU3MzBBNTAwRkYxNDQwMDBENkZECi06MTA1NjAwMDA4RkJGMDAzODNDMDk4MDA4MzUyODAwODBBMTAwMDA2QjVFCi06MTA1NjEwMDAzNjA3MDk4MDkwRTYwMDAwMjQwMjAwNTAzQzE3MDgwMDdECi06MTA1NjIwMDAyNkY3M0RGNDMwQzMwMEZGM0MxNDA4MDAyNjk0M0UwNEU2Ci06MTA1NjMwMDAxMDYyMDAwMzNDMTA4MDAwMDAwMEI4MjEwMDAwQTAyMThGCi06MTA1NjQwMDAyNDFGMDAxMDM2MTEwQTAwMzYxMzA5ODA4RTE2MDEwNDNCCi06MTA1NjUwMDA4RjhEMDA1ODhFMzgwMDI0MzYxOTBBODA4RTcyMDAyMEYzCi06MTA1NjYwMDAzQzAxMDgwMEEwM0YzQkYwOTcyQzAwMkM4RUY1MDAwMDc5Ci06MTA1NjcwMDA5MzJCMDAxODAyNEQ3MDIzMDJEODc4MjMzQzAxMDgwMEI4Ci06MTA1NjgwMDBBQzJGM0JDQzNDMDEwODAwQUMyRTNCRDAzQzAxMDgwMEM5Ci06MTA1NjkwMDBBQzJEM0JGNEE3OEMwMDVDMDJBMEY4MDkzMTcyMDBGRjJFCi06MTA1NkEwMDAzMDRBMDAwMjE1NDAwMERBMzA0NTAwMDExMEEwMDBCNDc1Ci06MTA1NkIwMDAwMDAwMDAwMDM2MDUwOTAwOEUyQjAwMjQ5MEJGMDAxMTY5Ci06MTA1NkMwMDA5MEI5MDAxMjkwQjYwMDExMzNFRjAwRkYzMzM4MDBGRjlECi06MTA1NkQwMDAzMkNEMDBGRjAwMTg3MDgwMDFDRjgwMjEwMjRENjAyMTgzCi06MTA1NkUwMDAwMjEyQTgyMTI1OEEwMDEwM0MwMTA4MDBBNDM1M0JFOERECi06MTA1NkYwMDAzQzAxMDgwMEFDMkIzQkY4M0MwMTA4MDBBNDJBM0JFNDI5Ci06MTA1NzAwMDAzQzAxMDgwMEE0MzAzQkU2MDI2MEIwMjEzQzE1ODAwMDVCCi06MTA1NzEwMDA4RjkyMDA1ODhGODQwMDYwOEVEMzAwMjAyNDExMDAwNkUxCi06MTA1NzIwMDAwMDkyMzAyMzAyNzIyODIzM0MwMTA4MDBBQzMxM0JFQzhDCi06MTA1NzMwMDAwNEMwMDBBRjAwMDA5ODIxMDRBMDAwQUQwMEM1MTAyQkVDCi06MTA1NzQwMDAxMDQwMDBBRjAwMDAwMDAwM0MwMTA4MDBBQzI2M0JEMDM4Ci06MTA1NzUwMDA4RTkwMDAwMDAyMDBGODA5MDAwMDAwMDAzMDQzMDAwMkIzCi06MTA1NzYwMDAxNDYwMDA2RjAwNDA4ODIxMzA0NjAwMDE1NEMwMDAxMUQxCi06MTA1NzcwMDA4RTkyMDAwNDNDMDgwODAwOEQwODNCRDQzQzA5QzAwMDEwCi06MTA1NzgwMDAzQzA0ODAwMDAxMDkzODI1QUVBNzBFMDA4QzhCMDAwMDc4Ci06MTA1NzkwMDAzMTZBMDAwODExNDBGRkZEMDAwMDAwMDA5NDhEMEUwOEUyCi06MTA1N0EwMDAyNDEzMDAwMUE3OEQwMDQwOEM4QzBFMDRBRjhDMDAyOEMwCi06MTA1N0IwMDA4RTkyMDAwNDAyNDBGODA5MDAwMDAwMDAwMjIyODgyNUIxCi06MTA1N0MwMDAzMjJFMDAwMjE1QzAwMEE1MDAwMDAwMDAzQzE4MDgwMEExCi06MTA1N0QwMDA5NzE4M0JEQzNDMTIwODAwOTY1MjNCRTgzQzE5MDgwMDQ1Ci06MTA1N0UwMDA5NzM5M0JERTNDMDcwODAwOENFNzNCRDQwMzEyNDAyMThECi06MTA1N0YwMDAzQzBCMDgwMDhENkIzQkY4M0MwRTA4MDA5NUNFM0JGMjRECi06MTA1ODAwMDAzQzEyODAwMDAxMTk3ODIxOEU0NjAxMEMwMEY4NjgyMUI1Ci06MTA1ODEwMDAyNUVDMDAwMjAxQUU0ODIxMDE2NzUwMjFBRjg2MDA2OEU3Ci06MTA1ODIwMDAzQzAxMDgwMEFDMkEzQkY4M0MwMTA4MDBBNDI5M0JFMEZECi06MTA1ODMwMDAzQzAxMDgwMEE0MjgzQkVBMEUwMDAxQzkzMTg0RkZGRkE3Ci06MTA1ODQwMDAwRTAwMDU1MDAwNDA4MDIxM0MwMTA4MDBBMDIyM0JGMUUxCi06MTA1ODUwMDA4RTgyMDAwODAwNDBGODA5MDIwMDIwMjE4Rjg1MDA1ODQwCi06MTA1ODYwMDAwRTAwMDVCRjAwNDAyMDIxOEU5MDAwMEMwMjAwRjgwOUI4Ci06MTA1ODcwMDAwMDQwMjAyMTNDMDMwODAwOTQ2MzNCRUEzQzAyMDgwMEZFCi06MTA1ODgwMDA5NDQyM0JERTAwNjIyMDIxMjQ4NTAwMDIwRTAwMDFGMkRBCi06MTA1ODkwMDAzMEE0RkZGRjNDMTkwODAwOEYzOTNCQ0MzQzFGMDgwMEE3Ci06MTA1OEEwMDA4RkZGM0JENDAzM0ZDMDIzM0MwMTA4MDBBQzM4M0JDQzA2Ci06MTA1OEIwMDAxNzAwMDAwNjAwMDAwMDAwM0MwNTA4MDA4Q0E1M0JFQzJBCi06MTA1OEMwMDAzNEJGMDA0MDNDMDEwODAwQUMzRjNCRUMxMjYwMDA0MjlBCi06MTA1OEQwMDA4RjgyMDA0NDhFNDMwRTEwOEY5MzAwNDRBRTYzMDAyMEVECi06MTA1OEUwMDA4RTQ0MEUxOEFFNjQwMDI0M0MwNDA4MDA5NDg0M0JFMDBGCi06MTA1OEYwMDAwRTAwMDY5NzAwMDAwMDAwOEY4NjAwNTg4RThBMDAxMDY4Ci06MTA1OTAwMDAzQzAxMDgwMEFDMjYzQkY0MDE0MEY4MDkwMDAwMDAwMDBGCi06MTA1OTEwMDAzQzA5MDgwMDhEMjkzQkNDMTUyMEZGN0U4RjkyMDA1ODUyCi06MTA1OTIwMDA5Nzk2MDA1QzNDMTQ4MDBFMzIzNTAwMTAwRTAwMDZDNkJGCi06MTA1OTMwMDBBNjk2MDAyQzU2QTAwMDQ1OEVFQjAwMDQzMjI3MDA0MEFFCi06MTA1OTQwMDA1NEUwMDAxRThFRjEwMDA4OEVFQzAwMEMwMTgwRjgwOTc2Ci06MTA1OTUwMDAwMDAwMDAwMDhGQkYwMDM4OEZCNzAwMzQ4RkI2MDAzMEQyCi06MTA1OTYwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDk1Ci06MTA1OTcwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDA0MDY1Ci06MTA1OTgwMDA5MjA5MDEwOThGODgwMDMwMDAwOTNFMDAwMEU4MzAyNUE3Ci06MTA1OTkwMDBBRTA2MDA4MDhFMjMwMDIwOEUyNDAwMjRBRkEzMDAxMENBCi06MTA1OUEwMDBBRTAzMEUxNDhGQTIwMDEwQUUwMjBFMTBBRTA0MEUxQzM5Ci06MTA1OUIwMDBBRTA0MEUxODBBMDAwOUUzMzYwNTA5MDAwMjIwRjgwOUIyCi06MTA1OUMwMDAwMDAwMDAwMDhFRUMwMDBDMDE4MEY4MDkwMDAwMDAwMENGCi06MTA1OUQwMDAwQTAwMEE4QjhGQkYwMDM4MjQwODAwMDEyNDEwMDAwMTQwCi06MTA1OUUwMDBBNDQwMDAyMEE0NDgwMDIyMEEwMDBBNkZBQzUwMDAyNDAyCi06MTA1OUYwMDAzQzAxMDgwMEFDMjAzQkQwMEEwMDBBMEE4RTkwMDAwMDRGCi06MTA1QTAwMDAzQzAxMDgwMEFDMjUzQkQwMEEwMDBBMEE4RTkwMDAwMDM5Ci06MTA1QTEwMDA5MjExMDEwOTAwMDAyODIxMEUwMDA3MzQzMjI0MDBGRkYyCi06MTA1QTIwMDA4RkJGMDAzODhGQjcwMDM0OEZCNjAwMzA4RkI1MDAyQzkxCi06MTA1QTMwMDA4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA4RkIxMDAxQ0Q4Ci06MTA1QTQwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwNDAwMTYwRjgwOThFCi06MTA1QTUwMDAwMDAwMDAwMDBBMDAwQTg1MzIyNzAwNDA1MjYwRkZCMUIyCi06MTA1QTYwMDA5Nzk2MDA1QzhFQjYwRTE0OEY5NDAwNDRBRTk2MDAyMDdDCi06MTA1QTcwMDA4RUFGMEUxQ0FFOEYwMDI0MEEwMDBBN0U5Nzk2MDA1QzQzCi06MTA1QTgwMDA4RjgyMDAwMDAwMDQyMTgwMDNFMDAwMDgwMDgyMTAyMUMyCi06MTA1QTkwMDAzQzA3ODAwODM0RTIwMDgwOTA0MzAwNjkwMDgwNDAyMTg4Ci06MTA1QUEwMDAxMDYwMDAwOTNDMDQwMTAwM0MwNzA4MDA4Q0U3M0JGNDRGCi06MTA1QUIwMDA4RjgzMDAxQzAwRTMyMDIzMDQ4MDAwMDg5Mzg5MDAwOEUyCi06MTA1QUMwMDAxNEUzMDAwMzAxMDAyMDIxMDNFMDAwMDgwMDgwMTAyMUZFCi06MTA1QUQwMDAzQzA0MDEwMDAzRTAwMDA4MDA4MDEwMjExMTIwMDAwQkFECi06MTA1QUUwMDAwMDY3MzgyMzNDMEQ4MDAwMzVBQzA5ODA5MThCMDA3QzI5Ci06MTA1QUYwMDAzMTZBMDAwMjExNDAwMDIwMjQwOTAwMzQwMEU5NzAyQkIzCi06MTA1QjAwMDAxNUMwRkZGMTAxMDAyMDIxMDBFOTM4MjMyNDAzRkZGQzI4Ci06MTA1QjEwMDAwMEEzQzgyNDAwRTNDMDI0MDBGOTc4MkIxNUUwRkZFQUI1Ci06MTA1QjIwMDAwMzA4MjAyMTMwQzQwMDAzMDAwNDEwMjMxNEMwMDAxNDEzCi06MTA1QjMwMDAzMDQ5MDAwMzAwMDAzMDIxMDBBOTc4MjEwMUU2NzAyMURFCi06MTA1QjQwMDAwMEVFNjgyQjExQTBGRkUwM0MwNDAxMDAyRDM4MDAwMTlECi06MTA1QjUwMDAwMDA2QzgyQjAxMDU0ODIxMDMxOTM4MjQxNEUwRkZEQTk4Ci06MTA1QjYwMDAyNTI0RkZGQzI0MDJGRkZDMDBBMjE4MjQwMDY4MjAyMTQ5Ci06MTA1QjcwMDAwM0UwMDAwODAwODAxMDIxMEEwMDBBRjQyNDA5MDAzMDI0Ci06MTA1QjgwMDAzQzBDODAwMDM1ODYwOTgwOTBDQjAwN0MzMTZBMDAwNDkzCi06MTA1QjkwMDAxNTQwRkZFOTI0MDYwMDA0MEEwMDBCMDMwMDAwMzAyMTMxCi06MTA1QkEwMDAzQzAzMDgwMDhDNjMwMDVDOEY4MjAwMDQyN0JERkZFODgzCi06MTA1QkIwMDBBRkJGMDAxNDEwNjIwMDA1QUZCMDAwMTAwMDAzMjlDMDkxCi06MTA1QkMwMDAyNEE0MDI4MEFGODQwMDAwQUY4MzAwMDQzQzEwODAwMDU2Ci06MTA1QkQwMDAzNjAzMEEwMDk0NjUwMDMyMEUwMDBBRDUzMEE0M0ZGRjU4Ci06MTA1QkUwMDA4RTA0MDEwMDNDMTgwMDgwMzcwRjAwMDMwMDgyQzgyMTlBCi06MTA1QkYwMDAyNDAyRkY4MDAzMjI2MDI0MzMyOTAwN0YwMDBDRjk0MDM3Ci06MTA1QzAwMDAwM0U5NDAyNTMzMkUwMDc4M0MwRDEwMDAwMTBENTAyNThFCi06MTA1QzEwMDAwMUNGNTgyNUFFMEMwMDI4MzYwODA5ODBBRTBDMDgwQ0MwCi06MTA1QzIwMDBBRTBCMDgyQ0FFMEEwODMwOTEwMzAwNjkzQzA2ODAwQ0NDCi06MTA1QzMwMDAwMTI2MzgyMTEwNjAwMDA2QUY4NzAwMjA4RDA5MDAzQzQ2Ci06MTA1QzQwMDA4RDA2MDA2QzAxMjYzODIzMThFMDAwN0YwMDAwMDAwMDVDCi06MTA1QzUwMDAzQzBDODAwODM1OEIwMDgwM0MwQTgwMDBBMTYwMDA2OTA0Ci06MTA1QzYwMDAzNTUwMDk4MDhFMDIwMDM4M0MwNjgwMDAzNEM1MEEwMDk5Ci06MTA1QzcwMDA5MEFEMDAzQzMxQTgwMDIwMTEwMDAwMTlBRjgyMDAxQzNCCi06MTA1QzgwMDAyNDBFMDAwMTNDMTk4MDAwMzczMDBBMDBBMzhFMDAwODYyCi06MTA1QzkwMDBBRjgwMDAxMDhFMDQwMDI0OEY4NTAwMTAyNDE4MDAwOEE3Ci06MTA1Q0EwMDBBRjgwMDAwQ0FGODAwMDE0M0MwMTA4MDBBNDM4M0JERTNDCi06MTA1Q0IwMDAzQzAxMDgwMEE0MjAzQkYyMEUwMDBBRDkwMDAwMzAyMTZDCi06MTA1Q0MwMDA5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTAwMDBGNzE0Mjg0Ci06MTA1Q0QwMDBBRjgyMDAxODI3QkQwMDE4MDNFMDAwMDgzMUMyMDAwMUEwCi06MTA1Q0UwMDA5MEI5MDAzMjI0MEYwMDAxMzMzODAwRkYwMDE4MjE4MkUwCi06MTA1Q0YwMDAxMDhGMDAzRjI0MUYwMDAyMTA5RjAwNjIzNEMyMEFDMEIwCi06MTA1RDAwMDAzQzAzODAwMDM0NjQwQTAwOEM5OTAwMjQxNzIwMDAxRDk1Ci06MTA1RDEwMDAzNDY2MDkwMDkwODMwMDMwMjQxRjAwMDUzMDYyMDAzRjg0Ci06MTA1RDIwMDAxMDVGMDA0QzI0MDUwMDAxOEY4NjAwMENBMzg1MDAwODNECi06MTA1RDMwMDBBRjg2MDAxNEFGODYwMDEwM0MxOTgwMDAzNzMwMEEwMDhGCi06MTA1RDQwMDA4RTA0MDAyNDhGODUwMDEwMjQxODAwMDgzQzAxMDgwMEYwCi06MTA1RDUwMDBBNDM4M0JERTNDMDEwODAwQTQyMDNCRjIwRTAwMEFEOTI3Ci06MTA1RDYwMDAwMDAwMDAwMDkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMEE1Ci06MTA1RDcwMDAwMDBGNzE0MkFGODIwMDE4MjdCRDAwMTgwM0UwMDAwODMxCi06MTA1RDgwMDAzMUMyMDAwMThDODgwMDA4OEM4RDAwMjQ4Q0NCMDA2NDBCCi06MTA1RDkwMDAzQzE5ODAwMDM3MzAwQTAwQUY4QjAwMTBBMzgwMDAwODQ4Ci06MTA1REEwMDA4RTA0MDAyNDhGODYwMDBDOEY4NTAwMTAwMTBENjAyMzY3Ci06MTA1REIwMDAyNDE4MDAwOEFGOEMwMDE0M0MwMTA4MDBBNDM4M0JERTE2Ci06MTA1REMwMDAzQzAxMDgwMEE0MjAzQkYyMEUwMDBBRDkwMDAwMDAwMEFDCi06MTA1REQwMDA5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTAwMDBGNzE0MjczCi06MTA1REUwMDBBRjgyMDAxODI3QkQwMDE4MDNFMDAwMDgzMUMyMDAwMThGCi06MTA1REYwMDA5MEE3MDAzMDMwRTMwMDNGNTA2NDAwMjgzNEM1MEFDMDRCCi06MTA1RTAwMDA4Q0FBMDAyNDE1NDAwMDIyMzRDODA5MDA4Q0FCMDA0ODNECi06MTA1RTEwMDAzQzBDN0ZGRjM1ODVGRkZGMDE2NTEwMjQzQzE4ODAwMDk2Ci06MTA1RTIwMDBBRjgyMDAwQzM3MDUwOTAwOEY4RTAwMEM4Q0FGMDA2MDJDCi06MTA1RTMwMDAwMUNGNjgyQjE1QTAwMDAyMDFDMDIwMjE4Q0E0MDA2MEI2Ci06MTA1RTQwMDAwQTAwMEI3NUFGODQwMDBDOEQwMjAwNkMwQTAwMEI1MDI5Ci06MTA1RTUwMDAzQzA2ODAwMDhDODkwMDQ4OEY4NjAwMEMzQzBBN0ZGRjNFCi06MTA1RTYwMDAzNTUwRkZGRjAxMzAzODI0M0MwNDgwMDgyNDA1MDAwMTMwCi06MTA1RTcwMDBBRjg3MDAxNEFDODAwMDZDQTM4NTAwMDgwQTAwMEI4Mzc4Ci06MTA1RTgwMDBBRjg2MDAxMDhDNDQwMDE0MEEwMDBCNzVBRjg0MDAwQzIwCi06MTA1RTkwMDA4RDAyMDA2ODBBMDAwQkJEM0MxODgwMDAzNEM0MDk4MEU0Ci06MTA1RUEwMDA4Qzg2MDA3MDhDQjAwMDE0MDBEMDQ4MkIxMTIwMDAwNEE4Ci06MTA1RUIwMDAwMDAwMDAwMDhDODIwMDcwMEEwMDBCQkQzQzE4ODAwMEJFCi06MTA1RUMwMDA4Q0EyMDAxNDBBMDAwQkJEM0MxODgwMDA4Rjg1MDAxMEM2Ci06MTA1RUQwMDAyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTQxNEEwMDAwODQ5Ci06MTA1RUUwMDBBRkIwMDAxMDNDMDQ4MDAwMzQ4NzBBMDA5MEU2MDAzMDE4Ci06MTA1RUYwMDAyNDAyMDAwNTMwQzMwMDNGMTA2MjAwQjczNDg0MDkwMDVCCi06MTA1RjAwMDA4RjkxMDAwQzAwQTA4MDIxM0MwNDgwMDAzNDhFMEEwMDk4Ci06MTA1RjEwMDA4RENEMDAwNDNDMDYwODAwOENDNjNCRDAzMUE3M0ZGRjY2Ci06MTA1RjIwMDAwMEU2NjAyQjU1ODAwMDAxMDBFMDMwMjE5MzhGMDAwOENGCi06MTA1RjMwMDAxMUUwMDA3NjAwRDAxMDJCMzQ5OTA5ODA5MzM4MDA3QzUyCi06MTA1RjQwMDAzMzA0MDAwMjEwODAwMDc3MjQwMzAwMzQwMEMzRjgyQkQwCi06MTA1RjUwMDAxN0UwMDBENjAwQzMzMDIzMDBEMDEwMkIzQzAxMDgwMDBFCi06MTA1RjYwMDBBNDIzM0JEQzE0NDAwMDZEMDIwMDE4MjEzQzA0MDgwMDBGCi06MTA1RjcwMDA4Qzg0M0JDQzAwNjQyODJCNTRBMDAwMDEwMDYwMjAyMUJECi06MTA1RjgwMDAzQzA1ODAwMDM0QTkwQTAwOTEyODAwM0MzQzAxMDgwMDJGCi06MTA1RjkwMDBBQzI0M0JENDMxMDMwMDIwMTQ2MDAwMDIwMDAwNDgyMUVGCi06MTA1RkEwMDA4Q0E5MEUxODhGODgwMDE4MDEyODUwMkIxMTQwMDA1RjEzCi06MTA1RkIwMDAwMDAwMDAwMDNDMDUwODAwOENBNTNCRDQwMEE5NjAyMTJFCi06MTA1RkMwMDAwMTBDNTgyQjExNjAwMDVDMDBCMDY4MkIwMTA5MzgyM0NDCi06MTA1RkQwMDAwMEUwMjgyMTNDMDEwODAwQUMyNzNCRDQxMjAwMDAwMzVDCi06MTA1RkUwMDAyNDAyRkZGQzEwQjAwMDhDMzIyQTAwMDMwMEEyRjgyNDI3Ci06MTA1RkYwMDAzQzAxMDgwMEE0MjAzQkYyM0MwMTA4MDBBQzNGM0JENDJDCi06MTA2MDAwMDAwM0UwMjgyMThGODQwMDEwMTIwNDAwMDYzQzAzODAwODVFCi06MTA2MDEwMDA4QzZBMDA2QzAyMDAyMDIxQUY5MTAwMEMyNTUwMDAwMTE5Ci06MTA2MDIwMDBBQzcwMDA2QzhGOEIwMDE0MDA4NTg4MjNBRjkxMDAxMDNBCi06MTA2MDMwMDAwMTY1MjAyM0FGODQwMDE0MTIyMDAwMDIyNDA3MDAxOEY5Ci06MTA2MDQwMDAyNDA3MDAxMDNDMEU4MDA4MzVDNjAwODA5MENEMDA2ODAzCi06MTA2MDUwMDAyNDBDMDAwMTNDMDEwODAwQTAyNzNCRjAzMUE3MDBGRjAxCi06MTA2MDYwMDAxMEVDMDA0NzAwMDAwMDAwMTQ4MDAwMTgwMDAwMjgyMUY4Ci06MTA2MDcwMDAzQzBCODAwMDkxNjUwMTA5MzU3MTA5ODA4RTIzMDAxODYxCi06MTA2MDgwMDAzMEE1MDBGRjAwMDM1NjAyMjRBMzAwMDEzMTQ2MDA3RjIzCi06MTA2MDkwMDAzMDcwMDA3RjEyMDYwMDdFMjQwQ0ZGODAzQzBGODAwOEM5Ci06MTA2MEEwMDAzNUU5MDA4MEExMjMwMDRDM0MwODA4MDA4RDA4M0JFQzNBCi06MTA2MEIwMDAyNDBFMDAwMjNDMDEwODAwQTAyRTNDMzEzNTBEMDAwOEUyCi06MTA2MEMwMDAzQzAxMDgwMEFDMkQzQkVDMjQwNTAwMTAzQzFGODAwMDc3Ci06MTA2MEQwMDAzN0U0MEEwMDkwOTkwMDNDMzMzODAwMjAxMzAwMDAwNTkzCi06MTA2MEUwMDAwMEEwMjAyMTI0MDIwMDAxM0MwMTA4MDBBQzIyM0JENDg2Ci06MTA2MEYwMDAzNEE0MDAwMThGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEJFCi06MTA2MTAwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjAzQzAxMDgwMEFBCi06MTA2MTEwMDBBNDIwM0JEQzEwNDBGRjk1MDIwMDE4MjEwQTAwMEMxMDVGCi06MTA2MTIwMDAwMEMwMTgyMTBBMDAwQzA4MjQwMzAwMzAzQzA1MDgwMEI4Ci06MTA2MTMwMDA4Q0E1M0JENDAwQjA2ODJCMTFBMEZGQTgwMDAwMDAwMDg0Ci06MTA2MTQwMDAzQzA0MDgwMDk0ODQzQkRDMDA4NTc4MjEwMUU3NzAyQjM3Ci06MTA2MTUwMDAxMUMwMDAwNzJDQTIwMDA0M0MxRjYwMDA4RkY5NTQwNEZBCi06MTA2MTYwMDAzMzM4MDAzRjE3MDBGRkUzMjQwNDAwNDIyQ0EyMDAwNDUwCi06MTA2MTcwMDAxMDQwRkY5QTI0MDQwMDQyMEEwMDBDNzM4RkJGMDAxOERECi06MTA2MTgwMDAxNTI4RkZCOTAwMDAwMDAwOENDMjAwMTgzQzE4ODAwMEUwCi06MTA2MTkwMDAyNDE5MDAwMjAwNThGODI1QUNERjAwMTgzNzA0MEEwMDYzCi06MTA2MUEwMDBBMEQ5MDA2ODkwODkwMDNDMjQwRjAwMDQwMEEwMTAyMUIxCi06MTA2MUIwMDAzMTI4MDAyMDNDMDEwODAwQTAyRjNDMzExMTAwMDAwMkQyCi06MTA2MUMwMDAyNDA1MDAxMDI0MDIwMDAxM0MwMTA4MDBBQzIyM0JDQzU1Ci06MTA2MUQwMDAwQTAwMEM2OTNDMUY4MDAwOEY4ODAwMTQ4Qzg5MDA2MEM1Ci06MTA2MUUwMDAwMTA5MjgyQjE0QTAwMDAyMDEwMDg4MjE4QzkxMDA2MDc1Ci06MTA2MUYwMDAzQzBCODAwMDhENjQwRTE4MjQwQTAwMDEwMjIwMjgyMTI3Ci06MTA2MjAwMDAwMjIwMzAyMUEzOEEwMDA4MEUwMDBBRDkwMjIwODAyMTMyCi06MTA2MjEwMDAwQTAwMEJGN0FGODIwMDE4MDAwQTE4MjMxMjIwMDAwN0FCCi06MTA2MjIwMDAzMDY0MDAwMzNDMEQ4MDAwMzVBNzA5ODA5MEVDMDA3Q0IxCi06MTA2MjMwMDAzMThCMDAwNDE1NjAwMDE5MjQ4RTAwMDQzQzAxMDgwMDE1Ci06MTA2MjQwMDBBNDI0M0JGMjNDMTgwODAwOTcxODNCRjIwMzA1MjAyMUQ4Ci06MTA2MjUwMDAwMEM0NzgyQjExRTBGRjZDOEY4NDAwMTAyQ0E2MDAwNTgxCi06MTA2MjYwMDAxNEMwRkZBNDI0MDQwMDQyMzBCOTAwMDMxNzIwMDAwMjI4Ci06MTA2MjcwMDAwMEI5MTgyMzI0QTNGRkZDM0MwMTA4MDBBQzIzM0JENDQ1Ci06MTA2MjgwMDAzQzAxMDgwMEE0MjAzQkYyMEEwMDBDMzYwMDYwMjgyMUUzCi06MTA2MjkwMDAwMEFDMzgyNDBBMDAwQzVDMDBFQzE4MjYzQzAxMDgwMDE1Ci06MTA2MkEwMDBBNDJFM0JGMjBBMDAwQ0M2MDAwMDAwMDAzQzAxMDgwMENFCi06MTA2MkIwMDBBQzIwM0JENDBBMDAwQzcyMjQwNDAwNDI4RjgzMDAxNEVCCi06MTA2MkMwMDAzQzBCODAwMDM1NkEwQTAwMTQ2MDAwMDYwMDAwMTAyMUIzCi06MTA2MkQwMDA5MTQ2MDAzMDI0MDUwMDA1MzBDNDAwRkYxMDg1MDAwM0ZFCi06MTA2MkUwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA5MTQ5MDA0OEExCi06MTA2MkYwMDAzMTI4MDBGRjAwMDgzOUMyMTRFMEZGRkEzQzA0ODAwODhFCi06MTA2MzAwMDAzQzA2MDgwMDk0QzYzQkRDM0MwMzA4MDA4QzYzM0JGNDZECi06MTA2MzEwMDAzQzA1MDgwMDhDQTUzQkQ0M0MxODA4MDA5NzE4M0JGMkJDCi06MTA2MzIwMDAwMDY2QzgyMThDOEUwMDA0MDMyNTc4MjEwMUY4NjgyMUJECi06MTA2MzMwMDAwMUFFNjAyMzE5ODAwMDFEMDAwMDAwMDA5MTU4MDA0QzQwCi06MTA2MzQwMDA4RjhEMDAyMDk1NkUwRTEwMzMwRjAwRkY4REE5MDAwNDc1Ci06MTA2MzUwMDAwMUNGMzAyMzhEQUEwMDAwMzBDRkZGRkYwMDBGNjEwMDc2Ci06MTA2MzYwMDAwMTJDMjgyMTAwMDAzODIxMDE0NzIwMjEwMEFDMTgyQkU2Ci06MTA2MzcwMDAwMDgzQzgyMUFEQTUwMDA0QURCOTAwMDA5MUI4MDAwQUEyCi06MTA2MzgwMDAwMUY4NzAyMUExQUUwMDBBOTU2QzBFMTI4RjhBMDAyMEQwCi06MTA2MzkwMDBBNTRDMDAwODk1NDkwMDM4MjUyODAwMDFBNTQ4MDAzODdCCi06MTA2M0EwMDA5MTQ3MDAwRDM0RUIwMDA4QTE0QjAwMEQwM0UwMDAwOEZECi06MTA2M0IwMDAwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMTg5MzhGMDAwODgxCi06MTA2M0MwMDA4RkIwMDAxNDNDMDg3RkZGOEY4NzAwMTAzQzBDODAwMENBCi06MTA2M0QwMDAzNTE4RkZGRkFGQkYwMDIwQUZCMTAwMUMzNTk5MEEwMDkwCi06MTA2M0UwMDAwMjE4MTgyNDkzMkEwMDNDMDAwRjVGQzAzQzAyQkZGRjM0Ci06MTA2M0YwMDAyQ0YwMDAwMTM0NDlGRkZGMDA2QkY4MjUzQzA4MDgwMDMxCi06MTA2NDAwMDA4RDA4M0JGNDhGOTkwMDFDM0MxODA4MDA5NzE4M0JFQTU0Ci06MTA2NDEwMDAwM0U5NTgyNDAwMTA3RjgwM0MwN0VGRkYzQzA1RjBGRkE0Ci06MTA2NDIwMDAwMTZGMTgyNTNDMTE4MDAwMzE0OTAwMjAzNEUyRkZGRjQ0Ci06MTA2NDMwMDAzNEFERkZGRjM2MkUwOTgwMjdBNTAwMTAyNDA2MDAwMjg4Ci06MTA2NDQwMDAwMTE5NDAyMzI3MEEwMDAyMDA2MjE4MjQwMDgwODAyMURECi06MTA2NDUwMDAxNTIwMDAwMjAwMDA1ODIxOEQ4QjBFMUNBN0FBMDAxMkU3Ci06MTA2NDYwMDAwNTAwMDAzQTI0MDcwMDAwMzBFRjAwRkYwMDBGM0YwMDU2Ci06MTA2NDcwMDAwMDY3NDAyNTNDMDI4MDA4QUZBODAwMTQzNDRCMDA4MDIwCi06MTA2NDgwMDA5MTZBMDA2ODNDMEYwODAwOTFFRjNCRjEzQzA5REZGRjg3Ci06MTA2NDkwMDAzNTNGRkZGRjAwMEE2MDJCM0MwMjA4MDA5NDQyM0JFNEJBCi06MTA2NEEwMDBBM0FGMDAxMTAxMUZDMDI0MDAwQ0NGNDAwMzE5MTgyNTExCi06MTA2NEIwMDA4RkE3MDAxMEFGQTMwMDE0M0MxRjA4MDA5M0ZGM0JGMzBECi06MTA2NEMwMDBBN0EyMDAxNjhGQTgwMDE0MDBFRDQ4MjQzQzBCMDEwMDgxCi06MTA2NEQwMDAzQzBBMEZGRjAxMkJDODI1MzNGODAwMDMzNTRDRkZGRkEyCi06MTA2NEUwMDAwMTBENzgyNDNDMDI3MDAwMDMyQzM4MjQwMDE4MUUwMDkzCi06MTA2NEYwMDAwMEUyNDgyNTAxRTM1ODI1QUZBQjAwMTRBRkE5MDAxMDE2Ci06MTA2NTAwMDA5MURGMDA3Q0EzQkYwMDE1MEUwMDAwNzIwMDAwMDAwMEE4Ci06MTA2NTEwMDAzNjJEMEEwMDkxQTYwMDNDMzBDNDAwMjAxMDgwMDAwNkYxCi06MTA2NTIwMDAyNjAyMDAwODNDMTEwODAwOTYzMTNCRTAyNjJFRkZGRkIyCi06MTA2NTMwMDAzQzAxMDgwMEE0MkUzQkUwOEZCRjAwMjA4RkIxMDAxQzVGCi06MTA2NTQwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjg4RjhBMDAxOENDCi06MTA2NTUwMDAwMTZBNjAyQjU1ODBGRkM0MjQwNzAwMDEwQTAwMEQ1MDFBCi06MTA2NTYwMDAzMEVGMDBGRjkzODMwMDA4M0MwMjgwMDAyN0JERkZEODc2Ci06MTA2NTcwMDAzNDQ4MEEwMDAwODA1MDIxQUZCRjAwMjAzNDQ2MEFDMEQyCi06MTA2NTgwMDAwMTAwMjgyMTEwNjAwMDBFMzQ0NDA5ODA5MTA3MDAzMDdBCi06MTA2NTkwMDAyNDBCMDAwNThGODkwMDBDMzBFQzAwM0YxMThCMDAwQkExCi06MTA2NUEwMDAwMDAwMzgyMUFGQTkwMDEwM0MwQjgwMDg4RDY5MDA2Q0Y5Ci06MTA2NUIwMDBBRkFBMDAxODBFMDAwMTNBQUZBOTAwMTRBMzgwMDAwODhBCi06MTA2NUMwMDA4RkJGMDAyMDAzRTAwMDA4MjdCRDAwMjg4RDFGMDA0ODcyCi06MTA2NUQwMDAzQzE4MDgwMDhGMTgzQkQ0OEY5OTAwMTQzQzAyN0ZGRkIxCi06MTA2NUUwMDA4RDA4MDA0NDM0NDNGRkZGQUZBOTAwMTAzQzBCODAwODI2Ci06MTA2NUYwMDA4RDY5MDA2QzAzRTM3MDI0MDMxOTc4MjEwMUNGNjgyM0FGCi06MTA2NjAwMDAwMUE4MzgyMUFGQUEwMDE4MEUwMDAxM0FBRkE5MDAxNDYyCi06MTA2NjEwMDAwQTAwMERBNUEzODAwMDA4M0MwNTgwMDAzNEE2MEEwMEVFCi06MTA2NjIwMDA5MEM3MDAzQzNDMDYwODAwOTRDNjNCRjIzQzAyMDgwMEMwCi06MTA2NjMwMDA4QzQyM0JFQzMwRTMwMDIwMDAwNjI0MDAxMDYwMDAzMTY3Ci06MTA2NjQwMDAwMDQ0NDgyNTNDMDg4MDA4MzUwNTAwODA5MEEzMDA2ODc4Ci06MTA2NjUwMDAwMDAwNjgyMTI0MEMwMDAxMDAwMDUwMjEyNDBCMDAwMURGCi06MTA2NjYwMDAzQzE4ODAwMDM3MEYwMDcwOERFODAwMDAzQzA3ODAwMDY4Ci06MTA2NjcwMDBBRjg4MDAyNDhDRjkwMTc4MDcyMEZGRkUzNEU1MDA3MDE0Ci06MTA2NjgwMDA4Q0EyMDAwMDNDMDMwODAwOEM2MzAwNzQzQzBGMDgwMERGCi06MTA2NjkwMDA4REVGMDA3MDAwNDgyMDIzMDA2NDI4MjEwMDAwQzAyMUY1Ci06MTA2NkEwMDAwMEE0MzAyQjAxRjg3MDIxMDFDNjQwMjEzQzAxMDgwMEY0Ci06MTA2NkIwMDBBQzI1MDA3NDNDMDEwODAwQUMyODAwNzBBQ0VDMDE0ODJCCi06MTA2NkMwMDAzQzAyMDgwMDhDNDIzQkY0QTRFQTAxNDRBNEVCMDE0NkRFCi06MTA2NkQwMDBBQ0UyMDE0QzNDMDQwODAwOTA4NDNCRjEzQzAzODAwODkwCi06MTA2NkUwMDBBMEU0MDE1MkFDRTkwMTU0QTRFRDAxNTgzNDZEMDA4MERFCi06MTA2NkYwMDA5MUFDMDA0QzNDMDkxMDAwQTBFQzAxNkQwM0UwMDAwOEQ3Ci06MTA2NzAwMDBBQ0U5MDE3ODhDQUMwRTFDM0MwQjA4MDA4RDZCM0JENEMzCi06MTA2NzEwMDA5NEFBMEUxNjk0QUUwRTE0MDE2NjY4MjEzMTRCRkZGRjQ5Ci06MTA2NzIwMDAwQTAwMERDRDMxQ0FGRkZGM0MwNDgwMDAzNDgzMEEwMDBCCi06MTA2NzMwMDA5MDY1MDAzQzMwQTIwMDIwMTA0MDAwMkIwMDAwMDAwMEJCCi06MTA2NzQwMDAwMDAwNTgyMTAwMDA1MDIxMDAwMDQ4MjEzQzA4ODAwMDMyCi06MTA2NzUwMDAzNTA0MDA3MDhDODgwMDAwM0MwNzgwMDBBRjg4MDAyNDVFCi06MTA2NzYwMDA4Q0VDMDE3ODA1ODBGRkZFMzRFRTAwNzA4RENEMDAwMENBCi06MTA2NzcwMDAzQzA1MDgwMDhDQTUwMDc0M0MwNDA4MDA4Qzg0MDA3MDYzCi06MTA2NzgwMDAwMUE4NjAyMzAwQUNDMDIxMDAwMDEwMjEwMzBDMzAyQkI1Ci06MTA2NzkwMDAwMDgyQzgyMTAzMjY3ODIxM0MwMTA4MDBBQzM4MDA3NDJGCi06MTA2N0EwMDAzQzAxMDgwMEFDMkYwMDcwQUNFQjAxNDgzQzBFMDgwMDI3Ci06MTA2N0IwMDA4RENFM0JGNDI0MERGRjkxMjQwQjAwNDBBNEU5MDE0NDRECi06MTA2N0MwMDBBNEVBMDE0NkFDRUUwMTRDQTBFRDAxNTJBQ0VCMDE1NDQxCi06MTA2N0QwMDBBNEUwMDE1ODkwRUEwMTA5M0MwOTEwMDBBMEVBMDE2RDBCCi06MTA2N0UwMDAwM0UwMDAwOEFDRTkwMTc4OEM4QjBFMTg5NDg3MEUxMjM4Ci06MTA2N0YwMDA5NDg2MEUxMDMwRUFGRkZGMEEwMDBFMDgzMEM5RkZGRjMyCi06MTA2ODAwMDAzQzA0ODAwMDM0ODMwQTAwOTA2NTAwM0MzMEEyMDAyMEU0Ci06MTA2ODEwMDAxMDQwMDAzOTI3QkRGRkY4MjQwQzAwMDEwMDAwNTAyMTcyCi06MTA2ODIwMDAyNDBCMDAwMTNDMDg4MDAwMzUwNDAwNzA4Qzg5MDAwMEI2Ci06MTA2ODMwMDAzQzA4ODAwMEFGODkwMDI0OEQwRDAxNzgwNUEwRkZGRTgzCi06MTA2ODQwMDAzNTBFMDA3MDhEQzcwMDAwM0MwNTA4MDA4Q0E1MDA3NDUzCi06MTA2ODUwMDAzQzA0MDgwMDhDODQwMDcwMDBFOTY4MjMwMEFEQzAyMTZFCi06MTA2ODYwMDAwMDAwMTAyMTAzMEQzMDJCMDA4MkM4MjEwMzI2NzgyMTVGCi06MTA2ODcwMDAzQzAxMDgwMEFDMzgwMDc0M0MwMTA4MDBBQzJGMDA3MEVCCi06MTA2ODgwMDA5MTA5MDEwOTNDMEUwODAwOTFDRTNDMzEzQzAzODBGRjg4Ci06MTA2ODkwMDBBM0E5MDAwMzhGQUQwMDAwMzFDNzAwN0YzNDYyRkZGRjYyCi06MTA2OEEwMDAwMUE4MjAyNUFGQTQwMDAwOTEwNjAxMEFBM0EwMDAwMkMwCi06MTA2OEIwMDAwMDA3Q0UwMEEzQTYwMDAxOEZBNTAwMDAyNDBFMzAwMDIzCi06MTA2OEMwMDAzQzA5MTAwMDAwQTJDMDI0MDMxOTc4MjVBRDBGMDE0QzJCCi06MTA2OEQwMDAyN0JEMDAwOEFEMEUwMTU0QTUwMDAxNThBRDBDMDE0OEJDCi06MTA2OEUwMDBBNTBBMDE0NDI0MEFGRjgwQTUwQjAxNDZBMTBBMDE1MjEyCi06MTA2OEYwMDAwM0UwMDAwOEFEMDkwMTc4OEM4QzBFMTg5NDg3MEUxMjA1Ci06MTA2OTAwMDA5NDg2MEUxMDMwRUJGRkZGMEEwMDBFM0UzMENBRkZGRkU4Ci06MTA2OTEwMDAyN0JERkZFOEFGQjAwMDEwM0MxMDgwMDBBRkJGMDAxNEVGCi06MTA2OTIwMDAzNjE4MEEwMDk3MEYwMDMyMEUwMDBBRDUzMUU0M0ZGRkY3Ci06MTA2OTMwMDA4RTBFMDEwMDI0MERGRjgwM0MwNDIwMDAwMUMyNTgyMTZFCi06MTA2OTQwMDAwMTZENjAyNDAwMEM0OTQwMzE2QTAwN0YwMTJBNDAyNTE2Ci06MTA2OTUwMDAwMTA0MzgyNTNDMDQ4MDA4QUUwNzA4MzAzNDg2MDA4MEU2Ci06MTA2OTYwMDA5MEM1MDA2ODI0MDMwMDAyMzBBMjAwRkYxMDQzMDAwNDE5Ci06MTA2OTcwMDA4RjlGMDAwQzhGOTkwMDEwQUM5RjAwNjhBQzk5MDA2NDQ5Ci06MTA2OTgwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODZGCi06MTA2OTkwMDAzQzBBMDgwMDI1NEEzN0ZDM0MwOTA4MDAyNTI5MzhENDYwCi06MTA2OUEwMDAzQzA4MDgwMDI1MDgyQzc0M0MwNzA4MDAyNEU3MzlFNDVCCi06MTA2OUIwMDAzQzA2MDgwMDI0QzYzNjM4M0MwNTA4MDAyNEE1MzM5MDYwCi06MTA2OUMwMDAzQzA0MDgwMDI0ODQyRkEwM0MwMzA4MDAyNDYzMzZFQzE4Ci06MTA2OUQwMDAzQzAyMDgwMDI0NDIzNDg4M0MwMTA4MDBBQzJBM0RGQ0ZCCi06MTA2OUUwMDAzQzAxMDgwMEFDMjkzREY4M0MwMTA4MDBBQzI4M0RGNDBFCi06MTA2OUYwMDAzQzAxMDgwMEFDMjczRTAwM0MwMTA4MDBBQzI2M0UxMERDCi06MTA2QTAwMDAzQzAxMDgwMEFDMjUzRTA4M0MwMTA4MDBBQzI0M0UwNEQzCi06MTA2QTEwMDAzQzAxMDgwMEFDMjMzRTE0M0MwMTA4MDBBQzIyM0UwQ0IzCi06MDg2QTIwMDAwM0UwMDAwODAwMDAwMDAwODMKLTowODZBMjgwMDgwMDAwOTQwODAwMDA5MDAxNAotOjEwNkEzMDAwODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwODAwRTAwMDBBRgotOjEwNkE0MDAwODAwODAwODA4MDA4MDAwMDgwMDAwQTgwODAwMDBBMDAyMgotOjA4NkE1MDAwODAwMDA5ODA4MDAwMDkwMEFDCi06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlMjIwNAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3LmloZXgKQEAgLTAsMCArMSw2MDUxIEBACis6MTAwMDAwMDAwODAwMDExMDA4MDAwMDAwMDAwMDUxQzQwMDAwMDBDOEYyCis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNTFDNEMzCis6MTAwMDIwMDAwMDAwMDAzODAwMDA1MjhDMDgwMDAwODgwODAwMDAwMDIyCis6MTAwMDMwMDAwMDAwNTFCNDAwMDA1MkM0MDgwMDUzQTAwMDAwMDA4NDI2Cis6MTAwMDQwMDAwMDAwQTQ3ODA4MDA1MUI0MDAwMDAxQzAwMDAwQTRGQzI2Cis6MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDgwRTQwMDAwQTZCQ0MxCis6MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwODBFNDI0Cis6MTAwMDcwMDAwMDAwMDEyNDAwMDEyN0EwMDgwMDA0ODgwODAwMDQwMEYzCis6MTAwMDgwMDAwMDAwMTdFQzAwMDEyOEM0MDAwMDAwMDAwMDAwMDAwMDgwCis6MTAwMDkwMDAwMDAwMDAwMDA4MDAxQkVDMDAwMDAwMDQwMDAxNDBCMDVDCis6MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDM4MTQwMDAxNDBCNDU3Cis6MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMzgxNEVDCis6MDgwMEMwMDAwMDAwMDAzMDAwMDE3OEM4QzcKKzowODAwQzgwMDBBMDAwMDQ0MDAwMDAwMDBFMgorOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM1MkUzMDJFMzBFMworOjEwMDBFMDAwNkEzMzAwMDAwNTAwMDAwMjAwMDAwMDAwMDAwMDAwMDM2OQorOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNworOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQorOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNworOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgorOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwQworOjEwMDFFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBBRgorOjEwMDFGMDAwMjQ0MjUyMjAzQzAzMDgwMDI0NjM1MzU0QUM0MDAwMDBDNgorOjEwMDIwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAwNQorOjEwMDIxMDAwMzdCRDlGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAxMTAwMAorOjEwMDIyMDAwM0MxQzA4MDAyNzlDNTIyMDBFMDAwMjVGMDAwMDAwMDBDQQorOjEwMDIzMDAwMDAwMDAwMEQyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRGNAorOjEwMDI0MDAwQUZCMDAwMTAzQzA0ODAwMDk0ODIwMTA4MzA0MzcwMDA3RAorOjEwMDI1MDAwMjQwMjIwMDAxMDYyMDAwQjI4NjIyMDAxMTQ0MDAwMzZBNgorOjEwMDI2MDAwMDAwMDEwMjEyNDAyNDAwMDEwNjIwMDJDMDAwMDAwMDA1OQorOjEwMDI3MDAwMjQwMjYwMDAxMDYyMDAyRDAwMDAxMDIxMEEwMDAwOUQ4MQorOjEwMDI4MDAwOEZCRjAwMTgzNDkxMDEwMDkyMjQwMDA5OEUzMDAwMThBRAorOjEwMDI5MDAwMTA4MDAwMjAyNDAzMDAwMTI0MDIwMDA5MTQ4MjAwMDZCQgorOjEwMDJBMDAwOEY4MjAwMUMzQzAyODAwODk0NDIwMDFBMDAwMjE0MDA1NQorOjEwMDJCMDAwMDIwMjgwMjU4RjgyMDAxQzhDNDIwMDBDMTA0MDAwMTUyOQorOjEwMDJDMDAwMDAwMDE4MjEwRTAwMEQ0NTAwMDAwMDAwOEY4MzAwMUM2NworOjEwMDJEMDAwOTYyNDAwMDg4RjgyMDAxODk0NjMwMDFFOTYyNTAwMEM1NworOjEwMDJFMDAwMDAwNDI0MDAwMDgzMjAyNUFDNTAwMDAwQUM0NTAwMDQyRAorOjEwMDJGMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQxNgorOjEwMDMwMDAwQUM0MDAwMThBQzQ0MDAxQzBFMDAwRDc5MjQwNDAwMDEyMAorOjEwMDMxMDAwMDAwMDE4MjEwQTAwMDA5QzAwNjAxMDIxMEUwMDA0MkUyRAorOjEwMDMyMDAwMDAwMDAwMDAwQTAwMDA5QzAwMDAxMDIxMEUwMDBDNjU3NworOjEwMDMzMDAwMDAwMDAwMDAwMDAwMTAyMThGQkYwMDE4OEZCMTAwMTREMgorOjEwMDM0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4MjAwMUM0MgorOjEwMDM1MDAwMjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQ3MQorOjEwMDM2MDAwOEM0MjAwMEMzQzEwODAwMDhFMTEwMTAwMTA0MDAwMzRDMworOjEwMDM3MDAwOEZCRjAwMTgwRTAwMEQ0NTAwMDAwMDAwOEY4NTAwMTg4QgorOjEwMDM4MDAwMjQwNDdGRkYwMDkxMjAyQkFDQjEwMDAwOEUwMzAxMDRGOAorOjEwMDM5MDAwOTYwMjAxMDgwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjU4RQorOjEwMDNBMDAwQUNBMzAwMDQ5MjAyMDEwQTk2MDMwMTE0MzA0MjAwRkYzQworOjEwMDNCMDAwMzA2M0ZGRkYwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDhDOAorOjEwMDNDMDAwOTYwMzAxMEM5NjAyMDEwRTAwMDMxQzAwMzA0MkZGRkY1MQorOjEwMDNEMDAwMDA2MjE4MjVBQ0EzMDAwQzk2MDMwMTEwOTYwMjAxMTJDRQorOjEwMDNFMDAwMDAwMzFDMDAzMDQyRkZGRjAwNjIxODI1QUNBMzAwMTA4MAorOjEwMDNGMDAwOEUwMjAxMThBQ0EyMDAxNDhFMDIwMTFDQUNBMjAwMThERgorOjEwMDQwMDAwMTQ4MDAwMDg4RjgyMDAxQzk3ODIwMDAwM0MwNDIwMDVBNQorOjEwMDQxMDAwMDA0NDE4MjUyNDQyMDAwMUFDQTMwMDFDMEEwMDAwREJBNAorOjEwMDQyMDAwQTc4MjAwMDAzQzAzNDAxODk0NDIwMDFFMDA0MzEwMjVBMAorOjEwMDQzMDAwQUNBMjAwMUMwRTAwMEQ3OTI0MDQwMDAxOEZCRjAwMTgyRgorOjEwMDQ0MDAwOEZCMTAwMTQ4RkIwMDAxMDAwMDAxMDIxMDNFMDAwMDhFRAorOjEwMDQ1MDAwMjdCRDAwMjAzQzA2ODAwMDhDQzIwMkI4MjQwMzAwMDFBNgorOjEwMDQ2MDAwMDQ0MTAwMDgwMDgwMjgyMTNDMDIwODAwOEM0MjAwNjAwMgorOjEwMDQ3MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDYwMDNFMDAwMDhCNworOjEwMDQ4MDAwMDA2MDEwMjE4QzgzMDAyMDk0ODIwMDE2QUNDMzAyODA4RgorOjEwMDQ5MDAwMjQ0MkZGRkNBNEMyMDI4NDNDMDIwODAwOEM0MjAwNUM5RgorOjEwMDRBMDAwOEM4NDAwMDQ5NEEzMDAwRTI0NDIwMDAxM0MwMTA4MDA0NworOjEwMDRCMDAwQUMyMjAwNUMzQzAyMTAwMEE0QzMwMjg2QUNDNDAyODhEQgorOjEwMDRDMDAwMDAwMDE4MjFBQ0MyMDJCODAzRTAwMDA4MDA2MDEwMjE0RgorOjEwMDREMDAwMjdCREZGRTBBRkIwMDAxMDNDMTA4MDAwQUZCMjAwMThBNQorOjEwMDRFMDAwQUZCRjAwMUNBRkIxMDAxNDM2MTIwMTAwOTI0MzAwMEJFNQorOjEwMDRGMDAwMjQwMjAwMUE5NjUxMDAwODE0NjIwMDVBMDAwMDI4MjFCNAorOjEwMDUwMDAwMzIyMjAwMDExMDQwMDAxODhGODIwMDFDOEU0MjAwMDAzMQorOjEwMDUxMDAwMDAwMjIzNDAzQzAyMDAzRjM0NDJGRkZGMDA0NDEwMkIwNgorOjEwMDUyMDAwMTA0MDAwMDQzQzAzMDA0MDk2NDIwMDE0MEEwMDAxMjRERAorOjEwMDUzMDAwMDA4MzIwMjE4RTAzMDEwMDI0MDIwMTAwNTQ2MjAwMDY4MgorOjEwMDU0MDAwOTY0MjAwMTQzQzAyODAwODkwNDIwMDA0MzA0MjAwMEZBMgorOjEwMDU1MDAwMDAwMjI1MDA5NjQyMDAxNDAwODIxMDI1QUUwMjAwODBBMQorOjEwMDU2MDAwMEEwMDAxNTcwMDAwMDAwMDhDNDIwMDBDMTA0MDAwMjhENworOjEwMDU3MDAwMDAwMDAwMDAwRTAwMEQ0NTAwMDAwMDAwOTYwMjAxMDg3QQorOjEwMDU4MDAwOTYwMzAxMEM4Rjg1MDAxODMwNDIwMDNFMzA2M0ZGRkY1OAorOjEwMDU5MDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEUwMjAxMDBFRQorOjEwMDVBMDAwQUNBMjAwMDQ5NjAzMDExNjk2MDQwMTBFOEY4MjAwMUM3MworOjEwMDVCMDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDg3MgorOjEwMDVDMDAwOTYwMzAxMTA5NjA0MDExMjk0NDYwMDFFMDAwMzFDMDBCRAorOjEwMDVEMDAwMzA4NEZGRkYwMDY0MTgyNUFDQTMwMDBDM0MwMjIwMDAwRgorOjEwMDVFMDAwMDBDMjMwMjU5NjAyMDExNDI0MDQwMDAxMzA0MkZGRkZBRQorOjEwMDVGMDAwQUNBMjAwMTA4RTAyMDExOEFDQTIwMDE0OTIwMjAxMEJGMgorOjEwMDYwMDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwRDc5QUNBNjAwMUMxMQorOjEwMDYxMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBEQQorOjEwMDYyMDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDJFQworOjEwMDYzMDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQ4MAorOjEwMDY0MDAwMTA4MDAwMDgwMDAyMjgyQjAyNDAyMDIxOEZCRjAwMUNEMAorOjEwMDY1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAwRTNCMQorOjEwMDY2MDAwMjdCRDAwMjA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ2RgorOjEwMDY3MDAwOEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMjA2QgorOjEwMDY4MDAwMjdCREZGRTBBRkIwMDAxMDNDMTA4MDAwQUZCMjAwMThGMworOjEwMDY5MDAwQUZCRjAwMUNBRkIxMDAxNDM2MTIwMTAwOTI0MzAwMEIzMworOjEwMDZBMDAwMjQwMjAwMDMxNDYyMDA2QTk2NTEwMDA4MzIyMjAwMDFGRAorOjEwMDZCMDAwMTA0MDAwMTc4RjgyMDAxQzhFNDMwMDAwM0MwMjAwM0Y1OAorOjEwMDZDMDAwMzQ0MkZGRkYwMDAzMjM0MDAwNDQxMDJCNTA0MDAwMDUzQworOjEwMDZEMDAwMjQwMjAxMDA5NjQyMDAxNDNDMDMwMDQwMEEwMDAxOEVFRgorOjEwMDZFMDAwMDA4MzIwMjE1NDYyMDAwNjk2NDIwMDE0M0MwMjgwMDhEOAorOjEwMDZGMDAwOTA0MjAwMDQzMDQyMDAwRjAwMDIyNTAwOTY0MjAwMTQ5MAorOjEwMDcwMDAwMDA4MjEwMjVBRTAyMDA4MDBBMDAwMUJFMDAwMDAwMDAzOQorOjEwMDcxMDAwOEM0MjAwMEMxMDQwMDAyNTAwMDAwMDAwMEUwMDBENDUyQQorOjEwMDcyMDAwMDAwMDAwMDA5NjAyMDEwODk2MDMwMTBDOEY4NTAwMTg1NgorOjEwMDczMDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVFQQorOjEwMDc0MDAwQUNBMjAwMDA4RTAyMDEwMEFDQTIwMDA0OTYwMzAxMTZDOAorOjEwMDc1MDAwOTYwNDAxMEU4RjgyMDAxQzAwMDMxQzAwMzA4NEZGRkZGMgorOjEwMDc2MDAwMDA2NDE4MjVBQ0EzMDAwODk2MDMwMTEwOTYwNDAxMTIzQQorOjEwMDc3MDAwOTQ0NjAwMUUwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjUwRgorOjEwMDc4MDAwQUNBMzAwMEMzQzAyMjAwMDAwQzIzMDI1OTYwMjAxMTRFQworOjEwMDc5MDAwMjQwNDAwMDEzMDQyRkZGRkFDQTIwMDEwQUNBMDAwMTQwMgorOjEwMDdBMDAwQUNBMDAwMTgwRTAwMEQ3OUFDQTYwMDFDM0MwMjA4MDA5RAorOjEwMDdCMDAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDA3MQorOjEwMDdDMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDExMQorOjEwMDdEMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDA4MzIyMjAwMDJGNAorOjEwMDdFMDAwMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ2RgorOjEwMDdGMDAwOEZCMDAwMTAwQTAwMDBFMzI3QkQwMDIwMTA0MDAwMTU1NAorOjEwMDgwMDAwOEZCRjAwMUMzQzA0ODAwMDhDODMwMTA0M0MwMjYwMjBFQworOjEwMDgxMDAwQUM0MzAwMTQ4QzQyMDAwNDI0MDMwMUZFMzA0MjAzRkY2OQorOjEwMDgyMDAwMTQ0MzAwMEM4RkJGMDAxQzhDODIwMTAwMDAwMjE5QzIwRgorOjEwMDgzMDAwMjQ2MkZGRkMyQzQyMDAwODEwNDAwMDAzMjQwNDAwMDI0NAorOjEwMDg0MDAwMjQ2MkZGRkQwMDQ0MjAwNDNDMDI2MDAwQUM0NDY5MTRCMworOjEwMDg1MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzMgorOjEwMDg2MDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDIwM0MwNDgwMDBBOAorOjEwMDg3MDAwOEM4MzAxMDAyNDAyMDEwMDUwNjIwMDAzM0MwMjgwMDhDNgorOjEwMDg4MDAwMDAwMDAwMEQzQzAyODAwODkwNDMwMDA0MDAwMDEwMjE4RAorOjEwMDg5MDAwMzA2MzAwMEYwMDAzMUQwMDAzRTAwMDA4QUM4MzAwODBGQworOjEwMDhBMDAwMkM4NDA3ODExMDgwMDAwQTAwMDAyODIxM0MwMjgwMDA2RgorOjEwMDhCMDAwOTQ0MjAxMDgyNDAzMjAwMDMwNDI3MDAwMTQ0MzAwMDVENAorOjEwMDhDMDAwMjc4M0ZGQjAzQzAyODAwODkwNDIwMDA1MzA0NTAwRkZCRQorOjEwMDhEMDAwMjc4M0ZGQjAwMDA1MjA4MDAwODMyMDIxMDAwNTEwQzA4MQorOjEwMDhFMDAwMDA0NTEwMjM4Qzg0MDAwMDNDMDMwODAwMjQ2MzUyRTQ3QworOjEwMDhGMDAwMDAwMjEwQzAwMDQzMTAyMTNDMDM4MDAwQUM2NDAwOTA1MworOjEwMDkwMDAwMDNFMDAwMDhBRjgyMDAxQzAzRTAwMDA4MDAwMDEwMjE5MworOjEwMDkxMDAwMDNFMDAwMDgwMDAwMTAyMTI0MDIwMTAwMTQ4MjAwMDhGNgorOjEwMDkyMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEZDMjQ0MjAwMDE1MAorOjEwMDkzMDAwM0MwMTA4MDBBQzIyMDBGQzBBMDAwMjI0MzBBMjAwMjA4NgorOjEwMDk0MDAwM0MwMjA4MDA4QzQyMDA4NDI0NDIwMDAxM0MwMTA4MDA2MworOjEwMDk1MDAwQUMyMjAwODQzMEEyMDAyMDEwNDAwMDA4MzBBMzAwMTAxOAorOjEwMDk2MDAwM0MwMjA4MDA4QzQyMDEwODI0NDIwMDAxM0MwMTA4MDBCRQorOjEwMDk3MDAwQUMyMjAxMDgwM0UwMDAwODAwMDAwMDAwMTA2MDAwMDgzRAorOjEwMDk4MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMTA0MjQ0MjAwMDFFNworOjEwMDk5MDAwM0MwMTA4MDBBQzIyMDEwNDAzRTAwMDA4MDAwMDAwMDA1NAorOjEwMDlBMDAwM0MwMjA4MDA4QzQyMDEwMDI0NDIwMDAxM0MwMTA4MDA4NgorOjEwMDlCMDAwQUMyMjAxMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThCMgorOjEwMDlDMDAwQUZCMDAwMTAzQzEwODAwMEFGQkYwMDE0MzYwNDAxMDAyRgorOjEwMDlEMDAwOTQ4MzAwMDgzMDYyMDAwNDEwNDAwMDA1MzA2NjAwMDI3NQorOjEwMDlFMDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwMEUzMjdCRDAwMTg2RAorOjEwMDlGMDAwMTBDMDAwMDYwMDYwMjgyMThFMDQwMTAwMEUwMDAyMTRDMQorOjEwMEEwMDAwMDAwMDAwMDAwQTAwMDI1QjI0MDIwMDAxOEY4MjAwMDgzRgorOjEwMEExMDAwOEUwMzAxMDQxMDQzMDAwNzAwMDAxMDIxOEUwNDAxMDAyMgorOjEwMEEyMDAwMEUwMDAyMTQwMDAwMDAwMDhFMDIwMTA0QUY4MjAwMDhENAorOjEwMEEzMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhFOQorOjEwMEE0MDAwMjdCRDAwMTgyN0JERkZEODNDMDM2MDEwQUZCMzAwMUNDMgorOjEwMEE1MDAwQUZCRjAwMjBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBQworOjEwMEE2MDAwOEM2NDUwMDAyNDAyRkY3RjNDMTMwODAwMjY3MzUyNDgxOAorOjEwMEE3MDAwMDA4MjIwMjQzNDg0MzgwQ0FDNjQ1MDAwM0MwMjgwMDA5NgorOjEwMEE4MDAwMjQwMzAwMzdBQzQzMDAwODNDMDYwODAwMjRDNjA4NDA5NQorOjEwMEE5MDAwMDI2MDEwMjEyNDA0MDAxQzI0ODRGRkZGQUM0NjAwMDBFNworOjEwMEFBMDAwMDQ4MUZGRkQyNDQyMDAwNDNDMDIwODAwMjQ0MjAxNkM0MgorOjEwMEFCMDAwM0MwMTA4MDBBQzIyNTI1MDNDMDIwODAwMjQ0MjA1QjgxOAorOjEwMEFDMDAwM0MwMTA4MDBBQzIyNTI1NDNDMDIwODAwMjQ0MjAyODQzQgorOjEwMEFEMDAwM0MwMTA4MDBBQzIyNTI5MDNDMDIwODAwMjQ0MjA0MDg2OQorOjEwMEFFMDAwM0MwMzA4MDAyNDYzMDg0ODNDMDQwODAwMjQ4NDA4RjRGQworOjEwMEFGMDAwM0MwNTA4MDAyNEE1MkM0QzNDMDEwODAwQUMyMjUyQjA1NworOjEwMEIwMDAwM0MwMjA4MDAyNDQyMDdBNDNDMDEwODAwQUMyNjUyOTg4RAorOjEwMEIxMDAwM0MwMTA4MDBBQzI1NTJBNDNDMDEwODAwQUMyMzUyQUNCNworOjEwMEIyMDAwM0MwMTA4MDBBQzI0NTJCNDNDMDEwODAwQUMyMjUyQjg4RAorOjEwMEIzMDAwM0MwMTA4MDBBQzIzNTI0QzNDMDEwODAwQUMyMDUyNTg0OAorOjEwMEI0MDAwM0MwMTA4MDBBQzIwNTI1QzNDMDEwODAwQUMyMDUyNjAyMworOjEwMEI1MDAwM0MwMTA4MDBBQzIwNTI2NDNDMDEwODAwQUMyMDUyNjgwMworOjEwMEI2MDAwM0MwMTA4MDBBQzIwNTI2QzNDMDEwODAwQUMyMDUyNzBFMworOjEwMEI3MDAwM0MwMTA4MDBBQzI0NTI3NDNDMDEwODAwQUMyMDUyNzhCRgorOjEwMEI4MDAwM0MwMTA4MDBBQzIwNTI3QzNDMDEwODAwQUMyMDUyODBBMworOjEwMEI5MDAwM0MwMTA4MDBBQzIwNTI4NDNDMDEwODAwQUMyMDUyODg4MworOjEwMEJBMDAwM0MwMTA4MDBBQzI2NTI4QzNDMDEwODAwQUMyNjUyOTQ1MworOjEwMEJCMDAwM0MwMTA4MDBBQzIwNTI5QzNDMDEwODAwQUMyNTUyQTAyRQorOjEwMEJDMDAwM0MwMTA4MDBBQzIzNTJBODBFMDAwNTVBMDAwMDAwMDBBQQorOjEwMEJEMDAwOEY4MzAwMDQzQzAyMDgwMDhDNDIwMDIwMTA2MjAwMUYzQQorOjEwMEJFMDAwMDAwMDg4MjEyNzkyRkZCMDNDMTAwODAwMjYxMDUyRTQzNAorOjEwMEJGMDAwM0MwMjA4MDA4QzQyMDAyMDI0MDUwMDAxMDIyNTE4MDQ1NAorOjEwMEMwMDAwMDA0MzIwMjQ4RjgyMDAwNDAwNDMxMDI0NTA0NDAwMEMzMQorOjEwMEMxMDAwMjYzMTAwMDExMDgwMDAwOEFGOTAwMDFDOEU0MzAwMDBCOAorOjEwMEMyMDAwM0MwMjgwMDBBQzQzMDA5MDBFMDAwRDBDQUUwNTAwMENBMQorOjEwMEMzMDAwMEEwMDAyREUyNjMxMDAwMUFFMDAwMDBDMjYzMTAwMDE2MAorOjEwMEM0MDAwMkUyMjAwMDIyNjEwMDAzODE0NDBGRkU5MjY1MjAwMDQyQworOjEwMEM1MDAwM0MwMjA4MDA4QzQyMDAyMEFGODIwMDA0M0MxMDgwMDA1RgorOjEwMEM2MDAwOEUxMTAwMDAzMjIyMDAwNzEwNDBGRkRBOEY4MzAwMDQ0QgorOjEwMEM3MDAwMzIyMjAwMDExMDQwMDAyMTMyMjIwMDAyOEUwMjAxMDBDNworOjEwMEM4MDAwQUUwMjAwMjA4RTAyMDEwNEFFMDIwMEE4MEUwMDAxRjZBMgorOjEwMEM5MDAwOEUwNDAxMDA5MjAyMDEwQjMwNDMwMEZGMkM2MjAwMUQwNAorOjEwMENBMDAwNTQ0MDAwMDQwMDAzMTA4MDBFMDAwMjEwMEEwMDAyRkZFRQorOjEwMENCMDAwMDAwMDAwMDAwMDUzMTAyMThDNDIwMDAwMDA0MEY4MDlBMQorOjEwMENDMDAwMDAwMDAwMDAxMDQwMDAwNDNDMDI4MDAwOEM0MzAxMDQzRQorOjEwMENEMDAwM0MwMjYwMjBBQzQzMDAxNDNDMDIwODAwOEM0MjAwMzQwQgorOjEwMENFMDAwM0MwNDQwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxMzgxNQorOjEwMENGMDAwM0MwMTA4MDBBQzIyMDAzNDMyMjIwMDAyMTA0MDAwMTBGNworOjEwMEQwMDAwMzIyMjAwMDQzQzEwODAwMDhFMDIwMTQwQUUwMjAwMjAxRQorOjEwMEQxMDAwMEUwMDAxRjY4RTA0MDE0MDBFMDAwMzk3MDAwMDAwMDA1MworOjEwMEQyMDAwM0MwMjQwMDBBRTAyMDE3ODNDMDIwODAwOEM0MjAwMzhEMAorOjEwMEQzMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM4MzIyMjAwMDRBOQorOjEwMEQ0MDAwMTA0MEZGQTQ4RjgzMDAwNDNDMTA4MDAwOEUwMjAxODBCRAorOjEwMEQ1MDAwQUUwMjAwMjAwRTAwMDFGNjhFMDQwMTgwOEUwMzAxODA5OQorOjEwMEQ2MDAwMjQwMjBGMDAxNDYyMDAwNzNDMDI4MDA4OEUwMjAxODhGMgorOjEwMEQ3MDAwM0MwMzAwRTAzMDQyRkZGRjAwNDMxMDI1MEEwMDAzM0IyNAorOjEwMEQ4MDAwQUUwMjAwODAzNDQyMDA4MDkwNDIwMDAwMjQwMzAwNTBGNAorOjEwMEQ5MDAwMzA0MjAwRkYxNDQzMDAwNzAwMDAwMDAwMEUwMDAzNzRGRgorOjEwMERBMDAwMDAwMDAwMDAxNDQwMDAwMzAwMDAwMDAwMEUwMDA5NUQ3OAorOjEwMERCMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMDNDM0MwNDQwMDA2MworOjEwMERDMDAwM0MwMzgwMDAyNDQyMDAwMUFDNjQwMUI4M0MwMTA4MDBFRgorOjEwMEREMDAwQUMyMjAwM0MwQTAwMDJDMzhGODMwMDA0M0MwMjkwMDA1NgorOjEwMERFMDAwMzQ0MjAwMDEwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjBGNworOjEwMERGMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDBFNQorOjEwMEUwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDFDMQorOjEwMEUxMDAwMDA4MzIwMjUwM0UwMDAwOEFDNDQwMDIwMjdCREZGRTA0QworOjEwMEUyMDAwQUZCMTAwMTRBRkIwMDAxMDAwODA4ODIxQUZCRjAwMTgzMAorOjEwMEUzMDAwMEUwMDAzNDUzMEIwMDBGRjhGODNGRkE4MDIyMDIwMjE2MQorOjEwMEU0MDAwOTA2MjAwMjUwMjAyODAyNUEwNzAwMDI1OEM3MDAwMTg5OQorOjEwMEU1MDAwM0MwMjgwMDAwRTAwMDM1MDAyMDI4MDI0MTYwMDAwMEFBQgorOjEwMEU2MDAwOEZCRjAwMTgzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUzNQorOjEwMEU3MDAwMjQwMjAwMDJBQzcxMDFDMEEwNjIwMUM0M0MwMjEwMDA1NworOjEwMEU4MDAwQUM2MjAxRjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1MgorOjEwMEU5MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTAxQQorOjEwMEVBMDAwM0MwMzgwMDA5NDYyMDE4NDMwNDIwMjAwMTA0MDAwMDUzRgorOjEwMEVCMDAwMDAwMDIwMjEwRTAwMEZDRDAwMDAwMDAwMEEwMDAzOEE3MAorOjEwMEVDMDAwMjQwNDAwMDE4QzYyMDE4ODA0NDAwMDBBOEZCRjAwMTBENgorOjEwMEVEMDAwOEM2MjAxODgzQzAzRkYwMDAwNDMxMDI0M0MwMzA0MDBBMworOjEwMEVFMDAwMTQ0MzAwMDQyNDA0MDAwMThGODJGRkE4OTA0MjAwMDhFQworOjEwMEVGMDAwOEZCRjAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMThGQworOjEwMEYwMDAwOEY4MkZGQUMyNDAzMDAwMTI0MDUwMDAxQTA0MDAwMUFEOQorOjEwMEYxMDAwOEY4MkZGQThBNDQzMDAxNjNDMDI4MDAwMEEwMDAzNTVGQworOjEwMEYyMDAwOEM0NDAxNDA4Rjg1RkZBODI3QkRGRkUwQUZCRjAwMUNBOAorOjEwMEYzMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOTBBMjAwMDAyMworOjEwMEY0MDAwMzA0NDAwRkYzODgzMDAyMDM4ODIwMDMwMDAwMzE4MkIyMworOjEwMEY1MDAwMDAwMjEwMkIwMDYyMTgyNDEwNjAwMDA1M0MwMjgwMDA4MworOjEwMEY2MDAwMjQwMjAwNTAxNDgyMDA4MThGQkYwMDFDM0MwMjgwMDBDQworOjEwMEY3MDAwOTA0MjAxNDgzMDQyMDBGRjI0NDNGRkZGMkM2MjAwMDVFRAorOjEwMEY4MDAwMTA0MDAwN0E4RkJGMDAxQzAwMDMxMDgwM0MwMzA4MDA1MworOjEwMEY5MDAwMjQ2MzUxREMwMDQzMTAyMThDNDIwMDAwMDA0MDAwMDgxMworOjEwMEZBMDAwMDAwMDAwMDAzQzExODAwMDhFMjQwMTQwMEUwMDAzNDUyQgorOjEwMEZCMDAwOEY5MkZGQTg4RTUwMDAwQzhFMjIwMTQ0MTYwMjAwMDI3MAorOjEwMEZDMDAwMjQwMjAwMDFBRTQyMDAwQzBFMDAwMzUwOEUyNDAxNDBBQQorOjEwMEZEMDAwOEUyMjAxNDQxNDUwMDAwNjhGQkYwMDFDOEZCMjAwMThFRgorOjEwMEZFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjM5MjdCRDAwMjAwOAorOjEwMEZGMDAwOEU0MjAwMEMwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTA5RgorOjEwMTAwMDAwM0MwNDgwMDA4QzgzMDE0NDMwNDJGRkZGMTQ2MjAwMDlERAorOjEwMTAxMDAwMDAwMDAwMDAyNDAyMDAwMUE0QTIwMDEwOEM4MjAxNDAwNAorOjEwMTAyMDAwQUM4MjAyMDAzQzAyMTAwMEFDODIwMjM4MEEwMDA0MjlBMworOjEwMTAzMDAwOEZCRjAwMUM5NEEyMDAxMDBBMDAwNDIyMDAwMDAwMDBEMAorOjEwMTA0MDAwMjQwMjAwMjAxNDgyMDAwRTNDMTE4MDAwOTRBMjAwMTJBMQorOjEwMTA1MDAwM0MwMzgwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDVCMgorOjEwMTA2MDAwMDAwMDAwMDAyNDAyMDAwMUE0QTIwMDEyMEEwMDAzRkNGOAorOjEwMTA3MDAwOEZCRjAwMUM5NEEyMDAxMjBBMDAwNDIyMDAwMDAwMDA4RQorOjEwMTA4MDAwOEUyNDAxNDAwRTAwMDM0NThGOTJGRkE4OTY0MjAwMTI2NQorOjEwMTA5MDAwOEUyMzAxNDQzMDUwRkZGRjE2MDMwMDAyMjQwMjAwMDE5QQorOjEwMTBBMDAwQTY0MjAwMTIwRTAwMDM1MDhFMjQwMTQwOEUyMjAxNDRGRAorOjEwMTBCMDAwMTYwMjAwMDY4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRGQgorOjEwMTBDMDAwOEZCMDAwMTAwQTAwMDM4RTI3QkQwMDIwOTY0MjAwMTI0OAorOjEwMTBEMDAwMEEwMDA0MjIwMDAwMDAwMDk0QTIwMDE0M0MwMzgwMDBENworOjEwMTBFMDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDA4OEZCRjAwMUM3NAorOjEwMTBGMDAwMjQwMjAwMDE4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDRAorOjEwMTEwMDAwQTRBMjAwMTQwQTAwMTQyNDI3QkQwMDIwOTRBMjAwMTRGNQorOjEwMTExMDAwMEEwMDA0MjIwMDAwMDAwMDk0QTIwMDE2M0MwMzgwMDA5NAorOjEwMTEyMDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDA4MjQwMjAwMDE3NgorOjEwMTEzMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA0OQorOjEwMTE0MDAwQTRBMjAwMTYwQTAwMEIwMDI3QkQwMDIwOTRBMjAwMTZERQorOjEwMTE1MDAwMTQ0MDAwMDY4RkJGMDAxQzNDMDIwODAwOEM0MjAwNzA0NworOjEwMTE2MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDcwOEZCMjAwMTgzQworOjEwMTE3MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBERAorOjEwMTE4MDAwMjdCREZGRDhBRkIyMDAxODhGOTJGRkE4QUZCMTAwMTRFRgorOjEwMTE5MDAwQUZCRjAwMjBBRkIzMDAxQ0FGQjAwMDEwM0MwMjgwMDAxNgorOjEwMTFBMDAwMzQ1MTAxMDA4QzUwMDEwMDkyNDIwMDAwOTIyMzAwMDk0QQorOjEwMTFCMDAwMzA0NDAwRkYyNDAyMDAxRjEwNjIwMEFCMjg2MjAwMjBCMAorOjEwMTFDMDAwMTA0MDAwMTkyNDAyMDAzODI4NjIwMDBBMTA0MDAwMEQ2NworOjEwMTFEMDAwMjQwMjAwMEIyODYyMDAwODEwNDAwMDJFOEY4MjAwMUNBMQorOjEwMTFFMDAwMDQ2MDAxMDMyODYyMDAwMjE0NDAwMDJBOEY4MjAwMUM2MAorOjEwMTFGMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDIwMEEwMDA1NEM2MgorOjEwMTIwMDAwOEZCMzAwMUMxMDYyMDA2MDI4NjIwMDBCMTQ0MDAwRjlDQworOjEwMTIxMDAwOEZCRjAwMjAyNDAyMDAwRTEwNjIwMDc4OEY4MjAwMUMxNQorOjEwMTIyMDAwMEEwMDA1NEM4RkIzMDAxQzEwNjIwMEQxMjg2MjAwMzlGRgorOjEwMTIzMDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwRTRGQworOjEwMTI0MDAwMjg2MjAwMzcxMDQwMDBDMjI0MDIwMDM1MTA2MjAwRDgyNgorOjEwMTI1MDAwOEZCRjAwMjAwQTAwMDU0QzhGQjMwMDFDMTA2MjAwMkRDOAorOjEwMTI2MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlEMAorOjEwMTI3MDAwMTA2MjAwQzg4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMwRAorOjEwMTI4MDAwMTA2MjAwQTI4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMyMworOjEwMTI5MDAwOEY4MjAwMUM4QzQyMDAwQzEwNDAwMEQ2OEZCRjAwMjBCMworOjEwMTJBMDAwMEUwMDBENDUwMDAwMDAwMDNDMDM4MDAwMzQ2MzAxMDA4NworOjEwMTJCMDAwOEM2MjAwMDA4Rjg1MDAxODk0NjcwMDA4OTQ2NjAwMEMwQgorOjEwMTJDMDAwQUNBMjAwMDA4QzY0MDAwNDhGODIwMDFDMDAwNjM0MDA3NQorOjEwMTJEMDAwQUNBNDAwMDQ5NDQ4MDAxRThDNjIwMDE4MDAwNzNDMDA3NworOjEwMTJFMDAwMDBFODM4MjVBQ0EyMDAwODhDNjIwMDFDMjQwNDAwMDEzMAorOjEwMTJGMDAwQUNBMjAwMEM5MDYyMDAwQTAwQzIzMDI1QUNBNjAwMTAxRgorOjEwMTMwMDAwQUNBMDAwMTRBQ0EwMDAxOEFDQTcwMDFDMEEwMDA1MEI5MAorOjEwMTMxMDAwOEZCRjAwMjA4RjgyMDAxQzhDNDIwMDBDMTA0MDAwQjU1MworOjEwMTMyMDAwOEZCRjAwMjAwRTAwMEQ0NTAwMDAwMDAwOEY4MjAwMUNDMgorOjEwMTMzMDAwOTYyNDAwMDg5NjI1MDAwQzk0NDMwMDFFMDAwNDIyMDIwNworOjEwMTM0MDAwOTYyNjAwMEU4RjgyMDAxODAwMDQyNjAwMDA4MzIwMjVCOAorOjEwMTM1MDAwMDAwNTJDMDAzQzAzMDA4MDAwQTYyODI1MDA4MzIwMjVFMgorOjEwMTM2MDAwQUM0MDAwMDBBQzQwMDAwNEFDNDAwMDA4QUM0MDAwMENCNQorOjEwMTM3MDAwQUM0NTAwMTBBQzQwMDAxNEFDNDAwMDE4QUM0NDAwMUM1QworOjEwMTM4MDAwMEEwMDA1MEEyNDA0MDAwMTk2MjIwMDBDMTQ0MDAwMThFQgorOjEwMTM5MDAwMDAwMDAwMDA5MjQyMDAwNTMwNDIwMDEwMTQ0MDAwMTQ4QQorOjEwMTNBMDAwMDAwMDAwMDAwRTAwMDM0NTAyMDAyMDIxOTI0MjAwMDVDQgorOjEwMTNCMDAwMDIwMDIwMjEzNDQyMDAxMDBFMDAwMzUwQTI0MjAwMDUxQQorOjEwMTNDMDAwOTI0MjAwMDAyNDAzMDAyMDMwNDIwMEZGMTA0MzAwODhCNgorOjEwMTNEMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThBNQorOjEwMTNFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxMDM2MjdCRDAwMjhGRQorOjEwMTNGMDAwMDAwMDAwMEQwQTAwMDU0QjhGQkYwMDIwOEM0MjAwMEMzRQorOjEwMTQwMDAwMTA0MDAwN0M4RkJGMDAyMDBFMDAwRDQ1MDAwMDAwMDA0MgorOjEwMTQxMDAwOEUyMjAwMDQ4Rjg0MDAxODk2MjMwMDBDQUM4MjAwMDBGQQorOjEwMTQyMDAwM0MwMjgwMDg5NDQ1MDAyQzhGODIwMDFDMDAwMzFDMDBBNQorOjEwMTQzMDAwMzBBNUZGRkY5NDQ2MDAxRTNDMDI0MDBFMDA2NTE4MjVCMworOjEwMTQ0MDAwMDBDMjMwMjVBQzgzMDAwNEFDODAwMDA4QUM4MDAwMENFNgorOjEwMTQ1MDAwQUM4MDAwMTBBQzgwMDAxNEFDODAwMDE4QUM4NjAwMUM3RQorOjEwMTQ2MDAwMEEwMDA1MEEyNDA0MDAwMTBFMDAwMzQ1MDIwMDIwMjFBMQorOjEwMTQ3MDAwOEY5M0ZGQUMwMjAwMjAyMTBFMDAwMzUwQTY2MDAwMENFOQorOjEwMTQ4MDAwMDIwMDIwMjEwRTAwMDM1NTI0MDUwMDAxOEY4MjAwMUM1QworOjEwMTQ5MDAwOEM0MjAwMEMxMDQwMDA1NzhGQkYwMDIwMEUwMDBENDVGRAorOjEwMTRBMDAwMDAwMDAwMDA5NjIyMDAwQzhGODMwMDE4MDAwMjE0MDAzOAorOjEwMTRCMDAwQUM3MDAwMDBBQzYyMDAwNEFDNjAwMDA4OEU0NDAwMzhFMAorOjEwMTRDMDAwOEY4MjAwMUNBQzY0MDAwQzhFNDYwMDNDOTQ0NTAwMUVDQworOjEwMTREMDAwM0MwMjQwMUZBQzY2MDAxMDAwQTIyODI1OEU2MjAwMDQ2QQorOjEwMTRFMDAwMjQwNDAwMDFBQzYyMDAxNEFDNjAwMDE4QUM2NTAwMUM2MAorOjEwMTRGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3MworOjEwMTUwMDAwOEZCMDAwMTAwQTAwMEQ3OTI3QkQwMDI4MjQwMjAwMjBBQQorOjEwMTUxMDAwMTA4MjAwMzk4RkIzMDAxQzBFMDAwRjFGMDAwMDAwMDA2NgorOjEwMTUyMDAwMTA0MDAwMzQ4RkJGMDAyMDNDMDM4MDAwOEM2MjAxRjgyMworOjEwMTUzMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNzAwMUMwQTA2MjAxQzQ5RQorOjEwMTU0MDAwM0MwMjEwMDBBQzYyMDFGODBBMDAwNTRCOEZCRjAwMjA3RQorOjEwMTU1MDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTgyMworOjEwMTU2MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRTY4MjdCRDAwMjg0QworOjEwMTU3MDAwOTYyNTAwMEMwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM5NQorOjEwMTU4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBFOERCQQorOjEwMTU5MDAwMjdCRDAwMjgwMjAwMjAyMThGQjMwMDFDOEZCMjAwMTg0NQorOjEwMTVBMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUI4MjdCRDAwMjhCQworOjEwMTVCMDAwOTIyNTAwMEQwMjAwMjAyMThGQjMwMDFDOEZCMjAwMTg2RAorOjEwMTVDMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjA5MjdCRDAwMjg0QQorOjEwMTVEMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThBMworOjEwMTVFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUUwMjdCRDAwMjg1NAorOjEwMTVGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3MgorOjEwMTYwMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4M0MwMzgwMDBENQorOjEwMTYxMDAwOEM2MjAyNzgwNDQwRkZGRTI0MDIwMDAyQUM2NDAyNDBBNworOjEwMTYyMDAwQTA2MjAyNDQzQzAyMTAwMDAzRTAwMDA4QUM2MjAyNzhCMQorOjEwMTYzMDAwQTM4MDAwMTAwM0UwMDAwOEEzODAwMDExM0MwMzgwMDA5OQorOjEwMTY0MDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDE0QUM2MjAyNDA3QworOjEwMTY1MDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhFMQorOjEwMTY2MDAwQUM2MjAyNzgzQzAyNjAwMDAzRTAwMDA4OEM0MjU0MDQ0MworOjEwMTY3MDAwOTA4MzAwMzAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0Y0OQorOjEwMTY4MDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTA4MjAwNENBNworOjEwMTY5MDAwOTQ4MzAwNEUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMEMxQworOjEwMTZBMDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM1MworOjEwMTZCMDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDA4MgorOjEwMTZDMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkJERgorOjEwMTZEMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThCQworOjEwMTZFMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhCQQorOjEwMTZGMDAwQTUwQTAwMjIwM0UwMDAwODAwMDAwMDAwMjdCREZGRDg3MworOjEwMTcwMDAwQUZCMjAwMTgzQzEyODAwOEFGQjQwMDIwQUZCMzAwMUM4OQorOjEwMTcxMDAwQUZCMTAwMTRBRkJGMDAyNEFGQjAwMDEwMzY1MTAxMDBDQworOjEwMTcyMDAwM0MwMjYwMDA4QzQyNTQwNDkyMjIwMDBDM0MxNDA4MDBERAorOjEwMTczMDAwOTI5NDAwRjczMDQzMDBGRjI0MDIwMDAxMTA2MjAwMzI0RgorOjEwMTc0MDAwMDA4MDk4MjEyNDAyMDAwMjE0NjIwMDM1MzY1MDAwODA4NworOjEwMTc1MDAwMEUwMDEzRkUwMDAwMDAwMDkyMDIwMDRDMjQwM0ZGODBFNAorOjEwMTc2MDAwM0MwNDgwMDAzMDQyMDA3RjAwMDIxMUMwMjQ0MjAyNDA0RAorOjEwMTc3MDAwMDI2MjEwMjEwMDQzMTgyNEFDODMwMDk0OTI0NTAwMDhCMworOjEwMTc4MDAwOTIwNDAwNEMzMDQyMDA3RjNDMDM4MDA2MTQ4NTAwMDcyMQorOjEwMTc5MDAwMDA0MzgwMjEyNDAyRkZGRkEyMjIwMDExMjQwMkZGRkY0OAorOjEwMTdBMDAwQTYyMjAwMTIwQTAwMDVCRTI0MDJGRkZGOTYwMjAwMjBCNgorOjEwMTdCMDAwQTIyMjAwMTE5NjAyMDAyMkE2MjIwMDEyOEUwMjAwMjQwQworOjEwMTdDMDAwM0MwNDgwMDhBRTIyMDAxNDM0ODUwMDgwOTBBMjAwNENCNgorOjEwMTdEMDAwMzQ4MzAxMDBBMDYyMDAxMDhDQTIwMDNDQUM2MjAwMThBRgorOjEwMTdFMDAwOEM4MjAwNjhBQzYyMDBFNDhDODIwMDY0QUM2MjAwRTAzMQorOjEwMTdGMDAwOEM4MjAwNkNBQzYyMDBFODI0MDIwMDAxQTBBMjAwNjhBOAorOjEwMTgwMDAwMEEwMDA1REEzQzA0ODAwODBFMDAxNDE3MDAwMDAwMDBFRQorOjEwMTgxMDAwMzY0MjAwODBBMDQwMDA2ODBBMDAwNURBM0MwNDgwMDhENworOjEwMTgyMDAwQTIwMDAwNjhBMjAwMDA2OTBBMDAwNjE1M0MwMjgwMDhCOAorOjEwMTgzMDAwMzQ4MzAwODA4QzYyMDAzODM0ODUwMTAwQUM2MjAwNkMxNworOjEwMTg0MDAwMjQwMjAwMDFBMDYyMDA2OTkwQTIwMEM1OTA4MzAwMDhGNAorOjEwMTg1MDAwMzA1MTAwRkYzMDcyMDA3RjEyMzIwMDE5MDAxMTExQzBBOAorOjEwMTg2MDAwMjQ0MjAyNDAwMjYyMTAyMTI0MDNGRjgwMDA0MzE4MjQxNgorOjEwMTg3MDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDYyRgorOjEwMTg4MDAwMDA0MzgwMjE4RTAyMDAwQzEwNDAwMDBEMDIwMDIwMjEzOAorOjEwMTg5MDAwMEUwMDA1NkEwMDAwMDAwMDI2MjIwMDAxMzA1MTAwRkYwMgorOjEwMThBMDAwOTIwMzAwM0MwMjM0MTAyNjAwMDIxMDJCMDAwMjEwMjM4OQorOjEwMThCMDAwMzA2MzAwN0YwMjIyODgyNDBBMDAwNUU0QTIwMzAwM0M3MgorOjEwMThDMDAwM0MwODgwMDgzNTA0MDEwMDhDODIwMEQwMzUwNzAwODA3OAorOjEwMThEMDAwQUNFMjAwM0M4QzgyMDBEMEFEMDIwMDAwOTBFNTAwNENGMAorOjEwMThFMDAwOTA4NjAwQzU5MEUzMDA0QzkwODQwMEM1MjQwMkZGODBFMAorOjEwMThGMDAwMDBBMjI4MjQzMDYzMDA3RjMwODQwMEZGMDBBNjI4MjU0MgorOjEwMTkwMDAwMDA2NDE4MkExMDYwMDAwMjMwQTUwMEZGMzhBNTAwODA4RQorOjEwMTkxMDAwQTBFNTAwNENBMTA1MDAwOTNDMDI4MDA4OTA0MzAwMEVBMAorOjEwMTkyMDAwMzQ0NDAwODAzQzA1ODAwMEEwNDMwMDBBOEM4MzAwMThFQQorOjEwMTkzMDAwM0MwMjdGRkYzNDQyRkZGRjAwNjIxODI0QUM4MzAwMTg5MgorOjEwMTk0MDAwOENBMjAxRjgwNDQwRkZGRTAwMDAwMDAwQUNCMzAxQzAwRgorOjEwMTk1MDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThGQgorOjEwMTk2MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDIwMDAyQTBBMjAxQzRBNQorOjEwMTk3MDAwMjdCRDAwMjgzQzAyMTAwMDAzRTAwMDA4QUNBMjAxRjhEQgorOjEwMTk4MDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDAzNQorOjEwMTk5MDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDAyMDA4MDMwMjFDOQorOjEwMTlBMDAwQTBBMDAwMDA5MEEyMDAwMDhGODQwMDE0MDAwMjExQzBDQgorOjEwMTlCMDAwMjQ0MjAyNDAyNDgzMDA0MDAwODIyMDIxMjQwMkZGODAzMAorOjEwMTlDMDAwMDA4MjIwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjFEQworOjEwMTlEMDAwM0MwMjgwMDBBQzQ0MDAyNDAzRTAwMDA4QUNDMzAwMDBEQgorOjEwMTlFMDAwOTQ4MjAwMDY5MDgzMDAwNThDODUwMDBDOEM4NjAwMTA4NAorOjEwMTlGMDAwOEM4NzAwMTg4Qzg4MDAxQzhDODQwMDIwM0MwMTA4MDAxNworOjEwMUEwMDAwQTQyMjUyQzYzQzAxMDgwMEEwMjM1MkM1M0MwMTA4MDA5NAorOjEwMUExMDAwQUMyNTUyQ0MzQzAxMDgwMEFDMjY1MkQwM0MwMTA4MDA1OQorOjEwMUEyMDAwQUMyNzUyRDgzQzAxMDgwMEFDMjg1MkRDM0MwMTA4MDAyRAorOjEwMUEzMDAwQUMyNDUyRTAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDhGMworOjEwMUE0MDAwMzQ0MjAxMDA4QzQ0MDAzNDNDMDM4MDAwMzQ2NTA0MDBCRgorOjEwMUE1MDAwQUM2NDAwMzg4QzQyMDAzOEFGODUwMDIwQUM2MjAwM0M5QQorOjEwMUE2MDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMUE3MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDIwMDA2MzA4NDAwRkY4NAorOjEwMUE4MDAwMDA4MjIwMjUzQzAyODAwMEFDNDQwMDMwMDAwMDAwMDBCMQorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMDNDMDM4MDAwOEM2MjAwMDA5OQorOjEwMUFBMDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwMDNFMDAwMDhFMworOjEwMUFCMDAwQUY4MjAwMjA5NEMyMDAwMDNDMDgwODAwOTUwODAwQ0FDQworOjEwMUFDMDAwMzBFN0ZGRkYwMDgwNDgyMTAxMDIxMDIxQTRDMjAwMDA3RQorOjEwMUFEMDAwOTRDMjAwMDAzMDQyRkZGRjAwRTIxMDJCNTQ0MDAwMDE4RQorOjEwMUFFMDAwQTRDNzAwMDA5NEEyMDAwMDNDMDMwODAwOEM2MzAwQ0M1MworOjEwMUFGMDAwMjQ0MjAwMDFBNEEyMDAwMDk0QTIwMDAwMzA0MkZGRkY5MworOjEwMUIwMDAwMTQ0MzAwMDczQzAyODAwODAxMDcxMDJCQTRBMDAwMDAyQQorOjEwMUIxMDAwNTQ0MDAwMDEwMTAwMzgyMUE0QzcwMDAwM0MwMjgwMDhBNQorOjEwMUIyMDAwMzQ0NjAxMDA4Q0MzMDAyODk0QTIwMDAwM0MwNDgwMDBDRAorOjEwMUIzMDAwMzA0MkZGRkUwMDAyMTBDMDAwNjIxMDIxQUM4MjAwM0M2NworOjEwMUI0MDAwOEM4MjAwM0MwMDYyMTgyMzE4NjAwMDA0MDAwMDAwMDAzMgorOjEwMUI1MDAwOENDMjAwMjQwQTAwMDZBNjI0NDIwMDAxOENDMjAwMjQ4NAorOjEwMUI2MDAwQUM4MjAwMzgzQzAyMDA1MDM0NDIwMDEwM0MwMzgwMDAzQworOjEwMUI3MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMUI4MDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDA4OQorOjEwMUI5MDAwOTRBMjAwMDAzQzA0ODAwMDMwNDIwMDAxMDAwMjEwQzAwQQorOjEwMUJBMDAwMDA0NDEwMjE4QzQzMDQwMEFEMjMwMDAwOEM0MjA0MDQ0NworOjEwMUJCMDAwQUQyMjAwMDQzQzAyMDAyMDAzRTAwMDA4QUM4MjAwMzBBQgorOjEwMUJDMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBGNgorOjEwMUJEMDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDA2RQorOjEwMUJFMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDA5RgorOjEwMUJGMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzA3MgorOjEwMUMwMDAwMEUwMDA2N0IwMjQwMzgyMTBBMDAwNkREMDAwMDAwMDBCRAorOjEwMUMxMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDc4RAorOjEwMUMyMDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDAyOAorOjEwMUMzMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDA2OQorOjEwMUM0MDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDAyMworOjEwMUM1MDAwMjQ0MjAwMDFBNjIyMDAwMDNDMDI4MDA4MzQ0MjAxMDAxOAorOjEwMUM2MDAwOTYyMzAwMDA5NDQyMDAzQzE0NDMwMDA0OEZCRjAwMUNFNAorOjEwMUM3MDAwMjQwMjAwMDFBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMThCMgorOjEwMUM4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBDMgorOjEwMUM5MDAwMjdCREZGRTAzQzAyODAwOEFGQkYwMDE4MzQ0MjAxMDBCRQorOjEwMUNBMDAwOEM0ODAwMzQzQzAzODAwMDM0NjkwNDAwQUM2ODAwMzg4MAorOjEwMUNCMDAwOEM0MjAwMzgzMEU3MDBGRkFGODkwMDIwQUM2MjAwM0M2NgorOjEwMUNDMDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMUNFMDAwOEM4MjAwMEM4QzgyMDAwQzk3ODMwMDBFQUQyMjAwMDBDOQorOjEwMUNGMDAwOEM4MjAwMTAwMDYwNDAyMUFEMjIwMDA0OEM4MjAwMTgwQworOjEwMUQwMDAwQUQyMjAwMDg4QzgyMDAxQ0FEMjIwMDBDOENBMjAwMTRCNQorOjEwMUQxMDAwQUQyMjAwMTA4QzgyMDAyMEFEMjIwMDE0OTA4MjAwMDVCQworOjEwMUQyMDAwMzA0MjAwRkYwMDAyMTIwMEFEMjIwMDE4OENBMjAwMTgwMQorOjEwMUQzMDAwQUQyMjAwMUM4Q0EyMDAwQ0FEMjIwMDIwOENBMjAwMTA1MQorOjEwMUQ0MDAwQUQyMjAwMjQ4Q0EyMDAxQ0FEMjIwMDI4OENBMjAwMjAxMQorOjEwMUQ1MDAwQUQyMjAwMkMzNDAyRkZGRkFEMjYwMDMwQUQyMDAwMzQ1MAorOjEwMUQ2MDAwNTA2MjAwMDEzNDA4RkZGRkFEMjgwMDM4NTBFMDAwMTEzOAorOjEwMUQ3MDAwM0MwMjgwMDgzQzA0ODAwODM0ODQwMTAwOTQ4MjAwNTBCNgorOjEwMUQ4MDAwMzA0MkZGRkZBRDIyMDAzQzk0ODMwMDQ0OTQ4NTAwNDQyMAorOjEwMUQ5MDAwMjQwMjAwMDEzMDYzRkZGRjAwMDMxOEMyMDA2NDE4MjExMQorOjEwMURBMDAwOTA2NDAwNTQzMEE1MDAwNzAwQTIxMDA0MEEwMDA3NDgwMAorOjEwMURCMDAwMDA0NDEwMjUzNDQyMDEwMEFEMjAwMDNDOTQ0MzAwNDQwRgorOjEwMURDMDAwOTQ0NDAwNDQzMDYzRkZGRjAwMDMxOEMyMDA2MjE4MjFFRQorOjEwMUREMDAwMzA4NDAwMDc5MDY1MDA1NDI0MDIwMDAxMDA4MjEwMDQ0MgorOjEwMURFMDAwMDAwMjEwMjcwMDQ1MTAyNEEwNjIwMDU0MDAwMDAwMDBFQgorOjEwMURGMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDBFOQorOjEwMUUwMDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMUUxMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQwNgorOjEwMUUyMDAwM0MwNjgwMDgzNEMyMDE1MDM0NjMwNDAwMzRDNzAxNEFDMAorOjEwMUUzMDAwMzRDNDAxMzQzNEM1MDE0MDM0QzYwMTQ0QUZBMjAwMTA5QgorOjEwMUU0MDAwMEUwMDA2QkVBRjgzMDAyMDhGQkYwMDE4MDNFMDAwMDgxRAorOjEwMUU1MDAwMjdCRDAwMjA4RjgzMDAwQzNDMDYwODAwOENDNjAwRThEQworOjEwMUU2MDAwOEY4MjAwMTQzMDYzM0ZGRjAwMDMxOTgwMDA0NjEwMjE2OQorOjEwMUU3MDAwMDA0MzEwMjEyNDAzRkY4MDAwNDMxODI0M0MwNjgwMDAwNworOjEwMUU4MDAwQUNDMzAwMjgzMDQyMDA3RjNDMDM4MDBDMDA0MzMwMjE2QgorOjEwMUU5MDAwOTBDMjAwMEQzMEE1MDBGRjAwMDAzODIxMzQ0MjAwMTAzMAorOjEwMUVBMDAwQTBDMjAwMEQ4Rjg5MDAwQzNDMDI4MDA4MzQ0MjAxMDA2MgorOjEwMUVCMDAwOTQ0MzAwNDQwMDA5MTM4MjMwNDgwMDAzMjQwMjAwMDFDNworOjEwMUVDMDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDVGRAorOjEwMUVEMDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA3OTBGNAorOjEwMUVFMDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA3OTBGRgorOjEwMUVGMDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwNzkwMjQ0MzAwMDEyNgorOjEwMUYwMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkIyMworOjEwMUYxMDAwNTA0MDAwMEEyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDNGNQorOjEwMUYyMDAwM0MwMzgwMDgwQTAwMDc5RDI0MDcwMDAxMzQ2MzAxMDA3OAorOjEwMUYzMDAwOTQ2MjAwNEMyNDQyMDAwMUE0NjIwMDRDMDAwOTEzODIwOAorOjEwMUY0MDAwMzA0MzAwMDMyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjE2OQorOjEwMUY1MDAwMTQ2MDAwMDQwMDAwMDAwMDk0QzIwMDM0MEEwMDA3QURDMQorOjEwMUY2MDAwMzA0NkZGRkY4Q0M2MDAzODBBMDAwN0FEMDA4MDI4MjFFQworOjEwMUY3MDAwMDAwMDMwMjEzQzA0MDgwMDI0ODQ1MkMwMEEwMDA2RjIwQworOjEwMUY4MDAwMDAwMDAwMDAyN0JERkY5MEFGQjYwMDY4QUZCNTAwNjQ0OQorOjEwMUY5MDAwQUZCNDAwNjBBRkIzMDA1Q0FGQjIwMDU4QUZCMTAwNTQ1MworOjEwMUZBMDAwQUZCRjAwNkNBRkIwMDA1MDhDOTAwMDAwMDA4MEIwMjEzQgorOjEwMUZCMDAwM0MwMjA4MDA4QzQyMDBFODk2MDQwMDMyOEY4MzAwMTQzMworOjEwMUZDMDAwMjQxNEZGODAzMDg0M0ZGRjAwNjIxODIxMDAwNDIxODAyOAorOjEwMUZEMDAwMDA2NDE4MjEwMDc0MTAyNDNDMTM4MDAwMDBBMDkwMjE5QworOjEwMUZFMDAwOTBBNTAwMDBBRTYyMDAyODkyMDQwMDMyM0MwMjgwMENGMgorOjEwMUZGMDAwMzA2MzAwN0YwMDYyODgyMTMwODQwMEMwMjQwMjAwNDBFQQorOjEwMjAwMDAwMTQ4MjAwMzIwMDAwQTgyMThFMzUwMDM4OEUyMjAwMTg3QworOjEwMjAxMDAwMTQ0MDAwMDIyNDAyMDAwMUFFMjIwMDE4OTIwMjAwM0M4QgorOjEwMjAyMDAwMzA0MjAwMjAxNDQwMDAwRThGODMwMDE0MDAwNTExQzBDMAorOjEwMjAzMDAwMjQ0MjAyNDAwMDYyMTgyMTMwNjQwMDc4M0MwMjAwODA5MworOjEwMjA0MDAwMDA4MjIwMjUwMDc0MTgyNEFFNjMwODAwQUU2NDA4MTBENgorOjEwMjA1MDAwOEUyMjAwMTg4RTAzMDAwODAwNDMxMDIxQUUyMjAwMThDMworOjEwMjA2MDAwOEUyMjAwMkM4RTIzMDAxODI0NDIwMDAxMDA2MjE4MkJCRgorOjEwMjA3MDAwMTA2MDAwNDMwMDAwMDAwMDkyNDIwMDAwMjQ0MjAwMDE3MgorOjEwMjA4MDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkZEMQorOjEwMjA5MDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMTRDRgorOjEwMjBBMDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMzA2MzAwN0ZCQworOjEwMjBCMDAwMDA4MjIwMjEzQzAyODAwQTAwOTQyMDI0MDA2MjE4MjEyMgorOjEwMjBDMDAwQUU2NDAwMjQwQTAwMDhCRUFFQzMwMDAwOTIwMzAwMzJEMgorOjEwMjBEMDAwMjQwMkZGQzAwMDQzMTAyNDMwNDIwMEZGMTQ0MDAwMDVEQQorOjEwMjBFMDAwMjQwMjAwMDFBRTIyMDAxODk2MjIwMDM0MEEwMDA4MkVCNQorOjEwMjBGMDAwMzA1NUZGRkY4RTIyMDAxNDI0NDIwMDAxQUUyMjAwMTg0QQorOjEwMjEwMDAwOTIwMjAwMzAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMUM3NworOjEwMjExMDAwMDAwMDAwMDA5NjAyMDAzMjI3QTQwMDEwMDA4MDI4MjE1MQorOjEwMjEyMDAwQTdBMjAwMTY5NjAyMDAzMjAwMDAzMDIxMjQwNzAwMDEwOQorOjEwMjEzMDAwMzA0MkZGRkZBRjgyMDAwQzBFMDAwNkYyQUZBMDAwMUM4MQorOjEwMjE0MDAwOTYwMjAwMzI4RjgzMDAxNDNDMDQwODAwOEM4NDAwRTg1RgorOjEwMjE1MDAwMzA0MjNGRkYwMDAyMTE4MDAwNjQxODIxMDA2MjE4MjEwNAorOjEwMjE2MDAwMDA3NDEwMjRBRTYyMDAyQzMwNjMwMDdGM0MwMjgwMEVBRAorOjEwMjE3MDAwMDA2MjE4MjE5MDYyMDAwRDMwNDIwMDdGQTA2MjAwMERDNQorOjEwMjE4MDAwOTIyMjAwMEQzMDQyMDAxMDUwNDAwMDc4OTI0MjAwMDAzMAorOjEwMjE5MDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODIwMDRDOEVDMzAwMDA0RAorOjEwMjFBMDAwM0MxMzA4MDA5NjczMDBDNjI0NDJGRkZGQTQ4MjAwNEMzMworOjEwMjFCMDAwOTQ2MjAwMzI5NjIzMDAwRTMwNTRGRkZGMzA3MEZGRkYxMAorOjEwMjFDMDAwM0MwMzA4MDA4QzYzMDBEMDAwNzAxODA3QTdBMzAwMzhGOAorOjEwMjFEMDAwOTQ4MjAwM0UzMDYzRkZGRjMwNDJGRkZGMTQ2MjAwMDcyRAorOjEwMjFFMDAwMDAwMDAwMDA4QzgyMDAzMDNDMDM4MDAwMjQ0MjAwMzA1QworOjEwMjFGMDAwQUM2MjAwM0MwQTAwMDg1NjhDODIwMDJDOTQ4MjAwNDA5RAorOjEwMjIwMDAwMzA0MkZGRkY1NDYyMDAwOTI3QTQwMDQwOEM4MjAwMzg0RQorOjEwMjIxMDAwM0MwMzgwMDAyNDQyMDAzMEFDNjIwMDNDOEM4MjAwMzRERAorOjEwMjIyMDAwQUM2MjAwMzgwQTAwMDg2NTNDMDM4MDAwMjdBNTAwMzgyRQorOjEwMjIzMDAwMjdBNjAwNDgwMjYwMzgyMTBFMDAwNjdCQTdBMDAwNDhCMAorOjEwMjI0MDAwOEZBMzAwNDAzQzAyODAwMDI0NjMwMDMwQUM0MzAwMzg4MAorOjEwMjI1MDAwOEZBMzAwNDRBQzQzMDAzQzNDMDM4MDAwM0MwMjAwMDVEQgorOjEwMjI2MDAwQUM2MjAwMzAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNDI5OQorOjEwMjI3MDAwMzQ2MzA0MDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDdCOQorOjEwMjI4MDAwQUY4MzAwMjA5NDgyMDA0RTk0ODMwMDQyMDIwMjEwMjEwQQorOjEwMjI5MDAwMDA0MzEwMjMwQTAwMDg3QjMwNDNGRkZGOTQ4MzAwNEU2NQorOjEwMjJBMDAwOTQ4MjAwNDIwMjYzMTgyMTAwNTAxMDIzMDA2MjE4MjMxOAorOjEwMjJCMDAwMzA2M0ZGRkYzQzAyODAwODM0NDQwMTAwOTQ4MjAwM0NGQworOjEwMjJDMDAwMzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwMEEwMDA4OEJBNworOjEwMjJEMDAwMjQwMzAwMDE5NDgyMDAzQzMwNDJGRkZGMDA2MjEwMkI3NworOjEwMjJFMDAwMTQ0MDAwMDU4RjgyMDAyMDk0ODIwMDNDMDA2MjEwMjM3RAorOjEwMjJGMDAwMzA0M0ZGRkY4RjgyMDAyMEFDNTUwMDAwQUM0MDAwMDQ0QgorOjEwMjMwMDAwQUM1NDAwMDhBQzQzMDAwQzNDMDIwMDA2MzQ0MjAwMTAwMAorOjEwMjMxMDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMjMyMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRGMQorOjEwMjMzMDAwM0MwNDgwMDgzNDg0MDEwMDAwMTAxOEMyMDA2NDE4MjE5NQorOjEwMjM0MDAwOTA2NTAwNTQzMjAyMDAwNzI0MDYwMDAxMDA0NjEwMDQ4NAorOjEwMjM1MDAwMDA0NTEwMjVBMDYyMDA1NDk0ODMwMDQyOTYyMjAwMEU4RQorOjEwMjM2MDAwNTA0MzAwMDFBMzg2MDAxMDkyNDIwMDAwMjQ0MjAwMDE2NQorOjEwMjM3MDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkZERQorOjEwMjM4MDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMTREQworOjEwMjM5MDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjExOAorOjEwMjNBMDAwMjQwMkZGODAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEFFOAorOjEwMjNCMDAwMDA2MjE4MjEzQzAyODAwMEFDNDQwMDI0QUVDMzAwMDAzRgorOjEwMjNDMDAwOEZCRjAwNkM4RkI2MDA2ODhGQjUwMDY0OEZCNDAwNjA1QgorOjEwMjNEMDAwOEZCMzAwNUM4RkIyMDA1ODhGQjEwMDU0OEZCMDAwNTBBMworOjEwMjNFMDAwMDNFMDAwMDgyN0JEMDA3MDI3QkRGRkQ4QUZCMzAwMUM3NQorOjEwMjNGMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBGMworOjEwMjQwMDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDBENDVEMworOjEwMjQxMDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjQyMDAwOEY4MjAwMTg4RjgzMDAxQ0FDNTEwMDAwQUM1MjAwMDQ1NgorOjEwMjQzMDAwQUM1MzAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTRBMQorOjEwMjQ0MDAwQUM0MDAwMTg5NDYzMDAxRTAyMDM4MDI1QUM1MDAwMUNCMQorOjEwMjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDE1MworOjEwMjQ2MDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRGMworOjEwMjQ3MDAwOEZCMDAwMTAwQTAwMEQ3OTI3QkQwMDI4MzBBNUZGRkY5RQorOjEwMjQ4MDAwMEEwMDA4QzgzMEM2MDBGRjNDMDI4MDA4MzQ0MzAxMDAzRgorOjEwMjQ5MDAwOTQ2MjAwMEUzQzA4MDgwMDk1MDgwMEM2MzA0NkZGRkYxNQorOjEwMjRBMDAwMTRDMDAwMDQzNDAyRkZGRjk0NjUwMERBMEEwMDA5MTUyNQorOjEwMjRCMDAwOEY4NDAwMTQxMEMyMDAyNzAwMDAwMDAwOTQ2MjAwNEVCOAorOjEwMjRDMDAwOTQ2NDAwM0MzMDQ1RkZGRjAwQTYxMDIzMDBBNjE4MkJBMworOjEwMjREMDAwMzA4N0ZGRkYxMDYwMDAwNDMwNDRGRkZGMDBDNTEwMjM2OQorOjEwMjRFMDAwMDBFMjEwMjMzMDQ0RkZGRjAwODgxMDJCMTA0MDAwMEU0NAorOjEwMjRGMDAwMDBFODEwMjMzQzAyODAwODM0NDQwMTAwMjQwMzAwMDE1QQorOjEwMjUwMDAwMzQ0MjAwODBBNDQzMDAxNjI0MDJGRkZGQTQ4MjAwMEU4MAorOjEwMjUxMDAwOTQ4NTAwREE4Rjg0MDAxNDAwMDAzMDIxMzBBNUZGRkY3RAorOjEwMjUyMDAwMEEwMDA4RUQzQzA3NjAyMDAwNDQxMDJBMTA0MDAwMDkxMgorOjEwMjUzMDAwM0MwMjgwMDgzNDQzMDA4MDk0NjIwMDE2MzA0MjAwMDE1RgorOjEwMjU0MDAwMTA0MDAwMDQzQzAyODAwMDk0NDIwMDdFMjQ0MjAwMTRBQgorOjEwMjU1MDAwQTQ2MjAwMTYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTBCMQorOjEwMjU2MDAwM0MwMjgwMDhBRkJGMDAxQ0FGQjAwMDE4MzQ0MjAxMDAyRAorOjEwMjU3MDAwOTQ0MzAwNDI5NDQyMDA0QzEwNDAwMDE5MzA2OEZGRkYyMQorOjEwMjU4MDAwOTM4MzAwMTAyNDAyMDAwMTE0NjIwMDI5OEZCRjAwMUNGNQorOjEwMjU5MDAwM0MwNjgwMDgzNEQwMDEwMDAwMDgxMEMyMDA1MDEwMjExMQorOjEwMjVBMDAwOTA0MjAwNTQzMTAzMDAwNzM0QzcwMTQ4MzA0MjAwRkYxNQorOjEwMjVCMDAwMDA2MjEwMDczMDQyMDAwMTM0QzkwMTRFMzRDNDAxMkNCRQorOjEwMjVDMDAwMzRDNTAxM0UxMDQwMDAxNjM0QzYwMTQyMEUwMDA2QkU1RQorOjEwMjVEMDAwQUZBOTAwMTA5NjAyMDA0MjBBMDAwOTMyMzA0OEZGRkZGRQorOjEwMjVFMDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODMwMDQ0OTQ4MjAwNDJGOQorOjEwMjVGMDAwMTA0MzAwMEY4RkJGMDAxQzk0ODIwMDQ0QTQ4MjAwNDI0RAorOjEwMjYwMDAwOTQ4MjAwNTBBNDgyMDA0RThDODIwMDM4QUM4MjAwMzA0QworOjEwMjYxMDAwOTQ4MjAwNDBBNDgyMDAzRTk0ODIwMDRBQTQ4MjAwNDgzMgorOjEwMjYyMDAwOEZCRjAwMUM4RkIwMDAxODBBMDAwOEYwMjdCRDAwMjBFMworOjEwMjYzMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDIwMjdCREZGQTBEMQorOjEwMjY0MDAwQUZCMTAwNEMzQzExODAwMEFGQkYwMDU4QUZCMzAwNTQ5NQorOjEwMjY1MDAwQUZCMjAwNTBBRkIwMDA0ODM2MjYwMTg4OTBDMjAwMDNFOAorOjEwMjY2MDAwMzA0NDAwN0ZBM0E0MDAxMDhFMzIwMTgwOTBDMjAwMDA4RAorOjEwMjY3MDAwMzA0MzAwN0YyNDAyMDAwMzEwNjIwMDNCQUY5MjAwMTQzRAorOjEwMjY4MDAwMjg2MjAwMDQxMDQwMDAwNjI0MDIwMDA0MjQwMjAwMDIxNAorOjEwMjY5MDAwMTA2MjAwMDk4RkJGMDA1ODBBMDAwQUZCOEZCMzAwNTQ3NAorOjEwMjZBMDAwMTA2MjAwNEQyNDAyMDAwNTEwNjIwMTRFOEZCRjAwNThEOQorOjEwMjZCMDAwMEEwMDBBRkI4RkIzMDA1NDAwMDQxMUMwMDI0MjEwMjEyQgorOjEwMjZDMDAwMjQwNEZGODAyNDQyMDI0MDAwNDQxMDI0MjY0MzAwNDA5QQorOjEwMjZEMDAwQUUyMjAwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjE5MQorOjEwMjZFMDAwOTA2MjAwM0NBRkEzMDAzQzAwNDQxMDI1QTA2MjAwM0M3NworOjEwMjZGMDAwOEZBMzAwM0M5MDYyMDAzQzMwNDIwMDQwMTA0MDAxNkNDRgorOjEwMjcwMDAwOEZCRjAwNTgzQzEwODAwOEEzODAwMDEwMzYxMDAxMDBENQorOjEwMjcxMDAwOEUwMjAwRDA4QzYzMDAzNDI3QTQwMDNDMjdBNTAwMTA1MworOjEwMjcyMDAwMDA0MzEwMjEwRTAwMDdBRkFFMDIwMEQwOTNBMjAwMTBBQworOjEwMjczMDAwM0MwMzgwMDBBMjAyMDBDNThDNjIwMjc4MDQ0MEZGRkVDOAorOjEwMjc0MDAwOEY4MjAwMTRBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDRBNAorOjEwMjc1MDAwM0MwMjEwMDBBQzYyMDI3ODBFMDAwOTI1MDAwMDAwMDA2NworOjEwMjc2MDAwMEEwMDBBRkE4RkJGMDA1ODNDMDU4MDA4OTBDMzAwMDE5OAorOjEwMjc3MDAwOTBBMjAwMEIxNDQzMDE0RThGQkYwMDU4MzRBNDAwODA3OAorOjEwMjc4MDAwOEM4MjAwMTg5MDgyMDA0QzkwQTIwMDA4M0MwMjYwMDBFRAorOjEwMjc5MDAwOEM0MjU0MDQ4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkZCQworOjEwMjdBMDAwMDA2MjE4MjQzQzAyMDgwMDhDNDIwMEI0QUM4MzAwMTg3QworOjEwMjdCMDAwM0MwMzgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwQjQyQworOjEwMjdDMDAwOEM2MjAxRjgwNDQwRkZGRThGODIwMDE0QUM2MjAxQzBFRAorOjEwMjdEMDAwMEEwMDBBQzIyNDAyMDAwMjNDMTA4MDA4OTBDMzAwMDFEMworOjEwMjdFMDAwOTIwMjAwMEIxNDQzMDEzMjhGQkYwMDU4MjdBNDAwMTgzNworOjEwMjdGMDAwMzYwNTAxMTAyNDA2MDAwMzNDMDI2MDAwOEM0MjU0MDQ5QworOjEwMjgwMDAwMEUwMDBFMDgwMDAwMDAwMDI3QTQwMDI4MzYwNTAxRTA5NQorOjEwMjgxMDAwMEUwMDBFMDgyNDA2MDAwMzhGQTIwMDI4MzYwMzAxMDBENAorOjEwMjgyMDAwQUUwMjAwNjQ4RkEyMDAyQ0FFMDIwMDY4OEZBMjAwMzBCRQorOjEwMjgzMDAwQUUwMjAwNkM5M0E0MDAxODkwNjMwMEM1MjQwMkZGODBEMAorOjEwMjg0MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4NDAwN0ZBRgorOjEwMjg1MDAwMzEyMjAwN0YwMDgyMTAyQTU0NDAwMDAxMzkyOTAwODA3MworOjEwMjg2MDAwMDAwNDExQzAyNDQyMDI0MDI0MDNGRjgwMDI0MjEwMjFEMAorOjEwMjg3MDAwMDA0MzEwMjRBRTIyMDA5NDI2NDIwMDQwMzA0MjAwN0ZFNAorOjEwMjg4MDAwM0MwMzgwMDYwMDQzNDAyMThGQTMwMDFDMjQwMkZGRkY2RAorOjEwMjg5MDAwQUZBODAwNDAzQzEzMDgwMDkyNzMwMEY3MTA2MjAwMzNBOQorOjEwMjhBMDAwOTNBMjAwMTk5NTAzMDAxNDMwNDQwMEZGMzA2M0ZGRkYyQQorOjEwMjhCMDAwMDA2NDE4MkIxMDYwMDAxMDAwMDAwMDAwOTUwNDAwMTQ0NAorOjEwMjhDMDAwOEQwNzAwMUM4RDA2MDAxODMwODRGRkZGMDA0NDIwMjM3NAorOjEwMjhEMDAwMDAwNDIxMDAwMEU0MzgyMTAwMDAxMDIxMDBFNDIwMkIzNgorOjEwMjhFMDAwMDBDMjMwMjEwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMTgyNQorOjEwMjhGMDAwMEEwMDBBMUI5M0EyMDAxOTk1MDQwMDE0OEQwNzAwMUNGRQorOjEwMjkwMDAwOEQwNjAwMTgzMDg0RkZGRjAwODIyMDIzMDAwNDIxMDA4MAorOjEwMjkxMDAwMDAwMDEwMjEwMDgwMTgyMTAwQzIzMDIzMDBFNDIwMkI4OQorOjEwMjkyMDAwMDBDNDMwMjMwMEUzMzgyM0FEMDcwMDFDQUQwNjAwMThCNworOjEwMjkzMDAwOTNBMjAwMTk4RkEzMDA0MEE0NjIwMDE0OTdBMjAwMUE2QQorOjEwMjk0MDAwQTQ2MjAwMTY4RkEyMDAxQ0FDNjIwMDEwOEZBMjAwMUNCMworOjEwMjk1MDAwQUM2MjAwMEM5M0EyMDAxOUE0NjIwMDIwOTdBMjAwMUE5NgorOjEwMjk2MDAwQTQ2MjAwMjI4RkEyMDAxQ0FDNjIwMDI0M0MwNDgwMDhGOAorOjEwMjk3MDAwMzQ4MzAwODA4QzYyMDAzODhGQTIwMDIwMDEyMDg4MjFERgorOjEwMjk4MDAwQUM2MjAwM0M4RkEyMDAyMEFDODIwMDAwOTNBMjAwMTgzMQorOjEwMjk5MDAwQTA2MjAwNEM5M0EyMDAxOEEwODIwMDA5QTA2MDAwNjgwOQorOjEwMjlBMDAwOTNBMjAwMTgxMDUxMDA1MTI0MDdGRjgwMzIyOTAwN0ZBNAorOjEwMjlCMDAwMDAwOTExQzAyNDQyMDI0MDAyNDIxMDIxMzA0NjAwN0YyQgorOjEwMjlDMDAwM0MwMzgwMDAwMDQ3MTAyNEFDNjIwMDk0M0MwMjgwMDY2NworOjEwMjlEMDAwMDBDMjMwMjE5MEMyMDAzQ0FGQTYwMDQwMDAwMDIwMjE4MAorOjEwMjlFMDAwMDA0NzEwMjVBMEMyMDAzQzhGQTgwMDQwOTUwMjAwMDJCRAorOjEwMjlGMDAwOTUwMzAwMTQ4RDA3MDAxQzMwNDJGRkZGMzA2M0ZGRkY3QQorOjEwMkEwMDAwOEQwNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDBFMjM4MjE1NworOjEwMkExMDAwMDBFMjEwMkIwMEM0MzAyMTAwQzIzMDIxQUQwNzAwMUNBMQorOjEwMkEyMDAwQUQwNjAwMTg5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTZDQworOjEwMkEzMDAwOEQwMjAwMDhBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMENFRQorOjEwMkE0MDAwOTUwMjAwMDJBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDhDOAorOjEwMkE1MDAwQUQwMjAwMjQ5MTAyMDAzQzMwNDIwMDQwMTA0MDAwMUFCOAorOjEwMkE2MDAwMjYyMjAwMDEzQzEwODAwOEEzQTkwMDM4QTM4MDAwMTA5MgorOjEwMkE3MDAwMzYxMDAxMDA4RTAyMDBEMDhEMDMwMDM0MjdBNDAwNDBFMAorOjEwMkE4MDAwMjdBNTAwMzgwMDQzMTAyMTBFMDAwN0FGQUUwMjAwRDA4QQorOjEwMkE5MDAwOTNBMjAwMzgzQzAzODAwMEEyMDIwMEM1OEM2MjAyNzgzOQorOjEwMkFBMDAwMDQ0MEZGRkU4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDI0OAorOjEwMkFCMDAwQTA2MjAyNDQzQzAyMTAwMEFDNjIwMjc4MEUwMDA5MjVCQworOjEwMkFDMDAwMDAwMDAwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3MzAwMDQ0MAorOjEwMkFEMDAwMDA0MDIwMjEyNDAzRkY4MDAyMjMxMDI0MDA0MzIwMjZFRAorOjEwMkFFMDAwOTNBMjAwMTgwQTAwMEEzNzMwOTEwMEZGOTNBNDAwMTgzRgorOjEwMkFGMDAwOEZBMzAwMUMyNDAyRkZGRjEwNjIwMDBBMzA4OTAwRkYzMAorOjEwMkIwMDAwMjQ4MjAwMDEyNDgzMDAwMTMwNDIwMDdGMTQ1MzAwMDUxOQorOjEwMkIxMDAwMzA2OTAwRkYyNDAzRkY4MDAwODMxMDI0MDA0MzEwMjY0NworOjEwMkIyMDAwMzA0OTAwRkYzQzAyODAwODkwNDIwMDA4MDEyMDg4MjFDMworOjEwMkIzMDAwMzA1MDAwRkYxMjMwMDAxOTMyMjIwMDdGMDAwMjExQzAxNQorOjEwMkI0MDAwMDI0MjEwMjEyNDQyMDI0MDI0MDNGRjgwMDA0MzE4MjQ0MworOjEwMkI1MDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDYzQworOjEwMkI2MDAwMDA0MzEwMjE4QzQzMDAwQzAwNDAyMDIxMTA2MDAwMEIxQQorOjEwMkI3MDAwQUZBMjAwNDAwRTAwMDU2QTAwMDAwMDAwMjYyMzAwMDFGRAorOjEwMkI4MDAwMjQwNUZGODAzMDYyMDA3RjE0NTMwMDAyMDIyNTIwMjRCOAorOjEwMkI5MDAwMDA4NTE4MjYwQTAwMEE5QjMwNzEwMEZGM0MwNDgwMDg1QgorOjEwMkJBMDAwMzQ4NDAwODA4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY5NgorOjEwMkJCMDAwMDA2MjE4MjRBQzgzMDAxODNDMDM4MDAwOEM2MjAxRjg4QQorOjEwMkJDMDAwMDQ0MEZGRkUwMDAwMDAwMEFDNzIwMUMwMjQwMjAwMDJCRAorOjEwMkJEMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDBBRkFDQgorOjEwMkJFMDAwOEZCRjAwNTgzQzA0ODAwODkwQzMwMDAxOTA4MjAwMEIwNgorOjEwMkJGMDAwMTQ0MzAwMkY4RkJGMDA1ODM0OTAwMDgwOTIwMjAwMDhDOQorOjEwMkMwMDAwMzA0MjAwNDAxMDQwMDAyMDAwMDAwMDAwOTIwMjAwMDgwNgorOjEwMkMxMDAwMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA1MDI0MDIwMjFCNAorOjEwMkMyMDAwMEUwMDBFOEQyNDA1MDA5MzBBMDAwQUZBOEZCRjAwNTg4QgorOjEwMkMzMDAwOTIwMjAwMDkyNDAzMDAxODMwNDIwMEZGMTQ0MzAwMERFMworOjEwMkM0MDAwMDI0MDIwMjEyNDA1MDAzOTBFMDAwRTI1MDAwMDMwMjEwRAorOjEwMkM1MDAwMEUwMDAzNDU4Rjg0MDAxNDhGODJGRkE4MjQwMzAwMTIwNgorOjEwMkM2MDAwQTA0MzAwMDkwRTAwMDM1MDhGODQwMDE0MEEwMDBBRkFFMgorOjEwMkM3MDAwOEZCRjAwNTgyNDA1MDAzNjBFMDAwRTI1MDAwMDMwMjFCRAorOjEwMkM4MDAwMEEwMDBBRkE4RkJGMDA1ODBFMDAwMzQ1MDI0MDIwMjFCNworOjEwMkM5MDAwOTIwMjAwMDU4Rjg0MDAxNDM0NDIwMDIwMEUwMDAzNTA3RAorOjEwMkNBMDAwQTIwMjAwMDUwRTAwMTAzNjhGODQwMDE0OEZCRjAwNTg1QQorOjEwMkNCMDAwOEZCMzAwNTQ4RkIyMDA1MDhGQjEwMDRDOEZCMDAwNDhEQQorOjEwMkNDMDAwMDNFMDAwMDgyN0JEMDA2MDNDMDI4MDA4MzQ0NTAxMDA5NQorOjEwMkNEMDAwM0MwMjgwMDA4QzQyMDE0MDk0QTMwMDBFMDAwMDMwMjE5MQorOjEwMkNFMDAwMDA0MDIwMjFBRjgyMDAxNDMwNjNGRkZGMzQwMkZGRkY1OQorOjEwMkNGMDAwMTA2MjAwMDYzQzA3NjAyMDI0MDJGRkZGQTRBMjAwMEUyMQorOjEwMkQwMDAwOTRBNTAwREEwQTAwMDhFRDMwQTVGRkZGMDNFMDAwMDhGMworOjEwMkQxMDAwMDAwMDAwMDAyN0JERkZDODNDMDI4MDAwM0MwNjgwMDg4MAorOjEwMkQyMDAwQUZCNTAwMkNBRkIxMDAxQ0FGQkYwMDMwQUZCNDAwMjg2RQorOjEwMkQzMDAwQUZCMzAwMjRBRkIyMDAyMEFGQjAwMDE4MzQ1MTAxMDA4RgorOjEwMkQ0MDAwMzRDNTAxMDA4QzQzMDEwMDhFMjIwMDE0OENBNDAwRDRGMQorOjEwMkQ1MDAwMDAwMEE4MjFBRjgzMDAxNDAwNDQxMDIzMTg0MDAwNTI0MworOjEwMkQ2MDAwQTM4MDAwMTA4RTIyMDAxNDAwMDA1MDIxQUNBMjAwRDREOQorOjEwMkQ3MDAwOTBDMzAwMDg5MEEyMDBDNTMwNzMwMDdGQTNBMjAwMTA4QQorOjEwMkQ4MDAwOENCMjAwRDA4Q0I0MDBENDMwNDIwMEZGMTA1MzAwM0IxMgorOjEwMkQ5MDAwOTNBMjAwMTA4RjgzMDAxNDI0MDdGRjgwMDAwMjExQzA0QgorOjEwMkRBMDAwMDA2MjEwMjEyNDQyMDI0MDI0NjMwMDQwMDA0NzEwMjRBNgorOjEwMkRCMDAwMzA2MzAwN0YzQzA5ODAwMDNDMDg4MDBBMDA2ODE4MjFDRAorOjEwMkRDMDAwQUQyMjAwMjQ4QzYyMDAzNDI3QTQwMDE0MjdBNTAwMTAzMworOjEwMkREMDAwMDI0MjgwMjEwMjkwMTAyMzA0NDAwMDI4QUZBMzAwMTQ3NworOjEwMkRFMDAwOTA2MjAwM0MwMEUyMTAyNDMwNDIwMEZGMTQ0MDAwMTlDMQorOjEwMkRGMDAwMDIwMDkwMjE5MDYyMDAzQzM0NDIwMDQwQTA2MjAwM0NGRQorOjEwMkUwMDAwOEY4NjAwMTQ5M0EzMDAxMDI0QzIwMDQwMzA0MjAwN0YzQworOjEwMkUxMDAwMDA0ODI4MjEzQzAyMDgwMDhDNDIwMEY0MjQ2MzAwMDE5MQorOjEwMkUyMDAwMzA2NDAwRkYxNDgyMDAwMkEzQTMwMDEwQTNBMDAwMTBDRQorOjEwMkUzMDAwOTNBMjAwMTBBRkE1MDAxNDAwMDIxMUMwMjQ0MjAyNDA2QQorOjEwMkU0MDAwMDBDMjEwMjEwMDQ3MTAyNEFEMjIwMDI0MEEwMDBCMzFEQgorOjEwMkU1MDAwOTNBMjAwMTAwRTAwMDdBRjAwMDAwMDAwM0MwMjgwMDhBMworOjEwMkU2MDAwMzQ0MjAxMDBBQzUwMDBEMDkzQTMwMDEwMjQwQTAwMDFBQQorOjEwMkU3MDAwQTA0MzAwQzUwQTAwMEIzMTkzQTIwMDEwMjQwMjAwMDFGOAorOjEwMkU4MDAwMTU0MjAwMDkzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkU3QQorOjEwMkU5MDAwOEY4MjAwMTRBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQ0RAorOjEwMkVBMDAwM0MwMjEwMDBBQzYyMDI3ODkyMjIwMDBCMjQwMzAwMDI2NAorOjEwMkVCMDAwMzA0MjAwRkYxNDQzMDA3MjAwMDAwMDAwOTYyMjAwMDgxOAorOjEwMkVDMDAwMzA0MzAwRkYyNDAyMDA4MjE0NjIwMDQwMjQwMjAwODQ4OAorOjEwMkVEMDAwM0MwMjgwMDAzNDQ5MDEwMDhEMjIwMDBDOTUyMzAwMDYzRAorOjEwMkVFMDAwMDAwMjE2MDIzMDYzRkZGRjMwNDUwMDNGMjQwMjAwMjczNgorOjEwMkVGMDAwMTBBMjAwMEZBRjgzMDAwQzI4QTIwMDI4MTA0MDAwMDg4OQorOjEwMkYwMDAwMjQwMjAwMzEyNDAyMDAyMTEwQTIwMDA5MjQwMjAwMjUxRAorOjEwMkYxMDAwMTBBMjAwMDc5MzgyMDAxMTBBMDAwQkE5MDAwMDAwMDAxNAorOjEwMkYyMDAwMTBBMjAwMDc5MzgyMDAxMTBBMDAwQkE5MDAwMDAwMDAwNAorOjEwMkYzMDAwMEUwMDA3NjMwMTIwMjAyMTBBMDAwQzI5MDAwMDAwMDA3OAorOjEwMkY0MDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTRGNAorOjEwMkY1MDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDA2MworOjEwMkY2MDAwQUM2MjAyNzgwQTAwMEMyOTAwMDAwMDAwOTUyMzAwMDZEQworOjEwMkY3MDAwOTEyNDAwMDU4RDI1MDAwQzhEMjYwMDEwOEQyNzAwMTg0QQorOjEwMkY4MDAwOEQyODAwMUM4RDI5MDAyMDI0NDIwMDAxM0MwMTA4MDBFRQorOjEwMkY5MDAwQTQyMzUyQzYzQzAxMDgwMEEwMjQ1MkM1M0MwMTA4MDBFRAorOjEwMkZBMDAwQUMyNTUyQ0MzQzAxMDgwMEFDMjY1MkQwM0MwMTA4MDBCNAorOjEwMkZCMDAwQUMyNzUyRDgzQzAxMDgwMEFDMjg1MkRDM0MwMTA4MDA4OAorOjEwMkZDMDAwQUMyOTUyRTAwQTAwMEMyOUEzODIwMDExMTQ2MjAwMEEwNQorOjEwMkZEMDAwMjQwMjAwODEzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE1QQorOjEwMkZFMDAwOTIyNjAwMDU4Rjg0MDAxNDMwQTVGRkZGMzBDNjAwRkYzNQorOjEwMkZGMDAwMEEwMDBCRUEzQzA3NjAyMTE0NjIwMDVDMDAwMDAwMDAzQworOjEwMzAwMDAwOTIyMjAwMEEzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDc4NworOjEwMzAxMDAwMzA2MjAwNDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREFFRQorOjEwMzAyMDAwOEY4NDAwMTQwQTAwMEJFODI0MDYwMDQwMTA0MDAwMDdCQgorOjEwMzAzMDAwMDAwMzE2MDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE4NworOjEwMzA0MDAwOEY4NDAwMTQwQTAwMEJFODI0MDYwMDQxMDAwMjE2MDNENgorOjEwMzA1MDAwMDQ0MTAwNDYzQzAyODAwODM0NDIwMTAwOTQ0NTAwREFGNQorOjEwMzA2MDAwOEY4NDAwMTQyNDA2MDA0MjMwQTVGRkZGM0MwNzYwMTkzRQorOjEwMzA3MDAwMEUwMDA4RUQwMDAwMDAwMDBBMDAwQzI5MDAwMDAwMDAwRQorOjEwMzA4MDAwOTIyMjAwMEIyNDA0MDAxNjMwNDIwMEZGMTA0NDAwMDY3OAorOjEwMzA5MDAwM0MwNjgwMDA5MjIyMDAwQjI0MDMwMDE3MzA0MjAwRkYwMAorOjEwMzBBMDAwMTQ0MzAwMzIwMDAwMDAwMDM0QzUwMTAwOTBBMjAwMEI2MAorOjEwMzBCMDAwMzA0MjAwRkYxNDQ0MDAwQjAwMDA4MDIxOENBMjAwMjA0RAorOjEwMzBDMDAwOENBNDAwMjAyNDAzRkY4MDAwNDMxMDI0MDAwMjExNDA0MAorOjEwMzBEMDAwMzA4NDAwN0YwMDQ0MTAyNTNDMDMyMDAwMDA0MzEwMjU2RAorOjEwMzBFMDAwQUNDMjA4MzA5NEEyMDAwODAwMDIxNDAwMDAwMjE0MDNDRAorOjEwMzBGMDAwMDQ0MjAwMDEyNDEwMDAwMTk0QTIwMDA4MzA0MjAwODAyNAorOjEwMzEwMDAwNTA0MDAwMUEwMjAwQTgyMTk0QTIwMDA4MzA0MjIwMDA3QQorOjEwMzExMDAwNTA0MDAwMTYwMjAwQTgyMThDQTMwMDE4M0MwMjFDMkQ3MAorOjEwMzEyMDAwMzQ0MjE5RUQxMDYyMDAxMTAyMDBBODIxM0MwMjA4MDA4RgorOjEwMzEzMDAwOEM0MjAwRDQxMDQwMDAwNTNDMDI4MDA4MjQwMzAwMDRBNworOjEwMzE0MDAwMzQ0MjAxMDBBMDQzMDBFQzNDMDI4MDA4MzQ0MjAxMDBGQworOjEwMzE1MDAwOTQ0NTAwREE4Rjg0MDAxNDI0MDYwMDA2MzBBNUZGRkY5MgorOjEwMzE2MDAwMEUwMDA4RUQzQzA3NjAyMTAyMDBBODIxMEUwMDA5MjU5MQorOjEwMzE3MDAwMDAwMDAwMDA5MjIyMDAwQTMwNDIwMDA4MTA0MDAwMDRDMworOjEwMzE4MDAwMDJBMDEwMjEwRTAwMTMzQTAwMDAwMDAwMDJBMDEwMjEzRQorOjEwMzE5MDAwOEZCRjAwMzA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ3MAorOjEwMzFBMDAwOEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyMAorOjEwMzFCMDAwMjdCRDAwMzgyNDAyRkY4MDAwODIyMDI0M0MwMjkwMDBCQQorOjEwMzFDMDAwMzQ0MjAwMDcwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjBFRAorOjEwMzFEMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDBFMQorOjEwMzFFMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMjQwMkZGODA5MAorOjEwMzFGMDAwMDA4MjIwMjQzNDYyMDAwNzAwODIyMDI1QUM2NDAwMjA3NQorOjEwMzIwMDAwOEM2MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDg4NAorOjEwMzIxMDAwMDAwMDAwMDAzQzAyODAwODI0MDMwMDA1MzQ0MjAxMDA0NQorOjEwMzIyMDAwQTA0MzAwRUMzQzAyODAwMDhDNDIwMTAwM0MwMzgwMDA4MworOjEwMzIzMDAwQUY4MjAwMTQ4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTQ3QgorOjEwMzI0MDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDA3MAorOjEwMzI1MDAwQUM2MjAyNzgwM0UwMDAwODAwMDAwMDAwMjdCREZGRTgzMAorOjEwMzI2MDAwM0MwNjgwMDBBRkJGMDAxMDM0QzcwMTAwOTRFMjAwMDhBNAorOjEwMzI3MDAwMzA0NDAwRkYzODgzMDA4MjM4ODIwMDg0MkM2MzAwMDFEMAorOjEwMzI4MDAwMkM0MjAwMDEwMDYyMTgyNTEwNjAwMDJEMjQwMjAwODNFQQorOjEwMzI5MDAwOTM4MjAwMTE1MDQwMDAzNjhGQkYwMDEwM0MwMjA4MDA5RQorOjEwMzJBMDAwOTA0MjUyQ0M4Q0M0MDEwMDNDMDYwODAwOTRDNjUyQzYyMQorOjEwMzJCMDAwMzA0NTAwM0YzOEEzMDAzMjM4QTIwMDNGMkM2MzAwMDFBNAorOjEwMzJDMDAwMkM0MjAwMDEwMDYyMTgyNUFGODQwMDE0QUY4NjAwMEM2OAorOjEwMzJEMDAwQTM4MDAwMTExNDYwMDAwNzAwRTAyMDIxMjQwMjAwMjBEOAorOjEwMzJFMDAwMTRBMjAwMTIwMDAwMDAwMDM0MDJGRkZGMTRDMjAwMEZGRAorOjEwMzJGMDAwMDAwMDAwMDAyNDAyMDAyMDE0QTIwMDA1MDBFMDI4MjFBNAorOjEwMzMwMDAwOENFMzAwMTQyNDAyRkZGRjUwNjIwMDBCOEZCRjAwMTBGQgorOjEwMzMxMDAwM0MwNDA4MDAyNDg0NTJDMDAwMDAzMDIxMEUwMDA2RjI1NAorOjEwMzMyMDAwMjQwNzAwMDEwQTAwMEM5QzhGQkYwMDEwMEUwMDA3NjNFOQorOjEwMzMzMDAwMDAwMDAwMDA4RkJGMDAxMDBBMDAwOTI1MjdCRDAwMThGQgorOjEwMzM0MDAwMTQ4MjAwMDYyNDgyRkY4MDhDQzMwMTA0M0MwMjYwMjBBQQorOjEwMzM1MDAwQUM0MzAwMTQwQTAwMENEMjhGQkYwMDEwMzA0MjAwRkZCMworOjEwMzM2MDAwMkM0MjAwMDIxMDQwMDAwNDI0MDIwMDIyOEZCRjAwMTBGMworOjEwMzM3MDAwMEEwMDBCMTMyN0JEMDAxODE0ODIwMDA0OEY4MjAwMUM2MgorOjEwMzM4MDAwOEZCRjAwMTAwQTAwMEM1MzI3QkQwMDE4OEM0MjAwMENBMAorOjEwMzM5MDAwMTA0MDAwMUUwMEUwMjgyMTkwRTMwMDA5MjQwMjAwMThEQworOjEwMzNBMDAwMTQ2MjAwMDMyNDAyMDAxNjBBMDAwQ0JEMjQwMzAwMDg2NgorOjEwMzNCMDAwMTQ2MjAwMDcyNDAyMDAxNzI0MDMwMDEyM0MwMjgwMDg1NAorOjEwMzNDMDAwMzQ0MjAwODBBMDQzMDAwOTBBMDAwQ0NBOTRBNzAwMDhGOAorOjEwMzNEMDAwNTQ2MjAwMDc5NEE3MDAwODhGODJGRkE4MjQwNEZGRkUxMAorOjEwMzNFMDAwOTA0MzAwMDUwMDY0MTgyNEEwNDMwMDA1OTRBNzAwMDgzQQorOjEwMzNGMDAwOTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2OEZCRjAwMTBBRgorOjEwMzQwMDAwMDAwNzNDMDAwQTAwMDhDODI3QkQwMDE4OEZCRjAwMTA0NQorOjEwMzQxMDAwMDNFMDAwMDgyN0JEMDAxODhGODUwMDFDM0MwNDgwMDBENQorOjEwMzQyMDAwOTRBMjAwMkE4Q0EzMDAzNDAwMDIzMEMwMjQwMkZGRjBEMgorOjEwMzQzMDAwMDBDMjEwMjQwMDYyMTgyMUFDODMwMDNDOENBMjAwMzAzMgorOjEwMzQ0MDAwM0MwMzgwMDBBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTA0MworOjEwMzQ1MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMzQ2MDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMzBDMjAwMDg5NgorOjEwMzQ3MDAwMTA0MDAwMDYzQzAyODAwMDhDNjIwNDA4QUNBMjAwMjBEMAorOjEwMzQ4MDAwOEM2MjA0MEMwQTAwMENGNUFDQTIwMDI0OEM0MzA0MDBFRQorOjEwMzQ5MDAwQUNBMzAwMjA4QzQyMDQwNEFDQTIwMDI0M0MwMzAwMjAxNgorOjEwMzRBMDAwM0MwMjgwMDBBQzQzMDAzMDNDMDQ4MDAwOEM4MjAwMzA0MQorOjEwMzRCMDAwMDA0MzEwMjQxNDQwRkZGRDhGODYwMDFDM0MwMjAwNDA5NgorOjEwMzRDMDAwQUM4MjAwMzA5NEMzMDAyQTk0QzIwMDI4OTRDNDAwMkMxQgorOjEwMzREMDAwOTRDNTAwMkUyNDYzMDAwMTAwNDQxMDIxMzA2NEZGRkZENgorOjEwMzRFMDAwQTRDMjAwMjgxNDg1MDAwMkE0QzMwMDJBQTRDMDAwMkE5NAorOjEwMzRGMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDFDMjdCREZGRThFNworOjEwMzUwMDAwM0MwNTgwMDQyNDg0MDAxMEFGQkYwMDEwMEUwMDBFMDg5QworOjEwMzUxMDAwMjQwNjAwMEE4Rjg0MDAxQzk0ODIwMDEyOTQ4MzAwMkVEQgorOjEwMzUyMDAwMzA0MjAwMEYyNDQyMDAwMzAwNDMxODA0MjQwMjdGRkZBRQorOjEwMzUzMDAwMDA0MzEwMkIxMDQwMDAwMkFDODMwMDAwMDAwMDAwMEQ3RgorOjEwMzU0MDAwMEUwMDBDRDQwMDAwMDAwMDhGODMwMDFDOEZCRjAwMTAwMQorOjEwMzU1MDAwMjdCRDAwMTg5NDYyMDAxNDk0NjMwMDFBMzA0MjAwMEZEMworOjEwMzU2MDAwMDAwMjE1MDAwMDYyMTgyNTNDMDI4MDAwMDNFMDAwMDhGQworOjEwMzU3MDAwQUM0MzAwQTA4RjgzMDAxQzNDMDI4MDA0OTQ0NDAwMDZFRQorOjEwMzU4MDAwOTQ2MjAwMUE4QzY1MDAwMEE0NjQwMDE2MDA0NDEwMjNBNQorOjEwMzU5MDAwMzA0MkZGRkYwMDQ1MTAyQjAzRTAwMDA4Mzg0MjAwMDFENQorOjEwMzVBMDAwOEY4NDAwMUMzQzA3ODAwNDk0ODYwMDFBOEM4NTAwMDBFMAorOjEwMzVCMDAwOTRFMjAwMDZBNDgyMDAxNjk0RTMwMDA2MDBDMzEwMjNFMAorOjEwMzVDMDAwMzA0MkZGRkYwMDQ1MTAyQjM4NDIwMDAxMTQ0MEZGRjg0NQorOjEwMzVEMDAwQTQ4MzAwMTYwM0UwMDAwODAwMDAwMDAwOEY4NDAwMUM5NAorOjEwMzVFMDAwM0MwMjgwMDQ5NDQyMDAwNjk0ODMwMDFBOEM4NTAwMDBGQgorOjEwMzVGMDAwQTQ4MjAwMTYwMDYyMTAyMzMwNDJGRkZGMDA0NTEwMkIwQQorOjEwMzYwMDAwMzg0MjAwMDE1MDQwMDAwRDhGODUwMDFDMDA2MDMwMjFDMQorOjEwMzYxMDAwM0MwNzgwMDQ5NEUyMDAwNkE0ODIwMDE2OTRFMzAwMDZBRQorOjEwMzYyMDAwMDBDMzEwMjMzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDEzOQorOjEwMzYzMDAwMTQ0MEZGRjhBNDgzMDAxNjhGODUwMDFDM0MwMzgwMDAxMworOjEwMzY0MDAwMzQ2MjA0MDA4Q0E0MDAyMEFGODIwMDE4QUM2NDAwMzhGRgorOjEwMzY1MDAwOENBMjAwMjRBQzYyMDAzQzNDMDIwMDA1QUM2MjAwMzA0RAorOjEwMzY2MDAwMDNFMDAwMDhBQ0EwMDAwNDhGODQwMDFDM0MwMzAwMDZBQgorOjEwMzY3MDAwOEM4MjAwMDQwMDAyMTE0MDAwNDMxMDI1M0MwMzgwMDBBRQorOjEwMzY4MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwMzY5MDAwOEM2MjAwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDBENAorOjEwMzZBMDAwQUM4MDAwMDQwM0UwMDAwOEFGODIwMDE4OEY4NjAwMUM4NQorOjEwMzZCMDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMThERQorOjEwMzZDMDAwOENDMzAwMDQ4Q0M1MDAyNDhGODIwMDE4MzA5MDAwRkY0QQorOjEwMzZEMDAwOTRDNDAwMUEyNDYzMDAwMTI0NDIwMDIwMjQ4NDAwMDFDMQorOjEwMzZFMDAwMjRBNzAwMjBBQ0MzMDAwNEFGODIwMDE4QTRDNDAwMUFCMQorOjEwMzZGMDAwQUNDNzAwMjQwNEExMDAwNjAwMDA4ODIxMDRFMjAwMDVGNAorOjEwMzcwMDAwOTRDMjAwMUE4Q0MyMDAyMDI0NDIwMDAxQUNDMjAwMjBFNgorOjEwMzcxMDAwOTRDMjAwMUE5NEMzMDAyODJFMDQwMDAxMDA0MzEwMjYwRQorOjEwMzcyMDAwMkM0MjAwMDEwMDQ0MTAyNDUwNDAwMDA1OTRDMjAwMUFBRAorOjEwMzczMDAwMjQwMjAwMDFBQ0MyMDAwODk0QzIwMDFBOTRDMzAwMjhGRAorOjEwMzc0MDAwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxMDA0NDEwMjVCRAorOjEwMzc1MDAwMTQ0MDAwMDcwMDAwMDAwMDhDQzIwMDA4MTQ0MDAwMDQ2MAorOjEwMzc2MDAwMjQwMjAwMTA4Q0MzMDAwNDE0NjIwMDBGOEY4NTAwMUMxQgorOjEwMzc3MDAwMEUwMDBENjgyNDExMDAwMThGODIwMDFDOTQ0MzAwMjg2NAorOjEwMzc4MDAwOTQ0MjAwMUExNDQzMDAwMzAwMDAwMDAwMEUwMDBDRDQwMQorOjEwMzc5MDAwMDAwMDAwMDAxNjAwMDAwNDhGODUwMDFDMEUwMDBENDU3RgorOjEwMzdBMDAwMDAwMDAwMDA4Rjg1MDAxQzk0QTIwMDFFOTRBNDAwMUM0MQorOjEwMzdCMDAwMjQ0MjAwMDEzMDQzRkZGRjE0NjQwMDAyQTRBMjAwMUU1MworOjEwMzdDMDAwQTRBMDAwMUUxMjAwMDAwQTNDMDI4MDA0OTRBMjAwMTQ2RgorOjEwMzdEMDAwOTRBMzAwMUEzMDQyMDAwRjAwMDIxNTAwMDA2MjE4MjU2MQorOjEwMzdFMDAwM0MwMjgwMDBBQzQzMDBBMDBBMDAwRERGQUNBMDAwMDg0MgorOjEwMzdGMDAwOTQ0MjAwMDY5NEEzMDAxQThDQTQwMDAwQTRBMjAwMTYxMAorOjEwMzgwMDAwMDA2MjEwMjMzMDQyRkZGRjAwNDQxMDJCMzg0MjAwMDFCOQorOjEwMzgxMDAwMTA0MDAwMEQwMjIwMTAyMTAwNjAzMDIxM0MwNzgwMDQ4MAorOjEwMzgyMDAwOTRFMjAwMDZBNEEyMDAxNjk0RTMwMDA2MDBDMzEwMjM0RAorOjEwMzgzMDAwMzA0MkZGRkYwMDQ0MTAyQjM4NDIwMDAxMTQ0MEZGRjhEMworOjEwMzg0MDAwQTRBMzAwMTYwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQwRQorOjEwMzg1MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMDNFMDAwMDgzRgorOjEwMzg2MDAwMDAwMDAwMDA4RjgyMDAyNDNDMDMwMDA2MDAwMjExNDA4QgorOjEwMzg3MDAwMDA0MzEwMjUzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDBEMworOjEwMzg4MDAwMDAwMDAwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTBDOAorOjEwMzg5MDAwMTA0MEZGRkQzNDYyMDQwMEFGODIwMDIwMDNFMDAwMDgwNgorOjEwMzhBMDAwQUY4MDAwMjQwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDhCRQorOjEwMzhCMDAwMDAwMDAwMDAzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjE0QQorOjEwMzhDMDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDI1QworOjEwMzhEMDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAwREZFMDAwNTI4NDA2MgorOjEwMzhFMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkY5RQorOjEwMzhGMDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDBFMDg3RgorOjEwMzkwMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg2OAorOjEwMzkxMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMzkyMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDREMworOjEwMzkzMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODBFMAorOjEwMzk0MDAwMjQwMzAwMDFBQzQzMDAwQ0E0NDMwMDEwQTQ0MzAwMTI2NAorOjEwMzk1MDAwQTQ0MzAwMTQwM0UwMDAwOEE0NDMwMDE2OEY4MjAwMUM1NworOjEwMzk2MDAwMjdCREZGRDhBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQzMQorOjEwMzk3MDAwQUZCMDAwMTBBRkJGMDAyMDhDNDcwMDBDMjQ4MjAwODA0NQorOjEwMzk4MDAwMjQwOUZGODAzQzA4ODAwRTMwNDMwMDdGMDA4MDgwMjFBNgorOjEwMzk5MDAwM0MwQTgwMDAwMDQ5MjAyNDAwNjgxODIxMzBCMTAwRkY1MworOjEwMzlBMDAwMzBEMjAwRkYxMEUwMDAyOTAwMDA5ODIxMjYwMjAxMDAxQgorOjEwMzlCMDAwQUQ0NDAwMkMwMDQ5MjgyNDMwNDIwMDdGMDA0ODIwMjFEQgorOjEwMzlDMDAwOTA2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDRDMgorOjEwMzlEMDAwMDAwMDAwMDBBRDQ1MDAyQzk0ODIwMERBMzA1M0ZGRkY1OAorOjEwMzlFMDAwMEUwMDBENDUwMDAwMDAwMDhGODIwMDFDOEY4MzAwMTgyMAorOjEwMzlGMDAwMDAxMTJDMDA5NDQyMDAxRTAwMTIyNDAwMzQ4NDAwMDFBNworOjEwM0EwMDAwMDBBMjI4MjUzQzAyNDAwMDAwQTIyODI1QUM3MDAwMDAzRQorOjEwM0ExMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4QUM3MzAwMDhBOAorOjEwM0EyMDAwOEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDQUM2NDAwMTBBQworOjEwM0EzMDAwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxQUM2MDAwMThDQQorOjEwM0E0MDAwMjdCRDAwMjgwQTAwMEQ3OUFDNjUwMDFDOEZCRjAwMjAzRgorOjEwM0E1MDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQworOjEwM0E2MDAwMDNFMDAwMDgyN0JEMDAyODNDMDY4MDAwMzRDMjAxMDBBNgorOjEwM0E3MDAwOTA0MzAwMEYyNDAyMDAxMDEwNjIwMDBFMjg2NTAwMTExMAorOjEwM0E4MDAwMTBBMDAwMDcyNDAyMDAxMjI0MDIwMDA4MjQwNTAwM0FCNgorOjEwM0E5MDAwMTA2MjAwMDYwMDAwMzAyMTAzRTAwMDA4MDAwMDAwMDA3MgorOjEwM0FBMDAwMjQwNTAwMzUxNDYyRkZGQzAwMDAzMDIxMEEwMDBFMjVCOQorOjEwM0FCMDAwMDAwMDAwMDA4Q0MyMDA3NDhGODNGRkE4MjQ0MjBGQTA3NgorOjEwM0FDMDAwMDNFMDAwMDhBQzYyMDAwQzI3QkRGRkU4QUZCRjAwMTBBOAorOjEwM0FEMDAwMEUwMDAzNTUyNDA1MDAwMTNDMDQ4MDA4OEZCRjAwMTAzMAorOjEwM0FFMDAwMjQwMjAwMDEzNDgzMDA4MEE0NjIwMDEyMjdCRDAwMTg2NAorOjEwM0FGMDAwMjQwMjAwMDEwM0UwMDAwOEEwODAwMDFBMjdCREZGRTBCNworOjEwM0IwMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUNDRgorOjEwM0IxMDAwMzBCMkZGRkYwRTAwMDM0NTAwODA4ODIxM0MwMjgwMDg4MAorOjEwM0IyMDAwMzQ1MDAwODA5MjAyMDAwOTI0MDMwMDA0MzA0MjAwRkY1OAorOjEwM0IzMDAwMTQ0MzAwMEMzQzAyODAwODEyNDAwMDA4MjQwMjAwMEFEMgorOjEwM0I0MDAwMEUwMDBFMUMwMDAwMDAwMDkyMDIwMDA1MjQwM0ZGRkU4MAorOjEwM0I1MDAwMDA0MzEwMjRBMjAyMDAwNTI0MDIwMDEyQTIwMjAwMDk2MAorOjEwM0I2MDAwM0MwMjgwMDgzNDQyMDA4MDAyMjAyMDIxMEUwMDAzNTBENQorOjEwM0I3MDAwQTA0MDAwMjcxNjQwMDAwMzAyMjAyMDIxMEUwMDBFODBFNgorOjEwM0I4MDAwMDAwMDAwMDAwMjIwMjAyMTMyNDYwMEZGOEZCRjAwMUNGMQorOjEwM0I5MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzhDOAorOjEwM0JBMDAwMEEwMDBFMjUyN0JEMDAyMDI3QkRGRkUwQUZCRjAwMUM4NworOjEwM0JCMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMEUwMDAzNDU1MworOjEwM0JDMDAwMDA4MDgwMjEwRTAwMEUxQzAwMDAwMDAwM0MwMjgwMDhENgorOjEwM0JEMDAwMzQ0NTAwODA5MEEyMDAwOTI0MTIwMDE4MzA1MTAwRkZFMworOjEwM0JFMDAwMTIzMjAwMDMwMjAwMjAyMTI0MDIwMDEyQTBBMjAwMDlDOAorOjEwM0JGMDAwOTBBMjAwMDUyNDAzRkZGRTAwNDMxMDI0MEUwMDAzNTA5MgorOjEwM0MwMDAwQTBBMjAwMDUwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDc5MgorOjEwM0MxMDAwMDAwMDMwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQzQworOjEwM0MyMDAwOEZCMDAwMTAwQTAwMDM1NTI3QkQwMDIwOEZCRjAwMUM3NQorOjEwM0MzMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzkyNgorOjEwM0M0MDAwMEEwMDBFMjUyN0JEMDAyMDI3QkRGRkU4M0MwMjgwMDBBQQorOjEwM0M1MDAwQUZCMDAwMTBBRkJGMDAxNDM0NDIwMTAwOTQ0MjAwMEMxQQorOjEwM0M2MDAwMjQwNTAwMzYwMDgwODAyMTE0NDAwMDEyMzA0NjAwRkZGOQorOjEwM0M3MDAwMEUwMDAzNDUwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODAzMgorOjEwM0M4MDAwMjQwMzAwMTJBMDQzMDAwOTkwNDMwMDA1MzQ2MzAwMTA5MAorOjEwM0M5MDAwMEUwMDBFMUNBMDQzMDAwNTBFMDAwMzUwMDIwMDIwMjE2MAorOjEwM0NBMDAwMDIwMDIwMjEwRTAwMDM1NTI0MDUwMDIwMEEwMDBFRkQwRAorOjEwM0NCMDAwMDAwMDAwMDAwRTAwMEUyNTAwMDAwMDAwMEUwMDAzNDU2RAorOjEwM0NDMDAwMDIwMDIwMjEzQzAyODAwODkwNDMwMDFCMjQwNUZGOUYzNgorOjEwM0NEMDAwMDIwMDIwMjEwMDY1MTgyNDhGQkYwMDE0OEZCMDAwMTA0RgorOjEwM0NFMDAwQTA0MzAwMUIwQTAwMDM1MDI3QkQwMDE4MjdCREZGRTBCQQorOjEwM0NGMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzBCMTAwRkY3QgorOjEwM0QwMDAwMEUwMDAzNDUwMDgwODAyMTNDMDI4MDA4MjQwMzAwMTIzRAorOjEwM0QxMDAwMzQ0MjAwODAwRTAwMEUxQ0EwNDMwMDA5MEUwMDAzNTAyOAorOjEwM0QyMDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMTgzNAorOjEwM0QzMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDBFMjU0NQorOjEwM0Q0MDAwMjdCRDAwMjAzQzA0ODAwODkwODMwMDBFOTA4MjAwMEE2QQorOjEwM0Q1MDAwMTQ0MzAwMEIwMDAwMjgyMThGODJGRkE4MjQwMzAwNTA4OQorOjEwM0Q2MDAwMjQwNTAwMDE5MDQyMDAwMDMwNDIwMEZGMTQ0MzAwMDQ4QgorOjEwM0Q3MDAwMDAwMDAwMDA5MDgyMDAwRTI0NDIwMDAxQTA4MjAwMEU4QworOjEwM0Q4MDAwMDNFMDAwMDgwMEEwMTAyMTNDMDM4MDAwOEM2MjAxRjhEMQorOjEwM0Q5MDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQyMgorOjEwM0RBMDAwM0MwMjEwMDAwM0UwMDAwOEFDNjIwMUY4MjdCREZGRTAxMAorOjEwM0RCMDAwQUZCMjAwMTgzQzEyODAwOEFGQjEwMDE0QUZCRjAwMUNCNgorOjEwM0RDMDAwQUZCMDAwMTAzNjUxMDA4MDkyMjIwMDA5MjQwMzAwMEE4RgorOjEwM0REMDAwMzA0MjAwRkYxNDQzMDAzRTAwMDAwMDAwOEU0MzAwMDQwOAorOjEwM0RFMDAwOEUyMjAwMzg1MDYyMDA4MDhGQkYwMDFDOTIyMjAwMDA5QgorOjEwM0RGMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDI1M0MwMjgwMDBBMQorOjEwM0UwMDAwOEM0MjAxNDA4RTQzMDAwNDM2NDIwMTAwMDIyMDI4MjFFQQorOjEwM0UxMDAwQUM0MzAwMUM5NjIyMDA1QzhFMjMwMDM4MzA0MkZGRkYyQQorOjEwM0UyMDAwMDAwMjEwNDAwMDYyMTgyMUFFMjMwMDFDOEU0MzAwMDRFMworOjEwM0UzMDAwOEUyNDAwMzg5NjIyMDA1QzAwNjQxODIzMzA0MkZGRkY3NQorOjEwM0U0MDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDZFRgorOjEwM0U1MDAwMDAwMDAwMDA4RTQyMDAwNDhFMjMwMDM4MDA0MzEwMjMyRgorOjEwM0U2MDAwMEEwMDBGNkIwMDAyMjA0Mzk2MjIwMDVDMzA0MkZGRkZFNQorOjEwM0U3MDAwMDAwMjIwNDAzQzAyODAwODM0NDMwMTAwMzQ0MjAwODBBQworOjEwM0U4MDAwQUNBNDAwMkNBMDQwMDAyNDI0MDIwMDAxQTA2MjAwMEM3RAorOjEwM0U5MDAwMEUwMDBGMUYwMDAwMDAwMDEwNDAwMDUzOEZCRjAwMUNEOQorOjEwM0VBMDAwM0MwMjgwMDA4QzQ0MDE0MDNDMDM4MDAwOEM2MjAxRjg5RAorOjEwM0VCMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQwMQorOjEwM0VDMDAwM0MwMjEwMDBBQzYyMDFGODBBMDAwRkM4OEZCRjAwMUM1MgorOjEwM0VEMDAwOTIyMjAwMDkyNDAzMDAxMDMwNDIwMEZGMTQ0MzAwMDQyMgorOjEwM0VFMDAwM0MwMjgwMDA4QzQ0MDE0MDBBMDAwRkFGMDAwMDI4MjFGMgorOjEwM0VGMDAwOTIyMjAwMDkyNDAzMDAxNjMwNDIwMEZGMTQ0MzAwMDZGQQorOjEwM0YwMDAwMjQwMjAwMTRBMjIyMDAwOTNDMDI4MDAwOEM0NDAxNDBEQgorOjEwM0YxMDAwMEEwMDBGQzI4RkJGMDAxQzhFMjIwMDM4OEUyMzAwM0M4NworOjEwM0YyMDAwMDA0MzEwMjMwNDQxMDAzMDhGQkYwMDFDOTIyMjAwMjc2MQorOjEwM0YzMDAwMjQ0MjAwMDFBMjIyMDAyNzkyMjIwMDI3MkM0MjAwMDRFMgorOjEwM0Y0MDAwMTQ0MDAwMTYzQzEwODAwMDkyMjIwMDA5MjQwMzAwMDQ1MworOjEwM0Y1MDAwMzA0MjAwRkYxNDQzMDAwOTNDMDI4MDAwOEM0NDAxNDBDMQorOjEwM0Y2MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBFQgorOjEwM0Y3MDAwMjQwNTAwOTMwQTAwMEU4RDI3QkQwMDIwOEM0NDAxNDBDQgorOjEwM0Y4MDAwMjQwNTAwOTM4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ1RQorOjEwM0Y5MDAwOEZCMDAwMTAwQTAwMEYwOTI3QkQwMDIwOEUwNDAxNDBEOQorOjEwM0ZBMDAwMEUwMDAzNDUwMDAwMDAwMDhFNDIwMDA0MjQ0MkZGRkY4MworOjEwM0ZCMDAwQUU0MjAwMDQ4RTIyMDAzQzI0NDJGRkZGQUUyMjAwM0NCMQorOjEwM0ZDMDAwMEUwMDAzNTA4RTA0MDE0MDhFMDQwMTQwOEZCRjAwMUM4MAorOjEwM0ZEMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDRCOAorOjEwM0ZFMDAwMEEwMDAzNTUyN0JEMDAyMDhGQjIwMDE4OEZCMTAwMTRCRQorOjEwM0ZGMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwM0MwNjgwMDBDMQorOjEwNDAwMDAwOENDMjAxODgzQzAzODAwODM0NjUwMDgwOTA2MzAwMEVGOAorOjEwNDAxMDAwMDAwMjE0MDIzMDQ0MDBGRjMwNjMwMEZGMTQ2NDAwMEVGRAorOjEwNDAyMDAwM0MwMjgwMDg5MEEyMDAyNjMwNDIwMEZGMTA0NDAwMDlBNAorOjEwNDAzMDAwOEY4MkZGQThBMEE0MDAyNjI0MDMwMDUwOTA0MjAwMDAxNQorOjEwNDA0MDAwMzA0MjAwRkYxNDQzMDAwNjAwMDAwMDAwMEEwMDA1OEQwNgorOjEwNDA1MDAwOENDNDAxODAzQzAyODAwODM0NDIwMDgwQTA0NDAwMjZDOQorOjEwNDA2MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwMzBFNzAwRkY4QworOjEwNDA3MDAwQUZCMjAwMThBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTA1QQorOjEwNDA4MDAwMDA4MDkwMjExNEUwMDAwNjMwQzYwMEZGMDAwMDAwMDAxMAorOjEwNDA5MDAwMDAwMDAwMEQwMDAwMDAwMDBBMDAxMDIxMjQwMDAxMEVBNQorOjEwNDBBMDAwM0MwMzgwMDg5MDYyMDAwRTMwNDIwMEZGMTQ0NjAwMjM1QgorOjEwNDBCMDAwMzQ2MjAwODA5MDQyMDAyNjMwNDIwMEZGMTQ0NjAwMUYwOAorOjEwNDBDMDAwMDAwMDAwMDA5MDYyMDAwRjMwNDIwMEZGMTQ0NjAwMUIwOQorOjEwNDBEMDAwMDAwMDAwMDA5MDYyMDAwQTMwNDIwMEZGMTQ0NjAwMDMxNgorOjEwNDBFMDAwOEY5MEZGQTgwMDAwMDAwRDhGOTBGRkE4OEY4MkZGQUM3QgorOjEwNDBGMDAwM0MxMTgwMDBBRTA1MDAzQ0FDNDUwMDAwQTA2NjAwMEEwMworOjEwNDEwMDAwMEUwMDAzNDU4RTI0MDEwMEEyMDAwMDI0MEUwMDAzNTA3RgorOjEwNDExMDAwOEUyNDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUwNQorOjEwNDEyMDAwMjQwMjAwMDJBQzcyMDFDMEEwNjIwMUM0M0MwMjEwMDA3MworOjEwNDEzMDAwQUM2MjAxRjgwQTAwMTAyMjhGQkYwMDFDMDAwMDAwMDBEMgorOjEwNDE0MDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMTM3OEZCRjAwMUM5QworOjEwNDE1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg3OAorOjEwNDE2MDAwMjdCRDAwMjA4RjgzRkZBODNDMDI4MDAwOEM0NDAxMDAwMworOjEwNDE3MDAwMzQ0MjAxMDA4QzY1MDAzQzkwNDYwMDFCMEEwMDBGRThBOQorOjEwNDE4MDAwMjQwNzAwMDEzQzAyODAwODkwNDMwMDBFOTA0MjAwMEE4MAorOjEwNDE5MDAwMDA0MzEwMjYzMDQyMDBGRjAzRTAwMDA4MDAwMjEwMkIwRAorOjEwNDFBMDAwMjdCREZGRTAzQzAyODAwOEFGQjEwMDE0QUZCMDAwMTBBMworOjEwNDFCMDAwQUZCRjAwMTgzNDUwMDA4MDkyMDIwMDA1MjQwMzAwMzA4NQorOjEwNDFDMDAwMzA0MjAwMzAxNDQzMDA4NTAwODA4ODIxOEY4MjAwMUMxQgorOjEwNDFEMDAwOEM0MjAwMEMxMDQwMDA4MjhGQkYwMDE4MEUwMDBENDU2RAorOjEwNDFFMDAwMDAwMDAwMDA4Rjg2MDAxOEFDRDEwMDAwOTIwMjAwMDg4OQorOjEwNDFGMDAwOTIwMzAwMDkzMDQyMDBGRjAwMDIxMjAwMzA2MzAwRkYwQQorOjEwNDIwMDAwMDA0MzEwMjVBQ0MyMDAwNDkyMDIwMDREMDAwMjE2MDBDQgorOjEwNDIxMDAwMDAwMjE2MDMwNDQxMDAwNTAwMDAwMDAwM0MwMzA4MDBGMgorOjEwNDIyMDAwOEM2MzAwNDgwQTAwMTA2MDNDMTA4MDA4OTIwMjAwMDg2RAorOjEwNDIzMDAwMzA0MjAwNDAxNDQwMDAwMzAwMDAxODIxOTIwMjAwMjc4MQorOjEwNDI0MDAwMzA0MzAwRkYzQzEwODAwODM2MTEwMDgwOTIyMjAwNEQ2MAorOjEwNDI1MDAwMDAwMzFFMDAzMDQyMDBGRjAwMDIxNDAwMDA2MjE4MjUxNworOjEwNDI2MDAwQUNDMzAwMDg4RTI0MDAzMDhGODIwMDFDQUNDNDAwMEM0QworOjEwNDI3MDAwOEUyNTAwMzQ5NDQzMDAxRTNDMDJDMDBCQUNDNTAwMTBEOAorOjEwNDI4MDAwMDA2MjE4MjU4RTIyMDAzODAwMDAyMDIxQUNDMjAwMTRFNAorOjEwNDI5MDAwOEUyMjAwM0NBQ0MyMDAxODBFMDAwRDc5QUNDMzAwMUM4RAorOjEwNDJBMDAwOEUwMjAwMDQ4Rjg0MDAxODNDMDU4MDAwQUM4MjAwMDA2MAorOjEwNDJCMDAwOEUyMjAwMjBBQzgyMDAwNDhFMjIwMDFDQUM4MjAwMDhGQQorOjEwNDJDMDAwOEUyMjAwNTg4Q0EzMDA3NDAwNDMxMDIxQUM4MjAwMEM5NQorOjEwNDJEMDAwOEUyMjAwMkNBQzgyMDAxMDhFMjIwMDQwOEUyMzAwNDRERgorOjEwNDJFMDAwMDAwMjE0MDAwMDQzMTAyNUFDODIwMDE0OTIyMjAwNERGRAorOjEwNDJGMDAwMjQwMzAwODAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDA0QgorOjEwNDMwMDAwQUM4MDAwMTgwQTAwMTBBNDhGODIwMDFDOEUyMzAwMENDMQorOjEwNDMxMDAwMjQwMjAwMDExMDYyMDAwRTI0MDJGRkZGOTIyMjAwMDgxNgorOjEwNDMyMDAwMzA0MjAwNDAxNDQwMDAwQTI0MDJGRkZGOEUyMzAwMEM5QworOjEwNDMzMDAwOENBMjAwNzQwMDYyMTgyMzNDMDIwODAwMDA2MjEwMjQ2MgorOjEwNDM0MDAwMTQ0MDAwMDIwMDAwMjgyMTAwNjAyODIxMDAwNTEwNDNDRAorOjEwNDM1MDAwQUM4MjAwMTg4RjgyMDAxQzAwMDAyMDIxOTQ0MzAwMUVCNAorOjEwNDM2MDAwM0MwMkMwMEMwMDYyMTgyNThGODIwMDE4MEUwMDBENzlFNworOjEwNDM3MDAwQUM0MzAwMUMzQzAzODAwODM0NjIwMTAwOEM0MjAwMDAwNgorOjEwNDM4MDAwOEY4NTAwMTgzNDYzMDA4MDhGQkYwMDE4QUNBMjAwMDAzNgorOjEwNDM5MDAwQUNBMDAwMDQ4QzY0MDA0ODhGODIwMDFDOEZCMTAwMTQxNAorOjEwNDNBMDAwQUNBNDAwMDhBQ0EwMDAwQ0FDQTAwMDEwOTA2MzAwMDUwOQorOjEwNDNCMDAwOTQ0NjAwMUUzQzAyNDAwRDAwMDMxRTAwMDBDMjMwMjU0MgorOjEwNDNDMDAwQUNBMzAwMTQ4RkIwMDAxMEFDQTAwMDE4MjQwNDAwMDFBRQorOjEwNDNEMDAwQUNBNjAwMUMwQTAwMEQ3OTI3QkQwMDIwOEZCRjAwMTg3NQorOjEwNDNFMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzQgorOjEwNDNGMDAwM0MwMjgwMDA5NDQzMDA3QzNDMDI4MDA4MzQ0NjAxMDA2QgorOjEwNDQwMDAwMzA4NDAwRkYzMDY1RkZGRjI0MDIwMDA1MjRBMzQ2NTBERQorOjEwNDQxMDAwQTBDNDAwMEM1NDgyMDAwQzMwNjVGRkZGOTBDMjAwMEQ1OAorOjEwNDQyMDAwMkM0MjAwMDcxMDQwMDAwNzI0QTMwQTAwOTBDMzAwMEQ4RgorOjEwNDQzMDAwMjQwMjAwMTQwMDYyMTAwNDAwQTIxMDIxMEEwMDEwRTBGRgorOjEwNDQ0MDAwMzA0NUZGRkYzMDY1RkZGRjNDMDI4MDA4MzQ0MjAwODBBQQorOjEwNDQ1MDAwMDNFMDAwMDhBNDQ1MDAxNDNDMDM4MDA4MzQ2ODAwODA5MQorOjEwNDQ2MDAwQUQwNTAwMzgzNDY3MDEwMDhDRTIwMDFDMzA4NDAwRkY4OQorOjEwNDQ3MDAwMDBBMjEwMjMxODQwMDAwMzMwQzYwMEZGMjRBMkZGRkM1NgorOjEwNDQ4MDAwQUNFMjAwMUMzMDgyMDAwMTUwNDAwMDA4M0MwMzgwMDg3MAorOjEwNDQ5MDAwOEQwMjAwM0MwMEEyMTAyMzA0NDEwMDEyMjQwNDAwMDVGOAorOjEwNDRBMDAwOEM2MjAwMDQxMEEyMDAwRjNDMDM4MDA4OEM2MjAwMDRBMAorOjEwNDRCMDAwMTRBMjAwMUUwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDgzQworOjEwNDRDMDAwMzA0MjAwMjAxMDQwMDAwOTNDMDI4MDA4MzQ2MjAwODAyNQorOjEwNDREMDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA0M0MwMjgwMDhBMgorOjEwNDRFMDAwMjQwNDAwMDQwQTAwMTBDQTAwMDAwMDAwMzQ0MzAwODBDNQorOjEwNDRGMDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQxOAorOjEwNDUwMDAwMTBDMDAwMEEzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4MworOjEwNDUxMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzA3QQorOjEwNDUyMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MDNFMDAwMDg4NAorOjEwNDUzMDAwMDAwMDAwMDAyN0JERkZFODAwQTYxODIzQUZCRjAwMTA1MQorOjEwNDU0MDAwMTg2MDAwODAzMDg4MDBGRjNDMDI4MDA4MzQ0NzAwODBGQgorOjEwNDU1MDAwQTBFMDAwMjQzNDQ0MDEwMEEwRTAwMDI3OEM4MjAwMUM2RAorOjEwNDU2MDAwMDBBMjEwMjMwNDQwMDA1NjAwMDAwMDAwOENFMjAwM0MzMgorOjEwNDU3MDAwOTRFMzAwNUM4Q0U0MDAyQzAwNDUzMDIzMzA2M0ZGRkZBMworOjEwNDU4MDAwMDBDMzE4MjEwMDgzMjAyQjEwODAwMDA0MDBFMDE4MjFCNAorOjEwNDU5MDAwOENFMjAwMkMwQTAwMTEzOTAwQTIxMDIxOTRFMjAwNUM4OAorOjEwNDVBMDAwMzA0MkZGRkYwMEMyMTAyMTAwQTIxMDIxQUM2MjAwMUNBQgorOjEwNDVCMDAwM0MwMjgwMDgzNDQ0MDA4MDk0ODIwMDVDOEM4MzAwMUNBMAorOjEwNDVDMDAwMzA0MkZGRkYwMDAyMTA0MDAwQTIxMDIxMDA0MzEwMkJEOAorOjEwNDVEMDAwMTA0MDAwMDQwMDAwMDAwMDhDODIwMDFDMEEwMDExNENGNgorOjEwNDVFMDAwM0MwNjgwMDg5NDgyMDA1QzMwNDJGRkZGMDAwMjEwNDBDRAorOjEwNDVGMDAwMDBBMjEwMjEzQzA2ODAwODM0QzMwMTAwMzRDNzAwODBBQgorOjEwNDYwMDAwQUM4MjAwMUNBMDYwMDAwQ0FDRTUwMDM4OEM2MjAwMUM4MQorOjEwNDYxMDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUM2MjAwMUM4MAorOjEwNDYyMDAwMzEwMjAwMDExMDQwMDAwODNDMDM4MDA4OENFMjAwM0M4RAorOjEwNDYzMDAwMDBBMjEwMjMwNDQxMDAxMjI0MDQwMDA1OENDMjAwMDRDRgorOjEwNDY0MDAwMTBBMjAwMTA4RkJGMDAxMDhDNjIwMDA0MTRBMjAwNEY1MworOjEwNDY1MDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjA3RQorOjEwNDY2MDAwMTA0MDAwMEEzQzAyODAwODM0NjIwMDgwOTA2MzAwMDgxOQorOjEwNDY3MDAwOTA0MjAwNEMxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDRDRQorOjEwNDY4MDAwOEZCRjAwMTAwQTAwMTBDQTI3QkQwMDE4MzQ0MzAwODBGNQorOjEwNDY5MDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQ3NgorOjEwNDZBMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjhENQorOjEwNDZCMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMTk5MDAwMDAwMDBERAorOjEwNDZDMDAwOENFMjAwMUMwMDQ2MTAyMzAwNDMxMDJCNTQ0MDAwMDFENAorOjEwNDZEMDAwQUNFNTAwMUM5NEUyMDA1QzMwNDJGRkZGMDA2MjEwMkI0RQorOjEwNDZFMDAwMTQ0MDAwMDcyNDAyMDAwMjk0RTIwMDVDOENFMzAwMUNFQQorOjEwNDZGMDAwMzA0MkZGRkYwMDYyMTgyMUFDRTMwMDFDMjQwMjAwMDJEQworOjEwNDcwMDAwQUNFNTAwMzgwRTAwMEYxRkEwODIwMDBDMTA0MDAwMUYwNworOjEwNDcxMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBFRAorOjEwNDcyMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzA2OAorOjEwNDczMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDExQjE5MQorOjEwNDc0MDAwOEZCRjAwMTAzMTAyMDAxMDEwNDAwMDEwOEZCRjAwMTAwQQorOjEwNDc1MDAwM0MwMjgwMDgzNDQ1MDA4MDhDQTMwMDFDOTRBMjAwNUNCRAorOjEwNDc2MDAwMDA2NjE4MjMzMDQyRkZGRjAwNjIxODIxM0MwMjNGRkYyMQorOjEwNDc3MDAwMzQ0NEZGRkYwMDgzMTAyQjU0NDAwMDAxMDA4MDE4MjFCNworOjEwNDc4MDAwMDBDMzEwMjFBQ0EyMDAxQzhGQkYwMDEwMDNFMDAwMDg4MgorOjEwNDc5MDAwMjdCRDAwMTgyN0JERkZFODAwQzA0MDIxMDBBNjMwMjMzOAorOjEwNDdBMDAwQUZCRjAwMTAxOEMwMDAyNjMwOEEwMEZGM0MwMjgwMDgwRQorOjEwNDdCMDAwMzQ0OTAwODA4RDI0MDAxQzhEMjMwMDJDMDA4ODIwMjM4OAorOjEwNDdDMDAwMDA2NDE4MkIxMDYwMDAwRjM0NDcwMTAwOENFMjAwMjBCOQorOjEwNDdEMDAwMDA0NjEwMjFBQ0UyMDAyMDhDRTIwMDIwMDA0NDEwMkJBNworOjEwNDdFMDAwMTQ0MDAwMEIzQzAyM0ZGRjhDRTIwMDIwMDA0NDEwMjNFOQorOjEwNDdGMDAwQUNFMjAwMjA5NTIyMDA1QzMwNDJGRkZGMEEwMDExRDE5QworOjEwNDgwMDAwMDA4MjIwMjFBQ0UwMDAyMDAwODYyMDIxM0MwMjNGRkZGNgorOjEwNDgxMDAwMzQ0M0ZGRkYwMDY0MTAyQjU0NDAwMDAxMDA2MDIwMjE0RQorOjEwNDgyMDAwM0MwMjgwMDgzNDQyMDA4MDAwODUxODIxQUM0MzAwMUMwMworOjEwNDgzMDAwQTA0MDAwMjRBMDQwMDAyNzBBMDAxMjIzM0MwMzgwMDg2NworOjEwNDg0MDAwMzE0MjAwMTAxMDQwMDA0MzNDMDM4MDA4M0MwNjgwMDhDMQorOjEwNDg1MDAwMzRDNDAwODA4QzgyMDAzQzAwNDgxMDIzNTg0MDAwM0U0NQorOjEwNDg2MDAwMzQ2NjAwODA5MDgyMDAyNDI0NDIwMDAxQTA4MjAwMjQ0QgorOjEwNDg3MDAwOTA4MjAwMjQzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkYzNworOjEwNDg4MDAwMDA0MzEwMkIxNDQwMDA2ODhGQkYwMDEwMzRDMjAxMDA5OQorOjEwNDg5MDAwOEM0MjAwMUMwMEEyMTAyMzE4NDAwMDYzMDAwMDAwMDA5RQorOjEwNDhBMDAwOENDMzAwMDQ5NDgyMDA1QzAwNjgxODIzMzA0MkZGRkYzMAorOjEwNDhCMDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDU3NgorOjEwNDhDMDAwMDAwMDAwMDA4Q0MyMDAwNDAwNDgxMDIzMEEwMDEyMDZGOQorOjEwNDhEMDAwMDAwMjEwNDM5NDgyMDA1QzMwNDJGRkZGMDAwMjEwNDA0RgorOjEwNDhFMDAwM0MwNjgwMDhBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUM5OQorOjEwNDhGMDAwOENBNDAwMkM5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDAwNworOjEwNDkwMDAwMDA4MjIwMjEzMDYzRkZGRjAwODMyMDIxMDEwNDEwMjE1OQorOjEwNDkxMDAwQUNBMjAwMUM4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUM1NgorOjEwNDkyMDAwMjQwMjAwMDIwRTAwMEYxRkEwQzIwMDBDMTA0MDAwM0UyNworOjEwNDkzMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBDQgorOjEwNDk0MDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDEyNTNBOAorOjEwNDk1MDAwMDAwMDAwMDAzNDY2MDA4MEFDQzUwMDM4MzQ2NDAxMDBGQgorOjEwNDk2MDAwOEM4MjAwMUMwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkMyRAorOjEwNDk3MDAwQUM4MjAwMUMzMTQyMDAwMTUwNDAwMDBBM0MwMzgwMDgxOAorOjEwNDk4MDAwOENDMjAwM0MwMEEyMTAyMzA0NDMwMDE0MjQwNDAwMDU0MAorOjEwNDk5MDAwOEM2MjAwMDQxNEEyMDAwMzNDMDM4MDA4MEEwMDEyNDU0NAorOjEwNDlBMDAwMjQwNDAwMDU4QzYyMDAwNDE0QTIwMDFGOEZCRjAwMTBCNQorOjEwNDlCMDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEExRgorOjEwNDlDMDAwM0MwMjgwMDgzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNENGMgorOjEwNDlEMDAwMTQ0MzAwMDUzQzAyODAwODI0MDQwMDA0OEZCRjAwMTAyQgorOjEwNDlFMDAwMEEwMDEwQ0EyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDA3OQorOjEwNDlGMDAwQTA0MDAwMEMyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDBDQworOjEwNEEwMDAwOEM0NDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkVFRQorOjEwNEExMDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDA4OAorOjEwNEEyMDAwQUM2MjAxRjg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgzQQorOjEwNEEzMDAwMjdCREZGRTgzQzBBODAwOEFGQkYwMDEwMzU0OTAwODA2MQorOjEwNEE0MDAwOEQyMjAwM0MwMEMwNDAyMTMwODQwMEZGMDA0NjEwMjMyRQorOjEwNEE1MDAwMTg0MDAwOUQzMEU3MDBGRjM1NDcwMTAwMjQwMjAwMDFBNworOjEwNEE2MDAwMDBBNjMwMjNBMEUwMDAwQ0EwRTAwMDBEQTUyMjAwMTQ1OQorOjEwNEE3MDAwMThDMDAwMjQzMDgyMDAxMDhEMjMwMDFDOEQyMjAwMkNEMQorOjEwNEE4MDAwMDA2ODE4MjMwMDQzMTAyQjEwNDAwMDBGMDAwMDAwMDBBNgorOjEwNEE5MDAwOENFMjAwMjAwMDQ2MTAyMUFDRTIwMDIwOENFMjAwMjBENQorOjEwNEFBMDAwMDA0MzEwMkIxNDQwMDAwQjNDMDIzRkZGOENFMjAwMjAxRgorOjEwNEFCMDAwMDA0MzEwMjNBQ0UyMDAyMDk1MjIwMDVDMzA0MkZGRkY0RgorOjEwNEFDMDAwMEEwMDEyODIwMDYyMTgyMUFDRTAwMDIwMDA2NjE4MjE2MgorOjEwNEFEMDAwM0MwMjNGRkYzNDQ2RkZGRjAwQzMxMDJCNTQ0MDAwMDE0RgorOjEwNEFFMDAwMDBDMDE4MjEzQzAyODAwODM0NDIwMDgwMDA2NTE4MjE3MworOjEwNEFGMDAwQUM0MzAwMUNBMDQwMDAyNEEwNDAwMDI3MEEwMDEyRDBCNAorOjEwNEIwMDAwM0MwMzgwMDgxMDQwMDA0MDNDMDM4MDA4OEQyMjAwM0M5QworOjEwNEIxMDAwMDA0ODEwMjM1ODQwMDAzRDM0NjcwMDgwOTEyMjAwMjQ1MworOjEwNEIyMDAwMjQ0MjAwMDFBMTIyMDAyNDkxMjIwMDI0M0MwMzA4MDAxOQorOjEwNEIzMDAwOEM2MzAwMjQzMDQyMDBGRjAwNDMxMDJCMTQ0MDAwOUE4NQorOjEwNEI0MDAwOEZCRjAwMTA4Q0UyMDAxQzAwQTIxMDIzMTg0MDAwOTZCQQorOjEwNEI1MDAwMDAwMDAwMDA4RDQzMDAwNDk1MjIwMDVDMDA2ODE4MjNDQgorOjEwNEI2MDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFBOAorOjEwNEI3MDAwMTA0MDAwMDUwMTIwMjAyMThENDIwMDA0MDA0ODEwMjMzMAorOjEwNEI4MDAwMEEwMDEyQjMwMDAyMTA0Mzk1MjIwMDVDMzA0MkZGRkY3RQorOjEwNEI5MDAwMDAwMjEwNDAzQzA2ODAwOEFDODIwMDJDMzRDNTAwODAyNgorOjEwNEJBMDAwOTRBMjAwNUM4Q0E0MDAyQzk0QTMwMDVDMzA0MkZGRkYxNAorOjEwNEJCMDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzE4MjE5MworOjEwNEJDMDAwMDEwMzEwMjFBQ0EyMDAxQzhDQzIwMDA0MzRDNjAxMDBGOQorOjEwNEJEMDAwQUNDMjAwMUMyNDAyMDAwMjBFMDAwRjFGQTBDMjAwMEM3OQorOjEwNEJFMDAwMTA0MDAwNzE4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAxNworOjEwNEJGMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBNgorOjEwNEMwMDAwMEEwMDEyRkEwMDAwMDAwMDM0NjcwMDgwQUNFNTAwMzhBQQorOjEwNEMxMDAwMzQ2NjAxMDA4Q0MyMDAxQzAwQTIxMDIzMTg0MDAwMDI2MAorOjEwNEMyMDAwMjRBMkZGRkNBQ0MyMDAxQzMwODIwMDAxNTA0MDAwMDhFRQorOjEwNEMzMDAwM0MwMzgwMDg4Q0UyMDAzQzAwQTIxMDIzMDQ0MzAwNTE5NgorOjEwNEM0MDAwMjQwNDAwMDU4QzYyMDAwNDEwQTIwMDNFM0MwMzgwMDg4RQorOjEwNEM1MDAwOEM2MjAwMDQ1NEEyMDA1NDhGQkYwMDEwM0MwMjA4MDA3NAorOjEwNEM2MDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDA2M0MwMjgwMDhGMAorOjEwNEM3MDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTA0MzAwNDA3MgorOjEwNEM4MDAwM0MwMjgwMDgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEMwNAorOjEwNEM5MDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDA0NAorOjEwNENBMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJGNQorOjEwNENCMDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwNworOjEwNENDMDAwMEEwMDEzMzg4RkJGMDAxMDI0MDIwMDA1QTEyMDAwMjcxRQorOjEwNENEMDAwMTRFMjAwMEEzQzAzODAwODM1NDMwMTAwOTA2MjAwMEQ5NQorOjEwNENFMDAwMkM0MjAwMDY1MDQwMDAwNTNDMDM4MDA4OTA2MjAwMERGNQorOjEwNENGMDAwMjQ0MjAwMDFBMDYyMDAwRDNDMDM4MDA4MzQ2NzAwODA1QworOjEwNEQwMDAwQUNFNTAwMzgzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMwMAorOjEwNEQxMDAwMTg0MDAwMDIyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDEzQgorOjEwNEQyMDAwNTA0MDAwMEEzQzAzODAwODhDRTIwMDNDMDBBMjEwMjNBMworOjEwNEQzMDAwMDQ0MTAwMTQyNDA0MDAwNThDNjIwMDA0MTRBMjAwMDM0MgorOjEwNEQ0MDAwM0MwMzgwMDgwQTAwMTMyRjI0MDQwMDA1OEM2MjAwMDQzMQorOjEwNEQ1MDAwMTRBMjAwMTU4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzRQorOjEwNEQ2MDAwMzA0MjAwMjAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODA3QgorOjEwNEQ3MDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDhGOAorOjEwNEQ4MDAwMjQwNDAwMDQ4RkJGMDAxMDBBMDAxMENBMjdCRDAwMThCOQorOjEwNEQ5MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDE5MgorOjEwNERBMDAwQTQ2MjAwMTQ4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBNAorOjEwNERCMDAwM0MwQjgwMDgyN0JERkZFODNDMDI4MDAwQUZCRjAwMTAxRAorOjEwNERDMDAwMzQ0MjAxMDAzNTZBMDA4MDkwNDQwMDBBMzU2OTAxMDBEMAorOjEwNEREMDAwOEM0NTAwMTQ4RDQ4MDAzODkxMjMwMDBDMzA4NDAwRkY2RQorOjEwNERFMDAwMDEwNTEwMjMxQzQwMDBCMzMwNjcwMEZGMkNFMjAwMDZEMQorOjEwNERGMDAwNTA0MDAwQjE4RkJGMDAxMDI0MDIwMDAxMDBFMjMwMDRENworOjEwNEUwMDAwMzBDMjAwMDM1NDQwMDAwODAwQTgzMDIzMzBDMjAwMEMxOAorOjEwNEUxMDAwMTQ0MDAwQTEzMEMyMDAzMDE0NDAwMEEzOEZCRjAwMTAyNgorOjEwNEUyMDAwMEEwMDEzRkMwMDAwMDAwMDE4QzAwMDI0MzA4MjAwMTBBQgorOjEwNEUzMDAwOEQ0MzAwMUM4RDQyMDAyQzAwNjgxODIzMDA0MzEwMkI2QQorOjEwNEU0MDAwMTA0MDAwMEYwMDAwMDAwMDhEMjIwMDIwMDA0NjEwMjFCRAorOjEwNEU1MDAwQUQyMjAwMjA4RDIyMDAyMDAwNDMxMDJCMTQ0MDAwMEJCNworOjEwNEU2MDAwM0MwMjNGRkY4RDIyMDAyMDAwNDMxMDIzQUQyMjAwMjA5MgorOjEwNEU3MDAwOTU0MjAwNUMzMDQyRkZGRjBBMDAxMzcwMDA2MjE4MjE2NworOjEwNEU4MDAwQUQyMDAwMjAwMDY2MTgyMTNDMDIzRkZGMzQ0NkZGRkZBMgorOjEwNEU5MDAwMDBDMzEwMkI1NDQwMDAwMTAwQzAxODIxM0MwMjgwMDhDMAorOjEwNEVBMDAwMzQ0MjAwODAwMDY1MTgyMUFDNDMwMDFDQTA0MDAwMjQ1RgorOjEwNEVCMDAwQTA0MDAwMjcwQTAwMTNCRTNDMDM4MDA4MTA0MDAwNDBCOQorOjEwNEVDMDAwM0MwMzgwMDg4RDQyMDAzQzAwNDgxMDIzMTg0MDAwM0QwMAorOjEwNEVEMDAwMzQ2NzAwODA5MTQyMDAyNDI0NDIwMDAxQTE0MjAwMjQ1MgorOjEwNEVFMDAwOTE0MjAwMjQzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkYwMAorOjEwNEVGMDAwMDA0MzEwMkIxNDQwMDA3MDhGQkYwMDEwOEQyMjAwMUM0NworOjEwNEYwMDAwMDBBMjEwMjMxODQwMDA2QzAwMDAwMDAwOEQ2MzAwMDQxNAorOjEwNEYxMDAwOTU0MjAwNUMwMDY4MTgyMzMwNDJGRkZGMDAwMzE4NDNFRAorOjEwNEYyMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDE0MDIwMjFEQgorOjEwNEYzMDAwOEQ2MjAwMDQwMDQ4MTAyMzBBMDAxM0ExMDAwMjEwNDNGMAorOjEwNEY0MDAwOTU0MjAwNUMzMDQyRkZGRjAwMDIxMDQwM0MwNjgwMDhBMgorOjEwNEY1MDAwQUM4MjAwMkMzNEM1MDA4MDk0QTIwMDVDOENBNDAwMkM5MAorOjEwNEY2MDAwOTRBMzAwNUMzMDQyRkZGRjAwMDIxMDQwMDA4MjIwMjEyOQorOjEwNEY3MDAwMzA2M0ZGRkYwMDgzMTgyMTAxMDMxMDIxQUNBMjAwMUM0NQorOjEwNEY4MDAwOENDMjAwMDQzNEM2MDEwMEFDQzIwMDFDMjQwMjAwMDIyMgorOjEwNEY5MDAwMEUwMDBGMUZBMEMyMDAwQzEwNDAwMDQ3OEZCRjAwMTA3MgorOjEwNEZBMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjhDQworOjEwNEZCMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxM0VFMDAwMDAwMDA3RAorOjEwNEZDMDAwMzQ2NzAwODBBQ0U1MDAzODM0NjYwMTAwOENDMjAwMUNGOAorOjEwNEZEMDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUNDMjAwMUM1NworOjEwNEZFMDAwMzA4MjAwMDE1MDQwMDAwQTNDMDM4MDA4OENFMjAwM0MwMworOjEwNEZGMDAwMDBBMjEwMjMwNDQzMDAxNDI0MDQwMDA1OEM2MjAwMDQ2MgorOjEwNTAwMDAwMTRBMjAwMDMzQzAzODAwODBBMDAxM0UwMjQwNDAwMDVGNgorOjEwNTAxMDAwOEM2MjAwMDQxNEEyMDAyODhGQkYwMDEwM0MwMjA4MDAxQworOjEwNTAyMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDgyOAorOjEwNTAzMDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDVFNQorOjEwNTA0MDAwM0MwMjgwMDgyNDA0MDAwNDhGQkYwMDEwMEEwMDEwQ0EyQworOjEwNTA1MDAwMjdCRDAwMTgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMENGQQorOjEwNTA2MDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDA3MAorOjEwNTA3MDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDIyMQorOjEwNTA4MDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgzMworOjEwNTA5MDAwMEEwMDEzRkM4RkJGMDAxMDhGQkYwMDEwMDEwMDMwMjFFOQorOjEwNTBBMDAwMEEwMDExMUIyN0JEMDAxODAxMDAzMDIxMEEwMDEyNUEwNgorOjEwNTBCMDAwMjdCRDAwMTg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBRgorOjEwNTBDMDAwM0MwMzgwMDgzNDY0MDEwMDI0MDIwMDAzQTA4MjAwMEMyOQorOjEwNTBEMDAwOEM2MjAwMDQwM0UwMDAwOEFDODIwMDFDM0MwNTgwMDhFMAorOjEwNTBFMDAwMzRBMzAwODA5MDYyMDAyNzM0QTUwMTAwMjQwNjAwNDMwOQorOjEwNTBGMDAwMjQ0MjAwMDFBMDYyMDAyNzkwNjMwMDI3M0MwMjA4MDBDMAorOjEwNTEwMDAwOEM0MjAwNDgzMDYzMDBGRjE0NjIwMDA0M0MwNzYwMjFCOQorOjEwNTExMDAwOTRBNTAwREEwQTAwMDhFRDMwQTVGRkZGMDNFMDAwMDhCRgorOjEwNTEyMDAwMDAwMDAwMDAyN0JERkZFOEFGQkYwMDEwM0MwMjgwMDA3OAorOjEwNTEzMDAwMEUwMDE0MDU4QzQ0MDE4MDNDMDI4MDA4MzQ0MzAxMDBCOQorOjEwNTE0MDAwQTA2MDAwMEM4QzQyMDAwNDhGQkYwMDEwMjdCRDAwMTgyNworOjEwNTE1MDAwMDNFMDAwMDhBQzYyMDAxQzI3QkRGRkUwM0MwMjgwMDhCMQorOjEwNTE2MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzQ0NTAwODBERAorOjEwNTE3MDAwMzQ0NjAxMDAzQzA4ODAwMDhEMDkwMTQwOTBDMzAwMENCQQorOjEwNTE4MDAwOENBNDAwM0M4Q0EyMDAzODE0ODIwMDNCMzA2NzAwRkZFNgorOjEwNTE5MDAwOTUwMjAwN0M5MEEzMDAyNzE0NjAwMDA5MzA0NUZGRkZCMgorOjEwNTFBMDAwMjQwMjAwMDU1NEUyMDAwODNDMDQ4MDA4OTBDMjAwMEQ2RgorOjEwNTFCMDAwMjQ0MjAwMDFBMEMyMDAwRDBBMDAxNDQwM0MwNDgwMDhGMworOjEwNTFDMDAwQTBDMDAwMEQzQzA0ODAwODM0ODIwMTAwOTA0MjAwMEMxNQorOjEwNTFEMDAwMjQwMzAwMDUzMDQyMDBGRjE0NDMwMDBBMjRBMjA1REMyQQorOjEwNTFFMDAwMzQ4MzAwODA5MDYyMDAyNzJDNDIwMDA3NTA0MDAwMDU2NQorOjEwNTFGMDAwMjRBMjBBMDA5MDYzMDAyNzI0MDIwMDE0MDA2MjEwMDQxNQorOjEwNTIwMDAwMDBBMjEwMjEzQzEwODAwODM2MTAwMDgwMzA0NUZGRkZCRQorOjEwNTIxMDAwMDEyMDIwMjEwRTAwMTQwNUE2MDUwMDE0OTYwMjAwNUM1MgorOjEwNTIyMDAwOEUwMzAwMzgzQzExODAwMDMwNDJGRkZGMDAwMjEwNDAyNgorOjEwNTIzMDAwMDA2MjE4MjFBRTAzMDAxQzBFMDAwMzQ1OEUyNDAxNDBCRAorOjEwNTI0MDAwOTIwMjAwMjUzNDQyMDA0MEEyMDIwMDI1MEUwMDAzNTBDNQorOjEwNTI1MDAwOEUyNDAxNDA4RTI0MDE0MDNDMDM4MDAwOEM2MjAxRjhDMgorOjEwNTI2MDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQzRAorOjEwNTI3MDAwM0MwMjEwMDBBQzYyMDFGODhGQkYwMDE4OEZCMTAwMTQxRgorOjBDNTI4MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwRTQKKzowNDUyOEMwMDgwMDgwMTAwOTUKKzoxMDUyOTAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEM4MDAwMDAzMjAwQzAKKzoxMDUyQTAwMDgwMDgwMjQwMDgwMDBFREMwODAwMEYzNDA4MDAwRjc4NjgKKzoxMDUyQjAwMDA4MDAxMDEwMDgwMDEwNTA4MDA4MDEwMDgwMDgwMDgwQ0QKKzowNDUyQzAwMDgwMDgwMDAwNjIKKzowQzUyQzQwMDBBMDAwMDIyMDAwMDAwMDAwMDAwMDAwMEIyCis6MTA1MkQwMDAwMDAwMDAwRDYzNzAzNTJFMzAyRTMwNkEzMzAwMDAwMDYwCis6MTA1MkUwMDAwNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTA1MkYwMDAwMDAwMDAwMDAwMDAwMDAwMzgwMDNDMDAwMDAwMDAwMDNBCis6MTA1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDdECis6MTA1MzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA1MzMwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMDM4MDAwMDAwMDAwMTEzCis6MTA1MzQwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTA1MzUwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDIwCis6MTA1MzYwMDAzQzAyMDgwMDI0NDI1NDI0M0MwMzA4MDAyNDYzNTY0Q0E5Cis6MTA1MzcwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNEI5Cis6MTA1MzgwMDAzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjEzQzEwMDgwMDI1Cis6MTA1MzkwMDAyNjEwMDA4ODNDMUMwODAwMjc5QzU0MjQwRTAwMDI4ODFDCis6MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDBEMDBBMDE4MjEwMDgwMTAyMTY2Cis6MTA1M0IwMDAwMDgwMjgyMTNDMDQ2MDAwM0MwNzYwMDAyNDA2MDAwOEFGCis6MTA1M0MwMDAxMDYwMDAwNjM0ODQyMDc4OEM0MjAwMDBBQ0UyMjAwODkzCis6MTA1M0QwMDA4QzYzMDAwMDAzRTAwMDA4QUNFMzIwMEMwQTAwMEUyQUY2Cis6MTA1M0UwMDAwMDAwMDAwMDI0MDMwMDQwM0MwMjYwMDAwM0UwMDAwOENECis6MTA1M0YwMDBBQzQzMjAwMDNDMDc2MDAwOEY4NjAwMDA4Q0U1MjA3NEUxCis6MTA1NDAwMDAwMDg2MTAyMTAwQTIxODJCMTQ2MDAwMDcwMDAwMjgyMTNDCis6MTA1NDEwMDA4RjhBRkQ5ODI0MDUwMDAxQTE0NDAwMTM4Rjg5MDAwMEE0Cis6MTA1NDIwMDAwMTI0NDAyMUFGODgwMDAwMDNFMDAwMDgwMEEwMTAyMTAzCis6MTA1NDMwMDA4Rjg0RkQ5ODhGODUwMDAwOTA4NjAwMTMzMEMzMDBGRjk1Cis6MTA1NDQwMDAwMEEzMTAyM0FGODIwMDAwMDNFMDAwMDhBMDgwMDAxMzM3Cis6MTA1NDUwMDA4Rjg0RkQ5ODI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNEU4Cis6MTA1NDYwMDA5MDg5MDAxMTkwODcwMDExMjQwMjAwMjgzMTI4MDBGRjQ0Cis6MTA1NDcwMDAzOTA2MDAyODMwRTMwMEZGMjQ4NTAwMkMyQ0QwMDAwMUUxCis6MTA1NDgwMDAxMDYyMDAxNjI0ODQwMDFDMEUwMDAwMzkwMDAwMDAwMDg5Cis6MTA1NDkwMDA4RjhGRkQ5ODNDMDU2MDAwMjQwMjAyMDQ5NUVFMDAzRUNCCis6MTA1NEEwMDA5NUVEMDAzQzAwMEU1QzAwMzFBQ0ZGRkYwMTZDNTAyNTE3Cis6MTA1NEIwMDBBQ0FBMjAxMDUyMDAwMDAxMjQwMjAwMDRBQ0EyMjAwMDdCCis6MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RkJGMDAxNDdBCis6MTA1NEQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgwQTAwMDA3MTFCCis6MTA1NEUwMDAwMDAwMjgyMThGODVGRDk4MjdCREZGRDhBRkJGMDAyMDgxCis6MTA1NEYwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEQyCis6MTA1NTAwMDAwMDgwOTgyMTkwQTQwMDExMjRCMDAwMUMyNEIxMDAyQzJDCis6MTA1NTEwMDAzMDgzMDBGRjM4NjIwMDI4MEUwMDAwNUIyQzUyMDAwMTJGCis6MTA1NTIwMDAwRTAwMDA2MzAwMDAwMDAwMDIwMDIwMjExMjQwMDAwMjczCis6MTA1NTMwMDAwMjIwMjgyMTAwMDAyODIxMEUwMDAwMzkwMDAwMDAwMDcwCis6MTA1NTQwMDA4RjhERkQ5ODNDMDg4MDAwM0MwNTYwMDA5NUFDMDAzRUM2Cis6MTA1NTUwMDA5NUFCMDAzQzAyNjgzMDI1MDAwQzRDMDAzMTZBRkZGRjFGCis6MTA1NTYwMDAwMTJBMzgyNUFDQTcyMDEwMjQwMjAyMDJBQ0E2MjAxNDgwCis6MTA1NTcwMDA1MjQwMDAwMTI0MDIwMDAyOEZCRjAwMjA4RkIzMDAxQ0E0Cis6MTA1NTgwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyODEzCis6MTA1NTkwMDAwM0UwMDAwOEFDQTIyMDAwMjdCREZGRTBBRkIyMDAxODc2Cis6MTA1NUEwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMzQzExNjAwMEUxCis6MTA1NUIwMDA4RTIzMjA3NDhGODIwMDAwMzBEMEZGRkYzMEYyRkZGRjc3Cis6MTA1NUMwMDAxMDYyMDAwQzI0MDYwMDhGMEUwMDAwMzkwMDAwMDAwMDVECis6MTA1NUQwMDAzQzA2ODAxRjAwMTA0NDAwMzRDNUZGMDAwMTEyMzgyNTJFCis6MTA1NUUwMDAyNDA0MDAwMkFFMjcyMDEwMDAwMDMwMjFBRTI1MjAxNDM0Cis6MTA1NUYwMDBBRTI0MjAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEEyCis6MTA1NjAwMDA4RkIwMDAxMDAwQzAxMDIxMDNFMDAwMDgyN0JEMDAyMDZCCis6MTA1NjEwMDAyN0JERkZFMEFGQjAwMDEwMzBEMEZGRkZBRkJGMDAxOEQ0Cis6MTA1NjIwMDBBRkIxMDAxNDBFMDAwMDM5MzBGMUZGRkYwMDEwMjQwMDZDCis6MTA1NjMwMDAwMDkxODAyNTNDMDM2MDAwQUM3MDIwMTA4RkJGMDAxOEUzCis6MTA1NjQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDRBQzYyMjAwMDVGCis6MTA1NjUwMDAyN0JEMDAyMDAzRTAwMDA4MDAwMDEwMjEyN0JERkZFODVGCis6MTA1NjYwMDAzQzBCNjAxOEFGQkYwMDEwOEQ2RjUwMDAyNDE4RkY3RkY3Cis6MTA1NjcwMDAzNDBDODA3MTAxRjg3MDI0MzVDRDM4MEMyNDBBMDAzMUM3Cis6MTA1NjgwMDAzQzA5ODAwMEFENkQ1MDAwM0MwODgwMEFBRDZDNTNCQ0Y1Cis6MTA1NjkwMDBBRDJBMDAwODBFMDAwNDlCQUY4ODAwMkMwRTAwMDQ1OUIwCis6MTA1NkEwMDAwMDAwMDAwMDBFMDAwMDQ4MDAwMDAwMDAzQzA3NjAwMDAxCis6MTA1NkIwMDA4Q0U1MDgwODI0MDZGRkYwM0MwMzU3MDkwMEE2MjAyNEM3Cis6MTA1NkMwMDAzNDYyRjAwMDEwODIwMDUwMjQxOTAwMDFBRjgwMDAzNEQxCis6MTA1NkQwMDAwRTAwMEJCQzAwMDAwMDAwM0MwNjYwMTY4Q0M0MDAwMEVECis6MTA1NkUwMDAzQzA3NjAxNDhDRTUwMEEwM0MwM0ZGRkYwMDgzMTAyNEZFCis6MTA1NkYwMDAzQzFGNTM1MzAwMDUxRkMyMTA1RjAwM0QzNEM1N0MwMEEyCis6MTA1NzAwMDA5NEEyMDFGMkE3ODAwMDRDMTA0MDAwMDNBNzgwMDA1QzI3Cis6MTA1NzEwMDAzODRCMUUxRUE3OEIwMDRDOTRBMjAxRjgxMDQwMDAwNEM5Cis6MTA1NzIwMDA4RjhEMDAzNDM4NEMxRTFFQTc4QzAwNUM4RjhEMDAzNDhBCis6MTA1NzMwMDAxMUEwMDAwNDk3ODQwMDVDMjQwRTAwMjBBNzhFMDA0QzZBCis6MTA1NzQwMDA5Nzg0MDA1QzJDOEYwMDgxNTFFMDAwMDEyNDA0MDA4MENDCis6MTA1NzUwMDA5Nzg1MDA0QzJDQjgwNDAxNTMwMDAwMDEyNDA1MDQwMDc3Cis6MTA1NzYwMDAzQzAyNjAwMDhDNDMwNDM4MjQxOTEwM0MzMDdGRkZGRjVBCis6MTA1NzcwMDAxM0Y5MDAwMzMwODdGRkZGNTBFMDAwMEYyNDA2MDA1MEFDCis6MTA1NzgwMDBBMzgwMDA1RTkzODgwMDVFNTEwMDAwMTBBNzg0MDA1QzM3Cis6MTA1NzkwMDBBNzgwMDA1Qzk3ODUwMDVDOEZCRjAwMTBBNzgwMDA0QzNECis6MTA1N0EwMDBBNzgwMDA1NEE3ODAwMDcyM0MwMTA4MDBBQzI1MDA4MDRGCis6MTA1N0IwMDAwM0UwMDAwODI3QkQwMDE4QTM4NjAwNUU5Mzg4MDA1RTAyCis6MTA1N0MwMDA1NTAwRkZGNEE3ODAwMDVDQTc4NDAwNUNBNzg1MDA0QzBGCis6MTA1N0QwMDA4RkJGMDAxMDk3ODUwMDVDQTc4MDAwNTRBNzgwMDA3MkRGCis6MTA1N0UwMDAzQzAxMDgwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODNDCis6MTA1N0YwMDAwMDAzNTA4MDAxNDY0ODIxOEQyODAwMDQzQzA2NjAwMENCCis6MTA1ODAwMDAwQTAwMDEwRjAxMDYyODIxMEEwMDAxMDNBRjk5MDAzNEE0Cis6MTA1ODEwMDAzMDgzRkZGRjhGODgwMDJDOEY4NzAwMjgwMDAzMjE0MEYyCis6MTA1ODIwMDAzQzA1ODAwMDNDMDIwMDUwMDA4MjQ4MjUzQzA2NjAwMDk4Cis6MTA1ODMwMDAzQzBBMDEwMDM0QUMwNDAwOENDRDA4RTAwMUFBNTgyNEQ1Cis6MTA1ODQwMDAxMTYwMDAwNTAwMDAwMDAwOENDRjA4RTAyNEU3MDAwMTkzCis6MTA1ODUwMDAwMUVBNzAyNUFDQ0UwOEUwOEQxOTAwMTAwMTgwNTgyMUI2Cis6MTA1ODYwMDBBQ0I5MDAzODhEMTgwMDE0QUNCODAwM0NBQ0E5MDAzMEJECis6MTA1ODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTA1ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTA1ODkwMDAzQzAzODAwMDhDNjQwMDAwMzA4MjAwMjAxMDQwRkZGRDNCCis6MTA1OEEwMDAzQzBGNjAwMDhERUQwOEUwM0MwRTAxMDAwMUFFMTgyNEI1Cis6MTA1OEIwMDAxNDYwRkZFMTAwMDAwMDAwQUY4NzAwMjgwM0UwMDAwODRCCis6MTA1OEMwMDBBRjhCMDAzODhGODUwMDJDMjQwQkZGRjAzQzA2ODAwMDQ2Cis6MTA1OEQwMDA5NEE3MDAxQThDQTkwMDI0MzBFQ0ZGRkYwMDBDMzhDMEZDCis6MTA1OEUwMDAwMEVCNTAyNDAxMkE0MDIxQUNDODAwM0M4Q0E0MDAyNEM5Cis6MTA1OEYwMDA4Q0MzMDAzQzAwODMxMDIzMTg0MDAwMzMwMDAwMDAwMERDCis6MTA1OTAwMDA4Q0FEMDAyMDI1QTIwMDAxM0MwRjAwNTBBQ0MyMDAzODM1Cis6MTA1OTEwMDAzNUVFMDAxMDNDMDY4MDAwQUNDRTAwMzAwMDAwMDAwMEU4Cis6MTA1OTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA1OTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzA0ODAwMEE3Cis6MTA1OTQwMDA4Qzk5MDAwMDMzMzgwMDIwMTMwMEZGRkQzMEUyMDAwODdFCis6MTA1OTUwMDAxMDQwMDAxNzNDMDk4MDAwOEM4ODA0MDhBQ0E4MDAxMDk3Cis6MTA1OTYwMDA4QzgzMDQwQ0FDQTMwMDE0M0MxOTAwMjAzQzE4ODAwMDZDCis6MTA1OTcwMDBBRjE5MDAzMDk0QUUwMDE4OTRBRjAwMUMwMUNGMzAyMTU1Cis6MTA1OTgwMDBBNEE2MDAxODk0QUQwMDFBMjVBNzAwMDFBNEE3MDAxQTI4Cis6MTA1OTkwMDA5NEFCMDAxQTk0QUMwMDFFMTE4QjAwMDMwMDAwMDAwMEIxCis6MTA1OUEwMDAwM0UwMDAwODAwMDAwMDAwMDNFMDAwMDhBNEEwMDAxQUMzCis6MTA1OUIwMDA4RDJBMDQwMEFDQUEwMDEwOEQyNDA0MDRBQ0E0MDAxNEE5Cis6MTA1OUMwMDAwQTAwMDFBQTNDMTkwMDIwOENBMjAwMjAwQTAwMDE5MkMyCis6MTA1OUQwMDAzQzBGMDA1MDBBMDAwMTgwMDAwMDAwMDAyN0JERkZFOEQ2Cis6MTA1OUUwMDBBRkJGMDAxMDBFMDAwMUM0MDAwMDAwMDA4Rjg5MDAyQzIyCis6MTA1OUYwMDA4RkJGMDAxMDNDMDM4MDAwQTUyMDAwMEE5NTI4MDAwQUY0Cis6MTA1QTAwMDA5NTI3MDAwNDI3QkQwMDE4MzEwNUZGRkYzMEU2MDAwRjgxCis6MTA1QTEwMDAwMDA2MTUwMDAwQTIyMDI1MDNFMDAwMDhBQzY0MDA4MDA5Cis6MTA1QTIwMDAzQzA1MDgwMDhDQTUwMDIwOEY4MzAwMDQyN0JERkZFOEZCCis6MTA1QTMwMDBBRkIwMDAxMEFGQkYwMDE0MTBBMzAwMTAwMDAwODAyMTExCis6MTA1QTQwMDAyNDA0MDAwMTAyMDQzMDA0MDBBNjIwMjQwMEMzMTAyNDEyCis6MTA1QTUwMDA1MDQ0MDAwNjI2MTAwMDAxMDAxMDE4ODAyNzg3RkQ5Qzg2Cis6MTA1QTYwMDAxNDgwMDAwQTAwNjcxODIxMjYxMDAwMDEyRTA5MDAwMjg4Cis6MTA1QTcwMDA1NTIwRkZGMzhGODMwMDA0QUY4NTAwMDQ4RkJGMDAxNDBGCis6MTA1QTgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4QzY4MDAwMEVDCis6MTA1QTkwMDAzQzA1ODAwMEFDQTgwMDI0MEUwMDAxQzYyNjEwMDAwMUMxCis6MTA1QUEwMDAzQzA1MDgwMDhDQTUwMDIwMEEwMDAxRUIyRTA5MDAwMjJECis6MTA1QUIwMDAyNDA1MDAwMTAwODUxODA0M0MwNDA4MDA4Qzg0MDAyMEEzCis6MTA1QUMwMDAyN0JERkZDOEFGQkYwMDM0MDA4MzEwMjRBRkJFMDAzMDM1Cis6MTA1QUQwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDlDCis6MTA1QUUwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MUFBCis6MTA1QUYwMDBBRkIwMDAxMDhGODQwMDJDOTQ4NzAwMDY5NDg4MDAwQUIxCis6MTA1QjAwMDAwMEU4MzAyMzMwRDVGRkZGMTJBMDAwNEI4RkJGMDAzNEQ4Cis6MTA1QjEwMDA5NDhCMDAxODk0OEMwMDBBMDE2QzUwMjMzMTQyRkZGRkQzCis6MTA1QjIwMDAwMkEyNDgyQjE1MjAwMDAyMDJBMDIwMjEwMDQwMjAyMUMzCis6MTA1QjMwMDAyQzhGMDAwNTE1RTAwMDAyMDA4MDk4MjEyNDEzMDAwNDNBCis6MTA1QjQwMDAwRTAwMDE1MzAyNjAyMDIxOEY4NzAwMkMwMjYwOTAyMUZCCis6MTA1QjUwMDBBRjgwMDAzMDk0RjQwMDBBMDI2MDgwMjExMjYwMDA0RTkxCis6MTA1QjYwMDAzMjkxRkZGRjNDMTY3MDAwM0MxNDQwMDAzQzFFMjAwMEE4Cis6MTA1QjcwMDAzQzE3NjAwMDhGOTkwMDM4OEYzODAwMDAwMzE2MTgyNEY2Cis6MTA1QjgwMDAxMDc0MDA0RjAyODNGODJCMTdFMDAwMzYwMDAwMDAwMDZECis6MTA1QjkwMDAxMDdFMDA0NzhGODYwMDMwMTRDMDAwM0EyNDAzMDAwMUI1Cis6MTA1QkEwMDAwMjAzMTAyMzAyMjMyMDIxMzA1MEZGRkYxNjAwRkZGMUQzCis6MTA1QkIwMDAzMDkxRkZGRjhGODcwMDJDM0MxMTAwMjAzQzEwODAwMEFCCis6MTA1QkMwMDBBRTExMDAzMDk0RUIwMDBBM0MxNzgwMDAwMjRCNTAyMUNDCis6MTA1QkQwMDBBNEVBMDAwQTk0RTkwMDBBOTRFODAwMDQzMTIzRkZGRkQ0Cis6MTA1QkUwMDAzMTA2MDAwRjAwMDYyRDAwMDA2NUYwMjVBRUZFMDA4MDk2Cis6MTA1QkYwMDA5NEYzMDAwQTk0RjYwMDE4MTJEMzAwMzYwMDEyMjE0MEU0Cis6MTA1QzAwMDA4Q0ZGMDAxNDhDRjQwMDEwMDNFNDY4MjEwMDAwQzAyMTE0Cis6MTA1QzEwMDAwMUE0NzgyQjAyOTg3MDIxMDFDRjYwMjFBQ0VEMDAxNDEzCis6MTA1QzIwMDBBQ0VDMDAxMDAyQjIzODIzMzBGNUZGRkYxNkEwRkZCODJECis6MTA1QzMwMDA4Rjg0MDAyQzhGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQ0I0Cis6MTA1QzQwMDA4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQ0JFCis6MTA1QzUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODVECis6MTA1QzYwMDAyN0JEMDAzODE0NzdGRkNDOEY4NjAwMzAwRTAwMEQ4QkQ3Cis6MTA1QzcwMDAwMjAwMjAyMTAwNDAxODIxOEY4NjAwMzAxMEMwRkZDOThCCis6MTA1QzgwMDAwMjAzMTAyMzAyNzA3MDIzOEY4NzAwMkMwMUMzNjgyMTQ4Cis6MTA1QzkwMDAwQTAwMDI3NjMxQjJGRkZGOEY4NjAwMzAxNEMwRkZDOUMwCis6MTA1Q0EwMDAzQzExMDAyMDNDMTA4MDAwMEEwMDAyNDBBRTExMDAzMDgwCis6MTA1Q0IwMDAwRTAwMDNDNDAyMDAyMDIxMEEwMDAyNkQwMDQwMTgyMURBCis6MTA1Q0MwMDAwMjAwMjAyMTBFMDAwN0RCMDIyMDI4MjEwQTAwMDI2REJECis6MTA1Q0QwMDAwMDQwMTgyMTBFMDAwMTgwMDAwMDAwMDAwQTAwMDI1OTU3Cis6MTA1Q0UwMDAwMkIyMzgyMzI3QkRGRkQ4QUZCNDAwMjBBRkIzMDAxQ0U5Cis6MTA1Q0YwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyNEI2Cis6MTA1RDAwMDAwRTAwMDBFNjI0MTMwMDAxM0MwMjgwMDgzQzAzMjAwMDQyCis6MTA1RDEwMDAzQzAxMDgwMEFDMjAwMDcwMzQ1NDAwODAzNDcyMDAwMzUxCis6MTA1RDIwMDAzQzEwODAwMDI0MTFGRjgwMEUwMDAxRDcwMDAwMDAwMDBECis6MTA1RDMwMDA4RTA2MDAwMDM4QzUwMDAxMzBBNDAwMDExNDgwRkZGQTZGCis6MTA1RDQwMDAwMDAwMDAwMDhFMDcwMTAwMjQwMzBDMDAxMEUzMDAwOThFCis6MTA1RDUwMDAzQzA1ODAwMDhFMDkwMTAwMkQyODMwODA1NTAwMDAxMDgwCis6MTA1RDYwMDAzQzA0ODAwMDhFMEIwMTAwMkQ2QTMxODExMTQwMDAwQzMzCis6MTA1RDcwMDAzQzA0ODAwMDhDQUMwMTAwMTE4MzAwMDQwMDAwMjAyMTUxCis6MTA1RDgwMDA4Q0FFMDEwMDI1Q0RGRjgxMzFBNDAwRkY4RTBGMDEwMEY0Cis6MTA1RDkwMDAwRTAwMDFGQkFFMEYwMDI0MEEwMDAyQzEzQzA0ODAwMDhCCis6MTA1REEwMDA4QzlGMDEwMDI0MTgwMDIwQUM5RjAwMjA5Mjk5MDAwMEQ1Cis6MTA1REIwMDAzMzIzMDBGRjEwNzgwMDFGMjQwMjAwNTAxMDYyMDAyMkRECis6MTA1REMwMDAwMDAwMDAwMDNDMDQ4MDAwOEM4MzAxMDAxNDYwMDAwMzhDCis6MTA1REQwMDAwMDAwMDAwMDU2NjAwMDE0M0MwNDQwMDA4QzgyMDEwMDZBCis6MTA1REUwMDA4Qzk5MDEwMDAwMDA5ODIxMDA1MUY4MjQwMDFGNzk0MDhGCis6MTA1REYwMDAzMzM4MDA3RjAxRjg3MDI1MDFEMjY4MjVBQzhEMDgzMDVBCis6MTA1RTAwMDA4QzhDMDEwMDhDODkwMTAwMjU4QjAxMDAwMTcxNTAyNENDCis6MTA1RTEwMDAwMDBBMzk0MDMxMjgwMDdGMDBFODMwMjUwMEQyMjgyNUNCCis6MTA1RTIwMDBBQzg1MDgzMDNDMDQ0MDAwQUUwNDAxMzgwQTAwMDI5OUY5Cis6MTA1RTMwMDAwMDAwMDAwMDhDODUwMTAwMEUwMDA3OEQyNDA0MDA4MDA2Cis6MTA1RTQwMDAwQTAwMDJDMTNDMDQ4MDAwOEM4NDAxMDAwRTAwMTNFQUE5Cis6MTA1RTUwMDAwMDAwMDAwMDBBMDAwMkMxM0MwNDgwMDAwMEE0MTAyQkQ2Cis6MTA1RTYwMDAyNDAzMDAwMTEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MEYzCis6MTA1RTcwMDAwMEE0MTAyQjA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQ0IyCis6MTA1RTgwMDAwMDA1Mjg0MDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQkJDCis6MTA1RTkwMDA1NEUwMDAwNDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzhECis6MTA1RUEwMDAwMDAzMTg0MjE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjczCis6MTA1RUIwMDAwM0UwMDAwODAwQzMxMDIxMzA4NEZGRkYzMEM2MDBGRjVDCis6MTA1RUMwMDAzQzA3ODAwMDhDRTIwMUI4MDQ0MEZGRkUwMDA2NEMwMDU1Cis6MTA1RUQwMDAwMTI0MzAyNTNDMDgyMDAwMDBDODIwMjUzQzAzMTAwMDg4Cis6MTA1RUUwMDBBQ0UwMDE4MEFDRTUwMTg0QUNFNDAxODgwM0UwMDAwODhCCis6MTA1RUYwMDBBQ0UzMDFCODNDMDY2MDAwOENDNTIwMUMyNDAyRkZGMDE2Cis6MTA1RjAwMDAzMDgzMDIwMDMwODYwMTAwMTA2MDAwMEUwMEEyMjgyNEI5Cis6MTA1RjEwMDAzNEE1MDAwMTMwODczMDAwMTBFMDAwMDUzMDgzMEMwMDBDCis6MTA1RjIwMDAzNEE1MDAwNDNDMDQ2MDAwMDNFMDAwMDhBQzg1MjAxQzlDCis6MTA1RjMwMDAxMDYwRkZGRDNDMDQ2MDAwMzRBNTAwMDgwM0UwMDAwODg5Cis6MTA1RjQwMDBBQzg1MjAxQzU0QzBGRkYzMzRBNTAwMDIwQTAwMDMxNUUxCis6MTA1RjUwMDAzMDg3MzAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDlFCis6MTA1RjYwMDAzQzA3NjAwMDI0MDYwMDAyMTA4MDAwMTEwMEEwODAyMTgwCis6MTA1RjcwMDA4RjgzMDAzODBFMDAwMzBDOEM2NDAwMTg4RjgyMDAzODY5Cis6MTA1RjgwMDAwMDAwMjAyMTI0MDYwMDAxOEM0NTAwMEMwRTAwMDJGREJCCis6MTA1RjkwMDAwMDAwMDAwMDE2MDAwMDAyMjQwMjAwMDMwMDAwMTAyMThGCis6MTA1RkEwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODU5Cis6MTA1RkIwMDA4Q0U4MjAxQzI0MDlGRkYwMDEwOTI4MjRBQ0U1MjAxQ0YyCis6MTA1RkMwMDA4Rjg3MDAzODBBMDAwMzMyOENFNTAwMEMzQzAyNjAwRTFCCis6MTA1RkQwMDAwMDgwNDAyMTM0NDYwMTAwMjQwOTAwMTgwMDAwMDAwMDIwCis6MTA1RkUwMDAwMDAwMDAwMDAwMDAwMDAwM0MwQTAwNTAzQzAzODAwMDVDCis6MTA1RkYwMDAzNTQ3MDIwMEFDNjgwMDM4MzQ2NDA0MDBBQzY1MDAzQ0VFCis6MTA2MDAwMDBBQzY3MDAzMDhDNkMwMDAwMzE4QjAwMjAxMTYwRkZGRDBDCis6MTA2MDEwMDAyNDA3RkZGRjI0MDMwMDdGOEM4RDAwMDAyNDYzRkZGRjEzCis6MTA2MDIwMDAyNDg0MDAwNEFDQ0QwMDAwMTQ2N0ZGRkIyNEM2MDAwNEU4Cis6MTA2MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNEE0MDIwMDk2Cis6MTA2MDQwMDAwMDg1MjgyQjNDMDMwMDIwM0MwRTgwMDAyNTI5RkZGRjAzCis6MTA2MDUwMDAwMTA1NDAyMUFEQzMwMDMwMTUyMEZGRTAwMDgwMjgyMTVDCis6MTA2MDYwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMzgyN0JERkZEODQxCis6MTA2MDcwMDBBRkIzMDAxQ0FGQkYwMDIwQUZCMjAwMThBRkIxMDAxNDI3Cis6MTA2MDgwMDBBRkIwMDAxMDk0NDYwMDAyMDA4MDk4MjE4QzUyMDAxODk2Cis6MTA2MDkwMDAyQ0MzMDA4MThDNDgwMDA0OEM0NzAwMDg4QzUxMDAwQ0Y0Cis6MTA2MEEwMDA4QzQ5MDAxMDEwNjAwMDA3OEM0QTAwMTQyQ0M0MDAwNEI2Cis6MTA2MEIwMDAxNDgwMDAxMzMwRUIwMDA3MzBDNTAwMDMxMEEwMDAxMDVGCis6MTA2MEMwMDAwMDAwMDAwMDI0MTAwMDhCMDIwMDIwMjEwMjIwMjgyMTYzCis6MTA2MEQwMDAwRTAwMDJGRDI0MDYwMDAzMTY2MDAwMDIyNDAyMDAwM0U1Cis6MTA2MEUwMDAwMDAwMTAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODVBCis6MTA2MEYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODA2Cis6MTA2MTAwMDAxNTYwRkZGMTI0MTAwMDhCM0MwQzgwMDAzQzAzMDAyMDQ0Cis6MTA2MTEwMDAyNDFGMDAwMUFEODMwMDMwQUY5RjAwMzAwMDAwMDAwMDVECis6MTA2MTIwMDAwMDAwMDAwMDAwMDAwMDAwMjQxOUZGRjAyNEQ4MDAwRjM4Cis6MTA2MTMwMDAwMzE5NzgyNDNDMTAwMEQwQUQ4ODAwMzgwMUYwNzAyNTk4Cis6MTA2MTQwMDAyNENEMDAwMzNDMDg2MDBFQUQ4NzAwM0MzNTg1MDQwMDdCCis6MTA2MTUwMDBBRDhFMDAzMDAwMEQzODgyMzUwNDAwM0MzQzAzODAwMEQ5Cis6MTA2MTYwMDA4QzZCMDAwMDMxNjIwMDIwMTA0MEZGRkQwMDAwMDAwMDM5Cis6MTA2MTcwMDAxMEUwMDAwODI0RTNGRkZGMjQwN0ZGRkY4Q0E4MDAwMEM1Cis6MTA2MTgwMDAyNDYzRkZGRjI0QTUwMDA0QUM4ODAwMDAxNDY3RkZGQjE0Cis6MTA2MTkwMDAyNDg0MDAwNDNDMDQ2MDBFQUM4NjAwMzgwMDAwMDAwMDNCCis6MTA2MUEwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNzAwMjAzQzA2ODAwMENBCis6MTA2MUIwMDAwMTIwMjAyMTAxNDAyODIxQUNDNzAwMzAwRTAwMDM0MkZECis6MTA2MUMwMDAwMDAwODAyMTBFMDAwMzBDMDI0MDIwMjEwQTAwMDM4MkZGCis6MTA2MUQwMDAwMjAwMjAyMTI3QkRGRkUwQUZCMjAwMTgzMDkyRkZGRjgwCis6MTA2MUUwMDBBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTAxNjQwMDAwRERGCis6MTA2MUYwMDAwMDAwODgyMTBBMDAwM0YxMDIyMDEwMjEyNDA1MDAwMzc5Cis6MTA2MjAwMDA1MDg1MDAyNzhDRTUwMDBDMDAwMDAwMEQyNjJDMDAwMUI1Cis6MTA2MjEwMDAzMTkxRkZGRjI0RUIwMDIwMDIzMjUwMkIxMTQwMDAxOTc2Cis6MTA2MjIwMDBBRjhCMDAzODhGODIwMDMwMTQ0MDAwMTY4Rjg3MDAzODAzCis6MTA2MjMwMDAzQzA2NzAwMDNDMDMyMDAwOENFNTAwMDAwMEE2MjAyNEYyCis6MTA2MjQwMDAxNDgzMDAxMDhGODQwMDQwMDAwNTQ0MDIzQzA5ODAwMDQ0Cis6MTA2MjUwMDAwMEE5ODAyNDE0ODBGRkU5MzEwNjAwRkYyQ0NBMDAwQjNFCis6MTA2MjYwMDAxMTQwRkZFQjI2MkMwMDAxMDAwNjY4ODAzQzBFMDgwMDYwCis6MTA2MjcwMDAyNUNFNTFDODAxQUU2MDIxOEQ4QjAwMDAwMTYwMDAwODYxCis6MTA2MjgwMDAwMDAwMDAwMDAyMjAxMDIxOEZCRjAwMUM4RkIyMDAxOEY4Cis6MTA2MjkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDZDCis6MTA2MkEwMDAwRTAwMDJGRDI0MDQwMDg0MTYwMEZGRDg4Rjg3MDAzOEZBCis6MTA2MkIwMDAwQTAwMDNEMkFGODAwMDQwMDIwMDI4MjEwRTAwMDMyNDEwCis6MTA2MkMwMDAyNDA0MDAwMThGODcwMDM4MEEwMDAzRDJBRjgyMDA0MDA3Cis6MTA2MkQwMDAwMjAwMjgyMTBFMDAwMzI0MDAwMDIwMjEwQTAwMDQwMUVFCis6MTA2MkUwMDA4Rjg3MDAzODBFMDAwMzY5MDIwMDIwMjE4Rjg3MDAzODU1Cis6MTA2MkYwMDAwQTAwMDNEMkFGODIwMDQwMzBBRkZGRkYwMDBGMTlDMDg5Cis6MTA2MzAwMDAzQzA0ODAwMDhDOTAwMUI4MDYwMEZGRkUzQzE5MjAwNDdDCis6MTA2MzEwMDAzQzE4MTAwMEFDODMwMTgwQUM4MDAxODRBQzk5MDE4OEVBCis6MTA2MzIwMDBBQzk4MDFCODBBMDAwM0QzMjYyQzAwMDE5MEUyMDAwMkM5Cis6MTA2MzMwMDA5MEZGMDAwMzAwMDAyMDIxMDAwMjNBMDAwMEZGMjgyNTAyCis6MTA2MzQwMDAyNDA2MDAwODBFMDAwMkZEMDAwMDAwMDAxNjAwRkZERDFDCis6MTA2MzUwMDAyNDAyMDAwMzhGODcwMDM4MDAwMDEwMjEwQTAwMDNEMkI2Cis6MTA2MzYwMDBBRjgyMDA0MDkwRTUwMDAyMDAwMDIwMjEwQTAwMDQyMEQ2Cis6MTA2MzcwMDAyNDA2MDAwOTk0RTUwMDA0OTBFOTAwMDM5MEUzMDAwMjdDCis6MTA2MzgwMDAwMDA1MzQwMDAwMDk0MjAwMDBDODIwMjUwMDgzMjgyNUFDCis6MTA2MzkwMDAyNDA2MDAwQTBBMDAwNDIwMDAwMDIwMjE5MEU1MDAwMkUzCis6MTA2M0EwMDAwMDAwMjAyMTBBMDAwNDIwMjQwNjAwMEIwMDA0NDlDMjNBCis6MTA2M0IwMDAzMTI3MDAzRjAwMDQ0MzQyM0MwMjgwMDAwMDA4MjA0MDk3Cis6MTA2M0MwMDAyNDAzMTY4MDJDRTYwMDIwQUM0MzAwMkMyNEVBRkZFMEQ2Cis6MTA2M0QwMDAyNDgyMDAwMTE0QzAwMDAzMzBBOTAwRkYwMDgwMTAyMUI2Cis6MTA2M0UwMDAzMTQ3MDBGRjAwMDI2MDgwM0MwRDgwMDAyNDBBMDAwMTVDCis6MTA2M0YwMDAwMThEMjAyMTNDMEIwMDBFMDBFQTI4MDQwMDhCMzAyMTg3Cis6MTA2NDAwMDAxMTIwMDAwNTAwMDUzODI3OENDRTAwMDAwMUM1MzgyNTc1Cis6MTA2NDEwMDAwM0UwMDAwOEFDQzcwMDAwOENEODAwMDAwMzA3NzgyNDE0Cis6MTA2NDIwMDAwM0UwMDAwOEFDQ0YwMDAwMjdCREZGRTBBRkIxMDAxNENGCis6MTA2NDMwMDBBRkIwMDAxMEFGQkYwMDE4M0MwNzYwMDA4Q0U0MDgwODQ0Cis6MTA2NDQwMDAzNDAyRjAwMDNDMTE2MDAwMzA4M0YwMDAyNDA1MDFDMEVDCis6MTA2NDUwMDAzQzA0ODAwRTAwMDAzMDIxMTA2MjAwMDYyNDEwMDAwMTcwCis6MTA2NDYwMDA4Q0VBMDgwODMxNDlGMDAwMzkyOEUwMDAwMDA4MzgyQjkwCis6MTA2NDcwMDAwMDA3ODA0MDNDMEQwMjAwQUUyRDA4MTQyNDBDMTY4MDRECis6MTA2NDgwMDAzQzBCODAwMDhFMjc0NDAwMEUwMDBFMzRBRDZDMDAyQ0I3Cis6MTA2NDkwMDAxMjAwMDAwNDNDMDIxNjkxMjQwNTAwMDExMjA1MDAxMEIwCis6MTA2NEEwMDAzQzAyM0Q2QzM0NTgwMEUwQUUzODQ0MDgzQzExMDgwMDEyCis6MTA2NEIwMDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDAwMDExODU0MEMzCis6MTA2NEMwMDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTAzQzBFMDIwMDAyCis6MTA2NEQwMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhBQ0NFMDgxMDVDCis6MTA2NEUwMDAzQzAyMThEQTM0NTgwMEUwQUUzODQ0MDgzQzExMDgwMDg5Cis6MTA2NEYwMDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDAwMDExODU0MDgzCis6MTA2NTAwMDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTAzQzBFMDIwMEMxCis6MTA2NTEwMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhBQ0NFMDgxMDFCCis6MTA2NTIwMDAwQTAwMDQzQTI0MDUwMDAxMEEwMDA0M0EwMDAwMjgyMTY4Cis6MTA2NTMwMDAyNDAyMDQwMEE3ODIwMDEwQTc4MDAwMDgwMDAwMjAyMTg4Cis6MTA2NTQwMDAzQzA2MDgwMDI0QzY1NEIwMjQwNUZGRkYyNDg5MDAwMTNFCis6MTA2NTUwMDAwMDA0NDA4MDMxMjRGRkZGMDEwNjE4MjEyQzg3MDAyMDExCis6MTA2NTYwMDAxNEUwRkZGQUFDNjUwMDAwMjQwNDA0MDBBNzg0MDAxMkM0Cis6MTA2NTcwMDBBNzgwMDAwQTAwMDAyMDIxM0MwNjA4MDAyNEM2NTUzMEYwCis6MTA2NTgwMDAyNDA1RkZGRjI0OEQwMDAxMDAwNDYwODAzMUE0RkZGRjdCCis6MTA2NTkwMDAwMTg2NTgyMTJDOEEwMDIwMTU0MEZGRkFBRDY1MDAwMEM1Cis6MTA2NUEwMDBBNzgwMDAxNEE3ODAwMDBDQTc4MDAwMEUwMDAwMjAyMTA3Cis6MTA2NUIwMDAzQzA2MDgwMDI0QzY1NUIwMjQwNUZGRkYyNDk5MDAwMUJECis6MTA2NUMwMDAwMDA0QzA4MDMzMjRGRkZGMDMwNjc4MjEyQzhFMDAwNEQyCis6MTA2NUQwMDAxNUMwRkZGQUFERTUwMDAwM0MwNTYwMDA4Q0E3M0QwMDRBCis6MTA2NUUwMDAyNDAzRTA4RjAwRTMxMDI0MzQ0NjAxNDAwM0UwMDAwODU4Cis6MTA2NUYwMDBBQ0E2M0QwMDI0ODcwMDdGMDAwNzMxQzIyNEM1RkZGRjAxCis6MTA2NjAwMDAwMDA1MThDMjI0NjQwMDAxMzA4MkZGRkYwMDAyMzhDMDc4Cis6MTA2NjEwMDBBNzg0MDAxQzNDMDEwODAwQUMyNzAwMzBBRjgwMDAxOEE0Cis6MTA2NjIwMDAwMDAwMjgyMTAwMDAyMDIxMDAwMDMwMjEyNDg5MDAwMUUxCis6MTA2NjMwMDAwMEE3MjgyMTMxMjRGRkZGMkNBODE3MDExMTAwMDAwMzE3Cis6MTA2NjQwMDAyQzgzMDA4MDE0NjBGRkY5MjRDNjAwMDEwMEMwMjgyMUJCCis6MTA2NjUwMDBBRjg2MDAxODEwQzAwMDFEQTc4NjAwMTYyNENBRkZGRkQxCis6MTA2NjYwMDAwMDBBMTE0MjNDMDgwODAwMjUwODU1QjAxMDQwMDAwQUY1Cis6MTA2NjcwMDAwMDAwMjAyMTAwNDAzMDIxMjQwN0ZGRkYyNDhFMDAwMTZDCis6MTA2NjgwMDAwMDA0Njg4MDMxQzRGRkZGMDFBODYwMjEwMDg2NTgyQkY4Cis6MTA2NjkwMDAxNTYwRkZGQUFEODcwMDAwMzBBMjAwMUY1MDQwMDAwOENGCis6MTA2NkEwMDAwMDA0MzA4MDI0MDMwMDAxMDA0M0M4MDQwMDA0MTA4MDZCCis6MTA2NkIwMDAwMDQ4NzgyMTI3MzhGRkZGMDNFMDAwMDhBREY4MDAwMDBDCis6MTA2NkMwMDAwMEM4MjAyMTI0MDVGRkZGQUM4NTAwMDAwM0UwMDAwODdFCis6MTA2NkQwMDAwMDAwMDAwMDMwQTVGRkZGMzBDNkZGRkYzMEE4MDAxRkZDCis6MTA2NkUwMDAwMDgwNjAyMTMwRTcwMEZGMDAwNTI5NDIwMDAwNTAyMUIyCis6MTA2NkYwMDAxMEMwMDAxRDI0MDkwMDAxMjQwQjAwMDEyNTE4MDAwMTExCis6MTA2NzAwMDAwMTBCMjAwNDMzMDgwMEZGMDEyNjc4MjYzOTBFMDAyMEYzCis6MTA2NzEwMDAyREVEMDAwMTJEQzIwMDAxMDFBMjE4MjUxMDYwMDAwRDExCis6MTA2NzIwMDAwMTQ0NTAyNTAwMDVDODgwMDMyQzQwMjEwMTAwMTgyMTk4Cis6MTA2NzMwMDAxMEUwMDAwRjAwMEEyMDI3OEQwNDAwMDAwMDhBMTgyNUIxCis6MTA2NzQwMDBBRDAzMDAwMDI0QUQwMDAxMDAwMDQwMjEwMDAwNTAyMUY1Cis6MTA2NzUwMDAzMUE1RkZGRjI1MkUwMDAxMzFDOUZGRkYwMEM5MTAyQjE1Cis6MTA2NzYwMDAxMDQwRkZFNzI1MTgwMDAxMDNFMDAwMDgwMDAwMDAwMENBCis6MTA2NzcwMDA4RDBBMDAwMDAxNDQ0MDI0MEEwMDA1MjBBQzY4MDAwMDk2Cis6MTA2NzgwMDAyN0JERkZFODMwQTVGRkZGMzBDNkZGRkZBRkIwMDAxMDA4Cis6MTA2NzkwMDBBRkJGMDAxNDMwRTdGRkZGMDAwMDUwMjEzNDEwRkZGRkFGCis6MTA2N0EwMDAwMDAwNjAyMTI0QUYwMDFGMDBDMDQ4MjEyNDE4MDAwMTEwCis6MTA2N0IwMDAyNDE5MDAyMDA1RTAwMDE2MDFFMDEwMjEwMDAyRjk0MzMxCis6MTA2N0MwMDAwMTlGNjgyQTAwMDk3MDJCMDFBRTQwMjQxMTAwMDAxN0I4Cis6MTA2N0QwMDAwMDBDMTg4MDAwNjQxMDIxMTBFMDAwMDU4QzRCMDAwMEI0Cis6MTA2N0UwMDAwMEY4NDAwNDAwMDgzODIzMDE2NzU4MjQwMDAwMzgyMUNECis6MTA2N0YwMDAxNTQwMDA0MTAwMDA0MDIxNTU2MDAwMTYzMTY5RkZGRjNGCis6MTA2ODAwMDAyNThCMDAwMTMxNkNGRkZGMDVFMUZGRUMwMUUwMTAyMTU5Cis6MTA2ODEwMDAyNEEyMDAzRTAwMDJGOTQzMDE5RjY4MkEwMDA5NzAyQjYwCis6MTA2ODIwMDAwMUFFNDAyNDE1MDBGRkVCMDAwQzE4ODAxNTQ2MDAwNTUyCis6MTA2ODMwMDAzNDAyRkZGRjAyMDAyODIxMEUwMDA1MDQwMDAwMzgyMTY5Cis6MTA2ODQwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODc5Cis6MTA2ODUwMDAyN0JEMDAxODE1MjAwMDAzMDE2MDE4MjEwMDBCMUMwMjQxCis6MTA2ODYwMDAyNDA4MDAxMDMwNkEwMEZGMTU0MDAwMDUzMDZFMDAwRjRDCis6MTA2ODcwMDAyNTBEMDAwODAwMDMxQTAyMzFBODAwRkYzMDZFMDAwRjNBCis6MTA2ODgwMDAxNUMwMDAwNTMwN0YwMDAzMjUxMDAwMDQwMDAzMTkwMjI1Cis6MTA2ODkwMDAzMjA4MDBGRjMwN0YwMDAzMTdFMDAwMDUzODY5MDAwMTZGCis6MTA2OEEwMDAyNTAyMDAwMjAwMDMxODgyMzA0ODAwRkYzODY5MDAwMTA5Cis6MTA2OEIwMDAzMTIzMDAwMTEwNjAwMDA0MzEwMzAwRkYyNTBBMDAwMUFDCis6MTA2OEMwMDAzMTQ4MDBGRjMxMDMwMEZGMDAwQzY5NDAwMUEzNDAyMTYzCis6MTA2OEQwMDAyNDBBMDAwMTEwQ0FGRkQ1MzExMEZGRkYyNDZFMDAwMTA5Cis6MTA2OEUwMDAzMUM4MDBGRjExMTlGRkM2MzhDOTAwMDEyRDFGMDAyMDUzCis6MTA2OEYwMDA1M0UwMDAxQzI1OEIwMDAxMjQwRDAwMDEwQTAwMDU5N0MwCis6MTA2OTAwMDAyNDBFMDAyMDUxNDYwMDE3MjU4QjAwMDEyNTA5MDAwMUE3Cis6MTA2OTEwMDAzMTI4MDBGRjJEMDkwMDIwNTEyMDAwMTIyNThCMDAwMTk1Cis6MTA2OTIwMDAyNTQzMDAwMTAxMEQ1MDA0MDE0QjEwMjQyNTA5MDAwMUVECis6MTA2OTMwMDAxNDQwRkZGNDMwNkFGRkZGMzEyN0ZGRkYxMEVFMDAwQzE4Cis6MTA2OTQwMDAyNTgyRkZGRjMwNENGRkZGMDAwMDUwMjEzNDEwRkZGRjc1Cis6MTA2OTUwMDAzMTI4MDBGRjJEMDkwMDIwNTUyMEZGRjIyNTQzMDAwMUJBCis6MTA2OTYwMDAyNThCMDAwMTAxNDY0ODI2MEEwMDA1NTEzMTZDRkZGRkM2Cis6MTA2OTcwMDAwMDAwMzgyMTAwMDA1MDIxMEEwMDA1QTMzNDEwRkZGRjU5Cis6MTA2OTgwMDAyN0JERkZEOEFGQjAwMDEwMzBGMEZGRkZBRkIxMDAxNDRCCis6MTA2OTkwMDAwMDEwMzk0MjMyMTFGRkUwMDAwNzEwODBBRkIzMDAxQzM1Cis6MTA2OUEwMDAwMEIxMjgyMzMwRDNGRkZGQUZCMjAwMTgzMEE1RkZGRjlFCis6MTA2OUIwMDAwMDgwOTAyMTAyNjAzMDIxMDA0NDIwMjFBRkJGMDAyMEUwCis6MTA2OUMwMDAwRTAwMDUyRjMyMDcwMDFGMDIyMjg4MjEzNDAzRkZGRjJCCis6MTA2OUQwMDAwMjQwMjAyMTAyMDAyODIxMDI2MDMwMjEwMDAwMzgyMURECis6MTA2OUUwMDAxMDQzMDAwOTMyMzFGRkZGMDIyMDEwMjE4RkJGMDAyMDI5Cis6MTA2OUYwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNECis6MTA2QTAwMDAwM0UwMDAwODI3QkQwMDI4MEUwMDA1MkYwMDAwMDAwMDRECis6MTA2QTEwMDAwMDQwODgyMTAyMjAxMDIxOEZCRjAwMjA4RkIzMDAxQzZFCis6MTA2QTIwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODdGCis6MTA2QTMwMDAyN0JEMDAyODAwMDQyNDAwM0MwMzYwMDBBQzYwM0QwODMyCis6MTA2QTQwMDAxMEEwMDAwMjM0ODIxMDA2MzQ4MjEwMTYwM0UwMDAwODAxCis6MTA2QTUwMDBBQzYyM0QwNDI3QkRGRkUwQUZCMDAwMTAzMDkwMDBGRkY2Cis6MTA2QTYwMDAyRTAyMDAwNkFGQkYwMDE4MTA0MDAwMDhBRkIxMDAxNDlFCis6MTA2QTcwMDAwMDEwMzA4MDNDMDMwODAwMjQ2MzUxRjQwMEMzMjgyMTM3Cis6MTA2QTgwMDA4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDAwMDAwMjAyMTBECis6MTA2QTkwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTNDCis6MTA2QUEwMDAwM0UwMDAwODI3QkQwMDIwOTc5MTAwMTYxNjIwMDA1MTMyCis6MTA2QUIwMDAwMDAwMjAyMTNDMDIwODAwOTA0MjAwMzMwQTAwMDYwQTMwCis6MTA2QUMwMDAwMDAwMDAwMDk3OEQwMDEyMTVBMDAwMzEwMDAwMjAyMTY5Cis6MTA2QUQwMDAwQTAwMDYwQTI0MDIwMDA4OTc4NzAwMTAxNEUwMDAxQTMyCis6MTA2QUUwMDAwMDAwMTgyMTAwNjAyMDIxMjQwMjAwMDExMDgwRkZFOTJECis6MTA2QUYwMDA4RkJGMDAxODAwMDQyOUMyMDA0NTMwMjEwMEE2NTgyQjgyCis6MTA2QjAwMDAxMTYwRkZFNDNDMDg4MDAwM0MwNzIwMDAwMDA1NjlDMERDCis6MTA2QjEwMDAwMUE3NjAyNUFEMEMwMDIwM0MwMzgwMDgyNDAyMDAxRjYzCis6MTA2QjIwMDAyNDQyRkZGRkFDNjAwMDAwMDQ0MUZGRkQyNDYzMDAwNDI5Cis6MTA2QjMwMDAyNEE1MDAwMTAwQTY3MDJCMTVDMEZGRjUwMDA1NjlDMDUzCis6MTA2QjQwMDAwQTAwMDVGNDhGQkYwMDE4OTc4NzAwMDgzQzA0MDgwMDZFCis6MTA2QjUwMDAyNDg0NTRCMDI0MDUwNDAwMEUwMDA1QUYyNDA2MDAwMTZGCis6MTA2QjYwMDA5NzhCMDAxMDI0NDQwMDAxMzA4QUZGRkYyNTY5RkZGRjQ2Cis6MTA2QjcwMDAyRDQ4MDQwMDAwNDAyODIxMTUwMDAwNDBBNzg5MDAxMDdFCis6MTA2QjgwMDAyNEFDMzgwMDAwMEMxOUMwMEEwMDA2MDhBNzgwMDAwOEQxCis6MTA2QjkwMDA5Nzg3MDAwQTNDMDQwODAwMjQ4NDU1MzAyNDA1MDQwMDJCCis6MTA2QkEwMDAwRTAwMDVBRjI0MDYwMDAxOTc5OTAwMTIyNDQ0MDAwMTRECis6MTA2QkIwMDAzMDk4RkZGRjI3MkZGRkZGMkYwRTA0MDAwMDQwODgyMTkxCis6MTA2QkMwMDAxNUMwMDAyQ0E3OEYwMDEyQTc4MDAwMEEzQTAyMDAwMzBDCis6MTA2QkQwMDAyNjI0MDEwMDMwODRGRkZGMEUwMDA1REMyQzQ1MDAwMTU3Cis6MTA2QkUwMDAwMDExRjhDMDI3RjAwMTAwMDAxMDIxQzAwQTAwMDYwQUI5Cis6MTA2QkYwMDAyNDAyMDAwODk3ODUwMDFBOTc4NzAwMEUzQzA0MDgwMEJECis6MTA2QzAwMDAyNDg0NTVCMDBFMDAwNUFGMjQwNjAwMDE5Nzg3MDAxNkI2Cis6MTA2QzEwMDA4Rjg5MDAxODI0NDUwMDAxMzBBOEZGRkYyNEUzRkZGRkZGCis6MTA2QzIwMDAwMTA5MzAyQjAwNDA4MDIxMTRDMDAwMThBNzgzMDAxNkYyCis6MTA2QzMwMDBBNzgwMDAwRTk3ODUwMDFDMEUwMDBFMUUwMjAwMjAyMTZBCis6MTA2QzQwMDAyNDRBMDUwMDMxNDRGRkZGMEUwMDA1REMyNDA1MDAwMTQ1Cis6MTA2QzUwMDAzQzA1MDgwMDk0QTUwMDMyMEUwMDBFMUUwMjAwMjAyMTAzCis6MTA2QzYwMDAyNDQ1MjEwMDNDMDIwODAwOTA0MjAwMzMwQTAwMDYwQTM1Cis6MTA2QzcwMDAwMDA1MjFDMDBBMDAwNjQyQTc4NDAwMEEyNEFDMzgwMDlGCis6MTA2QzgwMDAwMDBDMTlDMDBBMDAwNjA4QTc4NDAwMDgwQTAwMDY1QzY4Cis6MTA2QzkwMDBBNzg1MDAwRTMwODQwMEZGMjdCREZGRTgyQzgyMDAwNjg4Cis6MTA2Q0EwMDBBRkJGMDAxNEFGQjAwMDEwMTA0MDAwMTUwMEEwMzgyMTk1Cis6MTA2Q0IwMDAwMDA0NDA4MDNDMDMwODAwMjQ2MzUyMEMwMTAzMjgyMTk3Cis6MTA2Q0MwMDA4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDAyNENDMDA3RjlECis6MTA2Q0QwMDAwMDA3NTFDMjAwMEM1OUMyMzE3MEZGRkYyNTQ3QzQwMEE0Cis6MTA2Q0UwMDAzMEU1RkZGRjI3ODQwMDA4MDIwMDMwMjEwRTAwMDUwNDc0Cis6MTA2Q0YwMDAyNDA3MDAwMTk3ODYwMDE0MDIwNjIwMjFBNzg0MDAxNEFGCis6MTA2RDAwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEVCCis6MTA2RDEwMDAzQzA1MDgwMDhDQTUwMDMwMDAwNzc5QzIwRTAwMDJFNjkxCis6MTA2RDIwMDAyNUU0REYwMDMwNDVGRkZGM0MwNDA4MDAyNDg0NTVCMDEzCis6MTA2RDMwMDAyNDA2MDAwMTBFMDAwNTA0MjQwNzAwMDE5NzhFMDAxNkFBCis6MTA2RDQwMDA4RkJGMDAxNDhGQjAwMDEwMjVDRDAwMDEyN0JEMDAxOEEzCis6MTA2RDUwMDAwM0UwMDAwOEE3OEQwMDE2MDAwN0M5QzIyNzM4RkYwMDBFCis6MTA2RDYwMDAwMDE4NzhDMjMxRjBGRkZGM0MwNDA4MDAyNDg0NTUzMDNECis6MTA2RDcwMDAwMjAwMjgyMTI0MDYwMDAxMEUwMDA1MDQyNDA3MDAwMTVBCis6MTA2RDgwMDA5NzhEMDAxMjI2MEUwMTAwMDAwRTg0MDAyNUFDMDAwMTM0Cis6MTA2RDkwMDAzQzBCNjAwMEE3OEMwMDEyQUQ2MDNEMDgzNjA0MDAwNjc1Cis6MTA2REEwMDAwMDAwMzAyMTNDMDc2MDAwOENFMjNEMDQzMDVGMDAwNkFCCis6MTA2REIwMDAxN0UwRkZGRDI0QzkwMDAxMDAwNjFCMDAzMTI2MDBGRjdCCis6MTA2REMwMDAwMDY0NDAyNTJDQzUwMDA0QUNFODNEMDQxNEEwRkZGNjg3Cis6MTA2REQwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODFCCis6MTA2REUwMDAwMDA3NTFDMjI1NDlDODAwMjQwNjAwMDEyNDA3MDAwMUZDCis6MTA2REYwMDAzQzA0MDgwMDI0ODQ1NEIwMEUwMDA1MDQzMTI1RkZGRjM0Cis6MTA2RTAwMDA5Nzg3MDAxMDhGQkYwMDE0OEZCMDAwMTAyNEU2MDAwMTk4Cis6MTA2RTEwMDAyN0JEMDAxODAzRTAwMDA4QTc4NjAwMTAzMDg0RkZGRjlDCis6MTA2RTIwMDAzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTg1Cis6MTA2RTMwMDAzQzA4NDA4MDAwODgzODI1M0MwMzEwMDBBQ0MwMDE4MDJECis6MTA2RTQwMDBBQ0M1MDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODNECis6MTA2RTUwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTc2Cis6MTA2RTYwMDAzQzA4NDAzODhDQTcwMDAwMDA4ODI4MjUzQzAzMTAwMDBGCis6MTA2RTcwMDBBQ0M3MDE4MEFDQzUwMTg4MDNFMDAwMDhBQ0MzMDFCODExCis6MTA2RTgwMDA4RjgzMDA1ODhGODYwMDUwMTA2NjAwMEIwMDgwNDAyMUQxCis6MTA2RTkwMDAzQzA3MDgwMDI0RTc1NUMwMDAwMzI4QzAwMEE3MTAyMUM0Cis6MTA2RUEwMDA4QzQ0MDAwMDI0NjMwMDAxMTA4ODAwMDUzMDYzMDAwRjRCCis6MTA2RUIwMDA1NDY2RkZGQTAwMDMyOEMwMDNFMDAwMDgwMDAwMTAyMTE4Cis6MTA2RUMwMDAzQzA3MDgwMDI0RTc1NUM0MDBBNzMwMjEwM0UwMDAwODcwCis6MTA2RUQwMDA4Q0MyMDAwMDNDMDM5MDAwMzQ2MjAwMDEwMDgyMjAyNTM3Cis6MTA2RUUwMDAzQzAzODAwMEFDNjQwMDIwOEM2NTAwMjAwNEEwRkZGRTAxCis6MTA2RUYwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMEU5Cis6MTA2RjAwMDAzNDQzMDAwMTAwODMyMDI1MDNFMDAwMDhBQzQ0MDAyMDQ2Cis6MTA2RjEwMDAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMDBDCis6MTA2RjIwMDBBRkJGMDAxODEyMjAwMDEyMDBBMDgwMjE4Q0E1MDAwMDI1Cis6MTA2RjMwMDAxNEEwMDAxMTI0MDQwMDAyM0MwNjgwMDA4Q0MyMDFCODk5Cis6MTA2RjQwMDAwNDQwRkZGRTNDMDc0MDAwMDIyNzIwMjU4RkJGMDAxOEE5Cis6MTA2RjUwMDA4RkIxMDAxNDhGQjAwMDEwM0MwMzEwMDAyN0JEMDAyMDNCCis6MTA2RjYwMDBBQ0M1MDE4MEFDQzQwMTg4MDNFMDAwMDhBQ0MzMDFCODIzCis6MTA2RjcwMDAwQTAwMDcxRDhDQTUwMDAwMEUwMDA2NzQyNDA2MDIwMEZFCis6MTA2RjgwMDAwMDAwMjgyMTBBMDAwNzFEQUUwMDAwMDAzMDg3RkZGRjI3Cis6MTA2RjkwMDAzQzA2ODAwMDhDQzIwMUI4MDQ0MEZGRkUzQzBBNDAwNjVCCis6MTA2RkEwMDA4Q0E5MDAwMDAwRUE0MDI1QUNDOTAxODA4Q0E0MDAwNDMzCis6MTA2RkIwMDAzQzAzMTAwMEFDQzQwMTg0QUNDODAxODgwM0UwMDAwOEE1Cis6MTA2RkMwMDBBQ0MzMDFCODhGODNGRDk0MjdCREZGRThBRkJGMDAxNEE5Cis6MTA2RkQwMDBBRkIwMDAxMDkwNjcwMDA4MDA4MDEwMjEwMDgwMjgyMUM5Cis6MTA2RkUwMDAzMEU2MDA0MDAwMDAyMDIxMTBDMDAwMDg4QzUwMDAwMDU2Cis6MTA2RkYwMDAwRTAwMDA4ODAyMDAyMDIxMDIwMDIwMjE4RkJGMDAxNDEzCis6MTA3MDAwMDA4RkIwMDAxMDBBMDAwNDk3MjdCRDAwMTgwRTAwMDczMjQ5Cis6MTA3MDEwMDAwMDAwMDAwMDBFMDAwMDg4MDIwMDIwMjEwMjAwMjAyMTU0Cis6MTA3MDIwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDA0OTcyN0JEMDAxODBFCis6MTA3MDMwMDAyN0JERkZFMEFGQjAwMDEwOEY5MEZEOTRBRkJGMDAxQ0U0Cis6MTA3MDQwMDBBRkIyMDAxOEFGQjEwMDE0OTIwNjAwMDEwMDgwODgyMTkxCis6MTA3MDUwMDAwRTAwMDcwNDMwRDIwMDA0OTIwNDAwMDUwMDExMjlDMjdBCis6MTA3MDYwMDBBNjA1MDAwMDM0ODMwMDQwQTIwMzAwMDUwRTAwMDcwRUIxCis6MTA3MDcwMDAwMjIwMjAyMTBFMDAwNDk5MDIyMDIwMjEyNDAyMDAwMTc4Cis6MTA3MDgwMDBBRTAyMDAwQzAyMjAyODIxQTYwMjAwMTAyNDA0MDAwMkY3Cis6MTA3MDkwMDBBNjAyMDAxMjI0MDYwMjAwQTYwMjAwMTQwRTAwMDY3NEM2Cis6MTA3MEEwMDBBNjAyMDAxNjE2NDAwMDBGOEZCRjAwMUM5NzhDMDA1NERDCis6MTA3MEIwMDAzQzBCMDgwMDhENkIwMDc4MjU4OEZGRkYzMTA5RkZGRjJFCis6MTA3MEMwMDAyNTZBMDAwMTAxMkEzODJCMTBFMDAwMDZBNzg4MDA1NDI5Cis6MTA3MEQwMDAzQzBGNjAwNjI0MEUwMDE2MzVFRDAwMTBBREFFMDA1MERBCis6MTA3MEUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNBCis6MTA3MEYwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNDZBCis6MTA3MTAwMDBBRkJGMDAxOEFGQjAwMDEwMTA4MDAwMDQwMEEwODgyMUFECis6MTA3MTEwMDAyNDAyMDA4MDEwODIwMDA3MDAwMDAwMDAwMDAwMDAwRDIzCis6MTA3MTIwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODZCCis6MTA3MTMwMDAyN0JEMDAyMDBFMDAwNzA0MDBBMDIwMjE4Rjg2RkQ5NEFCCis6MTA3MTQwMDAwMjIwMjAyMTkwQzUwMDA1MEUwMDA3MEUzMEIwMDBGRjgwCis6MTA3MTUwMDAyNDAzMDAzRTE2MDNGRkYxMDAwMDAwMDAzQzA1ODAwMDAwCis6MTA3MTYwMDA4Q0E0MDE3ODA0ODBGRkZFMjQwODAwMDczQzA3MTAwMDZGCis6MTA3MTcwMDBBQ0IxMDE0MDAyMjAyMDIxQTBBODAxNDQ4RkJGMDAxODFCCis6MTA3MTgwMDA4RkIxMDAxNDhGQjAwMDEwQUNBNzAxNzgwQTAwMDc1QjI0Cis6MTA3MTkwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMDAwMTBBRkJGMDAxODMzCis6MTA3MUEwMDBBRkIxMDAxNDNDMTA4MDAwOEUxMTAwMjAwMDAwMDAwMEUwCis6MTA3MUIwMDAwRTAwMDQ5OUFFMDQwMDIwQUUxMTAwMjA4RkJGMDAxODBECis6MTA3MUMwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDJECis6MTA3MUQwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRUYzCis6MTA3MUUwMDAzQzA4NDAzNTAwODgzODI1M0MwMzEwMDBBQ0M1MDE4MEMwCis6MTA3MUYwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODhGCis6MTA3MjAwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRUMyCis6MTA3MjEwMDAzQzA4NDAzNjAwODgzODI1M0MwMzEwMDBBQ0M1MDE4MDhFCis6MTA3MjIwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODVFCis6MTA3MjMwMDAyN0JERkZEMEFGQjUwMDI0MzA5NUZGRkZBRkI2MDAyOEMzCis6MTA3MjQwMDBBRkI0MDAyMEFGQkYwMDJDQUZCMzAwMUNBRkIyMDAxODJBCis6MTA3MjUwMDBBRkIxMDAxNEFGQjAwMDEwMzBCNkZGRkYxMkEwMDAyNzhFCis6MTA3MjYwMDAwMDAwQTAyMThGOTIwMDM4OEU0MzAwMDAzQzA2ODAwMDcxCis6MTA3MjcwMDAyNDAyMDA0MDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RkExCis6MTA3MjgwMDAwMDY2OTgyNDE0ODIwMDFEMzBBNTAwRkY4RjgzMDA0OEZCCis6MTA3MjkwMDAyQzY4MDAwQTUxMDAwMDEwOEY4NjAwMzAwMDAzNTg4MENGCis6MTA3MkEwMDAzQzBDMDgwMDI1OEM1MjI4MDE2QzUwMjE4RDQ5MDAwMEFGCis6MTA3MkIwMDAwMTIwMDAwODAwMDAwMDAwMDJENDcwMjEzMUM1RkZGRjRBCis6MTA3MkMwMDAwRTAwMDZENjI0MDQwMDg0MTY2MDAwMDI4RjkyMDAzODU3Cis6MTA3MkQwMDBBRjgwMDA0ODhGODYwMDMwMjY0RjAwMjAyNjg5MDAwMUFECis6MTA3MkUwMDAwMUUwOTAyMTMxMzRGRkZGMTRDMDAwMDRBRjhGMDAzODVCCis6MTA3MkYwMDAwMjk1MjgyQjE0QTBGRkRDMDAwMDAwMDAwMjgwMTAyMTYyCis6MTA3MzAwMDA4RkJGMDAyQzhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMENCCis6MTA3MzEwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDEzCis6MTA3MzIwMDAwM0UwMDAwODI3QkQwMDMwMjQwNzAwMzQxNEE3MDE0NkZECis6MTA3MzMwMDAwMDAwMDAwMDkyNDcwMDBFOEY5OEZEOTg4RjkwRkQ5NEZBCis6MTA3MzQwMDAyNDBGMTYwMEEzMDcwMDE5OTI0NDAwMEQzQzA4ODAwMDhBCis6MTA3MzUwMDAzQzA3ODAwQ0EzMDQwMDE4OTY1RjAwMTIzQzA5NjAwMEYzCis6MTA3MzYwMDAzQzExN0ZGRkE2MUYwMDVDOTY1OTAwMTAzNjIyRkZGRkRDCis6MTA3MzcwMDAyNDA0MDAwNTMzMjVGRkZGQUUwNTAwNTQ4RTQ2MDAxQzkzCis6MTA3MzgwMDBBRDBGMDAyODhDRUUwMDAwOEQyRDQ0NDgwMUM2MTgyNjU0Cis6MTA3MzkwMDAwMUEzMzAyMUFFMDYwMDM4OEUwQzAwMzgyNENBMDAwMTRCCis6MTA3M0EwMDAzQzBEN0YwMEFFMEMwMDNDOEUwQjAwM0NBRjBCMDAwNDhDCis6MTA3M0IwMDBBRTBBMDAyMDhFMTMwMDIwQUUxMzAwMUNBMzAwMDAxQjk5Cis6MTA3M0MwMDBBRTAyMDAyQ0EzMDQwMDEyOEU1RjAwMTQyNDEzMDA1MEEwCis6MTA3M0QwMDBBRTFGMDAzNDhFMTkwMDM0QUYxOTAwMTQ4RTQ1MDAxODBBCis6MTA3M0UwMDBBRTA1MDA0ODkyNEYwMDBDQTIwRjAwNEU5MjA5MDAwODEzCis6MTA3M0YwMDAzNTJFMDAyMEEyMEUwMDA4OEUwMzAwMTgwMDZENjAyNEI4Cis6MTA3NDAwMDAzNThCNDAwMEFFMEIwMDE4OTIwQTAwMDAzMTUyMDBGRjhECis6MTA3NDEwMDAxMjUzMDJBNjI0MTNGRjgwM0MwNDA4MDAyNDg0NTY0MDIzCis6MTA3NDIwMDAwRTAwMDc0MDAwMDAwMDAwMjQwQzAwMDQyNDA4MDAwMUE2Cis6MTA3NDMwMDAzQzA1MDgwMDhDQTU1NjQwM0MwNDgwMDBBMjBDMDAyNUE5Cis6MTA3NDQwMDBBMjA4MDAwNThDOTAwMTc4MDYwMEZGRkU4RjkyMDAzODlDCis6MTA3NDUwMDAyNDBEMDAwMjNDMDMxMDAwQUM4NTAxNDBBMDhEMDE0NEM2Cis6MTA3NDYwMDBBQzgzMDE3ODBBMDAwODA0QUY4MDAwNDgyQ0FEMDAzN0Q3Cis6MTA3NDcwMDAxMUEwRkY5OThGODYwMDMwMDAwNTgwODAzQzExMDgwMDI0Cis6MTA3NDgwMDAyNjMxNTI1MDAyMTE3ODIxOERFRTAwMDAwMUMwMDAwODEzCis6MTA3NDkwMDAwMDAwMDAwMDI0MTAwMDA0MTRCMDAwOEUzQzA3ODAwMDlGCis6MTA3NEEwMDAzQzBCMDgwMDhENkI1NjQwOEY4NkZEOTRBQ0VCMDAyMEEyCis6MTA3NEIwMDA4RTQzMDAwODhGOEZGRDk4MjQwRTAwNTBBQ0MzMDAzMDFGCis6MTA3NEMwMDA4RTRBMDAwOEFDQ0EwMDUwOEU0MjAwMENBQ0MyMDAzNDk4Cis6MTA3NEQwMDA4RTQ0MDAxMEFDQzQwMDM4OEU1RjAwMTBBQ0RGMDA1NDQ2Cis6MTA3NEUwMDA4RTU5MDAxNEFDRDkwMDNDOEU1ODAwMThBREY4MDAwNDM5Cis6MTA3NEYwMDA4RTUxMDAxQ0FDRDEwMDIwOTBDNTAwMDAzMEE5MDBGRkM3Cis6MTA3NTAwMDAxMTJFMDI3NjAwMDAwMDAwOENDNTAwMzQ4Q0QxMDAzMEIyCis6MTA3NTEwMDAwMEIxMzAyMzA0QzAwMEYzMjQwNDAwOEMxMjYwMDBGMDlBCis6MTA3NTIwMDAyNDAyMDAwMzBBMDAwODA0QUY4MjAwNDgyNDBGMDAwNTZCCis6MTA3NTMwMDAxNEFGMDA2ODNDMEI4MDAwM0MwMzA4MDA4QzYzNTY0MDhECis6MTA3NTQwMDA4Rjg2RkQ5NEFENjMwMDIwOEU0QTAwMDQ4Rjk5RkQ5OENDCis6MTA3NTUwMDAyNDA3MjAwMEFDQ0EwMDFDOTI0MjAwMDgyNDEyMDAwODM0Cis6MTA3NTYwMDBBMzIyMDAxOThGODQwMDM4OTA5RjAwMDlBMzNGMDAxOEMwCis6MTA3NTcwMDA4Rjg1MDAzODkwQjgwMDBBMzMwNDAwRkYxMDkyMDAxMDg1Cis6MTA3NTgwMDAyODhDMDAwOTE1ODAwMEJDMjQwODAwMDIyNDBFMDAyMDZECis6MTA3NTkwMDAxMDhFMDAwQjM0MDc4MDAwMjg4OTAwMjExNTIwMDAwODc4Cis6MTA3NUEwMDAyNDA3NDAwMDI0MTEwMDQwMTA5MTAwMDUzQzA3MDAwMTExCis6MTA3NUIwMDAyNDBGMDA4MDEwOEYwMDAyM0MwNzAwMDIyNDA3NDAwMEM3Cis6MTA3NUMwMDA4Q0RGMDAxODNDMDRGRjAwMDNFNEM4MjQwMzI3QzAyNTE3Cis6MTA3NUQwMDBBQ0Q4MDAxODkwQjIwMDBCQTBEMjAwMjc4RjgzMDAzOERGCis6MTA3NUUwMDA5NDY1MDAwQzEwQTAwMjJBMDAwMDAwMDA5NDY3MDAwQ0IzCis6MTA3NUYwMDAzQzE5ODAwMDI0MEJGRkJGQTRDNzAwNUM5MDYyMDAwRTAyCis6MTA3NjAwMDAyNDA3MDAwNEEwQzIwMDA4OEY4NDAwMzg5MDlGMDAwRjU4Cis6MTA3NjEwMDBBMERGMDAwOThGOEMwMDM4OEQ5MjAwMTA4RjM4MDA3NDI1Cis6MTA3NjIwMDAwMjU4MjgyM0FDQzUwMDU4OEQ4RjAwMTRBQ0NGMDAyQzE1Cis6MTA3NjMwMDA5NTkxMDAxODMyMjlGRkZGQUNDOTAwNDA5NThFMDAxQUMxCis6MTA3NjQwMDAzMUQwRkZGRkFDRDAwMDQ0OEQ4RDAwMUNBQ0NEMDA0ODg0Cis6MTA3NjUwMDA5NTg4MDAwMkE0QzgwMDc4OTE4MzAwMEVBMEMzMDAwODlBCis6MTA3NjYwMDA5MENBMDAwODAxNEIxMDI0MTI2MDAxRDRBMEMyMDAwODg3Cis6MTA3NjcwMDA4RjkyMDAzODBBMDAwODA0QUY4NzAwNDgyNDA2MDAwNkVECis6MTA3NjgwMDAxNEE2MDAxNDNDMEQ4MDAwM0MxMDA4MDA4RTEwNTY0MERCCis6MTA3NjkwMDA4RjhDRkQ5MEFEQjAwMDIwOEU0ODAwMTg4Rjg2RkQ5NDMxCis6MTA3NkEwMDA4RjhBRkQ5OEFEODgwMDAwOENDMzAwMzgyNDA0MDAwNTQzCis6MTA3NkIwMDBBRDgzMDAwNDhDQ0IwMDNDMTI2MDAwODFBRDRCMDAwMDE4Cis6MTA3NkMwMDAwQTAwMDgwNEFGODQwMDQ4MjQwRTAwMDcxMEFFMDA0QkU3Cis6MTA3NkQwMDAyNDA0MDAwNjNDMDUwODAwMjRBNTU2NDAwRTAwMDcxM0FDCis6MTA3NkUwMDAyNDA0MDA4MThGOTIwMDM4MDAxMzEwMkIwQTAwMDgwNDM0Cis6MTA3NkYwMDBBRjgyMDA0ODI0MTkwMDIzMTRCOUZGRjYzQzBCODAwMDI4Cis6MTA3NzAwMDAzQzBDMDgwMDhEOEM1NjQwOEY4QUZEOThBRDZDMDAyMDkzCis6MTA3NzEwMDA4RjkxRkQ5NDhFNDYwMDA0MjU0NDAwMjAyNjQ1MDAxNEQ4Cis6MTA3NzIwMDBBRTI2MDAyODI0MDYwMDAzMEUwMDBFMkEyNTUwMDAzMDQ1Cis6MTA3NzMwMDA4Rjg3MDAzODAyMDAyMDIxMjQwNjAwMDMwRTAwMEUyQTQ1Cis6MTA3NzQwMDAyNEU1MDAwODNDMDQwODAwMjQ4NDU2NDAwRTAwMDc0MDRECis6MTA3NzUwMDAwMDAwMDAwMDkyMjIwMDAwMjQxRjAwNTAzMDQ0MDBGRjZGCis6MTA3NzYwMDA1NDlGRkZFMThGOTIwMDM4MEUwMDBFMTUwMDAwMDAwMEJDCis6MTA3NzcwMDAwQTAwMDkwOThGOTIwMDM4MjQwMzAwMzMxNEEzMDAzMjUxCis6MTA3NzgwMDAzQzAyODAwMDNDMTEwODAwOEUzMTU2NDA4RjhFRkQ5OERGCis6MTA3NzkwMDBBQzUxMDAyMDhFNDQwMDA4MjQwOTAwMjg4Rjg4RkQ5NEY1Cis6MTA3N0EwMDBBREM0MDAzMDhFNUYwMDBDMjQwNjAwMDlBRERGMDAzNDRDCis6MTA3N0IwMDA4RTU5MDAxMEFERDkwMDM4OEU1ODAwMTRBREQ4MDAyMDc1Cis6MTA3N0MwMDA4RTQ1MDAxOEFEQzUwMDI0OEU0RjAwMUNBRENGMDAyODlCCis6MTA3N0QwMDBBMUM5MDAxMThFNEQwMDA0MTI2MDAwMzFBRDBEMDAyOENBCis6MTA3N0UwMDA4RjkyMDAzODBBMDAwODA0QUY4NjAwNDgyNDA5MDAyMjVFCis6MTA3N0YwMDAxNEE5RkZCODAwMDAwMDAwMjQwNDAwMDczQzBGMDgwMDkzCis6MTA3ODAwMDA4REVGNTY0MDNDMTE4MDAwQUUyRjAwMjA1NjYwRkVCMTM3Cis6MTA3ODEwMDBBRjg0MDA0ODNDMDQwODAwMjQ4NDU2NDAwRTAwMDc0MDEyCis6MTA3ODIwMDAyNDEzMDA1MDhGOThGRDk0OTMxMjAwMDAzMjQ1MDBGRkZFCis6MTA3ODMwMDAxMEIzMDE2OTAwMDAwMDAwOEY5MjAwMzgwMDAwMjAyMTgxCis6MTA3ODQwMDAwQTAwMDgwNEFGODQwMDQ4M0MwNTA4MDAyNEE1NTY0MEZGCis6MTA3ODUwMDAwRTAwMDZFMzI0MDQwMDgxMEEwMDA5MDk4RjkyMDAzODEzCis6MTA3ODYwMDAwMkQ0OTgyMTMyNjVGRkZGMEUwMDA2RDYyNDA0MDA4NDVFCis6MTA3ODcwMDAwQTAwMDgwNDhGOTIwMDM4MTA4OEZGNTEyNDA3MDQwMDgyCis6MTA3ODgwMDAyODg3MDAwMzEwRTAwMUEzMjQxMDAwMDQyNDBEMDAwMTQ4Cis6MTA3ODkwMDA1NDhERkY0QjI0MDc0MDAwMEEwMDA4QkYyNDA3MDEwMDU1Cis6MTA3OEEwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjNGCis6MTA3OEIwMDA4RjkyMDAzODAwMDAzMDIxMEEwMDA4MDRBRjg2MDA0ODhCCis6MTA3OEMwMDAzQzA0MDgwMDI0ODQ1NjQwOENDMjAwMzgwRTAwMDc0MDU3Cis6MTA3OEQwMDA4Q0MzMDAzQzhGOTIwMDM4MEEwMDA5NUYwMDAwMjAyMTExCis6MTA3OEUwMDAyNDA0MDA4MjNDMDUwODAwMjRBNTU2NDAwRTAwMDczMkZGCis6MTA3OEYwMDAwMDAwMDAwMDhGOTIwMDM4MDAwMDEwMjEwQTAwMDgwNEU4Cis6MTA3OTAwMDBBRjgyMDA0ODhFNTAwMDA0OEY5MUZEOTQzQzBBODAwMEE1Cis6MTA3OTEwMDBBRDUwMDAyMDkyMjIwMDA1MDIwMDI4MjEzMDQ2MDAwMkNFCis6MTA3OTIwMDAxNEMwMDE4MDI0MDQwMDhBOEY5MkZEOTgwMjAwMjgyMTRGCis6MTA3OTMwMDAyNDA0MDA4RDkyNEIwMDFCMzE2MzAwMjAxNDYwMDE3OUY4Cis6MTA3OTQwMDAwMDAwMDAwMDkyMkQwMDA5MjQwQzAwMTIzMUE4MDBGRjU1Cis6MTA3OTUwMDAxMTBDMDE3NDI0MDQwMDgxMEUwMDA3MDQwMjAwMjAyMTkwCis6MTA3OTYwMDA5MjQ1MDAxQjI0MEUwMDA0MDIwMDIwMjEzNEE5MDA0MjhECis6MTA3OTcwMDBBMjQ5MDAxQjBFMDAwNzBFQTIyRTAwMjUzQzA0ODAwMDI5Cis6MTA3OTgwMDA4QzkxMDE3ODA2MjBGRkZFMjQxODAwMDJBQzkwMDE0MDgzCis6MTA3OTkwMDBBMDk4MDE0NDhGOTIwMDM4M0MwRjEwMDBBQzhGMDE3ODAyCis6MTA3OUEwMDAwQTAwMDkwQTAwMTMxMDJCOEU1MDAwMDQ4RjkxRkQ5NEQ5Cis6MTA3OUIwMDAzQzFGODAwMEFGRjAwMDIwOTIzOTAwMDUwMjAwMjgyMTEyCis6MTA3OUMwMDAzMzI3MDAwMjE0RTAwMDE3MjQwNDAwOEE5MjI0MDAwOURGCis6MTA3OUQwMDAyNDEyMDAwNDAyMDAyODIxMzA4NjAwRkYxMEQyMDAxMTdBCis6MTA3OUUwMDAyNDA0MDA4MTBFMDAwNzA0MDIwMDIwMjE4RjhDRkQ5OEUyCis6MTA3OUYwMDAyNDBCMDAxMjI0MDNGRkZFOTE4RDAwMUIwMjAwMjAyMUE2Cis6MTA3QTAwMDAzNUE4MDAyMEExODgwMDFCQTIyQjAwMDk5MjJBMDAwNTlFCis6MTA3QTEwMDAwMTQzMTAyNDBFMDAwNzBFQTIyMjAwMDUwMjAwMjgyMUI3Cis6MTA3QTIwMDAwMDAwMjAyMTBFMDAwN0NGMDAwMDAwMDAwQTAwMDkwOTE1Cis6MTA3QTMwMDA4RjkyMDAzODhFNTEwMDA0M0MwMjgwMDAzQzEwMDgwMEY4Cis6MTA3QTQwMDAyNjEwNTY0MEFDNTEwMDIwM0MwMTA4MDBBQzMxNTY0MDk1Cis6MTA3QTUwMDA5MjQ2MDAwMzMwQzQwMDA0MTA4MDAxNjU4Rjg0RkQ5NEI5Cis6MTA3QTYwMDAyNDAyMDAwNkEwODIwMDA5OTI0RDAwMUIyNDA4RkZDMERBCis6MTA3QTcwMDAzMUFDMDAzRjAxODg1ODI1QTA4QjAwMDg5MjQzMDAwM0Q5Cis6MTA3QTgwMDAzMDZBMDAwMTE1NDAwMTVDMDAwMDAwMDA4RTQyMDAwOEQxCis6MTA3QTkwMDBBRTAyMDAwODNDMDIwODAwOEM0MjU2NDgxMDQwMDE1QkQwCis6MTA3QUEwMDA4RjhFRkQ5ODAwMDI4MUMyOEY4NUZEOTRBNUQwMDAwQ0I5Cis6MTA3QUIwMDA4RTVGMDAwQzI0MEYwMDAxMjQwOTAwMTRBRERGMDAyQ0EwCis6MTA3QUMwMDA4RTU5MDAxMEFERDkwMDFDOTY0NzAwMTZBNUM3MDAzQzgyCis6MTA3QUQwMDA5NjU4MDAxNEE1RDgwMDNFQUNBRjAwMENBNEFGMDAxMDFGCis6MTA3QUUwMDBBNEFGMDAxMkE0QUYwMDE0QTRBRjAwMTYxMjYwMDE1RjhGCis6MTA3QUYwMDBBMUM5MDAxMTkyNDQwMDAzMzA5MjAwMDIyRTUzMDAwMUVDCis6MTA3QjAwMDA4RjkyMDAzODI2NjIwMDA4MEEwMDA4MDRBRjgyMDA0OEZECis6MTA3QjEwMDA4RTQ2MDAwNDNDMDU4MDAwM0MwNDgwMDhBQ0E2MDAyMDkyCis6MTA3QjIwMDA4RTQ3MDAwODkwODkwMDAwMjQxMTAwNTAzMTIyMDBGRjg4Cis6MTA3QjMwMDAxMDUxMDBCODI0MDUwMDg4M0MwNDgwMDA4QzhGMDFCOEU3Cis6MTA3QjQwMDAwNUUwRkZGRTAwMTM4MDJCM0MxODQwMDkwMEI4MTAyNTBCCis6MTA3QjUwMDBBRjkwMDA0ODNDMTAxMDAwQUM4NjAxODBBQzg3MDE4NEQ3Cis6MTA3QjYwMDBBQzgyMDE4OEFDOTAwMUI4MEEwMDA4MDU4Rjg2MDAzMDBECis6MTA3QjcwMDA4RTQ1MDAwNDNDMDY4MDAwM0MwOTgwMDhBQ0M1MDAyMDBFCis6MTA3QjgwMDA5MTNGMDAwMDI0MDQwMDUwMzNGOTAwRkYxMzI0MDBCMDlCCis6MTA3QjkwMDAyNDA2MDA4ODNDMDQ4MDAwOEM4QTAxQjgwNTQwRkZGRTYyCis6MTA3QkEwMDAzQzBFNDAwRTAwQ0U2ODI1M0MwODEwMDBBQzg1MDE4MERDCis6MTA3QkIwMDBBQzgwMDE4NEFDOEQwMTg4QUM4ODAxQjg5MTJCMDAwMEE5Cis6MTA3QkMwMDAyNDBDRkY4MDI0MDQwMDA0MDE2QzE4MjUyNDA2MDAzMEQ2Cis6MTA3QkQwMDAwRTAwMDY3NEExMjMwMDAwMEEwMDA5MDk4RjkyMDAzOEU0Cis6MTA3QkUwMDA4RTUwMDAwNDhGOTFGRDk4M0MwRjgwMDBBREYwMDAyMDc2Cis6MTA3QkYwMDA5MjI1MDAxQjMwQTkwMDEwMTEyMDAwN0MyNDAzMDA4MTc1Cis6MTA3QzAwMDAzQzA0ODAwMDhDODcwMUI4MDRFMEZGRkUzQzFGNDAxRjRECis6MTA3QzEwMDBBQzkwMDE4MDAwN0YxMDI1MDAxM0M4MkIzQzEwMTAwMDkxCis6MTA3QzIwMDBBQzgwMDE4NEFGOTkwMDQ4QUM4MjAxODhBQzkwMDFCODY3Cis6MTA3QzMwMDAwQTAwMDgwNThGODYwMDMwOEU0NDAwMUMwRTAwMDZFRkY3Cis6MTA3QzQwMDAwMDAwMDAwMDEwNDAwMEY4MDA0MDM4MjE4RjkyMDAzOEZBCis6MTA3QzUwMDAyNDA2MDA4OTNDMDU4MDAwOENBRTAxQjgwNUMwRkZGRUZCCis6MTA3QzYwMDAwMDAwMDAwMEFDQTcwMTgwOEU1MDAwMUMzQzExNDAwMUI4Cis6MTA3QzcwMDAwMDEzNzgyQjAwRDEzODI1M0MxMzEwMDBBQ0IwMDE4NEUwCis6MTA3QzgwMDBBRjhGMDA0OEFDQTcwMTg4QUNCMzAxQjgwQTAwMDgwNTYzCis6MTA3QzkwMDA4Rjg2MDAzMDk2NTkwMDAyM0MxMDA4MDAyNjEwNTY0MDhFCis6MTA3Q0EwMDAzMzM4MDAwNDEzMDAwMEEzM0MwNDYwMDA4RTVGMDAxQzA2Cis6MTA3Q0IwMDAzQzA2ODAwMEFDREYwMDIwM0MwMTA4MDBBQzNGNTY0MDkxCis6MTA3Q0MwMDA5NjRGMDAwMjMxRTcwMDAxMTRFMDAwRTMwMDAwMDAwMERECis6MTA3Q0QwMDA4RTQyMDAwNEFFMDIwMDA4M0MxMDA4MDA4RTEwNTY0ODg4Cis6MTA3Q0UwMDAxMjAwMDBEOTNDMDY4MDAwOEY4NUZEOTQyNDEwMDAwMTBECis6MTA3Q0YwMDA4Q0JGMDAxODhGOTFGRDk4OEY4OUZEOTAwM0U2QzgyNUYxCis6MTA3RDAwMDBBQ0I5MDAxOEEwQTAwMDA1QUNCMDAwMEMzQzE4MDgwMEVECis6MTA3RDEwMDA4RjE4NTY0ODhGODcwMDM4QTRCMDAwMTAwMDE4NzlDMjE5Cis6MTA3RDIwMDBBNEIwMDAxMkE0QjAwMDE0QTRCMDAwMTZBNjJGMDAwQzNBCis6MTA3RDMwMDA4Q0VFMDAwODhGOEQwMDM4OEY4QzAwMzhBRTJFMDAyQzEyCis6MTA3RDQwMDA4REE4MDAwQzI0MDcwMDAyQUUyODAwMUM5MThCMDAxMEE3Cis6MTA3RDUwMDBBMjJCMDAxMThGODMwMDM4OTA2QTAwMTFBMTJBMDAwODFECis6MTA3RDYwMDA4RjgyMDAzODkwNDQwMDEyQTBBNDAwNEU4RjkyMDAzOEY5Cis6MTA3RDcwMDA5MjQ2MDAxM0EyMjYwMDEyOEY5MjAwMzg5NjVGMDAxNERDCis6MTA3RDgwMDBBNjNGMDAzQzk2NTkwMDE2QTYzOTAwM0U4RTU4MDAxOEIyCis6MTA3RDkwMDBBRTM4MDAxNDU2NjBGRDRGQUY4NzAwNDgzQzA1MDgwMDIwCis6MTA3REEwMDAyNEE1NTY0MDBFMDAwNzEzMDAwMDIwMjE4RjkyMDAzOEIyCis6MTA3REIwMDAwMDAwMzgyMTBBMDAwODA0QUY4NzAwNDgzQzA1MDgwMDhECis6MTA3REMwMDAyNEE1NTY0MDBFMDAwNzMyMjQwNDAwODI4RjkyMDAzODBBCis6MTA3REQwMDAwQTAwMDhFQzAwMDAzODIxMEUwMDBFMTUwMDAwMDAwMDFCCis6MTA3REUwMDA4RjkyMDAzODBBMDAwOTVGMDAwMDIwMjEwRTAwMDcwNDZFCis6MTA3REYwMDAwMjAwMjAyMTkyMzIwMDFCMDIwMDIwMjEzNjU4MDAxMDgwCis6MTA3RTAwMDAwRTAwMDcwRUEyMzgwMDFCOEY5MjAwMzgwQTAwMEE0RjlFCis6MTA3RTEwMDAwMDAwMTgyMTkyNDMwMDBDMzA2QTAwMDExMTQwMDAwMzU5Cis6MTA3RTIwMDAwMDAwMDAwMDk2NEIwMDBFQTQ4QjAwMkM5MjQ4MDAwQzIyCis6MTA3RTMwMDAzMTBDMDAwMjExODBGRjQwMDAwMDI4MjE5NjRFMDAxMkY0Cis6MTA3RTQwMDA4RTREMDAxNEE0OEUwMDFBMEEwMDBBMURBQzhEMDAxQzcxCis6MTA3RTUwMDA4RjgzMDA1ODhGODcwMDUwMTA2N0ZGNEUwMDAwMzAyMTNECis6MTA3RTYwMDAzQzA4MDgwMDI1MDg1NUM0MDAwMzIwQzAwMDg4MzAyMUM0Cis6MTA3RTcwMDA4Q0QxMDAwMDEyMjUwMEM4MjQ2MjAwMDEzMDQzMDAwRjlECis6MTA3RTgwMDAxNDY3RkZGQTAwMDMyMEMwMEEwMDBBMzQwMDAwMzAyMTAyCis6MTA3RTkwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4QjQwCis6MTA3RUEwMDA4RjkyMDAzODBBMDAwOEVDMDAxMzM4MkIzQzBCMDgwMEI2Cis6MTA3RUIwMDA4RDZCNTY0MDI0RDhGRkZFMjU3MTAxMDAzMjJBMDA3RkM5Cis6MTA3RUMwMDAwMTQ3OTAyMTAyMzMxMDI0QUQwMjAwMjhBRTQ2MDBEMEI1Cis6MTA3RUQwMDBBRTQwMDBENDBBMDAwODU1QUU1ODAwMUNBQ0MwMDA1NDk3Cis6MTA3RUUwMDAzQzBFMDgwMDhEQ0U1NjQwM0MwOTgwMEMzNTJDMDEwMDFDCis6MTA3RUYwMDBBQ0VFMDAyODhFNTAwMDE0QUQ5MDAwRDA4RTREMDAxNEQyCis6MTA3RjAwMDBBRDhEMDBENDhFNDgwMDEwMjUwN0ZGRkUwQTAwMDg5MUIxCis6MTA3RjEwMDBBRDg3MDAxQzU0OTBGREFBMjQwNzQwMDAwQTAwMDhCRjRBCis6MTA3RjIwMDAyNDA3MTAwMDBFMDAwN0MzMDAwMDAwMDAwQTAwMDkwOTIyCis6MTA3RjMwMDA4RjkyMDAzODhDODM0NDJDM0MwNURFQUQzNEIyQkVFRjBBCis6MTA3RjQwMDAzQzAxMDgwMEFDMjA1NjQwMTA3MjAwOTAwMDAwMDAwMDc4Cis6MTA3RjUwMDAzQzA0NkM2MjM0ODI3OTcwMTQ2MjAwMDgyNDA0MDAwMkNDCis6MTA3RjYwMDA5NzhBMDA1NDk3ODMwMDRDMDIwMDI4MjEwMTQzNDgyQjM0Cis6MTA3RjcwMDAxMTIwMDAxOTI0MDQwMDkyMjQwNDAwMDIwRTAwMDVFNERDCis6MTA3RjgwMDAyNDA1MDIwMDNDMEI4MDAwQUQ2MjAwMjAzQzAxMDgwMDhCCis6MTA3RjkwMDBBQzIyNTY0MDEwNDAwMDBEOEY4RTAwMzgyNDBDMDAyODczCis6MTA3RkEwMDAyNDA0MDAwMzkxQ0QwMDEwMzFBODAwRkY1NTBDMDAwMUZFCis6MTA3RkIwMDAyNDA0MDAwMTBFMDAwMDRDMDAwMDAwMDAxMDQwMDAwNEVBCis6MTA3RkMwMDAyNDA0MDA4MzBBMDAwQTdGOEY5MjAwMzgyNDA0MDA4MzZGCis6MTA3RkQwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MTMwMDAwMDAwMEQxCis6MTA3RkUwMDA4RjkyMDAzODAwMTMzODJCMEEwMDA4MDRBRjg3MDA0ODJFCis6MTA3RkYwMDAwQTAwMDlFODI0MDIwMDEyOEU0NDAwMDgwRTAwMDZFRjcxCis6MTA4MDAwMDAwMDAwMDAwMDBBMDAwOUY0QUUwMjAwMDgzQzA1MDgwMDY4Cis6MTA4MDEwMDAyNEE1NTY0MDBFMDAwNkUzMjQwNDAwODc4RjkyMDAzODAyCis6MTA4MDIwMDAwQTAwMEExMTAwMTMxMDJCMjQwNDAwMDQwRTAwMDVFNEJBCis6MTA4MDMwMDAyNDA1MDAzMDE0NDAwMDE0MDA0MDM4MjE4RjkyMDAzODhECis6MTA4MDQwMDAwQTAwMEE2NDI0MDYwMDgzM0MwNTA4MDAyNEE1NTY0MDYzCis6MTA4MDUwMDAwQTAwMEI0NTI0MDQwMDg3OEU0NDAwMDQwRTAwMDZFRjNFCis6MTA4MDYwMDAwMDAwMDAwMDBBMDAwQTg1QUUwMjAwMDgzQzA1MDgwMDc2Cis6MTA4MDcwMDAyNEE1NTY0MDBFMDAwNzMyMjQwNDAwODI4RjkyMDAzODU3Cis6MTA4MDgwMDAwQTAwMEExMTAwMDAxMDIxOEY5MjAwMzgzQzA4ODAwODc1Cis6MTA4MDkwMDAzQzBDODAwMDI0MEIwMDUwMjQwQTAwMDFBRDgyMDAyMDFCCis6MTA4MEEwMDBBMTBCMDAwMEExMEEwMDAxOTI0OTAwMDRBMTA5MDAxOEQ3Cis6MTA4MEIwMDA5MjQ0MDAwNUExMDQwMDE5OTI0MzAwMDYzQzA0MDgwMDA0Cis6MTA4MEMwMDAyNDg0NTVDNEExMDMwMDFBOTI0MjAwMDczQzAzMDgwMDBGCis6MTA4MEQwMDAyNDYzNTVDMEExMDIwMDFCOTI0NTAwMDhBMTA1MDAxQ0E1Cis6MTA4MEUwMDA5MjQ2MDAwOUExMDYwMDFEOTI1RjAwMEFBMTFGMDAxRTEyCis6MTA4MEYwMDA5MjU5MDAwQkExMTkwMDFGOTI1ODAwMENBMTE4MDAyMEUyCis6MTA4MTAwMDA5MjUxMDAwREExMTEwMDIxOTI1MDAwMEVBMTEwMDAyMkU5Cis6MTA4MTEwMDA5MjRGMDAwRkExMEYwMDIzOTI0RTAwMTBBMTBFMDAyNEQ5Cis6MTA4MTIwMDA5MjREMDAxMUExMEQwMDI1OTY0QzAwMTRBNTBDMDAyOEJECis6MTA4MTMwMDA5NjRCMDAxNjhGOEEwMDUwOEY5ODAwNThBNTBCMDAyQTg2Cis6MTA4MTQwMDA5NjQ5MDAxODAwMEExMEMwMjU0NTAwMDFBNTA5MDAyQzE5Cis6MTA4MTUwMDA4RTQ2MDAxQzAwNDRDODIxMDA0M0Y4MjEzMEE1MDAwRkMyCis6MTA4MTYwMDBBRkU2MDAwMEFGMjcwMDAwMTBCODAwMDNBRjg1MDA1MDU1Cis6MTA4MTcwMDAwQTAwMEE2NDAwMDAzMDIxMjRBRDAwMDEzMUE4MDAwRjdDCis6MTA4MTgwMDAwMDAwMzAyMTBBMDAwQTY0QUY4ODAwNTg4QzgzNDQyQzE4Cis6MTA4MTkwMDAwQTAwMEIyNDNDMDQ2QzYyM0MwNzA4MDAyNEU3NTVDMDJECis6MTA4MUEwMDAwMDg3OTAyMUFDQzAwMDAwMDAwMDMwMjEwQTAwMEEzNDkyCis6MTA4MUIwMDBBRTQwMDAwMDNDMDQ4MjAxM0MwMzYwMDAzNDgyMEUwMkE5Cis6MTA4MUMwMDBBQzYwM0Q2OEFGODAwMDc4MDNFMDAwMDhBQzYyM0Q2Q0I1Cis6MTA4MUQwMDAyN0JERkZFOEFGQjAwMDEwMzA5MEZGRkYwMDEwMTg0MjNECis6MTA4MUUwMDAyQzYyMDA0MUFGQkYwMDE0MTQ0MDAwMDIyNDA0MDA4MDQwCis6MTA4MUYwMDAyNDAzMDA0MDNDMDEwODAwQUMzMDAwNjAzQzAxMDgwMDUyCis6MTA4MjAwMDBBQzIzMDA2NDBFMDAwRTFFMDA2MDI4MjEyNDQ4MDJCRjJCCis6MTA4MjEwMDAyNDA5RkY4MDAxMDkyODI0MDAxMDM5ODAwMDEwMzA0MDEzCis6MTA4MjIwMDA4RkJGMDAxNDhGQjAwMDEwMDBBNzIwMjEwMDg2MTgyMUY2Cis6MTA4MjMwMDBBRjgzMDA2MDNDMDEwODAwQUMyNTAwNTgzQzAxMDgwMEY5Cis6MTA4MjQwMDBBQzI0MDA1QzAzRTAwMDA4MjdCRDAwMTgzMDgzMDBGRjY5Cis6MTA4MjUwMDAzMEM2RkZGRjMwRTQwMEZGM0MwODgwMDA4RDAyMDFCODBCCis6MTA4MjYwMDAwNDQwRkZGRTAwMDM1NDAwMDE0NDM4MjUzQzA5NjAwMDJGCis6MTA4MjcwMDAwMEU5MjAyNTNDMDMxMDAwQUQwNTAxODBBRDA2MDE4NDE2Cis6MTA4MjgwMDBBRDA0MDE4ODAzRTAwMDA4QUQwMzAxQjg4Rjg2MDAzODEzCis6MTA4MjkwMDAzQzA5NjAxMjM1MjcwMDEwOENDQjAwMDQzQzBDNjAwRUFBCis6MTA4MkEwMDAzNTg1MDAxMDMxNkEwMDA2MkQ0ODAwMDFBQ0U4MDBDNDk1Cis6MTA4MkIwMDA4Q0M0MDAwNEFDQTQzMTgwOENDMjAwMDg5NEMzMDAwMkJBCis6MTA4MkMwMDBBQ0EyMzE4NDAzRTAwMDA4QTc4MzAwNzA4Rjg1MDAzOERBCis6MTA4MkQwMDA4Rjg3RkYyMDhGODZGRjI4OENBRTAwMDQzQzBGNjAxMjMyCis6MTA4MkUwMDAzNUU4MDAxMEFDRUUwMDY4OENBRDAwMDhBQ0VEMDA2QzE5Cis6MTA4MkYwMDA4Q0FDMDAxMEFDQ0MwMDRDOENBQjAwMENBQ0NCMDA0ODcwCis6MTA4MzAwMDA5NENBMDA1NDNDMDIwODAwOEM0MjAwNDQyNTQ5MDAwMUY0Cis6MTA4MzEwMDBBNEM5MDA1NDk0QzQwMDU0MzA4M0ZGRkYxMDYyMDAxN0I2Cis6MTA4MzIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwNDBBNEMyMDA1MjQxCis6MTA4MzMwMDA4Q0EzMDAxOEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQzNCCis6MTA4MzQwMDA4Q0I5MDAxOEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMTcxCis6MTA4MzUwMDBBQ0Y4MDAzNDhEMDYwMEJDNTBDNTAwMTk4RDAyMDBCNDg1Cis6MTA4MzYwMDA4RDAyMDBCOEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QTY2Cis6MTA4MzcwMDA5NEU4MDBEQTAzRTAwMDA4MzEwMkZGRkYzQzAyMDgwMDQ1Cis6MTA4MzgwMDA4QzQyMDAyNEE0QzAwMDU0QTRDMjAwNTI4Q0EzMDAxODQ0Cis6MTA4MzkwMDBBQ0UzMDAzMDhDQTIwMDE0QUNFMjAwMkM4Q0I5MDAxOEM1Cis6MTA4M0EwMDBBQ0Y5MDAzODhDQjgwMDE0MjQwNTAwMDFBQ0Y4MDAzNDk2Cis6MTA4M0IwMDA4RDA2MDBCQzU0QzVGRkVCOEQwMjAwQjg4RDAyMDBCNEUxCis6MTA4M0MwMDBBNEUyMDA0ODk0RTQwMDQ4QTRFNDAwNEE5NEU4MDBEQUY3Cis6MTA4M0QwMDAwM0UwMDAwODMxMDJGRkZGOEY4NjAwMzgzQzA0ODAwMDc0Cis6MTA4M0UwMDA4Q0M5MDAwODhDQzgwMDA4MDAwOTI5QzAwMDA4MzlDMEUxCis6MTA4M0YwMDBBQzg3MDAyMDkwQzMwMDA3MzA2MjAwMDQxMDQwMDAzQUIwCis6MTA4NDAwMDBBRjg1MDA3NDkwQ0IwMDA3MzE2QTAwMDgxMTQwMDAzOTM1Cis6MTA4NDEwMDA4Rjg3RkYyNDhDQ0QwMDBDOENDRTAwMTQwMUFFNjAyQjE2Cis6MTA4NDIwMDAxMTgwMDAzMjAwMDAwMDAwOENDMjAwMENBQ0UyMDA3MDMxCis6MTA4NDMwMDA4Q0NCMDAxODhGODVGRjIwOEY4OEZGMjhBQ0VCMDA3NDUxCis6MTA4NDQwMDA4Q0NBMDAxMDI0MDJGRkY4QUNBQTAwQzg4Q0M5MDAwQzJBCis6MTA4NDUwMDBBRDA5MDA2MDhDQzQwMDFDQUNBNDAwQzA5MEUzMDA3QzlCCis6MTA4NDYwMDAwMDYyQzgyNEEwRjkwMDdDOTBEODAwMDczMzBGMDAwOEYwCis6MTA4NDcwMDAxMUUwMDAwNDAwMDAwMDAwOTBFRDAwN0MzNUFDMDAwMTJDCis6MTA4NDgwMDBBMEVDMDA3QzkwQ0YwMDA3MzFFRTAwMDExMUMwMDAwOTg0Cis6MTA4NDkwMDAwMDAwMDAwMDkwRTQwMDdDMjQxODAwMDIzNDgyMDAwMkY2Cis6MTA4NEEwMDBBMEUyMDA3QzkwQTMwMEVDMzA3OTAwRkYxMzM4MDAxM0E5Cis6MTA4NEIwMDAyNDA4MDAzNDkwQzkwMDA3MzEyNjAwMDIxMEMwMDAwNENGCis6MTA4NEMwMDAwMDAwMDAwMDkwRUIwMDdDMzU2QTAwMDRBMEVBMDA3QzBDCis6MTA4NEQwMDA5MEVEMDA3RDMxQUMwMDNGQTBFQzAwN0Q5NEE3MDBEQTY4Cis6MTA4NEUwMDAwM0UwMDAwODMwRTJGRkZGOEY4N0ZGMjQwQTAwMEM1QUU4Cis6MTA4NEYwMDA4Q0MyMDAxNDBBMDAwQzVCQUNFMDAwNzAwQTAwMEM3QzFCCis6MTA4NTAwMDBBQ0E4MDBDQzhGOEMwMDM4MjdCREZGRDhBRkIzMDAxQ0JGCis6MTA4NTEwMDBBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjBBRkIxMDAxNDcxCis6MTA4NTIwMDA5MThGMDAxNTNDMTM2MDBFMzY3MzAwMTAzMUVCMDAwRjc1Cis6MTA4NTMwMDBBMzhCMDA3QzhEOEYwMDA0OEQ4QjAwMDg5NTlGMDAxMjBCCis6MTA4NTQwMDA5NTk5MDAxMDk1ODQwMDFBOTU5ODAwMUU5NThFMDAxQzMwCis6MTA4NTUwMDAzM0VERkZGRjMzMkFGRkZGMzA4OUZGRkYzMzA4RkZGRkIyCis6MTA4NTYwMDAzMUM3RkZGRjNDMDEwODAwQUMyRDAwMjQzQzAxMDgwMDhFCis6MTA4NTcwMDBBQzI5MDA0NDNDMDEwODAwQUMyQTAwNDBBRTY4MzE3OEM4Cis6MTA4NTgwMDBBRTY3MzE3QzkxODUwMDE1OTU5MTAwMTYzQzEyNjAxMjAyCis6MTA4NTkwMDAzNjUyMDAxMDMwQTIwMEZGMzIzMEZGRkZBRTYyMzE4ODQ5Cis6MTA4NUEwMDBBRTUwMDBCNDkxODMwMDE0OTU5RjAwMTgyNDA2MDAwMTdBCis6MTA4NUIwMDAwMDY2QzgwNDMzRjhGRkZGQUU1OTAwQjhBRTU4MDBCQ0RGCis6MTA4NUMwMDA5MThFMDAxNEFGOEYwMDY0M0MwODYwMDYzMUNEMDBGRjJGCis6MTA4NUQwMDBBRTREMDBDMDkxOEEwMDE1OTU4NDAwMEUzQzA3NjAwQURDCis6MTA4NUUwMDAzMTQ5MDBGRkFGOEIwMDY4MzA4NEZGRkZBRTQ5MDBDOEZGCis6MTA4NUYwMDAzNTExMDAxMDBFMDAwQkMzMzRGMDA0MTAzQzAyMDgwMENCCis6MTA4NjAwMDA4QzQyMDA2MDNDMDMwODAwOEM2MzAwNjQzQzA2MDgwMDU4Cis6MTA4NjEwMDA4Q0M2MDA1ODNDMDUwODAwOENBNTAwNUM4Rjg0MDA2MDY3Cis6MTA4NjIwMDA4RkJGMDAyMEFFMjMwMDRDQUU2NTMxOUNBRTAzMDA1NERBCis6MTA4NjMwMDBBRTQ1MDBEQ0FFNjIzMUEwQUU2MzMxQTRBRTY2MzE5OEM3Cis6MTA4NjQwMDBBRTIyMDA0ODhGQjMwMDFDQUUwMjAwNTA4RkIxMDAxNDYwCis6MTA4NjUwMDBBRTQyMDBFMEFFNDMwMEU0QUU0NjAwRDg4RkIwMDAxMDVBCis6MTA4NjYwMDA4RkIyMDAxODBBMDAwNENDMjdCRDAwMjg5Nzg1MDA3MjNECis6MTA4NjcwMDA5NzgzMDA1QzI3QkRGRkU4QUZCMDAwMTAwMEEzMTAyQjZDCis6MTA4NjgwMDBBRkJGMDAxNDI0MDQwMDA1OEY5MDAwMzgxMDQwMDA1NTNGCis6MTA4NjkwMDAyNDA5MDAwMjBFMDAwNUU0OEY4NTAwNjBBRjgyMDA3NDlCCis6MTA4NkEwMDAyNDA0MDAwMzEwNDAwMDRGMjQwOTAwMDIzQzA2ODAwMDBGCis6MTA4NkIwMDAwRTAwMDA0Q0FDQzIwMDIwMjQwNzAwMDEyNDA4MjAwMDVBCis6MTA4NkMwMDAxMDQwMDA0RDI0MDQwMDA1OTc4RTAwNzI4RjhBRkYyNDBECis6MTA4NkQwMDAyNDA5MDA1MDI1QzUwMDAxQTc4NTAwNzJBMTQ5MDAwMEFBCis6MTA4NkUwMDAzQzBEMDgwMDhEQUQwMDY0MjQwMzgwMDA4Rjg0RkYyMEMyCis6MTA4NkYwMDAwMDBENjYwMEFENEMwMDE4QTU0MDAwMDY5NTRCMDAwQTIxCis6MTA4NzAwMDA4Rjg1RkYyODI0MDJGRjgwMDE2MzMwMjRBNTQ2MDAwQURDCis6MTA4NzEwMDA5MTVGMDAwQTAwMDA0ODIxMDNFMkM4MjVBMTU5MDAwQTIwCis6MTA4NzIwMDBBMEEwMDAwOEExNDAwMDRDQTA4MDAwQzU5NjE4MDAwMjNGCis6MTA4NzMwMDA5NzgzMDA3MDNDMDIwMDA0QTQ5ODAwREE5NjBGMDAwMkIwCis6MTA4NzQwMDAyNDE4RkZCRjI1RUUyNDAxQTQ4RTAwQUU4RTBEMDAwNDc4Cis6MTA4NzUwMDBBQ0FEMDA0NDhFMEMwMDA4QUNBQzAwNDBBNEEwMDA1MEFFCis6MTA4NzYwMDBBNEEwMDA1NDhFMEIwMDBDMjQwQzAwMzBBQzhCMDAyODBECis6MTA4NzcwMDA4RTA2MDAxMEFDODYwMDI0QTQ4MDAwM0VBNDg3MDA0RTI0Cis6MTA4NzgwMDBBNDg3MDA1MEE0ODMwMDNDQUQ0MjAwNzRBQzg4MDBDOEFDCis6MTA4NzkwMDBBQ0E4MDA2MEEwODcwMEVDOTA5RjAwQzQzM0Y5MDA3Rjc0Cis6MTA4N0EwMDBBMDk5MDBDNDkwOTAwMEM0MDIxODc4MjRBMDhGMDBDNDNGCis6MTA4N0IwMDA5MTRFMDA3QzM1Q0QwMDAxQTE0RDAwN0M5MzhCMDA3QzU3Cis6MTA4N0MwMDBBRDQ4MDA3MEFDOEMwMENDQTA4QjAwQzY4Rjg4MDA2OEQwCis6MTA4N0QwMDA4Rjg3MDA2NEFDODgwMEI0QUM4NzAwQjhBNTQwMDA3OEVGCis6MTA4N0UwMDBBNTQwMDA3QThGQkYwMDE0OEZCMDAwMTAwMTIwMTAyMTI3Cis6MTA4N0YwMDAwM0UwMDAwODI3QkQwMDE4OEY4NTAwNzQwRTAwMDY3NDgyCis6MTA4ODAwMDA4Rjg2MDA2MDBBMDAwRDQ4MjQwOTAwMDIyN0JERkZFMEEyCis6MTA4ODEwMDBBRkIwMDAxMDhGOTAwMDM4QUZCMTAwMTRBRkJGMDAxODk4Cis6MTA4ODIwMDA4RTA5MDAwNDBFMDAwNDk5MDAwOTIxQzA4RTA4MDAwNDdFCis6MTA4ODMwMDA4Rjg0RkYyMDhGODJGRjI4MDAwODM5QzAzQzA2ODAwMDBCCis6MTA4ODQwMDBBQ0M3MDAyMDk0ODUwMERBOTA0MzAwMTMxNDYwMDAxQzJDCis6MTA4ODUwMDAzMEIxRkZGRjhGOENGRjI0OTE4QjAwMDgzMTZBMDA0MEZDCis6MTA4ODYwMDAxNTQwMDAwQjAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTk2Cis6MTA4ODcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMkE1Cis6MTA4ODgwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDlFCis6MTA4ODkwMDAwRTAwMDA2MzAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTU1Cis6MTA4OEEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjc1Cis6MTA4OEIwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDZFCis6MTA4OEMwMDAwRTAwMDA1QjAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTJECis6MTA4OEQwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjQ1Cis6MTA4OEUwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDNFCis6MTA4OEYwMDAyN0JERkZFMEFGQjIwMDE4MzA5MkZGRkZBRkIwMDAxMDBECis6MTA4OTAwMDBBRkJGMDAxQ0FGQjEwMDE0MTI0MDAwMUUwMDAwODAyMTU4Cis6MTA4OTEwMDA4Rjg2MDAzODhDQzUwMDAwMjQwMzAwMDYwMDA1M0YwMjQ2Cis6MTA4OTIwMDAwMDA1MTQwMjMwRTQwMDA3MTQ4MzAwMTYzMDQ1MDBGRkYwCis6MTA4OTMwMDAyQ0E4MDAwNjExMDAwMDQwMDAwNTU4ODAzQzBDMDgwMERGCis6MTA4OTQwMDAyNThDNTMyQzAxNkM1MDIxOEQ0OTAwMDAwMTIwMDAwODFBCis6MTA4OTUwMDAwMDAwMDAwMDhGOEUwMDc4MjQwRDAwMDExMUNEMDA1MDIyCis6MTA4OTYwMDAyNDAyMDAwMkFGODIwMDc4MjYwOTAwMDEzMTMwRkZGRkE3Cis6MTA4OTcwMDAyNEM4MDAyMDAyMTIyMDJCMDEwMDMwMjExNDgwRkZFNUMyCis6MTA4OTgwMDBBRjg4MDAzODAyMDAxMDIxOEZCRjAwMUM4RkIyMDAxODgyCis6MTA4OTkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDQ1Cis6MTA4OUEwMDA5Mzg3MDA1RTU0RTAwMDM0MDAwMDMwMjEwRTAwMEM5MEVDCis6MTA4OUIwMDAwMDAwMDAwMDhGODYwMDM4MEEwMDBEQTgyNDAyMDAwMTg0Cis6MTA4OUMwMDA4Rjg3MDA3ODI0MDUwMDAyMTBFNTAwMzEyNDA0MDAxMzhECis6MTA4OUQwMDAwMDAwMjgyMTAwMDAzMDIxMjQwNzAwMDEwRTAwMEJFMkQ2Cis6MTA4OUUwMDAwMDAwMDAwMDBBMDAwREE5OEY4NjAwMzg4RjgzMDA3OEYwCis6MTA4OUYwMDAyNDAyMDAwMjE0NjJGRkY2MjQwNDAwMTIwRTAwMEM0NTRCCis6MTA4QTAwMDAwMDAwMDAwMDhGODUwMDc0MDA0MDMwMjEyNDA0MDAxMjEzCis6MTA4QTEwMDAwRTAwMEJFMjAwMDAzODIxMEEwMDBEQTk4Rjg2MDAzOEY1Cis6MTA4QTIwMDA4RjgzMDA3ODI0MTEwMDAzMTA3MTAwMjkyNDFGMDAwMjk1Cis6MTA4QTMwMDAxMDdGRkZDRTI2MDkwMDAxMjQwNDAwMTAwMDAwMjgyMTI5Cis6MTA4QTQwMDAwMDAwMzAyMTBBMDAwREM2MjQwNzAwMDE4RjkxMDA3ODM0Cis6MTA4QTUwMDAyNDA2MDAwMjE2MjZGRkY5MjQwNDAwMTAwRTAwMENFQTdBCis6MTA4QTYwMDAwMDAwMDAwMDE0NDAwMDIzOEY5ODAwMzg4Rjg2MDAzOEUzCis6MTA4QTcwMDAwQTAwMERBODI0MDIwMDAzMjQwNDAwMTQwRTAwMEJFMkQ3Cis6MTA4QTgwMDAwMDAwMjgyMThGODYwMDM4MEEwMDBEQTgyNDAyMDAwMjY5Cis6MTA4QTkwMDAwRTAwMEQ1MjAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODVDCis6MTA4QUEwMDAwRTAwMEJGMjAwMDAwMDAwMjQxOTAwMDIyNDA0MDAxNDQwCis6MTA4QUIwMDAwMDAwMjgyMTAwMDAzMDIxMDAwMDM4MjFBRjk5MDA3ODAzCis6MTA4QUMwMDAwRTAwMEJFMjAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODlFCis6MTA4QUQwMDAwRTAwMEMwMjAwMDAwMDAwOEY4NTAwNzQyNDE5MDAwMkIzCis6MTA4QUUwMDAwMDQwMzAyMTI0MDQwMDEwMDAwMDM4MjEwQTAwMERGRjRFCis6MTA4QUYwMDBBRjk5MDA3ODAwNDAzODIxMjQwNDAwMTA5NzBGMDAwMjNECis6MTA4QjAwMDAwMDAwMjgyMTBFMDAwQkUyMzFFNkZGRkY4Rjg2MDAzOEJGCis6MTA4QjEwMDAwQTAwMERBOUFGOTEwMDc4OEY4NEZGMjQzQzA3N0ZGRkU2Cis6MTA4QjIwMDAzNEU2RkZGRjhDODUwMDE4MjQwMjAwMDEwMEE2MTgyNEZCCis6MTA4QjMwMDBBQzgzMDAxODAzRTAwMDA4QTA4MjAwMDUzMDg0RkZGRjJBCis6MTA4QjQwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUNGCis6MTA4QjUwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjMxCis6MTA4QjYwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzQ1Cis6MTA4QjcwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDEyCis6MTA4QjgwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODUyCis6MTA4QjkwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDI2Cis6MTA4QkEwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjFDCis6MTA4QkIwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEFGCis6MTA4QkMwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDAyN0JERkZFODcyCis6MTA4QkQwMDBBRkIwMDAxMDAwODA4MDIxQUZCRjAwMTQwRTAwMEUzRjI4Cis6MTA4QkUwMDAwMEEwMjAyMTAwNTA0ODIxMjQwQUZGODA4RkJGMDAxNERDCis6MTA4QkYwMDA4RkIwMDAxMDAxMkEzMDI0MzEyNzAwN0YzQzA4ODAwQTAyCis6MTA4QzAwMDAzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjUzQzAzODAwMDFBCis6MTA4QzEwMDAyN0JEMDAxOEFDNjUwMDI0QUY4MjAwMjRBQzQwMDAwMEUyCis6MTA4QzIwMDBBQzY1MDAyNDAzRTAwMDA4QUM0MDAwNDAzQzBEMDgwMEE3Cis6MTA4QzMwMDA4REFEMDA1ODAwMDU2MTgwMjQwQUZGODAwMUE0NTgyMUYxCis6MTA4QzQwMDAwMTZDNDgyMTAxMkEzMDI0MzEyNzAwN0YzQzA4ODAwQzI4Cis6MTA4QzUwMDAzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjUzQzAzODAwMENBCis6MTA4QzYwMDBBQzY1MDAyOEFGODIwMDIwMDNFMDAwMDhBQzQwMDAyNDdGCis6MTA4QzcwMDAzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTE3Cis6MTA4QzgwMDAzQzA4NjAxNTAwQTgzODI1M0MwMzEwMDBBQ0M0MDE4MEU2Cis6MTA4QzkwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCOEQ0Cis6MTA4Q0EwMDAzQzBEMDgwMDhEQUQwMDU4MDAwNTYxODAyNDBBRkY4MDRFCis6MTA4Q0IwMDAwMUE0NTgyMTAxNkM0MDIxMDEwQTQ4MjQwMDA5MzE0MEQ3Cis6MTA4Q0MwMDAzMTA3MDA3RjAwQzcyODI1M0MwNDIwMDAwMEE0MTgyNTk4Cis6MTA4Q0QwMDAzQzAyODAwMEFDNDMwODMwMDNFMDAwMDhBRjgwMDAyMDc1Cis6MTA4Q0UwMDAyN0JERkZFOEFGQjAwMDEwMDA4MDgwMjFBRkJGMDAxNEE3Cis6MTA4Q0YwMDAwRTAwMEUzRjAwQTAyMDIxMDA1MDQ4MjEyNDBCRkY4MEQxCis6MTA4RDAwMDAwMTJCNTAyNDAwMEEzOTQwMzEyODAwN0YzQzA2MjAwMDA2Cis6MTA4RDEwMDA4RkJGMDAxNDhGQjAwMDEwMDBFODI4MjUzNEMyMDAwMTc2Cis6MTA4RDIwMDAwMEEyMTgyNTNDMDQ4MDAwMjdCRDAwMThBQzgzMDgzMDQxCis6MTA4RDMwMDAwM0UwMDAwOEFGODAwMDI0M0MwNTgwMDg4Q0E3MDA2MDk5Cis6MTA4RDQwMDAzQzA2ODAwODAwODcxMDJCMTQ0MDAwMTEyQzgzNDAwMDQzCis6MTA4RDUwMDA4Q0E4MDA2MDJEMDM0MDAwMTA2MDAwMEYyNDAzNDAwMDI5Cis6MTA4RDYwMDA4Q0M5MDA2MDAwODkyODJCMTRBMDAwMDIwMDgwMTgyMTAzCis6MTA4RDcwMDA4Q0MzMDA2MDAwMDM1QTQyMDAwQjMwODAzQzBBMDgwMDlDCis6MTA4RDgwMDAyNTRBNTNBMDAwQ0EyMDIxMDNFMDAwMDg4QzgyMDAwMDdECis6MTA4RDkwMDAxNDYwRkZGMzI0MDM0MDAwMDAwMzVBNDIwMDBCMzA4MEFDCis6MTA4REEwMDAzQzBBMDgwMDI1NEE1M0EwMDBDQTIwMjEwM0UwMDAwODFECis6MTA4REIwMDA4QzgyMDAwMDNDMDU4MDA4OTBBNjAwMDg5Mzg0MDA4OEZGCis6MTA4REMwMDAyNEMyMDAwMTMwNDIwMEZGMzA0MzAwN0YxMDY0MDAwQ0Q5Cis6MTA4REQwMDAwMDAyMzgyN0EwQTIwMDA4M0MwNDgwMDA4Qzg1MDE3ODlFCis6MTA4REUwMDAwNEEwRkZGRThGOEEwMDgwMjQwOTAwMDIzQzA4MTAwMEM2Cis6MTA4REYwMDBBQzhBMDE0MEEwODkwMTQ0MDNFMDAwMDhBQzg4MDE3OEY2Cis6MTA4RTAwMDAwQTAwMEVDNDMwRTIwMDgwMjdCREZGRDhBRkIyMDAxOEMwCis6MTA4RTEwMDA4RjkyMDA4NEFGQkYwMDIwQUZCMzAwMUNBRkIwMDAxMDMyCis6MTA4RTIwMDBBRkIxMDAxNDhGOTMwMDIwOEU1OTAwMjgzQzEwMDA4MEIxCis6MTA4RTMwMDAzQzBFRkZFRkFFNzkwMDAwOEU1ODAwMjRBMjYwMDAwQUJECis6MTA4RTQwMDAzNUNERkZGRkFFNzgwMDA0OTI1MTAwMkMzQzBCRkY5RjA0Cis6MTA4RTUwMDAzNTZBRkZGRkEyNzEwMDBDOEU2RjAwMEMzQzA4MDA0MEM5Cis6MTA4RTYwMDBBMjcxMDAwQjAxRjA2MDI1MDE4RDQ4MjQwMTJBMzgyNEVECis6MTA4RTcwMDAwMEU4MzAyNUFFNjYwMDBDOEU0NTAwMDRBRTYwMDAxODk4Cis6MTA4RTgwMDAzQzA0MDBGRkFFNjUwMDE0OEU0MzAwMkMzNDgyRkZGRkNCCis6MTA4RTkwMDBBNjYwMDAwODAwNjJGODI0QUU3RjAwMTA4RTU5MDAwODFBCis6MTA4RUEwMDA4RjkwMDA4MDk2NEUwMDEyQUU3OTAwMjA4RTUxMDAwQ0ZCCis6MTA4RUIwMDAzMUQ4M0ZGRjAwMTg3OTgwQUU3MTAwMjQ4RTREMDAxNDI4Cis6MTA4RUMwMDAwMUYwNjAyMTMxQ0IwMDAxQUU2RDAwMjg4RTRBMDAxODAwCis6MTA4RUQwMDAwMDBDNDFDMjAwMEI0QjgwQUU2QTAwMkM4RTQ2MDAxQzc5Cis6MTA4RUUwMDAwMTA5MzgyMUE2NjcwMDFDQUU2NjAwMzA5NjQ1MDAwMkQ1Cis6MTA4RUYwMDA4RTQ0MDAyMEE2NjUwMDFFQUU2NDAwMzQ5MjQzMDAzMzA5Cis6MTA4RjAwMDAzMDYyMDAwNDU0NDAwMDA2OTI0NzAwMDAzQzAyODAwODkyCis6MTA4RjEwMDAzNDQzMDEwMDhDN0YwMEMwQUU3RjAwMzA5MjQ3MDAwMEQ4Cis6MTA4RjIwMDA4Rjg2MDAyNEEwQzcwMDMwOTI0NTAwMzMzMEE0MDAwMjkxCis6MTA4RjMwMDA1MDgwMDAwNzkyNTEwMDAxOEY4ODAwMjQyNDBCRkY4MDhECis6MTA4RjQwMDA5MTBBMDAzMDAxNEI0ODI1QTEwOTAwMzA5MjUxMDAwMURGCis6MTA4RjUwMDA4RjkwMDAyNDI0MENGRkJGMjQwNEZGREZBMjExMDAzMUY2Cis6MTA4RjYwMDA4RjhEMDAyNDNDMTg4MDA4MzcxMTAwODA5MUFGMDAzQ0ExCis6MTA4RjcwMDAzMUVFMDA3RkExQUUwMDNDOEY4OTAwMjQ5MTJCMDAzQzk0Cis6MTA4RjgwMDAwMTZDNTAyNEExMkEwMDNDOEY5RjAwMjQ4RTY4MDAxNDlECis6MTA4RjkwMDA5M0U2MDAzQzJEMDcwMDAxMDAwNzExNDAwMEM0MjgyNDdGCis6MTA4RkEwMDAwMEEyMTgyNUEzRTMwMDNDOEY4NzAwMjQ5NjU5MDAxMkU1Cis6MTA4RkIwMDBBNEY5MDAzMjhFNDUwMDA0OTIyRTAwN0MzMEIwMDAwM0VDCis6MTA4RkMwMDAwMDEwNzgyMzMxRUQwMDAzMDBBRDEwMjEzMUNDMDAwMkY4Cis6MTA4RkQwMDAxNTgwMDAwMjI0NDYwMDM0MjQ0NjAwMzAzQzAyODAwOEZDCis6MTA4RkUwMDAzNDQzMDA4MDkwN0YwMDdDMDBCRkM4MjQzMzM4MDAwNEU1Cis6MTA4RkYwMDAxNzAwMDAwMjI0QzIwMDA0MDBDMDEwMjE4Rjk4MDAyNDMyCis6MTA5MDAwMDAyNDE5MDAwMkFDRTIwMDM0QTMxOTAwMDA5MjRGMDAzRjgzCis6MTA5MDEwMDA4RjhFMDAyNDNDMEM4MDA4MzU4QjAwODBBMUNGMDAwMThFCis6MTA5MDIwMDA4RjkxMDAyNDkyNEQwMDNGOEU0NDAwMDRBNjJEMDAwMjMzCis6MTA5MDMwMDA5NTZBMDA1QzBFMDAwRTlEMzE1MEZGRkYwMDAyNEI4MEQwCis6MTA5MDQwMDAwMTMwMzgyNTNDMDg0MjAwMDBFODI4MjVBRTI1MDAwNDAwCis6MTA5MDUwMDA4RTQ0MDAzODhGODUwMDI0QUNBNDAwMTg4RTQ2MDAzNDVFCis6MTA5MDYwMDBBQ0E2MDAxQ0FDQTAwMDBDQUNBMDAwMTBBNEEwMDAxNDg2Cis6MTA5MDcwMDBBNEEwMDAxNkE0QTAwMDIwQTRBMDAwMjJBQ0EwMDAyNDVDCis6MTA5MDgwMDA4RTYyMDAxNDUwNDAwMDAxMjQwMjAwMDE4RkJGMDAyMEI2Cis6MTA5MDkwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDc2Cis6MTA5MEEwMDBBQ0EyMDAwODBBMDAwRUJDMjdCRDAwMjgyN0JERkZDOERGCis6MTA5MEIwMDAzQzA1ODAwODM0QTQwMDgwQUZCRjAwMzRBRkJFMDAzMDUwCis6MTA5MEMwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDc2Cis6MTA5MEQwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEI2Cis6MTA5MEUwMDA5NDgzMDA3ODk0ODIwMDdBMTA0MzAwNTEyNDA1RkZGRjk2Cis6MTA5MEYwMDAwMDgwRjAyMTBBMDAwRkNDMDA4MEI4MjExMDhCMDA0REI5Cis6MTA5MTAwMDA4RkJGMDAzNDhGODYwMDgwM0MxODA4MDA4RjE4MDA1Q0U5Cis6MTA5MTEwMDAyNDExRkY4MDNDMTY4MDAwMDMwNjc4MjEwMUYxODAyNDkxCis6MTA5MTIwMDBBRUQwMDAyQzk2RUUwMDdBMzFFQzAwN0YzQzBEODAwRTI0Cis6MTA5MTMwMDAzMUNCN0ZGRjAxOEQ1MDIxMDAwQjQ4NDAwMTJBQTgyMTJGCis6MTA5MTQwMDA5NkE0MDAwMDNDMDgwODAwOEQwODAwNTgyNDA1RkY4MDA0Cis6MTA5MTUwMDAzMDk1M0ZGRjAxMDYxODIxMDAxNTM5ODAwMDY3QzgyMUFFCis6MTA5MTYwMDAwMzI1RjgyNDNDMDIwMTAwMDNFMjkwMjUzMzM4MDA3RkY4Cis6MTA5MTcwMDAzQzExODAwQ0FFRDIwMDI4MDMxMTkwMjE5MjUwMDAwREJBCis6MTA5MTgwMDAzMjBGMDAwNDExRTAwMDM3MDJFMDk4MjE5NkUzMDA3QUU0Cis6MTA5MTkwMDA5NkU4MDA3QTk2RTUwMDdBMjQwNDgwMDAzMTA3N0ZGRjg0Cis6MTA5MUEwMDAyNEUzMDAwMTMwNjI3RkZGMDBBNEY4MjQwM0UyQzgyNTE1Cis6MTA5MUIwMDBBNkY5MDA3QTk2RTYwMDdBM0MxNDA4MDA4RTk0MDA2MEM2Cis6MTA5MUMwMDAzMEQ2N0ZGRjEyRDQwMEMxMDAwMDAwMDA4RTU4MDAxODc2Cis6MTA5MUQwMDA4Rjg0MDA4MDAyQTAyODIxMjcxM0ZGRkYwRTAwMEU3NzQ2Cis6MTA5MUUwMDBBRTUzMDAyQzk3RDUwMDc4OTdENDAwN0ExMjk1MDAxMEQyCis6MTA5MUYwMDAwMDAwMjgyMTNDMDk4MDA4MzUyNDAxMDAzQzBBODAwODMxCis6MTA5MjAwMDA5MTQ4MDAwODkwODcwMEM1MzExNDAwN0YzMEU0MDBGRkNBCis6MTA5MjEwMDAwMjg0MzAyQjE0QzBGRkI5MjY4QjAwMDE5MzhFMDA4ODg2Cis6MTA5MjIwMDAyNjhDMDAwMTAwOEU2ODIxMTVBQ0ZGQjc4Rjg2MDA4MDY4Cis6MTA5MjMwMDA4RkJGMDAzNDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODUwCis6MTA5MjQwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODlDCis6MTA5MjUwMDA4RkIxMDAxNDhGQjAwMDEwMDBBMDEwMjEwM0UwMDAwOEFGCis6MTA5MjYwMDAyN0JEMDAzODAwQzAyMDIxMEUwMDBFNDIwMjgwMjgyMUI4Cis6MTA5MjcwMDA4RTRCMDAxMDhFNEMwMDMwOEY4NDAwMjQyNDA5MDAwMjk1Cis6MTA5MjgwMDAwMTZDNTAyM0FFNEEwMDEwQTA4OTAwMDA5NkUzMDA1Q0Y4Cis6MTA5MjkwMDA4RTQ0MDAzMDhGOTEwMDI0MEUwMDBFOUQzMDcwRkZGRjMxCis6MTA5MkEwMDAwMDAyNDM4MDAxMTAyODI1M0MwNzQyMDAwMEE3MTAyNTNBCis6MTA5MkIwMDBBRTIyMDAwNDhFNUYwMDA0OEY4QTAwMjQ4RTU5MDAwMEM1Cis6MTA5MkMwMDAyNDBCMDAwOEFENUYwMDFDQUQ1OTAwMThBRDQwMDAwQzI4Cis6MTA5MkQwMDBBRDQwMDAxMDkyNDYwMDBBMjQwNDAwMDUyNDA4QzAwMDk2Cis6MTA5MkUwMDAzMEQwMDBGRkE1NTAwMDE0OTY1ODAwMDhBNTU4MDAxNjZECis6MTA5MkYwMDA5MjUxMDAwQTNDMTg4MDA4MzIyRjAwRkZBNTRGMDAyMDMxCis6MTA5MzAwMDA5NjRFMDAwODM3MTEwMTAwQTU0RTAwMjJBRDQwMDAyNDAyCis6MTA5MzEwMDA5MjREMDAwQjMxQUMwMEZGQTU0QzAwMDJBMTRCMDAwMUE3Cis6MTA5MzIwMDA4RTQ5MDAzMDhGODMwMDI0MjQwQkZGQkZBQzY5MDAwOEY2Cis6MTA5MzMwMDBBMDY0MDAzMDhGOTAwMDI0MjQwM0ZGREY5NjA3MDAzMkUyCis6MTA5MzQwMDAwMEU4MjgyNDAwQjUxMDI1QTYwMjAwMzI5MjFGMDAzMjQyCis6MTA5MzUwMDAzM0Y5MDAzRjM3MjYwMDQwQTIwNjAwMzI4RjhDMDAyNEVDCis6MTA5MzYwMDBBRDgwMDAzNDhFMkYwMEMwQUQ4RjAwMzg5MThFMDAzQzUwCis6MTA5MzcwMDAzQzBGN0ZGRjMxQ0QwMDdGQTE4RDAwM0M4Rjg0MDAyNDA2Cis6MTA5MzgwMDAzNUVFRkZGRjkwOEEwMDNDMDE0QjQ4MjRBMDg5MDAzQzQ5Cis6MTA5MzkwMDA4Rjg1MDAyNDkwQTgwMDNDMDEwMzM4MjRBMEE3MDAzQzNFCis6MTA5M0EwMDA4RTQyMDAzNDhGOTEwMDI0M0MwMzgwMDhBRTIyMDA0MDlFCis6MTA5M0IwMDA4RTU5MDAyQzhFNUYwMDMwMDMzRjMwMjNBRTI2MDA0NEQwCis6MTA5M0MwMDA5MjMwMDA0ODMyMTgwMDdGQTIzODAwNDg4Rjg4MDAyNDZECis6MTA5M0QwMDA4RTREMDAzMDhEMEMwMDQ4MDFBRTU4MjQwMTk2NTAyNDZCCis6MTA5M0UwMDAwMTRCNDgyNUFEMDkwMDQ4OTI0NDAwMEFBMTA0MDA0Q0Y1Cis6MTA5M0YwMDA5NjQ3MDAwODhGODUwMDI0QTRBNzAwNEU4RTUwMDAzMEE5Cis6MTA5NDAwMDA4RTQ0MDAzMDBFMDAwMkU2OEM2NTAwNjA5MkY5MDA3QzBDCis6MTA5NDEwMDAwMDAyRjk0MDAwNDAyODIxMDAwMjExMDAwM0UyMzAyMTNGCis6MTA5NDIwMDAzMzM2MDAwMjEyQzAwMDAzMDIwNjgwMjEwMDA1QjA4MDFFCis6MTA5NDMwMDAwMjE2ODAyMTkyNkQwMDdDMzFCMzAwMDQxMjYwMDAwMjlDCis6MTA5NDQwMDAwMDA1NzA4MDAyMEU4MDIxOEU0QjAwMzAyNDA1ODAwMEM0Cis6MTA5NDUwMDAzMTZBMDAwMzAwMEE0ODIzMzEyNDAwMDMwMjA0MTgyMTYyCis6MTA5NDYwMDA4RjkwMDAyNEFFMDMwMDM0OTZFNDAwN0E5NkU4MDA3QUU4Cis6MTA5NDcwMDA5NkYxMDA3QTMxMDc3RkZGMjRFMjAwMDEzMDVGN0ZGRjIxCis6MTA5NDgwMDAwMjI1QzgyNDAzM0YzMDI1QTZFNjAwN0E5NkY4MDA3QTI0Cis6MTA5NDkwMDAzQzEyMDgwMDhFNTIwMDYwMzMwRjdGRkYxMUYyMDAxODVCCis6MTA5NEEwMDAwMDAwMDAwMDhGODQwMDgwMEUwMDBFNzcwMkEwMjgyMUFCCis6MTA5NEIwMDA4Rjg0MDA4MDBFMDAwRTg3MDI4MDI4MjEwRTAwMEVCQ0QzCis6MTA5NEMwMDAwMDAwMDAwMDBBMDAwRkM4MDAwMDAwMDA5NkYxMDA3QUJBCis6MTA5NEQwMDAwMjI0ODAyNEE2RjAwMDdBOTJFRjAwN0E5MkVCMDA3QUMwCis6MTA5NEUwMDAzMUVFMDBGRjAwMEU2OUMyMDAwRDYwMjcwMDBDNTFDMDc0Cis6MTA5NEYwMDAzMTY5MDA3RjAxMkEyMDI1MEEwMDBGQzJBMkU0MDA3QTA4Cis6MTA5NTAwMDA5NkU2MDA3QTAwQzVDMDI0QTZGODAwN0E5MkVGMDA3QUE5Cis6MTA5NTEwMDA5MkYzMDA3QTMxRjIwMEZGMDAxMjcxQzIwMDBFNjgyNzQ4Cis6MTA5NTIwMDAwMDBEQjFDMDMyNkMwMDdGMDE5NjI4MjVBMkU1MDA3QUJCCis6MTA5NTMwMDAwQTAwMTA3OThGODQwMDgwM0MwMzgwMDAzMDg0RkZGRjk0Cis6MTA5NTQwMDAzMEE1RkZGRkFDNjQwMDE4QUM2NTAwMUMwM0UwMDAwODA4Cis6MTA5NTUwMDA4QzYyMDAxNDI3QkRGRkE4M0MwNjgwMDhBRkJFMDA1MEY3Cis6MTA5NTYwMDBBRkJGMDA1NEFGQjcwMDRDQUZCNjAwNDhBRkI1MDA0NDMyCis6MTA5NTcwMDBBRkI0MDA0MEFGQjMwMDNDQUZCMjAwMzhBRkIxMDAzNDdECis6MTA5NTgwMDBBRkIwMDAzMDM0QzgwMTAwOTEwNTAwQzU5MEM3MDAwODk1Cis6MTA5NTkwMDAzMDlFRkZGRjMwQTUwMEZGMzBFMjAwN0YwMDQ1MTgyQTEzCis6MTA5NUEwMDBBN0EwMDAxNEE3QTAwMDFFMTA2MDAwNTNBRkEwMDAxMEQ5Cis6MTA5NUIwMDA5MEM5MDAwODMxMjYwMDdGMDBBNjIwMjMyNDkzRkZGRkQ2Cis6MTA5NUMwMDAwMDEzODAyQjAwMUU4ODJCMDIxMTc4MjQ1MUUwMDA4NEE4Cis6MTA5NUQwMDA4RkIzMDAxMDNDMTk4MDA4OTczNjAwNTI5NzM3MDA1MDFGCis6MTA5NUUwMDAwMDFFQzQwMDAyRDdBODIzMDAxNUE0MDAwMDE0MTQwMzExCis6MTA5NUYwMDAwM0MyOTAyQTE2NDAwMDAyMDAxODJDMDMwMDQwMjgyMUM0Cis6MTA5NjAwMDAwMDEzMTQwMDAwMDIyNDAzMDBBNEY4MkE1N0UwMDAwMTBDCis6MTA5NjEwMDAwMEEwMjAyMTI4ODMwMDA5MTQ2MDAwMDIwMDgwQTAyMUZFCis6MTA5NjIwMDAyNDE0MDAwODNDMEE4MDA4OEQ0NTAwNDgwMDE0NDk4MDM1Cis6MTA5NjMwMDA4RDQ4MDA0QzNDMDM4MDAwMzEyNEZGRkYzQzA2MDAxMEE1Cis6MTA5NjQwMDAwMDg2MzgyNTM0NzEwNDAwQUM2NTAwMzhBRjkxMDA4NDgxCis6MTA5NjUwMDBBQzY4MDAzQ0FDNjcwMDMwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA5NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTA5NjcwMDAwMDAwMDAwMDAwMDAwMDAwOEM2QzAwMDAzMThCMDAyMDE2Cis6MTA5NjgwMDAxMTYwRkZGRDAwMTQ2ODJBMDFCMDEwMjQxMDQwMDAzOTU5Cis6MTA5NjkwMDAwMDAwQTgyMTNDMTY4MDA4OTJENzAwMDgzQzEyODAwMEU4Cis6MTA5NkEwMDA4RTQ0MDEwMDMyRjYwMDdGMEUwMDBFNDIwMkMwMjgyMUQ3Cis6MTA5NkIwMDA4RTJGMDAxMDhFNDQwMTAwMDAwMDkwMjEzMUY3M0ZGRkYzCis6MTA5NkMwMDAwRTAwMEU1QTAyRTAyODIxOTIyRTAwMDAzMUMyMDAzRjA3Cis6MTA5NkQwMDAyQzUwMDAwODUyMDAwMDEwMDAwMDg4MjEwMDAyRjg4MDgxCis6MTA5NkUwMDAzQzAzMDgwMDI0NjM1MzU0MDNFM0M4MjE4RjM4MDAwMDZGCis6MTA5NkYwMDAwMzAwMDAwODAwMDAwMDAwOTBDRTAwMDg5MzhCMDA4ODUzCis6MTA5NzAwMDAzMUNEMDA3RjAwQUQ2MDIzMDE2QzUwMjEwQTAwMTBCRkY1Cis6MTA5NzEwMDAyNTUzRkZGRjAwMDA4ODIxM0MxMDgwMDA4RTA0MDEwMENCCis6MTA5NzIwMDAwRTAwMEU3NzAyRTAyODIxOEUwNDAxMDAwRTAwMEU4NzQ1Cis6MTA5NzMwMDAwMkMwMjgyMTEyMjAwMDBGMDAxMzgwMkI4RjhBMDA4NDgyCis6MTA5NzQwMDAyNkE5MDAwMTAwMDlBQzAwMDI3Mjk4MjMwMDE1QUMwM0ExCis6MTA5NzUwMDAyNTQ1MDA0MDAyQjRCMDJBMDAxMzgwMkIyNDE3MDAwMUQ1Cis6MTA5NzYwMDAwMEEwODgyMTAyRDAxMDI0QUY4NTAwODQxNDQwRkZDOUQ2Cis6MTA5NzcwMDBBRkI3MDAxMDNDMDc4MDA4OTRGMTAwNTAzQzA1ODAwMDEyCis6MTA5NzgwMDAzQzA2MDAyMDAyQjFDODIxQTRGOTAwNTBBQ0E2MDAzMDZDCis6MTA5NzkwMDA5NEY0MDA1MDk0RTMwMDUyMDNENTYwMjMxMDc0MDAxRDJDCis6MTA5N0EwMDAzMTlFRkZGRjhDRTUwMDRDOENFOTAwNDgwMDE1NjE4MDdDCis6MTA5N0IwMDAwMEFDQjAyMTAwMDBBMDIxMDJDQ0E4MkIwMTM0NTAyMTI0Cis6MTA5N0MwMDAwMTU1QjgyMUFDRjYwMDRDQUNGNzAwNDgwMDFFODgyQkMwCis6MTA5N0QwMDAwMjExNzgyNDE1RTBGRjgwM0MxOTgwMDg4RkIzMDAxMDM3Cis6MTA5N0UwMDA4RkJGMDA1NDhGQkUwMDUwM0E2MjAwMDE4RkI3MDA0QzBCCis6MTA5N0YwMDA4RkI2MDA0ODhGQjUwMDQ0OEZCNDAwNDA4RkIzMDAzQzUzCis6MTA5ODAwMDA4RkIyMDAzODhGQjEwMDM0OEZCMDAwMzAwM0UwMDAwODExCis6MTA5ODEwMDAyN0JEMDA1ODk0RjIwMDU0OENFRjAwNDQzMjVGRkZGRUU1Cis6MTA5ODIwMDAwMDFGQzBDMDAxRjg3MDIxQUNBRTAwM0M4Q0VCMDA0NEJFCis6MTA5ODMwMDA4Q0FEMDAzQzAxNkQ0MDIzMTkwMDAwM0IwMDAwMDAwMDhFCis6MTA5ODQwMDA4Q0UyMDA0MDI0NDIwMDAxM0MwNzAwNTAzNEU0MDAxMDQ4Cis6MTA5ODUwMDAzQzAzODAwMEFDQTIwMDM4QUM2NDAwMzAwMDAwMDAwMDgzCis6MTA5ODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTA5ODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Qzc2MDAwMEU2Cis6MTA5ODgwMDAzMkQ3MDAyMDEyRTBGRkZEM0MxMTgwMDg5NjI4MDA1NERBCis6MTA5ODkwMDAzQzBBODAwMDNDMDY4MDA4MzExOTAwMDEwMDE5NjBDMEI0Cis6MTA5OEEwMDAwMThBQTAyMThFODMwNDAwM0MwNzA4MDA4Q0U3MDA0NDU1Cis6MTA5OEIwMDAzQzE1MDAyMEFDQzMwMDQ4OEU4OTA0MDQyNDA1MDAwMTM3Cis6MTA5OEMwMDBBQ0M5MDA0QzEwRTUwMjU5QUQ1NTAwMzA5NjNGMDA1MjJFCis6MTA5OEQwMDAzQzA1MDgwMDhDQTUwMDQwMDBCRkMwMjFBNjM4MDA1MkZFCis6MTA5OEUwMDA5NjJGMDA1NDI1RUUwMDAxQTYyRTAwNTQ5NjI2MDA1NDEzCis6MTA5OEYwMDAzMEM0RkZGRjU0ODdGRjM0MDAxRTg4MkIzMEE1RkZGRkM0Cis6MTA5OTAwMDAwRTAwMTA5REE2MjAwMDU0M0MwNDA4MDA4Qzg0MDAyNDA2Cis6MTA5OTEwMDA5NjI3MDA1MjAwNDQxMDIzMDBFMjkwMjNBNjMyMDA1MjAyCis6MTA5OTIwMDAwQTAwMTBDMTAwMUU4ODJCOENFMjAwNDAwQTAwMTE2MjYwCis6MTA5OTMwMDAzQzA3MDA1MDkyMjgwMDAxMjQwNzAwMDEzMTAyMDA3RkZCCis6MTA5OTQwMDAxNDQ3MDAxQzk3QUMwMDFFOEUyQTAwMTQyNDBCQzAwMDg0Cis6MTA5OTUwMDAzMTQ0M0ZGRjAxOEI0ODI0M0MwNjA4MDA4Q0M2MDA2MDYwCis6MTA5OTYwMDAwMTI0MjgyNTMwQTQzRkZGMDA4Njg4MkIxMjIwMDAxMUY3Cis6MTA5OTcwMDBBN0E1MDAxRTNDMTEwODAwOEUzMTAwNTg4RjgyMDA4MDgwCis6MTA5OTgwMDAwMDA0NDE4MDI0MDdGRjgwMDIyMjE4MjEwMDY4RjgyMThBCis6MTA5OTkwMDAwM0U3QzgyNDMzRUYwMDdGM0MxODgwMDAzQzEyODAwRUEwCis6MTA5OUEwMDBBRjE5MDAyQzAxRjI2ODIxOTFBRTAwMEQzNUQwMDAwNEYyCis6MTA5OUIwMDBBMUIwMDAwRDBFMDAwRUQxMjQxMjAwMDEyNDExMDAwMUVGCis6MTA5OUMwMDAzQzEwODAwMDhFMDQwMTAwMEUwMDBFNzcwMkUwMjgyMTdBCis6MTA5OUQwMDA4RTA0MDEwMDBFMDAwRTg3MDJDMDI4MjExNjIwRkY1OEI5Cis6MTA5OUUwMDA4RjhBMDA4NDBBMDAxMTJDMDAxMzgwMkI4Rjg2MDA4NDNDCis6MTA5OUYwMDA5MEM5MDAwMTMxMjUwMDIwMTBBMDAxOEEyNDEwMDAwMTI3Cis6MTA5QTAwMDAzQzA0ODAwODM0OEMwMDgwOTE4QjAwN0M4RjkxMDAyMDc2Cis6MTA5QTEwMDAwMDAwOTAyMTMxNkEwMDAxMTE0MDAwMEZBRkIwMDAyMDFBCis6MTA5QTIwMDA4Q0QwMDAxNDhDOEUwMDYwMDIwRTY4MkIxNUEwMDAwM0YxCis6MTA5QTMwMDAwMjAwMzgyMThDODcwMDYwM0MwNDgwMDgzNDgzMDA4MDU5Cis6MTA5QTQwMDA4QzcyMDA3MDAwRjI3ODJCMTVFMDAwMDIwMEUwMjAyMUZCCis6MTA5QTUwMDA4QzY0MDA3MDAwODA5MDIxM0MwNzgwMDgzNEU1MDA4MDExCis6MTA5QTYwMDA4Q0Q5MDAxNDhDQkYwMDcwMDMzRkMwMkIxNzAwMDAwMjdDCis6MTA5QTcwMDAwMzIwMjAyMThDQTQwMDcwMDA5MjE4MjMxMDYwMDAwM0EyCis6MTA5QTgwMDBBRkEzMDAyODI0MDgwMDAyQUZBODAwMjA4RkE1MDAyMDYzCis6MTA5QTkwMDAwMjY1MTAyQjE0NDAwMEI1MDAwMDE4MjE4Q0M0MDAzODVBCis6MTA5QUEwMDA4RTJGMDAwQzNDMTgwMDgwQUUyNDAwMDA4Q0NFMDAzNEI5Cis6MTA5QUIwMDAzQzEwRkY5RjAxRjg2MDI1QUUyRTAwMDQ5MENCMDAzRkM0Cis6MTA5QUMwMDAzNjBERkZGRjAxOEQ0ODI0M0MwQTAwMjAzQzA2RkZFRkM1Cis6MTA5QUQwMDBBMjJCMDAwQjAxMkEzODI1MzRDNUZGRkYwMEU1NDAyNEU2Cis6MTA5QUUwMDAzQzAyMDAwODhGODcwMDg0MDEwMjIwMjVBRTI0MDAwQzcwCis6MTA5QUYwMDA4Q0UzMDAxNEFFMjAwMDE4OEZBRjAwMjhBRTIzMDAxNEIyCis6MTA5QjAwMDA4Q0Y4MDAxODNDMUZGRkZCMzdGOUZGRkZBRTM4MDAxQzM0Cis6MTA5QjEwMDA4Q0VFMDAwODAwOTk2ODI0MDI0RjgwMjFBRTJFMDAyNEFDCis6MTA5QjIwMDA4Q0VDMDAwQ0FFMkQwMDBDQTYyMDAwMzhBNjIwMDAzQUNDCis6MTA5QjMwMDBBRTMwMDAyQ0FFMkMwMDIwQUUyMDAwMjg4Q0VCMDAxNEEwCis6MTA5QjQwMDA4RkFBMDAyODAxNzI0ODIzMDEyQTMwMjMxMEMwMDAxMTc3Cis6MTA5QjUwMDBBRTI2MDAxMDkwRjAwMDNEOEUyQzAwMDQ4RTJBMDAwMEVFCis6MTA5QjYwMDAwMDEwNjkwMDAxOEQyODIxMDAwMDEwMjEwMEFEMzAyQjZDCis6MTA5QjcwMDAwMTQyNDgyMTAxMjY0MDIxQUUyNTAwMDRBRTI4MDAwMDA0Cis6MTA5QjgwMDA5MEUzMDAzREEyMjMwMDBBOEY5RjAwODQ5N0Y5MDAwNjBFCis6MTA5QjkwMDBBNjM5MDAwODhGOEEwMDI0MjQwMjAwMDIzQzA2ODAwOEFGCis6MTA5QkEwMDBBMTQyMDAwMDM0QzkwMDgwOTUyNTAwNUMwMjQwMjAyMUJDCis6MTA5QkIwMDA4RjkwMDAyNDMwQThGRkZGMEUwMDBFOURBRkE4MDAyNDU4Cis6MTA5QkMwMDA4RkEzMDAyNDAwMDJGQjgwOEY4NTAwODQzQzA0NDIwMEE4Cis6MTA5QkQwMDAwM0UzQzgyNTAzMjRDMDI1QUUxODAwMDQ4Rjg0MDAyNEE1Cis6MTA5QkUwMDA4Q0FGMDAzOEFDOEYwMDE4OENBRTAwMzRBQzhFMDAxQ0VCCis6MTA5QkYwMDBBQzgwMDAwQ0FDODAwMDEwQTQ4MDAwMTRBNDgwMDAxNjdGCis6MTA5QzAwMDBBNDgwMDAyMEE0ODAwMDIyQUM4MDAwMjQ5MEE3MDAzRjA0Cis6MTA5QzEwMDBBNDg3MDAwMjUyNDAwMThDMjQwNzAwMDE4RkFCMDAyODZBCis6MTA5QzIwMDA1MTYwMDAwMjkwQTIwMDNEOTBBMjAwM0UyNDRDMDAwMTMxCis6MTA5QzMwMDBBMDhDMDAwMThGODQwMDI0QUM5MjAwMDgzQzE4ODAwODlFCis6MTA5QzQwMDAzNzEwMDA4MDkyMEYwMDdDMzFFRTAwMDIxNUMwMDAwMjM4Cis6MTA5QzUwMDAyNDA3MDAzNDI0MDcwMDMwOEY4NTAwODQzQzA4ODAwOEU2Cis6MTA5QzYwMDAzNTA5MDA4MDkwQTMwMDAwOTEyODAwN0MzMjU5MDAwMzQwCis6MTA5QzcwMDBBMDgzMDAzMDhGOUYwMDg0OEY5MDAwMjQyNDA0MDAwNDcwCis6MTA5QzgwMDA5M0Y4MDAwMTAwOTk3ODIzMjQwREMwMDBBMjE4MDAzMTM4Cis6MTA5QzkwMDA4Rjk5MDAyNDhGOEUwMDg0MzFFNTAwMDM5NzJDMDAzMkM5Cis6MTA5Q0EwMDA5NUNCMDAxMjAwRjI0ODIxMDE4RDUwMjQzMTYyM0ZGRjE0Cis6MTA5Q0IwMDAwMTQyMzAyNUE3MjYwMDMyOTMyMzAwMzIwMTI1MzgyMUE2Cis6MTA5Q0MwMDAzMTA4MDAwNDMwN0YwMDNGMzdFNDAwNDBBMzI0MDAzMjE1Cis6MTA5Q0QwMDAxMjQwMDAwMjhGODUwMDI0MDBFODM4MjEzQzBDODAwOEU3Cis6MTA5Q0UwMDBBQ0E3MDAzNDM1OEIwMTAwOEQ2MjAwQzAyRTQ0MDAwMTBBCis6MTA5Q0YwMDAyNDAzRkZERkFDQTIwMDM4OTBBQTAwM0MwMDA0Qzk0MDU2Cis6MTA5RDAwMDAzMTQ2MDA3RkEwQTYwMDNDOEY4OTAwMjQyNDA1RkZCRkI4Cis6MTA5RDEwMDA5MTI3MDAzQzAwRTU0MDI0QTEyODAwM0M4RjhGMDAyNEJGCis6MTA5RDIwMDA5MUZGMDAzQzAzRTNDMDI0MDMxOTgwMjVBMUYwMDAzQzBGCis6MTA5RDMwMDA4RjhCMDA4NDhGOEEwMDI0OEQ2RTAwMjBBRDRFMDA0MEYyCis6MTA5RDQwMDA4RDZEMDAyNEFENEQwMDQ0OEQ2QzAwMjhBRDRDMDA0ODU1Cis6MTA5RDUwMDA4RDYyMDAyQzBFMDAwRUJDQUQ0MjAwNEM4RkE2MDAyMDgwCis6MTA5RDYwMDAyNDA3MDAwMjEwQzcwMDExOEZBMzAwMjAwMDAzMjAyQjNFCis6MTA5RDcwMDAwMDA0ODAyMzAyNzA5ODI0MDA2MDgwMjEwMDYwOTAyMUZDCis6MTA5RDgwMDAwQTAwMTExNTAwMTA4ODJCOTYyNzAwMTI4Rjg0MDA4MDdFCis6MTA5RDkwMDAwMDAwOTAyMTMwRTVGRkZGQTdBNzAwMTQwRTAwMEU2QjE2Cis6MTA5REEwMDAyNDExMDAwMTBBMDAxMUMwM0MxMDgwMDAzQzE5ODAwMDAxCis6MTA5REIwMDAzQzAyODAwODhGMjQwMTAwOTA1ODAwMDgwRTAwMEU0MkRCCis6MTA5REMwMDAzMzA1MDA3RjhGOEUwMDI0OEZBRjAwMjA4RkE0MDAyOEUyCis6MTA5REQwMDBBMUNGMDAwMDBFMDAwRTlEOEY5MDAwMjQ4RkFEMDAyNEI3Cis6MTA5REUwMDAwMDAyM0I4MDNDMEI0MjAwMDBFRDQwMjU4Rjg3MDA4NDQxCis6MTA5REYwMDAwMTBCMjAyNUFFMDQwMDA0OENFNTAwMzg4RjkwMDAyNDcwCis6MTA5RTAwMDAwMDAwNTAyMTAwMEExOTAwQUUwNTAwMTg4Q0VDMDAzNDQ3Cis6MTA5RTEwMDAzQzA4N0ZGRjM1MDRGRkZGQUUwQzAwMUM5MEU5MDAzRUJDCis6MTA5RTIwMDA4RTFGMDAxQzhFMTgwMDE4MDAwOUM5MDAwMDA5MzcwMjk3Cis6MTA5RTMwMDAwM0Y5NjgyMTAwNjYxMDI1MDFCOTc4MkIwMzAyNzAyMTBGCis6MTA5RTQwMDAwMUNGNTgyMUFFMEQwMDFDQUUwQjAwMThBRTAwMDAwQzY3Cis6MTA5RTUwMDBBRTAwMDAxMDkwRTUwMDNFOEZBRjAwMjgyNDBFMDAwNUY0Cis6MTA5RTYwMDBBNjA1MDAxNDk0RUMwMDA0MjQwNUMwMDAwMUU0NTgyNDY1Cis6MTA5RTcwMDBBNjBDMDAxNjkwRUEwMDNFMDFFMDIwMjFBNjBBMDAyMDcwCis6MTA5RTgwMDA5NEU2MDAwNEE2MDYwMDIyQUUwMDAwMjQ5MEUzMDAzRjAyCis6MTA5RTkwMDBBNjAzMDAwMjkwRTkwMDNFOTBGRjAwM0QwM0U5QzgyM0JECis6MTA5RUEwMDAyNzM4MDAwMUEyMTgwMDAxOEY4RDAwMjQzQzEwODAwODgzCis6MTA5RUIwMDBBREFGMDAwOEExQUUwMDMwOEY5ODAwMjQ4RjgyMDA4NERGCis6MTA5RUMwMDAzNjBGMDEwMDk3MEMwMDMyOTQ0QTAwMTIyNDEwRkY4MEQ0Cis6MTA5RUQwMDAwMEFDMzgyNDMxNDYzRkZGMDBFNjE4MjVBNzAzMDAzMkM2Cis6MTA5RUUwMDA5MzA5MDAzMjI0MDVGRkJGMjQwM0ZGREYzMTNGMDAzRjA5Cis6MTA5RUYwMDAzN0Y5MDA0MEEzMTkwMDMyOEY4QzAwMjQyNDE4RkZGRjhCCis6MTA5RjAwMDBBRDgwMDAzNDhERUUwMEMwQUQ4RTAwMzg5MThEMDAzQ0U4Cis6MTA5RjEwMDAzMUEyMDA3RkExODIwMDNDOEY4NzAwMjQ5MEVBMDAzQ0EwCis6MTA5RjIwMDAwMTQ1MzAyNEEwRTYwMDNDOEY5OTAwMjQ5MzI5MDAzQzkxCis6MTA5RjMwMDAwMTIzRjgyNEEzM0YwMDNDOEY4RDAwMjQzQzFGODAwOEEwCis6MTA5RjQwMDBBREI4MDA0MEFEQjIwMDQ0OTFBRjAwNDgzQzEyODAwMDczCis6MTA5RjUwMDAwMUYwNzAyNUExQUUwMDQ4OEY4NzAwMjQ4Rjg2MDA4NDExCis6MTA5RjYwMDA4Q0VDMDA0ODAxOTIxMDI0MDA0QjUwMjVBQ0VBMDA0OENDCis6MTA5RjcwMDA5MEM1MDAzRUEwRTUwMDRDOEY4ODAwODQ4RjgzMDAyNEFDCis6MTA5RjgwMDA5NTA5MDAwNEE0NjkwMDRFOEZFNTAwNjAwRTAwMDJFNjBBCis6MTA5RjkwMDAwMDAwMDAwMDhGOTlGRjJDOEZBRTAwMjgwMDAyODE0MDQ2Cis6MTA5RkEwMDA5MzJGMDA3QzAwMDJDMTAwMDIxODY4MjEzMUYyMDAwMkU4Cis6MTA5RkIwMDAwMDQwMjgyMTE2NDAwMEFBMDFDRDMwMjEzQzBBODAwODJCCis6MTA5RkMwMDAzNTQzMDA4MDkwNjkwMDdDMzEzRjAwMDQxM0UwMDAwM0JBCis6MTA5RkQwMDA4RkFFMDAyODAwMDU2MDgwMDBDQzMwMjEyNDBEMDAwNEU1Cis6MTA5RkUwMDA4RjkwMDAyNDMxQzcwMDAzMDFBNzU4MjMzMTY4MDAwMzc0Cis6MTA5RkYwMDAwMEM4MjAyMUFFMDQwMDM0M0MwNjgwMDhBNjI1MDAzOEE1Cis6MTBBMDAwMDAzQzA1ODAwMDhDQTQwMTAwOTBEMTAwMDgwRTAwMEU4NzUyCis6MTBBMDEwMDAzMjI1MDA3RjBFMDAwRUJDMDAwMDAwMDAwQTAwMTJBQUNDCis6MTBBMDIwMDA4RkEzMDAyMDhGODUwMDIwOENDMjAwMzgyNDE4MDAwM0U1Cis6MTBBMDMwMDBBNEEwMDAwOEFDQTIwMDAwOENERjAwMzRBMEEwMDAwQTlECis6MTBBMDQwMDA4RjkyMDA4NEFDQkYwMDA0M0MwNDAwODA5MjRGMDAzRjFDCis6MTBBMDUwMDBBMEI4MDAwQzhDQUUwMDBDM0MwREZGOUZBMEFGMDAwQjE1Cis6MTBBMDYwMDAwMUM0NDAyNTM1QUJGRkZGM0MxMUZGRUY4Rjk4MDA4NDAyCis6MTBBMDcwMDAwMTBCMzAyNDM2MzlGRkZGMDBEOTYwMjRBQ0FDMDAwQzUyCis6MTBBMDgwMDA4RjAzMDAxNDk3MUYwMDEyOEY4NzAwODBBQ0EzMDAxMDZECis6MTBBMDkwMDA4RjA5MDAxNEFDQTAwMDE4QUNBMDAwMjBBQ0E5MDAxNERCCis6MTBBMEEwMDBBQ0EwMDAyNDhGMEEwMDE4MzNFOTNGRkYwMDA5MTE4MDlCCis6MTBBMEIwMDBBQ0FBMDAyODhGMTIwMDA4MDA0Nzc4MjEzM0VFMDAwMTc3Cis6MTBBMEMwMDBBQ0IyMDAzMDhGMDgwMDBDOEY5OTAwMjQwMDBGNjlDMkQ5Cis6MTBBMEQwMDAwMDBFMjM4MDAxQTQ1ODIxMjQxMTAwMDIzQzA2ODAwOEIwCis6MTBBMEUwMDBBNEFCMDAxQ0E0QTAwMDM0QUNBODAwMkNBMzMxMDAwMDM5Cis6MTBBMEYwMDAzNEQ5MDA4MDk3MkMwMDVDOEY4RjAwMjQzQzAzNDIwMEYxCis6MTBBMTAwMDAzMThBRkZGRjAxNDMzODI1QURFNzAwMDQ4RjgyMDA4NEM4Cis6MTBBMTEwMDAyNDE4MDAwMTI0MTFDMDAwOEM1RjAwMzgyNDA3MDAzNDhCCis6MTBBMTIwMDBBREZGMDAxODhDNTIwMDM0QURGMjAwMUNBREUwMDAwQzA1Cis6MTBBMTMwMDBBREUwMDAxMEE1RTAwMDE0QTVFMDAwMTZBNUUwMDAyMEE5Cis6MTBBMTQwMDBBNUUwMDAyMkFERTAwMDI0QTVGMDAwMDJBMUY4MDAwMTg2Cis6MTBBMTUwMDA4RjhCMDAyNDhGOEUwMDg0QUQ3MDAwMDg5MUNEMDAwMDlECis6MTBBMTYwMDBBMTZEMDAzMDhGODgwMDg0OEY4NDAwMjQ5MTA1MDAwMTQ4Cis6MTBBMTcwMDBBMDg1MDAzMThGOTIwMDI0OTY0QzAwMzIwMTkxNTAyNDJBCis6MTBBMTgwMDAwMTQ5MTgyNUE2NDMwMDMyOTI1RjAwMzIzM0UyMDAzRkI2Cis6MTBBMTkwMDBBMjQyMDAzMjkzMzgwMDdDMzMwRjAwMDIxNUUwMDAwMjI3Cis6MTBBMUEwMDA4Rjg0MDAyNDI0MDcwMDMwM0MwMjgwMDhBQzg3MDAzNEYwCis6MTBBMUIwMDAzNDUyMDEwMDhFNUYwMEMwMjQwRUZGQkYwMjAwOTAyMUM4Cis6MTBBMUMwMDBBQzlGMDAzODkwOTgwMDNDMzMwRjAwN0ZBMDhGMDAzQzdDCis6MTBBMUQwMDA4Rjg4MDAyNDkxMEQwMDNDMDFBRTU4MjRBMTBCMDAzQzU3Cis6MTBBMUUwMDA4Rjg2MDAyNDkwRDEwMDNDMzYzOTAwMjBBMEQ5MDAzQzU1Cis6MTBBMUYwMDA4RjhBMDA4NDhGODUwMDI0MDAxMDg4MkI4RDRDMDAyMENFCis6MTBBMjAwMDBBQ0FDMDA0MDhENDMwMDI0QUNBMzAwNDQ4RDQ5MDAyODMxCis6MTBBMjEwMDBBQ0E5MDA0ODhENDcwMDJDQUNBNzAwNEMwRTAwMEVCQzJBCis6MTBBMjIwMDAzQzEwODAwMDBBMDAxMTE2MDAwMDAwMDA5NENEMDA1MjdFCis6MTBBMjMwMDAzQzBCMDgwMDhENkIwMDI0MDE2RDg4MjFBNEQxMDA1MkQ1Cis6MTBBMjQwMDAwQTAwMTBDMTAwMUU4ODJCQTA4NzAwMDE4Rjg0MDAyNDAzCis6MTBBMjUwMDAyNDBEMDAwMUFDOEQwMDA4MEEwMDEyNUYzQzE4ODAwODM0Cis6MTBBMjYwMDAwMDAyOTA4MDBBMDAxMzNFMDBEMjMwMjEyN0JERkZFMDlCCis6MTBBMjcwMDAzQzBEODAwOEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAxQzlCCis6MTBBMjgwMDBBRkIxMDAxNDM1QjIwMDgwOEU0QzAwMTgzNUE4MDEwMDIzCis6MTBBMjkwMDA5NjRCMDAwNjk1QTcwMDUwOTEwOTAwRUMwMDBDNTYwMjYxCis6MTBBMkEwMDAwMTY3MjgyMzMxNDMwMDdGMzEyNjAwRkYyNDAyMDAwMzg5Cis6MTBBMkIwMDBBMzgzMDA4OEFGODQwMDgwMTBDMjAwMUIzMEIwRkZGRjcyCis6MTBBMkMwMDA5MTA2MDBFQzI0MTIwMDA1MzBDMjAwRkYxMDUyMDAzMzRBCis6MTBBMkQwMDAwMDAwMDAwMDE2MDAwMDA5OEZCRjAwMUM4RkIyMDAxODlDCis6MTBBMkUwMDA4RkIxMDAxNDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMEM2Cis6MTBBMkYwMDAyN0JEMDAyMDAzRTAwMDA4QUQ4RDAwMjQwRTAwMTBBNDRGCis6MTBBMzAwMDAwMjAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEYzCis6MTBBMzEwMDA4RkIwMDAxMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMEU1Cis6MTBBMzIwMDAwM0UwMDAwOEFEOEQwMDI0OTY1ODAwNzg5NjUxMDA3QTFECis6MTBBMzMwMDA5MjRFMDA3RDAyMzg3ODI2MzFFOEZGRkYzMUM0MDBDMDFDCis6MTBBMzQwMDAxNDgwMDAwOTJEMTEwMDAxMTYwMDAwMzcwMDAwMDAwMEU0Cis6MTBBMzUwMDA1NjIwRkZFMjhGQkYwMDFDMEUwMDBGN0EwMDAwMDAwMEE1Cis6MTBBMzYwMDAwQTAwMTQwNjhGQkYwMDFDMTYyMEZGREEwMDAwMDAwMDUwCis6MTBBMzcwMDAwRTAwMEY3QTAwMDAwMDAwMTQ0MEZGRDg4RkJGMDAxQ0IxCis6MTBBMzgwMDAxNjAwMDAyMjAwMDAwMDAwOTI1RjAwN0QzM0UyMDAzRkQzCis6MTBBMzkwMDBBMjQyMDA3RDBBMDAxNDA2OEZCRjAwMUM5NTA5MDBEQTU2Cis6MTBBM0EwMDA4Rjg2MDA2MDAwODAyODIxMjQwNDAwMDUwRTAwMDY3NEJBCis6MTBBM0IwMDAzMTMwRkZGRjk3ODMwMDcyM0MwNDgwMDAyNDY1RkZGRjZCCis6MTBBM0MwMDBBNzg1MDA3MjhDOEEwMUI4MDU0MEZGRkUwMDAwMDAwMERFCis6MTBBM0QwMDBBQzgwMDE4MDhGQkYwMDFDQUM5MDAxODQ4RkIyMDAxODRDCis6MTBBM0UwMDA4RkIxMDAxNDhGQjAwMDEwM0MwNzYwMTMzQzBCMTAwMEJECis6MTBBM0YwMDAyNDBEMEMwMDNDMEM4MDAwMjdCRDAwMjBBQzg3MDE4ODk4Cis6MTBBNDAwMDBBQzhCMDFCODAzRTAwMDA4QUQ4RDAwMjQwRTAwMTBBNDUxCis6MTBBNDEwMDAwMjAwMjAyMTUwNDBGRkIxOEZCRjAwMUM5MjVGMDA3REUxCis6MTBBNDIwMDAwQTAwMTQzMzMzRTIwMDNGMEUwMDEwQTQwMjAwMjAyMTgyCis6MTBBNDMwMDAxNDQwRkZBQThGQkYwMDFDMTIyMDAwMDcwMDAwMDAwMDdDCis6MTBBNDQwMDA5MjU5MDA3RDMzMzAwMDNGMzYwMjAwNDBBMjQyMDA3RDI5Cis6MTBBNDUwMDAwQTAwMTQwNjhGQkYwMDFDMEUwMDBGN0EwMDAwMDAwMEQ3Cis6MTBBNDYwMDA1MDQwRkY5RThGQkYwMDFDOTI1OTAwN0QzMzMwMDAzRjRCCis6MDhBNDcwMDAwQTAwMTQ2MjM2MDIwMDQwRUMKKzowOEE0NzgwMDAwMDAwMDAwMDAwMDAwMUJDMQorOjEwQTQ4MDAwMDAwMDAwMEYwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDZBNQorOjEwQTQ5MDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDRBQQorOjEwQTRBMDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDNBMAorOjEwQTRCMDAwMDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI5MworOjEwQTRDMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI4NAorOjEwQTREMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI3NAorOjEwQTRFMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI2NAorOjBDQTRGMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAxNUQKKzowNEE0RkMwMDgwMDgwMTAwRDMKKzoxMEE1MDAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEMwMDAwMDAzMDgwRkYKKzoxMEE1MTAwMDA4MDAwRjQ4MDgwMDBGRjQwODAwMTAwQzA4MDAxMDIwNzUKKzoxMEE1MjAwMDA4MDAxMDM0MDgwMDBGNDgwODAwMEY0ODA4MDAxMDY4QTEKKzoxMEE1MzAwMDA4MDAxMEEwMDgwMDEwQjAwODAwMTBEODA4MDAxN0M4QzQKKzoxMEE1NDAwMDA4MDAxN0M4MDgwMDE4MDAwODAwMTgwMDA4MDAxODE0QjAKKzoxMEE1NTAwMDA4MDAxN0U0MDgwMDFBM0MwODAwMUEwODA4MDAxQTk0QkEKKzoxMEE1NjAwMDA4MDAxQTk0MDgwMDFCMUMwODAwMUE0QzgwMDgwMjQwQkUKKzoxMEE1NzAwMDA4MDAyMUE4MDgwMDFGRjQwODAwMjFEMDA4MDAyMjY4NjQKKzoxMEE1ODAwMDA4MDAyM0I4MDgwMDI0MDQwODAwMjUyODA4MDAyNDMwMDcKKzoxMEE1OTAwMDA4MDAyNEI0MDgwMDIwNjQwODAwMjlEMDA4MDAyOTc0QTkKKzoxMEE1QTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyNTlDM0EKKzoxMEE1QjAwMDA4MDAyNTlDMDgwMDIwMTAwODAwMjAxMDA4MDAyODRDRTYKKzoxMEE1QzAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwQUIKKzoxMEE1RDAwMDA4MDAyOEFDMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwRjcKKzoxMEE1RTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwOEIKKzoxMEE1RjAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwN0IKKzoxMEE2MDAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyNDI0NTIKKzoxMEE2MTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjkxQzA4MDAyMDEwNDUKKzoxMEE2MjAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwNEEKKzoxMEE2MzAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwM0EKKzoxMEE2NDAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMkEKKzoxMEE2NTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMUEKKzoxMEE2NjAwMDA4MDAyNzcwMDgwMDIwMTAwODAwMjAxMDA4MDAyNkU0QzkKKzoxMEE2NzAwMDA4MDAyNjQwMDgwMDM3ODgwODAwMzc1QzA4MDAzNzI4QTMKKzoxMEE2ODAwMDA4MDAzNkZDMDgwMDM2REMwODAwMzY5MDgwMDgwMTAwMUYKKzoxMEE2OTAwMDgwMDgwMDgwODAwODAwMDA4MDA4MDA4MDA4MDA0NkYwRTQKKzoxMEE2QTAwMDA4MDA0NzI4MDgwMDQ2NzAwODAwNDZGMDA4MDA0NkYwRjkKKzowQ0E2QjAwMDA4MDA0NDUwMDgwMDQ2RjAwODAwNEFDNEFFCis6MDRBNkJDMDAwQTAwMEM3NjBFCis6MTBBNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Mjc4NzAzNUVFCis6MTBBNkQwMDAyRTMwMkUzMDZBMzMwMDAwMDUwMDAwMDMwMDAwMDAwMDE5Cis6MTBBNkUwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBBNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBBNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBBNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBBNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBBNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBBNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBBNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBBNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBBNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBBN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBBN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBBN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBBN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBBN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBBN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBBODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBBODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBBODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBBODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBBODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBBODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBBODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBBODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBBOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBBOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBBOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBBOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBBOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBBOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBBOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBBOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBBOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBBOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBBOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBBOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBBOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBBOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBBOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBBOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBBOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBBOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBBOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBBOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBBQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBBQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBBQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBBQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBBQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBBQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBBQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBBQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBBQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBBQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBBQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBBQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBBQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBBQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBBQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBBQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBBQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBBQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBBQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBBQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBBQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBBQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBBQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBBQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBBQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBBQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBBQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBBQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBBQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBBQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBBQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBBQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBBQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBBQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBBQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBBQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBBQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBBQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBBQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBBQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBBRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBBRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBBRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBBRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBBRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBBRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBBRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBBRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBBREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBBREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBBREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBBREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBBREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBBRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBBRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBBRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBBRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBBRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBBRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBBRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBBRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBBRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBBRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBBRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBBRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBBRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBBRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBBRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBBRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBBRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBBRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBBRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBBRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBBRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBBRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBBRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBBRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBBRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBBRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBCMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBCMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBCMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBEMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBEMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBEMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBEMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBEM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBEM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBEM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBEM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBEM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBEM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBENDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBENDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBENDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBENDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBENDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBENDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBENDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBENDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBENEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBENEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBENEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBENEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBENEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBENEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBENTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBENTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBENTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBENTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBENTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBENTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBENTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBENTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBENUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBENUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBENUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBENUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBENUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBENUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBENjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBENjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBENjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBENjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBENjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBENjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBENjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBENjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBENkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBENkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBENkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBENkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBENkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBENkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBENzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBENzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBENzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBENzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBENzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBENzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBENzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBENzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBEN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBEN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBEN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBEN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBEN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBEN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBEODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBEODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBEODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBEODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBEODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBEODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBEODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBEODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBEODkwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDc1Cis6MTBEOEEwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDEyNDQyODIyMDBGCis6MTBEOEIwMDAzQzAzMDgwMTI0NjM4MkUwQUM0MDAwMDAwMDQzMjAyQkJECis6MTBEOEMwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEOUZGQzZFCis6MTBEOEQwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDMxRDgzQzFDMDgwMUEwCis6MTBEOEUwMDAyNzlDODIyMDBFMDAxMUVBMDAwMDAwMDAwMDAwMDAwREJECis6MTBEOEYwMDAzQzAyODAwMDMwQTVGRkZGMzBDNjAwRkYzNDQzMDE4MEFBCis6MTBEOTAwMDAzQzA4ODAwMDhEMDkwMUI4MDUyMEZGRkUwMDAwMDAwMEUyCis6MTBEOTEwMDBBQzY0MDAwMDI0MDQwMDAyQTQ2NTAwMDhBMDY2MDAwQUFDCis6MTBEOTIwMDBBMDY0MDAwQkFDNjcwMDE4M0MwMzEwMDAwM0UwMDAwODgzCis6MTBEOTMwMDBBRDAzMDFCODNDMDU2MDAwOENBMjRGRjgwNDQwRkZGRTI3Cis6MTBEOTQwMDAwMDAwMDAwMEFDQTQ0RkMwM0MwMzEwMDAzQzA0MDIwMEU3Cis6MTBEOTUwMDBBQ0E0NEZDNDAzRTAwMDA4QUNBMzRGRjg5NDg2MDAwQ0JECis6MTBEOTYwMDAwMEEwNTAyMTI0ODgwMDE0MDAwNjJCMDIwMDA1MTA4MDFFCis6MTBEOTcwMDAwMDQ0NDgyMTAxMDkxODJCMTA2MDAwMTEwMDAwMDAwMDJDCis6MTBEOTgwMDA5MTAzMDAwMDJDNjQwMDA5NTA4MDAwMDk5MTE5MDAwMUU2Cis6MTBEOTkwMDAwMDAzNjA4MDNDMEQwODAxMjVBRDgwRTQwMThENTgyMTE1Cis6MTBEOUEwMDA4RDY3MDAwMDAwRTAwMDA4MDAwMDAwMDA5MTE5MDAwMUYwCis6MTBEOUIwMDAwMTE5NDAyMTAxMDkzMDJCNTRDMEZGRjI5MTAzMDAwMEVFCis6MTBEOUMwMDAwM0UwMDAwODAwMDAxMDIxMEEwMDBDQkUyNTA4MDAwMTM5Cis6MTBEOUQwMDA5MTBGMDAwMTI0MEUwMDBBMTVFRTAwNDAwMTI4QzgyMzEzCis6MTBEOUUwMDAyRjM4MDAwQTE3MDAwMDNEMjUwRDAwMDI4RDU4MDAwMDU5Cis6MTBEOUYwMDAyNTBGMDAwNjM3MEUwMTAwQUQ0RTAwMDA5MTBDMDAwMjBECis6MTBEQTAwMDA5MUFCMDAwMTkxQTQwMDAyOTFBNjAwMDMwMDBDMkUwMDJFCis6MTBEQTEwMDAwMDBCM0MwMDAwQTcxMDI1MDAwNDFBMDAwMDQzQzgyNTk1Cis6MTBEQTIwMDAwMzI2QzAyNUFENTgwMDA0OTEwRTAwMDY5MUVEMDAwMUJCCis6MTBEQTMwMDA5MUU3MDAwMjkxRTUwMDAzMDAwRTVFMDAwMDBENjQwMDE2Cis6MTBEQTQwMDAwMTZDMzAyNTAwMDcyMjAwMDBDNDEwMjUwMDQ1MTgyNTcwCis6MTBEQTUwMDAyNTA4MDAwQTBBMDAwQ0JFQUQ0MzAwMDg5MTBGMDAwMTIyCis6MTBEQTYwMDAyNTA0MDAwMjI0MDgwMDAyNTVFODAwMDEwMTIwMjAyMUJECis6MTBEQTcwMDAwQTAwMENCRTAwODA0MDIxOTEwQzAwMDEyNDBCMDAwMzIxCis6MTBEQTgwMDAxNThCMDAxNjAwMDAwMDAwOEQ1ODAwMDA5MTBFMDAwMjVBCis6MTBEQTkwMDAyNTA4MDAwMzM3MEQwMDA4QTE0RTAwMTAwQTAwMENCRTM3Cis6MTBEQUEwMDBBRDREMDAwMDkxMTkwMDAxMjQwRjAwMDQxNzJGMDAwQjQ5Cis6MTBEQUIwMDAwMDAwMDAwMDkxMDcwMDAyOTEwNDAwMDM4RDQzMDAwMDY0Cis6MTBEQUMwMDAwMDA3MkEwMDAwQTQxMDI1MzQ2NjAwMDQyNTA4MDAwNDdECis6MTBEQUQwMDBBRDQyMDAwQzBBMDAwQ0JFQUQ0NjAwMDAwM0UwMDAwODk5Cis6MTBEQUUwMDAyNDAyMDAwMTI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDUzCis6MTBEQUYwMDAwRTAwMTRFMDAwODA4MDIxM0MwNDgwMDgzNDg1MDA4MDAyCis6MTBEQjAwMDA5MEE2MDAwNTI0MDNGRkZFMDIwMDIwMjEwMEMzMTAyNDdDCis6MTBEQjEwMDA4RkJGMDAxNDhGQjAwMDEwQTBBMjAwMDUwQTAwMTRFQTA1Cis6MTBEQjIwMDAyN0JEMDAxODI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDNECis6MTBEQjMwMDAwRTAwMEY0RTAwODA4MDIxM0MwNjgwMDgzNEM1MDA4MDE2Cis6MTBEQjQwMDA5MEE0MDAwMDI0MDIwMDUwMzA4MzAwRkYxMDYyMDAwNzAwCis6MTBEQjUwMDAzQzA5ODAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBDCis6MTBEQjYwMDBBRDIwMDE4MDBBMDAxMDEwMjdCRDAwMTgyNDA4MDEwMDE0Cis6MTBEQjcwMDAzQzA3ODAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMEVFCis6MTBEQjgwMDBBQ0U4MDE4MDBBMDAxMDEwMjdCRDAwMTgyN0JERkY3MDA3Cis6MTBEQjkwMDAzQzA4ODAwOEFGQjYwMDgwQUZCNTAwN0NBRkIxMDA2QzI4Cis6MTBEQkEwMDBBRkJGMDA4Q0FGQkUwMDg4QUZCNzAwODRBRkI0MDA3OEMxCis6MTBEQkIwMDBBRkIzMDA3NEFGQjIwMDcwQUZCMDAwNjgzNTA1MDA4MDNECis6MTBEQkMwMDAzQzA3ODAwMDhDRjIwMTI4OTBBNDAwMDlBQ0UwMDA4NDlFCis6MTBEQkQwMDA5MEE2MDAwNTMwOTEwMEZGMDAwMEE4MjEwMDA2MTgyNzNDCis6MTBEQkUwMDAzMDYyMDAwMTAwMDBCMDIxMTQ0MDAwNjdBRkEwMDA1MDc3Cis6MTBEQkYwMDA5MEE5MDAwMDI0MDUwMDIwMzEyNDAwRkYxMDg1MDAxNkE0Cis6MTBEQzAwMDAyNDBBMDA1MDEwOEEwMDhDMDAwMDAwMDAzQzBDMDgwMDIwCis6MTBEQzEwMDA4RDhDMDBEQzI1OEIwMDAxM0MwMTA4MDBBQzJCMDBEQzY2Cis6MTBEQzIwMDAwRTAwMTVENjAwMDAwMDAwOEZCRjAwOEM4RkJFMDA4ODRDCis6MTBEQzMwMDA4RkI3MDA4NDhGQjYwMDgwOEZCNTAwN0M4RkI0MDA3OERBCis6MTBEQzQwMDA4RkIzMDA3NDhGQjIwMDcwOEZCMTAwNkM4RkIwMDA2ODFBCis6MTBEQzUwMDAwM0UwMDAwODI3QkQwMDkwMDAwMDAwMEQzQzEwODAwMDhDCis6MTBEQzYwMDBBRkEwMDAzMDk2MUYwMTE2OEUxOTAxMDQzQzFFMDAyMDQzCis6MTBEQzcwMDAzNjEzMEMwMDAzM0VDMDI0MDAxOEI4MkIwMDE3MzE0MEE3Cis6MTBEQzgwMDBBRkE2MDAzMDhFMEUwMTA0MzNGNEZGRkYzQzBGMDA0MEJFCis6MTBEQzkwMDAwMjkzODAyMTAxQ0Y2ODI0OTIxMzAwMEQxMUEwMDA0ODQ3Cis6MTBEQ0EwMDAzNEM0MDA0MDMyNjIwMDIwMTQ0MDAwMDIzNDg2MDA4MEY4Cis6MTBEQ0IwMDAwMDgwMzAyMTE0QzAwMDkzQUZBNjAwMzAzQzA1ODAwOERFCis6MTBEQ0MwMDAzNEE4MDA4MDkxMDcwMDA4MzBFNjAwNDA1MEMwMDAwNkVDCis6MTBEQ0QwMDAzQzA2ODAwODI0MDkwMDA0MTIyOTAwQTIyNDBBMDAxMjJDCis6MTBEQ0UwMDAxMjJBMDAyOTNDMDY4MDA4MzRENDAxMDAzQzE3ODAwMDI5Cis6MTBEQ0YwMDA5NkVGMDExQTk2MEQwMDBFOTI4RTAwMDgzMjZCMDAwNDBBCis6MTBERDAwMDAzMUY3RkZGRjAxQ0Q2MDA0QUZBQzAwNTQ4RTE0MDAwNDY2Cis6MTBERDEwMDAxMTYwMDAzMThFMUUwMDA4MzRDMzAwODA5MDc5MDAwODI1Cis6MTBERDIwMDAzMzM4MDA0MDE3MDAwMDI4MDAwMDAwMDA4QzczMDA1MEJBCis6MTBERDMwMDAwMjkzOTAyMzA2NDAwMDA2M0MwQzgwMDA4QzdFMDAzNDQ5Cis6MTBERDQwMDAwMjlFODAyMzA2MDIwMDgzOEVBMjAwMDgzQzBDODAwMDA1Cis6MTBERDUwMDBBRDgwMDA0NDI0MDIwMDAxOEZCRjAwOEM4RkJFMDA4ODdDCis6MTBERDYwMDA4RkI3MDA4NDhGQjYwMDgwOEZCNTAwN0M4RkI0MDA3OEE5Cis6MTBERDcwMDA4RkIzMDA3NDhGQjIwMDcwOEZCMTAwNkM4RkIwMDA2OEU5Cis6MTBERDgwMDAwM0UwMDAwODI3QkQwMDkwMEUwMDBEMUEwMDAwMjAyMUJFCis6MTBERDkwMDA4RkJGMDA4QzhGQkUwMDg4OEZCNzAwODQ4RkI2MDA4MDQ1Cis6MTBEREEwMDA4RkI1MDA3QzhGQjQwMDc4OEZCMzAwNzQ4RkIyMDA3MDkxCis6MTBEREIwMDA4RkIxMDA2QzhGQjAwMDY4MDNFMDAwMDgyN0JEMDA5MEIxCis6MTBEREMwMDAwQTAwMEQ3QTAwQzAyMDIxMEUwMDE2MzcwMjgwMjAyMUEzCis6MTBEREQwMDAxNDQwRkZERjNDMEM4MDAwM0MwMzgwMDgzNDYzMDA4MDZCCis6MTBEREUwMDA4QzYyMDAzNDAyODJGODIzMDdFMDAwMTcwMDAwMDAwMDc0Cis6MTBEREYwMDAzQzE1MDgwMDhFQjUzMTAwMjZCMTAwMDEzQzAxMDgwMDM5Cis6MTBERTAwMDBBQzMxMzEwMDBFMDAxNEUwMDI0MDIwMjEzQzBCODAwOEIwCis6MTBERTEwMDAzNTcwMDA4MDkyMEEwMDI1MDI0MDIwMjEzNTQyMDAwNDFFCis6MTBERTIwMDAwRTAwMTRFQUEyMDIwMDI1MEUwMDBDOUUwMjQwMjAyMUUyCis6MTBERTMwMDAwQTAwMERBNzI0MDIwMDAxM0MxNTA4MDEyNkI1ODJEMDc2Cis6MTBERTQwMDAwQTAwMEQ2OTNDMTA4MDAwOEM2NjAwMzAwMjg2MjAyMzk5Cis6MTBERTUwMDAxODgwMDAwODI0MDkwMDBDM0MwODA4MDA4RDA4MzEwMEQ3Cis6MTBERTYwMDAzMjczMDBGQzAwMDBCODIxMjUwNzAwMDEzQzAxMDgwMEM2Cis6MTBERTcwMDBBQzI3MzEwMEFGQTkwMDMwOEM2NTAwMzAwMEI0MzgyM0U2Cis6MTBERTgwMDAxOEUwMDBEQjAyRTc1MDJBMTU0MEZGREUwMDAwMDAwMDJBCis6MTBERTkwMDAxMkU3MDAyQTAyRTc2ODIzMDI4N0EwMjEzMUI3RkZGRkJCCis6MTBERUEwMDAzMjZFMDAwMjExQzAwMDM0MzI3RjAwMTAzQzE0ODAwODMyCis6MTBERUIwMDAzNjkwMDA4MDkyMEYwMDA4MzFGNjAwNDA1MkMwMDBDRTJDCis6MTBERUMwMDA4RUEyMDAwODAyNDAyMDIxMEUwMDE0RTAyNDEzMDAxODQ2Cis6MTBERUQwMDBBMjEzMDAwOTkyMTgwMDA1MjQxOUZGRkUwMjQwMjAyMTE4Cis6MTBERUUwMDAwMzE5QjgyNDBFMDAxNEVBQTIxNzAwMDUyNDA0MDAzOTBGCis6MTBERUYwMDAwMDAwMjgyMTBFMDAxNjEyMjQwNjAwMTgwQTAwMERBN0EzCis6MTBERjAwMDAyNDAyMDAwMTkyQjYwMDBDM0MwNDgwMDgzNDgzMDA4MDk3Cis6MTBERjEwMDA4QzY3MDAzODAwMTZBQjAwMzZCMTAwODEwMjQwMjAyMTJBCis6MTBERjIwMDAzMjI1RjA4MTBFMDAwQzhEMzBDNjAwRkYzQzBDODAwMEM1Cis6MTBERjMwMDBBRDgwMDA0NDBBMDAwREE3MjQwMjAwMDEzQTZDMDAwMUU0Cis6MTBERjQwMDAzMThCMDAwMTE1NjBGRkFGMDI4N0EwMjEwQTAwMERGODk4Cis6MTBERjUwMDAwMDAwMDAwMDAwNDBGODA5MjQwNDAwMTYwQTAwMERBNzg0Cis6MTBERjYwMDAyNDAyMDAwMTAyNDAyMDIxMEUwMDE3MTcwMjAwMjgyMTgwCis6MTBERjcwMDAwQTAwMEQ1QzhGQkYwMDhDMTNFMEZGNzQzQzAzODAwODI3Cis6MTBERjgwMDAzNDY4MDA4MDhEMDQwMDM4OEM2NjAwMDQwM0M2MTAyM0JBCis6MTBERjkwMDAxQzQwRkY2RjNDMEM4MDAwMDNDNDI4MjMwNEEyMDAwMTM2Cis6MTBERkEwMDAwMDgwRjAyMUFGQjQwMDEwQUZCNzAwMTRBRkE3MDAxODg1Cis6MTBERkIwMDAzQzFGODAwMDk3RTMwMTIwOEQwOTAwMzA5NTA2MDA1QzJFCis6MTBERkMwMDA4RkI5MDA1NDhGQUMwMDMwMzA2MkZGRkYzMEQ4RkZGRkI0Cis6MTBERkQwMDAwMDQ3NzAyMTM3RUY0MDAwMDMzODY4MkIwMUNGNTgyMUVDCis6MTBERkUwMDAwMThENTAyNUFGQUIwMDIwQUZBOTAwMjhBRkFBMDAzMEFCCis6MTBERkYwMDBBRkE5MDAyNEFGQTAwMDJDQUZCRTAwMzQ5MTA3MDAwOEU5Cis6MTBFMDAwMDAzMEU0MDAwODE0ODAwMDhGMDIwMDIwMjE4RUEyMDAwNDVBCis6MTBFMDEwMDAwMDQwRjgwOTI3QTQwMDEwOEZBOTAwMzAzMTI4MDAwMjIxCis6MTBFMDIwMDA1NTAwMDAwMTMyNzMwMEZFM0MwNDgwMDgzNDhDMDA4MEVGCis6MTBFMDMwMDA5MThCMDAwODMxNkEwMDQwNTE0MDAwMTI4RkE0MDAyNEU3Cis6MTBFMDQwMDA4QzhEMDAwNDExQkUwMEJFMjQwRTAwMTQzMjY1MDAwMTQ4Cis6MTBFMDUwMDAxMEEwMDAwQzhGQTQwMDI0MjQwNDAwMEMxMjI0MDBENDZGCis6MTBFMDYwMDAyQTI3MDAwRDEwRTAwMENFMjQwOTAwMEUyNDA4MDAwQTIzCis6MTBFMDcwMDA1MjI4MDAwMTI0MTYwMDA4OEZBMjAwMjQyNDQ0MDAwMTI1Cis6MTBFMDgwMDBBRkE0MDAyNDhGQTYwMDE0M0MwMzgwMDgzNDY1MDA4MEYwCis6MTBFMDkwMDAwMDg2RjgyMThDQjEwMDMwQUNCRjAwMzA5MEI5MDA0RTQyCis6MTBFMEEwMDA4Q0FFMDAzMDM0MThGRkZGMDMzODc4MDQwMUNGNjgyMUFDCis6MTBFMEIwMDBBQ0FEMDAzNDhGQTYwMDMwOEZBQzAwNTQzMENBMDAwOERECis6MTBFMEMwMDAwM0NDNTgyMTExNDAwMDBDQUZBQjAwNTg4Q0E0MDAyMEE5Cis6MTBFMEQwMDA4RkIwMDA1ODEwOTAwMDk0MzBDNjAwRkY5MkEyMDAwQzQwCis6MTBFMEUwMDA4RkE3MDAzNDAyNDAyMDIxMDAwMjRCMDAzNTI4MDA4MDE5Cis6MTBFMEYwMDAwRTAwMEM4RDMxMDVGMDgwM0MwQzgwMDgzNTkwMDA4MEJFCis6MTBFMTAwMDA4RTBCMDAzMDAxNzE1MDIzMTk0MDAwNzAyNjU5MDA4MDk5Cis6MTBFMTEwMDAzQzE4MDgwMDhGMTgzMTk4MjQxRkZGODAwMzNGNzgyNDkzCis6MTBFMTIwMDAzMzJEMDA3RjNDMDY4MDAwM0MwRTgwMDQzMzExMDAxMDJDCis6MTBFMTMwMDBBQ0NGMDA5MDEyMjAwMDM0MDFBRTI4MjE5MEEzMDA2QkQ4Cis6MTBFMTQwMDA1NDYwMDAzMjNDMTA4MDA4MjQwNzAwMDFBMEE3MDA2QjM3Cis6MTBFMTUwMDA5NEM0MDA3QTI0ODYwMDBBQTYwNjAwMTIzQzBEODAwOEFBCis6MTBFMTYwMDAzNUE1MDA4MDkwQjEwMDA4MzIyQzAwNDAxNTgwMDAwNEQ1Cis6MTBFMTcwMDAzQzAzODAwODMyNkUwMDAxMTVDMDAwNjIwMDAwMDAwMDAwCis6MTBFMTgwMDAzNDY0MDA4MDhDOEYwMDIwOEZCMzAwNTgxMUYzMDAwQTk0Cis6MTBFMTkwMDAzNDYzMDEwMDhDNzkwMDAwMDI5OUMwMjMxQjAwMDA3N0QyCis6MTBFMUEwMDA4RkE4MDA1OEFDODgwMDIwQUM3NDAwMDAyNDE0MDAwMTMzCis6MTBFMUIwMDBBQzdFMDAwNEFGQjQwMDUwMTZDMDAwMzcwMDAwMDAwMDcxCis6MTBFMUMwMDA4RkE0MDA1MDE0ODAwMDMwMDAwMDAwMDAxMkUwMDAwNTExCis6MTBFMUQwMDAwMDAwMTgyMThGQTkwMDMwMzEzNzAwMDQ1MkUwRkU5MjcwCis6MTBFMUUwMDAwMDYwMTAyMTI0MDMwMDAxMEEwMDBENUIwMDYwMTAyMTczCis6MTBFMUYwMDAwQTAwMERGOTAwMDAzODIxMDA0MEY4MDkyNDA0MDAxNzM2Cis6MTBFMjAwMDAwQTAwMERBNzI0MDIwMDAxM0MxMDgwMDgzNjEwMDA4MDhGCis6MTBFMjEwMDAyNDA5MDAwMTAyNDAyMDIxMEUwMDE0RTBBNjA5MDAxMjhBCis6MTBFMjIwMDA5MjA4MDAyNTI0MDUwMDAxQUZBNTAwNTAzNTAyMDAwMTI5Cis6MTBFMjMwMDAwMjQwMjAyMTBFMDAxNEVBQTIwMjAwMjUwQTAwMEVBOUM1Cis6MTBFMjQwMDAzQzBEODAwODI3QTUwMDM4QUZBODAwNjAwRTAwMENBODgwCis6MTBFMjUwMDBBRkEwMDAzODE0NDBGRjZEOEZBODAwNjA4RkE1MDAzODc0Cis6MTBFMjYwMDAzMEIwMDEwMDUyMDBGRjZBOEVBMjAwMDQ4RkEzMDAzQzcwCis6MTBFMjcwMDA4RDA3MDA1ODAwNjcyMDIzMDQ4M0ZGNjRBRDAzMDA1ODE2Cis6MTBFMjgwMDAwQTAwMEU1NThFQTIwMDA0MEUwMDBDOUUwMjQwMjAyMUIyCis6MTBFMjkwMDAwQTAwMEVDNDAwMDAwMDAwMEUwMDE0RTAwMjQwMjAyMTFECis6MTBFMkEwMDAzQzA1ODAwODM0QTMwMDgwMDI0MDIwMjEwRTAwMTRFQUJGCis6MTBFMkIwMDBBMDc2MDAwOTAyQzAzMDIxMjQwNDAwMzcwRTAwMTYxMjk3Cis6MTBFMkMwMDAwMDAwMjgyMTBBMDAwRUMyOEZBNDAwNTA4RkEyMDAxODVGCis6MTBFMkQwMDA1ODQwRkZBMzNDMEQ4MDA4MEUwMDE0RTAwMjQwMjAyMUFFCis6MTBFMkUwMDA5MjBBMDAyNTI0MEIwMDAxQUZBQjAwNTAzNTQyMDAwNDE4Cis6MTBFMkYwMDAwMjQwMjAyMTBFMDAxNEVBQTIwMjAwMjUwQTAwMEVBOTA1Cis6MTBFMzAwMDAzQzBEODAwODhDQjYwMDMwOEVCRTAwMDgyNDA0MDAxODM2Cis6MTBFMzEwMDAyNkQ1MDAwMTAzQzBGODA5QUNCNTAwMzA4RkIyMDAzMDNCCis6MTBFMzIwMDAwQTAwMEQ1QjMyNDIwMDA0M0MwNzgwMDA5NEU1MDExQUFDCis6MTBFMzMwMDA1MEEwRkY2QTM0QzYwMDEwMEEwMDBFODk5MkEyMDAwQzk5Cis6MTBFMzQwMDAxMjJFMDAyQTJBMkYwMDE1MTFFMDAwMUUyNDE5MDAxNjkzCis6MTBFMzUwMDAyNDE4MDAwQzU2MzhGRjNFMzI2NTAwMDEzQzFGODAwODJGCis6MTBFMzYwMDA5M0UzMDAxQjI0MTBGRkJEMjQxNjAwMEUwMDcwMzAyNDIwCis6MTBFMzcwMDBBM0U2MDAxQjBBMDAwRTY1MzI2NTAwMDE4QzdGMDAwMEQ5Cis6MTBFMzgwMDAxN0Y0RkY4RDAwMDAwMDAwOEM2NzAwMDQwM0M3MzAyM0UyCis6MTBFMzkwMDAwNEMxRkY4NDhGQTgwMDU4MEEwMDBFQkYwMDAwMDAwMENGCis6MTBFM0EwMDAxNjI5RkYzNjhGQTIwMDI0MEEwMDBFNzAyNDE2MDAxMEQyCis6MTBFM0IwMDAyNDExMDAwRTUyRDFGRjMwMjQxNjAwMTAwQTAwMEU2RkY3Cis6MTBFM0MwMDAyNDE2MDAxNjU2MzlGRjIyMzI2NTAwMDEzQzFGODAwOEQyCis6MTBFM0QwMDA5M0UzMDAxQjI0MTBGRkJEMjQxNjAwMTAwMDcwMzAyNEFFCis6MTBFM0UwMDBBM0U2MDAxQjBBMDAwRTY1MzI2NTAwMDEwQTAwMEU2NEY4Cis6MTBFM0YwMDAyNDE2MDAxMjNDMDM4MDAwOEM2MjAxQjgwNDQwRkZGRTJBCis6MTBFNDAwMDAyNDA0MDgwMEFDNjQwMUI4MDNFMDAwMDgwMDAwMDAwMDI4Cis6MTBFNDEwMDAzMEE1RkZGRjMwQzZGRkZGM0MwNzgwMDA4Q0UyMDFCODRCCis6MTBFNDIwMDAwNDQwRkZGRTM0RTgwMTgwQUQwNDAwMDBBQ0U0MDAyMEFECis6MTBFNDMwMDAzQzA0ODAwODk0ODMwMDQ4MzA2M0ZGRkYxMDYwMDAxRDk3Cis6MTBFNDQwMDAzQzBCODAwMDI0QUEwMDEyMDA2QTQ4MkI1MTIwMDAxQUJECis6MTBFNDUwMDAyNDBBMDAwMzk0RjkwMTIwOEY4OTAwMDAyNDBDMDAxQTdCCis6MTBFNDYwMDAzMzM4RkZGRjI3MDdGRkZFMDA2Nzc4MkIzOUVFMDAwMUU2Cis6MTBFNDcwMDAwMDA5NkI4MjAxQUU1ODI0QTEwQzAwMEIxMTYwMDA0NzBCCis6MTBFNDgwMDA4RjgzMDAwNEE1MDcwMDE0OEY4ODAwMDQzNTA3MDAwMTVFCis6MTBFNDkwMDBBRjg3MDAwNDMwQ0MwMDQwNTU4MDAwMEYzQzA4ODAwMDVFCis6MTBFNEEwMDAzQzBDODAwMDM1ODQwMTgwQTQ4NTAwMEUwQTAwMEY5ODgyCis6MTBFNEIwMDA4RjhGMDAwQzI0MEEwMDAzMzU2NDAxODAzMENDMDA0MEFCCis6MTBFNEMwMDA4Rjg5MDAwMDhGODcwMDA0QTA4QTAwMEI1MTgwRkZGNTIwCis6MTBFNEQwMDAzQzBDODAwMDNDMDg4MDAwOTUwMzAxMjAzQzA4ODAwODJCCis6MTBFNEUwMDA5NTE4MDA0MDMwNzlGRkZGMjcyRUZGRkUzMzBGRkZGRjA2Cis6MTBFNEYwMDAwMUNGNjgyQjExQTAwMDAzMDFDMDIwMjE5NTAyMDA0MDJDCis6MTBFNTAwMDAzMDQ0RkZGRjNDMEI4MDAwMDBBNDUwMjMzNTY1MDE4MEEwCis6MTBFNTEwMDBBNEE0MDAwRUE0QUEwMDI0OEY4RjAwMEMzQzA1ODAwMDQ4Cis6MTBFNTIwMDAzNEFFMDE4MDI0MTgwMDAyMzBFRDgwMDBBNUQ4MDAwQzI0Cis6MTBFNTMwMDBBNUM5MDAxMEFEQ0YwMDI4QTVDNjAwMDgxMUEwMDAwRTg3Cis6MTBFNTQwMDAzQzA0ODAwMDk0QUEwMTE2MzE0MkZGRkMyNDQ4MDAwNEQ4Cis6MTBFNTUwMDAwMTA1MTgyMThDNzk0MDAwMzMyNkZGRkYxNEMwMDAwNzA1Cis6MTBFNTYwMDAyNDBFQkZGRjNDMEJGRkZGMzU2NTdGRkYwMEU1MzgyNDFECis6MTBFNTcwMDBBRjg3MDAwNDNDMDQ4MDAwMjQwRUJGRkYzNDhDMDE4MDcwCis6MTBFNTgwMDAwMEVFNjgyNEE1OEQwMDI2QUQ4OTAwMkMzQzA3MTAwMDA0Cis6MTBFNTkwMDBBQzg3MDFCODAzRTAwMDA4MDAwMDAwMDAyNDAyRkZGRTgxCis6MTBFNUEwMDAwMDYyMzgyNDBBMDAwRjc2QUY4NzAwMDQzQzA1ODAwMDIzCis6MTBFNUIwMDAzNEE0MDA3MDhDOEEwMDAwOTBBNjAxMTI4Rjg0MDAwMEExCis6MTBFNUMwMDAyN0JERkZGMDMwQzMwMEZGMDAwMzE4ODIzMDgyMDEwMDM2Cis6MTBFNUQwMDAwMDAwMzgyMTEwNDAwMDM5MjQ2NjAwMDMzMDg3NDAwMEQ1Cis6MTBFNUUwMDA1MEUwMDAzOTMwODgyMDAwMDAwNjEwODAwMDQ1QzgyMTI2Cis6MTBFNUYwMDA4RjJGNDAwMDI0NzgwMDA0MDAxODcwODBBRkFGMDAwMDE3Cis6MTBFNjAwMDAwMUM1NjgyMThEQUM0MDAwQUZBQzAwMDQ5NEFCMDExNjhECis6MTBFNjEwMDAzMTY5RkZGQzAxMjU0MDIxOEQwNTQwMDBBRkE1MDAwOEIwCis6MTBFNjIwMDA4RkE5MDAwODAwMDAzMDIxMDAwMDI4MjEzQzA3MDgwMEM1Cis6MTBFNjMwMDAyNEU3MDEwMDBBMDAwRkU5MjQwODAwMDg5MDQyMDAwMEM2Cis6MTBFNjQwMDAyNEE1MDAwMTJDQUQwMDBDMDA2MkM4MjEwMDE5QzA4MDc3Cis6MTBFNjUwMDAwMzA3NzgyMThERUUwMDAwMTFBMDAwMDYwMENFMzAyNkMxCis6MTBFNjYwMDAwM0E1MTAyMTE0QThGRkY1MDAwNTFBMDA1NTIwRkZGNDlBCis6MTBFNjcwMDA5MDQyMDAwMDNDMDQ4MDAwMzQ4NzAwNzAzQzA1MDgwMDk0Cis6MTBFNjgwMDA4Q0E1MzEwNDhDRTMwMDAwMkNBODAwMjAxMTAwMDAwOUE3Cis6MTBFNjkwMDAwMDZBMzgyMzAwMDU1ODgwM0MwQzA4MDAyNThDMzEwODlFCis6MTBFNkEwMDAwMTZDNDgyMTI0QUEwMDAxQUQyNzAwMDAzQzAxMDgwMEFDCis6MTBFNkIwMDBBQzJBMzEwNEFGODYwMDBDMjQwNzAwMDEwMEUwMTAyMUQxCis6MTBFNkMwMDAwM0UwMDAwODI3QkQwMDEwMTEwMEZGRkMwMDAwMzgyMTA2Cis6MTBFNkQwMDAwMDA2NjA4MDAxODU1ODIxOEQ2NDQwMDAyNDY5MDAwNDkzCis6MTBFNkUwMDAwMDA5Mzg4MEFGQTQwMDAwMDBFNTE4MjE4QzY2NDAwMEM2Cis6MTBFNkYwMDBBRkEwMDAwODBBMDAwRkQ5QUZBNjAwMDQyN0JERkZEOEJECis6MTBFNzAwMDBBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjRBRkI0MDAyMDBDCis6MTBFNzEwMDBBRkIzMDAxQ0FGQjEwMDE0OEY4NzAwMDAzQzA0ODAwMDMxCis6MTBFNzIwMDA5NDgzMDEwRTMwRTI0MDAwMDAwMDgwMjExMDQwMDAxMDcwCis6MTBFNzMwMDAzMDcyRkZGRjNDMDYwMDIwMDBFNjI4MjQxMEEwMDAwREU4Cis6MTBFNzQwMDAzMEVBODAwMDhGODgwMDA0MjQwOUJGRkYwMEU5MzgyNEU0Cis6MTBFNzUwMDAzNTAzMTAwMEFGODcwMDAwMzBGMTIwMDAxNjIwMDAwQkI5Cis6MTBFNzYwMDAzQzE0MDAwNDI0MThGRkJGMEEwMDEwMzgwMDc4MTAyNDVECis6MTBFNzcwMDAzMEVBODAwMDE1NDAwMDg2M0MwQzAwMjAzMEYxMjAwMDdCCis6MTBFNzgwMDAxMjIwRkZGODhGODMwMDA0M0MxNDAwMDQwMEY0OTgyNDQ2Cis6MTBFNzkwMDAxMjYwRkZGNTI0MThGRkJGMzQ2MjAwNDAzMEY5MDEwMDE5Cis6MTBFN0EwMDAxMzIwMDAwRkFGODIwMDA0M0MwMjAwMjAwMEUyRjgyNDk2Cis6MTBFN0IwMDAxM0UwMDAwNTNDMEI4MDAwM0MwNDAwMDQwMEU0MTgyNDM2Cis6MTBFN0MwMDAxMDYwMDBDRjAwMDAwMDAwOTU2QTAxMUU5NTY5MDExQ0QxCis6MTBFN0QwMDAzMTQ2RkZGRjAwMDk0NDAwMDBDODI4MjVBRjg1MDAwQzIyCis6MTBFN0UwMDAzQzBFODAwMDk1Q0QwMTBDOERDNDQwMDAzNDBDRkZGRjIxCis6MTBFN0YwMDAxMDhDMDBCMDMxQTVGRkZGMzA4RjAxMDA1NUUwMDAwMTAzCis6MTBFODAwMDAyNDEwMDAxMDMwRjExMDAwNTIyMDAwMDgzNjExMDAwMUQxCis6MTBFODEwMDAzMEYzMDAyMDE2NjAwMDlGM0MxODEwMDAwMEY4QTAyNDgwCis6MTBFODIwMDAxNjgwMDA5NjNDMDQwQzAwMzYxMTAwMDEzMEU4MDEwMDBGCis6MTBFODMwMDAxNTAwMDAwQjNDMEEwMDAxOEY4ODAwMDQzMTA5NDAwMERDCis6MTBFODQwMDAxNTIwMDAwODAwRUEzMDI0M0MwQzFGMDEwMEVDNTgyNDdECis6MTBFODUwMDAzQzBBMTAwMDUxNkEwMEFFMzBBRDAyMDAzQzBBMDAwMUQzCis6MTBFODYwMDAwMEVBMzAyNDE0QzAwMDk1M0MwNTEwMDAwMEU1MjAyNDg3Cis6MTBFODcwMDAwMDAwNDAyMTEwODAwMDA3MDAwMDkwMjEwMDA3OUUwMjQ4Cis6MTBFODgwMDAzMjcyMDAwRjAwMTI3ODgwM0MwRTA4MDEyNUNFODI4MDgzCis6MTBFODkwMDAwMUVFNDAyMThGOTQwMDE4MTI4MDAwNDcwMjIwODAyMTUxCis6MTBFOEEwMDAxMDgwMDA5MTAwMDAwMDAwM0MwOTgwMDA5NTM5MDEwRUE1Cis6MTBFOEIwMDA5MTAzMDAwMDAyMjAzMDIxMzMzOEZGRkYyNzA1MDAwNEI4Cis6MTBFOEMwMDAxMDYwMDAwODAwMDBBMDIxMjQxRjAwMDMxMDdGMDEzQUZGCis6MTBFOEQwMDAyNDA0MDAwMjkxMEMwMDAxMTE4NDAxMTgzMEVBMDA0MDY4Cis6MTBFOEUwMDAwMDEyQTFDMDhGOTIwMDFDNTI0MDAwMDEzNjI2MDA0MDQ5Cis6MTBFOEYwMDAzQzEzODAwMDhFNkY0MDAwMzFGMTAxMDAxMjIwMDBDQkVDCis6MTBFOTAwMDAzMEQxRkZGQjNDMTgwODAwOEYxODAwMjQzMEQyMDAwNERGCis6MTBFOTEwMDAzMzA2MDAwNDE0QzAwMENDMzBCMEZGRkY1NjQwMDAwMUE1Cis6MTBFOTIwMDAzNjMxMDAwNDAyODAyMDIxMDIwMDI4MjEwRTAwMEY1NUZDCis6MTBFOTMwMDAwMjIwMzAyMTE2NDAwMDBEMDAwMDIwMjEzNjY1MDE4MEE0Cis6MTBFOTQwMDAzQzA0ODAwMDhDOTMwMUI4MDY2MEZGRkUyNDE5MjAwMDZGCis6MTBFOTUwMDAyNDE0MDAwMkE0QjkwMDA4QTBCNDAwMEJBNEEwMDAxMDY1Cis6MTBFOTYwMDAzQzA1MTAwMEFDODUwMUI4MDAwMDIwMjE4RkJGMDAyNEI5Cis6MTBFOTcwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDI5Cis6MTBFOTgwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODkwCis6MTBFOTkwMDAwMEVDNTgyNDExNjBGRjdBMzBGMTIwMDA4RjhEMDAwNEM0Cis6MTBFOUEwMDAzQzBGRkZGRjM1RUU3RkZGMDBFRTM4MjQzNUEzODAwMERCCis6MTBFOUIwMDAwQTAwMTAyN0FGODcwMDAwM0MwMjA4MDA4QzQyMDAzODk0Cis6MTBFOUMwMDAzQzA0MDgwMDI0ODQwMDM4MTA0MDAwNEIyNDQ5RkZGRjE5Cis6MTBFOUQwMDAzQzAzODAwMDk0NkMwMTBFMzE4QkZGRkYxMTAwMDBBMEZFCis6MTBFOUUwMDAyNTczMDAwNDNDMTAwODAwOEUxMDAwMzAxMjAwMDAwQTRECis6MTBFOUYwMDAzMEU2MDEwMDhGOEEwMDA0MzE0MzQwMDAxMDYwMDAwNkI5Cis6MTBFQTAwMDAzQzBGMEYwMDAwRUY3MDI0M0MwRDAxMDAwMUFFNDAyQkM1Cis6MTBFQTEwMDAxMTAwMDBERjMyNjVGRkZGMTBDMDAwNjkzQzE0MEYwMEQ5Cis6MTBFQTIwMDAwMEY0MjgyNDNDMTgwMjAwMTBCODAwNjU4Rjk5MDAwQ0VGCis6MTBFQTMwMDAzMjcwRkZGRjAzMjk5ODI0MDI2NDkwMjE5MjQ5MDAwNDU4Cis6MTBFQTQwMDAyNTI3MDAwNDAwMDcyMUMwMDIwMDI4MjEzNjI2MDAwMkU1Cis6MTBFQTUwMDAwRTAwMEY1NTAwMDAwMDAwOEZCRjAwMjQ4RkI0MDAyMDZGCis6MTBFQTYwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDRDCis6MTBFQTcwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjgzQzAyMEJGRjI2Cis6MTBFQTgwMDAwMEU0MTgyNDM0NUZGRkZGMDNFM0M4MkI1MzIwRkY2NzIzCis6MTBFQTkwMDAzNjExMDAwMTNDMDYwODAwOENDNjAwMkMzNjExMDAwNTFBCis6MTBFQUEwMDAyNEQwMDAwMTNDMDEwODAwQUMzMDAwMkMwQTAwMTA1REFECis6MTBFQUIwMDAzMEU4MDEwMDBBMDAxMDUyMjQxMDAwMjAwMjQwMjgyMUYyCis6MTBFQUMwMDAzQzEyMDgwMDhFNTIwMEQ4MjQwNDAwODAyNjREMDAwMTFDCis6MTBFQUQwMDAzQzAxMDgwMEFDMkQwMEQ4MEUwMDBGNTUyNDA2MDAwM0ExCis6MTBFQUUwMDAwQTAwMTBFODhGQkYwMDI0M0MwODA4MDEyNTA4ODI4MDM2Cis6MTBFQUYwMDAwQTAwMTA3QzNDMDk4MDAwMEEwMDEwQzUwMDAwNDgyMTczCis6MTBFQjAwMDAwRTAwMEZCQzAwMDAwMDAwMEEwMDEwNDk4Rjg3MDAwMEIzCis6MTBFQjEwMDAxNUEwRkY1MzNDMEEwMDAxMjY0NTAwMDQzMEFBRkZGRjYwCis6MTBFQjIwMDAzNjI2MDAwMjNDMDM4MDAwOEM3MjAxQjgwNjQwRkZGRUNFCis6MTBFQjMwMDA4Rjg1MDAwODM0NjkwMTgwQUQyMDAwMDAxMEEwMDBBRjZGCis6MTBFQjQwMDAzQzA0ODAwMDI1NEYwMDEyMDBBRjcwMkI1MUMwMDBBQzc4Cis6MTBFQjUwMDAyNDAzMDAwMzk0NzgwMTIwMjQxNDAwMUEzMEYxNDAwMEFCCis6MTBFQjYwMDAzMzEzRkZGRkExMzQwMDBCMTIyMDAwQjYyNjYzRkZGRTEzCis6MTBFQjcwMDAwMEEzQzgyQjU3MjAwMEI0MjQxRkZGRkUzNTA4MDAwMTU2Cis6MTBFQjgwMDBBNTIzMDAxNEFGODgwMDA0M0MxMDgwMDAyNDBDQkZGRkI0Cis6MTBFQjkwMDAwMTBDNDgyNDI0MEIwMDAyMzYwODAxODBBNTBCMDAwQzUwCis6MTBFQkEwMDBBNTBBMDAwRUE1MDYwMDA4QTUwOTAwMjZBNTA3MDAxMDY1Cis6MTBFQkIwMDAzQzA3MTAwMEFFMDcwMUI4MEEwMDEwRTg4RkJGMDAyNDIwCis6MTBFQkMwMDAzQzAzMDgwMDhDNjMwMEQwMkU0NTAwMEMwMDEyMjFDMENECis6MTBFQkQwMDAzODZCMDAwMTJENjIwMDAxMDA0NUY4MjQxN0UwRkY5QTEwCis6MTBFQkUwMDAzMjcwRkZGRjI2NENGRkZDMkQ4NDAwMDQ1NDgwMDA1MDNGCis6MTBFQkYwMDAwMDAwMjAyMTM4NkEwMDAyMkQ0MzAwMDEwMDY1ODAyNEI2Cis6MTBFQzAwMDAxNjAwMDA0QTMyNzBGRkZGMDAwNzZBNDIwMDEyNzAyQkE0Cis6MTBFQzEwMDAwMUFFNDAyNDU1MDAwMDYzMDAwMDIwMjEwMDEyMjFDMEY1Cis6MTBFQzIwMDAwMjAwMjgyMTBBMDAxMEU1MzYyNjAwMDIzNERGMDAwMjI3Cis6MTBFQzMwMDAwMjgwMjAyMTMzRTZGRkZGMEUwMDBGNTUzMEE1RkZGRkI1Cis6MTBFQzQwMDAwQTAwMTBBQzAwMDAyMDIxMjQwNDAxMDAwMjAwMjgyMTQ5Cis6MTBFQzUwMDAwRTAwMEY1NTAyMjAzMDIxMEEwMDEwOTgwMDAwMDAwMDFECis6MTBFQzYwMDA4QzY2NDAwMDMwQ0YwMTAwMTFFMDAwM0QzMEY4MDEwMDFCCis6MTBFQzcwMDAzQzEyMDgwMDhFNTIwMDI0MTMwMDAwMTEzMjM0MDAwNEFDCis6MTBFQzgwMDAzQzFGMEYwMDAwRkZDODI0M0MwNTAyMDAxMzI1MDAwQ0E4Cis6MTBFQzkwMDA4RjhDMDAwQzAyMjAzMDIxMzI2NUZGRkYwMTg5NTgyNDNGCis6MTBFQ0EwMDAwMTY0MTAyMTkwNDkwMDA0MzIzMEZGRkIyNDExRkZGRTYzCis6MTBFQ0IwMDAyNTI3MDAwNDBFMDAwRjU1MDAwNzIxQzAwMjUxOTAyNEEzCis6MTBFQ0MwMDAyNDA0MDAwMTEyNDQwMDUyMzI0MzAwMDExNDYwMDA1ODMxCis6MTBFQ0QwMDAwMjAwMzAyMTMyNEEwMDA0MTE0MDAwMDQ4RjhEMDAwMEYwCis6MTBFQ0UwMDAzMUE4MDgwMDE1MDAwMDVBMzI2NUZGRkYxNjgwRkY1QjRGCis6MTBFQ0YwMDA4RkJGMDAyNDNDMTM4MDAwMzY2NTAxODAzQzA0ODAwMEY3Cis6MTBFRDAwMDA4QzkwMDFCODA2MDBGRkZFMjQwNjIwMDAyNDBGMDAwMkFDCis6MTBFRDEwMDBBNEE2MDAwOEEwQUYwMDBCQTRBMDAwMTAzQzBFMTAwMDk5Cis6MTBFRDIwMDBBQzhFMDFCODBBMDAxMEU4OEZCRjAwMjQwMDAwMjAyMTNCCis6MTBFRDMwMDAwMjAwMjgyMTBBMDAxMEU1MzYyNjAwMDIxMTQwRkVFOUYzCis6MTBFRDQwMDAwMDAwQTAyMTk1MkUwMTEwOTUwRDAwMDIzMUM4RkZGRjkzCis6MTBFRDUwMDA1MUE4RkVFNDAwMTJBMUMwMEEwMDEwOEI4RjkyMDAxQzgzCis6MTBFRDYwMDAzQzA1MDgwMDhDQTUwMDI0MzBCODAwMDE1MzAwRkYzQjhGCis6MTBFRDcwMDA4RkJGMDAyNDMyNjVGRkZGMzYyNjAwMDIwMDAwMjAyMUVECis6MTBFRDgwMDAwRTAwMEY1NTAwMDAwMDAwMEEwMDEwRTg4RkJGMDAyNDlECis6MTBFRDkwMDAzNjI2MDAwMjBFMDAwRjU1MjQwNDAwODAwQTAwMTBFOEY5Cis6MTBFREEwMDA4RkJGMDAyNDAyMDAyODIxMEUwMDBGNTUzMjI2RkZGQkUyCis6MTBFREIwMDAwQTAwMTE1OTAwMTIyMUMwOTEwMzAwMDEyNDAyMDAwMTMwCis6MTBFREMwMDAxMDYyRkVFQTI0MDQwMDAxMjQxMDAwMDIxNDcwRkVDNTQzCis6MTBFREQwMDAwMDAwQTAyMTMwRTMwMDQwMTA2MEZFQzM4RjkyMDAxQ0IxCis6MTBFREUwMDA5NTJCMDExMDk1MDkwMDAyMzE2N0ZGRkYxMTI3RkVFMDA2Cis6MTBFREYwMDA4RkJGMDAyNDBBMDAxMDhCMDAwMDAwMDAyNDAzMDAwM0QyCis6MTBFRTAwMDAzNDgyMDE4MEEwNDMwMDBCMEEwMDExMzQzQzEwODAwMEMyCis6MTBFRTEwMDAzMjE0MDAwNDE2ODAwMDAzMzI2NUZGRkYzNjEyMDAwMjMwCis6MTBFRTIwMDAzMjUwRkZGRjAyMDAzMDIxMEEwMDExQjEwMDAwMjAyMTAyCis6MTBFRTMwMDAwMDAwMjAyMTBFMDAwRjU1MzI2NUZGRkYwQTAwMTE4NkU5Cis6MTBFRTQwMDAzMjEwRkZGQjI0MUZGRkZFMEEwMDExMzIwMTFGNDAyNDc1Cis6MTBFRTUwMDAwMjAwMzAyMTBFMDAwRjU1MjQwNDAxMDAwQTAwMTE4QzFECis6MTBFRTYwMDAwMDAwMDAwMDI3QkRGRkM4QUZCMDAwMTBBRkJGMDAzNEU2Cis6MTBFRTcwMDAzQzEwNjAwQ0FGQkUwMDMwQUZCNzAwMkNBRkI2MDAyODFFCis6MTBFRTgwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxODgwCis6MTBFRTkwMDBBRkIxMDAxNDhFMEM1MDAwMjQwREZGN0YzQzA1ODAwMEE0Cis6MTBFRUEwMDAwMThENTgyNDM1NkEzODBDMjQwOTAwMDNBRTBBNTAwMDNECis6MTBFRUIwMDBBQ0E5MDAwODNDMDEwODAwQUMyMDAwMjAwRTAwMTc0MzVDCis6MTBFRUMwMDAwMDAwMDAwMDNDMDU2MDE2OENBNzAwMDAzQzA4RkZGRjE2Cis6MTBFRUQwMDAzQzA2MDAxMDM0QzM4MDUxMDBFODIwMjQzQzAyNTM1MzA4Cis6MTBFRUUwMDBBRTAzNTM3QzEwODIwMjYxMzRBMzdDMDA4Qzc0MDA3Q0RFCis6MTBFRUYwMDA4Qzc1MDA3ODNDMTE2MDAwMzYyNDIwMjAzQzA1MDgwMTA4Cis6MTBFRjAwMDAyNEE1ODExNDI0MDYwMDBBM0MxMTgwMDAzQzEzMDAwMjUxCis6MTBFRjEwMDAzQzEyNjAwQ0FGOTUwMDEwQUY5NDAwMTQwRTAwMTVFQzdECis6MTBFRjIwMDAzNjNFMDE4MEFFNTM1M0ZDOEUzMDAwMDAzMjE2MDAwMzkzCis6MTBFRjMwMDAxMkMwRkZGRDMyMTcwMDAxMTZFMDAwNTgzMjA2MDAwMjMxCis6MTBFRjQwMDAxMEMwRkZGOTNDMDQ4MDAwOEM4RjAxNDAyNDEwMDA0MDY5Cis6MTBFRjUwMDBBQzhGMDAyMDhDOTIwMTQ4MDAxMjc2MDIzMUMzMDA3MDAxCis6MTBFRjYwMDAxMDcwMDEzRDJDNjcwMDQxNTBFMDAwMDgyNDA0MDA2MDRGCis6MTBFRjcwMDAyNDE1MDAyMDEwNzUwMDBFM0MwMzQwMDAzQzA3ODAwMDYzCis6MTBFRjgwMDBBQ0UzMDE3ODBBMDAxMjFCMDAwMDAwMDAxNDY0RkZGQkQwCis6MTBFRjkwMDAzQzAzNDAwMDBFMDAxRjVEMDAwMDAwMDAzQzAzNDAwMEU5Cis6MTBFRkEwMDAzQzA3ODAwMEFDRTMwMTc4MEEwMDEyMUIwMDAwMDAwMDVGCis6MTBFRkIwMDA4QzgzMDE0ODI0MTQwMDA0MzQ4NzAxODAwMDAzNEMwMjMwCis6MTBFRkMwMDAzMTI1MDBGRjhDODMwMTQwMTBCNDAxNzEyNEJGRkZGQThBCis6MTBFRkQwMDAyRkY5MDAwNjUzMjAwMDEyM0MwNTgwMDA4Qzg2MDE0NDY2Cis6MTBFRkUwMDAyNDE2MDBGRjMwQTUwMEZGMzBDQjAwRkYzMENBMDBGRjIxCis6MTBFRkYwMDAxMTU2MDFCQzI1NjgwMDA0MjQwMjAwMDkxMEEyMDFBQUQwCis6MTBGMDAwMDAyOEFDMDAwQTExODAwMTk2MjQxMzAwMEEyNDBEMDAwODgwCis6MTBGMDEwMDAxMEFEMDAxNDhGODUwMDE4MDAwODE5QzAzQzA1ODAwMDUxCis6MTBGMDIwMDA4Q0E4MDFCODA1MDBGRkZFMjQxNzAwMDJBQ0UzMDAwMDI1Cis6MTBGMDMwMDBBNEU5MDAwOEEwRjcwMDBCOENCNDAxNDgzQzA5MTAwMEJCCis6MTBGMDQwMDAzQzAzNDAwMEE0RjQwMDEwOENBNDAxNDRBQ0U0MDAyNDcwCis6MTBGMDUwMDAzQzA3ODAwMEFDQTkwMUI4QUNFMzAxNzgwQTAwMTIxQkEwCis6MTBGMDYwMDAwMDAwMDAwMDAwMDY3QTAyMDAwOEE4ODAzQzA0MDgwMUE1Cis6MTBGMDcwMDAyNDg0ODI4MDI0QUUwMDAxMDJBNDkwMjEzMUU1MDBGRkE3Cis6MTBGMDgwMDAyNDEwMDAwMUEyNEYwMDAwMTRCMEZGRTNBRjhFMDAxODVGCis6MTBGMDkwMDAwMDA4MTlDMDBBMDAxMjU4QUY4NTAwMUM4RTM0MDEyOEUwCis6MTBGMEEwMDAzQzAyODAwOEFFMzQwMDIwOEUyNDAxMDQ4RTIzMDEwMDJGCis6MTBGMEIwMDA5NDVGMDA0OEFGODQwMDAwQUY4MzAwMDQzM0Y5RkZGRjgyCis6MTBGMEMwMDAwRTAwMEY0RUFGOTkwMDA4M0MxODA4MDA4RjE4MDBDMEMyCis6MTBGMEQwMDAxMzAwMDAyNDhGODcwMDAwM0MwNzA4MDA4Q0U3MDBDNDYxCis6MTBGMEUwMDAyNEU2MDAwMTNDMDEwODAwQUMyNjAwQzQzQzAzODAwMDdCCis6MTBGMEYwMDA4QzY0MDEyNDNDMDc2MDIwQUNFNDAwMTQwMDAwMDAwMDk0Cis6MTBGMTAwMDAzQzA2ODAwMDNDMTU0MDAwQUNENTAxMzgwMDAwMDAwMEYyCis6MTBGMTEwMDA1MjgwRkY4QjMyMDYwMDAyMjY4QzAxNDAyNjhEMDA4MDMzCis6MTBGMTIwMDAyNDA5RkY4MDAxODkyODI0MDFBOTk4MjQwMDEzNTk0MDRCCis6MTBGMTMwMDAzMUEyMDA3RjAwMDVCMTQwMzE4QTAwN0YzQzFGMjAwMEQyCis6MTBGMTQwMDAzN0U4MDAwMjAxNjJDMDI1MDJDQUM4MjUwMzI4QTAyNUFECis6MTBGMTUwMDAwMzA4QjgyNUFDRDcwODMwQUNENDA4MzAwQTAwMTIyMTE3Cis6MTBGMTYwMDAzMjA2MDAwMjNDMDUwMDEwMDBFNTQwMjQxNTAwMDBBNjEwCis6MTBGMTcwMDA4RjgzMDAwNDNDMEMwODAwOEQ4QzAwMjAzQzBEODAwMDI3Cis6MTBGMTgwMDA5NUFBMDEwRTI1OEIwMDAxMzBFOTQwMDAzQzAxMDgwMEUyCis6MTBGMTkwMDBBQzJCMDAyMDMxNTVGRkZGMTEyMDAwQjYwMDAwOTAyMTVDCis6MTBGMUEwMDAzQzBGMDAyMDAwRUY3MDI0MTFDMDAwQjMzMEY3ODAwMDQ2Cis6MTBGMUIwMDA4RjkzMDAwNDI0MTZCRkZGMDBGNjM4MjQzNjYzMTAwMDM2Cis6MTBGMUMwMDBBRjg3MDAwMDMwRTIyMDAwMTA0MDAwQjYyNDA1RkZCRkVBCis6MTBGMUQwMDAzQzA4MDAwNDAwRTgzMDI0MTBDMDAwMDIwMDY1MTAyNDQwCis6MTBGMUUwMDAzNDYyMDA0MDMwRTkwMTAwMTEyMDAwMEVBRjgyMDAwNEJCCis6MTBGMUYwMDAzQzBCMDAyMDAwRUI1MDI0MTE0MDAwMDQzQzBEMDAwNEE3Cis6MTBGMjAwMDAwMEVENjAyNDExODAwMTM5MDAwMDAwMDA5NjM3MDExRUQ2Cis6MTBGMjEwMDA5NjM2MDExQzMyRUZGRkZGMDAxNjlDMDAwMUYzNzAyNUFCCis6MTBGMjIwMDBBRjhFMDAwQzk2MzkwMTBDOEUyNDQwMDAzNDE4RkZGRjdECis6MTBGMjMwMDAxMDk4MDBDQTMzMjVGRkZGMzA5RjAxMDA1N0UwMDAwMUZFCis6MTBGMjQwMDAyNDEyMDAxMDMwRTMxMDAwMTA2MDAwMTMzNjUzMDAwMTQ4Cis6MTBGMjUwMDAzMEU0MDAyMDE0ODAwMDBBM0MwNjEwMDAwMEU2MTAyNDcwCis6MTBGMjYwMDAxMDQwMDAwRDNDMEMwQzAwM0MwQjBCRkYwMEVDNTAyNDNDCis6MTBGMjcwMDAzNTY5RkZGRjAxMkE0MDJCMTEwMDAwMDgzMEVFMDEwMDI0Cis6MTBGMjgwMDAzQzBEMDgwMDhEQUQwMDJDMzY1MzAwMDUyNUIyMDAwMTYxCis6MTBGMjkwMDAzQzAxMDgwMEFDMzIwMDJDMzBFRTAxMDAxNUMwMDAwQjIwCis6MTBGMkEwMDAzQzA2MDAwMThGODgwMDA0MzEwRjQwMDA1NUUwMDAwODQzCis6MTBGMkIwMDAwMEU2MjgyNDNDMTgxRjAxMDBGOEI4MjQzQzE2MTAwMDcyCis6MTBGMkMwMDA1MkY2MDEwRTMwQjkwMjAwM0MwNjAwMDEwMEU2MjgyNDg3Cis6MTBGMkQwMDAxNEEwMDBBNDNDMUYxMDAwMDBGRjIwMjQwMDAwNDAyMUM3Cis6MTBGMkUwMDAxMDgwMDAwNzAwMDBBODIxMDAwNzVFMDIzMTc1MDAwRkEyCis6MTBGMkYwMDAwMDE1NTA4MDNDMDIwODAxMjQ0MjgyODAwMTQyNDAyMUQ2Cis6MTBGMzAwMDA4RjhDMDAxODExODAwMDY5MDI2MDkwMjExNDgwMDAwMzI2Cis6MTBGMzEwMDAzQzA5ODAwMDNDMDgwODAxMjUwODgyODA5NTMyMDEwRUQ2Cis6MTBGMzIwMDA5MTAzMDAwMDAyNjAzMDIxMzI0NEZGRkYyNDg1MDAwNDc1Cis6MTBGMzMwMDAxMDYwMDAwODAwMDBCODIxMjQwRDAwMDMxMDZEMDEyMkE4Cis6MTBGMzQwMDAyNDE2MDAwMjkxMTcwMDAxMTJGNjAwMjYzMEY4MDA0MDQyCis6MTBGMzUwMDAwMDE1QjlDMDhGODIwMDFDNTA0MDAwMDEzNjY2MDA0MDg1Cis6MTBGMzYwMDAzQzE2ODAwMDhFQ0E0MDAwMzE1MzAxMDAxMjYwMDBDNzc1Cis6MTBGMzcwMDAzMEQ1MDAwNDNDMEIwODAwOEQ2QjAwMjQzMEQzRkZGQjFDCis6MTBGMzgwMDAzMTY2MDAwNDE0QzAwMTBBMzBCMkZGRkY1NkEwMDAwMTJDCis6MTBGMzkwMDAzNjczMDAwNDAyRTAyMDIxMDI0MDI4MjEwRTAwMEY1NUEwCis6MTBGM0EwMDAwMjYwMzAyMTE2QTAwMDBEMDAwMDIwMjEzNkM1MDE4MDJBCis6MTBGM0IwMDAzQzA0ODAwMDhDOEMwMUI4MDU4MEZGRkUyNDBEMjAwMEU5Cis6MTBGM0MwMDAyNDEyMDAwMkE0QUQwMDA4QTBCMjAwMEJBNEEwMDAxMEZCCis6MTBGM0QwMDAzQzA1MTAwMEFDODUwMUI4MDAwMDIwMjEwQTAwMTM1RjM1Cis6MTBGM0UwMDAwMDgwMTAyMTEzMDBGRkRCMDAwMEI4MjE5NTNGMDExMEMxCis6MTBGM0YwMDA5NTE5MDAwMjMzRThGRkZGNTMyOEZGRDYwMDE1QjlDMDY2Cis6MTBGNDAwMDAwQTAwMTMyNzhGODIwMDFDMjQxM0JGRkYwMDczNjgyNDk3Cis6MTBGNDEwMDAxMUEwMDAwNzI0MEU4N0ZGMDA2RTQ4MjQxNTIwMDAwQTYzCis6MTBGNDIwMDAzQzBGMDA2MDAwRUY5MDI0MTI0MDAwMDcwMDAwMDAwMDM1Cis6MTBGNDMwMDAwRTAwMEQzNDAwMDAwMDAwMTA0MEZGMzIzQzA2ODAwMDNBCis6MTBGNDQwMDAwQTAwMTI4RDNDMDM4MDAwMEUwMDE0QzkwMDAwMDAwMDY5Cis6MTBGNDUwMDAwQTAwMTM1RjAwMDAwMDAwMEUwMDE0RUYwMDAwMDAwMDFGCis6MTBGNDYwMDAzQzAzNDAwMDNDMDc4MDAwQUNFMzAxNzgwQTAwMTIxQjFCCis6MTBGNDcwMDAwMDAwMDAwMDMwRjc4MDAwMTJFMEZGNTI4RjgzMDAwNDhDCis6MTBGNDgwMDAzQzE5MDAyMDAwRjlDMDI0MTMwMEZGNEU4RjlGMDAwNDk4Cis6MTBGNDkwMDAzQzA0RkZGRjM0ODM3RkZGMDBFMzM4MjQwQTAwMTJDMURECis6MTBGNEEwMDAzN0UzODAwMDBBMDAxMkNBMDA2NTEwMjQzQzA0MDgwMEZCCis6MTBGNEIwMDA4Qzg0MDAzODE0ODAwMDAyMjQ4OUZGRkYwMDAwNDgyMTVBCis6MTBGNEMwMDAzQzAzODAwMDk0NkYwMTBFMzFFRUZGRkYxMTAwMDBFQjUyCis6MTBGNEQwMDAyNUQ2MDAwNDNDMDMwODAwOEM2MzAwMzAxMDYwMDAwQTRECis6MTBGNEUwMDAzMEVBMDEwMDhGOTgwMDA0MzMxNzQwMDAxMkUwMDAwNjU0Cis6MTBGNEYwMDAzQzAyMEYwMDAwRTJGODI0M0MxOTAxMDAwMzNGNDAyQkJFCis6MTBGNTAwMDAxMTAwMDBENTMyQzVGRkZGMTE0MDAwMzAzQzBDMEYwMDQ4Cis6MTBGNTEwMDAwMEVDNTgyNDNDMDYwMjAwMTE2NjAwMkMwMDAwMDAwMDlDCis6MTBGNTIwMDA4Rjk1MDAwQzNDMEQwODAwMjVBRDAwMzgzMkQyRkZGRjRFCis6MTBGNTMwMDAwMkE5MjgyNDAwQURCMDIxOTJDNzAwMDQyNEU5MDAwNEU4Cis6MTBGNTQwMDAwMDA5MjFDMDAyNDAyODIxMzY2NjAwMDIwRTAwMEY1NTM2Cis6MTBGNTUwMDAwMDAwMDAwMDBBMDAxMzVGMDAwMDEwMjEwQTAwMTJFMjAwCis6MTBGNTYwMDAyNDEyMDAyMDNDMTkwODAwOEYzOTAwRDgwMkEwMjgyMTVECis6MTBGNTcwMDAyNDA0MDA4MDI3MzgwMDAxM0MwMTA4MDBBQzM4MDBEODgyCis6MTBGNTgwMDAwRTAwMEY1NTI0MDYwMDAzMEEwMDEzNUYwMDAwMTAyMTJGCis6MTBGNTkwMDA4Qzg0MDE0MDAwRTAyODIxM0MwMzgwMDA4Qzc3MDFCODc2Cis6MTBGNUEwMDAwNkUwRkZGRTI0MDgwMDFDQUNBNDAwMDBBMEE4MDAwQjhECis6MTBGNUIwMDAzQzE4MTAwMEFDNzgwMUI4M0MwMzQwMDAzQzA3ODAwMEM4Cis6MTBGNUMwMDBBQ0UzMDE3ODBBMDAxMjFCMDAwMDAwMDAzQzAzMDgwMEI1Cis6MTBGNUQwMDA4QzYzMDBEMDJFQTUwMDBDMDAxNTIxQzAzODZGMDAwMUVGCis6MTBGNUUwMDAyREYyMDAwMTAyNDU3MDI0MTVDMEZGRDYzMkQyRkZGRjc0Cis6MTBGNUYwMDAyNkI3RkZGQzJFRTQwMDA0MTQ4MDAwMDgwMDAwMjAyMTQwCis6MTBGNjAwMDAzODY4MDAwMjJEMTgwMDAxMDMwNTE4MjQxMDYwMDAwNjU4Cis6MTBGNjEwMDAwMDA3RkE0MjMyRDJGRkZGMDAwMDIwMjEwMjQwMjgyMUQ5Cis6MTBGNjIwMDAwQTAwMTNBNDM2NjYwMDAyMDAxNTEwMkIwM0UyQzgyNDVBCis6MTBGNjMwMDAxNzIwMDAwNTMyRDJGRkZGMDAxNTIxQzAwMjQwMjgyMTBCCis6MTBGNjQwMDAwQTAwMTNBNDM2NjYwMDAyMDAwMDIwMjEwMjQwMjgyMThGCis6MTBGNjUwMDAwRTAwMEY1NTMyNjZGRkZCMEEwMDEzRTAwMDE1MjFDMEIzCis6MTBGNjYwMDAxMEIzMDA2QTAwMDg2MDgwMjQwNjAwMEIxNEE2RkU2QjJECis6MTBGNjcwMDAwMDA4MTlDMDAwMDgyODgwM0MxNTA4MDEyNkI1ODI4MEMyCis6MTBGNjgwMDAwMEI1MzAyMTBBMDAxMjU4QTBDMDAwMDEzNEQ1MDAwMjk0Cis6MTBGNjkwMDAwMkUwMjAyMTMwQTVGRkZGMEUwMDBGNTUzMkE2RkZGRjJDCis6MTBGNkEwMDAwQTAwMTM0ODAwMDAyMDIxMDAwOEI4ODAzQzAzMDgwMTJDCis6MTBGNkIwMDAyNDYzODI4MDAyRTMxMDIxOTA1NDAwMDAxMjgwRkU1N0UwCis6MTBGNkMwMDAwMDA4MTlDMEEwNDAwMDAwOEY5OTAwMTgyNzM4RkZGRkRDCis6MTBGNkQwMDAxNzAwRkU1MkFGOTgwMDE4MDAwODE5QzAwQTAwMTI1ODBGCis6MTBGNkUwMDBBRjgwMDAxQzBBMDAxMjRGMjQwODAwMDMwRTAwMEZCQzVDCis6MTBGNkYwMDAwMDAwMDAwMDBBMDAxMkRBOEY4NzAwMDAxNzIwRkVGM0Q2Cis6MTBGNzAwMDAzQzA2MDAwMTI2QkYwMDA0MzNFNUZGRkYzNjY2MDAwMjE5Cis6MTBGNzEwMDAzQzAzODAwMDhDNzUwMUI4MDZBMEZGRkU4Rjg5MDAwOEFECis6MTBGNzIwMDAzQzA0ODAwMDM0OTMwMTgwQUU2MDAwMDAxMTIwMDA5OUY5Cis6MTBGNzMwMDAyNDBGMDAwMzI0QUEwMDEyMDEyQTEwMkIxMDQwMDA5NTY4Cis6MTBGNzQwMDAwMDAwMDAwMDk0NkQwMTIwM0MxMjgwMDAyNDAzMDAxQTg4Cis6MTBGNzUwMDAzMUFDRkZGRjM2NEEwMTgwMzBFQjQwMDBBMTQzMDAwQjgzCis6MTBGNzYwMDAxMTYwMDA4RjI1ODNGRkZFMDEyMzcwMkIxNUMwMDA4REQzCis6MTBGNzcwMDAyNDA5RkZGRTM1MDgwMDAxQTU0MzAwMTRBRjg4MDAwNEVBCis6MTBGNzgwMDAyNDE3QkZGRjAxMTdCMDI0MjQwODAwMDJBN0M4MDAwQ0VCCis6MTBGNzkwMDBBN0M1MDAwRUE3QzYwMDA4QTdENjAwMjZBN0M3MDAxMDU5Cis6MTBGN0EwMDAzQzA3MTAwMEFFMjcwMUI4MEEwMDEzNUYwMDAwMTAyMUNCCis6MTBGN0IwMDAyNDA0MDEwMDAyNDAyODIxMEUwMDBGNTUwMjYwMzAyMTcwCis6MTBGN0MwMDAwQTAwMTMzNDAwMDAwMDAwOTEwMzAwMDEyNDE1MDAwMTE5Cis6MTBGN0QwMDAxMDc1RkYwMjI0MDQwMDAxMjQwRTAwMDIxNDZFRkVEREU5Cis6MTBGN0UwMDAwMDAwQjgyMTMwRTMwMDQwMTA2MEZFREI4RjgyMDAxQzc3Cis6MTBGN0YwMDA5NTI3MDExMDk1MEYwMDAyMzBFOUZGRkYxMUU5RkYwRTc4Cis6MTBGODAwMDAwMDgwMTAyMTBBMDAxMzI3OEY4MjAwMUMzQzBGMDgwMTgyCis6MTBGODEwMDAyNUVGODI4MDAxOEY3MDIxMDAwNjkyMDJBMUQyMDAwMUEzCis6MTBGODIwMDAzQzFGNjAwMDhGRUQxODIwMjQxMDAwMDEwMTEwOTgwNDg3Cis6MTBGODMwMDAzQzAyMDgwMTI0NDI4MjgyMDFCM0IwMjUwMTgyNTAyMTlBCis6MTBGODQwMDAwMDA2NUMwMjAwMDgxOUMwQTU0QjAwMDBBRkY2MTgyMEE2Cis6MTBGODUwMDAwQTAwMTI1OTNDMDU4MDAwMzY2NjAwMDIwRTAwMEY1NTYyCis6MTBGODYwMDAyNDA0MDA4MDBBMDAxMzVGMDAwMDEwMjE4Q0FFMDAwNDA1Cis6MTBGODcwMDAzQzBGNjAwMDBBMDAxMjBDMDFDRjE4MjE4QzY2NDAwMDdBCis6MTBGODgwMDAzMENBMDEwMDExNDAwMDM3MzBFQjAxMDAzQzE1MDgwMDgwCis6MTBGODkwMDA4RUI1MDAyNDExNjAwMDEzMzI3NzAwMDQzQzBEMEYwMDc4Cis6MTBGOEEwMDAwMEVEMjgyNDNDMEMwMjAwMTBBQzAwMEU4Rjg0MDAwQ0VDCis6MTBGOEIwMDAzQzBGMDgwMDI1RUYwMDM4MDI2MDMwMjEwMDg5OTAyNEI5Cis6MTBGOEMwMDAwMjRGNzAyMTkxQzcwMDA0MzJDNUZGRkYzMjcyRkZGQjY3Cis6MTBGOEQwMDAyNEU5MDAwNDAwMDkyMUMwMEUwMDBGNTUyNDEzRkZGRTg3Cis6MTBGOEUwMDAwMkIzQTgyNDI0MDMwMDAxMTJBMzAwMzAzMkI4MDAwMTlGCis6MTBGOEYwMDAxMzAwMDAwNzMyQTgwMDA0MDI0MDMwMjEwMDAwMjAyMTNDCis6MTBGOTAwMDAwRTAwMEY1NTMyQzVGRkZGMzI1MkZGRkIzMkE4MDAwNDM0Cis6MTBGOTEwMDAxMTAwMDAwNDhGOUYwMDAwMzNGOTA4MDA1NzIwMDAyQkNFCis6MTBGOTIwMDAzMkM1RkZGRjE2RTBGRUM0MDAwMDEwMjEzQzE2ODAwMDI3Cis6MTBGOTMwMDAzNkM0MDE4MDNDMDU4MDAwOENBMjAxQjgwNDQwRkZGRTYzCis6MTBGOTQwMDAyNDBCMjAwMDI0MDYwMDAyQTQ4QjAwMDhBMDg2MDAwQkQ0Cis6MTBGOTUwMDBBNDgwMDAxMDNDMEExMDAwQUNBQTAxQjgwQTAwMTM1RjkyCis6MTBGOTYwMDAwMDAwMTAyMTNDMDUwODAwOENBNTAwMjQzMEFDMDAwMUVCCis6MTBGOTcwMDA1MTgwRkVCMTAwMDAxMDIxMzJDNUZGRkYzNjY2MDAwMjQzCis6MTBGOTgwMDAwMDAwMjAyMTBFMDAwRjU1MDAwMDAwMDAwQTAwMTM1RjQ4Cis6MTBGOTkwMDAwMDAwMTAyMUEzQ0YwMDBCMEEwMDE0MzIyNDE3QkZGRjcwCis6MTBGOUEwMDAyNDA5RkZGRTBBMDAxNDMwMDEwOTQwMjQzMjU1MDAwNEU2Cis6MTBGOUIwMDAxNkEwMDAwMzMyQzVGRkZGMzY1NzAwMDIzMkYyRkZGRkU4Cis6MTBGOUMwMDAwMjQwMzAyMTBBMDAxNEIyMDAwMDIwMjEwMjQwMzAyMTAwCis6MTBGOUQwMDAwRTAwMEY1NTI0MDQwMTAwMEEwMDE0OUEwMDAwMDAwMEQ0Cis6MTBGOUUwMDAzQzAzODAwMDhDNjQwMTAwMzA4MjAwM0UxNDQwMDAwODFCCis6MTBGOUYwMDAwMDAwMDAwMEFDNjAwMDQ4OEM2NjAxMDAzMEM1MDdDMDA0Cis6MTBGQTAwMDAxMEEwMDAwNTAwMDAwMDAwQUM2MDAwNENBQzYwMDA1MDhECis6MTBGQTEwMDAwM0UwMDAwODI0MDIwMDAxQUM2MDAwNTRBQzYwMDA0MDI4Cis6MTBGQTIwMDA4QzY4MDEwMDMxMDczODAwMTBFMEZGRjkwMDAwMDAwMDg5Cis6MTBGQTMwMDAyNDAyMDAwMTAzRTAwMDA4QUM2MDAwNDQzQzAzOTAwMDk1Cis6MTBGQTQwMDAzNDYyMDAwMTAwODIyMDI1M0MwMzgwMDBBQzY0MDAyMDY5Cis6MTBGQTUwMDA4QzY1MDAyMDA0QTBGRkZFMDAwMDAwMDAwM0UwMDAwODA5Cis6MTBGQTYwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDEwMDgzMjAyNTk4Cis6MTBGQTcwMDAwM0UwMDAwOEFDNDQwMDIwMjdCREZGRDhBRkIxMDAxNDVDCis6MTBGQTgwMDAzQzA0ODAwMEFGQkYwMDIwQUZCMzAwMUNBRkIyMDAxODMxCis6MTBGQTkwMDBBRkIwMDAxMDhDOTIwMTQwOEM5MDAxNDgyNDAyMDAwRUZGCis6MTBGQUEwMDAwMDEwOEMwMjMyMjMwMEZGMTA2MjAwNTkwMjA0MjgyNDQ3Cis6MTBGQUIwMDAyODY2MDAwRjEwQzAwMDEzMjg2QTAwMzcyNDA3MDAwNkNDCis6MTBGQUMwMDAxMDY3MDA4RTI4NjgwMDA3NTEwMDAwMkQyNDA0MDAwOUVCCis6MTBGQUQwMDAxMDYwMDA3ODNDMDY4MDAwMjQwOTAwMDExMDY5MDBCMDI1Cis6MTBGQUUwMDAwMDAwMDAwMDAwMDAwMDBEOEZCRjAwMjA4RkIzMDAxQzNECis6MTBGQUYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODFGCis6MTBGQjAwMDAyN0JEMDAyODExNDAwMDU5MjQwRDAwMzgyODZCMDAzNTBFCis6MTBGQjEwMDAxMTYwMDAwNTNDMDU4MDAwMjQwQzAwMUYxNDZDRkZGMUVGCis6MTBGQjIwMDAwMDAwMDAwMDNDMDU4MDAwOENCODAxQjgwNzAwRkZGRTEzCis6MTBGQjMwMDAzNEI5MDE4MEFGMzIwMDAwMjQxRjAwMDEyNDEyMDAwMkZBCis6MTBGQjQwMDAzQzAyMTAwMEFGMjAwMDA0QTczMTAwMDhBMzNGMDAwQUM4Cis6MTBGQjUwMDBBMzMyMDAwQkE3MzAwMDEwQUYyMDAwMjRBRjIwMDAyOEY0Cis6MTBGQjYwMDBBQ0EyMDFCODhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODY5Cis6MTBGQjcwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyOEVCCis6MTBGQjgwMDAxMDY0MDAyMzI0MDUwMDBCMTQ2NUZGRDYzMjE4RkZGRjE0Cis6MTBGQjkwMDAxNzAwMDAyMDNDMDU4MDAwOEY5M0ZFRUM5MjdGMDAwNTRCCis6MTBGQkEwMDAzM0Y5MDAwNDE3MjBGRkNGMDAwMDAwMDAwRTAwMTRFMDFFCis6MTBGQkIwMDAwMjQwMjAyMTkyNjkwMDA1MDI0MDIwMjEzNTI4MDAwNERFCis6MTBGQkMwMDAwRTAwMTRFQUEyNjgwMDA1OTI2NzAwMDUzMEUyMDAwNDA2Cis6MTBGQkQwMDAxNDQwMDAwMjAwMDAwMDAwMDAwMDAwMEQ5MjZCMDAwMEM1Cis6MTBGQkUwMDAyNDA2MDAyMDMxNkEwMEZGMTU0NjAwMEEzQzA1ODAwMDBCCis6MTBGQkYwMDA4Q0E0MDFCODA0ODBGRkZFMzRBRDAxODAyNDBFMDAwNTAyCis6MTBGQzAwMDAzQzBDMTAwMEFEQjIwMDAwQTFBRTAwMEJBQ0FDMDFCOEQyCis6MTBGQzEwMDAzQzA1ODAwMDhDQTMwMUI4MDQ2MEZGRkUzNEFGMDE4MDc2Cis6MTBGQzIwMDAyNDEzMDAwMkFERjIwMDAwQURGMjAwMDRBNUYxMDAwOEJCCis6MTBGQzMwMDBBMUYzMDAwQUExRjMwMDBCQTVGMDAwMTBBREUwMDAyNDMxCis6MTBGQzQwMDA4Q0IxMDE0NDNDMTAxMDAwQURGMTAwMjhBQ0IwMDFCOEZCCis6MTBGQzUwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDJCCis6MTBGQzYwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxMDZERkZBRDI1Cis6MTBGQzcwMDAyNDBFMDA4MDE0NkVGRjlCMDAwMDAwMDAzQzA1ODAwMEY1Cis6MTBGQzgwMDA4Q0EzMDFCODA0NjBGRkZFMzRBRjAxODAyNDEyMDAwMjhGCis6MTBGQzkwMDBBMUYyMDAwQkE1RjEwMDA4QTVGMDAwMTA4Q0IzMDE0NEZGCis6MTBGQ0EwMDAzQzAyMTAwMEE1RjMwMDEyQUNBMjAxQjgwQTAwMTUyQjBCCis6MTBGQ0IwMDA4RkJGMDAyMDhDQzMwMUI4MDQ2MEZGRkUzNEQzMDE4MEU1Cis6MTBGQ0MwMDBBRTcyMDAwMEFFNjAwMDA0MjQxMjAwMDFBNjcxMDAwOEFDCis6MTBGQ0QwMDAyNDExMDAwMkEyNzIwMDBBQTI3MTAwMEJBNjcwMDAxMDhCCis6MTBGQ0UwMDA4Q0QwMDE0NDNDMEYxMDAwQUU3MDAwMjRBRTYwMDAyOEEwCis6MTBGQ0YwMDBBQ0NGMDFCODBBMDAxNTY2OEZCRjAwMjAzQzAzODAwMDFFCis6MTBGRDAwMDA4QzY2MDFCODA0QzBGRkZFMzQ2MjAxODAzQzA2MDgwMTI1Cis6MTBGRDEwMDA5MEM2ODJDMEFDNTIwMDAwMTBDMDAwMDMwMDAwMzgyMTIxCis6MTBGRDIwMDAzQzA3MDgwMThDRTc4MkM4M0MwNTgwMDAzNEFBMDE4MEFBCis6MTBGRDMwMDAyNDA0MDAwMjM0Q0MwMDAxQUM0NzAwMDRBNTUxMDAwOEEzCis6MTBGRDQwMDBBMTRDMDAwQUExNDQwMDBCQTU1MDAwMTA4Q0FCMDE0NDRCCis6MTBGRDUwMDAwMDAwMjAyMTAxNDAyODIxQUQ0QjAwMjQxMEMwMDAwM0U5Cis6MTBGRDYwMDA4RkJGMDAyMDNDMDQwODAxOEM4NDgyQzQ4RkIzMDAxQzI4Cis6MTBGRDcwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzQzBFMTAwMDJECis6MTBGRDgwMDAzQzBEODAwMDI3QkQwMDI4QUNBNDAwMjhBREFFMDFCODEyCis6MTBGRDkwMDAzQzAxMDgwMUEwMjA4MkMwMDNFMDAwMDgwMDAwMDAwMDMwCis6MTBGREEwMDAxMEEwMDAwQjNDMDY4MDAwOEM5ODAxNDQyNDE5MDAwMjJFCis6MTBGREIwMDAzQzAxMDgwMUEwMzk4MkMwM0MwMTA4MDFBQzMyODJDODc0Cis6MTBGREMwMDAzQzAxMDgwMUFDMzg4MkM0MEEwMDE1NjY4RkJGMDAyMEQwCis6MTBGREQwMDA4Q0RGMDFCODA3RTBGRkZFMzRDNzAxODAyNDA5MDAwMjcwCis6MTBGREUwMDBBQ0YyMDAwMEFDRjIwMDA0QTRGMTAwMDhBMEU5MDAwQUEzCis6MTBGREYwMDBBMEU5MDAwQkE0RjAwMDEwQUNFMDAwMjQ4Q0M4MDE0NDgyCis6MTBGRTAwMDAzQzAyMTAwMEFDRTgwMDI4QUNDMjAxQjgwQTAwMTU2NjNDCis6MTBGRTEwMDA4RkJGMDAyMDI3QkRGRkU4QUZCRjAwMTAwRTAwMEY0RUMwCis6MTBGRTIwMDAwMDAwMDAwMDNDMDI4MDAwOEZCRjAwMTAwMDAwMjAyMTc1Cis6MTBGRTMwMDBBQzQwMDE4MDBBMDAxMDEwMjdCRDAwMTgzMDg0RkZGRjdECis6MTBGRTQwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMTVDCis6MTBGRTUwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQkJFCis6MTBGRTYwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwN0QyCis6MTBGRTcwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDlGCis6MTBGRTgwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwOERGCis6MTBGRTkwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMEIzCis6MTBGRUEwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRkE5Cis6MTBGRUIwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDNDCis6MTBGRUMwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRTAwMTRFMDc0Cis6MTBGRUQwMDAwMDgwODAyMTNDMDQ4MDA4MzQ4MzAwODA5MDY1MDAyNUU4Cis6MTBGRUUwMDAwMjAwMjAyMTM0QTIwMDIwMEUwMDE0RUFBMDYyMDAyNUE2Cis6MTBGRUYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMEM5RTVBCis6MTBGRjAwMDAyN0JEMDAxODNDMDM4MDAwMjdCREZGRjgzNDYyMDE4MDQ0Cis6MTBGRjEwMDBBRkEyMDAwMDMwOEMwMEZGMzBBRDAwRkYzMENFMDBGRkZDCis6MTBGRjIwMDAzQzBCODAwMDhENjQwMUI4MDQ4MEZGRkUwMDAwMDAwMERGCis6MTBGRjMwMDA4RkE5MDAwMDhENjgwMTI4OEZBQTAwMDA4RkE3MDAwMEZDCis6MTBGRjQwMDA4RkE0MDAwMDI0MDUwMDAxMjQwMjAwMDJBMDg1MDAwQUZECis6MTBGRjUwMDA4RkEzMDAwMDM1OTk0MDAwM0MwNTEwMDBBMDYyMDAwQjAzCis6MTBGRjYwMDA4RkI4MDAwMDhGQUMwMDAwOEZBNjAwMDA4RkFGMDAwMDlDCis6MTBGRjcwMDAyN0JEMDAwOEFEMjgwMDAwQUQ0MDAwMDRBRDgwMDAyNDdFCis6MTBGRjgwMDBBQ0MwMDAyOEE0RjkwMDA4QTcwRDAwMTBBNUVFMDAxMkNGCis6MTBGRjkwMDAwM0UwMDAwOEFENjUwMUI4M0MwNjgwMDgyN0JERkZFODE2Cis6MTBGRkEwMDAzNEM1MDA4MEFGQkYwMDEwOTBBNzAwMDkyNDAyMDAxMkUyCis6MTBGRkIwMDAzMEUzMDBGRjEwNjIwMDBCMDA4MDMwMjE4Q0E4MDA1MDVECis6MTBGRkMwMDAwMDg4MjAyMzA0ODAwMDA4OEZCRjAwMTA4Q0FBMDAzNDEyCis6MTBGRkQwMDAyNDA0MDAzOTAwMDAyODIxMDBDQTQ4MjMwNTIwMDAwNTE4Cis6MTBGRkUwMDAyNDA2MDAxMjhGQkYwMDEwMjQwMjAwMDEwM0UwMDAwODY1Cis6MTBGRkYwMDAyN0JEMDAxODBFMDAxNjEyMDAwMDAwMDA4RkJGMDAxMDcxCis6MDIwMDAwMDQwMDAxRjkKKzoxMDAwMDAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODI3QkRGRkM4MzcKKzoxMDAwMTAwMEFGQjEwMDJDMDBBMDg4MjFBRkIyMDAzMDI3QTUwMDEwOUUKKzoxMDAwMjAwMDAwODA5MDIxMDIyMDIwMjFBRkJGMDAzNEFGQjAwMDI4MTMKKzoxMDAwMzAwMDBFMDAwQ0E4QUZBMDAwMTAxNDQwMDA5QjNDMDc4MDA4RTUKKzoxMDAwNDAwMDM0RTQwMDgwOTA4NjAwMDgzMEM1MDAwODE0QTAwMDY5RTAKKzoxMDAwNTAwMDhGQTcwMDEwM0MxODgwMDgzNzEwMDA4MDkyMEYwMDA4MEUKKzoxMDAwNjAwMDMxRUUwMDA4MTVDMDAwMDIyNDA4MDAwMzAwMDA0MDIxMDIKKzoxMDAwNzAwMDNDMEI4MDA4OTE2NTAwMTE5MTZBMDAxMjM1NjYwMDgwODIKKzoxMDAwODAwMDhDREYwMDU0MzE0OTAwRkYwMTI4MjAyMTMwQTMwMEZGRkMKKzoxMDAwOTAwMDAwMDQxMDgwMDA2MjI4MjEwMEJGQzgyQjEzMjAwMDA4MzQKKzoxMDAwQTAwMDAwMDAwMDAwOTREMDAwNUM4Q0NGMDA1NDMyMERGRkZGQTQKKzoxMDAwQjAwMDAxRTU3MDIzMDFBRTYwMkIxMTgwMDA5NDAwMDAwMDAwNjgKKzoxMDAwQzAwMDk0RDkwMDVDMzMyM0ZGRkYzMEZGMDAwNDEzRTAwMDc0NzkKKzoxMDAwRDAwMDAwMDgzMDgwOEZBODAwMUMwMDY4MTAyQjUwNDAwMDRGOTMKKzoxMDAwRTAwMDMwRTMwMDA0MDA2NjEwMjMyQzQ2MDA4MDEwQzAwMDAyOUMKKzoxMDAwRjAwMDAwNDA4MDIxMjQxMDAwODAwRTAwMTRFMDAyNDAyMDIxRTYKKzoxMDAxMDAwMDNDMDM4MDA4MzQ2NjAwODAyNDA3MDAwMUFDQzcwMDBDNjMKKzoxMDAxMTAwMDkwQzgwMDA4MDAxMDY4NDAzNDY3MDEwMDMxMUYwMDdGNUMKKzoxMDAxMjAwMEEwREYwMDA4OEUzOTAwMDQyNzM4MDAwMUFDRDgwMDMwNjkKKzoxMDAxMzAwMEE0RDAwMDVDOENDRjAwM0M5NjMwMDAwRTAxRjA3MDIxMDIKKzoxMDAxNDAwMEFDQ0UwMDIwOENDQzAwM0MwMThENTgyMUFDQ0IwMDFDRTcKKzoxMDAxNTAwMDhFMkEwMDA0QUNFQTAwMDA4RTI5MDAwOEFDRTkwMDA0RjUKKzoxMDAxNjAwMDhGQTUwMDEwMzBBNDAwMDg1NDgwMDAzMjkzQTYwMDIwMTAKKzoxMDAxNzAwMEEwQzAwMDRFOTBDOTAwNEUyNDAyRkZERjNDMTg4MDA4NEEKKzoxMDAxODAwMEEwRTkwMDA4OTBDNTAwMDgzNzBEMDA4MDI0MEEwMDUwM0YKKzoxMDAxOTAwMDAwQTIyMDI0QTBDNDAwMDg4RTM5MDAwOEFEQjkwMDM4QTAKKzoxMDAxQTAwMDhGMEYwMDE0OERCMDAwMzAwMUYwNzAyMUFEQUUwMDM0MUYKKzoxMDAxQjAwMDkxQUMwMDAwMzE4QjAwRkYxMTZBMDAyQzI2NDUwMTAwMzQKKzoxMDAxQzAwMDBFMDAxNEVBMDI0MDIwMjEyNDA0MDAzODAwMDAyODIxRjcKKzoxMDAxRDAwMDBFMDAxNjEyMjQwNjAwMEE4RkJGMDAzNDhGQjIwMDMwQzIKKzoxMDAxRTAwMDhGQjEwMDJDOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4MkEKKzoxMDAxRjAwMDI3QkQwMDM4MzBFODAxMDAxMTAwMDAzRDhGQTMwMDE0MzYKKzoxMDAyMDAwMDhDOEEwMDU4MDA2QTQ4MjMwNTIwRkY5MzNDMTg4MDA4MTgKKzoxMDAyMTAwMEFDODMwMDU4MEEwMDE2NjY4RkE3MDAxMDI0MDcwMjE4NDYKKzoxMDAyMjAwMDEwNjBGRkIxMDBFNjEwMjM4RkEyMDAxQzBBMDAxNjhCOUQKKzoxMDAyMzAwMDAwNDYxMDIzM0MxODgwMDgzNzBEMDA4MEEwRTYwMDA4MTcKKzoxMDAyNDAwMDhFMzkwMDA4MjQwQTAwNTBBREI5MDAzODhGMEYwMDE0MTEKKzoxMDAyNTAwMDhEQjAwMDMwMDFGMDcwMjFBREFFMDAzNDkxQUMwMDAwRTMKKzoxMDAyNjAwMDMxOEIwMEZGMTU2QUZGRDYyNjQ1MDEwMDI0MDZGRjgwNkEKKzoxMDAyNzAwMDAwQTYxMDI0M0MwOTgwMDBBRDIyMDAyODhFMjcwMDA4MkIKKzoxMDAyODAwMDMwQTMwMDdGM0MwNDgwMEMwMDY0RjgyMUFGRTcwMEQwNkQKKzoxMDAyOTAwMDhFMjgwMDA4QUY5RjAwMjgwQTAwMTZDMUFGRTgwMEQ0REUKKzoxMDAyQTAwMDBBMDAxNjg4MkM2MjAyMTg4RTIzMDAwODNDMDQ4MDA4N0QKKzoxMDAyQjAwMDM0ODIwMDgwQUM0MzAwNTQwMjQwMjAyMTBFMDAxNjAxMUQKKzoxMDAyQzAwMEFDNDAwMDMwMjQwNDAwMzgyNDA1MDA4RDBFMDAxNjEyQzYKKzoxMDAyRDAwMDI0MDYwMDEyOEZCRjAwMzQ4RkIyMDAzMDhGQjEwMDJDODMKKzoxMDAyRTAwMDhGQjAwMDI4MjQwMjAwMDEwM0UwMDAwODI3QkQwMDM4NzkKKzoxMDAyRjAwMEFDODAwMDU4OTA4QzAwMDgyNDBERkZGNzAxOEQ1ODI0MjUKKzoxMDAzMDAwMEEwOEIwMDA4MEEwMDE2NjY4RkE3MDAxMDhDRDgwMDU0MzYKKzoxMDAzMTAwMDBBMDAxNjgzMDMwNTE4MjMyN0JERkZFOEFGQkYwMDEwQUUKKzoxMDAzMjAwMDkwQTYwMDBEMzBDNzAwMTAxMEUwMDAwQzAwODA0MDIxQTYKKzoxMDAzMzAwMDNDMDI4MDA4OEM0NDAwMDQ4Q0EzMDAwODEwNjQwMDA4NzAKKzoxMDAzNDAwMDMwQzkwMDA0MzBDNTAwMDQxMEEwMDAxQzhGQkYwMDEwOEQKKzoxMDAzNTAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODMwQzkwMDA0OTIKKzoxMDAzNjAwMDExMjAwMDEwMzBDQjAwMTIxMEUwRkZGOThGQkYwMDEwRjkKKzoxMDAzNzAwMDNDMDg4MDA4OENBNzAwMDg4RDA2MDAwNDE0RTZGRkY1RjEKKzoxMDAzODAwMDI0MDIwMDAxMjQwNDAwMzgyNDA1MDA4RDBFMDAxNjEyRkEKKzoxMDAzOTAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4QjEKKzoxMDAzQTAwMDI3QkQwMDE4MjQwQTAwMTIxNTZBRkZFOThGQkYwMDEwNEMKKzoxMDAzQjAwMDAxMDAyMDIxMEEwMDE2NTQyN0JEMDAxODAwMDAyMDIxNEEKKzoxMDAzQzAwMDBBMDAwRDFBMjdCRDAwMTgzQzA1MDgwMDI0QTU1RDUwNDEKKzoxMDAzRDAwMDNDMDQwODAwMjQ4NDdCMTAzQzAyMDgwMDI0NDI1RDU4NDEKKzoxMDAzRTAwMDI0MDMwMDA2M0MwMTA4MDFBQzI1ODJEMDNDMDEwODAxMzEKKzoxMDAzRjAwMEFDMjQ4MkQ0M0MwMTA4MDFBQzIyODJEODNDMDEwODAxMjMKKzoxMDA0MDAwMEEwMjM4MkRDMDNFMDAwMDgwMDAwMDAwMDAzRTAwMDA4RjUKKzoxMDA0MTAwMDI0MDIwMDAxM0MwMjgwMDAzMDg4MDBGRjM0NDcwMTgwNDQKKzoxMDA0MjAwMDNDMDY4MDAwOENDMzAxQjgwNDYwRkZGRTAwMDAwMDAwQTEKKzoxMDA0MzAwMDhDQzUwMTI4MjQxOEZGODAzQzBEODAwQTI0QUYwMTAwRTAKKzoxMDA0NDAwMDAxRjg3MDI0MzFFQzAwN0ZBQ0NFMDAyNDAxOEQyMDIxMTYKKzoxMDA0NTAwMEFDRTUwMDAwOTQ4QjAwREEzNTA5NjAwMDI0MDgwMDAyNDYKKzoxMDA0NjAwMDMxNkFGRkZGQUNFQTAwMDQyNDAyMDAwMUE0RTkwMDA4OUQKKzoxMDA0NzAwMEEwRTgwMDBCQUNFMDAwMjQzQzA3MTAwMEFDQzcwMUI4QkEKKzoxMDA0ODAwMEFGODQwMDI4MDNFMDAwMDhBRjg1MDA1ODhDOTkwMDA0NzEKKzoxMDA0OTAwMDhGOEQwMDI4MjQwOUZGQkYwMzI1QzAyM0FDOTgwMDA0REEKKzoxMDA0QTAwMDkxQUYwMEM0MjQwM0ZGRUYzMUVFMDA3RkExQUUwMEM0ODIKKzoxMDA0QjAwMDhDOEMwMDIwOTM4QjAwMzQ4Rjg2MDAyODM1OEEwMDAyQjQKKzoxMDA0QzAwMEFGOEIwMDRDQTc4MDAwNDhBQzhBMDAyMEE0QzAwMEFDRDEKKzoxMDA0RDAwMDkwQzgwMEM0MDEwOTM4MjRBMEM3MDBDNDhGODQwMDI4MzQKKzoxMDA0RTAwMEFDODAwMERDOTA4NTAwQzQwMEEzMTAyNDAzRTAwMDA4NjkKKzoxMDA0RjAwMEEwODIwMEM0M0MwMjgwMDAzNDQ1MDE4MDNDMDQ4MDAwOUUKKzoxMDA1MDAwMDhDODMwMUI4MDQ2MEZGRkU4Rjg5MDA1ODI0MDc2MDgzNDQKKzoxMDA1MTAwMDI0MDYwMDAyQUNBOTAwMDA4Qzg4MDEyNEFDQTgwMDA0QzkKKzoxMDA1MjAwMEE0QTcwMDA4QTBBNjAwMEIzQzA1MTAwMDAzRTAwMDA4RUIKKzoxMDA1MzAwMEFDODUwMUI4OTM4ODAwMzQ4Rjg5MDA0QzhGODIwMDI4RTUKKzoxMDA1NDAwMDMwQzYwMEZGMDEwOTM4MjMzMEU5MDBGRjAxMjIxODIxREQKKzoxMDA1NTAwMDMwQTUwMEZGMjQ2ODAwNzgxMEMwMDAwMjAxMjQzODIxNzMKKzoxMDA1NjAwMDAwODAzODIxMzBFNDAwMDMxNDgwMDAwMzMwQUEwMDAzMjcKKzoxMDA1NzAwMDExNDAwMDBEMzEyQjAwMDMxMEEwMDAwOTAwMDAxMDIxRDQKKzoxMDA1ODAwMDkwRUQwMDAwMjQ0RTAwMDEzMUMyMDBGRjAwNDU2MDJCQjkKKzoxMDA1OTAwMEExMEQwMDAwMjRFNzAwMDExNTgwRkZGOTI1MDgwMDAxRTYKKzoxMDA1QTAwMDAzRTAwMDA4MDAwMDAwMDAxNTYwRkZGMzAwMDAwMDAwRjkKKzoxMDA1QjAwMDEwQTBGRkZCMDAwMDEwMjE4Q0Y4MDAwMDI0NTkwMDA0NUIKKzoxMDA1QzAwMDMzMjIwMEZGMDA0NTc4MkJBRDE4MDAwMDI0RTcwMDA0MUIKKzoxMDA1RDAwMDE1RTBGRkY5MjUwODAwMDQwM0UwMDAwODAwMDAwMDAwMTIKKzoxMDA1RTAwMDkzODUwMDM0OTM4ODAwNDQ4Rjg3MDA0QzAwMDQzMjAwQzgKKzoxMDA1RjAwMDMxMDMwMDdGMDBFNTEwMkIzMEM0N0YwMDEwNDAwMDBGNTYKKzoxMDA2MDAwMDAwNjQyODI1OEY4NDAwMjgzQzA5ODAwMDhDOEEwMERDNDcKKzoxMDA2MTAwMEFEMkEwMEE0M0MwMzgwMDAwMEEzNTgyNUFDNkIwMEEwQzkKKzoxMDA2MjAwMDhDNkMwMEEwMDU4MEZGRkUwMDAwMDAwMDhDNkQwMEFDMEIKKzoxMDA2MzAwMEFDOEQwMERDMDNFMDAwMDg4QzYyMDBBODBBMDAxN0Q2MkQKKzoxMDA2NDAwMDhGODQwMDI4OTM4ODAwNDUzQzAyODAwMDAwODA1MDIxNjAKKzoxMDA2NTAwMDMxMDMwMEZFQTM4MzAwNDUzMEFCRkZGRjMwQ0MwMEZGMjkKKzoxMDA2NjAwMDMwRTdGRkZGMzQ0ODAxODAzQzA5ODAwMDhEMjQwMUI4NDkKKzoxMDA2NzAwMDA0ODBGRkZFOEY4RDAwNTgyNDE4MDAxNkFEMEQwMDAwNzkKKzoxMDA2ODAwMDhEMjIwMTI0OEY4RDAwMjhBRDAyMDAwNDhENTkwMDIwOTkKKzoxMDA2OTAwMEE1MDcwMDA4MjQwMjAxQjRBMTE5MDAwQUExMTgwMDBCNDMKKzoxMDA2QTAwMDk1MkYwMTIwOEQ0RTAwMDg4RDQ3MDAwNDk3ODMwMDQ4NDgKKzoxMDA2QjAwMDhENTkwMDI0MDFDRjMwMjEwMEM3MjgyMTAwQTMyMDIzMTkKKzoxMDA2QzAwMDI0MThGRkZGQTUwNDAwMENBNTBCMDAwRUE1MDIwMDEwQzYKKzoxMDA2RDAwMEE1MEMwMDEyQUQxOTAwMThBRDE4MDAyNDk1QUYwMEQ4NzQKKzoxMDA2RTAwMDNDMEIxMDAwMjQwN0ZGRjczMUVFRkZGRkFEMEUwMDI4OTIKKzoxMDA2RjAwMDhEQUMwMDc0QUQwQzAwMkNBRDJCMDFCODhENDYwMDIwRTQKKzoxMDA3MDAwMDAwQzcyODI0MDNFMDAwMDhBRDQ1MDAyMDhGODgwMDI4OUEKKzoxMDA3MTAwMDAwODA1ODIxMzBFN0ZGRkY5MTA5MDBDNjNDMDI4MDAwQUQKKzoxMDA3MjAwMDMwQTVGRkZGMzEyNDAwRkYwMDA0MUEwMDAwNjc1MDI1QTgKKzoxMDA3MzAwMDMwQzYwMEZGMzQ0NzAxODAzQzA5ODAwMDhEMkMwMUI4OTEKKzoxMDA3NDAwMDA1ODBGRkZFOEY4MjAwNTgyNDBGMDAxN0FDRTIwMDAwRTYKKzoxMDA3NTAwMDhEMzkwMTI0QUNGOTAwMDQ4RDc4MDAyMEE0RUEwMDA4NEEKKzoxMDA3NjAwMDI0MTkwMUI0QTBGODAwMEFBMEVGMDAwQjk1MjMwMTIwODIKKzoxMDA3NzAwMDhENkUwMDA4OEQ2RDAwMDQ5Nzg0MDA0ODAxQzM1MDIxRTAKKzoxMDA3ODAwMDAxNEQ2MDIxMDE4NDEwMjNBNEUyMDAwQ0E0RTUwMDBFQjkKKzoxMDA3OTAwMEE0RjkwMDEwQTRFNjAwMTJBQ0UwMDAxNDhENzgwMDI0NDcKKzoxMDA3QTAwMDI0MERGRkZGQUNGODAwMTg4RDBGMDA2Q0FDRUYwMDFDOUYKKzoxMDA3QjAwMDhEMEUwMDY4M0MwRjEwMDBBQ0VFMDAyMEFDRUQwMDI0NjQKKzoxMDA3QzAwMDk1MEEwMEFFMjQwREZGRjczMTQ2RkZGRkFDRTYwMDI4ODYKKzoxMDA3RDAwMDk1MEMwMDcwOTUwNDAwNzIzMTgzN0ZGRjAwMDNDQTAwRkUKKzoxMDA3RTAwMDMwODJGRkZGMDMyMkMwMjFBQ0Y4MDAyQ0FEMkYwMUI4RUUKKzoxMDA3RjAwMDk1MEUwMDcyOEQ2QTAwMjAwMEFFMzAyMTAxNEQyODI0MzQKKzoxMDA4MDAwMEE1MDYwMDcyMDNFMDAwMDhBRDY1MDAyMDNDMDI4MDAwRjAKKzoxMDA4MTAwMDM0NDYwMTgwM0MwNTgwMDA4Q0EzMDFCODA0NjBGRkZFRDMKKzoxMDA4MjAwMDI0MDkwMDE4QUNDNDAwMDBBMEM5MDAwQjhGODgwMDI4NjAKKzoxMDA4MzAwMDNDMDQxMDAwOTUwNzAwQUVBNEM3MDAxMEFDQzAwMDMwMDcKKzoxMDA4NDAwMDAzRTAwMDA4QUNBNDAxQjgzQzAyODAwMDM0NDUwMTgwRkMKKzoxMDA4NTAwMDNDMDQ4MDAwOEM4MzAxQjgwNDYwRkZGRThGOEEwMDMwNjYKKzoxMDA4NjAwMDI0MDYwMDE5OTU0OTAwMUMzMTI4RkZGRjAwMDgzOUMwRjMKKzoxMDA4NzAwMEFDQTcwMDAwQTBBNjAwMEIzQzA1MTAwMDAzRTAwMDA4OTgKKzoxMDA4ODAwMEFDODUwMUI4OEY4NzAwMzgwMDgwNDAyMTMwQzQwMEZGNUMKKzoxMDA4OTAwMDNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRThGODkwMDU4REUKKzoxMDA4QTAwMDkzODMwMDU0MzQ5OTYwMDBBQ0E5MDAwMEEwQTMwMDA1MTQKKzoxMDA4QjAwMDhDRTIwMDEwMjQwRjAwMDIyNDAzRkZGN0E0QTIwMDA2MUMKKzoxMDA4QzAwMEE0QjkwMDA4OEQxODAwMjBBMEI4MDAwQUEwQUYwMDBCNDIKKzoxMDA4RDAwMDhDRUUwMDAwQUNBRTAwMTA4Q0VEMDAwNEFDQUQwMDE0NEEKKzoxMDA4RTAwMDhDRUMwMDFDQUNBQzAwMjQ4Q0VCMDAyMEFDQUIwMDI4RTIKKzoxMDA4RjAwMDhDRUEwMDJDM0MwNzEwMDBBQ0FBMDAyQzhEMDkwMDI0QzcKKzoxMDA5MDAwMEFDQTkwMDE4QUNDNzAxQjg4RDA1MDAyMDAwQTMyMDI0QjUKKzoxMDA5MTAwMDAzRTAwMDA4QUQwNDAwMjA5Mzg1MDA1NDI0MDMwMDAxODcKKzoxMDA5MjAwMDI3QkRGRkU4MDBBMzMwMDQyQ0EyMDAyMEFGQjAwMDEwQzgKKzoxMDA5MzAwMEFGQkYwMDE0MDBDMDE4MjExMDQwMDAxMzI0MTBGRkZFQTgKKzoxMDA5NDAwMDNDMDcwODAwOENFNzMxOTAwMEU2MTAyNDNDMDg4MDAwNEEKKzoxMDA5NTAwMDM1MDUwMTgwMTQ0MDAwMDUyNDA2MDA4NDhGODkwMDI4OTUKKzoxMDA5NjAwMDI0MEEwMDA0MjQxMEZGRkZBMTJBMDBFQzBFMDAxODcyRDQKKzoxMDA5NzAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwOTMKKzoxMDA5ODAwMDAzRTAwMDA4MjdCRDAwMTgzQzA2MDgwMDhDQzYzMTk0MUYKKzoxMDA5OTAwMDBBMDAxOEE0MDBDMzEwMjQ4Rjg3MDAzMDI3QkRGRkUwOTEKKzoxMDA5QTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDNjEKKzoxMDA5QjAwMDMwRDAwMEZGOTBFNjAwMEQwMEEwODgyMTAwODA5MDIxM0IKKzoxMDA5QzAwMDMwQzUwMDdGQTBFNTAwMEQ4Rjg1MDAyODhFMjMwMDE4MUMKKzoxMDA5RDAwMDhDQTIwMEMwMTA2MjAwMkUyNDBBMDAwRTBFMDAxODk3OTAKKzoxMDA5RTAwMEEzOEEwMDU0MjQwOUZGRkYxMDQ5MDAyMjI0MDRGRkZGQkEKKzoxMDA5RjAwMDUyMDAwMDIwMDAwMDIwMjE4RTI2MDAwMDNDMEMwMDEwMzgKKzoxMDBBMDAwMDAwQ0M1ODI0MTU2MDAwMzkzQzBFMDAwODAwQ0U2ODI0NDQKKzoxMDBBMTAwMDU1QTAwMDNGMDI0MDIwMjEzQzE4MDAwMjAwRDg4MDI0NEQKKzoxMDBBMjAwMDEyMDAwMDFGM0MwQTAwMDQ4Rjg3MDAzMDhDRTIwMDE0ODMKKzoxMDBBMzAwMDhDRTMwMDEwOENFNTAwMTQwMDQzRjgyMzAzRTVDODJCNzkKKzoxMDBBNDAwMDEzMjAwMDA1MDI0MDIwMjE4RTI0MDAyQzhDRjEwMDEwODAKKzoxMDBBNTAwMDEwOTEwMDMxMDI0MDIwMjEyNDAyMDAxMkEzODIwMDU0OTAKKzoxMDBBNjAwMDBFMDAxODk3MjQxMkZGRkYxMDUyMDAwMjI0MDRGRkZGMEIKKzoxMDBBNzAwMDAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0MUUKKzoxMDBBODAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwNzcKKzoxMDBBOTAwMDkwQTgwMEM0MzUwNDAwMjAwQTAwMThDREEwQTQwMEM0MEEKKzoxMDBBQTAwMDAwQ0E0ODI0MTUyMDAwMEI4RjhCMDAzMDhGOEQwMDMwM0EKKzoxMDBBQjAwMDhEQUMwMDEwMTU4MDAwMEIwMjQwMjAyMThFMkUwMDJDRTIKKzoxMDBBQzAwMDUxQzBGRkVDMDAwMDIwMjEwMjQwMjAyMTBBMDAxOEU4NUMKKzoxMDBBRDAwMDI0MDIwMDE3OEQ2NjAwMTA1MEMwRkZFNjAwMDAyMDIxQTAKKzoxMDBBRTAwMDAyNDAyMDIxMEEwMDE4RTgyNDAyMDAxMTAyNDAyMDIxQkYKKzoxMDBBRjAwMDI0MDIwMDE1MEUwMDE4OTdBMzgyMDA1NDI0MEZGRkZGNTQKKzoxMDBCMDAwMDEwNEZGRkRDMjQwNEZGRkYwQTAwMThENzhFMjYwMDAwRDgKKzoxMDBCMTAwMDBBMDAxOTBFMjQwMjAwMTQzQzA4MDAwNDAwQzgzODI0RkUKKzoxMDBCMjAwMDUwRTBGRkQ0MDAwMDIwMjEwMjQwMjAyMTBBMDAxOEU4RjQKKzoxMDBCMzAwMDI0MDIwMDEzOEY4NjAwMjgyN0JERkZFMEFGQjEwMDE0MDgKKzoxMDBCNDAwMEFGQkYwMDE4QUZCMDAwMTA5MEMzMDBDNDMwQTUwMEZGQzUKKzoxMDBCNTAwMDMwNjIwMDIwMTA0MDAwMDgwMDgwODgyMThDQ0IwMEMwNEIKKzoxMDBCNjAwMDI0MDlGRkRGMjU2QTAwMDFBQ0NBMDBDMDkwQzgwMEM0OTgKKzoxMDBCNzAwMDAxMDkzODI0QTBDNzAwQzQxNEEwMDA0MDNDMEM4MDAwMjgKKzoxMDBCODAwMDhGODQwMDI4OTA4NzAwQzQyNDE4RkZCRjI0MDZGRkVGM0QKKzoxMDBCOTAwMDMwRTMwMDdGQTA4MzAwQzQ5NzlGMDA0ODhGODIwMDRDMDEKKzoxMDBCQTAwMDhGOEQwMDI4MDNFMkM4MjNBNzk5MDA0OEE1QTAwMEFDQjgKKzoxMDBCQjAwMDkxQUYwMEM0MDFGODcwMjRBMUFFMDBDNDhGOEMwMDI4NEUKKzoxMDBCQzAwMEExODAwMEM3OEY4QTAwMjhBNTQwMDA3MkFENDAwMERDREMKKzoxMDBCRDAwMDkxNDUwMEM0MDBBNjU4MjRBMTRCMDBDNDhGOTAwMDI0NjYKKzoxMDBCRTAwMDhGODQwMDRDOTc4NjAwNDgwMjA0MjgyMTEwQzAwMDBGMTMKKzoxMDBCRjAwMEFGODUwMDI0QTM4MDAwNDQzQzA3ODAwMDhFMkMwMDA4QjEKKzoxMDBDMDAwMDk0RUQwMTIwOEUyQjAwMDQwMThENTAyMTAxNEI4MDIxOTkKKzoxMDBDMTAwMDAyMDYyMDIzMzA4NkZGRkYzMEM4MDAwRjM5MDkwMDAxOEIKKzoxMDBDMjAwMDMxMzEwMDAxMTYyMDAwMDlBMzg4MDA0NDkzODYwMDM0NjYKKzoxMDBDMzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwQTcKKzoxMDBDNDAwMEFGODUwMDUwMDNFMDAwMDhBRjg2MDA0QzAwQzg3MDIzNTkKKzoxMDBDNTAwMDhGQkYwMDE4OTM4NjAwMzQ4RkIxMDAxNDhGQjAwMDEwM0UKKzoxMDBDNjAwMDM0RUYwQzAwMDEwRjI4MjEyN0JEMDAyMEFDRUUwMDg0REEKKzoxMDBDNzAwMEFGODUwMDUwMDNFMDAwMDhBRjg2MDA0QzM1OTAwMTgwM0UKKzoxMDBDODAwMDAyMDAyODIxMEUwMDE4NzIyNDA2MDA4MjhGODQwMDI4OUEKKzoxMDBDOTAwMDkwODYwMEM0MzBDNTAwNDA1MEEwRkZCQUEzODAwMDU0MjUKKzoxMDBDQTAwMDhGODUwMDM4M0MwNjgwMDA4Q0NEMDFCODA1QTBGRkZFODIKKzoxMDBDQjAwMDhGODkwMDU4MjQwODYwODIyNDA3MDAwMkFFMDkwMDAwRDIKKzoxMDBDQzAwMEE2MDgwMDA4QTIwNzAwMEI4Q0EzMDAwODNDMEUxMDAwMjkKKzoxMDBDRDAwMEFFMDMwMDEwOENBMjAwMENBRTAyMDAxNDhDQkYwMDE0RjYKKzoxMDBDRTAwMEFFMUYwMDE4OENCOTAwMThBRTE5MDAyNDhDQjgwMDI0NkYKKzoxMDBDRjAwMEFFMTgwMDI4OENBRjAwMjhBRTBGMDAyQ0FDQ0UwMUI4ODcKKzoxMDBEMDAwMDBBMDAxOTMyQTM4MDAwNTQ4RjhBMDAyODI3QkRGRkUwMTMKKzoxMDBEMTAwMEFGQjEwMDE0QUZCMDAwMTA4Rjg4MDA0Q0FGQkYwMDE4MDcKKzoxMDBEMjAwMDkzODkwMDJDOTU0MjAwQUMzMEQxMDBGRjAxMDkxODJCQUIKKzoxMDBEMzAwMDAwODA4MDIxMzBBQzAwRkYzMDQ3RkZGRjAwMDA1ODIxQzkKKzoxMDBENDAwMDE0NjAwMDAzMzEwNjAwRkYwMTIwMzAyMTAxMDk1ODIzRkYKKzoxMDBENTAwMDk3ODMwMDQ4MDA2ODIwMkIxNDgwMDAxQjAwMDAwMDAwQ0YKKzoxMDBENjAwMDEwNjgwMDQzMjQwQTAwMDExMThBMDA0ODM0RTcwODgwMTMKKzoxMDBENzAwMDMxNjVGRkZGMEUwMDE4MTQwMjAwMjAyMTBFMDAxODU0RTgKKzoxMDBEODAwMDhGODQwMDU4OEY4NDAwMjg5NDhEMDA3MDI1QUMwMDAxNUEKKzoxMDBEOTAwMEE0OEMwMDcwOTQ4QjAwNzAzQzA2MDgwMDhDQzYzMTg4Q0YKKzoxMDBEQTAwMDMxNjc3RkZGMTBFNjAwNEYwMDAwMDAwMDAyMDAyMDIxQTUKKzoxMDBEQjAwMDAyMjAyODIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQkYKKzoxMDBEQzAwMDBBMDAxOTFFMjdCRDAwMjA5MTQ0MDBDNDI0MDZGRjgwOUMKKzoxMDBERDAwMDAwODY4ODI1QTE1MTAwQzQ5Nzg0MDA0ODMwODhGRkZGMTEKKzoxMDBERTAwMDExMDAwMDFDOTM4OTAwMkM4RjhFMDAyODI0MTlFRkZGMUUKKzoxMDBERjAwMDAwOEJGODIzOTVEODAwQUMwMTY4NjgyQjMzRTkwMEZGMUQKKzoxMDBFMDAwMDAzMTk3ODI0QTVDRjAwQUM1MUEwMDAyQTAxMDA1ODIxNzUKKzoxMDBFMTAwMDhFMDUwMDIwMjQwOEZGRkIyNDAzMDAwMTAwQTgxMDI0RjUKKzoxMDBFMjAwMEFFMDIwMDIwMTE4MzAwMjUzNEU3ODAwMDAyMDAyMDIxNUIKKzoxMDBFMzAwMDMxNjVGRkZGMEUwMDE4MTQwMTIwMzAyMTk3OEIwMDQ4MDgKKzoxMDBFNDAwMDhGODcwMDRDQTc4MDAwNDgwMEVCODAyM0FGOTAwMDRDQjgKKzoxMDBFNTAwMDkzODkwMDJDOEY4QzAwMjg4RkJGMDAxODhGQjEwMDE0NEQKKzoxMDBFNjAwMDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwOEExODkwMEM3NTMKKzoxMDBFNzAwMDhFMDgwMDIwMjQwOUZGRkIzNEU3ODAwMDAxMDkyODI0QTQKKzoxMDBFODAwMEFFMDUwMDIwMTU4QUZGQkEzNEU3MDg4MDAyMDAyMDIxNTEKKzoxMDBFOTAwMDBFMDAxN0UyMzE2NUZGRkYwMjAwMjAyMTAyMjAyODIxMDkKKzoxMDBFQTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxOTFFRjgKKzoxMDBFQjAwMDI3QkQwMDIwMEEwMDE5RDUwMDAwNDgyMTAyMDAyMDIxOEEKKzoxMDBFQzAwMDMxNjVGRkZGMEUwMDE3RTIwMTIwMzAyMTk3OEIwMDQ4QUIKKzoxMDBFRDAwMDhGODcwMDRDQTc4MDAwNDgwMEVCODAyMzBBMDAxOUU1QUIKKzoxMDBFRTAwMEFGOTAwMDRDOTQ4OTAwNzAyNDBBODAwMDAxMkE0MDI0QUQKKzoxMDBFRjAwMEE0ODgwMDcwOTA4NTAwNzA5MDk5MDA3MDMwQTIwMEZGNjcKKzoxMDBGMDAwMDAwMDIxOUMyMDAwM0Y4MjcwMDFGQzFDMDMzMkYwMDdGNjEKKzoxMDBGMTAwMDAxRjg3MDI1QTA4RTAwNzAwQTAwMTlCRDAyMDAyMDIxODIKKzoxMDBGMjAwMDhGODgwMDI4MjQwMzAwMDE5MTBBMDA3ODkxMDUwMEM3RUEKKzoxMDBGMzAwMDI1MDkwMDc4MzE0NzAwM0YyNEU2RkZFMDAwQzMxODA0OEMKKzoxMDBGNDAwMDJDQzIwMDIwMzA2NzAwMTlBMzg1MDAyQzEwNDAwMDFBMjUKKzoxMDBGNTAwMEFGODkwMDM4M0MwQTgwMDAzNTRCMDAwMjI0MDUwMDAxQUYKKzoxMDBGNjAwMDI0MDYwMDAxMTRFMDAwMTYwMDZCMTAyNDAwMDAyODIxNjQKKzoxMDBGNzAwMDE0NDAwMDBGMzA2MzAwMjAxMDYwMDAwRjI0MDUwMDAxQjIKKzoxMDBGODAwMDhEMDYwMDc0OEQxOTAwNzQyNDAzRkY4MDAwQzMxMDI0QTMKKzoxMDBGOTAwMDAwMDI3OTQwMzMzODAwN0YwMUY4NjgyNTNDMEUxMDAwQ0MKKzoxMDBGQTAwMDAxQUU2MDI1QUQ0QzA4MzA5MTI4MDAwMTMxMDYwMDAxRUEKKzoxMDBGQjAwMDBBMDAxOTkzMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwOTAKKzoxMDBGQzAwMDhEMEYwMDc0OEQwRDAwNzQyNDE4RkY4MDAxRjg3MDI0QkIKKzoxMDBGRDAwMDAwMEU0MTQwMzFBQzAwN0YwMTBDNTAyNTNDMEIxMDAwNEQKKzoxMDBGRTAwMDAxNEIzODI1M0MwOTgwMDAwQTAwMTk5M0FEMjcwODMwRDEKKzoxMDBGRjAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzOEFGQjQwMDIwRUQKKzoxMDEwMDAwMEFGQjEwMDE0QUZCRjAwMjRBRkIzMDAxQ0FGQjIwMDE4RTMKKzoxMDEwMTAwMDhFMDUwMDEwM0MwMjA4MDA4QzQyMzFCMDhGODYwMDNDRTcKKzoxMDEwMjAwMDMwQTczRkZGMDBFMjE4MkI4Q0QyMDAxNDAwODA4ODIxRUIKKzoxMDEwMzAwMDhDRDMwMDIwMTA2MDAwMDcwMDAwQTAyMTkwQ0IwMDBEOTEKKzoxMDEwNDAwMDI0MEFGRjgwMDE0QjQ4MjQzMTI4MDBGRjE1MDAwMDBDQzIKKzoxMDEwNTAwMDAwMDU2MzgyMDIyMDIwMjEyNDExMDAwREEzOTEwMDU0NzkKKzoxMDEwNjAwMDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4RjQKKzoxMDEwNzAwMDhGQjEwMDE0OEZCMDAwMTAwQTAwMTg5NzI3QkQwMDI4MDgKKzoxMDEwODAwMDMxODUwMDAzNTRBMEZGRjQwMjIwMjAyMTk0Q0YwMDFDREUKKzoxMDEwOTAwMDhGOEUwMDI4OEUwNzAwMjhBNUNGMDBEODhDQ0QwMDEwOTkKKzoxMDEwQTAwMDAyNEQzMDIzMTBFNjAwNUMyNDAyMDAxRjBFMDAxODk3NEEKKzoxMDEwQjAwMEEzODIwMDU0MjQxRkZGRkYxMDVGMDA0RTI0MDRGRkZGOTMKKzoxMDEwQzAwMDhGODMwMDQwOEY4ODAwMzAwMjYzOTgyMThEMDkwMDEwQzMKKzoxMDEwRDAwMDAxMjMxMDIzOEY4MzAwMjBBRDAyMDAxMEFEMTMwMDIwRTgKKzoxMDEwRTAwMDhDNjcwMDc0MDBGMzIwMkIxNDgwMDA2MjAyMjAyMDIxMDIKKzoxMDEwRjAwMDhGODYwMDNDOEUwQzAwMjQ4Q0M1MDAyNDExODUwMDA3Q0YKKzoxMDExMDAwMDAyMjAyMDIxMjQwRTAwMUMwRTAwMTg5N0EzOEUwMDU0RUMKKzoxMDExMTAwMDI0MERGRkZGMTA0RDAwMzcyNDA0RkZGRjhGODQwMDMwQTMKKzoxMDExMjAwMDhDOTgwMDI0MjcwRjAwMDFBQzhGMDAyNDEyNzIwMDQ0MTkKKzoxMDExMzAwMDhGOTkwMDIwOEYzMjAwNzQxMjUzMDA0MTNDMEEwMDgwQzYKKzoxMDExNDAwMDhFMDkwMDAwMDEyQTEwMjQxNDQwMDAzQTAwMDAwMDAwMUIKKzoxMDExNTAwMDhFMDQwMDE0MjQxMkZGRkYxMDkyMDAwNjI0MEIwMDFCQzMKKzoxMDExNjAwMDAyMjAyMDIxMEUwMDE4OTdBMzhCMDA1NDEwNTIwMDIxNUEKKzoxMDExNzAwMDI0MDRGRkZGOEUwMzAwMDAzQzBDMDAwMTAwNkMyODI0QjcKKzoxMDExODAwMDEwQTAwMDEzM0MwNjAwODAwMDY2QTAyNDE2ODAwMDA5MTEKKzoxMDExOTAwMDAyMDAyODIxMDIyMDIwMjEyNDBFMDAxQTBFMDAxODk3OTgKKzoxMDExQTAwMEEzOEUwMDU0MjQwREZGRkYxMDREMDAxMjI0MDRGRkZGRjYKKzoxMDExQjAwMDAyMDAyODIxMDIyMDIwMjEwRTAwMThCNzI0MDYwMDAxNzkKKzoxMDExQzAwMDI0MTBGRkZGMjQwNEZGRkYxMDUwMDAwQTI0MTQwMDAxMjQKKzoxMDExRDAwMDhGOEYwMDMwMDIyMDIwMjEwMjgwMzAyMTk1RjIwMDM0RDAKKzoxMDExRTAwMDI0MDUwMDAxMjY1ODAwMDEwRTAwMTk5M0E1RjgwMDM0Q0IKKzoxMDExRjAwMDAwMDAyMDIxOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDN0IKKzoxMDEyMDAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMzEKKzoxMDEyMTAwMDAzRTAwMDA4MjdCRDAwMjg4RjgzMDA0MDAwRTNDODIxQjkKKzoxMDEyMjAwMDAyNTlDMDJCMTMwMEZGQTg4Rjg4MDAzMDBBMDAxQTdDRDcKKzoxMDEyMzAwMDI0MDIwMDE4QUM4MDAwMjAwQTAwMUFBNjhFMDQwMDE0QjQKKzoxMDEyNDAwMDhFMUYwMDAwM0MwNzAwODAwM0U3OTgyNDE2NjBGRkY5MUEKKzoxMDEyNTAwMDI0MDgwMDFBMDIyMDIwMjEwRTAwMTg5N0EzODgwMDU0QTkKKzoxMDEyNjAwMDI0MDNGRkZGMTQ0M0ZGQkEyNDA0RkZGRjBBMDAxQUNGMzAKKzoxMDEyNzAwMDhGQkYwMDI0MjQwQjAwMUQwRTAwMTg5N0EzOEIwMDU0NzEKKzoxMDEyODAwMDI0MEFGRkZGMTQ0QUZGOUEyNDA0RkZGRjBBMDAxQUNGMjIKKzoxMDEyOTAwMDhGQkYwMDI0OEY4NTAwMjgyN0JERkZEOEFGQjMwMDFDNjcKKzoxMDEyQTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwNTQKKzoxMDEyQjAwMDkwQTcwMEM0OEY5MDAwMzgyNDEyRkZGRjM0RTIwMDQwNTIKKzoxMDEyQzAwMDkyMDYwMDAwQTBBMjAwQzQ4RTAzMDAxMDAwODA5ODIxQTYKKzoxMDEyRDAwMDEwNzIwMDA2MzBEMTAwM0YyNDA4MDAwRDBFMDAxODk3NTAKKzoxMDEyRTAwMEEzODgwMDU0MTA1MjAwMjYyNDA2RkZGRjhGOEEwMDI4OEUKKzoxMDEyRjAwMDhFMDkwMDE4OEQ0NDAwQzAxMTI0MDAwNzI0MEMwMDBFMzQKKzoxMDEzMDAwMDAyNjAyMDIxMEUwMDE4OTdBMzhDMDA1NDI0MEJGRkZGQ0QKKzoxMDEzMTAwMDEwNEIwMDFCMjQwNkZGRkYyNDA0MDAyMDEyMjQwMDA0QUQKKzoxMDEzMjAwMDhGOEQwMDI4OTFBRjAwQzQzNUVFMDAyMEExQUUwMEM0MUYKKzoxMDEzMzAwMDhGODUwMDQwMTBBMDAwMUEwMDAwMDAwMDEyMjQwMDRCMEUKKzoxMDEzNDAwMDhGOTgwMDI4OEY5MkZFRUMyNDA2RkZGRDk3MTAwMDcwMDYKKzoxMDEzNTAwMDk2NTEwMDBBMTIzMDAwMEI4RkJGMDAyMDNDMUYwODAwN0UKKzoxMDEzNjAwMDhGRkYzMThDMDNFNUM4MkIxNzIwMDAxRTAyNjAyMDIxNUYKKzoxMDEzNzAwMDAwMDAyODIxMEUwMDE5OTMyNDA2MDAwMTAwMDAzMDIxRUUKKzoxMDEzODAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0RTQKKzoxMDEzOTAwMDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDI4MTYKKzoxMDEzQTAwMDUyMjQwMDJBOEUwMzAwMTQ4Rjg0MDAyODk0ODkwMDcwMzAKKzoxMDEzQjAwMDI1MjgwMDAxQTQ4ODAwNzA5NDg3MDA3MDNDMDUwODAwNkYKKzoxMDEzQzAwMDhDQTUzMTg4MzBFMjdGRkYxMDQ1MDAwRTAwMDAwMDAwNDAKKzoxMDEzRDAwMDAyNjAyMDIxMEUwMDE5MUUyNDA1MDAwMTBBMDAxQjMxQTUKKzoxMDEzRTAwMDAwMDAzMDIxMjQwMjAwMkRBMzgyMDA1NDBFMDAxODk3MjMKKzoxMDEzRjAwMDI0MTNGRkZGMTQ1M0ZGRTEyNDA2RkZGRjBBMDAxQjMyRjIKKzoxMDE0MDAwMDhGQkYwMDIwOTQ5ODAwNzAyNDE5ODAwMDI0MDUwMDAxRUIKKzoxMDE0MTAwMDAzMTk5MDI0QTQ5MjAwNzA5MDkxMDA3MDkwOEQwMDcwMzgKKzoxMDE0MjAwMDMyMzAwMEZGMDAxMDc5QzIwMDBGNzAyNzAwMEU2MUMwM0IKKzoxMDE0MzAwMDMxQUIwMDdGMDE2QzUwMjVBMDhBMDA3MDBFMDAxOTFFOTAKKzoxMDE0NDAwMDAyNjAyMDIxMEEwMDFCMzEwMDAwMzAyMTI0MDZGRkZGMkEKKzoxMDE0NTAwMDE0NjZGRkQ2OEY4NDAwMjgwMjYwMjAyMTBFMDAxOTFFMUEKKzoxMDE0NjAwMDI0MDUwMDAxMEEwMDFCMzEwMDAwMzAyMTAyNjAyMDIxMDgKKzoxMDE0NzAwMDBBMDAxQjRCMjQwMjAwMEE4Rjg4MDAyODI3QkRGRkU4QzIKKzoxMDE0ODAwMEFGQjAwMDEwQUZCRjAwMTQ5MTBBMDBDNDhGODcwMDM4QkUKKzoxMDE0OTAwMDAwODA4MDIxMzU0OTAwNDA4Q0U2MDAxMEExMDkwMEM0N0QKKzoxMDE0QTAwMDNDMDIwODAwOEM0MjMxQjAzMEM1M0ZGRjAwQTIxODJCMkYKKzoxMDE0QjAwMDEwNjAwMDA3OEY4NTAwM0MyNDBERkY4MDkwQUUwMDBENkEKKzoxMDE0QzAwMDAxQUU2MDI0MzE4QjAwRkYxNTYwMDAwODAwMDZDMzgyNjYKKzoxMDE0RDAwMDAyMDAyMDIxMjQwMzAwMEQ4RkJGMDAxNDhGQjAwMDEwRTQKKzoxMDE0RTAwMDI3QkQwMDE4MEEwMDE4OTdBMzgzMDA1NDMzMDYwMDAzOTEKKzoxMDE0RjAwMDI0MEYwMDAyNTRDRkZGRjcwMjAwMjAyMTk0QTIwMDFDMDkKKzoxMDE1MDAwMDhGODUwMDI4MjQxOTAwMjNBNEEyMDBEODhDRTgwMDAwQUQKKzoxMDE1MTAwMDAwMDgxRTAyMzA3RjAwM0YxM0Y5MDAzNTNDMEEwMDgzQUIKKzoxMDE1MjAwMDhDRTgwMDE4OENBNjAwQzAxMTA2MDAwODAwMDAwMDAwMUUKKzoxMDE1MzAwMDI0MDUwMDBFMEUwMDE4OTdBMzg1MDA1NDI0MDdGRkZGMTIKKzoxMDE1NDAwMDEwNDcwMDE4MjQwNEZGRkY4Rjg1MDAyODkwQTkwMEM0Q0QKKzoxMDE1NTAwMDM1MjQwMDIwQTBBNDAwQzQ4RjhDMDAzMDkxOEUwMDBEOTMKKzoxMDE1NjAwMDMxQ0QwMDdGQTE4RDAwMEQ4RjgzMDA0MDEwNjAwMDFDRTUKKzoxMDE1NzAwMDAyMDAyMDIxOEY4NDAwM0M4Qzk4MDAxMDAzMDM3ODJCRkMKKzoxMDE1ODAwMDExRTAwMDBEMjQxOTAwMTgwMjAwMjAyMUEzOTkwMDU0MzUKKzoxMDE1OTAwMDBFMDAxODk3MjQxMEZGRkYxMDUwMDAwMjI0MDRGRkZGRDQKKzoxMDE1QTAwMDAwMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDAwODAxMDIxOTgKKzoxMDE1QjAwMDAzRTAwMDA4MjdCRDAwMTg4Qzg2MDAxMDhGOUYwMDMwQzQKKzoxMDE1QzAwMDAyMDAyMDIxMDBDMzEwMjNBRkUyMDAxMDI0MDUwMDAxMTcKKzoxMDE1RDAwMDBFMDAxOTkzMjQwNjAwMDEwQTAwMUJCQTAwMDAyMDIxMDYKKzoxMDE1RTAwMDBFMDAxOTFFMjQwNTAwMDEwQTAwMUJCQTAwMDAyMDIxNkMKKzoxMDE1RjAwMDAxMEE1ODI0MTU2QUZGRDk4RjhDMDAzMEEwQTYwMEVDOTAKKzoxMDE2MDAwMDBBMDAxQkE3QTM4NjAwNDYyN0JERkZEOEFGQjAwMDEwNzUKKzoxMDE2MTAwMDhGOTAwMDM4QUZCMjAwMThBRkJGMDAyMEFGQjMwMDFDRUUKKzoxMDE2MjAwMEFGQjEwMDE0OEUxMTAwMTAzQzAzMDgwMDhDNjMzMUIwODAKKzoxMDE2MzAwMDMyMjUzRkZGMDBBMzEwMkIxMDQwMDAwODAwODA5MDIxQUUKKzoxMDE2NDAwMDhGODYwMDNDMjQwOUZGODA5MENBMDAwRDAxMkE0MDI0QTcKKzoxMDE2NTAwMDMxMDcwMEZGMTRFMDAwMEIwMDExNkI4MjAyNDAyMDIxRDMKKzoxMDE2NjAwMDI0MTIwMDBEQTM5MjAwNTQ4RkJGMDAyMDhGQjMwMDFDRTIKKzoxMDE2NzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxODk3QjUKKzoxMDE2ODAwMDI3QkQwMDI4MzFBQzAwMDMyNDBCMDAwMTU1OEJGRkY0NkIKKzoxMDE2OTAwMDAyNDAyMDIxOTBDRjAwMEQzMUVFMDAwODExQzAwMDYwMDMKKzoxMDE2QTAwMDhGOTMwMDQwMTY2MDAwMDkyNDAyMDAyNzhFMTkwMDBDNTkKKzoxMDE2QjAwMDhDRDgwMDIwMTczODAwMDUyNDAyMDAyMDhFMDIwMDA4NzQKKzoxMDE2QzAwMDhDREYwMDI0MTA1RjAwNDAyNDAyMDAyMDBFMDAxODk3RDkKKzoxMDE2RDAwMEEzODIwMDU0MjQwNkZGRkYxMDQ2MDAzMzI0MDRGRkZGQkEKKzoxMDE2RTAwMDhGOTkwMDMwMjQwQUZGRjczQzEzODAwRTkzMjkwMDBERDgKKzoxMDE2RjAwMDI0MDRGRjgwM0MwRDgwMDAwMTJBRjgyNEEzM0YwMDBENDQKKzoxMDE3MDAwMDhGOTkwMDIwM0MwODA4MDA4RDA4MzFBQzhGODMwMDU4NjkKKzoxMDE3MTAwMDk3MjcwMDc4OEY5RjAwMzAwMTAzMTAyMTMwRTU3RkZGNkQKKzoxMDE3MjAwMDAwMDUzMDQwMDA0Njc4MjEzMUY4MDA3RjAzMTM2MDIxMjYKKzoxMDE3MzAwMDAxRTQ3MDI0QURBRTAwMkNBNTkxMDAwMDhGRUIwMDI4RDEKKzoxMDE3NDAwMDI1NkEwMDAxQUZFQTAwMjg4RkUzMDAyQzhFMDkwMDJDRTcKKzoxMDE3NTAwMDAwNjk0MDIxQUZFODAwMkM4RTA3MDAyQ0FGRTcwMDMwNzUKKzoxMDE3NjAwMDhFMDUwMDE0QUZFNTAwMzQ5N0U2MDAzQTI0QzIwMDAxNkMKKzoxMDE3NzAwMEE3RTIwMDNBOTczMzAwNzgzQzEwMDgwMDhFMTAzMUIwOTEKKzoxMDE3ODAwMDI2NjMwMDAxMzA3MTdGRkYxMjMwMDAyNzAwNjAzMDIxOTYKKzoxMDE3OTAwMDhGOEYwMDIwMDI0MDIwMjEyNDA1MDAwMTBFMDAxOTFFMTkKKzoxMDE3QTAwMEE1RTYwMDc4MDAwMDIwMjE4RkJGMDAyMDhGQjMwMDFDMjkKKzoxMDE3QjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxN0MKKzoxMDE3QzAwMDAzRTAwMDA4MjdCRDAwMjg4RTA1MDAxNDI0MTNGRkZGNDYKKzoxMDE3RDAwMDEwQjMwMDFEOEY4MzAwMjg4RTA4MDAxODhDNjcwMEMwOEUKKzoxMDE3RTAwMDE1MDcwMDA5MjQwMjAwMEU4RTBBMDAyNDhDQzkwMDI4NjcKKzoxMDE3RjAwMDE1NDkwMDA1MjQwMjAwMjE4RTA3MDAyODhDQ0IwMDJDRkYKKzoxMDE4MDAwMDEwRUIwMDEzMjQwMjAwMUYwRTAwMTg5N0EzODIwMDU0NEYKKzoxMDE4MTAwMDE0NTNGRkIzMjQwNEZGRkYwQTAwMUMzQzhGQkYwMDIwQjkKKzoxMDE4MjAwMDBBMDAxQzA0MjQwMjAwMjQyNDBFODAwMDAwNkU2ODI0OTgKKzoxMDE4MzAwMDMxQUNGRkZGMDAwQzVCQzIzMTcxMDBGRjAwMTE4MDI3NEIKKzoxMDE4NDAwMDBBMDAxQzM1MDAxMDMzQzAwQTAwMUM1MzI0MDIwMDI1NzYKKzoxMDE4NTAwMDhFMDUwMDJDMTBBMEZGRUMyNDAyMDAyMzhGOEUwMDIwQTgKKzoxMDE4NjAwMDhEQ0QwMDc0MDFBNTYwMkIxNTgwRkZFNzI0MDIwMDI2QjIKKzoxMDE4NzAwMDhDQ0YwMDE0MDBBN0MwMjEwMUY4MjAyQjEwODBGRjk5MDUKKzoxMDE4ODAwMDhGOTkwMDMwMDI0MDIwMjEwQTAwMUM1MzI0MDIwMDIyQkMKKzoxMDE4OTAwMDI3QkRGRkUwQUZCMDAwMTA4RjkwMDAzOEFGQjEwMDE0NEIKKzoxMDE4QTAwMEFGQkYwMDE4OEUwNTAwMTAzQzAzMDgwMDhDNjMzMUIwRjgKKzoxMDE4QjAwMDAwODA4ODIxMzBBNDNGRkYwMDgzMTAyQjEwNDAwMDA3RDgKKzoxMDE4QzAwMDhGODYwMDNDMjQwOUZGODA5MENBMDAwRDAxMkE0MDI0MjUKKzoxMDE4RDAwMDMxMDcwMEZGMTRFMDAwMDk4RjhCMDA0MDI0MTAwMDBEMzkKKzoxMDE4RTAwMDAyMjAyMDIxQTM5MDAwNTQ4RkJGMDAxODhGQjEwMDE0NTQKKzoxMDE4RjAwMDhGQjAwMDEwMEEwMDE4OTcyN0JEMDAyMDExNjAwMDA4NjMKKzoxMDE5MDAwMDAwMDVDMzgyOEY4RjAwMjg4RjhFRkVFQzI0MDdGRkZEMTkKKzoxMDE5MTAwMDk1RUMwMDcwOTVDRDAwMEExMUFDMDAzODhGQkYwMDE4MEYKKzoxMDE5MjAwMDMzMDUwMDAzMTRBMDAwMTAwMDAwMDAwMDkyMTkwMDAyMEIKKzoxMDE5MzAwMDEzMjAwMDQxMDAwMDAwMDA4RTA2MDAyNDUwQzAwMDBGNUMKKzoxMDE5NDAwMDkyMDQwMDAzMDIyMDIwMjEyNDAyMDAwRjBFMDAxODk3QTkKKzoxMDE5NTAwMEEzODIwMDU0MjQwOEZGRkYxNDQ4MDAwNzI0MDdGRkZGNTgKKzoxMDE5NjAwMDBBMDAxQ0QwOEZCRjAwMTg5MEMzMDAwRDMwNjQwMDA4MUYKKzoxMDE5NzAwMDEwODAwMDM3MDIyMDIwMjE5MjA0MDAwMzI0MDcwMDAyNzcKKzoxMDE5ODAwMDMwODkwMEZGMTUyNzAwMDUzMDhGMDBGRjhGOEEwMDQwNDcKKzoxMDE5OTAwMDExNDAwMDMxMjQwQzAwMkMzMDhGMDBGRjM5RTUwMDEwN0QKKzoxMDE5QTAwMDJDQUQwMDAxMkRFRTAwMDEwMjAwMjgyMTAxQ0QzMDI1RDMKKzoxMDE5QjAwMDBFMDAxOEI3MDIyMDIwMjEyNDEwRkZGRjEwNTAwMDBFNDcKKzoxMDE5QzAwMDI0MDdGRkZGOEY4MzAwNDAxMDYwMDAxNzAyMjAyMDIxQjIKKzoxMDE5RDAwMDNDMTkwODAwOEYzOTMxOEMwMzIzQzAyQjU3MDAwMDBDQjEKKzoxMDE5RTAwMDI0MTEwMDJEMDIyMDIwMjEwMDAwMjgyMTBFMDAxOTkzMkYKKzoxMDE5RjAwMDI0MDYwMDAxMDAwMDM4MjE4RkJGMDAxODhGQjEwMDE0QTkKKzoxMDFBMDAwMDhGQjAwMDEwMDBFMDEwMjEwM0UwMDAwODI3QkQwMDIwODcKKzoxMDFBMTAwMDBFMDAxODk3QTM5MTAwNTQxNDUwRkZGNjI0MDdGRkZGRkYKKzoxMDFBMjAwMDBBMDAxQ0QwOEZCRjAwMTgwRTAwMTkxRTI0MDUwMDAxRUIKKzoxMDFBMzAwMDBBMDAxQ0NGMDAwMDM4MjE4Q0RGMDAyNDhFMDIwMDI0MTUKKzoxMDFBNDAwMDU0NUZGRkMxMDIyMDIwMjEwQTAwMUNCMDkyMDQwMDAzNTEKKzoxMDFBNTAwMDBBMDAxQ0E0MjQwMjAwMTAwMjIwMjAyMTBFMDAxODk3NjYKKzoxMDFBNjAwMEEzOEMwMDU0MjQwQkZGRkYxMDRCRkZFMzI0MDdGRkZGNjAKKzoxMDFBNzAwMDBBMDAxQ0I3OTIwNDAwMDMzMEE1MDBGRjI0MDYwMDAxRjEKKzoxMDFBODAwMDI0QTkwMDAxMDBDOTEwMkIxMDQwMDAwQzAwMDA0MDIxQzcKKzoxMDFBOTAwMDI0MEEwMDAxMDBBNjE4MjMzMDhCMDAwMTI0QzYwMDAxOEYKKzoxMDFBQTAwMDAwNkEzODA0MDAwNDIwNDIxMTYwMDAwMjAwQzkxODJCQUIKKzoxMDFBQjAwMDAxMDc0MDI1MTQ2MEZGRjgwMEE2MTgyMzAzRTAwMDA4ODIKKzoxMDFBQzAwMDAxMDAxMDIxMjdCREZGRDhBRkIwMDAxODhGOTAwMDM4NUIKKzoxMDFBRDAwMEFGQjEwMDFDQUZCRjAwMjAyNDAzRkZGRjI0MTEwMDJGNzMKKzoxMDFBRTAwMEFGQTMwMDEwOTIwNjAwMDAyNDA1MDAwODI2MTAwMDAxOTQKKzoxMDFBRjAwMDAwNjYyMDI2MEUwMDFDRUYzMDg0MDBGRjAwMDIxRTAwNEUKKzoxMDFCMDAwMDNDMDIxRURDMzQ0NjZGNDEwQTAwMUQxNzAwMDAxMDIxMDQKKzoxMDFCMTAwMDEwQTAwMDA5MDA4MDE4MjEyNDQ1MDAwMTMwQTJGRkZGMTkKKzoxMDFCMjAwMDJDNDUwMDA4MDQ2MUZGRkEwMDAzMjA0MDAwODYyMDI2QUYKKzoxMDFCMzAwMDE0QTBGRkY5MDA4MDE4MjEwRTAwMUNFRjI0MDUwMDIwREUKKzoxMDFCNDAwMDhGQTMwMDEwMjYyOUZGRkYzMTMxMDBGRjAwMDM0MjAyNUUKKzoxMDFCNTAwMDI0MDcwMEZGMTYyN0ZGRTIwMTAyMTgyNjAwMDM1MDI3ODIKKzoxMDFCNjAwMEFGQUEwMDE0QUZBQTAwMTAwMDAwMzAyMTI3QTgwMDEwNkYKKzoxMDFCNzAwMDI3QTcwMDE0MDBFNjc4MjM5MUVEMDAwMzI0Q0UwMDAxOEUKKzoxMDFCODAwMDAwQzg2MDIxMzFDNjAwRkYyQ0NCMDAwNDE1NjBGRkY5QUUKKzoxMDFCOTAwMEExOEQwMDAwOEZBMjAwMTA4RkJGMDAyMDhGQjEwMDFDMEMKKzoxMDFCQTAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODkzODMwMDM0OUQKKzoxMDFCQjAwMDI3QkRGRkUwMjQwMjAwMzRBRkIxMDAxNEFGQjAwMDEwMjUKKzoxMDFCQzAwMEFGQkYwMDFDQUZCMjAwMTgwMDgwODgyMTEwNjIwMDYyMTUKKzoxMDFCRDAwMDAwQTA4MDIxOTIwNDAwMDQxNDgwMDA0NThGODgwMDI4MTIKKzoxMDFCRTAwMEEzODAwMDJDOEUwNTAwMDQ4RDA2MDBDODNDMDcwMEZGNzIKKzoxMDFCRjAwMDM0RTNGRkZGMDBBMzI4MjQwMEM1MTAyQjE0NDAwMDRENDAKKzoxMDFDMDAwMEFGODUwMDQwOTc4QTAwNDg4Rjg3MDA0QzAxNDcxMDIzMUEKKzoxMDFDMTAwMDEwQTAwMDMyQTc4MjAwNDg4Rjk4MDAyMDMwNENGRkZGQjAKKzoxMDFDMjAwMDkzMTIwMDdDMDAxMjc4ODIzMUYxMDAwMTAwMTE3MDgwNjMKKzoxMDFDMzAwMDAxQzU2ODIxMDE4RDU4MkIxMTYwMDA2MThGODYwMDI4MzUKKzoxMDFDNDAwMDhGODkwMDI0OEY4NDAwNTAxMDg5MDA1RTNDMDIzRjAxODAKKzoxMDFDNTAwMDhFMUYwMDAwM0MxMDI1MDAwM0UyQzgyNDE3MzAwMDdBRDQKKzoxMDFDNjAwMDhGODQwMDM4OEY4NzAwMzg4Rjg2MDAyODhDRTMwMDAwMkYKKzoxMDFDNzAwMEFDQzMwMDc4OENFNTAwMTBBQ0M1MDA4ODhGODcwMDRDQTEKKzoxMDFDODAwMDhGODUwMDQwOTM4RDAwMkMzMEFFMDAwMzAwMEU0MDIzNjIKKzoxMDFDOTAwMDMxMEEwMDAzMDE0RDQwMjFBMzg4MDAyQzk0Q0IwMEFDRjUKKzoxMDFDQTAwMDAxMjc2MDIxQUY4QzAwMjQzNTY5MTAwMEE0QzkwMEFDNjUKKzoxMDFDQjAwMDE2MjAwMDUxMDE0NTIwMjFBRjg0MDA0QzAwMDAyMDIxNTYKKzoxMDFDQzAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwQUUKKzoxMDFDRDAwMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDhGODQwMDI0MkQKKzoxMDFDRTAwMEFGODAwMDRDMDA4NzMwMjEwQTAwMUQ4MEFGODYwMDI0QTEKKzoxMDFDRjAwMDI0MUYwMDBDQTM5RjAwNTQwRTAwMTg5NzAyMjAyMDIxREYKKzoxMDFEMDAwMDI0MTlGRkZGMTA1OUZGRUUyNDA0RkZGRjhGODgwMDI4REQKKzoxMDFEMTAwMEEzODAwMDJDOEUwNTAwMDQ4RDA2MDBDODNDMDcwMEZGNDAKKzoxMDFEMjAwMDM0RTNGRkZGMDBBMzI4MjQwMEM1MTAyQjEwNDBGRkI1QUIKKzoxMDFEMzAwMEFGODUwMDQwMDIyMDIwMjEyNDA5MDAxOUEzODkwMDU0MDYKKzoxMDFENDAwMDBFMDAxODk3MjQxMUZGRkYxMDUxRkZERDI0MDRGRkZGNDAKKzoxMDFENTAwMDBBMDAxRDUyOEY4NTAwNDA4Rjg0MDAyODhGODcwMDM4MkQKKzoxMDFENjAwMDhDRjIwMDMwOTA4NjAwQzQzMEM1MDAxMDE0QTAwMDEwMjIKKzoxMDFENzAwMDhGODMwMDRDMkM2ODAwMDUxNTAwMDAyODAwMDAwMDAwMkYKKzoxMDFEODAwMDkwOEEwMEM0MjQ2QkZGRkMzMTQ5MDAxMDE1MjAwMDA4MjQKKzoxMDFEOTAwMDMxNjQwMEZGOEY4RDAwNTA4RjhDMDAyNDExQUMwMDA0NDMKKzoxMDFEQTAwMDM4OEYwMDAxMzFFRTAwMDExNUMwMDAyRjAwMDAwMDAwNDcKKzoxMDFEQjAwMDBFMDAxRDAyMDAwMDAwMDAwQTAwMUREOTAwMDAwMDAwRjYKKzoxMDFEQzAwMDhGODkwMDI0OTM4RDAwMkMzMEFFMDAwMzAwMEU0MDIzMzkKKzoxMDFERDAwMDMxMEEwMDAzMDE0RDQwMjFBMzg4MDAyQzk0Q0IwMEFDQjQKKzoxMDFERTAwMDAxMjc2MDIxQUY4QzAwMjQzNTY5MTAwMEE0QzkwMEFDMjQKKzoxMDFERjAwMDEyMjBGRkIxMDE0NTIwMjEyNTE4MDAwNEEzOTgwMDJDRDIKKzoxMDFFMDAwMDk0Q0YwMEFDMjQ5MjAwMDRBRjkyMDA0QzM1RjEyMDAwMzYKKzoxMDFFMTAwMEE0RDEwMEFDMEEwMDFEODEwMDAwMjAyMThDODIwMERDQ0UKKzoxMDFFMjAwMDEyNDJGRjZDMDIyMDIwMjEyNDE4MDAwNUEzOTgwMDU0QzAKKzoxMDFFMzAwMDBFMDAxODk3MjQxMkZGRkYxNDUyRkY2NjI0MDRGRkZGQzAKKzoxMDFFNDAwMDBBMDAxRDgyOEZCRjAwMUMzMEU1MDBGRjBFMDAxNzlFQTgKKzoxMDFFNTAwMDAwMDAzMDIxOEY4NjAwMjg4Rjg3MDA0QzhGODkwMDI0NTYKKzoxMDFFNjAwMDBBMDAxRDcyOEY4NTAwNDAwRTAwMTdDOTAwMDAwMDAwOTcKKzoxMDFFNzAwMDBBMDAxREQ5MDAwMDAwMDA5MzgzMDA0NjI3QkRGRkUwNDMKKzoxMDFFODAwMDI0MDIwMDAyQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDQjMKKzoxMDFFOTAwMDAwODA4ODIxQUZCMDAwMTAwMDAwOTAyMTEwNjIwMDU1MzIKKzoxMDFFQTAwMDI0MDRGRkZEOTc4MzAwNDg4Rjg1MDA0QzMwNjZGRkZGQjgKKzoxMDFFQjAwMDAwQzUyMDJCMTQ4MDAwNUI5Mzg3MDAzNDNDMDg4MDAwMTEKKzoxMDFFQzAwMDk1MDQwMTIwMTBFNTAwNTI4RjhBMDAyNDhGODQwMDUwNzEKKzoxMDFFRDAwMDMwQTUwMEZGMEUwMDE3OUUyNDA2MDAwMThGOUYwMDU4QkEKKzoxMDFFRTAwMDNDMDU4MDAwM0MxOTQwODAyN0VEMDE3ODMxQjAwMDc4MzYKKzoxMDFFRjAwMDI0MEVGRjgwMDIxOTU4MjUzNEFGMDkwMDMxQjgwMDA3QkQKKzoxMDFGMDAwMDAxQUU2MDI0QUNBQzA4MDAwMzBGODAyMUFDQUIwODEwMUMKKzoxMDFGMTAwMDAyMjAyMDIxMDIwMDI4MjEwRTAwMUQzQ0FGOTAwMDM4MzUKKzoxMDFGMjAwMDI0MDNGRkZGMTA0MzAwMzMyNDA0RkZGRjhFMEMwMDEwMzYKKzoxMDFGMzAwMDNDMDcwODAwOENFNzMxQjA5MjA2MDAwMDMxODQzRkZGNzcKKzoxMDFGNDAwMDAwODcxMDJCMTA0MDAwMjMzMENEMDAzRjhGOTgwMDU4QTEKKzoxMDFGNTAwMDAwMDQ3MTgwM0MwNDA4MDA4Qzg0MzFBODI0MDlGRjgwQUYKKzoxMDFGNjAwMDkzOTAwMDQ1MDA5ODQwMjEwMTBFMjAyMTAwODk3MDI0QTMKKzoxMDFGNzAwMDAwMEU1MTQwM0MwOTgwMDAzMDk5MDA3RjNDMEYwMDgwRUEKKzoxMDFGODAwMDhGODgwMDI4MzUyNTA5NDAzNUUyMDAwMTAxNTkzODI1QTAKKzoxMDFGOTAwMDMwOEIwMDc4MzA4NjAwMDczQzAzMTAwMDNDMUY4MDBDMUIKKzoxMDFGQTAwMDAwQzVDMDIxMDE2MjU4MjUwMEUzNTAyNTAzM0Y3ODIxNzgKKzoxMDFGQjAwMDM2MDUwMDAxQUQyRTA4MDRBRjk4MDAzQ0FEMkIwODE0ODcKKzoxMDFGQzAwMEFGOEYwMDMwQUQyRTAwMjhBRDA0MDA3NEFEMkEwODMwNkMKKzoxMDFGRDAwMEEzODUwMDQ1OTM4MzAwNDYyNDEwMDAwMzUwNzAwMDI3MUEKKzoxMDFGRTAwMDI1QTNGRkUwMjQwQzAwMDExMDZDMDAxQzI0MDYwMDIzMzQKKzoxMDFGRjAwMDAyNDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0NDcKKzoxMDIwMDAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwRTEKKzoxMDIwMTAwMDMxNDkwMDAzNTUyMEZGQUU4Rjg0MDA1MDBBMDAxRTE1ODEKKzoxMDIwMjAwMDhGOTAwMDUwOEY4NDAwNTAzMDY1MDBGRjBFMDAxNzlFODcKKzoxMDIwMzAwMDI0MDYwMDAxOTM4QjAwMzQyNDA1MDAzNDExNjUwMDE4MzgKKzoxMDIwNDAwMDk3ODMwMDQ4OEY4NTAwNEMzMDYyRkZGRjAwQTI1ODIzMjEKKzoxMDIwNTAwMEFGOEIwMDRDMEEwMDFFNERBNzgwMDA0ODExQTYwMDM3MjgKKzoxMDIwNjAwMDAwMDAwMDAwMDIyMDIwMjEyNDExMDAwQjBFMDAxODk3MTAKKzoxMDIwNzAwMEEzOTEwMDU0MEEwMDFFNEQwMDQwOTAyMTJDNzIwMDIwQjQKKzoxMDIwODAwMDEyNDBGRkY4MDAwM0Y4ODAzQzA3MDgwMTI0RTc4MTNDNzgKKzoxMDIwOTAwMDAzRTdDODIxOEYyRDAwMDAwMUEwMDAwODAwMDAwMDAwMDgKKzoxMDIwQTAwMDhGODUwMDRDMkNBMjAwMDU1NDQwMDAxREE3ODAwMDQ4REQKKzoxMDIwQjAwMDk3OEEwMDQ4MzE0OEZGRkYwMEE4NDgyMzJEMkYwMDA1Q0MKKzoxMDIwQzAwMDExRTAwMDAzMzE0NDAwRkYyNEFFRkZGQzMxQzQwMEZGRTcKKzoxMDIwRDAwMDhGOTAwMDUwOEY5ODAwMjQxMjE4MDAwNDM4OTkwMDAxNDYKKzoxMDIwRTAwMDMzMkQwMDAxMTVBMDAwMjkwMDAwMDAwMDhGOTEwMDI4NjkKKzoxMDIwRjAwMDkyMjUwMEM0MzRBMzAwMTBBMjIzMDBDNDk3ODMwMDQ4OTMKKzoxMDIxMDAwMDhGODUwMDRDOEY4NDAwMjgzMDYyRkZGRjAwQTI1ODIzODcKKzoxMDIxMTAwMEFDODAwMERDQTc4MDAwNDgwQTAwMUU0REFGOEIwMDRDNEQKKzoxMDIxMjAwMDMwNjJGRkZGMDBBMjU4MjMwQTAwMUU0REFGOEIwMDRDMDcKKzoxMDIxMzAwMDI0MDNGRkZGMTE4MzAwMDUwMDAwMDAwMDBFMDAxQjZGNDkKKzoxMDIxNDAwMDAyMjAyMDIxMEEwMDFFNEQwMDQwOTAyMTBFMDAxQUY2QTgKKzoxMDIxNTAwMDAyMjAyMDIxMEEwMDFFNEQwMDQwOTAyMTBFMDAxQkQzQkEKKzoxMDIxNjAwMDAyMjAyMDIxMEEwMDFFNEQwMDQwOTAyMTBFMDAxQTREMzEKKzoxMDIxNzAwMDAyMjAyMDIxMEEwMDFFNEQwMDQwOTAyMTBFMDAxQzc1RjcKKzoxMDIxODAwMDAyMjAyMDIxMEEwMDFFNEQwMDQwOTAyMTBFMDAxN0M5OTgKKzoxMDIxOTAwMDAwMDAwMDAwOTc4MzAwNDg4Rjg1MDA0QzMwNkNGRkZGRTMKKzoxMDIxQTAwMDAwQUMzODIzMkNGRjAwMDU1M0UwRkZBODMwNjJGRkZGOEUKKzoxMDIxQjAwMDhGODYwMDI4QTc4MDAwNDhBQ0MyMDBEQzMwNjJGRkZGOTkKKzoxMDIxQzAwMDAwQTI1ODIzMEEwMDFFNERBRjhCMDA0QzI3QkRGRkQwNDQKKzoxMDIxRDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyOEFGQjUwMDI0RjkKKzoxMDIxRTAwMEFGQjQwMDIwQUZCMzAwMUNBRkIxMDAxNDNDMEM4MDAwQjIKKzoxMDIxRjAwMDhEODgwMTI4MjQwRkZGODAzQzA3ODAwQTI1MTAwMTAwRUMKKzoxMDIyMDAwMDI1MEIwMDgwMDIwRjY4MjQzMjA1MDA3RjAxNkY3MDI0QzcKKzoxMDIyMTAwMEFEOEUwMDkwMDBBNzI4MjFBRDhEMDAyNDkwQTcwMEVDODIKKzoxMDIyMjAwMDMxNjkwMDdGM0MwQTgwMDQwMTJBMTgyMUEzODcwMDQ2RjcKKzoxMDIyMzAwMDkwNjYwMDdDMDA4MDkwMjFBRjgzMDAyMDMwQzIwMDAyQjUKKzoxMDIyNDAwMEFGODgwMDU4QUY4NTAwMjgwMEEwMTgyMTE0NDAwMDAyNzQKKzoxMDIyNTAwMDI0MDQwMDM0MjQwNDAwMzBBMzg0MDAzNDhDNjYwMENDQjEKKzoxMDIyNjAwMDMwRjEwMEZGMjQwNDAwMDRBRjg2MDA0QzEyMjQwMDA0NjcKKzoxMDIyNzAwMEEzODAwMDU0OEU1MzAwMDQxNjYwMDAxRDNDMDg4MDAwQUIKKzoxMDIyODAwMDkzODcwMDQ1MzBGMjAwMDExMjQwMDAwRjhGQkYwMDI4RjUKKzoxMDIyOTAwMDhDQjgwMDc0OENBNDAwNzQyNDE5RkY4MDAzMTk4ODI0NUUKKzoxMDIyQTAwMDAwMTE3MTQwMzA4RjAwN0YwMUNGNjAyNTNDMEQyMDAwNzAKKzoxMDIyQjAwMDAxOEQ1ODI1MzBGNTAwRkUzQzBBODAwMEFENEIwODMwRkEKKzoxMDIyQzAwMEEzOTUwMDQ1OEZCRjAwMjg4RkI1MDAyNDhGQjQwMDIwNTAKKzoxMDIyRDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwQTQKKzoxMDIyRTAwMDI0MDIwMDAxMjdCRDAwMzAwM0UwMDAwOEFDQTYwMENDQUEKKzoxMDIyRjAwMDhFNTkwMDA4OTUxRjAxMjA4RTQ2MDAxMDAzM0ZDMDIxMTMKKzoxMDIzMDAwMDMzMDdGRkZGMzBGNTAwMEYzMkI0MDAwMUFGODYwMDI0MjEKKzoxMDIzMTAwMDE2ODAwMDNCQTM5NTAwNDQzNTA2MEMwMDAyQTYxMDIxNTAKKzoxMDIzMjAwMDAwRjUxODIzQUQwMzAwODRBRjgyMDA1MDhFNDkwMDA0RUQKKzoxMDIzMzAwMDMxMjhGRkZGMTEwMDAwMkJBNzg5MDA0ODI0MTBGRjgwREYKKzoxMDIzNDAwMDNDMTU4MDAwM0MxNDIwMDAwQTAwMUYzQjI0MTNGRkZFQjQKKzoxMDIzNTAwMDkwQUUwMEM0MDIwRTY4MjQzMUFDMDBGRjE1ODAwMDJBNDQKKzoxMDIzNjAwMDAyNDAyMDIxOTM4NDAwNDU5Nzg2MDA0ODMwOEYwMDAxNjkKKzoxMDIzNzAwMDExRTAwMDBCMDI2NDI4MjQ4Rjg5MDAyODhEMjMwMDc0NEIKKzoxMDIzODAwMDhEMjgwMDc0QTM4NTAwNDUwMDcwMTAyNDAwMDJDOTQwMDgKKzoxMDIzOTAwMDMxMUYwMDdGMDMzRkMwMjUwMzE0ODgyNUFFQjEwODMwRUMKKzoxMDIzQTAwMDEwQzAwMDEwOEY4NTAwMjg5MEE3MDBDNDAyMDc1ODI0OTEKKzoxMDIzQjAwMDMxNkEwMEZGMTU0MEZGRTYwMjQwMjAyMTBFMDAxREVGQUMKKzoxMDIzQzAwMDk3OTEwMDQ4MTA0MEZGRTg5Mzg0MDA0NTI0MDVGRkZERTUKKzoxMDIzRDAwMDU0NDUwMDA1OEU0MzAwMjAwMjIwMjgyMTBFMDAxNzc0NkEKKzoxMDIzRTAwMDAyNDAyMDIxOEU0MzAwMjAzMDcwMDAwNDE2MDAwMDBBQjUKKzoxMDIzRjAwMDI0MTRGRkZCOEY4NTAwMjgwQTAwMUVGMThGODYwMDRDRjUKKzoxMDI0MDAwMDBBMDAxRjFDQUY4NjAwNTAwRTAwMUExOTAwMDAwMDAwQzEKKzoxMDI0MTAwMDBBMDAxRjJCOTM4NDAwNDUwMDc0OTgyNDBFMDAxNzhFMjkKKzoxMDI0MjAwMEFFNTMwMDIwOEY4NTAwMjgwQTAwMUVGMThGODYwMDRDRDUKKzoxMDI0MzAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIxMDAxNEFGQkYwMDIwNjEKKzoxMDI0NDAwMEFGQjIwMDE4QUZCMDAwMTAzQzAyODAwMDhDNTIwMTQwQzcKKzoxMDI0NTAwMDhDNEIwMTQ4M0MwNDgwMDAwMDBCOEMwMjMyMjMwMEZGQUYKKzoxMDI0NjAwMDMxNzMwMEZGOEM4NTAxQjgwNEEwRkZGRTM0OTAwMTgwMTkKKzoxMDI0NzAwMEFFMTIwMDAwOEM4NzAxNDQyNDY0RkZGMDI0MDYwMDAyQTEKKzoxMDI0ODAwMDJDODMwMDEzQUUwNzAwMDRBNjExMDAwOEEyMDYwMDBCNUYKKzoxMDI0OTAwMEFFMTMwMDI0MTA2MDAwNEY4RkJGMDAyMDAwMDQ0ODgwNUUKKzoxMDI0QTAwMDNDMEEwODAxMjU0QTgxQkMwMTJBNDAyMThEMDQwMDAwMTQKKzoxMDI0QjAwMDAwODAwMDA4MDAwMDAwMDAzQzEwMDgwMDhFMTAzMUE4QzkKKzoxMDI0QzAwMDMxNzMzRkZGMDAxMzg5ODAwMjEyQzgyMTI0MDVGRjgwNjkKKzoxMDI0RDAwMDAzMzEyMDIxMjY0QzAxMDAyNjQ3MDA4MDNDMUY4MDAwNEMKKzoxMDI0RTAwMDAwRTUxODI0MzE4RjAwN0YzMEU5MDA3RjMwOEEwMDdGQkIKKzoxMDI0RjAwMDNDMTg4MDBBM0MwRTgwMDQzQzBEODAwQzAwODUxMDI0QTIKKzoxMDI1MDAwMDAxODUzMDI0MDE0RDgwMjFBRkU2MDAyNDAxRjg0MDIxRUYKKzoxMDI1MTAwMEFGRTMwMDkwMDEyRTk4MjFBRkUyMDAyOEFGOTAwMDMwODkKKzoxMDI1MjAwMEFGODgwMDI4QUY5MzAwMjAwRTAwMTg2MzAxNjA4MDIxNUYKKzoxMDI1MzAwMDNDMDM4MDAwOEM2QjAxQjgwNTYwRkZGRThGODcwMDMwODQKKzoxMDI1NDAwMDM0NjUwMTgwOEY4NjAwMjg5MEUzMDAwREFDQjIwMDAwNTYKKzoxMDI1NTAwMEE0QjAwMDA2MDAwMzE2MDAwMDAyRkUwMzAwMUY5MDI3MkYKKzoxMDI1NjAwMDAwMTIyN0MyMTA4MDAwN0EyNEMyMDA3ODI0MTk2MDgyRTkKKzoxMDI1NzAwMEE0QjkwMDA4QTBBMDAwMDUyNDFGMDAwMkEwQkYwMDBCMDIKKzoxMDI1ODAwMDAwMDQxQzAwOEY4QjAwMjAzQzAyMjcwMDAwNjI5MDI1NzUKKzoxMDI1OTAwMEFDQjIwMDEwQUNBMDAwMTRBQ0EwMDAyNEFDQTAwMDI4ODkKKzoxMDI1QTAwMEFDQTAwMDJDOEQ3MzAwMzgyNDEwRkY4MEFDQjMwMDE4NTEKKzoxMDI1QjAwMDkwRTQwMDBEMDIwNDg4MjQzMjI1MDBGRjEwQTAwMDA1REQKKzoxMDI1QzAwMDhGQkYwMDIwOTBFQzAwMEQzMTg4MDA3RkEwRTgwMDBENDcKKzoxMDI1RDAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0ODIKKzoxMDI1RTAwMDhGQjAwMDEwM0MwRDEwMDAzQzBBODAwMDI3QkQwMDI4NzEKKzoxMDI1RjAwMDAzRTAwMDA4QUQ0RDAxQjgyNjVGMDEwMDI0MDVGRjgwMEYKKzoxMDI2MDAwMDMzRjgwMDdGM0MwNjgwMDAwM0U1NzgyNDNDMTk4MDBBRkIKKzoxMDI2MTAwMDAzMTkyMDIxQUNDRjAwMjQ5MDhFMDBDNDAwQUU2ODI0QTIKKzoxMDI2MjAwMDMxQUMwMEZGMTE4MEZGRUFBRjg0MDAyODI0OEUwMDc4Q0YKKzoxMDI2MzAwMDk1Q0QwMDEyM0MwQzA4MDA4RDhDMzFBODMxQUIzRkZGQ0EKKzoxMDI2NDAwMDAxOTI0ODIxMDAwQjUxODAwMTJBNDAyMTAxMDUyMDI0REMKKzoxMDI2NTAwMEFDQzQwMDI4MzEwNzAwN0YzQzA2ODAwQzAwRTYyMDIxMzYKKzoxMDI2NjAwMDkwODMwMDBEMDBBMzEwMjQzMDQ1MDBGRjEwQTBGRkQ4NzgKKzoxMDI2NzAwMEFGODQwMDMwOTA5ODAwMEQzMzBGMDAxMDE1RTBGRkQ1QTcKKzoxMDI2ODAwMDhGQkYwMDIwMEUwMDE4NjMwMDAwMDAwMDNDMDM4MDAwOTQKKzoxMDI2OTAwMDhDNzkwMUI4MDcyMEZGRkUwMDAwMDAwMEFFMTIwMDAwOTgKKzoxMDI2QTAwMDhDNzIwMTQ0QUUxMjAwMDRBNjExMDAwODI0MTEwMDAyMkQKKzoxMDI2QjAwMEEyMTEwMDBCQUUxMzAwMjQwQTAwMUZDNjhGQkYwMDIwMUEKKzoxMDI2QzAwMDNDMTI2MDAwOEU0NTJDMDgzQzAzRjAwMzM0NjJGRkZGOEYKKzoxMDI2RDAwMDAwQTJGODI0QUU1RjJDMDg4RTU4MkMwODNDMTkwMUIwREIKKzoxMDI2RTAwMDAzMTk5ODI1QUU1MzJDMDgwQTAwMUZDNjhGQkYwMDIwN0YKKzoxMDI2RjAwMDI2NEQwMTAwMzFBRjAwN0YzQzEwODAwQTI0MEVGRjgwODAKKzoxMDI3MDAwMDAxRjAyODIxMDFBRTYwMjQzQzBCODAwMEFENkMwMDI0NTgKKzoxMDI3MTAwMDE2NjBGRkFGQUY4NTAwMjgyNDExMDAwM0EwQjEwMEVDQzQKKzoxMDI3MjAwMDBBMDAxRkM2OEZCRjAwMjAyNjQ4MDEwMDMxMEEwMDdGMjMKKzoxMDI3MzAwMDNDMEI4MDBBMjQwOUZGODAwMTRCMzAyMTAxMDkyMDI0MzEKKzoxMDI3NDAwMDNDMDc4MDAwQUNFNDAwMjQwQTAwMUZDNUFGODYwMDI4QzcKKzoxMDI3NTAwMDk0NEEwMDEyMzIwODNGRkYzMTRDM0ZGRjE1ODhGRjg0MzYKKzoxMDI3NjAwMDI0MTk2MDgyOTBDRjAwQzQyNDBFRkY4MDAxQ0Y0ODI0M0EKKzoxMDI3NzAwMDMxMkQwMEZGMTFBMEZGN0UwMDAwMDAwMDI0MDcwMDA0OUYKKzoxMDI3ODAwMEEwQzcwMEVDOEY4NzAwMzAyNDE4NjA4NDI0MDYwMDBENTkKKzoxMDI3OTAwMEE0QjgwMDA4QTBBNjAwMDUwQTAwMUZCMDI0MUYwMDAyNkMKKzoxMDI3QTAwMDA4MDAzMzBDMDgwMDMzMEMwODAwMzNFODA4MDAzM0JDODEKKzoxMDI3QjAwMDA4MDAzM0EwMDgwMDMyRjAwODAwMzJGMDA4MDAzMkYwQzAKKzoxMDI3QzAwMDA4MDAzMzE0ODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwQTEKKzoxMDI3RDAwMDVGODY1NDM3RTRBQzYyQ0M1MDEwM0E0NTM2NjIxOTg1QjYKKzoxMDI3RTAwMEJGMTRDMEU4MUJDMjdBMUU4NEY0QjU1NjA5NEVBNkZFN0IKKzoxMDI3RjAwMDdEREEwMUU3QzA0RDc0ODEwODAwN0E3NDA4MDA3QUMwNjAKKzoxMDI4MDAwMDA4MDA3QTgwMDgwMDc5QTgwODAwN0E4MDA4MDA3QUIwNjkKKzoxMDI4MTAwMDA4MDA3QTgwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4M0IKKzoxMDI4MjAwMDA4MDA3OUE4MDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDQKKzoxMDI4MzAwMDA4MDA3OUE4MDgwMDc5QTgwODAwNzlBODA4MDA3QUEwRkIKKzoxMDI4NDAwMDA4MDA3QTkwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4RkIKKzoxMDI4NTAwMDA4MDA3OUE4MDgwMDc5QTgwODAwNzlBODA4MDA3OUE4RDQKKzoxMDI4NjAwMDA4MDA3OUE4MDgwMDc5QTgwODAwNzlBODA4MDA3OUE4QzQKKzoxMDI4NzAwMDA4MDA3OUE4MDgwMDdBOTAwODAwODA2QzA4MDA3RjE0OEUKKzoxMDI4ODAwMDA4MDA4MDM0MDgwMDdGMTQwODAwODAwNDA4MDA3REZDRTQKKzoxMDI4OTAwMDA4MDA3RjE0MDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0Q0MKKzoxMDI4QTAwMDA4MDA3RjE0MDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0QkMKKzoxMDI4QjAwMDA4MDA3RjE0MDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0QUMKKzowNDI4QzAwMDA4MDA3RjNDNTEKKzowQzI4QzQwMDBBMDAwMTIyMDAwMDAwMDAwMDAwMDAwMERCCis6MTAyOEQwMDAwMDAwMDAwRDc0NzA2MTM1MkUzMDJFMzA2QTMzMDAwMDE4Cis6MTAyOEUwMDAwNTAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTAyOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTAyOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTAyOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTAyOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAyOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAyOTUwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDRBCis6MTAyOTYwMDAzQzAyMDgwMDI0NDIxQzIwM0MwMzA4MDAyNDYzMUZBMEYyCis6MTAyOTcwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNEUzCis6MTAyOTgwMDAzQzFEMDgwMDM3QkQyRkZDMDNBMEYwMjEzQzEwMDgwMEJGCis6MTAyOTkwMDAyNjEwMDQ4ODNDMUMwODAwMjc5QzFDMjAwRTAwMDJFMjI0Cis6MTAyOUEwMDAwMDAwMDAwMDAwMDAwMDBEMjQwMkZGODAyN0JERkZFMEIyCis6MTAyOUIwMDAwMDgyMTAyNEFGQjAwMDEwQUY0MjAwMjBBRkJGMDAxODVCCis6MTAyOUMwMDBBRkIxMDAxNDkzNjUwMDA0MzA4NDAwN0YwMzQ0MTgyMUU0Cis6MTAyOUQwMDAzQzAyMDAwODAwNjIxODIxMzBBNTAwMjAwMzYwODAyMTFECis6MTAyOUUwMDAzQzA4MDExMTI3N0IwMDA4MTRBMDAwMDIyNDY2MDA1QzRCCis6MTAyOUYwMDAyNDY2MDA1ODkyMDIwMDA0OTc0MzAxMDQ5MjA0MDAwNEU0Cis6MTAyQTAwMDAzMDQ3MDAwRjMwNjNGRkZGMzA4NDAwNDAwMDY3MjgyMzA5Cis6MTAyQTEwMDAxMDgwMDAwOTAwMDA0ODIxOTIwMjAwMDUzMDQyMDAwNEE1Cis6MTAyQTIwMDAxMDQwMDAwNTAwMDAwMDAwMTBBMDAwMDMwMDAwMDAwMDlFCis6MTAyQTMwMDAyNEE1RkZGQzI0MDkwMDA0OTIwMjAwMDUzMDQyMDAwNDkyCis6MTAyQTQwMDAxMDQwMDAxMjAwMDAwMDAwMTBBMDAwMTAwMDAwMDAwMDY0Cis6MTAyQTUwMDA5NjAyMDAwMjAwQTcyMDIxMDEwNDQwMjUyNDQyRkZGRTI3Cis6MTAyQTYwMDBBNzQyMTAxNjkyMDMwMDA0MjQwMkZGODAwMDQzMTAyNEEyCis6MTAyQTcwMDAzMDQyMDBGRjEwNDAwMDAzM0MwMjA0MDAwQTAwMDE3MkQzCis6MTAyQTgwMDAwMTAyNDAyNThDQzIwMDAwQUY0MjEwMTg4RjQyMDE3ODJECis6MTAyQTkwMDAwNDQwRkZGRTI0MDIwMDBBQTc0MjAxNDA5NjAyMDAwMjAxCis6MTAyQUEwMDAyNDA0MDAwOTMwNDIwMDA3MDAwMjEwMjMzMDQyMDAwN0NFCis6MTAyQUIwMDBBNzQyMDE0Mjk2MDIwMDAyMjQ0MkZGRkVBNzQyMDE0NEJGCis6MTAyQUMwMDBBNzQwMDE0Njk3NDIwMTA0QTc0MjAxNDg4RjQyMDEwOEVFCis6MTAyQUQwMDAzMDQyMDAyMDUwNDAwMDAxMjQwNDAwMDE5MjAyMDAwNDEyCis6MTAyQUUwMDAzMDQyMDAxMDE0NDAwMDAyMzQ4MzAwMTAwMDgwMTgyMThFCis6MTAyQUYwMDBBNzQzMDE0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTAyQjAwMDAwMDAwMDAwMEFGNDgxMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTAyQjEwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjEwMDAwNDQxRkZGRTkyCis6MTAyQjIwMDAzMTAyRkZGRjEwNDAwMDA3MDAwMDAwMDA5MjAyMDAwNDg1Cis6MTAyQjMwMDAzMDQyMDA0MDE0NDAwMDAzMDAwMDAwMDA4RjQyMTAxODkzCis6MTAyQjQwMDBBQ0MyMDAwMDk2MDIwMDA2MzA0MkZGRkYyNDQyMDAwMkExCis6MTAyQjUwMDAwMDAyMTA0MzAwMDIxMDQwMDM2Mjg4MjE5NjIyMDAwMDA4Cis6MTAyQjYwMDAxMTIwMDAwRDMwNDRGRkZGMDBBNzEwMjE4RjgzMDAzODkzCis6MTAyQjcwMDA4RjQ1MTAxQzAwMDIxMDgyMDAwMjEwODAwMDQzMTAyMUJCCis6MTAyQjgwMDBBQzQ1MDAwMDMwQTZGRkZGMEUwMDAyRDEwMDA1MkMwMjZDCis6MTAyQjkwMDAwMDQwMjAyMUE2MjIwMDAwOTIwMzAwMDQyNDAyRkY4MEFFCis6MTAyQkEwMDAwMDQzMTAyNDMwNDIwMEZGMTA0MDAwMUYwMDAwMDAwMENFCis6MTAyQkIwMDA5MjAyMDAwNTMwNDIwMDAyMTA0MDAwMUIwMDAwMDAwMDlECis6MTAyQkMwMDA5NzQyMTAwQzI0NDJGRkZFQTc0MjEwMTYwMDAwMDAwMDlFCis6MTAyQkQwMDAzQzAyMDQwMDM0NDIwMDMwQUY0MjEwMDAwMDAwMDAwMDBDCis6MTAyQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDA0Cis6MTAyQkYwMDAwNDQxRkZGRTAwMDAwMDAwOTc0MjEwMEM4RjQ1MTAxQzlFCis6MTAyQzAwMDAzMDQyRkZGRjI0NDIwMDMwMDAwMjEwODIwMDAyMTA4MDk4Cis6MTAyQzEwMDAwMDVCMTAyMUFDNDUwMDAwMzBBNkZGRkYwRTAwMDJEMTgyCis6MTAyQzIwMDAwMDA1MkMwMkE2MjIwMDAwOTYwNDAwMDIyNDg0MDAwODVECis6MTAyQzMwMDAwRTAwMDFFNzMwODRGRkZGOTc0NDAxMDQwRTAwMDFGNTA4Cis6MTAyQzQwMDAzMDg0RkZGRjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEM5Cis6MTAyQzUwMDAzQzAyMTAwMDI3QkQwMDIwMDNFMDAwMDhBRjQyMDE3OENECis6MTAyQzYwMDAzMDg0RkZGRjMwODIwMDA3OEY4NTAwMjQxMDQwMDAwMjZGCis6MTAyQzcwMDAyNDgzMDAwNzMwNjRGRkY4MDBBNDEwMjEzMDQyMUZGRkI2Cis6MTAyQzgwMDAwMzQyMTgyMTI0N0I0MDAwQUY4NTAwMjhBRjgyMDAyNDM2Cis6MTAyQzkwMDAwM0UwMDAwOEFGNDIwMDg0MzA4NEZGRkYzMDgyMDAwRjYxCis6MTAyQ0EwMDA4Rjg1MDAyQzhGODYwMDM0MTA0MDAwMDIyNDgzMDAwRjkzCis6MTAyQ0IwMDAzMDY0RkZGMDAwQTQxMDIxMDA0NjE4MkJBRjg1MDAzMENGCis6MTAyQ0MwMDAwMDQ2MjAyMzE0NjAwMDAyQUY4MjAwMkNBRjg0MDAyQzQ5Cis6MTAyQ0QwMDA4RjgyMDAyQzM0MDQ4MDAwMDM0MjE4MjEwMDY0MTgyMUU0Cis6MTAyQ0UwMDBBRjgzMDAzODAzRTAwMDA4QUY0MjAwODA4RjgyMDAxNEY5Cis6MTAyQ0YwMDAxMDQwMDAwODhGODIwMDA0OEY4MkZGQ0MxNDQwMDAwNTMyCis6MTAyRDAwMDA4RjgyMDAwNDNDMDJGRkJGMzQ0MkZGRkYwMDgyMjAyNDc4Cis6MTAyRDEwMDA4RjgyMDAwNDMwNDMwMDA2MjQwMjAwMDIxMDYyMDAwRjdDCis6MTAyRDIwMDAzQzAyMDEwMTJDNjIwMDAzNTA0MDAwMDUyNDAyMDAwNDEzCis6MTAyRDMwMDAxMDYwMDAwRjNDMDIwMDAxMEEwMDAyMkUwMDAwMDAwMDlCCis6MTAyRDQwMDAxMDYyMDAwNTI0MDIwMDA2MTQ2MjAwMEMzQzAyMDExMTBFCis6MTAyRDUwMDAwQTAwMDIyNzAwODIxMDI1M0MwMjAwMTEwMDgyMTAyNTgzCis6MTAyRDYwMDBBRjQyMTAwMDI0MDIwMDAxMEEwMDAyMkVBRjgyMDAwQ0M0Cis6MTAyRDcwMDAwMDgyMTAyNUFGNDIxMDAwQUY4MDAwMEMwMDAwMDAwMDYwCis6MTAyRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDU4Cis6MTAyRDkwMDA4RjgyMDAwQzEwNDAwMDA0MDAwMDAwMDA4RjQyMTAwMEUxCis6MTAyREEwMDAwNDQxRkZGRTAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEY2Cis6MTAyREIwMDA4RjgyMDAxMDI0NDNGODAwMDAwMjI5QzIyNEEyRkZGMEYxCis6MTAyREMwMDAyQzYzMDMwMTEwNjAwMDAzMDAwMjEwNDIwQTAwMDI1NTQ4Cis6MTAyREQwMDBBQzgyMDAwMDhGODMwMDE4MDBBMzEwMkIxNDQwMDAwQjVFCis6MTAyREUwMDAwMDAwMzgyMTAwQTMxMDIzMjQ0NjAwMDE4RjgyMDAxQzFDCis6MTAyREYwMDAwMDYyMTAyMTI0NDJGRkZGMDA0NTEwMkI1NDQwMDAwNEM0Cis6MTAyRTAwMDAyNDAyRkZGRjBBMDAwMjU1QUM4NjAwMDAyNDAyRkZGRkU3Cis6MTAyRTEwMDAwQTAwMDI1QUFDODIwMDAwOEM4MjAwMDAzQzAzMDgwMEM5Cis6MTAyRTIwMDAyNDYzMUM1QzAwMDIxMTQwMDA0MzM4MjEwM0UwMDAwOEM5Cis6MTAyRTMwMDAwMEUwMTAyMTNDMDkwODAwOEQyOTFEODAwMDA0NTE0MDRDCis6MTAyRTQwMDAzQzE5MDgwMDI3MzkxQzVDMDBDMDc4MjEwMDgwNjAyMUYzCis6MTAyRTUwMDAyNDBFRkZGRjAwMDAzODIxMDE1OTQwMjExMTIwMDAzNkM3Cis6MTAyRTYwMDAwMDAwMzAyMTNDMTgwODAwMjcxODFEOTgzQzBEMDgwMDcwCis6MTAyRTcwMDAyNUFEMUQ5QzAwMEY1ODJCMDAwNjExODAwMDQ2MTAyMTI3Cis6MTAyRTgwMDAwMDAyMThDMDAwNzgxMDIxOEM0MjAwMDAxNTgyMDAyMDNBCis6MTAyRTkwMDAwMDZEMjAyMThDQTIwMDAwNTQ0MDAwMDk4RDAyMDAxODEyCis6MTAyRUEwMDAzQzAyMDgwMDhDNDIxRDg0MjQ0MjAwMDFBQzgyMDAwMEQ4Cis6MTAyRUIwMDAzQzAxMDgwMEFDMjIxRDg0MEEwMDAyQ0YwMDAwMjAyMTQyCis6MTAyRUMwMDA4RjQ3MDAyMDAwMDAzMDIxMDAwMjExQzAxMTYwMDA0QTJECis6MTAyRUQwMDBBRjQyMDAyMDhEMDgwMDFDM0MwOTAwMDg4Q0EzMDAwMEI0Cis6MTAyRUUwMDAwMDY2MTgyMTAwMDMxODgwMDA3QTEwMjEwMDQ5MTAyMTgzCis6MTAyRUYwMDA4QzQ0MDAwMDI0QzYwMDAxMDA2ODE4MjEwMENGMTAyQjZDCis6MTAyRjAwMDAxNDQwRkZGNkFDNjQwMDAwMEEwMDAyQ0QwMDAwMDAwMDhGCis6MTAyRjEwMDA4Qzg0MDAwMDAwOEUxMDJCNTA0MDAwMDQyNEM2MDAwMTU5Cis6MTAyRjIwMDAwMDgwNzAyMTAwQzAzODIxMjRDNjAwMDEwMEM5MTAyQjg4Cis6MTAyRjMwMDAxNDQwRkZEMjAwMDYxMTgwMjQwMjAwMDFBQ0EyMDAwMDYwCis6MTAyRjQwMDAzQzAyMDgwMDhDNDIxRDdDM0MwMzA4MDA4QzYzMUQ4MDAxCis6MTAyRjUwMDAwMDQzMTAyQjE0NDAwMDJBMjQwNEZGRkUwMTU5MTAyMUM1Cis6MTAyRjYwMDA4QzQyMDAxODEwNDAwMDI2MjQwNEZGRkYwMDA3MjE4MDM3Cis6MTAyRjcwMDAzQzA1MDgwMDhDQTUxRDg0MDA4NzIwMjE4RDA2MDAxOEMzCis6MTAyRjgwMDAwMDA0MjBDMDNDMDIwODAwMjQ0MjFEOTgwMDgyMTAyMTQ5Cis6MTAyRjkwMDAzQzAzMDgwMDI0NjMxRDlDQUM0QzAwMDAyNEE1MDAwMUU4Cis6MTAyRkEwMDAwMDgzMTgyMTNDMDIwODAwMjQ0MjFEQTBBQzY1MDAwMEVCCis6MTAyRkIwMDAwMDA2MzFDMDNDMDEwODAwQUMyNTFEODQwMDgyMjAyMUEwCis6MTAyRkMwMDA4RjQ3MDAyMEFEMDQwMDFDQUY0NjAwMjAxMUUwMDAwQTJFCis6MTAyRkQwMDAwMDAwMzAyMTNDMDIwMDA4MDM0MjI4MjE4Q0EyMDAwMDlFCis6MTAyRkUwMDAyNEM2MDAwMTAwQ0YxODJCQUM4MjAwMDAyNEE1MDAwNEU5Cis6MTAyRkYwMDAxNDYwRkZGQTI0ODQwMDA0QUY0NzAwMjAwMDAwMjAyMTYxCis6MTAzMDAwMDAwM0UwMDAwODAwODAxMDIxMzA4NEZGRkYzMEM2RkZGRjdFCis6MTAzMDEwMDAwMDA1MkMwMDAwQTYyODI1Mzg4MkZGRkYwMDQ1MTAyMTVFCis6MTAzMDIwMDAwMDQ1MjgyQjAwNDUxMDIxMDAwMjFDMDIzMDQyRkZGRjAyCis6MTAzMDMwMDAwMDQzMTAyMTAwMDIxQzAyMzA0MkZGRkYwMDQzMTAyMTE4Cis6MTAzMDQwMDAzODQyRkZGRjAzRTAwMDA4MzA0MkZGRkYyN0JERkZDODAyCis6MTAzMDUwMDBBRkJGMDAzMEFGQjMwMDJDQUZCMjAwMjhBRkIxMDAyNDM3Cis6MTAzMDYwMDBBRkIwMDAyMDNDMDQ2MDA4OEM4MjUwMDAyNDAzRkY3RjM2Cis6MTAzMDcwMDAzQzA2NjAwMDAwNDMxMDI0MzQ0MjM4MENBQzgyNTAwMEZGCis6MTAzMDgwMDA4Q0MyNEMxQzNDMUE4MDAwMDAwMjE2MDIzMDQyMDAwRjE5Cis6MTAzMDkwMDAxMDQwMDAwN0FGODIwMDFDOENDMzRDMUMzQzAyMDAxRjc4Cis6MTAzMEEwMDAzNDQyRkMwMDAwNjIxODI0MDAwMzE5QzJBRjgzMDAxOEU4Cis6MTAzMEIwMDA4RjQyMDAwODI3NUI0MDAwMzQ0MjAwMDFBRjQyMDAwODA1Cis6MTAzMEMwMDBBRjgwMDAyNDNDMDI2MDFDQUY0MDAwODBBRjQwMDA4NDExCis6MTAzMEQwMDA4QzQ1MDAwODhDQzMwODA4MzQwMjgwMDAwMzQyMjAyMTdDCis6MTAzMEUwMDAyNDAyRkZGMDAwNjIxODI0M0MwMjAwODAzQzAxMDgwMDJBCis6MTAzMEYwMDBBQzIyMDQyMDNDMDI1NzA5QUY4NDAwMzgxNDYyMDAwNDVCCis6MTAzMTAwMDBBRjg1MDAzNDI0MDIwMDAxMEEwMDAzMTRBRjgyMDAxNENBCis6MTAzMTEwMDBBRjgwMDAxNDI0MDMwMDNEMjQwMjAwMDQzQzAxMDgwMDk5Cis6MTAzMTIwMDBBQzIyMUQ5NDNDMDEwODAwQUMyMzFEOTAzQzAxMDgwMDFBCis6MTAzMTMwMDBBQzIzMUQ4QzNDMDEwODAwQUMyMzFEODgzQzEzMDgwMDA3Cis6MTAzMTQwMDAyNjczMUM1QzI0MDQwMDA0M0MwMjA4MDAyNDQyMUM3NDA2Cis6MTAzMTUwMDAyNDAzMDAwODI0NjNGRkZGQUM0MDAwMDRBQzQwMDAwMERGCis6MTAzMTYwMDAwNDYxRkZGQzI0NDIwMDIwMDAwNDEwQzAwMDQ0MTAyMTMwCis6MTAzMTcwMDAyNDQyMDAzRDNDMDEwODAwQUMyMjFEOTAyNDAyMDAwMUM1Cis6MTAzMTgwMDAzQzAxMDgwMEFDMjIxRDdDMjQwMkZGRkYzQzAxMDgwMDJBCis6MTAzMTkwMDBBQzIyMUQ5ODNDMDEwODAwQUMyMDFEODQ4RjQyMDAwMDI5Cis6MTAzMUEwMDAzODQyMDAwMTMwNDIwMDAxMTQ0MEZGRkM4RjgyMDAxNEJECis6MTAzMUIwMDAxMDQwMDAxNjAwMDAwMDAwOTc0MjAxMDQxMDQwMDAwNTc2Cis6MTAzMUMwMDA4RjgzMDAwMDE0NjAwMDA3MjQ2MkZGRkYwQTAwMDM0Qjk2Cis6MTAzMUQwMDAyQzYyMDAwQTJDNjIwMDEwNTA0MDAwMDQ4RjgzMDAwMDEzCis6MTAzMUUwMDAyNDYyMDAwMUFGODIwMDAwOEY4MzAwMDAyQzYyMDAwQTdECis6MTAzMUYwMDAxNDQwMDAwMzJDNjIwMDA3MEEwMDAzNTJBRjgwRkZDQzhBCis6MTAzMjAwMDAxMDQwMDAwMjI0MDIwMDAxQUY4MkZGQ0M4RjQzMDEwODZFCis6MTAzMjEwMDA4RjQ0MDEwMDMwNjIyMDAwQUY4MzAwMDQxMDQwMDAwODlBCis6MTAzMjIwMDBBRjg0MDAxMDNDMDIwODAwOEM0MjA0MkMyNDQyMDAwMUIwCis6MTAzMjMwMDAzQzAxMDgwMEFDMjIwNDJDMEEwMDA2RDczQzAyNDAwMEU2Cis6MTAzMjQwMDAzMDY1MDIwMDE0QTAwMDAzMjQwMjBGMDAxNDgyMDMwOTU5Cis6MTAzMjUwMDAyNDAyMEQwMDk3NDIwMTA0MTA0MDAzNzEzQzAyNDAwMDFCCis6MTAzMjYwMDAzMDYyNDAwMDE0NDAwMEFEOEY4MjAwMzg4QzQ0MDAwODZBCis6MTAzMjcwMDA4RjQyMDE3ODA0NDBGRkZFMjQwMjA4MDBBRjQyMDE3ODJCCis6MTAzMjgwMDAyNDAyMDAwOEE3NDIwMTQwQTc0MDAxNDI5NzQyMDEwNERFCis6MTAzMjkwMDA4Rjg0MDAwNDMwNTFGRkZGMzA4MjAwMDExMDQwMDAwNzhFCis6MTAzMkEwMDAwMjIwODAyMTI2MjNGRkZFMjQwMjAwMDIzMDcwRkZGRjRGCis6MTAzMkIwMDBBNzQyMDE0NjBBMDAwMzdGQTc0MzAxNDhBNzQwMDE0NkYxCis6MTAzMkMwMDAzQzAyMDgwMDhDNDIwNDNDMTQ0MDAwMEQ4RjgzMDAxMDI3Cis6MTAzMkQwMDAzMDgyMDAyMDE0NDAwMDAyMjQwMzAwMDkyNDAzMDAwMTZFCis6MTAzMkUwMDAwMDYwMjAyMThGODMwMDEwMjQwMjA5MDA1MDYyMDAwMTM5Cis6MTAzMkYwMDAzNDg0MDAwNEE3NDQwMTRBMEEwMDAzOUEwMDAwMDAwMDM1Cis6MTAzMzAwMDAyNDAyMEYwMDE0NjIwMDA1MzA4MjAwMjAxNDQwMDAwNkUxCis6MTAzMzEwMDAyNDAzMDAwRDBBMDAwMzk5MjQwMzAwMDUxNDQwMDAwMjUxCis6MTAzMzIwMDAyNDAzMDAwOTI0MDMwMDAxQTc0MzAxNEEzQzAyMDgwMENBCis6MTAzMzMwMDA4QzQyMDQyMDNDMDQwMDQ4MEUwMDAyMEEwMDQ0MjAyNTcwCis6MTAzMzQwMDAwRTAwMDIzMzAwMDAwMDAwOEY4MjAwMEMxMDQwMDAzRThGCis6MTAzMzUwMDAwMDAwMDAwMDhGNDIxMDAwM0MwMzAwMjAwMDQzMTAyNEI2Cis6MTAzMzYwMDAxMDQwMDAzOThGODIwMDA0MzA0MjAwMDIxMDQwMDAzNkM1Cis6MTAzMzcwMDAwMDAwMDAwMDk3NDIxMDE0MTQ0MDAwMzMwMDAwMDAwMEM5Cis6MTAzMzgwMDA5NzQyMTAwODhGODgwMDM4MzA0MkZGRkYyNDQyMDAwNjIxCis6MTAzMzkwMDAwMDAyMTg4MjAwMDMzODgwMDBFODMwMjEzMDQzMDAwMTI5Cis6MTAzM0EwMDA4Q0M0MDAwMDEwNjAwMDA0MzA0MjAwMDMwMDAwMDAwREQ3Cis6MTAzM0IwMDAwQTAwMDNEQjAwRTgxMDIxNTQ0MDAwMTAzMDg0RkZGRkI2Cis6MTAzM0MwMDAzQzA1RkZGRjAwODUyMDI0MDA4NTE4MjYwMDAzMTgyQkVDCis6MTAzM0QwMDAwMDA0MTAyQjAwNDMxMDI0MTA0MDAwMDUwMDAwMDAwMEUyCis6MTAzM0UwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDIxQzhFCis6MTAzM0YwMDA4Q0MyMDAwMDBBMDAwM0RBMDA0NTIwMjUzODgzRkZGRjU1Cis6MTAzNDAwMDAwMDAzMTgyQjAwMDQxMDJCMDA0MzEwMjQxMDQwMDAwNTZCCis6MTAzNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDlGCis6MTAzNDIwMDAyNDAwMDIyNThDQzIwMDAwMzQ0NEZGRkYwMEU4MTAyMTc0Cis6MTAzNDMwMDBBQzQ0MDAwMDNDMDIwODAwOEM0MjA0MzAyNDQyMDAwMUVECis6MTAzNDQwMDAzQzAxMDgwMEFDMjIwNDMwOEY2MjAwMDA4Rjg0MDAzOEY5Cis6MTAzNDUwMDBBRjgyMDAwODhDODMwMDAwMzQwMkZGRkYxNDYyMDAwRjZCCis6MTAzNDYwMDAwMDAwMTAyMTNDMDUwODAwOENBNTA0NTQzQzA0MDgwMDExCis6MTAzNDcwMDA4Qzg0MDQ1MDAwQjAyODIxMDBCMDMwMkIwMDgyMjAyMTIxCis6MTAzNDgwMDAwMDg2MjAyMTNDMDEwODAwQUMyNTA0NTQzQzAxMDgwMEMyCis6MTAzNDkwMDBBQzI0MDQ1MDBBMDAwNkNEMjQwNDAwMDg4QzgyMDAwMEVECis6MTAzNEEwMDAzMDQyMDEwMDEwNDAwMDBGMDAwMDEwMjEzQzA1MDgwMEQwCis6MTAzNEIwMDA4Q0E1MDQ0QzNDMDQwODAwOEM4NDA0NDgwMEIwMjgyMUVFCis6MTAzNEMwMDAwMEIwMzAyQjAwODIyMDIxMDA4NjIwMjEzQzAxMDgwMDIyCis6MTAzNEQwMDBBQzI1MDQ0QzNDMDEwODAwQUMyNDA0NDgwQTAwMDZDRDhECis6MTAzNEUwMDAyNDA0MDAwODNDMDUwODAwOENBNTA0NDQzQzA0MDgwMEEyCis6MTAzNEYwMDA4Qzg0MDQ0MDAwQjAyODIxMDBCMDMwMkIwMDgyMjAyMUIxCis6MTAzNTAwMDAwMDg2MjAyMTNDMDEwODAwQUMyNTA0NDQzQzAxMDgwMDUxCis6MTAzNTEwMDBBQzI0MDQ0MDBBMDAwNkNEMjQwNDAwMDg4RjYyMDAwODkxCis6MTAzNTIwMDA4RjYyMDAwMDAwMDIxNjAyMzA0MzAwRjAyNDAyMDAzMEQ3Cis6MTAzNTMwMDAxMDYyMDAwNTI0MDIwMDQwMTA2MjAxNkI4RjgyMDAyMDlGCis6MTAzNTQwMDAwQTAwMDZENTI0NDIwMDAxMTRBMDAwMDUwMDAwMDAwMDc2Cis6MTAzNTUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI1MEU4Cis6MTAzNTYwMDA4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDAwRTAwMDIzQjg1Cis6MTAzNTcwMDAyN0E0MDAxMDE0NDAwMDA1MDA0MDgwMjEwMDAwMDAwMDM2Cis6MTAzNTgwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyNTc4RTAyMDAwMDIxCis6MTAzNTkwMDAxMDQwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREM5Cis6MTAzNUEwMDAwMDAwMDAwMDI0MDAwMjVBOEY2MjAwMEMwNDQzMDAwMzU0Cis6MTAzNUIwMDAyNDAyMDAwMTBBMDAwNTVEQUUwMDAwMDBBRTAyMDAwMDFBCis6MTAzNUMwMDA4RjgyMDAzODhDNDUwMDA4QTIwMDAwMDc4RjY1MDAwQzMwCis6MTAzNUQwMDA4RjY0MDAwNDMwQTNGRkZGMDAwNDI0MDIwMDg1MjAyMzMxCis6MTAzNUUwMDAzMDgyMDBGRjAwNDMxMDIxMjQ0MjAwMDUwMDAyODg4MzNFCis6MTAzNUYwMDAyRTIyMDA4MUE2MDUwMDBBMTQ0MDAwMDVBMjA0MDAwNDQyCis6MTAzNjAwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI3MjE1Cis6MTAzNjEwMDAzQzA3MDgwMDhDRTcxRDgwOEZBODAwMTAyNDA5RkZGRkRECis6MTAzNjIwMDAwMDAwNTAyMTEwRTAwMDEzMDAwMDMwMjEzQzBDMDgwMDg1Cis6MTAzNjMwMDAyNThDMUQ5QzAxODAyODIxMDAwMDE4MjE4Q0EyRkZGQ0Y0Cis6MTAzNjQwMDA1MTAyMDAyRjAwNkMxODIxOENBNDAwMDAyNDYzMDIwODkyCis6MTAzNjUwMDAwMDg5MTAyQjEwNDAwMDAzMjRBNTAyMDgwMDgwNDgyMTk3Cis6MTAzNjYwMDAwMEMwNTAyMTI0QzYwMDAxMDBDNzEwMkI1NDQwRkZGNEI1Cis6MTAzNjcwMDA4Q0EyRkZGQzNDMDUwODAwOENBNTFEODAzQzAyMDgwMEM0Cis6MTAzNjgwMDA4QzQyMUQ3QzNDMDkwODAwMjUyOTFDNjAzQzAzMDgwMDc1Cis6MTAzNjkwMDAyNDYzMUQ5ODAwQTIxMDJCM0MwQzA4MDAyNThDMUQ5QzU3Cis6MTAzNkEwMDAzQzA0MDgwMDhDODQxRDg0M0MwQjA4MDAyNTZCMURBMDg1Cis6MTAzNkIwMDAxMDQwMDAxQTAwMDgzMTQwMDAwNTExODAwMDQ1MTAyMTFCCis6MTAzNkMwMDAwMDAyMTBDMDAwQzkzODIxMjQ4NDAwMDEwMDRCMzAyMUMxCis6MTAzNkQwMDAwMDQzMTgyMTI0QTUwMDAxMDA0QzEwMjFBQzY4MDAwMDEzCis6MTAzNkUwMDBBQ0U2MDAxODNDMDEwODAwQUMyNDFEODRBQzQ0MDAwMDhBCis6MTAzNkYwMDAzQzAxMDgwMEFDMjUxRDgwMEEwMDA0QTg4RTA0MDAxQ0IzCis6MTAzNzAwMDAzQzAyMDgwMDhDNDIxRDg0MjQ0MjAwMDEzQzAxMDgwMDU4Cis6MTAzNzEwMDBBQzIyMUQ4NDBBMDAwNEE3QUM2MjAwMDAwMDBBMTE4MERDCis6MTAzNzIwMDAwMDRBMTAyMTAwMDIxMEMwMDA0MzI4MjE4Q0EzMDAwMDkxCis6MTAzNzMwMDAwMDRDMzgyMTI0ODQwMDAxMDAwMzE5NDAwMEM5MzAyMUM1Cis6MTAzNzQwMDAwMDY5MTgyMTAwNEIxMDIxQUNBODAwMDBBQzYwMDAxOEUzCis6MTAzNzUwMDAzQzAxMDgwMEFDMjQxRDg0QUNDMjAwMThBQ0U0MDAwMDlECis6MTAzNzYwMDA4RTA0MDAxQzhGODUwMDM4MEUwMDA2RTcwMjIwMzAyMUYxCis6MTAzNzcwMDA4RjYyMDAwNDhGNDMwMTA4QTYwMjAwMDgzQzAyMTAwMDdCCis6MTAzNzgwMDAwMDYyMTgyNDEwNjAwMDA4MDAwMDAwMDA5NzQyMDEwNDQ1Cis6MTAzNzkwMDA5MjAzMDAwNzI0NDJGRkVDMzQ2MzAwMDIzMDQ1RkZGRjMwCis6MTAzN0EwMDAwQTAwMDRCQ0EyMDMwMDA3OTc0MjAxMDQyNDQyRkZGMDcwCis6MTAzN0IwMDAzMDQ1RkZGRjk2MDYwMDA4MkNDMjAwMTM1NDQwMDAwNTU4Cis6MTAzN0MwMDA5MjAzMDAwNzkyMDIwMDA3MzQ0MjAwMDFBMjAyMDAwN0EwCis6MTAzN0QwMDA5MjAzMDAwNzI0MDIwMDAxMTA2MjAwMDUyNDAyMDAwMzg2Cis6MTAzN0UwMDAxMDYyMDAwQjMwQzdGRkZGMEEwMDA0REIyNEUyMDAwMjc2Cis6MTAzN0YwMDA4RjgyMDAzODNDMDRGRkZGOEM0MzAwMEMwMDY0MTgyNEM3Cis6MTAzODAwMDAwMDY1MTgyNUFDNDMwMDBDMEEwMDA0REEzMEM3RkZGRjNFCis6MTAzODEwMDA4RjgyMDAzODNDMDRGRkZGOEM0MzAwMTAwMDY0MTgyNEEyCis6MTAzODIwMDAwMDY1MTgyNUFDNDMwMDEwMzBDN0ZGRkYyNEUyMDAwMkZBCis6MTAzODMwMDAwMDAyMTA4M0EyMDIwMDA1OEY4MzAwMzgzMDQyMDBGRjhGCis6MTAzODQwMDAwMDAyMTA4MDAwNDMzMDIxOENDNTAwMDA4Q0MyMDAwMEIzCis6MTAzODUwMDAyNDAzMDAwNDAwMDIxNzAyMTQ0MzAwMTMwMDAwMDAwMEI4Cis6MTAzODYwMDA5NzQyMDEwNDNDMDNGRkZGMDBBMzE4MjQzMDQyRkZGRkVFCis6MTAzODcwMDAwMDQ3MTAyMzI0NDJGRkZFMDA2MjI4MjVBQ0M1MDAwMDRCCis6MTAzODgwMDA5MjA0MDAwNThFMDMwMDFDMzA4MjAwRkYwMDAyMTA4MEFECis6MTAzODkwMDAwMDQzMTAyMTkwNDIwMDAwMzA0MjAwMEYwMDQ0MTAyMUVDCis6MTAzOEEwMDAwQTAwMDUxMEEyMDIwMDA2OENDNDAwMDQ5NzQyMDEwNDFECis6MTAzOEIwMDA5NjAzMDAwQTMwODVGRkZGMzA0MkZGRkYwMDQ3MTAyM0M4Cis6MTAzOEMwMDAyNDQyRkZENjAwMDIxNDAwMDBBMjI4MjVBQ0M1MDAwNDQzCis6MTAzOEQwMDA5MjAyMDAwNzkyMDQwMDA1MjQ2MzAwMjgwMDAzMTg4MzY1Cis6MTAzOEUwMDAwMDY0MTgyMTM0NDIwMDA0QTIwMzAwMDZBMjAyMDAwNzZCCis6MTAzOEYwMDA4RjgyMDAwNDI0MDNGRkZCMzQ0MjAwMDIwMDQzMTAyNEEzCis6MTAzOTAwMDBBRjgyMDAwNDkyMDMwMDA2OEUwNzAwMUM4Rjg2MDAzOEU5Cis6MTAzOTEwMDAwMDAzMTg4MDAwNjcxMDIxOEM0NDAwMEMzQzAyRkZGNjY1Cis6MTAzOTIwMDAzNDQyRkZGRjAwODIyODI0MDA2NjE4MjFBRTA0MDAwQ0Y4Cis6MTAzOTMwMDBBQzY1MDAwQzkyMDMwMDA2OEUwNDAwMEMzQzAyRkY3Rjc1Cis6MTAzOTQwMDAzNDQyRkZGRjAwMDMxODgwMDBBMjI4MjQwMDgyMjAyNEI0Cis6MTAzOTUwMDAwMDY3MTgyMUFFMDQwMDBDQUM2NTAwMEM5MjAyMDAwNjUyCis6MTAzOTYwMDAwMDAyMTA4MDAwNDcxMDIxOTQ0NTAwMTJBQzQ1MDAxMDYxCis6MTAzOTcwMDA5MjAyMDAwNjAwMDIxMDgwMDA0NjEwMjFBQzQ1MDAxMEEzCis6MTAzOTgwMDA4RkEyMDAxMDkyMDMwMDA1MDAwMjExNDAwMDAzMTg4MDZFCis6MTAzOTkwMDAwMDY3MTgyMTAwNTMyMDIxOEM2MjAwMDQ4QzgzMDAxOERBCis6MTAzOUEwMDAxNDYwMDAwRUFFMDIwMDE0M0MwMzA4MDA4QzYzMUQ4Q0YyCis6MTAzOUIwMDBBQzgzMDAxODNDMDIwODAwOEM0MjFEOTAwMDYyMTAyQjYyCis6MTAzOUMwMDAxMDQwMDAxOTAwMDAwMDAwM0MwMjA4MDA4QzQyMUQ5NEM5Cis6MTAzOUQwMDAwMDYyMTAyMTNDMDEwODAwQUMyMjFEOEM4RTAyMDAxOEYwCis6MTAzOUUwMDA4RjQ4MDAyMDAwMDAzMDIxMDAwMjExQzAxMjIwMDAwQjdGCis6MTAzOUYwMDBBRjQyMDAyMDNDMDIwMDA4MDM0MjI4MjEwMEUwMjAyMUMxCis6MTAzQTAwMDA4QzgyMDAwMDI0QzYwMDAxMDBEMTE4MkJBQ0EyMDAwMDVCCis6MTAzQTEwMDAyNDg0MDAwNDE0NjBGRkZBMjRBNTAwMDRBRjQ4MDAyMEE5Cis6MTAzQTIwMDAwQTAwMDU1RTI0MDIwMDEwMDAwMDAwMDAwMDAwMDAwREU2Cis6MTAzQTMwMDAwMDAwMDAwMDI0MDAwMkQ0MjQwMjAwMTBBNzQyMDE0MDJDCis6MTAzQTQwMDAyNDAyMDAwMkE3NDAwMTQyQTc0MDAxNDRBNzQyMDE0NkM4Cis6MTAzQTUwMDA5NzQyMDEwNDNDMDQwMDA4MjQ0MkZGRkVBNzQyMDE0OEFCCis6MTAzQTYwMDAyNDAyMDAwMTBFMDAwMjBBQTc0MjAxNEE5NjAzMDAwQTNFCis6MTAzQTcwMDA5MjAyMDAwNDAwNDMxMDIxMjQ0MjAwMDIzMDQyMDAwNzU5Cis6MTAzQTgwMDAwMDAyMTAyMzMwNDIwMDA3MEUwMDAyMzNBRTAyMDAxMDg1Cis6MTAzQTkwMDA4RjYyMDAwMDNDMDMwODAwOEM2MzA0NDQyNDA0MDAxMDdGCis6MTAzQUEwMDBBRjgyMDAwODk3NDIwMTA0MzA0MkZGRkYyNDQyRkZGRTJDCis6MTAzQUIwMDAwMDQwMzgyMTAwMDIzN0MzM0MwMjA4MDA4QzQyMDQ0MDE5Cis6MTAzQUMwMDAwMDY3MTgyMTAwNjcyODJCMDA0NjEwMjEwMDQ1MTAyMUFGCis6MTAzQUQwMDAzQzAxMDgwMEFDMjMwNDQ0M0MwMTA4MDBBQzIyMDQ0MDMzCis6MTAzQUUwMDAwQTAwMDY2MjAwMDAwMDAwMTRBMDAwMDUwMDAwMDAwMEFCCis6MTAzQUYwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMwNDhFCis6MTAzQjAwMDA4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDAwRTAwMDIzQkRGCis6MTAzQjEwMDAyN0E0MDAxNDE0NDAwMDA1MDA0MDgwMjEwMDAwMDAwMDhDCis6MTAzQjIwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMEI5MjA2MDAwNEJBCis6MTAzQjMwMDA4RkE0MDAxNDI3QTUwMDE4MDAwNjMwODIwRTAwMDI1QzM2Cis6MTAzQjQwMDBBRkEwMDAxODUwNDAwMDA2OEUwMjAwMDAwMDAwMDAwMEU4Cis6MTAzQjUwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMTE4RTAyMDAwMDkwCis6MTAzQjYwMDA1NDQwMDAwNjkyMDIwMDA3MDAwMDAwMDAwMDAwMDAwRDEzCis6MTAzQjcwMDAwMDAwMDAwMDI0MDAwMzE2OTIwMjAwMDczMDQyMDAwNEY3Cis6MTAzQjgwMDAxMDQwMDAwNThGODIwMDA0MjQwM0ZGRkIzNDQyMDAwMjMyCis6MTAzQjkwMDAwMDQzMTAyNEFGODIwMDA0OEY2MjAwMDQwNDQzMDAwOTM0Cis6MTAzQkEwMDA5MjAyMDAwNzkyMDIwMDA2OEUwMzAwMUM4RTA0MDAwQzk1Cis6MTAzQkIwMDAwMDAyMTA4MDAwNDMxMDIxQUM0NDAwMENBRTAwMDAwMDU1Cis6MTAzQkMwMDA5MjAyMDAwNzMwNDIwMDA0NTQ0MDAwMEI5MjAzMDAwNEFDCis6MTAzQkQwMDA5MjAzMDAwNThFMDQwMDE0OEUwNTAwMUMwMDAzMTg4MDVCCis6MTAzQkUwMDAzQzAyMDAwMTAwODIyMDIxMDA2NTE4MjFBRTA0MDAxNDZGCis6MTAzQkYwMDBBQzY0MDAwNDkyMDMwMDA0OTYwMjAwMEEwMDYyMTAyMUUzCis6MTAzQzAwMDAyNDQyMDAwNTAwMDI5MDgzOEZBMjAwMTgxMDQwMDAwRDhFCis6MTAzQzEwMDAyNzcxMDAwODhGQTQwMDE0MDAwMzEwODIwMjQyMzAyMzkxCis6MTAzQzIwMDAyN0E1MDAxODBFMDAwMjVDQUZBMjAwMTg1MDQwMDAwNjQ1Cis6MTAzQzMwMDA4RTA1MDAxQzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMEM4Cis6MTAzQzQwMDAyNDAwMDMzRjhFMDUwMDFDMDIyMDIwMjEwRTAwMDZFNzAxCis6MTAzQzUwMDAwMjQwMzAyMTkyMDQwMDA2OEY2NTAwMDQzQzAyN0ZGRjgxCis6MTAzQzYwMDAwMDA0MjA4MDAwOTEyMDIxOEM4MzAwMDQzNDQyRkZGRjU3Cis6MTAzQzcwMDAwMEEyMjgyNDAwNjUxODIxQUM4MzAwMDQ5MjAyMDAwN0VBCis6MTAzQzgwMDA5MjAzMDAwNDkyMDUwMDA1MzA0MjAwMDQxMDQwMDAxNDI1Cis6MTAzQzkwMDA5NjA3MDAwODMwQTUwMEZGMDAwNTI4ODAwMEIxMjgyMTA0Cis6MTAzQ0EwMDA4Q0E0MDAwNDk3NDIwMTA0OTYwNjAwMEEzMDYzMDBGRkNBCis6MTAzQ0IwMDAzMDQyRkZGRjAwNDMxMDIxMDA0NjEwMjEzMEUzRkZGRjk4Cis6MTAzQ0MwMDAwMDQzMTAyMzI0NDJGRkQ4MzA4NEZGRkYwMDAyMTQwMDc5Cis6MTAzQ0QwMDAwMDgyMjAyNUFDQTQwMDA0MEEwMDA2MTY5MjAzMDAwNzA3Cis6MTAzQ0UwMDAzMEE1MDBGRjAwMDUyODgwMDBCMTI4MjE4Q0E0MDAwMDI5Cis6MTAzQ0YwMDA5NzQyMDEwNDMwNjMwMEZGMzA0MkZGRkYwMDQzMTAyMTcwCis6MTAzRDAwMDAwMDQ3MTAyMzNDMDNGRkZGMDA4MzIwMjQzMDQyRkZGRkM1Cis6MTAzRDEwMDAwMDgyMjAyNUFDQTQwMDAwOTIwMzAwMDcyNDAyMDAwMUM5Cis6MTAzRDIwMDAxMDYyMDAwNjAwMDAwMDAwMjQwMjAwMDMxMDYyMDAxMTZGCis6MTAzRDMwMDAwMDAwMDAwMDBBMDAwNjM5OEUwMzAwMTA5NzQyMDEwNEJCCis6MTAzRDQwMDA5MjAzMDAwNDk2MDUwMDBBOEUyNDAwMEMwMDQzMTAyMTAzCis6MTAzRDUwMDAwMDQ1MTAyMTI0NDJGRkYyM0MwM0ZGRkYwMDgzMjAyNDkyCis6MTAzRDYwMDAzMDQyRkZGRjAwODIyMDI1QUUyNDAwMEMwQTAwMDYzOUY1Cis6MTAzRDcwMDA4RTAzMDAxMDk3NDIwMTA0OTIwMzAwMDQ5NjA1MDAwQTg2Cis6MTAzRDgwMDA4RTI0MDAxMDAwNDMxMDIxMDA0NTEwMjEyNDQyRkZFRTM0Cis6MTAzRDkwMDAzQzAzRkZGRjAwODMyMDI0MzA0MkZGRkYwMDgyMjAyNUU4Cis6MTAzREEwMDBBRTI0MDAxMDhFMDMwMDEwMjQwMjAwMEFBNzQyMDE0MDM2Cis6MTAzREIwMDBBNzQzMDE0Mjk2MDMwMDBBOTIwMjAwMDQzQzA0MDA0MDFCCis6MTAzREMwMDAwMDQzMTAyMUE3NDIwMTQ0QTc0MDAxNDY5NzQyMDEwNDQ1Cis6MTAzREQwMDBBNzQyMDE0ODI0MDIwMDAxMEUwMDAyMEFBNzQyMDE0QTNDCis6MTAzREUwMDAwRTAwMDIzMzAwMDAwMDAwOEY2MjAwMDA5MjAzMDAwNDA2Cis6MTAzREYwMDAwMDAwMjAyMUFGODIwMDA4OTc0MjAxMDQ5NjA2MDAwQUM1Cis6MTAzRTAwMDAzMDQyRkZGRjAwNjIxODIxMDA2MDI4MjEzQzAzMDgwMEI3Cis6MTAzRTEwMDA4QzYzMDQ0NDNDMDIwODAwOEM0MjA0NDAwMDY1MTgyMTc1Cis6MTAzRTIwMDAwMDQ0MTAyMTAwNjUzODJCMDA0NzEwMjEzQzAxMDgwMDk4Cis6MTAzRTMwMDBBQzIzMDQ0NDNDMDEwODAwQUMyMjA0NDA5MjA0MDAwNDdBCis6MTAzRTQwMDAwMDg2MjAyMTI0ODQwMDBBMzA4NEZGRkYwRTAwMDFFNzUxCis6MTAzRTUwMDAwMDAwMDAwMDk3NDQwMTA0MzA4NEZGRkYwRTAwMDFGNUNDCis6MTAzRTYwMDAwMDAwMDAwMDNDMDIxMDAwQUY0MjAxNzgwQTAwMDZENEI2Cis6MTAzRTcwMDA4RjgyMDAyMDE0ODIwMDI3MzA2MjAwMDY5NzQyMDEwNERFCis6MTAzRTgwMDAxMDQwMDA2NzNDMDI0MDAwMzA2MjQwMDAxMDQwMDAwNUQ2Cis6MTAzRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDE1Cis6MTAzRUEwMDAyNDAwMDQxQThGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMDE3Cis6MTAzRUIwMDBBRjQyMDE3ODI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0MjE2Cis6MTAzRUMwMDA4RjgyMDAwNDk3NDMwMTA0MzA0MjAwMDExMDQwMDAwNzM0Cis6MTAzRUQwMDAzMDcwRkZGRjI2MDNGRkZFMjQwMjAwMDJBNzQyMDE0NkM2Cis6MTAzRUUwMDBBNzQzMDE0ODBBMDAwNjhDMjQwMjAwMERBNzQwMDE0NkEyCis6MTAzRUYwMDAyNDAyMDAwREE3NDIwMTRBOEY2MjAwMDAyNDA0MDAwODNBCis6MTAzRjAwMDBBRjgyMDAwODBFMDAwMUU3MDAwMDAwMDAwQTAwMDY2NjBDCis6MTAzRjEwMDAwMjAwMjAyMTEwNDAwMDQyM0MwMjQwMDA5MzYyMDAwMDU5Cis6MTAzRjIwMDAzMDQzMDBGMDI0MDIwMDEwMTA2MjAwMDUyNDAyMDA3MEVCCis6MTAzRjMwMDAxMDYyMDAzNThGODIwMDIwMEEwMDA2RDUyNDQyMDAwMTVECis6MTAzRjQwMDA4RjYyMDAwMDk3NDMwMTA0MzA1MEZGRkYzMDcxRkZGRjg0Cis6MTAzRjUwMDA4RjQyMDE3ODA0NDBGRkZFMzIwMjAwMDcwMDAyMTAyMzY2Cis6MTAzRjYwMDAzMDQyMDAwNzI0MDMwMDBBMjYwNEZGRkVBNzQzMDE0MDU1Cis6MTAzRjcwMDBBNzQyMDE0MkE3NDQwMTQ0QTc0MDAxNDZBNzUxMDE0ODc2Cis6MTAzRjgwMDA4RjQyMDEwODMwNDIwMDIwMTQ0MDAwMDIyNDAzMDAwOTNGCis6MTAzRjkwMDAyNDAzMDAwMUE3NDMwMTRBMEUwMDAyMEEzQzA0MDA0MDJBCis6MTAzRkEwMDAwRTAwMDIzMzAwMDAwMDAwM0MwNzA4MDA4Q0U3MDQ0NEM4Cis6MTAzRkIwMDAwMjExMTAyMTI0NDJGRkZFM0MwNjA4MDA4Q0M2MDQ0MDdBCis6MTAzRkMwMDAwMDQwMTgyMTAwRTMzODIxMDAwMDEwMjE4RjY1MDAwMDE3Cis6MTAzRkQwMDAwMEUzNDAyQjAwQzIzMDIxMjYwNDAwMDgwMEM4MzAyMTM1Cis6MTAzRkUwMDAzMDg0RkZGRkFGODUwMDA4M0MwMTA4MDBBQzI3MDQ0NDgzCis6MTAzRkYwMDAzQzAxMDgwMEFDMjYwNDQwMEUwMDAxRTcwMDAwMDAwMDcwCis6MTA0MDAwMDAwQTAwMDY2NjAyMjAyMDIxMEUwMDAxMzkwMDAwMDAwMDhGCis6MTA0MDEwMDA4RjgyMDAyMDI0NDIwMDAxQUY4MjAwMjAzQzAyNDAwMDM5Cis6MTA0MDIwMDBBRjQyMDEzODBBMDAwMzM2MDAwMDAwMDAzMDg0RkZGRjcxCis6MTA0MDMwMDAzMEE1RkZGRjAwMDAxODIxMTA4MDAwMDcwMDAwMDAwMERECis6MTA0MDQwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTY3Cis6MTA0MDUwMDAwQTAwMDZERDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMThBCis6MTA0MDYwMDAxMEMwMDAwNjI0QzZGRkZGOENBMjAwMDAyNEE1MDAwNDk3Cis6MTA0MDcwMDBBQzgyMDAwMDBBMDAwNkU3MjQ4NDAwMDQwM0UwMDAwODg0Cis6MTA0MDgwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDgxCis6MTA0MDkwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjc3Cis6MTA0MEEwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDBBCis6MDQ0MEIwMDAwMDAwMDAwMTBCCis6MEM0MEI0MDAwQTAwMDAyQTAwMDAwMDAwMDAwMDAwMDBDQworOjEwNDBDMDAwMDAwMDAwMEQ3NDc4NzAzNTJFMzAyRTMwNkEzMzAwMDBGOQorOjEwNDBEMDAwMDUwMDAwMDAwMDAwMDAwQTAwMDAwMTM2MDAwMEVBNjA1MAorOjEwNDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwNDExMDAwMDAwMDAwMDAwMDAwMDAxNjAwMDAwMDAwMDAwMDAwMDA4OQorOjEwNDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzODhENAorOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDVEQzAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNDE2MDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQyMgorOjEwNDE3MDAwM0MwMjA4MDAyNDQyMzg2MDNDMDMwODAwMjQ2MzNCMTRERQorOjEwNDE4MDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDRCQgorOjEwNDE5MDAwM0MxRDA4MDAzN0JEN0ZGQzAzQTBGMDIxM0MxMDA4MDA0NworOjEwNDFBMDAwMjYxMDAwQTgzQzFDMDgwMDI3OUMzODYwMEUwMDA0MDc1RAorOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwRDhGODYwMDNDM0MwMzkwMDBEMgorOjEwNDFDMDAwM0MwMjgwMDAwMDg2MjgyNTAwQTMyMDI1QUM0NDAwMjA2NgorOjEwNDFEMDAwM0MwMzgwMDA4QzY3MDAyMDA0RTBGRkZFMDAwMDAwMDAyQworOjEwNDFFMDAwMDNFMDAwMDgwMDAwMDAwMDBBMDAwMDQxMjQwNDAwMDE3MAorOjEwNDFGMDAwOEY4NTAwM0MzQzA0ODAwMDM0ODMwMDAxMDBBMzEwMjUxRgorOjEwNDIwMDAwMDNFMDAwMDhBQzgyMDAyMDAzRTAwMDA4MDAwMDEwMjE1OQorOjEwNDIxMDAwMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjE0OQorOjEwNDIyMDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjE4NQorOjEwNDIzMDAwMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjEwNworOjEwNDI0MDAwMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkY4MQorOjEwNDI1MDAwMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDRFOQorOjEwNDI2MDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZFNgorOjEwNDI3MDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkZFOAorOjEwNDI4MDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDhBMworOjEwNDI5MDAwMDAwMDAwMDA5MEFBMDAzMThGQUIwMDEwOENBQzAwNDBGMQorOjEwNDJBMDAwM0MwMzAwRkY4RDY4MDAwNEFENkMwMDIwOENBRDAwNDQyMQorOjEwNDJCMDAwMDBFMDYwMjEzNDYyRkZGRkFENkQwMDI0OENBNzAwNDg1MAorOjEwNDJDMDAwM0MwOUZGMDAwMTA5QzAyNEFENjcwMDI4OENBRTAwNENGQQorOjEwNDJEMDAwMDE4MkM4MjQwMzE5NzgyNUFENkYwMDA0QUQ2RTAwMkM0RgorOjEwNDJFMDAwOENBRDAwMzgzMTRBMDBGRkFENkQwMDFDOTRBOTAwMzIzRQorOjEwNDJGMDAwMzEyOEZGRkZBRDY4MDAxMDkwQTcwMDMwQTU2MDAwMDJENAorOjEwNDMwMDAwQTE2MDAwMDRBMTY3MDAwMDkwQTMwMDMyMzA2MjAwRkZBQQorOjEwNDMxMDAwMDAwMjE5ODIxMDYwMDAwNTI0MDUwMDAxMTA2NTAwMEVERQorOjEwNDMyMDAwMDAwMDAwMDAwM0UwMDAwOEExNkEwMDAxOENEODAwMjgwQQorOjEwNDMzMDAwMzU0QTAwODBBRDc4MDAxODhDQ0YwMDE0QUQ2RjAwMTRBMgorOjEwNDM0MDAwOENDRTAwMzBBRDZFMDAwODhDQzQwMDJDQTE2QTAwMDEzOAorOjEwNDM1MDAwMDNFMDAwMDhBRDY0MDAwQzhDQ0QwMDFDQUQ2RDAwMThBRQorOjEwNDM2MDAwOENDOTAwMTRBRDY5MDAxNDhDQzgwMDI0QUQ2ODAwMDgyNQorOjEwNDM3MDAwOENDNzAwMjBBRDY3MDAwQzhDQzIwMDE0OEM4MzAwNzBDOQorOjEwNDM4MDAwMDA0M0M4MkIxMzIwMDAwNzAwMDAwMDAwOENDMjAwMTQ1QgorOjEwNDM5MDAwMTQ0Q0ZGRTQwMDAwMDAwMDM1NEEwMDgwMDNFMDAwMDhGMAorOjEwNDNBMDAwQTE2QTAwMDE4QzgyMDA3MDBBMDAwMEI3MDAwMDAwMDBDMgorOjEwNDNCMDAwOTA4OTAwMzAyN0JERkZGODhGQTgwMDFDQTNBOTAwMDAzQQorOjEwNDNDMDAwOEZBMzAwMDAzQzBERkY4MDM1QTJGRkZGOENBQzAwMkNCQQorOjEwNDNEMDAwMDA2MjU4MjRBRkFCMDAwMEExMDAwMDA0MDBDMDU4MjFDNworOjEwNDNFMDAwQTdBMDAwMDI4RDA2MDAwNDAwQTA0ODIxMDE2N0M4MjE5MworOjEwNDNGMDAwOEZBNTAwMDAwMDgwNTAyMTNDMThGRjdGMDMyQzIwMjY1MQorOjEwNDQwMDAwM0MwRTAwRkYyQzhDMDAwMTM3MEZGRkZGMzVDREZGRkY2NgorOjEwNDQxMDAwM0MwMkZGMDAwMEFGQzgyNDAwRURDMDI0MDBDMjc4MjQ5NQorOjEwNDQyMDAwMDAwQzFEQzAwMzIzNjgyNTAxRjg3MDI1QUQwRDAwMDBBOAorOjEwNDQzMDAwQUQwRTAwMDQ4RDI0MDAyNEFGQUQwMDAwQUQwNDAwMDhEMworOjEwNDQ0MDAwOEQyQzAwMjAyNDA0RkZGRkFEMEMwMDBDOTU0NzAwMzI5QQorOjEwNDQ1MDAwMzBFNkZGRkZBRDA2MDAxMDkxNDUwMDQ4MzBBMjAwRkY5NgorOjEwNDQ2MDAwMDAwMjE5QzI1MDYwMDAwMThEMjQwMDM0QUQwNDAwMTQxNAorOjEwNDQ3MDAwOEQ0NzAwMzg4RkFBMDAxODI3QkQwMDA4QUQwQjAwMjgxMworOjEwNDQ4MDAwQUQwQTAwMjRBRDA3MDAxQ0FEMDAwMDJDQUQwMDAwMThFMworOjEwNDQ5MDAwMDNFMDAwMDhBRDAwMDAyMDI3QkRGRkUwQUZCMjAwMTgyOAorOjEwNDRBMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDOTA5ODAwMzA0NworOjEwNDRCMDAwMDBDMDg4MjEzQzBEMDBGRjMzMEYwMDdGQTBDRjAwMDAxQgorOjEwNDRDMDAwOTA4RTAwMzEzNUFDRkZGRjNDMEFGRjAwQTBDRTAwMDEwQQorOjEwNDREMDAwOTRBNjAwMUVBMjIwMDAwNDhDQUIwMDE0OEUyOTAwMDRCOAorOjEwNDRFMDAwMDBBMDgwMjEwMTZDMjgyNDAxMkE0MDI0MDA4MDkwMjExMgorOjEwNDRGMDAwMDEwNTIwMjVBNjI2MDAwMkFFMjQwMDA0MjYwNTAwMjA4MgorOjEwNDUwMDAwMjYyNDAwMDgwRTAwMDA2MzI0MDYwMDAyOTI0NzAwMzBCMworOjEwNDUxMDAwMjYwNTAwMjgyNjI0MDAxNDAwMDcxRTAwMDAwMzE2MDNBOQorOjEwNDUyMDAwMjQwNjAwMDQwNDQwMDAwMzI0MDNGRkZGOTY1OTAwMzJEMAorOjEwNDUzMDAwMzMyM0ZGRkYwRTAwMDA2M0FFMjMwMDEwMjYyNDAwMjQ2NworOjEwNDU0MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwNQorOjEwNDU1MDAwMjQwNTAwMDMwMDAwMzAyMTBBMDAwMDZEMjdCRDAwMjA2MworOjEwNDU2MDAwMjdCREZGRDhBRkIxMDAxQ0FGQjAwMDE4QUZCRjAwMjAwRgorOjEwNDU3MDAwOTBBOTAwMzAyNDAyMDAwMTAwRTA1MDIxMzEyMzAwM0ZDNworOjEwNDU4MDAwMDBBMDQwMjE4RkIwMDA0MDAwODA4ODIxMDBDMDQ4MjE1OQorOjEwNDU5MDAwMTA2MjAwMTQ4RkE3MDAzODI0MEIwMDA1MDBBMDIwMjExMgorOjEwNDVBMDAwMDBDMDI4MjExMDZCMDAxMzAyMDAzMDIxMEUwMDAwRjkxQQorOjEwNDVCMDAwMDAwMDAwMDA5MjI1MDA3QzMwQTQwMDAyMTA4MDAwMDM1RgorOjEwNDVDMDAwMjYwMzAwMzBBRTAwMDAzMDI2MDMwMDM0OEZCRjAwMjBFOQorOjEwNDVEMDAwOEZCMTAwMUM4RkIwMDAxODAwNjAxMDIxMDNFMDAwMDhBQworOjEwNDVFMDAwMjdCRDAwMjgwRTAwMDA3OEFGQjAwMDEwMEEwMDAxNDA3RgorOjEwNDVGMDAwMDAwMDAwMDA4RkEzMDAzQzAxMDAyMDIxMDEyMDI4MjFBMQorOjEwNDYwMDAwMDE0MDMwMjFBRkEzMDAxMDBFMDAwMEJGQUZCMDAwMTQ3NgorOjEwNDYxMDAwMEEwMDAxNDAwMDAwMDAwMDNDMDU4MDAwOENBMzBFMTA0MQorOjEwNDYyMDAwOEY4NDAwNDRBQzgzMDAyMDhDQTIwRTE4MDNFMDAwMDhBNQorOjEwNDYzMDAwQUM4MjAwMjQzQzA1ODAwMDhDQTMwRTE0OEY4NDAwNDRCRgorOjEwNDY0MDAwQUM4MzAwMjA4Q0EyMEUxQzAzRTAwMDA4QUM4MjAwMjQ4NgorOjEwNDY1MDAwOTM4MjAwMEMxMDQwMDAxQjI0ODMwMDBGMjQwNEZGRjAwMQorOjEwNDY2MDAwMDA2NDM4MjQxMEUwMDAxOTk3OEIwMDEwOTc4NDAwMEUyNgorOjEwNDY3MDAwOTM4OTAwMEQzQzBBNjAxQzBBMDAwMTdCMDE2NDQwMjMwMQorOjEwNDY4MDAwMDEwMzcwMjEwMDY0MjgyMzExMjYwMDAyMzFDMkZGRkZCQworOjEwNDY5MDAwMzBBMkZGRkYwMDQ3MzAyQjUwQzAwMDBFMDBFNDQ4MjEzRAorOjEwNDZBMDAwOEQ0RDAwMEMzMUEzRkZGRjAwMDM2NDAwMDAwQzJDMDNCMAorOjEwNDZCMDAwMDRBMUZGRjMwMDAwMzAyMTMwNjM3RkZGMEEwMDAxNzM4MworOjEwNDZDMDAwMjQwNjAwMDEwM0UwMDAwODAwMDAwMDAwOTc4NDAwMEVBQgorOjEwNDZEMDAwMDBFNDQ4MjEzMTIzRkZGRjMxNjhGRkZGMDA2ODM4MkJEOQorOjEwNDZFMDAwNTRFMEZGRjhBNzgzMDAwRTkzOEEwMDBEMTE0MDAwMDVFNworOjEwNDZGMDAwMjQwRjAwMDEwMDZCQzAyM0EzODAwMDBEMDNFMDAwMDgxRAorOjEwNDcwMDAwQTc5ODAwMEUwMDZCQzAyM0EzOEYwMDBEMDNFMDAwMDhFNAorOjEwNDcxMDAwQTc5ODAwMEUwM0UwMDAwODAwMDAwMDAwMjdCREZGRTg5NgorOjEwNDcyMDAwQUZCMDAwMTAzMDg0RkZGRjNDMTA4MDAwOTNBODAwMkIzNgorOjEwNDczMDAwQUZCRjAwMTRBNjA0MDE0NDk2MEEwRTE2MzBDNjAwRkY0RgorOjEwNDc0MDAwOEZBOTAwMzBBNjBBMDE0NkFFMDUwMTQ4QTIwNjAxNTIxMworOjEwNDc1MDAwQTYwODAxNUFBRTA3MDE2MDhGQTMwMDJDQTYwOTAxNThENAorOjEwNDc2MDAwMDEyMDIwMjEwRTAwMDE2N0FFMDMwMTU0M0MwMjEwMDAxRAorOjEwNDc3MDAwQUUwMjAxNzg4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDg3NAorOjEwNDc4MDAwMjdCRDAwMTg4Rjg1MDAwMDI0ODQwMDA3MjdCREZGRjg4RgorOjEwNDc5MDAwMzA4NEZGRjgzQzA2ODAwMDk0Q0IwMDhBMzE2QUZGRkYyQQorOjEwNDdBMDAwQUZBQTAwMDA4RkE5MDAwMDAxMjU0MDIzMjUwN0ZGRkZDNQorOjEwNDdCMDAwMzBFMzFGRkYwMDY0MTAyQjE0NDBGRkY3MDAwNTY4ODJGMAorOjEwNDdDMDAwMDAwRDI4ODAzNENDNDAwMDAwQUMxMDIxMDNFMDAwMDgyQworOjEwNDdEMDAwMjdCRDAwMDg4RjgyMDAwMDI0ODYwMDA3MzBDNUZGRjgzRgorOjEwNDdFMDAwMDBBMjE4MjEzMDY0MUZGRjAzRTAwMDA4QUY4NDAwMDAxRQorOjEwNDdGMDAwOEY4NTAwNDQ4RjhBMDAzQzI3QkRGRkIwM0MwNDgwMDBCOQorOjEwNDgwMDAwQUZCNzAwNDRBRkI0MDAzOEFGQjEwMDJDQUZCRjAwNDgyMQorOjEwNDgxMDAwQUZCNjAwNDBBRkI1MDAzQ0FGQjMwMDM0QUZCMjAwMzAyQworOjEwNDgyMDAwQUZCMDAwMjg4Qzg3MDEwNDhDQTkwMDI0QUM4QTAwODBEQQorOjEwNDgzMDAwOENBODAwMjAwMEU5ODgyMzAwMDBCODIxQUM4ODBFMTA2NQorOjEwNDg0MDAwOENBNjAwMjQwMDAwQTAyMUFDODYwRTE4OEM4MjBFMTBDRAorOjEwNDg1MDAwQUM4MjBFMTQ4QzgzMEUxOEFDODMwRTFDMTIyMDAwRkI0RAorOjEwNDg2MDAwM0MxNjgwMDA5MzZCMDAwODExNjAwMEYxMDAwMDAwMDAwRQorOjEwNDg3MDAwOTc2RTAwMTAzMUNERkZGRjAyMkQ2MDJCMTU4MDAwRUNFQworOjEwNDg4MDAwMDAwMDAwMDA5NzcwMDAxMDMyMEZGRkZGQUVDRjBFMDA0NworOjEwNDg5MDAwM0MwNTgwMDA4Q0IzMDAwMDMyNzIwMDA4MTI0MEZGRkQxRQorOjEwNDhBMDAwMDAwMDAwMDA5NEI1MEUwODhDQTcwRTA0MzJBNUZGRkY4RgorOjEwNDhCMDAwMzBCNDAwMDExMjgwMDBFMTAwMDAwMDAwMDAwMDAwMEQ5MworOjEwNDhDMDAwMzBCOUEwNDAyNDE4MDA0MDEzMzgwMTE3MzBCNEEwMDBCQworOjEwNDhEMDAwMTI4MDAwREMwMDAwMDAwMDkzNzMwMDA4MTI2MDAwMDhFMgorOjEwNDhFMDAwMDAwMDAwMDA5NzY5MDAxMDMxMjJGRkZGMDBFMjIwMkIzQQorOjEwNDhGMDAwMTA4MDAwMDMzMEE2MDA0MDEwQzAwMEQyMDAwMDAwMDA2RAorOjEwNDkwMDAwQTc4NTAwNDBBRjg3MDAzODkzNkEwMDA4MDIyMDM4MjE0RAorOjEwNDkxMDAwQUZCMTAwMjAxNTQwMDBGMTI3QjQwMDIwQUY2MDAwMENCQgorOjEwNDkyMDAwOTc4NTAwNDAzMEIxNDAwMDE2MjAwMDAyMjQwMzAwMTY5NQorOjEwNDkzMDAwMjQwMzAwMEUyNDE1NDAwN0EzNjMwMDBBQUY3NTAwMTQ3QQorOjEwNDk0MDAwOTM5MDAwNDI4RjZGMDAxNDMyMTkwMDAxMDAxOUMyNDA4OQorOjEwNDk1MDAwMDFGODQwMjVBRjY4MDAxNDk3ODcwMDQwOEY2MzAwMTQ2QQorOjEwNDk2MDAwMzBFRTAwMTAwMDZFNjgyNUFGNkQwMDE0OTc4QzAwNDA4QgorOjEwNDk3MDAwMzE4QjAwMDgxMTYwMDE2NTAwMDAwMDAwOEY2NTAwMTQ5NAorOjEwNDk4MDAwM0MwQjEwMDAzQzBBODAwMDAwQUI4ODI1QUY3MTAwMTQ3RQorOjEwNDk5MDAwOTU0NjBFMEEzQzA5ODEwMDI0MTMwMDBFMzBDMkZGRkYyOQorOjEwNDlBMDAwMDA0OTIwMjVBRjY0MDAwNEEzNzMwMDAyOTM3RjAwMEEyRQorOjEwNDlCMDAwMzQwNkZGRkMyN0YyMDAwNEEzNzIwMDBBOTc4RDAwNDAyMgorOjEwNDlDMDAwMzFBQzIwMDAxMTgwMDE1NzAwMDAwMDAwM0MwNzgwMDAzRQorOjEwNDlEMDAwOTc4RDAwNDA5NEVDMEUwQzk3OTEwMDQwMDAwRDU4NDJDQQorOjEwNDlFMDAwMzE4NUMwMDAzMTZBMDAwMzAwMDUxMzAzMzIyOTEwMDAyRAorOjEwNDlGMDAwMDE0Mjk4MjUwMDA5MjIwMzAyNjRGODI1MDAxRjkwQzA5NworOjEwNEEwMDAwQTc3MjAwMTI5Nzk1MDA0MDkzNzkwMDBBMDAxNTgxODJFMQorOjEwNEExMDAwMzIxODAwM0MwMzE5NzgyMTI1RTgwMDNDQTM2ODAwMDlGRQorOjEwNEEyMDAwOTRFRTBFMEMzMUMzM0ZGRkE3NjMwMDEwOTc2MzAwMTI5MgorOjEwNEEzMDAwOTM2NzAwMDkwMEUzNzAyMTI1Q0QwMDAyMzFBQzAwMDcyNworOjEwNEE0MDAwMDAwQzU4MjMzMTY1MDAwN0EzNjUwMDBCOTM3MTAwMDkyMgorOjEwNEE1MDAwOTc2NDAwMTI5NzZBMDAxMDMyMjIwMEZGOEY5MTAwMzg4RAorOjEwNEE2MDAwOTc5RjAwNDAwMDQ0NDgyMTAxMkE5ODIxMDI2NjkwMjEyNgorOjEwNEE3MDAwMzNGNTAwNDAxMkEwMDAwNTMyNDZGRkZGMDBEMTQwMkI2NQorOjEwNEE4MDAwM0MxMjgwMDAxMTAwMDAxNjAwMDA5ODIxMDIyNjc4MkJBRAorOjEwNEE5MDAwMTVFMDAxMzY4RkE3MDAyMDNDMTg4MDAwOEYxMDBFMTRGRgorOjEwNEFBMDAwM0MwNTgwMDBBRjEwMEUxMDhGMTkwRTFDQUYxOTBFMThBOAorOjEwNEFCMDAwQUYwNjBFMDA4Q0IyMDAwMDMyNTUwMDA4MTJBMEZGRkRCOAorOjEwNEFDMDAwMDAwMDAwMDA5NEJGMEUwODAwQzA4ODIxMDAwMDkwMjE2MworOjEwNEFEMDAwQTc5RjAwNDA4Q0E2MEUwNDI0MTMwMDAxQUY4NjAwMzg2NworOjEwNEFFMDAwOTc2OTAwMTAzMTM1RkZGRjhFOEMwMDAwMDE5MTIwMjM2MworOjEwNEFGMDAwMTA4MDAxMThBRTg0MDAwMDkzNjcwMDA4MTRFMDAwRDgwRAorOjEwNEIwMDAwMDAwMDAwMDAwRTAwMDFCNDI0MDQwMDEwOEY4RTAwNDg0NQorOjEwNEIxMDAwM0MwMzMyMDAwMDQwMjgyMTMxQzYwMEZGMDAwNjNDMDA2MworOjEwNEIyMDAwMDBFMzYwMjUyNUNEMDAwMUFGOEQwMDQ4QUM0QzAwMDBBRQorOjEwNEIzMDAwOTM2MjAwMDk5NzY0MDAxMjkzN0YwMDBBMzA0QTAwRkZENQorOjEwNEI0MDAwMzA4QkZGRkYwMTRCNDgyMTAwMDlDQzAwMzNGMDAwRkYwMAorOjEwNEI1MDAwMDMzMEMwMjVBQ0I4MDAwNDhGOEYwMDQ4OTc4ODAwNDAxMAorOjEwNEI2MDAwMzEwMzIwMDAxMDYwMDEwM0FDQUYwMDA4OTc2RjAwMTIwMgorOjEwNEI3MDAwMzFFOEZGRkYwNjQwMDEwMUFDQTgwMDBDOTc5MDAwNDAwRgorOjEwNEI4MDAwMzIwNTAwMDgxNEEwMDAwMjI2MjgwMDA2MjYyODAwMDI4QworOjEwNEI5MDAwM0MwNDgwMDA5NDhCMEUxNDhDODUwRTFDOEY2NzAwMDRERgorOjEwNEJBMDAwOTM2QTAwMDIzMTY0RkZGRjMxNDkwMEZGQUZBOTAwMTA5MgorOjEwNEJCMDAwOEY3RjAwMTRBRkE4MDAxOEFGQkYwMDE0MEUwMDAxOUEzOQorOjEwNEJDMDAwMDAwMDAwMDAyNDA0MDAxMDBFMDAwMUM4MDAwMDAwMDBENgorOjEwNEJEMDAwOEU5MjAwMDAxNjQwMDAwNTAwMDAwMDAwOEY3OTAwMTQzRQorOjEwNEJFMDAwMjQwNUZGQkYwMzI1QTAyNEFGNzQwMDE0OEY2OTAwMENCNworOjEwNEJGMDAwMDEzNUY4MjFBRjdGMDAwQzkzNzUwMDA4MTZBMDAwMDg1RQorOjEwNEMwMDAwMDAwMDAwMDAxMjYwMDAwNjAwMDAwMDAwOEY2QjAwMTQxRQorOjEwNEMxMDAwM0MwQ0VGRkYzNTg0RkZGRTAxNjQ1MDI0QUY2QTAwMTRBMgorOjEwNEMyMDAwQTM3MzAwMDg4RkE3MDAyMDBBMDAwMzE2MDIyMDIwMjE4QQorOjEwNEMzMDAwQUVEMTBFMDAwQTAwMDFGODNDMDU4MDAwMTRFMEZGMjEwRgorOjEwNEM0MDAwMzBCOUEwNDAwRTAwMDE2MDAwMDBBMDIxMkU5MTAwMDFBQgorOjEwNEM1MDAwMDIzN0IwMjUxMkMwMDAxNzhGQkYwMDQ4OEY4NTAwM0M3NworOjEwNEM2MDAwMjQxNzBGMDAxMEI3MDBDRDNDMDQ4MDAwOEM5OTAxNzgwOAorOjEwNEM3MDAwMDcyMEZGRkUyNDE1MEYwMDUwQjUwMEVCM0MwNDgwMDAxOAorOjEwNEM4MDAwOEM4OTBFMTQyNDA1MDI0MDNDMTQxMDAwQUM4OTAxNDRBOAorOjEwNEM5MDAwOEM5RjBFMUNBQzlGMDE0OEEwODAwMTUyQTQ4MDAxNUEzOQorOjEwNENBMDAwQUM4MDAxNjBBNDgwMDE1OEFDODUwMTU0QUM5NDAxNzhCQgorOjEwNENCMDAwOEZCRjAwNDg4RkI3MDA0NDhGQjYwMDQwOEZCNTAwM0NDRgorOjEwNENDMDAwOEZCNDAwMzg4RkIzMDAzNDhGQjIwMDMwOEZCMTAwMkMxNgorOjEwNENEMDAwOEZCMDAwMjgwM0UwMDAwODI3QkQwMDUwOEY5MTAwMzhGNgorOjEwNENFMDAwOTc5MzAwNDAzQzEyODAwMDAyMjBBODIxMzI2QTAwNDBDNQorOjEwNENGMDAwMTU0MEZGN0QwMDAwOTgyMTk3NkIwMDEwOEY4NTAwMzhDQworOjEwNEQwMDAwMzE2MkZGRkYxMDQ1MDBBMjAwMDAyMDIxMDA4MEEwMjE5OQorOjEwNEQxMDAwMTA4MDAwRTUwMEUwODgyMTE2MjBGRUQyMDAwMDAwMDA4RgorOjEwNEQyMDAwMEEwMDAyRTcyRTkxMDAwMTNDMDM4MDAwOEM3RjAxNzg4RAorOjEwNEQzMDAwMDdFMEZGRkUyNDA0MDgwMDhGODYwMDAwQUM2NDAxNzhDMQorOjEwNEQ0MDAwM0MwMzgwMDA5NDZDMDA4QTMxOEJGRkZGMDE2NjUwMjM4NgorOjEwNEQ1MDAwMjU0OUZGRkYzMTI4MUZGRjJEMDIwMDA4MTQ0MEZGRjlFRAorOjEwNEQ2MDAwMDAwMDAwMDA4RjhFMDA0ODM0NkY0MDAwOEY4MzAwM0NBRAorOjEwNEQ3MDAwMDBFMEEwMjEyNDBEMEYwMDI1QzcwMDAxQUY4NzAwNDhFNworOjEwNEQ4MDAwMDBDRjMwMjEwMjM0ODgyMzNDMDg4MDAwMzFENTAwRkY1OQorOjEwNEQ5MDAwMTA2RDAwMDUyNDA3MDAwMTkzOTMwMDQyMzI3MjAwMDE1OAorOjEwNERBMDAwMDAxMjgyNDAzNjA3MDAwMTAwMTUxNDAwM0MwOTAxMDA4MgorOjEwNERCMDAwMDA0OTIwMjVBQ0M0MDAwMDhGOUYwMDQ4MzBCOTAwMzY2MAorOjEwNERDMDAwMzBCODAwMDhBQ0RGMDAwNDEzMDAwMDkwMDBGOTk4MjUwQgorOjEwNEREMDAwOTUwNzBFMEE4RjhFMDAwMDNDMDM4MTAwMzBFREZGRkYyNworOjEwNERFMDAwMjVDQjAwMDgwMUEzMjgyNTNDMEMxMDAwMzE2QTFGRkZDOQorOjEwNERGMDAwMjY5MjAwMDYyNDA2MDAwRUFEMDUwMTYwMDI2Qzk4MjU3RgorOjEwNEUwMDAwQTUwNjAxNUFBRjhBMDAwMEE1MTIwMTU4MTYyMDAwMDgxNQorOjEwNEUxMDAwM0MxMDgwMDA4Rjk5MDAzQzI0MTgwRjAwNTMzODAwMDI4QQorOjEwNEUyMDAwMjQxNzAwMDEzNjczMDA0MDBFMDAwMTU5M0MxMDgwMDAyOQorOjEwNEUzMDAwOEUxRjBFMTQwMjQwMjAyMUFFMUYwMTQ0OEUxMjBFMUM0NAorOjEwNEU0MDAwQUUxMjAxNDhBMjE1MDE1MkFFMTMwMTU0MEUwMDAxNjdDMworOjEwNEU1MDAwM0MxNTEwMDBBRTE1MDE3ODBBMDAwMzE5MDAwMDAwMDA4RgorOjEwNEU2MDAwOTM3ODAwMDk5NzYzMDAxMjkzNjgwMDBCMzMwRjAwRkZEQgorOjEwNEU3MDAwMDFFMzM4MjEzMTAyMDBGRjAwRTI3MDIxMjVEMDAwMEE1MQorOjEwNEU4MDAwMzIxMEZGRkYwRTAwMDFCNDAyMDAyMDIxOEY4NjAwNDg3RgorOjEwNEU5MDAwM0MxOTQxMDAzQzA3ODAwMDI0Q0QwMDAxQUY4RDAwNDg0MworOjEwNEVBMDAwOTM2QzAwMDk5NzY0MDAxMjMwQzYwMEZGMzE4QTAwRkYzRQorOjEwNEVCMDAwMzA4QkZGRkYwMTRCNDgyMTAwMDYyQzAwMjUzRjAwMDJFQworOjEwNEVDMDAwMDBCRkMwMjUwMzE5NzgyNUFDNEYwMDAwOEY2ODAwMEM4NworOjEwNEVEMDAwOTRFRTBFMTQwMTEyMTgyNUFDNDMwMDA0OENFNTBFMUM1MAorOjEwNEVFMDAwOEY2NzAwMDQ5MzZEMDAwMjMxQzRGRkZGMzFBQzAwRkZGNworOjEwNEVGMDAwQUZBQzAwMTA4RjYyMDAxNEFGQjEwMDE4MEUwMDAxOUEyMQorOjEwNEYwMDAwQUZBMjAwMTQwQTAwMDJDNTAyMDAyMDIxQUY2MDAwMDQxNQorOjEwNEYxMDAwQTM2MDAwMDI5NzhEMDA0MDMxQUMyMDAwMTU4MEZFQUJFRAorOjEwNEYyMDAwMDAwMDMwMjFBNzYwMDAxMjk3OTAwMDQwOTM3ODAwMEE5QgorOjEwNEYzMDAwM0MwMzgwMDAzMjE5MUYwMDAwMTk3OTgzMDFGODQwMjFEOQorOjEwNEY0MDAwMjUwNzAwMjhBMzY3MDAwOTk0NkUwRTBDMEEwMDAyNUU3NAorOjEwNEY1MDAwQTc2RTAwMTA4RjZFMDAxNDM1Q0QwMDQwMEUwMDAxNTk3MQorOjEwNEY2MDAwQUY2RDAwMTQwQTAwMDI5MTAwMDAwMDAwMEEwMDAzMTY1MQorOjEwNEY3MDAwMDAwMDIwMjEwNjQxRkYwMUFDQTAwMDBDOENCODAwMEMwMQorOjEwNEY4MDAwM0MxOTgwMDAwMzE5OTAyNTBBMDAwMkIyQUNCMjAwMEM1MworOjEwNEY5MDAwMDAwMDkwMjEwQTAwMDI4RDI0MTMwMDAxMTI4MDAwMDVGOAorOjEwNEZBMDAwM0MwRDgwMDA5NUE2MEUwODMwRDMwMDQwMTI2MDAwNDJGMAorOjEwNEZCMDAwMDAwMDAwMDA4QzkwMDE3ODA2MDBGRkZFMDAwMDAwMDA1OQorOjEwNEZDMDAwOTQ5MjBFMTAzQzAzMDUwMDI0MDcyMDAwMzI1OEZGRkY4NgorOjEwNEZEMDAwMDMwMzc4MjVBQzhGMDE0QzhDODgwRTE0M0MwRTEwMDAxNgorOjEwNEZFMDAwQUM4ODAxNDQ4QzgyMEUxQ0FDODIwMTQ4QTA4MDAxNTIyNgorOjEwNEZGMDAwQTQ4MDAxNUFBQzgwMDE2MEE0ODAwMTU4QUM4NzAxNTRBMAorOjEwNTAwMDAwQUM4RTAxNzgwQTAwMDJFRTNDMDQ4MDAwOEY5MDAwMDAxNAorOjEwNTAxMDAwMjY5MjAwMDJBNTEyMDE1ODI2MEYwMDA4MzFFODFGRkY1MgorOjEwNTAyMDAwMEEwMDAzNTZBRjg4MDAwMEFDODAwMTRDMTI4MDAwMTlDMgorOjEwNTAzMDAwMDAwMDAwMDA4QzhBMEUxMEFDOEEwMTQ0OEM4MzBFMTg4QworOjEwNTA0MDAwM0MwQzgwMDAyNDE2MDA0MEFDODMwMTQ4OEZCRjAwNDgxMAorOjEwNTA1MDAwQTE4MDAxNTI4RkI3MDA0NEE1ODAwMTVBOEZCNTAwM0M1MgorOjEwNTA2MDAwQUQ4MDAxNjA4RkI0MDAzOEE1ODAwMTU4OEZCMzAwMzQ0MworOjEwNTA3MDAwQUQ5NjAxNTQ4RkIyMDAzMDhGQjYwMDQwOEZCMTAwMkMzNgorOjEwNTA4MDAwOEZCMDAwMjgzQzA0MTAwMDI3QkQwMDUwMDNFMDAwMDg0QQorOjEwNTA5MDAwQUQ4NDAxNzg4QzhCMEUxNEFDOEIwMTQ0OEM4MzBFMUM3OAorOjEwNTBBMDAwMEEwMDAzRTQzQzBDODAwMDBFMDAwMTYwMkU5MTAwMDExOAorOjEwNTBCMDAwMEEwMDAyRTgwMjM3QjAyNTAwMDAwMDAwMDAwMDAwMERFMQorOjEwNTBDMDAwMDAwMDAwMDAyNDAwMDMzQTBBMDAwM0MwM0MwNDgwMDBGMgorOjEwNTBEMDAwMjdCREZGRTBBRkJGMDAxQzNDMUYyMEZGM0MwNzYwMDA2NgorOjEwNTBFMDAwM0MwOTgwMDAyNDAyMDAxMDM3RjlGRkZEQUNFMjMwMDhEMworOjEwNTBGMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUQzOTBFMDA2MAorOjEwNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwNTExMDAwMDAwMDAwMDAzQzE4MDBGRjM3MTJGRkZEQUQzMjBFMDAwQQorOjEwNTEyMDAwM0MwQjYwMDQ4RDcwNTAwMDI0MTFGRjdGM0MwRTAwMDI4OAorOjEwNTEzMDAwMDIxMTc4MjQzNUVDMzgwQzM1Q0QwMTA5QUNFRDRDMTg1MgorOjEwNTE0MDAwMjQwQTAwMDlBRDZDNTAwMDhDRTgwNDM4QUQyQTAwMDgzMAorOjEwNTE1MDAwQUQyMDAwMTQ4Q0U1NEMxQzMxMDZGRkZGMzhDNDJGNzFDNAorOjEwNTE2MDAwMDAwNTFFMDIzMDYyMDAwRjI0ODZDMEIzMTA0MDAwMDcwNQorOjEwNTE3MDAwQUY4MjAwMDg4Q0U1NEMxQzNDMDkwMDFGMzUyOEZDMDA2MAorOjEwNTE4MDAwMDBBODE4MjQwMDAzMjFDMkFGODQwMDA0OENGMTA4MDg5MQorOjEwNTE5MDAwM0MwRjU3MDkyNDEyRjAwMDAyMzI3MDI0MzVGMDAwMTA0MQorOjEwNTFBMDAwMDFEMDYwMjYwMUNGNjgyNjJEQUEwMDAxMkQ4QjAwMDFCOQorOjEwNTFCMDAwMDE0QjM4MjU1MEUwMDAwOUEzODAwMDBDM0MwMjYwMUMyNAorOjEwNTFDMDAwOEM1OTAwMDgyNDFGMDAwMUEzOUYwMDBDMzMzODdDMDA3OQorOjEwNTFEMDAwQTc5ODAwMTBBNzgwMDAwRUEzODAwMDBEQUY4MDAwNDhBNAorOjEwNTFFMDAwMTRDMDAwMDNBRjgwMDAwMDNDMDY2MDAwQUNDMDQ0MkMzQgorOjEwNTFGMDAwMEUwMDA0QjYzQzEwODAwMDBFMDAwRERGMDAwMDAwMDAyMQorOjEwNTIwMDAwM0MxMTA4MDAyNjMxMzhDODNDMTIwODAwMjY1MjM5NDhBMworOjEwNTIxMDAwOEUwNTAwMDAzOEEzMDAwMTMwNjQwMDAxMTQ4MEZGRkNGQgorOjEwNTIyMDAwMDAwMDAwMDA4RTA2MDEwMDNDMEM4MDBBMjQwQUZGODA2QQorOjEwNTIzMDAwMjRDNzAyNDAzMEVCMDA3RjAxNkM0ODIxMDBFQTQwMjQ4MworOjEwNTI0MDAwQUUwNjAwMjBBRjg5MDA0NEFFMDgwMDI0M0MwMzgwMDA3NQorOjEwNTI1MDAwQUY4NjAwM0M4QzZEMDE3ODA1QTBGRkZFMjQxOTA4MDA4NAorOjEwNTI2MDAwQUM3OTAxNzg5MDc4MDEwOEEzOTgwMDQyOTM4RjAwNDJBRQorOjEwNTI3MDAwMzFFRTAwMDExMUMwMDAwRjI0MEQwRDAwMjRDMkY4MDAxMgorOjEwNTI4MDAwMkM1RjAzMDExM0UwMDAxQzAwMDYyOUMyMjRBM0ZGRjBEOQorOjEwNTI5MDAwMDAwMzIwNDIwMDA0MzE0MDBFMDAwMUNGMDBEMUQ4MjE4QworOjEwNTJBMDAwM0MwNDQwMDAzQzA2ODAwMEFDQzQwMTM4MEEwMDA0NTdBRQorOjEwNTJCMDAwMDAwMDAwMDAxMENEMDAyNjI0MEUwRjAwMTBDRTAwMkFBMgorOjEwNTJDMDAwM0MwMjgwMDgzNDVGMDA4MDkzRjkwMDAwMjQwRjAwNTBGNgorOjEwNTJEMDAwMzMzODAwRkYxNzBGRkZGMzNDMDQ0MDAwMEUwMDA5MTJBMworOjEwNTJFMDAwMDAwMDAwMDAzQzA0NDAwMDNDMDY4MDAwQUNDNDAxMzhEMworOjEwNTJGMDAwMEEwMDA0NTcwMDAwMDAwMDhGODMwMDA0MDBBMzQwMkIyNQorOjEwNTMwMDAwMTUwMDAwMEI4RjhCMDAwODAwNkI1MDIxMjU0N0ZGRkYxNQorOjEwNTMxMDAwMDBFNTQ4MkIxNTIwMDAwNjAwQTM2MDIzMDAwQzI5NDA1RgorOjEwNTMyMDAwMEUwMDAxQ0YwMEIyRDgyMTBBMDAwNDdDM0MwNDQwMDBFQQorOjEwNTMzMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzQUQ4QworOjEwNTM0MDAwMEUwMDAxQ0YwMDAwMDAwMDBBMDAwNDdDM0MwNDQwMDA3NQorOjEwNTM1MDAwM0MxQjA4MDAyNzdCM0E0ODBFMDAwMUNGMDAwMDAwMDBFQworOjEwNTM2MDAwMEEwMDA0N0MzQzA0NDAwMDNDMUIwODAwMjc3QjNBNjg5MAorOjEwNTM3MDAwMEUwMDAxQ0YwMDAwMDAwMDBBMDAwNDdDM0MwNDQwMDA0NQorOjEwNTM4MDAwMDAwNDExQzAwM0UwMDAwODI0NDIwMjQwM0MwNDA4MDA2RAorOjEwNTM5MDAwMjQ4NDNBQUMyNDA1MDAxQTBBMDAwMDZEMDAwMDMwMjE3NAorOjEwNTNBMDAwMjdCREZGRTBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTRDMworOjEwNTNCMDAwQUZCMDAwMTAzQzEwODAwMDkyMEIwMTA5MjQxMkZGODA1NgorOjEwNTNDMDAwMEUwMDA0QjMzMTY0MDA3RjhGOTEwMDNDMDA1MTUwMjFFNgorOjEwNTNEMDAwMDE1MjQwMjRBRTA4MDAyNDkyMDMwMTA5MEUwMDA0QjNEOAorOjEwNTNFMDAwMzA2NDAwN0YyNDA2MDA4MDI0MDcwMEMwMjQwNDAwNDBBRAorOjEwNTNGMDAwQUUwMDA4MTBBRTA0MDgxNEFFMDYwODE4QUUwNzA4MUM2QworOjEwNTQwMDAwOTIwQzAxMDkwMDUxRjgyMTMzRjgwMDdGM0MxOTgwMEEwMQorOjEwNTQxMDAwMDMxOTEwMjEzMTg0MDA3RjBFMDAwNEIzQUY4MjAwNDREMQorOjEwNTQyMDAwOEUxMTAxMDAzQzBDMDA4MDM1ODUwMDAxMDIyMjc4MjE5QworOjEwNTQzMDAwMDFGMjQ4MjRBRTA5MDgwNDhFMEUwMTAwMzU5ODAwMDJERQorOjEwNTQ0MDAwMzYwOTA5MDAwMUMyNjgyMTMxQUIwMDc4MDE2NTUwMjU5OQorOjEwNTQ1MDAwQUUwQTA4MjA4RTA1MDEwMDhFMDgwMTAwMzYwNTA5ODA3RAorOjEwNTQ2MDAwMDEwMjE4MjEyNDY0MDA0MDAwOTIzMDI0QUUwNjA4MDg4RQorOjEwNTQ3MDAwOEUwNzAxMDAwMEUyRjgyMTI3RjkwMDQwMzMzMjAwNzg1RQorOjEwNTQ4MDAwMDI1ODg4MjVBRTExMDgyNDhFMDQwMTAwOTUyRjAwMENDNworOjEwNTQ5MDAwOEZCRjAwMUM4RkIyMDAxODMxRUVGRkZGMDAwRTY5QzBGNQorOjEwNTRBMDAwQUUwRDA4MDBBRTBDMDgyODk1MkIwMDBDOEZCMTAwMTQyRgorOjEwNTRCMDAwMzE2QUZGRkYwMDBBNDFDMEFFMDgwMDJDOENBMzAwNTBFNworOjEwNTRDMDAwOEZCMDAwMTA4Q0EyMDAzQzhEMjQwMDA0OENBNjAwMUMyMAorOjEwNTREMDAwOENBNzAwMzgyN0JEMDAyMEFGODMwMDYwQUY4MjAwNTA0QQorOjEwNTRFMDAwQUY4NDAwNENBRjg2MDA1ODAzRTAwMDA4QUY4NzAwNUMzMworOjEwNTRGMDAwM0MwQTA4MDA5MTRBM0FEMTNDMDkwODAwOTUyOTNBQ0E2OQorOjEwNTUwMDAwM0MwNTExMDAwMDBBM0MwMDI1MjgwMDAyMDBFODMwMjU3NworOjEwNTUxMDAwMDBDNTE4MjUyNDgyMDAwOEFDODMwMDAwMDNFMDAwMDhDMQorOjEwNTUyMDAwQUM4MDAwMDQzQzA5ODAwMDM1MjgwOTAwOTEwNzAwMTE3NworOjEwNTUzMDAwMjQwMjAwMjgwMDgwNTAyMTMwRTMwMEZGMDBBMDY4MjFGMQorOjEwNTU0MDAwMDBDMDYwMjExMDYyMDAwMjM0MEI4NkREMjQwQjA4MDBDRAorOjEwNTU1MDAwM0MwNzgwMDAzNEUyMEE5QTk0NDMwMDAwMzRGODBBOUMyNQorOjEwNTU2MDAwMzRFNjBBQTAzMDc5RkZGRkFENTkwMDAwOEYwRjAwMDAyQworOjEwNTU3MDAwMzRFODBBODAyNDA0MDAwMUFENEYwMDA0OENDRTAwMDAwMgorOjEwNTU4MDAwQUQ0RTAwMDg5MTA1MDAxOTMwQTMwMDAzMTA2NDAwNDZEOQorOjEwNTU5MDAwMjg2OTAwMDIxNTIwMDBCNTI0MDQwMDAyMTA2NDAwOTA2MAorOjEwNTVBMDAwMjQwNTAwMDMxMDY1MDA5QjM0RTQwQUE0M0MwOTA4MDBBQworOjEwNTVCMDAwOTUyOTNBQzAyNDA3MDgwMDUxNjcwMDUwM0MxODgwMDAyNAorOjEwNTVDMDAwM0MwMjgwMDAzNDU5MDkwMDkzMjgwMDEyOTMyRTAwMTlFMAorOjEwNTVEMDAwMzQ1ODA5ODAzMTBGMDBGRjhGMDYwMDI4MDFFQzE4MjE5NAorOjEwNTVFMDAwMDAwMzM4ODAzMTI0RkZGRjMxQ0IwMEZGMDBFNDEwMjE5RAorOjEwNTVGMDAwMDAwQjJEMDAwMEE2QzAyNTAwMDI3QzAwM0MwODYwMDBDNgorOjEwNTYwMDAwMDMwODE4MjUzNUU5MDZGRkFENDMwMDAwQUQ0OTAwMDQ0NQorOjEwNTYxMDAwOEYyRTAwMkMzQzAzODAwMDM0NzgwOTNDQUQ0RTAwMDhFRQorOjEwNTYyMDAwOEYyNzAwMzAyNTQ5MDAyODM0NkUwOTAwQUQ0NzAwMEM1MworOjEwNTYzMDAwOEYyQjAwMzRBRDRCMDAxMDhGMjQwMDM4QUQ0NDAwMTQ4NAorOjEwNTY0MDAwOEYyNTAwMUNBRDQ1MDAxODhGMjIwMDIwQUQ0MjAwMUNBNAorOjEwNTY1MDAwOEYyNjAwMjQyNTIyMDAxNEFENDYwMDIwOEYyODAwMjgyNAorOjEwNTY2MDAwQUQ0ODAwMjQ4RjBGMDAwMEFEMkQwMDA0QUQyRjAwMDBDOQorOjEwNTY3MDAwOEM2NDAxMENBRDI0MDAwODkxQzcwMDEyM0MwNTA4MDBBMQorOjEwNTY4MDAwOTBBNTNBRDBBRDIwMDAxMDMwRUIwMEZGMDE2QzMwMjEyNgorOjEwNTY5MDAwMDAwNjZGMDAwMDA1Q0MwMDAxQjk2MDI1MzU4QUZGRkZDOAorOjEwNTZBMDAwMDNFMDAwMDhBRDJBMDAwQzNDMDkwODAwOTUyOTNBQzAyNworOjEwNTZCMDAwM0MxOTA4MDA5NzM5M0FDQTM0RTIwQUE0M0MwNjA4MDBBQgorOjEwNTZDMDAwOTRDNjNBQkM5NDRGMDAwMDMxMjNGRkZGMDMyM0MwMjE0RQorOjEwNTZEMDAwMDMwNjcwMjMwMDBGM0MwMDI1QzhGRkYyMDBFODI4MjVEMAorOjEwNTZFMDAwMjQwNzA4MDBBRDQ1MDAwQ0FENDAwMDEwQUQ0QjAwMTQ4MAorOjEwNTZGMDAwMTU2N0ZGQjMyNTRBMDAxODNDMTg4MDAwMzcwODA5MDBEOQorOjEwNTcwMDAwOTEwRjAwMTE5MTA3MDAxOTM3MDMwQTgwMzFFRTAwRkY1NQorOjEwNTcxMDAwM0MxOTA4MDA5NzM5M0FDNjk0NkYwMDJBMDAwRTU4ODI0NworOjEwNTcyMDAwMzBFNDAwRkY5Nzg3MDA1NDAwMEIxNjAwMDAwNDJDMDBBMworOjEwNTczMDAwMzEyNkZGRkYwMzI2QzAyMTAwNDU0ODI1MDEzODcwMjU4QQorOjEwNTc0MDAwMDFFNzU4MjEzQzAzNDAwMDAxQzMyMDI1MDAwQjJDMDAzOQorOjEwNTc1MDAwQUQ0NDAwMDBBRDQ1MDAwNDkxMDIwMDE4M0MwNjAwMDY2RgorOjEwNTc2MDAwM0MwMzgwMDAwMDAyQ0UwMDAzMjZDMDI1QUQ1ODAwMDg4RgorOjEwNTc3MDAwOEQwRjAwMkMzNDc4MDkzQzI0RTkwMDAxQUQ0RjAwMEM1QQorOjEwNTc4MDAwOEQwQjAwMUMzMTJFN0ZGRjI1NDkwMDE0QUQ0QjAwMTBGRQorOjEwNTc5MDAwOEYwRjAwMDBBRDJEMDAwNEE3OEUwMDU0QUQyRjAwMDAyOAorOjEwNTdBMDAwOEM2NDAxMEMzNDZFMDkwMDI1MjIwMDE0QUQyNDAwMDgxRAorOjEwNTdCMDAwOTFDNzAwMTIzQzA1MDgwMDkwQTUzQUQwQUQyMDAwMTAxQQorOjEwNTdDMDAwMzBFQjAwRkYwMTZDMzAyMTAwMDY2RjAwMDAwNUNDMDBCQgorOjEwNTdEMDAwMDFCOTYwMjUzNThBRkZGRjAzRTAwMDA4QUQyQTAwMENGRgorOjEwNTdFMDAwMzRFOTBBQTQ5NTI0MDAwMDk1MDIwMDI4M0MwOTA4MDAyOQorOjEwNTdGMDAwOTUyOTNBQzAwMDA0MUMwMDAwMDJDQzAwMzQ3ODgxMDBENgorOjEwNTgwMDAwMDMyQjc4MjVBRDU4MDAwQ0FENEYwMDEwMEEwMDA1NDA2MQorOjEwNTgxMDAwMjU0QTAwMTQzQzA5MDgwMDk1MjkzQUMwM0MwNTA4MDBCNworOjEwNTgyMDAwOTRBNTNBQ0EzQzA2MDgwMDk0QzYzQUJDOTQ5OTAwMDA3NAorOjEwNTgzMDAwMzEyM0ZGRkY5NTE4MDAyODAwQTMxMDIxMDA0Njc4MjM4QworOjEwNTg0MDAwMDAxOTNDMDAwMDE4NDQwMDI1RUVGRkVFMDEwRTI4MjU0QgorOjEwNTg1MDAwMzRFNDgxMDBBRDQ0MDAwQ0FENDUwMDEwQUQ0MDAwMTRBRgorOjEwNTg2MDAwQUQ0QjAwMTgwQTAwMDU0MDI1NEEwMDFDMTQ2MEZGNEY4QworOjEwNTg3MDAwMzRFNjBBQTQ5NENFMDAwMDNDMDkwODAwOTUyOTNBQzBGOQorOjEwNTg4MDAwMDAwRTQ0MDAwMTBCMzgyNUFENDcwMDBDMEEwMDA1NDAwRQorOjEwNTg5MDAwMjU0QTAwMTAwM0UwMDAwODI0MDIwN0QwMjdCREZGRTBERQorOjEwNThBMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMxMgorOjEwNThCMDAwMEUwMDAwNEQwMDgwODgyMThGODgwMDUwOEY4NzAwNEM5QgorOjEwNThDMDAwM0MwNTgwMDgzNEIyMDA4MDAxMTEyODIxM0MxMDgwMDA4MgorOjEwNThEMDAwMjQwMjAwODAyNDAzMDBDMDAwQTcyMDIzQUUwMjA4MTg4MQorOjEwNThFMDAwM0MwNjgwMDhBRTAzMDgxQzE4ODAwMDA0QUY4NTAwNTBGOQorOjEwNThGMDAwQUNDNTAwMDQ4Q0M5MDAwNEFGODkwMDRDMTIyMDAwMDkxQgorOjEwNTkwMDAwMzYwNDA5ODAwRTAwMDVGODAwMDAwMDAwOTI0QzAwMjdDNAorOjEwNTkxMDAwOEUwQjAwNzQwMTgyNTAwNDAxNEIzMDIxQUU0NjAwMEMwNgorOjEwNTkyMDAwMzYwNDA5ODA4QzhFMDAxQzhGOEYwMDU4MDFDRjY4MjNBRAorOjEwNTkzMDAwMTlBMDAwMDQ4RkJGMDAxQzhDOTAwMDFDQUY5MDAwNTg3MQorOjEwNTk0MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBGMQorOjEwNTk1MDAwMEEwMDAwNEYyN0JEMDAyMDhGODYwMDYwOEY4MzAwNTAxMworOjEwNTk2MDAwOEY4MjAwNEMzQzA1ODAwODM0QTQwMDgwQUM4NjAwNTAzNworOjEwNTk3MDAwQUM4MzAwM0MwM0UwMDAwOEFDQTIwMDA0M0MwMzA4MDAzOAorOjEwNTk4MDAwOEM2MzAwNTQyN0JERkZGODMwODQwMEZGMjQ2MjAwMDFCRgorOjEwNTk5MDAwMzBBNTAwRkYzQzAxMDgwMEFDMjIwMDU0MzBDNjAwRkZENworOjEwNTlBMDAwM0MwNzgwMDA4Q0U4MDE3ODA1MDBGRkZFM0MwQTdGRkY4MQorOjEwNTlCMDAwQTNBNDAwMDM4RkE0MDAwMDM1NDlGRkZGMDA4OTE4MjQyOQorOjEwNTlDMDAwMDAwNjQ3QzAwMDY4MTAyNUFGQTIwMDAwOTBGOTAxMEE0OAorOjEwNTlEMDAwQTNBMDAwMDIzQzE4ODBGRkEzQjkwMDAxOEZBRTAwMDAxNQorOjEwNTlFMDAwMzBBRDAwN0YzNzBGRkZGRjAxQ0Y1ODI0MDAwRDY2MDA1OAorOjEwNTlGMDAwM0MwOTAwMjAwMTZDNTAyNTM1MjYyMDAwMjQwNUZGODAzRAorOjEwNUEwMDAwM0MwNDEwMDAyN0JEMDAwOEFDRUEwMTRDQUNFNjAxNTQ5MAorOjEwNUExMDAwQTRFMDAxNThBMEU1MDE1MjAzRTAwMDA4QUNFNDAxNzhERAorOjEwNUEyMDAwMzA4ODAwRkYzQzAzODAwMDMwQTQwMEZGOEM2MjAxNzhDNgorOjEwNUEzMDAwMDQ0MEZGRkUwMDAwMDAwMDNDMDM4MDAwMzQ2NjBBMDBDMgorOjEwNUE0MDAwOENDQTAwMjAzNDY3MDk4MDAwMDQ0ODJCQUM2QTAxNDRFQQorOjEwNUE1MDAwOENDNTAwMjQwMDA5MTU0MEFDNjUwMTQ4QTA2ODAxNTBDMAorOjEwNUE2MDAwOTBFNDAwNENBMDY0MDE2RDAzRTAwMDA4QTQ2MDAxNThCQworOjEwNUE3MDAwMjdCREZGRTgzMDg0MDBGRkFGQkYwMDEwMEUwMDA2NUJCQgorOjEwNUE4MDAwMzBBNTAwRkY4RjgzMDA1MDhGQkYwMDEwM0MwNTgwMDBDMQorOjEwNUE5MDAwMzQ0NjAwNDAyNDA0RkY5MDNDMDIxMDAwMjdCRDAwMTg0QgorOjEwNUFBMDAwQUNBMzAxNENBMEE0MDE1MkFDQTYwMTU0MDNFMDAwMDgzMQorOjEwNUFCMDAwQUNBMjAxNzgyN0JERkZFMDNDMDg4MDA4QUZCRjAwMUMwNgorOjEwNUFDMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMzUxMDAwODBCNQorOjEwNUFEMDAwOEUwNjAwMTgzQzA3ODAwMDMwOTIwMEZGMDBDNzIwMjU4QQorOjEwNUFFMDAwQUUwNDAwMTgwRTAwMDA0RDMwQjEwMEZGOTIwMzAwMDUxNworOjEwNUFGMDAwMzQ2MjAwMDgwRTAwMDA0RkEyMDIwMDA1MDI0MDIwMjE3RgorOjEwNUIwMDAwMEUwMDA2NkYwMjIwMjgyMTAyNDAyMDIxOEZCRjAwMUNCQQorOjEwNUIxMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDU1QgorOjEwNUIyMDAwMjQwNjAwMDEwQTAwMDYzMjI3QkQwMDIwM0MwNTgwMDA0MworOjEwNUIzMDAwMzRBMzA5ODA5MDY2MDAwODMwQzIwMDA4MTA0MDAwMEZBRQorOjEwNUI0MDAwM0MwQTAxMDEzNTQ5MDgwQUFDODkwMDAwOENBODAwNzRBMAorOjEwNUI1MDAwQUM4ODAwMDQzQzA3MDgwMDkwRTczQUQwMzBFNTAwMTAxQworOjEwNUI2MDAwNTBBMDAwMDhBQzgwMDAwODNDMEQ4MDA4MzVBQzAwODBENworOjEwNUI3MDAwOEQ4QjAwNThBQzhCMDAwODI0ODQwMDBDMDNFMDAwMDhENworOjEwNUI4MDAwMDA4MDEwMjEwQTAwMDZCMjI0ODQwMDBDMjdCREZGRTgyMworOjEwNUI5MDAwM0MwODgwMDBBRkIwMDAxMEFGQkYwMDE0MzUwNjA5ODA4QworOjEwNUJBMDAwOTBDNzAwMDkyNDAyMDAwNjM1MDkwOTAwMzBFMzAwRkYxMAorOjEwNUJCMDAwMDA4MDgwMjEwMEEwNjAyMTI0MEIwMDA0MTA2MjAwNzk4NQorOjEwNUJDMDAwMjQwNzAwMDI5NENGMDA1QzNDMEUwMjA0MzFFREZGRkY3RAorOjEwNUJEMDAwMDFBRTUwMjVBRTBBMDAwMDkwQzUwMDA4MzBBNDAwMjA5OAorOjEwNUJFMDAwMTA4MDAwMDgwMDAwMDAwMDkwQzIwMDRFM0MxRjAxMDMxRQorOjEwNUJGMDAwMzdGOTAzMDAzMDU4MDBGRjAzMTkzMDI1MjQwQjAwMDg0MworOjEwNUMwMDAwQUUwNjAwMDQ5MTM5MDAxMTkxMjYwMDEyOTEyNDAwMTE3MgorOjEwNUMxMDAwMzMzODAwRkYwMDE4NzA4MjMwQ0YwMEZGMDFDRjUwMjFEMQorOjEwNUMyMDAwMDE0QzY4MjEzMDg4MDBGRjMxQUFGRkZGMzkwMzAwMjhBQQorOjEwNUMzMDAwMDAwQTI4ODAxNDYwMDAyQjAyMDU0MDIzOTEyNDAwMTJFMgorOjEwNUM0MDAwM0MwRTgwMDAzNUQ5MDk4MDMwODUwMEZGMDBBQzE4MjE1QQorOjEwNUM1MDAwMDAwMzEwODAwMDRCRjgyMTAwMUY4NDAwMzYwOTA2RkY2NgorOjEwNUM2MDAwQUQwOTAwMDQzNUM5MDkwMDkxMjYwMDExOTEyRjAwMTJEOQorOjEwNUM3MDAwMDAwQkMwODI4RjJCMDAzNDMxRUQwMEZGOERDNDAxMEM2RQorOjEwNUM4MDAwMDFBQzI4MjEwMEI4MTAyMTAxNjRGODIzMDAwNzg0MDAyQQorOjEwNUM5MDAwMDAwMjFGMDAwMDcwQzgyNTMzRTlGRkZGMzBDRjAwRkM3MQorOjEwNUNBMDAwMDMyOTcwMjUwMTU4MjAyMTAxRTg2ODIxMDAwNDUwODA1MworOjEwNUNCMDAwQURBRTAwMEMwRTAwMDA0RDAxMEE4MDIxM0MwNzgwMDhBQgorOjEwNUNDMDAwMjQwQzAwMDQzNEVCMDA4MDBFMDAwMDRGQTE2QzAwMDk4RQorOjEwNUNEMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhGNQorOjEwNUNFMDAwMjdCRDAwMTg5MTI1MDAxMTkxMjMwMDE5M0MxODA4MDBDOAorOjEwNUNGMDAwOTcxODNBQzYzMEEyMDBGRjAwMDJGODgyMzA3MDAwRkYwOQorOjEwNUQwMDAwMDAxRkNFMDAwMDEwNEMwMDAzMjkzMDI1MDBEODcwMjU1QworOjEwNUQxMDAwM0MwRjQwMDAwMUNGNjgyNTNDMEU4MDAwQUQwRDAwMDAxNworOjEwNUQyMDAwMzVDOTA5MDA5MTI2MDAxMTkxMkYwMDEyMzVEOTA5ODAzQgorOjEwNUQzMDAwMDAwQkMwODIzMUVEMDBGRjhGMkIwMDM0OERDNDAxMENBRAorOjEwNUQ0MDAwMDFBQzI4MjEwMEI4MTAyMTAxNjRGODIzMDAwNzg0MDA2OQorOjEwNUQ1MDAwMDAwMjFGMDAwMDcwQzgyNTMzRTlGRkZGMzBDRjAwRkNCMAorOjEwNUQ2MDAwMDMyOTcwMjUwMTU4MjAyMTAxRTg2ODIxMDAwNDUwODA5MgorOjEwNUQ3MDAwQURBRTAwMEMwRTAwMDA0RDAxMEE4MDIxM0MwNzgwMDhFQQorOjEwNUQ4MDAwMjQwQzAwMDQzNEVCMDA4MDBFMDAwMDRGQTE2QzAwMDlDRAorOjEwNUQ5MDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgzNAorOjEwNURBMDAwMjdCRDAwMTgwQTAwMDZDNDI0MDcwMDEyMjdCREZGRDAzMworOjEwNURCMDAwQUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDQUZCMDAwMTBFQgorOjEwNURDMDAwQUZCRjAwMjhBRkIyMDAxOEFGQjEwMDE0M0MwNjgwMDA4RQorOjEwNUREMDAwOTBDMzAxMEIzMDkzMDBGRjMwQjQwMEZGMzA2MjAwMzBGRAorOjEwNURFMDAwMDAwMEE4MjExMDQwMDA4MjAwMDA4MDIxMzRDNDA5ODBGNgorOjEwNURGMDAwOTA4ODAwMDgwMDA4M0UwMDAwMDcyRTAzMDRBMDAwQTlCOAorOjEwNUUwMDAwMjQwNDAwMDQ4Rjg3MDA1MDNDMDEwODAwQTAyNDNBRDBFRAorOjEwNUUxMDAwM0MwQzgwMDBBRDgwMDA0ODNDMDM4MDAwOTA2RTAxMEI3QworOjEwNUUyMDAwMzFDNTAwMjAxMEEwMDAwNzNDMEM4MDAwMzQ3ODA5ODBBOAorOjEwNUUzMDAwOTMxMjAwMDgwMDEyOEUwMDAwMTE3RTAzMDVFMDAwQUVGMAorOjEwNUU0MDAwM0MwMjgwMDg5MThCMDEwQjM1ODYwOTgwOTBDNDAwMDhDNAorOjEwNUU1MDAwMzE2QTAwNDAwMDBBNDgyQjMwODgwMDA4MjQxMTAwMDNGMgorOjEwNUU2MDAwMTUwMDAwMDIwMEU5OTAyMzAwMDA4ODIxM0MwMzgwMDAxNworOjEwNUU3MDAwMzQ3ODBBODAzNDZBMDkwMDk3MDcwMDJDOTE0NDAwMTE5NQorOjEwNUU4MDAwOTE0OTAwMTI5MzA1MDAxODMwOUYwMEZGMzEyODAwRkY1MAorOjEwNUU5MDAwMDIyODEwMjEwMDAyQzg4MDkzMEQwMDE4MDMzRjc4MjFDQQorOjEwNUVBMDAwMDFGMDcwMjEzMEIwMDBGRjAxRDAxODIxQTc4NzAwNTQwNQorOjEwNUVCMDAwM0MwMTA4MDBBNDJFM0FDNjNDMDEwODAwQTQyMzNBQzhCRAorOjEwNUVDMDAwMTVBMDAwMDMyNDZCMDAwQTAwMDAwMDBEMjQ2QjAwMEFEQgorOjEwNUVEMDAwMzE3MEZGRkYzQzAxMDgwMEE0MjMzQUNBM0MwMTA4MDBDRQorOjEwNUVFMDAwQTQyMDNBQzAzQzAxMDgwMEE0MjAzQUJDMEUwMDAxQjQzMgorOjEwNUVGMDAwMDIwMDIwMjEwRTAwMDUwRjAwNDAyMDIxMDA0MDIwMjEzQgorOjEwNUYwMDAwMDI0MDI4MjEwRTAwMDUxQzAyMjAzMDIxMEUwMDA2OUVCMgorOjEwNUYxMDAwMDA0MDIwMjExNkEwMDA1RjAwNDAyMDIxMEUwMDAxQzg5MworOjEwNUYyMDAwMDIwMDIwMjEzQzExMDgwMDkyMzEzQUQwMzIzNTAwMDNBMgorOjEwNUYzMDAwMTJBMDAwMTYzQzBBODAwODhGODcwMDUwM0MwRTgwMDg5MworOjEwNUY0MDAwMzVDRDAwODAyNEVDMDAwMUFEQUMwMDNDM0MwNTgwMDg2MAorOjEwNUY1MDAwOENBNjAwMDQwMTgwMjAyMTAwQ0M5MDIzMUE0MDAwMDI2RQorOjEwNUY2MDAwQUY4QzAwNTA4Q0E0MDAwNDBFMDAwNUY4QUNBNDAwMDQxMworOjEwNUY3MDAwM0MxOTgwMDA4RjM4MDA3NDNDMEY4MDA4MzVGMDAwODA5OQorOjEwNUY4MDAwMDA1ODI4MjFBRTA1MDAwQzNDMEE4MDA4MzU0MjAwODBFQworOjEwNUY5MDAwMDI2MDIwMjEwMjgwMjgyMUEwNDAwMDZCMEUwMDA2NUJEOQorOjEwNUZBMDAwM0MxMzgwMDA4Rjg0MDA1MDM0NUYwMDA2QUU2NDAxNENDNworOjEwNUZCMDAwOEY4ODAwNDgzQzE0MTAwMDhGQjUwMDI0MjUwOTAwMDE4QgorOjEwNUZDMDAwQUY4OTAwNDg4RkIyMDAxOEEyNjgwMTUyOEZCMTAwMTQ0NworOjEwNUZEMDAwQUU3RjAxNTQ4RkIwMDAxMEFFNzQwMTc4OEZCRjAwMjhERgorOjEwNUZFMDAwOEZCNDAwMjA4RkIzMDAxQzAzRTAwMDA4MjdCRDAwMzBGMQorOjEwNUZGMDAwMzRDMzA5ODA5MDZGMDAwODAwMEY3NjAwMDAwRTZFMDMxNgorOjEwNjAwMDAwMDVBMDAwMzMzNEMyMDkwMDkwNTkwMDFCMjQxRjAwMTA2MgorOjEwNjAxMDAwM0MwMTA4MDBBMDNGM0FEMDMzMzgwMDAyMTMwMEZGN0U1NQorOjEwNjAyMDAwOEY4NzAwNTA4RjgzMDA1QzE0NjdGRjdDM0MwMzgwMDBFNworOjEwNjAzMDAwMEUwMDAwNEQwMDAwMDAwMDNDMDk4MDA4MzUyNTAwODA1RQorOjEwNjA0MDAwOTBBNDAwMDkyNDA3MDAxNjMwODgwMEZGMTEwNzAwMERGNgorOjEwNjA1MDAwMDAwMDAwMDA5MEE2MDAwOTNDMEMwODAwOTE4QzNBRDA4QQorOjEwNjA2MDAwMjQwQTAwMDgzMEM0MDBGRjM1OEIwMDAxM0MwMTA4MDAwMQorOjEwNjA3MDAwQTAyQjNBRDAxMDhBMDAyRjI0MEQwMDBBMTA4RDAwMjg4MgorOjEwNjA4MDAwMjQwMjAwMEMwRTAwMDA0RjAwMDAwMDAwMEEwMDA3NTkxNworOjEwNjA5MDAwOEY4NzAwNTAwRTAwMDZCNjAyMjAyODIxMEEwMDA3OUFCQQorOjEwNjBBMDAwMDAwMDAwMDAzQzBCODAwODM1NkEwMDgwOEQ0NzAwNTREQQorOjEwNjBCMDAwOENDOTAxMEMxMTIwRkY1NEFGODcwMDUwMjQwNjAwMTQzNgorOjEwNjBDMDAwM0MwMTA4MDBBMDI2M0FEMDBBMDAwNzU4M0MwQzgwMDA4QQorOjEwNjBEMDAwOTA3MTAwMDgyNDEyMDAwMjNDMDEwODAwQTAzMjNBRDA1RQorOjEwNjBFMDAwMzIzMDAwMjAxMjAwMDAwQjI0MTUwMDAxOEY4NzAwNTA3MQorOjEwNjBGMDAwMEEwMDA3NTkyNDEwMDAwODM0NTkwMDgwOEYyMzAwMzgwMworOjEwNjEwMDAwQUM0MzAwMDQ4QzVGMDAwNEFGM0YwMDNDMEEwMDA3NjQwRQorOjEwNjExMDAwM0MwQzgwMDA4Rjg3MDA1MDBBMDAwNzU5MjQxMDAwMDRBRgorOjEwNjEyMDAwQTBBMjAwMDkwRTAwMDA0RjAwMDAwMDAwMEEwMDA3NTk1RAorOjEwNjEzMDAwOEY4NzAwNTAyNDAyMDAxNDBBMDAwODFDQTBBMjAwMDk0NgorOjEwNjE0MDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwM0MxMDgwMDBDNworOjEwNjE1MDAwOTIwMjAxMDkyNDA1MDAwMTBFMDAwNjVCMzA0NDAwRkY5NQorOjEwNjE2MDAwM0MxRjgwMDg5M0Y4MDAwRTM3RTMwMDgwOTNGOTAwMEY3RQorOjEwNjE3MDAwOTA2RTAwMjY5M0U5MDAwQTMzMkYwMEZGMDAxODY2MDA5NgorOjEwNjE4MDAwMDAwRjZDMDAzMUNCMDBGRjAxOEQ1MDI1MDAwQjMyMDA1OQorOjEwNjE5MDAwMDE0NjM4MjUzMTI4MDBGRjM0NDU2MDAwMDBFODIwMjVGRAorOjEwNjFBMDAwMjQwMkZGODEzQzAzMTAwMEFFMDQwMTRDOEZCRjAwMTQ5OQorOjEwNjFCMDAwQUUwNTAxNTRBMjAyMDE1MkFFMDMwMTc4OEZCMDAwMTA2NworOjEwNjFDMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4MzA4NDAwRkY2QQorOjEwNjFEMDAwQUZCRjAwMTAwRTAwMDY1QjMwQTUwMEZGMzQ0NjAwNDA0NAorOjEwNjFFMDAwM0MwNDgwMDAyNDA1RkY5MkFDODYwMTU0QTA4NTAxNTIzNgorOjEwNjFGMDAwOEY4MzAwNTA4RkJGMDAxMDNDMDIxMDAwMjdCRDAwMTg5NQorOjEwNjIwMDAwQUM4MzAxNEMwM0UwMDAwOEFDODIwMTc4MjdCREZGRDhDNQorOjEwNjIxMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA5NAorOjEwNjIyMDAwQUZCMzAwMUMzQzA3ODAwMDkwRTIwMTA5MzA4NjAwRkZGQworOjEwNjIzMDAwMzBCMDAwRkYwMDA2MThDMjMyMDQwMDAyMzA3MTAwMDFDNQorOjEwNjI0MDAwMTQ4MDAwMDczMDUyMDBGRjNDMDk4MDA4MzUzMzAwODA3RAorOjEwNjI1MDAwOTI2ODAwMDUzMTA1MDAwODEwQTAwMDBDMzBDQTAwMTAzQgorOjEwNjI2MDAwMDI0MDIwMjEwRTAwMDY4MDAyMjAyODIxMjQwMjAwMDE4NQorOjEwNjI3MDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRBNQorOjEwNjI4MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MTU0MDAwMzA0MworOjEwNjI5MDAwMzRFNTBBMDA4Q0I5MDAyNDhDQjgwMDA4MTMzODAwNDc5NAorOjEwNjJBMDAwMDAwMDQwMjEzQzBFODAwODM1RDMwMDgwOTI2RDAwNjhDQworOjEwNjJCMDAwMjQwQjAwMDIzMUFDMDBGRjExOEIwMDgwM0MwNjgwMDBGMworOjEwNjJDMDAwOTI3RjAwNEM5MEM0MDEwOTUwOUYwMDA0MzIxMzAwN0M1RgorOjEwNjJEMDAwMTEwMDAwNjcwMDAwMDAwMDMyMTMwMDdDMTY2MDAwNUFCNQorOjEwNjJFMDAwMDI0MDIwMjExNjIwMDAwODMyMEMwMDAxM0MwNzgwMDBFQgorOjEwNjJGMDAwMzRFQjBBMDA4RDY1MDAyNDhDRTgwMTA0MTRBOEZGREM0RgorOjEwNjMwMDAwMDAwMDEwMjEzMjBDMDAwMTExODAwMDBEMDI0MDIwMjFGQworOjEwNjMxMDAwM0MxMDgwMDA4RTBFMDEwQzhGOEQwMDYwMTFDRDAwMDhBNgorOjEwNjMyMDAwMDAwMDAwMDAwRTAwMDczRTAyMjAyODIxOEUwRjAxMEMwNQorOjEwNjMzMDAwM0MxODgwMDgzNzEwMDA4MEFFMEYwMDUwMDI0MDIwMjEyQQorOjEwNjM0MDAwMEUwMDA2NkYwMjIwMjgyMTBBMDAwODZGMjQwMjAwMDFCNworOjEwNjM1MDAwM0MwNzA4MDA4Q0U3MDA2NDI0RTYwMDAxM0MwMTA4MDBDQgorOjEwNjM2MDAwQUMyNjAwNjQxNjAwMDAwRDAwMDAwMDAwMDIyMDI4MjE2OQorOjEwNjM3MDAwMEUwMDA2NkYwMjQwMjAyMTkyNkYwMDY4MjQwRDAwMDI3QgorOjEwNjM4MDAwMzFFRTAwRkYxMUNEMDAyMjAyNDAyMDIxMEUwMDA4MjMzMworOjEwNjM5MDAwMDAwMDAwMDAwQTAwMDg2RjI0MDIwMDAxMEUwMDAwNDEwNgorOjEwNjNBMDAwMjQwNDAwMDE5MjZDMDAyNTAyMEM1ODI1MEUwMDAwNEZCOQorOjEwNjNCMDAwQTI2QjAwMjUwQTAwMDhBRjAyMjAyODIxOEU2MzAwMTg3NgorOjEwNjNDMDAwOENFNDAxMDQ4Q0JGMDAyNDAwMDMxNjAyMTQ5RkZGQjU2NworOjEwNjNEMDAwMzA0NTAwN0Y5MjY5MDA0QzI2NDQwMDAxMzA5MzAwN0ZENQorOjEwNjNFMDAwMTI2NTAwNDAzMTIzMDBGRjE0NjRGRkFGM0MwRTgwMDhBQgorOjEwNjNGMDAwMjY0ODAwMDEzMTExMDA3RjMxMDIwMEZGMTIyNTAwMEJGOQorOjEwNjQwMDAwMjQwODAwMDEwMDQwOTAyMTBBMDAwODdDMjQxMTAwMDFBQQorOjEwNjQxMDAwMjQwNTAwMDQwRTAwMDYzMjI0MDYwMDAxMEUwMDA4MjNBNQorOjEwNjQyMDAwMDAwMDAwMDAwQTAwMDg2RjI0MDIwMDAxMjQwN0ZGODAxQQorOjEwNjQzMDAwMDI0NzI4MjQwMEE3OTAyNjMyNDIwMEZGMDA0MDkwMjEwNgorOjEwNjQ0MDAwMEEwMDA4N0MyNDExMDAwMTBFMDAwNzNFMDIyMDI4MjFDQQorOjEwNjQ1MDAwMzIwNjAwMzAxMEMwRkZBMzMyMTAwMDgyMDI0MDIwMjExQgorOjEwNjQ2MDAwMEUwMDA2ODAwMjIwMjgyMTBBMDAwODZGMjQwMjAwMDE4NQorOjEwNjQ3MDAwOEU2MzAwMTgwMjQwMjAyMTAyMjAyODIxMDA2NjEwMjU4QQorOjEwNjQ4MDAwMEUwMDA4NDVBRTYyMDAxODkyNjQwMDRDMjQwNTAwMDMxQgorOjEwNjQ5MDAwMjQwNjAwMDEwRTAwMDYzMjMwODQwMEZGMEUwMDAwNDE4OQorOjEwNjRBMDAwMjQwNDAwMDE5MjZBMDAyNTAyMEE0ODI1MEUwMDAwNEZDQworOjEwNjRCMDAwQTI2OTAwMjUwQTAwMDg2RjI0MDIwMDAxOEU3ODAwMThFNgorOjEwNjRDMDAwM0MxOTgwMDAwMjQwMjAyMTAzMTk3ODI1MDIyMDI4MjE1MAorOjEwNjREMDAwMEUwMDA2NkZBRTZGMDAxODkyNjQwMDRDMEEwMDA4RjdCOQorOjEwNjRFMDAwMjQwNTAwMDQzMjQ2MDA4MDM4Q0EwMDgwMTQ2QUZGNkUxQQorOjEwNjRGMDAwM0MwRTgwMDgwQTAwMDhEMDI2NDgwMDAxMjdCREZGQzBENgorOjEwNjUwMDAwQUZCMDAwMTgzQzEwODAwMEFGQkYwMDM4QUZCNzAwMzQwOAorOjEwNjUxMDAwQUZCNjAwMzBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjQ0NQorOjEwNjUyMDAwQUZCMjAwMjAwRTAwMDRCQkFGQjEwMDFDOTIwNDAxMDgwMgorOjEwNjUzMDAwOTIwNTAxMEIzMDg0MDBGRjBFMDAwODU2MzBBNTAwRkZDNQorOjEwNjU0MDAwMTQ0MDAwRTM4RkJGMDAzODNDMDk4MDA4MzUyODAwODBFNAorOjEwNjU1MDAwQTEwMDAwNkIzNjA3MDk4MDkwRTYwMDAwMjQwMjAwNTA3RAorOjEwNjU2MDAwM0MxNzA4MDAyNkY3M0E4ODMwQzMwMEZGM0MxMzA4MDBBOAorOjEwNjU3MDAwMjY3MzNBOTgxMDYyMDAwMzNDMTA4MDAwMDAwMEI4MjE5NgorOjEwNjU4MDAwMDAwMDk4MjEyNDFGMDAxMDM2MTEwQTAwMzYxNDA5ODBEQgorOjEwNjU5MDAwOEUxNjAxMDQ4RjhEMDA1MDhFMzgwMDI0MzYxOTBBODAyMworOjEwNjVBMDAwOEU5MjAwMjAzQzAxMDgwMEEwM0YzQUQwOTcyQzAwMkM4RQorOjEwNjVCMDAwOEVGNTAwMDA5MzJCMDAxODAyNEQ3MDIzMDJEODc4MjMyQgorOjEwNjVDMDAwM0MwMTA4MDBBQzJGM0FBQzNDMDEwODAwQUMyRTNBQjBCQworOjEwNjVEMDAwM0MwMTA4MDBBQzJEM0FENEE3OEMwMDU0MDJBMEY4MDk2NQorOjEwNjVFMDAwMzE3MjAwRkYzMDRBMDAwMjE1NDAwMEU2MzA0NTAwMDFEQworOjEwNjVGMDAwMTBBMDAwQzEwMDAwMDAwMDkyOEEwMDA4MzE1MDAwMDg3RAorOjEwNjYwMDAwMTYwMDAwMDIyNDE0MDAwMzAwMDBBMDIxM0MwNjgwMDBCNAorOjEwNjYxMDAwMzRDNDA5MDAzNEMzMEEwMDhDNkUwMDI0OTA4NTAwMTEzNAorOjEwNjYyMDAwOTA4MjAwMTI5MDk5MDAxMTMwQjgwMEZGMzA1MTAwRkZBNQorOjEwNjYzMDAwMDI5MUY4MjEwMDFGQjA4MDMzMkYwMEZGMDJEODU4MjFBQgorOjEwNjY0MDAwMDI0RkE4MjEyNkFDMDAxMDAxNzI2ODIxM0MxNTgwMDA4MQorOjEwNjY1MDAwM0MwMTA4MDBBQzJFM0FEODNDMDEwODAwQTQyRDNBQzhGMQorOjEwNjY2MDAwM0MwMTA4MDBBNDJDM0FDNDNDMDEwODAwQTQyQjNBQzYwMworOjEwNjY3MDAwMzZCNjA5ODA4Rjg3MDA1MDhGODkwMDU4OEVEMjAwMjA0RgorOjEwNjY4MDAwMjQwODAwMDYwMTI3MzAyMzAyNDcyODIzM0MwMTA4MDA4NAorOjEwNjY5MDAwQUMyODNBQ0MwNEMwMDBCMzAwMDA5MDIxMDRBMDAwQjFBMworOjEwNjZBMDAwMDBDNTgwMkIxMjAwMDBCMzAwMDAwMDAwM0MwMTA4MDA3MAorOjEwNjZCMDAwQUMyNjNBQjA4RTcxMDAwMDAyMjBGODA5MDAwMDAwMDBGQworOjEwNjZDMDAwMzA0QTAwMDIxNTQwMDA3NDAwNDA4MDIxMzA0QjAwMDEyOAorOjEwNjZEMDAwNTU2MDAwMTE4RTcxMDAwNDNDMEQwODAwOERBRDNBQjQ3OAorOjEwNjZFMDAwM0MwRUMwMDAzQzA0ODAwMDAxQUU2MDI1QUVBQzBFMDA0NAorOjEwNjZGMDAwOEM5ODAwMDAzMzBGMDAwODExRTBGRkZEMDAwMDAwMDAzRgorOjEwNjcwMDAwOTQ5RjBFMDgyNDEyMDAwMUE3OUYwMDQwOEM5OTBFMDQ0QworOjEwNjcxMDAwQUY5OTAwMzg4RTcxMDAwNDAyMjBGODA5MDAwMDAwMDBEMworOjEwNjcyMDAwMDIwMjgwMjUzMjAyMDAwMjE0NDAwMEE5MDAwMDAwMDA4RAorOjEwNjczMDAwM0MwODA4MDA5NTA4M0FCQzNDMTEwODAwOTYzMTNBQzg1QworOjEwNjc0MDAwM0MwOTA4MDA5NTI5M0FCRTNDMDMwODAwOEM2MzNBQjQyMgorOjEwNjc1MDAwMDExMTY4MjEzQzFGMDgwMDhGRkYzQUQ4M0MwNzA4MDA1MAorOjEwNjc2MDAwOTRFNzNBRDIzQzExODAwMDAxQTkyMDIxOEUzODAxMEMxNworOjEwNjc3MDAwMDA2ODI4MjEyNDk5MDAwMjAwQTc3MDIxMDNFMzc4MjFGMgorOjEwNjc4MDAwQUY5ODAwNjAzQzAxMDgwMEFDMkYzQUQ4M0MwMTA4MDBFQgorOjEwNjc5MDAwQTQyRTNBQzAzQzAxMDgwMEE0MkQzQUNBMEUwMDAxQjQ1MAorOjEwNjdBMDAwMzMyNEZGRkY4RjhDMDA0ODAwNDAyMDIxM0MwMTA4MDA2QgorOjEwNjdCMDAwQTAyQzNBRDE4RTYyMDAwODI1OEIwMDAxQUY4QjAwNDhENworOjEwNjdDMDAwMDA0MEY4MDkwMDAwMDAwMDhGODUwMDUwMDI4MDMwMjE1MQorOjEwNjdEMDAwMEUwMDA1MUMwMDQwMjAyMTBFMDAwNjlFMDA0MDIwMjFENgorOjEwNjdFMDAwOEU2QTAwMEMwMTQwRjgwOTAwNDAyMDIxM0MwODA4MDA5NgorOjEwNjdGMDAwOTUwODNBQ0EzQzA5MDgwMDk1MjkzQUJFMDEwOTM4MjE5MgorOjEwNjgwMDAwMjRFNjAwMDIwRTAwMDFDODMwQzRGRkZGM0MwNDA4MDA2QgorOjEwNjgxMDAwOEM4NDNBQUMzQzAzMDgwMDhDNjMzQUI0MDA4MzI4MjM5MAorOjEwNjgyMDAwM0MwMTA4MDBBQzI1M0FBQzE0QTAwMDA2MDAwMDAwMDBCMgorOjEwNjgzMDAwM0MwQTA4MDA4RDRBM0FDQzM1NDYwMDQwM0MwMTA4MDAyRAorOjEwNjg0MDAwQUMyNjNBQ0MxMjQwMDA0MThGOEMwMDQ0OEUyQjBFMTBBNworOjEwNjg1MDAwOEY5MjAwNDRBRTRCMDAyMDhFMjIwRTE4QUU0MjAwMjREMAorOjEwNjg2MDAwM0MwNDA4MDA5NDg0M0FDMDBFMDAwNUZBMDAwMDAwMDBDMQorOjEwNjg3MDAwOEY5OTAwNTA4RTc4MDAxMDNDMDEwODAwQUMzOTNBRDQ1MgorOjEwNjg4MDAwMDMwMEY4MDkwMDAwMDAwMDNDMEYwODAwOERFRjNBQUM0RgorOjEwNjg5MDAwMTVFMEZGNzk4Rjg3MDA1MDk3OTQwMDU0M0MxMzgwMEVDOQorOjEwNjhBMDAwMzIxNTAwMTAwRTAwMDYyOUE2NzQwMDJDNTZBMDAwNDRENAorOjEwNjhCMDAwOEVGNjAwMDQzMjFGMDA0MDU3RTAwMDFEOEVGMDAwMDhFNQorOjEwNjhDMDAwOEVFMzAwMEMwMDYwRjgwOTAwMDAwMDAwOEZCRjAwMzg2NAorOjEwNjhEMDAwOEZCNzAwMzQ4RkI2MDAzMDhGQjUwMDJDOEZCNDAwMjhFRQorOjEwNjhFMDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgyRQorOjEwNjhGMDAwMDNFMDAwMDgyN0JEMDA0MDkyMDkwMTA5OEY4ODAwM0M5MQorOjEwNjkwMDAwMDAwOTNFMDAwMEU4MzAyNUFFMDYwMDgwOEUyMzAwMjBGRQorOjEwNjkxMDAwOEUyNDAwMjRBRkEzMDAxMEFFMDMwRTE0OEZBMjAwMTAyQgorOjEwNjkyMDAwQUUwMjBFMTBBRTA0MEUxQzBBMDAwOTUxQUUwNDBFMTg4MQorOjEwNjkzMDAwMDIwMEY4MDkwMDAwMDAwMDhFRTMwMDBDMDA2MEY4MDk3NgorOjEwNjk0MDAwMDAwMDAwMDAwQTAwMEEwNzhGQkYwMDM4MjQwRTAwMDE3MworOjEwNjk1MDAwMjQwRDAwMDFBNTgwMDAyMEE1OEUwMDIyMEEwMDA5RUI2RAorOjEwNjk2MDAwQUQ4RDAwMjQzQzAxMDgwMEFDMjAzQUIwMEEwMDA5ODEzQQorOjEwNjk3MDAwOEU3MTAwMDAzQzAxMDgwMEFDMjUzQUIwMEEwMDA5ODE4NAorOjEwNjk4MDAwOEU3MTAwMDA5MjExMDEwOTAwMDAyODIxMEUwMDA2NkY4RgorOjEwNjk5MDAwMzIyNDAwRkY4RkJGMDAzODhGQjcwMDM0OEZCNjAwMzAyRAorOjEwNjlBMDAwOEZCNTAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjA0NQorOjEwNjlCMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwNDAxNQorOjEwNjlDMDAwMDJDMEY4MDkwMDAwMDAwMDBBMDAwQTAxMzIxRjAwNDA1RQorOjEwNjlEMDAwNTI0MEZGQjI5Nzk0MDA1NDhFQjYwRTE0OEY5MzAwNDQyOQorOjEwNjlFMDAwQUU3NjAwMjA4RUI0MEUxQ0FFNzQwMDI0MEEwMDA5RkFBNAorOjEwNjlGMDAwOTc5NDAwNTQ4RjgyMDAxNDAwMDQyMTgwMDNFMDAwMDg2MworOjEwNkEwMDAwMDA4MjEwMjEzQzA3ODAwODM0RTIwMDgwOTA0MzAwNjkzNgorOjEwNkExMDAwMDA4MDQwMjExMDYwMDAwOTNDMDQwMTAwM0MwNzA4MDA5MAorOjEwNkEyMDAwOENFNzNBRDQ4RjgzMDAzMDAwRTMyMDIzMDQ4MDAwMDhGMQorOjEwNkEzMDAwOTM4OTAwMUMxNEUzMDAwMzAxMDAyMDIxMDNFMDAwMDhGNworOjEwNkE0MDAwMDA4MDEwMjEzQzA0MDEwMDAzRTAwMDA4MDA4MDEwMjFCOAorOjEwNkE1MDAwMTEyMDAwMEIwMDY3MzgyMzNDMEQ4MDAwMzVBQzA5ODAwNQorOjEwNkE2MDAwOTE4QjAwN0MzMTZBMDAwMjExNDAwMDIwMjQwOTAwMzQxRgorOjEwNkE3MDAwMDBFOTcwMkIxNUMwRkZGMTAxMDAyMDIxMDBFOTM4MjM0NworOjEwNkE4MDAwMjQwM0ZGRkMwMEEzQzgyNDAwRTNDMDI0MDBGOTc4MkJGMgorOjEwNkE5MDAwMTVFMEZGRUEwMzA4MjAyMTMwQzQwMDAzMDAwNDEwMjM5RQorOjEwNkFBMDAwMTRDMDAwMTQzMDQ5MDAwMzAwMDAzMDIxMDBBOTc4MjFFRgorOjEwNkFCMDAwMDFFNjcwMjEwMEVFNjgyQjExQTBGRkUwM0MwNDAxMDAwQworOjEwNkFDMDAwMkQzODAwMDEwMDA2QzgyQjAxMDU0ODIxMDMxOTM4MjQ4MAorOjEwNkFEMDAwMTRFMEZGREEyNTI0RkZGQzI0MDJGRkZDMDBBMjE4MjRBNgorOjEwNkFFMDAwMDA2ODIwMjEwM0UwMDAwODAwODAxMDIxMEEwMDBBNkZERQorOjEwNkFGMDAwMjQwOTAwMzAzQzBDODAwMDM1ODYwOTgwOTBDQjAwN0M1NgorOjEwNkIwMDAwMzE2QTAwMDQxNTQwRkZFOTI0MDYwMDA0MEEwMDBBN0VFOQorOjEwNkIxMDAwMDAwMDMwMjEzQzAzMDgwMDhDNjMwMDVDOEY4MjAwMTg2OQorOjEwNkIyMDAwMjdCREZGRThBRkJGMDAxNDEwNjIwMDA1QUZCMDAwMTAzMgorOjEwNkIzMDAwMDAwMzI5QzAyNEE0MDI4MEFGODQwMDE0QUY4MzAwMTg4RQorOjEwNkI0MDAwM0MxMDgwMDAzNjAzMEEwMDk0NjUwMDMyMEUwMDBBNTBBMworOjEwNkI1MDAwMzBBNDNGRkY4RTA0MDEwMDNDMTgwMDgwMzcwRjAwMDM3MworOjEwNkI2MDAwMDA4MkM4MjEyNDAyRkY4MDAzMjI2MDI0MzMyOTAwN0Y5MQorOjEwNkI3MDAwMDAwQ0Y5NDAwM0U5NDAyNTMzMkUwMDc4M0MwRDEwMDA0RAorOjEwNkI4MDAwMDEwRDUwMjUwMUNGNTgyNUFFMEMwMDI4MzYwODA5ODA4QworOjEwNkI5MDAwQUUwQzA4MENBRTBCMDgyQ0FFMEEwODMwOTEwMzAwNjk0RAorOjEwNkJBMDAwM0MwNjgwMEMwMTI2MzgyMTEwNjAwMDA2QUY4NzAwMzRCNworOjEwNkJCMDAwOEQwOTAwM0M4RDA2MDA2QzAxMjYzODIzMThFMDAwN0YwQgorOjEwNkJDMDAwMDAwMDAwMDAzQzBDODAwODM1OEIwMDgwM0MwQTgwMDBFRgorOjEwNkJEMDAwQTE2MDAwNjkzNTUwMDk4MDhFMDIwMDM4M0MwNjgwMDBCMworOjEwNkJFMDAwMzRDNTBBMDA5MEFEMDAzQzMxQTgwMDIwMTEwMDAwMTkwNgorOjEwNkJGMDAwQUY4MjAwMzAyNDBFMDAwMTNDMTk4MDAwMzczMDBBMDBCQgorOjEwNkMwMDAwQTM4RTAwMUNBRjgwMDAyNDhFMDQwMDI0OEY4NTAwMjRGNgorOjEwNkMxMDAwMjQxODAwMDhBRjgwMDAyMEFGODAwMDI4M0MwMTA4MDA0NQorOjEwNkMyMDAwQTQzODNBQkUzQzAxMDgwMEE0MjAzQUQyMEUwMDBBNTQwRgorOjEwNkMzMDAwMDAwMDMwMjE5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTA3NQorOjEwNkM0MDAwMDAwRjcxNDJBRjgyMDAyQzI3QkQwMDE4MDNFMDAwMDgzRQorOjEwNkM1MDAwMzFDMjAwMDE5MEI5MDAzMjI0MEYwMDAxMzMzODAwRkYyNworOjEwNkM2MDAwMDAxODIxODIxMDhGMDAzRjI0MUYwMDAyMTA5RjAwNjIzNQorOjEwNkM3MDAwMzRDMjBBQzAzQzAzODAwMDM0NjQwQTAwOEM5OTAwMjRBQQorOjEwNkM4MDAwMTcyMDAwMUQzNDY2MDkwMDkwODMwMDMwMjQxRjAwMDU4MgorOjEwNkM5MDAwMzA2MjAwM0YxMDVGMDA0QzI0MDUwMDAxOEY4NjAwMjAwOQorOjEwNkNBMDAwQTM4NTAwMUNBRjg2MDAyOEFGODYwMDI0M0MxOTgwMDAxNQorOjEwNkNCMDAwMzczMDBBMDA4RTA0MDAyNDhGODUwMDI0MjQxODAwMDgzMQorOjEwNkNDMDAwM0MwMTA4MDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDI5NgorOjEwNkNEMDAwMEUwMDBBNTQwMDAwMDAwMDkyMEYwMDNDOEZCRjAwMTQwOQorOjEwNkNFMDAwOEZCMDAwMTAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMTgzQQorOjEwNkNGMDAwMDNFMDAwMDgzMUMyMDAwMThDODgwMDA4OEM4RDAwMjQ1QworOjEwNkQwMDAwOENDQjAwNjQzQzE5ODAwMDM3MzAwQTAwQUY4QjAwMjQyNAorOjEwNkQxMDAwQTM4MDAwMUM4RTA0MDAyNDhGODYwMDIwOEY4NTAwMjQxMQorOjEwNkQyMDAwMDEwRDYwMjMyNDE4MDAwOEFGOEMwMDI4M0MwMTA4MDBFNgorOjEwNkQzMDAwQTQzODNBQkUzQzAxMDgwMEE0MjAzQUQyMEUwMDBBNTRGRQorOjEwNkQ0MDAwMDAwMDAwMDA5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTBCNQorOjEwNkQ1MDAwMDAwRjcxNDJBRjgyMDAyQzI3QkQwMDE4MDNFMDAwMDgyRAorOjEwNkQ2MDAwMzFDMjAwMDE5MEE3MDAzMDMwRTMwMDNGNTA2NDAwMjg5QQorOjEwNkQ3MDAwMzRDNTBBQzA4Q0FBMDAyNDE1NDAwMDIyMzRDODA5MDA3QQorOjEwNkQ4MDAwOENBQjAwNDgzQzBDN0ZGRjM1ODVGRkZGMDE2NTEwMjQ2QworOjEwNkQ5MDAwM0MxODgwMDBBRjgyMDAyMDM3MDUwOTAwOEY4RTAwMjA0QworOjEwNkRBMDAwOENBRjAwNjAwMUNGNjgyQjE1QTAwMDAyMDFDMDIwMjEyQworOjEwNkRCMDAwOENBNDAwNjAwQTAwMEFGMEFGODQwMDIwOEQwMjAwNkNGMQorOjEwNkRDMDAwMEEwMDBBQ0IzQzA2ODAwMDhDODkwMDQ4OEY4NjAwMjA5MAorOjEwNkREMDAwM0MwQTdGRkYzNTUwRkZGRjAxMzAzODI0M0MwNDgwMDgxNworOjEwNkRFMDAwMjQwNTAwMDFBRjg3MDAyOEFDODAwMDZDQTM4NTAwMUMzRgorOjEwNkRGMDAwMEEwMDBBRkVBRjg2MDAyNDhDNDQwMDE0MEEwMDBBRjA0MAorOjEwNkUwMDAwQUY4NDAwMjA4RDAyMDA2ODBBMDAwQjM4M0MxODgwMDAxNworOjEwNkUxMDAwMzRDNDA5ODA4Qzg2MDA3MDhDQjAwMDE0MDBEMDQ4MkJEQworOjEwNkUyMDAwMTEyMDAwMDQwMDAwMDAwMDhDODIwMDcwMEEwMDBCMzg2MgorOjEwNkUzMDAwM0MxODgwMDA4Q0EyMDAxNDBBMDAwQjM4M0MxODgwMDAxQgorOjEwNkU0MDAwOEY4NTAwMjQyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTQ0RAorOjEwNkU1MDAwMTRBMDAwMDhBRkIwMDAxMDNDMDQ4MDAwMzQ4NzBBMDA4MgorOjEwNkU2MDAwOTBFNjAwMzAyNDAyMDAwNTMwQzMwMDNGMTA2MjAwQjdGNgorOjEwNkU3MDAwMzQ4NDA5MDA4RjkxMDAyMDAwQTA4MDIxM0MwNDgwMDAxMAorOjEwNkU4MDAwMzQ4RTBBMDA4RENEMDAwNDNDMDYwODAwOENDNjNBQjA1MgorOjEwNkU5MDAwMzFBNzNGRkYwMEU2NjAyQjU1ODAwMDAxMDBFMDMwMjE2NAorOjEwNkVBMDAwOTM4RjAwMUMxMUUwMDA3NjAwRDAxMDJCMzQ5OTA5ODBEQworOjEwNkVCMDAwOTMzODAwN0MzMzA0MDAwMjEwODAwMDc3MjQwMzAwMzRGMAorOjEwNkVDMDAwMDBDM0Y4MkIxN0UwMDBENjAwQzMzMDIzMDBEMDEwMkJFRQorOjEwNkVEMDAwM0MwMTA4MDBBNDIzM0FCQzE0NDAwMDZEMDIwMDE4MjFCNAorOjEwNkVFMDAwM0MwNDA4MDA4Qzg0M0FBQzAwNjQyODJCNTRBMDAwMDFCOAorOjEwNkVGMDAwMDA2MDIwMjEzQzA1ODAwMDM0QTkwQTAwOTEyODAwM0M1NAorOjEwNkYwMDAwM0MwMTA4MDBBQzI0M0FCNDMxMDMwMDIwMTQ2MDAwMDJCNAorOjEwNkYxMDAwMDAwMDQ4MjE4Q0E5MEUxODhGODgwMDJDMDEyODUwMkJDNgorOjEwNkYyMDAwMTE0MDAwNUYwMDAwMDAwMDNDMDUwODAwOENBNTNBQjQ0OQorOjEwNkYzMDAwMDBBOTYwMjEwMTBDNTgyQjExNjAwMDVDMDBCMDY4MkI4NworOjEwNkY0MDAwMDEwOTM4MjMwMEUwMjgyMTNDMDEwODAwQUMyNzNBQjRBRAorOjEwNkY1MDAwMTIwMDAwMDMyNDAyRkZGQzEwQjAwMDhDMzIyQTAwMDM1MAorOjEwNkY2MDAwMDBBMkY4MjQzQzAxMDgwMEE0MjAzQUQyM0MwMTA4MDAwOQorOjEwNkY3MDAwQUMzRjNBQjQwM0UwMjgyMThGODQwMDI0MTIwNDAwMDZCOQorOjEwNkY4MDAwM0MwMzgwMDg4QzZBMDA2QzAyMDAyMDIxQUY5MTAwMjAzNQorOjEwNkY5MDAwMjU1MDAwMDFBQzcwMDA2QzhGOEIwMDI4MDA4NTg4MjM4MQorOjEwNkZBMDAwQUY5MTAwMjQwMTY1MjAyM0FGODQwMDI4MTIyMDAwMDI0NQorOjEwNkZCMDAwMjQwNzAwMTgyNDA3MDAxMDNDMEU4MDA4MzVDNjAwODAwNgorOjEwNkZDMDAwOTBDRDAwNjgyNDBDMDAwMTNDMDEwODAwQTAyNzNBRDBCNQorOjEwNkZEMDAwMzFBNzAwRkYxMEVDMDA0NzAwMDAwMDAwMTQ4MDAwMThFQgorOjEwNkZFMDAwMDAwMDI4MjEzQzBCODAwMDkxNjUwMTA5MzU3MTA5ODA2MgorOjEwNkZGMDAwOEUyMzAwMTgzMEE1MDBGRjAwMDM1NjAyMjRBMzAwMDFEMQorOjEwNzAwMDAwMzE0NjAwN0YzMDcwMDA3RjEyMDYwMDdFMjQwQ0ZGODAyNgorOjEwNzAxMDAwM0MwRjgwMDgzNUU5MDA4MEExMjMwMDRDM0MwODA4MDBBMworOjEwNzAyMDAwOEQwODNBQ0MyNDBFMDAwMjNDMDEwODAwQTAyRTNCMTEzMgorOjEwNzAzMDAwMzUwRDAwMDgzQzAxMDgwMEFDMkQzQUNDMjQwNTAwMTBBOQorOjEwNzA0MDAwM0MxRjgwMDAzN0U0MEEwMDkwOTkwMDNDMzMzODAwMjA1MAorOjEwNzA1MDAwMTMwMDAwMDUwMEEwMjAyMTI0MDIwMDAxM0MwMTA4MDBDQgorOjEwNzA2MDAwQUMyMjNBQjQzNEE0MDAwMThGQkYwMDE4OEZCMTAwMTREMQorOjEwNzA3MDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjAyMQorOjEwNzA4MDAwM0MwMTA4MDBBNDIwM0FCQzEwNDBGRjk1MDIwMDE4MjFFMgorOjEwNzA5MDAwMEEwMDBCOEIwMEMwMTgyMTBBMDAwQjgzMjQwMzAwMzA2OAorOjEwNzBBMDAwM0MwNTA4MDA4Q0E1M0FCNDAwQjA2ODJCMTFBMEZGQThERAorOjEwNzBCMDAwMDAwMDAwMDAzQzA0MDgwMDk0ODQzQUJDMDA4NTc4MjE1QworOjEwNzBDMDAwMDFFNzcwMkIxMUMwMDAwNzJDQTIwMDA0M0MxRjYwMDBEOAorOjEwNzBEMDAwOEZGOTU0MDQzMzM4MDAzRjE3MDBGRkUzMjQwNDAwNDJDMworOjEwNzBFMDAwMkNBMjAwMDQxMDQwRkY5QTI0MDQwMDQyMEEwMDBCRUU3OAorOjEwNzBGMDAwOEZCRjAwMTgxNTI4RkZCOTAwMDAwMDAwOENDMjAwMThDRgorOjEwNzEwMDAwM0MxODgwMDAyNDE5MDAwMjAwNThGODI1QUNERjAwMTg1NAorOjEwNzExMDAwMzcwNDBBMDBBMEQ5MDA2ODkwODkwMDNDMjQwRjAwMDRCRAorOjEwNzEyMDAwMDBBMDEwMjEzMTI4MDAyMDNDMDEwODAwQTAyRjNCMTFCNQorOjEwNzEzMDAwMTEwMDAwMDIyNDA1MDAxMDI0MDIwMDAxM0MwMTA4MDA5NworOjEwNzE0MDAwQUMyMjNBQUMwQTAwMEJFNDNDMUY4MDAwOEY4ODAwMjg3OAorOjEwNzE1MDAwOEM4OTAwNjAwMTA5MjgyQjE0QTAwMDAyMDEwMDg4MjFGRAorOjEwNzE2MDAwOEM5MTAwNjAzQzBCODAwMDhENjQwRTE4MjQwQTAwMDE5NQorOjEwNzE3MDAwMDIyMDI4MjEwMjIwMzAyMUEzOEEwMDFDMEUwMDBBNTQ3QworOjEwNzE4MDAwMDIyMDgwMjEwQTAwMEI3MkFGODIwMDJDMDAwQTE4MjMxMworOjEwNzE5MDAwMTIyMDAwMDczMDY0MDAwMzNDMEQ4MDAwMzVBNzA5ODBGMQorOjEwNzFBMDAwOTBFQzAwN0MzMThCMDAwNDE1NjAwMDE5MjQ4RTAwMDRFMworOjEwNzFCMDAwM0MwMTA4MDBBNDI0M0FEMjNDMTgwODAwOTcxODNBRDI5RgorOjEwNzFDMDAwMDMwNTIwMjEwMEM0NzgyQjExRTBGRjZDOEY4NDAwMjQ3QworOjEwNzFEMDAwMkNBNjAwMDUxNEMwRkZBNDI0MDQwMDQyMzBCOTAwMDMwQgorOjEwNzFFMDAwMTcyMDAwMDIwMEI5MTgyMzI0QTNGRkZDM0MwMTA4MDA2QgorOjEwNzFGMDAwQUMyMzNBQjQzQzAxMDgwMEE0MjAzQUQyMEEwMDBCQjFGNworOjEwNzIwMDAwMDA2MDI4MjEwMEFDMzgyNDBBMDAwQkQ3MDBFQzE4MjZCNworOjEwNzIxMDAwM0MwMTA4MDBBNDJFM0FEMjBBMDAwQzQxMDAwMDAwMDBGNAorOjEwNzIyMDAwM0MwMTA4MDBBQzIwM0FCNDBBMDAwQkVEMjQwNDAwNDJGMworOjEwNzIzMDAwOEY4MzAwMjgzQzBCODAwMDM1NkEwQTAwMTQ2MDAwMDYyQQorOjEwNzI0MDAwMDAwMDEwMjE5MTQ2MDAzMDI0MDUwMDA1MzBDNDAwRkZFNQorOjEwNzI1MDAwMTA4NTAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDBBQgorOjEwNzI2MDAwOTE0OTAwNDgzMTI4MDBGRjAwMDgzOUMyMTRFMEZGRkFCNAorOjEwNzI3MDAwM0MwNDgwMDgzQzA2MDgwMDk0QzYzQUJDM0MwMzA4MDA2NQorOjEwNzI4MDAwOEM2MzNBRDQzQzA1MDgwMDhDQTUzQUI0M0MxODA4MDAzRAorOjEwNzI5MDAwOTcxODNBRDIwMDY2QzgyMThDOEUwMDA0MDMyNTc4MjEwNQorOjEwNzJBMDAwMDFGODY4MjEwMUFFNjAyMzE5ODAwMDFEMDAwMDAwMDA3NAorOjEwNzJCMDAwOTE1ODAwNEM4RjhEMDAzNDk1NkUwRTEwMzMwRjAwRkZFNworOjEwNzJDMDAwOERBOTAwMDQwMUNGMzAyMzhEQUEwMDAwMzBDRkZGRkYyRAorOjEwNzJEMDAwMDAwRjYxMDAwMTJDMjgyMTAwMDAzODIxMDE0NzIwMjFFNgorOjEwNzJFMDAwMDBBQzE4MkIwMDgzQzgyMUFEQTUwMDA0QURCOTAwMDA4NworOjEwNzJGMDAwOTFCODAwMEEwMUY4NzAyMUExQUUwMDBBOTU2QzBFMTIzNworOjEwNzMwMDAwOEY4QTAwMzRBNTRDMDAwODk1NDkwMDM4MjUyODAwMDFEMworOjEwNzMxMDAwQTU0ODAwMzg5MTQ3MDAwRDM0RUIwMDA4QTE0QjAwMEQ0MworOjEwNzMyMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMTg0MAorOjEwNzMzMDAwOTM4RjAwMUM4RkIwMDAxNDNDMDg3RkZGOEY4NzAwMjRDMAorOjEwNzM0MDAwM0MwQzgwMDAzNTE4RkZGRkFGQkYwMDIwQUZCMTAwMUMyMAorOjEwNzM1MDAwMzU5OTBBMDAwMjE4MTgyNDkzMkEwMDNDMDAwRjVGQzBEOAorOjEwNzM2MDAwM0MwMkJGRkYyQ0YwMDAwMTM0NDlGRkZGMDA2QkY4MjUwMQorOjEwNzM3MDAwM0MwODA4MDA4RDA4M0FENDhGOTkwMDMwM0MxODA4MDA2QQorOjEwNzM4MDAwOTcxODNBQ0EwM0U5NTgyNDAwMTA3RjgwM0MwN0VGRkZBMgorOjEwNzM5MDAwM0MwNUYwRkYwMTZGMTgyNTNDMTE4MDAwMzE0OTAwMjBBOQorOjEwNzNBMDAwMzRFMkZGRkYzNEFERkZGRjM2MkUwOTgwMjdBNTAwMTAyMQorOjEwNzNCMDAwMjQwNjAwMDIwMTE5NDAyMzI3MEEwMDAyMDA2MjE4MjQ1MworOjEwNzNDMDAwMDA4MDgwMjExNTIwMDAwMjAwMDA1ODIxOEQ4QjBFMUNBQQorOjEwNzNEMDAwQTdBQTAwMTIwNTAwMDAzQTI0MDcwMDAwMzBFRjAwRkZDMgorOjEwNzNFMDAwMDAwRjNGMDAwMDY3NDAyNTNDMDI4MDA4QUZBODAwMTQ1MgorOjEwNzNGMDAwMzQ0QjAwODA5MTZBMDA2ODNDMEYwODAwOTFFRjNBRDE0RAorOjEwNzQwMDAwM0MwOURGRkYzNTNGRkZGRjAwMEE2MDJCM0MwMjA4MDAwQworOjEwNzQxMDAwOTQ0MjNBQzRBM0FGMDAxMTAxMUZDMDI0MDAwQ0NGNDAxNgorOjEwNzQyMDAwMDMxOTE4MjU4RkE3MDAxMEFGQTMwMDE0M0MxRjA4MDBGNAorOjEwNzQzMDAwOTNGRjNBRDNBN0EyMDAxNjhGQTgwMDE0MDBFRDQ4MjRBQQorOjEwNzQ0MDAwM0MwQjAxMDAzQzBBMEZGRjAxMkJDODI1MzNGODAwMDM1OQorOjEwNzQ1MDAwMzU0Q0ZGRkYwMTBENzgyNDNDMDI3MDAwMDMyQzM4MjRDQQorOjEwNzQ2MDAwMDAxODFFMDAwMEUyNDgyNTAxRTM1ODI1QUZBQjAwMTRDOAorOjEwNzQ3MDAwQUZBOTAwMTA5MURGMDA3Q0EzQkYwMDE1MEUwMDAwNjNEMAorOjEwNzQ4MDAwMDAwMDAwMDAzNjJEMEEwMDkxQTYwMDNDMzBDNDAwMjAwOAorOjEwNzQ5MDAwMTA4MDAwMDYyNjAyMDAwODNDMTEwODAwOTYzMTNBQzAxMAorOjEwNzRBMDAwMjYyRUZGRkYzQzAxMDgwMEE0MkUzQUMwOEZCRjAwMjAwQgorOjEwNzRCMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjgyMgorOjEwNzRDMDAwOEY4QTAwMkMwMTZBNjAyQjU1ODBGRkM0MjQwNzAwMDFCRAorOjEwNzREMDAwMEEwMDBDQ0IzMEVGMDBGRjkzODMwMDFDM0MwMjgwMDBCRAorOjEwNzRFMDAwMjdCREZGRDgzNDQ4MEEwMDAwODA1MDIxQUZCRjAwMjBEQworOjEwNzRGMDAwMzQ0NjBBQzAwMTAwMjgyMTEwNjAwMDBFMzQ0NDA5ODA3RgorOjEwNzUwMDAwOTEwNzAwMzAyNDBCMDAwNThGODkwMDIwMzBFQzAwM0ZFQworOjEwNzUxMDAwMTE4QjAwMEIwMDAwMzgyMUFGQTkwMDEwM0MwQjgwMDgzNAorOjEwNzUyMDAwOEQ2OTAwNkNBRkFBMDAxODBFMDAwMTJCQUZBOTAwMTRFMgorOjEwNzUzMDAwQTM4MDAwMUM4RkJGMDAyMDAzRTAwMDA4MjdCRDAwMjhBNworOjEwNzU0MDAwOEQxRjAwNDgzQzE4MDgwMDhGMTgzQUI0OEY5OTAwMjgwNgorOjEwNzU1MDAwM0MwMjdGRkY4RDA4MDA0NDM0NDNGRkZGQUZBOTAwMTBCOQorOjEwNzU2MDAwM0MwQjgwMDg4RDY5MDA2QzAzRTM3MDI0MDMxOTc4MjFCQgorOjEwNzU3MDAwMDFDRjY4MjMwMUE4MzgyMUFGQUEwMDE4MEUwMDAxMkIwMworOjEwNzU4MDAwQUZBOTAwMTQwQTAwMEQyMEEzODAwMDFDM0MwNTgwMDA1OAorOjEwNzU5MDAwMzRBNjBBMDA5MEM3MDAzQzNDMDYwODAwOTRDNjNBRDJDNAorOjEwNzVBMDAwM0MwMjA4MDA4QzQyM0FDQzMwRTMwMDIwMDAwNjI0MDA2NAorOjEwNzVCMDAwMTA2MDAwMUUwMDQ0MzgyNTNDMDg4MDA4MzUwNTAwODAxNgorOjEwNzVDMDAwOTBBMzAwNjgwMDAwMzAyMTI0MDgwMDAxMDAwMDIwMjE2MQorOjEwNzVEMDAwMjQwMzAwMDEzQzA1ODAwMDhDQUMwMTc4MDU4MEZGRkU4RgorOjEwNzVFMDAwMDAwMDAwMDBBQ0E4MDE0OEE0QTQwMTQ0QTRBMzAxNDZFMworOjEwNzVGMDAwM0MwMzA4MDA4QzYzM0FENDNDMTg4MDA4MzcwRjAwODBBNQorOjEwNzYwMDAwQUNBMzAxNEMzQzE5MDgwMDkzMzkzQUQxM0MwRDEwMDA1MQorOjEwNzYxMDAwQTBCOTAxNTJBQ0E3MDE1NEE0QTYwMTU4OTFFRTAwNENBOAorOjEwNzYyMDAwQTBBRTAxNkQwM0UwMDAwOEFDQUQwMTc4OENBODBFMUM4MworOjEwNzYzMDAwM0MwQjA4MDA4RDZCM0FCNDk0QUEwRTE2OTRBOTBFMTQ1NAorOjEwNzY0MDAwMDE2NjMwMjEzMTQzRkZGRjBBMDAwRDQ4MzEyNEZGRkY1RQorOjEwNzY1MDAwM0MwNDgwMDAzNDgzMEEwMDkwNjUwMDNDMzBBMjAwMjA4NgorOjEwNzY2MDAwMTA0MDAwMUMwMDAwMDAwMDAwMDAzMDIxMDAwMDIwMjExQworOjEwNzY3MDAwMDAwMDE4MjEzQzA1ODAwMDhDQTkwMTc4MDUyMEZGRkU0MAorOjEwNzY4MDAwMDAwMDAwMDBBQ0E2MDE0ODNDMEUwODAwOERDRTNBRDRBNAorOjEwNzY5MDAwMjQwREZGOTEyNDBDMDA0MDNDMEI4MDA4QTRBMzAxNDQ1RQorOjEwNzZBMDAwMzU2QTAwODBBNEE0MDE0NkFDQUUwMTRDQTBBRDAxNTJFNQorOjEwNzZCMDAwQUNBQzAxNTRBNEEwMDE1ODkwQTMwMTA5OTE0NDAwNEMyMgorOjEwNzZDMDAwOTBBNjAxMDkzQzA0MTAwMEEwQTYwMTZEMDNFMDAwMDg4QgorOjEwNzZEMDAwQUNBNDAxNzg4Qzg2MEUxODk0ODgwRTEyOTQ4NzBFMTAzNAorOjEwNzZFMDAwMzEwNEZGRkYwQTAwMEQ3MDMwRTNGRkZGM0MwNDgwMDAwRgorOjEwNzZGMDAwMzQ4MzBBMDA5MDY1MDAzQzMwQTIwMDIwMTA0MDAwMjYzMAorOjEwNzcwMDAwMjdCREZGRjgyNDA5MDAwMTAwMDAzODIxMjQwODAwMDFFQQorOjEwNzcxMDAwM0MwNjgwMDA4Q0M0MDE3ODA0ODBGRkZFMDAwMDAwMDA1RAorOjEwNzcyMDAwOTBDQTAxMDkzQzA0MDgwMDkwODQzQjExM0MxODgwRkY3QQorOjEwNzczMDAwQTNBQTAwMDM4RkEzMDAwMDMwODUwMDdGMzcwRkZGRkY0RgorOjEwNzc0MDAwMDA2NjEwMjVBRkEyMDAwMDkwRDkwMTBBQTNBMDAwMDI5NAorOjEwNzc1MDAwMDAwNTZFMDBBM0I5MDAwMThGQUUwMDAwMjQwQTMwMDBCRQorOjEwNzc2MDAwMjdCRDAwMDgwMUNGNjAyNDAxOEQ1ODI1QUNDQjAxNEMwQQorOjEwNzc3MDAwQUNDQTAxNTRBNEMwMDE1OEFDQzkwMTQ4QTRDNzAxNDQxMworOjEwNzc4MDAwMjQwOUZGODBBNEM4MDE0NjNDMDgxMDAwQTBDOTAxNTI4QQorOjEwNzc5MDAwMDNFMDAwMDhBQ0M4MDE3ODhDODkwRTE4OTQ4NzBFMTI5QgorOjEwNzdBMDAwOTQ4NjBFMTAzMEU4RkZGRjBBMDAwRDk3MzBDN0ZGRkZFOAorOjEwNzdCMDAwMjdCREZGRThBRkIwMDAxMDNDMTA4MDAwQUZCRjAwMTQ0MQorOjEwNzdDMDAwMzYxODBBMDA5NzBGMDAzMjBFMDAwQTUwMzFFNDNGRkZDRQorOjEwNzdEMDAwOEUwRTAxMDAyNDBERkY4MDNDMDQyMDAwMDFDMjU4MjFDMAorOjEwNzdFMDAwMDE2RDYwMjQwMDBDNDk0MDMxNkEwMDdGMDEyQTQwMjU2OAorOjEwNzdGMDAwMDEwNDM4MjUzQzA0ODAwOEFFMDcwODMwMzQ4NjAwODAzOAorOjEwNzgwMDAwOTBDNTAwNjgyNDAzMDAwMjMwQTIwMEZGMTA0MzAwMDQ2QQorOjEwNzgxMDAwOEY5RjAwMjA4Rjk5MDAyNEFDOUYwMDY4QUM5OTAwNjQ3MgorOjEwNzgyMDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMThDMAorOjEwNzgzMDAwM0MwQTA4MDAyNTRBMzU5QzNDMDkwODAwMjUyOTM2MzhCMQorOjEwNzg0MDAwM0MwODA4MDAyNTA4MkE2MDNDMDcwODAwMjRFNzM2RkNBRAorOjEwNzg1MDAwM0MwNjA4MDAyNEM2MzQyNDNDMDUwODAwMjRBNTMxN0NERAorOjEwNzg2MDAwM0MwNDA4MDAyNDg0MkQ4QzNDMDMwODAwMjQ2MzM0RDg5NQorOjEwNzg3MDAwM0MwMjA4MDAyNDQyMzI3NDNDMDEwODAwQUMyQTNBOTBEMQorOjEwNzg4MDAwM0MwMTA4MDBBQzI5M0E4QzNDMDEwODAwQUMyODNBODgzRAorOjEwNzg5MDAwM0MwMTA4MDBBQzI3M0E5NDNDMDEwODAwQUMyNjNBQTQwRAorOjEwNzhBMDAwM0MwMTA4MDBBQzI1M0E5QzNDMDEwODAwQUMyNDNBOTgwNQorOjEwNzhCMDAwM0MwMTA4MDBBQzIzM0FBODNDMDEwODAwQUMyMjNBQTBFNQorOjA4NzhDMDAwMDNFMDAwMDgwMDAwMDAwMEQ1Cis6MDg3OEM4MDA4MDAwMDk0MDgwMDAwOTAwNjYKKzoxMDc4RDAwMDgwMDgwMTAwODAwODAwODA4MDA4MDAwMDgwMEUwMDAwMDEKKzoxMDc4RTAwMDgwMDgwMDgwODAwODAwMDA4MDAwMEE4MDgwMDAwQTAwNzQKKzowODc4RjAwMDgwMDAwOTgwODAwMDA5MDBGRQorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA2LTQuNi4xNi5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDYtNC42LjE2LmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MWRlOWUuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDYtNC42LjE2LmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSw0NDEgKzAsMCBAQAotOjEwMDAwMDAwMDAwMDAwMDAwMDAwMENBMDAwMDAwMDU4MDAwMDAwMDBFQwotOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAotOjEwMDAzMDAwMDAwMDBERTAwMDAwMENGODAwMDAwMDA1MDAwMDAwMDBDQQotOjEwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAotOjA4MDA1MDAwMDAwMDAwMDAwMDAwMDAwMEE4Ci06MDgwMDU4MDAwMDAwMDAxMEIxODAwMDAyNUQKLToxMDAwNjAwMDAwMDAwMDFGMDEwMzAxMDAwMDAwMDAwOEFDMDAwMDAxQjcKLToxMDAwNzAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwQzJGODAwMDAxQkYKLToxMDAwODAwMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDJCODAwMDAwOUEKLToxMDAwOTAwMDAwMDAwMDEwMjAzRjAwNjMwMDAwMDAxMDIxM0YwMDAzMUIKLToxMDAwQTAwMDAwMDAwMDEwMjBCRjAwMzIwMDAwMDAxODgwMDBGRkZEOUIKLToxMDAwQjAwMDAwMDAwMDEwQjFCOEIwMEQwMDAwMDAwQjJGREYwMDAyRUYKLToxMDAwQzAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMzgwMDAwRjEKLToxMDAwRDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1RjMKLToxMDAwRTAwMDAwMDAwMDE4ODAwMDAwNzUwMDAwMDAxODgwMDAwMTBCNUYKLToxMDAwRjAwMDAwMDAwMDA4MDIwMDAwMDIwMDAwMDAwRjQyRTAwMDFDQTcKLToxMDAxMDAwMDAwMDAwMDEwOTE4NDBBMTEwMDAwMDAxMDJDNjIwMDBCMDYKLToxMDAxMTAwMDAwMDAwMDE4ODAwMDAwMUUwMDAwMDAwODAyMDAwMDAyMUQKLToxMDAxMjAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE4M0IKLToxMDAxMzAwMDAwMDAwMDA4MkM4MDAwQjEwMDAwMDAwODJEMDAwMDA5MUMKLToxMDAxNDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3N0QKLToxMDAxNTAwMDAwMDAwMDE4ODAwMDAwNkYwMDAwMDAxODgwMDAwMDE1RUIKLToxMDAxNjAwMDAwMDAwMDA4QjEwMDAwMDEwMDAwMDAwODJDODAwMEIwNzEKLToxMDAxNzAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMDAxOEMKLToxMDAxODAwMDAwMDAwMDE4ODAwMDAwNjkwMDAwMDAwQjJGREYwMDAyNTMKLToxMDAxOTAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJDMDcwMDAwN0YKLToxMDAxQTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDA1MDAwMDAwQ0IKLToxMDAxQjAwMDAwMDAwMDE4ODAwMEZGREMwMDAwMDAwQjJGREYwMDAyQjEKLToxMDAxQzAwMDAwMDAwMDBDMUY4MDAwMDAwMDAwMDAwMDJDMDcwMDAwNTEKLToxMDAxRDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDA1MDAwMDAwOUIKLToxMDAxRTAwMDAwMDAwMDE4ODAwMEZGRDYwMDAwMDAwQzFGODAwMDAyRjUKLToxMDAxRjAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRkQzOTAKLToxMDAyMDAwMDAwMDAwMDBDMjk4MDAwMDIwMDAwMDAwQzFGODAwMDAyOEEKLToxMDAyMTAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDA1OUUKLToxMDAyMjAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkNEQjMKLToxMDAyMzAwMDAwMDAwMDA4MDIyNDAwM0MwMDAwMDAxODAwMDQwMDAwMzgKLToxMDAyNDAwMDAwMDAwMDE4ODAwMDAwMUMwMDAwMDAxODgwMDAwMDFFNDQKLToxMDAyNTAwMDAwMDAwMDE4ODAwMDAwNTIwMDAwMDAxODgwMDAwMDlFN0UKLToxMDAyNjAwMDAwMDAwMDE4ODAwMDAwOUQwMDAwMDAxODgwMDAwMDAwQzEKLToxMDAyNzAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwNEUKLToxMDAyODAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwM0UKLToxMDAyOTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwMkUKLToxMDAyQTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMERGM0YKLToxMDAyQjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwMEUKLToxMDAyQzAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxODgwMDAwMDFCQ0UKLToxMDAyRDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEI0M0EKLToxMDAyRTAwMDAwMDAwMDE4ODAwMDAwMkUwMDAwMDAxODgwMDAwMERGRDEKLToxMDAyRjAwMDAwMDAwMDE4ODAwMDAxMEEwMDAwMDAxODgwMDAwMEQ1RUUKLToxMDAzMDAwMDAwMDAwMDE4ODAwMDAxMkUwMDAwMDAxODgwMDAwMDNCNTMKLToxMDAzMTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDcxM0MKLToxMDAzMjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDA1MDAwMDAwMUMKLToxMDAzMzAwMDAwMDAwMDE4ODAwMEZGQUMwMDAwMDAxMDkxRDQwMDAwMDUKLToxMDAzNDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxNEIKLToxMDAzNTAwMDAwMDAwMDA4MkEwMDAwMDIwMDAwMDAwMDA1MDAwMDAwNjQKLToxMDAzNjAwMDAwMDAwMDE4ODAwMEZGQTYwMDAwMDAxMDkxRDQwMDAwREIKLToxMDAzNzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxMUIKLToxMDAzODAwMDAwMDAwMDAwMjk0MjAwMDAwMDAwMDAwODJBMDAwMDAyQ0UKLToxMDAzOTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjlGMjIKLToxMDAzQTAwMDAwMDAwMDE4ODAwMEZGOUUwMDAwMDAxMEIxQkNCMDBBRTEKLToxMDAzQjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwNDcKLToxMDAzQzAwMDAwMDAwMDAwMkMzQzAwMDAwMDAwMDAxMDkxRDQwMDAwNTAKLToxMDAzRDAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDAwMDE2QjcKLToxMDAzRTAwMDAwMDAwMDE4ODAwMDAwQUMwMDAwMDAxMDJDNjIwMUJBNzAKLToxMDAzRjAwMDAwMDAwMDE4ODAwMDAwMDUwMDAwMDAwODJDODAwMEIxRkIKLToxMDA0MDAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwMzkKLToxMDA0MTAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAwQzI5ODAwMDAwNkEKLToxMDA0MjAwMDAwMDAwMDBDMUY4MDAwMDAwMDAwMDAxMDkxREUwMDAwQTIKLToxMDA0MzAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDA2N0IKLToxMDA0NDAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRjg5RDUKLToxMDA0NTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwQzI5ODAwMDAxNzEKLToxMDA0NjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODJBMDAwMDBCQTMKLToxMDA0NzAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjgzNUQKLToxMDA0ODAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDA2ODIwMDAwQ0EKLToxMDA0OTAwMDAwMDAwMDEwQjE4QTAwMDYwMDAwMDAwMDg2MEMxNDAwNjUKLToxMDA0QTAwMDAwMDAwMDEwQjE4QzAwMDQwMDAwMDAwMDA1MDAwMDAwRjYKLToxMDA0QjAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAxMDkxRDQwMDAwOTQKLToxMDA0QzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDA1MDIwMDAwMDAKLToxMDA0RDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEEwMDAwN0IKLToxMDA0RTAwMDAwMDAwMDEwQjFBMEIwMTMwMDAwMDAwQjJGREYwMDAyQ0QKLToxMDA0RjAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwODJDODAwMDAwRkMKLToxMDA1MDAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwNDEKLToxMDA1MTAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRkVFOUUKLToxMDA1MjAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxMDAwMUYwMDAwQ0EKLToxMDA1MzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwRjQ3NjAwMDA4N0UKLToxMDA1NDAwMDAwMDAwMDBGMDYwRTAwMDEwMDAwMDAwMDBGNTgwMDAwMjAKLToxMDA1NTAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwM0UKLToxMDA1NjAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBENjEwMDAwQTUKLToxMDA1NzAwMDAwMDAwMDE4ODAwMDAwMTMwMDAwMDAwRjQ3NjAwMDA4MTIKLToxMDA1ODAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwODJDODAwMDAwOUMKLToxMDA1OTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwQjEKLToxMDA1QTAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwRjA2MEUwMDAxNTUKLToxMDA1QjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGNTgwMDAwQTUKLToxMDA1QzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBBNjQwMDAwM0UKLToxMDA1RDAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGQjQKLToxMDA1RTAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAyNjIwMDAwMzkKLToxMDA1RjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDMxMDQwMDAwQUIKLToxMDA2MDAwMDAwMDAwMDAwMzA5QTAwMDAwMDAwMDAwMDBDOTYxODAwNjYKLToxMDA2MTAwMDAwMDAwMDA5MEM5OUZGRkYwMDAwMDAwNENDOTkzNDAwOTEKLToxMDA2MjAwMDAwMDAwMDEwQjE5NjMyMDIwMDAwMDAwODBGODAwMDAwQTgKLToxMDA2MzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAxMDAwMjIwMDAyRDAKLToxMDA2NDAwMDAwMDAwMDBDMjk1MjAwMDEwMDAwMDAwQzI5NTIwMDAwOUIKLToxMDA2NTAwMDAwMDAwMDA4MDIwMDAwMEUwMDAwMDAwODAyODAwMDFBREUKLToxMDA2NjAwMDAwMDAwMDEwQjFDNDBBMDIwMDAwMDAwODAyMDAwMDAzRUMKLToxMDA2NzAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAwQzFGODAwMDAxQTMKLToxMDA2ODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwMDJBMDAwODAwMkYKLToxMDA2OTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRjNGQ0QKLToxMDA2QTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAxMDkxRDQwMDAwQkEKLToxMDA2QjAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAwMDJDMjAwMDAwQkIKLToxMDA2QzAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwNDEKLToxMDA2RDAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxMDkxRDQwMDAwRDMKLToxMDA2RTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDA2RDEKLToxMDA2RjAwMDAwMDAwMDA4MkQwMDAwMDYwMDAwMDAwMDMwODAwMDAwMEYKLToxMDA3MDAwMDAwMDAwMDAwMzEwMDAwMDAwMDAwMDAwODJEODAwMDA2RkQKLToxMDA3MTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxNzcKLToxMDA3MjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwNDEKLToxMDA3MzAwMDAwMDAwMDA4MkEwMDAwMTAwMDAwMDAwMDA1MDAwMDAwNzIKLToxMDA3NDAwMDAwMDAwMDE4ODAwMEZGMkEwMDAwMDAxMDkxQTBCMDA5RUUKLToxMDA3NTAwMDAwMDAwMDA4MkM4MDAwQjEwMDAwMDAwODJEMDAwMDA5RjYKLToxMDA3NjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3NTcKLToxMDA3NzAwMDAwMDAwMDE4ODAwMEZGQUIwMDAwMDAxODgwMDAwMDEwOEYKLToxMDA3ODAwMDAwMDAwMDA4QUMwMDAwMDEwMDAwMDAxODgwMDAwMDBCMTEKLToxMDA3OTAwMDAwMDAwMDAwMDM4MEIwMDAwMDAwMDAwQjJGREYwMDAyMEIKLToxMDA3QTAwMDAwMDAwMDAwMkMwMDQwMDAwMDAwMDAxMDkxRDQwMDAwNjgKLToxMDA3QjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjlBNTAKLToxMDA3QzAwMDAwMDAwMDE4ODAwMDAwMzAwMDAwMDAxODgwMDAwMDA2QzMKLToxMDA3RDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDAwRTAwQzQKLToxMDA3RTAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1MTkKLToxMDA3RjAwMDAwMDAwMDE4ODAwMEZGMTQwMDAwMDAwMDA2ODIwMDAwQzYKLToxMDA4MDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxODYKLToxMDA4MTAwMDAwMDAwMDEwMENFNzAwMDcwMDAwMDAwOTA1NjJGRkZGNjAKLToxMDA4MjAwMDAwMDAwMDEwQkE2QzE0MDUwMDAwMDAwMDJBREYwMDAwNzAKLToxMDA4MzAwMDAwMDAwMDAwMjEwMDAwMDAwMDAwMDAwODJBMDAwMDA1NjAKLToxMDA4NDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJDODAwMEIwQ0YKLToxMDA4NTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwQzMxNjIwMDE4QTQKLToxMDA4NjAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAxODgwMDBGRjhDQUYKLToxMDA4NzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMEIxQTBCMDBFMzQKLToxMDA4ODAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwNzIKLToxMDA4OTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAxMDkxRDQwMDAwOTcKLToxMDA4QTAwMDAwMDAwMDE4ODAwMDAwMTQwMDAwMDAxMDJDNjIwMDAyRkMKLToxMDA4QjAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAwQjJGREYwMDAyN0EKLToxMDA4QzAwMDAwMDAwMDAwMkMwNzAwMDAwMDAwMDAwQzFGODAwMDAxNDkKLToxMDA4RDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDA1MDAwMDAwOTQKLToxMDA4RTAwMDAwMDAwMDE4ODAwMEZFRjYwMDAwMDAwODJDODAwMEIxMTcKLToxMDA4RjAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwNDUKLToxMDA5MDAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAwQzI5ODAwMDAxNzQKLToxMDA5MTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwQUMKLToxMDA5MjAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBBODIKLToxMDA5MzAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRUVCMzEKLToxMDA5NDAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAwODJDODAwMEIwM0MKLToxMDA5NTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMTUwNTQKLToxMDA5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwNUYwMDAwRjgKLToxMDA5NzAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwOEUKLToxMDA5ODAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAwMDAwMDAwMDAwQTkKLToxMDA5OTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEEwMDAwQjYKLToxMDA5QTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDBBQUFBNzAKLToxMDA5QjAwMDAwMDAwMDE4ODAwMEZGNUIwMDAwMDAwQzI5ODAwMDAxOEYKLToxMDA5QzAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODJBMDAwMDA5NDAKLToxMDA5RDAwMDAwMDAwMDA4MDUwMEFBQUEwMDAwMDAxODgwMDBGRUQ3NDkKLToxMDA5RTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1REEKLToxMDA5RjAwMDAwMDAwMDE4ODAwMEZGNTMwMDAwMDAxMDkxQTAzQzAyOEUKLToxMDBBMDAwMDAwMDAwMDEwQjFFNjYyMDcwMDAwMDAwQjJGREYwMDAyQkIKLToxMDBBMTAwMDAwMDAwMDAwMkMzMTAwMDAwMDAwMDAwOTJDQjEwMDdGMTQKLToxMDBBMjAwMDAwMDAwMDA4MkNEOTAwMDAwMDAwMDAwODJEMDAwMDAwODQKLToxMDBBMzAwMDAwMDAwMDA4MkQ4MDAxMEQwMDAwMDAxMEIxQTgwMDA2ODQKLToxMDBBNDAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMjAwMDAwQ0IKLToxMDBBNTAwMDAwMDAwMDAwMkNBNzAwMDAwMDAwMDAwODJEMDAwMDEwN0UKLToxMDBBNjAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAxODgwMDBGRjRDRTUKLToxMDBBNzAwMDAwMDAwMDEwQjFBNjAwMTAwMDAwMDAxMDAwMUYwMDAwRDAKLToxMDBBODAwMDAwMDAwMDBGMEYzMDAwMDcwMDAwMDAwMDBBNjAwMDAwQTcKLToxMDBBOTAwMDAwMDAwMDAwMEFFMTAwMDAwMDAwMDAwRjRCNjIwMDA4QTcKLToxMDBBQTAwMDAwMDAwMDA5MEIxNjAwRkYwMDAwMDAwMDBENjIwMDAwQUUKLToxMDBBQjAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAxMDA3MzAwMDAzQkQKLToxMDBBQzAwMDAwMDAwMDBDMEQxQTAwMDgwMDAwMDAwQzBCMTYwMDA4QjYKLToxMDBBRDAwMDAwMDAwMDBGNENFMzAwMTgwMDAwMDAwMDBDOTkyQzAwRUYKLToxMDBBRTAwMDAwMDAwMDA0Q0M5OTM0MDAwMDAwMDAwODBGODAwMDAwRDIKLToxMDBBRjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwMDMzMzEwMDAwREMKLToxMDBCMDAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAwMDJBREYwMDAwOUMKLToxMDBCMTAwMDAwMDAwMDA4MkEwMDAwMEMwMDAwMDAxMDAwOUYwMDAwRTgKLToxMDBCMjAwMDAwMDAwMDAwMEYyMDAwMDAwMDAwMDAwQzFGODAwMDAxRUEKLToxMDBCMzAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRUFCQkQKLToxMDBCNDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDBBQUFBQ0UKLToxMDBCNTAwMDAwMDAwMDE4ODAwMEZGMjcwMDAwMDAwRjQ3MjIwMDA4NTcKLToxMDBCNjAwMDAwMDAwMDA5MDcwRTAwMEYwMDAwMDAwODA3MEUwMDA4MzMKLToxMDBCNzAwMDAwMDAwMDA4MDI4MDAwMDEwMDAwMDAwNzAyODUxQzAwNDAKLToxMDBCODAwMDAwMDAwMDA4ODI4NTAwMDEwMDAwMDAwMDAyODU0QzAwODIKLToxMDBCOTAwMDAwMDAwMDA3NDI4NTFDMDAwMDAwMDAwM0MzQUE1MjAwQTkKLToxMDBCQTAwMDAwMDAwMDAwMDNCMTBFMDAwMDAwMDAwNzRCMDcxQzAwMEUKLToxMDBCQjAwMDAwMDAwMDBGMEYzMDAwMDcwMDAwMDAwRjBBOTYwMDAzMkUKLToxMDBCQzAwMDAwMDAwMDAwMEE5NTVDMDAwMDAwMDAwMDRBMDA1QTAwODYKLToxMDBCRDAwMDAwMDAwMDAwMEM5NjBBMDAwMDAwMDAwOTBDOTlGRkZGQkQKLToxMDBCRTAwMDAwMDAwMDA4MEQwMEZGRkYwMDAwMDAxMEIxOTYzMjAyNjcKLToxMDBCRjAwMDAwMDAwMDA4MEY4MDAwMDUwMDAwMDAxMEIxQTgwMDA4RTgKLToxMDBDMDAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwQjJGREYwMDAyM0EKLToxMDBDMTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwMDJDQTcwMDAwQjUKLToxMDBDMjAwMDAwMDAwMDA4MkQwMDAwMTAwMDAwMDAwODJEODAwMTA4QzEKLToxMDBDMzAwMDAwMDAwMDE4ODAwMEZGMTMwMDAwMDAwQzI5ODAwMDAxNTQKLToxMDBDNDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzFGODAwMDAxQzkKLToxMDBDNTAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBENEMKLToxMDBDNjAwMDAwMDAwMDA4MDUwMEFBQUEwMDAwMDAxODgwMDBGRTg1MDgKLToxMDBDNzAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1NDcKLToxMDBDODAwMDAwMDAwMDE4ODAwMEZGMDEwMDAwMDAwQzI5ODAwMDAxMTYKLToxMDBDOTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODJBMDAwMDA3NkYKLToxMDBDQTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRTdEN0EKLToxMDBDQjAwMDAwMDAwMDA4MDMwNTAwMDQwMDAwMDAwNjgzMDQwQzAwODcKLToxMDBDQzAwMDAwMDAwMDA4MDI4NTAyMDAwMDAwMDAwMDg2MDUwQzAwRkMKLToxMDBDRDAwMDAwMDAwMDAxODYwQzBFMDAwMDAwMDAwODAyMDQwMDA0NjEKLToxMDBDRTAwMDAwMDAwMDAwMDIwNDE4MDAwMDAwMDAwMDgzODcxODAwQzQKLTowODBDRjAwMDAwMDAwMDE4MDAwMjAwMDBFMgotOjA4MENGODAwMDAwMDAwMTBCMTgwMDAwNEFGCi06MTAwRDAwMDAwMDAwMDAxRjAxMDMwMTAwMDAwMDAwMDgwNTAwMDBGRkIzCi06MTAwRDEwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDAyQTAwMDAwMDhGCi06MTAwRDIwMDAwMDAwMDAxMEIxRDQwMDAwMDAwMDAwMEMyOTgwMDAwMTc4Ci06MTAwRDMwMDAwMDAwMDAwODAyNTQwMDA4MDAwMDAwMTgwMDA0MDAwMDMxCi06MTAwRDQwMDAwMDAwMDAxODgwMDAwMDEwMDAwMDAwMTg4MDAwMDAxMTUyCi06MTAwRDUwMDAwMDAwMDAxODgwMDAwMDNBMDAwMDAwMTg4MDAwMDEwNDI0Ci06MTAwRDYwMDAwMDAwMDAxODgwMDAwMTAzMDAwMDAwMTg4MDAwMDEwMjRDCi06MTAwRDcwMDAwMDAwMDAxODgwMDAwMTAyMDAwMDAwMTg4MDAwMDAwMDQwCi06MTAwRDgwMDAwMDAwMDAxODgwMDAwMTE0MDAwMDAwMTg4MDAwMDBGRTIwCi06MTAwRDkwMDAwMDAwMDAxODgwMDAwMDBDMDAwMDAwMTg4MDAwMDExOEZFCi06MTAwREEwMDAwMDAwMDAxODgwMDAwMTZBMDAwMDAwMTg4MDAwMDA2NzQxCi06MTAwREIwMDAwMDAwMDAxODgwMDAwMERBMDAwMDAwMTg4MDAwMDBFNzQyCi06MTAwREMwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZFQjc3Ci06MTAwREQwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMEMyOTgwMDAwMDM0Ci06MTAwREUwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTg4MDAwRkZFNzAyCi06MTAwREYwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZFNTRECi06MTAwRTAwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDAwNTAyMDAwMEMxCi06MTAwRTEwMDAwMDAwMDAxMDkxOTYzNDIxMDAwMDAwMTAyMDVGMDAwMEI3Ci06MTAwRTIwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDAwNkJFCi06MTAwRTMwMDAwMDAwMDAwODJEMDAwMDA2MDAwMDAwMDgyRDgwMDEwMkJGCi06MTAwRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDIzCi06MTAwRTUwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMTgwMDBBMDAwMDAyCi06MTAwRTYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQxNkZBCi06MTAwRTcwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAwOUQ4MDAwMDAyCi06MTAwRTgwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDBCMkIyCi06MTAwRTkwMDAwMDAwMDAwODJEMDAwMDBBMDAwMDAwMDgyRDgwMDEwMjVCCi06MTAwRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMEMzCi06MTAwRUIwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDAyQzEzMDAwMDg0Ci06MTAwRUMwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMEY5Ci06MTAwRUQwMDAwMDAwMDAxMDkxOTYzNDA5MDAwMDAwMTAyMDVGMDAwMDBGCi06MTAwRUUwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDAwNkZFCi06MTAwRUYwMDAwMDAwMDAwODJEMDAwMDZBMDAwMDAwMDgyRDgwMDEwMjlCCi06MTAwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDYyCi06MTAwRjEwMDAwMDAwMDAwMDBEN0EwMDAwMDAwMDAwMTgwMDBBMDAwMDI4Ci06MTAwRjIwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTAwMDFGMDAwMDEzCi06MTAwRjMwMDAwMDAwMDAwMDJGODBBQTAwMDAwMDAwMDAyQTAwMDAwMDJFCi06MTAwRjQwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwMzYyMDAwMENFCi06MTAwRjUwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDAwMjYzOEMwMDM0Ci06MTAwRjYwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDgwMjA0MDAxMkY1Ci06MTAwRjcwMDAwMDAwMDAxMEI5MDYwODI3MDAwMDAwMDAwRjU4MDAwMDBDCi06MTAwRjgwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMDA0Ci06MTAwRjkwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMENECi06MTAwRkEwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQ0M2MDAxMkNBCi06MTAwRkIwMDAwMDAwMDAxODgwMDBGRkNCMDAwMDAwMDgwRjgwMDAwMzM1Ci06MTAwRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDlGMDAwMDcyCi06MTAwRkQwMDAwMDAwMDAwODI3MTEwMDEyMDAwMDAwMDA2NjkwMDAwMEM5Ci06MTAwRkUwMDAwMDAwMDAwOEEzMUIwMDEyMDAwMDAwMTBCMTk4MDAwM0NECi06MTAwRkYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDgwRjgwMDAwNDI3Ci06MTAxMDAwMDAwMDAwMDAwODIyMDAwMDAzMDAwMDAwMDgyQzgwMDAwQ0YzCi06MTAxMDEwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMTAwMDlGMDAwMEUwCi06MTAxMDIwMDAwMDAwMDAwMDI1OTYwMDAwMDAwMDAwMEMyOTgwMDAwMDUwCi06MTAxMDMwMDAwMDAwMDAwMDA2NjYwMDAwMDAwMDAwMDA4NjYxMTgwMDQ1Ci06MTAxMDQwMDAwMDAwMDAwOTAyNjAwMDBGMDAwMDAwMEYwMjA0MDAwMjBGCi06MTAxMDUwMDAwMDAwMDAxMEI2MEMwODAzMDAwMDAwMEMxRkJGMDAwMEM5Ci06MTAxMDYwMDAwMDAwMDAwQzMzNjYwMDEwMDAwMDAwMDAzMjE0MDAwMDg1Ci06MTAxMDcwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDU3MzY2MkMwMDlGCi06MTAxMDgwMDAwMDAwMDAwMDMxRTMyRTAwMDAwMDAwMDgyRDgwMDAxMDU5Ci06MTAxMDkwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTA5MURFMDAwMDRFCi06MTAxMEEwMDAwMDAwMDAxODgwMDBGRjkwMDAwMDAwMDAyMzAwMDAwMEY2Ci06MTAxMEIwMDAwMDAwMDAwOTI1RTZGRkZGMDAwMDAwMDgyMjAwMDAwQkU5Ci06MTAxMEMwMDAwMDAwMDAwQzY5NTIwMDAwMDAwMDAwMEMyOTgwMDAwMEE0Ci06MTAxMEQwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTg4MDAwRkY4OTZECi06MTAxMEUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTAwMDFGMDAwMDUyCi06MTAxMEYwMDAwMDAwMDAwMDJGODBBQTAwMDAwMDAwMDAyQTAwMDAwMDZECi06MTAxMTAwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDgyQzgwMDA0MDdGCi06MTAxMTEwMDAwMDAwMDAwODJEMDAwMDIwMDAwMDAwMDgyRDgwMDExQ0E4Ci06MTAxMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDQwCi06MTAxMTMwMDAwMDAwMDAwRjQyRUEwMDEwMDAwMDAwMTAwMDRGMDAwNDAxCi06MTAxMTQwMDAwMDAwMDAxMEI3NDY5MjAwMDAwMDAwMDgwMjQ5MDAxMjlCCi06MTAxMTUwMDAwMDAwMDAxMEI1ODQwQTAwMDAwMDAwMDAwRDYxMDAwMENFCi06MTAxMTYwMDAwMDAwMDAxMEJBNjYzNDVBMDAwMDAwMDAwMzYyMDAwMDVDCi06MTAxMTcwMDAwMDAwMDAxMEI4NjMwQzU4MDAwMDAwMDg4MzA1MDAxMjNFCi06MTAxMTgwMDAwMDAwMDAxMDAwNEYwMDAyMDAwMDAwMDAwMzQ5MDAwMEIyCi06MTAxMTkwMDAwMDAwMDAwMTgzMDY4QzAwMDAwMDAwMDA4M0M2MEMwMEU0Ci06MTAxMUEwMDAwMDAwMDAxMEIxODcwMDEwMDAwMDAwMDAwQjZFMDAwMDZFCi06MTAxMUIwMDAwMDAwMDAxODgwMDBGRjZCMDAwMDAwMDEwNjY5MTQwMEE5Ci06MTAxMUMwMDAwMDAwMDAxMDkxOEMwMDAyMDAwMDAwMDhCNEU5MDAwMTRBCi06MTAxMUQwMDAwMDAwMDAxMEIxRTkyQzRDMDAwMDAwMDA4NjY5MkMwMEQyCi06MTAxMUUwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDkwMkVBRkZGRjBBCi06MTAxMUYwMDAwMDAwMDAxMDAwMEMwMDAyMDAwMDAwMDAwMjA0MEEwMEMxCi06MTAxMjAwMDAwMDAwMDAwRjQ2MEMwMDAxMDAwMDAwMEYwMjg1MDAwMUU1Ci06MTAxMjEwMDAwMDAwMDAxMDkxOEMwMUZDMDAwMDAwMTBCNzA0MEU0Mzg4Ci06MTAxMjIwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDAwRjQwMDAwMDAzCi06MTAxMjMwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwQTY0MDAwMEQyCi06MTAxMjQwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRjM3Ci06MTAxMjUwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwQjgwMDAwMEY3Ci06MTAxMjYwMDAwMDAwMDAwODBDODYwMDEyMDAwMDAwMDgwRjgwMDAwMzM4Ci06MTAxMjcwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMTAwMDlGMDAwMDM4Ci06MTAxMjgwMDAwMDAwMDAwODI3MTEwMDEyMDAwMDAwMDA2NjkwMDAwMDE2Ci06MTAxMjkwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDAyMzA2MDAwMEI5Ci06MTAxMkEwMDAwMDAwMDAxMEIxOTgwMDA1MDAwMDAwMTAwMDFGMDAwMEIxCi06MTAxMkIwMDAwMDAwMDAwODBGODAwMDA0MDAwMDAwMDAwMDAwMDAwMDkzCi06MTAxMkMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAzMjE0MDAwMEE5Ci06MTAxMkQwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDAzMUUzMkUwMDA1Ci06MTAxMkUwMDAwMDAwMDAwNTczNjYyQzAwMDAwMDAwMDAyNTk2MDAwMDM5Ci06MTAxMkYwMDAwMDAwMDAxMEIxODcwMDE2MDAwMDAwMEMyOTgwMDAwMERCCi06MTAxMzAwMDAwMDAwMDAwRjBGNkIwMDA3MDAwMDAwMDAwRDY5MDAwMEQ3Ci06MTAxMzEwMDAwMDAwMDAwMDBBNkMwMDAwMDAwMDAwMDAwQUVEMDAwMDYwCi06MTAxMzIwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDAwQjgwMDAwMEI5Ci06MTAxMzMwMDAwMDAwMDAwMDBDODcwMDAwMDAwMDAwMDgwRjgwMDAwMzgwCi06MTAxMzQwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEM2OTUyMDAwMTUyCi06MTAxMzUwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAyMkM1OEMwMEVCCi06MTAxMzYwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMDAwMDA3Ci06MTAxMzcwMDAwMDAwMDAwMDI2OTAwMDAwMDAwMDAwMTBCODE3MEUwM0M3Ci06MTAxMzgwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkZGNjFCCi06MTAxMzkwMDAwMDAwMDAxMEIxOTgwMDAyMDAwMDAwMDgwRjgwMDAwNDU3Ci06MTAxM0EwMDAwMDAwMDAwODIyMDAwMDFBMDAwMDAwMDgyQzgwMDAwQzM5Ci06MTAxM0IwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAxMDI3Ci06MTAxM0MwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAwRDZFMDAwMDczCi06MTAxM0QwMDAwMDAwMDAwM0U3Q0YzNDAwMDAwMDAwMEMyOTgwMDAwMDZCCi06MTAxM0UwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTBCMTg3MDAwNzJGCi06MTAxM0YwMDAwMDAwMDAwMDM2MTQwMDAwMDAwMDAwMDAzNjk1MDAwMEQ4Ci06MTAxNDAwMDAwMDAwMDAwMDM3MTYwMDAwMDAwMDAwMDgyQzgwMDA1MDhCCi06MTAxNDEwMDAwMDAwMDAwODJEMDAwMDMwMDAwMDAwMDgyRDgwMDAwQ0E2Ci06MTAxNDIwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTg4MDAwRkYxRjgzCi06MTAxNDMwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDAyMzAwMDAwMDFECi06MTAxNDQwMDAwMDAwMDAwOTI1RTZGRkZGMDAwMDAwMDAwQjZFMDAwMDExCi06MTAxNDUwMDAwMDAwMDAwM0U3Q0YyQzAwMDAwMDAwMDgyMjAwMDAxQjYyCi06MTAxNDYwMDAwMDAwMDAwQzY5NTIwMDAwMDAwMDAwMEMyOTgwMDAwMDAwCi06MTAxNDcwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTg4MDAwRkYxNTNECi06MTAxNDgwMDAwMDAwMDAwMDJGRDUwMDAwMDAwMDAwMDAyQTAwMDAwMDJFCi06MTAxNDkwMDAwMDAwMDAxMDAwM0YwMDBCMDAwMDAwMDAwNjY2MDAwMDg2Ci06MTAxNEEwMDAwMDAwMDAwMDg2NjExODAwMDAwMDAwMDkwMjYwMDBGMEUyCi06MTAxNEIwMDAwMDAwMDAxMEI3MEMwODA3MDAwMDAwMEM3MzY2MDAxMDU1Ci06MTAxNEMwMDAwMDAwMDAwODJDODAwMDE4MDAwMDAwMDgyRDAwMDAxODAzCi06MTAxNEQwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMEM1RkJGMDAwMDJCCi06MTAxNEUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTg4MDAwRkYwN0RGCi06MTAxNEYwMDAwMDAwMDAwMDJGRDUwMDAwMDAwMDAwMDAyQTAwMDAwMEJFCi06MTAxNTAwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMEMyOTgwMDAwMEJBCi06MTAxNTEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAxQTdFCi06MTAxNTIwMDAwMDAwMDAwODJEMDAwMDFBMDAwMDAwMDAzMzAwMDAwMDM5Ci06MTAxNTMwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMDAzMTgwMDAwMDQzCi06MTAxNTQwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAwQzVDCi06MTAxNTUwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAwNDkxCi06MTAxNTYwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTA5MURFMDAwMDc5Ci06MTAxNTcwMDAwMDAwMDAxODgwMDBGRUY2MDAwMDAwMTg4MDAwRkVGNTU0Ci06MTAxNTgwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDAyCi06MTAxNTkwMDAwMDAwMDAwMDBGMDA4MDAwMDAwMDAwMDgwRjgwMDAwNzFFCi06MTAxNUEwMDAwMDAwMDAxODgwMDAwMDE0MDAwMDAwMDAwNTAyMDAwMDg4Ci06MTAxNUIwMDAwMDAwMDAwODIyMDAwMDA5MDAwMDAwMDAyODZEMDAwMDYzCi06MTAxNUMwMDAwMDAwMDAwMDI5MDAwMDAwMDAwMDAwMEY2NTY4MDAxMDA2Ci06MTAxNUQwMDAwMDAwMDAwM0Y2NkM5NDAwMDAwMDAwMTBCOTcyQTAwNDMzCi06MTAxNUUwMDAwMDAwMDAwQzczRTcwMDE5MDAwMDAwMEMyMTQyMDAwNDA5Ci06MTAxNUYwMDAwMDAwMDAwMDNCRjYwMDAwMDAwMDAwMEMyOTgwMDAwMDA1Ci06MTAxNjAwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMDgyMjAwMDAwODI1Ci06MTAxNjEwMDAwMDAwMDAwQzYxNDIwMDA0MDAwMDAwMTgwMDBBMDAwMEY1Ci06MTAxNjIwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDYxCi06MTAxNjMwMDAwMDAwMDAwRjBGNDcwMDA3MDAwMDAwMDgwRjgwMDAwODlGCi06MTAxNjQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDYyCi06MTAxNjUwMDAwMDAwMDAxODgwMDBGRURBMDAwMDAwMTA5MURFMDAwMDlCCi06MTAxNjYwMDAwMDAwMDAwMDJGRDUwMDAwMDAwMDAwMTAwMDFGMDAwMDQ3Ci06MTAxNjcwMDAwMDAwMDAwMDMzNTEwMDAwMDAwMDAwMDAyQTAwMDAwMEJDCi06MTAxNjgwMDAwMDAwMDAxMEIxQzYwMDIzMDAwMDAwMEYwRjUwMDAwNzNCCi06MTAxNjkwMDAwMDAwMDAwMDBBNjAwMDAwMDAwMDAwMDAwQUUxMDAwMEY1Ci06MTAxNkEwMDAwMDAwMDAwRjRCNjIwMDA4MDAwMDAwMDkwQjE2MDBGRjRECi06MTAxNkIwMDAwMDAwMDAwRjRDNjIwMDEwMDAwMDAwMDAwRDYyMDAwMEVFCi06MTAxNkMwMDAwMDAwMDAwOTBEMUEwMEZGMDAwMDAwMTAwNzUwMDAwMzgxCi06MTAxNkQwMDAwMDAwMDAwQzBEMUEwMDA4MDAwMDAwMEMwQjE2MDAwODlBCi06MTAxNkUwMDAwMDAwMDAwMDBDQzYwMDAwMDAwMDAwMDAwQjgwMDAwMDlECi06MTAxNkYwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMDgwRjgwMDAwM0IyCi06MTAxNzAwMDAwMDAwMDAxMDA2QzIwMDA0MDAwMDAwMEMyOTAwMDAwMkM2Ci06MTAxNzEwMDAwMDAwMDAxMDI2NDIwMDAyMDAwMDAwMEMyOTUyMDAwM0M1Ci06MTAxNzIwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMTAwMDlGMDAwMERGCi06MTAxNzMwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMUEwMDE5Ci06MTAxNzQwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMEMyOTUyMDAwMDFDCi06MTAxNzUwMDAwMDAwMDAxMEIxOTczMjA5MDAwMDAwMEMyOTgwMDAwMDQxCi06MTAxNzYwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMTAyMDUzMDAwMDU4Ci06MTAxNzcwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDAyMkM1OEMwMDZDCi06MTAxNzgwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDgwRjgwMDAwMzkwCi06MTAxNzkwMDAwMDAwMDAxODgwMDBGRkYzMDAwMDAwMTBCMUM4MDAxMzIzCi06MTAxN0EwMDAwMDAwMDAxMEIxQzYwMDAzMDAwMDAwMEMyOTgwMDAwMEZBCi06MTAxN0IwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMDFGCi06MTAxN0MwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMTAwNkMyMDAwMkI1Ci06MTAxN0QwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMDAyMkM1OEMwMDBECi06MTAxN0UwMDAwMDAwMDAwMDI3NjUwMDAwMDAwMDAwMDAyNkU0MDAwMDYzCi06MTAxN0YwMDAwMDAwMDAwODIyMDAwMDE2MDAwMDAwMTBCMUM2MDAwMzFGCi06MTAxODAwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMTBCMTgwMDAwNTI3Ci06MTAxODEwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMEMyOTgwMDAwMEE4Ci06MTAxODIwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTg4MDAwMDAxMjk5Ci06MTAxODMwMDAwMDAwMDAwODIyMDAwMDE2MDAwMDAwMEMyOTgwMDAwMEIzCi06MTAxODQwMDAwMDAwMDAwMDMwMTQwMDAwMDAwMDAwMDAzMDk1MDAwMDhGCi06MTAxODUwMDAwMDAwMDAxMDA3NTAwMDAzMDAwMDAwMDkwQjE2MDBGRkY1Ci06MTAxODYwMDAwMDAwMDAwOTBEMUEwMEZGMDAwMDAwMEYzMTE2MDAwOEVCCi06MTAxODcwMDAwMDAwMDAwMDMxNjIzNDAwMDAwMDAwMDNGMTYyMzAwMDFCCi06MTAxODgwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzUxMDAwMDRDCi06MTAxODkwMDAwMDAwMDAwOTJDRDEwMDdGMDAwMDAwMDgyQ0Q5MDAwMEI2Ci06MTAxOEEwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMDgyRDgwMDAwQzQyCi06MTAxOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMEE5Ci06MTAxOEMwMDAwMDAwMDAxMDA1QzIwMDAzMDAwMDAwMDAzMzAwMDAwMDBCCi06MTAxOEQwMDAwMDAwMDAwODBGODAwMDA3MDAwMDAwMTAyMDUzMDAwMEU3Ci06MTAxOEUwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMTg4MDAwRkU4NzJDCi06MTAxOEYwMDAwMDAwMDAwMDJGRDUwMDAwMDAwMDAwMDAyQTAwMDAwMEJBCi06MTAxOTAwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTBCMUM2MDAyREFFCi06MTAxOTEwMDAwMDAwMDAwRjQ3NDIwMDA4MDAwMDAwMDkwNzBFMDAwRkZBCi06MTAxOTIwMDAwMDAwMDAwODA3MEUwMDA4MDAwMDAwMTAwMDFGMDAwMDYzCi06MTAxOTMwMDAwMDAwMDAwODA5MDAwMDAxMDAwMDAwMDcwOTEyMUMwMDU3Ci06MTAxOTQwMDAwMDAwMDAwM0NCQ0E5MjAwMDAwMDAwMDAwQjk3QTIwMDI5Ci06MTAxOTUwMDAwMDAwMDAwNzQyMTcxQzAwMDAwMDAwMDAwQjA0MDAwMEZDCi06MTAxOTYwMDAwMDAwMDAwRjBBODQwMDAzMDAwMDAwMDAwQTk1OUMwMDlDCi06MTAxOTcwMDAwMDAwMDAwMDRBMDA5QTAwMDAwMDAwMDg4MjEyMDAwMUU2Ci06MTAxOTgwMDAwMDAwMDAwMTBDMTcwODAwMDAwMDAwMDAwQzk3OEMwMEZDCi06MTAxOTkwMDAwMDAwMDAwMDAyMTgwMDAwMDAwMDAwMDgwRDAwRkZGRjFBCi06MTAxOUEwMDAwMDAwMDAwODBGODAwMDA2MDAwMDAwMEMyOTAwMDAwMDY1Ci06MTAxOUIwMDAwMDAwMDAxMDA2QzIwMDA0MDAwMDAwMEMyOTUyMDAwMkMyCi06MTAxOUMwMDAwMDAwMDAxMDI2NDIwMDAyMDAwMDAwMEMyOTUyMDAwMzEzCi06MTAxOUQwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMTAwMDlGMDAwMDJECi06MTAxOUUwMDAwMDAwMDAxMEIxOTczMjBDMDAwMDAwMDAyMzFCMDAwMDIzCi06MTAxOUYwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMEIxCi06MTAxQTAwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwMjE4MDAwMDA3Ci06MTAxQTEwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwM0I5Ci06MTAxQTIwMDAwMDAwMDAwMDIyQzUzNjAwMDAwMDAwMTAwMDFGMDAwMDZBCi06MTAxQTMwMDAwMDAwMDAwODBGODAwMDA2MDAwMDAwMTg4MDAwRkZGNDdFCi06MTAxQTQwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMDgwMDE4Ci06MTAxQTUwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMTBCMUM4MDAwQkZDCi06MTAxQTYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDNFCi06MTAxQTcwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMEMyOTUyMDAwMzU1Ci06MTAxQTgwMDAwMDAwMDAxMDA2QzIwMDAyMDAwMDAwMEMyOTUyMDAwMkYzCi06MTAxQTkwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyNzY1MDAwMDQ3Ci06MTAxQUEwMDAwMDAwMDAwMDI2RTQwMDAwMDAwMDAwMDAyMzQ4MDAwMEMxCi06MTAxQUIwMDAwMDAwMDAwODIyMDAwMDE3MDAwMDAwMEMyOTgwMDAwMDMwCi06MTAxQUMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMTAyMDUzMDAwMDY0Ci06MDgxQUQwMDAwMDAwMDAxODgwMDBGRTRBMkUKLTowMDAwMDAwMUZGCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQotICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotICogYWNjb21wYW55aW5nIGl0LgotICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItcnYycC0wNi01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDYtNS4wLjAuajMuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmM0OTYzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDYtNS4wLjAuajMuZncuaWhleApAQCAtMCwwICsxLDQyNCBAQAorOjEwMDAwMDAwMDAwMDAwMDAwMDAwMEM5MDAwMDAwMDU4MDAwMDAwMDlGMworOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMDAzMDAwMDAwMDBDRTAwMDAwMENFODAwMDAwMDA1MDAwMDAwMDBEQgorOjEwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjA4MDA1MDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MDgwMDU4MDAwMDAwMDAxMEIxODAwMDA2NTkKKzoxMDAwNjAwMDAwMDAwMDFGMDEwMzAzMDAwMDAwMDAwODA1MDBGRkZGNUYKKzoxMDAwNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwODA1MDAwMEZGNUEKKzoxMDAwODAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwOEFDMDAwMDAxQTEKKzoxMDAwOTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwQzJGODAwMDAxOUYKKzoxMDAwQTAwMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDJCODAwMDAwN0EKKzoxMDAwQjAwMDAwMDAwMDEwOTFFMDAwMDIwMDAwMDAwOEFDMDAwMDAxMDgKKzoxMDAwQzAwMDAwMDAwMDEwMjAzRjAwNEQwMDAwMDAxMDIxM0YwMDAzMDEKKzoxMDAwRDAwMDAwMDAwMDEwMjBCRjAwMUMwMDAwMDAxODgwMDBGRkZEODEKKzoxMDAwRTAwMDAwMDAwMDA4QjEwMDAwMDEwMDAwMDAwODJDODAwMEIwRjIKKzoxMDAwRjAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMDAxMEQKKzoxMDAxMDAwMDAwMDAwMDE4ODAwMDAwNkMwMDAwMDAwQjJGREYwMDAyRDAKKzoxMDAxMTAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJDMDcwMDAwRkYKKzoxMDAxMjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1OTkKKzoxMDAxMzAwMDAwMDAwMDE4ODAwMEZGRjAwMDAwMDAwQjJGREYwMDAyMUQKKzoxMDAxNDAwMDAwMDAwMDBDMUY4MDAwMDAwMDAwMDAwMDJDMDcwMDAwRDEKKzoxMDAxNTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1NjkKKzoxMDAxNjAwMDAwMDAwMDE4ODAwMEZGRUEwMDAwMDAwQzFGODAwMDAyNjEKKzoxMDAxNzAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkU3NEEKKzoxMDAxODAwMDAwMDAwMDBDMjk4MDAwMDIwMDAwMDAwQzFGODAwMDAyMEIKKzoxMDAxOTAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDA1MUYKKzoxMDAxQTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkUxMjAKKzoxMDAxQjAwMDAwMDAwMDA4MDIyNDAwMkMwMDAwMDAxODAwMDQwMDAwQzkKKzoxMDAxQzAwMDAwMDAwMDE4ODAwMDAwMUMwMDAwMDAxODgwMDAwMDFFQzUKKzoxMDAxRDAwMDAwMDAwMDE4ODAwMDAwNjUwMDAwMDAxODgwMDAwMEIwREEKKzoxMDAxRTAwMDAwMDAwMDE4ODAwMDAwQUYwMDAwMDAxODgwMDAwMDAwMzAKKzoxMDAxRjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQ0YKKzoxMDAyMDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQkUKKzoxMDAyMTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQUUKKzoxMDAyMjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEY2QTgKKzoxMDAyMzAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwOEUKKzoxMDAyNDAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxODgwMDAwMDFCNEUKKzoxMDAyNTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEM2QTgKKzoxMDAyNjAwMDAwMDAwMDE4ODAwMDAwMkYwMDAwMDAxODgwMDAwMEY2MzkKKzoxMDAyNzAwMDAwMDAwMDE4ODAwMDAxMjEwMDAwMDAxODgwMDAwMEVDNDAKKzoxMDAyODAwMDAwMDAwMDE4ODAwMDAxNDUwMDAwMDAxODgwMDAwMDRFQUEKKzoxMDAyOTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDgzQUIKKzoxMDAyQTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDA1MDAwMDAwOUQKKzoxMDAyQjAwMDAwMDAwMDE4ODAwMEZGQzAwMDAwMDAxMDkxRDQwMDAwNzIKKzoxMDAyQzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQ0MKKzoxMDAyRDAwMDAwMDAwMDA4MkEwMDAwMDIwMDAwMDAwMDA1MDAwMDAwRTUKKzoxMDAyRTAwMDAwMDAwMDE4ODAwMEZGQkEwMDAwMDAxMDkxRDQwMDAwNDgKKzoxMDAyRjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxOUMKKzoxMDAzMDAwMDAwMDAwMDAwMjk0MjAwMDAwMDAwMDAwODJBMDAwMDAyNEUKKzoxMDAzMTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRkIzOEUKKzoxMDAzMjAwMDAwMDAwMDE4ODAwMEZGQjIwMDAwMDAxMEIxQkNCMDBBNEQKKzoxMDAzMzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwQzcKKzoxMDAzNDAwMDAwMDAwMDAwMkMzQzAwMDAwMDAwMDAxMDkxRDQwMDAwRDAKKzoxMDAzNTAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDAwMDE3MzYKKzoxMDAzNjAwMDAwMDAwMDE4ODAwMDAwQkYwMDAwMDAxMDJDNjIwMUJBREQKKzoxMDAzNzAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwODJDODAwMEIxN0EKKzoxMDAzODAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwQkEKKzoxMDAzOTAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDAwMDI0RTQKKzoxMDAzQTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwQzFGODAwMDAwRUQKKzoxMDAzQjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwQjUKKzoxMDAzQzAwMDAwMDAwMDA4MkEwMDAwMDYwMDAwMDAwODA1MDA1NTU1M0UKKzoxMDAzRDAwMDAwMDAwMDE4ODAwMEZGOUMwMDAwMDAxMDkxRDQwMDAwNzUKKzoxMDAzRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQUIKKzoxMDAzRjAwMDAwMDAwMDA4MkEwMDAwMEIwMDAwMDAwMDA1MDAwMDAwQkIKKzoxMDA0MDAwMDAwMDAwMDE4ODAwMEZGOTYwMDAwMDAxODAwMDIwMDAwQTUKKzoxMDA0MTAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMEIxOEEwMDA4MDEKKzoxMDA0MjAwMDAwMDAwMDEwQjE4QzE0MDcwMDAwMDAwQjA1MEFGRkZGNEMKKzoxMDA0MzAwMDAwMDAwMDEwQjE4QTAwMDMwMDAwMDAwMDg2MEExODAwQzYKKzoxMDA0NDAwMDAwMDAwMDEwOTE4QzAwMDAwMDAwMDAwODJBMDAwMDAxNEMKKzoxMDA0NTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAxODAwMEQwMDAwMDIKKzoxMDA0NjAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxREUwMDAwMDYKKzoxMDA0NzAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA2ODIwMDAwRDIKKzoxMDA0ODAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEJFRTEwMDA1MzkKKzoxMDA0OTAwMDAwMDAwMDE4ODAwMEZGN0QwMDAwMDAwMTA1NjExNDAwQ0QKKzoxMDA0QTAwMDAwMDAwMDEwOTE4QTAwMDIwMDAwMDAwOEIwRTEwMDAxODUKKzoxMDA0QjAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDA2ODIwMDAwOEYKKzoxMDA0QzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEJFRTIwMDA1RjgKKzoxMDA0RDAwMDAwMDAwMDE4ODAwMEZGNzUwMDAwMDAwMTA1NjIxNDAwOTQKKzoxMDA0RTAwMDAwMDAwMDEwOTE4QTAwMDIwMDAwMDAwOEIxNjIwMDAxQzMKKzoxMDA0RjAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMEIxQTBCMDEzQjMKKzoxMDA1MDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMjAwMDAwODQKKzoxMDA1MTAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwRjIKKzoxMDA1MjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1OUUKKzoxMDA1MzAwMDAwMDAwMDE4ODAwMEZGREMwMDAwMDAwODJEODAwMTFDNzYKKzoxMDA1NDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAxODgwMDBGRkU2RkYKKzoxMDA1NTAwMDAwMDAwMDBGNDc2MDAwMDgwMDAwMDAwRjA2MEUwMDAxQjkKKzoxMDA1NjAwMDAwMDAwMDAwMEY1ODAwMDAwMDAwMDAwMDBBNjQwMDAwQjYKKzoxMDA1NzAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGMTQKKzoxMDA1ODAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAxODgwMDAwMDEzNTIKKzoxMDA1OTAwMDAwMDAwMDBGNDc2MDAwMDgwMDAwMDAwQjJGREYwMDAyODIKKzoxMDA1QTAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwNjIKKzoxMDA1QjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTFDRjQKKzoxMDA1QzAwMDAwMDAwMDBGMDYwRTAwMDEwMDAwMDAxMDAwMUYwMDAwRDgKKzoxMDA1RDAwMDAwMDAwMDAwMEY1ODAwMDAwMDAwMDAxODgwMDBGRkQ0NDkKKzoxMDA1RTAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwQUUKKzoxMDA1RjAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBENjEwMDAwMTUKKzoxMDA2MDAwMDAwMDAwMDAwMDI2MjAwMDAwMDAwMDAwQjJGREYwMDAyNkIKKzoxMDA2MTAwMDAwMDAwMDAwMzEwNDAwMDAwMDAwMDAwMDMwOUEwMDAwREIKKzoxMDA2MjAwMDAwMDAwMDAwMEM5NjE4MDAwMDAwMDAwOTBDOTlGRkZGNjQKKzoxMDA2MzAwMDAwMDAwMDA0Q0M5OTM0MDAwMDAwMDAxMEIxOTYzMjAyOTIKKzoxMDA2NDAwMDAwMDAwMDA4MEY4MDAwMDAwMDAwMDAwQzI5ODAwMDAxNUQKKzoxMDA2NTAwMDAwMDAwMDBDMjk1MjAwMDEwMDAwMDAwQzI5NTIwMDAwOEIKKzoxMDA2NjAwMDAwMDAwMDA4MDIwMDAwMEUwMDAwMDAwODAyODAwMDFBQ0UKKzoxMDA2NzAwMDAwMDAwMDEwQjFDNDBBMDIwMDAwMDAwODAyMDAwMDAzREMKKzoxMDA2ODAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAwQzFGODAwMDAxOTMKKzoxMDA2OTAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwMDJBMDAwODAwMUYKKzoxMDA2QTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRjQxQkIKKzoxMDA2QjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAxMDkxRDQwMDAwQUEKKzoxMDA2QzAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAwMDJDMjAwMDAwQUIKKzoxMDA2RDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJDODAwMDAwRjEKKzoxMDA2RTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTFDMDMKKzoxMDA2RjAwMDAwMDAwMDE4ODAwMEZGQUUwMDAwMDAwODJDODAwMDA2RkIKKzoxMDA3MDAwMDAwMDAwMDA4MkQwMDAwMDYwMDAwMDAwMDMwODAwMDAwRkUKKzoxMDA3MTAwMDAwMDAwMDAwMzEwMDAwMDAwMDAwMDAwODJEODAwMDA2RUQKKzoxMDA3MjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxNjcKKzoxMDA3MzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwMzEKKzoxMDA3NDAwMDAwMDAwMDA4MkEwMDAwMTAwMDAwMDAwMDA1MDAwMDAwNjIKKzoxMDA3NTAwMDAwMDAwMDE4ODAwMEZGMkMwMDAwMDAxMDkxQTBCMDA5REMKKzoxMDA3NjAwMDAwMDAwMDA4MkM4MDAwQjEwMDAwMDAwODJEMDAwMDA5RTYKKzoxMDA3NzAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3NDcKKzoxMDA3ODAwMDAwMDAwMDE4ODAwMEZGQTcwMDAwMDAxODgwMDAwMDEwODMKKzoxMDA3OTAwMDAwMDAwMDA4QUMwMDAwMDEwMDAwMDAxODgwMDAwMDBCMDEKKzoxMDA3QTAwMDAwMDAwMDAwMDM4MEIwMDAwMDAwMDAwQjJGREYwMDAyRkIKKzoxMDA3QjAwMDAwMDAwMDAwMkMwMDQwMDAwMDAwMDAxMDkxRDQwMDAwNTgKKzoxMDA3QzAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjg5NTEKKzoxMDA3RDAwMDAwMDAwMDE4ODAwMDAwMzEwMDAwMDAxODgwMDAwMDA2QjIKKzoxMDA3RTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDAwRTAwQjQKKzoxMDA3RjAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1MDkKKzoxMDA4MDAwMDAwMDAwMDE4ODAwMEZGMTYwMDAwMDAwMDA2ODIwMDAwQjMKKzoxMDA4MTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxNzYKKzoxMDA4MjAwMDAwMDAwMDEwMENFNzAwMDcwMDAwMDAwOTA1NjJGRkZGNTAKKzoxMDA4MzAwMDAwMDAwMDEwQkE2QzE0MDUwMDAwMDAwMDJBREYwMDAwNjAKKzoxMDA4NDAwMDAwMDAwMDAwMjEwMDAwMDAwMDAwMDAwODJBMDAwMDA1NTAKKzoxMDA4NTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJDODAwMEIwQkYKKzoxMDA4NjAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwQzMxNjIwMDE4OTQKKzoxMDA4NzAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAxODgwMDBGRjdEQUUKKzoxMDA4ODAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMEIxQTBCMDBFMjQKKzoxMDA4OTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwNjIKKzoxMDA4QTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAxMDkxRDQwMDAwODcKKzoxMDA4QjAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxMDJDNjIwMDAyRUIKKzoxMDA4QzAwMDAwMDAwMDE4ODAwMDAwMEMwMDAwMDAwQjJGREYwMDAyNjkKKzoxMDA4RDAwMDAwMDAwMDAwMkMwNzAwMDAwMDAwMDAwQzFGODAwMDAxMzkKKzoxMDA4RTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDBGRkZGN0UKKzoxMDA4RjAwMDAwMDAwMDE4ODAwMEZFRjgwMDAwMDAwODJDODAwMEIxMDUKKzoxMDA5MDAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwMzQKKzoxMDA5MTAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDBGRjc0MEYKKzoxMDA5MjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxNjUKKzoxMDA5MzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwMkYKKzoxMDA5NDAwMDAwMDAwMDA4MkEwMDAwMEEwMDAwMDAwMDA1MDAwMDAwNjYKKzoxMDA5NTAwMDAwMDAwMDE4ODAwMEZFRUMwMDAwMDAwMDA2ODIwMDAwOEQKKzoxMDA5NjAwMDAwMDAwMDA4MkM4MDAwQjAwMDAwMDAwODJEMDAwMDA4RTYKKzoxMDA5NzAwMDAwMDAwMDA4MkQ4MDAxNTAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDA5ODAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDAwMzQKKzoxMDA5OTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTA1NjcKKzoxMDA5QTAwMDAwMDAwMDEwQkVFMjAwMDUwMDAwMDAxODgwMDBGRURBMjIKKzoxMDA5QjAwMDAwMDAwMDAxMDU2MjE0MDAwMDAwMDAxMDkxOEEwMDAyOEUKKzoxMDA5QzAwMDAwMDAwMDA4QjE2MjAwMDEwMDAwMDAxMDkxREUwMDAwOEMKKzoxMDA5RDAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMDkxRDQwMDAwN0QKKzoxMDA5RTAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjQ1QzkKKzoxMDA5RjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxOTUKKzoxMDBBMDAwMDAwMDAwMDA4MkEwMDAwMDkwMDAwMDAwODA1MDBBQUFBNEEKKzoxMDBBMTAwMDAwMDAwMDE4ODAwMEZFRDQwMDAwMDAxMDkxRDQwMDAwRjcKKzoxMDBBMjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjNEM0EKKzoxMDBBMzAwMDAwMDAwMDEwOTFBMDNDMDIwMDAwMDAxMEIxRTY2MjA3MjcKKzoxMDBBNDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMzEwMDAwMkUKKzoxMDBBNTAwMDAwMDAwMDA5MkNCMTAwN0YwMDAwMDAwODJDRDkwMDAwMjQKKzoxMDBBNjAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTBEOEUKKzoxMDBBNzAwMDAwMDAwMDEwQjFBODAwMDYwMDAwMDAxMDIwNUYwMDAwNzgKKzoxMDBBODAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwMDJDQTcwMDAwNDcKKzoxMDBBOTAwMDAwMDAwMDA4MkQwMDAwMTAwMDAwMDAwODJEODAwMTA4NTMKKzoxMDBBQTAwMDAwMDAwMDE4ODAwMEZGMzgwMDAwMDAxMEIxQTYwMDEwMDAKKzoxMDBBQjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGMzAwMDA3QjIKKzoxMDBBQzAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwRDEKKzoxMDBBRDAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGMjkKKzoxMDBBRTAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwOTBEMUEwMEZGNjgKKzoxMDBBRjAwMDAwMDAwMDEwMDczMDAwMDMwMDAwMDAwQzBEMUEwMDA4NzEKKzoxMDBCMDAwMDAwMDAwMDBDMEIxNjAwMDgwMDAwMDAwRjRDRTMwMDE4NUEKKzoxMDBCMTAwMDAwMDAwMDAwMEM5OTJDMDAwMDAwMDAwNENDOTkzNDAwNjcKKzoxMDBCMjAwMDAwMDAwMDA4MEY4MDAwMDAwMDAwMDAwQzI5ODAwMDAxNzgKKzoxMDBCMzAwMDAwMDAwMDAwMzMzMTAwMDAwMDAwMDAwODIyMDAwMDE2MTEKKzoxMDBCNDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBDNUUKKzoxMDBCNTAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwMDBGMjAwMDAwQjcKKzoxMDBCNjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODA1MDA1NTU1MjIKKzoxMDBCNzAwMDAwMDAwMDE4ODAwMEZFQTgwMDAwMDAxMDkxRDQwMDAwQzIKKzoxMDBCODAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjExNUIKKzoxMDBCOTAwMDAwMDAwMDBGNDcyMjAwMDgwMDAwMDAwOTA3MEUwMDBGQTgKKzoxMDBCQTAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAwODAyODAwMDAxOTUKKzoxMDBCQjAwMDAwMDAwMDA3MDI4NTFDMDAwMDAwMDAwODgyODUwMDAxN0IKKzoxMDBCQzAwMDAwMDAwMDAwMDI4NTRDMDAwMDAwMDAwNzQyODUxQzAwNjgKKzoxMDBCRDAwMDAwMDAwMDAzQzNBQTUyMDAwMDAwMDAwMDAzQjEwRTAwOTEKKzoxMDBCRTAwMDAwMDAwMDA3NEIwNzFDMDAwMDAwMDAwRjBGMzAwMDA3M0IKKzoxMDBCRjAwMDAwMDAwMDBGMEE5NjAwMDMwMDAwMDAwMDBBOTU1QzAwNDgKKzoxMDBDMDAwMDAwMDAwMDAwNEEwMDVBMDAwMDAwMDAwMDBDOTYwQTAwOTQKKzoxMDBDMTAwMDAwMDAwMDA5MEM5OUZGRkYwMDAwMDAwODBEMDBGRkZGMTUKKzoxMDBDMjAwMDAwMDAwMDEwQjE5NjMyMDIwMDAwMDAwODBGODAwMDA1OUQKKzoxMDBDMzAwMDAwMDAwMDEwQjFBODAwMDgwMDAwMDAxMDIwNUYwMDAwQjQKKzoxMDBDNDAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMjAwMDAwM0QKKzoxMDBDNTAwMDAwMDAwMDAwMkNBNzAwMDAwMDAwMDAwODJEMDAwMDEwN0MKKzoxMDBDNjAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAxODgwMDBGRUZGMzEKKzoxMDBDNzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAxMDAwMUYwMDAwOEYKKzoxMDBDODAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwQUYKKzoxMDBDOTAwMDAwMDAwMDA4MkEwMDAwMEQwMDAwMDAwODA1MDBBQUFBQjQKKzoxMDBDQTAwMDAwMDAwMDE4ODAwMEZFODIwMDAwMDAxMDkxRDQwMDAwQjcKKzoxMDBDQjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRUVCRkIKKzoxMDBDQzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQzIKKzoxMDBDRDAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1MjQKKzowODBDRTAwMDAwMDAwMDE4ODAwMEZFN0FGQworOjA4MENFODAwMDAwMDAwMTBCMTgwMDAwNEJGCis6MTAwQ0YwMDAwMDAwMDAxRjAxMDMwMzAwMDAwMDAwMDgwNTAwMDBGRkMyCis6MTAwRDAwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDAyQTAwMDAwMDlGCis6MTAwRDEwMDAwMDAwMDAxMEIxRDQwMDAwMDAwMDAwMTA5MURFMDAwMEJGCis6MTAwRDIwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTAwMDFGMDAwMDExCis6MTAwRDMwMDAwMDAwMDAwMDJGODBBQTAwMDAwMDAwMEMyOTgwMDAwMUE0Cis6MTAwRDQwMDAwMDAwMDAwODAyNTQwMDBEMDAwMDAwMDAyQzQwMDAwMENDCis6MTAwRDUwMDAwMDAwMDAxODAwMDQwMDAwMDAwMDAwMTg4MDAwMDAxMENGCis6MTAwRDYwMDAwMDAwMDAxODgwMDAwMDExMDAwMDAwMTg4MDAwMDAzOTA5Cis6MTAwRDcwMDAwMDAwMDAxODgwMDAwMERGMDAwMDAwMTg4MDAwMDBERTg2Cis6MTAwRDgwMDAwMDAwMDAxODgwMDAwMEREMDAwMDAwMTg4MDAwMDBERDc5Cis6MTAwRDkwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDBGNTJFCis6MTAwREEwMDAwMDAwMDAxODgwMDAwMEQ5MDAwMDAwMTg4MDAwMDAwQjJGCis6MTAwREIwMDAwMDAwMDAxODgwMDAwMEY5MDAwMDAwMTg4MDAwMDE0N0MyCis6MTAwREMwMDAwMDAwMDAxODgwMDAwMDU5MDAwMDAwMTg4MDAwMDBDNEQ2Cis6MTAwREQwMDAwMDAwMDAxODgwMDAwMEM1MDAwMDAwMDAyQTAwMDAwMDhDCis6MTAwREUwMDAwMDAwMDAxODgwMDBGRkU2MDAwMDAwMDAyQTAwMDAwMDVDCis6MTAwREYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkZFM0M0Cis6MTAwRTAwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZFMTQwCis6MTAwRTEwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDAwNTAyMDAwMEIxCis6MTAwRTIwMDAwMDAwMDAxMDkxOTYzNDIxMDAwMDAwMTAyMDVGMDAwMEE3Cis6MTAwRTMwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDAwNkFFCis6MTAwRTQwMDAwMDAwMDAwODJEMDAwMDA2MDAwMDAwMDgyRDgwMDEwMkFGCis6MTAwRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDEzCis6MTAwRTYwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMTgwMDBBMDAwMEYyCis6MTAwRTcwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQxNkVBCis6MTAwRTgwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAwOUQ4MDAwMEYyCis6MTAwRTkwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDBCMkEyCis6MTAwRUEwMDAwMDAwMDAwODJEMDAwMDBBMDAwMDAwMDgyRDgwMDEwMjRCCis6MTAwRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMEIzCis6MTAwRUMwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDAyQzEzMDAwMDc0Cis6MTAwRUQwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMEU5Cis6MTAwRUUwMDAwMDAwMDAxMDkxOTYzNDA5MDAwMDAwMTAyMDVGMDAwMEZGCis6MTAwRUYwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDAwNkVFCis6MTAwRjAwMDAwMDAwMDAwODJEMDAwMDZBMDAwMDAwMDgyRDgwMDEwMjhBCis6MTAwRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDUyCis6MTAwRjIwMDAwMDAwMDAwMDBEN0EwMDAwMDAwMDAwMTgwMDBBMDAwMDE4Cis6MTAwRjMwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMDAwRDYxMDAwMDE5Cis6MTAwRjQwMDAwMDAwMDAwMDAzNjIwMDAwMDAwMDAwMTAyMzQyMDBBMzI0Cis6MTAwRjUwMDAwMDAwMDAwMDAyNjM4QzAwMDAwMDAwMDAyNjQ2MDAwMDM0Cis6MTAwRjYwMDAwMDAwMDAwODAyMDQwMDEyMDAwMDAwMTBCOTA2MDgxRTZDCis6MTAwRjcwMDAwMDAwMDAwMDBGNTgwMDAwMDAwMDAwMDAwQTY0MDAwMDlDCis6MTAwRjgwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRkZBCis6MTAwRjkwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwQjgwMDAwMEJBCis6MTAwRkEwMDAwMDAwMDAwODBDQzYwMDEyMDAwMDAwMTg4MDAwRkZDRUYwCis6MTAwRkIwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAwRkMwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMDgyNzExMDAxMjIwCis6MTAwRkQwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMDhBMzFCMDAxMjQzCis6MTAwRkUwMDAwMDAwMDAxMEIxOTgwMDAzMDAwMDAwMTAwMDFGMDAwMDc2Cis6MTAwRkYwMDAwMDAwMDAwODBGODAwMDA0MDAwMDAwMDgyMjAwMDAwMzI5Cis6MTAxMDAwMDAwMDAwMDAwODJDODAwMDBDMDAwMDAwMDgyRDAwMDAwQ0RGCis6MTAxMDEwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMDAyNTk2MDAwMDY2Cis6MTAxMDIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAzMjE0MDAwMEM1Cis6MTAxMDMwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDU3MzY2MkMwMERGCis6MTAxMDQwMDAwMDAwMDAwMDMxRTMyRTAwMDAwMDAwMDgyRDgwMDAxMDk5Cis6MTAxMDUwMDAwMDAwMDAxODgwMDBGRjk4MDAwMDAwMDAyMzAwMDAwMDNFCis6MTAxMDYwMDAwMDAwMDAwOTI1RTZGRkZGMDAwMDAwMDgyMjAwMDAwQjM5Cis6MTAxMDcwMDAwMDAwMDAwQzY5NTIwMDAwMDAwMDAwMEMyOTgwMDAwMEY0Cis6MTAxMDgwMDAwMDAwMDAxODgwMDBGRjkyMDAwMDAwMDAyQTAwMDAwMDBECis6MTAxMDkwMDAwMDAwMDAwODJDODAwMDQwMDAwMDAwMDgyRDAwMDAyMDA3Cis6MTAxMEEwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAxMEIwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMEY0MkVBMDAxMDY2Cis6MTAxMEMwMDAwMDAwMDAxMDAwNEYwMDA0MDAwMDAwMTBCNzQ2OTIwMDFFCis6MTAxMEQwMDAwMDAwMDAwODAyNDkwMDEyMDAwMDAwMTBCNTg0MEEwMDU4Cis6MTAxMEUwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMTBCQTY2MzQ1N0Q3Cis6MTAxMEYwMDAwMDAwMDAwODgzMDUwMDEyMDAwMDAwMTAwMDRGMDAwMkVECis6MTAxMTAwMDAwMDAwMDAwMDAzNDkwMDAwMDAwMDAwMDE4MzA2OEMwMDdECis6MTAxMTEwMDAwMDAwMDAwMDgzQzYwQzAwMDAwMDAwMTBCMTg3MDAxMTIxCis6MTAxMTIwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMTBCRUU5MDAwNThBCis6MTAxMTMwMDAwMDAwMDAxODgwMDBGRjc5MDAwMDAwMDEwNTY5MTQwMDFDCis6MTAxMTQwMDAwMDAwMDAxMDkxOEEwMDAyMDAwMDAwMDhCNEU5MDAwMUNDCis6MTAxMTUwMDAwMDAwMDAxMEIxRTkyQzRBMDAwMDAwMDA4NjY5MkMwMDU0Cis6MTAxMTYwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDkwMkVBRkZGRjhBCis6MTAxMTcwMDAwMDAwMDAxMDAwMEMwMDAyMDAwMDAwMDAwMjA0MEEwMDQxCis6MTAxMTgwMDAwMDAwMDAwRjQ2MEMwMDAxMDAwMDAwMEYwMjg1MDAwMTY2Cis6MTAxMTkwMDAwMDAwMDAxMDkxOEMwMUZDMDAwMDAwMTBCNzA0MEU0MTBCCis6MTAxMUEwMDAwMDAwMDAwMDBGNDAwMDAwMDAwMDAwMDAwRDYxMDAwMDgyCis6MTAxMUIwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMEQyCis6MTAxMUMwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMDlCCis6MTAxMUQwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQzg2MDAxMkQ4Cis6MTAxMUUwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMEMyOTUyMDAwMERFCis6MTAxMUYwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMDgyNzExMDAxMkVFCis6MTAxMjAwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMDAyNjQ2MDAwMDdDCis6MTAxMjEwMDAwMDAwMDAwMDIzMDYwMDAwMDAwMDAwMTBCMTk4MDAwNTQ3Cis6MTAxMjIwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDgwRjgwMDAwNEY0Cis6MTAxMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDdGCis6MTAxMjQwMDAwMDAwMDAwMDMyMTQwMDAwMDAwMDAwMDAzMjk1MDAwMDkxCis6MTAxMjUwMDAwMDAwMDAwMDMxRTMyRTAwMDAwMDAwMDU3MzY2MkMwMDQyCis6MTAxMjYwMDAwMDAwMDAwMDI1OTYwMDAwMDAwMDAwMTBCMTg3MDAxNjY1Cis6MTAxMjcwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEYwRjZCMDAwNzI5Cis6MTAxMjgwMDAwMDAwMDAwMDBENjkwMDAwMDAwMDAwMDAwQTZDMDAwMDcyCis6MTAxMjkwMDAwMDAwMDAwMDBBRUQwMDAwMDAwMDAwMDAwQjZFMDAwMERFCis6MTAxMkEwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDAwQzg3MDAwMDIwCis6MTAxMkIwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTAyMDUzMDAwMDExCis6MTAxMkMwMDAwMDAwMDAwQzY5NTIwMDAxMDAwMDAwMTAwMDFGMDAwMDI3Cis6MTAxMkQwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyMzFCMDAwMDVECis6MTAxMkUwMDAwMDAwMDAwMDI3MTEwMDAwMDAwMDAwMDAyNjkwMDAwMDEwCis6MTAxMkYwMDAwMDAwMDAxMEI4MTcwRTAzMDAwMDAwMEMyOTgwMDAwMDQ5Cis6MTAxMzAwMDAwMDAwMDAxODgwMDBGRkY2MDAwMDAwMTBCMTk4MDAwMkY1Cis6MTAxMzEwMDAwMDAwMDAwODBGODAwMDA0MDAwMDAwMDgyMjAwMDAxQUVFCis6MTAxMzIwMDAwMDAwMDAwODJDODAwMDBDMDAwMDAwMDgyRDAwMDAwQ0JDCis6MTAxMzMwMDAwMDAwMDAwODJEODAwMDEwMDAwMDAwMTAwMDFGMDAwMEI5Cis6MTAxMzQwMDAwMDAwMDAwMDBENkUwMDAwMDAwMDAwMDNFN0NGMzQwMDM1Cis6MTAxMzUwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTA5MURFMDAwMDU5Cis6MTAxMzYwMDAwMDAwMDAxMEIxODcwMDA3MDAwMDAwMDAzNjE0MDAwMEU0Cis6MTAxMzcwMDAwMDAwMDAwMDM2OTUwMDAwMDAwMDAwMDAzNzE2MDAwMDU1Cis6MTAxMzgwMDAwMDAwMDAwODJDODAwMDUwMDAwMDAwMDgyRDAwMDAzMEY0Cis6MTAxMzkwMDAwMDAwMDAwODJEODAwMDBDMDAwMDAwMTg4MDAwRkYyRkM2Cis6MTAxM0EwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDAyMzAwMDAwMEFFCis6MTAxM0IwMDAwMDAwMDAwOTI1RTZGRkZGMDAwMDAwMDAwQjZFMDAwMEEyCis6MTAxM0MwMDAwMDAwMDAwM0U3Q0YyQzAwMDAwMDAwMDgyMjAwMDAxQkYzCis6MTAxM0QwMDAwMDAwMDAwQzY5NTIwMDAwMDAwMDAwMEMyOTgwMDAwMDkxCis6MTAxM0UwMDAwMDAwMDAxODgwMDBGRjI2MDAwMDAwMDAyQTAwMDAwMDE2Cis6MTAxM0YwMDAwMDAwMDAxODgwMDBGRjI0MDAwMDAwMDAyQTAwMDAwMDA4Cis6MTAxNDAwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTA5MURFMDAwMEE4Cis6MTAxNDEwMDAwMDAwMDAwODJDODAwMDFBMDAwMDAwMDgyRDAwMDAxQUFGCis6MTAxNDIwMDAwMDAwMDAwNTczNjYwMDAwMDAwMDAwMDgyRDgwMDAwMjI3Cis6MTAxNDMwMDAwMDAwMDAwMDMxODAwMDAwMDAwMDAwMTA5MURFMDAwMDdDCis6MTAxNDQwMDAwMDAwMDAwODJDODAwMDBDMDAwMDAwMDgyRDAwMDAwQzlCCis6MTAxNDUwMDAwMDAwMDAwODJEODAwMDA0MDAwMDAwMTg4MDAwRkYxNzI1Cis6MTAxNDYwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMTg4MDAwRkYxNUI2Cis6MTAxNDcwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDEzCis6MTAxNDgwMDAwMDAwMDAwMDBGMDA4MDAwMDAwMDAwMDgwRjgwMDAwNzJGCis6MTAxNDkwMDAwMDAwMDAxODgwMDAwMDFBMDAwMDAwMDAyODBBMDAwMDY4Cis6MTAxNEEwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMDgyMjAwMDAwOTAyCis6MTAxNEIwMDAwMDAwMDAwMDI5MDAwMDAwMDAwMDAwMEY2NTY4MDAxMDE3Cis6MTAxNEMwMDAwMDAwMDAwM0Y2NkM5NDAwMDAwMDAwMTBCOTcyQTAwNDQ0Cis6MTAxNEQwMDAwMDAwMDAwQzczRTcwMDE5MDAwMDAwMEMyMTQyMDAwNDFBCis6MTAxNEUwMDAwMDAwMDAwMDNDRjgwMDAwMDAwMDAwMEMyOTgwMDAwMDEzCis6MTAxNEYwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMDgyMjAwMDAwODM3Cis6MTAxNTAwMDAwMDAwMDAwQzYxNDIwMDA0MDAwMDAwMTgwMDBBMDAwMDA2Cis6MTAxNTEwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMEM2MTQyMDAwMDE1Cis6MTAxNTIwMDAwMDAwMDAxMDAxNDIwMDAzMDAwMDAwMEMzM0U3MDAxRDIyCis6MTAxNTMwMDAwMDAwMDAwQzYxNDIwMDAyMDAwMDAwMTgwMDBBMDAwMEQ4Cis6MTAxNTQwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDQyCis6MTAxNTUwMDAwMDAwMDAwRjBGNDcwMDA3MDAwMDAwMDgwRjgwMDAwODgwCis6MTAxNTYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAwMDlGMDAwMDE3Cis6MTAxNTcwMDAwMDAwMDAxODgwMDBGRUY0MDAwMDAwMDAzMzUxMDAwMDVECis6MTAxNTgwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTBCMUM2MDAyMzg3Cis6MTAxNTkwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMDAwQTYwMDAwMDZDCis6MTAxNUEwMDAwMDAwMDAwMDBBRTEwMDAwMDAwMDAwMEY0QjYyMDAwODhDCis6MTAxNUIwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMEY0QzYyMDAxMDM1Cis6MTAxNUMwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDkwRDFBMDBGRjdECis6MTAxNUQwMDAwMDAwMDAxMDA3NTAwMDAzMDAwMDAwMEMwRDFBMDAwODY2Cis6MTAxNUUwMDAwMDAwMDAwQzBCMTYwMDA4MDAwMDAwMDAwQ0M2MDAwMEY0Cis6MTAxNUYwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDAwNjk4MDAwMEMyCis6MTAxNjAwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTAwNkMyMDAwNDY0Cis6MTAxNjEwMDAwMDAwMDAwQzI5MDAwMDAyMDAwMDAwMTAyNjQyMDAwMjE5Cis6MTAxNjIwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMTA1Cis6MTAxNjMwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMDAyMzFCMDAwMEJECis6MTAxNjQwMDAwMDAwMDAwMDI3MTExQTAwMDAwMDAwMDA2NjkwMDAwMDUyCis6MTAxNjUwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMTBCMTk3MzIwOTcwCis6MTAxNjYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwNjk4MDAwMDI3Cis6MTAxNjcwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMzVECis6MTAxNjgwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMTAwMDFGMDAwMEI4Cis6MTAxNjkwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTg4MDAwRkZGMzI2Cis6MTAxNkEwMDAwMDAwMDAxMEIxQzgwMDEzMDAwMDAwMTBCMUM2MDAwMzE0Cis6MTAxNkIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMEYyCis6MTAxNkMwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMEMyOTUyMDAwMzA5Cis6MTAxNkQwMDAwMDAwMDAxMDA2QzIwMDAyMDAwMDAwMEMyOTUyMDAwMkE3Cis6MTAxNkUwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyNzY1MDAwMEZCCis6MTAxNkYwMDAwMDAwMDAwMDI2RTQwMDAwMDAwMDAwMDgyMjAwMDAxNkEwCis6MTAxNzAwMDAwMDAwMDAxMEIxQzYwMDAzMDAwMDAwMDAyMzQ4MDAwMEU0Cis6MTAxNzEwMDAwMDAwMDAxMEIxODAwMDA1MDAwMDAwMDAyMzQ4MDAwMDE4Cis6MTAxNzIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEYwRjUwMDAwNzhGCis6MTAxNzMwMDAwMDAwMDAxODgwMDAwMDEyMDAwMDAwMDgyMjAwMDAxNkJGCis6MTAxNzQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAzMDE0MDAwMEEwCis6MTAxNzUwMDAwMDAwMDAwMDMwOTUwMDAwMDAwMDAwMTAwNzUwMDAwMzVBCis6MTAxNzYwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMDkwRDFBMDBGRjIxCis6MTAxNzcwMDAwMDAwMDAwRjMxMTYwMDA4MDAwMDAwMDAzMTYyMzQwMDQ0Cis6MTAxNzgwMDAwMDAwMDAwM0YxNjIzMDAwMDAwMDAwMTAyMDVGMDAwMDQ0Cis6MTAxNzkwMDAwMDAwMDAwMDJDNTEwMDAwMDAwMDAwMDkyQ0QxMDA3RjQ3Cis6MTAxN0EwMDAwMDAwMDAwODJDRDkwMDAwMDAwMDAwMDgyRDAwMDAwMEY3Cis6MTAxN0IwMDAwMDAwMDAwODJEODAwMDBDMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTAxN0MwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTAwNUMyMDAwNEJGCis6MTAxN0QwMDAwMDAwMDAwODBGODAwMDA3MDAwMDAwMDAzMzAwMDAwMDM4Cis6MTAxN0UwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMTg4MDAwRkVBNTBGCis6MTAxN0YwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMEYwRjUwMDAwNzRBCis6MTAxODAwMDAwMDAwMDAxMEIxQzYwMDJEMDAwMDAwMEY0NzQyMDAwODg0Cis6MTAxODEwMDAwMDAwMDAwOTA3MEUwMDBGMDAwMDAwMDgwNzBFMDAwODc2Cis6MTAxODIwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDgwOTAwMDAwMTc3Cis6MTAxODMwMDAwMDAwMDAwNzA5MTIxQzAwMDAwMDAwMDNDQkNBOTIwMDQwCis6MTAxODQwMDAwMDAwMDAwMDBCOTdBMjAwMDAwMDAwMDc0MjE3MUMwMEQ4Cis6MTAxODUwMDAwMDAwMDAwMDBCMDQwMDAwMDAwMDAwMEYwQTg0MDAwM0Q5Cis6MTAxODYwMDAwMDAwMDAwMDBBOTU5QzAwMDAwMDAwMDA0QTAwOUEwMDU5Cis6MTAxODcwMDAwMDAwMDAwODgyMTIwMDAxMDAwMDAwMDEwQzE3MDgwMDlGCis6MTAxODgwMDAwMDAwMDAwMDBDOTc4QzAwMDAwMDAwMDAwMjE4MDAwMDBGCis6MTAxODkwMDAwMDAwMDAwODBEMDBGRkZGMDAwMDAwMDgwRjgwMDAwNjk4Cis6MTAxOEEwMDAwMDAwMDAwQzI5MDAwMDAwMDAwMDAwMTAwNkMyMDAwNDI3Cis6MTAxOEIwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMTAyNjQyMDAwMjI1Cis6MTAxOEMwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMTYzCis6MTAxOEQwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMTBCMTk3MzIwQ0MzCis6MTAxOEUwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMDgwMDdBCis6MTAxOEYwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMEMyOTgwMDAwMDNECis6MTAxOTAwMDAwMDAwMDAwMDAyMTgwMDAwMDAwMDAwMTAyMDUzMDAwMDNBCis6MTAxOTEwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDAyMkM1MzYwMDIwCis6MTAxOTIwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDgwRjgwMDAwNkVCCis6MTAxOTMwMDAwMDAwMDAxODgwMDBGRkY0MDAwMDAwMDAyMzFCMDAwMERFCis6MTAxOTQwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMDYxCis6MTAxOTUwMDAwMDAwMDAxMEIxQzgwMDBCMDAwMDAwMEMyOTgwMDAwMDNFCis6MTAxOTYwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMDZECis6MTAxOTcwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMTAwNkMyMDAwMjAzCis6MTAxOTgwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMDAyMkM1OEMwMDVCCis6MTAxOTkwMDAwMDAwMDAwMDI3NjUwMDAwMDAwMDAwMDAyNkU0MDAwMEIxCis6MTAxOUEwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMDgyMjAwMDAxNzhCCis6MTAxOUIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAwMDFGMDAwMDQzCis6MDgxOUMwMDAwMDAwMDAxODgwMDBGRTZBMUYKKzowMDAwMDAwMUZGCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOS00LjYuMTUuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTQuNi4xNS5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzk5NWJiLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTQuNi4xNS5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsNDkwICswLDAgQEAKLToxMDAwMDAwMDAwMDAwMDAwMDAwMDBEODgwMDAwMDA1ODAwMDAwMDAwMDMKLToxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMDAwMzAwMDAwMDAxMDE4MDAwMDBERTAwMDAwMDAwNTAwMDAwMDAwQTYKLToxMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLTowODAwNTAwMDAwMDAwMDAwMDAwMDAwMDBBOAotOjA4MDA1ODAwMDAwMDAwMTBCMTgwMDAwMjVECi06MTAwMDYwMDAwMDAwMDAxRjAzMDMwMTAwMDAwMDAwMDhBQzAwMDAwMUI1Ci06MTAwMDcwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMEMyRjgwMDAwMUJGCi06MTAwMDgwMDAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAyQjgwMDAwMDlBCi06MTAwMDkwMDAwMDAwMDAxMDIwM0YwMDZDMDAwMDAwMTAyMTNGMDAwMzEyCi06MTAwMEEwMDAwMDAwMDAxMDIwQkYwMDNCMDAwMDAwMTg4MDAwRkZGRDkyCi06MTAwMEIwMDAwMDAwMDAxMEIxQjhCMDE1MDAwMDAwMEIyRkRGMDAwMkU3Ci06MTAwMEMwMDAwMDAwMDAwMDAzRDgwMDAwMDAwMDAwMDAyQzM4MDAwMEYxCi06MTAwMEQwMDAwMDAwMDAwODJDODAwMDAwMDAwMDAwMDgyRDAwMDAwMDM3Ci06MTAwMEUwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgwNjAwNTU1NUUzCi06MTAwMEYwMDAwMDAwMDAxODgwMDAwMDhGMDAwMDAwMDgyRDgwMDExQzA3Ci06MTAwMTAwMDAwMDAwMDAwODAyMDAwMDAxMDAwMDAwMTA5MURFMDAwMDY1Ci06MTAwMTEwMDAwMDAwMDAwRjQyRTAwMDFDMDAwMDAwMTA5MTg0MEExNzRDCi06MTAwMTIwMDAwMDAwMDAxMDA4NjYwMDE2MDAwMDAwMEMyOTgwMDAwMjg0Ci06MTAwMTMwMDAwMDAwMDAwQzFGODAwMDAyMDAwMDAwMDAyQURGMDAwMDA5Ci06MTAwMTQwMDAwMDAwMDAwODJBMDAwMDBGMDAwMDAwMDgwNTAwNTU1NUI3Ci06MTAwMTUwMDAwMDAwMDAxODgwMDBGRkU4MDAwMDAwMDgwMjAwMDAwMTE1Ci06MTAwMTYwMDAwMDAwMDAwRjQyRTAwMDFDMDAwMDAwMTA5MTg0MEExOUZBCi06MTAwMTcwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDAwNjhBCi06MTAwMTgwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyRDgwMDEwNjNFCi06MTAwMTkwMDAwMDAwMDAxODgwMDAwMDgzMDAwMDAwMTAwODY2MDAxM0IzCi06MTAwMUEwMDAwMDAwMDAxODgwMDBGRkYxMDAwMDAwMDhCMTAwMDAwMTBECi06MTAwMUIwMDAwMDAwMDAwODJDODAwMTBDMDAwMDAwMDgyRDAwMDAwODQxCi06MTAwMUMwMDAwMDAwMDAwODJEODAwMDAxMDAwMDAwMTg4MDAwMDA3QzY1Ci06MTAwMUQwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMEMxRjgwMDAwMjU3Ci06MTAwMUUwMDAwMDAwMDAwMDJDMDcwMDAwMDAwMDAwMTA5MURFMDAwMDVECi06MTAwMUYwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMTg4MDAwRkZEMzkwCi06MTAwMjAwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMEMxRjgwMDAwMDI4Ci06MTAwMjEwMDAwMDAwMDAwMDJDMDcwMDAwMDAwMDAwMTA5MURFMDAwMDJDCi06MTAwMjIwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMTg4MDAwRkZDRDY1Ci06MTAwMjMwMDAwMDAwMDAwQzFGODAwMDAyMDAwMDAwMDAwNTAwMDAwMDBDCi06MTAwMjQwMDAwMDAwMDAxODgwMDBGRkNBMDAwMDAwMEMyOTgwMDAwMjk2Ci06MTAwMjUwMDAwMDAwMDAwQzFGODAwMDAyMDAwMDAwMDAyQURGMDAwMEU4Ci06MTAwMjYwMDAwMDAwMDAwODJBMDAwMDA1MDAwMDAwMDgwNTAwNTU1NUEwCi06MTAwMjcwMDAwMDAwMDAxODgwMDBGRkM0MDAwMDAwMDgwMjI0MDA0NUIwCi06MTAwMjgwMDAwMDAwMDAxODAwMDQwMDAwMDAwMDAwMTg4MDAwMDAxQzlFCi06MTAwMjkwMDAwMDAwMDAxODgwMDAwMDFFMDAwMDAwMTg4MDAwMDA2NUFCCi06MTAwMkEwMDAwMDAwMDAxODgwMDAwMEFEMDAwMDAwMTg4MDAwMDBBQ0M1Ci06MTAwMkIwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMDBFCi06MTAwMkMwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMEZFCi06MTAwMkQwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMEVFCi06MTAwMkUwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMERFCi06MTAwMkYwMDAwMDAwMDAxODgwMDAwMEYzMDAwMDAwMTg4MDAwMDAwMERCCi06MTAwMzAwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAxNUE4Ci06MTAwMzEwMDAwMDAwMDAxODgwMDAwMDFCMDAwMDAwMTg4MDAwMDAwMDkyCi06MTAwMzIwMDAwMDAwMDAxODgwMDAwMEMzMDAwMDAwMTg4MDAwMDAyRUFDCi06MTAwMzMwMDAwMDAwMDAxODgwMDAwMEYzMDAwMDAwMTg4MDAwMDExRTdCCi06MTAwMzQwMDAwMDAwMDAxODgwMDAwMEU5MDAwMDAwMTg4MDAwMDE0MjUxCi06MTAwMzUwMDAwMDAwMDAxODgwMDAwMDRFMDAwMDAwMTg4MDAwMDAwMDFGCi06MTAwMzYwMDAwMDAwMDAxODgwMDAwMDgwMDAwMDAwMEMxRjgwMDAwMUM5Ci06MTAwMzcwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMTg4MDAwRkZBMzNFCi06MTAwMzgwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMEMyOTgwMDAwMTQyCi06MTAwMzkwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMDgyQTAwMDAwMjdECi06MTAwM0EwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMTg4MDAwRkY5RDE0Ci06MTAwM0IwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMEMyOTgwMDAwMTEyCi06MTAwM0MwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMDAyOTQyMDAwMDE2Ci06MTAwM0QwMDAwMDAwMDAwODJBMDAwMDAyMDAwMDAwMDAwNTAwMDAwMEU0Ci06MTAwM0UwMDAwMDAwMDAxODgwMDBGRjk2MDAwMDAwMTg4MDAwRkY5NUI0Ci06MTAwM0YwMDAwMDAwMDAxMEIxQkNCMDBBMDAwMDAwMEIyRkRGMDAwMkFCCi06MTAwNDAwMDAwMDAwMDAwMDAzRDgwMDAwMDAwMDAwMDAyQzNDMDAwMEE5Ci06MTAwNDEwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgwNjAwNTU1NUFGCi06MTAwNDIwMDAwMDAwMDAxODgwMDAwMDI5MDAwMDAwMTg4MDAwMDBCQkI4Ci06MTAwNDMwMDAwMDAwMDAxMDJDNjIwMUJBMDAwMDAwMTg4MDAwMDAwNUM2Ci06MTAwNDQwMDAwMDAwMDAwODJDODAwMTBEMDAwMDAwMDgyRDAwMDAwOUFDCi06MTAwNDUwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyRDgwMDEwNzZBCi06MTAwNDYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEMxRjgwMDAwMDJDCi06MTAwNDcwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAyQURGMDAwMEY0Ci06MTAwNDgwMDAwMDAwMDAwODJBMDAwMDA2MDAwMDAwMDgwNTAwNTU1NTdECi06MTAwNDkwMDAwMDAwMDAxODgwMDBGRjgwMDAwMDAwMTA5MUQ0MDAwMEQwCi06MTAwNEEwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUVBCi06MTAwNEIwMDAwMDAwMDAwODJBMDAwMDBCMDAwMDAwMDAwNTAwMDAwMEZBCi06MTAwNEMwMDAwMDAwMDAxODgwMDBGRjdBMDAwMDAwMDAwMjAyMDAwMDE3Ci06MTAwNEQwMDAwMDAwMDAwMDAyOUEwMDAwMDAwMDAwMDAwNjBDMkMwMDQyCi06MTAwNEUwMDAwMDAwMDAwNEM2MEMzNDAwMDAwMDAwMTAwMDFGMDAwMEQzCi06MTAwNEYwMDAwMDAwMDAxMEIxOTYxODBDMDAwMDAwMDgwNjk2MDAwNEQ5Ci06MTAwNTAwMDAwMDAwMDAwOTA2OERGRkZDMDAwMDAwMDRDRDA1MUEwMDY0Ci06MTAwNTEwMDAwMDAwMDAwNENDOUExODAwMDAwMDAwMTAyMEQ3MDAwMDUyCi06MTAwNTIwMDAwMDAwMDAwQzJCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCi06MTAwNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAyMEQ3MDAwMEI0Ci06MTAwNTQwMDAwMDAwMDAwODBGODAwMDAxMDAwMDAwMTBCMTgwMDFGNERECi06MTAwNTUwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QjU2MDAwMDlGCi06MTAwNTYwMDAwMDAwMDAxODAwMDQwMDAwMDAwMDAwMDAwNjgyMDAwMEU3Ci06MTAwNTcwMDAwMDAwMDAxMEIxOEEwMDA2MDAwMDAwMDA4NjBDMTQwMDg0Ci06MTAwNTgwMDAwMDAwMDAxMEIxOEMwMDA0MDAwMDAwMDAwNTAwMDAwMDE1Ci06MTAwNTkwMDAwMDAwMDAwODJBMDAwMDAxMDAwMDAwMTA5MUQ0MDAwMEIzCi06MTAwNUEwMDAwMDAwMDAxODAwMEQwMDAwMDAwMDAwMDAwNTAyMDAwMDFGCi06MTAwNUIwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTgwMDBBMDAwMDlBCi06MTAwNUMwMDAwMDAwMDAxMEIxQTBCMDEzMDAwMDAwMEIyRkRGMDAwMkVDCi06MTAwNUQwMDAwMDAwMDAwMDJDMjAwMDAwMDAwMDAwMDgyQzgwMDAwMDFCCi06MTAwNUUwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMTA5MUQ0MDAwMDYxCi06MTAwNUYwMDAwMDAwMDAwODA2MDA1NTU1MDAwMDAwMTg4MDAwRkZFRUJFCi06MTAwNjAwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMTAwMDFGMDAwMEU5Ci06MTAwNjEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMEY0NzYwMDAwODlECi06MTAwNjIwMDAwMDAwMDAwRjA2MEUwMDAxMDAwMDAwMDAwRjU4MDAwMDNGCi06MTAwNjMwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMDVECi06MTAwNjQwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwRDYxMDAwMEM0Ci06MTAwNjUwMDAwMDAwMDAxODgwMDAwMDEzMDAwMDAwMEY0NzYwMDAwODMxCi06MTAwNjYwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDgyQzgwMDAwMEJCCi06MTAwNjcwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMTA5MUQ0MDAwMEQwCi06MTAwNjgwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMEYwNjBFMDAwMTc0Ci06MTAwNjkwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAwRjU4MDAwMEM0Ci06MTAwNkEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwQTY0MDAwMDVECi06MTAwNkIwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRkQzCi06MTAwNkMwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwMjYyMDAwMDU4Ci06MTAwNkQwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAzMTA0MDAwMENBCi06MTAwNkUwMDAwMDAwMDAwMDMwOUEwMDAwMDAwMDAwMTg4MDAwRkZCQ0VECi06MTAwNkYwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMTAwMDIyMDAwMjEwCi06MTAwNzAwMDAwMDAwMDAwQzI5NTIwMDAxMDAwMDAwMEMyOTUyMDAwMERBCi06MTAwNzEwMDAwMDAwMDAwODAyMDAwMDBFMDAwMDAwMDgwMjgwMDAxQTFECi06MTAwNzIwMDAwMDAwMDAxMEIxQzQwQTAyMDAwMDAwMDgwMjAwMDAwMzJCCi06MTAwNzMwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMEMxRjgwMDAwMUUyCi06MTAwNzQwMDAwMDAwMDAwMDJBREYwMDAwMDAwMDAwMDAyQTAwMDgwMDZFCi06MTAwNzUwMDAwMDAwMDAwODA1MDA1NTU1MDAwMDAwMTg4MDAwRkYyNzI0Ci06MTAwNzYwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMTA5MUQ0MDAwMEY5Ci06MTAwNzcwMDAwMDAwMDAwODJBMDAwMDAxMDAwMDAwMDAyQzIwMDAwMEZBCi06MTAwNzgwMDAwMDAwMDAwODJDODAwMDAwMDAwMDAwMDgyRDAwMDAwMDgwCi06MTAwNzkwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMTA5MUQ0MDAwMDEyCi06MTAwN0EwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAwNjEwCi06MTAwN0IwMDAwMDAwMDAwODJEMDAwMDA2MDAwMDAwMDAzMDgwMDAwMDRFCi06MTAwN0MwMDAwMDAwMDAwMDMxMDAwMDAwMDAwMDAwMDgyRDgwMDAwNjNECi06MTAwN0QwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUI3Ci06MTAwN0UwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAyQURGMDAwMDgxCi06MTAwN0YwMDAwMDAwMDAwODJBMDAwMDEwMDAwMDAwMDAwNTAwMDAwMEIyCi06MTAwODAwMDAwMDAwMDAxODgwMDBGRjEyMDAwMDAwMTA5MUEwQjAwOTQ1Ci06MTAwODEwMDAwMDAwMDAwODJDODAwMTBEMDAwMDAwMDgyRDAwMDAwOUQ4Ci06MTAwODIwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyRDgwMDEwNzk2Ci06MTAwODMwMDAwMDAwMDAxODgwMDBGRkFGMDAwMDAwMTg4MDAwMDAxMENBCi06MTAwODQwMDAwMDAwMDAwOEFDMDAwMDAxMDAwMDAwMTg4MDAwMDAwQjUwCi06MTAwODUwMDAwMDAwMDAwMDAzODBCMDAwMDAwMDAwMEIyRkRGMDAwMjRBCi06MTAwODYwMDAwMDAwMDAwMDJDMDA0MDAwMDAwMDAwMTA5MUQ0MDAwMEE3Ci06MTAwODcwMDAwMDAwMDAwODA2MDA1NTU1MDAwMDAwMTg4MDAwRkY5RThCCi06MTAwODgwMDAwMDAwMDAxODgwMDAwMDMwMDAwMDAwMTg4MDAwMDAwNjAyCi06MTAwODkwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAyQzAwMEUwMDAzCi06MTAwOEEwMDAwMDAwMDAwODJBMDAwMDA3MDAwMDAwMDgwNTAwNTU1NTU4Ci06MTAwOEIwMDAwMDAwMDAxODgwMDBGRUZDMDAwMDAwMDAwNjgyMDAwMDFFCi06MTAwOEMwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUM2Ci06MTAwOEQwMDAwMDAwMDAxMDBDRTcwMDA3MDAwMDAwMDkwNTYyRkZGRkEwCi06MTAwOEUwMDAwMDAwMDAxMEJBNkMxNDA1MDAwMDAwMDAyQURGMDAwMEIwCi06MTAwOEYwMDAwMDAwMDAwMDIxMDAwMDAwMDAwMDAwMDgyQTAwMDAwNUEwCi06MTAwOTAwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyQzgwMDEwQ0IxCi06MTAwOTEwMDAwMDAwMDAwODJEMDAwMDA4MDAwMDAwMEMzMTYyMDAxOEUzCi06MTAwOTIwMDAwMDAwMDAwODJEODAwMDAxMDAwMDAwMTg4MDAwRkY5MEVBCi06MTAwOTMwMDAwMDAwMDAxODAwMEQwMDAwMDAwMDAwMTBCMUEwQjAwRTczCi06MTAwOTQwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAwM0Q4MDAwMEIxCi06MTAwOTUwMDAwMDAwMDAwMDJDMjAwMDAwMDAwMDAwMTA5MUQ0MDAwMEQ2Ci06MTAwOTYwMDAwMDAwMDAxODgwMDAwMDE0MDAwMDAwMTAyQzYyMDAwMjNCCi06MTAwOTcwMDAwMDAwMDAxODgwMDAwMDBCMDAwMDAwMEIyRkRGMDAwMkI5Ci06MTAwOTgwMDAwMDAwMDAwMDJDMDcwMDAwMDAwMDAwMEMxRjgwMDAwMTg4Ci06MTAwOTkwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwNTAwMDAwMEQzCi06MTAwOUEwMDAwMDAwMDAxODgwMDBGRURFMDAwMDAwMDgyQzgwMDEwRDExCi06MTAwOUIwMDAwMDAwMDAwODJEMDAwMDA5MDAwMDAwMTA5MUQ0MDAwMDg0Ci06MTAwOUMwMDAwMDAwMDAwODJEODAwMTA3MDAwMDAwMEMyOTgwMDAwMUI0Ci06MTAwOUQwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMTA5MURFMDAwMEVDCi06MTAwOUUwMDAwMDAwMDAwMDJBREYwMDAwMDAwMDAwMDgyQTAwMDAwQUMyCi06MTAwOUYwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMTg4MDAwRkVEMzg5Ci06MTAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMDgyQzgwMDEwQzFFCi06MTAwQTEwMDAwMDAwMDAwODJEMDAwMDA4MDAwMDAwMDgyRDgwMDEzNEFGCi06MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAyMDVGMDAwMDM3Ci06MTAwQTMwMDAwMDAwMDAwODJDODAwMTQwMDAwMDAwMDgyRDAwMDAzQzUwCi06MTAwQTQwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMDAwMDAwMDAwMEQ0Ci06MTAwQTUwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDgyQzgwMDA4MEQzCi06MTAwQTYwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMDgyRDgwMDEwODkzCi06MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMEY3Ci06MTAwQTgwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMTA5MUQ0MDAwMENGCi06MTAwQTkwMDAwMDAwMDAwODA2MDBBQUFBMDAwMDAwMTg4MDAwRkY1QTAzCi06MTAwQUEwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUU0Ci06MTAwQUIwMDAwMDAwMDAwODJBMDAwMDA5MDAwMDAwMDgwNTAwQUFBQTlBCi06MTAwQUMwMDAwMDAwMDAxODgwMDBGRUJBMDAwMDAwMTA5MUQ0MDAwMDYxCi06MTAwQUQwMDAwMDAwMDAwODA2MDA1NTU1MDAwMDAwMTg4MDAwRkY1Mjc1Ci06MTAwQUUwMDAwMDAwMDAxMDkxQTAzQzAyMDAwMDAwMTBCMUU2NjIwNzc3Ci06MTAwQUYwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAyQzMxMDAwMDdFCi06MTAwQjAwMDAwMDAwMDAwOTJDQjEwMDdGMDAwMDAwMDgyQ0Q5MDAwMDczCi06MTAwQjEwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMDgyRDgwMDEwRERECi06MTAwQjIwMDAwMDAwMDAxMEIxQTgwMDA2MDAwMDAwMTAyMDVGMDAwMEM3Ci06MTAwQjMwMDAwMDAwMDAwMDJDMjAwMDAwMDAwMDAwMDAyQ0E3MDAwMDk2Ci06MTAwQjQwMDAwMDAwMDAwODJEMDAwMDEwMDAwMDAwMDgyRDgwMDEwOEEyCi06MTAwQjUwMDAwMDAwMDAxODgwMDBGRjRCMDAwMDAwMTBCMUE2MDAxMDNDCi06MTAwQjYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEYwRjMwMDAwNzAxCi06MTAwQjcwMDAwMDAwMDAwMDBBNjAwMDAwMDAwMDAwMDAwQUUxMDAwMDIwCi06MTAwQjgwMDAwMDAwMDAwRjRCNjIwMDA4MDAwMDAwMDkwQjE2MDBGRjc4Ci06MTAwQjkwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDkwRDFBMDBGRkI3Ci06MTAwQkEwMDAwMDAwMDAxMDA3MzAwMDAzMDAwMDAwMEMwRDFBMDAwOEMwCi06MTAwQkIwMDAwMDAwMDAwQzBCMTYwMDA4MDAwMDAwMEY0Q0UzMDAxOEFBCi06MTAwQkMwMDAwMDAwMDAwMDBDOTkyQzAwMDAwMDAwMDRDQzk5MzQwMEI3Ci06MTAwQkQwMDAwMDAwMDAwODBGODAwMDAwMDAwMDAwMEMyOTgwMDAwMUM4Ci06MTAwQkUwMDAwMDAwMDAwMDMzMzEwMDAwMDAwMDAwMDgyMjAwMDAxNjYxCi06MTAwQkYwMDAwMDAwMDAwMDJBREYwMDAwMDAwMDAwMDgyQTAwMDAwQ0FFCi06MTAwQzAwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMDAwRjIwMDAwMDA2Ci06MTAwQzEwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMDgwNTAwNTU1NTcxCi06MTAwQzIwMDAwMDAwMDAxODgwMDBGRThFMDAwMDAwMTA5MUQ0MDAwMDJCCi06MTAwQzMwMDAwMDAwMDAwODA2MDBBQUFBMDAwMDAwMTg4MDAwRkYyNjk1Ci06MTAwQzQwMDAwMDAwMDAwRjQ3MjIwMDA4MDAwMDAwMDkwNzBFMDAwRkY3Ci06MTAwQzUwMDAwMDAwMDAwODA3MEUwMDA4MDAwMDAwMDgwMjgwMDAwMUU0Ci06MTAwQzYwMDAwMDAwMDAwNzAyODUxQzAwMDAwMDAwMDg4Mjg1MDAwMUNBCi06MTAwQzcwMDAwMDAwMDAwMDAyODU0QzAwMDAwMDAwMDc0Mjg1MUMwMEI3Ci06MTAwQzgwMDAwMDAwMDAwM0MzQUE1MjAwMDAwMDAwMDAwM0IxMEUwMEUwCi06MTAwQzkwMDAwMDAwMDAwNzRCMDcxQzAwMDAwMDAwMEYwRjMwMDAwNzhBCi06MTAwQ0EwMDAwMDAwMDAwRjBBOTYwMDAzMDAwMDAwMDAwQTk1NUMwMDk3Ci06MTAwQ0IwMDAwMDAwMDAwMDRBMDA1QTAwMDAwMDAwMDAwQzk2MEEwMEU0Ci06MTAwQ0MwMDAwMDAwMDAwOTBDOTlGRkZGMDAwMDAwMDgwRDAwRkZGRjY1Ci06MTAwQ0QwMDAwMDAwMDAxMEIxOTYzMjAyMDAwMDAwMDgwRjgwMDAwNUVECi06MTAwQ0UwMDAwMDAwMDAxMEIxQTgwMDA4MDAwMDAwMTAyMDVGMDAwMDA0Ci06MTAwQ0YwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAyQzIwMDAwMDhECi06MTAwRDAwMDAwMDAwMDAwMDJDQTcwMDAwMDAwMDAwMDgyRDAwMDAxMENCCi06MTAwRDEwMDAwMDAwMDAwODJEODAwMTA4MDAwMDAwMTg4MDAwRkYxMjZDCi06MTAwRDIwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMTAwMDFGMDAwMERFCi06MTAwRDMwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMDAyQURGMDAwMEZFCi06MTAwRDQwMDAwMDAwMDAwODJBMDAwMDBEMDAwMDAwMDgwNTAwQUFBQTAzCi06MTAwRDUwMDAwMDAwMDAxODgwMDBGRTY4MDAwMDAwMTA5MUQ0MDAwMDIwCi06MTAwRDYwMDAwMDAwMDAwODA2MDA1NTU1MDAwMDAwMTg4MDAwRkYwMDM0Ci06MTAwRDcwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMTExCi06MTAwRDgwMDAwMDAwMDAwODJBMDAwMDA3MDAwMDAwMDgwNTAwNTU1NTczCi06MTAwRDkwMDAwMDAwMDAxODgwMDBGRTYwMDAwMDAwMDgwMzA1MDAwNDQ5Ci06MTAwREEwMDAwMDAwMDAwNjgzMDQwQzAwMDAwMDAwMDgwMjg1MDIwMDE5Ci06MTAwREIwMDAwMDAwMDAwMDg2MDUwQzAwMDAwMDAwMDE4NjBDMEUwMEZCCi06MTAwREMwMDAwMDAwMDAwODAyMDQwMDA0MDAwMDAwMDAwMjA0MTgwMEYzCi06MTAwREQwMDAwMDAwMDAwMDgzODcxODAwMDAwMDAwMTgwMDAyMDAwMEQ3Ci06MTAwREUwMDAwMDAwMDAxMEIxODAwMDA0MDAwMDAwMUYwMzAzMDEwMDk4Ci06MTAwREYwMDAwMDAwMDAwODA1MDAwMEZGMDAwMDAwMTgwMDAyMDAwMENECi06MTAwRTAwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTBCMUQ0MDAwMDIzCi06MTAwRTEwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMDgwMjU0MDAwOUI1Ci06MTAwRTIwMDAwMDAwMDAwOTI5NTIwMDNGMDAwMDAwMTgwMDA0MDAwMEUzCi06MTAwRTMwMDAwMDAwMDAxODgwMDAwMDEwMDAwMDAwMTg4MDAwMDAxMTYxCi06MTAwRTQwMDAwMDAwMDAxODgwMDAwMDRCMDAwMDAwMTg4MDAwMDEzQ0VBCi06MTAwRTUwMDAwMDAwMDAxODgwMDAwMTNCMDAwMDAwMTg4MDAwMDEzQUVCCi06MTAwRTYwMDAwMDAwMDAxODgwMDAwMTNBMDAwMDAwMTg4MDAwMDAwMDE3Ci06MTAwRTcwMDAwMDAwMDAxODgwMDAwMTREMDAwMDAwMTg4MDAwMDEzNkJECi06MTAwRTgwMDAwMDAwMDAxODgwMDAwMDBDMDAwMDAwMTg4MDAwMDE1MkQzCi06MTAwRTkwMDAwMDAwMDAxODgwMDAwMUFDMDAwMDAwMTg4MDAwMDA4MEY1Ci06MTAwRUEwMDAwMDAwMDAxODgwMDAwMTA3MDAwMDAwMTg4MDAwMDExNUY0Ci06MTAwRUIwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZFQTg3Ci06MTAwRUMwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMEMyOTgwMDAwMDQzCi06MTAwRUQwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTg4MDAwRkZFNjEyCi06MTAwRUUwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZFNDVECi06MTAwRUYwMDAwMDAwMDAwMDAzODIwMDAwMDAwMDAwMTg4MDAwRkZERkY3Ci06MTAwRjAwMDAwMDAwMDAwMTBDMTYxNDAwMDAwMDAwMDA4QzE4MTQwMEYyCi06MTAwRjEwMDAwMDAwMDAxMDkxOTgwMDAzMDAwMDAwMDgwQzk2MDAwMkU5Ci06MTAwRjIwMDAwMDAwMDAxMEIxODAwMDAzMDAwMDAwMDgwQzk2MDAwMUQyCi06MTAwRjMwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwRDE5MDAwMDdGCi06MTAwRjQwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTBDCi06MTAwRjUwMDAwMDAwMDAwODBGODAwMDAxMDAwMDAwMDAwMDAwMDAwMEY5Ci06MTAwRjYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTAzCi06MTAwRjcwMDAwMDAwMDAxMDAxMTMwMUYxMDAwMDAwMTgwMDA3MDAwMDNDCi06MTAwRjgwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQyMUNFCi06MTAwRjkwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMDc4Ci06MTAwRkEwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDAwNjRDCi06MTAwRkIwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDc5Ci06MTAwRkMwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYxMDAwMDM0Ci06MTAwRkQwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMEU4Ci06MTAwRkUwMDAwMDAwMDAxMDkxOTYzNDE2MDAwMDAwMTAyMDVGMDAwMEYxCi06MTAwRkYwMDAwMDAwMDAwMDA5RDgwMDAwMDAwMDAwMDAyQzFFMDAwMEM2Ci06MTAxMDAwMDAwMDAwMDAwODJDODAwMTBFMDAwMDAwMDgyRDAwMDAwQURFCi06MTAxMDEwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDE4Ci06MTAxMDIwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYyMDAwMEQyCi06MTAxMDMwMDAwMDAwMDAwMDJDMTMwMDAwMDAwMDAwMTgwMDBBMDAwMDRGCi06MTAxMDQwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQwOTI1Ci06MTAxMDUwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMEI3Ci06MTAxMDYwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDA2QTI3Ci06MTAxMDcwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMEI4Ci06MTAxMDgwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDdBMDAwMDVBCi06MTAxMDkwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMTA5MURFMDAwMEFGCi06MTAxMEEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUMyCi06MTAxMEIwMDAwMDAwMDAwMDJGODBBQTAwMDAwMDAwMDAyQTAwMDAwMEFECi06MTAxMEMwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwMzYyMDAwMDRECi06MTAxMEQwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDAwMjYzOEMwMEIzCi06MTAxMEUwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDgwMjA0MDAxMjc0Ci06MTAxMEYwMDAwMDAwMDAxMEI5MDYwODJFMDAwMDAwMDAwRjU4MDAwMDg0Ci06MTAxMTAwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMDgyCi06MTAxMTEwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMDRCCi06MTAxMTIwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQ0M2MDAxMjQ4Ci06MTAxMTMwMDAwMDAwMDAxODgwMDBGRkNBMDAwMDAwMTAyMDU2MDAwMEM4Ci06MTAxMTQwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwM0Y2Ci06MTAxMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDYwCi06MTAxMTYwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgyNzExMDAxMkRFCi06MTAxMTcwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMDhBMzFCMDAxMkExCi06MTAxMTgwMDAwMDAwMDAxMEIxOTgwMDA2MDAwMDAwMTAwMDFGMDAwMEQxCi06MTAxMTkwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAyMDU2MDAwMDdBCi06MTAxMUEwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNDk1Ci06MTAxMUIwMDAwMDAwMDAwODIyMDAwMDAzMDAwMDAwMDgyQzgwMDAwQzQyCi06MTAxMUMwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMTAwMDFGMDAwMEFGCi06MTAxMUQwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyNTk2MDAwMDA1Ci06MTAxMUUwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwNjY2MDAwMERFCi06MTAxMUYwMDAwMDAwMDAwMDg2NjExODAwMDAwMDAwMDkwMjYwMDAwRjc2Ci06MTAxMjAwMDAwMDAwMDAwRjAyMDQwMDAyMDAwMDAwMTBCNjBDMDgwM0VBCi06MTAxMjEwMDAwMDAwMDAwQzFGQkYwMDAwMDAwMDAwMEMzMzY2MDAxMDJGCi06MTAxMjIwMDAwMDAwMDAwMDMyMTQwMDAwMDAwMDAwMDAzMjk1MDAwMEIxCi06MTAxMjMwMDAwMDAwMDAwNTczNjYyQzAwMDAwMDAwMDAzMUUzMkUwMDYyCi06MTAxMjQwMDAwMDAwMDAwODJEODAwMDEwMDAwMDAwMTAyMDUzMDAwMDU2Ci06MTAxMjUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTg4MDAwRkY3NjAyCi06MTAxMjYwMDAwMDAwMDAwMDIzMDAwMDAwMDAwMDAwMDkyNUU2RkZGRjQ5Ci06MTAxMjcwMDAwMDAwMDAwODIyMDAwMDBCMDAwMDAwMEM2OTUyMDAwMDcyCi06MTAxMjgwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDI2Ci06MTAxMjkwMDAwMDAwMDAxODgwMDBGRjZGMDAwMDAwMTA5MURFMDAwMEM5Ci06MTAxMkEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUMwCi06MTAxMkIwMDAwMDAwMDAwMDJGODBBQTAwMDAwMDAwMDAyQTAwMDAwMEFCCi06MTAxMkMwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDgyQzgwMDA0MEJFCi06MTAxMkQwMDAwMDAwMDAwODJEMDAwMDIwMDAwMDAwMDgyRDgwMDExQ0U3Ci06MTAxMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDdGCi06MTAxMkYwMDAwMDAwMDAwRjQyRUEwMDEwMDAwMDAwMTAwMDRGMDAwNDQwCi06MTAxMzAwMDAwMDAwMDAxMEI3NDY5MjAwMDAwMDAwMDgwMjQ5MDAxMkQ5Ci06MTAxMzEwMDAwMDAwMDAxMEI1ODQwQTAwMDAwMDAwMDAwRDYxMDAwMDBDCi06MTAxMzIwMDAwMDAwMDAxMEJBNjYzNDZEMDAwMDAwMDAwMzYyMDAwMDg3Ci06MTAxMzMwMDAwMDAwMDAxMEI4NjMwQzZCMDAwMDAwMDg4MzA1MDAxMjY5Ci06MTAxMzQwMDAwMDAwMDAxMDAwNEYwMDAyMDAwMDAwMDAwMzQ5MDAwMEYwCi06MTAxMzUwMDAwMDAwMDAwMTgzMDY4QzAwMDAwMDAwMDA4M0M2MEMwMDIyCi06MTAxMzYwMDAwMDAwMDAxMEIxODcwMDEwMDAwMDAwMDAwQjZFMDAwMEFDCi06MTAxMzcwMDAwMDAwMDAxODgwMDBGRjUwMDAwMDAwMDEwNjY5MTQwMDAyCi06MTAxMzgwMDAwMDAwMDAxMDkxOEMwMDAyMDAwMDAwMDhCNEU5MDAwMTg4Ci06MTAxMzkwMDAwMDAwMDAxMEIxRTkyQzVGMDAwMDAwMDA4NjY5MkMwMEZECi06MTAxM0EwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDkwMkVBRkZGRjQ4Ci06MTAxM0IwMDAwMDAwMDAxMDAwMEMwMDAyMDAwMDAwMDAwMjA0MEEwMEZGCi06MTAxM0MwMDAwMDAwMDAwRjQ2MEMwMDAxMDAwMDAwMEYwMjg1MDAwMTI0Ci06MTAxM0QwMDAwMDAwMDAxMDkxOEMwMUZDMDAwMDAwMTBCNzA0MEU1NkI0Ci06MTAxM0UwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDAwRjQwMDAwMDQyCi06MTAxM0YwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwQTY0MDAwMDExCi06MTAxNDAwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRjc1Ci06MTAxNDEwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwQjgwMDAwMDM1Ci06MTAxNDIwMDAwMDAwMDAwODBDODYwMDEyMDAwMDAwMTAyMDU2MDAwMDhBCi06MTAxNDMwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwMzAzCi06MTAxNDQwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMTAwMDFGMDAwMEU2Ci06MTAxNDUwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgyNzExMDAxMkVCCi06MTAxNDYwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMDAyNjQ2MDAwMDFBCi06MTAxNDcwMDAwMDAwMDAwMDIzMDYwMDAwMDAwMDAwMTBCMTk4MDAwOUUxCi06MTAxNDgwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMURFCi06MTAxNDkwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUI3Ci06MTAxNEEwMDAwMDAwMDAwODBGODAwMDA0MDAwMDAwMDAwMDAwMDAwMEExCi06MTAxNEIwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUFFCi06MTAxNEMwMDAwMDAwMDAwMDMyMTQwMDAwMDAwMDAwMDAzMjk1MDAwMDBGCi06MTAxNEQwMDAwMDAwMDAwMDMxRTMyRTAwMDAwMDAwMDU3MzY2MkMwMEMwCi06MTAxNEUwMDAwMDAwMDAwMDI1OTYwMDAwMDAwMDAwMTBCMTg3MDAyMUQ4Ci06MTAxNEYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEYwRjZCMDAwN0E3Ci06MTAxNTAwMDAwMDAwMDAwMDBENjkwMDAwMDAwMDAwMDAwQTZDMDAwMEVGCi06MTAxNTEwMDAwMDAwMDAwMDBBRUQwMDAwMDAwMDAwMDAwQjZFMDAwMDVCCi06MTAxNTIwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDAwQzg3MDAwMDlECi06MTAxNTMwMDAwMDAwMDAxODgwMDBGRjE4MDAwMDAwMDEwQzE2MTQwMEM1Ci06MTAxNTQwMDAwMDAwMDAwMDhDMTgxNDAwMDAwMDAwMDgwQzk2MDAwMTM4Ci06MTAxNTUwMDAwMDAwMDAxMDkxOTgwMDAyMDAwMDAwMDgwQzk5MDAwMUEyCi06MTAxNTYwMDAwMDAwMDAwMDBEMTkwMDAwMDAwMDAwMDAwQzAwMDAwMDQ5Ci06MTAxNTcwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUQ2Ci06MTAxNTgwMDAwMDAwMDAwODBGODAwMDAxMDAwMDAwMTAyMDUzMDAwMDQwCi06MTAxNTkwMDAwMDAwMDAwQzY5NTIwMDAxMDAwMDAwMTAwMDFGMDAwMDU0Ci06MTAxNUEwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyMkM1OEMwMDc5Ci06MTAxNUIwMDAwMDAwMDAwMDIzMTIwMDAwMDAwMDAwMDAyNzExMDAwMEJFCi06MTAxNUMwMDAwMDAwMDAwMDI2OTAwMDAwMDAwMDAwMTBCODE3MEUwMzc1Ci06MTAxNUQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkZFQkQ0Ci06MTAxNUUwMDAwMDAwMDAwMDgyOTcwRTAwMDAwMDAwMDBBMzEyMEEwMDE1Ci06MTAxNUYwMDAwMDAwMDAwODIyMDAwMDFBMDAwMDAwMDgyQzgwMDAwQ0U3Ci06MTAxNjAwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAxMEQ0Ci06MTAxNjEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTRDCi06MTAxNjIwMDAwMDAwMDAwMDBENkUwMDAwMDAwMDAwMDNFN0NGMzQwMDUyCi06MTAxNjMwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTA5MURFMDAwMDc2Ci06MTAxNjQwMDAwMDAwMDAxMEIxODcwMDA3MDAwMDAwMDAzNjE0MDAwMDAxCi06MTAxNjUwMDAwMDAwMDAwMDM2OTUwMDAwMDAwMDAwMDAzNzE2MDAwMDcyCi06MTAxNjYwMDAwMDAwMDAwODJDODAwMDUwMDAwMDAwMDgyRDAwMDAzMDExCi06MTAxNjcwMDAwMDAwMDAwODJEODAwMDBDMDAwMDAwMTAyMDUzMDAwMDI2Ci06MTAxNjgwMDAwMDAwMDAxODgwMDBGRUYxMDAwMDAwMDAyNjQ2MDAwMDY3Ci06MTAxNjkwMDAwMDAwMDAwMDIzMDAwMDAwMDAwMDAwMDkyNUU2RkZGRjE1Ci06MTAxNkEwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDNFN0NGMkMwMERDCi06MTAxNkIwMDAwMDAwMDAwODIyMDAwMDFCMDAwMDAwMEM2OTUyMDAwMDFFCi06MTAxNkMwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMEUyCi06MTAxNkQwMDAwMDAwMDAxODgwMDBGRUU3MDAwMDAwMDAyRkQ1MDAwMDg5Ci06MTAxNkUwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDNGMDAwQzc1Ci06MTAxNkYwMDAwMDAwMDAwMDA2NjYwMDAwMDAwMDAwMDA4NjYxMTgwMDdGCi06MTAxNzAwMDAwMDAwMDAwOTAyNjAwMEYwMDAwMDAwMTBCNzBDMDgwODlCCi06MTAxNzEwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMEM3MzY2MDAxMDY4Ci06MTAxNzIwMDAwMDAwMDAwODJDODAwMDE4MDAwMDAwMDgyRDAwMDAxOEEwCi06MTAxNzMwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMEM1RkJGMDAwMEM4Ci06MTAxNzQwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTg4MDAwRkVEOEFDCi06MTAxNzUwMDAwMDAwMDAwMDJGRDUwMDAwMDAwMDAwMDAyQTAwMDAwMDVCCi06MTAxNzYwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMEM3MzY2MDAxMDE4Ci06MTAxNzcwMDAwMDAwMDAwODJDODAwMDE4MDAwMDAwMDgyRDAwMDAxODUwCi06MTAxNzgwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMEM1RkJGMDAwMDc4Ci06MTAxNzkwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAwMzEzCi06MTAxN0EwMDAwMDAwMDAwODJEMDAwMDAzMDAwMDAwMDkzMDYwRkZGMDc5Ci06MTAxN0IwMDAwMDAwMDAwODJEODAwMDAxMDAwMDAwMEMyOTgwMDAwMEJFCi06MTAxN0MwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAxQUNDCi06MTAxN0QwMDAwMDAwMDAwODJEMDAwMDFBMDAwMDAwMDAzMzAwMDAwMDg3Ci06MTAxN0UwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMDAzMTgwMDAwMDkxCi06MTAxN0YwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAwQ0FBCi06MTAxODAwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAwNERFCi06MTAxODEwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTA5MURFMDAwMEM2Ci06MTAxODIwMDAwMDAwMDAxODgwMDBGRUJEMDAwMDAwMTg4MDAwRkVCQzEzCi06MTAxODMwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDRGCi06MTAxODQwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAwRjAwODAwMEJBCi06MTAxODUwMDAwMDAwMDAwODBGODAwMDA3MDAwMDAwMTg4MDAwMDAxNTNECi06MTAxODYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMDgyMjAwMDAwOTNFCi06MTAxODcwMDAwMDAwMDAwMDI4NkQwMDAwMDAwMDAwMDAyOTAwMDAwMEFBCi06MTAxODgwMDAwMDAwMDAwRjY1NjgwMDEwMDAwMDAwMDNGNjZDOTQwMDczCi06MTAxODkwMDAwMDAwMDAxMEI5NzJBMDA0MDAwMDAwMEM3M0U3MDAxOUVBCi06MTAxOEEwMDAwMDAwMDAwQzIxNDIwMDA0MDAwMDAwMDAzQkY2MDAwMDk0Ci06MTAxOEIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMEYwCi06MTAxOEMwMDAwMDAwMDAwODIyMDAwMDA4MDAwMDAwMEM2MTQyMDAwNDMzCi06MTAxOEQwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAyQTAwMDAwMEJDCi06MTAxOEUwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTdBCi06MTAxOEYwMDAwMDAwMDAwRjBGNDcwMDA3MDAwMDAwMDgwRjgwMDAwOERECi06MTAxOTAwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDlGCi06MTAxOTEwMDAwMDAwMDAxODgwMDBGRTlGMDAwMDAwMTA5MURFMDAwMDEzCi06MTAxOTIwMDAwMDAwMDAwMDJGRDUwMDAwMDAwMDAwMTAwMDFGMDAwMDg0Ci06MTAxOTMwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAzMzUxMDAwMEQ0Ci06MTAxOTQwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTBCMUM2MDAyOUJECi06MTAxOTUwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMDAwQTYwMDAwMEE4Ci06MTAxOTYwMDAwMDAwMDAwMDBBRTEwMDAwMDAwMDAwMEY0QjYyMDAwOEM4Ci06MTAxOTcwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMEY0QzYyMDAxMDcxCi06MTAxOTgwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDkwRDFBMDBGRkI5Ci06MTAxOTkwMDAwMDAwMDAxMDA3NTAwMDAzMDAwMDAwMEMwRDFBMDAwOEEyCi06MTAxOUEwMDAwMDAwMDAwQzBCMTYwMDA4MDAwMDAwMDAwQ0M2MDAwMDMwCi06MTAxOUIwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDAwNjk4MDAwMEZFCi06MTAxOUMwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTgyCi06MTAxOUQwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTAwNkMyMDAwNDkxCi06MTAxOUUwMDAwMDAwMDAwQzI5MDAwMDAyMDAwMDAwMTAyNjQyMDAwMjQ2Ci06MTAxOUYwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMTMyCi06MTAxQTAwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTU4Ci06MTAxQTEwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMUEwMDM2Ci06MTAxQTIwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMEMyOTUyMDAwMDM5Ci06MTAxQTMwMDAwMDAwMDAxMEIxOTczMjBDMDAwMDAwMEMyOTgwMDAwMDVCCi06MTAxQTQwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMTAyMDUzMDAwMDc1Ci06MTAxQTUwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDAyMkM1OEMwMDg5Ci06MTAxQTYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUY4Ci06MTAxQTcwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUQxCi06MTAxQTgwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTg4MDAwRkZFRjM2Ci06MTAxQTkwMDAwMDAwMDAxMEIxQzgwMDEzMDAwMDAwMTBCMUM2MDAwMzIwCi06MTAxQUEwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMEZFCi06MTAxQUIwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMEMyOTUyMDAwMzE1Ci06MTAxQUMwMDAwMDAwMDAxMDA2QzIwMDAyMDAwMDAwMEMyOTUyMDAwMkIzCi06MTAxQUQwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyNzY1MDAwMDA3Ci06MTAxQUUwMDAwMDAwMDAwMDI2RTQwMDAwMDAwMDAwMDgyMjAwMDAxNkFDCi06MTAxQUYwMDAwMDAwMDAxMEIxQzYwMDAzMDAwMDAwMDAyMzQ4MDAwMEYxCi06MTAxQjAwMDAwMDAwMDAxMEIxODAwMDA1MDAwMDAwMDAyMzQ4MDAwMDI0Ci06MTAxQjEwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEYwRjUwMDAwNzlCCi06MTAxQjIwMDAwMDAwMDAxODgwMDAwMDEyMDAwMDAwMDgyMjAwMDAxNkNCCi06MTAxQjMwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAzMDE0MDAwMEFDCi06MTAxQjQwMDAwMDAwMDAwMDMwOTUwMDAwMDAwMDAwMTAwNzUwMDAwMzY2Ci06MTAxQjUwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMDkwRDFBMDBGRjJECi06MTAxQjYwMDAwMDAwMDAwRjMxMTYwMDA4MDAwMDAwMDAzMTYyMzQwMDUwCi06MTAxQjcwMDAwMDAwMDAwM0YxNjIzMDAwMDAwMDAwMTAyMDVGMDAwMDUwCi06MTAxQjgwMDAwMDAwMDAwMDJDNTEwMDAwMDAwMDAwMDkyQ0QxMDA3RjUzCi06MTAxQjkwMDAwMDAwMDAwODJDRDkwMDAwMDAwMDAwMDgyRDAwMDAwMDAzCi06MTAxQkEwMDAwMDAwMDAwODJEODAwMDBDMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTAxQkIwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTAwNUMyMDAwM0NDCi06MTAxQkMwMDAwMDAwMDAwMDMzMDAwMDAwMDAwMDAwMDgwRjgwMDAwNzQ0Ci06MTAxQkQwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTAwMDFGMDAwMDUzCi06MTAxQkUwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTg4MDAwRkU0NENDCi06MTAxQkYwMDAwMDAwMDAwMDJGRDUwMDAwMDAwMDAwMDAyQTAwMDAwMEI3Ci06MTAxQzAwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTBCMUM2MDAzMEE4Ci06MTAxQzEwMDAwMDAwMDAwRjQ3NDIwMDA4MDAwMDAwMDkwNzBFMDAwRkY3Ci06MTAxQzIwMDAwMDAwMDAwODA3MEUwMDA4MDAwMDAwMTAwMDFGMDAwMDYwCi06MTAxQzMwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgwOTAwMDAwMTQzCi06MTAxQzQwMDAwMDAwMDAwNzA5MTIxQzAwMDAwMDAwMDNDQkNBOTIwMDJDCi06MTAxQzUwMDAwMDAwMDAwMDBCOTdBMjAwMDAwMDAwMDc0MjE3MUMwMEM0Ci06MTAxQzYwMDAwMDAwMDAwMDBCMDQwMDAwMDAwMDAwMEYwQTg0MDAwM0M1Ci06MTAxQzcwMDAwMDAwMDAwMDBBOTU5QzAwMDAwMDAwMDA0QTAwOUEwMDQ1Ci06MTAxQzgwMDAwMDAwMDAwODgyMTIwMDAxMDAwMDAwMDEwQzE3MDgwMDhCCi06MTAxQzkwMDAwMDAwMDAwMDBDOTc4QzAwMDAwMDAwMDAwMjE4MDAwMEZCCi06MTAxQ0EwMDAwMDAwMDAwODBEMDBGRkZGMDAwMDAwMDgwRjgwMDAwNjg0Ci06MTAxQ0IwMDAwMDAwMDAwQzI5MDAwMDAwMDAwMDAwMTAwNkMyMDAwNDEzCi06MTAxQ0MwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMTAyNjQyMDAwMjExCi06MTAxQ0QwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMTRGCi06MTAxQ0UwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTc2Ci06MTAxQ0YwMDAwMDAwMDAxMEIxOTczMjBEMDAwMDAwMDAyMzFCMDAwMDBGCi06MTAxRDAwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMDlECi06MTAxRDEwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwMjE4MDAwMEY0Ci06MTAxRDIwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwM0E2Ci06MTAxRDMwMDAwMDAwMDAwMDIyQzUzNjAwMDAwMDAwMTAwMDFGMDAwMDU3Ci06MTAxRDQwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNkE3Ci06MTAxRDUwMDAwMDAwMDAxODgwMDBGRkYyMDAwMDAwMDAyMzFCMDAwMEJDCi06MTAxRDYwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMDNECi06MTAxRDcwMDAwMDAwMDAxMEIxQzgwMDBCMDAwMDAwMEMyOTgwMDAwMDFBCi06MTAxRDgwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMDQ5Ci06MTAxRDkwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMTAwNkMyMDAwMkRGCi06MTAxREEwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMDAyMkM1OEMwMDM3Ci06MTAxREIwMDAwMDAwMDAwMDI3NjUwMDAwMDAwMDAwMDAyNkU0MDAwMDhECi06MTAxREMwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMDgyMjAwMDAxNzY3Ci06MTAxREQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAwMDFGMDAwMDFGCi06MTAxREUwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAyMDUzMDAwMDIxCi06MDgxREYwMDAwMDAwMDAxODgwMDBGRTAzNTIKLTowMDAwMDAwMUZGCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQotICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotICogYWNjb21wYW55aW5nIGl0LgotICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOS01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWY1ZTk1Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncuaWhleApAQCAtMCwwICsxLDQ2MiBAQAorOjEwMDAwMDAwMDAwMDAwMDAwMDAwMEUwMDAwMDAwMDU4MDAwMDAwMDk4MQorOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMDAzMDAwMDAwMDBERDgwMDAwMEU1ODAwMDAwMDA1MDAwMDAwMDA3MAorOjEwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjA4MDA1MDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MDgwMDU4MDAwMDAwMDAxMEIxODAwMDA2NTkKKzoxMDAwNjAwMDAwMDAwMDFGMDUwMzAzMDAwMDAwMDAwODA1MDBGRkZGNUIKKzoxMDAwNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwODA1MDAwMEZGNUEKKzoxMDAwODAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwOEFDMDAwMDAxQTEKKzoxMDAwOTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwQzJGODAwMDAxOUYKKzoxMDAwQTAwMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDJCODAwMDAwN0EKKzoxMDAwQjAwMDAwMDAwMDEwOTFFMDAwMDIwMDAwMDAwOEFDMDAwMDAxMDgKKzoxMDAwQzAwMDAwMDAwMDEwMjAzRjAwNkIwMDAwMDAxMDIxM0YwMDAzRTMKKzoxMDAwRDAwMDAwMDAwMDEwMjBCRjAwM0EwMDAwMDAxODgwMDBGRkZENjMKKzoxMDAwRTAwMDAwMDAwMDEwQjFCOEIwMTUwMDAwMDAwQjJGREYwMDAyQjcKKzoxMDAwRjAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMzgwMDAwQzEKKzoxMDAxMDAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwMDYKKzoxMDAxMTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QjIKKzoxMDAxMjAwMDAwMDAwMDE4ODAwMDAwN0MwMDAwMDAwODJEODAwMTFDRTkKKzoxMDAxMzAwMDAwMDAwMDA4MDIwMDAwMDEwMDAwMDAxMDkxREUwMDAwMzUKKzoxMDAxNDAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE2MUQKKzoxMDAxNTAwMDAwMDAwMDE4ODAwMDAwODMwMDAwMDAwQzI5ODAwMDAyQ0QKKzoxMDAxNjAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJBREYwMDAwRDkKKzoxMDAxNzAwMDAwMDAwMDA4MkEwMDAwMEYwMDAwMDAwMDA1MDAwMDAwMzkKKzoxMDAxODAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwODAyMDAwMDAxRTcKKzoxMDAxOTAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE4Q0IKKzoxMDAxQTAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2NUEKKzoxMDAxQjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA2MEUKKzoxMDAxQzAwMDAwMDAwMDE4ODAwMDAwNzIwMDAwMDAxODgwMDBGRkYxOUQKKzoxMDAxRDAwMDAwMDAwMDA4QjEwMDAwMDEwMDAwMDAwODJDODAwMTBDQTQKKzoxMDAxRTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMDAxMUMKKzoxMDAxRjAwMDAwMDAwMDE4ODAwMDAwNkMwMDAwMDAwQjJGREYwMDAyRTAKKzoxMDAyMDAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJDMDcwMDAwMEUKKzoxMDAyMTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1QTgKKzoxMDAyMjAwMDAwMDAwMDE4ODAwMEZGRDIwMDAwMDAwQjJGREYwMDAyNEEKKzoxMDAyMzAwMDAwMDAwMDBDMUY4MDAwMDAwMDAwMDAwMDJDMDcwMDAwRTAKKzoxMDAyNDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1NzgKKzoxMDAyNTAwMDAwMDAwMDE4ODAwMEZGQ0MwMDAwMDAwQzFGODAwMDAyOEUKKzoxMDAyNjAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkM5NzcKKzoxMDAyNzAwMDAwMDAwMDBDMjk4MDAwMDIwMDAwMDAwQzFGODAwMDAyMUEKKzoxMDAyODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDA1MkUKKzoxMDAyOTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkMzNEQKKzoxMDAyQTAwMDAwMDAwMDA4MDIyNDAwNEEwMDAwMDAxODAwMDQwMDAwQkEKKzoxMDAyQjAwMDAwMDAwMDE4ODAwMDAwMUMwMDAwMDAxODgwMDAwMDFFRDQKKzoxMDAyQzAwMDAwMDAwMDE4ODAwMDAwNjUwMDAwMDAxODgwMDAwMEJCREUKKzoxMDAyRDAwMDAwMDAwMDE4ODAwMDAwQkEwMDAwMDAxODgwMDAwMDAwMzQKKzoxMDAyRTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwREUKKzoxMDAyRjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQ0UKKzoxMDAzMDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQkQKKzoxMDAzMTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMTA2QTYKKzoxMDAzMjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwOUQKKzoxMDAzMzAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxODgwMDAwMDFCNUQKKzoxMDAzNDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEQxQUMKKzoxMDAzNTAwMDAwMDAwMDE4ODAwMDAwMkYwMDAwMDAxODgwMDAwMTA2MzcKKzoxMDAzNjAwMDAwMDAwMDE4ODAwMDAxMzEwMDAwMDAxODgwMDAwMEZDMkYKKzoxMDAzNzAwMDAwMDAwMDE4ODAwMDAxNTUwMDAwMDAxODgwMDAwMDRFQTkKKzoxMDAzODAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDhFQUYKKzoxMDAzOTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDA1MDAwMDAwQUMKKzoxMDAzQTAwMDAwMDAwMDE4ODAwMEZGQTIwMDAwMDAxMDkxRDQwMDAwOUYKKzoxMDAzQjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxREIKKzoxMDAzQzAwMDAwMDAwMDA4MkEwMDAwMDIwMDAwMDAwMDA1MDAwMDAwRjQKKzoxMDAzRDAwMDAwMDAwMDE4ODAwMEZGOUMwMDAwMDAxMDkxRDQwMDAwNzUKKzoxMDAzRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQUIKKzoxMDAzRjAwMDAwMDAwMDAwMjk0MjAwMDAwMDAwMDAwODJBMDAwMDAyNUUKKzoxMDA0MDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjk1QkIKKzoxMDA0MTAwMDAwMDAwMDE4ODAwMEZGOTQwMDAwMDAxMEIxQkNCMDBBN0EKKzoxMDA0MjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwRDYKKzoxMDA0MzAwMDAwMDAwMDAwMkMzQzAwMDAwMDAwMDAxMDkxRDQwMDAwREYKKzoxMDA0NDAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDAwMDE3NDUKKzoxMDA0NTAwMDAwMDAwMDE4ODAwMDAwQ0EwMDAwMDAxMDJDNjIwMUJBRTEKKzoxMDA0NjAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwODJDODAwMTBEMkMKKzoxMDA0NzAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwQzkKKzoxMDA0ODAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDAwMDI0RjMKKzoxMDA0OTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwQzFGODAwMDAwRkMKKzoxMDA0QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwQzQKKzoxMDA0QjAwMDAwMDAwMDA4MkEwMDAwMDYwMDAwMDAwODA1MDA1NTU1NEQKKzoxMDA0QzAwMDAwMDAwMDE4ODAwMEZGN0UwMDAwMDAxMDkxRDQwMDAwQTIKKzoxMDA0RDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQkEKKzoxMDA0RTAwMDAwMDAwMDA4MkEwMDAwMEIwMDAwMDAwMDA1MDAwMDAwQ0EKKzoxMDA0RjAwMDAwMDAwMDE4ODAwMEZGNzgwMDAwMDAxODAwMDIwMDAwRDMKKzoxMDA1MDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMEIxOEEwMDA4MTAKKzoxMDA1MTAwMDAwMDAwMDEwQjE4QzE0MDcwMDAwMDAwQjA1MEFGRkZGNUIKKzoxMDA1MjAwMDAwMDAwMDEwQjE4QTAwMDMwMDAwMDAwMDg2MEExODAwRDUKKzoxMDA1MzAwMDAwMDAwMDEwOTE4QzAwMDAwMDAwMDAwODJBMDAwMDAxNUIKKzoxMDA1NDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAxODAwMEQwMDAwMTEKKzoxMDA1NTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxREUwMDAwMTUKKzoxMDA1NjAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA2ODIwMDAwRTEKKzoxMDA1NzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEJFRTEwMDA1NDgKKzoxMDA1ODAwMDAwMDAwMDE4ODAwMEZGNUYwMDAwMDAwMTA1NjExNDAwRkEKKzoxMDA1OTAwMDAwMDAwMDEwOTE4QTAwMDIwMDAwMDAwOEIwRTEwMDAxOTQKKzoxMDA1QTAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDA2ODIwMDAwOUUKKzoxMDA1QjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEJFRTIwMDA1MDcKKzoxMDA1QzAwMDAwMDAwMDE4ODAwMEZGNTcwMDAwMDAwMTA1NjIxNDAwQzEKKzoxMDA1RDAwMDAwMDAwMDEwOTE4QTAwMDIwMDAwMDAwOEIxNjIwMDAxRDIKKzoxMDA1RTAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMEIxQTBCMDEzQzIKKzoxMDA1RjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMjAwMDAwOTQKKzoxMDA2MDAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwMDEKKzoxMDA2MTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QUQKKzoxMDA2MjAwMDAwMDAwMDE4ODAwMEZGREMwMDAwMDAwODJEODAwMTFDODUKKzoxMDA2MzAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAxODgwMDBGRkU2MEUKKzoxMDA2NDAwMDAwMDAwMDBGNDc2MDAwMDgwMDAwMDAwRjA2MEUwMDAxQzgKKzoxMDA2NTAwMDAwMDAwMDAwMEY1ODAwMDAwMDAwMDAwMDBBNjQwMDAwQzUKKzoxMDA2NjAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGMjMKKzoxMDA2NzAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAxODgwMDAwMDEzNjEKKzoxMDA2ODAwMDAwMDAwMDBGNDc2MDAwMDgwMDAwMDAwQjJGREYwMDAyOTEKKzoxMDA2OTAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwNzEKKzoxMDA2QTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTFDMDMKKzoxMDA2QjAwMDAwMDAwMDBGMDYwRTAwMDEwMDAwMDAxMDAwMUYwMDAwRTcKKzoxMDA2QzAwMDAwMDAwMDAwMEY1ODAwMDAwMDAwMDAxODgwMDBGRkQ0NTgKKzoxMDA2RDAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwQkQKKzoxMDA2RTAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBENjEwMDAwMjQKKzoxMDA2RjAwMDAwMDAwMDAwMDI2MjAwMDAwMDAwMDAwQjJGREYwMDAyN0IKKzoxMDA3MDAwMDAwMDAwMDAwMzEwNDAwMDAwMDAwMDAwMDMwOUEwMDAwRUEKKzoxMDA3MTAwMDAwMDAwMDA5MDU2MDAwMEYwMDAwMDAxMEIxOEEwMDBBMDcKKzoxMDA3MjAwMDAwMDAwMDAwMDU2MzRDMDAwMDAwMDAwODA1MEEwMDEyRUMKKzoxMDA3MzAwMDAwMDAwMDEwQjk2MjE0MDMwMDAwMDAwMDAzMDAwMDAwNzQKKzoxMDA3NDAwMDAwMDAwMDE4ODAwMDAwMDUwMDAwMDAxODgwMDBGRjI0NTEKKzoxMDA3NTAwMDAwMDAwMDEwQjYwNjE0MDMwMDAwMDAwODAzMDYwMDAxQTQKKzoxMDA3NjAwMDAwMDAwMDE4ODAwMEZGMkEwMDAwMDAwMDBDOTYxODAwMEUKKzoxMDA3NzAwMDAwMDAwMDA5MEM5OUZGRkYwMDAwMDAwNENDOTkzNDAwMzAKKzoxMDA3ODAwMDAwMDAwMDEwQjE5NjMyMDIwMDAwMDAwODBGODAwMDAwNDcKKzoxMDA3OTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzI5NTIwMDAxMUIKKzoxMDA3QTAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwODAyMDAwMDBFQUEKKzoxMDA3QjAwMDAwMDAwMDA4MDI4MDAwMUEwMDAwMDAxMEIxQzQwQTAyMDQKKzoxMDA3QzAwMDAwMDAwMDA4MDIwMDAwMDMwMDAwMDAwODIyMDAwMDAxRjEKKzoxMDA3RDAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwNjQKKzoxMDA3RTAwMDAwMDAwMDAwMkEwMDA4MDAwMDAwMDAwODA1MDA1NTU1MjAKKzoxMDA3RjAwMDAwMDAwMDE4ODAwMEZGMTgwMDAwMDAwQjJGREYwMDAyMkYKKzoxMDA4MDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJBMDAwMDAxNDAKKzoxMDA4MTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAxMDkxRDQwMDAwMTcKKzoxMDA4MjAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwREYKKzoxMDA4MzAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxODgwMDBGRkEzQUMKKzoxMDA4NDAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2QjMKKzoxMDA4NTAwMDAwMDAwMDAwMzA4MDAwMDAwMDAwMDAwMDMxMDAwMDAwQjcKKzoxMDA4NjAwMDAwMDAwMDA4MkQ4MDAwMDYwMDAwMDAwQzI5ODAwMDAxMTcKKzoxMDA4NzAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwNEQKKzoxMDA4ODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDEwMUQKKzoxMDA4OTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjAzQjkKKzoxMDA4QTAwMDAwMDAwMDEwOTFBMEIwMDkwMDAwMDAwODJDODAwMTBEOEMKKzoxMDA4QjAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwODUKKzoxMDA4QzAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDBGRjlDMzgKKzoxMDA4RDAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAwOEFDMDAwMDAxQkIKKzoxMDA4RTAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAwMDAzODBCMDAwMzIKKzoxMDA4RjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDA0MDAwNzEKKzoxMDA5MDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QkEKKzoxMDA5MTAwMDAwMDAwMDE4ODAwMEZGN0UwMDAwMDAxODgwMDAwMDMxRjkKKzoxMDA5MjAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwQjJGREYwMDAyMEUKKzoxMDA5MzAwMDAwMDAwMDAwMkMwMDBFMDAwMDAwMDAwODJBMDAwMDA3NDQKKzoxMDA5NDAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRUVENkQKKzoxMDA5NTAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAwQzI5ODAwMDAxNTkKKzoxMDA5NjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDBDRTcwMDA3RDEKKzoxMDA5NzAwMDAwMDAwMDA5MDU2MkZGRkYwMDAwMDAxMEJBNkMxNDA1QkEKKzoxMDA5ODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwMDIxMDAwMDAwM0QKKzoxMDA5OTAwMDAwMDAwMDA4MkEwMDAwMDUwMDAwMDAxMDkxRDQwMDAwQUIKKzoxMDA5QTAwMDAwMDAwMDA4MkM4MDAxMEMwMDAwMDAwODJEMDAwMDA4NDkKKzoxMDA5QjAwMDAwMDAwMDBDMzE2MjAwMTgwMDAwMDAwODJEODAwMDAxQ0EKKzoxMDA5QzAwMDAwMDAwMDE4ODAwMEZGNzIwMDAwMDAxODAwMEQwMDAwRjkKKzoxMDA5RDAwMDAwMDAwMDEwQjFBMEIwMEUwMDAwMDAwQjJGREYwMDAyREQKKzoxMDA5RTAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMjAwMDAwRTAKKzoxMDA5RjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAxODgwMDAwMDE1RDUKKzoxMDBBMDAwMDAwMDAwMDEwMkM2MjAwMDIwMDAwMDAxODgwMDAwMDBDQTIKKzoxMDBBMTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDcwMDAwODgKKzoxMDBBMjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwOUIKKzoxMDBBMzAwMDAwMDAwMDA4MDUwMEZGRkYwMDAwMDAxODgwMDBGRUNGNDYKKzoxMDBBNDAwMDAwMDAwMDA4MkM4MDAxMEQwMDAwMDAwODJEMDAwMDA5QTYKKzoxMDBBNTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3NjQKKzoxMDBBNjAwMDAwMDAwMDE4ODAwMEZGNjkwMDAwMDAwQzI5ODAwMDAxRDAKKzoxMDBBNzAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwNEIKKzoxMDBBODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBBMjEKKzoxMDBBOTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRUMzRjgKKzoxMDBBQTAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAwODJDODAwMTBDRkQKKzoxMDBBQjAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMTM0MEYKKzoxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwNUYwMDAwOTcKKzoxMDBBRDAwMDAwMDAwMDA4MkM4MDAxNDAwMDAwMDAwODJEMDAwMDNDQjAKKzoxMDBBRTAwMDAwMDAwMDA4MkQ4MDAxMjQwMDAwMDAwMDAwMDAwMDAwMkMKKzoxMDBBRjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDgwNDMKKzoxMDBCMDAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTA1RjUKKzoxMDBCMTAwMDAwMDAwMDEwQkVFMjAwMDUwMDAwMDAxODgwMDBGRUFDREUKKzoxMDBCMjAwMDAwMDAwMDAxMDU2MjE0MDAwMDAwMDAxMDkxOEEwMDAyMUMKKzoxMDBCMzAwMDAwMDAwMDA4QjE2MjAwMDEwMDAwMDAxMDkxREUwMDAwMUEKKzoxMDBCNDAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMDkxRDQwMDAwMEIKKzoxMDBCNTAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjM1NjcKKzoxMDBCNjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxMjMKKzoxMDBCNzAwMDAwMDAwMDA4MkEwMDAwMDkwMDAwMDAwODA1MDBBQUFBRDkKKzoxMDBCODAwMDAwMDAwMDE4ODAwMEZFQTYwMDAwMDAxMDkxRDQwMDAwQjQKKzoxMDBCOTAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjJERDkKKzoxMDBCQTAwMDAwMDAwMDEwOTFBMDNDMDIwMDAwMDAxMEIxRTY2MjA3QjYKKzoxMDBCQjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMzEwMDAwQkQKKzoxMDBCQzAwMDAwMDAwMDA5MkNCMTAwN0YwMDAwMDAwODJDRDkwMDAwQjMKKzoxMDBCRDAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTBEMUQKKzoxMDBCRTAwMDAwMDAwMDEwQjFBODAwMDYwMDAwMDAxMDIwNUYwMDAwMDcKKzoxMDBCRjAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwMDJDQTcwMDAwRDYKKzoxMDBDMDAwMDAwMDAwMDA4MkQwMDAwMTAwMDAwMDAwODJEODAwMTA4RTEKKzoxMDBDMTAwMDAwMDAwMDE4ODAwMEZGMjgwMDAwMDAxMEIxQTYwMDEwOUUKKzoxMDBDMjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGMzAwMDA3NDAKKzoxMDBDMzAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwNUYKKzoxMDBDNDAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGQjcKKzoxMDBDNTAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwOTBEMUEwMEZGRjYKKzoxMDBDNjAwMDAwMDAwMDEwMDczMDAwMDMwMDAwMDAwQzBEMUEwMDA4RkYKKzoxMDBDNzAwMDAwMDAwMDBDMEIxNjAwMDgwMDAwMDAwRjRDRTMwMDE4RTkKKzoxMDBDODAwMDAwMDAwMDAwMEM5OTJDMDAwMDAwMDAwNENDOTkzNDAwRjYKKzoxMDBDOTAwMDAwMDAwMDA4MEY4MDAwMDAwMDAwMDAwQzI5ODAwMDAxMDcKKzoxMDBDQTAwMDAwMDAwMDAwMzMzMTAwMDAwMDAwMDAwODIyMDAwMDE2QTAKKzoxMDBDQjAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBDRUQKKzoxMDBDQzAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwMDBGMjAwMDAwNDYKKzoxMDBDRDAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODA1MDA1NTU1QjEKKzoxMDBDRTAwMDAwMDAwMDE4ODAwMEZFN0EwMDAwMDAxMDkxRDQwMDAwN0YKKzoxMDBDRjAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjAxRkEKKzoxMDBEMDAwMDAwMDAwMDBGNDcyMjAwMDgwMDAwMDAwOTA3MEUwMDBGMzYKKzoxMDBEMTAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAwODAyODAwMDAxMjMKKzoxMDBEMjAwMDAwMDAwMDA3MDI4NTFDMDAwMDAwMDAwODgyODUwMDAxMDkKKzoxMDBEMzAwMDAwMDAwMDAwMDI4NTRDMDAwMDAwMDAwNzQyODUxQzAwRjYKKzoxMDBENDAwMDAwMDAwMDAzQzNBQTUyMDAwMDAwMDAwMDAzQjEwRTAwMUYKKzoxMDBENTAwMDAwMDAwMDA3NEIwNzFDMDAwMDAwMDAwRjBGMzAwMDA3QzkKKzoxMDBENjAwMDAwMDAwMDBGMEE5NjAwMDMwMDAwMDAwMDBBOTU1QzAwRDYKKzoxMDBENzAwMDAwMDAwMDAwNEEwMDVBMDAwMDAwMDAwMDBDOTYwQTAwMjMKKzoxMDBEODAwMDAwMDAwMDA5MEM5OUZGRkYwMDAwMDAwODBEMDBGRkZGQTQKKzoxMDBEOTAwMDAwMDAwMDEwQjE5NjMyMDIwMDAwMDAwODBGODAwMDA1MkMKKzoxMDBEQTAwMDAwMDAwMDEwQjFBODAwMDgwMDAwMDAxMDIwNUYwMDAwNDMKKzoxMDBEQjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMjAwMDAwQ0MKKzoxMDBEQzAwMDAwMDAwMDAwMkNBNzAwMDAwMDAwMDAwODJEMDAwMDEwMEIKKzoxMDBERDAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAxODgwMDBGRUVGRDAKKzoxMDBERTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAxMDAwMUYwMDAwMUUKKzoxMDBERjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwM0UKKzoxMDBFMDAwMDAwMDAwMDA4MkEwMDAwMEQwMDAwMDAwODA1MDBBQUFBNDIKKzoxMDBFMTAwMDAwMDAwMDE4ODAwMEZFNTQwMDAwMDAxMDkxRDQwMDAwNzMKKzoxMDBFMjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRURCOTkKKzoxMDBFMzAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxNTAKKzoxMDBFNDAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1QjIKKzowODBFNTAwMDAwMDAwMDE4ODAwMEZFNENCOAorOjA4MEU1ODAwMDAwMDAwMTBCMTgwMDAwNDRECis6MTAwRTYwMDAwMDAwMDAxRjA1MDMwMzAwMDAwMDAwMDgwNTAwMDBGRjRDCis6MTAwRTcwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDAyQTAwMDAwMDJFCis6MTAwRTgwMDAwMDAwMDAxMEIxRDQwMDAwMDAwMDAwMTA5MURFMDAwMDRFCis6MTAwRTkwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTAwMDFGMDAwMEEwCis6MTAwRUEwMDAwMDAwMDAwMDJGODBBQTAwMDAwMDAwMEMyOTgwMDAwMTMzCis6MTAwRUIwMDAwMDAwMDAwODAyNTQwMDBFMDAwMDAwMDAyQzQwMDAwMDVBCis6MTAwRUMwMDAwMDAwMDAwOTI5NTIwMDNGMDAwMDAwMTgwMDA0MDAwMDQzCis6MTAwRUQwMDAwMDAwMDAxODgwMDAwMDEwMDAwMDAwMTg4MDAwMDAxMUMxCis6MTAwRUUwMDAwMDAwMDAxODgwMDAwMDM5MDAwMDAwMTg4MDAwMDBGRDlDCis6MTAwRUYwMDAwMDAwMDAxODgwMDAwMEZDMDAwMDAwMTg4MDAwMDBGQkNCCis6MTAwRjAwMDAwMDAwMDAxODgwMDAwMEZCMDAwMDAwMTg4MDAwMDAwMEI2Cis6MTAwRjEwMDAwMDAwMDAxODgwMDAwMTEzMDAwMDAwMTg4MDAwMDBGNzk2Cis6MTAwRjIwMDAwMDAwMDAxODgwMDAwMDBCMDAwMDAwMTg4MDAwMDExNzZFCis6MTAwRjMwMDAwMDAwMDAxODgwMDAwMTY1MDAwMDAwMTg4MDAwMDA2M0I4Cis6MTAwRjQwMDAwMDAwMDAxODgwMDAwMENFMDAwMDAwMTg4MDAwMDBERUM1Cis6MTAwRjUwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZFNUVCCis6MTAwRjYwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMEMyOTgwMDAwMEEyCis6MTAwRjcwMDAwMDAwMDAxODgwMDBGRkUyMDAwMDAwMDAyQTAwMDAwMENFCis6MTAwRjgwMDAwMDAwMDAxODgwMDBGRkUwMDAwMDAwMTgwMDAyMDAwMEQwCis6MTAwRjkwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQyMUJFCis6MTAwRkEwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMDY4Cis6MTAwRkIwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDAwNjNDCis6MTAwRkMwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTAwRkQwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYxMDAwMDI0Cis6MTAwRkUwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMEQ4Cis6MTAwRkYwMDAwMDAwMDAxMDkxOTYzNDE2MDAwMDAwMTAyMDVGMDAwMEUxCis6MTAxMDAwMDAwMDAwMDAwMDA5RDgwMDAwMDAwMDAwMDAyQzFFMDAwMEI1Cis6MTAxMDEwMDAwMDAwMDAwODJDODAwMTBFMDAwMDAwMDgyRDAwMDAwQUNFCis6MTAxMDIwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTAxMDMwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYyMDAwMEMyCis6MTAxMDQwMDAwMDAwMDAwMDJDMTMwMDAwMDAwMDAwMTgwMDBBMDAwMDNGCis6MTAxMDUwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQwOTE1Cis6MTAxMDYwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMEE3Cis6MTAxMDcwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDA2QTE3Cis6MTAxMDgwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTAxMDkwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDdBMDAwMDRBCis6MTAxMEEwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAyQTAwMDAwMEY0Cis6MTAxMEIwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwMzYyMDAwMDVECis6MTAxMEMwMDAwMDAwMDAxMDIzNDIwMEMxMDAwMDAwMDAwMjYzOEMwMEY5Cis6MTAxMEQwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDgwMjA0MDAxMjg0Cis6MTAxMEUwMDAwMDAwMDAxMEI5MDYwODI3MDAwMDAwMDAwRjU4MDAwMDlCCis6MTAxMEYwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMDkzCis6MTAxMTAwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMDVCCis6MTAxMTEwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQ0M2MDAxMjU4Cis6MTAxMTIwMDAwMDAwMDAxODgwMDBGRkNFMDAwMDAwMDgwRjgwMDAwM0MwCis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDlGMDAwMDAwCis6MTAxMTQwMDAwMDAwMDAwODI3MTEwMDEyMDAwMDAwMDA2NjkwMDAwMDU3Cis6MTAxMTUwMDAwMDAwMDAwOEEzMUIwMDEyMDAwMDAwMTBCMTk4MDAwMzVCCis6MTAxMTYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDgwRjgwMDAwNEI1Cis6MTAxMTcwMDAwMDAwMDAwODIyMDAwMDAzMDAwMDAwMDgyQzgwMDAwQzgyCis6MTAxMTgwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMTAwMDlGMDAwMDZGCis6MTAxMTkwMDAwMDAwMDAwMDI1OTYwMDAwMDAwMDAwMEMyOTgwMDAwMERGCis6MTAxMUEwMDAwMDAwMDAwMDA2NjYwMDAwMDAwMDAwMDA4NjYxMTgwMEQ0Cis6MTAxMUIwMDAwMDAwMDAwOTAyNjAwMDBGMDAwMDAwMEYwMjA0MDAwMjlFCis6MTAxMUMwMDAwMDAwMDAxMEI2MEMwODA1MDAwMDAwMEMxRkJGMDAwMDU2Cis6MTAxMUQwMDAwMDAwMDAxMDI4NjYwMDAzMDAwMDAwMDgwNzhGMDAwMUNGCis6MTAxMUUwMDAwMDAwMDAwQzMzNjYwMDEwMDAwMDAwMDAzMjE0MDAwMDA0Cis6MTAxMUYwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDU3MzY2MkMwMDFFCis6MTAxMjAwMDAwMDAwMDAwMDMxRTMyRTAwMDAwMDAwMDgyRDgwMDAxMEQ3Cis6MTAxMjEwMDAwMDAwMDAxODgwMDBGRjhFMDAwMDAwMDAyMzAwMDAwMDg2Cis6MTAxMjIwMDAwMDAwMDAwOTI1RTZGRkZGMDAwMDAwMDgyMjAwMDAwQjc3Cis6MTAxMjMwMDAwMDAwMDAwQzY5NTIwMDAwMDAwMDAwMEMyOTgwMDAwMDMyCis6MTAxMjQwMDAwMDAwMDAxMDI4NjYwMDc1MDAwMDAwMTg4MDAwRkY4NzZECis6MTAxMjUwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMDgyQzgwMDA0MDcwCis6MTAxMjYwMDAwMDAwMDAwODJEMDAwMDIwMDAwMDAwMDgyRDgwMDExQzU3Cis6MTAxMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMEVGCis6MTAxMjgwMDAwMDAwMDAwRjQyRUEwMDEwMDAwMDAwMTAwMDRGMDAwNEIwCis6MTAxMjkwMDAwMDAwMDAxMEI3NDY5MjAwMDAwMDAwMDgwMjQ5MDAxMjRBCis6MTAxMkEwMDAwMDAwMDAxMEI1ODQwQTAwMDAwMDAwMDAwRDYxMDAwMDdECis6MTAxMkIwMDAwMDAwMDAxMEJBNjYzNDU3MDAwMDAwMDg4MzA1MDAxMkQxCis6MTAxMkMwMDAwMDAwMDAxMDAwNEYwMDAyMDAwMDAwMDAwMzQ5MDAwMDcxCis6MTAxMkQwMDAwMDAwMDAwMTgzMDY4QzAwMDAwMDAwMDA4M0M2MEMwMEEzCis6MTAxMkUwMDAwMDAwMDAxMEIxODcwMDExMDAwMDAwMDAwQjZFMDAwMDJDCis6MTAxMkYwMDAwMDAwMDAxMEJFRTkwMDA1MDAwMDAwMTg4MDAwRkY2RTJECis6MTAxMzAwMDAwMDAwMDAwMTA1NjkxNDAwMDAwMDAwMTA5MThBMDAwMjJECis6MTAxMzEwMDAwMDAwMDAwOEI0RTkwMDAxMDAwMDAwMTBCMUU5MkM0QTA3Cis6MTAxMzIwMDAwMDAwMDAwMDg2NjkyQzAwMDAwMDAwMDAwMjAwMDAwMEEwCis6MTAxMzMwMDAwMDAwMDAwOTAyRUFGRkZGMDAwMDAwMTAwMDBDMDAwMjlDCis6MTAxMzQwMDAwMDAwMDAwMDAyMDQwQTAwMDAwMDAwMEY0NjBDMDAwMTJCCis6MTAxMzUwMDAwMDAwMDAwRjAyODUwMDAxMDAwMDAwMTA5MThDMDFGQ0NDCis6MTAxMzYwMDAwMDAwMDAxMEI3MDQwRTQxMDAwMDAwMDAwRjQwMDAwMDE0Cis6MTAxMzcwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwQTY0MDAwMDkxCis6MTAxMzgwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRkY2Cis6MTAxMzkwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwQjgwMDAwMEI2Cis6MTAxM0EwMDAwMDAwMDAwODBDODYwMDEyMDAwMDAwMDgwRjgwMDAwM0Y3Cis6MTAxM0IwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMTAwMDlGMDAwMEY3Cis6MTAxM0MwMDAwMDAwMDAwODI3MTEwMDEyMDAwMDAwMDA2NjkwMDAwMEQ1Cis6MTAxM0QwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDAyMzA2MDAwMDc4Cis6MTAxM0UwMDAwMDAwMDAxMEIxOTgwMDA1MDAwMDAwMTAwMDFGMDAwMDcwCis6MTAxM0YwMDAwMDAwMDAwODBGODAwMDA0MDAwMDAwMDAwMDAwMDAwMDUyCis6MTAxNDAwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAzMjE0MDAwMDY3Cis6MTAxNDEwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDAzMUUzMkUwMEMzCis6MTAxNDIwMDAwMDAwMDAwNTczNjYyQzAwMDAwMDAwMDAyNTk2MDAwMEY3Cis6MTAxNDMwMDAwMDAwMDAxMEIxODcwMDE2MDAwMDAwMEMyOTgwMDAwMDk5Cis6MTAxNDQwMDAwMDAwMDAwRjBGNkIwMDA3MDAwMDAwMDAwRDY5MDAwMDk2Cis6MTAxNDUwMDAwMDAwMDAwMDBBNkMwMDAwMDAwMDAwMDAwQUVEMDAwMDFGCis6MTAxNDYwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDAwQjgwMDAwMDc4Cis6MTAxNDcwMDAwMDAwMDAwMDBDODcwMDAwMDAwMDAwMDgwRjgwMDAwMzNGCis6MTAxNDgwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEM2OTUyMDAwMTExCis6MTAxNDkwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAyMkM1OEMwMEFBCis6MTAxNEEwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMDAwMEM2Cis6MTAxNEIwMDAwMDAwMDAwMDI2OTAwMDAwMDAwMDAwMTBCODE3MEUwMzg2Cis6MTAxNEMwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkZGNkRBCis6MTAxNEQwMDAwMDAwMDAxMEIxOTgwMDAyMDAwMDAwMDgwRjgwMDAwNDE2Cis6MTAxNEUwMDAwMDAwMDAwODIyMDAwMDFBMDAwMDAwMDgyQzgwMDAwQ0Y4Cis6MTAxNEYwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAxMEU2Cis6MTAxNTAwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAwRDZFMDAwMDMxCis6MTAxNTEwMDAwMDAwMDAwM0U3Q0YzNDAwMDAwMDAwMEMyOTgwMDAwMDI5Cis6MTAxNTIwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTBCMTg3MDAwN0VECis6MTAxNTMwMDAwMDAwMDAwMDM2MTQwMDAwMDAwMDAwMDAzNjk1MDAwMDk2Cis6MTAxNTQwMDAwMDAwMDAwMDM3MTYwMDAwMDAwMDAwMDgyQzgwMDA1MDRBCis6MTAxNTUwMDAwMDAwMDAwODJEMDAwMDMwMDAwMDAwMDgyRDgwMDAwQzY1Cis6MTAxNTYwMDAwMDAwMDAxODgwMDBGRjI0MDAwMDAwMDAyNjQ2MDAwMDU0Cis6MTAxNTcwMDAwMDAwMDAwMDIzMDAwMDAwMDAwMDAwMDkyNUU2RkZGRjM2Cis6MTAxNTgwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDNFN0NGMkMwMEZECis6MTAxNTkwMDAwMDAwMDAwODIyMDAwMDFCMDAwMDAwMEM2OTUyMDAwMDNGCis6MTAxNUEwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkYxQkQ0Cis6MTAxNUIwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwODY2MDAwNTdFCis6MTAxNUMwMDAwMDAwMDAwMDA2NjYwMDAwMDAwMDAwMDA4NjYxMTgwMEIwCis6MTAxNUQwMDAwMDAwMDAwOTAyNjAwMEYwMDAwMDAwMTBCNjBDMDgwMkQ0Cis6MTAxNUUwMDAwMDAwMDAxODgwMDBGRjE0MDAwMDAwMDAwNjgyMDAwMEM4Cis6MTAxNUYwMDAwMDAwMDAxMEIxOEYwMDAwMDAwMDAwMDg4NzhGMDAwMTdDCis6MTAxNjAwMDAwMDAwMDAwQzczNjYwMDEwMDAwMDAwMDgyQzgwMDAxODE5Cis6MTAxNjEwMDAwMDAwMDAwODJEMDAwMDE4MDAwMDAwMDgyRDgwMDAwMkM2Cis6MTAxNjIwMDAwMDAwMDAwQzVGQkYwMDAwMDAwMDAwMTA5MURFMDAwMDExCis6MTAxNjMwMDAwMDAwMDAxODAwMEQwMDAwMDAwMDAwMDAyQTAwMDAwMDVCCis6MTAxNjQwMDAwMDAwMDAxMDI4NjYwMUY1MDAwMDAwMDgyQzgwMDAwMzRGCis6MTAxNjUwMDAwMDAwMDAwODJEMDAwMDAzMDAwMDAwMDkzMDYwRkZGMENBCis6MTAxNjYwMDAwMDAwMDAwODJEODAwMDAxMDAwMDAwMEMyOTgwMDAwMDBGCis6MTAxNjcwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAxQTFECis6MTAxNjgwMDAwMDAwMDAwODJEMDAwMDFBMDAwMDAwMDU3MzY2MDAwMDJECis6MTAxNjkwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMDAzMTgwMDAwMEUyCis6MTAxNkEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAwQ0ZCCis6MTAxNkIwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAwNDMwCis6MTAxNkMwMDAwMDAwMDAxODgwMDBGRUY4MDAwMDAwMTgwMDAyMDAwMDcyCis6MTAxNkQwMDAwMDAwMDAxODgwMDBGRUY2MDAwMDAwMDAyQTAwMDAwMDU0Cis6MTAxNkUwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAwRjAwODAwMDNDCis6MTAxNkYwMDAwMDAwMDAwODBGODAwMDA3MDAwMDAwMTg4MDAwMDAxQTlBCis6MTAxNzAwMDAwMDAwMDAwMDI4MEEwMDAwMDAwMDAwMDAwNTAyMDAwMEEwCis6MTAxNzEwMDAwMDAwMDAwODIyMDAwMDA5MDAwMDAwMDAyOTAwMDAwMDZECis6MTAxNzIwMDAwMDAwMDAwRjY1NjgwMDEwMDAwMDAwMDNGNjZDOTQwMEQ0Cis6MTAxNzMwMDAwMDAwMDAxMEI5NzJBMDA0MDAwMDAwMEM3M0U3MDAxOTRCCis6MTAxNzQwMDAwMDAwMDAwQzIxNDIwMDA0MDAwMDAwMDAzQ0Y4MDAwMEYyCis6MTAxNzUwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDUxCis6MTAxNzYwMDAwMDAwMDAwODIyMDAwMDA4MDAwMDAwMEM2MTQyMDAwNDk0Cis6MTAxNzcwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMDQwCis6MTAxNzgwMDAwMDAwMDAwQzYxNDIwMDAwMDAwMDAwMTAwMTQyMDAwMzU0Cis6MTAxNzkwMDAwMDAwMDAwQzMzRTcwMDFEMDAwMDAwMEM2MTQyMDAwMjU1Cis6MTAxN0EwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAyQTAwMDAwMEVECis6MTAxN0IwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEYwRjQ3MDAwNzhFCis6MTAxN0MwMDAwMDAwMDAwODBGODAwMDA4MDAwMDAwMEMyOTgwMDAwMEM1Cis6MTAxN0QwMDAwMDAwMDAxMDAwOUYwMDAwMDAwMDAwMTg4MDAwRkVENUVGCis6MTAxN0UwMDAwMDAwMDAwMDMzNTEwMDAwMDAwMDAwMDAyQTAwMDAwMDRCCis6MTAxN0YwMDAwMDAwMDAxMEIxQzYwMDIzMDAwMDAwMEYwRjUwMDAwN0NBCis6MTAxODAwMDAwMDAwMDAwMDBBNjAwMDAwMDAwMDAwMDAwQUUxMDAwMDgzCis6MTAxODEwMDAwMDAwMDAwRjRCNjIwMDA4MDAwMDAwMDkwQjE2MDBGRkRCCis6MTAxODIwMDAwMDAwMDAwRjRDNjIwMDEwMDAwMDAwMDAwRDYyMDAwMDdDCis6MTAxODMwMDAwMDAwMDAwOTBEMUEwMEZGMDAwMDAwMTAwNzUwMDAwMzBGCis6MTAxODQwMDAwMDAwMDAwQzBEMUEwMDA4MDAwMDAwMEMwQjE2MDAwODI4Cis6MTAxODUwMDAwMDAwMDAwMDBDQzYwMDAwMDAwMDAwMDAwQjgwMDAwMDJCCis6MTAxODYwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMDgwRjgwMDAwMzQwCis6MTAxODcwMDAwMDAwMDAxMDA2QzIwMDA0MDAwMDAwMEMyOTAwMDAwMjU1Cis6MTAxODgwMDAwMDAwMDAxMDI2NDIwMDAyMDAwMDAwMEMyOTUyMDAwMzU0Cis6MTAxODkwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMTAwMDlGMDAwMDZFCis6MTAxOEEwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMUEwMEE4Cis6MTAxOEIwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMEMyOTUyMDAwMEFCCis6MTAxOEMwMDAwMDAwMDAxMEIxOTczMjA5MDAwMDAwMEMyOTgwMDAwMEQwCis6MTAxOEQwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMTAyMDUzMDAwMEU3Cis6MTAxOEUwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDAyMkM1OEMwMEZCCis6MTAxOEYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDgwRjgwMDAwMzFGCis6MTAxOTAwMDAwMDAwMDAxODgwMDBGRkYzMDAwMDAwMTBCMUM4MDAxM0IxCis6MTAxOTEwMDAwMDAwMDAxMEIxQzYwMDAzMDAwMDAwMEMyOTgwMDAwMDg4Cis6MTAxOTIwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMEFECis6MTAxOTMwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMTAwNkMyMDAwMjQzCis6MTAxOTQwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMDAyMkM1OEMwMDlCCis6MTAxOTUwMDAwMDAwMDAwMDI3NjUwMDAwMDAwMDAwMDAyNkU0MDAwMEYxCis6MTAxOTYwMDAwMDAwMDAwODIyMDAwMDE2MDAwMDAwMTBCMUM2MDAwM0FECis6MTAxOTcwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMTBCMTgwMDAwNUI2Cis6MTAxOTgwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMEMyOTgwMDAwMDM3Cis6MTAxOTkwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTg4MDAwMDAxMjI4Cis6MTAxOUEwMDAwMDAwMDAwODIyMDAwMDE2MDAwMDAwMEMyOTgwMDAwMDQyCis6MTAxOUIwMDAwMDAwMDAwMDMwMTQwMDAwMDAwMDAwMDAzMDk1MDAwMDFFCis6MTAxOUMwMDAwMDAwMDAxMDA3NTAwMDAzMDAwMDAwMDkwQjE2MDBGRjg0Cis6MTAxOUQwMDAwMDAwMDAwOTBEMUEwMEZGMDAwMDAwMEYzMTE2MDAwODdBCis6MTAxOUUwMDAwMDAwMDAwMDMxNjIzNDAwMDAwMDAwMDNGMTYyMzAwMEFBCis6MTAxOUYwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzUxMDAwMERCCis6MTAxQTAwMDAwMDAwMDAwOTJDRDEwMDdGMDAwMDAwMDgyQ0Q5MDAwMDQ0Cis6MTAxQTEwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMDgyRDgwMDAwQ0QwCis6MTAxQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDM3Cis6MTAxQTMwMDAwMDAwMDAxMDA1QzIwMDA0MDAwMDAwMDgwRjgwMDAwNzJECis6MTAxQTQwMDAwMDAwMDAwMDMzMDAwMDAwMDAwMDAwMTAwMDlGMDAwMEI0Cis6MTAxQTUwMDAwMDAwMDAxODgwMDBGRTg2MDAwMDAwMDAyQTAwMDAwMDQwCis6MTAxQTYwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTBCMUM2MDAyRDRECis6MTAxQTcwMDAwMDAwMDAwRjQ3NDIwMDA4MDAwMDAwMDkwNzBFMDAwRjk5Cis6MTAxQTgwMDAwMDAwMDAwODA3MEUwMDA4MDAwMDAwMTAwMDFGMDAwMDAyCis6MTAxQTkwMDAwMDAwMDAwODA5MDAwMDAxMDAwMDAwMDcwOTEyMUMwMEY2Cis6MTAxQUEwMDAwMDAwMDAwM0NCQ0E5MjAwMDAwMDAwMDAwQjk3QTIwMEM4Cis6MTAxQUIwMDAwMDAwMDAwNzQyMTcxQzAwMDAwMDAwMDAwQjA0MDAwMDlCCis6MTAxQUMwMDAwMDAwMDAwRjBBODQwMDAzMDAwMDAwMDAwQTk1OUMwMDNCCis6MTAxQUQwMDAwMDAwMDAwMDRBMDA5QTAwMDAwMDAwMDg4MjEyMDAwMTg1Cis6MTAxQUUwMDAwMDAwMDAwMTBDMTcwODAwMDAwMDAwMDAwQzk3OEMwMDlCCis6MTAxQUYwMDAwMDAwMDAwMDAyMTgwMDAwMDAwMDAwMDgwRDAwRkZGRkI5Cis6MTAxQjAwMDAwMDAwMDAwODBGODAwMDA2MDAwMDAwMEMyOTAwMDAwMDAzCis6MTAxQjEwMDAwMDAwMDAxMDA2QzIwMDA0MDAwMDAwMEMyOTUyMDAwMjYwCis6MTAxQjIwMDAwMDAwMDAxMDI2NDIwMDAyMDAwMDAwMEMyOTUyMDAwM0IxCis6MTAxQjMwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMTAwMDlGMDAwMENCCis6MTAxQjQwMDAwMDAwMDAxMEIxOTczMjBDMDAwMDAwMDAyMzFCMDAwMEMxCis6MTAxQjUwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMDRGCis6MTAxQjYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwMjE4MDAwMEE2Cis6MTAxQjcwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMzU4Cis6MTAxQjgwMDAwMDAwMDAwMDIyQzUzNjAwMDAwMDAwMTAwMDFGMDAwMDA5Cis6MTAxQjkwMDAwMDAwMDAwODBGODAwMDA2MDAwMDAwMTg4MDAwRkZGNDFECis6MTAxQkEwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMDgwMEI3Cis6MTAxQkIwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMTBCMUM4MDAwQjlCCis6MTAxQkMwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMERECis6MTAxQkQwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMEMyOTUyMDAwM0Y0Cis6MTAxQkUwMDAwMDAwMDAxMDA2QzIwMDAyMDAwMDAwMEMyOTUyMDAwMjkyCis6MTAxQkYwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyNzY1MDAwMEU2Cis6MTAxQzAwMDAwMDAwMDAwMDI2RTQwMDAwMDAwMDAwMDAyMzQ4MDAwMDVGCis6MTAxQzEwMDAwMDAwMDAwODIyMDAwMDE3MDAwMDAwMEMyOTgwMDAwMENFCis6MTAxQzIwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMTg4MDAwRkU0QkE0Cis6MDAwMDAwMDFGRgorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2RiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmozLmZ3LmloZXgKQEAgLTAsMCArMSw0OTggQEAKKzoxMDAwMDAwMDAwMDAwMDAwMDAwMDBFNzgwMDAwMDA1ODAwMDAwMDA5MDkKKzoxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDAwMzAwMDAwMDAwRkE4MDAwMDBFRDAwMDAwMDAwNTAwMDAwMDAwMjYKKzoxMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzowODAwNTAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjA4MDA1ODAwMDAwMDAwMTBCMTgwMDAwNjU5Cis6MTAwMDYwMDAwMDAwMDAxRjAzMDMwMzAwMDAwMDAwMDgwNTAwRkZGRjVECis6MTAwMDcwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDgwNTAwMDBGRjVBCis6MTAwMDgwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDhBQzAwMDAwMUExCis6MTAwMDkwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMEMyRjgwMDAwMTlGCis6MTAwMEEwMDAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAyQjgwMDAwMDdBCis6MTAwMEIwMDAwMDAwMDAxMDkxRTAwMDAyMDAwMDAwMDhBQzAwMDAwMTA4Cis6MTAwMEMwMDAwMDAwMDAxMDIwM0YwMDZCMDAwMDAwMTAyMTNGMDAwM0UzCis6MTAwMEQwMDAwMDAwMDAxMDIwQkYwMDNBMDAwMDAwMTg4MDAwRkZGRDYzCis6MTAwMEUwMDAwMDAwMDAxMEIxQjhCMDE1MDAwMDAwMEIyRkRGMDAwMkI3Cis6MTAwMEYwMDAwMDAwMDAwMDAzRDgwMDAwMDAwMDAwMDAyQzM4MDAwMEMxCis6MTAwMTAwMDAwMDAwMDAwODJDODAwMDAwMDAwMDAwMDgyRDAwMDAwMDA2Cis6MTAwMTEwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgwNjAwNTU1NUIyCis6MTAwMTIwMDAwMDAwMDAxODgwMDAwMDhGMDAwMDAwMDgyRDgwMDExQ0Q2Cis6MTAwMTMwMDAwMDAwMDAwODAyMDAwMDAxMDAwMDAwMTA5MURFMDAwMDM1Cis6MTAwMTQwMDAwMDAwMDAwRjQyRTAwMDFDMDAwMDAwMTA5MTg0MEExNjFECis6MTAwMTUwMDAwMDAwMDAxODgwMDAwMDk2MDAwMDAwMEMyOTgwMDAwMkJBCis6MTAwMTYwMDAwMDAwMDAwQzFGODAwMDAyMDAwMDAwMDAyQURGMDAwMEQ5Cis6MTAwMTcwMDAwMDAwMDAwODJBMDAwMDBGMDAwMDAwMDAwNTAwMDAwMDM5Cis6MTAwMTgwMDAwMDAwMDAxODgwMDBGRkU2MDAwMDAwMDgwMjAwMDAwMUU3Cis6MTAwMTkwMDAwMDAwMDAwRjQyRTAwMDFDMDAwMDAwMTA5MTg0MEExOENCCis6MTAwMUEwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDAwNjVBCis6MTAwMUIwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyRDgwMDEwNjBFCis6MTAwMUMwMDAwMDAwMDAxODgwMDAwMDg1MDAwMDAwMTg4MDAwRkZGMThBCis6MTAwMUQwMDAwMDAwMDAwOEIxMDAwMDAxMDAwMDAwMDgyQzgwMDEwQ0E0Cis6MTAwMUUwMDAwMDAwMDAwODJEMDAwMDA4MDAwMDAwMDgyRDgwMDAwMTFDCis6MTAwMUYwMDAwMDAwMDAxODgwMDAwMDdGMDAwMDAwMEIyRkRGMDAwMkNECis6MTAwMjAwMDAwMDAwMDAwQzFGODAwMDAyMDAwMDAwMDAyQzA3MDAwMDBFCis6MTAwMjEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgwNTAwNTU1NUE4Cis6MTAwMjIwMDAwMDAwMDAxODgwMDBGRkQyMDAwMDAwMEIyRkRGMDAwMjRBCis6MTAwMjMwMDAwMDAwMDAwQzFGODAwMDAwMDAwMDAwMDAyQzA3MDAwMEUwCis6MTAwMjQwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgwNTAwNTU1NTc4Cis6MTAwMjUwMDAwMDAwMDAxODgwMDBGRkNDMDAwMDAwMEMxRjgwMDAwMjhFCis6MTAwMjYwMDAwMDAwMDAwODA1MDA1NTU1MDAwMDAwMTg4MDAwRkZDOTc3Cis6MTAwMjcwMDAwMDAwMDAwQzI5ODAwMDAyMDAwMDAwMEMxRjgwMDAwMjFBCis6MTAwMjgwMDAwMDAwMDAwMDJBREYwMDAwMDAwMDAwMDgyQTAwMDAwNTJFCis6MTAwMjkwMDAwMDAwMDAwODA1MDA1NTU1MDAwMDAwMTg4MDAwRkZDMzRECis6MTAwMkEwMDAwMDAwMDAwODAyMjQwMDRBMDAwMDAwMTgwMDA0MDAwMEJBCis6MTAwMkIwMDAwMDAwMDAxODgwMDAwMDFDMDAwMDAwMTg4MDAwMDAxRUQ0Cis6MTAwMkMwMDAwMDAwMDAxODgwMDAwMDc4MDAwMDAwMTg4MDAwMDBDQUJDCis6MTAwMkQwMDAwMDAwMDAxODgwMDAwMEM5MDAwMDAwMTg4MDAwMDAwMDI1Cis6MTAwMkUwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMERFCis6MTAwMkYwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMENFCis6MTAwMzAwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMEJECis6MTAwMzEwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDExNTk3Cis6MTAwMzIwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDAwMDlECis6MTAwMzMwMDAwMDAwMDAxODgwMDAwMDE1MDAwMDAwMTg4MDAwMDAxQjVECis6MTAwMzQwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDBFMDlECis6MTAwMzUwMDAwMDAwMDAxODgwMDAwMDJGMDAwMDAwMTg4MDAwMDExNTI4Cis6MTAwMzYwMDAwMDAwMDAxODgwMDAwMTQwMDAwMDAwMTg4MDAwMDEwQjEwCis6MTAwMzcwMDAwMDAwMDAxODgwMDAwMTY0MDAwMDAwMTg4MDAwMDA2MTg3Cis6MTAwMzgwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDA5REEwCis6MTAwMzkwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMDAwNTAwMDAwMEFDCis6MTAwM0EwMDAwMDAwMDAxODgwMDBGRkEyMDAwMDAwMTA5MUQ0MDAwMDlGCis6MTAwM0IwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMURCCis6MTAwM0MwMDAwMDAwMDAwODJBMDAwMDAyMDAwMDAwMDAwNTAwMDAwMEY0Cis6MTAwM0QwMDAwMDAwMDAxODgwMDBGRjlDMDAwMDAwMTA5MUQ0MDAwMDc1Cis6MTAwM0UwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUFCCis6MTAwM0YwMDAwMDAwMDAwMDI5NDIwMDAwMDAwMDAwMDgyQTAwMDAwMjVFCis6MTAwNDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwMTg4MDAwRkY5NUJCCis6MTAwNDEwMDAwMDAwMDAxODgwMDBGRjk0MDAwMDAwMTBCMUJDQjAwQTdBCis6MTAwNDIwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAwM0Q4MDAwMEQ2Cis6MTAwNDMwMDAwMDAwMDAwMDJDM0MwMDAwMDAwMDAwMTA5MUQ0MDAwMERGCis6MTAwNDQwMDAwMDAwMDAwODA2MDA1NTU1MDAwMDAwMTg4MDAwMDAyQTMyCis6MTAwNDUwMDAwMDAwMDAxODgwMDAwMEQ5MDAwMDAwMTAyQzYyMDFCQUQyCis6MTAwNDYwMDAwMDAwMDAxODgwMDAwMDA2MDAwMDAwMDgyQzgwMDEwRDJDCis6MTAwNDcwMDAwMDAwMDAwODJEMDAwMDA5MDAwMDAwMTA5MUQ0MDAwMEM5Cis6MTAwNDgwMDAwMDAwMDAwODJEODAwMTA3MDAwMDAwMTg4MDAwMDAzN0UwCis6MTAwNDkwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEMxRjgwMDAwMEZDCis6MTAwNEEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAyQURGMDAwMEM0Cis6MTAwNEIwMDAwMDAwMDAwODJBMDAwMDA2MDAwMDAwMDgwNTAwNTU1NTRECis6MTAwNEMwMDAwMDAwMDAxODgwMDBGRjdFMDAwMDAwMTA5MUQ0MDAwMEEyCis6MTAwNEQwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUJBCis6MTAwNEUwMDAwMDAwMDAwODJBMDAwMDBCMDAwMDAwMDAwNTAwMDAwMENBCis6MTAwNEYwMDAwMDAwMDAxODgwMDBGRjc4MDAwMDAwMDAwMjAyMDAwMEU5Cis6MTAwNTAwMDAwMDAwMDAwMDAyOUEwMDAwMDAwMDAwMDAwNjBDMkMwMDExCis6MTAwNTEwMDAwMDAwMDAwNEM2MEMzNDAwMDAwMDAwMTAwMDFGMDAwMEEyCis6MTAwNTIwMDAwMDAwMDAxMEIxOTYxODBDMDAwMDAwMDgwNjk2MDAwNEE4Cis6MTAwNTMwMDAwMDAwMDAwOTA2OERGRkZDMDAwMDAwMDRDRDA1MUEwMDM0Cis6MTAwNTQwMDAwMDAwMDAwNENDOUExODAwMDAwMDAwMTAyMEQ3MDAwMDIyCis6MTAwNTUwMDAwMDAwMDAwQzJCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAyMEQ3MDAwMDg0Cis6MTAwNTcwMDAwMDAwMDAwODBGODAwMDAxMDAwMDAwMTBCMTgwMDFGNEFECis6MTAwNTgwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QjU2MDAwMDZGCis6MTAwNTkwMDAwMDAwMDAxODAwMDQwMDAwMDAwMDAwMDAwNjgyMDAwMEI3Cis6MTAwNUEwMDAwMDAwMDAxMEIxOEEwMDA4MDAwMDAwMTBCMThDMTQwNzkwCis6MTAwNUIwMDAwMDAwMDAwQjA1MEFGRkZGMDAwMDAwMTBCMThBMDAwM0Q1Cis6MTAwNUMwMDAwMDAwMDAwMDg2MEExODAwMDAwMDAwMTA5MThDMDAwMDU2Cis6MTAwNUQwMDAwMDAwMDAwODJBMDAwMDAxMDAwMDAwMTA5MUQ0MDAwMDczCis6MTAwNUUwMDAwMDAwMDAxODAwMEQwMDAwMDAwMDAwMDAwNTAyMDAwMERGCis6MTAwNUYwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTgwMDBBMDAwMDVBCis6MTAwNjAwMDAwMDAwMDAwMDA2ODIwMDAwMDAwMDAwMTA5MURFMDAwMEUzCis6MTAwNjEwMDAwMDAwMDAxMEJFRTEwMDA1MDAwMDAwMTg4MDAwRkY0QzQzCis6MTAwNjIwMDAwMDAwMDAwMTA1NjExNDAwMDAwMDAwMTA5MThBMDAwMjIyCis6MTAwNjMwMDAwMDAwMDAwOEIwRTEwMDAxMDAwMDAwMTgwMDBEMDAwMEZCCis6MTAwNjQwMDAwMDAwMDAwMDA2ODIwMDAwMDAwMDAwMTA5MURFMDAwMEEzCis6MTAwNjUwMDAwMDAwMDAxMEJFRTIwMDA1MDAwMDAwMTg4MDAwRkY0NDBBCis6MTAwNjYwMDAwMDAwMDAwMTA1NjIxNDAwMDAwMDAwMTA5MThBMDAwMkUxCis6MTAwNjcwMDAwMDAwMDAwOEIxNjIwMDAxMDAwMDAwMTgwMDBEMDAwMDM5Cis6MTAwNjgwMDAwMDAwMDAxMEIxQTBCMDEzMDAwMDAwMEIyRkRGMDAwMjJCCis6MTAwNjkwMDAwMDAwMDAwMDJDMjAwMDAwMDAwMDAwMDgyQzgwMDAwMDVBCis6MTAwNkEwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMTA5MUQ0MDAwMEEwCis6MTAwNkIwMDAwMDAwMDAwODA2MDA1NTU1MDAwMDAwMTg4MDAwRkZEQzBGCis6MTAwNkMwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMTAwMDFGMDAwMDI5Cis6MTAwNkQwMDAwMDAwMDAxODgwMDBGRkU2MDAwMDAwMEY0NzYwMDAwOERGCis6MTAwNkUwMDAwMDAwMDAwRjA2MEUwMDAxMDAwMDAwMDAwRjU4MDAwMDdGCis6MTAwNkYwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMDlECis6MTAwNzAwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwRDYxMDAwMDAzCis6MTAwNzEwMDAwMDAwMDAxODgwMDAwMDEzMDAwMDAwMEY0NzYwMDAwODcwCis6MTAwNzIwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDgyQzgwMDAwMEZBCis6MTAwNzMwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMTA5MUQ0MDAwMDBGCis6MTAwNzQwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMEYwNjBFMDAwMUIzCis6MTAwNzUwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMDAwRjU4MDAwMDAzCis6MTAwNzYwMDAwMDAwMDAxODgwMDBGRkQ0MDAwMDAwMDAwQTY0MDAwMEIwCis6MTAwNzcwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRjEyCis6MTAwNzgwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwMjYyMDAwMDk3Cis6MTAwNzkwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAzMTA0MDAwMDA5Cis6MTAwN0EwMDAwMDAwMDAwMDMwOUEwMDAwMDAwMDAwMDkwNTYwMDAwRjAyCis6MTAwN0IwMDAwMDAwMDAxMEIxOEEwMDBBMDAwMDAwMDAwNTYzNEMwMDMwCis6MTAwN0MwMDAwMDAwMDAwODA1MEEwMDEyMDAwMDAwMTBCOTYyMTQwM0JFCis6MTAwN0QwMDAwMDAwMDAwMDAzMDAwMDAwMDAwMDAwMTg4MDAwMDAwNTc5Cis6MTAwN0UwMDAwMDAwMDAxODgwMDBGRjExMDAwMDAwMTBCNjA2MTQwMzdFCis6MTAwN0YwMDAwMDAwMDAwODAzMDYwMDAxMDAwMDAwMTg4MDAwRkYxNzM5Cis6MTAwODAwMDAwMDAwMDAxODgwMDBGRjlGMDAwMDAwMEMyOTgwMDAwMUZDCis6MTAwODEwMDAwMDAwMDAwQzI5NTIwMDAxMDAwMDAwMEMyOTUyMDAwMEM5Cis6MTAwODIwMDAwMDAwMDAwODAyMDAwMDBFMDAwMDAwMDgwMjgwMDAxQTBDCis6MTAwODMwMDAwMDAwMDAxMEIxQzQwQTAyMDAwMDAwMDgwMjAwMDAwMzFBCis6MTAwODQwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMEMxRjgwMDAwMUQxCis6MTAwODUwMDAwMDAwMDAwMDJBREYwMDAwMDAwMDAwMDAyQTAwMDgwMDVECis6MTAwODYwMDAwMDAwMDAwODA1MDA1NTU1MDAwMDAwMTg4MDAwRkYwOTMxCis6MTAwODcwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMTA5MUQ0MDAwMEU4Cis6MTAwODgwMDAwMDAwMDAwODJBMDAwMDAxMDAwMDAwMDAyQzIwMDAwMEU5Cis6MTAwODkwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyQzgwMDAwMDJGCis6MTAwOEEwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMDgyRDgwMDExQzQxCis6MTAwOEIwMDAwMDAwMDAxODgwMDBGRkE3MDAwMDAwMDgyQzgwMDAwNjQwCis6MTAwOEMwMDAwMDAwMDAwODJEMDAwMDA2MDAwMDAwMDAzMDgwMDAwMDNECis6MTAwOEQwMDAwMDAwMDAwMDMxMDAwMDAwMDAwMDAwMDgyRDgwMDAwNjJDCis6MTAwOEUwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUE2Cis6MTAwOEYwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAyQURGMDAwMDcwCis6MTAwOTAwMDAwMDAwMDAwODJBMDAwMDEwMDAwMDAwMDAwNTAwMDAwMEEwCis6MTAwOTEwMDAwMDAwMDAxODgwMDBGRUY0MDAwMDAwMTA5MUEwQjAwOTUzCis6MTAwOTIwMDAwMDAwMDAwODJDODAwMTBEMDAwMDAwMDgyRDAwMDAwOUM3Cis6MTAwOTMwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyRDgwMDEwNzg1Cis6MTAwOTQwMDAwMDAwMDAxODgwMDBGRkEwMDAwMDAwMTg4MDAwMDAxMEM4Cis6MTAwOTUwMDAwMDAwMDAwOEFDMDAwMDAxMDAwMDAwMTg4MDAwMDAwQjNGCis6MTAwOTYwMDAwMDAwMDAwMDAzODBCMDAwMDAwMDAwMEIyRkRGMDAwMjM5Cis6MTAwOTcwMDAwMDAwMDAwMDJDMDA0MDAwMDAwMDAwMTA5MUQ0MDAwMDk2Cis6MTAwOTgwMDAwMDAwMDAwODA2MDA1NTU1MDAwMDAwMTg4MDAwRkY4Mjk2Cis6MTAwOTkwMDAwMDAwMDAxODgwMDAwMDMxMDAwMDAwMTg4MDAwMDAwNkYwCis6MTAwOUEwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAyQzAwMEUwMEYyCis6MTAwOUIwMDAwMDAwMDAwODJBMDAwMDA3MDAwMDAwMDgwNTAwNTU1NTQ3Cis6MTAwOUMwMDAwMDAwMDAxODgwMDBGRURFMDAwMDAwMDAwNjgyMDAwMDJCCis6MTAwOUQwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUI1Cis6MTAwOUUwMDAwMDAwMDAxMDBDRTcwMDA3MDAwMDAwMDkwNTYyRkZGRjhGCis6MTAwOUYwMDAwMDAwMDAxMEJBNkMxNDA1MDAwMDAwMDAyQURGMDAwMDlGCis6MTAwQTAwMDAwMDAwMDAwMDIxMDAwMDAwMDAwMDAwMDgyQTAwMDAwNThFCis6MTAwQTEwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgyQzgwMDEwQ0EwCis6MTAwQTIwMDAwMDAwMDAwODJEMDAwMDA4MDAwMDAwMEMzMTYyMDAxOEQyCis6MTAwQTMwMDAwMDAwMDAwODJEODAwMDAxMDAwMDAwMTg4MDAwRkY3NkYzCis6MTAwQTQwMDAwMDAwMDAxODAwMEQwMDAwMDAwMDAwMTBCMUEwQjAwRTYyCis6MTAwQTUwMDAwMDAwMDAwQjJGREYwMDAyMDAwMDAwMDAwM0Q4MDAwMEEwCis6MTAwQTYwMDAwMDAwMDAwMDJDMjAwMDAwMDAwMDAwMTA5MUQ0MDAwMEM1Cis6MTAwQTcwMDAwMDAwMDAxODgwMDAwMDE1MDAwMDAwMTAyQzYyMDAwMjI5Cis6MTAwQTgwMDAwMDAwMDAxODgwMDAwMDBDMDAwMDAwMEIyRkRGMDAwMkE3Cis6MTAwQTkwMDAwMDAwMDAwMDJDMDcwMDAwMDAwMDAwMEMxRjgwMDAwMTc3Cis6MTAwQUEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgwNTAwRkZGRkJDCis6MTAwQUIwMDAwMDAwMDAxODgwMDBGRUMwMDAwMDAwMDgyQzgwMDEwRDFFCis6MTAwQUMwMDAwMDAwMDAwODJEMDAwMDA5MDAwMDAwMTA5MUQ0MDAwMDczCis6MTAwQUQwMDAwMDAwMDAwODJEODAwMTA3MDAwMDAwMTg4MDAwRkY2RDU1Cis6MTAwQUUwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMEMxRjgwMDAwMUE0Cis6MTAwQUYwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAyQURGMDAwMDZFCis6MTAwQjAwMDAwMDAwMDAwODJBMDAwMDBBMDAwMDAwMDAwNTAwMDAwMEE0Cis6MTAwQjEwMDAwMDAwMDAxODgwMDBGRUI0MDAwMDAwMDAwNjgyMDAwMDAzCis6MTAwQjIwMDAwMDAwMDAwODJDODAwMTBDMDAwMDAwMDgyRDAwMDAwOEM3Cis6MTAwQjMwMDAwMDAwMDAwODJEODAwMTM0MDAwMDAwMDAwMDAwMDAwMENCCis6MTAwQjQwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDgyQzgwMDE0MDIxCis6MTAwQjUwMDAwMDAwMDAwODJEMDAwMDNDMDAwMDAwMDgyRDgwMDExQzUyCis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDA2Cis6MTAwQjcwMDAwMDAwMDAwODJDODAwMDgwMDAwMDAwMDgyRDAwMDAwMDBDCis6MTAwQjgwMDAwMDAwMDAwODJEODAwMTA1MDAwMDAwMTBCRUUyMDAwNUY1Cis6MTAwQjkwMDAwMDAwMDAxODgwMDBGRTlEMDAwMDAwMDEwNTYyMTQwMEE2Cis6MTAwQkEwMDAwMDAwMDAxMDkxOEEwMDAyMDAwMDAwMDhCMTYyMDAwMUZDCis6MTAwQkIwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTgwMDBEMDAwMDkxCis6MTAwQkMwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgwNjAwQUFBQTRFCis6MTAwQkQwMDAwMDAwMDAxODgwMDBGRjM5MDAwMDAwMEMyOTgwMDAwMThGCis6MTAwQkUwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMDgyQTAwMDAwOTFFCis6MTAwQkYwMDAwMDAwMDAwODA1MDBBQUFBMDAwMDAwMTg4MDAwRkU5NzY3Cis6MTAwQzAwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgwNjAwNTU1NUI3Cis6MTAwQzEwMDAwMDAwMDAxODgwMDBGRjMxMDAwMDAwMTA5MUEwM0MwMjhECis6MTAwQzIwMDAwMDAwMDAxMEIxRTY2MjA3MDAwMDAwMEIyRkRGMDAwMjk5Cis6MTAwQzMwMDAwMDAwMDAwMDJDMzEwMDAwMDAwMDAwMDkyQ0IxMDA3RkYyCis6MTAwQzQwMDAwMDAwMDAwODJDRDkwMDAwMDAwMDAwMDgyRDAwMDAwMDYyCis6MTAwQzUwMDAwMDAwMDAwODJEODAwMTBEMDAwMDAwMTBCMUE4MDAwNjYyCis6MTAwQzYwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzIwMDAwMEE5Cis6MTAwQzcwMDAwMDAwMDAwMDJDQTcwMDAwMDAwMDAwMDgyRDAwMDAxMDVDCis6MTAwQzgwMDAwMDAwMDAwODJEODAwMTA4MDAwMDAwMTg4MDAwRkYyQ0UzCis6MTAwQzkwMDAwMDAwMDAxMEIxQTYwMDEwMDAwMDAwMTAwMDFGMDAwMEFFCis6MTAwQ0EwMDAwMDAwMDAwRjBGMzAwMDA3MDAwMDAwMDAwQTYwMDAwMDg1Cis6MTAwQ0IwMDAwMDAwMDAwMDBBRTEwMDAwMDAwMDAwMEY0QjYyMDAwODg1Cis6MTAwQ0MwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMDAwRDYyMDAwMDhDCis6MTAwQ0QwMDAwMDAwMDAwOTBEMUEwMEZGMDAwMDAwMTAwNzMwMDAwMzlCCis6MTAwQ0UwMDAwMDAwMDAwQzBEMUEwMDA4MDAwMDAwMEMwQjE2MDAwODk0Cis6MTAwQ0YwMDAwMDAwMDAwRjRDRTMwMDE4MDAwMDAwMDAwQzk5MkMwMENECis6MTAwRDAwMDAwMDAwMDAwNENDOTkzNDAwMDAwMDAwMDgwRjgwMDAwMEFGCis6MTAwRDEwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMDAzMzMxMDAwMEI5Cis6MTAwRDIwMDAwMDAwMDAwODIyMDAwMDE2MDAwMDAwMDAyQURGMDAwMDdBCis6MTAwRDMwMDAwMDAwMDAwODJBMDAwMDBDMDAwMDAwMTAwMDlGMDAwMEM2Cis6MTAwRDQwMDAwMDAwMDAwMDBGMjAwMDAwMDAwMDAwMEMxRjgwMDAwMUM4Cis6MTAwRDUwMDAwMDAwMDAwODA1MDA1NTU1MDAwMDAwMTg4MDAwRkU2QkRCCis6MTAwRDYwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgwNjAwQUFBQUFDCis6MTAwRDcwMDAwMDAwMDAxODgwMDBGRjA1MDAwMDAwMEY0NzIyMDAwODU3Cis6MTAwRDgwMDAwMDAwMDAwOTA3MEUwMDBGMDAwMDAwMDgwNzBFMDAwODExCis6MTAwRDkwMDAwMDAwMDAwODAyODAwMDAxMDAwMDAwMDcwMjg1MUMwMDFFCis6MTAwREEwMDAwMDAwMDAwODgyODUwMDAxMDAwMDAwMDAwMjg1NEMwMDYwCis6MTAwREIwMDAwMDAwMDAwNzQyODUxQzAwMDAwMDAwMDNDM0FBNTIwMDg3Cis6MTAwREMwMDAwMDAwMDAwMDAzQjEwRTAwMDAwMDAwMDc0QjA3MUMwMEVDCis6MTAwREQwMDAwMDAwMDAwRjBGMzAwMDA3MDAwMDAwMEYwQTk2MDAwMzBDCis6MTAwREUwMDAwMDAwMDAwMDBBOTU1QzAwMDAwMDAwMDA0QTAwNUEwMDY0Cis6MTAwREYwMDAwMDAwMDAwMDBDOTYwQTAwMDAwMDAwMDkwQzk5RkZGRjlCCis6MTAwRTAwMDAwMDAwMDAwODBEMDBGRkZGMDAwMDAwMTBCMTk2MzIwMjQ0Cis6MTAwRTEwMDAwMDAwMDAwODBGODAwMDA1MDAwMDAwMTBCMUE4MDAwOEM1Cis6MTAwRTIwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMEIyRkRGMDAwMjE4Cis6MTAwRTMwMDAwMDAwMDAwMDJDMjAwMDAwMDAwMDAwMDAyQ0E3MDAwMDkzCis6MTAwRTQwMDAwMDAwMDAwODJEMDAwMDEwMDAwMDAwMDgyRDgwMDEwODlGCis6MTAwRTUwMDAwMDAwMDAxODgwMDBGRUYzMDAwMDAwMEMyOTgwMDAwMTUzCis6MTAwRTYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEMxRjgwMDAwMUE3Cis6MTAwRTcwMDAwMDAwMDAwMDJBREYwMDAwMDAwMDAwMDgyQTAwMDAwRDJBCis6MTAwRTgwMDAwMDAwMDAwODA1MDBBQUFBMDAwMDAwMTg4MDAwRkU0NTI2Cis6MTAwRTkwMDAwMDAwMDAxMDkxRDQwMDAwMDAwMDAwMDgwNjAwNTU1NTI1Cis6MTAwRUEwMDAwMDAwMDAxODgwMDBGRURGMDAwMDAwMEMyOTgwMDAwMTE3Cis6MTAwRUIwMDAwMDAwMDAwQzFGODAwMDAxMDAwMDAwMDgyQTAwMDAwNzRECis6MTAwRUMwMDAwMDAwMDAwODA1MDA1NTU1MDAwMDAwMTg4MDAwRkUzRDk4Cis6MTAwRUQwMDAwMDAwMDAxMEIxODAwMDA0MDAwMDAwMUYwMzAzMDMwMEE1Cis6MTAwRUUwMDAwMDAwMDAwODA1MDAwMEZGMDAwMDAwMTgwMDAyMDAwMERDCis6MTAwRUYwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTBCMUQ0MDAwMDMzCis6MTAwRjAwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTAyMDUzMDAwMERGCis6MTAwRjEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTUzCis6MTAwRjIwMDAwMDAwMDAwMDJGODBBQTAwMDAwMDAwMEMyOTgwMDAwMUIyCis6MTAwRjMwMDAwMDAwMDAwODAyNTQwMDBGMDAwMDAwMDAyQzQwMDAwMEQ4Cis6MTAwRjQwMDAwMDAwMDAwOTI5NTIwMDNGMDAwMDAwMTgwMDA0MDAwMEMyCis6MTAwRjUwMDAwMDAwMDAxODgwMDAwMDEwMDAwMDAwMTg4MDAwMDAxMTQwCis6MTAwRjYwMDAwMDAwMDAxODgwMDAwMDRBMDAwMDAwMTg4MDAwMDEyOERFCis6MTAwRjcwMDAwMDAwMDAxODgwMDAwMTI3MDAwMDAwMTg4MDAwMDEyNkYyCis6MTAwRjgwMDAwMDAwMDAxODgwMDAwMTI2MDAwMDAwMTg4MDAwMDAwMDBBCis6MTAwRjkwMDAwMDAwMDAxODgwMDAwMTNGMDAwMDAwMTg4MDAwMDEyMkJFCis6MTAwRkEwMDAwMDAwMDAxODgwMDAwMDBCMDAwMDAwMTg4MDAwMDE0NUMwCis6MTAwRkIwMDAwMDAwMDAxODgwMDAwMTlBMDAwMDAwMTg4MDAwMDA3QkVCCis6MTAwRkMwMDAwMDAwMDAxODgwMDAwMEY5MDAwMDAwMTg4MDAwMDEwOUVFCis6MTAwRkQwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZFNDZDCis6MTAwRkUwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMEMyOTgwMDAwMDIyCis6MTAwRkYwMDAwMDAwMDAxODgwMDBGRkUxMDAwMDAwMDAyQTAwMDAwMDRGCis6MTAxMDAwMDAwMDAwMDAxODgwMDBGRkRGMDAwMDAwMDAwMzgyMDAwMEU1Cis6MTAxMDEwMDAwMDAwMDAxODgwMDBGRkRBMDAwMDAwMDEwQzE2MTQwMDI4Cis6MTAxMDIwMDAwMDAwMDAwMDhDMTgxNDAwMDAwMDAwMTA5MTk4MDAwM0NDCis6MTAxMDMwMDAwMDAwMDAwODBDOTYwMDAyMDAwMDAwMTBCMTgwMDAwM0MwCis6MTAxMDQwMDAwMDAwMDAwODBDOTYwMDAxMDAwMDAwMDAwQzAwMDAwMEU5Cis6MTAxMDUwMDAwMDAwMDAwMDBEMTkwMDAwMDAwMDAwMTAyMDU2MDAwMEU0Cis6MTAxMDYwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwMUQ5Cis6MTAxMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDQxCis6MTAxMDgwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAwMTEzMDFGMUZCCis6MTAxMDkwMDAwMDAwMDAxODAwMDcwMDAwMDAwMDAwMDAwNTAyMDAwMDJBCis6MTAxMEEwMDAwMDAwMDAxMDkxOTYzNDIxMDAwMDAwMTAyMDVGMDAwMDI1Cis6MTAxMEIwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDAwNjJDCis6MTAxMEMwMDAwMDAwMDAwODJEMDAwMDA2MDAwMDAwMDgyRDgwMDEwMjJECis6MTAxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDkxCis6MTAxMEUwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMTgwMDBBMDAwMDcwCis6MTAxMEYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQxNjY4Cis6MTAxMTAwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAwOUQ4MDAwMDZGCis6MTAxMTEwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDEwRUMyCis6MTAxMTIwMDAwMDAwMDAwODJEMDAwMDBBMDAwMDAwMDgyRDgwMDEwMkM4Cis6MTAxMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDMwCis6MTAxMTQwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDAyQzEzMDAwMEYxCis6MTAxMTUwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMDY2Cis6MTAxMTYwMDAwMDAwMDAxMDkxOTYzNDA5MDAwMDAwMTAyMDVGMDAwMDdDCis6MTAxMTcwMDAwMDAwMDAwMDJDMUUwMDAwMDAwMDAwMDgyQzgwMDAwNjZCCis6MTAxMTgwMDAwMDAwMDAwODJEMDAwMDZBMDAwMDAwMDgyRDgwMDEwMjA4Cis6MTAxMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMEQwCis6MTAxMUEwMDAwMDAwMDAwMDBEN0EwMDAwMDAwMDAwMTgwMDBBMDAwMDk2Cis6MTAxMUIwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMDAwRDYxMDAwMDk3Cis6MTAxMUMwMDAwMDAwMDAwMDAzNjIwMDAwMDAwMDAwMTAyMzQyMDBEQjZBCis6MTAxMUQwMDAwMDAwMDAwMDAyNjM4QzAwMDAwMDAwMDAyNjQ2MDAwMEIyCis6MTAxMUUwMDAwMDAwMDAwODAyMDQwMDEyMDAwMDAwMTBCOTA2MDgyRURBCis6MTAxMUYwMDAwMDAwMDAwMDBGNTgwMDAwMDAwMDAwMDAwQTY0MDAwMDFBCis6MTAxMjAwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRjc3Cis6MTAxMjEwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwQjgwMDAwMDM3Cis6MTAxMjIwMDAwMDAwMDAwODBDQzYwMDEyMDAwMDAwMTg4MDAwRkZDRTZECis6MTAxMjMwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTE5Cis6MTAxMjQwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTAxMjUwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTEwCis6MTAxMjYwMDAwMDAwMDAwODI3MTEwMDEyMDAwMDAwMDA2NjkwMDAwMDM2Cis6MTAxMjcwMDAwMDAwMDAwOEEzMUIwMDEyMDAwMDAwMTBCMTk4MDAwNjM3Cis6MTAxMjgwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUUwCis6MTAxMjkwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUI5Cis6MTAxMkEwMDAwMDAwMDAwODBGODAwMDA0MDAwMDAwMDgyMjAwMDAwMzc2Cis6MTAxMkIwMDAwMDAwMDAwODJDODAwMDBDMDAwMDAwMDgyRDAwMDAwQzJECis6MTAxMkMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUEwCis6MTAxMkQwMDAwMDAwMDAwMDI1OTYwMDAwMDAwMDAwMEMyOTgwMDAwMDlFCis6MTAxMkUwMDAwMDAwMDAwMDA2NjYwMDAwMDAwMDAwMDA4NjYxMTgwMDkzCis6MTAxMkYwMDAwMDAwMDAwOTAyNjAwMDBGMDAwMDAwMEYwMjA0MDAwMjVECis6MTAxMzAwMDAwMDAwMDAxMEI2MEMwODA1MDAwMDAwMEMxRkJGMDAwMDE0Cis6MTAxMzEwMDAwMDAwMDAxMDI4NjYwMDAzMDAwMDAwMDgwNzhGMDAwMThECis6MTAxMzIwMDAwMDAwMDAwQzMzNjYwMDEwMDAwMDAwMDAzMjE0MDAwMEMyCis6MTAxMzMwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDU3MzY2MkMwMERDCis6MTAxMzQwMDAwMDAwMDAwMDMxRTMyRTAwMDAwMDAwMDgyRDgwMDAxMDk2Cis6MTAxMzUwMDAwMDAwMDAxODgwMDBGRjc1MDAwMDAwMDAyMzAwMDAwMDVFCis6MTAxMzYwMDAwMDAwMDAwOTI1RTZGRkZGMDAwMDAwMDgyMjAwMDAwQjM2Cis6MTAxMzcwMDAwMDAwMDAwQzY5NTIwMDAwMDAwMDAwMEMyOTgwMDAwMEYxCis6MTAxMzgwMDAwMDAwMDAxMDI4NjYwMDg4MDAwMDAwMTg4MDAwRkY2RTMyCis6MTAxMzkwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMDgyQzgwMDA0MDJGCis6MTAxM0EwMDAwMDAwMDAwODJEMDAwMDIwMDAwMDAwMDgyRDgwMDExQzE2Cis6MTAxM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMEFFCis6MTAxM0MwMDAwMDAwMDAwRjQyRUEwMDEwMDAwMDAwMTAwMDRGMDAwNDZGCis6MTAxM0QwMDAwMDAwMDAxMEI3NDY5MjAwMDAwMDAwMDgwMjQ5MDAxMjA5Cis6MTAxM0UwMDAwMDAwMDAxMEI1ODQwQTAwMDAwMDAwMDAwRDYxMDAwMDNDCis6MTAxM0YwMDAwMDAwMDAxMEJBNjYzNDZBMDAwMDAwMDg4MzA1MDAxMjdECis6MTAxNDAwMDAwMDAwMDAxMDAwNEYwMDAyMDAwMDAwMDAwMzQ5MDAwMDJGCis6MTAxNDEwMDAwMDAwMDAwMTgzMDY4QzAwMDAwMDAwMDA4M0M2MEMwMDYxCis6MTAxNDIwMDAwMDAwMDAxMEIxODcwMDExMDAwMDAwMDAwQjZFMDAwMEVBCis6MTAxNDMwMDAwMDAwMDAxMEJFRTkwMDA1MDAwMDAwMTg4MDAwRkY1NTA0Cis6MTAxNDQwMDAwMDAwMDAwMTA1NjkxNDAwMDAwMDAwMTA5MThBMDAwMkVDCis6MTAxNDUwMDAwMDAwMDAwOEI0RTkwMDAxMDAwMDAwMTBCMUU5MkM1REIzCis6MTAxNDYwMDAwMDAwMDAwMDg2NjkyQzAwMDAwMDAwMDAwMjAwMDAwMDVGCis6MTAxNDcwMDAwMDAwMDAwOTAyRUFGRkZGMDAwMDAwMTAwMDBDMDAwMjVCCis6MTAxNDgwMDAwMDAwMDAwMDAyMDQwQTAwMDAwMDAwMEY0NjBDMDAwMUVBCis6MTAxNDkwMDAwMDAwMDAwRjAyODUwMDAxMDAwMDAwMTA5MThDMDFGQzhCCis6MTAxNEEwMDAwMDAwMDAxMEI3MDQwRTU0MDAwMDAwMDAwRjQwMDAwMEMwCis6MTAxNEIwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwQTY0MDAwMDUwCis6MTAxNEMwMDAwMDAwMDAwMDBBRTUwMDAwMDAwMDAwMDkwQjY2RkZGRkI1Cis6MTAxNEQwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwQjgwMDAwMDc1Cis6MTAxNEUwMDAwMDAwMDAwODBDODYwMDEyMDAwMDAwMTAyMDU2MDAwMENBCis6MTAxNEYwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwMzQzCis6MTAxNTAwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMTAwMDFGMDAwMDI1Cis6MTAxNTEwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgyNzExMDAxMjJBCis6MTAxNTIwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMDAyNjQ2MDAwMDU5Cis6MTAxNTMwMDAwMDAwMDAwMDIzMDYwMDAwMDAwMDAwMTBCMTk4MDAwOTIwCis6MTAxNTQwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTFECis6MTAxNTUwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUY2Cis6MTAxNTYwMDAwMDAwMDAwODBGODAwMDA0MDAwMDAwMDAwMDAwMDAwMEUwCis6MTAxNTcwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUVECis6MTAxNTgwMDAwMDAwMDAwMDMyMTQwMDAwMDAwMDAwMDAzMjk1MDAwMDRFCis6MTAxNTkwMDAwMDAwMDAwMDMxRTMyRTAwMDAwMDAwMDU3MzY2MkMwMEZGCis6MTAxNUEwMDAwMDAwMDAwMDI1OTYwMDAwMDAwMDAwMTBCMTg3MDAyMTE3Cis6MTAxNUIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEYwRjZCMDAwN0U2Cis6MTAxNUMwMDAwMDAwMDAwMDBENjkwMDAwMDAwMDAwMDAwQTZDMDAwMDJGCis6MTAxNUQwMDAwMDAwMDAwMDBBRUQwMDAwMDAwMDAwMDAwQjZFMDAwMDlCCis6MTAxNUUwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDAwQzg3MDAwMERECis6MTAxNUYwMDAwMDAwMDAxODgwMDBGRjFFMDAwMDAwMDEwQzE2MTQwMEZGCis6MTAxNjAwMDAwMDAwMDAwMDhDMTgxNDAwMDAwMDAwMDgwQzk2MDAwMTc3Cis6MTAxNjEwMDAwMDAwMDAxMDkxOTgwMDAyMDAwMDAwMDgwQzk5MDAwMUUxCis6MTAxNjIwMDAwMDAwMDAwMDBEMTkwMDAwMDAwMDAwMDAwQzAwMDAwMDg4Cis6MTAxNjMwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTE1Cis6MTAxNjQwMDAwMDAwMDAwODBGODAwMDAxMDAwMDAwMTAyMDUzMDAwMDdGCis6MTAxNjUwMDAwMDAwMDAwQzY5NTIwMDAxMDAwMDAwMTAwMDFGMDAwMDkzCis6MTAxNjYwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyMkM1OEMwMEI4Cis6MTAxNjcwMDAwMDAwMDAwMDIzMTIwMDAwMDAwMDAwMDAyNzExMDAwMEZECis6MTAxNjgwMDAwMDAwMDAwMDI2OTAwMDAwMDAwMDAwMTBCODE3MEUwM0I0Cis6MTAxNjkwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkZFQjEzCis6MTAxNkEwMDAwMDAwMDAwMDgyOTcwRTAwMDAwMDAwMDBBMzEyMEEwMDU0Cis6MTAxNkIwMDAwMDAwMDAwODIyMDAwMDFBMDAwMDAwMDgyQzgwMDAwQzI2Cis6MTAxNkMwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAxMDE0Cis6MTAxNkQwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMThDCis6MTAxNkUwMDAwMDAwMDAwMDBENkUwMDAwMDAwMDAwMDNFN0NGMzQwMDkyCis6MTAxNkYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTA5MURFMDAwMEI2Cis6MTAxNzAwMDAwMDAwMDAxMEIxODcwMDA3MDAwMDAwMDAzNjE0MDAwMDQwCis6MTAxNzEwMDAwMDAwMDAwMDM2OTUwMDAwMDAwMDAwMDAzNzE2MDAwMEIxCis6MTAxNzIwMDAwMDAwMDAwODJDODAwMDUwMDAwMDAwMDgyRDAwMDAzMDUwCis6MTAxNzMwMDAwMDAwMDAwODJEODAwMDBDMDAwMDAwMTg4MDAwRkVGODVBCis6MTAxNzQwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDAyMzAwMDAwMDBBCis6MTAxNzUwMDAwMDAwMDAwOTI1RTZGRkZGMDAwMDAwMDAwQjZFMDAwMEZFCis6MTAxNzYwMDAwMDAwMDAwM0U3Q0YyQzAwMDAwMDAwMDgyMjAwMDAxQjRGCis6MTAxNzcwMDAwMDAwMDAwQzY5NTIwMDAwMDAwMDAwMEMyOTgwMDAwMEVECis6MTAxNzgwMDAwMDAwMDAxODgwMDBGRUVGMDAwMDAwMDAyQTAwMDAwMEFBCis6MTAxNzkwMDAwMDAwMDAxMDA4NjYwMDA1MDAwMDAwMDAwNjY2MDAwMDVBCis6MTAxN0EwMDAwMDAwMDAwMDg2NjExODAwMDAwMDAwMDkwMjYwMDBGMERGCis6MTAxN0IwMDAwMDAwMDAxMEI2MEMwODAyMDAwMDAwMTg4MDAwRkVFOENGCis6MTAxN0MwMDAwMDAwMDAwMDA2ODIwMDAwMDAwMDAwMTBCMThGMDAwMDQxCis6MTAxN0QwMDAwMDAwMDAwODg3OEYwMDAxMDAwMDAwMEM3MzY2MDAxMEY1Cis6MTAxN0UwMDAwMDAwMDAwODJDODAwMDE4MDAwMDAwMDgyRDAwMDAxOEUwCis6MTAxN0YwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMEM1RkJGMDAwMDA4Cis6MTAxODAwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTgwMDBEMDAwMDM0Cis6MTAxODEwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAyODY2MDFGNTBBCis6MTAxODIwMDAwMDAwMDAwODJDODAwMDAzMDAwMDAwMDgyRDAwMDAwM0M5Cis6MTAxODMwMDAwMDAwMDAwOTMwNjBGRkYwMDAwMDAwMDgyRDgwMDAwMTZBCis6MTAxODQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTA5MURFMDAwMDY0Cis6MTAxODUwMDAwMDAwMDAwODJDODAwMDFBMDAwMDAwMDgyRDAwMDAxQTZCCis6MTAxODYwMDAwMDAwMDAwNTczNjYwMDAwMDAwMDAwMDgyRDgwMDAwMkUzCis6MTAxODcwMDAwMDAwMDAwMDMxODAwMDAwMDAwMDAwMTA5MURFMDAwMDM4Cis6MTAxODgwMDAwMDAwMDAwODJDODAwMDBDMDAwMDAwMDgyRDAwMDAwQzU3Cis6MTAxODkwMDAwMDAwMDAwODJEODAwMDA0MDAwMDAwMTg4MDAwRkVDQzJECis6MTAxOEEwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMTg4MDAwRkVDQUJFCis6MTAxOEIwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMENGCis6MTAxOEMwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAwRjAwODAwMDNBCis6MTAxOEQwMDAwMDAwMDAwODBGODAwMDA3MDAwMDAwMTg4MDAwMDAxQkI3Cis6MTAxOEUwMDAwMDAwMDAwMDI4MEEwMDAwMDAwMDAwMDAwNTAyMDAwMEJGCis6MTAxOEYwMDAwMDAwMDAwODIyMDAwMDA5MDAwMDAwMDAyOTAwMDAwMDhDCis6MTAxOTAwMDAwMDAwMDAwRjY1NjgwMDEwMDAwMDAwMDNGNjZDOTQwMEYyCis6MTAxOTEwMDAwMDAwMDAxMEI5NzJBMDA0MDAwMDAwMEM3M0U3MDAxOTY5Cis6MTAxOTIwMDAwMDAwMDAwQzIxNDIwMDA0MDAwMDAwMDAzQ0Y4MDAwMDEwCis6MTAxOTMwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDZGCis6MTAxOTQwMDAwMDAwMDAwODIyMDAwMDA4MDAwMDAwMEM2MTQyMDAwNEIyCis6MTAxOTUwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMDVFCis6MTAxOTYwMDAwMDAwMDAwQzYxNDIwMDAwMDAwMDAwMTAwMTQyMDAwMzcyCis6MTAxOTcwMDAwMDAwMDAwQzMzRTcwMDFEMDAwMDAwMEM2MTQyMDAwMjczCis6MTAxOTgwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAyQTAwMDAwMDBCCis6MTAxOTkwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUM5Cis6MTAxOUEwMDAwMDAwMDAwRjBGNDcwMDA3MDAwMDAwMDgwRjgwMDAwODJDCis6MTAxOUIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAwMDFGMDAwMDQzCis6MTAxOUMwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTg4MDAwRkVBNjhDCis6MTAxOUQwMDAwMDAwMDAwMDMzNTEwMDAwMDAwMDAwMDAyQTAwMDAwMDU5Cis6MTAxOUUwMDAwMDAwMDAxMEIxQzYwMDI5MDAwMDAwMEYwRjUwMDAwN0QyCis6MTAxOUYwMDAwMDAwMDAwMDBBNjAwMDAwMDAwMDAwMDAwQUUxMDAwMDkyCis6MTAxQTAwMDAwMDAwMDAwRjRCNjIwMDA4MDAwMDAwMDkwQjE2MDBGRkU5Cis6MTAxQTEwMDAwMDAwMDAwRjRDNjIwMDEwMDAwMDAwMDAwRDYyMDAwMDhBCis6MTAxQTIwMDAwMDAwMDAwOTBEMUEwMEZGMDAwMDAwMTAwNzUwMDAwMzFECis6MTAxQTMwMDAwMDAwMDAwQzBEMUEwMDA4MDAwMDAwMEMwQjE2MDAwODM2Cis6MTAxQTQwMDAwMDAwMDAwMDBDQzYwMDAwMDAwMDAwMDAwQjgwMDAwMDM5Cis6MTAxQTUwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMTAyMDU2MDAwMDYyCis6MTAxQTYwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwM0NECis6MTAxQTcwMDAwMDAwMDAxMDA2QzIwMDA0MDAwMDAwMEMyOTAwMDAwMjUzCis6MTAxQTgwMDAwMDAwMDAxMDI2NDIwMDAyMDAwMDAwMEMyOTUyMDAwMzUyCis6MTAxQTkwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMTAwMDFGMDAwMEVDCis6MTAxQUEwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyMzFCMDAwMEE5Cis6MTAxQUIwMDAwMDAwMDAwMDI3MTExQTAwMDAwMDAwMDA2NjkwMDAwMERFCis6MTAxQUMwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMTBCMTk3MzIwQ0Y5Cis6MTAxQUQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwNjk4MDAwMEIzCis6MTAxQUUwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwM0U5Cis6MTAxQUYwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMTAwMDFGMDAwMDQ0Cis6MTAxQjAwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAyMDU2MDAwMDAwCis6MTAxQjEwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwMzFDCis6MTAxQjIwMDAwMDAwMDAxODgwMDBGRkVGMDAwMDAwMTBCMUM4MDAxMzkzCis6MTAxQjMwMDAwMDAwMDAxMEIxQzYwMDAzMDAwMDAwMEMyOTgwMDAwMDY2Cis6MTAxQjQwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMDhCCis6MTAxQjUwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMTAwNkMyMDAwMjIxCis6MTAxQjYwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMDAyMkM1OEMwMDc5Cis6MTAxQjcwMDAwMDAwMDAwMDI3NjUwMDAwMDAwMDAwMDAyNkU0MDAwMENGCis6MTAxQjgwMDAwMDAwMDAwODIyMDAwMDE2MDAwMDAwMTBCMUM2MDAwMzhCCis6MTAxQjkwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMTBCMTgwMDAwNTk0Cis6MTAxQkEwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMEMyOTgwMDAwMDE1Cis6MTAxQkIwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTg4MDAwMDAxMjA2Cis6MTAxQkMwMDAwMDAwMDAwODIyMDAwMDE2MDAwMDAwMEMyOTgwMDAwMDIwCis6MTAxQkQwMDAwMDAwMDAwMDMwMTQwMDAwMDAwMDAwMDAzMDk1MDAwMEZDCis6MTAxQkUwMDAwMDAwMDAxMDA3NTAwMDAzMDAwMDAwMDkwQjE2MDBGRjYyCis6MTAxQkYwMDAwMDAwMDAwOTBEMUEwMEZGMDAwMDAwMEYzMTE2MDAwODU4Cis6MTAxQzAwMDAwMDAwMDAwMDMxNjIzNDAwMDAwMDAwMDNGMTYyMzAwMDg3Cis6MTAxQzEwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzUxMDAwMEI4Cis6MTAxQzIwMDAwMDAwMDAwOTJDRDEwMDdGMDAwMDAwMDgyQ0Q5MDAwMDIyCis6MTAxQzMwMDAwMDAwMDAwODJEMDAwMDAwMDAwMDAwMDgyRDgwMDAwQ0FFCis6MTAxQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MURFMDAwMDE1Cis6MTAxQzUwMDAwMDAwMDAxMDA1QzIwMDA1MDAwMDAwMDgwRjgwMDAwNzBBCis6MTAxQzYwMDAwMDAwMDAwMDMzMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDEyCis6MTAxQzcwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTg4MDAwRkU1MDJGCis6MTAxQzgwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMEYwRjUwMDAwN0I1Cis6MTAxQzkwMDAwMDAwMDAxMEIxQzYwMDMwMDAwMDAwMEY0NzQyMDAwOEVECis6MTAxQ0EwMDAwMDAwMDAwOTA3MEUwMDBGMDAwMDAwMDgwNzBFMDAwOEUyCis6MTAxQ0IwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUE2Cis6MTAxQ0MwMDAwMDAwMDAwODA5MDAwMDAxMDAwMDAwMDcwOTEyMUMwMEM0Cis6MTAxQ0QwMDAwMDAwMDAwM0NCQ0E5MjAwMDAwMDAwMDAwQjk3QTIwMDk2Cis6MTAxQ0UwMDAwMDAwMDAwNzQyMTcxQzAwMDAwMDAwMDAwQjA0MDAwMDY5Cis6MTAxQ0YwMDAwMDAwMDAwRjBBODQwMDAzMDAwMDAwMDAwQTk1OUMwMDA5Cis6MTAxRDAwMDAwMDAwMDAwMDRBMDA5QTAwMDAwMDAwMDg4MjEyMDAwMTUyCis6MTAxRDEwMDAwMDAwMDAwMTBDMTcwODAwMDAwMDAwMDAwQzk3OEMwMDY4Cis6MTAxRDIwMDAwMDAwMDAwMDAyMTgwMDAwMDAwMDAwMDgwRDAwRkZGRjg2Cis6MTAxRDMwMDAwMDAwMDAwODBGODAwMDA2MDAwMDAwMEMyOTAwMDAwMEQxCis6MTAxRDQwMDAwMDAwMDAxMDA2QzIwMDA0MDAwMDAwMEMyOTUyMDAwMjJFCis6MTAxRDUwMDAwMDAwMDAxMDI2NDIwMDAyMDAwMDAwMEMyOTUyMDAwMzdGCis6MTAxRDYwMDAwMDAwMDAwODIyMDAwMDAxMDAwMDAwMTAwMDFGMDAwMDE5Cis6MTAxRDcwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTBCMTk3MzIwRDdECis6MTAxRDgwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMDgwMEQ1Cis6MTAxRDkwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMEMyOTgwMDAwMDk4Cis6MTAxREEwMDAwMDAwMDAwMDAyMTgwMDAwMDAwMDAwMTAyMDUzMDAwMDk2Cis6MTAxREIwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDAyMkM1MzYwMDdDCis6MTAxREMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTk1Cis6MTAxREQwMDAwMDAwMDAwODBGODAwMDA2MDAwMDAwMTg4MDAwRkZGMkRECis6MTAxREUwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMDgwMDc1Cis6MTAxREYwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMTBCMUM4MDAwQjU5Cis6MTAxRTAwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDlBCis6MTAxRTEwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMEMyOTUyMDAwM0IxCis6MTAxRTIwMDAwMDAwMDAxMDA2QzIwMDAyMDAwMDAwMEMyOTUyMDAwMjRGCis6MTAxRTMwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyNzY1MDAwMEEzCis6MTAxRTQwMDAwMDAwMDAwMDI2RTQwMDAwMDAwMDAwMDAyMzQ4MDAwMDFECis6MTAxRTUwMDAwMDAwMDAwODIyMDAwMDE3MDAwMDAwMEMyOTgwMDAwMDhDCis6MTAxRTYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUY0Cis6MDgxRTcwMDAwMDAwMDAxODgwMDBGRTExQzMKKzowMDAwMDAwMUZGCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworICogYWNjb21wYW55aW5nIGl0LgorICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyeC1lMS00LjguNTMuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngtZTEtNC44LjUzLjAuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFlZGIxZS4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyeC1lMS00LjguNTMuMC5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsMTAzNjQgKzAsMCBAQAotOjEwMDAwMDAwMDAwMDI4NjAwMDAwMDA2MDAwMDAwNjMwMDAwMDI4QzhFMgotOjEwMDAxMDAwMDAwMDE2MDgwMDAwMkYwMDAwMDAwMDk0MDAwMDQ1MTBBQQotOjEwMDAyMDAwMDAwMDczQzgwMDAwNDVBODAwMDAwMEM0MDAwMEI5NzhCMwotOjEwMDAzMDAwMDAwMEE0NjgwMDAwQkE0MDAwMDAwMDc0MDAwMTVFQjAzNwotOjEwMDA0MDAwMDAwMDU1OTAwMDAxNUYyODAwMDAwMEI4MDAwMUI0QzAxNgotOjEwMDA1MDAwMDAwMEQxRjgwMDAxQjU4MDAwMDAwMDA0MDAwMjg3ODA5NAotOjEwMDA2MDAwMDIwNDAwNDgwMDAwMDAwRjAyMDQwMDU0MDAwMDAwNDU5NAotOjEwMDA3MDAwMDIwNDAwNTgwMDAwMDA4NDAyMDQwMDVDMDAwMDAwMDYzNgotOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAotOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgotOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgotOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQotOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQotOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQotOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAotOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDA2MDQwMENDMDAwMDAwMDQxOAotOjEwMDEwMDAwMDIwNDAwREMwMDEwMDAwMDAyMDQwMEUwMTIxNDAwMDBGMQotOjEwMDExMDAwMDIwNDAwRTQyMjE0MDAwMDAyMDQwMEU4MzIxNDAwMDA4QgotOjEwMDEyMDAwMDYwNDAwRUMwMDAwMDAwNDAxMDQwMTI0MDAwMDAwMDBBQgotOjEwMDEzMDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA1RgotOjEwMDE0MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMDA0MDAwMDAwRkY3MAotOjEwMDE1MDAwMDIwNDAwMDgwMDAwMDBGRjAyMDQwMDBDMDAwMDAwRkY4MQotOjEwMDE2MDAwMDIwNDAwMTAwMDAwMDBGRjAyMDQwMDE0MDAwMDAwRkY2MQotOjEwMDE3MDAwMDIwNDAwMTgwMDAwMDBGRjAyMDQwMDFDMDAwMDAwRkY0MQotOjEwMDE4MDAwMDIwNDAwMjAwMDAwMDBGRjAyMDQwMDI0MDAwMDAwM0VFMgotOjEwMDE5MDAwMDIwNDAwMjgwMDAwMDAwMDAyMDQwMDJDMDAwMDAwM0ZDMAotOjEwMDFBMDAwMDIwNDAwMzAwMDAwMDAzRjAyMDQwMDM0MDAwMDAwM0Y2MQotOjEwMDFCMDAwMDIwNDAwMzgwMDAwMDAwMDAyMDQwMDNDMDAwMDAwM0Y4MAotOjEwMDFDMDAwMDIwNDAwNDAwMDAwMDAzRjAyMDQwMDQ0MDAwMDAwM0YyMQotOjEwMDFEMDAwMDIwNDIwMDgwMDAwMDQxMTAyMDQyMDBDMDAwMDA0MDBBNgotOjEwMDFFMDAwMDIwNDIwMTAwMDAwMDQwNDAyMDQyMDE0MDAwMDA0MTk3QQotOjEwMDFGMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY3QgotOjEwMDIwMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkY1QQotOjEwMDIxMDAwMDYwNDIwMzgwMDAwMDAwMjAyMDQyMDQwMDAwMDAwMzRFMAotOjEwMDIyMDAwMDIwNDIwNDQwMDAwMDAzNTA2MDQyMDQ4MDAwMDAwN0M0MQotOjEwMDIzMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0ZCNwotOjEwMDI0MDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZDNwotOjEwMDI1MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDBCQwotOjEwMDI2MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDA5QwotOjEwMDI3MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA3QwotOjEwMDI4MDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDA1QwotOjEwMDI5MDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDAzQwotOjEwMDJBMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDAxQwotOjEwMDJCMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDBGQwotOjEwMDJDMDAwMDIwNDI0QkMwMDAwMDAwMTBDMDQyMDAwMDAwMDAzRTgyQwotOjEwMDJEMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEFCNgotOjEwMDJFMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzIyMgotOjEwMDJGMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjA1RQotOjEwMDMwMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDA2MwotOjEwMDMxMDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzAyOAotOjEwMDMyMDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIzOAotOjEwMDMzMDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDY0MAotOjEwMDM0MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDIyNwotOjEwMDM1MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDUwNgotOjEwMDM2MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJFNwotOjEwMDM3MDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDFDOAotOjEwMDM4MDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDEyQgotOjEwMDM5MDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDEyNQotOjEwMDNBMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA5RgotOjEwMDNCMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTNCQwotOjEwMDNDMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE4OQotOjEwMDNEMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDcxNAotOjEwMDNFMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDg0NAotOjEwMDNGMDAwMDIwNTAwNUMwMDAwMDAwODA2MDUwMDYwMDAwMDAwMDQyMwotOjEwMDQwMDAwMDIwNTAwRDgwMDAwMDAwNjAyMDUwMEUwMDAwMDAwMEQxMwotOjEwMDQxMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEU4MDAwMDAwMDdDRQotOjEwMDQyMDAwMDIwNTAwRUMwMDAwMDAyNzAyMDUwMEYwMDAwMDAwMDdCNAotOjEwMDQzMDAwMDIwNTAwRjQwMDAwMDAyNzAyMDUwMEY4MDAwMDAwMDc5NAotOjEwMDQ0MDAwMDIwNTAwRkMwMDAwMDAyNzAyMDUwMDA0MDAwMDAwMDE3NgotOjEwMDQ1MDAwMDIwNTAwMDgwMDAwMDAwMTAyMDUwMDBDMDAwMDAwMDE3OAotOjEwMDQ2MDAwMDIwNTAwMTAwMDAwMDAwMTAyMDUwMDE0MDAwMDAwMDE1OAotOjEwMDQ3MDAwMDIwNTAwMTgwMDAwMDAwMTAyMDUwMDFDMDAwMDAwMDEzOAotOjEwMDQ4MDAwMDIwNTAwMjAwMDAwMDAwMTAyMDUwMDI0MDAwMDAwMDExOAotOjEwMDQ5MDAwMDIwNTAwMjgwMDAwMDAwMTAyMDUwMDJDMDAwMDAwMDFGOAotOjEwMDRBMDAwMDIwNTAwMzAwMDAwMDAwMTAyMDUwMDM0MDAwMDAwMDFEOAotOjEwMDRCMDAwMDIwNTAwMzgwMDAwMDAwMTAyMDUwMDNDMDAwMDAwMDFCOAotOjEwMDRDMDAwMDIwNTAwNDAwMDAwMDAwMTA0MDYxMDAwMDIwMDAwMjBBOAotOjEwMDREMDAwMDIwNjAwREMwMDAwMDAwMTAxMDYwMEQ4MDAwMDAwMDA1OAotOjEwMDRFMDAwMDQwNjAyMDAwMDAzMDIyMDAyMDYwMERDMDAwMDAwMDBGNwotOjEwMDRGMDAwMDIwNjAwNjgwMDAwMDBCODAyMDYwMDc4MDAwMDAxMTQzRgotOjEwMDUwMDAwMDEwNjAwQjgwMDAwMDAwMDAxMDYwMEM4MDAwMDAwMDA1RAotOjEwMDUxMDAwMDIwNjAwNkMwMDAwMDBCODAyMDYwMDdDMDAwMDAxMTQxNgotOjEwMDUyMDAwMDEwNjAwQkMwMDAwMDAwMDAxMDYwMENDMDAwMDAwMDAzNQotOjEwMDUzMDAwMDcxODA0MDAwMDkzMDAwMDA4MTgwNzYwMDAxNDAyMjM0NQotOjEwMDU0MDAwMDcxQzAwMDAzMjRGMDAwMDA3MUM4MDAwMzMyNTBDOTQ2QwotOjEwMDU1MDAwMDcxRDAwMDAwRTREMTk1RTA4MUQxRTAwNUM0MDAyMjU5RgotOjEwMDU2MDAwMDExODAwMDAwMDAwMDAwMDAxMTgwMDA0MDAwMDAwMDA1NQotOjEwMDU3MDAwMDExODAwMDgwMDAwMDAwMDAxMTgwMDBDMDAwMDAwMDAzNQotOjEwMDU4MDAwMDExODAwMTAwMDAwMDAwMDAxMTgwMDE0MDAwMDAwMDAxNQotOjEwMDU5MDAwMDIxODAwMjAwMDAwMDAwMTAyMTgwMDI0MDAwMDAwMDJFMAotOjEwMDVBMDAwMDIxODAwMjgwMDAwMDAwMzAyMTgwMDJDMDAwMDAwMDBDMAotOjEwMDVCMDAwMDIxODAwMzAwMDAwMDAwNDAyMTgwMDM0MDAwMDAwMDE5RQotOjEwMDVDMDAwMDIxODAwMzgwMDAwMDAwMDAyMTgwMDNDMDAwMDAwMDE4MgotOjEwMDVEMDAwMDIxODAwNDAwMDAwMDAwNDAyMTgwMDQ0MDAwMDAwMDA1RgotOjEwMDVFMDAwMDIxODAwNDgwMDAwMDAwMTAyMTgwMDRDMDAwMDAwMDMzRgotOjEwMDVGMDAwMDIxODAwNTAwMDAwMDAwMDAyMTgwMDU0MDAwMDAwMDEyMgotOjEwMDYwMDAwMDIxODAwNTgwMDAwMDAwNDAyMTgwMDVDMDAwMDAwMDBGRQotOjEwMDYxMDAwMDIxODAwNjAwMDAwMDAwMTAyMTgwMDY0MDAwMDAwMDNERQotOjEwMDYyMDAwMDIxODAwNjgwMDAwMDAwMDAyMTgwMDZDMDAwMDAwMDFDMQotOjEwMDYzMDAwMDIxODAwNzAwMDAwMDAwNDAyMTgwMDc0MDAwMDAwMDA5RQotOjEwMDY0MDAwMDIxODAwNzgwMDAwMDAwNDAyMTgwMDdDMDAwMDAwMDM3QgotOjEwMDY1MDAwMDYxODAwODAwMDAwMDAwMjAyMTgwMEE0MDAwMDNGRkZGRQotOjEwMDY2MDAwMDIxODAwQTgwMDAwMDNGRjAyMTgwMjI0MDAwMDAwMDA4NgotOjEwMDY3MDAwMDIxODAyMzQwMDAwMDAwMDAyMTgwMjRDMDAwMDAwMDBDMgotOjEwMDY4MDAwMDIxODAyRTQwMDAwMDBGRjA2MTgxMDAwMDAwMDA0MDAzOQotOjEwMDY5MDAwMDIxQjhCQzAwMDAwMDAwMTAyMUI4MDAwMDAwMDAwMzQyMAotOjEwMDZBMDAwMDIxQjgwNDAwMDAwMDAxODAyMUI4MDgwMDAwMDAwMEMyQwotOjEwMDZCMDAwMDIxQjgwQzAwMDAwMDAyMDBDMUI4MzAwMDAwN0ExMjA0QgotOjEwMDZDMDAwMEExQjgzMDAwMDAwMDEzODBCMUI4MzAwMDAwMDEzODgwNQotOjEwMDZEMDAwMDIxQjgzQzAwMDAwMDFGNDA2MUEyMDAwMDAwMDAwQjJEMwotOjEwMDZFMDAwMDYxQTIzQzgwMDAwMDBDMTA0MUEyNkNDMDAwMTAyMjcwNAotOjEwMDZGMDAwMDYxQTEwMjAwMDAwMDBDODA2MUExMDAwMDAwMDAwMDJCMAotOjEwMDcwMDAwMDYxQTFDMTgwMDAwMDAwNDA2MUExQzEwMDAwMDAwMDI0MwotOjEwMDcxMDAwMDYxQTA4MDAwMDAwMDAwMjA2MUEwODA4MDAwMDAwMDI3RAotOjEwMDcyMDAwMDYxQTA4MTAwMDAwMDAwNDA0MUExRkIwMDAwNDAyMjg3MgotOjEwMDczMDAwMDQxQTRDQjAwMDA4MDIyQzA2MUEyMkM4MDAwMDAwMjAzRgotOjEwMDc0MDAwMDYxQTQwMDAwMDAwMDE2QzAyMUE0QjYwMDAwMDAwMDAxNQotOjEwMDc1MDAwMDYxQTE0MDAwMDAwMDAwQTA2MUExNDUwMDAwMDAwMDZEMQotOjEwMDc2MDAwMDYxQTE1MDAwMDAwMDAwMjA0MUExNTA4MDAwNTAyMzREQwotOjEwMDc3MDAwMDYxQTE1MUMwMDAwMDAwNzA2MUExNTcwMDAwMDAwMTI2QQotOjEwMDc4MDAwMDYxQTA5QzAwMDAwMDA0QzA2MUEwODAwMDAwMDAwMDIwQQotOjEwMDc5MDAwMDYxQTA4MjAwMDAwMDAwRTA0MUExRkIwMDAwMjAyMzlEOQotOjEwMDdBMDAwMDYxQTI5MDgwMDAwMDAwMjA2MUEyMzQ4MDAwMDAwMjA0QgotOjEwMDdCMDAwMDYxQTQ1QjAwMDAwMDE2QzAyMUE0QjY0MDAwMDAwMDBFQwotOjEwMDdDMDAwMDYxQTE0MjgwMDAwMDAwQTA2MUExNDY4MDAwMDAwMDYyMQotOjEwMDdEMDAwMDYxQTE1MzgwMDAwMDAwMjA0MUExNTQwMDAwNTAyM0JGNQotOjEwMDdFMDAwMDYxQTE1NTQwMDAwMDAwNzA2MUExNUI4MDAwMDAwMTI3QQotOjEwMDdGMDAwMDYxQTBBRjAwMDAwMDA0QzA2MUEwODA4MDAwMDAwMDI2MQotOjEwMDgwMDAwMDYxQTA4NTgwMDAwMDAwRTA0MUExRkI4MDAwMjAyNDAyMQotOjEwMDgxMDAwMDYxQTI5MTAwMDAwMDAwMjAyMDBBMjgwMDAwMDAwMDE1OAotOjEwMDgyMDAwMDIwMEEyOTQwNzFEMjkxMTAyMDBBMjk4MDAwMDAwMDBGNgotOjEwMDgzMDAwMDIwMEEyOUMwMDlDMDQyNDAyMDBBMkEwMDAwMDAwMDA3MAotOjEwMDg0MDAwMDIwMEEyQTQwMDAwMDIwOTAyMDBBNEZDRkYwMDAwMDBCNAotOjEwMDg1MDAwMDIwMTAwQjQwMDAwMDAwMTAyMDEwMEI4MDAwMDAwMDEyNAotOjEwMDg2MDAwMDIwMTAwREMwMDAwMDAwMTAyMDEwMTAwMDAwMDAwMDFBMwotOjEwMDg3MDAwMDIwMTAxMDQwMDAwMDAwMTAyMDEwMDdDMDAzMDAwMDBDMAotOjEwMDg4MDAwMDIwMTAwODQwMDAwMDAyODAyMDEwMDhDMDAwMDAwMDAyQQotOjEwMDg5MDAwMDIwMTAxMzAwMDAwMDAwNDAyMDEwMjVDMDAwMDAwMDFCRQotOjEwMDhBMDAwMDIwMTAzMjgwMDAwMDAwMDAyMDEwNTU0MDAwMDAwMzA4RQotOjEwMDhCMDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDFBMAotOjEwMDhDMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDEzOAotOjEwMDhEMDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjhCMgotOjEwMDhFMDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDQzOQotOjEwMDhGMDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDBFNAotOjEwMDkwMDAwMDIwMTA1NjQwMDAwMDAzMDAyMDEwMEM4MDAwMDAwMDE3RgotOjEwMDkxMDAwMDIwMTAwRDAwMDAwMDAwMTAyMDEwMEZDMDAwMDAwMDEwMwotOjEwMDkyMDAwMDIwMTAwRjQwMDAwMDAwMTAyMEMxMDAwMDAwMDAwMjA5MQotOjEwMDkzMDAwMDIwQzIwMDgwMDAwMEExMTAyMEMyMDBDMDAwMDBBMDAyMgotOjEwMDk0MDAwMDIwQzIwMTAwMDAwMEEwNDAyMEMyMDFDMDAwMEZGRkYxMwotOjEwMDk1MDAwMDIwQzIwMjAwMDAwRkZGRjAyMEMyMDI0MDAwMEZGRkZGQgotOjEwMDk2MDAwMDIwQzIwMjgwMDAwRkZGRjAyMEMyMDM4MDAwMDAwQzYwNwotOjEwMDk3MDAwMDIwQzIwM0MwMDAwMDAwMDAyMEMyMDQwMDAwMDAwMzQ2QgotOjEwMDk4MDAwMDIwQzIwNDQwMDAwMDAzNTA2MEMyMDQ4MDAwMDAwMUMyQQotOjEwMDk5MDAwMDIwQzIwQjgwMDAwMDAwMTA2MEMyMEJDMDAwMDAwNUYyMwotOjEwMDlBMDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0YzMAotOjEwMDlCMDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY0MAotOjEwMDlDMDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDAzNQotOjEwMDlEMDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDAxNQotOjEwMDlFMDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDBGNQotOjEwMDlGMDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDBENQotOjEwMEEwMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDBCNAotOjEwMEExMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDA5NAotOjEwMEEyMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDA3NAotOjEwMEEzMDAwMDIwQzI0QkMwMDAwMDAwMTBDMEMyMDAwMDAwMDAzRThBNAotOjEwMEE0MDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEEyRQotOjEwMEE1MDAwMDIwQzQwMDgwMDAwMEExMTAyMEM0MDBDMDAwMDBBMDBDMQotOjEwMEE2MDAwMDIwQzQwMTAwMDAwMEEwNDAyMEM0MDE0MDAwMDBBMjE4RAotOjEwMEE3MDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkZBMgotOjEwMEE4MDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkY4MgotOjEwMEE5MDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMDVGQgotOjEwMEFBMDAwMDIwQzQwNDAwMDAwMDAzNDAyMEM0MDQ0MDAwMDAwMzVCRAotOjEwMEFCMDAwMDYwQzQwNDgwMDAwMDA1QzAyMEM0MUI4MDAwMDAwMDEzOAotOjEwMEFDMDAwMDYwQzQxQkMwMDAwMDAxRjAyMEM0MjM4MDdGRkZGRkY2QwotOjEwMEFEMDAwMDIwQzQyM0MwMDAwMDAzRjAyMEM0MjQwMDdGRkZGRkZCNwotOjEwMEFFMDAwMDIwQzQyNDQwMDAwMDAwRjAxMEM0MjQ4MDAwMDAwMDBDQwotOjEwMEFGMDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDBCQwotOjEwMEIwMDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDA5QgotOjEwMEIxMDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDA3QgotOjEwMEIyMDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDA1QgotOjEwMEIzMDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDAzQgotOjEwMEI0MDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDAxQgotOjEwMEI1MDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDBGQgotOjEwMEI2MDAwMDIwQzQ0QzAwMDAwMDAwMTBDMEM0MDAwMDAwMDAzRTgyRgotOjEwMEI3MDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEFCRAotOjEwMEI4MDAwMDIwRDAwNDQwMDAwMDAzMjAyMEQwMDhDMDIxNTAwMjAwRQotOjEwMEI5MDAwMDIwRDAwOTAwMjE1MDAyMDAyMEQwMDk0MDgxMDAwMDBDNAotOjEwMEJBMDAwMDIwRDAwOTgwMDAwMDAzMzAyMEQwMDlDMDAwMDAwMDJCRQotOjEwMEJCMDAwMDIwRDAwQTAwMDAwMDAwMDAyMEQwMEE0MDAwMDAwMDVDRQotOjEwMEJDMDAwMDIwRDAwQTgwMDAwMDAwNTA2MEQwMEFDMDAwMDAwMDJBOAotOjEwMEJEMDAwMDIwRDAwQjQwMDAwMDAwMjAyMEQwMEI4MDAwMDAwMDM4NgotOjEwMEJFMDAwMDIwRDAwQkMwMDAwMDAwMjAyMEQwMEMwMDAwMDAwMDE2OAotOjEwMEJGMDAwMDIwRDAwQzgwMDAwMDAwMjAyMEQwMENDMDAwMDAwMDIzRgotOjEwMEMwMDAwMDIwRDAxMDgwMDAwMDAwMTAyMEQwMTVDMDAwMDAwMDE1RQotOjEwMEMxMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDJFNQotOjEwMEMyMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjA3MQotOjEwMEMzMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDBFRQotOjEwMEM0MDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTgyMwotOjEwMEM1MDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAyNDAyNDI3MQotOjEwMEM2MDAwMDIwRDAwNEMwMDAwMDAwMTAyMEQwMDUwMDAwMDAwMDJDNwotOjEwMEM3MDAwMDIwRDAwNTQwMDAwMDAwODAyMEQwMDU4MDAwMDAwMDg5QQotOjEwMEM4MDAwMDYwRDAwNUMwMDAwMDAwNDAyMEQwMEM0MDAwMDAwMDQxQQotOjEwMEM5MDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTE4MDAwMDAwMjlENgotOjEwMENBMDAwMDIwRDAxMUMwMDAwMDAwQTAyMEQwMTIwMDAwMDAwMkFCNAotOjEwMENCMDAwMDIwRDAxMjQwMDAwMDAwNzAyMEQwMTI4MDAwMDAwMjc5QQotOjEwMENDMDAwMDIwRDAxMkMwMDAwMDAwNzAyMEQwMTMwMDAwMDAwMjc3QQotOjEwMENEMDAwMDIwRDAxMzQwMDAwMDAwQzAyMEQwMTM4MDAwMDAwMkM1MAotOjEwMENFMDAwMDIwRDAxM0MwMDAwMDAwQzAyMEQwMTQwMDAwMDAwMkMzMAotOjEwMENGMDAwMDIwRDAxNDQwMDAwMDAwQzAyMEQwMTQ4MDAwMDAwMkMxMAotOjEwMEQwMDAwMDIwRDAwMDQwMDAwMDAwMTAyMEQwMDA4MDAwMDAwMDFCNwotOjEwMEQxMDAwMDIwRDAwMEMwMDAwMDAwMTAyMEQwMDEwMDAwMDAwMDE5NwotOjEwMEQyMDAwMDIwRDAwMTQwMDAwMDAwMTAyMEQwMDE4MDAwMDAwMDE3NwotOjEwMEQzMDAwMDIwRDAwMUMwMDAwMDAwMTAyMEQwMDIwMDAwMDAwMDE1NwotOjEwMEQ0MDAwMDIwRDAwMjQwMDAwMDAwMTAyMEQwMDI4MDAwMDAwMDEzNwotOjEwMEQ1MDAwMDIwRDAwMkMwMDAwMDAwMTAyMEQwMDMwMDAwMDAwMDExNwotOjEwMEQ2MDAwMDIwRDAwMzQwMDAwMDAwMTAyMEQwMDM4MDAwMDAwMDFGNwotOjEwMEQ3MDAwMDIwRDAwM0MwMDAwMDAwMTAyMEUwMDRDMDAwMDAwMzI5OQotOjEwMEQ4MDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjBBOQotOjEwMEQ5MDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDBBRgotOjEwMERBMDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzA3NAotOjEwMERCMDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDI4NAotOjEwMERDMDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDA5MwotOjEwMEREMDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDI3MwotOjEwMERFMDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDI1NQotOjEwMERGMDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDIyRQotOjEwMEUwMDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDExMwotOjEwMEUxMDAwMDIwRTAwRTQwMDAwMDAwMTAyMEUwMTQ0MDAwMDAwMDE4NwotOjEwMEUyMDAwMDIwRTAxNEMwMDAwMDAwMTAyMEUwMTUwMDAwMDAwMDIwMQotOjEwMEUzMDAwMDIwRTAyMDQwMDAwMDAwMTAyMEUwMjBDMDAwMDAwNDAzRAotOjEwMEU0MDAwMDIwRTAyMTAwMDAwMDA0MDAyMEUwMjFDMDAwMDAwMDQwRQotOjEwMEU1MDAwMDIwRTAyMjAwMDAwMDAyMDAyMEUwMjI0MDAwMDAwMEVGQwotOjEwMEU2MDAwMDIwRTAyMjgwMDAwMDAxQjA2MEUwMzAwMDAwMDAwMTIwNAotOjEwMEU3MDAwMDQwRTAyODAwMDFCMDI2NjAyMEUwMDU0MDAwMDAwMTBFNwotOjEwMEU4MDAwMDIwRTAwNTgwMDAwMDAwNzAyMEUwMDVDMDAwMDAwMEY3OAotOjEwMEU5MDAwMDIwRTAwNjAwMDAwMDAxMDA2MEUwMDY0MDAwMDAwMDQ1NgotOjEwMEVBMDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMTEwMDAwMDAwMEYyMwotOjEwMEVCMDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTE4MDAwMDAwMEVBNwotOjEwMEVDMDAwMDIwRTAxMUMwMDAwMDAyRTAyMEUwMDA0MDAwMDAwMDFCMgotOjEwMEVEMDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDFEQwotOjEwMEVFMDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDFCQwotOjEwMEVGMDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDE5QwotOjEwMEYwMDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDE3QgotOjEwMEYxMDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDE1QgotOjEwMEYyMDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDEzQgotOjEwMEYzMDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDExQgotOjEwMEY0MDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDFGQgotOjEwMEY1MDAwMDczMDA0MDAwMEMzMDAwMDA4MzAwNzY4MDAxMzAyODE1NgotOjEwMEY2MDAwMDczNDAwMDAzMTRDMDAwMDA3MzQ4MDAwMzVFRjBDNTQ4QQotOjEwMEY3MDAwMDczNTAwMDAzNjEzMTlEMDA3MzU4MDAwMDcxMTI3NTVCMwotOjEwMEY4MDAwMDgzNThFRTA0RTI0MDI4MzAxMzAwMDAwMDAwMDAwMDA4RQotOjEwMEY5MDAwMDEzMDAwMDQwMDAwMDAwMDAxMzAwMDA4MDAwMDAwMDBFMwotOjEwMEZBMDAwMDEzMDAwMEMwMDAwMDAwMDAxMzAwMDEwMDAwMDAwMDBDMwotOjEwMEZCMDAwMDEzMDAwMTQwMDAwMDAwMDAyMzAwMDIwMDAwMDAwMDE5OQotOjEwMEZDMDAwMDIzMDAwMjQwMDAwMDAwMjAyMzAwMDI4MDAwMDAwMDM2QwotOjEwMEZEMDAwMDIzMDAwMkMwMDAwMDAwMDAyMzAwMDMwMDAwMDAwMDQ0RAotOjEwMEZFMDAwMDIzMDAwMzQwMDAwMDAwMTAyMzAwMDM4MDAwMDAwMDAzMAotOjEwMEZGMDAwMDIzMDAwM0MwMDAwMDAwMTAyMzAwMDQwMDAwMDAwMDQwQwotOjEwMTAwMDAwMDIzMDAwNDQwMDAwMDAwMDAyMzAwMDQ4MDAwMDAwMDFFRgotOjEwMTAxMDAwMDIzMDAwNEMwMDAwMDAwMzAyMzAwMDUwMDAwMDAwMDBDRAotOjEwMTAyMDAwMDIzMDAwNTQwMDAwMDAwMTAyMzAwMDU4MDAwMDAwMDRBQgotOjEwMTAzMDAwMDIzMDAwNUMwMDAwMDAwMDAyMzAwMDYwMDAwMDAwMDE4RgotOjEwMTA0MDAwMDIzMDAwNjQwMDAwMDAwMzAyMzAwMDY4MDAwMDAwMDA2RAotOjEwMTA1MDAwMDIzMDAwNkMwMDAwMDAwMTAyMzAwMDcwMDAwMDAwMDQ0QgotOjEwMTA2MDAwMDIzMDAwNzQwMDAwMDAwMDAyMzAwMDc4MDAwMDAwMDQyQwotOjEwMTA3MDAwMDIzMDAwN0MwMDAwMDAwMzA2MzAwMDgwMDAwMDAwMDIwNwotOjEwMTA4MDAwMDIzMDAwQTQwMDAwM0ZGRjAyMzAwMEE4MDAwMDAzRkY3MAotOjEwMTA5MDAwMDIzMDAyMjQwMDAwMDAwMDAyMzAwMjM0MDAwMDAwMDA5MAotOjEwMTBBMDAwMDIzMDAyNEMwMDAwMDAwMDAyMzAwMkU0MDAwMEZGRkZBQQotOjEwMTBCMDAwMDYzMDIwMDAwMDAwMDgwMDAyMzM4QkMwMDAwMDAwMDE1MQotOjEwMTBDMDAwMDIzMzgwMDAwMDAwMDAxQTAyMzM4MDQwMDAwMDAwNEUwRQotOjEwMTBEMDAwMDIzMzgwODAwMDAwMDAxMDAyMzM4MEMwMDAwMDAwMjAzNgotOjEwMTBFMDAwMEMzMzgzMDAwMDA3QTEyMDBBMzM4MzAwMDAwMDAxMzg3RAotOjEwMTBGMDAwMEIzMzgzMDAwMDAwMTM4ODAyMzM4M0MwMDAwMDAxRjQyNwotOjEwMTEwMDAwMEMzMzgzODAxRENENjUwMDBBMzM4MzgwMDAwNEM0QjQ5MgotOjEwMTExMDAwMEIzMzgzODAwMDRDNEI0MDA2MzI1MDAwMDAwMDAwQzI2RAotOjEwMTEyMDAwMDYzMjEwMjAwMDAwMDBDODA2MzIxMDAwMDAwMDAwMDI0NQotOjEwMTEzMDAwMDYzMjQ2NDAwMDAwMDA0MDA2MzI1N0YwMDAwMDAwMDQyRQotOjEwMTE0MDAwMDYzMjU3RDgwMDAwMDAwNTA0MzI1N0VDMDAwMTAyODUzMgotOjEwMTE1MDAwMDYzMjFDNjAwMDAwMDAyMDA0MzIyODMwMDAwMjAyODZBMwotOjEwMTE2MDAwMDIzMzA4MDAwMTAwMDAwMDA0MzMwQzAwMDAxMDAyODg2NAotOjEwMTE3MDAwMDIzMzA4MDAwMDAwMDAwMDA0MzMwQzQwMDAxMDAyOTgwNQotOjEwMTE4MDAwMDYzMjE0MDAwMDAwMDBBMDA2MzIxOTAwMDAwMDAwMTAxMgotOjEwMTE5MDAwMDYzMjE5ODAwMDAwMDAzMDA2MzI0NzQwMDAwMDAwQjREQgotOjEwMTFBMDAwMDIzMjFEOTAwMDAwMDAwMDA2MzIxQjQwMDAwMDAwMDRDNwotOjEwMTFCMDAwMDYzMjFCNjAwMDAwMDAyMDA2MzI1MzE4MDAwMDAwOTgyMQotOjEwMTFDMDAwMDYzMjE2ODAwMDAwMDBBMDA2MzIxOTQwMDAwMDAwMTAxMAotOjEwMTFEMDAwMDYzMjFBNDAwMDAwMDAzMDA2MzI0QTEwMDAwMDAwQjQwNwotOjEwMTFFMDAwMDIzMjFEOTQwMDAwMDAwMDA2MzIxQjUwMDAwMDAwMDQ3MwotOjEwMTFGMDAwMDYzMjFCRTAwMDAwMDAyMDA2MzI1NTc4MDAwMDAwOThGRgotOjEwMTIwMDAwMDcyMDA0MDAwMDcxMDAwMDA4MjAwNzgwMDAxMDAyQThEOQotOjEwMTIxMDAwMDcyNDAwMDAzMjI5MDAwMDA3MjQ4MDAwMjM2MzBDOEI4MAotOjEwMTIyMDAwMDgyNEM5MzA2NTQwMDJBQTAxMjAwMDAwMDAwMDAwMDAyNwotOjEwMTIzMDAwMDEyMDAwMDQwMDAwMDAwMDAxMjAwMDA4MDAwMDAwMDA2MAotOjEwMTI0MDAwMDEyMDAwMEMwMDAwMDAwMDAxMjAwMDEwMDAwMDAwMDA0MAotOjEwMTI1MDAwMDEyMDAwMTQwMDAwMDAwMDAyMjAwMDIwMDAwMDAwMDExNgotOjEwMTI2MDAwMDIyMDAwMjQwMDAwMDAwMjAyMjAwMDI4MDAwMDAwMDNFOQotOjEwMTI3MDAwMDIyMDAwMkMwMDAwMDAwMDAyMjAwMDMwMDAwMDAwMDRDQQotOjEwMTI4MDAwMDIyMDAwMzQwMDAwMDAwMTAyMjAwMDM4MDAwMDAwMDBBRAotOjEwMTI5MDAwMDIyMDAwM0MwMDAwMDAwMTAyMjAwMDQwMDAwMDAwMDQ4OQotOjEwMTJBMDAwMDIyMDAwNDQwMDAwMDAwMDAyMjAwMDQ4MDAwMDAwMDE2RAotOjEwMTJCMDAwMDIyMDAwNEMwMDAwMDAwMzAyMjAwMDUwMDAwMDAwMDA0QgotOjEwMTJDMDAwMDIyMDAwNTQwMDAwMDAwMTAyMjAwMDU4MDAwMDAwMDQyOQotOjEwMTJEMDAwMDIyMDAwNUMwMDAwMDAwMDAyMjAwMDYwMDAwMDAwMDEwRAotOjEwMTJFMDAwMDIyMDAwNjQwMDAwMDAwMzAyMjAwMDY4MDAwMDAwMDBFQgotOjEwMTJGMDAwMDIyMDAwNkMwMDAwMDAwMTAyMjAwMDcwMDAwMDAwMDRDOQotOjEwMTMwMDAwMDIyMDAwNzQwMDAwMDAwMDAyMjAwMDc4MDAwMDAwMDRBOQotOjEwMTMxMDAwMDIyMDAwN0MwMDAwMDAwMzA2MjAwMDgwMDAwMDAwMDI4NAotOjEwMTMyMDAwMDIyMDAwQTQwMDAwM0ZGRjAyMjAwMEE4MDAwMDAzRkZFRAotOjEwMTMzMDAwMDIyMDAyMjQwMDAwMDAwMDAyMjAwMjM0MDAwMDAwMDAwRAotOjEwMTM0MDAwMDIyMDAyNEMwMDAwMDAwMDAyMjAwMkU0MDAwMEZGRkYyNwotOjEwMTM1MDAwMDYyMDIwMDAwMDAwMDgwMDAyMjM4QkMwMDAwMDAwMDFDRQotOjEwMTM2MDAwMDIyMzgwMDAwMDAwMDAxMDAyMjM4MDQwMDAwMDAwMTJEMQotOjEwMTM3MDAwMDIyMzgwODAwMDAwMDAzMDAyMjM4MEMwMDAwMDAwMEVBNQotOjEwMTM4MDAwMDIyMzgzQzAwMDAwMDFGNDA2MjI1MDAwMDAwMDAwNDI0NgotOjEwMTM5MDAwMDYyMjEwMjAwMDAwMDBDODA2MjIxMDAwMDAwMDAwMDJGMwotOjEwMTNBMDAwMDYyMjIwMDAwMDAwMDBDMDA2MjIzMDcwMDAwMDAwODBFRAotOjEwMTNCMDAwMDYyMjQyODAwMDAwMDAwNDA2MjIyNUMwMDAwMDAyNDBGMAotOjEwMTNDMDAwMDQyMjJFQzgwMDA4MDJBQzAyMjMwODAwMDEzRkZGRkZFMAotOjEwMTNEMDAwMDQyMzBDMDAwMDEwMDJCNDAyMjMwODAwMDAwMDAwMDBFNwotOjEwMTNFMDAwMDQyMzBDNDAwMDEwMDJDNDA2MjIxNDAwMDAwMDAwQTBEOAotOjEwMTNGMDAwMDYyMjE5MDAwMDAwMDAxMDA2MjIxOTgwMDAwMDAwMzBBQgotOjEwMTQwMDAwMDIyMjUxMTgwMDAwMDAwMDA2MjIyMzAwMDAwMDAwMEVGNgotOjEwMTQxMDAwMDYyMjMwNDAwMDAwMDAwNjA2MjIyNDEwMDAwMDAwMzBBMgotOjEwMTQyMDAwMDYyMjE2ODAwMDAwMDBBMDA2MjIxOTQwMDAwMDAwMTBDRAotOjEwMTQzMDAwMDYyMjFBNDAwMDAwMDAzMDAyMjI1MTFDMDAwMDAwMDA2OQotOjEwMTQ0MDAwMDYyMjIzMzgwMDAwMDAwRTA2MjIzMDU4MDAwMDAwMDY1NQotOjEwMTQ1MDAwMDYyMjI0RDAwMDAwMDAzMDAyMTYxMDAwMDAwMDAwMjBGOAotOjEwMTQ2MDAwMDIxNzAwMDgwMDAwMDAwMjAyMTcwMDJDMDAwMDAwMDMxMQotOjEwMTQ3MDAwMDIxNzAwM0MwMDAwMDAwNDAyMTcwMDQ0MDAwMDAwMDhBRQotOjEwMTQ4MDAwMDIxNzAwNDgwMDAwMDAwMjAyMTcwMDRDMDAwMDAwOTAwNAotOjEwMTQ5MDAwMDIxNzAwNTAwMDAwMDA5MDAyMTcwMDU0MDA4MDAwOTBENgotOjEwMTRBMDAwMDIxNzAwNTgwODE0MDAwMDAyMTcwMDYwMDAwMDAwOEFBQwotOjEwMTRCMDAwMDIxNzAwNjQwMDAwMDA4MDAyMTcwMDY4MDAwMDAwOTAxRQotOjEwMTRDMDAwMDIxNzAwNkMwMDAwMDA4MDAyMTcwMDcwMDAwMDAwMDY4OAotOjEwMTREMDAwMDIxNzAwNzgwMDAwMDdEMDAyMTcwMDdDMDAwMDA3NkM5QwotOjEwMTRFMDAwMDIxNzAwMzgwMDdDMTAwNDAyMTcwMDA0MDAwMDAwMEZFRgotOjEwMTRGMDAwMDYxNjQwMjQwMDAwMDAwMjAyMTY0MDcwMDAwMDAwMUM4NgotOjEwMTUwMDAwMDIxNjQyMDgwMDAwMDAwMTAyMTY0MjEwMDAwMDAwMDEwRAotOjEwMTUxMDAwMDIxNjQyMjAwMDAwMDAwMTAyMTY0MjI4MDAwMDAwMDFDRAotOjEwMTUyMDAwMDIxNjQyMzAwMDAwMDAwMTAyMTY0MjM4MDAwMDAwMDE5RAotOjEwMTUzMDAwMDIxNjQyNjAwMDAwMDAwMTBDMTY0MDFDMDAwM0QwOTAwRgotOjEwMTU0MDAwMEExNjQwMUMwMDAwMDA5QzBCMTY0MDFDMDAwMDA5QzQzOQotOjEwMTU1MDAwMDIxNjQwMzAwMDAwMDAwODAyMTY0MDM0MDAwMDAwMEM2MwotOjEwMTU2MDAwMDIxNjQwMzgwMDAwMDAxMDAyMTY0MDQ0MDAwMDAwMjAxRgotOjEwMTU3MDAwMDIxNjQwMDAwMDAwMDAwMTAyMTY0MEQ4MDAwMDAwMDFFMQotOjEwMTU4MDAwMDIxNjQwMDgwMDAwMDAwMTAyMTY0MDBDMDAwMDAwMDE5NQotOjEwMTU5MDAwMDIxNjQwMTAwMDAwMDAwMTAyMTY0MjQwMDAwMDAwMDA0OAotOjEwMTVBMDAwMDIxNjQyNDgwMDAwMDAwMDA2MTY0MjcwMDAwMDAwMDJDOQotOjEwMTVCMDAwMDIxNjQyNTAwMDAwMDAwMDAyMTY0MjU4MDAwMDAwMDBDRgotOjEwMTVDMDAwMDYxNjQyODAwMDAwMDAwMjAyMTY2MDA4MDAwMDA2MTRBMQotOjEwMTVEMDAwMDIxNjYwMEMwMDAwMDYwMDAyMTY2MDEwMDAwMDA2MDRFRgotOjEwMTVFMDAwMDIxNjYwMUMwMDAwRkZGRjAyMTY2MDIwMDAwMEZGRkZEMwotOjEwMTVGMDAwMDIxNjYwMjQwMDAwRkZGRjAyMTY2MDI4MDAwMEZGRkZCMwotOjEwMTYwMDAwMDIxNjYwMzgwMDAwMDAyMDAyMTY2MDNDMDAwMDAwMjAzNgotOjEwMTYxMDAwMDIxNjYwNDAwMDAwMDAzNDAyMTY2MDQ0MDAwMDAwMzVFRAotOjEwMTYyMDAwMDIxNjYwNDgwMDAwMDAyMzAyMTY2MDRDMDAwMDAwMjRFRgotOjEwMTYzMDAwMDIxNjYwNTAwMDAwMDAyNTAyMTY2MDU0MDAwMDAwMjZDQgotOjEwMTY0MDAwMDIxNjYwNTgwMDAwMDAyNzAyMTY2MDVDMDAwMDAwMjlBNgotOjEwMTY1MDAwMDIxNjYwNjAwMDAwMDAyQTAyMTY2MDY0MDAwMDAwMkI4MQotOjEwMTY2MDAwMDIxNjYwNjgwMDAwMDAyQzAyMTY2MDZDMDAwMDAwMkQ1RAotOjEwMTY3MDAwMDYxNjYwNzAwMDAwMDA1MjAyMTY2MUI4MDAwMDAwMDFGQQotOjEwMTY4MDAwMDYxNjYxQkMwMDAwMDAxRjAyMTY2MjM4MDdGRkZGRkY0QwotOjEwMTY5MDAwMDIxNjYyM0MwMDAwMDAzRjAyMTY2MjQwMDdGRkZGRkY5NwotOjEwMTZBMDAwMDIxNjYyNDQwMDAwMDAwRjAxMTY2MjQ4MDAwMDAwMDBBQwotOjEwMTZCMDAwMDExNjYyNEMwMDAwMDAwMDAxMTY2MjUwMDAwMDAwMDA5QwotOjEwMTZDMDAwMDExNjYyNTQwMDAwMDAwMDAxMTY2MjU4MDAwMDAwMDA3QwotOjEwMTZEMDAwMDExNjYyNUMwMDAwMDAwMDAxMTY2MjYwMDAwMDAwMDA1QwotOjEwMTZFMDAwMDExNjYyNjQwMDAwMDAwMDAxMTY2MjY4MDAwMDAwMDAzQwotOjEwMTZGMDAwMDExNjYyNkMwMDAwMDAwMDAxMTY2MjcwMDAwMDAwMDAxQwotOjEwMTcwMDAwMDExNjYyNzQwMDAwMDAwMDAxMTY2Mjc4MDAwMDAwMDBGQgotOjEwMTcxMDAwMDExNjYyN0MwMDAwMDAwMDAyMTY2NEJDMDAwMDAwMDE5QgotOjEwMTcyMDAwMEMxNjYwMDAwMDAwMDNFODBBMTY2MDAwMDAwMDAwMDFDQgotOjEwMTczMDAwMEIxNjYwMDAwMDAwMDAwQTAyMTY4MDQwMDAwMDAwMDY0MAotOjEwMTc0MDAwMDIxNjgwNDQwMDAwMDAwNTAyMTY4MDQ4MDAwMDAwMEFDRQotOjEwMTc1MDAwMDIxNjgwNEMwMDAwMDAwNTAyMTY4MDU0MDAwMDAwMDJCMgotOjEwMTc2MDAwMDIxNjgwQ0MwMDAwMDAwNDAyMTY4MEQwMDAwMDAwMDRBNQotOjEwMTc3MDAwMDIxNjgwRDQwMDAwMDAwNDAyMTY4MEQ4MDAwMDAwMDQ4NQotOjEwMTc4MDAwMDIxNjgwREMwMDAwMDAwNDAyMTY4MEUwMDAwMDAwMDQ2NQotOjEwMTc5MDAwMDIxNjgwRTQwMDAwMDAwNDAyMTY4MEU4MDAwMDAwMDQ0NQotOjEwMTdBMDAwMDIxNjg4MDQwMDAwMDAwNDAyMTY4MDMwMDAwMDAwN0M0RAotOjEwMTdCMDAwMDIxNjgwMzQwMDAwMDAzRDAyMTY4MDM4MDAwMDAwM0YxMQotOjEwMTdDMDAwMDIxNjgwM0MwMDAwMDA5QzAyMTY4MEYwMDAwMDAwMDcxQQotOjEwMTdEMDAwMDYxNjgwRjQwMDAwMDAwNTAyMTY4ODBDMDEwMTAxMDFDNAotOjEwMTdFMDAwMDIxNjgxMDgwMDAwMDAwMDAyMTY4MTBDMDAwMDAwMDRBRgotOjEwMTdGMDAwMDIxNjgxMTAwMDAwMDAwNDAyMTY4MTE0MDAwMDAwMDI4RAotOjEwMTgwMDAwMDIxNjg4MTAwODAxMjAwNDAyMTY4MTE4MDAwMDAwMDU0NQotOjEwMTgxMDAwMDIxNjgxMUMwMDAwMDAwNTAyMTY4MTIwMDAwMDAwMDU1MAotOjEwMTgyMDAwMDIxNjgxMjQwMDAwMDAwNTAyMTY4ODJDMjAwODEwMDFGMQotOjEwMTgzMDAwMDIxNjgxMjgwMDAwMDAwODAyMTY4MTJDMDAwMDAwMDYxNAotOjEwMTg0MDAwMDIxNjgxMzAwMDAwMDAwNzAyMTY4MTM0MDAwMDAwMDBGQgotOjEwMTg1MDAwMDIxNjg4MzAwMTAxMDEyMDA2MTY4MTM4MDAwMDAwMDRCQwotOjEwMTg2MDAwMDIxNjg4MzQwMTAxMDEwMTA2MTY4MTQ4MDAwMDAwMDRCNwotOjEwMTg3MDAwMDIxNjg4MzgwMTAxMDEwMTA2MTY4MTU4MDAwMDAwMDQ5MwotOjEwMTg4MDAwMDIxNjg4M0MwMTAxMDEwMTA2MTY4MTY4MDAwMDAwMDM3MAotOjEwMTg5MDAwMDIxNjgxNzQwMDAwMDAwMTAyMTY4ODQwMDEwMTAxMDE1NgotOjEwMThBMDAwMDIxNjgxNzgwMDAwMDAwMTAyMTY4MTdDMDAwMDAwMDExMAotOjEwMThCMDAwMDIxNjgxODAwMDAwMDAwMTAyMTY4MTg0MDAwMDAwMDFGMAotOjEwMThDMDAwMDIxNjg4NDQwMTAxMDEwMTAyMTY4MTg4MDAwMDAwMDEwRQotOjEwMThEMDAwMDIxNjgxOEMwMDAwMDAwNDAyMTY4MTkwMDAwMDAwMDRCMgotOjEwMThFMDAwMDIxNjgxOTQwMDAwMDAwMjAyMTY4ODQ4MDgwMTIwMDRCNAotOjEwMThGMDAwMDIxNjgxOTgwMDAwMDAwNTAyMTY4MTlDMDAwMDAwMDU3OAotOjEwMTkwMDAwMDIxNjgxQTAwMDAwMDAwNTAyMTY4MUE0MDAwMDAwMDU1NwotOjEwMTkxMDAwMDIxNjg4MTQyMDA4MTAwMTAyMTY4MUE4MDAwMDAwMDg5MQotOjEwMTkyMDAwMDIxNjgxQUMwMDAwMDAwNjAyMTY4MUIwMDAwMDAwMDcxQwotOjEwMTkzMDAwMDIxNjgxQjQwMDAwMDAwMTAyMTY4ODE4MDEwMTAxMjA3RQotOjEwMTk0MDAwMDIxNjgxQjgwMDAwMDAwMTAyMTY4MUJDMDAwMDAwMDFFRgotOjEwMTk1MDAwMDIxNjgxQzAwMDAwMDAwMTAyMTY4MUM0MDAwMDAwMDFDRgotOjEwMTk2MDAwMDIxNjg4MUMwMTAxMDEwMTAyMTY4MUM4MDAwMDAwMDE1NQotOjEwMTk3MDAwMDIxNjgxQ0MwMDAwMDAwMTAyMTY4MUQwMDAwMDAwMDE5NwotOjEwMTk4MDAwMDIxNjgxRDQwMDAwMDAwMTAyMTY4ODIwMDEwMTAxMDEyNQotOjEwMTk5MDAwMDIxNjgxRDgwMDAwMDAwMTAyMTY4MURDMDAwMDAwMDE1RgotOjEwMTlBMDAwMDIxNjgxRTAwMDAwMDAwMTAyMTY4MUU0MDAwMDAwMDEzRgotOjEwMTlCMDAwMDIxNjg4MjQwMTAxMDEwMTAyMTY4MUU4MDAwMDAwMDFERAotOjEwMTlDMDAwMDIxNjgxRUMwMDAwMDAwMTAyMTY4MUYwMDAwMDAwMDEwNwotOjEwMTlEMDAwMDIxNjg4MjgwMTAxMDEwMTAyMTY4MjQwRkZGRjAwM0YyNAotOjEwMTlFMDAwMDYxNjgyNDQwMDAwMDAwMjAyMTY4MjRDRkZGRjAwM0ZGMAotOjEwMTlGMDAwMDIxNjgyNTAwMDAwMDEwMDAyMTY4MjU0MDAwMDAxMDAwRAotOjEwMUEwMDAwMDYxNjgyNTgwMDAwMDAwMjAyMTY4MjYwMDAwMDAwQzAyNAotOjEwMUExMDAwMDIxNjgyNjQwMDAwMDBDMDAyMTY4MjY4MDAwMDFFMDBFOAotOjEwMUEyMDAwMDIxNjgyNkMwMDAwMUUwMDAyMTY4MjcwMDAwMDQwMDA0OAotOjEwMUEzMDAwMDIxNjgyNzQwMDAwNDAwMDAyMTY4Mjc4MDAwMDgwMDBDNgotOjEwMUE0MDAwMDIxNjgyN0MwMDAwODAwMDAyMTY4MjgwMDAwMDIwMDBDNgotOjEwMUE1MDAwMDIxNjgyODQwMDAwMjAwMDA2MTY4Mjg4MDAwMDAwMDcxQgotOjEwMUE2MDAwMDIxNjgyQTQwMDAwMDAwMTA2MTY4MkE4MDAwMDAwMEFFNwotOjEwMUE3MDAwMDIxNjgxRjQwMDAwMEMwODAyMTY4MUY4MDAwMDAwNDBGNAotOjEwMUE4MDAwMDIxNjgxRkMwMDAwMDEwMDAyMTY4MjAwMDAwMDAwMjAwNgotOjEwMUE5MDAwMDIxNjgyMDQwMDAwMDAxNzAyMTY4MjA4MDAwMDAwODA2RgotOjEwMUFBMDAwMDIxNjgyMEMwMDAwMDIwMDAyMTY4MjEwMDAwMDAwMDBFNAotOjEwMUFCMDAwMDIxNjgyMThGRkZGMDFGRjAyMTY4MjE0RkZGRjAxRkZDQQotOjEwMUFDMDAwMDIxNjgyM0MwMDAwMDAxMzAyMTY4MDkwMDAwMDAxM0ZDNQotOjEwMUFEMDAwMDIxNjgwNjAwMDAwMDE0MDAyMTY4MDY0MDAwMDAxNDA5MAotOjEwMUFFMDAwMDYxNjgwNjgwMDAwMDAwMjAyMTY4MDcwMDAwMDAwQzAyOAotOjEwMUFGMDAwMDYxNjgwNzQwMDAwMDAwNzAyMTY4MDlDMDAwMDAwNDg1MwotOjEwMUIwMDAwMDIxNjgwQTAwMDAwMDA0ODA2MTY4MEE0MDAwMDAwMDIxMwotOjEwMUIxMDAwMDIxNjgwQUMwMDAwMDA0ODA2MTY4MEIwMDAwMDAwMDdFNgotOjEwMUIyMDAwMDIxNjgyMzgwMDAwODAwMDAyMTY4MjM0MDAwMDI1RTQ4QwotOjEwMUIzMDAwMDIxNjgwOTQwMDAwN0ZGRjAyMTY4MjIwMDAwMDAwMDczQQotOjEwMUI0MDAwMDIxNjgyMUMwMDAwMDAwNzAyMTY4MjI4MDAwMDAwMDAxNgotOjEwMUI1MDAwMDIxNjgyMjRGRkZGRkZGRjAyMTY4MjMwMDAwMDAwMDAwMQotOjEwMUI2MDAwMDIxNjgyMkNGRkZGRkZGRjAyMTY4MEVDMDAwMDAwRkYzMAotOjEwMUI3MDAwMDIxNDAwMDAwMDAwMDAwMTAyMTQwMDBDMDAwMDAwMDEyQgotOjEwMUI4MDAwMDIxNDAwNDAwMDAwMDAwMTAyMTQwMDQ0MDAwMDdGRkYyNgotOjEwMUI5MDAwMDIxNDAwMEMwMDAwMDAwMDAyMTQwMDAwMDAwMDAwMDAwRAotOjEwMUJBMDAwMDIxNDAwNkMwMDAwMDAwMDAyMTQwMDA0MDAwMDAwMDE5OAotOjEwMUJCMDAwMDIxNDAwMzAwMDAwMDAwMTAyMTQwMDA0MDAwMDAwMDBDNAotOjEwMUJDMDAwMDIxNDAwNUMwMDAwMDAwMDAyMTQwMDA4MDAwMDAwMDE4NAotOjEwMUJEMDAwMDIxNDAwMzQwMDAwMDAwMTAyMTQwMDA4MDAwMDAwMDA5QwotOjEwMUJFMDAwMDIxNDAwNjAwMDAwMDAwMDAyMDIwMDU4MDAwMDAwMzJGMQotOjEwMUJGMDAwMDIwMjAwQTAwMzE1MDAyMDAyMDIwMEE0MDMxNTAwMjAyOQotOjEwMUMwMDAwMDIwMjAwQTgwMTAwMDAzMDAyMDIwMEFDMDgxMDAwMDAyRgotOjEwMUMxMDAwMDIwMjAwQjAwMDAwMDAzMzAyMDIwMEI0MDAwMDAwMzBGNQotOjEwMUMyMDAwMDIwMjAwQjgwMDAwMDAzMTAyMDIwMEJDMDAwMDAwMDMwNAotOjEwMUMzMDAwMDIwMjAwQzAwMDAwMDAwNjAyMDIwMEM0MDAwMDAwMDMwRgotOjEwMUM0MDAwMDIwMjAwQzgwMDAwMDAwMzAyMDIwMENDMDAwMDAwMDJGMwotOjEwMUM1MDAwMDIwMjAwRDAwMDAwMDAwMDAyMDIwMEQ0MDAwMDAwMDJENgotOjEwMUM2MDAwMDIwMjAwREMwMDAwMDAwMDAyMDIwMEUwMDAwMDAwMDZBQQotOjEwMUM3MDAwMDIwMjAwRTQwMDAwMDAwNDAyMDIwMEU4MDAwMDAwMDI4QQotOjEwMUM4MDAwMDIwMjAwRUMwMDAwMDAwMjAyMDIwMEYwMDAwMDAwMDE2RAotOjEwMUM5MDAwMDIwMjAwRkMwMDAwMDAwNjAyMDIwMTIwMDAwMDAwMDAxOQotOjEwMUNBMDAwMDIwMjAxMzQwMDAwMDAwMjAyMDIwMUIwMDAwMDAwMDE0MwotOjEwMUNCMDAwMDIwMjAyMEMwMDAwMDAwMTAyMDIwMjE0MDAwMDAwMDFGNgotOjEwMUNDMDAwMDIwMjAyMTgwMDAwMDAwMjAyMDIwNDA0MDAwMDAwMDFFNwotOjEwMUNEMDAwMDIwMjA0MEMwMDAwMDA0MDAyMDIwNDEwMDAwMDAwNDA1OAotOjEwMUNFMDAwMDIwMjA0MUMwMDAwMDAwNDAyMDIwNDIwMDAwMDAwMjA4NAotOjEwMUNGMDAwMDIwMjA0MjQwMDAwMDAwMjAyMDIwNDI4MDAwMDAwMUY2NwotOjEwMUQwMDAwMDYwMjA1MDAwMDAwMDAxMjA0MDIwNDgwMDAxRjAyRDQzNQotOjEwMUQxMDAwMDIwMjAwNjAwMDAwMDAwRjAyMDIwMDY0MDAwMDAwMDdFMQotOjEwMUQyMDAwMDIwMjAwNjgwMDAwMDAwQjAyMDIwMDZDMDAwMDAwMEVCRQotOjEwMUQzMDAwMDYwMjAwNzAwMDAwMDAwNDAyMDIwMEY0MDAwMDAwMDQyQgotOjEwMUQ0MDAwMDIwMjAwMDQwMDAwMDAwMTAyMDIwMDA4MDAwMDAwMDE3RAotOjEwMUQ1MDAwMDIwMjAwMEMwMDAwMDAwMTAyMDIwMDEwMDAwMDAwMDE1RAotOjEwMUQ2MDAwMDIwMjAwMTQwMDAwMDAwMTAyMDIwMDE4MDAwMDAwMDEzRAotOjEwMUQ3MDAwMDIwMjAwMUMwMDAwMDAwMTAyMDIwMDIwMDAwMDAwMDExRAotOjEwMUQ4MDAwMDIwMjAwMjQwMDAwMDAwMTAyMDIwMDI4MDAwMDAwMDFGRAotOjEwMUQ5MDAwMDIwMjAwMkMwMDAwMDAwMTAyMDIwMDMwMDAwMDAwMDFERAotOjEwMURBMDAwMDIwMjAwMzQwMDAwMDAwMTAyMDIwMDM4MDAwMDAwMDFCRAotOjEwMURCMDAwMDIwMjAwM0MwMDAwMDAwMTAyMDIwMDQwMDAwMDAwMDE5RAotOjEwMURDMDAwMDIwMjAwNDQwMDAwMDAwMTAyMDIwMDQ4MDAwMDAwMDE3RAotOjEwMUREMDAwMDIwMjAwNEMwMDAwMDAwMTAyMDIwMDUwMDAwMDAwMDE1RAotOjEwMURFMDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDJGRgotOjEwMURGMDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDA0OQotOjEwMUUwMDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDIxNAotOjEwMUUxMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkZFQQotOjEwMUUyMDAwMDIwMjAxMEMwMDAwMDBDODAyMDIwMTFDMDAwMDAwMDJCNgotOjEwMUUzMDAwMDIwMjAxQzgwMDAwMDAwMDAyMDIwMUQwMDAwMDAwMDAwMAotOjEwMUU0MDAwMDIwMjAxRDgwMDAwMDAwMjAyMDIwMUUwMDAwMDAwMDJDQwotOjEwMUU1MDAwMDIwMjAxRTgwMDAwMDBGRjAyMDIwMUYwMDAwMDAwRkZBMgotOjEwMUU2MDAwMDcyODA0MDAwMEI1MDAwMDA4MjgwNzY4MDAxMzAyRjNFMwotOjEwMUU3MDAwMDcyQzAwMDAzMzY2MDAwMDA3MkM4MDAwMzhCMzBDREExMgotOjEwMUU4MDAwMDcyRDAwMDAzQkIxMUIwNzA3MkQ4MDAwMkEyNjI5RjRFRgotOjEwMUU5MDAwMDgyREQ2QzA0NTI4MDJGNTAxMjgwMDAwMDAwMDAwMDBFQQotOjEwMUVBMDAwMDEyODAwMDQwMDAwMDAwMDAxMjgwMDA4MDAwMDAwMDBENAotOjEwMUVCMDAwMDEyODAwMEMwMDAwMDAwMDAxMjgwMDEwMDAwMDAwMDBCNAotOjEwMUVDMDAwMDEyODAwMTQwMDAwMDAwMDAyMjgwMDIwMDAwMDAwMDE4QQotOjEwMUVEMDAwMDIyODAwMjQwMDAwMDAwMjAyMjgwMDI4MDAwMDAwMDM1RAotOjEwMUVFMDAwMDIyODAwMkMwMDAwMDAwMDAyMjgwMDMwMDAwMDAwMDQzRQotOjEwMUVGMDAwMDIyODAwMzQwMDAwMDAwMTAyMjgwMDM4MDAwMDAwMDAyMQotOjEwMUYwMDAwMDIyODAwM0MwMDAwMDAwMTAyMjgwMDQwMDAwMDAwMDRGQwotOjEwMUYxMDAwMDIyODAwNDQwMDAwMDAwMDAyMjgwMDQ4MDAwMDAwMDFFMAotOjEwMUYyMDAwMDIyODAwNEMwMDAwMDAwMzAyMjgwMDUwMDAwMDAwMDBCRQotOjEwMUYzMDAwMDIyODAwNTQwMDAwMDAwMTAyMjgwMDU4MDAwMDAwMDQ5QwotOjEwMUY0MDAwMDIyODAwNUMwMDAwMDAwMDAyMjgwMDYwMDAwMDAwMDE4MAotOjEwMUY1MDAwMDIyODAwNjQwMDAwMDAwMzAyMjgwMDY4MDAwMDAwMDA1RQotOjEwMUY2MDAwMDIyODAwNkMwMDAwMDAwMTAyMjgwMDcwMDAwMDAwMDQzQwotOjEwMUY3MDAwMDIyODAwNzQwMDAwMDAwMDAyMjgwMDc4MDAwMDAwMDQxRAotOjEwMUY4MDAwMDIyODAwN0MwMDAwMDAwMzA2MjgwMDgwMDAwMDAwMDJGOAotOjEwMUY5MDAwMDIyODAwQTQwMDAwM0ZGRjAyMjgwMEE4MDAwMDAzRkY2MQotOjEwMUZBMDAwMDIyODAyMjQwMDAwMDAwMDAyMjgwMjM0MDAwMDAwMDA4MQotOjEwMUZCMDAwMDIyODAyNEMwMDAwMDAwMDAyMjgwMkU0MDAwMEZGRkY5QgotOjEwMUZDMDAwMDYyODIwMDAwMDAwMDgwMDAyMkI4QkMwMDAwMDAwMDE0MgotOjEwMUZEMDAwMDIyQjgwMDAwMDAwMDAwMDAyMkI4MDQwMDAwMDAwMTg0RgotOjEwMUZFMDAwMDIyQjgwODAwMDAwMDAwQzAyMkI4MEMwMDAwMDAwNjZFNQotOjEwMUZGMDAwMEMyQjgzMDAwMDA3QTEyMDBBMkI4MzAwMDAwMDAxMzg2RQotOjEwMjAwMDAwMEIyQjgzMDAwMDAwMTM4ODAyMkI4M0MwMDAwMDAxRjQxNwotOjEwMjAxMDAwMEMyQjgzNDAwMDAwMDFGNDBBMkI4MzQwMDAwMDAwMDBEOQotOjEwMjAyMDAwMEIyQjgzNDAwMDAwMDAwNTBBMkI4MzgwMDAwNEM0QjRGRQotOjEwMjAzMDAwMEMyQjgzODAxRENENjUwMDBCMkI4MzgwMDA0QzRCNDAwNwotOjEwMjA0MDAwMDYyQTNENjAwMDAwMDAwNDA0MkEzRDcwMDAwMjAyRjdFOQotOjEwMjA1MDAwMDYyQTMwMDAwMDAwMDA0ODA2MkExMDIwMDAwMDAwQzhCMAotOjEwMjA2MDAwMDYyQTEwMDAwMDAwMDAwMjA2MkEzMTI4MDAwMDAwOEUxNwotOjEwMjA3MDAwMDIyQTMzNjgwMDAwMDAwMDA0MkEzMzcwMDAwMjAyRjlDQgotOjEwMjA4MDAwMDQyQTNCOTAwMDA0MDJGQjA0MkEzRTIwMDAwMjAyRkZDNwotOjEwMjA5MDAwMDIyQTE1MTgwMDAwMDAwMTAyMkExODMwMDAwMDAwMDA3MgotOjEwMjBBMDAwMDIyQTE4MzgwMDAwMDAwMDA0MkExODIwMDAwMjAzMDE0OAotOjEwMjBCMDAwMDYyQTRBQzAwMDAwMDAwMjA2MkE0QjAwMDAwMDAwMDQ2NQotOjEwMjBDMDAwMDQyQTFGNDgwMDAyMDMwMzAyMkIwODAwMDAwMDAwMDAzRQotOjEwMjBEMDAwMDQyQjBDMDAwMDEwMDMwNTAyMkIwODAwMDEwMDAwMDA3NwotOjEwMjBFMDAwMDQyQjBDNDAwMDA4MDMxNTAyMkIwODAwMDIwMDAwMDAxRQotOjEwMjBGMDAwMDQyQjBDNjAwMDA4MDMxRDA2MkEzQkEwMDAwMDAwMTRGRQotOjEwMjEwMDAwMDYyQTNDNDAwMDAwMDAyNDA2MkExNDAwMDAwMDAwMEFCMQotOjEwMjExMDAwMDYyQTE0NTAwMDAwMDAwNjA2MkEzMzc4MDAwMDAwRkM0RQotOjEwMjEyMDAwMDIyQTNCNTgwMDAwMDAwMDA0MkEzRDc4MDAwMjAzMjVFMwotOjEwMjEzMDAwMDQyQTNEODgwMDEwMDMyNzAyMkExNTAwMDAwMDAwMDAzMQotOjEwMjE0MDAwMDIyQTE1MDgwMDAwMDAwMTA2MkE1MDIwMDAwMDAwMDJBMwotOjEwMjE1MDAwMDYyQTUwMzAwMDAwMDAwMjA2MkE1MDAwMDAwMDAwMDI0QgotOjEwMjE2MDAwMDYyQTUwMTAwMDAwMDAwMjAyMkE1MDQwMDAwMDAwMDAyMQotOjEwMjE3MDAwMDYyQTUwNDgwMDAwMDAwRTAyMkE1MEI4MDAwMDAwMDE1NAotOjEwMjE4MDAwMDQyQTRBQzgwMDAyMDMzNzA2MkE0QjEwMDAwMDAwNDIwNgotOjEwMjE5MDAwMDYyQTREMjAwMDAwMDAwNDA2MkEzQkYwMDAwMDAwMTQyRgotOjEwMjFBMDAwMDYyQTNDRDAwMDAwMDAyNDA2MkExNDI4MDAwMDAwMEE1OQotOjEwMjFCMDAwMDYyQTE0NjgwMDAwMDAwNjA2MkEzNzY4MDAwMDAwRkNBMgotOjEwMjFDMDAwMDIyQTNCNUMwMDAwMDAwMDA0MkEzRDgwMDAwMjAzMzkyMwotOjEwMjFEMDAwMDQyQTNEQzgwMDEwMDMzQjAyMkExNTA0MDAwMDAwMDAzOQotOjEwMjFFMDAwMDIyQTE1MEMwMDAwMDAwMTA2MkE1MDI4MDAwMDAwMDJGNwotOjEwMjFGMDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDI5QgotOjEwMjIwMDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MDQ0MDAwMDAwMDA3NAotOjEwMjIxMDAwMDYyQTUwODAwMDAwMDAwRTAyMkE1MEJDMDAwMDAwMDE3NwotOjEwMjIyMDAwMDQyQTRBRDAwMDAyMDM0QjA2MkE0QzE4MDAwMDAwNDI0MAotOjEwMjIzMDAwMDYyQTREMzAwMDAwMDAwNDAyMTAxMDA4MDAwMDAwMDFDMgotOjEwMjI0MDAwMDIxMDEwMDAwMDAzRDAwMDAyMTAxMDA0MDAwMDAwM0QzNgotOjEwMjI1MDAwMDkxMDE4MDAwMjAwMDM0RDA5MTAxMTAwMDAyMDA1NEQ1RgotOjEwMjI2MDAwMDYxMDExODAwMDAwMDAwMjA5MTAxMTg4MDAwNjA1NkQ5QgotOjEwMjI3MDAwMDYxMDExQTAwMDAwMDAxODA2MTAyNDAwMDAwMDAwRTA2NQotOjEwMjI4MDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDFBRAotOjEwMjI5MDAwMDIxMDIwQzAwMDAwMDAwMTAyMTAyMDA0MDAwMDAwMDExNAotOjEwMjJBMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA1NzMyMQotOjEwMjJCMDAwMDkxMDNDMjAwMDA1MDU3ODA5MTAzODAwMDAwNTA1N0Q0RgotOjEwMjJDMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkZCMAotOjEwMjJEMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEFGNgotOjEwMjJFMDAwMDIxMDQwNTgwMDAwMDAwMDA2MTA4MDY4MDAwMDAwMDQ0MgotOjEwMjJGMDAwMDIxMDgwMDAwMDAwMTA4MDA2MTA4MDI4MDAwMDAwMDJGQwotOjEwMjMwMDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MDQwMDAwMEZGRkYyMwotOjEwMjMxMDAwMDIxMDgwNDQwMDAwRkZGRjAyMTA4MDUwMDAwMDAwMDAwNwotOjEwMjMyMDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDI2MQotOjEwMjMzMDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDBBQQotOjEwMjM0MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkYxMQotOjEwMjM1MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODA3OAotOjEwMjM2MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE5MgotOjEwMjM3MDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEE0NQotOjEwMjM4MDAwMDIxMDgwMDQwMDAwMTA4MDA2MTA4MDMwMDAwMDAwMDI1RgotOjEwMjM5MDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MDQ4MDAwMEZGRkY4NwotOjEwMjNBMDAwMDIxMDgwNEMwMDAwRkZGRjAyMTA4MDU0MDAwMDAwMDA2QgotOjEwMjNCMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDJDNQotOjEwMjNDMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDAxMgotOjEwMjNEMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkY3QgotOjEwMjNFMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODBEQwotOjEwMjNGMDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEE0OQotOjEwMjQwMDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEE2MgotOjEwMjQxMDAwMDIxMjA0OTAwMEUzODM0MDAyMTIwNTE0MDAwMDNDMTBGNQotOjEwMjQyMDAwMDIxMjA0OTRGRkZGRkZGRjAyMTIwNDk4RkZGRkZGRkY1OAotOjEwMjQzMDAwMDIxMjA0OUNGRkZGRkZGRjAyMTIwNEEwRkZGRkZGRkYzOAotOjEwMjQ0MDAwMDIxMjA0QTRGRkZGRkZGRjAyMTIwNEE4RkZGRkZGRkYxOAotOjEwMjQ1MDAwMDIxMjA0QUNGRkZGRkZGRjAyMTIwNEIwRkZGRkZGRkZGOAotOjEwMjQ2MDAwMDIxMjA0QjhGRkZGRkZGRjAyMTIwNEJDRkZGRkZGRkZEMAotOjEwMjQ3MDAwMDIxMjA0QzBGRkZGRkZGRjAyMTIwNEM0RkZGRkZGRkZCMAotOjEwMjQ4MDAwMDIxMjA0QzhGRkZGRkZGRjAyMTIwNENDRkZGRkZGRkY5MAotOjEwMjQ5MDAwMDIxMjA0RDBGRkZGRkZGRjAyMTIwNERDRkZGRkZGRkY2OAotOjEwMjRBMDAwMDIxMjA0RTBGRkZGRkZGRjAyMTIwNEU0RkZGRkZGRkY0MAotOjEwMjRCMDAwMDIxMjA0RThGRkZGRkZGRjAyMTIwNEVDRkZGRkZGRkYyMAotOjEwMjRDMDAwMDIxMjA0RjBGRkZGRkZGRjAyMTIwNEY0RkZGRkZGRkYwMAotOjEwMjREMDAwMDIxMjA0RjhGRkZGRkZGRjAyMTIwNEZDRkZGRkZGRkZFMAotOjEwMjRFMDAwMDIxMjA1MDBGRkZGRkZGRjAyMTIwNTA0RkZGRkZGRkZCRQotOjEwMjRGMDAwMDIxMjA1MDhGRkZGRkZGRjAyMTIwNTBDRkZGRkZGRkY5RQotOjEwMjUwMDAwMDIxMjA1MTBGRkZGRkZGRjAyMTIwNEQ0RkZGRjMzMzA1OQotOjEwMjUxMDAwMDIxMjA0RDhGRkZGMzM0MDAyMTIwNEI0RjAwMDMwMDA2RQotOjEwMjUyMDAwMDIxMjAzOTAwMDAwMDAwODAyMTIwMzlDMDAwMDAwMDg0MQotOjEwMjUzMDAwMDIxMjAzQTAwMDAwMDAwODAyMTIwM0E0MDAwMDAwMDIxRgotOjEwMjU0MDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0MwMDAwMDAwMDVEOAotOjEwMjU1MDAwMDIxMjAzQzQwMDAwMDAwNDAyMTIwM0QwMDAwMDAwMDBCNQotOjEwMjU2MDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMzY4MDAwMDAwM0YyOQotOjEwMjU3MDAwMDIxMjAxQkMwMDAwMDA0MDAyMTIwMUMwMDAwMDE4MDg1NQotOjEwMjU4MDAwMDIxMjAxQzQwMDAwMDgwMzAyMTIwMUM4MDAwMDA4MDM3RgotOjEwMjU5MDAwMDIxMjAxQ0MwMDAwMDA0MDAyMTIwMUQwMDAwMDAwMDMzMgotOjEwMjVBMDAwMDIxMjAxRDQwMDAwMDgwMzAyMTIwMUQ4MDAwMDA4MDMzRgotOjEwMjVCMDAwMDIxMjAxREMwMDAwMDgwMzAyMTIwMUUwMDAwMTAwMDMyNgotOjEwMjVDMDAwMDIxMjAxRTQwMDAwMDgwMzAyMTIwMUU4MDAwMDA4MDNGRgotOjEwMjVEMDAwMDIxMjAxRUMwMDAwMDAwMzAyMTIwMUYwMDAwMDAwMDNFRgotOjEwMjVFMDAwMDIxMjAxRjQwMDAwMDAwMzAyMTIwMUY4MDAwMDAwMDNDRgotOjEwMjVGMDAwMDIxMjAxRkMwMDAwMDAwMzAyMTIwMjAwMDAwMDAwMDNBRQotOjEwMjYwMDAwMDIxMjAyMDQwMDAwMDAwMzAyMTIwMjA4MDAwMDAwMDM4QwotOjEwMjYxMDAwMDIxMjAyMEMwMDAwMDAwMzAyMTIwMjEwMDAwMDAwMDM2QwotOjEwMjYyMDAwMDIxMjAyMTQwMDAwMDAwMzAyMTIwMjE4MDAwMDAwMDM0QwotOjEwMjYzMDAwMDIxMjAyMUMwMDAwMDAwMzAyMTIwMjIwMDAwMDAwMDMyQwotOjEwMjY0MDAwMDIxMjAyMjQwMDAwMDAwMzAyMTIwMjI4MDAwMDI0MDNFOAotOjEwMjY1MDAwMDIxMjAyMkMwMDAwMDAyRjAyMTIwMjMwMDAwMDAwMDlCQQotOjEwMjY2MDAwMDIxMjAyMzQwMDAwMDAxOTAyMTIwMjM4MDAwMDAxODQzNAotOjEwMjY3MDAwMDIxMjAyM0MwMDAwMDE4MzAyMTIwMjQwMDAwMDAzMDYyNQotOjEwMjY4MDAwMDIxMjAyNDQwMDAwMDAxOTAyMTIwMjQ4MDAwMDAwMDY3MwotOjEwMjY5MDAwMDIxMjAyNEMwMDAwMDMwNjAyMTIwMjUwMDAwMDAzMDY2MAotOjEwMjZBMDAwMDIxMjAyNTQwMDAwMDMwNjAyMTIwMjU4MDAwMDBDODZCNwotOjEwMjZCMDAwMDIxMjAyNUMwMDAwMDMwNjAyMTIwMjYwMDAwMDAzMDYyMAotOjEwMjZDMDAwMDIxMjAyNjQwMDAwMDAwNjAyMTIwMjY4MDAwMDAwMDYwNgotOjEwMjZEMDAwMDIxMjAyNkMwMDAwMDAwNjAyMTIwMjcwMDAwMDAwMDZFNgotOjEwMjZFMDAwMDIxMjAyNzQwMDAwMDAwNjAyMTIwMjc4MDAwMDAwMDZDNgotOjEwMjZGMDAwMDIxMjAyN0MwMDAwMDAwNjAyMTIwMjgwMDAwMDAwMDZBNgotOjEwMjcwMDAwMDIxMjAyODQwMDAwMDAwNjAyMTIwMjg4MDAwMDAwMDY4NQotOjEwMjcxMDAwMDIxMjAyOEMwMDAwMDAwNjAyMTIwMjkwMDAwMDAwMDY2NQotOjEwMjcyMDAwMDIxMjAyOTQwMDAwMDAwNjAyMTIwMjk4MDAwMDAwMDY0NQotOjEwMjczMDAwMDIxMjAyOUMwMDAwMDAwNjAyMTIwMkEwMDAwMDAzMDYyMgotOjEwMjc0MDAwMDIxMjAyQTQwMDAwMDAxMzAyMTIwMkE4MDAwMDAwMDZGOAotOjEwMjc1MDAwMDIxMjAyQjAwMDAwMTAwNDAyMTIwMkI0MDAwMDEwMDRDMQotOjEwMjc2MDAwMDIxMjAzMjQwMDEwNjQ0MDAyMTIwMzI4MDAxMDY0NDA4NwotOjEwMjc3MDAwMDIxMjAxQjAwMDAwMDAwMTA2MDBBMDAwMDAwMDAwMTZENwotOjEwMjc4MDAwMDIwMEEwNkNCRjVDMDAwMDAyMDBBMDcwRkZGNTFGRUYwQwotOjEwMjc5MDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4NTAwMDAzRTBEOAotOjEwMjdBMDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDA0OQotOjEwMjdCMDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDBDMQotOjEwMjdDMDAwMDYwMEEwOUMwMDAwMDAxNDAyMDBBMEVDNTU1NDAwMDA3QwotOjEwMjdEMDAwMDIwMEEwRjA1NTU1NTU1NTAyMDBBMEY0MDAwMDU1NTVEMwotOjEwMjdFMDAwMDIwMEEwRjgwMDAwMDAwMDAyMDBBMEZDNTU1NDAwMDAwOAotOjEwMjdGMDAwMDIwMEExMDA1NTU1NTU1NTAyMDBBMTA0MDAwMDU1NTU5MQotOjEwMjgwMDAwMDIwMEExMDgwMDAwMDAwMDAyMDBBMjJDMDAwMDAwMDA0RAotOjEwMjgxMDAwMDYwMEEyMzAwMDAwMDAwMzAyMDBBMDYwMDAwMDAwMDdENAotOjEwMjgyMDAwMDIwMEExMENCRjVDMDAwMDAyMDBBMTEwRkZGNTFGRUYyOQotOjEwMjgzMDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4NTAwMDAzRTBGNQotOjEwMjg0MDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDA2NgotOjEwMjg1MDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDBERQotOjEwMjg2MDAwMDYwMEExM0MwMDAwMDAxNDAyMDBBMThDNTU1NDAwMDA5OQotOjEwMjg3MDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTVGMAotOjEwMjg4MDAwMDIwMEExOTgwMDAwMDAwMDAyMDBBMTlDNTU1NDAwMDAyNQotOjEwMjg5MDAwMDIwMEExQTA1NTU1NTU1NTAyMDBBMUE0MDAwMDU1NTVCMAotOjEwMjhBMDAwMDIwMEExQTgwMDAwMDAwMDAyMDBBMjNDMDAwMDAwMDBGRAotOjEwMjhCMDAwMDYwMEEyNDAwMDAwMDAwMzAyMDBBMDY0MDAwMDAwMDcyMAotOjEwMjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFMDAwMDAwMDBEQQotOjEwMjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAotOjEwMjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAotOjEwMjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAotOjEwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNwotOjEwMjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNwotOjEwMjkyMDAwMDAyRTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQotOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NwotOjEwMjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwOERBQQotOjEwMjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwMjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQwMDkyMDA5MjAwOTYxMAotOjEwMjk4MDAwMDA5NjAwOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNwotOjEwMjlBMDAwMDAwMDAwMDAwMDlBMDBEQjAwREIwMEU5MDBFOTAwRjcwRQotOjEwMjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNwotOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotOjEwMjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNwotOjEwMjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNwotOjEwMjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgotOjEwMkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgotOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgotOjEwMkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgotOjEwMkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgotOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgotOjEwMkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgotOjEwMkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgotOjEwMkE4MDAwMDBGNzAwRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQotOjEwMkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgotOjEwMkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgotOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgotOjEwMkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotOjEwMkFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUwMTAzMDEwMzAxMEVFMQotOjEwMkFFMDAwMDEwRTAxMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAotOjEwMkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgotOjEwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQotOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQotOjEwMkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQotOjEwMkIzMDAwMDExOTAxMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAotOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQotOjEwMkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExQTAxM0UxQgotOjEwMkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQotOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQotOjEwMkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAxM0UwMTY0MDAwMDAwMDBBMQotOjEwMkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQotOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQotOjEwMkJCMDAwMDAwMDAwMDAwMTY0MDFBMzAwMDAwMDAwMDAwMDAwMDAwQwotOjEwMkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQotOjEwMkJFMDAwMDFBMzAxREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwMkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQotOjEwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFERTAyMjRCRgotOjEwMkMxMDAwMDIyNDAyMkMwMjJDMDIzNDAwMDAwMDAwMDAwMDAwMDBGQwotOjEwMkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAotOjEwMkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzQwMjcxMDI3MTAyNzhGRQotOjEwMkM0MDAwMDI3ODAyN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQotOjEwMkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAotOjEwMkM2MDAwMDAwMDAwMDAwMjdGMDI4MDAwMDAwMDAwMDAwMDAwMDA2MQotOjEwMkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwMkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAotOjEwMkM5MDAwMDI4MDAyOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQotOjEwMkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAotOjEwMkNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MjAyQTdENwotOjEwMkNDMDAwMDJBNzAyQUEwMkFBMDJBRDAwMDAwMDAwMDAwMDAwMDA1NAotOjEwMkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAotOjEwMkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAyQUQwMkRCMDAwMDAwMDA1OAotOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAotOjEwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMwotOjEwMkQxMDAwMDAwMDAwMDAwMkRCMDM2MjAwMDAwMDAwMDAwMDAwMDA3MQotOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMwotOjEwMkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MwotOjEwMkQ0MDAwMDM2MjAzNjkwMzY5MDM2RDAzNkQwMzcxMDAwMDAwMDBGMgotOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MwotOjEwMkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3MTAzQjAzQwotOjEwMkQ3MDAwMDNCMDAzQjgwM0I4MDNDMDAwMDAwMDAwMDAwMDAwMDA2NwotOjEwMkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MwotOjEwMkQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAzQzAwNDEzMDQxMzA0MjcxNwotOjEwMkRBMDAwMDQyNzA0M0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQotOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMwotOjEwMkRDMDAwMDAwMDAwMDAwNDNCMDQ0MzAwMDAwMDAwMDAwMDAwMDA3RAotOjEwMkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMwotOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMwotOjEwMkRGMDAwMDQ0MzA0NDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgotOjEwMkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0OTA0NEMxNQotOjEwMkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgotOjEwMkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgotOjEwMkU0MDAwMDAwMDAwMDAwMDAwMDAwMDA0NEMwNDUxMDAwMDAwMDBERAotOjEwMkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgotOjEwMkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgotOjEwMkU3MDAwMDAwMDAwMDAwNDUxMDQ1MjA0NTIwNDY0MDQ2NDA0NzYwNwotOjEwMkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgotOjEwMkU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgotOjEwMkVBMDAwMDQ3NjA0RTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQotOjEwMkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotOjEwMkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFMzA0RTQzMwotOjEwMkVEMDAwMDRFNDA0RjgwNEY4MDUwQzAwMDAwMDAwMDAwMDAwMDAwMQotOjEwMkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgotOjEwMkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgotOjEwMkYwMDAwMDAwMTAwMDAwMDAyMDRDMDAwMDMwOTgwMDAwNDBFNDAxQwotOjEwMkYxMDAwMDAwNTEzMDAwMDA2MTdDMDAwMDcxQzgwMDAwODIxNDBCMAotOjEwMkYyMDAwMDAwOTI2MDAwMDBBMkFDMDAwMEIyRjgwMDAwQzM0NDA0NAotOjEwMkYzMDAwMDAwRDM5MDAwMDBFM0RDMDAwMEY0MjgwMDAxMDQ3NDBEOAotOjEwMkY0MDAwMDAxMTRDMDAwMDEyNTBDMDAwMTM1NTgwMDAxNDVBNDA2QwotOjEwMkY1MDAwMDAxNTVGMDAwMDE2NjNDMDAwMTc2ODgwMDAxODZENDAwMAotOjEwMkY2MDAwMDAxOTcyMDAwMDFBNzZDMDAwMUI3QjgwMDAxQzgwNDA5NAotOjEwMkY3MDAwMDAxRDg1MDAwMDFFODlDMDAwMUY4RTgwMDAyMDkzNDAyOAotOjEwMkY4MDAwMDAwMDIwMDAwMDAwNDAwMDAwMDA2MDAwMDAwMDgwMDAwMQotOjEwMkY5MDAwMDAwMEEwMDAwMDAwQzAwMDAwMDBFMDAwMDAwMTAwMDBGMAotOjEwMkZBMDAwMDAwMTIwMDAwMDAxNDAwMDAwMDE2MDAwMDAwMTgwMDBERAotOjEwMkZCMDAwMDAwMUEwMDAwMDAxQzAwMDAwMDFFMDAwMDAwMjAwMDBDQwotOjEwMkZDMDAwMDAwMjIwMDAwMDAyNDAwMDAwMDI2MDAwMDAwMjgwMDBCOQotOjEwMkZEMDAwMDAwMkEwMDAwMDAyQzAwMDAwMDJFMDAwMDAwMzAwMDBBOAotOjEwMkZFMDAwMDAwMzIwMDAwMDAzNDAwMDAwMDM2MDAwMDAwMzgwMDA5NQotOjEwMkZGMDAwMDAwM0EwMDAwMDAzQzAwMDAwMDNFMDAwMDAwNDAwMDA4NAotOjEwMzAwMDAwMDAwNDIwMDAwMDA0NDAwMDAwMDQ2MDAwMDAwNDgwMDA3MAotOjEwMzAxMDAwMDAwNEEwMDAwMDA0QzAwMDAwMDRFMDAwMDAwNTAwMDA1RgotOjEwMzAyMDAwMDAwNTIwMDAwMDA1NDAwMDAwMDU2MDAwMDAwNTgwMDA0QwotOjEwMzAzMDAwMDAwNUEwMDAwMDA1QzAwMDAwMDVFMDAwMDAwNjAwMDAzQgotOjEwMzA0MDAwMDAwNjIwMDAwMDA2NDAwMDAwMDY2MDAwMDAwNjgwMDAyOAotOjEwMzA1MDAwMDAwNkEwMDAwMDA2QzAwMDAwMDZFMDAwMDAwNzAwMDAxNwotOjEwMzA2MDAwMDAwNzIwMDAwMDA3NDAwMDAwMDc2MDAwMDAwNzgwMDAwNAotOjEwMzA3MDAwMDAwN0EwMDAwMDA3QzAwMDAwMDdFMDAwMDAwODAwMDBGMwotOjEwMzA4MDAwMDAwODIwMDAwMDA4NDAwMDAwMDg2MDAwMDAwODgwMDBFMAotOjEwMzA5MDAwMDAwOEEwMDAwMDA4QzAwMDAwMDhFMDAwMDAwOTAwMDBDRgotOjEwMzBBMDAwMDAwOTIwMDAwMDA5NDAwMDAwMDk2MDAwMDAwOTgwMDBCQwotOjEwMzBCMDAwMDAwOUEwMDAwMDA5QzAwMDAwMDlFMDAwMDAwQTAwMDBBQgotOjEwMzBDMDAwMDAwQTIwMDAwMDBBNDAwMDAwMEE2MDAwMDAwQTgwMDA5OAotOjEwMzBEMDAwMDAwQUEwMDAwMDBBQzAwMDAwMEFFMDAwMDAwQjAwMDA4NwotOjEwMzBFMDAwMDAwQjIwMDAwMDBCNDAwMDAwMEI2MDAwMDAwQjgwMDA3NAotOjEwMzBGMDAwMDAwQkEwMDAwMDBCQzAwMDAwMEJFMDAwMDAwQzAwMDA2MwotOjEwMzEwMDAwMDAwQzIwMDAwMDBDNDAwMDAwMEM2MDAwMDAwQzgwMDA0RgotOjEwMzExMDAwMDAwQ0EwMDAwMDBDQzAwMDAwMENFMDAwMDAwRDAwMDAzRQotOjEwMzEyMDAwMDAwRDIwMDAwMDBENDAwMDAwMEQ2MDAwMDAwRDgwMDAyQgotOjEwMzEzMDAwMDAwREEwMDAwMDBEQzAwMDAwMERFMDAwMDAwRTAwMDAxQQotOjEwMzE0MDAwMDAwRTIwMDAwMDBFNDAwMDAwMEU2MDAwMDAwRTgwMDAwNwotOjEwMzE1MDAwMDAwRUEwMDAwMDBFQzAwMDAwMEVFMDAwMDAwRjAwMDBGNgotOjEwMzE2MDAwMDAwRjIwMDAwMDBGNDAwMDAwMEY2MDAwMDAwRjgwMDBFMwotOjEwMzE3MDAwMDAwRkEwMDAwMDBGQzAwMDAwMEZFMDAwMDAxMDAwMDBEMgotOjEwMzE4MDAwMDAxMDIwMDAwMDEwNDAwMDAwMTA2MDAwMDAxMDgwMDBCRgotOjEwMzE5MDAwMDAxMEEwMDAwMDEwQzAwMDAwMTBFMDAwMDAxMTAwMDBBRQotOjEwMzFBMDAwMDAxMTIwMDAwMDExNDAwMDAwMTE2MDAwMDAxMTgwMDA5QgotOjEwMzFCMDAwMDAxMUEwMDAwMDExQzAwMDAwMTFFMDAwMDAxMjAwMDA4QQotOjEwMzFDMDAwMDAxMjIwMDAwMDEyNDAwMDAwMTI2MDAwMDAxMjgwMDA3NwotOjEwMzFEMDAwMDAxMkEwMDAwMDEyQzAwMDAwMTJFMDAwMDAxMzAwMDA2NgotOjEwMzFFMDAwMDAxMzIwMDAwMDEzNDAwMDAwMTM2MDAwMDAxMzgwMDA1MwotOjEwMzFGMDAwMDAxM0EwMDAwMDEzQzAwMDAwMTNFMDAwMDAxNDAwMDA0MgotOjEwMzIwMDAwMDAxNDIwMDAwMDE0NDAwMDAwMTQ2MDAwMDAxNDgwMDAyRQotOjEwMzIxMDAwMDAxNEEwMDAwMDE0QzAwMDAwMTRFMDAwMDAxNTAwMDAxRAotOjEwMzIyMDAwMDAxNTIwMDAwMDE1NDAwMDAwMTU2MDAwMDAxNTgwMDAwQQotOjEwMzIzMDAwMDAxNUEwMDAwMDE1QzAwMDAwMTVFMDAwMDAxNjAwMDBGOQotOjEwMzI0MDAwMDAxNjIwMDAwMDE2NDAwMDAwMTY2MDAwMDAxNjgwMDBFNgotOjEwMzI1MDAwMDAxNkEwMDAwMDE2QzAwMDAwMTZFMDAwMDAxNzAwMDBENQotOjEwMzI2MDAwMDAxNzIwMDAwMDE3NDAwMDAwMTc2MDAwMDAxNzgwMDBDMgotOjEwMzI3MDAwMDAxN0EwMDAwMDE3QzAwMDAwMTdFMDAwMDAxODAwMDBCMQotOjEwMzI4MDAwMDAxODIwMDAwMDE4NDAwMDAwMTg2MDAwMDAxODgwMDA5RQotOjEwMzI5MDAwMDAxOEEwMDAwMDE4QzAwMDAwMThFMDAwMDAxOTAwMDA4RAotOjEwMzJBMDAwMDAxOTIwMDAwMDE5NDAwMDAwMTk2MDAwMDAxOTgwMDA3QQotOjEwMzJCMDAwMDAxOUEwMDAwMDE5QzAwMDAwMTlFMDAwMDAxQTAwMDA2OQotOjEwMzJDMDAwMDAxQTIwMDAwMDFBNDAwMDAwMUE2MDAwMDAxQTgwMDA1NgotOjEwMzJEMDAwMDAxQUEwMDAwMDFBQzAwMDAwMUFFMDAwMDAxQjAwMDA0NQotOjEwMzJFMDAwMDAxQjIwMDAwMDFCNDAwMDAwMUI2MDAwMDAxQjgwMDAzMgotOjEwMzJGMDAwMDAxQkEwMDAwMDFCQzAwMDAwMUJFMDAwMDAxQzAwMDAyMQotOjEwMzMwMDAwMDAxQzIwMDAwMDFDNDAwMDAwMUM2MDAwMDAxQzgwMDAwRAotOjEwMzMxMDAwMDAxQ0EwMDAwMDFDQzAwMDAwMUNFMDAwMDAxRDAwMDBGQwotOjEwMzMyMDAwMDAxRDIwMDAwMDFENDAwMDAwMUQ2MDAwMDAxRDgwMDBFOQotOjEwMzMzMDAwMDAxREEwMDAwMDFEQzAwMDAwMURFMDAwMDAxRTAwMDBEOAotOjEwMzM0MDAwMDAxRTIwMDAwMDFFNDAwMDAwMUU2MDAwMDAxRTgwMDBDNQotOjEwMzM1MDAwMDAxRUEwMDAwMDFFQzAwMDAwMUVFMDAwMDAxRjAwMDBCNAotOjEwMzM2MDAwMDAxRjIwMDAwMDFGNDAwMDAwMUY2MDAwMDAxRjgwMDBBMQotOjEwMzM3MDAwMDAxRkEwMDAwMDFGQzAwMDAwMUZFMDAwMDAyMDAwMDA5MAotOjEwMzM4MDAwMDAyMDIwMDAwMDIwNDAwMDAwMjA2MDAwMDAyMDgwMDA3RAotOjEwMzM5MDAwMDAyMEEwMDAwMDIwQzAwMDAwMjBFMDAwMDAyMTAwMDA2QwotOjEwMzNBMDAwMDAyMTIwMDAwMDIxNDAwMDAwMjE2MDAwMDAyMTgwMDA1OQotOjEwMzNCMDAwMDAyMUEwMDAwMDIxQzAwMDAwMjFFMDAwMDAyMjAwMDA0OAotOjEwMzNDMDAwMDAyMjIwMDAwMDIyNDAwMDAwMjI2MDAwMDAyMjgwMDAzNQotOjEwMzNEMDAwMDAyMkEwMDAwMDIyQzAwMDAwMjJFMDAwMDAyMzAwMDAyNAotOjEwMzNFMDAwMDAyMzIwMDAwMDIzNDAwMDAwMjM2MDAwMDAyMzgwMDAxMQotOjEwMzNGMDAwMDAyM0EwMDAwMDIzQzAwMDAwMjNFMDAwMDAyNDAwMDAwMAotOjEwMzQwMDAwMDAyNDIwMDAwMDI0NDAwMDAwMjQ2MDAwMDAyNDgwMDBFQwotOjEwMzQxMDAwMDAyNEEwMDAwMDI0QzAwMDAwMjRFMDAwMDAyNTAwMDBEQgotOjEwMzQyMDAwMDAyNTIwMDAwMDI1NDAwMDAwMjU2MDAwMDAyNTgwMDBDOAotOjEwMzQzMDAwMDAyNUEwMDAwMDI1QzAwMDAwMjVFMDAwMDAyNjAwMDBCNwotOjEwMzQ0MDAwMDAyNjIwMDAwMDI2NDAwMDAwMjY2MDAwMDAyNjgwMDBBNAotOjEwMzQ1MDAwMDAyNkEwMDAwMDI2QzAwMDAwMjZFMDAwMDAyNzAwMDA5MwotOjEwMzQ2MDAwMDAyNzIwMDAwMDI3NDAwMDAwMjc2MDAwMDAyNzgwMDA4MAotOjEwMzQ3MDAwMDAyN0EwMDAwMDI3QzAwMDAwMjdFMDAwMDAyODAwMDA2RgotOjEwMzQ4MDAwMDAyODIwMDAwMDI4NDAwMDAwMjg2MDAwMDAyODgwMDA1QwotOjEwMzQ5MDAwMDAyOEEwMDAwMDI4QzAwMDAwMjhFMDAwMDAyOTAwMDA0QgotOjEwMzRBMDAwMDAyOTIwMDAwMDI5NDAwMDAwMjk2MDAwMDAyOTgwMDAzOAotOjEwMzRCMDAwMDAyOUEwMDAwMDI5QzAwMDAwMjlFMDAwMDAyQTAwMDAyNwotOjEwMzRDMDAwMDAyQTIwMDAwMDJBNDAwMDAwMkE2MDAwMDAyQTgwMDAxNAotOjEwMzREMDAwMDAyQUEwMDAwMDJBQzAwMDAwMkFFMDAwMDAyQjAwMDAwMwotOjEwMzRFMDAwMDAyQjIwMDAwMDJCNDAwMDAwMkI2MDAwMDAyQjgwMDBGMAotOjEwMzRGMDAwMDAyQkEwMDAwMDJCQzAwMDAwMkJFMDAwMDAyQzAwMDBERgotOjEwMzUwMDAwMDAyQzIwMDAwMDJDNDAwMDAwMkM2MDAwMDAyQzgwMDBDQgotOjEwMzUxMDAwMDAyQ0EwMDAwMDJDQzAwMDAwMkNFMDAwMDAyRDAwMDBCQQotOjEwMzUyMDAwMDAyRDIwMDAwMDJENDAwMDAwMkQ2MDAwMDAyRDgwMDBBNwotOjEwMzUzMDAwMDAyREEwMDAwMDJEQzAwMDAwMkRFMDAwMDAyRTAwMDA5NgotOjEwMzU0MDAwMDAyRTIwMDAwMDJFNDAwMDAwMkU2MDAwMDAyRTgwMDA4MwotOjEwMzU1MDAwMDAyRUEwMDAwMDJFQzAwMDAwMkVFMDAwMDAyRjAwMDA3MgotOjEwMzU2MDAwMDAyRjIwMDAwMDJGNDAwMDAwMkY2MDAwMDAyRjgwMDA1RgotOjEwMzU3MDAwMDAyRkEwMDAwMDJGQzAwMDAwMkZFMDAwMDAzMDAwMDA0RQotOjEwMzU4MDAwMDAzMDIwMDAwMDMwNDAwMDAwMzA2MDAwMDAzMDgwMDAzQgotOjEwMzU5MDAwMDAzMEEwMDAwMDMwQzAwMDAwMzBFMDAwMDAzMTAwMDAyQQotOjEwMzVBMDAwMDAzMTIwMDAwMDMxNDAwMDAwMzE2MDAwMDAzMTgwMDAxNwotOjEwMzVCMDAwMDAzMUEwMDAwMDMxQzAwMDAwMzFFMDAwMDAzMjAwMDAwNgotOjEwMzVDMDAwMDAzMjIwMDAwMDMyNDAwMDAwMzI2MDAwMDAzMjgwMDBGMwotOjEwMzVEMDAwMDAzMkEwMDAwMDMyQzAwMDAwMzJFMDAwMDAzMzAwMDBFMgotOjEwMzVFMDAwMDAzMzIwMDAwMDMzNDAwMDAwMzM2MDAwMDAzMzgwMDBDRgotOjEwMzVGMDAwMDAzM0EwMDAwMDMzQzAwMDAwMzNFMDAwMDAzNDAwMDBCRQotOjEwMzYwMDAwMDAzNDIwMDAwMDM0NDAwMDAwMzQ2MDAwMDAzNDgwMDBBQQotOjEwMzYxMDAwMDAzNEEwMDAwMDM0QzAwMDAwMzRFMDAwMDAzNTAwMDA5OQotOjEwMzYyMDAwMDAzNTIwMDAwMDM1NDAwMDAwMzU2MDAwMDAzNTgwMDA4NgotOjEwMzYzMDAwMDAzNUEwMDAwMDM1QzAwMDAwMzVFMDAwMDAzNjAwMDA3NQotOjEwMzY0MDAwMDAzNjIwMDAwMDM2NDAwMDAwMzY2MDAwMDAzNjgwMDA2MgotOjEwMzY1MDAwMDAzNkEwMDAwMDM2QzAwMDAwMzZFMDAwMDAzNzAwMDA1MQotOjEwMzY2MDAwMDAzNzIwMDAwMDM3NDAwMDAwMzc2MDAwMDAzNzgwMDAzRQotOjEwMzY3MDAwMDAzN0EwMDAwMDM3QzAwMDAwMzdFMDAwMDAzODAwMDAyRAotOjEwMzY4MDAwMDAzODIwMDAwMDM4NDAwMDAwMzg2MDAwMDAzODgwMDAxQQotOjEwMzY5MDAwMDAzOEEwMDAwMDM4QzAwMDAwMzhFMDAwMDAzOTAwMDAwOQotOjEwMzZBMDAwMDAzOTIwMDAwMDM5NDAwMDAwMzk2MDAwMDAzOTgwMDBGNgotOjEwMzZCMDAwMDAzOUEwMDAwMDM5QzAwMDAwMzlFMDAwMDAzQTAwMDBFNQotOjEwMzZDMDAwMDAzQTIwMDAwMDNBNDAwMDAwM0E2MDAwMDAzQTgwMDBEMgotOjEwMzZEMDAwMDAzQUEwMDAwMDNBQzAwMDAwM0FFMDAwMDAzQjAwMDBDMQotOjEwMzZFMDAwMDAzQjIwMDAwMDNCNDAwMDAwM0I2MDAwMDAzQjgwMDBBRQotOjEwMzZGMDAwMDAzQkEwMDAwMDNCQzAwMDAwM0JFMDAwMDAzQzAwMDA5RAotOjEwMzcwMDAwMDAzQzIwMDAwMDNDNDAwMDAwM0M2MDAwMDAzQzgwMDA4OQotOjEwMzcxMDAwMDAzQ0EwMDAwMDNDQzAwMDAwM0NFMDAwMDAzRDAwMDA3OAotOjEwMzcyMDAwMDAzRDIwMDAwMDNENDAwMDAwM0Q2MDAwMDAzRDgwMDA2NQotOjEwMzczMDAwMDAzREEwMDAwMDNEQzAwMDAwM0RFMDAwMDAzRTAwMDA1NAotOjEwMzc0MDAwMDAzRTIwMDAwMDNFNDAwMDAwM0U2MDAwMDAzRTgwMDA0MQotOjEwMzc1MDAwMDAzRUEwMDAwMDNFQzAwMDAwM0VFMDAwMDAzRjAwMDAzMAotOjEwMzc2MDAwMDAzRjIwMDAwMDNGNDAwMDAwM0Y2MDAwMDAzRjgwMDAxRAotOjEwMzc3MDAwMDAzRkEwMDAwMDNGQzAwMDAwM0ZFMDAwMDAzRkUwMDEyQwotOjEwMzc4MDAwMDAwMDAwMDAwMDAwMDFGRjAwMDAwMjAwMDAwMDdGRjhDMAotOjEwMzc5MDAwMDAwMDdGRjgwMDAwMDI5MjAwMDAzNTAwMDAwMDAwMDFFOAotOjEwMzdBMDAwMDAwMDAwMDMwMEJFQkMyMDAwMDAwMDAzMDBCRUJDMjBERgotOjEwMzdCMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxOQotOjEwMzdDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwOQotOjEwMzdEMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDBGMQotOjEwMzdFMDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwRkZGRkZGRkY0NAotOjEwMzdGMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZEMQotOjEwMzgwMDAwMDAwMDAwMDMwMEJFQkMyMDAwMDAyMDAwMDAwMDQwQzBGQgotOjEwMzgxMDAwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwMDAwMEMzQzBERgotOjEwMzgyMDAwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwMDAwMTQ2QzBDMAotOjEwMzgzMDAwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwMDAwMUM5QzBBMwotOjEwMzg0MDAwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwMDAwMjRDQzA4NAotOjEwMzg1MDAwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwMDAwMkNGQzA2NwotOjEwMzg2MDAwMDAwMkYwODAwMDAzMTE0MDAwMDMzMjAwMDAwMzUyQzA0OAotOjEwMzg3MDAwMDAwMzczODAwMDAzOTQ0MDAwMDNCNTAwMDAwM0Q1QzAyQgotOjEwMzg4MDAwMDAwM0Y2ODAwMDA0MTc0MDAwMDQzODAwMDAwNDU4QzAwQwotOjEwMzg5MDAwMDAwNDc5ODAwMDA0OUE0MDAwMDA4MDAwMDAwMTAzODA0OQotOjEwMzhBMDAwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwMDAwMzExODBFMAotOjEwMzhCMDAwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwMDAwNTFGODA5MAotOjEwMzhDMDAwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwMDAwNzJEODA0MAotOjEwMzhEMDAwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwMDAwOTNCODBGMAotOjEwMzhFMDAwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwMDAwQjQ5ODBBMAotOjEwMzhGMDAwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwMDAwRDU3ODA1MAotOjEwMzkwMDAwMDAwRERCMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAzRTVGOQotOjEwMzkxMDAwMDAwMDE1MDAwMDAwMTkwMDAwMDAwMDAwRkZGRkZGRkY3RAotOjEwMzkyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NwotOjEwMzkzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NwotOjEwMzk0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA3NwotOjEwMzk1MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA2NwotOjEwMzk2MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA1NwotOjEwMzk3MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0NwotOjEwMzk4MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzNwotOjEwMzk5MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAyNwotOjEwMzlBMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwM0M4MDAwMDE1MDA0OQotOjEwMzlCMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxNwotOjEwMzlDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwNwotOjEwMzlEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNwotOjEwMzlFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENwotOjEwMzlGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNwotOjEwM0EwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNgotOjEwM0ExMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBNgotOjEwM0EyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NgotOjEwM0EzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NgotOjEwM0E0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA3NgotOjEwM0E1MDAwMDAwMDEwMDAwMDAwMjA4MDAwMDAzMTAwMDAwMDQxODBDNAotOjEwM0E2MDAwMDAwMDUyMDAwMDAwNjI4MDAwMDA3MzAwMDAwMDgzODBBQwotOjEwM0E3MDAwMDAwMDk0MDAwMDAwQTQ4MDAwMDBCNTAwMDAwMEM1ODA5NAotOjEwM0E4MDAwMDAwMEQ2MDAwMDAwRTY4MDAwMDBGNzAwMDAwMTA3ODA3QgotOjEwM0E5MDAwMDAwMTE4MDAwMDAxMjg4MDAwMDEzOTAwMDAwMTQ5ODA2MAotOjEwM0FBMDAwMDAwMTVBMDAwMDAxNkE4MDAwMDE3QjAwMDAwMThCODA0OAotOjEwM0FCMDAwMDAwMTlDMDAwMDAxQUM4MDAwMDFCRDAwMDAwMUNEODAzMAotOjEwM0FDMDAwMDAwMURFMDAwMDAxRUU4MDAwMDFGRjAwMDAwMDdGRjgzMQotOjEwM0FEMDAwMDAwMDdGRjgwMDAwMDIwNzAwMDAzNTAwMTAwMDAwMDAyMQotOjEwM0FFMDAwMDAwMDI4QUQwMDAwMDAwMDAwMDEwMDAxMDAzNTA4MDRCRQotOjEwM0FGMDAwQ0NDQ0NDQzFGRkZGRkZGRkZGRkZGRkZGNzA1ODEwM0M5NQotOjEwM0IwMDAwMDAwMDAwMDBDQ0NDMDIwMUNDQ0NDQ0NDMDAwMDAwMDBFQQotOjEwM0IxMDAwRkZGRkZGRkY0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFOQotOjEwM0IyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NQotOjEwM0IzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NQotOjEwM0I0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA3NQotOjEwM0I1MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA2NQotOjEwM0I2MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA1NQotOjEwM0I3MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0NQotOjEwM0I4MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzNQotOjEwM0I5MDAwNDAwMDAwMDAwMDBFMDFCNzAxMTYwMEQ2MDAwMEZGRkYzNAotOjEwM0JBMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYxOQotOjEwM0JCMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkYwOQotOjEwM0JDMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZGOQotOjEwM0JEMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAxMDAwMDBENwotOjEwM0JFMDAwMDAwMDAwMDAwMDcyMDFCQjAxMjMwMEYzMDAwMEZGRkY5MgotOjEwM0JGMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZDOQotOjEwM0MwMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZCOAotOjEwM0MxMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAwMEZGRkZBOAotOjEwM0MyMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDAxMDAwMDA4NgotOjEwM0MzMDAwMDAwMDAwMDBGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMEM0QQotOjEwM0M0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NCOAotOjEwM0M1MDAwQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGMEMzMEMzMEMxQQotOjEwM0M2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0M5NwotOjEwM0M3MDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEM4NQotOjEwM0M4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0M3NgotOjEwM0M5MDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDUxQgotOjEwM0NBMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0MzRgotOjEwM0NCMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMEM1OQotOjEwM0NDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0MzMAotOjEwM0NEMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMEM1MQotOjEwM0NFMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0MwOAotOjEwM0NGMDAwQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGMEMzMEMzMEM3MwotOjEwM0QwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NENwotOjEwM0QxMDAwQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGMEMzMEMzMEMxNQotOjEwM0QyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0M5NwotOjEwM0QzMDAwQ0RDRENEQ0RGRkZGRkZGMzMxMEZGRkZGMEMzMEMzMEMxNgotOjEwM0Q0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NCNwotOjEwM0Q1MDAwQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENGOAotOjEwM0Q2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0M5NgotOjEwM0Q3MDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEM4NAotOjEwM0Q4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0M3NQotOjEwM0Q5MDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDUxQQotOjEwM0RBMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0MzRQotOjEwM0RCMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMEM1OAotOjEwM0RDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0MyRgotOjEwM0REMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMEM1MAotOjEwM0RFMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0MwNwotOjEwM0RGMDAwQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGMEMzMEMzMEM3MwotOjEwM0UwMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAyMENGM0NENgotOjEwM0UxMDAwQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGMEMzMEMzMENGNAotOjEwM0UyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0M5NgotOjEwM0UzMDAwQ0RDRENEQ0RGRkZGRkZGMzMxRUZGRkZGMEMzMEMzMEMzNQotOjEwM0U0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NCNgotOjEwM0U1MDAwQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENGNwotOjEwM0U2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0M5NQotOjEwM0U3MDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEM4MwotOjEwM0U4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0M3NAotOjEwM0U5MDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDUxOQotOjEwM0VBMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0MzRAotOjEwM0VCMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMEM1NwotOjEwM0VDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0MyRQotOjEwM0VEMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMEM0RgotOjEwM0VFMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0MwNgotOjEwM0VGMDAwQ0RDRENEQ0RGRkZGRkY5NzA1NkZGRkZGMEMzMEMzMEM3RAotOjEwM0YwMDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0MwOAotOjEwM0YxMDAwQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMEMzMgotOjEwM0YyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0M5NQotOjEwM0YzMDAwQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGMEMzMEMzMEMxMwotOjEwM0Y0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NCNQotOjEwM0Y1MDAwQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGMEMzMEMzMENGNgotOjEwM0Y2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0M5NAotOjEwM0Y3MDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEM4MgotOjEwM0Y4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0M3MwotOjEwM0Y5MDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDUxOAotOjEwM0ZBMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0MzQwotOjEwM0ZCMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMEM1NgotOjEwM0ZDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0MyRAotOjEwM0ZEMDAwQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGMEMzMEMzMENFQQotOjEwM0ZFMDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAxMENGM0MzOAotOjEwM0ZGMDAwQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGMEMzMEMzMEMxQwotOjEwNDAwMDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0MwNwotOjEwNDAxMDAwQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGMEMzMEMzMEMzMQotOjEwNDAyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0M5NAotOjEwNDAzMDAwQ0RDRENEQ0RGRkZGRkZGMzMwMEZGRkZGMEMzMEMzMEMxNAotOjEwNDA0MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMENGM0NCNAotOjEwNDA1MDAwQ0RDRENEQ0RGRkZGRkZGMTMwMEZGRkZGMEMzMEMzMENGNgotOjEwNDA2MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMUNGM0M5MwotOjEwNDA3MDAwQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGMEMzMEMzMEM4MQotOjEwNDA4MDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwMkNGM0M3MgotOjEwNDA5MDAwQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGMEMzMEMzMDUxNwotOjEwNDBBMDAwQzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzMDAwNENGM0MzQgotOjEwNDBCMDAwQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGMEMzMEMzMEM1NQotOjEwNDBDMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAwOENGM0MyQwotOjEwNDBEMDAwQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGMEMzMEMzMEM0RAotOjEwNDBFMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAxMENGM0MwNAotOjEwNDBGMDAwQ0RDRENEQ0RGRkZGRkY5NzA0MEZGRkZGMEMzMEMzMENEQwotOjEwNDEwMDAwQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzMDAyMENGM0MwNgotOjEwNDExMDAwQ0RDRENEQ0RGRkZGRkZGNTMwMEZGRkZGMEMzMEMzMEMzMQotOjEwNDEyMDAwQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDA0MENGM0M5MwotOjEwNDEzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0NwotOjEwNDE0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NFNwotOjEwNDE1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyNwotOjEwNDE2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDNgotOjEwNDE3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwNwotOjEwNDE4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NBNQotOjEwNDE5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFNwotOjEwNDFBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0M4MwotOjEwNDFCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDNwotOjEwNDFDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0M1RgotOjEwNDFEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBNwotOjEwNDFFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0MzNwotOjEwNDFGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4NwotOjEwNDIwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0MwNgotOjEwNDIxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2NgotOjEwNDIyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDNgotOjEwNDIzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0NgotOjEwNDI0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NFNgotOjEwNDI1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyNgotOjEwNDI2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDNQotOjEwNDI3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwNgotOjEwNDI4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NBNAotOjEwNDI5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFNgotOjEwNDJBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0M4MgotOjEwNDJCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDNgotOjEwNDJDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0M1RQotOjEwNDJEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBNgotOjEwNDJFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0MzNgotOjEwNDJGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4NgotOjEwNDMwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0MwNQotOjEwNDMxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2NQotOjEwNDMyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDNQotOjEwNDMzMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM0NQotOjEwNDM0MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMENGM0NFNQotOjEwNDM1MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMyNQotOjEwNDM2MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMUNGM0NDNAotOjEwNDM3MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEMwNQotOjEwNDM4MDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwMkNGM0NBMwotOjEwNDM5MDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENFNQotOjEwNDNBMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwNENGM0M4MQotOjEwNDNCMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENDNQotOjEwNDNDMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAwOENGM0M1RAotOjEwNDNEMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMENBNQotOjEwNDNFMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAxMENGM0MzNQotOjEwNDNGMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM4NQotOjEwNDQwMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDAyMENGM0MwNAotOjEwNDQxMDAwQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEMzMEMzMEM2NAotOjEwNDQyMDAwQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMDA0MENGM0NDNAotOjEwNDQzMDAwQ0RDRENEQ0QwMDEwMDAwMDAwMDcwMTAwMDAwMjgxNzAzRAotOjEwNDQ0MDAwMDAwQjgxOTgwMDAyMDI1MDAwMDEwMjcwMDAwRjAyODBGMAotOjEwNDQ1MDAwMDAwMTAzNzAwMDA4MDAwMDAwMDgwMDgwMDAwMjgxMDBENQotOjEwNDQ2MDAwMDAwQjgxMjgwMDAyMDFFMDAwMDEwMjAwMDAwNzAyMTA5OQotOjEwNDQ3MDAwMDAwMjAyODAwMDBGMDAwMDAwMDgwMEYwMDAwMjgxNzBCRQotOjEwNDQ4MDAwMDAwQjgxOTgwMDAyMDI1MDAwMDEwMjcwMDAwQjgyODAzNAotOjEwNDQ5MDAwMDAwODAzMzgwMDEwMDAwMDAwMDgwMTAwMDAwMjgxODBCRAotOjEwNDRBMDAwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwMDAwRTgyOTg0OQotOjEwNDRCMDAwMDAwODAzODAwMDAyODAwMDAwMEI4MDI4MDAwMjAwRTA1QQotOjEwNDRDMDAwMDAwMTAxMDAwMDAwODExMDAwMDAwMTE4Q0NDQ0NDQ0MxMAotOjEwNDREMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDMDAwMDIwMDAyQwotOjEwNDRFMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MwQwotOjEwNDRGMDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MwQwotOjEwNDUwMDAwQ0NDQ0NDQ0MwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDA1QgotOjEwNDUxMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZGQjUxQ0ZDMEYwMDMxQwotOjEwNDUyMDAwOEE0NUQ5MTkxOEZDMzgxMUZDQTE4MDU5OTgxOTE4RDg1NgotOjEwNDUzMDAwODA5ODAzODgzRDgwQjg4MTkxODFBMTkxOTE3OEZEREFCRQotOjEwNDU0MDAwNjIwODc2QkYzMDAzQzM2RTIwRTYxMTAyOUEyMzgyMTAwMAotOjEwNDU1MDAwOUYwMjU0RjMwNkM4NUYwRjE1QjMxMjY1NjAzODI2M0EwMAotOjEwNDU2MDAwRjA3RUE3MDZERTJBOEQyOTM2NDUxMkMxREU4NjQ1MUU1RAotOjEwNDU3MDAwMTk2RjQ3OTNGRjIyODlDQURGNDE0MEZGNDA2MzI5NjVENQotOjEwNDU4MDAwNTRCRTlEMjI4NDVFQTYwNEExQTVEMUU0RURBMUYyRDc3QwotOjEwNDU5MDAwQTFGRTkyNTFDNjZFRUUwREE4M0MwMEY4NUM0OTY1NjAyNAotOjEwNDVBMDAwMDMwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA1NgotOjEwNDVCMDAwMDBGRkVEN0QwQjc4NTRENUI1RjAzRTczQ0U5Qzk5NDk0NAotOjEwNDVDMDAwQ0U0QzRFNDIxMkYyMjI0QzEyODhBMDIxMENBRjgwOEFBRgotOjEwNDVEMDAwN0YyNzAxMjJGNTM5MjAyODU4RDQwMTQyMDg3OTgzRDQ1NQotOjEwNDVFMDAwNEJBRkVEQ0Q4NDI0MTAxMTM1RjQ0NzA1OEI3Njg4NTAwMAotOjEwNDVGMDAwRDFBMjBEMzREMjYwQzEwRTIwMTQ3QjZENkZGMEZBQzBEMQotOjEwNDYwMDAwRUFGNTBCNDg0MTMxMkZCMTIwN0VDNUNCQkZENkRBRTdBMgotOjEwNDYxMDAwNjRFNjRDMjY4MEQ4REJBRkZGRkZGREI0QjhEOUU3RUNFOQotOjEwNDYyMDAwQjNGN0RBRUJCNUQ3NUE3QkVEM0Q5Mjc1MDI5M0JGQzc2RQotOjEwNDYzMDAwRDg0NUZDMDNFNTRGNEQ4Q0IxMDlDMUYyNjc2NkY2ODBBMQotOjEwNDY0MDAwMjc4N0IxQzlCREZFM0E0NzNDNjM1NTZEMTkzQkEyOUQxMgotOjEwNDY1MDAwOEMyNUVDOTkyMTE0Mjg1MEZFRDUyMzJDNTA4MkRGQkZFNQotOjEwNDY2MDAwNjVDMzk3RjBGRkI2MTk0MjNFN0M5N0QwRTkxMUU2QzNDNwotOjEwNDY3MDAwRkJFNEQ1MDI2Qjg3M0E5MzlDMzEwQ0VBOENCOTE5NEI1OQotOjEwNDY4MDAwNjQyQzZCMTJBMzNGMjI0QjhEODJGRkUwNzMyNTM5OEY4MAotOjEwNDY5MDAwQjEzNEZDMjc3NDc1NDY2MUFFQzA3OEM2MzIxRTUzNUNENwotOjEwNDZBMDAwRDREMEE5MzgxNTc4M0Y4NDdGQzZEMkJDMjVCNzMxMDc0RQotOjEwNDZCMDAwNjNDRjAzQkNDOTcxRjBCQzVBM0FERTYxRTVFRjJFQzI4QwotOjEwNDZDMDAwREZBMUYzM0E2QUNENThBRTMwM0U3NzMyQTc4OTY1NDExMwotOjEwNDZEMDAwQkYzRUUzRjNBQzQ2NjMzRDlCRDlFMzRGNDZDMzNGRUM5QgotOjEwNDZFMDAwQ0M3RTUxOEMzMDhGMTNCMThDMDEzQ0NCNTQwRTJGNjM5OAotOjEwNDZGMDAwQkRCMjY3NTQxMDFGOUI2QTU4QTIzMjJDNTgwRjJGODVFOQotOjEwNDcwMDAwNjU4NzMzNTYwMzVFOTdFRDE2NUMxNkY4RkUzOTZDMkZGRAotOjEwNDcxMDAwMzFFNkQ3QkU2QkQ2RUExNTNFNTk2MkEzQTEwNDA0QjVCMwotOjEwNDcyMDAwRTRGNEVGNjcxMUNCQkYxMUYxRkUzMDJCQTBCMjRBRUFERgotOjEwNDczMDAwOTU1NTgwQUZBQTVBNzZGQjk1RkVFRDY3MzM4OUU4NTQwQwotOjEwNDc0MDAwMjlCOUY2NUI2MUZDREU1QUU2NkE4NkYxOTc5OUQ1MDJEMwotOjEwNDc1MDAwQUMyRkZCOTFEM0U1ODM3QTY2NjM0NzIxODNGQUQwMzY4OQotOjEwNDc2MDAwODE4OTE5QzFFRkFGMDA5RURCOTE3RjAwMUUyQTJCQTUyNgotOjEwNDc3MDAwREU0MjA2NzRFQ0REMkJCMEU2MEMxQzg3RjdCQjZDNzdEMQotOjEwNDc4MDAwMDZGMzY1MEMwQ0U3NTg2NjI2MzhFNzMyNDEzQTg5NzQxRgotOjEwNDc5MDAwNzEzMDA3RDJDMUJDMjRGMzg5NDJBOENFNTREQ0YzQjBGNwotOjEwNDdBMDAwN0Y5RkUyOUQ4N0VERjRFNzQ5MEJFNjM4QkQwMDU3RjJBNQotOjEwNDdCMDAwNTA2NkEwNTdCMUI1M0E5RDY1MzI1NkVBNjkyOTQ0QkVBNAotOjEwNDdDMDAwMzhCNUVDOEQ1NTU4MDI5RTEzMjRDMEY3N0M4QkE3MDg5MgotOjEwNDdEMDAwRkJBOTk4NTc5RENEODBBN0U2NTkxODhEM0ZCNDJERkZCMgotOjEwNDdFMDAwMzMwOUY4MENCQUYzQzVDNDIxM0YzMTc2M0M4NDRGRjA0RAotOjEwNDdGMDAwQ0ZGMTExNUE1RDFDOThERTk3MkI4QkIwMUYwOUYxMDU4NAotOjEwNDgwMDAwNzIxNzAxMUYzRjQyQTAyNkUwMjg0RDU0M0E1N0ZDMjk1OQotOjEwNDgxMDAwNkJEOEEwRDBGQTVCNTlDM0M2NjkwMEU1MTFCQzBDM0Y0OAotOjEwNDgyMDAwNjFBQzQzMDhFNTRCQkQxQ0JBM0JGRkIwOTQzQjMwM0M0OAotOjEwNDgzMDAwRkZEM0YzMDQ3NDEyN0VBQjAwQjdDODFGMTU3NkQ5QkYzRgotOjEwNDg0MDAwMTJGODYxQ0FBQkU2QzBGNzgwM0YyQTM2MEI3RTBCRDQ2NAotOjEwNDg1MDAwNERBRkRCRTg3REY3MjY1RTBGRDg2NTM3RjI0RkQ3MTZGMAotOjEwNDg2MDAwQTgwQkYwQkRBNUZERjExQjkxQkY1RTE1NTkzMzc2M0IzQQotOjEwNDg3MDAwMjJDQTg0RkFFNUE0MDYzQjFCMEY3NUMwNDdCMThENTdDOQotOjEwNDg4MDAwMkIzNkVGQkIxRkJGMkY2OUIzMzAxQkY0NTdCMTdCRjE0MQotOjEwNDg5MDAwMUQzNzQyN0RGMTYxMzNDMzI2MTU1QjZCRTUxNEE4MkZFQwotOjEwNDhBMDAwRjEwQjJENThFRjI5RTBGMEY5NzY4OUZFQUREMEJFQzdBNwotOjEwNDhCMDAwRDE5RTM4MUJFODczQkFDNkNBOUMzMjYzNzVGNkY2QzQzQgotOjEwNDhDMDAwNTlDMDY3QTVGRTFEODVGODVERTk3NkMxODU2ODlGRjIzMAotOjEwNDhEMDAwRUFENjQzQzkzOEFGMTdCOTdDOTc2RDhCNjY0RTFEN0ZGQQotOjEwNDhFMDAwRjBGNzY0QUIxOEY4MUVCQzVGMDZGMzY0RDBFRjYyRDYzNQotOjEwNDhGMDAwNTQ4ODdBQjA2MkVCM0FEOTY5MEZFMkVCNzQ4RDRBRTNERgotOjEwNDkwMDAwRjRDOURGOEIzMDBFN0M1N0Y5OEFFMEMyMjk1NjlBOTg5OQotOjEwNDkxMDAwMTdFNUIwN0JCNzZEQ0VGMzBBQ0VBRjU2Q0VCNkUzQkM4QgotOjEwNDkyMDAwNTZDQkQ4NkVCMTdGRkUyRTU0Q0RBNUZFQ0Q3MjIxQkNFNAotOjEwNDkzMDAwMkZEREI0NTkyRTBFOTFEQkIyNkQ4MzhDNzA2REM4MUFDOQotOjEwNDk0MDAwRUM4RDIwRDc0MTc4ODBEN0IyODNGNTUyRDQwM0E4MEZERAotOjEwNDk1MDAwMjVCRjNDMjM4NENGMkE4NTU4RTJDQkIyNkQyMjczMUEzRgotOjEwNDk2MDAwRjg4OEQzRERGNzJFRkMxM0YwRTVEQjZCMjdCQ0VBNzQ4NwotOjEwNDk3MDAwRUJEM0E3MUFERENFQTgxQTFEQTVERUJDMTkxMUY4RjhENQotOjEwNDk4MDAwNzFBNDAzQzBEMzg0Nzg4MjcyQUQwNjlGNjMzMkNCOTc0MwotOjEwNDk5MDAwQTA3Rjg3OUJBOTAyQkIzQzVGMzY5OUQ5N0MwNjYzRjU1MwotOjEwNDlBMDAwQjAwN0RERDJGNTUwOTdEOTUyRTY4MkY1NTBGQUIxN0JDNwotOjEwNDlCMDAwMkFENDkzMDRFRjY3Mzg5RjdBQzE1QkMyRDdBQjk2MjRBMQotOjEwNDlDMDAwMEZFMDc5OTVDMEU2RTBGQzhGMjFEMDMwQUY1NUM5QzAyQgotOjEwNDlEMDAwOUY4MEY3QTY2OTc5Q0Y4QjgyMDY3QjNDRDY4QjdGQjEwRgotOjEwNDlFMDAwMjY4M0ZBMzk0M0ZEOThBMTlGQUNDQkY3QTMxNjRFMzIyQwotOjEwNDlGMDAwRjRBMzE2OTZFOEZERkM4REZBQjE1RDU5M0Y0RDg1Mzc1RAotOjEwNEEwMDAwMThFMTI5MkNENUZCOTEwNDY4NTc2RkJGQjI3OUE5MzdGQgotOjEwNEExMDAwNEYzNkMyNzM3MzM5RjUxMzNCRDVDNUJDMEFBRUU3MUFERQotOjEwNEEyMDAwM0ZCMDc2QjcwOEVGOTVFREIxNjNEN0IwNTBCRTI4NTBEMAotOjEwNEEzMDAwMDU4MERCMEU1MjEyQ0ExNzMxOTNBMjBDN0MxOEVCOEU0NAotOjEwNEE0MDAwMzNENEExMjdGNUU0NzU0MUZEMTM4ODk1Njk3QzM5NDU3OAotOjEwNEE1MDAwMjZCRDkwOUY2MkE1RkE0MzI5MEFFOTg1ODc2RUYwNUUxQwotOjEwNEE2MDAwODNFQjIwOEVDRDkyQTEyRTdCNDdBQjExRjgxQUUwMTQ3OAotOjEwNEE3MDAwNTgxMjk2NjAxNzI0RjU3RkJGREFDQ0YxNTA5MDdBMjE1NgotOjEwNEE4MDAwRkIxODdDNUY2NUVBQ0Q4RTg1RkEzNUE2RkM2QjExNkY0RAotOjEwNEE5MDAwMkU4MUVCRTUyODkxNTU2M0JCMjgwQjIzRkRCNDNBMjMwNwotOjEwNEFBMDAwRUY3OTVGMDg5RTFBODcwMEZEODU2MEJGOEQ2NjZGMTJFMwotOjEwNEFCMDAwRjJEN0Y4REE2NzdDMTJDMEI3NkEwOENDMjcwNUJBMTJCOQotOjEwNEFDMDAwOUUwOUY4NjAzRDVBM0RBNDM4MDlGMTY5OTE0MUJFNDMwMQotOjEwNEFEMDAwQzc5NzYxRkMxQzFBRkYwNkM0QTMxQkM3NEZFODNGQkU2MwotOjEwNEFFMDAwMjU3MzkyNjE3QzZCN0E4OTYxN0NBQjBDRTMwM0JGNEZDOQotOjEwNEFGMDAwQUQ2REQ2QzYwN0ZDRERDMEQ4MzRBMTk5QzZCN0E0OTc2MgotOjEwNEIwMDAwRDBGOEFCNjU1NjYyMTgzRkFBNkZGQzVCNzBGRTlFODFDMQotOjEwNEIxMDAwRTY5Rjc5ODM3MUZFRTlBNUM2RjlDQjdDRkVCMzZBNUY5NwotOjEwNEIyMDAwRDJDNjhGQTJGOUNGMTY1RUUyRjM0RjJGRTVGM0I3RjBBRQotOjEwNEIzMDAwN0VGQkM2NzdGNEUxRkY1RTlDQkY3NzgwRjEyRDU5OTMzMQotOjEwNEI0MDAwOERGMzFGNUE2RTlDQkY4NThGNUY1NEJCNTMxQjVGQTFCMwotOjEwNEI1MDAwRjExNzA5M0JGOUZDODc5NkQzRjhCMkM1RUI0MjNFOTJCOAotOjEwNEI2MDAwNTNBM0FBRkQ2ODRGQTQ4MTQwMEMyNjFERTVBNjcyMDQzQwotOjEwNEI3MDAwMTgwNUEwMUY4NjBBOTkwNEM3NDM1MTlDRUZDRTQ1MDEzMgotOjEwNEI4MDAwQkYyOTQxN0RDN0ZDMjA1MUEwQ0YyQTM1OUUyRkRCOUUzNwotOjEwNEI5MDAwMkZBMzlFQTVGNzg5NjgzN0YxM0Y0NTZEMjJBRDM3NkM4RAotOjEwNEJBMDAwQkRDNTNGMUNFMEVENkUxMzdENTgyRjVBN0Y5MzVGQTQ2NwotOjEwNEJCMDAwRjU4RURCRTU2MEM2MDVGMEY5NUY5RTFDRDUxQzNBQUZBQgotOjEwNEJDMDAwRjA3MjUxOTNGOTY0ODc0MThFMzgzQ0JFMDIzNkEyMUFDNgotOjEwNEJEMDAwRTA2QjQ3MjY5ODEwQUM5RjA0M0QwQUM2MkYzQjBFN0EyNwotOjEwNEJFMDAwMTRDQjUzNjY2RThGOUMwMDNEQ0JFNDUwQjlBOUU1RjYxQgotOjEwNEJGMDAwODg4RkJEOTMwM0YzQkE1QjgzRkZBNEM0RjE3RDcyQjlDMAotOjEwNEMwMDAwRTA0N0ZDOUY1QkI3NTQ0NkZEQjRBODA5OENFOTEwNzlENgotOjEwNEMxMDAwQUZEMkU4RDRCQkRCRTI2RjE2MDg5RjRFQzRDRjNEMjQ3MQotOjEwNEMyMDAwOEE4Q0ZEOTc2NkQ3MkZERTMwQzhGMEREM0NFNjZGNDhGMgotOjEwNEMzMDAwODJGNjBCRDdDRTFGQTJDMkZDN0YzMEM3MzIxNkVENTNDRgotOjEwNEM0MDAwOTA4NDU0MTNDOTMxNEIzNTgxNkYzMUE3NzU5RDM5MTU0NwotOjEwNEM1MDAwMkFGN0NDMzExQkVDRkFCOTVFNjNGRDA3MjVDNjdBQjc5QgotOjEwNEM2MDAwRDk2RjM2QTFCREIxNDQ2MDlCQTFERkZCQUE4REVGRjVFMgotOjEwNEM3MDAwNzEzNjA5NzE5Q0FFREE3ODc3Mjc3Mjc4RUZDMzcyMkM5RgotOjEwNEM4MDAwM0U1Njg5QUVGN0FCRkM1QjFEOUVBQTg3Q0QyQzQwRUI1MAotOjEwNEM5MDAwNjU0NzAyNDMzQUZBMTJDODVFRjNBQTdDREVFMUYwREUxMQotOjEwNENBMDAwNkZCNkJBM0QwMENGRkQzRjEyMDk5RkUxRjA3N0JDMUUwMQotOjEwNENCMDAwRUQzNjgxMUREN0IxRTE0QjMzREFCN0UxRjMwOTg3RkY1OAotOjEwNENDMDAwODExNUUxRjM1MTY1RDRGN0YzN0RFMUNGMzk5Rjg0RjM4QQotOjEwNENEMDAwNTM1NTVCRkVBMDEzMjFFRDJBNUFCRTNGRTg0NDA4N0ZERQotOjEwNENFMDAwOTU2RDlCNjFBODJGRjFDRjM1QjQ1RkJDNjFCRUUxRkQyRQotOjEwNENGMDAwQTJBNjI1ODZGNzBCMUI5NzFBRUFGMzdEM0YzMkI0N0ZGNQotOjEwNEQwMDAwNjA0NUFERTFGRDdERDU4RjE4REVGRkEwNjQ5REExM0UxRAotOjEwNEQxMDAwRDdCQkQxRDBGRTlFMzk5QjBERUY0REFGOEZCQzEzRTVCNQotOjEwNEQyMDAwQThFRTVEOTFFMUJBNzE1NjM5RjkzOERBODM2NzE1Qzk5MQotOjEwNEQzMDAwODVGNEY4QjQyNjg5RTRFMDc0OEQ5M0NBRUVCNjcxNTYxMgotOjEwNEQ0MDAwMkZENzgzQzUwQzRDOUM1RUUxOUNBRjcxMzJFQTY1NDY1RgotOjEwNEQ1MDAwRkFGM0FGQzIwNTlGMEZFQTdGMTM5Qzg0M0Y3MTgzQ0NBNwotOjEwNEQ2MDAwMDJDMEMyMDI4QkVCRTNFMzVFMzFFNDdEQzc2NURFNkYxOAotOjEwNEQ3MDAwMDA0MTFGRDdGRkJERDgxMUY5Nzk1NUYzRkNBMTZBMDQ5MgotOjEwNEQ4MDAwRkYyMTI4QjcyQzE1RDdCOTFFNkQ3RDBGN0Y1RjJFMzAwMAotOjEwNEQ5MDAwNEZFODczQzY1NjkyOUNENzY5RUI0Q0I5Q0NGNTQxRjlGNAotOjEwNERBMDAwQ0VFNDAyRjRCRkNCRTU0MDc2RjVBNUM2NkIwMUE0QTIyNAotOjEwNERCMDAwOUU0NEVCM0MwMUY5MDFBNEMwQzAyRjU5MDZGOUVFREM3QQotOjEwNERDMDAwMjcxMjVDOTVBODEzNDBBRkFFNjM5RUMxMjZENDMzODFGMQotOjEwNEREMDAwMDNFOTc3OEQ0MjM4REM0OTU0NkY0QkEwNzVCREIzNjY0QgotOjEwNERFMDAwRkFBMDEzMTJEMkM3NDNFNUE3MzU3M0E4M0M1OUUzQTUyRgotOjEwNERGMDAwRjI0NDREMDk5NUM3NkJBQUE5RUNBODU5NDFFNUM3MzVGRQotOjEwNEUwMDAwM0UyQTNGQUE2OUE0RjJDRjM1NEQ1NDFFQUREOTQwRTVFNAotOjEwNEUxMDAwN0IzNTdFMkFCQjZCREM1NEY2RjkyQkJBRkU4REQ3RUNDMgotOjEwNEUyMDAwNTVDREFGODA5NTg3RUE2N0I0QjlENDQzREI3NjkyNzNFQQotOjEwNEUzMDAwNTcxMkNBRjkxOUU1NUMzNkRBRTM2NzhFODI2Mzk5MzE1NQotOjEwNEU0MDAwMzBCRUMyRjk2RDYwM0FCQUM5NUUyOUY2MDNGREM3RjVGNgotOjEwNEU1MDAwN0Y2RjhCRTI3NEIyOTlEODc0NzBBNkQ5MjNDMzdGRTFCNwotOjEwNEU2MDAwNUE5MDQzNzUwOTU5MDYxNjI0RDcwQzdCODQ3RTYxRUQ1MAotOjEwNEU3MDAwNDM3QTVEOEU0RUNDREQ5QjNCMTNFODcxRjI5OUJGRTUyMgotOjEwNEU4MDAwNjFCRjc1REFGQTE3NzU0MEE0NzU5ODA1OUU3NzIxQkQ0NAotOjEwNEU5MDAwNDJGMDQ2RUI1QUVGQUI5QUJFQkYwQ0ZFQkFGQUYwRDcxRgotOjEwNEVBMDAwOUU4RUZFRkI0MTQxQTVGRUNGQjQ1QTk4ODQ3OERDMTM1OAotOjEwNEVCMDAwRUQwN0U2Njc2NzBFM0ZFRjQwNzk1Qzk2NjQ1MjRGNDQxQQotOjEwNEVDMDAwQzA4MzVFNTZCNDY0QTg0QUU4RkFEMzY2QUM5RjY5MTIwMAotOjEwNEVEMDAwQTZCN0QwN0FFQzhDOTkzNTBBRjk0QTU1NEYwQzQzRkFBQgotOjEwNEVFMDAwMjc1MUE5RjdCMzJDNDk1NjRGODBCQzlFREU5NjE1QzNCNwotOjEwNEVGMDAwRDc2RjNGNUYwN0I3QzcxMkJGODI1RjQ4RURGRkRFRjA5NQotOjEwNEYwMDAwMENENDhGMEUwRjYzQURFQzEzMkJFQTAzNzg5N0Y1RURGRAotOjEwNEYxMDAwRkQ3MjI2RkQ5NUUyNTc2QzhGRjkxQ0RBMEIxNkY4N0JCMwotOjEwNEYyMDAwOTFFMjA3MTJENUY1N0VBQjVBNDQ5RjY1MzQzRURGNkVBMQotOjEwNEYzMDAwMTgwRkJFNzNFQTNFRjdDNUNDNEJGMUFEQzQ0RTg2QzQyNAotOjEwNEY0MDAwMTFENjY5RjFDNkIyNkQzNkQ1QjhBRUM0MUFFQTU1NkQ0MAotOjEwNEY1MDAwQzlBQTYxOURDMTdGODBGQ0IzNkE0MTQyQkUyOUQ3QjgwRQotOjEwNEY2MDAwQTg0NzUyMUEwNTgwQUZEQ0U0QTQ3RUFCMDRERUFFQzJEMwotOjEwNEY3MDAwREEyMTdCRTE1MTU3MkJBN0RCNDBGMDlEQUUzOUVDOTQ1MQotOjEwNEY4MDAwNDBERTRCQUNFMDAxMDI3QzI1MkQyM0E3QTI5RUVCNkFGQwotOjEwNEY5MDAwQUQ0QjQ0N0JCMDRDM0NGMzkwMjdDMkY3M0I0RDAyOERBOAotOjEwNEZBMDAwQjdDNDZGRUUzNUFFQTMxQTdGMzBFODU3N0Y0RTdFMTYzQQotOjEwNEZCMDAwNTM0RTg2RDQzQjRERENDRTBFRUZGNzgwRDZFRkU1RjBCNgotOjEwNEZDMDAwNTNCOUZENDhFMThEQ0VGRTc4QUE2Q0ZCNDJGNjkyMUNFNwotOjEwNEZEMDAwQzFGRkYyODI3OEQyRjE1NzZFRjIxQzQwN0Q1QUJBRUREMQotOjEwNEZFMDAwMThEOUEzOUY5QTdERDkwRjVGNDIzRkY1OUY5RjkyNDRBNgotOjEwNEZGMDAwNzE1MjdENUUzRTMwMjk2MTlDMDU1QTdDMTdGOEY3OUUwMAotOjEwNTAwMDAwMEY2MTNERkRFQ0RGQ0Q2QzBEQzBDNzJFNDAyQjc4NkZERQotOjEwNTAxMDAwRDY1RjMzMTMzMzQxN0RBMTU2NUJEMDVBNDY3MUREQ0Y0NQotOjEwNTAyMDAwNENEQzhFMkE2MjFFMDdEMTgxMzVFNUExMUREOUM1NEMwNQotOjEwNTAzMDAwRDMxMTRGNURFQzZEQzdCODEwM0E5QzMyQzlBNDY3MTYwNgotOjEwNTA0MDAwMzYxQUVEMThCMDdGMERGNUM1MUI4Q0Y1NjIzNjMzMTE5RAotOjEwNTA1MDAwRjU0OUYxN0EzM0YzMEIzNDNGQzNGQkY3NEQyQUUxN0Y3NwotOjEwNTA2MDAwMzFBQjVFODVFQkFBQTRGOTIzMEI1NDI2QTUwMjdDMTU2RgotOjEwNTA3MDAwQkY3OTM2NkYzRUM2NUY0Q0RDMEZEMUUzMjM0QkUyMzg3RAotOjEwNTA4MDAwRkNBNUYxN0VEOTBERUYzRjY5MUQ3N0Y3OEQ0ODA2OEJBMgotOjEwNTA5MDAwN0YxNUM2ODk1ODBDNzM2RDY1RkRGMUZCNkRFMTBGODdCNwotOjEwNTBBMDAwNTc1RkFGRkJDNTY5MzQzOEM0NkQ4MkRCMUY4MTdGMkYyQQotOjEwNTBCMDAwNjg3Q0E2RUJFQjVCNDRENUUwMTdEQzhERjUxMEJGMjFENwotOjEwNTBDMDAwNDZENEUyQjIyMjEzOTFFRTVEQUFENTY3OEFBMUY3MTQwNQotOjEwNTBEMDAwQjdGN0VEQjRCOEVBODBERTNGMzc3OTA2ODkxM0M4NEVEQQotOjEwNTBFMDAwQzg2NTIxRUQ3RTZFRjJEMkYzNEVFMUFENjJCNDVCOTlGQwotOjEwNTBGMDAwMTRDODQ1M0IxNEQ2MThFMjUzNTlFMzA3MzFDQTkxOEJDMwotOjEwNTEwMDAwRjE2NjNCODM3NTE0RTg2RjQxRjhBMDlGNTVGNjkyREI3QQotOjEwNTExMDAwNTgyRUM2QkI0MURFQTFCRkM3MUM4NTg3MDVBOERCOTRGRQotOjEwNTEyMDAwNTY4NkZENTk5MjhDRjE3QzlCRDM1OEFGQzI3RjIwMURDRgotOjEwNTEzMDAwNDYzMDhBM0Y0NThGOTBDMkYwMTg2MEE4MEZFRDJFRTNFRAotOjEwNTE0MDAwRjM1MUU4ODQ5MUREMUYyMDNFNzYxMDhCNDM2OTU1MDJCMAotOjEwNTE1MDAwMjI4Q0NGMjY0OTlEN0RGRTU2MjZGQTdCMUM3RThBMkYwNwotOjEwNTE2MDAwNDBGQkU1MkE2RjVGQTlDNUNGOTc3RjUwMzAzOEVFMTIxQwotOjEwNTE3MDAwRkFBOEVBM0M2ODkwNDEyMTc1M0RCRTdGNUU2MkZFNzFFRgotOjEwNTE4MDAwREY0MTZGM0E2MTU1MEREMTlCNzM0RERFNjk0ODBGRDRGNQotOjEwNTE5MDAwOTMwODlGMDBFMzc4MEQ3NjYwOUExQTJBRTcwQkMyRjgwRAotOjEwNTFBMDAwRTNBQUUxODg2NzA2RkQ1RDZFRjJERTJEMjZGNDg3RTM1MwotOjEwNTFCMDAwQUFGQjRGRUFEN0ZGODI0OEYzQkNFQUZFODdGNUVCQkZCNAotOjEwNTFDMDAwMzI1MkZGMTVCRjc5Nzk5NzBGRjhBOUY0NTc0RjNBODBGQgotOjEwNTFEMDAwOTlEOTY3NTI1M0EyMEJFODVFQkVCNUMxODE3MkY5QTk5NQotOjEwNTFFMDAwRTQ3MzIwNUQzRkYzOEJEMzIzQzlFNzE2NTE5NzRGQjc4NAotOjEwNTFGMDAwMjJFNDExRkYxMDFGOUQ3RUU5RDEzQkQwQUUzQUI3RDUxNgotOjEwNTIwMDAwQUM1MjdDNjA5QjI1NjAwMUE2QUM2QzVEQzJFNTYzOUJFMwotOjEwNTIxMDAwRTUxOEFGQUZGRTAyRjlCM0FBQ0RBODJGNEE1Rjc4MzJFNgotOjEwNTIyMDAwMTFFM0NENDA0OUNEN0YwRTkwN0Y1MEI5RTUyRjg1NjhDMQotOjEwNTIzMDAwNzc1NUIxNUVEMjdCRTFERkUxRjhFN0UzQzgxRTk4MkYzNgotOjEwNTI0MDAwQzdGNDdGQUZFRkYzNTU2OTc4QTk2QTdERjQwQjkxODRCOQotOjEwNTI1MDAwQTU4M0ZDQ0RGMEY2MjU5QUJERkZBNDY4OEZBNzM4REZBMwotOjEwNTI2MDAwNDQzNjExRjk0Q0M3MDdGMzczN0JCRkVFQzVBNzczOEZBNAotOjEwNTI3MDAwMDEzQzlENUJGRUREMjFFNDg0RjIyN0Q3N0I2NzVBMTY1MwotOjEwNTI4MDAwRkVGQzM1RTdDMEYyRDQwRDdBMzFENEFFRDZENzY3NjdDRAotOjEwNTI5MDAwOUJFNkE3RUNFMTY1QjkzOUUwNDAzRkIwN0NCM0Q5RTVDNgotOjEwNTJBMDAwNDNCQUJFRkNGQzJGOUVDMUI4Q0MwNzE2RDc3MEU4QkYyRQotOjEwNTJCMDAwRUNFNTgzRUZERDAwRjVCMjFERTZGOERCRjgzNDE0MjFGMAotOjEwNTJDMDAwMzE0ODk3MkFGOEJCNjI2QzkwMEVBNUJGM0UyODNCNDczOQotOjEwNTJEMDAwRjFFNzNGOEUwQkQyQTM2Q0M3M0U5OThERUE4RjhGMjlFMQotOjEwNTJFMDAwMkRGQkU0MEUyNTAyNUQ1QThFMTVBMjNGNTFGN0UyNTdDMQotOjEwNTJGMDAwMzJFQUFGQ0Y1RTE3RDhFMDhDMDhGOERDN0M5MEVDNjIyNQotOjEwNTMwMDAwQzQxM0QxNTFBMzUzMUZEREMyREE1NzAxNUQ1MEJGRUE2OAotOjEwNTMxMDAwNzQwQTdGRkYyRjlBRkVDN0ZFOUMzOUM0Q0ZBRkJDODZBQwotOjEwNTMyMDAwRkIyODdGQjZCODcwRkUyNUFGM0NFOEMwNzk5QzkyQUFGNgotOjEwNTMzMDAwMzk1RjNGREI5MEU4ODY3MTRCQ0NCRTQ0OTU0QUZFQkM5QQotOjEwNTM0MDAwRTRCOTFGMTJCRjJEM0VGMkMzNDQ4QTdGMzA3N0IyODk4MQotOjEwNTM1MDAwNkMwNTVGMzJDRTZGRDFBNkQ5MzRCRjYyRTYyNUJFMkI3NQotOjEwNTM2MDAwNzk1NkY0RTBGRUUwNTk4OTREREYxMTQxMkU1MjI0QUUwQQotOjEwNTM3MDAwOEY0RjM1NUI3MDRENjVBNzcwRTFDMDdEODVCNzQ1RkZFOAotOjEwNTM4MDAwNTY4QUZGMkRBNUY4Q0EwRkY1RkQyMEI2OENFQTY3QUQ0OQotOjEwNTM5MDAwOUM0RTVGODhGQUJFMUFBQzNDQTFGQ0JBNjU3NTNCRDI0NAotOjEwNTNBMDAwRTdGNDEwRjc2MDhDMUI1NzMxQzlBN0UxNDNCODA4RkQzQgotOjEwNTNCMDAwOEE0N0E2MERFNkY0NjE0RTI5NEZGQjBFRjRGRDE0N0NERQotOjEwNTNDMDAwOEVFRERCQ0Q2RTVCQUVFMTNCNzYzMTIzMzhGRTcyNkQ0OAotOjEwNTNEMDAwN0M4MDNCMEFFREQ1NTM4OTYwRkY0NTk4NUZBMUE0QUY1RgotOjEwNTNFMDAwMzc2MDU3ODVGMDU3ODg3QzczNzlERkYyMDg5NzZGNURENwotOjEwNTNGMDAwREVGRDMzQTZFM0ZCQkZCRUMzRTUwN0JGNDM3QjA1RTA4RAotOjEwNTQwMDAwMEEwQ0E2RjdGQjY2MDlBNDBGMkMyQzEwNDlBRUI3OTgxRQotOjEwNTQxMDAwMzVCOTM2QkVEN0Y5MDRFMDk2NzBEREVERTMxN0VDM0YwMQotOjEwNTQyMDAwOEVGMDRGNzY2Q0YxN0FGODJFNDQ1RjU2RTE3ODhFRkU1RQotOjEwNTQzMDAwRkRFOTcyQkI1ODkzRkYwNEM5MjhGRjZDMTM5N0ZCODFFOQotOjEwNTQ0MDAwRkQwOTFGOEY0Qjk4RkRCRjc4MDZFNTE1RTQxM0Y3QUZGNAotOjEwNTQ1MDAwQ0I1RjM2N0I3MERFOUY2RjNGRjBERUJEMjBBNzlGQjcyRQotOjEwNTQ2MDAwRTg3MjZBRDQ5RkUxNzI1QUIyNzMwMjhCMjRBNzlGNjNEOQotOjEwNTQ3MDAwMUE0MjI0Mzk4NUU3MTFFNTU0RTkyMDNFRkU0N0U5NEZGOQotOjEwNTQ4MDAwMUQ3RjM3ODVFMTRGRDc4NzAzRTEzMTVDMUZGRTU5NzREQgotOjEwNTQ5MDAwNDZENDg3RjBFNzFEOTZENzlGRkY3NEJFRDNGOUFERjRDRAotOjEwNTRBMDAwOTcxNTQzMjkzRUE2RjNBNUNFNzc3RDdDQTlGMzVEQkY3MgotOjEwNTRCMDAwNzhBMzAxN0ZFMUVGMkQxODgzMDFCODNDQkJDRDE0NDdFMQotOjEwNTRDMDAwMjhERkMzRjc3RkUxQkI0M0E5RTMwOTRGNkU1QUM2NThGMwotOjEwNTREMDAwRDNBMUQ0RjhEMEJBM0ZBQ0RFMTJENkRFMUQ1NkY3ODQ4NQotOjEwNTRFMDAwQjVGNzg2RDVBQjBERURDQkRCMEVDODNDQUYyNTYwNjhCQwotOjEwNTRGMDAwMjdBRTc4ODY3RDMyMjgxMkJGRkFCOTVGREFGQTg1RUNEQQotOjEwNTUwMDAwNDNCRTUwN0FFOTdCRjM0QUU2QjM2MzNDN0NBRjQ4RjE5MwotOjEwNTUxMDAwOTExRUMwRjEyQTE4QTc2NzdCODYxRkYzMjQxQTZDM0NFMgotOjEwNTUyMDAwRUVENEEzRjYzQUQwNUU2Qzg4RTVGNURFMDQ3OTE1RUE5MAotOjEwNTUzMDAwM0RGRDc5QUY4REM3RjU3QTNDQkQ4RUQ4MTBGQkVERDgxNwotOjEwNTU0MDAwMUU5MUY0NzY4NzlGNEQ4RkU0NjdDMjhBNDI3MkQ0QzE2MAotOjEwNTU1MDAwMDY3QUNGRTNGREQzNDQyNTdEMDVDNjVGOUE0NDE3ODZCRQotOjEwNTU2MDAwNzQ4QTZBRUY3MTYwOUU0MUNGOUVBQzNCRTdDMEYzNDUwMQotOjEwNTU3MDAwNkY4QUI0OEREODgzNzY3QjBDOTJDNzJEMjU4N0Y4NzdGOAotOjEwNTU4MDAwOUYzMkRGNTM5MzMxN0VCRjg3RkI3OTQ1NkJDM0VDMTFBQwotOjEwNTU5MDAwQjY5NkY4QTk1ODU5MkVBMzNFMDVCRkVDQjg3MUZGODIwNAotOjEwNTVBMDAwQ0I0NUE5RDY1RkM5MjZFMzdCRkQ3QkRDQzE0NUZCQkRBRQotOjEwNTVCMDAwNzQ4QkYxQkQ1NzhCMDczNEVCNzIzMjg2OEREMUZDNzE0MQotOjEwNTVDMDAwMUU4RkQyRjRGMjM0MzFFN0NFMzk0MDhGOUVDMzIyQzMwRQotOjEwNTVEMDAwRkRGQjMzN0I0NEEyQzc5OUVEN0NCRjlFRTJGNkQ3MjM0NwotOjEwNTVFMDAwN0ZGNzkyM0VENEYxRDQ4OUYyMjQwRkFDQUYzQTVGRkQzRAotOjEwNTVGMDAwQUZCQzg3OTE2Rjc2N0Q5OEZCMzMyODNCNzc3RDkwRkQxQwotOjEwNTYwMDAwNUJBQ0ZGRTZGREY0MEY1OUZGRjY1MzVFQjdEMTNFNDlBMAotOjEwNTYxMDAwQ0ZFQjc2RTJGNzlFQkQ3RjRDN0YxOEVCQkIyRDE0OUYzRQotOjEwNTYyMDAwRUU3OUZEQUI1Q0U0OUY5RTk1OTYxMkQ0NzczRDQzODA2NgotOjEwNTYzMDAwRkU2ODFGRUNGRDJBQjc4M0Q2RDc3QUEyREIxRjI1OTkxNwotOjEwNTY0MDAwREI0NzdCRkVGNkIxMTA4RjI1Q0MwQUVEODZEN0EzNDk0OAotOjEwNTY1MDAwOUVBQTVFQjM1MTNDQUQ2N0VGNTc3OUExNzZGRjc3OUQ2NwotOjEwNTY2MDAwNEZBNUI2N0ZEOTYzNjc3Mzc2MjI3Q0IxN0NERkE3RUE0QQotOjEwNTY3MDAwQjdENzNGNUY4QkY5MTdBREZCRTQ4NUYwN0VDQUVGQkU2RAotOjEwNTY4MDAwQzk0NTNEREFCMzkzREI0M0RERTY4RUU3NzA3RkVFNjgxNAotOjEwNTY5MDAwRkREQzk1NjZDMDczMzcwQTU1MEFBQzlCMERDRjE0QTA4QwotOjEwNTZBMDAwRENGNEM3Q0IzNzE0MjdCQzUyN0NGNEZDNUY4MzBGQzFGQQotOjEwNTZCMDAwQ0RGNTlEREQ2RjE1NzBERTVGN0ZGQzIxRUE4NUQ3MkQ2RQotOjEwNTZDMDAwQzQ5N0ZBN0MzRjZGQTkyNTdCRTU3MkYzNzY5ODc5OUNBNQotOjEwNTZEMDAwRTRGRjlENzkwQjgxMkI5OUY3MjhGMzNGMzdCRDdGMkQ5MAotOjEwNTZFMDAwMzk4OTJFRTE3MkQwOUZDRkY3M0U0NEY1OTdFRDJFODI5NwotOjEwNTZGMDAwRjcwQUY5RkRGNjdGRjJGOTdGNkJCQUVGMDRCQTNCMkU5OQotOjEwNTcwMDAwM0ZFRkYyN0ZGMjc5MEY0Q0Y3MzdFRkQ3RThBRTYyN0VDQQotOjEwNTcxMDAwNEJENUVGQkUyMUY4QkVBRDlFNUJGQjRGMkVFRjAzQ0QwOAotOjEwNTcyMDAwNUZCN0VCRDc5ODVDNEQ5OTE4OUY0M0FGMDFENjY5QzUxOQotOjEwNTczMDAwM0VCMzExQzM4NTZCNDZDQzU0RDFDRTE0QzNGNjJCRjVDMgotOjEwNTc0MDAwNzJBRjk5RkI0RDIyRUU1QjYyOUM2RjA4OEZGMzMxQ0RGNwotOjEwNTc1MDAwOEZBMjJEM0QxODVBNTI4QUM5OEU5NTk0NTVEQ0JFOTY1QgotOjEwNTc2MDAwNUNFRDZFQzBDQjlBNkIxN0I4Mjg3Nzg4OEQzREVBQzU4MwotOjEwNTc3MDAwN0FEQTY0MTdDNUFGQzNGQ0M5N0E4MUI5MDVCMDZGQTVFMQotOjEwNTc4MDAwNkI2RjM5OENGRThENzk4NDI5NjBDOUE1RjIxODk2QUJCMAotOjEwNTc5MDAwQjVCOEE0NTk5NTBEN0U4RjkyNjNBQ0RCOUNDNkJBNDUxMwotOjEwNTdBMDAwRUJDRkNBMzhGQ0Q2MjRFNkM3RjhCNDM4NzJCRjhBNzk4MgotOjEwNTdCMDAwNkRFMjE4ODkwOTUwQjdCMTI2MUZGQTE3OTYyNEUzRjc0RQotOjEwNTdDMDAwMUIzMUMwMUUxMkNGQkQ1QTNDRjZGNkUxNzE2Q0JCMUJGQgotOjEwNTdEMDAwRjEzOEQyNDQ3MTZCNEEyRTI1QkNCOEZDNkI3ODlFOEQ5MwotOjEwNTdFMDAwRDU4OEQ3NTVFRDg4NEYwOUZENUY2RTdGOTFERkNDMzRBQQotOjEwNTdGMDAwN0Y1OUQyQkE5MDQ2OThEQzM2NjMzQkNENEZCRTJDOUQ4NAotOjEwNTgwMDAwMzg1REQyQ0IzNTNBMkQzM0QwNDVBNzQzMDRGQTE4RTg5QQotOjEwNTgxMDAwQTJFM0Y5REJEMjI3OUMyRUUxRjhERjZGNzYxMkZFMDdCOAotOjEwNTgyMDAwQTI5NzRFOTczNEM1Q0Q1MDVFQ0Q5QUJGMzAxNUZENDkzNQotOjEwNTgzMDAwQUNBNzc5MThFRDMzNkJGRTgyMTRFRjY2M0VBNDkzRUFCMQotOjEwNTg0MDAwNjI0ODJGRjREQjAyRTBCN0ZEN0VGQkYzMTQyN0VBN0EwRgotOjEwNTg1MDAwRTlEODFEMDg0RkQ5NkY0NTY2MDVGQzc1NkZCN0IzMDBEMQotOjEwNTg2MDAwN0UyRkY5NjVGNDQzNEI1QjQ1OEFGQjMzMjk5MDc3NTdDQwotOjEwNTg3MDAwQzhCRUFGNkVGNzk3RkRDQTRFRjMyOURENjlGMURGMDZBQQotOjEwNTg4MDAwREY5N0VFRkEyNDk3RUNCMDk1QkRFNEQ3Rjg1RTEyMzhCNgotOjEwNTg5MDAwREQ3RDFEQjlCOEFGNUIyQTcxRkYyMzlDNUY2MjY1OUVGOQotOjEwNThBMDAwMjdEMEI5M0I3QTBFQzY2RDg0NkQzQ0RGQjZCNEU1MUVEOQotOjEwNThCMDAwQjNDNTkwN0Y2NkQ2REI5MTVFRjBCRDI4NTBCRTEzQzJBMwotOjEwNThDMDAwMTc5QUU3QTlGQjFEOUQyRjBBMUNCRTM2QjMxRkYzNzY1RQotOjEwNThEMDAwNEJCN0VERThDNkY4NTNFOTUxOEIwQkMzRDI1NURCQkU4RAotOjEwNThFMDAwQTBGRDhEMjlCRjdBRDlEMTQxRkVCNjY4ODgzRkY0RjM3NwotOjEwNThGMDAwRkJCNzg5QzQxRjk1QUQxNUU0ODc0MDlERjhBMkIyMjU3QQotOjEwNTkwMDAwNzJGQ0VCNzJGRTY5RDlBRkY2RUVGMjAxMEFDQjdFRkRCNgotOjEwNTkxMDAwODIwM0UzNUJBN0RCQjczQUM4RkZERjc2RTlCODVCM0ZGQQotOjEwNTkyMDAwM0ZCRkU1OTE0QkZBRjlBN0YxMUZFMEJGREMyMDg3QzUyNwotOjEwNTkzMDAwNDlCNjBEMjI3RjA0RTBDQjhCOTRFRkFERjM1QkQ5Q0I1RQotOjEwNTk0MDAwNjc5RkMzMzg3NEU3Q0VDRjlGNDM3OENCRkZGQkNCRTc4RAotOjEwNTk1MDAwRDA5RjYwQUZEQkQ0QUQ4ODk3OTdERUE1Mzg5RUZFREQ4MwotOjEwNTk2MDAwMkM5OUM3OURCQjVGN0M4MUUyOUZERDFGODBERjAxN0Y5QgotOjEwNTk3MDAwQkFGNzlFNEE0NzdGQjI3QkM3RDc4OTE4MkY1OUJFNzc5RgotOjEwNTk4MDAwREE2MDlDRUZGMjU3QTcwQzY2MTFGNDg4NUUyMkRGRkEwQQotOjEwNTk5MDAwQUYyMEZFMUE0RUFGMDNBRDA3QzhFRkU5MDI3QUEzREZDRQotOjEwNTlBMDAwRDkxN0I3NjlBOUUwNzEzMEE3MTZBRkQ5MUUzOUNFREQ3NgotOjEwNTlCMDAwMkYzRUQzN0FENzlEMzc4REM3RDJFQzcyQjIyQjg4RDNDNgotOjEwNTlDMDAwQkMwMzc0MUM3RDA1RjREQkZFODhFNjdGNDZBNjVGMTdFQQotOjEwNTlEMDAwRkUwM0U4QjQyQzhDN0U2NzVCMTdGREZDMTk3Q0Q3M0E3QwotOjEwNTlFMDAwNjhDMDM4NERFMDBBRjBBNkM3RDFCRjI3QkI3RjIyQTMwRAotOjEwNTlGMDAwN0NFREZDMjVDNUM1OTA2RUI3QzE0NEJCNUYzRTlCOEU1OAotOjEwNUEwMDAwRkIwRjlGOUE3QkVGRTdFNzMyMkMyQUM2MUI0QUY3QkVCMwotOjEwNUExMDAwNEZGMkQzRkRFQTExOEE1MzMzMkQ5RUREQ0RGQUZFRjAwRAotOjEwNUEyMDAwRjhBMzk2NTM1OUI1QzVDRUUzM0IxQUZFMzFGRUUzNzQ5NQotOjEwNUEzMDAwRDA3MzJEQ0VDM0Y5NTg4RkZGMEMxNEY3Njk5NTc5REUxQQotOjEwNUE0MDAwODgxRURGQUZEOEYyQTExNjRGMDlEMjRCOTg4NDc0M0E2MgotOjEwNUE1MDAwNzZDOUZEMDgxRDBGMkFFMjYxNjI2ODFDMzM3MjdDQURCNQotOjEwNUE2MDAwMkZERUFERDEwQkU5ODdGMUNCQkUzODI1RDREMzMwNkUxNAotOjEwNUE3MDAwRTUxN0RFNjcxMUY0NDFGNzY2MUVGRkVDMzY0N0NFQTM0QgotOjEwNUE4MDAwRDJFMzlBQkYwQTk3NTNGRjk1QzUzMzJGMDdGRkI3QzVENwotOjEwNUE5MDAwOEY1Rjc2NTJCRkUxNzhFQUJDMTA1OThGQkYyREYzNzU0NgotOjEwNUFBMDAwRkZBQUY3QzVDQTA1NDNCRTQxQjlDOTdCMDRGOUIxQTIzMwotOjEwNUFCMDAwRjU5OENDQ0ZBNUYwRjM1MkZBN0MzQkI1QkNEMUNFOTc4QwotOjEwNUFDMDAwNDQ4QTc3QUQ2QTM5NDA3QTNDNUM1RkU4RkJBNkUxRjAzNgotOjEwNUFEMDAwOUVEMEUwQUQ2Q0UzRUI0NEU3NEVCQjVGODE3RTNBRjdDRQotOjEwNUFFMDAwRUYyNjdFQUVEQzdFOENFMjZEODdCNkZENUFFRTA4NTk1RAotOjEwNUFGMDAwNTc3MTlERjA4N0MwREZGOUNBQkU1QzFFQjdFNTc5RUMyRgotOjEwNUIwMDAwRTFFMzlDRDFGNDYxRDU5RUM4RTM1NDZERkZDMjMwNEVGMQotOjEwNUIxMDAwOTlBRjQ1RTZFQkZEQTVDNzNCMkRCOUVGQzFGRTRFQjdFQQotOjEwNUIyMDAwOUIxOUU2Nzk5RTZFMTFBNzQ3M0ExN0Y1QUVCNjZFRUE1NQotOjEwNUIzMDAwRTc3RTcwQkRBNDdDRkQyM0ZDNUNDQ0Y4QjdBMzI4MUZENgotOjEwNUI0MDAwN0VGOTkxRTkxRkM2QzQ2MzA5ODQ4N0ZFNUE2QjM5OUZBOQotOjEwNUI1MDAwQjZGRUM0OUQ4QUY0NkUzRDcyQUY4OEVCRDQyRUM0NkYzRQotOjEwNUI2MDAwODg5RDlGRjc0RUY1MTQzQkU4ODVCQzhGM0NFMzkxNUQyMwotOjEwNUI3MDAwQzNGNUNEQzRBMzI2MDNGQzMwQ0U2MDVDMDdFQUExMUZBOQotOjEwNUI4MDAwM0NBNzgyRjk2RTA4OEZFODI4OUM4RUYwODhBQTQ5QjU1OAotOjEwNUI5MDAwMDlGREU3NjE1NjNDNzQ1RTQwRUZEN0FDMUFDRjAzQjAwNQotOjEwNUJBMDAwMEJFMzlDRDg0RkQyNEMxRTQ3NENCRThCOTczRUZEM0MxRQotOjEwNUJCMDAwNEU3MTk0QkYwRUU2NTlBMDc4RDMyQ0YwN0Q5MjdEN0Q3NgotOjEwNUJDMDAwQzY0MTg2RTdCRjI2NTFERTc2OTZDNTc4NkVBQzRCNTU0QQotOjEwNUJEMDAwN0MyNkQwREZDRkU0NkM1OTM3RDk0OUY5MDdENzU4NDIzMgotOjEwNUJFMDAwRjMwRjU4MjAxN0Y5NTE2RkQ3RUY3RDU4N0U0MjFBN0U3OAotOjEwNUJGMDAwMDJGRDg4MUE3QzU5NUE3RUMyMTBENjIxQTA3REJEQzlFQgotOjEwNUMwMDAwQ0VDRjI3MEU1NUUyNERGOEZERjM5QUJEQTk5RjNGRUM4QwotOjEwNUMxMDAwNzc1RTMxRUM5Q0UyRTVDRTI3QzY0RkM5NUYzQUQ0MDVFQQotOjEwNUMyMDAwRkNCNDdBQ0YxNENDNUY4RkJGMjc3RjQ3QUE4QTc5MTI0MgotOjEwNUMzMDAwN0Y5RTgyRTc1N0UyNUZDODFGOTMwQ0Y1MTNBQjFGOUM1MgotOjEwNUM0MDAwNEFGNUZGQzgxRjkzMEVGNTZGMUFGRjhERDdDQjA0Q0ExNAotOjEwNUM1MDAwNTcyRDU4M0Q3QTJBRjJFQjU1Q0JGOTJDQzA4ODUxQ0VGRQotOjEwNUM2MDAwRUY0MEJDNzU3OTNFQkE3QjkxMTNGMzFGN0E2NThFNUY2NgotOjEwNUM3MDAwRTZDMTc2NDMyNjcxQkNBNTI5MUZFRDQwM0MwRDM1NzU2NAotOjEwNUM4MDAwRDQyMjdGRkU3Q0VGNTdCMUE4MTc5QzRDMjVGQ0E4QUMxMgotOjEwNUM5MDAwNUU0NUZBQzFBMzQ5MTcyRjkxNDcxNzlFNEZBNkVCOTM3NAotOjEwNUNBMDAwQ0Q4QUY3MDE4NEUzOTFGOTIzRTg1Q0UwMzMyNTMzQUQzNQotOjEwNUNCMDAwM0M1RkNGOThDN0MwRDQ3OEEyNjc5MTQ2NEY4NEQzMUE2RgotOjEwNUNDMDAwOTI4RkJGNThGNEM5RkM1QzRDOTNBNkFGQTZBQTM4OUUyRAotOjEwNUNEMDAwRTAyQjE3MkY1RUY3RURFMTdBNTBFNzRCRUQ1QzY5QzhEQQotOjEwNUNFMDAwNzlDNjg3MTA1RTlGRTI3REM4OTJEMEZGM0NFMzFEMTYwNwotOjEwNUNGMDAwQ0YwQTdDOUY1QzdDM0UxREY5NUIzRjlGMTg3RUNFOTE1NgotOjEwNUQwMDAwNDlCREE2NDhGNjVGQjM3NkNFNzEyMDc4M0Q1NkVGMkE5RQotOjEwNUQxMDAwMUMzN0YzNzdDRTlEODc0MUJFNDYxN0M5MkU0Q0NEMUM0QwotOjEwNUQyMDAwQkQ2MjdDODJDNENGMTU1MjlFNDM5NTQ2QkYyNDEzOTcxMwotOjEwNUQzMDAwNDNGNjEwQTM3REQ2MUU4QkUwNDZCRkI5RTc0MTk1RjQyQwotOjEwNUQ0MDAwNzc1QUQxNkRFNDU3RjU0NDY3QjQ2MDNFNTBDRkMzRkMzOQotOjEwNUQ1MDAwNUMyOTY2NENBMzFDMEREOTEzMTM0MEJGMEZFNEUwNUMxMwotOjEwNUQ2MDAwOTgxQzlDMzNBRTczQzY3MTdCMkUzQURCM0FBODNGNTUyNAotOjEwNUQ3MDAwRUIwRjBDQjBDNEUwQjlFMDFFOTFFQkU1OUUxQTI3QzExMQotOjEwNUQ4MDAwMzE4NEY5RjZFMUZBN0VBNUUzNkRCNTE4Q0ZGRDAyREVBOAotOjEwNUQ5MDAwNUY0MEJDRTg3OEZGRTVDMEY0N0I0NUEzREYyQjkxRThDQQotOjEwNURBMDAwMTc3RUZFNzRCRUM1RkI2QjZDN0ZBQUY4RDAyQTc0MTVGMwotOjEwNURCMDAwQzNDRjlEODZEM0I1NEE2QURBODhBRTc4RTI5RTJGNjg1MwotOjEwNURDMDAwOUREMUU5MzY3QTg1MkI0MTFBNjRBMEUzRUJEOEVGRTg0MAotOjEwNUREMDAwM0Q1Rjk4MTA1RTlEN0U0RjBGOTBFRkZEMDcwQjVGQ0ZFQwotOjEwNURFMDAwQzJDNzRCOUNEMzkxRTI4REI0RkU2MDEwMkUyMTU4Q0ZEOAotOjEwNURGMDAwQjVFNkQxRjg4MzREM0NERUQzQkZCRDEwNzEzRUQwN0ZGOAotOjEwNUUwMDAwRTZBNUYyMzA3MzU1REUyRkUwRkZGRDUwQkVGRjEwRjEyNgotOjEwNUUxMDAwM0YyMjIyRkUzRjQ2QkMwM0ZFM0ZDNkY2NTc4MEZGNEY5RgotOjEwNUUyMDAwMkU4NTdGRERBRTJGRDNGNDQyMTlFRTJCMDFGRkZDQzU4QQotOjEwNUUzMDAwMzkzMzMxMTNDNjJEMTQxNUUyRkYyNTVCNDU2RDFGRDI5MgotOjEwNUU0MDAwN0Q1QjcyNjI1MDhGMkNCOUJFN0E5RjE5Rjg3MEM5QjMwRQotOjEwNUU1MDAwMDJGMTY5OTE3NjVFRkQ3M0VENUM0Qjc4NUU1RkYxMUMzQgotOjEwNUU2MDAwMUZFOUM5Q0JFN0Y3Rjk0OTBGOTU2RDMzM0VCRjEwRTQ0MQotOjEwNUU3MDAwREI3NENBQzdGNUYxRjM5M0EyMjYxN0UxRjgzRkEzNjhENAotOjEwNUU4MDAwRkFBMjI4RDZEMDJFOUMwRTQzQUE0RDg2M0NGMEU0MjlENwotOjEwNUU5MDAwN0RGRDkwOUY5NzY0NzJCRTRGRjFCNTNGOTgxOUM2MDc3QwotOjEwNUVBMDAwREM1MkZDRjgwMEUyNjNCQzMwMTVGQkNERDdFNDU2RUZDMgotOjEwNUVCMDAwNkZFODBBRTMzQTlGRTEzMzlFRkJDQjZBMzQ5RUZCMUJGQgotOjEwNUVDMDAwREU5NDYyNjg3RkNEODY0Q0MzRkI5MUZFNkIwREVGQUYxNQotOjEwNUVEMDAwREIzNkQ2NTAxRkQ1NzI4M0ExRkRFOEI2MDI0MzdENEM1OAotOjEwNUVFMDAwRTAxNjQzRkI3MTg3NjcxQUVBMTNEQUVGMzVCNDlGNzgzRgotOjEwNUVGMDAwNzQ4MUUxRkRGNTFEQTU4NkY3Mzc3RUJBQ0M1MEJGQTlBOAotOjEwNUYwMDAwRjc1RjBERUQwMzhCQjg1RURDNUY5Mzk0ODZFNzBBNzQ1MAotOjEwNUYxMDAwQkNFQzVGMkE5QjU0N0NCRTM0REJBNEU2ODYzRTRGNzQwNwotOjEwNUYyMDAwM0I3M0IxQ0M3M0EzN0YzNTkwQkM0Q0IxMjZBNzg1QUUzMwotOjEwNUYzMDAwQ0ZGOUNDNkNEMDZCNTNBQ0M2N0E4MTU1RTM5Nzc0RTA0MwotOjEwNUY0MDAwMTcyMEZFQ0Q1NkEzNUNBNTU2Q0Y2QjAyQjM5QkE1MkNBNAotOjEwNUY1MDAwMTk0NkY5RDIyMDVGQjc1OEI5N0VCQkM1N0E2NUZBRUQwQwotOjEwNUY2MDAwNEU2QzdGQUEzMjQwRTdFQ0MzRTU0QjQ0RjlDQUEyRDI5QgotOjEwNUY3MDAwNDdGQkE5Q0M0NUY5OTYxQjZENDYzRTREMUE0MEFGQ0M2OAotOjEwNUY4MDAwQjMxQUNGQzM4QkVBNjE5QjY0OTAxM0ZERjlGOUE4RDBEMwotOjEwNUY5MDAwRTdDMkUyREIyODZGNjdBMDdFRTVBNDA1Qjc2RTAxN0Q0RQotOjEwNUZBMDAwMjkyNzdCQTlENDlGQUY5QTYzOEE5ODk3Rjc5MEY1M0JFRQotOjEwNUZCMDAwRkE0OTFCRkFEOTRGMEYyMTdFQkI5MkRFN0UwQUYzQ0M0MQotOjEwNUZDMDAwMkFFN0Y1OTJCRjk0NkMzMUUyMjU1ODc3MERFNjc5NTRCMwotOjEwNUZEMDAwNEU3RThFNTBFNUZGREM1NEQzNzgyQkFFRjdGQTNDMTc5QgotOjEwNUZFMDAwN0QzMDMzMTFGMzAzRDIwNkYwOUY1RUQ1RTZGMTVDNERCMAotOjEwNUZGMDAwQzlBRDQ1QzNCMDNGRDUxNDdBQkY0NTdBQTBBQTEwRkRGQwotOjEwNjAwMDAwOThBMTVBMUVGNDUzQTZDOEY5NEEzRkQ1RkExOThDMEEyQQotOjEwNjAxMDAwMTRFRDAzNTUyMUZCQTBBQkY4MjM4NzA0RjNGODc3OTMyNQotOjEwNjAyMDAwRjdBN0M4MTcwQjQ2QjdFN0YxNzNDQjZFRDc0Q0IyQUJFNwotOjEwNjAzMDAwNTQ4MjVGRDc0M0U5OEFFNzI5RDQyQkU5NDkxMjczNjY3MgotOjEwNjA0MDAwRjQ4NzY3RjAzQzZGNjMwNkJDQUY4RjMzQjkxNEFBRjdDRgotOjEwNjA1MDAwMEEzODlFRTVDNzhDMEQ4MkYxRUFGRjVCMjRGOEVBRjc2NwotOjEwNjA2MDAwNUY0RkY5M0MxNkE1OUFFMkE3RkEzQzk5QjZERkFGQzc5NQotOjEwNjA3MDAwOEJDRjI2Q0Q4QTQxM0NENjVGREI3NzZFODc2MUZEQUM0NgotOjEwNjA4MDAwRTI2REM3N0VDRkFFMzdEM0I4RjUwNTgyRTFCRDNFNkY3NgotOjEwNjA5MDAwNjlDMzFENzQxRTJCNURFMUYzMkU4Njc5MjNEQzk2MzREMwotOjEwNjBBMDAwMEU1N0ZENzMwMjRCMjNCOEZFRjdEMjQzRThCRkVDOEFDQwotOjEwNjBCMDAwNzY2MUJDMERGMEIxODlFOEVEQ0UzODY3RDIyNzBGRjNEOQotOjEwNjBDMDAwQUExOEE0MzRBRjIxRkIyNUIyMUZGQTk2OTVBRkRCNEM3QQotOjEwNjBEMDAwOUQ5NTg4RjY1NEYyMzU0NkI4QzVGNTY2RjIwNzE3QzVBMgotOjEwNjBFMDAwMkE5NEFGRTBBRjU5QTFEMUQ1MzhFRjU1NDkzM0VGOUM5MQotOjEwNjBGMDAwMEJGMEQ0QkQyMzMyNENGRDcxNzYzNDJEM0QwNERGMTVGOQotOjEwNjEwMDAwQjc0NkJCRkNDRUZFNzhFRjcyNzIzODAxRUVCNzEwNkU2OAotOjEwNjExMDAwNzE0MzIxQ0Q5QkRBMjFEQzNGMTdEODMzMTlDODc3REVENAotOjEwNjEyMDAwRTk0NEZGMTQxM0MzN0Q5NzcwRjhGRkQzQ0FFM0M0RUZBQgotOjEwNjEzMDAwNTg1NTlBODc5QzU0N0NFQjk2NDE1ODE2OTFEQzFEQjVCNgotOjEwNjE0MDAwMEVCOENFN0Y2OEU1RUJGQzg3RDYwOEVCRkNFNUVFRkRFQwotOjEwNjE1MDAwMjg5RkQzN0UwODRCRDE2REQyRUNEQUVBRUM1MDdCMTk0NAotOjEwNjE2MDAwRjRENjQ5RUM1N0FGOEIzMTNGQ0VDNTdFMDdCNkNCM0M1QQotOjEwNjE3MDAwNEREOTE5OTdCN0NCRDAxRTQzRkVEM0VEQjFCRjVBOEQ4MQotOjEwNjE4MDAwNzY2NDg4OUVGRDRBRDNCMzVGNURBMTlFQkQ4MEVENEVDRgotOjEwNjE5MDAwREQxQjg4NjhDNzI0Qzg5MUY1REMzODFCQzc3Rjk1MkFBQQotOjEwNjFBMDAwMzNDQUUzMUIyMDlFOUY2RDhCNkMxRjBFQjQwRTVEQ0UxOQotOjEwNjFCMDAwQ0ZDODhDRDZGOTU0RDdFRkRDREY2MEM1MzJFRDJGOUMwOQotOjEwNjFDMDAwRDlFMDdGMjQxQkY3MjlFMzg3NTFERUVENDBGREE0QUUyMwotOjEwNjFEMDAwRjg4MzBERjFBQkUzNkQ4OENEODg0RkMwQTNEM0M2RjkyQQotOjEwNjFFMDAwQzQ2OThCNjQwRjk2MDMxRTREMDYzQzBFQzdGNjAzRDk5NwotOjEwNjFGMDAwODM1N0FEREY0QjhDRTc2RUJBMzU3QzgzOUU5NzcxQkNCRAotOjEwNjIwMDAwQUVCQjNFQ0VDM0I4NDVFNUVDNzNBNEU3QUY3QTlDMzk4QwotOjEwNjIxMDAwQzY3NTQ0RjdCRjYxMUMwMUU3REY3REQ3N0Y2QjcxQjc5RgotOjEwNjIyMDAwMEU4QTE3RDVCRDdBNEQwQ0M2QTcyQTBBRkFGNDg2OTVCMAotOjEwNjIzMDAwREI4NTk5QTQwN0JCNzY1OURDMDg2NzU3MUNDRkU3RUNEMAotOjEwNjI0MDAwREEzNUYxMTBDNjM5M0VBRjM5OUMyOTg1RDgyRDVEQUZCRQotOjEwNjI1MDAwMUNDOTMzNDM3RjVEM0I4RkU0NDk5NDIwRTcyNzdFRDFGRgotOjEwNjI2MDAwREY1NzVDRkNDRjNDOEYxMjNDMjdEMEM3NkY1NkJFMEU2OQotOjEwNjI3MDAwQURCN0YxRjhDOUQzOThDNzM2OUFCMUY3QTM2M0Y5RkE2NQotOjEwNjI4MDAwOTE2ODdBMUM5RjQ3QkZFM0YzQTE3RTdGNTQ3MEU1QzdGNgotOjEwNjI5MDAwMDAyQjI2REQ1NTRDNjZBQkU1OERBNjAwOTY4RjBBNkU2OQotOjEwNjJBMDAwMTFFMzU1QkU5MUZDM0M0RDUyMTYxQjkxMDFGRDI4NDc1MAotOjEwNjJCMDAwREIwMzA4OEVBM0EzRDc4RERCMjlFQUE3RUEzRTJDMEJDQwotOjEwNjJDMDAwMTRFRjAyQzQ3QjVDQUYyQjA5N0RGQzM3ODc4REIzQTEzMwotOjEwNjJEMDAwNUYyMTRERTE3QUI3Nzc3RTk0MUZFRjI5NEEzNEI5OEY1OQotOjEwNjJFMDAwODBBQTY3NjcwRTJGOENDNUY3N0Y4QkU2RjJGMjU4RDIzMwotOjEwNjJGMDAwODkyNjVDOEU3MDM5QTAzOEQ0OUI2NjVBREY5NjBENzE2MgotOjEwNjMwMDAwMjcyRjgyRUY5NzREODhFNzdFRTkwNTk4N0RDODM5OTY1QgotOjEwNjMxMDAwQzdFMzY3MDkxNDA3QjkwMDc4ODFFNzE0RkEwMjNFQjVBQwotOjEwNjMyMDAwNEJDQzE3MzMxNkY0QjA4OUI5NTVGMDBCRUM5MzQyRUUxMQotOjEwNjMzMDAwRDlDMUZGNjg3NkZDNjA0REZGRjYzODREM0UzM0UwNDUyRAotOjEwNjM0MDAwNzYxOURCRDUwOUVFMEM1QzRGNzc4MUZDMEQwM0ZBQjRBRQotOjEwNjM1MDAwRDU1OEE5N0NBRDQ2NEQxODA2RjJCOEE3MjY4OUVBQUZGNAotOjEwNjM2MDAwRDczOEE5MENENDhDQTBFN0ZCNkI1QzU0OEYzNkI1QTc0QgotOjEwNjM3MDAwRDM3QTJDNTVBRjlCODdGRUY1RkQxMjBCQkRCNzIzQkMxRQotOjEwNjM4MDAwQzQ3QjU2OEU4N0M4Rjk5NzJFRTY5MzAwQUUyRjM1M0QxNQotOjEwNjM5MDAwNTJGQkQ2MzhFMkFGQTdDNjAwRDQzMUZEQkZGRkQ5OEE4MQotOjEwNjNBMDAwM0Y2NDREMDUzRDk4RkFBM0MzNTk1MzQxOEU5RjEyNzgxRgotOjEwNjNCMDAwRkUwMjFFMTg4RTc0MkU1NTJGOUYzMkI3QzRBMkE5RjA2QwotOjEwNjNDMDAwNkIxQkYzNEQ0REMyQkNDOERFM0YxNThFNjFDQ0Y2RThBOQotOjEwNjNEMDAwOUZBNjRFMUQwOUYzQzdGREZFMTRDNkY2REFERUFCQzc1NQotOjEwNjNFMDAwNzNEOEE5RkIzRkFCOEI4MUY5Qzg2REZDM0U5Rjg5ODJCNgotOjEwNjNGMDAwQTc1NjQwN0QzMzlCRjMwQjkzM0NCNTk4Q0ZEOTczMzdBOQotOjEwNjQwMDAwNzNFMkZFQkUzRUNFNUUxQkI3MTM3NkRCQjg5RDM5NTFGQwotOjEwNjQxMDAwRTBGQ0MxRTZDQTVBMUU0MTZGNkVFOEJBMTFERTNFRUZEQgotOjEwNjQyMDAwQzBENzc0OEYwRjhDQjcyRkQ1MzA1RTJGQzUxMTA3RkFFOAotOjEwNjQzMDAwMkU3NUZGRDdCNDhFNUNFOTc3M0QxRjQ5RkM3Qzg0QzQ4MAotOjEwNjQ0MDAwRjMyQkJBRTYyNjZFQTZGRDc4NjgxRkJBOEZEQTIzNDdDQgotOjEwNjQ1MDAwQjZEN0RFRDJENjgxMDZFREJFQjc5RjY1RjA3MjgzQTZCMQotOjEwNjQ2MDAwNTcyNEM2RjVGRjZCRDEwNUJGNDdCOTYxREUzOERBNUY0NwotOjEwNjQ3MDAwQUFEM0UyMDk5MzNBN0FFNUY5NzY3RTJGNUMzRUQ0MTNFQgotOjEwNjQ4MDAwNEU3ODA0M0MwRkQ3QTVEMTMzNTU2MDFFQ0NGRjQ4NjAzMQotOjEwNjQ5MDAwMzM4NDAyMjhERDM2Q0ZEQkQ4NEZEMkMyNERCRTk3RDEzMAotOjEwNjRBMDAwNUVEODY1NzFBMkQ5QTNFM0FCRUUwM0Q5OEFGQTIxNjE2NAotOjEwNjRCMDAwQ0YzMURBOEZBQTEzM0E2NEE0Rjc5NzhGN0M0RDcxQ0I1MgotOjEwNjRDMDAwM0E3Mzc1MzJENTZEMTcxQkIwRkVCNEJEN0EyM0Q2OTlEOQotOjEwNjREMDAwRUZFQkE5NkYwMDNGMENENkNFRTFFMzEzRDQ2M0JCOTA4MgotOjEwNjRFMDAwRTgyOTU4M0I1N0VGMDY3RUQ4NjVFNkY1MkYxRjM5NEI1NAotOjEwNjRGMDAwRkNCMUNCNUMzRDlGOERFMUY1N0E5OEVGQUU1ODZGQUE2OQotOjEwNjUwMDAwMDk1NDkwNTJGQjY1RkRFMTlCQjBBRUI3RkY5MkRBNzc3QwotOjEwNjUxMDAwREI1NDZFM0YyQURFMENBNDdGNUY1RDg1QkEzREE0MkU1RQotOjEwNjUyMDAwRjEzQUIzRjI1MjlGNUZDNTgxQUYyOTdGQjg3MjBGRTc4RQotOjEwNjUzMDAwNDdDNDFCQ0UxM0VGQ0RDMzc1RTk4QzdBRDQ1MUVCQTRCRAotOjEwNjU0MDAwQjg3MzM2RDdENzAxMDM5RkU5RTc1M0I3OThCQzJDMkExNQotOjEwNjU1MDAwNDRDRjVFMDg1QkZGNDJDRUQ5QjFBODg0OTBGRUI0MzgyOAotOjEwNjU2MDAwNzYzQTAzQkIzNDJCMTg2RkNENjQyRTJBODczMTBGOTVGMgotOjEwNjU3MDAwRDlEQjk2RUU0N0I0MkRCQkFGRDU4OTdBMkIzRUQ3RkEzRgotOjEwNjU4MDAwODA5N0U4NjhGNDFGOUVEMEY0RTJGQUU4RkMxQkEzMDFCMAotOjEwNjU5MDAwOUVGNTgyNzc4RDg4N0FGMTY1QjM0QUU3MkYzQTI0QjI2NwotOjEwNjVBMDAwMzczQkI1MzU4Q0FEMzA1M0JENUMzQkY3NkQ1RUU5NUQ3NwotOjEwNjVCMDAwMzMxMkY1RUUyMjkzQUIxOUQ3QjMwQzRGQkUxOUJFMkY5MQotOjEwNjVDMDAwREI5REUxQUE2NUMxQkNFN0IyRDg5NkM0QjE0QTMwRUYwMQotOjEwNjVEMDAwNTlBRjNGQUFGMUQ5NDZCNUM5ODZGN0QyRThGQjQzOTUzMgotOjEwNjVFMDAwNkRFQkQyNzE3RkZCQjM3RDFGOTAzQ0JEMUY5NTQxN0M0RAotOjEwNjVGMDAwNUNEMTdBNDRGNkRBNjlCRjRDQzZGMzI5OUZEOUZBRDY0MgotOjEwNjYwMDAwM0Y1QUY3QkU2QzE5NzQwQkVBRjUyRkVCNEQ3NEI4Nzk0RAotOjEwNjYxMDAwMjAzREY0MDZFODNGMzczOEM4ODc2QUFDNTRGRUMyNURCNwotOjEwNjYyMDAwN0QyRDlBREUwNTUxMjlEMzZDNjBCNEJGOTBFOTU2OTE1NwotOjEwNjYzMDAwOEZFNkFEQjlBNkMxMEE3Q0Y0ODJBQzhFNDQzRTlCMTdBRQotOjEwNjY0MDAwOTU0QjdDNUIxNjJCNzJCRTY0QjkwN0REOTJCNkNGMERGRAotOjEwNjY1MDAwRjVENDM1NjVEM0JFNTMzQ0JFQzg2ODZGNTQ2RDUyODhCRgotOjEwNjY2MDAwMEZDMDBFQzg0NzNFQThEQzYwRjJFMTdFQTJDOURBNEUzOAotOjEwNjY3MDAwRTc3REU3NDUzMUNEOEYzNjlFNEY1Q0FGRTkzQkRGNkM2MAotOjEwNjY4MDAwMUVERkJEREMzOUM1OTJGMzUxNzQxRTUxQUZCRjFGRTU0QgotOjEwNjY5MDAwMjRCRTI4OTE3Q0I0RkY1NTcyREU0MUU3MThCRkZCMzg1OQotOjEwNjZBMDAwNTZDMzc5QzhGRUUzMjgwNDg3M0U0RTc5NzAxQ0QyNTc0MgotOjEwNjZCMDAwRTUxRkVDMjczRkY4OEQ2Qjc1N0JENjRENzFBQ0U1M0I0NAotOjEwNjZDMDAwQjRGQzA1OUI3QjMwRjZGM0I0QTYyNzE4RkFCMTgwNzdBQgotOjEwNjZEMDAwMjlBM0FGRUU5MzQwQ0YxQ0VDRDMzM0Y5MEQ1M0QzOTBFNQotOjEwNjZFMDAwQkVDMUY3NkM5MjQxMEZCOTI1QTBEM0MxMjhBREVFRkIxNgotOjEwNjZGMDAwN0VFNEY2NTE2MUVEMzNGNUZBQ0M4NkE5OTNGQkMzRjM0MgotOjEwNjcwMDAwQjQyRDU4Qjc0MjdCRTkxQjRCNUYxREUxQTM3M0Y1QTE4NAotOjEwNjcxMDAwRkRDNUU5RTNERjRCRkRFOUZDOTcxQUI1RjBBMDBGRjhFMgotOjEwNjcyMDAwRUY2MEFDMjcxRkYzN0M3QTY3MzMyN0NBRTE2NjQ5OEQ5NwotOjEwNjczMDAwNzI4NUQwMjEzNThBQUYzNzI1RTdBRjM1RTAzRjg4RjczRQotOjEwNjc0MDAwNUMwM0ZENEZENTM4MERGQjhBOEI4Qjk2RDE3OTk4NTQxRAotOjEwNjc1MDAwOUQ1RUNDQzdDRjc3NkRDQTMyRUMyN0ZFN0YzOEFFMTY3MAotOjEwNjc2MDAwMEVGNzAwNzA0Q0ZEMDdDMzMxQzIzMDVFMTA4RTFDMDM2MwotOjEwNjc3MDAwN0M1NzBCODcxODNCNkI3QTA2REE2QjhGOTgyODBGMjhBQgotOjEwNjc4MDAwRDFFNEIzNjZBMjVERjY2RjI2OEFBNzBDNjczQzBGODgzQQotOjEwNjc5MDAwMjlFMzBERkJCNDk5N0IyQ0YzMzFGRTlFMjlCMUMzRDJDMgotOjEwNjdBMDAwNTg5NDI3QjdCMzE2RDdBOTlGNDg2NDVGQzE3M0FCMzkxNAotOjEwNjdCMDAwMEU4NzZFNzJFM0ZENEYyMDk1RDQ1RjY2QjlCNzgyMUZENgotOjEwNjdDMDAwRjJFNkZCODJGQTNFRDM3MDk1RTVFM0JEQTA5QkEzRTcxQQotOjEwNjdEMDAwREYxODhERkI2NjczMUVBQUMyM0M5OEU3OTVGMTJGMzUzMgotOjEwNjdFMDAwMzA4M0JDOTIxREQyMjAyQzI1M0JFM0FCQTg4NzFCNzBDNQotOjEwNjdGMDAwQkY3NjcwMTRCNzVCMDRGNjcwQzNFMUU0NDhFRkI5QkMzMAotOjEwNjgwMDAwOUU1QkYzRjAzNDhDMUIzNEFGNzQ1RThCRkU1M0IzQ0RDMAotOjEwNjgxMDAwREZCMjFGRjM3NjFFNTNFOERFRDZBQzQ3RkQ4RDk5NTBFQwotOjEwNjgyMDAwMTdENzk5NjhCRDE0NjNGRERCOUE3MURGRkRDOTZDMTczQQotOjEwNjgzMDAwREExMUNENjhCRjYwRkI0NzE0RjI2QjU2RDUzOEQzRjA0MAotOjEwNjg0MDAwN0U5MjNBNkQxREQ4QjI3NkIyOEE3OUMxRjU4QTE0ODdFNAotOjEwNjg1MDAwRUJERDJBNzNGNTVDM0M3NzMxRUVEMThEMERENkVCNTEzMwotOjEwNjg2MDAwOEZCOTFBMDdBOUJDOUU5NDhDRUI5QTMzRDMzQTQ2N0IxNgotOjEwNjg3MDAwMEZDODY4QUU3NUE2QThCMUMxRkFGMDZGQzBGQTIwM0Q4NgotOjEwNjg4MDAwQjNCMUMxOUQ4NkZEMkUyQkQ1RkEzQjg4NzE4QTE3RTJFNAotOjEwNjg5MDAwMzRCQzY4RUYzM0ZCRjREMkM2MDZDQ0NCMTI2QjgzRjU2NQotOjEwNjhBMDAwQTkzMERGQURDRjcyM0QzNTE4RkE0N0ZCMEJFNkUzQzNFNQotOjEwNjhCMDAwN0IwNTdCODc0Qjc0NEVDQTA2NjMzQjYwN0VCNjkxOTkxRAotOjEwNjhDMDAwQjRERkQ3MEM3QTExRUYyQkVFMURDOURGRUJGQjM0RjJFRQotOjEwNjhEMDAwNzAxM0VERDM2MDdCNUM2RjZDQzlCQ0JEM0M4M0RGNTcyQwotOjEwNjhFMDAwMjBEQjE1OEEzN0MwN0EzMDE1RjM5RTE0QTZGRjcxRjNBQQotOjEwNjhGMDAwQjhBNEI2OEYxMTg1RjcwMTg0RjBBMzc1RUQzMjNBRjc4RAotOjEwNjkwMDAwNjkxRDY2REM5Rjk3RDM4Qzc1ODk3OTE2QTBCRjI3QUE2RAotOjEwNjkxMDAwQzZFNzM3NDY2QkY5NDE4MzU4MEFEQTZEQzM0RDNFMTMxQgotOjEwNjkyMDAwQjYxQkM5RkM1NDVFQzcwMjY0OEY4RDYyMUQ1NDFGOEQ1NwotOjEwNjkzMDAwNUU2MzE2MUU1QjcyRDI0MUFCNzFDQzJERjIzOEFBNDc1MgotOjEwNjk0MDAwNDQzQjMxNzFBRTFFNDdGMjRFNDFCRTc0NDc2Qjc2NjFENwotOjEwNjk1MDAwMEFFRjNGN0VDNjJDQ0FGN0Y1NjlFRkNEMzM4NjNEMzE4RAotOjEwNjk2MDAwMERFNkI1N0VDNkREQ0U1MEZCNEU1RjJGNzVGQkFENDgwNAotOjEwNjk3MDAwODNGOUNCNjgyMUEyQkRBMERCNzU0NTM2NUU0Rjk4RTU1MwotOjEwNjk4MDAwN0U3QTE0QzYxMURCQ0QyNkJDOUZBRDU4OEI2MzE2NkY4MwotOjEwNjk5MDAwQzg0RjQ0QkJBQzY4REY1Q0IyODdENzQ0NzNCQjZDRDFEMwotOjEwNjlBMDAwRkExOUIyNzcxNDlFRjc5QTRGNzY3RkZFQkEwOTMxMTgxQQotOjEwNjlCMDAwQTc2RkIwQjk2MkFFNDdGRUZEMjNCRkRGRjU0QUVEQjE2OAotOjEwNjlDMDAwRTZDNDZCMEE1MDFFOUJDMUFGQzZGQjhGMEU5QUREQ0E5MAotOjEwNjlEMDAwMThFNDhCNzVDM0M4Q0U2QzhFRjJENkM3NDJCRkNERkYwQwotOjEwNjlFMDAwRUE3NEQ1NDFGRDY3MzZGN0Y4MjMzODRFNDMxNDdGOEY5QwotOjEwNjlGMDAwRjcyNjIxNkZGNkVERjczRjJGNUM4QzFFNzhGQ0YwRkQzQgotOjEwNkEwMDAwRkU4M0IxOTFFRkYxQkQ0M0MzNUZEMEZFRjA5MERERDlCRAotOjEwNkExMDAwNjBGNkM0REM4N0YwQkRDQkU3NzlENkVBODk1MTJGMTE0NwotOjEwNkEyMDAwNjdGQkI0ODZFNzAzNzZENkI4NTg0MEU2RjdEMTYyQkQ3NwotOjEwNkEzMDAwQTQ2ODNGRERBRjVDRDIyMjUwREM3QzA5NkIyMjNEM0E3QQotOjEwNkE0MDAwNEM4OUQ1RUVBNzMxRTZDNTk2MTZCRDRERUQ0QjVCNzk2OQotOjEwNkE1MDAwRkIzMkQ2NDJFRDc1N0FFMUJEQjUwMTgzMUQzQUNFRjAyOQotOjEwNkE2MDAwRkQxREQxREM2RkREQUM3ODFGNDNGQkZGOTExOUQ5QzQ0QwotOjEwNkE3MDAwNEZDMDY3MTFGMzJERTIwN0Q4NzdCOTMxOUFBRjFGMzdBRQotOjEwNkE4MDAwNjJEQkM4RjYyOEYxNjNCODdEQjg1Q0UwRTdCMzA3QzIwMwotOjEwNkE5MDAwNTNENTc5OTM2MTNEMEFERTlGMjFEMzdBRDRBREY5NDk2QwotOjEwNkFBMDAwODc5MzdDRUI2Rjg0Rjk3RjlGRjU0QTI0QTdEQUJEMjM5NwotOjEwNkFCMDAwNzU4MjVGNDJGOUZBQkUzM0VDREUxQjJEMEY2OEJBQTY3MQotOjEwNkFDMDAwMjVGRTQzQ0JFRkY5M0U2Qjc5QzMwREZERENDRTAyRjQxRQotOjEwNkFEMDAwREQ2MUVEOUUxMjE0QTQ0ODc5MTlEMEFGNDExRkRDM0E1NAotOjEwNkFFMDAwQzI1OEJGREQ2NUFDREYzOTI5RjIzRDdENkI2QkQ0QjQ5NAotOjEwNkFGMDAwRDA3QkFBRDYwRTcwOEVGMzJEOEQ1RTU3N0ZERjEyMEJFMgotOjEwNkIwMDAwQ0ZFQjdCMEJFOTVFODFGOTk0QjQ3RkMxRjNGQTE0MUJFMAotOjEwNkIxMDAwRjNBMDFFRDlCRkNGNDZGQjIxNTU4QUJDMTk0MzE2NTU5OQotOjEwNkIyMDAwRTBFRkUyQkRGMDhBOUQ5RjM3NDBGRjE3RTMwNThBOTlBOQotOjEwNkIzMDAwQjcwRkRFOTdDNEY3NTExMjNDNDk1QTNDQzM5NTM0NjNGMgotOjEwNkI0MDAwRDRCNzg3MUJGRDJBQ0EwQjk2RDg0NkRDNzcwREU2MjdGQgotOjEwNkI1MDAwMUFFRkVERTg4QUZFMzgwRkZENjM5OENGNkM4QzRGRTg5MgotOjEwNkI2MDAwNzE1QTdEM0VGRjI4N0YyQzVBQkJDRjM5OUM2RTZCMzQwNwotOjEwNkI3MDAwRjlBODBCQTM3MzNERDIzOTA3REY3M0I5Rjk1MkJCODc2QwotOjEwNkI4MDAwRkYyOUMxNDM3OTY4ODkyNjFFMTdBQ0IzQjk4RTUyOUM4MAotOjEwNkI5MDAwNDRGMzBGRUFCNEI4MDZGMzdENURFRjU2QzJFQzk1MTBFRQotOjEwNkJBMDAwRkYyMjdERUREN0Y1RjUzOUU0NzdGMzM4ODgyRDZBMTVBNgotOjEwNkJCMDAwQUVDMzBEMzZCRDZFQTZGQUQzRTZBNjAwRjlGREFGNUFGOAotOjEwNkJDMDAwOUMxODFGODNFRkREMTg2N0YzQ0QxRDQxN0U1RDVEMDZDOAotOjEwNkJEMDAwNEJDMTdCMEVERUIwQ0JCNEZFRDZCRDZBNjlDNkY1RDgxQwotOjEwNkJFMDAwNkRGMzc2REI0MkYyNDlCQUVDRUZEMUY5QTYwOEZERjk3NAotOjEwNkJGMDAwMENGRDBERjk3NkZEQzFGOEFEODg3N0ZERkQxQkY2QTdGQwotOjEwNkMwMDAwMDIyMkZGQ0U0OUY5MUI2OUVEMUY3QkExOUVCOENCNDI0MgotOjEwNkMxMDAwNzE0RkZERjcwRkNBQ0ZFN0QxRkQ4QzdBN0YxMzE0NEU2OQotOjEwNkMyMDAwODdDRTFBRDU5MDhGNUQ4RTdBMzcwN0U1QTA5REY0NjdFMQotOjEwNkMzMDAwNDVDQjIwODNERUQ0RjU2OUM1RjkxQjY4QkYyQzQ4NTdDNgotOjEwNkM0MDAwMkQyRTIxQjU5MzVFQUEzOEZGQkY2OEJDM0I5MDlFMzRDMQotOjEwNkM1MDAwNEUxMkU5Rjc4MUM3NDkzNUU4RTNFMDM4OTMwQzcwRjc0NQotOjEwNkM2MDAwMUY2NzMyQzFBMThGQzNEQUEyMENFNzlGRUJDQzNDQUUwOQotOjEwNkM3MDAwNzI2Njk4MzMyNjM2ODIxRUQxNEI3MTgzQzk3MEZGNjBDRAotOjEwNkM4MDAwOURFNEIyNjJGRjc1Q0E0RTM1MzQ3RjI4N0M1RjAwRUYwOQotOjEwNkM5MDAwQzU2NDIxRjBENUMxN0E4NkMxNzIwQkYzNTI1RTQwM0RDNgotOjEwNkNBMDAwRjYxMzIyMDdBMkQ5QTU2MkJGNjJDMkY4RTlGOTJFQzY3RgotOjEwNkNCMDAwRkU0NUI5QkQxMDdENzIzM0YyMkREODhCM0Y1ODNCN0UxNwotOjEwNkNDMDAwOTUwRkVDNDlDOUVDNjk0N0JBNEE3NjkzMTNGMzY4NkJBMAotOjEwNkNEMDAwMTUxM0M1NDVFQjkyQUM2NEZGQUQxMkNBNTU5NDczQkQ1NAotOjEwNkNFMDAwNUZBOTQzMjIzOEY0N0Q4RjgxRTYyOTlGNzdEMDNDQzM4QQotOjEwNkNGMDAwRUYzQkZCOUYxQjRGQTE3NkZERUU1NzNCMzBENzkzMEYyOQotOjEwNkQwMDAwRkQ1QjU0OTMwQjQ1NUQ0RTUzRDgyNzIxRjQwRkVGNDc5RAotOjEwNkQxMDAwREEyMDQ1RUMyN0JDOUQ4RUZGMDFFOTZDRUU3MDIwM0QyQQotOjEwNkQyMDAwQkFFM0E1ODg3OTEwMUI5NUVGOTgwNzMxMkY0QzFGMjdFMAotOjEwNkQzMDAwMUNDRDBFRTBGNzQyODcyMzIzODNGNEU1NDYwNUY1QTUzNQotOjEwNkQ0MDAwRkRDQzlGREM0RUQyQ0JCNEVGQURBRjdGRTY4NEE5NTYyRAotOjEwNkQ1MDAwOUU0RjZDQkM1NzZGMjBGRUQzRjE2MjdERjM0MUM2RjNBQQotOjEwNkQ2MDAwNTNCRDk0N0Y3MjM5M0M0ODgyQ0I0M0ZCMDA3NjI5RTJDNQotOjEwNkQ3MDAwQkUzNjU4NDI4NkZDMzg0OTMxRTY0RjM1NDgxRUUyNjMzQwotOjEwNkQ4MDAwRjM0REQ1NTZEQTI3NDk1QjY5QzU3RDkyRDU5MjMzMDYxNgotOjEwNkQ5MDAwRkREOERFMzdDMUZFODNGOTM1M0E3OUJFNkE3OEZGNkJEQwotOjEwNkRBMDAwRjAxRTY2QjQ3MzE1NTNDNEZCNzlBMzA2QjBBRkJBMzRCMgotOjEwNkRCMDAwRkFBQ0Q5Nzc2OUZFMDFGNUUxQzE3NTM3MkE0RTUyNzFGNwotOjEwNkRDMDAwREQzNTlCMzlCQzAzQUQ0QjdBQkYwM0UxRUJEMTdERkNENAotOjEwNkREMDAwRjcxQjJDMzk1NjNGQUVGRkUxRTMzNTRBMUU0RjNFQkM1MAotOjEwNkRFMDAwNkYwNDc4NzBERkFDMzFDRDRERjg2RDU0MjUxNUZERDVBRAotOjEwNkRGMDAwRTgxMTUxQ0MxQUVBNkY2NUNDQTJGNzY3RTJFM0YxQ0M1NwotOjEwNkUwMDAwMjI2QjhDOEY5Qzk3QTNFMzY5QjdGMjFERUQxRDZGMTg2MQotOjEwNkUxMDAwNUYwRTdGOEZFMkU4MjE3Q0Q5QTk0Q0U4Q0Y5N0JCOTEyOAotOjEwNkUyMDAwMTcxMzM4RkNBMUY3QTY1QTMzODY0NUJDN0ZCMjFGN0ZFMwotOjEwNkUzMDAwODZGMTREREU2NDQ2RTdGNzA2NDNCOTE5RkE2RUQ1RUVFMgotOjEwNkU0MDAwNDNBQUMwQjUwQkZDRjRGMjdCMTRBNkMyRkFFNjc3RTRDMQotOjEwNkU1MDAwNUY0MDM5Qzk2QkRGQ0ZDRkQxQjQyNkYwN0IxRUI1RUZEMQotOjEwNkU2MDAwQzNDNzVENjJFN0ZFQzgxMkJCNEE2NUNDNTFGNzJGRjE3QwotOjEwNkU3MDAwRjczNzVBREJBMzlDNzg1RUIxMzUyRUIyMUY5MzYzRDdFOAotOjEwNkU4MDAwRjM2ODlBQjQ3MzA4MURCNDRGQTFCN0NGOUJDN0RDQ0Q4QwotOjEwNkU5MDAwMEFDNTNEMUJBREUwN0YyNUY0QjVGRkE5QjYzRjAyODJEMAotOjEwNkVBMDAwMEJFM0RDRjlEQkVCOUFGOUY5NTEzRTdGOENBQjYyRkIyQgotOjEwNkVCMDAwQzRDNDhFNUM0MUZDMEU3NERCQzYwQ0Y3REI1NTU4M0IzQQotOjEwNkVDMDAwQjI1MUNFRTc5QUJDOTk3NjE4QTdFQTY4NDcyMkQ2NUJGQQotOjEwNkVEMDAwREYzRTlENEU3RTZGMURCNzM3N0I3NzQ3NTNEQ0EwM0Y2QgotOjEwNkVFMDAwN0Q2QUY5NzlGMkYzMjlDQzM3QTgzRkREQ0FBNTAwQUQ1OAotOjEwNkVGMDAwQUJFNUU3RDM5OTZGMUNDRERCNjc4RDBCQkVCRkQzQzI2QgotOjEwNkYwMDAwRDhBNEIxQzgwMDFDNEY4ODlGNDhGNDMwREI0RDA2N0FFNgotOjEwNkYxMDAwODAzQzVFNjdEN0U4ODE3OEVBQTNCNzc2RUY0QkE3NzYyNwotOjEwNkYyMDAwQkZFMDcxQ0Q1RjYxMkFGN0Q3RjVGQkE1OEU2N0Y3RTU2NgotOjEwNkYzMDAwNUJEMDdENUJFNTM2RjcxMzc4NEYwQjNCMjI1MkJFRTYwNAotOjEwNkY0MDAwQzIyOUZDRkVDNDg1MTY3NzBDREE1NzBCRkY1MzE0NkE2RQotOjEwNkY1MDAwNjk3RjkzRjNGRDIyMEQ3RjlEQ0M0NUY3MEVGOEQ2REFCRAotOjEwNkY2MDAwRjhCRTRFOTg3Rjk2RjE1NEZFQjgzRkMyRjc4QkRBNDRENAotOjEwNkY3MDAwQ0ExQjVGMzA0NUYxNjFCRjc5RUQwNUJGQzRGREY5RTI4MQotOjEwNkY4MDAwQzY2ODNBNzdCRUYwN0JBRTkzNjhENzJEN0NDMkU2QzQ2NAotOjEwNkY5MDAwREY3QjU5RkU0MTY2N0UzMkY0QkJGQ0M5MENENTA3REZBRQotOjEwNkZBMDAwNDVBRkYwMjQ1OTVEQTAyNzFGREI1Mzg4N0U0NTgzMzAxMQotOjEwNkZCMDAwN0ZCRTMwMDZGQ0NBQzcwRUFDQzJCODk4RjRDRDk0Q0ZFMQotOjEwNkZDMDAwNkQ1MDdGRjRCMTc3NTY2MUJDRTlCNzE4RTcyNjNCRjYwMAotOjEwNkZEMDAwREQ0MkI0NjM1RjQyRDBGNEZEM0ZDMEMxNEI4NzRENUFFMAotOjEwNkZFMDAwRkRDNEFBQTlBMEYyQUY0RDY4MzUyOTJBRkE2NTI3NTYzMwotOjEwNkZGMDAwRTEzOUQ5QzQzOEY3MTgxMzhDRjc4RUZEQjM0MkVDNkYyMgotOjEwNzAwMDAwQzExM0EzQ0U2RDgwRjdFN0VEMTdDOEJFMDAzQTY5REY2NAotOjEwNzAxMDAwMEIzNzRGMDFCQkJCNzhCMjVFOTcyRDU4OEY4RjY2ODZCQQotOjEwNzAyMDAwMzhCRTM5MzMzODNFREFEOUFEN0E3QzhCNDVERDhDNzE4OAotOjEwNzAzMDAwRjdFMzA1RDU1MzI0RTgzRkMzQTFBRUNFMTlDOUQ4QzRBMAotOjEwNzA0MDAwRjVGOUFBMUJDNkNGNzZDNEREOENGMTk4RDZCRTdEODMzOAotOjEwNzA1MDAwRjhENTE4MUY2QjY1REUwMzY2Nzg3RkQzRTM0MzZFQjYwMQotOjEwNzA2MDAwMDI2MkUzMDc3OUM2QTgzMEZGNDFENjI5QUJBN0RGRjQ1NwotOjEwNzA3MDAwMURFNDYzNDRCRkYzNTkwREY2MDQ5MjkzNDM4OEQyRjRBMAotOjEwNzA4MDAwMTVGQ0RFQzIzRUY5NEVFMzdDREI1NzFGRDFDMUNGQzNGNgotOjEwNzA5MDAwRThGNTI0NUU2RjVEMTk1OTVGREMxMkMzRjlCQTM1MkEzMQotOjEwNzBBMDAwRjJGQjY2NEQzRjAwQkUwMzE0N0Y2RDhCRjYwRkNGMDhEOQotOjEwNzBCMDAwRUEwRjkwMUZFQjI0OTJBNzc1NUM3RjgwMUNDREI0OTNFMAotOjEwNzBDMDAwREM0NkVDRUZEQkNBNkJBQjc2QUY3OUFCRTQ4RUM2Rjg4RgotOjEwNzBEMDAwODJBRUM3MzA4Mjg2RTNDQ0I1M0IwREZBMzlBRjdEMDE3NQotOjEwNzBFMDAwRTlENzUxMzEyQTg3QzdDOUYxOTMzMEM1QTg0Nzk4QjU2OAotOjEwNzBGMDAwM0QzQjc0REZGRTc3REEzQzMzQUVEM0UzM0YwMTM5NzRCNgotOjEwNzEwMDAwREY2OUY5OEVGQzRCOUU5RjJEQzczODdGODhCRDFEOUM4MwotOjEwNzExMDAwQzc1NDhBNjdGNEVCMTdGQTczNkFGREJCNzJBRTA0NUY1QgotOjEwNzEyMDAwRUE2NUYwMTU0RkY4QkFEQzNDODNGRDE5RTMyRkZERkI0RgotOjEwNzEzMDAwOTNCNTdEQzEyNkUzM0EyMjQ3ODZGM0E0Q0UyNzgwN0YwQwotOjEwNzE0MDAwNTM4OEZFMkNENkY0QTk5RTA3RDFCRDZCMjRFNTRGMDZDQgotOjEwNzE1MDAwQzdFNUU3MzE4MUJFQkZDNERGNURGMjgxM0U0NTNEOTZBNAotOjEwNzE2MDAwMjdCOTZGQzVGNjc5RUQ3MTJBREFFRkMwNkZGNTFBQkY0RQotOjEwNzE3MDAwNDlDODZGM0E5RDVCRTNBQUYzNjlCRUVCMDRCMjRCRkFEMAotOjEwNzE4MDAwRDk0MURBM0E5QUQ3MjREMEVGOTkwRDlFRTcxNUU3ODdDRgotOjEwNzE5MDAwQzBBN0VCN0JFOEJGNTVFQjdGM0NFN0U3NjdGQkY4Rjk1RgotOjEwNzFBMDAwM0U5NDFGQ0Q5RjY3QUUwRUJBNUYzRDFDRkU4NTI4NzNDRgotOjEwNzFCMDAwMDkyMUVCRDVBQjM2OEFFQkVCNzhCQjVBRkVEN0VEODVEMAotOjEwNzFDMDAwRjIwMUQ3MjUwNzdEMzdGODY4QzBFMTg0NzY4QjUxMUUyMAotOjEwNzFEMDAwNTA1RkI1N0M0MkY3NjRCNkI2ODkwQzdGQjIwMEU3OEQ4QwotOjEwNzFFMDAwN0EyMzRGRDc5M0JFOTU4NzBBMjRCMjVCODI3QUQ5NDkxNgotOjEwNzFGMDAwRjY4QkFFMzcwMzU2NkJCMEZEQjlCNTJCMEJFQjUxQUYyOQotOjEwNzIwMDAwNkFGN0VDQzc4QkEwQzVDNzA2RTE0ODczNzBCQjc3OTJERAotOjEwNzIxMDAwOTc0NUZDRERCODFDQkI1REQ3MjMzNDhGOEQyQjBBRTg2NgotOjEwNzIyMDAwNUU4NTJBNkQzRDlERDRFMUEzNzg1MzM0RTI3MTQyMTAwRQotOjEwNzIzMDAwMUZGQTdBN0RBN0E1RTMxNUVEQkM5NzgxMUZGNTNBRDgxMwotOjEwNzI0MDAwMjU5NUE2QUM2MEZGRjg3RTY2MDhERkU3MzkzODFGODQxNQotOjEwNzI1MDAwRDNFN0JCRUEyN0MwODMwRkYxRjA0MzBERUYwOTUwQzcxNgotOjEwNzI2MDAwN0IyRDk4MDRFQjE3RTZGRENDNTA1QzZCMzI0MkUwNTY2OAotOjEwNzI3MDAwQjgzRTRFMTA0RDVDOEY1RDQ2MkVFMjA3MzFFREY3NTg1QgotOjEwNzI4MDAwRUMyNENGNDE3QzcwQkJFNTAxODcxNkU3RDVFRTI5M0ZBMgotOjEwNzI5MDAwNjgwMjM5QTE3RDM2M0VDRkVFNURDOUQ0RUY2Q0FEREQxRAotOjEwNzJBMDAwREY0QjJGNkZENkYyOTY3NDdCQjFFMkI1RDRDRDQ2RjhBMgotOjEwNzJCMDAwNzk3RkJCMUMxQzJGNzk0N0RENjNEMDhFMTlFRTUxNUNBMgotOjEwNzJDMDAwRTgxRkU0QjVDRkRDOEZGOTI0RDk3QkYwMDcwNDgyN0M3QQotOjEwNzJEMDAwOUVEREMyRTUxNEI4NEJDM0NCOUJEQjQzRkJBRDc0RDgzQQotOjEwNzJFMDAwNzUzOUZCQkJDQzIzRkIyOEU3NTdBNENCN0QyMTcyNUExMQotOjEwNzJGMDAwRTM1MDM4QkU2MDdFMTZDNEE3NjRENEEzN0FGOUY3ODMzRQotOjEwNzMwMDAwQzNCMzFGQ0YyNTk1MDMzRTUwNkRFQjc4NkI2RDk5QkZDRQotOjEwNzMxMDAwRDI4NjcyN0M5NEI5NTA4RUJCNUJFNjlCNDYyMTVEMzE3MAotOjEwNzMyMDAwMTFDQzE5QTIxRkQ2RjM3OUU4NzYyOEYwNjUwQkYyRTVBNwotOjEwNzMzMDAwM0FDNzEwMUE2RkY4NTE3Nzc0MEVCQzFGOEU3NjEzQzZCOQotOjEwNzM0MDAwN0Q1QkVDN0VGNDIzRkMwRUVGMkUwN0UyNzM1NkVGMTQwOAotOjEwNzM1MDAwREM0RkFEOENBRUFFQjU4NTNDRUY2QkRGMDZFRDg5OEZCMwotOjEwNzM2MDAwQkQyMkVFMUY5NTNGQzBGOEJERjFEQTdDQTBBOUNGMDI4NwotOjEwNzM3MDAwRTM1NUM4MjBBNzU5NTQwRjIwREU1QTY1REVCRUY3M0VGQwotOjEwNzM4MDAwRkFBNTExNTYyOUYyN0JGOTYwRkRCRTk1RjhGMzZENTMwRAotOjEwNzM5MDAwMUNEMjE3RkQyNEI0OTNDQjQ1NEYxQUVFN0JCMkMxMTYxNQotOjEwNzNBMDAwMTdBRTAzRTA3NzEwQkYxRkI0MzFDOTA2RkRGRjFFNEFCOAotOjEwNzNCMDAwRDREM0QzQzRBNTc0OEU2QjVBOTY0MEZCNDRCQTdGOEY0NgotOjEwNzNDMDAwN0EwQkZEQTQzQkJGMTc0REZDQzgyRTNDMzgwQ0UzRDMxMQotOjEwNzNEMDAwMDlEMTlDNEVEMDhGNTVFQkM3NkExRDFCOTRCRkZGNDg0NwotOjEwNzNFMDAwMUY0OUZFOEVCRUJFMUQxNDA0RUFFN0UwNERENzM1RDcxNwotOjEwNzNGMDAwODVGODQxRDgxRkVBRkY4M0MyOENCNEE1QzhGRjlBMUY0NQotOjEwNzQwMDAwNDdGNjYxN0M3MERENDU3QjY1QUMyMUNFRTZEM0UwRUJEMQotOjEwNzQxMDAwNDg0NzNFMEFCNTQ3RDEzRUVEQjM2NzdERjM1N0RGMENEMQotOjEwNzQyMDAwN0E3NkUyRjQ5NjAwNUU3MTVGQ0I4QTZFRkUxN0U4NkZBMwotOjEwNzQzMDAwMUFEOEIzMzZDMEMzM0U4RDJGMEU2NkY4NDREQzRGM0REQwotOjEwNzQ0MDAwMzg1Q0EwRkJEQzBGNDU3OTczQUE5NUUwMzg4OTVBNUM1QgotOjEwNzQ1MDAwMjA1MUNCMzM0RjhDRTJFNTBGNjJCODFFRkMzQzg2QUY2NwotOjEwNzQ2MDAwRDczN0E4QkM5RUU4ODgxQzQ3OThBREJERkZBOTg5RUIxQgotOjEwNzQ3MDAwRjczNUY5OTFGM0QxNEY2OEZBRjVBQUVEREUxQzIxRkMzRQotOjEwNzQ4MDAwQkVFRTEzOEUwOURBN0RERDk0NkZDN0UzRkQwQjM0RkU4QgotOjEwNzQ5MDAwMDYzQjg3RTgxNEI0QUJGODdFOUQ2RTg3OUU2RDlGNERDQQotOjEwNzRBMDAwRjUxMzgyRjdCRDdCMDQyQzNENEY5MDlGRjRBRTQ4RjE1RAotOjEwNzRCMDAwQTFFMjU4NkYyMkU2QTU1NTQ0NDU4RUNCMENEMkYwRjREQwotOjEwNzRDMDAwNTkwREEzMzhFRjI5RENDRkNCRTZCRkI3ODVGNTI1MUJENwotOjEwNzREMDAwOUVBNDdCMUQ0QTk5OUZFMkJENDUxQjFBNjhCRkFFQzg5QQotOjEwNzRFMDAwMkYzMEE3ODBGRTk5ODdDNzgxMzUzQTk0NkUxMTBENzFCMAotOjEwNzRGMDAwRTdDNTUyQjUxQzlCMTNFNDVCRkMxREFFRDBGNzI1OUI4MgotOjEwNzUwMDAwQzYxOUVBNTc2Rjk3MTYxOEYyM0I4MjdBQTc5MEVDQkYxQwotOjEwNzUxMDAwRjA3RTc1M0UwRkI3NEY4RkQ3MzgwREYxRUUwNTFCODYwNQotOjEwNzUyMDAwMTdGMkNENzhERTdFMjE3M0QxN0MxNzM2NjYxOUVGMTEwNAotOjEwNzUzMDAwNkU0Q0I4QjI3QjgyQzExRUY1NDU4NDUzMjZGREE4M0YzMAotOjEwNzU0MDAwM0YwRUY4Rjc4NUM0RjcxNzdDM0E4Q0UwRjg4QkMzN0JDNQotOjEwNzU1MDAwNUQ4QzAxOEU2OEU2MzNDNENGMjZGM0RGMjlCNEYxRjhFMQotOjEwNzU2MDAwMjNGMDhGRUY1Mjc2NDA3RUNDNzdGNTA3QUUxREMwMUYxQgotOjEwNzU3MDAwQzhGRDg3RkEwMzc5OTNCOUZFNjU0RDAyRTVFMDRDOUM5RQotOjEwNzU4MDAwNkFCNENGNjZDN0YwNzU2RTc2NENCNEMxM0UyQjlBNjc2RAotOjEwNzU5MDAwNkMzNzU3NkIzNzU3NkI3N0I5Mzg0QUE4NUQyNjY0QTFBQgotOjEwNzVBMDAwM0VFM0ZERTlCRjFGOTU3MUZBNkRDQUZGREMxMEMzRUQyNAotOjEwNzVCMDAwRDc5RkFBNkU2RjBDRjRCQjU2M0I3N0QwNkZERURBRUYyNQotOjEwNzVDMDAwNEFBRDM1RjdFNTg1NTI1RUUwRTY2RjFFQUNDM0RGMDlENAotOjEwNzVEMDAwRTlERDAxRjYzRkU4QzFGQzY3REZBMDdCQkFGNEVGNkU5RQotOjEwNzVFMDAwNUZEMTMyQjQwOEYwNTRBOUM5NzNCOThCQ0ZBRkRDMTVBMQotOjEwNzVGMDAwOTA4NzQxM0YyOUU1MUNBRUI0OTY3RDgyMTRGMjVENUExNgotOjEwNzYwMDAwMDk2RkI3MjJDNjZDRjAyRjdGQTJENUZGMzVDNjQ5NjUzQQotOjEwNzYxMDAwNUE0OTQwMTgwNkVENTIzNjZEMTEyNEVDMEY3RjU3MEI3NgotOjEwNzYyMDAwRTA0OUE5NjZGRUQwREY5MzRBMTlDRkVEOUFEQkM3NkYxOAotOjEwNzYzMDAwMTYxNkU2MDRGMUQwNjg5QTkxQTM2MjVDMzUzMURBODVCQQotOjEwNzY0MDAwRUJDQzQ3QUFCNzBFRjE1MEZFNTE4MENFNDk0Q0ZDQThCNgotOjEwNzY1MDAwNUQ0MkJCQkQ1Qjc1RDcyMzdGRUI3ODcwOEE2QTBBQUU0QgotOjEwNzY2MDAwQTNEMTFGNzEzODlCRkFGQzYyQkVCRTMwRjZBODY2NDdGNAotOjEwNzY3MDAwMzdFQjc2RTk2MUM2RUQ0MjVBQTcxMjU3OEUzMEZDM0VEMQotOjEwNzY4MDAwNjE2MjlDQjY0RTI0MzJFRjRFODVEQTM3MzJBMjI3QTNEMAotOjEwNzY5MDAwRjkyNEFFQ0M2RUU2NzYyQ0E3RjdCNDJDQ0YxNjdDM0U0MAotOjEwNzZBMDAwNkRGMEM4QjE3OERGNDdENkRBODA4NEJGM0JGRURBMjZCQQotOjEwNzZCMDAwNTNDNEZCNTE5QTM1RkNDMzNDOUVDNUY5RTlGM0I4OUMxMQotOjEwNzZDMDAwNUVEMERCOTkwNzg4NEZFOEYyMTAzRDNEQjJERkMxRDhBQwotOjEwNzZEMDAwRTNGNDNFRkZEOUY4N0JFOUZFQ0E3QTk5N0U0RjRFQzdBNAotOjEwNzZFMDAwN0ZCN0VBNjk0MUJDQTZCNDZDMTYwODM3REE3ODdBREM1MQotOjEwNzZGMDAwMEU5RkEzNUMxRTk3OERFNzNBMDc5NEZCMTUzQjg3MTZGOAotOjEwNzcwMDAwODVDQTdEQkQ0Q0Y0RDkxQzk2RTdBRkRCRjc3Rjg4RTFENQotOjEwNzcxMDAwRUJFQTkwNThDRjNFQzQ0QjY1REIzQThBRUYyQ0Q5QzJENgotOjEwNzcyMDAwN0ZGNzY3NDBGQzVDMjFGRTg0MTJFRTA3OTRDRkUxRkJGQgotOjEwNzczMDAwNUVGOUNGNEE0NEZGQjI3QUZFRkJBQ0U1REI3N0YwQjhFNgotOjEwNzc0MDAwQ0U4Rjk5MEJGNTQzNzlDQjBFQTEyODA3N0YwNzczODc1RQotOjEwNzc1MDAwQjAyODA0OUZBOUU1N0VDQTgzQkZDNkFFQ0IxRkQ3NUIwNgotOjEwNzc2MDAwRTFGQzhFNzE2MkI0NTMwRUQ5Qjg3RUU4Q0M1NzdDQjg3OAotOjEwNzc3MDAwMUZEQzY5RjY5NjYzQkJDRUU0NjgxN0U2NzdFOUY4RkY4RAotOjEwNzc4MDAwRkQ4RTlCRTlEQ0I1N0RBNzI1ODA2NUEzQTkzOUM5OEE1MwotOjEwNzc5MDAwRkIwRUQ3Q0EyRUU0QUI2RUQ1N0IxMkU5MTMyNzc5NUFCQwotOjEwNzdBMDAwRjFGQkQ4NzhCQkFCMTZCRTc1NUFEODU4NTVCOTcyM0NBOAotOjEwNzdCMDAwNEMwQ0UzOEY4OTNGRTY3MjkzQTQzQUY0QkM4NkIxMjQ2MwotOjEwNzdDMDAwMzdBQTlERUIyRDEzRDc2Nzg3Q0M3QzFFM0IxOTg3RjcxMwotOjEwNzdEMDAwMDczMUVFQjMyNDg3ODdFMzY4REM5NEYyMDA5RDFGQ0E2QgotOjEwNzdFMDAwMzhCREQzNzBDRTMwQzg1RkVFQkY3RDFCN0VGRjNGMkMwRgotOjEwNzdGMDAwQTE0QjI4MDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDA0MwotOjEwNzgwMDAwMDBGRkQ1N0Q3QjdDNTRDNUY1RjhEQ0JERkIwQUQ5MERBNgotOjEwNzgxMDAwOUJGNzNCREMxMDBDMjgyNDZDOUUwNDAxRDkyNDg0ODc0MAotOjEwNzgyMDAwMjA2RTAyMjhDODZCNzk0NzkyNkMwMkQyRkVEMEZBNkRBNgotOjEwNzgzMDAwMTY4MzMxRTU2QjZCRDQxNjQ1QTkyRTg4OTZCNjVBODMwQwotOjEwNzg0MDAwQTIwNjBEQjgyODIyRDY0NzIzQTU4QTJEREFBNTIwMjIyNAotOjEwNzg1MDAwODQ2NDFCRkJDMDU2Q0I2RkNFOTk5OUVDREU5QjBEMEY1OQotOjEwNzg2MDAwNkJGQkY5N0NFMThGQzlEQzc5OUY3M0U2OUMzM0U3OUM2NQotOjEwNzg3MDAwOTkxRDMzQjVDREE4OEMyMkE0QTY5QTM4QkMzNDJERkQxMQotOjEwNzg4MDAwRTkwRUU5ODQ4NTkwMEJGMDZGMjIyMTgzNkMzMjIxRjE5RgotOjEwNzg5MDAwODRBNDNDQkQ0RDUyMkM1OEJFN0Y1QTFDRDYyNzI2MDVDOQotOjEwNzhBMDAwQkU0QkQ4QUU4Njk2QUZBMEE5NUIyMjg0OEMyNUU0QTBGRgotOjEwNzhCMDAwODE3OENDMzE4NEI0RTgyQTQ3RDk2OEZEOTY4NDQ4N0IyNgotOjEwNzhDMDAwMTMyRDNCNjY3MzQ1REI2ODdGOTY2MzlEMDdBQ0I0RUE3NgotOjEwNzhEMDAwOTg2MzNFQTM4QkY2NEJEQUU5Qzc2NDQyREUzMDEyMTI5RQotOjEwNzhFMDAwNDFEQjFEOEM2MEVERDM2RDc0OTAyMjQyMjYxQjg5MDcwRAotOjEwNzhGMDAwQkYxQjNEMjMxNERBREZDMUExODNCMEJGOTdCN0VBQTY0RgotOjEwNzkwMDAwN0E2OTdCQzMyMEIyRDgxOTMyRUY3NDlCMEVEQkE1NkM2OQotOjEwNzkxMDAwREQyMUU5RThGN0I4NDg1QTFFMzIzRjUxRUYwMTVCNTlDMwotOjEwNzkyMDAwMjZDQzY3Q0NENDRFODQ0M0RENTYzREFFQTdDMkU4MUNCRQotOjEwNzkzMDAwQjY2NjU0QjBERTY4RTg4RkQ2N0JFREU2NEY4QzdFRkFGMwotOjEwNzk0MDAwRkRDNzJGQkQ2RjI0NTBCRjU1NzJCNEMxRkM1QkRGMzczQwotOjEwNzk1MDAwQ0VDOUExQTlFN0U3MzI0OTIwNjQzQTYxRkYzNkJGRjBGQQotOjEwNzk2MDAwQkU1MUExREZBN0VGQTY3MEEyRjVFQTc2RUZEMjJGQTM1MgotOjEwNzk3MDAwNjk1N0E5QzUyMzhEMjYyNEYzQ0M2QjhCNDgyMUZEREVFNgotOjEwNzk4MDAwNjYyMjExNzQ2RUREMzY1NzkxOERDRUZCQ0Q1RDUzMEVBMAotOjEwNzk5MDAwNDk1MTg0NTg5RjMzRjkyMDE1RjAyMUM0OUZFMUI0MDY2MgotOjEwNzlBMDAwRTcyNTUyM0EzMENFMkY3MjJBRkRCMzEwQjI0NkVGNTU3QQotOjEwNzlCMDAwOTlGMEREOTU1OTQ1RUJCN0M2MzBGOENDMUZDQ0UwNDJDNQotOjEwNzlDMDAwMkNFQzdCMTU1Rjk3ODAwQjFEN0YwQThDNUY5MUU1RENBQgotOjEwNzlEMDAwMDFGRDU0MjQ0NkQ4OUIzMjYxOUVGOUFGOTkyOURDRUIxNgotOjEwNzlFMDAwRUM5MjNEODI1NjhEMkI2N0YwMEM5RDU3NjU0RUI4NzkxMQotOjEwNzlGMDAwNkRDMEYxRTI2M0Q5Rjg0NEVGQ0Y4MDcxMDlGMUIyRUZDNQotOjEwN0EwMDAwMzI2OTIxRjlDMUY2NzMzOEJFRTk3NzFGRkI0RTg2M0ExOQotOjEwN0ExMDAwNzM4MkYzRDdFMjZGODM0REMyRkE2MUU4NkMxMUFDQTNCNQotOjEwN0EyMDAwRjY5OENGQzdFOEFDNTMwRjc0OTY3OUU2MzBFMjQzRDBBRQotOjEwN0EzMDAwQ0RDRkI2RUEzMTE1RkRENUQ5OENEODVGOUQ0RDhGNzA2RAotOjEwN0E0MDAwRDkwQzc4MUE0QzUzMDMyQzlBQTYxQkNDNUUwRjg1QzcxMQotOjEwN0E1MDAwOUJGMzI2MUY5MjcyMjk3RTZFMzFGQTIwN0Q0M0I3QjRDNAotOjEwN0E2MDAwMTZDQURGNDg2MUUzQjdFODc0NkIyMURGNzI5Nzg1MzQ4QgotOjEwN0E3MDAwMjE1RTFENkU5OENGNkIzNzQ3MjE3RTZBRTcxQUJEMjZCRgotOjEwN0E4MDAwREFDRjhGOUY5NzU4REU2M0YxMTJGQTY3QUQ2QkY2NzIwQgotOjEwN0E5MDAwNjg0N0UyMjJFQzRGMDJGRTVDMDc4QzczQUNGREU5NEFCQQotOjEwN0FBMDAwNzk2RUJGNTFBMURGQTdCN0IxRkQyN0YwNTBEQkM2RTg2MwotOjEwN0FCMDAwNEJFQzA3MDFENzIwM0NCREFBRkQyNEYwMzE3RkIwOERFRgotOjEwN0FDMDAwRDEwNUE1MTc4MDc3Q0RDRTA4REI0OTMzMUJFQjAyMDEyQQotOjEwN0FEMDAwRkE4QzU2RTVFQkRCOTM2RDI3NDcwNEYzMzVGMDA3RDBCRQotOjEwN0FFMDAwQzEwRTYyODE3OUQ2RjI3OUNFRDNCOUVFODNGRDU1NjdBNgotOjEwN0FGMDAwRjYxRjM0NTBENDE2MUYwREUwN0UxRjg4N0U2QkQ2RkYxNAotOjEwN0IwMDAwM0FGQjY0MDEyMUFCOTMwRTYxMkFGNkFENjFBODdBN0YzRQotOjEwN0IxMDAwNkZFNTc4NkY4Mjk0QjY3QjgyRDM0RDRENjExQkVFQ0JCRgotOjEwN0IyMDAwOUE5MzBEQjg5RjJENTMxOTVGQjMxQzIzOEU1MDNDMTNBRAotOjEwN0IzMDAwRjI0M0JFREU3QkIxN0Q0NTY0REI2NDk5QzJCREUyNzE3OAotOjEwN0I0MDAwQzlENjQ0RkFDRjRGQTRBQjI0RTI2Q0EzRkQ3REI2RjVCMQotOjEwN0I1MDAwRjVBODI1MDBERkFGMkVDOEE0OThBRTM3ODJBRDc3MzdFMQotOjEwN0I2MDAwRTczQjVEM0IyOUMwOTFERTFCOEMyNENDN0EyRkI3M0ZDRAotOjEwN0I3MDAwRTIzQjIyMDEzQzZCMzhFQ0JCOUUyRTFGRkIyOUE1MTc3NAotOjEwN0I4MDAwQ0ZDRUMxRjZBQkU4OTJDRjNFM0RFQkY2NEZFOUJDQkJBMgotOjEwN0I5MDAwNzY0Q0I0Q0I0MDM2NEQ0RUE0OUY0MDdDODQ3RDNCQTVCMwotOjEwN0JBMDAwOUYzODk5NEM5NTI4REUzN0I0QkQxRTM1OEVCNkZCRkM0OAotOjEwN0JCMDAwOTdBM0YzODE2RkJGQ0RGN0ZEOTlFN0U1RjUwMDk3QkI3QwotOjEwN0JDMDAwN0VGNkVDNzU1MDVFRTM5NTYyNEQzMENFQ0VDN0ZGOTVFNAotOjEwN0JEMDAwNDJGQkE5REU1MTBGMTAyNjREQkY3Q0Q1RThBN0Y1NzRGNgotOjEwN0JFMDAwREU2REVDRkJDRUMxMzZBOEY3RjkxM0Y3NUYwN0YwNkUzOAotOjEwN0JGMDAwNkE2QkMyRjIzMzRGNkNDM0ZDNkIzRjdCNzZERjNGNjgyRQotOjEwN0MwMDAwQkQ1QTY3OTQxREVBOUQ3OTdFM0ZFMkE1RDZBNTc3QzA0RgotOjEwN0MxMDAwN0EwN0EyRUJDREJCRjYzMzdFRDkyNkUxN0UyMzczMTkxQQotOjEwN0MyMDAwMUYxMzc0MkRFOEY3RjM5RjJEMUUxQjJBMzdDNEY3MTY3OAotOjEwN0MzMDAwMjM5NzNCODM5ODFDMzlDQkY3NkY0RDk5QTUwNUQyQjM5OQotOjEwN0M0MDAwQ0Y0NENDODVGNUJBOERGRUVDNjg5OENGMjg0NjE3MUYzNwotOjEwN0M1MDAwNzE3OEQ0QjZBRDMxQjgyREQ4MUVGQkY5ODBFRTdCNDhEMwotOjEwN0M2MDAwNzMyODdEOUVBMkY0NEU2QkVEQjg1MDAwRTNGRDBBRUI0NQotOjEwN0M3MDAwRDM3QTI1MTExNEJFMzcyRjM4MkVDMTdDMjI0NzM1MThGMAotOjEwN0M4MDAwNkE3MDlFQkY2NEU1NzRENUExRTVDNUVCMTgzRDZBRTk0RAotOjEwN0M5MDAwRTAwQjlCMDVFQjhCN0Q5MEIyQkIzMjRENDEzRTYwQjI1OQotOjEwN0NBMDAwMzMzRUNFRDY5NzUyRUQ2QUIyRDJFRkQ3QUY3M0Q5NjVENQotOjEwN0NCMDAwOEFDNzk3NEYxRjlFOUM0QUYzM0YxQjIxMTUyMEZFNjVFNAotOjEwN0NDMDAwODlDOTM5OEYwNUM3QTk1QjVGNDY0RUQwRjlFQUEyRDlBOQotOjEwN0NEMDAwN0U0OUIwMTFGREI1QzgwN0I2MzFCQUQ3MTNCRDA1RjI1QwotOjEwN0NFMDAwRkEwMEYyODlCQTE2MkUwNzc3QjA3OTEyNzMyMDYzOTZEQwotOjEwN0NGMDAwMTVEQjU5QUU4RDA5Q0U4M0I2QjM1ODMwMUZDOEI4MjlFRAotOjEwN0QwMDAwMDdFNDhFNjcyRUNBMURDNTg4RjMzRDIzRjgwMUYxRTQxMAotOjEwN0QxMDAwMkVDQzA5RUVCNzA0MUQ3MTAxRkUxMzhDMzRCNTMwN0VGNAotOjEwN0QyMDAwNTM0OUZCNEY4RjJFNEQ4QTJFMEFBNjA5ODM1OEI5MTY0OAotOjEwN0QzMDAwNEVCN0YwRjIxRjQ1M0I5MkEyMDE1RTNCNjM1NUYyNjBFNQotOjEwN0Q0MDAwMjBCRUYyREFDRERENEM2RUJGNzIxQ0U5RDAwRDc0MDg5NgotOjEwN0Q1MDAwRTNCQjRFQUFFNEY2NzI2NEFFOTQwRUY3MUM0NzNBNUM5RAotOjEwN0Q2MDAwREVDRUY4QUJCQkJERDRCODhDQTY5QjI1MzIxN0U2RUZCMAotOjEwN0Q3MDAwRTZGNDA0NzQ2NEE3Rjk5QkEyQTM3MTdERUVFQkZDRDkzMQotOjEwN0Q4MDAwQzBBN0JBMzlERDc1RUY2MUY0RjY4NjRFRTcwMUY4QkM5RAotOjEwN0Q5MDAwQjE3REU0MzY5MDA3NUFGOTI4NTUzQjExREY2RThBNkZBMgotOjEwN0RBMDAwOTMwNDdBRDZCQUMzQTA2N0Q1NTUxMzNCRUM1N0Y3NkU0OAotOjEwN0RCMDAwQkUxRjFBMDhFRTA3Nzc3QkU1NzJFODJGMzU2RTlBNURENQotOjEwN0RDMDAwOTY1MDJGOTk5QzRBRjNFRTVBNTIwNEZCMkQ2NTZCRDlCRAotOjEwN0REMDAwMUVBMDBCRDIyRTkxQUIyMDVGRUREQzBERURBRjhGQUI3MwotOjEwN0RFMDAwQjNDQjk5MjBGN0I2Mjc5OTY5RkRFQjQ3MTQ2M0ZCQ0QxOAotOjEwN0RGMDAwRTk0QTI5RjRFN0E5MjBCNjI3MjE2RjcwQTEzQ0RCOUM1MgotOjEwN0UwMDAwM0NEMjBFRjJDRUVEREE4ODdBMTc1MTA2RDlBMTlDQjg5MQotOjEwN0UxMDAwRjQ2QkExQkVEQkIzODA2QzkyQzJFQ0UzM0Q5MjAzQ0I2QQotOjEwN0UyMDAwQkQ5MURFMDhEQTdFN0EzQkQzN0ZEQ0VENkMxRjlGMTNCOQotOjEwN0UzMDAwRjAxMUE5QTE3MzExOENEN0ZEODI4OTc4QTQyMDlEQkQ3MgotOjEwN0U0MDAwQjk2NzBBOTNCMzJGOUE1MENFOUU2RDc0OTAxMzU0MzQzMQotOjEwN0U1MDAwOEY4QzU2MTBBRjAyOEUzNUFEOTkzQUEwNUI0MjY2OTk3MQotOjEwN0U2MDAwNjAxRUNCRjgzQzVBMEQ0QzZFNDQ3MzM5OTA3NTJGOUJCNQotOjEwN0U3MDAwQzc3MkJFMUY5NjQ3RUI3ODZBRTRGQkFGOTVDOTA1OUJCNgotOjEwN0U4MDAwMjcxN0U0RTAzOTNFMUU5MjQ1MDI5NzczNzRFOEJBRTU3RAotOjEwN0U5MDAwM0VEQzI3QjU0RkIzRkVFMjRDOEVCQ0RCNDJFODU1RTgzMgotOjEwN0VBMDAwNDc1QTdBNkNFMkUzQTY2QzNEMjAwMTMzNDlEOTVBQTVDMgotOjEwN0VCMDAwREFFN0Q3NTcxMzVGM0Q1REU3RjU1Qjc1QkU4OUI5QTg3MwotOjEwN0VDMDAwMzdERDgyRkM3QzgzOTE2Qzk3RkFGNzc3NEYzNEUzNUI2NAotOjEwN0VEMDAwMTVCMUNFM0MwOUU0RDdDRDE2RDQzRkZBRjZFOTIwODc5OAotOjEwN0VFMDAwMkUwMkY0Qjg3Q0M5REU4NEFCNzAxNkVBNjhCREQzMDlGMwotOjEwN0VGMDAwNTYzQkUwRUQ0NzFDOEU1QTdEQUJBRkJENDYwRjlDRDE4MwotOjEwN0YwMDAwRUFDOTI1NDM2OUU5ODY0MTczMDE5RTU0NUZCNzk4QTE4OAotOjEwN0YxMDAwOUQ4REI2QTdGNTEyQjY4RjdCNjIxM0YyQUIyNkVDRjdGOAotOjEwN0YyMDAwRjY2ODFCRUIyN0Q2NTlEODAwMkMyRUNCQjk4RUM5Mjc2MwotOjEwN0YzMDAwQUIzRERDN0FEMkEzODU5RUJEMjg0RjA3RjQzM0RCODJBQwotOjEwN0Y0MDAwRkJFMUM3QUY0ODRCMTlCRDUxNDEyODAxM0RCMkZENDE4RQotOjEwN0Y1MDAwRThGRTc4NTI0MTdBNDQzRENBRERFMEY0ODZBNzQ3QjY5MAotOjEwN0Y2MDAwNUZEQzU0QUYwMjNEOUJEMkUzNUFBNjI3NUIwOERCNEY5MAotOjEwN0Y3MDAwOEMyRTIzQTczMjc5MDA3QzJCNTQ5RjE1RkI1NEJCRUYyQQotOjEwN0Y4MDAwMDVGREY2RURGQkNCRENFRkREMDZCNjFGQkIyOTFDODA0MwotOjEwN0Y5MDAwREVGQkU4RkM2NTQ2RTc5QjM2RDBGRDQ4Q0IzN0QxRkREQwotOjEwN0ZBMDAwRDgxNEMyRkZCNUU3MUY5ODI3OUMwNzA0QkYzRDY2NzMyRQotOjEwN0ZCMDAwNzYwMDVGNzQ2RjdGQUIxOUM5OTZGMzQ3RjdDQjNGQzg2NAotOjEwN0ZDMDAwQkU5OERFNjU4NkNBQjQ1RjMzRERBRkExRjQ2M0E2RTA3OAotOjEwN0ZEMDAwQjZFNjYzRUEwMTM5MTFCOTVFQUQ0Nzg5RjQ4MzY4MjZENAotOjEwN0ZFMDAwQkZCRUIxREUzODQyRDJBM0RFQzNGMTU1QUI3MzdEMDAxNAotOjEwN0ZGMDAwN0MxRUY0NDY0QTExMjQ2MzNERDMxQjEzNDBFNjAwREU4OQotOjEwODAwMDAwQjY0NzdBNDEzRjRFNDgyMEFFRTdDMkNDNjczRkRGNjdCNAotOjEwODAxMDAwMDI5RkUyRkM5MDEwQzVFQUY3RjI3REZGMjlBRkY3NEYwRgotOjEwODAyMDAwOUU4NjlDNEI3MDNGMjgzQUQ3NzEyMjBGMkM4RjQ0M0I4MQotOjEwODAzMDAwM0EyRjJDMTdGM0U5M0JENzk4RDk3QzEzRUVDQURFQkU1MgotOjEwODA0MDAwMjkwNDhGQzE3RDc1NzUzRUUwMzdFQjVFOUY3RUE5MjVDMwotOjEwODA1MDAwMzg4RTkwOEI1QUJBODFGOTgzRkM4MUY1NTQ4RTFBQjgwOAotOjEwODA2MDAwNUVFQjdFN0UzRUQzRDA3MTA0REY1RjdCQThCODgyQjQyNgotOjEwODA3MDAwRDVFMEZCMkJFRUM3MzU1NjAyRkEyMjI1MDc0NzJDOUQ4QgotOjEwODA4MDAwNTdGREJFRTE2QzFGOEQwODY0NDNGQkVBNThENzREMzFBNAotOjEwODA5MDAwQjRERjMxOTNGOEZFQTBERkFCRTA5Q0EwMjcxRTUzMENBOQotOjEwODBBMDAwRTBEREUwRjU4N0UwRjlEMzE4RDY3RjhGRDVFQzkxRTlENAotOjEwODBCMDAwRkVCODIzRDYxNTBERUQzRDY1QzRFRTAzMzk3MzA3RTUxMwotOjEwODBDMDAwMjdCMDZGODlBRjA4Rjg0RDNERjE0NzAxOUNDNzU4NUQ1NwotOjEwODBEMDAwRjEzMTQwQkY3MjY3MzZDOUEyRkM1N0YyRTdDMkY3NjNCRAotOjEwODBFMDAwMTE1MUI5ODRGNkYzNzFGQjZGOUY3OTg1QjY1QUY4Q0FCRQotOjEwODBGMDAwQjk4NURGMDNGQTdBMzEyMjAzRThFMjE4RDU5NzNCNTFCQwotOjEwODEwMDAwREY1NjA2ODNCRURENEI5NEMxQjYzMEZDNTdBNDBCQ0NDMgotOjEwODExMDAwM0FCM0JFMjA5ODNGNjY1NTlGMkY0NDdBNEQwQ0MzNkZFQgotOjEwODEyMDAwRkRGOTE0RTI4OTg1RkUwOTlFQkY3QjYyMTRGNjVEMUY4RQotOjEwODEzMDAwMzA4MkVBNTY3RjNFODM3ODY4N0YxRkVCNDg3NTVCOThGNAotOjEwODE0MDAwNzEzN0M1MzA3QURCNERDOEQ0NzBFNUY3RjE3MTc2MEYyMQotOjEwODE1MDAwNjVGQjMwQjA0REYyMDI3RkFDNUVCRkUxQ0YzMkU1MDc4OAotOjEwODE2MDAwRDVFQkFDM0U0QzY5MzFFODZGRDUzNjhGNEY0N0YzQzczRQotOjEwODE3MDAwMEM4QzFGRDE3RkIzQ0RDNTQxQjk0N0VCRTlDNzAzMEVDNgotOjEwODE4MDAwM0NGNDIwNEJGOUUwNTIyRUI3OTYzNUJDRjkyNUQ4MTNCNAotOjEwODE5MDAwQUFGNUM0M0M5RUY2QjNEQ0VDM0M5ODRBOEIzRUIzMkM2QgotOjEwODFBMDAwOEYwMkI2QkZGMjNCQjcyNTgwNUM0QTVDRDBDQUVDMzI4NgotOjEwODFCMDAwNjQ5MjBERjQ1RUM5MzE0M0JFMTA3OTMxM0Q0QjhGRkFBNAotOjEwODFDMDAwMzFFMjlGRTJFQjhCMThFNzRDQzBGNzgyQzEwNEY1ODBFNwotOjEwODFEMDAwMDVCNzQ1N0EzRDIxN0NEMENDRTFBMUE1OUI0RkI4N0U2NwotOjEwODFFMDAwQTVFRDdGNzY2QzE5ODFGRTNBQTI5QzczODEzRTE2REM2OAotOjEwODFGMDAwNzY0RUM1Q0ZCQTI1RkY1MzhGMDI1REFEQjFEQTlGNjRDRAotOjEwODIwMDAwREQ2NTM4NDNFOEZFM0I2MkJDRjMzQUM0NTM0RjVFNjcxQQotOjEwODIxMDAwRjZGQTRDQTBERjQwQzY4NzYwQ0ZFQTMwRDkzQzBBOTQxQQotOjEwODIyMDAwMUIxMUNGQTJERDlGMUEyOUUzQ0IwRUU2OTc5RTFFMzZDNwotOjEwODIzMDAwMTlFODZCMTlCMTM3MDNERTk3QjU0NDEyNEYwODNGMDNCNQotOjEwODI0MDAwMDUxOEU4QzM3RDlFNjAzRjRCM0JERTNDMEFGQ0RDQUQ3RAotOjEwODI1MDAwRjcyMzlEMkMzNTVCMTA4RkVFRjM3QTlDMDc2OTMxNzQwMAotOjEwODI2MDAwRjk0NTdCOEFGQjIzNTE4RURCNjA3RDlFN0JDNjQ3OUY1MQotOjEwODI3MDAwMUE0OTNGMjZEMkVGQjg3RUQ3RURGMEZEQTFDODI4RTIxQgotOjEwODI4MDAwMDBGQTc4NEJGNjBFQTdGM0VGMzUyQjgzNjMyOEJDRUE5MAotOjEwODI5MDAwOEQ5NDBFNDY2MzM3NEU3Mzg4RkU0M0QyQUM2QUZDNzdFQQotOjEwODJBMDAwQkNGNTI1Q0M2N0I5RDk2NTA0MzlCRUMyNDFDRkE3MzIyOAotOjEwODJCMDAwRTBDOTU3NjQxQjE1OEFFRkYxRjI4NTkxOTc4RkVGNDU1RQotOjEwODJDMDAwN0NCRjdGNkNBNEY0MUY2NjFGRERDN0UxREYyM0VBQTUzNgotOjEwODJEMDAwQjA3REYyNzEwNkE5N0UwRUQyNkI2ODRBREI3RDNDOTRCQwotOjEwODJFMDAwRTdGMzc5M0U5QkQ3NEI2MEY5MUQ3QzlGN0M5Q0NCRUFFMgotOjEwODJGMDAwNjlDN0YxQzUzMEZFMzYzQkQ2QjExNUUwNDVEQkY5OENEOAotOjEwODMwMDAwNDAxN0ZCMjJCQ0E4QjcxNjUyN0UwN0ZDNkQ2RDNBRUFGNwotOjEwODMxMDAwQUQ5NEFGRURDMDdBRDlDNDE3OERGNTRDMjg1NzQ4MDNGQQotOjEwODMyMDAwRTU3QkIwQ0Y4QjE0ODRDRkE2NTI0QTI3QjQzQ0IwRDc5QwotOjEwODMzMDAwNjREQkFFMDRGMTJBRjBBOUM1NjM3QjhDRjRFRkM5QzNGQQotOjEwODM0MDAwNTE5MjNFRDQ4RTQyRTU2MTdCMENCM0EzMTg2MTdGRDI3QgotOjEwODM1MDAwOTkxODk5OUUzNjBDRjE4NTc0MjI1RjNFQkU2RThDNjAzMgotOjEwODM2MDAwNzhBMEZCRjRCNTE4RDQ3QjdEMzlBMUZCRTUwNEM3OTc1MQotOjEwODM3MDAwRTA2NzFGMEY1MkUzQjU4QUUzRTE2RDVFNkY1MThDOERBQwotOjEwODM4MDAwQzk0RjdCMDBGN0REQzczMUFDN0U1QzE2OTM0MzQyMEZDQgotOjEwODM5MDAwRkYwMzg3Q0I0RDlBNTRDODk1MzE1M0Q1RkFDNTREMUM3MAotOjEwODNBMDAwOUYzN0M1NDQwOUJDN0UwOEYzMTVGMjg4RjIxNzVGMzQ4NQotOjEwODNCMDAwREQwRjBCNUUzNTIxN0YyMTFCMDNEOUIwRkY2OEJENjM0NAotOjEwODNDMDAwNTg2RTBBMkM4QUE1NzJFNDI2QUFERjE4RjNCMUREMjJDMgotOjEwODNEMDAwNjhERkVGM0MzRjRBRDA4NTk1ODA5QzNFMjVENjUzMThGOAotOjEwODNFMDAwNDA3RTRGRTUxREFFNkIyOUExN0M0M0JBMzRGRTM3RDBFOQotOjEwODNGMDAwM0FDOTk0RDY4NzBDNTZEOEY5NEVBNjAzMDJFRDhGMjBDMQotOjEwODQwMDAwMEFGNDQ3RTFGRUU3NTBCODZCQzczQkM2RTlFMDlGMzE4RAotOjEwODQxMDAwOTIxRUYxOTY0N0YyNzA5RkJERkY4NTc1MjFFREYyOUM4QgotOjEwODQyMDAwQ0RFQ0QxNTFCRUZGQjhDRTc1MDFGQUU5QkFGRDJERDQxRAotOjEwODQzMDAwQ0I4RjE5N0REOUFEOTYzMEU1NDZERjYzMEY0OUMxRjI4OAotOjEwODQ0MDAwQzUzRjk3M0Q0NkNBMkY3Njc3NzZGREU0NjZCQUVFQTUxRQotOjEwODQ1MDAwOURCMjFEODY1QzdBRTc1RkRGMUQwMzdBNzVBN0MxMEVBQQotOjEwODQ2MDAwRTc0NjJBREZFRkQ1QzNCQzFCOTgxRTc5NENBN0E2ODMyRAotOjEwODQ3MDAwQjNERjU1OUY3M0QyNjIxOUJFQThERTgzRkE5Q0UwM0IzRQotOjEwODQ4MDAwNDI3RURGNEE3QzU3ODE1QzVGNDYxQzQ2NDhGRkI0NjZFQgotOjEwODQ5MDAwRDUwQzQyRTFCN0MyQjIwRUY5RDFFNzZCQTdBMTFFQkM2MQotOjEwODRBMDAwOTI3OEIwN0M1OThCRTE0RkExRjI2MTQ1QUIzQUJGRUFCQgotOjEwODRCMDAwNjE3NUZFNTZBRjNBREY2NzdGMkUwRjJGREZBN0M3MzJGOQotOjEwODRDMDAwM0EzRTRCRDkzRUUwM0ZCMEMxRTQwNTNENDg1QkFGOTgzMgotOjEwODREMDAwRDdDQkE0M0NCMTEzRjgyNDk1RkI2MDQ3NTgxN0UxNDg2QgotOjEwODRFMDAwMDRCRUJFNkU2RjY5RTJDNUVDN0NGNUU3QUYyMURFMTAxRAotOjEwODRGMDAwN0QyM0E4MzdFNDEyNkY2Q0ZGN0VDQjYzMTU4NDIzRjREMQotOjEwODUwMDAwQUJGMDcxRTBCQzcxQjYyQ0ZDM0EyNkM2MEEzRDY1MTA5MgotOjEwODUxMDAwRjYyN0JFOEI3RTgyRTM0NUUxM0NFQUNGOUIwNzk4OEYyRQotOjEwODUyMDAwMDVEQjlGNUQxOTdFOUMxQkZBQzZCMUE5RTQ2NEIwN0Q5MgotOjEwODUzMDAwMUM5MzZCRkMxQzJERThBM0ZFN0MxMjdFMTc3OUExMDcwRgotOjEwODU0MDAwMDdEQkE1MzFGRDhBQTREOTRFNDUwNkY5OTRCMDYzOEJBQgotOjEwODU1MDAwRkQ3MDQyMjJFNjY0QjQzQkREQ0ZDRkVCRjY1Q0IwNUY0QQotOjEwODU2MDAwOUYwMDNEMDhGNkUzMTQ2NTlGOUY0RTcxRDlGN0M2NjZEQwotOjEwODU3MDAwRUI4NzA2Rjc4Qjc2MUQ5NEFFQ0VGODQzRjhFRUIyNTgzMwotOjEwODU4MDAwNkIxQzhFNkIyNzc2MTg1N0QwRkJBMkRCMkIwNkJCRTg0MwotOjEwODU5MDAwN0NGRjc4Njc3OUEyNkI1NDI4M0ZGNTMwQkY4OTUxRTg5QQotOjEwODVBMDAwNUYxNjk1OUMyNTFBMzlCQ0FDRkQyREQ0QkJBOEJFOTU5MQotOjEwODVCMDAwMEQ0Q0U3RDNCREI3MjNCREFGMjRDRTA0QTBGMzlFQkRDMQotOjEwODVDMDAwQzMzMzVDRkY4NkZDMTVGMzk5RTU1OTYyMjA5OEE3OUI5RAotOjEwODVEMDAwOThFRUJGMkEzRTlGNTkxRDRDRUZEMzk5MUQwNjFDQzcyQwotOjEwODVFMDAwNDExNDVCMDIxRUE1RDk3QzI5RjNENEQzRkM4NEJFRjlDNwotOjEwODVGMDAwODM5MThFOTBGMTdDRkUxMkI0QTdGMDlEQzA1M0IyRDQ0QgotOjEwODYwMDAwOTUwNEYzMzZDMUI4NzRCQzA4RTI0RDgyQjQ2OUFDNUQyMAotOjEwODYxMDAwODE3NEEyRTRENEIzNzkzMDNDNEYyNjBENjk1MDVGNjc3MgotOjEwODYyMDAwRjZDQjZDOUQ3NDA2MDlEMEJFMEY1RTk4QjdGMkZDQzZGRgotOjEwODYzMDAwRDlCRDhCNTZDMDc3OEIxNUY5ODg5MUNGNjM0NzJDRTU1MAotOjEwODY0MDAwODc2NkU0MkY2NjU4QjdDOUUyRkIxQ0ZENjQzQ0Y1OTRDRAotOjEwODY1MDAwMjlCODhGM0Q0MzA5REEzQjA2OTEzNjAyRTM1QTJDRTdFRAotOjEwODY2MDAwM0NCMDU4MUJCMTQ5OTA4RkIwRjVGQUUwRkM3MENFNjY3MwotOjEwODY3MDAwRjFFODQ2MjM5RkRDMTkwQjdDNTI3QTY3MjVFMDg1RjJFRQotOjEwODY4MDAwNjU2NkZGMTlBODVDRUZDMzczQjdFMDczMzE3QzdFNEQ1QwotOjEwODY5MDAwOUNDRjI1MTMwNjg3NThFMkMwRjExRUIwQUU5QzQxNDAyNgotOjEwODZBMDAwODQ1OUQ2NDlEMDdFNEJENDU0RjRFRjI1MDBFMDY5Nzk0MwotOjEwODZCMDAwRUM1NEJEOEE2RkM1M0JENUY5QzRCOUVBN0NCMjRCOUQ3OQotOjEwODZDMDAwMzdEMzkzM0ZFODhCOTJDRjk5NzQyMTE2Q0Y1OTIzQzBBQgotOjEwODZEMDAwREU2MkUwRkNBMjk5Q0ZFQjA4QTQ3NDNERUY3MTNFRkQ5MQotOjEwODZFMDAwOERGNTEzQkJGQUJDRUU4RTMxMTJCNEUzMjU5OENERDBENAotOjEwODZGMDAwM0ZENTU3REU4QjY1RkFDQTI3MUUyODk3MDNDOENGRjNFQwotOjEwODcwMDAwMjZCNkY5QzBBRUQzN0M4MzY0QkY4QjdFNkZCNjJBMUJCRQotOjEwODcxMDAwRjQ5NDU0M0REMzI0NjZDN0QxREI0QUY1QjQ3QzVCODYyMAotOjEwODcyMDAwQ0RCRTg5RTZFQkMxN0UxRDBCRjNCN0Q1M0M4REY2NDk3NgotOjEwODczMDAwMTNBQjQ3MDJDREUwOEZEQ0I2Qzk2NjgzN0E3MUU1ODE2MQotOjEwODc0MDAwQzk0NkQwOEI1NzEwREI3NjEyODZCRUJGQTJGQjg2Q0UwMQotOjEwODc1MDAwRjcwOUM4NTNCQzQ4OUM1RTIyMEYyOUYzNzEwREJDN0NGRAotOjEwODc2MDAwMDdGQzlEQzVGMjEzOEJFMTVDQ0FGRTY1NzVFNDc1M0FBMgotOjEwODc3MDAwQzBFRUUwOTA1MTJFRDY3N0U0QkQ2RUExRTM2NUNEQ0U3QwotOjEwODc4MDAwNDMzQkJDQjM5Q0Y5NzMwOURGRjc2MzM0RkI2QTVDOTAyRAotOjEwODc5MDAwQ0VCMTNDOEZFNzg3NzU3MEJCNkU5Qzg5Rjk2QjZENzRBOQotOjEwODdBMDAwODg2MjY2MzZDMEZBNzE4Q0ZFRUQ0NEZDNjNGQkYyNUFCNwotOjEwODdCMDAwMTJGQzA3RkQ5NTA3RkI0NzNFMzQyOTU4MUNEQzY3NzQwMwotOjEwODdDMDAwQTg3Q0IzQkRBOTk2RDYxQkEzRjdFRDg3N0QzQzhFQTdFOQotOjEwODdEMDAwNzkzQzdEQTNGNDA2OTRCRjlEM0E4QjYyRDRCMTdENkQ0NAotOjEwODdFMDAwQ0UwMjEzODY1MzA2QjgxNERCN0VEMDA0RkQ0QzkwN0M3OQotOjEwODdGMDAwOTg2NjRDQkRCRjA5QTY1RkM1RUQ0N0QxNDk0NkVGMDY1NwotOjEwODgwMDAwQkE4RUE2MTI4QTY3QjQ3N0ZDRjkyMEQ4QTVFNTA3NDk4NQotOjEwODgxMDAwMDFFMEU5ODg0MUM4MzkwNzlFRDMxNTdBMUNGQjFBM0E1MgotOjEwODgyMDAwOTg2QzQwRkRGQzJGOTMyQUYwM0IwMUQ1OENDRUJCRDIzNwotOjEwODgzMDAwQzYxNjIxQkUwRjJDNUY3NTI4M0Y2QUUzNjRFNDM3QjM4OAotOjEwODg0MDAwQTYzMkJGNkFGRDVDQjM1NzkyNDBDRTEwRTY3N0QyQkIyQQotOjEwODg1MDAwMzI2RjBBQjE5NzA4M0ZDNEZCMDYzMjc3NTc5OEYzNDQ0QQotOjEwODg2MDAwNkQxQ0QzNEZBQjY2MzAzQjZGRkQ0NkEzQ0E3RjUzMUREMwotOjEwODg3MDAwQzdFQzVFMzNFMzI2OEY4QzQzNzlDNEZDQTc3OTcxNUMyNwotOjEwODg4MDAwNkYxQjQxNDYwMDlGMEFFMTIzNDU1MEFGQUJGNEVEODFEOQotOjEwODg5MDAwRjg4Q0JBOUNGMzk5Mzk4RTAyMDNFQUZEOUNERjA4QkU3RQotOjEwODhBMDAwRUUxQ0M0RjZGMzNDNDJEMjgxQUU2NzkzMDZFNEZGODcyOAotOjEwODhCMDAwNEI2RjQ1N0U3MzEzRjExODAwNkYxRjk1QjE3ODAyMzEyRAotOjEwODhDMDAwRUY1OTUzRDU3QUQyMUNBNzNBN0ZGMzVDQUQxRUM1RjBBMQotOjEwODhEMDAwMjFDNjlERTc1Mjk3NTcwOTNENzhBQTVBMEY1RUYwRkZDRgotOjEwODhFMDAwQkU4QTQ2Qjk5QUY4NTRERDg1MjFFMEU3NjBGNjAwQzBGQgotOjEwODhGMDAwMEJGMzczRTg5MTZFREMxQjk5M0ZCQ0JFM0RFRjhEMzhFNgotOjEwODkwMDAwRDg2Nzc3MTJCRUNGNzY0OUNCRDFGRkIyNEI1QTExODJDRQotOjEwODkxMDAwRkZENDVBQUYwNDcyNjRCODU1RDg3RDk4REVFNDM0NzkzOAotOjEwODkyMDAwRjc4M0RGQzM1OTgzMTI5MUJDQ0VFMzQ5MEU0MDNDNDkyMwotOjEwODkzMDAwN0U5MEJFQUQ2NTU2MTY1NzQxMUNCNTMwOUYzNDVCQTQ4MgotOjEwODk0MDAwMURGNEZFMTY1RDNFREE2NTVCQTJBQzJBM0JGQUE2MEQ2RAotOjEwODk1MDAwNEEwNUQ0MTNGNjU4QzU0NEYyNkQ5QzZFQzI5RDc3RDc3NAotOjEwODk2MDAwQzUzMUZFQkE1OTYyNzY3MUNGM0MzMzlFMkJFM0IzOUM3RQotOjEwODk3MDAwMkEzRjQxQkM0QzhFODI5RDcwNjQ5QzIyRUFBM0ZENjMxOQotOjEwODk4MDAwQjNDMTk1NUM0MDUzQUY0NDk3MTExN0QyNUUyNjFCRDFGQgotOjEwODk5MDAwQUVBOEUxNEZGMUIxNzZCNEVCQzcwRkNFNDEzQkZEOUNFMQotOjEwODlBMDAwOEUzQ0I0MkYxMjRCODRGRDJBMjlEOEZGOUNEOURCRjRDRQotOjEwODlCMDAwMTBBNzUzREZCMTREQkZEQzEyQTRCQjdCRTJCODVDOERDNgotOjEwODlDMDAwMjQ5MTQwQUY3RDc2QkFFNzRDNjhBNzdCNUNFN0ZDNUZGQgotOjEwODlEMDAwQTBDQjVBQTMwRkVENzEyMUY0OEFERjA3OTI4QkFCMzgzRAotOjEwODlFMDAwQkQxOENBOUNGMzU2RDBGOUY1QkM2QkI0QzNGOTE5MUQ3OAotOjEwODlGMDAwNkRCNEZGRTdGNzQ0QTM5RDUxNUY0NTUwM0U2RDJDNjU3NAotOjEwOEEwMDAwN0NBNDA3RUM1Rjc0MUQ5RjQ1NTdFM0Y5NjBBM0Q0OEFFQgotOjEwOEExMDAwRjJBMzNCNjYzMkQyRjE2QUNCMDEzQzA3NTc2RkE1NzREMwotOjEwOEEyMDAwMTgyMjlGNTZFRjUwRTc2QjQ4Mjc5RURGNkI5RkVFNDc1QgotOjEwOEEzMDAwQ0ZDODE3MDUxRjc2RUY1NkI3MjNDM0Q0N0MzNzhGQ0IyQgotOjEwOEE0MDAwOEI3Q0E3N0Q1NjA1NEM3REFFM0Q4QjlEQzNFOTQxODY1MQotOjEwOEE1MDAwQUVBM0U4MUQyM0I3RUYyRUIwOUQ4QTAwNTZGQjk0NzQ5OQotOjEwOEE2MDAwMzFGREFEQzc3QTVBNjZGQjlGQzk4MzIyM0U4RTU2NkU5MgotOjEwOEE3MDAwMTU3MUJERUQzQUNBQkZFMEZDMkFGNEIwMjJDMkYyMDc3QwotOjEwOEE4MDAwNzQxRDcyOTIyRTM4REY0MkRFNEVFODdGNDI0RTA4N0MyMwotOjEwOEE5MDAwOTU5NjEwNTI0MkY3NDNBN0UwNEY0M0M5NTBDMDM3RURCNwotOjEwOEFBMDAwMUZGNzg5MDQ5MTQzMzFEOEJGMDdDRTdERTNGODc4OTQ0RQotOjEwOEFCMDAwMUUzQzIwQjczRDNBQjMxN0U4QUI1OTZBNDAzOTY5MDYwNgotOjEwOEFDMDAwM0Q5RkE2OUIyNDE3Q0E4Mzk3QUEzRDMyQzA3QjJDNjk4MQotOjEwOEFEMDAwOTgzNTgzRDYxQjZGRUU4QzA0Mzg1MTNBMzkxMjRBM0ZEMQotOjEwOEFFMDAwNERDNDk3QjE0QjUyRDExMTk2Nzc0NUJGMUQ5NjhFODREOAotOjEwOEFGMDAwM0NGMzdEQzRGNDk4RTk3NEM1RDA0RjA1Mzg3RTY4N0E5QwotOjEwOEIwMDAwNDA2MkU3QzgyOTk2MUZFQkExRkREQkJBNjk0ODI3NTNFRAotOjEwOEIxMDAwODk1NzBGRjNBQkIwQTlGMTNGMjU0OTlEOUZBNkY0QTM1OAotOjEwOEIyMDAwMEY4Q0MzNzA3MDc4NEUxRkExMkU3NzA4N0U0N0Q0RkMzRgotOjEwOEIzMDAwMkU5MzdDODU3QTE4RjlDMUMxRUY4MDVEMjE3MjNEMTlCMQotOjEwOEI0MDAwMDFGQTBERDU0NDcxMUY2QUU5RTBFQkI4NkZERDZGRjJGMQotOjEwOEI1MDAwNzU1QzE4QkY0OTBGQjcxMzVGNEJGQzJCOUY5NkZBRDM3OAotOjEwOEI2MDAwNTlGNzFCRUJFNUE0MTA3QTE0RkJFMjY1MDM4QjdGOTBBOQotOjEwOEI3MDAwNUU2NUZFQTkxMjMzMTlFNTAzRkEyQTY0NzY0NUIxM0YxMgotOjEwOEI4MDAwQUUwNUZBOEMwOUQyNUQzMUZGOUUxMUNGRTk2QzA4MTk1MAotOjEwOEI5MDAwMDI3NDM2QTEzREMyMjc1M0JDRTRGMUZFQUUwNUJBQ0I0OAotOjEwOEJBMDAwMEZFQTIzRTI1Q0QxNTREMjhGQkUzMkE1MkNENDVGNzA4MQotOjEwOEJCMDAwREYwOTdEQTQ0MDZBNkJEMjY3MDIxRkI5QTcwOUU2MUJEMwotOjEwOEJDMDAwNDI0RjQzRTM4QjgwMkY1MTdBQzI3RERBNEZDRUFBQ0IzRQotOjEwOEJEMDAwMzVGNDI2RjAyRUY0RTU1MkQyODA3NDM2NUJBNzYwRUFCNQotOjEwOEJFMDAwQUI1Qzg1RjJCNURDMzI1QjBGRURERkFDNjJGNDM2MDlDRAotOjEwOEJGMDAwRTgzMTBCRUFBQkU5QTVEQ0FDQ0U2QkU5OTE4RUE4MEJCMgotOjEwOEMwMDAwMUQ1NzRCOUYwM0QxREIxMEEwMzcyMTVGNjMyRjRENkZBMgotOjEwOEMxMDAwRDNFM0JGNzU3QTlCMUU3RjExN0FEM0QyOTlFMDVGQkJGNQotOjEwOEMyMDAwMjI2Q0U1QTAzRkQ3NTc0QjI4MEYwQURFMURENjA0Rjk2QQotOjEwOEMzMDAwRTE3NTk5QTg0RkVGOEFCNkEzN0U1RERGQzBDQTBCM0JGMgotOjEwOEM0MDAwMUQzMkM0QkQ2NEFERTNFNTk5Q0U3MkM4RDdBRkE3RTVDOAotOjEwOEM1MDAwQjRFQkEyMjMyQzJFNjZEODlEQUMzQ0VGQUU4NkQ3QURFQwotOjEwOEM2MDAwQTA2Nzc4NThGQjk3M0Y2Rjk2QTM2OEI5Qjc5OUI3MkY1RAotOjEwOEM3MDAwNkQyRDg3N0M3RDBCNkJGRjE5RjhBOTQ2NDM3QzlBQjc1NQotOjEwOEM4MDAwMDlCRTVGN0Q2RkE2OUQxREFCOTlGRTNFOTFBRjc3OTdBNAotOjEwOEM5MDAwRjREQ0VCRDhBRTk1QjU1Qjc1RDAzQzg4RTBGOTlGRTk4NAotOjEwOENBMDAwRTVEN0YxNzU0RURDQ0FENjE5NzdFMkZBQTkwQUE1OEI4OQotOjEwOENCMDAwMTUwMTBGRUE2RkE3NzRCNUM1QzhERjA2MzgzRjk3NEE5QwotOjEwOENDMDAwQUQ2OTkwNEVBMUVDMTc1Mjg3RDlERTIyMEY2NTdFQ0M5QwotOjEwOENEMDAwRUQ3NDg4N0JFMjk5RkQ0NUY4RkYyMENFQTAzMjQ0OUZEOQotOjEwOENFMDAwQjgyNzlFRDk2MzQ1QkQ4NDE4OEEwMUEwODc0N0FDQThFMAotOjEwOENGMDAwNUYwQkZGQTRFRjIxMjI4MUJDODczNTcyM0QyNEFDQkZGRQotOjEwOEQwMDAwNzI0QTU2MDNFQTExNTM4NjA4M0ZBNTVGQkY5NDhFOUJCMwotOjEwOEQxMDAwNzdFMThCQzlFMUVDNDMzRkUyRTM5RUU2NzExMzdEN0E5NAotOjEwOEQyMDAwQjIzNzUzMDc3NEIxMEI4ODI0MDU4MEY0REVBRjQxN0Y1RQotOjEwOEQzMDAwREIwNTdFNDgyNkE0M0NBNDA0RjBDQUYyNUJFMzdGQkRCOQotOjEwOEQ0MDAwQTk2NTNDODVBRkFFNDFFRjAxQTE5NjIxNjFEQ0M5Q0M5QwotOjEwOEQ1MDAwNEVFMjFCMUNENTdGRkU1M0Y0QzQ2N0M0MzgyNjM2RkY5MQotOjEwOEQ2MDAwOTU0RDU0MUUyM0QxMzE3RTM2ODdFMzhGOENCRjBBRTk5RgotOjEwOEQ3MDAwNzczNkM3RDNDRjA1N0YyQTIwMDVDMDlGRTY3MEJDRERCQwotOjEwOEQ4MDAwNjRBNjdBMzRGMkMzNTY4Mzg2NkYzQzEzMEY3MjZBQ0JBMwotOjEwOEQ5MDAwODBGQUJCQkE1Q0MzNTdBQUY5QjgyQkI5REU3RTJCMDk5RgotOjEwOERBMDAwQTA3RTcyNEFGMjYyN0E3QTBCRDNEQjZCMkM0NzUwQkZGQgotOjEwOERCMDAwRTk3OTg0RTlFREI1QzQ4RkZBOEZENkJFNTlCMzUzOURENgotOjEwOERDMDAwQUY2QjUzRTdFQkRCRDVGOTlFMUMwRjhFRDNCM0E1QUU4QgotOjEwOEREMDAwMThFQzhBRDUwRkJGOEI3NkVDNkFDMTVGQkM2QUZFNDI4NQotOjEwOERFMDAwMTU3MUM2NUYxRUJBMDZFRDUxREY5ODZGM0M0RDRGNkY4RgotOjEwOERGMDAwQzVBQUI4RDBERjAyOUNGQUVDMzUyRkIyRjgxNDM3NjE1RgotOjEwOEUwMDAwNzY4MjFFRUI4OEY5NzA0RTI1MUE3OUE0RTUyNzc5OUNBNQotOjEwOEUxMDAwOUYwOEZCODZFMDJGNzk4NEM5MjM3QThFN0RENzQxODIxMwotOjEwOEUyMDAwN0M1Q0FCRDdGNUM0NzNCRDk3OUZEMzg0RkU5MzA3RkFFMAotOjEwOEUzMDAwMEZEMEQzMzUwRDQ4NjQ0MTM5NjQ3RkRCMjQ4N0M4OUY0OAotOjEwOEU0MDAwNzk4NTY2QzA3M0JFOTlFRTY3ODA5NzZDQzk3MTU5NTQ3NQotOjEwOEU1MDAwRjRGMDA1Q0E5OTgxQ0Y3QkVBNzIwREJEODhGM0Q2MkQ1NwotOjEwOEU2MDAwOUM1RTY2ODEyNzg1OEVGRjdCQzk4MUU3QkFDM0I3MzJENgotOjEwOEU3MDAwN0E5OTYzNTk4N0Y0RkFEMTZBNDYyRkUyREM3N0U1RTdGRAotOjEwOEU4MDAwM0M4N0ZDNERDRTc5N0Q3NDEyNDFGNTVFOUExRTQ5MTdFMAotOjEwOEU5MDAwRTc3Q0U2OEZBRjk3MTgxREQ0NTU3REY4MThFOENGODI5MAotOjEwOEVBMDAwMkYxQzZFMjRGMUZBMTAzRUQxMzRDRDY0MDYzQjRBOTM1OAotOjEwOEVCMDAwODE5RDgzQUFBNjdGNUNCQzM0ODRDRjM4MjI0QTEzMTNEOQotOjEwOEVDMDAwNDA1OUVFODg0N0ZCNkM1REE0N0E5QzY2QTlGM0JCN0Y5MgotOjEwOEVEMDAwODBGM0QyNEYyM0QxNEVENEZCMzA0MTk1QTQ3N0VCNzA3MQotOjEwOEVFMDAwOENEQjNFNkI2MDdFNTIzMTlGNTUwNzc3RUVGM0MzN0U3RAotOjEwOEVGMDAwNUNGRkVCMDgzRDk1OUYzNTkyRjdDNTVBNUFCNkM0RTQxRQotOjEwOEYwMDAwQ0E4NjcxNkE3NDNFMjNCMzYzNzZBMjVGNTc4QzNCQjAwNgotOjEwOEYxMDAwNURENjgzRjJENUY4MUE5M0MzMDE2OTEwQzZFMUQyRUY4QQotOjEwOEYyMDAwRDlBMUZFQjVEMTg5OEM0RkRGMTFFQjJBNDg4ODBGQ0EzMQotOjEwOEYzMDAwNEI2MTNGQTQ1Mjk2QTRDNjA0RkQyNkMxRjgwNjY2MzdDRAotOjEwOEY0MDAwRjkwQjcxNUMzMkJFNjE2Mzg4N0Q5RUI2MEYxQjhGNTYzNAotOjEwOEY1MDAwOTZDMEY4RjVGNzI5Q0U2MURFMDdBMzFERTUzMDlGRDM1MwotOjEwOEY2MDAwREM4RjdCOUFGQkZENEU0NzMxM0ZFMENDQkVGQTJDNzU3RgotOjEwOEY3MDAwRjFGNDM0RjcxMzlFOEU1MUZCODc0NEJEQTUwOUNDOEVDNgotOjEwOEY4MDAwNzJCMkQxNkNERUE4MDdCRjNBMzE2RjFDNDY0OUVDMjFBMgotOjEwOEY5MDAwNTMwM0M2OTMyQzYwNzhFQUQ5MTNCRDZENTM4OEZGQTU5RgotOjEwOEZBMDAwMkVBMUY0RkIzMDlGN0ZEODlDMzc0M0JBQkNGNUI4MzE3MwotOjEwOEZCMDAwRDQwRURGMjNCMUYzNzcwRkE3OTc5RTA4OTY4QTcxRUI0MwotOjEwOEZDMDAwMTIyQUJGMEY3OEVDOTlFNzQ3M0NGNkU1Qzc4QUJDMTMzNQotOjEwOEZEMDAwRkJFRjk5QzBGODZCNUZGRTNCMkM0RkI4REQ0M0Q4RjUzMwotOjEwOEZFMDAwMDdGMkY3NjlGRDdCNTREMEIwNzM0MDA0QjNDRjZCRkQzQgotOjEwOEZGMDAwRjMwQjA1M0ZFM0ZFRjkwNTlDMUYyREVDNjA3RTgyNDVENwotOjEwOTAwMDAwNjZEMjlDNEFDQjE3NzcyNEIyNzM2RTk0Mjc1QkU1OUY5OAotOjEwOTAxMDAwRjc0NDVFNTEzQzg2QTBDQjlFRjRDRTNFN0ZGNjIzMjFFMgotOjEwOTAyMDAwRkVFQzNBRUVDRkFDMTNFQkRCQUQ1RURGMDMwOURGQkE0QgotOjEwOTAzMDAwM0ZGQjgxODQzMEZFNkM2RERDQzM4QkEwNDcwQzBCRTJFMAotOjEwOTA0MDAwNjFBRDhEQzFBRDQyQUUyRDA3N0I2RkVGNzI4MjcxRThDRAotOjEwOTA1MDAwNkJERjVBRDYwNEY2RTBCNTNGMDAwQjJBRjIzMUQ0QTdGNQotOjEwOTA2MDAwRUIzODlDMDc1QTU3QkM1MzQ3MTQ5NTlEN0QxMDUxNDJDRAotOjEwOTA3MDAwRTY5RkVDOEE1MUU1NTE0MzBGODkwMzREQUQ0RTUxQjU0MgotOjEwOTA4MDAwNEY2RjE4QUFBQTNGNjRGRDM1QUFGMjRDNEZCRTJBOUYyMwotOjEwOTA5MDAwRDU3MkFEQUFGRTU1QUQ2NUFBRkNGMDg3QUY1N0Q1Q0YwNgotOjEwOTBBMDAwMjM0MzA3QTNGREVDOTAwQ0I2MjE3MkI1Qjc0QTU1M0U5OQotOjEwOTBCMDAwNzJFNzJEQUFGNjlGOTE4NkNERTM2OUJEREQ0MkZFNzk2OAotOjEwOTBDMDAwMUM5REEzOEE4MzcxQ0UzOTZENEI1NUVEOUJBNEI2NjI2RQotOjEwOTBEMDAwMUZGMDQ2OUZFNDkzNjhCRDE1MUM1RkNCM0I5OUZGNjI3MAotOjEwOTBFMDAwNzRGQjZBNTVGRjY3QTNEODNEMThBRDVGOTY3NjJFQTMzMwotOjEwOTBGMDAwMUVENjJFOTE0N0E0RkU3RURBRUE4RUZCOUIyMUVFQThCNwotOjEwOTEwMDAwQkZCRjk2RjI0RERBNkUzNTNEQkY4MEZFQTZENTZGOEU5RAotOjEwOTExMDAwMjY3MDNGNUQwQTQ5NjE3NEFEQTUwQjBCRUE3RkJENUIwQwotOjEwOTEyMDAwNjVCNDI3RTY5MUVDODdDNjIzQkMwQ0M0QUJGNEM3NUZEQgotOjEwOTEzMDAwMkY2MTc2QUVERUE3QUQ3Njg4RkY1OUY1RDYzMkE0NDcwQgotOjEwOTE0MDAwNTM5MjlBMkUyMjE0MzU1RDQ0OEU1MEQzODVENUFFQTYwNwotOjEwOTE1MDAwODNDMTI1NkEzQUQwQzIzRERBQTFBNjBCRTJBN0ZGNDMzQwotOjEwOTE2MDAwRTAyREUwMkFFMDFFM0I1NTREMzc1QTc4RTc5MzAwREFCMAotOjEwOTE3MDAwRDlERDVFQzlFRTIzNjFGQ0UyRUREQjcwNUQ5N0QyMUZBNQotOjEwOTE4MDAwRjU4OTZBRjgxNjFDNzAzNDU5MTA2RTJDQkU0Q0U4NjFEMwotOjEwOTE5MDAwMjZBRUZGNjhGRDEzNDJBRjg5NEJFNDdBMTVFRjQ3RjgxRQotOjEwOTFBMDAwMTc5QTI1MEZFQTUxN0RGRUMyMTI1Rjg2MkYxM0Y0QTc4RQotOjEwOTFCMDAwMDZDMkVDNDRDRUE0QzRGMDc2NDZGQzNFOTA5RDUxQzA1RAotOjEwOTFDMDAwNzVGNjIwMjYyRjZCODgwM0VERTEyQjg4MEJGOUREQzk5RQotOjEwOTFEMDAwQ0E1QkQxM0VCNENBRjI2M0Y0QkI5RUFENjI3QTUyMzUyQgotOjEwOTFFMDAwRjEyMjlGQkZFMkI4MDJBQTg3OTIxMEZCQUIxNjhFNTIwMwotOjEwOTFGMDAwODdFNEIzMDJCRkUxRjIyMDg1NzQwODc5RTBDMjc4MTNGNgotOjEwOTIwMDAwNEE4NkU2NjI5NTFGNDdBREU3ODJERjMwODQ3RjA5QkQ1RAotOjEwOTIxMDAwNTc4QzI3RTAyOUY4OUExOENGNDQxQUU0MjREODE3MUE1MwotOjEwOTIyMDAwM0U0NzQ2NjhGRDQ4NkEzQjhEQjBGM0UwNjAyMUZFMjI3MAotOjEwOTIzMDAwQUQ1RDI2NDQwRjZFOTFFOTM4RjI5MENDMjY0MkYxNTc4RAotOjEwOTI0MDAwNjA3M0EwRERBRjg4NzRDRTg3RUYyNUU2QjYyNkJEQzI3OQotOjEwOTI1MDAwRUQxMzU3OTMzRUZCQzQ4MEYyRUExMkZFRTg1OTFFQzk5MwotOjEwOTI2MDAwRkY2ODY2N0YzRkI0RjA2QkQzRTU5RkY4MDM2RDNDNUUwQgotOjEwOTI3MDAwNTIxMEVGNTUyRjBGOEYwNzdBRUE2RkE3QjQxRjdEODUyNQotOjEwOTI4MDAwRjYyM0VCMDJCMUExRjZDM0JFRkIwNjkyMUZENzczMTMwMAotOjEwOTI5MDAwNzFEQzRENDJGNDEwMzc2OTlCM0MzRjEzRUNDNDU0NEVEMwotOjEwOTJBMDAwNDY0MUNBRUM1OEE0NURBQjA3RUJEMThFQUNBMzJCMDFCMQotOjEwOTJCMDAwQkFBRjIxMjE3RURBQ0M2MDM5RTZFNUZFNzkxMTM3NzQ0OAotOjEwOTJDMDAwMjk3REUyNDJBMjhEQzczRkIwNzgyN0MyRjlBMDM4NUY1RQotOjEwOTJEMDAwMEU3NDlFMTM3MTE0NzBDRjE2RkMyMTIyNEVBODM5OTE4MgotOjEwOTJFMDAwOUY4MzczNDkyRUY0NEZGN0RCQTY0NEI0MUZEMEZEMjlBQQotOjEwOTJGMDAwODVFRUM3QkVCODIyMkNFRkI3MUYzNUVCMTc3MTE0QjIzRAotOjEwOTMwMDAwQjUxMEVENDJDQjQyRDc3QjE5RjAxMDdBQ0I2RkE4M0U1NwotOjEwOTMxMDAwODBGNzM0MTIxNUE2RDcwRDNBRjY4MTAzOEEwQjNCNTUxOAotOjEwOTMyMDAwNzE5RUY1NDY3QTgwMDE3QkMxOEIzQzhFQUY0REFEQUYwRgotOjEwOTMzMDAwM0Y5QkM4RTM5M0Y4MzlFNzUyRjAxQTE4MUYzQ0VFNEVGMgotOjEwOTM0MDAwRTBFMzMyRjUzMDExNzcyN0UwRjg0MjdGQjhFRjUxQzEwMgotOjEwOTM1MDAwQjVFRkJDRDgwN0Y3M0RFMUUwMkVFMDcyQUVBOEYzMjlFNwotOjEwOTM2MDAwQzA5NzZDM0Q5MjAwRjBFRTg4NzJFRTgzRkFFOTQ3RkRGQgotOjEwOTM3MDAwQTcyNDVENzA1RTE1NzIxN0M2Q0JGNkI2Q0I3ODNGQ0ZDQgotOjEwOTM4MDAwM0Q4MUM1NUJCOUY3QzhDODFBQkEzQjRDRTgzN0FENkUyQQotOjEwOTM5MDAwN0YxREY1QzJBRTQ2Q0E2OEE5MUU3NkE2OTEwRUE5QkY2QQotOjEwOTNBMDAwODhCRDQwMDNFRjgxQ0U0NzYyM0QxRjY4RDYyRkUyNzUyRQotOjEwOTNCMDAwRTgzQTdGN0YwOTM4RkMzRTFDMUMyQUU0NTE4M0UxOUU3OQotOjEwOTNDMDAwNTc1RjlDOTEzRTkwNTExNTQyMUZEQTc1NkNFNkY0QjBFMAotOjEwOTNEMDAwNTZFRjNDMDFGRDFERUY0Q0RCMENGRDU1QzgxRDA3NTMzRQotOjEwOTNFMDAwMDAzRUVCMjRCQzdGMzVEMUM0RUVDQjI2RjNGQjc0MjVDNQotOjEwOTNGMDAwRkUwNjNCREMzNzRFNEFCM0UwRkRBOUUxREY5MTlERTA3QwotOjEwOTQwMDAwMTdGRTc4REQ2RDMxNzA0RjRDRjQzRjVDRDJFMUZENEVCQwotOjEwOTQxMDAwNDI5RUZCRTQ4RTQyRjA1NzJFQjA2RkEyQjk4NTI2MTYwRAotOjEwOTQyMDAwOTc5MUY5REQ0ODVGMTZFNTIzQUYxQTg5MTlGNkEzNjExNAotOjEwOTQzMDAwNjgwM0RFNkIwOTQ0Q0I2OEI3OEM5M0M5MjRBMDNCMzEyOQotOjEwOTQ0MDAwNkY3MTFGNTY3Qzg3RkJGQTcwRUY1MjdDOUZEODE0MjhFRgotOjEwOTQ1MDAwNTg0QkQzMEU0RTBGNjJERDEzQ0IwMzA1MEQ5NjIwRkM0NwotOjEwOTQ2MDAwNDU1Q0E2MTYzRTVCMzgzQ0RDRjFDNjY2RDAxN0JCQ0QyQQotOjEwOTQ3MDAwRTJGQ0M5NTI2MkQzMjM5RjU5Njc2NkZCRTZEODU1RTJFNgotOjEwOTQ4MDAwRkNFREIzQzJCOUQ0MURFMTE4M0MwNkY2REZGQjMyNzkxRQotOjEwOTQ5MDAwOTIyNjdGQjEzOTA2NDdFM0ZBMTVENEM3RDdEOTU4QkIwRQotOjEwOTRBMDAwNkUxRTA3QkZFRUEzQjI0NDg4NUY4RTZGMEExRjZGQTZDMQotOjEwOTRCMDAwMjRCMTczNUMyREY3RUY4QkVGQjU3QTFGQzY4REQ1NDJDMwotOjEwOTRDMDAwQkM3NjQxRjBGQjk1QzY2QjhCNzhGQzAxRTExMEFEMjdCMwotOjEwOTREMDAwRkFEMTc4RUZEQzc5QjE3QUFGRkM0QjBFN0JCRUJFM0VBMQotOjEwOTRFMDAwNDkyN0UyMEZEMUVGNERDRjVCNjFFMzBCNEI5M0Q4RjlFNgotOjEwOTRGMDAwMkExODA3RThDNzdCQzM3REYxODU3QjRBMTNDOTQ1Q0U4RgotOjEwOTUwMDAwRkJFRUYzMEU1NURDOUY4ODM3Nzc5RjlGODQ3MTdFRkRCRAotOjEwOTUxMDAwRkFBNUZEMjk5NjYwNUNFMTQwRjBERjkyQzhFNkU1ODY5OQotOjEwOTUyMDAwNzhCRjgyRDBFRjBBRkJERTM3NEUxQzhGREZGMzQ3QzFENgotOjEwOTUzMDAwM0VGRDQ1QkI4Q0Y3RUE3RjcxNDgzNzc1N0I5ODc5RDczQwotOjEwOTU0MDAwMjczMUI4NUQxM0FGQzc3RDMzRDI0NzFDREJDMjhDMkZFOAotOjEwOTU1MDAwRUE4OUZCMzVFMjlFQUE3NjdFQkJDQkZDOEI2MEZFMTBDRgotOjEwOTU2MDAwNDcxQzZFQkNBNTlDOEVDNEJDNzdDNzMwN0NCOEY3OTlFRAotOjEwOTU3MDAwRjA5RTA1RUQxN0UzQkQ3N0M3Rjg1N0UyQkVCMEE5RjEzRAotOjEwOTU4MDAwN0MzQkI3RDdFQ0JFREU5RjgxRjdCQ0E2MzEzQkMzNDAyNgotOjEwOTU5MDAwRjRFMDhENzJGRDA0RjVEODlCNjk2NTRBM0ZDNUZBMDY3MwotOjEwOTVBMDAwQzkxNkIyRkYyRTQ1MEY0MUI4RUI1NDc4RUQwRjc3MjM2MwotOjEwOTVCMDAwRTI1N0Y0RkJGOTYxQkU0Rjg5QzMwMkU3QjcyNTVDQkVGMQotOjEwOTVDMDAwMkREOTUxODNGQUFGMzgxRjdERkVCMDhDRjExNzlGMTM1MAotOjEwOTVEMDAwRTYyN0Y5QkM1NUMyRjNDRjUyMTcyMUVCMjkxRjVBRjlFMAotOjEwOTVFMDAwNjQ0MTMzODhCOTI1NDk4NDVDMTdDM0JFREYwOUU5NDY2NQotOjEwOTVGMDAwQjU5RjdDRjlCREZERUM4NzI0NTRBRUFFMjAwRDI4NTdGNQotOjEwOTYwMDAwNTZGRTU4RERBRTlBRENGQjY3RDA5RkI0RkVGQkUxREM3MgotOjEwOTYxMDAwMkUyN0Q2QjEzOTg5OUU0NzQwRUYyOTI2QzUyMDFGRDY2RgotOjEwOTYyMDAwM0VGOTg1MzE0QTE5NzgxRjlDQTY3Qzc3OTgxRUY4QUZDMQotOjEwOTYzMDAwMTlEM0FFNDYxQkE2QkY0ODcyM0M5NjQ0RjFCNzI3Qzk2MgotOjEwOTY0MDAwQjUwREQyOUVGNzU5RkZCREI1QkQ0QzdFNkM4RDQzQjlBQgotOjEwOTY1MDAwRDU2NEZEMkVGMjc1NzkwOEUzRUJGN0MwM0IwOTE0MUVDMwotOjEwOTY2MDAwMjYxM0QzOTcxMjc0MEQ3MjE0RUEyRDVFQTQ4N0UzRjFDQQotOjEwOTY3MDAwNkJBQTY2NjJERTlFMDQ3NDFGRjdDQjI5NTMzMUNFRUZDRQotOjEwOTY4MDAwOTc5MTBFODBGN0E2NTI0NzFFRDgyNTM2NTVCMjdCOTk4MgotOjEwOTY5MDAwNjYxM0YzQjM3QjdGMzFGNjM1NzA4MzBDNkJCQkJGMEM2NQotOjEwOTZBMDAwQ0VDMUI2OEVGRDNFQjBGN0I0RThGRTdDMTBFMjU3NUE0QwotOjEwOTZCMDAwQUU2M0YxOEIwOTNBRkZGRUQ0OTBGMUUyMjNCRDQ5RTA5RAotOjEwOTZDMDAwODc4RjFGNjlDNDM4OEYzOEI5MzRBRjIxMjQ1RUNBQ0Q2MwotOjEwOTZEMDAwNzFEMURCOUU4NTc2QzIxRTgzQjAxQkI2NDVFMEJEQTg2NgotOjEwOTZFMDAwREFBMTgzODE4RjVDNDMxODlFNDVEQzFCQ0MyMTU0REZCQgotOjEwOTZGMDAwRURBMjcwODRBMDRCOTFCRkE2NERGMjE5QTJGMEZEMTIwRAotOjEwOTcwMDAwRjRFM0Q0REVFNTRCOTgwRjcyRUFFNzdBRjQ4Mzg5Rjk0MwotOjEwOTcxMDAwQzVCRDlBNUMwNkZFMkUyMTlGRTY0QjM2NjY0N0UzRkFFRQotOjEwOTcyMDAwRkMzQzIyRkUzMTdGRDk1QzRFMjdGM0I4MUUzRjNGOTJBRQotOjEwOTczMDAwQzE3QjI5QjE2NzQwQkI1QkNDMjQ0QTQ3QjdENEZDRjI1QwotOjEwOTc0MDAwQjYyMjVDNjc4RDIxMUFGNDA1RTFGNzE5NThDRjA4NkYyRQotOjEwOTc1MDAwRkY3MjNGNjU2NUY3OERBNTQwMzY3NDcyODZDMkU3NjI3OQotOjEwOTc2MDAwRkIzMEMwRjlCMjNCOUJEREJCMjNDMzg4MDNGQzhDRUUwRQotOjEwOTc3MDAwN0RDM0I3ODE3REMyMzQ4OEY5QUYyOTdGMzI5N0U0QTNENgotOjEwOTc4MDAwNUU2RDg2NzNENEFEQUY0NEYwRjgyMjJGQkY0RkVDQzhBNgotOjEwOTc5MDAwODNGODlDRkFBQUI0N0M4QzEzMzkxQUMwNzczN0JBMERCNwotOjEwOTdBMDAwRkUwQ0RDQzc5NEVGNDg1NDM2MEVEQUYyRkQxOTdBQjg5NQotOjEwOTdCMDAwQUY5OTQyRjUzNTlBMkZEOTcyMkZDQjBGRjVBRkQ0RDE4RgotOjEwOTdDMDAwRkM5MjJENEZDREQwRDNGREUxQkVDNjdGMEFGMjM1NUJCMgotOjEwOTdEMDAwNzZCMTdDQkU3RkE1NENGM0NENUI1RTY1RjVFMTYwNDk1QgotOjEwOTdFMDAwMDlFQ0MxMkQwNzY3Nzg2OEZGNjdBMkI5QkNCN0ZCRjEyOAotOjEwOTdGMDAwOUVCNUZCRTVFMUJBNTAzQjZCNjMzMkUzNUI2N0I4OUQxNgotOjEwOTgwMDAwRjg0QzI2NTk1QzA1RjAxRTExQkVGRUIyNjQxRDBGNUFCRAotOjEwOTgxMDAwNjlDNTU0QUM1N0I0Mjc0OUUxREIyNUYzNzE2RUU1RjcxMAotOjEwOTgyMDAwQTMyNzQ2OTI5NjA4RTZCN0YzNDQ1MTNDMUNFODE4OEVFRAotOjEwOTgzMDAwN0VDN0FGOTM2Mjk4OUU2RUYzRTNGQjM4QTIxRjAxNEY4MQotOjEwOTg0MDAwRDE5RjE4NzczNUM4NjdFMENCOUE3OEFDRUM2NDg2M0YzNwotOjEwOTg1MDAwM0FDRTQ2MUM2Nzk4ODNERDJCQUU0QUNCMDNGQzUxQkM0NQotOjEwOTg2MDAwRTkzOURFRjRFQ0ZDQkI4RENEOEZGNjFCOUQ4QjcyQTAyRAotOjEwOTg3MDAwMDBFQ0Y4MDdCRUEyRjUzMzgzRjNENkQyNDk0MTMyOTMwOAotOjEwOTg4MDAwMkZCNzM2MzE3RjZCMjAzQTBCRTk2OTYyMjQ3RjY3QTVEOQotOjEwOTg5MDAwNTBCRDhFNjYwRTg3QzZFNDY4N0U2RjQ2QzAyQjUxQzJFRgotOjEwOThBMDAwNzE5QTM4MUNEM0ZDNzhDRkYyNEFENzVERjExRjVBNzdGMgotOjEwOThCMDAwMDhCRTFDRjA1RUNBODFGNkFCQjdCM0Y1QzRGMDdCQ0QzMQotOjEwOThDMDAwRkU4QzE4RDRGN0VFNTdGNTc3NjY4M0E2N0QwOUMxQjhFQwotOjEwOThEMDAwMzY3NzRDMTZCNkJGMjc4Mjk4RjEzQkQ5REVENzJFMzNBOAotOjEwOThFMDAwOTdFOUFEQTBDRjhBNzcyQzg4RTczQTEyRUE0N0VDN0I1QwotOjEwOThGMDAwQUZBMjhEQzU2NzA2RDczOUEzOTBBRkQzQzZENzY5NjMyQQotOjEwOTkwMDAwRUJGNEFBRTg5NTFDMDk2NENDQjZGNkE3RTMzRUY4Rjc5OQotOjEwOTkxMDAwRjUzNzJBOUZGN0E3REFFN0UxRkE4MzdEM0QxMDVFRDY5NwotOjEwOTkyMDAwNzMzQUY5RDZGMDIyRTZBOTgxNjcxRjlDMzVGMzEzRjA0QwotOjEwOTkzMDAwODRGRDhERUQ0NkE5RTk1MkNDQjMyNjU5OUM5MzM1RkJBNQotOjEwOTk0MDAwM0JGMzFCOEU1N0NBREFENUREQ0VFMkI5ODlBMkE2RUI2RQotOjEwOTk1MDAwQkFERDk5M0E4ODJCMTBFRDZBQzEyNzEwMUZCNEZGM0Q3QwotOjEwOTk2MDAwOUFDQ0VEODk2OTI0NkQ4MEY4QzRDNzkzOEJDMkRBMEQ1NwotOjEwOTk3MDAwRjFCQkY2OUNEODEzQ0RFMkQ1QjVGNjhBOUU3ODdCMjc0RAotOjEwOTk4MDAwRENBRkY0OUM2M0VGMEE4Q0QzRDg2RkMwQ0ZGNDlDMjU3NgotOjEwOTk5MDAwRDgyRTI4NUZENEY5NzM5QzNGRjZCNzNGMDUzMjYwN0UxRQotOjEwOTlBMDAwODVBNkIyRTcxNTNCRDU0N0I2MUM0MzdFNUQzOEI4RUNCQgotOjEwOTlCMDAwQjY0QzlBN0YzNUY5OEZDOENGMEI1M0NCQkVDOEE0RkNFOQotOjEwOTlDMDAwN0M3RkIyOUZFNTQ3OTY3RDMxMTRGMjVCRkNBQ0ZFNDQ5MAotOjEwOTlEMDAwQzdGM0MwRUY4OUM3M0Y2MzUyNzI1MEFGNzgyRDU5NDEyQQotOjEwOTlFMDAwQjhDOUU1M0EwMjc0NjQwMjI1ODZBRUM3RjRBQTA5RTM1MQotOjEwOTlGMDAwRjYwNDVDMDc0QTBCNERCQTg2NzBGNzZGREZFRUEzMDdEQgotOjEwOUEwMDAwRTY1NzI5ODEzRjE1QjBGMzcxM0I4MDVGQUZCMjAzRjQ5NQotOjEwOUExMDAwNDRCMTdCREYzRDdCRkY4RUY3NUQzRTQ4NzY3NTAyMUVDRAotOjEwOUEyMDAwRUEyM0JCMTY2NUQyRkM1RDkxOUZBMDFGNEY3MkQwM0QwQgotOjEwOUEzMDAwMDFGNjE1QzU0NjE2RDBGOTRBNUQ5QjlDQTAzRjkxRDUwRAotOjEwOUE0MDAwNzZCMzFFRTFDQUVENUU3NDhEMTcyOEZDNUVEOUY3RjM3QwotOjEwOUE1MDAwRUZBNUIyNjE5QzMwOEZCMTlDMEZENEVGRkJGMjZGRTBBOQotOjEwOUE2MDAwRjdBRDNGNjNCMTgzRjk3QTZDQzc5NkRCNDBGRjFBREIzMQotOjEwOUE3MDAwRjFGNjk3NEMwRUIzRkIzOTYyREU2M0MxQUU0OUJGOTc3NgotOjEwOUE4MDAwQjQ5QjcwRkU2MzNCQUU1RTAxRjVDN0ZEQjYyMzBCRThFOQotOjEwOUE5MDAwNjRDMjMxNUYxM0IwODU5RUJEMkZBNUFBRUVFNTkwQ0ZCRAotOjEwOUFBMDAwMkUxQUQ3MzlBMERGNERDMEUzNTNBQTU0MEQ0Njc4RjRERgotOjEwOUFCMDAwMzI3ODdDODVGMTY3RERGMTg3OUJGRDY4RkM1NERGN0ZBMAotOjEwOUFDMDAwQTJGQTNBRkE5MTdCQzkyMDNCRjgzM0M0N0Q3QUFEQkQ0NgotOjEwOUFEMDAwRjQ2ODI1NUQxRkZEM0UyMTQwNjcxMEEyNEY0RjNDNkY4QgotOjEwOUFFMDAwQTY4QzI0OTgyRjI1RDFBQTdDQjkzOTU5NTVCRkMyOTY4NgotOjEwOUFGMDAwQTkyQTlGOTI3NEI1QUE3QzlBOTJBN0NBNEYxRjMxNTY4MQotOjEwOUIwMDAwNTVGRjA2N0JBOTJBN0Y2M0M5MzQ1NUZENEE0N0E1MkExQwotOjEwOUIxMDAwOUZFNzZCNTNENTJGMzhENEFFMkUzRjQyNjRDMDQzRkUyRgotOjEwOUIyMDAwNTFGQkVCOTAxNjlENzRBMEQ5QjVGODc0QzNFQjkwOEVFMQotOjEwOUIzMDAwRkQwQjAzODdENjVFN0NFREY5QjZEN0UxQkJCMDE3NkJBMgotOjEwOUI0MDAwRUYzMzA5RkJGMUNEQjJDNTZCMEM2RjI3NEVEMjY3MDUyMQotOjEwOUI1MDAwREYxRjkwNzVFQzNFRDMxOEFCRUJFQTk0QTJFMDdEQTYzNAotOjEwOUI2MDAwODk2MDJGQTY0OEE4NTg3Q0VFNDdFMzAwNEYwQjk4M0QyQwotOjEwOUI3MDAwRUQyODIwMDZFM0JFQUQ2ODg3M0M2QTY4NzhFNjBGMkNDNgotOjEwOUI4MDAwMEUyMDFERjhERTg0QzA1Q0Q1QkEyNzlFNzdBOUQ2NUQ2RAotOjEwOUI5MDAwNEE2RUQ1RTA2OThEMkE1RjYxQkI1RDU1N0Y0QUQyMDY2QQotOjEwOUJBMDAwNTVGOTM0RTUwNzFBM0NEREFGQ0FERjYwREZBMkMxRDM0NwotOjEwOUJCMDAwMzYwRDlFN0VBRTJBMTdGNEREQzFFRDVBRkJDMDFFNDU2MAotOjEwOUJDMDAwRDNGMUZFQ0U3MkMwQzM3NUE3MDM4ODhGOTJDRUQ2NzIzMgotOjEwOUJEMDAwQzBEM0I1NDdEQjEwNUY4NTNFNjczOUIwQ0JFMjQzMEQ5QwotOjEwOUJFMDAwQUY0M0VBQTNFNzMxNjhGNzVBNjMxMkE2MDcxQTE1QjQyMAotOjEwOUJGMDAwNkIxRDZDMUM4MUU5QTE0NjNCN0VGRjc1NjMwOUE2RUZENgotOjEwOUMwMDAwMzQzQTMwN0RBRjcxMkFBNjlEOEQ0RTRDREIxQURCQjAwNQotOjEwOUMxMDAwRkU3MzhERURDQzJFMTZEQkY3REU0NTNBRDgwN0JBNzUwQwotOjEwOUMyMDAwN0UzNzc4ODIxNzNGOTI3NzAzRjBDQkVFNDFGRTZFQzgwNQotOjEwOUMzMDAwREY0NUVDMzc0Q0EyRjkyNUMwNDRFOEJFRkMyOTRGMzc3QwotOjEwOUM0MDAwQTQzQTAyODA1NzM3MUNDQThBODJGMTE4NkQzQTQ3MUUxRgotOjEwOUM1MDAwRThFMTc3QTQ0Q0Y4QTEzRTlEOTBCQjM3Mzg5MzZDRDFENgotOjEwOUM2MDAwMkM2RkE2Nzk0NDM2QzZCMzRERjhBMTgzMTJENzMzMjBBMgotOjEwOUM3MDAwNEFEMEE5MzNFMTA2QzhGNzQ0QjA3Mjc3Q0E4NDFCNDBDMgotOjEwOUM4MDAwMEZGRkM2RkU3MzQ3M0ZGRkY5MUQyOTYxRkNFN0NGOUMxQwotOjEwOUM5MDAwNTZBQzYwRDczOUZDRDU3MDJCQzBFMzMwQjc2RjM5NDg2QwotOjEwOUNBMDAwOUU2MTA5NEQ0QkY1NzkwNjkwQjM0NzA3QjhCN0YwODAzMAotOjEwOUNCMDAwQUVCNDA5RTBEMEE2QjNDRkMxNzhFRkVCMEQwNEU4Qjc5RQotOjEwOUNDMDAwNEE2MkU3NUY1MUNGOTVDQUU0NDFDRjBEMjYzQzRGMUQ1NAotOjEwOUNEMDAwRDEzOTU2NjA1Qzk5MTQ3ODBDRTBCQzNEQTUxMkUxREVFOAotOjEwOUNFMDAwNjMwRDY0MDBGQ0JDMjk0RTk2OEYwRjNDMjZEOTQzRjJDRAotOjEwOUNGMDAwMDYwNjlGMDc1MjZFRkNCNkUxRjM1ODM4RjgzQzkxNjJCNQotOjEwOUQwMDAwNjNGQUI2Q0Y5MTBFN0E4MEM4MUZBOTc0RDRDMTdFM0U4MwotOjEwOUQxMDAwNTJFQUI4MEFFRkNGMzg0RDZDRkYzQUFEREVBQkQwM0UxOQotOjEwOUQyMDAwRTQyODlBMTM2MkU3MTk5MjZBNjBGN0QxRTE2MjIyRDhCNwotOjEwOUQzMDAwM0I2RjkxNzE5RjZCRTEzOTIxOTVFOTdCNDgyNzcwQ0U4QwotOjEwOUQ0MDAwOUMxNzg5RTc4MjIzM0FGNjlFODFCNkZFMDIwRUQ3QjNBRQotOjEwOUQ1MDAwODNDMkRCRTMxNkE2MzJCREEyNkM1NkREMzMyRkQwRkVFNAotOjEwOUQ2MDAwN0FENjQ1NjBENzNEQ0VFMUE4OEZGNTM0NTBFODJBMzQ0NQotOjEwOUQ3MDAwM0RERDcwOEU5NTlCRUMxQzI0RThCRjlEMEY3RkQxRjJEQQotOjEwOUQ4MDAwNjczQTZFRkJFQkVGNjhGRDRGRDY0NURBNTE4NkQ4QUVFOQotOjEwOUQ5MDAwNDFGOEREQzIyQjJGOEMzNUEzRkVCNEIwMkFCRDBDRTRGNAotOjEwOURBMDAwRTI3Q0VFMDc1QzY0RDUyN0EwM0I1MDFGNkQ4NDI3MTcyQgotOjEwOURCMDAwOTc1QkYyOUEyOTA0QzlDQUI4NEEyMzNDMjU1NTlEQjYzNwotOjEwOURDMDAwQTYxOUQyRDVDM0VFMzdDMjEzMjlCNUEzNzYzNTgzMUFBNwotOjEwOUREMDAwNUI0N0I3NzAxMUYyM0ZGRkJCOEQ3NDVFOEJEN0NCMEEyOAotOjEwOURFMDAwM0JDRjg5RkJBRTM1NTcxNENGMjJFOEY3MDg4RjNCQTI1MwotOjEwOURGMDAwNDBDMEYzRUEyMjBFNkZEMTZFMTE4N0Q3ODkxNEFFM0ZBRgotOjEwOUUwMDAwRTY5MDlDMEI2QTNGRDY2NzQwRUY1RDBCREZDRDFFQzAyRQotOjEwOUUxMDAwQ0ZBMDJFRTdGQUUzMDc0NjM2QUVGNkZEMTIzMUVFRTJBQQotOjEwOUUyMDAwNTQ3NkZFM0E2MkE0OTQwOUZBRTQyRDRDMEVFNENFRkQ3OQotOjEwOUUzMDAwRTJBRTIyQkFGRURDMEU5QjBFRTMxNTE2RDdCRDAwNzgwQgotOjEwOUU0MDAwRTg2REU3NzgzNDkwNzZEODRGQjMzQzRCM0VGOTFEMjI0RAotOjEwOUU1MDAwMjY0RTc1OEZGNzUyRjJEMkRFNjkyQjBGOTU5Nzg1N0VDRAotOjEwOUU2MDAwNjc3OUE4QkMyQzA5QjQ5NjgzNUMxNEYyNTFGODRGN0QzNQotOjEwOUU3MDAwOERENTlDMkYzNzIwM0YzREQwQjgxRUYzMDcxQjNEOTg1MgotOjEwOUU4MDAwMUU2QTZDRTE3Q0I5MTVDQkRGNjk3Qzk4RjM2NTJGRTcxRQotOjEwOUU5MDAwQ0IzQkYxN0I0N0UzNUM0Q0Y3MzVCQTU4M0VDQTE5OTU4QQotOjEwOUVBMDAwMEFGQkM0RUNDMkY4QzQzN0I2OTgwOEY4RTc3QTNCNEMxMgotOjEwOUVCMDAwMTg5RjQxNzdDNDYzOEZDNjQxRkM5MTA5RUY3MTZBRTMzMwotOjEwOUVDMDAwOTBCNDdDQkU4RjFFNzZGNzdCMzcyNTA1QzZFOThCMUZDNQotOjEwOUVEMDAwMDI3RDcxQzhDMEY0NzQ5ODI4NTZFMDRCRjk4RkZFRTRGNwotOjEwOUVFMDAwMDZEMEFGMEYyQjhBMTVGNEU5ODJENENEMkNFRjUwQUNGRAotOjEwOUVGMDAwMDY5QTJGN0M5NEU3NUQ4QUQ1MDRBQzIyRjUyMUU0NUJCOQotOjEwOUYwMDAwODczRDhBMzU4MkU2OEIxRjdEODg5NTdCMDkzQUYzQzdBQQotOjEwOUYxMDAwM0RCQUY1MDYwRkYwNTkyMjFEODBGRDUxNkVDRTlDNDRDRQotOjEwOUYyMDAwQzUwNTk1RDdBNTA3NjA1RjRDNDk1QTMyMDlGNkM1Q0VERAotOjEwOUYzMDAwMTQwNUU5NjM5QUIyRTEwMEU0QTc4RkQ4QTY4N0FCRkFDQgotOjEwOUY0MDAwMEU0QkRFNDY2ODU3MTY1N0E5ODc3NjkzRDJENjZDODQ5NwotOjEwOUY1MDAwNzY5Mzg3RERBRjBGNkQzNzc1RDRBRThEOTA5RjYxREYzRgotOjEwOUY2MDAwQTYwN0ZENzQyN0YwQjFGODYwM0YyMjJGQ0EwNTlGMTY5RgotOjEwOUY3MDAwNzE3MkEzM0I5QzI4MEY3MkRCOUQyODBGMDQ1Q0NBNjY5QwotOjEwOUY4MDAwNTdERTBERjZDRkZBNzZDOTI2QzEzQzY2NEI3RDQxMEFGNQotOjEwOUY5MDAwMTA5M0U4ODZGNzQ5MjlCRkJFM0VGNTk3RDYwREI0NUQwQwotOjEwOUZBMDAwM0RFNEFGQzVGQzBGMzc3Q0JCRkNGQkE2RDQzMEZDRkIwQgotOjEwOUZCMDAwNDNCRURGNDFERTQzRENGQjg3NDZGNjBFQ0MzMzFDMkU2RQotOjEwOUZDMDAwRjUxRDRCQUNGODhFMkE3MTU5NDFDRjdBOUVDQkYzOTc5MQotOjEwOUZEMDAwMjBBNUU1OUZGMUI0OEI3RjdGNDBFNzcwQzEzOEFCNTI3RAotOjEwOUZFMDAwQjkxRkIyM0Y3RkE4NDk2NUZCNUY3MzhGNjQ4MDcyQ0U1MwotOjEwOUZGMDAwMUZFQTUyNkRBQUY3M0NFQTA4QkJCRjc2QTkzODNCNkQ1MQotOjEwQTAwMDAwOUNCODM2RUU2NDM1NjkzQkU4QzhFQzFGNkY1MjBCRjcxRAotOjEwQTAxMDAwRENCMkZBQzc3RjhCNzg2QTZEMUM3OERGQjk2QTEwRTMwRgotOjEwQTAyMDAwQTc3MzgxRDc1MEJBNkU0OTFEOTA0RkRFN0IwOTM4REM4QgotOjEwQTAzMDAwMUIwRTBFRkRENjQzNTg5QzdCQkYzODI0MUVFRkFFNUQzMQotOjEwQTA0MDAwMTc3MUM1QjM3NzhENzlGQ0JCNzY3RDgyMkVGQUFGQUZFMQotOjEwQTA1MDAwOTVDMTVGQ0ZFMDRGRjVCQkM3NjA3RTE1OEJBRDA0RUNCQgotOjEwQTA2MDAwNTZBMUZDRTc3NzE3RTEzRjVBN0VGNjZERjFDOTlCMTdDMQotOjEwQTA3MDAwRDdFMUJCNjU2MUY4RDhGM0UxRjg5OEI4Q0ZBRjREODU2QgotOjEwQTA4MDAwOUUwQUY3RjMyMDFFMTJERTM5ODI3MzdFNjVBMjZCMUZEMwotOjEwQTA5MDAwRjREMzUzMTZGODlCMEVDRUExNzFFQ0RERjA4M0QxQUU1NAotOjEwQTBBMDAwRkRGMDVEMzJCMkI4MDYxMTk3N0M1QUU3RjkxNUU4NkRGQwotOjEwQTBCMDAwRUYzREZBMTlGMkIzNkUxMDE2NzQ4RkJDNDFGM0EwOTdGRQotOjEwQTBDMDAwRkRDM0U2N0MxM0UwNDc0NkY4OERBMUVGOEYwRjE0N0ZBOAotOjEwQTBEMDAwRkIxQjJFRkZGQUE3NkNERjg5MzhENDlFNkQ1RjY2QTA0QwotOjEwQTBFMDAwRkRFRTEyRkI2MjIwNzg1NEM4RTNGRDcwM0ZBNEI3MjQ1NAotOjEwQTBGMDAwMTJFNTY3OTc0NDdDRjBERTcxNTc2OTAyRUEyRDVERTk0RAotOjEwQTEwMDAwNDYzREE0REZGNkI5QjgyQjNEMUJGQkQ3OUU4RkJCOTIxMwotOjEwQTExMDAwNEJDQzZDRENDOTUzMjE3RDJGRjk1NDIxQzhCRERGRjAzNQotOjEwQTEyMDAwRjhDQjc2QTNBN0UwM0RCMDBGOEY4RDQwRkZGRThEOTI1OAotOjEwQTEzMDAwQkYxMEUwQTAzRDU3NzdCREI1QTA0Q0M5RUQ3RkJFQTZDRQotOjEwQTE0MDAwRUI5QjA0RUJBQjNEQUVCQjFCQkU1REU5NzlCQjc2RkQ4MwotOjEwQTE1MDAwREYwOEM0Qjk4RjVCRkYxNTgxRjdFRkFFRkNGQ0REMTk5QQotOjEwQTE2MDAwOTNBQjgwNUVFMTZBMDIxMjE5RDM0NUY1MDk5QUJGNTQ5OAotOjEwQTE3MDAwRkNENjM5ODk5RUQzMzM0M0NFRTUyNTZGQjMzODJFOUU2NgotOjEwQTE4MDAwNkFDRkU3RkRERTA5NUNFRDUxQzcwRDk2RkE4QTMwNUVCNQotOjEwQTE5MDAwNDVGNjQ3RTFCRDYwMUQ3QjZGNDNDNDczQkRDOUNGRjM3NgotOjEwQTFBMDAwRjRCQzNFMjQwREVENzA5RDE5QUFGM0ZBMUQxRjJERkE4MwotOjEwQTFCMDAwMUVGMjgxMDg4Q0VGNzhBNkZENDQzQ0NDRjU4RjlERjExMgotOjEwQTFDMDAwM0Y3OTQ1MDlEMjc3QkRFRDZGMjRGNDlEQzBEQUY1QkQyNgotOjEwQTFEMDAwQUE3Q0Q3ODZFMEZCNTY3MDFGQUJGNjVGMzJDQTI1MkFGMQotOjEwQTFFMDAwQzc1QTEwNEZFNDM1RTNEQTEwRjk0QURBRkVEQzA3RUYxQwotOjEwQTFGMDAwRDE5NERGNTUwMkMwNTBCRTM2Q0Y3NEQwNzY5NUZDM0M2QQotOjEwQTIwMDAwNDQ0OEU0OEQwRURBQUU5MjlGMUY4OTY3MjUyQjhGRTdCNQotOjEwQTIxMDAwRjUzRDlGQjA3Q0JBMjhGRkUzNENBQzdGOTVFODZGMUNGRQotOjEwQTIyMDAwMkI0RjE2NzlERURGRDUyMjlGNzgyMzk2Njc4QUY2MjU5NQotOjEwQTIzMDAwMkM5RjIzQzZBRjY0RURBREFDRkVFNEFERkY5QzA5N0E2NAotOjEwQTI0MDAwOERFMEY3MzNEMkI4OUNFMEVGNTI1MUZFRUY0QzJCQkFDMQotOjEwQTI1MDAwNjhCQzhFQkE5Q0NCMDdGMTBFNTVDNTFERDMyMkRGODU5NQotOjEwQTI2MDAwN0REQzI2NjFFQzYxRUQ5RDA2QjRFNzlGOEQ2OUNCMEQyOQotOjEwQTI3MDAwQkQyRjJGRTI3QTlDRTU1NjhDRjNBQTdCNzFGODc2OTk3NAotOjEwQTI4MDAwQzczQjgxMUVCMzlDRkJFOTJCNjQwQkZBNjE3QUVGNjUzNwotOjEwQTI5MDAwN0M3RTIwM0Q3MEU1RkE5NzU1RjhFQzU3Q0VERkQzNDYyQgotOjEwQTJBMDAwNDcyNTFERUZEQzBGMTNGMTdFMDIxOUQ2ODlGMTAyRUU2RQotOjEwQTJCMDAwMzQ0OUM0MjdFMEJENkExMTU3MTc5NzQ1MUM3MDdFOEUzQwotOjEwQTJDMDAwN0IyOTgyQkRBNzdBQjIxM0Y5RUZDQTk3OTg3REJCNkUzRQotOjEwQTJEMDAwQ0JFQjI4RUY5NkNBMEFEQTk3QkUxRUVBNUEwN0YwRTlENgotOjEwQTJFMDAwQjZCMjc3MkY1N0FFREY4N0ZCRjQzMUM1QzZGRDYwODE2QwotOjEwQTJGMDAwNTFBMUYwQkNCMzNGRkMzRDY5RjExNzg1QkZCQUZDM0ZFQgotOjEwQTMwMDAwMEM3RkFENUQ1RERDRDc1RjdEODVGMTdGREQ1NkU2MDdCNwotOjEwQTMxMDAwQjY3MzNDRkQ0OUE3MTQ3Mzc4M0QwMkYwM0FCN0EyMzNGNwotOjEwQTMyMDAwM0I1QTg2MjBFRTRFOEM3N0FCOTBERjI5ODJGMzU2NkYzNgotOjEwQTMzMDAwODM5NTAwREVCQkE1Q0VEQzBGQzNFMDVGN0JBRTM4OUYwQwotOjEwQTM0MDAwNDE1NDcxNjkzQkZCQzNGN0U5NEJEMEY3RDNGRjRERkE5QQotOjEwQTM1MDAwNEVENEZCOEQ3NkYwMUIxRjY1RUZFNTE1NzdGRUM5MTgwRgotOjEwQTM2MDAwMUExRkY0NEUxQTNCMDcwRjZFNjc3RTMxMTExNzE3MkMxOAotOjEwQTM3MDAwQjczMjNDNzFGRjUzNURENTNCRTNDMUZGMjRGNkMzQzQ0NAotOjEwQTM4MDAwNDhEMjA2RkUwNDRBRDc3NjRFRDc3NkEwNkI0MUJGNDEyRAotOjEwQTM5MDAwM0YxNDZEMTcwNkJFNDFGQTI1MkMyRTkxQzNFOUI3RkQ3NwotOjEwQTNBMDAwRTFGQUUxMjVFMEZBRTE3RjEzQUVCQkE5M0U4Q0ZFREJDQQotOjEwQTNCMDAwMTcyMkQwNEVBMzg1RjMzRjM4NUMwNUJDMjNEMzJGMEU2NAotOjEwQTNDMDAwRTdDOEY0RkYwQzlDMjNEMzE1OTU5RDQzQzA3QjIwRjk2RgotOjEwQTNEMDAwQTRDNThGOTg3Nzk4N0Q1QUY0NERGNkU5MjMxOTlDNEZDMAotOjEwQTNFMDAwRTlGRDE4OEZBQkM1N0I0QzdBM0ZCQzI3QTQ1RjFDRUZGRgotOjEwQTNGMDAwRUFGMkZGMzBERUI1NzBEM0E2QjVEQzlGQUJGRDVFOTgwOAotOjEwQTQwMDAwM0UyMEJGRkI1NkUwRjg3RkNENEZCMEIwNjFCRkFBN0NDNQotOjEwQTQxMDAwRjFGQUI3NTRFNTRCM0NFRjVGOTY1RjQxRDhGQkZGNUIyOQotOjEwQTQyMDAwRkUwNUUxNTc5OEY5RkMyQTFERjgxRkI1RjI0MTM3QzQyMwotOjEwQTQzMDAwRjkyM0EwQzcxQjVGRkU3QUQ0ODczMEY5RUE2QzhDQjc4QQotOjEwQTQ0MDAwQkE4REFGRTU4QkYxN0ZGRkU0N0I5NEJFQkU2ODYwRjYwQQotOjEwQTQ1MDAwRDY2M0ZCM0YzNzI4MzlGREU5NjVFMTc5MUQ3MTg0RDA2QQotOjEwQTQ2MDAwRDlDMkY1RUYxQjQwQ0Y1QTQ4RDhGQjU0REFGQTBGQTZGMQotOjEwQTQ3MDAwMzM3QjMwQzY0OTUxQkUzMEQ3NEMwQzcxOTQxRkNDOURGNAotOjEwQTQ4MDAwQ0JFRTRCQ0YwNTA3NjMwQ0E2M0UxNzJEOUZBOTI3M0VBOQotOjEwQTQ5MDAwNzg4RkJCRDJBMkY3OTlEMEVGQTlCRUZGNkVFMkVGNzUxRAotOjEwQTRBMDAwOTNCODU4RDUzRDc4RDkyMTYzOUNERjlDMTJFNjJGQkQyNwotOjEwQTRCMDAwQzVEMjg2Rjc4N0U3MURCQUVCRENGNzYwMkY2RkY0MTQ3RgotOjEwQTRDMDAwQjFCODc3NzFGRkYwRjdCQTJCRjE4MzNFMDg3QTJBOUM3NgotOjEwQTREMDAwRkIyNEVFNUY1RjYzNDBGRkJBQjZERDJBQkU5RjY2Q0EwQgotOjEwQTRFMDAwMTI4QkEzRDlDM0UyMzNDNUZFQTRFQjNCNjRDQTY3Rjc2MgotOjEwQTRGMDAwNjBFMEY3NDgyQTFCMENCRUUxQjlBMDY3RUY0NzNEQkJGRgotOjEwQTUwMDAwQkU2NDQzMkVFMEFGN0U5Mjc0REM5NDFCM0NFRkQ0QUY2QwotOjEwQTUxMDAwRkYwQkI2RDdGMjY3NkQ3QUI5RjZENTRGMUEwRjIxQkQ4QQotOjEwQTUyMDAwODg3M0QxQjE0NjFGRTZCNUY2RDYwNTEzRkYxN0ZEOTMyNAotOjEwQTUzMDAwNjNGRkUyNkQ4Mjc0REM1NzhFMEZDN0QwNzVGQjFCM0I0NwotOjEwQTU0MDAwRkYyRDdCODJCMDIzMDhCQjgyRDY0RTIxRjg4ODc4QkZDRQotOjEwQTU1MDAwRDI5NzZFRTNFRkIyOTZBMkRGODNFODU5MkFGOEVEQzFGNQotOjEwQTU2MDAwRkVGQ0Y5RDdFOTE3RDcyN0Q1RTVGRjYxRkU3Q0I5RjRFMgotOjEwQTU3MDAwNUY5QkM0RTRBQTk2RUU4RjU2RkQwQ0VEQ0Y4MkJFQjU2QwotOjEwQTU4MDAwRjRCRjAwNjI1MkU4RjgwQkVBMjVCQzI3M0U3NzU1QUJEMgotOjEwQTU5MDAwNjE5Q0Y0Q0RFOTdEQjVFNTY0MDY4MzlCNDYyRTVDQjFGNAotOjEwQTVBMDAwM0M1MDc4M0M4NzhDRTcwQjkzQkNDNjBFNzYwRjgxODdCNgotOjEwQTVCMDAwQUZEM0Q1RUYwMzUzQkM0ODE5MTc5N0FCRUFGMkZGRkFCNAotOjEwQTVDMDAwMzlFMEU0QTI2RjI2MTc4OTRBOUY0OENCRThCNzZFRTVDOQotOjEwQTVEMDAwMTJFQjU2RkU5QkVCMEVCOUE3QjQ0OEQ2MDVFRkUzNDA0RAotOjEwQTVFMDAwRkMzNUM0ODFGNjc4RDlGREQ0RUFDQzU2RkNERDAzNTJBMwotOjEwQTVGMDAwMTI4ODAyN0U3N0VCNUU5OUZEOUU4RURFQTE0RjBFNzk2QQotOjEwQTYwMDAwM0ZBRDhCRjgzRTAwN0E1QzM1OUVCRDNCQTQ4RDlCNzZCQQotOjEwQTYxMDAwRjM3OEVBRDU5NkRENzhCRjUxRkIwRTlBODhDQjc2RjNCNgotOjEwQTYyMDAwRkVCNEVGQTE4OUY2RTI5RDAzRUQ3QjY4NTMzMjc4MUNGRQotOjEwQTYzMDAwNzYzRUM5Njc3MTI5MTdFN0EzREQyMENGNDNGQzM1RERERQotOjEwQTY0MDAwNUYzNUEyNURFMUM2Qzc0QUVFRjNBNDA1RjEzMjI3QTM0OAotOjEwQTY1MDAwMUZERjk5OTc3MTcxQkVBMzJFRkYyRkQzQUY2Q0REODFFMQotOjEwQTY2MDAwRjdEOEFFOTQ3RTQ3NjQzQURDNDA3RjgyMkZGN0YxOUJBNwotOjEwQTY3MDAwNTc0Q0M4NkZDNDNCRjMzRDZCOUVDMUY3ODc3QUJFMjQyRAotOjEwQTY4MDAwRTg5N0JERDQzQkUzMTNCQkQ4MzVDNDA5MjdCRDRENTY2RAotOjEwQTY5MDAwOEFENzcxQzczQzY4QUYxQjdCQzQ4NUY3NzZDN0JDRTMxQwotOjEwQTZBMDAwODA4ODdGOTI3N0MwMjlDM0JDODUzRTIzRjQ5QjIwRkYxRQotOjEwQTZCMDAwRTJGN0Q5Nzg5Q0Q1RTVGMkI5MkJGNTM3RkVBN0ZDOENFQgotOjEwQTZDMDAwRTI1RTVEQjdDMTU3MDRCRkU3RTBEOTEzODFCRjAzQTFDNAotOjEwQTZEMDAwOURGRjkzMTlCQThCQkU5M0RDMTFFNTdBMTJGMDM0OEI4RgotOjEwQTZFMDAwQ0IwOUYxNUU3Mjg1Q0NERTQ5RUZFRDk0RDE1RUI4RUUxOAotOjEwQTZGMDAwN0Y3RUZCQUI0Nzk1NEJEQjE1RUE2REJENjFDRjY1MjJENQotOjEwQTcwMDAwQUREN0IxN0IyREY5RTUwQUM2NDlDMjc5MERFQzg3QzJGOAotOjEwQTcxMDAwOUVBOEFEN0Y0QTI5N0IyOTAzRUQ1QkUzRjEzRERBREU5QwotOjEwQTcyMDAwODdEOTdDMDZDMjU3RkRGQTAwOEUzRjYwMzkxRkJGN0U3NQotOjEwQTczMDAwNkY5MTJERjQ5RDk1RjMxOTdERTc0M0RCMjk3MzEwREZBRAotOjEwQTc0MDAwOTc0QjE3RkZEN0NFMkQzMzY1RTI5MUE4N0NDRDkxQkNGNgotOjEwQTc1MDAwNENFRjI1NENGRjVENDAzQTMxNUQ0NDAyOThCQTA4QkI4RQotOjEwQTc2MDAwQ0ZCMDk0RDgzMTVENEU5Qzk4QUU1NTVDNUQxOTE4MzdDQQotOjEwQTc3MDAwMTQ0OEMwRjhEMzE3RkYzOTBBRThFNkRDNzVFMzVBMjExQwotOjEwQTc4MDAwNDZGMURCRjIyMzY5RjVCRTlFM0M4NUJEOTdGNEMyM0ZERQotOjEwQTc5MDAwN0YwN0Y0RDlGMzNGODZDQkUyMUI0N0EyMUM2NDQ4MTgxRAotOjEwQTdBMDAwM0ZEMzdCQTUzMkJCRDc1NEYyNUREQzE3RTJGRDVEMzJBRgotOjEwQTdCMDAwODlGOUUxOTYyNzY2RTJGRTA5RjJDREM0NkQ4MjZGODJDNwotOjEwQTdDMDAwM0YzOUU3Qjg4RUM1QzNEQzJBRTE3QkM2RUQ3RTFENkUzRQotOjEwQTdEMDAwQjE5QzE1OTk1RUY4RERCOUY2RERBQzNDQTcyRURBMkJGRAotOjEwQTdFMDAwRDE3Q0NFRDgwODU2QkUyNkRBMEJGNzRGMTYxMjNGRUVCNAotOjEwQTdGMDAwQ0JDNTcwRkI0NDg2RkI0QjhDMkY4QURGMEJBMDI3ODJENgotOjEwQTgwMDAwQTExMjZEQkZBMkMzQ0NFRTUxMTBGRjMwRTBGRkI5NzBCMgotOjEwQTgxMDAwN0UwQTE3NEYzMzg0RjFGMUQxNDMxOUJGMUY1REE2QjZFRAotOjEwQTgyMDAwODcwQ0U1RTVGNzI5NjVERjA3NzhCNDBDNzE2NDBEODFDNQotOjEwQTgzMDAwRkEzMTlEOUIxRTJDMDQzQjkwOEU4MDlGRTZCM0IxQjdFRQotOjEwQTg0MDAwQTM1RjUzQjQ3QjUxMjkxQjAxRjU5Rjk1NThCQ0JGNjc4QgotOjEwQTg1MDAwMkZCRjZGNEMwMjA5QTFGRUIxQjU0QTc5MkVENDJCMUEzNQotOjEwQTg2MDAwQzJGOEQzNDA3MDg1REY1MTc0ODYzOTJGOEFGOEQxRDE3MAotOjEwQTg3MDAwNzA2NjQzQkIzQ0MxNzdEMjlFOTU1ODdFRjJFMzVCNkYxNgotOjEwQTg4MDAwREM2ODQxNUY4MjA3RjRFMzE3MTVENzQ0MTg2RkI0OTE3MQotOjEwQTg5MDAwMTAwQkNDRkZBN0ZDN0UxQjY5QzgwMEJCRThBQUM3NEMwNQotOjEwQThBMDAwM0FEMDJGM0VBMkUyMThFRUY3RkM4MTlFQjcyMUZEOTgyOAotOjEwQThCMDAwOUU5QjIxRkQyMzNEMzc0MzdBOUM5RTlCMjEzRDQxQ0ZBQQotOjEwQThDMDAwQ0Q5MEFFMzg2Rjg3QzdDQ0M5ODkyMThFQjlEMEJGRjA4MwotOjEwQThEMDAwRjc2OUU3NUIzOTg0RjFEN0JFRjFGNzFBNzFGQ0ZCMTQxNQotOjEwQThFMDAwMTdDMkI3MEZERjdCMDhGRURFRURCM0QxODE5NDk4OEJFMgotOjEwQThGMDAwRDA1QkNGREVCRkEzOUY3NDIwQjgwOEZGQTNCNjdDMEE0RAotOjEwQTkwMDAwQzc2QkVFNkUzRENBRkZEQzc2N0ZENENBOTA3QTJCODc4OAotOjEwQTkxMDAwMThCMTdEQ0UwQjI3QTNBMEZGNkU1QjFGN0MxRDEyNURCRgotOjEwQTkyMDAwRjI0QzFEQ0JBRjdDRkNCOTFCMzc4RTgyRjkzQkJFMEZCRQotOjEwQTkzMDAwNzQ0MUY3Rjk2QTQ4NzNEQjdGRkIwMEZDNUUyQUVEMUY2OAotOjEwQTk0MDAwRTMyNDdBQTRDMDY2M0MyRjY4RDZBMTg1ODM1OEQ3QjM4OAotOjEwQTk1MDAwRDE5RDlCQTBGREIzMkYwQzg1OTU1MEJFNDNEOEJFMDE2MQotOjEwQTk2MDAwM0E5MkMyQUQ3NzAzQUVFNzQ2NTNBMDEwRUUwQkRENzgwNgotOjEwQTk3MDAwNDEwRTFCQTc3RDlGNTI4QTcwNEUwNjdBNDNGRUREQ0FBOAotOjEwQTk4MDAwNTM0NjVGMDI2RkRGNzQ3RjZCRkIyM0UyRkQxNUUwQTU4QQotOjEwQTk5MDAwMEFDOEE1QUZBMjQwMkZBQ0U0RjEwNEVEQkI4N0ZEMDZDOQotOjEwQTlBMDAwRDZFOTM5MjQxM0Y4QkREQUQxMzFFQUZEQjc4QkUzNDk5MgotOjEwQTlCMDAwQTQzOTdCOEQ0RUMwRDdCMzdCNEYwRDgzRjc4OTI5N0U5OQotOjEwQTlDMDAwODZDMTdCQzVEQjg2NUM0NTQyN0ZFRjMxNjdFQzk3OEZBNAotOjEwQTlEMDAwM0MxODg3RjVGMUY3NjlFNzkxNkQxNTEwMzczM0RGQkM0NwotOjEwQTlFMDAwRkYwRDU4RDI0MkRCRjEwQTg4OUI1OTlDMjQxRDg0NzRDOAotOjEwQTlGMDAwODk5MjM5MTlFMjY1QzQ3RDgzNjUyMzRBMEZDMjk2OUEwQwotOjEwQUEwMDAwNjFBRjQ0N0RBRTE0OTg0Qzg4N0MyODM3NDdGMjQ3RDgxNAotOjEwQUExMDAwODUzQzhBNTVFNUE3MjRBNUFBRUE0RjUzQjI1NEU1RDM0RAotOjEwQUEyMDAwNDc4QzU0OTU4QjcxNjdEODBCNTRGNTQ2QzcwNDg2QzI4MgotOjEwQUEzMDAwNzk4RUFFODNCRDAzRkZBNDhDRjE4NjM5MkYxQ0I5N0VCRAotOjEwQUE0MDAwMjRDRENGN0M2QTBFQkU0M0Y5MkMyRjlGRjk1Q0I5MTczOQotOjEwQUE1MDAwRjBEMTQzRTE2OUE0MEFENUU5OTIxRjZDN0UxMDNBRDM4NAotOjEwQUE2MDAwOUMxNzZBRjczRTcxRDBBMTVDQzY3OUUxMTJFNzg0ODEzOAotOjEwQUE3MDAwREU0RjE2RURCNUU3MDRDQTM3MUYwMEJFMzlGQUM1RDk1NwotOjEwQUE4MDAwMzZGMERCM0UzQkY2Q0IxNDg4NDdGRENEMTBGRUFFMEMxNgotOjEwQUE5MDAwM0YzRjBDNDQzNzdERkI0MzUyMThEREJDMjU5MzI3QzM1MQotOjEwQUFBMDAwRDAwRDQ0RjIzMjNBNjRFOUNDQzNFQzdFREU5NUYyQjVDNwotOjEwQUFCMDAwNEY4MUFGQTFCREMwNDM0MjdGN0Y1NzZCREYxQjZEQjQ5OQotOjEwQUFDMDAwRkZFNjM2QjA0N0JEMkJDMzBEQTVCRTdCOTMyQkUxNkZEMAotOjEwQUFEMDAwMzk0OEVGNjRGOUI2QkI5M0UzRjBCQjA3RjQ2MTM3QjdDRAotOjEwQUFFMDAwRjcwRDUyQjgzRTU1QkJGRkVFRTRDMjYwMzk1OTc3NUNCMgotOjEwQUFGMDAwNTU5RkRDMjkzNUFCRjIxQjMzRDVGOTdCNEI5QjQzREJGMAotOjEwQUIwMDAwMEZBNDhGQUQ3Qzc4ODlEMTk1MDNGNzZFQTVCMEJGMzdDMAotOjEwQUIxMDAwMkNFNkYzRkYwMTA5ODBENTIwMDA4MDAwMDAwMDAwMDAzMgotOjEwQUIyMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZCNTE5MEI1NDU0NjU4RQotOjEwQUIzMDAwRkFCQkY3Q0UwQjE5NjA3ODI4MTA0Mjc3OTg0NDBBODQ0NAotOjEwQUI0MDAwODk1NzI4QjA4REEwMUVEN0RBMUE0QzhGNTQ1NjkzRTUzQQotOjEwQUI1MDAwMDM3OTRERTBCNkY0RDhFMzE4QUQ4RkI2MDc2RDVCNjlBNQotOjEwQUI2MDAwNkIzNTU2OTZFN0U0MzlCMTQ0NDYyNTM2QUU1QjQ5RUI4MgotOjEwQUI3MDAwRDY1NEEyNjZFNDk5RDg0MjRDNzAyNjdBNkQ5RDVBRjc1NQotOjEwQUI4MDAwRkJGRUZGNUU2NzJFNjA1QjlERDY0RUU3OUZFRkZGRkZFQgotOjEwQUI5MDAwRkI3RkVGMjc5MDE0Q0E3MENFMDAwOEY2QUNDQzcwOTlGQQotOjEwQUJBMDAwMDEwNkY3RDYxQUU0MTg4MEQzRjRFRkUyRjBEQUI4RjkyOAotOjEwQUJCMDAwN0E4MzAzQ0Y1NzAwMzgzQUNDRTNDRjAxRDYwMTE0MDM5MAotOjEwQUJDMDAwNUMyOTgxN0JBMkYzMTQ1OTYwRTc2MEZGNjVGMUJEMkYxQQotOjEwQUJEMDAwMDEwODQ5MDA5RTE3OERERUVENTY4NEUzNUMwNjY3NkUyMgotOjEwQUJFMDAwRjg5RThERjA0RTA2MThEOTcyRkZFRkJGMkFDMkY1MjVFOAotOjEwQUJGMDAwQjBFMzBFOENDNDQzMERCRDlCRDc3NTVDMTQ3MUNEOUYyMwotOjEwQUMwMDAwMDREN0QxNzc3OTk2ODA5ODgwNkI3MDU1QjQwN0UyMDBBRAotOjEwQUMxMDAwOUE2QTYzM0M2MjNFOUU2Nzg2MEU5OTJFMDRDOEYxQTYyRQotOjEwQUMyMDAwQjU5QjUyMDE4RThBMjJDMDM5NDQwNzc4QTAxNEVGRTMwNQotOjEwQUMzMDAwMUIwNDVGMjRBNzM5RUZBNERGQjlDODY3Q0MyRkM3RTc4RgotOjEwQUM0MDAwNDUzMkIwMzVCRjMyOTRFOUM2N0JENzdFODdFNzFDQkY1QgotOjEwQUM1MDAwMDNBMjkxQ0UzRjgwNEE4RjAzNEM1QzJFMDRCQkJEMTlFQQotOjEwQUM2MDAwRkUzRjIzM0Y0REJEMTIxODkwOUY2MUYwMURCQTVBNjAwMAotOjEwQUM3MDAwRDdDQ0E5MjUwMDJCRTlBNzRDRkIxRDA2OTBEODZGMTk0RQotOjEwQUM4MDAwNzA3Rjk1QjJCRkIyN0NFNUE1MTA4QkYwNTZGRDQwMjBEOQotOjEwQUM5MDAwOUJCRDBGQTdGMUZGRDU3RjZGMzc5OEYxN0NGNTUzREE5NQotOjEwQUNBMDAwN0Q0MjBGNTM5MDJGRTVGQjNBRjBCMzc3RUI3N0UyM0QwRgotOjEwQUNCMDAwNTNGODVFMjNEQ0ZEOTk4NEVGMzY3NjY5QkY1RjI0QzdDNQotOjEwQUNDMDAwMjQwREU2RTA4RjAyMjgzODJEQjE2RDkxREU2QjM2RjE1MAotOjEwQUNEMDAwRjdFNjRBREZCRDdCMDlFQUIxRTkyNUM5NkVDNEFERDEwQgotOjEwQUNFMDAwREREM0UyMDBGOTgzMzlBOEU0RDRGMUYyNkJEQThDN0E4RgotOjEwQUNGMDAwMkEwQ0MzQTc3NjRCRjNCRDc0NUYxN0NBQTg5RTMxNUVCQQotOjEwQUQwMDAwQ0U2MEM5RTJGODJDMUM1RjczQzVENzBCMDFGMTM1Rjc5MwotOjEwQUQxMDAwRThEMEQwN0UwMENGNDYxMUU0MDgzQ0NGRUQzMUFFRjI1MgotOjEwQUQyMDAwOUFDM0Y0MDcyRDlDQzdGQzlFMkYxMzY2RTdGMjc1MUQ4RQotOjEwQUQzMDAwRDEwMUVEMUMyRjcwQkY5ODIxODAzRTA5RjE0MUI1NjAxMwotOjEwQUQ0MDAwREY4RTRCNUY0RjcyMjVDOUJGNEYwMDlGNUNDMDlFNTg3RQotOjEwQUQ1MDAwNjQ0MkZENUNDMTlGQTM3RDMzMjRFMDhGOTQ2QzFERTFCMAotOjEwQUQ2MDAwNTlBOEM4RkQ4QUQyN0Y3QzIzRTA3NzhCN0IxNjRGNDM5RQotOjEwQUQ3MDAwMEFFMDUwRDdCMjNFRDQwQzZDOTA2RDBDREYxMkYwRThCNAotOjEwQUQ4MDAwNDkyRjdERjFDRUY0MTZBNEYzMzI0OTYwRjZERjE3MUY4OAotOjEwQUQ5MDAwMUExNjEwN0Y1RjQ1QjREMDI2QjBGN0VGQTRGNzU1QkU2MgotOjEwQURBMDAwRkFGNENFNzQzN0UzNkI4RTY1MTBGNTI2MzgyRTkwNEU4QwotOjEwQURCMDAwNDc4Rjk3NDc1OEFFM0ExODU0RjUyQjcxNzcyMTdGOUNFRgotOjEwQURDMDAwMkJERDNFRkIxMkY0REJEMUE1NjAzMTIyQkQ5NzRCNjgzMQotOjEwQUREMDAwMzgwOEMzQUJEQzhGQUI0OUQ2MzM1MUFFODIzRjgxRTgzNAotOjEwQURFMDAwNkM5NjE3NkU5MUYxQkJFNEQ2N0I0MTk3MTgyMTM3MUQwNQotOjEwQURGMDAwRjczMzU1MkZBQTFDQzdEM0ExRTIyREY3M0I5MEJGRDE0MwotOjEwQUUwMDAwMUQwMkIzOUY0NkJCQ0NFQ0IzQjFGQ0U0ODM0QjEwN0Y3NwotOjEwQUUxMDAwQTM1RkIyMEI0OENGQjJFRUJENDc0ODdFMUQ2QjNCNDBFRgotOjEwQUUyMDAwNzcxRTQwRTdEQTZFQjYyRTMzOTk3RDUyMUVFMzhCRDkzQQotOjEwQUUzMDAwQUQ4ODQ2NDE3Q0FENTY2MEM2QTczNTdDMUVFNjdCMENDRQotOjEwQUU0MDAwQkM1MTNGN0MwNkNFMDQzODE4RUI3QzlFRjg1QkYzRkJDQwotOjEwQUU1MDAwQ0ZGQjk2MTBCNTFCQ0FFMzk5MUY5MEFEOUQxQkE2M0Y3MwotOjEwQUU2MDAwREYwMDYwNDZGQTQzREJBM0JENEYzMDNDNjhBRjI1NjE4RAotOjEwQUU3MDAwN0IzREIxMjdFQjcwMEI5RTlGNzg1M0NGQ0M3NTVGQzVBMAotOjEwQUU4MDAwQzNBNzZFNDE3OENERjY2ODI2RTcxMzA5RTA0OUE1RjMxQwotOjEwQUU5MDAwMjdBNjdCM0Q3ODYxQTUxOEVBNkYyMUI5NzdDNkQ4Qjc5OAotOjEwQUVBMDAwRTNGOUYxNDdBNzNGQkIxM0UxREE2N0E3RDk4OTRDRjI3MQotOjEwQUVCMDAwMUYxOUU1N0QzQzFEMDFEQTdGM0U5NTdEMDcyOTFDRUZCQQotOjEwQUVDMDAwMEFDNTJGQTU2NzY2REM1NzRFRTdDRjI0REEwOThGQUE5QgotOjEwQUVEMDAwQkZBMTQ3QTMxQzgwRjJGQTEyN0M3OTE2MzRCRDkzODI3RAotOjEwQUVFMDAwNjc1MEM0ODdFQkM0OURDNzA0QjRDQkRCMENBRTgzQzRFRQotOjEwQUVGMDAwRjdFQTQ3RkU3QUE4MENGOUE5N0FFNjM3MEZDRjQ0RkFBOQotOjEwQUYwMDAwNkFERjlCMENGNDRFNThBRkUzRTI0MDZDMjA5N0ZDREYwNQotOjEwQUYxMDAwQzZGRDVGOTE0RkREOEUyOENCQzcxMTcxQTZBMTIzNUVDMAotOjEwQUYyMDAwMDMzNzc1QTc1QTNFOEU4ODM3NzVDMDY1MENGNTgyOEUzQgotOjEwQUYzMDAwRjhBOTU3RkNBQTVFNzQxRDI1QkExQTIwQzBFMzIyODQyMgotOjEwQUY0MDAwMEM2NDU3MDU5MkUwQTA3ODEwQkFDN0M4RTQzRkQ2Q0U4QgotOjEwQUY1MDAwNDY2NTkxRDE1MTJGODI4QkUyNzk0MTIyOTg1MkM4NkY3OAotOjEwQUY2MDAwNUQ1QzdFQzE3QkE2M0Y3MTE3Q0E2NjkyMzU0MUY1RkJEOQotOjEwQUY3MDAwQUM4NTMzMjJFREIzQkZGMTE1QjJDRkNENDY2NjlGQzM4QQotOjEwQUY4MDAwNTEzQzJGOERDNUYzMUYzOTlFN0RCRkMyRjQwNUYzODc1OQotOjEwQUY5MDAwMzNGOUE0RjVERjVBMzgxNzFDMTRFRjBBREFFNEMyOUIyMAotOjEwQUZBMDAwNzA2RDUxRjQ3MjJDQzUyOTU4NDlFRTFERjdFRjNBQzA2NwotOjEwQUZCMDAwRTRCOUY1RTZBMzg0NzdCRjk5RTkwRjBFNzBCOTA3MDVFOAotOjEwQUZDMDAwOUUyN0Q1Rjc1Njk4NDJBMDJCMjQ3QUI3MzE3QUQ1RkQyMwotOjEwQUZEMDAwQzEyRDg3RjM1Q0Y4RkVFMDBCMzk3OTgwRjZCQzRDRjJBQQotOjEwQUZFMDAwMEZGRTA1RTU3MzJBQzY3RkVDMzY1QzNCRjdCRjNCODU1OQotOjEwQUZGMDAwRjJFMDU4N0FFQjVCNDdEOTdCMkEzQzJDRjAzODU0NEY2RgotOjEwQjAwMDAwN0NFMEZFRjc5OUNFNjRBMjEzQzMwODhCMEYwMzc3Q0RDMwotOjEwQjAxMDAwNjBGMjlCMkJFNUM2OTFGRTgzMjdCNEY0OERBNTUzN0Q4QQotOjEwQjAyMDAwNUZBNTRGN0Q1RkJEMzdDRDJBMzIzOThFMThGQzc5OTRFQwotOjEwQjAzMDAwRjc1RkNDOTAzNTdDOERDNEZBRjNFMkNEQjQ2RkUxNzU0NwotOjEwQjA0MDAwNDQwMkMyMTFGNjU2NDMzRjUxQkYzNTI2OENEQjQ4NUZBMAotOjEwQjA1MDAwNEQ4RDYwNkYwM0I2RUZBMUI4ODlBQkNGODVFN0Y1MjlCOQotOjEwQjA2MDAwMkYyQjcyMDNBNzA5RUQ3OEIxNjI2NzkwOTRDOEVDNkUzQwotOjEwQjA3MDAwMTE3MEJCNUVBQ0M0RURBQkEwNDMwRkU4MkY0N0M0NzVBNQotOjEwQjA4MDAwQkYzNUEwRkQwRDc3M0NBMDc3NDVDNjVEQ0Y1MUYxNzQ2QgotOjEwQjA5MDAwQ0U0RjhGQkI5RTRBQzhBNkY4M0Q2MjMxQjNCQTY2OUVCQQotOjEwQjBBMDAwNTVEMEIxN0JFOTkwNEVGN0YwRENFRTQzM0JGMDc0MUFEQgotOjEwQjBCMDAwRUQ2RDQ4Q0ZFM0EyNzM4MTE1RTU1MzZGRjBFNTkxMUY2NQotOjEwQjBDMDAwQThERjNEMkVCQUQ4RkVCMDcwNjAwNUU5MUI3NEJFM0MwNwotOjEwQjBEMDAwNTZFRkM0MUI0MEMwM0EyMzM4RDlFRTc3NTA1REY2MjVCMQotOjEwQjBFMDAwQjBCODEyRDQ0MzREMjdFMjJEQUExMkREOURFNjcwM0M4NAotOjEwQjBGMDAwNTRFMzY3NTEwRUVFQTM1QzJCNjg1RkY1NTdCNDlCQTIzNwotOjEwQjEwMDAwN0NFREZEMzAzRjVBRjhCODk1RkI1RDUxQTJFOEVFOTgxMgotOjEwQjExMDAwQzA1RjZFNTdGNERDMDYxRDEyRjc2NzlFNDdDQjE0Qjk2QgotOjEwQjEyMDAwNjNERDIyNDVENjJEOEQ0QTlDMEZDNjlBM0MxMkYyNTMwMAotOjEwQjEzMDAwQjYxQkY1ODI3MDk5Q0VCNzk3NTY4QzAyRDA4QUZBOURDRAotOjEwQjE0MDAwMDUzRUZFNUVCNzM2OUU1MzBFNTlDQUYyNzIwRUNCQ0I0OQotOjEwQjE1MDAwQjMxNDc1QUYxN0RDNDA3QTM1NTFGRUMyRjUyRUMxMkZGRQotOjEwQjE2MDAwRDFGQTJCMDhCMUQ1MDExNjFEQURBODA2QjZDRTAxMjcyMAotOjEwQjE3MDAwNUJFNzgxOUJBREYzQTE5REFEMEJBMDgzQUQ5NzgyOUY1MwotOjEwQjE4MDAwQUQ3MDgxQUYwRDU4M0VCOEREMzI4OEY5MTg3RUJENTJFMgotOjEwQjE5MDAwQTRCQzVDQjQ2NEUyN0FGQzcxNDU1RTY3OTcwNzQ2RjkyQgotOjEwQjFBMDAwOTI5RjJGOEY3OUUwNEE2MTc0OUQ0RDJFNTNCMzk5RERBNAotOjEwQjFCMDAwQUI3MjMxOTI3REUyNzc1MUUwNERBMUI1MDIwMkVDOUQ3OAotOjEwQjFDMDAwOEJDOTkwRjE5REQ5MjBFQjA4QUUwMjA3ODNFN0ZFNDhCQQotOjEwQjFEMDAwNzk5NDA2NUMzQTU3RUUwNDcyQTk5QUQ4NEU3NjI4NzY4RQotOjEwQjFFMDAwNTI0QzM2NUQxQ0Q2RDc4NzU2MUUxNzU0QkQwMUQyNDkyNgotOjEwQjFGMDAwRjk2MEJDM0UyMTgzRTgyQzhBQUVGQzVDQzY5MEYxREE5MwotOjEwQjIwMDAwQjZGNzlEM0E4Q0EzNDU4NTk1MkQzNjg0MEY1OTNGRTVCOQotOjEwQjIxMDAwNzA1OUU1RjM5OTA4MUZEOTc2RDJBOTlCNDk3NjVFNTlGMgotOjEwQjIyMDAwQThCNzYzMTVCQTZFRDgzOTA3Q0Y0RDE4RkNBMzUwNEU5NgotOjEwQjIzMDAwOTI0RDgyNTI1QzVENTFCMTc5ODA3RTY3OTRBQ0VCNzQyMwotOjEwQjI0MDAwRTg1N0M2REI4MEM1MTk1NzE0ODA5RkQ1QjM2ODY1RTRGRAotOjEwQjI1MDAwMjczNUJDN0U1RDYzRTE3QURCNkI3MEJENEE3RURBNjBDOAotOjEwQjI2MDAwRjJDNUNBQzhEMzlBNzU3MzkzMjk1RjZFMzBGMEY3M0Y2MQotOjEwQjI3MDAwOUEyQ0U3QkM4MjcyMzIyMjNFNTM0MTk4NEYzQ0Y3NDRFRAotOjEwQjI4MDAwMjExQzEwRTQ5NjU2NkIxOEZGOEZDMEY3Q0YxRkMyNzdCMgotOjEwQjI5MDAwNkI4QUVCNUQxNkNGNEQ1OTQwRkE0RjUzRjI3OTY3NjdEMQotOjEwQjJBMDAwNTk4QTVEMjRGQzE2ODYzRjEwOTNENUQyOEE0NzA3NTJFRgotOjEwQjJCMDAwOUMxRkQyN0JDMTE4NkU3NzFGNUFCOTVFQ0VCNjlBMzJFOAotOjEwQjJDMDAwMUQxRjU4MjdEODBGQUVGQjdBOTc4RkUyRDAyNzQ4MDg2QQotOjEwQjJEMDAwQkVGMzk5RDUzNTQwNzQzNDg5ODE4QzQyRDRENzFERDFDMQotOjEwQjJFMDAwQzcwQzY0MjdBQTFEMEJBOEJDQTVDODdGOUIwM0JDMDY3RQotOjEwQjJGMDAwRTYxRkU1OTYzM0Y1OTgyREVDMDdDMUU1RjgxRUNBQTVDMwotOjEwQjMwMDAwQzhFOUFDRDJFMzcxNDk4RDdCMUZBREE1QUVGNjJBM0NFRQotOjEwQjMxMDAwMjEzQzQxQTJBNzQ5MEFBRDIwQkIzODE1RkY5RUUxMTM4RAotOjEwQjMyMDAwRTZBNzUzQjkzRDJBRjFBQjY3NEZFRjZENjkxQzc0NDIzNAotOjEwQjMzMDAwODQxRjM2RURGOUU2QUIwRjUwREY0REEzNjYzQjVEMEY4MgotOjEwQjM0MDAwRkJERjk2MTZFQTBCQjAxQUQ0QzQxN0Q1MkY2Nzc1MUIwRQotOjEwQjM1MDAwN0RENDVGOTVFRDNFN0YzOUREQUI3OEFGREY0NjcxRkE4NgotOjEwQjM2MDAwRTJGRTQwMUI5NUNCQzE5RUMzNjlEQzJGRDQzQUZFNkIzNQotOjEwQjM3MDAwRTFFN0U0OTNCOTEyMDU3NUFDQ0I1RTkwQkM0NkU0QUI1MwotOjEwQjM4MDAwOTlFQTBCMDVGNjIwN0NEQzg0NzYxMzQ3Rjc3OUJGQTk5MAotOjEwQjM5MDAwRjY5NTBEQkRBRjE5QTgyRkMxNjczQ0M0NkZBRDQyRkYzNAotOjEwQjNBMDAwQUFBRDM3NUM0QUY1NjJBRDU3REIyRkQ2RjU3QkQ3MTNENAotOjEwQjNCMDAwREQ3NTNCQjRGQjZBQkZEOUE0N0M1RjRGRjU5QThERUE3QgotOjEwQjNDMDAwM0VFREJEMjZFQTM3RjNBOEZFRDNFRTY3NjYyQUZEQTY1QQotOjEwQjNEMDAwOTJGRjQwQTkzMzU3MkE3Nzg4M0YzM0VCRkYwQzVFMjM1NwotOjEwQjNFMDAwRjJENkZDNjg4QkRENDI3MEJBRDlDRUUyNkRGRDA2NjZGRQotOjEwQjNGMDAwQzdFQTdERDg5QUM4NkM0NEY1REJEQThEQzBFQTY3NTU5OAotOjEwQjQwMDAwOEVGOTRGMUIxREE0OEZGQ0E3OTM1OTVEOENGNTNDQUJBNwotOjEwQjQxMDAwNDczMDlFRjBGRTFFNjUyMkEwREQzRDE3MUZDQTE0MTFBNQotOjEwQjQyMDAwQ0Y3MzNERDk3NkFBQjc1RjVFRUI4MDdGOUQxN0E2NEY5RAotOjEwQjQzMDAwQURGN0U3NEEzQkFCMENENDQ3REQ4ODdEMTQ2RTM1Rjc5QQotOjEwQjQ0MDAwM0VEOTY2NDJCODc5MTNEMDBEMjQyRDNCOEVFQUE2RTI5MAotOjEwQjQ1MDAwRkQxMjc4RTkxREYwM0U1MDhFNkI5NzFBNEY1MkIwQkUyOAotOjEwQjQ2MDAwOEY5MDQ3OTQzQzA5RTQwOUZBNzlBM0EyQjdFOEVDMDQ2OQotOjEwQjQ3MDAwQ0Q3OThDRkQxQ0NERjc3MUE1OTlEQUVGM0QwRTdGNkU2RAotOjEwQjQ4MDAwMDlDNTczRkU3REJDRTMwMkNERkQzNkMxNkRGNzkxQ0REQwotOjEwQjQ5MDAwMDRGMDNGQkM1N0FFODhCMUMyQkY4MkNEMUQxMkU3MTc4MgotOjEwQjRBMDAwNjhFRTZGODg5REI3OUZFQ0JCRkMwQkREMTgzQjcwNEJDMwotOjEwQjRCMDAwNjQ3NzY1MDE4MDQ3NTAyRkIzODZCNUU3QzUwN0RCMjE2OAotOjEwQjRDMDAwMTZGMTQ3MURENDhEOTk1Nzc4ODBFQTE2QTNBQ0RENUYzRAotOjEwQjREMDAwQUVEQUM1NTQ5OEFBOTk0MzlDOTEzQkI3RkJEMTIxOTExMAotOjEwQjRFMDAwRDk0NTA5OUNGNzcwNzkxMUM5NTkwRjVFNzlCQ0RDNDZDMgotOjEwQjRGMDAwNjlBNUZCNjYwM0YzOEI1OUJEMkQ3NjhBNDc5MzlENUE0OAotOjEwQjUwMDAwRjkyN0Q3NjhFNTlGRUFEMkNBM0I2RDk1NTZERUU5NkUwQQotOjEwQjUxMDAwQURCQ0NGNkRENUNBRDdFQUQxQ0FDRkI2NzE5NkU2RkUxQgotOjEwQjUyMDAwQjRGNjRBMEQzQzdERjMwMkNERkRGM0JEMEIzNTcwQ0U3NAotOjEwQjUzMDAwOEVBQjM0Rjc2Nzc0MkNEMzlDRTc3N0FGRDY5Q0FCNzY5MQotOjEwQjU0MDAwMzZENjBFMkVGNDM1OEZCMTMzMTFDNDA4RkRBQjdBNTZDMgotOjEwQjU1MDAwRURBMDcwRkZBRDFBM0NGRjZGRkQ2RjFGQTNGRkE3QzhFMgotOjEwQjU2MDAwRDczMURFQkQxNTNCNzQzN0I5RUI2NUQxM0NBRTlEOTk0MwotOjEwQjU3MDAwMjc5NEVCNTlCRkY2QjY5QzU4MTU0Mzc3OTVGQ0U2NTREMwotOjEwQjU4MDAwRjIxQjk0RkY5MUMzMTYwRURCRkRGNjdEMTRDRjBBOEVERAotOjEwQjU5MDAwMzhBQjg4QUVBMjgwN0IxRjg1RjM5MkExRjZBQTM4QkE5OQotOjEwQjVBMDAwRUYwMEQ5MzI4NThGOUNFOEZFRTVBNTAyRTgzNDdFODU2MAotOjEwQjVCMDAwRjA5NEIwM0NBRkYwQUM5M0UyRjA3MkQ5NzdERTM2MTY3RgotOjEwQjVDMDAwNkVDOUU5NEJDMkYzMjBBMTk0RTc4NTZBNDcxNEU4MjJDQgotOjEwQjVEMDAwRTQ1MkExRUMwMzI1RTkyOTYxRjlBQkYzMjNFQzA3QzBBMAotOjEwQjVFMDAwNDBGRDgwNjhGMkI2NTkyN0FBNzdFQzlCMjU1NjhGQjlBMwotOjEwQjVGMDAwNTg3REY2ODZFMDYyNzNBNTQ1MjY3RjA2QzVGN0RGMjVGMAotOjEwQjYwMDAwQkJERUNFQzRCODc2NEFCNENCQUM5RTEzMDI2REM0NTQzNAotOjEwQjYxMDAwOTAxOEEzQTRFNUE5QUY3NjUwMUY4N0VEMkNDRDJCRkY4MgotOjEwQjYyMDAwNzQ0NzZEQjUyNzk3OTE2RjA5OTRGMEI2OTlGRUY1Njc0OQotOjEwQjYzMDAwQkE4RTY0QTJGQzA3MDRDQkZBNDJGQ0Y2QUQ1OTI3MzM1QwotOjEwQjY0MDAwMjg3RjE5MjU5NDQ0MDFDRDRGMUM0N0U5RkNDQ0RDMjQwQwotOjEwQjY1MDAwMTlGOUMzNzgxQjEwNjUwRjg5QzI3M0FCQzBGQTkwOTNCOAotOjEwQjY2MDAwRjREOENDMDhGRkREQTg2Nzc5MEI5NEJFRUMxQTQ1NUVEMAotOjEwQjY3MDAwNkE1RkI2NTRDMTNGODA0RkFDQzI3ODdFNERGNzFCNEMxOQotOjEwQjY4MDAwMkU3NTI5QzNDQTFDQ0E2REI3RTBGQjM3NEMzNTE3NTA1RAotOjEwQjY5MDAwNUYwQThFNDIzQkVGRTdENTNFMkQ0REZBMjk3OTU1RURGNQotOjEwQjZBMDAwNkJDRjc2QkYyRTY1NDhEMzJGQzNDRUM0MDlFNzkxNjMxNQotOjEwQjZCMDAwRTc1RTYxQkVGOUZCMDM5QkEyNTkxRTFBRDg5NENFRTY0MQotOjEwQjZDMDAwOEJFMUY3NEZCMUY3QUY3MUJGQTNCMTkzRUI1QURGRDc1RgotOjEwQjZEMDAwRDhERkY1OUU4RjM0RTc4MUE0OTAzRTBERjkwRkVDNEEzOAotOjEwQjZFMDAwOUQ3NzM1Q0E2RkU0MDU2MzA5RjVBQkE4QjczODVCNzE4MAotOjEwQjZGMDAwRjhGREMwM0REM0U3MTBCRUZGQ0RFN0E3NENCRUZENkIwNAotOjEwQjcwMDAwRkQ2Q0VFQTZGMjc5NkNFRDExMDYwN0Q2MDZEODNBOTZENgotOjEwQjcxMDAwNEZCNUJGNTU1N0MzREYyMDlCRUFFNTkwMzBDOTNFRDFGNgotOjEwQjcyMDAwQkNFNjMxMUJFRjgzRkE2NzRGQTlBNDdDREM5RjZFRDA4NwotOjEwQjczMDAwRjEzNThCQzNBOUE1MjYwRUNGOUI0RjZCNTA2RkRFNDgwQQotOjEwQjc0MDAwRkQ2REJGMDAwRTAxRUQ2MUE5RTA3Q0VDN0FFNEJCM0EyRgotOjEwQjc1MDAwRDk5NTZCQTM3QTcyNzUyODRGODdGRUQwOTQxRkI4NTY3RgotOjEwQjc2MDAwNDA3REJFMUVFRkNBMjdGRTA1MkMwNjUzMTMxODlENTlCNwotOjEwQjc3MDAwRDQzNzBDODk5RTNDMDE2M0MxNEQ0Rjc2NTc1M0ZEM0YzMgotOjEwQjc4MDAwMzRDOTczOEEzMjc2QURBREFCOUFGQTgzMjEwM0Y3OEY1MQotOjEwQjc5MDAwNUI5RTdDODRGOUMzQjcxNkQ3NEM3QUU3MTM0MUYyMzEyQwotOjEwQjdBMDAwN0I3RTQ5RjA2RTY3RjYxNjMwMkM4Q0Y4QkI4MjNBQUY4MAotOjEwQjdCMDAwQTE3RTlCRkE5QjYwMTQ1RjY3REJGOERGNUYyQUM3QUM1MgotOjEwQjdDMDAwNEI2RDNDQUVERDQyNkIzMUU5RTVFRTJDRkE3QkNBRTgwRAotOjEwQjdEMDAwNjYyMzkwNUYyMDNFODc0OEY4N0FGODVDNzYwQUYyNDA0QwotOjEwQjdFMDAwNzUwRDU2NkZBQzVGMjg3OEQ1RThBM0Y4QTFDRTc1MTYxNQotOjEwQjdGMDAwREJBQ0VDQkQyNDFCOUZENzI0REQ2N0Y0QjZCMUZDRUVCNwotOjEwQjgwMDAwQ0ZBODQ2M0FEQkY1NThFRjUwREY3MDEwRDgxQzZEODQ5NgotOjEwQjgxMDAwRTY2MTExN0E1OTZDRTNGRDE3REMwOEMwQ0Y5M0I3RDEwQwotOjEwQjgyMDAwNzk0M0VGQzAzMThBMjdERjY3QkFBRTI0MzkwQzg4NzJCQQotOjEwQjgzMDAwMDlDNTkzODZEOEJEQUNERTZCQjZDOUVDM0JBNDk3RjFDNQotOjEwQjg0MDAwOEY3MUUxNEVEMkNGMkYzODBGNUM0NUZBNkQzMDA1NzhGRAotOjEwQjg1MDAwRERBQUNDMDNDRjI2Qjc5MUU1RkU4NzcyRDlGQ0NCOUUzQgotOjEwQjg2MDAwNDFGNEE5RjQyMkZEQ0RCNjg4Qjk5RDRBN0ZGODlEMUYwOQotOjEwQjg3MDAwRjYwQjc1QUVBNUMyODM1QjM2NjQ5MTlGQTE1RUY4QkNFMgotOjEwQjg4MDAwNTExMkFFNUIzOEMxRjcwRjJBRkEzRTk2RTJGNDEwRkU3MQotOjEwQjg5MDAwRDU2RTNFRjcwQkRCNERGQkNENDc0OUNGQkQ2NjE2Mjc3NgotOjEwQjhBMDAwQ0ZGNkZENTgzRTFCRjZGNDMyNzkyMDlGRDcxMjdGMTE1OAotOjEwQjhCMDAwN0NERTFCQzlFNzQ4Q0ZFMTg3NzJFNTlGQ0Y1RjMwOURGMwotOjEwQjhDMDAwRkYxRDI5QjhFRDlCMEMxOUJGNkZEOEZEQzYxMUIyQkI4NwotOjEwQjhEMDAwMDY3NTFFREZBNTlEMzMxODI3NjFGRjlBMzBEMTFDMUQwOAotOjEwQjhFMDAwQjM0RjQ0NUQ2NjU0QkY5RkFBRDM3RThGMDUzOUNEQTk1RgotOjEwQjhGMDAwQkJDOURGQTk3RTcxRjBCRjhCQTlGOUI4NEJFOTZCODQ5NgotOjEwQjkwMDAwQzBFQjJDMUYxMDNFRjI4N0Y1ODI4N0U1NDU3NThFRDE3RQotOjEwQjkxMDAwMjY2MERFMjNEREJBNUE1ODlFOTBDRTM1REJDOTlFQkIyOQotOjEwQjkyMDAwRDAwNkZERTQwNzNBNDczNDlCNUY4RkU5QTNCRjM1QjhFMwotOjEwQjkzMDAwNzY5MUZDRDZCQzUzOTk0QzdENzZFNzlCMEI5NDdFOEQxQgotOjEwQjk0MDAwRTdBOTYyQzUyRThCMDkzRkQxOUYxQkM3RUNCNTQ4QTE2MwotOjEwQjk1MDAwQUZDNDg0RjU1MDI2ODU3QzhGQzRFNzE1Q0FGQzYzRDMzOQotOjEwQjk2MDAwRUI5QTNFRUZCRjMyNTk2ODUzMDAxRTAwMDAwMDAwMDAwMgotOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAxNQotOjEwQjk4MDAwMDBGRkZCNTFDRkMwRjAwMzhBQzUxNTE5MTg0NEQ0MTkyNAotOjEwQjk5MDAwMTg0QzM0MTgxODU2NjgyMEM0Njk4OUI1QjgyOUQzOUY0MwotOjEwQjlBMDAwQzlDMkMwOTAwREM0Qjk0MDlDMEZDNDdDNEMwQzBDRkNBNwotOjEwQjlCMDAwNENDNEVCMTcxNDQ1QjBGNTA0MTkxODg0ODBGQzZGMDJEMQotOjEwQjlDMDAwMEMwQ0Q3ODUxODE4QkU4QjMwMzAwODAzRjkyRTQwRjFDNwotOjEwQjlEMDAwMDQyMENFMDE2MjZGQTA1ODBCOTA1RTA0QzRERDQwMkNBMQotOjEwQjlFMDAwMjI4QURGN0M1MTAyRjI2Qjg1NTFGOTM3RDFGODdCODREMgotOjEwQjlGMDAwRjBFQjU3MTBDMTJGQUY0NzQwMUUxQjE2RDEyMjNGM0UyMAotOjEwQkEwMDAwMjIyOUQwM0IxMDU4NUYwMTk1NUYyNkM3QzBEMDI3MEY3MQotOjEwQkExMDAwOEM3RkE4QjgwMTkyRkM0QjIwQkI1QzBFQzJGNjk2NjBFRQotOjEwQkEyMDAwNjAyODA2RjIwRDE1QjA5QkVCMDM5NDJGMDFDQTdEODVBQgotOjEwQkEzMDAwQ0EwMzAwQ0NDQ0JBOEM2ODAzMDAwMDAwMDAwMDAwMDBGMAotOjEwQkE0MDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZFNTdEMEI3ODE0NDUwNwotOjEwQkE1MDAwQjY3MEY1NzRGN0NDMjQ5OTk5NEMxMkYyRTAzRDQ5MDA4OAotOjEwQkE2MDAwMTEwMzBFMjE0NEMwNzA5OTI0QzBBMjQ2MEQwMjFBMTQ3RAotOjEwQkE3MDAwNzUwMjkyODQ5MDk3ODg3RUVDQUVGRTMzMDE4OUEwQTg2RgotOjEwQkE4MDAwRjFCOUFDMTdERDQxNjEzN0IyRTgwNjBDMTgzNUUwNjA1QQotOjEwQkE5MDAwMDBCMzJFQkFDMTQ1QzBFNzI2ODBCQzM2MjQ0M0YwQjlCNgotOjEwQkFBMDAwQ0I1RTZGOUQ1M0Q1MzNERDlEMDlDNEM3REU3RkVGRkZBRAotOjEwQkFCMDAwOEY5RjVGQTVCQUFBRUI3MURFRTdENEU5NDIzMjhGMjdFOAotOjEwQkFDMDAwNjQwQTIxREZDMThGOTY5RjhCODQ5MEY4NTA1OTZGMjBCNAotOjEwQkFEMDAwMkU5MjQxODhENzY2RjQ2RDRDQTZDRjg4MjM3QUU2NjgwQgotOjEwQkFFMDAwNUE5ODFERDEzNzU4NDNFRkU5Q0JENTlFQTQzNDY5MTgzNQotOjEwQkFGMDAwMjEwRjc5MUM1ODEyRTIyMzg0NEVCNTVBMjAwNUY1MTYwMQotOjEwQkIwMDAwQTgzQjkzRTA3RDNBM0UyMUZERThGODBGNDZFMkY4MzA4RAotOjEwQkIxMDAwMkQ5OTE4MUE2NzEwMzFFMDdCNTNBREY5ODlCMDFFNDI5OAotOjEwQkIyMDAwNkE0N0U2QzNGQzE2M0IyMUZEN0I5RjlGOEU4OEVCQTdFRgotOjEwQkIzMDAwRUYwREMxRjcyNEZBOUVCNUVGRUYyOTY1NTcwRUZEMTNGRgotOjEwQkI0MDAwRjZERjZERjY2RDE0MDhGMUVGRkNDNzcxNThFRjk5ODZCQQotOjEwQkI1MDAwMzkwRTEzNUQ2Rjc2QjdEOTNGMDVFQUJFNkM5Rjg5QjY4MwotOjEwQkI2MDAwRTc2RUZCQzAyNkQxRkVFNURCNDQwOURBMEQzQjIzRjA4RQotOjEwQkI3MDAwRkRDRTc1ODIwRkVBOTVBNkQ2NDdBRUE0RjVDMDM2OTFFNAotOjEwQkI4MDAwM0MwRkQzRjgyRDA2OTI0MEM4NzEzMzYxM0Y4NzE1RUIwNwotOjEwQkI5MDAwNDUxMUFDNUFCRTdFRDc2RDMwNUY0OUEzODk0NEQwRjdCQQotOjEwQkJBMDAwOEYzNzg4MkVBODJGRDkyOEY4MDg5REFGRkNCNTA3OENCMQotOjEwQkJCMDAwMDNFODc4QzUzRUExM0VDMjQxRUIxQjFGMzMzQUU4M0U4NQotOjEwQkJDMDAwOTdFRkZDRDhENjQ2RTE3Q0RBNjMyNjBFMjNFRUEzQTREOQotOjEwQkJEMDAwM0U4RDkwNTJERjk2RTkwM0U4RkJBNTlCMDUyNzgwQkVDQQotOjEwQkJFMDAwNzREREQ5NEU1ODVGNjk4MzNDNUNBNEUzMkRBRThCMjI5MwotOjEwQkJGMDAwOEU5MTZDRUVFRjA4Q0NENzdDMTRFN0RCMjYwRjgzRjkyRgotOjEwQkMwMDAwNEFDRURGNjUwNDI0RTU2RTkzOTEyRUNBRTkzQTYwREZERgotOjEwQkMxMDAwQ0FCQ0E3M0Q2QjcxM0UwNTlFRTUyRkQyRjk2OEJGOEE2RAotOjEwQkMyMDAwOTcwNTI3NkNCMUMyNDBEQ0IwOEVDRUQ3MjIwQTVFQjAzOQotOjEwQkMzMDAwQzBGRUFBOEQyM0FDRUE3RDE0NkU4NzdEOTRGQUQ2MUJENAotOjEwQkM0MDAwQTc1QjYwN0RFQjhENDU2OUExRjExNkQ3RkRBNzc2N0REOQotOjEwQkM1MDAwNkI1MzEzREQ2OUJERTNGM0I0ODc4Mjc0NDRBODVFNEE3NQotOjEwQkM2MDAwODgwQkU5NEZGMjE5ODE4RTk1RTdFNzg1MThDNEY3RTI1MgotOjEwQkM3MDAwM0E5MTM4Q0NBMUYxMTUzQUYwN0VDMEU5NzQ4Nzk1RjE3QwotOjEwQkM4MDAwMDFDN0RCMTIzQkUwMkM4NEI3NkUzQkM3QTMxNEM4NTQzQQotOjEwQkM5MDAwOEZBRjk0OEYwMDNFRTg3QTZBM0Q3NjJDMUZGNzI0NjFCRgotOjEwQkNBMDAwRjlBNEM3ODE3MDdCREEzMzEyQ0JCNTFFMjczRTdGQzY1RAotOjEwQkNCMDAwMzMwMUNCNzUxRTE3OTZDRjc5NjY2MEU5RjNFNDYzQkY1NQotOjEwQkNDMDAwRTczRDA1NTg2RUYwQjhGMUY5NkYzRDI1NThENjc5QUFEMQotOjEwQkNEMDAwRjBGOTI2Q0YzMjJDMzc3QkJDRjhGQzY1Q0YyQTJDRUI1MQotOjEwQkNFMDAwM0RCNTU4NkUwNTdDRDFCMkMxRTNDMzdFREIzRDc1NThDRQotOjEwQkNGMDAwMzY3QUVBRjFGOUVCOUU0NjJDRDc3MDM4REFCMjQ4QjZCQwotOjEwQkQwMDAwNDRFMTYwNzMxMTNCNDUzQjg5Q0Q3MzY1Q0JCNDFFOUIwOQotOjEwQkQxMDAwQ0ZFQTA5RjNCQ0Q5NDY1QTRGNzBEMzNBODVDQjgwMzI2QgotOjEwQkQyMDAwN0ZCNjg5RDYwNzU0QjFGNjIxRjc5MjFDMzNBRDBGRjFENwotOjEwQkQzMDAwQjJGNjk0MzVBRTlDMDg1QTRGQTk2NUVEMjNENjc5NzNCNwotOjEwQkQ0MDAwMjI2OTdEODQ4RkI1OEZEQUVDQ0Y4OUEyRjU1MUY1QUNFRAotOjEwQkQ1MDAwN0Q0QzEzQzlCNUQwRkExODNGQUJBN0VGNzNFNTVBNjkwQwotOjEwQkQ2MDAwM0RCRDk1RDUzMzNGRjFFNkRBNjgzREIzOERCRDNGQTlDMgotOjEwQkQ3MDAwQzMyNzNBMkMzREYxQjA1NTc2MkMyMDE0NTc0RERFQjkyRgotOjEwQkQ4MDAwMkU4OUNBOUJBRDQ2Qzc1REM0NDlDODdCREVGOTJFODlBMgotOjEwQkQ5MDAwQ0E4NzA2RDk4NUVENkRERUM1QUM2RTc0NjE3QkI3Nzc1OQotOjEwQkRBMDAwMjlGNkRGMkVCQkIxNURBQUJFMEZEQkI3MUJEREQ4OUUyNwotOjEwQkRCMDAwNTA1RDgzRUQ4REIyMTdEQjQ3NTYzRjhBRUQ4RDQ2MkZFMAotOjEwQkRDMDAwQjY0RkFBNUU4QkY1RDc2NTFGQjZFNzU1QUZDN0ZFQUY3NgotOjEwQkREMDAwMUI3REQ4RkVGOEZEOUI1QzUzNjlGRDA1QzFCRDFERTRDQwotOjEwQkRFMDAwREUwQUMxNUQ0MjUyODE5RUVBOTM0MEVFRDU3MEY5RjlCOAotOjEwQkRGMDAwMUMxMDFENkRBRkU5NkY0NDNFRENGQTZFRTYwQkMwQkY1MAotOjEwQkUwMDAwRjhFQjA3RjVBMkRGM0U5ODhDRTNCQzg5RTNDODc0MUMwRAotOjEwQkUxMDAwRjFFMkUzQTRCRjM3NDEzMzRFRkE3QjI1Q0EzODJEMzgwRgotOjEwQkUyMDAwNEU0NERGQzZEOUZBREUyNEVEN0FERTJCNTVDNkQ5MEY5MwotOjEwQkUzMDAwRkNCNEMyREFCNzdEQTVGRjM5NEJCQjlFM0Y5NzI5RTMxRgotOjEwQkU0MDAwN0M4NEVCODlFOURCN0ExQTNFRDBDMkE3RTE4MzIwN0NBRgotOjEwQkU1MDAwOEVFMjM4RjE3RDVCNEZDNjQxMkQ3QzMyMEUwNkUxRDM3OAotOjEwQkU2MDAwODFFM0Y0RUZEQjM4MEQwN0I1RjA2OTM4MTg4NENGOTcxQwotOjEwQkU3MDAwMDg5RkMxN0REQjU3QzYyMTJEN0MzMjBFMDVFMUYzNUZBMwotOjEwQkU4MDAwQjg5RUU0QkU4REIzRkQ1MzJEN0NCNjdGMUE4NDhGNDlENgotOjEwQkU5MDAwODBGNTBDRUZEQkJFMzIzRkQzQzIyN0YzQjMyMDdDRUMzRQotOjEwQkVBMDAwMzhDRUE1N0QxQjY3RkI2NzVBRjg2Q0ZGMkMwODlGRkVGOAotOjEwQkVCMDAwMzhDRUU4QkVFRDJCRjNBRjVBRjg2NEZFMzUwODlGMTQ3OAotOjEwQkVDMDAwMDFFMDMzQjY2RkVCNjlGQzVDMEI5RkM2Q0Y4M0YwQjkyMgotOjEwQkVEMDAwMENDNzE5REZCN0Y1NEMzOEFFODVDRjg0RTM0MUY4NjQ2MQotOjEwQkVFMDAwRTBCRTI2RjY2RDlDQzZFMzVBRjgzNDFFMEZDMjY3MzJEOAotOjEwQkVGMDAwOEUzM0I5NkZGQjlBNzA0MjBCOUYwOTI3ODJGMDk5OEU5RgotOjEwQkYwMDAwRTM2NEJCRUI5ODUxNDZDN0IxRjYzRUNFRUI2N0I0RjBBNQotOjEwQkYxMDAwNzlGRDRDMTAzRUQ3RTMzOEQzRTgzOEE5MTcxRjY3NTI5NAotOjEwQkYyMDAwQTcxNjNFOTMzQTgzRjAyOUMwNzFBRUVBREIzOEFGNzdBQgotOjEwQkYzMDAwNkFFMUYzN0E2NzEwM0U4NTM4Q0VCNTdEREJEN0E0MkU1MwotOjEwQkY0MDAwMkQ3QzI2NzUzMUY4OEMzQjUwOTU2QkEzRUQ1NDE3M0EzOAotOjEwQkY1MDAwNDVGQUNBOTUxRDJFOTc0MEVCQTI5REQ1NDVCQjkzODAwRgotOjEwQkY2MDAwNUQyMjJBRjYwNjY5NzU4OUY0N0RDQkU2OThGNDA3ODk4NwotOjEwQkY3MDAwREFFRUM4QjkxM0U4Qzc0QUFEMzFCNUREMTEzRDIxNTIzQgotOjEwQkY4MDAwNjNFN0M0Qjg2MjM1RjVCODE5MDMzNEZERTNGMzUzMzRGRAotOjEwQkY5MDAwRUQ4OTA1QTMzNEVERkREREU5OUFGQUMwOTI0OTlBRkVEOAotOjEwQkZBMDAwODNBQjcyMzRGNUExQ0JBRUQ2RjQ0RkY2REVBMEE5QTdEMQotOjEwQkZCMDAwQUVCQTU5RDM3Rjc4RUQ3QzRERkIyNTZCNEIzNUVEOTdCMQotOjEwQkZDMDAwRkE5NjY4RUE5N0Q1RkQ0MkQzN0Y3NEZENzI0REZCRTU4MgotOjEwQkZEMDAwOEQwRjZBREFDN0ZBMUZEN0Q0QzdCNTNDQTNFOTNGQkVCNQotOjEwQkZFMDAwRjU3OTRERkIxNTg3Mzc2OURBMjdCNjZERDVENEFGM0NBNwotOjEwQkZGMDAwRjlCQUNFQ0VCM0Q4OEY1RkM2RUIyMkQwM0Q2MTc2N0Y0MwotOjEwQzAwMDAwN0ZFNkY3RjhBRDQ2QUMxQjA3NThEMDhFREY2NTJENzI4MgotOjEwQzAxMDAwMUNBM0Y4MzVCRUI1QzBEMThGRTIxNzcwMEE3RTQ1RjY3NQotOjEwQzAyMDAwODA5MjRCREFFOEYzN0IyNkI5MkZCMUQzRTdGNzE4REQxRQotOjEwQzAzMDAwOTdEQkMzRDhBNzk0MUUwNDkyMDRBNUMzMDBBNUJFRkQzOAotOjEwQzA0MDAwMDE5OUQxNjNDRUMwRjMyM0RBRTlGQjk1ODZDMDg4MTg0NQotOjEwQzA1MDAwNUFDRjEyQjMxQjgxN0U3NzBBQ0MyRjhBMTQ0OTE1RjQ2QwotOjEwQzA2MDAwOEIzNDExRjQwQjFFNDhDRTdDQzFBQkEyRDc1NTgzMjk2QgotOjEwQzA3MDAwMUYwQUExNzE1N0M5RUUyNEIwMzNERUFBNkVGNzgyMURFNAotOjEwQzA4MDAwNTIzMzk4RUU2QjAwMjFDRDQyQkJERjRCRkRCNDA3MDY2NwotOjEwQzA5MDAwMTcyNUI5RTk3ODI2MjNCNUQzRDVGMzFCRTlGQzY5MzgxMAotOjEwQzBBMDAwN0YwQkQwRUI3QjMwN0Y3Q0NGRjk0RDI5MTMzNEYzOUI5MgotOjEwQzBCMDAwODc5NDY4RTYzNzFCRTlGQzc2NDJERUFGM0VDNUU3QTcwQQotOjEwQzBDMDAwNDg5ODQ0Qzg1Rjg0NTMzOEJGNjk0ODA5Q0VGRjgwOTFCRgotOjEwQzBEMDAwRkEyQkVBRjkyMzgzRjMxRjg2RkQ3RkQ2REJGRTUzMjY3NgotOjEwQzBFMDAwNjlGNzNGQTQ1NEJCN0YyM0RCRkY5MUVBQjM3Q0ZFNDg5MgotOjEwQzBGMDAwRENGRjUxRTEyQ0RCRkY5MDUyQjY3RjEzMUIzNzM4QkZCQQotOjEwQzEwMDAwMkQwOEZGOTMzMDdGNjcyRkYzOUI1MkIzQjRGQjFGNUE2OAotOjEwQzExMDAwQTZEREJGODlDRERGNURGRDJEOUZERjgyRjM5RjEzQkVCRQotOjEwQzEyMDAwNjVGQjFGNUE4NkYzMUI0RDZFMjdEMDhGNzE2MDY0OTU5NwotOjEwQzEzMDAwOEZDRTRGMUQ2MTA3NDkwNDcyQTFGMzQwMzkzMjE2RkRCRAotOjEwQzE0MDAwRTQ5Nzg0MTQ1Q0M3M0Q5MThDREVCRThBQTRGNDg2RjIyOQotOjEwQzE1MDAwQzZDQkZDNTgxRjk1NkM5OUQ0RUZFMkI0QkU3ODczQjY4OQotOjEwQzE2MDAwMTFFNDEyQjY1MzdGNjUyMTVGRUExRDhEMjJEMjM3NzkyMwotOjEwQzE3MDAwRDJFNDFCNEVEN0RCRDkyODdBQTE3RUM3OTM5MzdEMjBDQQotOjEwQzE4MDAwRkYyQTRERTRGNjdDNzg0RjIyN0U3OEZFRjk1M0EzOUY3OAotOjEwQzE5MDAwNTdFRjRCNUYyRUFDOTU4RkI3QTlGODJERTg0N0U1OTA4OAotOjEwQzFBMDAwOTE1NTE2OThEN0FFQTkxRkExN0UxMEExRkVDNTI3RDQyMAotOjEwQzFCMDAwQ0YyMDk0MjQ4RkNBNkNCRUNGQThCRjA0RjUzNkVBMkZENwotOjEwQzFDMDAwNDEzQjIxRDVCODVGRTI3NTdEMzA4Q0FFM0Y5RjI4M0Y2MwotOjEwQzFEMDAwMTdFRUYzMjY2NDI5M0E5RUM0RjhGN0M4MUFDMTA3Rjg4NwotOjEwQzFFMDAwQjg3RDU5MTQwNTdFNjgzRDg1REUzODREOURFRTBGRkIwOAotOjEwQzFGMDAwMDdBRTEyN0NDRjBCMzg4NjFCRTAzMzkzOEY0NzYwQkRCMAotOjEwQzIwMDAwQjQ1RTYwNjdFRjFDQTJFOEVGNEY1MUIwNjBENTQwOEE4MgotOjEwQzIxMDAwOEJEMDM4QjM4ODRCNEVBNEVGQ0Y1OTVBMjg0M0U4QTJBRAotOjEwQzIyMDAwNTUxMDA2MkYwMUZBNTkyMDUzOTcxMUUwRTc4RDI3NjkyMQotOjEwQzIzMDAwOUMzOEU4N0E2RkI2QjNGMTY3QkFFNDYzNkRBQUY1MTQ3NwotOjEwQzI0MDAwQzg2NjU3M0U1RDRGNDFBMTg4RUI5RjM1NDNEQkZFRDE2OQotOjEwQzI1MDAwQ0UyODk3NjEwQzJENTczRDgxRjNDQ0M5RDdCNkRGNTQ1QQotOjEwQzI2MDAwQTBBRENGNzU2QkVCNTRFRkM5QTBGNzZFMjlEMTNGQTdGNgotOjEwQzI3MDAwNjBBMUZCOUMxNzg0MkI1RDI4NURFN0FEMUMwRUI3NTZCMwotOjEwQzI4MDAwQzk1RTBENUVDMTZENTVEQTIxQTBFMDI2QjgyRjdDNUYzNgotOjEwQzI5MDAwRUNEOUZGRjY2NURBN0FBMTU3NUI1RkIwNEEzNzNFQTc2MwotOjEwQzJBMDAwOUJFMzFDRkY0NzgwM0U2ODc5MDJFODgzQzJGMzE4QTcyRQotOjEwQzJCMDAwOEY5MDVDRDVEMkM3OERDMTZEMzBGQTUwRjY3MTVDNjIzQgotOjEwQzJDMDAwMjgzOEJFOEVEMUM3QzJEQUE4RjBGNDUwMThBNDA3OTc1OAotOjEwQzJEMDAwOUFCRTE0N0FCODhERDNDM0E3OUMxRThBRDc2QUU5NkExRQotOjEwQzJFMDAwMkVGMUFENENBMkVGREZCMjY2MTdFMkU5QTA1MEM4RTgyQwotOjEwQzJGMDAwRTE5NzBBM0RCNDY5RThDMUNERTk0MThGQkZEQjM4M0QyNAotOjEwQzMwMDAwRENGNjczNDYwRjdBN0NCNjcxN0E2ODVCN0I0RTI2MjkyMQotOjEwQzMxMDAwM0RGMTRBRjFBMEE5NTMzQ0U4RjA2RTM3MDIzRDUwN0M1NAotOjEwQzMyMDAwODRBNTg3RjlDMTdERDM4REQzRkEwMkRFRDYwMzVGOUM0NQotOjEwQzMzMDAwMUVCMDNEMDVDMDRFMTA0RUY4N0U2QUNGRkU1NDRFNjhDQQotOjEwQzM0MDAwRUFDNTZCQzNFM0JGQjIzMTNCRUU5ODZBNURFNUY1NTdEMgotOjEwQzM1MDAwQzUxRDUzRjU1QjVDMzc1MzUzNUZFNDlCQUJFOTVGQkM5MgotOjEwQzM2MDAwQjY1MEQzQkVCMDc2OTFBNjdEQzFBQTNCMzVGNTQyRUY1QgotOjEwQzM3MDAwQ0YzNUZENkY1RjU2QUQ2OUJGQjU2QUI1QTZGRDk2OTIyNAotOjEwQzM4MDAwQzczNEY1QjlFRTVGNkJGQURGNTRCMDVFRDMzRTI3RkZEQQotOjEwQzM5MDAwNDU0REZCQUMxOTVCMzRGNTk5QUVENzM0RkQwRDNCMkYwMQotOjEwQzNBMDAwQkQxRUU4MzFFQkEwNDhDMEZFMzhFNjcxMjBERDFGRjc2NgotOjEwQzNCMDAwOENDNEYyQTRDNzg5N0M3MURBMzMwMUNCN0Q4RENENEY1QgotOjEwQzNDMDAwNUM0OUJCN0MxOTI4ODgyNjRDN0YxNjkxMTg0MkY2MkNCNAotOjEwQzNEMDAwNzc1N0FGQ0EwMjdENEU1MEVGRkU3MTc5NTFCNTc3MTA5NQotOjEwQzNFMDAwOTU1MzA2MDdDMjM5NkZBRDkxRjhDNzExMjI4MDUyRTIwQQotOjEwQzNGMDAwRjMwN0M0NTA3QjU2MUI2RDhGRUJCRDNENkZBRDE0QjY3QwotOjEwQzQwMDAwM0RBQjREMEEzQjZFRTVFMzg1NDNFRDYxRTIzMzIxN0VCMgotOjEwQzQxMDAwMjYwM0MxM0VFQUUyRjZCOUJFQkQ0QzIwRjlFQUU3ODQ0NAotOjEwQzQyMDAwMkM0N0ZFOEYzMTMwRkQ1QzY2NjQ3MkEyNkM2QkZGMUM4MgotOjEwQzQzMDAwNjI4M0JBN0Y0NEQ1ODVFNkFCQTdDQzk1MDhGNDkxQUE3MAotOjEwQzQ0MDAwRTFFM0UyQjU5NzY5RTQzQzgxRTg2RDNDRDBEOTM4Q0RCMQotOjEwQzQ1MDAwRjNDNTc1NTc2QURFRUJEODI1RTJCQTJCNDA4NjUwN0RDRQotOjEwQzQ2MDAwM0Q4Q0U0MDcwQ0EwOTdGRENENDM2NjhEODY3NUJBQ0U1MgotOjEwQzQ3MDAwMUE0MDVFMzVDNkEzRkREOEUxOTkxMTc3NEMwMjNDRTYxRgotOjEwQzQ4MDAwNjM3OUQyNTM4MEU1NzE4RjFCQ0I2MzlFMTIyQzhGNzgxQQotOjEwQzQ5MDAwQUFCMDZDRjMyQ0MzRjIzMzhGMTdDQjRGM0NBQkIwRkM3QwotOjEwQzRBMDAwQzg1MzhCRTU2MUNGNUEyQzBGN0E3QzU4MUVGMEQ0NjFBQgotOjEwQzRCMDAwRjlCRUE3MUVDQjU2NEYyMzk2OUQxRTE3OTYwQUJGMjk3RAotOjEwQzRDMDAwRjBEMEQzREQ0OUFFQTc0RjAzRkQ1RDgwQ0VFMkM0MDdCNwotOjEwQzREMDAwQUE1NzBEMEFEMTU5RTI4QTg3QUJCRDU5QTE3MUYzRDY4QgotOjEwQzRFMDAwOUEzODlEMjQ2OEU4NjEwOEY4NjRFMzgxNUU0QzlDNUU5QwotOjEwQzRGMDAwQzJCN0U3QUQ5NTJGRDg5RUQ1MjY4NzFEQkZGMkY5N0YyRAotOjEwQzUwMDAwMERCRENERjk5MUY0MTZBMkE3ODEzQTdBNEFCRDE4M0QyNgotOjEwQzUxMDAwNEQxMkM3ODdFODY5OEVDMUNFRjQxRkE3QTc4NzYwMUY5OQotOjEwQzUyMDAwNjFGQzhGNjIzMEVBQzZBQkVDM0E1NzE0OEI2N0YzNzM0OQotOjEwQzUzMDAwMDc2QUQxQjI3ODM2OUY3QjA1MURBRTE1RUQzRkRGNDgwNwotOjEwQzU0MDAwQzA3M0Y3QzhCRjhGODA3ODdERjc2MUFBMjg5MzdCREYxRgotOjEwQzU1MDAwOUY5RTVFN0E4N0JCMEJGREEwMjIxRjU1QTJFMzdBQjY5MQotOjEwQzU2MDAwNDc0NDMyQjg0NjE4QzgwQzkyNEVDOEVBRTFCRjc1Q0VBRgotOjEwQzU3MDAwNEZDM0JBNDQ2MkUxN0Q5RjczNjY5OEYzMjgwMjY3NEYwOAotOjEwQzU4MDAwODkxNzg3RUIwQUVCNTc2MzYwQkNFM0NGRkMyMzEzQ0EyMAotOjEwQzU5MDAwMzk4NjE0RTZERjM0OEI2OERGMTNGRjBCNEU4MDZGNTA1MwotOjEwQzVBMDAwMUY5OTlDNDkxMDA3MEYwQzM3REFEMTNFRjA1OUI0RjBBRgotOjEwQzVCMDAwRjNEMjdBNjYwODdFQUIyOThDNUE1MURGRDcyNjIxRkM0QwotOjEwQzVDMDAwODY3RDM1QTI3RjFGRTA3NzMxMzk3RjMxNzhDRUY3MEQzOAotOjEwQzVEMDAwRjg5N0MwRjM2MkYyRjE2MjcyOTFCODFDMkYzN0QyRkQ2NgotOjEwQzVFMDAwNzdFRDFDOURGRUEwMDNFNEUwODVFMUFEOUM1RkU5RDdGQgotOjEwQzVGMDAwRjNCQzI4N0QyRjNBRUU0QTUwRThCODc1MDhBMUYzODhCRAotOjEwQzYwMDAwQTIxREM3RUY2RUI4ODRDOTJGQzVFRURCNjZGMkY1MDUzMwotOjEwQzYxMDAwQUY2NzkyQjVFMzNEQzVGOTRGMTlBRkJCRTUwNTFCRjgxMAotOjEwQzYyMDAwNUI0QjkyMENGNjYzNjFGMEEwOTRFNUY1Qzk3NjhCREE2QQotOjEwQzYzMDAwRkU2Q0Q0RDZCQjZCODUxOUY1NjgyNzNBQTI2NzhGMDZDNgotOjEwQzY0MDAwM0Q2MUI3MUYxQjA2NzIzQjA5NEI2NTlDMjU0OTQ2RkJBNAotOjEwQzY1MDAwMzEyQUY3NEVEN0E1NDYzMzNGQ0ZDN0U0QzFFNjE4OTQzOQotOjEwQzY2MDAwMTdBNzNENjZFQ0ZGNTNBRkE3Qjc3MTk0RjUxMEQyNDAwMgotOjEwQzY3MDAwOEU5QTQxMUVEM0I2RDRERUZCRjc0QUNGRDIxNzQ2M0M4MgotOjEwQzY4MDAwRjc2RDkyQkYwMkZCRDA0Q0ZGRkYwRUZDMEQyMjYxNURFNwotOjEwQzY5MDAwMTlCN0IyNUVGNDlBMkU4N0U3OUIzNUYzRDFGNzFDQ0ExRgotOjEwQzZBMDAwMTlFQjc3MjkxN0UyMUI4OTFDNTdFODk2RUE4QjYzNUMyNAotOjEwQzZCMDAwOUYyQ0FFOEJCMDZCRURDRjE4NERCREIyQjFCRjVENjM5QgotOjEwQzZDMDAwOEZDMjFGNTRGRTkyMkE0MTAyRkEyOUUzRTREMzI1NTk2RQotOjEwQzZEMDAwNTYwOTc0N0Q2RjQyOTAxMEU4NTY2MEZEQ0FDRDZENDZENAotOjEwQzZFMDAwQjcwM0NFOTUxOURFN0E1QjFGQzVERjRDODk5MjdDODkzMgotOjEwQzZGMDAwQjkxNkNGNjE0QkVBMkY5RDBBN0FFNjRDQzM4QTA0ODhBQgotOjEwQzcwMDAwMUIyQzE2QkJFRkM5MEZGM0JFMkMzMTc5QkZDODI3MDcwRQotOjEwQzcxMDAwQjRGNjNEQTcwRjQyQzc1NTlFNjM1Qzk0NTg4RUFCRUFCMgotOjEwQzcyMDAwMUQwNjE2OEZEMThGOUIwMEUzQzY1RjFDM0UxNTlCRjczRAotOjEwQzczMDAwNEYwNzNCNDEwRkE3OEFDNkIzNDYzN0NBNDVGQTVGNjYyMwotOjEwQzc0MDAwMDg0RTBBRkNERTE0RjMxMzI0M0E3RTY5NUQzQkM2MkRDNQotOjEwQzc1MDAwNEVDQURFMTFCRkJDODBCQ0VDQjkzRjRCRDJGMTI4RDUyQwotOjEwQzc2MDAwQkVCQ0E0MTVFNjk5M0Y4MTRGNDQxQzM3N0Q0Q0U1RjhDQgotOjEwQzc3MDAwQTkzRkM5MDRFNDEwMzk0RjdCNjU2MjQ4ODZGQjNCMDYzQwotOjEwQzc4MDAwNjJDODBDRjkzQkYzMUIxNkU3MDFCQzRGODFCRjQ3RTVCQwotOjEwQzc5MDAwRTYxRDI0REY4Njc4MjBCNTk5RTBERjlDMjE4NjE5MDAwQwotOjEwQzdBMDAwQTczM0U0N0REQjM4MTUxRTcyMjUyMzg3MzM5NTgyOTRFOQotOjEwQzdCMDAwMUU0Q0MxRjFEREZEQzFFRjMyMTVENEI0OEE2M0UwQjk3RQotOjEwQzdDMDAwQTRGODNGQzI3NzE4NDc3MjBCOThCNzUwQzA5RTdCODk3OAotOjEwQzdEMDAwQjkxQUU4OTdGQTUxMUEzRjhERkE1MTlBM0FGNUEzMzRFQgotOjEwQzdFMDAwRjUyMjcyNDMwMkU0MjUxNDNEMjkxMzlGODA3MEQyQjREMAotOjEwQzdGMDAwOEY5MkVDODhDNzYyNTI1NTAzRjZEMUFGNzlGQzZEQkVCQgotOjEwQzgwMDAwOUQ0ODAzRTkzRUNCNUY3RDM2QjM5MEVFRTc2QTg5QzU2QwotOjEwQzgxMDAwRkQ5NDczRjU0NUIxMEMwRUE1MjUzRUEzQ0JEMjczN0ZENQotOjEwQzgyMDAwNDcxQkM2REQ0ODI1M0Y4Q0M3Q0VDRjZGMzY2MjFFMDUzRAotOjEwQzgzMDAwQjQ0QTk5RENGNDQ5RTk3REZGODkwREEyMkJDMjA2RkRCQgotOjEwQzg0MDAwRTg3MzY1QkRDOURGN0ZGRkZBRkQxMkYyMzhFRUEzQjRDRAotOjEwQzg1MDAwNkUyNjAxRkFFQjkxMjdDMEY3MjNENzA5MkU1RjE4N0VDOQotOjEwQzg2MDAwMkFFNDc0QUZFOEE3M0IwMTdFRTM0M0YxQUNGQjc0RjUyNwotOjEwQzg3MDAwRDUxQ0JFNEFGRDI5NURGQjBGOTYyRkZEODg0NkJFQkMyOAotOjEwQzg4MDAwMjlCQUVGOTNDNjMzNzkwMkYwMTdBNDAwRjJENzBGMUUyRQotOjEwQzg5MDAwM0ZBOUM3RjhBQjgxMUY3RkIyRjEwNzY5Rjk5RThFRkZGMAotOjEwQzhBMDAwRDQ0RkJBRkU2MTNERDZCRjNFRENGQUNCNUY3RDY5QkI5QgotOjEwQzhCMDAwOTdFQTk3RDIzRjNDNjUyMzk0REY0RTQ5QjUwOTRFOEFFQgotOjEwQzhDMDAwRjdCMjhEMkI2RDJFOTAzQjkyRDcwNjdDNzFDQTI3Q0U4NgotOjEwQzhEMDAwMDg0NzBGODdCODdDQTUwNjg4NDU4MDc4MkJGQzQ5Qzc5OAotOjEwQzhFMDAwM0ZCREU5QTFFQkMwOUVGODZBQTM2Q0M3Mzg2QTlEQzkzOQotOjEwQzhGMDAwNkZBMkY0NUNEMUIwMjg4RjhDQzE3QTNCQUIzRjcwMTYyRAotOjEwQzkwMDAwRThCRkIyNTEzRUEyQTZEM0QyREYzRDk1MDA3OTM1OTQ1RgotOjEwQzkxMDAwNTIwNjFBOTJBMEY0QTM3RjUyQjFFMUYzRTk2MDZGNTQ3QQotOjEwQzkyMDAwOTIwMEYyQUJGRTNEOThGRjlCNThENDg3ODVDNkU4OUVFNwotOjEwQzkzMDAwRUQxODk4NDk4MEY3RDlBRkIyRTFBMUIzQTIwREZFNkExNAotOjEwQzk0MDAwQzMzODkwQkU3RjA5RjczNzVBMjQ2QjNGM0MyN0I5ODIyMgotOjEwQzk1MDAwNUMwMUYyNTQ4MTA3RjEzMTdGNjNDNThCQkYxQUQzNEU1RQotOjEwQzk2MDAwRDdEM0IxRTE0RjM2NDEwNTI3QzU0RkVBQUU1RkYwOUIwMwotOjEwQzk3MDAwRDcxREJEQ0JFRjRFQ0E4NzZBQkI1NkQxNEY4RTQ2RUU1MAotOjEwQzk4MDAwMjczNUIxQjI0Q0Y2REJBRUE0RjJBNDZDQkRFQ0Y0RDIwOAotOjEwQzk5MDAwQzc2NTJGQkRGMERCNjcyMDdFRkRBMUM5Mzk5QzhFQkYyNgotOjEwQzlBMDAwRjhBNTNEMDcyN0QxRkFFMjJENzJCRjNDQjYwRDhCOTA1QQotOjEwQzlCMDAwMTBDMjRCMjVGRDdGNTk3QTA4MEZBNUFGRUMzMTNBNDZERQotOjEwQzlDMDAwQjNFN0Y3QzY4NkYwQjE3OENCMkUyMzE5REQxMzFFQjk3NQotOjEwQzlEMDAwRjVCQjhDNkQ5NjMwNzhBOTZGOUYwRTc2REY4QTE3QkZGNgotOjEwQzlFMDAwMzY4MkJDM0JCNTUzMjA4OUM5NjFFMEI5N0UwRkRBODUzOAotOjEwQzlGMDAwMDAyN0M0MjNDNzUzMTA2RkJBRkU5NTE0MkZBMDVGMTRFRAotOjEwQ0EwMDAwM0NFOURCMzc3MTc5MDJFMzM5RDI5MDlFNUY3RTlEQ0U5RgotOjEwQ0ExMDAwNUZGMjkxQzkwOUZCMkY3OUY5MkUxQkVDRTM4NDU0QzUxMQotOjEwQ0EyMDAwRThGQUQ5OTUwOTIwREY0QTY0NkY4MjFENEJGNkJDRTQxMQotOjEwQ0EzMDAwQjlCQjkxREU4QUY3REY5REMwRTI5MkFFRkUwNkQ0OTVDNwotOjEwQ0E0MDAwREVGRUIwQkY4NUVCRTZFMEZFOEE4ODFCRTlBRUU0NTk2NgotOjEwQ0E1MDAwMzFERjQ3Q0IyRjI1MzI2MzRCMThCRUI4NTY2NjcyRjJEMgotOjEwQ0E2MDAwQzRGMzU0MjNEMEZEOUQ1MEY0QzBGQjIyRDcwMzc3NjI1QQotOjEwQ0E3MDAwRENGMzZFQkUxNzZBMzE2MkZENEIzM0MzRDMzMEQ5QzBDRAotOjEwQ0E4MDAwRTUyQ0QzMkI0MTdBRERGMDAwRUE4QkQzODM1RDg5NzBFRQotOjEwQ0E5MDAwQkU1NjE5RDIwRkE4MzdDNEZERDMxMjE5N0U5ODlFQzE3NQotOjEwQ0FBMDAwRjdBODlFQzk4NUU3RDBCRjU1NzY0NThDRDFCQzg3N0E1QgotOjEwQ0FCMDAwNDU5OTdGMjk5RjlGQUUzQjEyRUNCNTEzMDlFMUZEOEY4RAotOjEwQ0FDMDAwOUZDQjBBREY1M0JCNDI0NTVGMkFGRTY2RkNCRTYxMzU0MQotOjEwQ0FEMDAwRTM2Rjg1REY3RDMzNjc0MEZCMTcwNzE4RkZDMDdCQTAzRQotOjEwQ0FFMDAwNjdFOUJBRkM4OUQ4QkU2QkI2ODBGMkMwNDRGQ0UxRjhCNQotOjEwQ0FGMDAwN0E4M0NDRjk1QURCQUVEMDA5NURCNzI0NDRBQkU4MDVBNAotOjEwQ0IwMDAwQzY4RjQ1RjhBMzVFMkY3QTkyQkVBNzkyOTc5NTMwOUY2NQotOjEwQ0IxMDAwQURFNzc4MEFERjE2NzNGRTlGMjE2QkY5OUZBQzhCRUZCMAotOjEwQ0IyMDAwNTMzRTY1OTlFQ0ZCRUQzM0MwQUY5NDNGQkQwRUUwNTcyQgotOjEwQ0IzMDAwMzkxRkY2RkRCN0NEQ0QwNzZGQTY3Q0ZBQjc3QTg1NEZDMgotOjEwQ0I0MDAwQjVGMjUzQ0ZBNzI1NUJFRjI2NDA5RjdBM0VGRERCQTBEMQotOjEwQ0I1MDAwMkExMjk2NEZFOUYzQjA3QzNBQThFRDdGNTQ3RTJBRjA3MgotOjEwQ0I2MDAwQUIwMkY4NDU4NUUwQTdDOEMzREVFMEE4OTc4NzU2RDk5MQotOjEwQ0I3MDAwMTE1NjFFRDJERjAxOTJEOTkzRkUxNEJBNTNFOEFERjREOAotOjEwQ0I4MDAwRjdFNTQzNDFFRTA0RTk1MkExQkIyMDVEMkE3NEE3REYxQgotOjEwQ0I5MDAwQUYxNjdFRkFGNjQ5MzJDMTc1RTVCRjI2QTNGRjVDRDYxMwotOjEwQ0JBMDAwQzRGMjQyRTk3QjdCMDc2NjIwOUM1Q0E4QzY0OEVEREVBOAotOjEwQ0JCMDAwODFGREQ0NzU5RkFFNUVBRkVCRUZEMkQ1RjM3NUZEREQ5MQotOjEwQ0JDMDAwQkE3QTk1QTY3RjU5NjNCMzkxMjBGRUZEOUE3RUUyQjJCMAotOjEwQ0JEMDAwNjdDOEQxQjg3MEY0RUE2MzdFNTlDMzU5QTMxN0U4QzI5NQotOjEwQ0JFMDAwMTJDMEY3RTVFNUM0MEI3OTg2ODExRDIyQzYwNUJBMjg3NwotOjEwQ0JGMDAwOEM2QjIwN0VCMTM5RDlFN0E1NzI2MzY1MDQ4QjNGNzRENQotOjEwQ0MwMDAwRDkwM0I2NTg1QUFFOEM2MUY1NDBCQ0IxMDZFNDlFRjIyOQotOjEwQ0MxMDAwM0MxMEMxRTI4QTVERjkwMTVCOENDQTlGNkE2RjEyNTFCOAotOjEwQ0MyMDAwNkVCN0Y5Qzg4QzcwN0UxNkQ1MjhDODQ3NkRBNEI3NzY0NAotOjEwQ0MzMDAwNzZFRTM1NERCNDBDNTkwNjcxQTU1QUQxMDkzNkY4MUQ1QQotOjEwQ0M0MDAwRDUzN0Q5RTBEQ0E5QUIyOUY1RkEwMkZBN0NFMTFGNDUxQQotOjEwQ0M1MDAwNEM3QkU5OEFCNDhEODE3NTExQUY0QkVBQUZGMjZGNEUxMAotOjEwQ0M2MDAwMTJFRkQzNTk3NDdGMEI5QTk4OUY3M0M3MUE5RDNENDI1OAotOjEwQ0M3MDAwRDYyMDNEMTU1OTk2MUE0MTlFNTI3RkUyODhGNkJDODYxMQotOjEwQ0M4MDAwRjE0NTI5MUZBRjY0OURCNjVENzk5RkQyMDFGQUYzQTVFNgotOjEwQ0M5MDAwMUJCNEVENkVFRTBGN0ZBMEYwQzk1ODMyOTZGQkEzMkNBQgotOjEwQ0NBMDAwMEVDM0U1RjIzNDMxRURGQTAyOEE4RkFFMTY5MTk4NjgyMAotOjEwQ0NCMDAwQkRCQjQ5NDQ3Qzc0NkYxNjdDMTA0RjIzREU3OEU0QjcwQgotOjEwQ0NDMDAwMEExMjQwNzlBOEMwQTkwM0Y4QzlEOEJCQkNFQUQ4RjZCMwotOjEwQ0NEMDAwNjlFNjJGODE2RUI2N0YzQ0U2M0Y2OUQ5QjFGREMzMTE4RAotOjEwQ0NFMDAwNkY0MEZERDU0MzQzM0UyNjNERkJFN0VFOENDMDczRkYwRQotOjEwQ0NGMDAwQUU5RDU2QTRGN0FFMURFRjBFRjkyNUQ0NUYzMzM5NjExMgotOjEwQ0QwMDAwOUQ1RDNCQkYxRTAzRjREM0I1REM1NDAyRjJBRTZCMzAyNQotOjEwQ0QxMDAwOEJDN0FFRDhGMUY1OTgzNkQ0QUZGNzMzRkQ2MTY0RkUxQQotOjEwQ0QyMDAwNjE3N0QzM0YzRTEzRkE0MTQ5NzcwNTc2QzNDRTI4RTRCNQotOjEwQ0QzMDAwQTdDQUQ3MjMzMERGQkI2QkM3RDc5OTZFQ0I0RkI3OUYzRQotOjEwQ0Q0MDAwMEE5RUU3RDE2NTI1MDU1QjYxN0QzMTJDOEZBMUYyOERBRgotOjEwQ0Q1MDAwODkyRjU0RDNGOUNCMUI3NjE5MTdEMEY2REMzN0ZGMzk1RQotOjEwQ0Q2MDAwMDZFNDY4RDc1NjY2MEY3NUNBNkRDRjQxMUU0Mzk0RjEyRAotOjEwQ0Q3MDAwREM3Mjk5RTJBQjEzOTg4QTNBQ0RCRjMzNjZFNDAyREZFNgotOjEwQ0Q4MDAwRjQ4NENCM0YzMTNFRDY1Nzc4QTRGQ0FGODE4N0UwNjI3NAotOjEwQ0Q5MDAwRjJDRUVBMzMwQkIwRUY2RjNGRkIxOEUzOUEyNkE0NEJCOQotOjEwQ0RBMDAwNjVCRjdGQUJBRjQ2N0JFNTYyRkJDRUZFN0Y2RURGODI2OQotOjEwQ0RCMDAwQkYyRkZCNzZGRjlCRUZGQjM4RDdCQjdBM0VFODQ5RTdGNgotOjEwQ0RDMDAwM0JFRUMxRkE0QjU2MjdBRUI3OEZGNEVFODVGREM3RkY5OQotOjEwQ0REMDAwRkJFRUZGN0JFMzdEMkJDNUJCRURFMkZCRkVDREZGNUFGNwotOjEwQ0RFMDAwQkNGRkYxMzY4RTc3M0I3RUQ3RjNFNjNGNzE3RERGNTc5MAotOjEwQ0RGMDAwQ0VCREY5NkY4RUY3REVGNkFGRDhGNUFEODYyQTdCMDY4RAotOjEwQ0UwMDAwNUQ1RjAxQTlCNTgyNjEzMTM3QkVEQjkyRTE4MDZDRDdFRAotOjEwQ0UxMDAwNzNGRDMwOEYwRUNFNEJDM0Y4NEQwMTIzRjMwQjREOTBCNQotOjEwQ0UyMDAwNDcwNzdFRkIxQzQxODkwQkEyMUY3NTFEQjcxRkFFMUI1OAotOjEwQ0UzMDAwNTQ4Mjc2Qzg3NUFFODc5OUREMjA1NUI1NjZEM0ZFQURCMAotOjEwQ0U0MDAwMzkwQjlDOTg3MzQ5RDIwRkJCQTEzRTdCMzJBRjZCRkQ2RgotOjEwQ0U1MDAwQzlGNzA0RTIxMkE4MUQ3RjVEQ0UzNTJENjBENzVFRUZDNQotOjEwQ0U2MDAwMTJEMUVFQTUyNURBQkIxRjBDOTlDRTlFNEZEMEZBM0QwQwotOjEwQ0U3MDAwNzNERERBRkE0RDA1REFGQTFDM0VERThEODRBREZGQzZBRAotOjEwQ0U4MDAwN0NDMTA3NzE1NTUzRjYxM0YxMTA2NzM1MkQ5NDg5OTBDNQotOjEwQ0U5MDAwMENGOTQyNTUyQkMxQkY5ODkzQUY3RDdGMUZGOEMxRTNCQQotOjEwQ0VBMDAwN0YzQzFDNTM0RDBBMUM5NzIwNUM0OEI2RThEQzQ4RkFDRQotOjEwQ0VCMDAwMDA0N0JFRUVENkQ5NjM3RDkwQ0Y0QzI0Mjc4M0UzOEQwNwotOjEwQ0VDMDAwRTU0RThDODM3MzdGNUJFNkVGQ0I5NjU1QURDMENGQjI1QQotOjEwQ0VEMDAwQ0VDRjU2RkNFNURFRTA0REI4RkY4REUzQTQ4NEUwMkYxNQotOjEwQ0VFMDAwQkI0NEY0QkY2NTlERkZBREUwRTVGQkUyNDNDMUUzOEZDQQotOjEwQ0VGMDAwQzVDQjk3M0FCQzBDQjJCODA4RjBBQkNDRkQ4NUE5MTZFRgotOjEwQ0YwMDAwMjdBQjBGQ0EyNzc4REVDOEZEMDVBOTlGOEI3OEQzNDJDRgotOjEwQ0YxMDAwNzlERjhCQ0NFNjZDMzg1RjMzOEYxNDMwREU3MUZEMUEwRAotOjEwQ0YyMDAwMTFGNTgzMzk0REMwNzVFNTRGOTAzMThGRjg3MzQzN0UwRAotOjEwQ0YzMDAwMjZFMDNCNkZEQzE1MTVCRjYwQ0I3MDAyM0MxNzcxQjg2MwotOjEwQ0Y0MDAwMTc5MTJBQjQ1RkM5RjlFRkJFQ0JDQTg0NzMwNjgyRjY4MwotOjEwQ0Y1MDAwRUYyMjE3MjFENzUyQkZBRDI4NEJGMDQ3NTI3ODE1NEIxRgotOjEwQ0Y2MDAwQzQxQjlEMEU3MTZGODExQ0QxQzRCREI1NzVGOEZENDcwMgotOjEwQ0Y3MDAwNDI2ODlDOEJGNUVGNERCRUZDRDRFNTVGQTkzQzNCMzI4QgotOjEwQ0Y4MDAwOENGQTQxMUU5RUJCNDk1OERDNTZGMUFGNkY2RjYyNzA0MAotOjEwQ0Y5MDAwQUMyQzEzN0MyOTQ4Nzc3RTM5NUY3NUVFRjgxQ0U3ODM0QgotOjEwQ0ZBMDAwQkZERTNCMEVFNTY0RjZBM0EzQTNEMUVGNzczOUQwNkZDNAotOjEwQ0ZCMDAwQThFNDdFNDNCN0Q3MTEwRDcxQUVFRUE2NTQ3RTNFOUIxQQotOjEwQ0ZDMDAwNkI1M0NCNTVBNURDQ0ZGREVFQkY0MDdFMjEyREJCQTYxQwotOjEwQ0ZEMDAwMEFCNTIyRjg3MTI0ODBGMTVDRUZENDA4QjIzMTRDRkUxRQotOjEwQ0ZFMDAwRUJGRjMxMTkzOEZENTQ2MTFDMDA3RTYyMjZFMDkxRkQ5MwotOjEwQ0ZGMDAwOEFFOUFCRDFCMTJBQkNBREI5RjY5NDM0QTYyNzFFRTBCQwotOjEwRDAwMDAwNzc0NDc1MEVGOTYzRTEwQjdFM0VDMDc1N0Y0NERCRjQxNwotOjEwRDAxMDAwRkMzMEZCQUQzNUIxMzg1NkRFNUJERkUyNzc5QzM3MzQ1MAotOjEwRDAyMDAwMjVDQjAwOTcxQkE2OEE5QTczRkI1NTI2RUU5NzhEMjM3NgotOjEwRDAzMDAwRTM2MDVENzk2RjVENjU5QjA4Nzg2OTExOURGMERENjY0MQotOjEwRDA0MDAwNjVEMzU5QTMzQkNDNzlCMDFFOUUzMDNFQzRENThGQ0E2MAotOjEwRDA1MDAwQ0UyMjgwRTdEMTg3MjMwOEY4RDFFRkYyNzNDNjM0RjhFNwotOjEwRDA2MDAwNkUyMjBENDMzQTJFODgyQkZFOUFDM0I1RDM2NEM3NzI0NQotOjEwRDA3MDAwNTY1RUI2MUM0RkU3NEQ2QkIwOEY4NUEzRDQwMUJDN0ZDNQotOjEwRDA4MDAwMjcxODIxRTMyMTg5ODdCREE3RjQxQjUwQzZGQUI1MUJEOQotOjEwRDA5MDAwRUQxNUUxRjYzRjNDODJFREJGOTgzOEVGOTkyMEZDRkI5RgotOjEwRDBBMDAwRTEyREZCNTFBQjNGMDdFQzgzQTkzQ0FFRDI4M0FFMDkyNwotOjEwRDBCMDAwRjI0N0Y3MENDMTA3RkExQkZDNjFBQ0U3QjFFRjg0REY2NAotOjEwRDBDMDAwNTVCRUIzQkU4MUU5NTk4NUVFRjU3MERFQ0JFMUFDQ0MzRgotOjEwRDBEMDAwN0ZEQ0M0RTJBRjdGRTJGQ0E1QzA1OTgxQUY3RUJENEFEMAotOjEwRDBFMDAwN0YyQUFGQTZBOEUzNTFENzM3OEU3RDE5RUM5QjhBMjZGRAotOjEwRDBGMDAwQzE2RUEwNDM1NTQ4NkQ0NkUwQzNDQUM2Qzc2NDM4NkZDOQotOjEwRDEwMDAwOTlFQjYwRTMxMjI5N0Y4QzNBOUZBMEQzQzRGMjNCOUEzQgotOjEwRDExMDAwRDNBRkJDMERFOEU0REMxQTEzRTg0MkUyQkFFM0FDMEQ4RAotOjEwRDEyMDAwRTRGMEJCMDZFNzlGRTE3QjZBRUY3QjIyRDk3ODAxNzlDNwotOjEwRDEzMDAwRjVCMUE3Q0UzNTU1NTI4RjlCOENFQjlDNTU5NjJENDM2MAotOjEwRDE0MDAwRjhFQzk2QjI1RDcyQTI4QTlFM0E0REIxRDhBRTNDMUYwMQotOjEwRDE1MDAwNTBFNjQ4ODdFNzc0M0U1Qzg3RjcxMTEzODFFRjQyRDJBRgotOjEwRDE2MDAwRUE1QkYxRkJENDVCQUE2MjE4MUQ5NkQ0RUYzMjYyM0RGNAotOjEwRDE3MDAwMTlGQjJCRjMyOUYzRThGOTY5NzY5RTM2RUY3ODQxNkVCNwotOjEwRDE4MDAwREIyMDgwNEI5RUM5QkZENDE5ODY0RTFGMzMyQkU3OEUwMAotOjEwRDE5MDAwREY1MzRGQjgyOEREOEVGOUZGNDg0RjJDNTVGNDQ0MUI2MAotOjEwRDFBMDAwRTZCOTJCRUZDRjM1MzMzRTU3RTk4OUM0NzA3QTYyNDkyRgotOjEwRDFCMDAwQjUyMzExRjBCMDY0NDc2QTIyMzBDOTkyM0Y0RTRCMDg0NAotOjEwRDFDMDAwQTcyNzNFRjBCMDczRTM0M0ZDQkJFRUFFRDk1NDRGNUNFRgotOjEwRDFEMDAwQUVEMjEzQjMyMzkwNEVGNEVGRTU5QTk1NzM4RDhCRTg5RQotOjEwRDFFMDAwMDkwNTZGRkZDM0YyRTYwM0QwMTM2MUY4RkI0NkIzNTY5RgotOjEwRDFGMDAwNEZEQ0Q4NTQ4ODdBRTJDNkQ5QTJFNkZCQUE2QkNEMTdEOQotOjEwRDIwMDAwRDMxM0Q5MDk3M0IxMkUzQkEzQzJEMENGMDdEQ0JGMzlFQQotOjEwRDIxMDAwQzRGM0ZCNjExRUQwMTc2QkNDNzY4NDlCNUU2RkY0MjY0MwotOjEwRDIyMDAwRDdDN0Y2NTVBRUZGNUY4MkIzMjJENzk3Q0M2MUY3NDNERAotOjEwRDIzMDAwRjRBNDQzODJGNEJDNjQyRTk1RUIwMkQwMjM5M0VCNEIxMQotOjEwRDI0MDAwNkVFNTcxNEU5RDlDQ0QwNzM5OUJBMTk2QjNFQ0ZEMEEwRQotOjEwRDI1MDAwMzdEMzBCOTU4REM5QkY5QTQ3REI2RkFFOTU5RDY2REFDNAotOjEwRDI2MDAwRkZFNjkwRENDRDU0Q0JERDM1NjYwOUUxREM0M0VFOTY3QwotOjEwRDI3MDAwMzBCOTdCQUU2OTFDREE0RkJERURFRjUzMkU2RkE5M0M4MAotOjEwRDI4MDAwMUJFNjBDNDMxRjA1RjNBMjM0REZERjFEMURGQjc2REExRQotOjEwRDI5MDAwMkJDMDJGRUY4QTc4N0VGQjM5QjcwM0Y2OEQ3RDNCMDNEOQotOjEwRDJBMDAwRUNFOTUzN0MzRERCQjhGQ0VCRjRGODVDNTNBOTFDQzhGQgotOjEwRDJCMDAwQkQ4M0Q5RDNFNTlCNDU4NDVGNDUwM0UzRkY4QTYxOTEzNAotOjEwRDJDMDAwM0UwN0FENEY0RkZGMTZDRjYxMTdFRjYwRTdCMDc0MDcxMQotOjEwRDJEMDAwNzlEOTJBRkMyRjdFQjdBRDA2Q0UwNTE2QUYxN0YwMUMwNAotOjEwRDJFMDAwMTlCRTVGMDA3ODE2NzM3ODE2MzkxN0UzMzk0QUYxREFGOAotOjEwRDJGMDAwRjBFNzNGRTVCQ0RGQTJBNkY1MTgwRjVGRTREM0Y2MkJGRAotOjEwRDMwMDAwMUY3NkY1MjlGMDQ3RjI0QzBDMEY3OUFGMDhCRUY1QzkyRQotOjEwRDMxMDAwOTBDRkEwRUJFNzVDOERFNzQ3RTVGNURBRTcwN0Y5N0UwQwotOjEwRDMyMDAwMTc4QUZFQjQ1N0U4RkJFNENGQ0NCRkQzQzNGQkEwMUVFMwotOjEwRDMzMDAwMkUyNTNGMTIyRUZCMjk1QzMyRkVGNTcwRTkwRDBFRDQyRQotOjEwRDM0MDAwQkVDN0YzMDEzRDNDMEUyQjcyMjU5RDY0MDAxRjdFNkUwRgotOjEwRDM1MDAwNzBBMTVDRjFCRTQzRTE0MkU3QkJFM0IxRTE5QUZCNDA1RgotOjEwRDM2MDAwOEU3M0I4QkM2QjcwRDdGNDg3N0UxNTAyRjYyQjVFQjc1MAotOjEwRDM3MDAwNjU0RjAyQURDRkFCMjc2M0UxNzhBMTc4QUQ1NjBGMDdCQgotOjEwRDM4MDAwRjU3RTgzMDNGNUZBQkNBQTJEMDJFNEM3MkVFNERGRkI4OQotOjEwRDM5MDAwOTVGODFFQzM3QjU0NkU1RDQ2RjUzQ0VEQkYyMERERTQ4MQotOjEwRDNBMDAwODY3M0YwRkQxMTAxOTQ5QjBBRERDNjQ3MzBGQjI1OEU4NAotOjEwRDNCMDAwQ0JBMUEzMDMwMjUzNTEzRjM1MEE3NkU0NDc3RjA0RDM0MAotOjEwRDNDMDAwNTcxNDRGNzBCRjRCRjNDNEFGQTc3M0JDQjBCODUyMjMxMAotOjEwRDNEMDAwQzM2MzI1QzUxQkYwRjNGNDI2NUVBRjYzNzZFMDJENEFFOAotOjEwRDNFMDAwQkQ1RUYwMzkwNDkwQUJCQjY0NzY1RjhDNDBFMjA0OEU4NgotOjEwRDNGMDAwMDQ5NTdFODRGM0Q1RUMwNDE1OUU3N0I0MzNGQURGMjhDOAotOjEwRDQwMDAwMzhGMTgxOEZGRUY3NDNGMERDMkJERDMzM0JBNkFGRjQyMAotOjEwRDQxMDAwQUVDMDI5M0U0MjhCRTdGRDExQUQ3OUUzRkFDMUY5OUIxRAotOjEwRDQyMDAwRTBDNDdCNzM5QTYyRjA5Q0U4NTgyREJCRkYyNTk1QkY0MgotOjEwRDQzMDAwQTdFNzBCRjAzQkQ0RjdEMUNDODQ4NTQzN0VGMzhDMDg2RgotOjEwRDQ0MDAwQ0MwRkM1Nzk1Mzk4NURBNjk2NEZGQTdCODBCRTZGRkVEMAotOjEwRDQ1MDAwNTEyNTY5NDU3QjJDOTRDN0U4N0VERTA0RTNDRDEwMzQ2QQotOjEwRDQ2MDAwRjk0RTEwMDkwMzNBRkYwOUM2QkZENTdDODFGMTQ5OTJGNAotOjEwRDQ3MDAwMURGMzk2RUZCMjJCQ0ZFREVDQkIyQzVFNkYxRTlDNzlBQgotOjEwRDQ4MDAwNjgxRTg1RUZCOTU1QTIxMzVDQTg5QjBDOEU4MzU5MjBBQQotOjEwRDQ5MDAwNkYxRTk0MDlGMENCQjk3REIyOEJFOTgxMjhENDNCODUwRQotOjEwRDRBMDAwRUYxRUM1RUZEOTBBNTkwRTFBMjlCQzhGRTk5N0EzN0M0NAotOjEwRDRCMDAwM0QxRjUxQkRFRDgyNTgwQUE5MUYwRkY3RTBDQzc2RUU1MwotOjEwRDRDMDAwOUFFNjgwNzg0QkM2RkU5NTcwQ0UzOTJCRDc3RUYwMjAzOQotOjEwRDREMDAwRTA3MzM1QkIwN0U5QzhBQTVDRjREM0VFQkE1MzQwN0VDQgotOjEwRDRFMDAwM0I0Q0YxMDZFRkNGOTk5RDdDRjAyMDlERjdENjU1RjE4RQotOjEwRDRGMDAwNzg2RTM5Q0YxNTdGMjM5QzYzQ0VEQjI3M0ExREI0REZDRQotOjEwRDUwMDAwODJFQkFEMTYzOEM3QkM2NkE0NDhEQzJBRjhEQzRBNUE2MAotOjEwRDUxMDAwMzFCRTMzQUZFQUNFMzlCMEVFMTJBQTBGQzU2NDI4Rjc5OAotOjEwRDUyMDAwNEY0Qjg0RkEzQTAxREZBRkY0QkE4REYwQkQ2NkVCREEwNwotOjEwRDUzMDAwQjNDNjBDM0E3RjExRUQwNzYwQUY1Q0M3RkE1NTZFMTBBOQotOjEwRDU0MDAwOUM5MEZBNURENEY0MThDQUNCQTIwRDAyNUUzNEQzNEE4MwotOjEwRDU1MDAwRUQ1RjMzMUJENzY3QTZFM0I2QUVBM0VGRDM3QTMxQkMzQQotOjEwRDU2MDAwMEZFMzZFODhCOTExQ0UyNzJCRTkzQUYxRkQwOUQ1Nzg4MgotOjEwRDU3MDAwMkU1RDQ0REZBM0NEQTQ3NUMzOUQzOERFQTI3NTAyODE2NAotOjEwRDU4MDAwRUYwMzRCMjYyNDNGMzIwMUM2REIyNzNCQTFGREQwQUU4MwotOjEwRDU5MDAwNUYxQjYxRERCN0QxRjlGQUQzRjExNzg4NkREM0EwM0ZENgotOjEwRDVBMDAwRjlBNTYwQzdGQjg3RUE0NjYwRENBRDBCMzYwQzJGNTQ0QgotOjEwRDVCMDAwMERDNzNBRTYxMzNCMTAwQzkyM0ExRjY1NDcwNEZCNEUyOQotOjEwRDVDMDAwQjg2ODU5NzUwREVDQUJDRDFCOUY2QzQwQkEzQTZCMDQzMwotOjEwRDVEMDAwM0Q3RThDQzJEQjREODczQzZBNjQ3OTJFQ0RERUEzQzZDRQotOjEwRDVFMDAwMzY5NTFDRkQyODIyMTVERkJGQTMzMTFCRjMyNjE2OTJBQQotOjEwRDVGMDAwN0NDQzlCNzA1NzMzN0JBNDdENjU4NDBGRTI2QUVEQjJDRgotOjEwRDYwMDAwN0QwODNDNkY1RTY5QzJFNzlEMkYzMUZERDMzOUI4MERBRgotOjEwRDYxMDAwRTNEQjI3RDZDOTA0QkU1RjVDQjEyRUY1NjlDMEUzODlBMAotOjEwRDYyMDAwQ0QzMkQyOUJGODJDQ0IxQjI4N0U4OUM1Qzk5QUQ3QjFBNQotOjEwRDYzMDAwNzE0RjJDMzVCMjdCQjVBMDlERDY4QjVGNTRGMjBBQjRFNgotOjEwRDY0MDAwNzJBQ0M4NTE4QTcyNEEyRjk3RjQ3MjZCRDE5M0Q1NDY0NwotOjEwRDY1MDAwMjBEOTFFRjI2QUU5NzQ5NDU3QTU1NEVGMDBBMUY1OTAwMQotOjEwRDY2MDAwNTc4MzZBMzA2RUFBOTc1Nzk1QzRBMkM4QTk3NDg4NUY3OQotOjEwRDY3MDAwMTY5NjBGQkU2RDJERDBGMUFERUM4MzgxNTZGRjZCNUYxQQotOjEwRDY4MDAwM0UwNTdBQjdDQzRBRTA0OTg1NjQ3RjVBNjA3NDQxODA5MAotOjEwRDY5MDAwNUZFNjM1NkRGOTEyRjhBMDY0NUUwNERFQzc3NTFDRjAxNAotOjEwRDZBMDAwMDA3Q0IzMjYwRUNGQUY4QjdDODUwODZGMjUyRkI3NzgxMwotOjEwRDZCMDAwQUQ5NkNFOTVGOEUzNUNCNzQ4NUM2QUZENTUxMjQ1NUNDMwotOjEwRDZDMDAwQUE3RTg3RUVBM0Y0NEFFN0I5QkQ1MUYwODFBODNDNzQ2NQotOjEwRDZEMDAwNUZGQkRFQkIzM0IwNkVDNzc1MkRFM0Y2QzExQTJCRDJFQwotOjEwRDZFMDAwRjNBMTlGOUY1RDA5RjQ3QURCQkQwMjAxN0I5RDc4REQ4QwotOjEwRDZGMDAwMzVBMDBGMkJENjBBMEU4ODBGMTdERkNCREUyRkE2RUYzMwotOjEwRDcwMDAwQzNCQTBGRkQ5QUQxMTVBNTZGMDdEMDdGQzVCQUM3RjY2QQotOjEwRDcxMDAwNjJGRjBEODIwM0M2M0ZCNEJFMTBFRDg5MTJBRjQ4QjA2MAotOjEwRDcyMDAwN0Q0MzNCRkEwRjU0NEY2MTlFNTlCMzU3NEMwMEZBQUZGQgotOjEwRDczMDAwQjhERjY0MDc1MzQ5QTEyMzg1MkVEQkY5N0QwOEM0RUNDQgotOjEwRDc0MDAwMUMzMzhCQkVCNzBBMTYxNURGOTMxRUM1MDIyMUE4NEZFNgotOjEwRDc1MDAwODE0RTJBQkQ4Q0NFREE1RjkyOUQ0MDM2MTdBNzRCRjZEQwotOjEwRDc2MDAwMURGQzA5QUU1RkM1NjdFNzRDODdFRjc0OEFBOTdFMDQ4QwotOjEwRDc3MDAwM0E2RDVFOTc2QjA0M0JFMjg0NEZDMEZDOEE5RTc0NDkwRAotOjEwRDc4MDAwMkM2QTNCNEFBMUNCNjcwNTI2QUY3QkQwQTM4RTBFN0JDQwotOjEwRDc5MDAwRDAxREE3NEI4NUZFMjg1MUEzNUY1OUI2NEYyNkYwRkQzQgotOjEwRDdBMDAwQkQ5RTFFREQ3MkZEOEQ5MEZGNTFGODMyREQwRjVENkY2NQotOjEwRDdCMDAwNkVDRENGRDE1RTU3RTA0OEVCMDk1MDJGOTI1OERFOEZFNwotOjEwRDdDMDAwQzIwRkU1MTJDQjBGRkJERUVCRDNDREJGMjk4MkU3ODc3QgotOjEwRDdEMDAwMDEzRjg4MkM3RkM5NEZFNzdEN0JGMzBCOTgyRjc5NjYzQgotOjEwRDdFMDAwNTNGQjc1NjhERkJDNDFFOTAwRTBCRkQ5NEFGQ0U4N0YyNAotOjEwRDdGMDAwRjg1MDBFOTUzNjg4OTg2RjREMjQ3RkU2MkM5NURGQUU1NQotOjEwRDgwMDAwRTRCRjJDRkU4MzE1RTE1REJBRDVFNENCQTNFRjk3NkVBMAotOjEwRDgxMDAwM0YzQTA2RjMxMTk2MDczMEJGQzdCQjQ5NjBFNzFGREVFQQotOjEwRDgyMDAwQjYzMUYwRkQ1MEE5QzRGMjcwRjQ3NkMxRjA0ODE2RTdBNQotOjEwRDgzMDAwRUE3ODJEQUEwMEVDMzZBMThFRERCMzU3NUE3RjkzNkM5RgotOjEwRDg0MDAwNTJDNTc1MDc0NUNBMzgyRkVEODdFNzYzNUU4QTY3QjgwQQotOjEwRDg1MDAwMUYwMUQ2QTdCRURGNERDOUJGRTk3ODkxRDE1RjY5QTM4QgotOjEwRDg2MDAwOENGNjVDNjlERDk2NEVDOEMzMkMzRDZDNDIzRkI3QjI2NgotOjEwRDg3MDAwRUVBQzExRkNEOERDM0ZCQzg0RjdGMzU1MzY4QTlBM0NGOQotOjEwRDg4MDAwQkMxRUY5NkY3NUEyREYwNEY5NUIwREU1Nzg3RTQzRUJGMgotOjEwRDg5MDAwRUQ1OEFGMEY5RjA3N0FCMTNDQURDNTdGRDhCMURENEJENgotOjEwRDhBMDAwNDFCOEY4OTVERkQ5RjBCRUJFRDY4RDM2RkNFRUE5RUVCNAotOjEwRDhCMDAwQzJGOUE3M0RGMkRERUE1NzVGMzBERkVEMzRGQzQxMDlFNAotOjEwRDhDMDAwRUJCQTQ4NURCRTYwMUQ5MzZCNzQ3RDk5Rjk2MUUyQzQ0QgotOjEwRDhEMDAwNDE3QkVCQTUyRjlGODM3Q0VDOEVBRDdGN0IwRUQ2NUJDRgotOjEwRDhFMDAwRjY1RkU3OUU4M0JDMUFCMjMzQzIwRUY2NDhFNUE2MEY3OAotOjEwRDhGMDAwMzA5RjU1NzlBRjI0OTJEOTdGOUQyRkZFMEVGMzgwM0I0OAotOjEwRDkwMDAwM0YzNDM5NjFCNENFMUQyNzg2ODBCREQxQjlFNURCMDQzMwotOjEwRDkxMDAwQzhFRjVEQkE2MzFBQzY3Mzk2NkVDQjREMjQ2MUUyMDVGQgotOjEwRDkyMDAwNEEwOTc0RUJFQjQzMUVCMjFFNUZDRDBEQ0Q5OEZGNzMxOQotOjEwRDkzMDAwODZFMjFCRTQ0MzMwN0ZCMUJFOUNFNTgzM0E3OERFRTJBOQotOjEwRDk0MDAwRTZGMEY5REUzREYyMTQxQjY2NUQzRjE5RTQ2MjAzQjNCNQotOjEwRDk1MDAwMEIyRTlBQUY3ODgwRTJGMUYyM0VFMDZGRjM2QTJFNEYyMQotOjEwRDk2MDAwQzJFM0VGMENGQzQxRjE1NDEzQTlDRDU3RkNCMjYxRTFDNQotOjEwRDk3MDAwNkY5RTgxQjY4NkI4NUVGMzE1RkQ3RDgwOUI5MjRGM0UwQgotOjEwRDk4MDAwMkJEMkY1NTgyNEYwQ0RENkRGNjM3RTI4RTAyRENGMDFEMQotOjEwRDk5MDAwRjJGOUNCMjExMDE3M0UyOTA3MzBGRTEwRDg2MUMyRUZGMwotOjEwRDlBMDAwMkM0Qjc3MUM0MkZFRTlEQ0I2MUZGM0I1MDlDRkVCRUUzQQotOjEwRDlCMDAwMjRDMTFGQ0JDM0U1QjE5RUNBMEQ1Njk2RTdDOEUxMEYzRgotOjEwRDlDMDAwNzk5MDBFMUIzRUU3Rjk4RThDOEU5NTNDQzhERUYyMUZENwotOjEwRDlEMDAwNUIyMjUzRjg3RDJBMkM0RkIzN0NDM0M3M0NBRjMwODQwNQotOjEwRDlFMDAwMkY2MTAyRTBBOUZEODI3OUE1MEExQ0VDMDA4NzJCRDRFNwotOjEwRDlGMDAwRjlCQ0UxRjM0QzgzNzlERjFDNUY4MDNGOTBEM0MxN0M5RAotOjEwREEwMDAwNUQ1QTFGMDRGOTlCM0VFMTEwMDkyMzBGM0FEN0IzM0MzRQotOjEwREExMDAwRTA0RTM5RkNGN0NDNEE3RTZGQjM5RTRGN0Q3RENCRUI1OQotOjEwREEyMDAwQkREOEZBQkYyRjdDMUEyMjFEMzhBRTFFNEUxREU3QzM4QgotOjEwREEzMDAwQ0JGMUUzOUNFRjdGRjBGNzIxNjU4MkZFRkI5M0NGODE3MgotOjEwREE0MDAwMUVDQjFCREE4RDc4OUY4OUUyM0ZGMUZENzZGMDc4NUE4NAotOjEwREE1MDAwQzcyNjExRjMzRTZCRUE5QjUxOEVFQkU1NDUwNTNGMjc0OAotOjEwREE2MDAwRDFBRkY3MUJCRURFOEE0NkE2MjczQUI2NUE3RDE2M0FENAotOjEwREE3MDAwNEVDNzVCQUYyMTNENTc2QzZFQzdCQ0QzQkQ3NUFGMThBOQotOjEwREE4MDAwREI1NEU3Q0JBMDI3N0NBQUY1NzdCQ0JDNkIwQ0NBNkQzNgotOjEwREE5MDAwN0VCRjk4N0UxRTYzMTQ5QkE3QjIyOUZDM0M5NTlCQ0Y0QQotOjEwREFBMDAwNkFFNjU5RUNBRDM3REEyRDE3OUZFRkI0RTRCQTA5QzYzMAotOjEwREFCMDAwM0JERENBRUNBNUQzRjVFMjBDNUY5OEY5NEY3MUJENDk4NwotOjEwREFDMDAwNDgyRDNCMEZBNUZBMTJFRjU5QjNCMjdCRDU0NDVCMjQyNgotOjEwREFEMDAwREE1RjRCQUQxMzBFNDdGNzgzRDI4ODc5MkYyQkFBNzlFMwotOjEwREFFMDAwOUVDQzdEQ0UyNEMwRjcwQUVCRDUwNEQ2QkIxMkUwQUJBQQotOjEwREFGMDAwRjJFMzY1QkI5QjgwREQyNjI3RTU2N0E4Q0Y1OTk0RjU0NwotOjEwREIwMDAwMUJGQjE5ODg0Rjg1RkZBNUQ2MTk4OUUwN0YxMkM5M0JGOQotOjEwREIxMDAwMDhENjcxNURDQUQ3MTJFOEJGNTYwRjhCREY5M0YzNDc2MwotOjEwREIyMDAwODdDMUYzNTZDOUJFMjc4RThFREIzQTU1NzA0MkU4QjVFMQotOjEwREIzMDAwMjdEREZCMzQ3MTg2OTkyRUVEN0RCMUY4MEQxQ0RENUY3QwotOjEwREI0MDAwQjdEMzgwRjZBMEQ1RTBCN0QzMkVDNDFBRDE5QTg0MEVFRAotOjEwREI1MDAwQUM4MzM4QTQwNEZDMTQwMkYzMjExRUY0OTg2N0MxRkRDMQotOjEwREI2MDAwQzgzNjQyQ0Q1M0U4RTc5NDM0Rjc5RjQ0NEY5MDc0Rjc5QQotOjEwREI3MDAwQTE5MDAzQzMyOEJENUEzOEJEMkE3MTM5MkJGQjlCOEU1NwotOjEwREI4MDAwREI4NkY3QUNDNEE0OTE2QTIwREYzNTU2MzdEQTBENEYzNwotOjEwREI5MDAwRjBGQjY5RTg2RjI0RTQ0MUM0OTI0OEE3RkFGRTI2M0FGNAotOjEwREJBMDAwQUZFNkZCMzgzQUFGQTYxRUUzRDJENkUzNjY0OEM3QzI1QgotOjEwREJCMDAwRTk5NzM4QkU4RUU5QTIwNUUxMTAzM0NEQTBGODZCNzk2NAotOjEwREJDMDAwQzMxMzQyRUI4RTg5Mjc0RTNGQjQ1RjZCQzFFRjAxMjgzMAotOjEwREJEMDAwN0I3OUQ1RkJCMDU4QjRFQkE2RUJEM0M4ODlFOEI0MzY1MwotOjEwREJFMDAwQUY4MUFENTNGM0RDNEUxQzAyRUVERkE1N0Q0RUQ3QUIwQgotOjEwREJGMDAwQTkxNzQ2NzE3OTI3MTEwOUU0OURDNURDNEEzOEZDQkI5OQotOjEwREMwMDAwMzVGMEJFNUZEQTM3MzgwMUYwNDNCODVGRUQyNTkwQ0ZDRAotOjEwREMxMDAwMTJDREY3NDFFN0Q3RjRCNzQzNzQ4MENEQUYxRDg3MEMyMQotOjEwREMyMDAwQjJBQkJGNDNCRDlDRUJCRjUxOTZGQzI1NTE5NDlFMzJENQotOjEwREMzMDAwODc1NjYxNjI3NjU2MTI0OUMzRUZBNTlCRkFBMTdDNEFDQQotOjEwREM0MDAwNTk5NjgzNzkyNzQyMkRBM0FCNjE2QjA4RjJDREIwMDBDMgotOjEwREM1MDAwQ0Y5QkJBM0YxMkVENTE5Mzk5NzgyM0QyRTE3QjM2RTIwNAotOjEwREM2MDAwOTVEMzYxMTYxRkNGNDM3MDJDMzdEMEExQTQ1NTk0RDZGRAotOjEwREM3MDAwRTg3QjREODExQ0MzNDI4QTg0N0E2OEEyRTM1NzQ2Qjk4NwotOjEwREM4MDAwQUFBMzI4OUZENkNDNzQyNzE5QzZDMkY2REU1RUI5M0I3QwotOjEwREM5MDAwMEJCOUY2NTI4ODA4MUFBQUY3RUU2OTE5OEMyMjA0RUYxQwotOjEwRENBMDAwRjEyMERFQkQ3QjgwQzY2Qjk1M0ExNUVDRjA5RDdGNkQ1MwotOjEwRENCMDAwNjRCMEVFMzI1Mzc5NUY5QkMyRUE4RjNFQjQ3NzI1RENDNQotOjEwRENDMDAwMzc5MzZFQ0Y3RjE0RjY0OUNDRjY1MTc4REVFNThGRDVDOQotOjEwRENEMDAwRENGM0REOUI3RTUxRDYzOTcyODMzRjE3RUUwNUJFM0FFOQotOjEwRENFMDAwQzBFRUY1MUQ2RTBEN0U3NzhGN0E3OEEzNDVBOUZCRDEyNgotOjEwRENGMDAwOEZDODZGRDg4RjcyQURCQzdFM0ZCNjFCQTA0RUNCQTEzNAotOjEwREQwMDAwNzFGRURDODE3NDlGMkY0NzFEOUE5Njc0MjkxREFGQTE2NwotOjEwREQxMDAwMzAwOTNFRDk3RjM1RUFEMDFFRjhFRTMwMDQ4NzhGNTdBMAotOjEwREQyMDAwRUUxRTE0ODI4M0I0RkNDMzNEMkQ5M0Q1NzBGODcwMEZBMgotOjEwREQzMDAwRDgyMTdEODVDM0FCMEY3RDg4NzBFOEVCQkUyOTVENkM3MwotOjEwREQ0MDAwMDdCQzVDOTM2REMwRkJENkFFMzg2Q0MxRjgwQUZENDVDQwotOjEwREQ1MDAwQTAzRUUyRTNBQ0VGRTVCQjZDQzUxRkExRTNFQzU0RDNGRQotOjEwREQ2MDAwOTdGMjlFNDI1N0JERDE0RDJBQjE4RjYyRjc2QzZBRTk5NgotOjEwREQ3MDAwQTcyQkNBRjUzNkFDQUIyNUNBNzU4RjM1MUVGNzhGRjdDMgotOjEwREQ4MDAwMDA1Q0UzNzYzQkE3OEUwQkQxMzVCMUI4QzdDMUZERUU4MQotOjEwREQ5MDAwQTMyQ0YzNUJBMzU0RjJGMjlBRUMyNTYyMEFDNEM5ODE2NgotOjEwRERBMDAwMTdFMjQzRkI4OTVGRTY4RDE4NDFGNzE5RUYzMjYwREUxOQotOjEwRERCMDAwRkMyODhCRkIyMENDNjMyQjA4RjgyMTc3RUMwQUUyMUVCMQotOjEwRERDMDAwMjc4ODIxQkU1MEU2QUJEOUMxRkNGNTlBNDI4MzZGMzk1MgotOjEwREREMDAwM0JFRjE1NjBCQzEwN0RCNEU5RTgyM0MwRThBM0IxMUQ5QQotOjEwRERFMDAwRTlBM0EyQTk5REQxNDc2Mzc1NEU2NDA2M0IzNzAzM0Y2MwotOjEwRERGMDAwQkY5NjA0QzYwMkRFM0JBMkJFOUEyNjUxRkExRjFBMTUzMAotOjEwREUwMDAwQTgwMUJBOTFCREU3QTZFNTVEOEE3MDNEMUQxNjNGN0M2RAotOjEwREUxMDAwN0RDQUJFN0FDMzZGNkQ0QkNBNDM2OUUwNEZFRTMzRTBGMwotOjEwREUyMDAwNzk5NzAyMzdBNTVGOEM4NUU1QzVCNjU4REQ1RjAzRkNBMQotOjEwREUzMDAwMkEyN0I0RUQ4NUVENkY2RDc5MUZGMzM2NkNGQjZFRDgzNAotOjEwREU0MDAwMDVFRkRCNjY1MzBDMzk0MkYzRDZFRTVCOEVGNzY3RDdFRQotOjEwREU1MDAwMDZEODdERDhEMTI0RTAwNUJEREUzQjNDMThGRjA0RTFBNwotOjEwREU2MDAwMDE3NjRGMUFDMEEzMURGOTY1MTNGRjVFMkNBQjUxNzBFQwotOjEwREU3MDAwODE5RTFGMUFDNUVFMEQ4OUI0QjBGM0VCMjExNjExRDdBMAotOjEwREU4MDAwMzlDNEMyQ0U1OUUyRjdCRDI1ODJCRjk1NzVCRjAxRkJFQgotOjEwREU5MDAwQzc0Mzk5QTZERUZGRkRCQ0JGQTQ4OUFGMkJGODU0RThBOQotOjEwREVBMDAwODk0QUQyMjhCODdGRTQ0QzhDM0JEMUEyQTE5RkQ4QTg0NAotOjEwREVCMDAwMTRENTc4Q0E3QjhGNzg4OEYzMEVBQTQ3QUZEODNERkY3OAotOjEwREVDMDAwMkVEMEFCOTQ3RUJFMDBGQzA0RkI4RDk2MjMwMDZFNEFFMAotOjEwREVEMDAwN0ZBMENGNzBGOEExRUYwRDg3Rjk2MDFFQjAxN0I2RUNFOAotOjEwREVFMDAwNUUyMkUyM0QxQTdEQzQ2QjI2REMxQjQ5RkI2NzQ2OTEyRQotOjEwREVGMDAwQUFBREY0RkRDQzY4NUE0MjNEOEVENzEzNzk3RDIwMkIxNAotOjEwREYwMDAwNTMzRjcxMUEwNEZBN0MzRDhGQkI0RUI2RjBGQzMxQzkwOQotOjEwREYxMDAwM0VFQTg2RDE1MDY3NzY1QzU2NTIyNEVBMDU4NTZGRTE2OQotOjEwREYyMDAwMEUwODM4Qjc5NkY4Rjk3NTRBMjBDNTAwNzg1M0Y4NThBNgotOjEwREYzMDAwMEExOEZDNTZBQUI0NTIyNDg3MDFGMjE4REVGMUQwN0RFQgotOjEwREY0MDAwNEJCRENCOURBQjJGNjVERjcxRUE5RkNGRTRFQkY5QzFGMQotOjEwREY1MDAwRjZGNTE3M0RCRUVGOUUwOUYwMkQzN0I3M0Q3MjAzQURDNAotOjEwREY2MDAwNTc1QzdBMEVDRjA3OTc0NzU1NUM3OUExN0IyRkY0RUI2RQotOjEwREY3MDAwN0ZFN0ZDREI1MTQwODc0RERGOThDMjdFMEY1NUMzRTE0MAotOjEwREY4MDAwRDZFMjI5QzBGNzMyRjlCRDJFMjQ1MUM5MzM1NkU1QjE4NgotOjEwREY5MDAwNDIxQkI3Q0IxMDk1MjlGODFDRURBQ0ZGNDAxMTA4RjhENwotOjEwREZBMDAwRjQ0QUIxRjA3RTU0MzI5RTFGNEVEMUU1QURGRTg3OUZGQwotOjEwREZCMDAwQzVGOTMyQzEzMDAwMjU3MUM5MjgzNkNGMzdDQzRFMzI3MQotOjEwREZDMDAwRDNGRkUwOUM2OTFBM0YxNzdCNDc3MkFGQjBEMkYxREVGNgotOjEwREZEMDAwMjFFQzdDMzUzM0FFQUExOUVBQzRDNEM2Q0YyNkRBRkJERAotOjEwREZFMDAwMEEzMjEzNkJBN0M2QzJCOEQxQzkxOERGQ0EzNUVCREEzQgotOjEwREZGMDAwNTNCRDEyQzg2OTkyOUE4Qzc5ODlEMzg4Q0EzRTYzN0FENAotOjEwRTAwMDAwMDNFREVFMDhCQTJFOTBFM0Q3OEMyQzc0NEVFNUVERTdDNQotOjEwRTAxMDAwRThGRjQzNERFNEY2OTkyQTdGRTMyQUM3NUNFNzU0OEQ3NQotOjEwRTAyMDAwRkQ1MjhCRjcwMUZERTk5RkUyRURFMUYyMkMzRUUzRkNBRQotOjEwRTAzMDAwREZFMkM5NzdDMkY5QjMxRTlFMzkwRUUxN0VBQkEzMjc5QQotOjEwRTA0MDAwRENGNTcwRDRDMzVEODFBQjFFOEVEOTlGMzhBN0M2ODYyMAotOjEwRTA1MDAwODE5MzFFMkVEMzQ4RUQ0OEQwNjMwQURDRjU3MDc5Qzc1MgotOjEwRTA2MDAwQ0NFOEUyOUQzNDEzREVBQkY4OEVDNEUwRjgwRTM1MjMyNQotOjEwRTA3MDAwQTExRUE0OUI2ODExRUYwMUNFOENFMkY1Mzc0N0IwQkEyMAotOjEwRTA4MDAwODJFRkE4NjRDNEI3MUVBRTdBMzg2NkM2RjFGN0UzNThDQgotOjEwRTA5MDAwRkZCRDAwMkYwOUU1MDJFMjQ3QTE5QkNDRDRBQUREMzFFOAotOjEwRTBBMDAwMkE3QTUwRUNFQjY5MUMyRUQ0QkU0NkZCMzkzN0RFOEE0NwotOjEwRTBCMDAwNzEyNkIwQUZBNzI1ODRFMDk2NUJDRUQ2OTUzQkRDRjIwNwotOjEwRTBDMDAwM0NGOEE5RjQ3NUJDQkY3MjBBRTEzRkZGMTQzQzJGQ0FBQgotOjEwRTBEMDAwRTQ1NTA1Q0U1M0JFRDFEQUM5RDM5QUE2OUY4MjM4QzM4MAotOjEwRTBFMDAwNTA5M0ZCN0VBMENGODAxMDgzRTc3NTE0RUU0Nzc0NzBDOQotOjEwRTBGMDAwRDdCRTY3RDdENkY1NzBGODAzRkMzMUIxMjdCQzE0M0EwOAotOjEwRTEwMDAwRkJDMEMyRTM0RTAzQzgyMEIwOTdDN0JDOTYxMTBERjIwNgotOjEwRTExMDAwOUIzNEM1ODY4RDRCNUM3MTM4M0YzODBFQTc1N0E0NjM3RQotOjEwRTEyMDAwODFCODgzQ0ZFREE5M0Y0MjhFRURBMzVBNTIyNUM3MzY2MQotOjEwRTEzMDAwOEJFRUQzOTZGODlFNzI0Q0MxRDM2NDhFODdDOUM0QkI1NAotOjEwRTE0MDAwMEJFMjRCOTM4OUY0NDVEMDFGNDgwRUVEQkY1QkQ5RTczNgotOjEwRTE1MDAwNDAzMjEwRjY3OTgzQzVDMUU0M0ZERjY3NzBERkQ0QkM3RAotOjEwRTE2MDAwODRGOUIzRjhGQzU5NjYwQjdFNUY0MzAyNTI0NzEwQ0UyOAotOjEwRTE3MDAwMjk3OERGOTFENzE4MUI1QTg3OTJCRjRGODY1NDExNjZCMgotOjEwRTE4MDAwQ0ZDREMzN0JBRTI5NUNDODc3NTFBMTc1OThBQzgyODQ5MgotOjEwRTE5MDAwRjdGREYwNzU5Q0E5MzM3QjIxOEZBRDVCNzQ0NzgxOURBMgotOjEwRTFBMDAwRDcyMUVDMUI4M0ZCOTNGQzIzNDBGRkU5REJDRjM1RUU0QgotOjEwRTFCMDAwQUU4MDc2REFBRjA4RkJGMUY1MkYxNjU5RkMyMUIwQzMxQgotOjEwRTFDMDAwRTQ3QjNFQjk3NzNCOTVCMjM1RUEwOTg1N0VCM0UwRkI0NwotOjEwRTFEMDAwRDRDQjgxREVGRDAzNjFERDUzNDBENUQxNzJFNzU5RjYyMgotOjEwRTFFMDAwMUQ0Mzc2NjNCQTA0RjNFQ0U5NjY3OUZGMzlDNDI1ODFFRgotOjEwRTFGMDAwN0RBQkE3REZFRjRCQTdBMTc4NDU2MDA4RjgyOThBNURDMgotOjEwRTIwMDAwMzZENUVBMUU2OUE1Q0Y1N0YzRUY2NjlCQ0U4RTE4MDU2QgotOjEwRTIxMDAwNzhGOUMxRjQ3NDQwNEI0RjBBMUQ1MUJBMUEwRkYwRUM1MwotOjEwRTIyMDAwQ0FGOEZDNjkzMEM3REZDRDM4OTcwMDdBNTFCMURGNDNCNwotOjEwRTIzMDAwNzY4QTZCMDJBQ0E3MzczQjdFODlENTNEQzU3QTAxM0IxOAotOjEwRTI0MDAwNUVCMTY3MkVFNjg3OTBEREQ0NDFBNjc0NzQxQkM3Q0IwMAotOjEwRTI1MDAwM0M3M0FCQ0NFRUNEMEY2MEZFRkRFQTQ4RTU1RTNCNDc3QwotOjEwRTI2MDAwMjREODkxQjdBRDRFRDk1NDA3RTc4NkQ1MkNGRTdFNkJFNgotOjEwRTI3MDAwOTVBQ0YxODNERDkwREQ4NkVGQjNGQjY2NkY1RkE2NkQzNQotOjEwRTI4MDAwRkY0QzYwRkU3RUExNTdGQjlDNTgxMjM0RjdFREY2OUNDNAotOjEwRTI5MDAwRDdFMDM1QzBCQ0MzMjMzMTNGNDEzRkFGN0U3RkZBNzkyMQotOjEwRTJBMDAwRjVGM0FERTY3RUQ1NkE2M0VENDhBN0NBMkU1OTYwNjVFMQotOjEwRTJCMDAwRjY1MEY3QUFDN0VCRTBDQUJBREVFMEU3MzYwRjQ4OTM5QwotOjEwRTJDMDAwNTRGN0FCQjVBRDhFMkMwODc3NkY4QzMyOUUwMkVGNzk4OAotOjEwRTJEMDAwQzRDRkUyMDA1NUYyREZDM0REODM5QkU1NjZGMTgxREU0QQotOjEwRTJFMDAwRTYxRDE2OTg4QTc2QTBFMTQ5QkYwOEY2RkNCMDAwNDEwOQotOjEwRTJGMDAwRkIzQjJCRTAzMjJDRDBGODAxQ0M0RkVFRTEwN0MwQkQ0OAotOjEwRTMwMDAwMjZCNDVFRDZCMDhCRjkwMUY1RDVFODRGOTQ1MTdGMDI2MwotOjEwRTMxMDAwRjRDQzdBMzg5QjFFQzAxNzk0ODZGRTQxRDBERjg1RkM3MgotOjEwRTMyMDAwQTkyQ0I4Q0Y5MkZCQzMxMkE1OTdENDVBRDY3RkEzRjVEOAotOjEwRTMzMDAwNURFMzZBMDlGQzU1Nzc5MjRDMjk2M0UzQzNFRkQ3OThGNAotOjEwRTM0MDAwQTk1RjU1OTM0QzIyMDhGNUFCNUU3OEY4RkRFOTZCQzBFOAotOjEwRTM1MDAwNUY4RTc1MDk3MDdGMjhBREQ3NThGQUY3RERCRkRFRjhGQwotOjEwRTM2MDAwRjBGRTFBQjg2Rjk0RkE2NUVCQUMyQTdGQjczN0ZFNzhFNwotOjEwRTM3MDAwMDQ4QzkxMEJGMDQ3QkEzRDdGMjNGMEExMTJBRjY4OEE1RAotOjEwRTM4MDAwRTA3QzFGMTFBNEJCNjg4MDk3NDIyNzU3MkY5QjhGN0U4QwotOjEwRTM5MDAwNDVDNDI1RTc4NzQwOUU1ODE2QzdGRjE2MkI4RkMzNDZGNgotOjEwRTNBMDAwQjFGNzlGMTJERDVCOTBCRkRGM0EzRjAyRTJDQkVGOEMwQgotOjEwRTNCMDAwM0M4QUZFNUM5Mzk1QzVFN0Y3Nzk0QUQwN0U1MkYwQjk2NgotOjEwRTNDMDAwQ0IyQTcwM0ZDOTNGMTBGOEVEREFGMUNENzFFMDk3NjRDOAotOjEwRTNEMDAwQzkwMkRFNDNEQTI0RkI5RTRDQ0YwMDc5MzREQkJFODJENwotOjEwRTNFMDAwNkUyOTZCQTIxMUJGMTM2QjhBRjAwRkJDNUI2NUE3MzU1QQotOjEwRTNGMDAwRjFGQjRDOUJDRUVFMURBOENFNjMxRTY2Q0RERDY1NDVDMAotOjEwRTQwMDAwRkFGMzhCMzA3RTU2QzZFRUMzQTBFRjdCRDMyRjIxRkRFRgotOjEwRTQxMDAwRTExMjQwN0Y5MEYzRkIxM0YwRkNBODYxOEYwREUyNDIwNAotOjEwRTQyMDAwMURGQzdFODIzMzBEQ0QwOUYzNjk1OUJFRTUyRjM2RjAxMAotOjEwRTQzMDAwRDdERUU3NzAzODIzQjVFMjNENEE2NURCNDRCQ0ZGODM5NQotOjEwRTQ0MDAwQ0U5QjcwMEJDNEE3MUIxNjY0QjJFRkY3RDg3NzY3OEExMAotOjEwRTQ1MDAwRkU0Q0ZGNjdGM0MwN0MxNjM0QzRFRkM4MTQ3QjcyQjI2NQotOjEwRTQ2MDAwRDlFQjgzRjUzNTU1OEIxODJGOUVBQ0JCMzc2QzBBQkZBMwotOjEwRTQ3MDAwMzc0QzZGNUY5RUI0MkE3MUU5MDRDQzg3NUE2QTY3RjMwMAotOjEwRTQ4MDAwRjRDNjRGNTlERkM0MTI5RjhBREZCMjI0QkYwOEVCQ0YxNgotOjEwRTQ5MDAwRkEyNjgxQzAxNTk3Njc1QTUyOUVDODAzM0Y5RUM4Q0U4MAotOjEwRTRBMDAwRTEzMEFDNDQ3NkEzRkRDQUNGOUZFODZGMzdEQzQzQkVCMgotOjEwRTRCMDAwOTM1N0RFNkMzODM3RUI0QTI0NjZGQkZEOTcwOTYwNzc4QgotOjEwRTRDMDAwQjlGQkIxRTAyMkQzMDc4QTdEMzdFNTFCNkQ3QzU1NkYyMAotOjEwRTREMDAwRTdFNjM0OERCRDdGMjA0MTc4QjM3RkE3MjJDMEVFNTU5QgotOjEwRTRFMDAwRUI2MUZGMDZBNjg3QjU3QjA5NzkwQ0UxOTBCRTJERjU5RgotOjEwRTRGMDAwMUFCODQ3MjlGRDhGMDYzQkNDREIwMjdDMTEwRkY4M0M5NAotOjEwRTUwMDAwODdGN0ZDNTQxMEZGOEREMDVFRDEyMERBRkRCMDdFOTJFQgotOjEwRTUxMDAwNzExOUYwOTU2MjM3Mjg3MDY5M0NERjZDMUU0M0Q3OTEwMgotOjEwRTUyMDAwNzVENjYwNUY0RTg3NzgzM0YwMDVGQUNGRTNGRUJDMkZENwotOjEwRTUzMDAwMEVGNDU3NTM0MEMyNzM4MkFDQjNCQkEzMTZBOEU0NjA3OQotOjEwRTU0MDAwRDM3OTAzM0U3RkYzRkM1QkRBRTc4MUQ4Q0JFMEJEMkRDNgotOjEwRTU1MDAwMDZFNjE3RUZERUZCRjcyODkwNEI2RjlFRUZDNkYxODJDMQotOjEwRTU2MDAwNzY0MzRGQkIxOEUxOTE2QjE1ODM3MTY3QjU1RDRDQzQ2MQotOjEwRTU3MDAwQUMwMzkwQjczNTJEOUFBQTMxQTE3N0JCMzdGQjEzNzI0NAotOjEwRTU4MDAwQkY5NUY0QjQxRjcyQzAxRTExQzNEODExMUNDRTc0M0VDNwotOjEwRTU5MDAwMDlGODQ4NkY1NzVDNkVFM0YxRTZDMTI0MURFRUEzNkNFOQotOjEwRTVBMDAwM0MxRkI3MThCRjFGNkU4QUIyMkY0NzdEQ0NFQ0E1QUVCQgotOjEwRTVCMDAwRERBNzFGQkYwNjlFRUYxM0Q5RkQxMUU3NDVFNEE3QjdGRQotOjEwRTVDMDAwNzYyRTFFREFBNkUyNUIyQTM5MTE0RjVGRjUzRkRCRjlBMgotOjEwRTVEMDAwMDZFREZGRDU5RTQ4MTY0Nzk3OUM5N0E5QkY3NzA4RjU4QgotOjEwRTVFMDAwRjc3MTc4RjkwN0IwRjMzOEVGMDBCOEQ3RTkwN0RCMkZGOAotOjEwRTVGMDAwMUQzREZDRkEzQzFCREFDMzgxRTlBMDFFNDZBQzZCMzcxQgotOjEwRTYwMDAwMDJGRTVCQUNGOUQ3RDk5MERGRUFBMzAwMkU1RTkyMzMwRAotOjEwRTYxMDAwOTA0QzgwRjM3QTkyMDM3NDE1QTgyNjc2RjAyN0I2QjU0RAotOjEwRTYyMDAwMTgwQzgwOTc4QzhEQzk5OEE3QjM4OTlGNTcyRUFBQUZENQotOjEwRTYzMDAwMzUyNkFCRTg2MjExM0ZFRjNBMjk3Qjg3QzRBQTlFMUZCQgotOjEwRTY0MDAwQjAzMUY5NzI3MjRGRTk2RjMwNEZFMzQzMTMxOTFFQzZCMAotOjEwRTY1MDAwREU2Q0IwMzE3REZCOEFEMTdCQ0Q2NkU4NzdDNDgwREY4QwotOjEwRTY2MDAwMERFRERFRkJGQTVFQjhDRjc4RDE2MUM3NTg4OEZGM0Q2QgotOjEwRTY3MDAwNjI3MzYwQkZDNjdEOUI2QTIwQ0ZCN0YxMTNEMDUyNTQzRQotOjEwRTY4MDAwQUY2QzI4MTQwRDc0REUzNzg4ODNDNUVGMEUxOEQwMUZDOQotOjEwRTY5MDAwMEZDNjNEODkyQjBFRjZGOTEwNUZDRjFCMkQwNkNERjk2NQotOjEwRTZBMDAwRDgxQkZDREVERDdCNkQzMkI2MkZCMTg5ODhDN0FEMkQ1RQotOjEwRTZCMDAwMzk3MUEwMzc1QUFDRUVCQjZEQTAyRjhFQjVENUMwMTIwNAotOjEwRTZDMDAwOTQ3ODlGNjJBRjREM0NCMEY1OUFEMUY0Q0Y4OTFEMDY4NgotOjEwRTZEMDAwM0JBMERCNzFFMDc5MTFGNkVCMzg0OTQ4OEM0MDdBRDhFMQotOjEwRTZFMDAwNkY3NDNDOEY3QUJDMzczQUQ4Nzg3NDFENkYwMUJGMkE5QgotOjEwRTZGMDAwRjBBNzlBRkZBMTM0NUE3RkEzNTU4QTg1RkMyRTA1RkUwOAotOjEwRTcwMDAwQ0EzRTk0RjkxREY1QzRCNURFODJBQ0U0REE3QTgxQjg2QwotOjEwRTcxMDAwQjM5MjVGM0FDRTRFOTQ3RjJGMDFFOUQyNjg3MzNENkE3RgotOjEwRTcyMDAwNjNGNjBFREFENzI3RjczMEJCRTgxNUFFNDc0OTUyRTE1QQotOjEwRTczMDAwNTA4MDlGODJBNzdBMUI4QjMzMkFFQkU5NkRGRURGREJDQgotOjEwRTc0MDAwOTg5RTU0Q0FFRjRCRDc5QjY0ODcxN0U5NjYxQkNCMEY4MwotOjEwRTc1MDAwNzc3OEZERTY1NEM4MjM2QjRDQzU3RkNGNDk5NTY3RkI5RQotOjEwRTc2MDAwN0JBNEU3OTNEQTdCMDUxQkRCMEMwNkY4MEVBQzYyODcxMwotOjEwRTc3MDAwMTA4M0U2NkQxRkVERUIyMDlENDlGNTQ4N0Y4RDg3MDlERAotOjEwRTc4MDAwRjI3MTY5REQ5RDJDRUU0OEU1MERCRjdGMERDRkQxODE4MwotOjEwRTc5MDAwN0ZGODc5N0E3RjgxOTYxMzlCRDZBRjE4ODhGMEY1REJFNgotOjEwRTdBMDAwODBBRjQyNzBBMjdDMDM2NTU1QUQxMUU4NzVEMTUyNTYxOQotOjEwRTdCMDAwMTZGMzczRTk0NTZCRERDODlGNDVFQjU4N0VFMTFFNUJBMAotOjEwRTdDMDAwMzJBRUU3MENBNzU3NjI4ODFDMDBGOTI3MkUwRTdGNjUzMgotOjEwRTdEMDAwREQ3OTlDNkU0RjM1M0NEMTBDRjM1MkZBRkExM0UwNzM5RAotOjEwRTdFMDAwNTJFMzYzNEZDMzcyMTU3QTNEQjU0MUM2NzE0QTIyQjVGMwotOjEwRTdGMDAwRTdGNkFEN0NCQzZEMDcxOEJENEZEQzIwRTdDMEZENUZDMAotOjEwRTgwMDAwMTNCREM0MEU3MUVDMzczNjZDMTQ0MTdFQkYwMUY0OUMwRAotOjEwRTgxMDAwQ0NGODFDRjRFREM5M0QwRjQ2RkQwMkY0NUNCQjgxNDAxMQotOjEwRTgyMDAwQkNGQzE1MjMyOUQ5QTJFMjhCRERFQjVGRDVGMDZGNjkyMwotOjEwRTgzMDAwNURGNTM1MTg5NzZGOEIxNTQwQ0UyQjdDQUJDMEZEMTU2MQotOjEwRTg0MDAwQTNGMzJBRTRGRkVCNzRGQzNGOTVCRDJGNDczQkIwREZGOQotOjEwRTg1MDAwMTM5Q0ZGOUY5ODQxRjk5RjNFOEFEOTEwMjNDMDM4QUY3RgotOjEwRTg2MDAwMThDM0RGMDdGN0Y1MEZBNEJGQTA1QzZERUIyMTU3QkZGRQotOjEwRTg3MDAwNjY3MkI1Q0Q5NjRBRTdBRkI4QjYxQkUzMENDMUY1NzEyOQotOjEwRTg4MDAwQkE3OTYyQUE0MjM3QzkwMkMwQkY5NjYyNzAxOEMwOEJCQgotOjEwRTg5MDAwQzIxNUU4OTlEQUNEQjdERjkwODY1Q0Q5MjJFMTM5MEY0RAotOjEwRThBMDAwM0Y0N0UyRjkxRkNBNzcwMjBBQkY4NkU0OTlDMkI3NkVGMgotOjEwRThCMDAwNzMzNEQ4RDU1M0FCNTY4MDVEMUY5N0U3NDVGQTNDMjU5NgotOjEwRThDMDAwQjg4N0M2NTI3RDc2MEFGODM4OEMzQzM4QzFFNUM3NTcwMAotOjEwRThEMDAwQjJGQjYyRjdFRTBGMDA3QTJFQTExRTIyRUM4N0FDMTM3QQotOjEwRThFMDAwRUM4MDE3QTVEREIxOEVEREMzM0EzQzVBRDA5Q0JGMkIxRQotOjEwRThGMDAwRjUxRjBDRUY0MDhGRkI0MTg3NDc2MzdDM0E2MDg0M0NGNwotOjEwRTkwMDAwRDUxMTNFQTZDNzg4OTA4M0ZDNDAwQzU3MEYwMDNFNUI5NAotOjEwRTkxMDAwNDRGNUQ3Q0QyQUZENzU0QUFFNDUzQTU1RTA3MDc5MzRCNQotOjEwRTkyMDAwOTM1RjVGQzVCMDdERkY5NUQzODUxNUUyODVBQTczMkZGMAotOjEwRTkzMDAwRUE5MDQ4MDJFMzY3NTE2MDdDMkVDMkY4QTdGNjRDQkExMQotOjEwRTk0MDAwMEFFOUZEREFGMEY0NkUwN0ZGMkExNkZFM0RBN0Y1NDg0NgotOjEwRTk1MDAwOUYzMTMzRUNGODFEQ0IxMzkyMzMyMjQ2NjMxRkY5QjA3RAotOjEwRTk2MDAwRENCREYxNTdFOEQ3MDFGRDAyQkZGNzQ2RkYyNTQwRkZBOAotOjEwRTk3MDAwMjQwQ0RERkIyOEREQUJGMEE3RDAwMUE1OEI2QkEyNTVFNQotOjEwRTk4MDAwRjI0MTRGMTdDQTc5QTMwMjk3NTc3NEU3OTU0RjQ3MzM1RgotOjEwRTk5MDAwNzlCMDgwOTc4RTVFRjI2Njk0RkRGQzYwM0M5RkVDODFCRQotOjEwRTlBMDAwRTdGOTBDQ0YyMUJFMDI3QzJCRjJFMTY3MTdFMUFGM0QwNgotOjEwRTlCMDAwRDE3NjZDQUZGOTc0MDFFNkE5RDRGMjczQUI3QTNFOUZCRAotOjEwRTlDMDAwQjJFRUE1RDE4MkU2N0M0QjdGRUUzNENBRTJCRTJCNUE3MgotOjEwRTlEMDAwNzczRUVBNDgwQkQxQzczNDZFQ0YyRUQ5NjhDMjczRkY5OQotOjEwRTlFMDAwMkREMDAyNzhEQkNERkVCRDZDRTUzREJCNDQwRDRGMEE1QQotOjEwRTlGMDAwRUExNUQxNEM4RTJCRjRFMTU4NjYyNEMzQThGRkYyNTVEQQotOjEwRUEwMDAwNzJFMTZFQzhGRkY5NTlBQjM3NkYzNEREQzcxNkEzNzdEMwotOjEwRUExMDAwRjZCNUU4MDczOEFGODJGMUFGQ0EzM0Q4MjExRjI0QzY1NAotOjEwRUEyMDAwNjUxNzIwREU4MTI0MEE3Q0I4OEZDRDMzMkVENTc5MTk2NQotOjEwRUEzMDAwRkFDOTBFRTczODkwMDcwRjczN0MyOUY4NTVFMEQwOUI5MAotOjEwRUE0MDAwOUVFQjBEQUY3QjM4N0NFMjc5QkI1RThFMTQ3M0ZFOUUyRAotOjEwRUE1MDAwQzJGQjVENUM4RTc4NDVFMDI3MUI3MTJGMTc2MUZENTk2NQotOjEwRUE2MDAwNENGRTA1RTU0ODE2QzE3M0M5OTc3NTcyRTRFNTlGNUVEMwotOjEwRUE3MDAwOEVCQ0FDOTEyMzEzREFDMkNBMTFGQTBCQ0JGRkYxMUI4NwotOjEwRUE4MDAwMTZBMjFENEIwRTg3Qjc2Mzc3NDYzMzNEMUMwRkZBOTNEMgotOjEwRUE5MDAwRjY4QkY3QjJGM0RFODczOURENTI4QUM0QkNDOURBMEREMgotOjEwRUFBMDAwMjZDQzEzNTdFNDkwNkQzNkM5ODE3RkFGRDkwNkZBMTY4QwotOjEwRUFCMDAwN0FDRDc2MUY5RTBDRTdDNTQ5NDYwNzlDNUY5RjkyMDM1RgotOjEwRUFDMDAwODhGNzUzRDQwMUFGNDVGQUM4QzdGQkM3QzNDODIzMDJCMAotOjEwRUFEMDAwRjExMkVGNDc4M0QwRUY5QzI2MzYyMTlGMkM5OTQ2NTBBOAotOjEwRUFFMDAwN0ZFRURFNzgwNUQyNTU0OTVFOEEwMDc0NUI1QTE3MjNBMwotOjEwRUFGMDAwNDA3QkVDNTRCQjAxRTQ5NEIyOEYyQjk2MTlDOEIwNzFFMwotOjEwRUIwMDAwQzgwNzA3RDQ3MkU0MEE2RjE1RkVCQkNENDNFM0RDNDlBNgotOjEwRUIxMDAwNzIwQzIxNDcxRjNERkIzMzc1QkNBODhERDZENUYxMjI2MQotOjEwRUIyMDAwNUE3RkUwRkJDNDhCOEU0NjA3MUU4MDc4RDEzRjZDQUVDNwotOjEwRUIzMDAwNzY5ODc3OTQyNUZGMjhFQUI3QzQyQTkxQThFNEQ2QzUyOQotOjEwRUI0MDAwRUNCNzFGNEEyRjk1M0MyRTQ1NUFBOTM0NEVEMEM0ODFBQwotOjEwRUI1MDAwNkZBQjczNjAxQ0Y4MkI1ODRGQzU4MEUzNEZDMzcwNzhDMAotOjEwRUI2MDAwQUY0NjU4N0I5QkFEQTMxRjk3MEJFNDEzODJGOEU4OTc0MQotOjEwRUI3MDAwNUYyNTQyRkM0NTkxM0IwNjdCQUNFMjJGMEI5MDk3QTFCMQotOjEwRUI4MDAwRjBEQjdGMDMxQzdEQjVENzAwODAwMDAwMDAwMDAwMDA5MwotOjEwRUI5MDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZDRDdEMDk3ODk0RDU5MAotOjEwRUJBMDAwRDVGMDdERTc5RDJEQ0IyNDkzQzk0Mjc2MjZFQ0JCMDM5RgotOjEwRUJCMDAwMDlBQkIxNEUwODYwOTAwNDA3MTA0NDhEMzgwOTkwQjAzRAotOjEwRUJDMDAwNjQwMzkxRDJENjk2ODEyMDA2OEExODJCQjU1NEIxMEVEMwotOjEwRUJEMDAwMTRGQTUxNDUxQkI2MUFEQkEwMTM0MDFBMTQzNDU2QUQ3MwotOjEwRUJFMDAwRDhBRkE1NjE5MTFEODk4MEZERDM4QUU1M0JFN0RDN0IyOQotOjEwRUJGMDAwMzNGMzRFMjYwMjZBOUZFNzBGMEZDRkNENURERTdCQ0Y0QQotOjEwRUMwMDAwM0RGQjNENzc0OTJENjM3OTNCMjIxOTlCOTBCMzUwRUQzNQotOjEwRUMxMDAwMDZBOUM5Q0MzQzE2MUI4MzFGMkY2MzQzNzkzRTdBMDg5MwotOjEwRUMyMDAwRTY1OTk4NkIyMDYzNkJGMjc1NzlERTAxOEM1REM3OUZBNgotOjEwRUMzMDAwM0JGRDY5QTIxNTNFOEU2NzZDRkVENjMwRUI0OTMzQjVCRAotOjEwRUM0MDAwNjdEN0UxN0Y3OTVEOEMyNjVGNTk5RjY0M0REOUM3OUY2NwotOjEwRUM1MDAwOUY4RkJGMjRDMUZGMzM0Q0NGMTIxODJCNjNFMkE3RTE3MwotOjEwRUM2MDAwQ0JERkZGNzAxOEI0QzdERjU1QzZERTU0REQ4OTU2ODA5MAotOjEwRUM3MDAwQTdEQ0RDMTJENUREQ0VEODMzRjlDNzEzREM5MUQ0NTIzMgotOjEwRUM4MDAwODdERjNEMjJDNjc4NzFCOUUzQkRERTcxOEM3OURFNTUzMAotOjEwRUM5MDAwRDkxNkM4MEYzNjE5M0Q0QTM0RkNFMjY0NzY2QjgyRTgxNwotOjEwRUNBMDAwMEY3RTk0MDZDNTY3MTkwNEY5N0Y0MzU1MkM2Mzk3RkVDMAotOjEwRUNCMDAwQURBM0Y0QzU5RkI4RjIzMkUwRkI4QTdBOUQ2MzM5QjQwNAotOjEwRUNDMDAwQUI2ODUwMThDQjYyQ0NEMTk1NzlDRDE5OENENTg1NDdERQotOjEwRUNEMDAwMEQ2MkQwNUZDRUJFNDhBNzAxQ0EyRjI5NjZBRjI5ODMzNwotOjEwRUNFMDAwRDEwMDA4ODc0MUMyM0ZBMjM1N0QxQkQ0NTczNzk4RDg0MQotOjEwRUNGMDAwNkFDODVFQ0E2MUFDMTlFMUQ1M0JBMkQ5MDAzRjdFMDc2NAotOjEwRUQwMDAwMUQ3RUE2MEZDQzAwQ0E2QjFEMkUwQjYzOUJDMjc4RkYyNQotOjEwRUQxMDAwOUJDMjY0N0I3QjM0ODNCNERCOTJEMUVDMDRDMEE3RDc2NQotOjEwRUQyMDAwMzMxNjBERjQ4MUM0ODM2OUY2OTI2RTAzRjQ5OTMwMUY5MwotOjEwRUQzMDAwM0RGMzE4ODA0RUQ5QUQzRTE1RjFEMkFERDVBRTYzOTFGRAotOjEwRUQ0MDAwRkU3MUY0QUQ4Q0U2REI0RDZGRDczOTYwRkMzQTgxRjc4QwotOjEwRUQ1MDAwOUQ0RDNCNTQzREUwNzNEODk4REE2QTE1RDJEMjI4RjcxRQotOjEwRUQ2MDAwNThDNEYzQThFQ0FBNkEyQzhGQ0RGN0E4NkU2ODlGQTVBQgotOjEwRUQ3MDAwNTRFREIzMDA1RUQ4NzhFNkQ4MDJFNUNDMDc4MzhGODRFMwotOjEwRUQ4MDAwRkExNkQ2MTgwNUQ5OTgyMzJEQ0UyODI4MUY3NUM2RDk2RQotOjEwRUQ5MDAwMzgwMEU2MURFRDYyMEFGNkM3RDgzMjFBQkY1RkE0Q0I3MQotOjEwRURBMDAwODVGREIyMzhBNzUyMDBGRDBDRkIwNzIzQkNDODdFNzY1OAotOjEwRURCMDAwMzY4RDU2RUMwMDZGNUNGMzE4QzUxRUMwNUYzMDRERTIxNwotOjEwRURDMDAwQUJGNUNDRkU1M0VDRDc3MzQ4RTc0MEJBREFFQjk4NzM1NwotOjEwRUREMDAwMjNCNEVGRkE3MkJGMzEyQ0NBREZCRUQyQUFEMDc4QjcwMwotOjEwRURFMDAwQkJEREI5NDY0NkYzNzlEODBBREY4RjlDRUVERDY3MDBCQwotOjEwRURGMDAwNzg4NkNGRjFFQzMzREEwM0U2MzM5NzUxN0YyOTJEMUU2NQotOjEwRUUwMDAwOUE0N0QyMTE3NzBFQTY4QjJEMzFENENGQTgzM0JFQzYyOAotOjEwRUUxMDAwMDFEMEFFNEIxNUNDMDdDQUQzOUEzRjU0MTBBRjY5NTVGOQotOjEwRUUyMDAwQ0QwQUQyNzE2N0QzNUU4MjM3QjU3OTNGNEY4MTExRUEzRgotOjEwRUUzMDAwMjBERDAxNzI1NTE3MzA4RkM1MTYxRENENjNCMTQ1QTE3OAotOjEwRUU0MDAwNzRFNUM1OTk4OTJFQTg3RkM0RUE1RTZDMTlFQTlGQzc0QwotOjEwRUU1MDAwQ0ExQzc3NjIxNUY0QkZCRUE5NUJGQjdDN0IwMkJDQjcwMgotOjEwRUU2MDAwQzE2Nzg4MjdEOURGNzJBQjkxRkE2OUIyQjg3Rjg0RjNBMgotOjEwRUU3MDAwQUI5Q0RFNzIwMDc5NkY0N0QzOUZBMzQ4MkUxQUUyODhCRAotOjEwRUU4MDAwQkUwOTg3OEUxMzNEMTI5NjAwQ0VBMDc4RkRBMTg1MEE5QgotOjEwRUU5MDAwODNBQUY1ODU0MDMzQTUyMzlFMjdCOEREOEUzMTk5ODg1NgotOjEwRUVBMDAwNkY4MDlGRjhDNzFBMzEwOUY4RjI2MjhDQkIwNkM3OTFEMAotOjEwRUVCMDAwRUQyNzE0RDkyMjUwNUZCNEU3QzU3N0NGMkU2NThFNTk2MAotOjEwRUVDMDAwM0QwMENGRkI4Qjc3QjI2RTQ4NzdGNzEyQTQ3QjdCQkJGQwotOjEwRUVEMDAwODE4Rjg3MjEzRjMxOEJCMzE2RkJCQkE0QjBFOTM4Q0VCRAotOjEwRUVFMDAwNEI5ODQyRjk0QjA2OUU5N0Y4RkFBQjk1RTNFQjExRUI4MgotOjEwRUVGMDAwQTRDNTk2Nzg4RTI3MkJGMEYxNEI2MUJDNURCMDFFN0FDRAotOjEwRUYwMDAwRDdDQUJGQjMwQjdFNjFDRDlDNUY3MDFFQThCRjY0QkIyOAotOjEwRUYxMDAwRERBMkRGREI5REVFNUMzREU3OTNDRDA4RTdDODExREVBNwotOjEwRUYyMDAwN0RDOEI3QzNGMzNDRkI5MEZGRDM5OEUwOTMzQ0NFMjc1QQotOjEwRUYzMDAwQzFGQ0JFQ0Y2QUEzN0U0NjlENjk2NTg4RjcyQzg1Qjk2MgotOjEwRUY0MDAwMDJFOTJFRDNENzEwQUVBMUM4REZBMzg5N0Y0MDFFQjYzOQotOjEwRUY1MDAwRTM3OEMzNTJBQTU0MDM4MDEyQzdBQzEzNTg3N0M2REVCNQotOjEwRUY2MDAwQjZEQUE5NURFNjA4RTczRUU0MzdBQkQzNDVGMjdDMjA4QwotOjEwRUY3MDAwQzI0QUU1MkIzMzM4N0ZDMEY3N0Y0MEZDMDVDQkQzMkU0OAotOjEwRUY4MDAwOTRBMzAxN0UzOThBNDM3RThDRUNDODhGQkYxM0YwQkNGQQotOjEwRUY5MDAwMkRFNEE1NjNGRkVFM0Y2MUZGNzFDRDNBQTcwMjlEMEMwMgotOjEwRUZBMDAwM0YxMkU5NjVEMDc0RjhBMjJBMTVFMThGNjNDMEZGMDAxMwotOjEwRUZCMDAwQTA2RDhFMzUwN0U1MkNBNUNDQTEyMDVEOUIyMjVDODczQQotOjEwRUZDMDAwQURENDBGMjNCREI5MzI0N0U3QUQ4NkVGRTY0NjNCODlBNgotOjEwRUZEMDAwN0VERkQ4M0VFQzY3NjYzNkNDNkYxRkMwMUVGQzE1RTFBNQotOjEwRUZFMDAwMDM3QkIwQjYwOEY1RjQ2RkZGNjk0NDNENkE5N0YyRDcyQQotOjEwRUZGMDAwMzQyNEEyMzg4MDNGQUU0OEJERTBBN0Y3NzFEMjBCNDE2MAotOjEwRjAwMDAwRjQwRUQ2NzNDMUY0RjZFQjA1QUQ5RTAzN0M1REUwRjQxRgotOjEwRjAxMDAwNzA2NzIyOUZDNTM1MkY1MkI5N0VEMEVBQjVDRUU4RDFCMAotOjEwRjAyMDAwNDEzRjA4M0E1QzhBNzA3RTgxRjg1QzBDMzI4OEUzN0E1MgotOjEwRjAzMDAwNDZCMzNFNThERTk5MUQwRThCODlBNDc2RkY0NTNCMUNENgotOjEwRjA0MDAwMTYxM0RGRDEwRUVCQ0NBRDA3MTVDMDQ3Nzk4MzZBNTc5NQotOjEwRjA1MDAwNjEwQUQ1OEZEOTlDNDhGRjE3RUIxNDg3MDlFNUE0NDFCNQotOjEwRjA2MDAwMjU3RTc4NzE2NTM4RDk0QjA5RUY2N0JCQTMwN0IxREIwMwotOjEwRjA3MDAwMjAxNUYyQ0ZEQ0REQzk4RTU2QzY4OEYxRUQ5MDg3RjEwMAotOjEwRjA4MDAwMkY1OTc5RDY2ODc1MjdDNTA0RTg5MzE3MUJCRTA4NDMyNgotOjEwRjA5MDAwM0NGNzRGNjQwMzRFQzY2MjBCQTdENjBFODMwODI5RjBENwotOjEwRjBBMDAwQkQwOTdGNTMxMEFGODM2QjU0MTRBQzY5RUU5RDI2OTU1OAotOjEwRjBCMDAwRThENjFERkIxQkNFNUFGRTlDMEQ3MEJEQkM2REI0Q0VCOAotOjEwRjBDMDAwMURDODM3RjU1NzY3RUMwNUY4MkIyM0I4NURCRUI0RjdCQwotOjEwRjBEMDAwNUEyRkU0MzM1OTdGRjc5MjYyRDI3QjNGMDcyQjE5MTNFMwotOjEwRjBFMDAwQTAxRkRGRUU3MzgyRUI2MTU2NjgzREQ1MUY4Nzc2MkEzRAotOjEwRjBGMDAwRDcyMzAwODU1MUU2M0U3QUY0MjdENDcwODdBQUY1MjdGNgotOjEwRjEwMDAwODgzOUFBN0IwMjdFMTA3RjhERTE4NEJGRUE5RTIwNzczQQotOjEwRjExMDAwMTkwNEU3NDhFQzdGQkZDNUM4OTJBMEZDMEFDODIzQjYxMwotOjEwRjEyMDAwOTM3MDdGMDM3ODQ3MDdFMkQxMEY2RkFBRjU1NDg0RTAwQwotOjEwRjEzMDAwMEJENTBGNUYzQjVEOTAwRUQwQkY2QUQxRDMzQzJFQjE5MwotOjEwRjE0MDAwNzAwN0QyQjNDRUU4NjQ0ODdGQ0Y1MUUxMUYwOEJBNTVBQgotOjEwRjE1MDAwMDg5RUJCRDQzMEY0ODgxQkU2RjdFMjkxNTQwNzdFN0YwQgotOjEwRjE2MDAwQTlGRTRBOTgyRTEyRkQ0NkY3MTQ5Qzk3OUFENjFBODU0NgotOjEwRjE3MDAwRjY3MDVGQzM5NUJFMkQwMzQ4QkY0REM1RjIyQjg3NEU3OQotOjEwRjE4MDAwRDhEQzAzQkVEMUZDNjY4NEE2ODc3NjdFOTVGQUM4OUE0MQotOjEwRjE5MDAwNDBGRjUwNjE3QzdFQzE3Q0E0MzQzNEZFNEIxOTQ0RjJBNAotOjEwRjFBMDAwQzc1MDFGN0FEMjk5QjcxQUU2QkQ3MkEwRTBBNzdCOTkyMwotOjEwRjFCMDAwMURFNTNFOThERTQ2QUJBQjIyMjY0MDZFRkYxNUVEQUE1QwotOjEwRjFDMDAwNDJCODcwOUM5NDIxMzRDRjg1OTgxRjc0Nzg2NkE2NDEwQwotOjEwRjFEMDAwODdGMzFCQzNEMDZFNEE3RjBGRkRFRkIwMjE3RUZGNEUzOQotOjEwRjFFMDAwQ0VBRjdERkUzREFGMEQzQUM0NjhCRTNGQzY3MTAwRjg5QwotOjEwRjFGMDAwRTUzQTgwQUYxMjhDQzFFQThDQzA3OUZCODgxRUU1NjJDQgotOjEwRjIwMDAwN0VFNUU2NDg5RjBBRjM2MUJCMEMxNzVBQTQxRUU4RDZCOAotOjEwRjIxMDAwMTE3RUEwNEYwREMyRTcxOUVEMzhFMjQ2RkFGRTM1RDI1NQotOjEwRjIyMDAwNTE4REY4RDEzNzVCRDE1Rjg1RjlBQ0M2N0EzNkEyMjgwQgotOjEwRjIzMDAwMTFFN0RGMkZEMkI5MDVGNUZDNEJDQjE4RjFGM0E1NTczOQotOjEwRjI0MDAwOTg3NzEzNEM3NkZCN0UxREYxQ0I0NkQ2OEZGOEJFOUY4OAotOjEwRjI1MDAwRUVGMjBDNTcyNEM5RjMzQTg0M0JBQkI5NTY4NzdBQjcyMAotOjEwRjI2MDAwQTdEN0FFNDM3RERBQjdCOTRFQTcyMzNFNzBGRjIyODZGQgotOjEwRjI3MDAwRkNFNDk5NTdGNDAwNUZGRjZENTVFQTM3RTQwNzZGNjhDNwotOjEwRjI4MDAwN0VFRjQwQUZDRDgxRjQ5Mjc4Q0IxNjdDOTA4RDc4NDNBMQotOjEwRjI5MDAwODNEMEFBQkZEMDYyRjZFMzBERThDMzUyNkMxREZCNjNCNgotOjEwRjJBMDAwQUMyNTFERjFENEY4RkFFOTVFMkREMDVGQzUxQkE3NjcyOAotOjEwRjJCMDAwMjA1RTJBRkU2MDIyMjYxOEYzODdCRUQxQzhFRjlGRTVBNAotOjEwRjJDMDAwODRGNjY3MkUyQ0FENzJFOEMxOUY3QTI1QTYxQkQ5ODVERQotOjEwRjJEMDAwMzJENjZDNDQzRkExQkM2RTgxNDMxRkEwQ0ZBNUZGNzYwMAotOjEwRjJFMDAwQzhEMDlDOEZGRDFGMUFBQUIyNjU4MEU3MkI4RUUxNUQwNgotOjEwRjJGMDAwNTgwODNCRDFFRTJGQTFCRjA2QjAyRjQ3RDgxMUNGQUY5MgotOjEwRjMwMDAwNjc0NTczRkZEMTQ2RjYyMEI4RkRBMUE1NzMxQzYzN0E0QgotOjEwRjMxMDAwNzRERURGQTFDMTYxRDNCREYwN0Q3RTkwMUY3NDM0ODZBMQotOjEwRjMyMDAwREJCNUI2MTg2RTg3NDEyMTNCMTFDRThCQkZCNzc4M0Q1OAotOjEwRjMzMDAwNTA3NDcxQzg0NzUxMENGRENDNUQxRjY0N0E4MDhGMkVDQwotOjEwRjM0MDAwQjJFNjQ3RkU4ODcyNzYzNTkyRDY3MUY5ODMzRkNBNUM4MQotOjEwRjM1MDAwNjZGMUNCRTUxRDIzRjhEQ0VGNzhFRDcwOTQxRERBRTc1QwotOjEwRjM2MDAwNkZERjE3RTcwOUMwREYxRDRDN0ZCNTlEQUYzMzcwNUNDMQotOjEwRjM3MDAwNDZFMzMzN0Q0QjJGQTQwN0ZCRTNEOTA0M0JBNEY5QUY0RAotOjEwRjM4MDAwQkYxNUM3RjkyMDQxODc3NDVFMjRGNERCRUZCMDI4QzBCNQotOjEwRjM5MDAwREZDRTVGNTI0MTdDMjRGM0U1NkQ2NkU2OEQwREM4RUI1MAotOjEwRjNBMDAwOUI4REI4MDQyRTZGOEI2NDVFNjhCNzM3QzYxMjQ3N0FBMAotOjEwRjNCMDAwMjY5OTI1QTM5RUU5MTQ1RjM3ODlDRkUwNzI4OUNGNDM1MAotOjEwRjNDMDAwODNDRkE2QTM1RkYxNTkyN0ZFNzA2RjFCNkZEN0NFRjdDRgotOjEwRjNEMDAwNEJDMTRGRDdGQkYzRUY3Q0E1M0VFQzBBRjE1RDg0OEQ2QQotOjEwRjNFMDAwRDNFOThBNjM2NDE3RjRGN0YyOERCRTFFRDYxMEVERTRGQwotOjEwRjNGMDAwRkEzMjE4NEY2RjVGMkI4REMwN0U3RkRGNjZDQTBCMDUxOAotOjEwRjQwMDAwOTdERUE2RkI3NjdFQ0EyMTgwMkFDMDFGRENBNkJBNTNFRgotOjEwRjQxMDAwNkRDMjFGOUMwQ0Y5OEFCRTU3QzZEMUJBNUFGMjhCRDA2NgotOjEwRjQyMDAwN0I3NzMwNEYyM0NBNkYzMDdGNDg3QUY3QjAwMURERkExRgotOjEwRjQzMDAwQTM3MjY2Mjk0OEI3OEIzMTc2Q0UzNzQyMUVBNDdDMDQ2RQotOjEwRjQ0MDAwRTMzMTM4OUQ2MDY0RUU1MEVCODBBRjYyMjQ1RUMzOTg3OAotOjEwRjQ1MDAwMDdGNEUxMjMxQjBENjRERjBGNUZGQkY4REU0Q0UwRjdFMAotOjEwRjQ2MDAwRDMxQjBDRDZFNTMwRTQ5QzE3RjZBNTNFMDNGNTczMDZENgotOjEwRjQ3MDAwOUJBQzBBRTQ0RkRCN0QzRDUwRUU0QjVGNTA1REM4MEYwNwotOjEwRjQ4MDAwQTczNzNDOTIzMDEzRDJGMzIwQkY2NTAwNDdFOTQ2MDMwQgotOjEwRjQ5MDAwOTVDRkQ5RjgyODk1OUYxNTcyNURGQTQyN0M3RkQ0OTc1NQotOjEwRjRBMDAwODdGN0FGNEU0MDNBQ0VGOUVBODk2OTQ4OTdFRDQ2NkI0NwotOjEwRjRCMDAwRkZDMTkwOTY2RDUzMUM2MzAyRjAzRDZGNzM5ODI2QkY5OQotOjEwRjRDMDAwNURDN0U2RTAzQzI0NUQ5OUUyNkVBRjQ3MTMzRkQ1QTZFOQotOjEwRjREMDAwRkI3NjcxMUY5RkQ2REYwNEZGNzJBQUEwRTNDNDI5MzAxOAotOjEwRjRFMDAwRUY4QUExNTdDOEFGREY3NzIwOUNFQ0M5OUI5MTJBRjkxRQotOjEwRjRGMDAwOEZCRUMxRkZFRjlEREIyMDlGRkI5NURFNDFCRTlEQTAyRgotOjEwRjUwMDAwRjM1ODQxNjdCMDVDQTRCNzRCQ0MzQzlGRkJCQTlFRkM2MAotOjEwRjUxMDAwQ0Y1QzhCNEFGODg2RjY5MTYzQTFGRTdCQTJCRDBGRjQwNwotOjEwRjUyMDAwMkNDQTIxNTNCM0Q3OEQ4NDc2NjNBMzBEMENFREQwRjc4RAotOjEwRjUzMDAwN0NGM0YyMTlEOEM5M0JEQkY0Qzc1QjAyRTYzMzlBRDVGQQotOjEwRjU0MDAwRjY0MTdGMzg4NzE5ODJDQTlEN0EyQ0NGMzU2QkNCQzc5RAotOjEwRjU1MDAwRjZCOEZCMkNGQTBGNjNBRERBNzJDOTc3OEZEOEI0RkExQwotOjEwRjU2MDAwNjJERjgxNzMzRjlCMDBGMzJCMzlBNDkyRkY3QzIzN0RFNAotOjEwRjU3MDAwRkMyRUMyQUY0NzNBQkY1REI4MERCRTNCMkNCMDcyRjg0RgotOjEwRjU4MDAwREFFOTE1NDlDODU3MjMxNDg2RjFBQ0QzRDc0MkNCRTM0NwotOjEwRjU5MDAwMUZBNDVFNjY0MERGM0U3RUZBMTYzOEU2QjZFNzUxREMxMQotOjEwRjVBMDAwRUYxOUIxQTAzRDhGRjBERkJDMUVGQjdBM0Q3NTlCOEQzRQotOjEwRjVCMDAwQzczMzgyRUQ0NkIwRENGQ0I3RUM0NkZFRTBCN0QyM0Q4NwotOjEwRjVDMDAwMTY0QTdGODNFOTg1RUQ1Q0VGMDZFQjg5NjAzQjIxRTExQwotOjEwRjVEMDAwMEE4NkI3QkM0REE3QjEwRjVGQTExRTE5MUE2ODI3OEMwOAotOjEwRjVFMDAwNjQyN0JFQzNGNTcwODM2RDY4QzdGNTMwRjgzMTg0MkY4QQotOjEwRjVGMDAwQ0YzMDNEQURDM0MxREY2QUM0NzYwMzIyRURCMTM5MDAxRgotOjEwRjYwMDAwRDIwQTZCQjcwOEIyN0YxNkY3N0U1QjQwMUNBQUZGQjYyMgotOjEwRjYxMDAwNUExREVBOERGNkY4OEM0MTFCQTc5MUVCRDU3Nzg0OUQ5NgotOjEwRjYyMDAwQTgxM0ZBMUNENkFCQjRDRURGMThFRTRFRDRFM0I4Qzk5QgotOjEwRjYzMDAwNDZDNzk2OEM4RUY4Rjk0OEI0RUZDQ0NGOTU3RUFDQkUxOQotOjEwRjY0MDAwODZGQkIxOEY1ODVEOUEzODE5RUI5M0E4ODlGQkEyNUZBRQotOjEwRjY1MDAwOEVGMkVERDkxQjRFRjNGQzU0NzEwRDQyMzlENDMzRTdEMQotOjEwRjY2MDAwREY2RDAxRjRBOTM2NzBGODgzRTE4OThGRTU3NjkyMzE3OAotOjEwRjY3MDAwMTdGOTA3QjI3Q0Y2RThEMDdBNUM4OUQ1NTNGQjlDNjcxMgotOjEwRjY4MDAwRUY0RjQ3RkZFREQzQzYwN0QyNTFCRjdFMUExNEU3RUQwNwotOjEwRjY5MDAwNEMxRTlFMTZGMkZBQTRCMDIzMzEyMjJFRjAxNENBMTE4OQotOjEwRjZBMDAwRTQ0MURBOUREQkUxRkI1NTRCNUQyNDU3M0Y1RDNBOUQxQwotOjEwRjZCMDAwRDI2Nzk2MkVBMUZBMTNCNjBDMUFERjlBRjM2NzU3NzcyMgotOjEwRjZDMDAwQzBEM0M5MzUyQUQ5ODlEOTQ2NTdBRjE4RjhFRUE0NTlGRAotOjEwRjZEMDAwNDdGMTg1MTM1NTkxNzlCQjIyQjE5Q0QxN0E3MkY2QjM2QgotOjEwRjZFMDAwMTNCNjc4MDJFMjdFMjc2QzdBQTI0MzY3RjM4QzhGRkQxMwotOjEwRjZGMDAwNjZGQUJEOUNCNTQ0QTFCRDZBRTdENzIzMURFQ0I1MkRDNAotOjEwRjcwMDAwMTZFMzdGQUMyNTAxREI1NTJBQ0RCREI2MjkxREM3Qjc1MQotOjEwRjcxMDAwMzI2NzdDMkNGMjk3OTFGNTQ3QjlBOTBCRTdGNjI4QjgyOAotOjEwRjcyMDAwNUQ0QTJDRTdDM0JGQTExRjBCRkQ3RThBNzYyQjg0OUUwQQotOjEwRjczMDAwQjEwQjNBMkZCNDM4RURCMUE0RUYyMkM5NUYyN0I4ODFERAotOjEwRjc0MDAwNUZCRThDNzI3NjQ3Qjg2MDVERDYxM0QzNjE1RDc4N0NGRQotOjEwRjc1MDAwNkVCMUM1MkFGOEMzQTlGMDc1OEVBQjVGNkM4OEY4NUJGMwotOjEwRjc2MDAwNjdGMTlFNjAzOERFMTE3ODBEOEUwM0M5NTRDNjgxODYxQwotOjEwRjc3MDAwQzZGMkY5QkM2REIzNkFFMjQyMThGRjBFMTVGRkY5NzlDMwotOjEwRjc4MDAwMkNEN0EzMUJDMzVCM0MyQUNBQzMwMzdDM0RERTI1REIwRAotOjEwRjc5MDAwQTM2MDdDMkIyNUJGMzYwN0UzNUY3N0M1RjJCOEE1MkRBNAotOjEwRjdBMDAwQ0Y5RDg4RUJGNkU0NDRBMzAzRTMzNjM3MkI4RjAzRUFCRgotOjEwRjdCMDAwOUM3QzVGQzBBRDIzMzhENjM3N0JDMjdBMDE1QzA5Q0QxMwotOjEwRjdDMDAwRUUxQzIzQTQ1MzcxMzEwREY4RURDMkFBOTYyMUREQTBFMQotOjEwRjdEMDAwMUQyMTIzNkI3RkI4NTc5MThCNkM2ODkyMjlGNDI4NDBDOAotOjEwRjdFMDAwMUE4NjcyNjc4QzcyNEY0NUJBMEM5QjU1NTU4RDcxRkEwQgotOjEwRjdGMDAwOTQzMkJFRkY3MDU2NzE3N0I1MDE5RjlDN0QyQjNDQTQ1RgotOjEwRjgwMDAwM0Y1QzIyRThDRjk0RDFDOTY4RkFCMzM2MUIwOEFFQUM4RQotOjEwRjgxMDAwQ0QzRjlGODE3QzlGQjVGOTJFQkQxMkEwODc5NkM3MUE1OAotOjEwRjgyMDAwNjhGRTY3REY5QUQ3OTVFMjE2OUY5ODU4Q0YxMDdBRUE1QwotOjEwRjgzMDAwODc4MjVGMUUxMDc0RDg2OTBDQ0Q3RjhCNDVCQjZGQUM3RgotOjEwRjg0MDAwQ0Y1QjQwNTU2OUY1RjlFMkQ4ODAzODVCNDVGOTY1RDI2MAotOjEwRjg1MDAwRTc5MzYzRUQzNENFRjNGQUJBMDNDOTgwQ0ZFNzY3MzE5QgotOjEwRjg2MDAwODcwNzhBRTY2RERENDhGMUQ3OURDNkJBRjFCOEVGRTRBNwotOjEwRjg3MDAwQTlEMDMxQTRGQkZFMDM3RjM4OTA4QzdFRTQyQ0ZCNjA4MgotOjEwRjg4MDAwRjQyM0RBQkYzRkY0RDI0QTJDN0Y3RTBFMUI4Q0Y4NEY1NAotOjEwRjg5MDAwRjIzRUFENjAzQ0U2OUY2MUI1ODRBRjdGNkUzMUIxNjVFRAotOjEwRjhBMDAwMThCNzdEQkY2RUZDMEYyMUJGQkU0Q0M3NTBCRjA0Q0Y0MQotOjEwRjhCMDAwMUI0NjMyRTgxMjMxRjUxOTc0MjMzOEZENTEwRjRBQkE0QwotOjEwRjhDMDAwMDMwMzE5OTExRTkyNkU4OEJGRUQ5MEVFREZGMjFBQzEwQwotOjEwRjhEMDAwMkZFMTlBMkFFMkRFRjNCNjZFMUY4RjdDOTI1QzY2NTNBQwotOjEwRjhFMDAwMzA0RTIwRTFCQTkxM0Q3OTMxRjZEQkQ5OTNFRkQwMEU1RAotOjEwRjhGMDAwQkYxMjFCMjIyRTFEQzIwRUVGODgwRDYxODc4M0VEMkZENAotOjEwRjkwMDAwQjMzODc3NjNCQjFCRDlFMUUxODJGRjM2QzYwNkVEN0ZEMgotOjEwRjkxMDAwRTA3RTU5MDhCQTBEOERFRDEwMEZERjFGMUI2MkZGRTM2QgotOjEwRjkyMDAwNDZGMUYwREVCMTcyRkY0MzFCMEY3RkM5QzhGNTZGQUQyMgotOjEwRjkzMDAwOEQzRDNDMjk4NEJDNzQxM0UzRUJENkI1MUFEMTdFQzY0OQotOjEwRjk0MDAwMzUyODIxRjVEOTYyOEI1MUVFMUY3RTFDMUJCMDVGMTI0QQotOjEwRjk1MDAwQUM4RjQzRTBGNzI4QjZFRkJCQ0RCNzE3NUIwRDg5RTk1NQotOjEwRjk2MDAwMTE4MUVFNUJCRkVCQjBERTBEMzFDRTI5ODEzRkZCMjI3MgotOjEwRjk3MDAwNDZGQkE2RjYyQTQ2RkEwQUYyNUUxRTE0RjQyOTE0Mzc0QwotOjEwRjk4MDAwQjAzODRGOTNEREJBQzFCRUQ1OURENjFDRjI4M0U0M0U5QwotOjEwRjk5MDAwRDU1NEFCRDY0RjhDOEI5M0VEOUM5RjIzOUM2OTlERDhGRgotOjEwRjlBMDAwODk3RjA5M0NDMUZDREI3MERDQjg0NTRDQjMxRjIzRjdGMQotOjEwRjlCMDAwNjFFMkFBM0M4QTMxMEJDRDExQTNGODZBRDc1OEY3MzIxRAotOjEwRjlDMDAwMDNCNDZCMURDOTFDOUIyMDFGNUQ2OENENDE3RDZBOUJFNAotOjEwRjlEMDAwRTM2OEM0RkQ5QTk1MTc3OTNDN0VFNTAyRTY1RDRFRkQyRAotOjEwRjlFMDAwRjBGOTMyNzczNzJGQ0ExN0QyMkQzMDJFMTAxMUM3RTExOAotOjEwRjlGMDAwODg4OEUzNzIwNjc2RDIxQ0M3RTEwQThGMEJCMDkzOTIxNwotOjEwRkEwMDAwMUVCQTc1M0U5NUU4REExQURBNEUwNUQwRDU0NkRGNzc4QwotOjEwRkExMDAwNDJEN0VGNTAyRUVENzEzN0U3MUZGNzhDQkIwNUJFMTlBQgotOjEwRkEyMDAwMTg3NzczN0NGMzE0NEM0QkVDREYwNDhGOTc4OUYzMEYzQQotOjEwRkEzMDAwMUUwRkY4MkMyQkVFMjZGOEVDRUEyREVFOEYxRTg4NTBDOAotOjEwRkE0MDAwQkU1RERDQTUyMzVFMjdDNDg1RDA3NzZCRjI3NTdENDg0QgotOjEwRkE1MDAwNUZCMzcwNDcyOEJCM0EyMzJFRjJCRjdENUU2NDg2QTA1OQotOjEwRkE2MDAwRjcyRDlEMTc3OUYxMjcyRDQ2QTRCM0RDRjc5MEYwMDYwQQotOjEwRkE3MDAwOUYxMzkxRTUxNTBENEEyNkFFM0Y3M0Y2NURBMzc1QzA0MQotOjEwRkE4MDAwQTVDNjdGRDMzQUEwRTM3OTBGM0VFRTQyRTQwMzgwNjczOAotOjEwRkE5MDAwQUMzQUEwQ0UwN0YyNzc3OTlCOTE1NkVBMkFCM0ZGMjJCRgotOjEwRkFBMDAwMUJFM0Y2NEQwNkU2QjU1MzdCMzNCNkVGQzc3OEZCN0UxNgotOjEwRkFCMDAwREI1NjM2NjNEQ0FBMUZEMzdCQzQ3QTU0QjlDRUZEQThDQgotOjEwRkFDMDAwNjg5NEUzN0U0RDJBNUI4REY5QURCQ0JFOEE5OTk3NjEzRgotOjEwRkFEMDAwNUMzQTdBODQ4RUQ5MDNGMDE5RTMwQzY3RjYwMDdDQzY5MQotOjEwRkFFMDAwRTZEOTM0NzlCOTRFOUUyRkM2OEQ3NzI1NkJCRUVGMzI5RAotOjEwRkFGMDAwQkQ5QkE2N0Q5MkJCOUZBNjNFNjVDRTEwNEQzRUFENkFENgotOjEwRkIwMDAwOTRBNjdENTdCMENGODFGOTBDQ0ZERDlBRjZERDZCMjYzOAotOjEwRkIxMDAwNkJGMjNENkIxRkQwQjQzRkNEQUE5RUNEQzY3OTdBOUNDNwotOjEwRkIyMDAwQ0QzRDAwQ0U1OTAyQ0VERUVCOEIzNURGRjVEN0Q1MERCRQotOjEwRkIzMDAwRjNBMTIwRjkxNDFGRUVGRkNEMTY2QzMyNEJDNDczRkFGQgotOjEwRkI0MDAwN0FFNzY5RkEzREZGNkE1RTkzMDJGODlENUQ2QjM4MTlBQQotOjEwRkI1MDAwMTg5RjIxN0MwMDdFNEJFQTE1RjYxQzhDNUJCQTVFNUIxRAotOjEwRkI2MDAwM0ZBN0UxRTk5NTI5OTBDRUY1NkFDQkU3RTFCRTlDODJGQgotOjEwRkI3MDAwRkNBRDJEREZBRDczM0Q4MkVCOURFRDcxMjJDRTI4RTIxMQotOjEwRkI4MDAwM0RBQzAzN0Y0NEQyQjg5NzM3RjA3ODk3RUFFOTFEQzRCQgotOjEwRkI5MDAwMUY1QTNBQjE2RkM5MkY3NkMxMkZBNjQ0MkRCRjg0RDkwMQotOjEwRkJBMDAwQjVGQzUyN0E3MEU3MzAxRkVCODhGRjg4M0U0MTdDRTQ1OQotOjEwRkJCMDAwODE3RjAxNzg5N0Y4OTVGOEI3MzhCNDdDRjU1REUxOURDMQotOjEwRkJDMDAwMzFBRjkxREIwRDZERjkzRkUyQjRGMUI1N0U5MUVFRTMxQgotOjEwRkJEMDAwQThCN0FFRDQyRjUyNzFCRjhERTVGMTdERkIyQkY1NTc0MQotOjEwRkJFMDAwMDcxREIyNkJGNkQ3M0FEQjRGM0ExNzE3MTg1NzE3RkJCQQotOjEwRkJGMDAwNDk5NzcwM0ZGMTM2NzYxM0ZCODlGQkZFODVGODAwRDlGMwotOjEwRkMwMDAwNzcxQjgwMUZEODA4ODdCOTdERkYzMENDQkY3RjE0QUMyRAotOjEwRkMxMDAwMzc2NTBBNzZFM0NCMzhCMjI3RkU3REQ3NkFGODdBNTg4MwotOjEwRkMyMDAwRjQ1RjVDMDhBRkRDODc5M0U3NzJFNEY5MjExNkM5RTc1QgotOjEwRkMzMDAwMjlGQjAxM0NBOEYxNDNGMUZDOUYyRDAyRDdBRERCRjc3NgotOjEwRkM0MDAwMkZBNEY1OTYzQzNGQzRDNEI5QkYxMDdFM0ZFOUVGM0FGQwotOjEwRkM1MDAwRkMzNTg5RkM4MUYwNzg2RUNGMjMzMTZERjcwN0M0Rjk0QwotOjEwRkM2MDAwMkU2OUNGM0JFQjQ3RUVCNzc1OTYyQTdCNTVEQTNGNkM5MgotOjEwRkM3MDAwNTVDMjFEOUI0MkQ4OTM1RUYxREY3MkZENzVBNjQzMUNGMQotOjEwRkM4MDAwQkE1NzdDRTBGQUVCRDEyQjA3RDBBRTAwREVGQjYyQjlBRAotOjEwRkM5MDAwQzUwMkY2NUFGMURCRUI1RjQ0NDQxMUJGQjYxRTU0QkRGQQotOjEwRkNBMDAwQkRBMUUwQjJEOTFFNkQwMzNDMzY4NDY5RUQ4ODRDQUIzMgotOjEwRkNCMDAwQ0NDOTAzRjRCMTU4QUYzREU3MjdGNzExODNEQjY3NjM4NQotOjEwRkNDMDAwRkI4MEZEMjdGODRFRTM4RkFDMUNDMkZEQjVFQzc4NkVDRgotOjEwRkNEMDAwREZCRjg4RTRGRUMxMTQ5MUFGMEM1QTE3NTVENjcwQkYzMAotOjEwRkNFMDAwNkMyM0Y4RTkwRDAxRkQ0Qzg5Qjc1MEZCQTUxMTM5NTM4MAotOjEwRkNGMDAwRTIyOThFQzBEN0JCMkIzMzE0RjIyNzU2MkEwQUY5MjFFQQotOjEwRkQwMDAwNjdBMjQ3NTNGREI1Qjg5Q0M5QzQzRjYyOUMyOUU4QkJCNAotOjEwRkQxMDAwQzFGRkRBNkUxQzFFQkIzODhGMjNGQjM3QzdGM0Y2RTYzNAotOjEwRkQyMDAwRjhEMTk0NEU4OUI3OEFCOEIzQjUxRkYyNDc2NTg0OTM2QQotOjEwRkQzMDAwRkEzNUFBQTFGN0E1QTZDN0YzNzlBREI1MzBFOTI3NkFDOAotOjEwRkQ0MDAwRTJGRUUzODRERUM0MzhCRjg5RkJBM0Y5NjMxM0ZDNzFEMAotOjEwRkQ1MDAwN0VBNjY2N0Y2ODhDMTNGMTdEODUzRTc3QTI5RUJBNTM5RQotOjEwRkQ2MDAwRDBCREIzNzhCRkIzOEY3NTNGNkUyNzc1OENGN0ZCMTI4QwotOjEwRkQ3MDAwNDNDNkZCMURFMzI4REUwRjVGRUE3MTVFQzE3MTdGQTRGRAotOjEwRkQ4MDAwNDM4NENEMkYzRjhGQzRCN0RCODM1NEQ0NEZGNTQ2NzdFMAotOjEwRkQ5MDAwMzVBRUJCNUE3NzgzRkYwRUM1N0RCQzJEQjQxRjMwRjA0NgotOjEwRkRBMDAwNTA3NzA3QUVBRjU2NjZCMEJEMTZFNEI3NjU4Q0ExN0YzRAotOjEwRkRCMDAwNUZERkEyNUIxRTA2RjU2QjNDQ0M4QUY1MjMzN0YwNzUzRQotOjEwRkRDMDAwNUJFOTdBQkIwM0E3Njk4MDc1QjA2NTg4NUYxRkFDOEI2MAotOjEwRkREMDAwOEYyMUJDRDdCNzRDNkVDNEZEODEzNUY3MzIxQjlBQTE3OQotOjEwRkRFMDAwNUE1NjlCMUI4NUZFRDAwNjE2NzJEREY4OTQ5MEIzMDkxNwotOjEwRkRGMDAwMzk3QjU1RDQxN0YxRThERjg3QTBEMzUzODI0RUEwMEY4QgotOjEwRkUwMDAwRDYyMjlEODdCN0JBQUZGMEZEMzhBRTRGNDgyNUUyRkE0QgotOjEwRkUxMDAwNzRCRkNFMUI2QTNEM0YzNzNBNzcxREYyQzE0MDZGRTg5MQotOjEwRkUyMDAwRjVDMzVBMEJFN0I3NzUxMUFFRTdBOEREMkU3RUVFQjUyOAotOjEwRkUzMDAwNTRFQURGNTkzQUE2MDdCQTRGMTE3NDlEQjI4MTlGREY4OQotOjEwRkU0MDAwNjBEN0FFNUY1N0E1OUZDOEE4N0Y4NjdBQTVGNDVFOEI2MgotOjEwRkU1MDAwMTdFMzQzQTUwRDE5MUU4MkNCQTUzODdBQTJCRTY4Nzg5OAotOjEwRkU2MDAwREY4NUY5RDJBQzJDMkJDNjIzOUM3RjY1Q0FBOTNFRTQ2MgotOjEwRkU3MDAwNjIzMkFFQkZGNEVDOTRENDI3NjRDN0UzNjhERjY5QjJBMgotOjEwRkU4MDAwRTBCN0I1MTYzQjNGNDcwRDI4OEUwMEZDOTc2RTU4QjY3RAotOjEwRkU5MDAwMTdDRkVGN0NGNDZCNDZGQjRCNDdENEQ2NjFEOEQ5NTRDRgotOjEwRkVBMDAwNDBDRTkyMjE5OEVBNTkyMUM1MkJGOEZFRDVCREEyMUY1QwotOjEwRkVCMDAwQ0ZCRjYxNUNCMzdGRENBOTBEMDc2OTNFNDcwQ0NDNjMwMwotOjEwRkVDMDAwMDYzRUJBQjRFNzNFM0JGQURCMkJFM0NEMTRDNzkzRkIwNwotOjEwRkVEMDAwQjI0NzU1RjdFMzY0ODRGNEFEMTUwOERBRkQwRDExNTYwOQotOjEwRkVFMDAwOEM3RkZDNDNGMDVENDY4MjdCMUZEMkM3QkQ3QzdDMDVDNgotOjEwRkVGMDAwREFDMTk2NjVBNjc0QzRBMzdCNzk5MjFBMDc3MEJBRDc0MwotOjEwRkYwMDAwMkEzNEVGRDFDQjkzOEM3ODdFNjFFNjhBQzFFMzUwNEZERgotOjEwRkYxMDAwMEQ2MUNFOTUxOERGNzkyODk2ODU5NEQzRjNGMTdDOURGOQotOjEwRkYyMDAwNTg1QzY1NjBDNjY4OUE4NDExRTMyRjE3NkIxNDhBQkYwQQotOjEwRkYzMDAwRTBGRTVCMDFEMDY3OEU5ODVGRjlBQUY3QTM4ODNGRUNEQgotOjEwRkY0MDAwRjA2RjE4MUVDQkU1M0Y3M0FBNEE0OTFFQzFDRTZCRTQ4MQotOjEwRkY1MDAwQTc4Q0Q1MTk5M0EwOUY3OTZCNjAzOURCOERFQ0ZERjFFRgotOjEwRkY2MDAwMEVGRTQzQzA3OUVGRjIzQTZEN0QyNTVCRjMzOTlEN0YzQwotOjEwRkY3MDAwNjFFMEVGNUJEMDJFNjhFQjNGOTVGMkU4NjAwRUE0QUIzQQotOjEwRkY4MDAwN0JCMUM1OENFNzg0NDYwQkJDMTRBRDUxQUNBODVGNjY1MQotOjEwRkY5MDAwQUU2ODhDQkYwRkYyMzM5QjU0MDdGMkI0QzQwQkVCRTg4RQotOjEwRkZBMDAwRUZEMzM5OEZDQjREM0Q2OTNENzBEOTZFRUY4MkVERENEQgotOjEwRkZCMDAwNTE1Q0ZGMkI3QUY3NzAyQzdGMjhENjNEMUNEN0YxQUQxMgotOjEwRkZDMDAwOUY1ODE4OUU5QjM5RDYwNkZFMThDNjFFQ0Q2QzEwQzVDQwotOjEwRkZEMDAwMUZBQzZDRDBBNDAwM0I1QTY0QjAyNjYwQkNERkMzMTZEMwotOjEwRkZFMDAwMjYzMkJFQjc2NTBFOUM3N0E1NzkwREY5ODE5NUU4MDc5NQotOjEwRkZGMDAwRjJGOTkxMUZGODUwMkM2N0Q1RDZENzE1M0E5RkMzRUE2RQotOjAyMDAwMDAyMTAwMEVDCi06MTAwMDAwMDAwREU0MDc5QTg1MUY3OEQ2NUU5QjAwQUUxNzczM0Q2RTkwCi06MTAwMDEwMDAyMDM5MkRERTE2NDM3RTY4RjE4QTVDMjNGMjZGRjFBRTQzCi06MTAwMDIwMDAxOEQyNDNFMDA3N0VEODYzOTg5RjhFQzc1NjY0MUU0ODU3Ci06MTAwMDMwMDA4NDdFOEJFQjMyMUNBQTk2N0U1QUZGQjhFNjk4QTQ1QkFFCi06MTAwMDQwMDA0N0JGNEY0QkI3OTNBMUU4MDZGNEQyOTRBNzI0MDhGRjBCCi06MTAwMDUwMDA0RUQwOEIzRDE2NEI3RTQ3RTE4MkI3N0E5QTAxOUVDQkZDCi06MTAwMDYwMDA1NTYxNzRFRUE4MzNGRjgzQTVDNkQxQkU5RTVDMTdFNjJBCi06MTAwMDcwMDAyNUI3QUZERjY4REZGQ0NBOUFBMTQ0Qjc2MDdBRTVGRDE3Ci06MTAwMDgwMDA2N0U2NzBCNDI3RUNBRjE2ODY3QUVDQTFFRUVDRTFDOTE2Ci06MTAwMDkwMDA1MEZFQjBDMkU1RUJBMUVBRjE3OTI4QTc1OTA5NUM2RkRGCi06MTAwMEEwMDBCRUI3MTQ2NjY4NjRFQ0ZEQTU2NkU2RUNDNUQ4MDc0QkUwCi06MTAwMEIwMDBBRDk0RkY2ODY5MjJFNTNGNUU2QUE3RjQ5M0E1N0QyOEE5Ci06MTAwMEMwMDAzRDI5RTI2ODUyQ0U4MDAxODg1RjQ3MjU3MEY5MUE5NTc0Ci06MTAwMEQwMDAyMEUyREU2QzUxMjJBQThDQkNGRjdDMzA1NDY3QzVBMUEzCi06MTAwMEUwMDBEMjI3OEM0RDYzRUMxRTI3MjAyM0MwREY5OTdFNkYwNDNFCi06MTAwMEYwMDAxMkI5M0RERjYyQjA4RTRCNDRGRjcxOTU0MkZBQkVEODEzCi06MTAwMTAwMDA3NUJCQTYzREY4MjU0NjNDRkZDREZBNjRGQUNCRTk5Q0M5Ci06MTAwMTEwMDA5OEREMzgxOUY4RjBGRUZDNTg0REZCNjkzNTI5OUFGQzNBCi06MTAwMTIwMDBFNDA0M0JDRDdCNTI1RTc3NERGOTAzODVGRDM1RjlBMkEyCi06MTAwMTMwMDAzNjQwMDI5RTJGMzBEQkY4RkVBQUQ4Qjc2N0NDQzZENzcwCi06MTAwMTQwMDBFQjU2REVGNjZBRDVGMDJFREYwNzc4QUYxRTMyNTA3RDEzCi06MTAwMTUwMDAzMDNEMjQ1RDY3QURENzMxMzc4MDM2NzMzRENDMERGQTI1Ci06MTAwMTYwMDAzRDU5M0I5M0U0RUFGQzExMEJEOUZEOTVEQjMyREYxREQxCi06MTAwMTcwMDAwMUY5NjNEQjBDQjRCRjdFNkM0NUVDNUFEQzNGM0VCNjQ0Ci06MTAwMTgwMDAyRDNFOEE0MUVBNUVBOTMyMUZGQUMxN0FBQjkxMDVFODk5Ci06MTAwMTkwMDBCN0RDMTVDQkU4RkM1NjkxRDdFNDQwRjkyRkRBRUZGOTNDCi06MTAwMUEwMDA5NUNDREJEMTFGNDQyMDUxM0UzRTU0QkQzRTg1RThFNzRGCi06MTAwMUIwMDAyNEZDQkUxNEU2REQwMkY5MzNBMEFGRjFDOEY4Q0MxNjdBCi06MTAwMUMwMDAwRUQ3MTk4NUFEQzBGQ0Q5QjBCRkY1RkEzRUMwNzFCMUVDCi06MTAwMUQwMDBBMEI2NDQ4N0VCMDFGNTUwM0NFOUNCMUQyQTQzQkUyRDY4Ci06MTAwMUUwMDA1QzYwQTBGREJCQjkxRkE5MUIzMUNGOTQyMTI5OUNERTA3Ci06MTAwMUYwMDAyQTlENDc2NDJGOTlBODdGRDYwQTFDMDJFRDE2RkRENkNBCi06MTAwMjAwMDBCNDg5RDY3NzRDRTQ3NzBGRjRBRTE2RkM4OTdDNzQyNjVCCi06MTAwMjEwMDA4NjM5NjMwODU4ODVFMDNERjc3RUZDNDZBQ0Y3RTNEM0FBCi06MTAwMjIwMDAzQjA4RTdGREE1REVCNTMyMDFGOEVCNUM4OTc3MTBFOTA0Ci06MTAwMjMwMDBCNUM3RTI0OUFFODJGMTdFRDJDOEY1OTYwN0U1NDBGMTM2Ci06MTAwMjQwMDBFQjRCQkY5QzJEMjczRTlENjk3MDI0Mzg0ODVGNjUyNTg4Ci06MTAwMjUwMDBBMUJFM0FCOUM2NDBFNzk4OTlERTE5MzU4OUQ2M0YzQjI5Ci06MTAwMjYwMDA4ODhGRTUzODI3RjVGNjcxMDhERkM5OUEwQzg2RkI5NjZBCi06MTAwMjcwMDBDNTZCNTRGMjA3OTBGRjc4N0IyRkU3RkZBNzU1MzcxQjFDCi06MTAwMjgwMDAwRUZERDYyODZFRDZBNTIzREYzQ0IyNjAzODlENjM5QTVBCi06MTAwMjkwMDAyMUQ2NDFDMTdBRTAzMzkwNTU3NzJGN0Y3RURFMUU3RUQ2Ci06MTAwMkEwMDBDRTg2NjVCNUU4RUYxRDE4Mzg4RjE1N0NCQzQ0REVCRkRGCi06MTAwMkIwMDAzQzA3NTBENkVENEY0N0QxRTVCRURDRDQzRDFBRURGMEZBCi06MTAwMkMwMDBEOTBGNTVFMkIzQjNERDZBODcyNTAyM0QyRkU4RjYwRTVDCi06MTAwMkQwMDBGQjNFRTRDRjE3Nzg0RUU5MjFGRjU0Qjg3QjY3MDJBRUFFCi06MTAwMkUwMDA1Nzc0NkJEMjk1NkU3ODNFRjZDNERBREJFMUJCNzNBRjIwCi06MTAwMkYwMDAxODFDMjRFNjRCRTI0OTdGQ0M3QjY5NkVEN0MwRjM4RTk1Ci06MTAwMzAwMDAxREY1OTcyRjk5RUZCRjM4OTMxNEMwRTc3QzdCREQzODNDCi06MTAwMzEwMDBFQjAwNUM3N0JCODQxREUyRjhCMUUzRTYyQUUwQzVCQUU2Ci06MTAwMzIwMDA0RUMxNDNDM0VDQzQ1MENCNkEzQzc3M0QxM0M0MjQzMDY4Ci06MTAwMzMwMDA0RTc4NDJFQzhGMUYxMDdBNDVGQTA5MTE1RDc4N0VBNjNGCi06MTAwMzQwMDA4RUYzMzc3QjU1MjFCRjBEN0UzNEZBQkY1MjlDNEY5NEZDCi06MTAwMzUwMDA3QTVGRUFFQjMyNTY0QkZCQzE0NzEyRjgzOUM2Qjk4QUNECi06MTAwMzYwMDA5N0RBNTVFMENFMkVBOEE4MTIyQjBGNDI5NzZEMzU3OTVCCi06MTAwMzcwMDBCRDE5RDQ5NzM1RDAwRjQ4RUU2MkU3RkI0M0M2NTc5RUIwCi06MTAwMzgwMDA0NUI2MkQ2NUNEN0M3RTQxRURDRTE5QkMyNUNEMTkxRDIwCi06MTAwMzkwMDBFRDREODk3NUUzMEExQkY1NkY3MDYwRkNBNDU0Qzg2OUM0Ci06MTAwM0EwMDA3OUFERTJGNUYxNzk5MEREOTRGMThBRDlDMjZFMDZEQjgwCi06MTAwM0IwMDBBNzBFRjYyOEM4MEVDRDBFQjJCM0FDNTY2QjU3MDFERUIxCi06MTAwM0MwMDA0ODFDNDdDMjFCMENBNzJCQzI0Mjc4OTgwNzcwQTFCRERFCi06MTAwM0QwMDAyRDcxN0IwRjRDMjRCODE1MDc1MEIyMDMzQ0E1Q0MzNUNBCi06MTAwM0UwMDAyNjA2RTcwMUY1M0U3QjQ3Rjg4MkU3RDUwMTVFMzFDRjZGCi06MTAwM0YwMDA2MEI4NEIxQzlGRkI3MEZGMThDRjg3NTFCQzI5NjgxRTRCCi06MTAwNDAwMDA5MjFFQzFGRTlBQTQ0Qjg5ODdFM0I3QTQ0MTIxN0E3RTRDCi06MTAwNDEwMDBEQUVFMDczMjhBMUI0OTdFODEwNTUwOURGNjdCRDc0NDcwCi06MTAwNDIwMDBENDY3QTVFQjQwRkY2NkY4Rjk0N0YyRDMzQzU2MTc4NTMxCi06MTAwNDMwMDBGQzUyQzE3QzJCOTM1MEJFN0M3NUQzNDZBMkRGQkVFMTNCCi06MTAwNDQwMDA3RDIzQ0E0OUExQ0RENzUzMTc4MzI4NUNGQkQzQkNCNDA1Ci06MTAwNDUwMDA4MEY1NDQxMDlFNkY0NEQ3NkY4QTM3OUM5NTVFQzZCRDY5Ci06MTAwNDYwMDAwMDRGQjMzN0FCQ0VCMDQxOUE3NkUyMUM5MTg3RTQ2MDdGCi06MTAwNDcwMDA4RUM3NjNDNEY4QzYxQ0IxRUVCRjExOUM5NTdBN0U2RTIwCi06MTAwNDgwMDBGQzg2RjA3NkUyMjc3RDVCQjhGM0JBNjhGRDYyQkY5RjE5Ci06MTAwNDkwMDBENTMzM0E5NDlFNkFGN0FGODJFQ0ZBREYwQzNDN0UyMUFBCi06MTAwNEEwMDBGNUYxNTVCRDkzRTIyNTUwMkVGQ0FFMkEyQjhGOUIwNzBDCi06MTAwNEIwMDBFOUYxQjQyQ0QyRTMyNUMyQUVDQjcxNEVBRERGNDlGMUU4Ci06MTAwNEMwMDBCN0Q5NjhGNzAzQ0EzRjVEQjc5M0UyRkVDNjU3NjY0N0UwCi06MTAwNEQwMDBBMUZGN0Q2QUZEQ0NCNTc4QkVFQkQ0QjY5OTY0RTc0QjNECi06MTAwNEUwMDA5RjkzNzZERTZEMENGNDFGNzJENzE3QkRGODYzRTRERkJGCi06MTAwNEYwMDBBRDYxMTQ5RjJGRDlFRjE2RUIxRUQwQUJEMENFQkU5RUIwCi06MTAwNTAwMDBFQjUxQjY4RUVCRDU1MkI0ODcwM0M4MUVGNkM2NzY4Qjc4Ci06MTAwNTEwMDA0QkRDQkQ1MTBFMDJDQUM5NEUyRTlFRTlGRUREMUVFODFGCi06MTAwNTIwMDA3N0YxQ0IxMTBFMEZBMUMyRUFEMzkxREY2RUY1QTEzRDk5Ci06MTAwNTMwMDAyQzVGRjhGMTUxM0NFNzBFRjZGRkEzMUY0OEZCMEZEOUUzCi06MTAwNTQwMDA4RDdBRjc5MjJFMjg2RkMyRUU5N0FCMUJEM0FERTgyN0JBCi06MTAwNTUwMDAwODNCRjE1RkMwQkYzOTM0RkU4NzEwRkU4QjExRkYwMUVECi06MTAwNTYwMDBGQjIwQzc2QjM4OUU2NzA2RTFGRkM0MUE0RTk3OTVEQkU4Ci06MTAwNTcwMDBCQTQ3RTFGQUYxNzg0RDc3RjJCMzhFNkZFQjQ5Rjg5RjA1Ci06MTAwNTgwMDBCNTFBRjBDRkUzNUY1QTNGQUIwNkYwOEZFQjA4QzQzRkRDCi06MTAwNTkwMDBDMDVCQkNERjJFRjBFRkUwRjhBRkUxNzg2NzZCNzgzQTM0Ci06MTAwNUEwMDBBQjAzOUUzRDc0OEU2MUYxQUY0RDBFRjQxQkNFODRGOTBBCi06MTAwNUIwMDBDODlGM0FCMzVENjVENTAxN0U5OEY0ODNCRTYwQjVCRjMwCi06MTAwNUMwMDA0MjdGNERFMjdGNkVBRkU2NDFBODdGMEE5RkZFNTMxNDQzCi06MTAwNUQwMDBEMjYxRUU3NjFFQTRFRjgwN0ZFNkVDODJGRUI4N0ZGQzRGCi06MTAwNUUwMDA3NkJGRTk5NTJFRjEwMTdFRDM0REQyQTk4MkI5MThEOUYzCi06MTAwNUYwMDBDNTg2M0YxREMxNzU4M0UyODQ0RjZENzg4RjQ2RENENzc5Ci06MTAwNjAwMDBBOEQ3REVEN0MwMzMxOTg1MzY4QzJGMzhDQzY2ODQyNzFGCi06MTAwNjEwMDAzNUY4MUU4QTlCNjExQ0Y5OUYzRDNGOUZCMTkwRTRCQzU5Ci06MTAwNjIwMDA1NTczQkU2RDIyRjMxOUJBQTBGRjU4QTdEMEZEQzZGMkNDCi06MTAwNjMwMDA0NTM5NTEzOTBDRTNENDU1MDRDN0U5MkU4QUU2RkM3OEQ0Ci06MTAwNjQwMDBCOUFBMjNGRkIxQ0NDOEZENDhCOTNGRjlBRUYwMEZERTFGCi06MTAwNjUwMDBFREMyRDcyNUVGNzVCMUQyNzc5N0MyMThEOTgxNEIxNjY1Ci06MTAwNjYwMDBBMzE3RUYyM0MwN0EyQTExQzdGN0VDMzExMUREOEUyMkQwCi06MTAwNjcwMDA0QzgwN0ZENTI4RTIzNjYwMDI5MTRGMUY2NDlDNEYxRjRCCi06MTAwNjgwMDA4QzZDQTIzODM5QUM1NDVFNDBCQkY4RDAxMjkzODNGQzFBCi06MTAwNjkwMDBEQUI4Njg4QUQ3M0UyMEY0REQ4MzkxMkI1RDY4MUYxRThGCi06MTAwNkEwMDA4QTM0M0EzMTg1N0UzRDc4ODhDRTMwMUE4Njg3RjEwREJFCi06MTAwNkIwMDBDOTQ2QkFBRjUzNjg2RTc5MDU5N0JFMEYyNzlFNzhENEE2Ci06MTAwNkMwMDAwQ0EwREUwNkVFMzdDNjU1RTBENzVERDc2MzNCRDJDNTNBCi06MTAwNkQwMDA0RjFGNkQ5Q0E3MzIzQzc0RENBMzU1RTA0QjcxM0EyOTQ3Ci06MTAwNkUwMDA5RTYzODJCRUMzMDE4RTJCNjgyRkIxREM2RUU1RjE5RDQ3Ci06MTAwNkYwMDAwRDQwMjc4QjlGQkVDMUU1Q0NDM0Y3MDNDQUYwNUNFMzc2Ci06MTAwNzAwMDAyOEM2MTk2NDA0RTE1RjkzMkYzM0YyRkFGMEM0QUYyNkQwCi06MTAwNzEwMDBBQ0NCNjZFQ0NGQ0MzRTEwRTk1Njg2M0EwNEQ3Rjc0NTExCi06MTAwNzIwMDBEMTVFOEM5N0RGODNGMTI1MUJBNjdBRTI5N0M5N0FFNjIyCi06MTAwNzMwMDBEMUYxQjQyNjEyQ0ZDQzg5NzhEMzQ0ODFDRkE5MjM5OEE0Ci06MTAwNzQwMDAyRjFBRjBFRTNCQTg4RDc3RERFN0QzRjk3QTAzN0VFRjIxCi06MTAwNzUwMDBEMUZCMUE5MTNGNzU2NkJCQzEwQUUzQjhGMjk0MjFCODg4Ci06MTAwNzYwMDAyRTI5NUI3RTczRjBBNjI1OUFGM0Q3QTU0MjVFQzdDRkVDCi06MTAwNzcwMDA4NUI1RkU4MEM3MjExRTA0NjE0NUJDQ0REMEIzRkRFQTFFCi06MTAwNzgwMDAxMENFMDc4ODk3NEE5QkRENDNFRDE2MjgxNDBGOTU3MTBDCi06MTAwNzkwMDAzNjQ5RkZDMUQwN0QyMDFEMUYxNEYwNDEzRjM1NTFGODZGCi06MTAwN0EwMDBCRDMxMzRCREZBMjZDQUY1NzMxREFEQUJFNzBCQjk5QjVECi06MTAwN0IwMDAyRkU1NkQ5QjU2REVDNjI3REFBOUJEODI3RTMwRTBFREJGCi06MTAwN0MwMDA0MTkxNzYyNjE3RTM0NEZGRTMxMkI5NUM2NERERTI3OEQ5Ci06MTAwN0QwMDAyQ0IyMzU5RENFQjcwODc5MjkzN0YxRkVFNUY4Rjc4OEI4Ci06MTAwN0UwMDA3NDRDQTI4REZBOTVGMDAwQkYxRUM3N0U3NEEwMDE5MEQ0Ci06MTAwN0YwMDA1RjRGRDY1NjkzN0YzNDg3MDVDNEI1MzNGQ0VEMjQ1RjM1Ci06MTAwODAwMDA3N0NDQjdFQjExREQ3NTRDOERBREIzMTBGNUNBRjdDMkRGCi06MTAwODEwMDAxQ0E4NDcxRjM0RDZGNUFDOEFFQ0Q4NEVFRURCMTRCMkQ4Ci06MTAwODIwMDA2NjAzMjMzRDI5RTI2MUMyRkU4QzU1MjNFOTdDNDBBMTg5Ci06MTAwODMwMDBDMkVGMEY1RUNBQjE3ODc0RDExOEE3MzExMDY5MEI2MzhCCi06MTAwODQwMDAxNDNBM0ZGMTM3QjE3RkYyNTBGNEUyODkyOEQ3ODU1MTRECi06MTAwODUwMDA0NjNEQTYzMzU4MkJGNUZCNzc2QkI3RThGQjE4REUzMzI0Ci06MTAwODYwMDA1NjMxNzYwRTAzOEZDODc3QzJCOEQ1QTg3Nzc4N0U4REJCCi06MTAwODcwMDAzMzlCQTI0QTIyN0ZDNzIxMjdFMEUxREU2QjQwN0ZDQTdCCi06MTAwODgwMDA3RjJGREYwOUZENUY3QTRCRDRCMzNCRTlGQjRCOEYwQjI2Ci06MTAwODkwMDAzRUY2RTRGMkZDQ0Y2NTdEMUVDRkFGOTJGNUY5M0NGRjRBCi06MTAwOEEwMDBBNEVDNUZFNDlGMEVBQTVGMTY1NEZGNEI5RTVGQkMzRTE0Ci06MTAwOEIwMDAzRkRGODM3RUVCNjhDRUQyODVBMzE0RDI1MzdCODRCRTA4Ci06MTAwOEMwMDAyODVDRUUyM0ZDMTZFQUY2RjI3NDM0RjNFOUIyNkVEQzJGCi06MTAwOEQwMDA2RTUzQTI2QjBGREExRkQ1NzJEMjgyRjZGN0Q1NjQyNzVBCi06MTAwOEUwMDBFNTlGNEY3MDJGNEJDNDc1RDQyNEM1NjM0NDdERkJBMTk1Ci06MTAwOEYwMDA5N0VDQzFDNDRFQ0UxRkVERTlDMkUzRjg5QjkyQTBCRkI2Ci06MTAwOTAwMDBBMTdFRkIwNUZEQUM0RThDQkZGNTdFMUM0OTFDQUU4MDY0Ci06MTAwOTEwMDA3RTlFRjkyNkYwRkNBNzIzM0MxQkJFNDkzRkIzOTJCNTRGCi06MTAwOTIwMDBGRDQ4N0Y0ODQ5NzVCRTg2RjM2MzI3RTMzNEU3NDVFNjEzCi06MTAwOTMwMDBGRkM0MTE4REYxMjc4NkU3NDUwMEY1RjM5N0Q3QTU2NzJBCi06MTAwOTQwMDA0MkZGRjM1RjdEM0RCRDA0RkQyNTYxRTcyQkRBNzRDQ0VBCi06MTAwOTUwMDA4OUY3MzREQjE4QTVFNzFCM0YzMUUyN0RCMzhBNUQ4RDUzCi06MTAwOTYwMDBDNjcxRDBBRTEyRDJEQzAwQjhDQTA0OUM2MEU3RjQ5MzIyCi06MTAwOTcwMDAwM0VDNzM4M0QwMUI4QzNEQ0RGNzM3NUYzREFCNDc3QURCCi06MTAwOTgwMDBDRUQ3RDU5RDdBMEVFREY2MjgyNUU0M0VDRDY2RjFERDc1Ci06MTAwOTkwMDBEMTRFQ0UxN0VGMTU3QUU4NkE5QUIzMTFFN0Y5NkI4QzRFCi06MTAwOUEwMDAyMTQwM0VCN0JBOTNGQjYwNDkxQzVGODVDMkVFQ0QxQzY3Ci06MTAwOUIwMDA2NjMxREIwMUNGNDMzRkU0RkI1NDI1MUIzMjg2NjAzQ0FDCi06MTAwOUMwMDBGOENEODREMUVGMjQ3RTZEM0NCNTk1Qzc1MzFCNzgzQ0EwCi06MTAwOUQwMDBCNUQwRDZCQzA4OTQzNzMzMjY5NUFEMzFERkMxRDg4NDY1Ci06MTAwOUUwMDA1RjQ4MzkwMzkxODU2RkYzNEMzMjVGOUQzRjI2OUJDNzZCCi06MTAwOUYwMDBCQjMwN0Y3NkZENjM2QjUwNkU5QUMyQjkxRkZCRDBGMDlGCi06MTAwQTAwMDA4MUUxQTgxNzVBMzIyMjc0NTY5MEU3MzdFMzhCOEM0OTVDCi06MTAwQTEwMDA0M0IxRkM4RTcxNTg5RTYzQjJGNDJBMjJGQzMyRTI4QjAxCi06MTAwQTIwMDAzN0UzNURDNzkwNUZCMDNEQzY0MURDNDY1RkZDN0QzMDdCCi06MTAwQTMwMDAwRkY3REIyQTlEQTc3NTBGOEE3MDg3REE3N0ZBODdDMEQwCi06MTAwQTQwMDBBQjMxQzk0QTY5MTM5MDE5RkQxNzA5ODcxQzFGRkNGOUJFCi06MTAwQTUwMDA0NUNERDBERkM5RTU0OTgzNTdEQjcxOUYyNUM3OTAzNDY5Ci06MTAwQTYwMDBENDNGN0U0NjgyRkI3MkUwRjgyNzc1QUMxNzJFMjk2RUM0Ci06MTAwQTcwMDAxNjhFNEIwMjBFMDNFRTVEMDNCRTVERDkyQTczMDZBQ0UzCi06MTAwQTgwMDBGMzI2OEY4OUQwRTRFRkNEOEY2NUNFQzAzOEVEQkQyOTM4Ci06MTAwQTkwMDA5QUZDRjRDMkVFOUFGNjBGQ0NFQUFGQTkyRjMwMzU2Nzc0Ci06MTAwQUEwMDA1NTA1RjhCMTlERkI0OTFFODJBN0QyNjIwOTQ3N0ZFRTJBCi06MTAwQUIwMDBFRjBENUZGQ0U1NDFGNEZGMzZBQjBFRjQ1NUU3RUVEOUUwCi06MTAwQUMwMDBGMjk3REJBMUQ1NjUzQzRFNDVGMTQ3M0JDNUNCQ0VDOTdFCi06MTAwQUQwMDBGMzI4N0FBNzNFNzA1RkU4MjI2QkE2RjMzRTlERUQwM0Y0Ci06MTAwQUUwMDBDOTc1RUU3Q0VCN0UzQTc3RjY1REVGMDNGNTRBMTJFQkMzCi06MTAwQUYwMDBERDIxNkMwOERBQzNDQjU1MUY1MUJDQUUyMjkyQ0ZFRjdCCi06MTAwQjAwMDBFMkVCQzc4Q0I4MEY4QUZCOEFENzgxREZFRkMyMEZEMTI3Ci06MTAwQjEwMDAzRjZDRjM1MDNDM0JCN0ZFMThFRDlCMUQ0OEU0N0FCQTlFCi06MTAwQjIwMDAyMjc1ODExRUVGMUQ1NTQyOEE3NjY4MUNFOEFCNjhFMDhECi06MTAwQjMwMDA5N0U2NDYzNjcwMTdFRUJCNjY1OEI4MUZERTM2OTlCMTk5Ci06MTAwQjQwMDA1OEU0MkIxRURGNjk0QTg4QTE3QkQ3RjM2QkYyQThCQzVGCi06MTAwQjUwMDBBMjJEOUNGQTdGNEY2RDFFNDdFNzA5NUY1MzY4RkZBMUU2Ci06MTAwQjYwMDAyMEU1QTFFNTc4N0VCODI5REMzM0UwMTExOEI3RTA3N0ZECi06MTAwQjcwMDA3N0U1MjFERTJBNzZGMUYzQjUwNUVBOUZCMzE2NDA1QUYwCi06MTAwQjgwMDA1NjlCNDdERjE3QThBQzQ5MDE3RjYxNDIyRUI3QkYwNUNFCi06MTAwQjkwMDA2OEYzMjFBRjBFQjNBQzQ2QkJBQjFBN0RCRDlFNDczRDlCCi06MTAwQkEwMDA2M0I0OTA5RTg5NkU3QjgwQzZBRjZDMzNEM0Y3RjcyNDE1Ci06MTAwQkIwMDA3MTdGRDdEMEMyRTExQURCRTZBMjcyQzkwRjUzOTNCQTk0Ci06MTAwQkMwMDA2OUQ2MEY4NkY4Q0Q3QTdDOTdDM0QwQzJBOEZEREQ2REJCCi06MTAwQkQwMDBGRDI4OTVGMzdEQkJDRkFGRTkzRUFFMjFGRUVBQjgxNDA4Ci06MTAwQkUwMDA5OEY3REI3MThBOTVEQzkwMjAzRDdDQTU2QTc4MzQwQjAwCi06MTAwQkYwMDBBMUE3REFDNzY5RTNFN0Y0NEM2REZDREM1RTYxOEE3Mzk4Ci06MTAwQzAwMDA3RTEyQzAzMUYxQjExNjNERUUwN0IxNDhCMzE1RjEzNTkyCi06MTAwQzEwMDA3MUM0NjA3QjQ5ODA3Q0E5N0JFRjM3MjI3RDBDRUJERUMxCi06MTAwQzIwMDAzN0EyOUQzNjQxOUExQjUwNUYyRUNFMzMwNEVCRTkwNTY3Ci06MTAwQzMwMDA0OTUyNEYyRkEzNTREQTFENzY3NTA2RjlBOTMzQUM4MkI5Ci06MTAwQzQwMDAwMTg1RkNDQzEwRkE1NDdFREY0QzZCMUFBMEUzNkUxRUJCCi06MTAwQzUwMDBDNzdGMzRDNUJEMDJGNTQ1NzMwRTlCQkU4M0Y0NjY3MzMyCi06MTAwQzYwMDAzQUVFQzM3QzU3RjAwMzlEQ0QwQUY5ODkyRDc0MUU3NUE5Ci06MTAwQzcwMDBFMjA4QkIwRUUzRkZBQjA0NUM1MjhFNkYzNDhGQzVBMjVCCi06MTAwQzgwMDBGRDdCMkE1QjgyRkRCRTc3RTc5RENENEVFOEFGRjE0NzQ1Ci06MTAwQzkwMDA5OTk5NjgwRkU0QjhDRjI1RjE3QjI5Q0NEQTdBMERENzgyCi06MTAwQ0EwMDA4Mzk1NkY0NEQ4NTFERTBCNzAzMTg2RkI5RDdCNENCNDJECi06MTAwQ0IwMDA0RTgxNzJEQUNGQTg3Q0MzQjQwOUVGODk1NDQ2QzE3QTU5Ci06MTAwQ0MwMDAxNUM2Q0Y3RDMzQ0M4NzdDRENGODY2OTgxRUVENDZFRkU5Ci06MTAwQ0QwMDA3NEY3NzM0OENGREMzNzdCOEZDMUY1QTFCM0MxQTQ2NzJDCi06MTAwQ0UwMDBFNEY3Mzg5RjI3M0REQjA5QkMzN0QyNUJDMTdDMjZFNUEyCi06MTAwQ0YwMDBEMzVEQzNFNUE1NDhGMDY5QjE5MDNGQjc5MEEzMkI1NUVDCi06MTAwRDAwMDA1RDQ4MEVBRjNDMDY0MEUzM0VFOTYzQ0FDMDVERTgyNzlDCi06MTAwRDEwMDBEODJERjQ3RTkzOTRDQjAyNUMwRjQxNzk0MUZGMTgzQUIxCi06MTAwRDIwMDBGRjJCRkQ4RDYwMzkyQzZCQjM1MkJGRTU2RDc2MjFFRjQzCi06MTAwRDMwMDAzNkNBNEJCOTJCMTY3MjYzMTI3RUM2MkNDMUU3QkI1MzYxCi06MTAwRDQwMDBEQ0VGMjA1RTBBQUE0MUVFQTM2ODFGM0YwQkU1QzlDRjg2Ci06MTAwRDUwMDAzNzQ2MkJGMjE3RjA0RDYyNDk4MEZDNTQzN0RFQ0ZEMDc2Ci06MTAwRDYwMDAzRjMxQzVCOTg4NkY2NjQxMUFFODlGQ0M2RUY3NEZBQzJBCi06MTAwRDcwMDBFMzEyMDBGRTg5MkIzMjc0NzhERkE5OUQ3RkRCRjlFNjUwCi06MTAwRDgwMDBFNkY4N0Y4RjkwOTdFMjQ4NUY0RkY0NjcwRDU1NjEwRTRDCi06MTAwRDkwMDAzQzg3N0UzOThFRUZGNzJDNUNDNUYxQjhEMEUwQ0E0NUIwCi06MTAwREEwMDBGRjYyRTEyRjE1OEE5N0ExREY4MTdBNjlEODkxMkE2M0MyCi06MTAwREIwMDA2MDFDRTVGRUI2NDFDQzBFNzg5OEQyRDY4M0QyMzcxM0FDCi06MTAwREMwMDBEQzQ3MTEwRjQ1NkREMzA0QkUwNjdEQTNGREM1QTE0RUMyCi06MTAwREQwMDAxRTQ3MzI3ODREOEU4RDE5MTg0NzcyQUI0OEU3MzM2OTNDCi06MTAwREUwMDBDQ0ZBNENFMDdFREU3QTFEQzVDM0U0QkVBMzhDMkI5OTAxCi06MTAwREYwMDBGMEJDN0M4MDFERkQ0MjVGOUI0RUVGMzcwNEM3OTk3MkFCCi06MTAwRTAwMDBCOEREQkZCMEQ5NDA3NkJGQUNGMUNGQzM3NDUwN0YyRUYwCi06MTAwRTEwMDBDM0Q5MDVFREM5OTc3QTc3MUJGMkY1QkNDOURFNTcwRDJBCi06MTAwRTIwMDA5MDlGRkZFNENFQTg5MTc2M0YzRUVCRjRCRTlFNjg0N0NDCi06MTAwRTMwMDBFQjAwOEYxOEVGQUE1QkEzRTY3OUI5QkYxM0MxRjdDOTFFCi06MTAwRTQwMDAzODdGNEI3RTBFRTZGMzc5NkRERDg4OUZBRTU0OTlDOEVFCi06MTAwRTUwMDAwRTVEMDFCRTY1MDE3NjQ4REExREE5RTdBNUZEOTE3QzBFCi06MTAwRTYwMDA1REFFRTdGQUFCM0MzMkRBRUJDOTA4QjQzQjkzNUMzOUQwCi06MTAwRTcwMDBDODc3N0RGODc5MUFCRkRERDlCNDc2MTRDQUMxQTUzODEwCi06MTAwRTgwMDAzQUI3MjhFRDQ2QjAxQ0JDQjYxNDFDRDM1RTFERUQ4RURGCi06MTAwRTkwMDBENEVCNTJDRjRCQkIzNUZBRTUyRjc3RkUxNUNENTU4QUYzCi06MTAwRUEwMDA3QjQwMzJFMEVCNkUzREI3NUY3N0VCMkRDNDNGNjNFM0YxCi06MTAwRUIwMDAyNkU5OTE2RjZFNUU4RjFFMTM3QUY0OTg0NjhGNTY3NEYyCi06MTAwRUMwMDA2MjA3MDYyN0RGOUExQzc0MTVFREYzNENEQzdGNDQzRDY2Ci06MTAwRUQwMDAxRkQ4REZBMzI5QTNDN0UwM0NDNjI3NzMzQkZCNURDMTM2Ci06MTAwRUUwMDBERDk5RkUxRjlGN0M2QkZBN0Y1OEIyODhGN0RENDBGRkNCCi06MTAwRUYwMDAxNzI2NzNGRDFGQUNFRjk5OTVCRkE3NzM2OTRGNUYyRjNFCi06MTAwRjAwMDBEQTgzQTMwQ0VDMDNEQUMxODYwOEZCMTY2MTBGQzg1RTE2Ci06MTAwRjEwMDA4NDQ3N0JCRkNFMUU1QzREOUI1OTg4NzgwQTYxMEYxRUFCCi06MTAwRjIwMDA0QUZFMTZGNjQwRjJBMTk0MUIyOTI3NTIyRTgyRTU0ODZDCi06MTAwRjMwMDBDQUM1ODQ5RkMyM0ExMUU5RjQxRUJGNTc1MEFFRjc2QzgwCi06MTAwRjQwMDBBM0ZENDY3QkM0NjA5NENGNzYzRjZFOTc0MkYyRDZDMTM0Ci06MTAwRjUwMDA0RTA4RjlGMUNCOEJENjZFNDhCOTkwRjIyMkU1QTc1QzJBCi06MTAwRjYwMDBDOEM1RUMyMEI5RDhBN0Q2M0QzMzBBRjdDQjkyREQ2QkM0Ci06MTAwRjcwMDA5M0UzRkQ3MjUyQjYyM0Q4M0U3NENBNTcxODU5NjRCMzJFCi06MTAwRjgwMDBFM0FBMThGMjU1MzlBNDgxN0M2NUVBNDQxRTlFNDlCRTQ1Ci06MTAwRjkwMDAzNUJGNjhEOTRERjJEMzZGRkVGQkZDRjQ5QjRFRjhFOUU4Ci06MTAwRkEwMDA3RkJFMEQzRjc1RjQ2MzNGQ0VCMjAzM0M1N0IyNDBERkM2Ci06MTAwRkIwMDA2NkY4Rjk2REMyM0I4Q0ZCMEZEREY5N0EwMEQ2OTcwNDE5Ci06MTAwRkMwMDA3NzkzMzE4REUyM0UxM0FFQjMyQThBMkYwQUJFOTQ3NDEyCi06MTAwRkQwMDA5NkZFQzA2QzExNzczODkzRTI3QTA3RTFDNUY1QzA4MkJFCi06MTAwRkUwMDA5QkQzN0I0NDY3NTM1Q0IzMTFENzI3QjMyMTBERjQwMzI0Ci06MTAwRkYwMDAzQUYzN0Y5QjZGNTFFRkJENzE5Mzc0M0U5NkZDOURGQjVFCi06MTAxMDAwMDA4REM3OTI0M0ZCOERDN0IxRkM5QkQyQjUyMDk3ODlGODYxCi06MTAxMDEwMDBERThGMEIzMERFMzhFMTI5OTE2N0NCMEExMDhGRDM0NjgzCi06MTAxMDIwMDBDOEZBOUYzQ0U5RUM4MUZBODFDOUI4MzhDNTM5REU1MzZBCi06MTAxMDMwMDA0NURFQjNGNEYwMTg2ODNGRTExOUU2OEY5QjQzRkREODE1Ci06MTAxMDQwMDBFQ0U4RjZCODg4QzJGQ0VEOTVFNzFGM0JCQzg2RTg1MTlBCi06MTAxMDUwMDBDQkU1Q0NEREEyRTdGQjNGMjI5RjA1Nzk0QjQwN0U0NEU4Ci06MTAxMDYwMDA1MDdFMDM2RjFGQTU2RjYxODFFNzQ1OTA5Rjk0MjE5QzdGCi06MTAxMDcwMDBDRUFFMDBGRjAxODZERjdGMDVFRDg1NTU2MTE4RDdBODRDCi06MTAxMDgwMDA4Q0RCRjhENjE1RDQ2QkY1MEFFRDQ1QjVFMzgxRDUxNEE0Ci06MTAxMDkwMDAzODUzQzVGQkI5OTQ1RjczRDgwOTNFQzIwM0JCNzhCRTExCi06MTAxMEEwMDA0RjRBRUQ5MzFFQkRFODM3RTBEQ0JEQTE0RTcxRDJCOUM5Ci06MTAxMEIwMDA4MzExOEFCNzVCNDY0NzdDRjc0OUQxREEyN0ZDRDE2QkFECi06MTAxMEMwMDBCRjY3NzgxRUVGNTZCRTZGQkZDRkQ2OERCRUY3OTk2RTQ1Ci06MTAxMEQwMDA2MUZDRkJCMjQzOUY3RkZFNUUwQUU3RUYzMTU5RDEyMUVECi06MTAxMEUwMDBFQkM3QTVBOEJDMUYxMTM3QTBGMUExNjg0QTVERTg3QjNBCi06MTAxMEYwMDBCMDEzQzVCOENEQjg1RjQyRjhEQ0Y2MjRFMkI3RDkyODAyCi06MTAxMTAwMDBGMUZERjI5M0M4Nzc2MzE5RDNDNENGNjA3Q0NBREY5RjI3Ci06MTAxMTEwMDBGMjcyNDE4RDlFNEZENzE5ODRBRkFGOUJFRjgwMTRBOTE3Ci06MTAxMTIwMDBCRkZERjhGMjA0RDFDQkY0MzVGODc2ODRDMEI3NURGQjhGCi06MTAxMTMwMDBCREVGRUJFODM1QUNDM0Y3ODI2RkU3NDgzRTc2NkFGODVGCi06MTAxMTQwMDAzRDVBRUYyMkZFOEM4RTUzQUNFODQ3NTdCOEMyRDZFMDJBCi06MTAxMTUwMDA3QUMxMkY5RkJGMjdCRTZDOTZGQjAzMURFNEVGQjUwMjNCCi06MTAxMTYwMDA5NEJGMEE4OTQ3Q0ZFQjRGQTJGQ0JBNzRFREVEQjkzQ0FFCi06MTAxMTcwMDBCNkYzMzU3M0Y2MDFCQzUyQzgwRkJFN0ZFNEY5RkEyNzA3Ci06MTAxMTgwMDAzMTJFMDk3QzQxRjU5NEQ3MDdDMDFEMkM4Rjc1NDFGOThDCi06MTAxMTkwMDBFQzIwRjkxNUYyNDdGQTAzRUQwMUUwQTkyN0VBQjdCODA4Ci06MTAxMUEwMDA2MzQ2N0IwMDlGRkM0Q0QwRTlBMkI4MjdEQTNDOUFGQjRGCi06MTAxMUIwMDA5M0NEREQ3OEJBMjM4NUZCOEZDRjA5N0M2RTEyRUQ5QjMyCi06MTAxMUMwMDBDMzAzRjA5MEFBRTExRjFGQUU1QjAyRTY0RDc4QkEzRjYxCi06MTAxMUQwMDA0RUNFRkI5MzgyN0NEMDYzQ0QzNjVFQkYyREU1QTMyNzM4Ci06MTAxMUUwMDAzREQ5RkU3QzcwN0ZBRkE2N0M1MjgwNzhGMUY3RkZGMThECi06MTAxMUYwMDA2MUY0MjNFRTE3NzhEQjkxNzJFNEIwMjc1MkQwMzlDMTQ1Ci06MTAxMjAwMDBGRjRFMjFGMDA3QkQ2MzUxOEVGQ0ExNzRFNDhGMUY3NjYxCi06MTAxMjEwMDBFNDRGNEZEMEY3RjQ0RTc3NjdERjdCM0E3RUVGMENGQTVFCi06MTAxMjIwMDA5RUUxM0RFQTlCRkY1RUQwMkQzRjg4QUU3OTQxNzQxRDYzCi06MTAxMjMwMDAxMzk0MkY5NDc5QUY0NkZGNEFCRDVDNUNGRkY0RTMwOTM5Ci06MTAxMjQwMDA3MTE4REY1NEU4MzhCRjlGOUY0RjkzQkQ5OTZGOTVGQzhECi06MTAxMjUwMDA3QkU2MzBGMkFCOUY5RkNGMTI5RTI3RDcwOUJBNzlDRTlCCi06MTAxMjYwMDAzRDg5N0E3ODEyRUFFMTUxRkVGQzE0RDQ0Mzk0M0Y1RjQxCi06MTAxMjcwMDA4MEZCNjE3RTdCNzU4MUVBRUZBQjkxRUQyRjkyRkQ3QTY5Ci06MTAxMjgwMDA2MDg1RUNFRjMzQ0E0QjNBMzJDRjI1QjI3N0Y3MEJCRDBFCi06MTAxMjkwMDBDMzNDQURBNEY3RTczNUYwRUYzRjdERkVGM0MzNUYyQjEyCi06MTAxMkEwMDAwRkI1NDE3OEQ5MTA5NEY3MDRCNTVGNzcwM0ZCQjYyMkU4Ci06MTAxMkIwMDBFOEZCQzc4MkVBRDcwNEU1RDcwN0U1NkJCNERGMTdDREIzCi06MTAxMkMwMDA1MjQ4MEU4QjQ2RjBGREM5NjBCOTBDRTY4RjJGNTJEQUZBCi06MTAxMkQwMDBFMzYzRURGNjVDODkyNEZGNEUyMzU3MTNBQTc5RkVGQUU3Ci06MTAxMkUwMDBGM0ZGMjlBODg5MENDOEE3QjA4OTFFQjJFRjMwNUFDMEY1Ci06MTAxMkYwMDBGRDQxRDBCOTFFMTVGOEMxRDA4OURFQkNEODk5REVFQzBECi06MTAxMzAwMDAxMzZDRUY3OUZEM0ZGMEQ3MjREQTJGRDJGODI1RkI1NDg4Ci06MTAxMzEwMDA2REJFNTE5NTcwNDdCREJCMjgzMjYwNUY5NTU5MjZFMjdFCi06MTAxMzIwMDBCQUJBRjNGRDlCODg4OTYzNTIwM0ZDMjI0RkY4NDQ2N0U1Ci06MTAxMzMwMDBDMDNDNjVGQjcxNUY1RDU3NzFCQ0Y4RDRGMDg5OUI3MTRGCi06MTAxMzQwMDA3RjY4QjREOEQ3QjRGMTE0RUNBNThBRjZCQTUyQzQ2RjRBCi06MTAxMzUwMDBDNkUxMzk1RDZDMTdFRUVCQjkzMEQwMEY2Mjc1QkQ3MDI4Ci06MTAxMzYwMDA5RThEM0Y1MkY5QkI1MEQ1NDAxRkMwNTMxMUIzRDM3OTY2Ci06MTAxMzcwMDBEMzk5NzhFQUJFM0JENDQ3NDcyRkY5MEQ3Q0I3RUY0N0E2Ci06MTAxMzgwMDBFQTEyQjREMzQ3OTdDNEQyMzlBNjQ1QTlEQ0VGREMxN0RCCi06MTAxMzkwMDBERDM1NjEzNkU0MUIyMzFFMjY3RERCRjhDNDU4NEFGNzkxCi06MTAxM0EwMDBBQUNFOTVBRDU2RTgzQTM1Nzk2MjY0NUZBQzhGMjYzQzlCCi06MTAxM0IwMDAzOTM2QzQ0RjVDMDZGQzlEOTk2QTI3MzhEQzM2NkI0MjhGCi06MTAxM0MwMDAzREZBREJBQjBEQjQ1RjA4MkQ3RTQ1RkNGM0E0NjkzMDFDCi06MTAxM0QwMDBBRUI3OEI5NkY1QTdGREIwRTI5RjRGMUE4N0Y3QjA4QTlDCi06MTAxM0UwMDAxRjM3RDAzRTQ5OEJDRTRBNzEyMkY3RUFCMTc0MkU2QTdDCi06MTAxM0YwMDBENjBBOTE3QUVFQTJGNENERkZGQ0JBMUFFRjY5QjVCRTE3Ci06MTAxNDAwMDBBMEQwRkIwRTc3NUNBRDdCNjcxMDlFOUJBQ0U5NEVGN0RFCi06MTAxNDEwMDAyRURFODA3NTAwOUVGQjNFQkVCRUI3MTdDRjIxOUYwODEzCi06MTAxNDIwMDBBQkEyNzNBNEQwOUVFRThCOTU1RUIzQkYzQjMxMEJEQkJBCi06MTAxNDMwMDBBQkQ2RTVEMEZFMTQ5NEEzRkY3QzZBOTVCQTA5RUY0MUMwCi06MTAxNDQwMDAxNTQ1NTlDMkYxRkNGNkE5QUYxOEM1NzU0RTNENkVBMkZGCi06MTAxNDUwMDA3NzIyOEU0N0JBNjdBQzhGQTNGQkI4RThFOUIzNTM4QTBCCi06MTAxNDYwMDAzRDRBMDEzQzRDREFEMDY3NjI2MjEyOTY5QjA0N0RGQkQ4Ci06MTAxNDcwMDA0NDE1MDExRThBNzRFREZDNDNGNkE0MjQ4NkU3MjdBNUQzCi06MTAxNDgwMDBGNjk5QjgwNUU2NzFFQTk3QkRFOTdDRDhDMTU0RTdFNDVFCi06MTAxNDkwMDA1NEMwRDcyRkQyOUM1MzUyRTMxMTVFNkVCN0RFRkMwRkJGCi06MTAxNEEwMDBERjhGRkNFMzg1RTIwNEU0QUY4NzUyMzk1RkJGRDE1NjlBCi06MTAxNEIwMDA5QzEwRjhCRTc3Qzk0NTNERjFDMTlCNDZGQjIyN0EyN0I3Ci06MTAxNEMwMDAzMDNDNERDMTc1MzZGMDQxMkNDNkNENjc4OTc1MEJGMEE3Ci06MTAxNEQwMDBGMzkyOUQyMUZDQUJFMUE5MkFEMUFCRjFBN0YxRDk0ODQ4Ci06MTAxNEUwMDA1RjNGNUYwRjdGMTdGNTE5QUQzNzIwNUZCMTIxNzMyRDc3Ci06MTAxNEYwMDBEQUI5OTNBNjI1RUM0NDBGRDY3RUZFOTFFRDBCMjMzQzgyCi06MTAxNTAwMDAxOUI2ODU3OUMzMzIzMDdFRUExQzg3RkNDRDEyRUI3QTlFCi06MTAxNTEwMDA0REI2MDRDOEExNjhGRjc3MEYzRkU3RkI3NzY4OEZFQkY0Ci06MTAxNTIwMDBCRUJGN0JGRUQ3MTJCODlGMjFEQjk3NDY1OTNDRTg1Q0QzCi06MTAxNTMwMDA5Q0I2NThGNDQ4OEZBM0ZBQTVBN0YwM0M1QUM5MEIwNkVECi06MTAxNTQwMDBCMjAzMjUyRkM0M0ZENjhBRkEwN0Y4MDZFMzZCQzFGMzJFCi06MTAxNTUwMDBGQTYzQUE4MUM3MzEzQTkzNEJDRjE4QUQ1Q0IyMzExMzBECi06MTAxNTYwMDA3MUJFOURDOTY1Q0Q4NkRDODk5QjIzM0I5N0NCNTIyQkYxCi06MTAxNTcwMDBENzRGRTM1RUUwRUY1MTk2MEVCNUU4NzE3RjczRjQwQjQxCi06MTAxNTgwMDA2RjZEQTE3Qjc0MEJDMjg2RTBCRDg5RDIxNzRDNDRBRjRFCi06MTAxNTkwMDAxNjhCQzU2M0JEMERFRjEzNThGNDMxOTAzRTlCQ0FFRDE5Ci06MTAxNUEwMDA2OUJEOTA5RjVDOTVFOUNENDMyOEE1N0IxMjcyREZGMDYxCi06MTAxNUIwMDBFQzkyNjc5RUM1RTM5N0U3OTg3N0RBNzBDMERGNjUyN0ZFCi06MTAxNUMwMDBFN0QzQ0JCQjU0OEEzRjA2RUYyMzk2MUZEQzY5Q0M2MTdGCi06MTAxNUQwMDAzN0IxOEY3ODgzRkRDMzMyRDYyMkRFREYwREZEN0RGMDdCCi06MTAxNUUwMDBGRUUxQUJBOUMxRkI4NzA2QkE0RjVFMkFGNjBGNzMzNzNGCi06MTAxNUYwMDAyODA0NzdFOTEyN0VDRjNGMzc5NkM3OEQ0RjJFMDVGQTI0Ci06MTAxNjAwMDAxQjY5REUxRUVCMTAzQzBGQ0RFRDRFMjk1M0JDNjZGODc2Ci06MTAxNjEwMDBGNUFFMEQwQjI4OEVEOTEzRjE4NDcxNkVGMTZFRTI4OTRGCi06MTAxNjIwMDAzMDQ3M0FBRUYzNEI1RTA4MjNGQzk2RkU2QUVFNUY3RUNGCi06MTAxNjMwMDA5OTg1RjdGQTBBRTIwMkQ3RDVGQjkxMkYzODdFMTlERTk5Ci06MTAxNjQwMDAxRjk0RkQ5QzVFRjY2MzdBQTczMUY3NDU1ODFGQzM3QzUzCi06MTAxNjUwMDA0QTYzRDhBQkY3NjcyMEJEOTJEMjcxOUY1M0I2MkI1RDFBCi06MTAxNjYwMDBGRUEzNUVCQzFEQUNBRjYxMUQ1REI0NEFFNUVGQzdFQ0U3Ci06MTAxNjcwMDAzNjkxMUQwNDU5NEY2NDAxRjcyQzY3QUQzODY4MzQ3MkY4Ci06MTAxNjgwMDAzQkM2MTI4NzA5RkZEQUVFQkY5Rjc2MUNFQUYxRUE2RUNECi06MTAxNjkwMDBBNUI4ODcyNkYxMjdFRjUxMTVFOUY4RkI3NDg1M0E4NTNGCi06MTAxNkEwMDBFRTU3ODEyNkEzN0I0OTk3NTNCOTVGN0IzQTk1OUY2Nzk1Ci06MTAxNkIwMDAyODRBNzdEMEZEOUNGMkI1MjZDN0YyMENERTRGRkI3REExCi06MTAxNkMwMDA0RjU4REY5NUVCOUE0QjY4M0ZGM0Y3MjY4QUFCNTRBRTQxCi06MTAxNkQwMDAwODczODY0NUYxRjMxNzNCMDZEMEY5NkFCRDExRjA1MTQ2Ci06MTAxNkUwMDA2NkU3RkFFMkIyOTg2RkE1N0REMjVENzQ5RjQxQ0Y4RTE2Ci06MTAxNkYwMDBFOEExQkVEQ0MyRjU2Mzc5MENFMDNEOTIzMzhBNkUxODM2Ci06MTAxNzAwMDBCRTY3QzdFOERDMjRGNjlCMzQyODYwN0M0NTk0NDMzRkUxCi06MTAxNzEwMDBGNjI4N0ZCRjREM0E1NjgzNzExQjZDREY3NzEwRTIzMTlDCi06MTAxNzIwMDA3NkRBNzQ4NEVGMTU5NUU0MTk5MEI0NzYwNEZBN0RBRkY3Ci06MTAxNzMwMDBBODk5QjhERTJFNUFCNTZGMUNFQURGRjlEQjA3RTM4REY2Ci06MTAxNzQwMDAwOTU2RjRFQTA3NjQzRkU2MEJGQUI3ODg3MzY3QzU5MDU5Ci06MTAxNzUwMDBDNzc3QjYyMkQyQjgzQ0I5NTUxRTJGOEE0ODUzMzRFRjBBCi06MTAxNzYwMDAxMEM5RkFGMjU1MDYxRUJGMDczRDhGOEFBNTdDRDlDNzVFCi06MTAxNzcwMDBENDZGQjlBNTM5MDFGNTZGRjk2RUMzMzBENEQzNTE2OTZGCi06MTAxNzgwMDA1QzJFOEI5N0E1NjUxRjAxQkUyQTM2NDREM0JCODM2NUFCCi06MTAxNzkwMDA5RTAyMjNFNkNCNkExNUNBRkJCRjhCNEY0NzNFM0RCRjc3Ci06MTAxN0EwMDBFMkI1MjhFNDlGMTM2MUJFOUU2ODk3NUExNzg0MzlFODEyCi06MTAxN0IwMDBERUExOTVDN0VCQ0VBRkU4NDlGNzk1NjY1OTlCMkRGOEFBCi06MTAxN0MwMDA5RUMxQUM0NURENkRBOEJGOEY1QTdENDZBQzNGNUE5NzkwCi06MTAxN0QwMDBBMUMzQkNEMzZBQ0RDNkJDNTM3RjFCRTVDRjhCRjMyRDExCi06MTAxN0UwMDBGNDgzN0NBNTcwM0E5NzZEREI2N0M0QkY0RjMyNDRDQzVECi06MTAxN0YwMDBGN0UyMkIxRkY0QzJGODRGNzk3QTczMkZCNDJCQzAwNzhFCi06MTAxODAwMDBCRDUyMTBDRjJGMjk2NDk3MkJCNkYxRjNFRTkyMEYyQTE5Ci06MTAxODEwMDA5MDBGNDBFRUU2MDkzRUE4RDhGNURBRjc1MTFFMkE5MDVGCi06MTAxODIwMDBGRTQzM0FGMjExRjBGMzdFMkFERkIxNzExQ0UzREZFRkUxCi06MTAxODMwMDA0NzNFOTE3NjBDRjIyQjBDMzY4Q0RGRjE3QzY2MUFBN0IyCi06MTAxODQwMDAzRjk0OEZFMUU1OUUwMUZDMUM1REZCMzkwNDhEMUM3NDA3Ci06MTAxODUwMDA0NjVGNTcxQUI3ODdDNUNCNENBNDZGNUQ2OTVDMUU1QUFCCi06MTAxODYwMDA1NkVEOEU0MkZBNUQ3QzY1REYwMURDNjcyOURGMDE1NkFCCi06MTAxODcwMDBEQTFFNDIxRTA0M0UyQTcxRkU1MTA0M0ZGOTE3OTUzOEM0Ci06MTAxODgwMDBERjI4RkZGQ0RCRjk1RUM4NjEyNUUzRjM5M0YzQURENEY5Ci06MTAxODkwMDA4QkY5Q0I3QUYxRkQyNEMxMkY2NTRDRTA2QjU3NkYyRThECi06MTAxOEEwMDA3NzQyQ0U1MDhFRTlCRDBFMzEzRkI3NERGQjBFRTVGN0M2Ci06MTAxOEIwMDBDNUZDREMyMjY1RDZCQTI4QzQwRkQyMTdGNTBGM0UxMDNFCi06MTAxOEMwMDA2OTk0RkEwNDlBNUNEQ0JFOTFDRUYxNEI3QTQ5Rjg1N0UwCi06MTAxOEQwMDAwOTM4NDBERjM5NjM2QzdFM0FCNjc0RjI0RTY0OTVFMEE1Ci06MTAxOEUwMDA5QjYzOEY3NzQ5QUYwN0ZDOURERjRBQ0Y2QzExQkZFQTNFCi06MTAxOEYwMDAwM0M2OTM3QzIzQzdDQjdENzlEMkREMzg2RkU4REY4N0MxCi06MTAxOTAwMDBGRENCNzE4RjdBMjJGNEQ4Q0Y1MUM2RTU0M0MyMkZFNUMzCi06MTAxOTEwMDAzMkI3RkFBMUJCMDc0NzYxQkI4Qjk2RUUwMzcwREU5QzIyCi06MTAxOTIwMDA4RUFCRDJBQ0Y0QkQxM0ZEMDVGOERFNTlBRjUwRENGQTM2Ci06MTAxOTMwMDA5ODU4RTcxRjdCRkNCNUE4RTIwMTdFN0U3RjQyN0MyNzlBCi06MTAxOTQwMDBGOTBDN0YzMDNFMjZFMTZEQjJGMTM4NzAzMERDNTIwRjc5Ci06MTAxOTUwMDA0OUI4NzM5RkI4RUY2RTJDOTdGMEUzQkU1MTIwOUY0QUIxCi06MTAxOTYwMDAzQzRBN0U5NUY3RjU4MkY5OTY3ODRFREE0RkI1NzNGRUNDCi06MTAxOTcwMDBBRTRDM0Q0NkU3NzczQTk0MDdGNzI3RkNBMjEzRTI1Q0FBCi06MTAxOTgwMDA3OTZCM0NFMzcxRkYxNTg5RkIzNUY3OEExODhCMENCNDMyCi06MTAxOTkwMDAzRkQyOEVDMENGMUE3RDgwRkQ2OUJGQTcxNkU3M0M4QjcyCi06MTAxOUEwMDA3NEJCOTBENjhERkEzRkM3RUE4QzM5RDA2RkQ5OTlFNkNGCi06MTAxOUIwMDA3MUY4Q0U5REY0NDNFRkI4RUE1M0EzMzE1RUI1OEI5RjI3Ci06MTAxOUMwMDA3NzkzRkM1Mjc2NjEzRkM5NDFCOUI4RkY1NEI0RUE4M0JBCi06MTAxOUQwMDA4MkUxQzhFRkJGMzVEMEJFNEVEMUUzNjM4REU4REZDRkUzCi06MTAxOUUwMDBERDMyNzMxOEEyMDFFRjQxQTA1RTNGQkI3OTY4MjZCRkNDCi06MTAxOUYwMDA1OTYwNEQ5ODg2RjcyMTM2M0YzM0VEMDEyODlGNTVBRjRBCi06MTAxQTAwMDBEMkJCMEREODBGQ0E2RkQxQTM5OTE0NUYzRDExRDY1MjI2Ci06MTAxQTEwMDAzMDBBRkRGODFGQTg1NkY0RTM2RkRGMzJGNDMxNkM3RjEzCi06MTAxQTIwMDBCQkE1NkIwQzNEQjZCMTM5OTZGMjRFN0QzNEQ5MDdFOUIyCi06MTAxQTMwMDBGN0NBNzM4MEQ1RTJERUM3NUY4NERFM0ZEQzlFMkFFMjEwCi06MTAxQTQwMDBGQzVGNzUyRkRDOEY2RkREMTg0NkVGQUMxNDFBRUQ3NTU3Ci06MTAxQTUwMDAzRTFDNkY0RjE3NUE2NzU0MUFGMUVBMjNERDVCMjVCRjBFCi06MTAxQTYwMDA2QzhFOTE5OTkzODY1MEI5MzkwOUNBMEYxQTlBMUY0NUZECi06MTAxQTcwMDAzQjcyRjA1MUNCNjA3QzNGOTJBOUQ3ODYxNTczN0Y5QTU5Ci06MTAxQTgwMDBFRjNCQzY2QURGMkQ5MTcwN0MyNEM2MEZFRTRGN0VERkUwCi06MTAxQTkwMDA4NEVCMDgxQkRENEZBNEVGQ0ZBRUY4RUQzNEI0ODM2N0MxCi06MTAxQUEwMDBCN0Y2QjRFMUJDNEZFRjA5QTNGQjAzQTcwRERBNzdDRjdDCi06MTAxQUIwMDA2RUY1REU1N0YwN0QyOTc5NkZGNTc0OUFENjhGOTNGQzE5Ci06MTAxQUMwMDA3RUMzN0IzNzdGRDM5RTgzQkNEMUI5QTUwQjRCMTlERDc5Ci06MTAxQUQwMDBGQjdFMzk4REQxRjc2MzIyQkVEQTg5RTcwODRCNkE0RDY4Ci06MTAxQUUwMDA1NkJDMDc3MzEyRjkxRUY3QjM3NkFCRkNGRUE1OTlDQjczCi06MTAxQUYwMDBDMUM5REQ5OTc0QkZCN0U0NkYzQzVGNTJBNzc4RjEzRTZFCi06MTAxQjAwMDBGMkZFQTc5RkEwRjMwQUIzQzFDRkM0QUIwOUVERkVGMzY5Ci06MTAxQjEwMDBCQUE3QTdBMTM4NUM3NkI4NTdFMjdERkVDQjVCRjlGOThFCi06MTAxQjIwMDA4QTBFRUYzMjFDREM3OTIwQzlERUI5REZGQzVERkJDQjBECi06MTAxQjMwMDAzMjBFMTE5RkFFQkRDRjJGRjEyQ0Q3NEY2RjAyM0Y4Q0NECi06MTAxQjQwMDAxOEUyQzdEQjY3NEJFNzkwQkY3QzYxQTk5QkQyNEJDQTA5Ci06MTAxQjUwMDBCMUI1QjcyMzFGNUJBMkU5QkVDMDFGRUI5RjUxRjFCRDFBCi06MTAxQjYwMDBBOEYyNUQ4M0FGRTEzQTc4NTQ2NDM0QkQ5M0YyRDlEMkUwCi06MTAxQjcwMDAyNUI0OEY3QTYxNjkxNUE1OTJERTMyMEU3N0M3QUU0NjFECi06MTAxQjgwMDBGQUVFQjNGQUNDMDZCQzlGRkI0NjY0QjRCMDAzQjY5MDQxCi06MTAxQjkwMDA3NEVERUNERUIxOUNEN0I5MUY3MEZBNEFCOENGNkQ5REQ5Ci06MTAxQkEwMDAxOTg1RjM2QTdDM0VCNjYxMjREMjM1MjJEQThBN0U1RkRCCi06MTAxQkIwMDBBOTM4NDc3MjZBM0RGN0FCQ0Y5OEEzN0Y5MzBGRjQzREU2Ci06MTAxQkMwMDBCMzYxNEEwMkJFMzczN0JCRjFERTY5NTg1RUIyNDdCMTM2Ci06MTAxQkQwMDBFMjdBQzBCMTY3NTIxNEFFREIzRUQ1Qjc0NEUxRkRBODRFCi06MTAxQkUwMDA0RkQ3Q0I3QjU1NUVGQTNCNTRBM0YyRDgxNDZDM0ZDQTU3Ci06MTAxQkYwMDBBNzY3RjYwQ0JFNzU4RDdDMzJGMjgyOUVFRUJGOUU4NzgzCi06MTAxQzAwMDA3MjhBOTM1QzBCQTczODA5RkNDNEUyQjk5MUQ5QUZGMzhGCi06MTAxQzEwMDBGODRBRkIzQTU3QUNGMzZFMTdGMzdFMzRERDI2RjczMTAyCi06MTAxQzIwMDBBODNDNzcwNDJGM0ZCRDYxRTc0NEVDRUZFQzY2ODMxNUQ5Ci06MTAxQzMwMDBFMUZFNkNCMzgxRkE5RjA3RUIzMzFEQzA3QjY2MkI1RjFGCi06MTAxQzQwMDBGNzYwMUVEN0NCNjdCN0YyRjVDREJDM0FCRUJFMjk1RkIxCi06MTAxQzUwMDA2MDcwRjJGQkEyNUE3RUNDMEQ2ODQ3RUZGQjc0RjI1RTE3Ci06MTAxQzYwMDBDODNDMjc5RkRGM0NCMDk3MzhERjYwQkU4RDYxNzU3NDNDCi06MTAxQzcwMDA4RkVDOUI5RTE3MERFNkRCRjk5MjVGODU3RTY4RTdEN0I4Ci06MTAxQzgwMDBDRUY4NDRFMDEzRTUxREY5NTVGMkMzQkNGNTdDREZERTY4Ci06MTAxQzkwMDA1NjM3MzgwN0Y5NEVGMjQ3RjAzQjU5RDU0NkM2REY1NzVECi06MTAxQ0EwMDBENDg1RDM3QkI4OTMyMkVEMDZCNDBGNTNFMjVBQzYyMEY1Ci06MTAxQ0IwMDA1QTNFNEVFNzdFODA5QUFCNzNFMkJEMzc1NjZEMEFGOTA1Ci06MTAxQ0MwMDBDRUNFOEE3NEVFNTc0NTc0NjVDNEVGREU3NDJCM0ZDRkQ5Ci06MTAxQ0QwMDAyOUVFN0ZDOTE0MjY5Mjg2NzY3QjUyODRFRDBCM0IzNDI1Ci06MTAxQ0UwMDA3OTNBRkRBRTdCRjRDMENGOTM2RUI3M0REQUREQzFEODUzCi06MTAxQ0YwMDAyRkQzMEJFRUQxQzM3QzI2NjVEQTc2Nzc4M0ZDRjNCRjU2Ci06MTAxRDAwMDA5QUMwRjNCN0Q5ODYxQTIwQkY0Qzk5NzhDRjE4QzhENzk0Ci06MTAxRDEwMDBBNzNCOUY0QTBGMThFN0VDOTYyRTY5MzgzRjI4RkYxOTFBCi06MTAxRDIwMDA5NkQ3QzVCQjdGOEU2OUE1QjgwRjc2NDk2OTFEQjQyNEM3Ci06MTAxRDMwMDBDM0RGRkVGRDNEOTZBMzdGQjRGQkYzMkQwNjk2RUUxOEEwCi06MTAxRDQwMDA4MDc5MDk3RkU4QjQyNURERjlBQkY0Rjg4RUU1QzU4QzIwCi06MTAxRDUwMDAzRDRFRTdGNTNDRkMxRTBFRkNCOENDMDk3ODRGOEFGM0VCCi06MTAxRDYwMDA1QkIxQkM5NzUzMTM3NDJGQzdDMUVGOUZDOUZCNTJGMkVECi06MTAxRDcwMDAzRTU0NUZGRjdEQjIwREI3NzI5RkVDOTI4MUZGMUQyQTJBCi06MTAxRDgwMDBDNUE5QkQwRkE2MzRGQzg5REVGOUE5RjZCMDk2MzBBMjJDCi06MTAxRDkwMDA4M0Y2OUU0RDM5QkU1Mzc3MUJERDBCQTJGQjg3NEM2RjNDCi06MTAxREEwMDAyNzdEMzM1N0ZBM0I2OEFDODdGOURGMjk2MDg5RkNGQzUzCi06MTAxREIwMDBDMUEzODIxRjRGMkY2NTNEN0E4MEU4OUY3RkI3MzlDQTQ0Ci06MTAxREMwMDAwRTcwNUM5OEU4RUI4NUZBMjAzMkRDRkQyN0M0RDdFOTc5Ci06MTAxREQwMDAwREQ1QTkwQkUzRjAxRUFBQzk5MTBGRURDRjc4Rjk3REJGCi06MTAxREUwMDBDRTMyRTFCN0IyQ0RGMTQyMkZBOEJFM0JBMTVENTM0NjQyCi06MTAxREYwMDBERjRENjg4N0RFMTc3Qzc1MjFDMzk3RkUyM0Q0MkIxOTJFCi06MTAxRTAwMDA3QzlEMDRFREU4M0M1RERFRjJCQkUyQjFERDg1RUQ0RjhCCi06MTAxRTEwMDBGNDk4MEQ3MDlCMDAwNkJDQTczNTFFRkExQzYxQTNGNzUxCi06MTAxRTIwMDBBQTk4NEFGQkNGNUVGRTdFOTI5RTc5QTI2Q0Y4RUVENTEwCi06MTAxRTMwMDAzM0U5RTIzRTExREQxMzk0NzQ5MkY4RUY0MDE3MTgxQTVCCi06MTAxRTQwMDBGRDU5OUQ5OTE5MTBFRUJFNkMwM0ZERkQyRjQ5MUZGOTM4Ci06MTAxRTUwMDBDRUUyQzJERDNDRkU0Mjc3MjQ0NTFFRTM0OEE3Q0RFMjM4Ci06MTAxRTYwMDBFRjlGNzVCMDhCNkY5MUJGMEE2MkU5RDFFODlGMEQzMzg4Ci06MTAxRTcwMDA0M0RCQzkxMTFCOEREOEY1Nzc2RDJGRkY5RDJFRkM5MjhBCi06MTAxRTgwMDBDMTZDNzBFMDNCOTJBNUEyQ0Q1OEI1RDA4RUVGNUIyRDEyCi06MTAxRTkwMDA4QzM3RDM3QjI1MEI1RkU4NEVGQ0MxOTZGQzkwMDVCNkQyCi06MTAxRUEwMDA2MzFCNjI4OTVGNTY2NkE4ODRGRkI5RjU4Q0RFMUQyQTI0Ci06MTAxRUIwMDBBODRGQTZGMzk0RjlGNTM2NEFBM0RBMTJBOUZDRUM2RjAxCi06MTAxRUMwMDBERUM5RTI3QTg5RDNBN0UwN0ZCQThDQTY3MzRCRkZEMzMxCi06MTAxRUQwMDA5QjUyRDZEOTdCQTc5MTY2QkFDRkJCRjAyMEI3NkIwQkNDCi06MTAxRUUwMDBBN0NBQkZDN0MyRUZBRkJCMDQzOEFFQzgxQThBMEJCOUM2Ci06MTAxRUYwMDAzQURDNTNFN0VGNTdCQUYwQkUwMDdFRTczNDUwN0Q2NzE3Ci06MTAxRjAwMDBFRjU3NEFGQzlBMDRERDgyREZCMzlDN0EzMDMzOTFERUNFCi06MTAxRjEwMDA3RjE0RUY1OTRFMTdFRDlBQzVCREIzQ0VERUI1QkM0RjU5Ci06MTAxRjIwMDBCNDdCMjI2QTVDMTNGMkRENzQ2NzY5Qzg3NzJERjU5RTc1Ci06MTAxRjMwMDAzMDA3RkFDRjg2RDQ0ODdBNDdFMTNFMzdGODk3OUFGNUNBCi06MTAxRjQwMDA0QzhCMUVGMTMwMkQ5QkJGNzMzOTc1QkFCNkRFOTBGREY4Ci06MTAxRjUwMDAzOUU5NzM0Mzc2ODc3NzkyMENBODhGNEQyRTZERkJFQzkxCi06MTAxRjYwMDBBRUMyMEVGNTY1N0RCRkY2NUREMTU0MjNEOTRGM0RCRTlGCi06MTAxRjcwMDAzQjBCRjk2OUUyNUQ1MUY0MEZEMUZGQkZFQ0I0MTBGRkU4Ci06MTAxRjgwMDA5QkM0M0JCOENEMkMyQjExRjVDMkFEQkUyN0ZCRkZEQkFDCi06MTAxRjkwMDBGQkIxQzFFRkM0MDZCRjAzREI3RkVCNDI0RDdFNjBERENBCi06MTAxRkEwMDAwRjM1RUQ2RkFCNUZBRUE5MUZFQzVCQURBOUNGNkNGQTNGCi06MTAxRkIwMDA5OTI2M0ZCNEY5Mzk0REZCRTE0NzM2NjlFQTQ3QjZCQzhCCi06MTAxRkMwMDBBNEE5QkZGRENDMEU0REZFOEVENjNGNjhEQURGRDlCNjkwCi06MTAxRkQwMDA1NzkzQ0Y2MUVGNjhEQUU3OUEzRkQwRTRDNzVBRkY1N0NCCi06MTAxRkUwMDBEM0ZFQUVDNDEzOUFGQUYxRjZGMzlBRkEwOTdEQUU2OEZECi06MTAxRkYwMDBGMjA1OEUyRjM1RUQzRjM3QkE1Nzc3NDVCRjIyRUEwQ0YxCi06MTAyMDAwMDBGMUFEM0E0MzYxRjg0NEY5RTVBNjI5NjZENDA3NkJCQTA1Ci06MTAyMDEwMDAwQTdEMjRGODZGQjlCMEQzQUMwN0EzN0JBQzYzRDU2QzUxCi06MTAyMDIwMDAxRkYxNUYzREZGQkJBMEMxNzY0RjdGREVFNUM0RjgxRjA3Ci06MTAyMDMwMDA3QjhEREY2QjhCMDY3RjUyMUYzMDdFOENEM0NDMDJGRkYzCi06MTAyMDQwMDBFRTVENkM5RTU1OTM4Rjc3MjU2QURBNzc5OTZFRDdENEJCCi06MTAyMDUwMDAyN0I5RkI2OEVBNTNFNjM4MzRGOUI0QUExMTlBRjY1RDU5Ci06MTAyMDYwMDA5NzM4MzVGOTBDNEY5RUE2N0RGNzFBOTcyNkRGQjM3NjgxCi06MTAyMDcwMDBCQUE2N0RFRkY1NkU0RDdENUZFRjFDNEQ3REZGQUQ1NTMyCi06MTAyMDgwMDA5QUZDQzBCQTI1OUFGNkI3RDU3QjM0RjU4MzdEMzU5QThDCi06MTAyMDkwMDBGQUNDQTY1QTREN0U2OEYzN0E0REZCRTE0N0JDOUFGQTFBCi06MTAyMEEwMDA5MTJENUIzNUY1Qjc5RkE5RDNFNEVGNjhBREQ3QjRCRkU5Ci06MTAyMEIwMDBCM0NEQTdDOUU3QjA4MzlBRjZCOUU2RjczNUY5QjFENjNCCi06MTAyMEMwMDA0RjM0RURFRjRBM0NBNkE5MUY2RjNGQUJBOTk3N0VDRUQ4Ci06MTAyMEQwMDA4NDNFOUY2QkNCODVERjUzRTBGODk3RTZGQkY2Rjc2RTA3Ci06MTAyMEUwMDA3NzI4NzQxRkVBNUNENzZFRjI3REM1OTYzMDE1RkQyNDAzCi06MTAyMEYwMDAxN0M1OTk2Qzc4MTAxMUY1MTVERTI3QjdGMUYzMzk4NUZFCi06MTAyMTAwMDAxNEFGOEEyMzdGODg0Qzk0MURDRjBCODFERjEwODVBQkUxCi06MTAyMTEwMDBCNjhDMENGNEFCMjNGQ0ZFNUJFQUY1Q0M5QkY3REZEQTY0Ci06MTAyMTIwMDA4NEZGRENENUVFQkU4OEYyMzFBRjZFRkIzODdBOUY5ODIzCi06MTAyMTMwMDA3OTU2MjIxQ0YyRkRCRjc3ODNERTZEOTVFOTc4RjMxOTlECi06MTAyMTQwMDBBNjBGRjAxNzBGODZENUE2MEVGOTlBMzhDMTc4RjMwNUI5Ci06MTAyMTUwMDA4NkVGQzFCNkY3MkJFMjIyRjhDN0JEMTcwNkY0QkYxNjBCCi06MTAyMTYwMDBENjE3RjhGNzIzNkI5NzlBRTk2RkM3RkY2Q0E5OTVGMjFBCi06MTAyMTcwMDBFQjk2MjY1MkZFRkYwMDNBMjlCRjQ3MDA4MDAwMDAwMDgwCi06MTAyMTgwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkVEN0QwQjc4NTQ0NTE4Ci06MTAyMTkwMDA5NjcwRERFRURCOEYyNDlERDA3OTc1Nzc5RURDM0M0OTBGCi06MTAyMUEwMDA0ODA4OURGMEQ4MDAzRTNBMjE2MDQwQzBFNjM1MDQ0OTE5Ci06MTAyMUIwMDBBNEMxQTg0MTQzQkE4MUY4NEY3NDc1QkIzMTEwMDJCMjczCi06MTAyMUMwMDBCMzkxRDExMDk1QzE4NjAxNjQxOTlEMDkyRUEzRDEwOTNGCi06MTAyMUQwMDA5QUYwOUFFMDNBNEM2MDFDQzVEOTE5MzdBMEEzRTI4RTU4Ci06MTAyMUUwMDAxMDFFRTNDRkVFOEZDMzdGQ0VBOTdCOTNCRTlEMEUzODJBCi06MTAyMUYwMDBGRTNBRkZGNzNGRkFGQkI0Mzg1NTc1QUI0RTU1OUQ3MzY5Ci06MTAyMjAwMDBFQTNDQUEyQUFENUU4OTg5MjI2MzZEREUxQzRBOUZGM0VGCi06MTAyMjEwMDBEQTk5OThDOUQ4MzY2RjMxQzFEQkJEMEU4MkZEREU3MjA2Ci06MTAyMjIwMDA0QTc3N0E5RDk0QkZDQjVCNDFGMDFFQUY4QkQyQkRERTY3Ci06MTAyMjMwMDAxQTRBRjc3OTNENTRGRTkyQjc4MUUwOUY3QTdEOTRCNkIxCi06MTAyMjQwMDA3QjlCMjlGRjE1NkYwQkMxMDdCQzZEMDRCRkVBRjU1M0RCCi06MTAyMjUwMDBEQUUxREQ0QkU5MUJERTc2MkFFRkY0NzYxMEZDQTZCNzU3Ci06MTAyMjYwMDA4QkUwMkU2RjBGQzE4N0JDQkQwNDFGRjE5RTI2Rjg5ODJFCi06MTAyMjcwMDBCNzhGRDIxRUVGNjc5NEJFRURFREE3RjI3N0JDNTcwOTdBCi06MTAyMjgwMDBCRThFQkZEQjE5RkMyQUNEOUZFNDMxMjYzMDk3RTY3QTVCCi06MTAyMjkwMDAxRUMyQ0NDOTI2MzJGNjAwRkU0QjgyRkZFMjQ2ODhDQzM1Ci06MTAyMkEwMDBDMkQ4RkQ4Q0ZGM0VEN0IwOUE3NjEzOTQ3N0ZFRjIzRkVBCi06MTAyMkIwMDA4NTAyQzY3NEE1OEM4RDFGMEY2OTYyRjZDRUM2MzRDNjIyCi06MTAyMkMwMDAyNkIwNzVFNjRGNzIxOEQzNDA1N0Q3NjMwN0ZCMDk0RTA3Ci06MTAyMkQwMDAxOTEzMTlENkMzREY3NTJERkVERkM3NTgzQ0ZDQkY5NDE4Ci06MTAyMkUwMDBFNTc4NEM4MzY5NTMwOTE0NDJGQkJFNTU4MjdGNzcxQTA3Ci06MTAyMkYwMDA1NUQ3MjAzRUFCOEQxQ0JGNjk1QTEzOTU1NzNFMkNGODFECi06MTAyMzAwMDAwRDAyNjM1NTIyRjNFOThCMThGQjdENTg1NDAxMUJDMTY0Ci06MTAyMzEwMDBEODI1OEYyRTQ3QzQ3MjIxREMwRTgzMDRGODhGM0E0NEVGCi06MTAyMzIwMDAwRTdFNUQyQzhFQjFBNTlEODYxRDlCRDIwNkYxQUE4NEUyCi06MTAyMzMwMDBFRjM1RjBGRDJCNTYxQTBDQUI2NDNEM0FDNDAzRjIxRDg5Ci06MTAyMzQwMDBEQTE4QzY5RUI3QjhBNjRCOTBGRjYwOEFDNkE3ODdGNjc0Ci06MTAyMzUwMDA5OUM5OUZFRDhDNjRFQzJEOEI2QjA2RTY1RkYyREM3NzAwCi06MTAyMzYwMDAwQzFCN0ZDMDZDQ0ZDNjdFNjYxQkJBRTIxNzQxRkZGRDE3Ci06MTAyMzcwMDBDN0I1RjY5REQyRjBGM0UxNkUyOTY3NkNEQzBEQ0FERkJDCi06MTAyMzgwMDAzQzk3RUMwMjNDQ0FGRkEyNzVFMUZDOUZEMDQ1NTZGODkxCi06MTAyMzkwMDBGMzAxMkY0OUUwNzg0QTFBNTUzQURCRUE1QTgyRjg3QzcxCi06MTAyM0EwMDAxOUU5Qjk0NzAzNTNGOEU1NkRBQkY2QUM4MTIxNTVBRTk5Ci06MTAyM0IwMDBDQTFBRTE4MkVGRUU4MjI1NjMxOThDQ0Q2NTkyOEU0MUI3Ci06MTAyM0MwMDBGOTdDRTYzODlBMDY0RDJENjQyRTgyMTczMTFGQTU2RkQxCi06MTAyM0QwMDBDNUJCQUFCMTlEQzVDQzRGQjA2QkIyMjEzNUQ0Qjg4Mjc0Ci06MTAyM0UwMDBGMTcyQ0I3OEI5NjU3Qzk0RjQ3MUFCQUI4RUUzRTUyMEU4Ci06MTAyM0YwMDBCQzRFNENCQTIzMUJDN0E1RTBGNTk2NTVBMjdBNzM1ODdDCi06MTAyNDAwMDBGRjc2QzRFRkNCODMxNzNGMTEzMjg2RDJDNzc3NDAxN0QwCi06MTAyNDEwMDAyNjY4MUVFQjMxM0RBQzczQTM4RUQxRjc4RDhGMDg3RUZECi06MTAyNDIwMDBBNDZCODUyRTJBOTk5MUI3RkIxOEU0MEI4MTc0MDJGNEYyCi06MTAyNDMwMDA1MTg0RkNEMjlGM0EzNzkyRThFNDQ5MDkxQTdDNzA5MkExCi06MTAyNDQwMDBENkE3MUYwQkUzRDRGOEIzMDUyREQxODc1RTAwRkMxRTgxCi06MTAyNDUwMDA4ODAzRkE0ODFGOUUwRUVBOUEyMTBERTAxRkEwQUY2NzdECi06MTAyNDYwMDBCMEJERjNBRkZGNUQwRUNFOTdGQkNENDkxMkNFNTdBM0EzCi06MTAyNDcwMDAwNkQ2MDFFOEQ4RjdCNkQ2QkU1QjkyOTkxNDYwRUQ5NDAzCi06MTAyNDgwMDAzMTdFQTQ2QjI2REFFRDczQzdFMDdBQjFBNTRFQThERkUyCi06MTAyNDkwMDBBRDY1MERGQkYzODdGNkZCMkFBRTE3QjQ3RkMyQTYyQjAyCi06MTAyNEEwMDBGNzUzQkI5Q0NGOTVGMjlGRTJGQUM1NjNDQUVCQUQ1RUQyCi06MTAyNEIwMDBGNTY5QUQxNkYwM0Y3MUU4OUM1RTFBMTM2MjFDMEQ2RjUyCi06MTAyNEMwMDBFNzY2MDZFMEVGRUUzODMzREQ2MTQyRTRGQUYyRTc0NTE1Ci06MTAyNEQwMDAwRUU2OUY5NEU5NDRBMTFGQUQzRUQyQjVDMzE0ODgxNzAwCi06MTAyNEUwMDBFRjE3RThGOUU3NDQzN0QxNDBDRjE5NDRDRjlGRjhFMDIwCi06MTAyNEYwMDBEMzM5MDY2OUM0MjI0OEZCNjA2QUJBMjA3NUJENjBENjJDCi06MTAyNTAwMDAyM0REMkM2Nzc2NEFBQjk5OTNEMjA3NjBGOTkxN0U5REMzCi06MTAyNTEwMDBCRUE3RjQzOEVGMEZCMjc2Q0FBRjJCQkVENzgyRjQ3Q0Q5Ci06MTAyNTIwMDBCRkM2OTU4QTcwMkRFQkE1N0MzN0VCMkZCM0MxRkMyRDcwCi06MTAyNTMwMDA2QzVFN0JENDA2NThDRjZGNzk2QTVBMDJDQ0VGM0NGRkIxCi06MTAyNTQwMDBCMkEzOThDRUREMjU3Q0UyOTM4ODNGN0ExMEFGM0VDMURFCi06MTAyNTUwMDBCMzNFMTFGQUJGRkJBNTkyRjU0OTkwM0Y0N0NCRDc4NTEzCi06MTAyNTYwMDBGRDJCNUYxNzQ1N0UwNDhGMUJGOEExOTc4RkNCNDFFM0FFCi06MTAyNTcwMDBEMjQ2OTVBQkY4QTFGMjA5RTYxMEEwOURGRTgzMDZGRkI2Ci06MTAyNTgwMDBDRUI0MDBGRTI4N0VFOERGOTM1MDhFODlGREY3RTA3QTE2Ci06MTAyNTkwMDBCQkRGMzRDNEUwN0EzRjA4RTIxQkM3MjkzODE4NkI4MEUwCi06MTAyNUEwMDBGRTkwRDYyQTYzODgyQTg4REUxRjYyRTE3NkFDRjdCOUVFCi06MTAyNUIwMDA0Q0RGOUZBNzMwQTJFRkNGMDVFNjYwNDBCRjE3NzRBNjlGCi06MTAyNUMwMDA2NjAxRTU1QUFBQ0I1NjA0RjhBQzYwQkUyNjA2RTU2RTU1Ci06MTAyNUQwMDBDRDRCMDUzODRGMjMyNUQ3QTc0NEQ3MUZCNTM3MTVBNkIwCi06MTAyNUUwMDBBMUZDRjdBNzBBMjhGRkY3MTlFQzhENjlBQUZEODQ1RDA1Ci06MTAyNUYwMDA4RjQwMjFFMzYxMzg5RjNGQzA3NkM3MEVDNTRCMjgzRTEwCi06MTAyNjAwMDBGNjlGNDIxNDYzMDYzREYzMTk4Qjg4QkZEOTQ0RTRFQjZGCi06MTAyNjEwMDA0NDNERjE1NzIzNEU2RDA2RjZFMzk0M0NBNkExRUQ5RjkxCi06MTAyNjIwMDA5MEYxRURGOTRBNEI3NEVGODNGMUVDMTY0MkY1QzNGN0U0Ci06MTAyNjMwMDAyQjQzRjg2MDNGMjQzRjJDOENGQUQxQTc3MTNFNTZGQTA5Ci06MTAyNjQwMDA2M0E2QkU2NDI3RDA3NTZBODQ0Qjk3ODY4MkMxMTZDNzdECi06MTAyNjUwMDBFNThCOTlDQjk3OUVCNDRGMzM3MTdERTY0Q0RFQThDOENECi06MTAyNjYwMDA2NTZBOEZEREM2RTVEMTA5OURFNDQzRjg0NDQ5OUExREFBCi06MTAyNjcwMDAyNEQ3ODA5Q0JEQUJGODk3QTcxMThGQkI4Q0E2MkUyREJECi06MTAyNjgwMDBBNEVDMTZERDlGRkE5NDdEMzA3RDcwRkZCRDRCRDk3RkExCi06MTAyNjkwMDA2RkUxRkJFRjFDOTlCNUVGMTJCQkJBRjE3QkM2RUMzQUM4Ci06MTAyNkEwMDBDNDJGOTdGRDVFOTk4RjZEQjhERjJBRjI3MUM4N0UwQjNCCi06MTAyNkIwMDAwM0VCQzVGOTEzMjUyQjgzNzRCNUMwQzdCRjNBMjVEQ0RFCi06MTAyNkMwMDA4RjdDQzQzNkU3RDJGOEY0QjJGQzBDRkVERTVBQzE1ODU3Ci06MTAyNkQwMDBBNjUxQzYxM0ZFNEI3MDE5NTk2NkNFMjA5QzU0NjM1NjAyCi06MTAyNkUwMDBDMTI5MUU5QkFBRkVDODA2NDk1NTlFRTZDQjUxOTU2Nzk3Ci06MTAyNkYwMDAzNERCNTU3MDU2NEJCMUFBRkVBODM2ODcwQUNFRjU5NzQzCi06MTAyNzAwMDBBQkVBRTdFRDc1QUFFMDMxRUQxNUFBRkE2MzNCNUNBQUU2Ci06MTAyNzEwMDBGMkMyQUUxQTU1RjlCODFFOEYwQTlFRDBEQkEwQUFGRkVFCi06MTAyNzIwMDA3N0E3N0RBQUYyNDk3RENEQUFGMjI5OUZCNUE4RTA1QkUzCi06MTAyNzMwMDBGQkRCNTRGNTZGQkZFQTU3OTU5N0IwN0Y1Njk1NEYzNTQxCi06MTAyNzQwMDBFRTU3QzFEM0NDQUZBQkVBQkY4MEZCMTZGMENGMURCNkJFCi06MTAyNzUwMDA2RTU1RkUwQ0U5QjhFQUJCM0I3MzRFQUFFMDE3RTQ3NTcwCi06MTAyNzYwMDBGNjJEMEUyN0JFNjgyREU3RkJEMTZDRkIwN0FBNzY1ODI1Ci06MTAyNzcwMDBFNzY4QkVGRTYxM0M2RjdCQ0YxRjBCNTE0RTZFRDdGNEY2Ci06MTAyNzgwMDBBNzIxREQ0QTVBNzMyMkYyNzE2NkYxREM0MzQwNjYyQ0MwCi06MTAyNzkwMDBEQkIxQUExNEM1NUI0RUY5NTM4NzMwMURFRERDNUY4QUFGCi06MTAyN0EwMDA2QzkyNUY3MUYyMTBBNjA1QUU4QkE1RDAxQ0IzRDc0NDE2Ci06MTAyN0IwMDAxRkM2QjRDODUzMzhENThBQTgzNENDM0Q4Q0U5NDRERjUxCi06MTAyN0MwMDBBQUE5Mjg1NzVGNzg1QzNGMUFGOTI4MkE0NkExNEYwNzIzCi06MTAyN0QwMDBEMTY3N0Q4Mjg2RjhCOTdFQjFDOThGRjJDNzMyQzUyNDMwCi06MTAyN0UwMDAzMjkwMTM5NjFGNUFENkIxMDI0QzhCOUEzMTZERjYxQTVECi06MTAyN0YwMDA5OTVGMEZGQTgwOTc1MUJBQzk2QjY2RkU2QzIwNjdBRjdDCi06MTAyODAwMDA4REUwRkE5M0Y3OTVBNzQzM0IyM0FCNDQzM0FBOTlFNkFGCi06MTAyODEwMDA1MThGMjU0OEQwQkVGNUU1OTY5QzVENzZDNkQ2RURCMEM1Ci06MTAyODIwMDBDRkQ3RTU0MkZGMTk5RUM1M0JBMjAxNEU2MzhFMDUzMDBFCi06MTAyODMwMDA3RjE2OTgyMzM2OTlCMTI1M0JERjc2RkFGMjg3QzI5NzQ3Ci06MTAyODQwMDAzMzlENEQyNDE3QzRGNjVDRDRGRjk0NzYzNzk2N0U2RTg0Ci06MTAyODUwMDBENzk4MjFERkY3NEJFNzExOThGN0FERjFFMUY0MURDMkVFCi06MTAyODYwMDAyNTk5NUZBNzVENDcwQkI2MEJGOTlFRjYxMDdDRkM0Q0QzCi06MTAyODcwMDAxQURGN0Y5N0E0NzM3RDBBODc4NEVCNjZFNUNCQzZBQzJECi06MTAyODgwMDBBMEE3OEM4MEI5REMzQUE5RTEwQ0VBRjBBMkQ5MjdBMDc0Ci06MTAyODkwMDA3QzYyRDdFMDdCOTAyQjg5NTgyOTgzRTBEQkMzMDE0RTEzCi06MTAyOEEwMDA0MDU4NjI2QzdGOTZFQkM3RDhBRkQ1QzVEOEQ5MDBGQTJGCi06MTAyOEIwMDA0OUE4NTFDMzVCNjE5RUNGNjYwRUUyQTM1QkFBRjE4OTcyCi06MTAyOEMwMDAzMDA2REQ4RjlENzYzQkY0QjNBRDBBQzYwQkYwNTYzRDY2Ci06MTAyOEQwMDBENzM3OTQ3QUEzMzQ4Q0Y2RjcyRkQzRjg3RUNFQUVDRENCCi06MTAyOEUwMDBCN0EzOUVGNEE1M0M5RUU3QkNGRDhCM0VDRTQ0N0JFQjlDCi06MTAyOEYwMDAyQUE1ODkzNTFFQzEwNUYyQ0Q1QUU5QjRGQkEwOUVBRUNBCi06MTAyOTAwMDAxMUU2MjM4NERFRjI4QjM0OTFCRUQ3MUQ3RTQ0OTBBMDY1Ci06MTAyOTEwMDBERUE3NjkxMkMxODk5NTdFMUE3NzUyMERCNDFCODBCRjVDCi06MTAyOTIwMDA0REY0MDk2NkM4QjczREU2MTMxMDNGOUJEOTY5NjdGMEJGCi06MTAyOTMwMDAxRDMzNUE4OEZFRDdDODNDNjE2QkY4Q0JBMjhGNDEwRjdDCi06MTAyOTQwMDBEMzc5OUQ3NkFDQTdCQjEzRTgzMzFGMjdENDYzNjZCODUxCi06MTAyOTUwMDA0RUM5RTM0N0IwMTBFQkEzQTQ4NjNFMEQ3M0RDNDA5RjQ1Ci06MTAyOTYwMDA4RjRBN0RENDQzRkJDNUREMjYyOTBCRThGQjg1QzVBNjMwCi06MTAyOTcwMDA4QTFEMjFEQUZCNTQ5RTlGMEQzMUVBRkUyRDVBM0UxRjFGCi06MTAyOTgwMDA4QURDQkU2Q0U2RUJBOEYwRjE5QTY4QTY5MkUzNkI1MjgzCi06MTAyOTkwMDBDNjVCNkY4NEFGQjVDREM4NUMwMUY4NkU4NTdFQ0NEMEM4Ci06MTAyOUEwMDBCRUUxQUI1NTY2MUMzRkU4RDA0RUVBNEZFNEYyNjRDNzg3Ci06MTAyOUIwMDA4RjcyQzg2RTBBNUVDNzIxRjQwODk0M0ZBMjA4RTlBMzhCCi06MTAyOUMwMDBDRkRGMDg3QzY4QThEMkRCNTE2RkIyRkU0MzkzODA3QkQ3Ci06MTAyOUQwMDA3MzIyNkIxMTUwQkU1ODUzQ0E3QTQ0RENENzQ0NTdBRUE5Ci06MTAyOUUwMDAzMzg0M0U3OTMzQkE1NEQ2NEZEOTlGODNENzRCNzczRDQyCi06MTAyOUYwMDBFM0ZEMTI5Q0VGN0ZENTMxRDRDNzU2MUY4RjhGNzEwNTMxCi06MTAyQTAwMDBEMDUzNEMzQUE3Q0I2MkQ2QTI0NUZFOThDQ0RBMjlCRDZBCi06MTAyQTEwMDA4NUY1NTI3QTFCRUJBN0Q0QzFDQzIyQTZBNUNDNEU2OTcyCi06MTAyQTIwMDAxOTczNTIzQTlENzkyODJENjcyRDk0Q0U2NEVEOTRDRTdBCi06MTAyQTMwMDA2MkJEOTQ4MjNENDNBOTkzOTlDOUVFOUEwN0ZCMzdBNkRDCi06MTAyQTQwMDAwQjk4OTNEMkVGMzEwRkE1OTlFOTlDN0UyQjU4MEJDMUJGCi06MTAyQTUwMDA3N0IzNzY0QTNCODBFRjI0M0RGQTAxOEM5NDc2ODI5Q0QyCi06MTAyQTYwMDBDM0Y0NEQ5MDczOTg3Njc5MjUyNjY1QTMxRjIwODdEMkVECi06MTAyQTcwMDAyMzVFM0JBNUM3QkNDNTk0RjY3ODFENTRFRjZENkYzOTM2Ci06MTAyQTgwMDBBNUVGNzg5RDk0OUVGMDU2NTBEQUVCNzU1MUJENTNERTVDCi06MTAyQTkwMDAxQTRBREZGNTdBMjg3RENGREI0MEU5NjlBRjhGRDJERkI0Ci06MTAyQUEwMDA3OTlCMjkxREE1MDc3RUM2RjlDREU5MkI0NDdEM0VGNTBFCi06MTAyQUIwMDAyM0JENDMwMkY5RUM5MUU1RDI2MTg3RTY5OURDRjFCOEQ4Ci06MTAyQUMwMDA2RTFBNjY0MDNBMjg1QjIzMjBGRDU5NzMzNDBFM0ZBNEVBCi06MTAyQUQwMDA5QjcyNTYwQkY3NDJCQUUxMDREN0RGMENENjQ4RDIwRkVGCi06MTAyQUUwMDBBRDZERjU4MjA0RUQ3NjA4N0REQTA4NThDQkU5RTlBOUU5Ci06MTAyQUYwMDA3MzhEMjA5RjRCM0FEOUJBMDgzQkMyMTk0RjE5ODFFRTBBCi06MTAyQjAwMDA3NkU4M0NGRDNCQTBCQzY0QTczNEQ3MDg3QkQ2RTRDODdDCi06MTAyQjEwMDA1M0ZGQjE4RkMzNTQzRUU5MDg2QjM0MDMzQzJCM0RGQjlDCi06MTAyQjIwMDBBOTM4ODFFMzgxQzJFRjdCM0I3M0U2QUVDRDQ0M0MyNUZGCi06MTAyQjMwMDBDMkYzQzUzNDMwMkM1MUJGN0VDNDQ0RkE3NTYxREJEOTcxCi06MTAyQjQwMDA0MjBEQzA5MzFBNEM0NTY4MTcwNkQ0RUI0MkJBMUZBRTJCCi06MTAyQjUwMDA1RTcwQjlGMkREQjY1NTk2NDY5Qzg3MEQ5RjgwNUEwRTgxCi06MTAyQjYwMDA1OUE5MTk3RDg1QUJGM0Q1RUQ2QUJFNUVGRjRDN0I4MzE5Ci06MTAyQjcwMDBGRTAzRUIwOTM3Njg2RjdGOTZBMzMyN0RDMkZGN0UzQTcyCi06MTAyQjgwMDAwRkE2NkZEREY1OEZGNjZCQzgwRjY0OEVDMUZENzQ1NzBECi06MTAyQjkwMDAzNDk3MzNGREEwOUZFRTA0QkM3N0M1QzhGMEM2NEMxQTJECi06MTAyQkEwMDAxN0NBNDM1Q0I3MEQ5QkQyRkQzRTgwNzc4NTM5NTcxRjBFCi06MTAyQkIwMDBDN0YyN0ZENEQ4Nzc0MkQxQUU3MEQ3QTY1QzgyMzNDOTMyCi06MTAyQkMwMDAzRkIxMjFDNjkzMTM5MzhGRkEzQ0RGOTc1QTkzMUYwREExCi06MTAyQkQwMDA5MzAyRjhCRjM5OURDQkFGQURCNzVDRTlERDgxNzY0NDk4Ci06MTAyQkUwMDBCMzg2NjVDMTc3M0I5Qjk3NkZDQzgxNzY3RUJDMTlGNDI5Ci06MTAyQkYwMDAwNzgwNDdEQzVBQkQzMTBCQ0FEMzM3NkEyNjZBNjUxOThDCi06MTAyQzAwMDA4Nzc4RkM3ODczRjU5RTREQTg1RjI1OEY4RUM5ODY3NkYwCi06MTAyQzEwMDAzMzY0Nzk5OTFBREI1N0I4MDZFOEJDNTVBRkI2QTc5NTY3Ci06MTAyQzIwMDBGNDlGNjQ3RUE5ODY2NkNFODI2QzREOTVFREY0MUQzQUM0Ci06MTAyQzMwMDA1NjExQjhERkZENENDNkVGNTc1OTNDRDVERENFRkQ1N0Q4Ci06MTAyQzQwMDA4NjkxRTFGRTI3NjBGQzI1MjNCOUJGQzNCMkNFNDhGRUMyCi06MTAyQzUwMDAwRTRCRjI3RjlEQkMwM0NBMkREQjM0NzY1NEU5NDQ2QkU2Ci06MTAyQzYwMDBFRDVBMURFQUZCOEI1OTNCRjJFMzBFODE3RkVGNEJFMUZFCi06MTAyQzcwMDA3QTIxMjgwQUU5NzMwM0VDRjJBRERFRDM4QjMyMDNGQzMwCi06MTAyQzgwMDA4NEI2MEE5RjgwRjY3QkM5Qzg1QUExMEZGNzlGRTQwNzU0Ci06MTAyQzkwMDAwNUI0RkIyRDE1MkVDMTE1ODlGNjgxODdDQUNGNjVCOUZDCi06MTAyQ0EwMDA3RTkyMEVGOEQ5MkFFMUZCNDBGRDkyQjkxMjcwNURBMTI3Ci06MTAyQ0IwMDBERjhBNzZEMkYzNTg1MTYwN0ZBN0IzRjgzQ0FDMDczQjZDCi06MTAyQ0MwMDA5OUY0RDU3NTdBQzIyQjc4QkU0RTY1OTcxRUMwRjY5NURECi06MTAyQ0QwMDA3NTBDMkVGRjdFMDZCN0FCNzczRDAxNUQyMDFGNENFMkUxCi06MTAyQ0UwMDA3NkYzODlERDg5QTQzRkNFNjkwRDc3QTBGRDc0RTJBOTUyCi06MTAyQ0YwMDBEMTY1MDQ2Rjk5RUM0MDNERjJDNEVFQzlEMzMxOURCMzY4Ci06MTAyRDAwMDA2NTI2RDUzQjIxQjAxRUI0ODdFNzZDQjk1QkM0RkNENDAzCi06MTAyRDEwMDAwQ0MwMEJEQjNCQTMyNzdBOUNCM0U1NDFGOUZCNDdDQjA3Ci06MTAyRDIwMDBCMEJDNThFM0ZCMDlEQTkxQzU4REZCMjJEMDRFOUUxQzQ2Ci06MTAyRDMwMDBGOTRBMTJBNjI3MzQ3REY1REREMEZGNUQ2NkY2MkJEQzVGCi06MTAyRDQwMDA5RTlEMUJFM0ZFQjExQ0ZFMzFGN0E5NzQxREVBRDdCRjlGCi06MTAyRDUwMDA0QjRGQTdGNTlDQ0YxQ0M0MDc1MDgzRUNCQTVCRjZGNjJCCi06MTAyRDYwMDAxRTA2NEQ4QURERDZERTNGMTVDQzVDRTZFODMwMUZDMTdECi06MTAyRDcwMDBCNEI0Q0I1RTg2RDM1N0Q2RTMzQzgyRTlGNDVFNEYxOUY4Ci06MTAyRDgwMDBBQTJGRTVBNzVCOEU2MEJBMjREN0Y1M0I5QzlGMTdGRjVGCi06MTAyRDkwMDBFMTdCQUZCQzA4RjBDOEM3RUJDREE4MDc2NTNFRDEzN0QzCi06MTAyREEwMDA2MzI3RjlFQjc0MENGOTIxNkI5MkE3NDU4QjA0NkM3NEMzCi06MTAyREIwMDBDNkEwN0M3OEY2Njk1MTgzRkJCOTIxQUQyNTBDNjFDM0FGCi06MTAyREMwMDA3REU5MUFCNDBCNzc0NUI3RDREMEI4QjNDMjE5Q0VFM0I2Ci06MTAyREQwMDBEQkIwMEYyMTVENjQ0NTNCNjM5MDlGODAyRjY5MUQzRUYyCi06MTAyREUwMDA5M0U5RDMxMEVEMzE0NzYzN0UxOENGMUZBODE3Q0VFMUNBCi06MTAyREYwMDBGMzAzRjU1QUMyMDRFQTI3NDYyMEZCMTNENDA2RENCRkNFCi06MTAyRTAwMDA2REYyRkVEREM2M0MwOTM4MUZENjQ4Q0YwRUY0RUI2NEU4Ci06MTAyRTEwMDA5NTcwRkU2NzkxOUMyRUIwN0FEMzQ0RkE4NDlDQ0Q5NjJGCi06MTAyRTIwMDAxNkNGOURCODBFNTY5N0U4RUIwQkE0M0JEODA2MDdGNEQ3Ci06MTAyRTMwMDA5MTc0ODIxOURBRDc1QjA1MEU4MzlDMjFCQ0YwODc3RUUyCi06MTAyRTQwMDAwQzhCQzk0MjdBOEQ4MkJGQjUwMkRBMEJEMDMzNzAxQzZECi06MTAyRTUwMDBGMzRDODNERjI5NzQxNzlCQzFDNzM1NDJBNkJGQUM2NTBECi06MTAyRTYwMDBCQzNEMDVERkI4MEMyRTlGMDE2RjQ5ODNGODY4NjU3Qzc3Ci06MTAyRTcwMDA2MDFDOUEwMDdDMDJFQUQxRjgwNkYwNjY3NjFCRDIwNTQ3Ci06MTAyRTgwMDA0ODdBODFBNzRDMTIwM0M3NUZBRDcxODRBMTVENjQ3QTUzCi06MTAyRTkwMDBGNUZCRTg0Rjg5NDIzOTAyNzhGRTUzRjcyNDIzRjI2OUEzCi06MTAyRUEwMDBGMDM4NzIzMkQyMDhERjQ2RDA4NzUxNkY5RkU5RTJGQ0RBCi06MTAyRUIwMDBEQjU4RTkxMUM4M0U0MjE4Qzc5RjJDM0FEMDFGNjgzNTJECi06MTAyRUMwMDBBRDE2NzQwMUUzQjUyNkYzN0Q3QTY2QTVBNzFCRTVDQUE2Ci06MTAyRUQwMDBDQ0UyMDgzQkQyRjc5REFDN0Q5RDk5RjNGNzkxNENDMEI1Ci06MTAyRUUwMDA2RjE0MUJGODk5RDhDNDQxQkRGMDQ3NEZCRjdCMTI5N0IwCi06MTAyRUYwMDAzNDk5QjU5N0U0RTJGRUY5RjhGREIzNzBGREI2M0UzQUI5Ci06MTAyRjAwMDBCMzA3RjE0RkNDNzlBQTNCMDYxQTc0NUU5NEQ3N0QxOUFBCi06MTAyRjEwMDBGN0VCQTQ2QzEzM0YwRTFDNDc5MjA3RTA0MEJGNDQ4REIzCi06MTAyRjIwMDBCQTFDRTg0MTA1MkI3NDY1MTMxQUEyNzFCRkQxNDRFNEExCi06MTAyRjMwMDBDRjlDODE3QTRBOTQ4NkU0M0JDODI5NjE0MTQ4RkQzMzlECi06MTAyRjQwMDA4OEFFRTRGOTU3RDZFN0FFOEM0QzVBMzdBQjg5QUYwMzVECi06MTAyRjUwMDBFQkI3MUIxNzQ2Q0E4MzU1RDYwOUZBNkQwNDM2MUYwMTE1Ci06MTAyRjYwMDA3NERGNThBNkY1MEI2OEQ3NjJGRDI4QUNDRkUyOUQ5MUJGCi06MTAyRjcwMDA0M0Q3Njk4NzRFOUEzOTAzRTVGNEMzMUFGMzZFMzY3NDYyCi06MTAyRjgwMDA1RTgxREM3RTRCN0FFREMzNzE1NDBFRjlBMjkxRkM3RDFCCi06MTAyRjkwMDAwMUY4NkE0M0MxRUFGNUI4NTlGRDZEQUM2QkVFOENCNDJCCi06MTAyRkEwMDBBMUY5ODlDOTBCNjZFMjNFOUI1OENCNjhGRDgzQ0I0N0VDCi06MTAyRkIwMDAzREE2NUU1N0IyMzdDN0EzRkY4OEY5QkJCRUMxN0FDRTI0Ci06MTAyRkMwMDA0Q0RFNTU4NkZBN0NGMEJBMkE3NDk3MUExQjdBNUYxMDg5Ci06MTAyRkQwMDAzMzM5NUZBNjQ2RDg0Rjk1OTM1RTIxOTI5RUUwNEMxMUZGCi06MTAyRkUwMDBFMzAzRURBMjBEMTk3QzFGQkFGRDM1MTNFRDQzRUMyMzZECi06MTAyRkYwMDBBMzFGQjc1QzdCNTdFRjkzQjlCMDBFQTU1NzM0NjhBRUVCCi06MTAzMDAwMDBCMEEzRUYxQ0ZBRTE0QzQ4QTdGREVBRERENUZGMEFGNUI1Ci06MTAzMDEwMDBBNjdENjUxQTg3Rjk2RkIwQkUxOUU4MTBGMUY1ODA5RDlECi06MTAzMDIwMDAwMUYwREEyRkY2QjRBMEEzQTRCMTkyRDk3MURGNTVGQTVBCi06MTAzMDMwMDBEOTIzRjdGMzBCOURERjQ5RjIzNTU3NjQzQjQ5MEU4MkU0Ci06MTAzMDQwMDA2NTFFNDAyRjAwNjk4OTdFNzgxOTczNTZCNjkwREQ2ODM5Ci06MTAzMDUwMDBDRENDMDc1OThENkVCREY2MjVCNDVGRkU0OUNGRDBFRkJDCi06MTAzMDYwMDAzOEFGNDJEMjk1QzBGOEU3NTU0QUJBNjVFOEM3MTc1OTU0Ci06MTAzMDcwMDAzOUVBMTFGMzJCRUM5NDNGQkZEMkNFRjM4RDNDN0Y0MTY0Ci06MTAzMDgwMDA4NTgzRjIxNzU0M0E3OEJFMDlGMjYxM0UxNjU2Rjg3QkYyCi06MTAzMDkwMDBCREQwRUU0MjUzOENBNDQxM0Y3OEE1OTM5NzVGMzU1MDQ1Ci06MTAzMEEwMDBGOTNCNjAwRjY0MDJDOTg3ODdGOTQ5REVCNzdDQTZFMTY2Ci06MTAzMEIwMDBGMTEyNEZCODVGMDA1QzBEOTE0NTNEMTJDRURGN0QxQUQ1Ci06MTAzMEMwMDA3QjE2MjQ4NjE0OTE5OTAxN0VCNkMyRTlENzQyRjlGM0EyCi06MTAzMEQwMDBDQzlGODAxM0Y5NDZGNTZBNjczNkU0QkY5MTJDOUE3MTRDCi06MTAzMEUwMDA3QzZGMzhDMDZFQzZGOUFCMTU2OURFRTkwN0YwMUIzNTk5Ci06MTAzMEYwMDBDOTE0Q0ZEODIxRkJBRDdEMkI4Q0U0NjcwNTVEODdGQzFGCi06MTAzMTAwMDBBQzZDNDVBMkFDQzdGMEYyNkRDQkNEN0VENEM3NDAwRUZGCi06MTAzMTEwMDBEMjNBRjZERjI3OTIxRTAwRjJGMEVEMUNENDhCNUVDQTg1Ci06MTAzMTIwMDBCNDg3NDk0OEI3NkE3RUIzNTQyRjJGQTFGNjJBOTkxOTVDCi06MTAzMTMwMDBFREYyNTk5NUJDQkRDNjk3MzQ3RTBERUE1NUE2NzkzMzlDCi06MTAzMTQwMDA5MTBFMUFGNzMyM0JEQUFGQ0Y1NjlGMkE4QjQ1Nzg5QjA4Ci06MTAzMTUwMDBERENFRTU4NzVBMkUzNDU2NkYzOTJFRTE3ODNDMUE3MzRFCi06MTAzMTYwMDAxNkQ1RTc3RUFENDY0RkU5MkVBRDMwQzhDRkI0REVEMkRFCi06MTAzMTcwMDBBMEZDMTgyQTZGRUMzREQ4NEU0MjU1QTk3RDEzRDRCMzVDCi06MTAzMTgwMDBDMDM4RDE4RkJENERDRkYzN0RGNzg4MTQ2N0IwNTQ4QjE1Ci06MTAzMTkwMDA1REU2ODI0MUZFNEU5MUE3RDA4MjdDMTg0NUYyNDVDNTdFCi06MTAzMUEwMDA1RkEzNUY1MkMzM0Y5MkY5MTRGODVEQzQ3MUY5NzYzMUExCi06MTAzMUIwMDAzQkM5OTU1REVBN0EyMDI3MzUyOEFGNTJEQUQ0Rjk2NzAyCi06MTAzMUMwMDBCMjA0QzUyRkE1OUE4N0UwNzlCNjdBQjhEQzBCMUVFNzYyCi06MTAzMUQwMDBFMEI4QkFDMjQ2RDFCODM0N0M1QzI4RDcyMDNGRDc3NDU3Ci06MTAzMUUwMDA4OEYyNzMyQjQ1QkIyNEExQkM2QjNGODVFMzFGRjU5MjhFCi06MTAzMUYwMDBDOEJBMDA5RTU1NUQzNDEzRTk2OUQ2NjYwREI5NDM2NkI5Ci06MTAzMjAwMDBCMzVFOTIwQjM3MUJCN0UyREYwODFFNjdGMEY4MzY2NDM3Ci06MTAzMjEwMDA2ODY5REYxQ0QwMDdENzFCNDkxRjZDN0RDNEE0QzFCOEU3Ci06MTAzMjIwMDAyMkU4NUJFMUU4NTczODk3NTUxQTlFMDlGMzMwMjI1MzlDCi06MTAzMjMwMDBENkQ3QUY2QkI5M0M2OTM0MTE5REVBQUM4RkU1MDRGQTdGCi06MTAzMjQwMDAxRjg0RDFBNTIzQjBCRUVFN0FFQ0JDNzI4QTFCRTk2ODVDCi06MTAzMjUwMDBEQ0MxNzJBQzU4OTY2MzkzRkE2MDdDMkFGRjczMzg5MzkyCi06MTAzMjYwMDAwMkU2RjdENkZFMTgxNTdDRkJENTQ0NTVGRDEyMTAyRTRDCi06MTAzMjcwMDA4MUU1NTM4RDc5QUFGMjY5RTY3MTJBRjgwRURCMTQ1NUJGCi06MTAzMjgwMDBGRDE5RDI1NDE1N0M2N0NFOURBQUZBQjNFREYzNTVGMDIzCi06MTAzMjkwMDA1REM1NEI1NEY1RTczQUVFNTU5NUNGMkY3RjQ4NTVCRUE3Ci06MTAzMkEwMDBEMEI5NDYwNTJGQUFGODdCNTVGREM1QUU0NjU1Rjk5MjEzCi06MTAzMkIwMDA5QTI3NTVFNUMxRjY5MzkyOTY2NjcyM0ZDRjU2OUJFN0UzCi06MTAzMkMwMDBBNDgzRTQ4QjRCNzA0NjBFQUQ2N0E5MTRGQjAzRDczRDc2Ci06MTAzMkQwMDAyQTgyRUI1M0MxRjUxQUU1RjU3ODQxRTBGREIxRkU0OENECi06MTAzMkUwMDAwREYyOURFMjdGNjNFRDkxMkFGRjVDRDdFNEM5QzYzRUYzCi06MTAzMkYwMDAxM0ZBNzJFQ0VGMjNEREIyMTNEQzFGQzVGQ0ZDM0JDNUY3Ci06MTAzMzAwMDA3RkQ1RkQwNEQ0ODNGNjU2NDdBNjVCNzFCRjQzQkZBQkEwCi06MTAzMzEwMDA0QjBGRkRGOTM1RTRCRkI3MzZENzBCQjQwRjZFQUVFN0YwCi06MTAzMzIwMDA3RTk1QUI3QUU2OEEwREMwODM4NUYzN0VFNTc4OEU4MjQyCi06MTAzMzMwMDAyNzczNDQ3MEZGNjAxOENGREYyNkZCOTU5RTQzQkY1MjcyCi06MTAzMzQwMDAzNjYzM0ZCMDI4N0U3ODE3QjU5QjUwQUNGN0ExN0Y0NjE3Ci06MTAzMzUwMDBBOEY2MDg3QTk0NUIyRTY2MzY0ODI4MDc5NzUzRkY5NzlECi06MTAzMzYwMDAyQkVDMjM1ODg4Nzk1NkQyNTZBRjhEMzlBMDdENUJCREEyCi06MTAzMzcwMDA2RkFEMUVDNjU2OTczOTY5Q0JCM0QwQkNDREMzQzgxRjNECi06MTAzMzgwMDBGMzY4RTY5NDJENkI4MUU3RkYyMTUzQTI3NTQ5MTBGOThDCi06MTAzMzkwMDAzQzNGNUZGN0M2QjkzREQwNUY2Qjk1QTUwOEU1NkE3MDA1Ci06MTAzM0EwMDA3OTkyQkJGM0UyQjExQjk0M0ZCRkYyRDUwRkVFQkZEMUQwCi06MTAzM0IwMDBGNzc1MUQ2NzlBMDJDQTg3RjU4QjU2MjQzMjQ3MDAxREEwCi06MTAzM0MwMDA0ODg2RDA3RUY5MUZDODc0RTU5RUFDMjczRkQ2MzM1QTk1Ci06MTAzM0QwMDBENzkzQzhDRjE3MjZGRkQ3QzRCREYwREQ3OUU5Q0EzRDIyCi06MTAzM0UwMDBBOEE3NDNGRTBGMzAxRkVBRDFCQzlFQ0ZCQzQ0RTcyOUZCCi06MTAzM0YwMDA1MkYzNDBCRjQ3RkQzQjJDMzRERDFFOTREQjE3QUQ5NUU3Ci06MTAzNDAwMDBGREU4MDc1QTFEQTk5N0QwQ0U0RjMyN0U0NjdFRUEwRUMwCi06MTAzNDEwMDAxREI3QUI4M0VERjdFNzA3RUNFRDc2QjJCRkY3Q0JFRDY5Ci06MTAzNDIwMDBFQzk2NTNBRDk5N0ZDRjhDM0UyNjVBRTRGODQwODhGOTRDCi06MTAzNDMwMDBEMDQ2QjUwOTI4QUYxMkFCQzU0RjAyRjlBMjNCNTI0Rjk3Ci06MTAzNDQwMDA3RTA0OEI0OUY2M0I5ODZBNTQ3RTAxQzU2RkQwMUQ3OTg2Ci06MTAzNDUwMDBCRjgwNzQ2RkU5NUE0MTdFN0FGNDE3NjA3QjA3RTU3NTg3Ci06MTAzNDYwMDAwOUY2MTcyNDE5RkZCNEU4RTNEODFCQjVDRjA2RjIyM0Y5Ci06MTAzNDcwMDA4NDEwRkQwNEUxQTFGODI3ODJGQkYxQTMzRTgxRkJDQzdGCi06MTAzNDgwMDBDQTcwRDIyNzgyQzc3RDM5QjNFNDUwNjYzQ0YyNDhGRjQ4Ci06MTAzNDkwMDBDOTNCNTA3RTlGRDJEMTdFMzgxQ0JEODQ0OUUxQ0MxRkYwCi06MTAzNEEwMDBEMDdFNkYyNkI3RUYyMzcyNjI1NEY5OTFGNjQ0RTYwRjhGCi06MTAzNEIwMDBGNDVGQjM2NEYzMjcxMTMyMEM1QkNDNDg3RERGQzY1MTU3Ci06MTAzNEMwMDBEOERGREJCQ0JGMTMzQUJCOERGNDQxRDhGNkQwRkU3QjBFCi06MTAzNEQwMDA0RkU2RTdFRTVDNDY2OUFCNkM5N0I3MDExRjYzRkE5QzU5Ci06MTAzNEUwMDBENzRDRkFEOTM2RTAzRjg0Qjc3QjI1NEFGRERFMUM0QTJCCi06MTAzNEYwMDA3NzdBRUQ1NEJFQ0I1QjRDRjAxRUFGODNFMEJEREU3MjNECi06MTAzNTAwMDA0QUY3Nzk5RDk0RkY5MkI3ODJFMDlGN0E1RDk0QjY3QkVCCi06MTAzNTEwMDA2QjI4RkYxNUFGODdFMDAzREUwNjgyNUY0NTdENTA0NEQwCi06MTAzNTIwMDAzRjc1MzNBNTZGNzg1QkE4QkNEM0RCNDZGMDlCNUUzRjRECi06MTAzNTMwMDBBNTVEREVCRDk0N0ZDOERCNEVGMDExNkYwN0MxQzdCQzJGCi06MTAzNTQwMDA1RDA0Rjc3ODdCMjg3RERCREI0QkY5RUY3ODRGMTNEQ0VDCi06MTAzNTUwMDAyQjhGOTNCMUU2NUUyRkZBMkI1Q0EyODRGQUREQjNBRTFCCi06MTAzNTYwMDA2QTMzRUFEN0I2NjUxQTMzOEFGMzM2OTc2NjA1RkEzOUFECi06MTAzNTcwMDBCNjU1RjI3ODlGNkQ5NTg2RkM0MEEwODdGQTUxOUZCM0FGCi06MTAzNTgwMDAyRDdCRkFGODM0MkE1RjQwRTU1QkIxNDkzMDRBQUNBQjk5Ci06MTAzNTkwMDBCOEZFQ0E1NkVBQTk5RTE1MEYwMkMxNzdEQjZBMkJGRDU5Ci06MTAzNUEwMDA1QTgwNUJCMkMzQTlEQ0JBNEEyNEJCRUQ3OThEMjczQUI1Ci06MTAzNUIwMDA5QkVCNUQyNEJGQUQzQUFFM0YyODc0MTAyMUZCRTkyMjlFCi06MTAzNUMwMDBCMjQ0NEE5NzY1NzNGQ0EzMzI0MkVGMjMxOTU5NEFGQzZGCi06MTAzNUQwMDBBNEI5MDdDNzY3QUI4MkYxMjFCRTU1RjU0NjhDNUY1QTg3Ci06MTAzNUUwMDBFRjgzRjE0OUE0M0ZBRTNBMDQ3ODI0QzM3ODExN0ZDMDM5Ci06MTAzNUYwMDA4N0ZDQzI2QzE5RDc5N0FENTVFQjA4QUZFNDY1RjM5NDFGCi06MTAzNjAwMDA3ODY3MzREQUU5NkQ5RUZBQjk4NDZGQTU0ODdFQ0QzNkM1Ci06MTAzNjEwMDBEN0ExRThGQjUwNEVDQUU3N0NBQ0YxRTE0RTdGRkU1MEVCCi06MTAzNjIwMDA3QzMyODJGMERGQzZCOEREOTAwQ0ZBRDJGRTEwRTMwMEU3Ci06MTAzNjMwMDA4QjQ3QTlDN0ZENzg4RjE5NDNGQUYxMjZDQjdBNjJCMjdFCi06MTAzNjQwMDBDMEY5OEYzRDJDMTJGRjZENjdBMEY3QzE3N0NGODE3RTQ3Ci06MTAzNjUwMDBFNzQzMzk1MEJBNkYxNUZBQUIxRUNENzI0RENDMDIzQzIwCi06MTAzNjYwMDA3RTI0OEQzRjI0MDIxQzUzQ0VEQjRGQUYxN0Y3QTAxRUU0Ci06MTAzNjcwMDAwREVCN0RBRTA5RjIzNzNFQjhEOTg5QjY3MUVDNjY2OUJCCi06MTAzNjgwMDAyREIyNUJEQkIyNTcxM0QwRkY5NTJDQThENzQ3NDlDQjlGCi06MTAzNjkwMDA2NTNDQjYzQjc4N0JDRkQ1OEJFNDRGQjZBRTNBOTA3NjlGCi06MTAzNkEwMDA4NEY3NUI4NkZEMjY4RUZBN0QxOEJBNjEzMjE2NDgxQUI5Ci06MTAzNkIwMDAxNDE5Qzk1NUUyNDVFQzJGRUNBMUNERTVEODVGRkM2NkE1Ci06MTAzNkMwMDA4N0QyNUYyMUY2Rjc3NUU3NjlFNEUzNjU1NjU3MDhCQ0QyCi06MTAzNkQwMDA4NjkzMjczNzkzMjM4QkIzMjJFMzQ4OEUyNEIxMjQ5NDE3Ci06MTAzNkUwMDAyM0NGRUJCOERDRjI5REU0RkEyNDFEODY5OTM0QjQxRjk1Ci06MTAzNkYwMDAyNTdFQUVDNEQzODNFM0U4MzUzMjNEMjQxOTQyQzc2MTQ5Ci06MTAzNzAwMDA1NzBERThGRDNFQUFCN0REQjFDOTQ5RTc0QjMwM0UwQjg2Ci06MTAzNzEwMDA0NUFCNzU2QzA1QUVGM0VBOTI3MEYzREExMEY0QTBBNDMxCi06MTAzNzIwMDA1QjUwOEUwMURGREY4QjQ2MjNCNUIzQjk5Q0I3QTNFMUI1Ci06MTAzNzMwMDBFRERDQ0E1NjExNUM2MjMyRkI0MkM4NkIyNTdENUE2RUM1Ci06MTAzNzQwMDBFNzgxMkM0RUI3NDkwRkJFQjRGMTE4QUVFRkRCM0EzQTIxCi06MTAzNzUwMDAxM0Y0OUNDNkJGMTFFRDA0REYwOTJEQzlENzQ0NkRGQkRFCi06MTAzNzYwMDA4RTNEMDE3ODM1Q0JFMzc5NEVFRkNGQjUyM0ZGNDA3QjFCCi06MTAzNzcwMDBGOTI4NTc5MTVGRjJDOTdGQzE2NjA1Q0NCQkYyREQ1QUNCCi06MTAzNzgwMDBEOThGRkRBMzZCMUJBMjI5QkU1Q0I1MkUwQ0Y1QTMzNjA5Ci06MTAzNzkwMDA2NjI0N0FCMEVBM0NEMTg1MDFGNDYwNDVCQTBDNDExRjM5Ci06MTAzN0EwMDBGQkIyRjQ0QTNDRDU1NDMyMTFFMzMyN0M1RjlFOEE3MkZDCi06MTAzN0IwMDAwOUYwM0U1ODFENDVGQkUxRDQ2NUVGREUzOTE2RTA1QkFDCi06MTAzN0MwMDBBRTg4NzZENENCOUVBQkU1RTcxMzI3RkQ1MTQzRTcyNkMxCi06MTAzN0QwMDBERTdDOUNEQjdEQjdGREI3QjIxRUY0N0IyN0M4RTlCMzY2Ci06MTAzN0UwMDA2OEU3NDE3QTRCMzNCMzc3QzFCQURDNTI2RDIyRkZDRDIzCi06MTAzN0YwMDBBRDU3QzVCMzgxNzYxQUI5QTRDN0EzN0RDMUZEMzU1M0IyCi06MTAzODAwMDBGQUExM0M4MEZFMjY3REE2QUUwRjMzQUE0NTNEMjNBMTNBCi06MTAzODEwMDA0RjlENkZBQjNBNzA2NjFBRjREMzU2Q0IzRjZFQkJGNjMyCi06MTAzODIwMDBGRTcxODQ3REY1MUFGMjkzMDBGNTI5RjQ5MzQwRkU0RDY0Ci06MTAzODMwMDBEMTk3ODBFNzE2MzcxQTE5Qzk3M0VCMzJBMzE5RTU0MUZFCi06MTAzODQwMDBCNzI1OUNFNDVGREI2MjEzRTlBMTFCMzI1Nzg3QTE5RTc5Ci06MTAzODUwMDA2Q0E4QUE4RkM2NzRBNERFQjcwMzdEQTdEREJCRkY3RDZECi06MTAzODYwMDA5RTJEODFFNDJEM0Y3RjgxODQ1OTBDRkFDMEJEN0FBRTM0Ci06MTAzODcwMDBFNEY4RkFCNjRDQ0I0NDc5QTlBMUYyQzNCQkZGN0Q4QjI3Ci06MTAzODgwMDAwRjdEMDdBQzg1RjA5MDM0MkM5MTBGN0UwMEJFOUJFMjNCCi06MTAzODkwMDBENDAyREYyRjQwNjc0RTQ0Rjg3NEFFQUIwN0U1NDM0MkQ1Ci06MTAzOEEwMDA5Q0FGMUI4QkI2OUFDRTU2RDJGOUUyQ0EzOEUyMzM1RDkyCi06MTAzOEIwMDBCNTg3RTkzMUJGQjJDODE4QzhFNzBBOUZGQ0I1RkNGRjVECi06MTAzOEMwMDBCNDFDRTdCQjk5MUNCODU5QkIzN0UzRjc5RkE1NzNCRTdGCi06MTAzOEQwMDAxOUNFOUUzNjBDMjM0RjE1RkIxOENGOUE2MzhBNkM0QjdBCi06MTAzOEUwMDBGQkVBNTk3RDQ4RkRFQUY2NkNDRTY3QzU3QTdFM0U2NEY4Ci06MTAzOEYwMDA0RUM1RjQ3MjhBQzNGOEZBNDQzQ0M3OTY5M0NERjlBOTMxCi06MTAzOTAwMDBDRDEyNDk3MUUyQjY3NEQ2ODU3MTAzREY3MjBERjdGN0Y3Ci06MTAzOTEwMDBDNEYxRkZEQTJBRDNDOTNGRDQyQTc4QTI3RDE5NzgzRUIwCi06MTAzOTIwMDBDMjk1ODZFQkQ3MDY3MzE0MDlGREI3QTY3MkI5Q0VGQzEzCi06MTAzOTMwMDAxRTMzQzZBQkExOUQ5QTQwRkNDMURFRjNBOUU5OTg5MTY0Ci06MTAzOTQwMDAzRTRDRkUwQjJERjE5RUE0MEZGMEI3QTM1RjFDRkQxNzlDCi06MTAzOTUwMDBDMURGREREQUFGODY2RkJGQUE4NjRCOTg0RTA1NEYzNUMzCi06MTAzOTYwMDBBQUUxNjk2NjM1NkNDOUU2N0FGQTFEMzY3NUZFMEM0OTFFCi06MTAzOTcwMDAwRDI3QTcxQzA5RDNGMDczRURBNjAxN0ZCMzQ0RjBCQjVDCi06MTAzOTgwMDA5OTAxN0VBMDBEOUE3NjAxRTcyNUE1QUY5NkZDQjJBRDEwCi06MTAzOTkwMDBBOURDREY5MzVDQUZGNjczMjRCMjk2QjUzMTAyRjk2RDAyCi06MTAzOUEwMDA1NEY5QjZGQzU1MDJGQTczNkNENUVBN0M5ODA3MTU4QzZECi06MTAzOUIwMDBDQjhBRjRCRjI0RDc5NTlGOEQ3MUU5MDI3RUVFM0E0QkY2Ci06MTAzOUMwMDBFQkU5Q0RDNTc1Njg4QjIzM0U0QTkzQ0YwNTBEREQxRjBFCi06MTAzOUQwMDBCN0QwQjg5NTc2OTAwRjdDMDFFMzQ1RkEwRjg0MkZFNkI3Ci06MTAzOUUwMDBCQTI2NjdDNzczM0VGMDA1RUU5N0Y5N0QzQUU0MDNBNTYyCi06MTAzOUYwMDBCRkUxRjg0MUUxQzc2MjM5NkVBMjlDQUJCOTIyQjdBNTFECi06MTAzQTAwMDA5Q0FCQTk5N0NGQzc3NTA0OURDN0I5OTI1QzQ2RTc4MTY3Ci06MTAzQTEwMDBBRUY0QUUwOTBGQzU3N0M4NjdCRTZDQ0U3Nzk4NkU5NENBCi06MTAzQTIwMDBDRkQ3MjBERkY5RjQ5Q0VGMzBERkYwRDUyQTY3MjhGREVGCi06MTAzQTMwMDBGMEJDQkNBRjNDQjQzN0NDRkM3MUMwRjg1NkI2NDdBQjU5Ci06MTAzQTQwMDA2MDc3NDc4MjM5RjBCQ0QzNDNGODBGNzRCQTM3MzMzQTAyCi06MTAzQTUwMDA0NzVBMkIwRkU3OEIzM0JGREJEMzA4RTk1QjVBOTcwQjMxCi06MTAzQTYwMDBENzY3NjVENjU5M0Q4RjMzRjVFQjUxRkU5RTk3RjdERjRCCi06MTAzQTcwMDAwRDgyREQzODVBQzA5NERCQTU4RDY2QkIxMUZEQkRDQzJGCi06MTAzQTgwMDA5RkExRjI1NzI4N0U4N0Q1MkJEMkFDMzE4MEZGODgwMUM5Ci06MTAzQTkwMDAzRjgyRDM0Q0U3NERFMzMzQzk4RjExMzVENTcxMzcyQkI2Ci06MTAzQUEwMDAwNDNDRjdDQzk4NkYwNEEyREM4NTRFNTU5MEM3OEY2NTE3Ci06MTAzQUIwMDA5N0ZERDA5NzNDMzg1RTAzRkFBQjAyQ0UyMzE5NDQwRjMyCi06MTAzQUMwMDAyM0I5NzMzNTk1NDkwMUU3Q0E1QjY1RkZDNTAwMUY5QkE0Ci06MTAzQUQwMDA5Njk3NjA3RjNGQ0M5Njc4M0M4Njc5RDY3MkZGOUZEQUM2Ci06MTAzQUUwMDA1RjY2Qjg2QTUzQjUzM0Q4N0VCMkFBREY1NkQ5MkY3MjUzCi06MTAzQUYwMDBGM0Y2RDVGRTM3QzNENUY0NjFEQUNGMEU2QURGMUNCMjE4Ci06MTAzQjAwMDBGREMxNzZENTdFQkNBRjExMUY2RjQzM0UxOENFRkZCNTA5Ci06MTAzQjEwMDA1Rjk2QTcxQjZDOUU1RUY0N0ZFOTE4RDg5NTE0MDcwNjg0Ci06MTAzQjIwMDBGQTk4ODg2QTIzRkY2OUMzRjk3OTUzNURCMkRBMEZBNjYwCi06MTAzQjMwMDA2MzdFOTIxRkNGNDdENjkwRkM0ODYwM0U4QURGNTk5ODNCCi06MTAzQjQwMDA4N0YyRDc0NzRERTdGMUJCNjBCOTcxMTM3OUMxOTg4NzA4Ci06MTAzQjUwMDBBMURFMDBGREE5RjI1NzNGQzJGN0QzNDZDMUVFNDIzQ0I5Ci06MTAzQjYwMDA4M0M3RjNGRjhBRERBQjg5MUNERjRCRkE3MzRBQjg2NDY1Ci06MTAzQjcwMDBCODgxREVEQkVBNzUyNUUzRjcxQkMyM0QzNTE4RUJGRUE1Ci06MTAzQjgwMDAzQ0JCMkU3NjNERTgzRDFCMzBDNjA4N0M3NjM1QkI3MUNDCi06MTAzQjkwMDBCRUNGODRGQjI0QTc4RkY1NzExQUEyMjdDQkREOTYxRDFCCi06MTAzQkEwMDBEQTAwN0FCMkU4NUQ2OUE4Rjc1QTM0RjIzOTJGRkNBMTNECi06MTAzQkIwMDBCRjZDQkQ2NUU3QTYxMEZEMkJGQTlCMDI1QjJCMDA4RjQ3Ci06MTAzQkMwMDAwMEJBNkQ5NUY1RTY4MUZFOTYyNEVFRDAwNkI0NjMzMTE5Ci06MTAzQkQwMDBCODBBQTkzRkU1NUNBM0QyNUZEMzM3RUI2RkFCRUNGNzM0Ci06MTAzQkUwMDA1MkZBQjNERUEzMUU5RjU1RUZBMUYxNTlFNUZENDdFOTU3Ci06MTAzQkYwMDA2RjJCOEUyRjA0NUZEREI0M0ZEOThFMUVFODZGQTk3QTNDCi06MTAzQzAwMDA3QzU2ODM4N0M2NjdENTcyRkZFMTQwN0Y0RERGQUNCRjJFCi06MTAzQzEwMDAzNkY5MUU5MzRERTZEM0UxQ0VGRDM3MEU5Q0FCNzYxQUY2Ci06MTAzQzIwMDA1MUFFQjQyOUZFNDA3OTdGQkIxNEI0QkZBRDk2RjczN0NGCi06MTAzQzMwMDBFNUZCNEI3MUU5RTRERkJERDQzM0RGMTg2QTVGQzNGREY4Ci06MTAzQzQwMDA4Q0M5N0EyNDkzRjU0ODI2RUI5MTA4Q0Y5OTdBQTYzRTQxCi06MTAzQzUwMDAxRUU4QjBGMEM1QjZGOTIyRUNFMzczMUUzQTMzM0UxNTA4Ci06MTAzQzYwMDBFMDE5MkZGNkNGMTc2MTVGOUFGM0UyOTkwMzQ5RjBDOTgzCi06MTAzQzcwMDBDQjJGQkVDQ0NCN0Y3OEU2NEEzMjk0OUI3Q0VGQ0QyRjA2Ci06MTAzQzgwMDAwMzM4MkE5NkVGQzcwQURFNEFCRkI3OERFMjdBQTNCQjk0Ci06MTAzQzkwMDBFMTczRUVCRjA0Rjk4QUZCNTY2M0FBODdBMTdGRjE0MjY0Ci06MTAzQ0EwMDA3MjdGRDQzMkE4RUY0RUU5QjcyQzBGMzEyRjRBRUE2RTVCCi06MTAzQ0IwMDAzODRGN0U0NjE0NzkyOEZGRTZFMUJGNDBCNENGNTNFRTdCCi06MTAzQ0MwMDA2Nzk0QUJFRjY3NDQ0NTZEMjJGRDJGOENGOUNEMjhFRjRCCi06MTAzQ0QwMDAyMjhDMEVCQTRGRjhENjI4QkUxRjJDNjRGNjBBNkUzNzE3Ci06MTAzQ0UwMDA0ODU5RjIzOTBEQkFDRjMxQkY1ODZFRDc3Q0NCQ0ZCMTFFCi06MTAzQ0YwMDA3Q0ExQzZCMTFFRUREOURGNEVBQThBNDdGNTU4MzkxNzA3Ci06MTAzRDAwMDA5NzM3Nzg3RjcyRDdGNTFCOUMxRjBFQkUzRjM5RTcyMzhDCi06MTAzRDEwMDA4MUVCQzIyM0I4QkZBNTNCNTdFMkY3QjkwMkZDODZBOEU2Ci06MTAzRDIwMDBGNzBFMzc5RkI1QTNCODdEM0YzODlGMEUzRTlGMzEwRUVCCi06MTAzRDMwMDAzRTlGRTZGRUE4QjVCMEZFRUVFODdFQ0IxM0M0OUY1REM1Ci06MTAzRDQwMDAyMUU3NkJDOEJDMDZDRDVGRkQyOEE2RDg3OTVBQTRCNzc5Ci06MTAzRDUwMDA5QkNEQjczMkFGQ0FGOUMxNDY0MUNBQTJGREVBNEY3OTNECi06MTAzRDYwMDAyQUZEODMzMUJCMTQyQThFODNGNDE5QjhCRkVBNkQ0RTQ1Ci06MTAzRDcwMDA4NkZFMTk1RDlDM0QwN0NGOTUzN0ZFNDUxQkYyNUNERTQ0Ci06MTAzRDgwMDA2RTc5M0VENjQ2ODVEM0I5Q0VDNjI4M0REOURCREQ1MTA2Ci06MTAzRDkwMDAzMzE5RkE5NzQ1RDM3NDlBOTdCMkE4NzIzQTZGQTk4RERFCi06MTAzREEwMDA2NUVENjg4RjA2OUYyM0Q3OEVCODlCQ0UwMTY5QUQ2OEZECi06MTAzREIwMDA0MTQwM0E3MDJFRDk2MUE0Rjg4OUI5RTg4NkU3QzhDNUIwCi06MTAzREMwMDA5QjlEMjM4Rjk5QzlDRjkxNDdFOTI1NzQ1OUI0NDVFQTQyCi06MTAzREQwMDA0MzlFMjM3RjZDMTRERkY3QkI3MTNDNzE4ODNGOEMyN0I3Ci06MTAzREUwMDA2RDcwMUNBMjk5QzdEMTMxM0YwMkYyRjU2NjE3MjM3RjhGCi06MTAzREYwMDBCQTNDREVDN0U0NzU1MEVBMUJDQzFFODZGMjQwQUJCNzc2Ci06MTAzRTAwMDA0QkE4QTc2OEMzRjkzRTYxQjA2OTU4NEUwOEJGQzhGNzEwCi06MTAzRTEwMDA0N0U5RThGQjRGNzJDRDM0QUYxQTIzRDdDQkU3RkM1QTAyCi06MTAzRTIwMDAwOEU5NEY3QTc1OTRFMjRGMEE0RDY3QzNEMUM5M0MwRDNBCi06MTAzRTMwMDAzRjQ3QTdGMEUxMDI5MzlFQ0VGNzJEMzBEOTRBRDEwRjJDCi06MTAzRTQwMDBCMjAwMDhFRkIzOTg4MEZBQjcyREUyRjc4MTQ1QkIwREI5Ci06MTAzRTUwMDBFOUU3Mzc1MzZFRkZGOTZGMThCQUY5Qjk3QzNFMzU0MzdECi06MTAzRTYwMDA0N0Y3RTM0RTA5Q0M2MThGMTk3QTdFRDVFOThDOUU4NjlGCi06MTAzRTcwMDA2RTlBQkI2NjlENTk4N0VDRjdFMkYyRUYxNTYxN0I4NjdGCi06MTAzRTgwMDBFMzUzNzUxNjg5RUM5Rjc3NDZBMTVDQTg0RTVCMUYwRjI0Ci06MTAzRTkwMDBGMEEyQ0E0MjFERERERjk0RTM0NEVFMDgyRUM3OUZEMTk1Ci06MTAzRUEwMDBCQTRFOEVBMjc4RDFFNzUxQTU0ODQ3NjI3RjJBRTJBMzk1Ci06MTAzRUIwMDBDNDg5MDJFQUJEMzcyQTlFRUFDREUxRDdDNUEwREUxODQzCi06MTAzRUMwMDA5NEQzNjc3RkVGNjJCNDFFQjY1MDdBMTJEQTRGMkMzMDZCCi06MTAzRUQwMDA2RTIzQ0IwN0I0QTMwMkYzRDE3RTYyMDFFQjI3MkMyRjE0Ci06MTAzRUUwMDBCNkY2ODU5MDE3NEE5QTYwREI5MjUyMEQ3QzlFOTBEMDcwCi06MTAzRUYwMDA0MkE5OTJGRkFDNDM1QkVFMEZCMUFFNTdFNTc1RkRDNjJDCi06MTAzRjAwMDA3NjRDMUI2MDNCNzFEMDhFMDFGQkU1MkFDRURCMTdENUNBCi06MTAzRjEwMDBBNzJDRTM2MTQ4NzU2NTE3Qzk4RUIxRTkxNTNFOTM4OEYyCi06MTAzRjIwMDBCRjA2NjExRUFGMDRGQjQ1NzVERUIwRDVFQjRCQTFGQkIwCi06MTAzRjMwMDBGRUYyMzg2RDJCRDY0NkEzMUQwMzU1MUM0ODlGREJCQ0YzCi06MTAzRjQwMDA2RDI5NjU5OTgzRTNDOENFOTFFOTEzOERCNjg5QTgxN0M5Ci06MTAzRjUwMDBGMzVGNzI1Q0NCMENGNDk3MjQ5QjM0NzQzRTAxMjY1M0MwCi06MTAzRjYwMDA3NTJGNjE2RTU5RjRCNDM4MzQ0NUREQ0M2RTkyRDAyRTg1Ci06MTAzRjcwMDBFRjI1M0QzRkUxQkE5NkY4MjBFMUYwNjI4NjcxQUJBNEVGCi06MTAzRjgwMDBCODc2MDFFRjAzMERGNDIzREY2RkFFOTdFM0I5NTc1QzBBCi06MTAzRjkwMDA2NTM0OEUwNEVCQzBGRUNFQzgwRThERjNDRDQ1Nzk3NDJBCi06MTAzRkEwMDBFNTY5OEU1MUMyOEZENUU1Qzk3MUZDRENDMkZERDVFMTUyCi06MTAzRkIwMDA3RTA5RTgzQUE5QjY1NzQwMzgwMTBDMzhGNEM1Mjc1Q0E5Ci06MTAzRkMwMDA2RjRDNkI0Mjc5RjI1QTA0Rjk4QkI1NkQ5OUNDMDdGMkJDCi06MTAzRkQwMDAyNzU1NzQ0NUU1RTAzQ0ZCQTVGRkE2Qzk5MDA3MEJERjFDCi06MTAzRkUwMDBBRDdDMjA5Q0Y0QjMzNkExNjUwNkQ5MjVGNzY5NTgyODI1Ci06MTAzRkYwMDAzRkNGOTgxQ0VFQzcyOEM4RTFGQzlGNjA2QjREQTkxRUZGCi06MTA0MDAwMDA4N0U5RDM0NDM3NUY5N0NGNjc5MEIzMURGNEQ5MTE5RkU5Ci06MTA0MDEwMDAyREZBNTgxQ0Q0N0I5QTc1QTFFOTczOUJEQ0VGQzA3RTA2Ci06MTA0MDIwMDAyMUNGNUYxODczMTk5MTdGQjU4MjkzM0IzOUY3RUVEQjhGCi06MTA0MDMwMDBCN0NGODJDRTEzNDZFNzU1MzZDOTdBOEREMjRFNDQ0RTVECi06MTA0MDQwMDAzQjE1NDZEODFEMENDRjQ1MEE2NjA3REYwN0NDM0U5QkMzCi06MTA0MDUwMDAwRkQ2QUJGOTJCNkQ0ODdCRUJDMTFDNzkxRjQ5NkJCMkI2Ci06MTA0MDYwMDA2MUZEQjI0Q0JCMERGRDk0QzFGNzU1MUFEMzI2REE3MDMxCi06MTA0MDcwMDA3RDFBNjcwQ0QwQTkzMTcwNUZFODRFQ0I3RTFGQ0Y1M0ZECi06MTA0MDgwMDA5OTdBNzQyQ0YwMUM1OTcwQUFDNzczMjFCMTM3Mjg5N0ZDCi06MTA0MDkwMDBDRjk3MzcxREUyRTc0MjlCNEM0NUJENzgwRUExQzkxNDZFCi06MTA0MEEwMDA1NzQ0QzdGRTRDRkM5Q0E5NTJERjY0M0E0NkYyREU2NERBCi06MTA0MEIwMDBFN0YxNTYxM0VFMEYwMkEyQzdFN0ExM0JFRDE4Q0Q4MzNGCi06MTA0MEMwMDA1MjZGNUEwRTk3QUIyNjdCMTdDM0ZCNUJFMTc2M0ZENTQ5Ci06MTA0MEQwMDAwQjEzOUQzRTBERTAxRjE2QzdFOEZFNEY5ODkxRjM1NTU4Ci06MTA0MEUwMDAwNEFDOEYzMTgwRUY5NTdFNkZDQkQxRDFCQzM1MjUxN0Q1Ci06MTA0MEYwMDBGNTk2MTA3RTIyREUwNDY3NERCNjIyMUJFRERCMzhERjFECi06MTA0MTAwMDBEMDZGNjNCNDQyREY5Q0FGMUY5N0U3NUI2OUE3NTEzRTU2Ci06MTA0MTEwMDBGRjdBNEY0M0NFRkNCMjU4RjQxMzM5RDdFNDYwQkJBNjA0Ci06MTA0MTIwMDBFNTQ2QjQ4M0I0OTFFMzZGRDhERTg2NjFEQjZCNUUyODJECi06MTA0MTMwMDBCN0Y3MzhGMjg1MzZCMkM4OENFREU5NTA1RTg0QTBDMzdCCi06MTA0MTQwMDA2N0U0NzZGRTU3RTNFRDMwQjM3NERGOTc2MDVBMzA5RjMzCi06MTA0MTUwMDAyRDk0REVBM0E0NDY4Q0EzOEYxQkZBREQzNzk2QkZFQjBDCi06MTA0MTYwMDBENDdFMjQ5MEJGN0I3MUZDMkI5M0NGMUUyQkExMUNFRTIxCi06MTA0MTcwMDAzRkRBMkVEQjI3OEE5RDYxOTFEQkRFMkVGMDdCRTgzRTY1Ci06MTA0MTgwMDAyMURDNEVFRjM2Qzg3Njg3MjU0QzNEMEY4M0Y3NDFGOTg5Ci06MTA0MTkwMDAzQTVDQUVFMEU3RTYyRUM3MzE4QTZCMDRGM0YzRTU3N0NECi06MTA0MUEwMDAzRThBMEVCNDRGNTBFRjczNjQ3M0JCMDQ1M0I0NEIxQzgwCi06MTA0MUIwMDBCMjlGMEQ2MUY0MUJBMDlEQTJGMEZEODA1RkI3NDJGQTkzCi06MTA0MUMwMDBBNzVCMDAzRjAzQzg2RjBEQjQyQjI0N0I4OEJFMERDOUNECi06MTA0MUQwMDA3RDY5QzhFN0E5RjIzQjA1NDNGNkQ3NUMyRUE3ODU0NzYyCi06MTA0MUUwMDAzRjRCNDNGRTJFOEJFQjRGQzBFRjgyRjlGQzg1NDdBRTcxCi06MTA0MUYwMDAyNkUwNzg1RTk4MzE3MENFODZFMjQzQUIxN0E3RjM3QjVBCi06MTA0MjAwMDBEOUM3RkYxQ0VEMEFEMUZFQ0RFRTdGNDU5REREQjQ4NkZBCi06MTA0MjEwMDBGNEMwRTU1QzBGRkM1QkRGMDdEQkJFOENFQjlEMUQ4MjExCi06MTA0MjIwMDBEQUVGQTRDREU1N0FFNzVGRTQ3RENDN0E1NUE0RjcyREVCCi06MTA0MjMwMDBDRTY1QjkyRTIwMUZCNjBBRTZFNTI4N0Y1MzFGRTFFN0I5Ci06MTA0MjQwMDBFNjU2M0Y1RUZGRDkwMzIxRjg0MTE4RURGQTczNEU4MDIwCi06MTA0MjUwMDAzRDVDRENBQzI3M0Y1QUEzMjk3REM0OERFMjFDQzNBRjczCi06MTA0MjYwMDBCMzg3Q0I3MTc5N0Q0QjFFMzVGMkYzMjQyRUFFMTc1QkVECi06MTA0MjcwMDA1Q0Y3RDMzOTk1RTBGMzIzQzNENTNCMjRDQjNEQTVCRUYyCi06MTA0MjgwMDAwMURCNDc3OTYyOUE0N0ZFODA0QjY4MjNBMEJGNEQ5NkI5Ci06MTA0MjkwMDA3QkMxNzg3NkUyNjRDOEYzNjMwNEI5MTI3NTY4NDUxODg3Ci06MTA0MkEwMDBCNkFCOTNFREIxRUQ4QTNGQTNBMkM4RTgwOEY4NUVCN0JDCi06MTA0MkIwMDBCOEM4NTgxQTQwMkY4RDhDOUZERjBENkVGRkNFREMwMUUxCi06MTA0MkMwMDA3RDVBQTVBRkU4NzA5RjQ1REY1MDlDRjhBNzAxMzk0M0EwCi06MTA0MkQwMDA4QTY1QjhDQThFNTFGQTBGM0UzRjE2NzA1RTJDOENGMzc5Ci06MTA0MkUwMDAyOUI3Njc1QUYxREMxOEU4Qjc2QjJCOTY4RkM0Rjk2REM0Ci06MTA0MkYwMDAxNTVEMkY1ODYxMUVGQTNGMzBEMDM5RTcwRjY1QkVFQ0NGCi06MTA0MzAwMDA5M0Y5NzJCOEY1RjNCMTQzQTA4QzMxRjYwNDNCODI5NzcwCi06MTA0MzEwMDBENjgwNEVDNjhGNDBGRTY4Q0NENDk0RkI0MzhDQjM1Q0YxCi06MTA0MzIwMDAxRTY3MDhGREZBRDZEQ0FGQTc1Rjk3RTY4NkQwQUY1MUNGCi06MTA0MzMwMDA3Rjc2MDRDNTFGMDI2MUQ0OUIxRDIxRjRFQjEzODJFQzMwCi06MTA0MzQwMDAwRjkwQ0ZFRDlDRDA0OTFEN0QzMDBGMjc2RTFENjE2RjAyCi06MTA0MzUwMDA5NEU4OUU5MUMzNUUwNEY2QzM4QjY3MzI1MTZGOUYyMzJFCi06MTA0MzYwMDAwQ0JDQzcyM0RCMzE4QzYwQjAyMzE2MjI1RTczOTk2N0M3Ci06MTA0MzcwMDBERjAzMDJDNTUxNUFFRTQ4QTNFRTA0NUM4RjlCQURBNzQ0Ci06MTA0MzgwMDAyNEZCMTEzN0MyM0E2MURDQTFGNURBQjIxOUExRTIwQ0MzCi06MTA0MzkwMDBGRjM4NDAyNzI4QkEwMkVGMDdDMDJBMDRDNDk1ODZDNDE0Ci06MTA0M0EwMDBDQjgyRTI2MzE4NEUxOTM4RkZBQjFENUFGRkFFNjI3NTFGCi06MTA0M0IwMDBGQzZBRTMzNUVFQkYzMEFDNjBGRTI3MDQzQzFGQUEyRTNBCi06MTA0M0MwMDA5RjVGQUUwQjhFQ0ZBOUUyNUEwQjlEQkE2MDdDN0M4OEIyCi06MTA0M0QwMDA2RkIyOEM2RkNBQjYwNzI5MEUzRTJENDVFNEZEQUM2NDYyCi06MTA0M0UwMDA2NENGMDdDN0JEMEM4NUJEMEUyREVBQzMxNThDRjRGNzRECi06MTA0M0YwMDA2MDNGMzY5RTE3MjVGRjVFMDU2M0NGMDk3NERFNUE3RDQ4Ci06MTA0NDAwMDBERkU0RTk1OUU3RjhGQjFDMkRFNUQ4OEYyRDUzQzM1MEE1Ci06MTA0NDEwMDAzRjBFQkVBRkEwQzQ5QkYwOTg0Q0UwN0Q2OUU1REQyMjY1Ci06MTA0NDIwMDBDQjYyMERFMUM3N0NCNzUzQjlFMjk3ODdGQUE2MTI0QjZFCi06MTA0NDMwMDBDMEI5RUU1NTZDQTAzRUREQTNGMjg1MUVGN0Q2RDY1OTY1Ci06MTA0NDQwMDAxNEVGNEYxQ0VGMjlFQzgyQTIyNDNCQTM3OTQ4QUE2NjAzCi06MTA0NDUwMDA2NDA3QzAzQ0E4RTJGQTg2OTQ1RDM0Q0U0QjM1OENDNTI3Ci06MTA0NDYwMDBGMjM4QTBBQTNDMDE3NjcwQTQ0RjE4QkYyQUNFMEZFMzAxCi06MTA0NDcwMDA1NEMxQzE3NkU3Q0RFQzRENDM0QUU2MERFNUY5Q0RGQ0RDCi06MTA0NDgwMDA4RDA2Mzk1RUY4NDY2RTY0MUNFOTNCNjNEODE4RDQ3NzE0Ci06MTA0NDkwMDAyQzhCOUZBNkY1QjgwNEVCODE3RTU5MzQ4NDQyQzUwMzZBCi06MTA0NEEwMDAzNzQzRkI2ODA3QkE5MDVGRTJEMURGQzQ1NEVGQ0EzMEVDCi06MTA0NEIwMDA4NzQ4RjdDOTg0NjI4RUIzMTBFQkU0RjFFMTdDNDZGQ0Q3Ci06MTA0NEMwMDA2RDA4MDc5NTBCRjg1OTk4NkM3MEUwQkMxQjBDMDBDMzg1Ci06MTA0NEQwMDA5MDA1M0QzMzI2NDBCRTU2RjYzN0FGMTU5ODg4MzAzM0U5Ci06MTA0NEUwMDBEQjhEREM0RkE4QkM2QkUzQTc3NzZEODZFQjA3NzRGRjExCi06MTA0NEYwMDBCRTMwRUNDRkM3QkY1M0ZBMTlGMjhFREIwREJFMjdGQkRGCi06MTA0NTAwMDBDRDFDRkM3RDE5RjkxRDk1RkU4NzlCRkZFMURFNkRGQjNGCi06MTA0NTEwMDBDM0Q0NzcyNzcwQkY2NzMyRDE2QkU1MjBCRDEyQkM0Qzg2Ci06MTA0NTIwMDBBNjQ3RkMxRUU1QzJCRDRBQjFBRDc3MENERTM3M0NGQkE5Ci06MTA0NTMwMDA3MDg0MURGREUwMDNFM0YwRERBOUU1RUZEMUZENzVFRDJECi06MTA0NTQwMDAwREUwNjE5MzQ4QkUwRjhDNEI2RUVGQUYxRDE3RkQwMjVGCi06MTA0NTUwMDBFNERBMDZCQzM0ODRFNzRGMkExOTlEMjdCMEI4NEFDRjY1Ci06MTA0NTYwMDA4OTc0MEUwMEM2QTA5MjEzMDFFRjEzNDA3QjFCMEVGMTVECi06MTA0NTcwMDA3M0FGNUJGMTlEMEI3MUIwNUZENDJCRDA2RUIwNTU0MjIxCi06MTA0NTgwMDA3RTA4M0I0ODQ5QUIxOUJGMUZBQ0UwRDVBODA3M0QxQUQwCi06MTA0NTkwMDBFOTUyQzNGNUU4RDlBNjNFMTFDRjM1RTlFMkZBNDVFNDgwCi06MTA0NUEwMDAxRkU3NjgyRUM3MDdFODM3OUVEMUY5MEI2RDkyN0NDRUM2Ci06MTA0NUIwMDA3MUE0QzRERjREQ0JFNEZCOUJEMkNGODREMTFBNTlGRTRBCi06MTA0NUMwMDBGN0QyRkI0N0IzMjM0RUQ1NEI3NkM2RjJGNkM1MkY0NDQwCi06MTA0NUQwMDBGRkZDRUMxMUE3RUFEMzAwMkVEODY3RTE3MEQyQTkyQjFCCi06MTA0NUUwMDA2OTY2QzZFQ0ZCQUMwQkQxOUYzRjNCRUZENDk1NzQ4MDYyCi06MTA0NUYwMDA4QkY2RDk3OEY5MTQ0NjQ2Q0VGODdEMDkwQkQxOUYzMTU4Ci06MTA0NjAwMDA2MUI0NTlENUZFNUIzOEQ3RjFERjNDRDUxQTM0MjFDRkUwCi06MTA0NjEwMDA2M0RGMzY1QTM5NEZDOUU4M0VBREIzRjM5N0E3MzEyRTYxCi06MTA0NjIwMDBFOTU0RjY0Nzg3MkU0OERGODEyMjBCREUyMzkzN0Y3MTAyCi06MTA0NjMwMDA1MTE0MEY5RDI5RDNEOTlERjhFRTUyMTRGQTJEQkI2ODYxCi06MTA0NjQwMDA3RTQ3MERGQUU5OUZGRTZCRkNGNDgyNDM3OTk3Q0FDQzUyCi06MTA0NjUwMDAyQTgxRkYxQjFCOTgyQjJDMjM4MEVFOTk0MzczOUQ5RjZGCi06MTA0NjYwMDAwM0E2Qjg4MTgyOEZEMkZGMTBCQzYwNjlDNTk4NDBCQzk4Ci06MTA0NjcwMDBCNjUxM0IwQTVFMTcwQTBEQTQ4NzA1Qzc4NzJFMDhGREIxCi06MTA0NjgwMDBEQkYxOUM1NEM0Q0ZENjJGQzI3NUJBMTBEOTlGMkEwMDMzCi06MTA0NjkwMDAxQzlFQjc5RUQ2RUQ0MjdDRkY3NkMxMUUwMEVCRjgzQTE5Ci06MTA0NkEwMDA1NkVGMkJBMjc1RkNBM0Q2NTEzRDdBMDJCRURCQzVERkM3Ci06MTA0NkIwMDA2RjY4OTZFMzUwNEZDNkJCN0M2ODlGMDFEREQxQjkzMjZECi06MTA0NkMwMDA1RjhBOUVGQzQ4NjVFMzA1NDdBMDNGQjA2RTM0RjdDQjk4Ci06MTA0NkQwMDA1QzkyRDM2OTg2MTZDRjQ5QTA0QkY3MDE4MUFEODVGQTZDCi06MTA0NkUwMDBFRTZCOTdGNUE4OUZDQ0VFM0NBMzQ3M0RCQUVFQzAxOTAwCi06MTA0NkYwMDAzRERFNEJBRDQzMThEQUE5REJBNjc3ODREMkZGRkUzMjRDCi06MTA0NzAwMDA1QUFCRjI5NzI5NzZEN0QxOTRFQ0Y1RTg3N0FCQUIxNjk0Ci06MTA0NzEwMDBFODFFREVFQUQ3QjkxRjZFRjUzMjFDMjU2Mzc3REZCMkRCCi06MTA0NzIwMDA5RkZDQjg1NUNFRUVGNTk4MkU2NTdENDdGMUREODhDNTI2Ci06MTA0NzMwMDAyRUFERUFEQ0MwOTI5QTA4NTUzQ0JFQ0ExM0FCODI5N0Y0Ci06MTA0NzQwMDBCNkMwRUFDMDNFQkJCNDIxNDlGNTFEQzM1RENGODJFRkMwCi06MTA0NzUwMDAyODBFRkVEMEZFQUY5MEQ3NzFCMTZENzMyRkZBQkIxNjQ1Ci06MTA0NzYwMDBCQkQ0N0FDQ0VDQ0VCNTYyMENFMkVEMTFFQzFBQ0VGRUU1Ci06MTA0NzcwMDAxMjdFQjc4NDhGMTBEMjAwQkQwQUU2N0Q1QTA3RDdBM0Y4Ci06MTA0NzgwMDBFQTJBOEM2NDlGNTQyMjBDRjM1QTU5QUJGNUUzOTM3M0Q1Ci06MTA0NzkwMDA0NzUzRjQ1NEVFRUUxMEE4REMyRDk3QkI2QjA0NkU1NzE0Ci06MTA0N0EwMDBDQkYyNzVBOThDRTM5MjgzMjdBN0QxNzU1MjlGQTMzN0NCCi06MTA0N0IwMDAzMzAwREZBNTE1RTVFNzg4MUU2NTdENDMxOTU3ODVDNERECi06MTA0N0MwMDBGNThEMEQyOUVGRTlCMEREQTVERjE3NTg2QzFBOEQ0QjdCCi06MTA0N0QwMDBBNTQ3MkRBOTUxQzM1NTFFNUQ5MDlFRDVBNzQzRjlCRDkwCi06MTA0N0UwMDBCNDQxOURGRkYzRDFGMkJFOUVDN0YyOTA5RkRFMTgyRDFCCi06MTA0N0YwMDA4ODlGMTgwN0UxM0ZBNUJDNzcwMkVGODE1REQyM0EwRjkxCi06MTA0ODAwMDAyMjdERDZFQUJCMEE3MERGQkJBNDc1MTFBQzk0NDM3RTRGCi06MTA0ODEwMDAxRERGQUZCOEJFQTIwMUNFQzNFRjFCNzUwRTMzREVBN0ZFCi06MTA0ODIwMDBGNUFEMTQ4ODZFOTdCMDAwQkQyNzZEQjAzRUMxREFBMTFBCi06MTA0ODMwMDA3MEJGMjI3N0MzOUNGNUU0MEYzRDI4OTg1MTZGMjgxMzcxCi06MTA0ODQwMDAxRDIyREU4MzZGMUNDNjhGN0U1MUU2ODMxM0FDMkYxRkEzCi06MTA0ODUwMDBGMUNBNDYyMjg1NzVDQTlFM0Y4MkY2OTlFQ0I3OTZGOTUxCi06MTA0ODYwMDAzMDhFOTQzRDRFMjBCRkM0OUQ4MDcxNDMxMUE2MjJDOTU1Ci06MTA0ODcwMDA5MTM5QjAzNzg0NDE5QUFENkRBRjIwRjkzRTU2NkZFNjVECi06MTA0ODgwMDBFRjYyREE1OEEwQkM3MEZDMzMxMzcwQkUxMDc1QjIwQjI3Ci06MTA0ODkwMDA5MzdCRThGREJEMzk2RDlCMkZBMjVDQ0NDQzcwMTQzREExCi06MTA0OEEwMDAwNUY4M0QxOUM2RkI3RkYyNzVDMUJGMTZEQUE5Q0IzRkVCCi06MTA0OEIwMDA0NkYyRDMwQUU0ODFGREQ2RDk2NDM5REFBMUY2Q0Y1QTlCCi06MTA0OEMwMDA1MUFFMjFDMUNDQ0FBNzdFMTM5NEY4MzJEMDE1RURDM0U2Ci06MTA0OEQwMDA1REE1QTQ5RjU4RTU3RTlGMkQ5NEI4RERGQ0EwN0MyRTlECi06MTA0OEUwMDA4REY5RDZFMkY5RkFCRUQxOENGMjk1RjQxQkZCQUJDQTc2Ci06MTA0OEYwMDAwNDMxMjg1RTUwMzcxQUU2NzlBNUFENEY3NURFRTk1QkM1Ci06MTA0OTAwMDA2Q0JGMDFFOTJDQjg3RDE4QkUyQTVFMzk0RDdCMkQ4QTFCCi06MTA0OTEwMDBFRTc3MURDQ0IwREVFOEZFOTRENkE4M0VCN0E0MzM4NzcwCi06MTA0OTIwMDAwN0REQkI1M0NCOUZEOUY2QTRBMDdCNzcxOTQxRjdFRUU3Ci06MTA0OTMwMDBGMjgyRUVEREE5RUZGOTJENzQ0RTA5QkE3N0E3QkVFNzMyCi06MTA0OTQwMDA2N0IwQ0Q1NEQ1MEY5M0U2QTlFMDg4OUNCQjU1RjUyM0ZECi06MTA0OTUwMDBFRENCRDVFN0FFOEVGRkJDNDI0OEM3NzcwNjdEN0QyRUY2Ci06MTA0OTYwMDA5ODg3NjZFMDhERTI5OEMxN0QyNDJGMEEyQTQzMUEzRTdCCi06MTA0OTcwMDAyRUNDODQ2OTczQTFBMTBCRTlBNDM5OTFEQkU3ODZFMzBFCi06MTA0OTgwMDAwRkRCQkFBMDFERTM4ODk3OENFODZGRkM4OUUwMkY0NTA4Ci06MTA0OTkwMDBGQkM0Mjg5RjUzMTlGRDE4NTNFRDMzQUYxNTcwQkU1MjU5Ci06MTA0OUEwMDBEMkRCRjI1Q0IzRjM2MTdERjJGNzRBNDlGQzFERTBERTM1Ci06MTA0OUIwMDBEMUI4M0U0NjdDNkMwM0Y5RTY1NTdFQUY3OEFDNkM0N0M3Ci06MTA0OUMwMDAyOEVEM0M1RjU4MzIzNTBGQkVDRjdGQ0MzMTgzRTJFQzBGCi06MTA0OUQwMDAxREZDN0VGMDRFM0Q4RkE3Rjg1RUU1RTc1QkYzM0JGQUVBCi06MTA0OUUwMDAzNDhFMDBGRTNFOTlDN0Y1OTA2NzlDQTUxNDFGQTlFQjc1Ci06MTA0OUYwMDA4NDVEMTZGOUE5RURBQzFFRUY2NUQ0NzU3NjQ3RTE3RUFFCi06MTA0QTAwMDA1NkUwM0NBQjQ3QkZDOTYwQkVCQ0NGODlGREUxNjhBRjkzCi06MTA0QTEwMDBGRkFDM0Q3NDNDNkQ2RDlFOUVGOEUzOTgyQ0Q3QUIxRUE5Ci06MTA0QTIwMDBENjcyQkI5MTM5NjZFMUI5NzE0NTVFNTdFREU3RTNBQkVDCi06MTA0QTMwMDA1QUE4RTdFNzYwMzExQTFENDI2RTgzOUMzRUFCOTZDM0NECi06MTA0QTQwMDAwRUY1N0U3MDhCN0YzRENBMEU5MERGQUE3QTRCMTc0QzE1Ci06MTA0QTUwMDAyN0JCQjcxMkU0MzZGMjMxQzg3Mzc1Nzk3MjEzQzkxN0UwCi06MTA0QTYwMDA5MEU3QUE3Qzc3REU4MDNDQ0ZCRjBFREY5RDc2NkE0MjVFCi06MTA0QTcwMDA4RUYzNzA4MTQ4RjM3OERBMzU5NUU2RkYxOTk4NDdGNDlDCi06MTA0QTgwMDBBNzNEMzM2NERFRjg3Q0RFNkNCRTVFQzZCNTBGNThCNzVBCi06MTA0QTkwMDBFMDdBQkYyRUUwRUJGNkYyMzBGMkZBN0Q3OTVENzcwQTJDCi06MTA0QUEwMDBCRDQ1Mjg0Q0REQ0U3MEEyREIyNTQ2NjMwOTlFN0IzOEQwCi06MTA0QUIwMDA5NkYyNjUxM0M2RTFBQTdFMkVEMDNERkQ3RkVCM0U2RUQ5Ci06MTA0QUMwMDA0MUZENUZCRkZGQTgwNUZENjFFRUY2QTMxNkIwNEQ1OThECi06MTA0QUQwMDBBRDRFNUE4QjdBM0NEMDg1MURGNTlFQkE4RTJFQzI3Rjg0Ci06MTA0QUUwMDA2NUZCQjg2RUNDNUZEOTIxRDBGQjNERUUwMzE3QTdEMzkxCi06MTA0QUYwMDAzODU5NUYxM0M2MEI3NzBFODNENzhGRjJCOEZFQkUzN0Q3Ci06MTA0QjAwMDA0RkUyN0UzMDE3RjQ4OUZCRkQwMTgzREYyRjIwMUQ4MEVCCi06MTA0QjEwMDA1QzQyQkM1RTE3RjBFNTM1QjY3M0EzQjEyMjk0MUVGNTc2Ci06MTA0QjIwMDA2RkYyN0MxRkQ5QTg2N0U4QUZBRjg1RUY3MTFDQzc1MjQxCi06MTA0QjMwMDA4RUU5OEQ0ODQ3RkIwNUIyQjVEREVEMjcxNzQ2NjBGQkQyCi06MTA0QjQwMDBGNTNBODZGQTg1ODJERjE3MjlCRDFGRTJGODNGQThENjFECi06MTA0QjUwMDBBMUE3ODAzNTU2NkI2OUJFM0ZBOEQ3NTIzQkRBRkI3NERDCi06MTA0QjYwMDAwNDJGNUVDMUNGNTUxQ0FFRkVBODI5MDlEQUZEQTA1NjYwCi06MTA0QjcwMDBBMDdCMEM1M0VGRkJGMzMxODQxN0FGRTBGQTVBMzAzREMyCi06MTA0QjgwMDAyQkY0MUE0QzlGQzFGNDNCODQ0RTZCQkUxOTlEMUVDOTc5Ci06MTA0QjkwMDA5M0VGRDVFNEIxMDJEQ0U3NjFEREE3NTk5MTdFMUVFMTE4Ci06MTA0QkEwMDBGN0UzMkJBRTFERDZBMTdGMzNCREM5NkM3RjAyRTAzMTg4Ci06MTA0QkIwMDA1QUZGN0EwQkNBODlDM0JDQkNCMDc2ODdDMEU1OEQ3NDM2Ci06MTA0QkMwMDAzN0YyNjE1MkIzOUVBMUJERkI3RTFFOTc0QkVGRTM3QTk1Ci06MTA0QkQwMDBDNUUzRDBGQTA1OENBRjMxQjEzNzFERTU1MjlBMUM0RkIxCi06MTA0QkUwMDA3QTQ1QzcyQUY2NTM1QzkwQ0I5QjMxQUZEOTU0RUY5NkU4Ci06MTA0QkYwMDAzN0U1NzFCRDQzOTE4MzQwRTZBRUZERTQ5NzZENEZDNDQ4Ci06MTA0QzAwMDA3QjE0MkZDQkU3NDE1M0U1RjZCMjMyRkFBN0NGODVGNEY4Ci06MTA0QzEwMDBBQTRDMkY2NzY0M0MxNEY4QjI0Q0ZGNkNEQkNGNjgxRkMyCi06MTA0QzIwMDA5RjJEQzc1OTY2MzY3NEQxNzlDQzNDODNFQjUzOTQ4NzVBCi06MTA0QzMwMDBCMzUyREZBQkM1N0RBRTM5RkRFRDdDM0E2NzhEMzcyNUNDCi06MTA0QzQwMDAyNkUyRkJDOUZDNzc3OEQyQTdEQkQ2NjBEQzJGMzc5QzQ1Ci06MTA0QzUwMDBENjMxRUNFMDUzNzQxRTM4MkM2QkJDMzU1NDlDNDM0OTYwCi06MTA0QzYwMDBERDU3MjU3QThGQjBFRTZBM0FBNTBBM0NGN0QwMzk3RDM4Ci06MTA0QzcwMDAxRkQ5MDExN0E3MTM5RjVDQjVBOURFMkRGQzU0QzY3Qjc1Ci06MTA0QzgwMDA4Q0YyM0U1RDI3RjdGMzgwOUMxNjhCOEIwNkVCMjlGM0E1Ci06MTA0QzkwMDA4MDlFNjUxQzZGNThENjJFNUFBRjM1QUI1ODIxQTk3NTJBCi06MTA0Q0EwMDBFQzI5RkVDRTY2RUQ0OTAxREZCRDU4QTQ3M0U4NEMzMDE3Ci06MTA0Q0IwMDBERkVGOEQ2MDI1MUY4QkZDMUQyNDU3MzZDNjREOEM3NDhECi06MTA0Q0MwMDAyRkZCODRENzRDNzBBRkQ3NDZGMDI5QUY0NEU5QUQ2MUQ0Ci06MTA0Q0QwMDBDRTg4N0M2ODY3RTExMTRGMTZDRURCRTE5NDU2MjdERTYzCi06MTA0Q0UwMDA1N0JDRjA4RTRFQTY2QjMzQkYyRjJFRDNEQUU1NEUyRDc4Ci06MTA0Q0YwMDAzMzYyOUNFQjAwRThFM0MyMjBGRUY3NUM0REE0RkJEREQxCi06MTA0RDAwMDBCRkMzRkVBMDlGOTUwREJGMjE3OTY3QUZCOTM4MURFREQ4Ci06MTA0RDEwMDBBMkMyREEzMzREMDhCQjFCRkUzQzFERjU4OTBGNjFGRkIzCi06MTA0RDIwMDAyMEJEMUVGNDdCOUI4MDcyRTQyNEJERDM1RDc5MzU4NjYzCi06MTA0RDMwMDBEQTc5NTlEMzNGMURGOUNCRjdBNjQwRjc2RjNFRUNCOEFGCi06MTA0RDQwMDBBOEI3RjJGRDg5REM3Mzc4MkYxQ0ZERjJCM0YyQTNCOThBCi06MTA0RDUwMDAxQ0U5MkNENEQwRkEzQTI0RDUzQkVCRERBM0ZGMkIwQTc3Ci06MTA0RDYwMDBEN0MzRDgyMEZEN0EwQTdFREZBMzY1QzhCRjlCNEFGQjY0Ci06MTA0RDcwMDBBM0NDMjFFNEVGNjlGNERGNjVGMzcxQjBFQ0ExRTUxNTk0Ci06MTA0RDgwMDA3QTVGMTY5RTkzQUM5MEU5MzhCOEJDM0M3RkMwM0ZBMUQ3Ci06MTA0RDkwMDA3M0NBRUZFQjA4MDFGRUExMkFDNkRGM0YwNUJCQTcyQkI0Ci06MTA0REEwMDAxQ0Y4QjhBQTczMkFGOTY3QUEzQ0MyMERGRDMzQzNEMTE3Ci06MTA0REIwMDBFMUQ3NERFQjE4RjdDRjI4MzBEQThEODE3RTREQjQxQjRCCi06MTA0REMwMDA5OUFBN0YxRjdGMDcyQjI1RjM4NkY3NzREQzdEODkxNDUyCi06MTA0REQwMDBDRkFGNkI2NjE0RUY1QTc5NzUzNEE1RTc1RkRGMjAyMUZBCi06MTA0REUwMDBGRjE4QzNGQjVCRTk3RTZCQjY4NkVDOEM5NTNFQjVGRTg3Ci06MTA0REYwMDAzM0E1ODBDQjg1MjkwNTdDREU1Q0Y5NjAyRkU1QjAwMTA5Ci06MTA0RTAwMDA3QjA5RUNBMjdCRjNCOTVEMTQ3NTg4QTlFQ0E1RTA3QzY1Ci06MTA0RTEwMDBCMjk3OENGMjNEMUQxMDEzQUU1NzQyRTA3RDQ3NDE2OUI5Ci06MTA0RTIwMDAwRDdFOTdDQTVBODhDRUQ5M0JGQ0ZFNzJGMDM4RDdFNDgzCi06MTA0RTMwMDA3MzNFNTVGODdBMzFGMjM1RDI2RjA3RTdFQkUwNzZFNzRCCi06MTA0RTQwMDAxNTk0QUM0MTNFREEzODRDN0NBQjVDRTZGQjk1NkQ4QzNFCi06MTA0RTUwMDBFNkNCREQxNjQzRjNGNDA1NkI3Mzk2MDI1RDdFMDE3OEI1Ci06MTA0RTYwMDBFMDNERDIwQjRFNjc0NDM0N0M3RkMxRTU4Q0MwRjMzREZFCi06MTA0RTcwMDA4QTFDQTg2QjBCQTdFRjM2NjZDRThCQzU3M0EzQ0Q0OEYzCi06MTA0RTgwMDBGN0QwREVGOThFQTk0NjlDRTc3QkRBMzhGRjI5RkQ3RDU1Ci06MTA0RTkwMDBEOEI1MzgxNkY5Njk4MkFFNUY2Rjg3RjJFNENFMzM1MTI4Ci06MTA0RUEwMDBBOEY3NEQ3ODdEN0UyQ0YyRTE3MDc4RkVGRDE4MTlDRkMxCi06MTA0RUIwMDA4NkM0MTIxRTk3ODdCRDcwQTI2QzRGMDA3RUVFMjdCQTgzCi06MTA0RUMwMDBFODlERkE4NzFBMThEMTZGRjdBQkZGNTY4NzdDN0NCRTM2Ci06MTA0RUQwMDAzM0MyOENGQkU2MTcwNzIzRThCRENBMEI2RjFBRTgzRDA3Ci06MTA0RUUwMDA5QTVBRjk3REQ1MkY3NDdENzM0OEJGN0M1RDRCRjcyMkFDCi06MTA0RUYwMDBERDZGRkU0NzJCRjJBM0ZCNTUwMzlEM0I3Q0E4NzNDM0RDCi06MTA0RjAwMDA0NURDRjc2QTNCNjc5Q0MzNzc1NjZCNUZGQURCRjJDM0ZECi06MTA0RjEwMDBDQTg2NTREMjhCMTRGODNGQkM0NjI3QkVGMzdCNUVFNEFFCi06MTA0RjIwMDA3MkUyQTE4RTdGMjE3REY3QTE2Qjk3MEJGMDdDQ0ExN0VGCi06MTA0RjMwMDAwN0ZGQzc0NDk0NkJFRUI3MkU0RjQ0NzlFNkZFQzVFNUY0Ci06MTA0RjQwMDA4OTU4RUU3RTJEQzIxMzRBNUZCOTVFQzBGRDNFQ0E3RTBGCi06MTA0RjUwMDA5OUY2QUVBOEYyMEZBRDkwRTkyMzZENUQwQkJEMDczRDRDCi06MTA0RjYwMDBFMUU0MDI3QkUwQkIwRjEzQjIzNDRFQUMzRkUxQjc2NTI2Ci06MTA0RjcwMDBCMUY3MDU3Q0I3QUU1N0E0MzhFM0Y4OTM2NTExRDUwMUI2Ci06MTA0RjgwMDA3NDc5NEY4MTRFRjEyRjdFMjNCRjBFOTNERkM3MTlGMDQ2Ci06MTA0RjkwMDBFM0Y0RjI3NzdGMzZGNjhBRkM3REEzMUE4MUVFQTE4M0QzCi06MTA0RkEwMDBGRTMyRTQ1RTFBQURGRjhBNTg3QURGODg4OUNFM0JDN0FECi06MTA0RkIwMDA4QzQ3Mzg4QkRFMDU2MjNFRTNEMUNDMDAzRDY5NzFBRjkyCi06MTA0RkMwMDBBNkNCMDA3NDU0RDE2OUU4MjJGREJFNTczQzQzQjBBQzc3Ci06MTA0RkQwMDAzRkRENzNGMUQzQzgzNDIxODQ3RjI2RTdENDM0OTRFM0QyCi06MTA0RkUwMDBDMTdFMUFGODQ1MjJERThBQkU1NUU5NzFBNTIwRkVDMUIwCi06MTA0RkYwMDBGRTlCQTUxNTc3OTA3RjI4RDg3RjkzRDYyQjZBNjY4RjY2Ci06MTA1MDAwMDBDN0Y3REZFOTNBMkY4Q0Y3NjkyM0YyOEJBMjg3RTJGQTIwCi06MTA1MDEwMDAxRDA4QzFGRjZCQzY3MDM5QTZGMEQ1QkE1RTFFRkY1REQ0Ci06MTA1MDIwMDBENzVCNkFDQzg0QjQ1NkU2QUIwM0IwOURGQUEwRkQ3NTlECi06MTA1MDMwMDA5REYzNzdBMzFGNjFEREI1NDUxMTYzNjBCRUQ2QkQzQjBGCi06MTA1MDQwMDA4RjNEODFGQzZGMkUzNTY2RTE3N0Q3RUUzMDJFQ0MxRjc5Ci06MTA1MDUwMDBBNDk3RTBGRUE2OENFMUYyNzI0MDRGMTg2NkRGQ0I5NzcyCi06MTA1MDYwMDBGMUZBNUJFRDdGMzk2M0U0RjM2Q0ZGODdFRjdGNjA4N0Q0Ci06MTA1MDcwMDA4RjFEQzNFREYwMjVEQzRGQzJFREYwRTA3RDQzOTFDN0ZECi06MTA1MDgwMDA0QUJCMkU3OTlEODdDQTYzRkU3NzQ4QzA1RTI2NzlFQ0JECi06MTA1MDkwMDAxQTIzNTFCREU0Q0VCOUIxNjQ0N0JGQkIyMDU2MzIwRENGCi06MTA1MEEwMDA2RDNGNDNCNDZCNjJGMjg3QjZBRkU4NzE2RTlGRTNBOEMxCi06MTA1MEIwMDAxMUVEMUM4Nzk2RkI0OTE3MDhGNEJFOTlBMkY3Qjk5RDFDCi06MTA1MEMwMDAwMkU5RTNFRTRBOUQxRkVCMjk3OEY1MkVFMDdFRDU4NUI3Ci06MTA1MEQwMDAwRTlEM0Y0QzE4RDQwRjE1RkQ3MUEwREMyRTUwQjlBMkM3Ci06MTA1MEUwMDA0RjJBN0E2M0FGOTNGQjcxMTc4Q0U3RTVCNzg2QjkxNjQxCi06MTA1MEYwMDBFMTdDN0REODE1NDZGOTEzMjZGMTdDQzY5QzQ3OTMwMEM4Ci06MTA1MTAwMDA1RUY0M0Q4MTExRkZDQkZBQTQ0MkE3QzFGQUU2QTVDRTE5Ci06MTA1MTEwMDA4QzFCQkVEN0IzNERBNjRGODVDRjUyODNGODQzRDlCRjYyCi06MTA1MTIwMDA5QUYzMzlEREQ3RTFGRTFEOEJGQkY3N0ZBQUY0RjJFMDlECi06MTA1MTMwMDA3NjYxRkY3RTA4RjE2RjQ2MUQxMkJFMUZGRjVCRDExOTFECi06MTA1MTQwMDBDQTNFRkY0QUQ2MEJGRTVFNTlCRkRFMjMyNTg4QUY3MkVBCi06MTA1MTUwMDA0RTc2Qjg3REI1NEVENjZGODYyQjZGQ0VGRjdBRkNCQ0VGCi06MTA1MTYwMDA0NzFFREZERjhBOUY3NzhFRjlCRjQzOUYxREQwMEJGNTY3Ci06MTA1MTcwMDBBMUM3Nzk0NzQxQzk0RkM2QzBCQzg2NkIzRDc0OUU3M0I5Ci06MTA1MTgwMDBCOEY3Q0QxRTk1RjU1NUIwNzM1NTc0N0MzNDQ1QUY0MUQ1Ci06MTA1MTkwMDBCQkM4NURDM0ZEMDNDREQxRDJBRkM5N0UzOUFFQTVGNzgzCi06MTA1MUEwMDA1NzFFOTJFRjczM0U3OEQ1NEM2OTJERUFDOTkwMkVEOURGCi06MTA1MUIwMDA3QjkyREVEOTVENTJBM0M2QkYxOTdEQjdGOEZEQUEzNDM0Ci06MTA1MUMwMDA4QUVCNTdCMTMyRjIyQjU1NzU0NjlCRjFCQzdGNzM3QzRECi06MTA1MUQwMDBGQjMxRTQyQkRGNkVBREI0M0JCMEZFQzZEMTcyN0QyMzU0Ci06MTA1MUUwMDBGN0I3RDU0NEQzREY4RjYxNDE3QTQwOTUyNzU4REY1NzExCi06MTA1MUYwMDBFQjA1NTM2NDNGRDE3MEZBQzEyRkJBQzNCODVDRTlEMTUzCi06MTA1MjAwMDAxMjlGRDczOUY5REY1NUQwNzc3MkI5RTA2RTA4MjNCRjA2Ci06MTA1MjEwMDAwOURBNkI4OEQ3NjcwRDgyMUZERjNENUYyOUQ3RkI0QzBBCi06MTA1MjIwMDBFQzI1RkYxM0M1RDNBMENBQjlDRUE3MkMwRUIyREZENDhDCi06MTA1MjMwMDBGMUEzOTVCQjdFNEI3MjMzMzg4RTE0NzM0MDhFMEIwREU5Ci06MTA1MjQwMDBDNDhEMjZEMjc5OTA5NTYwNEZFMjlGQkM3MjRCRDI1RDlGCi06MTA1MjUwMDAzOEZGODAxRkYzOTNEQzcxQThGQzMwOTc3QTNFMjJGQjY1Ci06MTA1MjYwMDA3M0M5RUIzQ0ZFMzMyNDdFRDQzQzkzQzc4RkYwREQ5NUFECi06MTA1MjcwMDAxMDdFQzhBNTIzOEYxREM1QkZBMzc0QjNCODUxNURDN0U5Ci06MTA1MjgwMDA0OUJBNDczMjQ0RkYwOEQyM0JBRThENTFGQjE5NDc4QUQ5Ci06MTA1MjkwMDBEQzhGM0JCMjUzMzBBMzdGNkFBNDNDOEY3RkI3MzE5QzM1Ci06MTA1MkEwMDBGNEVBRTk3RkE4OEU0NTc5QTBBQ0QzRjlCOTdDNUVDRjRBCi06MTA1MkIwMDA3RjcwQTUwNEJGOUJGODA3RDExQzA2RTNGQUM1MDdGNTZDCi06MTA1MkMwMDBCRjQ5RTJCMDY0OTRGMEJCRkEwOEI0NjNDRUZGNjE3NUU1Ci06MTA1MkQwMDAwNENFRUIyRjIwQzVCRjJGRjFEQTY5MzFBNDNGRDIyQkNBCi06MTA1MkUwMDBDQjJERDgwRkEzMEJDOEJGMkNGQkE1NDVEODBGMjMwNzg4Ci06MTA1MkYwMDBGRDM5QzFERjZEOTdCRjZCMDYzMzg1RkM5OEFGRjNGOEJFCi06MTA1MzAwMDA3RTczODI2QjI2QzFDRkE2MzNGRTFFQTY4M0ZDQ0VGRjIyCi06MTA1MzEwMDAwMjc0OERGRUEyM0MxODJDQzY5RjdGMUFDRUQ2NjFCQ0FCCi06MTA1MzIwMDBBODM5REVGNTM2RjFEMUIzMUEwOUY5MDhCRUE3Mzg5M0NBCi06MTA1MzMwMDA2RkJGNDRGQjIzNEUxOUM2NzMwQUY0RkM1RDQ2RUEwQ0FBCi06MTA1MzQwMDBENjZCQjRCQzhFMDk2MEM3NjIzQzA5QjA1OTgwRjFFNkU3Ci06MTA1MzUwMDAzQzM5QUU1MzEwQ0U0NDZDRkY0OTlENkIxM0JFOTdGOTk4Ci06MTA1MzYwMDA2NEI3Njg1RjRCNEM2MDhGQzU3N0JGODNFMzRCODI4MzI0Ci06MTA1MzcwMDBDN0M1OTUzODkzMTIxRjFGMkVDRTI0NjAzRjA1OUNFRUEzCi06MTA1MzgwMDBGOEI5MTU4NzgwNzE3MzI1OUVDNEJFRTdBNDIwNTc2M0MyCi06MTA1MzkwMDBCMTg3Q0VGNzNGNTNDODQ4QUU3RjhCNzE5RTI1RjkyMTY4Ci06MTA1M0EwMDBFMjQ4MzVDODYzMjRDRkQ1NzFDNTREMzlBRjEwOURGRTk1Ci06MTA1M0IwMDBCNUYxQzQzRDYzRDhCNzFDRkZFMkYzMTM4Q0Y3RjhFOEVFCi06MTA1M0MwMDA0QjE2QjJCN0JFRkFFRjUxQjRDRjc2NUVBNkZERjA0MkVGCi06MTA1M0QwMDBCRjQxQkU4RkQwQzdGREVDOUQzQUYyMkY1QzAwQkIyREM0Ci06MTA1M0UwMDAzRTYwOUYzRDlBQ0ZEQjNERDQzOTk1RThGRjQwNkY1OTMxCi06MTA1M0YwMDAwNEQ2M0YyRkU3NkY3Qzc3QzFGQ0Q5NDg5N0JEMjJCRDBCCi06MTA1NDAwMDAwNzhCRTdFM0QwMEUzQkQwMkI0RTQwQkRFNTVCNUM5N0FFCi06MTA1NDEwMDBFRjhGMDlCMTJFQzZGMEQwRUY0Q0U0Q0I3Qzk0NUZDMDg3Ci06MTA1NDIwMDBFOTYzRUEwN0RDRkU3MkQ3RjMzODhBNTk5NjBCRUU3MjBECi06MTA1NDMwMDAzREM5QzE2MzI5MTY0MUYxOUY1QjQzQzU1OTVFRUZBNzgyCi06MTA1NDQwMDA3REEzNkE4NTQwRjcxQ0JFNzE5Q0E1QTM1QkRFQjc4Mjc1Ci06MTA1NDUwMDBGQ0QzRTVEMzQ5NkUwRUU3QjcwRTg4OUJBQkNBQjcxNUYwCi06MTA1NDYwMDAwQzlDODcyM0ZGNzU1NDgxOTlDNjFERTMyOTJDQzFCMzc5Ci06MTA1NDcwMDA4N0NBRjhCRkM1NzVCODczNkMwODNBRkIxNkRCNUY2OTVECi06MTA1NDgwMDBGRjZFREI5RjkyRjdEREI2QkZFNjNCNkU3RjZEREU3NzhBCi06MTA1NDkwMDAxQkU3REVGMTFERTM3RkY1M0I2RUZGQ0M3NzNDM0ZBRkIyCi06MTA1NEEwMDBFNUZGRkY3MzAwMDM3MDcwOUMzRkY4NUM0MDcwQkNERjQ5Ci06MTA1NEIwMDA3MEZDM0UxRjk2NkQxMDM2Rjc3NzQxNkE4QzdBQjU0MkM0Ci06MTA1NEMwMDAwMDUxMkQ0NkVGQTI3NzA4NjY0REUyNzFCMDhENjU0NjFBCi06MTA1NEQwMDBGRjBFNjFGMDdDODAzMjVGNEIwQkI5MUQ2MUNFQkZFOERGCi06MTA1NEUwMDA4Qjg1Nzk0RTc1RjQ5NkM1QTI5RjZDMTI3Rjg3RkQ4MkRECi06MTA1NEYwMDBGQ0NFMkExM0NERjRDRTE4RDQ0Q0MwRkJGMUNENjFBMTYzCi06MTA1NTAwMDBFM0FBNjE3MjdCQzNFRDIzQ0YxNzk2REMzMTM2OUVGRTkyCi06MTA1NTEwMDA2QzQzQzhGQjFEMkZDOEZFNDc3MzA3MjNCRjI0MTNBNTg4Ci06MTA1NTIwMDA4NDc5RDRBRjk0ODBGQUQwODgyMzNDM0ZBQThCMzk3NjEzCi06MTA1NTMwMDAxMDVFNTJEQTNDQjIwN0E1MzRDNDZGOEIxQ0VGOEQ5OTE0Ci06MTA1NTQwMDA5OTlEODZGRUU4MThEMDBCMzExRUY4MTRDNjA1Mjk4RUU5Ci06MTA1NTUwMDA2NUE2N0E0QTdGMUY4Q0U1RkQ2REQxMzE4MUVFNUJFNTUyCi06MTA1NTYwMDBGMkYzNENBQ0Y5QTAyQTlFRjc4RUFFRUJFMzY1MDJDNUQwCi06MTA1NTcwMDBGMzk2MjNGRUJGRDI3NEU1RUY0QzkzODkxOEU2MzdGRjBDCi06MTA1NTgwMDA4MDk5RTI4QzI3MjZCRDQ4N0Y3NzU2ODlFRkFEMzFGM0FECi06MTA1NTkwMDAyQTg3RDE2RTA2M0NENjFDMUM0N0Y0QkJFNEQwQTRGNzg2Ci06MTA1NUEwMDBGMUU5MzM3N0E2NjgwRjc1NEY1MUYxMTc5Qzk2RkQxREYxCi06MTA1NUIwMDA4QUJGNDA4OTZCRkQ1RUY2OTM3Qzg4RkUxN0JBMUYyMjc2Ci06MTA1NUMwMDA1MUVBMURBQkY5QjZGNzI3RUZEODEwRkNCRjQ1RTBGRTU2Ci06MTA1NUQwMDAyMURGQUZCODdGNjg5Q0RFOUUxMTc4NkU3MkIzM0NBRjVFCi06MTA1NUUwMDBDQkJBNzhEQzQyRjFGN0VDOTNDNzMzRUUxMTZEOTcwMTNCCi06MTA1NUYwMDBGNkQyNzE0RDYzRjRCOENGOEY2QjRBMDlDN0I0QzBFMURFCi06MTA1NjAwMDBEN0UwN0RGMEM1RDVGQjM1Q0FGQTg1QTJBM0Q2QjFCMkU1Ci06MTA1NjEwMDAxRkEzQTc5RkUyN0FGRjEyMTRFN0ZGNjAyQzNGQkYzMDYxCi06MTA1NjIwMDBBRjkwRTNGMTAxRDgyNDA4QUZDOTEyMUI1MTdEMUM3MTYyCi06MTA1NjMwMDA4QjU5MUIyQTlFNTQwNTc2MzFFMkI5QUM5OUUzQURDQzY3Ci06MTA1NjQwMDA3NzU1OTczNDE1RkIzOTczQjRCRjA5RDNBMjlBQjRBOTFGCi06MTA1NjUwMDBFNDZGQUZCREQ4ODRGQTlCRkJEQUU1NjNCNzkzQkY0QzI4Ci06MTA1NjYwMDAyRkExM0Q3MTRGOUZEQUVGQjYwQUEzQTVGMTg0MjdGRDY0Ci06MTA1NjcwMDA5RDVBREYwQzkxRUNFMzcxMzM0NEEyOUY5OEFBMzBCMjlCCi06MTA1NjgwMDA1RjYzNzQ0QzZCNDI3ODJFRDc4QjhBQ0FFM0E2MjJDQzE4Ci06MTA1NjkwMDAxNjQ0OTMzRTU4RDQyMzQ1REY5NzNGRTgwNzhCOTk1MTMyCi06MTA1NkEwMDAxRjhGRjM3NEIzRjhBQUUyNEZCQjM1Q0NGMTFBQUVFNzAzCi06MTA1NkIwMDA1RjFCNUY1REY5Q0VCQjc0QUU1NDE5OTczMjJGNEE5Q0M1Ci06MTA1NkMwMDA3NEI4RjhBQTcyQ0VDMTVEN0U0NTc1MkVDMzJERjY0RjEzCi06MTA1NkQwMDA0N0ZGRTNCODgzNjdGNEYyMzk0QjMzRkUxRDYxMjVGRUMzCi06MTA1NkUwMDAzQUVFRjU4QjE0Nzc1NUUyQUM2RUNGNDVEMkFCRTEzQjg5Ci06MTA1NkYwMDAzRDdFM0YwRTk2M0YyMTA2REYxN0UyRjFENzU3RjE5RTIwCi06MTA1NzAwMDA5NDFFRUZGRjk5RTlCRUQ0MUJGMkZEQzU0RTE4M0ZFNjhCCi06MTA1NzEwMDBCRkU5Q0RBMUI0Q0I2QkE3RjQ5MEI3OTg1Mjc3RTc0NTFBCi06MTA1NzIwMDA4QUQ3N0UzODU2MURFRjUzRTI3OTk3QjRDRTMzNjNENUNFCi06MTA1NzMwMDBFNzIzMDkwRThFRjc2OUMzQjlCRkM2RERBM0EzQkY5N0UwCi06MTA1NzQwMDBFMTdFQzc0OEYyQkJBNDczMTlEREVCRkFGMkE0NkIyNDI3Ci06MTA1NzUwMDBFMjVEODdGMUI2MDBCQTM4RUZCMDg3RTEzQjYxRTc5REMzCi06MTA1NzYwMDBGNjMwOENCMzhERUIzRUE3QzdGMzJGNzU2MkFGMUVGREVECi06MTA1NzcwMDA2MTgwNzExMjFFNEQ3NDFGQjhDOENGRjc3Njk2RDBERkM2Ci06MTA1NzgwMDBFM0JBNjk1Q0FDRTM2RjEzMTdGQjlGRTU0MTAxMjEwMEFECi06MTA1NzkwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMEZGQjUxNzBDCi06MTA1N0EwMDA1RDRDNTM2N0Y0N0NCN0I3RTU5NkRGMEIyQTNGMjI3MjU2Ci06MTA1N0IwMDBDMTYyOThBMkRDQzI0MEE3MzExNjc0QUMxMzVDOEE0QTVECi06MTA1N0MwMDAwMjAxQjU2NjJFOTIwOTJERDlDQ0MyQ0JEMjNBODkwMUZECi06MTA1N0QwMDBEREMzQjJCODY0RjNBOTI2ODNFOEI2ODdGQTkzQUQ2RTQ5Ci06MTA1N0UwMDA1NTBCMEI4NDI1MkVFMkMzOUM3MUM5NTIwRDMzMzNCQTdECi06MTA1N0YwMDA4MTYyRENEODVDRDgzOURGQkRCNUJERDhCRDJDREFBNDU4Ci06MTA1ODAwMDAzOTNEM0ZERjM5REZGOUZGMEEwMDMwMDdEQUU3NTZCOUUzCi06MTA1ODEwMDAwNkU3NENGOEE1Q0ZDNkZGMEYzREE0NEY4Q0UzRERCREQ2Ci06MTA1ODIwMDA0QkVCMjYxN0M0RjFCQjNFQzkzNTY5MDNGODVEOUNDRTJFCi06MTA1ODMwMDA5NDJCMDBGNjg3Q0U1QTFDMDQxRkNGQUM3NjIxRkNFRENBCi06MTA1ODQwMDBDMkRGQjU0QTNBODBGN0QyNEMyRDIwRUVGRDY2QTY5NjBGCi06MTA1ODUwMDBGOERFQUZEMjdBMDJFOTRGREI3QkQ3OEU5NzVFMDQ3MDE5Ci06MTA1ODYwMDA5NjQxNkIxMEY5NTUyRUMxNzE4MkUwQjhDM0ZBNDY0NUQ2Ci06MTA1ODcwMDA1QzZFQzAyNTM4RTlGQzgwQUQzNDlCRThDNzVDQTVEOUQ3Ci06MTA1ODgwMDA3QjEzRjRGNTM5NDU2NzAwRTkzOUFGREFBQzg5RjQwOURGCi06MTA1ODkwMDBCQjE5QTAwNkU5MEM1Q0MxMjRGNjZCNTU4MURCREY3RkU4Ci06MTA1OEEwMDBEMjJBNEY0QTdBMUNGMURCMURDQzM2RTBERTUwODEzQzE3Ci06MTA1OEIwMDA1OTFFQzdGN0QzOEYwMkZDNkU2NjIyRDQwMjc0RTlCOTcxCi06MTA1OEMwMDBCODY0NzJEN0FBQThBRjNCM0Y2QTgxNTJBMjRDNUI1QzE2Ci06MTA1OEQwMDBBQjMwNUVERjRCRkRBQzEyNjBGOEZDQkVFMjY4MDUxNzMyCi06MTA1OEUwMDA5NTIwMTdBMDREM0YzN0UwREM1QjlDQjExMEMwN0YzRDk5Ci06MTA1OEYwMDAwNUNBOTg0NjEzOTFERjRBM0YxNDhFMkEyMkRBNjlBNzE3Ci06MTA1OTAwMDA1Rjc4RTVCNkZDRjcyNzRDQUIxMUJBQ0RGRTY4QzJCRDk3Ci06MTA1OTEwMDBEQTlEODJDMzlBQzlFRDJFNkRDRTIwNzkzMUNFMkYyMTJBCi06MTA1OTIwMDBBNUQzNEJCN0FEMjJDQzUxMjhFNDEzRjQxN0MyNUEwMkM5Ci06MTA1OTMwMDBEMkE4QUQzNjZFRUYwNjA0N0VCMEExN0M5QjUzODhBNDNFCi06MTA1OTQwMDBBMDlERDY3MDRBMDQ1MDZGOTU1MzA0REY4QjA4N0JDRDIxCi06MTA1OTUwMDA4MTEyNDY3Q0YxMjZFNzJCNkYzNjExQkY0RkFFMkEwNDI5Ci06MTA1OTYwMDBGNEUzRTdDQjE2Nzk0MTA5QkZERjY0MzQyMThFQUFGMzUzCi06MTA1OTcwMDBEM0ZFNTIzQ0FGNzYzMTk1REM2QUVGMzRGMkYxOTM0MUJECi06MTA1OTgwMDA3RUVFRDZFM0IyMzMzNEZDNzIyMUY3NUYzNjAxOUVDQjU0Ci06MTA1OTkwMDAxRDAzMzg4RTc2NzdGNjE4Q0ZFRDZFNzVERTYxNzQzRjk1Ci06MTA1OUEwMDBGOEEwN0YzM0NBODE0RDkwMDc4OURFNkI5NEEzM0EzQjAwCi06MTA1OUIwMDA4REYxMUYwMDcwMjZENjQzMzdENTQxMEQ0MUM2RTFFNzcyCi06MTA1OUMwMDBFODEzRDU0NTE1MDYyQTU4MTEzRjM3QkY3RTQ2NzRGOUFFCi06MTA1OUQwMDBGOUZBNjJGMDBDRjExNzUxN0Q1NjBERDgyOEJGNEQwMjJGCi06MTA1OUUwMDA5NDAxRTFGNTkyMkQ0MTlGNUYxNUI5OUUwRjY1MDFGQzcxCi06MTA1OUYwMDAyOEQ3MTdERTNFQzgzMDdFN0Q4RjVGOTE1QTUwNkU0QUExCi06MTA1QTAwMDBBRTk3Q0FEMkUzQjhGNzMyRDY1MzE2NDBGNUYwNkMwMzFFCi06MTA1QTEwMDBDNUZCNTg5ODgxMTU0RDc5RjNGMUJFMjg1NzdEQjE2RUJECi06MTA1QTIwMDA5Q0FENEVCQ0E3RTZERjMxQ0NGOTQ0M0FENTgxOUEwRDQ2Ci06MTA1QTMwMDA5QTVGMjA2MUJDRkMxNzU4NjAxMEVENTUzNTNEMUM0OTNDCi06MTA1QTQwMDBBM0Y4QjlCMkQ1MzI4NUVDRDgwRUE1MjNFRTZEMTI2QjUyCi06MTA1QTUwMDAxOEUxMkUzQzQwRjgwRTE2OTBGMEU3RjYyQjlENUIwMDA3Ci06MTA1QTYwMDBFRDU0QjdEOEFGNTJEQzVCM0FDQ0FBMTU4OERFREE0MEU5Ci06MTA1QTcwMDBGNDZCNTk1MDM3MjkxMkZGQzQ3QkE5QzQyRjY3QUE1NTZDCi06MTA1QTgwMDAyMUJFQjM5RUY4OEQ1RjQ0NDRBQUU3QUQxNEE1NjU3OEE2Ci06MTA1QTkwMDBCN0NCMjg4RDdEQjNDMUVBMEU1MDFGNTUzN0EzMTFGNDQzCi06MTA1QUEwMDA2RjQ3ODczNTQwRkVCNTg0OUJDRDkwQ0VFQjQxQTBCRUJECi06MTA1QUIwMDA3QjVCQ0ZFREI3NDU4RjMyQTM0ODlGMDk1NzY3OTE1RjU2Ci06MTA1QUMwMDAwQkNDRDMxNjE1NjEzNUVBMkVDODQxNzhFMUJFMDVCMDdFCi06MTA1QUQwMDAxRkJDRTJCNDQ1NDZCOTczM0U0Q0FDMDVFMDRCOUZDNEQ1Ci06MTA1QUUwMDA2MUM4Mjc4MzYzMzlDMEQ3QkU3QzBFQzMzRTg1RDMyRkUwCi06MTA1QUYwMDBGQUNBMzk4Q0Y4NTQwRTQ3N0M2QjM1QThDQTNDOUU5NTdGCi06MTA1QjAwMDBFMUZCMDJERDI3QTc1OTcwMjU5QjZGN0VCRDNFNjJGOTQwCi06MTA1QjEwMDBBQTBCRUYyOUE2N0IzRUJBRUEyRTk2OTNDOEM3MjA1QTU1Ci06MTA1QjIwMDAyQzE0RDY2QUZEQzkzMDY3NUVFN0MzMDZCMkUzODFFODhDCi06MTA1QjMwMDA2MTNBQTc2MEJFNjEwRDQ2MjE4NDMwRUZCRkVCNkZBQUNBCi06MTA1QjQwMDA1MjlCNkZEOTAyQjg5M0YxNjdGNEZBMDQ4NzIyRDAzQ0Q0Ci06MTA1QjUwMDA3QTRCRDJGQTdGNzhDNTVGM0M5RTUyNDhCOUIyMUVGM0E5Ci06MTA1QjYwMDBFNjE5Mzc0MTBBRDI4RkQ0NkI3MzdGQkU5RUVCMTg0Rjc0Ci06MTA1QjcwMDBDMEI4RERDMDc4MTI5Q0NGNkZCNUY4Q0IyODFGQUQ3NENDCi06MTA1QjgwMDA4RjI0RTdBN0Y0RkFDNDBBMzBCQjMyQjQ5QzMyQkM0RjZFCi06MTA1QjkwMDA0NzZDMEU2MDIwQjIzMDhGMUQyMTE2NDlDNTNFREYxOUJCCi06MTA1QkEwMDBERTc0NDcyNEQ4QzNFMDk2NzE3RTNDRDc3REQ4RTY0NkE0Ci06MTA1QkIwMDBBNTg5RjNCNjMzOEQyNkY5MTM1QzRBRDVFMjJDNTkzNDA2Ci06MTA1QkMwMDBEODZGRDVGNjVBOTM1RDhCNzMwQzZFQjU2Qjc1NzE5NDY3Ci06MTA1QkQwMDA5QTA1RUJGQkU4NzkxNjM4ODhGREU3QTkxOEJCNEU3M0U4Ci06MTA1QkUwMDAyQ0NGMDFEMDhCQzNDNzkzOUYxRTMxRDEzQzBGOTlFRkFGCi06MTA1QkYwMDAzRDk5RTNEODFGNzk4QTBDMUQzOTk0MzcwQzI2RjY0MTVDCi06MTA1QzAwMDA4MTdFMDcyNEMwNkQ5NDYzOTExQzYxNkUyNUNBMkQxOTk1Ci06MTA1QzEwMDA5RjI1N0Q5RkQ4MTU2RTJGNzc1NzkwMDFCQTUwMDRGRUFGCi06MTA1QzIwMDA4MzM0NUY0NjJENTA3NzFBRUQ3NzlENjM3MDkwRkEzQjcxCi06MTA1QzMwMDBFMDAyMDVGN0ZERThGMTFCODc0RjIxREQ3MzhFQzlCNDQzCi06MTA1QzQwMDA4RUJBODM1N0Y5OUVFRjE2Mjc3OEZGNzhDMjc3MkRCQzVFCi06MTA1QzUwMDAxRTgzMzczNTdBODgzOTAyNDlGMjNBNDBGQjFERUQ2RUQyCi06MTA1QzYwMDA0NjdGNjg2RTc0MUYzMDA1NTJEMDZFQzMzOUFEQUZCRDJDCi06MTA1QzcwMDAwRTRCNDA0MTdDQUNFODFEOTFGMDlERTcxOUU0RDExQzJFCi06MTA1QzgwMDA1MzI2MTZBNTExRkY4MDE5MDIyNURDQUZBNkJBODRGREE0Ci06MTA1QzkwMDA4NDVGODVGQzhFRURDRkQ4RkVGMUMwRjQ1ODIxRDU2QjIyCi06MTA1Q0EwMDAyNzUzMjMwQURGM0ZCNzhDRkIwNTJGOTIxQkRGMkZFRDE1Ci06MTA1Q0IwMDBBMTYxMzNDRDFCREM0MzA2QjlERDhFODYzQjM0M0Y3MUQ5Ci06MTA1Q0MwMDBDRjE4RTk0QjBFREZFN0Y5ODAyOEFGNTNEQzJGMDY3RUIzCi06MTA1Q0QwMDA4RDNENjNFMTZEMkMwOTU4MDkxNTczMzhDRjM2NTVDQUNGCi06MTA1Q0UwMDAzQ0RGQUQ2RUM2REMxODFGNDk3MDc1OTE5RjcwOTFDOTdECi06MTA1Q0YwMDAzNDZGRTdDN0FCRDFBRUY1NDFBMzlGNDEyRkU2NzdDODFDCi06MTA1RDAwMDBBMkQ1QzdEMDNBMTZGMEEzN0MyM0EyOTRGN0ExOEI3QjJGCi06MTA1RDEwMDBGQzBDRkQxQ0FBNjJBQTQwRjEyMDIxOENDNzE2M0QzRTU2Ci06MTA1RDIwMDAyRjgwMUY2RTRCRkNBOTcwNkNBRTFBRTAzNUFDNjEyQjU2Ci06MTA1RDMwMDBENjUzQTM1RTBGMDAwMTZFQTdGOUUzRDQwOEJEMjM4RUVFCi06MTA1RDQwMDA5QTgzRjkyQTdGOTdGOEY5N0Q2NzU1RTBGQ0Q0MTRFODI3Ci06MTA1RDUwMDA0OUQ2QUY2QkVDNzVCMzZBMERDOTNERjNGN0QzMkU3QjEzCi06MTA1RDYwMDA5MkY3RDM0N0Y4NzYyMjNCN0JFRDRDMjRCRjMwQkUyQjE1Ci06MTA1RDcwMDBBOUJGRUYxNTVEQ0IxQzQxRjQ4MUM5QjU4RkNFNzU1OTE0Ci06MTA1RDgwMDAyMkFCQTlCRTFGOThEQzFDOEZGMTkxRUVBMUZEODI4Qjg2Ci06MTA1RDkwMDBFRjE2RjU5MTAwOENDRjg3MjNFNTY3Q0M5NDk3NzZBMjE4Ci06MTA1REEwMDBDN0VFNUIxMjk3RTNCOEU5NjlGQ0ExMEFDRkRBRUZBMTZECi06MTA1REIwMDBDQTlBQTdGRDdFODZGQTE3QUJDRjU3N0Y2RUIyQkMxRDdECi06MTA1REMwMDBBMkY5OTdBNDdFN0VEMkU3MUZDMDEyOTlGN0NCOTMzODMxCi06MTA1REQwMDA4M0I2ODc2NEUwNzUzQ0FBRUZGNTdFQTZGQzQ4N0JDOEQ1Ci06MTA1REUwMDBGRjlEMTkwNjk1Rjg1Q0VEQ0ZEMEY0N0ZBNkVCOEJDMTMzCi06MTA1REYwMDA1MTFERjY5QjM1QjlGOUY2MjdGNDM5RkM4QkM5NzE4QTI4Ci06MTA1RTAwMDBFRUJERjJBNDAwNEE4MkRGQUI4MkE5QTAyNEY4NUQxOTlFCi06MTA1RTEwMDBDQTMxRTBGNkM4NjI4MzdDRjU3OEE5ODE1RjMzQjFDMkVDCi06MTA1RTIwMDBDMDVGNzNCRENBODBCRjE0NUQ2NzkwNUZGRjZCQkQwMTJCCi06MTA1RTMwMDBERjMwQkRDNTIwQkZGMUNGNkQwNjNDRDZCRjc1NThCOTY4Ci06MTA1RTQwMDA4OUU3MzY0OUFGMUJFNDBBM0I4RDdFMTVGNTE4RkQyQTFDCi06MTA1RTUwMDBFRTM1RkExNUQzNUJFMjM3RkFCN0FDREZFODVGNEVGNjAyCi06MTA1RTYwMDA4MzVDODVERUExRkZGQzkxNDlGQjYwMjAzQ0MzRjMzNEQ5Ci06MTA1RTcwMDAzNTlEMDIxMzM0NDdDNEE4QjYxRkMyNjZCRTE3QTZGMEVDCi06MTA1RTgwMDBGRkUyQTI4NDNDMkNBN0Q3M0ZEQTE5MDkyRkIzRDJCOTdECi06MTA1RTkwMDAwRjlEMzYyQkJEREIyRTUxMEQ2MDNFRkUwNUQ3NzYyRUI1Ci06MTA1RUEwMDAxN0UwMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECi06MTA1RUIwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkUzRTM2NjYwRjg1MTVDCi06MTA1RUMwMDAwRkMxRDNCODE4MTgzNjcyMjFGODQzMDFCNzMzNDM2OEFECi06MTA1RUQwMDAzRTE2MDYwNjAxMjA3RUM3QzhDMEYwOUU5MTA0MzMzOEU2Ci06MTA1RUUwMDAxMEVDN0UyMEJCMEE4ODI3NzE1MENGN0Q0MzExMkZFNTJGCi06MTA1RUYwMDBBMTlGNUQ1RkEwNzYzRDE1MTg3ODdGODNCMDgzMTAwMzY2Ci06MTA1RjAwMDA4MzlCMzAwMzgzQjQwODg0QkY1RjA0NTVERTUxMDhDMTBFCi06MTA1RjEwMDA3RTJFNDE5OTVEOUY4MUZBMDE4REVCQkIzMTgwMDMwMDlDCi06MTA1RjIwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEJGCi06MTA1RjMwMDAwMEZGRTU3RDBCN0M1NEQ1QjVGNzNFNzMxRTMzOTM5OTc2Ci06MTA1RjQwMDA0QzI2MEY0MjQyMDA0RjA4MjAyQTg0MjE0MDA4ODgzOEZFCi06MTA1RjUwMDAwOTkwMDY4RDlBMDgwODg4Q0EwMDAxNDI0ODMyMTFBOUEyCi06MTA1RjYwMDA5NzVFNkQ2NzIyMTREMTZBMUIyRDZEQTM5N0RBMDE0MUVDCi06MTA1RjcwMDBBMzQ1MEQxOEU4NDAwMzFENEM0MUJDNUE4RDBBNEE1QkVECi06MTA1RjgwMDBCNTQxMzEzQzBBNDk3OEU4QzVENjVCRUY1RTZCRUYzMzJCCi06MTA1RjkwMDA5OTczNjY0MkEyQjZERkZEQkVERjE3N0ZGRTM2RkJFQ0NCCi06MTA1RkEwMDA3M0Y2NUU3QkFERkY1QTdCRURCNTFGMjM1OUM2MTNEMzQ1Ci06MTA1RkIwMDAxNTg0N0MwNTdGRDcxMzcyNDgyNDg0RjRFQjRFM0IwQjg5Ci06MTA1RkMwMDA2ODNBOEUxMDdGOEUzOUIwNTUyMDI0QjRFRkVGRUQyNDVGCi06MTA1RkQwMDA4NTkwQjM0REIzNTU3MzI2MjFGQkM3OTg0M0Q3RDNGMkIxCi06MTA1RkUwMDBCMzgxRkM4MDk5OTY0RkRENzlDNDIxRDE3Q0Q1NEU1MTg3Ci06MTA1RkYwMDA4MjcyRDMzRTJCN0VERkIxNTEwODQwREU2QjZFRkRGMTI1Ci06MTA2MDAwMDBCNTM0REZCNTUzMjQ5QjY5RDUyNDY0Mzc5MTU0NDJEQTAzCi06MTA2MDEwMDAyRDg0RkRBOUYxOTg1RjZBNjVEOUFBNERGQkVGODJGNjQwCi06MTA2MDIwMDBDQTgzNjY2MkE1REZCNzM3ODk2RUM4QUZEQzJBMDQwODY5Ci06MTA2MDMwMDA2REFGNkFGNzgzQ0EwMDVBREZCMjgwRDA2ODU1Njk3RUI3Ci06MTA2MDQwMDBFQjYzOEExQTRGQzgwM0ZCRkVFQzY4QjMxMzcyREE2NzdFCi06MTA2MDUwMDAyMUFBODJGRDI4NkYxQzQ5NDg0NTYwN0JFMTAwRkE3RDNBCi06MTA2MDYwMDBDNTM2QzE2NUEyRjU1NzZDM0NENzAxRjQ1NTM0QzlDMzk4Ci06MTA2MDcwMDA0NDVBREY4QTA2MUI1MTQ3QjBCNkJGMjJEMDVFQ0IwNzE5Ci06MTA2MDgwMDBEOERFNEU3OTI4QjQ1N0ZFRTUzRDBBMTFBMTlGQjIxQjE4Ci06MTA2MDkwMDBCRUFCQTI3NDQwQkZCNTc2NEZGQkVBQjEzRDhEOUY1NUI0Ci06MTA2MEEwMDBDRkQxRjZFODdCRDUyRjBBMkVFODYyQjU4OTc4ODA4RUFECi06MTA2MEIwMDA4RURERDZCOTRGREJBMTdGQjVDQUYwRjhDODdFMkNEQ0U3Ci06MTA2MEMwMDAwNUZEQTgwODZDNTIwQUVENDBERjI2NjVFOUM4RUVGQTI2Ci06MTA2MEQwMDA1NjM0RkM4NzlFQkVGQUFDRkU5RTg4NzI2MzdBREE0NzFECi06MTA2MEUwMDA1OTNBQkMzQjVGNDE4OEJCOTFENjRCQTQ4MDUyM0FBQTM3Ci06MTA2MEYwMDBGQkY5MDc0MjIyMjFFM0ExN0U5MUE4OTZFRUZBQTlFNERBCi06MTA2MTAwMDAxMTA3RkUyM0Y0OUY5NDBGRkVCREYxODFBRDk5REQ3MjVFCi06MTA2MTEwMDA1QkU5MDQ5OTc1Q0JFREJDOTNDQjUxRUFDQThEQUM1RkJBCi06MTA2MTIwMDA0QjdGMENGMkEwRjRENEY5OUM5ODNFRUU0QkMzNzQ4M0UxCi06MTA2MTMwMDA0RjQ1QkVGRERDMzcwMkQzN0E5RjBCOUYzRkU5Q0JDM0FGCi06MTA2MTQwMDA3NEEzQ0Y4REU5NTNCRTIyNEMwM0JFMTI3QzZGQjM2Rjk0Ci06MTA2MTUwMDAyRUE2NUI3QzFFN0NGRThDQUYxQ0QzMDY1RjBEM0U3RkEzCi06MTA2MTYwMDBERUI3MUFEMzZEM0UzRjNFN0ZEMUI3MUVEMzQ2NUYxRENCCi06MTA2MTcwMDBBNjNCNDA1RTM0NkRGMjA1RjBCRDVEQkUwNjRDODNCRUFECi06MTA2MTgwMDA0NjdDQkVDNzE3QzRGNDExQ0U0N0M3NjQ5MjJGNTEzRTU4Ci06MTA2MTkwMDAzOERDQzQ0OUM1NEU5MjhBRERGOTMyQ0QyNzk1QjA3Q0YyCi06MTA2MUEwMDBFQTFERkU3Qzg1RTY1MzNEMzQ0RkY5MzJBMDMyOTQ2RkYwCi06MTA2MUIwMDBBNkY5MDEzNUFDN0NGMEZEQTRDMDQyRjM4M0ZEQUM3Q0I0Ci06MTA2MUMwMDBDODIzRUUwMjJCQ0QwRkE5NjNFNUMzMzdGQTBCRTI2OEIzCi06MTA2MUQwMDA3RTc4ODA5NTVGQkQyRDU0NjBBM0Y5QUIxQjU5Nzk3NjBECi06MTA2MUUwMDAzMzk5NkFBN0Y5RUMxMENCRTdCQ0UxOUUxQTRGRjMzOTVCCi06MTA2MUYwMDBBRDJDOUZGQjgxN0ZBQTgzRTY3M0RCRDhGNzkzQ0UwNDk3Ci06MTA2MjAwMDA0NEQ1MUUyRDg3MURCMkJBOTg1MDU5NkRGNENGNzA0QkVFCi06MTA2MjEwMDAxMzY5NUU1MUVGMjEyRUNBMUZGRkFENkUyOTlERjI0MzE3Ci06MTA2MjIwMDA3NjYzNzlDODNGMUZDQjlCMTQzNzk2QkZFMzJGQzNGQzFGCi06MTA2MjMwMDAyRUQ5ODNFNUM3RkQ1NTJDQUY3OEIwRkM3M0ZGQkQ5ODEwCi06MTA2MjQwMDAwRkNBN0UyQ0I3RDRGQTU4NUVGMTYzRjk4MERBRjU1ODlDCi06MTA2MjUwMDBGRjFFMzk4MEU1MjM2QjFGQzNGMjNENEEwMENCMUY1RjUxCi06MTA2MjYwMDBGQkE0N0IxQUNEQUYxMTNDM0YwNzNDRDJCNDlDNjQwMTI4Ci06MTA2MjcwMDA5RTFBRDM0QTI4OUVENjA5NjQyRUUwRjcwNzAwM0E4QTcwCi06MTA2MjgwMDBDQjc1RTkwQUVBRTE4RTNGRTQzRTBERkE4QjdGMjk5MDU3Ci06MTA2MjkwMDA1RkZBQ0NDMzk5RjhGREFGQjAxRTk5RDYyM0Y2NUU0RkQ2Ci06MTA2MkEwMDBDRTlCNzlCQTdBNzJERTJDRDdFQTY5ODBGN0Q2NThGQjkyCi06MTA2MkIwMDA1NkNGOEUzNzI3RTlFOTc5QjM0MkFCNjczQkQyMTNERjdDCi06MTA2MkMwMDBCNzdFRTVCQzM1NTk0RkNGNUI5NTVBM0Q3QjkwOUVDNDU4Ci06MTA2MkQwMDBCRUQxRDM3NDQ0Q0Y5RkE2MjM2MUZFQjQyMDNERkRGQTA2Ci06MTA2MkUwMDA0NkNGQjhGN0Y0RkMxOUY3NUU5ODNGNkY2MDNERTk3RDQzCi06MTA2MkYwMDBBQkE3RTkzRDNEN0Y5QURFMEJGM0U3MDhGNjZCNTBERjc1Ci06MTA2MzAwMDBGQTM1RUU3RDNEN0ZDNkJEMUZFNkNGNDc0ODRGNjZERkJECi06MTA2MzEwMDBFQUQ5RjVBMTlFM0ZCQjNFMENGM0U3MDRENjMzQUM2RjQwCi06MTA2MzIwMDBGRENBRkQ0OENGOUZEQzhGQzJGQ0U5QzI3QUFFRUE1QkIyCi06MTA2MzMwMDAzREJCM0VEMkYzNjdENzQ3NjFGRTdDODFGNThDRUE1QkJCCi06MTA2MzQwMDBCRjcyRkZBMkU3NEZFRTVGQzJGQzMxMDk1MENGOThCRThCCi06MTA2MzUwMDBEMTEzRkM1NENGOUZFMEE3NjFGRUQ4QjA5RUYxN0RBMzdFCi06MTA2MzYwMDAyN0FGNURDRjlGQkNGNjMwN0Y1MjA0OTBGQkM0QkVENUYzCi06MTA2MzcwMDAxMzZDRDdGMzI3RDgxRUU2Q0YyMEFDRTdCQUJFRjUyQkI3Ci06MTA2MzgwMDBFRjg0OUUzRjc5MjdDMkZDMTk4RUZEQ0FBNzdBMEZGNENECi06MTA2MzkwMDAxMDVBNEY3Q0NGRjVFQzM5QUJFN0NGOUVCMzYxRkU4QzQyCi06MTA2M0EwMDBDNjdBQTZEMzdBQjI3QUFGNjc1Mjg3OUUzRjkzM0FDMjMzCi06MTA2M0IwMDBGQ0M5QzM3QTY2RjRBRDlFM0QxRDdBRkVFQ0U5MDhGMzk0Ci06MTA2M0MwMDAyNzFGRjk3MzUzREZGQTM1QTk1M0NGOUY0OTlEOEMzRjlGCi06MTA2M0QwMDA2MzBGRDc0Qzc1RDA3MjNBMTZCQTQ0RkFDOUI1NjdEQzY4Ci06MTA2M0UwMDA2RTgxRTY0NTI3Q0I4QjRFMTcwMUJGNDRENEZDMEREMkZFCi06MTA2M0YwMDBFQTE2RTlGN0Y2NkQ4OTM5MEY5MzQ4QkZBM0EwMTRGQTlFCi06MTA2NDAwMDAxNTRGQkRCMTQ4QkYyMzIxMkY0RUU3RTcyNEJBOTM3NDNGCi06MTA2NDEwMDBGOUU0QTIwMUJBRjdGQjk1MENEMTk1Rjc5RjdCQjVBRUQ1Ci06MTA2NDIwMDAzQ0REOTNBM0NCNjc5NDRGRDJCRDNGQThBNjQwOTdCRjU2Ci06MTA2NDMwMDA2MkY1MERCQUY3MzNGREI3RUFGMjU5RUI2RkQ3QkQzRkZFCi06MTA2NDQwMDBBQzZFOTFBRUZDQ0FGQTBBNURGOTU1ODE5NUJBRkMzNTdECi06MTA2NDUwMDAwREZGQUU3QjdGNTRFMzAzQkFGMkQxQzE4Nzc1RTU2M0NDCi06MTA2NDYwMDA0MjhGRUJGMjYzMEYzREE5N0I3RjdDRUI2NjVERjk4NDg1Ci06MTA2NDcwMDBBM0NGRUJDQTI3QjZFREQwRTVBRjNEQjlDN0UwRTdEOTZBCi06MTA2NDgwMDA5REVERDdGMEJDMDhCODI3Q0NFRjRGNTdEMERGMEJDNTM4Ci06MTA2NDkwMDAyQjk4NTcwNkQ4RDE4RkRGMUZCRjU0M0Q0RUU1QUJCQ0JDCi06MTA2NEEwMDBCMjU4NERBMUYyMDU5OTEyM0FBRUU3MEYyOEJGQjI4RDRFCi06MTA2NEIwMDAzRUJGNzc5MkU3NEEyNzdEN0VBRkUyMTlFRDhDRTE5RkUwCi06MTA2NEMwMDA1MjNDMDgyNDBENTJENTA0QTlCMUZDNDE5OUUxQjEyMEY4Ci06MTA2NEQwMDBFM0NCRTFDN0U4Rjc1RTUzRDdGMDQ0OUFFRjJGRTZENzU2Ci06MTA2NEUwMDAwMzVFOUUxMjRDODhEMzM4OTFENEMwN0I3MTY2ODJGM0QwCi06MTA2NEYwMDA4MjA3MzM3MzlGRjY0N0UwNzVGRDIwQUE4NzQyNzdCRDc4Ci06MTA2NTAwMDBFQjY1NEYxQUY4MTk5QjZCREZGNjgzMUZCMjZFMTBFRDI3Ci06MTA2NTEwMDBENzAwNDI5RTE2REUwRUY5ODdEMkVGMDcyRDRERjNEMDNECi06MTA2NTIwMDBGQUNDMEFGNUQzMjNEQjU3NjhGQjIzQjFGRDA2NjhGRkRECi06MTA2NTMwMDBDNTFFREEzNzBGQzlEM0I1NkYxOTVDQUU2QkRGQTJEMEI5Ci06MTA2NTQwMDBGNjlERDQxRkE4RkQyMzZGOUYwQTYxMTIyMTJGMEI3Rjk4Ci06MTA2NTUwMDBDNEY2Q0Q4M0NCQjFGRDA3MTUzQTVGODk2QzNGMkVEQ0M1Ci06MTA2NTYwMDA3RTEwRjQ3NzFGQjQzRjNFNDZGRjg3NENEMkY3N0Y3MDEyCi06MTA2NTcwMDA4NUJFRkYwQUVCRkYyQkI1Qzc3OEZCNzFEOEZGMTZFMThDCi06MTA2NTgwMDAxOEVCRkZFMDBBRDY3RjMzQUIzN0RDQkUyM0NDRkY0M0VBCi06MTA2NTkwMDBEMEZGMzc3QkVBN0ZENjY0N0RGRkFGQThENEY3REZDQzhFCi06MTA2NUEwMDBEQTdGQTdGNjE0NkZERjhFRURCRjJCOUM2MkZEQkZBMkQyCi06MTA2NUIwMDAxMkRCNTdDQzFFMTdFMDQ3Qzk4OEFCMDlEMEY2Qzk0MDlCCi06MTA2NUMwMDA2QTk4RkEwMzVDNjgzQjkwOEU0OEEyQTAyNkU0NTE2MTY5Ci06MTA2NUQwMDAwOEQyNzE2RjFDQzNEQkU3NzExNDZGNjg2RkZDRjg5QzA1Ci06MTA2NUUwMDAwNEE4NjVDQkE1RjMyRThFRjUxNURCRjIxNUIwNEI1ODNDCi06MTA2NUYwMDA0RUU3MkI0QjM4QTk2NTQxMTFGMTREMzY5ODAzQzMyODVFCi06MTA2NjAwMDBCRDFENDFEMTBGRjlCMjBERDcwNUMwRkU3OUNENjQ0MTUyCi06MTA2NjEwMDAwOTdDMjc5MTEwM0NGRkY0NjdBMzM2NDdGNkNCOTgyRUYwCi06MTA2NjIwMDBBOTkzREJEQjIyRjQyRDNDOEYyQTIwMjM2QTI4N0REMzFCCi06MTA2NjMwMDAwMTA0RTNCQkYzMUZEMzc5MTBBMUYzOEIwRkU4M0M4Mzc0Ci06MTA2NjQwMDA1MDQ4N0UyMkIzRjYzRUEyRjMyNUM4QjdEMUY5MTI5NDgyCi06MTA2NjUwMDAxMzUyOEJERkQxRUEwRUE3NTFGQTRCMzhGRDFGNEI0QzdBCi06MTA2NjYwMDA1RjNGQkU0MzA4RjhBOTdFN0VGRUJEMzEzODRGNURCMDY2Ci06MTA2NjcwMDBEQTQ2OTlERTREQzc0MjdGQjIyRTRGRkJFNTA3Mzk3NUVBCi06MTA2NjgwMDBFRDM2MDczNjBCQzg1RjE1Rjg1NThBQUE0OUM4RTJGNUZBCi06MTA2NjkwMDAxOTk0RDdEREVGQkY0RkM1OUU0RTU5N0YxQjcxQ0JGREJGCi06MTA2NkEwMDBFOUZCNzdBRTEyMDYzOTY5QkJCM0RERTYxQzM2NEVCODlFCi06MTA2NkIwMDAzMzRDQThENzI0QzM5NDQ3QzhBRDRENjM2NDVBMDMyOTBCCi06MTA2NkMwMDA3NUNCMUZCNzQ1QjQzQkIzNDg5RjlGNURBMkNGNzdDODNBCi06MTA2NkQwMDA2RUQ5NDRFOUVBMjgxNUM4MjY1QUVGOUNCOUZBNzJBRDdBCi06MTA2NkUwMDAxREJCMjk4OUM5OTlCNzU3OTJDQUU4OUIwMzY5MEUzQzFCCi06MTA2NkYwMDA3NkEyOUNFNzNBRDlCNzFBM0RERUM1MzI5REMyODIzQ0VDCi06MTA2NzAwMDBGREZEMDhDOEQ1OUY4MkVGRERFRTY0RkQzNkQyM0I1NzE0Ci06MTA2NzEwMDBCNkI4NEI2ODNGRTcyRTE0MDM4MDZGMjNGRDdGREE2NzFFCi06MTA2NzIwMDA3MzlCQjI2OUJBRkVBNzMyMzE0NUY3Qzc0OEZGM0M4RjY5Ci06MTA2NzMwMDBCMTNGOEQzMjhDQzNGM0NCOERDRjE5NkVEQUI5RkMzRkVDCi06MTA2NzQwMDAwNjdDRDBGNDA0RTA4M0QyN0Y5Q0UzQTNEQkFFMzI3Q0YyCi06MTA2NzUwMDA3OENEOUU5QjAxMEY1RDRGODgwNEU1Q0FGMTcyMUJDNzdGCi06MTA2NzYwMDBDQjkyM0EzRDJFMDhGMUM4MjBDNzY1NzM4NTlDODcyM0RDCi06MTA2NzcwMDA3MDMwODdFMzYwNTlCRDFFMzc3NzEyQkY5QzFFNDMyRUQxCi06MTA2NzgwMDBGMzM2NkNGQTYxOUExQUREQkYwRjM5NkVFNjNGQjIxRjFECi06MTA2NzkwMDBGOTEzREQ0RjI2QTdCQkI4OUNFRUFDRDE5N0RGQzZFNTU5Ci06MTA2N0EwMDA3QTI3OTdFQkRDRkFDNzBFNTBGMzQxNkU1NzAzMzJFOEI1Ci06MTA2N0IwMDBCQkY3M0U0RDlFNkQzQTc5N0FCODNDOEQ3NERFQzVFNUU3Ci06MTA2N0MwMDA3OUQ3Rjc5ODNDOERGNEI2NzE3OUI2RDU1RjkwQzk5MEJBCi06MTA2N0QwMDA2ODdBOERGNDJENTgxREQ1MUYwNUU0QjlEMDFGNUI5RTM2Ci06MTA2N0UwMDBERTYwN0VGMkYxODhFNzU1OEQzMzkyOEY0N0U4RDk4QUQzCi06MTA2N0YwMDA4NjUyNUQ3RTc5NjA5RUVFRkQ2NUY1MEI3NUU1NEJFQTkwCi06MTA2ODAwMDA5NkVCQ0ExN0FGQkY1Qjk3NUZFOEZGOUVFRUZEMDVBQjQ3Ci06MTA2ODEwMDA2Qjc1RTU3N0Q2M0NBNDJCOUY1RkZFOTgyRTNGQ0ZGMzk4Ci06MTA2ODIwMDA4NEVFRkQzOTczMzdFOUNBNjc5NzNDQTcyQjlGNTlCNEFCCi06MTA2ODMwMDA1RDk3MkY3NUVGRDZCRDZGREE3N0Q1MkQ4MENGMzc4RTY4Ci06MTA2ODQwMDA4ODA0RkM4OUNGNUMyNzMwMkVGODk5NEI3NkMxM0JDNzcyCi06MTA2ODUwMDA3RDJBRTJCQUREMzcwMkQzOTMzRTE3RTJGRUI0MkYwRjUyCi06MTA2ODYwMDBEMzhFNjA4QjFEQzYwOTNBMkUyRTI1ODlENENDOUI2RTAzCi06MTA2ODcwMDBBRTVEM0YxMEM2Njk4MkUzRTkxNkQzQUM1QUZGNjQ0MkFECi06MTA2ODgwMDA3RTZENTI5MURGQzVGNTBBMDk4RDI1NDQ4MEMxODZEM0ZFCi06MTA2ODkwMDBEMTI1NDY5NEI3RjU1MjVFNEYwRDdGNzI3NDc5NzE1QkM2Ci06MTA2OEEwMDBFQ0U3REVDNzE3NUVFMThDMTE3N0U5RDY1MzkyMDE3RUUzCi06MTA2OEIwMDA0RjI3RjdCQjhERTU5NTAyMjk4OTdDNEVDODAzQThEN0UxCi06MTA2OEMwMDBFN0Y4Qjg1QkE5MzBGREFGREM5MTVFNDAxQzkwMEYwRDdFCi06MTA2OEQwMDBBRkI5NUM3QjhEMTRFNEZEMDEyNzU5M0EzRDVFNTY3RkNDCi06MTA2OEUwMDA4RENFQkUxMzg4Q0FGNjAzQkM4REQ1M0Q1RkQxNzBBRDg5Ci06MTA2OEYwMDBFRUJCMzNGQjQ1QTRCQjFBNkNDNTQ0MTgxNjRCNUUzNzgwCi06MTA2OTAwMDA4MTFEMEVCNTBDOUUzOTBBRTg3NEJGNjE4MjcxMkFEOEM4Ci06MTA2OTEwMDAwRkZEQzIzM0JFQTJFNEUzMTJDOEFGMDREMzkzQkVCOUU1Ci06MTA2OTIwMDA5OEI2RkIzQzk4MUVGNzk1NjNGQUIxQUYwNkQzMzZERkY1Ci06MTA2OTMwMDA2QTRDM0ZGMkY5MzFGREMwQjcxRUQzM0ZGOUVBMzAzRDUyCi06MTA2OTQwMDBFQUFCQzdGNDNENUYwMEQzQzNCRTA2NENERkYxMzU2MjRFCi06MTA2OTUwMDBEQUVBMEI2MkRBRTE3MzYzQUFFOTVENkZCODNCQzlDNzkzCi06MTA2OTYwMDBFMUQzODBCRjE4MzhFQjc4NjA1NUVERkFDOUREMzgzQkNDCi06MTA2OTcwMDA2RkJBQUZENjNGQjA5QkNGQzVGNTY2OEU4NzU0MUQxRTRDCi06MTA2OTgwMDBCRTgwNjAzM0UyQUM5N0YyN0E5OUUzQjBBN0VGNjM5N0U5Ci06MTA2OTkwMDA3QjM3RkY2QkYwMzZERUM0RkNDQzZGOEFCNzZFM0M2NThDCi06MTA2OUEwMDAxOEYwOTRENTFCOUVGQTg5RTNCQkYxMzRERUU0NjQ3RUQzCi06MTA2OUIwMDAwRkM3RDM4RkEwMUYzMUU2MTUwNUUwODRGNDhCRjBENzA1Ci06MTA2OUMwMDBEQzM2MTZBN0U2RUIwOUQ0NTM2NTcxNkFERUY2MUFGQUNGCi06MTA2OUQwMDA2RTJCRkE3NTgxMTEzMDZFOUMxRkYxQjdFMTEwODczRjY1Ci06MTA2OUUwMDA3RkQ0NEMyNzdEM0RGN0NGODg5MzlFRjlFRUM2RjlDRDM1Ci06MTA2OUYwMDBEMjAwMURCQ0M2NDY5NzVCRTMxODVGQUQyNjUyNDRFODQzCi06MTA2QTAwMDBCOEY2RDBCMDY3NUM4QjQ2NjI1RTIyNDlGMDdEQzA1NTE3Ci06MTA2QTEwMDAxQTFGQTM1RUVBMkIwMzdGN0JFM0VCOUFGOENGQjNBMUE3Ci06MTA2QTIwMDBCRUY2MjdGRjlFMEJFOTc4MTNGMzk3RTM1QTQ0RjREQjk1Ci06MTA2QTMwMDA0OUU4NjkxN0YwMzczQzJFOTk1RDY5MTBERkVFMUFBNjE4Ci06MTA2QTQwMDAzOEQxNkYwOEQ4RjVGQ0YzRDM3QzZFMzdGRjFFQTIzQzFCCi06MTA2QTUwMDA2QUM1NzFCNzJFMERGOTM3RjRGM0UxRTk3REUwNUY2Rjk4Ci06MTA2QTYwMDBGNkJEMzc3RTJFMEEwQ0Y4OTdGMEIzMzdGQkQ4OUI1RDQ2Ci06MTA2QTcwMDAyNDZFRjVDNTIwRUQ3RkU3QkU1MTM5MEZBQjYwMDc4NzY3Ci06MTA2QTgwMDBCMDc5NUEwRkZDRDZENkE1OENGNDdDRkY2QkUyQjgzM0Y0Ci06MTA2QTkwMDA1NUMzNzFFQjYwNDJEQkY5ODhFQkNCRjlBNjJCMTM0MEIxCi06MTA2QUEwMDAyRUI0MUU5QzFGNzRFREU0N0U3RTJGNzIzRDlCQTlBRjE5Ci06MTA2QUIwMDBDRjZCQUMyRjQxMjFDMjY4REE2RUJDQTI5MDA0NDI2QTRGCi06MTA2QUMwMDA0NENGQTMyMkNFNkY1QzZEN0U4ODFCRUNCM0I5RDZBOEYxCi06MTA2QUQwMDAzMDZGM0NGRDY2NDg4NTFBRjVGMTg1RjM4NzlFNzZDMEQ4Ci06MTA2QUUwMDAzQzZDNjU5QUM5NzkzQzg2MUNCNUI0QUEzMUQzNjk4RkQwCi06MTA2QUYwMDA5Q0FGMDRGNUY5RjM3NTQyNTEyM0NFRTdENDg0NTlBMzMyCi06MTA2QjAwMDA2MDlDNzEzQThGMEYwNUJCOUY4NkE5NTZDRkNBMzRDNUNBCi06MTA2QjEwMDA3OTlDREFEREQzMEQ1OTA5NkNGRTE3NjBGNjY0NUIyMkFGCi06MTA2QjIwMDBEQTlCRDMzRTBCQkVGRkNGQTZBN0E3N0EzNDdBMDg2OUJCCi06MTA2QjMwMDAyMjlGNThDMDlFRDNCMkFDOUVERkVGNTExRkE0OEIwQTk4Ci06MTA2QjQwMDBDNDM3NDlCM0ZDMzlDQzM3QURGNEZGQUY4NjQwQkQxMjMyCi06MTA2QjUwMDBFNkI1N0FCRDhEQTJERjNDMUE5RTZGRDNCNTQ3QkY1MzExCi06MTA2QjYwMDBCNUI1NTdGOEFFNjdCRDkzNDhCQjg2N0IyQUJGNTdGOUNBCi06MTA2QjcwMDBGQUYwOEEwNkFCNTNFRkM3MjZFQUYyREU2MEJBNTNFN0IzCi06MTA2QjgwMDBEN0MyM0ZDMDcxQUYxMTI0QzA1RjI1ODc1RkE3NjQ1Rjg0Ci06MTA2QjkwMDAwRjc4REEwQ0MxNDM5OEJGMDhFQ0JEMkE0QjlCRTI1MTM5Ci06MTA2QkEwMDA1MTVENUEwMTlGOEJGMjM0RkNBQjczRkU0Q0VERDRBOUJFCi06MTA2QkIwMDBENzY1MDI3QTQ2QkVBNDU0RTVGMkE5MjBFMkNENDQ0QzQyCi06MTA2QkMwMDAzNEJGOThCRkJEQTg2OTQ1MzE4QzVCQTc0QzZDRkU1MEEzCi06MTA2QkQwMDA0NjRBMUMzMDNGMkUyNzc1QjkxMDRGM0Q0QjRDNDVBMEZGCi06MTA2QkUwMDA5RjY3QzkzQjhFQjExMUZBNzg0RTU0QjBEMkM1RUJGNTEwCi06MTA2QkYwMDA3RTNDOURERkVCRjJDQkVBRjVGOUE1RTRENjU0NTgwN0NECi06MTA2QzAwMDA1RkJBNDEyNjAxMDFFQzg2QkVGQzk4RThDNDdBOTc5MUYwCi06MTA2QzEwMDA5QTc1MzA2RUZGOUNDN0JCMTYzOTg5OTQ0MUU5QUJGQTZGCi06MTA2QzIwMDBDRDJGNzMxNzUyM0EyRTg5NkNGQ0Q1RDY3MTk3MjczMTI4Ci06MTA2QzMwMDBGQTJCNjYwNTE0Mzc3REZGOTNBNkIxQjc1MTBCNDRCRkZECi06MTA2QzQwMDAwRkFDODM3NTZEN0YyOTcxNkQyNUQxRjJGQkJBRjQxQkYyCi06MTA2QzUwMDBFOUQ1RkM4MUE4RjU2NDRFNDc0QTgzRTAwRUM0QjA2M0QxCi06MTA2QzYwMDA4QTI0MzAzREUzRjZFRTZBQzlBOThCODNFNDQyM0UyMkQyCi06MTA2QzcwMDAwRUYyOERGMTk0NDI3NDc4REEyQzdBMDY0QkUzMTk3RTg5Ci06MTA2QzgwMDAwMDBGODJENEE1NzhCRTRERkQ2OTUxRjU1RjJERjVGQjRGCi06MTA2QzkwMDAyN0Q2M0Y5MEQ2OUZBQkFCM0ZGNzlGNEFGRkQwMjhGQTRECi06MTA2Q0EwMDAwQjYyRDU1RkY1OUIxNzc2RjlBOTNEQTk3OEU5NjcwRUM4Ci06MTA2Q0IwMDA0MkM3Qzk1MzUyNURBQThCQ0FCNTcyRUIwRjFENkU5QUJCCi06MTA2Q0MwMDA5RTk0RkMwRUMwRUJBOTgwNTgxNDRCREVBQkMzRjI3NjQ5Ci06MTA2Q0QwMDBEQjA1ODhCQkMxM0Y2OUZEQTc5RkZGMTFDNjIzM0VERkNGCi06MTA2Q0UwMDAyQTNCMzE5RUQ2NjAwRTk5QTkzRTU2MzcyRDJGMjZEOUM0Ci06MTA2Q0YwMDA5ODNGQzZGMjBGOUUxMzIxMUZENEUzQUZFMkQ5OUZBNUEwCi06MTA2RDAwMDBDMkZFMEE4QTE0MUU1RjBBQTEzRjVCQkRFNUQzNDIxQzg2Ci06MTA2RDEwMDA5RjQ4MTdFQTkxRjEzQjY4RkY1MjEyREFCRjg1NEE0MjU5Ci06MTA2RDIwMDA3NDM5QTUxM0UzMDQ1RUNFMTc2RkQzOEZDRTg5MEVGOEE2Ci06MTA2RDMwMDA1NzFCQ0VERjhERUY5NzczRkY3NEI5MTQ5RkQyNkVBM0VDCi06MTA2RDQwMDBGRjlFNDAyNjgwM0RENEY4NDEwMkNDM0Y1REYzREMyRjBFCi06MTA2RDUwMDBCMjhGNTE3QUNFNkM3OUREMjE0NEYwNDlEM0EzRjM4RDAzCi06MTA2RDYwMDA4QjdGQjU0N0VERDlERTc2NTAzRDhCRjQ4M0I0RjE0QTg1Ci06MTA2RDcwMDAwRDcyQkZCQTk5QTU5NTcyQzg3MTJERDVGQkNBNERCMkQ3Ci06MTA2RDgwMDBDQjRGMUY1N0JFRjBGNDMzNEY0MjFDRjM4RjY2RDczMDAyCi06MTA2RDkwMDA1QUZGOEExNzBFQkMzNzg5RTY1NzZDOTc1MzhBNTkzN0MyCi06MTA2REEwMDBFQzQyNkFCNzVDQkNGNEZGRDUzOURENzJBODc4Rjk4MDkzCi06MTA2REIwMDBBMjhFNjJDRkVGNEZFQTk2Qzc4QUVERkIxNTMyMkE5QTcwCi06MTA2REMwMDAxRjUzMUJGNzJCNkRGNjE4NzI2OTNDNTYwODdFQzI5QTRBCi06MTA2REQwMDBFN0ZFNEI4MUY4RTJBOTdEMDJFOTlGMTk4MzlGOUIwRTk0Ci06MTA2REUwMDBBMDFGMDA3QzQyMzk3MjM5ODVFNTY2NzhERjRCRTUwMkU5Ci06MTA2REYwMDBGNjVBOTM5M0IxRkM0NjZFNEZBMDNFNzUyNEUyRjlDNTU2Ci06MTA2RTAwMDAzREI0RkRGMjNGOTk1REQwRkZGMjE3RUY3MTQwM0Y0RTY4Ci06MTA2RTEwMDA0ODM1MENEN0JGRkM2MTJBRDhBRjcyRDk5RkVBQzQ5NDE5Ci06MTA2RTIwMDAzRDJGN0ZFQUJCODhCNzY1NkY3RjM3MTVFMzQ5QzQ5RDY3Ci06MTA2RTMwMDA2RUMyQjFDNzlGMEVGRDVCQjI3MTM2RjY2RjI5RjEyMEFECi06MTA2RTQwMDBFRUNBN0YyOTk2MDQ2OEZBOTk0NDhBQjZDN0QwOEIwRTk5Ci06MTA2RTUwMDBBRTE3MjczNjUzNDc4Q0Y2RUYwNENDMUZDMTVFQkYyMzE1Ci06MTA2RTYwMDBFMkJFMkE0MkVFMjZBMEZGREZFNTdEQTExRTAyRTYzRjNDCi06MTA2RTcwMDBCMzMwMzkxRDkwNEM1Q0FGQThCNzE5ODlENzJEMEZCNjI4Ci06MTA2RTgwMDA4MjdDNEUwRjcyRjc4Nzc1MTYyRjkxRkM5QzFGQzI1NzlDCi06MTA2RTkwMDBCNDVFRjFFREU5RkQ5OTdDODgyQUU1RjJFRkU4MzgzRjMwCi06MTA2RUEwMDAxNTlFQzNGQkFEQjJEQjlBQURGQjhFN0M5NUQ5RERGRUEyCi06MTA2RUIwMDAyQURFM0VBNTNCMEVDNkU3MTNBOUIxRkRENTAxQjJBNjU5Ci06MTA2RUMwMDBGNzc0OUM4RUMwNTc4NDdFMzM3RERGRjIxMEQzNkY0REY0Ci06MTA2RUQwMDBERjAzQTU0NTUwN0VGMTMwRDMxRkY4MEVDNjNGNEE1NzU5Ci06MTA2RUUwMDBBODNGOTZFRjlGMjVBMDNEQTBGM0U2NTg3QUJENDVFNjYyCi06MTA2RUYwMDA3QUFEMkZENzcwNDJFOTk2ODQ4NDA4QkM0MEZENDlDODFBCi06MTA2RjAwMDA3RjVDNUY1OUJBODE3RTE3NjEyRkJERDA5RTIzQkEzRTQ4Ci06MTA2RjEwMDA0RDZGOTc3MUZEM0YwNUZBN0Y0REI3RkU5MzhENENFRjk2Ci06MTA2RjIwMDA3QkY2OUZGQzJDNkUyMzA3OUU3OTEyRjQ5NUVBQTc1RkVGCi06MTA2RjMwMDAwNTdEOTU0QkEwREY3RkRERDZGMkRFRUQ1NDRGRkZEQTA1Ci06MTA2RjQwMDBBOEU5QTlERTdFMUFGNUI0N0NDNzc4MTI0QjRGRkY2QTE4Ci06MTA2RjUwMDA3NzkxOTg3QTRBOUZDN0Q0NTM3QjFCRTJGOEZGOTRGRDQwCi06MTA2RjYwMDBENEY4OTcyOEVCRjlBN0Q5QzM5RUY4NjhCNDg3MkY0QUJECi06MTA2RjcwMDAyQUYyRDM2ODBGRTlERjYxOTIxQjhEM0YwRDc3MUFERThECi06MTA2RjgwMDAyQTdFNUQ3NTA1RDg5RDMwMkUzNURDODU3MUE5RTEyRUYwCi06MTA2RjkwMDAyQTdFQUJFMzlGQjFGQ0NGMTA2QkEyNzRDREI3RDQ0RjY4Ci06MTA2RkEwMDA4MTc5ODRBNThCRTBCQzJCN0Y5Njg4RUJBNjk2OEIwNDE5Ci06MTA2RkIwMDBGNUJFODBDOEI4NkZGMDdENTNDRDc4RjA0M0E3RkNGREQ3Ci06MTA2RkMwMDBCNkIzRjc1MjdBRTcxM0JGQ0NENkU1RUI2NEY0RUJCRjY4Ci06MTA2RkQwMDBGQ0VBQUJDOUI0M0ZCNzczRkVDRUE3RUNCRTg5Q0E2MzY3Ci06MTA2RkUwMDBBRTI0ODRFMjI4OURGMzI0RTI0RjQ4ODJGOEFDNDAzRTcwCi06MTA2RkYwMDA4RUEwNjM3RUI5M0UwRjdGNTM1MkJCRUJFOUVERkRBRjMwCi06MTA3MDAwMDAzQjBGRjlBNkU5REIzRUI2NzZGNTJFQTQ0M0IxNzkyOTBDCi06MTA3MDEwMDAxMjRGQTUyMDU3Q0EzRkVGMzgyMTMwMDRFRDUyOUI1NDQwCi06MTA3MDIwMDAxMjMxQUY3QTlDREI5REI3QTdDRDFDMEZGRTRCRkU5Q0E3Ci06MTA3MDMwMDA1MTA5MENFNzgzNzE3RUVCRTVGNkVCQkM1RjREMDBCQkJECi06MTA3MDQwMDA3RUJFMzkwQkU3QUZFNzBGMkQ4RThGQjU2RkIyODVFM0FDCi06MTA3MDUwMDBFQzAwNUY1N0U5QjQwQjc1MjJDNTdEMjdFOTQyRkZDNUY3Ci06MTA3MDYwMDA2RkI3OTJBRDMxRDZGREJFMkY5QkY4RTQ4M0NCOERGRTdBCi06MTA3MDcwMDA4OTU0NkU3MzM5MEVFN0QxNEYxMzcyMjJFNDM2RUJBNkIyCi06MTA3MDgwMDA1MzkyMjM1QTBFRjBGNzcxQzQzQ0VCREJGMjE3NzAwREVDCi06MTA3MDkwMDBGQzZEQjFCNjE1OTZDNDg4RDdGRDg0RjM2RkNBMkI1RjFCCi06MTA3MEEwMDBFMEZFRDU2OUNERjkxMkYwNzE5QTVERDRDNTM5MUVENEQwCi06MTA3MEIwMDBGNDc1MjQxOTA5NzQ0RDc5NjVGOUEzRTMyOThFQkQ4NzA4Ci06MTA3MEMwMDA0NDE3RUM1N0Y1MzY5RjUzM0MzMUU2QkI0NjdFNDJGREY0Ci06MTA3MEQwMDBFMDQ3MUU5MDlEQzhBRjIzNzJDOTEyRTBFQjkxRDk1NkNDCi06MTA3MEUwMDAwMkVCOTZFRjJBQUVBQTU4NzQ0RTM3QjM3OEM4M0M1MkRBCi06MTA3MEYwMDBGMkQ5MzhFMUZGM0VGRUU2Q0Y4OTBGMTU1MDdFOUNCN0VFCi06MTA3MTAwMDBCM0ZEQzBEMUY4NjM3QTdGREUyOTA0NkEwNUMwQTFDODQ3Ci06MTA3MTEwMDBGMjI5NDIwMEUyNjQ4NUM0RjNFODY0MDFGNUZERkE0ODBGCi06MTA3MTIwMDBGQjk1MUYyQzdEMDFGNkQ1NTQzNzBCNEUxMzJEQUY5NkQyCi06MTA3MTMwMDBEQTE0QzBCMTM3Qjg1RDAyRkZGQzQ2OTVCODMxREUyMEU1Ci06MTA3MTQwMDBENThDOUExNTExRDczQTIwNEJDOEFGOTZCRkREN0UyNzU0Ci06MTA3MTUwMDBGMEY3QzIyQzMzMDFCQURDMjNDRjM5NjBEQ0JGRDAzQzVFCi06MTA3MTYwMDAxNkY1QTBBNzdFRkRDMTQ3QTY0QzkzQTAxRTgyRjgzMDVECi06MTA3MTcwMDBFMkExMzBDNUE2Q0JDRjlFNEEwNkJBQThEQ0E2OThEQjEyCi06MTA3MTgwMDBFRTcxQzU5MERGMzI4NUUxQUNDRkY2Q0RGMkZGOTk3RDhGCi06MTA3MTkwMDA5QjRDRUQxQkMzQjUxQzY5REY0NjJCNTFGNkFEN0YyQzE0Ci06MTA3MUEwMDBGQkI2QjI1NkVEMEZCODU4QjkzN0FCM0ZDODc1RTU2QkIzCi06MTA3MUIwMDA0QkZBQzVCMjZGQUZGQUQ4RkNGRDM1QkUwRkJCNzMyMERBCi06MTA3MUMwMDBCNTZGQTMyM0VDREI0MDZBREY2MkM0NkREMzE1Q0RGRjNFCi06MTA3MUQwMDBFQ0M1QkU1OUZFNzdGNEVGNTVCMDZGMzFGQTNCNTJEMTkyCi06MTA3MUUwMDBEQkI3QTJFNjVBQjQ2RjQ1MDM0NUREN0VBODJDODVDRkY4Ci06MTA3MUYwMDBFNzdBQjQ2RjBCN0YzNjFCRjNCMkNCMTYwMzNGQzA1NzUxCi06MTA3MjAwMDBCMDZGQUY3MTNCMDdFRDgwOUQ1QkE0MzhCMUZEQkVEQTc2Ci06MTA3MjEwMDBCOUQyQkVEQUI5RkYyNTNFNkI3NjZFRTUyMDc2OUUyM0E1Ci06MTA3MjIwMDAxQTg3Q0NDRUFEQ0M2NDc2NkVFNTVFNjZFNzU2MEU2MzBCCi06MTA3MjMwMDA3NkNFNjhERjBBQTJFQzFCRkJCRTdBMDRGRDFFRTc4QjRDCi06MTA3MjQwMDA5OUJGQjg4Mzk2MTdDRjk1NUQxNkZBN0VCMUFBOUQ1RjU4Ci06MTA3MjUwMDBBODE5MUY2OUVGMTYyOTEyRjIzOUNBREVCOUNFRTEzOTMxCi06MTA3MjYwMDA5MERFRUNERDVCNjBFRjg2QTIxRDFCMEE3QTY0QzRDNzZBCi06MTA3MjcwMDAwRDQzNkRCQUZENzI0N0JFNjhGRkY1NEJBMDJGN0YxMDFFCi06MTA3MjgwMDA3MTlFRkRCRTg5Q0Q4QkY2N0REMTNFMTZGNDZFMzdBNzdCCi06MTA3MjkwMDBFNzUxODVDOUIzQzNFNzQ3N0IzQTc1MjREM0Y3QUE0M0JGCi06MTA3MkEwMDA3MTM4NEU1NDM3MDlBQ0JGRjcwQjAxMTVDNjgxQkY1RDZECi06MTA3MkIwMDBDMkY5RjI5RDdCRDk3Qzc5OEU5OUYxODNGQzlCQzhDRTczCi06MTA3MkMwMDA1RDUwMTYyQzhDQzBDM0RDNEIxNTE4RDc5QzJCMTEwQkIyCi06MTA3MkQwMDBGOEFGMEIwRURENzAwQUZDRDYwNTk3RDZBM0JGQkIwMDM2Ci06MTA3MkUwMDA5RUMzQkU4OUVENkRFQjMyNjhCQjc3MkUxNzcwREVBMUIxCi06MTA3MkYwMDBFREVGOTgxN0I2OTc3QTNGNzY3RTczRUM3RDFBNTMzODg4Ci06MTA3MzAwMDAzRDUzRUUxMzAyQjAyRkE3Qjc3RDEwMkY3MkZEOUIyM0M0Ci06MTA3MzEwMDBCNjIxQkZDODVCNjJDQ0Y4QTRGNjVFOTg0RjJFQzY5NzI0Ci06MTA3MzIwMDBBQTU1Q0M2RjBFRjM4OUYyNEQxNUEyRjk0NDI1NURCQzI4Ci06MTA3MzMwMDAzMEI1OUIyRjc3RUVBNEZENERFOUI5QkYxQURGQTJGNzU4Ci06MTA3MzQwMDBFMUI4NzEzRUIzODBCRkQ3MTMxRjM0M0U0N0Y1OUZGM0JBCi06MTA3MzUwMDA5REZBQTlCODlGQzdDODhGNDZDRENFNUM0MzQ2ODE1RUQzCi06MTA3MzYwMDBCRTZGRjIzQzNBMUU3MEY0OUY5NDJGOTRDRURCRTYwRDc0Ci06MTA3MzcwMDBEMzlERTdEOUM1Rjk3MjkzRTdEOEI0NTQxNUY4NDg2QTk0Ci06MTA3MzgwMDAwMDY3Qjc5NzZGM0Y5MDRBRkI3NzhCM0IzMzA3NDJFNjI2Ci06MTA3MzkwMDBCM0ZGQTY3ODIwRkVEMDYyRUQ0MjNCQThFMTMwQ0RDQzExCi06MTA3M0EwMDA3MEY4NTc4RUMzMjMwMzlDRDM3MEJDMDkwQTRFRDRBRjI4Ci06MTA3M0IwMDA5MEMxQ0VGMTdENjQ1RUNBNjdEMDVGNkY5MDhGNEYxNDJECi06MTA3M0MwMDA5RkEwOUY4NURBNzgwNTcyQTFGRkJDQTk5OUM5QzU1QjBBCi06MTA3M0QwMDAyM0EwNUM2RTI2NUQwNzgxRUZENTI5ODIyQjQ0QUIyQTYyCi06MTA3M0UwMDAwQzZFRkYyMUVDQjc3QUQ1NEE5RjgzOUU5NzBCQUVDREVBCi06MTA3M0YwMDA4QzFERjZGNEQ0OTgzODk2NjJFMTE4MzcwOTQ2OEM5QkI4Ci06MTA3NDAwMDAwQkUwQkQyNEQ4Qjc2OEM2RjZFRkZDMUVCMzQ3NDYzRjc1Ci06MTA3NDEwMDA2NThBQjlGNTA4RDAzM0U1REY2NEIyMDkxRTA2RTg3RjU2Ci06MTA3NDIwMDAxMTM4MzBGQTMxNTE3QUYwMzVGN0ZEQTQ3MkZCRkQyQTlDCi06MTA3NDMwMDBDOEMxMEVGQ0VFNTJDMDFGRjI4NkQ4RjhBMzk1N0IyNTdBCi06MTA3NDQwMDA3NTFBRjI0RDkzNDM5MDhFMkZFMzk4MUM2MEE5REZDODA0Ci06MTA3NDUwMDBFNzVCQjQzQ0UwMUZERTZGMTY2NEY4N0UwNjk1NEYzMkEyCi06MTA3NDYwMDAyRDlBNkFGQUUyQTA4Njc3QjMxQUNEMkY4ODI3QTQ0NzBGCi06MTA3NDcwMDBEODBEQjA2RjkxRUI5NkQ1QzFCNzkxNEYzN0FDQTJFRTU2Ci06MTA3NDgwMDA5OTFBQ0QyNzREM0U2MDA3MkZDN0FGMjhGRDA5RUU4RjEzCi06MTA3NDkwMDBCOTdGRUE5QkVBNEY5QTU5QUYzRkZCQUM1REFGOEY4NjRECi06MTA3NEEwMDAzOERBNUUwMUVEMEE2OTRFRDRDNTBGRjJDQzZDNUVENkI3Ci06MTA3NEIwMDA2MkY1MjBDRUJCNUU5MzVEOUJENTY4RkI3MzE1OTcwQjgxCi06MTA3NEMwMDBDQzU3MjJDRkVGNEQ4NTBFQzFCQUIxRDM0QTNFRDFGQTg3Ci06MTA3NEQwMDAzRDg0RTEyQzcyM0M3OEQ1RUE0MUY5RjU1NEZGMDQ1RTE1Ci06MTA3NEUwMDA3RjRGRkU5ODk2RkYwRUI0MDdGQjE2NTU3RDdCQzZGMUM1Ci06MTA3NEYwMDA0ODhCMjdGNUQ2QUY2OTY2NjYzRkJFNjlCRkI0NzZCRUQ2Ci06MTA3NTAwMDBFRUJBODM5N0I0NjJGQzRENUI3RkQ4MkM3QTdFMkVDMzkzCi06MTA3NTEwMDBGQ0I4NDhEMEFENzM1MENBNzFGREYyOUY1MEZGNThFNURBCi06MTA3NTIwMDAzMkY1NDNGQzI4NDRGOUZDRUFCNkE3MzE1RTdERjZGOTUyCi06MTA3NTMwMDA2MzM3ODNGRUFDRjhBRDQ4MkM1NDlGM0FCNkM1OTMxMDIwCi06MTA3NTQwMDBEQjA3QTI4MDlGNTBEMTI0RTI3QTE2OTE0MkI5MzMyM0ZGCi06MTA3NTUwMDBGQzBDNDJENjMwN0VCQzE0OEY3NkE3NjI4NzM5NTA0QzIzCi06MTA3NTYwMDBCRkFGRDhGNTQ5MzZDNEREM0ExRTYwRjZDRkZGM0NDNzQxCi06MTA3NTcwMDBBM0JGMkQxQkQ2RkIyQjI0QjY4RTZGOTRDRkJEMUM5RkIzCi06MTA3NTgwMDA2Nzc2REJFNjgyRkQxNjFBRDg3OUQ3OEFDNjM5QjIzOTEyCi06MTA3NTkwMDAyMkNFNTA2NTk2NTk1QzdCQjcwREY3NTlGQjlGMTM3MDRGCi06MTA3NUEwMDA5RjMyRDAxNzc5Q0U1MkRCRkY3OUU2Mzk2Njk3MkI4MjZFCi06MTA3NUIwMDA3MjAwQ0VDRDU2MzQ2Q0VGODAzODc4QzU1MTMzRkFBRkI3Ci06MTA3NUMwMDBERTg2NzMwQUY4QTc1MzVGN0EwMUZEMjM2RjUwRDRDNTk2Ci06MTA3NUQwMDA0MUEzRTI4RjBENjJDODBDRjFCM0E2MkFCNDAzMzQ3RjM1Ci06MTA3NUUwMDAwQ0YzOERCMUUzRjBCREM1Qzk1NkJDQjQ3Nzk3OUZCMjFCCi06MTA3NUYwMDA3MEM1Q0JDRjNBRjBEQzZDRUI1NjA3QzYyMTFCMkUxRkIzCi06MTA3NjAwMDBGRjhGOEEzNzM2M0U3NEQ5NzhFMzY5OEU4RjVGOTlGNTlDCi06MTA3NjEwMDBFQjM1QTQyMTE5RTM5MDk0QkVEQzkyMTg3MThCMzBFRTA3Ci06MTA3NjIwMDA1RkY4RUMyOTU4MEYzQkIzRTNBRjRGMDFCRDk1RkZCOEFFCi06MTA3NjMwMDBGMEQ0N0RFMDhGRURCMzNBNjFCQ0Y2M0U3RjA0RDcxMzAyCi06MTA3NjQwMDBCNEVGNzY3MzNERUY3OEVFNTk1Qzg3RTlGOEEzRDkwNTdFCi06MTA3NjUwMDBCNTc1RUMzRDMxMThENjIzM0FCNjdGOTEwQTcxREI1NUVBCi06MTA3NjYwMDA3QkE3RTMzQzZERDVDRUE5RkQ0OThDNzk4MDk2MDI2RTRGCi06MTA3NjcwMDAwMzdENTgwNzMyQ0FBQkE1QTk2NTMwRDA3OTk2Q0ExQkRECi06MTA3NjgwMDA1Q0I2NzBGQ0I4QjE4QUM1RTM1NTFFMzdERTE2N0JCRDBCCi06MTA3NjkwMDAyRDJBNEVEQzM0RjM5NkVCNjBGQzZFOTI1RDJBRTk0M0IyCi06MTA3NkEwMDBCQ0Y4MzA5NUUzRTgzRUM4NkZEQjQzOUFCRDhGMjlCRjM1Ci06MTA3NkIwMDBCM0YwMEYyQUE3RjcwREYyRkJBQzY5QzlBRjlFODRCMkY1Ci06MTA3NkMwMDBBNkU0MUVFM0M1QTEzRUYwNEQ1QkNGREI2Mjc2N0Y2Qzg2Ci06MTA3NkQwMDAwNkJERDlGMTZCOENDRjgzRENFODVDODM3NEJDRjBEOTM4Ci06MTA3NkUwMDA2MDg4QjM5Qzk0QkJFRUMyRkQzMzdCQ0RCODJGQUE2MkY5Ci06MTA3NkYwMDBFRkZCQTgzRjFEM0JERkM2RjUzMkMyRDdENTNBNDhGOEFECi06MTA3NzAwMDA4RkFEODNGMDM5OUM3NzRCM0M4QjMzNzNGRTQzMUM1QTBGCi06MTA3NzEwMDA3NUUwNzMxRTZGNjYzOEQ2RTJEMDNEQzU5RkQzMkQ2Q0UxCi06MTA3NzIwMDAzRjkxQjZDRTU4QjVFNUNGMEEzMUM0RjU4NTNDOTBEMzJDCi06MTA3NzMwMDBCMUNCQUU4QjZBN0M3MDAyMUYyNjQ0QUVBN0M0OEVGMzE5Ci06MTA3NzQwMDA4N0Q3RERCOEJDNDA3RUUwN0Y4NUQ3NEI2ODdFMjBDNEZDCi06MTA3NzUwMDBDRjAzQzJGQjI0ODYzREU4RDhDNEQ2NjEzQUU0RDhGQjA3Ci06MTA3NzYwMDAwRkI1RjU5NTE0OEI0MTRGMDM3RDVCNTdFOThERkVBRjQ3Ci06MTA3NzcwMDBDQjFGMTkyNjlCRTNBM0Y5NzRFNkNCRDg3NjdDODI0NTEwCi06MTA3NzgwMDBGODc2RkI2MTJBODVBOEY1N0YwQkFDQ0YzNzFENTM2MEQ3Ci06MTA3NzkwMDBGRUExOEQ2MzVBN0ZDRkYwNzlGMjk5RTc0NTNDRUZCMUI2Ci06MTA3N0EwMDBBRUIxMDVFREI4RDE1RTU0MTMxNjFGMzREMjNCODNEMzZFCi06MTA3N0IwMDA1QjFENjRFM0M0OTkxREYxMDEzQkFERTdDQzJCQkIxMTBDCi06MTA3N0MwMDBDRkQ1REI4RTI5N0U1QURGQzE4Njk3OTVCNjg4RkQ1MkNDCi06MTA3N0QwMDAzMDRFMDQyMkU4M0ZGM0UyRkU2Q0I2N0VDNEU2RTVDNjE2Ci06MTA3N0UwMDA3NkU2RjA3NkJDQ0RCMURCRjE2RTNCQTc2QjY3ODVCRjZCCi06MTA3N0YwMDA1MTYxRTc3NzJFREZERTY5QzkzRDA3RUEzQkREMkExM0Q5Ci06MTA3ODAwMDBEOEJGN0ZCQTUxMkMwQUM0Njg3RjkyNDVENkUyRjI0Q0E5Ci06MTA3ODEwMDA2RkU4Nzg4OUU3MURFM0Q5Rjk0NjMxNDk0MUZGN0E1NTg4Ci06MTA3ODIwMDA3Q0RFRDE4NDE0NDgxNTE1RTIxNDZCNkFEOUZFRDIzNTdBCi06MTA3ODMwMDBERjc3QTU4MUJDRDcyNERFODZFQjZENzUwNkZFM0E1MzUzCi06MTA3ODQwMDA5Q0Y5MTBCRjcwNEUyQjE5MDc3MDM1REE5QjQ0Qjc0OTZECi06MTA3ODUwMDA0N0ZGQUFGOEEyRkU3MDFFN0YyREY3Qzc4OEU0QzJGMzg3Ci06MTA3ODYwMDA5N0EyQTNCMDA4RkEyMzNBNEQ0RTZCOENGNTA1RDk1RTZBCi06MTA3ODcwMDA0MjNDMTE3QzkxOURGQUYzOTJFNENCQjEyQUQ0QTNFRDYyCi06MTA3ODgwMDBBM0E5QjRCNDFFQzQ0MkE3MUJCNzBBNEI3OUVDRERGQzE0Ci06MTA3ODkwMDA1OTRFRUM3N0U3MzYzRTRGNzAxM0Q1OTlDQUY2ODNDMTNGCi06MTA3OEEwMDBCOEQxQjkyMzIxOUI4Q0M2MEY4OTlCRTJEMUM2OUYwQjBGCi06MTA3OEIwMDBEQkY2RUYwNzdCQjRENjQxREM4OTU0Q0YyODU3NTUzMTJFCi06MTA3OEMwMDAwQkNFOEQ4RUIxMDg1OTgwRDM3MzZGRkU5NkQ2NkI2RDNCCi06MTA3OEQwMDAxNjcxRkVEMDY5RDdGNjg1QkExMzQxQ0Y2Q0U0MTFEQzdFCi06MTA3OEUwMDBGRjA3NTBGRTJBQjk5QjRFRTNCRTQwMDJBRkE0NzZERkVECi06MTA3OEYwMDAyQjMxNURCNEUzQkNFN0ZDNDYxNjA3MTBDOUQ1QkY5ODMxCi06MTA3OTAwMDBDQ0UyNzAyNDAwRjRGM0YxNjQwNUE3RjMzQ0E0RjA3RTBDCi06MTA3OTEwMDA5OTgyRTczQTk2QkRGNjcyNkU4ODMwMzk0NEYyMkJCOUY3Ci06MTA3OTIwMDA0ODdGQkVCNERFRUFDODg2NzU3OUUyNzdCN0MyMzk5OTc2Ci06MTA3OTMwMDAzMjVFNUZCRjEyRkRCOTUzQUE3RTdFRDBEMzI1NUM0RjY1Ci06MTA3OTQwMDBGRkJBQjRGMDEwRDhCRjMyQ0Y1MkI0RUJGREU3RUFDRkE0Ci06MTA3OTUwMDBBNTFBRjc1OTIxQkRCMDJGOENFQUREOTM0MkY0QkVBQkQ2Ci06MTA3OTYwMDBGMkU2QzdENkMxN0MzOTdBRkYxNTE5MDFGQkM5MkE0ODRFCi06MTA3OTcwMDA5QzBCQ0VFN0FDNjhEMDk3RUYwM0JCNzkxNUIwOTNEOERBCi06MTA3OTgwMDAyRjE3RUZFQjk1QkY2REMzN0YzMTc5REM2NUY5RUIwQUZCCi06MTA3OTkwMDBDMUZCREJFMjMxQUVCMkVDQjVDNTY4OUZDQzY5N0FGRUMzCi06MTA3OUEwMDA1QTU1M0Q3RjZEMjM4QzdDRDRGMzM5REVBNUU3OUIzNjk5Ci06MTA3OUIwMDBGRkVDODlDRjA5NzlGQUYzQkU0NjNFNEI4NEM3MUIwMjIwCi06MTA3OUMwMDAyQzBFMTFCNUJGMkRCODA5RTkzNkYyRDlDOEQ3NzYwQjAwCi06MTA3OUQwMDA1RkY3RTI3Q0E1N0YyNTk2NTQ2NkIyODFFRTc0Mjk4NDE4Ci06MTA3OUUwMDA3QTYxRDRBMzBDN0I0ODgwN0YwRjRBMDlENEUyNTdBRTVBCi06MTA3OUYwMDA3OEI0RUY2OUJDM0Y0MjE5RkJDRTA2N0EyNDAyQkQyRTUzCi06MTA3QTAwMDBENDIzMzhEMTA3NzZERTQ2M0U3MEI2NUI0MTU4OUY5MDRFCi06MTA3QTEwMDBBRkFFRTk1OTlFRjc5NEZFRkVEODIyRkFENTQ2QzBFRkU0Ci06MTA3QTIwMDA2OEQ0MkI3NjZFMzc4OTA0RDY2NDgyOUVCQTlDMzA2RUY5Ci06MTA3QTMwMDAzN0ZBMkM2QTk5MDRGNzlGMTBCNTZDMjhEQzdCRTJDNEY2Ci06MTA3QTQwMDBGNEM3N0MxRjRBRTc0ODgyRkI4MjFCNDMxNzUzQzEzRUExCi06MTA3QTUwMDBGRDM4QTdFQjY2QjA3QkRFMjVBNDA0RUNFMENENzE2Q0FECi06MTA3QTYwMDA5RUIyOThBNzdGQjcyQURDQUU0RTdCRUQ3QUY4QkU1OTVFCi06MTA3QTcwMDA1NkUxNUM3ODY3RjM1NkNCMzBDODA3NDVCQzdGQzQ5QkEyCi06MTA3QTgwMDA1ODc3MTVCNERGRDEyQzMzQkFDQTJDODE2MTEwQkZEODE2Ci06MTA3QTkwMDAyQjYzQkIxRDY1OTNGMTdDNjVEODZGNkI2NkZCNDAzQTI5Ci06MTA3QUEwMDA5QjNGNzEyQzhFQjBFNzFEQzE5RjVFMDVGMUFDMjc0QzRBCi06MTA3QUIwMDBCMUY3OUYwQ0I3OUFGOEZEMzVERjcwRkM2RDhDREE3RjVCCi06MTA3QUMwMDAzN0RDQ0FGNkM3RkQ3ODA4RUQ0Nzc1RTk3OTNFMEUzMzE1Ci06MTA3QUQwMDA3REI4OTZDQkY5Rjc0QjZGQzBGRUVGNkMxNjU0MTg0Nzg0Ci06MTA3QUUwMDAwQUM1M0I2RTFDNDVGQjM5RjE4OEM0RTMzMDJDMkUzOUE2Ci06MTA3QUYwMDA4RUJGQkY5QkI4RDI4MDFGMTNBRjIzMDJFOEYzQzQzRkYxCi06MTA3QjAwMDAxMkRDQjczNUFFNjYyOUNFQUI3RUVCQTAzOENGODY3NURBCi06MTA3QjEwMDA1MjhBNUJCMDczNjdFQ0U4QkY4RjZGOTU3NEI4NEM5QzZBCi06MTA3QjIwMDBFNjY5ODE3OUU2ODRBMzA0RURFRDg0QTNGQUYyM0MxMkMwCi06MTA3QjMwMDAxMEIxOUQzNkZERjM2QjRGRUFGMzA1NTY4RTZGMDc0OTgyCi06MTA3QjQwMDAwNTdDNkZGODUyNDRCQTNBQkI4OEVCMDE1QTZGNjdEOThCCi06MTA3QjUwMDAwMEJDRUZBNkYzMjI5Q0RBQTVFOTk3NjI1MUFDNzE3RUQ2Ci06MTA3QjYwMDAyNkUwODFGMkVCMDk4NUUwRjhGMkM0NTIzQkM2RUY1RkY0Ci06MTA3QjcwMDA1OTVBNzEwNThDRUI5RjdGQ0Y3MzQ1QUM3M0UwMTE3NjNBCi06MTA3QjgwMDAyOTgxRURBRjcyMjc1MEUyMjlBRUQ3MEE4Q0RGNzVFOTYzCi06MTA3QjkwMDAyNTMxRjZFQjZCMzhENjcwQURFMTM5N0Q2OTlDMjdENjdGCi06MTA3QkEwMDBCRUM0MEZBRENDMEYyOTU4M0E0MjUwNjA1RUI2NEYyMDhDCi06MTA3QkIwMDBDMEQ3OEUwNzNDOTczRDM3RTMyNzBGNjQwMDNEREVFMERBCi06MTA3QkMwMDAwNUY0QjMyRENEODIzQjk2OUZCMUNBRUE2MEYzQkUwN0EwCi06MTA3QkQwMDBGQ0I1QjAxRkVGNUVBQTk0NjAxRjdCQUU3NzAzQ0VBQkZGCi06MTA3QkUwMDA2RTg3QTAyQjdDNjdBOTVCODhFNzcwOTc1OEM4NjY4ODZBCi06MTA3QkYwMDA2NzRCNzVFOUI3QzYwM0VFQTdDRTU4NDdFOTdEQjJDNDE3Ci06MTA3QzAwMDA4NDcyN0U0Mjc2MjFGREZFMkE0MjMwQkVDMEUzQjUwMzc3Ci06MTA3QzEwMDA2RjI2OUIyMkNGMjNGRkMwOUFGRkIwOTVENkZCQjBENTJECi06MTA3QzIwMDA4OTcyNDlGNkI4MDRBMERGRjVERkZGRTUwMEJERUVCQ0MwCi06MTA3QzMwMDA2NDQ2MzkwRUUwRjMxRkVEQkJBRDlDNEZBM0UzREM2QjU0Ci06MTA3QzQwMDAwMUZGQTQzQzA1RjVDM0U1NzFBODY1Qzk3MDJGMDFFNUU2Ci06MTA3QzUwMDA3QjhDNzU1NENEMkY0REYyNTBEQjQ2RTk0OUIyOUJGMDM5Ci06MTA3QzYwMDA3RTJFRTI3NkFCNEU2RERGMTlFMUVGNDVFODAzMDkwOUEwCi06MTA3QzcwMDAwNEY2QTU2OUY2NTQ2ODE2NDJGMTE0RkZFMzJDRjYxMEQ5Ci06MTA3QzgwMDBDQzMzOTJDQTY5QkYyOTA5NTY2MjYxRjVCNTRBNjdDMjA5Ci06MTA3QzkwMDBFN0FBNzE5RjNCQzU2NTJFMUM2RTIyQjhBRjBEMzZEMjg4Ci06MTA3Q0EwMDA0MkZEOUE5REQ1RUNGM0RBNDQ4MkY2NjZFRDYzNTI2MEFDCi06MTA3Q0IwMDAwREFENjdBM0Q0NjY4NUY4NDlBNjVCMkQ4MEFENDQ0OTE4Ci06MTA3Q0MwMDA5MjhBRTdCRDA3OTUzMzdEQjQ2NUZEMzIzMUVDQUY1MDQ0Ci06MTA3Q0QwMDA2NTFGRjMwRjcxNDFBQ0Y1QkE4RkMzRkNGMkJDMDBGQzE5Ci06MTA3Q0UwMDBDQTNFRDRGNTBBQjgzNTJFMkI2QkNGNzVDMDgyRkU3OTBCCi06MTA3Q0YwMDBEODZFNzAzRkFDOTA4RkJCMTMzRjM1QjFGRDAyQTFFQjQ2Ci06MTA3RDAwMDA3MUJGOURCNjhFNjZCNDFCNTQwRkRFMTU0MUFGM0U5NTE0Ci06MTA3RDEwMDAwODlFQ0Y3NUQzRkY3MkI1MkQ3NzExRjY4MzhGOTNCOTc3Ci06MTA3RDIwMDBDMTlBMTZGNEREQzQ5MTJEODBDNzZCNUZDN0JCMzhBMjIyCi06MTA3RDMwMDBFQ0M4ODQzNzNDNkI4MERFNkY2QTNGOEM3ODE4MTNBMkU2Ci06MTA3RDQwMDBGQUM4RTUzMzUyODU3QjJBOUNFMTNDOTRCNzVBRjlGQzhBCi06MTA3RDUwMDA4RURCOUI5NEQyNzFGREQxQUZFNTM4MzNGMjU3RDM2QkY0Ci06MTA3RDYwMDBBM0JFRTdBQzc2QjU5OEIxRDYwMDMyQzFEODBFMTFCQTMxCi06MTA3RDcwMDBFOTUwQjNDMDFFQkQyMTgyN0ZERjk5NEZGMTQyRTlCQUJECi06MTA3RDgwMDAxN0Y0MEVGQ0YzOEI4MTE5ODA5QjBEQ0RERkIxODI3RTQxCi06MTA3RDkwMDA3Q0UzRjFBMzk5N0UxREIxQkZGQTI3QTJBN0MzQ0FGNjVGCi06MTA3REEwMDA4NzNCODAwRkQ1RkIyRkYyRjEyMzg0NzIwRUNCOTVFQTJGCi06MTA3REIwMDA0NzY0M0M0NEMzQkQxMUU3OUE1RUFDODEwQjMzQjJGMDFCCi06MTA3REMwMDA3QzFDMDFGOTg4NDIyMzBBRDY0QzM2M0E4MUFGOUE3RjRGCi06MTA3REQwMDBCRDI2RUNDRjI2RTJCOTlFNTU0RUQ2REUxQTU5RjNDQjFFCi06MTA3REUwMDA1RDE2RThFRkFBRjg4MkZFOTc1QjE3RjU1RUEyRjM5NzlGCi06MTA3REYwMDA4OEYzMzA1RUE5MEJFNzY3REU0QjBBMDkyNDdGMEI3RTEwCi06MTA3RTAwMDAwNTY5RUJCOTNBN0VBNUM0QzVFMDU3MDdFOEQxRjhGRjhDCi06MTA3RTEwMDAyN0ZCOTM2REVDQ0Y4MzZBNzc3RkFFMjU5RURGQjY1MTRCCi06MTA3RTIwMDBCQjkwN0I0RjdEM0FDMzA1Mzk5QzE2ODkwQkJFNUVEOTRBCi06MTA3RTMwMDA5MzdFRTc1MUZEMDZENzJENEE5RjBEN0EzQ0IxOTlFQTEyCi06MTA3RTQwMDBCMTI5NUE4RjVENzIwOURFNUJFN0RBNkI0MzdCNjdENDM5Ci06MTA3RTUwMDBFQjhCQkM1RjVFMUJFMzdCOERFODk5MTEwN0YzNzE1M0RECi06MTA3RTYwMDBENzYwQzA1REI2NEE5MjhCMjlCMUQ5NDE5MUFEQUZCNjBBCi06MTA3RTcwMDAyNkVCQzY5MUU4RjFERDhGNzY1MkYzMkYzNUJGRDJGOEFECi06MTA3RTgwMDA1RUQ4QUZFNEUzODYxNkNGMTQ4MjE0RkZCNERGRjdDN0UxCi06MTA3RTkwMDA3OUU2MDE1RkQ3MzhEOUZDMTMwRTlBODJCRkZDMDNBQjk5Ci06MTA3RUEwMDBFNzBFQTBDRjQ2RkIxMDA3RUIxQTIzNDI5OTJDNUUxMjc3Ci06MTA3RUIwMDBEMkU5NUI0RkZBNjUzM0U4NEY2MzQ4QzI3MUNDNEZDN0Q0Ci06MTA3RUMwMDBCMTYxNDJDRkY0RjQ4QjRCNjRGNDUyQUIwMjdFQ0FDMDcyCi06MTA3RUQwMDA1Q0MyMUFBQjI2QjhBRjdCNjAzNkJCNDc2NjYwMEVCQjkwCi06MTA3RUUwMDBGN0YxREZFM0Q4N0FDQzdENzE2Q0RDRDBEMjFGNTg0QjMwCi06MTA3RUYwMDBFRTgxN0VDOTEyRjE5QjczQkUzOURENDAyQUM0MEZFRkJCCi06MTA3RjAwMDA4RjczREYwREZDQjAxNEI5QjExRjE5NEVFMjEyMjhERUQ5Ci06MTA3RjEwMDAzMkE0NDYwMUY2MzcyNDU1QUEwMjhCMUIxMjM2RUU0MEQ2Ci06MTA3RjIwMDA0QUVCQ0IyODU2RjM2MURDQ0FBMEI2MTZFMjIwMTlDRDg1Ci06MTA3RjMwMDBCMUNGRjU2Qzg4OTNCRjVEQkNBQjI5RUEzQ0NBODYzOEVCCi06MTA3RjQwMDBFNjZGMUY1NDY4N0Y5MzhCRDk3OTk0NzBEQzg2OTIwRjBCCi06MTA3RjUwMDBGQ0VEODhCRjBEM0JEQkYxMTk1QjBGRjUyNzMyM0UxQkIzCi06MTA3RjYwMDBFNzVGMjAzMEU4OTdDNEYzM0Y1NDg4NjQ0REMyRjk5MTJECi06MTA3RjcwMDBERjA0REY5OTJDMzgzRkIyMTE1NzIzRDhDRjk3RTI1ODRFCi06MTA3RjgwMDA1Qzc1OURFMDVBMEZGOTlGNDg1RDE2Qjg2RjQ3QzNGRkI3Ci06MTA3RjkwMDA4RjI3REZFQTkyRTgyQjhFRUJDRTY3QzM5Qzk1RUFDMzZFCi06MTA3RkEwMDBGMzIwQUY4RUM5RTc4N0FGQzUxRTc0MEQ2Njc4NzM4QjVCCi06MTA3RkIwMDBCQUZERUY5QURDODJCMjRFNkU1Njg4ODc0NERBRUI3OENGCi06MTA3RkMwMDAwNUU3RjcxRDQyOUMwQkU2NDMxRENCMDU0NkE3NjBFMTg0Ci06MTA3RkQwMDBFNzAzMjQ3RDlDODZEQjQzNkQxQzc4MjcyRTEzRTlCN0NECi06MTA3RkUwMDAxMUZGMThCQzFGQ0NFMkIyMDAzRDFBRkRFMTczQTQ4NjVDCi06MTA3RkYwMDA3MzlFQzY3M0EwNjk1OUUxQjg0RDNBRUU5MzJENTFFMEQ2Ci06MTA4MDAwMDA4RTJGNzJCRUQ5ODZGRTk3RDdDMUY0REY4ODg3RkU2MEI3Ci06MTA4MDEwMDAzQzJFNzM2RTkyRjJBQjE1RTREQjVGQUU0OTA0N0JEQjYyCi06MTA4MDIwMDBGRkNFRTMwRTkwQUY5MTBGOUQ4MjdGQ0M0MTU4REZGQUQ3Ci06MTA4MDMwMDA4MzFDNzM5Rjg4OTZBNkE1MEQyODA1N0YzNDJEM0QwREMyCi06MTA4MDQwMDA1M0VENzlCRDVEOEExOTA3M0NDREY1RUUxQkUzQjU5RTc2Ci06MTA4MDUwMDA1ODBDRjNDM0QzRDA5RkIzOUU3N0RFNzNBM0JBNzc2MTc2Ci06MTA4MDYwMDA3Q0JDM0U4RUYxQkI1RUQxRjhBODI2ODA5RTc1RTc1RDk0Ci06MTA4MDcwMDAwOUVDN0U5MjQ0NzZGRjkwOTNDOTczODNDRjUyMkE0OUNDCi06MTA4MDgwMDA5MUVGQjlEMTFGRTk0N0RDMzNFNjgxMTFEODIwOTNBREQ4Ci06MTA4MDkwMDA4ODZCMTZCRkQxQ0U2NTUwNDNDN0U0OTdDOEU4RkFCOURDCi06MTA4MEEwMDA2RjRDMjlFQzlGOTE2RENDMkU1RERDMzAxRERCNEIyNTk4Ci06MTA4MEIwMDAwRjU4ODc1M0JFMkUyRDMxQjkyMEFFNzM3NkQxOUYxQzM5Ci06MTA4MEMwMDA3MDE0N0M1MTQ2NkIyRUUwRkQ4OEU4OTE2REUzMzFENDRECi06MTA4MEQwMDA4REYzQjc2NTczOTU0MDg4NDIyQUE1OUUxQTI0MjY5NzhBCi06MTA4MEUwMDAxOUI4RUVCOEQwMTQ3M0ZGQjNEREM2RTZERkNENzE0RTFDCi06MTA4MEYwMDA0Q0QzRDIwNjk3OTY4RDhEQ0MwRjQ0Mzk2OTc4QTQ3QUVCCi06MTA4MTAwMDA5ODVFMzZBRUZCOUMzMEM1NDcwQUI0NkZENEE3NEU5OTMzCi06MTA4MTEwMDAwNDYxREQ0MEIzODcyOTlDRkY5QTNERDZGNDIxMDVGNDI0Ci06MTA4MTIwMDAwQ0Q2MDE0QkE4N0RENEU0Mzk4NEJGOUE4QUYxNEFGQzZECi06MTA4MTMwMDAxMzlBNUZGRDAyRTYwMzhFRUIwQUQwREU1MUZENUY4RkRFCi06MTA4MTQwMDBGQTMyODJEOTZGMkJEOEQzODgzODY1RTdERUY3MDdDMUJBCi06MTA4MTUwMDBGQURGODdERkJGMTAwRkVCNDA3RjkxQkFFMkMxN0U5RTRFCi06MTA4MTYwMDBCQ0ZGREQ3ODM4MzdGNEUxRkQyQzVFNzE5NzYxMUUzNTc4Ci06MTA4MTcwMDBDMUM2RUNGQUEzQjY5MjZDRThENzAyREY3RkU3N0EyMjk5Ci06MTA4MTgwMDA3MDQ5NTZCMzc1OERFNTAxRDE3MDlFNUM3RjJGNEY1NUI4Ci06MTA4MTkwMDA2M0IyRTE5RTFFM0ZENjVCQzVFRkU3MzJDQUExOTJDQjI4Ci06MTA4MUEwMDA2MUY5QjY0RDRBODYwQUVEN0JEQ0I2N0U3MDZFOEZBMDEzCi06MTA4MUIwMDBCRDNDRDkxNDhGRjMxMThEOUU0NURCQzYyODMwNzdGQTZDCi06MTA4MUMwMDA0QkIzOTlBRjdGQjdDQTZDNUM3MDE3QzM3QTk2ODdGM0NECi06MTA4MUQwMDBDRDQ4RTdDMTdEMzZBQzZGQzlDRkQ4RkU5NDg1QjRBRDJDCi06MTA4MUUwMDBENUQ0QkU3QTlBRDk3OTBCNjMzRjk2N0NBODE2RjZBN0E4Ci06MTA4MUYwMDBDMjVCRjI5MDgwRjM2Mjc4RkY3RTNBNEU3OTU2M0Y4OEY4Ci06MTA4MjAwMDBFQjVFQzY3RTFBRUZDRDMxOUU1RkQ1RTY1M0NCQjhGQzUwCi06MTA4MjEwMDBDQjg4MDdGNTJGRUE1QzZCMzM1QjlGMzZDNkZGQ0UxRjFBCi06MTA4MjIwMDBDQUIyNjFGRjZEM0NGRTkxNEIyNkMwNzlFODFEODc4NjdFCi06MTA4MjMwMDAyNDVDRUUzRUU1MzNGQzFFMjZCODU3MUFEMjkzM0U4MkVDCi06MTA4MjQwMDA2OUI2NEQ2NUY3NjQzNEJGN0QyRkUwQUEzQUI4MURFRkRCCi06MTA4MjUwMDAxOUZCQkFGNkE2QUFGOTk0MDNGNjMwNkI3Njg3RkE5MTYxCi06MTA4MjYwMDBBQjAxM0ZBNDRDRDBGOTk3RDU5QjJFMjg2Q0JFQ0JGODIwCi06MTA4MjcwMDA3MDA3N0Y3RTA3RjQzNzFCRjY1OUFCM0Y5QTRDRTU3Q0JECi06MTA4MjgwMDA0N0E1N0MzMUYyMUUzMkJGNEQ3RkVFQTZBRkZERDVGQTc5Ci06MTA4MjkwMDBBOUY1NUIyQkFGRTJGQkQxOENERjY5RjhDRkU2NzgyQzM4Ci06MTA4MkEwMDBEQjUyQkE2RTAwNjVEMTlBQkQyNzA2RjNGMzY4Nzg0RUFCCi06MTA4MkIwMDA0N0MzOTcxMTNGQ0I0ODQ5NjFCQTEwODE5M0U2NDdCMTU0Ci06MTA4MkMwMDA1RjlBM0NDQkVBMTZGMkZFRkJEM0Y4QkE1RTFBQzQ4RjczCi06MTA4MkQwMDA3QUMzOEQxMTFGMUQ3MkRCNjBEMDY3MjMzRTNBN0FCOEQ2Ci06MTA4MkUwMDA1RkU0MjczNkU2Mjc5NEE5RUU0Mjg4Njc1MTM3NzY5REVBCi06MTA4MkYwMDAzM0MyNEYzOTI5RDUxREJDMEZGNDZDMEJDMzc5QzRGOEI4Ci06MTA4MzAwMDBDQjlDQjlENzY1MUNDRjU3QzZBQkZERTEzRTNEOTREQjk2Ci06MTA4MzEwMDA0NEQ4MTc2MEY2QzM3QjVBM0JFRDNFQjc2QkE4MDQ3QzhDCi06MTA4MzIwMDAyRkMyRjRCNEFGQzQzNTc0Njg3N0Y5RDIyNzJFMzhDMEExCi06MTA4MzMwMDA4RkVFMUM0MTMwOEVEMzExQUZBN0Y3NzczNjExRTlGOUQ0Ci06MTA4MzQwMDAxRDk3NDNBNUQ0RkE4RjNGODM4RERBRDI4QUZCMUREQUJECi06MTA4MzUwMDBCRkU0NzFBMDJGQ0Q0NUIxRkFGOTI3RkUxREUxRjc4NkU0Ci06MTA4MzYwMDBEREM1RjU0QzlCOTcyQ0UwNzJCQkFCOTlBRDY3MkZEQTVFCi06MTA4MzcwMDA1ODhBRjIzMEVFRDc3QTQzNzAxNjY2RDBBQTNDOEQ2M0U1Ci06MTA4MzgwMDAxNDkwQkY1MTNFNEI1Q0RGQzE3RDYwNTE3MjIyOEZGMDczCi06MTA4MzkwMDA3RDAxMUVEQ0E3NTM1NjJGNjJEQ0MzMjhCRjdDQkI5MzM0Ci06MTA4M0EwMDA5REEzNTc2QjcwMUVCNzQyOEFCRDBFNzlBNURERjRCNTRCCi06MTA4M0IwMDBGQTYzRUNDN0MyMjYwMUVEQTQ5MUZFNjU1QjZBRDcwRDk2Ci06MTA4M0MwMDAyMEQwN0ZENkJGRTg3RTg0MDZBMjVERTJGREQ0RkE1NUI4Ci06MTA4M0QwMDA0NjVDNzhGRjQwRDRGQTUwREJGNTI0NzIzRkY1RjJFNkI0Ci06MTA4M0UwMDBDNUI4MkZCRjlBRjY5RkIwMzgxMkM2ODUzNEZBMzU3QUQxCi06MTA4M0YwMDA4REZEMjgxNENGQzgxNjg4RTNBRTE2NUM2MDlGQTNFRkVFCi06MTA4NDAwMDAyNzczRUJFRTNGNUNEOEIwN0YyMEM4QUY1RDYyRkI2NkEwCi06MTA4NDEwMDBEQkZEMDJDRTBCM0IzRjIwNkM3RDYwQkQ4MEVCNjkzREY4Ci06MTA4NDIwMDBDQUFGOTlFRDA3RUE1OThFMzUwQURDRTc1N0I2NTE4ODhECi06MTA4NDMwMDAyOUM3NjVGNUY5QUVBMTExNzY2QTc5NjA4NjZCQTg4RUI5Ci06MTA4NDQwMDBERTQ2REMxRkIyQTJBMTU0Rjc3QzgwOURDNzkzQjhGRDI1Ci06MTA4NDUwMDBFRTREREY0ODRENjJDQzM4OTNBNjVGOUFCRTY5RkE5NzFECi06MTA4NDYwMDA2RjU3RDkzQzQ3MEExQ0NDQzgwNEJCRkUxOENFNEJBODlBCi06MTA4NDcwMDA1REJFREFDRUQ3MDdFNkQxNTdBQTlGQjhBMDVCMUY1OERBCi06MTA4NDgwMDA5MkM3RTRCMzQ0MkNDNkU3M0REOTU3Q0EwNzlEN0QxRTY5Ci06MTA4NDkwMDA2N0Q3RUY3RkY4QjZGREQxRkFBMUU5ODVENjNGQTM1RTk1Ci06MTA4NEEwMDAxOEY5QUZDNUQ1OEM3MjMwRjIxRkU4ODJGOUMxMUI3Qjc5Ci06MTA4NEIwMDA2RDgxMDcwNEQwNzc0NkE3N0ZBRjE1RTlFQzQ4MkI3MDk0Ci06MTA4NEMwMDBDMTM5QzgzRkMwMDc5NENFRUFGNERCMzE1RjIzOTY5NEVDCi06MTA4NEQwMDBEQTcxNUVDN0U3NERFM0ZBMTYzRkM4RTE3RUQ2NEVBQkQwCi06MTA4NEUwMDA3QjJDM0I0NzU0OTIwQ0I4OTg1MkRCMzZEM0UyQTRGODZECi06MTA4NEYwMDA3QzY0NzQyMURDMkIzQUU1QjFCNjk5MTBGQTVFRjJDOEJGCi06MTA4NTAwMDA5ODQyQjg1RjdFQ0FENkI2NzcyRDJFRUFEN0Q1OEUyRDgzCi06MTA4NTEwMDA4NEZCRTU1NzgwREQ4MEY2MDc5NkRCMTA1NzNERTU4OTQzCi06MTA4NTIwMDBFN0YyNzk5NUJEM0ZDRTVDMzI5RkREQ0JDQ0NBMkIyOURCCi06MTA4NTMwMDA4RjJENzQzQ0FCM0MzQ0ZDRjdBMDlGOTVBREM1NDUxMDFFCi06MTA4NTQwMDBCN0E5ODQ4ODM3MURDRkFBREM4RTkwMkQ5QjhERTc5MzI5Ci06MTA4NTUwMDBFODdCREI2QzlFNTU3NkYwRUIyRUFEQzVGMUFERjJCMDRECi06MTA4NTYwMDA4NEZBNDQwRUIxQjhBODQ0RkI2QUE1REZBRDhEQTM3RUEyCi06MTA4NTcwMDAyRkU1RUZEQTI0OEIwQkU2QUZGNEI5MUZFNkI1NkI5MzZBCi06MTA4NTgwMDBEQ0FBMUFGMTVDOTMxRjdDMDc3NEFDMzVCMTc1RkJGRDU2Ci06MTA4NTkwMDBBRjBENEY2OEJCQ0M3OEJGREY0NzI2QzMzQ0E0QzU2NzhGCi06MTA4NUEwMDBDMUQ0NTg5RUFGMzhGMTdDNDRCRTg5QzUzNThDRTVCRjM3Ci06MTA4NUIwMDBEMkVDMkM1MTMzMDAxN0Q1ODcxNDE2QUZBNjdGRTA0RkFECi06MTA4NUMwMDA1NjExQTYxN0Q1ODQ5REVCQUEzQTRDRjAxQzRCRjVBMTg5Ci06MTA4NUQwMDA0MjNDQzcwMkZCRkMzRkQ2RTFGMDVGNzM4RUE1MUI1NzAwCi06MTA4NUUwMDA4QzRGMDU5MjMwNTk4QUMwRjUzNEJCNTU5NzE3RkI5QkM5Ci06MTA4NUYwMDA0NjQwN0Y4ODE4RTc4MjczMTg2Mjg2QTk2NjA3RURCRjM4Ci06MTA4NjAwMDA3ODA1NEQyOTNGMjRBNzRCODRGQjVBRUFBNjRFMTFFMTc5Ci06MTA4NjEwMDBCRUE5MzUzMkRGM0Y2MjYyRTdDQ0I1RjY5QTM4N0ZCNDQ3Ci06MTA4NjIwMDBGNEI0QkQ2NDA3QzhGREVDNUJBREI5MzZCNjdFODFGMzJBCi06MTA4NjMwMDA2MUFEQkY2QjA0MzcxMTYwREU3NTgwRTBGOTgwOUMxNDdBCi06MTA4NjQwMDBEMjAyRkNCMzExNzcxRUUwRUQzRDdCMTJFNzM3NUIzN0JBCi06MTA4NjUwMDBBNjdGMTk5MEJBQ0NBNjk3NTU4QUY3NTcxRjU5ODRGQTY2Ci06MTA4NjYwMDBFMDRBMzBERDkzNDlGMzZGRDk5N0IxN0M4NkU5NDIyNjIxCi06MTA4NjcwMDA4NUYwREJGNjcyOTZCRkM2NzQ2MTA4Q0RCRjZCNUZDRTI2Ci06MTA4NjgwMDBGMkIwQzA0OTA3QjYyM0Y2OEE0MkZGNDg2ODg3RTM3RDA3Ci06MTA4NjkwMDA5QkZCMUFDMEI3NjQ2MkYxMTdFOTE1MDVENzUzQjQ3RDg3Ci06MTA4NkEwMDAyMTZCRTk0NDBCRjBGODFFRDg0RDg4QTdENDE2RkNEQUVDCi06MTA4NkIwMDAwNkYxRUEwMkI3MEFGQjNEMzZGMzdCODNCRTY5QUFGMUY1Ci06MTA4NkMwMDA1NUI0OTk3MEZFMDMyOUYwRkY0M0NFNEY0RDJFQTRDOTM3Ci06MTA4NkQwMDA3RDBERUM4QjI1OERFRTZCNjAxREVEQjREREQzMDZGNkM0Ci06MTA4NkUwMDA2NkVDMUJBRDUzQzA3RTM3QkRGM0E3NUNCQzlGRkMwQTk0Ci06MTA4NkYwMDA1NkNGRDgzN0U4OUM5MEY2RTdFQzZGMDY2RDhBNUM4RjEyCi06MTA4NzAwMDAzRTZEQ0ZGRjE0QkVBMzYyNDBGRjU0NTA5REU0MEVBQUZECi06MTA4NzEwMDA4NzZCREM0NDU1QjI2MEJFQUM5RjJGMzYxMTY2OUZCNkE2Ci06MTA4NzIwMDBEOTRBQ0U4MjVDQzlDMDEwOEU1QjQ1RjY5MjRFQzg2QkFBCi06MTA4NzMwMDBGNjlDQjQyNkY1Njk1RjlCOTJCRDVBODQ3MTM5MjkyMzUyCi06MTA4NzQwMDA3ODc0MTFEOEZGREZCMTdCM0QwNEI3MUJGNzczQkUxNEZCCi06MTA4NzUwMDBCRUQ3OENFRDBGQjFDMUZFMTBEMDdGMTc0OUYzQTdGMjQxCi06MTA4NzYwMDBGODE3OEIyRjkzOTREQzg4NzkzMEVGMDdGRDdFMUFFQzk1Ci06MTA4NzcwMDAzNzlGNjA2M0ZCMDc2OEJGNDRCMEFCNjM4ODhBRTk1OEUyCi06MTA4NzgwMDA4ODY3NjU4MTI4M0Q5OERGNDMxQThGREU0N0VCN0ZEQ0UxCi06MTA4NzkwMDBDQUUyNDk5NjA2QTI4QjBGNjZDN0IzMzhDQjRDMDc4QjRCCi06MTA4N0EwMDAwRkM2Qzk4REI3ODJGRjEwNzc4RTM4QzE3RkU4RkNBNTUwCi06MTA4N0IwMDAyMkUxRkUyMkM5NzkyM0FFOEYxRDM0MTFBMEY3NTkzOTY5Ci06MTA4N0MwMDBFMDg0RjU5OUFFQUIyNDc1MzNFOUFFQUY5M0NCNUJBQkU4Ci06MTA4N0QwMDBGNzcxNDVCRDBBRTI3MjczMURDQzNGN0QzNjlGRTA3RTg2Ci06MTA4N0UwMDBFOEFFNTM0QTAwRDY0RDkzMzIyQzM1OTFGMTlGMkJGOUM4Ci06MTA4N0YwMDA3NzBGMzkwQjMyRTMyMUZFQkMzNzhFNDBGQjEzRjZDNUYxCi06MTA4ODAwMDA5OTQwMEVCRkRFOTY2MzA1M0NCQzA0M0NBMjdDNDgzMjE2Ci06MTA4ODEwMDAzQkVGODZGQTkyMkU1MDdBMzNGMTM5REIyNzJGQTk2MzhBCi06MTA4ODIwMDAxMjI4N0YyN0RENjA1N0UxQkVBOTY3QUQ4RDM3RTA3RTU2Ci06MTA4ODMwMDBEMDE3NEM3OEJGRUU0QjhBQUIxNEYyMkY5RDU3OUQ2MDNBCi06MTA4ODQwMDA3RjlGQ0Q2QzhDQzNGRUJDNjBDMkZFQkMxNEQ3NzVGNTk3Ci06MTA4ODUwMDA0QTRBRjdDMzIzNTg3QzRBQjIxMTA5RUNCMjY0MkE1MDQxCi06MTA4ODYwMDBFRkE2Q0Y3M0UzRDkzQzQ5QjNEM0NCRTM5OUZFM0MyRUJCCi06MTA4ODcwMDAxMDNDMEYyMDk5RjI1MTdGQjRGRDNBOUQ1RDA0RjdFQjU3Ci06MTA4ODgwMDBGNDlCRDUyQTAyOEVFMzRBQjVCODUxNDg4NDc4Q0ZFNEU4Ci06MTA4ODkwMDAxMjgyN0VEQjY0QkI4Q0U3NzI2MDdGMzA5QzFCOUJDMkM0Ci06MTA4OEEwMDBFREVGOTQwRjJBNzEzRDgxNEFFMDMwREM3RkQ5NjJFNzE5Ci06MTA4OEIwMDBGNzY4RjE3NUM1RUIzOTRFQUUyMzZEMjJGODkxRDc1RDlGCi06MTA4OEMwMDAyMjJFODgwNzVEN0Y0OThBRTk0NzRFRTdGNTNFMjMxMDRGCi06MTA4OEQwMDAyOTgxQkU5NzdGNTE5NTAwNzdGOTQ0RUZFNzREQUYyRjdGCi06MTA4OEUwMDAzQzA1RTNFMDU0OEJFMTM5Rjg4OTQ4OEYxQkNGRjc0RjAzCi06MTA4OEYwMDA3NzFBRUU0RjhFRTdGM0Q2QzE2NDcwRTQzRTMxNkQxREZBCi06MTA4OTAwMDA2OEJBMzhGMjA5RjQ1MzhCMTQxN0YwNjVCQkRERkQzRUVECi06MTA4OTEwMDBBQzdCRkE1QjY1NzJCOTM4RTIzMzNFQjY5RjZGQzRBNTkzCi06MTA4OTIwMDAzODVDRkZBMUY4QjQwMzJFQUVBRUFGRjM1QjY5QkZBRjA2Ci06MTA4OTMwMDAxRUNBRUEwNzFDODI1REI5RjI5NzI5Qzk2MEU3Q0RGMTJBCi06MTA4OTQwMDBDQ0RFNjhBOTg2M0JDMDk3MzM4MUUxQ0IzOUJBNUIzRjY3Ci06MTA4OTUwMDA1N0M1NjdFMjdCOUFCRTAxRUVBMDlFM0Q3MjYwN0VBQzc5Ci06MTA4OTYwMDA3NTY1OEFENzU1ODBEN0VENzY4MkYzQjMxRkE1NUJFNjkwCi06MTA4OTcwMDA4MjlFNjlFREVDODk2N0Y4MzdBNkVCNkE1N0VFODc3NTNBCi06MTA4OTgwMDAxREZGNjc2Q0JDOTgzNkUwOTIxMjM5REU3RkU4NjQzOEQwCi06MTA4OTkwMDBGM0FBNzUzMzZGQTZGREYzREE2NTVDQkY0OUU1RTc4QjkzCi06MTA4OUEwMDAyMkYxOTIxRTgxMTcwRDc3MUQ3NjE2RUZEMUYwMzM3NUU3Ci06MTA4OUIwMDBGN0JCMjIzQzlGRkExOTIxQ0U0QzEyOUU4NzY4Rjg5OThBCi06MTA4OUMwMDBFMjY3Mzg5QzcyODg4RDEzQkRFMUM3RERFNTlDMDZFNjQxCi06MTA4OUQwMDAzMTBBMzc4NzE4NkUwQTI4M0VGMEY3Qjc3QUMwOEYxMTMwCi06MTA4OUUwMDAzNzRGRjU4QTlCMkZGMTNDRkNBQUJENTMyRkJCNkUxODY1Ci06MTA4OUYwMDBGNEU5Rjc3RDFBRDM4OUI2RDhGQjgyOEY3MjdFRUY1NkUxCi06MTA4QTAwMDBFQTZFQ0MwNjdCNzE5Mzg5OUQ3RjkzNDhDNkFEMTRFN0NGCi06MTA4QTEwMDBCQkUzQjQ3QkU1NkJCMjIwQkY1RDYyRjY2NzdCQjMxOTQ1Ci06MTA4QTIwMDBFRENGNzZCQkM3ODM3MUQ3MzQwQjlFQ0IyNjkyQTcwREIzCi06MTA4QTMwMDBGNkY1QkIwNjU4RDRDOERGRDFGODJFQzc2MUEzMUM5QTNGCi06MTA4QTQwMDA3ODAyRkNFRkQ3OThGQ0YzNkVDQTgxMUJFQzQ4N0ExOUM4Ci06MTA4QTUwMDA5M0MzQjg5M0NBMjYxMUUyNDI4RUZDRkQ4MEFGNEZFMDZCCi06MTA4QTYwMDA0RTJEQzBDMzcxMDVFRjI1QUEzRUFFQTA1REZDQ0RCRTY0Ci06MTA4QTcwMDBCNzBCMjFCRUE5RUQxRjlFQjBFN0VEQzI4MjkxRjAzRTdCCi06MTA4QTgwMDBDM0Q5NkJEQ0FFNkE3OTNDNEEwMTc2RDI3MDJGRkRDNDQzCi06MTA4QTkwMDBGMDc5MjZGREJERjIyNTgwOUZFQ0VFNzJFMzdERUI3MzRECi06MTA4QUEwMDBFMDg0MTcxRDc3NkU2RDczNEQwN0IzNjBCQzZGN0Q0RTBDCi06MTA4QUIwMDA4ODlEMUY5QjdERDQzRDFENEM2NUQ0N0RFQjFDMEZCNzVECi06MTA4QUMwMDA5MUQ2NUQ3MTYyRjRGRERGNzQ3QzNFMTYwRkYxRkJENzI5Ci06MTA4QUQwMDA0MzBBQzRDMTFCOTU5QTZCRDg3Q0EyMjYwQkVDOEZBNkM3Ci06MTA4QUUwMDA3N0Y4NDdGOUQ2RjhFMTA4REQ3REZGQzNGOEY4RjM4ODk5Ci06MTA4QUYwMDA0QjYyRjczOEI1MjlCODRFRjgyODYxREYzNUYyNzFFQkQzCi06MTA4QjAwMDAyQkFFRjczOUFCNUU5QzBGRjY3MDZDQjkxQkQ3NkQ1NzY3Ci06MTA4QjEwMDAzOTQ1N0NGRTEzMTJCMjY0ODFCQzVDMTJBRTc3MzRDQTU0Ci06MTA4QjIwMDBFQUQ0MTM0MkY3N0I0NDJBMTk2MUE3RTU3QkZBQzU4RDg1Ci06MTA4QjMwMDA4NUY2RUY3MDc4NEMwRUYwMkJBNEFFNDNGMEREODQ0OTNGCi06MTA4QjQwMDAzOTYzQzE2RURCQzdBQzREODY3MTRDQTM5QkQyNTVCNDYzCi06MTA4QjUwMDBENURFNEQ4NzQ2NTcyN0M3QzkxRDhFODUyNkM3NzhGNkFGCi06MTA4QjYwMDAxREQ4QTFFMEIxNzYwQjdDQUZFMUEwNzFFRjM5MjZGRkYzCi06MTA4QjcwMDAwODNDODBGQ0JCRjEyMDJDODBCQ0M2MDcxQjRGQjVGQzE5Ci06MTA4QjgwMDAzRjFGMEZBMTgxMjA5RjFFRjEwMDcxMDhDN0I3QzI0MzhDCi06MTA4QjkwMDAxNkYwNTVDMzAzRjVEN0FFMDJGRTY4RkU1QUEzQzJGNjFGCi06MTA4QkEwMDAxRDZBNzkwRDA3NDVGNjdDN0NDRkE1MTBEQzNGNDRGNkE1Ci06MTA4QkIwMDA1OUQ5Mzk2RDRGMjJBRTU3QkNFQzY0NkQ3NDdFRDgzRUU2Ci06MTA4QkMwMDA5OEJBOTg2NEIyODNGOUVCREFFRjg5OEMwOTA5RTg1NzBGCi06MTA4QkQwMDA4RUExMDZFMTBFRjRFMzA2QTIzRDc0NzE3RTkxNzY0MTBBCi06MTA4QkUwMDA4MDdCMzc3MTZGNzkwNkY4OTdBMTY0RDA4QjMxRTZFMjBDCi06MTA4QkYwMDAxMEUwN0Y4NzZENEEwNkY4ODczOUI2Qzk1OTgwQUY1REE2Ci06MTA4QzAwMDAyMzU2QkQwRTQzRDZBRTAxRTUyRjZGNTFCQkZEMjdDREQ4Ci06MTA4QzEwMDBFRUI1RjA2QUI1RjY2Rjc0MzBGQjc0QkQ5QjlEMEYwMjI0Ci06MTA4QzIwMDBCQjFENDk4NzY2RkY0MTJDNDA4NzEwOUE2M0ZBQ0E4NkFDCi06MTA4QzMwMDBGNkJBQjkwREVDMzlEMDQxRjlCQTVGMjA0REUwMUZFNDI2Ci06MTA4QzQwMDA5QkRDMjk1M0MxQ0ZFQjE3OTI4MENFQ0VCRDVGMEM4NjQzCi06MTA4QzUwMDAzODY1NzFGM0FCNDc4MURFNjI2RDNERDRBNTVGMEYzNTlBCi06MTA4QzYwMDBGQUQxOUFCRkEzQ0QyQjM0N0Y0ODlCQ0Y4MkRGMDRFNTk2Ci06MTA4QzcwMDBEOUZDQjlEM0NDRDZBRDI2ODcyQzc4NkVGOUYxRjNFQUJFCi06MTA4QzgwMDA1NTZFQUVCRjEyRUQ0NzMxRUZDNzJEQTQxNUU5RDJFRUY4Ci06MTA4QzkwMDAxREI5OTlGM0EzRjgxMDlEODc2NjQzMzkyMTM3NTEzRURBCi06MTA4Q0EwMDBEQ0M0RUYxREI5QzlBNUJGNTdFMTk2QkNEOEY3OEU2OEUzCi06MTA4Q0IwMDBGNUY0RjZCRTcxN0NCOEQ2QjA2RUY0NkREMzQzM0U3NjUzCi06MTA4Q0MwMDBDRkM4N0ZGQUQ4M0M3N0QyMTBEMTJGQzE4MDlBOTdDRUU3Ci06MTA4Q0QwMDBFRTY5NzAzMjNFMUM1MjYyOEY1N0ZCQjlGRTRFMzJCNUMwCi06MTA4Q0UwMDA2NUMzQjlFNUZEN0JGRThFRTNFMzJCN0JGRUZFMUVGODNDCi06MTA4Q0YwMDA4OTEzNEY0OTA0RjZCNTRFM0EzNTJFMDFEN0U3RjNEMjIyCi06MTA4RDAwMDA3MDNENTlBQkQ3RkI2OTkzOERCMEU3ODgxRkVENzc1NzVFCi06MTA4RDEwMDAwRTUyN0FEQzBBRDA2N0MxRjRCNzY3MUVGRjI5RDQ3N0Y4Ci06MTA4RDIwMDBGMUI4NDQyMkNGNEQxNDJBOUVBMTEwQzcyREU0QkZCRjM1Ci06MTA4RDMwMDA3MzUwNjBGRTkyNTY3RTkwRkZFRUM1RjMxQ0I3QjAyMUQzCi06MTA4RDQwMDA0MkJCOEZDNDFDMjFFNzlCRjgzRDE5OUE1QzZGM0E1OUNFCi06MTA4RDUwMDA3NDRBQ0E4RTk2MEZGQ0ZEMzNFMjBCNUE1Q0ExOTlGMzVDCi06MTA4RDYwMDA4RkI0RkMxMUNGQjc3Q0E3RTk2RTA5RkNGM0VGQTQ4OTlGCi06MTA4RDcwMDBDNDFERDFFRTBDOTVDRUUwMjNFMjFDMkYzQjBDN0U0QUE1Ci06MTA4RDgwMDBDQjczM0ZCRDk5OEUyQkRFMzc0NERDNEFFODZEREVGRUE3Ci06MTA4RDkwMDA3QTM2RTQ1QkM1OThGNzhGMThGOUZCOURFNkJCRjFGRUM4Ci06MTA4REEwMDA5MTIxMDkyQUQyRDM1QkZCOTNBRUE2MzgxOTBENzIyNzA1Ci06MTA4REIwMDBDQ0NGQ0I2NUY3NzcxOEU1RkJDQTlFRkY0ODZFMUJEOTcxCi06MTA4REMwMDAzM0JGN0I5MkJGNTEwRUJGM0Q1MzgwRUI0RUJEQzlDMzM1Ci06MTA4REQwMDA4OERCN0RCNDlGN0VEQUJGMTBFREE3OUZGQTYzQUZGODAyCi06MTA4REUwMDA5Qzk4RkZCRDJGMERGMzFBNUVCRDdCOUY0RTA2N0Y0RUY0Ci06MTA4REYwMDBDM0U5RjQ2NDg2OUI4OUJCN0Y5QTRDRUNEREYyMzJGMkM2Ci06MTA4RTAwMDBFRDczMDdGMzZCRTYxMEQ3RUM5QkU5M0Y3NzBBQUU3ODdBCi06MTA4RTEwMDBCNDE3N0VEMjBBRkJCMzRBMzg4RDczMEUxN0EyRkY0MUY2Ci06MTA4RTIwMDBGODc5MTBFMzM4MzY0NzFDODlFN0RFN0JGREREOUJBMTJFCi06MTA4RTMwMDBGOTMyOTg1QkUzNzgwNUJGQzcwMkI4MzY4RTUzNDU2RkE5Ci06MTA4RTQwMDBENDQ5RTBCMjE1NEFBQjk4MURFMzdFQkE0Njk3NTFDRTlECi06MTA4RTUwMDA0NzQ4MDlGNkEzMjczQThEMzgzMEQyQUJGOUU3REFFRjY1Ci06MTA4RTYwMDBDMDUwN0U0QzRGQTJGNUREQUFFNjYzRkZBMkM2NjFDRURDCi06MTA4RTcwMDA5NzlFQzZERjlFRkE5NTlDQzBFM0RFMUNGRjE3NEU0RTAwCi06MTA4RTgwMDA3QjBCRDhEQjkzQkUxOUU1NjYyQ0Q3RUM0NzIxMzQ5MEQ5Ci06MTA4RTkwMDA4M0E5MUZGQzkxMjEwOUE5QTgwRjg1OTcxNEUyQTZFM0Q1Ci06MTA4RUEwMDAwQzE5QTgzRkZGNEU4QUFGNDBCQ0RERTM2NENGN0FDMjA1Ci06MTA4RUIwMDA1QkY1MjUxM0YxMjQ3N0UzNEUwRTNFNjYwM0RDRUQ5NjU5Ci06MTA4RUMwMDBFQTZDMTAxRkJEQ0U1RUJBMDY1NDZGREFBNzA1QjNGMDg4Ci06MTA4RUQwMDA5RTg3MzYxMzgxOTBEOUY0RTY3MzJEMTA0N0YwMUUyNTM2Ci06MTA4RUUwMDA3ODNFQTBBMDc5RkY1NEMwRTlFRkE1NTY5QzQ3NzU1RTc3Ci06MTA4RUYwMDAyNEU0QjEwODNGMzNEOEJDQzYwNjdFNTgzMDg1OUQ2RjQ4Ci06MTA4RjAwMDAzQjk4NDg3NEZCOTBGNzI3MzBCQzA2OEY5RkJGRDkxRDU0Ci06MTA4RjEwMDBBM0ZDMTIyRjlGNDlEQzI5RDkzODJFQzc2M0ZDQTM3MDBDCi06MTA4RjIwMDBCRDA5RkIzRjRENzAxRDQ4MDFCRjY1OUU4MEYzODVDRTk2Ci06MTA4RjMwMDBCRDEzMEVBNDUwN0EzQkVFNEM0NDNCMzMzREY4RTBERENDCi06MTA4RjQwMDA0RTJBODhDNkZGMUU4QkNGQkIxNjBBNzhDRjQwQTFFQUY3Ci06MTA4RjUwMDBDMjdDNjE1OTI2RUVERjk4RjA4RkU0OTlDNTUwM0U0M0ZDCi06MTA4RjYwMDBDNkY5Q0Q3NEIxNTI4Mjc4RDREOTM0MjEwN0U2OEI3QjBGCi06MTA4RjcwMDA4NEI2NUFGODFENUM3RjI5NkI4NzM4RkRDOTMwRkY3Q0E5Ci06MTA4RjgwMDBBNzM4NzkwQ0ZFNzY5Q0FBRTU4N0UxRUYwMzEyQzMzQzczCi06MTA4RjkwMDA2REQ1Q0UwQkZCQ0RCNDdDRDU2QzAxRjdFRjRFNzc2NjZCCi06MTA4RkEwMDAxMDdGMDQ3RTBBRDc1Mzc5OEVBNUI4NkNFRTVGMDBCOEE3Ci06MTA4RkIwMDA5RTU5QTQzRjM3MzhCQkM0NDYwMjkxRUIxNjgyMTNFRjhCCi06MTA4RkMwMDAyMTNCQzhGNzY5NzcwOUZDNUU3Q0FFRTczNzcwQkNDRjAwCi06MTA4RkQwMDA5OTlCQUNGQkFFOTQzMDNGRDNCQjUzNjRGNzcxRTRCM0MxCi06MTA4RkUwMDBERkExRDZGNEVCNDZBRTg3MzdGMEY5RjEzQzRGODY4RTIxCi06MTA4RkYwMDA4RTYyODhEMjg4NDAzRjVCNDdCRUU1NjIxQjBFQ0ZBNURDCi06MTA5MDAwMDBFMjA3ODdFN0QzRjY2RTFDNjE5OEQ3OEE5NTZCMTExNzM0Ci06MTA5MDEwMDA2OTZDMUQ2RjM2RUM4MjEzQzE2RUVBREZCQjI1NEY5RjcyCi06MTA5MDIwMDA4RkExQzc5N0I1MTM5QTNEOThCRDU3QzQ3NUMzRDlGOTk5Ci06MTA5MDMwMDA5NENGMDI4OUYyRDNCRkFFQkQ5ODYwNzIxRDgwNzhEMDA0Ci06MTA5MDQwMDBBRDk3REM3ODhGNEU5NEJERjhBMEU4MUJEOThCREY1MDJDCi06MTA5MDUwMDAxRENDQTM3QUZENjQwMjFGMzcwNzkxNDE2MDM3QTY4QkIwCi06MTA5MDYwMDBEQjdFMEEzOEVBQTRFM0E2MzkwNjhFQjQ3MTQ3OUJFRjhCCi06MTA5MDcwMDAxNzUyM0QwNkRDOTAzMzZDOUQ2NUZBQTUzNERDRUZBNEY1Ci06MTA5MDgwMDBDREY3QzM3Njg0RkEyNUFFMThGRUQyNkYxMkIyNzRGNzBDCi06MTA5MDkwMDA3QTg0RUQ0QTg0NUYyMkU3N0U3QkJGNjQzQUY1NDc5NTg4Ci06MTA5MEEwMDAxQ0EwNkYyMEYxOEY0NTdCODY3MUM5NDJEODE4MDVGMTRECi06MTA5MEIwMDBDMUI0NzMxOEU3RjE0QTc0RkU4QUUzRjNEMzg4MkZCMDgyCi06MTA5MEMwMDA3RjQyNTJCNzdFMThGRDE1MkRDRTNDRDZBOUY5NTM3QUIyCi06MTA5MEQwMDA5Qzg0RTM4REIzRDg3REE1MUE0RTBBODE5RkEwRkZCMzZGCi06MTA5MEUwMDA0NDhDRUJGNDg2MUJBREZEREVGMDEyQTJGNjA4NEM1NjY0Ci06MTA5MEYwMDA4Rjc4RTFGQUY3NzVGMUYyMTc2RDdDMTk0QTg2RjYwNTVCCi06MTA5MTAwMDAyNzFBM0UzNEJDMThDNzlCRkYzNEM0ODM3QTFBNkZCQTNGCi06MTA5MTEwMDA3QTE5NkYwRThDOTBEMUFFRjdFNkQ3N0NFQUU0RjNFQUM5Ci06MTA5MTIwMDAwNDI3QTYzNzVDMzUxQjdGOTc2ODJDRDgxMUYwMzdGOUQ4Ci06MTA5MTMwMDBCODE1OEU2QkQ1MzM5QzFDNjg1QjI0QzFGQTkxMTdFQzczCi06MTA5MTQwMDA0NzY2QjcxQ0I0NzhGMEZGMDBDNkM0ODFENTAwODAwMDI0Ci06MTA5MTUwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMEZGQkQ3QzI1Ci06MTA5MTYwMDAwQjdDNTRENUI5RUZCNzY3RUY3OTI0MzM0OTY2OTI0OTQwCi06MTA5MTcwMDAzMjNDODQxRDA4MjEyMTA5MEUyMUJDMTEzNzQ5MDgxMUY4Ci06MTA5MTgwMDBBMjBDQTg4ODhGRDYwMTFGNjAyMDA5NERBREQ1NTM2RjYyCi06MTA5MTkwMDAzMzIxODE1MjZDM0Q1OEJERDY3QkY0RjQzNzU4RUQ0MUY0Ci06MTA5MUEwMDAwRDc1MDgwMTgzMjc3MDI2QTA5OEYwRDAyMEY4QzA3QUFBCi06MTA5MUIwMDBEQTY4Mjk0NTFCOTIxODVBMEY2QUNGRjU3Q0RGQjdGNjlCCi06MTA5MUMwMDA0RTY2MjY4M0E1RjdERTczODc5RjJFRDY1RTZCQUZGNUJFCi06MTA5MUQwMDBBREVGRjk1RkRGNUE5QjRBQzA5RjBBNTBCMzE1MjA5ODQ0Ci06MTA5MUUwMDAwNjUwRjlFMTg2NEE0ODA2RTgzQjIwMDExNDAzRDQ5NjZDCi06MTA5MUYwMDBDOTQxMUJGRUI1QjRGREIxQzc0NUREMEM1Njg5REY1MTMxCi06MTA5MjAwMDA2MTI2QzBGNTIwN0UwQjk1MEVDNUU2MDY1OEU2OTVCQzk2Ci06MTA5MjEwMDA3MjE2ODBENjJFREVCRkUxOTIyNUE4NjJGRDdBQUZGOUU0Ci06MTA5MjIwMDBFMzFFOUJFOEZCMzVGRjVGMDNDODAwQjg1MTdGN0YxOTQxCi06MTA5MjMwMDBGRDBGRkIyRkQzQTQ2MDE4NUY1RDM2M0JCQUZGOEQ5N0ZGCi06MTA5MjQwMDBDQTNGOTFBNjAyMkNENzYyOUVDMzRGM0U5M0E3RjIyMjNCCi06MTA5MjUwMDBDQ0JFMjRBQzU3NDRCNzhGNzMyNkI5Q0ZEOUYxMkZFM0Q2Ci06MTA5MjYwMDA2MUZDRDczMkMwQzVGMzY1NkY1MUY3QUZFOTc3RURDODQwCi06MTA5MjcwMDBGMjQ4M0Q1MjY2MDFFOEFDQjc3MTE5REI1RTZFMDE3RkMyCi06MTA5MjgwMDBDODgxMjU0RDUwQzQ2NTAwNTIwMTBBOURCODk4MTk1OEVGCi06MTA5MjkwMDBCRjY0MDEwREY5MDg2MzEzRTBGN0I5M0ExRDEzODZERkM3Ci06MTA5MkEwMDAzRjg4RTMwNzcwREMzMDhFMUZDODAxMzg1NEVGRTRGQUMyCi06MTA5MkIwMDA2QkY1MUVBRTVGOTM4MjJGQTRFMzdGODdCRkIwQThCODgzCi06MTA5MkMwMDA5RUM1RURERjUxRkMzOERGRTI0QjBBOEYzQjlCRDY5MzA2Ci06MTA5MkQwMDA0RjBCODM3MUI0OUUzRkY3MTZGREUzMEQzMERDQkZCNjM0Ci06MTA5MkUwMDBGRDMzOEJCRkYwRjJFQkY5NUJGM0U3QTdBODNDM0ZDRDcyCi06MTA5MkYwMDBBQjE1MENDRkJCNDQwMTE4ODNFQjVDOUExQkNENUY2M0FECi06MTA5MzAwMDA5RTU4RjlDNkNBNkZCOUZFN0VBQ0ZDNTZDNEFDQzc5MDc1Ci06MTA5MzEwMDAwRkY0QTIzMjhEOEFDM0ZGNEIyNkQwQTY1RjVFN0U0MzM4Ci06MTA5MzIwMDBGMkIxRjhCM0JEMDUyM0RCMDE3RUM5NzIxQTFFNEY5NzU3Ci06MTA5MzMwMDAxNzc0MkJCRTQyNDE5NzE5RjVCQTUyQjcwQkQ0RUY0MEMwCi06MTA5MzQwMDAwQUNBQjlCMjEzQzI4OTQ4RDhGNUU3MkIzRTUxQThGNDJFCi06MTA5MzUwMDA0QUYwNzE5NDNFMDM3QzZDQzg1QjFFMUU3RkQxMjVFNEVECi06MTA5MzYwMDA2QkRBRjBCQzhCMTQ2NDc3MTEzRDFGMEI4MTM4RUJBOENFCi06MTA5MzcwMDBBMTcxMTRFQTFGNjAzOTZDRDk2MTVBMTVDMjc1NUM2MzFBCi06MTA5MzgwMDA4MTNCN0Q1NDI2OEEzMkUwOTRCODdEOTNEM0M0RTNGNkMyCi06MTA5MzkwMDBGRkM1NjY4MkFCMDE1RTNFOTg1OTAyNDg5RkQ3RUEzQzAyCi06MTA5M0EwMDAwNjEzMDE0MjY2RTBGN0JGNEU1MkI5REZFNjI0MDgyNEY3Ci06MTA5M0IwMDBFMEZDQTA3NERCQzg1RTk0MTI4MDVDQjQzQjY1QjQyNTBECi06MTA5M0MwMDBEODg4NDMzNjJCNjExRkQ5NjFCRjU3ODEwNkI0REIyRjg0Ci06MTA5M0QwMDA4REY3MEUwNTZFMDcxNEM5RTY4RjczNEM4RDU5RjQ3RTE4Ci06MTA5M0UwMDBCODdCMUVGNjlCNTVBNEE4REJCMDhCQ0JBQTdFODdEQTkwCi06MTA5M0YwMDBGQjBFNTg5REY0NUVGRkZFRUY3Nzk4Njk5Q0JGODAxN0M3Ci06MTA5NDAwMDAyOTg0RDcwRTU4ODFEQUU3M0JDQzQxRjIxRjhCRTRFMzg1Ci06MTA5NDEwMDBCMjA5RUJGRDAzMDA1NkVDM0Y3RjU1QjgxNDUwNkVEN0YwCi06MTA5NDIwMDA0MDc3QTMxM0NCQjkyNEM3MzhGMjdCOERENjlCQ0VGRUYxCi06MTA5NDMwMDBDMzMxMEFFNUI0NDA5N0QzMDJERDZGOTUxRTkwRDk4RkYyCi06MTA5NDQwMDA5NDI2Qzk0MUM4MUFGNjUzRDdFQTMyNUE4MDZDMjUzQTk1Ci06MTA5NDUwMDAxNkI0RTE3QUIxRkREQTRCNEE1Q0JGQjQ0ODFGNzdFMTNDCi06MTA5NDYwMDA5RjQxMjE5MzVDMDhEMTdBQkJBODRERjhBMzEyRDAxNDc4Ci06MTA5NDcwMDBDMDI5NEI2RDMxRURFNDk3OTA5RTQ1Q0VFOEU3NzNDOTY2Ci06MTA5NDgwMDA3N0EyNUVFRjhFRjE0QkY4MzNEMUJDRjczQkM1QkM4QkI2Ci06MTA5NDkwMDBFNEJGMjZGN0UwRkE1RkI2NjhFRkNENDM3QTA3NEU5QTRECi06MTA5NEEwMDBFMTU5N0MwRUU3QjEzMjY3MjQ1RkRBRDBBRTgzMzk5Nzk5Ci06MTA5NEIwMDBCNzhCRkQwNzEzMzUxNUU5Nzk5OUY0Qzc0MUY1RDE5QUIyCi06MTA5NEMwMDAzQUY1RjJGREE3RjYwQzk0NjA3Nzc4Qjk3OTg1MDIxMzI2Ci06MTA5NEQwMDA1ODFENEY3QjMyODZGOTNEODJBRjNBRkY2M0Y5RDkyMjlFCi06MTA5NEUwMDA0MTkzMURGOUJDQjBERDVCNDZBRTY1MDQxRjNCOTE4RjE3Ci06MTA5NEYwMDBGODVFQzk4MEM2RjM1QzI5MUYwREZCNzhGOTVDQTI0NkIzCi06MTA5NTAwMDBGQUZFRjJCOUQxMUFDREZGMkFFOTZCRkFCMEZFRUYzRkFECi06MTA5NTEwMDAzQjk4NDhGRTEzRjlBODJBQTgxNzAzMkU5QkY3NTlENkEzCi06MTA5NTIwMDA1RkExRjdBMTUxMzlDMTZENTg2RkQxRjVGQ0U1QzQ4MTM4Ci06MTA5NTMwMDBBM0Y5QzRFRkVCNERERTY3NjkxQTY1RTNDNDE1ODVFNDUyCi06MTA5NTQwMDAzN0I3OTY5Q0M1NzcyNDBEQTQwN0QxN0UyNEQ1MDk3NzFCCi06MTA5NTUwMDA2MDE5NDBGQjIxN0QwQkE0MDJFQjkzMTk0MjQwRjMzNkM2Ci06MTA5NTYwMDA2QUYwMzQ5NTBCRTZBQjI5QzRFRjQxMUNCM0RCNDFFMzUxCi06MTA5NTcwMDBBOTI5QTRFN0YwRDc4QjMzN0Q4NTIzRjlERTUyOEYwQTIyCi06MTA5NTgwMDA4NUYzQjRENkRCMzQyNTFCNjA1RkJEOTNFQjZERjUxRTEwCi06MTA5NTkwMDAyRTVGQUQ1N0I5REM3NDJDRjlDMTIwOEU1M0FCNTkzNDEyCi06MTA5NUEwMDAyNTZERjg3RDU3QUFCMDhGMDVFODY3ODhBRTA1MjAwNUMwCi06MTA5NUIwMDAwM0E4NzMwQjFFRDZGNTVFOTE4MjlCMjQ5MjEzQUUyN0VGCi06MTA5NUMwMDA4MjlGMjg5N0MxOUVEQzA4RkUzNjI5NEQ5MzY2QjIzNUVFCi06MTA5NUQwMDBCMEJDOEJGMjRERkMzRTA2RkZFMEYzNTkyM0ZCQTNEQzRECi06MTA5NUUwMDBBM0VBQUE0QjYyN0VFNkJBQjQyNDE3OTYzRjc0Rjg1MkY3Ci06MTA5NUYwMDBBODZDOTE2RTM5N0MwMUI4RUUxMkY1NUJFNTBCMzhGRTc0Ci06MTA5NjAwMDBGNEYwNDI3ODEwRTNDMzc0MTQwQ0YxMTU3RkI3MTNGRDI2Ci06MTA5NjEwMDAzMzNBMkM0MEYyQzE4MENBNzY1OUE0RDNBMzdEMkU0OTk3Ci06MTA5NjIwMDBFNzcwM0UzMjlEQUZDN0UwN0JENkNBMzBFOUQxM0VFODU1Ci06MTA5NjMwMDA0OTIzQkUxN0RCN0M3NkI0MjhBNDQzQzg1NTkzNkVGNjQ1Ci06MTA5NjQwMDA0ODM4REU5Qzc0OEI1NzI2RDIyNkZBQTY2RjQ0RkU3NUU2Ci06MTA5NjUwMDBBNEUzODREOEJGQTMyMzYzQUM4QUY2QTYyOTZGQkM0RkNBCi06MTA5NjYwMDA3NkFERDkxQzYxODEyQkNDQkQzRDExNzEzQzEzOUU3MTJGCi06MTA5NjcwMDA1MkJDMjI5RkY2MzVGMkJERjM3N0M5MDFGNjZCODg3M0IxCi06MTA5NjgwMDBDODhGNzU5RTRBRjY4NjcxOUU2QjJFRDlCQzU2RDI3RkM2Ci06MTA5NjkwMDA3QTExRURGNTYwNjJGMjU0RjJDRkQwNURDNkVCQjhENjI4Ci06MTA5NkEwMDAyNkQ2OTE2RkY2MTdCQkQ4OUY4NTBGOUZDMEY3RkU2RDJBCi06MTA5NkIwMDAxMDgwRkNFOTM1REQxRkNBODBGNDk0OUFGMjMyN0I5MDY5Ci06MTA5NkMwMDBDRUMzRDJFNDE0MkE5RkZDNUQ3MjAxOTdBNzkyN0I4OUQ2Ci06MTA5NkQwMDAzRjA3NEQ3Njk1RTY3REE3NUUyRENFNDY3REQxREU3MkE1Ci06MTA5NkUwMDA5ODAwMURENjgyQjcxQzBBOTUyN0VBQTEzODFCRjVFNTFDCi06MTA5NkYwMDBBRDdBMUI5NzI3RUI5RDVDOUVBQUY3NzA3OTE4REI0OTIyCi06MTA5NzAwMDA5RjVFQzc3NkQyQjczN0IwOURFQTVERDg0RUU1MzExQzczCi06MTA5NzEwMDA5N0NBQTJEQjkzNzhCQzk2REI5MjJDQjQ4RTgzQzlEMDE3Ci06MTA5NzIwMDA2Q0NDNEZGQTE0NEUwQ0I3ODIxN0UwM0YxRUZCNkFBQkFECi06MTA5NzMwMDBFRDJBOEM5NzU2N0ZBMTM0MERGOUY0QjNBRjJBMTRBQ0ZGCi06MTA5NzQwMDAxRjVCM0NFRUExQkY2MEJCRjk2N0E2MUZEQjkwREU5QkYxCi06MTA5NzUwMDA0RTM5NUE4RjYzREQ5RUFBRkNEODQxRkE3OTJDMTE5REFGCi06MTA5NzYwMDAyMzk5QjVCOTRCNDMzQUE2OTM2RjFDQ0Q2Q0Q3NjAzNjlECi06MTA5NzcwMDBENkQzRjQ3QUMwN0M1REQ5N0M4MDk1QTUzREY5RTA0MkQyCi06MTA5NzgwMDAyNTcxNTlBRkIzMjE3RjU3REFGRERGQTNCQTI1QjBBQkZFCi06MTA5NzkwMDBBMkVDMkFBQTYzODgyNDdCOTdDQzQxQjZGN0IxOTI3QkNFCi06MTA5N0EwMDAwNUM2QkI5NTBFRkY3RjEyQkYwRDdCRDFBNDNGQTQ5MUQwCi06MTA5N0IwMDA3Rjk4QTk0OUUwNzJCM0JDODM5M0E0RTFFNzQ2QkY5NUMzCi06MTA5N0MwMDA4RTQ1RkY0OUZBQkFERTI1QjM3RENEOTgyRjY5NDFDNzkyCi06MTA5N0QwMDA0OEZCMzVGQUNEMzhBQjk2OTFGQzY2OUUyRjZGQTI3MjhFCi06MTA5N0UwMDA1OTg1OEJFQkJFNTVCMzlBQzhGRUNCMUM5NzdCQkY5NEIzCi06MTA5N0YwMDBERjdGRDA2NTY2QkQyRDUxQjA1RjlDMzg2OEY0OUI4RUNECi06MTA5ODAwMDA0QTQ2Qjg3QkEwMkIzMUY4MkNFOUY1Njk3RjYzMTJENjY0Ci06MTA5ODEwMDAxNzc5QjI4QTY0REQzNzAzRDc1RDNCQjY1MTdCRTVFQjQwCi06MTA5ODIwMDBBRDZDNTdERTI0MkZFMUYyOTlBODkwNjlEOEJFRDAyMTAzCi06MTA5ODMwMDA3OUMzNjQyQUYzM0Y2QTRBQTM3NkE3RTQyNUI2MkRENEY4Ci06MTA5ODQwMDBBNjlEMjhBNkY2NkNEOUJCOTBFQUE3RDUzMjBBNTFBN0U3Ci06MTA5ODUwMDA5NDg1RjMyRTYwQkZDNUI5Mjk1RTFCQkU3NzJBRkNEMDY0Ci06MTA5ODYwMDA0NUQyREY4NUI5NDlERTA0RjJGMzRBRjBFOTFBQUE3QjUyCi06MTA5ODcwMDBBRERFMDY5NUQ2RjE1ODY5MzI4REEzNEE1RTEzRDY1QkVDCi06MTA5ODgwMDA2RTI4RkQxRjQ0NDc4OTJGMDUyNDg5REE1RDBBRTFENzM4Ci06MTA5ODkwMDAyNzdGRjdDMzMyMjdGNjZCMTkyNzAxRDlDRkE5NzBERUNFCi06MTA5OEEwMDA5Rjg4RkU4NTlEODk2QTAyRjk2OThCQjM4Q0RFNkJCMTU2Ci06MTA5OEIwMDA0OENFNEQ1Q0Y3OTU1MkZGNDA4RTU5N0QxRUM3M0Q3RUM4Ci06MTA5OEMwMDA5QjlERTM0MUU1NUIwNThDODM4RURGMzY4NkUzNDJFNUI1Ci06MTA5OEQwMDA1QkYzNEJBODNDNkUxMjc4QkRGMkFEQ0EwQTZFMzc0MUZECi06MTA5OEUwMDA5ODlDNEFFNUVEREZFMkY3QjY5N0ZFQjBDQzhERTMxRjFBCi06MTA5OEYwMDAxQkVGNjJERjgyNzIyQTU2MjJGQzI0RjYwNzg5REVCRjQ0Ci06MTA5OTAwMDBCRDlBRkI3NzQ4OTkwRjlEQzVGRTE3MEI1MjhBQUMzODVDCi06MTA5OTEwMDA3RkI5M0IyMUFBN0ZDNTU4NTc1NDdENDlGNkE4NjIyNUQ3Ci06MTA5OTIwMDBDMjRGNTYxNjY0NDVENTZGMjg5NjhBQjMyM0ZBRkJFNkQ0Ci06MTA5OTMwMDAyNzQ0RDU1Nzk0Qjk4QUIzMjNGQURGNTQzOTJBQUFCRUVCCi06MTA5OTQwMDBGMkE2QUNBOEZBNDJEMzFDRTEzRkVBNjE3RTk5QjBGM0RCCi06MTA5OTUwMDBGOTY1RDkyMDhDODlGQ0E5NTNGNDdEMDNEQkVGMjYzQjA0Ci06MTA5OTYwMDBFRjEyRjhBOUM4ODVGODA5RTU1MkQ2NTVDQzcxQjlEOEQ3Ci06MTA5OTcwMDBBRUZCQUYwMDc0N0I2NjkyRkYxN0JGMkUxQzhGREU4Mzk5Ci06MTA5OTgwMDAyMEZFOTk0OTc4NDhGQzE2NzYyMzFFMjA3Q0E0NjBEQ0QyCi06MTA5OTkwMDA4RUEwQTdDQzExMURDNzJCNDBDRDI3RkY1QkQxQjk4NDZBCi06MTA5OUEwMDBGMTU0Qjk2Nzc5MTk5QTMxRjIzMUZBQkQwQUY5NjE4MTM2Ci06MTA5OUIwMDA0MzYyRTgyRUVBMzJDN0E1Qjc2MjZDRjRGQjA2QUVBQjkxCi06MTA5OUMwMDBEMEU5NkIzMUY5OUI1MjA5OEIwNUI0NkVDMjM1QzY3QTZBCi06MTA5OUQwMDAwQzNBMkVCNzlFMEFGOThFMzIxNEZGREY1QzU3MkNGRDJECi06MTA5OUUwMDAwMDFCNzk3RjExNEJEN0EwNEJDNzgxODhBNzE4MDc3NjNBCi06MTA5OUYwMDBBNjMyM0VDNDlGM0IxRTNFMzA3MDRGMjVGQTM3NTdBNDE3Ci06MTA5QTAwMDA3RjczNDhFRUU1ODU5N0Y3NkZDNkI4OTdDMzdCQzZCOEY2Ci06MTA5QTEwMDBDNkZCRDAyQ0YzRkNDNkZCNDNDRjU1MjlGRUYzOUREOEUzCi06MTA5QTIwMDAzRjI5Q0U3M0I3MTRGRkY5NzNEMUZEMTcyODZBQTMwMzNBCi06MTA5QTMwMDBFREY4Mjg0OERFMDBGMUZCQjhBQTEwMjQyQjNEQUQzNTI3Ci06MTA5QTQwMDA1MUI5RTg0M0JGNDI3ODc0RjFEOTQwMTM5NUYzN0E4MzUyCi06MTA5QTUwMDBDN0FEQjhGRUVCNzI2NTk1RjIwRDA2MUU4QTVERDc4QzE4Ci06MTA5QTYwMDA1NEIxNEYzQTdBNDlCNUFCRDhERTEyNTBFREI0QkY2ODY1Ci06MTA5QTcwMDA3OTU4QjVEMzNFQUE0NTgzMEFEQTJGNkExMzREMUI2OTdDCi06MTA5QTgwMDBCRkExRTU2Mzg5RjU5QzU0RTFFN0YzNTIwNThFMzFDQTI1Ci06MTA5QTkwMDA2NzY1N0Y1RTJBOTZENUI2OUU0NzA5OEJENDdDMzE2MDc4Ci06MTA5QUEwMDAyMTMwNzA5NDcwNUVDMTQ4OUM3NzU0MDkzQTY4QkVBMzE3Ci06MTA5QUIwMDAwRjA3MURCRTA4M0Y3RUE1Mzg2RjE0Mjk1QjNBRTlBNzQyCi06MTA5QUMwMDBBNDQ1RkE5MTUyNUI4MjE2RTkzNzE2Mzk1RDUxRjVBRjFDCi06MTA5QUQwMDA5Q0FBRDhDNzdCNDY0NUJENzc5RDlBMTVENTBGRjE2QkRCCi06MTA5QUUwMDAyRUUxQTA0NjBCRTQyQUU0NDc0RDg5NUVDMjc3QjE3Q0EzCi06MTA5QUYwMDBGQzE3N0RGRDVFODc5M0UwMTM5OEREQUFFQzhGMTM5NzJBCi06MTA5QjAwMDBCQ0E1ODI3RkIxQ0Y1N0E0OEE3REVBNkY2ODNENTg2RUFECi06MTA5QjEwMDA0RjE1RjQzNUM5M0UwMUUyMTAzNzkzM0VDNEQ2NzE0RjVDCi06MTA5QjIwMDBCQThBQzZDMzkxM0RBNDc3NUVCQkU5MjI0MjZGRjg0RTY0Ci06MTA5QjMwMDBFQUQ1RDcyOUE4Q0ZERUU5QTZFRjRFQzRGQTIzQTk4QjMwCi06MTA5QjQwMDA0NDdEOUU2OUNGMDRBQ0ZGMzRCNTVDRDRBRjM2NEQzNzRECi06MTA5QjUwMDA3QjAxN0UwNThCQUYyQkMzN0FCQURCRTc0RkM1NzlGQjYwCi06MTA5QjYwMDBDRDhFQUQxMkUyMTlDNTI0NDE5MTdCNzhGRkZCODgwNUFCCi06MTA5QjcwMDBFMzI5MEExNjk1NEM3MzIxQUQ3NkFCRDgyRkQ3MjRBMEQ0Ci06MTA5QjgwMDBGRkEzRkUyNTlBNEFGQ0FBNDkzMEU0REM5MzQxNzExREVCCi06MTA5QjkwMDBFRUNFMzQ5MUJGMzBGNjZGNzYwQkJFODdFRkU3RDhGQzgwCi06MTA5QkEwMDBCNTQyNUZDMkM5MkFGQUE1RkJGNzJGQ0EyNEJERDg5RUM5Ci06MTA5QkIwMDBFQUU0RjVFN0VGOTlFNzIxN0Y4NTc0N0Q5N0ZBRkQ3RjY5Ci06MTA5QkMwMDBBNDZCNTMzQ0JBOUFDQzYyOUVERTk2RkM1MjhBQkJGOUQ3Ci06MTA5QkQwMDBFMzUxMUNEMkIwQkM3MEJCQ0ZDRjEzNDJBODJCOENDQkFGCi06MTA5QkUwMDAzNThGODRGNTQ2OTdDNTRCMzg3REZCOTA3Q0FGQUM2Q0M4Ci06MTA5QkYwMDBENEYzMTNCMjVERTg4RDlDNjJEQUI4MUJDQjlGRUJGQTBECi06MTA5QzAwMDBGMjE0Q0QzQjgzRTYxOTE4QjcxQ0Y1MDE5QzAzRTM1NjBCCi06MTA5QzEwMDAxNDhBM0FFOTgzMkMxNzBEMTBERTFFRjg1NjkyOTdGNzM2Ci06MTA5QzIwMDBDNzYzMDc3RUZCMDNBQ0JGNzc0N0JFOTc3MEY0MDc4OTE1Ci06MTA5QzMwMDA4MjNGQUI4MjEzMUE3QkIwM0VDRDFBQkMyQThDNzQzRTk1Ci06MTA5QzQwMDA5NEU2N0Y5NkY0RTAzNjZCNzAxMkVCOUI2MzYzMTI4REEzCi06MTA5QzUwMDAyRjY5QzBGQjEwNjM3Rjg3RkIzOEQ1MzI3MTI0RUUxRjVDCi06MTA5QzYwMDAzOTJGRDg4OENGQjdDQzExN0MzNkU2NDU5RURBMjhFRTVFCi06MTA5QzcwMDBCQzM3NUIzQzM3RThDMEY5NUI4OEZGMDYzRDQzNzRDMEU2Ci06MTA5QzgwMDA1ODI3QzcwMzEwNzlBNDQ1QjI0M0U0NjFGRjYwRTJCQ0UyCi06MTA5QzkwMDA0OTJEMTkxRkQ2Rjc5QzM1RjFCRUFFQ0ZEODU3ODBFNkI3Ci06MTA5Q0EwMDA1ODNEOTM5Qjc4OUUzOTI3MzZDOTRDNkMwMEZGQ0NENDI1Ci06MTA5Q0IwMDA1OTQ4QUZCNkFERTc3REZBOENFRUU4N0RGQUFDNEU3RjQxCi06MTA5Q0MwMDBBOTAzREY5QkY1N0VGQzdDQzgzQzdERENEOTEwOTQyOTgwCi06MTA5Q0QwMDA1RUNGRTk4OUVFMzc0RkRGQTdDRjNCMUZGREZDQ0Q1NEE4Ci06MTA5Q0UwMDAzREJFOEQ4NkQxOTE3OThFM0E3REZGMzM3ODdDNDIwQUQ0Ci06MTA5Q0YwMDBFOTI5RjkzQTE5Rjk2RTUxNjU5ODlEM0FFQzM3NUFFQjEyCi06MTA5RDAwMDBCMTVGMEVGOTQ3MUI5Nzg1QTc5RDc3MTFGRDZERjVBOEVCCi06MTA5RDEwMDBEMDE2RjI5MzFFMkUwRDdCMkEzQzBENzdDMkQ0ODg3OTgzCi06MTA5RDIwMDA3NEJEMzdGODM4RjhCRUUwRTNCNDlFREM5RkNGQzdCQTA1Ci06MTA5RDMwMDBCOUQzMEM0MTc1Nzg5RDczNzUzRTBEODJFMEYzQTBEM0M1Ci06MTA5RDQwMDBDMjdDOUVEOUY1Q0JFOTYxN0M2NEY1OTg0MDhENTg1RjYzCi06MTA5RDUwMDA4MjlBMDg2QTg0M0ZCNUU3QTY0NkQ1NjU0MzNFM0FDRTY3Ci06MTA5RDYwMDA5OEFFOEY5RkU0MUQxRDM1OEU4MTM3MENGOUJEOUE1QTMwCi06MTA5RDcwMDBERTQ5Mzg2NEJBNjMxREUzOEU5NEQ5MTNBMkM2MkQzRTIyCi06MTA5RDgwMDAxRTJCMjc2NDFDRTE3NjI0RjI5RjA4RDc5RjU2QTI3MEYxCi06MTA5RDkwMDBDNjJDNzc4MDM4MDBCMzNGNTQ2MjcwQzk3Njk5RUM2ODVFCi06MTA5REEwMDBFRUQ5RThFN0U2QjRDQkM4RUQ3MkZDODRBOTNGOUZFRjlCCi06MTA5REIwMDBGRUZCRjlFOUQyQTJGOTk5NTYxMUNEQ0Y3NDVGMzQzRjc5Ci06MTA5REMwMDAzMzU3NDVGMzZEOTQzRjlBMkY2M0Q2NEQ4OTZBQkY2QTI2Ci06MTA5REQwMDA2MzUxNTQ3REZDODM3M0EzRkE2NzYxMDA4Q0FDNEZEQzQ0Ci06MTA5REUwMDBCQTI0QUFGRkE0RUQyQkEyRUE5MzlGQkEyREFBN0Y1RTA0Ci06MTA5REYwMDA3MDRENTQ3QkZFQ0VBQTJCOTI3RjYxQTgyRUFBMUZCMTc0Ci06MTA5RTAwMDBEN0Y0MERGMkJGQkFFRDFGQTJFNkY5RUY5NkZGQTIzNDI4Ci06MTA5RTEwMDAzRDJGQUZDQjdGOTk4RTQzNUMxQUZBQzdBMkUxMzg0NTNDCi06MTA5RTIwMDBFOTE1RjI5M0FFRjYzN0JFQTBGQzRCQTA0NEU1QkM1MzU3Ci06MTA5RTMwMDA2MDA5NzgxQkIxRUQwOUQ5Mjc5MTVGMUI4M0FDMzZBMTZFCi06MTA5RTQwMDBERjY4MzJDMTNBRjJGNzhGOUE0QzlDODczNEVDQkMyQTE3Ci06MTA5RTUwMDA0REUwOEJBQTM0RTFGNzlGNDY5QkE2Rjg2NkYwQ0ZFQzY1Ci06MTA5RTYwMDBERTlFNDQ3ODQzMzY5OUEwOUJFMjlBRTI2NUJGNzFDNkI0Ci06MTA5RTcwMDAwMUUxNkI3MTNFNzkzNDcwNUVBQjM0NzlGNkIyOTlBODJBCi06MTA5RTgwMDA4N0YyOUIzMkVGMUZFNUQxN0U1MDcxN0Q4REM3MUYzRjVBCi06MTA5RTkwMDA0MUY5OUY4QjBFOUI0QUZBMkFBN0ZBMDMxNEI3NzA3REVCCi06MTA5RUEwMDBBMUU3NjEyNDVFNzlBRjNFM0M4OUY2NDk0NjdEOTU2NzFFCi06MTA5RUIwMDBFMzY2RUFCRkVBOEU4NTkzNjhGRjNBRjRGQzhFOEU0OTJBCi06MTA5RUMwMDA2NTExNzI4ODVDREY4QTM4RjhFODdCNjkyMjNGNjdDNEQ1Ci06MTA5RUQwMDA4N0RCQUM2QTYzMEZDQTZCOUEyQ0ZDM0ZDNjg1RUZBNTgzCi06MTA5RUUwMDBFMUZBM0Y5MDFFMzYwQjlDMTUzMEQzQkEzMTRFNzJERTJDCi06MTA5RUYwMDBERjg1ODBCQTBFQ0I5NEUxNzhBNDdFOEQ0QUY1QzE4NENCCi06MTA5RjAwMDA2OERDRjkyNjExNDRGQjA4NUIyQUM3RkY1QjBEN0ZCQkE5Ci06MTA5RjEwMDAyRThGRjkzNkU4ODhFRTNGNzhGNzQ0QzFDRjZGMjNENzBDCi06MTA5RjIwMDA5MERGNjcyQzYyMUQwNkRERTc3NTNGRkNBOUVFODc3QjlECi06MTA5RjMwMDBDOUZGNDZFNDlCRDdFRDc4M0M4OUYwRjU5OTVDODFBNzkxCi06MTA5RjQwMDA4REU3Q0ZFODcyN0QyNjRERTBFOUY1M0IxMzlDOTE3OUQyCi06MTA5RjUwMDBDN0VBOTAyQkFBNUVEQjM2Q0E3OTM2NDIwRkQ3MUJFQkQ1Ci06MTA5RjYwMDBGMDRCMEFBRDYzODM2RTNGRDU5RDNEQzlCNzAxRTNGMTY4Ci06MTA5RjcwMDBBN0QzNzBEQzlBMUQxN0JGQkQ4RkRFMzcwRDY0ODgzOEZDCi06MTA5RjgwMDAxQUUwRjk2RTc5MEYxOEQ3REZGMjE1NDRFMUQyOTdEMkIzCi06MTA5RjkwMDA0NDdFRTUyNUEyMEJDQjk1NTgzODUxREY1NjYyNkM3NzhECi06MTA5RkEwMDA1MUY5QzZGQzcyQjIzQjdDMUU5NkIwQkVBQzEzQ0M4NDk5Ci06MTA5RkIwMDBEMzk2RkJCM0NDQzRGNDUzRTA3RDY3MkYyRTZENUY5QTJDCi06MTA5RkMwMDBDQUYzREMwNDNFMzNDNUM1NzdCRjVEOUQ0NEZEODZDNjNDCi06MTA5RkQwMDAzM0M2MTk0M0I5NTlENDJCNTdDMDlDNDFGOTlBNkIyNDA1Ci06MTA5RkUwMDBDNjBEMzg5RjhEOUVGQkVFMThCMzk5RTJBRjMxREZCQkYzCi06MTA5RkYwMDBFMEJGRjAwRUVBQzUwQUYwRjJCOEM2RjgwMEE5NTE3RTNCCi06MTBBMDAwMDBGODAzQ0I5MDFDRUQyNEJGQkEyRTUzOThGMjM5NzU2NzM0Ci06MTBBMDEwMDBBQzdDRkVEMURGMzBGMEVCMDc5MENFREY1NTdEQjE1NzQxCi06MTBBMDIwMDA0MkJBN0ZCQjdBRTA1N0ZCRjBGOUFENEZBMURGQzVCNTZGCi06MTBBMDMwMDA2NkRCRkQ4N0QzMjJDRUMzQ0VEQzdEOTFFRDBDRjFDODZCCi06MTBBMDQwMDBGMzRGOTIzMzdBQzlFQTI1RkJGOEEwRUFBNTlDNDhCQ0Y1Ci06MTBBMDUwMDA3RjIyNkQ2MTI3QkQwN0IzRDNFMjlFNDdDNEVFMkJBQkQxCi06MTBBMDYwMDA0ODNGRDk2RTU1QzY5OTg2NUVERUE3RUI2NUREMEI5MzNBCi06MTBBMDcwMDBGOTc5NUREMkQwN0E0NEZENzk5OUYzNTc3NTA3QUNCQzc0Ci06MTBBMDgwMDBCRjdGNDdENzg3QUExN0JGOTgxOTk5OUY2QjQxQkQ1NEM3Ci06MTBBMDkwMDA3M0E4NzQ3MjQ5RTc5QzJBRjI2NkNGRjFDMUE5RDQ2RjA0Ci06MTBBMEEwMDBBM0VDRUYyMTNEMzk3OEU5RTM2NEFBRUY3OUYzNEI1RTQ1Ci06MTBBMEIwMDAwRkRDNzQ2NUY0RjcyM0YzMjJGOTVDOUIzNEYwMkVGOTdFCi06MTBBMEMwMDA5M0VBN0Q1Njk1RjI1MEE1RkJGMjhFREQ4RUY1OUE0RTAxCi06MTBBMEQwMDBGNDNCQjg5RTBCQUU5RTIzNEZEMzdFNkFCRjA0OTQ5Nzg5Ci06MTBBMEUwMDBBQTA5MjdCMDczQUY2OTk1ODI5NEM3QUE2QURCQkQ2NUQ4Ci06MTBBMEYwMDAwQ0Q2QUI5QTk3MTc5M0JBRDYyNjBCM0Y1NkQzMjIwNUE4Ci06MTBBMTAwMDA2OTNDRjBBNzMxN0Y4QTc0REIyODdEMzVFRjFGMEJCMEU3Ci06MTBBMTEwMDBCREVGQTgxOEZGNUM3RDc4RUE1OUY0NEY3RDJEOUY5RDE3Ci06MTBBMTIwMDAyMzNBMzZCNDU5MzkzRjc2MkUyOTZDMTk4M0YzNUVEODE5Ci06MTBBMTMwMDAyRDg1MDJFQUIwRERGNkI5QzQzRTZBNURFODMxMEJDRDhCCi06MTBBMTQwMDBCQkVFQjlFNUQ5MDQwRkZCRjY5REI0OTA3RjVDRDdGQTVFCi06MTBBMTUwMDA1OEI5RkVCQzU4ODRGQjIwREJDNUZBOUQxRDkzMjJGMzQxCi06MTBBMTYwMDA0OUY3MjFGQzgzQzhGODgxRjQwNTA4Rjc4MjkwRTMwOUQ4Ci06MTBBMTcwMDA1RDNFQUJEQTI3MzYxMkJCRDBBRkVEN0Q1QTYyQkZFNjRCCi06MTBBMTgwMDA3NDkzREYzQkI4RUJERkZGOTVFNkRERkYyRjkzOThGRjdECi06MTBBMTkwMDBDNTU3QzY3RkYwMDUxODRGRDRFOEYzQzBGOTUzMTZEQTU3Ci06MTBBMUEwMDAxRkQ2QjQ5QUNGQzUzQjE3RkFCRURCNzc5NTdCQzZGMEI2Ci06MTBBMUIwMDBGRTM2MTY1NzZGQjE4MDM4Qjc5OTAwQzFFNzI5MUUzOEFGCi06MTBBMUMwMDAwNjJDQUI5MTlFMUY1MTA3QTQ0NzcxMEU1OEQ2NjBERDM3Ci06MTBBMUQwMDA0Njc2NDY3MUMyRTMwOEM2REIxN0Q3QjkxNTlFMEZGNzVFCi06MTBBMUUwMDAwODFCRTM5RDU3RDZFQUVEQTU2QThGODVGMjcwMzU5RTcwCi06MTBBMUYwMDA1RTBCRTk3NTRERjgxMzcxNUVERkY2NTFCOTE2NjdCRjU2Ci06MTBBMjAwMDA1Q0VEMTY3RUQzRDAwM0MzREVFQkQyQTdCMDVEOTg4NzlBCi06MTBBMjEwMDBFMjYwQzhDNjc2NUZCODY2ODBFMjUzREQ3RUQ0MEVEQUFGCi06MTBBMjIwMDAxN0I4RkMwMzQ0Nzc2MDZGODI0QUVCMkJEREY3QzlDQzhCCi06MTBBMjMwMDA5RTg4NzlGRUE0REI4NzUxQUY3OUY5QTNBOTY2RTJFNzhFCi06MTBBMjQwMDA5RThGQTYyQTQ5QzNDRkZCMzIxQ0VCRTJFNTU1QUFERDVGCi06MTBBMjUwMDAyMjRFNkY0RUY2OUQ4RkI2ODMwNDZGMThFN0FENjlCNzM3Ci06MTBBMjYwMDBGM0Y5MDdEQUMxOTY4RUUyNDgzQkI4NzVERDBFRDJGM0ZBCi06MTBBMjcwMDA3NkQ5OEIxNjAxMzU2RENCRkQwRERDM0ZDOTRCRTI5MUQ0Ci06MTBBMjgwMDBEQjE2MDY0ODBGNjVBNzhGRjUxM0ZFOEFGM0NERDRDRkYyCi06MTBBMjkwMDA3RDI2NTJBRURCN0YxQkU5OTFFMjA4NEY4QUNDNkJENDVFCi06MTBBMkEwMDA5ODdBN0VEMTIxOTE1Q0I3NkIyNjlBQUYwOEQ4NkZDOTk2Ci06MTBBMkIwMDAwRTVGMEZFRjlGOEEzMzU0REFDNzFFOUU1MTBFQzRBNzVDCi06MTBBMkMwMDA5RjFFOTAzODVGNkI0RUY1NkZDRDIyRjkxRTk1QjlCRjdBCi06MTBBMkQwMDBFNUYwMEIwMTNBOTdFRTlCMDZDNTQ0OUZCMURFOUY0RTE5Ci06MTBBMkUwMDAwQjgzOENFMzZDMkUwNDJGNERCQjc5RkYyRDFFRDJERjI4Ci06MTBBMkYwMDA5RkE2MUY2MTdDNjFGNzg2ODBGQzRBMjNFMjA2Q0FFN0JECi06MTBBMzAwMDBEODBCNDI2MTFBMjcyMUQ3NTcyQ0UzM0M3OTZFMjdGM0VCCi06MTBBMzEwMDBDQjYyRjU3QjI5MUY5NDRENzU1Qzg3NERGMUFEMjNGQTE3Ci06MTBBMzIwMDA2Q0VFNDRCMTlGMUU3QjY1NzlCQTNFQjI3Rjg1Q0UxQjMxCi06MTBBMzMwMDBGRDlDMkZFOTMzMEIzREVEQkIwQTE4NUZGMzFEOUQzOUUyCi06MTBBMzQwMDBENEE0MDlCRUMxNzYyRTZCREIzQUE2NDZDNkRCNDRGMDI4Ci06MTBBMzUwMDBEQkU4NzlERkZFNUJCQzQ0QkYzOTUxRDdGNzhDNDRCNkVDCi06MTBBMzYwMDA4QkQ4RjlGRjk5RjQ5OUU0NkU1QUIzMzU4QkY4NEM3QzhECi06MTBBMzcwMDA1MzQ3RjY3QjVBRUY2N0YwMDMxNDdGMkVEOTJCOTJBQTJFCi06MTBBMzgwMDBDNUNCMEY4RDc3OTczQzRFNzJERDlDRUFDQjc1MTVGMEVGCi06MTBBMzkwMDBGMUFDMDBDMzlFQzRCODc2ODdGREZGNTc2NEZGMUZFOTg4Ci06MTBBM0EwMDBGQ0RDQTJGODZEQzRERjREN0FERDZDRjFBOTRFQjY3RkZFCi06MTBBM0IwMDA5RjRBRjMwRkFENkY3NEZDRjVCNUU5RjZCQTY1ODJGRkZECi06MTBBM0MwMDAxQkQ3Qjc0RjVGOUYzOTE1RjU4REM2NEIwNkVFNjc0RTBECi06MTBBM0QwMDAwRTA2NDhGRjlBOTJBMDc4MTMzRTNFRUMyQUY3OTBEREQ1Ci06MTBBM0UwMDA2RDM5RjRDNTM4QjJGN0E2MjRBRjA3MjhBRjc1NjBENjJCCi06MTBBM0YwMDAyQUIyRkIyREEzNkY2M0ZERkZGNDg1QkMyMjM5NjI5RTU4Ci06MTBBNDAwMDAxMzY5MjVBREU0QkY3RTY5QUNDQkUyQ0ZBNTc1RkM0MkY0Ci06MTBBNDEwMDBENzIzNjM1REU5NkVERkFCRUU4OEJDMTE4Qzc1NUY5MTZECi06MTBBNDIwMDBGRTgwQkU5RkYzRUFGMTE3Rjc3MzlDRkZFQjg3NDQyRjgyCi06MTBBNDMwMDA5RDI3RUVENjcxQjcwMjNFRDYxQjNCNzg1NUM2NTUxQUZFCi06MTBBNDQwMDAxQ0EzN0IxRjhEMUQyNkQ4NDZDQkE2RTQ1NEM0Mzk1REMyCi06MTBBNDUwMDBCMjZDMzIzNjdEOUEwREI3RTY3NDZDNENFRDZGQkFFQjg4Ci06MTBBNDYwMDA5NjM0MjFCREZCMjEyMDBCN0MxNjlEQUYwMDRERDJBNDVDCi06MTBBNDcwMDBDODNDQzU2QjU1RjFGMzE0Q0ZGODFCQzkyRUZGNTY5RThGCi06MTBBNDgwMDA2MjRFRDhCNERBOTJGMkY3RTcyQkNFQkFBM0Y3M0Q5RjJCCi06MTBBNDkwMDBCQTU1MjYyQTk0MkJGNDMxMTQ0RTBDOEFCQzE3NENBN0JCCi06MTBBNEEwMDA3RDUzMzNGMTEyRkY3QjA2RDdDQUY2MkRGNUU1REE1QzUyCi06MTBBNEIwMDA2ODRGRUVGQkI3NkQxRDhCNzY5NzJERDY0RkY1NDZGQTlDCi06MTBBNEMwMDA3QkE3QzAzRDQzRjk4RkQ3QTYzMEVFNDYzRjI3RjNGRTZBCi06MTBBNEQwMDBERkE5RDMxMjIzQjc2MkM0NkJDMEY3ODg1MkEzRjIyNzU3Ci06MTBBNEUwMDBFMTIzNUYyNjkzN0VFRDRBNTVERjIyQjkwQzc0Qzk3Q0M3Ci06MTBBNEYwMDA0RjI0NDFFOUIxQjhFMkQ4RDkzRUMyMDNFOEY3OEJEMzgzCi06MTBBNTAwMDBDNTNFQzRENjI2Q0UxNzZEQUFDNjdFMzFDMUU5OUMyNkFCCi06MTBBNTEwMDA0N0Q4QzU3OUI3Qzg5RjU3MUZGOTYwOUMwNTMxREMwNTNFCi06MTBBNTIwMDBEM0YxRTQwMjFDN0ZDM0RFOTY2NDRBQzNBRDNGRjNGNjY5Ci06MTBBNTMwMDA0Q0JBOTI1M0EyRjgxREU5QjhGRTRGQTUxRDM5MzZDMjk4Ci06MTBBNTQwMDBBOTVCODM1Mzg5M0ZBMUYwODQxNEYyOTM4NTBBMDQ5NDk0Ci06MTBBNTUwMDBBMjM4RjFGMUE5MjJERTE0RDczQ0M1ODdGRjUwRDgzRUJFCi06MTBBNTYwMDA3RDJERTFFNURBQjA1ODJGQ0Q2MUM2QTZCQzM2RTA3QTg0Ci06MTBBNTcwMDA1RjVCNjMyQThENTdGQjZGMDc0NjkzQkY3QTI5NURFMEM3Ci06MTBBNTgwMDA5QTE3MkY0RDExRUYyQkEwNTBGRkFDNzQ5N0FFRTc0MUY3Ci06MTBBNTkwMDAxM0U1MEI1RkQyRjM4QzdEOTc0Q0RDQ0Y5OEJGQjA2RDg5Ci06MTBBNUEwMDBBMUVDNDQzRDI4MDg2RjNGQzQ3OUNENzZBQjRBRjI0RDBCCi06MTBBNUIwMDA3ODBFMDQzRkRBMTMxODc3RDYxRTVDMEMxNEU3RkE1REE4Ci06MTBBNUMwMDBFMDk1QjA3RDU3RTJDMDZGNDkxRjA2MEU1ODU1M0E3N0E3Ci06MTBBNUQwMDA0RDcwNkU4NzU0MUM3Rjk3N0U0RjJCMEYxNUIyQzUzMTdGCi06MTBBNUUwMDBGQ0RDOTgyRkExRkRFNzk0MTMyNEJERTBGM0RGMDQ2NUE0Ci06MTBBNUYwMDAzQjVDRTM4OEU0NzcxMkQzNURBMkVCRDVBRUM0QjA4OUFGCi06MTBBNjAwMDBDRTQ1MDYyNkUxNUU4N0U5MUFBNjEzNzg1RTgzQ0UzQzI2Ci06MTBBNjEwMDBGNkZCQkIyQzAzRTc3RUUwNjZCQTlDQTQwNzc5MjBFODMyCi06MTBBNjIwMDA4NEY2QzkyQUY5RDEwNEE3QzZFQjQ4NzBBQURFODAzNEEzCi06MTBBNjMwMDA5MkFFREFBOTA4RkNEMDZFMUUyNUU3MzU3N0Q4QUU2QjRFCi06MTBBNjQwMDAxMzg3RUIzNkI0ODU1RDEzNDAzRjhGRkZENTM2M0E4RkM1Ci06MTBBNjUwMDAxRkFBOTM4Mzk5M0RGQ0ZFMkRFOTJGNkM2QjFBQ0JGOTUxCi06MTBBNjYwMDBCRDgwOENBMkI2NjM5OTk0NEFFQjU0Nzk3REU4NDVCNUQ4Ci06MTBBNjcwMDBGNDIyQzEwN0JBQUY2N0I3ODlGNkExRkVBOEU3MEVBQTEwCi06MTBBNjgwMDAzQjQ0M0ZBRkQ1Njk1RjkyQzVGNjQyODdENzQzNzhGMDI4Ci06MTBBNjkwMDA3RTI5N0NFRTVBQjREN0RFQzc3QzI5MDVCOEFFNUVEM0RFCi06MTBBNkEwMDBBMTA3OUFCMURGOUY1Njg3NzJFODNFRTk3MzU2RkYxQUY5Ci06MTBBNkIwMDBEMkNGNTczRTVDRjM0ODIxRjlEQjVENjY2RjI1Rjk5REVCCi06MTBBNkMwMDA5RUMwQ0YxODg3QkY2ODU2Qjc0NUQ4MUQ4QzFEQzhFMEZGCi06MTBBNkQwMDBGQjgwMzFGM0Q0OUVEOUY0MzNDMkQ3RkRGQjI1OTVDRTUwCi06MTBBNkUwMDBCREZCQ0QwM0UzODhFRTlBRjYzRjVBRThCRTY0RURGRTZCCi06MTBBNkYwMDA4RjE4NEY0QjE5RkUxQTlBNkY3NjVCMDNERjZCOUIwMzIzCi06MTBBNzAwMDBEQkY5NUUxQkZBNDNCRTlGMThGMjA4N0YzMjc4M0FFNzA2Ci06MTBBNzEwMDBEOTg2MDgzOTNDOTEyRUVDMEQwNkZDRTMyOTVFQjVFQjk5Ci06MTBBNzIwMDBGNjdBOTBGNkRENThFRUVEQjg3NTIyOERCRjU3Q0YwNzVCCi06MTBBNzMwMDAxOEVGMzVDMEExMzFDNEY3NERGMDFBOTdDNkYzRkVBMDRCCi06MTBBNzQwMDA1MjQxN0E5NkZGQUVFRDRFMkRBMkZGQTNFOTAyQkYzRDI2Ci06MTBBNzUwMDA5QTJFNzA2Njc2ODZCRjg5RTg1RERGRjFCMTI1OTlENkJECi06MTBBNzYwMDA3OTM2MzQ4RUY2QjkyMTQ1NEQ3MUM2RjEyMzQzRjYxQjc3Ci06MTBBNzcwMDA2MzRGQjVDQTgwODVGQUQ3OUUwN0Y2MkIyOEVGQTYxNDNCCi06MTBBNzgwMDA5NERGNEJFRkI2NEQ1OThEQ0ZGN0EyNEM1MjI4QUVFMjc1Ci06MTBBNzkwMDBGRTk0RTJFRjVFQjM2RjBDRjU2Rjc4RTdGM0E5RTRDN0MwCi06MTBBN0EwMDAxRTQ4NEZFN0Y1N0Y3RTYwRkQ3OEUyMUJFQTdGNDkyMjc1Ci06MTBBN0IwMDBEOUQ5NkU2MEJGNjZEODY5MDFEOTI5QkU1RjQwRkE1RkZBCi06MTBBN0MwMDA0Q0Y1M0NGNkNCQkIyQ0RENEJEODJFRjc5QTgwRUMxMjI3Ci06MTBBN0QwMDBGNTlGRUQwMUY1REY0OUY4QUVDMDg5RjZDMEVGNEY2NjkxCi06MTBBN0UwMDAzQkRGRDU2REQyMTgyN0EzNUY5RkM0RjU5MjFCQTlCRThFCi06MTBBN0YwMDBBQkJCQ0NDOTc2NEVGNzA1OEFDODVFQzM4Nzc4OUMxMDgwCi06MTBBODAwMDBDMDI0MTI5RDA0QkVBOEZDODgzQjk5RTkzNkZDRTVFNzBDCi06MTBBODEwMDA2RUQwRTM4NjlBRTJDNTc1RDg2NTM5Q0EzRTIyRTJBNEI1Ci06MTBBODIwMDBBODFCNzFGNEM5MzNEQjlFNDA3QjgxRUVENDI4REMwRjdBCi06MTBBODMwMDBFRjBCQkZGRjVEM0Q1NkQ1QkQzRTc3NTkzM0FFQjNFRTRFCi06MTBBODQwMDA4NENDRUQwN0Y1N0Q1RTU4RDc5MzQzN0E3RTg2RTI4NjA5Ci06MTBBODUwMDAzQTVERENFRkE1RTczM0IwNEVGNzVENjc2QTFCNEIwOTQ1Ci06MTBBODYwMDA2M0NEQUVEODdFOThDQUI5QkU1MDI5NDFDOEY5QUJCQUZCCi06MTBBODcwMDAwRjlCODU5OUU3OTNGRUI1MUVCQTJFOUZFRUNERjU5RkVGCi06MTBBODgwMDBCMTQyMDI5MkQ4RkFFNUMwNkY1RkM0QjUzRDcwMTBGOUNECi06MTBBODkwMDAxRjI3NEVFMTcyNThGRjEwNkY4RDAxQ0ZDOEY2N0VDOTk5Ci06MTBBOEEwMDBGMDIzQkQ0QjQ4MUZGQjVBRTVFMTNBMTI1MjgzOEE0RDEzCi06MTBBOEIwMDBGNTc3RDIzRkREMTZDMEJBM0Y0MzdCOUY1NEUyQzc5OTdDCi06MTBBOEMwMDBGRUY3NDkzRkZCNEY3RTk5NDE2NkI5RjdCNEQ4QzdCNzQ5Ci06MTBBOEQwMDA1QUI0N0NEMjlGRDYwOUI4QjU4REEzQTdBRkE1OEIzQzNGCi06MTBBOEUwMDA0RkIxMTVFMjlFNEI3RUE1QzdDMTlDMDAzQzIyRjFGRUY0Ci06MTBBOEYwMDA1Qzc2MDY1MUVFMTc1QTY1Q0Q4MkY4RTczQzA0NTZDRUQ5Ci06MTBBOTAwMDAyMzdGQTNFNzZGRUYwMUZEQTdFMTFGOTRDRkJEN0FGNTg5Ci06MTBBOTEwMDAxRUMyMkIxOEI3RUU3RDYyQzRCOUJGODlGNDY5NkRCQjQ2Ci06MTBBOTIwMDAwNEZGODQ2QjVGRjc0Q0ZDN0IwOTQ2NUVFQkJFQjYxREYzCi06MTBBOTMwMDA0N0M2QTAzQ0FCOUU4QkVFQjc2MUU4OUU3Qjg4RjdCRDE3Ci06MTBBOTQwMDAxQjlBQTNFRjFCN0M5NUFFRTM5Njg5MzA5MTcwMEJFQUJFCi06MTBBOTUwMDAxM0ZCMDdCMzAyOUQ1NkQ0REY1NzMyRkQ5RjEwNUU3RTc2Ci06MTBBOTYwMDBDOTI0Rjg4NDdFOTVFREYyMTNCNzFFNjc0QTg0M0YxQTE2Ci06MTBBOTcwMDBCODAwN0M4RjI4NkY2N0U4MzBEREQ3OTlEQjlDRTVBNUIwCi06MTBBOTgwMDAzOUU2MkFBMjdENkU1QjE2QzcxOTUwODIzMkREMzc5OEYwCi06MTBBOTkwMDBBREY5Q0IxOTVGMDdCNEQzNzQyRjY0OURFRTI3QzE4OTNECi06MTBBOUEwMDA3RjI4QkZBM0FGNkI5RDhFRTdFRTBCNDZEMzNEMDc4MjlBCi06MTBBOUIwMDA4RDM0Q0ZEQTlERTJGRUQxRkE5REYxQkYxM0E4RDVDNzQxCi06MTBBOUMwMDBEOUYwRDRDOTIzOTQwRUFDMEU0NUY3QUJENUY5NTNEQkJGCi06MTBBOUQwMDAxNkZEQkMwNTc4MTIxODlGMTE3RENGRkM0QUVGNDNGQzkxCi06MTBBOUUwMDBDOTJDRjBDNURCRkEzODQ2RkJCNTE5QzI3RkQ2MjA3OUYxCi06MTBBOUYwMDAyNERGMEQ0MTM5NDg3QUIzNEUwQTI0MEI3QzBCOEVENUU3Ci06MTBBQTAwMDA0OEY3NUQ4NkJFRThGNzY1RUZENkY5NzM5N0FFMkZCQ0MxCi06MTBBQTEwMDAyRTdDQkZGQTE5Mjk0OEU3ODA3N0ZGMjQ5QUZFN0I0MkYzCi06MTBBQTIwMDBBQkNCNDkxRjYyRjU2QTVEQjM5OUYxNkQxNTZDQjQxMDNCCi06MTBBQTMwMDBCRThERDVBQkFBMjE3REQ5NkVBMTM4MTZBQjRGMzU3RTIwCi06MTBBQTQwMDBFOTMyNzQwQjVDRkU3RjRCRjc3QTczOThGMzRDRUJGRkEzCi06MTBBQTUwMDBBN0U0QTUzQ0Q0QkRBRERGQjE1MDVFNzRBNDdEMDhGOTc4Ci06MTBBQTYwMDA1NjE5N0FBMkFGRUJFRjVEQ0ZFRDg2N0NBN0MwMTQ5NkE2Ci06MTBBQTcwMDA2RjQ1REExNUVFODNBMkYxRjQ2RUNCNTA5RTkyRjM3QzEzCi06MTBBQTgwMDA4MzlEMTMzODNGNkVFODUxRUMzOEU1M0EyRTVGRkMxNDk1Ci06MTBBQTkwMDA3MDc5QTFBREQ0NEVGOEEyRkZCOEM5MkJBOTlDN0Y0QzA4Ci06MTBBQUEwMDAyRTQ0M0U0QzNGMjAwM0UxOERGRUY2ODk4RjA3OTBGRTM5Ci06MTBBQUIwMDBBMjEzQzUzNzUyQkU3Q0ZBMDk4QzNGRDhCRUE3QjNGOEEzCi06MTBBQUMwMDA1N0U0NUYxMUUxQTQ5MTdEMkZFQ0NBNEVGQkJEODNDNzEzCi06MTBBQUQwMDBFMUY4REQ3RkJDRThGMTRBRjJDM0M3Q0I4QTY5NUMwOUMzCi06MTBBQUUwMDBEQkU5N0U3ODkxMUU4NzFBOEUxN0Q5N0IyMkUyRDFGRDkxCi06MTBBQUYwMDAxOTIyREZCRUM1RjNGQjQ3Njk1RkIwNzhCN0Q5NEJGOUMwCi06MTBBQjAwMDA4RUM1NjZGRkE2MDRBNEFGRTgwNUM5REI4MEIzMURFOUM2Ci06MTBBQjEwMDAzRUY0MjQ4RDhCRjZBNDUyQkU2NkYxRUVFRjFEQTJGNjM0Ci06MTBBQjIwMDBEQTVEMTJEM0RGREZCRTI4N0YxN0M1QzdBMEVDQTVCODVBCi06MTBBQjMwMDBEN0RGN0U1N0MxQkQ4NDczMEVEQzUzNzA1N0M0N0M0NzhBCi06MTBBQjQwMDA1Mjg1NUY1OTdDOTU5OUUzNzFFRjY4RkIyRjJCMjlDRkQ0Ci06MTBBQjUwMDBBOUVENjBGRkQwRkJFQTFFMEI3RjU3QjA0QjAyMEZBRTkyCi06MTBBQjYwMDBGMzg4RTdGMEFGODkwRkJERkI0RTVBMDhFNDk3QjY5RTE1Ci06MTBBQjcwMDBCNEY0QzRGMUNGNDY3OTAxQjc3MTYxQ0VCRjZFQjdGMEJFCi06MTBBQjgwMDAzRENBQkQ3RkIwRDA3QTZCOUVGQjg4RjM2OTU1NkQxMkNDCi06MTBBQjkwMDBGQkE3QUE2N0U0QTA0QTc5OUUwM0FGNTg0ODNGNkI5QTg3Ci06MTBBQkEwMDAyNUM4Q0M4QTZDMzc3MzNCRjk1MUFBRkZCMTU5Rjg2NUI3Ci06MTBBQkIwMDA0M0VGRDdFODdBNkVFOEJENjEwNzZCNzRGRjc1RDdENkFGCi06MTBBQkMwMDA2ODNEQkYxN0I0MkRBM0YxRkQ3QjlBNTdGMzNEQTA3QkUxCi06MTBBQkQwMDBCNkM3Rjc1Rjg2MUY1QzRCRkI1MjhDMkI2QjlGOEFFRUQwCi06MTBBQkUwMDA3N0RGOTA3RTA3RDhCRkM3RkFDOTU3MzJGNEYzRDgzQzU1Ci06MTBBQkYwMDBDODIzRkQxRTBDQUYxOUFGQTAzRDdEN0VCMjZBM0NDNEQ4Ci06MTBBQzAwMDBDOTNCMUVEN0YxODAxMThGMDdDMzI2OEU2N0IxRkRGQUFECi06MTBBQzEwMDBEQTJFNUEyODhFRDY3NkZFOTlGMTZCNzlGQjY3MkM4NzRGCi06MTBBQzIwMDBDQUY2MEVCRUFGN0EzREY4MzcxMDFGQUY2RkI3M0IwOUJCCi06MTBBQzMwMDA0NzU3RjYwOEJCNUZEMjZFMEQwNjI1NkEwRjM1OTE3QzJCCi06MTBBQzQwMDBGQjBGOEFFRjNCMDJBRjRBOENBMzQwRjc3RjZCNzU3RTA4Ci06MTBBQzUwMDBBRUQ1RjlCNzE2Rjc2NzYzRThERThBQkVGRkJFMkY3Nzc5Ci06MTBBQzYwMDBDNzExQkFFMjUxQTMzRkRGRDA3NTM4OTlGOEI4MDQ4NDEwCi06MTBBQzcwMDA3RjVBMTIxMkZFQzk5MDg3MTE1RjQ2QzZEMTgxNkY5MzI5Ci06MTBBQzgwMDAzQ0Q3Qjc1QkY5QkVGODUyREQzRjJENkQxNkRGOTNDNTlCCi06MTBBQzkwMDBGQThCRkU1MTc2OTFGRkREMkJFODhEOERBNzM1QUREMTc2Ci06MTBBQ0EwMDBGREJCMzJEMkQ5REYwRkVBNzhGODEzQzNERkU4RjJBODkwCi06MTBBQ0IwMDAxQzAwM0JFNUU3OTdBOEIyMzdDODZGNzUyQjM0N0ZFN0Q4Ci06MTBBQ0MwMDA1NDg5Q0Y2MzNCRDU4OTI5RjFFRTRCMTlFNTlCM0FDRUU4Ci06MTBBQ0QwMDAzN0VBQ0IyODRGODZGRDQzQ0VFRDhFQzg3REZDOEQ5OTlCCi06MTBBQ0UwMDAwMkFGNTRDRDkxMDMyNENGODg3RENGQjJBMkFDQjhGQjg0Ci06MTBBQ0YwMDAxRUM4NDRCQURGMTg3QkQ3NEZBNjQ1RUU3QkI0MUQzOTdBCi06MTBBRDAwMDBBNDY3M0ZGMjNDNUU0OUY3OEM2QTlCODU3RkU4OUI4RDg4Ci06MTBBRDEwMDBFM0E2MTA4RTA3QzZDNUI1Q0RENjIwRUQ0RjZBNTE0RkJDCi06MTBBRDIwMDBGODdCMzBEMjBGQjJCRjc2NjkxMUU5MDdFRTFCMUM5OTkwCi06MTBBRDMwMDA0OENGNzIzQUFBQzRGNTJGNkZDMzM4OEVDMzJGMkZGQkFBCi06MTBBRDQwMDA4Q0Y1QUEyQjVCQUMxQkY5OTYxOTZGMUY2MUVDMUY2QTdGCi06MTBBRDUwMDAyRTA5OUM2QTNDQUY1MTdBNzgxRjUxRDMyRUVFNDlCNzI5Ci06MTBBRDYwMDAxRUZBNjI1QzE2RDJEQjdGRTAzRkM2QURDNjcyNDFBNjFBCi06MTBBRDcwMDA4OEJGQUQyNUExOEZFOUJFQ0ZFN0JCNkM3MUYxRTg5MDJDCi06MTBBRDgwMDBCRjk3OUFEODBFNkFDQzNEMTk4QzU3RjYyMzJFOUM4NTE2Ci06MTBBRDkwMDA3RUYzRUQ0Rjc5REZEMTdBMjhFMTRFQ0FDN0Y1QURGMUU4Ci06MTBBREEwMDA4Rjc3N0U4MzlDMUE2MDEzRTNEQTRERDBDNDI1RTE5RTMxCi06MTBBREIwMDA0ODFDQjhENjI5RUUwRkREQUJDNzQ5QUEzRjhDN0E3RDc3Ci06MTBBREMwMDAyRkY2NUQ1MDE0Q0ZFRTAzNUJFNjQ5MjNFRERERjAxQjVCCi06MTBBREQwMDBENUJBQkVBRjJGRDhCMTg1OEVFMDYzRjE1MUI1NkU0N0JECi06MTBBREUwMDA4OEZDMzkyRUM2RTJBMjFCMzNBM0Y1QjRFMUVENDRDNkJDCi06MTBBREYwMDBCOUZENURCMjkzNzJDNEM4RDc1RjhDMjZEQzg3Rjg3RTNDCi06MTBBRTAwMDA0MjlDM0NFQkE3QkE1RUY2RUFFN0JFMERCMzY1RTY5QjUzCi06MTBBRTEwMDA2OThFMjgwRDFDODVGQzYzN0RFOTNGRTkwODUyMUNDQjM3Ci06MTBBRTIwMDAzRkY4Q0EwNDkyRkZGQTlERDFFNzQ1MjQzRjNGREZERjk4Ci06MTBBRTMwMDAwQUIyRkNBQTQzNzYzRTQzMzJEQTVGM0FGOENBMTREMjI5Ci06MTBBRTQwMDBCMzg2QjdCRkNDMTE3MkY5MjJDN0UyQkUzQzdENDYyOTVBCi06MTBBRTUwMDA0OTYyRkY2QjkyQzRGRTc3QUZEMjkzNENGQkFFREFGRDMyCi06MTBBRTYwMDBCMjJGRjJGRUJDMjFFN0JCNzVGRDAxNDVFQ0YzRDc2NUJGCi06MTBBRTcwMDBBQTVDNkY2ODE3N0E2MTNBMjA0QTlDN0ZBNUM4RjM5ODRDCi06MTBBRTgwMDA3OUZFMTFFRDI1QTgyRkRGMTBCNzgwRTg0MkQ5RDc5QUI3Ci06MTBBRTkwMDAwNzU4RUY2QTRGOUE5ODlFREE5MzgzMTlEOTExRUYwNUY0Ci06MTBBRUEwMDA2OERDNENGMjdCMEQxQjgwRkQ4ODFEQzhCRjJFQTVFRjEyCi06MTBBRUIwMDAwRkIxQkVGNEZEMDRDNjU5NDcyNjNDNTIyOUNFQUQ2NEZECi06MTBBRUMwMDAyMEJGRjVDMERCNTU5MzIzRkRGRjA1M0RFRTAzRjFDMTI3Ci06MTBBRUQwMDA0MzI4RTcwOTMxQkZDRTg3NERCMDQyQ0YxMzA4M0RBRUJFCi06MTBBRUUwMDBEMjcxMkNFRUFGOUFDODhFNjNGNzU3NTc4QTkzMUIwRTE4Ci06MTBBRUYwMDA1ODgxRjJDN0I1MUY1OEY5M0VEMEU3MDdENkYyRkUxREJDCi06MTBBRjAwMDAyRUY5Mjc5MzlGMDFCRkZGNkEyQTFGMzhCODc2MzIzRDdBCi06MTBBRjEwMDBGRkZDRTA3RDU3NzNERTUzREExNDk1QUYwODEwN0QxRUY5Ci06MTBBRjIwMDBDMjUxN0Y3OUY3NzZDMjk3NUQwQUUzOTBBMkFFRDNFRjY0Ci06MTBBRjMwMDBEMkY5RUE5RTU2MzM3RjlCNTlCRDc3QzZFMzgxMjRDMjdFCi06MTBBRjQwMDA0RjQ1NEJFOUJCOUQzRDlEMEFFQjFGRTIyQTAzNDdEOUM0Ci06MTBBRjUwMDAxOTQ3OUQyODY2MUM4NUUzRjg4MjVDMTYxRkFCQTQ3MTE3Ci06MTBBRjYwMDA0Rjk0MTQ1MzM3MDlEQkM5OUY0RDI3MUNFNTE4QzY1NTZDCi06MTBBRjcwMDAwNjNERkY5QzI5RjhEOURGOTFDMEY5MTMwOTI2MDgzRDQ5Ci06MTBBRjgwMDA4M0VDMjhCQTM3QjRCRUNFMzg2NDQzOUIxQ0Y1QkQ4NjJCCi06MTBBRjkwMDBGMURFRUU0QzcxQUVCMEQ3RDBCMzkwQTRCMTFFRUQxNjc5Ci06MTBBRkEwMDBFNTg2QjYzRDE5QjQ4RUY1RTYxMEVCNDk0M0IzNTlCNEM2Ci06MTBBRkIwMDBFRjEyMjVEMEY5Q0QwQ0ZFRDgzODQwRkMzOTQ2OEY1MDIxCi06MTBBRkMwMDAyRTRCMkNDMUIxODREQjc3MEY5RDA3RUFGNzM5ODJFMjYzCi06MTBBRkQwMDA1RTVENjNFNzQ0RkU2RTY4QjA3MzhGM0I1RUZDMzk0RTg2Ci06MTBBRkUwMDBFNzMzNDhEQUQxMkNCMUNGODk2REFGRjM4ODdDQzZEMTc1Ci06MTBBRkYwMDAzM0MyMkYxRTVERTg5RjFDQ0YzRjA2QTA0NEVDRkIyNTBCCi06MTBCMDAwMDA1RDdFQURFNjhBNzhFNzg2MUIzRDIyREZCNDczNkNFMDk3Ci06MTBCMDEwMDAyOEU5NzFFRkVFMDQzRTM3RUM3NTg5RkM2QzY5NEI5N0JCCi06MTBCMDIwMDA0MkRGOUZBQzZGOTU2NjUwM0M1QTlGRkIxRTdGOUY4MjBDCi06MTBCMDMwMDBGNTYyRjY4M0UxRkQ3QzZFNUFEREJDQkI1QzhCNDNDN0Q5Ci06MTBCMDQwMDBCNTFFMTExRjk3RThERjAxOEZEMDU3QkRGRDE0NzhEM0NGCi06MTBCMDUwMDBGNTdEREEyMzc0NUU3M0FBRDJFQzE0REY5OTg5RUY0QTg2Ci06MTBCMDYwMDA2RkQwRkRGOThERDc5QjE5Mzc5RDAyRDUyQ0NFM0ZDNEVCCi06MTBCMDcwMDAzOUM1MzJERDJGREZBMEZCRjkxMURGM0IzRjAzOUJFOTMwCi06MTBCMDgwMDA5QzIyRjY3QjY3QzNBRkRGQUM4RkJGMDIzNDFFMzdGNjVFCi06MTBCMDkwMDBCQkY1OUI3NTNDNzhCMzJGRkFGOUE1NEMxRDA3RTY0MDJDCi06MTBCMEEwMDAwRUY5RjMxMEM2MTdCRTFGOTE5N0MwNzE3QTY5RTFBNDFCCi06MTBCMEIwMDBCODM4ODNCRTAzNTdGNUVGQzBBOTM0RTRERTkwRjcxRTFECi06MTBCMEMwMDBDN0JGQTMxRDY3N0VDRERGMTM5QzQ5ODAwOTcxQ0VDNTI0Ci06MTBCMEQwMDA4NkUzOUZFMTNGNkUxMkYyRDZDRjJEQUE5RDgyNDY0M0IyCi06MTBCMEUwMDBFRTE3NzAwNzE2OTkxRjMzRTQzRTQ2RTdGRkZGRjEzRDY4Ci06MTBCMEYwMDBBMDVDNTAyMkYzMjVDRkNBRkUzMTFFM0E5RkIwRjUzMjM0Ci06MTBCMTAwMDBGRUM2MTU3MDFDQzQ3NThERDNENzM1Q0UxQTExREYyRTJGCi06MTBCMTEwMDA4QzVBMUQ1NzdGODdENzk3MUExMDcxQzRDRDY1NDc5RUVCCi06MTBCMTIwMDA5NTcxNjI3NTQ4RTJFRkZCQUFDMzYyNUY1QjVEMjZGNjJDCi06MTBCMTMwMDBCNTM5QUQwMkE3QUVCQzQ5MEE2QTEyQkJDM0QzNDQ5RjVFCi06MTBCMTQwMDBBMTNGQ0I2QzAyMEYxODdBMzJDNDJGNUQ3RkE4OURGMDBGCi06MTBCMTUwMDBDMTBEM0EzRTg4RDVBM0M5RDA1RDRFRjlFNjVCMzRDOTJFCi06MTBCMTYwMDA0QkY3MkE0NzdDM0ZCRjZBREFFQkU0RUUyRkE3M0ZBOEY0Ci06MTBCMTcwMDA2RkZDRUYyMkM0RUFEMUY3M0RGRTEyMEZFNUQzQkEwNzA4Ci06MTBCMTgwMDA1NzE2RTJCODQ3RjNGRTM4OEVGNEE2RTYzMjc2RjMyRDcyCi06MTBCMTkwMDA4Rjg4MTMzQjFEODFBMzdDREZBNDQ1M0ZFRjZGQzk2QkY0Ci06MTBCMUEwMDBFQjIxN0U3NDAyRTNDNzVFNTdGNzk2M0E4MUFCRjlCQzk4Ci06MTBCMUIwMDBCRjNBOUNDMERGNDM1NkI3REJGOUJCQjBFQUQ2ODZDNEMyCi06MTBCMUMwMDAyOUU0N0ZEQjY1QUYxREVCOTVBRDI3Q0I4ODlGOTVDNTQ3Ci06MTBCMUQwMDBFMjNFNEFBRDVEREM4QkIzQjlGREI3MTA3REQ3N0IzQjVBCi06MTBCMUUwMDBBMkNGRjkyRDNEQkZBOEZCMDYzRDhGRjU2QjFCMDlBMzMwCi06MTBCMUYwMDBBNUZGRjdGOTlCOEQzQTVGRUFCQTJFNjY0Q0MxQTlGRTBFCi06MTBCMjAwMDA5MEU2QUYyNjdERUM3RkZENDUwQjFERDdENTRFNzlBNTg5Ci06MTBCMjEwMDA5Q0FFODg2REY0QThEQ0VGRkFFNjhFMjY0QUYzMUFGNEE5Ci06MTBCMjIwMDA3NzY0M0FGOUY5NTE3MzcwMkNFM0QyODIyQkJCMEZEM0I4Ci06MTBCMjMwMDBCMEZGOERBOTE0QTdGQTNBQkFBNjVBMjJGNEJCQjcwRUVBCi06MTBCMjQwMDBGRDczMUNGOTM1ODA0OUI3NUI4NTRCNDk1QUExRTMyNTRECi06MTBCMjUwMDA2MUM3QjUwNzBFNjc1MDNFQTI5N0VDQjc4MENBNzc5MkQ4Ci06MTBCMjYwMDBCM0IxQUNERTdEMkE3OTEyRTE5NkJEQTIxQ0MyMTlFRDA0Ci06MTBCMjcwMDAzMkY3MDNBNTI3RTdFNkE0NDhGQTM2MzM3RDE3NDI2MjgyCi06MTBCMjgwMDAxQzgwOUU5QzFCMEIyM0RCMUJGRjVGREJGRkQzQTQyN0QzCi06MTBCMjkwMDBENUI2OUUyOEZCMzdGODg0QkI3Q0ZFM0UzNzcwRDBDQUZCCi06MTBCMkEwMDBGNzA4RThCQ0M2MTUyMUM3NTc3NDdGMzQwQjM3NEI2NEM5Ci06MTBCMkIwMDBBNzczRTg3QzdBMjI0MTNCMDVFRUEwQkEwMjYxMjU5NThFCi06MTBCMkMwMDBDRThCQzNCMkI4N0YzNzk2RkRGNzRDN0RGRTU5NEFCODk2Ci06MTBCMkQwMDA4M0VFRTlDRUQxQ0YzN0U3NDIzN0Y3NUIwMDAzNUM2QUY0Ci06MTBCMkUwMDBFMEU0RUY4QjRCQzBDQkU1NkM1Qjc4MjlDMUYxODI1MDc5Ci06MTBCMkYwMDA4OEJGOUYwOTY3MjhBRTczMzZGRDNCRTYzOEYyMUVFNjJECi06MTBCMzAwMDA5QjAyRTcwQzdFQzg3NDBFMjZFRTFCQzVBRUE3NUJENzZBCi06MTBCMzEwMDBDNzU5OUFGMDNCMDQxREU4N0VFRTZDMDhGMUI5RkIzNTg1Ci06MTBCMzIwMDBEMEEzOUZCRkM3NUZDNzNDRENGN0QxQjlEQjM1NjgzQjEzCi06MTBCMzMwMDA4OUNDOEYyMEY3OUY0RkVCOTFFM0FEQTc2NzI5OEIxOTNECi06MTBCMzQwMDBDQTlDNDQ5RjE0Q0UzMDdENkRCRkYyNzVGNEQzNkQ0RDExCi06MTBCMzUwMDBDQTU3REYzNUQwRjc4M0UyRTE3MzRCNkZGQjFCRUZEM0E2Ci06MTBCMzYwMDA3RDYyNDlEM0Y4QkVCMTk3QkVDN0E2N0Q0RTU4RTkxRDkwCi06MTBCMzcwMDBGMjYzMTMwMEZFRERCM0U2Mzc2NDZGQzZGNzFBRTAwNzI5Ci06MTBCMzgwMDBCRUU3MTFGQkJEMDYyREY3N0NDNkYwM0QzNUUzRkVFREIzCi06MTBCMzkwMDBDRUUwMEE5NUVFNkZBQzcyREJGOERGQUQyOUIyOEQ5QjgzCi06MTBCM0EwMDA0RTc5Q0E4N0QyRkNCRjIxQkRGQTQwNkE5RUM0ODMyODY5Ci06MTBCM0IwMDBDMTE5OEM2Mzc1QkRCMjgzMzY5QkQ2MkY2OUM2RjcyMjNGCi06MTBCM0MwMDBDMEZBMzJGNEVGMDE2NDAwN0ZCNzYzQjc4QUVGNjkxRUY5Ci06MTBCM0QwMDA0MTNEQjRBNUIyRjZBQjc0MEYxQTFFMkU1NTA5MkY2RjVFCi06MTBCM0UwMDA3MUQ5QkNGNDVEQUU5NUU4QjUwRkQzREI2ODEzRjcyRkM4Ci06MTBCM0YwMDA4Q0ZCNkJCMTdDNkNCNDE5Nzk0QUFGOEQ3MTc2Q0M3N0NDCi06MTBCNDAwMDAzRTc3REFGQ0ZGOUJFOEJGM0ZBOTI0OTM3MDYwRkVDQjM4Ci06MTBCNDEwMDBGMzNEN0MzRjI5QzE1ODc3ODk4REVCQzNGNzFBMTkzNzYzCi06MTBCNDIwMDAzNkQxN0Q2QUE0QUIzMTFERjgxRUUyRTFBNDlDMTRCQUFBCi06MTBCNDMwMDAxRkQ1RDgyNUVFNTMzN0E2MDdEODdGOUJGRDEyRkJGMzA3Ci06MTBCNDQwMDBDNkNFRDI0RThBMDc4MzBFMEJERkFCNkU3NEY5MzRBQUQ4Ci06MTBCNDUwMDAwN0QyMjE0NEZFOUZGODNFREZFMEJCNjk5OEVGMjFGRDUzCi06MTBCNDYwMDA1RTUwOTFFREQ3NTc1MURFN0Y5QTFCNEFFOUJENjk2MTY1Ci06MTBCNDcwMDA2RDEyRjFDMEY4MUUwNkU1RTAxOTk1NEVDRkEzRUY3QkUzCi06MTBCNDgwMDA4MUUyRTRGQjE3ODYxQzUwMzE1ODk5OURCQTdDMERCOUI2Ci06MTBCNDkwMDAzODhERUZGODM1MjVFQTNCN0U0MzVFOEYyNDBBQjk5ODU0Ci06MTBCNEEwMDBFOTI2Q0M0NDdFNTdBNTcxNjNFNTYxRjBGREJGMDA4RkFFCi06MTBCNEIwMDA0MEFFQjEzMDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Ci06MTBCNEMwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRjNCMjRDM0MwRjBBMzU2Ci06MTBCNEQwMDAxRTgxRUY0QTMxMzAzMEYxQTI4QUQxMTJFRkUzNjQ2MDZECi06MTBCNEUwMDAxMEUwNjI2MDMwMDVFMkZCM0MwQzBDMzM4MEY0NEMyMDMxCi06MTBCNEYwMDAxNkU1NjY2MDEwMDNFMjFBMjBERTBEQzQ3QjgwRjgxOUExCi06MTBCNTAwMDA1MEZDMzkxMEVGMDBFMjFCM0MxMEZEQkU0QzBDMENGRTUxCi06MTBCNTEwMDA0MDFDMDhDNEMxNDBGQzk1ODE4MUUxMUIwM0YxRjY3MzE2Ci06MTBCNTIwMDAwQTMzMzA0QzE1NDdGMDJGMDNEOTlGMjRFOUU3RkZDMUI4Ci06MTBCNTMwMDA4NjQzMENFOTZCREY3MUEwN0RGM0FDMTA3QzQ2MjA3QjY5Ci06MTBCNTQwMDBCRTE1QUE5QTA1NTZGOENENTg4ODI2QkYwODhEQkYxODkzCi06MTBCNTUwMDA4RkZFNzIwMzU0RkU1QTREMzRCM0I1ODFFOTA5NDlDRENCCi06MTBCNTYwMDAzQTRERkM2RTQxQzdBQTQwRkZBOTAxMzEwMEFERjE1RjIxCi06MTBCNTcwMDBDQTY4MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Ci06MTBCNTgwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkU1N0QwOTc4OTRENUJFCi06MTBCNTkwMDBENUYwN0RFNzVENjYyNjk5OTlCQzgxNkNBQzRFRDg0NEE4Ci06MTBCNUEwMDAwQjc0NDI0MjFBMTBEQjYxOEI2ODExODM0QjA1MTc5OEFDCi06MTBCNUIwMDAwODY0NEYyNjIwRjVDN0RBRUZDRjQwMDA1MTUxNDM4Qjg2Ci06MTBCNUMwMDAzNTVBQjQwMzA0MDUxQjM0RDg4MDQxMDIwRUUwODIyREE1Ci06MTBCNUQwMDBENUQ4NkE1RERBRDJBMEM4MUE5MzgwMUJGRTVERkNDRTc2Ci06MTBCNUUwMDAzOUY3QkVDOUZCNEUyNjgyQjVGRkZGRjVGQkZFRjhGODIyCi06MTBCNUYwMDA1Q0VFN0JGN0IzREQ3M0NFM0RGNzhFRTIxOEM3OTQ4QjFDCi06MTBCNjAwMDAxOEZCMTJGRkJFQzc5OEREQzYxODFCRDc5RDMyNTYyMzA0Ci06MTBCNjEwMDBEMjRBMkRDRkNENThEMDAzRkZDQzYyQUNEQ0FEODU5NzlDCi06MTBCNjIwMDBBNzMzMzY2NTg3MUFGOTVFMTJFNDM3NDg2MTNCRTQ2RDRCCi06MTBCNjMwMDA3QjlENTRERUJFOUVFNzIzNkVDRENGQTBGQ0EzM0FDODBGCi06MTBCNjQwMDA0QkQwREVERUYyQzA2NTUwREVCOTQzNjYxQkIxREI5MTQ0Ci06MTBCNjUwMDA3MTM2OTZDMkQ4MzEwN0UzN0Y1OTkwQ0Y2NkFDQzBDOTI2Ci06MTBCNjYwMDBCM0U1MUJGNkNEQzVGNjQ1NEQ3NkU2ODRGRUNBNzcxNUUzCi06MTBCNjcwMDBDRUJDMENGMjg1MDc1NTg2NTVDQTM3MkZEM0ZBNDNCRTg4Ci06MTBCNjgwMDAzODJDMzU2MEJFNjMzMjlGNUY2OEE3MUNERTBDRjUzQjJCCi06MTBCNjkwMDAzQzJEMjkzN0I4MTgzQjU1RTU2MDVFOERCMTZBNzc0Qjc0Ci06MTBCNkEwMDBDQUY1QTMxODJCMDk2RkNGQzU3NjI1RjU5MjBGOTczQUU3Ci06MTBCNkIwMDA2NUM3RTY5N0ZCRTFCQUI2NEEzRUJCOTdCMUQyMkRGMTFBCi06MTBCNkMwMDBDQzNCOTJDRkUxNEJGOEZGNThBMzFDRjkxRTk0MkY4Njc4Ci06MTBCNkQwMDA3NTMyRThCNzkwRDVFNDMyMTlDNzVGQUI3OURERERGMDlDCi06MTBCNkUwMDAzQjU1QTVEMzM4NDZCRTdDMkI4QzAzRUQyQTlFOTY3QzE5Ci06MTBCNkYwMDBCOEM0MEExQjBCMzRDMEY4RURCQjlDQjMzN0I5NzA3RERFCi06MTBCNzAwMDBDQkI0MTE2RTVDRDdERDFBRDYyQjBDRTdFRjc0N0E3MUNGCi06MTBCNzEwMDA3RTFCQjQ1QzI4MkY1OUJGNDEyQjE4RDVERDVGRTk5NkZECi06MTBCNzIwMDBCRUQ2NzlENTBFNEQwRDk4Q0FBM0QzNTM1NThDNzk0NzAzCi06MTBCNzMwMDA3NEU3NEIxOEYzMzc0MEJGNEMwOTZCQjM0Njc3N0ZGRjc0Ci06MTBCNzQwMDA4MDI1MzI5NjhDRkRDQkNDRUJFOEVFMUYyMDQ5REY0MzAxCi06MTBCNzUwMDA2RkMxM0YwMTVFQTEzRDZFODJBQjgxQjdDNTNBRkNEQjk0Ci06MTBCNzYwMDBEQjhEQjdCM0JBQzBBM0QyOTk2REVFREY0ODFGNDAzQzYyCi06MTBCNzcwMDBDMDdDNkExMDRFOTBBRTExRjNGMzRDNjQ5MzE0RThERjcyCi06MTBCNzgwMDBFMzY3QkFDNDdBNUY4RjkxRDZBODJDOUZDMTU4MEI0MjQ5Ci06MTBCNzkwMDBBM0ZEQ0E3OEM4NkI2QzExRjMzMUY2OTMxNUQ5RkVBOUQ1Ci06MTBCN0EwMDA5MEJGOUYwNUU2RTJCQzU3NDg4MTIyQzQxMzYzMEQ2OTMwCi06MTBCN0IwMDA0OEJGQUIyNDM2MUJEN0ZGMDM5QzM0OTRBRkVBMDdGNDkxCi06MTBCN0MwMDAwOTcwQUY5OTk2QkQ0OTk2QzREQzkzMzA1RkYwQzRCRDUzCi06MTBCN0QwMDBFOUQ0NEYyMUY1QTM0MjNGNDNDRkRGOEY5RTlCNjNFOTFFCi06MTBCN0UwMDA0N0NGMkQzMkZBQTlBNDdFOUMxN0Q2NEY0REVFMDRFQjFECi06MTBCN0YwMDA3QzcyNEI4QzdFRUVBNDdFREMxN0I2MkVGRDhBODlENjM5Ci06MTBCODAwMDBGOTVDNTE0NkZEMjQ0RUY1QjEwMEQ0OTcwRDdBNjAyREI4Ci06MTBCODEwMDA3RTE5Q0E1REY1ODk2M0VGNjU2NkJBOThCQzEyRjlERkQ3Ci06MTBCODIwMDAwRDVDNjJBNjhCODQ5QzM4MEIxRDI2RkFGQjU4RjJEMDY3Ci06MTBCODMwMDA5MzdFRUM1QjIyMEY4MzQ0MTIzNTFBNUZFQkFGOTE1QzcxCi06MTBCODQwMDA5OEQ0REY0MUY5M0JGQUJCNDgyRURDMzEyMTcwQjEwRUIwCi06MTBCODUwMDBGM0MwQjE1OTNGQzg2QjgxNkZFQjMxRTgxQUU2MjlCMUVCCi06MTBCODYwMDAzNDRDQkQzNjRDQTNDQkVGNTYzOTFDMjYwRkY4REI4ODgxCi06MTBCODcwMDAyM0QwM0U2OEVCMUM5MTA4RjlGNUQyQTQ1RjIwNUMzNjFBCi06MTBCODgwMDAzMzFCQzEyNzRFNjY5NTU4MkZDRUNFNDgzRUREOUQ5RTc4Ci06MTBCODkwMDBCRDI5NjQ4MkQzRUE0MTgwN0ZBOUJCREZENTZBMjAwRDMwCi06MTBCOEEwMDBFOTZCMkJCQjIxODRGNEI2NkExMEFDQTczRjYzNEY4NUNDCi06MTBCOEIwMDBBRThGODQxNDY4M0ZBODIwMERFMTY5RDc4MEJGQ0RFMzI3Ci06MTBCOEMwMDA2QjMwRkUyODFBRkYxOTFDNzcwNzhFM0ZBRUU3RjhGNjlCCi06MTBCOEQwMDAyMTM5OTZGMTFEODM4QjJDRTMzQjM0MTgxRkU4N0QxNzJCCi06MTBCOEUwMDBCQjU1OEMwRkYwOUJDMEQ4RjNBMTVCNjg3Q0ZCRTAyMkJBCi06MTBCOEYwMDAxQUZGNkU4RDE1NTlDNjhGRUIxQUZGMDUxQ0Y3QTVERUQyCi06MTBCOTAwMDBENjNGNjQ4Mjc1RkQ4MzRCQUNFQkQ3RjhGQTVGNjUwQkNECi06MTBCOTEwMDBDNUY4NzFCNEZFNUY4NzE2RjBGNTBGMkVFMUVCQjdGM0IzCi06MTBCOTIwMDA3RUJCQzZGNzc0QzFGRjc1MUNGN0FEREVENjNGNzRBMkFGCi06MTBCOTMwMDA3NUZEMTc5NTU5RDc2RkU3RTNCRkNCQ0FDNUY4MkUxQTI3Ci06MTBCOTQwMDBGRkJENTAxOTVGRkY0NTY1MzRCRTY2MEZGODkwOEVCNDk5Ci06MTBCOTUwMDAwMTcxOTU2MTE4OUYwRDA0ODY0ODI1MTlFNUE3NzQ2NDQ3Ci06MTBCOTYwMDAxRkM2QTBGRDNBMzY4NEUwNzA0NzFDQTdCQkNGRTI4MDFCCi06MTBCOTcwMDBERTVDRERGMjhFODU4MUEzNDA5RTU1MDg5QTJGQUQ5RjM3Ci06MTBCOTgwMDBBNEExOUNBNTcyOTA3QjBCQzU1NDE3MzRDOUI0REZCMDM5Ci06MTBCOTkwMDA3NUY2RjA3MDk4NkY3QjkzMUNDMkZDODI3NTk3ODc2NTczCi06MTBCOUEwMDBEQUVGRDhCQzNDNkNBN0IwMDg3RUZGRjBBMUQxMUJDRDZDCi06MTBCOUIwMDBFQjhBNEUxN0Q2QThDNzVBMkQ3Q0M0RTcxMzlBQ0M0NkZCCi06MTBCOUMwMDA1NkMyRkNBNjIxMTE4Q0VCQ0UxRjAzMzlDQTQwN0VCRUE1Ci06MTBCOUQwMDAwRjcyMTREM0UzMkE4QzA3REY4RjgyOUM2NTlBOTk2RkNDCi06MTBCOUUwMDA5NkYxN0QzQ0M0REUxQzk5ODI3MjgyRkYxRDUzMzhCQ0U3Ci06MTBCOUYwMDA4RjJEOTFDMjA4RkZDRkQ2MkVEMjUwM0UyREFDODkwNzk1Ci06MTBCQTAwMDBBMDc3Q0YyMzI4RjBENEI5Q0IxRURFMjgxMTNDQkQwODg3Ci06MTBCQTEwMDA5RjFCODkxNTE5RkIzM0EwQjUxRjgwQjZCMEI2QUZBNTIzCi06MTBCQTIwMDBERDJEMkNCQzMyMERFQUNGNUY5MzNGNDg4N0Y1REYzQzFDCi06MTBCQTMwMDBEQjNFNTZDNkZEODNGOTA3RDg4ODhGRDkwMDVCMEU2M0JECi06MTBCQTQwMDBCMzFCRDdBQTAzMjA3M0UzNkNGNUZENTY1M0ZCMzkwMUYyCi06MTBCQTUwMDA2QkZFRTYyMjZCQkU1RDBEQUIzNkQ0Mzc4QTI1QjYwMTkwCi06MTBCQTYwMDBGQUJEQjVEMjVBNkU4QzkzMjhGNUUxNzgxNUUzRkQyMDI2Ci06MTBCQTcwMDA4NUNGRjc1NjRDQzdFMjY3OURGMDNBNTdFNzZEOERGOUQxCi06MTBCQTgwMDAwNEVGNTI1OTg0RjZDQkQ2NjQ0NkY4NEZBNjdBMDE5RDRFCi06MTBCQTkwMDBBRjNCN0FCRTczNTU4NzNGMEZFNjMzRjc0RTk5RTAxOUY3Ci06MTBCQUEwMDAzREZGRDZCREYxN0VEQjE4NDg2QjNGNTY5MTA0QTNENzBFCi06MTBCQUIwMDAxMzNERkY3OTRCQTNEN0EzOTMxRTk2MUY4QUZFQ0VFOUIxCi06MTBCQUMwMDAyNDlBOUU4MjREOTNGQTFFMzVENTJCNkZCOEIyRUY1MTUyCi06MTBCQUQwMDAxMzdEOTU2RTk5NjVDOTE3ODdFNzU4RUExN0Q2RTY1QjE3Ci06MTBCQUUwMDBDQTE3RDYxNDVCQ0FFN0FGNUU2NEM5RTc4N0VFQjRENDYxCi06MTBCQUYwMDA5RkI3NzQ5OUE1RkNENkNBN0IyQ0U1MzcxN0FEQjVFNDgyCi06MTBCQjAwMDBFNzA0MUVCMUQ0QkY3MUY2MDY0QkI5NkRFRjI1RDcyMEZGCi06MTBCQjEwMDAxRjU1QkYyNTMzREMzNzNFNzUxRDdCMDBGNUMxNEY1RERBCi06MTBCQjIwMDA4QTBGRjE3MUEyMkE4REY4RTA1NDk1OTdEMkY2QTY0Q0FGCi06MTBCQjMwMDA0NzgwQ0JDMTAyNTQ3MTE2MkU2QjA4QUQ5RTg4NzI5OTU2Ci06MTBCQjQwMDA5MUZDMkM1RUI2MzMxNDFBMDhEQUFERTQyNUY4QzlCNUI5Ci06MTBCQjUwMDAxQThCMDAwOTRCQUM0RjE3MUQ3N0NBQTZGMkQ2RjM5NDg3Ci06MTBCQjYwMDBENzAyQTM2N0Y2MkM5NzVCNjM3RjBGNkVDQ0JGMDhFNTA3Ci06MTBCQjcwMDA0RTZGRjIwMEZFMDZFMDNFRDcyMUY2RjdFOEYyMzI4OTdBCi06MTBCQjgwMDBFNTk5QkYzM0I2OUNGOEZDOUM5MEIzNjUxQTk3MDc2NTlFCi06MTBCQjkwMDBDRkY2OUJDQzNDOTg4RjhDQThGQ0FBRjExQTAwQTgyODYxCi06MTBCQkEwMDAyNzUxM0I0RjQ2N0EwMDJFQjBEMENCNTAwQjdGQjdFRERDCi06MTBCQkIwMDA5MzY5NUUxNTI4MTNDNkEzQzhDOTVCMjNBMTlDODkxQzgxCi06MTBCQkMwMDAxODdDREQ2ODlDODdGRjdFMDlGOUFFMjk5OUY2RjVCNkU5Ci06MTBCQkQwMDBBQUU5N0Q4RjJBODg5RjNDNEE0RjU0Q0RBNkY0NTg1NTM4Ci06MTBCQkUwMDA4MEQyQTM1NTQ1OTRCRTVGNTU0OTY5NkJENTUyNEEwRjIzCi06MTBCQkYwMDA1Nzg1MjhGRDUzRDU2QTRBREZBQkFBQTFGNDlEQUE1QUZFCi06MTBCQzAwMDA0QUZGNTAxNUE2QjRCRENBNEZBOUMxMEY1REYyMzc0OTBFCi06MTBCQzEwMDBFOEFCQzJBRTgwOUQ4N0YyNjdDNTVBNTY0MEREMTZFMjlBCi06MTBCQzIwMDA3MzVGMUFGMkY5NTlENzY3MjM1MDFGM0ZGQjhFOURBMTBFCi06MTBCQzMwMDBCRURGMUJCQ0EyRTlBRDc3M0NGQTQ5NUYyOTA4MDNGRUQxCi06MTBCQzQwMDAzMzdCOTYzQkUzMzg5RTlDMzYzNjlEODEzQ0JBNjdGODQxCi06MTBCQzUwMDAxM0JFREI0NjUxNUU0MTkyODEwREM5MzdDQjFEQTNERjc4Ci06MTBCQzYwMDA2MThDRjA3NTNFM0MzMTdGRTc5ODZCMDExRkM3MUVGRDZDCi06MTBCQzcwMDA2QjM2RjY3QjRFRUM3RjcxMDc2NERBODc1OTY0OTMwRjVECi06MTBCQzgwMDBGMTY1ODIxQkVENkI5RDNCODRCQzNGMEZGQzNFRUE4MjVECi06MTBCQzkwMDA1RkNCNjAwNkU5MDQ0OTI3RkEzQkRCNjg2NzBBQzJCMTVCCi06MTBCQ0EwMDAzOTNFMENDNENGQ0UxRURDRTQ0MTdFNUM5QzY2RDM4RjUzCi06MTBCQ0IwMDBDNjgwODM5MTk2MzdBNEVCMkVGM0ZFRDM2NENEOUZBRDVGCi06MTBCQ0MwMDA5MUE2Mzc5MDNDRjYyNjVDM0YxQUU5NEFENzhGMEU0MzdGCi06MTBCQ0QwMDBGQ0E3NTE2QUY0QjMzODRERDM4RjAyQkY5RURBMzIzNEQ5Ci06MTBCQ0UwMDA4MUVGREY2MUJFMEZENjI3MTJCRDgyNUQ0OEY1RkZENTFCCi06MTBCQ0YwMDBGM0U5QUQxRjYzM0U4QzM1QjIwRjFDMjgwRkEwNkNFODMyCi06MTBCRDAwMDBGOUVEOUQxRTc4NTczRUQxRjIxMDVGQ0RFQTY3QTgyRjVFCi06MTBCRDEwMDBDNEMxRkY1RjBFQzE3RTE1Q0ExQkZEMDYxQkU0OTBGRDZBCi06MTBCRDIwMDBEQkY4QkRERTMyMUVCNEYzMUEzNjM3QjZFQjlENkUxNTY2Ci06MTBCRDMwMDA3NkNDQTAyQjkwNTcxQTFBQ0I2NDI3M0E3NUVCQkU5MjlCCi06MTBCRDQwMDA2OEM5MDc5QkZBRTk5NjdEMDZGRjAxRkMwRjgyNTI0MTA0Ci06MTBCRDUwMDBCQTI5MTM1NEQ0QTFCODU2NEIzMEJGMjMyODNGMDEyRjIyCi06MTBCRDYwMDA0MTg5RDcyQjc3QjQ2QTAxMkY5MTYzMEJFQTE5QjdFNUE0Ci06MTBCRDcwMDAxODc0RTdCREYxOEYyMEVGNEZGRTQ2NjVGNzYyRjlERkRCCi06MTBCRDgwMDA2MDU2NTBBRTFBQzUyMEY3NkM5MDlGMkY3MkI3MzU5NjRCCi06MTBCRDkwMDBDRTQwQjk3N0QyQzZGN0Y5MDUyQ0NGODM0NjRGMTFBQjA5Ci06MTBCREEwMDBDOTQ2M0RFNzIzNjY5QjhFRjRGRjExRkI5RDI3RDM2NEI0Ci06MTBCREIwMDA2RkY4NkMxQUFENzNGRTZBRUIzRTBCRkE5OTI1NUY1ODZCCi06MTBCREMwMDA2QkNEMTdCMDZCNTM5MERFMEJENkE5MkMyQzIxNUY1QThDCi06MTBCREQwMDBDQkJEMzY5REZBMkQ2NDk1QUJDOERFNDE3QjA1QzZCRDUzCi06MTBCREUwMDA0RDY3Q0EwMDk4NUZGOTczOEY2NUU3NDNGRTNCMzZBRTM3Ci06MTBCREYwMDBBNzFCRjY3QjcxMUYzRUZGOTJBNEIwRTY4N0YyMEYxQUQ1Ci06MTBCRTAwMDAzMzdGNzAxOUMzRjZFMTU1MjhBNzQyNkVFNkRCQ0M3QTgyCi06MTBCRTEwMDBFMkVGRUJDRTNGN0FCRUM2N0VEMkMzOEYyMEU2MjE2RjIzCi06MTBCRTIwMDA5MUZDRTExODc2REEzNDlCMjRGNEFEMTBBNTM3RTBCQTIyCi06MTBCRTMwMDA0RDdBNkJCRTgwODM5MTJGOEZDQURGMTk5NUZGQTdFOURBCi06MTBCRTQwMDAyRDg5NTlFOEVEODgxNEM4QjcyNTczRkE0MjdENDE1MjBGCi06MTBCRTUwMDAzQUI1QzAzN0U5M0ZBRDQ3RkZFNUZGRDJGRTA3NDJGRkU1Ci06MTBCRTYwMDBEOTk2RkVFRkZDOTdGNjNGQUNDN0ZDNTdDNkVBQkZGQzdECi06MTBCRTcwMDBCOTZEM0I0MzIwNkY0QTlFNzlDOEMzNjAxRjNBQTlENDZECi06MTBCRTgwMDBBNEY4MDBFRjY1OUI1NzdBOTAwRTRFMjgyMTBGRDJGMzRECi06MTBCRTkwMDBDOUIwM0MzRDE2M0RFQzQ2N0EyMDNGQTJERjI1QTE1REFFCi06MTBCRUEwMDA4NUZGODRGRTRGM0Q3NURGNENEQzY3M0VEQkFDRUE2NDBBCi06MTBCRUIwMDAyRjZEQjE0N0VDQzBBRjE1OERDNTMzRDgxOENBMUZFMTNGCi06MTBCRUMwMDBGOUJCQ0ZDODk4NkZCMkQyNjdDOTkzMEZBNUEwRkYwRDc5Ci06MTBCRUQwMDAyODQ1RDgxMzExRDI5NzJBRUEzRUNDQzU3RDI4QzgzQTA2Ci06MTBCRUUwMDA4OUNGQTJEQkUxRjhFN0ZBOTA3Q0NDRDcxMjdBOTZDMzJGCi06MTBCRUYwMDAzQzQ5Q0YwRjBBQjgwNDFCRUYzQjIzQTNFRjkzQjU3MjY1Ci06MTBCRjAwMDAzRjY4NTRGRDIyQTFGRkQ0REJEQzQ5QzdDMDc0NjJERjY3Ci06MTBCRjEwMDA2MURGNDE3OTY5QzA4Mzg1QjlGRTUzQkRGNUUxMzE0N0UxCi06MTBCRjIwMDA2MDNFNkQ3NUJGRjE0ODI2MzgxOTdDNzZCNjYxRkUyRkVDCi06MTBCRjMwMDA5RUY3RjYyRThGREI4NTlERDdERDJFNENFREJDNEQ0MjU2Ci06MTBCRjQwMDA2RjZCRTY2OTk5MUFGMUEwNUU1Q0I2NDFGNTg1RTA3MzA2Ci06MTBCRjUwMDBEOUI2NEQ0RjNDOEE3NkVBQkI3NkRGNzBFOEJGNzREQjFBCi06MTBCRjYwMDA0QjdGOTgwMEY5RDJFRDZBRDIwQ0JFMEM5Nzk0RDI4RDFCCi06MTBCRjcwMDA5NzIwRkNCRjc0NkMzNzFFNEE3RUY1OTJFNjFEQ0RCRjNDCi06MTBCRjgwMDBGRkI4NEYzNzNFNEFCN0VGRDNEOEU4OUVGMDk4RDJCMDBCCi06MTBCRjkwMDA0RjZCNzVDNUMwNEJDMzkxNUNENEFGQUFCNzdFQUVBMTQxCi06MTBCRkEwMDAzRDc5NzJBRkM0NTJEMzYzQzA3M0MzNEJBNDI3MjA5Q0E2Ci06MTBCRkIwMDAwODhGMDI0RjVENzg4QkFBMUYwNEJDQTAzQzM3RjAxNDk5Ci06MTBCRkMwMDA1REZFODA5MDNGRDg5Rjc3MTREMUYzRDNDRkEzNUZGOTY0Ci06MTBCRkQwMDAzREJCMEZENzVGRjRGNEVEMUU1Q0M3NzFBNTkyRDNGNTlFCi06MTBCRkUwMDA2MzJCNTNGQzMwNkU5MTFBNEFEMTI5RTVERjhCMUVGRjdCCi06MTBCRkYwMDAyMUQxNUJFMTFCM0Y0Q0UxRjZBMEJGOUY4REY2QTY1MDFGCi06MTBDMDAwMDAzRjVDREZDMkY1MzdEMEZBMEE1ODgwRThBRUU4MzEzOTM0Ci06MTBDMDEwMDAyRjBDRTlBNzBBOUJCRTNEMDY1RjY0Qzg5QzJGOEU2RjVDCi06MTBDMDIwMDAwNDg1MEJENjc3MUNFRDEyRjRCM0ZFNEUwRTZGMjY3RkZGCi06MTBDMDMwMDBDODIyODZGQ0ZGNDNDMzNGQ0UxNjUzRkU1MzA3Qzc5MzY3Ci06MTBDMDQwMDA0M0I2MDlCRTAyNkRDRjRDQUY3NTc3QjcyMDdFNEUwRDVCCi06MTBDMDUwMDBGMkE3QTIxRjJEQzg5NDkwODA4N0Y0MjVGNDJCQkYzMTNFCi06MTBDMDYwMDAyRDk1RTM4Nzc5OTU2Q0QxMEVGNDgwMjlGODFERUJCN0Y3Ci06MTBDMDcwMDBBODdFRTcxODRCM0JGNjY1N0FGN0Y4NEJDNEY4MzBFRjJCCi06MTBDMDgwMDAzOERDQkY4RkE3QjBBMjg2MThFQkJCNTUzNkY4MUVGNjdBCi06MTBDMDkwMDA3MTEzN0Q5OUY4OUJGMzdCREQzRDlDQkYwRDdFMEZDRjI3Ci06MTBDMEEwMDA5QThFRTU5RkJDQzlGOTA3REJFMUZFMDhGMzhBQTQ1MjJBCi06MTBDMEIwMDBGOUJFRUIyNTkyMDc3NjE2ODlDNUQ3NzVBQUUwNkI2QjlBCi06MTBDMEMwMDBCOTQxMjczMDZGNDU0QTMwRDEwQkY2REY4N0UwNEZGRThDCi06MTBDMEQwMDBCMzgyNzVEMENFMjQyRjgzMzg5RUE3Njc3RjA2REYxNkU0Ci06MTBDMEUwMDAwQUZFMUYyNTVCRjk5RkFERTc3Q0RGQkI3RTE1QTI3REI1Ci06MTBDMEYwMDBBRTRDMEQzRkYxMjhGMjJCRjA2N0M4OEJGQ0FBRTZFMUFECi06MTBDMTAwMDBCQTRGRDcxRkY4QzM0REMwQTdBNzFCMEMzRUI1Q0FDRjY3Ci06MTBDMTEwMDA2ODNFMkQ3QTc2QjM4NEY0MTlDREE3QTc4QjQwMUI4OThFCi06MTBDMTIwMDBDNUE3RjAzRDI2OUYxNkI1RkUzRjk1OUYwNkZDQUU4RjM2Ci06MTBDMTMwMDA4MjlGMjEwRjdCODM2M0I0M0MzQzYzRjMxMjNDQTNFNUY1Ci06MTBDMTQwMDAyMUZDQkRDOUIyN0JEMjlGNDE3NzA2QkQ5NUZDQjJGQ0Y0Ci06MTBDMTUwMDAyMkYyMTcxODc0NjlEMDVEMTc1RDFBNzREN0MzRkY2Mjk1Ci06MTBDMTYwMDA4MTVGNzRGOTYwQTQwNUEwOTNCQzVEMkFEOTU1NjVDREEzCi06MTBDMTcwMDBGQzNDMENEQUJEM0MyMDhCRTBFNEE3NkQ4Q0Q1QkMzQ0NDCi06MTBDMTgwMDAyMEM5OUMwRjQ3RTUxQkEyRUFGQkEzRjI3OTUxRjUwM0Y2Ci06MTBDMTkwMDA1MUY5NEE0QkZEQjJBNjAzMUEyM0ZDNDcyQ0Y1RUM0QjkwCi06MTBDMUEwMDAxRjY1MUZDNEIwODc4Q0ZEMjZEODc4NDYwQjIxNUQwQzE3Ci06MTBDMUIwMDBFQ0Q0NTBERUE5Q0I0MTA1NDVGRkUwMUU5OUVDQzUwRTNECi06MTBDMUMwMDA4MEYxMkExOEE3QTMzRTNEMUMwMkI5QjFEMkM5RURGMEY3Ci06MTBDMUQwMDAwRUJERDNEMzA3RDI5NTg5M0NERjk5QUNBRDQyQjk2Nzg4Ci06MTBDMUUwMDA3Q0VGNzQ3MjNGNDc0NzVFQTcyN0QxRTRBNzM4RDIyQzczCi06MTBDMUYwMDA5M0RDNkUwREIzRTlCMUZDMjBCMEEzMTBERTVCNTk2Rjg4Ci06MTBDMjAwMDBFNURDRkYzOTRENzYwRDVFOEFGNjY4OERFQzQzMTM3N0Q5Ci06MTBDMjEwMDBDMUIyMUIzREU4MkFFOTY4MUU3QUNENkNGOEJFRjA1NTI0Ci06MTBDMjIwMDA5OThFNTUzQUUyM0M2MzcwNUUyQ0U0NTdGQTk5RUM4OTlBCi06MTBDMjMwMDAxMzJDRjRCMzg5RThDRjZDRTY3NkM1ODIzNTUxRkEwODQxCi06MTBDMjQwMDA1QjQzRjQ1NEUwNUFBMkExM0MwNTNCRTA3REFCM0Y5NzMxCi06MTBDMjUwMDBGMzQ1ODlFOEFGNjhCREI1REM2ODhGMjc1QTY4REY5NTdDCi06MTBDMjYwMDBENDU5Q0IwM0MyM0VEQTY1RjA0OTA2Q0IyMDM5ODM4NjI4Ci06MTBDMjcwMDAwRkRBRTc0MjJFNEY5MzQ3NUQzMzFCRjBEMTcxNTA2NkMyCi06MTBDMjgwMDA3ODlFNzlCNjU5MjY3QzlDQURFN0U3OTcyQzk0NENGQ0I4Ci06MTBDMjkwMDA1NkMxM0E0OTFFMUE3MDZBNDM3RUQyN0E5NzU3NkQzQjRGCi06MTBDMkEwMDBGRTlDN0QxN0QyQ0RDRTNGOEVGOTM5QTQ2RDNCREYxREFDCi06MTBDMkIwMDBCMTFCRjNDRkJEM0RGODhGQUM2N0ZEMjk3QjlERTQzNzAzCi06MTBDMkMwMDBFRUQ4RUIyNjdBRUZEOEYzREJDMTc3NjE3RTk3OURGQzQxCi06MTBDMkQwMDA3NTFEN0IzRjFGODNGNEQ3QjFEQzVFODRGMkFFNjMxMDIzCi06MTBDMkUwMDBCNzg3QUFGNzdDM0VBNjk1RjZENzE1ODRCN0EzQjJDNjQyCi06MTBDMkYwMDBGNUEzRTZCRjFFOTY5MjMwODU1NUExREVCMDM3OUVGOEI1Ci06MTBDMzAwMDAyOUY4QkM5M0ZDMEIxRDdCM0VDRjBFQjhGRTc1RUJBOTQ0Ci06MTBDMzEwMDAxMEU3MzkxRDZFMzZGQjU5OUM1RjIyRjc4MzA3Nzc4RjM0Ci06MTBDMzIwMDBERkI0MENDRkEzMUJGNzY5RjNBMTdDQ0EwQjdGMUY4MzdCCi06MTBDMzMwMDA3MkI0RTM1OUFFMEZCNUFCQUQ4RkUzNzk0NTg3RkNFMTNECi06MTBDMzQwMDAzMjE1RTBEQzhFNENENTlGQjFGQjk0MTE5MzQzQTM2MjcwCi06MTBDMzUwMDBDMUU1RUZFNDM3Qjk1MDc4NjgwQUI3NEZGRkZERTEyMTM2Ci06MTBDMzYwMDBGOUI5QkM3Mzg3MUQxMkFFRkI4QkMzN0Y0NEI5QjBENzNDCi06MTBDMzcwMDA0RTc0NjlBQ0Y3NzRDMzMyRDI1N0NFQjdFRUUxQ0E3RkMwCi06MTBDMzgwMDAxNzNBQjhEMDc1NEI5MTBCNTlGN0Q0N0Y3MzdDRkY1QThECi06MTBDMzkwMDBGNkQyRkNBMkY5QTAyNzlERUZCOTgzRjJEQkRDM0U5QTJFCi06MTBDM0EwMDBFRjA1RDJGQjgyRkY2OTc4N0YxNkYwRUUzOUZGQkFBQjVBCi06MTBDM0IwMDBGRkNERDdERDNCREU1RjlEMkJGMEFFRTM3OTdGRjA4NUNGCi06MTBDM0MwMDBCRkQzRkNCRUFFOUNEQkY0REY5NEVFMERCREZFMTU5QjJGCi06MTBDM0QwMDBGN0NEMENBODNGOURENUI4NTBCMUI4QjI3Q0ZGQUIxOUQyCi06MTBDM0UwMDA1MEZBQ0FDMDAzODkzOERGQzk1MUU3Mzc0NkZBQTZDMkY2Ci06MTBDM0YwMDBFREE2Qzk5MjhERUM0MTk2MjgwOTdCOTBEQjUxMDM4NDEwCi06MTBDNDAwMDBGRTMwNjA0OTAxRTkyMTAzMDZERUNGRjUwNkM1QkIwRTBCCi06MTBDNDEwMDBDRjFGNUYxOTNDREY0N0IxMTQ2Q0VDM0IwMUNDRUI5N0FECi06MTBDNDIwMDA4QkJDRDU5RUZDQjlDNEZDNzgzNDNBNjBGMEY3MEZBMkZGCi06MTBDNDMwMDA1RTNCNzBBMDRDN0EyRkE0QTRFRkJFRTg5OUNFQkY5N0M0Ci06MTBDNDQwMDA2OTE2QkJFNzRBQUZENTBFQ0E0REIyREE0QjUzNDU3RkVBCi06MTBDNDUwMDBEMzE4OUZGRjM0OTcxNDBFMDMxQzI2MEZGQTY5MTJGQUEzCi06MTBDNDYwMDA0NzI3MEY1Nzk5MDRGOTVDMTY1ODgxRjZDNTU0OTdCNUJDCi06MTBDNDcwMDBCRjA2M0NDMzE5RjdDREUxNjg1NzBEMzgwRTU5OTc4N0IxCi06MTBDNDgwMDA3MDFDMjQ5MzlGRjRCQzcwQzQ3OTEzREMzMkMyMTgyRjQzCi06MTBDNDkwMDBDMzE0MUY4NzYzOUY3MjFGRjk5RDg1QkQ0RDQ3NEQ5MDQzCi06MTBDNEEwMDA1NzVDQUI1QTkwOUYxNUI0OTczOTFDQzhDRTM2RUNFNTUzCi06MTBDNEIwMDBERUUwQ0Q4NEZEQUQ4ODIxMERGODJCMDM2NUJGRDNEQTE2Ci06MTBDNEMwMDAxRkQ5REYwNjVFQkUyRTNFMEMzQzdFNTNCQ0JDMUI4NUQ2Ci06MTBDNEQwMDA5NzgxQUU0NTBBRjJFQjc0QjQxN0ZBNjJGRDBDOUUxRjA5Ci06MTBDNEUwMDAxODUyRThEQzRERDgwQjU3NzgxNzI5QTRGNzBDQ0M1MDFDCi06MTBDNEYwMDAxMDVGODU4RUE2QUJGMDFDQzRFMTkzNjgxRTE3QjdEOUY4Ci06MTBDNTAwMDA2ODdGNzA2NDQ5MDRGNzkxQjUwQUU1REZCMEU5RTMxMDhDCi06MTBDNTEwMDBERjMzMkY3QkVFRjQ5RDBDRkRFNjdFOERDNzNERTVGMTBDCi06MTBDNTIwMDBGMzhGQkY3REY5RTU0NDhDMTcxNDc4MkM4NEZGQUY0NjU4Ci06MTBDNTMwMDAzRkZGN0ExNjg5MDMzODJENTQ1ODI4QTEwRkZBQkQyNURDCi06MTBDNTQwMDBGNkJFQzVFRjZEQ0RFM0RGNzc1M0JBRkIzOTVGRkRERTk1Ci06MTBDNTUwMDBFNENBQkYzQTdEMEVFNEQ4RkIwMEYzNUQ5ODBFQTNFMTc4Ci06MTBDNTYwMDAxNUIzNURGRDlENjYwRUFGRTAyMTE2MUVDMkUzMkFFNDAxCi06MTBDNTcwMDAzQ0QzMzlFMTFEODJGRTlGRkJEM0IzOTk2OEQ3NEVFQUM1Ci06MTBDNTgwMDAxODk1QzBFNUVCMzBCMjE3ODJDMjVFMzhDQkJDMDkzRUNECi06MTBDNTkwMDAxN0NBRDdBMTA5NzRGRTc5NTA3NkM3OEEyQkRDMkFFQzFBCi06MTBDNUEwMDBFRDVGNjI3QzA5QTQxRDc1QUM0NjQ2RkI4RDc1OTIxRjNDCi06MTBDNUIwMDAzNzU0RTc2MDlCNjNDNEI3RTRBQjg2OUY0QUUwMERGRTQ3Ci06MTBDNUMwMDBFNDZDM0M4RkUxRTMyRjg0QTYwOTY2QkNCNUNEMzhBOUE1Ci06MTBDNUQwMDA4Q0U5ODkwN0ZDN0JERjc0MUVGNTRERTE4QkY2M0RDMkNCCi06MTBDNUUwMDA3N0FCQjMzNTM3MkY4NkZDQjg1REMwNkZFNkZFMkZDODNBCi06MTBDNUYwMDBGRjc5NjlGMzA2MUJEMkVGQTU3NTM2Q0JGOTZBQTkyQTM0Ci06MTBDNjAwMDBFQ0IxQjE2QzJDQ0U2QkU2N0VBNzNCMEJGMTcyNTBGNjExCi06MTBDNjEwMDA2MTNDNjdCMEY5OEMxNjg4NzEyRTE4MEQ0RkVDMUZGRDI4Ci06MTBDNjIwMDBFOTVCNTU5REY4NkJCN0RBMzAxRkUxQkFGQjIzMDc0MzhFCi06MTBDNjMwMDAzQjdBOTc1NjUzMUE2QjlFMDNFQzdDOUUwQjU5QzNFREM1Ci06MTBDNjQwMDA2M0QyRkZGREUwM0JBOUMzMTU5OThDRjY2NzFEMTM3RUVECi06MTBDNjUwMDA4RjY4RkE2MzQ0Qzc2N0I3QjAzMEVFQUY2OEFGQTI1Q0NCCi06MTBDNjYwMDAzODVCQ0Y2ODdGMDc5MERDOEY3NjM3RjBGQkY3Q0M3RUE2Ci06MTBDNjcwMDA5QzhCOUJCNkZGMTJGNTgyOEE2NjQ5QzcyMzg2MEFBNTYyCi06MTBDNjgwMDA1NTQzM0Y2REIwMjk1MUM2N0QzOEMzNkJDNEJCRUFBMzg3Ci06MTBDNjkwMDBBRjM3RjFDNTU2NTUyMUY4MUU5OEIwRkI2NjFDRjdFMzdECi06MTBDNkEwMDAzNjhEQTE5RUUyN0ZCMUQzODNGQkY4QzdDRDk5QzQwNzM1Ci06MTBDNkIwMDBCREFERUI1NzU1RUNBQUE5NDgzNzJBOTc4N0QxRjQzMDdFCi06MTBDNkMwMDBBQTNFQ0U5MkJGNEMwRUY0NDdGRTlBNjk2RjVERTI4Qjk0Ci06MTBDNkQwMDA4MUJGRUY2QjkyMzgxN0JDNDBGOTE2RkVGRjRDQkVCRDEwCi06MTBDNkUwMDA2OUM4Qjc4MDlDNjdFMkEzQkU1QTBGRjk5NjFBNEJCRTgxCi06MTBDNkYwMDAyRDk2QkNBOTA4RjdDNTdCODZBNjIyNUUxN0JGQUEyNjgxCi06MTBDNzAwMDBDNzkyNkZEQkFBRjgzOUU3MzMyMjRFQjlBMzExRTREQkY1Ci06MTBDNzEwMDBCNzRERjJBRDExRTQ1QjhDNzg5MEJGNUZBODdDMEJGRjQ2Ci06MTBDNzIwMDBEN0YwREYzNjk0NkYzMUQ2QUI2QjU2RjkzNkE2RjkwOEUxCi06MTBDNzMwMDBDOUI3MzE4RDM2NEIzQ0FGNUQzQjlGN0M5MzkyQUY0NzgxCi06MTBDNzQwMDBGREY4QTBFQThCOEY0MTNGREI4NDNFRkU4Qzg4NEJDNDEyCi06MTBDNzUwMDA3MTUwQ0VFNTZBM0E4RDdGQTE3MkVFRTIwQjk1NzNGRkMwCi06MTBDNzYwMDA0NTcwMzZFNERDRTIxRDhDRTI5QzdCRDIyMTk3NzM4QjEyCi06MTBDNzcwMDA3NzgxOUM5MzkwMUVCOTlDNUJCQzg3NzFCRjVDOTQ3QzU1Ci06MTBDNzgwMDAxQkQ5NDNCRTMxQUE1RjExRTFFRDgzNERFOTBGREYwMkYyCi06MTBDNzkwMDBGRDhERjVBQjNFMDdENDFGREIyREVGQzY5OUU1NURBRUYxCi06MTBDN0EwMDBBNjEwREM3QUM4QkI4MzE3MjZFRjc2MDg3OTA3NzI2QzZGCi06MTBDN0IwMDAwOENBRDc2OEZBRjAzNTVCRTNDMTc3OEYzRjVFRkYyQjdECi06MTBDN0MwMDBFNDk3REZDQTc0REVGODg2OEQ5RjBGQkQzNkZFNzgxNkJCCi06MTBDN0QwMDBEMkQ3NjM2MjNFOEI4NERDNkJBRjBBNTFGRjUzNUVFNEI5Ci06MTBDN0UwMDBFQjJCNzdGMTM4RjE4QTQ2QUUxRjU2RDQ0QjYxMkZGQzA0Ci06MTBDN0YwMDAzMzc3QzIxNzFBQ0VCRjc4OEZDNDUyMjEzRkNCQ0VFQjBFCi06MTBDODAwMDBCMzI3OERGMzMyMzYyM0MzNDQwRjBCNzI0QUM5Q0ZCRjBGCi06MTBDODEwMDA0MDYxMEVGNEUzOTdCQTcyNEZBMkZFNUI5QUMzRkRGRTJECi06MTBDODIwMDBBNUUyN0JGMUFCQURBQkQwRkY1REZDODg0NEU3QTU0NjRDCi06MTBDODMwMDA3Q0FCMTFFN0RCMjM2RUEyNzkxOUY5NzdBM0UzMjc2NkI2Ci06MTBDODQwMDA4QUI4QTk5OUJGOTRDMjFCNjJDNDdGOTQ2RUIxRTY3Rjc3Ci06MTBDODUwMDAyMkY4NkY5NkRDNEFGMDYyQUZDQjMxRTMzODhDN0E1RDE4Ci06MTBDODYwMDA3MDNBMjhFMDU0MjdEMzdFREEwNTI3ODA5QjM3QkQyNzBFCi06MTBDODcwMDA5QzAwRDMzMzMyNTJCQUUxNTJGQzVCNTg2RjU2RUZFQjU3Ci06MTBDODgwMDAzNUUwMTZCRDZFQzM3RjVEMkFGQUU5MEQwRTA2OUM3QjZFCi06MTBDODkwMDBBQzVGQzAxREVDMDI5MjkzRDFGMDU4QTc3NUY5QjUzMzg3Ci06MTBDOEEwMDAzMTRFMDlFODg2RTQ0Q0U4RDcwMDE3MTgyRjZGRDI3MDk0Ci06MTBDOEIwMDBDQjdEOTc0NzA1RkQ2NEQ2NEM5QTgyRTEwQ0IzMzBBRTMwCi06MTBDOEMwMDAxQ0NBMEI2QTE3QkREQzBGRTAzMUVFMURFRjU4REM0RUMxCi06MTBDOEQwMDAyRjlCNjAwRkUwMzlFQzU2NjcyN0M5NDE4MzBFREIzNThCCi06MTBDOEUwMDBBRTA3MUMxNEYwREREREJGNzIzMkQ5Rjk0RDkyOEU3QTlECi06MTBDOEYwMDA0ODMwRTIyNEI4MDYwMUFFNzhGRjI4QTg3MEZDMDY4MTEzCi06MTBDOTAwMDAxRTkxRkYwRTNDRjIxOTg3RTMxRUM5OEJGRTlENUM2M0VFCi06MTBDOTEwMDBCRjQyQkM0MEZEQ0M2NjhFOTc2MDU4MjJCQzY0QjE0RUNECi06MTBDOTIwMDAzQTdGQTlBODk1N0MxMTg0NUZEMzA2ODI5RjIxOUZFMTVECi06MTBDOTMwMDBDRjY1QzY5Mzg5N0U5NTU4RjQ0Qjk1NENGQjY1QTlBOEE1Ci06MTBDOTQwMDAzN0QzNUVGMzA3QTRFNzk5NEZBQTZDMDM4MTFCRkVGQjY0Ci06MTBDOTUwMDAyQTdBM0U0RjFDNTAzNDlFREEwNEJDQjYyMTNDNUQwODU2Ci06MTBDOTYwMDBCNzRFQUU3NzQ1QkVBMEZCNTA0Njc5NTAwOTU5RTAzOTI1Ci06MTBDOTcwMDBFNUQxNzM1RjA5QUY3MTA2QkM5MDhFNTFCRTM1RTdDQjMwCi06MTBDOTgwMDA5ODJGNjg5MjU4REZGNDlFRUJDNUYzNTAzM0JGMTdFRjMyCi06MTBDOTkwMDAzOUMyRkI3RjRDRjJCMTE4RUJCRTYwQkFFRTg1OUU4QkJDCi06MTBDOUEwMDA4MDZFRjFCQ0E0MzdCQThFODY1MzNCRDJGM0I3QkFFOTk2Ci06MTBDOUIwMDBGOTM1NjdFN0ExNENBNEU3M0QxMkY3NDMzNDI3NUFDRTc3Ci06MTBDOUMwMDAzNTNENzYxRUY3QjVENTA5NzQwRkVCRUU3QzU1RjU2RDQ4Ci06MTBDOUQwMDBGNEM2OTBDQjgyRUVEMTdFMzBERjM3QkIwNDE3ODJGMUY0Ci06MTBDOUUwMDBBMjVCMUMxNEVGNDdGMzE4QzJGNTUzQjM3Q0RFRTY2NDc4Ci06MTBDOUYwMDBDOUQ3NjdGNURFQkZEQjJFQzU4QzI3MzdGNDIzMjMzRjZECi06MTBDQTAwMDAxQUM3QzNGOEY5MjYxODZGNjRGNzc4RDFGQjgzRTEyRkIyCi06MTBDQTEwMDAzOERGQkFGQURCQkZEOUJBOEM3MUJFNkUzQzU0OTBCNTIwCi06MTBDQTIwMDAxMDVFOERCOEE4MjM1MkUwNDcyQUVBNzNEMzI1NEJGQzQ5Ci06MTBDQTMwMDAxNUNDNUNDOEFENkZEQzdGQUE5NkRDN0JGRjJDNERBN0M0Ci06MTBDQTQwMDBGQjc0QjdFQkM2Nzc5REU4MzM0RjY3RTI3QzZGRTJEQkEwCi06MTBDQTUwMDBCOEVGN0ZFQ0U3RTc5ODU5MzZGNkQ2NDREQzNGMjZBQkQzCi06MTBDQTYwMDAwQ0U5RUFFMzQzMkFGOUExM0Y5RUNBRTM2RUFGRjlFRDcwCi06MTBDQTcwMDAwMTA1NUQzRUQ3RjA5ODM4NzZDRDM4ODlFQ0FDMzdCMEZCCi06MTBDQTgwMDBFQkYxQTg4NzNCOTg3RjA0QzEyRjEzRUZFRDY1RDRENTU4Ci06MTBDQTkwMDA0Q0YxMDI1RjhGREQxMkFFQzZENDM3QTUzM0U5MzVDNDQxCi06MTBDQUEwMDBEQjI0OTkyMURFNUFGQzdEQTdCODIwN0ZGQjg3MkMwMzZECi06MTBDQUIwMDA1REEwQTAxRjUwRkJCMTA3NTkzMkQ2OUJFMDRGMjYzMzMzCi06MTBDQUMwMDA2NjdDRTMyNzZGNUUwN0YzMTg3RjQ4RjY3OUExREVBQzNBCi06MTBDQUQwMDAwMzJFMTcwMzdEN0FFNDdBMUIwQjk4RTAzNTgxODVBQjMyCi06MTBDQUUwMDBEMURGMzRGRUE4RkYzQTlDNzcxMUU4M0I3ODRGQTRBODI5Ci06MTBDQUYwMDA3OTQzQjUwN0YzRUIyNTZBMUYwQzA1NzIzREIwOUU2REI3Ci06MTBDQjAwMDBCNTY3NzJCRjg1NzIwMUVBNjEzN0MxRjVCQzVFQjA0RTkwCi06MTBDQjEwMDBGMjYxODg3MjQxRjM1QThBMkYyQUE4OTNFODQyRTFCNjVCCi06MTBDQjIwMDBCMEM0MUNCQ0RGQjAwM0ZBRERCNjFFREE2N0UxRkUwNTU3Ci06MTBDQjMwMDBFREIxREZCQTMzNkY1RTg3NzIwN0U2NDlFREVCRjlCOTA1Ci06MTBDQjQwMDA3QzAxQjRGMzIyQkZENDJEQTJGRThBRDc0QjBDRUZCM0U1Ci06MTBDQjUwMDAxNEQ1RjM3REE5RTg5MEVBQzNGMkM2N0Q4RkQwN0UzQjYxCi06MTBDQjYwMDAwM0M2RUI5NzhFRkI1MDY0MkFERDBCQ0E5NDc0QkEyRjcwCi06MTBDQjcwMDAxOTFBNENGOEVCNjAxQzdGNkNGQTIwRjIwQjUyQkNBQjFDCi06MTBDQjgwMDA5N0MwQTA5OEUzNjNGRTY0MUY0MkYyQjNDMEI3NENFQkJBCi06MTBDQjkwMDAwQkZEQkM5NjkzOUM2RTIzQkEzQTQzRTdFRDQ3MDFERTRBCi06MTBDQkEwMDAwMTgwRjcxQjIyNUVFNTQwQ0UwNzVBQUI2OTVGRkNDMkVECi06MTBDQkIwMDAzRTk0OUY5QjM0NERBMjM4OEU4NTJDOEZFMjM4NjY4RTMyCi06MTBDQkMwMDBFN0ZBRTZFQjk3M0JDM0U4RTc3QjVERUQxQzg4REYwRkY4Ci06MTBDQkQwMDA1QzZFQTdFRkVEREJCODFDNkUxRkQ0NEFGRUY2RTNFQkVDCi06MTBDQkUwMDA1NTg2Rjc1OEFBRDdDQjI0MkY4RUQ3QUI3NDNGNTY3RUU1Ci06MTBDQkYwMDA4Q0M3MzExNDZFRTNGQUM3ODFGNUJDREZFM0E4QjdFMTU3Ci06MTBDQzAwMDBCOTA3OTY0M0JFNzBBQjExRTdDMEU1QjQ2MTdGMTZFODgzCi06MTBDQzEwMDAzQ0ZFQzI5MEJCRTU2MkREM0RGNkExNzVDQjM0MjREOTY0Ci06MTBDQzIwMDA2ODc5NUIyRUU0NzEwOThCOTBCRDFDMkQ3N0NCRjExQ0NDCi06MTBDQzMwMDBERDgzN0MxOTFEMjdFNkVBQjY2MzkwMEUyMjVGMTA1RDQ2Ci06MTBDQzQwMDA1NzFDNTIxOURBMzFEMjA3NkRCOTE0OTdCNjQ3QTI3MzNGCi06MTBDQzUwMDA4QkYxQ0Q5MjFGRTMxQThBREVCMTg3NDlGRjBFRTdDRjMxCi06MTBDQzYwMDBGQjExRUUyRkVGREExOTg2MkMxRjQzM0M4MDlDQ0FCMUQyCi06MTBDQzcwMDA3N0ZFRTlBN0YwRkRFNDFCMEU4QzA4MDJCQUM5MjdCOEJECi06MTBDQzgwMDAxQjcxQkU1OTlCNzkzQzRGRDYxQkVCNTJGMDNFMkY5QjNDCi06MTBDQzkwMDBEQTk3RTQ0MDYxQURDQzAyMjYzOTcxNTJGMjVGNzcxMzI2Ci06MTBDQ0EwMDBERjFGNzRENDc3MEM3QzY2NjkzNTA1QjhCRjdFQ0JDMUI1Ci06MTBDQ0IwMDBGNzU1RUY2NjE1NjM2NEQ4RUY4NDNEMDRGNjgxMUZGNUUwCi06MTBDQ0MwMDA5QkUyNUQ2QjUzMzQxMzFEMTRFRjU5OUIyMkMzRjc1NTQwCi06MTBDQ0QwMDAyMjFFQTYxQUY3NTc2ODU3QUNGMTcxOEFGNzRBRkEwNjZFCi06MTBDQ0UwMDBEMzM4NDYzRjQ2QkZEQTJFREU2RUU4MUU5RUY2RDY3RjZDCi06MTBDQ0YwMDAzMUNFOEZENkY5QTk4NkYyMjJCQTlGMUVFM0Y3RDI0RjIyCi06MTBDRDAwMDBDRUVGQ0ZBRDkzNjA1RTM5QUZDQjE0QUM5RUYzQzE4QzQ4Ci06MTBDRDEwMDBBMUU2NzMxRDIzMzVGQ0NBRDk2RkRBOThERjA0QkY5Q0U2Ci06MTBDRDIwMDAzRkM1MzFCRjA5REY4REUzODBFRjAxN0Y1NzM3NDk2MTkwCi06MTBDRDMwMDBBNzg0RjkyMzVBNzkxNkU1NzVFNEYzMEFFMTdGQUU5OEUyCi06MTBDRDQwMDBDQUNGRUIxQTMzREU1ODgxN0MzRjIzNEIyMjdBNjBBMTk1Ci06MTBDRDUwMDA4MEQ2Mzc4OUY0MzUyRkZBRkQwQkIzNzhGQjQyNjg4RjA0Ci06MTBDRDYwMDBGQ0Q4RjgwOEU3NEY5MDEzNUU5NDIzMTVFQkQ3RTY1MkYyCi06MTBDRDcwMDBGRDNBQzk4QkZEMzc2RUM4Mjc3REE0Mjg0NzY2NTQ1RUVGCi06MTBDRDgwMDA3Nzg0RjRBM0EyQTYyMzQ5QzhDN0MwQjdFQjUwMUZBODU1Ci06MTBDRDkwMDA5ODY4RDc1MThFMUJGQzY4RjBGN0VCRTIzRTJCNzNFOEU2Ci06MTBDREEwMDBBM0YxN0VDNkZGNDZFNjhCQzFEN0YyMjEyRUQ3ODNGNUNECi06MTBDREIwMDA5QzFGODMzOTlDNUY1RkRGQTZFMjBBMkY4NEJGODk5Rjk3Ci06MTBDREMwMDA4RjZGRTFGQzJBM0Y3NjQzMkVERTg3MkZEQ0NDRUZDMzRBCi06MTBDREQwMDAxRjU4M0Y0NTQzN0RGQTc4NThBMkZEQTYyNzdGNzNCREIzCi06MTBDREUwMDAzNTlBQkZBQjI1QkVFRjdENURGREQyRTA2RjgzOEZFMTRECi06MTBDREYwMDBFRjZBMUNBRjBDRjgxNEVGNEY0NkYzRjU0Q0I1RTEwRjlBCi06MTBDRTAwMDBCN0MzN0NBRjc5MUFENjAzRjM5REYyREQzQjNEQUQyNjY3Ci06MTBDRTEwMDAzOTA5RjkxNENDMTcyODNDOUVDQjkwMkJFNTBBOEZGQkRGCi06MTBDRTIwMDBGQkRBRjM4QjFBM0Y2Q0I3RkE0NzdFNjc0RkU0RjFFQkZFCi06MTBDRTMwMDA3NTJBRDFGREY5RjhCMzA3OUY1RDIwN0Y1RTI4NUY5REJECi06MTBDRTQwMDA4RjNGOERGMUU1M0RENjdFN0UyN0U4MkRCQUJGNzY4MEY3Ci06MTBDRTUwMDA2QjA0RTBGQTRBRkQyNjhBRjNGREU4QTkyMzMzMTEzRjZCCi06MTBDRTYwMDBBNUJCODFDRTkxQkVFQUREMkM4MjcyNEUwOUQzN0U1NUUwCi06MTBDRTcwMDBEMjI4RDMzRDAxQTY0NEIyQUY3MzlCRjk5OEM3NkQ5NUY0Ci06MTBDRTgwMDAzRUUzMjY3QTJBNzlENjFFOUUwMUVENEI3NjdFMzA4NkM5Ci06MTBDRTkwMDBFMjY4OTY3NzUyNUM1QUU4MjlBMTJGODc1QUM3MjAxRjZCCi06MTBDRUEwMDA5NDI4M0M3RTJDNUEyRTA0MUNEQzBGRDdCNjJCN0UzNkUxCi06MTBDRUIwMDBBRTRGREFDMkRGOEYyODY5Qjg1MUI1OUJDRTI1NkU3NEFDCi06MTBDRUMwMDBBODQ2M0QzQUQ3MEQwMTFERTNGRDVEOUM5RkY5REQwMkFCCi06MTBDRUQwMDAyMzZFQUM2RDJCOTcxMzI1NEQyQUQ5ODEyNTVCQjZCN0YwCi06MTBDRUUwMDA2M0ZDNzBDOTNCNzZGMjc3MDVCNzlDQTFGQjEwNTM5RTlCCi06MTBDRUYwMDBEOTQ2RkU5NDYwOTM2QzM5N0ZFQjExQjdCOTQ1OEVEODUzCi06MTBDRjAwMDAzMUVFQjBCMTlDQ0UxRDIxN0Y4NEYyMERCMUUzOTdDRkZECi06MTBDRjEwMDAxNzVGNThGQUNDOUU5RDIxMDA2MUU5QUY5RUY0QTA3QzdBCi06MTBDRjIwMDAzOUQ1QjJEOTgzNzA4NzdFQkYzMjZFQkE0NzlDNjZDMzRCCi06MTBDRjMwMDAzRDVGMTlBNzc5MEFGRjAxOEM3MzhGNDNEODM1NDY5QzUyCi06MTBDRjQwMDBFQjk2QkVBNDQ3QzJGQ0IyRjM2MjlDNzM3NEU5RTVEQkM2Ci06MTBDRjUwMDAzRTdEMUNFRjExQjQzRDdCRkE3MTlDNkZEOTNGM0U3RTQ0Ci06MTBDRjYwMDAxQ0UzQzFEODVFMjdFRDc3QzFBN0RFQTIzODZDQTNERDM0Ci06MTBDRjcwMDAyNkIxREZCNTZGN0Q5MkUyRDdEQkRGQjVGQkIwQjdGNjQ4Ci06MTBDRjgwMDAzREM3MDc2MzNDNjBGQkY2MkY1MkQwNkZCOTY0Q0YzNEM2Ci06MTBDRjkwMDBGMkVCMkVEOTMxMjU5NUM1RDgyRjhDMTRFOTM2N0MwMUJBCi06MTBDRkEwMDBGMUYzRDFGODNBRDA3ODgwRTJENjNFMDI3Q0EzRkNFQkQ0Ci06MTBDRkIwMDA4QUJCNkQyOEU3NzFDQzVFMTE2RjVCMUZGQjlFNDI4RkIxCi06MTBDRkMwMDBGOERBQzZFQkFFQjkxQ0U1N0UyM0Q3MUZDRjFCNjdGQjkzCi06MTBDRkQwMDAyNkUwRjFEQjE3ODBCRjdBQzMyRjEwMUI3RjFGRTEzRkQ0Ci06MTBDRkUwMDAwMDRGRkJBMkYwRjc2OUUzQzI1RjNDOEE2NThEN0Q3QjUxCi06MTBDRkYwMDA4REIzOEQ1QzAwREM4QzdCMTAwRjM4RkM4NzFDQzk4OERFCi06MTBEMDAwMDBFNzVGNTI1QzMzRTI2RDg2MTdGNzlGNEYwN0UzRkQ5MUIwCi06MTBEMDEwMDAxMzZBRTc1Q0JBNUZCOEM3QUU2M0JDNjhDOTlFQjc4OURDCi06MTBEMDIwMDA3RkRBNzdCQzQxN0U2ODI2RUUyM0I0QjNBRTNGMUUzRjY1Ci06MTBEMDMwMDAyRTg5NzVENkI5Nzk3Q0FFODAzRkM2RUY3QTNERjQ1RDE2Ci06MTBEMDQwMDBDNEU5NzIzQTM2RTI3NzdCOEJEQjk1OUQ1Q0NGMzZFRTk2Ci06MTBEMDUwMDA2Nzk0RDdGRDUxQzRDMzc2RTM0QkNBNDEzQzFERjlDQTVFCi06MTBEMDYwMDA3ODY4MDMwRUJBOTBDM0RENzFFOEIxRTNBM0JCRUUyQjgxCi06MTBEMDcwMDAwODdDMjFGRTcwMUZFQThBMzM4N0ZDQzBCMUU0Mzc3QTRFCi06MTBEMDgwMDA5QkM1OTAwN0VEMUI3OEZDN0FCQjFBRkI1RUIwMTE5NzJECi06MTBEMDkwMDBGRThGNjgzRTBENUY1ODNDRkFGOUU2RkY3NUUxRDM4MURCCi06MTBEMEEwMDBDQTRGNzI0RjM4QjVGRDJEQjYxQzRGNzc0QURGRUM5RTQ0Ci06MTBEMEIwMDA2MTk5MTQ3RDZGQ0FFQjFDODc3MTNCNDczNEI0ODNCQjA1Ci06MTBEMEMwMDBFQzZDQjFERTM2RTE1NzZGN0I0QUE2NzhFNTU1MEQwNzZCCi06MTBEMEQwMDA0ODhFNDdDQjhCMEE3QzJGMjVDNjdDMzNDNTdDMkI5QTg4Ci06MTBEMEUwMDBGODNFRDFGNkFDM0JFQzgyN0VEQUY2RUYyMjdBQUVBOEJGCi06MTBEMEYwMDAzRjQyRjFEMjJGNkZGOTk1RDY2QThBOEJDMDdEMjI2Q0EwCi06MTBEMTAwMDA5QTdGREJEM0ZCQzY5MERDMTZFRkIyNDQ4RjMzNDk4Qzk5Ci06MTBEMTEwMDAxMzZDOEUzRDRFQjBGRThDNjU5Q0QyNTA4M0E2QkJDRTY4Ci06MTBEMTIwMDAzRkRFMjlDNTdGMjNGNjc3QUE4NUVCODNBNzFBRTRFOUJBCi06MTBEMTMwMDBFMTE4RTMwRjczQUFENjc3QTE2MEJGQTRGNzY3RENGQzAwCi06MTBEMTQwMDBCRDE5RDkxMzQ3RkFFNTEyNzdDRTNCMDk0OTk4NkExNEZECi06MTBEMTUwMDBBRjU1QkQ0Q0M0NzdGRDg3MkYwREYxNURFREJFOEFFMTYzCi06MTBEMTYwMDA3QzU3MjI3QzREN0UxRTU1MEYzMEQ0NEJENUI0QkMyQzQxCi06MTBEMTcwMDBGNDJCNDRDQjFCMkRDOUM2QzIyNkZDMkY3MTRGNEZGNTkzCi06MTBEMTgwMDBEMjc5NDc2NDIwRTJGMzcwQzY3MTE1RkJGRDRCOTQ5RjgyCi06MTBEMTkwMDBFQTJGMEE1Qjk1MEFGM0ZCNEI0OEYyMkQ4MzdFRDlERjE5Ci06MTBEMUEwMDAzRTE4OTRFN0VFRDk3Rjk3MUVGMTYzRDlFMjU3QUFCMEYzCi06MTBEMUIwMDA3NzFFNDZCQjg0QkRFMEE0RjgwNjc5QUY5M0RFRjkwODdDCi06MTBEMUMwMDAzRUVFQTRGNTFFRDhGMUY5MTNBNDVGRkZDMkNFRjhCOTY0Ci06MTBEMUQwMDAwRjU4MkYyMEFGMEE3NURFQzdGMTFEOUYzRkZFNTdENEIxCi06MTBEMUUwMDA5RkIxMzE4QzVGRjgzOEQ0NDdCQkExM0U5RUVDOUM4RTNBCi06MTBEMUYwMDA2NzEzQzZBMDVGQTRGMDg1QkI2NkEyM0MyQjhDRTdGNDQ2Ci06MTBEMjAwMDA1OEY4NEM2QUI4MUFGQTNCOTZDQ0YzQzdCNjBEQTI3NzE5Ci06MTBEMjEwMDAyNTRBOUY3NTUzRENFODgxMURDRjU1RTBCRUQ0RkU0Q0Y2Ci06MTBEMjIwMDAzQ0MzN0RBOUZEMDVBMUU3RkY1MkJDNTM1NUFCN0FDREE4Ci06MTBEMjMwMDBGMUUzQzU0Q0YxOUFFRkYzOTQ2MkRFMTJBRkM0QzgyRjRDCi06MTBEMjQwMDA0MTdDODRGRUFBQTYwNEJBMDcwNEZBQUZBNTlGOEZENDM2Ci06MTBEMjUwMDBDRTNCN0M0NEM3QTFGRUZDRkU1M0E0M0ZDQTgzRTg3QUMwCi06MTBEMjYwMDA0NkY5QkRDRTIxRTI1RTM5QjQ3Mzc1RDcwRjZBOUQwNUNDCi06MTBEMjcwMDAzQzVGRDM5RkNCOTMxNkFBRkZCMDUzRjg4RjQ1NzlDRjZECi06MTBEMjgwMDA3RTc5RkQ4Nzg0RkNFRUVFODdCN0FGMTBFRkQwNDREM0Y0Ci06MTBEMjkwMDBFRjQ2RDE2RkU5OTZCRjVGMUNFQjlEOTUxOEYzQTdFRkEyCi06MTBEMkEwMDAzRjk0NThDODg2N0FDQTc2MjdCRDdGODVFRjI4RTA3REVGCi06MTBEMkIwMDA4NTlEMUEzRkQ3MkFGMzQ0RTg5RDlCREQ0MjFFOTdDNTAyCi06MTBEMkMwMDA0NUU4REQ5REZFNjIxRTU4MUZGM0NDRDFGQTM0QkQ5RkE4Ci06MTBEMkQwMDBGNjlDOTM2MTVDNTlGOTBCNkUzRkUyQkI3Q0U3RTdDN0I0Ci06MTBEMkUwMDA3RTlFODU3MTg5RjExNDE3NUZGRUMyRkYyMjNBMjhCNzJFCi06MTBEMkYwMDA0N0U2MjIzRjc0NkVCN0IzOERDOEU3REI1RjFEOENGQzM5Ci06MTBEMzAwMDBEQUE2NDYwNkY3Rjk4QUYzQkFGMjA2QkJGNUZFQkY1ODZECi06MTBEMzEwMDBDN0E5QUFEQUNCRjBCRUJCNzFBRkI2QTQxNzM5RjM1N0QxCi06MTBEMzIwMDAyN0Q3QTM1RjcxRkE1RjcyMTJCRjVCREY3MzNBNTUzNTdGCi06MTBEMzMwMDAzQjEzREY1OTMwRUE5NzM4NjJDQkM1Nzc1MTVFN0MxM0Q3Ci06MTBEMzQwMDAzOUVFRUE3MTNGRjU1RDlDQ0Y0N0FDMjUwNUZEM0UxNUYyCi06MTBEMzUwMDBBMDc3QTMzQzJGRDk5MjNFMTBGRDA0RkI5REM2M0IwNDUxCi06MTBEMzYwMDBERTA0REM4RkY2QUI1RUIyQTczMTM1RUYzMzI3QUE3QzQzCi06MTBEMzcwMDA5OUNBMzBGNERGOENDQzU0NjAxRDFEMUJDRTE0RjQ2N0E5Ci06MTBEMzgwMDAxODQ3RUE5QzFENEJFRTlENzZDNkQzM0E0QTFDRjY5ODg4Ci06MTBEMzkwMDBGNzlEQ0YwOUJBN0EwRjhERkU2NDNFMUVGMjg3MzFFRUZCCi06MTBEM0EwMDA3RTM1NEM3MkY4OEUzODJGRDUyQjAxQkIwOEJGOTc2RTk3Ci06MTBEM0IwMDA5OTkzNjk3OTdGNDVBOUExN0FDMEE3MDRDRjYyQjY0RTM3Ci06MTBEM0MwMDBDQjMyQzk2RjYzQkNFMkE1NTk5OTRBMjY3RTU3RkU0RkZFCi06MTBEM0QwMDAxN0JEQ0FERDc4NjZBMTI0RDIwQjE1MDE2M0I2QUU5RkQ2Ci06MTBEM0UwMDBFNTdFODhBMkU2MzkxMDdFMUFDQkQzMTUxOTQ5QTU4NkE5Ci06MTBEM0YwMDBGODNEOEUzNTUwRUEwMjc1OEJCRjUzNTZDOTUwNEU5RThDCi06MTBENDAwMDAxMEU3RjZFOEVGQzJCNDFCNUU3NzkyREMwRjBENjI2QzlBCi06MTBENDEwMDA3ODNBQkUwN0UxNEREMDRERjA1M0YxMTAxRUU2NjM1NzQ4Ci06MTBENDIwMDAyQTE5OTcxNzMzNzRCNDkzQTU1MDgwN0QwOUY0NTQ1RDdECi06MTBENDMwMDAzNTNEMTNFOTExRkVGQzE4MDc0OUE2MDdDQ0NGQTNCRjYxCi06MTBENDQwMDBGQzA1RUE0MTQwQTdGQzNEQkZFRkIyNzAzNTgwMThDMzMwCi06MTBENDUwMDA4MUM5QUYzQTk5RjE3N0U4NTZCRkMzQ0NGNkM2QTU3MTNBCi06MTBENDYwMDA5Mjc4RTc2ODFGQzkzMTE3RUJGRUVCODQzQzhBNTU5NDJDCi06MTBENDcwMDBCN0Q1MDlGRkM4QzE3MzQ0OTdDRTIyQTgxN0M2QkI1OEI5Ci06MTBENDgwMDAyNDFFNTJENzI4RTU5NDk5RkYzRDU5OTAzN0QxQTkzRUUzCi06MTBENDkwMDBEMTVBMUVDRDE3MjBEN0EyQzY2RDIwRjg0MUJGOUY0NDk4Ci06MTBENEEwMDBGNUZCNDk1NEJGOUY3QzU1QkYwNjlDODI4RThEM0U3QzA4Ci06MTBENEIwMDBBNzYyNjU1NTlFODAxQjFGQ0YyMUUwMDZGMDE5ODlFRkZBCi06MTBENEMwMDBFODMxNUI5QzRGOUM4NzEzNUNFM0M0NkNFQzU4MUZGMDA1Ci06MTBENEQwMDA1QTFFOTc0RTc4QjkyRjYxNkYyN0M2NDFCM0E0NUE4NjVBCi06MTBENEUwMDA3NkVGMEE4OUVGRDNGMDk3RTczMkI1NjNCQTgzRjhGMEE1Ci06MTBENEYwMDAxRTMxNEVCOTgwRjMwQUMzM0ZENUEzQkU5M0Y0QUYxRUNECi06MTBENTAwMDBGNTlEQkRENThGOEI1RERGREREQjdDRTI2M0NGMjdCMTgxCi06MTBENTEwMDA5N0ZFNkJFMjYzRjZGRjc1RTU1MkM1MEI2RkJGODZFN0JBCi06MTBENTIwMDBCNjVERjI0OTA3RDA1QkY1Q0NGMjM4RDQzMzEzOEZGREVBCi06MTBENTMwMDBBMzk1QkU3MDNERDMzMUQwOEFFRjM4QTQ2RkEwQjdCOEExCi06MTBENTQwMDA2MUQ2RUZEMTc0RDIxQjdERTU4Qjc1NDBERUQ1MEZFMDNGCi06MTBENTUwMDA3MDkzMTg3RjZBMUQzRkY3QkU2NTA5RjdEMzgxNzlFODlDCi06MTBENTYwMDBDN0ZBMzc4QkZBMzczOTBBQzlERjcwQzRDNkRGQkZCQUNBCi06MTBENTcwMDBBNTk2RUI5MUI3RkM1OEE2RjNFOTFFRUY1MUUxM0Y4MDY5Ci06MTBENTgwMDBERjZFNUQyQTg1MjNFOUIxREVENzYyNzU3ODNGNkU5RTM2Ci06MTBENTkwMDAxODNGRkFCREFBMDBGM0U2QUU5NjYzQkQ1N0M1RTlEMkJGCi06MTBENUEwMDBCODU3MTdGRDRFQzUwMjk2MjdERTIxQjM3RTNGRUJENDU4Ci06MTBENUIwMDBCQkU0NjdDREE4RUU3RDJDQjQxNkU4MUVGNTRGQTA3QjJBCi06MTBENUMwMDAzQzk3QzdFQjYyMTQxN0UyRDE3ODVDNDhDQjIwM0E0RjA2Ci06MTBENUQwMDAzM0U0REZEOTkxREUwNERDQUY5OTdGMzBGRkFFRjNFRkE3Ci06MTBENUUwMDA4QkFGRjRBNjlBRUYxRDJBRTdFMjJDRUZGNTU0QUJCRTAxCi06MTBENUYwMDAzNDk0NkZFQTM5RDA1RkMxNTRENkNFMEQ2MTVFNTMzOTkxCi06MTBENjAwMDBFOEFEQzRGQzE4QkU0OTcyMkE0RDA5QTM1QzU0RjQzQzMxCi06MTBENjEwMDA1Njg4N0FBRjc4RUZDM0E4QUYyNTVERDVBNTY3QkUwRTUzCi06MTBENjIwMDBGRjZGOEU0QjI2QkU1Q0JDRDY0QkY3QjYzRjhCQ0ZEQjc1Ci06MTBENjMwMDA4OUY0MjQ3QjcyN0MwMTU3NEY3QTA4RURFMEVCQUVDNjhCCi06MTBENjQwMDA3NUE3Rjc1QzRGQjVFNkYzOTFCRTdEMTU4MDgwRkM2RjQyCi06MTBENjUwMDAzRTA3Q0U0RkI2N0JERkY2RTJGQzdFQTMzMkY0QkJGNDhFCi06MTBENjYwMDA4NDhGRUY0NDE4Q0FDRjg2MDc1MDdDODg5QzMwNjMwNEFGCi06MTBENjcwMDA4RUJGNDZCQzZGQkFCQTZBMjRBNTJCQUE5ODQ4NzlCQzVCCi06MTBENjgwMDBEQzhBMkFBRjQ4NzM0NEVBMTdFOTc0QUE3NzZGNTUxQUZGCi06MTBENjkwMDBFNTU3NTVGOTI4MzVFMEVCRjBENUQwRkI5MzhFNjE3QzRBCi06MTBENkEwMDA3Qzg3MkVGMDk3NjQxM0YwMEI5MEZFRTU0OEFCQTQ3M0QzCi06MTBENkIwMDA0NUE3NUUxOUMxNzdERkQ4NDBEODc3NzA1OTdBMERDMTc4Ci06MTBENkMwMDA1N0QzMTlGOTM1QTEzRUU1RUQ5ODg3NTRBRDlENDFGODQyCi06MTBENkQwMDA1MkY0NEE1NjA4RTU2RkM1MDc4RTIyNUM5RERFNEIyRDNECi06MTBENkUwMDBFRjVBREFEM0M2NDZCRDdGMUEwNTZGODNERUI2NzFCODJFCi06MTBENkYwMDBERjJGNzE3QThCODZGQkZENkE4QjE3RTMyMkVFQkZCMkI4Ci06MTBENzAwMDBFQjVEMjk4MjNCOTg0MzFDRUVCRkU2RTdCNDNERTFERUNBCi06MTBENzEwMDAzMjdCQkUwOUVFRUVFQ0U5MDRGN0ZCMDQ5Q0VGMTY3MEQ5Ci06MTBENzIwMDBBRDE2NzhBODE2RjBBQzQ2Qjg1MzdFQTRDOEZCNDQzQUIwCi06MTBENzMwMDA5REQyN0JDNEZCQjcyQjExMUY5MENBMDg3NzgwODc3REQxCi06MTBENzQwMDA1NDg4QzkzMDFFQkE3OUYxQ0ZFRTEyNzRBQkRCQzgxRjEyCi06MTBENzUwMDAyQUJCRjJGQzA4Nzc3QjEyODdCQkMzMDU3ODIwQkEwNjg4Ci06MTBENzYwMDBCODdCQjEzQzQ0RjA1NDVEMUNDRTUwOUZFMzQxRTQxNUJFCi06MTBENzcwMDA4NDdCMjY3RUU3RjgwMEI4Rjc4RDFGODdGMjcwODIwNTVDCi06MTBENzgwMDBDRTVBRDJFNDBCODNGQjIzN0M3RjRCMTI3QzFFMERCRjUxCi06MTBENzkwMDAyNDhEQkZBRjZCRjA3NzZGRkE3MUI1ODhCN0FFMTZFRjE3Ci06MTBEN0EwMDAyNzIyMUM1MUFGNzkwOEUwQzMzNDBFNEZGRTdEQTRDODc4Ci06MTBEN0IwMDBGQjI4NEQxNkY2N0YzNUUwMDFDQjFGMTZGQTEwQzIxOTczCi06MTBEN0MwMDBEMzFGQzU3M0ZCM0NDOTU2Qjk0RjQ1MzhGNUUxRUZGMjlECi06MTBEN0QwMDBCMEE0MTAxQjk4Q0Q3ODY4MkZGRUE1ODU5ODE3RjNDNkM2Ci06MTBEN0UwMDBGOUFGRDc0QTNGQjJBRTQ0QkQwM0U5N0QxOEU5NkRERDFDCi06MTBEN0YwMDBBQkFBMERDRjNGRTRBNTU3NTlFRTY3Q0JCM0ZEODk1RUM5Ci06MTBEODAwMDA4MjdGNDA0MkJERTYzRUMxODc2QjkxNUU2ODdFREMxRTMyCi06MTBEODEwMDA1RTI5RThFMDZFRjFGRUVFM0Q4MjdFRUUxN0ZDRkNBMDk0Ci06MTBEODIwMDA0MTM3M0U3RTNGNjRDRDc0MUVDNzk4OTQ2MTEzRUYyMDRDCi06MTBEODMwMDA0Njk4Mzk0RTMwRDFEN0MwMzQ5ODE3RDkzNjVFNEFFOTY4Ci06MTBEODQwMDA5RDRCRjY4RTlERjgzNjdFMTRGMzIzN0QyNUJFNzM2N0JGCi06MTBEODUwMDA5OEJGNDM5QkQ3MEZGNUExNDRFM0RERDk4OURFQzQzOUQ2Ci06MTBEODYwMDA3NDMxM0RBMjg4RjcyMDY1NkU0RkI2QzQ3Q0RGQjVEQTBGCi06MTBEODcwMDBCN0RGODE3RTk5REVFNjEzRUZGM0E3QUY4NEYxRTI2QkE5Ci06MTBEODgwMDBERDY0NDdGNTBERTRDRDU5MDg3OTU3MkREODU1MENDQkZCCi06MTBEODkwMDBCOTdDNzBDMUJDMEI0REY0MTFERjhCNUY0Nzc1NUQ1OUNFCi06MTBEOEEwMDA4MEY0NEFGNjM4QTQzRkE5MURFQTQ0RjgwMkFDQkRFODZBCi06MTBEOEIwMDBCRjdBNDhDREVCODdGQkMxNDM4OUIxRkQ3MEIzRTJCOUI0Ci06MTBEOEMwMDBCRkM0OTM3NUE5QzU5RkIwNEVGNTUzM0I3REEyNTVERUVECi06MTBEOEQwMDBBQzEzRkI0MzlGQTk1NkZFMzBGNjgzQ0I0NDdGOUZDNTE0Ci06MTBEOEUwMDAwNzdFMTQwRjc0OTY3MjZFMkFDOUNGQTQ2QjYzRUYwRjc0Ci06MTBEOEYwMDBENUFBMTZDMkY3MzlBQTQ3NzNCRTBFRTU2QjVDNkZFRTY4Ci06MTBEOTAwMDAyMTc3MTg5RDgzOUMwRDhDRDg4OEZFMkY4M0JFOTYzMzdCCi06MTBEOTEwMDAyRUU3NDI4Q0VCOTNDNkJBN0U4NkY0M0UwMkY3MDE5RDU5Ci06MTBEOTIwMDBFODFFRjcwMUNDQ0JDMzM0QTI5Qjk0NUI2Q0U0N0Y1ODE4Ci06MTBEOTMwMDAyNUY4RUM1RUMxNUY2QjA0NUYzRDgwN0MzNTAyREY4MUMyCi06MTBEOTQwMDBGNjUxRkExM0MxNEZFQjkwRkYyMEREMTI5RkNFRjU3ODEwCi06MTBEOTUwMDBGMUJFOTc2MUM3MkM3NzhDQTVGNzFDQUI1RDM2REEwRjRCCi06MTBEOTYwMDA5NDc3RUQ2MTE3REEwNUZCQzZFQkU4Rjc5MURENTk3QTlDCi06MTBEOTcwMDBDMDhERTU1OTBFM0ZDMDQzNEFDQ0QyOTE1RTNFNzMyRjE1Ci06MTBEOTgwMDBCOEU4QUJFMjVCMDFGREY0QUVCMEEyNzI3RkE0OUU5NDU2Ci06MTBEOTkwMDBDN0RFMUY0NUE3NTNGNDlFODBBQTVGQ0JEMDNGRkQ3MDIyCi06MTBEOUEwMDA1MkE1MTNFMUZDNzAzQzhGRDNBQUNEQ0YyNkI4MDMzRTFECi06MTBEOUIwMDBCNkM1OUJFMkE1NTI2NzVGRDVGNTFFMUY3NkZGNzAyRjk3Ci06MTBEOUMwMDBFRjEyRUMxMkYyODIwRDBDQjE2MTI2Rjk1MDJCREU3QkM2Ci06MTBEOUQwMDA2NERFMTAxQjY5OTIxM0NCODdFNzMyRjRFQkY1OTQwRkVBCi06MTBEOUUwMDBCREM4Q0JDRDVDNUVBRTkwNjJDQjRCNDM3RjM3RTQ2NTY4Ci06MTBEOUYwMDBCNDVDMzFEMjk1MTc0REI3RENBNzU0NUQzRTQ2RjI2NjU0Ci06MTBEQTAwMDA2NDZDRkZDMUVGRTNFREZDMUQ2QUU2RjNFNUE3RjcyQ0JDCi06MTBEQTEwMDAwNzc4RkRERTBDMkZENDgzMEM3RkM1Rjc2MkFDMjc1QTQ0Ci06MTBEQTIwMDAzRTlFQjhDQUQ4NTcwM0Y0M0VEMDAyQ0RGQkYwRjhBRjAzCi06MTBEQTMwMDBEQzU3QURGQjQxRTFCOUQ1QTQwRjE0OUNDQkExQjRBODMwCi06MTBEQTQwMDA3NjNBRjExMUMzRDMxODkzOUQ3QzdDRkQwRjNEODhERjlFCi06MTBEQTUwMDBFM0I1RTI3QzdDQkQxQUM2QjhBNDdEMUJFRjdBNjAwRUVDCi06MTBEQTYwMDBDMDc1QzFFMzMyOUQ4RkUzM0QwREQ5MTRERkMyQjJCQzU2Ci06MTBEQTcwMDBBNEE3MUJFRjIzMUUwRkRGRUUzMUM3MzExNEZDRDRFOTNFCi06MTBEQTgwMDA0N0ZEQkYzNzdBMkM1ODFGREI3RjUzOERGRjQ0QkI4Mzg0Ci06MTBEQTkwMDBGOTQ2QTI1RDAxRkE1RDY3MDRGNUJGOUYzOEU5REQxODFDCi06MTBEQUEwMDAyMzFGREExOEVGMzNDNzhGMThFOTVCRjFEM0NFMjFEQ0RGCi06MTBEQUIwMDBERjhBRjczMzE3RDI5REFCMEY5REQ3RjRDRTE3N0NEQ0VFCi06MTBEQUMwMDA2M0U4MzNDNzczRDI0NzQ1OUMzNUMwN0Q5NkM1N0ZDQThFCi06MTBEQUQwMDBDRjQ5OEYwOTdGMTg3M0Y0NTIxRTI3Q0FCREJEOTQ3QkFFCi06MTBEQUUwMDA3ODNDMTNEMzYzOTdGRkQzN0VBNDUxM0RFQ0I0MjFCOEE3Ci06MTBEQUYwMDBGRUYyREFEM0FCREVBNTJGRDZGMzgwNjIxMUM3QkQ2MDhDCi06MTBEQjAwMDA2MzdDNzg3OTBDQkU1OTIwRUUwNzJGMTBFNzVEMDY3RDA3Ci06MTBEQjEwMDAxNTdGREZEMEIzMzk1RDQ2RDNBREY0RDQyNTQ0QTcxRkJDCi06MTBEQjIwMDAxRjU0Qzk1RjVCMDFGNDg3N0E5OEY0RDQ3ODdBOEY2OUJGCi06MTBEQjMwMDBEOTEzOTczRDc4MEJDMEY5OTM0MzMyOTU5NzlENzMxMDk1Ci06MTBEQjQwMDA1REI2RkY4NzhGRTJGQzNCN0ZBQkQyRUYyNjdDNzI3MDI1Ci06MTBEQjUwMDAxQUM1RUJCNzhCRjc5RUJCRjhDRUM1RUREQTFCNUM1QzQ0Ci06MTBEQjYwMDBBRTE0OUNCQjk3RThCQjhCQUVDMkYzMzVFNERCODI3MzhCCi06MTBEQjcwMDAwRjkwNUU1NjgwRUZCRDRFQzA3NThGNzg3OTkyMjJFODg3Ci06MTBEQjgwMDA3NzAyQjYxRjkyQkIxQ0VBMTVCNjcyM0U2MTEzNDMxNUFECi06MTBEQjkwMDBFNDhGREUxMEVGQkIzNzA2M0ZERkUwRjI1QUUyNDUwQkMxCi06MTBEQkEwMDA1QkQ3NTBGRjBDRjRDMzI0NTM1Q0M4MDJGMUZCMDc4NTFDCi06MTBEQkIwMDA3OEI4ODRFNTdBODhBNTIxREYwOEY5RDY0REZGRDY3N0I1Ci06MTBEQkMwMDBCMERCOURENjc1MUFFOUMyQUU3NTRFQjBEODYxRERFQkZCCi06MTBEQkQwMDBGQzJFRTc3M0ExNkYxNEI2RTZGMDc5NzVBREU3RTdFM0M1Ci06MTBEQkUwMDA2M0FEQTc3QjFEMTNBOTdEN0I2MkVDRjFFRjE3RTMxRkVCCi06MTBEQkYwMDBBQjJBQzI5QjVCQUM0NEJDQjc1QjEwQkU1REMzRjdENTIwCi06MTBEQzAwMDAwQUQ2MjdGNjkxNENFQjJBQUMyREI1QzQyQjE1RDRFNkQ5Ci06MTBEQzEwMDBEM0ZCN0E4NUVCRjNCNURCNENGQjUzMTc1RTQyRkU5N0UzCi06MTBEQzIwMDAyNzBERUJDNkNCRkQ2QjJFMjNCQ0E4QUVCQzNCOTE3RTczCi06MTBEQzMwMDA4RjNENTU3Q0M3N0I1RUVDOTdFM0U5ODQxNjFBNTM0OTA4Ci06MTBEQzQwMDBGMkVBNzY0RkFDRkI0REY3NDdFM0E5NTZFMDA5RUM4MENBCi06MTBEQzUwMDAyQzEzOUUwQ0ZDNDRCNzNGQjZCOUZDOEVGN0YwMUNFMkM3Ci06MTBEQzYwMDAxMUZFOUE1MEVGRjIyQjBBN0ZFOUIxRTFGN0E0QTBENzk5Ci06MTBEQzcwMDA2M0EwMEYwNDJFMDg3RURGQjJDNENCRjUwQTNGODE2RjhDCi06MTBEQzgwMDAwMzNFQzY3N0QwRTdDMjA4QjcyNzkxMzc5M0IxM0Y0RTFFCi06MTBEQzkwMDAwRkU3ODM1QkY3Rjg4MjFFMjZDNTVFQ0Y2QjVERUI1OUZECi06MTBEQ0EwMDBDQTQyQTBDNzlDRDRCODNFRDFGQjdBRUU2MjIxQzcwNTE4Ci06MTBEQ0IwMDBBQ0E3OEI0RkYzMkQ3Q0ZBREE5QTVCMzg5RjBBRkM5RjU2Ci06MTBEQ0MwMDBEQzdGMEZEMUY1QjE3MEJDMEZFMzU0N0E1QkNGNkI0OEFBCi06MTBEQ0QwMDAwN0UzNjJEMEMxQjAxMDFCOTVGRDdGOEYwRTRFNjhGRTJBCi06MTBEQ0UwMDAxMThGRTAzRTAyRkIxNUVFRDNDNTRGREUzRkM2M0NCRkIxCi06MTBEQ0YwMDBCN0UyMjdGRDlFRjZBNTlBMEIzQkE3MEU0REY2MURGNDQ1Ci06MTBERDAwMDBEMjdFMjdGQkFBNjE0OTQzNUQ4MTNGNjNGQjEyQ0ZBMzBCCi06MTBERDEwMDA5RkExOUY2RTQ1RTJDRkM2QzREMjhCNTc1NjA1MkVDNzMyCi06MTBERDIwMDBGMzhCRUFBQUEyQ0JEMThGQUEwQTNEOTdBMTlFOUJDRUU0Ci06MTBERDMwMDA3RjE3MjNENjdCN0RDQ0NERjFCQkIyQUE5MkNFM0Y5ODg0Ci06MTBERDQwMDAyM0M0RjQ5NEVFNzcwMEQ4ODk0Q0YyNDcyQjJFQUI3RTk3Ci06MTBERDUwMDBBNkE5MDExREZEREY5QTc4QTc0MDU1MDJBQkQzQjNEMDI5Ci06MTBERDYwMDA1Rjk0OTQxMTMyQzFFRjFGMkU3RUVFQjIyNjZEQkY4RUVFCi06MTBERDcwMDBFNzFBNzZFODFGRkQ2MDhFODFDQTU5OEJGRkVDNDU2NTc2Ci06MTBERDgwMDA0MTVGQzA5M0YxMUM3MzFDNkJGMDRCMTJGOTEzQ0Y0NjJCCi06MTBERDkwMDBGOTEzQ0Y1QUU2OTEwNEYzRkUwQTNCNUI3MTc4RTgxQzU1Ci06MTBEREEwMDA1MjYxQzI4RjJDRTAwMTVGNjgxRkJCNUJFN0VCNUMxRTFBCi06MTBEREIwMDBFRjIxN0Q2MEQ1NDUzNkIyRUJENjA5RkZGNENGRDAyRkU5Ci06MTBEREMwMDA0RDcwNTFFOEJDMDFDM0UwQjBCRTk2QzBEN0UxQzQ3MzRBCi06MTBEREQwMDAwQzE5RURBRDA4RTVEREY4NjI5NzRDNEYxRjRBOTg0RkRFCi06MTBEREUwMDA2NDVFMDlGMzdENTk2NDE1REEwRjFEOTM1QUVGMjAzRkU1Ci06MTBEREYwMDBBMDMzOTBFNjA2QkM3RUQ2QUZFNUIwODRFNzEyNzk4MTA5Ci06MTBERTAwMDA4QjExQ0VCNTcyMjhDMzBCRjU3RjIxNzc2NjYwQkRDMTNCCi06MTBERTEwMDA1MEY0NEUxRjlFNUU4NEY3MTIwMkE2RjNDRTIxQjQ4RUZDCi06MTBERTIwMDBFRUJDREMzMzdGRDE1MjI1RUFGQ0VGNkYxNzlCQ0I1RjUyCi06MTBERTMwMDA3MUZBMkZDNjc5NTQzQkY5RkI2MDQ5MUY0ODc0QkU1N0VECi06MTBERTQwMDBERDc1RUU5NDQ3RkJGMjY0MzdDNzIzRDEwNUQyRDU0MTg3Ci06MTBERTUwMDBBRTM3OUQ1NUJDMDk3REM4OUYzRDMyRjM0NUNCM0M3QzE4Ci06MTBERTYwMDA5NkJDMjJFQ0QxM0FBMDUzM0NBNzMyRTg2Mzk4RTJCN0MzCi06MTBERTcwMDAyMTFEMERBRjgxRUY2NjNDQzZEMDc3RkJCOEU4NzlGMDg1Ci06MTBERTgwMDA5OEZBQjkzMTNGMTg5N0U4NTUzRTk3Q0JGN0UzMjg3QUNGCi06MTBERTkwMDBEODJERjFGOTg3OEFFRERDNkU2NDIxMTlGMTNBQzcyMDlCCi06MTBERUEwMDAzQzY1MDVDRjI3MzJFMzhGRUNCNTc3OEQ3MzI3QjY4MkJCCi06MTBERUIwMDBFNzc1OUUwQkRFQzZDRkI5QTNFNzMzQTdGOUVFMTYzQzk0Ci06MTBERUMwMDBFRjk5RDNEQzZGM0U5RTdCQ0UyOUJBRjg0MzRDNzdBQkZCCi06MTBERUQwMDA5REZCRTM1MTVFRkM1MDIyN0RGNkE2Qjc1RTU0RTMyMTI0Ci06MTBERUUwMDBEREYxRTY0NjdBOUY2MEFFOUJFRkJGNzM1OUE3OEFGOEQzCi06MTBERUYwMDAwRjMwNURFM0U3NTY2MTVBREY2RENDMjdGMjBEMkFGQTQ5Ci06MTBERjAwMDAxRDZFODk4NDZGQjgxQTcyQjdCRTE4QkUxQUQ1QkRCOTE2Ci06MTBERjEwMDAwNzNCNUY0MkI0MDUxQUY0NUMzQTFCMzJEQTM1Rjk1RTBFCi06MTBERjIwMDBFNjc5REVBRTBCMEU0RUYxRkI0NzhBODNENkQ1QkQ2RTg5Ci06MTBERjMwMDAwN0MxQzE1ODI3RDQyNDdDNzRDMTQ5QkNDRjY2QzBBNTkxCi06MTBERjQwMDA2QkRERjEzNzVGODVGRUY4REVFNERDMUNDN0U4MEY3OTk2Ci06MTBERjUwMDA5QzNDOUY1NzM0OUMzRUMxMjI5MDkzMEJEREZFMUZCOTIxCi06MTBERjYwMDBBMUZDN0FCN0ZGMkU0Q0NCMUM5RDgzOTUyMUM0Mzc1NTVECi06MTBERjcwMDA5OEFGOTAwMzE3QTUwMDFDM0UxQTE0QjgzODE5RTFEMUM4Ci06MTBERjgwMDBEMkY3ODJGNEZFQzM0RTJFMEYwRUE3MUI3QTZEQUIxQjg5Ci06MTBERjkwMDBFOTlCQkRDOEY1NUFFM0Y3MzI1NkVEMzg3RUZGOEQwMDk4Ci06MTBERkEwMDA5RjhGNUVFNUVGQ0Q5NUNCREU2QkVFMjJGRkIyQ0M2MkFDCi06MTBERkIwMDBEOTIxNDY3QTU4RjgwRDFFNzZEQkM0N0JEMTdDOURGM0JGCi06MTBERkMwMDAxNDBFRUY3OThERjE3NENGNkVERTUyRDlGMkJFRkRCQzI2Ci06MTBERkQwMDBBNTNDN0U5NTI5MkQ2M0FFQjdEODA5MkIwNDVERjdFQ0RGCi06MTBERkUwMDAwN0ZEMUFEMUZEQ0M1RjNBOTlERTJERDlBOUU5OTNDODc2Ci06MTBERkYwMDBDRkYxMzhBN0IzRjk1M0ZEMzJDNkZENEY1ODJEOTExRjBECi06MTBFMDAwMDA2OUZDNTE2RjUzMkJFNEU3ODcxMzdEQzhBRUYzRUY1Q0Q3Ci06MTBFMDEwMDA5Qzg5RUY5NzU0QjQ3MDNGNjdBQUJDMjhFMzNGMjA3REVBCi06MTBFMDIwMDA2ODNGREZFRjMxQkYwOEUxRTRGMjdCNURBNkYzOUEzNjhCCi06MTBFMDMwMDBCNTMyNDM0NzdBQkVENUU1NDc3OTkwN0ZCREZGNURDNEQxCi06MTBFMDQwMDBBN0UxRTczMEY2RERFNzQwMEZDMDM4Q0VGQzVCQkMzOTE2Ci06MTBFMDUwMDA0ODFGRjkwRDRFM0ZBNTBFQTZDNDgxNUNDQjU3OTgwMzBGCi06MTBFMDYwMDBEMzU0OEQyOTRFNENFMzk4MDNEM0VDRTU0MjdGQUE5RDBGCi06MTBFMDcwMDA0NUZBODMyNzI3NEZDM0Y3QzRGMzlCOUZGQzE0REIxNzk0Ci06MTBFMDgwMDAyQTkxN0Q5Mjg5OUVGMjlCNUZGRDgyRUVDM0Y5RjMyODZGCi06MTBFMDkwMDA0RUY3NUI1QjM0OEJERDM5QkFDMTlBRkY3NjkzMzU5RkJGCi06MTBFMEEwMDAxMUIxRTYzMzBGNUFGMzAzNzA2RDI2N0Q3M0ZGMUUxRTA4Ci06MTBFMEIwMDA5RjUyN0E5QURGRUY3RDFFNjBBMDIyM0NCNkQ5NDkzRTdFCi06MTBFMEMwMDA0RTI5NkRDRUM2Nzg4N0QzNEZCQjZENThCRUZCRUZEQ0IzCi06MTBFMEQwMDBFRUVFRENFQUE0NzcyNUY3QkQxN0M3RTI5MkYwMUQ2QUUxCi06MTBFMEUwMDBFNzQ2MkMzRjFERDc5MDhERkU0NUE4NEY3MTRCQjBCQjI2Ci06MTBFMEYwMDA4RTQwQkI3MUU3QTUwNkJEODYyOUJFNjlFNzNGRjhGREU2Ci06MTBFMTAwMDA5NENFQURGNjMwQzY1MTlDREVGNUU0RDM0ODlGQTdCNzU4Ci06MTBFMTEwMDAwRTIwN0RFQzc5Mjk2NEMzN0U0M0Y3NzBGQzRGODhGM0IxCi06MTBFMTIwMDA1OEU0NTRFOTE2QUIzRDdFNDJFODAxMUQyN0I1NzlFODc1Ci06MTBFMTMwMDAxN0JBQjhENkJBRUU0QkMyRDY3Q0E3QTg3RjFCMzM3REUwCi06MTBFMTQwMDA0RkM3RjgxMEVGQUEzNERDNjczN0M1N0VCRkZENzNDMTM3Ci06MTBFMTUwMDAxNzRGM0RBNTE5NzQyQjhCRjcxRTk5MzdBNUZCQkVFMjBGCi06MTBFMTYwMDBFRUVFNzNEQjI1MDM4MDhFNEExMTE2NDNCQUJGOTc0NjQ1Ci06MTBFMTcwMDA4RERCODUwRkQxN0Y5MjM4MkZFQkZDQUQ0Q0YwMzk1NUZDCi06MTBFMTgwMDA1NTY0ODlFRkU4RDJGQkFBN0M2OTUzNERGQjUxNDFFRDAwCi06MTBFMTkwMDBCRTk0N0NEMjU3RjdBNURDNjZEQTY3Q0FCNjFFNDhCOUNBCi06MTBFMUEwMDAxOUZBNkJEQkEyRDBFRkVCOTVDRDc5RTI4MTA5NDlGODQyCi06MTBFMUIwMDA1RDZFQzBGOTYyMzlGQUU3REExQTVFRjI2MDNERDA4QjIzCi06MTBFMUMwMDBDNzlBRTNCRDBBNkJDN0E1NEQzNUYxRTlEN0E1NEI4M0M3Ci06MTBFMUQwMDA5RkNBNzQwRTlGRTc3MjVBNzJGMTFFNDY2OTJERkYxRDg5Ci06MTBFMUUwMDBCRUQyODYxQkFFQkIxQUUxQkU5RURGNEZDRjU2NTg5RUY1Ci06MTBFMUYwMDAwQ0ZDNTNCNkZEODZFRjhGODZFRkMxQzdDNkY5NzAzRUEzCi06MTBFMjAwMDBEOUY4MjQyRERFQkJBRDNGNDNGNzc2RUVCNTcxRkY0NDYwCi06MTBFMjEwMDAzNDVDNDY3QjM4N0VFRkZEODFBQjA4RTUxMkY0RjdBMjUzCi06MTBFMjIwMDA2RDJDQjUzRjY4MDM3REU0QzRFNEQwNkIzNzQzOTVEM0QwCi06MTBFMjMwMDBBQ0UxMEY1NzUzNUM5Njk1OUU4MDNFMjVENEI3M0EzNzk0Ci06MTBFMjQwMDA0QkJFOERGNDc1NzlGNkI1QTg1QUZCOTc1MTNDM0E5NEJDCi06MTBFMjUwMDBDN0I0Mzc4QUMzRDY3RUEyRjE3Q0E1NDczMjdFRjc2ODYxCi06MTBFMjYwMDBBNDk5NUVBMkVCRjU5RDExQTJERkI3MkE1QjBBNzJDRERECi06MTBFMjcwMDBBNEVGOTcxREFEQTE3OEQ4RTg3MUM4MTk2ODhBM0JDMTkxCi06MTBFMjgwMDBGREQxNEI3Q0VDMTQ3QTAyOTMxQ0Q5MjI1RTdDMjhDRjAyCi06MTBFMjkwMDBEM0JCQTc0ODk3NDAxMEE1OTdCMkE5NUU4NEVCQjU2Qzk1Ci06MTBFMkEwMDAzQUE2Q0Y0QjkxMDc2NDk5Q0IwM0YyMzM2RDhCMjc3OTU0Ci06MTBFMkIwMDBEMEE2QjczRUYxNzNBNEEzRkFEMTc0MUVENjVGRENFRkVCCi06MTBFMkMwMDA2RUYzNDZFOEJENThFMzc3NzFEQTc0OUUyRjY5NzY1MjkzCi06MTBFMkQwMDAzQ0Q1RTk4RjM0OTI5N0NCMzA4RTEzRUIzRkVEQjREOTE4Ci06MTBFMkUwMDA0MDVGM0JCREJERUY2NDhDMEI2RTZCRTBFRjhBOUY2QUI1Ci06MTBFMkYwMDBFODNCNTlGQjhBRkQzNzlBRUY4RDdERjEwOEZFMTNERjZECi06MTBFMzAwMDA0RkY1Rjg4QjNEQjhERkFDRTA3MUQzQTk3RDJCMzMyQUY0Ci06MTBFMzEwMDA2M0UwQzk2ODk3QTQ1NTY2QTBCREQyNzlBQkNCQjc5MTJECi06MTBFMzIwMDBFQjUzRTkwQUY5REREM0M4QUY5MjJGRkM0OUY3RTk3OTNECi06MTBFMzMwMDA3Nzc4QTBCRTFCRUFGQUUxRkYzRTA3RTU4REU4NzdGQzlGCi06MTBFMzQwMDA0MEY2RERBMTBGRUQzRTFGNUY5MDE1QTBGQkUzRjQwMzQ3Ci06MTBFMzUwMDAzNjMwRkU3Qzg1NDUxNEEwQjdGOUI4QUY4Q0ExM0NDOTE2Ci06MTBFMzYwMDBDRkY5RUIyNThBMjM1Q0IwQzZCQTFFN0NFN0RBQkMxRjY2Ci06MTBFMzcwMDAxNkUxMkYyOTBFQzVCOEIwMDY0QThCRDY1QkNCOEI3MTQwCi06MTBFMzgwMDBGRkYwNTBCQzE3QzVDQjk0RDQ1OUNCMTk4QjkwMUZBRDVGCi06MTBFMzkwMDBBQ0ZFNEI3QjJDQjg3RENBOENGNUY5NkIzQzE2QjlBMzRGCi06MTBFM0EwMDA5MkRDRjk1MENFQTNGNTk1QTIzNzAwRDI5QkM0RkUxQzk3Ci06MTBFM0IwMDBCQzMzMjc2RDAxQTQxRDRCMjdBNDJEQzhDNDdCRUU3QzY0Ci06MTBFM0MwMDAxRjIzRDM4RUY4OThCRjhGNTczQTk1NDUwNkYxNzc3MTgyCi06MTBFM0QwMDAxOEVFOEZBNUNENTI2NDM0RTYxRDJDRTQxOUNCQkZFM0IzCi06MTBFM0UwMDBGQjIwQjg2RUYzM0QzMTYzRERCODVFRjM3N0Y2MjZDN0U4Ci06MTBFM0YwMDBBQjcxQ0YxMEQ3NkIyRTJGMTM3MDI4QUJCNzVCRkMzQUU1Ci06MTBFNDAwMDAxM0VBQTU5MEZCREI3ODdGQTk5NURBNTUzNDdFNjlCN0NFCi06MTBFNDEwMDBGNDJCRjY1RkQ4Qjc5OTEzRjAzNUExNjg4MzhDOEI3OTBDCi06MTBFNDIwMDBBODRCOEU4NzJGODk3NTBGRTVCMDgwREY0MzM3MTRGNDMyCi06MTBFNDMwMDA0MzdFN0QxMEY1Q0ZGRTAyQzAzOTI0OUY4NDlGODA0NTI2Ci06MTBFNDQwMDAxQzMwNUU1QzY2NTc5RUNBQjM5N0YzRkMzRTRGRTA4QTcxCi06MTBFNDUwMDBEQTgxNjBBRkE5MDEzQTg3OUEyRkU3QkQ4Q0Y3MUI0Nzk1Ci06MTBFNDYwMDAyNjA2NUU0MkJDQ0NCN0Y5MDcyQkM0QjdGRTExRTQxN0YxCi06MTBFNDcwMDA1RENBRTFGMEYwRDhDQTRCMkE2M0Q5QzUwMkJGM0Y5MzA5Ci06MTBFNDgwMDAxQUU4NUMzRUI0OEJFRkEzRUVBQzRFRDVFQ0Y3RkU4QkY2Ci06MTBFNDkwMDA5MDQ3MDlGQjVCRTk1RTRGRTcwRTg5RUUxMzNGMjIxREIzCi06MTBFNEEwMDBBMUZCQjY4RjVDRTk2NTY4QzdBNzAxOUU1MEVFM0UyMkNFCi06MTBFNEIwMDBCMTE1Rjg1RTVFNTZFM0FDNDUyRjIxOUVCM0UyN0M3ODQxCi06MTBFNEMwMDBERTVGREUzODQ5MkU3N0QxRkFCOUJFMTU1RkI5MDFDRkNDCi06MTBFNEQwMDA4MzUyRTc4RDFDOEI3NDBFRUI5RTc3MkQ3Q0ZGRDBFMzZGCi06MTBFNEUwMDBBNUYxRkFCOTM4REVEMzk2ODdEMjE3OEZDMkYxRjMxNkE5Ci06MTBFNEYwMDBCRDg0N0MzODNBOEVFRUExQTcwMkFDREM3RDI4NUQ4RDEwCi06MTBFNTAwMDA3QTU0MUFDQkQ4ODdGQTYwREEwQ0VGNThGNEI5M0ZFNEEyCi06MTBFNTEwMDBFMUUzMjREQkU0NzlCMzUwQ0YxQkNCRjM3RDdFMkNGOTEwCi06MTBFNTIwMDAzNzEyMTFBRUE1NzE1MkVENkMzQUNFMTdCRkEzNUVFODVCCi06MTBFNTMwMDA0MDNGODJDQjg0RUYyOTk1MTkzODdFRUE1MDlFMjY2OUE4Ci06MTBFNTQwMDAxMThBMEYzQzY0RTBCRDk5QzdFOTJERDExOUM5RTkyNUFECi06MTBFNTUwMDA1RjRDNEE0NTNCRUU1MDFCMThENDIwQkYwRTBEMzRFQ0U3Ci06MTBFNTYwMDBDQzg4OEJGNEYwNjEyMzc5N0Q2MUY3MkRDOUUwRjc1RkVBCi06MTBFNTcwMDA5MjA2MUJGQTBGQUZEN0ExRkExMzMyNTFBRUJFQzFGNTA2Ci06MTBFNTgwMDBGMTRGNUM3RUYyNTc1RkE2QzU4RUJGNEY0OEUwNzgwQTE4Ci06MTBFNTkwMDA5RThCNjM2MTkzRkYzODM4RkIzM0QyMTM4M0U3M0MyQ0E3Ci06MTBFNUEwMDA2Q0RBMjdGMEJENEQ3MzFDNzc1OUQxN0VGQTFEODQ3MjQ5Ci06MTBFNUIwMDBENjQyRjcwMUNBMUJBQzcxRTc5N0M1QzUxRUQ3QTBGM0I5Ci06MTBFNUMwMDBFMDM5MUIwQkY1MjUzMjFFODhGNkQ3MjFBOTczRDVDMjc5Ci06MTBFNUQwMDAyNEJBMTc0QkU3M0JDMTczMUEwQjk5QzYwRjlFRUI2MzI2Ci06MTBFNUUwMDBDRDc3Q0QzMzg1RkFFOUFFQzdBQ0Y1OUEzRUE3N0EyQzQ0Ci06MTBFNUYwMDBBN0Q1ODNFM0I0RUJBREI0OEYwNENGMjlENENFRDg2RkM1Ci06MTBFNjAwMDAzQUMyQjY5MDBBRkNEQ0VFRTVFNTFERTIzQ0NGQTg2RjBECi06MTBFNjEwMDBGNEQ3M0U1QjEzRjdERUY4QkJFODZENTUyMDc4MDAyRThCCi06MTBFNjIwMDA4RjM2OUYyMTdGNzQ1OUYzM0U4MjhCNDEwRkRERjA4OTM1Ci06MTBFNjMwMDA2NzIxMTM3QzUyQUE1QjIyMzZFMEVENjkwRjZFQjg3QjJFCi06MTBFNjQwMDAxNEQ4OTBDOUZCMDUxRjg3MzZEREVEOUYwOEU1RjhCQkEwCi06MTBFNjUwMDAwRjI2QkU4RUNGRUFFMjczMTIzMzBGRDk2NDJFMTc0MjEzCi06MTBFNjYwMDA3NTc3NEY5RDY4Q0E4QkZBNURFRDQzOUJBRjk4MEEzNDZFCi06MTBFNjcwMDA5NTM1OEFCN0JGRTZDMTI3NUU1OTRFNEU4QjFBMTFERjFBCi06MTBFNjgwMDBERjM5MzhDRjZEQ0EzQkEyRjIyRUM4OEYzNkU1RjVBODI4Ci06MTBFNjkwMDBGMkE0QThGMkI0QThGQzQwNUVCRkNEMUQxOTJDRkI0MDJCCi06MTBFNkEwMDBERTNGRjhENDE1RjhGQjlFNkRGRDIyNzNGMTA1OEYzNTIyCi06MTBFNkIwMDBGMkI2MkJGMEY3N0NDQkIzRjhFRkQzNTYzNDRCM0VDOTEwCi06MTBFNkMwMDAyNDNGMkJCQUNFRjM1QkI1RjlBMzEwMEUyRDJGQTMxQzVDCi06MTBFNkQwMDAyODZCOTI3NEQ0RUI1RDBEREIyMzk0Qzc3NjVFNTNCQjNECi06MTBFNkUwMDAwNjZFM0Y5NjM1MUNBMTc2QkRGNjNGRDI0NjdDN0NFRjg4Ci06MTBFNkYwMDBDOEY3QTlERUY5Q0U5RkQ4MENFQkVGNUJGNTc2MUU3NTU3Ci06MTBFNzAwMDA0NDBBMkM0RTQ4RUU3RTdGQkQ2REZCREJEREJGMkYwQTM5Ci06MTBFNzEwMDBERkRCRkJGOTBGOTAxQzhEQkEwNzFFQzRGOUI4QkFGOUZDCi06MTBFNzIwMDBDNDgwRTNCRDIzQ0ZEMjdCQjQ3RjFDRERGQzE2QUEwM0RCCi06MTBFNzMwMDBGMTRCQ0UyQzUzQTBERDlGQ0I4RjhGNDM3RDBCREZCNEVECi06MTBFNzQwMDBDNTdERTM2NzUyRjgxMkRDOEYxRTY1ODE0QjcwREM1QjgwCi06MTBFNzUwMDBDQjg3RUZDMzlGNEMzOEFDQjYzRTg2RUY5NTZGNzhGMDExCi06MTBFNzYwMDBFNTJCMTQ5OERGNjE3N0VCMjBGQzA5Qjc0RDA5NkZGMEJBCi06MTBFNzcwMDA3QzcyMkI3RjUxNDVGRjFERTFFN0YwQTBENjQxMzZDOEUyCi06MTBFNzgwMDAzRjk5QzBBNjUzN0U3OEVCNjM5ODdGM0RFMTA0QUYzRjhECi06MTBFNzkwMDBCQTc1OTBBQ0EzMDk3MkYyOEFBOTkwREZBQ0M3RTZGNzBDCi06MTBFN0EwMDBEQTA0QUUzNzFCRjM5QjM2RENGRjUzODQwQjJCRTNGQjAxCi06MTBFN0IwMDAwRDVFMzM3NjgwM0M5RDVCNzI2QURCNjY4MEM3REMxRjMyCi06MTBFN0MwMDBDNTkzOUNEQkRDNzZERDU1NzkwNDg3NTAxRUM2MTFBNjA3Ci06MTBFN0QwMDAwQTc4RDM3RTQ4NzI1RDIxN0RBMjFGRUU4MTdEQkFGMTU5Ci06MTBFN0UwMDBFOTFFRENFMkE1RkRFMkQyQ0FFREE4MzdBNENFMUQ0NUE0Ci06MTBFN0YwMDBGQjQ1QTFDNzJGRTlDOURENjkzODE5NTJBODJGRTkzQUFECi06MTBFODAwMDA5N0VCQjI4REUyMjM1MkVGNzI5MzFFRjVBMEY4M0QwMzExCi06MTBFODEwMDBFMDNCQTIwRjk3QzBDQjM2QjE5RTZEMDlEQ0JGRjY4MEZFCi06MTBFODIwMDA2NzFBRjVGMzlFRTQ3RkM0MjE2M0NBNDI0RUYyQTdDNTdFCi06MTBFODMwMDA5MUJFNzJGMzA2OTAyQjIwRDdENzg5NzlBRjVCN0IwOTA1Ci06MTBFODQwMDBGOTI5NkU0NjNGRjEyOEZDRUVFRkQ3Njc1NEI3RkVCRkJCCi06MTBFODUwMDAyRTAzRjJBRTZFQkI2RUREMkM3RjNGRjNCOUY2QkEwRDIwCi06MTBFODYwMDBCQ0RDOTA1QkVCRDI3OTdCNjNCRjRBQURFNkUzQTQzRUIwCi06MTBFODcwMDA3OEM5NDY1QzQ3QkNDMjI4N0U3QkUxRUMxMTFCOTdEMTZFCi06MTBFODgwMDBGRTdGMkRBRDlGRjlGREZERDAwRTNGNUEzQ0M0ODY3QTI4Ci06MTBFODkwMDBBOTgxOUZDMkUxRkU1NzEyNjAzRDM3ODlERkVGMzVGMDU1Ci06MTBFOEEwMDA2NDhDNEZCN0UyNTE3RjkwNDE3RjQwM0IzNTMxNDBFQjY0Ci06MTBFOEIwMDAwNzdENjIwQzBGNkVFMEZBMDREMjE2MzNDMTk3MjlBREMyCi06MTBFOEMwMDBFM0YwRkJGRjIwMzhCNUZEMkJFMEY0NEY5Rjc3NDdDOUZECi06MTBFOEQwMDAyMTkwMzcwQ0ZCMkY1RjdBREM3MkZGRUQzRjAxRDEyM0QzCi06MTBFOEUwMDAyQTcwMDA4MDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDVDCi06MTBFOEYwMDAwMEZGQzU3RDBCNzg1NEQ1QjVGMDNFNzNDRUJDOTI5OTIwCi06MTBFOTAwMDA2NDI2NEM5MjQ5QzhFMzg0NDAwODEwNzExMjQzNDRGMEQ1Ci06MTBFOTEwMDAzMTg0ODg1MTY5M0I1MEQ0RDg3QTcxMjAzQzAyMjY5OUMxCi06MTBFOTIwMDBBOEQ1NjI0QkZGMEMxMjc5MDkxODM0MjI1MEMxODEwMjFDCi06MTBFOTMwMDBDNTVCRjUwNjQ1OEMxQTcwNDQ4QTdBQUZGNjhFQURCNzgyCi06MTBFOTQwMDA1NzZDN0ZGRjA4ODg4RjRBMzJBMkY1RDI5N0ZERDc1QUJECi06MTBFOTUwMDA3QkVGNjRDRTI0QTlCNEI2QkRGOTNFRENFRUIzQ0ZEOUNCCi06MTBFOTYwMDA3QkVEQjVENzZCQUZCNUY2MUVBNkY1NEMwQTVDQzBEOEVCCi06MTBFOTcwMDA2NjI1NkFDRUFFNjQyQzdDNDhGMUVENjFGMDA3Q0Y2NzY2Ci06MTBFOTgwMDAzQjE5RkJGN0I0QTBENTk1QzlEODlGRjFFRjBBQzZFNkFECi06MTBFOTkwMDA3RUJGMjkyNzU4MDZFRDhEMjMxOENCNjEyQ0Y1QkJDRjAwCi06MTBFOUEwMDBENERFMDBENUI5NEIzRjdBN0MwRjdDM0ZGNzdCQTk4QzM2Ci06MTBFOUIwMDBFOTAzRUY0MzhGOENDMUY3RUZCQzZENUJDRjJFODREMkEwCi06MTBFOUMwMDBEMjE5MzU3OUEwQkM4NkY5NTZDMDdCRUY5ODU4NDMyN0Y5Ci06MTBFOUQwMDBGNEY3MEVCRTdBMDk2MzU1REZCQkU1MzUzNjkxQjFEQjNFCi06MTBFOUUwMDA1RDJBNjM5MzE4NUJBQkY4NzM5ODhBMjUwQkRCRTBCQjU5Ci06MTBFOUYwMDBGMDJDNEI2NDRGMTE2MzdEMTE1M0Q4MENGRDc1QjgyMzc3Ci06MTBFQTAwMDA1QjE3QzFCODFERDc5NUY5QzJEMDVGMUY2MzdFODZFRjMzCi06MTBFQTEwMDAyRDRCQTVGNzNBREMzRDRDQzNGNjRCNzQxNzQwQzIwRUE0Ci06MTBFQTIwMDA3RUExRkExOUQ0RTMzNzVBMjJCQjE0Nzg1RUNFQzI3NjlGCi06MTBFQTMwMDA2QzVGMzIzRTEyODZGQUYzMzAwRTdEN0Y2MzRBNjQwRkJDCi06MTBFQTQwMDBCNkNGODI4RkEwREU3MUEzMzcxMjg2RkVFQzJDNjI0NzEwCi06MTBFQTUwMDA3ODNBNzZGQTczMzIxQzhDRTVBQUFDMDVFMUVGMjg4MjhECi06MTBFQTYwMDAzQTk0NTkyQkQ5Q0QwMTA3RTJDRjNGNzE5NjczMDAwRjJECi06MTBFQTcwMDA1Rjc3OTk2ODNFQTk5NTNENEZGRjM3RjRDN0Q2REI3RDk4Ci06MTBFQTgwMDA2M0EwQjBFMUFCNTg2RkNGMjY3ODk5M0I1ODg1Rjg2NjA0Ci06MTBFQTkwMDAxQUZDMDNCOEVBMUZDODg5QUNDM0U3Q0M1Nzg1RUJCMUIxCi06MTBFQUEwMDBEQUU5OUY0N0YwRkYyMDU1NDdGODFGQjZCMzM1QjYwQTlECi06MTBFQUIwMDAyODE1RDY2NkNCMDBGQzBCNzg1OEZCNDMwMDBDNjMzNzU3Ci06MTBFQUMwMDBFMzAwODA5N0ZGRDc3MEQ2QTlDM0YzMkI1RDBBQUQwNzhCCi06MTBFQUQwMDBGQ0Y5NkQ1NThDQ0Q2N0JDN0RGRUYyRDQ3Nzk1ODk1OEQ1Ci06MTBFQUUwMDBBQTUxNkIxQTNDNUI3M0E1QkZDNzQ2RUZCMTNGOEZFMkRCCi06MTBFQUYwMDBBNTBERkEwQjMyRjFCNzI1RUU0NEJBMDlFMjc3NjlEOEQxCi06MTBFQjAwMDBGRkVGOURCQTAzRUJGMEZENDQ1Qzc2RjhCRTc0RTBGQkNBCi06MTBFQjEwMDAzQTE3QTNGOUNGNTUzOUZDQUMzNTU1NDdGQzRBRkNDODI4Ci06MTBFQjIwMDBCMjRFQzJEN0ZFOTAzRjcxM0MzOTRFNzJCRkY3QkFGQzZECi06MTBFQjMwMDAzNzIyQkUwMEVGRDE3NDBGRTI0NUE1NzU0RDg2RDc2MzJECi06MTBFQjQwMDA4OTZGQjA0M0ZCREM1NkQ1N0QzN0UwMzNCOENDNDlGMzUxCi06MTBFQjUwMDA5NUYwREU5QzFEQkY4QzE1MEZFRUZGNzQ2QTczOTU4NkQxCi06MTBFQjYwMDBGMzVGQzZFOTlEMkRCNzAyRTIxMkYxNjIxOUE4MDM1REI5Ci06MTBFQjcwMDAyQzY0RjE2MzI2NjU4OEU3NUFGNDQ1ODQ3RjUxNDdDMkM3Ci06MTBFQjgwMDBGN0Y0REYyRkFDODlFRjQ5N0U2MUJBOTIwNEJGQTAyQjY2Ci06MTBFQjkwMDA1REQxNzBERDgyMEE1RjM3OEIyNTNFMzc1MDM2MTg2RUE3Ci06MTBFQkEwMDA4OUNGRDU4MkVFMjQ1RDI0RTM3QjM1RTI3QkQyNjA3Qzg1Ci06MTBFQkIwMDA3QjJDM0RGOUQ4NkY3MDk5OTVGMDk0REMzRjYzMTFGQTg2Ci06MTBFQkMwMDBFRTIxM0JGMDBGRDBERDE2NDUyMTdBREQ3MjU3NkE2NEU1Ci06MTBFQkQwMDAyNUYyQTczREJFMTdGMTE5M0E3QzE1QUQ3N0VGOTIxNEQ3Ci06MTBFQkUwMDA5REMxMkJEQjJDMzA0MTk0MzM4NzlEOUM4RjRCN0E0QUZGCi06MTBFQkYwMDA5MDlGN0E2MUNFN0U1ODlGREVEN0Q1OUQ2MTQ1MDJDMTM4Ci06MTBFQzAwMDA1OEYzRUJFQTJFQTRGRkRFNjdBRkU2RkRBQzQ4RDUxOTVBCi06MTBFQzEwMDBENDQzODg2MTE4MzcxNEZFNDMyQjAzQkM5RTM0QzUyQ0EzCi06MTBFQzIwMDAzNDVFMTdFMDU3QzIwOUZGN0FFMTVGNDNDNTgwQkNFODU0Ci06MTBFQzMwMDBDMzA2MUNCRjhCQ0IwNzk4RTExMjFBRTdEQjI5NkMxREJBCi06MTBFQzQwMDA4Q0RCNkM1MkZDMjY2ODZGNUUzQTNFQjI5MkMzNjE0MzI1Ci06MTBFQzUwMDAzRTZBMTQyMDM1OUI1ODlCNTIzMUMwRjdDREE2MTMyNTMwCi06MTBFQzYwMDBCNzk1RjEzNjBEREVCQjg1RjE3NTgxRjc4RTJBMDA1RjExCi06MTBFQzcwMDBBMzZEN0Q0QzQ1QkE0NUZBODdGNkE1RDg1RTM0ODBGRjcyCi06MTBFQzgwMDBFNkY1QkZGOTEzQzJERjdDQzA0ODE3OEQ4RjE5RTdCMUQ1Ci06MTBFQzkwMDAzNDkxOUU4QTA2RTgyNEI1OTJFMzg5RDVCMEM4MTg4MERECi06MTBFQ0EwMDBENzI5RUFBOUI1QjE4ODhBNzg1QTU2Q0Q0RTAyRTk2NkM1Ci06MTBFQ0IwMDAxRUU5OTk4MUY0RTNBQ0VDNjRGM0ExMEM3REMwRkMxMTc2Ci06MTBFQ0MwMDA4MDdCNEFGN0NFOTc0NkMyRkJFRURBNTgzRTRFMzdCNDA5Ci06MTBFQ0QwMDBFQ0I2OEI0RTVEMzRCMEJFMTJDRTRCQkEzN0E5Q0M0MUU4Ci06MTBFQ0UwMDBFM0QxNzcwMDhBN0ZCRjgzREUxQjM3RkI4MkM0RjI2RURECi06MTBFQ0YwMDBGQTJFRDNBNDEyQkRGNkUwMjNFNDFCQ0Q5RkEzQzAzOEE3Ci06MTBFRDAwMDA5Qjk3OEMzMkUxN0FBNjgyN0M0M0I5QkNCMDdERUNBRTk1Ci06MTBFRDEwMDAxNTg0Njc3RjA5Q0FCNzA3RDM4MENFMDk5RkJFMkE5NDlFCi06MTBFRDIwMDAyRkE1RUVFQTVGQkJBMEJGQTdEQ0Q1RkY4RDI1OEUxMzE0Ci06MTBFRDMwMDA3MEUyRjQ0NzkwQkU0OEE2RTc2NEJEMjNERkNCMkU2RTk5Ci06MTBFRDQwMDAyOTZGNzEwQ0ZGMUVGMDE3RTEyREJFMzU5RENCMEY0REM1Ci06MTBFRDUwMDBBMUZBQTJGRjMwRUY1QzQ3RjA2OTQ0MzdCNzZEMkYyMjZDCi06MTBFRDYwMDA3OURDQzBEQTg5REUxQTU5QzQ4MkY0QkJDOEM2QzI2OTJDCi06MTBFRDcwMDA0MDE3OEJFMEI1NzQyODE3NkZCMTMyM0Q2MUZEOTY0NEEyCi06MTBFRDgwMDA4Q0Y1NDYyMTBGNkU2MTMxRkFGRTk2N0Q0OUVEMzUyQ0VBCi06MTBFRDkwMDBFQTg0RjYyNjFCOEJBNjYyRDk2OTZDNkY2NjcxNDFFRjE3Ci06MTBFREEwMDA3RkI2MjYzRTY3MUQ3Q0JFMzc4Qjc1NzdENzQ0RDQyMDRGCi06MTBFREIwMDBDQzdCQUIxRDc0NTcwNkJFRDA0RUVCMzM2NUY5NEU1QTczCi06MTBFREMwMDBDRkY0MEE3RkQxM0RBODRGNUUzNUZCNzYwMUREQkUyNzJCCi06MTBFREQwMDBENjRCRTJFNzVFNTdGNUJCODhGNzE0RDU0NEYzOEZERkQ3Ci06MTBFREUwMDA2MzI1RkM5QzAyQkQ4REVCN0Y5RjlCREQzQzFCQ0FERTM3Ci06MTBFREYwMDA1NkREM0I3QTM0QTJDOTU1MzBEQjM5MThDRkVCOUVCM0QwCi06MTBFRTAwMDAzNzIwRERCOEREMjZDMkI3N0M3RUNDNjVBNjdBRDVERDlECi06MTBFRTEwMDAwMkZGMkI1MjIzQkI4QTA4REQxMzkxOUVBQTQ2NDk3RDJGCi06MTBFRTIwMDBDQTI2Q0U4MkZBQkI2NjU2RDcwOUY1RTZFQjFENDFFQzQxCi06MTBFRTMwMDBBRjA3RUQwN0E4MTdCOEI5REUyODcwNUI2ODdFQjIyRTYxCi06MTBFRTQwMDBFNzJCRTkwNkM2QTFGRTUyMkVFMkE1ODQ2MzhDNUJDOEJGCi06MTBFRTUwMDA0MUI2ODk3RjI3RjRFRkU2MjUyOTNCNDlGRkY2RDNBRjdBCi06MTBFRTYwMDA4OTExRkQ5NjA1MkM4OEQ3RTc4NDVDNzk0RUNBOTUzNkMyCi06MTBFRTcwMDAyQjk3MkI5QTZCRUUzMkE4M0ZGNzQxOTk2RjFERTA5NUM3Ci06MTBFRTgwMDA5NTgyREU4M0VGMUIzRjRBRDE5MTlFNUVGOUU4NUZFRkVBCi06MTBFRTkwMDBGRDE5QjQ5RkZEQzBBMjVCQTE3RDAxRDIxOEFDREI3MzRDCi06MTBFRUEwMDAwQTk3NDc2MDdGMzBENDhGOERDMEY2Mzg2RUUzQzFCMUNBCi06MTBFRUIwMDA2NDdGMUNCNDA4RkI0NkM4Q0ZDNkI0RTBENjg1RDA0RkVCCi06MTBFRUMwMDBFMzkzOTkzRUEwNjRGNkJDMzlGMkU4NUU2QzNGNjRGN0M4Ci06MTBFRUQwMDBFRDgxN0UxQjUzMzg1RTFCOUYxQjQ5REYzRjYxMEY0RTQ4Ci06MTBFRUUwMDA3N0MzM0M3M0FEOTE5RjNDODE3MkUzMDUyQkQ5N0I2NzVGCi06MTBFRUYwMDA1OTc0MTFDMjdGQjZEM0FFRTA3QjI3NzA1RUU5NTA0MkYxCi06MTBFRjAwMDA5QjgyRjNFQTc2OTIzRDA0N0M5QUIzMTBCRTNCQjkzNkZECi06MTBFRjEwMDA5QkNGNEJFMEU5RTQ4NjA5QzQxNzlCQ0Q3Q0JDRjBCM0UyCi06MTBFRjIwMDAwQUJEN0ZDMjFDOTg5MTAzRjUxMzRGOTdGQjU2NDA1M0JGCi06MTBFRjMwMDA1RkMwMTJCNTAwM0Q4N0VFRTM3NjVFQkQ0OURGODE3OEE0Ci06MTBFRjQwMDA2Mjg3NTMwOTVFQjkxRUExOEQ4QjY3NjI3QjY4RTlGMjA3Ci06MTBFRjUwMDBBRkEzN0MxQzhFQ0Y1MURFQjMwNEI5RDlDQkUyMDVDODc4Ci06MTBFRjYwMDA0RkRCMUE0Njc1NDY1MTlGNzQ4RkYzOTE1QTY1NUU1ODcwCi06MTBFRjcwMDA3Q0EwMUIxNzdGRjc5NDk5RTMzNTdFQzg0Q0Y0N0NCRUM4Ci06MTBFRjgwMDBGREUzN0NCNTJBQUU3RjcwOUMxMEM4NjUyNkY5OEZFNDNFCi06MTBFRjkwMDA3MjQyNUQxREFBQ0VDOEZFMEMzRDk3MkRFQzNBNjNGQjc0Ci06MTBFRkEwMDBFQkNFRTAxRDZFQTBCRkU2RkJGRkU3OUQ2NTg0REYzODdBCi06MTBFRkIwMDBDOTQ1RDY5RTQ5N0M3OUNBRUM5RjhCNzRFQkFFODk1QUMxCi06MTBFRkMwMDBFNjI3RThGMzBEODJBRkVBQURDMkZFNjM1MTRCMjIxRjg0Ci06MTBFRkQwMDBDQUY2QUE2QTIzRERDQjcyQkRBMDdGNjc4Q0NCRjdDMUNFCi06MTBFRkUwMDBFRDI2QzExRkRGQjRBMjFFOUJDMjQxNjY4NUE4NDcxQzQ3Ci06MTBFRkYwMDBEOEJGNEVGRDRGRjkyMDZBQTk4NzdBRTFGMkE4NjU5MTQyCi06MTBGMDAwMDAyODkxNEYwMERGNTExQkNDRkJENDU2MjdFNzZGNDAwM0ZDCi06MTBGMDEwMDBGNkIzNjgzMjIzN0RCOTQ4MDVGQkI1MDI5RkVCNUQzRDMxCi06MTBGMDIwMDBCMDJFQTc5Rjc2NzNGQUZBMjM2MDA1RjAzRDhGODlGNzFCCi06MTBGMDMwMDBBQzYwRUY4MjFDN0JBNjREODlFMjdFNjBERTE2RUIyRTczCi06MTBGMDQwMDA3QjExRjJCNTVGNzVFMjdBNkU1NzQ4OEVDRDZCOUI1Njk5Ci06MTBGMDUwMDBCMjE1RUE0QjBGNUM0MEVCOUYzNjk5RDNFNUQyODg5QjAzCi06MTBGMDYwMDBGNEUyMTQyMTFGRUJBRDExMEJEOURGM0Y1MTE4RjIwMTZGCi06MTBGMDcwMDBGNDRGNzY3NDIzN0M5NDUzMzExODBGMjhENzBERjQxMDc1Ci06MTBGMDgwMDA0OUE4ODM1RDM0QTU5M0NCNTUwNkYyOUMyNUQ4NEI1MkY1Ci06MTBGMDkwMDBERUEzMUM2NzQ5RjY5RjkxM0VDMjUyMUY3MUI5QzdGNEE3Ci06MTBGMEEwMDA2Qzk0N0I1MjJFREZFQjBBNzRCOTQ5QUU4RENFQzZGNTU3Ci06MTBGMEIwMDA4NUY1RTQ3MjczQkY0Mjc4NkQ2MjJEQTQ0RkE0MUVFOEZCCi06MTBGMEMwMDAxRjU3RTg5MUQzNkE5OEVCMkJFQjI2MkE1Rjc3MTdEMTZECi06MTBGMEQwMDA3ODRCNTkyN0U5MTNBOTU3ODZBMzgzRDdCRjg0MEU3RTlGCi06MTBGMEUwMDA4Njc0MDBFRDhEMUZCMEU4NjUzMDVFRTM3MjE2NkQ5QTkwCi06MTBGMEYwMDBDODRCRTc0NEQyOEY1QzRGREFCODlFQzQzMkU1M0NGNDhCCi06MTBGMTAwMDA2NUIyN0U0Q0Q2ODdDOTdBMzBEQkMyRjU5RDVDNjc2OUYzCi06MTBGMTEwMDBDRjY0NEZFNzc2QzA5NEU1MTE5NUMxRkMzNkE2RjkzRjYwCi06MTBGMTIwMDBDRTlDMzQ2MEQ3ODRERUIyRDlGNDBCQjExRTYwQTNFMDZDCi06MTBGMTMwMDBCREM1NjlEMzZFQ0E4NkY2OTBDNkZDQzg1N0E5ODA5NzJDCi06MTBGMTQwMDA5REYwN0NCQkIwN0I2QkIzMzlERDdCMkQ5QzdFQ0Q1QUIzCi06MTBGMTUwMDA4MDk1M0I3MDVENjJCNENGOEQ2NzMyMTdEMkEzQzRFNzUwCi06MTBGMTYwMDA3NjI3N0M1NzgxREY3MUZERDRGRkJEOERCNUE1MjQ3QzRBCi06MTBGMTcwMDA1RkZEOUM5REU0RUFFN0NGM0EyMzU2QjI0NzgyODU2RTU1Ci06MTBGMTgwMDBFODJGRUI1NzU2QjI1MzdCOUY3MzkyM0VFRDE1RkFEMEEyCi06MTBGMTkwMDA4M0Y2MjhEMUNCMkFBRTVGNzE1RDI3MjEzNTU1OEY2NDY4Ci06MTBGMUEwMDA0OEZCQ0EzNTIzNTEwNDRBRkJBQ0M5Q0RFREFDQzFGNkNFCi06MTBGMUIwMDA5MDY4MkY4QTVEQ0ZFOUNBNEFGQkNDQ0ZERDNENzc2MkVDCi06MTBGMUMwMDAxREUwNjE2ODlGRkY4RjU4RTdEMDgxRTlFNURGODdFN0ExCi06MTBGMUQwMDBBMTgwQzNDN0IxMUYyQzQ3N0FCNUFBREZCOURFMDZGNEY4Ci06MTBGMUUwMDAzNTQzNUQxRUJGMEJFNkQxOTRFRjcwQTE5RUFCMjlGQ0E5Ci06MTBGMUYwMDBGNTJGNkY4NEZBODcwN0NDQ0M4QUVCQkM2NzdBMUQxQjhFCi06MTBGMjAwMDAzNUJDRkM1RDEyMzE5RkU4NDlFMDk3NUJGNjE5RUI0RDg4Ci06MTBGMjEwMDA5REM2N0FBOENCNTgyRkM4NzA3QTRFNEYyMEQ5RTFGQkYzCi06MTBGMjIwMDAzM0QwQjVENURBRjJDMTRFODBEN0ZBQkM5NUY0RDFBNzY4Ci06MTBGMjMwMDBFRTYwNzEwNkNBNUI1M0ZDMThFMkQ5NUFGOEYxNDRGNDQ3Ci06MTBGMjQwMDA2Rjg0QkEzRjUxQjBCNDAyRURDNENBMzhGRTkxQUYzRkVCCi06MTBGMjUwMDBCN0NGMkI3NDBEODFCNzAxRkMzMTlCODlGMDBDRDYzQUU2Ci06MTBGMjYwMDAyRjQ5Q0U4NTA0OUY3ODJDRkUwRjVGODRGOTJGOUE5RDNECi06MTBGMjcwMDBFMkJBOUI5RUY4Njc0RUFBNDI3QjkyNjA2NEExMkQ1NzJBCi06MTBGMjgwMDA3Rjg4RkIyRDc4NkYwOUFFRkZFOTU5RjAxRUMwRDVCMDFECi06MTBGMjkwMDA4NUVCQzM0NjE2NEI0M0JFNkQwNkJCRDMwNjRCN0M0NzdFCi06MTBGMkEwMDAwNjVGODc1QkRBRTI1NTUxRjhERjhFOENEQTcxMDhBN0NBCi06MTBGMkIwMDBGNjI3MkQ4MEY0QjExQUZCNERCMDkzQUZDREUwN0FFMDg0Ci06MTBGMkMwMDA5NjdENzZENzI5MDMxRUREODY3QUE4MkJDNzc1MkE5MUVECi06MTBGMkQwMDBGRjg0RkM2MTc5OEE5NkI4MUY3QTU3MDk1RThCRjg2QkI4Ci06MTBGMkUwMDBCMkY1NThBNkMxRjg1N0ZDRTkzMzkyRjc4Qjk3Q0RBNzMyCi06MTBGMkYwMDA3REM0ODA1RDZEMjVGOUI0RjhBRTIwM0Q3RjY5MkJERkJDCi06MTBGMzAwMDAxNzlFREU2QUQ3MTFFRkE3QjdGM0ZERTNFMjNDNDdDNENGCi06MTBGMzEwMDAwNkZGN0I4NTlCREJEQjhCRTEzQjQ1MTk4Q0M3NjRCQzFGCi06MTBGMzIwMDBCREZGRjA1NTVFQTRBM0Y3MTkxRjJGRENDOUVEOEZGN0MxCi06MTBGMzMwMDA1RDgwQUY2MkZFMEVGNkY3N0UxN0Q4RUYwQUUyRjlBQUZCCi06MTBGMzQwMDAwRjUxMkUyRURFQUVGQUQwNEU2MDg3OUNFNDhGNTlCQzUyCi06MTBGMzUwMDBGRENBNzEwQjFERDhERkE3MjNBNkExNUY2OEM3OTVFODdBCi06MTBGMzYwMDA4OUMyRjcwMjExRUVENzg5NUQwMUNGQjUxRDE3OTMxRDM0Ci06MTBGMzcwMDA3Nzc0QkI5NUMzRTlCNkVEQzU3OTVDRjEyNzk1Rjg0QTdBCi06MTBGMzgwMDAzM0IxMjBEQUM3MUQxNkZGMzhFNDY3RkRFMTNEMzM3MDY1Ci06MTBGMzkwMDA1RERFOUY5NTZCQTJGNzFGNTc5ODBCRjFFMTVFOTY4NTk2Ci06MTBGM0EwMDBDRjE3MkI1QTAwRjlCNzYxQ0I5Mjk5ODlGNjRFNkE4NjJFCi06MTBGM0IwMDA0QUVCMzVBRDcwNzk1NjhGODNGOEU5N0FENEEzNEREQkVCCi06MTBGM0MwMDA4MTdGNzBGQ0Q5NkZGRkYyNDY0RjIyM0ZERDVFQzU0QzU2Ci06MTBGM0QwMDAwOUY2Q0JDMzVGMjM3QUMyQkYyOEUwNkJCMUMwRDc1NzExCi06MTBGM0UwMDBFNTJCNkJBQUU0OEI5NjEyOTRBMzhCRUY2RTI5NzEwRDFCCi06MTBGM0YwMDA2MTU3RjRGM0M1QzM5QzBGRUZDQjUwQjhGRjIwMkZDMzY4Ci06MTBGNDAwMDBCMENGMTg2RTVGRTYyODM1OTE1RUIxRjk5ODdGMEY5NDAyCi06MTBGNDEwMDBEOUIwMkRDNkZERjc4MTBDOEREQTBGNjQ3MDdCNUZGQkQwCi06MTBGNDIwMDBERDZERkI1RTg3Nzk0RENEMDg2RUNGODA3QTIxRjM5NzM1Ci06MTBGNDMwMDBFM0JBRUI3MTU3MzU5OEIxODg2MkIyQkJEOEMzNTY2RTQ4Ci06MTBGNDQwMDBDNzZBREM4RURFOUNDOUY2QUU0QkQ4OEY3NzYyN0Y5OTk3Ci06MTBGNDUwMDAyNDE3RjY2MjNGQkRDN0ZGNzgwQ0YxREE1Q0YwRjE0NDg3Ci06MTBGNDYwMDBCNDBGNDJFNzNFQjNBMDFGQ0REMUFEOTAzQzc3RjgwMjc4Ci06MTBGNDcwMDAwQ0U5MjVENDNEOEIyRDI4MUI5MEMzMjExRkQ3MTNDOTIwCi06MTBGNDgwMDBGM0ZBNTMwNkRGRUY4NDNDNzFFQUU3RkQxMTlDN0YzQjAyCi06MTBGNDkwMDBEQzlDM0VCNzJENEIyMTNGRTQzNjRGQzQ4RTQwRkZCNTc4Ci06MTBGNEEwMDA3QzJBRURBNTI1QzJFRjY3REJGRDk0NUY0NUZBOEUyODI3Ci06MTBGNEIwMDBBRTMxNThENzM5N0ZGNDM1Q0M4REE4MzBDRTg3QkI4QjkxCi06MTBGNEMwMDBDOURGRDk3NzYwOUE0Rjg1MzZDN0VFMUZBRDE5ODU3OEE5Ci06MTBGNEQwMDBFQTMyRkJGMDdEODdBRjI3MERFN0Y3RTFFRTkzNjkzODVECi06MTBGNEUwMDBCRjg2REQyQUNEQkIyMUYyNDlENkMyQjIwMUI5RjAzM0M1Ci06MTBGNEYwMDAyNUY4M0FDQTAxRTY1MjFDMzhCRTk0MEYxRkVFRkUzNEJFCi06MTBGNTAwMDA2QjgxODNGQjBCNDg3RjU2MEU4RDk3QTdEQ0QzN0U4RUQ1Ci06MTBGNTEwMDBERjVGNzEzOTVGOTc4RjFFQjc0NjUwRUU3RDY0MDdGRDQwCi06MTBGNTIwMDA5NjIwNkYzRjcyNzI3RDc3MkE0M0VFRUYzQTBCNTBERkUxCi06MTBGNTMwMDBGNEQ3NkYyQTM1QTE5Q0Y4OEU4QkNGREY2M0U5MkM0MDdFCi06MTBGNTQwMDA3RUZDOEQ2MkVDNjdFOTFBMTM4QjgwNkM1RkIyMDY1MDBCCi06MTBGNTUwMDAwM0YyRThBMzQ3OUYyOTQwNzlGRkUxOUU2NzBBRTYyNzY3Ci06MTBGNTYwMDBDMDk3RkM5RDJDN0JFNTc4QzI2RjI2RkRBODFFNEIzNDBFCi06MTBGNTcwMDAwRkM3OUJFRkIzNzI3RkU1MzA3RTU0RjkzRURCQzJGRENGCi06MTBGNTgwMDBBMTdEM0VBQjhFNzQyOEJGRUI2QjQ4RjFBMzdEREJDNzNBCi06MTBGNTkwMDA2QzI0RkZFNjc3MEJCRkFDREYzRkRBODNGQjE4Rjk3RDA1Ci06MTBGNUEwMDA1MkZGMTUxRTRFNEY0QTk3NDJGRTgzRDRCMjM4QzlFMzJDCi06MTBGNUIwMDBCRjU5REU3QjYwM0QxM0U0M0RBQ0YzQkYyMTVGMzREOTFFCi06MTBGNUMwMDBFMkM3NDYzMkEyMEYwQkUyQ0REMkVDRDA1MDNGNjVBRDgwCi06MTBGNUQwMDBFNEY0MTVCRkMzNDRGQjJBNEJBRUQ3ODFGMkVDOEE5MjA4Ci06MTBGNUUwMDA5NDM2MTMzMEEyMjcyNTZEMjJDNjAxRjI3MzRCRTlGRDM0Ci06MTBGNUYwMDA3MDM1QTdGQjcwMTYyMzdGNUIwRTZCNTE0ODVFQkJCODVFCi06MTBGNjAwMDBERjNFNkYzMjczQUQ4M0VBQUMxMURDOUVGMTMyREYxNjYwCi06MTBGNjEwMDBCNTk4RDY1RDQxRkY5MEM0ODdENDBCNDgzRjI4MUYzRjYzCi06MTBGNjIwMDA1MjZDNDQzRjRBQjc0Mjc2QTc2QUVBOUM4QkZEMEU0NzZDCi06MTBGNjMwMDA0RjEzNDdDOEZEM0ZBN0E3RkVGQTNGODk5RTI2OEYxOEE0Ci06MTBGNjQwMDA4RTlFODIzQUQxOTNENzM2MzQzRDA5M0ZGMTc5QkZDRkIwCi06MTBGNjUwMDBDMjAxRENCRjY2MEI3Q0REMjdFNDRFRkMwRTlCRjQ5QkY1Ci06MTBGNjYwMDAyQjM4REY5OUEyQkY5OTM2NDc1NDQ1RkRFMTMzN0Y5QzgzCi06MTBGNjcwMDBFOEZGN0QxOEVDNUZEQzI3RTVBMEZEMEVFNUM4OTVGM0ZCCi06MTBGNjgwMDA3NDVBMzcxNkVCNDE3RjQxRUFDNTM2RDI4RkY3OUE2MjNBCi06MTBGNjkwMDA0NTY4QUY2NDhGNkZEOThGNzQ5MTNEQjdBQzYyMjVFRDJCCi06MTBGNkEwMDBGRkYyRENBODBGNTBCNzkyMUY3NDU5NzVFMEQ0ODgwNDlDCi06MTBGNkIwMDA3QkUxMTBERkNGMzRERkU1QTdFN0QzQkJCOTdEMTAxQUJDCi06MTBGNkMwMDA2RDIxN0IzOEQ0QTU4NDcxOUQ5QjAzOTYwOERBNDE2QjJDCi06MTBGNkQwMDAxNUVFNUYwOTZGQjBFQjNDRUVBM0FGQTBCOENGMEY3NDhGCi06MTBGNkUwMDAxRTE3OEE0OEZGNkZDRjhFRUYyM0JEMzUzOEM4RUY5MUM0Ci06MTBGNkYwMDAxQzNGM0FGODg1Q0FDNzFGQzM2OEZDOEU3MjFFQUZFQTZBCi06MTBGNzAwMDBCODVBRTdGRTE1QjE3RTFEQjNGQzM5NkVCNDA3RDYxOEEyCi06MTBGNzEwMDBGOTU5QzY4NUZBOUM4MDE4MTg2RkZFN0EzQkFENDNBRTQ2Ci06MTBGNzIwMDBDQUYxQ0NEMjZENUNGRjBDOTYwQkU0NjdDRTlBMkMxNjE2Ci06MTBGNzMwMDA0NkM0NkZGQUY5MUMyNDA1RDY3MzQ1QkI4QzM3MzlDQjA4Ci06MTBGNzQwMDAwMjQ1Njg3OUJGQkJFOUI3QUZBNDAwQkQ2NkExOUY4RTMzCi06MTBGNzUwMDA2RkNBQzI2OEY3OTM3Rjk4RDdDOTdERkNBMDA5MDBDOTFBCi06MTBGNzYwMDBDNUQ2RkY1QzU3NzM2OTQyNURCQzNGRjBGRERDNkI2QjM3Ci06MTBGNzcwMDBGMjQ4RUZGNkI3MjNEOEEwOEY2NURENkZENzMxMUUzNTdECi06MTBGNzgwMDBEMEFFODFCRDZCRUI1MkY4Rjc2MUM3QjU1NzhFMDYzQzIyCi06MTBGNzkwMDAyODcyRkNGRjVDRUI0NzdGQTE5RDE5QzY0Qjg0NEY0QjQxCi06MTBGN0EwMDBFQURGMENGRDNCNzRGOTdFQkNGNjRBNzhFMUMxMEE1OUU4Ci06MTBGN0IwMDBCRjY2QUQxRkUwQkJDRjZDRUM4RjUwMkFCRUM3OEExQzYyCi06MTBGN0MwMDBFRkQ2QUM2REVCRDZFNzBERDgwNTYwMjdFQzFBOTEzOTcyCi06MTBGN0QwMDA2MDFGQUM3RTdCNjZGQjg1MzA1NkFBRUI1MzBCRUE1RDVGCi06MTBGN0UwMDBBOUU3NDMxRTg1RUM4RjY0N0UzRDIwRTRDM0RGMkM1N0UwCi06MTBGN0YwMDBGNTQxNzZGNDgxMTEyNDU3N0I2NjIwNEJDMkZFODNFNEU5Ci06MTBGODAwMDA3NjY4Nzk4MEExM0QwN0Y2NDgxN0MyREI3QkZDRTNEMzFECi06MTBGODEwMDAyRjQyN0JFRkVDREYxRjFCQTlFMzdCQjdDRTQ1QkIzNzQ1Ci06MTBGODIwMDA3NDRFMjNCQTBERUQ1MzIzMEFEMEFENERGMDBCRTg3MUExCi06MTBGODMwMDA4QTBCNDg3QTVBRUExMjc0RUEwRTMzOEM3Mzc0MUM1MjlCCi06MTBGODQwMDAyNjg1ODlCRTVBMEFBRTgzQjVDQ0Y3Rjg1RjQyMzhFNDA0Ci06MTBGODUwMDBCRTMyNzlERUJGMUVDMUY3MEZBMUQyRUFBRDI1RDhGRkI3Ci06MTBGODYwMDA2RTg1QTE5REIwQUVGNDQ0RDYwMkRBMzdCRDlCQjUzMEFCCi06MTBGODcwMDBFMUJCMjU1RDBGMTIzRTk3RUMzMzBGODlDNzVGOEZFMDI4Ci06MTBGODgwMDA3MURFRTY2NzlGRjZBM0RDRjgyOEEyOTA0QzY4RDAyMkQwCi06MTBGODkwMDA2QkE3NDBCREExQzE4NDk2MjBBQjhDQ0NCQjkxRTIxQzcwCi06MTBGOEEwMDA3NTE2MzYwNkU2NzcwNEVEMjY4NDYzREYzN0MzNTM3MDlBCi06MTBGOEIwMDBERUYwNEY4MTQ3REIwMjhCNDg5RjZFQUJCMzM5Mjg0RTk5Ci06MTBGOEMwMDA1NDNBRkY1NkMyODMyQkM1OEY3ODU4NTc1QTlEODNFMzBECi06MTBGOEQwMDAzNENGOUFFMUEyRjgwOEQ4NzFEOERFN0NEN0I3QzgyRjA4Ci06MTBGOEUwMDAyNEUxNUFENzY1QUU0NTNCQTcwQUVDQjlBNzAwRUVGQzY4Ci06MTBGOEYwMDA4QzZCNkE3REMwQzcyM0Q1RkRFNUI3M0IzMDVFM0VCNDU3Ci06MTBGOTAwMDAxQ0ZGNkUyNkE3OEIzNjI1MTBGRTQ2MjVGOTQxNTlBMjBECi06MTBGOTEwMDA1RkIzQjA4QkRCOEQ5RjhEQjAxOEUyMkI5RjhERTBGNjJGCi06MTBGOTIwMDBFQ0E1RTFEODc0MjQ5RkMzNUE0RjJBREFEMzIxRTZGRjBECi06MTBGOTMwMDAwNEY3Q0YyQ0UwRDBGN0QwM0E3MTc5RTQ2OUQ1QzkzRjBDCi06MTBGOTQwMDA2NkYzRjREQzdCMjFCNjVGQUFEMUZFODU2OTNEMEZFMDRBCi06MTBGOTUwMDBCOEJENkIzREJFNzU0Q0YwMDFENkVGMkFBMzdENEZCREZGCi06MTBGOTYwMDAyN0E4NzgzMkY5QkM3MDdEN0I5RkJEQUExQ0ZEODhEMjg4Ci06MTBGOTcwMDBFRTVBRkJBODlERjRFNjVBQTc3RTdGMkRDQUQzREY2OTE1Ci06MTBGOTgwMDAzQzFGQzAxNjhGNEQ4NzdFOTZGRTNFODNDNjVENkI4RkYzCi06MTBGOTkwMDBBQ0M1RjUwRkVGNTRBOUJERDgxMTc0NjBCRjRCQkVCOTBCCi06MTBGOUEwMDA2NTIyRDIyQjczNDQ0QTUwOEY5QTNERUQwQ0U5MThCNjZDCi06MTBGOUIwMDAyQkU0MkZCMTc5MDIwQ0UzQzREM0MzRjMzNDA1RjU0NTJFCi06MTBGOUMwMDA5MjNEMzMxREZENTVCNDVGRjE5MEJGQjY1QUYwQzcxODk0Ci06MTBGOUQwMDBBMDgyRDMzNjYyODVCNjNGOEYxOEIwNkY1RUY5RTMxQzA0Ci06MTBGOUUwMDAwRDFGNEFCQkM3NjRFM0ZFRjM5QUJBMTQ4NkY2MkQ1QjdCCi06MTBGOUYwMDAxNTNGNjY0MjdGQkQyN0M2RDAwRTZFRUE1NDY4OUNBNkFFCi06MTBGQTAwMDBEMjI3MkRCODZGQjlBNTkzRjM3NzQ4RUMzMzAwN0YwNTYzCi06MTBGQTEwMDA2ODU3OENGMUE0MEE3QkEwOERGQjM5NThFQ0Q4NDhDNEY4Ci06MTBGQTIwMDBGMzYzN0MzRDE5ODNGNzEyRkNBQjhDQURFMEYyNDBGNDNDCi06MTBGQTMwMDA2NzExNzE4NjI2RTE1NzAyNEQ0OEVEM0U4RkI0NUJFRkFBCi06MTBGQTQwMDAxNkZEQjdGMzUyOENCQjU5ODlGOTU1QzQ2QkI5NjJGMEY2Ci06MTBGQTUwMDA4N0NCRjIyQUYxN0RGQTkxRjgwQ0U0REYzOEQwMTdGQTVGCi06MTBGQTYwMDA5N0I2MkFCMzZFRkQyOUNDNkZFQkE0RjEzRTM0QzFCQzJFCi06MTBGQTcwMDA0MDRFNkEwNTNFMDc1MjA0QkM1Nzc2N0QzMjAzRTk4NjQ0Ci06MTBGQTgwMDBENTMyRTJEN0U2QUU2OTZBOTM4M0M3NkZEMDVFQzg0RUJGCi06MTBGQTkwMDA2REQ5ODlFREQ5Mzc5NzkyN0VDNkY4Qzg2Qzc4RkUzNTU2Ci06MTBGQUEwMDAwRkU3QjMxQzA3RjdENzc5RUYwRTE3NjFCQzMzRkQ0ODlBCi06MTBGQUIwMDBFMEQ2OUZFMkY4MTdBNDkwQkYzNTFCRDZDNjk5NDFFNTYyCi06MTBGQUMwMDAxQUY0NkY3OTU5Rjk4QkE4N0ZCRDMzRjUwQTg0NDdDNkJDCi06MTBGQUQwMDBGNTMwMkUzOEFCOENFNDM4RDUzMzdDOEE3RjE3OTQzN0Q5Ci06MTBGQUUwMDA3OERDMzQwRUVDRUY2QTExNUU3QzFFNzEwQ0M0MTlEMTA3Ci06MTBGQUYwMDA2Rjg3RTM2MjFDMEZDQkRFOUNBODQ2N0U3RUQwRTc3QjNGCi06MTBGQjAwMDA5MDRFQkJBQzJFQzREN0NDQUU5N0RGNDI3RDNCRDNDNjY0Ci06MTBGQjEwMDAzQTI5RUU5QTY0QjdDNEQzQkUxOTQ0M0FFRDNCNzM3QURFCi06MTBGQjIwMDBDNzNEMDhENzc1MDc3RDk0Q0Y5MjY0OEY1QzcxMzlCNzU0Ci06MTBGQjMwMDBDQjNGREE5M0FBMjMzRkVDMTI3MjFCRUM0NzFFN0Y3OTZFCi06MTBGQjQwMDA5Q0VGMjM5M0VEQzhFRkY2QUYyRkI3MjNGQkVCN0Y3NzQ2Ci06MTBGQjUwMDAzQjkyQzMxN0RFQzNGMzI4QTQ3QzBGODk3RDVGNUZDMzhDCi06MTBGQjYwMDBEOTM0RDQ1RjJCM0REMkFFNERDQUY3RDgyREYyM0RCQTcxCi06MTBGQjcwMDA4N0NFRjdEMDc2RjJGODBGODY0MTQ5RUVCQTJEMjJBRTQ1Ci06MTBGQjgwMDBFNUY3Q0U0M0ZGODdCQjg0RTRDMDJCN0I1M0MzNDgzN0U0Ci06MTBGQjkwMDA2NzNCRUQ2NDk3Njk2RTRCMTRFMTZBN0JEQTFBQzEzQ0VFCi06MTBGQkEwMDA4ODM2NDVFMEVCOTA4ODU3NTk0NDFDMkNBMzQ0NDc4MzgyCi06MTBGQkIwMDBFMkEwMjU0MDcyM0ZGQ0E0OTlDN0FCRDIyMjhGRUU4NTBDCi06MTBGQkMwMDA3QUUzRTExQzExQ0Y2MkQ0N0ZGOEQ5NTRDMjc3NjM4QUZCCi06MTBGQkQwMDA5RThFRkQzN0ZFRkIwODg2NzFBQTNFMTgwRkQ3RjkwOUU1Ci06MTBGQkUwMDA3QjcwQkI4N0UyNUFCQzdGRjY4MjU1RTdGMUIzNjg4OTI4Ci06MTBGQkYwMDAxQkYwQjAzM0MyRURCRjkzQTVBNkE4MDVFNkJEOTM4OTVGCi06MTBGQzAwMDAzQzlGRjUzMkFFQzVFN0Q5Qjc2MTI0OEZDQkEwMzE4MkQ2Ci06MTBGQzEwMDBGQkIyQjVEQzVGNTQyRkUzNTU4N0I5MUZBRTVFQzRBNUI4Ci06MTBGQzIwMDA0RUNFNUVGNDA4QTY1OEI0MjkyREI1Qjg0RkZCN0NERDQ2Ci06MTBGQzMwMDAzNEYyOUZERjc5RkYyQzJBRUJENzE4RkRGRDhCRDAzRkU0Ci06MTBGQzQwMDA1RjNDMTAzRjk2N0VGN0Y5Q0M2N0UxRjZGMzgwRkZEMDdBCi06MTBGQzUwMDAwNEY2OENCRTQ2QUI0NkZENTlDNDVDNzdBMzNFRDBDM0M4Ci06MTBGQzYwMDBCMDdBMTc0M0Q5MDYyNTFBRjEwQTYwMTlERUQzRDY3QTdECi06MTBGQzcwMDA1MjcwQkQ1N0I3OTk0ODZGODVEQjRDN0U3QzRGRDJDQjE1Ci06MTBGQzgwMDBBQjFFQUU2N0RGRjU3MEJEMDNBODhFRTAzOEIyNkMzM0YzCi06MTBGQzkwMDA4Qjc4ODNFODZGMDUzMzQ1QjEzNDI5QkM1Q0VERDI2QUJCCi06MTBGQ0EwMDA4N0QyREZCMkJGMzY3MzhCNkQxQURBQ0RGOTI2RjI3N0MxCi06MTBGQ0IwMDA3RjZFRjFENzkxQkYzOEEzODRENkE5Q0REOUIyQTY5NkNECi06MTBGQ0MwMDBCNzEzMkY3RDZFOEYwN0E4RkQzMjhEMUI5NjRDQ0Y0MDRBCi06MTBGQ0QwMDA3OUZBODI4N0M3MTc5MkYxQjZCMERENTg0RjhFQzMyQ0UwCi06MTBGQ0UwMDA4OTE4RUJGNTJDMzgzNkE3OThDNzBEMTI5RkJGMjBGNDYyCi06MTBGQ0YwMDBDNEU3RUI4QTA0QkU3RDE2OTRCQjcyRkUyQkYyMzhERTlECi06MTBGRDAwMDA0Q0Y5QkMxQzk1NUY1RDg3NzQzMDBBRTNDQTQ1NTg3Mjk0Ci06MTBGRDEwMDBCRjJBQ0M4NEUwMUY3NTk5NDcyMUZBNDg4MkI3Q0RDRDIwCi06MTBGRDIwMDBFOTI5QkM5NkZCMjFGRjVBRjg5M0UxRkVEMDkzMjVGODEwCi06MTBGRDMwMDBEOEVGQzVCODY1QkRDQjQyNzFFOEYzRjU5N0E0NjQxQTU2Ci06MTBGRDQwMDBGN0I3RkRGNUJGRkZGRTk2RUZFN0Q3QUEyMkJGQzY0NTdFCi06MTBGRDUwMDA3MjY5QkU4QkNGRTVBNEUyREIxQkM1RTcwRUIwMUY3MDU2Ci06MTBGRDYwMDAxRTZCRDUwQTk0MjNEM0JGRTlBMDc5MzQxRjA2Mzk4MkNDCi06MTBGRDcwMDA3MUFDRTUzRDA1QThENzlCQUI3QjRBMzA1RTkzOEM1RkE5Ci06MTBGRDgwMDA4NDU2OTNGMjBDREU5QkVGODFGRDA4REEwRDZCOENGMTRCCi06MTBGRDkwMDBCOEMxRjE1NTdGNjE2NjI2RUU3QjRFRUU3RjE5RjVENzJGCi06MTBGREEwMDA3RTNCRTkyRkY4QkYxN0FEQzhGRkNGMTY5MTVDOEIzOEFCCi06MTBGREIwMDA4MzYzMzEyRTE0NEE4OUVFRjg3MTExREEzMURDOEU2QUQwCi06MTBGREMwMDBFQUI2RUU0NDNCNzE3RTVCNDI3QzBGRkZCM0RFMThFRjc4Ci06MTBGREQwMDA2MzZCMzJDOEVGQ0UzQThDQ0YxQjFFNEVGQTZFNTBGQ0NFCi06MTBGREUwMDBBRjlERDY2NUIzMjUzODBFRjkxREY0MTBFNTFEOUM1OTVECi06MTBGREYwMDA2MjYyQjhCRUY1QUE2RjExMkFBOTMzNzZBMzdEN0VDNkNBCi06MTBGRTAwMDBDOUQ3NkI0NkE2RDQzRjNFQjJCRkZBRUI4M0Q2RDk1N0NCCi06MTBGRTEwMDA4MkVCNUM2RjYyQzFDNDdFOUE3MDlENjE3RDFCQzUzQUE2Ci06MTBGRTIwMDA5Rjc5RkFFMjEyNUNFNzhGRjc1RjVDODJFQkJDRDlEQzZBCi06MTBGRTMwMDBFRTQ3QkUyOTc1MDdBRjQxRkM5Q0JBMzI0MEY2MTVFNjg1Ci06MTBGRTQwMDBFRjIwMUY5RDJGM0RERTk0NDQ4RjM3RkRFM0U4QjEyRTU4Ci06MTBGRTUwMDAzMTFGMzI1OTNGMzZGNEUzQ0JBODFGM0QxNjNEMEZFNTY1Ci06MTBGRTYwMDBDMTdDOUJGNTJGRUE0OUZDMUJEMjlGNjdCMzkyRkZFMzRECi06MTBGRTcwMDBGMDFGM0ZERDQ4RjkxOEREMkFEOTI3QjJCRkMzNUFCMEI5Ci06MTBGRTgwMDAxOEVEQTNDMzZGNzk3RDYxNjVGOEZFRDM4NUZERTVCNUY3Ci06MTBGRTkwMDBCMTMwRkE1OUU0QkU0MERBOTdDOUYyNzhCOTk4Q0YwMzg1Ci06MTBGRUEwMDA5OUZFREY4Q0Y4MUJFMjNDRDI3RkRDMjBERUIxNDUzRUMwCi06MTBGRUIwMDBFNTc2RUY2RUM1QzdGREM3OURFNDRGNkUzRTM0Q0Y4NTM2Ci06MTBGRUMwMDBGRUUyMEYyMkRDN0ZEQ0ZDNzQzOUY5OEY5NzQ0NUU4QUY2Ci06MTBGRUQwMDA2MjNFMTlFQjU2NUNCODFGNTlCMkZCREQzNENDMDM5MDdGCi06MTBGRUUwMDBGQjVFRDhFN0RFOUY0OUY5MzVDNkZERUYwNzkxOTM2OUMwCi06MTBGRUYwMDA5ODM3MDA3MEJGOEY3MEE3N0FFMjE2QTRGQjY2RDhGRjEwCi06MTBGRjAwMDA2MURFNjBCMzE2M0Y4NkZEMzY3QjE4RDkwNTk1NURDNjY4Ci06MTBGRjEwMDBGREEwOENFRjZFMEI1ODQ4RUU2RUVCNTYyMjI4QUZCMzY3Ci06MTBGRjIwMDAyQ0MxQTIzQ0Q0NkIyQ0NGNzUzQTc1ODBDRjIyOTlGRUEwCi06MTBGRjMwMDAxNzkwN0UwN0UyRUFGRTVENTg5N0ZFQTc5RUFERTk0NDYyCi06MTBGRjQwMDBCRjNENjZFNjc3QTEzQ0RCRUExNEYyNEMyM0Y5RjZEQjExCi06MTBGRjUwMDA4N0REOTE3NTA5NzZDMzZGMjNEQzRFNTgyMkYzQzEzNEQ3Ci06MTBGRjYwMDAxNkQ1NjBCRDE2Q0RGMTFGQzdGNTQ2NzkxRjREOTJGNzI2Ci06MTBGRjcwMDA4OTc1MTlBRkJGODU0NTQ5MkYzNUIxOUVGRUJDQjBDNDA4Ci06MTBGRjgwMDBGNzkyRTNGOTE4MDczN0Y0QzM1QUNBNzVGNDkzRERFNDFFCi06MTBGRjkwMDBGMDUxOUNBQkVCQ0Y1NjYzN0I5OEVGOUI4MTFGOTY1NTNFCi06MTBGRkEwMDAwQ0QwQUY1QzA3NDlCRkNEQzIxRjFENkEzOEIxMEFFOTRBCi06MTBGRkIwMDAzN0Q0QTVCODcwN0ZEREU4RTNGNERCMDhGQjJGQ0M5QkRBCi06MTBGRkMwMDA0REU2NzdENjY5Q0MxMzFEOEVGRjdGRERDRjc3OUNGRjgyCi06MTBGRkQwMDA3RjNEQUM5Q0ZBQzdGODVCREZFRjk3M0Y5Q0VGRTVGQ0Y5Ci06MTBGRkUwMDBBNUZGQkU3RjlFREQwQUU3Q0JBNDc5MjVFRjVCOTNGRERECi06MTBGRkYwMDBFRTcyREY3OUJFRjJGMDhCMjQ3QzdDRjEwRkM2Qzc3MDA1Ci06MDIwMDAwMDIyMDAwREMKLToxMDAwMDAwMEYyMzAyNTZCRThGRDQyNzI1Q0UzQUY5Njg3RkZFMEY4QzMKLToxMDAwMTAwMEM2MjM4NzFFNEEzMzgxQTg1ODUyMTRGNjcyQkJDRTZGOEUKLToxMDAwMjAwMDg4MTdDRjUwMUQ3RTFFMzc1NTc5M0U0NTcyREM1RDlGODcKLToxMDAwMzAwMDIxRTJFRTlDOUY1RjdBNUFBNUY1NkExMkYxRTFBNjQzOTAKLToxMDAwNDAwMDRFMUZCRURBRTA1ODRDRjFEOUU0RjhFOTUyQjY3RjA2MEIKLToxMDAwNTAwMDJFNTE3MjFDQjUxMUY5QjhGOENCRTNBOTE3NjUzOTNEREIKLToxMDAwNjAwMDI0OUY3NDU2ODQ3OTBBQzk3OTVBMkYzOTNFMUQxMTRDNDAKLToxMDAwNzAwMDU4RUZFQTMyRDgwODBDNDFENzM2MkRDQzMyMTI5RTRGQjkKLToxMDAwODAwMENCRTJGNkY0NEIyMjlGQzg2QkUxRTcwNUVFNzNBNkZBQ0MKLToxMDAwOTAwMDcxMUZFMzM1RjE3Q0E3N0M0RjYwN0FENjI0OTRFRjAyODAKLToxMDAwQTAwMDlGQ0ZERUMwNEM4MDk3NDdDQzlEMjQ0RkMyNEQwRTFGODIKLToxMDAwQjAwMENBM0ZFOUM3OTFGREVGMTA3MThCRjNBNUYzNkY2NzE5ODQKLToxMDAwQzAwMEU5QkNCRkZFNEZFMkZCODU5MkJFRkZEQUI4REQxNkMwODkKLToxMDAwRDAwMDhEODExRjE4RDFFRjZCMTg2NzJBMUE0Q0I3QzNGNTMzRkYKLToxMDAwRTAwMDFDRkQyRUNCMEFEQzlFNDU3OEYxNEZBNEZDRTZGMzk0NzAKLToxMDAwRjAwMDJGQTk5NUYxOTNFODJGNjIwN0FDM0FGQTM3NkRFMkZDMkQKLToxMDAxMDAwMDBCNUI5RjIzRjZFQkJFQUE1OTk0OTdDRENGOEZDODczOTQKLToxMDAxMTAwMDM2QzNEOThGMUJGQkY5OUZEQjhGRkRGNUJGOTNGREM4NUQKLToxMDAxMjAwMERDODE3NjlDRTdBOTY5N0VDQUZCNUZFRDA0Rjg3MTVGMEMKLToxMDAxMzAwMEY4QTg3NUM4RjMyQ0YyRENDNTk3Rjk1REY2RjZDM0NEQzcKLToxMDAxNDAwMEU5NkFFRkIwNzBGRjYzRTVFNzkzRkYzNEY5RjlGQjM0MzgKLToxMDAxNTAwMEY0QTMwRURGNEY1OEU0N0JDNkZDMjI5RUM2NzYyNUY4M0EKLToxMDAxNjAwMEI3NDMzMTlFQUZGNzkyODA1NzNFN0Y0NEU4QzVGNDZDQTkKLToxMDAxNzAwMEZGNTE1Q0E3OEY4RkRCNkMyQzFENEM5RTRBMkUxNzlCNkEKLToxMDAxODAwMDAzMEU4QTJGMzQ3N0YyQkM5N0U2RTU4Q0U0NzczM0ZBRDYKLToxMDAxOTAwMDRGQ0JEMEFGMzg4QkExQkQzNzM1MjNGODMzRkM3RUY1N0MKLToxMDAxQTAwMERCOEVCMDlBOEU3RUY3RDkwQ0VEQkJERUUzQkNGRUE5RTgKLToxMDAxQjAwMDNCRjg3MzZDMEYyREVGQTE3ODQ2QzdFQzhGMjhFRkFBQTAKLToxMDAxQzAwMEVBQ0Y5RkFFQUFBRDI0NzhDOThGRTBCMTFBQ0ZBRDdDM0IKLToxMDAxRDAwMDkxQzVFMzBGQjJGQzQzQkYzQ0YxOTM1RkZGRTMwNjlFODIKLToxMDAxRTAwMDlGMURGMkY4NURFODhGOTA3RUYxNTQzRDQ2N0VBNkU2QjUKLToxMDAxRjAwMDAzREM2OEFCNTJGOTdDRDhGN0YzODg5RTlBMEY0QzJCM0UKLToxMDAyMDAwMDQ3RkYyOUVCQjQ5N0EzOUQ1QkY1MkIwN0VERjczRUJFQTcKLToxMDAyMTAwMDJCOTdGMjI0RUEzREMxMEY1MTNFM0EyQjIzNTdBMzVEQTEKLToxMDAyMjAwMDVBMDhFM0EwQkRGQkYxRkVBQkNCMTE2RTI5RkYzNkEzNEMKLToxMDAyMzAwMEZGMUNDNkRGRUMzNEZBQzc5OThERTdEOTJGREQ5QjRGNDEKLToxMDAyNDAwMEZCQ0I2MjQ3RjA1M0VDNkZCMzlEQzMxMURFMjNDRUEzMEIKLToxMDAyNTAwMDA4QkY3OTMyRkY0QkJFQ0Y1NjREMzQ0RUY2Qjc2RDE0MDIKLToxMDAyNjAwMDJGOTc3MjYxQjM5OTA1NkRDNTAzRjJFNDc4OTYyRUYyNkIKLToxMDAyNzAwMDRDNDQ1RTYzRjcyQzlFQTcyMkVBMEU4RjMxQkZGMzgxQjgKLToxMDAyODAwMENDMkI4RjIzM0NDN0IzQjRBRjk2MUZFNjE4OTQyRjQwRjYKLToxMDAyOTAwMEZENjI3RTE4QzUwNTU4OUNGQzJEQTlFN0I4MUQzRENBMTYKLToxMDAyQTAwMDY1MjE3QTcyMDJERjUxOUMwNkU4MDlFREY5NEJFM0IxNTIKLToxMDAyQjAwMEU5Nzg5RTZCNzQ0N0Y0NTJDNEYzRTE3MzI2QzI5MzM2MTcKLToxMDAyQzAwMEVCMzU4QUQzQTQyQjdDQkNFMkY1M0Q2QkM3QTIxRkM2REQKLToxMDAyRDAwMEY1RTY2NUI4QTQ3QUJCQUIxQTUxM0EzNTIzOTA5RjREMjkKLToxMDAyRTAwMEZCOEM5NjUyMUNBRkZBQkZDQzNDOUZGMjUwMkFGOTE3RjgKLToxMDAyRjAwMDNBMEExQTI5OUZCMkY3NkRBQkUxM0M0RTcyMTk2Njc3NDQKLToxMDAzMDAwMDUzRkVFNEE4QUU1RjUwQkNDMDc5NDAxOTMyMkY3NjcyMUMKLToxMDAzMTAwMEI2ODNGMEQ2MUM4RUNEQTAxQzlCNEIzRDI0NjdCNTQzMDUKLToxMDAzMjAwMEJGQTIzOEI1QjY1NjQzMDlDNERBQ0M3RTEzOUU0MzBCNDAKLToxMDAzMzAwMEFGNjBFNEVGMUNEM0UxMzJFMTdBMTU4QUZDOThCRUMzQ0EKLToxMDAzNDAwMDdGOTgxOEE0RkQ4QThDMEY0NDc4N0U5M0I5NjcxNUVFQzgKLToxMDAzNTAwMEMzQjQxNTNEOTc4NzcxM0QwRUI4NERDRDY1RDg1RkJDRDAKLToxMDAzNjAwMDk5RkMyRDg3NTIxOUQyNEY2MTU3RjFERDUzQTE1RUI4MjgKLToxMDAzNzAwMEM2NDVGMUIwQkVFNzZFMjkyNEZGMkFDQzczQ0MxMEYzM0EKLToxMDAzODAwMDJDQ0EzNkYzRkUwRkE1OUE1MDlGNjk5Qjk4MEY0N0Q1NEMKLToxMDAzOTAwMERDNTlENTA0Rjc4MzUwODc3RTQ2OEEzQzU1MTkzRjQ1ODIKLToxMDAzQTAwMDNGMTRFQUE5RjRFQ0UwRDczMDNGQjZGRjFDRDJCMjE0RjgKLToxMDAzQjAwMDdFMEU0OUUzRkUxMkU3QjJCNzFGQzdGMzNEM0IyQ0ZDQUMKLToxMDAzQzAwMDlDRTc5MUMzMTM2NjkzREY2RkFEQTZFMDNBN0NFRUU2M0YKLToxMDAzRDAwMEY5OTQzNzY2OUIwQ0U3NDIwNkYwN0Y4NEYyNTY0NzFEN0UKLToxMDAzRTAwMEZBMDVENzZCMzAxNkY2QUY5OTM5QkQ2ODZCM0QzQkQxMzYKLToxMDAzRjAwMEJGQjgzODJENDg3OUJBOTdCNTQ1NTU4QTlGQjk0RTNENTMKLToxMDA0MDAwMDUwQUIyN0VDNzNCNjcwM0REM0JDOEZFRkNCOTNGNzM1NzEKLToxMDA0MTAwMDVGQTY1RjZFQ0IzNkRBMkRGREY1N0Y5MkRERjI4M0ZFQUYKLToxMDA0MjAwMEYxRkZDNkZEMEEzM0VFRjM5MkVEOTdFNDdEREQyMDNCNEMKLToxMDA0MzAwMDNDQTlCRkUxRUMxODk5OEY1MjNEMzAwRUI3QTc5REQyNzEKLToxMDA0NDAwMDRFMEExQkYyNzVBQTFERTI3Q0ExQ0REOEZGRTUyMzVDMDQKLToxMDA0NTAwMDM0NUY5OUJGOTNCNTUyNUY4MTc5RkFGMTFGMzBGMkQ3QkIKLToxMDA0NjAwMEM5M0NBMjcwMzVDRkY3MDk5QjZDNzRFRUQwQ0JEQTI5NkEKLToxMDA0NzAwMDdGNjgyNDhCMkEwQUY5RDM3QUU4N0M2RDM2RTYxMUMxQUQKLToxMDA0ODAwMDc3RUJCMjQ3NTFCRkRCOTk2RjhENEFGMjUyNTcxMDZFMkUKLToxMDA0OTAwMDNCRTY5RjUwQkU2QTY0RUIyMjFDRTczQTA3OEQ2M0M3QjgKLToxMDA0QTAwMEZDOTM4QjMwODVDMEJGMTVFNUVCRjQwNjFFNUZDODA1RDUKLToxMDA0QjAwMDdEOENGNDlCM0I5QUQzQTFCRDhFRTdBMUM4M0MxMzk5RDgKLToxMDA0QzAwMDE3MjJGMTUwMkRGMDlCM0I3NjUxMTFDQUMxQjU0QUYwNkQKLToxMDA0RDAwMDUxNzFBRTk5Q0JGRjBENEU3MTVFMTlFQzZCQ0ZDMDc5QTcKLToxMDA0RTAwMEU0M0VDNkZCMEYzNzk4Rjg3OTY0MzdBRjc3OENEMUY5QzMKLToxMDA0RjAwMDc5QTAyRkY4MzlCQjhFNzI5RTc3MzIyODNGMjUwOUFGM0QKLToxMDA1MDAwMDMyM0ZFNUM5QjRFMDExRTQ5N0U0RjNDQjkyNEUxMkQ2NDIKLToxMDA1MTAwMDhGQ0U0NzZGM0JDNEVERkFFQTA2MEJDREEzNkZDOTM1MEEKLToxMDA1MjAwMEU0OTdFQzVCNjI2MkE4RkZBQkJCQUQ5Q0VFOTJDNkRCQ0UKLToxMDA1MzAwMDU2Njc2MTUxRUM1NzhCRDg1MTdFQ0FGNUZGMzJCQjE2MTYKLToxMDA1NDAwMEQ2QjUxNEZEQkU0NzVBNkIyRjNBMDUzODNFREExQUEwQ0QKLToxMDA1NTAwMEIyQ0ZBRTc0QUExN0QyRjlEMkI5MjhBOTlFRDhGMkY5QUYKLToxMDA1NjAwMEI1NUEwRUU2REJDNDBCMTQyMDk5RTdCNzdFMzQ5M0VBNDQKLToxMDA1NzAwMDk5RjE3N0IwRkVFQTE2Q0ZENzM0OTBDMzdENjNFMjNCQTIKLToxMDA1ODAwMDE0NzhGRkZGNzk3RkM0REI5MTE2NzMxOTdCRjdBMTg3N0QKLToxMDA1OTAwMDY2ODYxRDVGNDFERkZEOTEyNUU3NzE5QzQxQkREM0M0OTcKLToxMDA1QTAwMDdBNTZDNUM4NUYyNEY0NUQyNTk3ODc1RTg3ODVFQzI1NUMKLToxMDA1QjAwMEFGQzgzRjY1MzUyMjFGMTUyMzNCNTA1Rjk5NTM0RTcxREQKLToxMDA1QzAwMDdCMDdEMzBGQzRCMDNEOEY5RkNGODI3NkEyRkY5NTYzODgKLToxMDA1RDAwMEI4N0ZEQTI2RTg4MkU1NDlCRjU0NEYxOEU1REJDQTIyMjYKLToxMDA1RTAwMDM3N0RERjJGOEYwRjU4MjNEQzNGQzZDNzdGRTNFOTBCMzIKLToxMDA1RjAwMDI4QkUyNUYzNkExOTczRTVDRkI5ODBGMjZDMENGNUZCQzAKLToxMDA2MDAwMEVDRTIxQ0E2RTZDQUM3NzNFQzJCQ0RDMkVFMTVGNTM2OUMKLToxMDA2MTAwMDY3MzBDNThCRjM0NDNFMDQ3QkVFOEQyQkJGNUI4NjdDM0QKLToxMDA2MjAwMDc0RTZFMEY3NDdBMzVDQkJDQTAyRkI4MjIxRTREOEVFODQKLToxMDA2MzAwMDFDMkVDN0ZBQ0M4RTM1MEE3QzU3RTMwQzhFRjBDMkZBMUEKLToxMDA2NDAwMEJGOTUzQTc3MDYxRTI5QTgxQjMxQ0Q4MjQ3MTc1OEY4NjcKLToxMDA2NTAwMDUxMTVGMTlBMjlFOEM0M0Q4N0MzRTdBRTA5Mjg5ODc3NzgKLToxMDA2NjAwMEJBRDJDRUM3Q0QwQzZBN0UzQUY3MTA5Q0EzNUMwNzcwNTUKLToxMDA2NzAwMEFGNTRCOEJDODY4RkQyQzk4RTJBRDVEM0YxMUM2MUEzRTIKLToxMDA2ODAwMDM4RDdBQTBBQjk3MTQ5RTcyNjE1RURGNTlGQjdCRTM1RTcKLToxMDA2OTAwMDU1RDMwNkUwRkI4NTg4ODdGRkEyQzg3ODNFQTJEQ0NCNTUKLToxMDA2QTAwMEVENjI1OUNFNTZGNTBCOTBGRTU2QURGMEJDMzZGMzEyMDYKLToxMDA2QjAwMDdDQ0VFOUY4Q0FCNDY1OTU5OEE3N0Q1NTZBNEIyNUZBQjIKLToxMDA2QzAwMDY5MDczRDRGODdFNzY1MDk3NTJCN0ZBRkQxMTYyRkMwQUUKLToxMDA2RDAwMDczRTYwQkVEQzE0OTg4OEZDRkU3QkQ3QjI3Q0E4NzNCMDcKLToxMDA2RTAwMDczREY3ODA3RjMyNERFMzAwQjM5OTFBRjg4RjVFRTk4OEQKLToxMDA2RjAwMDlFMDZFQjc5QUNEODJERjIzQzZDNDQwRkM3QzY3MjNGMTYKLToxMDA3MDAwMDY0N0YxRURCMzg4NUYyRkE2NkNFRTFFNzQ5QUY2NUIxNUEKLToxMDA3MTAwMEI2MUVGODlFOUMxNUQwM0U2MzcyMTFEOTkxMzM0NURFMEEKLToxMDA3MjAwMEM1OENCNzAyNjlFODE3OTg3MTQzNUM0MzM5M0E5QzVEMDAKLToxMDA3MzAwMDc0OTVEN0FDRjcyNEYwQzNENUJBQjE3RTZEQTlCMUZFREMKLToxMDA3NDAwMDM1OUZCMUZFOERDOTdGMUE5QjU4N0ZEOUVFOUY4REY0REUKLToxMDA3NTAwMEY0QkNDMkYzM0VDMzk3MzAxN0QxQkQ0NzA5QTNGRDMyQTUKLToxMDA3NjAwMEUxOTk1QzcxMEU5N0U3MjdGRUFCRDg3NzNEMzM5OTUxM0QKLToxMDA3NzAwMDdCRDYzRURCMkUzQzM3MjBGREQ3QUE2ODlGRTA2NUI2Q0UKLToxMDA3ODAwMEMyMEM3RUVGMDNFQUJCQjgyMkYyMUMzRDE0RDM2MTA3MTIKLToxMDA3OTAwMDZGNzU3MTNGMkVCQzZCODE3RTBFQ0VEMzg5M0ZBQTQ2MEEKLToxMDA3QTAwMERBNTI5MDRFQjIxQzI2NzYzOUYyNTJBNThERUM5QTIzN0QKLToxMDA3QjAwMDgyRUVFNEI5RUEyQThEMDUzMENGMDI4NjlDODNFNTFCRTAKLToxMDA3QzAwMDY2RDc4QkU4QTcwRTdGQzgxOEU3REI2OTFBRTU1QjhBNTYKLToxMDA3RDAwMDMxMTg1QjQxRjU4NzA0NUQxRjkxRjJGRjA3OUE1ODU3NjYKLToxMDA3RTAwMEUwNDAxOEVGRUNGQTVDMUU4NzJFNjU3NDVFRkU2QzY1QzcKLToxMDA3RjAwMDA5RDUyNURENEJGRTAxQUUxRThEQTE0MTQ1RjQyN0U5NEIKLToxMDA4MDAwMEY5QTc0RTBCRDE4MzdBQkY0OUY4QkIzNDEzMDI1OUVBREEKLToxMDA4MTAwMDkyNzA4MEI4Qzk0MjNEQzlDOEZFOTU3MUJBN0M5QjZDODQKLToxMDA4MjAwMEQ3RkNGODdFMEU5Mzc1N0VERTJCNEJENEExMjk2QUFBRTUKLToxMDA4MzAwMDQwRkRGQ0YyRUY0ODdGM0I3QzQxOUM4NzI1Q0Q0NkU3OUQKLToxMDA4NDAwMDkzODZFM0EzNUQ4MjdGNzYyNUYxOTE0QkJCOUFGOEU4MEUKLToxMDA4NTAwMEE3Q0U5MjNCMDhFRTZCOUMyRUQ0QUZBNTMwOTdCQTBDNzYKLToxMDA4NjAwMDJBRkQyMzJBRjAzQkNFNEY2QThBNEY0N0JFRjk2NkVEMzgKLToxMDA4NzAwMEYxQTk1QTgyOUM4NkVGOUJGOEY3QTlDNkVGQkRGMDdEREYKLToxMDA4ODAwMDQ2QzJGNzY5RjA3REQ5RTBFRjc3M0I2RDUxRDM0NEVDNzgKLToxMDA4OTAwMEE3NEFFRjIxN0QxOEE1Qzk1RTIzRTZBRDY2RjFFRkFFNEMKLToxMDA4QTAwMDExNzlCMUEzRDNFMDdERDQ1QkE1QzYzQzEzMzZEOTY3REIKLToxMDA4QjAwMEEzRkNFNEE0QkM5MkFCOTRFNTM5Qzg1NzU3REI5QUJBQzEKLToxMDA4QzAwMDdCQTBCRjk3QzUzQTVFNjUwQTdFRTY4MkU3MkZDRjJERjMKLToxMDA4RDAwMDM5OEFGQzU3NkI4QjY4OThENzc3MkQ4QkFFQzJDNUVERTQKLToxMDA4RTAwMDlCMTY3Q0M0NUQ0Q0YyRTE1OUU0OTM2NjM1MzgzNjAzQkYKLToxMDA4RjAwMEVBNjdDQ0VEQTM2RjJEMjJGRTc5Q0U5QjM5MTg1RTQ5QjUKLToxMDA5MDAwMDI3MTI1RUE0MTdBNDNGNDkyRkM5NzBGN0FGRTdENzNCNjIKLToxMDA5MTAwMDI5MTE2RjNCRDg1MTU4NEFCQjhBQjExNjlFNzdBREU3NzMKLToxMDA5MjAwMDBGQ0MwQjg4Njg4NkFENjUzNERBMzUyRjJGMDk5M0RDNDAKLToxMDA5MzAwMEI4Q0FGRDAwRTU2NUJEOUMxQkZDNEY5NDY3NzUxNzdFMkEKLToxMDA5NDAwMDUyQTBFMUNCREU3OTYzNzFERjAwRjBDNkZFMzdFMTk1OUUKLToxMDA5NTAwMEY2RTNBMEJDRTMwRjJEODZCQ0UzRTFGODRDOEUxQjQyMEUKLToxMDA5NjAwMEJCNTBDNUZDRTQ5RDk0NDcxQzlBRTNGMEUxNzk5MTEwREIKLToxMDA5NzAwMEU2QzE1NjUyRkM4QUVDQzJFNzE0NkU2Rjg3MTU5QkIwMzUKLToxMDA5ODAwMEUzQ0UzNzNGOTk3MTdCQUZBOURGREUzM0U0RDc3Nzk0QUQKLToxMDA5OTAwMDczQjgzQjZFRDVFNUZEMzVEQzVFOUNDN0I4M0QzOTRCODEKLToxMDA5QTAwMEI0MkY3NDUxQkJDQ0MzRUZEOEM5RkQ4NjFENEY4RkQ1NzIKLToxMDA5QjAwMEIxNUZCMDAzQzk3RTYwRTlDMkNFMkMzMkRFOUI4MzdGN0IKLToxMDA5QzAwMDRBRDY0MERFRjg2NjMzQjc1RkI3OTk3QzU1OTRFNzYyNDQKLToxMDA5RDAwMEUxRjdFMjlDOTFGRThDMzE3Q0ZDNjRGRjYyNkU4RTYyREEKLToxMDA5RTAwMDg4NEZGN0Q3RkY0RUZFQzU1Mjc3MzAzRjA3RkE1QjU4NjYKLToxMDA5RjAwMEU2MkY1MDRDMDgxN0Y3MzMwMjdEM0UxQzYzOThGRUQ2NTUKLToxMDBBMDAwMDMyMUFFREZFQUI1OUNCOUJBNjYyQTJDRkUyMUNBNENGNUIKLToxMDBBMTAwMDA5NDA5RkM1MDZGQTFDOUQ5M0M5RTUyNEMyMjVFOUIzODgKLToxMDBBMjAwMDlGMkU0QjkzRjNDQTgyMTc2MDNGMURFRUNFNUYzNUEzMTYKLToxMDBBMzAwMEJEREM2REY1RjFCQzVBOUUyNzk4MkMwNzEyRTA1OUEwMzkKLToxMDBBNDAwMDcxNzgzQ0FBNEFGMDRDQzI3MTkzRTEzOTFGM0U0OUE0MjcKLToxMDBBNTAwMENGNkNDNkY5NjEzODdFQzlENjU4RDg1OTMxQzAyRjJGMEUKLToxMDBBNjAwMERCODMzNTA4N0YzRkRGQUNFMkZCQTM0MTcwQUIwRUEyMTYKLToxMDBBNzAwMEFGRUI2RkU0NzE5NDUwMkFENzQ3MTg0RkM5ODFGMTY3RTMKLToxMDBBODAwMDg5RjFBRjVGQ0JFOUYwRkE3RkIxMTBERDAyRjg1MTg0NTQKLToxMDBBOTAwMDdGQjY2ODlGRDVERDQ0Nzk1NEIzNkJDQzI3MTJFRDAwNDcKLToxMDBBQTAwMDE5QjdBOTEzRUZDREYxOTQ5QjkxMDVFNkNDMzRDNjRCNTEKLToxMDBBQjAwMEVBNkVFMkYxOUFFQjU4OEIxOUUxQkQ3RThFQjE5RjNBNTYKLToxMDBBQzAwMEI2RkUxM0NDMEJBQkJCQzlGODNDOThEMzFGNjcxOThCOTAKLToxMDBBRDAwMDcxOTZBM0MyOEZEMDA3RkM4MkZDRjREM0NDQzUwRkRGODQKLToxMDBBRTAwMDBBRjQzQkY2ODc2NTE1RTg3N0JBMzI2QkM5RUU0RDUwQ0MKLToxMDBBRjAwMEZGRjFCNkYxNTRGRjY5RDZCN0JGRjMwNkI2RUYyOEExRjAKLToxMDBCMDAwMDdBMEQyNkI5RTEzRTA4RjkxMUY1NERENThERDcxNEMxRkUKLToxMDBCMTAwMEI4NDdFREEyREY1QkY5MzkwMjZGNEFCMDYzMTZCQ0U3NTQKLToxMDBCMjAwMDlEMzg4QUYyMjE2Qjg0QkNFOTVCQzhEQkFGQkREMEM5QkMKLToxMDBCMzAwMDUzNUU2RkQ2QzlERjU4OTNDMkVGRjU3OUFERkNCRjJCN0EKLToxMDBCNDAwMDMwM0ZCNzY2OTRBODU3M0MzRjFFRUI0Nzk1NEZFODFFRDEKLToxMDBCNTAwMDgwREUyNjg3ODZGODZGQ0VFNTdFREEwOUE1NEE3NDFDMEEKLToxMDBCNjAwMEUwQTUyNjQzRjRERkM0RTczNUIzRTJEMTVDRTQ4RjlBMTUKLToxMDBCNzAwMDZBREVDRjA0REZCNEI1QzVGODlFRTkyQ0Q1N0I3MzZENzIKLToxMDBCODAwMDY5MjgwRjI1OUZCNUU3NzBGRDJDRURBOTgwRTBGQjY3NzQKLToxMDBCOTAwMEZDRUZCNjhEODA3RTAzMzZDNTg3NTMwQzRDN0U5N0RGMDUKLToxMDBCQTAwMDVGRTVFMEU3Q0IwMkZFMjIwREZEQkNEM0ZEM0M3RkIzNDkKLToxMDBCQjAwMERBQjYyMjA3RjdFNzVGMEY1QTJBNzE1RTJFNUJGOTUxMEEKLToxMDBCQzAwMEI0NkZEMjI3NEY5QjQ0RjlCRTM2NjY0NjNEMDc3NERGQUIKLToxMDBCRDAwMDQxN0M3OEYxMjcwNTY5NDg2QzBFMjNERDRCQkE5QTI1RDQKLToxMDBCRTAwMEU5QkRDNjQ4RDdDMEFGREI3MjMyQkY1QzVFMUJFOERBMzYKLToxMDBCRjAwMDNFNDBEN0MzRDlCOTAwRDc4RjA5QUVBOTQ2RkRENTNGMkUKLToxMDBDMDAwMDRFMTI1RjI2OEYzQjlDQkNDMEJGNDQ3OTNBMDA1RjI3RTEKLToxMDBDMTAwMEYxNUYxRTY2QzUxNTIzN0ZCNjRCRkVFQzQyMzgyQ0E2NEQKLToxMDBDMjAwMDE4OURCMzI5NTQ3Q0UzRTk2MEVBMzA3Njg2ODQyRjFGNEYKLToxMDBDMzAwMDdEQUUxNTgzRTFDMjNGNEREQTdGRkNDRjgzRkJGMjNDRjIKLToxMDBDNDAwMEQxMEVERkY5NTlDNjAwNUMzMEZFMkIyNDBGNTc3MTc4QTYKLToxMDBDNTAwMEI2MkIyRDVDQkUwODdCNUNFRUU3OUJFNTdDQkI4Q0YzODIKLToxMDBDNjAwMEFENEFFMUU3REVCREU4NzcyMURGN0JGOUY4N0VCOENGNUEKLToxMDBDNzAwMDYzMURFNDdDNDI0MjZGQ0ZCMTA1OUMxNjk4REI3NUVFOTQKLToxMDBDODAwMDdBQTI5RjFCNThGODY5QjQ4Rjk2Mzk4M0ZGMTdGMTc0QzUKLToxMDBDOTAwMEM0MTQzRTg0RkI5Qzg1Q0M0RkYxNTdBMDhGNzc3MjEyMTEKLToxMDBDQTAwMEVDMEQwOTZGMzI5RTlBODc5MUE3QzlGMzQ5QzZDRkMwNTAKLToxMDBDQjAwMEJBQzVDOEJFOTNFN0Q4RkFFNzdCOUVGMzk0NzY4OUM3OTYKLToxMDBDQzAwMDYyRjQ3NzY1MDhGRjU0ODZGMDQ3MjE0NUExN0U5RUM5RUUKLToxMDBDRDAwMDUyN0NCODJGOThFRTUzQzhCRTk4Qzk2QzI0OTc2N0Q2M0IKLToxMDBDRTAwMDcyN0Q5RUUxRTBGNjg3RDRGQkMzRjFDNzE1OTczMzkyN0UKLToxMDBDRjAwMDU3MzMxQjk5MzgzN0M3RTc5NTRDODdEOUFDRTcwRTJDOEIKLToxMDBEMDAwMDY3REFGNEFEMEI5MEVGRDE0RUQxMDdFMDlGRTlFMDdFQkEKLToxMDBEMTAwMEVDRUM1QzIxM0Y1OENGMjRENEYzRkRGNTQxN0FCRTY3NUIKLToxMDBEMjAwMDEyQ0E5RkU0RkJDOTY2OUVFM0ZFRDI4QzczOENDQTk5RkIKLToxMDBEMzAwMEJFNzcyN0ExOUVDRkE4RUQ5OTg0NzJDQ0U5RjI3QjczOTAKLToxMDBENDAwMDI3MEREQzFGOTg4Q0M3RDFCOTI2MTk4NzNCMkZGQTRDODkKLToxMDBENTAwMEU2MUYxOTNGNkI3MzA2QzdFMjM4RDJDRjcxNDY4OTU1M0IKLToxMDBENjAwMEUxNEIxNTFFOTdFODNGNTg4NDc0RUM3NjE1NEQ0M0ZGMTAKLToxMDBENzAwMEM1MUMxQkU4MjMxOEJBQ0IxNUJDMzAxN0U5RUQ4RjAwNTIKLToxMDBEODAwMDBGNkUwRUYxNTVDMEUzNzUzNUMxN0IzNDNFMkNFMUUxQTkKLToxMDBEOTAwMDM2ODE4NzJCODU1RTNERkJCMDRBRjE4OTFBN0ZFOTQzOTYKLToxMDBEQTAwMDE4NDIwOEJENjI2NjExRTI1NzNGRTk0NTc5QkZEODU5M0MKLToxMDBEQjAwMDMwQTBBMkY4RkU2MzRFQjIzMzE2QkY1QTRGRjE5NUIxODAKLToxMDBEQzAwMDVCNEM0QzRGRDA5M0UzMjIyOTg2N0IzMjI2RUNDQjMwMTAKLToxMDBERDAwMEQ0MkZFOENDMzVCQzdGNjFENzI4NDM3Qjc5NzRCQ0ExODQKLToxMDBERTAwMEZEQTI1NzJBMENGNTQ5QjEyOTg2RjcyRjdFQUJEQTUwQzAKLToxMDBERjAwMEJGQTRFNzFBQzNGQjUzM0Y5ODZEQTg4M0M2RDA3MERFMkIKLToxMDBFMDAwMDdCOUY1NUQ4MzY5OEY3NjVGMTZGMTlCRUZGQ0RCNjE5OUYKLToxMDBFMTAwMEFGNjBCQ0YzQTREOEY3QjJCMDNGNTYwQTc4NTgyMEU5QzcKLToxMDBFMjAwMEY2REM3QzYzN0Y1MTI1QUE1NDIxREZGM0JGMDVFQjc5MDMKLToxMDBFMzAwMEJFRjYzNEMwNUM2MkJGMEJEQjhERjZDNEUyMkRDNjdBMTEKLToxMDBFNDAwMDQzRjdBNjU1MjgxQjA3RTc3OUI0NTRFMzU1MzlDOTc5MDgKLToxMDBFNTAwMDFFMzVBRTc5MjZBNENGNTAyRUQ4MTdFMzEwMTFFQzYyQzAKLToxMDBFNjAwMENDMzMxQjhFQ0ZCRjZDRkQ0QkQ4RTgyRjVCN0ZGRUZFRDMKLToxMDBFNzAwMDE2MEJEOUY1OEI1RjdEQUEyQTBBOEZBQzVFRTNGQURCRUQKLToxMDBFODAwMDc1RTNGQUE3OTYxQUQ3REZFOTMzQUU3RkZBNjRFM0ZBN0YKLToxMDBFOTAwMEJCRkRDNkY1MUY1MTZCNUNGRkNDODA3MUZEQjNFQjhDQzUKLToxMDBFQTAwMEVCOUYxMzM0QUVGRkM4MDZFM0ZBRTdCNzE4RDdCQjcwNjEKLToxMDBFQjAwMDk5NzEzRDhCQzI0QjBERURDOUVCMkZFNTY1RjE5QURCQzYKLToxMDBFQzAwMDhDRUYwMTdBNEQwOTc0MjBFOTY4NDFBMDgxRjI3N0M2NjAKLToxMDBFRDAwMEI0N0ZDRjMwNEUzMjNEQzBCRUQxNDRGN0JGQzEzRTZFNkQKLToxMDBFRTAwMDlCNzJGRUY0MDFEMjhBRkNCREM5RjRGMTZGQjlDMkVFNjcKLToxMDBFRjAwMDE0NzQwMUZBQTgxM0U1MEFEODE3NEY2MTU5Mzc1NkQ4NjgKLToxMDBGMDAwMEZCODFBMUVEMEIyOUJGMTJGNTc5RTJCRTc4MzhCOTM2MjUKLToxMDBGMTAwMDQ4NEY4OTdERjJCMDdBMEFGN0M5RjY4MTdERjI3MEY0MDQKLToxMDBGMjAwMDdCMUNCMzhGQzg4RTVBNEY3RUE1MUI1RDFDOEU0RkYxNjQKLToxMDBGMzAwMEQxMjVFOENGN0Q4MkY0RjI3MTAwNzAzMkMwN0IxQ0U3Q0UKLToxMDBGNDAwMDAzRTMxRjRGOTk0MEZFOEQ2RkIzMjhEOUVERkY4MjE5M0YKLToxMDBGNTAwMDk2MzBEOENEOThBOEFERTIzRDRGM0E5NUY1NDI2RjJGMjcKLToxMDBGNjAwMDE0RkU4Rjg1RjZFMDVCQjlEQ0VGNTE5ODg1RTNFNkM1QUEKLToxMDBGNzAwMEU4QkMxNDdCNkRDNDc5REQyMzcxMDJFMzA4MjA3ODRGNEYKLToxMDBGODAwMDYxMUMwMUNBNUUzQkE3OUJEMzUyQUVGODk5RUU0OUMwRTMKLToxMDBGOTAwMEU3RkNFOTRBMjlEOUI1NkEwQUU1M0RDREJGNDEyMUZEMDMKLToxMDBGQTAwMDM0RkY3Rjc4MTkxN0ZBMkNCOTVDQjk0Q0UyQjM1REQ4REQKLToxMDBGQjAwMDAzREMyRTQ4QzdDMzlBMTQ3NzYyNDEwN0UxQ0RFN0MyMkMKLToxMDBGQzAwMDc1ODZGRUI4MUZGRjQ3RkM3Q0NERTMwQUQzMjY2N0QwQTkKLToxMDBGRDAwMDMxMzM1QTY3NUM2RjNDMEZBNURBMzg5QzhGOUI5OTBEQjMKLToxMDBGRTAwMEYxMzk4MTA1QzkwRUJDNTcwM0QxQzZGQjFCQ0ZGQjdCNzIKLToxMDBGRjAwMDYzMTRGQUQzNTRGNUZGN0NBRDA2RTNDRjM4MkVGQTlGODUKLToxMDEwMDAwMDFEM0U4NkZFNjZENUVCNjNFOEJGMUFGNEZDQzAxNEJBMzkKLToxMDEwMTAwMDI0QTNCRkNFRjg3QkY4ODc3ODkxN0VDMjNDNDEyRkJCREEKLToxMDEwMjAwMDlEOENGQkJEOTJGQzg2MjM1NTkwQzA5OEJGNjNFNkU3N0MKLToxMDEwMzAwMEMzQkREQTE2QkU5RjNDRTY1QjYzNEQ5ODM3NjM2NjM3RTcKLToxMDEwNDAwMDlFRTdGQjMyN0IwOEYzNkQ0RjI3RTRDN0MzQkEwQzc5RTgKLToxMDEwNTAwMDhGRTlCNDNDQUVFRjU3QjYzNjVDODY3MUEyNUUxMTA3REQKLToxMDEwNjAwMEJCQTczNTc4MTlBRUI3QUFGOTI4MkYwRUVGNTc3MjI3MEMKLToxMDEwNzAwMDdDNkZGMTQwN0IwMjlGNkE4RTA2NDNEREVDMDgxMDVFQjgKLToxMDEwODAwMDU2QjVCNjEwREQ5OEM1M0Q1MEFCRjM2RTczMDUxM0ZDMzUKLToxMDEwOTAwMDEyMTc4RTE0RjY4NjJEQ0M1QzU5NEM5OEM2RjBGN0MxMDkKLToxMDEwQTAwMDc0ODZGMzU1NUREQUU5QzQ3REE4RDUwQkZEMjVDQTJCRkUKLToxMDEwQjAwMEFEOTAyNUZBQUREN0I0QjYxMERDQUI5NDYwMTAzQkIzNUQKLToxMDEwQzAwMDhFNjY1MTNCRTBEQkFBRTE1OTU0NzhCRUY1MkE5MjY3NUYKLToxMDEwRDAwMDE2RTc2RDNFQkNGNzY3MzhGQzU5QkREQUU3ODk3MkM4ODAKLToxMDEwRTAwMDNGRDIyODg3RUU2RkI1NUQ4RUY4NUFEOUJBOENDNjkzNzkKLToxMDEwRjAwMDc4NkI2Rjc1NUQ4RUY1OERBRDVFRDFCRTgyREE0REI1QzQKLToxMDExMDAwMEJBODJGNDcxMUE2ODIxODY3MTE2QURDNzg5NzEzREIwMzMKLToxMDExMTAwMDMzMTlDNjAzQ0Q1RTVCMDQ5OUM4RUFFMUYwQjJBMzA1QkEKLToxMDExMjAwMDQ0MUY3MzVEMUMwNkY0OERFNTAzN0RCQ0IzQ0M0Q0ZCMDIKLToxMDExMzAwMEQzREJGMzFERjRGRUVEQUY4Rjc5RDEwRjdDNjAwMTFFODAKLToxMDExNDAwMDUxRkY4QUY5RjQ4RjIzRjA2NzExNzI4ODY5QzEwMEYyQTgKLToxMDExNTAwMDk1MjU1NzIzN0Y3NDg2NkIzNkFERTNERkRBOUZDNEJCREEKLToxMDExNjAwMEM1Q0UyODFGRDQ5MkVGMjBCQkVCN0NFMTBDOEQxNEY3ODkKLToxMDExNzAwMDUwMDlCQzI3RTMwRkYwNDQ3MkY0NzY4MUE3REJFRkUyNUQKLToxMDExODAwMDdFQkVEQkVGNjA5NEM3Q0U5NkMxNUZENTAwNUQ4RDE0NDcKLToxMDExOTAwMEYyMjU5QjA1QTg2QzZGMDVDMTUyODJFQjY1NjM0MTBCN0MKLToxMDExQTAwMEU4NzVENjQ5MkZEQkQxQkY4M0VEN0VDRDhEQTFFQTREMDkKLToxMDExQjAwMDM1OUU1OTU4NkU5QzdDQUExREQ5RjFCRTRCM0Y4QjYxNjAKLToxMDExQzAwMDg5QkU3NEM0OTdBQjgxNDVGMENDMUZDNThFM0Q3ODFEOTgKLToxMDExRDAwMDM1QUZBNzg5RjZCNDNBNUU0RjE3RURFOTAxNUVDRkY3NTgKLToxMDExRTAwMDNGQTlENDIwNjA0OUYxOTc3QzQ3QzZENUEzNTFCRTJEQjUKLToxMDExRjAwMDYwRkM3Q0IyQjhFNzYwM0IxM0YyQzI5MTMxQUIwNkRCMTYKLToxMDEyMDAwMDZGNjI3NEJFNDBCNkZGNTBCNEU3Mzg0RUFDMjk0NjM5MjEKLToxMDEyMTAwMDNDQzdGOEZENTY4MTg3NkNDNzg5RjZFOTE0OUYzMUI2NDMKLToxMDEyMjAwMENCRjg0QUE2RTNFQzJCRjQ3RDk5QjFGRDQxRjFCREQzOTcKLToxMDEyMzAwMDcxMzYzNjFEREI0NzFCQzdERjIwREE1MzFEM0NFRjA4MzQKLToxMDEyNDAwMEM0MjEzRjQ3MkZEQUVGMTVFRDc2NkNDN0YxNEI4REVEREEKLToxMDEyNTAwMDZCQzVGODJCOTUwMEFENDMzRjlGODlGOEU0OEU1NjlERjIKLToxMDEyNjAwMEVBQzk3Q0Y2RUFDODBDN0U4RTU5RjA5OTZCMTkxQkYyMUMKLToxMDEyNzAwMERDRkNBQjIzNzlCRTRDOUFERUUzRjcwRjIxMEY2NTdCRDQKLToxMDEyODAwMDg2NEJBM0I4QUZFQUI1MTAxRDU5MUQ0MjhFMDgzRUVDM0YKLToxMDEyOTAwMDk3MjM0QThCOEYxMzE3Rjc5NzdGMTkzRDAzRTE3RThFQjMKLToxMDEyQTAwMEYyQUMwMEZFOTA5RUYzQkU2MzYyQzEwNDc5OTZEQjk4QjcKLToxMDEyQjAwMEMyODIwOUVGN0IxNzY0MThFQTU5MzdFNTFBREVGN0NDQ0EKLToxMDEyQzAwMDE5NjU2ODc3NTQ4RTM3QjRCMzU4M0VGMUM3NkQ4MkFFNTYKLToxMDEyRDAwMDUyQ0EyQTBDRURGMkJFMDJBNjczM0U5Mjc2QjU3OUY0OUMKLToxMDEyRTAwMDE0QzM3QjY3NEJGNTc0QTRFREQzNTdDQkZCQUI3QzM2QjMKLToxMDEyRjAwMDk0MEJCNzM5NDc2NTIzMUZGRUE0NzUzMjFBREYyMEVGMjAKLToxMDEzMDAwMDZDQTI3NDg5RDI0QjQ3Qzk1NkI2RUFBMjVFNEFGNUM3QTkKLToxMDEzMTAwMERDM0NBRjdBNjVBQjhGRDc4QjE4OUQ2RjVFRDk1QTRCOEIKLToxMDEzMjAwMEY1Qzc4MTJGQjFGQ0Q3NTYzRjk1N0JBMDBFMTYwRUZCNUIKLToxMDEzMzAwMDExRjRBRjQzM0YzQkExN0ZBQzNGMDJGRDYzQjkxREZBRkYKLToxMDEzNDAwMEM3RjI4N0QwM0ZCNjZGODU3RUIxRkUxMEMwODVFNTgzQkEKLToxMDEzNTAwMEQwMEYzRTdGMDBGQUM3RkFBNkQ2MDBENUVGNkJBREEzM0IKLToxMDEzNjAwMEZBODZENjIwOTVGN0I2MzZEMEYzQjVBRDJENTQ1RkREQUQKLToxMDEzNzAwMEJBOENDQTdCNUFDMzU0QUU2QzVENDNFRDE2QTEzNzFGQkQKLToxMDEzODAwMDEzRTcxRjFGOUJDNkNGN0QyN0FGN0Y0NjlFRjJENUVFOEEKLToxMDEzOTAwMEJCQTgwNDQ1NUU2NUM4OTNDOEM4QzM3RDc1QTczMTJGMzcKLToxMDEzQTAwMDEwRjE0NzcwRDgzOTFFOTNFMTE4MkJFMDE4Q0Y2MjJCNEIKLToxMDEzQjAwMDUyQjlEQ0EwMzhFQjk4MkVERkREQTlDMEE3MjM1QkY4N0IKLToxMDEzQzAwMEJBMTc3NUM1QTkzREE3ODE4RjM3NTZDQzkzNzlDMjJDMjIKLToxMDEzRDAwMEFGOEExRkVGQzVGNzdBOTU1ODc1MkE4RjM3OTMxRjgzMDkKLToxMDEzRTAwMDc5MDEzRjU1RTJEQzMzOTE3OUM0ODQ3MDY5OTM0MTdGODAKLToxMDEzRjAwMDI3Q0NCMzFGNUY2RTBFMjdFMjZEMjg3ODJCRjI3ODdDMjYKLToxMDE0MDAwMDQzQURFQ0U0Rjc5QkQ0QjY0NzkxQ0Q1MkZDMkQ3NEJGQUQKLToxMDE0MTAwMDg5QUQyRTEwRDVBMEY0MDQ4Mjc0NEZDMkY4NzMzMzYwRTYKLToxMDE0MjAwMDkzMDU3MkVERENFNTRDODczMkFGRDFCOEZGQ0E1RDUwNTEKLToxMDE0MzAwMDYxRDhFN0E4RTczNjMyRkQyMkU4QjdDQ0I4NEY0QTE5QTEKLToxMDE0NDAwMDdEOUJFMTNCNUJERUY3MENFRDE2Q0ZERDg2RjZGOUI3NTEKLToxMDE0NTAwMDE0QURGMjIyM0U0NzMyOEEzQjU5RDdBRjYwMzkwMEQ3RUMKLToxMDE0NjAwMEMyOEU0RDA0NTc1MEUwQkQ1N0QxRjlGREVERkJDNUVGREQKLToxMDE0NzAwMDQ0MDhGQkZGQzcyRTgxMkZEQjdBREFENzhFNzVGMzZBMUIKLToxMDE0ODAwMDQ5N0FEODg0RkFFN0UzQTdEMjQ5OEVFRTdEQzQ0NEZFQjgKLToxMDE0OTAwMEVENzEyQzYyNDI3OTMzMDFDQzQ4NkNCRjAwNkY3MjU2RkIKLToxMDE0QTAwMEU5Q0ExQzE1RUJFNTRDNTdCMTdFMTE4QkQzQkUwOEVDOTUKLToxMDE0QjAwMEZGM0FBNDE3QjBGRjFGQjE0M0ZENEM3RUYwQzczQ0JGRkQKLToxMDE0QzAwMDJCNEE3QUJBNDRBQzY3ODlEQzA3NkREMTkyRkRDMzczQUQKLToxMDE0RDAwMEYzQzg1RjYzM0MwN0Q2MjZGNjAxMkJEQzU1RDkxOEVGMUQKLToxMDE0RTAwMEVEMUQyNkZGQ0VFOUZERDZENDA1QjAxRUNFOUMzQTJBQ0UKLToxMDE0RjAwMEU1RjMwREJBNjlDODczRDFDQkJFMkFCRjZDMDEzRDYyNUEKLToxMDE1MDAwMEU0OTc2NTA4RkY5OUNBOUY2N0ExQkJBQTc5NzQ5Q0Y4MDQKLToxMDE1MTAwMEE2Q0QyQ0U1OTg5RThFNzI2Q0EwRUU0QjI3QkJBMjNCMEQKLToxMDE1MjAwMDg3RjBBMzg5RjVEOURCMUFBNEZDMDAzOTRGRUQ3N0QzRjYKLToxMDE1MzAwMDVDOTgwRjU2MjJGMjRGRjdCNURFM0FCNTI2MjExRjY2QUEKLToxMDE1NDAwMEI3QTBERjUyMTZBQjQ1M0Q1QTVBNjZGMjQ1QTgyN0FGMDEKLToxMDE1NTAwMEMxN0Y2MTFGRERFRUM3NzNGQTVBMDVGM0ExMTgxRUM3REMKLToxMDE1NjAwMERBRTlCQ0JBRjY4NTRBNzk0MERBOTE0Qjk4MEU3NkIwNDIKLToxMDE1NzAwMEMzMTE2NUUxQjI4MTdFOTlGMDgzN0M0N0M4RjVDRjVDRTkKLToxMDE1ODAwMDM1MzQwRkFENDBEQTQ3M0VENERERUMzMzg3M0Y4Njc0MDcKLToxMDE1OTAwMEY3NTk4Nzk5QjNFNTA5NjM3QkE5ODM5MTlFNUI1NDZBRTgKLToxMDE1QTAwMDg5RTgwQUE2MjNCNEQzM0Q4QkRBMEU4NUU1MTUyMTFDMDQKLToxMDE1QjAwMEQzQkRGMzUwOEYxRjRDMjVCQTREREQ1MjQ1NTdDMzdCMjkKLToxMDE1QzAwMDRDQzFGNTc5MDBDNzk5MUVGREEwNDkxQTU3RjA1RUQzQUEKLToxMDE1RDAwMDA0Q0IyRUI0MUJDNzIyNUU3MDlDRDFBNTg0Qzc4NTYyNDQKLToxMDE1RTAwMEJFRkI1QTU3MTA5RTlFMTVGMzY4Q0JFRkM3M0I4Nzg3MEIKLToxMDE1RjAwMEY5RkM3OENGRTlBMjBFRTlCRjMxQ0U3MzQzNjVGNTM3MjgKLToxMDE2MDAwMEYwREVDNjk1MzE1NUQ4NzQ0NjdDQUUzM0M3MjZDRTUzMkUKLToxMDE2MTAwMDA2RTAwMjM4OUY0NTM4NTU4NDlCRkNCRjdDN0U0RDhGODkKLToxMDE2MjAwMDcwQkYxOUM4QjE1QThBQkI0RTMyQjFDNEI4QUIyQ0EzMzMKLToxMDE2MzAwMDQyRkVDREM4NzMxMUJDNEVFRkRDQTkwQjJFNEFBQ0RGQzUKLToxMDE2NDAwMDQ0NzRGREI4QzJFNzFGNzY2QTNDMkZDREVGRDcxM0ZENzcKLToxMDE2NTAwMEM0RUJFNDdFNTk5QzdGNDgxMUYwRjZERkUzMzY5RUU3NDkKLToxMDE2NjAwMDYxM0E1ODZDMEJFNjJEMERCNzFGRkUyNTJFQ0FBNEM0OTcKLToxMDE2NzAwMEZEMzBFODE4MTg1NzlENjRBMzNDOUY3NTMyOEY0QjdGNEYKLToxMDE2ODAwMDQzQzc3QzMzMkNGMUZDOEE0REQwRTk2QUE3MzFBRkU0MjMKLToxMDE2OTAwMDVDMUVCNzc3Q0U4OUY1RThCMzcxQkVDNkI4NjQ3OTU2REIKLToxMDE2QTAwMEMyQkQxN0RERjVFNEZGOTE3MUNDQkU2RTlFMEYyRUZEMUQKLToxMDE2QjAwMDZCNEIwNDA5RjQxREU1NzhFODdCNThBNUY4RTU5MkVFM0MKLToxMDE2QzAwMDZCRjk3REExODcxRUEwN0I1NkExMkYxREU5QTE1RUJDRjEKLToxMDE2RDAwMDVGQkZDNkU4RUY1OUIwM0JCMDJBNDUxRkVDNTc1QUM0NkMKLToxMDE2RTAwMEMyRTRENzQ4RjYyNzI1RkI5MTdFOUIyN0Y2NjkzRTU2MzQKLToxMDE2RjAwMDhFNzFDQTkzRUI4QjhGQTVFMDdFQTY4OEQxQjlEQjkxNjIKLToxMDE3MDAwMEVBOTM3NDhGMzE1OEZCRUQ3ODRGMjkyQkUzRjdGNDI0REIKLToxMDE3MTAwMEFGRkIyNTA1MTZDMkYzM0VCOUFFNjMxQ0U0NjdEODM3QUMKLToxMDE3MjAwMDg5RjNGRkJFMTdDRjdFN0QwQ0Y0RjM5NkFFMThDRTgxMDEKLToxMDE3MzAwMEJDQTU5QjA5OEZFMzgxQUVCMUVDNjRBQzc2QThGQkEwOUQKLToxMDE3NDAwMEIyRjM0RDVGRURCQ0MwQTVDNkRGRDc2OEVBRUEzOTk2QjMKLToxMDE3NTAwMEFBOTNCQ0NCQ0EwNzc4RkE4RUZEM0VBRDhDRjgyNzRFMTMKLToxMDE3NjAwMEJGMDc1MTU3QzRFMTQxQjhGMUZDQ0I3RUQzMjc3MzEzQjcKLToxMDE3NzAwMEU5NjA3Q0JFQzZFRDgzN0NEMzU3OTNCRjM1NDZCOENFQjcKLToxMDE3ODAwMDk0QkQ5OTc1MEQ4NzZCMUNDMkQ1MUIzRDkxOTU2OEI3QUIKLToxMDE3OTAwMDQ4QjhGNjBGNzNCRkZBQTU1RjE1NEY5MzhERkEyMDAxNzUKLToxMDE3QTAwMDRGNTNGRjEyOUVGNjVCODY4NjY3OTZDMENGNEY4RUYyMzAKLToxMDE3QjAwMEZCNDIwNkI3N0Y0NUZERDU2MTg0RjdDQzYzQjFFQjUxQTEKLToxMDE3QzAwMDNDMDJCQ0IzMDg3RkRFNTM1OTE0MzMxNUY4RUJBQzE0NUMKLToxMDE3RDAwMEY0NTkyOUU0OEU4RkNFQThCMEQwREIxNzUzN0U1RUE3RDQKLToxMDE3RTAwMEM2REI0Mzc3MkU4QUUwNzkwMkRGOEIwQjBBRDFERkUwN0MKLToxMDE3RjAwMDNDNkVBNTdCOUU0MjQ5NzkyMkIyNUMyRkU2QjEzRjU3RjEKLToxMDE4MDAwMDE5MTIwRkFCRjNCOUJDNzhGMUI1RjlENERGQkQ2RjU5M0MKLToxMDE4MTAwMDE5Q0E4M0VEMjJERkY1NUU1N0E3MERFRkVGOTU3OEM0NjcKLToxMDE4MjAwMDdBMDU5NDIxNEI3QzExMkFCQTdCMkIzRkIzRTk4RTIxOTgKLToxMDE4MzAwMEM2MzNGMUYxRUU0QkUyMUIzOTlFMkM1N0U0OTc3MkJCOTUKLToxMDE4NDAwMDU0MzlBQUUyMzk4N0ZCMkU3RDkzRUVEOUJBQUY1MjIzRTEKLToxMDE4NTAwMDk5RkIzN0UzN0Y3RDEyRkVBMzZGNjY3RDlERDNDQjhBMTQKLToxMDE4NjAwMDdDRjRBMzJBRUZBNTdEMDNFQTIxMjVGRUIzMzJDNDlGQjEKLToxMDE4NzAwMDI1NDhGMzBGQkQ2RDY1M0I5NUMxNzg2QTE0RjQyQkU3REQKLToxMDE4ODAwMDI3RTcyRkUxNzY1RUI2ODBDRTk5RTA3QTIwRTBBQkM1RkYKLToxMDE4OTAwMEZCNTI0RkE0MEJCRDg3RjMyMjNENzFBOUM2Q0Y4OTRDRTMKLToxMDE4QTAwMEQyNjg1REVGOUIzQzg1Q0VGNUVDMTdGOTE0RjE0QjJDMUIKLToxMDE4QjAwMDQzRkUyRUMzMzMwMjZGRjc5RUZCNDUwQ0VGQTkwRDc3NTUKLToxMDE4QzAwMDlCRTk1RTA1QTZGNTc4QkYwOTc0MTQ3QTVEQTM3QjlBM0YKLToxMDE4RDAwMDgxOUU2QUYxREVBODE3NUYzQjlCODZGQkU4MDNGOTY2RjEKLToxMDE4RTAwMDgyRkI0MDNFOTc4NzdERTdENDVBM0E2RkYzREE2NzJFNDIKLToxMDE4RjAwMDM1ODFGRTlGQ0U1Nzg1NUQxMjhCRTEzOTlBOEQxNUZDOUYKLToxMDE5MDAwMERDODA0M0Q4MDE4RUQ3NEUzNTIwRkM4RUM5REZCMzJBNDgKLToxMDE5MTAwMDA5N0E3NjRGQkU5NUJFREI2ODg5NjdGOTMwMEU3NDQ4NDgKLToxMDE5MjAwMDY1NTFFRURGQTFGQkVGRkFDRjBCQkEzODFFOUEyQjhGNzEKLToxMDE5MzAwMDkyOURFMEU4RTZGN0UyM0Q5REFGMTM1QzA4Rjc0MTc4NDEKLToxMDE5NDAwMDlFMzJFRTMzNTczREI2NTdDMjc4QTMwNkJFNzdCQUY4M0IKLToxMDE5NTAwMDdBQTY0Q0UyRjdEMERDNzdFOUNGNUQ3OEVGNUVCQUMyQzkKLToxMDE5NjAwMEU4RkVFODRCMEFDQzA2Mzk1RTVGQzREN0ExQjMzMjE2NTUKLToxMDE5NzAwMDFCODVGQ0U1RDIyOEFGQjYzMzdBOUIwREVEN0FDOTE3RUIKLToxMDE5ODAwMEEzNDdBOUY0REQ2QTkxOTdCRTdBNzIyOUYxOTlBNEUzN0QKLToxMDE5OTAwMEI5MDVDMTU3OTE2RTM2MDI1RjNDNDk3NjRFMkMzMDlEOTkKLToxMDE5QTAwMEYwRTMyQUM3RkNFM0M3OTU1ODFEQjczRjJDMkVENDJGNzAKLToxMDE5QjAwMEE1MjY5MzgxREY4QTBCMzhEREM4MTJFQzUyQjI3N0VFOTAKLToxMDE5QzAwMDEwQjQyQ0Y1N0Q1QkM0QzYzMEJGRkZCN0U3NjZBNUEzOTYKLToxMDE5RDAwMDVEREE5NjI3RUQzQ0JGMERGMUI1NUQwOUE0MTdFMTM4M0UKLToxMDE5RTAwMEZGQTVEMkJFRUZDNUQ3NEUzNEUwQjg2RDMwMkZFNERCOTMKLToxMDE5RjAwMDdCN0VFQTU4OEZGNjQ5OUJDQjRGN0MyQUM3RDdEQzI2RTMKLToxMDFBMDAwMEIxMUVCQzlGRkQxNkZGMkJFODZGOENCQkY5N0Q0NDQ3RDAKLToxMDFBMTAwMEE2NUM2MzQzRkE4N0Y3NENEOENGN0JBREY4MEIxQUQ4OTYKLToxMDFBMjAwMDRGMERGOTA3MTZCQTY2Q0ZDMEVGMTZCMUUwMkFCNDZCQjYKLToxMDFBMzAwMDE3NzVBODg2N0IxN0VFMTFGMjYyRTFCOTE0MTY0REQ4MUUKLToxMDFBNDAwMDFGMkM5Q0ZDMkQzQTM3QjZGMDVDMUE4QjgyQkQ3NThGMkIKLToxMDFBNTAwMDM4MTc3RDhGMzg1N0M0MEEzODNEM0I0NEU5MTVFNURGMTgKLToxMDFBNjAwMENDRjdCRTI0QkQ5NUY5Q0JCREYzMzlERkIzMDJFOEI3OUYKLToxMDFBNzAwMDQ5RTlCMTE0QzExMDFCQTdGQzlFQ0VFQkJDRDdFQTYyQUEKLToxMDFBODAwMEQxOTIwNDc4MDdDRDczMDQ4QjI2OENEM0ZGREUzOTFCRUIKLToxMDFBOTAwMENENjc2MDdEMzlGRDBFQ0NENzQxNzg3OEFGRDU0Qjc4RDYKLToxMDFBQTAwMDFDQkVGRjkxMDYzQzBFRjQzRkNBODBDN0MxRkQ5N0QwMTMKLToxMDFBQjAwMEY4RUZCNTk2N0U0OUZGMTM4NkU5NUYzN0MwM0ZEMEVGNTgKLToxMDFBQzAwMDY4MUFCN0Y3QzhGQzFGQTcwMkRGMUQ4OURFQkRFREY5NTQKLToxMDFBRDAwMDRBRkMxRDMzMkJGRDdFMDFFQkVBQUNBNjczODQ4RjMzRTkKLToxMDFBRTAwMDNBNjc3QUU3RTFERkJEODNGOTlBNzdFRUIyRjg3MDhDNTYKLToxMDFBRjAwMDNFNzM3Q0FFNkYwODNEMzM5QUI5QzI3ODlGOTcyQ0M3NkUKLToxMDFCMDAwMDE3MTREMzdDOTI5RkRCQjQ4ODBCRjMzMjZEQTU5QTBCMkMKLToxMDFCMTAwMDdGMUZEMUM2NjI5MUJCNzFERjUyNjkyMzM5MjdFMzQyMkYKLToxMDFCMjAwMEIyREYzRkU1QTlGMjNDM0JDOTA3Nzk2RkNCMTI5MTk3MzEKLToxMDFCMzAwMDU3RUMwODVFODFFQkJFRDRENERFRkMxM0Y4RjY4M0QyRkEKLToxMDFCNDAwMDM2M0EzN0NDOTg5QkY2MzMzMjZFQTNFMTJGQkYxNUEzRkMKLToxMDFCNTAwMDVGMzBDMEYwRkNDRDEzN0E3MDA2N0VGNzQzMTAyNzE4NzMKLToxMDFCNjAwMEM3NTEyRkQ4MURDNEJDQjUwRDYyREZCOEMxMUVGM0ZBMzIKLToxMDFCNzAwMDEyRTRFNjBEMDVEQTU3QjMxN0RBOTNFODc2RDIyRkY3QjkKLToxMDFCODAwMDQ2MzlERERFNTA4MDdFMjIzNUY2QzRGQzIyQ0NCN0VEMkUKLToxMDFCOTAwMDExRjc3NkU5MTY4QTc3NTUxRUEzRkJGRUU2Q0I3REZGOEIKLToxMDFCQTAwMDlBRTRCQzhFN0MzN0RBRDEzMkNFOTQ4Njc5Nzc2ODZCMzIKLToxMDFCQjAwMDZDRTRGN0JFRDVBN0YyN0FGRDdGOENBMDczMTBCMEZGNUUKLToxMDFCQzAwMDQ5MkQ0M0Y5QjI1RkU1RkUyMDExREYzQTJCRTZEMDY3REQKLToxMDFCRDAwMERCNTg0MEY5RjcyMjFGRTQ2Q0Y3NEI3NEFGRTREOTM1QkEKLToxMDFCRTAwMDYzNjhGREVCNUZGODNFREQwQkI3M0Y5N0VCQjFCRTQzOUIKLToxMDFCRjAwMDRFRDI2M0Y1NTY1RjE1REU1QkI4M0Y5N0RCQUI5RDVBNUYKLToxMDFDMDAwMDM0QUQyMkMxN0U1RDlENTc0REYyRjlFMzM1NjM0Qzg5QjkKLToxMDFDMTAwMEYxOEZFRjBBNzlCMDUxRkEzN0I1NzgxNTlFNjdGOUI4QTgKLToxMDFDMjAwMDMyRkEzM0QyQTMwN0VDRjQzQjUxQTY4M0JGQUJBMkZCM0QKLToxMDFDMzAwMDJEMzc1QUU5NzcwMUFBMEY4RURCNUM4N0ZCQzMzNDhEMDEKLToxMDFDNDAwMEYyOTE0RDA3RUQwNENGOTk3NUZDN0UyREZDMTZFNTVERjQKLToxMDFDNTAwMEQzQzE5MUY0RkI1NkY1QTk3MUNBMjc2QzRBRjE5NTYwN0UKLToxMDFDNjAwMERDQUZGRUUwNTRCQUQ3RkZFNDg2NzEwNTI4RkY0RTY0NkUKLToxMDFDNzAwMEVBMDU3NEFGRjEwNjNDRjQwOUY1NDM2M0Y5RjNCNTE3Q0YKLToxMDFDODAwMEQzNzk1NUU3QzZENEUwNTA3RTEwQTk4RjkyRUZFRkRBRjIKLToxMDFDOTAwMDlGNUJERURCODVGODE5NjdGM0ExRkM3RDRGRjFGMUI4OUUKLToxMDFDQTAwMEVGMkJGMUQ5M0FDNTE1RjlGOUQyN0FENzY5RkE3REJDOEIKLToxMDFDQjAwMEZBOEU3NzZGNjJGNERDNDM3NDJCRjc3M0M5RTNENTBCQUMKLToxMDFDQzAwMDdEQjVERjEyOUY4QkJGNEI1NkJGNTJFMDVERkM0RTYyNkQKLToxMDFDRDAwMEJEQTk5QzdFQUY0RkUyN0Q2M0QyM0RCNzRGMDhGRDI0ODYKLToxMDFDRTAwMENCOTNBRjY5NzQ1RjIwRDgxMTA1RTgxRjNBNzlEODRBQzEKLToxMDFDRjAwMDc0NzY3MkUzMDQzQUFGMkVDN0FCMDc5Q0I4ODAyRjRGQkYKLToxMDFEMDAwMDY0RTgxMzcxNUQ5RjE2RjJBQTdFMjVERkE3Q0FFNzMwNEIKLToxMDFEMTAwMDdFMEM3RkU3MzA3RTQ4QTVCQ0FFM0U1NzNDMERFMzkyN0IKLToxMDFEMjAwMEYyM0Q1OUVGOUY0RkI3NEFCRjk3QjUzRkY3NDU1QTZGRkUKLToxMDFEMzAwMEEwMjc4NkY0NjQ3QUMxNDk3QTNBRjQ4Mjc1MTdBRUU3MkYKLToxMDFENDAwMEM3OTUyQzhDRkVDRkYwNUJGQ0Y3Qzc4RTFDQjI5MkZEQzIKLToxMDFENTAwMERDNzc5Q0VGNkYwN0REOUZFNjg4MTdFMEZEQTFBMTE3RjgKLToxMDFENjAwMDQ2OTIxQ0VCQ0I4RkVGRTBGNkI2OURERkFCRjg0NkYwNkEKLToxMDFENzAwMDYyMTFGRkNEMTFGNzExRTZBMDlERjdGOTIxN0IxNEVENUIKLToxMDFEODAwMDNDMjgyOTlFMTA2NkJCQkRGNEZDNzAyQTQzRkYwRjk0Q0IKLToxMDFEOTAwMDE0Q0Y2M0NBMDEyRkZERUUwQzZCMTdERkM3RThGQjNCQzYKLToxMDFEQTAwMDBCODI2MzUxMkVERjU5MENGRDNCRjBGQjUzRjRERUU3NTEKLToxMDFEQjAwMEEzODIxNzUyMEM4QUIxNUMzMTVFMkVGNTlCMUYyQ0E0QjYKLToxMDFEQzAwMEU3Q0E2NzVFRkU3QjJBRURBMjNENDZFRDIxNkJGMDYyMUQKLToxMDFERDAwMDlBQzdBRjlDNkNFNzEwRjNGQ0FBRjdFRTFEMkQxODQxRDMKLToxMDFERTAwMEVCMjhFMTA2M0M5M0REOTg4Qzk3QjMwNTI2RjE3QjNCMEQKLToxMDFERjAwMDFDMUZDOTc0RDlCRjlFNUYwMjFGRkE1RkU4QkNGNjIxQTEKLToxMDFFMDAwMEJFOEVFQkM2NTlCODFDNTkzQjgxRUM2M0Q2OTY2MkM4QUUKLToxMDFFMTAwMDlGNUI3MTg4REZDM0QwQkJDMTQ5RUJEQzY3RjYzRjg0QjEKLToxMDFFMjAwMEZBMjhGRTg2OTlGMTdCRURDMDIyNDAzRkM1RTRBMUY5NzYKLToxMDFFMzAwMEU1MjM5MTRGQkY2NDJEQ0ZCM0ZCRThEMUY3MEJFNjM5MTMKLToxMDFFNDAwMEYwNUNGMkZCODY3M0M5RDI1RjA4OURBNEExM0ZDNkUxOTYKLToxMDFFNTAwMEQzRDNFNjk3NzE3QjVEMjVGOEY4RUY3QTZEMzRFQkY0MTgKLToxMDFFNjAwMEJCNkJFMTBERTNDODFGNzFEMkEyMUZBNERGODc1Qjc3QjQKLToxMDFFNzAwMDgxMDlFOTRBMkQxN0YyNzcxMzlGOUZCQzJGNEJERTdCMTgKLToxMDFFODAwMDk1OEM5RjhBQzI2MjkyN0Y0RDJDNzgzM0RFQTE3RTgyMzAKLToxMDFFOTAwMEU5NTlDMjYxNDZGN0ZGOTE3QkRGODQ2OTg4OUE5RkUyMjYKLToxMDFFQTAwMEI2QUM4NUY0QzJFMDdCRjYyQzVGRjJCQjZDRkZCQkY1RjEKLToxMDFFQjAwMDJBNUMyQkY0RUY5NTg3RDM1MEFGN0VFMEUyRkI0NjNBRTUKLToxMDFFQzAwMDdEOEY3QTVERTVGMzZDQzMwRjMwQUY4MzA1QTYxNDRFQUEKLToxMDFFRDAwMEEyNzY5Mjg3MUYyOEJDNURDQUI5NDFGMzQ3N0FDMTdFQkEKLToxMDFFRTAwMEYwM0RFOEVCOUE0MkVFN0Y2M0FFMEM3MUM4MkI2Q0MxRkIKLToxMDFFRjAwMDNDNERBOTlGNDI4QTY2QzI3M0YzQTdEQzdBMUFEMkUzRUIKLToxMDFGMDAwMEE5QjVDNTE5MkIzMDBGQzZBRDY3MjVEQUQ1QTFBMzhDQUQKLToxMDFGMTAwMENFOEJFQjc4REZGOEM1RjhGQjMyRkU4OUU4RjdEQjlGNjQKLToxMDFGMjAwMDYxRjQzQjI0QzNGM0U0QjQ5RUI5ODlFRDczMEFCOTlFMEUKLToxMDFGMzAwMDlCNUYyOEY2OTk4NTRDRTQ1NzI2RTM4REFGRkI2MkIxOTEKLToxMDFGNDAwMEVFNkE3OUYwNzJEQTg3MjZCREI3Nzg0QkJBQTA4N0E0MUIKLToxMDFGNTAwMEU3RURDRjdGOTdGMkEwMUUzNkRFMTM0OUIxNUYxOEVGOTEKLToxMDFGNjAwMDgzNTcyQzYxRTU0MjJDNTMyOEFGQkQ2MTEzOTc3MzBENDUKLToxMDFGNzAwMEFGQ0UyQ0I5OEJEN0U5NUU4NTY5M0JFRkExREZFMzU5ODIKLToxMDFGODAwMEIwRUJDQTEyQzZFNTE2QUQ4M0E0QzcwNTA1RkUxMkI0QjAKLToxMDFGOTAwMEUzRTI1QjU1MTdGMjQ1QzMxNjk1RTA1MUNEM0VENzU2QTcKLToxMDFGQTAwMDc4N0U3QThCOTlFQ0JCMDYwMUNGRTlCQzYwMUFBRDlCQjkKLToxMDFGQjAwMEM2MzQwQkUwRkRCNDE2NEMyM0ZCNzVBQkY4RERBMUE0RDEKLToxMDFGQzAwMDc5QzA3QjZGNkExNTQzRTBDN0M2RDc5OUYwNTMzQzA0Q0MKLToxMDFGRDAwMDFEQkM2MUEyNzU1QTgwQkYwQjg5NzBFQzU0QzhCRjc5RDMKLToxMDFGRTAwMDNBM0Y3ODMzRDY0RkMxRkUxRkNGRTlBQjlCOTZEMDdERTkKLToxMDFGRjAwMDM2QzlGODNFNkQwQjEyN0QyRTE2RjM5MUY4NEMxRTQ3MzQKLToxMDIwMDAwMEUyQjMwRkYxODlGNkQyMkI1MzQ4RUY4NTFFNTQ5MTYyNEIKLToxMDIwMTAwMEQ5OEJERDlGRDJCRTdDREFBMTJCREY5OThBQ0YzNzgxQTUKLToxMDIwMjAwMEREQTJBMzlFMURGNUIzNkZBMzlFNUJBMzUyOEM3QUZFMjcKLToxMDIwMzAwMEExRTIyQzk2QTRBRjcxRkYzOUZGRjUzOTY5QTYwNDNERTIKLToxMDIwNDAwMEE5M0VDOEYxQTQzQUU3QTQyREE0RjdDRjdFMURFOUVCODEKLToxMDIwNTAwMDg0RUVDQkFBNDg3OEVGRjFDMkZFQjg4MzYxQkRFQTM3QkYKLToxMDIwNjAwMEZEMjEwREM3Njk1ODZGQTY3OUM5NzVFOUMzNzlBMDdDQjAKLToxMDIwNzAwMDZCNEY4RDIwRkRGN0U1QzVBOTVGQjk0RUZERjQ4REVCRTMKLToxMDIwODAwMDIwRTkwOURFRkJBRjQyOTcxODI3NENGMkU4NTQ1MUIwMjMKLToxMDIwOTAwMENBMzcwNDlEMkM3QTAwQzZDNUZFQjYzOEU5RkVEMkYzRDUKLToxMDIwQTAwMDFENTdFMkEzN0ZCRDA1NUY1MzFERDc3MTQ3MTFGOUQxQkQKLToxMDIwQjAwMDRENkY2ODc0QzhFMDQ0RkI1NTA1QzhDN0Y1QTAyRkQwMjQKLToxMDIwQzAwMDZGNTFBRkM0REZBMTdCNjQwRjU5RTkxRUU2RkE0REI3MkIKLToxMDIwRDAwMERDOENFM0Q1MUZCNzlBQjBGREQ0RTFBQjI2MTI1QzQ5ODYKLToxMDIwRTAwMEVCMEE3ODJBMTg4QURFRkI4QUUyMDVCRTA0RkM4MTNERjEKLToxMDIwRjAwMDQxRkMyREU3OTMwMDM3QzEwMUZCMjlCQThGQThBRjA4MzcKLToxMDIxMDAwMEQ2MzM0MTBFQkM1OUM4RUQyRTc4REY2NTIxRkFFNkY3Q0IKLToxMDIxMTAwMDYxRjVDRkQ3OTUzNDVGNTdEMjdDREY2NDQ0REZDQzE3QUQKLToxMDIxMjAwMEE0RjkyQzc4REI2QUMyRTcwQkVFQkZCNjA0RjczREE3MzMKLToxMDIxMzAwMEQ2NERBNzc5OURDQUYwNEY0NEZFM0E1NTAwRkQwRjIxQjgKLToxMDIxNDAwMDJGMTdEQzBGRjMyQ0ZCMEJGMzZDQjdEMzdBMEQzQkNGQkYKLToxMDIxNTAwMDhDRjgwRUY2MTdFNkY5ODlBMDQzMzlDRkY3MzQzRDBEMTgKLToxMDIxNjAwMEYzRjk0M0NGQUEwQ0ZEMkVBMUZDQzBDNkE5QkM0RUJGRkIKLToxMDIxNzAwMDEzMTczMjczN0EwODZENEFBNTdDREZERTZFRkVGQjA0MEUKLToxMDIxODAwMDUyMEVDMDc4RTc0OTBGMjZBMjg3NTNENUZBRTZDOUQwODgKLToxMDIxOTAwMERGRkYwNzNGMzcxN0I3MDA4MDAwMDAwMDFGOEIwODAwRTQKLToxMDIxQTAwMDAwMDAwMDAwMDBGRkNEN0QwQjc4NTRENUI1RkYzRTczRDUKLToxMDIxQjAwMDY2MjY5MzY0OTI0QzEyMDg4MTQwOTgzQzA5OTA4NDQ5QTkKLToxMDIxQzAwMDAyODg4QTc2NzgwNEQxMDIwRDRGNzk4OTkzMDcxMDQyRUMKLToxMDIxRDAwMDVFQTBCNTY5NkJDRDQwMDJBMjQ1MEQzNTJBNUFENDAxRTcKLToxMDIxRTAwMDgxQTJBMjBEMEEwQTE1QkMwMzJBNjI0NUM1NTc4QkI2MDcKLToxMDIxRjAwMEU1MjY0MDUxNzlDNkEwNUVBRUI1RDdGRkZBQUQ3RDRFNUIKLToxMDIyMDAwMDcyQ0U5MDU0REJERUZCN0RGRjdDMUZERjY2OUZGRDVBQTQKLToxMDIyMTAwMDdCRURCNUQ3NUVBRkJERTdDMjNEQUFDQkVGMTZFMkU0REEKLToxMDIyMjAwMEREMDU2RkZGQkMxN0E1RjdBQTJFODFGQzU4REZDRDAyOTQKLToxMDIyMzAwMEY5OEZDMzJDRkUxNDRBOTM4QkE2NzBGRTY1OUI2QkE1ODkKLToxMDIyNDAwMDIyQzQ4OUE2QkZGRDQxQTFGQzg1N0QzNkI3QTBGMjBCNTMKLToxMDIyNTAwMDI5NDVGN0NFNDY3RThGRUE1QTQxRUQyRjBDNjg5RjI1MUYKLToxMDIyNjAwMDg2NzNCOUQ4NDRFNUVBNUQyMzlBNTAyRTFFMUVFNkNBNEQKLToxMDIyNzAwMEEwRjJGMjBENjE0MjY0MDlGRUZCNTY2ODdGMjNFOTNCNDAKLToxMDIyODAwMDUyMEJBNTZCNTU2Rjc4MzRBNTREMkZGRDQ0QzlBNTZGMzIKLToxMDIyOTAwMDU2Mzc4RjU3RjNBQjI0RjdERDM0N0VCOTU1NThFREY5MzcKLToxMDIyQTAwMEE4REM5RTM5MkQ0Nzg4RjM3QjZEMTMwM0Q5MzIzRjIzNzkKLToxMDIyQjAwMDg3Q0IzRkIwNTI3OThENURGODVBRjg3QkFEN0Q2QTBFQzEKLToxMDIyQzAwMDhGRTJCNkQyMzg4QkE5MEY5MTRBRTlGQTE4RUY2MEVBOEIKLToxMDIyRDAwMDdGMzE4RDkzNDJFMzdEOEJCRjFGNUMwRURGMEVDQkU3MUEKLToxMDIyRTAwMDBCOEFBODlGN0I2RDYyRjY3M0Q5NURGNUY0MzREQjRERTQKLToxMDIyRjAwMDFERjY0NjZEN0I1NzNCNTU4ODI1QzYzQ0UxQTEyMjI0M0YKLToxMDIzMDAwMEJGMTQ3OTQ3NTdCRTMyQTRCQzJBQTQ3QzQ3QkZDRkE3Q0QKLToxMDIzMTAwMDE0MzkyRjFGN0YwM0M2MUZEMTg1QzcxMjBEOEYzQjJDODkKLToxMDIzMjAwMEY0MURFQjcyOEYxMkQ4NDRGRjJEQjFCQUVEQ0IwOUZFMkMKLToxMDIzMzAwMEU3QzY4ODlCRDE0RkE5NTUzOEFFQ0Q0N0JEMEU5RTVGRUQKLToxMDIzNDAwMDg5NTUzNDg2RTVFM0JCODdFQkU5RjNBNkZFMUFDM0UyQzEKLToxMDIzNTAwMDI4MUZEMUNFRTM1M0JEODk3NjQzOUVEQTlCRTA5QUFCMkEKLToxMDIzNjAwMEMxQTNBNzRCQjc4NUJCNEVFQUYzQTA3RjU1MkRCMUE2RkQKLToxMDIzNzAwMDdDQ0RFRUJFQUU5MzA2N0MyRkM1N0ZGQUQyQkY0OTM0MkEKLToxMDIzODAwMEZCOTFDMDhCRkNBQkRBREQ3QTMwOTJFOEE3NERGMUNENDIKLToxMDIzOTAwMDc1NTNCRjE3MEU3RTFEOURFREU2NzUxRjU5NDRFQjlCQ0YKLToxMDIzQTAwMEFGQTYzRTdGOThFNkRCQkU0N0Y1NkM0MkJGNkZEOEZEMTcKLToxMDIzQjAwMDRBMENGREU3OUI4QjBGNkVBN0VGRDUyRkE3ODlCQkREREUKLToxMDIzQzAwMDVERjMwRkM1RTM4NUREMTdBMzUzRTlGQkY5NDNGNjA4NzkKLToxMDIzRDAwMDMxOENFNkI5Mzc3RUFDOURFODYyNDc1QzdCQjc3OEFGNUQKLToxMDIzRTAwMEQ1RDY1REVGRUZCQ0I1MzU3QUFBQTFERTc5RDExQTNEMUQKLToxMDIzRjAwMENENDAyRjI1QkIyRkQ2OEI1Q0M2OUY1RkNERUZDMkVGQTQKLToxMDI0MDAwMDg5N0RCREM3QUFGNEJERjRGN0ZEQzY1QTI4QkQ1RkMzRDgKLToxMDI0MTAwMERCQkQzNkY3MTM2QjA5NkVGRjlFMzBDRjE2ODJGQkZDRDcKLToxMDI0MjAwMDFCQjMyRDY4N0ZGRThENzIyREJEQ0RDQkU5NUY0RjI0OTAKLToxMDI0MzAwMDYzRkM2ODhCQTQ3NzdEQkMzNTZFMEJGNzUzNkE2OTdCQjAKLToxMDI0NDAwMEVDMUFEQThGQTVCRkVCOTNEMjkwRDI1NTVFNkFDOUNGNTIKLToxMDI0NTAwMEM0M0E2RkI3QjUyRjAwRENFNzE1QjE0Njg5RUJFQUU3NjAKLToxMDI0NjAwMDdFQjc5QkRCOUZERkYzQzk2M0UwMEYyN0VFMUQ5MDRGMjQKLToxMDI0NzAwMDY0NERGOTQxQjkzRTJBM0ZGRjUxNDFBNjhCRkEzRDdGOTkKLToxMDI0ODAwMDRGNUYwRkY4QzI3NjlCRkIzNkE2QjdCQkEyM0NEOEY3Q0UKLToxMDI0OTAwMDdBN0YxOEE3MTZGREVGQjk2MkE0MEZFOTQ3MTI1RUNBNEEKLToxMDI0QTAwMEU3RkFFNEI4N0UyNUJGQUJERjY4OEJGQkJFRDFFMDE3NEYKLToxMDI0QjAwMEJGQjc3OUI2NTBCMkZDRUY2OTdENjIzMTNGRUNFNzZFOTEKLToxMDI0QzAwMEQ2QTE3NDREOTg3MDlCRjhDOTRBODZCQjQ0NzhFQzIyMUIKLToxMDI0RDAwMDREOTYwQjAzQkQ5NTg5MjJGRUJFQjBDOUZDN0QxMUYxNUUKLToxMDI0RTAwMDA5N0M1RkJDREVGQ0JENUMzNEFENkVBNUY5MkQwOTk4OUUKLToxMDI0RjAwMEJGMEJEQTNGRkUwNEVDNkJGREFGQzU1RTE0MDU3QUZGM0YKLToxMDI1MDAwMDM2Q0M1NDRGRjgzNUZFNDAxRjA5NUYyNUI0MUZDMUM3QjQKLToxMDI1MTAwMDlFNTEwMjgxOTU1OERGQkI1NDlFNjdFOEJDREU3NUE3Q0IKLToxMDI1MjAwMDcwQkI4NzIyRkY2NzQxQUI2MTVEOEY1Qjg0MzU5MUYwQTMKLToxMDI1MzAwMDdBREMyRTFDODlGOUU4NDcwODg1RkFGNUVGMEIwQjZDNUQKLToxMDI1NDAwMEExMjY3NzBGRkUyQUI5MDQ3Q0FGMzFDMjIyMDhCRTVCRjgKLToxMDI1NTAwMDVERTA3QzQyQUNEOEY3NDkzMkZBMjk1RDUzRTg2RDM1MkQKLToxMDI1NjAwMEMwNzdDMUU2N0RFOEU3RDRCRUZENURFMkQ3NTRFRkY4NjEKLToxMDI1NzAwMEQ4NDBEMzU4ODJFQkY4RERBQUE3QTExQkI4NEVBRkIxNjMKLToxMDI1ODAwMDg4NDAwMUUxRTMyRTIxMDJGMTk0N0ZGMjkzRTQ2MjVBNDQKLToxMDI1OTAwMDk3Q0ZCNjdDOTI1QzYyQTQ3RjQ1Q0MzNkQyQTM5RTEyQzQKLToxMDI1QTAwMDI0QkMzRUVGNjFFRkQyRkM4RUQzNUMzMDlGRDA3QTVEQ0QKLToxMDI1QjAwMEVCNkI4NjU3Qzc2N0I4MkE2QUJCQTM4N0NGNDBGNzU0MkYKLToxMDI1QzAwMDlFRjU3NzU1NzhCMUVGRjdEOTAyQTBDRkM4OEQ1RjNDNjMKLToxMDI1RDAwMDM4MEZGNEI5RDdFNjRBQTFCMTZCRjZBOTVFOTVFNjJEOUUKLToxMDI1RTAwMEY2QTg4MTBDOUM2MzdCNEY0NDU3RTA5Q0Q5NTNFMDUyODIKLToxMDI1RjAwMDBERjNBRUQ5QTMxNkUxN0MzOUJGRkI2MjQyNjkzNkY3MTEKLToxMDI2MDAwMDMzQzVFRDQ0RkIwNzNDQTBERjlFRTBGODlCNUJGREY3ODQKLToxMDI2MTAwMEY4OUZEN0NDRkZDRTY1N0Y5MDcwMDNGOEMwQzY1Mzk5NjIKLToxMDI2MjAwMEUwRUZDNDA3RkZFNkE2Nzk5RUNGRkNDNjhFQkMxMEFERDYKLToxMDI2MzAwMDIzNDE3RjA0NUZCNDlCRTBCQzEwRjgyQTVBMTA1QzhFRTMKLToxMDI2NDAwMEJEQUEzN0QwQ0QzQTQ0QTVEODE5NEZGRjMyN0MxMzA5MjMKLToxMDI2NTAwMEJFODQyRUY4MDg5RUE4OTQxMTVENzA1NkJCREJFRDM4NDEKLToxMDI2NjAwMDY3MkYzOEEyNzNDMTRGNjk0MjkzRjIxMkI0RjNDOTBEQjgKLToxMDI2NzAwMEZFNUEzQTQ5MTA3RjFEQkY2N0UxQ0E3MEM4MEI0RDhBRTgKLToxMDI2ODAwMDI3OENCRTk3RUQ1NUY5REMyQURCMUIxOUMwMTYxODNGQzUKLToxMDI2OTAwMEM4QzlGOUQyNDdENTQwMThFNTI3QThBM0ZGMzA5QkVBNUYKLToxMDI2QTAwMDJGQkU0N0Y1RDA4RTE0RkIzN0RFRjYwNzFCRDY3NTgzOTkKLToxMDI2QjAwMDREQTAxQzg4MDM1QzRCMzRCODk2RUNGREUxNjcwQThEOTUKLToxMDI2QzAwMEIzNzhERjJEMDczMENFRTIwNzE0MEYxN0E4RjNFREU4M0IKLToxMDI2RDAwMDc3Qzk0MzhBODg1NzQwNjdCNkUzNDYzQTVCRDg2NENFRTkKLToxMDI2RTAwMDJGMTJBRDBCNTQxNUZDQzFGQzlERjA5RTVDNDFGRDk2NzQKLToxMDI2RjAwMEVGMEU3M0REOERGMTAyQTFFNTQyQkM0QUYwRDQ2OEZGMTQKLToxMDI3MDAwMENGQ0E1ODNCRjcwMEQ1Q0ZEQTY4NjczQzlDMEYxN0UyNzkKLToxMDI3MTAwMDA4RjZBQkI1MzU0MTIwMERCNjI2NjMxRENGRUZGOTZCM0EKLToxMDI3MjAwMDMyRDZCMUU2NzdGRjk1MjlCQTU5QkZDRUZEQjQzN0FBQTQKLToxMDI3MzAwMEQ3QTk0ODIxQUU0RTUxQzRCN0E5QTBGQjhCNTM4QUJBODIKLToxMDI3NDAwMEE5NkYxQjIwRjdDNTM2OUJCRjlGODdDQTBGNkNGQzhBRjkKLToxMDI3NTAwMEY5QzE4NTNEQkU4MUFFNkVFOEI3NkJCRkZBQzMyRDg5NjYKLToxMDI3NjAwMDQ4ODNFMTAyRTlGMDE2RDcwREQ4MjcyNDBGNjJCRTM1NjEKLToxMDI3NzAwMDlCNTY0RkRCNDRGOUYwOTc2QzM4Qjk0NDREODY5M0Y3N0MKLToxMDI3ODAwMDBCRjZDNzQyNDNCRkZBM0VEOTA2QkU4MDc0ODRFNDBGRkQKLToxMDI3OTAwMEI2MDFGMjFDM0RBQTlEN0JEQkY2Nzc0Q0M5RTgwNjlFOEMKLToxMDI3QTAwMEEzNkUxQkQ3QjMwRDEwNUNFRjU5NzdEMTVDRDA1Qjg0NUYKLToxMDI3QjAwMEM1MUYwREJFMkRCQzVFNzcyRkMyQjNBMkQxNTc0MzVEOUUKLToxMDI3QzAwMEFEODJFRjg5QTI4OUQzRkVBMjg1RDM0Nzg1RjAzOTUxMjYKLToxMDI3RDAwMDVGNzg1Q0MwQjMxMDAzNjI4MTNGREVGMzhDQ0ZCRUNDNjgKLToxMDI3RTAwMDM3N0ZBQ0FEMjE3ODM1RThDNDFGMkIwMjVCRThGRkVBRTgKLToxMDI3RjAwMDQ2ODc1MDYzMjBFREI1NDZBMzUxNTRDRUI0RkIwNjUyMzQKLToxMDI4MDAwMEI5RUQwM0Q1QTI0MERFMURBMEFGQTdDNzg1RkRGN0E1OTIKLToxMDI4MTAwMDczNDY4QzcxRkRGNjFGMkU5OTg4RkVBQTc2QTkyMjhDMkMKLToxMDI4MjAwMEZBM0JCN0QzMjY4MjRFRDRBN0ZEMDI3QzFDRkVDMjlFODMKLToxMDI4MzAwMDAyQkVCNDU3MTE5MDk3NkIyODhGRUYzNUEzQURERTgwQTEKLToxMDI4NDAwMDAxMkY3N0E0RDgxODBGRDUyOTk5RjI5Q0I2N0EwRjREOEQKLToxMDI4NTAwMEEyN0VDRkJCNEFFQzkwRUI2RDg3Q0IyNkUyQkNCMTI1QzQKLToxMDI4NjAwMDk2RDgwMUQ3RkVDMzYzMUQyOTU4Qjc1ODJCRUY5QkQ1QzcKLToxMDI4NzAwMDdCRjU3MThGQjhEMDdGNTRFQzA3MEM2RjYzQjY0NTQ0N0QKLToxMDI4ODAwMDUzQkJDNkEzNjEwMTQ2QTY0M0YyQTEzMDBEQUY4REMxNzMKLToxMDI4OTAwMEYxMEU3NzM3RUJFMzE3RTM5M0M0MjgyQURGQTk0RTA0NDAKLToxMDI4QTAwMDlDRTc1QzI1MkVBQ0EzMkQ5NkU4RUUwQTZBNkZGMzRFRUEKLToxMDI4QjAwMEJDOUFGQTBEOEI4RDhCMDc3QzZCNTJEMjc4M0RCRjhBMDgKLToxMDI4QzAwMEFENjUzOEJGMjJGMUMyQ0ZGQkI3QjYwOEY5QzZGRTY1QzkKLToxMDI4RDAwMDJBRTNCRUU5MjFERUNGMzUwRTM5N0VENDNFOTVDRjUxQjUKLToxMDI4RTAwMDcxQTU0M0UzREJFRkJCNEE2OTlDMDVDOUJFNDc0MTBGQjUKLToxMDI4RjAwMDlERkM2REM0QUIwMkZDMzlDQjYyNjFGOUFDRjEzNUU3RUMKLToxMDI5MDAwMDVBRjAyMUJERkM2QzhBQTQzNzdEM0Q1NkY1QjJCQUMwQTEKLToxMDI5MTAwMDNGMUVENUU4NzM5NUFCQzg5MTZGOThBN0FEQjc0NUMzNzcKLToxMDI5MjAwMDU3OTEwMzc4REE2MTJGM0E4NEYzQTU5REJFRTNEQzNDMkUKLToxMDI5MzAwMDkwMzhDRDAxM0Q4NUVBNTlEMENGQTk3QURBMzE3NkY0QzUKLToxMDI5NDAwMDNCQzMwMUZDMkVFQTU1MzIwMUVEMTY4QkRBRDVEODZGNjgKLToxMDI5NTAwMDhCRDdBQjIyNjhFMEFCOEQzNjM5RUVBMjRCMTEyMjE4MzMKLToxMDI5NjAwMERGMzVFRTIyNUEzRjZFN0YyOTVBMDRFOURDNkQwQzk3NjEKLToxMDI5NzAwMEY1MUFBM0U0RkU3OTIzNDVFRTlGMEZCNUY5QjQ2OUY5ODIKLToxMDI5ODAwMDdGOTlBRjdCQ0M3Q0ZENUNFQzFGQjY5NjQ4RkVGRTQ2ODMKLToxMDI5OTAwMDBBRjU1QkE1QjQ0RTQ4QTFGOUFENEVFQ0IwMDNCRkE3NTQKLToxMDI5QTAwMEVBNUQyMjk4Njk4MEY3QjI3OUM2OEJBMDYxRENDRTdBQTUKLToxMDI5QjAwMDk3MUMzQzlGQUVGNTcwMzNGQzVERjM3NTMyMUU0RUQ1MEYKLToxMDI5QzAwMDI3MzIxRTdCRUUzRkM5ODRDN0FFRkU1MzRENzhCQ0JDOTgKLToxMDI5RDAwMEZGNEMxRUZGNTQ3REQ2NzdGNDNGQjQ4N0ZFREQyNkY4MEEKLToxMDI5RTAwMEJCRkE0REU3NzFDNTZFREY0MEYwOTczQjVEQzQwRjk4QjEKLToxMDI5RjAwMDZFODg1RjUwQjk1REYxM0Q3RTM1RTREQjhGQzIwNEU0NDMKLToxMDJBMDAwMEJFQUZDMjdEODM1QzA2RkVGMDBEQ0U2NUQ2RTc4MjQ5N0YKLToxMDJBMTAwMEUwQjc3RUQxQ0M2OUNERUU4QjEzRDBERTREN0MwMUZCQ0YKLToxMDJBMjAwMDQ5MkZBRjExRUQwQzI3Rjg4NUU4ODMzNUI0QkFCOTdDOEUKLToxMDJBMzAwMEI3NkYxMEY0MjIxRDhFNEU3OUU2NzVBN0RGNDJGQjIwOUEKLToxMDJBNDAwMDZDREZERkEzQjE4RjJGNThEQkE3NzgyODZERDlBQjQ2OTkKLToxMDJBNTAwMDFBRjc3NTdDQUFBNEE3QjEwM0JFQzg2REE1RUZENTY4MDcKLToxMDJBNjAwMDQ3N0NFRkI2OTc5NzBFMDI3RUFBQzNEQTczMDFGNzgxMEYKLToxMDJBNzAwMDk3RkY5NjhCNzNFNEFCN0Q0QjA3RTJGQjM2QUFDRkYyNTAKLToxMDJBODAwMDg3QkRCRERBNjNFODJGNURCOEZDOTY1MTVEQTkzMzU1NkIKLToxMDJBOTAwMEVFRkZEMEVGREJGNjM1RjQwMzFDREI4OUJEMDk5MjBCQUEKLToxMDJBQTAwMEFCRUIyQTBBNEVDNjgzMEQ3OUVGMDdGRjEyQzRCNzU4NjUKLToxMDJBQjAwMDFGREEzRDVEMUQwM0Y5RUU0MzkyNzkyODNGN0M4Rjk0MjgKLToxMDJBQzAwMDFCODYwRjEwMDE0QjBBRTRCRTBGNjc4MzRGNTQ4RkIwNzMKLToxMDJBRDAwMEJCQTAwQTQ3RTQxRDYxNzkzQjYyODRDM0E1NTBGREJGREEKLToxMDJBRTAwMEY3OTdFM0RCMjEyRkE0QTE3RDYxM0NFOEY5Q0E2NEYxRUIKLToxMDJBRjAwMEVGQzk2RDFCNDJGNjRGRjBCREVBRUQzNDVFOTVEQTNBNTAKLToxMDJCMDAwMDY1OUNDMkZCMjgzRjE1N0NGQkFEMkZERUQ2RjRENzA0QjUKLToxMDJCMTAwMEFDQ0YwMTlDNkIwNENGRkI1QTNGNjVBOUJFMkI1MENGQjUKLToxMDJCMjAwMEU3NjhCREU3MEFBQTM3NzM1NkRGNjRFODQ3QzU5QTdFQUYKLToxMDJCMzAwMDI2MjYxMTUyQUU2NDdFOTQwMzNCQzhFNUU3QjZENDgzRTMKLToxMDJCNDAwMDVFNTI3QzNFRTBDMURGRDdFMUMxRjkzNTM0NDkzOEZBNDUKLToxMDJCNTAwMDEyNUU0NTYyMjA3NTFBOEQzQjIxRDVBMkRCMEYxNEMwOTEKLToxMDJCNjAwMDNENDQ5QkUzMzNGRDVBOTZDN0YyMzkxOTg4MDMxREZEOTYKLToxMDJCNzAwMEIzRTM0RTRCRjU0RTA2RkM3QUZEMEY2N0NEQ0JGMTc1RjYKLToxMDJCODAwMDczNkVFOEYyQkNERERFQjIwQzcwQjY1NzM5NTk3RkZDQ0IKLToxMDJCOTAwMDAwNDVENEVFODk1OTYxNDEzNTFBN0E4QTczMERGNEY5RUEKLToxMDJCQTAwMEEzOTEwQjBFRjYyNjdDOEM4RkYyQ0Q0M0ZGQjM2RkJDNDYKLToxMDJCQjAwMDdFMzVGMkNBODE3OEY3NzJEMDczNzFFQjQ4RDZFRkMyRDYKLToxMDJCQzAwMDdEMzdBM0JDRDJFMTFCOTg0MDUzM0MzN0MwMzcyODA2NjEKLToxMDJCRDAwMDg3N0M1MUJDNUMyNzUxOTQ1M0Q0MkRGQzEyOUU2MjQ1RDYKLToxMDJCRTAwMDhFREYxOEU1MkI0NzNGQzU5NjIzOEY1RDgxNkZENjIzNzcKLToxMDJCRjAwMDZDNkYxMDhEQkRCOTlGNzM3NjUxREU5REZDQUZFM0UxMjQKLToxMDJDMDAwMDk4MzY4RkZEMzY3MUVEMjU5QURGRkU3NTMxOUUwNjgyNkUKLToxMDJDMTAwMEI3RUNDRTFCMTdENDUwQkFEMDUyOTQxMDU0NEQ3MERGN0QKLToxMDJDMjAwMDk2NEE1RDU3RkE4QjA3RjYyNTc5RUU5QzREODNCQjRFOEQKLToxMDJDMzAwMDgzREJFQUNBMzRFRUU3NTBCODFCNzQ3OUU1MTcwQUVCNzgKLToxMDJDNDAwMDgzRkM0N0Y5MTdGREIxODFCQjI5MUY2NkI5RjhDMTc0MzAKLToxMDJDNTAwMDlDNUIzOTE2QjY5MzZDODhBMEJENDU3QUU0M0IxQTlDMDAKLToxMDJDNjAwMDhGRDJCRTczQzRGMUY3MzVGODlFMTgyMURCMjczRTY4N0EKLToxMDJDNzAwMDA5QzA3RTUwMzQ3NjBGQUZEMzEzRDU0RThGNEE2MzE1RkIKLToxMDJDODAwMDBCQjcxRDcyNTBBOUYwQjJGRUZDRDczMTdGREJENzRBREIKLToxMDJDOTAwMEYzNkE0RUY1REQwN0JDREQxQzZGNDlGRTgwRTFGMDBERTcKLToxMDJDQTAwMDlEMEE3OTZCQjQ5Q0M3M0Y5MDM3NzkxRUQzODRDQkM2RkQKLToxMDJDQjAwMDQyOTk1ODZCODFGQzMxQ0QyNUE3QjI1MDkxRkI2M0JBODQKLToxMDJDQzAwMEYwREEzMERFNENFMUUzN0FFRjlEQjc3QkExNEZCQzA3MzEKLToxMDJDRDAwMDVEODhFMEJFNTFGOEY5RkIxQzExRTA3NDlFMDg3MkZEOUUKLToxMDJDRTAwMDlCNDQyQkU3NzU3QzEzN0REQ0RDNEJEMkM3Mjc3RDU0REUKLToxMDJDRjAwMEM2RkY1NkMwRkQ2RTY0RUU4MDNBOUFDN0Q0ODcwNjY1NUIKLToxMDJEMDAwMEIwN0VENURDOUJGMUYzNUQ3MDRGRDVFODg2RjZFRjZGQjIKLToxMDJEMTAwMEIxOEVEOEJGMzNBODlGNjkzNzg0RUNERkYxQkRGNUY1REMKLToxMDJEMjAwMENDRjg0N0ZCRTg0ODQ3QTdGRUU0RUM0Qjc4Qjg0RTVCOEQKLToxMDJEMzAwMEQyRUJCQzRCNTk3RjEyQzJDNUYyRDE4RkI0N0Q1QkE4RDgKLToxMDJENDAwMDNBNDUyRjVBOUYyMzZFRDI5NzA4OTY4OTYzOTYyNTYyM0IKLToxMDJENTAwMEJFQUZBRjEwNkYxNUQwM0FCRTNFNDYxNTBENUNEM0NCNUIKLToxMDJENjAwMEVEQTY2OEZENERFOTNGRTEzM0Q4NUIwRjhCNjBBRkUxMjUKLToxMDJENzAwMEQ0QUVGMDkyRUZENTE4ODI3QjhBQkFCRDMxOTZDQTI3QkQKLToxMDJEODAwMEY2MjdCREM2QzBFRkFFRUZCNUMzMEFGREVFODY3NEYzRkQKLToxMDJEOTAwMEY3NDlEOTY2RkQ2N0IyNjg1MjMxRkU5NEUxRTY3QUZCRTUKLToxMDJEQTAwMDgxMjdBMkIzRjc1M0E1RkUyMjg2ODgyMURGRjI3QTBCOTIKLToxMDJEQjAwMDhCNzEzRTFEOTMyRURBMkYxMDFDMTE2OUJFOEZCMTJFMjAKLToxMDJEQzAwMENCMjdGRjc1MDFDNjE1NTYzOTlGRUFCNzU1QjZFQjFEREYKLToxMDJERDAwMDI3Nzk4QjI4NTA5Q0FDQTc5MzIyNTNDQTI1Qzg3RjRBRDkKLToxMDJERTAwMEYyMDNEMkQzRjU2RTRFQ0ZEMjc5OEZGMkYzRjUxRUNFMjkKLToxMDJERjAwMDE3QTQxNTlENDBCRjI1NkIzRUI3NjI3REVFMEM5N0Y4N0EKLToxMDJFMDAwMDJFNkY2OTlBMDBCMDJBNzZCNzFDNDQ1QTE2MkM5QTgwMDUKLToxMDJFMTAwMDYzNzZEMUExREE4MzQ4RUZFQ0Q0REI2QTU5QkVEM0UxMDMKLToxMDJFMjAwMEJFNDVBM0QzNUJBMkE2RkQzMDg3RDZFMTk2M0RBQTg3MTcKLToxMDJFMzAwMEYzMDNBNjREOUZEQzBCNzkxQkU3N0JBMkEzQUE0QjQ0QUYKLToxMDJFNDAwMDMzMjQ1NzU0QUJERTJGMDE5Nzc3NkZEQkMxNzg5QURGQkQKLToxMDJFNTAwMDI3RjVBMzE4RUVDRkVBQkQwQ0Y3OTlGQTg5OUM0RTRBRTQKLToxMDJFNjAwMDJCRkExQkU4Q0MyQjNFNjc3OTZDRjJGNjM2NkIxMkQ1NDkKLToxMDJFNzAwMDJGRjQyQTVFRUNEQjZCQkQyMjEwQTBGREI3REUyNkNGNUYKLToxMDJFODAwMDgxRjU3NDBFNjAxRjhGQzk5OUY2RThBRDAyN0NEQTY3OTAKLToxMDJFOTAwMDRCQTM3MTY2REVCMEE0MTBFMzRDMTk1NTZDNDVCRDFCMDUKLToxMDJFQTAwMEJGMjExOTIwQTU4QjRFQkY4QkVFRjVGOTU3NjlFQjc2NDQKLToxMDJFQjAwMEVFNjU4NUYxRDhCMTMzMkQwNjcyQzFGMjVENjk3RDkwNjIKLToxMDJFQzAwMDEyQkZENEY1REQ0OEUwQURFMzkyODVFMUVDMzgxQUMxREMKLToxMDJFRDAwMEZBODZERTZFRjlBRTQ4RTYzQkNCMDdEODAzQzI2MEI3OTAKLToxMDJFRTAwMDNDNDNFQjJDMENGMkU2OTk2NzdFRTIzNjlFMkI2N0UyQzAKLToxMDJFRjAwMDVBQkVGQTE4RkNFRDJGOTJCRjkxNjQ3M0VBMTFGMEJGMkQKLToxMDJGMDAwMEZFRkQzQ0EwOTNGMzlBOUM0RDdBNDYyNENFQkY2QUNEMzkKLToxMDJGMTAwMEFFMDhGRTg0RkM5OTA4NjlDRjFERjk2Q0QyNThFQzJGREQKLToxMDJGMjAwMDhDNDcxQzRFRThGQzJCRjNEOTg3NTI3RkVFRUUxQTZGQ0MKLToxMDJGMzAwMDVCQ0JDMjhGMUZBMUZDQjk4MEM1NkZBM0YzRTk5QzY4NkUKLToxMDJGNDAwMDM5RkYzQkYwREZDRDRFQjZFQkREQTkxMDNDMzg3RkI3NDMKLToxMDJGNTAwMEY0RTM3Qzk2NjI4REE4QzNGOTJCMDJCQ0JGQjMxNEI3MEYKLToxMDJGNjAwMEI1OEVGODU1RTU3MzBGRjcwM0ZEQkQ0NDM4MTg0NUU1RjgKLToxMDJGNzAwMDJGQUQ4QjY0N0VGNjkyQ0Q3M0FDMEVGRDNEMkFGQkZCMkMKLToxMDJGODAwMENEQkQzRjNEQkUxQkU5M0Q1NUY5M0ZDNUYyQTRDNTMxNUUKLToxMDJGOTAwMEZFQ0I3RUI1NjQwOERBRDNGOTJFRkE1MjdGNEZCRkE4NzQKLToxMDJGQTAwMDA0QzM2OTNGRTczNEVGNUZEOTk3RTAxQkI2QTFDREQyRTgKLToxMDJGQjAwMDhGRDJCQ0NENEEwM0QyQTEwMzZFMzgwNEJCRjMwRDY5OTYKLToxMDJGQzAwMDZFNkU1RkIwM0Q0NTREQzIzNkVDMTdGOEY4MDc3Q0VFRUIKLToxMDJGRDAwMDlCRTU4MUVDRTZDRkM3RjYxMzVENzJDMTEwQTVFNUY0NjEKLToxMDJGRTAwMDQ2ODIzNTJDRjk2OEJFOEZGMUQ3QzRGM0Q5QjU3N0ZBOEMKLToxMDJGRjAwMEZCRjMwNEU2NDExMjA3RTAyRUI2N0JGODFDMEFGODM3MTMKLToxMDMwMDAwMDYyM0RDRkY5QjIzQ0FDRDcxNUY5MUYwNjlEOURGMzI1NjMKLToxMDMwMTAwMDc4NzAyRUJENDA3QUZDNTVBODdGQ0NDQUYzN0M3MUYzNDIKLToxMDMwMjAwMEJCRDFCMEVCQzQ5MDdFMUMwRTdGNDg1RUZCMDRENEFGRDYKLToxMDMwMzAwMDFBRTAxNjdFNkEzRkUwQjFFQjI2MDIzRkQ1M0I3NzZEODIKLToxMDMwNDAwMEU0N0UyQTFEMUVFOEI5RTVCQjJFMUU0QzgyOUM3OEJEOEQKLToxMDMwNTAwMEYwNjQ4MDBFNzdDQUZDMkZDNzdCM0QyQTREQjU3Q0UzMTgKLToxMDMwNjAwMDk3MzI3RkE0ODhGMzQ1QTQ3NTVBNTFCRjU0Q0E0NzBGQkQKLToxMDMwNzAwMDY5RTc5RjY4Q0Q2NUZFQzhBNEVERUU1QUFGNUY1MjMxOTcKLToxMDMwODAwMENBRDdBN0Y4RkJDMkFFQUQ5RjlCNzRERTU1QTU2MUFCNTYKLToxMDMwOTAwMEQ4NjVGQjIzNjNFNzI1MzM1RUJFRTc3OTY3RDdDRTJEN0UKLToxMDMwQTAwMEJEQkY4N0VDQzIxRjRFRkRDMDZDMDMzQkZBMDZCQjNDQTQKLToxMDMwQjAwMEE3QjcxMDdGMDFCREU4RTczNDhERkIwQkVDNUY2QUVGMkIKLToxMDMwQzAwMDA1M0Y0RDUyOTU5QzlEODQ4RkE0ODdDMjU4Q0VGOEJFNzMKLToxMDMwRDAwMEUzQ0Y4RTU5Q0RFN0I2MkU2N0Q1NDQ0ODNFQzg2NzA1ODUKLToxMDMwRTAwMEI1NUYxOEU1QkIwQkYzNUJBODlERjNDMkVBQ0U4NjFDNjcKLToxMDMwRjAwMDMyMjNDQTdCMzdCRTU3M0FEQTkzMzEwNzNBM0ZFRjQ1NUUKLToxMDMxMDAwMEJFNUEyNUI5MkJDRDIwNzczOUUzQkVEN0Y5NTkxN0U1M0IKLToxMDMxMTAwMDZEQzY3Q0JFNkZGREIxOTEwNDY3MEM1MjVEQ0YyMkFERDAKLToxMDMxMjAwMEEzNUI3RTlDQkFCRDA1RkNGODgxMzBDOThGQTMwQTk4QzkKLToxMDMxMzAwMDFGRTlGMzBCRURGRjE1REFGNzNFRTIzM0FGRDE3OUUyODkKLToxMDMxNDAwMDIzREM4RjczOEVCMUYyN0FCRTZBQTkzQzQ4RTc3MEExODYKLToxMDMxNTAwMDFDMDE4NDZDOEQxRENFNzk2RjE0RTE2RkJDNTMxNUJFQkMKLToxMDMxNjAwMDZFRjQ0NTNEQTVGNTdBMUVGODk5RDAyQkQyNTRBRkIwMzgKLToxMDMxNzAwMDU3QUMxREZCRjdGQkNFNUJENUQ2NDc4REQwRjlBOUJCNkQKLToxMDMxODAwMDk3NzA3NjM3NkYzOUNGNUJDMjQ3RjQwMTVFQzYyQURGOEUKLToxMDMxOTAwMDZGQkUwRTVCRDE0MUFDQzMzODY3MUU5RjhCRTM5QzUzNUYKLToxMDMxQTAwMDhGRjkwNEMzN0YxOERGNDNFNzE5M0ExRkUxRjg3RUYyNzUKLToxMDMxQjAwMEQyOEYxNUUxQjc2MEZGN0Q2RTY3RkJEQTVFNUJFQkQzMDQKLToxMDMxQzAwMEJGMjU3Q0VFNUQ5MkVEODE5REU4MDVGMDVFRjBDRjY4NTUKLToxMDMxRDAwMDNCQ0JCMzdCQTM4NDFGN0M2NUVGRDQ4NDAwRUM0NTJGRUQKLToxMDMxRTAwMDQxNEYwNERGRTgyRDY0NzlCOEFDQkY3NzBFOTU1MzdGNkIKLToxMDMxRjAwMEZEQzI2ODVGQzA1RTM0MkY0MkVCOUYwNjQ2RkIxNTdEMjMKLToxMDMyMDAwMEI4N0Q4MzUyRkI2NjBFREFBRjg4NjRCRTczMzQyMEY5NTIKLToxMDMyMTAwMDc4NzM2QzcwOUU0QURGOUIzRkNGMTRBODc3NTQwNEQ2MTYKLToxMDMyMjAwMEE0QTJERUVERDI1RjQzRTU0OTM1RDQ2RkYzOTIyMTEyQkIKLToxMDMyMzAwMENFRkY1MUY5REM2OENFRjNGNjhENzMzMjFGNjdGQjRDN0QKLToxMDMyNDAwMEYzNTQ2RjVGRjhBRjdBNjlFQkQ1QkM1MTk2Rjc4MzNEQzUKLToxMDMyNTAwMDE0RTUyOTk0QTdGNDYzOUJBQzNGNTdBQkY3OTE0Njk3Q0QKLToxMDMyNjAwMEI0Q0Y5OTBGRjhBNjQ0NUE0MUU3RkREMjRCQzJEMjk5ODgKLToxMDMyNzAwMDI5NzlGQkMyRUZGMzQ4NTkwNkRCMjhFNzU2NUM5RkMyNjkKLToxMDMyODAwMEY0QTNEOUNCNjY2QjdDNUJFRjBGMEQxQzIzMjEyRkNCRjYKLToxMDMyOTAwMEJGMzkwQkI3ODQ4MzlFNjc5Njg3Qjc0MUVFM0I1QUJFMTIKLToxMDMyQTAwMDMyMEE3QUZCNEM5RjFBMEM4MzVDMzlBM0QwREIyOUFGMUUKLToxMDMyQjAwMEE1NjI1Q0FGMUNCNzRDRDdGRjgyQTVDMEVCQ0JFRDBFNkYKLToxMDMyQzAwMDcxMzdDQkY3QzEwMkEzM0VBNUFGNkY1NUNCOTg3OEEzNUEKLToxMDMyRDAwMERFNUM2MTI3RkU0MkYwMkNEMUY2NkQ5QUQzRDczQjdEQTAKLToxMDMyRTAwMDA0RjRFOUVCRTM4REZBRjRBNzY1MEZFNEYyRkVEMkM2MkQKLToxMDMyRjAwMDNCNUJFRjhEM0Y5OTBFQjk2RDIyQTdGQTc4OUQ3QTBGNEYKLToxMDMzMDAwMEQ2NERFNzU3QTA5N0RCMjVCRDA4NkJGQjQ3OEIyOURGMjAKLToxMDMzMTAwMDMwN0I4ODA3RjZFQTg5RDMxQzRDNkYxRDJERTEyQzFGRUEKLToxMDMzMjAwMDM3Q0M4RUYwQzI2RUQ3QjAyQjhDRUQwNjM3NkJGQjgzOUIKLToxMDMzMzAwMEY0MjhBNjFCRkZCRTI4RUVBN0QyMkVGMzk1Q0Y2NTMwNEEKLToxMDMzNDAwMEREQkM2MDBGM0NCOTE1RTUyRjg3QjM3RkI2MzI1QThFQ0UKLToxMDMzNTAwMDVCRjlCQjI0OEQyRUJEMjlBQjdBQjE1RjhFRTlBNTMyMTYKLToxMDMzNjAwMEMyMURDM0U1QkY4RjY3N0E3QTM2REM1NzAwN0MxMjdEQjkKLToxMDMzNzAwMEIyNURCQ0QyMUVDQzhDMjVGQzFGRDNFODBGN0EyM0ZCOTgKLToxMDMzODAwMEY1NkFBMzk4NkU4NTk2RjdGRDNDOUVGNTM4OTI3Rjc5OTUKLToxMDMzOTAwMDNDREY3RDQzMzlFRkIzN0JGQjJFQzQzRTVBMUVDOUYwQTAKLToxMDMzQTAwMDFDNzNDOUYyNjM5NUIxQkMwRkU2REZCN0Y0MzBGQ0M1RkUKLToxMDMzQjAwMEM3OEFFQ0JDNUY4RUVENTU1OURFRkE3MzlEMUE4NDlGNjcKLToxMDMzQzAwMDVCQTdDRjlBMjVDN0RGODZGOUE4QkFFMUEzRTREREQ0Q0QKLToxMDMzRDAwMENGRkM5NTU1OTNEMDZFN0VDNUVENTM3MERFRjY5QUY2MTAKLToxMDMzRTAwMDI5RkI2OTQzRjdGM0ZDNEFCMzdGRDQ5N0VFOUQ4Q0Y5MzAKLToxMDMzRjAwMEQ1NjQwNzc2MUNBNDdFMUU5QzczNkExMUQ2RDM5RkVFRkIKLToxMDM0MDAwMDlCODZGNTNFNkY2RjdERTE0RjA0NzdFQjhBM0ZCMjVFOUUKLToxMDM0MTAwMDc0N0RCNDZGMjZCRTVGRDhGMzFCQUU1RkJERjJCRjE2REUKLToxMDM0MjAwMDQxQ0VBRkI2NEE3QUQxQ0ZFMzFBOEQ3RTQ1ODY2RjFFNjQKLToxMDM0MzAwMEVBNTdBRTdDOURGNTgxQzhFQzIzOTI3RkRFRkVGREY4NTUKLToxMDM0NDAwMENFRTlCRDVCNUU1MEE4REREMjg4QkRENTlDQUE4MTVDNkIKLToxMDM0NTAwMDlDNkI2Nzk0NjBCNDkyMDY3QzRBM0RFREFDMkIxODhENTIKLToxMDM0NjAwMDc1RjE1OUE0OUNCODc0NUI4ODFGMTg0QjkxQTBEOTdGNDMKLToxMDM0NzAwMEE4REREMjE2MTlCRjQyRjI4MjFERjQxOTVBN0YyOTdEQTgKLToxMDM0ODAwMEU3N0FERkYzN0I4NTY4OTFERjYzNzdERjdCQjU1Q0Y3RjUKLToxMDM0OTAwMDYwNzAzOEZDQUUxOTlCQjBFRUU3NzZGRDI2RDNFODc3NzYKLToxMDM0QTAwMDBENEQyRjg3NTdDRUZGQUNCNjVGQ0VFQUZCNjVCNkJEOUMKLToxMDM0QjAwMEQzNUUwMEI5RUJGQzMzN0Q0Qzc0NzZGRUM5QzE5QzNGRjIKLToxMDM0QzAwMEFEQjQyQjExNEE5NzdGNTc3ODVBNDY3MjdDOERCNzY1RjkKLToxMDM0RDAwMDI0RTRFNzA3QjVFRjRCRTM1QjQ2ODJBRkU5N0M0RTM4NjcKLToxMDM0RTAwMDVBNzI1OUZGQ0Y2QUM5ODVCRUFCRjM0NzUxRDQ5MkM5MEUKLToxMDM0RjAwMERGMDMyRDk5NjhGRjgyNDVEQTUzRjg4RkUwQTg3ODNBMDgKLToxMDM1MDAwMDY5RTNEREQyMEZFMUI3MEM0NzdFRTgyNkU0RjU3MTFBRDYKLToxMDM1MTAwMEMyMjUxRkU5NjlCRThGQTU0QjNCRTZGOTM5RjY5QkJENzUKLToxMDM1MjAwMDU0N0ZEMDdBQkJBOTdDNzBDMDlDREY5QTJFRURFNzAzNTQKLToxMDM1MzAwMDQzRTI2RkZBQTlFREZCQzM3MDhFM0MyMUJBRjVENzNGODkKLToxMDM1NDAwMEEzOERGM0Q0NTM5RDcxM0NBQUE2Q0YwQUI3NEUxRjZFMkMKLToxMDM1NTAwMDI5REZEQjgwRUY4RjNBRjE3RDZCMTJGMUU1QTU5ODYzRUYKLToxMDM1NjAwMDJBQ0Y1RjlFNjc0RjQ5RkJDRDBCNzlCRTI0OUMxN0U3OUUKLToxMDM1NzAwMDgxMTc4MkZGODU1OENBNjc0M0JFOTI3OEQ1RjMzQTNFRDkKLToxMDM1ODAwMDQzRTdCRkYyQTM0NTQ5QjBERjdFOTRBRURCRjkzQzdENTMKLToxMDM1OTAwMDQwOTczQURFMUE2Q0E0RUY2NDQzM0YyRTJGMzg2OTg1QkEKLToxMDM1QTAwMERFRUM0OTJDQjMxQUVDREFFQkYzMUNEODU3OEIzN0U0N0EKLToxMDM1QjAwMDM5OEM3NEQ2QjBBREUwMTA0OTFDRTJFQzM2QUIwNzIwNzQKLToxMDM1QzAwMDM3NTgwM0Y3NDI3RTZGRDhBNkI2RjgwNTk3M0JCQzU0MzAKLToxMDM1RDAwMEZGQUNGM0MwREJBOEI3Njg0MzZDM0VFNDZEQkRGREUyMTEKLToxMDM1RTAwMEY1MjMxMkNCMEM3MDBFREQ2NjVFODc5QzE2NzM3RUQ4QjkKLToxMDM1RjAwMDZFNzNGRTA0Q0U4MERFRkY3Q0JCQkNBMDM5NUY3MEM4NUEKLToxMDM2MDAwMDlDRkZFNDgzNUI2NzgxOUNDQjU1RkZCRDJBRjQ4OTNGMTcKLToxMDM2MTAwMDREMzg4NEYzRjFEMzE3NUU4Q0M2RkEyQ0ZENEJEOTQxOUIKLToxMDM2MjAwMEU4NDlBMTcxMjJCNDZFMEFGNDA4RkY1Njg1RTlFM0IyQjUKLToxMDM2MzAwMDc4OTExRUY4ODExRTBGODE5RDYxQTQ5MzBBRTEzRjY4NzUKLToxMDM2NDAwMDREQjlCQ0ZFMTlEMTMyQ0I0Qjc0NTU1OUI3QkNFMDY0QUYKLToxMDM2NTAwMDQxNTdCRjU3QjZBQ0IzNDNDRTBCMURCN0E3RkQyRjlDNDgKLToxMDM2NjAwMDVFMzdFQzZBQzVBMzY0RDk1NTc1NjNDNTA5RjgyREQ2RDQKLToxMDM2NzAwMEJFM0IwMUY0NTdGQzRCODVFNThBRTJFNzA3QkQwQUJFNzUKLToxMDM2ODAwMERGQjY2M0NFMEQ5Q0NFOUFDOEY4RDBFRDdEOEJGNzJBQkQKLToxMDM2OTAwMEMxMjhDQUJCNDY0OUJBNURCODVFNjE3REJEQTREMTFDRDQKLToxMDM2QTAwMDQ3NTdCNjM2MjRERUE2RDk1Q0JFNzhGN0ZFRkY4NjlGNjQKLToxMDM2QjAwMEJFRENGMTE4QzczMzVDMUUyNzE4NzgwNTdBNUJDNUE3RjYKLToxMDM2QzAwMDgyRUQzRDE1OUJCRjBEMzM5N0NCNzkyREQ0RTdFMUJGM0MKLToxMDM2RDAwMDk2RTNFMUFFOTI1NTNBQ0ZCNzkzQzhEMEY5RjA0QjU3ODUKLToxMDM2RTAwMDUxNkEwNkUxRkRBQUU2OERBQTk0OUJCREM1RUM5Nzc1Q0IKLToxMDM2RjAwMERBMzlDRUIwQ0EyMTgyOTEwNENGQTEyOEJCRDc0NURGRTkKLToxMDM3MDAwMDJGQUU4RjYyNzk2MTUxMThDOTlGRjk5QzhBNzA4RTQzRTAKLToxMDM3MTAwMEY0QzRBMEREQTk3NzU0OTY4M0FBRTIyNTFFQUExRTU3RjkKLToxMDM3MjAwMDAyQjBDNTU2QzE0ODhBRkMxMzMyQkYwNERFMjY1NUQyMEEKLToxMDM3MzAwMDhGRDcwMDNGRDZDRDk4MTc0RDUyNkZBQkI0MDZGNzAzMjUKLToxMDM3NDAwMDJGOURFN0MwMzY3M0JENEE5QUU3RDEzOEM4NTlFNkVGRDYKLToxMDM3NTAwMEQ1QTI5REVCRDdFQ0ZFMzZDQ0Y4REQ2MERGNjU3RDUyNUYKLToxMDM3NjAwMEQ3NkI1NUM4MzMwNEE3N0E0NzA0Q0JCM0M0OTgyMzQwMUEKLToxMDM3NzAwMDU3QUIxNEVGQzMwRTE1Mjk5REUzQTBFRjI1NEU5NjJGRUUKLToxMDM3ODAwMEU2NkU5NEU3NDczMzhDODM5MDgzRDcwRDY2Qjk2N0FFQjYKLToxMDM3OTAwMEUyQ0QwNEJFQzRCQTcwRDZBN0E5REMxRkRFOEJFNTY0RjcKLToxMDM3QTAwMDk2NDM0ODRFNjYzOUFBN0Q4RTlERTMxMjlCRjM1QTgyNUEKLToxMDM3QjAwMDkwQzc5QTFGNDhGMUQwMEEzMjdGRTRGM0U4OUU3MDk2RDIKLToxMDM3QzAwMDdCOUFBNzRBQjlBNzc5NUQxRjZFRkYzMTQwRUIwQjM5OTEKLToxMDM3RDAwMDVBRTJCOUY5OUUxQzFFQjc5RjJBREI4OTNFNTIwRjIwODAKLToxMDM3RTAwMEI5M0ExMzdBMDJDMUU1NDFCOTJFNDc2N0M1RkE0QUIwMjIKLToxMDM3RjAwMEVFRkFGQzlCNjNEQkEzRTBDNzEyRTVGMURGNEI2RUQ4NkEKLToxMDM4MDAwMEEyOUQ4N0VERUJDMjAzRjA1MzlDNTQ4QTBFNUEwQ0Y2MkUKLToxMDM4MTAwMEE5NUIzMkU0RjkzMTcyQUM3N0FCNTY4RkZEMTk2NTk2MkUKLToxMDM4MjAwMEE5NzdGRjgwRTAyOTdCRDBFMjZFNDhFOTVBMDdFMUY1RUQKLToxMDM4MzAwMDY2NjJGRTI3RDc4NUU3ODNFRTQ2OEU5NUY2QTc2Mzc5MDUKLToxMDM4NDAwMDkyOUY0NzBFMTcxQ0JGNzNCQkQ2RUZFRDE5MTY1MzlBMDQKLToxMDM4NTAwMDE4NDFGNDQ4RkQ5QzJDOTRGNkVEQThFMTQ1NkMwN0E0QjIKLToxMDM4NjAwMDM1QkFCOUJCMzg5MDM1MTlGMjlDMkFCMzE3RkRGRTlBQzgKLToxMDM4NzAwMDZFRTBFOUE0OEJGMTUyREUzREI5NENEOTI0RTFGMjcyM0QKLToxMDM4ODAwMEJDREZDODVGODVCM0ZERjBBNDc2REVFOEVCNDE3NDM0OUQKLToxMDM4OTAwMDgyQ0Y3MThEOUZBREQzRTg2NjVEQ0Y3NDYzQTI4QkI5ODMKLToxMDM4QTAwMDkwQjc0MTM3NzNFNEI5RDg0OTU3REFGQTEyRERGMDdBQTQKLToxMDM4QjAwMEI3MTM1RDQ4QkExMUUyNkJCNDJGNzQ0Qjc5M0I0NERGMDgKLToxMDM4QzAwMEVBRDRCNzdCRDBCNzg4MEU5RUM4RTg2REE4MTc0MjA3MjgKLToxMDM4RDAwMEMyMUExOEYxOEZGQzJDMjVBMzYyNDcyQUI0MDQ0OTU2NUEKLToxMDM4RTAwMEUxNDdEQzJDQ0U0NkM2RDc1REQ2QzA0QTgyQTdCRjU1N0QKLToxMDM4RjAwMEFFQ0IwMEFCQTQzQjNBNjVGQzExRjk1Q0RGOEJGOEQ5ODkKLToxMDM5MDAwMEUyRkIxNzBCMkZENTJGNEUxMjZDQjc0QTI3RjkyNjI2NEMKLToxMDM5MTAwMDhFREIwOUE0NzAwN0FBQjBFNzUwOEFGNkM1MzFCMkZGNjIKLToxMDM5MjAwMDYyQTI2RkM0QjM1MTdGNUU0QjlDQzZEQzQ2QzI3RjJBNDUKLToxMDM5MzAwMDU4N0U0MEZCRTg3QzZFRUZCN0M4RjY1RTJCQTUwM0QzM0MKLToxMDM5NDAwMEU0M0U2QTVGMTVDNkY4MkJCRTczNDAyNkU4NjREMjU4ODEKLToxMDM5NTAwMDMzOUQyNDY2NEEzOTQxNEYxQjMzRERCQURDOTAwODdFMjMKLToxMDM5NjAwMDUwRDIzODk4Q0Y5OTg2RjBBMkFBNUREOEE3Q0Y0ODdEQ0IKLToxMDM5NzAwMEEzNzhGNTREOTM0NzAwQkU2N0UzM0REOEMyQTdBN0VDRjcKLToxMDM5ODAwMDYwRkY0QTQ5RTM5QzFGN0YwODNENjU1QjM4N0ZERjk4RjUKLToxMDM5OTAwMEU5N0IwRjc4M0ZBREI4MTdFQ0EyMEYyNTMzNUZCMTI3NTUKLToxMDM5QTAwMDUyN0I1RkNCRDQ3M0JGQTM3NDhBN0ZDN0RCOTAyM0E2RkYKLToxMDM5QjAwMENDNTBCOUZFMTQyMUVEQjlBMjUxOEUzM0Q5RkZCOTM1REYKLToxMDM5QzAwMDkxRkE5QjNDNUFFMUYwOTRCNjcwNTdGMjMyRjg1NUI0MzQKLToxMDM5RDAwMEY1M0RBNkQxNzc0M0I4OThGRDlDMTM3MDBEQzg0Q0NEMkEKLToxMDM5RTAwMDg2MUY4MjI0RDQ2RUU0RTQwMTk5NUFGRDMxQ0EwNkM4QzgKLToxMDM5RjAwMDQzMDNDN0M5RkRBN0Q3NDczRkU4MzcyRDUzRUVCN0NGREQKLToxMDNBMDAwMEI0N0RBN0U3MDlBRjVDQkY2QzRENTg1QjVBMzQ1MjVCN0QKLToxMDNBMTAwMDcwMTBBNUYzQjJDNjlFMDM5Rjk5OTQyQTI2QUMwN0RFQzgKLToxMDNBMjAwMDdGQUE4QTREMEM2RjdCMzFGMzg1QTg0QzM3Rjg4MjhGQzMKLToxMDNBMzAwMDE0NTlBNkZCNkQ4Mzk5RUVEQkM2QjRCN0RENDlGOUI2MjAKLToxMDNBNDAwMDJEMzlEMjdFQTdFOUYzMEI1RDgyRTU4MkI2MzE5MkVGODQKLToxMDNBNTAwMEI1NkY4OTY0RkU3M0NDRDUxQTE1MjdFRDVEQUNERjk3ODEKLToxMDNBNjAwMDZBMjRGMUQ3QkE4NjdCRTEzNzJFNzVEQURCNzA3RTJDQkIKLToxMDNBNzAwMDdDNjAzQUZCRkI0QjlCNDlCRjQ3NUNGRDVBQjM3RTRGRDIKLToxMDNBODAwMDdBNzg1ODY2MzdGQTdBQTg1RTBFOUEwMTFEOTVBRDU1NzgKLToxMDNBOTAwMDk4MEUwNzM2NzhFQzdEOTlDRjI5MkVDQ0FGQ0MxOTRDRjcKLToxMDNBQTAwMDA3RkYyRkYzODQ3MzVDRjA2NTdBRkIzNzg0Rjc5MUIwREUKLToxMDNBQjAwMDFGMEIwRUJBMUEzQUM4RDcwQkUzMTYzNzE1QjM3RTFBODYKLToxMDNBQzAwMDk5RUQ2M0ZFMzU1MDI1QkMxMDFEQ0ZENEU4NkYxMkVDODQKLToxMDNBRDAwMEEwRTA0QkQ2RDZCRUQ4OTdBRjY1NjhERkUzNUM5OTRFQzEKLToxMDNBRTAwMEE2RUI3MEJFNkZEMDY2NzM2NTAyQkVCNjU1RTExNjlDM0MKLToxMDNBRjAwMEI3OTM1NjRBRkFBNjdERTdDMEJEODBCQkFDMjIwMkZDNTQKLToxMDNCMDAwMEUwQjhENjdFRkUwQTZCRDE0NkNBRjc3NzA4NkI1NDFDMjQKLToxMDNCMTAwMEU4MkI4RkU5M0I5MEU1RkIwQ0VCRjdFOTJGQzQyOEM4QjUKLToxMDNCMjAwMDBEQTU2QkQ3NDlCODM0RkExMEQ2MjNFM0UzNjk5QzRGNEYKLToxMDNCMzAwMEI3QTRFNEMzQUVBMEQzNTMyMDZCNkM3NkU2MDgwMzVENTQKLToxMDNCNDAwMENDNTA5ODFFNjgzRTg3NjA5RjlEOTc1NTkyOEY3MkZBNjEKLToxMDNCNTAwMEJFMUZGNDMyNjk2QzMwMUQ3MUQ4ODU2QTI1QzdBQjc2RkIKLToxMDNCNjAwMDI0MEEwRkUyODczQTQ0M0JDQjIzMUQyNDhGODAzRkVBOEYKLToxMDNCNzAwMDdDNDZFNzI3NDQxNzVFNDc0MkQ3N0FFQjdDNjU2QjNENkUKLToxMDNCODAwMDgxNDY3OERFNTZFRkUwRjRBOTdBOTdCMDEyNEZEODVFRkUKLToxMDNCOTAwMDlGQzhGOTY3RUJERDlDQjZENDY3RjFGN0U3RUEzRDlDNzcKLToxMDNCQTAwMERGNTkzRjhBRjMyRkQ0N0IzOUJGQkI3RTIyQTdCRkFCM0YKLToxMDNCQjAwMDJGRTJFRjg0MUZFNjRCM0FERkQxRjk5MzRFNUYzQTlGMzUKLToxMDNCQzAwMDBBQTVBQjA1ODQ2NkRDMzNBMEY2Q0MwRjc1M0U4ODc5NzgKLToxMDNCRDAwMDU4RjJCQkY4OTNCRUNFQTk0QTkxM0YxMUZDNTBCNENFMjcKLToxMDNCRTAwMDAxRkYyODU0Q0YzRUYzMjJFMUI5QTNEQ0M5RjFBMTFEQTYKLToxMDNCRjAwMDQyRjJDMTBFQTc4M0NGOEQ2NEJCRDgwREZCNDBDMzMyMDgKLToxMDNDMDAwMDZGREI5RDg2NzM3ODVFQjkyMkFDMDZCQUJEQTkzNjVDQkYKLToxMDNDMTAwMDU4MEQ3NDdENzM1REFDMjkzRkJGRUVGREQ3RkE1MEZGQTAKLToxMDNDMjAwMDNGOEJGMTJEQzJGQTFDQkJFM0Q0QTM3RkE0RUY4RkRGM0YKLToxMDNDMzAwMDcxM0EwM0VCNEU3MDZDNzkwOEUzREUxRUExQzFEMTJBMDQKLToxMDNDNDAwMEUxQkFERENFRjJEMkMwMDhBOTRGRTFDRjYxODg3MzJENzEKLToxMDNDNTAwMDRFODk3REZCMzcwNEU3MzE2RDFEMDZEQTVEQjM0NkMxNDEKLToxMDNDNjAwMDJFQjM0QTc1QURBNDJBMUY2M0JERThGQjlGQjVGNTJBQTQKLToxMDNDNzAwMEE5MEI2MzdDOTYzNDZBRkJENDE4RkY0Q0Y4M0NERTU3RTIKLToxMDNDODAwMEIwNUNBNzc4ODU4MDFGRTlGODJGRUM0MTkyMTFDNDcxRDAKLToxMDNDOTAwMEM1MTE1MDY4MUM4NTk0QURGOUIwMTdBRTc5RkQyOEU0QzQKLToxMDNDQTAwMDc0QTVFRTEwQ0JENTNFODc5M0UzMjg4NERGNzZENkQ4NzMKLToxMDNDQjAwMDlGNTI3NzkwRUI4OUQ2RkVBNjM4QzhDOEUxNUUzQkY4RTQKLToxMDNDQzAwMDA1NjgxQkVCNTY5Mjc1NDA2MDlGOEIyNjg1RUZGMTk0M0IKLToxMDNDRDAwMDY5REZDQkQ2MjhBNkY4RTI3QjMzNTVFNjhCODczMkFDN0EKLToxMDNDRTAwMDlDMEVDQTE0OUExM0E1ODlDRjI5OUQ1RTg5N0Y3MDNDQ0EKLToxMDNDRjAwMDYzNTk1MzlFN0Q5MTgxMkY5NzY4REY0QkIzMkNBNjc4MzMKLToxMDNEMDAwMEM3NDMxOTMyMkU2QTEwOTgwNUE1Nzc2N0E1REExNzMyQ0UKLToxMDNEMTAwMERGNzM3M0RDQkQ1RUJGMjQyQjdGNzVFQTcwRjQ4M0U4MkMKLToxMDNEMjAwMEEwQUVGNjhGNjQ1QUI5RERBMTBDOTc4NEM3NDFFNzU5NUMKLToxMDNEMzAwMDE0QzdFOTc0N0IyRUU4NzJDQ0E3RjhFRjk1MEMzRkVCMjMKLToxMDNENDAwMDU5MTVDRjNFRkQyQ0ZDN0IxNTdGMEFFM0YzQTk2Mjk4NDEKLToxMDNENTAwMDY2REZDODBFOEM5Q0NFRjI4RkQ3QTk4Qzg0RkMyREQ3NDEKLToxMDNENjAwMDdGRkNEMzdGODk0NjdDNTRDRDRFNjk1N0E1QjQwRDY5M0QKLToxMDNENzAwMEY1RURFNTZDNTdBQkY2RDBGRTg4MDM5RjM1RkJDRDVGQzQKLToxMDNEODAwMDdERjY0RkQxQURBQzk3Rjg5M0I0Rjg1QjhFRjdBQURFMTEKLToxMDNEOTAwMDc5ODJFM0MwRjRCOEFGRDA3NjM1Q0EzN0FDQTdFQTcxMDAKLToxMDNEQTAwMDAxQkEzRkI2NzA5RjhERjc0RENEMUU4NUY1OTg5QTVEOEYKLToxMDNEQjAwMDE3MTNDMEU3NkFGNkFENEFFODJFMkUyN0I0NUYzRDVFQzIKLToxMDNEQzAwMDQwQjdCRkQ1ODhCNTlGQzM3RjQ4ODRDM0Y4MEZBREZGMDgKLToxMDNERDAwMDc2NjY1NEFGNTM0MzA1NjJENUFFNjAzQjg4NTU3MDFDODAKLToxMDNERTAwMEM3NzIyRDhFQjMyMzkwQzE3RUUxOUVFNEVEOUFGNUM0OTcKLToxMDNERjAwMEYwNDlCRkVEQjBCQTYzMTBBRjdDNDE4ODg5RERBRDUzQTcKLToxMDNFMDAwMEZDMjA3OTdFOUZBMzdEMDRCRkYwODVFRDJBQ0I5MTE3MUUKLToxMDNFMTAwMEI2NDdGMTdFQThERTdFRkY0MUM0REI1NTZGNTZEODhERDQKLToxMDNFMjAwMDU3MjU4RTMwREVBQTc3QUFDMjYxRTAwRjM1QjAwQkM1RTgKLToxMDNFMzAwMEY3MENFN0QyQTdBMzZBNDE1RjRCNUExNEVGMTZGOEFEMEYKLToxMDNFNDAwMDFERUU5OERFMDY3OERBMzVGQTVBMUFENjMyOTJENzQ1NDAKLToxMDNFNTAwMDgzRkYxNEY4OUE0MUNFNUNCMkY3N0U4RTEzQTQ3QUU3MDIKLToxMDNFNjAwMDU5QUVGOTZEMjRDN0IzNTEwRjZGMDNDRTMzMUIwQUQ4NzcKLToxMDNFNzAwMDRGQkRBNDY1NDczNUNCMDVEQjIzNUQxMDY5NEVEQkNDMTgKLToxMDNFODAwMEY3MjlCRUQxQzZGQjQ2OTNEM0NFQzA0RjgyRjZDRkFBNDgKLToxMDNFOTAwMDJDMEYwMzRFRUNDQkQzNUEzQ0FCREVDRTMyNDhCNkIzM0MKLToxMDNFQTAwMDY4NzhGQjBERjZFNzg4QUVGQTRCNUFEQUEyRDNBOUZFODIKLToxMDNFQjAwMDI3QkJERkU3RDQzOTQ4RUVFMzI1Q0UyM0I5Mzg0NzNGQTcKLToxMDNFQzAwMEQ5MTlDOUY3RUQzRUQ5RjlFQjA5MkZEMTc4RTc1QUM2RDAKLToxMDNFRDAwMEY0NTIwQ0ZCNkNFMDIwMUJENzNGQjc0MUM2MDFGMzI1MjEKLToxMDNFRTAwMDExRDYwRjVBNzgzRTY3QjYyNzI5QUMyNzAzREY4NDlGODcKLToxMDNFRjAwMDMzM0I5RjhGQjZGMDNFRjZGRjdCNzFBQkIzMTU2QkM4QkIKLToxMDNGMDAwMDdEODRFQkIyNDc4MEZFNUJCNUZCMTFFRDlBRkRFNTdGNEEKLToxMDNGMTAwMEE3RkY2QUVEN0I5QjUyQTQ4RDIzRUYzQjA4M0QwRUMyQTkKLToxMDNGMjAwMEE1RUQzQkQ1QzlGQjZFNzk5NDlERUYyRjJDMThFNkJFMEQKLToxMDNGMzAwMDcxMUVGOEU4OUIzMjhFNTFGNDc3M0YwNEZENkZDMTNCNTAKLToxMDNGNDAwMEYxNkM2RjU5NkU3M0Y3NDFGRThCQzMzNkY2MTMyQzI4NTQKLToxMDNGNTAwMEYwMUNGNUExN0U4QzlERUQ0QTIyQjE3NTA0RUNBRDZEOEYKLToxMDNGNjAwMDI5NTJCRUE4NUM0MzNCOTM1MERDOEZFOENENEZGOEFDQTAKLToxMDNGNzAwMDBDNTg4NDhGRjI5MzA3QTVGMkJBM0U1MjZFRjFEQUQ5NEIKLToxMDNGODAwMEZGMTNFNEZCOTJDN0VDQzI4RjdCMkZGRUU3QTQ3RTVEOUMKLToxMDNGOTAwMDk5MkFGRDBFOEY2MDdGNTE1QTE5MTdDQzhDODdERDRFMDAKLToxMDNGQTAwMEEzOUJDQTY5NTQ2RUEwOUZDQTREQzE0Q0M4NEY2N0VEMTAKLToxMDNGQjAwMEQyMUU4OTcyRTg0RDk1RjlCMjVFODM0NkE3RTgwN0ZERTcKLToxMDNGQzAwMEI2QTVCOENFQjNCQ0JCMkI0QTQwRUZCMEJDMTgyNUVEQUMKLToxMDNGRDAwMDIxQkYwOURGMTQ2NjM4QUY2RjFBMjRFOUI4NDFGMzA3MkYKLToxMDNGRTAwMEZBQjc0OEY4MDAxN0U0RjgyNUY2QTY0Q0M4QjlGQUI4QUQKLToxMDNGRjAwMDRCQTI5Qjc4QkNCM0RBNzg0QjIyOUFBNEZGNDQ4QkM3QzAKLToxMDQwMDAwMDQzN0QxRURGMjZEOEJGRDNGRTY0MThDQkNCQTdGQjFFOTMKLToxMDQwMTAwMDc5MDFFMzlGN0U3MjMwQzcxMUI0QTUwNDE2RURFNkYyNzQKLToxMDQwMjAwMDcwOEVFM0FFNzgyQTJDMDg3ODNGN0IzMjhBRUQ1ODlGNTkKLToxMDQwMzAwMEQ5QTQxQ0Y2NTk1NDAyQ0I2MTg3QTIxRTVDODBGRTNBQkIKLToxMDQwNDAwMDM2ODcyOUUwQTM5RjI5QzI5RTg4RjIyREJENTkwRUE4NkMKLToxMDQwNTAwMEE4QUY2MzNGNDkwNUIxMTdDOEFGOTQ0RTg0RENGN0Q5QzgKLToxMDQwNjAwMDk2QzE2QzI3RkFFQzBEOTUyRjI5RDBGNzM1RjhFRTEzOTEKLToxMDQwNzAwMDREMEI3RUM2RjJCRkY0M0Y5RTdFRUE2RjgzQkJGM0FGNkIKLToxMDQwODAwMDU0NkMzNkRCQzNGNEY1RDdDQkVGMTgyNEVEMDM3NzBDNzMKLToxMDQwOTAwMDkyN0FDOUNBNDEyRUU5N0Y4QjZDNzkzMDk1RTcyOUY5NkMKLToxMDQwQTAwMDAzQUQwM0VCN0ZCNDFGMTM2MDZGM0ZENkIyMjc0MTcxOUUKLToxMDQwQjAwMDAyQ0ZDMUNDNUYwM0VGREJBNDlFNzU3QUJCOERGRDQyQkUKLToxMDQwQzAwMDE1MkY0Njc5RDlGRTc0RTcxNTdDRUZCMDQyOTU3Mjc4Q0EKLToxMDQwRDAwMDg1NDVERURCQUJEMEVFOTk1NjQ0NjdCMjdEOEJGMENERTMKLToxMDQwRTAwMDdBNkRGQjE2NTUxQjQ3OEVGQkQ5RDYwMUQyOUYxMEQ0OTMKLToxMDQwRjAwMEYyMkZFNEYwM0RCODQ5NzFFMkU2NjkyQzVGNkRDODA1MjYKLToxMDQxMDAwMDVFMkY2RThFRTRGODc5MUFDNzhCQjg4NzhBOUZGRDVDQTQKLToxMDQxMTAwMEUyMzM2NjExRUIwNzc0QUUzMTdGQUVENEY4NzNENTlERjAKLToxMDQxMjAwMDU3QzdFMDVFODE3ODQ3RTVGQjEyMTdBRDlFM0VFMEJGQzIKLToxMDQxMzAwMEExRjg3QTRGRTM2MzRCNUY3ODk0Rjk0MTI1RUQxN0M0RkEKLToxMDQxNDAwMDU5MkRENUZDQ0I0QjlGNTI1ODlFNUNCQUZBRUE4Nzk4MDIKLToxMDQxNTAwMEVGQkU2RDEzQjg1RjcwQjZFNUZFNjhFMzdBRUNENUY4OTQKLToxMDQxNjAwMDY3NTc3QjBGRDc1RjRBRjU2NUZCMzdBMzE5OUVBRDM2QkUKLToxMDQxNzAwMDBGRTAwOTVEQzdFRkRERkUyOUY1NUY2QTVGRDE0MkYyMEUKLToxMDQxODAwMDQ1RUVFNUYzQkYyODhFRENGNjI3RjA5NUVERTE2QzY3OTAKLToxMDQxOTAwMEEzRjVFNzdCNDY2NzZDMkQ4QjMwRkYzM0NGODQzM0JGQUQKLToxMDQxQTAwMDM5MTMyQkY3RkQyNzc0OUVGQUVEODBFNzg3RjdCMTVEOTEKLToxMDQxQjAwMEVEQkRFOTAyRTdEMEUyODBCOTVGMURBRUZEMUFERkFGQzkKLToxMDQxQzAwMDhBRjdDNEMwNEY1MzQ1RUI4MUZFNjg3RDdFQzRFRERGQTYKLToxMDQxRDAwMEIxNzFGQkQwRjkzQzhFNzYyMzBDRkJGNDk5NDhBNjlCNzkKLToxMDQxRTAwMDMzRkRFNEJBOUM3OTc2MTA5RjY3NkRCMTkyREUwOURFRUIKLToxMDQxRjAwMDY0RTg0QjY3NjI2NThBMUIzRUEwODcwQTk3QTQ4NzMzRjEKLToxMDQyMDAwMDYzNUFEODFFNzA0NkQ5QzE2OTlCNERCNkFCQThEM0ZDODIKLToxMDQyMTAwMERBNDQ3Rjg5QTAxRkQwMjZFQ0E5OEVCNTQ3MjBDNzgwM0QKLToxMDQyMjAwMENGOEZDQ0U3MzQ4OEZCQ0VBMTc2NzNEMDI5Q0VCRkJFMkEKLToxMDQyMzAwMDU5RjJEQzg0NzgwNTNFQ0Y3RTFCRjZFM0I0RjAzRDczODMKLToxMDQyNDAwMDlGMjY0RjU2NkVCRkRDNEY4ODc1QUFEQ0FFQjAzRkVCQTEKLToxMDQyNTAwMDkyNzZGRTAyRUE1RUJBREQ5RkU4NzJBOTVGRjEyMjZFRjUKLToxMDQyNjAwMDZCNjlFM0IyMjVBMEZCQTVCNUVCRTY4MUVFRjU3OTJDRjEKLToxMDQyNzAwMEQ1RUU1RkI3MjkyQUMzRDMxNjRFRkIyN0ZCRjJGMTc0QTQKLToxMDQyODAwMEZDQUE1OThBMUU5RjI3NUNGQUY5NDU3QjM4MkNDQjJENTYKLToxMDQyOTAwMEU5ODhCMjRERDQ1RjY1QTNCMjk2Qzc0OUQxRjU1QjM5QzEKLToxMDQyQTAwMDNGMUQ0RkI4Q0QwMkZCNUU5Qjc2REZCOUE3RjlFQjcwREYKLToxMDQyQjAwMEY2MDQ0RjUyOTZFNDRGNkQyOUYyOUU2RkZCNUJGMkJFRkYKLToxMDQyQzAwMEY2QzU2RjBBNjJFMkZFODEzQ0M4OTFGQTdBN0YwNDdGRUMKLToxMDQyRDAwMDE2NjgxMDcyOEZDNkU3OTZDMkFFNEU3MDY2NkUzMEZCREYKLToxMDQyRTAwMDczQjIzNjlCRjM0M0I2OUJGM0Q5M0JDREY5RENCREU2MDUKLToxMDQyRjAwMEJDRTc1NTczREU4NTcxN0I3N0UxMDlGQTM2RTIwM0ExRUQKLToxMDQzMDAwMDZGMjM4NUJFRURDRTk0RkEzNkYyRDBCNzkxNDJERkM2NjgKLToxMDQzMTAwMDc3RThEQkM4NDNERjQ2MUVGQTM2RjJEMEI3OTE0MkRGQkEKLToxMDQzMjAwMEM2RjczOTFBOUUyQTM1N0IyOUQ2ODFFM0Q0RjY4NEVCNjkKLToxMDQzMzAwMEYxMDBCQzVGMkVDQzQ5NjAzRTJBQUM1MjFGQkRCMDI0QjgKLToxMDQzNDAwMDlCRTVDNzRFM0JEMzU0MDdEQjk5RjQzOEE3QjdBMjdDNTMKLToxMDQzNTAwMEUzQjI3QUMzN0Y3QjY0NzVERjE0NkVDN0Y2RTc5QURGM0EKLToxMDQzNjAwMDQ5RkI3MzY1N0VCODEzRjY4RUQ2NTU5RkFDODZEODEzN0QKLToxMDQzNzAwMDg4RjI0RDQ0RkQwQkI2RjZBREMwNkY1NUREMkJFQzZGRUEKLToxMDQzODAwMDZGNURFMTdFRTcwNzcyRkREOEVFQTJDNzJEMTVFM0RDNzUKLToxMDQzOTAwMDAzREYyNjdENDlDNjZGN0IxQzQ2M0I2QUE4NUY0OEFDOUQKLToxMDQzQTAwMDM1RTQyMTNGMzU5QkYzQTE3RTIwRjAzNUFGNjk1RjM1QzEKLToxMDQzQjAwMDMxMUQzQzZFNkJFRjBCQkU3RkUyNDkwN0RGRjMzQUExODQKLToxMDQzQzAwMEQ5RURDNDZDMTdDQjYzQkEzQ0RGMjk4RkREQTM2Q0MyNzcKLToxMDQzRDAwMEY5QkQyNDJCOEVEQjc3MUNDQTMwREREMzBCNEQ0QjJGNjAKLToxMDQzRTAwMEU1QjNCQ0RBOTk1RkFCNTgzMDRFRDk4QzE1RkI1OUFGQTkKLToxMDQzRjAwMDRFOENFNjczRTkxNjBEQjY0MTkwRkYwRDcwMEYwRTQ0MUEKLToxMDQ0MDAwMDk4RTg2OEU4QjZCODEwQkY2NTNGNTNGRDYxQkI1MzQzRjkKLToxMDQ0MTAwMEZDOTY0MzRDRTVEM0Q3MTY5OEVGQjUxNzVENkQyQTFGNzAKLToxMDQ0MjAwMDY4RUY4Qzg3NzM0OEZGOTYwNjlGNEJENkI5RThDQ0U3QjgKLToxMDQ0MzAwMEY5ODZENjRCNTYzQzdGODRCRjU2QkMyNUU1RDMzMjlBQ0QKLToxMDQ0NDAwMDg3Qjc0MDdCOUYyMzFGRkUzOUVGMTRFMEFGQkNDNTE2MzIKLToxMDQ0NTAwMDhCRjNCRTU0M0I4NzQ0OURGOTVDMkVCNzBBQkYyQkFFNEQKLToxMDQ0NjAwMDhCRUVDQTVEQzIxQjRCRURCRkI0MzYyNTMzMURERDcxMkIKLToxMDQ0NzAwMDM0NTkyNTE0MkQxOTcyMjQzNzA4N0RFNThEMjc0NjgyN0QKLToxMDQ0ODAwMEFFQUFENDhEQzkyRTJBQkY1NTA5NkNDNTQ1RUNEMzcxOEYKLToxMDQ0OTAwMDNCMTJBRUE0RjJGRkI0RjgxRUM5QTI3NTRBQjYwNUVGRUUKLToxMDQ0QTAwMDlEMEYzRUJBMjM0REUwQkQ5MTEzNkI5RjhGRTZCODNDNDQKLToxMDQ0QjAwMDhERkU5MjZEQUUwOEQwQzFDNjI2OTVGNTE0RDhDREQ0MjgKLToxMDQ0QzAwMEI4MkUzQUQ5RDgxNDFGMDFCREE2N0M4Q0UyOTc3MjcxMjAKLToxMDQ0RDAwMEI0NDlERjBCQzU0N0ExOUFGRDhFOUJFNjdCRjE5MDJBN0MKLToxMDQ0RTAwMEVGNDA2QUYzNUNFRTkyRjU0NUJBNkNBRkRGQjNEN0U3MDUKLToxMDQ0RjAwMDdCNTJEMzQ3MkIzNkJFOTY3OTBCN0QzRjNCNzg3RjJFODAKLToxMDQ1MDAwMEFFODQ1N0Q2RUZFNjc5MkZCNTZDREZEQTk3RDI3QjFERjQKLToxMDQ1MTAwMEJFNUQ5OEQ3RjJCN0M2NDU1RjQ5RTM3Q0I5NURDNjg3RjMKLToxMDQ1MjAwMEZGQjVGOTg5QzdGQ0M0NEZFRjZDN0FDMjBFRkI0MTg1MTkKLToxMDQ1MzAwMDM1NjA4NzFFNUNGRUU0NDYzQkUyMThBRURCQjY5MUJGRjkKLToxMDQ1NDAwMDJGREE1NkNDRjYwMEZEQkVEQUE3N0E3Q0IzODY4RkYyNUUKLToxMDQ1NTAwMEIxQ0EwNjE3Q0RCM0ZGNjBDOTRGQ0EyMzY0MUM0QkExNzMKLToxMDQ1NjAwMDNBRkEzNURDMTNCOEI4NERDOUMzQkM2NjE0RURCMEUzRjQKLToxMDQ1NzAwMDFFRkYzQjFBREYwOUREMzcxRDg3QTcxN0Y2ODZCREFCODcKLToxMDQ1ODAwMDQ1RjEyMERGRDMzRTk5ODlDQjcyNDQwRkQzMkZCOTM5M0YKLToxMDQ1OTAwMDlENzE2OTA4RUJENTFGMEFEMkJFNzA4RTY0ODdFOEQ3N0IKLToxMDQ1QTAwMDg3NTU2OUNGNDMzQzEyQUQ3M0I5M0REODZCM0FFNDg1NkEKLToxMDQ1QjAwMDk3RTVGQjBGNTU3NDBFOERDQTg3REUyRUM0NTU5NDE2RjEKLToxMDQ1QzAwMDhENTY0RDc0NUUzMzNFRDJCNDBGNjYwQkMzQkVBMkZFNTEKLToxMDQ1RDAwMDY2ODk3RUE2RkM4QzQ5NjlBNkZBMzdDRTE4MUFFMjY3NkUKLToxMDQ1RTAwMENFRUYyQTY3RkU3NTk1RTk1RDk3QUFEQkZENkU4NUUzNDAKLToxMDQ1RjAwMDdCQzY5QUJGNTM3QTNCRDNEOTBEQTZGNjU1NjI5QUU5OEEKLToxMDQ2MDAwMDVEOTcyNTlCREY2NTNDMTM5NUQ5QTE4Rjk1NkJGNzQxOEQKLToxMDQ2MTAwMDY2RkJEQUI0RUZBREZDOUQyNjYyREFBRjAzRDMzQzdGRDQKLToxMDQ2MjAwMDk0RTdBNThERkQwOEJBMUQ3RDM2RkU5RkQ2REQ3OTE5NkMKLToxMDQ2MzAwMEQxMTk4Rjg5Rjg1QkQ4M0I3QzY2NzlFNDA4RUJBOTQyRjUKLToxMDQ2NDAwMEFFNDM5NTY2OEZBQUNBOTJGNkE4MkFGRjExM0JFMjlCNTkKLToxMDQ2NTAwMDA5RkZENjI0NDI0OTc1OTNDMkY2NDZBQUVGNDg4QTkzQzkKLToxMDQ2NjAwMEY5REJGMTdEQTdGOTVFMDdGQUJCODRGMjQzNkEzMUY2MDQKLToxMDQ2NzAwMDU3Njg3OTM1Q0QxQkU3NDIzNUVDNDdCMDgzRTlGRDZCRDAKLToxMDQ2ODAwMEZERUFGNDE5N0FDRjNFQjQxRkRGNjAzN0VGRTc4QTZEOTkKLToxMDQ2OTAwMDNCMEVGNjIzQkM0QzJGOEFDRDQzN0M0OTY1Q0I1NDVCNDMKLToxMDQ2QTAwMDcxRjZFNTc0QTZGM0ZEOEJFNTE2QjY3Rjc1MUM3RTg1NjUKLToxMDQ2QjAwMEU5QUNBM0RDRUE5MUYxRERGRjE4MUZENTVFNjk2RjBENEYKLToxMDQ2QzAwMEE1QkY0NTM0MUZGODk5MTdFRDU0M0MwMTQ1RDYwMzVFNEMKLToxMDQ2RDAwMEZBODEyRTQzRjA5MkQ0MERCRTc0M0M3NUUyMkRBNDdDNzkKLToxMDQ2RTAwMDMxRkUzMzFDRjExMTRBMDA3Q0YyMzJCQ0U4NzhENEZBNzYKLToxMDQ2RjAwMDVGRTQxMzJDNjcxMjNDMDE4NjI3QTQzRjMxMkE3NEZGMjQKLToxMDQ3MDAwMEREQzJFRjIwNzQ2QzUwODQ0QkY5NkUzQzRDQkIyNEVENDEKLToxMDQ3MTAwMDM2MDNEM0U0QkNEQjc3MjkxRUM4RUJCMzJFNTlGOTdCRjMKLToxMDQ3MjAwMDI3QkQxNEM5MzhGNTE5OTNDQ0ZCQjM5MzdFOEFFNDdFNzgKLToxMDQ3MzAwMDk5NzkyOTgxREJGRDZGRDNEMTc3RDE4RkVFOUYwOThERDgKLToxMDQ3NDAwMEZGRDZFRjVEMkQxQUFDREQ0QjFBMjE0NjdDRkI0RkM0MjIKLToxMDQ3NTAwMEFGRUI3MjQwNEZFNzQ5RTc3OUUzRDJGMEVGNENFREY2NkIKLToxMDQ3NjAwMDFDNUUxRTk1Q0FGMURBM0VDRDhFQThGMzYzOUZENjRFMkQKLToxMDQ3NzAwMDFGQjc5OENBREQwNUEwRUZGRTA5QjAxN0FGNkU0QzRCMEUKLToxMDQ3ODAwMDM2QkUxN0UzNUI2NTYzM0I2RkYyOEE3ODRFOEJDMzVEODEKLToxMDQ3OTAwMDA5Mzg0NzhBNTdDODc3NEQ4RURGRDUyNzAxRkU4OEUzNTEKLToxMDQ3QTAwMEFCNkNCRDI2NTFEN0M3N0YzQTNDNTlFNDIwNUZDOEU5QkUKLToxMDQ3QjAwMDg5NzU2MUIzOEQ3Njc4M0Q2RDFBMkNFRDM1RkEzOTdFQTkKLToxMDQ3QzAwMENFNzIzODdBMzZGNkRGQUE1REQxMDgwNTVBQkFFQUZEMEMKLToxMDQ3RDAwMDkxMkUzQUNGNTc1OTdDOEYwRjY2N0ZFRjQ2M0VDRjg1OUIKLToxMDQ3RTAwMDZCNjMyRUVDNzBCQTNDNTFCMUFBQjAwRkNFRkRDQUZGN0MKLToxMDQ3RjAwMDc5RTUzMTlDRkJCRTE1QjYwNEM4QTM5RjdEQTAwQTg0NTEKLToxMDQ4MDAwMENFRDA3OUM2NzJDNEE3RTE5MkFFM0ZERDEyQzlGNzEwQ0YKLToxMDQ4MTAwMDNGNTU4NDE3RkVBNjI1RUFGRTVDOTdFOTVDREQzQjBCNUQKLToxMDQ4MjAwMEUzRkZERTQxRTM4RUMwQjg4MUFEODkxOEQ3RTNDRkM0ODIKLToxMDQ4MzAwMEI4QkUxNTE5MzFEREQ5NTdGNEI0NjZCRDk0RjNCNkVBQTQKLToxMDQ4NDAwMEY2NjRDREVFMENGOTFFNzlDOEY3NzA2MjQxQkU0NzFFQzIKLToxMDQ4NTAwMEYyM0Q1MkM4RjdGOEJFNERGMzJGMEM2QzY4Q0Y4MzdFNDMKLToxMDQ4NjAwMEVBMUYyQkIyNkFGOUJDNzU2NjQxN0VCRjQ1ODlGMDgwQUMKLToxMDQ4NzAwMEZGRENBMjc4RkE3MEJDQzE2NkY5REVDNEYyOTA3NUQ1OEYKLToxMDQ4ODAwMEQzNkJEQTQ5MDYzM0QwRUQwRjJFMzk4NDMxNkU2RThDM0UKLToxMDQ4OTAwMDg4MzVFNUM3MzlGQTlBRUExN0JBNTI0Q0U1RDcyNTBFOUEKLToxMDQ4QTAwMDM2OTU1RkVGQ0UzM0U1N0Y5ODc1QTVBOUZFNjRDRjE4RTYKLToxMDQ4QjAwMDUzRkU0N0EzQUUzN0Q1OUZFQTlENkFDQTRGOUYzOEM3QkMKLToxMDQ4QzAwMDU0N0Y2NjUxQjFBOUZDQzZEOTRCNENFNTczN0NDQjRDRTcKLToxMDQ4RDAwMEY5NzlFNTNGMzVENUJGQTk3Njg1QTlEQzJCNUM1NjlDRDcKLToxMDQ4RTAwMDc3N0JBMTc3MTFERTVGODZERTQ1RTkyRDZGNjUzODhEMTgKLToxMDQ4RjAwMEVCM0E3QTlDQTVEQjc3Nzk0RTY5NzI1MEJGQTFERTM2MjAKLToxMDQ5MDAwMEQwMjVFRUQ3ODAwRTA3NjhGNzY3QkVDMEI5RDIxQjdFRjAKLToxMDQ5MTAwMEM5QTAyMkY1REUyMzdENDEzN0ExRjU0MkNCNDc0NzFFRDIKLToxMDQ5MjAwMEI4RThBNjM1MkM3QTJBN0FBNjk1RjhDNEU4MkIwRTE0OTYKLToxMDQ5MzAwMEE0NTE3RUY1NTM4NTMzQURDNDVGNDY1RjdERTBGOTU0RTUKLToxMDQ5NDAwMENBMzczREI1NEE5NjBGM0I3MDExRTU1MTRGREYyMEYzNTIKLToxMDQ5NTAwMEQzMDU4QjFBOEYwQ0Y5N0E4NjlGRTYzMUZBMDdBOTZCN0IKLToxMDQ5NjAwMDNERDI2RUQyNkRCQzY5QTczRDg4RjA4MDc4NERFMDAxRTQKLToxMDQ5NzAwMDY5OTBFODEzRTkwMUEyNEZBNEFGMTI3RDk2QTUwQjcxQ0YKLToxMDQ5ODAwMDkwRTgxM0U5MjFEMjNGRjFGREY3QTQ3RjIyM0Q0Q0ZBRDQKLToxMDQ5OTAwMDI3RDJCNzQ5RkY0NDdBODRGNDRGQTRFRkQ1Q0ZFNkY0ODkKLToxMDQ5QTAwMDgzN0ExRkI3RkI0MzdEMzlBNzQ3RUI2QkY5RkJDN0Y1NEMKLToxMDQ5QjAwMDc1OUNGRUI5REVDRkRGNUQ0Mzc0M0I0MzkwRUQzMUJBQTkKLToxMDQ5QzAwMEZGQUIxQTdFNDdEOEVENzZEQkNFMUFGREMyOEE1NzlFMjIKLToxMDQ5RDAwMEE3QkFCRkIyQTE1NkI0NDY2MjlGQjY1QTYzNEYzOUJBNUUKLToxMDQ5RTAwMEZDOTAzREYzNUJBQjM4NjU5MEJGNUUwRkY3MjYwREUxQTEKLToxMDQ5RjAwMEYxRkJCQjk4NkY2QkRGOEY4OUU5MDNGMjY5OUQwQTUyNjcKLToxMDRBMDAwMDdEMjkyODlGOTk1RkJBMkE4NkY4QzcwRkJFQTlCNTgxNkMKLToxMDRBMTAwMDVFM0VCNDc0N0Y3RkZCMEI4RDRFREE4Nzc4MzM4NzhDRDQKLToxMDRBMjAwMEU4RjJCQkVCN0VFRkNFRjgxQTgzNUYxRUZFNkMzRDhFODQKLToxMDRBMzAwMDQ3RjdDN0YzOUYyMTNFNDdGNzkzRUJGMTQxRDc2QUVGNjIKLToxMDRBNDAwMDIzRTk3RTcwM0RGRTQ3RUZCN0YwOTI2MEJFNzdDRDFBNDYKLToxMDRBNTAwMDJCQ0IyRDUxNTYxMUM0Mzg3QTlDQ0YzNThFOTYzQ0M0NDEKLToxMDRBNjAwMDNCNUM1M0U5RTQzOEI3M0VGNDFERUYyMzUyM0QyRkRFQTMKLToxMDRBNzAwMDk5REJGQzI1RDVDRkVERjJCQkY3RDFFNjQxRTUzQzhGQzQKLToxMDRBODAwMEMyNEIzRUI2RDc1RUEzQzUxREEwQkQ0Mzk2RjMzQjc1OTIKLToxMDRBOTAwMDg4MTE4M0ZDNDEyOURCRTExRTU1QTg3RDdFNTcxQzAwNEYKLToxMDRBQTAwMEVBNDdDQUZBNDFGNDk3RkUxNThEMTdEREI1OEYwNkM0QTMKLToxMDRBQjAwMEI1RTQyMTZFNkM0MEI1OTNFM0M2MzY4QzA5RjJCREI5RkUKLToxMDRBQzAwMEU5QjFEN0RFRDNBQTIyNEUzOEU2QzdEODQ3NEZBN0ZBQjYKLToxMDRBRDAwMDY2MDJDRkVGRUU3MzBGRjA1MDdFNUE1QzVBNkZBNDUzMEMKLToxMDRBRTAwMDQzREVCNUVCNjY3REU2NjI1RDc1N0NFOTc4RDdENzRCMzIKLToxMDRBRjAwMEM3QjcyMTlFOEFGMUZDNURFQjE3QkE2RUExRUJBNUFGOUIKLToxMDRCMDAwMDUzRTFBNTJFRkMwMzdGOTdBRjRGRDdGQUMxM0VGQkZGQzEKLToxMDRCMTAwMENCRkEwQ0I3QjZGMDdEQ0NCMDRBODcwNzcwN0RENzdBNTgKLToxMDRCMjAwMEREREMyRTI2RTAzRTc4RjEyNUY3NDFBNDRCRDI3QzVGRjgKLToxMDRCMzAwMDgwN0Y5NjhBMzExMzVDQzA5MTRCQ0Q4MTlEMjdCNERFNzYKLToxMDRCNDAwMEYyRUY1OUVGRTE5MDdBMDdFMjBBRDY3QzlENzY3OUJEQzMKLToxMDRCNTAwMEREMjFGNTFBNjIwQkQ2N0UyREVENEMzN0UyN0MzREU0NkIKLToxMDRCNjAwMEI2QjExRkVEQ0Q3MDNEMUVDM0VCQ0NBMzc1MUNBN0YxRjQKLToxMDRCNzAwMEEzNDNBMjk2Q0YwRjEyRDdGQzU4REZGMURBNTI4RkNCQTYKLToxMDRCODAwMDVFQ0M3MkVFNzhBNzU5NkU5Q0YwNEQ1MTIzQzY5REQwMzUKLToxMDRCOTAwMDJCNDQ4RUQ2RkNFMTM3NjhGRDVFMjc5QUI4REZEMDdCQzgKLToxMDRCQTAwMEYyMzc2OEYyNjlFODNERjlFNzg2NjhGMjY1OEE0ODAxRkMKLToxMDRCQjAwMDlGMUEyRjNDMTIyRUVEQkQ4M0YxMkVEOTZGOTI0NjJGRjYKLToxMDRCQzAwMDY5NkU1NThDMDYzRDA4OUYxNUNDRjE1NUJDNzc5MDhCQ0UKLToxMDRCRDAwMDcxRkQ5Q0JGNUUwNDM4RkRBMTA4NzIzRjkzODk5MTIyNEMKLToxMDRCRTAwMEZGMjMyMTZDRjI5RDAzNzkzRkIzNUFGNUZEMjdFNDJDOTYKLToxMDRCRjAwMEZENUVFNkMyNzBERkFCRDg3N0FGNDQ0RTk5OEZGNzI4RTEKLToxMDRDMDAwMEM2MTU4QzRCNDdCQjAzRTNERDJDOUYxQzcwQTRCMUJDQzUKLToxMDRDMTAwMDg0N0Q2NThCRUJEQTdGNkZEMEY5OTI2RTk1RjcwNjkxMDQKLToxMDRDMjAwMEUyREU2MDNBNkQ5NkQ3RTlGQzQxRkU4NkFDMTUwMkVERjYKLToxMDRDMzAwMDI2QjhDRDcxMzg3QUZCMUZCQUM2MEE2QjQxQ0ZGQ0ZEOEUKLToxMDRDNDAwMDg3Qjk3QkZBQzNBRUYzNjZFQ0EwRjFCMDgzQkYxOTdCRTIKLToxMDRDNTAwMEM1NzhDQ0Y3Q0REODNFMTY5OTg2RDkzOUNENzkzMUJERjYKLToxMDRDNjAwMDNCNzk0RUE3RTdBRUYxMjYwODZCN0NDRjc4RDZGMTFBRDgKLToxMDRDNzAwMDhBNEYxRENGRkYwMjVFMkY3NDg3RDcyRjA2MEIyOTM3NkYKLToxMDRDODAwMDQ3NEEzRUEyRTNCNzJBQUNGMzFFNjcxRjYzNUM0NEE1MDQKLToxMDRDOTAwMDQzRTJFOTMzODA4QzdCQjg3NTU3RjEzQzNFQTkxN0ZEQTAKLToxMDRDQTAwMDgxRUY0NTc1QTNCODNDRDQwRTI1MzZDNzcwNUU3RkM3MkIKLToxMDRDQjAwMEVDQ0M4M0VGNDYyNzEyN0NENzM5N0NFQTUwQzJDQkQ5QTMKLToxMDRDQzAwMEZDNjAyNjQ5MzBFMjkzMEQwRDdDRUZGQURDQjNBQTA3QjUKLToxMDRDRDAwMEYyN0ZBNUVBNUVFQjAxNEY3OTUzNjUzRkEwRjhFNjk1QjgKLToxMDRDRTAwMDY0RjgwOUM1RTZFRUUzQTMyQjFEMTJBRkJBRkVCMzMyOUEKLToxMDRDRjAwMEFEODhGN0E3NzAxNTI0Q0FGN0Q1RTQzRDcyNUQxRUU4QUMKLToxMDREMDAwMDFGMjZFMzhCRjVGQkNDM0RDOTA3MjMyMzI0MUZFQjFGOTQKLToxMDREMTAwMDI2RjlBRUJFOUVENDhFRjM0OUQ0Q0Y0OEUyNTM0OUY3NkMKLToxMDREMjAwMDQ1QjAzRUIwREJFNTREMUEwQTdGQ0E3ODYxOTJBNzc1OUYKLToxMDREMzAwMEJEQkZBMzk3N0MzRkYwNUE5MUY5RDA2OENBOEYzRjY0RkEKLToxMDRENDAwMDEzMDEyQUVGMTgyRjRDRjE2NDg1NkY5NEYyQkIxNkZBMDkKLToxMDRENTAwMEZEOThCMDQ0RDJBRjBDRkMyMERDMUQ2MTdBNkYzNDMyNzgKLToxMDRENjAwMDJCQ0U5NDhGRjJGNDMzRDU4RjE5OTU2QTJBOEZGNTBFRDYKLToxMDRENzAwMDMxOTVDNzRGQ0MzN0U1N0IxNzVENjVBQURGNjdGNjU4REQKLToxMDREODAwMDUzQkVBRkVGMDY1M0ZEQTRGMjY5QTZCQ0NFOTc5MkU0RTIKLToxMDREOTAwMDI3MzFBMDc2QUVBOUZEQzBCQTEyNTNGRDE0N0Y4NUY5NjQKLToxMDREQTAwMEZENTRCRkY3NDg1NjAyOUU3Nzk0N0Y2OTZCOTY4N0JDODcKLToxMDREQjAwMEFGNkExMTk2OTE1REVGOTBGQzNBNUFERTA3OTlFODVDNzQKLToxMDREQzAwMEM0RUY5MTY0MzRGRENDMEM4RkZBOEQ4QTczMjYyOTQ2OEEKLToxMDRERDAwMEUxRjcyNEFFNzM5QkY5NjA2MUEyMzkzRkRFOTVGNzJBQjMKLToxMDRERTAwMDk2NkU5QzJCMzRGRTI4QTg4MDlFOTI2QUFEQTZFRkYzQTcKLToxMDRERjAwMDg2NkE3QzM0NTdFNEIyOUVGRTVERUJFRjFCNjI1QUZGN0QKLToxMDRFMDAwMDUwN0M1RDRFMEZDRkU3MDVEREQyOUU2RjlDMTdFQ0Y5MEQKLToxMDRFMTAwMDQ2QkNDMDlFNkZDQ0MzOUU2RkFDMEY3QkJFQjExQ0Y2NzAKLToxMDRFMjAwMDdDNjM3OUMxMjEzMzFEOEMzODYyQTY4MzJCOEU5QUU5NkQKLToxMDRFMzAwMDQwQTdDRkQwRjVCQUIyRDU0QzFGQzJBN0Y4OTQ3RkIwMjcKLToxMDRFNDAwMDVFNTc3RjZBQTY5RkQwRjUyMTA5OEJENzZGODI1MzExRDkKLToxMDRFNTAwMDhGQTRGQ0ZCRUJCNTJFNjRCRDNBRDc4N0YwMERGOUY2QjUKLToxMDRFNjAwMERBRTA1MEJFMjc1Qjc4NDgxNTc4QjdFNDUxNkQ5RUQ3REQKLToxMDRFNzAwMDBEQURFNTI3QzNCNjVCN0RCRkU2N0RBRUQxNTU0MzVGODMKLToxMDRFODAwMDQ5NTcxRDg3OUUwRjA3MUY3RDM0QTRGRkQ3RkJGOTAyRUEKLToxMDRFOTAwMEE4M0YzQkZFNjJCMjFERjREMTJFREY0NTZCMDMxRkVFMkYKLToxMDRFQTAwMEREMTVCNzQ5N0FCQUJDNzdGMjMzOTVFMzE4OEU1OTlBNzMKLToxMDRFQjAwMDE0RjBFQjgyMThERjM2RjBDQjlCQjM2QjE1Rjg2NzEzNTkKLToxMDRFQzAwMDQ1RDE4RTQ1ODhDQkY5OEZCMDY0RTQxNzBDOTRGNzc3MDEKLToxMDRFRDAwMDQ1NzYyQkRGN0ZEMEY5RTI4MjI0MTkxN0Q4MzI1NEYzQkMKLToxMDRFRTAwMEYzN0E2NERDQ0VGMzQzQTVERDI0Q0FFM0UyMzhFM0UyREYKLToxMDRFRjAwMDZDNzlCRjgzRDQ5OUU0MDUzOUMwQzdFMUYwNDFDMDQ3NUMKLToxMDRGMDAwMEIzODVERjY5NkNCNUI5Mzk2RUM0RkY4NjJBRTBGNzgzRDMKLToxMDRGMTAwMDFDMEJGOTcyODAyNkRGMzU3Q0U0NzAwMEZFNDFFQjg1QzYKLToxMDRGMjAwMEU5OUMxRDFDNzA5OEUyNUI4NzZFNzM5OUYyMzkyRDg5OUMKLToxMDRGMzAwMEE2RkFDMzc2QkI0REU1NzlDMTJDNTM3OUMxMjE4RjI5REYKLToxMDRGNDAwMDNGRTJDODI4NTNGRDJCOEU3QTRERjkyQjVCMjc5QUVBNTYKLToxMDRGNTAwMDVGRkQ2OTkxMjk5RjI0REExRjA2N0UwNzJBNTI4RjNFNDIKLToxMDRGNjAwMDMzMzQ1NUUyQzkyRDM4N0U2RkMxOURCMUYyREVBN0E2NUMKLToxMDRGNzAwMDVGRUI3MkJBMUVGN0VDRDNFODM5NTRERTFGNjhGNzcxQTUKLToxMDRGODAwMDFDNzU0MzVGRTFFMTdCMTgwRTREOUYxMjY2M0RDMEE3ODMKLToxMDRGOTAwMEM1MkQ3N0RFQTNGMDlCRTM5NkY1NzhFNTRFN0Q0MUQzRjIKLToxMDRGQTAwMDBGNzQzOUREMTBBRkVDMzVDNjJCMkYwOEVCRkUzREUwNUEKLToxMDRGQjAwMEZGRDJENjNEMTRGRTgxNzYzOURGODY5RkRBRjlERTg4OEUKLToxMDRGQzAwMDBFNTcyODNDMzNCNTM4REEyRDhFRUVFRkY1RDhCMjI1RTIKLToxMDRGRDAwMDlEMjU2NTE0RkQxREY0RkU5OENERDNDQTZGREQ1RjM2QTcKLToxMDRGRTAwMDlFQTdENTRGRjRENUYwMEJCQjY3QTVGQkJCQzc1QjMwQzUKLToxMDRGRjAwMDRDQ0U2N0JFQzU3MkYzRDQ2QzhFQ0YzMkJEODNERjNCMUYKLToxMDUwMDAwMDVCRUFGRDUxQjk0QUI3RjM1QjEwMjNFM0E3NDQ4Q0REOUIKLToxMDUwMTAwMDBERkFFRDc5M0M4OUNGNDRCQjY4RTRGQjQ3NUE5Q0ZGMEQKLToxMDUwMjAwMDRENkI1QkVFMTk0NDQ1RjNFRDREREE3QjYwMDExQkU4RjcKLToxMDUwMzAwMDYxRDI1ODkyQzNGMjg0RDhCNjY1NTdCMzkzRTRBMkM3M0QKLToxMDUwNDAwMEVBQUM2QzNGRTlCRkREMzU4QjI0QjhDRUZCMUIwMzQ5Q0UKLToxMDUwNTAwMEVGMDE3RDQwQjY4MUJFQjQyMTQ3RTU3MUFFQzE5RTFCMTQKLToxMDUwNjAwMDgxRkRGNjRENjc5QzNERkIwNTg0RDBDRTBCQTk0Rjc1QTUKLToxMDUwNzAwMDQzNkY0Qzg3RkEzQ0ZFQUZFM0VENDNGMUE0RUJBRDQyNDYKLToxMDUwODAwMDhCMzM0Q0Q3RTBEMkYxRDc2OTc3RDBGMEE3REY3RjcwQjAKLToxMDUwOTAwMDJGQjMxNTZENzJGMjNEOEE4OTg4REJEMkQ3QUYyNTQ3RDEKLToxMDUwQTAwMEQyNjVBRDg2MEZENDAzM0ZFQUE5NUVBMTlBMUQwM0ZCMkEKLToxMDUwQjAwMDcyODc3MEM3QjhCQUExNDMzREZEQkZDMjhCOEVGRjlFRjkKLToxMDUwQzAwMEVFNTdGNUM0MUY0MkY5QzI3N0REQjdFQTg5NEVGRkQ5MjIKLToxMDUwRDAwMDdCNTcwNjNFMjFFMzY4QjQ3NTA5QTQ1QkQ4M0Y3RDY3MjIKLToxMDUwRTAwMDk0NzkzRjZGQ0M5Njc2OEQ3MURBQkVBMkYzREQ5OTY3MjUKLToxMDUwRjAwMEU2MTcwMkY2RjE4NjU1QUFDNjJGRTQzOTVFOUM1MkM0MjMKLToxMDUxMDAwMEVGMTE4QjNBMTdDQjMzRTUxQTJGRDZDRkQ3ODUwRkM4QkYKLToxMDUxMTAwMEY3RTBBRUY1MTYyNTVDNDVGOTkyNjY5QkQ4NDhBMDE1RDgKLToxMDUxMjAwMEZCQkI4RkYzNjZCRjkzMUI3MUZFOUU0NEMwQ0QyNjM3MzkKLToxMDUxMzAwMDFBQjdCNDQ5MDlFQzRGQjlGQ0JERUNDNTRFRjk3RTVDMTkKLToxMDUxNDAwMEU4QkJEOThCMzVGRDE3MkYyQTYwREY4NkZBNjVFRUNGRDUKLToxMDUxNTAwMEQ2Q0U2QjhGRjA3QzJCRTE2N0JEQTUwQjdFOERERTAyN0EKLToxMDUxNjAwMEYyMUQzMUU4QzNBQUI0RjM3MDlDOTY4RTM3MzdGQzI0NDUKLToxMDUxNzAwMEYxNUQ3OUMyNkY0NDE2Q0VGMzQ2NkJCNzcxNzQ5REY4M0EKLToxMDUxODAwMEQ1RkQyQTlEN0VDMkMzMUNBRjFGMUExNzcwRDZGRjRBRDkKLToxMDUxOTAwMDc0Nzc3RTFBREQ3RkQzRDMzRUU4RjRERjdDODc1RkE4ODcKLToxMDUxQTAwMEMzNjk4OTFFMDUzRTA0RkZCRkRCRTg1N0Y5RjM0ODgyNTcKLToxMDUxQjAwMDkwRkQyNzMxRjA4RkI0NkFGRDg5OERCOUREREQ0RkY0QTQKLToxMDUxQzAwMEFERDhDNUYxMTBBQjJDQkVGRjQwNUNGMjE5RUExRkVGNjEKLToxMDUxRDAwMEIwREVFNTNDOTA4MEZCRjg5MzM0QkJEM0U1RjNENkU0MzYKLToxMDUxRTAwMEIwRDFGMjdFNDA4NzVGRTVGNUVFOTgyOEVGNzMxMzFGOEMKLToxMDUxRjAwMDE1RDg3N0JBMUY3RkFBMDhGNjQyQUFGQjQ5N0M2QjQ2RUUKLToxMDUyMDAwMDMxRkU3NTNGNDk3MTcwMTRDMzM5QjM2MUIxMEQ0RjQ4MTgKLToxMDUyMTAwMEI2M0U3QzdCNjE4NEJCQ0I3RkQyM0E0MEM2RTdGNEU0RTgKLToxMDUyMjAwMDQ3OTk3RUM5QzNGRENEQjg3NDE1Rjc3MzJDM0I0NUNBQTkKLToxMDUyMzAwMDZCOERGNzJDMDM5RDBERDkyNjZDOTg2N0FCQURGQkRGMEEKLToxMDUyNDAwMDE5OTg5MjIzRjdEMTUyRjhEMjdCMUJFMjdFNTYyOEFDRjQKLToxMDUyNTAwMDA3MkM1Nzg0MUUwN0M0N0M1RUNGNUY2Q0QyRjI4NTMyNjgKLToxMDUyNjAwMDdGQ0IyQTk5NkZENURFQzVEQUFBRDkzQjMwNEZBNDk4RjcKLToxMDUyNzAwMDBGRjRGMEVEOUEzRDA0RjM0MDhBNzlFMDNCRjgxQUYyMUUKLToxMDUyODAwMEUwNkJDODgzQUYyMTBGQkU4NjE0N0MwRERGNEI0NDUxMDkKLToxMDUyOTAwMDcyOUUyQUZEM0RFMzBERkIwM0ZFOUVGMTA2QjkwOUZFNTkKLToxMDUyQTAwMDFFNjMxRUZFMUU2MzdERjg3QjhDRTVGMEY3MThDQkUxRDQKLToxMDUyQjAwMEVGMzFFNkUxRUYzMUQ2ODdCRkM3OTg4N0JGQzc1ODFGRTgKLToxMDUyQzAwMEZFMUU2MzFFRkUxRTYzN0RGODdCOENFNUYwRjcxOENCOTcKLToxMDUyRDAwMEUxRUYzMUU2RTFFRjMxRDY4N0JGQzc1ODdFNzM5RDYyQkIKLToxMDUyRTAwMEYyMDdEREFDQkQzQjUwQkEzRThFRTlBMzM5QjUyODI5QTMKLToxMDUyRjAwMDg3RDZGNzNGMjNGRkU3QzdCNjU0QUNGM0RFMjVGQzZFMzUKLToxMDUzMDAwMDYwNTU4NDQ3QUU3M0QzNDRCOUVFMTYyMUQ3Qjk3RDBFRUMKLToxMDUzMTAwMEFGRjNFRDc2OTkyRjk0RjFDMkExRjQwM0JGQ0FGODc0RUMKLToxMDUzMjAwMEU5NTc0MTBBQkYwQTUyRjg1NTkwQzJBRjMyREUyQUZENTIKLToxMDUzMzAwMDJBNDhFMTU3QzE3N0Y4NTU5MEMyQUY4MjE0N0UxNUE0NzAKLToxMDUzNDAwMEYwQUIyMDg1NUYwNTI5RkMyQTY4MDdCRjBBNTJGODU1OTMKLToxMDUzNTAwMEYwMUQ3RTE1QTRGMEFCRTBGQjMxODIwM0ZFMTUxRDJFN0YKLToxMDUzNjAwMEM4RjlFOTI2M0Q5NEU4RDBBNDg3QkE0Qzc5QzhGOUM2QjMKLToxMDUzNzAwMEZBOTBGMzhERTU5MEYzOERFNTkwRjM4RDc5QzhGOUM2MzkKLToxMDUzODAwMEZBOTBGMzhERjkxQkYxODg3MTZGMjlFRjFCREI0MURFNzkKLToxMDUzOTAwMDM3RTY3MzlBRkNBRkMxODYzNTc5QzNGOTU3OTFCNjQ2QTMKLToxMDUzQTAwMDI5OEYyOTJFOTJFQjcyOUU5QTA1RkY1ODZCQjg5MjFDOUEKLToxMDUzQjAwMEVCMjEzOTc2QzU2RjY3OERCRjkyRjg4OTE2NkY5NzJCRjEKLToxMDUzQzAwMERBMkQ1ODZGRjY3QkQzQkFGOTgyODJFMzgzNzNGRTNCMDIKLToxMDUzRDAwMDkxQ0I3NTdGMkJGRkQxQkFFN0VEMTRBQzM3NkNDQjkwMzYKLToxMDUzRTAwMDcwRTlFRDNEQzJBNTIyRDVFQjc3RTVCQkFGMTczQUJFMUMKLToxMDUzRjAwMDVFOEZGOUE1MDEwRTUyMjhGMzEwMDc5MTc3QkIzMzFGN0EKLToxMDU0MDAwMEYxRUQ1QjJEOEE4QzBCNUQyOUUzNzI0M0U5QUE0OUUzMzgKLToxMDU0MTAwMDRCNUIyRDNCMEU0NDUwQkJGNjYyQzU4MzdCMDc5OTU2MTAKLToxMDU0MjAwMDcxQzg5NjBGM0NENUU2NDM5RUE4Q0I4OUQ1RTI4MzZCMjUKLToxMDU0MzAwMEFGNDIzQzkwMEVCNzZFN0YyNDNFQzFGN0RENDZCNzBCRkUKLToxMDU0NDAwMDdCMTk4RDczQ0QxN0MyOEVERjVCOTg2NDk3RjIwNERBRjcKLToxMDU0NTAwMDQxREYxQ0VBNTdCQzlCMENGNEJEMzI0NzlFN0IzRUZGRUMKLToxMDU0NjAwMEIyQUJDQUU4RkJEMEVEQjU1N0UxMUVEREE0MDhEOUVFMUEKLToxMDU0NzAwMDM3OEY0NzMzMUVBNzM0MkE5QkYwRkVDOUU4RURDMjhCNTUKLToxMDU0ODAwMEZCQjFCRkQ0RTAxRUJBREQ2NTJGRTM3MTVEN0NGRjRFM0EKLToxMDU0OTAwMEVGQjc3ODQzMzJERjE3MkMxNkFERTMxM0Q5MjdBMUYwMEQKLToxMDU0QTAwMEZCRTYzQURFNjg3RUFGNjI3RUM0RTIwRkMxOEVGQzJGNUYKLToxMDU0QjAwMERGQzMyMTcxRjFGQkRDQzNCOTY2Nzg2QzIxRTJEQkM0ODgKLToxMDU0QzAwMDVFRjkwRUU0RTRFMUM1QUI3QTEzNUNCRTgwN0MwN0YyQzIKLToxMDU0RDAwMDlBMkY2QTVGRTNGQzY2RjkwRTI0OTNDRjQ4ODY4RkNGM0MKLToxMDU0RTAwMEMzNDE3RTg1REZGRjk4RTJERjY4RTlFNUM2QkRFMDE1RDAKLToxMDU0RjAwMEI2MDRENERGMkUzQzUwMEIwNjA5NzlBRjU1OUY1N0I2NDIKLToxMDU1MDAwMDM4NjIwOTU3NDAyRkUyOTU3ODAzRkQxMUU3OTgwMTdBMzgKLToxMDU1MTAwMEM5RjNEOEY4N0Q5MEE5NTY5NzBERkM0Njk3NzM4QTVEMUMKLToxMDU1MjAwMDcyRUM0Mjc1NzQwQ0RGRjcwQjkxMTMyRTM2RjZFNkI4NjkKLToxMDU1MzAwMDhEN0YzRDhFQTQ4M0VGOTMyRkRGMTVDRTcyODU4RkY4N0MKLToxMDU1NDAwMDA3RjhFNkI5M0MxOTc3NTlCOUVDQzM5MTk2RDRBRTM4NEYKLToxMDU1NTAwMDkyRDMyOTgxQUQ3OERGRjM3NEVBOEVFODUxMEFDQjExM0EKLToxMDU1NjAwMDg3QzA1RkRCMUE5RkU3N0I4MkM1QUI1RUUzRkIxMDE3NEEKLToxMDU1NzAwMDFCMUY4ODk2RjdBQUE0N0ZBNTRDQzM5QjZFNkY1QUE4RTEKLToxMDU1ODAwMEFENEY5OTE2M0Y3NEJDNUVCRUNGNEJFNzMwQkZGNzcxOEQKLToxMDU1OTAwMEIxRDFDNjcyNDZBOEJDMjg4NEVCMEY4ODczMkI2RkI0QjgKLToxMDU1QTAwMEYxREREM0M1NkI4QjU3Mjc4QUVFN0U3N0M1MkJFM0NGMTIKLToxMDU1QjAwMEI1NzE5NzM0REEzODRFQTg1QzdCNDcyQkY0Nzc1ODk2NTAKLToxMDU1QzAwMDZBNzJFOEQyNkRFNkVGMjc3MjQyRTQ0RkZERkQ0NEFEMEEKLToxMDU1RDAwMDRFRjE1QkFGQ0M2NDM5QThENkM2NzFFRUYzNTc0OEI5MkIKLToxMDU1RTAwMDQ4RUMxMDAxREM2Nzk4QkY2MjlDMDVFRjU4Q0NERkU1MDIKLToxMDU1RjAwMEY1MjhEREQwRDEzQjlBN0MzNDA5ODMxMkRFQTc1RThBODAKLToxMDU2MDAwMDYwQkUzMkVENTIzRkNFQ0ZCQTk0QzhFOThEOTdCMkU0NzYKLToxMDU2MTAwMDc3QUMxREQxNEI2QkExQkM1RkZGQkUyNjE3Q0Q0NDFDRTAKLToxMDU2MjAwMDY1MDFFNEIyM0U0Q0Q3MUQ0NEQ3MTgyMjU3RTM1NzQzRDcKLToxMDU2MzAwMEJDQ0EyQjMwQzM0RkIyRjk1NjIxNEU3M0QyNDZDMUY3QzQKLToxMDU2NDAwMDkxMjY0MzdFQTI4MkQ5OTBBNzBBQjAyRjUyMEFGOTNFMzIKLToxMDU2NTAwMEM2NDQ4NUVGQjc0QzFFQkU0Q0RCMDdCNDJGMDRGMzExRDQKLToxMDU2NjAwMDdFRjdDMzM3N0U2QTAwRjEzN0IzN0QzQjJDNTg3NzdERDgKLToxMDU2NzAwMDNGRjhGQzZERkMwRUU2NjRCRjYyQzc3QjgxM0U0RENGRjgKLToxMDU2ODAwMEQ2RTkzRDc0NUYyQzg4RDRFQzYzNEU2OUZGRUFCNDhGOTEKLToxMDU2OTAwMDAxNTg3RTlDMjdGMjQ2QzRCMzJFODAyREIzOUZCNkIwMkUKLToxMDU2QTAwMDg0QUFBODZDNTk5RTlDMUI3OTYzMjM5NEFDN0ZEMzZFMEIKLToxMDU2QjAwMDMyREY2MjkxRjc5RjQ4RkVFMzc4NzU3MUE0QjAwRkU1ODEKLToxMDU2QzAwMDhCRDcyQUY5ODg5N0Q3RTFGQTdBRDhEODQ5QzM3QTc3NUQKLToxMDU2RDAwMEQxNDE0OUU3RkVDQ0VFMDNCRDYwRjk1RDE5MjZGRjRDRDAKLToxMDU2RTAwMDY4NUE0QUY4QzYzRTVBMTBEM0ZBNjNGQ0QyRDA4NDVDOUEKLToxMDU2RjAwMEUxMUQ5Rjg4NzdDOEY1Rjk4QTIwRTIwMkU3NkFGOURCQTUKLToxMDU3MDAwMDlFQkRGMjhGNkI5QzhDMjdDRThGQ0RFRDc3MjNFMjNGMzEKLToxMDU3MTAwMEZFNjVGRTM4NUZCMTFBN0YzN0FBNERGMTc5NzNFNTNEMUEKLToxMDU3MjAwMEM4MDk1OERGQzhFQzc2N0VDNzYwNjZBNjRCOUUyRjIxNUQKLToxMDU3MzAwMDc2OTZEQjcyRERGMjVEODQxMDdCNEI2OUI2M0M2Rjg0M0MKLToxMDU3NDAwMEQ1OUQzQzhGRkQzQTZFQjY1N0VBRjMzRTZFMzNERjMzOUMKLToxMDU3NTAwMEQ1RDNFQTVDNjkzN0Y4QkZCQTI3RjFBMDQ1REVGQjdGRjUKLToxMDU3NjAwMEM0MTJEOEYxMjJEMTZCQTBCNzZGMDFFNkZCMDhFMkJERUQKLToxMDU3NzAwMDE5N0UxRkNGNEY3RjQ3QTM5MzRGNjlFRjY1RThGNDc0RkQKLToxMDU3ODAwMEFDRUUyMkRGOTcyODcxREFEREFBODE5RUNBRDYyODdDOEEKLToxMDU3OTAwMDFGQjFBNDRFREUyN0Y2QUQ1MUU0QkRGQzFFRUM1NzhGQzEKLToxMDU3QTAwMENGRjk5QURGNTE3QUZDMTcxMUIyNTBDM0VGN0NGQjkxMEQKLToxMDU3QjAwMEQ3MUMyOTVERjhGRDUzRERBRjZDOTI3RjA2MzMxMDZGNjcKLToxMDU3QzAwMDNGQjczNjlDREY0MUZFN0E1OEQxOEYwMTdGNjRCNjg3QTAKLToxMDU3RDAwMEQ3NjkxMkYxMzRENDlGMUFFM0ZCMjlCRTk3ODgyMzA3QjcKLToxMDU3RTAwMDYxNkY1Q0YwRjNCN0Y4N0RFMTlBQkQyOUZDRUU2MUYxRTEKLToxMDU3RjAwMEVFQkNENTc4NDdFNUVCNjFCRTNCNzI4OTdFOEI5RDJFNzIKLToxMDU4MDAwMDNCRTQ5MEVBQzY1ODNFOTcxN0Y0RDFFRUE5OEI3NkY2QTIKLToxMDU4MTAwMEU3RTlFQkYzNjBBRTk0MDc4QTNDNzI5QzBCOUEzRTQ1MzUKLToxMDU4MjAwMDA4QjM0RDM1RDU5M0U3N0ZFODNFRDRFREEyQTFGNjk1QjgKLToxMDU4MzAwMEQwRjcyQUJFQ0I5RTAyN0I4OURENjA1N0Q1RUQzMUI2MEQKLToxMDU4NDAwMEFDRTM3MzcwOUVDRkI3NzdGRkJCOERBRkVCNzY0NzRENjAKLToxMDU4NTAwMDlGNUREOEE5Q0Y2NjRGRTgwM0I5N0Y5REUyODIxREJENDkKLToxMDU4NjAwMENDRTlCRTExRjFGNTY1ODc2Qzg4RjAxNDkzRTJEQ0YyQTcKLToxMDU4NzAwMEREOTJCQkU0QkIyNTI1QjdFNjMxM0Y5QjhGMzVDOUM3MTkKLToxMDU4ODAwMEJEODc1MUJDOEZDQjAyOTRDNkY3QkNERkU3QUQ3QjY1MEIKLToxMDU4OTAwMEMwMUVEMDUzRDBDQkY3RTBDQjVDNUU3QjlDNDEyRTJBNjAKLToxMDU4QTAwMDZENTI0Q0VGMThFOEY5MTc3M0E1MUQ3MjNFQTkxOUMwODcKLToxMDU4QjAwMERGNERCN0E2RDhGMTg2RDA3QzEyOEYxMDM3RjhCQTQ2RTQKLToxMDU4QzAwMDI3N0EzQkFBQzc3MTI1OTM1MkM1NDFGOUFFMTRDMTlERjEKLToxMDU4RDAwMDIyQzczM0ZFNEU1MTQ5OTNGOTNEMDZBQUNGNzJEREZFMzEKLToxMDU4RTAwMERDMjhFRUFGRDg0NUYzNEU0MUVBNjIzODA5MEY4Q0E3QTkKLToxMDU4RjAwMEY2N0JBODNGMzc4RkMzRUI1MTFBMENEODYwMzc5ODhGQ0YKLToxMDU5MDAwMDc4MTZDQUNGNzUwNTZDMThBN0E0NTFCRThGRTI1QjJCMjEKLToxMDU5MTAwMEM3RjFBRDg5QjVFNzQwMkVCMEJBRUMwMzhDRjI2MEEzQjUKLToxMDU5MjAwMDdDQ0Y3OEJFRjZGQjExMDQyRkNCQ0I2NTg0MjdEQ0YzNEMKLToxMDU5MzAwMEQyRUY3RDg2RTJBQjU4ODNCRkFDMjlENjJDNUYzNkFENjMKLToxMDU5NDAwMEIzNjE3REU2RjRGMDVFQzM5NzFBMUQ5NzM0OEVFMUZCRDgKLToxMDU5NTAwMEY1NjU1NjJGREY5N0YwNjlGOEZFRUJCMkYwQkJFMTI3NTMKLToxMDU5NjAwMDk5RDNGQzkwMkQwNTc5OEQyRjdEMDkzQ0Y3MDY5RTgyRjkKLToxMDU5NzAwMDE5RkMzRUQyQjI3MDhFNjc5RUUzNkFFMkY5NzZFMkZCRDIKLToxMDU5ODAwMDAxQzIwRkU0MTU1NzExRTM5QkU4QzQ4RjM4QzBCMjY2MUIKLToxMDU5OTAwMEYzRkE3NkMxMTMyNURGNjU2RjJFRTZGREI3QzhFQUIzQ0IKLToxMDU5QTAwMEJCOEM3MEFDREY5RjgxRkI1QjczNjhERkUzRkQyN0UxOUQKLToxMDU5QjAwMEYyRjE3RENDNTMwRkRDQzhCRkZCMDYzODgxRTcyODhGOUUKLToxMDU5QzAwMDdCMDJERTNCMjJCQTYxQkFENkU5Njc0MTgxRENDRkZBQkQKLToxMDU5RDAwMDc4NTFDM0FDRDIwRTNGRUNCQkY2QTlGNzIwRTRGMzA2MzYKLToxMDU5RTAwMDVBNkZEOEZGN0JEQUE3NzY1QzAwQTQ3MUVENjVGMkREMTMKLToxMDU5RjAwMEJBRDA3REFCRUY1NzdEOUZFQUZCNTZERkNGOEZEOThBQjgKLToxMDVBMDAwMDgyODk0QTE3REZBMUYzQkRGNkI5NkVGMDM0NDk4Mzc3NzYKLToxMDVBMTAwMEFFQjZBRTg0RDc1Nzg1QzFBRTM3NjI5OERDREZGMzUzOUMKLToxMDVBMjAwMENERkIxRkZEQTFERjU0QkQ3QzZDMzAwM0Y3M0RGNUZBQzMKLToxMDVBMzAwMEZBQjhGM0UzNjQzQkVDMDNEMDVCRUEzMDRCNjdGREU1NzcKLToxMDVBNDAwMDVDREY2MkUyMUZBNTlERkM2M0ZCQUEwNEYwOEYxRDBBQzgKLToxMDVBNTAwMEZCRTE5NkRGMjNFNUJFRTVDRkM4N0JFMTY3OTZCRkY4QTMKLToxMDVBNjAwMEY2MkNBQTc3RkFDMThEMEI4Q0Y3MkZDQTgyOTI1RjJDODUKLToxMDVBNzAwMDI0NzkwQkZDNjM5MTI2MEY2Q0NDRjRFNTBEMzNFQ0U3MzUKLToxMDVBODAwMEIyRkI5RkM5QzRGRTk4REI5Mjc3MEE2RkE4RDFCQ0Y5MUMKLToxMDVBOTAwMEJEQTMzRjNGRjNEMjg3NTdCOUJCQ0U1RDdEMUUyNTZCQkIKLToxMDVBQTAwMERFQjUxNTNCOEQ3ODkzRjQ3RTc3NTYwNzlGNUJBNTM4NUUKLToxMDVBQjAwMEI3RTg1MzY5NjMzMUYzNjE5MTQ4N0E4RkQyQjVFRUExQUIKLToxMDVBQzAwMEY0NTBEQ0E4QjA5QzU3NUEzNzMyQTBGRTJGRjJFQkQyMkMKLToxMDVBRDAwMEI1NTNGOThEMjg3REJERjQ3NzVGRjQ3MzU3ODc3RkE2QTIKLToxMDVBRTAwMEI2NEU3MzM1N0E5RTNENENFRUMzQjlFNTI5RjY0NUJDRkEKLToxMDVBRjAwMEZGNTNFQ0Y4QkRDRDM5NUFGOTlDMzJGM0Y3Q0VGNTcyNkQKLToxMDVCMDAwMDc1RjJGQkQ1RDgyN0I4OUY4NEY1RUE1ODZCOTNGNkNCOEUKLToxMDVCMTAwMEVEOTdBRDU3MzJFNDAyMUQ4RUM1OUE5RDcyQTE2NjZGNTYKLToxMDVCMjAwMDVDQTRDOUNCQjQ1RThCOERFQkI1Rjg3MUI5NUVBNUNGMjMKLToxMDVCMzAwMEJFRjUxN0JDNTM0NkYzRDNERUEzOTNFRjBBOTRCNEVDM0YKLToxMDVCNDAwMEUwNzU5QkIzNjY5RDJEODVFQUZENjQ1ODhBMjlGRUE4MDEKLToxMDVCNTAwMEI0MzZDRjA1M0JGRERDMzUxQjZERTAwNzNGMTkyNkYxNjAKLToxMDVCNjAwMDE2NEFGN0YzQjVGODYyMURBRjM4OEYxNDgzM0Y0N0FGN0QKLToxMDVCNzAwMDBGM0VCODgzQzZCOTc1NTk3OEI0RjE3N0VEMDIxQTNENzYKLToxMDVCODAwMDk3RDZDNkM2NjFCQ0QyREFFMjdCQTE3RkU5RTc0MEU4REUKLToxMDVCOTAwMEZFM0IxMTJFRjc0NTA5RjU4N0ZENzk2MjhDODdFRjU1OUQKLToxMDVCQTAwMENGRDc3RTM3MkZCNEZFNDMxQURERkREQTI2REZCRjRDOTgKLToxMDVCQjAwMDhBNkM3OTkyRTMzQjZBMjIzQ0UwMTNFOUU5QUQwMThDRkYKLToxMDVCQzAwMDBCN0EwNkRDNzY4QjdDMkYzM0JEQjJGNTczQzA0MUEyMTUKLToxMDVCRDAwMDNDQzdGNTIwQzU3QjVCMTBFRDEzMjhCRkM5MjJFRjc5QzgKLToxMDVCRTAwMEE1QUEzMkREQTdFMTA3QTYzNzk0OEI1RUFERkMxRTVGNDgKLToxMDVCRjAwMEU3QkI1MTIxRjQ2QTE3OUJEN0UwREQxRjdCMkZDMUVGNzQKLToxMDVDMDAwMEE2RTlGNEE5RjdBM0QzQTc0RUJGM0RDRDZGRDdGNzlDNjQKLToxMDVDMTAwMERGODkxNENEQ0U5MkU1NDk3NkQwQjgwQkVFMUJDNEJGMTgKLToxMDVDMjAwMDZCRjE1REYzQjQ2QkVGMzU3NkNFMzc0Q0ZFREVDNzY1QjYKLToxMDVDMzAwMEYzNEQ5N0ZBNTJDRkYzNkQyRTRDRTg2NkJFQTFGM0Q0MjQKLToxMDVDNDAwMEY3ODkxRTQzREZFOTRGNjk5MkZFOTQxMzBBOUQ2M0Q0REUKLToxMDVDNTAwMEVFQzRCMjcwOEVBQkQzRTdBNURCRjVCRkVGQkQ4NzhGODcKLToxMDVDNjAwMDg2QzU2OUY2QUFENjI4Qzg5N0YzQjVERjUxMTE0MTk5QzAKLToxMDVDNzAwMEM3RjdBOTg2RUZGQUY5QUZCRjVGQTdGM0U5OTNCNURBRTMKLToxMDVDODAwMEY5Mjg1QUVGQzE3RTE2NzU2OTdDMEZGNTU4RDM4OTI4MUIKLToxMDVDOTAwMEJDMTM3MzYyOEM4NDRGNkY3N0FCNERERTczMTY1MTc2RjUKLToxMDVDQTAwMDM3REVDRkJCRTlENjNDRkVCRDk0ODU4RDdENTg5RkJEQzgKLToxMDVDQjAwMEE5MkU4REY5QzI0RDdFNTgxNzQ1QTcxRUIwNDhFMzgzMjMKLToxMDVDQzAwMDkxQjcxNkFGQkUwMkY1RDdBN0YwRUZDMjJENzQ3QTRFOEEKLToxMDVDRDAwMEFERTdGNjQzM0Q5MDEzMjM5QkE3REE1MzU5MUU5NkZBN0UKLToxMDVDRTAwMDgyRUUxN0JCNTUxMTQ1N0M0RjBEN0MxMkZCQ0JCMjNGQUEKLToxMDVDRjAwMDFERTdDRkUyRjU1MjNGOTg2NDExNkJFMDNGMUREODUwOEQKLToxMDVEMDAwMDM0QTEyRkY4QzRDMzhBRkMzRDlBMERFNkY3QkM4NjBFNzkKLToxMDVEMTAwMDJBRkEwMjdDMjZGNDVEQkM1QjZEMkQ1RUU4QTc4MkU0NjYKLToxMDVEMjAwMDBFRDhEMTE2M0E4QjU4OUVCRjQ1RTM5M0M3OUFEQkY4M0QKLToxMDVEMzAwMEJEN0UxREFGOEZFMEJGNzhBNzJBQzQ3RTE0NkEyNzFBRTQKLToxMDVENDAwMEE4RDkwN0ZGMUZBRjhGN0IzRDAwODAwMDAwMDAwMDAwMzcKLToxMDVENTAwMDFGOEIwODAwMDAwMDAwMDAwMEZGQjU3QzBCNUM1NDY1NDEKLToxMDVENjAwMERBRjg3QkNFOTkyQkNDQzA4MEM4NDUxMjg3OEI4NDg1MEUKLToxMDVENzAwMDM0QzA4MEQ3REE1MTgxNTBCQkEwQkJCOUJBMjE4RTY1M0YKLToxMDVEODAwMENBNjUwNjUwREI1RDc3RDdGRThDQTFBNjY2N0RGQTQ1MTUKLToxMDVEOTAwMEE2NjVFRDgwOTc2QUMzNzY0ODM0MjhBOEM5MEI5OTU5M0YKLToxMDVEQTAwMDdGNjIzNzZBMkZCOTYzNUJFNjJENDBCQUZDRURCRjZEQTkKLToxMDVEQjAwMDdEQ0ZGM0JDRTczMDE3NTFEQkZEQkU2RkZDRjk3Qjc5N0IKLToxMDVEQzAwMERGRjM1RTlGRkJGM0JDQ0YzOTYzMzQ4Qzc1MUIxODYzMjQKLToxMDVERDAwMDJBOEI4RTQxMzk2ODQ4ODk2NDk5OEM4RDA5Njk1RjYxODUKLToxMDVERTAwMDRDODlDM0Y2MjVEQjQ1QzY0NjQwRkI3QzkzQzg2MjE5NDcKLToxMDVERjAwMDJCRDczMUZBN0Q4RkJGMUYzMTc2MUYzQzM3QzNGMzQyNUIKLToxMDVFMDAwMEE5MzRENjA3RkRENzM3Q0NBMDcyQzlENkMyNkRBRUYxODIKLToxMDVFMTAwMDhDMjUwOTI1QjE5MzYzNjBDMEUzNkFCNjA3OEEyNUNFNTUKLToxMDVFMjAwMDE5NzczMDJCQ0NEM0E0OEREMjI1QzM3M0I1MkIyOUM3QkEKLToxMDVFMzAwMEUwOUY2RjQ5RTM0MzQ5MENDNjlENjlENENGNzc0MzdCMEMKLToxMDVFNDAwMDgxNjk0RTQxMTQ4QzVGQkEzMzJBNUIzMkZCRkI1RDZGNzQKLToxMDVFNTAwMDExMTgxQkM5NThBNTczNDYxQzRCNjFDQ0YxRERFMTY3RDUKLToxMDVFNjAwMDRDQTlCMDFGOThEMzA0RjM3RkU1MDk3N0JCQTA4QkEzOUYKLToxMDVFNzAwMEFFMkQ0OTgyMjMzQ0FBQjNBNzU4QTA3Rjk1RDgzMTZGOTUKLToxMDVFODAwMDEyQ0M3MzRFNzBFRjREQTBGRUU2Mzg1M0MwRkFBMUU1NzgKLToxMDVFOTAwMEU5M0FDNkNDRTk4QzM5RkZDRjg3MzRDRkU3RTI4OTNCQkEKLToxMDVFQTAwMDE2QzA3ODg3NzM3RjA0Q0U1M0Y1RjgxRkYyMDEzMjZDNjkKLToxMDVFQjAwMDlENjhDRkIyRTRFMUJDOEQ3QjREMTIxQzc0N0I2MzU2QjAKLToxMDVFQzAwMDA5OUNFM0JFQzdDNzQ2REEzMzJGOUZGN0I2NjhCNkE4NkEKLToxMDVFRDAwMDA0REFDQkRCMThDMTU3Njk1RkU4OEVENDIwRENFRDVFQjUKLToxMDVFRTAwMEE2MzE2MTY5NjI5QTY4MjhDRjQ4NkM5NTA3Q0FEQjUyNkYKLToxMDVFRjAwMEQ4QTJCOTA2N0ZCQjBERTEwMEVCOUU4OURDOTI1NDAyNkIKLToxMDVGMDAwMEVEMTU3QjlGNDgzMjQzNzlENkM4RUJBNTdCN0Y3QTlDMDEKLToxMDVGMTAwMDQ1NDBGRkRENUEwREUyRDVBRTYyMUEwQjhDQkJENzI1OEEKLToxMDVGMjAwMEQ4REM1MEIyRjI2OEM2MTIxMEEzNkU3RDk5OTFCMTU5QjcKLToxMDVGMzAwMDk2NzA5QUFGNjI3QjBFNjNCOUZFN0RDMTczNkEzRkFCMDgKLToxMDVGNDAwMDYyQzVCODhGMzFGNTAzRDlDQkExRkM4QkNBN0IxRkUyQTgKLToxMDVGNTAwMEYzMkZCNTdBOEIyQjE5RjE2MjI2QkNGQzY1OEI1NDg0MjgKLToxMDVGNjAwMEVEQUVGQjA1MzY1NkMwRkE3RTYzMUFBQzVGMTZDOTZBMDEKLToxMDVGNzAwMDcxN0NBMUY0NTc5QjA0Q0Y1NzFDMTBCMkI1MzA3Qjc4Q0QKLToxMDVGODAwMDY2QjdFNjFFMDM5MTE2RDE1OUI1ODlEM0Q5OEE3Njc1QkQKLToxMDVGOTAwMDUxMjJFMDdGNDU4QjQwMkQwRTk1NTczMzFDQkUyQTJGOTIKLToxMDVGQTAwMDRENjZFNjgwRkQ1NkI2QjY2OENDQjA4RUEzMTlDRTA5MTQKLToxMDVGQjAwMEZEMUQ5RTUzOUFBNTc4NUVCNjg1QjE3Q0MwMjdGRTg5RUIKLToxMDVGQzAwMEY4NkIzRUE1QjkzNzAwM0ZENUFEMUMyRUNFNTZERUJFRDAKLToxMDVGRDAwMDM4MDM5MDNCOTlCNjYyMTNEMkEwREUyNjUwQkQzRTZCQ0IKLToxMDVGRTAwMEMyRkMzNUFBQzA3QUZFRkMzNTY5NTg5QTA4NEU0QzM1NzkKLToxMDVGRjAwMDkwNTQwMkYwREM5NEQxQTM0MUZDM0JEN0NBRjM0MjVEM0MKLToxMDYwMDAwMDFEQjA1RTBEMTJFNTQ4REU5RTZBQzBGMTY2MUFBRjNDMTcKLToxMDYwMTAwMDc3QjY0NkQxNzhBRjMzNkMwM0JCMDkzNjUxNkQ1MDYxMEEKLToxMDYwMjAwMDU5RUYzNDQ0NjBCOUIzNTZDQzUwNTk3MTczNjExNjA5QjUKLToxMDYwMzAwMEUwREYxMTE2OTFDNTIyNjFDQUFBNUUzRDQwMTI1MDNCQjUKLToxMDYwNDAwMDcwNTg4NEY2REM0OEZCODM0ODlGNzEwQ0I4MDJFODMzMzMKLToxMDYwNTAwMDkxNzkwNTA2RjRERkRGRjk1OTJFQ0U3RkNCMThERjE3RDMKLToxMDYwNjAwMDBDQjZBRTVFMzM3RDdFMDFEMEMzMjY4QjdDOEU0QzVGM0EKLToxMDYwNzAwMDJFRDJGMUM4NDM0MEFGQjBCRkE3RDU2QzgzM0UwN0NGNDcKLToxMDYwODAwMDU3QzJFNjQyM0JDQ0MyMDhDRkRGODRCOUY3QzBERkFGQ0UKLToxMDYwOTAwMDMxNkYyMkNFQ0Y3NERFNTQxQ0Y3OUFDQ0E3MjU1QUMzOTkKLToxMDYwQTAwMDA2MDFGNkY1OUIxNEZCNjNCODhGM0IwNUY1Rjg2QzExMDAKLToxMDYwQjAwMDcxMjA4REM1N0VGRDZBRkU5QzZENzlDMkE2MDNGQzRGRTIKLToxMDYwQzAwMEU3RTg2N0EzNDVFNjYyNDBBMjlBNTFGMTA2QTQ2M0MxREUKLToxMDYwRDAwMDY2NjNBQjYwRkQwNzMzMEZERENCODAyRTFFMUVEMDMxMTMKLToxMDYwRTAwMDJEOUNBRjVFQ0ZDRjNEN0QyMEVDOTQwMEZENDY4RjJBRTYKLToxMDYwRjAwMDE2NTkxNkY0MzdBQjU4MjlGNDNGOTQyOTdBNTVEODlGOEUKLToxMDYxMDAwMEU5RENEODlGRTkwQTZEQkUwQzU5OTY4MUZDRDA4ODdBRUIKLToxMDYxMTAwMDFCRjVFRjc4RjMxQjAxQ0E0NEU5RTJFMTQ4Mzg1N0UyODYKLToxMDYxMjAwMDJGMDU0QjNERjQyOTFCM0NGREY0RkY4NUIyRjQ1MjUzN0YKLToxMDYxMzAwMENCRUZBMUZDNzVBNEJEMTk1MTc3NzJCMEY4OTQxRDUwMzYKLToxMDYxNDAwMEY2QjBDOUEzQjM2NEYyRjkwMkY3REZGMUFCNkYyMkEyOTQKLToxMDYxNTAwMDQ1RkZCRUZBMDc0RUVGN0JEOThBQTVDRTIyQzBCOEU5MkIKLToxMDYxNjAwMDFEOTI1NzlCNzVGOTdFRkFFMzYxRTNBOUQ0OEZFMTM5NUIKLToxMDYxNzAwMEZCMERBMjVCMTBCMEZGRTEwRjcxN0ZEMzc1MDZBRjE0NkEKLToxMDYxODAwMDgxRTNENDE3N0MzQUZGMzg2NjFFMUQ3NUZBNDY0NjI4MEYKLToxMDYxOTAwMEY4M0U5MUIxNThEQzNDOEMxRkI4Njg3MDM3QzFCOTZGQkMKLToxMDYxQTAwMDkxRjk0RkExQUYxRThCNDhGOEU5OTFGMUE0QzA5MUU5OTQKLToxMDYxQjAwMEIyMjI5MTdFRUJENThBNUVGMDg1QjM0QzNGN0ZENkU4NjQKLToxMDYxQzAwMDM4RkYwQzVFMTI2RDM4RkY2MEI5RDZDRDYwOEFDMThFODMKLToxMDYxRDAwMDU0RDIyNzU3OTJBNzdGMDA3OUNBNDBEN0JDOTc2QUZCNTEKLToxMDYxRTAwMDMzQzIwRkY5NEEwN0ZDNzg5NzBDMkZDMDNGQzNGOTI1M0IKLToxMDYxRjAwMDc5RkVCQjY0QjhERDY1MTAzOTlDN0UxMjAyMjc5OTZFNkEKLToxMDYyMDAwMDE0QkE1MEY2MkY5ODYzNTg2OUI0MUY5RkVDRDdERDQ3MzYKLToxMDYyMTAwMDIzOTMwOThGRTNGRjgzRTNFRjEzQzJERjM3MjdENjAxMTAKLToxMDYyMjAwMDFCQjE1MUZGOTg0NTc4RkM1RkMwOUY1N0I0RkUwQkY4MzcKLToxMDYyMzAwMEVCMEVDNTlGNTc3RjNERTJFRjcxRDFEMjg0RkM4MDA4MDEKLToxMDYyNDAwMEM4QTFEMjI2QzJGOTU4MDYyM0ZFMkY5M0MyMkM5QkUwODgKLToxMDYyNTAwMDdDNzZFNEZGOUI4OEVGOEYyMkRGMkJGQzNFQTZEODM3QUQKLToxMDYyNjAwMDFFRjVFNDQ5QzY5RUMxN0RGOTQ0MEZCNUE3NjZBNzEwODcKLToxMDYyNzAwMDlGNUZDN0JBMTNCMDFERjA5QzM3MTdGMTJFRDg3NkU4OTAKLToxMDYyODAwMDI0MkM3REZCNUU4NkY1NUQxNTA2Q0IxRTM4NkZCRjVCNEIKLToxMDYyOTAwMDc0QTk2MUZFODYyOEY3OEVBNUIwNkVDMzVEOTkxNjE3QTYKLToxMDYyQTAwMEI2MzM5NkQ1ODY3MkEwM0NDQzgyN0FCRTIxOEFDQjg1NDUKLToxMDYyQjAwMDg2MDVFOUE0ODcwRjdFMjcyNUFEQzI3MzJDMDhCMzM0NjkKLToxMDYyQzAwMDQxRkY4NjZDREYyMzEzQTBERTMwRDY2QzcxNDFENzU3QjcKLToxMDYyRDAwMDA1OTZCRTFEQzdDRkQxRDEzQTBENzMzOEREMzYzQzMyOUQKLToxMDYyRTAwMERBOEQ3QTA1RjRDRkYzN0FBODNGNTkxRUM2RjA5QzBEREIKLToxMDYyRjAwMDhEQjY4NDY4QTBDQjk3MjJFQ0EzQjM2MUZGQTMyNDRFOTQKLToxMDYzMDAwMEQ3MERDOUQwMEVFNTM2QTE2NEMxN0QzOERGNzhCRTZGRTgKLToxMDYzMTAwMERGODJCMDE3RjdDMjJDRkEzNDEwNTlEMDdFNzI5NUIxRDMKLToxMDYzMjAwMDA5RTVBNTQyOTc3N0E1NzM3OTM3QzY3NTZBMDdDMkM5OEIKLToxMDYzMzAwMDM1OUQ2NUQ0QzJGQzdGOTNFOTRCODFCQjYwNjM2QzU1OEUKLToxMDYzNDAwMEI0MUZGRTBBOURDNUM4NzAxNzU2NzM3QTczNEQ5N0U1NDIKLToxMDYzNTAwMDYyMzU3M0Q3MEIwODVGRTYwQjA3Rjg5NjY5NDE0MTQyMzcKLToxMDYzNjAwMDY5MzREOUFEQjhFRkZBRTU4MDE3MDlGN0NGRTE3RjUyNkMKLToxMDYzNzAwMDY0RTU5RTYxRjhFNzQ3MjgyQ0YzODg0QzA0RTQ4RjMyRUIKLToxMDYzODAwMEM2RjlBMzBDRTkwOEU5NkYxNUQwNTEwMEZEMzFERjc1OUUKLToxMDYzOTAwMDUxQTdDMzY1M0E4MkYxNkI4RDI1RDM3MEJEQ0Y4NTNGODAKLToxMDYzQTAwMEU0NjNFMzg5N0Y0QUYzODc1QjY3NTYzNjk3MDMwQkY0MTAKLToxMDYzQjAwMEY2OTlEODlGRUQ4RTE0NTE1RkFFMzBGMUY1NEU2NDdGQTMKLToxMDYzQzAwMDM2MUFGNUM1Qzk1RkJENzkxRDk2QzcyMzRBNkVDQjg2QkYKLToxMDYzRDAwMEZFREIxNjdDNUQ4NEUyRkM2RjA5M0UzNTlFRTM2RjBCQUQKLToxMDYzRTAwMEZFRkY2OEI0NDNDQTU2QkY0OUY0RkU0M0Y3NTkyODE5NjMKLToxMDYzRjAwMDMyNTA0RUFGMDQ3REE2MTVCMEU0NzRCMEYyM0U0Njc0NDAKLToxMDY0MDAwMDkwQzg2QTg5NkVFMzY1RkQwNTBDQTM0NzM5NzVGMzAwRjIKLToxMDY0MTAwMEQ4OEVDQUJDRjBGRjQ3OTc3NDZDODlDRTVGOUZDNkEyMjYKLToxMDY0MjAwMDgyRUEzMzc0MDk0MUZEMEI0REM5NDFDRjZGOEQxRjE3QUYKLToxMDY0MzAwMEY0N0NBNjM5M0JBODNFM0I2MzUyNTBGRkRCMkREMzgyNTAKLToxMDY0NDAwMEVBNzc0RTlDMTlENDdGOEU2RDRFNTBEREM2NEMyNDFGQ0EKLToxMDY0NTAwMDNBRUE4QTczM0YwMUJCRTFCNUJBOTJEQzRGNTQ5N0UzNDUKLToxMDY0NjAwMDYzQUFGNkQwN0VCMzA1RTgyNERCM0I1RjM1MDlFQTkxRTkKLToxMDY0NzAwMDg3NTYyNjQzN0Q1M0NCMTE1RTRGM0NGNDQ1MzJFMDY2OTAKLToxMDY0ODAwMDczQ0JEMUY5MkFEMERCNTM2RjNDRjQ0NTBBRDQxRjZEOEUKLToxMDY0OTAwMEU5RTJDRkE3QzA2MkEzNDBBQ0I2QkMzOURGMDVGODlBRTkKLToxMDY0QTAwMDlCNjJERjhBRjg5QTc3QTlGNjI4OEFGOUY3RDdDQ0JEREMKLToxMDY0QjAwMDJGNTk0MkI5MzA2Nzc0MDZFQzI3MzdDNUZFMTAzRUJGMkUKLToxMDY0QzAwMDJCRjY5RTc1OTEwMEZCMUY3RDVCQUI0NjNDQkY5ODVEMzQKLToxMDY0RDAwMEIyMTVFOUExRkYyMkE3RjM1Mzg4OTc5MUZGN0UwOTk2OTEKLToxMDY0RTAwMDAzRDk2MThBOUNCRDkyM0M1NEY4QUQwM0Y0QzYxMjE1RTEKLToxMDY0RjAwMEMyNDk0N0E1QjdDRTQ0RTVBMUJBNzgyQThGRDQ5OUQ5MjUKLToxMDY1MDAwMDEyODA2MzU3NUQwNjk1QzdFQTJDRDQ3RUJDNkUyMjk1MzcKLToxMDY1MTAwMDI3RUE2QzU0QkU1QjU3NEM2NTc3NUQwOTk1MEFGRkIyNUMKLToxMDY1MjAwMEJEOTYwRDZBMjQ0Mjk3MkFFQUI0Q0U0RjhGNTdEMjYzQTQKLToxMDY1MzAwMDIwMjhEOTY5MDU5RkQwRjk0REJEQUQzOTlCQ0U3NTlERjkKLToxMDY1NDAwMDA5RTk1OTY5M0ZEQUY5ODE1OTA0RkE5RDZBRDUxMTNEODMKLToxMDY1NTAwMDRGMzU3NDlCNzU1NjVFNDdCOUI4RkIyMkYzOEExMUJDNjAKLToxMDY1NjAwMDlGMkFCMDVGOEMyNzFCRkQ5OEE5MEUwM0Y1NEIxQjg0NTcKLToxMDY1NzAwMDdFNTlEOEVGQ0QwNDk0Rjc1MzZCMzUxNkI0NjM5RTUwMTMKLToxMDY1ODAwMDMzOTcxRUY2NkYxNERGOTA3MDFERTMyMENBNkNEODA1OTgKLToxMDY1OTAwMDE4RDUzQTkwNTc3MUEwNkJGMTM5RjQ2MzNBMjg3NzBGMDgKLToxMDY1QTAwMEYyRjU0NjQ3RDcyRTQ3RjkzNEJBQ0M2MEE5RTdGMjk1MDEKLToxMDY1QjAwMEU0NEJFMjA4NkYwMkVFMkY3MUE1ODZEQThENjI4RjE5MjcKLToxMDY1QzAwMEU1NjA1RjlENzcxNkQyNjk4MTJDRTcwQTM0NUNFRjMwNzUKLToxMDY1RDAwMDExRTRCRDgwN0NGQjZENTcyMkRBRjNFRERDOUUyRkQwRjkKLToxMDY1RTAwMDk2RUM0NEZBQUU1NjcxRkU2NTMxN0FGNzFFNUM0N0Q1REIKLToxMDY1RjAwMDVERjEyQ0Y0RUI4OTREQjQ2QzQyNjhDNTFGNjQ2OTYwOTEKLToxMDY2MDAwMEI3MTdENjE0NjdBMkRDRUQ2MTVCODhBRkMxNUVGRDEzREUKLToxMDY2MTAwMEQyREI4RjMzODFERjQ1OTk0ODYwOUVGOEUyRjBBNjREQ0EKLToxMDY2MjAwMDAyREFBREQ3RTcyMTVEQ0VENTlBMEYzMEUwMDc1RkY2RUQKLToxMDY2MzAwMDAwRDFGQkRDNDg3MzFFN0EwQUJFRUNBRjc5M0RDRTdDRkMKLToxMDY2NDAwMDQwODBFNzI2MzYzMEJGMDBFQTU1Q0ZFOTREOUYwNEYwODEKLToxMDY2NTAwMEE5RDMxMzE1NTRBRjY5NEIzMDdEMTJDMEE3NTVGODA3NjUKLToxMDY2NjAwMEZBNDdCNzA5MkE5NEJCMEU3OTJCQTcwNEZCMDVDNEI3RDgKLToxMDY2NzAwMEIzRjg3MzBEREZERjgwMDZFREQ4OEJEOTY2QTI2RkIwNUIKLToxMDY2ODAwMDk3NDlFRjBGQ0MzNEJBOUI2MEJGNzEyMzZBQjM1N0EwMTAKLToxMDY2OTAwMEZEOTQ2OUNFQzM3RTQ5RUE4MTA4RjQ2M0ZBQkY1NTE1QkIKLToxMDY2QTAwMEJCQzlFRjE5ODhGOEM5NzgzRjdEM0REMzIxNTE3QjI4QkMKLToxMDY2QjAwMEREQjVFNjcwN0ZBRjI2Q0RCMDE5RjE1MDFEQUZEMzUxRDcKLToxMDY2QzAwMEQ5NzFCMTg4OTE5RDU2OTI4Njc2Qjk0REMzRkRDQkQwRDQKLToxMDY2RDAwMEYxN0I3M0I4MUU0OTVFQUYyMUI5NDBBMjA4QjY2QzBCQkUKLToxMDY2RTAwMDYzNEFEREM1MjYzMkQ2Rjg4QkIwMjFCRjA3QzBDOTM0NTYKLToxMDY2RjAwMDYzNjUzRkM4MzU2MjQ3NDE1QTUwN0YxQkY2MUY3QThFNEIKLToxMDY3MDAwMEY2MUNGMzhGNEY3OTQ5QkI2M0FENEE1RTBGRTk2NTI5RUIKLToxMDY3MTAwMDczQTMzRjE4MkFDN0FCNzJBMzY1QjlDMEYxRkM3NDhDOTAKLToxMDY3MjAwMEJFMTFGMTlDMjYwMTdERTc1MEM5NEM1MDI2ODYzM0IyM0MKLToxMDY3MzAwMDM3MTM1RkQ3QkI5MTNFNzdFQjM5RkRBNzg5QkNEQzJEQzIKLToxMDY3NDAwMEYyRkU5QTMwRTY0MjdBNTdGQzg3NERCOUY2MjlCOTc5QkMKLToxMDY3NTAwMDM0OEY5N0U2OTE1QUIyOTFBRTEzOTg4N0Q2NTdFQzI0QUUKLToxMDY3NjAwMEE1MUZEODQzN0ExMjAyQUE4MTc0QzRENzU0NDkxQzE2QjMKLToxMDY3NzAwMDlFMjc3MkE2MTVFNThDNDRGRUIwQjE0RjAzRTQ3NzVGMDcKLToxMDY3ODAwMDc4QzRBQTQwRkM1NUUzNzg0M0UwQjhFOTM0NEUxOUVGRTkKLToxMDY3OTAwMDVDMjVCMjRGNDc5MDVDMjQzQTcyQTY4OUU0MkY1NjRCOTEKLToxMDY3QTAwMEVDODg4MEZFMTZFQkQ2QTA5RTUzQzZGNTgyMUNGQzE0MjYKLToxMDY3QjAwMEYwRjA0NzkwOEI1ODdFMDhGMjEwRDdGRjMzQzg0MzJDNzcKLToxMDY3QzAwMEZGMEFGMjEwREI0RjgyM0NDNEQyMDdGMjEwREIzRjA2MTcKLToxMDY3RDAwMDc5ODhFNUJDQkI4RDU2RTQ5RjlBQjY2OUVDRDMyMDdFRTAKLToxMDY3RTAwMDUwREI3RDAxRjVERTY5QzNEMzkxNDNBNkEzREVFNEUxNkUKLToxMDY3RjAwMDlGQUZDQkUxN0U0NUVGMkQxQzlGRkRBMEJGRDFGRjAwRDkKLToxMDY4MDAwMEJBNUM2QjhBQkVCMjFFRUYzN0IyRjkxRTgwRDNCNjdDN0IKLToxMDY4MTAwMDZFODdGNDI3RjBGQUQyMUMzNUQ1NkQyMkRCOEVFM0I3RjQKLToxMDY4MjAwMEU1NkJGOEZBMjk2MjM5M0VCNzQ1RjM3OTdCRDM0NUIyNzcKLToxMDY4MzAwMDlGQTY0RTlFQjYyNDA3OUVEQjYyQTEzREM3NUZFRkJEQkIKLToxMDY4NDAwMDgxM0ZCNzhERTJFRDQzN0E1NjdFM0UyNUQ3QTRGOEVGMUYKLToxMDY4NTAwMEU5REMyRjY1NjQyNzAxQkREM0ZDNEFGRkY3MjY3MjNFQjEKLToxMDY4NjAwMDBDRURFRjRFMTM4QkREQzNDMEUzMkQ5OTZGODkyRkQwNTQKLToxMDY4NzAwMDlFNDYzRTQ4MEVFMDhCNkEzM0YxODU0Mjg3MEFGRDU1RkQKLToxMDY4ODAwMEU1NzIzOEE3Njk2NTNBMDdERDQyRjA0MzFEODM3MjNBMjUKLToxMDY4OTAwMDRFNEZGNjI1QzBDNUM2RTAzQ0JCMDU5OTVGNDJGOTAxRTUKLToxMDY4QTAwMDRBRDQwNzBBM0YyODdDQTBEMDdCMjJGMDk5MTBFRDNGMDQKLToxMDY4QjAwMEM3Q0QyMUY0QUE5NDhGQ0FFN0U4OEUzNUZFOUNGMERBQTIKLToxMDY4QzAwMEExMzZBMURGNzczM0NDODdFMzEzQzVDMTc3RUY0NkZFNEUKLToxMDY4RDAwMDhDMzU5QUQxRjUyQzdDQzg1MDNCOUMxQ0VCRkFFRkMyNEUKLToxMDY4RTAwMDQzOTEwQjU3ODBDNzY1NzBEMEYwRjI1Rjg1MDNDOTM5QkIKLToxMDY4RjAwMDk0RTM0OEJGQzNDOEFERkQzOUQxQjI1RENFRTlGNzQ0REEKLToxMDY5MDAwMDhFNkQxRkQyNTFCRkEwNTdBMURGRDBBRjY3QzNEQUQ5QjgKLToxMDY5MTAwMERCRjIzOTdGMjg3NDU0MDUzQTEwRUI4OTc4Q0VENENCNUEKLToxMDY5MjAwMEU1OUU3MjlFQTE3MzJFNjMyNEZGRDJDMjc4N0IyODlFQkYKLToxMDY5MzAwMDk1NzMwNUM4QkZDMzM5MDFGMTFGQzZCODdENzExREQ4NTUKLToxMDY5NDAwMDE3RTg0RjREQzkzNUQzM0VGQTQ3N0U1NkI2OTVGOUNGNzUKLToxMDY5NTAwMDdGNDcwRTZGN0Y0QTk0ODgxRTE0RkQzMkQ0MkU0ODhCRDkKLToxMDY5NjAwMEU2NjQwNkU5MUQ2NjQyM0ZBRjUzNEJGQ0VFMDU3RkU2NDkKLToxMDY5NzAwMDI1MTg4NzNFMjE5QkU0M0ZCRjIwRTM3MTcwRkU1ODExMkMKLToxMDY5ODAwMEVEQkJCRUFGMEQyRUQ0NjM3REEzMDY0RTBBMzBCRTZGQTUKLToxMDY5OTAwMDNCMTgzNjY0OTdEODZFMTM0MEVGREUwNzNBMDZGNUQ0RkQKLToxMDY5QTAwMDA1OTA3QjJDOURCMTczNzIxQ0ExQ0Y3M0YxMjRGQTczRjcKLToxMDY5QjAwMDM1M0IyNEE2MDM1MDRBM0JCRTlBODdGNEI0QjQ1MzZEQ0EKLToxMDY5QzAwMEEyQjhEMEY2Qzc4RTIxM0Q5RTZFMTVDQzY4OTdGNEI1NUYKLToxMDY5RDAwMEMyRjFBMUJGQjNDMUU4RDY0M0ZGMjJBODYzRkY2NTA2OTkKLToxMDY5RTAwMDhEREJDQ0Q3QTNGODgzNDM1RUVGNTM3RDc1MEFDNjg1NTQKLToxMDY5RjAwMDY2RUM1MDEzREM5NzNFMkZCOUQxM0UzQkJDN0RBNTBBMTcKLToxMDZBMDAwMEVCQTdERDAyOEI4MzcxNDVEMkVBQUUwNEE4NTczRTJENzkKLToxMDZBMTAwMDU4QjQzMENFNjEyODNBOEJGMTgyQ0FFNzk5QzUwQkYzOUUKLToxMDZBMjAwMDU3QjYxOEM5Q0Y1RERBQTBGRUQ4MTc2MDVGOTRCQkI3MjAKLToxMDZBMzAwMDZBRDBFRTI5REYxOURDNUVCOTNCQjgwRUY4MjJGOUVGMTcKLToxMDZBNDAwMDY4ODZGNjAwRjlGQzZEOEUzMTg2RUNDRDcxMkMxQkVENUQKLToxMDZBNTAwMDRERDZDMEUzQjk4QTdDQkZEQzZFNzU3MTM5QkE4MkNCODIKLToxMDZBNjAwMDZEQzZCRThDNDU3RjVGRUFGQzJBRTk2MzAzQUZDRjkxMTgKLToxMDZBNzAwMEVCQTdBMEZFRjk1NzFDMkYwQTVDQUFFNUI1M0Y0RjYwQjMKLToxMDZBODAwMDU2MEY5Q0I3QkE1MzZGNDJGRkJGQkFGREVGMTExOEI3NEMKLToxMDZBOTAwMEFGMDlGMzUxN0M5RkJEMjI5OUQwREVEQkQ4MjZCOTEwMTcKLToxMDZBQTAwMEJFQ0UwRUZEMkUxMUUwNTY3REUwM0Q4REQ5ODg3MDVGODMKLToxMDZBQjAwMDRFRjZDQUFEQ0NCNTFFRTNEQzVFNTE2NERENDQ0N0RENjUKLToxMDZBQzAwMDE0QTc2NkI2ODFBNTM4NEY1RkJCREU4NDc2NDBGNTJCRjAKLToxMDZBRDAwMDFGNzRERDhERjUwMzAyRDMyMzFFNDdGQjg4NEU5NkVFMEYKLToxMDZBRTAwMDQwODZBNTJEREQyNkU0RkJFOTQ0NDJCQzIyOUUzRDkxNzMKLToxMDZBRjAwMDg0QUY2NTg4NzdDNDMzRTAxREYxMkMyMTNFNzFCQzUxMTEKLToxMDZCMDAwMEUzRTY3NDIyNTFGREY0NzMxQ0JGMEFERThCQTRDRDFBOTgKLToxMDZCMTAwMDZDQUY2Q0U0Nzg5RUIxNjNDRkI2MzBBMjAzMzU5M0U5RDUKLToxMDZCMjAwMDgwRjA3RTdBMjdDN0JCQTY3MzlENjYxNEQyNkY2MzA4NzgKLToxMDZCMzAwMDFEQjQ2Qjg3RTgwMEY3NzcxOTFEODRFMEJGMDJGMDhENjQKLToxMDZCNDAwMDcyMjA5NDBFNDJGMURGOTNDM0U1MDZEOERGQTc5RjQyN0YKLToxMDZCNTAwMEZCREIwODdFMDFGM0M3MjM0NjU2RjUxRThEODFGNUNBN0YKLToxMDZCNjAwMEEyQ0YzQjk3NDNGQkQ4Rjg5NzU4REEwODhBN0YxNUU0MDEKLToxMDZCNzAwMDYyRkM2QkU2M0JFQjEwNUQzREIzNUVDODQ2N0FBOTU3RkQKLToxMDZCODAwMEZCRjYzQzgxNzE4QkE4NzA4QUUzRjQyN0NGRDlGOTMyRTgKLToxMDZCOTAwMDlDQkIyMEZBOUJBNDE2RDg3RkNENkI1QUJBREUyOEM5QkQKLToxMDZCQTAwMDE1ODdFQzM1OEM5NzI5RjE3NEMwMzNDNUM5OUMxRDVBRTMKLToxMDZCQjAwMDFFMTc2QjJEQjQwNUZBNzNGRDA5RkM1Qzg1OUE4MUIyMzIKLToxMDZCQzAwMEU1RTgxN0MwN0NCODhFNjBFMzdFNUU1NTA3OEYxNzI4MTYKLToxMDZCRDAwMDdFNTk5NTEyMzc2ODBFOEUxQjA4QTY3N0E4NUY0NTJFNDIKLToxMDZCRTAwMDhGNUZBNUM2REQ2QzQ2M0JCQzdFMDFCMzg3QTU1RTREQkQKLToxMDZCRjAwMDNGRjA3OENDRDNCMkRGNzQ0NUZCRjEwQTdBNDJCMTFCODcKLToxMDZDMDAwMDk5MkIzODZFQTFDOEE5NjUxM0Y5MUU4RkZFRTJCODZBRTgKLToxMDZDMTAwMDA0QzZGRDc2MEI4NDhGOEEwRTkwNEY3MERFMEFCN0RBQjkKLToxMDZDMjAwMDZEMTYwMkY4NDlFRUZGMTlEMjFCQzBFRDhDQUJGNkEwMzEKLToxMDZDMzAwMDI4MjFERDE5NjhCRjBFOTkzRUFCOTE4RUUwQkM5NUQ2MzgKLToxMDZDNDAwMDM3MjJGMDlDMEU1OUFFMzhEQThEMTQ3RkFCNjQ1QjhBMjQKLToxMDZDNTAwMDkwRUUyQTYxM0RFRjMwRjQ1NEY5NUMwQkY5MjlEN0EyOEMKLToxMDZDNjAwMDI3QzVDRUFDNkUwREVFQjczMTc3NDhDRThDRkYxRUUwNTcKLToxMDZDNzAwMEJCMDE2NDM5RDc3QjJFOTlGRTMyMjNGMURFNkY5MDk5RTgKLToxMDZDODAwMDIzOTE5Rjg3RjQ5RkMwRUQzNzQ1RkU1Q0JGMUQ1ODNDQTQKLToxMDZDOTAwMDYwREU3MTZFMUQ1MzA1QUM3RkUzNzNBNkEwRkE3ODRGREEKLToxMDZDQTAwMDdDNTBGRjlCREFDQzQxQ0ZCM0JEMTk0MUNGNzM4RjU5RDQKLToxMDZDQjAwMDgyRUE3OUREMTM4M0ZBNEZGOEQwMTY1NDlGRTQyQjBFNDUKLToxMDZDQzAwMEVBM0ZFNTRDNDk1MDdEMzAxM0NFNzM5NUZCQzE1QkUzNDEKLToxMDZDRDAwMDg1QTBGRTMzQ0RGQUEwRjk2NzY3NDQwNUQ1MDcwRDMyQ0MKLToxMDZDRTAwMDdDNjRCQjUyQjE3NzVGQ0VFNUY2NkU2OEE5QzBGNzc2REIKLToxMDZDRjAwMDRCRjAzQThBQkY3RUU3QzRFMEY1RTZEODgyRDdGQkExMjUKLToxMDZEMDAwMDc4RDkwQkZBNTQwNTdFQzI3M0EwNUZCMUZDMURGODEzNEQKLToxMDZEMTAwMDJBRjAxMzlBQzE5RkMwRkE4QkUwNEY2MEU5MDE3RjAyMEQKLToxMDZEMjAwMERCNUYwMjdGMDJFQkFERTA0RjYwRkQyMEY4M0Y1ODZGNjQKLToxMDZEMzAwMEFCMkJBNkYyOTVCQTEyNkFCRjE2RkNCQUU0NzU4RkM5REUKLToxMDZENDAwMEVCMUU5N0Q3RkQ3N0UxNzQ0MjlFRUY1RDc5QkU2RTlDOTYKLToxMDZENTAwMDJGQ0RGRkRDNTkzQzU2QkMwNEZDM0MyREZBQUNDNjg3NTkKLToxMDZENjAwMDdFQzMwQTVGMTFDNjJEMDZERTkyMThDNkE1OTlERDdEODkKLToxMDZENzAwMEFDMkUwNkY1RDkwODhBMzNCMzkyODFCNzMxQUU1MjdENzUKLToxMDZEODAwMDIwRDVCNEM5OENGQUVDMEZFRkUyRjNCRTU2Qzk4QzdDNjcKLToxMDZEOTAwMDc5QThFREVGMTEzOENGODU0QjYxNzQ1RjRBN0ExMEVGMTcKLToxMDZEQTAwMDFCQkY2MTU0REYwNENGMzEwRTNBQjMwNTA0MDhFOTM3NDUKLToxMDZEQjAwMDBGRTlCNzBCNjk0QURENERGN0JEMjVDRDJEMUFDNDUzMzgKLToxMDZEQzAwMDE1RjIyOTNDN0ZDQkEzMEU3RUZFNUM2M0QwNzMxM0Y2RDUKLToxMDZERDAwMDg3QjI0QUU1QTYzOEMyQjkzNjY1M0UyRkY1NzdBNEYxRTkKLToxMDZERTAwMDdCQ0Y3M0NGMUQ1RTNGMDVGNTZGQ0JFMjExNzg3RjVFRTEKLToxMDZERjAwMEQ1RkM1RUVDQkQ1N0MxQzdFNzA3NUZDOEE0RkJDQTc2RTgKLToxMDZFMDAwMDk4Q0ZFMDlGQ0ZEOUFFOTZFQjdDRkY4RUI0OTZBMjY4NjgKLToxMDZFMTAwMDU0MUNDRDAyMUIwQkM1MDVCNjg1RUU1RkFBREFGNjM4MDkKLToxMDZFMjAwMDUwNkU1NTY1RENBRDY2MDA5RjdFOEYyNEM3MzdGOEJENzgKLToxMDZFMzAwMDkxQzNDNEI4MURFN0Y5MjIwMkVGNTc1RkY3MUNCREMzMjkKLToxMDZFNDAwMDg2RjhFRDM4MUM4MUVCRjZCNzRBNDFGRUQzNjgyQkI3QzQKLToxMDZFNTAwMDhGNDc1QjM1ODRCRjBCQUQ4NzIzRjA1RTc3QTNFNzMwQTgKLToxMDZFNjAwMDg3QkJDQTRCRTczRjI0RDdGQkExMjQ3OEI3NDk3NEZFMDAKLToxMDZFNzAwMDhBNEI2MkQwM0Q3Njg2NTVBMjc5NjZCNjhEMzVFMkI5RTkKLToxMDZFODAwMDdBM0M3Q0JEMUNBQjk5QjdBNzJENUU4MkZCM0YxRUJGMzEKLToxMDZFOTAwMDIwNEYyMjdCMTAwNDM1Q0FGMTFCNjZFRjQxM0JBNENBODgKLToxMDZFQTAwMDIzRDk4NkYzRUYwQUU0NzlCQkQ0OUM0RURGNEFEQkRGQkIKLToxMDZFQjAwMDg1RjJGODc4RjE4ODZDRDIxMThBOUY2OUU1NzY2RjkxMzYKLToxMDZFQzAwMEM2OUU4NjdBQTRDNzYwMzYyMjlEM0Y1ODlDNkE0NEZDQzEKLToxMDZFRDAwMDFFQzIxMkRCOEI3NzY5RUMwNkJDQzdFNkVCRjU5OEJBRUQKLToxMDZFRTAwMDIzOTBFRTdBNUE3MzI1QjQ3Nzk0RjlGMkU1NzU4N0U4MjIKLToxMDZFRjAwMDdCMDg2RjJFQzI1M0I5QkJEMTgwRjNGOEYxQzdEQjczQTcKLToxMDZGMDAwMEFDMjZFQTdGRENGRERFM0NCNEFCN0EzMkMyQzkyRUU5QTYKLToxMDZGMTAwMEQyMzBGMkE3QUI5QUI5NUREQ0QzOTFEODE4Nzg0RjkyRjIKLToxMDZGMjAwMDYzOTVGREYyMEM5MUYwREFEN0E2OTZGQkREQkQ4NzA1REYKLToxMDZGMzAwMEY1NTNEMzM5MkZFQzBFREU4RkM5N0RFQTUxQjRDNzFENEUKLToxMDZGNDAwMDRGNEIwQ0Y1QTI0MzVEMUI4QkU3RkY2QzY3RjBGRUNBNEQKLToxMDZGNTAwMDY1MzgzQkQ0REVEOEQ4MDA3QTc1QjQwRkYxOEQ4MUU4NUUKLToxMDZGNjAwMEJDNURFMTEzMzNFMTUzQzE2MzRGMDZCN0U3N0FFMkY5NDEKLToxMDZGNzAwMEJEQTRBMzY1MEZEMUY1RTVGMUE0RUU2NEY0MUYxMjdGNjMKLToxMDZGODAwMEE5QTM3OEU3QjVGQzY3QzU2RTA4RjBBRjE4RkE4QkVBREQKLToxMDZGOTAwMEUyRDQzQzMxQzU2RjFGQkM5NjZCQUJCNjhFNDRCRkFCMjEKLToxMDZGQTAwMDg0RkNDQTFFMDZGNjJDQUNFOTQ0N0IzQTkyRjIxRkI2NkEKLToxMDZGQjAwMEUxQkE4M0FENkFCQUJGNzZFQURBNjY3RDAyNzZEOUEwMTUKLToxMDZGQzAwMDA1MTgwNUY2M0RCODUzMkRERjdCRDkwQzY4RDcyRTk1RjMKLToxMDZGRDAwMEVEREFDRkNDRjY3QzA5RjRBRjczOEQ0OEU3NzM2NDg2QTUKLToxMDZGRTAwMDkxMUZEMzI3Q0JCRENGNUI5MkVGMjRCQkUxOTg2NDQyQzYKLToxMDZGRjAwMDdGNjg4Njg3REJDMThFNjY2RUQ3NTY3QjkyRkY2MzJBRDkKLToxMDcwMDAwMERBRURDRDZBQ0NENDYwOEExREUyOTRFRDkwRDNCMkREODYKLToxMDcwMTAwMDdCN0FDRDgwODZGQzlCNEU4MTNEOTY4Qzc5MkE1QkJCMkEKLToxMDcwMjAwMDEyRTFCOTMzNzMxNkQ5QjM0RUE5OTlFQzg5NjVEQjgzQTQKLToxMDcwMzAwMEVEMDdCMDZGODJFQTU1Q0Y4NURBMTc3MjdDQ0IxM0RDOEYKLToxMDcwNDAwMEFFRjg4N0RCQUM0Mzc2QzYzOEY0NjcwQUE1QTk3MUM4RTkKLToxMDcwNTAwMDBGMkZDODc4NTVGQzlCOTVFMzJEOTRCN0IzNTE2NTlFQ0YKLToxMDcwNjAwMEE1QzQyMTEwNUUzNTlERkIyQjcwREY2RTQ3OTg4NUZDMTMKLToxMDcwNzAwMDhENTVBRjEwNUNGQkJGRTQ3RTRDN0YzQzIzNzhGNDMzMkUKLToxMDcwODAwMDBFREZGRTM2NEVFNzM1NkFDMThERjk0ODM1NDBCNjM0MUQKLToxMDcwOTAwMDlGNEU3MEFGQzEzOEIzNkIzMDgyRTQxMzYzQzVDODE3MUQKLToxMDcwQTAwMDJCMTY3MDdGRDU4NjMxNUYyODZCMTU3RTA4RDFBQkI3NjQKLToxMDcwQjAwMEE4N0M1MjU0ODA5QzY4QjNBNjUwQkYwMjBEQjNBMzNFNzcKLToxMDcwQzAwMDVCNjlCNDkwN0UxQkEzRTM3NjdBRTE2QTRGMzZEMkMzNDQKLToxMDcwRDAwMDE4RjBDN0I1MDFGMUY4MzE4NjAxMDFGQkVEN0U4MEM3REMKLToxMDcwRTAwMEZGOTU3OEMyMUM5NTQ5MUQxNUEwMUYxOTVCNDNGRDk1OUUKLToxMDcwRjAwMEY5NDFBMkYwRjFENzlBREYwNEYzMUJGQ0YzMDNCQzIzQTAKLToxMDcxMDAwMDExREU1RjU4MkRBNEI3OTNFNjI4RjdGRkI1QzQ5N0NBRTAKLToxMDcxMTAwMDc5MkUwMEJENjExQzE4NjMzNDg4MzdDN0NFMzdDODlGRUQKLToxMDcxMjAwMDczQjJFRUY1MzhBRTI4ODJFRkEzMDhGNzgzRjUzMDVFMzAKLToxMDcxMzAwMEZFNTE5NkU3QjE3OUJDQkM0RDJFMTVGOUQ1OTA2NzdCMTEKLToxMDcxNDAwMERGMEFGNTk1NzlGNjNGNTk0OUFFOTk4ODNFNTdDQUI0OUEKLToxMDcxNTAwMDAyRjY0QzlDNkYxOEY5QkJFMjFEODlGMEZBMDVGMDAzQUEKLToxMDcxNjAwMEYyRkJDMjVBQzE5QzE2NjQyRjcxM0FBRkUxNERFQzNDNjAKLToxMDcxNzAwMEYzRjQ0RTQ1MzhCODZDREQxOTk4RDdDNjM4N0YyRDVBRDAKLToxMDcxODAwMEE1MzdBNzA1REUwNzIwQkRBM0ZGNTEwMkZGRjJEMTJGQ0YKLToxMDcxOTAwMEUzQkY3MjUzQzU2RDk0NTdCNTJBRDY4Q0Y3MTczNUM4MUYKLToxMDcxQTAwMDBGMjlEN0E2RkY1MEJBODdERjRFQTRCNzZBQTZCNUEwQUQKLToxMDcxQjAwMDdFQTk2OTBCN0Q2RTUxQTEzREZFNEQwODVGMjRDOTc0MDcKLToxMDcxQzAwMERBNjgxN0U4N0VCREYxNUIxNThGQTM5NTBBMTQzN0JCMEIKLToxMDcxRDAwMDBCMUE5MTRFRTk4N0ZEQ0FBN0I5NzE3RUNDQjNBMEZCMEIKLToxMDcxRTAwMEFFODYxODM5RUYyQjg2RUVFMTdFMjI5RkZGMkU5NUY3QjMKLToxMDcxRjAwMDBERTRFRkEzNkE0RjMyQzY3MThFM0FGOTNERDUwMkU2MkYKLToxMDcyMDAwMEExN0JERDUyRDY0RDY1NkY3OEY1MDEyRjRERUUxQThEQkQKLToxMDcyMTAwMDdFRjgwNzc2MkRDNTkxMUFENzM2MTk1MUNFNjZCMUI1Q0QKLToxMDcyMjAwMDI2QkMxRjAzMzY3OUVFRkJEQzJCREIxQkExRjc2ODk0MzEKLToxMDcyMzAwMDlGOTVFN0M3RjNDQUJDOTJGODNDQTA4MzMzODBBM0Y4QkMKLToxMDcyNDAwMDlDQ0JDNzU3QkQ3RjIwMDJFMTdFRkVGRUZERjM3RUNBQzgKLToxMDcyNTAwMEQwMEYwMkI5MDVGMzU0RDZCNjY0RDBCRDhDOEI3NTY3RDgKLToxMDcyNjAwMEU0RkJGMUFCRTA1M0MxMUZCNDk5ODNGMDBBNjdCOTBFOTgKLToxMDcyNzAwMEUwMzM5RjBERTQ2MzZFRDNCNUYwQTlDMDM5NDkzREYwMEEKLToxMDcyODAwMDYzMDQyNUU4MzE5MjQzQTE3ODU2RTA1RUNENkFENTNDOEYKLToxMDcyOTAwMEZFNTZGQkVFMDJFOEZGQjNCNUEyMTlFRENBQ0JGMDdFQjUKLToxMDcyQTAwMDBERkM3OEY1RkM5MUQ3Mjg5MDNGN0IyNTdDMjk3ODVBRjYKLToxMDcyQjAwMEM4QkM1NEZGMzA4QThGRkI3MEExNDRGMUMzRkY2OTdDQzYKLToxMDcyQzAwMDM1RTREOTRCRjJBRUMyQjdBMTdDN0EyNUJFNUNCNDJBQjQKLToxMDcyRDAwMDg0N0Y0M0Y4NzQ4ODJGMkRGMDJGMDA3RkY2NTUxMUM0NUEKLToxMDcyRTAwMDhGMEE3RTFENjZGMDkzNTFGRjc1MTgyRDZFNzYzOTNFMUMKLToxMDcyRjAwMEQxREZDNUZENTRCNjBBRUM0OUUxODdGMEFCOEZGQ0UzNjIKLToxMDczMDAwMDUwN0MwMUFERDg1MDFGNTRFNzA1RjNBOTgyQzcyQkM5QTMKLToxMDczMTAwMDJENDVFRTdEQzRCQzQ3NEQwMkRENjc3MDNFRkU4NTk2NkYKLToxMDczMjAwMEYyRTk5NEZCMENFNURFRTJEMTNDQUU2RjQyQ0I4RkMwQkMKLToxMDczMzAwMDZFQzE3QkEyNEQxOTNEMjNEMURFRUJENTI4RjNGMDdCNDYKLToxMDczNDAwMEQ3OEZENjc0OEZDNjdDQ0Q4RkE2RjFCMjU3QzNGMzRDQkUKLToxMDczNTAwMDk0QkEyRDhDQzcwMzNGNEFEMEJBMTA2RTFGMDlFM0E2MUEKLToxMDczNjAwMEEzMURGMDkxRjBDQjNCNzgzRDRFNjNDNkZBODJCOEU5OUQKLToxMDczNzAwMDI2QThGN0FBOTVGOEUxODNCMkZDNzY1M0Y5RDE4MjA5RTEKLToxMDczODAwMDA1RDQ0RjYwNDcxMDFFNjY4MTk1RDAzQTgyMTA1RDBDN0YKLToxMDczOTAwMEZCRjlFOEU3NjM3M0YwNUU0MDM5RkYwMzc5M0M4RUY0NTQKLToxMDczQTAwMDFCRjkxQzQzRjFGNjVGMDkxNDZGNUYwNEFBQzM4NEY3NEQKLToxMDczQjAwMDAyRDM5RjI4NEU4MUY2OTNCRjRFQ0RBNkZCQ0ExNUMxQkUKLToxMDczQzAwMEVCQTNGRTREQTYzOEU1NTY5QUU3OTY0QjAzRUFDNTk5MUUKLToxMDczRDAwMEZFN0QwREU5Q0Q4MjhCQkM3REM5RDhBMDdDNjY1QkY0QjcKLToxMDczRTAwMDM4RUUyN0JCNTMyMzUxOEYyOTdBNkRGMEQ4N0U0MzYwNDYKLToxMDczRjAwMDFDRjVBQzFDNzcxRUFBOEY3QjI0Mjk1MDJGQkVCMUY3MzkKLToxMDc0MDAwMEUxNzQ5Q0E3NUNFM0NBQjIxODMwOEZGOUE5MjRCNDFGQjkKLToxMDc0MTAwMENBRjczRTk0NEU3NkVEREU4REU5RTg5Rjk0MzczRDlDQTkKLToxMDc0MjAwMDZFQTM3QUI4OURGQzIzMTUzRkY3Rjk3RDkzNzY2RDBBMUMKLToxMDc0MzAwMEIwQTM2RjlEQzBFREZCNTJERDFCODU2OERGQ0VCQUYxQjYKLToxMDc0NDAwMEYzNzUxOEI3MUZGQjZCODFFMjcwMEI1OUY3M0FENEI3OEQKLToxMDc0NTAwMDY1MTk5Q0FGNTg4MzhFRTQzRkNDNDdGN0E0N0JDNkREMEIKLToxMDc0NjAwMEJFMUJFNUZFRjE4Q0JGQUI5N0EwRkVDRDUzRDE3QzY1NzIKLToxMDc0NzAwMENDQkQzOTBFRTM2RjFCMDQ4QUJGRjlGQjhGQTY3QkQ3MDcKLToxMDc0ODAwMEM1NkIwNTREN0MwQ0VBNTE5RTc3RkRDN0JDMjg4MkUzOTUKLToxMDc0OTAwMDNEMUJCMkJCQjBCRDZDMzU2RjlGQTU3NUI3RjZFMDNDMjgKLToxMDc0QTAwMDRGNjgyOENGMEExNDY1NEE0OUMwM0RGNjFGRjNGODNEREUKLToxMDc0QjAwMEREQTJDRDcyQkVCMUJDQ0VEODZEQjE4RDgxRTdGQ0EzOEIKLToxMDc0QzAwMDhDN0Y1NkZFMDFDOTgzM0I2NUJDRENCNkZBQkQyM0YxNTcKLToxMDc0RDAwMDMwNkZBNERBRkU2Nzk0MkJFRjNFN0UzQTBERTU1OTQxRkEKLToxMDc0RTAwMEY0RDk0Q0E0RjNCMTFBRkI5MzE1NzhFRTI2MkRDNTJCRDUKLToxMDc0RjAwMEFENTk4OTUyMUNGNENGQjk3RkRBNjM1ODJFNUFCREY4QzIKLToxMDc1MDAwMEM5MEE4Q0ZCNkVENzkxMUZBNkVDNkY4NTYwMTZEMTVGMDAKLToxMDc1MTAwMDNERENGOEQzN0IxMDZFNjcxRUU3NzlBNDJCMUFBRjhGODIKLToxMDc1MjAwMEJCNUFGRUUyQjM3NTNDMUZGQ0Y5M0ExRDk1MkZENDk5NjYKLToxMDc1MzAwMDk4MTk4RUI4QUYyRTlFRUFCRkFGMzM1M0M5RTY3M0ZBREYKLToxMDc1NDAwMDUyRjJBNkFFMzQ1RkVFQTUzMENBNUJCNjZFRDA1MTFFQzUKLToxMDc1NTAwMDdEQUVENkY2NTUxRUMwNkJFQzBEQ0VBNjhERjJCOUM2MkIKLToxMDc1NjAwMEMyRjg2QzU3RjIwQzg0ODM3NUUzRjIyRTM0NjE0RkU1NTgKLToxMDc1NzAwMDcxRkZFQUVEOUUwRDQ5NjQ4N0FGM0VGNTRDMDUzQ0NGQTcKLToxMDc1ODAwMENDMkZGOTBFQzdFQjc2NUVBNDc4QzFFMUY2ODdDQTEwNUUKLToxMDc1OTAwMERFRTU0RDVBN0UzRUY5REM2NzFFNEY4RjdCMTJFM0JDNjEKLToxMDc1QTAwMDZGQTlDOTdGQUZEOTc5RUE5OThENTBERUJCNzlCOTI2MjkKLToxMDc1QjAwMDkwREU3RkU4NzlCRjk1Rjc3MzJEQkVCQTEyMUNGRTc1NzkKLToxMDc1QzAwMEJFN0EzODg5RjhBNzA5RjgyQUYzREZFN0FCOUFENTZCQkEKLToxMDc1RDAwMDA4N0U3M0YzNEJDNkU2QzNGRUNGQTg1RDQ5Qzg0RjY3NkMKLToxMDc1RTAwMEM2REQ0Qzc0RUVFQTE0MDhGRThBMUM1N0M2QTdFNkYzMDMKLToxMDc1RjAwMEZCRTgyQUQxQjM5OUVDNDg1OThFN0YwNTlFMjNDMkY3NDgKLToxMDc2MDAwMDhERjZDRkQyRDE4RUZFQUE2REMxNTVDRjdEQjAwRTNEODUKLToxMDc2MTAwMDIyOEM5QkU5QTgwQzdEOUVBRkIxQTc2MjVFNzFCRUM4QUIKLToxMDc2MjAwMEVERTdEMEU3QjdFNzJCNzE3ODFFQjdDNTlGMTA5MEE3OUQKLToxMDc2MzAwMEUyODQ4RDQ1NDZBM0ZFMTNCQzYxMjA5NzlENkRCNzlFRTUKLToxMDc2NDAwMDU1QTFGRjA2N0VFMUM3QzE3NjI4RkIzODQwQUY1RjY5RDAKLToxMDc2NTAwMEJGRDcyQUFCNzExRTk1NUZFRTRFRjg1MDY0REUwMDNEMzkKLToxMDc2NjAwMDNFQzkxN0M2QkMwMUVCMEVGOTJCRDBBNkExRkI5RTA0QTgKLToxMDc2NzAwMDkyMEI4ODM3Q0M4N0VBNkIxRkQ3ODRGNUIzMUE4RUM3NzUKLToxMDc2ODAwMEJFODNFMDk3RjFCODBDOTNGMkZERTczQ0RCN0UzRTBCNDYKLToxMDc2OTAwMEU1NkNFODc5QUI1RjM5NEZGNEUxNjg3QkU4QTI0MEU3M0QKLToxMDc2QTAwMDlGNzk1Njk1NzVFREYzQkZCMUY3N0MxNkUyRUZBQ0RBMzIKLToxMDc2QjAwMDk3OEZGRTU3OUZDNjk3ODU3OEE4N0U5NUNCRjM3RjE1NDkKLToxMDc2QzAwMDBFNEE3QkM1MDYwRDhGMTMwQTI2RjIyMzBCQTUwQjE0NTkKLToxMDc2RDAwMDA3RTgzQkM2RTMwMEQ1RURCQjQ4OUUwRTc2RjA3ODRDM0MKLToxMDc2RTAwMDhERDg1RDE0ODdGMThCREE1MzVEMjhDRjA2RTNCOTVGM0YKLToxMDc2RjAwMDA2RjNEQjI4Q0YyMTU1RDY4M0FBODFBNDM5MjBENzFFRDMKLToxMDc3MDAwMDE5QTIwN0VFMEY5RTQxRkVENUUwM0MxRTA3RTU2MTY1MUMKLToxMDc3MTAwMDg1MzNCNDJCQ0UyMTNGNDM3QkQ5QUFFNEY1NDhFNzY3RjQKLToxMDc3MjAwMERDMjM3MzUwM0VCRTlERjU4RjZBOEFERkJEMUU2RTkyQ0MKLToxMDc3MzAwMEM4OEU5NTMwQzc3ODA4NEU0M0U3NzA0QjNDRDE4NzI5RjcKLToxMDc3NDAwMDc2NzEzOEIzMDVGNEFCRDE5OEVGMjRCRkZBMzhCRjlGRjgKLToxMDc3NTAwMEFCQjk4MUYzMTM3Qjg1RjM5MzczRUQxQjlBRjg4MEY5MzIKLToxMDc3NjAwMDdFMjVGMzkzNjI0RkNFN0FGRDFGQzQ5NzBGRTdEQTlFMTIKLToxMDc3NzAwMDQwQkUwQzQ3NTk4OEYzQzU0NzUyMUVCNUYyMUU4NzcyQUEKLToxMDc3ODAwMDFGNjlFODkwRkRGODYyODk5RUQ3QjQ0OTBDRUZFNTU4NkYKLToxMDc3OTAwMEJDOTFGMjBBOEFEOTE2Q0FCNzlDQzUzQzUzNzk1RThGNTAKLToxMDc3QTAwMEVGRDEyOUYwN0NGNkVCNTIyRUU2QTE4MTNENERGN0RCQkYKLToxMDc3QjAwMDQ1NjFGNjM0Q0NEM0VBMTUwNTE5QUUxRUVCOUMwMDdENkQKLToxMDc3QzAwMEY2N0UzRUY3NTdBNzRBMDJFOUIxODE4NDcwQjI1MzY2NEMKLToxMDc3RDAwMENFNzc5NkUyN0U5NTdFNUE5MUVCMzM5ODg3RUMyQ0U2MzUKLToxMDc3RTAwMDFFQzhDMjdCNTVFNjFEQzhDMkZCNTZBNURGQkNEN0MzNjkKLToxMDc3RjAwMDZCNDkyRjMyOEY3NTVFQzAzQUE3RjM3OUJDRjMwQkJDOEYKLToxMDc4MDAwMDFGMDc3OTUyMjNERkMzMTY0QURGNkU0MzdGNkI0NTI3N0MKLToxMDc4MTAwMEJGN0ZFQzE1OTMzRkMwM0MzMzE3QzAxOUYxN0ExRUYwQkYKLToxMDc4MjAwMDZBNDNGRDYzNjczNjFCRjJDRkY4OTE2RUU0OUY5QTdENDEKLToxMDc4MzAwMDAyQzM3Q0JERUE3NjZEMTNDNjg1QUFENUJFNThBNEU3RkYKLToxMDc4NDAwMDhENkRFRjZCOTA5RTZCRjA1RTc2M0M4RTY3NzJCQ0RDNEMKLToxMDc4NTAwMDQ0NzlCRjM1MjZDNkVGRjVEQUFFRkYwMEUzNzZDRTYzOTYKLToxMDc4NjAwMDVDOEIzQTU1RUY1MTNDMDBFNTM2QUU1N0Q1REE0MkZFMTcKLToxMDc4NzAwMEJGODM3OUM5RkY3NzM0MDdEM0NENjAzQzhGRTc4N0YyQTgKLToxMDc4ODAwMEM5RTk3QzczMTA3RkNDRENDRUY5NjMxRUU2NzMxQjY4RkMKLToxMDc4OTAwMDM4QzU1RjY3QzZDNzkxNURFMjFGQzdGMTYwOTNDRUFGODEKLToxMDc4QTAwMDQzM0JBNjNGNDVBMDdDRkNGRTMwRDc1QUI0OEY1Q0U5MzEKLToxMDc4QjAwMERDQUVFOTdGRUQwNTJCQkRGN0EzNzM1QjdGOENGOTNDNTQKLToxMDc4QzAwMEIyREQzQjczQzM1Njk1MTRCMDlGOTkxRDNDREVEODFGQTMKLToxMDc4RDAwMEM2Q0EwRjEyREVFREQ3MjEzRTdDQjkyNTY3RjIzMUJFNTQKLToxMDc4RTAwMEEzMTk3ODc3MEFDNjgzNDQxRTFGMEQzRDg3NUQ4RTZCRjIKLToxMDc4RjAwMDFDNjdGQ0ZEMjg2NURGQjMxMzEzQjkzQzYzNkVBMkEzQkMKLToxMDc5MDAwMDJFMzlCRjVCQzlENzUxQzZERjMyNDE1MEVFRDFCODlGODcKLToxMDc5MTAwMDI0NThBRUZBNUUxQURFRDc2MDlFMkJERUQ3NjBGOTNCQTQKLToxMDc5MjAwMDM5MUYxNkVGNkJCMEZFQTI5QzBGOEJGNzM1RDg4RUY3ODAKLToxMDc5MzAwMDM1NTg2Rjk1RjM2MUYxQkUwNkVCNzg1RjgzRTUyQjcyRTYKLToxMDc5NDAwMDNFRUM3MURDMkFFNUYxNkQ3QzBBRTlBMjBCNzk2RDk0QkQKLToxMDc5NTAwMEJGREUxQjFENTIxRjE1RENCRjM3NUEwOEFFOEYxMkE4QTEKLToxMDc5NjAwMEJGNjlDMkM2QTczMEZGNzg5MzkyMkZDNUNDNDZCNEMzNzcKLToxMDc5NzAwMDJBQzJGOUZCMUFBOTA2N0JFQzA0RjRGMzhCNzdFRDQ1RDgKLToxMDc5ODAwMDdGMUVGODlCREU5RjJCODg1RTUwNEFFRjk3QzQ2ODE5RDQKLToxMDc5OTAwMENBQTNEQjI3RDg0NzRGODBGMUM3OEVDRDQ4REI0QTcyOTgKLToxMDc5QTAwMDUyNEZGN0VDQkQzRkJCMzE5MkUyN0E2RjQ5NEM4MjI1RDIKLToxMDc5QjAwMEE3NjVFNEFFQjU0MjdEOUE0MTIwRkE4NUY5NkUyQTUxNTkKLToxMDc5QzAwMEZDNEM5ODY3NDZDNzYyQUI4QUNCMDcxM0RBQ0I4NTkyMkIKLToxMDc5RDAwMDYzMDlBRUIzMjI0MTlGOEI3MkY4ODhENTlFODFGQjUxMUIKLToxMDc5RTAwMEUwNUQzNDZBNTkxQURBNDU1RDZBRjMwNzE4OUY3NUJEODAKLToxMDc5RjAwMEEzNjZFODU3Mjk3MTNDQTVERjkzRDY2OUY5QjhCRjk5MEEKLToxMDdBMDAwMDE5QTk2QjczNzA3RTYwMzY5NDc3MzYwRDZCQzZGREQ5RkQKLToxMDdBMTAwMEM0NzBBMTlFRTQ5NzU5ODVGMjIwN0YwMkE3OUJFOTY2NzYKLToxMDdBMjAwMDZFMUY3QjM1NjY1NTM0RkFGNTYxRDM2MkYwNUVCNzRCNTUKLToxMDdBMzAwMEM2RjMzMTE5Q0ZDNzY1M0NFMzNENTc4MThBREY3MzYxRDcKLToxMDdBNDAwMDg5Rjc1QzU4ODZFNkEzMkRDRjJGQjE0RDIwNzgwRjI0RkYKLToxMDdBNTAwMDA1RTZCM0NEOTJERjk3MDAwQUExRjdENDlDNzIxQ0YzMjAKLToxMDdBNjAwMDRCNTlFRTM0RTY5NURDQ0FDNzc5Njg5RTJBMzk4RTc3ODEKLToxMDdBNzAwMDVFMUQ3QzZGQTg4Q0YzOEY2NzU0Q0VCRDg5Q0I2QjE2Q0YKLToxMDdBODAwMEE5RTE3OUJGRDczMTE3RTYxNUNGN0QzOTgxRTI1MDdENjUKLToxMDdBOTAwMDZFRDFBNTA2QkNDRjA1NUU0Nzc5QzY1RUU2RkUyRThCOEQKLToxMDdBQTAwMEU3N0MzMzc3N0YxQ0Y1QUI5N0UzQTlDRUU4RUU3NDdDRDcKLToxMDdBQjAwMEFGQTM0RkU2MkZBNTdFRjAzQjlFOTdFNENDODFCQTgxMjEKLToxMDdBQzAwMERFMjNBMUYzMzlFNzc2QTc0NzQxQkQ0RkQwOEI0ODVGNEUKLToxMDdBRDAwMENFMjZGRUJDNDdFNjNGNjc4QTNDOUY3QzFFQTZGMzI0NjkKLToxMDdBRTAwMDIxM0VGQTNCNUY0RUMyRjcxMDM3MTlCQzRCQjlGQ0Y3ODkKLToxMDdBRjAwMEE2OTNEQzY2REU3NENDNkYzQTJGNzg0RTYyQkVGMUFEOTEKLToxMDdCMDAwMDZEMjlBNTk4NkY3RjVFRUQ3OTA2RUJCM0RCRDI3ODVEQ0EKLToxMDdCMTAwMDY4Mzk2OTBBN0MzRUQyOTM4NEY5QzhCN0I2QTU5NjYyRTMKLToxMDdCMjAwMDNFRjJGOTkxMkRDRjQ0NTkwMkVBRUE5NzRFRTI3M0NEMjUKLToxMDdCMzAwMDgzNjlBNTk4OUYzQzVCRUIzRTU2ODc3NEYzN0I0RTVGNTEKLToxMDdCNDAwMEZBN0QwNzRFMjM3Q0FBREFCOUZEM0U3RERGODEwQjJGM0IKLToxMDdCNTAwMEExN0UzRTYwQTRCQzgyNzUxMzkyMDlERkY1RURDRjZFNjUKLToxMDdCNjAwMDQ2N0FFQjZCNTExMzNGNkM2QTdFRkY5OURGNTAzRjJERDUKLToxMDdCNzAwMDg1NTk2NjZCM0Q1NjBDQzk5NEI0MURCQTFCRjczNTNCNEQKLToxMDdCODAwMERDRjMyNUQ2MTc0RkJDODlGNjMxN0IwNEU3RUJBNTEzNTAKLToxMDdCOTAwMDczNEE5MTRGRkIwRUVDRkIwNUVBQjNEOTkxNjBEOEUyMzIKLToxMDdCQTAwMDdFNUVEMDEzN0UyQUY3OEYyQkMwQjg0MDlGQjFCQjBDRUUKLToxMDdCQjAwMEU3QUZGRTlEOTZFNzFGRUM4RjlCOEU3MTgyRkY5Q0MwMDYKLToxMDdCQzAwMEYzMzEyQTZFRDg5Mjg0RkE1NjdDRTVGOUJEQkZDMUY4MkMKLToxMDdCRDAwMEU2RUZGNDc0REY1MzEzQ0RFREJENEFBOTMxN0YzOUUxRUYKLToxMDdCRTAwMDZGRDc1RUNDNUJFOTdCNUU0RkY3QUYxNTE4OTNCM0UyQkUKLToxMDdCRjAwMDdCQUM2MzI5M0VGRkVBM0ZGRjVFODY3ODI4OTQ3NkVFRjEKLToxMDdDMDAwMEM1RjYyRjc3RUI0NTg0NDM4RkM2MTY3OTMzRjI2MThGMjMKLToxMDdDMTAwMDlBRkNDRTBBQjk1RUQxM0I4MkVGMjdEQzU3NDRGODhCNDEKLToxMDdDMjAwMEQ5OTI4NEZBQjY3MkM0QUZFRUMwN0RDRjk2QjYzQzgzQ0IKLToxMDdDMzAwMDdFMEY3QjU2NEI3NzBFNjc5RjA3QjhDMUI4QjM3QkQ0RDYKLToxMDdDNDAwMDk4NDkwM0ZCMzBBQTkwNUVDRTBCNUJDQTlFQzRGOUY3M0QKLToxMDdDNTAwMEYwN0VFN0Y1NUIwODlFQUUzREQ3MzM1QzBGRkEzMUQ0N0EKLToxMDdDNjAwMEM3RTc4NUFENDFFRDY3RjczQzlCODU3RUU5QjlERkNEODAKLToxMDdDNzAwMDI2RkY1NEExNzM4NTVGMkE3NzZCODNGNDIyNDk4MjU4Q0IKLToxMDdDODAwMDhDNUJDQTNGOTM4QjE5MDJFMjU5RTcwRUVFRTg3QjkyQjgKLToxMDdDOTAwMEY5Qzc5RjZCNTY3QjM1MDBBMzBBMkQ1QjhCRjlDRDBBODQKLToxMDdDQTAwMDNGNTQyNkRFNUE4Q0U3QUIxNDFCRDNEMTdFQTlDOEY1MEUKLToxMDdDQjAwMDk1MjE1RjlDRDUzMzVEM0NGNDdCNUJENjVCOTVBRDZCQ0EKLToxMDdDQzAwMEU2QTAxRDdDQTVGREZDNDU5NjQ3NUZDOTdDRjg1NTlCNDkKLToxMDdDRDAwMERFMUQ3OERGMTg1QUZFQjU4RTk5NEZBOEZDRjU4NUI1RTQKLToxMDdDRTAwMDVBQjJFNTk1RjlERUQ2NzgxQ0U4QUY1NTQ3NzNGOTcxQkQKLToxMDdDRjAwMDEyRkEzNzgzMUNGQjkzQUNFRjE2QUQwQUVFRkZFRTA0Q0QKLToxMDdEMDAwMDlFNEY1OUFERjFBNUEzRkU1M0U2N0Y3QjgyODlEQjg3QTkKLToxMDdEMTAwMDJBNUYzQUNBQUJEMDcxQjMyNTU5REVCQzIwOTBCQ0E5MEEKLToxMDdEMjAwMDZDMTU0RUQxRkIyNDA4RDI1ODNGM0MyQjc1MkUzN0U2RkMKLToxMDdEMzAwMDEzMEQ4Nzg3Rjg3QzE5MEYxMkU2RjE3MEJFQUE2Q0Q2NzYKLToxMDdENDAwMERCRjQzMDRGNTU5ODJGMDJFRDI1ODdEMTE3ODE3NjUwRkYKLToxMDdENTAwMERGMkIxMjZCOTJEMTE3QTNDQzlGRTI1RjRGODk1MzU2NTIKLToxMDdENjAwMDc4RDQzNkZENzBFQkMxNzFEMDRGNUU4NjdGMDMyODU2MDQKLToxMDdENzAwMDRGRTQ3QzUzREUxNjRFRUIzMTkzMkYxRkU5QjY3QzY3NDAKLToxMDdEODAwMEYwMzgzQ0E3Mjk4MDFGRkJEQTc2QzUwNkZBRUIwQ0Y3MjIKLToxMDdEOTAwMDRERjc1MUE3ODg2RkZBRkZGOTMxQkQwNzVFMjlCMkI1REIKLToxMDdEQTAwMDc4NEY3OTRFRTBFRjgzNDA5RERFMDczOTI3REY3NzU2MjUKLToxMDdEQjAwMDdFNkQwODQzRkEzOUY3OTU4M0Y4Qjg0RkYwOTE5QzdCQjQKLToxMDdEQzAwMEIxQ0Q0NjcyQUM0RkVEMjMzOUI3NkI2MjExQUY0N0Y5QjUKLToxMDdERDAwMENBNTA2RUJEMzhGMUE3MjQzRkZBMTI3QzY1Rjg5RUQyRDYKLToxMDdERTAwMDY2QTU4RTJGQ0M4MTFERDBEMUI2OTBFNEM5NkM4OUU3RjEKLToxMDdERjAwMDUxQjA1RDZBMTM4RjEzNzE3ODJGOTNFMUM0RDg4NkRFN0EKLToxMDdFMDAwMDNBRjI0M0Q0NjZCNDk3M0EyNzJBRjc0MjFBRkZGOTI1ODMKLToxMDdFMTAwMDNGM0ZGNTMxRjNCRTU2RTRDRjcyMDNDNTdEQzBCRTZBNjUKLToxMDdFMjAwMDdFMDlFREMwMDVCMTE2OENBNzg3QzI0REI5NUY4Qzg5NUMKLToxMDdFMzAwMEZFNjYyOUUyRTkxREEzN0RFQ0M0M0NCQ0NGRjQ5MTlGMTIKLToxMDdFNDAwMDAxRDQ0RUY2N0NGNTZCNUFGMjM3RkJENTAzN0I1MTdFOUQKLToxMDdFNTAwMEI5OERGNjcxMTMwMTlFMEU0REY3N0E1NDcxMTdENEJFODkKLToxMDdFNjAwMDJFMzRFRDY3MjFCRDkxMUNFMUY0RDY5N0I5OEJCRjA3ODUKLToxMDdFNzAwMDIyREY0RjRFOTJGMTAwRkE4QzM1MjI3RDA4MUNDRjg3MEQKLToxMDdFODAwMERCRjY5RjQwNzlEM0Q3OUQ0QTcyM0E5NDlGQ0VCNjNEOTgKLToxMDdFOTAwMDE2ODE3MkUzNDNEMEVGQUU4MDc4QzA4NzhCOUZBNTdDQkMKLToxMDdFQTAwMDgwRjk5ODA3MDJFNTNENkI4M0NGMzdGOEVEOEZDOTJGMzYKLToxMDdFQjAwMDY0OUIwM0RBOTExRTFCODJFQkExNzA0MUJBRjQwNkYxQjgKLToxMDdFQzAwMDgxOEJGNjdEM0ZGMjFCQzBBNzZBN0E3NzM1QzI2MUE4MjUKLToxMDdFRDAwMDNFMTdFQTUyNDBGRDUwNDgzREE0M0YyQkUxRjZDM0ZENUEKLToxMDdFRTAwMDEzMThDREVCMThFREVEMjUzRjdFMUZDRkVGQUQwN0JEOEQKLToxMDdFRjAwMDQ2RjUwM0UxNzQzRjJERUUwM0JEMTVDM0Y1MTZFQThCN0QKLToxMDdGMDAwMEFBODg2RThBNUZGNTFERDBEMkJEQ0E4M0VEOUYyNUUxOTgKLToxMDdGMTAwMEY5ODExRTI5NEU1M0Q1RkU3MjJDRkFGN0VCMjY5ODY5OEIKLToxMDdGMjAwMDdFRDA4RkIxOTQxNzczQTAzRDE2RkQxMUE1REQyMTdBODcKLToxMDdGMzAwMEQyRTVGNzBDQjI1MDdFMjhFRDRFQzk5QjRFNzlFNTQyNTIKLToxMDdGNDAwMDc3MTYzRTVGMjdDQjE5ODcwODc1MDlFQjhDQ0VFMTEwQjkKLToxMDdGNTAwMDM4REZCMzc2ODlFNDdDMjhERTU2QzlGNDBBRjIyMThCMzcKLToxMDdGNjAwMEYyMzk1RUUxRjEwMzQ1MUU1NEM4NzJFNTEwQjY2NzcyM0UKLToxMDdGNzAwMEZFMzcyOUY3NTI3OENGODQ3QzNGOEM5Q0Y4NUE4MTIzQjYKLToxMDdGODAwMEFCQTVGOENFRkQxM0NEQkMyRThGQTc3OTc5RkM4OUU3ODAKLToxMDdGOTAwMEVEQkQ3QTNFMkIyNTEzQzc5OTk1Rjc0NUZERjIyOEQ1RkYKLToxMDdGQTAwMDJGNUY1MDBFQzQ5MzFDNzg1MDFEMEJFN0FBN0M0NkIwN0YKLToxMDdGQjAwMEQ0QzM5MDhBRDIzNTQ1RDA5RDJENTMyRDJGQTJCODFBMDcKLToxMDdGQzAwMEU2RTcxQTJFREY1NzI4MUQ0NTRFRTRGOEFEMTRCOTFGMTkKLToxMDdGRDAwMDVFQjk1N0EwRkJBNTczNkE3RTZGMDdGMjg2REUwRjU4NjUKLToxMDdGRTAwMDU2QjBBNjA4RjlFRkJFMThBNzI2RDA1RkJFRDZGQzRCNDgKLToxMDdGRjAwMDFCODJFQkNCNkFENzE0QzUwREMzRTc5NUFCQjY3NjhENjQKLToxMDgwMDAwMDY0OTdDRjU3NjE2RjJDOEEzNTVGREVBRUVDRkI5QzVFQzgKLToxMDgwMTAwMEQ5RTc3NEY1Qzg0MDc4Q0M1RjUzMzQxMkNBNjVCQTdGOEIKLToxMDgwMjAwMDE3MUVGQ0RDRTdEQUI1NUVDQTU3MkQ1RDQzRjdDNEI3MEYKLToxMDgwMzAwMDVDQUEwRDhBQjM1RTZCQkUwQUU2QTY3QjkwMkJFRDNGNzEKLToxMDgwNDAwMEI0NzQwOERFNUU4QzJCMzFFMEFGM0RDNDY3QzAzNzAxRUQKLToxMDgwNTAwMEVCQzVDQkY0M0ExNDlGMjg1RjNDMDZGRDUzNjY1RjNDQUEKLToxMDgwNjAwMDI2MzAzRTExNUFFMjlCMzMyMkU1OEFCOEE4MDQzRTJDMDIKLToxMDgwNzAwMEIzMEMwMzBGQTVGRkQxODkzQ0NFMUEzRjkxRDNGMUE4RDEKLToxMDgwODAwMEQ5NTUzQjVFNjIxNEQ3RTk0MUY5N0JBNUY3NENGRTIyMzYKLToxMDgwOTAwMEVGRUYwN0JGNjczMjIzOUNGN0VCRDQ5QjMwRkVEM0RGQjMKLToxMDgwQTAwMEY5MERDNTg3RkJENzE5RTZGMzdCMDcwMzRCODBFNzVEMjYKLToxMDgwQjAwMEYxRTM5QjAyRTNDMEFCMjY3MTNCMjREQ0NBRUQ5RDlBNDEKLToxMDgwQzAwMDBDRjVENUUzNEI5OUM2QTFGODEyRDkxQjk5RTE3NERGRTEKLToxMDgwRDAwMEQyRDdGNjA1RTlCN0ZFOEUzQzEzREU4QkY0NzVCQjBERTcKLToxMDgwRTAwMEM4NkYzNUZGRkM3RkIxQTg4N0ZCM0EzRUE1QkNCNEJFODQKLToxMDgwRjAwMDZGM0ZBMzdDQjU4RDcyREVFMEExMzYzOURGQUJEQjZDNjAKLToxMDgxMDAwMEM0RjZGRUUyQkYxNzYxQkY0RDcyRTk4RjJGRjBGODk4RjkKLToxMDgxMTAwMDUyMkFGMTgzMDBGRkY5M0JENDUzN0I0QzFCMUZDNTU0RkIKLToxMDgxMjAwMDk5Q0FCMDJEMjRCRkMwN0Y4RTQ2QkRFMThGMkI5OEUzNDYKLToxMDgxMzAwMDg2OEJDMzA0QzYxNUQyNTQzQ0FFODAyNUM2MTVEMkQyNTgKLToxMDgxNDAwMDc4NUMwMUVCMTg1N0MwMTJFMzBBRDg4RTcxMDVBQzYzNTYKLToxMDgxNTAwMDVDMDFFQjE4NTdDMDNBQzYxNUIwQzRCODAyQjY3RjI5MDcKLToxMDgxNjAwMEJGRTdEMTBGODI4QkM3M0QwRDI0Rjc1NzYyN0UzM0MwMjYKLToxMDgxNzAwMDZGNjUyN0JGQkY1QUI5NDdBMjdCNjE3Q0NGMDNGNURGOEMKLToxMDgxODAwMDY1NzkzQkFENzJERThFNjcyQkREMDdENjFDOTAyQzg4OUYKLToxMDgxOTAwMDIyN0MxRkM0OTU4RUY5M0IwMzQ3MzExRTU0RDMyMjU4Q0QKLToxMDgxQTAwMEQ2OThCMTdEM0VFRDYzNjM0N0RFMDdBNUQ4QkU0NzZEMjcKLToxMDgxQjAwMDExQ0Q0NDRGMUM5RjhEODI1QjhGN0NENUIxODdFMjU3RDgKLToxMDgxQzAwMDA1NzE5RDk0RUY1RkQzMkMzMDhDQkJDRUQzNzIzRkQ5MTkKLToxMDgxRDAwMDI5NDE2QjBFRERBQjkyMURFREQ0NzY5M0ZGNTJGNTlDRDkKLToxMDgxRTAwMDYwMEU3Q0VGQkI2NkUyNDU5MjEzQ0E3REY1NTJGRTg4QjUKLToxMDgxRjAwMDM5M0Q3QUYzOTIyMDNENkJFMzc5NTdGODI3RUNDNzI5OTQKLToxMDgyMDAwMEU3Nzc5MzFEMTI2MDE3MkRDNTdCNkM2Qzk3QkVBNUY3QTEKLToxMDgyMTAwMDREOUNFMEUwOEUxMEFFOUQ3NzU1RDlEMUIyMUVGM0I1REUKLToxMDgyMjAwMDdFNjhGRTU1RTEyNEY5REUzQTlCQkY0NzUyRkNGODkyODYKLToxMDgyMzAwMDdEMDc2MEJEQzEyRDVBQjI1MzZFOUY2MEJGNkQ1MjFFNDcKLToxMDgyNDAwMEU2MTlEODI4RUU3MkI0NTM0RjdFRDYyNzVCQUYwRjhBNUIKLToxMDgyNTAwMEJCMTQ0QUQ3NTFEQzYzODU1QTIwRkQ3REM0NkE5RjNCMUQKLToxMDgyNjAwMDA5RTg3MjQ2RjFCRDE0NkY5OTExNkYyNDNFNTZFOEYwOEIKLToxMDgyNzAwMDQ5NkJDOTRGNzBERTE1RTNGOTc3OTgwQUI1RUNFNzM0MUUKLToxMDgyODAwMDlGOUNDRkE1RTBBOUIwNUU3MEUzRjcyQzE2MzMwQkJEMjEKLToxMDgyOTAwMDNGQjAwOEMwODc3MTUxRTVGQjFGOEIxOENGQUY1MEU4ODYKLToxMDgyQTAwMDZBQzU1NjgxRTg4QUJFQkMxMEYwQkQ4NDQ1RjgzRDEwMTEKLToxMDgyQjAwMEQwN0ZGNzZBQjlGRDlCMjhGMjdCRjJDNDREM0M4RkUyNzgKLToxMDgyQzAwMDNFNjZBN0ZDOTE2NTQ4N0QxMkU5RDdENzdDRDA2RTBGM0EKLToxMDgyRDAwMEJGMkU4OURCRjdFNjM4OUM3RkYxNzEzNUU1MDcxN0M2QkQKLToxMDgyRTAwMEREOUU2RTI3M0Q1RjQwRjkxMzgyRjc2RUU5RkIxQkFGMDEKLToxMDgyRjAwMDI2M0Y4M0YzMjc4RUFBQjlEQzAxNzg5MjlGRDU4NUY0QjcKLToxMDgzMDAwMDRBRjExRTNCOTVDN0VCQ0FBOTlDMjJCRjFGMTZGQTVFMTUKLToxMDgzMTAwMDQzN0ZFN0NCMkQzOEJFQjBDNjYwNDFGODVGRjEzREMwNkEKLToxMDgzMjAwMEIwQUJCRkZGRTY5NEYzRUIxMkM1OUU1QzMzQzJFMzZCQzgKLToxMDgzMzAwMDgzMDVFMTUxMThENzQ5RUY4OUE1Q0FGMzNGOUM1QkIyODkKLToxMDgzNDAwMDA5RjE2OThCNjAyRTVDMUZFRjY5QjYwMDdDOEJGMDQwRjEKLToxMDgzNTAwMDAyQzZEMTNEMzY3Q0NGNjZBMDUzMzA1MTNFRjU2NTcyRTIKLToxMDgzNjAwMDc0RUIzQUNDNTNBOTQ5MTM0QzE4QUYyRDBBREI1MjE4QzEKLToxMDgzNzAwMDBCRjMxN0E1MjREMzc3NzY2QURBNzgxQ0I2MEY0QTRFMkEKLToxMDgzODAwMDA3NTNEQzkyQzBDN0FBNjIzMTdFQ0ZGMUU4Q0JCNTNGN0MKLToxMDgzOTAwMDNEMjlDRkRGM0U1QkU2QjNGRThFMkY3ODFFRjFCNUUzQkQKLToxMDgzQTAwMEI0QkJFOUZCMUM0QzRGRUZBRkQzMEZGNjM1RkJDNkQxODYKLToxMDgzQjAwMDE0QUY1NUU4NjhCMDM5QUUwOUU5QTg0NUQ2MTNBNUE1QUMKLToxMDgzQzAwMEVGQTlEMThFNjhDQ0IzMzcyMzFDQ0E5NjVDNUMxNzRCREYKLToxMDgzRDAwMEU3MUMzRTRFQTZFNERGODdDNkM5MDJFNUVERkY0NkRFOTgKLToxMDgzRTAwMEZEODlCQTVBMkFERkFENUI0NTY1Nzc5RDhCOUUwN0U4MEMKLToxMDgzRjAwMDhCMjMwOEJGMUYxMDZGN0Q3QkQyMzBGMTU2QTYzMzQ3MDkKLToxMDg0MDAwMDkyQkUwNUJFRTdGMUVEOTBGODJBRjBCQjE4QzBFRjMzM0QKLToxMDg0MTAwMDNBQTJFRUQ5ODBGNjQ4ODNDNjgyRjdDRDk4RkZCQ0QyNDcKLToxMDg0MjAwMDQwRjJFMUZENDlDM0M2NTkxNUY4MTkyODJFM0JDOEY0OUUKLToxMDg0MzAwMDM5ODg4N0U5MTlBOTJBMTE5RUZGNkQ5MjEwMTRFNzQ0MjMKLToxMDg0NDAwMEJFQzE3MzIyREY2MDg5N0NBMzUyRjlGOUU2NjkwREEzRUUKLToxMDg0NTAwMEVGOTRBMTdERTAyMkZCNDA0RkY4NURCRjA2RTQwQUQ0MTMKLToxMDg0NjAwMEVGNjVBNjIwQjk3MjIxNDRBRTgwMjNGMzMzN0E1RkFDNjYKLToxMDg0NzAwMDQzQ0IzNjA5RkVGQ0NGRTk1MDVDQ0ExOTQ2Q0U3OEI4MkEKLToxMDg0ODAwMDlDMTkxREU2Nzk5RUJFQjM1MDFENDZGOUM1QzBFRjQ0NDgKLToxMDg0OTAwMDY3NDczN0YyQkNCRDI1QUM4NEQ2MUQ0NkRFRDA3QjNFOTcKLToxMDg0QTAwMEY3OEUxODM4RjkxNEY0QkZGNzYxMDNEOTM5RUIxMzk2MzYKLToxMDg0QjAwMEU2RkY3N0U0Q0Q5RjI3NzE3ODNDODFERjczNTA1REVENTcKLToxMDg0QzAwMDdCMEU5QjA1QkM4RjVEQjE5MDY1MjNCRTk1RUYzOUM0RDMKLToxMDg0RDAwMEMxMThGMjdCRkZGNUVGMzk4Qzk4M0MxMkJGRTdFMDBBMzgKLToxMDg0RTAwMEZBOUU0M0RDMTVCRUU3MzA2QUIyNzE2MUUwRjcxQzQ2QzQKLToxMDg0RjAwMDREMUVCMTMwRjg3QjBFQzY4NUY4OURCMkZGQzFFRjM5MzUKLToxMDg1MDAwMEE0NEZDRUJCRkM3QjBFMzc0RTM2RkZBMEVGMzk4MDNEMkIKLToxMDg1MTAwMDlCODlFMzRGRTREOEM2NjM5OTI4OUYzQkY0RkRFNUUzQ0MKLToxMDg1MjAwMEYyM0Q2NDk3NjgyRkM1QjIyOEMyQTVBMjc2RDE2REM1NjkKLToxMDg1MzAwMEYyNkREMTczM0ZCNjAzNUY0QzQ0NzgxNTNEOTY3RDAzRDEKLToxMDg1NDAwMDdFOTcyNTUxRUJBMUJDRjIyN0FEQjY0OTM4RkY2QkI5MzgKLToxMDg1NTAwMEI2QzlGODNDMzRERTVGMkY5RjBGRjY3MzBCRjYwQkNERDgKLToxMDg1NjAwMDFGNTNFOEUyQUVDOTVDMEVDRDkzQ0JBOUY1QzNCRkM3REMKLToxMDg1NzAwMDNGNkYzMkJGNEZCRUQ2QkU2MUJGNzdFMDdBQ0FGRUQ5MjkKLToxMDg1ODAwMDk2QzU1NkRDMEZFQ0Y3NEVEQzI3RUNCNzA0NEI2Njg4M0IKLToxMDg1OTAwMDBFN0EwRkY4NzI3QTc1QzlGQjYyNzQyRTkwOEZCMzNGMTIKLToxMDg1QTAwMEUxRjYyODk1RTkyQTc3MTREQTBEQTMxRTcwNDdFMTdFREIKLToxMDg1QjAwMDQ3MzUwRUU4RjE3RDkwREZCQTA2RjQ2ODNGRkM3NkY1QUEKLToxMDg1QzAwMDgwMUVEQjdGNkJFM0Y5REFBMUYzNkY5RkNDRkQ5MUY0QTIKLToxMDg1RDAwMEE5MDMzNDdFMENGQ0RENERGRUMxNDAxNERBNkRFOUU1RTMKLToxMDg1RTAwMDQ3MzRBRTE0N0E0RjZERjYyNzQxNzY5Mzk5Rjg3QjhDMTkKLToxMDg1RjAwMERDMzZFNjAxOTEyMTNEOENEOUMxNzgxRTYzNDEwQ0U5M0UKLToxMDg2MDAwMEI5NEExREVGNUFGOUMwRkQyMkQyRDEzODM3RUMzQjgwNzAKLToxMDg2MTAwMEZFQUVERkFFMUEwQzdFQUZENzRCRTNBQUU0MjVDMDVFRjgKLToxMDg2MjAwMDBCN0FFRTY0M0NCRjc0OTQyQzhGRDA1RUM0RUZEOTM5QzIKLToxMDg2MzAwMENCOEZEMDc3QTZDMDhFMEI5OThGQkU3OTMwOTQ0RjU5Q0YKLToxMDg2NDAwMEFEQjNCRkU2MzM1M0JFNjI1MEJGQTU3N0ZGNjYzREZBQjgKLToxMDg2NTAwMEI1RTVBNTVCMzVFNDE3MkY2OTU5OEZBNUMzRjE5RTI2QjMKLToxMDg2NjAwMDhFOTE3RDE5RDQxRkVDQ0JBMEZBNjVGQjBDRDk0N0Y1OTAKLToxMDg2NzAwMEZEMTdEN0M3MERCMzJFRDBDMTU2QTQxMzg1MEU4RUFBRjEKLToxMDg2ODAwMDNERTNEMDRGM0RFQTBDQjNGMEY3MUQzQ0Y0NUQ5QTI2NzQKLToxMDg2OTAwMEY5QkRGNDVERkYzOUREQ0FGMzY1Mzk1REMwRjgxRDNGRjIKLToxMDg2QTAwMDhDOEVFQUE5QkZGMjFEQUY2Qjk1OEExQzFDRkFDRThEODkKLToxMDg2QjAwMDg2QjkyODVFMzlDQjQ4NzJBRTQ2RjZGRkFBOTc5OEM4QUQKLToxMDg2QzAwMDFFNTFGOEJBNUFFNTM5QjUxRUZCQzUxODc5RkU5QjhBQ0EKLToxMDg2RDAwMEQxRjdBQjdBQzQ1MTk0Q0Y0RDNGQUNDRjRBQTVGQkFDOTgKLToxMDg2RTAwMEQ4N0E4RjE3RTcxREI4NURBMEVGQjkxNTg0NzNCOTVBMTIKLToxMDg2RjAwMDI4OTYzODlFODVFNzQ3NDRGRTVEODFBNzUxN0U0ODk4QkQKLToxMDg3MDAwMDQ3QzFCRjM3MzAyNTk3QkYzRjEwQ0ZGODc3REI5OENBRjYKLToxMDg3MTAwMDFDRjI5RDM2MzkxRTdBRURFRkI0RjFFRjkyQ0RFN0Y3RkEKLToxMDg3MjAwMDcyMEQ1MTI1QTVDQkYxRjk4MjFCRThGOUMxRUY1MjFGNUIKLToxMDg3MzAwMEIxRTJGRTJBOTRFRkI0NzE3QkJGNjE0RTA2M0Q3RjU1RDYKLToxMDg3NDAwMDMwQUY0MTNERTE3QTgwNURFOTNCNkQ3QUU0RkI4MEVGM0IKLToxMDg3NTAwMEIzQkQ4N0Y4QkFENkY3RDk5NEVGMEYxQzVENzBDMzIzNjkKLToxMDg3NjAwMDdCMzkxQ0JENzhFRjU1MzNDQjE4RTRBRkZGMTczMTNDOTQKLToxMDg3NzAwMDlFRDJDMDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLTowODg3ODAwMDA0MDgzNTAwMDAwMDAwMDBCMAotOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4LWUxLTUuMC4yMS4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC1lMS01LjAuMjEuMC5mdy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MWFmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9ibngyeC1lMS01LjAuMjEuMC5mdy5paGV4CkBAIC0wLDAgKzEsMTAxODQgQEAKKzoxMDAwMDAwMDAwMDAyOEIwMDAwMDAwNjAwMDAwMDY4ODAwMDAyOTE4RTkKKzoxMDAwMTAwMDAwMDAxNjE0MDAwMDJGQTgwMDAwMDA5ODAwMDA0NUMwNDIKKzoxMDAwMjAwMDAwMDA3Mzg4MDAwMDQ2NjAwMDAwMDBDQzAwMDBCOUYwQkEKKzoxMDAwMzAwMDAwMDA5QTRDMDAwMEJBQzAwMDAwMDA5NDAwMDE1NTEwNjYKKzoxMDAwNDAwMDAwMDA1N0I4MDAwMTU1QTgwMDAwMDBCODAwMDFBRDY4RDUKKzoxMDAwNTAwMDAwMDBDRTFDMDAwMUFFMjgwMDAwMDAwNDAwMDI3QzQ4MTUKKzoxMDAwNjAwMDAyMDQwMDQ4MDAwMDAwMEYwMjA0MDA1NDAwMDAwMDQ1OTQKKzoxMDAwNzAwMDAyMDQwMDU4MDAwMDAwODQwMjA0MDA1QzAwMDAwMDA2MzYKKzoxMDAwODAwMDAyMDQwMDcwMDAwMDAwMDQwMjA0MDA3ODAwMDAwMDAwNzgKKzoxMDAwOTAwMDAyMDQwMDdDMTIxNzAwMDAwMjA0MDA4MDIyMTcwMDAwRjYKKzoxMDAwQTAwMDAyMDQwMDg0MzIxNzAwMDAwNjA0MDA4ODAwMDAwMDA1RTYKKzoxMDAwQjAwMDAyMDQwMDlDMTIxNTAwMDAwMjA0MDBBMDIyMTUwMDAwOUEKKzoxMDAwQzAwMDAyMDQwMEE0MzIxNTAwMDAwNjA0MDBBODAwMDAwMDA0ODkKKzoxMDAwRDAwMDAyMDQwMEI4MDIxMDAwMDAwMjA0MDBCQzAwMTAwMDAwN0UKKzoxMDAwRTAwMDAyMDQwMEMwMTAxMDAwMDAwMjA0MDBDNDIwMTAwMDAwMzAKKzoxMDAwRjAwMDAyMDQwMEM4MzAxMDAwMDAwNjA0MDBDQzAwMDAwMDA0MTgKKzoxMDAxMDAwMDAyMDQwMERDMDAxMDAwMDAwMjA0MDBFMDEyMTQwMDAwRjEKKzoxMDAxMTAwMDAyMDQwMEU0MjIxNDAwMDAwMjA0MDBFODMyMTQwMDAwOEIKKzoxMDAxMjAwMDA2MDQwMEVDMDAwMDAwMDQwMTA0MDEyNDAwMDAwMDAwQUIKKzoxMDAxMzAwMDAxMDQwMTI4MDAwMDAwMDAwMTA0MDEyQzAwMDAwMDAwNUYKKzoxMDAxNDAwMDAxMDQwMTMwMDAwMDAwMDAwMjA0MDAwNDAwMDAwMEZGNzAKKzoxMDAxNTAwMDAyMDQwMDA4MDAwMDAwRkYwMjA0MDAwQzAwMDAwMEZGODEKKzoxMDAxNjAwMDAyMDQwMDEwMDAwMDAwRkYwMjA0MDAxNDAwMDAwMEZGNjEKKzoxMDAxNzAwMDAyMDQwMDE4MDAwMDAwRkYwMjA0MDAxQzAwMDAwMEZGNDEKKzoxMDAxODAwMDAyMDQwMDIwMDAwMDAwRkYwMjA0MDAyNDAwMDAwMDNFRTIKKzoxMDAxOTAwMDAyMDQwMDI4MDAwMDAwMDAwMjA0MDAyQzAwMDAwMDNGQzAKKzoxMDAxQTAwMDAyMDQwMDMwMDAwMDAwM0YwMjA0MDAzNDAwMDAwMDNGNjEKKzoxMDAxQjAwMDAyMDQwMDM4MDAwMDAwMDAwMjA0MDAzQzAwMDAwMDNGODAKKzoxMDAxQzAwMDAyMDQwMDQwMDAwMDAwM0YwMjA0MDA0NDAwMDAwMDNGMjEKKzoxMDAxRDAwMDAyMDQyMDA4MDAwMDA0MTEwMjA0MjAwQzAwMDAwNDAwQTYKKzoxMDAxRTAwMDAyMDQyMDEwMDAwMDA0MDQwMjA0MjAxNDAwMDAwNDE5N0EKKzoxMDAxRjAwMDAyMDQyMDFDMDAwMEZGRkYwMjA0MjAyMDAwMDBGRkZGN0IKKzoxMDAyMDAwMDAyMDQyMDI0MDAwMEZGRkYwMjA0MjAyODAwMDBGRkZGNUEKKzoxMDAyMTAwMDA2MDQyMDM4MDAwMDAwMDIwMjA0MjA0MDAwMDAwMDM0RTAKKzoxMDAyMjAwMDAyMDQyMDQ0MDAwMDAwMzUwNjA0MjA0ODAwMDAwMDdDNDEKKzoxMDAyMzAwMDAyMDQyMjM4MDdGRkZGRkYwMjA0MjIzQzAwMDAwMDNGQjcKKzoxMDAyNDAwMDAyMDQyMjQwMDdGRkZGRkYwMjA0MjI0NDAwMDAwMDBGQzcKKzoxMDAyNTAwMDAxMDQyMjQ4MDAwMDAwMDAwMTA0MjI0QzAwMDAwMDAwQkMKKzoxMDAyNjAwMDAxMDQyMjUwMDAwMDAwMDAwMTA0MjI1NDAwMDAwMDAwOUMKKzoxMDAyNzAwMDAxMDQyMjU4MDAwMDAwMDAwMTA0MjI1QzAwMDAwMDAwN0MKKzoxMDAyODAwMDAxMDQyMjYwMDAwMDAwMDAwMTA0MjI2NDAwMDAwMDAwNUMKKzoxMDAyOTAwMDAxMDQyMjY4MDAwMDAwMDAwMTA0MjI2QzAwMDAwMDAwM0MKKzoxMDAyQTAwMDAxMDQyMjcwMDAwMDAwMDAwMTA0MjI3NDAwMDAwMDAwMUMKKzoxMDAyQjAwMDAxMDQyMjc4MDAwMDAwMDAwMTA0MjI3QzAwMDAwMDAwRkMKKzoxMDAyQzAwMDAyMDQyNEJDMDAwMDAwMDEwQzA0MjAwMDAwMDAwM0U4MkMKKzoxMDAyRDAwMDBBMDQyMDAwMDAwMDAwMDEwQjA0MjAwMDAwMDAwMDBBQjYKKzoxMDAyRTAwMDAyMDUwMDQ0MDAwMDAwMjAwMjA1MDA0ODAwMDAwMDMyMjIKKzoxMDAyRjAwMDAyMDUwMDkwMDIxNTAwMjAwMjA1MDA5NDAyMTUwMDIwNUUKKzoxMDAzMDAwMDAyMDUwMDk4MDAwMDAwMzAwMjA1MDA5QzA4MTAwMDAwNjMKKzoxMDAzMTAwMDAyMDUwMEEwMDAwMDAwMzMwMjA1MDBBNDAwMDAwMDMwMjgKKzoxMDAzMjAwMDAyMDUwMEE4MDAwMDAwMzEwMjA1MDBBQzAwMDAwMDAyMzgKKzoxMDAzMzAwMDAyMDUwMEIwMDAwMDAwMDUwMjA1MDBCNDAwMDAwMDA2NDAKKzoxMDAzNDAwMDAyMDUwMEI4MDAwMDAwMDIwMjA1MDBCQzAwMDAwMDAyMjcKKzoxMDAzNTAwMDAyMDUwMEMwMDAwMDAwMDAwMjA1MDBDNDAwMDAwMDA1MDYKKzoxMDAzNjAwMDAyMDUwMEM4MDAwMDAwMDIwMjA1MDBDQzAwMDAwMDAyRTcKKzoxMDAzNzAwMDAyMDUwMEQwMDAwMDAwMDIwMjA1MDBENDAwMDAwMDAxQzgKKzoxMDAzODAwMDAyMDUwMTE0MDAwMDAwMDEwMjA1MDExQzAwMDAwMDAxMkIKKzoxMDAzOTAwMDAyMDUwMTIwMDAwMDAwMDIwMjA1MDIwNDAwMDAwMDAxMjUKKzoxMDAzQTAwMDAyMDUwMjBDMDAwMDAwNDAwMjA1MDIxMDAwMDAwMDQwOUYKKzoxMDAzQjAwMDAyMDUwMjFDMDAwMDAwMjAwMjA1MDIyMDAwMDAwMDEzQkMKKzoxMDAzQzAwMDAyMDUwMjI0MDAwMDAwMjAwNjA1MDI0MDAwMDAwMDBBODkKKzoxMDAzRDAwMDA0MDUwMjgwMDAyMDAwMDAwMjA1MDA1MDAwMDAwMDA3MTQKKzoxMDAzRTAwMDAyMDUwMDU0MDAwMDAwMDcwMjA1MDA1ODAwMDAwMDA4NDQKKzoxMDAzRjAwMDAyMDUwMDVDMDAwMDAwMDgwNjA1MDA2MDAwMDAwMDA0MjMKKzoxMDA0MDAwMDAyMDUwMEQ4MDAwMDAwMDYwMjA1MDBFMDAwMDAwMDBEMTMKKzoxMDA0MTAwMDAyMDUwMEU0MDAwMDAwMkQwMjA1MDBFODAwMDAwMDA3Q0UKKzoxMDA0MjAwMDAyMDUwMEVDMDAwMDAwMjcwMjA1MDBGMDAwMDAwMDA3QjQKKzoxMDA0MzAwMDAyMDUwMEY0MDAwMDAwMjcwMjA1MDBGODAwMDAwMDA3OTQKKzoxMDA0NDAwMDAyMDUwMEZDMDAwMDAwMjcwMjA1MDAwNDAwMDAwMDAxNzYKKzoxMDA0NTAwMDAyMDUwMDA4MDAwMDAwMDEwMjA1MDAwQzAwMDAwMDAxNzgKKzoxMDA0NjAwMDAyMDUwMDEwMDAwMDAwMDEwMjA1MDAxNDAwMDAwMDAxNTgKKzoxMDA0NzAwMDAyMDUwMDE4MDAwMDAwMDEwMjA1MDAxQzAwMDAwMDAxMzgKKzoxMDA0ODAwMDAyMDUwMDIwMDAwMDAwMDEwMjA1MDAyNDAwMDAwMDAxMTgKKzoxMDA0OTAwMDAyMDUwMDI4MDAwMDAwMDEwMjA1MDAyQzAwMDAwMDAxRjgKKzoxMDA0QTAwMDAyMDUwMDMwMDAwMDAwMDEwMjA1MDAzNDAwMDAwMDAxRDgKKzoxMDA0QjAwMDAyMDUwMDM4MDAwMDAwMDEwMjA1MDAzQzAwMDAwMDAxQjgKKzoxMDA0QzAwMDAyMDUwMDQwMDAwMDAwMDEwNDA2MTAwMDAyMDAwMDIwQTgKKzoxMDA0RDAwMDAyMDYwMERDMDAwMDAwMDEwMTA2MDBEODAwMDAwMDAwNTgKKzoxMDA0RTAwMDA0MDYwMjAwMDAwMzAyMjAwMjA2MDBEQzAwMDAwMDAwRjcKKzoxMDA0RjAwMDAyMDYwMDY4MDAwMDAwQjgwMjA2MDA3ODAwMDAwMTE0M0YKKzoxMDA1MDAwMDAxMDYwMEI4MDAwMDAwMDAwMTA2MDBDODAwMDAwMDAwNUQKKzoxMDA1MTAwMDAyMDYwMDZDMDAwMDAwQjgwMjA2MDA3QzAwMDAwMTE0MTYKKzoxMDA1MjAwMDAxMDYwMEJDMDAwMDAwMDAwMTA2MDBDQzAwMDAwMDAwMzUKKzoxMDA1MzAwMDA3MTgwNDAwMDA5NjAwMDAwODE4MDc2MDAwMTQwMjIzNDIKKzoxMDA1NDAwMDA3MUMwMDAwMzRCODAwMDAwNzFDODAwMDM0RTkwRDJGQTAKKzoxMDA1NTAwMDA3MUQwMDAwMDlERDFBNkEwODFEMTQwMDVEODAwMjI1RDAKKzoxMDA1NjAwMDAxMTgwMDAwMDAwMDAwMDAwMTE4MDAwNDAwMDAwMDAwNTUKKzoxMDA1NzAwMDAxMTgwMDA4MDAwMDAwMDAwMTE4MDAwQzAwMDAwMDAwMzUKKzoxMDA1ODAwMDAxMTgwMDEwMDAwMDAwMDAwMTE4MDAxNDAwMDAwMDAwMTUKKzoxMDA1OTAwMDAyMTgwMDIwMDAwMDAwMDEwMjE4MDAyNDAwMDAwMDAyRTAKKzoxMDA1QTAwMDAyMTgwMDI4MDAwMDAwMDMwMjE4MDAyQzAwMDAwMDAwQzAKKzoxMDA1QjAwMDAyMTgwMDMwMDAwMDAwMDQwMjE4MDAzNDAwMDAwMDAxOUUKKzoxMDA1QzAwMDAyMTgwMDM4MDAwMDAwMDAwMjE4MDAzQzAwMDAwMDAxODIKKzoxMDA1RDAwMDAyMTgwMDQwMDAwMDAwMDQwMjE4MDA0NDAwMDAwMDAwNUYKKzoxMDA1RTAwMDAyMTgwMDQ4MDAwMDAwMDEwMjE4MDA0QzAwMDAwMDAzM0YKKzoxMDA1RjAwMDAyMTgwMDUwMDAwMDAwMDAwMjE4MDA1NDAwMDAwMDAxMjIKKzoxMDA2MDAwMDAyMTgwMDU4MDAwMDAwMDQwMjE4MDA1QzAwMDAwMDAwRkUKKzoxMDA2MTAwMDAyMTgwMDYwMDAwMDAwMDEwMjE4MDA2NDAwMDAwMDAzREUKKzoxMDA2MjAwMDAyMTgwMDY4MDAwMDAwMDAwMjE4MDA2QzAwMDAwMDAxQzEKKzoxMDA2MzAwMDAyMTgwMDcwMDAwMDAwMDQwMjE4MDA3NDAwMDAwMDAwOUUKKzoxMDA2NDAwMDAyMTgwMDc4MDAwMDAwMDQwMjE4MDA3QzAwMDAwMDAzN0IKKzoxMDA2NTAwMDA2MTgwMDgwMDAwMDAwMDIwMjE4MDBBNDAwMDAzRkZGRkUKKzoxMDA2NjAwMDAyMTgwMEE4MDAwMDAzRkYwMjE4MDIyNDAwMDAwMDAwODYKKzoxMDA2NzAwMDAyMTgwMjM0MDAwMDAwMDAwMjE4MDI0QzAwMDAwMDAwQzIKKzoxMDA2ODAwMDAyMTgwMkU0MDAwMDAwRkYwNjE4MTAwMDAwMDAwNDAwMzkKKzoxMDA2OTAwMDAyMUI4QkMwMDAwMDAwMDEwMjFCODAwMDAwMDAwMDM0MjAKKzoxMDA2QTAwMDAyMUI4MDQwMDAwMDAwMTgwMjFCODA4MDAwMDAwMDBDMkMKKzoxMDA2QjAwMDAyMUI4MEMwMDAwMDAwMjAwQzFCODMwMDAwMDdBMTIwNEIKKzoxMDA2QzAwMDBBMUI4MzAwMDAwMDAxMzgwQjFCODMwMDAwMDAxMzg4MDUKKzoxMDA2RDAwMDAyMUI4M0MwMDAwMDAxRjQwNjFBMjAwMDAwMDAwMEIyRDMKKzoxMDA2RTAwMDA2MUEyM0M4MDAwMDAxODEwNDFBMjlDQzAwMDEwMjI3NDAKKzoxMDA2RjAwMDA2MUExMDIwMDAwMDAwQzgwNjFBMTAwMDAwMDAwMDAyQjAKKzoxMDA3MDAwMDA2MUExRTM4MDAwMDAwMDIwNjFBMUUzMDAwMDAwMDAyMDEKKzoxMDA3MTAwMDA2MUEwODAwMDAwMDAwMDIwNjFBMDgwODAwMDAwMDAyN0QKKzoxMDA3MjAwMDA2MUEwODEwMDAwMDAwMDQwNDFBMUZCMDAwMDUwMjI4NzEKKzoxMDA3MzAwMDA0MUE0Q0IwMDAwODAyMkQwNjFBMjJDODAwMDAwMDIwM0UKKzoxMDA3NDAwMDA2MUE0MDAwMDAwMDAxMjQwMjFBNDkyMDAwMDAwMDAwOUYKKzoxMDA3NTAwMDA2MUExNDAwMDAwMDAwMEEwNjFBMTQ1MDAwMDAwMDA2RDEKKzoxMDA3NjAwMDA2MUExNTAwMDAwMDAwMDIwNDFBMTUwODAwMDUwMjM1REIKKzoxMDA3NzAwMDA2MUExNTFDMDAwMDAwMDkwNjFBMTU4MDAwMDAwMDE0NTYKKzoxMDA3ODAwMDA2MUEwOUMwMDAwMDAwNDgwNjFBMDgwMDAwMDAwMDAyMEUKKzoxMDA3OTAwMDA2MUEwODIwMDAwMDAwMEUwNDFBMUZCMDAwMDIwMjNBRDgKKzoxMDA3QTAwMDA2MUEyQzI4MDAwMDAwMDIwNjFBMjM0ODAwMDAwMDIwMjgKKzoxMDA3QjAwMDA2MUE0NDkwMDAwMDAxMjQwMjFBNDkyNDAwMDAwMDAwOTcKKzoxMDA3QzAwMDA2MUExNDI4MDAwMDAwMEEwNjFBMTQ2ODAwMDAwMDA2MjEKKzoxMDA3RDAwMDA2MUExNTQwMDAwMDAwMDIwNDFBMTU0ODAwMDUwMjNDRTQKKzoxMDA3RTAwMDA2MUExNTVDMDAwMDAwMDkwNjFBMTVEMDAwMDAwMDE0NTYKKzoxMDA3RjAwMDA2MUEwQUUwMDAwMDAwNDgwNjFBMDgwODAwMDAwMDAyNzUKKzoxMDA4MDAwMDA2MUEwODU4MDAwMDAwMEUwNDFBMUZCODAwMDIwMjQxMjAKKzoxMDA4MTAwMDA2MUEyQzMwMDAwMDAwMDIwMjAwQTI4MDAwMDAwMDAxMzUKKzoxMDA4MjAwMDAyMDBBMjk0MDcxRDI5MTEwMjAwQTI5ODAwMDAwMDAwRjYKKzoxMDA4MzAwMDAyMDBBMjlDMDA5QzA0MjQwMjAwQTJBMDAwMDAwMDAwNzAKKzoxMDA4NDAwMDAyMDBBMkE0MDAwMDAyMDkwMjAwQTRGQ0ZGMDAwMDAwQjQKKzoxMDA4NTAwMDAyMDEwMEI0MDAwMDAwMDEwMjAxMDBCODAwMDAwMDAxMjQKKzoxMDA4NjAwMDAyMDEwMERDMDAwMDAwMDEwMjAxMDEwMDAwMDAwMDAxQTMKKzoxMDA4NzAwMDAyMDEwMTA0MDAwMDAwMDEwMjAxMDA3QzAwMzAwMDAwQzAKKzoxMDA4ODAwMDAyMDEwMDg0MDAwMDAwMjgwMjAxMDA4QzAwMDAwMDAwMkEKKzoxMDA4OTAwMDAyMDEwMTMwMDAwMDAwMDQwMjAxMDI1QzAwMDAwMDAxQkUKKzoxMDA4QTAwMDAyMDEwMzI4MDAwMDAwMDAwMjAxMDU1NDAwMDAwMDMwOEUKKzoxMDA4QjAwMDAyMDEwMEM0MDAwMDAwMDEwMjAxMDBDQzAwMDAwMDAxQTAKKzoxMDA4QzAwMDAyMDEwMEY4MDAwMDAwMDEwMjAxMDBGMDAwMDAwMDAxMzgKKzoxMDA4RDAwMDAyMDEwMDgwMDAzMDAwMDAwMjAxMDA4ODAwMDAwMDI4QjIKKzoxMDA4RTAwMDAyMDEwMDkwMDAwMDAwMDAwMjAxMDEzNDAwMDAwMDA0MzkKKzoxMDA4RjAwMDAyMDEwMkRDMDAwMDAwMDEwMjAxMDMyQzAwMDAwMDAwRTQKKzoxMDA5MDAwMDAyMDEwNTY0MDAwMDAwMzAwMjAxMDBDODAwMDAwMDAxN0YKKzoxMDA5MTAwMDAyMDEwMEQwMDAwMDAwMDEwMjAxMDBGQzAwMDAwMDAxMDMKKzoxMDA5MjAwMDAyMDEwMEY0MDAwMDAwMDEwMjBDMTAwMDAwMDAwMDIwOTEKKzoxMDA5MzAwMDAyMEMyMDA4MDAwMDBBMTEwMjBDMjAwQzAwMDAwQTAwMjIKKzoxMDA5NDAwMDAyMEMyMDEwMDAwMDBBMDQwMjBDMjAxQzAwMDBGRkZGMTMKKzoxMDA5NTAwMDAyMEMyMDIwMDAwMEZGRkYwMjBDMjAyNDAwMDBGRkZGRkIKKzoxMDA5NjAwMDAyMEMyMDI4MDAwMEZGRkYwNjBDMjAzODAwMDAwMDAyQzcKKzoxMDA5NzAwMDAyMEMyMDQwMDAwMDAwMzQwMjBDMjA0NDAwMDAwMDM1MkUKKzoxMDA5ODAwMDAyMEMyMDQ4MDAwMDAwMjAwMjBDMjA0QzAwMDAwMDIxMzYKKzoxMDA5OTAwMDAyMEMyMDUwMDAwMDAwMjIwMjBDMjA1NDAwMDAwMDIzMTIKKzoxMDA5QTAwMDAyMEMyMDU4MDAwMDAwMjQwMjBDMjA1QzAwMDAwMDI1RUUKKzoxMDA5QjAwMDAyMEMyMDYwMDAwMDAwMjYwMjBDMjA2NDAwMDAwMDI3Q0EKKzoxMDA5QzAwMDAyMEMyMDY4MDAwMDAwMjgwMjBDMjA2QzAwMDAwMDI5QTYKKzoxMDA5RDAwMDAyMEMyMDcwMDAwMDAwMkEwMjBDMjA3NDAwMDAwMDJCODIKKzoxMDA5RTAwMDA2MEMyMDc4MDAwMDAwNTYwMjBDMjFEMDAwMDAwMDAxMDcKKzoxMDA5RjAwMDAyMEMyMUQ0MDAwMDAwMDEwMjBDMjFEODAwMDAwMDAxRUIKKzoxMDBBMDAwMDAyMEMyMURDMDAwMDAwMDEwMjBDMjFFMDAwMDAwMDAxQ0EKKzoxMDBBMTAwMDAyMEMyMUU0MDAwMDAwMDEwMjBDMjFFODAwMDAwMDAxQUEKKzoxMDBBMjAwMDAyMEMyMUVDMDAwMDAwMDEwMjBDMjFGMDAwMDAwMDAxOEEKKzoxMDBBMzAwMDAyMEMyMUY0MDAwMDAwMDEwNjBDMjFGODAwMDAwMDEwNTcKKzoxMDBBNDAwMDAyMEMyMjM4MDdGRkZGRkYwMjBDMjIzQzAwMDAwMDNGOEYKKzoxMDBBNTAwMDAyMEMyMjQwMDdGRkZGRkYwMjBDMjI0NDAwMDAwMDBGOUYKKzoxMDBBNjAwMDAxMEMyMjQ4MDAwMDAwMDAwMTBDMjI0QzAwMDAwMDAwOTQKKzoxMDBBNzAwMDAxMEMyMjUwMDAwMDAwMDAwMTBDMjI1NDAwMDAwMDAwNzQKKzoxMDBBODAwMDAxMEMyMjU4MDAwMDAwMDAwMTBDMjI1QzAwMDAwMDAwNTQKKzoxMDBBOTAwMDAxMEMyMjYwMDAwMDAwMDAwMTBDMjI2NDAwMDAwMDAwMzQKKzoxMDBBQTAwMDAxMEMyMjY4MDAwMDAwMDAwMTBDMjI2QzAwMDAwMDAwMTQKKzoxMDBBQjAwMDAxMEMyMjcwMDAwMDAwMDAwMTBDMjI3NDAwMDAwMDAwRjQKKzoxMDBBQzAwMDAxMEMyMjc4MDAwMDAwMDAwMTBDMjI3QzAwMDAwMDAwRDQKKzoxMDBBRDAwMDAyMEMyNEJDMDAwMDAwMDEwQzBDMjAwMDAwMDAwM0U4MDQKKzoxMDBBRTAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDBBOEUKKzoxMDBBRjAwMDAyMEM0MDA4MDAwMDAzNjUwMjBDNDAwQzAwMDAwMzU0ODcKKzoxMDBCMDAwMDAyMEM0MDEwMDAwMDAzNTgwMjBDNDAxNDAwMDAwMzc1NTIKKzoxMDBCMTAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGMDEKKzoxMDBCMjAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGRTEKKzoxMDBCMzAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDA1NUEKKzoxMDBCNDAwMDA2MEM0MDQwMDAwMDAwNUUwMjBDNDFCODAwMDAwMDAxQUQKKzoxMDBCNTAwMDA2MEM0MUJDMDAwMDAwMUYwMjBDNDIzODA3RkZGRkZGREIKKzoxMDBCNjAwMDAyMEM0MjNDMDAwMDAwM0YwMjBDNDI0MDA3RkZGRkZGMjYKKzoxMDBCNzAwMDAyMEM0MjQ0MDAwMDAwMEYwMTBDNDI0ODAwMDAwMDAwM0IKKzoxMDBCODAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwMkIKKzoxMDBCOTAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwMEIKKzoxMDBCQTAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwRUIKKzoxMDBCQjAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwQ0IKKzoxMDBCQzAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwQUIKKzoxMDBCRDAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwOEIKKzoxMDBCRTAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwNkIKKzoxMDBCRjAwMDAyMEM0NEMwMDAwMDAwMDEwQzBDNDAwMDAwMDAwM0U4OUYKKzoxMDBDMDAwMDBBMEM0MDAwMDAwMDAwMDEwQjBDNDAwMDAwMDAwMDBBMkMKKzoxMDBDMTAwMDAyMEQwMDQ0MDAwMDAwMzIwMjBEMDA4QzAyMTUwMDIwN0QKKzoxMDBDMjAwMDAyMEQwMDkwMDIxNTAwMjAwMjBEMDA5NDA4MTAwMDAwMzMKKzoxMDBDMzAwMDAyMEQwMDk4MDAwMDAwMzMwMjBEMDA5QzAwMDAwMDAyMkQKKzoxMDBDNDAwMDAyMEQwMEEwMDAwMDAwMDAwMjBEMDBBNDAwMDAwMDA1M0QKKzoxMDBDNTAwMDAyMEQwMEE4MDAwMDAwMDUwNjBEMDBBQzAwMDAwMDAyMTcKKzoxMDBDNjAwMDAyMEQwMEI0MDAwMDAwMDIwMjBEMDBCODAwMDAwMDAzRjUKKzoxMDBDNzAwMDAyMEQwMEJDMDAwMDAwMDIwMjBEMDBDMDAwMDAwMDAxRDcKKzoxMDBDODAwMDAyMEQwMEM4MDAwMDAwMDIwMjBEMDBDQzAwMDAwMDAyQUUKKzoxMDBDOTAwMDAyMEQwMTA4MDAwMDAwMDEwMjBEMDE1QzAwMDAwMDAxQ0UKKzoxMDBDQTAwMDAyMEQwMTY0MDAwMDAwMDEwMjBEMDE2ODAwMDAwMDAyNTUKKzoxMDBDQjAwMDAyMEQwMjA0MDAwMDAwMDEwMjBEMDIwQzAwMDAwMDIwRTEKKzoxMDBDQzAwMDAyMEQwMjEwMDAwMDAwNDAwMjBEMDIxNDAwMDAwMDQwNUUKKzoxMDBDRDAwMDAyMEQwMjIwMDAwMDAwMDMwMjBEMDIyNDAwMDAwMDE4OTMKKzoxMDBDRTAwMDA2MEQwMjgwMDAwMDAwMTIwNDBEMDMwMDAwMjQwMjQzRTAKKzoxMDBDRjAwMDAyMEQwMDRDMDAwMDAwMDEwMjBEMDA1MDAwMDAwMDAyMzcKKzoxMDBEMDAwMDAyMEQwMDU0MDAwMDAwMDgwMjBEMDA1ODAwMDAwMDA4MDkKKzoxMDBEMTAwMDA2MEQwMDVDMDAwMDAwMDQwMjBEMDBDNDAwMDAwMDA0ODkKKzoxMDBEMjAwMDAyMEQwMTE0MDAwMDAwMDkwMjBEMDExODAwMDAwMDI5NDUKKzoxMDBEMzAwMDAyMEQwMTFDMDAwMDAwMEEwMjBEMDEyMDAwMDAwMDJBMjMKKzoxMDBENDAwMDAyMEQwMTI0MDAwMDAwMDcwMjBEMDEyODAwMDAwMDI3MDkKKzoxMDBENTAwMDAyMEQwMTJDMDAwMDAwMDcwMjBEMDEzMDAwMDAwMDI3RTkKKzoxMDBENjAwMDAyMEQwMTM0MDAwMDAwMEMwMjBEMDEzODAwMDAwMDJDQkYKKzoxMDBENzAwMDAyMEQwMTNDMDAwMDAwMEMwMjBEMDE0MDAwMDAwMDJDOUYKKzoxMDBEODAwMDAyMEQwMTQ0MDAwMDAwMEMwMjBEMDE0ODAwMDAwMDJDN0YKKzoxMDBEOTAwMDAyMEQwMDA0MDAwMDAwMDEwMjBEMDAwODAwMDAwMDAxMjcKKzoxMDBEQTAwMDAyMEQwMDBDMDAwMDAwMDEwMjBEMDAxMDAwMDAwMDAxMDcKKzoxMDBEQjAwMDAyMEQwMDE0MDAwMDAwMDEwMjBEMDAxODAwMDAwMDAxRTcKKzoxMDBEQzAwMDAyMEQwMDFDMDAwMDAwMDEwMjBEMDAyMDAwMDAwMDAxQzcKKzoxMDBERDAwMDAyMEQwMDI0MDAwMDAwMDEwMjBEMDAyODAwMDAwMDAxQTcKKzoxMDBERTAwMDAyMEQwMDJDMDAwMDAwMDEwMjBEMDAzMDAwMDAwMDAxODcKKzoxMDBERjAwMDAyMEQwMDM0MDAwMDAwMDEwMjBEMDAzODAwMDAwMDAxNjcKKzoxMDBFMDAwMDAyMEQwMDNDMDAwMDAwMDEwMjBFMDA0QzAwMDAwMDMyMDgKKzoxMDBFMTAwMDAyMEUwMDk0MDIxNTAwMjAwMjBFMDA5ODAyMTUwMDIwMTgKKzoxMDBFMjAwMDAyMEUwMDlDMDAwMDAwMzAwMjBFMDBBMDA4MTAwMDAwMUUKKzoxMDBFMzAwMDAyMEUwMEE0MDAwMDAwMzMwMjBFMDBBODAwMDAwMDMwRTMKKzoxMDBFNDAwMDAyMEUwMEFDMDAwMDAwMzEwMjBFMDBCMDAwMDAwMDAyRjMKKzoxMDBFNTAwMDAyMEUwMEI0MDAwMDAwMDQwMjBFMDBCODAwMDAwMDAwMDIKKzoxMDBFNjAwMDAyMEUwMEJDMDAwMDAwMDIwMjBFMDBDMDAwMDAwMDAyRTIKKzoxMDBFNzAwMDAyMEUwMEM0MDAwMDAwMDAwMjBFMDBDODAwMDAwMDAyQzQKKzoxMDBFODAwMDAyMEUwMENDMDAwMDAwMDcwMjBFMDBEMDAwMDAwMDAyOUQKKzoxMDBFOTAwMDAyMEUwMEQ0MDAwMDAwMDIwMjBFMDBEODAwMDAwMDAxODMKKzoxMDBFQTAwMDAyMEUwMEU0MDAwMDAwMDEwMjBFMDE0NDAwMDAwMDAxRjcKKzoxMDBFQjAwMDAyMEUwMTRDMDAwMDAwMDEwMjBFMDE1MDAwMDAwMDAyNzEKKzoxMDBFQzAwMDAyMEUwMjA0MDAwMDAwMDEwMjBFMDIwQzAwMDAwMDQwQUQKKzoxMDBFRDAwMDAyMEUwMjEwMDAwMDAwNDAwMjBFMDIxQzAwMDAwMDA0N0UKKzoxMDBFRTAwMDAyMEUwMjIwMDAwMDAwMjAwMjBFMDIyNDAwMDAwMDBFNkMKKzoxMDBFRjAwMDAyMEUwMjI4MDAwMDAwMUIwNjBFMDMwMDAwMDAwMDEyNzQKKzoxMDBGMDAwMDA0MEUwMjgwMDAxQjAyNjcwMjBFMDA1NDAwMDAwMDBDNTkKKzoxMDBGMTAwMDAyMEUwMDU4MDAwMDAwMDcwMjBFMDA1QzAwMDAwMDBGRTcKKzoxMDBGMjAwMDAyMEUwMDYwMDAwMDAwMTAwNjBFMDA2NDAwMDAwMDA0QzUKKzoxMDBGMzAwMDAyMEUwMERDMDAwMDAwMDMwMjBFMDExMDAwMDAwMDBGOTIKKzoxMDBGNDAwMDAyMEUwMTE0MDAwMDAwMkYwMjBFMDExODAwMDAwMDBFMTYKKzoxMDBGNTAwMDAyMEUwMTFDMDAwMDAwMkUwMjBFMDAwNDAwMDAwMDAxMjEKKzoxMDBGNjAwMDAyMEUwMDA4MDAwMDAwMDEwMjBFMDAwQzAwMDAwMDAxNEIKKzoxMDBGNzAwMDAyMEUwMDEwMDAwMDAwMDEwMjBFMDAxNDAwMDAwMDAxMkIKKzoxMDBGODAwMDAyMEUwMDE4MDAwMDAwMDEwMjBFMDAxQzAwMDAwMDAxMEIKKzoxMDBGOTAwMDAyMEUwMDIwMDAwMDAwMDEwMjBFMDAyNDAwMDAwMDAxRUIKKzoxMDBGQTAwMDAyMEUwMDI4MDAwMDAwMDEwMjBFMDAyQzAwMDAwMDAxQ0IKKzoxMDBGQjAwMDAyMEUwMDMwMDAwMDAwMDEwMjBFMDAzNDAwMDAwMDAxQUIKKzoxMDBGQzAwMDAyMEUwMDM4MDAwMDAwMDEwMjBFMDAzQzAwMDAwMDAxOEIKKzoxMDBGRDAwMDAyMEUwMDQwMDAwMDAwMDEwMjBFMDA0NDAwMDAwMDAxNkIKKzoxMDBGRTAwMDA3MzAwNDAwMDBDOTAwMDAwODMwMDc2ODAwMTMwMjgyQkYKKzoxMDBGRjAwMDA3MzQwMDAwMzQxMjAwMDAwNzM0ODAwMDM3QjcwRDA1QjUKKzoxMDEwMDAwMDA3MzUwMDAwMkU3RDFBRjMwODM1NkY0MDUyMTgwMjg0MTAKKzoxMDEwMTAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwNkEKKzoxMDEwMjAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwNEEKKzoxMDEwMzAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwMkEKKzoxMDEwNDAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyRjUKKzoxMDEwNTAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwRDUKKzoxMDEwNjAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxQjMKKzoxMDEwNzAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxOTcKKzoxMDEwODAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwNzQKKzoxMDEwOTAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzNTQKKzoxMDEwQTAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxMzcKKzoxMDEwQjAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwMTQKKzoxMDEwQzAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzRjQKKzoxMDEwRDAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxRDcKKzoxMDEwRTAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwQjQKKzoxMDEwRjAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzOTEKKzoxMDExMDAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDAzRkZGMTMKKzoxMDExMTAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwOUIKKzoxMDExMjAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwRDcKKzoxMDExMzAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwM0IKKzoxMDExNDAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBNEYKKzoxMDExNTAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwMDcKKzoxMDExNjAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDdBMTIwNjAKKzoxMDExNzAwMDBBMzM4MzAwMDAwMDAxMzgwQjMzODMwMDAwMDAxMzg4MUEKKzoxMDExODAwMDAyMzM4M0MwMDAwMDAxRjQwQzMzODM4MDFEQ0Q2NTAwNjEKKzoxMDExOTAwMDBBMzM4MzgwMDAwNEM0QjQwQjMzODM4MDAwNEM0QjQwN0IKKzoxMDExQTAwMDA2MzIxQUEwMDAwMDAwQzIwNjMyMTAyMDAwMDAwMEM4NUIKKzoxMDExQjAwMDA2MzIxMDAwMDAwMDAwMDIwNjMyMTQwMDAwMDAwMDQwNTkKKzoxMDExQzAwMDA2MzI1MDk4MDAwMDAwMDQwNjMyNTA4MDAwMDAwMDA1RUUKKzoxMDExRDAwMDA0MzI1MDk0MDAwMTAyODYwNjMyNTAwMDAwMDAwMDIwQzQKKzoxMDExRTAwMDA0MzIyODMwMDAwMjAyODcwMjMzMDgwMDAxMDAwMDAwQTgKKzoxMDExRjAwMDA0MzMwQzAwMDAxMDAyODkwMjMzMDgwMDAwMDAwMDAwRDQKKzoxMDEyMDAwMDA0MzMwQzQwMDAxMDAyOTkwNjMyMTUwMDAwMDAwMEI0QUYKKzoxMDEyMTAwMDAyMzIxREM4MDAwMDAwMDAwNjMyNDAwMDAwMDAwMEQ4NjUKKzoxMDEyMjAwMDA2MzIxN0QwMDAwMDAwQjQwMjMyMURDQzAwMDAwMDAwQ0UKKzoxMDEyMzAwMDA2MzI0MzYwMDAwMDAwRDgwNzIwMDQwMDAwOTIwMDAwM0UKKzoxMDEyNDAwMDA4MjAwNzgwMDAxMDAyQTkwNzI0MDAwMDJDQ0YwMDAwMEUKKzoxMDEyNTAwMDA3MjQ4MDAwMkFFNTBCMzQwODI0REM2MDYyREEwMkFCNDQKKzoxMDEyNjAwMDAxMjAwMDAwMDAwMDAwMDAwMTIwMDAwNDAwMDAwMDAwMzgKKzoxMDEyNzAwMDAxMjAwMDA4MDAwMDAwMDAwMTIwMDAwQzAwMDAwMDAwMTgKKzoxMDEyODAwMDAxMjAwMDEwMDAwMDAwMDAwMTIwMDAxNDAwMDAwMDAwRjgKKzoxMDEyOTAwMDAyMjAwMDIwMDAwMDAwMDEwMjIwMDAyNDAwMDAwMDAyQzMKKzoxMDEyQTAwMDAyMjAwMDI4MDAwMDAwMDMwMjIwMDAyQzAwMDAwMDAwQTMKKzoxMDEyQjAwMDAyMjAwMDMwMDAwMDAwMDQwMjIwMDAzNDAwMDAwMDAxODEKKzoxMDEyQzAwMDAyMjAwMDM4MDAwMDAwMDAwMjIwMDAzQzAwMDAwMDAxNjUKKzoxMDEyRDAwMDAyMjAwMDQwMDAwMDAwMDQwMjIwMDA0NDAwMDAwMDAwNDIKKzoxMDEyRTAwMDAyMjAwMDQ4MDAwMDAwMDEwMjIwMDA0QzAwMDAwMDAzMjIKKzoxMDEyRjAwMDAyMjAwMDUwMDAwMDAwMDAwMjIwMDA1NDAwMDAwMDAxMDUKKzoxMDEzMDAwMDAyMjAwMDU4MDAwMDAwMDQwMjIwMDA1QzAwMDAwMDAwRTEKKzoxMDEzMTAwMDAyMjAwMDYwMDAwMDAwMDEwMjIwMDA2NDAwMDAwMDAzQzEKKzoxMDEzMjAwMDAyMjAwMDY4MDAwMDAwMDAwMjIwMDA2QzAwMDAwMDAxQTQKKzoxMDEzMzAwMDAyMjAwMDcwMDAwMDAwMDQwMjIwMDA3NDAwMDAwMDAwODEKKzoxMDEzNDAwMDAyMjAwMDc4MDAwMDAwMDQwMjIwMDA3QzAwMDAwMDAzNUUKKzoxMDEzNTAwMDA2MjAwMDgwMDAwMDAwMDIwMjIwMDBBNDAwMDAzRkZGRTEKKzoxMDEzNjAwMDAyMjAwMEE4MDAwMDAzRkYwMjIwMDIyNDAwMDAwMDAwNjkKKzoxMDEzNzAwMDAyMjAwMjM0MDAwMDAwMDAwMjIwMDI0QzAwMDAwMDAwQTUKKzoxMDEzODAwMDAyMjAwMkU0MDAwMEZGRkYwNjIwMjAwMDAwMDAwODAwMDkKKzoxMDEzOTAwMDAyMjM4QkMwMDAwMDAwMDEwMjIzODAwMDAwMDAwMDEwMjcKKzoxMDEzQTAwMDAyMjM4MDQwMDAwMDAwMTIwMjIzODA4MDAwMDAwMDMwRjEKKzoxMDEzQjAwMDAyMjM4MEMwMDAwMDAwMEUwMjIzODNDMDAwMDAwMUY0NUQKKzoxMDEzQzAwMDA2MjI1MDAwMDAwMDAwNDIwNjIyMTAyMDAwMDAwMEM4NDMKKzoxMDEzRDAwMDA2MjIxMDAwMDAwMDAwMDIwNjIyMjAwMDAwMDAwMEMwQ0IKKzoxMDEzRTAwMDA2MjIyNUMwMDAwMDAyNDAwNDIyMkVDODAwMDgwMkFEREIKKzoxMDEzRjAwMDAyMjMwODAwMDEzRkZGRkYwNDIzMEMwMDAwMTAwMkI1ODgKKzoxMDE0MDAwMDAyMjMwODAwMDAwMDAwMDAwNDIzMEM0MDAwMTAwMkM1NjUKKzoxMDE0MTAwMDA2MjIzMDQwMDAwMDAwQTAwNjIyMzU0MDAwMDAwMDEwRTcKKzoxMDE0MjAwMDA2MjIzNkMwMDAwMDAwMzAwNjIyNDAwMDAwMDAwMjAwMDQKKzoxMDE0MzAwMDA2MjIzNUMwMDAwMDAwMjAwNjIyMzg0MDAwMDAwMDMwOUYKKzoxMDE0NDAwMDA2MjIzMDAwMDAwMDAwMDgwMjIyNTExODAwMDAwMDAwQUYKKzoxMDE0NTAwMDA2MjIyMzAwMDAwMDAwMEUwNjIyMjQxMDAwMDAwMDMwQTcKKzoxMDE0NjAwMDA2MjIzMkMwMDAwMDAwQTAwNjIyMzU4MDAwMDAwMDEwRDUKKzoxMDE0NzAwMDA2MjIzNzgwMDAwMDAwMzAwNjIyNDgwMDAwMDAwMjAwRUIKKzoxMDE0ODAwMDA2MjIzNjQwMDAwMDAwMjAwNjIyMzkwMDAwMDAwMDMwMEQKKzoxMDE0OTAwMDA2MjIzMDIwMDAwMDAwMDgwMjIyNTExQzAwMDAwMDAwM0IKKzoxMDE0QTAwMDA2MjIyMzM4MDAwMDAwMEUwNjIyMjREMDAwMDAwMDMwNUYKKzoxMDE0QjAwMDAyMTYxMDAwMDAwMDAwMjgwMjE3MDAwODAwMDAwMDAyQjkKKzoxMDE0QzAwMDAyMTcwMDJDMDAwMDAwMDMwMjE3MDAzQzAwMDAwMDA0N0IKKzoxMDE0RDAwMDAyMTcwMDQ0MDAwMDAwMDgwMjE3MDA0ODAwMDAwMDAyNDQKKzoxMDE0RTAwMDAyMTcwMDRDMDAwMDAwOTAwMjE3MDA1MDAwMDAwMDkwMEUKKzoxMDE0RjAwMDAyMTcwMDU0MDA4MDAwOTAwMjE3MDA1ODA4MTQwMDAwRTIKKzoxMDE1MDAwMDAyMTcwMDYwMDAwMDAwOEEwMjE3MDA2NDAwMDAwMDgwREIKKzoxMDE1MTAwMDAyMTcwMDY4MDAwMDAwODEwMjE3MDA2QzAwMDAwMDgwQzQKKzoxMDE1MjAwMDAyMTcwMDcwMDAwMDAwMDYwMjE3MDA3ODAwMDAwN0QwQzQKKzoxMDE1MzAwMDAyMTcwMDdDMDAwMDA3NkMwMjE3MDAzODAwN0MxMDA0QzIKKzoxMDE1NDAwMDAyMTcwMDA0MDAwMDAwMEYwNjE2NDAyNDAwMDAwMDAyRUQKKzoxMDE1NTAwMDAyMTY0MDcwMDAwMDAwMUMwMjE2NDIwODAwMDAwMDAxNDQKKzoxMDE1NjAwMDAyMTY0MjEwMDAwMDAwMDEwMjE2NDIyMDAwMDAwMDAxOTUKKzoxMDE1NzAwMDAyMTY0MjI4MDAwMDAwMDEwMjE2NDIzMDAwMDAwMDAxNUQKKzoxMDE1ODAwMDAyMTY0MjM4MDAwMDAwMDEwMjE2NDI2MDAwMDAwMDAxMEQKKzoxMDE1OTAwMDBDMTY0MDFDMDAwM0QwOTAwQTE2NDAxQzAwMDAwMDlDNTIKKzoxMDE1QTAwMDBCMTY0MDFDMDAwMDA5QzQwMjE2NDAzMDAwMDAwMDA4NjEKKzoxMDE1QjAwMDAyMTY0MDM0MDAwMDAwMEMwMjE2NDAzODAwMDAwMDEwRjMKKzoxMDE1QzAwMDAyMTY0MDQ0MDAwMDAwMjAwMjE2NDAwMDAwMDAwMDAxMDYKKzoxMDE1RDAwMDAyMTY0MEQ4MDAwMDAwMDEwMjE2NDAwODAwMDAwMDAxNzkKKzoxMDE1RTAwMDAyMTY0MDBDMDAwMDAwMDEwMjE2NDAxMDAwMDAwMDAxMkQKKzoxMDE1RjAwMDAyMTY0MjQwMDAwMDAwMDAwMjE2NDI0ODAwMDAwMDAwQUYKKzoxMDE2MDAwMDA2MTY0MjcwMDAwMDAwMDIwMjE2NDI1MDAwMDAwMDAwNjAKKzoxMDE2MTAwMDAyMTY0MjU4MDAwMDAwMDAwNjE2NDI4MDAwMDAwMDAyMzgKKzoxMDE2MjAwMDAyMTY2MDA4MDAwMDA2MTQwMjE2NjAwQzAwMDAwNjAwOTYKKzoxMDE2MzAwMDAyMTY2MDEwMDAwMDA2MDQwMjE2NjAxQzAwMDBGRkZGODYKKzoxMDE2NDAwMDAyMTY2MDIwMDAwMEZGRkYwMjE2NjAyNDAwMDBGRkZGNkEKKzoxMDE2NTAwMDAyMTY2MDI4MDAwMEZGRkYwMjE2NjAzODAwMDAwMDIwMUMKKzoxMDE2NjAwMDAyMTY2MDNDMDAwMDAwMjAwMjE2NjA0MDAwMDAwMDM0QkEKKzoxMDE2NzAwMDAyMTY2MDQ0MDAwMDAwMzUwMjE2NjA0ODAwMDAwMDIzOTYKKzoxMDE2ODAwMDAyMTY2MDRDMDAwMDAwMjQwMjE2NjA1MDAwMDAwMDI1ODUKKzoxMDE2OTAwMDAyMTY2MDU0MDAwMDAwMjYwMjE2NjA1ODAwMDAwMDI3NjEKKzoxMDE2QTAwMDAyMTY2MDVDMDAwMDAwMjkwMjE2NjA2MDAwMDAwMDJBM0IKKzoxMDE2QjAwMDAyMTY2MDY0MDAwMDAwMkIwMjE2NjA2ODAwMDAwMDJDMTcKKzoxMDE2QzAwMDAyMTY2MDZDMDAwMDAwMkQwNjE2NjA3MDAwMDAwMDUyQ0IKKzoxMDE2RDAwMDAyMTY2MUI4MDAwMDAwMDEwNjE2NjFCQzAwMDAwMDFGODAKKzoxMDE2RTAwMDAyMTY2MjM4MDdGRkZGRkYwMjE2NjIzQzAwMDAwMDNGNEYKKzoxMDE2RjAwMDAyMTY2MjQwMDdGRkZGRkYwMjE2NjI0NDAwMDAwMDBGNUYKKzoxMDE3MDAwMDAxMTY2MjQ4MDAwMDAwMDAwMTE2NjI0QzAwMDAwMDAwNTMKKzoxMDE3MTAwMDAxMTY2MjUwMDAwMDAwMDAwMTE2NjI1NDAwMDAwMDAwMzMKKzoxMDE3MjAwMDAxMTY2MjU4MDAwMDAwMDAwMTE2NjI1QzAwMDAwMDAwMTMKKzoxMDE3MzAwMDAxMTY2MjYwMDAwMDAwMDAwMTE2NjI2NDAwMDAwMDAwRjMKKzoxMDE3NDAwMDAxMTY2MjY4MDAwMDAwMDAwMTE2NjI2QzAwMDAwMDAwRDMKKzoxMDE3NTAwMDAxMTY2MjcwMDAwMDAwMDAwMTE2NjI3NDAwMDAwMDAwQjMKKzoxMDE3NjAwMDAxMTY2Mjc4MDAwMDAwMDAwMTE2NjI3QzAwMDAwMDAwOTMKKzoxMDE3NzAwMDAyMTY2NEJDMDAwMDAwMDEwQzE2NjAwMDAwMDAwM0U4QzMKKzoxMDE3ODAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDBBNEQKKzoxMDE3OTAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1OEEKKzoxMDE3QTAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1NjYKKzoxMDE3QjAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0RDMKKzoxMDE3QzAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0M0QKKzoxMDE3RDAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0MUQKKzoxMDE3RTAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0RkQKKzoxMDE3RjAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA0QkQKKzoxMDE4MDAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNEOEIKKzoxMDE4MTAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDNDkKKzoxMDE4MjAwMDAyMTY4MEYwMDAwMDAwMDcwNjE2ODBGNDAwMDAwMDA1OTQKKzoxMDE4MzAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODEwODAwMDAwMDAwNTcKKzoxMDE4NDAwMDAyMTY4MTBDMDAwMDAwMDQwMjE2ODExMDAwMDAwMDA0NDIKKzoxMDE4NTAwMDAyMTY4MTE0MDAwMDAwMDIwMjE2ODgxMDA4MDEyMDA0RkMKKzoxMDE4NjAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODExQzAwMDAwMDA1MDgKKzoxMDE4NzAwMDAyMTY4MTIwMDAwMDAwMDUwMjE2ODEyNDAwMDAwMDA1RTgKKzoxMDE4ODAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODEyODAwMDAwMDA4OEEKKzoxMDE4OTAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3QUQKKzoxMDE4QTAwMDAyMTY4MTM0MDAwMDAwMDAwMjE2ODgzMDAxMDEwMTIwNzgKKzoxMDE4QjAwMDA2MTY4MTM4MDAwMDAwMDQwMjE2ODgzNDAxMDEwMTAxNzcKKzoxMDE4QzAwMDA2MTY4MTQ4MDAwMDAwMDQwMjE2ODgzODAxMDEwMTAxNTMKKzoxMDE4RDAwMDA2MTY4MTU4MDAwMDAwMDQwMjE2ODgzQzAxMDEwMTAxMkYKKzoxMDE4RTAwMDA2MTY4MTY4MDAwMDAwMDMwMjE2ODE3NDAwMDAwMDAxRTIKKzoxMDE4RjAwMDAyMTY4ODQwMDEwMTAxMDEwMjE2ODE3ODAwMDAwMDAxRjIKKzoxMDE5MDAwMDAyMTY4MTdDMDAwMDAwMDEwMjE2ODE4MDAwMDAwMDAxQTcKKzoxMDE5MTAwMDAyMTY4MTg0MDAwMDAwMDEwMjE2ODg0NDAxMDEwMTAxQzEKKzoxMDE5MjAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODE4QzAwMDAwMDA0NkMKKzoxMDE5MzAwMDAyMTY4MTkwMDAwMDAwMDQwMjE2ODE5NDAwMDAwMDAyNEIKKzoxMDE5NDAwMDAyMTY4ODQ4MDgwMTIwMDQwMjE2ODE5ODAwMDAwMDA1NEMKKzoxMDE5NTAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1MEYKKzoxMDE5NjAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODgxNDIwMDgxMDAxNDgKKzoxMDE5NzAwMDAyMTY4MUE4MDAwMDAwMDgwMjE2ODFBQzAwMDAwMDA2RDMKKzoxMDE5ODAwMDAyMTY4MUIwMDAwMDAwMDcwMjE2ODFCNDAwMDAwMDAxQjkKKzoxMDE5OTAwMDAyMTY4ODE4MDEwMTAxMjAwMjE2ODFCODAwMDAwMDAxMUEKKzoxMDE5QTAwMDAyMTY4MUJDMDAwMDAwMDEwMjE2ODFDMDAwMDAwMDAxODcKKzoxMDE5QjAwMDAyMTY4MUM0MDAwMDAwMDEwMjE2ODgxQzAxMDEwMTAxMDkKKzoxMDE5QzAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODFDQzAwMDAwMDAxNEYKKzoxMDE5RDAwMDAyMTY4MUQwMDAwMDAwMDEwMjE2ODFENDAwMDAwMDAxMkYKKzoxMDE5RTAwMDAyMTY4ODIwMDEwMTAxMDEwMjE2ODFEODAwMDAwMDAxQzEKKzoxMDE5RjAwMDAyMTY4MURDMDAwMDAwMDEwMjE2ODFFMDAwMDAwMDAxRjcKKzoxMDFBMDAwMDAyMTY4MUU0MDAwMDAwMDEwMjE2ODgyNDAxMDEwMTAxOTAKKzoxMDFBMTAwMDAyMTY4MUU4MDAwMDAwMDEwMjE2ODFFQzAwMDAwMDAxQkUKKzoxMDFBMjAwMDAyMTY4MUYwMDAwMDAwMDEwMjE2ODgyODAxMDEwMTAxNjAKKzoxMDFBMzAwMDAyMTY4MjQwRkZGRjAwM0YwNjE2ODI0NDAwMDAwMDAyQUIKKzoxMDFBNDAwMDAyMTY4MjRDRkZGRjAwM0YwMjE2ODI1MDAwMDAwMTAwODgKKzoxMDFBNTAwMDAyMTY4MjU0MDAwMDAxMDAwNjE2ODI1ODAwMDAwMDAyOUYKKzoxMDFBNjAwMDAyMTY4MjYwMDAwMDAwQzAwMjE2ODI2NDAwMDAwMEMwRkUKKzoxMDFBNzAwMDAyMTY4MjY4MDAwMDFFMDAwMjE2ODI2QzAwMDAxRTAwMjIKKzoxMDFBODAwMDAyMTY4MjcwMDAwMDQwMDAwMjE2ODI3NDAwMDA0MDAwQkUKKzoxMDFBOTAwMDAyMTY4Mjc4MDAwMDgwMDAwMjE2ODI3QzAwMDA4MDAwMUUKKzoxMDFBQTAwMDAyMTY4MjgwMDAwMDIwMDAwMjE2ODI4NDAwMDAyMDAwQkUKKzoxMDFBQjAwMDA2MTY4Mjg4MDAwMDAwMDcwMjE2ODJBNDAwMDAwMDAxQkEKKzoxMDFBQzAwMDA2MTY4MkE4MDAwMDAwMEEwMjE2ODFGNDAwMDAwQzA4MjUKKzoxMDFBRDAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwOUYKKzoxMDFBRTAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3ODcKKzoxMDFBRjAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwMUMKKzoxMDFCMDAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIxOEZGRkYwMUZGN0IKKzoxMDFCMTAwMDAyMTY4MjE0RkZGRjAxRkYwMjE2ODIzQzAwMDAwMDEzMzAKKzoxMDFCMjAwMDAyMTY4MDkwMDAwMDAxM0YwMjE2ODA2MDAwMDAwMTQwMTQKKzoxMDFCMzAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA2ODAwMDAwMDAyNjIKKzoxMDFCNDAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA3QjYKKzoxMDFCNTAwMDAyMTY4MDlDMDAwMDAwNDgwMjE2ODBBMDAwMDAwMDQ4ODkKKzoxMDFCNjAwMDA2MTY4MEE0MDAwMDAwMDIwMjE2ODBBQzAwMDAwMDQ4QTcKKzoxMDFCNzAwMDA2MTY4MEIwMDAwMDAwMDcwMjE2ODIzODAwMDA4MDAwQzAKKzoxMDFCODAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODA5NDAwMDA3RkZGRDQKKzoxMDFCOTAwMDAyMTY4MjIwMDAwMDAwMDcwMjE2ODIxQzAwMDAwMDA3QzcKKzoxMDFCQTAwMDAyMTY4MjI4MDAwMDAwMDAwMjE2ODIyNEZGRkZGRkZGQjkKKzoxMDFCQjAwMDAyMTY4MjMwMDAwMDAwMDAwMjE2ODIyQ0ZGRkZGRkZGOTkKKzoxMDFCQzAwMDAyMTY4MEVDMDAwMDAwRkYwMjE0MDAwMDAwMDAwMDAxN0IKKzoxMDFCRDAwMDAyMTQwMDBDMDAwMDAwMDEwMjE0MDA0MDAwMDAwMDAxOEIKKzoxMDFCRTAwMDAyMTQwMDQ0MDAwMDdGRkYwMjE0MDAwQzAwMDAwMDAwRkIKKzoxMDFCRjAwMDAyMTQwMDAwMDAwMDAwMDAwMjE0MDA2QzAwMDAwMDAwNEQKKzoxMDFDMDAwMDAyMTQwMDA0MDAwMDAwMDEwMjE0MDAzMDAwMDAwMDAxNzIKKzoxMDFDMTAwMDAyMTQwMDA0MDAwMDAwMDAwMjE0MDA1QzAwMDAwMDAwMzgKKzoxMDFDMjAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxNEEKKzoxMDFDMzAwMDAyMTQwMDA4MDAwMDAwMDAwMjE0MDA2MDAwMDAwMDAwMTAKKzoxMDFDNDAwMDAyMDIwMDU4MDAwMDAwMzIwMjAyMDBBMDAzMTUwMDIwMkEKKzoxMDFDNTAwMDAyMDIwMEE0MDMxNTAwMjAwMjAyMDBBODAxMDAwMDMwQzcKKzoxMDFDNjAwMDAyMDIwMEFDMDgxMDAwMDAwMjAyMDBCMDAwMDAwMDMzQzUKKzoxMDFDNzAwMDAyMDIwMEI0MDAwMDAwMzAwMjAyMDBCODAwMDAwMDMxOEYKKzoxMDFDODAwMDAyMDIwMEJDMDAwMDAwMDMwMjAyMDBDMDAwMDAwMDA2QzcKKzoxMDFDOTAwMDAyMDIwMEM0MDAwMDAwMDMwMjAyMDBDODAwMDAwMDAzQUEKKzoxMDFDQTAwMDAyMDIwMENDMDAwMDAwMDIwMjAyMDBEMDAwMDAwMDAwOEUKKzoxMDFDQjAwMDAyMDIwMEQ0MDAwMDAwMDIwMjAyMDBEQzAwMDAwMDAwNkEKKzoxMDFDQzAwMDAyMDIwMEUwMDAwMDAwMDYwMjAyMDBFNDAwMDAwMDA0M0UKKzoxMDFDRDAwMDAyMDIwMEU4MDAwMDAwMDIwMjAyMDBFQzAwMDAwMDAyMjQKKzoxMDFDRTAwMDAyMDIwMEYwMDAwMDAwMDEwMjAyMDBGQzAwMDAwMDA2RjkKKzoxMDFDRjAwMDAyMDIwMTIwMDAwMDAwMDAwMjAyMDEzNDAwMDAwMDAyODQKKzoxMDFEMDAwMDAyMDIwMUIwMDAwMDAwMDEwMjAyMDIwQzAwMDAwMDAxMEEKKzoxMDFEMTAwMDAyMDIwMjE0MDAwMDAwMDEwMjAyMDIxODAwMDAwMDAyODgKKzoxMDFEMjAwMDAyMDIwNDA0MDAwMDAwMDEwMjAyMDQwQzAwMDAwMDQwNTIKKzoxMDFEMzAwMDAyMDIwNDEwMDAwMDAwNDAwMjAyMDQxQzAwMDAwMDA0MjMKKzoxMDFENDAwMDAyMDIwNDIwMDAwMDAwMjAwMjAyMDQyNDAwMDAwMDAyMUQKKzoxMDFENTAwMDAyMDIwNDI4MDAwMDAwMUYwNjAyMDUwMDAwMDAwMDEyMTUKKzoxMDFENjAwMDA0MDIwNDgwMDAxRjAyRDUwMjAyMDA2MDAwMDAwMDBGODAKKzoxMDFENzAwMDAyMDIwMDY0MDAwMDAwMDcwMjAyMDA2ODAwMDAwMDBCN0QKKzoxMDFEODAwMDAyMDIwMDZDMDAwMDAwMEUwNjAyMDA3MDAwMDAwMDA0NTkKKzoxMDFEOTAwMDAyMDIwMEY0MDAwMDAwMDQwMjAyMDAwNDAwMDAwMDAxM0UKKzoxMDFEQTAwMDAyMDIwMDA4MDAwMDAwMDEwMjAyMDAwQzAwMDAwMDAxMTUKKzoxMDFEQjAwMDAyMDIwMDEwMDAwMDAwMDEwMjAyMDAxNDAwMDAwMDAxRjUKKzoxMDFEQzAwMDAyMDIwMDE4MDAwMDAwMDEwMjAyMDAxQzAwMDAwMDAxRDUKKzoxMDFERDAwMDAyMDIwMDIwMDAwMDAwMDEwMjAyMDAyNDAwMDAwMDAxQjUKKzoxMDFERTAwMDAyMDIwMDI4MDAwMDAwMDEwMjAyMDAyQzAwMDAwMDAxOTUKKzoxMDFERjAwMDAyMDIwMDMwMDAwMDAwMDEwMjAyMDAzNDAwMDAwMDAxNzUKKzoxMDFFMDAwMDAyMDIwMDM4MDAwMDAwMDEwMjAyMDAzQzAwMDAwMDAxNTQKKzoxMDFFMTAwMDAyMDIwMDQwMDAwMDAwMDEwMjAyMDA0NDAwMDAwMDAxMzQKKzoxMDFFMjAwMDAyMDIwMDQ4MDAwMDAwMDEwMjAyMDA0QzAwMDAwMDAxMTQKKzoxMDFFMzAwMDAyMDIwMDUwMDAwMDAwMDEwMjAyMDEwODAwMDAwMEM4NzgKKzoxMDFFNDAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwQUEKKzoxMDFFNTAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyRDYKKzoxMDFFNjAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGQTcKKzoxMDFFNzAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwQzAwMDAwMEM4OTkKKzoxMDFFODAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwNjIKKzoxMDFFOTAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyOEUKKzoxMDFFQTAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGNUYKKzoxMDFFQjAwMDAyMDIwMUYwMDAwMDAwRkYwNzI4MDQwMDAwQjQwMDAwNDcKKzoxMDFFQzAwMDA4MjgwNzY4MDAxMzAyRjQwNzJDMDAwMDM1RDcwMDAwMkIKKzoxMDFFRDAwMDA3MkM4MDAwM0E1OTBENzYwNzJEMDAwMDNCNzQxQzBEMkQKKzoxMDFFRTAwMDA3MkQ4MDAwMjI2QzJBRUIwODJEQzZGMDQ3MjIwMkY2NEYKKzoxMDFFRjAwMDAxMjgwMDAwMDAwMDAwMDAwMTI4MDAwNDAwMDAwMDAwOEMKKzoxMDFGMDAwMDAxMjgwMDA4MDAwMDAwMDAwMTI4MDAwQzAwMDAwMDAwNkIKKzoxMDFGMTAwMDAxMjgwMDEwMDAwMDAwMDAwMTI4MDAxNDAwMDAwMDAwNEIKKzoxMDFGMjAwMDAyMjgwMDIwMDAwMDAwMDEwMjI4MDAyNDAwMDAwMDAyMTYKKzoxMDFGMzAwMDAyMjgwMDI4MDAwMDAwMDMwMjI4MDAyQzAwMDAwMDAwRjYKKzoxMDFGNDAwMDAyMjgwMDMwMDAwMDAwMDQwMjI4MDAzNDAwMDAwMDAxRDQKKzoxMDFGNTAwMDAyMjgwMDM4MDAwMDAwMDAwMjI4MDAzQzAwMDAwMDAxQjgKKzoxMDFGNjAwMDAyMjgwMDQwMDAwMDAwMDQwMjI4MDA0NDAwMDAwMDAwOTUKKzoxMDFGNzAwMDAyMjgwMDQ4MDAwMDAwMDEwMjI4MDA0QzAwMDAwMDAzNzUKKzoxMDFGODAwMDAyMjgwMDUwMDAwMDAwMDAwMjI4MDA1NDAwMDAwMDAxNTgKKzoxMDFGOTAwMDAyMjgwMDU4MDAwMDAwMDQwMjI4MDA1QzAwMDAwMDAwMzUKKzoxMDFGQTAwMDAyMjgwMDYwMDAwMDAwMDEwMjI4MDA2NDAwMDAwMDAzMTUKKzoxMDFGQjAwMDAyMjgwMDY4MDAwMDAwMDAwMjI4MDA2QzAwMDAwMDAxRjgKKzoxMDFGQzAwMDAyMjgwMDcwMDAwMDAwMDQwMjI4MDA3NDAwMDAwMDAwRDUKKzoxMDFGRDAwMDAyMjgwMDc4MDAwMDAwMDQwMjI4MDA3QzAwMDAwMDAzQjIKKzoxMDFGRTAwMDA2MjgwMDgwMDAwMDAwMDIwMjI4MDBBNDAwMDAzRkZGMzUKKzoxMDFGRjAwMDAyMjgwMEE4MDAwMDAzRkYwMjI4MDIyNDAwMDAwMDAwQkQKKzoxMDIwMDAwMDAyMjgwMjM0MDAwMDAwMDAwMjI4MDI0QzAwMDAwMDAwRjgKKzoxMDIwMTAwMDAyMjgwMkU0MDAwMEZGRkYwNjI4MjAwMDAwMDAwODAwNUMKKzoxMDIwMjAwMDAyMkI4QkMwMDAwMDAwMDEwMjJCODAwMDAwMDAwMDAwOEEKKzoxMDIwMzAwMDAyMkI4MDQwMDAwMDAwMTgwMjJCODA4MDAwMDAwMDBDNjIKKzoxMDIwNDAwMDAyMkI4MEMwMDAwMDAwNjYwQzJCODMwMDAwMDdBMTIwM0IKKzoxMDIwNTAwMDBBMkI4MzAwMDAwMDAxMzgwQjJCODMwMDAwMDAxMzg4M0IKKzoxMDIwNjAwMDAyMkI4M0MwMDAwMDAxRjQwQzJCODM0MDAwMDAwMUY0MUMKKzoxMDIwNzAwMDBBMkI4MzQwMDAwMDAwMDAwQjJCODM0MDAwMDAwMDA1NkEKKzoxMDIwODAwMDBBMkI4MzgwMDAwNEM0QjQwQzJCODM4MDFEQ0Q2NTAwMTMKKzoxMDIwOTAwMDBCMkI4MzgwMDA0QzRCNDAwNjJBM0M0MDAwMDAwMDA0ODAKKzoxMDIwQTAwMDA0MkEzQzUwMDAwMjAyRjgwNjJBMzAwMDAwMDAwMDQ4RDIKKzoxMDIwQjAwMDA2MkExMDIwMDAwMDAwQzgwNjJBMTAwMDAwMDAwMDAyQjYKKzoxMDIwQzAwMDA2MkEzMTI4MDAwMDAwOEUwMjJBMzM2ODAwMDAwMDAwMzIKKzoxMDIwRDAwMDA0MkEzMzcwMDAwMjAyRkEwNDJBM0E3MDAwMDQwMkZDNTcKKzoxMDIwRTAwMDA0MkEzRDAwMDAwMjAzMDAwNDJBMTUwMDAwMDIwMzAyMzYKKzoxMDIwRjAwMDA2MkExNTA4MDAwMDAxMDAwMjJBMTk3MDAwMDAwMDAwREQKKzoxMDIxMDAwMDAyMkExOTc4MDAwMDAwMDAwNDJBMTk2MDAwMDIwMzA0NjIKKzoxMDIxMTAwMDA2MkE0QUMwMDAwMDAwMDIwNjJBNEIwMDAwMDAwMDA0MDQKKzoxMDIxMjAwMDA0MkExRjQ4MDAwMjAzMDYwMjJCMDgwMDAwMDAwMDAwREEKKzoxMDIxMzAwMDA0MkIwQzAwMDAxMDAzMDgwMjJCMDgwMDAxMDAwMDAwMTMKKzoxMDIxNDAwMDA0MkIwQzQwMDAwODAzMTgwMjJCMDgwMDAyMDAwMDAwQkEKKzoxMDIxNTAwMDA0MkIwQzYwMDAwODAzMjAwNjJBM0E4MDAwMDAwMDE0QkIKKzoxMDIxNjAwMDA2MkEzQjIwMDAwMDAwMjQwNjJBMTQwMDAwMDAwMDBBNzIKKzoxMDIxNzAwMDA2MkExNDUwMDAwMDAwMDYwNjJBMzM3ODAwMDAwMEQ4MTIKKzoxMDIxODAwMDAyMkEzQTM4MDAwMDAwMDAwNDJBM0M1ODAwMDIwMzI4QzIKKzoxMDIxOTAwMDA0MkEzQzY4MDAxMDAzMkEwNjJBNTAyMDAwMDAwMDAyOEUKKzoxMDIxQTAwMDA2MkE1MDMwMDAwMDAwMDIwNjJBNTAwMDAwMDAwMDAyRkIKKzoxMDIxQjAwMDA2MkE1MDEwMDAwMDAwMDIwMjJBNTA0MDAwMDAwMDAwRDEKKzoxMDIxQzAwMDA2MkE1MDQ4MDAwMDAwMEUwMjJBNTBCODAwMDAwMDAxMDQKKzoxMDIxRDAwMDA0MkE0QUM4MDAwMjAzM0EwNjJBNEIxMDAwMDAwMDQyQjMKKzoxMDIxRTAwMDA2MkE0RDIwMDAwMDAwMDQwNjJBM0FEMDAwMDAwMDE0MDAKKzoxMDIxRjAwMDA2MkEzQkIwMDAwMDAwMjQwNjJBMTQyODAwMDAwMDBBMkEKKzoxMDIyMDAwMDA2MkExNDY4MDAwMDAwMDYwNjJBMzZEODAwMDAwMEQ4MDYKKzoxMDIyMTAwMDAyMkEzQTNDMDAwMDAwMDAwNDJBM0M2MDAwMDIwMzNDMTEKKzoxMDIyMjAwMDA0MkEzQ0E4MDAxMDAzM0UwNjJBNTAyODAwMDAwMDAyQTEKKzoxMDIyMzAwMDA2MkE1MDM4MDAwMDAwMDIwNjJBNTAwODAwMDAwMDAyNUEKKzoxMDIyNDAwMDA2MkE1MDE4MDAwMDAwMDIwMjJBNTA0NDAwMDAwMDAwMzQKKzoxMDIyNTAwMDA2MkE1MDgwMDAwMDAwMEUwMjJBNTBCQzAwMDAwMDAxMzcKKzoxMDIyNjAwMDA0MkE0QUQwMDAwMjAzNEUwNjJBNEMxODAwMDAwMDQyRkQKKzoxMDIyNzAwMDA2MkE0RDMwMDAwMDAwMDQwMjEwMTAwODAwMDAwMDAxODIKKzoxMDIyODAwMDAyMTAxMDEwMDAwMDAyNjQwMjEwMTAwMDAwMDNEMDAwQzEKKzoxMDIyOTAwMDAyMTAxMDA0MDAwMDAwM0QwOTEwMTgwMDAyMDAwMzUwNTUKKzoxMDIyQTAwMDA5MTAxMTAwMDAyMDA1NTAwNjEwMTE4MDAwMDAwMDAyRTYKKzoxMDIyQjAwMDA5MTAxMTg4MDAwNjA1NzAwNjEwMTFBMDAwMDAwMDE4MTIKKzoxMDIyQzAwMDAyMTAxMDEwMDAwMDAwMDAwNjEwMjQwMDAwMDAwMEUwQzIKKzoxMDIyRDAwMDAyMTAyMDFDMDAwMDAwMDAwMjEwMjAyMDAwMDAwMDAxNUQKKzoxMDIyRTAwMDAyMTAyMEMwMDAwMDAwMDEwMjEwMjAwNDAwMDAwMDAxQzQKKzoxMDIyRjAwMDAyMTAyMDA4MDAwMDAwMDEwOTEwM0MwMDAwMDUwNTc2Q0UKKzoxMDIzMDAwMDA5MTAzQzIwMDAwNTA1N0IwOTEwMzgwMDAwMDUwNTgwRjgKKzoxMDIzMTAwMDAyMTA0MDI4MDAwMDAwMTAwMjEwNDA0NDAwMDAzRkZGNUYKKzoxMDIzMjAwMDAyMTA0MDU4MDAyODAwMDAwMjEwNDA4NDAwODQ5MjRBQTUKKzoxMDIzMzAwMDAyMTA0MDU4MDAwMDAwMDAwNjEwODA2ODAwMDAwMDA0RjEKKzoxMDIzNDAwMDAyMTA4MDAwMDAwMDEwODAwNjEwODAyODAwMDAwMDAyQUIKKzoxMDIzNTAwMDAyMTA4MDM4MDAwMDAwMTAwMjEwODA0MDAwMDBGRkZGRDMKKzoxMDIzNjAwMDAyMTA4MDQ0MDAwMEZGRkYwMjEwODA1MDAwMDAwMDAwQjcKKzoxMDIzNzAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMTEKKzoxMDIzODAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNUEKKzoxMDIzOTAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQzEKKzoxMDIzQTAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMjgKKzoxMDIzQjAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNDIKKzoxMDIzQzAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBRjUKKzoxMDIzRDAwMDAyMTA4MDA0MDAwMDEwODAwNjEwODAzMDAwMDAwMDAyMEYKKzoxMDIzRTAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODA0ODAwMDBGRkZGMzcKKzoxMDIzRjAwMDAyMTA4MDRDMDAwMEZGRkYwMjEwODA1NDAwMDAwMDAwMUIKKzoxMDI0MDAwMDAyMTA4MTA0MDAwMDAwMDAwNjEwODEyODAwMDAwMDAyNzQKKzoxMDI0MTAwMDAyMTA4MDBDMDAwMDAyQjUwMjEwODAxNDAwMDAwMDAwQzEKKzoxMDI0MjAwMDA2MTA4NDAwMDAwMDAwNEEwMjEwODEwQzAwMDFGRkZGMkEKKzoxMDI0MzAwMDA2MTA4MTQ4MDAwMDAwMDIwMjEwODAwNDAwMDAxQTgwOEIKKzoxMDI0NDAwMDA2MTA5MDkwMDAwMDAwMjQwNjEwOTI0ODAwMDAwMDRBRjgKKzoxMDI0NTAwMDA2MTA5NDk4MDAwMDAwNEEwNjEwOTZFODAwMDAwMDRBMTIKKzoxMDI0NjAwMDAyMTIwNDkwMDBFMzgzNDAwMjEyMDUxNDAwMDAzQzEwQTUKKzoxMDI0NzAwMDAyMTIwNTIwMDAwMDAwMDIwMjEyMDQ5NEZGRkZGRkZGNzkKKzoxMDI0ODAwMDAyMTIwNDk4RkZGRkZGRkYwMjEyMDQ5Q0ZGRkZGRkZGRjAKKzoxMDI0OTAwMDAyMTIwNEEwRkZGRkZGRkYwMjEyMDRBNEZGRkZGRkZGRDAKKzoxMDI0QTAwMDAyMTIwNEE4RkZGRkZGRkYwMjEyMDRBQ0ZGRkZGRkZGQjAKKzoxMDI0QjAwMDAyMTIwNEIwRkZGRkZGRkYwMjEyMDRCOEZGRkZGRkZGOEMKKzoxMDI0QzAwMDAyMTIwNEJDRkZGRkZGRkYwMjEyMDRDMEZGRkZGRkZGNjgKKzoxMDI0RDAwMDAyMTIwNEM0RkZGRkZGRkYwMjEyMDRDOEZGRkZGRkZGNDgKKzoxMDI0RTAwMDAyMTIwNENDRkZGRkZGRkYwMjEyMDREMEZGRkZGRkZGMjgKKzoxMDI0RjAwMDAyMTIwNERDRkZGRkZGRkYwMjEyMDRFMEZGRkZGRkZGRjgKKzoxMDI1MDAwMDAyMTIwNEU0RkZGRkZGRkYwMjEyMDRFOEZGRkZGRkZGRDcKKzoxMDI1MTAwMDAyMTIwNEVDRkZGRkZGRkYwMjEyMDRGMEZGRkZGRkZGQjcKKzoxMDI1MjAwMDAyMTIwNEY0RkZGRkZGRkYwMjEyMDRGOEZGRkZGRkZGOTcKKzoxMDI1MzAwMDAyMTIwNEZDRkZGRkZGRkYwMjEyMDUwMEZGRkZGRkZGNzYKKzoxMDI1NDAwMDAyMTIwNTA0RkZGRkZGRkYwMjEyMDUwOEZGRkZGRkZGNTUKKzoxMDI1NTAwMDAyMTIwNTBDRkZGRkZGRkYwMjEyMDUxMEZGRkZGRkZGMzUKKzoxMDI1NjAwMDAyMTIwNEQ0RkZGRjMzMzAwMjEyMDREOEZGRkYzMzQwQkQKKzoxMDI1NzAwMDAyMTIwNEI0RjAwMDMwMDAwMjEyMDM5MDAwMDAwMDA4QzAKKzoxMDI1ODAwMDAyMTIwMzlDMDAwMDAwMDgwNjEyMDNBMDAwMDAwMDAyRDMKKzoxMDI1OTAwMDAyMTIwM0JDMDAwMDAwMDQwMjEyMDNDNDAwMDAwMDA0ODUKKzoxMDI1QTAwMDAyMTIwM0QwMDAwMDAwMDAwMjEyMDNEQzAwMDAwMDAwNTEKKzoxMDI1QjAwMDAyMTIwMzZDMDAwMDAwMDEwMjEyMDM2ODAwMDAwMDNGRDkKKzoxMDI1QzAwMDAyMTIwMUJDMDAwMDAwNDAwMjEyMDFDMDAwMDAxODA4MDUKKzoxMDI1RDAwMDAyMTIwMUM0MDAwMDA4MDMwMjEyMDFDODAwMDAwODAzMkYKKzoxMDI1RTAwMDAyMTIwMUNDMDAwMDAwNDAwMjEyMDFEMDAwMDAwMDAzRTIKKzoxMDI1RjAwMDAyMTIwMUQ0MDAwMDA4MDMwMjEyMDFEODAwMDAwODAzRUYKKzoxMDI2MDAwMDAyMTIwMURDMDAwMDA4MDMwMjEyMDFFMDAwMDEwMDAzRDUKKzoxMDI2MTAwMDAyMTIwMUU0MDAwMDA4MDMwMjEyMDFFODAwMDAwODAzQUUKKzoxMDI2MjAwMDAyMTIwMUVDMDAwMDAwMDMwMjEyMDFGMDAwMDAwMDAzOUUKKzoxMDI2MzAwMDAyMTIwMUY0MDAwMDAwMDMwMjEyMDFGODAwMDAwMDAzN0UKKzoxMDI2NDAwMDAyMTIwMUZDMDAwMDAwMDMwMjEyMDIwMDAwMDAwMDAzNUQKKzoxMDI2NTAwMDAyMTIwMjA0MDAwMDAwMDMwMjEyMDIwODAwMDAwMDAzM0MKKzoxMDI2NjAwMDAyMTIwMjBDMDAwMDAwMDMwMjEyMDIxMDAwMDAwMDAzMUMKKzoxMDI2NzAwMDAyMTIwMjE0MDAwMDAwMDMwMjEyMDIxODAwMDAwMDAzRkMKKzoxMDI2ODAwMDAyMTIwMjFDMDAwMDAwMDMwMjEyMDIyMDAwMDAwMDAzREMKKzoxMDI2OTAwMDAyMTIwMjI0MDAwMDAwMDMwMjEyMDIyODAwMDAyNDAzOTgKKzoxMDI2QTAwMDAyMTIwMjJDMDAwMDAwMkYwMjEyMDIzMDAwMDAwMDA5NkEKKzoxMDI2QjAwMDAyMTIwMjM0MDAwMDAwMTkwMjEyMDIzODAwMDAwMTg0RTQKKzoxMDI2QzAwMDAyMTIwMjNDMDAwMDAxODMwMjEyMDI0MDAwMDAwMzA2RDUKKzoxMDI2RDAwMDAyMTIwMjQ0MDAwMDAwMTkwMjEyMDI0ODAwMDAwMDA2MjMKKzoxMDI2RTAwMDAyMTIwMjRDMDAwMDAzMDYwMjEyMDI1MDAwMDAwMzA2MTAKKzoxMDI2RjAwMDAyMTIwMjU0MDAwMDAzMDYwMjEyMDI1ODAwMDAwQzg2NjcKKzoxMDI3MDAwMDAyMTIwMjVDMDAwMDAzMDYwMjEyMDI2MDAwMDAwMzA2Q0YKKzoxMDI3MTAwMDAyMTIwMjY0MDAwMDAwMDYwMjEyMDI2ODAwMDAwMDA2QjUKKzoxMDI3MjAwMDAyMTIwMjZDMDAwMDAwMDYwMjEyMDI3MDAwMDAwMDA2OTUKKzoxMDI3MzAwMDAyMTIwMjc0MDAwMDAwMDYwMjEyMDI3ODAwMDAwMDA2NzUKKzoxMDI3NDAwMDAyMTIwMjdDMDAwMDAwMDYwMjEyMDI4MDAwMDAwMDA2NTUKKzoxMDI3NTAwMDAyMTIwMjg0MDAwMDAwMDYwMjEyMDI4ODAwMDAwMDA2MzUKKzoxMDI3NjAwMDAyMTIwMjhDMDAwMDAwMDYwMjEyMDI5MDAwMDAwMDA2MTUKKzoxMDI3NzAwMDAyMTIwMjk0MDAwMDAwMDYwMjEyMDI5ODAwMDAwMDA2RjUKKzoxMDI3ODAwMDAyMTIwMjlDMDAwMDAwMDYwMjEyMDJBMDAwMDAwMzA2RDIKKzoxMDI3OTAwMDAyMTIwMkE0MDAwMDAwMTMwMjEyMDJBODAwMDAwMDA2QTgKKzoxMDI3QTAwMDAyMTIwMkIwMDAwMDEwMDQwMjEyMDJCNDAwMDAxMDA0NzEKKzoxMDI3QjAwMDAyMTIwMzI0MDAxMDY0NDAwMjEyMDMyODAwMTA2NDQwMzcKKzoxMDI3QzAwMDAyMTIwMUIwMDAwMDAwMDEwNjAwQTAwMDAwMDAwMDE2ODcKKzoxMDI3RDAwMDAyMDBBMDZDQkY1QzAwMDAwMjAwQTA3MEZGRjUxRkVGQkMKKzoxMDI3RTAwMDAyMDBBMDc0MDAwMEZGRkYwMjAwQTA3ODUwMDAwM0UwODgKKzoxMDI3RjAwMDAyMDBBMDdDMDAwMDAwMDAwMjAwQTA4MDAwMDBBMDAwRjkKKzoxMDI4MDAwMDA2MDBBMDg0MDAwMDAwMDUwMjAwQTA5ODBGRTAwMDAwNzAKKzoxMDI4MTAwMDA2MDBBMDlDMDAwMDAwMTQwMjAwQTBFQzU1NTQwMDAwMkIKKzoxMDI4MjAwMDAyMDBBMEYwNTU1NTU1NTUwMjAwQTBGNDAwMDA1NTU1ODIKKzoxMDI4MzAwMDAyMDBBMEY4MDAwMDAwMDAwMjAwQTBGQzU1NTQwMDAwQjcKKzoxMDI4NDAwMDAyMDBBMTAwNTU1NTU1NTUwMjAwQTEwNDAwMDA1NTU1NDAKKzoxMDI4NTAwMDAyMDBBMTA4MDAwMDAwMDAwMjAwQTIyQzAwMDAwMDAwRkQKKzoxMDI4NjAwMDA2MDBBMjMwMDAwMDAwMDMwMjAwQTA2MDAwMDAwMDA3ODQKKzoxMDI4NzAwMDAyMDBBMTBDQkY1QzAwMDAwMjAwQTExMEZGRjUxRkVGRDkKKzoxMDI4ODAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExODUwMDAwM0UwQTUKKzoxMDI4OTAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwMTYKKzoxMDI4QTAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwOEUKKzoxMDI4QjAwMDA2MDBBMTNDMDAwMDAwMTQwMjAwQTE4QzU1NTQwMDAwNDkKKzoxMDI4QzAwMDAyMDBBMTkwNTU1NTU1NTUwMjAwQTE5NDAwMDA1NTU1QTAKKzoxMDI4RDAwMDAyMDBBMTk4MDAwMDAwMDAwMjAwQTE5QzU1NTQwMDAwRDUKKzoxMDI4RTAwMDAyMDBBMUEwNTU1NTU1NTUwMjAwQTFBNDAwMDA1NTU1NjAKKzoxMDI4RjAwMDAyMDBBMUE4MDAwMDAwMDAwMjAwQTIzQzAwMDAwMDAwQUQKKzoxMDI5MDAwMDA2MDBBMjQwMDAwMDAwMDMwMjAwQTA2NDAwMDAwMDA3Q0YKKzoxMDI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRTAwMDAwMDAwODkKKzoxMDI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKKzoxMDI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKKzoxMDI5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKKzoxMDI5NzAwMDAwMkUwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMDI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKKzoxMDI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMDhENUEKKzoxMDI5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDI5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKKzoxMDI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDhEMDA5MjAwOTIwMDk2QzAKKzoxMDI5RDAwMDAwOTYwMDlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMDI5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKKzoxMDI5RjAwMDAwMDAwMDAwMDA5QTAwREIwMERCMDBFOTAwRTkwMEY3QkUKKzoxMDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKKzoxMDJBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKKzoxMDJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKKzoxMDJBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKKzoxMDJBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDJBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKKzoxMDJBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKKzoxMDJBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDJBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKKzoxMDJBRDAwMDAwRjcwMEZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKKzoxMDJBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKKzoxMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKKzoxMDJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKKzoxMDJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFMDEwMzAxMDMwMTBFOTAKKzoxMDJCMzAwMDAxMEUwMTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKKzoxMDJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKKzoxMDJCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKKzoxMDJCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDJCODAwMDAxMTkwMTFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDJCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMUEwMTUyQjcKKzoxMDJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUyMDE3NjAwMDAwMDAwMkIKKzoxMDJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKKzoxMDJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKKzoxMDJDMDAwMDAwMDAwMDAwMDE3NjAxQjUwMDAwMDAwMDAwMDAwMDAwOTcKKzoxMDJDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKKzoxMDJDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKKzoxMDJDMzAwMDAxQjUwMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKKzoxMDJDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKKzoxMDJDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRjAwMjM1NEMKKzoxMDJDNjAwMDAyMzUwMjM4MDIzODAyM0IwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDJDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDJDODAwMDAwMDAwMDAwMDAwMDAwMDAwMjNCMDI3NjAyNzYwMjgwOTUKKzoxMDJDOTAwMDAyODAwMjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDJDQjAwMDAwMDAwMDAwMDI4QTAyOEIwMDAwMDAwMDAwMDAwMDAwRkIKKzoxMDJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDJDRTAwMDAyOEIwMjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKKzoxMDJDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOUQwMkIyNzAKKzoxMDJEMTAwMDAyQjIwMkI1MDJCNTAyQjgwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDJEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDJEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMkI4MDJFNjAwMDAwMDAwRjEKKzoxMDJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKKzoxMDJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKKzoxMDJENjAwMDAwMDAwMDAwMDJFNjAzNkQwMDAwMDAwMDAwMDAwMDAwMEIKKzoxMDJENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDJEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDJEOTAwMDAzNkQwMzc0MDM3NDAzNzgwMzc4MDM3QzAwMDAwMDAwNjAKKzoxMDJEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN0MwM0JCRDYKKzoxMDJEQzAwMDAzQkIwM0MzMDNDMzAzQ0IwMDAwMDAwMDAwMDAwMDAwRUIKKzoxMDJERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJERTAwMDAwMDAwMDAwMDAwMDAwMDAwM0NCMDQxRjA0MUYwNDMxOUEKKzoxMDJERjAwMDA0MzEwNDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDJFMTAwMDAwMDAwMDAwMDQ0MzA0NEQwMDAwMDAwMDAwMDAwMDAwMUEKKzoxMDJFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDJFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKKzoxMDJFNDAwMDA0NEQwNDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMDJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDJFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NTMwNDU2QjEKKzoxMDJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDJFOTAwMDAwMDAwMDAwMDAwMDAwMDAwNDU2MDQ1QjAwMDAwMDAwNzkKKzoxMDJFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDJFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDJFQzAwMDAwMDAwMDAwMDQ1QjA0NUMwNDVDMDQ2RTA0NkUwNDgwN0IKKzoxMDJFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDJFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJFRjAwMDA0ODAwNEVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKKzoxMDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RUQwNEVFQ0UKKzoxMDJGMjAwMDA0RUUwNTAyMDUwMjA1MTYwMDAwMDAwMDAwMDAwMDAwODYKKzoxMDJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDJGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKKzoxMDJGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKKzoxMDJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKKzoxMDJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKKzoxMDJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKKzoxMDJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDIwNEMwNUEKKzoxMDJGQjAwMDAwMDMwOTgwMDAwNDBFNDAwMDA1MTMwMDAwMDYxN0MwM0UKKzoxMDJGQzAwMDAwMDcxQzgwMDAwODIxNDAwMDA5MjYwMDAwMEEyQUMwRDIKKzoxMDJGRDAwMDAwMEIyRjgwMDAwQzM0NDAwMDBEMzkwMDAwMEUzREMwNjYKKzoxMDJGRTAwMDAwMEY0MjgwMDAxMDQ3NDAwMDExNEMwMDAwMTI1MEMwRkEKKzoxMDJGRjAwMDAwMTM1NTgwMDAxNDVBNDAwMDE1NUYwMDAwMTY2M0MwOEUKKzoxMDMwMDAwMDAwMTc2ODgwMDAxODZENDAwMDE5NzIwMDAwMUE3NkMwMjEKKzoxMDMwMTAwMDAwMUI3QjgwMDAxQzgwNDAwMDFEODUwMDAwMUU4OUMwQjUKKzoxMDMwMjAwMDAwMUY4RTgwMDAyMDkzNDAwMDAwMjAwMDAwMDA0MDAwMjAKKzoxMDMwMzAwMDAwMDA2MDAwMDAwMDgwMDAwMDAwQTAwMDAwMDBDMDAwNTAKKzoxMDMwNDAwMDAwMDBFMDAwMDAwMTAwMDAwMDAxMjAwMDAwMDE0MDAwM0QKKzoxMDMwNTAwMDAwMDE2MDAwMDAwMTgwMDAwMDAxQTAwMDAwMDFDMDAwMkMKKzoxMDMwNjAwMDAwMDFFMDAwMDAwMjAwMDAwMDAyMjAwMDAwMDI0MDAwMTkKKzoxMDMwNzAwMDAwMDI2MDAwMDAwMjgwMDAwMDAyQTAwMDAwMDJDMDAwMDgKKzoxMDMwODAwMDAwMDJFMDAwMDAwMzAwMDAwMDAzMjAwMDAwMDM0MDAwRjUKKzoxMDMwOTAwMDAwMDM2MDAwMDAwMzgwMDAwMDAzQTAwMDAwMDNDMDAwRTQKKzoxMDMwQTAwMDAwMDNFMDAwMDAwNDAwMDAwMDA0MjAwMDAwMDQ0MDAwRDEKKzoxMDMwQjAwMDAwMDQ2MDAwMDAwNDgwMDAwMDA0QTAwMDAwMDRDMDAwQzAKKzoxMDMwQzAwMDAwMDRFMDAwMDAwNTAwMDAwMDA1MjAwMDAwMDU0MDAwQUQKKzoxMDMwRDAwMDAwMDU2MDAwMDAwNTgwMDAwMDA1QTAwMDAwMDVDMDAwOUMKKzoxMDMwRTAwMDAwMDVFMDAwMDAwNjAwMDAwMDA2MjAwMDAwMDY0MDAwODkKKzoxMDMwRjAwMDAwMDY2MDAwMDAwNjgwMDAwMDA2QTAwMDAwMDZDMDAwNzgKKzoxMDMxMDAwMDAwMDZFMDAwMDAwNzAwMDAwMDA3MjAwMDAwMDc0MDAwNjQKKzoxMDMxMTAwMDAwMDc2MDAwMDAwNzgwMDAwMDA3QTAwMDAwMDdDMDAwNTMKKzoxMDMxMjAwMDAwMDdFMDAwMDAwODAwMDAwMDA4MjAwMDAwMDg0MDAwNDAKKzoxMDMxMzAwMDAwMDg2MDAwMDAwODgwMDAwMDA4QTAwMDAwMDhDMDAwMkYKKzoxMDMxNDAwMDAwMDhFMDAwMDAwOTAwMDAwMDA5MjAwMDAwMDk0MDAwMUMKKzoxMDMxNTAwMDAwMDk2MDAwMDAwOTgwMDAwMDA5QTAwMDAwMDlDMDAwMEIKKzoxMDMxNjAwMDAwMDlFMDAwMDAwQTAwMDAwMDBBMjAwMDAwMEE0MDAwRjgKKzoxMDMxNzAwMDAwMEE2MDAwMDAwQTgwMDAwMDBBQTAwMDAwMEFDMDAwRTcKKzoxMDMxODAwMDAwMEFFMDAwMDAwQjAwMDAwMDBCMjAwMDAwMEI0MDAwRDQKKzoxMDMxOTAwMDAwMEI2MDAwMDAwQjgwMDAwMDBCQTAwMDAwMEJDMDAwQzMKKzoxMDMxQTAwMDAwMEJFMDAwMDAwQzAwMDAwMDBDMjAwMDAwMEM0MDAwQjAKKzoxMDMxQjAwMDAwMEM2MDAwMDAwQzgwMDAwMDBDQTAwMDAwMENDMDAwOUYKKzoxMDMxQzAwMDAwMENFMDAwMDAwRDAwMDAwMDBEMjAwMDAwMEQ0MDAwOEMKKzoxMDMxRDAwMDAwMEQ2MDAwMDAwRDgwMDAwMDBEQTAwMDAwMERDMDAwN0IKKzoxMDMxRTAwMDAwMERFMDAwMDAwRTAwMDAwMDBFMjAwMDAwMEU0MDAwNjgKKzoxMDMxRjAwMDAwMEU2MDAwMDAwRTgwMDAwMDBFQTAwMDAwMEVDMDAwNTcKKzoxMDMyMDAwMDAwMEVFMDAwMDAwRjAwMDAwMDBGMjAwMDAwMEY0MDAwNDMKKzoxMDMyMTAwMDAwMEY2MDAwMDAwRjgwMDAwMDBGQTAwMDAwMEZDMDAwMzIKKzoxMDMyMjAwMDAwMEZFMDAwMDAxMDAwMDAwMDEwMjAwMDAwMTA0MDAwMUYKKzoxMDMyMzAwMDAwMTA2MDAwMDAxMDgwMDAwMDEwQTAwMDAwMTBDMDAwMEUKKzoxMDMyNDAwMDAwMTBFMDAwMDAxMTAwMDAwMDExMjAwMDAwMTE0MDAwRkIKKzoxMDMyNTAwMDAwMTE2MDAwMDAxMTgwMDAwMDExQTAwMDAwMTFDMDAwRUEKKzoxMDMyNjAwMDAwMTFFMDAwMDAxMjAwMDAwMDEyMjAwMDAwMTI0MDAwRDcKKzoxMDMyNzAwMDAwMTI2MDAwMDAxMjgwMDAwMDEyQTAwMDAwMTJDMDAwQzYKKzoxMDMyODAwMDAwMTJFMDAwMDAxMzAwMDAwMDEzMjAwMDAwMTM0MDAwQjMKKzoxMDMyOTAwMDAwMTM2MDAwMDAxMzgwMDAwMDEzQTAwMDAwMTNDMDAwQTIKKzoxMDMyQTAwMDAwMTNFMDAwMDAxNDAwMDAwMDE0MjAwMDAwMTQ0MDAwOEYKKzoxMDMyQjAwMDAwMTQ2MDAwMDAxNDgwMDAwMDE0QTAwMDAwMTRDMDAwN0UKKzoxMDMyQzAwMDAwMTRFMDAwMDAxNTAwMDAwMDE1MjAwMDAwMTU0MDAwNkIKKzoxMDMyRDAwMDAwMTU2MDAwMDAxNTgwMDAwMDE1QTAwMDAwMTVDMDAwNUEKKzoxMDMyRTAwMDAwMTVFMDAwMDAxNjAwMDAwMDE2MjAwMDAwMTY0MDAwNDcKKzoxMDMyRjAwMDAwMTY2MDAwMDAxNjgwMDAwMDE2QTAwMDAwMTZDMDAwMzYKKzoxMDMzMDAwMDAwMTZFMDAwMDAxNzAwMDAwMDE3MjAwMDAwMTc0MDAwMjIKKzoxMDMzMTAwMDAwMTc2MDAwMDAxNzgwMDAwMDE3QTAwMDAwMTdDMDAwMTEKKzoxMDMzMjAwMDAwMTdFMDAwMDAxODAwMDAwMDE4MjAwMDAwMTg0MDAwRkUKKzoxMDMzMzAwMDAwMTg2MDAwMDAxODgwMDAwMDE4QTAwMDAwMThDMDAwRUQKKzoxMDMzNDAwMDAwMThFMDAwMDAxOTAwMDAwMDE5MjAwMDAwMTk0MDAwREEKKzoxMDMzNTAwMDAwMTk2MDAwMDAxOTgwMDAwMDE5QTAwMDAwMTlDMDAwQzkKKzoxMDMzNjAwMDAwMTlFMDAwMDAxQTAwMDAwMDFBMjAwMDAwMUE0MDAwQjYKKzoxMDMzNzAwMDAwMUE2MDAwMDAxQTgwMDAwMDFBQTAwMDAwMUFDMDAwQTUKKzoxMDMzODAwMDAwMUFFMDAwMDAxQjAwMDAwMDFCMjAwMDAwMUI0MDAwOTIKKzoxMDMzOTAwMDAwMUI2MDAwMDAxQjgwMDAwMDFCQTAwMDAwMUJDMDAwODEKKzoxMDMzQTAwMDAwMUJFMDAwMDAxQzAwMDAwMDFDMjAwMDAwMUM0MDAwNkUKKzoxMDMzQjAwMDAwMUM2MDAwMDAxQzgwMDAwMDFDQTAwMDAwMUNDMDAwNUQKKzoxMDMzQzAwMDAwMUNFMDAwMDAxRDAwMDAwMDFEMjAwMDAwMUQ0MDAwNEEKKzoxMDMzRDAwMDAwMUQ2MDAwMDAxRDgwMDAwMDFEQTAwMDAwMURDMDAwMzkKKzoxMDMzRTAwMDAwMURFMDAwMDAxRTAwMDAwMDFFMjAwMDAwMUU0MDAwMjYKKzoxMDMzRjAwMDAwMUU2MDAwMDAxRTgwMDAwMDFFQTAwMDAwMUVDMDAwMTUKKzoxMDM0MDAwMDAwMUVFMDAwMDAxRjAwMDAwMDFGMjAwMDAwMUY0MDAwMDEKKzoxMDM0MTAwMDAwMUY2MDAwMDAxRjgwMDAwMDFGQTAwMDAwMUZDMDAwRjAKKzoxMDM0MjAwMDAwMUZFMDAwMDAyMDAwMDAwMDIwMjAwMDAwMjA0MDAwREQKKzoxMDM0MzAwMDAwMjA2MDAwMDAyMDgwMDAwMDIwQTAwMDAwMjBDMDAwQ0MKKzoxMDM0NDAwMDAwMjBFMDAwMDAyMTAwMDAwMDIxMjAwMDAwMjE0MDAwQjkKKzoxMDM0NTAwMDAwMjE2MDAwMDAyMTgwMDAwMDIxQTAwMDAwMjFDMDAwQTgKKzoxMDM0NjAwMDAwMjFFMDAwMDAyMjAwMDAwMDIyMjAwMDAwMjI0MDAwOTUKKzoxMDM0NzAwMDAwMjI2MDAwMDAyMjgwMDAwMDIyQTAwMDAwMjJDMDAwODQKKzoxMDM0ODAwMDAwMjJFMDAwMDAyMzAwMDAwMDIzMjAwMDAwMjM0MDAwNzEKKzoxMDM0OTAwMDAwMjM2MDAwMDAyMzgwMDAwMDIzQTAwMDAwMjNDMDAwNjAKKzoxMDM0QTAwMDAwMjNFMDAwMDAyNDAwMDAwMDI0MjAwMDAwMjQ0MDAwNEQKKzoxMDM0QjAwMDAwMjQ2MDAwMDAyNDgwMDAwMDI0QTAwMDAwMjRDMDAwM0MKKzoxMDM0QzAwMDAwMjRFMDAwMDAyNTAwMDAwMDI1MjAwMDAwMjU0MDAwMjkKKzoxMDM0RDAwMDAwMjU2MDAwMDAyNTgwMDAwMDI1QTAwMDAwMjVDMDAwMTgKKzoxMDM0RTAwMDAwMjVFMDAwMDAyNjAwMDAwMDI2MjAwMDAwMjY0MDAwMDUKKzoxMDM0RjAwMDAwMjY2MDAwMDAyNjgwMDAwMDI2QTAwMDAwMjZDMDAwRjQKKzoxMDM1MDAwMDAwMjZFMDAwMDAyNzAwMDAwMDI3MjAwMDAwMjc0MDAwRTAKKzoxMDM1MTAwMDAwMjc2MDAwMDAyNzgwMDAwMDI3QTAwMDAwMjdDMDAwQ0YKKzoxMDM1MjAwMDAwMjdFMDAwMDAyODAwMDAwMDI4MjAwMDAwMjg0MDAwQkMKKzoxMDM1MzAwMDAwMjg2MDAwMDAyODgwMDAwMDI4QTAwMDAwMjhDMDAwQUIKKzoxMDM1NDAwMDAwMjhFMDAwMDAyOTAwMDAwMDI5MjAwMDAwMjk0MDAwOTgKKzoxMDM1NTAwMDAwMjk2MDAwMDAyOTgwMDAwMDI5QTAwMDAwMjlDMDAwODcKKzoxMDM1NjAwMDAwMjlFMDAwMDAyQTAwMDAwMDJBMjAwMDAwMkE0MDAwNzQKKzoxMDM1NzAwMDAwMkE2MDAwMDAyQTgwMDAwMDJBQTAwMDAwMkFDMDAwNjMKKzoxMDM1ODAwMDAwMkFFMDAwMDAyQjAwMDAwMDJCMjAwMDAwMkI0MDAwNTAKKzoxMDM1OTAwMDAwMkI2MDAwMDAyQjgwMDAwMDJCQTAwMDAwMkJDMDAwM0YKKzoxMDM1QTAwMDAwMkJFMDAwMDAyQzAwMDAwMDJDMjAwMDAwMkM0MDAwMkMKKzoxMDM1QjAwMDAwMkM2MDAwMDAyQzgwMDAwMDJDQTAwMDAwMkNDMDAwMUIKKzoxMDM1QzAwMDAwMkNFMDAwMDAyRDAwMDAwMDJEMjAwMDAwMkQ0MDAwMDgKKzoxMDM1RDAwMDAwMkQ2MDAwMDAyRDgwMDAwMDJEQTAwMDAwMkRDMDAwRjcKKzoxMDM1RTAwMDAwMkRFMDAwMDAyRTAwMDAwMDJFMjAwMDAwMkU0MDAwRTQKKzoxMDM1RjAwMDAwMkU2MDAwMDAyRTgwMDAwMDJFQTAwMDAwMkVDMDAwRDMKKzoxMDM2MDAwMDAwMkVFMDAwMDAyRjAwMDAwMDJGMjAwMDAwMkY0MDAwQkYKKzoxMDM2MTAwMDAwMkY2MDAwMDAyRjgwMDAwMDJGQTAwMDAwMkZDMDAwQUUKKzoxMDM2MjAwMDAwMkZFMDAwMDAzMDAwMDAwMDMwMjAwMDAwMzA0MDAwOUIKKzoxMDM2MzAwMDAwMzA2MDAwMDAzMDgwMDAwMDMwQTAwMDAwMzBDMDAwOEEKKzoxMDM2NDAwMDAwMzBFMDAwMDAzMTAwMDAwMDMxMjAwMDAwMzE0MDAwNzcKKzoxMDM2NTAwMDAwMzE2MDAwMDAzMTgwMDAwMDMxQTAwMDAwMzFDMDAwNjYKKzoxMDM2NjAwMDAwMzFFMDAwMDAzMjAwMDAwMDMyMjAwMDAwMzI0MDAwNTMKKzoxMDM2NzAwMDAwMzI2MDAwMDAzMjgwMDAwMDMyQTAwMDAwMzJDMDAwNDIKKzoxMDM2ODAwMDAwMzJFMDAwMDAzMzAwMDAwMDMzMjAwMDAwMzM0MDAwMkYKKzoxMDM2OTAwMDAwMzM2MDAwMDAzMzgwMDAwMDMzQTAwMDAwMzNDMDAwMUUKKzoxMDM2QTAwMDAwMzNFMDAwMDAzNDAwMDAwMDM0MjAwMDAwMzQ0MDAwMEIKKzoxMDM2QjAwMDAwMzQ2MDAwMDAzNDgwMDAwMDM0QTAwMDAwMzRDMDAwRkEKKzoxMDM2QzAwMDAwMzRFMDAwMDAzNTAwMDAwMDM1MjAwMDAwMzU0MDAwRTcKKzoxMDM2RDAwMDAwMzU2MDAwMDAzNTgwMDAwMDM1QTAwMDAwMzVDMDAwRDYKKzoxMDM2RTAwMDAwMzVFMDAwMDAzNjAwMDAwMDM2MjAwMDAwMzY0MDAwQzMKKzoxMDM2RjAwMDAwMzY2MDAwMDAzNjgwMDAwMDM2QTAwMDAwMzZDMDAwQjIKKzoxMDM3MDAwMDAwMzZFMDAwMDAzNzAwMDAwMDM3MjAwMDAwMzc0MDAwOUUKKzoxMDM3MTAwMDAwMzc2MDAwMDAzNzgwMDAwMDM3QTAwMDAwMzdDMDAwOEQKKzoxMDM3MjAwMDAwMzdFMDAwMDAzODAwMDAwMDM4MjAwMDAwMzg0MDAwN0EKKzoxMDM3MzAwMDAwMzg2MDAwMDAzODgwMDAwMDM4QTAwMDAwMzhDMDAwNjkKKzoxMDM3NDAwMDAwMzhFMDAwMDAzOTAwMDAwMDM5MjAwMDAwMzk0MDAwNTYKKzoxMDM3NTAwMDAwMzk2MDAwMDAzOTgwMDAwMDM5QTAwMDAwMzlDMDAwNDUKKzoxMDM3NjAwMDAwMzlFMDAwMDAzQTAwMDAwMDNBMjAwMDAwM0E0MDAwMzIKKzoxMDM3NzAwMDAwM0E2MDAwMDAzQTgwMDAwMDNBQTAwMDAwM0FDMDAwMjEKKzoxMDM3ODAwMDAwM0FFMDAwMDAzQjAwMDAwMDNCMjAwMDAwM0I0MDAwMEUKKzoxMDM3OTAwMDAwM0I2MDAwMDAzQjgwMDAwMDNCQTAwMDAwM0JDMDAwRkQKKzoxMDM3QTAwMDAwM0JFMDAwMDAzQzAwMDAwMDNDMjAwMDAwM0M0MDAwRUEKKzoxMDM3QjAwMDAwM0M2MDAwMDAzQzgwMDAwMDNDQTAwMDAwM0NDMDAwRDkKKzoxMDM3QzAwMDAwM0NFMDAwMDAzRDAwMDAwMDNEMjAwMDAwM0Q0MDAwQzYKKzoxMDM3RDAwMDAwM0Q2MDAwMDAzRDgwMDAwMDNEQTAwMDAwM0RDMDAwQjUKKzoxMDM3RTAwMDAwM0RFMDAwMDAzRTAwMDAwMDNFMjAwMDAwM0U0MDAwQTIKKzoxMDM3RjAwMDAwM0U2MDAwMDAzRTgwMDAwMDNFQTAwMDAwM0VDMDAwOTEKKzoxMDM4MDAwMDAwM0VFMDAwMDAzRjAwMDAwMDNGMjAwMDAwM0Y0MDAwN0QKKzoxMDM4MTAwMDAwM0Y2MDAwMDAzRjgwMDAwMDNGQTAwMDAwM0ZDMDAwNkMKKzoxMDM4MjAwMDAwM0ZFMDAwMDAzRkUwMDEwMDAwMDAwMDAwMDAwMUZGNTkKKzoxMDM4MzAwMDAwMDAwMjAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMjZGMjcKKzoxMDM4NDAwMDAwMDAxNTAwMDAwMDAwMDEwMDAwMDAwMzAwQkVCQzIwQzUKKzoxMDM4NTAwMDAwMDAwMDAzMDBCRUJDMjAwMDAwMDAwMUZGRkZGRkZGQ0UKKzoxMDM4NjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNjgKKzoxMDM4NzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNTgKKzoxMDM4ODAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGNDAKKzoxMDM4OTAwMDAwMDAwMDAzMDBCRUJDMjBGRkZGRkZGRjAwMDAwMDAwOEYKKzoxMDM4QTAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAzMUQKKzoxMDM4QjAwMDAwQkVCQzIwMDAwMDIwMDAwMDAwNDBDMDAwMDA2MTgwNkQKKzoxMDM4QzAwMDAwMDA4MjQwMDAwMEEzMDAwMDAwQzNDMDAwMDBFNDgwQUMKKzoxMDM4RDAwMDAwMDEwNTQwMDAwMTI2MDAwMDAxNDZDMDAwMDE2NzgwOEMKKzoxMDM4RTAwMDAwMDE4ODQwMDAwMUE5MDAwMDAxQzlDMDAwMDFFQTgwNzAKKzoxMDM4RjAwMDAwMDIwQjQwMDAwMjJDMDAwMDAyNENDMDAwMDI2RDgwNTAKKzoxMDM5MDAwMDAwMDI4RTQwMDAwMkFGMDAwMDAyQ0ZDMDAwMDJGMDgwMzMKKzoxMDM5MTAwMDAwMDMxMTQwMDAwMzMyMDAwMDAzNTJDMDAwMDM3MzgwMTMKKzoxMDM5MjAwMDAwMDM5NDQwMDAwM0I1MDAwMDAzRDVDMDAwMDNGNjgwRjcKKzoxMDM5MzAwMDAwMDQxNzQwMDAwNDM4MDAwMDA0NThDMDAwMDQ3OTgwRDcKKzoxMDM5NDAwMDAwMDQ5QTQwMDAwMDgwMDAwMDAxMDM4MDAwMDE4NzAwMEQKKzoxMDM5NTAwMDAwMDIwQTgwMDAwMjhFMDAwMDAzMTE4MDAwMDM5NTAwMUYKKzoxMDM5NjAwMDAwMDQxODgwMDAwNDlDMDAwMDA1MUY4MDAwMDVBMzAwQ0YKKzoxMDM5NzAwMDAwMDYyNjgwMDAwNkFBMDAwMDA3MkQ4MDAwMDdCMTAwN0YKKzoxMDM5ODAwMDAwMDgzNDgwMDAwOEI4MDAwMDA5M0I4MDAwMDlCRjAwMkYKKzoxMDM5OTAwMDAwMEE0MjgwMDAwQUM2MDAwMDBCNDk4MDAwMEJDRDAwREYKKzoxMDM5QTAwMDAwMEM1MDgwMDAwQ0Q0MDAwMDBENTc4MDAwMEREQjAwOEYKKzoxMDM5QjAwMDAwMDA3RkY4MDAwMDdGRjgwMDAwMDE3NDAwMDAxNTAwOEYKKzoxMDM5QzAwMDAwMDAxOTAwMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwQTIKKzoxMDM5RDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRTcKKzoxMDM5RTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRDcKKzoxMDM5RjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQzcKKzoxMDNBMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQjYKKzoxMDNBMTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQTYKKzoxMDNBMjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwOTYKKzoxMDNBMzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwODYKKzoxMDNBNDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMDA3RkY4M0YKKzoxMDNBNTAwMDAwMDA3RkY4MDAwMDA1MDkwMDAwMzUwMEZGRkZGRkZGQjAKKzoxMDNBNjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNjYKKzoxMDNBNzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQwMDAwMDAwMTIKKzoxMDNBODAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMzYKKzoxMDNBOTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMjYKKzoxMDNBQTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMTYKKzoxMDNBQjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDYKKzoxMDNBQzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRjYKKzoxMDNBRDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRTYKKzoxMDNBRTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRDYKKzoxMDNBRjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMDAxMDAwRjYKKzoxMDNCMDAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDAwMDA1MjAwRDEKKzoxMDNCMTAwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDAwMDA5NDAwQjkKKzoxMDNCMjAwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDAwMDBENjAwQTEKKzoxMDNCMzAwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDAwMDExODAwODcKKzoxMDNCNDAwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDAwMDE1QTAwNkQKKzoxMDNCNTAwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDAwMDE5QzAwNTUKKzoxMDNCNjAwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDAwMDFERTAwM0QKKzoxMDNCNzAwMDAwMDFFRTgwMDAwMUZGMDAwMDAwN0ZGODAwMDA3RkY4RTgKKzoxMDNCODAwMDAwMDAwNDQ4MDAwMDE1MDAxMDAwMDAwMDAwMDAyOEFERUYKKzoxMDNCOTAwMDAwMDAwMDAwMDAwMTAwMDEwMDE1MDAwNUNDQ0NDQ0MxRTQKKzoxMDNCQTAwMEZGRkZGRkZGRkZGRkZGRkY3MDU4MTAzQzAwMDAwMDAwMDkKKzoxMDNCQjAwMDAwMDAwMDAwMDAwMDAwMDFDQ0NDMDIwMUNDQ0NDQ0NDMzkKKzoxMDNCQzAwMDAwMDAwMDAwRkZGRkZGRkY0MDAwMDAwMDQwMDAwMDAwNzkKKzoxMDNCRDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRTUKKzoxMDNCRTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRDUKKzoxMDNCRjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQzUKKzoxMDNDMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQjQKKzoxMDNDMTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQTQKKzoxMDNDMjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwOTQKKzoxMDNDMzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwODQKKzoxMDNDNDAwMDQwMDAwMDAwNDAwMDAwMDAwMDBFMDFCNzAxMTYwMEQ2NDEKKzoxMDNDNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNjgKKzoxMDNDNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTgKKzoxMDNDNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDgKKzoxMDNDODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzgKKzoxMDNDOTAwMDAwMTAwMDAwMDAwMDAwMDAwMDcyMDFCQjAxMjMwMEYzQ0YKKzoxMDNDQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTgKKzoxMDNDQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDgKKzoxMDNDQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjgKKzoxMDNDRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTgKKzoxMDNDRTAwMDAwMTAwMDAwMDAwMDAwMDBGRkZGRkZGMzMxOEZGRkZGMTYKKzoxMDNDRjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDgKKzoxMDNEMDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGNjkKKzoxMDNEMTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTcKKzoxMDNEMjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRDMKKzoxMDNEMzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQzcKKzoxMDNENDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGNjEKKzoxMDNENTAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzOTkKKzoxMDNENjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQTQKKzoxMDNENzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODcKKzoxMDNEODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGOTgKKzoxMDNEOTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNjcKKzoxMDNEQTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGQjIKKzoxMDNEQjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNDcKKzoxMDNEQzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGNDUKKzoxMDNERDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjcKKzoxMDNERTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxMEZGRkZGMjYKKzoxMDNERjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDcKKzoxMDNFMDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGNDcKKzoxMDNFMTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTYKKzoxMDNFMjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRDIKKzoxMDNFMzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQzYKKzoxMDNFNDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGNjAKKzoxMDNFNTAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzOTgKKzoxMDNFNjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQTMKKzoxMDNFNzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODYKKzoxMDNFODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGOTcKKzoxMDNFOTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNjYKKzoxMDNFQTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGQjIKKzoxMDNFQjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNDYKKzoxMDNFQzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGMjQKKzoxMDNFRDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjYKKzoxMDNFRTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxRUZGRkZGNDUKKzoxMDNFRjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDYKKzoxMDNGMDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGNDYKKzoxMDNGMTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTUKKzoxMDNGMjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRDEKKzoxMDNGMzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQzUKKzoxMDNGNDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGNUYKKzoxMDNGNTAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzOTcKKzoxMDNGNjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQTIKKzoxMDNGNzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODUKKzoxMDNGODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGOTYKKzoxMDNGOTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNjUKKzoxMDNGQTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA1NkZGRkZGQkMKKzoxMDNGQjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzNzgKKzoxMDNGQzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGNjIKKzoxMDNGRDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjUKKzoxMDNGRTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGMjMKKzoxMDNGRjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDUKKzoxMDQwMDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGNDUKKzoxMDQwMTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTQKKzoxMDQwMjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRDAKKzoxMDQwMzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQzQKKzoxMDQwNDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGNUUKKzoxMDQwNTAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzOTYKKzoxMDQwNjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQTEKKzoxMDQwNzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODQKKzoxMDQwODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGMzEKKzoxMDQwOTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzOTcKKzoxMDQwQTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGNUIKKzoxMDQwQjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzNzcKKzoxMDQwQzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGNjEKKzoxMDQwRDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjQKKzoxMDQwRTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMwMEZGRkZGMjQKKzoxMDQwRjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDQKKzoxMDQxMDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwMEZGRkZGNDUKKzoxMDQxMTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTMKKzoxMDQxMjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGQ0YKKzoxMDQxMzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQzMKKzoxMDQxNDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGNUQKKzoxMDQxNTAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzOTUKKzoxMDQxNjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQTAKKzoxMDQxNzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODMKKzoxMDQxODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGOTQKKzoxMDQxOTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNjMKKzoxMDQxQTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA0MEZGRkZGMUIKKzoxMDQxQjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzNzYKKzoxMDQxQzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwMEZGRkZGNjEKKzoxMDQxRDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjMKKzoxMDQxRTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTcKKzoxMDQxRjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMzcKKzoxMDQyMDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzYKKzoxMDQyMTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMTYKKzoxMDQyMjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTUKKzoxMDQyMzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRjYKKzoxMDQyNDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMzQKKzoxMDQyNTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRDYKKzoxMDQyNjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMTIKKzoxMDQyNzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQjYKKzoxMDQyODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRUUKKzoxMDQyOTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOTYKKzoxMDQyQTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQzYKKzoxMDQyQjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNzYKKzoxMDQyQzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOTYKKzoxMDQyRDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNTYKKzoxMDQyRTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTYKKzoxMDQyRjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMzYKKzoxMDQzMDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzUKKzoxMDQzMTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMTUKKzoxMDQzMjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTQKKzoxMDQzMzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRjUKKzoxMDQzNDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMzMKKzoxMDQzNTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRDUKKzoxMDQzNjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMTEKKzoxMDQzNzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQjUKKzoxMDQzODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRUQKKzoxMDQzOTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOTUKKzoxMDQzQTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQzUKKzoxMDQzQjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNzUKKzoxMDQzQzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOTUKKzoxMDQzRDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNTUKKzoxMDQzRTAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTUKKzoxMDQzRjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMzUKKzoxMDQ0MDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzQKKzoxMDQ0MTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMTQKKzoxMDQ0MjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTMKKzoxMDQ0MzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRjQKKzoxMDQ0NDAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMzIKKzoxMDQ0NTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRDQKKzoxMDQ0NjAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMTAKKzoxMDQ0NzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQjQKKzoxMDQ0ODAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRUMKKzoxMDQ0OTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOTQKKzoxMDQ0QTAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQzQKKzoxMDQ0QjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNzQKKzoxMDQ0QzAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOTQKKzoxMDQ0RDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNTQKKzoxMDQ0RTAwMDAwNDBDRjNDQ0RDRENEQ0QwMDBDMDAwMDAwMDcwMEMwN0EKKzoxMDQ0RjAwMDAwMDI4MTMwMDAwQjgxNTgwMDAyMDIxMDAwMDEwMjMwREUKKzoxMDQ1MDAwMDAwMEYwMjQwMDAwMTAzMzAwMDA4MDAwMDAwMDgwMDgwOTYKKzoxMDQ1MTAwMDAwMDI4MTAwMDAwQjgxMjgwMDAyMDFFMDAwMDEwMjAwN0UKKzoxMDQ1MjAwMDAwMDcwMjEwMDAwMjAyODAwMDBGMDAwMDAwMDgwMEYwRTcKKzoxMDQ1MzAwMDAwMDI4MTcwMDAwQjgxOTgwMDAyMDI1MDAwMDEwMjcwOUQKKzoxMDQ1NDAwMDAwMEI4MjgwMDAwODAzMzgwMDEwMDAwMDAwMDgwMTAwMDIKKzoxMDQ1NTAwMDAwMDI4MTgwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwQkQKKzoxMDQ1NjAwMDAwMEU4Mjk4MDAwODAzODAwMDAyODAwMDAwMEI4MDI4NjMKKzoxMDQ1NzAwMDAwMDIwMEUwMDAwMTAxMDAwMDAwODExMDAwMDAwMTE4QUQKKzoxMDQ1ODAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDNkIKKzoxMDQ1OTAwMDAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDNkIKKzoxMDQ1QTAwMENDQ0NDQ0NDMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDNUIKKzoxMDQ1QjAwMENDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMDAwMDAwMDAwN0IKKzoxMDQ1QzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzNjAKKzoxMDQ1RDAwMDhBN0JEODE4MTgzNjcwMjBGODQzMDE1RjY0NjI2MEI4OEYKKzoxMDQ1RTAwMDBDQzQ1NzgxNTg4MDk5ODEyMTk4OTE4MTIxODQ5MTc4QjgKKzoxMDQ1RjAwMEZENDlBMjA4RjYyQjIxMDYwNjMxNjEwNjg2Njg0MUEwMTYKKzoxMDQ2MDAwMEI5QzIwOEYxQTM0MDM1NTYyMjBDMEM3RkExNjI4RDQwM0YKKzoxMDQ2MTAwMDM2OUIyODc1REMzRkQwNzg5MzE0QTZEODdBMDkwNDdCQTIKKzoxMDQ2MjAwMDMzMTY3OTY0QkMwNTREOUU0RjEyOTVCRjk1ODBGRTgxNkYKKzoxMDQ2MzAwMEM2OEYxNTUxRjk2MjBBMTAzQTFGMkFGRTA0NEQ1RTFDRkUKKzoxMDQ2NDAwMDJBN0YxOUVBQUZBNzhBRDhDREJEMDI5NTA3MDBDOEU5MkQKKzoxMDQ2NTAwMDY3NDQ2MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKKzoxMDQ2NjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBCNzg1NEQ1NzcKKzoxMDQ2NzAwMEI1RjAzRTczQ0U5Qzk5NDk2NjI2MjcyMTRGMUU2MTEyRTQKKzoxMDQ2ODAwMDIwODI4NjM4QkMwMjI4QkQ0RTA4NDRBQzVDMERGODQyM0UKKzoxMDQ2OTAwMDhCM0FCQzQzREU1MEI0QjRCNTVGMjYxMDIyNEY2RkYwQTYKKzoxMDQ2QTAwMDQ3NDUyRkQ4RTE2MTQ1OEIzNjYwQTREMTAyMUQ0MDEwRUIKKzoxMDQ2QjAwMDdCQkRCN0MxNTI4QkQ1RkE0NTU0NTAwQzI0NzI4QkQyQjYKKzoxMDQ2QzAwMDVCN0JGREQ3NUE3QkVGQ0MzOTkzMDk2MEZGRjZGRUY3OTEKKzoxMDQ2RDAwMEJGREYxRjNGQkZDMzNFNjczRkQ2NUVBRkJERDZEQTZCQkQKKzoxMDQ2RTAwMEVGQjFCMzM0QTYwRjY0RUM2QkZDQkI4MUIxMUExQjYzNTIKKzoxMDQ2RjAwMEYwQUFGQkY5OTQ5RERENUZFQTY2MkM2RkEzNkZCOTNCQ0UKKzoxMDQ3MDAwMDE1REVCN0U2RUM0QUY0MzE5NkI1NzdCRDMyMTFERTY3QjcKKzoxMDQ3MTAwMDZENkE1MjY2RTc0N0RCOEY3NkMxQzczMUYwQkU3NUJENjMKKzoxMDQ3MjAwMDUyMDRFRkIzREU2QzUyNjZFMUQzNjE2MzZENTA5RjY5NTIKKzoxMDQ3MzAwMEJFMjQ4NjRGMTY2MDJDOURCMTQxRTM5OEY4MEJCOEIzQTgKKzoxMDQ3NDAwMDBBMTlFQjhGRkY4NDJFQ0UxQjg5RDAxOTYzMzkyQjZDOEQKKzoxMDQ3NTAwMEUxOTAwMkVGODM2NTUzOTk5N0IxNkQwMDU3NTYwQUI0MDMKKzoxMDQ3NjAwMDUzQkYzQTYwQzdCQUI1REFDOTc2Mjc2MzRFQ0RBOTdEODMKKzoxMDQ3NzAwMDlEQ0I1OEY2MEM2NjYzRjAxQ0I4OTRCRkM3QkZBRkUxODEKKzoxMDQ3ODAwMEZGOUM5MEI1M0M4ODk5Q0EzOTU4RjZBNDlFODIyMTk5MUQKKzoxMDQ3OTAwMDg3NzlCRTU2RTNDMURCQTU5NzBFOEZDRTUzM0UzN0Q1NDIKKzoxMDQ3QTAwMEY5RDJERDVBQ0ZGN0YyQjk3OEQxMjdGQUMzRDBGQTY5MzYKKzoxMDQ3QjAwMEFDMzc5OEIxNzA0Q0ZEQUE5MEFFQjE2QkUxMDkwODY4QjYKKzoxMDQ3QzAwMENFRUZEOTdFMkEyQjJBNDQzQURDQzcyNkQyQjM0NkYzNTEKKzoxMDQ3RDAwMEREODU3OEE5Mzk2QTY3MjE4MEJCQTZGNjU0MDk5NjU5MDgKKzoxMDQ3RTAwMEFCQzI4NkU0RjQ2QzNGOUNEOTg5MUU0NTRDRDE0RUUxQTYKKzoxMDQ3RjAwMDdDQkRDQzhCRjM1MzJCN0Q0Rjk0MDA5RUU3MjYwNjI2ODEKKzoxMDQ4MDAwMDYxQkZFQjEyODNGNDk0RUYzMzY3NEZDOTBDMDIzQ0M1RDAKKzoxMDQ4MTAwMDBCRjI0MzBDRTg3RTdFQTNFMjc3NDBGM0QzNEE1OEI3MEQKKzoxMDQ4MjAwMDAzM0QyQTZFQUYyREI4MTFFQUZENTYwRkRFOENFRDJBM0UKKzoxMDQ4MzAwMDY3QjQxRDIxN0FCMERBM0NDNDUzOUJDRUY5Njc2MDZCMzQKKzoxMDQ4NDAwMEQxQTcxQUQwMEQ1ODJDOTQ5NDgyNzQ2MUVDQTQ4OTBFQ0YKKzoxMDQ4NTAwMEY4Nzc3MkE4MjhBQkJERTNGMTcyQ0ZCOUQ4OEY4NkJEQzcKKzoxMDQ4NjAwMDg0NjlCRUYyN0Q0RUU4RThBMEMxMzFFM0IxNDI4Mjg3OUYKKzoxMDQ4NzAwMDMxRTQ3MUQ2QUVDNEEzRUJDMDU3OEE4RTZBMDVCRDhGRjIKKzoxMDQ4ODAwMEY3Rjc5RjQ3ODhDQjIxRTAwRUU5NUJFNUQxQzNDQjgwRUEKKzoxMDQ4OTAwMEJFQzUyRkRCMjMzNzAwM0RBQUI2Mjg2MTA3OTQ2REZCMDgKKzoxMDQ4QTAwMDVEMDFBNENGQjlFRDUwMDZCQTQ0M0MzQUQ1M0Y2QjM4MTAKKzoxMDQ4QjAwMEE5NUNFMzY4N0JFNDdBMjg3N0JEQUNCMkFERDhFREQwRDMKKzoxMDQ4QzAwMDA0MUJDQUREMjkwMTNCMUIwRDY1QzBDNzdDMTcyRjU2OTEKKzoxMDQ4RDAwMDZEMzk3MDFGRjY1N0Q2RUE2MDJFRThCRkVBOTUwNUI3MjYKKzoxMDQ4RTAwMDVDMEZFNTA1QzA2RjU4QTVFQTk5N0FCRDJGOTQxNzg2MkQKKzoxMDQ4RjAwMDk1NjYyQzc3NEU2NEM0MUZBMTE0M0RGQzBDOENEN0U5M0YKKzoxMDQ5MDAwMDZENEJCRjAzRTRFNTRDOUQ5M0Y5MDA5NEU1OUVCNkY0MkUKKzoxMDQ5MTAwMERCODE4RkNBQzNCQjRBQjA1REY5NEVDNThGNjgyRjdFNUQKKzoxMDQ5MjAwMEY5OTkyMzU5MzhBRkU3ODBBRjgwOEYyQTc2MjQzMjlGRDgKKzoxMDQ5MzAwMEM0MUZGQzdGMEFBNjcyMDM3QzVGMENGMzQ0Rjk1RkMwQkUKKzoxMDQ5NDAwMDlBNEE5ODhBRTNBRkQ3N0Q5RTI4QkVDRUQ0MTkzNDRFQkEKKzoxMDQ5NTAwMEI3M0MzRDA3RTM0MEJCRUExNzE1M0Y0RUIxREFDNjgyQ0MKKzoxMDQ5NjAwMDI4NTdFNzVFNzFDREQ4RTZDNkY5RDVFQjc5MUU5Q0Q3RkUKKzoxMDQ5NzAwMEMzM0FENjVCMTA5RUI1MDc1NTU2Nzk3ODhCNUUwMkRGMzkKKzoxMDQ5ODAwMENCMzc2REQxRTdFNzIzREU0MEVGRTUyMzVDN0RBQzcwRUMKKzoxMDQ5OTAwMDZENTQwMzg4REZDNUM5Q0VBRDJBRTA4N0I5MDM5OUQzMkEKKzoxMDQ5QTAwMEUzRjBDRjk5M0E1MDYzNzlEMTcyMzlDQTM3RTk5M0IwQkQKKzoxMDQ5QjAwMDNFQ0Q1NEJGNDQ0OTI2N0VBREQ4QTEzMjlGODU5RjM4NTUKKzoxMDQ5QzAwMEZENDNDNzM4RkQ0M0ZCM0NFMTY3NzJBMkY0NUI2QzcwQUEKKzoxMDQ5RDAwMDNEMjlFOUI3Mzg1OUQwNTNFQjJBOEMwN0NGMjM0ODBGMkMKKzoxMDQ5RTAwMDgwQTcwOUYxMDVDRkI1MDIzRUVGMDQ1NkE0MDE1REJDRDYKKzoxMDQ5RjAwMDAxNjYyOEVDRjJGQ0Q5NjQ2N0IzMTg4Q0ZEMTY5QjE3OEUKKzoxMDRBMDAwMEQwQzY0MzU5Njc4Qjk4OUYzMTQzQUIwQTRDODJGMjU3MEIKKzoxMDRBMTAwMEFDRjQ0RDlDMEY2MzdFNUYyOUUwQjk1MTYxMzM3MERFQzkKKzoxMDRBMjAwMDg3MTE1ODk4NEY2Mzk2NEVGODZCOUE1Q0I4NEQ1NTA0QjEKKzoxMDRBMzAwMENDQTk1ODlFRkY5M0Q1MzlENEZFMzhCNUQ3QTBGREYwNDgKKzoxMDRBNDAwMERFREIxQjI1RTMyQ0VEOEQ5MjMyRDlGRTNEQUNDNzlDRkQKKzoxMDRBNTAwMDk3NkVERjU0NzI5RDc1RkM5MjcyRDlGRTIzMUFERjdEMkEKKzoxMDRBNjAwMDY5Rjg4RDFCMjc1OEM3QkZCMTkyREFENzM4MzhCREJBNUQKKzoxMDRBNzAwMDkyOURFMUFENTA2RTcwRjkwMzFBRDI0RDYzMTE3Q0FGNzcKKzoxMDRBODAwMEE1RTQ2REM1N0FBQUU0MDdENjE2NTBBMUJEN0I2N0YyRUUKKzoxMDRBOTAwMEM4RDVDQ0NDMTcxM0ZGODhFMzc5NDA1QUNDN0M5MTM0MkQKKzoxMDRBQTAwMDJFQzFDMjhGQzk4MTE0NEIxOTdBMzI0RTVEMTNENTQzODIKKzoxMDRBQjAwMDAxQUY5M0UwRDFGQkVBQTQyRjhBRkEzQTA5REUwN0Y3QTcKKzoxMDRBQzAwMEJCQThGQ0UwNzUxQ0RFMDdGQkJBNDlDRTEwMDY5NjA1QjQKKzoxMDRBRDAwMDY1M0Q3OEFENjE1QThGMDA0RTg1NjUzMjc2NDEwOUJBRTEKKzoxMDRBRTAwMDk0MzFFNkY3M0UxQkJFNEY1MDU5MkRDRTI3QzFDMTQ4MjkKKzoxMDRBRjAwMDFGM0Q5QzUzQjgyRDY0QzJDRkNBMDE0MDVGMjhBNzJBMkUKKzoxMDRCMDAwMDNBQzdBM0MwRUJDMzAzRTY2N0NFMzI4REQzMzg0MDlGQ0MKKzoxMDRCMTAwMEIxMzU5RkJGOUZFM0M2RjE0QUQzMTVENDgzN0E1NzlFMjAKKzoxMDRCMjAwMEUxRUUzOThFMjM3NzlDNjUxQzY3NzYxOThEOTMxMzMzREMKKzoxMDRCMzAwMDhFMjNCQjJDNjYxQ0U3OENBREUyQkQxODY3RDBBNUM2RTIKKzoxMDRCNDAwMDc5MzhGNzNBRUI3Q0IyQ0I2OTlDODJEOEY5NjQ5N0M3ODUKKzoxMDRCNTAwMDhDOTNDMEU3MDNFRkM1Mzg3RUM0NUZBRkYzMTkzNEMxNEYKKzoxMDRCNjAwMDNBOUY4MTk1MzRDRUY1MzhDRTE4RDM3QzA2NTZDNjhDNDQKKzoxMDRCNzAwMEUzQTY3MUYwM0Q4RTAzODY5NDhGNjUwMEREMUQ1REYzMjUKKzoxMDRCODAwMDg5RkVCRjc0OTFCREEwM0I4MkNGNjJCRkVDNUQxNzIzNEQKKzoxMDRCOTAwMDdERTI4MzcxMzM1MEFGQzBFMjBDRjJBQjI5MjkzNENFRjEKKzoxMDRCQTAwMDE3MDk0MDdGQjc5OUNFNUMxRkQxMTNGNENGM0MwMTIyODcKKzoxMDRCQjAwMDBCMDM0NEEwN0ZBQTA1OEZDRUREMzkyREJCMUU5RkFEMTAKKzoxMDRCQzAwMEM1OTlCM0QwMkVEOUUwRjEwRjAxRDEzOUQ3NUFBQ0NGNjYKKzoxMDRCRDAwMDg5NjNERkNDNkJCMjlGNkFCN0YwQUZEMDdCMTNEOUQwQkIKKzoxMDRCRTAwMDVBMThCRjA1OTU4REE5N0MwQUY0MTcwM0JENzUxMkY0RjgKKzoxMDRCRjAwMDE3M0U0RjBCRkJGNDIzRDA2RjRDMzdDMzVCNEZGMzM4OUEKKzoxMDRDMDAwMEE1NzEzQzlFREFDNEQ3OTEyRkQ2MUZCMzgzQjE4N0MzNTkKKzoxMDRDMTAwMDFDQ0YwN0I4RUYxNEQzOThENzA0QzY5RjQ5Q0U2QTA0QjcKKzoxMDRDMjAwMDNEQkE1RTcxODRCNzEyM0QwMkZENkNDMEU3NkM2MzFGMzQKKzoxMDRDMzAwMEMwOTVBODA3NzZFNjFGODQzRDBBN0ZGRDZDNjBDQkRFMzkKKzoxMDRDNDAwMEIzNzJENzYxQUNGNkI2MzI2QkMwNjI5OEVGOEM5NkY1NTIKKzoxMDRDNTAwMEY2N0U1MDNFNjc2RkJGQ0ZFRjM2RjUzM0MzN0UxMkU3NjcKKzoxMDRDNjAwMEVEODRGRkIwOUZCQjgzNzY4QjdERkE5RDMyNkJGOURFQkUKKzoxMDRDNzAwMDE4N0JCNTUyQzkxNUY0MTBFM0ZBQzI3NkE0RDc5REU5QTIKKzoxMDRDODAwMDFDOUU3QkYxMzkxMjNGMUI0NEFGRkIwQ0RFNTZDMjUzMTYKKzoxMDRDOTAwMEYzNDMzQjhCRDA3QUQ0OUVDNkYyMTExRjY5NjQxNzA1OEIKKzoxMDRDQTAwMEU1QkExMjAzREY3RDc2NjdBMDE0RTg3OURGRjc1NUMyMTUKKzoxMDRDQjAwMDYzMkNCQ0VERkIxMzAzMzZCMDk3REEzN0ZFQkIxREVENUEKKzoxMDRDQzAwMEVGQ0JDMTdGRkY1MkVCNzcxNkUyRTM0OUJDNEEzRUI4MTcKKzoxMDRDRDAwMDZCNDY1MTlGOEY0Q0Y1RUUwRURFRDRFNzIzMTNCRjdDNUQKKzoxMDRDRTAwMEE3NkM5QUE1N0M2RkVEREQ5NkZBRjcyRjlENjVGOTNFQ0UKKzoxMDRDRjAwMDJCQjREMEYyN0RDRUNBNDU5NkYyQkNBNkVGNUJFQTJGNkMKKzoxMDREMDAwMEQ4NTg2RkY5QkUzMEJDQ0FGMkJENjJDNzdBNEJCOUFBOTcKKzoxMDREMTAwMEY5NDk0QkZEOUFENjJEOTZFRkI2RkRDMzZFNDU3OTVDRTkKKzoxMDREMjAwMEZFNUI5NUExN0Q3NkMxN0RFQTExQjRBRjJFMTg5QTFGNjYKKzoxMDREMzAwMEVCNTQyM0FGODExQzdFNTI5NzQ5RkM3REE2Q0U0N0NGMTIKKzoxMDRENDAwMDczQURBMzlDNjg4RkQ3MjQ4MDNDQzM1QUJGNUZGOTQzREYKKzoxMDRENTAwMDY4RTUwNEQ0MjM1MDFGNzRGODQxRTVDMzUwMDg5Q0E3QUMKKzoxMDRENjAwMDM3MTQxRkYxQkRCQTUxNjcxMTYwNTU4NUE1NzRGMzc1RUQKKzoxMDRENzAwMDk3MUFGREFFQjVDM0Y3NTFCRDdGNTczNzZBNzFCRjZCNDgKKzoxMDREODAwMEVENUFEQzdFM0I5NUFFM0NCNEVGNDJFRjM4MThEQTgxNDkKKzoxMDREOTAwMEJERDkwRkYwRDcwRkQ3OEJERUJFNzdEODU4NTlCMzQ5OUUKKzoxMDREQTAwMEVGOUM1MjZDQzQwNzc3MkExMzRGQTE3RUFFRDRCOUJDRDYKKzoxMDREQjAwMDU3RUVDRTlBODhGRTYwQTUxRUM5QUI3NTVGNjJCQzY2RDEKKzoxMDREQzAwMDAwMjYwM0ZCQzlBNTc5MkQwQ0Y3OEJDQTJGRDE2RjkwNTQKKzoxMDRERDAwMDQ1RUU5N0IwRTBDN0E4OUYzQjBFQThBNDY3NTlFNDUwRTIKKzoxMDRERTAwMEY2NkRDMzcxRkNDMDI5N0NDRjVBRDM2ODdEN0NCQjJFODUKKzoxMDRERjAwMEQwRTcyM0YwRTc0RUQ0NERBMUU3RUZFQjRBRkI3QzA0NkMKKzoxMDRFMDAwMEJBRTZCREJBMTk1NDdFQkYyRTQ4Q0ZGNkJBMzI3QTlFQTIKKzoxMDRFMTAwMEFDQUJBNUVGMUZENTJEQTVGMkE5QkExMDNEM0ZBOTVCRkMKKzoxMDRFMjAwMDQ5Q0YzMzc1NERGNEJEQTM2RTIzOTVDRkQ1ODVFOUQ5MTAKKzoxMDRFMzAwMEVEMDcwODdCOTRBNTBBRkI0RkQ4RUJCMDcyNTBGOUJDODQKKzoxMDRFNDAwMDk4ODMwQUZGRTY3RUFCM0YxM0U1RkFCQ0ZCOEIzQ0I0Q0MKKzoxMDRFNTAwMDczQ0Y5RjAwQzMyNDhFN0YyODlGQjFGQ0Q2M0JGRDAyRjkKKzoxMDRFNjAwMEI0REVDRjBGMDNGRDQ3RjVGQ0VFNEFFMEY0NzFEOUQ4NkMKKzoxMDRFNzAwMDE0MDZGQTY3RDUxMDlENjkzMDdFQzIyRkFGMjE3QjE5QzkKKzoxMDRFODAwMERFNkI4Q0Y0NjVEODNGQ0QxM0E3N0Y5QzczQzZFNUU5MzQKKzoxMDRFOTAwMEQ0Q0QxRjRGRkRCOTEwRTMwRjc3MEE3RDk4NzA0OEFENTAKKzoxMDRFQTAwMEU1NzREQkU2NDdCQTk5RjBDN0VEQjI5Nzg1M0U4RkMxNEUKKzoxMDRFQjAwMDIzRDk3MjU5M0RGMTc5MzY0REUyQjMyRDFCRTMwMDFCMjYKKzoxMDRFQzAwMDk0RDI2MTM2RTA4M0YzMkQwRTlBRDdGOUJEODk2MTg2QkQKKzoxMDRFRDAwMDZEMzEzODMyRkU1Mjc4RTM3MDU0RUM3MDE5NjZGRDUwMzMKKzoxMDRFRTAwMEQ1OUM2QzU4RjU0NTk2NjFENjE3RTc4RjZFRjNBMkRDMUEKKzoxMDRFRjAwMDJGQ0VCNDE5MUY4RDQyRkUwODA4RkVFMDdDMjdGQkFGQzEKKzoxMDRGMDAwMDZBQ0UzMURDOTY3RUFDRTVGMzREQ0ExNEY0ODM0MEI5MjkKKzoxMDRGMTAwMDI3REQxRUM3M0Y5MENGQzU5OUJBRjExMUM4Rjc5OTFEN0IKKzoxMDRGMjAwMDgzOTI3MDVDRjBFMzBDMUNBN0EzQ0UzMEY4Qjg5OTg2OEUKKzoxMDRGMzAwMDk5MkYyQjk3MjY1MDdEMDk1RjZGRkRGRUFERTE0M0NCODYKKzoxMDRGNDAwMEUwNDMyNzIzRDQ3RjNERTg5QkZCRDk0Q0ZCMjNDNTczNkIKKzoxMDRGNTAwMEQ4NUVGQjE3QjhFRTM4RTBGRkFGMjkxRUEwNTE1OUY2MTYKKzoxMDRGNjAwMDVCRDNBQzg2MUNEN0UyRkI5RDk2RjFBMDlENEZGQUQwOTcKKzoxMDRGNzAwMEI4NUVGNTRFNzc4RDlEMzJDNTA1QUE3MTBDRjI4RjlDRjcKKzoxMDRGODAwMDQ0RTcyMEY0OTgwNEZENzU2QUVFOTUwQThDMzNDNUU2NzMKKzoxMDRGOTAwMEEzRUYzNTgyMUZBQjlDRUQ3QTEwNUU5RDZERTFGNEU4QzYKKzoxMDRGQTAwMDZEOUMzMzc1NDc3RDFBRTg4RjMyMjc3ODY0MzA0RTU5RUYKKzoxMDRGQjAwMEYzQjA0OUE4MUZDRkI2MkM0RjBGMDJERjU2QThFNzFGNEEKKzoxMDRGQzAwMDJDOEREMzdFQTU0REUxRjA4NEVENURFREE2RjlDODM4QkEKKzoxMDRGRDAwMDBBNjNEMEFGMzMwQTNGNzJGQTI5NTMzOTU2NUZDQkU3RTEKKzoxMDRGRTAwMEEzRDgyRkYwNDdGNUNFNjMyNUQ3MDNGQ0Q1QUQ5RkVCQjMKKzoxMDRGRjAwMDA4QzcxNDVCRjA1MTVCNUE3NEZFMEFDRTFGRkEyOURGMTIKKzoxMDUwMDAwMEYxODE4RUYzRkJDNDFFQ0FGQkUxMjVGNDU0NEYzOERENTkKKzoxMDUwMTAwMDk5MTRCNzkzRjA4NTU4MUJEQTMxQjNCQkUzOEFCRUJCNTIKKzoxMDUwMjAwMERFMDVEMUZDRjQ1RkVDNkMzNUMwQzFCRTgyNUFGMEREMDgKKzoxMDUwMzAwMDJFQkVDRTY1QTU1RUM0RDdFQzk2MEE4QTJGN0U2QTkzRjMKKzoxMDUwNDAwMDc2NTM1MzIxRjJDNzU5NjY5QjgyRjMzQkNCREVGMjhFMzcKKzoxMDUwNTAwMDMyRTFBRkM1QzZFRDdFQjY5MkRCMzEyMUY4MEZFMTAxM0EKKzoxMDUwNjAwMDdCRDY2MkQ3MkNEODY4MkRDRjY3RDNEMzUxNkZDQ0RGRDYKKzoxMDUwNzAwMDYwNjc2MTQwRDE0MkI0OEIyNDdGQzBCQ0I3REJCOEJENTAKKzoxMDUwODAwMEJCODBENTM2QTIzREE3MzlCODdGMzBEQjYwNUEzRjgwNjAKKzoxMDUwOTAwMEFCRUFFNzlCMEJEMUVFRkY4NUNENDZGNDkxNzE4Njg1OTcKKzoxMDUwQTAwMDI5MUNFRUYyRDRCMDFFODBFRjFGQjY4Q0JBRjM3QUU0NUUKKzoxMDUwQjAwMDNFNDdCODExRDc2NTk2QzRGQ0NGQjA5RUY4OUNCM0QyREEKKzoxMDUwQzAwMDBBREZFNUUwOEY4NTk3QjE2NTE2Mzg2NEJGMTIwRTc1NkIKKzoxMDUwRDAwMDg3MTIwOEM3RTFCQjM3MjRERjA5M0Q5MkEyNUFFREZDRDUKKzoxMDUwRTAwMDhDOThGMjdCMzYxMUJGNTQ5OThBNzQzRTZCMzg0M0I2NjQKKzoxMDUwRjAwMDI0RkFFRThGNjA3QzY0QjdDM0JGMUNFOEZCODBBREI0QkMKKzoxMDUxMDAwMDFERjUzM0Q4MDUwNUNDNTRFRjAxNUI5MERFNzcyODZGOTEKKzoxMDUxMTAwMENFNDdGQjk0Njk5MTAyRjRFRjYxNEREMTkwMUY3NEMxQTkKKzoxMDUxMjAwMDBGNkE4MkI3MDBFM0IxMUUwNkVCMjdDOEE1MDNFMTgzMkYKKzoxMDUxMzAwMDdFMUEzRDY1NTM1OTAxQzY1RjQxNEVBMUJGNzVERTkyOEYKKzoxMDUxNDAwMEEzMEE5NDVERUUxNjg2RkQzOTMyQURGMTY1OTdDRjVBMEMKKzoxMDUxNTAwMEFFQzE3RjIwMUQ4NjMyOEFFMzI0MEVCNTdFODcwNThCODMKKzoxMDUxNjAwMDIxQkY3OUZDRDZGN0ZGRDE4REE3MDhGMUFEOTc1ODFBNkEKKzoxMDUxNzAwMDlFNEU3NzQ0ODVGMUQ5MzhBREMzNkMzNzU3M0IzOUZDMjcKKzoxMDUxODAwMEU0OTc0M0ZEMjVDMjlFQUY2NkJFMTBDNTg5MzMzOTFGMjMKKzoxMDUxOTAwMDJDQjlDOTQ2RjAyQ0YxRjhGQzIxRjhBRTY4MDE4NkYyNzIKKzoxMDUxQTAwMDg3QjE2QUYzM0E1NjczMTE0NEFFOEZBOUFDNzVFOUM4NUEKKzoxMDUxQjAwMDk3MzUxNzM1MTYwNjdENUY2MDBCN0FENDMxODhCRjAwQUUKKzoxMDUxQzAwMEQ5Qjk0RTQwRDZENzAwQjJFNjlFNjJCMTdCNTlGRjE0RTIKKzoxMDUxRDAwMEIxQkVGNjM3Q0NGMkRBMUZFOTNDMjY0QTY3QTkxN0VDRDQKKzoxMDUxRTAwMDQyMkY4MkJFQzg1MEQzNTAwRjc2OTU5MDVGQzJEQTQ5RTUKKzoxMDUxRjAwMDRGQzg3QTdBQjQ1RTdGODRBM0I3N0FBRTY4QkQ5Qzc4RDQKKzoxMDUyMDAwMEZENTVGREZDODUzRDIxQzA3RkY5Q0YxRUYzMDJGMUQ5OEMKKzoxMDUyMTAwMEE3NUE1M0JBMUZERTU3M0VCM0MyOEI3Q0ZDODkxNkYyRTUKKzoxMDUyMjAwMEUyQkMzRjBEQUI1M0UyRjFGMzlEQUEyMkZDQjE4MDVCREYKKzoxMDUyMzAwMDQxN0Y1OEQwRTlDQ0YzNkI2RTQxQkM3RkYxOENEREMwNkYKKzoxMDUyNDAwMDJBMzUzQjFDMTEwNzEwQjFCQTY1MjFFN0E3MUQ4RTBGNDcKKzoxMDUyNTAwMDc4RjlFMUNGOTE5RTM1QUQ1Njc5MkI3RkY2QjE3NDhDRkMKKzoxMDUyNjAwMDc3MDI4NkI4REZDODIyNjQzRjU3NkZGRkI4MDRFRDkxMUMKKzoxMDUyNzAwMDFBRDY0NTdBMjJCNjFEOEU3RjMxODVENkFGNTk3QTUyMUQKKzoxMDUyODAwMENGRUY3MkZGQTU0NkYwN0Q0RENCOUFDRjU1MkY5NkFENEYKKzoxMDUyOTAwMEYyNUQyNkZDOTExQjU1NEYyQUM1OTVDNkIyQjE0ODM3MjEKKzoxMDUyQTAwMDg5MDcxNkU2RjZGMEYyRTc5RTI4RjgwMEUwRThEOEZFNTcKKzoxMDUyQjAwMDJGNUVDNTEyMzdFMkZBRTE3Q0YzOUMxRkJGRUFFQjVEN0IKKzoxMDUyQzAwMEFGOUYxM0ZFN0NCNDVEOThEQUY5NUFCOUZEQ0VGNkYyQzEKKzoxMDUyRDAwMDY3QTUzREUyNDU3RkE5NzI4QkREMEY5MkM5MkE1RkQ4OTEKKzoxMDUyRTAwMEY2OTNBNzkwQUZERjcxNTA5Q0ExRTI4NUMzNkY1RjA3NzMKKzoxMDUyRjAwMEU1OEE1REY2RDRBOTdDMUE2RTI1M0Q0QThGMUFGODdGOUYKKzoxMDUzMDAwMEU5QzgyOEZFQ0I1RjNBQUNGQjg2RjNGNzBGQTU0NEU5NkEKKzoxMDUzMTAwMDUwQjFFQjgwQ0U4NkY3QzQ1QjcxRjMwMUJEREQxRDg3MTQKKzoxMDUzMjAwMDFFQ0QxRjk0QTBCREJERkNCOTJGNzU5NEFCNEZGNzJCQkMKKzoxMDUzMzAwMDJDMjNBNzY3RkJCMjJEODdDOTlFNDMzQzExRkQwNDdEM0EKKzoxMDUzNDAwMEJBRTlENTgzNEU5MTVCNUUxRDRERjUwQzVDQkY3QUEzMjcKKzoxMDUzNTAwMEQzRDVCOEY2QTUxMTFGQkZGODJBQzZFRjdGRUZGMEUzNEIKKzoxMDUzNjAwMEZDQ0I1RUZDQUUxN0U3NzE1QUFCRTVGQ0JDNzk0NTdBMjUKKzoxMDUzNzAwMDAwQzYyREIzODdEMjBEN0FGMkY3NjU0RjNGNDA3Q0I2NTkKKzoxMDUzODAwMEUwRDgwM0U5MTQwRjYwODEyQzFCQURBMUExMkM5Q0RGOTgKKzoxMDUzOTAwMEJDNEQ3N0QwRkNFNkIzMjBGMTVCRDk2NkI1MzQ4Q0YxMTcKKzoxMDUzQTAwMDJDOEQ0REQ5MTU0NzFFREUxNEYyNzA3QUFCMDNENzFFMzMKKzoxMDUzQjAwMDc2MUExNTJDRkE4NzZGQTlCNDRGQzBEODIyOEEzNzNDQzkKKzoxMDUzQzAwMDIwRjcyMUQ4NjIyQTVGNzA3MjNBNkQ1MzZEMzJCRUUxQzgKKzoxMDUzRDAwMEI0RjBFOUY2ODdEQjkwM0U2NzA2MDQzMjMwM0UwOTc4ODgKKzoxMDUzRTAwMDA4MDk3QzI5QTg3N0Q0NjM5MzMzMzg3RDk4NEYyQjE0MTAKKzoxMDUzRjAwMEVENDAyRjE2RTM3QkFDREY2NjBGQjgwQTJDRURDNDNBMDQKKzoxMDU0MDAwMEM2Qzc1RjIyQzYwN0I4MTNEMDFFM0I5RDBFRjY0RDlDNDMKKzoxMDU0MTAwMEY5N0RBOTRBQkQwQ0Y2ODY4OUJGNEM3MkNERTU3Q0ZCQUYKKzoxMDU0MjAwMDJBMkVENzUyQ0VDM0QzQTZFMEY3M0YxRUU3RjI4M0VENzQKKzoxMDU0MzAwMDcwNUQwN0I4MjIxOUY0RkRDMEVEMEFFOTAxMDc4QkM0QkQKKzoxMDU0NDAwMDkzRTdFRDc2MjFDRkQ2RUY3MjdGMTJFMEQ2NzA3RDhBOUEKKzoxMDU0NTAwMEYyMDlGNDlGNDJGODI3M0I2REZFMDY2ODY3RDJDQjM1MTAKKzoxMDU0NjAwMDM4MUVENUQzQTNFRjRERUJGQTAyMjFGRkFGQUI2MjdGMUQKKzoxMDU0NzAwMDU0QzgzRkRCQzRFNUJFNzdCQjM3QzRGRDAzN0JGODI3QzgKKzoxMDU0ODAwMDRGQTFCQzgyN0NFMjNBNTNGOTgyQkQxNEU3RkREOUNFMkMKKzoxMDU0OTAwMDQzNkZERjAzN0NGRDU5QjM5NDUzQUJERThDOTVEM0IyREQKKzoxMDU0QTAwMERENjM1ODNDMzlGRENDRUQ2NzcxRTUxNERFQzc5NTUzREIKKzoxMDU0QjAwMDc3M0JGMUYxREY1QjZGNEFCQzlEOEJEMTlCNTIwRkY2QkUKKzoxMDU0QzAwMDg2QkY1ODNEQjg1NkY1QzVENTgzRjA3NzlDMTVGNkU0RjAKKzoxMDU0RDAwMDNCQzk2RjkyQ0ZDQTdGNUEzNTkwRTI0NjkyMUYyNUJGRDMKKzoxMDU0RTAwMDc1RjNBM0U0QjdEODc5NUFGMTE2RkJGRDE1QTE2RjI0MjMKKzoxMDU0RjAwMDlERURDQjU4Qzg4M0YxRDI3RDJBRjlENzlEMDA1MzIzNjcKKzoxMDU1MDAwMEQwQjc3MzY3NEUxOEUzQ0UyQjVDM0M3RUQxNjk3NDc5QkIKKzoxMDU1MTAwMDUzRTBCOTIyOTk5N0JCRDJGNDQ2RDQwRkYyN0Q5NzhCMTIKKzoxMDU1MjAwMEM3QjczQjRCQkJCQ0M5MjZCRkUyODNCREFBRDcwN0RGQzkKKzoxMDU1MzAwMERCQzM2QzRBM0M3RjAzMzQyRkMxRDFDRTdBRkJDRUUzNzAKKzoxMDU1NDAwMEMxOTM1NTc3RjY1MkY0REI5QjU0REFDRjlFNUI3Rjk3N0QKKzoxMDU1NTAwMDE3Rjc4MTNCRjcwRUZBMjdENDRGRjNERTAwMDMxM0UwNzEKKzoxMDU1NjAwMEVENDQzQjMwMDlBNzE3RDAzMDJGNjE4RUEwRjcyNzJDRDAKKzoxMDU1NzAwMEY0RjgwNDk4REY5Q0JEREM1Rjk4QkIzNkM2QkU3NzJGN0QKKzoxMDU1ODAwMEQxNTFERjgwN0Q3RkQyMUFEN0U2N0M1MzJFRkEyOURCRkEKKzoxMDU1OTAwMDY0RkQ1RUNFRDYxMkREQ0E2M0Y4MjgyOEZDQzBCMTlBM0QKKzoxMDU1QTAwMEUwQTMxMTZDODRGMEMzNzhGQzQyRThBQkM5NkFGRTNGMEIKKzoxMDU1QjAwMEExOUREMTc5OTRDNzE1Q0ZFRjU1MDlGRkU3NzcyQTYxRUYKKzoxMDU1QzAwMDhDRkI1MDdDNzczQ0QyQkY0QjY3MjY3RkI5MDNGOTRERUIKKzoxMDU1RDAwMEVGNUQ4RTNCNUVGRTQzRTEwRkExNEFFNTlFNzcwQkZFMzkKKzoxMDU1RTAwMDE5OUUxRDdCREVDOUZCMDU5NjdGRkVCQkVDNzc1OUNGNkMKKzoxMDU1RjAwMEZBQzVGQkZGNDRGQkM3OURGQjFEMDQ0N0U3RkVEN0IzN0QKKzoxMDU2MDAwMDdGODhFNTU3MUQ3RTg0QjM3Mzk5ODNGNkNGNDJGQjNEQjcKKzoxMDU2MTAwMEUxMjFGODdEMDBEMDFCRDdDRDdENUYxNkI0RDNCQUQzN0UKKzoxMDU2MjAwMDQwNzQ5QUFERjFGRDhFRjM3QkZGRkNCRTgyRjkwNzdCREYKKzoxMDU2MzAwMDFEM0U5QzQ3Q0Q3RTlFMTc1MkYzQUE4QkUyMkU5REZCMEEKKzoxMDU2NDAwMEJFMkMwQ0JBRkY3NkYzQTlENjU5OTBGOENGQzM2NkVDRkUKKzoxMDU2NTAwMDQ2N0U0REU2RkIwMDM1QkYxOEJGQUQxRUY3QzM1QjBFOUYKKzoxMDU2NjAwMEU4QjhCRjUyRkNDQkJGMTRBMDdFRTlEQ0NERUQ4NDczNUIKKzoxMDU2NzAwMEY2RjZBNzcxMUZCNDRBMUJCQ0NDOEU3MjhGMzY1QjVGRTcKKzoxMDU2ODAwMEIwM0JFREYzMjY4NkYyRTNFMTg1RTNBMTEzRjA4MEYzNkUKKzoxMDU2OTAwMDAyQkM5NEExNUVFQzBEMUYwRDFBRjczN0ZGRkJFMUUzOEUKKzoxMDU2QTAwMEYzRkI3MEZDQ0FCRDYzNDk2RUEyNzg1MTAyRkNCRDI3QjIKKzoxMDU2QjAwMEVDNTQ2OEZFRkNGREZFMkYwQkQwRUVGOUFDQjk5RUQ2ODMKKzoxMDU2QzAwMEYxQ0JDRDdCREJGRkI4NzkyQjkxMkI5OUY3QzFGRkU2QUUKKzoxMDU2RDAwMEZDM0Y0NUUzRUI1MkFDMUNGNEU0RjM5RjNGNDhFNTE3NzUKKzoxMDU2RTAwMDNEN0U4MkY3MEFFNUZGRTRGRjM0QkFFRjA2QkE3QjJGNkUKKzoxMDU2RjAwMDRGNzdDNUZFREY3NURFOTdBM0ZCMUI4MkVFMUUwM0YzMUIKKzoxMDU3MDAwMDBBM0FGN0ZEODVFMkU1NzJGRTk3OUJCN0VGRkZEMTc5ODQKKzoxMDU3MTAwMDRCRkI2N0I1Q0RERjk0MEJGNUQ3QjI0ODlCMEZFMDVDMzAKKzoxMDU3MjAwMDMxNzQ3QTEzODY5OUMwNEQyODhENjc4Rjk0REFCOTdGQ0EKKzoxMDU3MzAwMEE0MkEzQzBFQzMwNkYwQjgxMDEzRkUwNEE1ODBGOTMwNkQKKzoxMDU3NDAwMDhFMzI5RkVDM0FDRERENDg3NjI2RDNGQzZEMDFDMEM3ODIKKzoxMDU3NTAwMEVBQUI2N0ZCMjk1NzgzOEQzQzExQzQ3MkZGMDk3RThBMkYKKzoxMDU3NjAwMDZGQzZGODU1MEQwQTBCMjg2MEVGNjk1NzdGRkIyOERBRTIKKzoxMDU3NzAwMEY5RjZBMUI2ODhBMzgwOUUxRkUwRjM2MTExQzdCMjFCQTIKKzoxMDU3ODAwMEJBQzU5RjcwQzdGODAzMkU5RkY1QkI0M0Y0RTc2NDIzQTcKKzoxMDU3OTAwMDlCNzIzMTRGQzFBRDE5NjExOERGNURENDQ0RjM3MTBGQjUKKzoxMDU3QTAwMDYxQUNDOUI0MEZFODYwQTZGNkQwNUYzRTA2NjA0REY2NjYKKzoxMDU3QjAwMEUzMzdDNTVGN0QzN0ZFNDZCNjA1MTA3RkMzNkMxNEQ3NEYKKzoxMDU3QzAwMEEyQTQzRUMyODczRkJDOUFGQzRDRUUzRjQ2RjFEOUQ4MUEKKzoxMDU3RDAwMDg2NzhENDE4Rjg3RjdDN0VFNDM3MzJFMTJGNkFBMjBCRkEKKzoxMDU3RTAwMDZEQTgyREUwQjJENjEzN0VEMTY1RTlDM0U5OTE1RDI5OUMKKzoxMDU3RjAwMEU4QjNEODQyMEY4OUZGMzg3NEIxRDA0M0UyRjc5QkQyQTcKKzoxMDU4MDAwMDI1OTYxRUIxNzhCRkREQ0VFMzZEQjE3NEIyRTQ3N0E0MDYKKzoxMDU4MTAwMDcxM0YyNDAyN0VDOEVCM0JCNzUxQkNFM0VDRjMxRkRDQzUKKzoxMDU4MjAwMDgyRjUyQjdFQTEzMjI3RjQ3MzZFQTc4NzQ1NTA3RUI1OTMKKzoxMDU4MzAwMEIwOEVGRTU0Nzk4QjFBMzdDRTJCRURGMjhBOUY3OTY4QTEKKzoxMDU4NDAwMEJDRjJERDhFRjA1NDY4NUZCRUU3QzMwMkIyOUI5Njc1NzIKKzoxMDU4NTAwMDFERTk4NzcxODFFNzE1NEVCRjUwN0IwMUVFREI5NTZCMkIKKzoxMDU4NjAwMERDM0Y4OEVENkY5MzlEQzcwNTNBNUU0OTlDODFGMTA3NDcKKzoxMDU4NzAwMDY1MDdDRjU3MkM2RkJFQ0JFRTMwRjFEQkZGQjJGM0JDMjgKKzoxMDU4ODAwMDU3QTg0N0YyMUM3QTRFQTFGNUE2Mjc3Q0RDMkZFODc4QjIKKzoxMDU4OTAwMDRFRTFGMEI1REFDMzk4Rjc1OEJFNjM4QjFFNDRCRjcyNzEKKzoxMDU4QTAwMEM3RTcxNEM3MkVGRUQ5MEJERTc2RjIxNzU1QUJGRkJDNDcKKzoxMDU4QjAwMDQzMjU3QUMyOTNFODE3RUJDNzU2Qjc1NDkxOUY1MERENDIKKzoxMDU4QzAwMDJDRkNDNDE4M0ZBQUUyNjdGQkY2ODQwMDM1MTUyRjNENzcKKzoxMDU4RDAwMEVCQzVGOENCOTlCNjY3QkNFNDlGRUVFMEZFQTdFNkQ2MzEKKzoxMDU4RTAwMEUyRkJBNzk3RjM0QjlCNTdDNUY1NEJDRkUwM0ZDMDlGMUIKKzoxMDU4RjAwMDM4NjA4RkYxRTc3N0Y0QjlCMkZEQ0IxNzJFM0M4RDcxOEMKKzoxMDU5MDAwMEQyOEVERDlGM0Q4RDcwNTdGRUU3QkYzRjhERjYzRERCQUMKKzoxMDU5MTAwMEVGMzI5RTgxRjlENjNDRkY1QjhBMzdDOTc2RUYwQTM5QjAKKzoxMDU5MjAwMDNEMzc4MDg1QjJBMERFQjk3NzFDOTQzRjcyNkVERkU5MDcKKzoxMDU5MzAwMDZDRjRFN0NFRURGQTUzM0FGQUY1NEJGNjREQ0VDMDc5NUEKKzoxMDU5NDAwMDJGNzlCOTM4ODNDNTkxNzdGOTQ0QkUwQzVGNDE5QzMwRkIKKzoxMDU5NTAwMDk2MEU4NzVBMEU5MTFGNzJGNjg0ODNGQ0JFRUVGODQyQjMKKzoxMDU5NjAwMDczMTU4RkQ3Rjg0NDVDNjE2N0ZDMzhBQ0Y0ODdBQjVCODgKKzoxMDU5NzAwMDNFMkNFMUYxMzFFMTE3NUYyRThFNzAxQ0U4NzhFRDE1QjkKKzoxMDU5ODAwMEQwNkJBNzg4MTNDNUQwRUIyQ0ZFMDNFOEYyNjUwQ0JERTUKKzoxMDU5OTAwMDJFQjBFMDhGQjM3MDFGQjJBNTRGQUY3MTg0QzgxNUUwNzEKKzoxMDU5QTAwMDQ5QzY3NzhGRDgwMzM2MURFNTYwNzc2MjM3OURBNjIyRkEKKzoxMDU5QjAwMDlENUVCODkwOERGMUYwNEZFQzVENjRGNzc0RUQ3MzE4NTcKKzoxMDU5QzAwMEU4REY5N0VGRkIxREM5QzVCOTk3OEY1MUZDOTQ4OTM4NjMKKzoxMDU5RDAwMEVCMzlENkZEQzdFMzYyOEE5OERGNzYwRjhGM0YwODdDRUMKKzoxMDU5RTAwMDYzN0NDMkU3QTVGNzIyMEVDMUY5NTVDNjI3N0E4QjRCMTcKKzoxMDU5RjAwMDhDRDU0NURFOTM4ODNCNTc2RDdGNTc2NzMxNzExRTY1QTcKKzoxMDVBMDAwMDFDRDJFOTAzNEI3QzVDQ0UzQkI2M0YwM0YxMzBENjFDODUKKzoxMDVBMTAwMDVGOEIxRkY3OTE3RTczOTQ0RTNDQUUyNkUzNjdFN0I2MkIKKzoxMDVBMjAwMDg4QjgxQkJDRUYzRjEyRkQ0MTFFQzdBODA5MkJCRjYzRkUKKzoxMDVBMzAwMDcxRTQ1MEM2RDc0NkVBMzE3MjE4QkVCMkI4REFFNUUwNzIKKzoxMDVBNDAwMEZENkJGMTMxNDRFN0VCODNDNDRCQzc1N0YxRjVGMDNGRjEKKzoxMDVBNTAwMEVBNUNBRUE3RDg4MjUzNzVEMzdFRjZGRDYyOUY0NUUyMUQKKzoxMDVBNjAwMDRCQzJEQjIxRjJGMDNBOUU1NzI5MUVENEQ4N0M4OEY0MzEKKzoxMDVBNzAwMDY5QUMzQzU3Rjc3MjBFRTIzRTlEQzc1QkFCNUIwRjE0RkYKKzoxMDVBODAwMEEwREVFOTM4RjgwQUYxNURGNUNFMEZGNDEwRjQ3MzY0ODYKKzoxMDVBOTAwMEM3NEIzQUI3MjczOTlGQTM5RTBFOUJGNDc0Qzc4QjA3NTkKKzoxMDVBQTAwMDBBNzhEQzhGRTdEREM2RjY1RjIxRkFBRkQ5NkJFREJGNzAKKzoxMDVBQjAwMDY2RTdFNzk2RkUyQjQyQ0RCNEZGNzVCOTcxQ0U2ODgxREIKKzoxMDVBQzAwMEJCNzBCRTY3REFFQzBDRjVERDk5NjY3NTRBMzg5RTFEMzEKKzoxMDVBRDAwMEE4REIyREZCQTA4REM3NzQ1QUFGNDZCRjk1NDBGOUI5MUUKKzoxMDVBRTAwMDRCOEU0RDc5MzcwOUY3RTk0MENDRDBGRTZEQTlFNzdDQTQKKzoxMDVBRjAwMEQ1RjJBMzQwM0ZBNDRCQ0JCMTdCNTQ1QzM3RjYyMDFFQkMKKzoxMDVCMDAwMDRENzY3MEUxRjFEQTYyMEZDODZCRTE3QkE1QTM5MUFEMzAKKzoxMDVCMTAwMDYyRjVDMEQ4MTMzNjBCREMzMDRFMDZFQUUzMDZFODA3MjAKKzoxMDVCMjAwMEYzRTkzMTdGMDhGNzQ3NTU2RkM5MTQ4NDQ3MzU2Qzg2MTAKKzoxMDVCMzAwMDJCRUVGQUM5RkJCM0JCNEIxOURBRTU3NkMzOUFBRjlDREYKKzoxMDVCNDAwMDM5NURDNEQxMjJENkJDRjU0QzlEMERDNTdENzA2NjRCMjgKKzoxMDVCNTAwMEYwRTM3RUMwRTI2MTgxMTE4NzMxQUY3RTVFMjZDNTg5QTgKKzoxMDVCNjAwMEIzNkVFM0VEQ0UxQUVFOTBFRERBRThCRTZERTI0NUU4RjUKKzoxMDVCNzAwMDFGRjM2MDZDRTFGNTMzQTE1REEyRDZBQ0UwM0UwMDNDQzIKKzoxMDVCODAwMDE5RDJFNTAxNUI3MEFCOUU4NkY1NzRFNjAzRDVGOEI0RDcKKzoxMDVCOTAwMEFFNjg5NDdGMjFDRUJEQzhGRTY0QkRERUY2ODNFNTM5RDQKKzoxMDVCQTAwMDI0NTVDMDNGNDhFQzA3MEY2MEVEMEFFRTA3NkZGMkYwOTYKKzoxMDVCQjAwMEYzNDgwM0REQTk3NERFNjg5QkIwREI3Q0I4RUY4QUY1OUYKKzoxMDVCQzAwMDZBQURFQkY2NjVDRjIzQURCNDk2NTM4QjhCMTYwREY0MEYKKzoxMDVCRDAwMDMzRjY2MUUzODNDNTFBRTg4M0Q0QkI4QTc2RjUzMzcwNjQKKzoxMDVCRTAwMDVGN0E0MzMxRTZEREE3M0U1QjM0MjIwQkNBNzczOTg2MDQKKzoxMDVCRjAwMDRGQTJFRkJGMkUxQTkxMERFNTVBRTdCODQ5RjRCRDQyMDYKKzoxMDVDMDAwMEExQkNDMDdEN0E2NzcxMjgzRjJBOUY2OTYwREM2MkJFQjMKKzoxMDVDMTAwMDA1QzhFRDQxOTREQkIzQTUxRDhERjhCNUVBOEUyRjc0NTAKKzoxMDVDMjAwMDdFMUU4Njk1RTJGQzA3OENFM0YzRUZFRjdFNkYxN0NFQzYKKzoxMDVDMzAwMDc3QTBBREJEMUVGOUVGQzdGQkJFNENDNjdBM0U2NkQwNUQKKzoxMDVDNDAwMDNDMERENjYwRTBCRTNDQkMxQUY3RjUyNUYyN0Y2MkYzNEUKKzoxMDVDNTAwMDYwMjRCRjZGNEIwQ0ZFMDZFMTU4MzU3QkU4MTMyNUE4ODYKKzoxMDVDNjAwMDUzMkJGREM0NDdCMUZCQzRDQzQ4MjVCQUNDMTU3NDQxQjUKKzoxMDVDNzAwMDM4OURBNjNDRTQwNTZBODhGMjVFRjA0NDAyRTVGNUIwODIKKzoxMDVDODAwMDQ5MDY4RUE3ODQyQUQ1QUZBRkY5RTY3MDlERDY0NUJFRUEKKzoxMDVDOTAwMDgxMzgwRjY2M0EyRjc1MDZFMTVEOTcxOEE0NjdFQzc5OTUKKzoxMDVDQTAwMEE5ODM3QTY5MDdCRUNGOUE3RjMxMUJFNzIxQ0Y0MTE1QkYKKzoxMDVDQjAwMDJGNzA1MzdDRTBGQzVFMTY3NkM0OTEyM0Y5REM1QUM3NDIKKzoxMDVDQzAwMEQyQjRDMUJEN0ZGRjhEMjNGODFGRDg3RkVFMkY3REJCREYKKzoxMDVDRDAwMDhGNDI3RkQ3Q0VENUZEOThDMjc2RUREMkQxNjlEQTI4MzIKKzoxMDVDRTAwMEM2Mjc4NDc2ODVBMDVGMjZEMjE0RTVFQzQxQzZDRkU3QUYKKzoxMDVDRjAwMDM4OTQwMEZBOEY5RERGMzU0ODBGRjc5RjNCOTVGQzhDNTkKKzoxMDVEMDAwMENFQzQ5QzY2Q0NBM0U4RkMyMUNGMDc4MDk1NUU0MTc5ODgKKzoxMDVEMTAwMDE4QjAzNzI5ODI3RTEwRjBGMzE3MzFGQ0ZDODU3NUJENzEKKzoxMDVEMjAwMEIxOEVEQkY5QjVBRkI1OURGQTMzNDQ3RjYwRjBBNEEzMjMKKzoxMDVEMzAwMEZDRjBCRjRFOTVEQkRCOUQ3NTNFODIwM0NDQzMwM0I4MDAKKzoxMDVENDAwMEFFNUVFOTc4NTkwRTExMEYxN0Y0MDFCQ0Y3NzM5OEYwQTUKKzoxMDVENTAwMDNFRDBEMTJCRkQ3MjFEOUM3RUY0OENBNURGN0M2NzZEM0YKKzoxMDVENjAwMDM2Q0E3Mzc5Njk3MzA5QkFBOEJGRDU4MzU3NjFCREQzQTEKKzoxMDVENzAwMEYzOEYzNERBQTE1RUQ1Q0NEQTNDNjRGNjlFNzRFNUU3QTUKKzoxMDVEODAwMEIxRDJGN0NFQUFCNzYzQkMwMkU5RTJFQjQ5QkY2Qjk3ODkKKzoxMDVEOTAwMEZBRDNCNDNFMTY3QThFNzI0MDNGRDdFRUZEREM4NjcwQTEKKzoxMDVEQTAwMDRCM0EzRTIxRjJGQzYzREJGRjgzNDMxMUUzNTZENkRCMjMKKzoxMDVEQjAwMDMxNEVEMkFBOTMzRDFCNUI2RjBBMUVBQTFBMTMyRDE3RjAKKzoxMDVEQzAwMDM4MEI2OURDMEMxQjhGNzdGNEFDQ0ZEN0JGNjhCRjRFQTQKKzoxMDVERDAwMDNBOTdENTFCMUYxNjE4QkMzRkMwRkJCNzExN0U4OUY3MzkKKzoxMDVERTAwMDVCMUM0MkRGRjZDNEZCMzRBQzA3NzhBN0U3MTVFMEZEODcKKzoxMDVERjAwMENFNEJFMTVEREFDRjE1NDIxRjU0RTBGRTA5RjBDREM3NkUKKzoxMDVFMDAwMDgxRTlFOTgzNjFEQzEyRDU0RDdDQkZGMDE5OTVFNDBEODEKKzoxMDVFMTAwMEVBNEZDRDRBOEZFQThGODVFMzZCMEZFMDNDMTc2RTU2NTEKKzoxMDVFMjAwMDg4M0ZFNzhBRjNBNTlGODk3Q0ZFRDgzQ0E4RjkzMzQyRDYKKzoxMDVFMzAwMEI0QUZEMzIzMUYyQTFDRTNDRkM1RTRCOTU3NDdGOTc0ODUKKzoxMDVFNDAwMDIwQ0Y0RkUzRTdCNTU0MjEwN0M1MEJGMjkzRDAwRURBMEMKKzoxMDVFNTAwMDZGRjdGRDlBRUNFQjM3NTRCNjM1MEVERTg5QjlEMkEyNTYKKzoxMDVFNjAwMEU1MDFCNTM2NEI3RTJDOUI5QjZDRTk3N0QyODI3Q0RBQzAKKzoxMDVFNzAwMEVGNUVFQ0YxNUREMjlGMUFCOEQ0QkE1RUU3ODRBQ0U3NkUKKzoxMDVFODAwMDhCMDZBREI0OUUyRjFBRDJENEQ3NTJGRkFBOERCOTk2RTUKKzoxMDVFOTAwMEVGQzNDMjU3NUJCRTVGQjM2M0E0QTUzQ0JDRjkzQTRCRUEKKzoxMDVFQTAwMEZENkI1QjI3NUFDQTIzMjJERkI2RDQxRjc1NzRCQUE1Q0YKKzoxMDVFQjAwMDNDQTZFRDFFNEJGREIxMjc2NjVCQkU4RjZGMkZCNzdDRjYKKzoxMDVFQzAwMEJGRkU5M0M1OTZGMkI3QkE3RTYwQjU0RjZDOENGNDIxRDUKKzoxMDVFRDAwMDRCNTA0ODNGQkU1NjM3MkUxQkYzQjBEOTY4NjUxMkUyQ0YKKzoxMDVFRTAwMEIzNThFNDExQkVCNjQ4QjcxOTVFN0NFNkQ5MENEMDUzNUUKKzoxMDVFRjAwMDA3RTc0REE1RjVGRUI1NDVFOTAxMUYzRDBCMDNFOENGQ0EKKzoxMDVGMDAwMDMwNzVDMkU4Nzg3OTlBOTM4REYxRDlFNjdDQTg2MkE3QkEKKzoxMDVGMTAwMEREQTJDRjI2MUJENkYyQ0I5MjZGMDY3MkJFNzkzNTQ2MzQKKzoxMDVGMjAwMDlGRDk2QjI3NDRDMDIyNjQ3RDE3MEVDRUMwRjE0MEJFQkUKKzoxMDVGMzAwMEY2MDlCREI2RUYwQUY1REE0MTk0QzNEM0U5OTE0NjJDRDAKKzoxMDVGNDAwMDRCRjk2MjYyNUQyRDEyN0MwNENGODA4RUY5OTA5MzNDRjgKKzoxMDVGNTAwMEI0RkUwNkYwQTU4RkRFODczNDkwOTM4OTRFN0ZGRkMzOTEKKzoxMDVGNjAwMDM4MUY5QjNGMTU5OTZGRDI4Q0QyRDc3ODZFQTU1ODdGN0EKKzoxMDVGNzAwMEQ5NTBEQjM3NTk3RkE1N0M2N0RBNDRCRTVBMEFDRjU3MjAKKzoxMDVGODAwMDdCNzI1RTVFMTIzM0UxRjU1RDg3NEREOENENERGQzY5QzUKKzoxMDVGOTAwMDFDNzU3NUU3QTlFNjlBREY3RjkyQTA5OUYyRTM5NDA1NTQKKzoxMDVGQTAwMDUzMjkzRjI0QjMxNzNEQTg2N0U2REVCNDFERjRBRjlFMjYKKzoxMDVGQjAwMEU1QTNBNzdDREYzOEMzMTYzN0VGRUI5Q0QwOUJEMkJFOUUKKzoxMDVGQzAwMDFBMTZCNUFGQ0UyMTFEQ0U2NkJFRjUzOEU2MjU1NUNGRTMKKzoxMDVGRDAwMEVDMjJGQjJBRDNENkI0RTgwOENFRUI1N0FBODg1N0ZBQUUKKzoxMDVGRTAwMEY4NzkyQTYxMTdDRkJCRTlEMTQ1NDc3MDFGRkE1Rjg3NUYKKzoxMDVGRjAwMDkwNUU5MkUzNkNBQTlCNzI5MzY2M0EzN0RFQkYxNzNGQkUKKzoxMDYwMDAwMDY5OTg5M0FGMEY0RkQ3MERCRDY5MkVFNTY5MUJGQzdDRDYKKzoxMDYwMTAwMEE4RTgzRjNCNTQ1NTgyNzZGMjQwOTE1RkZBQjgyRDdFNTYKKzoxMDYwMjAwMDdFNEI4MjkzQ0YyQjAzNDk4RUYwMUE2RTkyOEZCM0YzN0YKKzoxMDYwMzAwMERGRjM2QTMwOEZBNzZDQzEwNDI3RUVEMzVFREI1NkM4NEUKKzoxMDYwNDAwMEZEQkM4MDFGQ0Y5RDY2NDdFRTdEMUNFQjY3Njc2QTk0QTEKKzoxMDYwNTAwMERGMUEzQjdFQzZDQ0UwQ0ExQzk4NUY0MzhBQ0RFRkE2MTAKKzoxMDYwNjAwMDcyOTc4MkY1MUQwRjMxRDYwN0VBMzdGQ0E3NEFGMDM0NDQKKzoxMDYwNzAwMDFDMUM0RkY5MUUwRTc3MkQ0M0ZCNTVDRUVCNTBDQTUzMTcKKzoxMDYwODAwMDg0MUZCNTI1OTFENjNEMjZGNkMxNjU3Q0Y1NDJFNkRDMzgKKzoxMDYwOTAwMDM2QjQyQjJFNkNCMEQzNzgxNzYwOEUwNkY0N0ZBMTQ1RjIKKzoxMDYwQTAwMEE1N0RENjIzMjkwOTExMUI5NEQ1OTUxRTUyQTlEOTY4MUYKKzoxMDYwQjAwMDZCNDJGREY5MkQ5RUIwMkYyNzhBMTc2REUzMDQzQUZGM0UKKzoxMDYwQzAwMEUyRThDRkU3REY5MEUyMEVCQjczNjhERTI5Mzg2RjA5QTQKKzoxMDYwRDAwMEE3OUNGNzgwNUVGQ0NBMUIwNDFFQjNBRUVBM0U5N0MxQzQKKzoxMDYwRTAwMDkwOEY1NTQzQTM3RUU3MjVGMzczOTdFMUJBNzE4MjVFRTMKKzoxMDYwRjAwMEQ2RjkzNDY2NEVCRkY1NkUzQzJGNzQ1QzY1OTgwQUUyQTMKKzoxMDYxMDAwMDZCNkZBMkY5Q0Y4N0Y5NjM3QzM3MTZCRjY3N0QzOTVGNjQKKzoxMDYxMTAwMEQ4NTQ4MkYzMDY4NDUzREQ1ODQyRjNBMDdBRDBBRUVBMTUKKzoxMDYxMjAwMEM3MEE3QjJBMDdGOTMwMzg4NUU4REFENzQ2RTcwMDYzRTMKKzoxMDYxMzAwMEUxMkU3MUYyMzhFQjhENEUxRTBGRDAzM0YzNkVEQURFQTYKKzoxMDYxNDAwMDA3OUY4MzQ5MkU2RTc2RjZCQUNFREZFMkU0N0E4ODlFMDgKKzoxMDYxNTAwMDU3N0U5RjQwQzRCMkNFQUIwMTFCRDk0MUIxNzA4MURFRTYKKzoxMDYxNjAwMEJBREI2OUIyNkJENEE0ODcwQUIwREZERUVEQjE1RDA3OUMKKzoxMDYxNzAwMDc0QjRDN0RDOENFQzY0QTkyRjdCQjNDN0QwMEU0MzdFMEMKKzoxMDYxODAwMDkzNzZEODAyQTc1NUVGQzJGQ0NBQzVGQ0NBRTNDRDJGNEYKKzoxMDYxOTAwMDhFOUVBREMxN0FBN0VGODlDNEI1NjNEMkY0Rjg3QTY4NTAKKzoxMDYxQTAwMEIzQzA3RjhEQTEzMzhBMkJGNTEyMEY3RkMyMjlFREMxQjkKKzoxMDYxQjAwMEJEMDc3NEM0MkJDQzEzRjE5QTA5RkU3MTA5RTkxOTdCNTAKKzoxMDYxQzAwMERDQkNFRkNCRjkxOUI5NkJGMjc3MUZDNUZFQzA4RTQ1NjkKKzoxMDYxRDAwMEVFMzlERkU0NEI0QUI5ODQxRDYxNUZGQTJCOTcxOThGQzIKKzoxMDYxRTAwMDhGQzRGMDA3RTA2REJEOTNEQjdGRjRFQzgxQjc1NEMwNDIKKzoxMDYxRjAwMDlCQ0Q4MkI3Qzc5RDk3QjRGRkI4QkVFRDJCQ0UwRjlDNDkKKzoxMDYyMDAwMDEzNzgwMkJERkI3REVDRkZFQzZERTdFRTQ0REZCMEVBRjYKKzoxMDYyMTAwMEI2QUY4NDVGQ0JFQkE3MEJGRDBDN0VFRjNGN0NFQ0EzMEUKKzoxMDYyMjAwMEZBNEI3MDlDQThGRkRCNUU4ODdFQ0ZGMjk3QUY0QTQyQTQKKzoxMDYyMzAwMEZCNjlEMjlFQkIwRDdDOUU0RjFENENFQkNGRDkzRDhFOTIKKzoxMDYyNDAwMDAwOEU3MzM2ODVFN0QzOURERDMzRjYwOEM2MDczRUFCNzcKKzoxMDYyNTAwMDNCOUE2QkQ2Q0Y2NzVGM0M1NjY4ODc3RUNFRUUzRTU2NDQKKzoxMDYyNjAwMEE4NTFGRTZFRDg2MjhGNTc3REZEOUI0MjNDMjcyNUYzRDcKKzoxMDYyNzAwMDlFQkJFOUVDRTQ3QTdEODM4QkM3MUREMkQyRjU0NkNDNzgKKzoxMDYyODAwMEU3RUU0ODQ4QTY3OTNGOTY2RTdCMjQ1RTNDMDVENTFEMTcKKzoxMDYyOTAwMEVEQUI3Qjc0REE0NzVDM0NDQ0I3REM4REYxOTQxQzgzQUUKKzoxMDYyQTAwMEYyNjQ5NzJCODFBQzc5QjgwRjMyQ0RFOUM3Mzg3RDZBOUIKKzoxMDYyQjAwMDJFMUI5QTkzODRBMUM2MjA3MzAzMEIzOTVFNkJBMkUzNTUKKzoxMDYyQzAwMEEwMDk2REM2MDEzNDYzNjQ5QzQ1MkJFNkZBQjFFQjBFNjAKKzoxMDYyRDAwMDlERjJCQTEyMzVERjEzMzNBMTlDMzk0M0EzRjU0OUM2QTkKKzoxMDYyRTAwMDVERkU5QzkwNDJGMEM5Qjg0QjM3M0M2RkQ4NjlERDU4RDEKKzoxMDYyRjAwMDlDMTM2QzJBODI3NjhCQzdBNzUwM0JFRkI0Qjc4OURFMUMKKzoxMDYzMDAwMDlEM0U1QkM4OEVGM0QxQkEyOEZFRjI0Rjc1NDNEMzA2OEIKKzoxMDYzMTAwMDAzMUU4RDJDREI0RDY0ODM3QzA1RDgzMkU1RTc3QjM1OEQKKzoxMDYzMjAwMDE2NEEwMjdCNjQwREYwRUY2MEUwREY5NjNBMjdENTZGRTYKKzoxMDYzMzAwMDA0M0JDRTQ4QTE3QjBDQTJGNzcwOThGODdFNzc5RDQxNzQKKzoxMDYzNDAwMEY1N0U1Mjk3NDlFRDFFQURGM0QxQjM3QkRENjdCQzFERTEKKzoxMDYzNTAwMDk1RTNFOEMzQkZENzczNUQxREJGRUY0Mzk2RkY3RDM0NjAKKzoxMDYzNjAwMEQ4NTU0MEVGRDRCMTQwNTVDMDRCQUEzODFGMkVCRjNGN0YKKzoxMDYzNzAwMDU1RjdDNkEwNDk4MzA1MzIwMDlGN0QyQjhEMkRBQjJGOEQKKzoxMDYzODAwMDAxNkZBQTIzOUM4QzQ3ODAwN0JBNTg2ODUyMjZFNkUxMjEKKzoxMDYzOTAwMDc1M0Q1MjkyOENFNzE3RUEyNzREMUEwNjc4QzRGREU3M0YKKzoxMDYzQTAwMEVCQzA5NTcwQUQ2RDA4NEQwMDdFQThGNEQ1NjM1QzJFRjIKKzoxMDYzQjAwMEFCNTU2OUM2RjUyNkFCNzU3RDExQzZGOUExMUU5REVCREYKKzoxMDYzQzAwMDkzRkRCQTVDNUMzRjI1MUU3QTUyQzkxRDhFQzE3RkJFMEIKKzoxMDYzRDAwMDZGQ0VGNjI1ODZFMzlERkYxQ0VBRTI3QTZBQjA2OEI3QzUKKzoxMDYzRTAwMDQ2RUM3Qjc3NEQ3M0QzM0QwOTg5ODc1Q0M0MkY1OTdCN0QKKzoxMDYzRjAwMEFGQTFGRDM3NzcyRkZCQkVCMUZEMjQxRUZBMTNDNTY5OEYKKzoxMDY0MDAwMERENEFEMzAxREM0NzY0RjNCOEJEMjhGOUE5Qjc3NjU4NTMKKzoxMDY0MTAwMDVGQkY4MkZBOUQ3RThERTJCNjYwQTZEMkZDQ0U0RUVCQzcKKzoxMDY0MjAwMDRGRjhDNkZBRTY3QjNDM0FGNUY4NzZENDY4MTdCNzUzQ0UKKzoxMDY0MzAwMDU3RDhFM0VCNkY4RDcxRkI2MDc0NUIxN0VEMzdFMkJERUUKKzoxMDY0NDAwMDRBODhFRkFDRTM0RDBBRkFEMzY3MTU5RTJGRDExN0YwQjcKKzoxMDY0NTAwMEIxMUJDQTU5MTM5QUU4REVBNTZEQ0VFMDc1MkU4MEVGMDgKKzoxMDY0NjAwMDhGQzY4OUJDMTUwMDhFMkJGRkY3RDlEODRFRTI0MzJEN0QKKzoxMDY0NzAwMEQwOURBODRGQjJGNjdFQzBDRkUxRDhEQTc1Q0M0RkZCRTUKKzoxMDY0ODAwMENFQUExNzI4M0VBOEVBQTUzOUJDNUNCNzAyRTM4NzY5MDMKKzoxMDY0OTAwMERFRDIyREM4MjcyQ0Y0QzJBNEQ3QzBFNzc5NEM5QzJCQTAKKzoxMDY0QTAwMEM2MzdBOEY3RDZCODQ0MzlGNDdDNDMwMEY4NjQ4RDlEMEMKKzoxMDY0QjAwMDk3QkZCM0VBQjkwNjNDNzdCQ0M2NUVCQTEwQ0YyNTYzNzYKKzoxMDY0QzAwMEI5MDFGQTVGOTNEQzlDNjk4M0IyQkJGRUQ5ODZBMzAzNTIKKzoxMDY0RDAwMEIwMkNFQjNGNEI3Qzc2QTc4QjlGRUY2MUVFRDIyQ0M0QTgKKzoxMDY0RTAwMDdCNzdEOTgwRjI3MDUzNTlFMzY1RTZFNDRGMzlCRkFBNTAKKzoxMDY0RjAwMDQzN0YzQUQyMEZGOEE1N0EyRkJGODdBNjFCNkZBREVCNkIKKzoxMDY1MDAwMDE1NUM0RjdFNTI3N0Q0RDdBMDA5Mzk5MUZBMDNENkU1QUUKKzoxMDY1MTAwMEFCMzIxOUY5MTU3QTU4MDlFNzJBNzgxRkM3Q0E3NDczN0MKKzoxMDY1MjAwMDNFQzlBRDg5OEE1ODVGQTBCRDM5MkUxODczRUU4QzhFOTYKKzoxMDY1MzAwMEIyRTBGQURBQzBGMzM2NjJFOUZBNDY0MjUxNDNDMjE4RDEKKzoxMDY1NDAwMDNDMkYxQTVDQURBMjFFN0NDMTZFNTBERTdCQkI0NjdBMkUKKzoxMDY1NTAwMEJCNDNFNkJERDdEQUM5N0VBQjE0RTc1MEVEQ0I4MkFCQzcKKzoxMDY1NjAwMDg3QTE1Q0RDQUJGOTMxMEU1MDkxRDM1NDg0RjY0QkM1NTYKKzoxMDY1NzAwMDJCMzlGRTdBMTZDREEzQUQ0ODZFNEUxRkU5OEVFNkQxQkIKKzoxMDY1ODAwMENBRjI3MjExMzdDQTQ4QUU0RDRFQ0VDN0ZEOTJGNUQ5NDgKKzoxMDY1OTAwMEI4OUY1MUNEOUFFRUZCMDFDMkZCQTZDQTkwREYzRjNERUEKKzoxMDY1QTAwMDMwM0UwOUVGMDVBQTgyMzJDNkE5QUE1QThFRTk0MUE4NEYKKzoxMDY1QjAwMDU3OTBDMEVGQTNBOTZFMDFCRTcxRjM3QjYyMDI3OThDODQKKzoxMDY1QzAwMDZERDE4QzA0RDRGMzNGMDlENDVFOEQyNkVDMTNBRUEzQjkKKzoxMDY1RDAwMDkzNUM0MEQ3Njc3MzAzMDZEMkY5QTU1NTZGMzUzOEJGNzIKKzoxMDY1RTAwMDA1NjVERDE4QzY0NjYwRjk5RDA2RTRCMzhBMTEzNkNBMTIKKzoxMDY1RjAwMDgzNjRBMTc3NUUwQjBDMTZGQkIxNTA3RUM4OTUzMUQ5MzAKKzoxMDY2MDAwMDFDOTdDRTEyRUI3OENEMjYzNzlERDc4Mjc1Rjk3MUU0QjEKKzoxMDY2MTAwMEVGRUE4REI2MTBFRTZGRDk5QzZENzQ0RUU3MjU5NzVDNEUKKzoxMDY2MjAwMEZGQURFNzlCMzYyODVDMUY4NkU2RjEzOEU3OTI5QjUyNjgKKzoxMDY2MzAwMEJFNERFNzlCNTZFNDFBQTE0QkM0NUJDQjJFMjZEMDM5NDYKKzoxMDY2NDAwMDI2NTkyRTQ4RjA1MUZGNjU1QTg4RjY3OUNBMkU3QUU5MDQKKzoxMDY2NTAwMEZDRDNERjZFM0NBN0U1M0M1NUNGRjFEQzA0OEYxQ0FGQ0IKKzoxMDY2NjAwMDMyM0ExRUQxRjVEMEM4NUYzRDNFMThFOEI2NjQ5N0REREEKKzoxMDY2NzAwMEU2MzBGMUREOTI1RDYyRkZEQzE1QzhDMDdFRDI3NDhFMUIKKzoxMDY2ODAwMDY3ODZGRTFCRjAxQURENDFDM0NCMjEwREQ2ODE3NTUyMDIKKzoxMDY2OTAwMEJFNDMxRDBEOTMyNjIwRERBMkRGOTk1NUZFMDNFODNGODIKKzoxMDY2QTAwMEFGNEI5MEU1MEJGMUVCMjdDNEQ0Q0Y5NUZERkY4NUVBMDYKKzoxMDY2QjAwMEM3QzI5Mzk2MTAyRDNCQTFCRUY2MTc0Nzc3MTlFMTVCMzEKKzoxMDY2QzAwMDZGOEJFOTJGNDU5NkY1MTU5M0ZBNDdGOUVBQTE1NURFNDgKKzoxMDY2RDAwMEMzMjFFMEFCNzVDOTRENDVBOEZGQkJFNjMxMUZERTczOTIKKzoxMDY2RTAwMDg1RkNFQTM3RTlEQjg3NUM1Q0NGOTY1RENDQjVEMDNCQjcKKzoxMDY2RjAwMDhBRjczQzBCNUQ0RUQ3NjU1QUY2MjUxN0NDNUM0MkZCRkEKKzoxMDY3MDAwMEE3MEZBMUIwNjAzRjJDQzRDRkMxNkNFQUM3QzJBNkI4MjYKKzoxMDY3MTAwMENERkY4N0UzQUY4NUUzQkE1RUUwRjg4N0ZGNjIzODdDQTAKKzoxMDY3MjAwMDk2RjFBMjcwMENCNkMwRjdEN0MyQjFGNUNFQkM2RkU3MzgKKzoxMDY3MzAwMDQwOTVDNzk0OTAzMzE3RDc4NTFGRjFCQzM1MzU3OTkyQjIKKzoxMDY3NDAwMEFGMUVGNzRCN0VBNDUxREM3RDA4RTNGOTI4QjkxQTNCNTQKKzoxMDY3NTAwMEFBOEQ0NEY5NjkwQTYwREM4MjJERTNGNjBBQkM1RjY5MDAKKzoxMDY3NjAwMDFGNDlFQjEwRjkwQjgzRjYzQTY2NjE1RTQ1NkU1OTYwN0UKKzoxMDY3NzAwMDIxM0U1OUZGN0NEQThGOTFGQjk4NENDNEY1RTRGRUNCQTcKKzoxMDY3ODAwMDEwODMxNUUxQkQ3QzZGMjdDQ0EyNzUyQUI3NzQ2NjA1MEUKKzoxMDY3OTAwMEM2QkY1NUNGRTgwNDVDMEYxRkIzODU0MzM4NUVFODUxOTAKKzoxMDY3QTAwMDNFNUU5QTJERENFQzQ0N0JDOTNCRDhDMEY1MkVDRENCQTgKKzoxMDY3QjAwMEY1MUY1QjlENEZFQkRGNTY1QkVFRDU4QjAwOEUxNTRBQzgKKzoxMDY3QzAwMDUxQzIxQjg4RTdFNDVDOEE2M0UzN0JCQzA3NjdBQjU4NzQKKzoxMDY3RDAwMEI3RDQ2NEJGODFFQkQ0NTZCMTZFMkQxN0ZBNURCRTRGQUUKKzoxMDY3RTAwMDRDMjk5RDg1NzZDNEYyRDU0NTkzOURFMzUxMEYwNTU2RkUKKzoxMDY3RjAwMEY2ODFGNTY2RDlFQUEyMTU5OUUzNzFCREYxRTUzQTYxMzIKKzoxMDY4MDAwMDdENTk5NjUwQjRDMjA5OTNEOTVBRUZFQjZCMjQ0N0NCMEMKKzoxMDY4MTAwMDQzRkUwMkFCMzVFOTg5QTIxNTY4QTczNEI4MTc5N0EzRTAKKzoxMDY4MjAwMDlEMDNERjBGQTM1RkY4NkM4QUQ0M0JGQzdCQUVENDUzOEYKKzoxMDY4MzAwMEE4OTc0MDhGQTlGNURERTUxMEVBQTVEQzZFQkQ1MzQ0QUQKKzoxMDY4NDAwMDdBNjdGQkQzMkE5NUNCNjAzQ0I0N0I2MDFFMjFCQ0JGMkEKKzoxMDY4NTAwMEFCNkI4ODQ2RkU5MTBCNjA0OTgwQjI2QjU4MkVFRDZCOTYKKzoxMDY4NjAwMEMxQkM1OTAyQzZGNTg3RjFFRjcyNUY0MjFGNjJBMzdEN0EKKzoxMDY4NzAwMDA5QUM4Rjc4NzQ2NUYxRkFGQTM0N0U5RTU5RjdCOEM5N0QKKzoxMDY4ODAwMDZGOTNGQjFDQUFEODU3NEIxMDc5MjQ4QTMxOERDRUQ5MkYKKzoxMDY4OTAwMDNBRDc4RTVDOEM3RTk0NzNCMDc1RkY1ODhGQzkzNzUxOTAKKzoxMDY4QTAwMDYzRjM0RkRDMTFCMkJCMUExMjQ0OUNCOTBGQ0JBNDdCMkIKKzoxMDY4QjAwMDBEQzQ3QkM2RkMyM0YxOTk3RTc3NDMxMURENzdFNzYxMzgKKzoxMDY4QzAwMDA2RTYzQjY3MDYyM0NDNkMyRkM5QTcwM0Q2NTE5RjQ5MjgKKzoxMDY4RDAwMDZFMUM2RTE2ODg5N0VGNzA0RjIyQjc4N0REMTczNUVFNjYKKzoxMDY4RTAwMDI3MkE2MERGRTAzQUVBMTE3NkI4QjA4RkVDRjIxRUEyRjgKKzoxMDY4RjAwMDk4NzU1N0RBNEI3NjcxREZERDkyOUIyNjY2RTBCOTIxRjkKKzoxMDY5MDAwMEQ1MUQ3MEEyOUQ3M0MwMTg0OUZCMjkyQUYzREY1QTY0NzQKKzoxMDY5MTAwMEIyNzcxQTIyMzc1MTNDNTEzMzAyMENFRDlDRkRDMkNFQTYKKzoxMDY5MjAwMDUxMEQzRjMzREIzOThENzVFMDgwQzM1QUI1QUQzMDhGRTMKKzoxMDY5MzAwMEVFOTc3OUNBMTU3MTBFNDJGQTNFNjZGM0EzREUzODM0M0IKKzoxMDY5NDAwMEIyM0NBNDYwM0M3MTI5MjMzOURENTY5ODNFMTFGNzAzMEYKKzoxMDY5NTAwMEI2NjhBNTQ5RjdBMkJDMUM4N0YxN0M5QzZFN0NGRjc5QzgKKzoxMDY5NjAwMEI5ODJGMUVGMEJDRUQyMjRENDA3RUI5Mjk5QzU4RjJBQ0UKKzoxMDY5NzAwMDRFRTRGRUM4OTMwOURDRUU5NDdFNDIyM0MwMTMwMTM4MzYKKzoxMDY5ODAwMEI0OEI1N0QzN0QzQjQzODQ1REFBQ0Y5QzQ0RjEyRDRDRkYKKzoxMDY5OTAwMEQzQzE3OEE1ODNENTg2MEM3N0Y0M0UzOTQ3QTZDRDkyMkUKKzoxMDY5QTAwMDlGQTg1RDJDQTBGOERGOTMwOTM2Q0JGRUQxQzNFMjNFNTEKKzoxMDY5QjAwMDQwNTk3NkIyNUExRUU3MDU5RThFRTdCRkNEMTI3MDNBNTcKKzoxMDY5QzAwMEMwMUVGMjkxN0QxMkIzM0ZERkQzM0UyMjdCNDVEMkE3OUEKKzoxMDY5RDAwMERCNEU1MUY4QjlDRERFRUNBMzlBOEIzNjhCOUU4RDlFQTMKKzoxMDY5RTAwMDM3RDc0OTJGOUYxM0U3Rjk2NTlFODY1QkU4QjNDNkNDN0UKKzoxMDY5RjAwMDYwRDNGNTM5RDFGM0ZCOUFDOEQ3NTgyQkNFRURCMzRDMDEKKzoxMDZBMDAwMEFEQ0I3QzRFM0UxMUUzMzFGMEJENDFFNDZEMjRDNjlDMUMKKzoxMDZBMTAwMEJCNzdCOTk3OTBCRkUwMUFBQTU5Q0U2OTM5NTk5MERBNzUKKzoxMDZBMjAwMDM5N0NENkY3NUE2NkVDNzlGRTUwNzc5RTE2RTUxNTZBRTIKKzoxMDZBMzAwMEVDNDk4NTBFRUY3MzdCQjc5RkM4OTMzQTlCRjg3RTIxOTQKKzoxMDZBNDAwMENBMkZEOEJCM0Y3N0QyM0UwMjNGQzcyOUUzNTlERkQ0RDQKKzoxMDZBNTAwMDNFREU4Rjc2RDUxOEY0MEJBNzhDQzA3RUJGMjNENkEzNUQKKzoxMDZBNjAwMDJDNTY5QUM1MzcwNzlCMTlFNUY1MjRGOERCMTlCRjEzOTcKKzoxMDZBNzAwMDhDRUMyRDU1RUFCOUQwMEIwREU4NDdBNTk5RUQzQjkzNjkKKzoxMDZBODAwMEJEMzY3MENEMEIwRDBERENFRkEwRjI3NzU2QUQyNjNENzcKKzoxMDZBOTAwMEI4QzIyNUNCMkJBODBDRUI1NTA0RkQxRUI2QzdFMTQzQUQKKzoxMDZBQTAwMDdFODJGNjAxOTQxQjc2NjcxRUQ5Q0I2QTJFQjhCNDAwOUQKKzoxMDZBQjAwMEY3MjRCQzlGMTBFM0Y5N0IxQzVCRDE5RTA1QkZGNjRFMEIKKzoxMDZBQzAwMDk3ODk0RkNGN0E0RTY0QjNGQ0I4RkQ4NTJDRkQ2NTdGNjYKKzoxMDZBRDAwMEIzRkU2MEZDMTZDQzAzOTJERjI3NzkzNzQ2NTRERUNFMzYKKzoxMDZBRTAwMDg3RUQ1OEZGQjZGNzQzRDBGRjYzMkYzQkU4REUxMDc5MDAKKzoxMDZBRjAwMDBGNzIyQ0JGMTYyNjcyQkIwMUY1ODYzOURGNTI5RjM5MDMKKzoxMDZCMDAwMDM3ODBDQzI5RTVEMzkxOTk2MEM5RDM5NkYyQUE1RDFDNTAKKzoxMDZCMTAwMDRBRjIyOURCRUQ0RkM4RTFGNzczNjkwMThBQUI2OTE3QzcKKzoxMDZCMjAwMEYzNDlGRTlGMTQ3NDZEQUMzMzJFMzM0RTRBMkZFMzhDMjEKKzoxMDZCMzAwMEE0N0U3QTFGQTc1MEU4MDkyNkY2QjMzNEMzN0NDRjRCNTYKKzoxMDZCNDAwMDZGRjIxQUJCN0YxN0FCREZFNDUzRUFCN0REQTJGRjNCNUUKKzoxMDZCNTAwMDEyQURGMUUxRjI4RENENDc5MDg1N0U2MDBCQ0U0ODFDRTEKKzoxMDZCNjAwMDgzNzk1OUVGNzk3MTI5QUVCNDQ1MEE1MERFMUVFOEY5RjAKKzoxMDZCNzAwMEJFMUEyN0I3QzBDNUY3MjdGMjc2MkMzQTg4RUMzQTM3MDkKKzoxMDZCODAwMDMxRDg4NEY2Q0M3RDg5MjI2RTlGMDlFQjlBOEFFQjE2NjgKKzoxMDZCOTAwMENGMkI1QTg3REYzMUZFMUNGNDNEMzExOUY1RDRCNDEyRTYKKzoxMDZCQTAwMDhBM0Y2RjRCMkM3RDFEREJBRDlBNUU0OEIxMDIwOUY3MjEKKzoxMDZCQjAwMDlBM0E5RTBGMjdGNUE1MUJGMTA1RjUxRDVBMkRFMUNEM0IKKzoxMDZCQzAwMEUxMEU0NEQwQkU2ODRDRkNGNTY0RjRCMTU0OERDQjQxNjkKKzoxMDZCRDAwMEU1OUFCRDI0MDc0RUNENEY3Q0U1NzREQjdDQjhCRTNCMDcKKzoxMDZCRTAwMEMxQkZDMzc1QUZERTZEQTM3OEQyNzJCQ0E3MzcwN0NGMjQKKzoxMDZCRjAwMDAzNEMzNTUwNUUxNzdCNzIzM0Q4MjVGNEEzNzYzMTVEOTQKKzoxMDZDMDAwMEU4NUZFQkJEMzc3RkZCNzE1MkE5N0Q4RkZCNzUwRThENjEKKzoxMDZDMTAwMDhGNjA3RjlBOUY1MTdFMEIyMkUxNDM5MzVFOTVFQjdBQzIKKzoxMDZDMjAwMDZDQkJEOEZFMjUzRTI1N0UxRDVBOTBGMEFBQTNERDEwMzAKKzoxMDZDMzAwMDA3QUVDRERENzExOUFFMEYzM0E0RkU0QzdFM0IyRjAyQTMKKzoxMDZDNDAwMDZGQUI5NDc2MkZEQTI3QTAxNzM3MjdBMjVFMUNERUY1RUMKKzoxMDZDNTAwMDZGOEE4RkY0NjkzQUI3Njc0MkYyM0UwMUNCRkQ0NTMyNDUKKzoxMDZDNjAwMDJFQUZCQUI5NUQyM0UxNUZGQ0M2NjM0RUYzM0U1MTJDRjMKKzoxMDZDNzAwMEJDQjFFQkE1M0JERjlBNDdFMUVDOUYxMDczOUY2RjNERTIKKzoxMDZDODAwMDFGNDcyQjI1QkVCMTRGMDgzODUxNEVFQThEOTEwNkRBQzkKKzoxMDZDOTAwMDJCMEQ5QUVGNzcwMUNBRkZCMDkzREQwQzc2Qjg2NTdDQjcKKzoxMDZDQTAwMEY5NUMyN0VFRUYzRDJDRUNBOEQ4RUYxRTcxREY3MUVDRkMKKzoxMDZDQjAwMEZCOEYwNUZFRDYxREI4OUJGNDcwNkZGNEMzMDNDRjQ4NUQKKzoxMDZDQzAwMDVGNEYyRTMzRjBGQzhDNURDMEVCQkQ0Q0JGQkRGMUQxRUUKKzoxMDZDRDAwMDIzMDc3ODVDNTcxQkU3MENBMzhCMTUzQjlFNkEyRjBEOEYKKzoxMDZDRTAwMEUwNzkyRjc1MDQyMzdCNTcxREMwQzcwNzVBMUExODE3NjAKKzoxMDZDRjAwMEY2OEU0RTYxNDM0REVCRUNBQUMxRDNGOUZEQ0I2OTA2OEMKKzoxMDZEMDAwMDlEQkY1MzNEQjZEMjc4NzZBNkM0NTM2QkEyQ0RCMjNGOTkKKzoxMDZEMTAwMDlGMjlGOTY2QzhFRjY5M0ZDOUM0MzcxRkExN0U4OUU1N0QKKzoxMDZEMjAwMDlCNTZFNEUxMzQwRTg3OTk5RUFCMDZFNzY2QzRBMzRGRjkKKzoxMDZEMzAwMDU0MkY3MkJFQkExQzVGMTQ0RUUwRkM5RTAxQ0YyRDMwNjIKKzoxMDZENDAwMDhGMTY3MTlGNDYxNUUyMEFGQzlEQ0FCQkRDQ0M4MDc1OEMKKzoxMDZENTAwMEVEMkI0RkQxMTcwODVGNjFEQjQxOUVFRkRFOTI0NkNFRUYKKzoxMDZENjAwMDVGRTU4NEY4RjJCMkM4Q0RFOUIyQzhDREUzQTg0OTI3RkYKKzoxMDZENzAwMDAyM0ZDNTdCQzM1QkRBMTI3QzBBN0M2QTQ5ODlBRkE3RjQKKzoxMDZEODAwMDBCREM1MkNFNDRGRTg0RDY1RTgwRjY4OEFDNUYzOEQzRUUKKzoxMDZEOTAwMDNBOUVDRkNERDdCRjAxQjI1REU4RDYxNEI0Q0JBNjYyODAKKzoxMDZEQTAwMDE3ODBDNzQxN0U4NUU3NzFCNDI2ODZGMTdFN0FCMDZBODYKKzoxMDZEQjAwMEI1REIwMEFGM0I4NEZGQjcwM0ZDQzI2OUQwNkY3QTAyM0EKKzoxMDZEQzAwMDBCRTJCQ0QzRkE0MDM5OUZEQTA3NzZCOUEzRkRCREM5RkYKKzoxMDZERDAwMDUxQzYyNjBGMkFERDhFRkQ0RENFQzgxQUIxM0M4N0I3QUQKKzoxMDZERTAwMEM3N0UwRTI3QjAwNkU3QzgyOERFNkY3NTAwQ0JBNUUwOEEKKzoxMDZERjAwMEY3NTBERjQ1RjlEMUY3ODc1MTc2QTE1RTdBN0E3QjgxMkEKKzoxMDZFMDAwMDgyRkI5MkI2NDAzQUFFMjMxRjFERkIwMUU1QzEyRUMwQTYKKzoxMDZFMTAwMDdCOEM5Qzc4QTU4NDRBN0U1MkUxODk1MkJBQjdFQzUzQTgKKzoxMDZFMjAwMEZDOTg4NUY3MUQ5NTBFNzM4RkMxRkMzMEVCM0RBNDZDNkIKKzoxMDZFMzAwMDNCM0YzRjIzRjFENTkzMUZCOEZFMDEzODQzQ0UxNDBCREYKKzoxMDZFNDAwMDlDNkMxQ0MyRURFNEVENjJGMURCRkQxNDdDMkNFOTA5QzUKKzoxMDZFNTAwMEU4QjlDNjIzRTg4OTcyREEyMkVFQzVFQ0U2MUI3MUFGMDkKKzoxMDZFNjAwMDQyODdCODBGNkE3NkEyQjgxN0NBRTBGRTk1QkNFN0E0QkQKKzoxMDZFNzAwMDQ1MEIyNEEyN0QzRUJCM0IzRjIxNDBFNzhGMkE1RDgxMkQKKzoxMDZFODAwMEE0RjE0OEI3NjNEQzdGM0E1REM0RUZBNzNCNkQwRjI0RTQKKzoxMDZFOTAwMEExQkM5RTNFQTYyQUY1OTRERkMxRjMzRTY1NUVERDY5ODYKKzoxMDZFQTAwMEJCNkZDREQ1RjA3RENFM0ZBQjgxN0FGQTZDRjUwQjNBNTYKKzoxMDZFQjAwMDU4NjBENEJGQTI5RkQ0QUFEMjNFNjRDRUEzQjNENEUxN0IKKzoxMDZFQzAwMDUwN0YyRTM4MENBODhGNjYxN0JCNDM2OEM3QjVGQ0JFMzEKKzoxMDZFRDAwMEY2N0Q1Q0NGRTYzQ0VERjAyRDgzNzE1RURCMzhFQTBCOEUKKzoxMDZFRTAwMDJDOUY1QUVCRjEzOTI4REU5QUFCRTBGREYxNEJENkU3NDcKKzoxMDZFRjAwMDE4QjQwRkI5OTQ4OTM4RjNDNDkyNjI1ODgzOUZDN0ExMUMKKzoxMDZGMDAwMEU1RkU4NTkzRUU5MzE3REZBQjFCMjdDMUZDQUU0RTZCRkUKKzoxMDZGMTAwMEIxMjEyQUZGQjBCNkJBMTFDRkIzQURBODJGQ0RDNDM4NzYKKzoxMDZGMjAwMEMyNUFGN0U0NDY4QzIzQTRBNzA3REE2RTgwNzUzREUyQzcKKzoxMDZGMzAwMEJFQjEwNENCMkQ0RkM5RkVBNjM0NjJEQ0UwMTdCNjYwQUIKKzoxMDZGNDAwMDhFMDJERjRGQkI2Nzk1NTBGRUY1MjBEOUZGOTJDNjAwMzkKKzoxMDZGNTAwMEFDMDlCMzdGN0NENTE3MjczMDVGN0I1RDYzMDlEQTA1MDkKKzoxMDZGNjAwMDQwNTc2MTVGQUYyMUY4RTY0RDkwRTUyNkJENzgzMEI0MUIKKzoxMDZGNzAwMDRGNjQ5Njc4QUEzRDFBOTdBMDc4NkQ0QkI3N0RCRUExNTUKKzoxMDZGODAwMDA0RTMxMDczMjZENjE2NkJEMDdGRTFCQUE3MUFGMzQxM0IKKzoxMDZGOTAwMEM1OEU2RDJBMzIwMjUwQkU3RUREQTYxMjVDRkY1QTU4QTUKKzoxMDZGQTAwMEEwMDJFRDkyMUJENjNENUQ4MjcxRjlENDNFRDZGRTUzMTAKKzoxMDZGQjAwMDU1MTE5NzY3REIxQUIxQkZDMjk5ODExMTBBQjRGRjk3QzcKKzoxMDZGQzAwMDc1MkYzNUEyMUY5Mjg2RjlCOTMwREUwNUNGOUYxQTQzN0YKKzoxMDZGRDAwMEZEQTNGQUYzOTZFODNENUFBQjUxMEVBQTlDRUQ0NzMwNUIKKzoxMDZGRTAwMDU0OUJCREI0NEJFNzc5REI0MjZGRjRFN0ZDREM1RDFFREMKKzoxMDZGRjAwMERBQ0VGM0VCNjUzOTkzOTc1Qjk2QzVENzQzOEY3QUI5QjEKKzoxMDcwMDAwMEJGRDk5MjEwRkZGQkFCNDJFRjQ4Nzk0OTNBQzEwMjNCMkUKKzoxMDcwMTAwMEUzQzhDRDE2QjdGQkZGNDhFRTVBRkY2RkU5QjVFNENCRTYKKzoxMDcwMjAwMEU4QjU2NEE5RDcwNDNFRjNBRDdBMUE4NjExRkFGRUVBRjAKKzoxMDcwMzAwMDVDRDQwRjBCMzBEOUNBNjQyRjE0QjY0REE3NzVFNDdCMEUKKzoxMDcwNDAwMDVFNkUzRjMzMUY2RjlGNTZDQ0YzOURCQTVFNDlFNEY3RTcKKzoxMDcwNTAwMEE0M0FEQkYyQ0NGQkEyQzcwNTNFOEExRjlFRkEwNDlEMzAKKzoxMDcwNjAwMDc3NkZCMzMzM0FBN0IyQUJFODkyNzlBNjk1MThERjM1QkMKKzoxMDcwNzAwMEY5MUY5NTVBODRGQ0ZBNEE4Q0VGOEVDMkZFREVBNDczODcKKzoxMDcwODAwMEE2RDgwRjlFNDNDMTdEMEM4Q0NGQTYyRDhGNEY3RjY5NTQKKzoxMDcwOTAwMDRGNTU1RTM0NThBODRGQ0Y3NTM3REE3RjJBMEI4REJBMUIKKzoxMDcwQTAwMEZDQkNBMkZENTlFMzBGM0RGQkQzQzU3RTUwQ0NGQUE4MzIKKzoxMDcwQjAwMEM3ODdGM0NGOTI0RjAxREYzNjEzN0ZDRDEzRkMyNkY3M0UKKzoxMDcwQzAwMDk1Q0ZFRDE5QjZENUJDOEYyRkNGODc4MTdFRkUyOUZFRDcKKzoxMDcwRDAwMDBFNDYwOEY0M0NEQTk5ODU1QUUwNjZBQzVGRDg5NjQyRDEKKzoxMDcwRTAwMEZCNEM5MjNGMjQ1RjQ4QkFCNkE0RDQ1MkRDQUVFQjQ5QzUKKzoxMDcwRjAwMDg1Q0VFQkM1QzI2NUYzNzAzQTE2NkVFNEY3MzM2NkNDMDUKKzoxMDcxMDAwMDBDQUFFNkZCRTRBNTNDNDBGRjJEQTJGRkQxRTM0ODdFOUMKKzoxMDcxMTAwMDM2NzM3OTAwQjlCOTE3RTUxN0VGREJDMTc5RjhEQjBCRTYKKzoxMDcxMjAwMENDQkYzQjIxRTFBRjQwNUU0QzIzM0E3MkZDQkZFQ0EyRTYKKzoxMDcxMzAwMEZERkVEODc1MzI4QUZGQkU5N0ExNjczNkQxNTNEQTQxN0EKKzoxMDcxNDAwMDk1QkRBRTk3NUU5RUJGNzgyMkUyRjU2MUZDMDhGOTFGRkYKKzoxMDcxNTAwMEY1NDlGMzg3NzQ3RjVDNEJBQkNBMTQxRjlGMzdFQUFEQzgKKzoxMDcxNjAwMEMyNkU3REZDRjVFMTg5MUFEOTYzRDFGNUMzNDc3Njk5RTIKKzoxMDcxNzAwMEQ0OUYxMUE3MzM1QUJGNkJDREQ3OTM3MTlGMzk1NURDN0MKKzoxMDcxODAwMENGOUNBQUUyMTFFQzI4MUMyMzNDNUM4RjhEMEJDNjhGOTAKKzoxMDcxOTAwMDg3MTZCODNEOUMwRTYyMUU0RjJFOURDODNFODRGOTdGMTcKKzoxMDcxQTAwMDRGQUNGM0UzREE0M0Y0RkI0OTc2QzRFMzk4MjgzRUE0RkEKKzoxMDcxQjAwMDNFQkJENUQxRkVBMjM4Rjc2MkUxNDc1OTA2M0JBN0RBQkMKKzoxMDcxQzAwMDM2QzhGNEREQ0RGNUFFMUMwRkUwNkRDMEZCOThEM0UwMDIKKzoxMDcxRDAwMDg5NTdGRjVGRjBFNDg4N0Q3N0NFOTcyN0Y3NjQ2Q0ExMkQKKzoxMDcxRTAwMERGNkQxODE0MTg4MUZBNDZGMjE3QUMyNzYyQkVCNkZCQTEKKzoxMDcxRjAwMEE3QkIzOUZGNEY4RjQzODdFOTgyQ0ZFNjZERTRGMzZGN0EKKzoxMDcyMDAwMEY5OEZFMjlCOTEwRjVBREU0QTQ5NUU2NkUyRjc3QUExNTYKKzoxMDcyMTAwMDU3NjRCRjUyOUU2NDNCRjk3RDg2RThFRjVFOEY5NzlFNzAKKzoxMDcyMjAwMEY1MDI3RjA4NDdCQ0ZDMEFEOTBFRTc0QkZBN0EyNUQ3NEUKKzoxMDcyMzAwMEQ3MzBFRjEwRDIwOUU2MURDMjczRjgxNzNDNEEwQzVFMzYKKzoxMDcyNDAwMEM1RkEyMEYwNURBNTAzOUUwMThGM0JFQ0ExQkU5OEFGNkYKKzoxMDcyNTAwMDk1QTZGMjdDOThDQkM5MkZDQzQ3RkM4RTgwODdGNDRFNDQKKzoxMDcyNjAwMDZDRkY2QjA1N0Y2QzExRjdFODFFQjY4MTNDQTM5Q0I5REYKKzoxMDcyNzAwMDM5QkNFN0Y2NjQ1MUJGNzVBMkRFRTVGNUUxOTVDOUNGRUIKKzoxMDcyODAwMDE2OTFBRjAyRjA1MzNFNjZENUFCRkRCNjU4RTFBRjE3OEQKKzoxMDcyOTAwMEYwMDc5N0UzMzlDMkQ0Mjc5ODdGMzkyM0JDNDUxMDVGQTQKKzoxMDcyQTAwMDI5NUVCRTlFQjRFODQxQjJERkJBOUU2NEU0QjcwRTAxMjcKKzoxMDcyQjAwMDNCQzIwN0U1OUE1MkY3NDgyNTI3MkFBNzc5Q0QwQUQxN0MKKzoxMDcyQzAwMEIxNzAwM0FDRDM4ODM3QTdDNERCMUIzQkNERTM2RUYwQjIKKzoxMDcyRDAwMDc4MkNGNzEwNTQwQUZBMEY4MUY1RkRBNzAwRUYxMEU4OUIKKzoxMDcyRTAwMEU3NDU4MjlCQzM3NUYyRjFFNkVCMzEzRUQ3QkRERTBCN0QKKzoxMDcyRjAwMEJFRTgwOTY3NDRFRkM3RTFBNEJDMEFCNDc3N0NBM0EzNDYKKzoxMDczMDAwMDcwNjJGRjk0RTdFMzJFNUQ4NkZENTZGRjY2NzczRjczNUMKKzoxMDczMTAwMEJGMkY3NkY3M0I3QkEyMEJGNUQ4N0FEMEFCQTQwRTgyQjkKKzoxMDczMjAwMDg3RjAxQ0M5RENCREM5MDZERUY3MDBGRTgyMERGRDQyRjgKKzoxMDczMzAwMDM5RUU1QzRERkVFRTRGN0IyMURFNzc5RUQ3M0QwRUU4QTkKKzoxMDczNDAwMDRGOTNGRTNCRTA3MUYzRkFDRTgzMDNGMTFFNkRBNkYxN0QKKzoxMDczNTAwMEY1MjlBREU5RjQ4RjcwMUZBMkI3NzVGNTZGQzUwRjQwMjEKKzoxMDczNjAwMDQ3OUE3N0Q3MkU5ODk3MkY4QUJGOTZFNjU5Q0I1Q0E4NzUKKzoxMDczNzAwMDJGNEYzMDNGRUE0QjM5QUYyMTMzREJCRDk4N0Y1MzIzOEEKKzoxMDczODAwMEY0MjhFMEM1ODY3QzkwRkFDRjNFQjZEQzY3RDJDRjgyODcKKzoxMDczOTAwMDdFNDMxOTk3MzdFOTlGMENDNTBEMTIyOEJGRTMyOTEwQ0EKKzoxMDczQTAwMDdBOEI1MTlDRTBFNEFCRkI3RUNBRUZFREUwRjRBQTk5NDYKKzoxMDczQjAwMEM5RTkyQkU1RjUyQjRGMzBDNThCRjZFOTVEMEY0REU0QTAKKzoxMDczQzAwMDk3RTE0NkU4OUVFNkNBMEQ3QzFDQThEN0NDNDg2RURCNDgKKzoxMDczRDAwMEIyNjc2MkZFMjVGMkQzOTg5RTc0NEIyRDZENzY1MTdCNzkKKzoxMDczRTAwMEMxRkY2NzVGMTkxRTQ2M0U0Q0JCQkRBQjE4REYwMzNGQjQKKzoxMDczRjAwMDEwM0MyRENEOUUzMEZBQ0I2NDJGNjNGQjdEMEE1RkJGMUUKKzoxMDc0MDAwMDU4OTBGMDMyNzdBNkUxMzdGMzg5ODRBRjlCRUUwQ0U4MTEKKzoxMDc0MTAwMDNFM0NGQTdFQzg0Q0RFNkY0RDJCRjRDQkZCMjFGOUE5MjQKKzoxMDc0MjAwMEJDOUZGMUZCQTkwNTdEODBENTQyOEU5MTUxQkQwM0U1M0UKKzoxMDc0MzAwMDg4MjMyNThBNDc4OTNGRDlCRUZBN0VGRURCM0QxODJGNzcKKzoxMDc0NDAwMDQwM0ZBRjg2QjU1M0RDQjQ1MjJERUQ4RkZFMUFDQjcwQTIKKzoxMDc0NTAwMEQwMzk1QkYwN0Y0OUZGMUM3NjMxQ0QwNUVENUY4NzI3ODIKKzoxMDc0NjAwMEFFRUY5M0Q1NDU3NDFFNkFGMjIwODVFNDFDMjQ0OUM2MEMKKzoxMDc0NzAwMENCRThGN0M2NkVCRDIxOTFFN0JEN0RGNUREQzEzODlGMzQKKzoxMDc0ODAwMEI0NDRDRTc3RDA4RjUzRjRFMzI0M0I1NUU4QzM1RjY3MTEKKzoxMDc0OTAwMDgzM0UzNEY5QTU4NzE1ODVGQTM5RkNBRDZCQjYyRTU3QjYKKzoxMDc0QTAwMEEyRjNDNEZFRDA2RTM4QUM0Q0VCNEZGNkFDODg2QjAwNDgKKzoxMDc0QjAwMERFMkNGOTc4NTFGRTBEMDlCOERBQjNGMUJCRDk0RjQyOTEKKzoxMDc0QzAwMEJGQTZEQkNGNjI0OTBGREYwODdFRDVEODI5Q0QxMUJDMUUKKzoxMDc0RDAwMDUyQkIzRTk0N0NFM0Y3NjBEQ0M5RTA2N0I5NjBGRUZEMTcKKzoxMDc0RTAwMDkxOEZEMTJGQzgwOUE5NUU4NDZCODg0MkY3NDcxRjQ5NDUKKzoxMDc0RjAwMDA4RTZGMzdCODhGOTM4RTkyMkVFOTUyRUYyQjREMTlFQTYKKzoxMDc1MDAwMEM3RTczNjJGNUYyRjg2MjdGMUY1RTVBMTI0NUU0RUY3RkEKKzoxMDc1MTAwMEM2OEY5MzNEMjFCRUQ3ODg3QkJCNTcxN0M1Q0YwNzFDQUQKKzoxMDc1MjAwMEU3QjVDNjM5NkYxNUZCM0VFMDZGOERGM0E2RjFGQkUwQzIKKzoxMDc1MzAwMDc5OUUzMkRGMjcwMkJCOTZGMDVCRkNGMDRDREFGN0JDOTkKKzoxMDc1NDAwMEQwNzY0NzEyQkY5RjgyQ0JGRkM3NEFFMERGRUU1MkYwRjIKKzoxMDc1NTAwMDU5NEFGNzAzODY3RUFCNTJCRUZGNDc0NkMwOEJGOTYxOUUKKzoxMDc1NjAwMDU1MDlGMUYzQ0ZFRjE1NzA1NDg5Rjk5RkFFRTNGNzQ5NTAKKzoxMDc1NzAwMENDQzNGRDQ4RDAxN0I3MEFGRjZDNDFEMzZEMjU0OEVGNDcKKzoxMDc1ODAwMDA1RTBCRkUzN0VBNENDN0I5MEY0MkREQkE0NUFGNjIzNjgKKzoxMDc1OTAwMEU2RTE3RTY0OUZCRkM2N0ZGMEY3RTIzRjhDQjZGODBGNEUKKzoxMDc1QTAwMDcyREM1ODNGRTI2NDVEQTY2NURGNjQ3NkQzMjA3MThGOUMKKzoxMDc1QjAwMDA3QUYzRjg3RjkwOUVFMzkyQkZCNTlGNjRGRDlDQUI0MEIKKzoxMDc1QzAwMDJCQkJFNzE0RkM4NjUwNUNGODc0RDJBRkYyRkRDOTNBQ0QKKzoxMDc1RDAwMDI3MEI5OUUxRjg2NDMwRTU4RDhDRjMwNjFGRjA1QUUwMzMKKzoxMDc1RTAwMDQ4NjQyMTMzMUM2QzAyRkY1RDJGMTc4RjVCMDNERDQzNjIKKzoxMDc1RjAwMDY2N0IzQTE2QUU1NURFQkZENjRGQ0JFRDA1Q0Y3OUZGOTEKKzoxMDc2MDAwMDI1N0U1QUUxMDRBRUNGRjA1MjIyQ0M4MTE5M0JDOTZBRTMKKzoxMDc2MTAwMDM3NkZGNkYyNzU3MkIzMzdEMTYyMzdDRjlENjlBREI3NjgKKzoxMDc2MjAwMDQ1RDREQjIyRUE1RENFRkYzN0RCQ0JDQTIwRDQxQkJDQkUKKzoxMDc2MzAwMDNGRjk3QjNDMzk2N0RFQTJCQ0QzRjdCQ0RDMEUzODlFMzkKKzoxMDc2NDAwMDE0RDg4MUYyQjg1NkU0RTk2RkY5Q0JBMUNDMzk2ODVGNjAKKzoxMDc2NTAwMEZDQUI5REYyMDQ4QTM2MkY1OThFNzlENEVFNjZDNUEwMTQKKzoxMDc2NjAwMDczNEFBRDU2M0VGQUM3QTVDRDAzRTcwMjNFNUUxMjc0REIKKzoxMDc2NzAwMEFBRjRGMzc5NTRGQTIzRkE2MDM3RTY3NUYzRjFGQjM3OEQKKzoxMDc2ODAwMDFGNTAzNDkzOUVFODVGQzZFQkVERjNEQTJENzFGNzAzREMKKzoxMDc2OTAwMDVFN0U4RkM0MkZCRDMyM0UxODNFNzA1MzJBRDYwRjY4Q0YKKzoxMDc2QTAwMEI4QUVGNEM1REZDMTAxNzhGQUQ2MzIzQTA3RDU3NzM0REYKKzoxMDc2QjAwMEI3QzdGRTcxRjQxNjA1N0Y5NzRCQ0U3M0E1NkQ1QUJFMDIKKzoxMDc2QzAwMDAxRUQ1NkE2MjdGQTUxNEY2NzFCQzFENzcxOUU5NUVGNjIKKzoxMDc2RDAwMDQ1MjIxOEJFMTlGQjVFOUI4NkZFOTJERjA4MUM0NTdFODQKKzoxMDc2RTAwMDk1RjNGMkE5NDY1RjVDNkYxMkRGRTNGMDM1NzVDNzIxQjEKKzoxMDc2RjAwMEI4OUU2NjZDOERGMDVGQjY3MjNCNTY2NTQ3MTlCNzczREUKKzoxMDc3MDAwMDY5QkYzNjdERDk1MDVBMkZFNDdDRDI1Mzg0QkU0RDY3NzEKKzoxMDc3MTAwMEMxREQ2NDZGQjM5NUI0REUzOUY5RkE5OUJFOENGRjhFODIKKzoxMDc3MjAwMDlFQTQ2NzM0N0UzMjZDMjRDNjRGMDZBRDhENjhCM0ExMkIKKzoxMDc3MzAwMEREQUI5QjZDNzFFRkREMzgyNUYwMEVGM0Y4MDBFNzE3MzkKKzoxMDc3NDAwMDRCOUY1RUQ3MUQ1MUNGREU0QjVDNEFGMjdCRTI5NEY4MzMKKzoxMDc3NTAwMEZFMUU2MzhGRDBGN0EyQ0RBOUY3OTA1QzM2RTg3NDRGNzgKKzoxMDc3NjAwMEEyQzRCRkRGMjhGRDIzQzJEM0I3Nzk4QjgyQjgzOTI5RTEKKzoxMDc3NzAwMEYyMTk0RUFFRkVBOTgyRjZENjc3MTczMjQzOERDMzRGNkIKKzoxMDc3ODAwMERERjJCQTc0RjdDMEI5MjY3RDAzRkQxMzNEQjZDNEU0M0IKKzoxMDc3OTAwMEE3NEJGRkM0OURDNEY1RjgzQ0EzNTQ0RDRBQTM3QzYxOUMKKzoxMDc3QTAwMDhBRTMyRERDQ0U3RjhGQTM1NzdDNUMyMUJFOTQzMkVFMjIKKzoxMDc3QjAwMEM3NTRDRUUwQkY0NzVBQjQ1OTIzN0E1NzM0RjBERjIzNzkKKzoxMDc3QzAwMEFDRENCOThCQ0VFM0IxODc5ODFGRTVCREIyNzk5NzMyQjcKKzoxMDc3RDAwMDE3QzZBREQ4Qjk0Qjk5NjdDMjVGQkZDQTMwRTU3NTVGQjAKKzoxMDc3RTAwMEU1OTE3MUVBMDhERDNCMTZDQkQ3MThERkM3RjVGRDg4QjgKKzoxMDc3RjAwMDhCQ0I3QjQ3OTEzQjg0NzFFQjBFN0JCMDEyRUI3NTY0QjYKKzoxMDc4MDAwMDI1RkE3MTdGNTRFMkZCRjU1RDM3RDJGRDA3OUVERDhFRDAKKzoxMDc4MTAwMDA4M0U1N0RBQjY2NjNBQTFERUNBQUI3NTNGRjI5MURGOTEKKzoxMDc4MjAwMDA4MEU0NUJDQTQ2OEE1MkREODNFMzlENUUzQzdCOEI3MjYKKzoxMDc4MzAwMENGQzE0NkQyM0E3Nzg1NzgxODFCQzMwRjYzMUZFMjcyMTcKKzoxMDc4NDAwMDcyNEY5MjU3REE1OTk0NkYzNTMxQzkyM0VEMEVEMjRGRUEKKzoxMDc4NTAwMDQ3RUM3QzFFQkIxOTg3Nzc5QjM3MzAxNkUxNjE0N0Y5RUYKKzoxMDc4NjAwMEVGMjlGNEFEOEMyODk4QTcxMjNCNkU5NDlGMDJERjRBNTMKKzoxMDc4NzAwMEZBMDZGQzBERjY5MjhFN0FCRDQyRTg5OUEyQ0REQjk1MTAKKzoxMDc4ODAwMDBGNEQ3MDRGNDU2MzA0Rjk3M0U3MTYwNUUzMkFGMDlEMjkKKzoxMDc4OTAwMEY0MENENDY3OTgwRkQ1NzcyNzhGMjc1NUMwRjc3OTI2MzIKKzoxMDc4QTAwMEJEMjJFNzExNDdCRkRDODZGMEI5REY2QjdCOERFQjk3MUMKKzoxMDc4QjAwMDA4OEYyMzBCNzg2M0U5Nzk3RjEyQjdEQjRBNjA1OUE1RkIKKzoxMDc4QzAwMEY3N0E2ODI4RkE5QjQ3NzIxM0E4M0YyOUVGQjFGMjc5M0IKKzoxMDc4RDAwMEJGRTBGM0JFOUJCNjJCMzYzN0M1REJDOUZFOTJGMEM5QkQKKzoxMDc4RTAwMDdBQzc5MzI2Q0U0OTFBODM3ODY4MjMzQzU0NkREMjY4QjAKKzoxMDc4RjAwMDNFOTNGNUQyQzE4QjRDRjJCMDQ4RjQ3N0YwQUVGN0U5ODUKKzoxMDc5MDAwMDVFQTAwRDNGM0Y0NkZDNThENUE0NzBCQkJGRTk5ODdFRjIKKzoxMDc5MTAwMDA3QUUyQkExRTc1NERDMUZCOTk5MkZFNUVDNzE3MTVGMUQKKzoxMDc5MjAwMEQ2Q0QyRDVDRkY1NkI1RUNEMkYwN0U0OUM5QTczOTY3OUMKKzoxMDc5MzAwMDBFRDIzRDVCNTVDRDBFODZGQkE1QzA3RkRGNDNGQ0M0NTgKKzoxMDc5NDAwMEYyQTlDNDhGRDRBRkJERDExM0Y0MTAzRkE3MTBEMjQ1MTQKKzoxMDc5NTAwMDlDM0E5ODMzREQxM0Q1Q0ZEQkJDNjI3RkQ0Q0RERjZGOEIKKzoxMDc5NjAwMDQ4RTJFNTI4RkYwNDU3MjU1OUY0QUI4QkU0MjJFN0NDMjUKKzoxMDc5NzAwMEM4ODM5ODBGNUFFNTU3RTg1QzY1NkFCMUY4N0QzMjEzMDEKKzoxMDc5ODAwMDVDRTZGMzMxQjFGQTExRTNFMTNDN0VEMjlFM0RERDc0NTkKKzoxMDc5OTAwMDNFQUU1QkNGOEJGNjRGMjBCREY5RkIwODdGQ0Y3MjcxRjcKKzoxMDc5QTAwMEJEOTZGMEM3RDJFRjkwQjBDN0UzRjA1OTM4MjlDRTNBNzAKKzoxMDc5QjAwMDI2RDdGNTlDQTc3NzZCNzg4RjkyRTQ5RjlCOTFFRTI2NTQKKzoxMDc5QzAwMEZFRjk1OTEyQkY4RkY3Njc0OTFBRjVGRjc4MTFERkE3NDMKKzoxMDc5RDAwMDdBRENDRUQ3QUZDN0VCOUQ5NEJGRjlGQUREM0M5RkNDRTQKKzoxMDc5RTAwMDczOEYxRUMxRTc2MURCRUM0QUZDN0VCODJGODc2M0E1NkQKKzoxMDc5RjAwMDZEMTk5REY3MDNCOTZDNEUyMkZFRjEzMkFFMUZCOTNFRjAKKzoxMDdBMDAwMERDRjAxMkQ3Njc5NTIxMzdERDc3NUExOUJDN0QyRUU1NUEKKzoxMDdBMTAwMEQ5QTZCQUZDNzQzRjY4RjAzNUZEMEU0RjRGQkVGMkVEQUIKKzoxMDdBMjAwMDNFNDBCRjhCN0M3MzMzOTczRjQ5MDdEMEE3QzQ1RjUyNUEKKzoxMDdBMzAwMDFFMjQ1RUEzRjhFNDc4OTdGMjI0RTlCMTRERUUwQjAwMjIKKzoxMDdBNDAwMEJGNzBGQjg4RkIyM0Y5NENBNUZEOUYzMjY3RTAwODlFQzEKKzoxMDdBNTAwMENCMkMxM0ZCQTVGOUUyNzc1RkU0N0VFOTZDNDE5NzAyM0EKKzoxMDdBNjAwMDVCRTlBRjcxOUUzREY2NEJBRkQwQUVBRTU4RkFBQjYxNUQKKzoxMDdBNzAwMDE4MEYyOUNGM0M0QTRGMjlCN0UwRjc1OUU0RkI3RDQxNjUKKzoxMDdBODAwMEY3QzNFMkY5QjFFMDlCOEFEMUNEMjQ5NzE1MUZENTkyQjcKKzoxMDdBOTAwMDNDQkJBNzcwQkRFNjdFQ0ZBQThGMTk1QjI3RTZCQjk2REQKKzoxMDdBQTAwMERBNEY0RTZDMkVDMUZEQzZDOTNGNTYwQ0Y0ODc3QjgzNUUKKzoxMDdBQjAwMDczMDE5RTUzNDNGRjY4RDMyMUVGMkNDNEFGRjg3RDI5OTcKKzoxMDdBQzAwMDc5OUVFNzBCQTEyNzNBNzZBOEUyRjczNjZCRjU0QkQ5RkEKKzoxMDdBRDAwMERGOTdFQjhGNDU4RTJCNzRFRjg5RjBBOTNBNzYxNjhGREUKKzoxMDdBRTAwMEZGMThGREJBMUQ0OUY0RkIyNzlGRURCQ0VERkIxRkE3NTYKKzoxMDdBRjAwMEUyRUY4QkRDRTA0NzNCMjE3NTc5MjlGMTRGNTc5QUNCQjgKKzoxMDdCMDAwMEJGOTVDNzNEQTc2MDVDQTdCRUY5OTAxN0NGRkZGQzZGN0MKKzoxMDdCMTAwMDU5NjhDOEE4MDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDIKKzoxMDdCMjAwMDAwMDAwMDAwMDAwQkQ1N0QwOTc4NTRENUQ5RjBCOTczNTkKKzoxMDdCMzAwMDY3MEI5OTQ5NjYyNjdCQzgzMjA5MTA1MDQ5OTg4NDg0OUUKKzoxMDdCNDAwMDdEOTkyNDg0NDUxNjI3MDgwNTY0MUJGNjAwRDk1OERBNjgKKzoxMDdCNTAwMDYyQTU3RjA2ODM4ODg4NkQ2OEFEMjI1QUJGMDFDMTYyMjUKKzoxMDdCNjAwMEI1MzU2MEE0NDEwMjBFQjIwODU1M0Y0NzBBMTY1QkI0MTIKKzoxMDdCNzAwMDIzMjJCMjg0NjQ4QUFEQTU1RkY5M0VGRUYzQkVFNzlDODIKKzoxMDdCODAwMENDREM5QjA5QTg1RkRCRTdGRkMzRTM3MzNDRjdEQzdCM0UKKzoxMDdCOTAwMDk2RjdCQ0ZCRkI5RTMzOTc1RkVFNTc2MEIwMTM2MkI2NUYKKzoxMDdCQTAwMDY4MDg0OTIwRTRDQTZCRjIxQUFGODk5MDg3N0ZGMUVBMkUKKzoxMDdCQjAwMDg4QTE4NTg0MkNGNzRBNzEwNjQyNDhFQkVFRkZGODlGQjYKKzoxMDdCQzAwMEQ0Nzg0MjJBNzZENjU4MjQ1QUFGN0ZGOTREN0Q4MEJFQUMKKzoxMDdCRDAwMEE3RjE2RTY3Q0Y3N0M3NUFFMEJEQ0IyRjZDMTk0MUZBN0EKKzoxMDdCRTAwMEQyRjZDNjdBNkNCRkYyQzI3NkFDQkZGNThCNTcwRkZERUEKKzoxMDdCRjAwMDE3N0RBRkQyMTVFMzgwRjdBRUJDNzY1ODBGQ0YyQkRERTMKKzoxMDdDMDAwMDVBNjcyMzJEODlGQkE4N0VBQTk5OTY5RTk3NjQ5MjQ4NkQKKzoxMDdDMTAwMEM4NzhDMkZFOUVEQTczNTg2RkNGQTVGNTQ2M0EyQUZEQTIKKzoxMDdDMjAwMDlFNENENzdCN0I2NUQxRUYxQUY3NjgxNzk4RTAwRDJGMzQKKzoxMDdDMzAwMDIxNDU3NERDNUZDQzFERUM4NjdBMzM1RDQ0NEFFOEY5NUIKKzoxMDdDNDAwMDQ2M0RGMTE4NkRCNEVDNDY0ODE0MkRBRjE2OUIzQzUyREUKKzoxMDdDNTAwMDJDNUQ1Nzg5NjkyMzk0NTc3RjE1MzUxREQ2NUJBRDBGNzEKKzoxMDdDNjAwMEU0NTg2MTNFN0Q4OTEzRUFERDAxMUU0NTMwQ0UwQTVEOTAKKzoxMDdDNzAwMEI1MDlCRkM3N0UzRUQ0MTEwMjY1MkVGMTkwOEI3REU4MTkKKzoxMDdDODAwMEZBMDlEOTc5QUIzRjhDRjc2Qjg0MUY3RDZGNTA1NDAxOTMKKzoxMDdDOTAwMDIxRDM2NjdEMkFDMTdDQTJGQkQ2RUE5NkUzM0M1RjY2Q0YKKzoxMDdDQTAwMEVENzRENUUxRUQwMzU2RDNGMUU4QjhCN0UwNkY2NEE4MDEKKzoxMDdDQjAwMDJDQjI5OEYwN0QwQTEwMkM1MzlCQ0FEM0VDQjBGRTc4RkUKKzoxMDdDQzAwMDgzMDNENjJGRDY5NzVBRTFBRTM3RDNFN0Y3QUU3NjNCOEMKKzoxMDdDRDAwMDY0QkE4RjZGNUMzQTM1QkEzQkFERkZBMjhGRDQ1Rjg2MzIKKzoxMDdDRTAwMEQ3NjU2OUFFOEJGNjVGRUQzMUUxMzg1NTZCNEFDODY3RjEKKzoxMDdDRjAwMDc0QkU2MzYwMTdFOUY3ODkxNjEyM0Y4NEFFQTc0QzRCMzgKKzoxMDdEMDAwMEUyNEQ1MDEyNzI1QTU3MDBGREVGQzI3NkJCODEzODA5MUUKKzoxMDdEMTAwMEM1MDNGQjlCRDM3NkFEQTM5RjNDQTU3M0E3MTQ0MTNGM0UKKzoxMDdEMjAwMDFCRkQ3QTNCOTQzQkQ5RkNFOUY3MTY1MzAxRjY2NzE5MjIKKzoxMDdEMzAwMDAyREYxQkM5NEFGOEFFN0RERDg0Rjg0RDEyRjZFQkQ3QTEKKzoxMDdENDAwMEQ5NDJGMzI2MjQ5ODMxMzU5N0Y1NTcwODcwMUFFQjk5RTQKKzoxMDdENTAwMDBFRUYxM0JCMUVENzc3MDU1RUMxN0RGNEU0Q0RDRTg1NTMKKzoxMDdENjAwMEYyMDkzNjVGMEQ3MTAzQkUyNEVBNjk4OTcwNzU2Nzk1NjMKKzoxMDdENzAwMDUzQkM1OTY0Mjk3NjVCOEE0MjY1NjIzN0Q2QUU4NkVCN0UKKzoxMDdEODAwMDRFNjhBN0YwQkM2MDcxNjI0OTc2QzcxMTMyQjhGMzdCQzgKKzoxMDdEOTAwMEEyMTRGMDdGNkI1QTlCM0U0MEM3N0RGMkMwQTc4OEI3MDQKKzoxMDdEQTAwMEQ1ODBCNzMwQkVGQjgyMUVENjIxRjA3NjIxN0M0MkY3MEIKKzoxMDdEQjAwMEUxQTlGRDlGMjJERTJFNkM5NjEwM0VENUNEQzVGQTA1QjkKKzoxMDdEQzAwMEI0QkM1QUU3MjQ5RjY5Njk5REUzREY1MzUyNjAzMUUwRjgKKzoxMDdERDAwMEI1Njc3Rjk0NjUxNzg1NTM5QkMwQ0Y4NjRGMkZDQUY0MzQKKzoxMDdERTAwMDc5NzY3MzhBNUQ4MkU3RkIxOTlFMUVEMzY4M0MwMEE3RjMKKzoxMDdERjAwMDYzM0JFRUQ5NUUyRjg1Q0Y3MzFEQzI0N0FBMjA0ODI3NkIKKzoxMDdFMDAwMEQ1QjVDNDZCQTBFREM1M0Y1RjdENkExQ0FENTc1NTEwNUQKKzoxMDdFMTAwMDA3RDA3OUI1MEE4RkIyOUUzRkJGMDFGMEM1NUE0OTBBMTMKKzoxMDdFMjAwMEEzRUNCMENFNEY0Njc3QTdGRDU3NTc5MjIyQTBEM0Q0RUMKKzoxMDdFMzAwMDUxQ0VGRDUwMjdDRDEyRTkwNUY1MEFENzQyMThGRkRFRDUKKzoxMDdFNDAwMEY4QTUwRTk5RjY2RjFERTU2QTgyRjFFRThEMUZFRTkwOTIKKzoxMDdFNTAwMDY5N0Y0RkE1Mzc2RTMwRDI3NjRGMTlCMUVDMDIzOEU4MDIKKzoxMDdFNjAwMDFBNEFCNEI0RkU1NDk5REQ0MjIxNDlFMUI2MzMxOURBMTUKKzoxMDdFNzAwMDQ5MUZCRDYzMTdFMEIxN0I2MTI1RjQ1NzlEM0NEMzAxRDkKKzoxMDdFODAwMDc4RDI4OUZFRjdBRkVCMDNGM0FEQjY3NzczNDREMUY3NDEKKzoxMDdFOTAwMEM3Mzc0Qjg4NTdDNDYzMjIzMEZGNkEwQTVGQTg4RkY3NDEKKzoxMDdFQTAwMDBFRjVDMjdDQUU3MUY4MDkzOEI2RTlGQzczNjA3RTZERTAKKzoxMDdFQjAwMEFGMUI4ODg3QjY4RjFGQzVGMEQ1M0FBQTExRjlDN0RCNkIKKzoxMDdFQzAwMEZCQzc5QzkwRjI0Mjc4NjlERTY3RjA0MUREQTZCNTQ4QjkKKzoxMDdFRDAwMDBFRTA0QkU0N0UwM0NDNjcwMTlGNEY4MzhFQ0M3NUQxQkYKKzoxMDdFRTAwMEVGQUM2MzU5M0YzRDM2NEJDODJGN0UwREY0OTQwMEE1OEYKKzoxMDdFRjAwMDg2OTc3QThFRTcwREFDQjQ3OEYyNUMxNDFGQUVGMUZENzQKKzoxMDdGMDAwMDQ3MzRBMUZEMkVFN0Y4NTJCNUQwODdGNDU0RjkwQUVCQjcKKzoxMDdGMTAwMDJGREVFMENDNUYxNTg2QkZGMUE1MDRFOTc4NzcxNDk5RDAKKzoxMDdGMjAwMDVCNEU5RkVGQjZCMjUyOERBRkE3Mzk1RDY3M0RCRjEyNzIKKzoxMDdGMzAwMEY3N0QwMURENzdEOEQ3RDRDREY0MzlDMDhERTIwNUMwMDcKKzoxMDdGNDAwMDhERUUyM0UyQzFCREYxNEI3MERGMTY2Qzk2MUVDMDdEMzUKKzoxMDdGNTAwMEY0MEMyMDUwNEY4ODYzRUI1NEY3N0Y5NkYzQzVERDUxNDYKKzoxMDdGNjAwMEFFNDI4OUY2MTc0QzMwM0I3NjQ4MzAxRkE3MjYwQUVBMDYKKzoxMDdGNzAwMEY5NTZDNzBFMDJERkJCNzZDMjc4MDk0OTUxOEVGQTMwMzYKKzoxMDdGODAwMDdFNDU4OEFCNTA0M0M3Qjk5NDY4NjZGQkVEN0Q1RjNCODcKKzoxMDdGOTAwMDM5MTdFOEQxOEVFRDA5MzJGMTExRTQzRjI0REI5NTFCNEUKKzoxMDdGQTAwMEZBQUVBQzA3RUJBRjhDRjczN0ExQzE5MzQ3QjIxOTNDREYKKzoxMDdGQjAwMDEwMkUxQzFFREU3NUREQTY4N0YzRDM0RjM4M0NCQzc3MzAKKzoxMDdGQzAwMDkxRTlDMDM3OEVFOTg5QzkwOEZENUJFODM4QjRCRkM0QzAKKzoxMDdGRDAwMDFENDM1RkQ4ODRGM0FCQzc3RDdCREI2MkMxQjIyQ0NFN0YKKzoxMDdGRTAwMDU1NTgwQjJDQjg4NzZCMzVDMDQ1QUM1MzBEOEY0NTFDQ0QKKzoxMDdGRjAwMDFFNkY0RDlCOTNBRjAxM0M5RTYyNzIwMEREM0Q3OTQwNDgKKzoxMDgwMDAwMDlBOEY3OEVEMzE1MkEyMDRCQzY3NzQ0OEU4N0UwMDVEMTcKKzoxMDgwMTAwMDEwQjcxNkY3QTNCQUQ2RTU4RDhDRjdFNTQ4NjdENUYxMEEKKzoxMDgwMjAwMDUxOEUyODA5RjFERTg5RjJDRjYzRjIzMkJDNjdGMjJGNUMKKzoxMDgwMzAwMDdBMkM5MzU3QzAyN0NCNzMzQkYzMDNDMTY3NDBCRTAxMzMKKzoxMDgwNDAwMDNFMEJCQUE4MUUxMUM4ODFGREZEQkE3Q0E1NERDN0U4M0MKKzoxMDgwNTAwMEJDOERDMjAxRTg0OEQwOERGOTBENDYyRjlCRDZEOThCMzcKKzoxMDgwNjAwMEExN0QxM0E1RkJGMEZEM0VBRUY3MjBGRDFFQ0ZFRUU2OTEKKzoxMDgwNzAwMDgwN0U2MTlFMkU3Mzg4QkY2NzU4NUMzNjJCODU3N0I1RUUKKzoxMDgwODAwMEM2Qjc0MTlCMTVFMkM3RDU2RjNDOTZFMzhFODA3RjgyRDEKKzoxMDgwOTAwMDFGMUJCNThDQ0YxOUJERDE1RUQ2MkYxQkNGNDhDMTZEMkMKKzoxMDgwQTAwMDJFQzBEMjAzRjIyODdBMEQ4MzhGQkE5RjVFNTYyMTVGQ0QKKzoxMDgwQjAwMDhEOTYwQjU0OEU0RkEyOUIxNERCODM5MEIxMUE3NzJGQjEKKzoxMDgwQzAwMDJCRURBN0NBMTgzODRFNzc5NjY0QUMwOUVBNjExRTg5NzEKKzoxMDgwRDAwMDIwQkI4MDdFNzY0NDdCODE2RjI1MjYxMkY3REUwOEZENkIKKzoxMDgwRTAwMDI2NTkxOTFGMTBGQkQyNjA2Mzc0OTQxOEMzREUyRkI2OTMKKzoxMDgwRjAwMDMyRkU1MDY4NjU3ODc5MkYyRkM1RkMwNUZFREIzNUVFMjIKKzoxMDgxMDAwMDRGODlEQ0I1MUMxM0RGRDE3OTYxQkI5ODBGRkQ3RTIzNEQKKzoxMDgxMTAwMDYxRjIxN0U3OUJGODcwQ0U4RTRENjFGQjExQTJBM0JCRjUKKzoxMDgxMjAwMDBBNjA5RjdBNkNGNjY5RTc5QjQyRTMwODc5QUFERTdGRDIKKzoxMDgxMzAwMDk4M0ZEMDBGQUNBN0JDNkZEN0VGMzUxQzY2RjRBOEM2MkMKKzoxMDgxNDAwMEM3NzJDRTE3NjNBRDg0QkRBN0YzRkQxNUU5NkE4NTk5QTMKKzoxMDgxNTAwMEVDODBGOTZEMjVDRTM4M0FBRjlBNDNCRDE5M0QzODgzOEUKKzoxMDgxNjAwMDM5RDBGRjExOUJGQjE1RDg4RjgxQTMzODlFRDNFNzkzOUQKKzoxMDgxNzAwMEU5RjNFNTVBRTIzMUQwM0Q1OUJFNUJFNzBEMTgxOUNENjAKKzoxMDgxODAwMERDQTJGRjk1RDg1OEZGRUQ2NkEzNDdBNjc4N0VDNkU2MjkKKzoxMDgxOTAwMDc2MDM3RTc5NEE4OEMzMDc3MkU5MDc5NDdGMDBGRDExNTAKKzoxMDgxQTAwMDVGMTFGMDk3MUExMjg4MDEzODU3Q0JGRTFDNDJGNzdGRjcKKzoxMDgxQjAwMEIwQzlCRDA4QzYzQkFGRjE2N0MwNzM0MjAyODhBRkU3RTQKKzoxMDgxQzAwMEEyNjJGMjA4RURBRjQ5RUY0QkZGM0VDQ0ZCQTQ0Qzc2MjgKKzoxMDgxRDAwMEQwN0VBRTEzRTc3ODU4Qzc3NUJGQzZFNkExRUJGOEI4RjYKKzoxMDgxRTAwMEY5NzdCRjNBNDBCRjlBN0RFMERBRUM4NzAwNEE5QkEyNUMKKzoxMDgxRjAwMEU3M0M0QkNCNTk0NjhENTFEQjNGMDQ4RjczRTZDOEZDRkYKKzoxMDgyMDAwMEY1ODcxQzdGMTJFQTk5REUxNTVDNjdGMDAyN0NENEVGREIKKzoxMDgyMTAwMDREQjBCMUZEQUZCOTkxNEEzQzcxRTFDRjE5MUZBREQxNUQKKzoxMDgyMjAwMDA2RjVBMDQyRDZEQ0M4MjAxRTNBRUVDNzFBNTJEMTE4NzUKKzoxMDgyMzAwMDQxQ0YwQzU4MTlGRjZBQTJBODFGQTlGRDczOEU2N0JCMTYKKzoxMDgyNDAwMDc1MjQ2NzJCQ0M2NzNCRTU4MzAwM0ZBRDFERjk0NUM1MjEKKzoxMDgyNTAwMDRGQjMxQzlCNjhCNTI5M0I3ODFDRjQ4OEUwQ0YyNEU0MUQKKzoxMDgyNjAwMEZGRTc3NDhDRUZEMEJGMjlDNjAxMjFGOTA5RUEwOUU4QkMKKzoxMDgyNzAwMDg3MTUxNjhGNEY0M0Y5NDZDNTZBQjM0RkNFQzNFN0RBNjkKKzoxMDgyODAwMDYxQjA3NzFFOEIxNkY4RTA3QzJFMTcxN0Q0QkVGRDc3RjEKKzoxMDgyOTAwMDI5ODZCNjZCODk3MTE4RkRFRTBCRDNDMjE4MTAwQjhCQjMKKzoxMDgyQTAwMEJGQkIyQTExOTRFRkE0NTkwRDQ4OUY4NDhDQjI4MDNFMjUKKzoxMDgyQjAwMDJFMzkyN0M4QjdBMjZGQTdDRjY5NTE2RjQ3N0NBMUZCQTIKKzoxMDgyQzAwMEVCQjJCOTVFODBGRDlFMTVDQkUwM0Q2QjU1QjRENzEzODQKKzoxMDgyRDAwMEM2RkZBNjcxRjhBOEYxNkMzN0UwMjg5REVGMjcxMjkzMkUKKzoxMDgyRTAwMDJCRUE3MTVFQjU5NURDMDc3ODk3MTRFM0ZBMzVGNkJGOTMKKzoxMDgyRjAwMEVBOUE4MjlGQjU0OTgxMTc5RjA1N0M1QzYxNzZFQzYyQTIKKzoxMDgzMDAwMERENjZCOEMyRThFNTFEMzFFRTBEMERFRTVGN0JCRTNGQzgKKzoxMDgzMTAwMDY3NEQxNkUwN0QzMEUzRjcxNENFQ0I1QjBDMTY4RjFENTYKKzoxMDgzMjAwMERBRjU4QUZEM0Y1RjQ3MTk1RjRFQTgzRUZGNTJDRkQxNzUKKzoxMDgzMzAwMEM0MDRGMDc3NkMwMDdDNThCMDMxOUE3OEZBODRENjAxODYKKzoxMDgzNDAwMDBBMzdFMDc3RjUwRDgyRkRDQzZGNzlGQjJDRjBGMzZBRUMKKzoxMDgzNTAwMDZEMDBGMTY3QkVEMTg0RkI1MzdENDM4QkYzMjAxQjc1MDkKKzoxMDgzNjAwMEFEMDFGMTNEOTVCRkZENjI5QzI3OTFCRTFFMUQ2NkJEMEUKKzoxMDgzNzAwMDc4MEY3RDk4NDQ5RkUzRkFEREVGQzNCQTlGOEU4RTIxN0MKKzoxMDgzODAwMDRFNDYyRkRFREU3NEZFRDc4REY2NTgxQjg1NTc4RDlFMjgKKzoxMDgzOTAwMEUyNDczRkVDQzY2NTBDRDNBRjQ4OUE1OUI5RkYyRDI3ODkKKzoxMDgzQTAwMEZGMEVGMzU5Njg3NEVCNDFERTJGOUE1RUFCMDdCQTlDNUYKKzoxMDgzQjAwMDE1RUIyQkIyRjQwRERGRjc2MUYyQUQ3QkJFRkVCRTM3REQKKzoxMDgzQzAwMDcxM0VGNEIxOUVEMjQ1MDQzQUZDOUNDMzdGMDJFMDI0ODYKKzoxMDgzRDAwMDVEREZDN0E5OEM3RTNFQ0UyMDE1N0JBMUJDOUI5NkY0QTkKKzoxMDgzRTAwMEJCOEZCMzc5QkQ4MEQ1RDVGRDQ0RDkxODNEN0Y5Q0M3REYKKzoxMDgzRjAwMEU0OTU2NzI1OTMxRkVBRjdGRUMxQzc3M0Q5OUM1RjAyMTYKKzoxMDg0MDAwMDNDQzU3M0E3OEQzRDdGRDVFNkZDMEE5RTUzN0VGODVGODEKKzoxMDg0MTAwMDFDNUY3RDU2REFERkFDMzcwRDg4QUY2NDdEMzAwN0Y2MjAKKzoxMDg0MjAwMEIxNjM1RDM5N0NCRTg5OTFFNzk1NjE2M0ZDOThGNjJCNTkKKzoxMDg0MzAwMEQ5OEFGMDNEMjdFQUVEODdBMkJDNjA4NzkwMDk5NDNGNzYKKzoxMDg0NDAwMDAzM0Y1RTk5NEU4MDFGRDM3MUEzNkNBQzVGOUYxNURGMTUKKzoxMDg0NTAwMDMzRTAzQUM4NDZDQUE3MjlERUI2MTdEOTcxNUYzNjE1ODgKKzoxMDg0NjAwMDUzRkMwNDNFNzFEMDYwMDEzRTIxRjA0OUUwOTExQTdGMzcKKzoxMDg0NzAwMDEyNkQ0MkZFMzEzOTdDMUZDODYxMTlFNTcwQTI4REM5QTkKKzoxMDg0ODAwMDYxM0REMDM5RUQ1MUNGRjRDMTlFQjhERjg4NjdGMkQ3OTYKKzoxMDg0OTAwMERGRUYzRDQ2QjY4Rjk0REVFRDM2OTRGQkJFREM3MDdBOUUKKzoxMDg0QTAwMDEzNzAxNjdDRjJFMzZFNEFCQ0Q4Q0RGOTYwMUYwRUI3OEMKKzoxMDg0QjAwMDBFMzhEQkQ4N0JGMTNEOThEQzEzRjZDMTIwQkVBRTU3RjkKKzoxMDg0QzAwMDM4M0YxN0E1OTA2MzAzQzcyQUY1OTI1N0I4NUVGMDhBMjQKKzoxMDg0RDAwMDM1NDZFQzRCMjFBQzVGQzhCRjRFRkJGRDFDREI2RkZBOTEKKzoxMDg0RTAwMERFNjA1OENGMkM0MzcwNEUxQzk1NUZERkExN0E5MUJFQTEKKzoxMDg0RjAwMDAwQkY2QjgyRUYzQUY5Mjk0NjMxQjk1QkIzRDI0QzQwRTkKKzoxMDg1MDAwMDJGMjhCNTU5MThGQzBCODMxOUQwMUZFOTEzNDQzRTM0QUEKKzoxMDg1MTAwMDlGNTA3RTIzREQ3OUZGQzAyNzkwNDI2OTY0NjkwQzkzRTgKKzoxMDg1MjAwMDNCOTI0QzA3MDQ5QUU5NDNFQ0QwMUY4NUY3MjQ1QjUxM0EKKzoxMDg1MzAwMDA4REVFQUYxQ0U0MTEzRDUwM0E3REIyNDJERUU1NzNFMkEKKzoxMDg1NDAwMEM5ODdGRDlBRjNDMTk3RTZEOUI0Q0I2QjE2QTM0NzQzMEQKKzoxMDg1NTAwMEU1Qzg3NzM1RUU1OUQwNEZFQjgzMjc1MUVGM0ZBN0Y3QUEKKzoxMDg1NjAwMEU1MzQ5ODIyQjRFQjdEQ0YzRjJEODVEQUU3QkUyNDdCM0UKKzoxMDg1NzAwMEY0OTRDRjM0Rjk1QjdGMzY4REUyRTU3Q0JGRUM4MDIxNEIKKzoxMDg1ODAwMEU3QUZGREVCN0IwMzQxOUZGNkVCMUM2MEQ3NTI3RDYyQUEKKzoxMDg1OTAwMEIzMTZFNjVEQ0JGNENGNzMxQUU1RkU1RkZEMUVEQjVGMUQKKzoxMDg1QTAwMDUxN0Y5MEUzMEJENUIzQjQ2NDQwODg1RjA5M0Q2MTI5RTYKKzoxMDg1QjAwMEYxRjUwMjdENjIwMTcxRUFBMTNDQkY2MkM5MDQ0MkUxQUEKKzoxMDg1QzAwMEI3QzhCNDFBRjlEOEU1OTVFMzUwN0Y1RTRDM0NEOEJFRTUKKzoxMDg1RDAwMDYwQTNFRTdDQjg3QzU5RDRBMEFDMkZEOUFBQUMyRkY1RkYKKzoxMDg1RTAwMDJBRUI0MkZGNEEyODhEQUM1N0JDQzhGOUQwNTUyQTJFMzkKKzoxMDg1RjAwMDZFQTc1NzZDRTE3ODVCRkFFODg0QTc5MUZFRkQzQTYyQkEKKzoxMDg2MDAwMEEwRUZBRDNFNTg5QzQ0MjJGNDJCQ0E5QTFCRDlDNDFCNDAKKzoxMDg2MTAwMDI2ODc0MkZBNDcwRUYxRjY4N0ZFNkVBMjNGRjA3OUFFNEEKKzoxMDg2MjAwMDlGNDA3RjYwRUZBRThFNzIyNjgxNUQ3MkI1MjRGMkJDRjIKKzoxMDg2MzAwMEI3RjE3OUQ3RENFOEE2RThGRkY5NEU3QTRFMEM4RTUzRjUKKzoxMDg2NDAwMDczQzM4ODY1RTc3OTk4RjBGQkFCOEIyMzhGQjNCQjQzOEIKKzoxMDg2NTAwMDlGQjIyOEU0NjlFOEZCNzgyNkZGQjgzRDJGRjBBMUU2MzkKKzoxMDg2NjAwMDQ2MzIzRTE3NzVBMTY3ODdCRTRCQzNGRUE4NjBCMzVDNTgKKzoxMDg2NzAwMDhDMEVGMTIzNUQzNzM2MEY4MUZGOUY0OUM0OTg4MkZFMkYKKzoxMDg2ODAwMEIxMkREQzJFNzFFNDgxOUVGQjE5RTg1MTQwN0Y2M0VDMzMKKzoxMDg2OTAwMDg3MDI3NDhBMEIxRTFBOUNBM0NEMEVEMTg3N0ExRDE0RjMKKzoxMDg2QTAwMDhGQUUwNEMyRTRGQjIxOUIzOTFFRTVCMjgzMzg2MDVDQzcKKzoxMDg2QjAwMDgxREY3MzFFMkM4Qjc1RDNGOUZFNjk2RDY5OTJCQjZGRDgKKzoxMDg2QzAwMDM4REZGNEUwRjhENTdBQTFCRjk5MTRGMjk4QThFNEY1NjAKKzoxMDg2RDAwMDgyRTY5M0E4OUYyRDM0QkE3MjgwQzk3QzdFRjA0MUM0OTMKKzoxMDg2RTAwMEVGQzVDNDk1MDg3OEREN0VCMDc3ODZGQjdGMjFBN0M1RUUKKzoxMDg2RjAwMDdDRUVGN0NDRDMzMTdEOUMxMjJEQTVCN0M5N0MzRUY3MUIKKzoxMDg3MDAwMEI3MzBGRDUwNjM3NEVBNzAxQzI3QjE1QjEyRDFFNDY2ODgKKzoxMDg3MTAwMEYzQTVDQzUyNEJFQkMzM0JFNjBGQ0U0MzQyODZGMUY5QjcKKzoxMDg3MjAwMDRCRjAzRDg1RUY3MDVFOTJGOUVFNjQ5OEI3MDFDNkE1RjcKKzoxMDg3MzAwMEUzNDUxMTZGMzI5NEY1ODMxRDc2Mjg0NzRBMkUyRDlCMTEKKzoxMDg3NDAwMDA3REJFN0QxQTQzNjBEREVENzE4MDMzMjVCMjc5RDQxNDYKKzoxMDg3NTAwMDIyN0NERjAxMkZBQzlCNzk3REZEOTRFQjczMTZDMTczRjYKKzoxMDg3NjAwMDkzMTlGOTg2OUVDRkUzMTZGMDNGMjNGMjEzMjNBQ0RCNzcKKzoxMDg3NzAwMDYwRjI1RDg2NzU5OTc5RTkyOTYxRkFCNjI3OUIzOEVBMzYKKzoxMDg3ODAwMEU5NkJERDQ4MjM4MTcxNERBNjZCMUU1OEFDODU1ODI0REEKKzoxMDg3OTAwMEE4NDc1OUFFRkJDMEVFQjg2NjMxNzkzNEZEOTAyRkNBQjgKKzoxMDg3QTAwMDcxMTQ3RUFERDJCQjhCNjE1RjI4MUY2NjdFQThBRURBRTYKKzoxMDg3QjAwMEI1M0VCNDc3MDQ1RkIzRjFGOUQ1NzNCRTk2NDIxODFDODkKKzoxMDg3QzAwMEUyODlFQkIwOTNGMjg1OUY5ODE3NEYyMDMxMjA4RUREMjAKKzoxMDg3RDAwMDM4RkUzMzMxNjM0RkMwN0MwMUYwMjhBRkM3NkFDRjg3QzIKKzoxMDg3RTAwMENCOEIwNDk3NTZDMUI3OTJBNjJCRUIyOTZFNjVERDQ4NUIKKzoxMDg3RjAwMENFNTkwMDdGMjU5RjJCRjk1NjFDREE3MTdEQzAyRkEzMUYKKzoxMDg4MDAwMEUzRkM2MjRBMzczNjJGODEzRkQ5NzExQTg1M0VFMUUyOTcKKzoxMDg4MTAwMDc2N0RCNTRENEZEMDFGOTg2ODM0OTI3RUE4NUY2NEM3QUYKKzoxMDg4MjAwMDMxRkRFMjEzQkFEM0Q0RkUwQjIyMUZDRTFGRTlFQ0Y1QzMKKzoxMDg4MzAwMDMzMEFFNzBEMUZDODhFODdFOTNFNkQzMERCRDc2OTQxRUIKKzoxMDg4NDAwMDZGOUIyMTMxM0Q1RERCRTgwMzNGQ0ZGNjM5NTZDNzI2RUMKKzoxMDg4NTAwMDY4OEY3MkZFRjhCRkExRkQwMzk5ODBERTU0MDNGRTc1OTgKKzoxMDg4NjAwMEE0Nzc0QjMxN0NCNzNEQzM4MkVGQzU5NzA2RDEyRjFBNTEKKzoxMDg4NzAwMDdDOENBMDVFRDQwOTRGNkZEMkY5NTM3OEJGMDA3NTBBODMKKzoxMDg4ODAwMERGOUE4NTk2RTVBRkQwRjc1MzVDRDEwRTI5QUM3RDI3RjIKKzoxMDg4OTAwMEI0RDM3OTRBMUMyRkUwRjlDODAxNjBDN0IyQkYxRTJEQkUKKzoxMDg4QTAwMEY5N0UyN0Y4Mjk5QzMyQ0FCNTlBOTZGQzIzMjYzQThGN0UKKzoxMDg4QjAwMDFFRUU3QzA3QTA2RENGMTYxRTQ3ODkzNzc4NTkxQzgxQTQKKzoxMDg4QzAwMDUyMkQ5REM3NTQyMzlCNDc0RDRCRjE3RDQ1QjRCREE3MDkKKzoxMDg4RDAwMEJGM0Y4MTc4NDJGNDA5RkJDQzRBNjhEMjUwRkIxOUJFRjUKKzoxMDg4RTAwMDJCODk0NkZGRDU2OUVFNDcyMjlDMUYwQzU0RDFEQkQwNjMKKzoxMDg4RjAwMDEwRkU2MzdCQkVBODUzRjFFRjFDQzBEQzEzNTg4RjY3REEKKzoxMDg5MDAwMDc0RTAyMEUyOEZEMUU3MTAxMkZBODNFRjRCNDNGRDIxOTAKKzoxMDg5MTAwMDNGMUExNTZBMEVEMTFCNUQ1QTgxRDE1MTVGNDlERjNCNjkKKzoxMDg5MjAwMDU2M0UwNkYxQjAwNkVDMjdCQTFGMDNCNUJFQzM0MERGQzIKKzoxMDg5MzAwMDQzNzk5OUNGNEIzMkJGMDFFMUI5Njk5RDUzMDZCODE3MEUKKzoxMDg5NDAwMDExQjdCQzg1RDYwNzE5RkQ3MTQwMEZDMzhDODE3NTA5MUQKKzoxMDg5NTAwMEI0QkZDMUQzRTcyNTQzRkQyMDI4NTk0NUE4Njc3OUMwOTYKKzoxMDg5NjAwMDNGNkYzNTY5QkNFQjcwMTNGMzFENDAzN0QzQTYzMzNGMUYKKzoxMDg5NzAwMEVCRDRFOTQ2MkZGOEVEQTc2QTA5OEI2RjY5REQ1OURGNjMKKzoxMDg5ODAwMEExRURERjk5QzVGQ0JCNTA5RjE1RTYzRjExRjE4Q0QzREIKKzoxMDg5OTAwMEQ0MUVEOTEzQzE5RTNDMThDN0U0OTNGOEJFNjZCRDVFRDEKKzoxMDg5QTAwMDExMzdEQTFGNjdDMkY2RkY4ODFCQkQzNjBFRjFERjlENTcKKzoxMDg5QjAwMDA1RjRGNzcwMUNEN0FCRkE5MDNFQzA1N0MyRTg3RTAzQUYKKzoxMDg5QzAwMEJDRDc1QUZDNEU1NzdDNDFEOUNFRjlDMjU0RTc0Rjc1RkIKKzoxMDg5RDAwMEE4OEY3M0ZFMjBGOEIwMEJFODkwN0VFNzk3OUMzQTgwNTIKKzoxMDg5RTAwMEU3NDcyNTBDRkVBNzhBOTcyMjdGOTg0NkRDRjg5QzIyNTEKKzoxMDg5RjAwMDg4Q0UxNUVFMzcxQTFCQTZDN0QwNzFBNkJBOTQ3QUNEQzkKKzoxMDhBMDAwMEI0RTk2QTNEODdFMUFCMTg3Nzg2NUJEOTNFNTlFOEE5OUUKKzoxMDhBMTAwMDYzOTU3QUVBQUNFRkRGQjRBMkZDNEQ3QUIxRUE1NjI2NTAKKzoxMDhBMjAwMEM2NDlEMERFQUZBMUZCQzRFMjI0NUExNjM3NTlBRkY3Q0UKKzoxMDhBMzAwMDgyQkU1M0QzQkNFMjU4MDJEMEQxNUFDMkU5Njg4RkI0ODcKKzoxMDhBNDAwMDEwRTMzODdCQTQ0NTYxRkE0M0Y3NEFBRjA0N0NCRjM3OTMKKzoxMDhBNTAwMDVEOTMxRkY3MzU4OEYxQTFEMzNBRUY2MTg4OUI5QzVFNDcKKzoxMDhBNjAwMDRBNTc0Q0U3Nzk0NENGRTI4RjQ3QTM4ODA3RkNDRjAyRUYKKzoxMDhBNzAwMDNGQ0Q5Mzk5RkY5NEEyMzFDNjQxRDIyQ0QxMEVEMENCRDkKKzoxMDhBODAwMDM3NkEwQUQwREZCQTMxQzZFQzA4Rjc2RjZFNUFFNzJFQTQKKzoxMDhBOTAwMDBCRjdCM0RBMERBNEMwQzJGMTI2OTIxRDdCOENGM0MzOTEKKzoxMDhBQTAwMEE3MjRFNkVGRjZDQzMwQTJERDk2RDBDM0E1ODgyRjI0MEMKKzoxMDhBQjAwMEM4RTQyQ0Y4MEREN0M2RDk1MURFM0VDNUZEMUExMDlGNkIKKzoxMDhBQzAwMEVCNEY0QkFGNDQwNTYyN0NEOEY3MzI1OThGN0U0NjE1ODkKKzoxMDhBRDAwMEZGNDk4ODczQTA3RjNGMjEzNjE3RkRGNEQzNUJGMjc3RkYKKzoxMDhBRTAwMDIyQkYzMTQ1Mzk3QTQ5QTFGRUE3QkJCNzZCMTc4MUZFN0EKKzoxMDhBRjAwMEQ0QjI1REJCRDAxNEMyQkJCMzAyNUZBMzQ5MzRFMDZCRjgKKzoxMDhCMDAwMDg3REY2RUFGMDFGRDc2REZENUI4Q0UwMTVFNTZFQTdEMTgKKzoxMDhCMTAwMDc5NDQ4OUNGRjhCQzJCMzlCNjg0RTM4QkFFQzQzNTYzNzYKKzoxMDhCMjAwMDExOUQ0RkZCN0I3QUU2Qzc1QTRCOTA1RTVGREI2RjQ1MkEKKzoxMDhCMzAwMEJGQTM3NjMyNDE3OUIyQkU5ODIwM0VCNDZGOTc1MDRGQjIKKzoxMDhCNDAwMEZFQzI1QTgxRkFGQjdBQTkwMUU1NDQ5QjZEMzRFRURGM0YKKzoxMDhCNTAwMDMyRDM1MUI0NEYyQjlFRDM5RDBGRDdCQjk2RUQ1NEQ2MzUKKzoxMDhCNjAwMDk3MTMzRkRBQzc5NUFGNzRDMjY3RTQ1RjgyM0Y1NjM3MDkKKzoxMDhCNzAwMDI5QkYyMzNEOTVGQzMxOUZGM0ZEMDI5N0UzRkUzMjk4MTgKKzoxMDhCODAwMEZBNzQ0NzBGNjYxRjEzOUY4MUFFQTNFODVEM0RGN0Y3QTgKKzoxMDhCOTAwMENFNjI3MjkzQkMyODgxQkVENTZFQkUyNDMzM0E2N0ZDODgKKzoxMDhCQTAwMEI4ODhGN0E3OTY0MzQ1NUM5RjFBNDFGOTE2RDg5MTQyQjkKKzoxMDhCQjAwMDNGQTJFRjYzRkRBOEE2NDU0RUQ2ODRFNjU1QzhCRjEzNzUKKzoxMDhCQzAwMDdBOTlFMERCNjI1RjhBMDc4MTJENEM0ODQ2M0NENzZGN0IKKzoxMDhCRDAwMEIyNDkzNkVDMkJFRDFGRTk4MThFRUJEMURCQjA3RjBGNzQKKzoxMDhCRTAwMEQ4NUY0M0Y5Nzg3NERGM0QyMDY3M0QxQUEzMTdGMDY4MUEKKzoxMDhCRjAwMDgzNTQ4QjdDREE0ODM4QkY5NkRDRjVGMEYxNkYzQzFFNkQKKzoxMDhDMDAwMEU0REI4MzQ5RURGRDEzQjI4MDVGRkJBMzAxMUUxNDFGNUIKKzoxMDhDMTAwMEIyRTNDM0YwQTQ5RUY4MzJGNjQ4MEE3Q0MxRjY1NkVCRTQKKzoxMDhDMjAwMDNCMTFGMTQ1QzgxN0RGNDc0Q0JGMTg0RjU3MENGRDk0NTcKKzoxMDhDMzAwMDQxRTA4Njk2NDcyNTY2Q0Y4RDMxM0RBOTg1RUZERkQxOEUKKzoxMDhDNDAwMDhDNDM3QzE4NEJCQzVBOTg1Rjk5NDVCOUNGNjM5Mjk1NzkKKzoxMDhDNTAwMEY1NzFGNjRFNzgyMEMzQjg0RTBFQ0ZGMTdEOTRFRDRFRUYKKzoxMDhDNjAwMEMxRDc4ODkyQUY2NTkxOUJCOENGRTRCMUUzREYwNUZCMzQKKzoxMDhDNzAwMDNFN0EwREU5MDM3QTA3RDUxMDkxREVENEZDNjA1NEJDMkUKKzoxMDhDODAwMDQ5QTExRjg1QzUzRDQ2QzUyNzc0OEU3QkI0NzMzRkVFNTEKKzoxMDhDOTAwMDEwMTI1OEZDOEFENDE5NUZEQThFQUQ5MTkzQzNGMDRBNTIKKzoxMDhDQTAwMEUwRjExQjNDNEY0MjdBOTNDNzU3MEI5OTVGMkYyNEU3QTMKKzoxMDhDQjAwMDE5QkUwQ0UwQjUyMTgwNkZGNEZENDUwMjRGMzI0OTI2MDQKKzoxMDhDQzAwMEUwQzlGMEU2Mjg5RjRDRTE5QUNGRkIxOTAyNzg1MzEwRDcKKzoxMDhDRDAwMDkyRTczRThEQzlBRUNGMDZGQzcwNkM5NEU1Q0U3QTdCRjAKKzoxMDhDRTAwMEEyQ0Q4RTc4RDI1RjIzRTRCQjIzOEVBMDdDNkZBQ0Q3NUQKKzoxMDhDRjAwMEMyRkNGNzBGRUNFRTM2MjlGMDYyMjlFMjg1NDRGMTAyNUUKKzoxMDhEMDAwMEU5QUE5MzVDNTRCNkFCRjA0NkVDREYwOUFFMkY4RjIxOTUKKzoxMDhEMTAwMDlFOUUzMDFFNjU2MzQ3NDE1RkY2NjUzMUJDMjkyMzRFMzgKKzoxMDhEMjAwMEM0OTNCN0IzQzdGMUY4QjM1QjhCRkQxMEE1M0MyQzM1RUEKKzoxMDhEMzAwMDJBRjE0MDhENTc3NDQ0NERGOEI4NkEzQ0VCMEE2RjMyMDMKKzoxMDhENDAwMDAxNkY4NDNDOENCQjMzREUzQ0RFMzVERTNDN0UzQkJDQkQKKzoxMDhENTAwMDUxRTM4QkUwMjc3QkEyMkNBNUEwOTdENjU0NDhDODg3NjcKKzoxMDhENjAwMEZCQkZEN0IzMUVFQUJEQUJCMjMwOEY2NThGRDU4MTdBMUEKKzoxMDhENzAwMDZCNEQyRDZCMkZGNDNCNjVDODczRTlCMTlBQjc2N0I5OUEKKzoxMDhEODAwMDRBQTE1RUIzODZDNTFCOEE0RUIzM0M5ODlFNkI1OTdCNDUKKzoxMDhEOTAwMEZFQzNCNTQ3Q0MyMERGM0RFQ0ZCMzcyRTZGOTA2MzY4RjgKKzoxMDhEQTAwMEJCNzcwM0ZGQkVCOEExMTRFQTM1MUJEOUY3NUY0MEJDRkYKKzoxMDhEQjAwMDg4RUVFRjgwQjNERTdBNzg3RUQ3RTYyQzA3MzMzRjk5RDIKKzoxMDhEQzAwMDNFM0I5MkUzRTkxRTY5RUYxMUZDQUU4MTdEQjdFNEI4NEEKKzoxMDhERDAwMEIxMUI0MTNEOThFOUFEMjNGODNBNDczRUM3RDYxOUZGOEMKKzoxMDhERTAwMEQ5QkQ2M0VEMTQ3RjE3MDUzREE4Mzc1REQ0NTQwRTQwRkYKKzoxMDhERjAwMDdFRDM4NTlENTkyQzM1QTQ0MTQ5RjEwNkY5OENEMzQ4ODEKKzoxMDhFMDAwMEYxM0E5QkM1MTM3N0QwMjFERThFNjc3QUEwODhDMzQxRTMKKzoxMDhFMTAwMDVFNDA3ODFFQzBEQkYxNENERThCRjcxMjZEODRDNThEOTEKKzoxMDhFMjAwMEI3OTlEMUFGMkJFMjg0QkVBNzg5MDQ3NDA2NkJFNEYyMzQKKzoxMDhFMzAwMDNGNjJEQzcwNEM4RjVBOEMxNzhFQzkxNEYxQzI4MDc2NTkKKzoxMDhFNDAwMDNFMUQzN0ZGRDY5N0EzMjNGOTUxRkU5MzhGN0I4OUU3MDkKKzoxMDhFNTAwMDM5ODhFNzE1REUyQzBERTBDNTFFNDA5MjU0MDA1MkY1MEUKKzoxMDhFNjAwMDZGNDE2RkRBMDM3RTU0MjYzNDNDNjQxMEVDMkJBQjlGQzkKKzoxMDhFNzAwMDhCNUZCNjY5MjMzNUQyOTc2ODZBQjUxRTEwMzIxOUQ0NTQKKzoxMDhFODAwMEZFQTI1RDRGRjIxMzVGNkM0Q0U3Rjk4RkQxMTIxRkM4NDEKKzoxMDhFOTAwMDI3QTI2NUYzNUY1QzRGRTVBMDE0RTI0QjUzMDVEQjE5OTUKKzoxMDhFQTAwMEQ2MEJFOTc0MEFERkE3Q0JGMTVDREZFODRGRkEwM0JGMEEKKzoxMDhFQjAwMDk5Q0FGN0VEM0JDNjVBMUQ5Mzk3MEQzQTE1RkQ1RjQzQ0UKKzoxMDhFQzAwMEZBN0ZBNjRCQkQ1OUQ5QUVFMjBGMTU3Q0RDQzU1QzVGQkQKKzoxMDhFRDAwMDVFNEE4MkE4MTc1Qzk0QkM1ODVFN0E4NkU5Q0JDQjREN0IKKzoxMDhFRTAwMEE3NTFBRjY4REZDNkY0QzQ0QTEyNDBCRDQzRURGNzVCM0IKKzoxMDhFRjAwMEJFNUI1OUFGNkE1NEQ2NkI5QTk1RjVGNjVDMEY4RUQzNkMKKzoxMDhGMDAwMEZFNENENTAwRjBCRjU1NkM3RDBGRkRCQjE1ODI0Rjc4MzAKKzoxMDhGMTAwMDk1N0M4MjJBNDg4QzRGM0M3RDM3RkE2RDM0NDZDQTI3QUYKKzoxMDhGMjAwMDBBMDE1Q0REMzA2RkE0M0Y3MUM2MDEzRjAwMjE3QjhCREQKKzoxMDhGMzAwMEQ2MUY4MzRGNTI2ODVERTM4QTQ5NDAzRkQ2RDhCODBCQUQKKzoxMDhGNDAwMDYyN0MxOUUzQjJFRjM5RURBMTdERTlCMDBCNTU3QzIyQ0IKKzoxMDhGNTAwMDVGRjg2MzdBREFEMDVGMjVGODQ2M0U2MTcyNDJBRDE3NUEKKzoxMDhGNjAwMEY1NDk1MERBMzk0MkFGQzgwN0JEODJFMjg1NUY2M0YyNDYKKzoxMDhGNzAwMDZBMzRFMTdBODQxN0U5OEZEQThCRTNBM0IyMDE2NTVDODYKKzoxMDhGODAwMDMyRDRGQkNGMjgzNEYyN0QyN0FBN0RFRDlCNzA3QjdCMEEKKzoxMDhGOTAwMDQ5RDlBRURBNzc2MUFGMENFMEZCM0U4M0I4QkJDMzNFODQKKzoxMDhGQTAwMDRDMjFBRTYzMjAxNzRFN0Q1NEExQjA5MzNFRkFDMzY4QTYKKzoxMDhGQjAwMEUxNDc0MTdCRTk5QkRCNDk0RUY5REJEODQ5MURGQjFEQUQKKzoxMDhGQzAwMDQ1RjU0NjVBOTY0RTFFRDdFQjY3MTBERjZFOEFDMkJDMzcKKzoxMDhGRDAwMENEMUE4OUVENkZFMjhDRDMxOUUxN0VDMzUzNzUyNDQxMUMKKzoxMDhGRTAwMDFCNDZFRkY1RTMwQzQ2ODhFRkQ1RUI5ODFEMzE3OUZDNzUKKzoxMDhGRjAwMEM3MDNFNjg3RjE4QjE3OENDNTJFODBENzA2QzlGRkJENDYKKzoxMDkwMDAwMDNGODI1RDcxNTIyNjk4MTdEMzkyODBGQjdEQkQ4MTNFRDEKKzoxMDkwMTAwMEE3Nzg3NkZEQjk3QjFDMUVGQUY4QUE4RUM1MEJCRjkwMDcKKzoxMDkwMjAwMDZBMTc0MzJBOTM5OEM3RTIzNUJGOEREMjUyRjk3NTI1NDYKKzoxMDkwMzAwMEZBMTBDNjgzQ0ZFOEREQjMwMUVGOTZCREIzMEZGRDkxMDMKKzoxMDkwNDAwMDk1QTA3N0Y3MDhGNURCQjVERkQxODM3Njg5RkUyRDI2NkQKKzoxMDkwNTAwMDA3ODM1MjM3MDdFNjI1MTA0RjRFNzg5QzY4NTYyMkUzNjcKKzoxMDkwNjAwMEFGNjc2Q0FFQTUzMDdGMjFFNzg0REZGRkRDOEEzMUIxQ0EKKzoxMDkwNzAwMDIwMEFGRTQyOUNCMTEwOUY5NDI4NENCQURCM0E4RjA3MUQKKzoxMDkwODAwMEY5MDBFQkMzRkNDQ0U3QTI5NEYxMDU1MTdFMkY4MUY5RTYKKzoxMDkwOTAwMEJGRjcwMTJERDFGMUQyQUNDRUVGQzNGQTJFNzE3QkVGMjkKKzoxMDkwQTAwMDEyOEY1MzVEOEE2MTcxQUI4NzEzMThGRkREQzdCRkRCNzkKKzoxMDkwQjAwMENBQ0I0QjNDQUU3NUM5QTZCNDEzQzU3QkRCRjg3NzE3OUEKKzoxMDkwQzAwMEVBOENDNkY1NjFGQjY4N0ZEQTUwRUJDNTNDMjg5RUY3NTkKKzoxMDkwRDAwMEIxOUEzMEJCNjhCRjc1RkJBNkIwRjhDMUFFODRFMjdEMjMKKzoxMDkwRTAwMDMwQUY4NDFFNEU3RDBBQzA2RjNGOTNCQjEwNDc4Njc4MTkKKzoxMDkwRjAwMEVGMzA4QkJCMDFFMDU1NkQyNzRFODg5NzEyN0I0MDdGODgKKzoxMDkxMDAwMDNGQzQwREMxQ0U0NDdEODFFMTQ5N0IxNDJCQzVCQzc2QTMKKzoxMDkxMTAwMDI1OTRFRjQzMzhBRjA4MjBERkVBQTg5NzMzN0VCODJCQjkKKzoxMDkxMjAwMEMxODVFM0I2NEYxNUVEQkNGRTA0QUIxM0VFMkYxMEZFNjgKKzoxMDkxMzAwMEVCQUVFMjU4RUFCODE1Q0MxOEY1RUEyOEM2QjdENEYxNzgKKzoxMDkxNDAwMEVBRDk4MjZGRjE3OEY1MkNDRTg3NjZCNzMwN0ZGODFDQUMKKzoxMDkxNTAwMDIzRDlEMDlEQjZDRjZENDk2MkY2NjE4QzI3NDcxMUFGRjgKKzoxMDkxNjAwMEY2NDQ3RkEzM0MwNTgxOUZFREU5RkU4RTM4RUJCNkIwNTcKKzoxMDkxNzAwMDM4NkIxNThGRDM1NTg5RjUzNTI5RDc3NzI0QTFDQjM4OEUKKzoxMDkxODAwMEVCOTE4NDA4NzE1Njc1M0M3RjFGQzhGMzlFMjE3OEFFMjEKKzoxMDkxOTAwMEI0QjBGNTk3Qzk5NUE1N0FFMDBGMEIwOUU2N0ZBRjNDMEYKKzoxMDkxQTAwMEI5QTBERTQ4RUIyQjFGMDM0RjFGRjIyMUQ0NEZBQjM4ODEKKzoxMDkxQjAwMEJDQkE5QTVGODI0QjQzRUMwQUJGNzAzNzYyMEZCMzgzMkQKKzoxMDkxQzAwMDUzREMzNjQ1MUQzNURFQjBGQ0M5RUUxNUE5OEFFRkQzNTgKKzoxMDkxRDAwMDZCQjMxNUVGNjdBRUI5NUJEMTlFRTUyOTUwRDQ3QjZDQkMKKzoxMDkxRTAwMDFDQTI3OEJGNTc0Mzg5QTJERTdCRUJCRDhBRjdGMzQ5MDcKKzoxMDkxRjAwMDc2MkNGQThGNEVDOEUwMUIyMTc3NzkyNzJCREFFRkQ5MkUKKzoxMDkyMDAwMEZEODBFMkZCMkY0OEVENTNDM0U4N0I0RDUxOENGRjEzRUIKKzoxMDkyMTAwMDhGRDNERjc3NDAyODVGMzhCNzcxQkVFMkZCN0FBOTcxNDAKKzoxMDkyMjAwMDgwOEZCRUJGRDBDRkZDRUJGRDlBOTcyOUZBQkIxQTMzRDMKKzoxMDkyMzAwMDlBRDkwRDNDNEU1ODRCRkYzMUZFNkQ5NzUxRkY2OTk2MDAKKzoxMDkyNDAwMEM4MzZBOTczRENCMEEyNjVDQjg2RUUyNDUyRkM5MEM5NjcKKzoxMDkyNTAwMEY1NjU1NEFFODNERUE0RDYyQjBDODkzQzhFOTQ0QTUyMUQKKzoxMDkyNjAwMDZGODVEMTU1MDgwRjRDQTg3NzVEN0Y0RTQ2RkY1OTNFNUMKKzoxMDkyNzAwMEM5Nzk3QTE4QzI0NzQ3QkNGNkNFRkI3NTlEMzBCRkNFODAKKzoxMDkyODAwMEY1NTdDQzBFRjA4RjJEMzlCOTAwRjFDRjkwQUNDNDgzRDcKKzoxMDkyOTAwMDI4QkIxMjBGQTJGQjI4RjFDMEVDNTBFRTdCRUMyMEU1QkUKKzoxMDkyQTAwMEJFQUJFMTZDNzUyQUYxNDBDMDUxQzAzOTZFQUMxMjJGRDMKKzoxMDkyQjAwMDA0N0MwN0QxN0YwMERGMDIxMjNDOEVGOUQxNUVDOUUxNDgKKzoxMDkyQzAwMDIzMTFFMkIyQ0REQjcxMUQ3N0QyRDNGMjU1RjBFQzdGRTIKKzoxMDkyRDAwMEQ0NTk2RjQyMzhCMTdDMjlBMTE3MTlCODVFQTJGNjkzMTAKKzoxMDkyRTAwMDc3Rjg1NzEyQjlERUMzRkIxMTdFRUQwRDkyMDdGNTlDOUUKKzoxMDkyRjAwMDhFRjhENTIwNUY4NjJGMEJGNDlENUFDMkZDMjNBRUIyQTgKKzoxMDkzMDAwMEM0Qzg3RTM0N0NERTk1MUY0REMwNTFFODMxQ0I0MThGRkYKKzoxMDkzMTAwMEExRTMyQzIyNkVFNDRCMTdCODFFQjNDNEY0MjRDNjAxOUIKKzoxMDkzMjAwMEFGRkU4MUMxQjc4Mjc4OTE1RjdGRTNCODM2RDUwQjQ5MzQKKzoxMDkzMzAwMDk4N0Y1MTBENDdBOTQ1RjI5OTgxMEUzOERGNEUyNTJEQjIKKzoxMDkzNDAwMDgyNkZCQjMxREY4MUEyOUQ3MTgwMjI5RUEwRDQzQjg5QjgKKzoxMDkzNTAwMDUzMEFFNzRGNDIwRjE1RTMwOTc4MEFCRTI1QzYzMzkwM0EKKzoxMDkzNjAwMDVBMzkxOUU4NDBDNUM3NDgxRjc1M0M0M0U5RTcxMDdFRTQKKzoxMDkzNzAwMDExMUMyQzJDNkUzMUIwMjMxRUMxRUNDMjkwOUY4QkY5QjYKKzoxMDkzODAwMDM1RTRDQ0FDN0EwMkZBQjY0NUY4MzFGQzMzRTFCOUYwRjkKKzoxMDkzOTAwMDYzQThFREY5M0JDNTQxRUZGNzQ4ODE2N0IzM0FDNzNGOTIKKzoxMDkzQTAwMDQ1M0M5NTJFRjNCMzNGRDI4Rjg3NDlGNjc0MTg2RkYyODAKKzoxMDkzQjAwMDFCQkQxMzg4MjY5MjFGQ0U3MUY2MDBFRDQ3RDYwNEUzM0QKKzoxMDkzQzAwMEMyRkQ2M0MyNUZGREI2MTRDMDc5N0Y4NzM4MUYyMTYxN0IKKzoxMDkzRDAwMEZBNDIzNTY5MUMzRDMzMEJGQzlENTQ2RUM1NDBDOUZDRjcKKzoxMDkzRTAwMDNDQTQ1OUFEOEZCMkY4QTE4NkFFMDRGMDdCMzkwOThCNEQKKzoxMDkzRjAwMDBGNjY4NURBQjEyRTc3QUU4QkZDOTQzQkM5Rjc1RTQ5RDgKKzoxMDk0MDAwMDE2NzEyRTI1ODdCNTMzRkUyNkVDQjVBRUVDMjMxMUJGQzEKKzoxMDk0MTAwMDNGQTZBNzMwMjkwOEU1QTMzNDI2NzIzRjU2MUVDOTgzMEMKKzoxMDk0MjAwMEZFMjk1RDM1MjUyNjgwM0Q0RUU5NTAwQUE3QkI4RUZDRkUKKzoxMDk0MzAwMDE1NkNFRjQ0NzdBQUY1OEJGOEJENkMyRTQ0M0ZDQjgyQjgKKzoxMDk0NDAwMEYwRjU3RTBENzgwODNERTIwNjVEMUJBQ0Y3NDc4OTc2QTYKKzoxMDk0NTAwMDJDQUJCQTlERkJEMDA5Q0Q4NTdFNDUxRTYyOEQ5RUU1NjUKKzoxMDk0NjAwMEZEOTI0NkE1RkU3QzM2NTFDNDU5OTk5RDcxMjczODc1RTkKKzoxMDk0NzAwMEJEMEYzQzlGOEJFRkMzRDdENTg3NDQzRTk3ODBERjI3MzYKKzoxMDk0ODAwMDgyMEY4NkUwN0Q1RTAxQ0YwRTdCQUQwM0RFRTcyM0MxNTgKKzoxMDk0OTAwMDVCQzBFMzVBOTFGRjQ1RDgyN0Q5N0MzQTExRTA5QzE0NzAKKzoxMDk0QTAwMEUzRkEwMkY4NjJGQUQ5QzA0NTQ5MTM5QTU3OTlEQzhBNUYKKzoxMDk0QjAwMDc5OUNENzlCNjVCNDhGQUE4N0IzN0M5RUVBRkQxODI0NUMKKzoxMDk0QzAwMDI3NkQyRDA2OEMwMzU2MzQxRjQxRkRBQ0I1OEUzMkQyNkMKKzoxMDk0RDAwMDlFNURDM0E5NjNCRDJBNzg3NzY1QUY4OEY1REM1MkFEODAKKzoxMDk0RTAwMDVGRTQ4NzQwN0MzRkE5RThCNjcwNTBCNjczMzg4ODdDNEIKKzoxMDk0RjAwMDk2MzJCOTZGNkMyMENDMkVGMUYxN0Q4RkQyQkFBMjkyNDgKKzoxMDk1MDAwMEU4Rjg4NUJGNEI4QjAxRjg5NEM5MkRDNzUzMDEwRUFCMEEKKzoxMDk1MTAwMDI1M0M2NzM0RDI0MDNDRTBERjRGRTFFN0NEMDYwNTZBRTkKKzoxMDk1MjAwMDFEMTYwQThGRTQzNDEzOUUxQkVBRkQ1REQ5MDVGMUNCQUQKKzoxMDk1MzAwMDhGNTdBRkIyQzFCOUE4MkI3NTc0Njg2QTc3RjQ5NjM0QTcKKzoxMDk1NDAwMDJFQzQzN0IyRjc5MzFGMTQ0MjVDNkQxNkU2MTdDRjM2NjAKKzoxMDk1NTAwMEIwNzg3RkQ2RjdBMjdEM0QyODlGNzg1MzRGOEM0MDZGMUYKKzoxMDk1NjAwMEJBRUM1QTNDNTcxMUI0Q0E2ODZGQzRDQjY0MTRFMDk3ODQKKzoxMDk1NzAwMDgwNzM3QzM0NUI4Nzc4NUVGQ0YzOUQxMkU0MjE4OUU3N0QKKzoxMDk1ODAwMDIzRUI4M0ZENTdEMkYyNzNEOEY3ODREMDNBNDc5NjA2N0YKKzoxMDk1OTAwMEZCRDc5QTQyNzAxNkY5N0Q0NDFCQ0M5ODFDNDYxRjQ3OTYKKzoxMDk1QTAwMDM4M0NBQTEzRjQxQjQwMUVCNjE5QjkxREM4RUQ0MTYyMjAKKzoxMDk1QjAwMEQxMjIxRjU5Q0RFM0VCRTc3QTExRTJDNzdFN0M2NkM4NjIKKzoxMDk1QzAwMEE3QUE4RTcyQzYwRTA0RkYxNkU0MEZEMEUyMkYxNjY3MEMKKzoxMDk1RDAwMEFDMTVENzZGNDdCRDc5MzVEN0FGREE3ODdFRjZFQTcxMkIKKzoxMDk1RTAwMDI1NDk2MDRGMjVENDQ3Q0U2MzFBOURDNEY0RkM0QTFFMUEKKzoxMDk1RjAwMEY3MTZDRjJCQjUzRUNDNDdBQTg0N0NFMUIwRkNBODZGMTAKKzoxMDk2MDAwMDlBMkYyQ0YyQzRCQjg0ODM1NTRCQjQxNDBFRDUxMjcxMUYKKzoxMDk2MTAwMERERUVCRDAzRkYyMzQ3QjQ3N0FCOTIzNEI3Q0Q2MzVCNzgKKzoxMDk2MjAwMEM4RDcyN0YyRDNBQTIxM0Y4RDNFNUFCREJGMzg4OTQ0RkYKKzoxMDk2MzAwMEU4QUY0M0RFREMxOEEyQzgwQjEzRjlDREQ1Mzc0NjYwN0UKKzoxMDk2NDAwMDVFNThFOUEzQUQ3OEJFMEZGQUIxOUI0Mjc5Njk1REMxNUUKKzoxMDk2NTAwMEY5NDgyMjlCNDczNUU0OEJGNTBGN0ZDRUY4NDdBOEZGRUEKKzoxMDk2NjAwMDc4REM4NzVGMDIwMEMxQ0ZEMTJDQTMxRkY2OTcyNzM0ODcKKzoxMDk2NzAwMDYzNzc0NDk4RUYxNkJFRkVCQjEzQjQ0ODFGRjdGODg4MTMKKzoxMDk2ODAwMDczN0I4NEYxQzU3QkUyRkMwN0MwQjkzQ0I3RjNGQzlBNUQKKzoxMDk2OTAwMDRBMDI3MzYwRkU5MDc3MUE2OUJDRjU0OUNDQ0UxNkYzODYKKzoxMDk2QTAwMDZFQjIwNTE2NzMzQ0M3RjMxNzFENzU4QjcyMUY1RkUwMTIKKzoxMDk2QjAwMEZCRDg3NDZGMjAwM0NGMTE4RDhCOUMwNzJGRjZGQkE2NzAKKzoxMDk2QzAwMEQ5RkQyNkYwREJDQTY5RjQ2NUYwQjM2QjZCMjU0QjE4NDYKKzoxMDk2RDAwMDdENzVCNURGMjEzODZCMTRGOTdGOURFMUFDQzdGRDE1QjEKKzoxMDk2RTAwMEZEMDk3QkU0RjI1NjE5RTNGQjk3NEY3MTdBMjQ0RTkzMDAKKzoxMDk2RjAwMDQ0RTk2QTFFOTc1Nzk3MDk4QjEzNUM2RTkwRDAwRTk5QjgKKzoxMDk3MDAwMEVGMjY2NDBERTUyQkYzNzYyRUM3MzhDREUyNURGRDM3RUQKKzoxMDk3MTAwMDgwOTg4MkU3NkIyOUZGOTg5NzRDQzgwODVBQ0U1RkFGQjQKKzoxMDk3MjAwMDhDRDMyRURDRENDOUZGNDZDMkU1MjI1NTNCRDFBRTVFQjAKKzoxMDk3MzAwMEZDQTRGMkJCMEFCMkY5Q0ZBMEY3NTRBOEY0OUFERURDN0QKKzoxMDk3NDAwMEJGQjUyRjg5REEwOUEwRDcwRDIwMDM4MEFGQUZEQ0Y1QjQKKzoxMDk3NTAwMEE1MUU1MjZEQkJDMkYzMkI5NDlFN0I2QTgxRkY1OUIwNEMKKzoxMDk3NjAwMDNDOTFFNDNDMDhGQ0ZERjc0OTZFMUY5NEVEMUYzMDM4MzYKKzoxMDk3NzAwMDVDQUZCQ0NFRjhGRDczRjEyODY3MENDMDk0RTlGRjFBMEEKKzoxMDk3ODAwMDY2QjI3OEVCQTM5NDRENDA5Q0NENjA2MDdBOEREMEU3QjMKKzoxMDk3OTAwMDY0Nzk5NTFDNDNEQjA3N0ZCRURBMDZGRUJGRjg5N0M3RTYKKzoxMDk3QTAwMDhDMDU3RDNGRTFFNTY4MjdDMDZCNTNCMTMzMUZFQ0ZGQUIKKzoxMDk3QjAwMDRERTUyNkNDNUIzMDFBNTg5Q0Q3RkJDQkMxNkY4MURCQzMKKzoxMDk3QzAwMEJGNjdFMzk2MTJCMDNGMkQyRDg3N0RFMDFGRDlBOEY5MjIKKzoxMDk3RDAwMDMzOUUxQkQ5Mzg4MkU1QjU3NUU0NEZCNjk0RUY4MUY5MTUKKzoxMDk3RTAwMDY0NEM2MUYyNjI1Mzk2MzNERjEyRDYyRkUxRkE1OTM1OTkKKzoxMDk3RjAwMDg3NTlGQkMxREUzRjg2RjNFQUNGOUU0MEY1OThBRTJGMzYKKzoxMDk4MDAwMDFCRkQ3MDc3MTNCNjlGMjI3RjBBQzYwRUQ3NDM1QkE5NTQKKzoxMDk4MTAwMERDODEyNDNDNTFCRkJCNTFGMkU5RTg3QUFBOUFGNjYwOTgKKzoxMDk4MjAwMEJDQTJGMjYxNUZFMjRDOTAyRjJGNjkzMURFMjNFNjE3NzQKKzoxMDk4MzAwMEZGNjY0QTA5QzQ3NTg0NUM5OTI5NTk5ODlGOTFFQkQ5QjAKKzoxMDk4NDAwMDMzODhGODYzNzFBMUU5MUMwRjY2NzBGRDdBNjYzNDgzNzIKKzoxMDk4NTAwMEVGN0NFMkM4ODBFRjFFMzA5MjE4RjA0RkNGMkM2RDJDQjkKKzoxMDk4NjAwMDQyQjlCMzVDNjcwNTc5MkVFMjFCNURFQjAxOTFGRDQ0QzMKKzoxMDk4NzAwMEQ1MkY5QUQ5Rjk1NzI5OTgwMzlENUNBMTc2MDc2MUZFRTcKKzoxMDk4ODAwMEEyODg3OUJGRTY2NDRFNjczOTVDREZFQjQ5OUMxMDRGRDQKKzoxMDk4OTAwMEFCM0VENDdCM0JGODAzMENERDU4REM5NUYyMUJFM0EwMTgKKzoxMDk4QTAwMDAyRDQ3NzhENjBDNzJDM0QxMEU1NjM3RTZBMkYzRkU3QjkKKzoxMDk4QjAwMEVBQ0M4N0ZDOEY5QUM5NjkwNTk4ODc3MDk2RjIwRDMzQjgKKzoxMDk4QzAwMDlDMUYwQzY0MjA5RDUyN0UyMjUxOTk5NjkzNkM5RUEwMDEKKzoxMDk4RDAwMDg1NzM3RUE5NTQ5RkEyRjUyOTVCNTMyNzY4MjlCRTU3M0IKKzoxMDk4RTAwMDY3MDcxNjZCNjg3RDZENzIyMTZCQkYzQjcwMTFFQTFCQjkKKzoxMDk4RjAwMDkyNDdCMkY2ODJDMDYyOTlENkI3Mjc0RjY0NzUzMEVDQjIKKzoxMDk5MDAwMDI4NjJGRDNBNzlDQTA0MEZFREZGOEE5NUNCNjk0NzAwQkEKKzoxMDk5MTAwMENGRkQ1NkJGRDE1QjEzRUVBN0RDMDZDOTBCMTQzRTU3MzMKKzoxMDk5MjAwMEI4QkZGNTRBMTY5OTNCMTlFMEREMjc4MEU3Q0FDNDdCMkEKKzoxMDk5MzAwMEZGODdCRjI3RjI3REM1M0FDNTc3MjQzOTcyRkY0NUZDMDIKKzoxMDk5NDAwMEJCQTVGQ0JDRUVDODY4QjIzMThBQzVBNTNDMzExNEZFOEIKKzoxMDk5NTAwMDQ3NUI3QTYzNUMyRDM1RDlDNkZBQjdEMDdFMEE0M0ZERTIKKzoxMDk5NjAwMDA4Mzg4QUZFQzRCOENCNDA5RTAyOUZENTMxN0ZBOTY4RDMKKzoxMDk5NzAwMDJGNDk2NkZDOUI4RUIzMUVDN0U5RTk2NEU3NTAyN0E3MTEKKzoxMDk5ODAwMEU1QzNCRUQxRkREMkYyRkREMjMyQkI3MzNCOUIxRkVEQ0UKKzoxMDk5OTAwMEQ3OUE4NzdDQkQzRkY4QkI4RkRFQTRFRjY3ODVFNkFEMjUKKzoxMDk5QTAwMEM2OEZGQjM4N0UyQ0FENjdGMUM0QTBCNTA3RTJEMUM4RTUKKzoxMDk5QjAwMDY4QTZFNzkxNDJFNTNBQjYyNzMzQkVCRjJERDlDQUYwNzMKKzoxMDk5QzAwMEEyNjMzRjkyMjQxQ0E3OUVDMzMxOERDMjNERjc5QkFGN0IKKzoxMDk5RDAwMDdCMUU5RkNGM0Y3QkRENjFGQkU1ODRGQ0JFQTNDRDc3ODMKKzoxMDk5RTAwMEVEMDg1RjhGQzhDRjE2RkQ1QzU5QTdGQTZFMTBDQjkzQjgKKzoxMDk5RjAwMEFBQjZGNUMwRUYxRThEMjI0NjdDNEU3Njc0N0M5Nzk1RjQKKzoxMDlBMDAwMEM3RjQ0QkQwM0JDNTdEMENDNDMzMDI5RDA0OTU5QzZCQzEKKzoxMDlBMTAwMDc0RENBRkQwQzhGMzA1M0JENjM3QTE5MEFGQ0ZDMkQ3MjcKKzoxMDlBMjAwMDY3MzE4NkREQUJEMDQxOEZBNzgzMTk1M0NDOURGMUI3NDkKKzoxMDlBMzAwMDAzRUUxREZERjUyREUwRkQyOUU4M0E1MjdGNDAxRjVENDQKKzoxMDlBNDAwMEVEQzc0RkZGRDk3ODI4RTZBOTgyNjcwNzlDNTVGMzEzMjUKKzoxMDlBNTAwMEYwMDQ3QUM2RUZGQTJBRjE1MUNDNzM0M0M3M0VBQUU4NjQKKzoxMDlBNjAwMDNBRUI1QjhFNTdDQ0JFQUI3QTkwRTdGRERBOTVGODVDQUIKKzoxMDlBNzAwMEQ1OTRBNTgxNzhCOUY4NkUyQ0Y4RDgxMzQyRkVCNjdEM0UKKzoxMDlBODAwMEM5REM2RTRCMjM2OTVERTRCQkJEOTE5QzEwRDE0Rjg3NEYKKzoxMDlBOTAwMENGRDU3NjVCQkI5NUU1MzlBQkZEMDZFRDA5MEUzRjlDNTYKKzoxMDlBQTAwMEMzRjM1QzYzRTdDRjg3QUFGNDBEODhCRkVDMzU4NUJFQUUKKzoxMDlBQjAwMDBCQzkxMzY1REQ5MEMyRjg1QjY3M0Y1MDEwQ0ZDQjE2MjIKKzoxMDlBQzAwMDFBNEE1RUIzM0IyOEJBMjQyRjQzRkU1RDE4NUJCMjJBQzQKKzoxMDlBRDAwMDhCRDYzRjRBQUU0NDdFNUREOEJERTRDQjJDQ0FCRkZGRDcKKzoxMDlBRTAwMDk4NUNDNUVBRjc5NDdDOTkwREY1QUQ1NUVDRkQ5MUNFRTcKKzoxMDlBRjAwMEQ3ODBCRjEzNEZENTg0NTEyOTIxRkRFMTVDQjI5REU5ODgKKzoxMDlCMDAwMDFGQTUxQTAyNzg2NDkwNTczODQwNEUwQTc4NzY1NTE2ODkKKzoxMDlCMTAwMDFBMzRCNTExQ0ZCNTc2RTAwMThCNEYwQ0UyRjI3OTkwOTMKKzoxMDlCMjAwMEIwQ0IwMzVBODU1RERFMUVDM0NFMTNCNzgzM0NBNUVCRDUKKzoxMDlCMzAwMDBEMjZCQkFGMDBGQzZCQTI1QkU3NjREMUFFMUU4RUZFQjAKKzoxMDlCNDAwMDQ0MEZGQTkwRTRBNEZBMDZGODM5RUMxNjMyMEJGMkU3NjcKKzoxMDlCNTAwMDVBMzdCOTQwM0YyMkNCMUM0NjJEQzI5M0ZCOURFOERBMTEKKzoxMDlCNjAwMDZFRDE3RTBFMUM3QUU5QTFFRTZDMTgxN0NDNjMzMEE3N0IKKzoxMDlCNzAwMEZGOUE0MzdGRkYwQUUyQTIzNTU3NEMwRTUwRkYwNkI3MEIKKzoxMDlCODAwMDNDQjMwQUY0QUJDMTJERUZGQzlEQzk1Qjc2MkU0M0NDRjAKKzoxMDlCOTAwMDdCMzBGODBGRTlGMzQxQ0QwNjlDRkZFMDk2QkIxNkMxODAKKzoxMDlCQTAwMEZCNDM3RkQ3RDIwM0YwNjNGODM5NUYzREIwODNGNjgzODAKKzoxMDlCQjAwMEJGRTlBRTM4OEY0MUJFOTBCRUNENzk4QzBFNzg3QzRFMTkKKzoxMDlCQzAwMDk1QTc1ODg0ODcyOTA1RTE3MTEzRjNBMkRBMTI0RTZEMjcKKzoxMDlCRDAwMDA4QTA5RUE2M0NGNzQyRjU3MjhDQUY1RTI3REQxQzEwRjQKKzoxMDlCRTAwMDI3MTBFN0I0RDVGRUNBQjNFNTc0N0RGNEY5RjAyMDlERTMKKzoxMDlCRjAwMDQxOThCRTNDRjIwNkI1RUJDM0Y0RUM2MjYyNTVENDRCMUYKKzoxMDlDMDAwMDhEMjk4QUY3Q0IyQzU5OEFGNjMxQzk3NzI5REFDN0Q5MzkKKzoxMDlDMTAwMEYzMTVGNUYxN0QwNjJCREU5RkU4Mjg1NkQ0RUYxQjM0QjMKKzoxMDlDMjAwMDRFRjE3RUI5QjM1QzUxQ0ZGNzM1MkFERUVGN0ZBMjU5RjIKKzoxMDlDMzAwMEQ5N0VEQThFRkJEMEZGOUNBQjE0RjQ3ODg3REY1RDBGMDIKKzoxMDlDNDAwMEU1QzBENjg2RDI1ODNCRTlFNEE3MkQwQzc4RUJFMUY5QzQKKzoxMDlDNTAwMEQwOUJCNTQ1M0UxMkUxQkNDQTMyMzdGQUY3M0I5RDU3NUYKKzoxMDlDNjAwMDI5NjZFN0Q3REIzNEVDQkM4NkYwQ0IwRTM2Qjk4QjYxQzYKKzoxMDlDNzAwMDlGREU5NjI4RDgyOUIwNDcxODgzNzFCMDVGNjU3MzlGMUYKKzoxMDlDODAwMEMwRkNBOEVCNDE4MjdFQUMyNjdERTA0NzQzNDFDRUNGQUQKKzoxMDlDOTAwMDk2NTFFRjZERTI3OTM1NEREMzczMzFERkZEQUMxNEQ4QjkKKzoxMDlDQTAwMDA3RjE3OUNGNkM3NjFFNjAzOEQ1NzA3MUREMTBEMzk0RDIKKzoxMDlDQjAwMDYwOUZEQzhBNzUxNzkzQTVBQTdENUFBMUE4OTc1OTFFQTMKKzoxMDlDQzAwMDU0QkMzRjI2Nzk5REEyN0Q5Q0ZEMzFENTNFNkQ1MUQ0N0IKKzoxMDlDRDAwMDI3M0E5RTUxRUREMzc2RDUzRUJEQTQ2ODFGN0UyMTUwMTQKKzoxMDlDRTAwMDBGNjQzNEIyRDUyMzlCRTlGQzg3OUM2RDI4ODU3RDE5RDAKKzoxMDlDRjAwMDdBQ0UzMzFCRThBNUQwRTdBRTA3NzY1ODc0QjRGNjA4RTEKKzoxMDlEMDAwMDk0M0U2QTRGODE3RkVBQURCQTY0MkM4RkQ2RDlEMUJGMTkKKzoxMDlEMTAwMDc0QkNBRTBGOTYyN0VBMUNGOEZDQjc3NTgzQjA3Q0I3MEQKKzoxMDlEMjAwMENFODlFNTdGRDY4REM1RDI1RkU3QzJCMkIxQUUxMURGNzUKKzoxMDlEMzAwMERGNUJENzhDMjU4NTYwM0FDODhCRjhCODhFN0IxM0QyNTEKKzoxMDlENDAwMEMxOEU2RkQzMDRBQTIxODJGQUZENjcwRTIyNUY2Q0VCRUQKKzoxMDlENTAwMDE2Njg4M0ZBQzNBNDY1QzIyODVBOUYwRkM2MTRFODU3MzEKKzoxMDlENjAwMDUwRDJGREY0QTQzQUZGMkIwNUYyMjk1MkQ4NzM5MTk3RjMKKzoxMDlENzAwMEQwQTg3MUU2ODM3RUZERjgzM0M3MzY2QkQzMDk3OTY0Q0EKKzoxMDlEODAwMDlEMkJEOTYyNjU3NTIzQURFMzY2NDMxRjlFNjM5QjlENDIKKzoxMDlEOTAwMDY5ODRGQzBBNDRDNjEwQUM0RjgwN0E3QjE0NkJERkYwRjgKKzoxMDlEQTAwMENDQjEwOTFFOUMxRjhCMUY0RjA5QzU4RjFGNEY4OTEwRjcKKzoxMDlEQjAwMDNGRkVENTI1QkIxOUZDMjhBNzZFRjYzNkMzQkE0RTcxRjcKKzoxMDlEQzAwMEJGOTE5M0U0RUJFNkQxQjI1ODlCQUYwM0I5Nzg1NkE1QTcKKzoxMDlERDAwMDQ3ODhCMjQ2NTNGQzI0RTA2OUEzQzYzMTE1RjM4MEVGRUYKKzoxMDlERTAwMEQ1MTFDODNCOUYyQzMxN0JCNDQzMEY0QzY1RjJBODdENDUKKzoxMDlERjAwMEEyMDFFRDlERDMxQUU3MjJDQzZGOTI4MkNGMDNCQzVFMDUKKzoxMDlFMDAwMDQ5RjkxMEUxRDc2RTBFNjYwMDFDN0U5OTcyODZENTEzNTMKKzoxMDlFMTAwMDgyQ0Y0QjhFQjBCQThFQURGMzg1OTREMzVEQUQ3MzM3RTAKKzoxMDlFMjAwMENDQTdEMzNBNTNEODdEMzFDNEU3NEMwN0Y5MkJFQUE3MjYKKzoxMDlFMzAwMENCOUQ1NTIwMjc0RTE3M0I3QkMxN0M0RUI5MEM0ODNGMkMKKzoxMDlFNDAwMDFFOTdEOTBCRjk5NTQ0RUIyQzlBMUFFNjRGRTk5REFBNzcKKzoxMDlFNTAwMEMzRUZBNkU4MTk5RDkxMDdFNDg4RTdDNENCNTI5OTlFMDkKKzoxMDlFNjAwMDg1RkIwNkY2REM4QzY4RDRDMzRGNkIyMjlGRjM5RUNEMzYKKzoxMDlFNzAwMEUxNzNCNTVCNjRGRkNBMUNERTVFNzJCRjE5RkI2QjVGRUEKKzoxMDlFODAwMDFEODVGMURCNzY1NzZGRDQ4M0RBNkIyOTk0Mjg3REI0NzYKKzoxMDlFOTAwMDVGQUFCREY2M0FCNjFCNDQ2ODBCRTM5NDMzMzk5RkZBQzgKKzoxMDlFQTAwMDU1Q0JBQUJGOUVBMUVGN0ZCMjNBREE4MTNDREM3MjM3NzQKKzoxMDlFQjAwMENBQTcwN0Y4Q0JCM0UzOENBOEI3Q0M5RTlDNUUwMjcyMEUKKzoxMDlFQzAwMDY5MjY4Rjc3Q0QzMTZCMTMzMUVDQTVCNUVBRTEwQUEwOTUKKzoxMDlFRDAwMDg1QTZGQzBEMjBGRTE3Qzc5N0VCQURCNDVFOTFCNjYyNjgKKzoxMDlFRTAwMDAzOTRDQjdBNkVEMUMzOTFDRkNBQkU3QjM2ODBGQTU4MjkKKzoxMDlFRjAwMDQ1NDlBQjA4RURBNUMwN0I3NTc0NUU3M0Q3Qzg3NjY2MUYKKzoxMDlGMDAwMDNGODk3Mzg2Q0JCRjUxN0U4NUMwQzNEMzNDNEY4NkMyODkKKzoxMDlGMTAwMDE3RURDMkI5QTk5MkMyMkU5OTlCQ0FGNDg2NkIyOTVDMkYKKzoxMDlGMjAwMDZGQ0IyNUI5Qjc5NDcxOUMzRjAzM0RCNENFN0UyRkE3NkMKKzoxMDlGMzAwMDBCN0ZCQkIyOURFQjZEMUZFQUQ5QjhFQTdCMjZDNEI4OTQKKzoxMDlGNDAwMDZFM0U4RkQzN0FFMjk0NDA4RjdCQzA4Q0Y4OTEzN0ZEQzAKKzoxMDlGNTAwMENCODc4QkU4RkFGMzVBMkMxQThDQzMwQjNFRUU2N0Y3Q0IKKzoxMDlGNjAwMDdEMTU1RDcwMjM5RjFCRDgxQTc4RjEwQzQxM0M2RjA2NUMKKzoxMDlGNzAwMDNBQjk5MzlDQkFERkIzMEVFNUMzRTBCRjUwRjkwMzdDNTYKKzoxMDlGODAwMEYxQTZGQjkzMzNEODFBMUZGMUZDQTVBRkFFODJGM0M3M0QKKzoxMDlGOTAwMDVBRTQ2QjQ3RUJENjYwRkQ3ODlEMDdDQjEzNzUxQjM5RjAKKzoxMDlGQTAwMDdGNkNDMEY2NzdFQkI2NzJGRUU4RTVGQzcxMzczRTZGNkEKKzoxMDlGQjAwMEE5OUI4RUU1QTEzQTM3OTY0OTMxQUVDNDU0QTAwQkEzQjQKKzoxMDlGQzAwMDFCRjMzMThGM0Q2MzIwMzJDNDE5NUEwQzg4QTc5NDAyQzkKKzoxMDlGRDAwMDlFN0YzNjFFRjI1RjBDMTYzODY3QTdDRTgzNTFGM0RCRTcKKzoxMDlGRTAwMDhFRkQ2RkVBNzQ4RjQ1NzY2QTUxNThERTBCRTg2Nzk5RUIKKzoxMDlGRjAwMDVERTNDRjI5NjIzNzAzM0YxOUIyMkQ2NTIyRjA4RjUzRkQKKzoxMEEwMDAwMDc2QkIxOUY0RDZBMUE5QTlBQ0VFQjQ5Qjc1QjQzRTZDOEQKKzoxMEEwMTAwMDFCQUZCQkVENjYwM0FEMEY0RkVEM0UxMUY0REU1MzFFREIKKzoxMEEwMjAwMEJCMzk4QUQ2NDc2Q0VCQ0VEQUJEMDQ4M0Q0QTVEQkVDMTIKKzoxMEEwMzAwMDEzODFGRjE0MTNFOTI4RDA0M0E5MzE2QjE0QTRDODk2RTcKKzoxMEEwNDAwMDU5OEE4RjAyMUQ4QzQ5OUUzNzBBRTg2MDZGOEExREYxN0MKKzoxMEEwNTAwMDYxOUM3RERENTFBODhGRUZCMzVEMEI0NzZCOUNBNkZDMjcKKzoxMEEwNjAwMEY1RjA1RDQ5N0NCOTE2QkUxQjk1QjY2MjNEN0MzN0JBRUEKKzoxMEEwNzAwMEU3MTY2REY4Nzc2M0ZCRUU1OTBGRjUwOThFRUQ1QUQwQjAKKzoxMEEwODAwMDA3RjdBNkIwRjhBN0U4NDdENDQ1QkJFMEFGMjI0RkFCMkYKKzoxMEEwOTAwMDVGOEIwQkY5Nzg1RUIzMEJGOTc4ODczRjYyNEFGOTIzM0YKKzoxMEEwQTAwMEUwQTdBQjY5OTYyQzEyQ0M2MzhBRDQxMTdDODc1Q0I4OEMKKzoxMEEwQjAwMEVBOUI5NDVBMjg5RjlEQkNFRDFFRjMzQTRBNUYzNTUwQTcKKzoxMEEwQzAwMDFGODJGNTI3RDY0NUU2QkJEMzUyMjNGMEREREY3MzNBNzYKKzoxMEEwRDAwMDA1QjkwOUY5Q0ZCRkQ3QjM3QjM4N0VDM0Q3NTdEMzMyODEKKzoxMEEwRTAwMENGM0MwRkVEMTlCNzE5RTRFQkMxMTQyNjI3MEY3M0Y5MTQKKzoxMEEwRjAwMEY4Njc1RTdFQzU5RkQ3Njg5Q0YzNjBGRjJCNTI3OURDQzIKKzoxMEExMDAwMEI2MzM1RDU3QzIzQzI4RERBQUNFMDU3NEQxQ0VFOUJBN0MKKzoxMEExMTAwMDNBOTVDQjA3N0VERjQxMTU2MUU3ODdFRTk0QUZCNTM0MDIKKzoxMEExMjAwMERDN0VDQjgyQkM5Q0M2RTM5MDI3QUFDRTdGMTBGOThENDMKKzoxMEExMzAwMEVBQkM1RkNBMTdGMTVFMTdEMkFDQ0MxQkVEQjAzRkJBRDgKKzoxMEExNDAwMDMxQkUwN0M3MTVDMUU4NzgzNEI1NEI3RUY2RjgxREQ2ODkKKzoxMEExNTAwMEZENzhBNDc1MkYyNTJDOUY1OUJEMEVFMjRFNDBEQTEyRDIKKzoxMEExNjAwMEY5Q0Q5REQ3MTM4OEJDOUU0RUVCNjg1MERDQkYyMEZDMTgKKzoxMEExNzAwMEVDNTQwRjdBMTZFNjUzMzZENzRDQzA3RjEzQ0UyN0NFNTkKKzoxMEExODAwMERDODY0RkE4RjlDRTNGOEI5RkREODZERjM0QzIzQ0Q1RkQKKzoxMEExOTAwMEZDNDY5QzZGNTY5NzQyOUY4MzczNTE5MDZGMDdGN0I0QUMKKzoxMEExQTAwMDgwOUZGRUExNDRGNzAxQzBEQkY2OTJFMDU3MUFCMENGQzIKKzoxMEExQjAwMEUyMDM4ODY3Njk1NkY3MjE3ODJFRTk1OURDNURFNEIxM0UKKzoxMEExQzAwMDVFRDI3ODdFMEQ3QUQxNkZCNzJENDIzRUQ0MDZDMjgxMjEKKzoxMEExRDAwMEQyRTM1QkI0MEVGRUQzNjExNkQ3NTE5ODE3RTlDM0YwRjIKKzoxMEExRTAwMEE3QUJGQ0NDNzdCODFFRDJCOTY0NzQyNUYyMTREQkI3RTgKKzoxMEExRjAwMEZGM0QwM0ZENTg3N0MwRjdBRUUwNTAyNjBGMEI0MEZFNDEKKzoxMEEyMDAwMEZGRjU0MUQxQThGMkI0NEFDNDI3MTU0MDlFNzUyMkVBNTEKKzoxMEEyMTAwMDExQURFOTdBMkQ5NEZGNkMzQkIxMzUzRDA3RkI1N0RCNUYKKzoxMEEyMjAwMDhCQUQyOTgzOEM2Q0RDRDE2M0ExNkNENkJCQjdDRTAzMUMKKzoxMEEyMzAwMDNCNjlCMDAxRURBNEY3Nzk3RURGQTRGMzM3RTM0MTVFMUIKKzoxMEEyNDAwMDREOTI3RDg5Nzk1MjY3M0JCM0Y1RTRBQzEyN0I1RTY3MzIKKzoxMEEyNTAwMDdCOTNBRTZGMTRBQ0VGNEU3NkE3Q0JFOEI3MDExOEQ1NjEKKzoxMEEyNjAwMEY2NjdFNTlBQUYwOEU0NDMwRjVENzM5M0MwN0Q2Mzc3QUIKKzoxMEEyNzAwMEI2NDc4OTBDNkNBMkUwQUNFMzA4OTQ0NTE3OUM5ODg2MUQKKzoxMEEyODAwMDMzRTA1MkVEMTEyODA3RkY4NTk5RTc3N0NBMjcxQTcyNDQKKzoxMEEyOTAwMEEzRjEwODNCMEVERTU3NzlCRkMyQTA3Nzk4QkRDQUNCQTkKKzoxMEEyQTAwMDRFRjdCMDJERjMyOEYzRDQ4QTdENDU5ODNGMjEwNzYyRkQKKzoxMEEyQjAwMEEwQkMyNjA1RDBFRjI1NkJEOEJEMEJFMkJFMDU2QUM3NTIKKzoxMEEyQzAwMEE2NzY0RjAwQkI5N0U1NEI4RDg0M0MyMzNBQjlCMjFGNkQKKzoxMEEyRDAwMDdDMzRFNzIxQTRGQjI4RDQ3RjNBRUNEOEQ3MzU5ODFGRUIKKzoxMEEyRTAwMEQwQTQ3NUM2MEUwNzNCNzY0RDJGQzczQTVBRkY5MzNGNTEKKzoxMEEyRjAwMEUxNjcwNzY4NTk2M0Y5OEE4NERGQ0Y1NkI5RTZCQUEyRTUKKzoxMEEzMDAwMERFQkEyRTc0QkYwRkU0NDE1N0ZFOEY4QzcyQTc5MjkwNzUKKzoxMEEzMTAwMDhEQjA1Rjk1RTQyREZEQ0EzMDM5NDgxQUZGREMwMUY3OTYKKzoxMEEzMjAwMDdFOTRDRjk1MDNFMEQwQUVEMjRFNzJEMkY3Q0FCOUJEQkIKKzoxMEEzMzAwMDQxM0M4RkIwM0FCN0IzMDhGOTdDQTI5M0Y2NUI5RUMwNUMKKzoxMEEzNDAwMERGMjczMzU4N0JCQTY4N0Y4MEQ1N0I4OUZFRjY0RkM0MDAKKzoxMEEzNTAwMDdBOEFBOEYzRkVFRTEyRjUyREFDOUUyNUJFREZDQkVBN0QKKzoxMEEzNjAwMEI5NjJGQ0Y3RDk3ODY2RjY3RTY5RjdFRjREMDJGRDQzRDYKKzoxMEEzNzAwMEYwRjc3MUREOTVGN0YyNTA3RTNGQjFGQkVERjM0OTk0QjQKKzoxMEEzODAwMEVENUMxRTg4N0I3OENBN0UzMDJFRkEzREEwRTc0NjA5MzgKKzoxMEEzOTAwMDczREYyQUQ3RUFEMEJGN0RENUQ2OTgxNzdFMUU1OUU0NDEKKzoxMEEzQTAwMDlGQjg0QUNENEVEMEY3QUFGNkY1REUyMUYzN0MxQ0QwM0IKKzoxMEEzQjAwMDM3N0VDNEUzQ0E2NUIyMDlFMzExRDczNzMzM0VERjk1NzAKKzoxMEEzQzAwMEJFQjY3OENEMUI4QUZERUNENENFRUY0OUM2NDAxRDFEMkMKKzoxMEEzRDAwMEVGREExMzQ5OThERjRFN0FGQTMxMEVCRUJDQkIyNEUyQTUKKzoxMEEzRTAwMEVENzg5RTU1RTQ3QkM1RjcyMDRFQjA0RkUzN0YxM0M1NTMKKzoxMEEzRjAwMEVFQTFCQ0UwNDdGRUJCRjgzN0NDREY1QkY1Q0MxMTk0OTcKKzoxMEE0MDAwMDczRjM2NTNCRTJGMUYxMkNGNzBBODA0RjlCOTlERDM3M0UKKzoxMEE0MTAwMEI4NzhDRDIxQTREN0I1OTk1QzRGQjAwNEZCODZDM0YzQkYKKzoxMEE0MjAwMEMxQ0VGMEZGRTExREUwRkZDMzdGMjdGQ0Q1N0U2NjcxNDIKKzoxMEE0MzAwMDFFN0FEOTM3Q0M0QjZCMzNCMzM4QTg4M0VGRDM3OThERTEKKzoxMEE0NDAwMDdEMDA4N0Q3RDM0MEU3RDcxNkY5NzNBQzMyMjQwREZCRDQKKzoxMEE0NTAwMDEzNTlCRUQxQkI0NTYwMDc1REFGMzVFM0ZENDRCMzU2MkMKKzoxMEE0NjAwMDdEOUMxNzdFMUU0NTk0NkFGREZGNzNBMEEzODQxMEJDREIKKzoxMEE0NzAwMDc2NzVFN0ZBNUUwOEJFMkZERDAxQkUyRkZEM0JFMTlCM0UKKzoxMEE0ODAwMEE0MERFODFEMTAzNzNEQ0JFRTBCMUJFMDNGQUYwRkNGMDcKKzoxMEE0OTAwMDczMzlEOTlEQzlEREQ4NjYxNjI3NTJFNzZCOURFQzZFREUKKzoxMEE0QTAwMDY2NzhDNUUzMzE1NTkzREYxRDA2RjExODQxMEYyM0EzRUMKKzoxMEE0QjAwMDQ5MjNGOEQ3Mjk1RTNCMzg1RTNCMDBBRjA1RkU4NkUyQjQKKzoxMEE0QzAwMDMyRjRCQjA4RjQxNUMyNUZDMkVDNjIwRTI3N0Y2N0JDOTIKKzoxMEE0RDAwMDNEN0QwN0I4OUVGRTc3QzJCNTg5RUFCRjE4Qzc3QzNEQUYKKzoxMEE0RTAwMDBBRkQyNzZBMzhGRjhERDNCQjgwQjczMUVERjY3MDM2OTEKKzoxMEE0RjAwMEE2RkQ2QkUwNkM0Q0IzMkJGMkQyMDRCQ0JCOTI0RkVBQ0UKKzoxMEE1MDAwMEZEMTFGMzhFNDBBNzQ1REY4NjRFMUY0REU3N0M0QTFCQTkKKzoxMEE1MTAwMEMwM0M1MUY1QkVDN0E2NzVEQUY3QjhCNERCRUZCQkIyRTUKKzoxMEE1MjAwMEZENUZCQ0VGNkFCOEE5Q0I0QTFFREY1NDNGQ0Y0RkQzQzMKKzoxMEE1MzAwMEZDNEJFMUY4RkY5QkZGN0M3NkVENjE0NUZCREMzNTI3QUEKKzoxMEE1NDAwMDE1RURGMzNDMUYyOEVBQzMwMkZFNTI0MDczRTEwRjFGRDIKKzoxMEE1NTAwMDcxMjk4OEZBRTVCN0Y1QUI3N0U1NEY5RkY0REExMjBENkMKKzoxMEE1NjAwMEM0REIwNkY5OTkzRkJGMkREREJEMDFGMEVCN0Q4REI3NTIKKzoxMEE1NzAwMERFNENFMTNBRjA1QzIzQkJBN0FCMjIwN0YzODc1NkYxMzAKKzoxMEE1ODAwMDM5N0UzOUVDNkY5RjNDNDRGMUU2NEI2MjQwN0ZBN0VGODgKKzoxMEE1OTAwMEYwNUQ1QTdCNkU2NzNDMjhCRUExMjFDRUIwM0NCNDYyMTAKKzoxMEE1QTAwMEEzNTVFQjQ0N0YwRDcxNDZDMjlCQzdEMzE4REU2MUZFRjUKKzoxMEE1QjAwMDBGQTVGN0U5NDZBMjhCQTc3NDNFN0RCQTg0Rjk0RUQzNjYKKzoxMEE1QzAwMDA5Q0I4N0E2QTVDRjREREIyNzY5ODkwRkVFMzUyRTM3M0UKKzoxMEE1RDAwMDY5N0QwNjhDRjMyOUNGMkYxQkY4QkRDNzI0M0U0RTcxMzEKKzoxMEE1RTAwMDhFNTk3NkNBOTg5NzM2NzUxMDhCMEYzRTYwNkFDNDczODEKKzoxMEE1RjAwMEE0MzM0RTNDN0NFRDIxREE0RUQ2N0I4QTU4QkVCNTM4NkEKKzoxMEE2MDAwMDdGRjYwN0NEMzc4OUZCM0Q5RTQ2OTg5RjVERTI3MTY0REEKKzoxMEE2MTAwMDQ5ODdGNzYxQTlCRjlCQ0JENzNCNDk1RTI3NDNCRTRCMTgKKzoxMEE2MjAwMEYwMDM4MjdBQjdBMDNCQkFCRTEzODYwMjc2QkUwMjdFRTIKKzoxMEE2MzAwMDc3QTI5Q0U4N0NCREYxN0NGMzk2NTI3OEJGRjJCNDFEMDIKKzoxMEE2NDAwMEUxNTIzMzY4NUQxRUVDNjNDRDI4RTk1MzQzNUVDOEFFMkEKKzoxMEE2NTAwMEE5NTlGMzE3RUNBNzRDN0VBNTFFREVCRjdFOTZCOUMyQTIKKzoxMEE2NjAwMDA3QjY1MjNCQzUxRUVFQUYwQ0NDMDFCQUJDOTNGRDIzMUUKKzoxMEE2NzAwMEU2N0RBRUNFODdGOEY0NDlERDA5MkNERjFGRjE0RTExREYKKzoxMEE2ODAwMEU4MTk4MTNBN0Y0NEJGRTRCN0Y1MEYwOEJGODBGMDEzQTMKKzoxMEE2OTAwMDA4M0UyMEVFRTE3QjNEOERGMzA1QTNENDFERUY0RkQzQTMKKzoxMEE2QTAwMEIyNTJGMENCMDM5REY5RUI5Qjc3RTBBRjZGRkUzQkY5MjUKKzoxMEE2QjAwMEVCRDdDNUYzQ0E2NDI2MTdENUY4QURDNjZCODFDRjcwNEEKKzoxMEE2QzAwMDVGMzdGQ0RFQzAwMzU0REYwM0I5M0E5Mzc4NzIyQjI5NUQKKzoxMEE2RDAwMDlGOURCRUE0NDEzNzU0RkFGNjc4QkRDQzc0MjE4MzQ0QzMKKzoxMEE2RTAwMDM4NjdGMkNERjlCOTFERjc0RDJFOTVEMTNFMTBGOTA5MTUKKzoxMEE2RjAwMDYyMUZBRUE3NzVEMjMzQkY0QTRCQjhFREJFMjlEQkZGNTAKKzoxMEE3MDAwMEVEN0FGQzg1MzlERjRFQUUxMTg1M0U2MDRERUZCNEVFM0IKKzoxMEE3MTAwMDg0RjREQkFGNUJEOUZFMkY1RTc3RDhGOTk3MzlCMjI2ODgKKzoxMEE3MjAwMDc0REUwM0YyODcyMThGQjFERENCQ0UzMzU2NjQzNUUwODIKKzoxMEE3MzAwMDNERjE2NDUwMzAwNkY0QzZBNTA3NjVDNDQzQTI3NTZBQUUKKzoxMEE3NDAwMDUzQzJFRTk3NkEyNUJFMEYwMTFGOTcwQzVCODJFN0UwQUMKKzoxMEE3NTAwMDNBREQwQjY1NkFDMjczNzFFQUZCQTE0NEJFNzAzNUVGNDYKKzoxMEE3NjAwMDQ3N0Q0RjU0MzVDRjEzQUU1NkU1RUQwQzQ5RTdFNzA4NkEKKzoxMEE3NzAwMDBCNDgwMUNCQUY1MEVBQTVFQUIyQUQ4RTI4RkM5MjZEMzIKKzoxMEE3ODAwMDM3RUJEMDBGNTA5MkJFRjc0NzlFQjREMDNFOENFREJDNTUKKzoxMEE3OTAwMDZGMTNFRUIwNkYxM0ZFOURGQkE2QzY1N0Q5QkMxM0NGNDcKKzoxMEE3QTAwMDQzN0Q1MzdDMjU3NkU3M0M5OEI3RTBDM0IzMjA4NzhCODUKKzoxMEE3QjAwMDhFM0JFQjgwQzEwQkY3Rjk4QjdCQUREQjI1NzZGRjRDMzUKKzoxMEE3QzAwMEZCQTcwNEZENDY3N0JBMTc3OUYwNjkzNzlFRTcxQ0Y4QjYKKzoxMEE3RDAwMEFFNTM2Njc5MDQyQ0RGNDBFODI5NDI2RjE5REExQTk0RTcKKzoxMEE3RTAwMEQ5RkRGNUZDMUMxNENGMEJGQUJBRkNDQkUxQjdBMDlFNDcKKzoxMEE3RjAwMDIzRkM2RkZGMkNCRkI1OTA3MzdCOEM4QzNFODQ3RkIwQTUKKzoxMEE4MDAwMDMwRTA0MjNEQUU0REU3MkI4MjdCRTgzREZCQTMyMkVBRTAKKzoxMEE4MTAwMDAxM0Y0OTY3RkJENEQ1QkRBRDQ5MzFFRTlGQTQ0MzNCMTEKKzoxMEE4MjAwMEU3RUZFMkZFRDYzMjk5REREMzdDREQyRkEzRkY2RUY1OTQKKzoxMEE4MzAwMDBGN0ZGN0VCNjdFRDc3QjZFQjZCMkNENzIzREE0NUEyRUEKKzoxMEE4NDAwMEFDRDFCMDczMTIwNUE1NzZDQ0RCMDM3QjA5RkM3N0MyRDMKKzoxMEE4NTAwMDlGQTc3RUZGNTA2NkM5Q0U3NEY0MkYwREMzRkIzNEFGQTMKKzoxMEE4NjAwMDZGNjVGM0U5NkE1RjZBRDYwNDcxRkMyRURCRjlGODM1OEYKKzoxMEE4NzAwMDA3OEIyQ0UxRjc2MDdDOUUyRTA5N0NCNjVDMzQ4NkY2NTMKKzoxMEE4ODAwMEY1RUJFRUZGRjBFMDc0ODU3RUYzRkZCQUREMzA0OUE2MEMKKzoxMEE4OTAwMEFBMjM5NThGQjk5Mjk3RTlBNzg0RTlBOUIzODgxRkNCMUEKKzoxMEE4QTAwMDM5MjQ4OEE1OUJCMDdDRkFGOUM0ODFFNTQyRTJDMkQyODIKKzoxMEE4QjAwMDk1RTlGRTI4MURGMzVCODI4OTk4MEZCOUVGMUY3RDAxOTIKKzoxMEE4QzAwMDZGQUU4RDE4REEwMEI5NzNGRjJBM0RBRDNEREY4RUUzMjAKKzoxMEE4RDAwMEI3QkZGRThGMENDODZCQjkxM0ZERjc4QjcxQjZBNjQ3RDcKKzoxMEE4RTAwMDg4MjdGRjY3QjE4Q0YxMTM5MkJDMTJFOUExOUNERjkyMUIKKzoxMEE4RjAwMDQwNDZCMUI4RDg4RjEyQjNEODNERjUxREZDMkY2OUJCQzcKKzoxMEE5MDAwMEUwN0YxMDZGQ0RGRDU0QzNGMjQzOTY0QTc4N0Y2QjczOUUKKzoxMEE5MTAwMDQwODNBNDk1QkIyOENCMEJGN0YxMzQzN0IxRjZEQzJBODIKKzoxMEE5MjAwMEFCNTdBMkY1RENDMTUxQUM3RDg1RDUwQkU3MUU2NjkzMTQKKzoxMEE5MzAwMDAwRDJFMzVDMzhGNTIwQzMzOTE4QzZERkM0M0RFNTU0QzYKKzoxMEE5NDAwMDYzQ0YwNjNENkI1MThCOTFFNUVGOTM0MDRGRTBFMzc5ODgKKzoxMEE5NTAwMDVERDgzNzYzMzM5ODVEREMyRjlCRjFFRDdFMjU0QTNGNTAKKzoxMEE5NjAwMDQ0NEMwNkUzMDM1NTk5MjU0QjMzNjhCOTJBQzMxOTBCQTgKKzoxMEE5NzAwMDY1M0Y5QjdGRDM0RjBCRDEyRjhGQkZBM0YyQzVFMDA3NUQKKzoxMEE5ODAwMDMxN0UyOEJFN0IzMkIzMjQxRURFN0I1NTYyRjlFNjlFMDMKKzoxMEE5OTAwMDgzRkNGNzA2NDgzMDMxRkNGRTUwNTc2NjY5NkEwNjFEOTUKKzoxMEE5QTAwMDNGMkI4MzMwM0FFQTAyQUVGMDdCNzNBRTA4RjY5Q0M4QzgKKzoxMEE5QjAwMDY3RUMwNzM2MTVGQUM3RDkzRDU0QUY0QUFDNUVGMEJDMTgKKzoxMEE5QzAwMEVEQkVGNTdERDE4N0VGMDFCREY2Qzk0Q0Y3M0QzODdGNkYKKzoxMEE5RDAwMDNEMjEyNjk4RkZDRjBEREUxREE4N0ZENjY2ODAzRjcyRjEKKzoxMEE5RTAwMEM5RjMwNjBERTgwNTFGNTFCMTBBRTc0QUZFNTg2N0M0Q0UKKzoxMEE5RjAwMEYyNjM2QUU3NDJGOTI3NkFFNzQyRjkyOUI1NzNBMUZDRDUKKzoxMEFBMDAwMDhDREFCOTUwMkVCQUUxMjA4NEYyOEZGNzMyOUNBMzMyNEYKKzoxMEFBMTAwMDhBNDJGMTM2RjU3Qzg3NzM3ODc2OEM3RjUwOEZFMzU3QzYKKzoxMEFBMjAwMDY1QkExMUJFMURGQkJEOUY3ODIxMUVGMkFBMzU5ODZBM0EKKzoxMEFBMzAwMEJCMERCRTc1Q0Q2NzNDRENERThCOUM5RkQ1OUZFRjdCNEQKKzoxMEFBNDAwMDVFOTMxNkU1Nzg1RTczMjA2NjcxRDg3QjkzMzNGNEQ4RjUKKzoxMEFBNTAwMDlFRkJGQTA1M0MxRkRBNjZFOTgwQUY1M0EyNEI5RUE0MjkKKzoxMEFBNjAwMDYxRjVDOUNGRjc0MUY4NTY2NTNBOTdDMjNFNTJGQUZFRjIKKzoxMEFBNzAwMDBFOTQ3OUNEQkZGQjA5OUNFN0ExRkQ2MzFFNDFCQjE0NzkKKzoxMEFBODAwMDdDMEFGNTdDRDUzQUQ0NzAxMEVCN0FENUVBREYwNERGODYKKzoxMEFBOTAwMEJGRkE3QTM2QUM4NEYyMUJDMkU4MDZGMDQ4OEFCNERFMEMKKzoxMEFBQTAwMDc1MDhEN0ZCMENDMTQyMzhBNzcyREYyRDM5NjJERTcwMDIKKzoxMEFBQjAwMDU1NjYzMUMyNTkyN0YwNERDMDg5RUZEN0I3QTVFQjhFNDcKKzoxMEFBQzAwMDc4MzZDNzUzMjJFRUQ3MDBERTY5MDczOTc0MzMwNkY0QUYKKzoxMEFBRDAwMEJBNzIxRUFGNkY2RUVBRjkzRUFDQ0Y3MzQyMjZCREVDODAKKzoxMEFBRTAwMDg4QkYwQUJBN0I4RUVGOEYyODczMEZFQTVEQjA0RkFGMzUKKzoxMEFBRjAwMDFFQkNEODEzRUU1QkE1RkJEMjEzRUU1RkREOUNEMTRCRTEKKzoxMEFCMDAwMDkxREY5NDNCRjhFRkRCN0UxQThGRUZFM0VGN0NDRTIwRjIKKzoxMEFCMTAwMERCQ0IyMDlGNjRBNkYxRjAzMTU4RDI2Q0NCQTc2NTkwQjcKKzoxMEFCMjAwMDRGMzIzNzU5M0EwRUU1M0M3QkQ2NjhDODIzMTFGOUVFMEYKKzoxMEFCMzAwMDBCRkExNDFGMDc1MjlBRTAyODQ3N0RBQzE4OTg0Qjk4REYKKzoxMEFCNDAwMDNDMjgzNTQ2RjNDQjlGODVGQzg5NTNENEM3MjQ3NzU3REYKKzoxMEFCNTAwMEJDM0ZDRURFNDNEMTNFQkVDRjNEOEE3NjMxRUUwNDQ3QzgKKzoxMEFCNjAwMDdGQzU3QkZENkNDMTZDQjBCRkU4M0FEODdERDdCQjY0QjQKKzoxMEFCNzAwMENDQkJDQjdERkRGNEJERjdEMEZBQTQxN0E3RTJGRDdFRDgKKzoxMEFCODAwMEFGRjJGNjQ5N0I0QkYxRjcwM0RCMjkzQ0Y1NTQ5MUJBNjAKKzoxMEFCOTAwMDM0RThCMUE3N0UwQTlEQTlGNEZCQ0E4MzJGMUM3N0RBOUIKKzoxMEFCQTAwMDZGQTNERkRGNDFBRjE3RkM3NTc5OEJCMTA4RjhFQkQ3RTYKKzoxMEFCQjAwMEQ1RjNENUZCQjIzRjgzOUYwQkU0N0E3RjU3RjhEMjQxQTAKKzoxMEFCQzAwMDBGOTI5REUxMEJCRjY3NEI4RDJGOTA1OUNBRjA4Rjk1NjcKKzoxMEFCRDAwMDkzNEVCMTczNjBERjk0OEY3RDBFN0MyQ0VDMUM2NjQ3MjYKKzoxMEFCRTAwMEE5RjJCN0Y1RDMzQkRFNUYwNUZFRjdGNzY0ODJFN0VBMkIKKzoxMEFCRjAwMEY4RjlCQ0M1RjBGRjcyMDhDRkM5QzJFRDhGQzA3RDUyMTUKKzoxMEFDMDAwMEY0QjkwN0Y0NEYzODA3RUFBNEZERkYzOTgzRUI0RDk1RkIKKzoxMEFDMTAwMDg3MUY0OTI5MENCNTkzRDU5RjJBREUyNzZCQTUwRDhBN0UKKzoxMEFDMjAwMEZBRkEyQzY1N0Q3M0YxODZGMEVGQkJFMjg3OEJCN0NFMjUKKzoxMEFDMzAwMEQzQkJGMUZDQTYxNEYxRjc1QUM1N0NDQURFOEFDMkZDNkMKKzoxMEFDNDAwMEJDODk5MDc3NDIxRjU1MTc3RUEwODVGOEVBQzQyRUU0OTAKKzoxMEFDNTAwMEE3RTAzQjMzNjQ1MjFCQTlGRDY2MDZGM0RGNEY3ODJCNTgKKzoxMEFDNjAwMDBBRjM1OUJFNjlCRjFGNTE1ODYyQkVFMDZGOThGQ0ZDRTEKKzoxMEFDNzAwMDI4RDZBRjBEREY3NzQzMjZFQkZGNUFEMTk2MUY3RTA1MEUKKzoxMEFDODAwMDcxQ0ZGRDA0RjMzN0FGNTkxOURGQ0Y2QkZBNDJBM0ExOUYKKzoxMEFDOTAwMDY1QkY2RTBDNUZGMjJDMDEwREM4OTNGNjhBNjgwRkU0NTUKKzoxMEFDQTAwMEU3RDcyQzM1NjM1RTY3QkZFQ0UwODdDNjdDNDI2MjMzMzIKKzoxMEFDQjAwMDM3RkZEODQ4RjdFRDBGNzA5ODMxNEM5RUI2ODM4RDQzMUYKKzoxMEFDQzAwMEVCQzlGRkYxMzhGMkZCRjE2RjQ1RjkzNERGNjIzREM5QTIKKzoxMEFDRDAwMDU0ODc0Mjc5NURDMkU4N0IwRUUwMEQ5NzJCRTAzQkFGRDUKKzoxMEFDRTAwMDc5ODQ3NEM4MTlFMDA3QjA3RUE4NEZDQUZDRjFGQjRGMDUKKzoxMEFDRjAwMEQyNzE2QjRFMzJGQTg2NEMzOUI1REQzRTMzQ0M2RTI3QkQKKzoxMEFEMDAwMENGMzFCQTM0RDI3RkEwQ0YyRDNCREFBMDA3N0JFRUNFNzUKKzoxMEFEMTAwMEY0REQ4ODc5MzM1Rjk3QUUwQjMyOTVGNjdCMDQzQTNFQ0IKKzoxMEFEMjAwMDM1OUVFRTRCQ0Q3RTc2QkZDNEY1OTY1RTc4QUVCNTJCRTQKKzoxMEFEMzAwMEY5NURCMzU1ODNGNDI3RUE2RDJERjI1OEMwNTdGNUY5NDQKKzoxMEFENDAwMDcwMDE0RjYyQzk1MURDRTNCNDcyRjhERjI2ODM5QzVDNkEKKzoxMEFENTAwMDc5NTBDQjkyM0RCQTFBNjdBMzg2RDhDM0M2NzlGNTkwQ0QKKzoxMEFENjAwMEExODJGRDBFMjU5QjdGQkI5MENGMDdGRjZBMkJFRUNCMDgKKzoxMEFENzAwMENBNzUxMUU0MUM5NUNCQkE3ODkwQ0JFNUVDRjcxNUNFRUIKKzoxMEFEODAwMDFDNEMyQTAxRjg5RjkxODhDRjhFRTdBRTU4OUVGMUZEQUEKKzoxMEFEOTAwMEFDM0I3ODZFQzJGQjQzOTJGQjY4QzNFRjM3MTQ3NkU0OUEKKzoxMEFEQTAwMEQ0ODM1MzdCODExRUY5NjFEM0ZDMzM3NDY3QzhBMkNDNzIKKzoxMEFEQjAwMDFFMzhERTM0RTI0MUJERjc4Q0Q1OTUwRUZFODY0OTNDNDcKKzoxMEFEQzAwMERFN0ZDNjFBNkMwNTdFN0M2Njc4QjQwNEYxN0JEQUZGMDAKKzoxMEFERDAwMDdBMTI3NjVGREYxOTlEMkI5REREMDMyMUYyOEFFRkZFNEIKKzoxMEFERTAwMDU2RjdCNjk1Qzk2QjhCQzc0M0JDN0ExNkIxODAxRDc5RUYKKzoxMEFERjAwMDlGQ0NGNDVBRjIyNkEzNEJDMUVGNkEyNEJGMERFNkU5QkIKKzoxMEFFMDAwMENBOUNGQ0ZENENGQTVERDI5QTFGQTE1REQ5MDEzNzJENzkKKzoxMEFFMTAwMEZGOURBNkFGQTlENzc2RDhBRkJCMjU3NjNGODk4M0U5M0EKKzoxMEFFMjAwMEZCRDVDM0FFRkU2QzFBOUM3M0EzNzZCNjQ0RTczM0JGNjIKKzoxMEFFMzAwMEY5MzBERUMzQTNCNkFCM0JFQzlCRkZBNTdGQjRCMzdEN0IKKzoxMEFFNDAwMEU0REE5MjU5MTRGMjdCQUJFREE0MEVCRDVDRTg3N0JCNUIKKzoxMEFFNTAwMDU4OUVGQjkxRTE0RkI3MkRBN0Y1RDVCQkEyMTE4RTk3NTgKKzoxMEFFNjAwMDlGMzc3ODgwN0Y1RkRFNjE0MDdCRTdCMjJENzg2RTE1N0IKKzoxMEFFNzAwMEQ0RjdFNjNBM0MzODVBMEU5RUVGMTJGOEJENDQ2M0ZGMTEKKzoxMEFFODAwMDNEQzgxREYyNUIxRERFQjdGMUM1Q0YwREY4N0IxRTRCMzMKKzoxMEFFOTAwMDVGQjg2QjA3RDg0RjVGQTREQjVGN0UwNUZDN0IyRjI3NzUKKzoxMEFFQTAwMEUwN0QwMDI0OTk3RDNGOTFEMzIzRDA5NzlERUU4N0ZDRDAKKzoxMEFFQjAwMDBCMzNFQTBENEI1RjRCNDFGRTI1RjZFRkQyQ0ZBM0YwRUIKKzoxMEFFQzAwMDFDRkNFNTEzRjdDNzgyMUZBQzU1QjM4N0ZEOEVBNDZDM0QKKzoxMEFFRDAwMEYyMDAxRjVFQkUyMzBBRjUzRUEyNzdCRjA2RUIyRkZERjAKKzoxMEFFRTAwMEM1QzQ2OUZENjFGQ0RGMjUxMDU4NEY3QkNCNkJFODdGNDMKKzoxMEFFRjAwMDBDRUQ2RjY0Qjk3RUJEQTUwN0UzMDMxRDcyOTZFNUNEMjkKKzoxMEFGMDAwMENFMERERENCQkMxRkYwQTc4QTg4N0IxMDU5REU2QzgxOEIKKzoxMEFGMTAwMDJDQjFERjk1N0MyMkYyMzlGMERGNjZGMjM4QTlGMDk3ODgKKzoxMEFGMjAwMEM0MTE2MzMyRDBBMTlCQjA3QjFGOUZFODhERjdFQTlFQ0UKKzoxMEFGMzAwMENGRTRFNzk3NDk5MDlGNzcxNEY4NzZBRUZBMDBGQTRCODIKKzoxMEFGNDAwMDBDMkM1RkFGOEI3QjJEM0ZDQzY0RTc4MjE3MUJGRkEyREQKKzoxMEFGNTAwMEYwOUI1NEFGQjlBMUFDRjc2NUJGQjM1QzUwNkZFRkJGQzYKKzoxMEFGNjAwMDgyOTZBQjM4OUNGRjkxRTRGQTA4RDZCN0FDNzFDQkJFQTEKKzoxMEFGNzAwMDc3MTEyRUNGN0RFRjBGMzBFRTA5MTNGQTY5QzhCQjBDQTUKKzoxMEFGODAwMDdFNkFGQjY1QjEzMUM4RTMwRURCMTU3MUY1OEJDRkZDMzIKKzoxMEFGOTAwMDFFRjM0NzJFQkU3RTBGRkVCRUQ4N0NEOTdGMTFFRUM3QjIKKzoxMEFGQTAwMDZBMzNGQjNGNzk4ODk2N0I0RjlDQzI3RDUxQ0ZCNzUzNjQKKzoxMEFGQjAwMDFDNUU2MjdDQTUxMkQ2RDExRkYyNTc1Q0VEOTk0OEI3OTIKKzoxMEFGQzAwMDhDREVDRjZGQ0E0NUY4MDkzRjZERkJFNUM4RjY5NTk4NTIKKzoxMEFGRDAwMEE3RTg1RkNDNEZGNDJGREVGQkVGNENBNkRGNUZEM0ZCN0YKKzoxMEFGRTAwMEYzNDAyRUVGODQzODQ0OTgzRTdGMkRDNjlGMDczRjc1NkYKKzoxMEFGRjAwMEJCMzM5REU1NzM1RkIzRDE3QTE4REVGQzVGOEE5QzBDOEUKKzoxMEIwMDAwMEMzMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNEIKKzoxMEIwMTAwMDAwMEJBRDU4MEQ2QzE0RDcxMTlFQjc3QkI3NzdDNjc3NzAKKzoxMEIwMjAwMEY2ODE4RDdGRTIxRkY2Q0VDNDE4N0NGODE2RkZENUIxRUQKKzoxMEIwMzAwMDREMzlGQzgzMjg0MkNERjE5M0Q0NEEyMTZDOUE0MDI4QTMKKzoxMEIwNDAwMEM0Rjg2NDQzOEI5MkFBQUM3Qjk1RjkxMTUxNUMzNThBQTQKKzoxMEIwNTAwMEEwNERBQjgzMDgxNDU1NTQxODE3MjI4QTMwQkQwNDE1MkYKKzoxMEIwNjAwMDcwMUJEMTQzODkxNDkyNUE2OEVCMzZENDZEMENFN0QyMjkKKzoxMEIwNzAwMEE0MkQ2QTI0NzdFNkVEMUU3N0VCOUZCNDg5N0E5NjZGNEMKKzoxMEIwODAwMDNDRUZDRDlCMzdGM0NEQkM5OUY3REMwMUY4QTkwNkU4N0UKKzoxMEIwOTAwMDcwODIzRDM3MTc2OTA3NTMyMjM4RDQwMUEwQzEzQzRFNTYKKzoxMEIwQTAwMDYzMkFDRTNGNTc3MDAxNkMzNTI0MEMyMTY3MUVDMDYzQTQKKzoxMEIwQjAwMDYwN0U3MjczNkM1MDBGQjA5MUZFOTY3MUJDRTFCN0Y3NzEKKzoxMEIwQzAwMDU5MTZDMDEzMzA2MDg3MzI4MDlCNDJFRjFFNDkwNDE4MjYKKzoxMEIwRDAwMDFGRjhBMTVENzU5MTUwOUJFNzc2MDUwMEQzM0UxMDI2QzEKKzoxMEIwRTAwMDJCMDEyNkU5QjM2MjNBMDVCMDAxQzlEMTY3NTJBNDZGQkEKKzoxMEIwRjAwMDBENjAzRTdFQjc0MDQ1MThGNURDRjFCODM0MjEwMDUwQjQKKzoxMEIxMDAwMDJBMzMxQjk3MkI4MTEyOTJDMzc5MjU1NjhCNzREMEExQjkKKzoxMEIxMTAwMDQ0RDA5RTNENDJDODI3RTNCQUU3QTQ1ODE1ODhBOTc1RDQKKzoxMEIxMjAwMDdCMDQ5NThGOEZCM0I3Qjc4MThGQjY4QjU1ODVEQzAwQzUKKzoxMEIxMzAwMDg5QjkxMkIwNkNBNEYzOTU3ODEwRjFEMDNFMDFFNTA0MDIKKzoxMEIxNDAwMEVBNDlEOEExNjMxMEY3QUQ2RDE1QzI4M0RDMEZEQkE4MDcKKzoxMEIxNTAwMDhFRkIwQUMwQjg3REI1OTUzOEVFMDc1ODRFRTM0RUQzNDYKKzoxMEIxNjAwMDZFMkY4RTA3QUNGMjI5N0ZBQ0ZDMDU1OUUwRkVENUU2QzgKKzoxMEIxNzAwMDA4RTEwMUZGNzQzQzM2RDA3QzFENDAwNDYyMjJFMThBNjQKKzoxMEIxODAwMDlGOEQ0RUM0QkRDOUM0MUQyMDI4MDJDNjY1OTdDOUVGNTYKKzoxMEIxOTAwMDcyQkE2MjYyMTVEQTlERTVENDQ0RjRBN0U5MjJDNjA1QzUKKzoxMEIxQTAwMEY5MjY1QkVDNERBMjJDMDhCMDE3RTMwQkU3RURFMzBGOUIKKzoxMEIxQjAwMEVDMjAxQzBBMkE2REE0QTdEMTBDMkY0MzVEOUI1MEFFMzYKKzoxMEIxQzAwMDhGODU4MUY2NzU0MjNGQTc4NzU4OUNEQkYxNjU5OEUwMzMKKzoxMEIxRDAwMDM0MDgxRTFCNTE4NDlGRDMzNjA4NzFCQTBBQzI5Q0FFMzQKKzoxMEIxRTAwMDg2N0U0RUQ3QzAwMEE3NkIyMUNFMjkyQzg5NDVDMDRCNDcKKzoxMEIxRjAwMDNCN0RDNzczM0IxM0M5NTc5RTE1MjY5MUQ2N0UwREMyNjIKKzoxMEIyMDAwMDAzQUVFOTM4RUMzMTcxOUExRDA3OEQ1MTNFN0U1RTFDMEMKKzoxMEIyMTAwMDU2ODE1QUMwRjU0REM1QTNCODgyRTdGNzU0M0MxQzk0M0IKKzoxMEIyMjAwMDhGMThCNzBDODgxNjEwNUQwRUJBNDg3NDA1MjUyRUVBRTMKKzoxMEIyMzAwMDU5MDlCMjhERjg1NjA4NzJCRUZEN0ZDNEExNDE1NzZEMDEKKzoxMEIyNDAwMEFBN0YwNjNDNUE2N0NFOEJFRjlBNzkyMTEyODY3NUE5QTAKKzoxMEIyNTAwMDM4OUQ5MTY1Q0UyN0UzMDU2ODY3NjhFOUY0MzgyNkM3MEQKKzoxMEIyNjAwMDZCMzM1QkZFMkU3QjAwOEU0NkRCNDJCNjQyRTQ2QjVBQUMKKzoxMEIyNzAwMDdBQ0E5MEZGOTlCQ0QxRTA5QjVBN0VFMTQzRkU1NEY0MTgKKzoxMEIyODAwMDMxODMwRkI0RDREODE1ODBERURFQzc0MzZEOEYwMEE4OUMKKzoxMEIyOTAwMDE5NTk1NTEwQTBDMjUxMkU1MEZFRUNGNjE4RjhBQkJENEUKKzoxMEIyQTAwMDdCMTQwRjlFMjNCNUM0QTU5MDdGNEUwNzYyODZGODg5NTQKKzoxMEIyQjAwMDY1MjIzNDIwNkQ5M0Q0OTc2NUI0QjM3NDc1QkNDRjQwQzgKKzoxMEIyQzAwMEI4MjVCRjAzQ0ZFRjc4REMwRTg3NzBGRDdFQzk5MDc3N0QKKzoxMEIyRDAwMEUwM0E2Nzc1Q0EyRjFDRDczMjkwMUYxQ0FDRUM2MUJFRDgKKzoxMEIyRTAwMEQ5Rjc0N0ZEQzc0OEJGREFGQkIwMDY2NEM3MzlBNjdDNkIKKzoxMEIyRjAwMEQ2M0UzRkNFNTc0RjkyM0MzOENCODFFMjVFRTQzNEY0RTkKKzoxMEIzMDAwMDhDMEY1NjU2NTI1Q0NFMTA0ODM0OUZFQkFEMjFEQ0ZFQkMKKzoxMEIzMTAwMDkyMUYzQTQzRjIwOUI3OTE1RjY3MjgwN0U3Q0Y0RURGRTQKKzoxMEIzMjAwMDk3ODNBNzQ5N0VFQTc4RTI0MzM0MDBEN0JGMjVBQkU3OEQKKzoxMEIzMzAwMDY4QkUyQkYzRDM3MkFBNEI3Nzk3QkREM0E3N0I1Mzc5MDMKKzoxMEIzNDAwMENBNzBGRjRERTg3NzI0MDg1MTg5RDc5MTY2Q0Y2REFDNUMKKzoxMEIzNTAwMEEzODAzMTk5QzQ3ODI2QjZBMjFFQzRBMTM2QTQ0NkVDQjcKKzoxMEIzNjAwMDM4RkNBNTREMTNGNTU4QTQ0ODZGOENFQTVEOTdBNDk3NTcKKzoxMEIzNzAwMDJFQzM3NTJGNkZCODI1MTk3OTU2NkNFNDk5NTk4Nzg2QjUKKzoxMEIzODAwMDJFMERCRjUwNjRCMDIxNDgzQjU3NUQ5N0VFRkZFM0Y3QTkKKzoxMEIzOTAwMDg4NUZENzNEOTc0MkUyQTlGMzc0QjQwN0IyNDhDODY1MDUKKzoxMEIzQTAwMEE5MUJDOTczRDY3OERFMTExM0IzODg1RkJDOTVFNDk2RTgKKzoxMEIzQjAwMEJGMzM1MjQ2N0VBRDE4RDEyMzZFRDIzM0Y0NUU5MTYxMTUKKzoxMEIzQzAwMDg3RDkxNzgyRkY2NDVGQTQyRkI0OEI1NDlDMDFCQUNGMzYKKzoxMEIzRDAwMDg5NTEwN0UyRDVDREMyOTdEREM0RkY5QzI5MUFEQUZGNTcKKzoxMEIzRTAwMDY3MjdFNjQ3MzZDOTA3NUQ4NUU4RDc3NkQzQUZDRUUxNTQKKzoxMEIzRjAwMDEzN0Q2RUE0REI1RjdEN0EyRDU0RDE3MUIwRjNGQTJERUQKKzoxMEI0MDAwMEUzMEY5REZGOURBRkRCNTNGNTlDN0Y2MzIwRDBDRjJFRDQKKzoxMEI0MTAwMDQ4N0U2MjEyRTU0MUU3ODA1NUFFMEIwRUZGOERFQTRFODUKKzoxMEI0MjAwMDU3N0E5RDQ3QkIyNjY0NzcyRUM3REJFQzU3NDAyRDA0MjcKKzoxMEI0MzAwMEY1M0Q2QkFFMjUzRjVDNjRGNzkwMTQ3NTMwQTQzRkU5OTEKKzoxMEI0NDAwMDUxM0NDNDlCRTcwNzJFN0UwRkQyRTVFMUQ1MUMxRUZCQzUKKzoxMEI0NTAwMEU0NzlGQUU2MDFCNDNEMjc4NTU3RTBBNDIzNDhCODA3MEMKKzoxMEI0NjAwMDRFRTYwN0M5QkY4MDA0NUI0MjFDRUYyOENGRTMwMEU2MkQKKzoxMEI0NzAwMDA2QzM3QzNBM0Q3N0MyMjdFMDNFQTc4NzJBMTRBQ0EwREEKKzoxMEI0ODAwMDcwNjE1RjEwRkVCODMwNjU1RkI3Nzk5RURBQzU1M0FENjUKKzoxMEI0OTAwMDEyRTZDMUJENjdDMDgzNDcxMkJBODc1RjhCMzg5MUVGNTAKKzoxMEI0QTAwMDNFMDgyNDAxRjdFODBCRjVEQzFCMTNBMkE0QTc3MUI4MzIKKzoxMEI0QjAwMEE2ODBFMjdERDYzQzlGOEUwMjAxRTQzNDlDMzJFNDM5QzIKKzoxMEI0QzAwMDIwNTdBNEY4MjRCRTBFMzMzRTk5MTVGMzJDRjM2RUU1RjUKKzoxMEI0RDAwMDIxQ0JGQUVDMDY5Rjc1QkQxNjhDRkJFQkE5MUUxQkVCNkUKKzoxMEI0RTAwMEU3MDY5NzU4RTRGNzY3QURCQTQ2NzlCOTNDQkU2RDJEQ0IKKzoxMEI0RjAwMEUxOTJCM0JBREEzMjVGMEY0RTdFN0ZBODJCNzYyOTUxRTQKKzoxMEI1MDAwMDVDMEYxRjFCRkRCQzAxN0Y3ODNGODBCMDQ4RkUzNUU5MTIKKzoxMEI1MTAwMDAwM0ZDMjc4MzQ4RURCMkM3MUNGRDAzMTFGNTEyRUUzMjcKKzoxMEI1MjAwMEREQjRCOEUzQUY0M0I2RjJDQkJDNjYxRTE0NDM3MTdBMDgKKzoxMEI1MzAwMDFFQTQ3MDc2M0RDMDkxRTdDMTMwMEExMUNFNkUyOThBRjMKKzoxMEI1NDAwMDU3OEU2OTM4RDVDM0MyNkM5QUFGQkIyNjQyOTRFM0RFRUUKKzoxMEI1NTAwMEEzQzQ3MDdDN0VDODhBNzc3RTg3MTVFRjQyRDU4QTZGMzgKKzoxMEI1NjAwMEQxNzYyQkJFMjU2MTJCQkUwQkY2NUFGMUY0NkE1NkZDNDAKKzoxMEI1NzAwMENBMEUzNDVBRTQxRkVFNkZCMUYwOEI4RUFDQjFDODJGRjcKKzoxMEI1ODAwMDhFQUVCN0YwOTVBRjNGNjE5MTVGM0FGMDBEQ0I3Q0UwQTYKKzoxMEI1OTAwMEZDMEVDQjdDMzJBRkE2QzY3RDU5QUNEQjIyMzczNUVFMzQKKzoxMEI1QTAwMDM1RDc5RUI3RTg0REM2NTlDMzlGRkY2NzlDNzc0RDg5MzUKKzoxMEI1QjAwMEYzRjM2ODFCOURCQkVCNTk2Mzg3RTkxODdFMzVEM0E4NkQKKzoxMEI1QzAwMDRCRUQ2MjczM0M0OEYxNkVCNjJCMTREM0RGQzkzOUFEMzUKKzoxMEI1RDAwMDZFM0FFRjY2MUYwQTk5N0QwOEQ0M0UxRUY3OTA5OTI3QjAKKzoxMEI1RTAwMDRBNUNCOTRDNzVCNEZBNjZBODM1MEJGOTVBM0Q3Qzk5OUEKKzoxMEI1RjAwMENBNzFGRDU4N0Y2QkI2Q0NEMzQ0RjZBMDNDMzM3MTc5NDkKKzoxMEI2MDAwMEI0ODE4MUNENzI1RTkwQ0Y0QkUxQjY0MUVCMTVCMzUxNjEKKzoxMEI2MTAwMEI4RTlEMzY4ODQ5NzRCNEEyQURDN0ZCRDM5Q0YxQThDQUUKKzoxMEI2MjAwMEJBQkUyRTk4MDFCNjM0M0M5NjlCRTMwMDdFNkU1RkIzQTMKKzoxMEI2MzAwMDMxMDUxQkNDRjcwMERFQ0I0MUEyN0JCOUUwOEM0NkJDQzgKKzoxMEI2NDAwMDMzREQyNzk1MjMyMkJGMjdBOUZDREU3NDk1QTk3NkEyQjYKKzoxMEI2NTAwMDFCOURGMTUyRUE1RkM3RjJENDIzNUVBQ0YzNzcwNTQ1MzgKKzoxMEI2NjAwMEU2RjcyQ0E2NDdDOEE5MDQzOUM2OUJDRThENTBEMDRGMEIKKzoxMEI2NzAwMEY3NzdGQ0YzMjFBQ0JCQzJGNTkwRTZFN0U2N0I3NEI0NDgKKzoxMEI2ODAwMDVGMzVFRDM5RTE1NThGOTE5RTUxRTZFOUFCQzFCNUQ3RjQKKzoxMEI2OTAwMDFCM0YyQUE1RkVFMzEwMTEwOUFDODM4MUFDRTA2QjM0OUIKKzoxMEI2QTAwMEFGRUQ2RjlFQ0JGQjZBM0VGQTg3NzU1NDE3NjQ3RTdGQzEKKzoxMEI2QjAwMEQwOUU2N0ZDM0RGMDExMjk3QjI0RUQ5QzFFQjBGM0JFQUIKKzoxMEI2QzAwMDAzRTZGQjY4QjM4OTU3RjI3REI0QzlEQzdGMTQ1NTZDN0YKKzoxMEI2RDAwMEM3M0FCREY5RkM1NThFQ0JDRTgyNzFCMEU1RjA3Q0UzNjQKKzoxMEI2RTAwMEY3QTRBNzhCNURENTg3QzhBNzYwOERCMjdFMjk4RDI3NkIKKzoxMEI2RjAwMERGNEI0NUUyRTdFOThCRURBMjNGNUI5RkUxQkU5OEE0RkIKKzoxMEI3MDAwMDNCMEJDNkY4N0JFRUMxRkE1MzQ2MUY5OTVEQkZDNkZCRTMKKzoxMEI3MTAwMDZDQ0E2RjQzRkZFOEMxNENERTVGNDYwRjk2QjQxMDREMTQKKzoxMEI3MjAwMEU5QkZDQkY1NkYwRURGQjBFNEM5OTZCREVGNUJGMkVGN0EKKzoxMEI3MzAwMDI5RUQwRjk2NzkzRDc3QzI1RTg0RkVFQjZGMTRBRUZBNjkKKzoxMEI3NDAwMDNBRTI3N0U3OUNBMzlFREU4RDE4Qjc5QkRFQkE5NDdFMjMKKzoxMEI3NTAwMEZEQzU0NTZEQjRERjdGRjdGM0FGMUNERjkxN0Q3MUIwQTAKKzoxMEI3NjAwMDJENENGOTc5NkJERjREQ0VFQkZCNzQ0RUE3RkE5OTdDMkIKKzoxMEI3NzAwMDY3MjZBOUY0MTY1NEQ4MzAzRTEzNkM4RTcyREMzQjdEREMKKzoxMEI3ODAwMDlGMkQzRUUzNUQzMkIyMzJBRjg1RkFFQzQ4ODk2NDMzRDcKKzoxMEI3OTAwMDY4QjlDMTE3MzYzODBEN0VENTZBQTIwOUJCRUIwMEJENkEKKzoxMEI3QTAwMDMzNDcxODA0MTlFNkMzMjYxNkZBRTk1M0U4RjcwQjc5NkMKKzoxMEI3QjAwMEVBMjc5NDdGNUQzQjI2QUE2Qzc4MUVCQTAyRkE5MzBDQTYKKzoxMEI3QzAwMEUzNTkzQzU3RkQxN0Y5Q0ZGMDdBNTczODhGREI1OTRFQzQKKzoxMEI3RDAwMEY3OEUzMTQxQUI2MjU4MEJBQTdEODVFQjZDMTg5N0IxOUYKKzoxMEI3RTAwMDM5REE1REVBQzQ0QjhFRTcxQUJDNjQ5QzhGNDZERjI0Q0QKKzoxMEI3RjAwMDNGMEZDRDFFNTVGMEExOUUwRjk5MThFM0Y5RkM0QjE2OTMKKzoxMEI4MDAwMDNEQzFGMzREOTdENkJCRjk3OUVBQTA3NzE3QkQ3N0U5MkIKKzoxMEI4MTAwMEJEOTFDODMwNjg4NjhGNzFGRkU2NENBMTBCN0Q0NjNEMTcKKzoxMEI4MjAwMDZCMzQ2OUJCNzhCODlDRDFGREUwODgwM0U4M0NFMDNFMEUKKzoxMEI4MzAwMDQxODFGNjE5NzI0NDRGMjA5Rjg3QjZEMzNERTVENzkyRDgKKzoxMEI4NDAwMDcxOUZBRkZFOTUyMzQ2NzU2MzlCRjM2MzFFQTcxMjlGRkUKKzoxMEI4NTAwMDk3RUJDOTJEQzNDQTg1RUI3MjVGNzI0NDIzNjQ5RjFFQTgKKzoxMEI4NjAwMDJGNUQ4N0Y2RjVEQkYxRkU0MkVGRTk3NzcxMUVDRkRENDQKKzoxMEI4NzAwMDlEMTcxNzFEM0Y5NDE2OEYxMjMzMEVGMDBDODAzMTlGQzkKKzoxMEI4ODAwMDdGOENFNjNCODc0NzZGNTExREI5RTI1NUJERTRGRkE4QTkKKzoxMEI4OTAwMDIwRDc1MzFERTlDQzdBNTNBMkZBNTNFMzkzRjkzQUI0NzMKKzoxMEI4QTAwMDk3RkI4RkY1RTBGQjhDRTNFQ0Y0RkMwOUYzNzUwQjE2Q0EKKzoxMEI4QjAwMDlCNkM3QUJGMDlFQTYyNUFERkU5RDQyNUQyODcxOUMxQTUKKzoxMEI4QzAwMEVGN0ZCM0Y5N0Y2NzZCRkMxNTNGRDJCQjZFQTU5NEY2OTMKKzoxMEI4RDAwMDQ5RUU4Qjc2RDQ5MDlFQTRERjQ5M0I1MjdBM0UzQkFGMzMKKzoxMEI4RTAwMEI3MzkyNzJDRTdGN0Y2RDFGREU1NzQ0RTEwNUY5NUVDREMKKzoxMEI4RjAwMEFGMTZEOTk2RjUzM0FDN0ZEQzhDREJCRkYzNDMyQjdERTEKKzoxMEI5MDAwMDQ4Nzc4NDdGRjBDNkRCNzI2QTNFQzFGQUJGRjUwMUM1OTUKKzoxMEI5MTAwMDZCRDhDNUVCREM2Q0VCQTdGQUQ5Nzk2OTk4RTM4MTdFMkIKKzoxMEI5MjAwMDNFNDlGRUE1RjlGOTI4RUQ5M0Y0RjNDRUQwN0JBRkY4QUMKKzoxMEI5MzAwMEU1MkZFRTVGQTIyNDJFOTFERUM0QjFGQkE1MzJBRUVGNUYKKzoxMEI5NDAwMEJDNzhGNTI2RTU0RkE3RjlDRTg3QjNENkY3QkI2MzBFRDMKKzoxMEI5NTAwMEJFMTNFN0E1RDU3M0FBNzEwQkY4MzQ0QkJGM0YzOTkyREMKKzoxMEI5NjAwMEVCOEI2REQ2RjU3ODUxMTY3MEJGQjNFNkZCRTEzQzlEQ0QKKzoxMEI5NzAwMERCMTlERTk5NjdFMzAyNkY5NTY3MEJGMDdFNDY3RDAwNjkKKzoxMEI5ODAwMEZCMkVENUZENjRERkREN0Q0M0UwRjlCOERCMEI3QzlFNEIKKzoxMEI5OTAwMEVDQTJGQzY3RkExNURFMDc5MkZGNDc4ODMwRUM2Rjk4M0YKKzoxMEI5QTAwMDA3REQ5MkZBNkRDQTBGNTA3Qjc4NUYxMDE3QjgxNENBODIKKzoxMEI5QjAwMEUzQzFERkFDMzFERjRCNDY5RkE5MzNGQjRBMURFOTIxRDAKKzoxMEI5QzAwMEZCRkREOUJDREZENDlBRkJENjNCRjExRUUzQTM5MkFEQkQKKzoxMEI5RDAwMDk5RkYyRjMxRkZBRjcwRjAwQTdGNjdGRDA3NzQxNTNFQTYKKzoxMEI5RTAwMEM5MDAxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKKzoxMEI5RjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzQkMKKzoxMEJBMDAwMDhBQjdDOTMzMzA5ODI5MzEzMDI0MkEzMzMwOUMwMUUyNzcKKzoxMEJBMTAwMDI0Nzk4NDFDQURCMDJBMDc2NUZBNUYzMDMyMzBCQzAyNEQKKzoxMEJBMjAwMEUyMzc0MEZDOEU5MTc0RkQzRjg1MTBFQzg3QkMwQzBDMTYKKzoxMEJBMzAwMEJGODBGQzhENDA1QTRDODA4MUUxMjY5MEZEMUI4OEJGNjEKKzoxMEJBNDAwMDAzRjlFMjdDMEMwQ0NBNDA2QzA2RTRCQjAwRTkzQzIwMjQKKzoxMEJBNTAwMEY2MDdFMjNGNDA3RTFCMUY2RUYzRkYwQUUxQjdGRkFBMjUKKzoxMEJBNjAwMDAwMkE5RjU3MTA5NUZGOTExRkJGRkUwRTQxRkNGMkJDQUMKKzoxMEJBNzAwMDA0RUNDNzg2NEZBODkxMUYxRjNDRUFCNDRGMzNENEM0Q0YKKzoxMEJBODAwMDM3MTk1MEY5QTc2NTE4MThFRUNBMzIzMDI4Qzg0M0Y4OUMKKzoxMEJBOTAwMEQ3OTBFNDhEODA2MjY3NjQyMEVDQUQ2MjBDMEM3QkU1OEUKKzoxMEJBQTAwMDE4MTgyRTMzNjAzNzc3MUI1MDdFMUY1MERFMEU2QTBFM0IKKzoxMEJBQjAwMDAwQjVCQzdCMUU2ODAzMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMEJBQzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDBCNzg1NEQ1QUIKKzoxMEJBRDAwMEI1RjAzRTczQ0U5OTU3NjYyNjkzODQ4NDg0RjA5ODI0RkIKKzoxMEJBRTAwMDgwM0MwMjBFMDEwMjQ4QTg5MzA3MTQyNUMwMDhBODY4RUMKKzoxMEJBRjAwMDExMDY1MTA4OEYzQzQ0RUQ5NzZCREJDQkYwNEFEMUQyNTUKKzoxMEJCMDAwMDM2RDZCNkQyNUVENDAxRTE1RUE0NTgwMzQ0OEQxQTYwRTUKKzoxMEJCMTAwMDgwNjA1MUMxMDZFQjAzQUJENjAwQjYwODAyMTlBMEVBNUIKKzoxMEJCMjAwMDQ4RjFGNzVGNkJFRDdEOTI3MzI2MzM0MDdCRkJERkJGRkYKKzoxMEJCMzAwMERGRkY4RkI1REI3RENFREVGQkVDQkRERTZCRURCNTc3RDkKKzoxMEJCNDAwMDU0OTZDRTU4MUZDNkJFQzFERjhEOEMzRDIwMzE4NjhGRTYKKzoxMEJCNTAwMEI0MTI3RUZGRUI5QjBDQzZBNjVBRTFCRjY0QzZDNkNCRUYKKzoxMEJCNjAwMDBFQzY0NjMwMzZDNUMxNDIxNjY4MzNBNTA4MUU3NjYzMzgKKzoxMEJCNzAwMEVDQ0Q0RDUyNDhDNjNFRDAyRTU4QzhEODIyQzY3RjUzNzEKKzoxMEJCODAwMDE1RDYyNDVEQ0ZEODg1RDEzQkVCODY3OTE4OTM3QzNFQzIKKzoxMEJCOTAwMDU2NUIwMEE1QzdDRDY2NjE1OUI0RjcyQkM5QzU1OEYyRUQKKzoxMEJCQTAwMDY4MTM2MzAzNzg5RjZGRTBERjE0OUY5REM2RDJFQTY5MzQKKzoxMEJCQjAwMDEzNTMwREY1NzQ3RjBGNDNGQkVFMzM3MzBERUZCMzAyOTgKKzoxMEJCQzAwMDgzMENFRkIzMkIwQTBDRjU1RTM1MzcxOERBRjdBOTJEODUKKzoxMEJCRDAwMDMxRDQ3MzgyMzcxQkRBRTdBRDk5NjZBOEY3QUJCRkQzRDAKKzoxMEJCRTAwMEQwRkVCQTc1NzcxQkRFMEYwQzJEMzJCQzFGQkM2NUE5QzkKKzoxMEJCRjAwMEExM0VBNEUxMjE0M0ZCRUI5QjU2MThERTBGMEIzRjYyRjUKKzoxMEJDMDAwMDc4M0ZGQ0UwQ0YwQ0Y1OTFBREJGMzZCNDFGNzU3NEEzM0YKKzoxMEJDMTAwMEUxRkQ5OEI2QUQ4NkY3NjMzRkRENjFBODhGOEJCQzZDMDQKKzoxMEJDMjAwMDY4N0Y2Mzc0OUZBMTVFQ0NERTMwQjQyRkI1RkVDMTUwMzcKKzoxMEJDMzAwMDFGRUZGRUMwRDBGRURCOTkyNzBDRUY2RkYyN0M2Njc4MTkKKzoxMEJDNDAwMEFGRDFDMUE0MDExNzBEQ0YyNzdCRkY2NkU4QTczMDNGMTYKKzoxMEJDNTAwMDAwOUIzMTMzQUJBMUQyQ0FFQUE5QjRCMzA2MkExREFDMEEKKzoxMEJDNjAwMDk1Q0FFRkY2MEVEQzQ5RjRGOTY0QjA4RTAxRERBRDBDMzcKKzoxMEJDNzAwMDQ2RkU5NDA2RTU5QkEzRjM5MjAzRjkzODlBOEYzMUEwMTAKKzoxMEJDODAwMERCMjk3QzY4MzZDNUVBMDhDQjQwNjcxNjJCMEJEQTgwQzcKKzoxMEJDOTAwMDE0NUM1MUEwQjczNEEwQkIyOEEzRDIxRDA1N0ExQjBFOUIKKzoxMEJDQTAwMDc0MTdCNTUyOTkxQTREQTVFNzY5NTEzNzk1RERBMjNEMzQKKzoxMEJDQjAwMEU4Nzk3QTM0OTNDQThDNjgyRTk1RERBMzFFMkEzM0EzQzMKKzoxMEJDQzAwMDgzQThDQzhBMEVBMEIyNDdCNDgwRkE2NTQ3QkQ1NEY2NkIKKzoxMEJDRDAwMDhDREU0MENGN0I0NTQ3NTNEOTNCNUE0MkNGRkI0NDdENTYKKzoxMEJDRTAwMDU0N0FBMjM3NTM5OTEzOUQ0ODY1NkU3NDFBQjVDQjhCNUQKKzoxMEJDRjAwMEZBQTlFQzFCQkQ5MzlFRjc4QkNFQTRCMjdGRjQ2RTJBRkIKKzoxMEJEMDAwMEFGOEIwNkE4MUMxMDVENDRFNUMwNjgwNTk1ODNBMjRCNjcKKzoxMEJEMTAwMEE5REZFMDY4MEQ5NUY5RDE4N0U4Rjk5MDY4MkQ5NTQzODIKKzoxMEJEMjAwMEEzMkJBOEJDM0UxQUE0RDIxQjdEODREQTBEOEJBRUExMzYKKzoxMEJEMzAwMEIyMjBGQTMzN0EzRTNDNUE0RkU1ODhFOEFGRTlGOUM4QjkKKzoxMEJENDAwMEU4M0EyQTBCQTMxQkE5MUMxNTBENTEzOTNBQkE5NUNBMUEKKzoxMEJENTAwMDMxRDEyRDU0REUxMERENDFGREM2NDYxQkE4MkM4QUJFMTQKKzoxMEJENjAwMDRDQ0ZDNzQ1OUJBOEZDMTZEMjVCMUFEMjVEOTg0QTVGQTAKKzoxMEJENzAwMEY0NzU3QTVFMUMzRDQ4NjU0OUY0MkQ3QTVFMUE2REE1MEUKKzoxMEJEODAwMEIyMkNGQTQ3N0EzRTNFN0E5NENBMDlEMUUzNTQ3RTNCRkMKKzoxMEJEOTAwMERBNDZFNUM0RTg2OTJBNkY4QTdFNEFFNUNERDEwQkQ0M0MKKzoxMEJEQTAwMDZGNTIzNDQyNjU3OUY0MTIzRDlGMUM4RDUyQTlDOTNCRjQKKzoxMEJEQjAwMDM2NUEzREQzQTZEMTVGMkVGRUZGMkNGNzVGMDY4MzVDN0IKKzoxMEJEQzAwMDYyMDFEMzM3NTAzMjA3RDBDMTk4Q0VGNkIxMjU0ODNCMzcKKzoxMEJERDAwMDkyOTMyQUQwNTUxMkQwNzcwQUM4NDI5NDg3NTM2QUE0MDYKKzoxMEJERTAwMEQwQjc3MzgwM0VCQUI1QjU2MDVEMUQ2REYxNThBMDdFQzkKKzoxMEJERjAwMDE3OEJBODQ4QkYxRkIxMzYyN0NBRDNCRDYzNEVGNjZDNTgKKzoxMEJFMDAwMDAzN0E3RDMzM0REQzBCODgxQjdGMjQ2RjU1OUM1MzFFQ0EKKzoxMEJFMTAwMENBREIzMzRBMUIzQzlGRDI2RDVGN0FDMDgxRkQ4MTM3RkMKKzoxMEJFMjAwMDBBOTBCQ0UxRkI0OERGNDA4RTM4Q0U1RDBBMEJCQTYwNTkKKzoxMEJFMzAwMEFBNDc3MDg0MzFENDJFNkM4MUZBQUM3MkU2MkI4MEY2NUUKKzoxMEJFNDAwMDc1NjMyQzMzNDNGMDlEQkEwMjdGODUxRkNBMUZFN0Y4NDQKKzoxMEJFNTAwMDY3NjJGOTNBMzIwRkNDN0ZCRjI4OEYzMDEzOTUzRkVFREYKKzoxMEJFNjAwMEVEQTY3MkQ2N0RGRDM4M0Y5NTAxMTBCM0FFMEU4N0Y0NzYKKzoxMEJFNzAwMDBDREU4RjM5MjJCREZENDNBRUJEOUZDMkEwREZDOENFMTAKKzoxMEJFODAwMEY2Q0YzMEZGM0JGODNDNThDMjA2RDQzODNBREJDMUYzNUEKKzoxMEJFOTAwMEEzRDgyRUNFRjMwRkUyM0Q2RjMwODEyMDAwN0QxNTRDRUMKKzoxMEJFQTAwMDM1ODczNkEzN0U2MjlFRTQ1QjcwNUU1NjRGRjIzNDY3NDAKKzoxMEJFQjAwMEUyNzkzREJDMkMzMzVGRTlBQjlGNjc4OEU2RjdCMEM0RkQKKzoxMEJFQzAwMDY2MzZEMEY4QkVDQzY5NDM2ODdDQzI3NzMwRDUxQURBQzIKKzoxMEJFRDAwMDlDNDNBODMwRDBDQjVGMTE5RUQwMkZERkVFNkZBN0Y1MkIKKzoxMEJFRTAwMDQxM0ZCRjEzRTFFM0JFMjZCODQwQkYyRjA4OUUwQUY0Q0UKKzoxMEJFRjAwMDFCNzJFREZEMTI5N0Y1NENDQ0MzNDNFMzg5RTdENTE2RDEKKzoxMEJGMDAwMDE2OTQwMDRFOTFDRENFRDBDNjFDNUM5Mzg3RTQ2Nzg1MTUKKzoxMEJGMTAwMDVCMDhEMDZFMDAwQ0QwRUIxNTI5MDg0MkM2NUE3NjI3NzQKKzoxMEJGMjAwMDg1NEREMEJFNjhCMzczMjNEQTAxRUQyNUMxOENBOTA4MTUKKzoxMEJGMzAwMDg3OEQyQURCMEM0RDU2RUNGRUQxQkJGRjAxRjVBMjBEMUYKKzoxMEJGNDAwMDJBQjM0MDdERTFDNTlGMTczMkEwQTNFQjI0ODk3RjNGMzAKKzoxMEJGNTAwMEU4REJEQjE3QzYwRjMwRURFNzkzNzBGQzA1OEM4RkRGNTUKKzoxMEJGNjAwMDJFMDlCODZFNEUyNkJDN0Q1QUI2QTk2RTJDOTQ2REJCQjgKKzoxMEJGNzAwMDJBQ0IxOUM4RjE5MzAwRDYyQ0EwRUY4NTc2QTY2MDM5OUMKKzoxMEJGODAwMEFCNjZCQjk5RTgzNEE4N0VEMkE2RTkxN0UyNjdBNUIzRjEKKzoxMEJGOTAwMDJFNzdBRDJGQzBCQUM2RkZCMEVFODUyMUI1QjMwRUZGMjgKKzoxMEJGQTAwMDJFREU2MkFDRUJFMDQ1NzY1MEU0QkMxMkRBNDg3NDk1QzQKKzoxMEJGQjAwMENERTFBM0MxQ0I5N0NERTEyN0UwNTU3NjVFMDk5QUJBRDIKKzoxMEJGQzAwMDExQkM0MjI4MDc5MjI1MEZDMUExRTJCQzEyOTY2MTlDQzgKKzoxMEJGRDAwMDBBODAyM0IyNjBDNUFFODczMzEwNEU4QkI3RDhEQzlGODIKKzoxMEJGRTAwMEU4QkU1QkQ5OTA2MkE4NTczNzY1QjkzRkQxRTlEMTBCNUMKKzoxMEJGRjAwMDA3OUY3NkUxRkE5NzY2OUFEQzlGODA3QzNCQjNDQzk3RUIKKzoxMEMwMDAwMEY2MDlBMEVDRENCMjg5NTQ2QUY0NTFEOTkwRTM3NjE4QjEKKzoxMEMwMTAwMEM2MzFENjJGRDQ0QjEzMUI0ODdGN0E5MjY3MEM0OTRDRkMKKzoxMEMwMjAwMDY3NEIzM0NERUU0RjgwNTU0RjZGRTFGQUY2RjQzMkFCRUMKKzoxMEMwMzAwMDFCQkY3MzY2OTlEQkNEQkY5QjQ5QTUwNkFGMjVCNTc2QkYKKzoxMEMwNDAwMDZBQUZDRDJGRDFCOEZGRUNGOTMxRDZDODRFNTg1MTlFMEEKKzoxMEMwNTAwMEMzQkJCQ0M0RUQxM0YyOTNGMjU3MzNGMTQ5QjNGQTA1RjUKKzoxMEMwNjAwMEQyOEQxNUZFRkRDNjQ0NzQ0NDc1NkREQ0VBMDYzOTY4NTAKKzoxMEMwNzAwMEI5MUU5RjZGMzM3QzBGRkE3OUZFQTJEMzJGODlGOTU2MzAKKzoxMEMwODAwMDYxN0ZEMUQxRTVGRDM4MDBGMUE5OTVGMDFDODAxMTkzQjUKKzoxMEMwOTAwMDYxQkM3NkM1QjEwNkVEQThDOTgyN0VBQUIxMURDODgzNzAKKzoxMEMwQTAwMDRBNkI5QjM5MDA4RkNFMzY3MjdDMjRGQUNFRTk2NTVCRjEKKzoxMEMwQjAwMEIyNTFBRTU1NThFQkNEMjhBQzJBMUEwNjk2MjEzRjlEQjkKKzoxMEMwQzAwMDZENUM5OTgxRkE2NUIxN0NFMUJCRkUzOEZEN0ZBQ0YxMTYKKzoxMEMwRDAwMDZENDg4RDE4RjU2NTQ4Q0MxM0M2MzVGMDE5NzM3NEFDRUUKKzoxMEMwRTAwMDFCRUE2NzRDRjAyOTQ3RDc3MTFGOTdCOERFQTlEQTc2QUIKKzoxMEMwRjAwMDY0QzI1ODk4N0Y1NUQzNzkzM0NFNjNCMjE0Nzg1QzRBQzIKKzoxMEMxMDAwMEVGNUNCRjg0RUI4NzcxMTY2RDM5NDY3Q0ZFQTkxQUVDOTMKKzoxMEMxMTAwMEZGQkQ5QzJCQzBCM0NCM0MxRDk5N0Y0OUQyQ0QyRjA4Q0UKKzoxMEMxMjAwMDg2MjRGMEVCRERBMzA1QkYzMkNGRUQxRjAwN0Y5RTdBQTIKKzoxMEMxMzAwMDQzNjU4RkMwM0NEODY1NjgwNUVGN0I4QkI3RjczMEJGOTAKKzoxMEMxNDAwMDBCRTE3NTc3RTM2MjkyM0ZBNzUwRkVBMDFFNjZGNTg1NkUKKzoxMEMxNTAwMDQ4MUY2Nzk5NjkyMkFFRUYyQzdCQ0IzNTVDMDdCRjdEMEEKKzoxMEMxNjAwMDkyNTlDMDA3NEM1OTkwMDcxNkZBMTRDMTJEMEJGNTgwNEYKKzoxMEMxNzAwMEE1QTJBRTU1MUU4QUNGOTVBMDkwNEJEMjM3MjQ0RjQyMzAKKzoxMEMxODAwMDEyRTk4OTBBRkUzQ0M4QUNDQjY5MUQ2QkI4M0MwQUMyRjcKKzoxMEMxOTAwMDNGNThCRkI3REUyODlGMTZBQzMzRDZFN0IzNjkxOTBBRkMKKzoxMEMxQTAwMEM4OTdGOTNGNTc2MTQ0OTA2RjdBRjkwN0YwN0I0NkUyRjAKKzoxMEMxQjAwMDdBNzcwMUFCQTk3M0MzRkM5RjMwMDM5RTYwRkU3N0JCMDcKKzoxMEMxQzAwMDk5OTIwREVCQUI3Q0YxODlDMkI5NTA3RjRERTI3QUVDQ0MKKzoxMEMxRDAwMEY0MzI5ODdFN0YxODI3OTVBRjdGNTE2REM4RUNDQkVGNzYKKzoxMEMxRTAwMEJBQkUxMzhEQzM2RjFCQ0I2ODNDOTI5M0MxNDU5QUZFQjgKKzoxMEMxRjAwMDY1MUVBNTkwQTQyNTE4Qjk4OUQ3OUZERDI4RkI2QzJFNTQKKzoxMEMyMDAwMDZDMDdDRjc1RjI3OURFMUFFM0ZBQUVCNkZFRDhGNTMyRDYKKzoxMEMyMTAwMEY2MzNBMkI3NDU1QjZFNjE0ODY3REE3QTM0N0M2OUVCMjYKKzoxMEMyMjAwMDUxQjc0OEJFNTAxQzNFNjgxM0Y0QUFDOUI1ODg4MDlGMTgKKzoxMEMyMzAwMDY2Nzc3QzFFNTNCRjE0NTNGRjI2QTZBRUQxQjcyQUY4RUIKKzoxMEMyNDAwMDFCRThGRTczNjkyNEYyNzM2NDAyQTc5MzM2QUVENzQ0RTkKKzoxMEMyNTAwMDNCNzM2N0JCNEI1NzZBNjcxMUZDMDJFREJFQjk1MjNCOUIKKzoxMEMyNjAwMDVCRTc3ODhBMjlCRDZCQkJDQTE3OUY3RDIxMDhGNEJEQTcKKzoxMEMyNzAwMEU4Qjk1RkI4MThEMEUzMjlBNTNFQzMwQkNGOTc2QzVFMzEKKzoxMEMyODAwMEVENDIzODdEQUEwNDVENDgzN0E3NDJGMkM0NzhGMDFBMUYKKzoxMEMyOTAwMDYzOTIzNDdCQzMyMTAxREVBQjM0RkEyRjVBM0UwNUY1OUQKKzoxMEMyQTAwMEZCMTc5QjU1RjcyMzgwOTdFQTJEOTZCMDA1RjA1REQ1RDcKKzoxMEMyQjAwMEI4QjA5QzBEQTVGQTMxNUVGRkUxNzlBNDhGRUEyNkY1QUUKKzoxMEMyQzAwMEI4MUVBRjhCRkVFQjE3MTkxRTI3RTEyMURCODQzNjMwMzkKKzoxMEMyRDAwMDBCNjczMzI4QUIzNkZENzkwMkRBRDFENTJDNDJGNDFDM0EKKzoxMEMyRTAwMERCMEZCRjhGQUUxREM4RUJCOUU2RTRBRUVGMzVCRkIxRDMKKzoxMEMyRjAwMDlBM0Y2MkQ1OEQzRjNBOEY3RTYzMzU1MzhFRUJFOUE4MjYKKzoxMEMzMDAwMDAyNjkxOUVDQkM0MTI2NjczN0Y0MTdEODI4MzYwQUU1Q0MKKzoxMEMzMTAwMDhBMDYwNzE2NEEyN0I5QkNGMjk5Qzc4NzFFODM3OTlDRkIKKzoxMEMzMjAwMEQ5RjQ4NjRCRDJDMTA3MkMyNDgyQ0I4NTg2NzkxRkE3RUUKKzoxMEMzMzAwMDVENDEyRjlDMDNGQTY0RkRGNUZENDJENENGRDMwNDEzNzUKKzoxMEMzNDAwMEU4MEVENTY2NUUyRTUxQzNBRUIxMDBDRjI1MUI1NDJGMkIKKzoxMEMzNTAwMDUwMjY1QkYyRUNEM0ZGRjk2QkUwM0JGNkJFQzVEQjBGN0EKKzoxMEMzNjAwMEUwQkRGOEQ5MDNFRkRFMDBGNUM1REJENTZFRTU3QzE5M0QKKzoxMEMzNzAwMDBFMjlBMzEzMUZENUYwMkZDNjY1MzRGODJGREE3OUMwMjQKKzoxMEMzODAwMEVDMTlDMjlGN0YzRkI1MTMwRjhCQjdFRjM1QjMyMTVEMUIKKzoxMEMzOTAwMEUxNTZEQUIwRDdEQ0U2ODg4MzhGODY2MzEzRDA5RTU5RTYKKzoxMEMzQTAwMEY5Q0M5NzY2QzRGN0E5REQxMkVCOUVEM0I1N0ZDNTg2OUQKKzoxMEMzQjAwMDAzNjRCRjIwOUMwODdGMDIzRjFERjhFQTgyQTdGMDk0MjcKKzoxMEMzQzAwMDk3NDc1MDNCMzdDQUVCNDQ3ODcyQTJBRTFFNDk3NEZDQzMKKzoxMEMzRDAwMERCOTdFMUZCMTU3RkI0Nzg3MUZEMTVCRkJEREY4NUVCMDEKKzoxMEMzRTAwMDM4QTlENDcwN0E3RTYyNzU4NjBGQkU1QkExMDYzM0RDRjUKKzoxMEMzRjAwMDU0RjJFNzE1NEYzRTQ4NzRCNkUwQzg4MzY0OTcwMTdENTgKKzoxMEM0MDAwMDY0OTk0ODY3MDRCMzcwN0RGN0FFQkY5NUQ2Mzc5RjA1MzIKKzoxMEM0MTAwMDg4REUyQTlFOTBGRDIxOTQwMzBBOUJCODNEMEUzRjNDODYKKzoxMEM0MjAwMDI3RjhFMUU0NDY5MDk0QjBCRTkzMjgxRkQxQ0U3RDRCMEYKKzoxMEM0MzAwMDE2RjJGMTNFQjIyMzFGMTQ2QjA1NEI4NkVBOUY1QjM5NUYKKzoxMEM0NDAwMDlFRUE0QzI2MkQyRTY3MzVEMEU5QTYxRjkyMUMzREREQjUKKzoxMEM0NTAwMENCRDdERDlENEY3MEQwRTQyNkM5NTNGOUM4RjhFRTFDNDgKKzoxMEM0NjAwMDNGNUNGRTUyM0ZBMEJCNTI3QzhFRUQ1QjU1OUY2REE4OUEKKzoxMEM0NzAwMEExOUY5MDk3RkNGQjBGODhFRkMzQkNFRDY4N0Y5Q0NDMUQKKzoxMEM0ODAwMEUwN0EyMjc2N0Q3RjM0NjlGMjExRjRBQjhFQkU3NDdDNDMKKzoxMEM0OTAwMENERjk3Q0QzQzM5Q0FGMzUzRTBGREQzMjExREZGRkY1MDQKKzoxMEM0QTAwMDZEQ0UzRkQ4MEZGNTBGQ0MyQkRDOURERUVGOUQyMTkxOUIKKzoxMEM0QjAwMDFDQjBCMDcwM0M3RURFQTQwQTdFMzZCRTA3MDk0REY2ODUKKzoxMEM0QzAwMDFCQ0M1QjkxOTJGNTc0MDJFM0E3MTJGQ0M5MkU5OUZGNzUKKzoxMEM0RDAwMDczRThBN0IzQTdBQkYxN0JENENFRENGOTNDQTc5MzZGOEQKKzoxMEM0RTAwMDE3MDhGRURGOEFGQzlGRDRDOUZGNkM3REZBMzVGOTY3MTcKKzoxMEM0RjAwMDRCRDREMDdGRkUxQUY5MTVGODMzRTg0MTdFNTVGREI4Q0MKKzoxMEM1MDAwMEVFQ0ZCNkVEN0ZGNzRFQTBFQkNGMUEzNDNFMzVDQUNENTUKKzoxMEM1MTAwMDU4M0VBREQ4RjEyMDQzRkE4Q0U1RDNDRjdBRDZCMEI4RTcKKzoxMEM1MjAwMDdDMEFDRkUzRjI2OUNGQjZGRjExQjlBOUMxRUQ0ODBDN0YKKzoxMEM1MzAwMERDNDAwRTNFRjVCMjI3MzFGQzYyRTU2MEI1QzkxMzU3MDkKKzoxMEM1NDAwMDBFQzJFRjZENTZEODk1RUUzNDdBRDNFODZDRDE2RjJBQ0YKKzoxMEM1NTAwMEZCQTBCQ0U5QTA0NzhEREUzQUU4NTFBM0I3RDg3NTFBMTUKKzoxMEM1NjAwMEUxMTZGQjdFM0RDQTFCOUQ3REEwQUU2MDQxMjdFMDM5RjAKKzoxMEM1NzAwMEIyNEIyNjNGQjFERDEzNzFBNUMyNzc1N0RCRDgxQ0I0OEYKKzoxMEM1ODAwMEIzREJEREEyOUVDMkVCOTE3NDczMURDQTA1RUQ3OUM0QzUKKzoxMEM1OTAwMEM2RTMwREVERkU4ODJCNDU2NzNGMUY2Qjk2NUQxRTc4NDkKKzoxMEM1QTAwMERGMTY2MjEzRTNEOUQ1MjA3MUU5RkI2RDJDRDFGQkU1RDEKKzoxMEM1QjAwMDA0QkZGMUIyQTM3N0VEMDhGNEFCNjQyRkRBNkVGNzJDNjkKKzoxMEM1QzAwMEJGREQ4NTIxOEJGNkU2QkNBOTMzRTFGOUJEQUZDOTE0MDcKKzoxMEM1RDAwMEQzNjhCN0JCODZFMkJDQzA2RjU3QjIwMEJFRjMwNDlFRkYKKzoxMEM1RTAwMDNGNjVDMTVGMTZDMUJBRTYzNTczQkJGODlFQjU0Njc4QTQKKzoxMEM1RjAwMENDNzczQzYwNDYzOTAzRjY2NzI3MURFOEU4NDVEQjI3MjIKKzoxMEM2MDAwMEE4NTg2RjdDQkY4OEFEMjU3QzJEOEFBMTlGODBGMDc3Q0MKKzoxMEM2MTAwMEIyNjQ0MTNGQzNEODMwRTE2Rjk4NzBCQ0E1NDI0RThERTMKKzoxMEM2MjAwMDk3RjNBN0NFMDRCOEI3MUY5NDk5MDVFQTE3OUE2NTU2RjEKKzoxMEM2MzAwMDg3RUJEQzI2ODUxOEYyNzEzMDlERThCMDBBRTQwM0QzNUQKKzoxMEM2NDAwMEY5ODU2NzkwQ0VDQzg5RjlGN0NDRjMxRjE1N0UwRjlBNDgKKzoxMEM2NTAwMDJDNzlFMTgzQTFGRjAxRTU5OTE3REVFRkZGMEFENjVGOTAKKzoxMEM2NjAwMDdDQUZGNzA3QUM2QkZCRDJERDVGQ0Q0NkY5REVCRURCRkUKKzoxMEM2NzAwMEMyMjg0RUIyRkI3N0JEQkY4N0Y1OTcyRDVFOEE3M0FDOUIKKzoxMEM2ODAwMEIwRjBGOEQ0NkU2N0E4MUZCRUVGMDVGODQ2N0RCOUVCOTEKKzoxMEM2OTAwMENCQTE2REE0NkY1NjExOUVDQTY0RUU0NzVDNjhGRURCQTkKKzoxMEM2QTAwMDlGQTQ2RTU4QzJBQTUwOEZFRTRFMjJGQkJBRkE2NTVCNjkKKzoxMEM2QjAwMDA4OURDRUY2NUQ1RjE2MDYxQ0ZGQkNGNTU0OTk1OTgwQTcKKzoxMEM2QzAwMEU4Q0ZDOTY2RUU0MDdBNEQwMUM0QzFGN0FCNUYxOUYzRkMKKzoxMEM2RDAwMEY0NzJGODdFNjVFMzVFRjMzQzc4NUZCQUU3RUJBMTI4N0QKKzoxMEM2RTAwMDU3REE3NzcwRkJFMDlDREFGNjI0RjMzMjM2NTVGRUM1NTQKKzoxMEM2RjAwMDcyMTVGMDc1MEU2REI1MUUyMDk3RTQ3NzhCODM4RTc4REEKKzoxMEM3MDAwMDcwRTE3MDY4MDczOEUwQkEwMDJFMTUyODBGMTNDMTYzNzYKKzoxMEM3MTAwMEZFQkYyQzNDQ0VDRkM2RUYyRjY5MUVDNUU0MUMzRDVDOEUKKzoxMEM3MjAwMDI0MUY3RkVFMEM1OTI1NUEzRjdGQkVGQkNCQTEyODc3RjMKKzoxMEM3MzAwMDNGNkI1ODRFRkFGQjZBRUI1RThERUI0RUZGN0Y2OURENzcKKzoxMEM3NDAwMDUyRjg1QUQ2QkRFOTVGNzZERDlDRkUwN0M5NUMxRkM1NkQKKzoxMEM3NTAwMEYyNDE1NzNBN0ZGMUJCNTRGRkFERDM0QkYzQkQ0NkZFRDgKKzoxMEM3NjAwMDZGRjk5NzVERkYzRjg4RjcxRDEyRURDNzVEMERFRjI3NEQKKzoxMEM3NzAwMEZFNjVENzdEMzVCQ0JGMjZGMEVFNzQ2M0JDQjc3REQ3QjAKKzoxMEM3ODAwMEQ3QkQ5OTZFRkQ1NzVCQjc0OUY5NTc5NTZGNTc1RUI3OUYKKzoxMEM3OTAwMDY2RjdCNDlBNkFEQzIzNjA3RUVGQjNGQTVCNzNBMEZDQTEKKzoxMEM3QTAwMEJERUY2MjM3NzQ0NzgxMDdGQ0YxRkM4NjAyODVGQjBEMDMKKzoxMEM3QjAwMDE2OEMzMzYxQzM1QjI1MkQ1RUQ0NkFEOEM3RUQ1OTQxMTEKKzoxMEM3QzAwMDc2QzYxNERGOEZDOTNFNjA0QTRENkIzMUI0NkYyRDk5MjgKKzoxMEM3RDAwMEU3N0Q4NDVBMTQxQzBENjA3REM2Mzg1MTM3RkE1MzZGQkIKKzoxMEM3RTAwMDRBQ0MyNzgxMUQzQkE1NjREMjQxQjRFRkE2RkE2NEIyQkUKKzoxMEM3RjAwMEZGQTAyNEJCRUY5RERFMTNGOEYzRDE0NjNGRTI4RTE4NzUKKzoxMEM4MDAwMDNGRTBGNjk5QzZGN0I3OEFGMTZFNjM0QkREMjMwMDVFMTEKKzoxMEM4MTAwMEI3RjU1NERDMjEwMEQxMURDNTM1MkFBRUU3OEVCQjI0MDcKKzoxMEM4MjAwMDU2QUY4QjU3REUxQTMzOUU0QjYxMjI0RUYyOEZDMUVGMEIKKzoxMEM4MzAwMDlFMEVGODJEMjU3OEIwNjJEOUJCOTk1RDAzRkMxODg3NTAKKzoxMEM4NDAwMDc3RUI4QzYxMjE4Q0MzMzBDNUNCRTE3NzVCQTU5N0UyOTgKKzoxMEM4NTAwMEEwQzJDRjU0NDU3RkQ1QjFBNjE1Rjk1NjY1NDZGRjUyMDMKKzoxMEM4NjAwMEYzMTMxM0MxOTkwOUJGOTNDNkM5RUQ4NEJCRUE5M0M5RjkKKzoxMEM4NzAwMEVGRDQ4RDQ3RjBEMEYwRjFGN0UyNDFDM0RGN0YxNzFGMEYKKzoxMEM4ODAwMDg1ODg4RjM4RkI2NzBCQURENjVCNzFGRkMyM0E0MDIyQkIKKzoxMEM4OTAwMEJGN0RFQTVBOTlGMjYwQUNGOTEyQzFEMTNGNUFBNUZEQTkKKzoxMEM4QTAwMDlEM0Y5QkZDODU2ODM4OTcwRjFGNTVGNTEwMUZENjhCNTEKKzoxMEM4QjAwMEYwNTkyOEUwMzg5RkQ1OTBEREM5MkU3RkYzNEQxMUVFNTkKKzoxMEM4QzAwMDFCMTE4NEUwQkQ4RkIxQzlFMDg3Q0MyRjkyQzI3NjU4OEUKKzoxMEM4RDAwMEZGMDI4NTA1OTMwQjMwQUUyOUIxRTNGQUI4NjZDODU4NUMKKzoxMEM4RTAwMEM3REZCNzMyM0FDN0I5NUFGQjQ0RjJFMTlGNUQ3RTBDMEQKKzoxMEM4RjAwMEYyRTg3ODVGRjA1N0IwNTRFOEYzOEFERTRGOUNEM0NDNkYKKzoxMEM5MDAwMEUxNThCRDQ0MEFFNTEyMUQ4NTU1QkY2RTVGRTc3RDQxQzQKKzoxMEM5MTAwMEQ3MUY3RjdGMzhDOUI5RTI5RjBFNDkyNkZGRDUzNzg4RDgKKzoxMEM5MjAwMEVDRkQ2QTYxRUY1RjA4N0E5MjMxNUU3M0ExMzkyRjE5Q0QKKzoxMEM5MzAwMEUzMzExNzBFOTZCQUY0NzI1MTJCOEYwODNGRjIwRkNCRUEKKzoxMEM5NDAwMEFDNTRCNjk3NDlGNTMyRkE1QjJDMzI4NUY0NzA5OThENjgKKzoxMEM5NTAwMEExREM4OUVERjc5MkEyQzU1RDZBQ0MxNDk3ODc5RjVDMzQKKzoxMEM5NjAwMDg4NzhFNEJGMDVEMDM1Mzk1NTg3QjdCNTkzNEYyOTQzNEIKKzoxMEM5NzAwMEJCRTIwMTdGQzc3NUZCMjRGRjVERjhBMkRGOEE3MDNEMzMKKzoxMEM5ODAwMDYyNkI5QkUwOEZCM0RFMzcwNEZDQ0FGNzdENjVDNjM4NjcKKzoxMEM5OTAwMEMxQjRFNjFDMTVFMTMyQUQ0QzM2RTREREVDNTc4NDNGMDIKKzoxMEM5QTAwMDM1OUMwREM3Nzk5NUVGQkJDOTM1MDZGMTcyNTBGNkRBQTMKKzoxMEM5QjAwMDAwQkVENUNERTdDRDgxMzhGQjZEQjFGMEM0RjEzMTJFOEQKKzoxMEM5QzAwMDdDNDJGNUNFNDc3ODlFRjhCMThEMDU4MTFGMEU4QkZEMTgKKzoxMEM5RDAwMDFGNzhFNTQzRjkwNTQzRjkzMDNFRjZCNkMyRjcxNTA2NzAKKzoxMEM5RTAwMEFBM0MyRTNFQkRCQzU4NEQ4N0VGRTYzN0JBODdBMThBRDgKKzoxMEM5RjAwMEU5MjFEQTBGNTQzREY0M0U1QkY0RDNEQUY1NThDMkRCOUIKKzoxMENBMDAwMDFEMzNCQkFCRTJBRDdGQjI5OUFGN0YwMUYzN0U3N0I0NEMKKzoxMENBMTAwMEY0QUY4N0I3RTI5RjNBQzMyNUE4REZDQjI0OTIyMzVEMEEKKzoxMENBMjAwMEU5OUExMTdGNUM5ODI4ODU1MEZGQTIxRjRCRjU3Mjg5MDcKKzoxMENBMzAwMEY0RkY2MTJERkY2MDFBRDc5NzFBRERDN0MyNTk1MjM5MkEKKzoxMENBNDAwMDlDQjVFRkU3QTg5QzlFQ0QyQTg3OEYwNjY3MERCRUIxRTcKKzoxMENBNTAwMEYzRDVEQTgzQkNCQTUxMUY1Rjk5REEzNEVDQjc2ODlGMUIKKzoxMENBNjAwMDU0MzU0QjZFMENGRDU1Mjk2RDY2RTRDM0VBQTY0NzU1NTcKKzoxMENBNzAwMERDMkZCOEMzQzNDNzY1OEE3RkE4N0VCRjc2QTBBQUQwQzMKKzoxMENBODAwMDdDRjYxNzhDMjVGQkYxRTI1QTZFMUZGQkVFMzlFRjQyNjQKKzoxMENBOTAwMDNCRThCMEM5RkJGQkIxQzg4RjZGQ0E5NDRGOTAwODhFQkEKKzoxMENBQTAwMDFGMkNEQjMyQTM0Q0QxOEY5QjQzRjM5Q0JFQTQ1OEM1RjMKKzoxMENBQjAwMDcwRDA3Nzk2RUM1NUJCRUJFODY5QTA5QTRBRUZCNUU3RTIKKzoxMENBQzAwMDNEOTY3ODBBRjAzOTdDOEZFNjExRkM4OTg1NjExRTQ3MTYKKzoxMENBRDAwMDdFNDM2QjQ5MTJCQ0ZGNEU0RDBBQTdDMzhBODZCRDY2RDIKKzoxMENBRTAwMEFBRTc1MDdCRUQ3QkRBNzc2MkY5Njk0Njc5OTJBMTNFM0QKKzoxMENBRjAwMEFGQjRBRDI3QzJBNURDMTI3RUMwMUI4NzRFNUI1NDZENjAKKzoxMENCMDAwMDlGRTRFRkQ0MTMzRUEwREJBMUZGM0ZFODg5RjMxMzdDNDEKKzoxMENCMTAwMDcxRTBGNjk4REE0NTNGNzQ4RkE3MUY5NjJFRjc3NDQ3OTkKKzoxMENCMjAwMEY4MkZERDk1RDcxRDk5NjNFOTZCRTMzM0UyRTk4Nzc3NDkKKzoxMENCMzAwMDk2RjFGREMwRjc0MDlFNjFEOTNFMDNGNEMzRjUzQUZEN0UKKzoxMENCNDAwMDMwQzM0NkY0MTFEQkVGMDdFQTM1RUEwNzBENUZGRkMzOTgKKzoxMENCNTAwMDcyRTYxREQ0MEY3MUY4QkE1RTM1RUE4N0RCOUFFNzkyNjgKKzoxMENCNjAwMDdFQjg2RDg2Q0MzQ0JBNzhEQzBGNTVCMUNGOTU1MDNGN0UKKzoxMENCNzAwMDE0NjdEQzQxNzVENTlCMTQ4NzZFREUxMTdFMDlDMjE1RTIKKzoxMENCODAwMDRCRkMwRUVBODkzRDQyRUVDN0VBOEI0NEYyN0M5QTU5OEYKKzoxMENCOTAwMDEyRkJENTU3OTFFN0ZGOTdFMEFDQzlGM0E1RTBCRkEwMjIKKzoxMENCQTAwMDFERDg5NTBFMTlDOUVCQTU3NzgwM0M5NzkwMUVCOTNDMEUKKzoxMENCQjAwMDVGN0E5Nzg4NEJDNkM4NTczRkNBRDcxMTdBRjlDQUZCMjQKKzoxMENCQzAwMDU3MDVCODNFQTg2RUNBNzk3QzE2QkNCRkIzNUVGNTVBNEQKKzoxMENCRDAwMEExRkQ5RDlERjJCNjUwMkY2RkY3MDg3OTBCNzBFRUVEMTkKKzoxMENCRTAwMDhFODNERjk5QjM5Mjk4QzcyOEFGRkFBMjlDM0EzMUVDQjIKKzoxMENCRjAwMDc3RjkzQjkxRUUwRkNCQjQ4RkY4NjdBMUM3MEYwREZCMTAKKzoxMENDMDAwMEREMDg4QzlGNzczMzJCNDQzRjdGMTZGMkVCRENCMkQwRUMKKzoxMENDMTAwMDhDMzJFMEUzRDI3QkI4M0Q1Q0I5NEQyNjM4NTQzNTcyOTYKKzoxMENDMjAwMDNCQUZBQUFGM0RFNDgxRkE4NDgyQUY2ODNGNzBGMTJFM0EKKzoxMENDMzAwMEJFMUYwODgwMkEyRkQ2RTE3MUYxRTFCNkJBNkM3Q0JGMjUKKzoxMENDNDAwMDQxQTJGRENDRjlERUM1MTRDNzY3RUI3ODlDRDgwQUZGN0EKKzoxMENDNTAwMEYwQkMwRTFGQzU5MTJCMDVCQzE2MzY2RkEwNzhGM0MyMzEKKzoxMENDNjAwMDkwMzEwRTVERDlGN0U2NTNFODBGNjhGMjc3RjE5Njk4QTgKKzoxMENDNzAwMEY3REU4NzY5QkZBMjEyRTNDRDNBM0Y0NDE2RjZDM0JEODMKKzoxMENDODAwMDcyMzg3RjI3RTY3NkZFOUVGQjU1QjFGOEQ3REE3NUFDOTEKKzoxMENDOTAwMEJGRTJCRkI5RkUyM0IwRkUxMUZGRkNGNTVGRUJCQTU1NTIKKzoxMENDQTAwMEIzRTBGNzAyMzYwMkY5RTNDRjI2MUZGMTdCRjA3NTU4QTcKKzoxMENDQjAwMDNGN0NFNzlFNDdGQjc1RDdFNzE5QTUwOUJFM0M2QzBBODgKKzoxMENDQzAwMEQ0NjU2MUJCMkE4OURBMkQ1OEJGRkQ0MDA2RDQ2NzM1OEIKKzoxMENDRDAwMEIwNjExOEE2NUZCMENFQTgxNzNCRjQ3MEEzODdGNEVDNDAKKzoxMENDRTAwMEFDOUFFREQyRERGOTA4NkY1NjgzNzQzNkFGQzAxMkMwMkUKKzoxMENDRjAwMEZERDQyM0I2MDhDOTJGOERFRUM2OTkzOTNEOEYxNURGQjcKKzoxMENEMDAwMDNERDEyMzUyNDY3RTQ0OTNFNDI2QkUwOERCQjg1RjAxNDIKKzoxMENEMTAwMEYwQjc0MTdERkY5ODJGMjcwODc4NTMzQ0E2QkE4OUUzRTYKKzoxMENEMjAwMEE3MUFGMDgxN0MzNUExNTlENEI3NzAzQkVDM0JBMDZGQkEKKzoxMENEMzAwMDY4M0ZBQzc5QUY4QUZEMkFBMDdEMUFDOTlCNDE4NjdERTgKKzoxMENENDAwMDJFREM5RjJCQ0VEMEUxNkRENzMxNEVCNzlCMjUyRjhCOUMKKzoxMENENTAwMDgzQjcwMUYwNEY1Q0JDRkQ5M0U4NTU4M0M3MzhCM0IwOEYKKzoxMENENjAwMEU3MDVGRThFRDg1QUNCODdEMzNFOTRFNEREODg4RDlCQjEKKzoxMENENzAwMDUzNjgxRkU1OTNGQTNDQzJFMzI0NDFCRkIxNzQ4REY2QkEKKzoxMENEODAwMEJENDcxNzRGQkEwNTI3MEVGMjk1NERCNDUxOUUxQjdEMzYKKzoxMENEOTAwMDM3OTdEQjNGN0E3OTEyRUIzNzU3QjM1NkIyNjMyNjRCOUUKKzoxMENEQTAwMDgxOEYxNDVENUVEQjZEMjJGRjQ0REJBN0Q1QjU3QjVDMTQKKzoxMENEQjAwMEJENDIzQjk2RTkzNkExOUNCQzVGQ0JCN0M0RkNFMTBDRkQKKzoxMENEQzAwMENBNUJBMkRGRkU1RTg1RUZDRDgyRjU1RTVDMjM3QjcxRTAKKzoxMENERDAwMEZGRTc3NjkzRTdERDIyRTRERjQ3NTQ4Njc0NzlGMTkwMkMKKzoxMENERTAwMEVBRTM3NjY3MTJDOUREQjk4NzRGQTgxODBBOTkwQjMwQjQKKzoxMENERjAwMDQxN0NDRkZEMDE5N0FGMjc3MDMwNzhGNjQ3RDA1QjNFN0UKKzoxMENFMDAwMERDQUI2NzBEMjMzMTdGNzg4Njc3RUY3ODBGRTBFNUQ2Q0UKKzoxMENFMTAwMDExNDc1NkUzM0VEQ0Y0NTJGN0JCRUYyMjdDMUY5NjE5MTQKKzoxMENFMjAwMEMyRjdGODlBNTJGMjRGRUVCRjRGMjJCQTNFMEE3MEM0RDAKKzoxMENFMzAwMEZFQjdDRUM4NzlGNzVERjhFRTVENkJEMjY5NUY2RDk2OEYKKzoxMENFNDAwMEVGQzA3OEE0QjM3OTUzOUQwRURDNUY5QjM0NDA2NjAxM0MKKzoxMENFNTAwMDFEMUNFRjYyQURBQjUxNUVDRkFBQjlFRjU2OUM2RjA1QkEKKzoxMENFNjAwMEU4MDE4Q0IzNTYzNDFGMTlERjFERUJFQjI1QUYwN0M2NjUKKzoxMENFNzAwMEFGMEUwNkNDREQwMTg1QURFQkNFOUIzMURFMzExRkRBODYKKzoxMENFODAwMDIxN0FBQUQ3RjM3NkQ1OUIyNEFGMERFOUIxRjk1MTkyNTcKKzoxMENFOTAwMDNCRjMzNzQ5Q0M4REVEQzFERUIzRjI3MTQzNTYxOEI3ODEKKzoxMENFQTAwMDc1M0RGNDg3RkEwMkVDOEZFMzZFNEFCOTBERjdEMUFBMEIKKzoxMENFQjAwMDBGQzlCQ0ZGRThFNUFGQTI1QzlBMEZGREUwMzU2QkRENjIKKzoxMENFQzAwMDc0MUY4REI3NzBCREM0MzI2MUJDOEFEMTM5M0YxOThERDIKKzoxMENFRDAwMEUzMUQ1MkJERjhGRUJEQkRCRjMyRTNCQzY3QzNGN0IyNzAKKzoxMENFRTAwMDYwRkM3OTcyREI3ODZDQ0ZCRTI3QjkzNzUzQkM4OUU3MTkKKzoxMENFRjAwMEM5QjYwQjNFNjA2RjY3NzFGRTkyNDQ1REQ4ODE5QTNFNjEKKzoxMENGMDAwMEZDODMzOTk3RTg2OTdFRURGMjNBNUM1NzVCMzAzRDA3NjgKKzoxMENGMTAwMDVEQTBFQUE2RjM2NkI0RUIzRTAxMzgwN0MwNkUzQjIxODQKKzoxMENGMjAwMEYyRDhGNjA3NEY5OERCNzQ3MjJBNjJDRUEzRkVGNzM0NkMKKzoxMENGMzAwMDE1MTM3RkRGQ0JGQ0I0REYxRDU4Q0VGNUYwQjFENUI2QUQKKzoxMENGNDAwMDkwODRGNjg3RUEyNjNEQjk3RkY1NzVCRkM0RjU5RjdCQ0YKKzoxMENGNTAwMDU2QTVGREQxNzNCRERBMjgxRTdCNzJCRENBODIzMEM3Q0IKKzoxMENGNjAwMDk1RUI2NTkyMUIyN0I3RjEzODkwRkM4NDRBRjUwNTBGQzUKKzoxMENGNzAwMDlBQTlCRTdGRkRGNDA5MjgwRjRGMDJGQzkxMEU0QjlGMkEKKzoxMENGODAwMDE4NkZDNkZBMDI5MEVCOTYzOEYyNjNCRTY3MTE5NzE3RDYKKzoxMENGOTAwMDMxRjI2MUMxM0EyM0ZGNzc5MTE3MEY0Q0UwRjIzRDQ2MjEKKzoxMENGQTAwMDFFNTRGNkFDQTMzODVGQUM5Q0E4NjYwRTREM0UxNDYwRDAKKzoxMENGQjAwMEJEMzU5QzQ1RjQ1Qjc1NDg2NTY4Q0Y1NTI5RUVEOUVCQzYKKzoxMENGQzAwMDkwNkU2NkQ5NzBBNzE4RjgyMjdDMDBFNURBQzU5MEU0NjcKKzoxMENGRDAwMDA5QzJGQkVGQ0M3OTY5MjRDMkVGMkYwODZGRTQ4QkI1NEYKKzoxMENGRTAwMDY5QjQ5RjNBM0YzNDk3RTBBQUU1MTMyRTU4NjdBNDY3QzcKKzoxMENGRjAwMDJEN0ZFOThFODBDQzdDN0EzRDUwOTFDNDdDQkE3NkVGNEYKKzoxMEQwMDAwMEZEMDBFODEyQkUzN0E3NDkwQUQ5MjRBQzFGN0JGNUMxNDEKKzoxMEQwMTAwMDExNTQ3NzIzMUQ1NkQ1MEE3REJBRDY0OTc0RkJERUJGNUQKKzoxMEQwMjAwMDlENUY4RDc0MzlGQkZCMTJDRDlGMDUwMzc1QTg1N0FBMzAKKzoxMEQwMzAwMEQ2NDkxRThDNjMyRUY4M0VFRkJGMDBGQTIzQkRCQ0Y3MjUKKzoxMEQwNDAwMDJCNEUzRjQwQzcxRUE0RjNBQUY1OEZCRTRBRUQzNzQ5QzkKKzoxMEQwNTAwMDFFMUNGRkJEMEQ3MzQ5RkY1NjA0NjU0NkVGMzcxRDIzQTcKKzoxMEQwNjAwMEZCMThGNDAwRTUwMUVEMEZDQTE5NDhFNzU1QUIyQzZFMkIKKzoxMEQwNzAwMEM0QTM0NjJGMUFGRDFENTNDNTM5MDFBQjc3RTg3NEU4RTgKKzoxMEQwODAwMEI3QzFFQ0ExNzVDN0QyOUQzQzMzODdFOEFCN0E5QjRBMDgKKzoxMEQwOTAwMEY0NTExREU0RjQ3NEVDNTk5OUU4NzBGRkVBREI4OTdFRTEKKzoxMEQwQTAwMENFNkQ5NjEyRDA1RkE5MzkwQkU5MkZDNERGNzdEMERGQTAKKzoxMEQwQjAwMDMzOTJBMDNGNEVENzI3MUZFMEY0NTg4QUVGOTFGRTlFOEYKKzoxMEQwQzAwMDE3RjYyOTYzMEVCREREQTFEMTlGNDY0RjU3QTNCQjJFOTYKKzoxMEQwRDAwMDdBMjkwMUJEODE2RDdDMUJDRUVCRkVENTM2OUE3NzY5MkUKKzoxMEQwRTAwMERENEJCN0Q1MTJERkE4QjQzRjVGNUFGNzZGMTlDOEE3NTkKKzoxMEQwRjAwMEYzMTU5RTg3QTFDMUIxNTJFMTc5M0E1REU2RjFGM0U1RkUKKzoxMEQxMDAwMEU2QUM2Qjk5NEZDQzNDRjY3NkVBQzUwMkQ0OEI5ODU3QzcKKzoxMEQxMTAwMDEyODZFRkZDNkVEQkQzOTRCRjc2NzZFQjMxQ0E0QjVDQTQKKzoxMEQxMjAwMEZDMEFFMDFEREE5RkRCRTY2NDYxQjJBNzQzMjQ1RjE2QzgKKzoxMEQxMzAwMDM1Q0E5NDE3Q0E5NDcwRTE3NERERjkxMTJEREY2MkYxREMKKzoxMEQxNDAwMDczNEU4MkVGQTIxRDk2NTAzOUY0NUZGNEMyODlBMUI0RTgKKzoxMEQxNTAwMDFGQkUyMkYyMkFGMjRGNzBBQkM0RTNGMkMxQjZBMUQzRDQKKzoxMEQxNjAwMDMxQUY1MkUxNzkxRkIxN0E3NzhDODVDNzZCQ0VCQzk0MTEKKzoxMEQxNzAwMDM0MTNFRDFGNjlDQjVFREE0RjVBRDQ3MEJCNkFEMUM1NDgKKzoxMEQxODAwMDI3QkQxNjk1QkUwQkVENjg5RjI2MDg3OEM3N0Q0NDlDODkKKzoxMEQxOTAwMERGMkQ0M0Y0RjM1QkNFQzc3Qjg2RjNDREEyMjY5NUVDNUYKKzoxMEQxQTAwMEEyNDU1QjM2NTA1Q0FGN0FDQjc5Q0E3QjJEN0RFRTU5QjgKKzoxMEQxQjAwMDE3QzJBMUJBNDkzNkU2NDM2RDkxQzMxNkNBRDc5MjhGRkEKKzoxMEQxQzAwMDU5Qjg3QzMyRTQyNTU1MzVGMjczMTk1NTBEMjJFRjI3RjUKKzoxMEQxRDAwMDI2MkY2NkYxNzNCQjVFMDgwMjY4MTZFRkZDMkYxN0YyNkMKKzoxMEQxRTAwMEQxRTlENkNEMkU4NDI3OEM0N0Y5NDQ1MzQ3MjdDODM3MzkKKzoxMEQxRjAwMEJBNUE5RTUxQzNDMzcxRjM4QzRFRTM3RjAwODFDQ0I2MDMKKzoxMEQyMDAwMDE4RjMzM0Q5MTYyRUE3MDBFQjg1RkUzOEYxNENDRDVFMEUKKzoxMEQyMTAwMDU5RkNFQ0U3NEY2MkRFRUI5OTFEOUYzRDg5RjM1RUYyMEUKKzoxMEQyMjAwMEJGMkUzRTg5NzkxQjZDQjdDRDhERjY0M0Y1RDY3NzI4OTYKKzoxMEQyMzAwMDdGNTBFQjU3NkIxMUZFQ0YzM0ZGNDU3OTk3RTdERUI3OTEKKzoxMEQyNDAwMDkwRkQ3NzZFRDdDOURFNjgxRjlDREJGRTU1MDZFNjUzNUUKKzoxMEQyNTAwMDNFQjA2QjNDQzUxRjFFNzhCRUI0M0I4QkUzREY2QTI1MzYKKzoxMEQyNjAwMEQyNjVFODFBRjIzRTYzRjFCMEJGNTEwRTNCNjA5RTY3OTMKKzoxMEQyNzAwMDhGNUE4OEJGM0JGMkM1MUEyQTc5RkU5RDQ3RTQ4OTZEMTMKKzoxMEQyODAwMDhCOUY1N0FCRTUzNzU1MzU0RTlGM0EwRUU1NUIyM0Q3NUQKKzoxMEQyOTAwMEUzMURGOTRFNTdDQjBGN0IxQkYwNzlGRDM1RTA2RDlCRkQKKzoxMEQyQTAwMEM4RkY4QkMxREI1OUZDMEZDMENGMkYyQ0M2RkNCMENGMDEKKzoxMEQyQjAwMDFCRUY3REVBRDdGOEFFMzFGRTc5MzI4RDhGQUYwNjJGQTYKKzoxMEQyQzAwMDJENkY3NzlFQzUxN0IyMjBERkVDRjgwREU1RTEyMUJFOEEKKzoxMEQyRDAwMENBM0RBOEU3M0ZFRjhENzFDQjRGRDUwOEM1MDMyM0JCRUYKKzoxMEQyRTAwMDJDNkVDQ0RCNUFCNEVCM0RFMjhGNzNDRjFGQTFCQzU4NDAKKzoxMEQyRjAwMDI2RjI2N0NGQjE4RTFGQ0Y3NzE0MzE4OUVBNEQ0RTlFNEIKKzoxMEQzMDAwMDU3MjZFMDhFNzk2NzFFMTczRDE3Rjk2NTlDNkVCNUJDRjAKKzoxMEQzMTAwMEIzNDRGOTY2RUY1ODcyQzVCOTBCOUUxNzU3RTk2OTM1RTIKKzoxMEQzMjAwMDIzRkNGNTc5NjhEMjY4QzREMzMxNDNGRTlFQjZFRUQ4QUIKKzoxMEQzMzAwMEYxREMwODg3NTFGQUJDQzk0NEY5N0NDMjFFRUZDMDEzNjYKKzoxMEQzNDAwMDk3QzNFNzM2ODgzQ0NBOEVGQzQ4QzY3QTE2NjBCRTBGODMKKzoxMEQzNTAwMEQ3NzdENTIxRTkzRDE2ODcxRkI1QkNDOUQ2NTg3RTBDQjUKKzoxMEQzNjAwMDVENUJCRUU0RDVFN0ZCOEZDMTYzQkY4NUM3OUYzNEI4NjMKKzoxMEQzNzAwMDlDQjkxQzVGMUU3RjI2RjgxQkZDOTJEMzE2RERCOTk0NjYKKzoxMEQzODAwMDM5QzIyRkQxRjJDOEI0RjlENjM1NzBCRDdCNjYwQkI3NjAKKzoxMEQzOTAwMDBCNjNGOUI5NEFDNERCNjNCRkYzOTVGODRFNTVEM0RFOEUKKzoxMEQzQTAwMEExMjg3N0NFRUM3QjQ5RDAxQkE3RTdBQTZEQzdDQzQxNUIKKzoxMEQzQjAwMDIxOUY0MzdBRjk4Q0UzQzU5MTI3QjI5NThGMDc3RTZDNDQKKzoxMEQzQzAwMERDRjFBQUI3OUQ4RjNCREU2OUM1NzczQkNFRkY3NDJCOUUKKzoxMEQzRDAwMEI3MzM0RTM3QzgxMzQzNzFDNjNGMkJGNDRGQzdCQTlEQkUKKzoxMEQzRTAwMDY2RjJBQjY0OTc5REU0Q0YwM0NFRDE0NzkzQkI2MTY5RUUKKzoxMEQzRjAwMEE2RkM4NTk1Q0I0NUJFQzMwRkJDOTkwOEU3OTVDRTlCOEYKKzoxMEQ0MDAwMDE5Q0U2NzM1QzI0N0U3NjdBQUVFMDA0MzNCNDdDREY0MjQKKzoxMEQ0MTAwMDhGNDBGRjQ5OUJBRkY2REVEQ0NEQzQ0MjdBRkMyQkMxQzYKKzoxMEQ0MjAwMDlFMTg3NzlEOTJGQkE1ODJGQUE1NzU5OUYxNUM0N0FCOTIKKzoxMEQ0MzAwMEUyM0U5MDA2RTNCNTk2NDk1RUI0NjdCQkQyOTk3MUZDQjMKKzoxMEQ0NDAwMDVCN0NCMjIxMUU4NkIxNjc1Q0Q3MDVBRjg5RjBFOTM0RjkKKzoxMEQ0NTAwMDg1REREMDg0Mzk2REFEOTlFNEM4Nzk5ODQ3QzlBMDk0MjkKKzoxMEQ0NjAwMDZFREFERjdFNjREOTk2NUU3OENFQ0FDNUJDMTJCRTc3MEUKKzoxMEQ0NzAwMDdBM0JDRUI3RDA3OEM5MkMzNkNGOUFCREREQjc5MDg5MkMKKzoxMEQ0ODAwMDIzQzBGOERFQkQxN0UzMTJGNjAxNkMwMDlFREY3MTMzOTYKKzoxMEQ0OTAwMEJCMTdFRjU3Nzg0QzlDN0I1Q0VCMEM5MEJFNERDODM3QUMKKzoxMEQ0QTAwMDVFN0VFRTQ1OEIxMzI1OEY1NjBDRTc2MjUyN0NDNjdBNjIKKzoxMEQ0QjAwMDVBQ0MzOTQ4NEQ1RUQzMTEzQTgwRkYwNDcxRUY0M0NBMEMKKzoxMEQ0QzAwMDc4QkU3RThDNTdGNUNCRTg5QzZGNEEzQUYzODZGMUZEMjcKKzoxMEQ0RDAwMDY0MDdFNTMzM0IxQzdDN0VEQTdDNjEzRTI0MEYwMDRDMDQKKzoxMEQ0RTAwMDdDM0VGOTZENDFCNEMzNjE1RTMxN0NDQ0U4REMxM0NDODkKKzoxMEQ0RjAwMEVGNzhDQ0ZDMEM3NkRDMUQ1NkExMUYxNEE2QTAxQzcxODUKKzoxMEQ1MDAwMDU4NUI5OTgwRjMwNTYzOUU2OTkwNjFERTQxNzIwNzVDMDgKKzoxMEQ1MTAwMEUxM0Q4QzkzMjM0REI1NjBERTgyMUJCREUwM0NGQTVFOUQKKzoxMEQ1MjAwMDRDQkY5RTZFRkQ3OUIxRUI4NURFMjhDQTY0Rjk3NEFFRkUKKzoxMEQ1MzAwMEIwQjkxQkM5QUREQ0RBMTI3NjAyRUE1MjNEQTc4RkJFNDQKKzoxMEQ1NDAwMDZCMTlEMTdEREY4OEM4NjM1OTY1Mjc3QjRDQkI3NzQwNTkKKzoxMEQ1NTAwMDUyNTg1MDJERThBNDM3ODBDODBBM0MxN0FBQUMwMTlBNEIKKzoxMEQ1NjAwMDgxN0VDRDkxMTJEM0JEMDBENDA2N0MwNUUzREY2QkY1M0YKKzoxMEQ1NzAwMDNENjg4NTc2NzVCNzA0MzI0REMzNzAzOUM1QUI1QThBOUMKKzoxMEQ1ODAwMEU4MTRFRjQwOEMzMDk5OTZGQjVBMEVGNjIyNTFDM0Q4MUUKKzoxMEQ1OTAwMDBERjhERUQ3ODJCNDVBQUZENTQxMjBFMjdEMEJGNUY2MDcKKzoxMEQ1QTAwMDhFQkFDRjBBNzJCMjNFOTdENzU3QUVGMUFENUEwM0UzQTcKKzoxMEQ1QjAwMEM5NEVGRjRBMkJGMkIxRDUzRDg4RjYyRkMyRDc3NkVFODEKKzoxMEQ1QzAwMDVEOUJFNzgwNERFMTUyM0I0Q0UyRTYwODAwMTRGMERGNDIKKzoxMEQ1RDAwMDBGNzk5MEVDRTQ1NjMzMTJDOTY2ODc1NjBGOTMxREVEMTAKKzoxMEQ1RTAwMDZGM0M0MjdFNzk2NUMzMTE3QTZGQzIzQTk0N0REMkMyOTQKKzoxMEQ1RjAwMEE1RDlCMENFOERENjVCQ0EzMjA3QzI3ODhENzMzMzREQjQKKzoxMEQ2MDAwMDIwQTI3RjYzQkRBNTQ1NDlEN0MzRTE1NjAzMUM5NDE1RUQKKzoxMEQ2MTAwMEQzNUIwRThFRDNDMzYxN0EwQkVBRUI2Qjg1QzM2RkQ2RjcKKzoxMEQ2MjAwMDRDNUZCNUE2RTdCNUFGM0JDQkU2REY4QTc4OTk1NDZDODMKKzoxMEQ2MzAwMDIyMzkzNUVBQTg4M0ZDMzVGOEQ5MjgzRTI1QzZEOTkwODkKKzoxMEQ2NDAwMEUwRENBMzY2OEY2QkVEMzQzQTRBNDQyNzc5Q0MzRDg4MDEKKzoxMEQ2NTAwMEVCMTcyM0JERDQ2MzdFMzdDNkVGMDIwMTZGRDlGMDRFQkUKKzoxMEQ2NjAwMDNBNjVFRUMwNzAzQzlGOUU2NUJCM0I2Q0Q1QzVGNTI2MDgKKzoxMEQ2NzAwMDE1MkY5NTczNjEzRTk0MzMwM0NGRDM2QjgzQjZGRTQwNzEKKzoxMEQ2ODAwMEE3RTkzRTEzRTUyMzY3RDkwMjA3NzA1REFFOTk5MTMwOTMKKzoxMEQ2OTAwMEU2RUE4QzYyODFGQkE1QkM0RTdBRDdCRTUzQjc4QkZCMDIKKzoxMEQ2QTAwMEE5NzU3MzREQTExNTI0MEZEQTI0NUM3NzI3REVEQjYyQTAKKzoxMEQ2QjAwMEYwMUVFMTc4NkYzQTQ2NzhBRjZBM0VDNkYxREVCNEJDNDAKKzoxMEQ2QzAwMEM0MkVGNjM3RDAwRkFDNjc5MTYxODhDRjBGRDY1NDk2MzEKKzoxMEQ2RDAwMDI5NDBENzdEOTIyMjc1NDgwRjJBNUI1QzU2NkUyM0I4OEQKKzoxMEQ2RTAwMEJGOEZFQkU5MDI3NzMxM0YwREZFODlGMDU2N0YzMEY3QUYKKzoxMEQ2RjAwMDQ3RjlFODI3MUQzMkQxN0U4NjA2QUY4RTc2MzY5RTc3QjMKKzoxMEQ3MDAwMEI3QzcxRUY4MEI3RUE3N0E3NERCQUIyOERFNzcxQzdDQ0MKKzoxMEQ3MTAwMDhCRjZENTVEODdBNkVEQzVGRUFFMTk4MDA5NEZFNzc3N0MKKzoxMEQ3MjAwMEVCMEZBRDI4NDFGQUFGOEY1MDU4MERFNDRDMjQ4ODc2QUEKKzoxMEQ3MzAwMDQ3NjI3ODcwQkVFODgwNDdFMzMxODI4RjA5RUJGMDdDNjYKKzoxMEQ3NDAwMEFCMzg5NzUyRDQyNEY5NTBFRkY2NDkwMkJCMDRDQUFGNjQKKzoxMEQ3NTAwMEFDREMyRjc0REE2NDVBOEZEM0M2RjU3QkZBQTE3RDMyMjQKKzoxMEQ3NjAwMEZBMTk0NUFCNENENDNFMURDQjdDRkRGQTU3ODk3RThBMTUKKzoxMEQ3NzAwMDIxQ0Y0Q0MzQTc0NjQ3NDAzODQ5QjdDMDlDQzcyNDA3QjAKKzoxMEQ3ODAwMENDQjY5MTdBQkE0OTREQ0E4NUY3QTM1QUVFQkUxRkY1QjkKKzoxMEQ3OTAwMDlCRDZFRjI3Q0I5OEY3MUVEREY5NzJBMDlGMTMwNjdBNzAKKzoxMEQ3QTAwMDFCQTJEQTEwNkU1QTdCQTQ0QjdGOUM3QjE3QTA1RjM3QkQKKzoxMEQ3QjAwMDVCM0FGRjBFQzY1NUI3QjcyQzk1RTk5Q0UyMzVFMkI1NEEKKzoxMEQ3QzAwMEQwQzI2QTcwRkU4NTQ5QUM2NjA3RjQyRjRDODYxMkVCMTYKKzoxMEQ3RDAwMDY5QTJERTVERDRCMzQ1RDk0NzNDMUZDQ0VCNzkxRjdBRjMKKzoxMEQ3RTAwMDREOTIwM0UzMzQzQzZFMzhENDI2RjY3MzE1RjcyMEU0RUIKKzoxMEQ3RjAwMEEzQTEzNjFFMUYyRkNBQjQ5M0ZDRDdGODU1MDE3MEUyQkYKKzoxMEQ4MDAwMDdFQTMyMkY2MUQ3MzIzQjkyNkM0QTNDNkJGNEFDNDE0M0YKKzoxMEQ4MTAwMDc2ODIxRUNDNTUzQzI2REM3RjdFN0QxOUMwNDE0OTJDOEEKKzoxMEQ4MjAwMDVGNkUxRUM4Q0Y4RkM1M0UxRjZCMzMxOUNFODNGQjNBODgKKzoxMEQ4MzAwMENGNzc4RTQ1M0M1NTVBREI3RTMyMERERTU2MERCQzQ4MDcKKzoxMEQ4NDAwMEZCM0YyQjkyQUFDNjVFRTkxQzc4RUMzQzVFQkZGQ0JCOUEKKzoxMEQ4NTAwMDI0QTRBRkU2QTgyNUVFNzk5MTA3QzRGQTBGMkU5QjQ5QzAKKzoxMEQ4NjAwMEZEMUVENkNFODMwOEJCRTU1QjI0OUFBMEVDQ0JFMzQ3MzQKKzoxMEQ4NzAwMDg1OTZBMDkyOEFGQTJGODlDNzNCMEE5M0I4N0U2NEREMDkKKzoxMEQ4ODAwMDczRTg5RThDNDJFQzhCQzJGQUJBNDE5NEI3NTI5ODE2NTgKKzoxMEQ4OTAwMDJBQTdGQUUwM0NDNkYzM0U3NUY5ODUxNkQ2NjE1RjExRkEKKzoxMEQ4QTAwMENBNzMxMTlGODE5NTc4QUU4NkM5MzkzNEZFOERDQzY4RDQKKzoxMEQ4QjAwMDRGMTU2NkQ3RUNBN0Y3OTYxQ0RBODc2MjUxNkVERjY4QzIKKzoxMEQ4QzAwMEY2RDA3OEIxQkY1MkQ4QTdCRThDRTY5OUNDQzcyOTY2RUUKKzoxMEQ4RDAwMEM2RjNDMzg1RDcwNTE1QkNFNzgyRTVFNUQwQkM0QUFERTQKKzoxMEQ4RTAwMDMxRUYwN0YzRkI0NUI0NzU4Q0VGNjI0N0Q1N0JGMTlFQjIKKzoxMEQ4RjAwMDkxNDkwM0U2N0FDQkM0RjM4QkYwNkYxRjBCOUI3MzRCRkMKKzoxMEQ5MDAwMDdFQTc3Q0JGQzk3Mzg3QjdDQzYwN0ZENDdCOTEwRkRGQzQKKzoxMEQ5MTAwMEY4NUE5RTEzNkYxRkZDQjBFMEZCODNDQkZDNUVEQzZGRkMKKzoxMEQ5MjAwMDdDQ0UwNkY4MDBCRkJCQzQyM0FENzI3QUFFMEVCRjU4RTIKKzoxMEQ5MzAwMEJDQzVDMkVGNUJDREYzQzk3RThCODU1QkYxODdERUIyRTAKKzoxMEQ5NDAwMDU0NEY1NzM4QzVDMjY1M0NBQjFGNDBGN0Q3MDgzOEM3OUUKKzoxMEQ5NTAwMEMyRTU3NTJCQTc4N0Q3RjMyRDIxRjQyRjVFNTcwMENFOTQKKzoxMEQ5NjAwMDgwQUZENzNEMTJGOTFCODVFMjdFMEQyMDcyNEUyRjFBMzMKKzoxMEQ5NzAwMEZEMjRFNTcwN0E0OTM2QzIzRDE2QkVCMUYwRDRFNEMwNEMKKzoxMEQ5ODAwMEFCMDgyRkNBMkZGMTk1OEZDRkU4NUM3RjYxRjc5QTk2OEQKKzoxMEQ5OTAwMDE0MURCRDY4RUIyRkNDMTY3NEJBQTczRjlGODcyNjM3OUUKKzoxMEQ5QTAwMEFFMTM3MjQ0QzgwRkNENUUxRTJGQzYwMzdCOTlFQ0UxMDcKKzoxMEQ5QjAwMEQyNzQyN0M1NjU0QjJCRjkzOEE1RkQxQzFCMzFCRjgxREYKKzoxMEQ5QzAwMDg1NkZBNDdDRDk0MjI2N0U1MTZFREY4MjNEQ0FFOUIzQzEKKzoxMEQ5RDAwMDc5QzIyOUY0QUZGQjU4MDJBQjlDMTg4NzkwNTI2ODVGNUMKKzoxMEQ5RTAwMDA5RTA3RTNDMDZFRUM3OEQ3MDM3REFDOUIxNzA3ODBFNUIKKzoxMEQ5RjAwMEZGNjM0QzU3Nzg2OUY0RDY2MjEzNzY3NTBGRDYxM0VEMzIKKzoxMERBMDAwMERFQTEyRjhENDg0NkY5Q0Q5QTUzRTNGQUU5QTM4RUZBQTkKKzoxMERBMTAwMDNCQzYxMTc0NEI3NDI5QjE0MEM3NzMzN0QwNDFEMzgwRDIKKzoxMERBMjAwMEQ1OEZBMTM5MzNENjVBMkYyM0ZEOEQ2NUJFMzRCQ0NGOTcKKzoxMERBMzAwMDA0OTM2NDcxOUVEQUJDODY0QkZFNzc1MDlFOEQ2OTlCODEKKzoxMERBNDAwMDk4QTZCRkRGNDRGQkJFMDZFNzcxMDJDRUUzNTg3MDJGRjUKKzoxMERBNTAwMEM2NTFDNjMxRTVBRkZBNzg4MzM2REU5RjZDMjJERTkwODAKKzoxMERBNjAwMENEQjI3MTNENDVCODM5OTBERTM5OUVCNkJFM0U3OTJDQjcKKzoxMERBNzAwMDRDRjdERjQ4NTYzQUE3MDdGRjBCOUE1MzNCQkZBN0U1ODEKKzoxMERBODAwMDNGNEY3MjRFRkJENDQ2NzJCODg2RjEzQzlGMzAyMUIxQjUKKzoxMERBOTAwMDQ4QkMyRjEyRjc4Q0IxODg5MkU4NUUyOUY2NEQ1MkU3MDgKKzoxMERBQTAwMEZDQkVCMDQ5MEFERDkzMjFFNjc3NzY4QjM1ODhGOTQ2Q0UKKzoxMERBQjAwMDBGNDk4MTRCRjg5RDMzRDJBMUExQzRBRjRBQjgzRkRERDUKKzoxMERBQzAwMDMzMTFGM0ZFNjI1MzRCMTVCRTg3NzZGM0E5OUQ1OEQ3RTkKKzoxMERBRDAwMDYyOTlDNzc5MjNCQjJDNzQ5RjRGNDJGQkQzMEFBQTRCOTAKKzoxMERBRTAwMDI3MDc4QUVDNUM4RThDQzc3ODVGMUVDOTBCMDVDQkREREYKKzoxMERBRjAwMEU3NzlERTc4NzE1MzgxODJERjM5NzA4MUU3NTk5NzMwOTkKKzoxMERCMDAwMDlGODI3RUQ3OEQ1MUEzQkY3NjU1M0E3NUM3QzY2RkM0MjUKKzoxMERCMTAwMEJENDQ0QUE0MzdDMjU1QjNDQkYyRUQ4MUVFNzZDMEQ3RUYKKzoxMERCMjAwMDJBMjFERjlBQ0Y0RkYwMjBCRTM2MEUxODc5RjM3NDY4QTEKKzoxMERCMzAwMDkyM0I3MEY4MzQzNDJCNENENjU2MTVGNURENUQ4MkFFMzEKKzoxMERCNDAwMDQ2MjM1RDQ5NjRGNTY4NzRFNUIxQTMxREJEMjY4NkFFMjQKKzoxMERCNTAwMERDQTkwNjNGNkUxNjBCRDM4MUM3QTIxQUY1OTJDMTFGMkUKKzoxMERCNjAwMDE0NzY0OEFDN0RERTY5OTdEN0M3RjVFNzU4MEIzOEE4MUYKKzoxMERCNzAwMDQwM0ZCMzA1N0M1N0E1OTg4MzI4Qjc5NEZCNzhCRUNGNjgKKzoxMERCODAwMDVEOENGNUM2M0NBMEJCNkE1NDgzRkYzOTNCNDUyMUZDNDQKKzoxMERCOTAwMENENUU2RUEzM0M0RkJDMzc2QTJFRDQwM0YwOUNDRTM1Q0QKKzoxMERCQTAwMDBDRTBGNzQ4NzVFMEIzNTZENzFGRTlDMDkxNDE3NDNCQ0MKKzoxMERCQjAwMDVCRUM4N0ZGNDlFMjdFRjhFQzk0NEZEMkM5NjkwRkFBNkIKKzoxMERCQzAwMDE3RjRGNDE5RkJGRDg0RTNDNkY0NUIyNUYxNzhDRTJBNDMKKzoxMERCRDAwMEQ1OTdFOUQ1RDkxQjEzRUREQzdFQkFFMDJFNUI2N0JBODkKKzoxMERCRTAwMEMyRkQwNjAxNkI4RjdDNDU3NzFGNTA1QjhBNzU2NkJDNTIKKzoxMERCRjAwMDdCMjRCNEYxMzQ3QkFGMjhDMEZERjA0NEUzRjY4RDk0NzAKKzoxMERDMDAwMDkxMUQ2NkZBNzk1ODQ2RkJCQTZGODQ5MTNENUMxNEYxMTgKKzoxMERDMTAwMDk5RTYxOUVDNzJFRThGNzZCMUNCRjEzRTAzQTgyRjY5MkQKKzoxMERDMjAwMERDQ0JFREYyODZFNTY0REYyRjAxRkIxRUU1RjkwNkRDQjcKKzoxMERDMzAwMEYzRUNDMUY4ODRGMkM5NUVFRkYwMkIzMUJGQTVBODQxMjcKKzoxMERDNDAwMEVBRjAzQjE1QzA3QjVFM0Q2RkJGRUE5MTcxRUFDMzBBMDMKKzoxMERDNTAwMEZBODU4MTRDRDU4QkUxODE5MkQ1NTZGMDczRUE3Mjk4QTIKKzoxMERDNjAwMDhEODE5RkIzQzI1RTMyN0UyREZBQTVBOTNFODlBNTUwNTMKKzoxMERDNzAwMDdEQjUyM0VCREFGREQ4NTVGNkUyRDVFOEM3MjZGMjI3QzUKKzoxMERDODAwMEFCRUQxRTgyNUYyMjdGNTI3NkZBNTdEOTc1NzEwMDkwRjQKKzoxMERDOTAwMDhCNzFFRDhGNDlDRTkyMzVEODRFOTMxNzBGOUJDMjc5NzkKKzoxMERDQTAwMDNGRUQ0NkY5NDE5NDVGNzE3M0VEREQ2NEVGNEZBRUFEMkEKKzoxMERDQjAwMEYwRTI5NTZFRURGQjJFRjdDN0ZDOEEyMjgxRUY1RkQ4NkMKKzoxMERDQzAwMEI5M0Q1OTlEQzRFRDQ4NDkwQUZDMDJGOUIzNzVDMEQzNkEKKzoxMERDRDAwMDZCMEI4MDNGNjYzNUYxQkMwRERCNzU5NzdCRDM3RDQwQzgKKzoxMERDRTAwMDIzOUZGRTc5MDE4Q0ZGNTE0NEExRjg0MkIzOTNDNzlCNTcKKzoxMERDRjAwMDNGNjIxMkQ5QUI0NTQ3MkNGRTQ2QzBDMzY1OTA1MDc2QjMKKzoxMEREMDAwMDlEREY3Mjk5OTU1MTlERjVDQzMwOUMwRkZFODhFRENEMkQKKzoxMEREMTAwMEZCMjk3QzI3NThDM0YzOTQyRUQ0RTQyNDIzREU5QjU1OUYKKzoxMEREMjAwMDYzRkM3N0FCOURFN0I3NkQxNUY0MzcwQkVGOEQxQzhFNTkKKzoxMEREMzAwMEVEQzJEOTc4N0ZDQjJDMjVBQzUyN0U0NkQ0Q0NFRjM5QkUKKzoxMERENDAwMDg0NzlFMDdDOUE2REM2NzE3NkRBQjlERkI1RDNDRUVEMTEKKzoxMERENTAwMEY4NTlFMkRFQzk2NjVCRUMzODBBMUY1RkRDMzMxNzBCNEIKKzoxMERENjAwMEY3MzQ3QkU5OEJCODlFQ0JDQ0Q3NDQ3ODAyNzk4NTdBOUYKKzoxMERENzAwMEExNjg0NENCNTFCNDE3QUVBRTdGN0MxMkVBOUZFQUNCQzgKKzoxMEREODAwMDUyQjgwRkM2QTcxQjU1RjJERkNGODg3M0UyNjcxQkY3QTcKKzoxMEREOTAwMDY3REMwRDY1RTVGNjNGQjhEMERGN0I0REUwRTlBQ0QyM0UKKzoxMEREQTAwMDRBRjdCQzJDNzk1RUE2N0IwQUUwQkIxOURGQTFGRUYzMjMKKzoxMEREQjAwMDBBRjkzOTJCN0U0RTQ4RDNDQjA1NUZFRkNGRjZGM0UwNUYKKzoxMEREQzAwMDIwOURGQkQxRUNDRTcxRDY2MDA4RTdEN0JDNUMyNkI5QUMKKzoxMERERDAwMDAxN0FEQjcwRUZDRjhERTJERTlGNTg3QkY0NjNCQjE2RDgKKzoxMERERTAwMDY3Q0VBMEJDOUYwN0RDRkMzQjg5RjhCRjI4OUFDQTQyREIKKzoxMERERjAwMDNBRjk1MEE0ODQ2NTlDN0Y1MTM0ODM4NTAwQkU2NzBGMzcKKzoxMERFMDAwMEU2M0U1NjhFRjRDQTU0NkYzRjFDNTY2MTJENjQwRjhCNEMKKzoxMERFMTAwMEZEMUJGOEI1RTBGRDc0QkI0NTY1NEZFM0M1RTk2Mzg5QkIKKzoxMERFMjAwMEY5RENBQjA2NDM5QjZGODUwM0REQzgzRUM2MTA2ODYxMTUKKzoxMERFMzAwMEE3REQ3NzYzRDQxODU3OERCNTkzNEI5QTg3QUQ0MjkzN0UKKzoxMERFNDAwMEYyMEMzRTQwRkE4QkYwN0I5MUJBRDhDRjkxMDk3MUVEN0MKKzoxMERFNTAwMDY2QzYxRTI1MzgxNDNDOUYzNzA5RUY3QjI5NzhDREU0MzAKKzoxMERFNjAwMEM2RUZFRTQxQkVDNjc4N0VFMzQ1QkE4RkE0OEE4NTZGQzEKKzoxMERFNzAwMEMzRjc1NThEQjIzQkNDQUUxNENGNUFGNUM2OEQzMDhGNUIKKzoxMERFODAwMDNEMTFDNTgzRkNCRjI3RDI2MjFENEE3NTEzQzUzMThBNzcKKzoxMERFOTAwMDBFMTcwRDQ2QkU2RDhFMjgxNEZGMkYzQURGOTIzNDJGRDkKKzoxMERFQTAwMEJGRDM3RTY5QkU2Q0EyRTc3QjJFRUZBM0U3REFCOENEQzUKKzoxMERFQjAwMDkxRDRDMUE4OEZCNzlCQjgzRkRERjJFQUE1MjQ5NEE3RkYKKzoxMERFQzAwMDdCMkU1RjQ4RTNGNzBGMkREN0VFMDU4QUI1OUIwOTJFMTEKKzoxMERFRDAwMEE1NEVCOTIzQ0VBQ0I3RDM5OTVDRjQzNkU2MkI4RDRGNjMKKzoxMERFRTAwMDU2OTk0Qzc4RTBGRTY2MTdGQkUzNDNCNkNBQzlCQURBMjYKKzoxMERFRjAwMDIxMjU2OEQ3Qzg3MUVDOTE0RTc4MUJFQ0U3RkU0OUMyMkEKKzoxMERGMDAwMDdFRUNDNTBBRjAzRUI3QTZDQjY5OEJFOTVDNjc3MzkyREQKKzoxMERGMTAwMDdCMDVDNTlEQjhGREQwREU3MkZBNjc5M0YwRjkyMTk5QjMKKzoxMERGMjAwMDlGRUJCRjJDMTMzRkVEREJCREI4NEY5QjQzMEZFRjNBODgKKzoxMERGMzAwMEMyREYxNzU5RTdDRkJEMDJFREJGMzg2MEE3NzgzOTUzNkMKKzoxMERGNDAwMEJDODNFM0M1NDUzQUUzQzRFMTFFN0M3RjJCRDg4M0RGNjUKKzoxMERGNTAwMDNGQzNFMzAwREZFQThDMDMxNDI1OERFNEY3MzdBMTVBQjEKKzoxMERGNjAwMEVBQkZGRTk4MTlFMzI4N0JFQ0ZFNkYyNTExREYzNDI0MEQKKzoxMERGNzAwMEExOUNBOEIwNzNCOTE0NjQyNUQ5NjAyNEIxRTcwRjlBQTUKKzoxMERGODAwMDRBOTA0RTQ2MkNGNzEwQkVCN0FBNjA0QTIxNUY2Q0U2NTUKKzoxMERGOTAwMDdFRkI1NjNDMDcwQUUzMkM2Q0E4MzdFN0U4RjBCQjUwNDEKKzoxMERGQTAwMEVDMzc3REFBMDY3QkE3RUE5RUZGM0U4OUZCQTU5RjFFNTQKKzoxMERGQjAwMDU4RjQxNEU1MjNCQzZGNjFGREUyRDg5RkExMjQyRTA3MUQKKzoxMERGQzAwMDc3OUE4MzkzQjY2MUJCRTMyNjNBRTdEMUYyRUFDQkFGMDcKKzoxMERGRDAwMEY2MDBGQzJFM0NFQTE5ODZGMjdGNTk5Mjg3RTBENTc0NTAKKzoxMERGRTAwMDY4NkI1RDBGNjhEN0Y0MjE2QTQ5MzBCOTM3Q0Q5NTREMUMKKzoxMERGRjAwMEYwREQ1Nzk4ODdDN0YzREUzNkQxN0MzQkUyOUY2MDA3QTAKKzoxMEUwMDAwMEUyN0E3RjIwRTZGM0NBNDE5MzYxRkZFQTE1M0JENzZCQzIKKzoxMEUwMTAwMDk1NDkyQUJEOUY5N0M0RTM2OTNCMEU5NkE0NjFGRUU5MkEKKzoxMEUwMjAwMDFFN0I2MDNFQzJCM0ZBOTNCNjNBOTdBNzMzRkVBN0Q5RDgKKzoxMEUwMzAwMDgxNjNERURFMzE2OTA4RkNFNzk4MzMyNjM3QTJDRkYzMkYKKzoxMEUwNDAwMEY2NDYxOUQ3RUJGOTk0QjExNEE5NkI3QzBBQzZBQjQxMUIKKzoxMEUwNTAwMDNDNjhFM0JENzI4NjhGMDdGM0Q4ODdGQzE2NTlDRURDODcKKzoxMEUwNjAwMDk0OTdDOUZDM0ZDQTg3RkEyQkFENEEyQUU2MkQ2RDE1NTUKKzoxMEUwNzAwMEZCQUExQTFFQjRGNTY4RjNGMDM0MzBERjA2MDdCMTg2NDgKKzoxMEUwODAwMDZGQzc5NUUyQ0MyMjNGNzJCODkwOUI1RkRCN0RDMTI0QzUKKzoxMEUwOTAwMDFFMDcyNDdCRkJEMzAzNzZCMkJCNzY4QTc4MzVDQjlDRjQKKzoxMEUwQTAwMERCMDdFMUE3RTE2OUJEMjg2M0U3OTNFOEZCOEYyNzcxRjAKKzoxMEUwQjAwMEJEQTE5NTVCNTU0RjkwRThFMTc5QUU2RkI3M0FDM0Q2RjUKKzoxMEUwQzAwMDNDOTQ3RjJGRTU1MUREMTMwQzI2MERDNTNDQThBNjdFQTAKKzoxMEUwRDAwMDVFRENFRkMzRkNDRjI0REQzRUVCMzg0MUU3OUU4Njg4NTMKKzoxMEUwRTAwMDM5NDc4Nzg3QzQ3MjhEQzNCRDgzN0U5NDA2QTJBQkE2RDEKKzoxMEUwRjAwMEEzOENGODZERDE5NkZCNzg3QzExRTQ4MUI4Q0Y4OUY2QkEKKzoxMEUxMDAwMDhGOTEyRkM0M0U3Mjk2QzQ0QjE3RjJDOTk4RTYwRDJCMUYKKzoxMEUxMTAwMEIzM0Q3NEJFODBGNjZEMzUzODc4OTAyRkEwREMyREYwQkQKKzoxMEUxMjAwMDgyNzBDMUY3MkY4OTc1NkJFRjVGMTRGMDFCMkZFNzI3MDMKKzoxMEUxMzAwMEVCRjMxMTYzQ0IzRENCMzIyOUE2QThENTVGMTJGMzVGNzkKKzoxMEUxNDAwMEM4MUUyNTNCNzRFMUU1N0FCMjRGM0QzNUJDNUNGODAwNTIKKzoxMEUxNTAwMDJGRkJBRjlGNkJDNkY4RUZDMjc1RjFFRkFEMUI5NUM0RjcKKzoxMEUxNjAwMEVEOTdCMzgyMEY5OEM5REUwM0YzMzkzQUY0NjMxMkQ3RkYKKzoxMEUxNzAwMEFGQTcxQTFGREI5RjRERkEyNEYwMkFEMkM3MEQ0RDhGOEYKKzoxMEUxODAwMEZFMTJDMUE0RDFGRkE5NEQyQUY1RDdFNDg4RDZGRjBEMTAKKzoxMEUxOTAwMDMxRkVGMzZGNzNGRTE5QjM0OTJEQzE3QjhDQzYwNDk5MTAKKzoxMEUxQTAwMDFCRTNFNEFGNkNEQTJDQTM1QzdGMDVGOTIzODdDQjBENkUKKzoxMEUxQjAwMEQ0Qzc5RjFFNzgyNEU5MjFBNDgzNjMyNjg2RjFGODlEQTUKKzoxMEUxQzAwMDY2NTZCMTVEODdERjk2MEQyRjFBRTRDMUEyMkRDQjI3Q0QKKzoxMEUxRDAwMEUxMzhBM0RBNTIyNTk0RkY5QTFDRDBGMEJERDNFQ0JERjAKKzoxMEUxRTAwMDg5RTRDOTk0MTg3OTUyQzZGQjQ3MDUzQzFGMTNGMkU0MzEKKzoxMEUxRjAwMEIxODkyMDRGRTA1MUNBQTYxNDA5QzdEOTY5OEU3RkFGRjMKKzoxMEUyMDAwMEQ1NjcxQURGMDk3QTFDREIyOTc3M0ZFMzcyQjdDRDk1MTIKKzoxMEUyMTAwMDA3RTM1NDREQkU0MEYxRDc4RUVGMDhCQTdCQUM0Q0EzNTgKKzoxMEUyMjAwMEJCMUMwOUUxMDhGNkJDQTkyRkFFMUJFMDgzRjQwRkY2NzYKKzoxMEUyMzAwMEZDOUM2OUY5QzRBNTA3MTVEQUY3MTFGQjQ4MjI2RjgyMjcKKzoxMEUyNDAwMDM4NENDN0JGOUE5Q0ZCREExRUY4MUJGMjQ5NjE1OUNEQzYKKzoxMEUyNTAwMDRBRjQzM0QyQ0E4MzQ0RDdBN0E0NDA5RjU0RDA1N0E3QzcKKzoxMEUyNjAwMDkwQUZFM0M4ODVFMzYyM0Q1RkE4ODEzRUVFMzhFRjNCQTcKKzoxMEUyNzAwMEY5ODhGNTQwM0VBODYwMDExM0FFODNBRDk3RENGQUYzNTAKKzoxMEUyODAwMDBGOUVGNTlDREU1MjFDOTIyMTdGNUNBQjZCRjBCQTkxMjUKKzoxMEUyOTAwMDc1REMzMzk4RTI0ODI3M0Q2NUM2QkNDQUZFMjFBRUE3QUYKKzoxMEUyQTAwMDk4NTQ0MkY0Qzg0QzM3Rjc0MDdFM0JBNTMyQTI5RjUzQTYKKzoxMEUyQjAwMDIwMTcxMTZFMEJFRDQ2M0Y0NDVCNTc0RjA3RTdBQjJGMUUKKzoxMEUyQzAwMDUyRjgzQUZFMjhGODhFN0NEQzkxRDQ4RURCNTlDNTI2QjQKKzoxMEUyRDAwMERBODc0NUZBMjA3QTlCOTI0QTdFMEEzODQ2MEFGMTc5MTMKKzoxMEUyRTAwMEM3M0U0MzU4OTZCODNDOTA3MTFFNkVGNERGMjgwRUI0QkEKKzoxMEUyRjAwMDgxRTc4NTZEREI0MDc0OTMzMkQxNERFNzE5MUU1M0JDMjUKKzoxMEUzMDAwMEI2MTQ1RDFDQjc2NUYzRTNFNDM3MjIzREUxMUMxMkQxN0UKKzoxMEUzMTAwMDYzMDVEMjIzOEI0Mzg3MjFBMDQzRTg5NzNBQjE4NkYwNjcKKzoxMEUzMjAwMDA4RjgxREU1ODA3MTUzQ0EwMjMyRDI0RDJDN0VCNUZEMkUKKzoxMEUzMzAwMDQzMEQxRTNCNjNGNjFCQkZFN0UwN0MzOTUxOTQ5RTA0RkUKKzoxMEUzNDAwMDc5Mjc5RDdBQzIyODZGMDE1RkRGRTZGOEVBQTQ2RkM0REYKKzoxMEUzNTAwMDlCQzY2RkMzMUQ1N0E2RjM5MDgzREYwNzVFRjdEMTNDQzIKKzoxMEUzNjAwMENBRjdEMEY2OTlCNDdENjNFREZCNzcwODdBNDlCNDRGQ0MKKzoxMEUzNzAwMDk0NjUwQkNDNzQxOEY2QTM5NkQyN0U5N0M2MjdEQURGODUKKzoxMEUzODAwMEE1NThCQTk5RTdCRDZEQzczNzA4RjcxNjdCNDg3RjVFNzkKKzoxMEUzOTAwMENGQUQzMDFGRTJCM0MyOTE0M0RGRDNGMEVCQTkzNUIzNjkKKzoxMEUzQTAwMEJFRTAyRjdDOTEzM0I3MDU1RjdEQkIzNTU4M0UwNEQ2NjgKKzoxMEUzQjAwMEIxREQxQzlDMzE5OUVDNkVFRjREMzhGRTRERTUyNkY3MzIKKzoxMEUzQzAwMDIzMTJFNjBCQjgyNThDNzcxMDg5MjM1RjFDRTJERjYxRUUKKzoxMEUzRDAwMDFFQUY2MURFNEIwNURDMzUzQzY5NzA0OEE0QUYxMkUxMkQKKzoxMEUzRTAwMDI3MjRFMDkzMkVERUM3RjI3NUI5ODNGMzczQkVFMzVBOTgKKzoxMEUzRjAwMEY5M0EyODIzRERCQjU4NjAwNURFM0ZDRDhBQjgxQ0VBMTgKKzoxMEU0MDAwMEUwRUIyMjQ2RkI4ODZCQzU3OERBNzNBRDFFODdBRkQ3ODkKKzoxMEU0MTAwMDNBNDZFQUY4N0E3NDlCOTFBRkMxQzIxNUZBOTRGODJCODgKKzoxMEU0MjAwMDdEOTNDQUYzNjgwNTlGN0Q2MUUzRjNGRDk1ODNEQjYzMEMKKzoxMEU0MzAwMEU5QTgzRjAwN0ZFOTQxQkU5RkJBNTREMDE5NTAxMEU1Q0EKKzoxMEU0NDAwMEU1RDU2RkIyMzBDNDgzQzZGN0FFMTlBQzQ0QzU3RDU5NkIKKzoxMEU0NTAwMEQ0MzdEODZBNDZFMEU4MzhEQzhGQ0QzNDdCNzA3RkY4NUIKKzoxMEU0NjAwMDk0MUEyMTNDOUQwMjA3QjU5RUYwRTlBNzNDOTM1MzA3RkYKKzoxMEU0NzAwMDZFRTBGMjYwNzI4N0ZFRjFFMTdFNEZGMDhGM0RGOTdFMzMKKzoxMEU0ODAwMDhFREM0Qzc0QkQ3NDNDMjNGREQxQjI3OTE0RDE0MTQ1NkUKKzoxMEU0OTAwMDc5QUU4NDc0QjY2ODRCOEE4NEVGNTNDQkRDMjY1OTI3NTcKKzoxMEU0QTAwMDE3NDdENTlBNThERkUxNDRCN0NGMzk3NDcyNzE1NEIwMjkKKzoxMEU0QjAwMDQ2NDZCOEY0NDkwQjY0QUEyOTYwMzczOEU2NENEMEM3MDEKKzoxMEU0QzAwMDdGNUU4MUJBM0VGRTAzRjVCQUJGMjdGRUIzN0JFRDVERUEKKzoxMEU0RDAwMDc1MThGRjY5NEZGMjM1MjMzRUIyNkNGRURERjhGREMyQzAKKzoxMEU0RTAwMEVDMUE5OUU5RTRDNUQ1RUNBNjZBMTEzRkZBNzBGNUVCOTAKKzoxMEU0RjAwMDlCRTdDMkJBNjczRDFDNTk4RDZGRTc2MDdDNzUwMEU2RUIKKzoxMEU1MDAwMDA1RjBGODZBNzVGMzExOEFCQjM2MEI3RTFFMkVGOTBGRTMKKzoxMEU1MTAwMEUzNzdFRkFBQjlDOTE4Njc4RDVDREI3N0JCMDlCRTY1RTUKKzoxMEU1MjAwMDFGMzI4MjdGMzc3RjhEOENGMTA4NEQyRTdDODA3RjhGNEMKKzoxMEU1MzAwMDgxRkI4RDEyRUVBQjY5RkM4MDcyMDVFRDRGMkRCRjAxQTIKKzoxMEU1NDAwMEUzNUVDRUQ0NEVCOThDRjU2NDlENUU1RDVCNkU4QTdCRDYKKzoxMEU1NTAwMDVGRUQ2OTg3QzNBMEI3MzQzOUM4OUFGRkY2QzI0M0RBQzIKKzoxMEU1NjAwMEJEOTk1QzJFOUU3NkU4RjRGRTYzRTVDN0U5M0MzMTEzNjUKKzoxMEU1NzAwMEY3RDBERDJGN0NDOEE3NTY3ODdGN0Y1REI3Q0U3M0VDRDAKKzoxMEU1ODAwMEMzMkNFNjIwRTY0RjgyREJFQjcxRUJGMjYxQTU2NjI5MzYKKzoxMEU1OTAwMEVDQzQzQ0NCNEJFOEI5MDBGRTJFOTlBODdDRUFERkZEMjkKKzoxMEU1QTAwMDEzNzNEMDhGNkYzMjc5QzExMkMwM0MwOUEyNjM2RjFGMDEKKzoxMEU1QjAwMDQ2RTcxRTFBQzQzRTZDRjE3RTg3NEYxRDgxRjdFNjVCNkQKKzoxMEU1QzAwMDQ5RkVCNUVGQjUwNzkxQUZEQjlEMjY4QTFGQjdFQ0IyQzgKKzoxMEU1RDAwMDEwNUMyRkY2QjUwQkJGM0E2NEYwQkZCNUZEMEQ5QkE1REYKKzoxMEU1RTAwMEVEQUQyMkU4QkZEMUM2QzdEREY4NzA3RkJBNEYyM0QxQTkKKzoxMEU1RjAwMDdFNzc1MTZEMkVDNUYzQjRGODYyNkVDNDYzRTI0OTYxNTMKKzoxMEU2MDAwMDdDN0MyNUMyNjg1RERBRkVGNzNBQ0NCRjE4OTEzOEZGRjIKKzoxMEU2MTAwMEEyOTdEM0FDRjk0QjE5NEVBNEMzOTk2REFGRTJEQzYyNUIKKzoxMEU2MjAwMEZEQUY4QzQzQzdGN0UyMzgxOUI1M0MyQ0IwRUVEMDUyQTEKKzoxMEU2MzAwMDA5RDdCNzZFNTY3Q0ZGNEJBMzlGNzUyMkNFQTVDQjczMkYKKzoxMEU2NDAwMEM4NzNFQUY1Q0FEQ0Q0QTQ1QzlERENENEZBRkQ1MkU0QkMKKzoxMEU2NTAwMDM5OEM2QUI5N0IyN0RBNzdDMEQ3Njk0RTFENUY0RjFBQUMKKzoxMEU2NjAwMEIyREExNjZGQkZERDVGRkIxMEM1M0YxM0QxQkRERkM0NEIKKzoxMEU2NzAwMEVGNUI4QTdEM0VERTI5RUMxODI1RDI4M0VDQzAzRDVGM0UKKzoxMEU2ODAwMEQ4M0Q3MUYyMUZGQ0JCNENGNDc3NDFCNDc4NENEN0VGMDYKKzoxMEU2OTAwMEZGM0JDREZGNDY2N0M3QkU1RThGNkJEOUQ3OEI5RDc3OUIKKzoxMEU2QTAwMEFCQ0E3QUM1RDMyN0IxNzk5M0RBRjdFMkY0QkY0QjdGQ0YKKzoxMEU2QjAwMEVGODFERkNDMDJEQjFENURGQjY5RjZBRTVGRTJGNzRFNUEKKzoxMEU2QzAwMEIxOEYxOEU5NTU4RDRFMDBFRTc3MjBCRTg2MUU5RTM3MUQKKzoxMEU2RDAwMDFDNDNBOUNDNUEyM0EzMUNCOEQ4RDQ5MjhENzFBQTQ0NDgKKzoxMEU2RTAwMDdFQTEzNjFGRjhGNThCMTc2N0YxRTNCRDRBNzFENjc3MjcKKzoxMEU2RjAwMEJGQzA4MzVGRTVGNkE3NTQ3Q0UwM0IzODJGRkY3OUIzQkEKKzoxMEU3MDAwMEE0M0Y4NzMxQzcyOTE5Rjg0OThCODMzNjlGN0Y3NzM4MTMKKzoxMEU3MTAwMEM5NDczNTlDMUQwRjdFQjFGQjk2NzMzMDY4QzVGNTFDNEIKKzoxMEU3MjAwMDg3ODM4MDRCNUQzMTJCQjE3NEEzMzgwMURCRTg0MUZGNTcKKzoxMEU3MzAwMDhGQ0I0OTRGMkQyM0ZFQkU1RUYyRDFCQTU3MzhCOTVENUIKKzoxMEU3NDAwMEIzOEVCNTUyNUVFM0M1NDMzQzBGNzlFODdEMUVGQUZCRkMKKzoxMEU3NTAwMDVDQTAwRjgyNDhCN0EzNTg2MEE3NDk5N0Q3QTVEMTQzQkIKKzoxMEU3NjAwMEREQjM2MDlGMThFMjU1OUM3RjM0QkZCNTk3ODhGQkY0RkEKKzoxMEU3NzAwMEM0N0I0Mjc0RURCQUNGMDQ1MkQ1QzlGQkFDODA5NTI5NTUKKzoxMEU3ODAwMEJBRjg1QTc2ODVEQjUwRUY1NTkzNjk2ODlGMTkwQzRCQTAKKzoxMEU3OTAwMEM4NTc5OUI1MUVDM0YzNEUzOUM1RDdEQjJCQzgzNkEwNzEKKzoxMEU3QTAwMERFNUZDN0RBNjg3REJEQzU3Q0FFOTcwMjQ0MUYxNzBGRDgKKzoxMEU3QjAwMDlENDhDNTM4NjQ0OEUwMDNENkZCMjRBREI3MzY3MDUxOTgKKzoxMEU3QzAwMDRGMUZEQTdBQUZCNkFFMEY5N0MxN0M4MEVGRkY4NDdFMjEKKzoxMEU3RDAwMDM5OTQ3NzNENzA0Q0VBNEU3MDc3NTNEQUVGMUNEMUFGMjUKKzoxMEU3RTAwMEQ3Rjc4RjkwRkZEOEFCQTY5NUVDRjdEOUI1N0IyNUQ0OUEKKzoxMEU3RjAwMDVCMjAzN0E4REZCQTY1NTYyQTdGQkRDQzREMzI1NEMzQTMKKzoxMEU4MDAwMDZGNEY2ODg3Nzk0N0RBN0RGMDg5RjREMjJFRTczNUVCRDAKKzoxMEU4MTAwMEE1NURDRTM4N0FDOTY0OERCQzg2RkJEQjk1Q0RCMjA3ODkKKzoxMEU4MjAwMEU5NjBFNUY3NTMyOTdGRTJBOTA2N0UyRTcxN0YzM0NGOTkKKzoxMEU4MzAwMEU3N0JBQThFRTc2RDZCREYzREY3N0MzMkVERUY5QzEzMzMKKzoxMEU4NDAwMEZCN0NDQzc3Mjk2MzFBRUQ3QjVGQ0FDMEYzNDUxRjNCODUKKzoxMEU4NTAwMDAyNkZFOEU1RTA1M0NEOUZEQjUwNUYwQ0Q2RjI2NDYzQjYKKzoxMEU4NjAwMEY0MEIwQTVFM0NBRjQyNjcxRjI1QjQ3Qjg2QUQ5MTcxMDUKKzoxMEU4NzAwMDFEQjcwNTg2NjM0QTFCRjBGNzNCOUMzRUI5MUVGQUNERDcKKzoxMEU4ODAwMEI2MTI5M0ZFOUU4RThCNEQ3RjlEQkRDRkQzQjk2RkE0RTQKKzoxMEU4OTAwMEVEMkI2OUVGQjU3RDI3NDkwQTdDQUM5N0VCQjFGQjRBQkMKKzoxMEU4QTAwMEIxRkIyMUIyQ0I0QTc5RDY1RUQ5RUU5NThEN0E5NUU4NDcKKzoxMEU4QjAwMDZFNjUzRkFFMzc1N0VFQjUxM0RDNTZGNjczRDBGRTJEQkUKKzoxMEU4QzAwMENDRjcwQ0NFQjcwNUY0MTY5RUMzQkI3OEQ0NDFFREI0OUIKKzoxMEU4RDAwMEY5QzM3Qzg3MUVEMkNEQjdEQTE0OTlCRDRGOEEzQkRGQ0UKKzoxMEU4RTAwMENGRjU3MEVDM0E1RjYzM0VCMjM2M0ZEOUE5RDBCQ0RCQkUKKzoxMEU4RjAwMDk5REQ4Qjc4NkIzMEYzRkJEQjgyNkZEQTI5MUVEQUVFNjEKKzoxMEU5MDAwMEJCNjRDMzdCODNEQkQ5MjUxQkM2Njk0RjNCMDI5MjBCREIKKzoxMEU5MTAwMEJFMjNGNzhBQjhEMDBGRDlERjdDNzEyMEQyN0ZBMjdEQzkKKzoxMEU5MjAwMEJFNDFDRTEyMTVEQkMzM0FBRDU4OEU3MjA3MkU2RTYzMTAKKzoxMEU5MzAwMDlDQ0YwMjU3RTgzN0M5NTlFMjcwOERGQ0JCRDY5RkVFRDkKKzoxMEU5NDAwMEJBMjJCRThDRUJBRkM2QkY4M0EyQjNBMzI0MjE2RjYzRjAKKzoxMEU5NTAwMEU5NEQ2QURFRkIxNUM2RjU4MUJGMjg1RjM0RDg5Qjg1N0IKKzoxMEU5NjAwMDU2MDI5Q0VBODYwOEJBOUJDMUM0REY0MTMyRDJDM0M3QjMKKzoxMEU5NzAwMDBFN0YzRjVDQUZDNjk3NTc4MENGNDA5Q0Y3NUIwRUZGODIKKzoxMEU5ODAwMDYwNkM4RkYzQzBGMzNDMjA3Nzg2QjhCODlFREE4OTQ3NzUKKzoxMEU5OTAwMDk2MzVGQkE5NEYxRTk3NjM5MTE0NDY3OTI2QjFGQkIzQjgKKzoxMEU5QTAwMDkzOUNEMzQ2NjBCRkRDMDExRTEzREVFM0ZFNzdEMEZCRjEKKzoxMEU5QjAwMEI4MkJDMzJGNEM3OTJBREE3OUUyNEFEQzI3QzQ3MzdDNUUKKzoxMEU5QzAwMDhERUExOUUzREY0QjMyQzJFMUI0QzNGRjZEMUMzNzU4NDcKKzoxMEU5RDAwMEQyNDk1NzJCM0Q1Nzg0QzcyNDg0QzM1QjhFQzAxNDJDNjcKKzoxMEU5RTAwMDlEMkFEMDBCMDI2NUY0NUNGQUZCNTU1OTM2REYyQURDMTAKKzoxMEU5RjAwMEJGRENCQTlDQzNBMUZENTkwRTg3RUQyRDI2QTJFMzBEMDUKKzoxMEVBMDAwMDZDMTBGMURGMjBEMzg1RDkzODNFQzg5Nzk5MzhDRTg4NkQKKzoxMEVBMTAwMEQ2N0ExM0U2RjNGNTBCNzk0Qzc0OEY1MzZCODNDOTc0NzQKKzoxMEVBMjAwMDY1QkE5RDI1RTg3NjhFQzBDM0ZEODg4N0MxREI3ODVDMUEKKzoxMEVBMzAwMEU1MEE3NDNCNEZEMEVEQjVDMjdEODlFQjhBN0NEQjg1NUUKKzoxMEVBNDAwMEFFNkFGNDc0NzVBREY5NDM5MjM4MDcxQjNCMUU2MzZERDMKKzoxMEVBNTAwMDE0QkZERkZCOTI4NUU0NzdENTBFN0VFRUI3NkFGNzQ5RTcKKzoxMEVBNjAwMDNBMkY1QUY1QjI4NTg4QjJFQzY1MUIzRkJGRDJDOERGOUEKKzoxMEVBNzAwMDlGMkI4RUJGQkZGQzZGMkVFRTVGNTUzNkRDRTdENUVCQ0MKKzoxMEVBODAwMDZCQ0QwRUY4QTlFRjgyQkJBRkRDQjk0Rjk3MzY5OTlGREIKKzoxMEVBOTAwMDA3NTk2OUQzRjI0MUY5N0U5RDRCRDA1OTVBMkZCRjBGQzgKKzoxMEVBQTAwMEY1NEVEQTc4MUUxNzcyMzlFNkQzN0U1REQ3NzMxRjlDNTgKKzoxMEVBQjAwMDZGRDM0NTNGQjdEQjQzRjY0MEVDMzk5MDc0QkMxNzlDRUQKKzoxMEVBQzAwMEVGQkIxMkJEQzgyNkJCMTdGNzJERDMyNkM2QjQ3MzRDQjcKKzoxMEVBRDAwMEE0RkNCOUY0OThGREJDOTA0QkQ4QzE2Njk2NDk3MkQ0OTkKKzoxMEVBRTAwMDE2RkZCQzk3OTJBQ0Q5NzM3NjkzNUU5RUEwOUNBN0ZCNTEKKzoxMEVBRjAwMDdBOUM1NjVBRjdEMjc0OTY1NjhFRjEwMUE3NDJFNzNEOUEKKzoxMEVCMDAwMDYzQzdEMUNBMTQ5RkM5NzA5RTI4NkRBMkRENzA1RjQ2OEQKKzoxMEVCMTAwMEJBM0ZENTUwRUYzRUIzODdBMTdENTYyMEQ3RjAzRUJCMUMKKzoxMEVCMjAwMDYyOTBFMTdEQUY5QTAyNDNCRDRGRUQwRDg2RjYzOTQwMEMKKzoxMEVCMzAwMDcwRkE3QURFOUE5QjBERURGQkQ1NEYzM0Q0QUY1Qjc3M0QKKzoxMEVCNDAwMEE3QTFGREMwRDBERDg2Rjc4M0I3MkMzMkJDMUZEMkIwQTEKKzoxMEVCNTAwMEQ0NTBCRkJFRTkyMTQzN0IzOTgxN0RBREMxNTlENkVDOEMKKzoxMEVCNjAwMDZCRTc4ODAwOUQxRjczNUEyNUJEMUQ3MkQ4QzVFREYwNTcKKzoxMEVCNzAwMDYyOTc5NUUwQkY1QUU4RTNENUUyQkNEOTZBQTE4RjVCMDIKKzoxMEVCODAwMEQyMEJBRkI4QkZGMjhGRkE2MzY3NURDNkI4NTc4OTg4RkEKKzoxMEVCOTAwMDdCOUREQjY3MzYyMURENTdFRDA3QkFBMEJGQ0IxNTM4NkIKKzoxMEVCQTAwMEVCRTJGNkQ3OTRCOUI0N0E3RThFQjIzNTQxM0VDNzk3ODAKKzoxMEVCQjAwMDJFQ0RDRjAzQkYyNDhFN0Y2NzRBRjZDNEY1QUY0MEFFOUIKKzoxMEVCQzAwMDVENzJFOUZEMjA1NjIzQTMxQ0QwRTQ1Mjc1MTIyM0JCQ0QKKzoxMEVCRDAwMEFEREQxNUVEOEY3QzA0NzI0QTRBNEU0N0Y5RjQ1OENERUQKKzoxMEVCRTAwMDNFOTQ0RkNEMTY5MjRGQUYwRjM4NDE3RUY1Q0RCNUYzMjEKKzoxMEVCRjAwMDA5MkU4NzVEM0M1RTJCOUJCRDFFN0VDRUQ0QTg3NzBGNzEKKzoxMEVDMDAwMEE5QUQ5NEE3N0Q2OEE0Q0NGMDdFOTQ4QkRFNTE3NDlFNTAKKzoxMEVDMTAwMDM5MTEzQ0RGNDRCRjE5NjRENzdFOTQwRDIzQUZFRTc3RTIKKzoxMEVDMjAwMDFFNUE1NjQxRjlDQzg5QzYzQjM0Q0M0NjcxQ0ZGMjk4NzYKKzoxMEVDMzAwMDdCNzAwNzA5M0EyQTRCMTZGMEI0NzBGRkYxRUMwQjRFQ0IKKzoxMEVDNDAwMENBMkYzRTVCRjAwRUZERkRBMkIzOEQ3RjE4MUVBNEJGNDAKKzoxMEVDNTAwMEQ3RDU3QTNGRUVCRjA3RkZFQUEwQjg0Q0Y5QjA3Nzg2NjgKKzoxMEVDNjAwMDJGMjdCQkQ2QzdGRDM3RjE3N0MxQzZCRDc4RDg4NTdFQzMKKzoxMEVDNzAwMDc3RjlGNkZEREQ4MjNBRkNDNUZBNkQ2NTYyN0Q0QzY5NzcKKzoxMEVDODAwMEVCNEY3OUExQUY5Q0EyQkYxQjUzRkVEMjgxNkUzQzJFRUQKKzoxMEVDOTAwMDY0Q0M1Qjg5RjVEN0NCNkJBQjA4NkY1QUJEMzI2QTM1NTQKKzoxMEVDQTAwMEU0QUY1NDJBRkNEQzZGNjVENDQxRjkyQkFFNjRBMzNGN0EKKzoxMEVDQjAwMDlGMTA1RUQ3MDhDRkQ4RTcxQTNDMEYwRDNCQzVDRkFGRUEKKzoxMEVDQzAwMERCRTJEMzZGNERCMjMxM0UxQzdCQUUyMDUxRkVGQUVEM0MKKzoxMEVDRDAwMEEyREY0NUVGMTgzQTA3NUY2RTBFRjdCRDk2Rjg4MjA2ODEKKzoxMEVDRTAwMEE3RDcyRjJGQTBGMzBBMkYyNDM4QUZFMDRGRTY3MUY3RjQKKzoxMEVDRjAwMDE3MDZEQzRCNzlDNzYzQUMzNUE1QThCRkM3ODhGODY1OTQKKzoxMEVEMDAwMDlDQkNFMzdCOTI0NzYyM0VGMzNGMjdFRkI4NTJDMzhGMzAKKzoxMEVEMTAwMEM4RUIxRDgzN0M5Q0NFQkFFNDFENUZFRDNDQzgyNEJDQ0YKKzoxMEVEMjAwMDhGM0IwRTdGRERENDAxQkZGNzY3RTBCRDRFRjczRkExRkIKKzoxMEVEMzAwMDUyMUVEMDAyOTg0MzEwRTMyNjFCNTQ4QTlGMUVCRTZDQkQKKzoxMEVENDAwMDYxMThDRjNFQjk1RTdEMUFGMzU1MkE5RUQ4REZGMzMxQTQKKzoxMEVENTAwMDhDNUYwRkIzNTAxRUREODIwREZDM0UxMDM2Q0MxNkMyMDgKKzoxMEVENjAwMDNDOEQ4QTBEMEY2NjYwN0VFNDY3QzBCNzRCNjA1RTBCMUEKKzoxMEVENzAwMDlFNDhBNzNDOUVDMzJEOEY2NDIwOUU0RTA5N0VBRUY4MTAKKzoxMEVEODAwMEZBODdCNzIxRkNCNzlCREQ4Mzg3NDFCOTY0OUI2NEM4RDAKKzoxMEVEOTAwMDAzNUZCNEM5NjZBODZCNzk0MDFBRkU5OEQ0OTkxRkVFMzgKKzoxMEVEQTAwMDAxMzlGQTc4QjJGMTdDQ0JGMENFN0Q4NUM3OTM4NTNDRjIKKzoxMEVEQjAwMDlEMEVGM0FEMUE3OUQxOEM3OERDRkZBQTlERTZCREM3MTQKKzoxMEVEQzAwMEMxRUY1NzBCMEZGQkYyOERFQkExNUVGQUI1QTJEREFCRTUKKzoxMEVERDAwMDYzQzgyQjYyQjgwOTgxRjc5Qzg4RkNCRkQyOTc5NDhFRDgKKzoxMEVERTAwMEZDN0NFMTM3MzhDNkVCRjJBMEMzQ0I2QTg4NkY0QTdGNjAKKzoxMEVERjAwMEM1RkRFMjUyMUJDRkQ3NEQ5ODZGQzRCQUU0MzMwRjQwMjQKKzoxMEVFMDAwMDc5REUyNUNGQThGMzNDODRDMTJFRDFFOEE2MzE1OUU0QTAKKzoxMEVFMTAwMDFCMDlCRURFRkYyQUNGMkI5QTdGNDhEODkzNTc5MTlCQzAKKzoxMEVFMjAwMDZGRTJCQzE1QzREN0VCQjM3MERGRjFCMDgwQzZFMUNCQTUKKzoxMEVFMzAwMDI3NTdEMTNENDRBMzI1OENCMEIxOTM5N0UzRjM4RDU5NjcKKzoxMEVFNDAwMDkzOUY5OEJGM0ZBMDEzM0Y5M0JEMEIzQkVBQzg5NjUzRDcKKzoxMEVFNTAwMDQ3REY2NzM4NTc3MEVERjJFNkNBRjJBNDM2OTk5RkJGRDQKKzoxMEVFNjAwMDhCOTVFRkIxNzRGRjdGNEFCRTk3MEYzQkQwMUJDRkM5ODQKKzoxMEVFNzAwMDQzRjk5Rjc0NUU3RTNCOTc4RkIxN0MxRTJCQ0Y2RjhBQzgKKzoxMEVFODAwMDkxODM5RDcyREM2NDkwRTMzNzA5N0RERTI5Q0ZDRDI0MjgKKzoxMEVFOTAwMENGQzEzQ0UzRjdCNzE0MkFBMTk1MTJGOTNENUZBMEJFOUMKKzoxMEVFQTAwMENFNzc3OEQyOEFBMUNCMkE3NzZFNTJFMENBN0VFODI1NDcKKzoxMEVFQjAwMEU0OTM3NjVCRTA2QjJDRkJGQzY2MTBGRDVEQ0ZDMURCNjEKKzoxMEVFQzAwMEVBNERDOEJGRUQwOUVDOEZGRjBEMzlBMEZDNzcwMDgwM0IKKzoxMEVFRDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJDRDdEMkIKKzoxMEVFRTAwMDA5N0M5NEQ1QjVGOEZERTY5QjJEQzk0QzMyOTlFQzJCRTUKKzoxMEVFRjAwMDEzNzYxNTcwODAxMDEwQTI3RTQ5MDBBMzEwMUM1MDAxREIKKzoxMEVGMDAwMDM1RTgyNDkwODQyRDI0MjA1QUZBNkE1RjI2MjQ2MEM0QjAKKzoxMEVGMTAwMDY4NDNCNThBOEE3NjUwRjA1MTQ1MEQ4MjM1QjY1MTI3M0YKKzoxMEVGMjAwMDgwMTRBQzRCQUNCNkE1QUQ2MjEwNDQzNjI1ODJGQUE3NkUKKzoxMEVGMzAwMDdEMkFFRjlDNzNFRkNEQ0MzNzk5QjBGNEY5N0VCRjdGN0IKKzoxMEVGNDAwMEZBQjM5N0ZCRERGREVDRTdEQzY1NjY0NTFCMTgxQkMzRDgKKzoxMEVGNTAwMEQ4QjMyNjM2QkJENTA2QTkwMkU5MzBDNkNFRTJERkQ1NDYKKzoxMEVGNjAwMDhDQzUzODBBNjY0NTI3MzFCNkRGMEEyOUQ0NjNDQ0VBNTYKKzoxMEVGNzAwMDM4MzQ5NEIxNUM2NjYwNzEyQTYzMjU4QTM3QzYwMUU1MkUKKzoxMEVGODAwMEQ1RDZBRTA3Q0FBMDc0Qzk2RkJFMzU0MzExREIxMEVERUMKKzoxMEVGOTAwMDREMzUyNjMyRTY0QjM3QkIzN0U1MDRGQjkzNjk5MjAzQzgKKzoxMEVGQTAwMDJBNDFCQkZFMkIwQUQ5QzEwNEM2MkM1NkU2OEIxQUM1RDIKKzoxMEVGQjAwMDk4NjI2NDNFRDMyODFDQzdCNUQyMDBFRDhENEQ4Q0FENTAKKzoxMEVGQzAwMDgxRjZCMTc2NDZGMzY0NDM1MzBEMkM5OUIxM0JBQzhDN0EKKzoxMEVGRDAwMEZFN0M4NTBDMjdDMzdDM0JBMkZEMEQwQTYzREYzMzJEMkQKKzoxMEVGRTAwMDAzRTdGMzAzRDMzMjFENTBGRjIzQTY2NTYxNUU4RURCN0EKKzoxMEVGRjAwMDI4RDY2OTM0MzBFRjU2NUJFRjc5Q0Q3NDI4N0MxQ0U2NTcKKzoxMEYwMDAwMDE5RUM4MTMxMkIwQTk5MzcxNDFFMzIyRDcwMThBOTVFMjQKKzoxMEYwMTAwMEMxQzMzNzY3Nzc0MUY5NjcxREI3NjQzM0U4NkZEN0FGNkUKKzoxMEYwMjAwMEM2QzY3NTQ1QTgyRkQzQjU3NUI1RUU4OUQwRjRGRTNBOUUKKzoxMEYwMzAwMDJGQTVGMThDNjkzODlGNUZENENEQTdCQzEzRjI1QkExREIKKzoxMEYwNDAwMDdEODVEOTMzMzgzRUE0OUY4MThFNzg4Mjk3QTNFMDRGODcKKzoxMEYwNTAwMDlFMDEwMDk3NDNDREFBNDM3MTQxQ0EwQ0M1RDhGRUEwQkEKKzoxMEYwNjAwMDNGQUU3OEJCNjg5N0E4NkJDN0U3QTkzMjhEQjEwMUIwRjYKKzoxMEYwNzAwMDZFOUJGMTVGNUQwMjc2NjcxOUFFOTc1MUJGN0RBRDczRjAKKzoxMEYwODAwMEE2ODNEMzg3OTlCOUFERDhERUJDRTMzQTJCRTI1NzU1QjYKKzoxMEYwOTAwMDM0MDdFNjI1M0Q1QzAxMjMyMDNEREM4MzlGQUU2MDZDOTgKKzoxMEYwQTAwMEI0RTJGNTM4QTg5RDk2MjBDQkNGRTZFMEY4QzU5NDk3NUEKKzoxMEYwQjAwMEUzQjM0QzU4NzE1QURGRjA2MjhBNzYxM0UyRUYwOEQzNUIKKzoxMEYwQzAwMDY2NjI3RkFENjY3Njk5MDNENkRCMUFDREU2NDc5QTZGMDYKKzoxMEYwRDAwMEE5QzA1RkJBNDNEMDBCQjMzOTBFNUYyNkM2ODNGOTlEMzIKKzoxMEYwRTAwMDhDRDE2RUM3N0VEMkEyM0M2NUQ4NkY1RTQ2QUQ2QTgyNzcKKzoxMEYwRjAwMDI2QjNBMjFEQTJCRUE2Nzg4NjUzNzkyNUQ2NjNBOTlBMDcKKzoxMEYxMDAwMDUyMDJGMENFRkIwNEU4MTBCMkRCRjYxNDJBMkUxODNGQjAKKzoxMEYxMTAwMEIxNzNBMkUyODJGMTEzMDVGRTdBQ0Q1RkMwRUQyNUM2ODAKKzoxMEYxMjAwMDhBMjNDRDczNTYzNDlGRTc1MjAxRkZGRDU2MEZGMUQ3NjYKKzoxMEYxMzAwMEVBMUM2RjZBMkRGNEU3NkE2NTlBMUZEQUI1RTI5NDQyMTkKKzoxMEYxNDAwMEUwRjM5NkMzNENGNTM3NDQ3N0Y5NTRBNEZCNUI5ODdCMDYKKzoxMEYxNTAwMDEzRDA0MTRBQkU0RjMxNDI5QTMxQjVBNTAwMzBDRTFBODQKKzoxMEYxNjAwMDFDNEVFQURGNTlFQzRENTVBMDVFN0FBQUQ5QUQyQTE3OUMKKzoxMEYxNzAwMENFNkZDMzVBMzVENTBCRTNFNzdBMEQzNDhGNzU5REJFM0MKKzoxMEYxODAwMEE4QzEzMEFGRTQ0RTZGODExOUQyQTJGODY0RUEzRjg1N0UKKzoxMEYxOTAwMEQ1RDYyMzNFQTAzRDQzQkUxQ0VERTBGRkNDRjUxNkFBMUMKKzoxMEYxQTAwMEFFMTBCOEU0Q0RBQjZEMzBDM0Y3RUZBM0JENkI0M0Y5NDAKKzoxMEYxQjAwMDMxNjNCMThGQzYzOUFBNzhGQjM5ODE5RThFQkUxOTNENjUKKzoxMEYxQzAwMERCOEZGRDA1OUM0NDQ3QjJERTUzODhENzI0QTQ4N0MyNTkKKzoxMEYxRDAwMDc0OTYwQUZENkYzNEQxQkM3MjM3RkVFQTM2RTRGRkRDNjgKKzoxMEYxRTAwMDhERDcxODk1MTAzOUYzOEFDMzQ0RjU4RkJFQjlCMDFGNzcKKzoxMEYxRjAwMEFFREZGNzM3MEIxQjE0NDEwRUJEMjhFOEU1NjE4MTg3QjAKKzoxMEYyMDAwMDZERTZDODc0RjU5QzFDNUZEMEZCMDRBNjQ4RjlGNzlDMUEKKzoxMEYyMTAwMDkwN0ZCMTAzNjA3RDRCQUE0RjkxRkM2Qjc2QjhBOEZFM0UKKzoxMEYyMjAwMEUzQzZENkRERTkwMEQ3QzdFNzMxQjcwRjNFMkREQ0JDMUEKKzoxMEYyMzAwMDQxQzFGNTZFMzNCNzVFQkIwNUU3QjVDNEMwMTA3RkJCRjcKKzoxMEYyNDAwMDc2RkY2RTc3M0FFNEU3Q0Y3MzhEQjRCODQyREFCRkZENEMKKzoxMEYyNTAwMEVDNkFGQ0ZFRjg3QzM2MTJFMTlBRTY1RkFCMTgwMDNFRTEKKzoxMEYyNjAwMERGNDZCNUQwQkFCRkRENjQ2MUY1MzBCNUM3MzczRTkyMzEKKzoxMEYyNzAwMDZDQzc3QTVFODMwM0VCRjVFMjIzNDBCMzIxMTVEMzgwOUMKKzoxMEYyODAwMEM5MzA4RUUzMTFFNTk1QzQ5Rjg0M0JBRTFGRTVFMkFFMjUKKzoxMEYyOTAwMDREQUZEMEJDRTU3QzgwNTBDQzA4RjdBMjc4MTdDMTZCOEQKKzoxMEYyQTAwMEUxRTZBREQ3MjJGMUE3MkY3NjJBNkE0RTcwNUVFNzkzOEEKKzoxMEYyQjAwMEZCMUYwQUJFQjg1MDNBN0MzMzlFRjMzMUM4NzkwREM3QTQKKzoxMEYyQzAwMEYzRTUxOTQ5Q0U3RjYyRjNGRTFERTEzRUNDRTY0QTI4MDQKKzoxMEYyRDAwMDgwMjkzNTNBRkFDNzc4NjFGQzdFMDNEOEVEOUUwOEZDOTgKKzoxMEYyRTAwMDc4QTlCRDcwM0ZENjNGMTlFNTNEODA3Q0RERUZCOTRCNzUKKzoxMEYyRjAwMDI3QjI1OEM2MkVEQkQyNjI0MDdDOUM1NEI4NUVFOENENjMKKzoxMEYzMDAwMEE3NDIzRjBBQkQyOEY1QTQyQzNGMjlFOEUyMEVBMTI3MTkKKzoxMEYzMTAwMDIzRThDNzkzOTFGNEEzOEJCOUVFMUIwNkY4NjI2RjFCMjkKKzoxMEYzMjAwMDg4N0ZDM0M3NUQyQUU4NzI4MkU2MkQ0MjdFOUUxREUzNzgKKzoxMEYzMzAwMDNEODNGM0JFNjI5QzdGQTcwQUY1QzcxNkZCNzYyMkJGMEEKKzoxMEYzNDAwMEU3MkFCNTNCRUQwMDE3NzYyRDk3MDMwOTVEQUMwMzk2RDAKKzoxMEYzNTAwMEM1RTJGNzc1NjlCMTkwOUY4QjcyMDBDNjFGN0Y0NEVCQzEKKzoxMEYzNjAwMEMwRjFFMjNDNENDMUY2Q0YyMjlEQzMzQTVBOUNFQ0Y2NjgKKzoxMEYzNzAwMEU5MTFFOEZEMzZCMTJFQzM0M0RENjZENDY3ODlFRDBBOTUKKzoxMEYzODAwMEYxNUI2RkY4NzA3OTA0RjIzMjI2MUVFNjk3RDcwRkU0MkUKKzoxMEYzOTAwMDY5NEU2Rjc5MUEwMTdGQ0U3ODY4NzdDOTk2QzAwRUFDMzYKKzoxMEYzQTAwMDM1MkE3RTYwMEMzNDNCMTdGRTkyRTMwOTdGNUEwQThFQTEKKzoxMEYzQjAwMDIzRjE3NUU5NTlGNTc2Q0ZCMERFRjhDQThFRTdGM0JGRDEKKzoxMEYzQzAwMEQzQUU2NTYxQkJDRjg0M0VFODBCOEZDM0UzMzlGRThBQzEKKzoxMEYzRDAwMEUyQjk5REYzQUM1REQ0OEJEMkQ3MkI4QkU3NzhBOTg4QUIKKzoxMEYzRTAwMEQ3Q0I4MzEwN0MwRjhGOEY4MDZGMjlDN0I3RUQ3OTQ5RkEKKzoxMEYzRjAwMDQ1QkNFNTRENkM2OTQwM0MwMDVFNDdFMzdBQzZFN0Q3MDMKKzoxMEY0MDAwMDM2RTBGNzg0QTk1QzFFODZFMzU1Q0FDMzcwRkM4NkUzMjgKKzoxMEY0MTAwMDk1QjE3QTlBMUZFMEUzQUFGODA4RkE0QkY2MTNBRUM3NDMKKzoxMEY0MjAwMDQyRTQwNEFENkI5REEwNEYxRkQyMjdFM0ZBNjg4MzJEMDEKKzoxMEY0MzAwMEI4MEVDOTNGQjcwOTc4NENGMDdBOEJDQzlDNEU0QjcwMTQKKzoxMEY0NDAwMERDMkI2NkZCNzc5QTkwNEVFN0ZCNzY5QTQzRTk3NDAxRDIKKzoxMEY0NTAwMEEzRkVFNDNDMzJCQTdDQjQ5RUI0N0RERTAyNENDNzFGRUUKKzoxMEY0NjAwMDA5NzQwQzgzN0EyOUI1QjAxRTE2NUM0RjU2RTc4NzBBREIKKzoxMEY0NzAwMENBQUJBQ0RBNEU4NUExRkNEQ0IzODNFNjlERDlCOThCNkYKKzoxMEY0ODAwMEE3QTg4Nzg3RjVENkI3OENBRDE0NzRDOEZCNzkzMzlFQ0YKKzoxMEY0OTAwMENCRDVENTVGQ0M0RDQ1QkE1OTVEQzBGNUVEMkFCQjU2RUQKKzoxMEY0QTAwMDhFRjNCRUMzQTFDRDQ1RkNBREIzNkJGMzMwM0YyQjlBQjkKKzoxMEY0QjAwMEVCODVFMUYxNUEyNTdFQ0ZFQTQzREYyRjExNzAwMEI4Q0EKKzoxMEY0QzAwMDU3NjNCQkM0RTVDQ0E3QzAzQUM2RUVCM0Y5NDE1NTAwQkIKKzoxMEY0RDAwMEU5QzNCQzYxNDE4OUI1M0VDNTBDNzA0REQ0OTgxQkU1QUMKKzoxMEY0RTAwMDc0QkYwNDZGQkQwOUVBNzU1RkMxREM0RjQxM0VBRUQ0MDUKKzoxMEY0RjAwMDUxODBGMDcyQ0U3Nzc3MjAzQzU3N0ZBMTkyN0RCQjdBMDYKKzoxMEY1MDAwMDI5RjNBRkE0N0UxOEZGM0Y2RjdGM0ZDQTU3RTRERjUwNTcKKzoxMEY1MTAwMDdFRjE4OTc5RjhFMjM5MUY4MEJERjNGMzc4Q0U5Rjc1Q0IKKzoxMEY1MjAwMEM0OUZDMkRFOTE3Q0Q5OTdGRDEyQzJEN0FCMkY5MkFGOTgKKzoxMEY1MzAwMEVGQkY0OEJFNUUyQkY4RkE5Nzk0OUU4N0FGMUYwREYyN0YKKzoxMEY1NDAwMEY1M0E5Q0Q3RjlGODdBQjNFMEU3MzcwNTdGRjdDNUQ3RTYKKzoxMEY1NTAwMDdGMTA3MDdCMjdCRTRGM0Y2NzMzOEVENzVCOEU3M0JBQTkKKzoxMEY1NjAwMDkzN0NGMUQyOUU1MTMxRTVEMEVGNEUzMUNGMTBGOURERDEKKzoxMEY1NzAwMDhBRUIzQjlGRkNGRTM3RjhGQ0Y3RDhFRkY5RUM1NEQ5NDcKKzoxMEY1ODAwMEFGQzRGN0Y5Rjg2NEI4RDM0M0YwOTJGNjY4QUNERDQxNDQKKzoxMEY1OTAwMEVCOTE3QzBGRkNCMjQ3RjBDQjVFQzEyRjZGNjEzQTJCMzEKKzoxMEY1QTAwMDlBREIwN0UxRkNENUEzRUYzQUI5M0MwMTRGMjYwNkU5MDcKKzoxMEY1QjAwMDQ3OEU3RkE0MzdCQ0ZFMTIwOTVFNTk0Q0MwQUI5OENCNzYKKzoxMEY1QzAwMDkxNENFNjUzNjNCMURGQTkwRUNBM0I0RTM4RUFEMTU1RTAKKzoxMEY1RDAwMDhDM0RENEVENDNCODdEMUJDRkZEQ0M1Qzg1NzkyMkQ5MjEKKzoxMEY1RTAwMDc1QzcwNDlGMjQ3NjE2OTI3QzAxNzgxRUMyNzEyNUJERDIKKzoxMEY1RjAwMDI3MzJDNzE0RjQ3M0EyOUM1QzZFOEMxRUE3RUQ0NEI5MkQKKzoxMEY2MDAwMEU0RDAzQzJBREExQkI5NEVDRTBGMTI0RUQwRkU4QjQ4MDYKKzoxMEY2MTAwMEY4RDg4RUY4MThENkRCNkYwOEM3QzNBNzYyQkU1MTRFNjQKKzoxMEY2MjAwMDBFOEZGMEZFQTVGQ0MxRkU4NzUzRkYyRTAzRjYyRkRCRTUKKzoxMEY2MzAwMEZGMTA5NDQzREYyMzdFQzYyRUFGNTU3MTVEODk0QzhCM0UKKzoxMEY2NDAwMDQxRjkyM0U1MjRDQjg0RjZCOUJEREI5QkM0QjhEMERFRjkKKzoxMEY2NTAwMEU0ODQ3NDZDMkRCNDFGMTY2QzlGQzUwMjBBQzJDMzM5QjIKKzoxMEY2NjAwMDFGRTQxNDQzRkJERDRERjY2QzlCRDU2MzczMTJCRDMwNzQKKzoxMEY2NzAwMDJFQUYwQTBDMjQwRkE2RDkzNEUyQTc0OEZBREY3OTkxRkQKKzoxMEY2ODAwMEZBREYyOUY0QkZGMzQyRjRCRjMzQThGRkIxOUQ3MjNFMDUKKzoxMEY2OTAwMEZEMkZFQThGNzA5RTVCNEVCODdCRjAyMkUzMDRCREY1MzAKKzoxMEY2QTAwMEJGMzM4MkZFREY2RkQ1QThERjA4N0MzNDEyRDcxM0UzQTcKKzoxMEY2QjAwMEQwNDY2MTBBN0MzNERBOTkxNEQ0M0JEMDZFMEM3RTZGNEMKKzoxMEY2QzAwMDEzRUQ5QkE3MUE4NjkyN0RDREEyREQ5MUZDOTk0MkE3RUUKKzoxMEY2RDAwMDREMzdBRjJCODU5RkMyREFGRkZCQjdGRjkxQzc1ODBEOUYKKzoxMEY2RTAwMDE2RjE3OTE2M0E0M0ZDOTYwN0E3N0U5QUVDMjUzRjhFRDEKKzoxMEY2RjAwMEU5RTIyQkJGNUVFOTdFNkYwODhFRjdBRUNBOTBCRjdFNEYKKzoxMEY3MDAwMEZEOUY1RDY2ODQ3NzZCNzRFQzA4MTYxNzFDQjdFNjVGODcKKzoxMEY3MTAwMDQwNTg2MENGOUZGQzk3ODE1Mjg5QzcyNUVEQ0E2ODA2ODMKKzoxMEY3MjAwMDBDNTlCMEYzM0I4QTkzOUNFQ0Y4MTdDNTQ5MkVCNTk3NUEKKzoxMEY3MzAwMENGQzA3NUVEN0E4REM3NEI0RUJGN0REMDg5NzQyNEM3N0QKKzoxMEY3NDAwMDVGMjZGQ0M4NDlFQUIwRDYwMEQwRDNBOUNENjYzN0ZBMDcKKzoxMEY3NTAwMDIxMkE3MzNEOTIwRkYzQTlEOTYzNjI3RTkyODNDQzhBRUEKKzoxMEY3NjAwMEY1NEQ3Q0JBQ0NCNDc5NzVBNzFBOEI3OUEzNEZDNDM5RkYKKzoxMEY3NzAwMDk0QjNBNEVGNUM3MTQ4OTdBNjNEMkFGOTE1MkM5MTk3OTQKKzoxMEY3ODAwMEQ3MzI2QkZERDlGRTIwNTdDNzE5OTgyQjI0MkUxMkFGMDQKKzoxMEY3OTAwMDQ1MzM1NzQ4OUMyMkExRDhBOUNCMzM4Q0E3QzBCODhCM0UKKzoxMEY3QTAwMDE4OUY2NzkyMjc1REQ3M0U2NTc2N0Y1REZEMzRFRkE1OTQKKzoxMEY3QjAwMEJBRjI4Q0Y5QTM3NEY5QUNEQUYxQkFGQUZEQzAzRjBBRDcKKzoxMEY3QzAwMENERTdGOEFFRDNENTFGRDAzNDQzOTcxRkQ0NzI4QkFFOUMKKzoxMEY3RDAwMEZFRTdBQ0Y2RTE3QzVDQjc0RkVCMUMwOEYzOUMyN0U2MzgKKzoxMEY3RTAwMDM5NjQ1REI5QUVEREE1ODZENjNDRTA2ODM2MkZCMDcwRDEKKzoxMEY3RjAwMDJBMUIwMUZDRTg1RkE4RUJFN0Y4QjNDNTdCMTRGOENFNDEKKzoxMEY4MDAwMDVBNEM4NzM4QkM2QTE5QzI4QkQ2MEZGMEFDNkM1M0Q4RUYKKzoxMEY4MTAwMDYzRDBCRTZBMUQyRjk3RURFNkI3QUY1RDlEMDFFOTAyOEIKKzoxMEY4MjAwMEJGRkUzQjYzN0UzM0NBRkQ0NTlCRjVERjFGNzREQTEzRDEKKzoxMEY4MzAwMDI5NEU5M0NFRDJDRkFBOTFFOEMwNDZFMzlENUFBRkZBQTMKKzoxMEY4NDAwMDJEODAzRkQ1MzcyNDhDMEVGNEY4NjBGRjRCQkE3MDA5MzkKKzoxMEY4NTAwMEJBQjBBNEVBRTkyMkNBQTVBNzhCQUFCRERCRjIwMkFDMjIKKzoxMEY4NjAwMDM3OUM2Mzg2M0EyM0MyNTFDMkQ5RUVENkQzOEI4NDJGRkMKKzoxMEY4NzAwMEU4QzlGRjEzRjhCRTgxRjA4RDA5QzIzNzJEQ0FCQjAzNUEKKzoxMEY4ODAwMEY5RUY3NERCNzI5NUUxNzg1RUVGNjg2Q0Q3OTdGQzlEQjkKKzoxMEY4OTAwMDYyMkZEQzhERjJFMjc0REJEN0I3RUQ4MEY1RDVDNDcwNTIKKzoxMEY4QTAwMEZFM0ZCOUUzQkJDMTI4REY2NEJERUI1Njk0QkIyNzhFOTYKKzoxMEY4QjAwMDA2RTAyQURFRjdCMDdGRjlCRDczRThEM0NEQTM2MDNENDMKKzoxMEY4QzAwMEE1NkQyQUYxRjE0OUEzQUQ0OUI5OUM5NkU5NzIwMERDMTYKKzoxMEY4RDAwMDk0MUVCQzcxM0M0QUJDMjlFRDNCRkZBOTAwREUyQzMwRDQKKzoxMEY4RTAwMDQzMTNDNjFCQzdCOUFEMzg0RjhDRjQyMUJEMjg2MDg3QzAKKzoxMEY4RjAwMDlFOEQyMTdERjIzMUNFQ0Y1N0E4MzE4QUY3RkM4OUI5OTAKKzoxMEY5MDAwMDFCQTA1NjgzM0RFRkIyRjNDNDA1MEUzODQ5NUY3QTFCNDYKKzoxMEY5MTAwMDUxQkU4RUVERjQ5RURFODJERDFCM0IxRDE4RkY5REUyODUKKzoxMEY5MjAwMEY1RDI3QTJFQzcwOTgyRkRDNDFDMDAyNzdCQjAzREI0RjYKKzoxMEY5MzAwMDNCOEVFMzRFMjk3MEM2QTBCREI1NzVENzMyRjJERjU4QjUKKzoxMEY5NDAwMDdCMjJEOTgzNDgzMkExNzY0RUI4OUYyNUVENDZCMEQzQUQKKzoxMEY5NTAwMDRGRjE3OTc4QkU3Njg2REFFOUMyNkU5M0Y2NzY1RkZENkUKKzoxMEY5NjAwMDgwN0UxRDhBRjY0MTVGQTlCMjQzMUQ2QTA0Qjg3NDJCREMKKzoxMEY5NzAwMEQxRUVBNzIyRTgwRDRCODJERTlGQkQzMjE4REZCMjI0MDQKKzoxMEY5ODAwMDg0RTg4OTI1Nzc5RURFOERGQTAzRTAxRDlEMDBGM0I0OUYKKzoxMEY5OTAwMERCNDE3RjJCMTdBNEJGNjNCMUZFMjMzMUIxNDREN0REMTgKKzoxMEY5QTAwMDdCNTVGRjEwNjg3MENBRUE4QTczMDJCQ0YyNTE5RjVDRjMKKzoxMEY5QjAwMDRFNzEyMDk2RTEwQ0I2QUJCNUE2MEYzMzgyM0VDOTNGMUYKKzoxMEY5QzAwMDM1MzQ4RTlEMjNBRTlFOEZGNTQ2MDdGM0VENTE0QzY3N0YKKzoxMEY5RDAwMDE3QUMxRUM1RTdFNTEyRUIzQzEwQzVFREFDQjEyMjVGREMKKzoxMEY5RTAwMDEzMTY4RkFBNjlFMkYxRDcwRDY2NjBCNTkwN0VDNjI2MjAKKzoxMEY5RjAwMEQ4NzlCQ0M3NUEzMDE2RDdCMzQxQzRBMTU3RTcyODY0OTkKKzoxMEZBMDAwMDI3QUM1NjE0QjIxQjc2REEwQUE5RkM5MEIzMjAwRkUxOUEKKzoxMEZBMTAwMDc3QjkxODY3MkM4QzgxRkFCOUE1QkY5ODhGQjBDNzY0RTUKKzoxMEZBMjAwMEZGRERBMjdFQjdCMzkwRDJCMTA5MEU4MTE3QzdBNTg4QkEKKzoxMEZBMzAwMEZGMEFBQjQ2RkQ5QTU1MzUyMjlDRjMxM0I4RkQ1MzEzQ0MKKzoxMEZBNDAwMENEQTQ5RjQ2RkMzNDQ5RjBENzY0MjE0NzhCRUMyMDQ3NzYKKzoxMEZBNTAwMEI5MUYzODc1MTI5NDVGMjVGOTRGQ0RGRkQwMENBNDNCMjgKKzoxMEZBNjAwMDI5Q0VDNDMwNUU3Qzk1OTA1N0VDOENGMTUzOTQyNzBFRDAKKzoxMEZBNzAwMEY4MUZDQTI3NkRBODYzMTc4Q0M0MEE5OEU5RDM1MDM5QjgKKzoxMEZBODAwMDUzQzgzQUQzOTEzRThBQUNGQUVGOTNCNjRGM0U4QUYyMEUKKzoxMEZBOTAwMDZGMTIzMzA2QkZFNzcwNzhDNzM4ODM3QzcwNjM0MjhGN0MKKzoxMEZBQTAwMDFFQzg0NDM5RDUxNkRERjVDQjI5RTgxRkJGQTNCQTlGODAKKzoxMEZBQjAwMDYyQkRENzVCOTFDMEVEQjA2NkI0QTM2RDA0MkEwREUzQkYKKzoxMEZBQzAwMDk3RDk2MjFGQTU3NzdEMEU5RjBEN0RDNDc5MkJBQzA1NUMKKzoxMEZBRDAwMDczMTFCRUFBREQ1MzgxMjlCMEMzQTVDOEVGNkQ2NjZGNEYKKzoxMEZBRTAwMDAzRkExREREMkYzMzlBQzc1MDNGREI4MUY5RTEzRTE3NDIKKzoxMEZBRjAwMDJFMTdGMEVGOEIxOTgxNzQzREQyNDA3RUJDNkI1RENCMkQKKzoxMEZCMDAwMENFMjgyODc3QUQ1NzlDMEFFNDRENDZFNkIzOEYwQUNBNDMKKzoxMEZCMTAwMDkzQzY4NDFDOUE2QzczNTdGOTBFM0I5NDI3QUQ5RkFFMjUKKzoxMEZCMjAwMEY0ODdGOUI0QjA5NkEyNThCNEI3RDZCMzg4NzFDMTNBODUKKzoxMEZCMzAwMDQxNDc1MzBBNzY1MDdDM0RBOTFCRTgzNDAyMURENDI1NjkKKzoxMEZCNDAwMDE4QTQxREZGOUZCODhFQjFERERFRDE0QUZGQTAzQzIyNzQKKzoxMEZCNTAwMDUxOEI3RUQzMkU4MzNGNTI5Qzc2OUFBREE4MTFEQjBEM0MKKzoxMEZCNjAwMEY3QjM4ODcxQkY5QTY4M0U4RjI2QUI2NzBERDJFOUYwNzQKKzoxMEZCNzAwMEVEMDFGMjg3QUFBNDVDOUY2NzYwNDZBMEFCMUI4NDFDQzIKKzoxMEZCODAwMEJGNjE3REM3M0ZDOThFRjhFRUVDNTk1NURBQTE4Q0ZBRkEKKzoxMEZCOTAwMDY3Mjg5N0FBNkVCNEZCMzE3RTVGRDU5RUUzQTM3OTc5N0YKKzoxMEZCQTAwMDE0RjcyMDQ4NkFEQURGRjc2MEJFMkEzN0Q3ODE3MTY2MUEKKzoxMEZCQjAwMEVERUY0QzM5M0M5NDRDNThDNkU1OUY5MTFEOTY3QTk2RDIKKzoxMEZCQzAwMEVDMDY3NDhBMTg5QjIxRThCOTA2RkREMTI0RDIxRkNEMUEKKzoxMEZCRDAwMDMxMDBGRkFBRjVGNTNCRDJBMEJGM0YzRjBEN0Q0MEQxREMKKzoxMEZCRTAwMDNFRDVCQkVGNjdEMEVGNERBMEM0NTY4Q0MyRDRDODRBRjcKKzoxMEZCRjAwMDI5MEU5RDRBRkREQzI4RkFGMUZEMEJDNkI1MDZDN0JERUUKKzoxMEZDMDAwMEE5N0QyRkFENjc5Rjg5RjlBQzQwQkZBNjQyM0VCNEU5RkMKKzoxMEZDMTAwMDNGRTJGQzBEMjgwODk5OUZFODZDQTZCNTY1MTJFQUQ3NkIKKzoxMEZDMjAwMDkzRTZFRTExNkVCNDdGNUZGQjZCOTYwRkUwRkZGMUNGQjIKKzoxMEZDMzAwMDRGREJEMTJFRkVDNEQ4NkRDN0VGNDdFRUZFQzBBRTAxM0MKKzoxMEZDNDAwMEZDM0VCRTVCMkQ0Njc4REYyNkY0OEQ4NDc3ODdDMDdCMzMKKzoxMEZDNTAwMDQyQTJBNzBERjE3MjdCRERGNzc5REUxMEJDQjMxNTQ5MjYKKzoxMEZDNjAwMEM0M0YwQkZDMzBDMzEwQkI2M0QxRTYxOEI0ODQ3QUYyRjYKKzoxMEZDNzAwMEQ1QUQwOUJBQkNENDFGRDUxNjU2MUIyOTBFRjQ4REUwOUMKKzoxMEZDODAwMDk3MDU1QjM2OTgzMzVDMzhCRUY3MkQxQ0ZGODg5MUQzRkYKKzoxMEZDOTAwMENGOTFFRDc2QkYyRjI3Mzg5RkYyMkQyM0NENjg5NzdDMkIKKzoxMEZDQTAwMEQyNkU2MTAxRDQ4M0M2NEUxM0IzNzEzOUEzMDAzRDc4N0YKKzoxMEZDQjAwMDA1REVDM0U3QjlGQkY1MThFQUFGRTI1NzVDMkU5NUMxNDQKKzoxMEZDQzAwMDU4MkIwMEFFREVGNjA1MjQ3RkMyRDc1MUYxQjE2QjcyMUUKKzoxMEZDRDAwMDBBQzBCQkUyNUU4NUUxQkUwQUQ2QkYxQkYwRTY1RDcxREQKKzoxMEZDRTAwMENGNTc2OEU3ODVBRkIzQ0NBNzk3NDc3MzlCRjQ3OTI5QzMKKzoxMEZDRjAwMDI3QUIwNEJFRTczMTc3MTNEQUNGMTUyREZBN0E1NUVEMkQKKzoxMEZEMDAwMEY3NTFGRjU1NjE3MkVDNzg4MkIwQUZGMkQ4RDhCMzYwOEEKKzoxMEZEMTAwMEE3MzREOEZBQzc3OUNGQTFBRjRFRDQ4MTVDMUZDQ0Q4MTUKKzoxMEZEMjAwMEIxM0EyQkE1NDdFQTE4QTU2RDA5MkU4MkY3RTJGNkY3M0UKKzoxMEZEMzAwMEVGNDJCQTU5RDJCNkQ1OENGRDM0RkEyNzM5QzY0MzE1RUQKKzoxMEZENDAwMDRCRkJDRDBDQkY1QjcwNUYxNTlBQ0VDMTdENTU5ODI3REMKKzoxMEZENTAwMERBM0E4OEZGRDE4QUU3N0JFNDQ3OTMyMzZDOUY1NUFDNUUKKzoxMEZENjAwMEFGNTRDMDlGRDlCODVENTE4QUVCMTk4MURGOEQ1Rjg3OTEKKzoxMEZENzAwMEFFRTdENDlFRDE1NjFDRDc5QzI4RTRGMTU4NTg5NzdBMDgKKzoxMEZEODAwMEUxRUI5MkVCOTFFQjkzRTVENTJBRDA1OTg0RjY5MkJFNDQKKzoxMEZEOTAwMERCMDRCRENEREIzODdENzUzQTgwQTJFMUI1Q0ZCM0JCQzYKKzoxMEZEQTAwMEI4NUY0QUY2QkM1MUUwQzc2ODVCNDNGNkJDOTE4MUJEQzEKKzoxMEZEQjAwMENFRDcyOUVDNzlGNjIxRjJBREE0QjM3MDNBQUE0MjM4MzUKKzoxMEZEQzAwMDUwMDA4N0I3QjMwQTNCQkY4NzdFREFFRjI3Nzg0ODNDRkQKKzoxMEZERDAwMDAzN0ZBNDhBN0RCMzU0REMzNzAzM0EzQTE0NDY0N0JBMEEKKzoxMEZERTAwMDdDNDU4QjNFRkZBNUE5MkIxQkY5MUJFOEU1NTAyODdDMjEKKzoxMEZERjAwMEJGMEMzQjY3MjFEM0E0QzRGRTA0ODc3OTJFNkRCMjAzRTgKKzoxMEZFMDAwMENBMkI5ODY3MzVERjVGNkQyMUI4MUMzMUI2RUNGRTE5M0YKKzoxMEZFMTAwMEYyREQ0NjRFRjc5RjA4QkNGRjMyRDEzMzIxMTFGNTk1MzQKKzoxMEZFMjAwMDUxMUI4MUYyQkQ3MDY1OUE5QTA4RjVDQTlBMTUwN0YyQkUKKzoxMEZFMzAwMEQzRENDNjkxOTM5MTBGNDczMThERkE5QjkzMTBEOTRFMjUKKzoxMEZFNDAwMDlCOTNDOEUxNUY1RTZCNjI2NkIwRUZDQjYxMEM5NDZCMTUKKzoxMEZFNTAwMEU1REI1NUUyNzNBMDIzNUIwOUUwNjFCRUMwNDNGNUJENUQKKzoxMEZFNjAwMDVCQ0Q2OTkwQ0VBRkFERTI3NjgyOUZGMzBCQzA5NUVDOEYKKzoxMEZFNzAwMDg0ODVDRDFENjZBNDU3RjA0NzIyRjI5QkQ0MDNENUFERUYKKzoxMEZFODAwMEZBRjIxQUQ2NEM3OEE4NDEzRTkzNzQwQ0UzQ0Y0RTE0ODQKKzoxMEZFOTAwMDdDRTY2NjZFQTQ0N0VGNUQ3NkFCMTI3N0ZFRjVCMkRFQzgKKzoxMEZFQTAwMDcxMDU4QTNCOUNEQTMzODhFQ0NBNTMyRTU3MEFENkYzODUKKzoxMEZFQjAwMDAyQ0UzQkQxNUUzNjdBQzdFMjc3ODAxM0U5QTNFRUZBMzEKKzoxMEZFQzAwMDE4M0ZEQUNEMDdDRTgwM0Y4ODM2OUNDMzNCMTZFREE0QTEKKzoxMEZFRDAwMEFFQkY2N0IxMzU0QTkwM0VFNTdBNkFBQ0NENDQ5RjM1RjYKKzoxMEZFRTAwMDRDRUY2Rjk2ODE2MzgzRkI5QjY1OUIxMkZDM0U4NUZBMEEKKzoxMEZFRjAwMDFGRDE4Njc2QzUyNjEzRDkwRDNFQjYyQzk1MDE5RDc5NjYKKzoxMEZGMDAwMDU2OTk0ODFFOTZCN0M1OTNCRjVCREVDOEY3MDFDQUI3QkUKKzoxMEZGMTAwMEM0RkI1NUVFRDc3RjM4MzAyRjg4ODcwMzhENDVFNjM0RjQKKzoxMEZGMjAwMEMyNTM4RTlCRTJDMzZEMjYxRDdENEJGQzg0RkI4QjBCNjUKKzoxMEZGMzAwMDlCM0E3NkE3QkE3QUZCOEIxMUYwNzNBODBGRkMxQzBBQzgKKzoxMEZGNDAwMEM1NEY3MzE4N0VEOEREMDk1Q0NFMkM3RDczOTAxNUU2MDUKKzoxMEZGNTAwMDc3QUEzNkNBQUQ0NkIwMzdBNDFFNjI5OTQwODA3OUMxRUYKKzoxMEZGNjAwMEY4NTM3MTNBQzcwNzMzQkE5MzExOUZBNzlCQzcxMEJFQzYKKzoxMEZGNzAwMEMyRjE1NEZDQzM1Q0MyMDdGQkJCOURBMTNEMzMwN0ZDMkYKKzoxMEZGODAwMDkwMTlGMEZENzY4NUYzQzc5Qzg2NkI4QjUxNUY2RjRBQTUKKzoxMEZGOTAwMEU0NzJFNjNEOTA0RjlBOTlCMUY3NDEzRTY5MjA5RjNFNDkKKzoxMEZGQTAwMDAwQjk4NUY5M0ZEN0E1NTJGRUFGNzUyRTRBRkY1NjM3RTcKKzoxMEZGQjAwMDk0RDI0MzYyQkY1NEYyMEQxMDgwMTlFREMyRTcwNEJGMjIKKzoxMEZGQzAwMDNDOTcyOEUzODFDQjUzRDE3NDI4RkVFMTgzMzEwNjM0N0EKKzoxMEZGRDAwMEREN0QzM0FGOUI5NEM1RDhGNTlBNUVERkNEQkU1MUFGQzIKKzoxMEZGRTAwMENGQkE0QzhFQzlBOUU4QjdERUFCOTBERDU3RUU5OUEwMjkKKzoxMEZGRjAwMEFCQ0Y4QzJFRjM3NDBDNkMwRjFEMURGQzRFRjY5Q0NCRkUKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwM0MwM0Y4RkRFNkE5MDlCQUZBMzM5QjMyNzRGOTlEODlERAorOjEwMDAxMDAwMkU1QUY3RjRFMjAxQkFFRkI3OTQ1RUE2Q0I5NzlEMDE5MgorOjEwMDAyMDAwMjA4QzQ2NkE3NjEyMUU5NjVCOTkzMDE2OUQzQzJFRTgwRgorOjEwMDAzMDAwRTA3NUJGQUUxRDlCRjIxMzk4RUZENzZGOUJBODNDMUNEOQorOjEwMDA0MDAwMUYxMkFGRjNENjE5OTgxN0E2MzY3NzFEQUMwREZBM0RERgorOjEwMDA1MDAwRDQwMjc4ODI3NkM3RjdEOUM5QkY1OEJENjVGNEJCRTMyRgorOjEwMDA2MDAwMjA3RjYwOEI4OUUyMDIwNzFBMTMxRTQwRkJFOEMwOTZDRQorOjEwMDA3MDAwQTQ1ODA2QTk3N0I1MkFFQzA4ODc5OTg1QzhBQkEyQzYwQgorOjEwMDA4MDAwRkFEQjUwMkU5NUY5MkQ2RUIyMTc3NkY5OUU5NDc5MTdGQQorOjEwMDA5MDAwRkFBMzM4NDlFNDk3MEY1NTNGQzZCNzAwN0YzQzJFRjBDRQorOjEwMDBBMDAwQUM4NUVDREQyMzYwQjdFMUQ2RjgxMTg1MzU2MjhBOEEyQworOjEwMDBCMDAwMjUwRUNBQkZFOTRDRjIyMzNGMTdGRkEwNkFBOTQ4NEY5QgorOjEwMDBDMDAwQ0Y0NjUxN0Q4QTUwNDBGOUIxRjcwNzNEQjU4NkU4Q0I2MAorOjEwMDBEMDAwRDUxQTIwQkVCNTkwM0YzMEI3OEJBRjhGMjlBMzMyMTAxMQorOjEwMDBFMDAwRkY0N0UyOTkxNjBGOTNBODVFRjZEN0ZENDZDMEQzODI2QworOjEwMDBGMDAwQzE5RDIzMDJEMEFFMzQyNzkwMzQwQkRBOUREODY4QTI3QworOjEwMDEwMDAwRjMyMEQ4QUYwM0YyRDVDRjU5MzY3MDM5QTJBNTRDMUZEMgorOjEwMDExMDAwMUUwQTRGRkYwODVDRjcxQzgzRTdGRjI1MDJGRThFNTU4MQorOjEwMDEyMDAwRkE0NzkwM0NCQjNCODlGODJBMUNFRTg3Q0M1RTgyQUYzNQorOjEwMDEzMDAwMEZGOTQwMDlDQUM3MjA5RkYxN0QxRTEwNkE2OTI4NjcyMAorOjEwMDE0MDAwRTY5QURDQzlBODlGMEUzNTlCQzhFRTA0RkQxMTNCOURDNQorOjEwMDE1MDAwRTIyQjJGMTExRDFGMzJCQTI2RTNCQTBGMzVFNTMwOTQ3QQorOjEwMDE2MDAwNTc3MkRDRjI2Njk1RkMwMkE0M0ZBQUJGNTZGNTgyOEQ1OQorOjEwMDE3MDAwQzBBNDlFRjIzNTI5NUU5NkQyOUI2RUVFNTgzQTM2MDVBMworOjEwMDE4MDAwRDcxMzZFREZDQUY0NEJFMDU1NkY4OEJEQjBGMDM1RDU5QworOjEwMDE5MDAwNDNFNzgxNzJCQjhDMzcwRTBGNUQ0NzIzRTdCNzU0REUxMAorOjEwMDFBMDAwRkY3MjIxRDcxN0Y3RkZDMzdFOUIwMUU1RkE4MDM4OENEOQorOjEwMDFCMDAwOTMxRkZENTAyNTNBM0JEQUJGMjUyRjE1NDhGRjg0NjE3OAorOjEwMDFDMDAwNDdERTRGMjA3RkJDQzQ3N0Q4MDhGOTI3MkRERTgxNDk1MAorOjEwMDFEMDAwQjBBNDQ1ODZFNjZDRjQ4RjRFQjYxRjdDNjAwMkI0M0IzQgorOjEwMDFFMDAwRjZCQ0M5OERDMzJFN0M3NjQxM0Y4QUU3MDhGQkJBQjdCRgorOjEwMDFGMDAwREMwQUE0NzNGQjQwNEI1MzAwOUU4QjVDQURBNEI3NUQzRgorOjEwMDIwMDAwNUIxNEM2RDdFRkU3RTcwNTg0MUU3NzNDQTRBMDJEQzU5NQorOjEwMDIxMDAwMEU4RUIxQUZDMTc4Qzc1QzYwOEY1MEJCRkJBMDg5REI4RAorOjEwMDIyMDAwMDU3OTQ5NUM5RTQ4RkRCRTVDRTRFNzFBMzg1REIzRDdBQQorOjEwMDIzMDAwMTVGRjI2NjFFRjg0RUEwMTI5OTcyNzI1RjVBN0ZBM0RFNgorOjEwMDI0MDAwN0E5OUI1OTJCQ0FBQzQ3MzFEQjBCRUM1OUIyRDdFN0ZBMgorOjEwMDI1MDAwMEVCNTcxMjA5RjJGRTBFODYxRjU0OTJFN0VCRUM3RkNFOAorOjEwMDI2MDAwRkNDM0M4NDM1NUFDOTNFNjdEQ0NFNEFGRUNDQ0MxRjZGRgorOjEwMDI3MDAwMUIxQTlERDRERUU0QTZCOEFCRDAyNzU2NjAyMDk0NDc2NQorOjEwMDI4MDAwNTU4MkVGQUE1QjE0N0Y4MEY4ODZFQkM1MEFEMTNGNDMwNQorOjEwMDI5MDAwM0QxMzIyQkY3QUVCMTVCRDNFQTkxMDdBQjQ4Mjg1QzUwNQorOjEwMDJBMDAwNkQ1QkY0RkFDRDEzNjNBNzc1MkQ4NDcxNTE1RjA2RTc3QQorOjEwMDJCMDAwMDVGNjMxQzBBQ0QyRUJERjNEOERFNkFEQjhGRDExRTYwMQorOjEwMDJDMDAwNTFDNUJBMDM3ODlFQUU3QThCRTIwRUIwREVGMzBBNUZCOAorOjEwMDJEMDAwQzc4NUNFQjNEMjNEN0Q2MjdDNkVDOEI4NjFGMzk2RjAxRgorOjEwMDJFMDAwQTZDMDZGMDgxRTI0REMyQjdEMUM5RTk1RUQwQUUxRUI1OQorOjEwMDJGMDAwMzM2MTk3QzExRkM1OUIyNURFQUI5ODY3MUE5RTM3QTg0RgorOjEwMDMwMDAwN0EwOEU0NjU0RTkwMEU3QUY0RkU1NkJGMTlFRERFRTNFRQorOjEwMDMxMDAwQUMyNUQ2MDY3NEJGNzhEREQ2OTk1NzYwQkJGNUVGOTM1MAorOjEwMDMyMDAwN0Y1MUVBMEMwQzMyQzQ4MzdGRTdFQjU4NTM5Q0Q1REIzQQorOjEwMDMzMDAwNEUwOEI3MEY3RTJDRjhFMEVDOEQ3OUEyMURDMEEzNjJBOQorOjEwMDM0MDAwQTNBQTQ1OEREMEQ1QTNGNkQyM0U5OEVGRjM5OTMxOUU1RQorOjEwMDM1MDAwMzk1RkM0MDlDRjM3Q0YxQUFDMzdFQTQyRTYxQkQ5OUVDMgorOjEwMDM2MDAwRjlERkNFRkI4NTI0RTEzRkY1QjI4NzA2NDVGNEEzN0E5OQorOjEwMDM3MDAwRUNBMEYzRThERjhGNEM4MTJDRDRCRkRENTk0NkQyM0Y4RgorOjEwMDM4MDAwNUYxQkREN0YyRDQ4NDQ3RDNDODhGQzgyQkVFNDZCQTU2RAorOjEwMDM5MDAwRDBDMzE1QTg5NzIxM0RCQzZFNUIyQ0ZBRUQ5RjNEQjRGMAorOjEwMDNBMDAwOERGNkZGQ0NDRjU3QzRBMjVEN0M3OEREREMwNzdDQzAyNgorOjEwMDNCMDAwNTI4N0I3Q0MyNTNENUNGNTk4RDRDMzVFNzNBODdFMkZEOQorOjEwMDNDMDAwNUE1N0Y2RUI5RjIzN0Q2RThFNzI1QkEwQjg3Mjk3NTdEQgorOjEwMDNEMDAwRDhERDIwRUY1MDBFQUVFM0YyOEUzREM0RTU2MTE1RUFBNAorOjEwMDNFMDAwQUI2MUE0QUY4NjYwQkRCQjJBQkQ0MzkwQ0U0M0JFOTMzNAorOjEwMDNGMDAwMUVCQjZCQUU3NzJDQjU2NzhFMDBGQTVEMjAzOTAzQTg2MworOjEwMDQwMDAwQUZBNDNFOTU3QUQ2NjhGMDdFOTQ4NEZDQTNCRUZERTc0NworOjEwMDQxMDAwOUZDMkZBQkY3ODQ5MjVGN0FFNUFERDkwRURDMEZEODI0NAorOjEwMDQyMDAwM0VFNEY2QkYwRjZGNDMwRkJDNzMyRTAwREVFNTA4NkY4RQorOjEwMDQzMDAwQjI3RjM4QkMzRjZERTI3MDNFRDhDQ0UxQkU3QUNCODA1MworOjEwMDQ0MDAwNThGNDZGM0Y2RDFBNDA3NkNGQTc1QjA2MTFCQ0U3QUQzRAorOjEwMDQ1MDAwMDE3ODkzRERFQkQyREIzRDREMDA2RkI0RjMxMURFMzA1QworOjEwMDQ2MDAwNkVGOTJFOTc4MEI3OUJDM0JCNDlFODlENjY5RUNFRUI4NQorOjEwMDQ3MDAwMDU1NzFGOUQxQkJERUI2OThCMUJGNUY5OTFBODQwMTIxOQorOjEwMDQ4MDAwRkEyMzQ3QjZBQTBDRjdFNTdCRUMyMjYxQkY0ODM4N0YxOAorOjEwMDQ5MDAwQzM1QTlFNDQzQkFBOTczREIzRDZDMjFDRDBERjgyOTc3NQorOjEwMDRBMDAwRUQ3RTA2Rjk2MzRBNDEwQTIyRTA0NENCMUY2MjcxQkMyQgorOjEwMDRCMDAwRTBGODNENzY4QzIzNzk0Qzg4MUQ3MzgxRjg1OUMyM0M1NQorOjEwMDRDMDAwNzQ3RTdENDlGQjFGRjZBMTFEQUY2OERDQUY1RjYyQjU4RQorOjEwMDREMDAwMDU5MDZGQzFERjM5MTEyQUNGMTUxN0NBMzQ4QzkzQjgzNAorOjEwMDRFMDAwQUQ1NkE0ODM0Q0U2RDJFRjFCNzkxOUVFMUI3RDNCRTg5OQorOjEwMDRGMDAwQUJEQjk2MTEzRjc3MEYwRURERDdBOTg5MEU5ODMwQkU4MgorOjEwMDUwMDAwRDRCRDU1MjE3QzU3MkYyRjg4MkQ2MEI4MkY1NTRCRjMyNAorOjEwMDUxMDAwMTg5RUNDRjVCMUEyNjkxNDM3QjQwMERENDRDMzc4RUU1RgorOjEwMDUyMDAwNjQxN0ZGRUU3MkYwMzhFMjdBMThENzFFOUM2RkY4Rjc2NgorOjEwMDUzMDAwNjk0ODdBQThDRjZEMDZEMkU3RTFFQkJGMkQ5OUZCMkI3NgorOjEwMDU0MDAwRDVBQTgxRkM4RUM1NjZFRTdGQzhGMzBGNTc4QUYyMkJDMQorOjEwMDU1MDAwOTM3OUJDQjcyODk5RUYxNzlDOEM2MkE0Mzc0RUFFOEQ2NworOjEwMDU2MDAwRjFEN0QzRkEyNjUyM0NCMzI3N0UyMkUxRTYzMDdFRDk3QQorOjEwMDU3MDAwMjNBRjkwQUY0NEZDNjAzRkI2ODE3OUNFQjM4ODc4MkUyQworOjEwMDU4MDAwQTg1ODZDN0ZBQjY4N0Y2QkNCM0JCNDJGMDc5RUNCMTMxNworOjEwMDU5MDAwQTg3N0U3QUNCMEI4RDE3RUY1QkQ2NjIxQkFCQjI3OUE4MworOjEwMDVBMDAwRUZBM0IwQzQzODIzRjJEMTJENDJDRURFREE3MjlGMDcxQQorOjEwMDVCMDAwQ0YzRENDNjk4OUQxMzA4NTcxN0M0Q0M0NEY3MzcxMUY5QworOjEwMDVDMDAwMzZERDRDRjFEMzUyNkJEN0YzRTg2NkRGOUU3QUYwNEVGRQorOjEwMDVEMDAwMkIyQ0FEREVDMEVEOTY3QTI3QTNGMzIzOTc4M0Q5OEUxQgorOjEwMDVFMDAwRjE1ODI4REE3RTM2RTE1Q0Y0QTM4RjBGMkZDNjM4RUQ4MAorOjEwMDVGMDAwNzhDNjA5NkIxQ0MxNTU5NzVGNkNFNkU1Q0I5MzQ3NERGOAorOjEwMDYwMDAwNzkyODkzQjEzRjMxRDc3MEM0Rjc2Mjg0MEREMjQzNTkzMgorOjEwMDYxMDAwMUNDNTAxQUVDNzc4QjExMzUzMjNEMUQ5MEMyM0YzMTlFQworOjEwMDYyMDAwNzhEQTg0QTEzNTE5M0Y5RTI2RDY3REQzMzgxNjg4ODM4MworOjEwMDYzMDAwRjUwNkY2RUFFM0Q3QjMwMjg2QzAxMEMwQzNGNUM2NDA5QworOjEwMDY0MDAwMDdEMkI1QzFFQTMyQTEzRkUwMjk1NjQ2QTE5RkJDNzg0NgorOjEwMDY1MDAwRTU4NUNERjc5RUU0MkI2OUJFOEIwRDA2M0VDRjlGMkEyNAorOjEwMDY2MDAwRkVBNzAwNEVCNzAyOTMyMzdEREU2NjY0QkJENDUxMUMwNworOjEwMDY3MDAwN0Y0ODdGMzU0RTk3OEZFQTJERTVGNDJERTNFNjEyNEY0NAorOjEwMDY4MDAwMjNBMUZCNTBGOERFMkFFNjA3RkQzNEM1NjI3QjczRTQ0NAorOjEwMDY5MDAwRjhEMTgzQzlEMjBGRTZGNkU2MjJDMUFGOEIyNEJENkQzNworOjEwMDZBMDAwRDFGM0U5MzZFNDE3M0M5RjgzNzYyREMwRUQ1NjkxRjZFMQorOjEwMDZCMDAwNDVFRkFEODJERTVCMDVCRDNGMjlGMjE3M0E1RUI1ODU5OQorOjEwMDZDMDAwMDU2OEREQUY1OTA4OEY3MkRDRUI0NUZBNDIzMkI3OUIwMworOjEwMDZEMDAwRTUzQzI0M0QzMzExODczMjgwRTQ0MDNBM0FENEQyNDA5RAorOjEwMDZFMDAwNzZEM0ZDQjAzODMwMEI4RDU3QTk5MUYyM0RGMkM3NzAyQworOjEwMDZGMDAwMTY1MzczRjczQzlDOEY3MjU1OTQxQkU5RkE1NjczRUJCMworOjEwMDcwMDAwQTA1QTVCRUY3QTcyMUZCNzk0NzU5QUY4QkQxQjExQ0Y5MAorOjEwMDcxMDAwMTJGQTZBOTI2QUEzNzM0MUE1NEFCNDFCRURERjkzMDVFRQorOjEwMDcyMDAwNzY5RjIxMEVFMzJEMjY0MjZEMjlEMDAzQ0FFNzhGQTJDMgorOjEwMDczMDAwRjhCRUZEOUNCOEJCQTZBMTVENTgxQTZCMzY2MjdBM0IyOQorOjEwMDc0MDAwRUJCNEU3RTQwNEVEOTJENTA1MkFFRUMxQzFDMEQ1NTM2MAorOjEwMDc1MDAwMzRDODM3QTAzQ0UxRjlGQkI0NEM4QTBFODlGQ0IyM0ZBNworOjEwMDc2MDAwNjJGOThEREYwMUZFMjk3RkM3MTQwREU0QzVDOTM3NDU0NQorOjEwMDc3MDAwMzk1QjRFRUQ0RkFFMTI3NEVDNUIzMTA1RjczOTRFRkUyRQorOjEwMDc4MDAwNEE5NkZGOUM5N0RGMkJDQkVCNzlGOUZEQjI3RjkxNUYwNworOjEwMDc5MDAwMUI1NjVFMUY1NkZFMjhDRjc3M0Q1QzNGQzU4NzcwMTIwMworOjEwMDdBMDAwRkIzMUE1RTMxNTkyMjcyRTQxNjdBNTJCMDMwNERGNTJFOQorOjEwMDdCMDAwQzMwRTlFMTZCMjgwMjFGN0ZDRjU2QzI5MUU1NzMyRUQ1MAorOjEwMDdDMDAwMEIxRUIyQTNERTRFNDhEMzVDQzk1MENGOTZFNDNEOEVEQgorOjEwMDdEMDAwREYxNzRFNTc3QzY2OTQ5MzFGRkEwNzBCQjkxRUYxNUMyNgorOjEwMDdFMDAwQUQ0QkQwNkQ1NDJBRUY0RkMyMUJGQUY5MUFGQkJCRDhBMAorOjEwMDdGMDAwN0VENkUxQkM5Mjc0RkQ3Q0ZGRUZGNDMzMkZCNTU3M0ZGQQorOjEwMDgwMDAwRTY5NDdGQTM5RkJENjFFQjkyNzY1MTU5QkE5NjgzRkQyMgorOjEwMDgxMDAwQjE0Mzg5QkFGMzY1OEJGRUQzMUQ4Nzc2MTVDM0YzNjVBMworOjEwMDgyMDAwMDBGQTQ1MkI1QkIzNDc0M0ZGOEI1RTc4MzVCQjMyQzQ4MAorOjEwMDgzMDAwRUY1RTcyQzZDMDM0QjA5RjZBQ0UzMDRBOEY3N0ZDQ0Q2RgorOjEwMDg0MDAwRUM4MkY5MkNEOURFNjE5RTBDRjU2QTIwMkQwQTk5RDcyRAorOjEwMDg1MDAwNjI3OTRFOTI3NTE5Njc4NEU4RjVDMTI5MDYyMTlGRDYwMQorOjEwMDg2MDAwRDI3QzE3QkQ3MEQ0ODhGODVDNjQ2ODNERkMxOEM2N0JFOAorOjEwMDg3MDAwQzYyQjExRjc1RDYzNDVCQkZEN0REQ0U3MUE5NkMyRTUyQgorOjEwMDg4MDAwOUUyNzUzQkIyQzA1Q0Y0NUEwQ0M0MDdEREMxMDc5OUYyMworOjEwMDg5MDAwRkU0RUQxNUY2OTM0OTc2RjczRjNFQzU2MTdDMDc5Q0M3NQorOjEwMDhBMDAwODc3QzlGQjk3MjdEQ0UyODhDRTM1RTlFNTQzODA2RkIxMAorOjEwMDhCMDAwRUIzQjJFREFDREUzQTJFRDNDMkU1QUVBRUM1QzBFQzIwNQorOjEwMDhDMDAwOUJENUE2NkNCOENGN0EyNTYzNTMxRTkxN0MwNjJDMEI2MgorOjEwMDhEMDAwNkQ4QjJEMzJERjM2NjU2MjNFQzVCOTI4N0ZDMzIzNUI0MQorOjEwMDhFMDAwRUY0M0JFRDkxM0NEQ0Y0RENDMTkzQjNDMUFFNTQyNTc0RgorOjEwMDhGMDAwNEU4Q0MxMDFGMjYyNUM2MjU5MkRFMjZGQ0VEODJCMjc3QgorOjEwMDkwMDAwRTNGNzAyOEI3RDcwMTk4RkFCMTM1RDhDNEJGNDRDQzFGOAorOjEwMDkxMDAwNzJBQzhGNzEwREFGOTlDN0I5QkM2RkE5MTRFN0YyOEU5NQorOjEwMDkyMDAwODhGMTQ2REE0N0JFNTZDMEExMzY4NTlGNzNERDAzNjg1RAorOjEwMDkzMDAwNDZCQjQzQ0U0MzhFMEY4NkNBRjI0RUU4RUZEMENBQjQxMAorOjEwMDk0MDAwOTE2QjVDQjhERjUxNTA0M0Y0MjRDNkZGNjVBMkI3MzQwNQorOjEwMDk1MDAwNzQ3QzU4RUUwOEZDN0VBMUYzQjgzOTg1RDM2RjBERTJBNAorOjEwMDk2MDAwMERGMTk4QUYzMjJEQzQ1RjlDMzEzMTQ2OTdCRjcxNkE0QgorOjEwMDk3MDAwMDJEMzQyRTNBRDM3NjZFOEYyQjM0QjA3RThFQURGMzI3MQorOjEwMDk4MDAwRUYzMjVENzk4OUE1MzNCN0Y2MjJFQ0RGMUFCQjNEMUE0OQorOjEwMDk5MDAwRURCMDhGREJCRkY5Q0JBRDY4RDc2RDU0REQwQUFDNjcyNgorOjEwMDlBMDAwQzE2QjlCRkUzMjAxNkE5REMyRTM5N0ZDRkUxNEM1QkQ3QworOjEwMDlCMDAwOEVFMTc5MzZFNDNEQTM2NjBDRERBRkY5ODI3NUQyQjlEQworOjEwMDlDMDAwQzA5MEZEMDBEREJFQ0IyMkM3MkUzQUFGRkE2M0VERDc1MworOjEwMDlEMDAwM0M5MDIyRkNERjUxNkMxNEVBQkY1M0I1N0ZBNjM4REI5NAorOjEwMDlFMDAwMTIxQjVGQ0YxN0FGMUUzMEUzMzkwNjNDMTc3MDE2RThCNQorOjEwMDlGMDAwRkIxQTZDQTgyMjlGRkIyODBFNURENDc2QzA4Q0ZFOTE1QQorOjEwMEEwMDAwM0I4NUNCRTUyNTk5NEI4RDYwOTFCMTFBNDg1MTZGNENEMAorOjEwMEExMDAwMDZGOTE0MDdGNEQxRDlDMTg2NkZDNzczMTMzOTc2M0EzMgorOjEwMEEyMDAwMDc1RTdENjYwNjA4NjlBNDIzREZCMEE1NTA2RjUxNTNBOQorOjEwMEEzMDAwMzFFNTk3OUM4OUE2N0VERjUzM0IyN0QzNzlFNDU3MTQ5MQorOjEwMEE0MDAwREEyRjI4Qzk5OEIzMTJFRDUxQUM3RjA3OEM1N0YyRTIyOAorOjEwMEE1MDAwMzVDNTA4OUYyNURCRjlCREE3MTJGNTRGQjlEOENGRTIwMAorOjEwMEE2MDAwOTY2MjZBNUZBMkIyM0QwQUQ4MDc1MzhBQjg5RTJENDFBQQorOjEwMEE3MDAwREQwRTc5MzVDRkJFMDZGNUFCNkEwRTBDN0UxQ0U1ODkxRQorOjEwMEE4MDAwRDk0RUYyMjRFRUNDMkQzNDdFQ0QxOTJCQjVGRkFEOTA4RQorOjEwMEE5MDAwMTdBNjJFM0VBRjQ5NjczQ0Y0NURFMkJEM0Q4NUVGMDNFRQorOjEwMEFBMDAwQ0FCQzI5NjlBMzExRUYxNTk4QkExOEQ1QkZFRUNDQTUxOQorOjEwMEFCMDAwOTRDQTc1QkUzNUY0RTk0NDk0NjNBNkE0QUYyNzY3MDBEMQorOjEwMEFDMDAwN0RCQzk1QTgzOEM4REMwODkzQjdBNzZCQzdDNkIxMDgyQQorOjEwMEFEMDAwRjJBODY3OUMzM0ZDRkNBRUU1MEMzRkNGREI5RUE2RkQ4NQorOjEwMEFFMDAwMDlGOTZBREFERDVENDZEQ0JGNjEzNkFCMDNFMTM1NkRERAorOjEwMEFGMDAwREM0ODU3NjUwODFGQTkzQjZFMzYyMzVFNEMwRkJENkY1RgorOjEwMEIwMDAwNDY3RDZDODFCNDI4QTRCQzVBOUUzQjBGOTNDN0ZCMDQ1RQorOjEwMEIxMDAwREZDOTdCMDc1MkJGMzBERjZDQjI0NzZGMTNGRUI3RTQwQgorOjEwMEIyMDAwOTMzNzQ1N0REOUJFMTM2OTFDRjFGOEIyODVGQ0E3M0YwOAorOjEwMEIzMDAwQTc3OThGQTNCQ0VDMkM2MEIzNUYyMkY5RDg5OThERkIwOQorOjEwMEI0MDAwMjYzRkQ2RkMwMUNGNTY4NUVDRkIyRTNBQ0YzRTZEOUM1RQorOjEwMEI1MDAwQ0I4MEZCMDFERDNERUJFMEZDN0FCRTc1N0MyQ0VBQkY2RgorOjEwMEI2MDAwQTdCMjE1RDhFRjdCNTc1RkREQTk0MTdGMUQzRjFCM0QyNQorOjEwMEI3MDAwMUFFNUJFMUM1NzQ5RTVGNzcwOThBM0ZCM0JGNEU3NkFGQQorOjEwMEI4MDAwNUU4RjcxMjE1Rjk3QTA3Mzk0MUJCNDYzRTEzQkMzRjg0MAorOjEwMEI5MDAwNUZDREVCOTZBNzE0MjhBRjg5MDU3RjE2QzYyRjdBMjM2MQorOjEwMEJBMDAwMkE4MDc0RENGMTQ2OTQxMUY1NDM3REE2NTc0OTFEODNENAorOjEwMEJCMDAwREY4NzRDNDRGRjRENkJCNzE4MTlEOTM3OUEwMUJGRjczRgorOjEwMEJDMDAwMzVERkYzQzlBNzcwM0E5MzdDRTk2REUyRkM1MjI2RTg2MQorOjEwMEJEMDAwQjQ1Q0YwOUY1N0YwRDFFOURBMTRFMkMzRDM3N0MzQTQzMQorOjEwMEJFMDAwNzE5RkYzNkU2NUY4NzZCNDA3NUM3NkY3MjA1NzkwMkYwNworOjEwMEJGMDAwNEJEMEVGODFFRjI1OTdDNTkzRkYxN0MyNzdDNDg3OEI0MgorOjEwMEMwMDAwQ0YzOEE4QkZFQTMzMkVDMUU3NEVDQTRCN0UyQjE3RkM2NAorOjEwMEMxMDAwNjIxMTc2QzQzQzQxREY0OUU5REU5MUE5MzBGRjkyMDZCQQorOjEwMEMyMDAwRTA3NzE4QzdCQjMyMkQxN0Y5Mjg0ODJGNjYwN0QyMTU3MQorOjEwMEMzMDAwRDA0QjZBNjUwOERGMzQ3NERDQ0NEMEZFQjAyNDdBODhFRgorOjEwMEM0MDAwNUVFNjQxMUE2QTdGNTRGNEQ4MUY4RUM5QzkzMEVGNjkzNQorOjEwMEM1MDAwOEQzOUJBN0IxNjc5QTkxNzQ3RjcwMzUyQzVCRUJDMkQ0QgorOjEwMEM2MDAwMzAwOEVENTU1MzZEOTQxQkVGODM5RDRBRTRGQjMzQ0I2NQorOjEwMEM3MDAwRUVFNUYwNUI2NkYyMTRBMUZEQjBFQzUxQzUwRDk4MjFENAorOjEwMEM4MDAwQkIwMkU1NTFERUJFNUE3MzY4QkNGMUU2MzMyMzk4MEIxNAorOjEwMEM5MDAwRTA3MEMzOTk4MTk0NUU5RUU0OUQ4OEY4MkYzQjMzNTNBNgorOjEwMENBMDAwQzA2QkM0QkZCNTBGMzg0NkUzRjEyNTkzREZFMkRFODBBOQorOjEwMENCMDAwRkI2QzUxNUUxNUYxN0IyNDhCMzkxRTBDODkyRjYxM0MzNgorOjEwMENDMDAwMENFMzYyNzI3RjUwQzY5QjJDQjg5RjFBQTIyN0JGMzFEQgorOjEwMENEMDAwQjY2NEEzQkZEMzJCRUU1NEEwREY0NzVCRENGMUE3M0M4NworOjEwMENFMDAwMDM5NDFGQ0JEMTI4RkUzNEM3RTBCRDBERjFCQTcwODY0NgorOjEwMENGMDAwRkYwNTEzRTQxN0REQkYyRDE2RTNERDEyOUVBREM2QzA2MAorOjEwMEQwMDAwMjBENDkzQUQwMDQ3OEM4M0I1MzZBQkM1N0U2RUNGQzQ3RgorOjEwMEQxMDAwRjBGRDJGNEVENzkyOEVDM0U5N0JFMTk5RkU0NDRGQTc5OQorOjEwMEQyMDAwNkIyREE0Nzc0RTAzQkRCMjEwQkQyM0Y1OEQ5NEVGNTIwOQorOjEwMEQzMDAwRUY0ODdBQUUzNjcyQjk1NTZEOEJBMzczMTU0MTdEMzM4QQorOjEwMEQ0MDAwREQ4MzcxNUMzNjk0OUY3RjBCRUE5QkE3MUUxODhGRjQ5RQorOjEwMEQ1MDAwN0YzMjkxQ0UzNTg3RDNGRjJCNzVBOTc0Q0U0NkVBOTFBOQorOjEwMEQ2MDAwNzA3RDIzRTVCOTk0RUY1MjVGREQ5NUU2NUQ4QjcwMkFDNworOjEwMEQ3MDAwN0NFRUJGQjdGRDFEM0U1RDY3RTQ3QUVCM0FBMzlERThDQworOjEwMEQ4MDAwRTdDMkU1RTYwMTIxMzcwRkU4RTRFNjkyM0VFNEZFQzM2MAorOjEwMEQ5MDAwMTc0OUZGOERBMjNFRDhBRjY0MTdBMjVDMEZFREVGQ0ZDRAorOjEwMERBMDAwNjk4NUJGNDFGQTdEMjE5NUVCRDUxRjZCREU3REM5RkJCRgorOjEwMERCMDAwMTc1MkE1MUY3MTYxRjJGRTcxNTFGRjdDRjJCRTQzQzg0QworOjEwMERDMDAwRkI3MEY5Q0VBMDNGOTRFRjI3NUZCQjg0RjZBN0Y3MzMwMworOjEwMEREMDAwRDAwN0E4RjdEQTYzNUM5Qjg0RkMyN0ZEMTAxREU3M0Y3MgorOjEwMERFMDAwOTdGQ0Y3NjRDRUVERTg0M0ZFRUZGOERGQzg3RjQ5OEY0QworOjEwMERGMDAwOTI1RjI0N0Y0ODdFMDhFNzFGQzkwRjUzRUUwM0ZGMEY2MQorOjEwMEUwMDAwRjFGNDFFQkY1RjU0NkRGNDZEQTFGRDQzNTdDQzQ4RTQ2RgorOjEwMEUxMDAwQ0IxRUJCNkRCQjQyN0NENjRCMkYwOEJFMDlGMjg5NUU1MAorOjEwMEUyMDAwNEY0OEJFOTA3QzIyRjlBMzVBRjA0MzQ1MTgzRkVDNTQzQQorOjEwMEUzMDAwNUIxRjFDMEZFRDZFNEVGMzlFMEVFNThCQzUyRjg1RUJGMQorOjEwMEU0MDAwODUzRUU5MEEyMzg2QUMyMkIxOTYyMTVENTU0MzFBNEFCNAorOjEwMEU1MDAwNTc5NjNFRjhFMTRDMEYzRDVEMTgzRjFDQkU0MDdBOEEyNAorOjEwMEU2MDAwNDkzMzUzQkRGRjQzN0E4QTQ5NEI4QTQ4NEZCNkI0MUY3MgorOjEwMEU3MDAwRDE5RTM4NURGQkQ3NUMxN0NDRTc3NDJFQzhEOTlDMjA3NworOjEwMEU4MDAwQkQ0REY5MjNFM0Y2QzIwMDZFRjdFRjg5RTZFQkRDNjNCNAorOjEwMEU5MDAwQ0VBMjc4Q0U5NEIzRkM1Q0FCQTQ0Qjg5Njc2OTA3NTRBRgorOjEwMEVBMDAwODg3ODQyNzFCQUM3OERGMzk1RkVDMjg1RTJEOTkyRDg4RgorOjEwMEVCMDAwNjk0NjNGQTQwMkQyNTBGRERGOTdCRDNCMjZFREUyRjAyQworOjEwMEVDMDAwM0MyMEVEQzJFQ0M0QzkwMkNGM0ZBMjlEMzgzRDEyNUU2QQorOjEwMEVEMDAwOTlDM0E5OEI0MzgwRkVCQjgxRUNCNzgwOTE4RUM4RjQ4NworOjEwMEVFMDAwRTk1N0FDRTM3MDk2Rjk1NTAxQTNENEI3MDlBODZGODEwRgorOjEwMEVGMDAwNUU2NkUwNzhGRjJFQkQ5NDE0MzExMTBGN0M3OUFBOTZCRQorOjEwMEYwMDAwMEY3OEZGODVDOEIzNTdBNzIyN0U2NjhFOTNFNUJGNkQyNQorOjEwMEYxMDAwRDYwNkEyREM2MTMyOEU0RTcxOTFGNzU0OTFGN0JERjI4NAorOjEwMEYyMDAwRjY0NEE4M0ZFNTQxMTY4Q0IzNDNGOUE0RkNCODlFMzhCQgorOjEwMEYzMDAwOEFDMjgyRjU5NzNFQkFGREVENjZDMjMzM0ZGN0MyQkM2NgorOjEwMEY0MDAwNUQ0NkJFQ0YyNEYyQjk5MEI3ODdFNEM3ODVFNUQ3RjNGNQorOjEwMEY1MDAwRkFCMUM2MkVDNkNGMjlGQTM5QkZBQUI4RjVDNkU5Qzc3NQorOjEwMEY2MDAwMTM2MjhGMDAyNjI3RTM3OTgyNjlEQjE1MDdDNjQxNkU3RAorOjEwMEY3MDAwQzkzRjQ5RkJCMUMxRjVCRjQxRUI1RkQyQUU4OEZDQ0VBMgorOjEwMEY4MDAwQjc3MUJEQjc2Q0U3Rjk0NzFFRkQ0M0IzNkZBMEU4MkZGQgorOjEwMEY5MDAwOTlFMjY0RjQ2NzZBNTUzNDNDRkZCMDc4OUNFMkVGOUZCNQorOjEwMEZBMDAwRDMxQkNFOEZBNEU5RkQxQkZDMzNFQURCMzMzQzdGNzdGOAorOjEwMEZCMDAwMzFFRDExQ0ZENEJFM0ZCNTBGNTgyRTYyRkM1OUY5OTFENworOjEwMEZDMDAwRUYzREZDOTdBQzI3RTIwOUQ0M0ZDMEYyODZENkM4RUZDQworOjEwMEZEMDAwOTdCQzI4RjhCMTEzRjc0RDA4NUUxRjM1MjNGQzNBQ0RCNgorOjEwMEZFMDAwMTI5RUZGNjhDNjc4MzdERDlGODFGQ0FCOEZGRTYzQUEzNworOjEwMEZGMDAwNkYxODlGQkUxNkI2RkU3M0NERkZGMTA4RUI3N0U5REJFNQorOjEwMTAwMDAwMDdDRTA1QkYwREJEREEwQkZBOTlBRkE3QTczOEEzNjdDNgorOjEwMTAxMDAwRDc2OUU4MjcwRUZDN0ZCNDhCOTc3OEEyOUFEMUZFMEY5MAorOjEwMTAyMDAwRDJDNzYxQTI4RjRFMTlDRkVGNDVGRjlGNEY5RDY4MjMxNgorOjEwMTAzMDAwRkI0N0Q0M0ZEQThDN0FDQzYzRThBOUNGRjk0MUQyMTdDOQorOjEwMTA0MDAwNUUwNUMyQjM3MzhDQjdGRkUwRDEyM0NEMDgxRkMwMEY3QworOjEwMTA1MDAwOTU1M0RFNzgwRTdFNjgwRENCRTc4N0YxOEZBMDdGRTI5NworOjEwMTA2MDAwNUY5NEYzMDA5RjQxMTFFNENDMjkwMTlGMkZDNEI5RUE5QQorOjEwMTA3MDAwQ0U0MjZFMjc3NkY2RTdBOTMzOUREQjg1RkYxMkY4MzY2MAorOjEwMTA4MDAwQTRGM0ZBOUREMTIxNzAwOEMxMzNGQzA1RDAwRjA5NTk5MgorOjEwMTA5MDAwMzdDMUU5RTY0NEI5RUVBODkyQTlCMEFFNEUyNzJGQjcwMgorOjEwMTBBMDAwQTU5QkVFRjdFNTA3RjNFMUZEQzVBNjQ3OTUyMDVDODIxOQorOjEwMTBCMDAwRkQ1QkRFNDFCOTc0QjM4MDlCMzNEREZBOEU4RkNCNDM4OQorOjEwMTBDMDAwMDVGOUIyOUEwODA0RTg2MkJCRTI1M0QxNEY0MEJBODhFRQorOjEwMTBEMDAwQjBFRUJGRjdBNjJCNUY1ODdCQ0Q3NDhFRjY1REJEREJGRgorOjEwMTBFMDAwNkI2MUVEOTkyOUY3NjJEQTBCQkM0RDBEQzM2QjcxMTg3QQorOjEwMTBGMDAwNUUyNzg2RTU0QjY1REVBRjkzN0Y1MjJFOTZCN0FENUREQQorOjEwMTEwMDAwOTU5Qzg4NzE0OTg1RUU4QTA2RTkzOUE1MDRFOTc5OTFBQgorOjEwMTExMDAwNDNEMjZGMkFDMTM1NDhDRjY5RUYyMEZEQ0U2ODk1RjJFMgorOjEwMTEyMDAwMzBGRDdFMERGMDM2MURFNUUxRjg2MEZFMDY5NDE3OTQ2MworOjEwMTEzMDAwQ0YyOEQxRTI0MkY1NDUyNjk1Q0Y2QTkyRjVCM0VFMjc0NgorOjEwMTE0MDAwNzlEQTI4RkJDQkE2QkNDNDIzRjNGNTJCMjFCQ0U2MEEzNQorOjEwMTE1MDAwN0RFMTczQkQ4M0U1MEJEQjc5RkI0OThGRTVCQzczNEUwNQorOjEwMTE2MDAwN0U2ODA5ODNDQkZBQjBCQzJGQUNGRTQzRTdEMTJGOEQ0QworOjEwMTE3MDAwNjFFREVGMEUyQjZGMEVDQkFGMEJDQjM3RTlEQjk3Q0RDRAorOjEwMTE4MDAwNTM4ODBGQ0I4MDFFMTAxMUU3RTNDQjlCRDI3QkVDRDRBRQorOjEwMTE5MDAwMUU3REFBRDhDODZFRDNGMUQ1OTQwNjlFQkZGREIxMTFBRAorOjEwMTFBMDAwMjU0REI2OTA3Q0JBQkIyNDk0MkZFNEJENjA0QjIyMjMxRQorOjEwMTFCMDAwQkUzMEY1MjEyRjRCRDJGNUZFNTlDRjdBODY4NkVCNUJGOAorOjEwMTFDMDAwNUVGRTA5RkUzMzhERjY3Nzc0NzZDMTRFNTU5RkVGNTA2MworOjEwMTFEMDAwRTVCQ0FGN0E2N0I5MkQ2NDFGOTQ1RDU5ODJGMTk1QkU2NQorOjEwMTFFMDAwRjc1QjI2OTQ0Q0NDMENCMTRCN0NFMzRCQjQ5MDc1Q0FBNgorOjEwMTFGMDAwRkE5M0JGM0ZBQkUyNzg3N0E2OEYyRkQ5ODhGQjM5ODU2QQorOjEwMTIwMDAwNjIxRkQyQzk1M0QwNkIyQUVBQ0QxQTExOEY5OThDRTc4RAorOjEwMTIxMDAwNjNCMTVFNzQ2MEQwQjI1MDNCODRCNTBFQzY3NTc2RkM4NworOjEwMTIyMDAwOENERjFCRjAzNTAwN0UzMEJFQzZEQzY2OENBNzc0QzQzNAorOjEwMTIzMDAwQzVBRDc4MDZFQUVGRkM5OUJBMDJGNUU4RkUxNTA5NzQyNworOjEwMTI0MDAwMkVFOTRGRTlEQ0ZGREMxOUQ3MkZCOTAyRjIxRDMxQjdDNworOjEwMTI1MDAwOUJGMUJEOTI4RTdCMjY1MUJBNDNENTU2NzcwM0FGM0RBNQorOjEwMTI2MDAwRjhEOEI1MjVCNjRCQjAzQzhFRTBGMzhCRjQ0OTI1RjVBNAorOjEwMTI3MDAwNDBEN0JGQzQ0QjNCRDBERUVCNzQyNEUzQkQwNkI2QzZGQgorOjEwMTI4MDAwNDRGQjdBOENCOTlGMjRCQUI5REYzMjEyRkRFN0IyRkE3NworOjEwMTI5MDAwQ0I2OERGQUFGQzU3RDMyN0QzQkQ4NTU1MjZEQUNGODA4QworOjEwMTJBMDAwM0YzQTdGRTI1RDMzODlDRTNEQ0Q2QjE0QTlFRjFBNEFGOAorOjEwMTJCMDAwREZGOEUxRTkwNkJDMUZEOUZEODQ0MkY3MjVBRUZDQkE5MAorOjEwMTJDMDAwRjU4RjIzRjBEQzYzRDMwMDM3QTJFNjc1QjBFQkYxM0M3OQorOjEwMTJEMDAwRDJBN0VCODZEMDNEODk4MzUxQjU3NEVFMTNFQTMzQUNDNworOjEwMTJFMDAwNUZGNTlERUJERDY5Qjk1ODVGNzVFMEQxOEFDM0YwMURFQworOjEwMTJGMDAwRURFMUMzRjdBQTRGRTFGREMzQjI1ODdCMzQ5RTk3M0VBMAorOjEwMTMwMDAwRkNCREVCNURCNDZCQTFEQ0IxMTJCRTFGNUVCNTIwMTk1NAorOjEwMTMxMDAwRURBQ0MzOEEyQjE2REYxMjc5RjFCMTU5MjVBOTY5Nzg5MgorOjEwMTMyMDAwMkZERjIyRjAzOUNCNUUwNjdDNUU2NkU4QTExN0QyMUY2NAorOjEwMTMzMDAwOTVGMTNDRkY2MkZBQUM5MjREMzBGRkMzOEYwRUExNzM2MgorOjEwMTM0MDAwNUY4MzMzQjRENjc0QzBEM0U5MEM2RDJCQTYwN0M1N0Q3QgorOjEwMTM1MDAwRTUzNzdFRTBGQjg1QkYzRjUxOUU4Q0Y0RjQ3QjQxQzdBRgorOjEwMTM2MDAwQUY5RjI5NEYyRTBGQjE3NzJBQkYzMDEyREVERjMwQkI3RgorOjEwMTM3MDAwOTZFMzNDREY4OENFNTJFODdDMzY2QjREQzA3OEY3M0M3NAorOjEwMTM4MDAwRTE3RjAwRkRBRUQ4MTZDMUVFNzkzODVEMjUzQzc1RENGNQorOjEwMTM5MDAwOTc5NDhGNzgwREQyNzEyNUM5NEJGMjFCMjBGRkY2NjMwRAorOjEwMTNBMDAwRTVBNEQ3MEU1OTU2QjA4MzY4Mzc4QUYzOEI2QzY3MTQ1RgorOjEwMTNCMDAwQkZFRkI4MjVDQTFGOTU4M0YxNEY2RDMyQjY2M0E5QUQ1MworOjEwMTNDMDAwODM2N0Q4NDNGODRFRDRGRkQ4QzdDRkU3N0UwQ0Y1RDE1QQorOjEwMTNEMDAwN0ZGQkQ4RjcwRjdCRTgzRTg0QUM1RjE1NkJGN0ExMzEzQworOjEwMTNFMDAwRjFCOURENkU0NDNDRUMzN0Q2MURDNjczN0Q5NTRGOTg0MAorOjEwMTNGMDAwNDhFRTU3M0U5MTc0NzczN0NBMUJBMDE3OEM4Rjg1QUY4NAorOjEwMTQwMDAwMkIzNUMzNDRGMEVBOTMwRjdENzc5NDRDRDRGOTA3NzdEQQorOjEwMTQxMDAwOUM5MzBGMEYzRkI2QUM2NEEzQUQ2RjNFQUMxMjdFQ0E3NworOjEwMTQyMDAwRTQyNzRDNzQ0RUJENkE4Q0REODhGQjhGODU0RkJDQjlCOAorOjEwMTQzMDAwODlFRUFEMkU4RDFBODVGNzEzQUE5RUIwMTBCRUJBRUNCOAorOjEwMTQ0MDAwNzY5RjAzRjc0NzYzRURDNjc4NDhCRjE2NzY0ODEyNUU2RAorOjEwMTQ1MDAwQUVDNEI4OENDQThDRDY1MTk0RDJCRDA0QjlBRjc3NzRERgorOjEwMTQ2MDAwQzU4MzBGRTMzMUNBNjNDQzNGNzMyQ0MwRUYxNDIyMEM0OQorOjEwMTQ3MDAwRTA3MjRBREVDQjBBREJFN0FCREVCQkNENUNDMENFQjFBRgorOjEwMTQ4MDAwQ0Y3NzlFRkQzRDIwNUY3QTQ3RTI0MkY3Rjk2MjMyQzQ5MgorOjEwMTQ5MDAwQkQ5RjlFN0QzRTEzQkQwQjUxMjVGNkY5OEFENkYzRjMxMQorOjEwMTRBMDAwNUI1NTJCRjhGQjFENDUwOTNDREU3QkE4Q0U4NzhGQzQxRQorOjEwMTRCMDAwRTI3QTdEMEVCQzlGRkIxMEQ3MkY1NTRDRjE1QkUxOUY2QworOjEwMTRDMDAwRDdBQzVGNkFBNEZCOEZFOTFDM0U2NUUyMURBNzgzNTE4MAorOjEwMTREMDAwRUU2Q0Y0RDMyQjlGODgyMkI4NTYzREI5RTAyRjhGNDI5MworOjEwMTRFMDAwQkJBRUZBOTJDNDUwQkYzODQ3RDAwM0Y0Q0ZGMDlFQUVFMworOjEwMTRGMDAwRUNFN0YzRkE5RjY3MjNERDE3RkQxQUZDNUJCQ0VGMTdERgorOjEwMTUwMDAwQ0Y1RUI4MzkwN0YxOTQ5NjhERkI5MUIyNUVENUNBOUYzNAorOjEwMTUxMDAwMERFNkY1QzAzRjA2M0ZCOEVDNUU5NUJGQkZGNkIyODU1RAorOjEwMTUyMDAwRjQxREYwNzgyQTBCQjlDRjNDQUY3MUFGRDkzQzJDNzhDMQorOjEwMTUzMDAwRkZFQjUzQzhFMzk1RkI5MDdCNjA2Njg0OTdCQzk3ODQ3MAorOjEwMTU0MDAwN0ZBOTc5QzJERTc2OTFGQ0EwNzc3ODRCMEQwQURENUYyQQorOjEwMTU1MDAwMDJDOTQ1Rjc3RUFFQ0ZFMEY2RUJDNDBDN0VERUE5MkNDNworOjEwMTU2MDAwREI0REY3NUZBQTFGQjBCODU3RTZGMDdFN0FFRTU1RTM4MQorOjEwMTU3MDAwMzkyNzQzNjcyNUVEM0ZGRUQ2NDI3MTkxOUFDNjI4MkQ0MworOjEwMTU4MDAwMkE5NjlGOEI3ODY5MTg5RDhCMzY5QTcxREZDNEM1RTVDMgorOjEwMTU5MDAwQzRGNTgyRkU2QTVDRDNBRjQxN0E4MUYyN0Q0NjNDODcxNgorOjEwMTVBMDAwNjVFN0YyQjAzQTFFRTBDRUY1QjA2NjgwNzE0RUUyQkY1QworOjEwMTVCMDAwMDZGMDdFRDM0Njg0OENBRjg4RUZEMDhGMkIzNkQ4RUZFMQorOjEwMTVDMDAwMUUwMzZCQzJCODBCRDZCRjY0MDRDMjMxNjFFNjZDOUNDQgorOjEwMTVEMDAwREZGMzJBRjEzMTJDRkU4MTcxNjhERjNEQUY4RTQ2QkYwQgorOjEwMTVFMDAwQjZFQ0RFOUQ5M0Q3NjE3RUVCNDhCQ0IxQzBDQTVFRjgxNQorOjEwMTVGMDAwODBGNEM1MjI4MUZGMkU3MTFFQUMxQ0YyNzhERjdGN0U0NQorOjEwMTYwMDAwMDY5NzkzNUU5NUM3N0JFNjBCNzg0OTNBOTBFNUQ1Rjc0OAorOjEwMTYxMDAwRjJGMzUwRDVBQjJDNjRCRjU0RDdGRjk1RkFBREI2NzczMworOjEwMTYyMDAwMjZBM0RDQUQ3RUQ5NDRGNzk4MTc4OTc5OTdENzY3RTU2QgorOjEwMTYzMDAwRUYwM0JBMkEzN0M1RDE3QkNCOEI3RDI1NjZDQzJGNkVDNQorOjEwMTY0MDAwNTEyODFGNkM5Nzk0OEQ3NDdBQkNGMTk1NThBNDlGODM5MAorOjEwMTY1MDAwNTE4MTQxQTg4N0JBOTc0NkI5RjExQzlFOENCNzFENkY3RQorOjEwMTY2MDAwMUNGNDE0QzY2NUU2MzkzQUVENzgxRjY5REVGMjAxNEVDNgorOjEwMTY3MDAwOTREQkZCMUQwMTMzOTZFRjZGQ0QzMTYwNUU3MzM4RjI2MgorOjEwMTY4MDAwMzFBRjE5MkZBN0ZDNzE3MUVFODRGRTkwNUUxNDhFRTdDNgorOjEwMTY5MDAwQzU1Qjc2OUFGQkMzNzgyRDgyMkVCRTc4RkU4M0MxQThFNworOjEwMTZBMDAwQTdBQUIzM0IwN0EzM0UwMTNBMTg5QzgxNzA3RTU2MjEzRQorOjEwMTZCMDAwM0RCQzY0MEIzRkE3MkVFOTYwMDlEMjAxRjBERDQyNDEzOQorOjEwMTZDMDAwMDc0QkI2QkZGMjEzRTQ4NzI1ODhGRjUxQkRFOTA4RTg1MAorOjEwMTZEMDAwNzQxNzdEN0Y2OUMzNjRDNkRCRUY0MjNBOTFGQTBCRjI1RgorOjEwMTZFMDAwOEQyNjI3QzZERjQ0MUVDNkMxRkM1QTAxNEYyODlGQzg1RAorOjEwMTZGMDAwQ0I3REMzRjgzOUI3MkUzQUI3NTcyM0VFMkJGNkM4QTdFMAorOjEwMTcwMDAwM0VGMEZDODJDMDYzNzlCRDg1RTRFRDBCMDJDRjVERjc0RQorOjEwMTcxMDAwQkUxQzhCNzhGQ0UyRjk5REJCNzE5RkE0RkEyNUM1QzE2NAorOjEwMTcyMDAwRjdBQkMyRjg0MkMwQTUwNkUxMTA0QkVCMjBCQkEyMDYwNgorOjEwMTczMDAwRDcxRDFCODQ0MzBGRkQwQjdFQUM2MTdDOUQ3MkREMzU5NAorOjEwMTc0MDAwNDYwMTA3NTkyRURBQkY4OEVCNEM0MkY4MEFCODZEMUZFNAorOjEwMTc1MDAwQzJGOTRGRjAxQkYyMzNCRENGMjNENkU3NzVFQURGRERDOAorOjEwMTc2MDAwRkUzMDgzRUI4M0Q3NDRCQTE4RTgwMkVGNjczMUJDOUVBMgorOjEwMTc3MDAwMjhFNTA0MTQ3REIxNzUwM0M1N0QyNEJFRTRCQzBGMDdDNAorOjEwMTc4MDAwRjU4ODE2RUYwQ0UyQjFDQkMwRUYyRjg2RUJDQjc3MDREOAorOjEwMTc5MDAwRkMwRUFDNEFDOTZFMDNCODFEREY0Q0NGNTQxMkJEMUEwMworOjEwMTdBMDAwNDNDNjkzNzQyM0M3MkI3QTZFRkE3NUI4NUVFODNGODAwMAorOjEwMTdCMDAwRkRDQjcxRjdGQjYyOENEOENGN0VDNkY5MDNFOTEzRTU0OAorOjEwMTdDMDAwQTdFNENCQTI4NjM5RDc4REM0NzNCRkJFMkZFQzAzODZBNgorOjEwMTdEMDAwRTE3QTM5REQxRUNFRTBFNzdGMzRCNDEzQTBCREQ2QTY5MgorOjEwMTdFMDAwNTBEQ0Y5ODBGMEU3MEZBQzdBMjVCNjNDMDQ0RTg3NDQxNAorOjEwMTdGMDAwM0I0OTY3Rjg4N0YxMjgzOURGM0Q0RTFFQzcwRDlGQjc3QgorOjEwMTgwMDAwOTQ0MzcyREU0NUY3Q0NCQTBFQkZDQkY5NEI3QTk1RjQxMAorOjEwMTgxMDAwMjlFMTI4RTk1NERFN0YwQkE3NTdBMjM1QTkzRjU1OUQ0MgorOjEwMTgyMDAwQkMyN0ZENzg0REU2NTc2NkFGQURGN0Y3RjBCQ0I0ODM0MworOjEwMTgzMDAwMEU4QUYzREJERDQ5OENDN0VCMUI1Mzc3ODVERUY3ODExRQorOjEwMTg0MDAwM0Y1QkE4REUwOUQxMjdDREM2MTA3RDIyRjU3RjREQTJEMgorOjEwMTg1MDAwNzYxNEYxNTU5Q0M5Q0Y5NTFDNjNBREU2MDJFODc3RjE4QgorOjEwMTg2MDAwOTFDRUM5Rjg0RUEyQjQzQkFGRkMzQUEwQzY2MTFDNkE0NworOjEwMTg3MDAwM0IzRjdGMjZFMUJERjhDNDJFQTJGQjZBNzEyRkE5RUM4NQorOjEwMTg4MDAwREUwRjRBQzYyMjdERkZDNjQ0RkIzMTY1QUIyNkQxRkQ4MworOjEwMTg5MDAwRTMwNTlCRTZFNjIxRkRFMDdEMDY5NEU3NDczNzhFMTlEOAorOjEwMThBMDAwQ0Q5RkYzNzIyNENGQzQ3QjBEMUIxRjlDNzkwQjdDOUZCMworOjEwMThCMDAwRDdBNkJBNDlBRTQzM0ZDOEFGNjU3NzhFNjY0ODJGMDdCMworOjEwMThDMDAwQTNCQTRBQzZBM0JERkU1M0Q1ODFGNkZBODQ0RDYzRUU5MgorOjEwMThEMDAwQzZGQTEzRUNGREUyNzEzRERBQzYwNENBNkJDNjM4RDIxMworOjEwMThFMDAwMEJEMkNFOTVFN0YyMUE0QzlDMUU0NjY1NzJGRUI5QTQ0NworOjEwMThGMDAwMjc1NUM0NzlCQzg2QzFCODdGREVCRDIxOEFERTQxMkE2NgorOjEwMTkwMDAwMzU4QjdCOUNBRkE1OTAzRjUxNjNDNjJCODU3NDJGOTQ3QworOjEwMTkxMDAwRUNCMEY5NjY2NjRERTNFNzlEQUQ2OUYwN0RBRkE5RjNFNAorOjEwMTkyMDAwNEVENDFGN0JFRkI0OEZBNDczRjVFQTc3NzlFNURDN0VBNAorOjEwMTkzMDAwRTZGQjg1MDlGQTc3ODdFNDNDNDY4QUYxQzNGQjkzRUQyMQorOjEwMTk0MDAwRjc4OEYzQzYwN0M1RkM4RjM2RkU2NjI2RUFCRkEzOUI2MQorOjEwMTk1MDAwMDczOTcxREQ5RkJGMTY0NUU3RjAzRjBGN0JCN0YwNjI5NworOjEwMTk2MDAwRUY2OTAxREQ4NkREODM1QUM5RTU0NUE2RkU5Qzk2QTQ5NAorOjEwMTk3MDAwRjNGM0RFNTNGQTI4MzE2QzNGRTBEQ0U3OEI0RUQ0MzFEMQorOjEwMTk4MDAwQkE0RjZEMDE1Rjk4RUM5OTk4RUZCN0UxQjlCRUNBMTZFRQorOjEwMTk5MDAwOEIwM0VGQjMxQzQyQkFBN0YzM0MyQUJGNzc2QkU1N0NGRAorOjEwMTlBMDAwNzA2OEVCNDgzRkZBOEQ5NTFGRjFGQjQ1QkJENkRFNDNDRgorOjEwMTlCMDAwRTcwQTJBQzBBRUM0QTM1NDNENzZGMjQzNkI2NzIyMUJFQworOjEwMTlDMDAwOUM3MjdCNTdFMzNCMkZBNzM2RjM3MzEwQkRERTJERDhGNworOjEwMTlEMDAwQkI2RDc3RThCQjA1MTc2QjFGNUZBODVEMkNFMzBBMzU2RAorOjEwMTlFMDAwOTlGQTdCRjExMkFFRDIzRjdBMDNGMDNGNkU1NDEwNEU1QgorOjEwMTlGMDAwNUZENkNEMjdCQkY4NDQ5RDk3RDI5M0NBODEwNzI2MjA5NgorOjEwMUEwMDAwREREQUUzRThCQ0ZFRUZEQjFFNTRGMTlEOTVFQUVEMjM0MQorOjEwMUExMDAwQkY0M0ZGNzZCQzJEQ0U4MUZDRkE2NUREMEFEQUVGM0NEMAorOjEwMUEyMDAwNTE1NzRCNjlGMDVENTczRkE1NTc2RUVGQTA3NjVGQjZGMworOjEwMUEzMDAwOEQ2RUM3N0JBRUFGREJFMjg0QkMwRkRGRDdFMTc4RUMwNQorOjEwMUE0MDAwRUJGRUFFNUNEN0IxOUY3MjdDQ0E3OTFGREIzQzM3MTZDOAorOjEwMUE1MDAwRDdENUYxNzg0MkZCMTU4OEM3OTgzODA3REE3NzU1RTI3MQorOjEwMUE2MDAwOUNDN0UxNzVEQzdFM0U2MjhEN0I2NjJBOUUwRjU5N0ZBNgorOjEwMUE3MDAwNDMzMkJFODM1M0QxNzFFMzRDRkM1RUY5OUFFMjQwQkIyMgorOjEwMUE4MDAwREZGRERBRjQ1ODhDQTM3RDY2RUM4QUM1N0I0RDlGQURGMworOjEwMUE5MDAwOTNGN0ExRkNGNDFFRTlGODYyNDZGQjRFRTMwMzQ2RTYyOQorOjEwMUFBMDAwQ0FFMTVCQ0M0ODI3NTc5QzMwRDJCREQzRTNCODFGODUzMQorOjEwMUFCMDAwNzE4RkVGQTIyOUVFQzFDNDNFNTNDNUFCM0M1RUQyRTNBOQorOjEwMUFDMDAwQzcwQTNGNkU4MjU4Rjc1Qjk5NEVCOTdGNDBERjhCQzZERAorOjEwMUFEMDAwRjFFRjlGQUZERjM2MERGQjNCQkFEMUU0QzA3OTdGQjlBMAorOjEwMUFFMDAwOTFCRkNGQjAxMEZDMkZCQzlBNzI2NDMzRjc2RjE2QjY1QgorOjEwMUFGMDAwMkFFNDBGMUZERDBDRkExOUQ2NTVCREQ0QTRGMUZCOUFDOAorOjEwMUIwMDAwN0FGQTJCODI3MjNDRDcyOEU5NkZBMUU2MjdCQTBFN0ZCQQorOjEwMUIxMDAwM0YyMzlFQjVEMkJEQUUxRjhCMUUwMzk5N0EzRkFEODc4MgorOjEwMUIyMDAwMEVGQkMyQkY4MDEzRjIyREQyQTFDNEYzQzI3NTdDREZCRAorOjEwMUIzMDAwRENEOTNBQjIwMEU5NDlFMjVEQ0EwNTc5NUZBMUMxQ0NCRQorOjEwMUI0MDAwRjg3QkE1ODY2OEZBM0Q4MEU5MzY5NzQ5ODFGNURGOTBGNAorOjEwMUI1MDAwRDgzNTExQzVFN0IwMkM2RTdGQTg0NTA2MERFRkExQjFCMQorOjEwMUI2MDAwMDY0QkM0RjdBOEZFMjZFNEU4OUMyQzQ2RTkzNzk5REMyRQorOjEwMUI3MDAwNUU5MEY3QjE2NDBBMEJDOTQyM0QzRDNEQzZGOThEMEIzRAorOjEwMUI4MDAwQUExQzVFQkY3NDlBMTFFNjNGN0Q4MkYzQ0UwMTZFQzAzRgorOjEwMUI5MDAwREJGQTlGNEMzMzAyREQ0RTFGRUQ3Q0I5M0ZFNEJCMzNEMworOjEwMUJBMDAwRUZFMkY5Q0I5RDYzNEM5MEFGQUY1RjMxNkQyMkQ0QjdCQworOjEwMUJCMDAwNjc2OTg3MzI0M0M2OTFGREMyRjdDRkYxQkIzRkMxN0I1NgorOjEwMUJDMDAwMENEMzFBMzNCRjFGNzU1MkU5MUVCMTIyMjc1OEZGN0Q2RgorOjEwMUJEMDAwODVFREZGQkQxMkNDNzc5OTE4QkQwM0YzNERBNjlDN0YxMAorOjEwMUJFMDAwRTQ3NDRDOTY3NjNBNzM0Q0VGRUZFNThDQURBMkYzNzE0QQorOjEwMUJGMDAwM0U3RUJGMDVGRTNDRDY2NEJDN0ZDNEU5QTk1Q0RFNzdBRgorOjEwMUMwMDAwNjlEMkRGNzc2MTZFN0VGRjRBREU0MzkyRjc4QzJFMDk0MAorOjEwMUMxMDAwREU5RjVBN0YzMUY3QTc0RTlBNjBCRDcxQkRFRkIzMjlBMQorOjEwMUMyMDAwRUQ3RkEwRjdCMDFBN0NBQzJCOEFGMEEwQkZCRjUyMUQ4RAorOjEwMUMzMDAwQzNERkY3NUJGNkYyMTdCQjkwQUMxNjQ4N0IwNTk1NkREQQorOjEwMUM0MDAwNUVGMEZFM0U0QkU1RkJGRTc3MEEzQUZDQkM4RTBEMUNCNworOjEwMUM1MDAwMDhBQzdDN0Q2NzY3QUMwQjI2N0I2MjVBNjAzMEYyQjdCQworOjEwMUM2MDAwQ0JFMkNEQzg0MjNGN0U3RDQzRTZCMjQ0QkNGNzY5NzEwQQorOjEwMUM3MDAwNEY4NUZBNDdGQ0ZDNUVFNTYyNjE2RkIyOEQ0OTgyQ0YwOQorOjEwMUM4MDAwRDVDMEQ1NTA2RjRGQ0UyNUY0N0VDM0EwMkNFRTQ3OUMxNworOjEwMUM5MDAwQzgwOTY0RTM3QjNBQkUxQ0VFREY0MDNEM0FCRjU2QkM0OAorOjEwMUNBMDAwRjI5QTI0QUM3NzYyRUIzRDAzMkIwMDZGMTY3Q0JGQ0QxQworOjEwMUNCMDAwNDkyOUMzRkI0RkQ3NDJERkUzOUNGNEFFMUI1MzY5OUYxNgorOjEwMUNDMDAwRDY0RkZENjFCRDU4RDRFQkFFQjlBOTNDOEVDRUVGQ0Q1OQorOjEwMUNEMDAwNDkzQzQ5RjhGN0MyMEI0QzAxRUQ1MTgzOTU5OTcwRkVEMAorOjEwMUNFMDAwOTdCMEY1MEVFNDUzODkxRkY5RkVFOUIyOTc3OUZDNjRDOQorOjEwMUNGMDAwOTlEMkQ1OTg4MEY5RTcxNTNBRkZGNkI5OTVERkVCRTk2NworOjEwMUQwMDAwQURFNzM2OTkxMUQ0RjNEN0NGRDVCRENGMjNERjE5RkQ3OQorOjEwMUQxMDAwQjFFMzQwNTNCMzg0N0MxOUM5NDY4NkJFRTM1QTI1REE0MQorOjEwMUQyMDAwNEU1MjRCNURGOERFREJCMjI0MkJCRERCQjFFQzg5MDFGQQorOjEwMUQzMDAwQTQ0RkQ4REI3N0IwRDA3QTZDN0QwMkQxQzdFQTFDOTU2RQorOjEwMUQ0MDAwRTBCQ0EwOEREMUJCM0IyNTZERTk3NDVFNzE2QTlCOTNBRAorOjEwMUQ1MDAwRDJEODMzQTlGNEZERTgzMzdGQ0NFNUYyODdFM0ExRTRFMAorOjEwMUQ2MDAwQkY1MjBBRTk3Q0QwN0YwREExOTRGNUY1QUVCMENENEEwMworOjEwMUQ3MDAwRjc2ODk3RURFNTdBNjlEOTREMkFDNTI3OTlCODFGRUUxRQorOjEwMUQ4MDAwMTFEM0YxRDg5QTI4OUVFMzYxOTFERjhGRjVDOEY3NjNFQworOjEwMUQ5MDAwMzVEMzM5REY4Rjk1RjBCNTA4RkM4NEJGMjc3QkQzREVDMAorOjEwMURBMDAwRDFBOUY0MUVBQjc4NEY3NkI2QThENzI5RUU2RDg1QkZDMgorOjEwMURCMDAwMkI3QjRGRUM2NDdBNTc3NkI2NTYxNUYxNUQ1OUEzMkZGRAorOjEwMURDMDAwQ0E4REY2QUQyOUQzQzZERjZCRjA4NkJGMzNEQjY1QzRBMQorOjEwMUREMDAwNzVDRkNDRTdFRkNDREUzNDNCRTQ1RDA0RjhDRjk0RkY2NQorOjEwMURFMDAwMTVDOTY5NTM3RUFGRjc4MTRDNDhERjE2OEZCRTdFQjNBRAorOjEwMURGMDAwQzRGRjI1RUM5MjczQkVFMzlCNjlBNjc3REU4Q0Y4OUU0OAorOjEwMUUwMDAwMzNFNDY3OEE3NzdDRDE4RTQzRkJGQzk0QzZERjk1QjNCRAorOjEwMUUxMDAwODg3N0E2M0I1OTZFMkFGMkZEQzVCRUQzRkNGRkRCQkIxQgorOjEwMUUyMDAwQ0NFMUVGMkY4N0JGQjc3Q0Q5RTY2NUJBRkNGMEQ2RkZDRgorOjEwMUUzMDAwRDBENUJGQkM2REE1QUU3QzY0NjA4REFFN0NGNDlFNUZEQQorOjEwMUU0MDAwRUFGMjYzM0ExRkQzRDUxRkJCRUYyOTVERjkxNTVEQ0ZDOQorOjEwMUU1MDAwRUFDQTI3MUM3OTQ5OTdCRkIyRkI3N0JBRkE1NzlGRDlDQworOjEwMUU2MDAwQTFDQjE3QjAzRkVBRUExNzU5M0ZEMEU1MjczOUZFQTFDOQorOjEwMUU3MDAwQUI3RjRERUE0MTVERjlCNUFFRTNCQUYyMjk0MzRGRUJEMgorOjEwMUU4MDAwRDc2M0Y0RkUwREU1N0M4OUZCQkY3NUVEQTYzMUQ3MkYzNgorOjEwMUU5MDAwRjBGREU3NTk4OTA2N0FBRkUzMUY1OUMyN0YxMTc0Rjc0NQorOjEwMUVBMDAwNTdBOUI3MDdCMjZDOTQ1RjkzRDRGQzAwRDE1RDlCQzI3NQorOjEwMUVCMDAwREYxRjBFRDM2M0M2RTMxRTBERTM3MUVDMTU3RUZGMkIwRgorOjEwMUVDMDAwMEVFQzNFNjNDODc4RjE5QTE1MUNDMjYwM0VBMUQ4QTEwMQorOjEwMUVEMDAwQ0IyNzc5NTI3NUY1NTM2NkJCNzRFNTY5REVBMUJBRjI3QQorOjEwMUVFMDAwOENGOTZFNUQzRUFCNzY5Q0FFN0VCRjE1OUEyRTlGRTM1RAorOjEwMUVGMDAwMkJENkQ1MUZEMEU0RDFFNTA3QjVDQ0Q2RDUxRkIyQ0VCMQorOjEwMUYwMDAwQUIyQkJGQzQzRjVGNTc3RUQ5RTY1QTVEN0U3OEVCMEFBNAorOjEwMUYxMDAwNURGRENCREI3Q0JBRjI5MTgxMjY1REY5RTgzRDJEQkFGRgorOjEwMUYyMDAwRkM5OENFNzVCQUZBNjNGN0Y5NzVFNTU3NzQ2REQ2OTVENgorOjEwMUYzMDAwNEYzOEQyQUFDQjVGRDlEREE2QUI3RkY1OTk4MDJFNUY1MworOjEwMUY0MDAwQzBGNkVBRUExNzU5REZEN0U1MjczOUZFQTZBQjdGNEQ4MQorOjEwMUY1MDAwRUEwMTVERjlCNUFFQTNCQTcyNjlCNzRDMTlGQTk1RkVGQworOjEwMUY2MDAwQkJCMDYzNEFEQ0ZGRDRCNUY3MTU4QTc3QTU1RjUyRENCNgorOjEwMUY3MDAwMEQyRTU4NEY3NjdGQUVFRjQxODA0NkUxQkI4ODNFMEY3NQorOjEwMUY4MDAwQzU3RDlDNzhCMDBGRTUxNERFQkI3NkYyNzMzMUE1MTRFNQorOjEwMUY5MDAwM0Y0QTI0M0I4NzU0OTEwQkNGRTk4MDFEMTA4QkRFNTVCRgorOjEwMUZBMDAwNEUwRURBQzkzMTQxN0IyQ0YzNkNDODM5QjlGM0Q5NjNEMQorOjEwMUZCMDAwRDc2NDMzOUFDNzVERDlERUZDRUMyNEY0M0ZCNjRFQTY1NQorOjEwMUZDMDAwNzdDMTk5NkYzNUNFNDNCRTczRjc2RUQ4N0JDODMyQkRFQgorOjEwMUZEMDAwRDY3QTg0MTk0M0VDQkZCRDUxMkQ5OUEzQ0VFMUJGNUZFMgorOjEwMUZFMDAwNkIzREMxRjA5REU1OUU3RTQ1QkM0MjgxRjUyRDBCRTkyMAorOjEwMUZGMDAwRkYwMUYwMTc4QzAzMTk2QkE5MDNCRUMxN0RFMTNBMDdGRAorOjEwMjAwMDAwRTUxRkFBNEJBNUZDQzM3NTJFNEFEN0Q1MERBNUY0QjE4MworOjEwMjAxMDAwM0EzNzk1QUZBRjFCNDdGOTI3RUIzNENBRkJFQjhBMjk1OAorOjEwMjAyMDAwN0RBQUNFNDNERjM3RDZDREE2RkMzM0UwMTc2M0JBMTlCRAorOjEwMjAzMDAwRkM2NDRDOUYwNTdGMTdDQkI3ODBGRjhCRjkxN0VBN0NCOAorOjEwMjA0MDAwOTRCNkQ2MzVEMUY3OTdFQTVBMjhCRkJENkUxREU1N0YwNQorOjEwMjA1MDAwNUJFN0E3QjRBRDZFMzNBNUJGQUI2QkE1RjJGNkJBMzY5RQorOjEwMjA2MDAwQ0FCRjVFMTdBMDdDQTA2RTBGRTU3N0Q0NzU1MjdFNTc2RAorOjEwMjA3MDAwREQzRUNBRUZBRUVCQTI3NDRGREQxMTRBREZBQUVCQTYzQworOjEwMjA4MDAwRjJCN0VCQ0U1MEZFOTg4OEI3MkVDRjU2NzRGNzk1NjQxMgorOjEwMjA5MDAwNUVCRUM3MjBFREJGNjk2OEJGMjM3MThDMzM3REE5QjNENQorOjEwMjBBMDAwREZDM0VDRTg3MDdDQzg3MTgyRUYyNzBDN0VBQTIxQzRFNAorOjEwMjBCMDAwN0ZGMjY1NzNGRjRBQkVDNzEwRkU4RTAyMTNGNkE5N0MzRAorOjEwMjBDMDAwRjc1NEJFRDc1MDI5RTY1NTI1Rjg2MTBDRDJFNzUwQTI0NworOjEwMjBEMDAwQ0ZCNzJGQzY1RjkwRkVBMDJEQzlEQjQyRjQ5OTY1RjAwMworOjEwMjBFMDAwOTEzRjZDRTNGNzg5MkY0RkYyM0U5ODNEMDZGNzBCMkI5QgorOjEwMjBGMDAwNzZEMzc4MEUzN0VEMUI5NjU4MDI0OUIzNzJFOTlENzA3RQorOjEwMjEwMDAwOEFDQkY1MzU1RThEMzhGN0RENjdGOUVCNDczM0QxOUUyNQorOjEwMjExMDAwMkVGRTQxQTU3N0I2REUzNUQ5NjdBM0ZGRkY4Q0MwQzM3RAorOjEwMjEyMDAwMzNEOTA2NURCQTJEQzlCQjA5RTdGM0FEQkRGNjM2MDM1OQorOjEwMjEzMDAwQ0NGRkRCQUI5NjNFNzM0NzRFRDA0RkJFMUU1RDRERjBERAorOjEwMjE0MDAwNkZBNjMzOTc4OUNFMTUzMkVEQ0QxQ0I0OUJDMEIwQzJCQgorOjEwMjE1MDAwRkMyQ0U2QTM3NDVDQTJGNzA1RUNFNzY2MzBCODMxRUYxRgorOjEwMjE2MDAwMUQ2RkM5OEVCNEFFRjA3OUJEMkFGMEY1NkFCNjQxOTdGRAorOjEwMjE3MDAwMUU0OEYyQjYyMUZDQkVCNTZCMzRBRjc3QUZCODY2MzBGRgorOjEwMjE4MDAwQUU0QkNFQUJCRjc4Nzc2NDFBRUI3RTEyRTdGN0VENkIwMAorOjEwMjE5MDAwNUYxRDU2MDYwNEUxMkZGRDcxQkFENzhGNzI2Q0E5MjIxQworOjEwMjFBMDAwREVCNUVCRjU4RTAwOTU5N0RFQTk5MDdEMzYwN0ZDMTkxQworOjEwMjFCMDAwREMxRjkyRUYwNjlDQUEzNUQxM0JGMkY4Q0UwMEVFOUZEMQorOjEwMjFDMDAwOURBQUZEQ0M4NkU0MENGNTE4RUU2RjM0RTAwMTFEMjhDNQorOjEwMjFEMDAwNkZGODI5QkY0RjVGOEFFRjYyOENDMjc3MEJBQ0JDREYxMAorOjEwMjFFMDAwQkIxNUEyQkJBNEU0MUM3RUZGMTlFQzNERjI5RjEyQkIwMQorOjEwMjFGMDAwRTk5RTFFRDBDOTlGMTE2RTBCQUY1MEU5REVGOUJCMDZGOAorOjEwMjIwMDAwRkY2MDg1RjY5MzJCQ0MwQUNDQUYyQTExRThBMzdGREZDMQorOjEwMjIxMDAwNzRCMDQ0REMxNzkwREY4MUJFM0U0MUI4N0RGOUVBRDg0NgorOjEwMjIyMDAwQTExNDdGN0ZGRDBBMTdDMkFCQzFDMEVGMEZGOURFNTJDOAorOjEwMjIzMDAwRjlFRjJFMDkxMUFENEUxODRFNzE0NjY2NzRCQjMxNUUzMgorOjEwMjI0MDAwNTQyMkVFOUI3NEE4NkM0NUE0RjdDNDk1N0U5QzhFREU0OAorOjEwMjI1MDAwNERFNUVGRTczNTg0RURCM0ZDNTNEMEQ1M0YwNUJEOTU5MworOjEwMjI2MDAwRUNEODRCRUYwODJERDlDM0RGM0I2NEI5NURDMzQyREYyNworOjEwMjI3MDAwOURFOTU5Q0Y4QUI3MkUxOTE4QjI4RTlBQjYwM0ZDN0MwNQorOjEwMjI4MDAwMDVFQjFBMTY3QTlFM0M1RDhDMkZFOTQ4MzVEQkJEMUJBOQorOjEwMjI5MDAwNkNBMUYzRUJBMTZCRDYwRkU5MjcxRUU4N0EwMEQxRjUwQworOjEwMjJBMDAwNjFEQzU3OUM2NjcxQzVDRDgyQjQwQjQwODRFRkZCNzgyRQorOjEwMjJCMDAwN0ZFREEwRjM0MUYyOUNEMDNDRTZBMUI0MEFDODAwRTk0RQorOjEwMjJDMDAwRDhFMzVCNEJFRkI5MkVDNDVGNjJDNUY3NzhDNkNEQ0RCRQorOjEwMjJEMDAwQzY3QzBERUI5RTk4MEE3MEJCQTlBOUZFNEQ3QzBFRUY0MworOjEwMjJFMDAwODY5NkI1OTMzMEJFM0FDMzVGRjYyNkE2RDMzNzJBODdDMworOjEwMjJGMDAwRDE0RjA1QkU4OEVGODdGMTEwQTU3NjE1MUVDOUJDNjVDNAorOjEwMjMwMDAwNEJDMTJBREM3QTk5QTY3MjdDQjAzRjcyN0MwMERENjhGMgorOjEwMjMxMDAwQUFCM0Y3M0E4MTBGRDJGODNBMzQ1QTg3MUE1QkFDRTM4MgorOjEwMjMyMDAwODNEMjk1NEM1MzEyODNFN0REN0JGODYyRENBMjRGNzBCOQorOjEwMjMzMDAwNEI4RDE5QkI2OURGQkNFNjc1OEIxM0YxQkM5MDcxQkQ4OQorOjEwMjM0MDAwMUQ4QzY3NDg3RENEODhDRTE3QjE2ODM3RDYzQjI2RTgwRgorOjEwMjM1MDAwRkE1ODE2MjNCQTNFQTYzMEJBQTcyRUVENDg5NkVENEQ5MAorOjEwMjM2MDAwMUQzNTIwQTg3NzhGMTlGQzc5QjEwMzQ4MkZCQjcxQkRBQgorOjEwMjM3MDAwQkI1MzZGNzA2MTFDNkM1MUEyOTVERTNGM0QxNkVGQ0ZEMQorOjEwMjM4MDAwMEU3QkU3ODNERTIzOTI3MUFDMDc0QzNDQUUxNDNFMkZFQworOjEwMjM5MDAwNjVEQzZFRkU3QjE4NjZFNkMzRkQwOUZDRkRFMzNDRTRFQworOjEwMjNBMDAwNjc3QzM3NDdBMTc3QTBCQjkwRUY0RDg1MUU1N0E0RkVGMQorOjEwMjNCMDAwMUI0NUJGN0JCRUU3RkVBRTBGRDY4M0Y3MUI3QjhERTNDRAorOjEwMjNDMDAwMTBFMzQ0RjM3MUE0RkVFOEY5QkRFNTY0QTYxQjZGN0EzRgorOjEwMjNEMDAwM0ZDRUNGRUZEQTM1OUE3RkJEMjE5RUU0NEQ5QUQ1RUIwMworOjEwMjNFMDAwNDE3Q0M5Qjg4RUY0MDNGN0U0N0MzRTkwRkNGNUVGMUEwQgorOjEwMjNGMDAwMzJEMTNFQTc3NzA4RDBGRUJFOEFDQkE1Nzc0RDJFN0E4NAorOjEwMjQwMDAwNzdGN0REODIxQzhBREY0Qjc5N0JGRDM4MUVGRkJBNUVEMQorOjEwMjQxMDAwQzZCQkYyQzNFMjVENjFGMTE2OTYxRjM5RkVDNTk4REJCQgorOjEwMjQyMDAwODRFMzVFQzIzRTkyRjBBMTM4Q0I4RTdDMjNFMTVERkU1OAorOjEwMjQzMDAwQkVEMjBFRTE3RjlFMkE0RUNDNDUzQUZGNUQzRjU1NzdENgorOjEwMjQ0MDAwQUU0MEE2NkI0NDdDQjQzOUVDQkRFQjM1QjlDQjFDNzhGRgorOjEwMjQ1MDAwMUVDMEYyM0NERkVGQkRCRjMwN0E3RUU4MzlGNDI3MDdCQgorOjEwMjQ2MDAwRjFGMzI5RUVDMTA1OUIxMTRFQzM2Q0ZFNDI1MkNCOUE4QgorOjEwMjQ3MDAwRDE4NUYzNTZDNDNBMkU3MzAwOUMwRDY4NkY3QTQ0OUM0NAorOjEwMjQ4MDAwRDM2REU1RjFBNTg5QTQ5NzI1N0UyRjU0MkYzRjZCRjREQQorOjEwMjQ5MDAwQUY4Q0M2NzUyNkYyREYxOUIwQUZCMzkyREM1NDVCQjVEMgorOjEwMjRBMDAwMDAxRTg5RkU3MkQwOEM1NTQ4QjdDQ0U4MTk4QUUzNzRCNworOjEwMjRCMDAwRTQ0NTMzMUJENEZGQjZDMzRDRjFBN0Q3MERFNUJGQzYyNworOjEwMjRDMDAwRjNFQUREN0ZCMzMwM0NERkQwNkFDRjMwQTI3MURCRkFCNAorOjEwMjREMDAwM0RGRjVEQUI1NkZCODRDOUZDREQ0OTE2ODNFRjYzOEU3RgorOjEwMjRFMDAwNzRCMEE3NUY0NEU0ODg3QjYxQUQwQURCQzMxRjY5RDU4NAorOjEwMjRGMDAwNjJGMDdEQjc1NjAzM0I3RDM1Q0NFQjI1REJBODA3MkY3QgorOjEwMjUwMDAwMjcxMkYzQThCOENFNjcwNzdBRDdFMTNDRjI1ODJERTUzOQorOjEwMjUxMDAwRUYzNzdCRTY2RjgwNzFFRjc3NUE4OTJFMEEwNzdBMUVCNAorOjEwMjUyMDAwRTdGMzY0QUJBNkMyRkNBRTJBNTJFOEY3RDY1Njg5REZDMQorOjEwMjUzMDAwNzdCMEJCQTM3NUVGRUM3QUNFMEMyNjNERjE0QzNGQUVFNQorOjEwMjU0MDAwNTcxQjUzQjU0RUJDRDBEMTI3REMxQ0M2NkVEREZCNThFMworOjEwMjU1MDAwMkM5M0UyNzIxMjhFQTFGODcyRTRFOUYwRTUzNTg1RTI3RgorOjEwMjU2MDAwQUJFNzc3NkIyNEJFRjhFRkQ2NUMyOEJFRUFGQTMxOUE2NworOjEwMjU3MDAwQUZBNDQ3NUZBMTZCRURDNDVDQUVCRjFBQTg5NjIzMTc0QQorOjEwMjU4MDAwRkJERjExOUQzMTJDRjQ3NzAxMjQzRDRBRkE4QzQwOTdGMgorOjEwMjU5MDAwNEI3N0EyRENDRDMyMzgzMEZFNzlDRkQ0NjhEMjYzOTI0QgorOjEwMjVBMDAwNEUyNTdEN0U5Q0QzNDNBNzQzRkE2MzFDREVFNjk5ODRDNworOjEwMjVCMDAwQjIyMjlDNEUzMUJFMTU0QThGQTU3REQyMkQ3Mzg0RjI3NgorOjEwMjVDMDAwRTUzNEIwMTNFMjlDNjhENzFDRDlEODFBNDI4RkE1QjU2MAorOjEwMjVEMDAwNUYxOUI5OUMzODdCNzU3NDVFMzAxRTM3MkQ1RjYxOUYyMworOjEwMjVFMDAwODZFMjE1RkVGQjc0QTg1ODFGRDkzNTQ2RjJBNzI0RkNENQorOjEwMjVGMDAwMkUxNENFQTYxQkVCODdBMjlEQjYxQUVGMEQwMkJDOUEzNQorOjEwMjYwMDAwMTRCNzk2MDJGRDE5NkIwRkRDODFERjU3ODk3QkJCQkVDNworOjEwMjYxMDAwNjE2NjZFM0YwOUZFOTBGRDdEMzlBOEYwMzhEMkEzN0QzQQorOjEwMjYyMDAwRUM4OTk4NEFBOEY3NkRCMkMxODVDMDU5RTUyQTdGOTExNworOjEwMjYzMDAwRjg2RDVGMENCRDM3MTE5QkQwMzlGRjY5RTI5RjIxMEMwQgorOjEwMjY0MDAwRjdGM0JFNURFMEVEODdGQkVBRjcwMjlFM0VBNUZCMzk5RQorOjEwMjY1MDAwRkUxNEZFRUU2MTU3MEE3RjVGRDYyNURFQTFGN0E2RjJEMworOjEwMjY2MDAwRUY0Qzk0RkIyOTdGNDc0RTdGRTE1NzY4QTI3RTE3RDUzOAorOjEwMjY3MDAwQkZEN0RDNjI4REM2NzE3MkFDOEVBNzQyRThGQzZBMTFDRQorOjEwMjY4MDAwMUZGRjFGQzE4MDIzN0QwMDgwMDAwMDAwMUY4QjA4MDBGQQorOjEwMjY5MDAwMDAwMDAwMDAwMDBCRUQ3RDBENzg1NEQ1QjVFODNFMzMwOQorOjEwMjZBMDAwNjc3RTMzMDkyN0M5MjQwQ0Y5ODEzM0M5MjQ4NDY0MDI2NQorOjEwMjZCMDAwOTMwNDEwNDQ2NTEyMDIwRDA4M0FGQ0Q1MjA4OTBDOEE1NworOjEwMjZDMDAwREVBODI0OTM0MjZDQTNENzc3MzM5MDgwMDFFQzJEQTIyRgorOjEwMjZEMDAwQjU2ODc5M0FEMDQyRjFBRjM3MjhBNUExOEQ3NDEyN0U0MgorOjEwMjZFMDAwMkU1QTJBODNENTE2NUJCNTgxRkFBQ0I2MDU4Mjc4NUI4MworOjEwMjZGMDAwQkM5Nzk2QkJENkRBRTc2NEU2NEMyNjgwRjZCRUJFRUYwMgorOjEwMjcwMDAwRERGN0U2NUVCQkIzQ0ZERTY3RkZBQ0JERkVEN0RBODc5MQorOjEwMjcxMDAwMUM1OUM3NTgwNjYzRUM1MkJCM0MzRjk5QjExQzU5QTBFOQorOjEwMjcyMDAwRkFFMzZENUI3RDFGQjgxOERCRDAxNkEyMzI3RDZFODg5MAorOjEwMjczMDAwRjk0QjE5QjMxNjA1RTUyMEY0MzNBRjY1RkUyRTFCNjM4NAorOjEwMjc0MDAwOTdGMTM3M0Q1QTNFRTAxNDE5OUIwNEVEN0Q0RjMxMTk0NgorOjEwMjc1MDAwRkFBNUJCM0M4MjFGRkFEOUU3QzI3ODQ1OEM3RTk3RTE4NworOjEwMjc2MDAwQkY1QjE4MEI4RTI4ODc3RTNCOTg5NzRENjQ2QzlENkNFMQorOjEwMjc3MDAwMEQwNTg1QTFFM0REOTI1MTc1NTQ0QzE5RkE3Q0IwRkQyRAorOjEwMjc4MDAwMDY4MTlEMzY0N0M3QzVERjY5NzUxRTNEOENGRjU3QkQ2NQorOjEwMjc5MDAwQkZDQjhEMzU4NzhFNjUzMkQ2ODI3RDY1QzZBQUYzRTBDNAorOjEwMjdBMDAwMEY5Q0I3RDVCOEREMDRGMzRFOTY1MzY5REY5RkRBQUJDMworOjEwMjdCMDAwNDYzMEY3RjBGMzNERDMwNjBCMkY2NDJDRDQ2NkE2NzI5NworOjEwMjdDMDAwNDc5QkM0ODI0NkM2QkVEQkU2QTBGQUFFMzY5OUNBREQ5OAorOjEwMjdEMDAwNkQ0NTU0M0VERkU2QTFGNjE3REJBNjUwRkRGQjZENUVBRQorOjEwMjdFMDAwQUE3N0I1RDU1MEZERTUzNjFGRDVGN0I2RDU1MjdENUYzMgorOjEwMjdGMDAwOUI5RkNBRUVCNjA2MkE3RkQ0RDY0Q0VEM0Q2REFENTRGNAorOjEwMjgwMDAwOUY2RTYyQ0RCNDlGQTJBMDYzMDE5QzQ3RTc4MzQ2QUY1MQorOjEwMjgxMDAwMENGMDY5NTRDRUYxQTAzNzJGREQ2MzY3Q0M1MkE0NjM2RQorOjEwMjgyMDAwMjZFODY2MzlCNjg1RTE3RTJDMEU5RDM3MDRFN0IwREVEQQorOjEwMjgzMDAwQjE4NUREMDVBNTYxNzI3MkE3MzAwMkY2RkY5MkFENTMzNgorOjEwMjg0MDAwOTgwMEVERTJFMzRDODZFN0NGMDhDMTA2RTY2MTZDOTFBMworOjEwMjg1MDAwM0NENjI3OEU2MkNDRTVGODRBNTUxQUQ0NkY5NzRCMzc5MQorOjEwMjg2MDAwOUI5RDhDMTVDQUYzNkJEN0M0RDRFNUU0RjJGQkY2NDgwNAorOjEwMjg3MDAwRDFGQTE4Rjc3NkQxMEFFRENCNDIxMzM2REIwNUJFMEUzRQorOjEwMjg4MDAwOTZDNUQ4QkQ3MkI5NkYwREUwNTEzODhGMDUxMUVFMDNCMgorOjEwMjg5MDAwNEU2MzY4MDdCNEFGQzBGMzEyNzFGRDEyQURGRjY2RDY4OAorOjEwMjhBMDAwRUVEMEMxRkFDN0M4QzY3MjI2NTBGRjMwQjM1RjdCRkZCNworOjEwMjhCMDAwNDY1OUE2RTdGMUVGNURBOTlGNkVFMjM1RjU2M0ZBMkI2NQorOjEwMjhDMDAwOEM4N0VEQzIxNUM2MzEwQjBCQ0QxMTU4RkIyNjAzRkNDRQorOjEwMjhEMDAwMEYzQzBGNjZEODQyM0IwMTVFOUQwNkI2Q0MwNzcwRUZGOQorOjEwMjhFMDAwQjRGMEYyODg5M0QzREZCM0NFQUFGMTRFQTBBM0YxNEU5OQorOjEwMjhGMDAwN0VBRTlEOTZBMDU0ODVGMzk3RUEzQzNCMTA5RDVCOUQ3MAorOjEwMjkwMDAwM0ZDRjgzRjlCRUZBQkFDODM2Q0E1MUZDRUM0MDNDODBDRQorOjEwMjkxMDAwRjcwQUM2MjQ3QjcxMUVGNjhGRTY1MDAxQ0NGM0E1MzE3MQorOjEwMjkyMDAwMkY3NUE0NDFCREUwM0IxRThGMUVGQTZGNjIxRTJCRTI4NQorOjEwMjkzMDAwNDlGMDUxMUREQjA5RjUxNzI2RTZBN0NEODdFRTI1OTM1MworOjEwMjk0MDAwN0U5MEU2MDc3QzM5OEQ3QzAwQzYwOTMxNTY4M0Y4QjY0NworOjEwMjk1MDAwNjZERDNENjNGQUExRkNEMzA5RkYxODA5RDZGOUI4MzI0OAorOjEwMjk2MDAwQ0Y3NjQzQTQ5OUNFNzM5MjhERTFCRTE5REI5Q0E0NzNGQworOjEwMjk3MDAwNDA3RjA3MUNEMjc1OENFOTQ2RjFEMjY4OTA2RUM3N0UwNQorOjEwMjk4MDAwQzY3NTQ2MTY4NEY1MThGRjcyOUREOTA3RTNCNTVGMzQwNgorOjEwMjk5MDAwRDUyMDFGNjEyQzkyQTQ5QjAyQ0YyRDdFMjkxNTlFNkZGRQorOjEwMjlBMDAwMEVFQTg4MkZCNENCQjY5MDAwRTM2RUIyOTUxRjk1QTFDNgorOjEwMjlCMDAwMUU5NDc0OUUwMjg0QTM1QjQ3NzBFQ0IwN0QzOUE0ODc5QgorOjEwMjlDMDAwRjE0NDYxNEQwM0NCODdGNTRBMkY5QjlERjAzQ0U0RDY0MworOjEwMjlEMDAwNDk0OEU3MjFFRjgyMUFBQzA3RkRBMkE3NDA1NjE4MDQyOAorOjEwMjlFMDAwQjZGQkQzNDIxQjcxNUMzNkYwRDMwOUQ4NUVDNzNDMDhGNgorOjEwMjlGMDAwODc3NTk5RkZERTk3MDRGNUY2QzU5MjQ3Q0Y3QkNCRTI0QQorOjEwMkEwMDAwNjRDNjQ2RTE1RjMwNjVCQkExN0Y2RDEyQUU2MzA5RUYxRQorOjEwMkExMDAwMEY3Rjc5RTYwMzFEQTY5OEY4Rjk3REEzNzdCNjk0NTc0MgorOjEwMkEyMDAwOEFDRkM1NjAzRkU3NEJDMjY1MjA0NEQxRTAzMTdCQTAyRgorOjEwMkEzMDAwN0RCQ0FEQkNDNjBCQTU5ODVDNkU5NjYxOUYxRDUyQjk1RQorOjEwMkE0MDAwNzkzOUVEOUZEOTE4Q0M5M0NFMzg3RjZBOTc3NDM1MjFBOAorOjEwMkE1MDAwQTVGRDJFQTQ3NzkxMUQ3MjREMjY1MkEyRjYwRURCOTY4RgorOjEwMkE2MDAwNUU4NDg3NzgzNzYzNEUxOUQ3MDdGM0E5N0MwRkUwNjEzRQorOjEwMkE3MDAwQ0VCRkUxQTgwQ0ZCRThCQzI3OERGNjIxMEExRUFBQjM0NQorOjEwMkE4MDAwQkI0NTVBNzc5NjZDMERCM0YxNzA4RUM2Nzk0NzE5RjAzNQorOjEwMkE5MDAwOEYyQ0YzRkQ3M0IxM0VBQTQxRkNBMDNGODY0RjhGRjQwQgorOjEwMkFBMDAwNkJFQjE5QjVEQTdBM0E4M0JBMzkzQUVGNkYxNEY5MTE0OAorOjEwMkFCMDAwMEZCNzc4Nzg4QzkyM0E0RUUwRkE0N0Y5NDU3QTE4QkYwQQorOjEwMkFDMDAwRkVBN0E0Mjc1MjJCMTlBRUQzNDZFQkNDQjRERDU5MDk4RgorOjEwMkFEMDAwMTA4MkExN0Q2QjEwRkZGRUQ2NzU4RTk3MTY5ODlEMzBFMworOjEwMkFFMDAwRkY3OEJCMEVDMUM5MjZCMDgxQjUzOEVFMjYwNURGM0JBNQorOjEwMkFGMDAwOURGQzNDQTM3NEE1NTdFOTcyMjREMkU1OTg1NjFEMEJBMgorOjEwMkIwMDAwQzZDODFENjdEMENBODIzMUYzRTU3N0E2NjlFQTA1OUI3RQorOjEwMkIxMDAwQjMzNEZEQzc2RUNERDNCNDhGMEIxNTZCREE0Qjc2OTdGQworOjEwMkIyMDAwNkJFQUE1NURENzZCRkE0RkU4QUVEMkQ0Q0JDMjczMzQ1MworOjEwMkIzMDAwRkQyQjhFMkVEMEQ0Mjc0NTZFRDdGNEJGRUVFNDlEOUFBMAorOjEwMkI0MDAwRjZBOUZERjc2OURBQTc3REI0NEE1M0JGNzFFMDIxNERCQworOjEwMkI1MDAwN0YyMEUzODZBRTA0NzIzMjU1RTE1NzFEMEU2RkM0OUI5MQorOjEwMkI2MDAwNDA5RUFCMjU5M0M0ODFDMUYzMDBERTY5NzIwMDY2Qzc0NQorOjEwMkI3MDAwQ0M5N0VDQjEwMjEyNDdFQkEwOTk0ODFGMjYyOTc1OTIxOQorOjEwMkI4MDAwRUJFREYyNUFDNEU3MTQyM0UxQjM4OEYyMUNFQUFCMUU2MgorOjEwMkI5MDAwMzQ4NjRDODhGRjM3Nzk2NEU0MkYyNjI3RTc2M0ZCMEFFNQorOjEwMkJBMDAwQkRBMzlEQjBBRUNBMTQzM0M5MDVEMUM2RkI4OUI2NTlDMQorOjEwMkJCMDAwQTRBNzhDREUwQTdDQTkwMkVBMTIxQjZDNEY0MkZFREM0MQorOjEwMkJDMDAwMTZGNEI5NUNEMTc1NUJBNENEMENFOUI3MzJBNTg2RjVENgorOjEwMkJEMDAwREJBMkVGOEI5Mjk3Rjk5MzcxM0U5OUVCM0Y1MjkwRkFGQgorOjEwMkJFMDAwNTk2NDc4M0Y2NjVGMDc3NDNBNjY0MzNFREUwQjcyMDJCMworOjEwMkJGMDAwQzZFRjRBQ0UxNjkxRkVCQUZFNTI1QzRENjVGMkI0NTk0QworOjEwMkMwMDAwODhFRjY1MTJGQkNFQkY0MEZGMkU4MTFENjVBMDI3NzVBMgorOjEwMkMxMDAwRTlEODg1RTlCMEVGOTc2REU1OEY4M0I4MDZENkU4RDM5QworOjEwMkMyMDAwMjNCRjlCQ0M5QUE5MUNBRDYzNTYyQ0I3MEJGREFCMTlFNworOjEwMkMzMDAwRjQ3MzM3OUZBODFBMDlGRDlFNzdGOUJEQjhFRkFGODNFQgorOjEwMkM0MDAwMEU4MUZCRkFGQTc4QUU2N0FEQ0I5QzIzQTM1RUQ2RTk4MgorOjEwMkM1MDAwRUMzQTlBODdFQkM5MDBCOTgyODQyMEZBM0NBODU3QThCRAorOjEwMkM2MDAwRkJCRDRGMzk0RjMxQUZCMzFGRTVERkFBNTRCMzhDRkEyOAorOjEwMkM3MDAwOTI2OERFRUNGQjAwRTBGNThDQTFGRkI5NzZBODc3MDgzRQorOjEwMkM4MDAwRDJDQTJFRTQ4QjBGREEzQzNCMTlFQThGMUM2RTcyQjI2QgorOjEwMkM5MDAwQUU2MjJEOENEQkI1QzYyQkE2NDI3QkQ3MDZFNkU5NDA5QgorOjEwMkNBMDAwRkFCMDU3QUU0RDg1RTcwNTM5Q0I3NTY5NDgwRkFFMzU5QgorOjEwMkNCMDAwNkJCMUFDNzNFNjExRkNDNkI5QjdFQkQyQTFCRDY0NjJDRgorOjEwMkNDMDAwNjUyRDQzRDkyQkMxN0NFOUMzRTM5MzNFNjUyQkMzRkQzRQorOjEwMkNEMDAwMzA5N0Y4MjFFMjk1NEUwNjNFMDM0QkFGNEM4M0YzODZDNgorOjEwMkNFMDAwNzkyRDc4REUwMjk1MDQwN0NCNDU1QkM4ODI3NTE3ODc3RQorOjEwMkNGMDAwOEJDNTJCODQ5MkEwNkU3Nzc5MDVBRjFCREZEQjRBRTc4QgorOjEwMkQwMDAwNkIwOTZCRjVEODJBOTdGRjNFQTQ3RkZCNUNFREI5OEE2RgorOjEwMkQxMDAwRTYyNzY4N0Q5Qjc0OUMyRTNBNTNFNTYzMjg5RjNCOUQ3NAorOjEwMkQyMDAwQUVCNDc2MzlCQTRFOTVBRjNDQTBFODZCRUE3Mzk1QUY3NgorOjEwMkQzMDAwRkMwRUNGMjAyM0FBREYwMDlFNkZENUU1QTM3RUI2OTlCNworOjEwMkQ0MDAwMjE3RkIyM0NCQzk5MjE1RTVCQTRBMENDNTAwRkZGQTdCMQorOjEwMkQ1MDAwMjBFMUI5QUFERkFFNTY2OEE2M0FBRkQ2OENGMkZBODI2NQorOjEwMkQ2MDAwQkQ5Q0Y0NTk0QkVCMkUzQUFGNzhCODU5RkE3NUNDN0IzMQorOjEwMkQ3MDAwMDVCOEE2MTQzRTRERjIxRDE4QjA1QzAwRjBFOUNCQjRDNgorOjEwMkQ4MDAwMzU2QzRGQTBGNzhGNTBGNDg1MEQ0MEM2MTE5MjU3M0UxOQorOjEwMkQ5MDAwMzNGMjZCODMxRUY0NTU5MjZGQjA2MTkwMDcxNzI0NDY4RgorOjEwMkRBMDAwRjI4Qjc1MzlBOUJFM0E5NUQ3RDU3MTU2Njc5NDhGQkMwOQorOjEwMkRCMDAwOTJGRTZERDk2QTY2RkU5ODdENkM4MDc5MTAyRUVCMkU5RQorOjEwMkRDMDAwQ0RBRjQxQjgzMjkxODg4MzZERkE4QjdCRkI0NkEwMkY0MworOjEwMkREMDAwRDVBRTE5QTFFODJCMzkzODM3OTRBMzhEOENFQzAyOEYyRQorOjEwMkRFMDAwN0Q2RTBERDI5REVGNjIxRTA5REY4M0NFMzQ2QUY3MDQzQgorOjEwMkRGMDAwOTlCRTk5RDY2RDUwRTU5MkVFRjIwNDVBQUI2QzU0RTU0QgorOjEwMkUwMDAwMzBBOUI2NUM2RUMxRkZGNzVFMTY5MEVGQzdDODMxNUVBMQorOjEwMkUxMDAwOTA1QzU3RTU3NkMxNjY2REZCRDhBRERBRkFCOEQwOTAxNAorOjEwMkUyMDAwRjdERjQyQjlCRjk4RkYwRDcyNDFEQkZFQjQyMkJGMTczNgorOjEwMkUzMDAwQTNGQzg2OTIyRDMyOTBEQzMzQzM4QTJFNzNCOTFCOTU4NgorOjEwMkU0MDAwODNDMDE3NzJCQkMyOTVDODQ2NzM1QTYyRTQyMUEzN0Q0MgorOjEwMkU1MDAwNjhFNDYzOTU0QjI2RkNGMzFEMTUwRDc4OEVCRThCNjBFMAorOjEwMkU2MDAwN0M1NDBDRTVDQkEzNEQxQ0RFN0RDNkU0RDA1QTc4RUYzNAorOjEwMkU3MDAwNTFCMDhCRkNEMDc1M0REODQzN0UyMEI1QUY4QjlFNUZBMworOjEwMkU4MDAwRDZBMTlENzU1NEVGMDE4QzFEM0NBN0Y4NzNGNUU0QTlGQworOjEwMkU5MDAwN0FBRkVGMkRBNDAzQzZGQTJCN0NDOTdDM0U3RkNDN0M5NQorOjEwMkVBMDAwN0RENjk0RjEwQ0VDOTY1RDg1RkU1RjYxQkY0RjZBRUNCOAorOjEwMkVCMDAwMTM5MTNGOTg3Mjk4MDFFOTEzRTc2N0NBRkNDQzg4RkEyRQorOjEwMkVDMDAwMzMzRkVGNEQ5RTM3OUIwRkMyM0ExRTM5Njk0Mjc1OUNDNgorOjEwMkVEMDAwQ0RENDFGM0JEQTA2RjU1NUI5MjJGMTMzRTlCQTk1Q0ZDNworOjEwMkVFMDAwNUE4MTBGNTRGRDFBREFFMTlENDc2NDc5MjRFOUU5NDdENAorOjEwMkVGMDAwMEQwQ0Y1RjQyQTA1OEZBQjE0RkJFQjk5MDIwMzhERkI0NworOjEwMkYwMDAwODkyMjVGQ0UzQTU1QkQyNzY4NDVGRDE3MkMwMjJCRUE3MgorOjEwMkYxMDAwQjMyNUJCODExNzZCQ0YzMzg5Qjc3QjQ5REYyREVEOEE5MgorOjEwMkYyMDAwNkZGNzMyQTRFMzYyMDU1RkEwNkVBQjg0N0E5OTUyRUYyQgorOjEwMkYzMDAwNjI0MkJBMDRFNzM4QTFCNkJGMEY0RDA5Rjc2Qjg3QURGRgorOjEwMkY0MDAwODg4NzdCMkM1QzdGN0I1RUMxODc0QzI2NzhDMkIwRkU3NQorOjEwMkY1MDAwQ0NERDM2NEYwOEZBMjVFQkQ5OUUwOEVDQzM3MzQ4M0MwQworOjEwMkY2MDAwMUQ3QkVFRTM3QkI0NzUzNzhCQTkzQjcxMUREQUZBQTNBOQorOjEwMkY3MDAwNzJCMzgwNzA3OUI0MEU3NDc0RDhCMjM1MkZEOUZFNjFGMworOjEwMkY4MDAwMDk0Mzk4MTcyMjdFQ0RENERCQ0FEMDlFNUE1NTY5NjM3NworOjEwMkY5MDAwMDg1N0QzQTlCMURGOEEyMEZGMzhBMTY3MjgxN0E0MjRENgorOjEwMkZBMDAwRjlCMTZBNzg1RkZBNjlCQTY3OEQxQzNERkZFN0RCOTA3QgorOjEwMkZCMDAwNzUzM0Y2RTQ2NTBGRUIwMDlFRkNGNTJBNkIwM0VBQkY2MAorOjEwMkZDMDAwMkZDMjc5QTIxQ0Y5M0VEOEQ5RDhERTA1RTc4QUY1OTczOQorOjEwMkZEMDAwQzFDRUM2NzIyRkQ4RDlGODdDMUZEOEQ5NThFRjA2M0I3RQorOjEwMkZFMDAwMUJDQjFGODE5RDhEQ0Y3QkMwQ0VDNkJBQTdCMDcyNzQ5QworOjEwMkZGMDAwMUU5QzRGQkRDRDM3NTM0MEI4N0E0NTU5MDJCQTEyQTIzNAorOjEwMzAwMDAwNzA2NjFGMTY2MUJENUZCODBDMDQ1MjI3QjE3RTEzQzBGNQorOjEwMzAxMDAwRjVGODE4OTlDRUQ3QzQ3QzBDRTUyQkYzN0JDQzg4OTdCOAorOjEwMzAyMDAwNTcxRkM3QUI4RUUzMzcyNDFBNjcwQThDNDM3NjgyNTk0MQorOjEwMzAzMDAwNDJCRjQ4MUVCQzMxMDI5RTlGNzlGMDU3QkI1MDVFQ0MwOAorOjEwMzA0MDAwMTNGQzFFNUM2RkUzQTREMzQ2QUUzRjBGMThCMUZGMzZFRQorOjEwMzA1MDAwMEJFMDNGRjBBMTFDODUwRTgyNTUwMDRGOTRCQkFGRUJGNworOjEwMzA2MDAwM0RFREQwRUJBNjE5QTc1NjY3ODBGRDVEOTVFNzlDMkYzNworOjEwMzA3MDAwNEU4NUZBRkRBNzJBNDY0M0JENzNDN0E2Rjk2OENGREY4MAorOjEwMzA4MDAwRjRCRDUzQUY2NDAzMEYzRTlCMzc4RkI3M0Y3RUVBNDJEOAorOjEwMzA5MDAwMEVCNDhGNjA1RjlCNUYwREVEMjlFOTVDM0U2RDEzNThBOAorOjEwMzBBMDAwNkRBQzdFNzc2QjFFQzdGMzQwRUIxNjkyNzNDMERGMTlEMQorOjEwMzBCMDAwQzJBMTNERDM0N0YyRjE5QzdEMjA2NTM5RjQwRjY0MEMyOQorOjEwMzBDMDAwNjRERTc5MDVGRTFENjg3RDkyRTQ1MDdCQ0FFRjQ5RkZGRQorOjEwMzBEMDAwNjgxRjk0MTcxRTkyMTdFQUJDQUFCQ0Y4NDRDMTNENTU1QworOjEwMzBFMDAwNUVBQ0IyRjBFQTYwM0Y3RjNFM0Q3RjVDRjFFQkIwNTBGQQorOjEwMzBGMDAwMDFENUQzMkRCQ0ZFQ0Y1NUYyNzFCNDdCMDAzRTY0RTcwMQorOjEwMzEwMDAwMUU0QzI5RkVDNjBENjg1N0Q2ODgxRTEzRDQxRkI3OTVDRQorOjEwMzExMDAwNUI1MERFRkNBM0MyN0Y2MERDMjBEQUYxQzE5OUU2RDAwRgorOjEwMzEyMDAwNEUzQzU0QkI0Q0Y0OThBNjhFNkY3N0ExRDJDNUQyOTQ3NgorOjEwMzEzMDAwNzUxQ0JBREUxQTQ2M0JCRkJEREFCQzAzRjVDOTJEQjYxNQorOjEwMzE0MDAwM0MxQUFGN0Q4QTMxODhGRTE1QjVCRUY2RkFFQkNEQThFNAorOjEwMzE1MDAwNEZBNEE2QTQzOUIxQUVGMkE3OEQ4MEY3NThDMjRGOEYwNQorOjEwMzE2MDAwRTM1NjI5REJBRDMyREJDMjdBRTRFNzY2QzMxRjYzRjVDMQorOjEwMzE3MDAwNjQxQjhCMTBGRTc4NzQ2MDkwMDBCRDE5RjMzOTVFNTVBNgorOjEwMzE4MDAwMzA0RjJEM0UzNzBBQ0Q0MTQ0QzY2REI4NzZEQzQ3QjI4QworOjEwMzE5MDAwOTFGQzBDOEM2NUYzNzVBQkZCRjA2NkYzN0RBOUZCNDhFNQorOjEwMzFBMDAwMzYwNjk1N0Q5MDlFQjRDNUE2MEJBM0JFQjcwNUY2ODVFMQorOjEwMzFCMDAwRTMwNUYyNjQ4MjRGRkNCRUUwRTdDMzcxNjc0QzUxRDY3MQorOjEwMzFDMDAwMkREREIwMTdENzMxNTNFN0VEQzBGNzBFN0Y1NjY3MDdGNworOjEwMzFEMDAwRjQ2MkIzNThCMzg4Q0ZGM0MxQTJGREQwNENBMkIzRTNERAorOjEwMzFFMDAwRjIxNUY0MEUxNEU0MUZDNkM4QUQ5QjdFMkJEMDdFRDgxQQorOjEwMzFGMDAwRkQ0NjNBOTdDRDA1N0NERjRGMUI0MzRFNDYwNjZFNjg3MQorOjEwMzIwMDAwRDQ4MkU0RTFGMUY3ODUyMUY4RUI2NTQ4NEZFRDY5NUU4MgorOjEwMzIxMDAwOEVCRkQyNDBDQTFBQzRERkQ0ODFDQ0I1QjRBRjcwQzI1RAorOjEwMzIyMDAwRjM4OEM3RTNGOEYzRDkwN0ZGMjk3MjQwOEZGMEJEREFCRQorOjEwMzIzMDAwNzlBQUU3QThFMjQxQkNGQzMyRTY0QkVBRjkzQTY4OUY3QQorOjEwMzI0MDAwREUyMjRFMDdBQTFFQzVDMENFNDkxRTBBQkZGNTMwOUUxQgorOjEwMzI1MDAwNUMxOEFEMUIxRDNFRDI4RjBENzY0RjExRkE2RkRCRkY1MAorOjEwMzI2MDAwQUE2RjQ4RTRCRkZENTA4MUQzOUExNDJCRTlDREVEMjkxNAorOjEwMzI3MDAwNUM2RkVFNEQ5OUEzQjE3N0FBQzFGRTExMDAzRkY0RTk0RQorOjEwMzI4MDAwQUMwQkU5NDgzRkUyNzZGMjdGRTk0N0EyODY4NEVCOEFGRAorOjEwMzI5MDAwRDM0NzQ3Q0NFNUZBQTgwNEZBNjg4Mjc5RDU1MjQ0N0QzMQorOjEwMzJBMDAwMzQ4MTlFM0FBODhGQTZDREUxRkE2ODhBOTFGNEQxNkQ1NworOjEwMzJCMDAwQzlDNkRBRUQwOUY4Q0Q4MTNDQUU1RkY3RTIzRTEyRDgxRgorOjEwMzJDMDAwN0I2MEU3OTExRjUyQjVGMzhDOTI5RkVDMzU3NTlGMDc5OQorOjEwMzJEMDAwMTQ3QzU3RkI5QkE0NjY4NjdFMzFCREQxMjNBM0JFQTk3NworOjEwMzJFMDAwQjc3MkZERDEwNERCMkM4QTkxREZFQUZDRkJGMzBDRjQwRQorOjEwMzJGMDAwRkVCNzBCQjkxRUFGMzM3M0ZERTRBNkUzNDI3MzIyQjhFOQorOjEwMzMwMDAwRkY1OTgxRkI3MDc4RjczN0UwMERGMTg1NzI5QkQxOEIwNworOjEwMzMxMDAwRkE0MUI5Q0Q1MTg1RkFDMTcwRUY4MUE5MTlGQzI4MkQ2OAorOjEwMzMyMDAwQ0E1NzNDN0Y5REFDMjdGOTIzN0ExQzg4Njc1RDg2RkVDRgorOjEwMzMzMDAwNTc4RUEzMUQ3N0Q4NDZGMjQ2RDU5QkMxNEVGNTdBRTA0RAorOjEwMzM0MDAwRTUzREZGMDExNEE4MUI2QTlGODJERDI0RTVDMzc4N0Q1QgorOjEwMzM1MDAwQUIzMjI3RjJGMTQwQkYyQjFEQUE0RkM2RkIwMTA2RTk5NQorOjEwMzM2MDAwM0M2NTk3OTNCRjE3MUE4NUVGMDlBQkE2OEM0NDdDOEFGRQorOjEwMzM3MDAwQTc3M0I1Q0M3NUJDOUVCQjAyRDY5NTNCRUEyODk1RUFFRgorOjEwMzM4MDAwRjNGRkM5RjRFNDU3OEJFRjNGMzY1Rjg1M0Y5N0M3RTMwMAorOjEwMzM5MDAwNjBCMjExN0E5MkMzNjM3MURENjc1QURFQ0NGNEMwNTIxOQorOjEwMzNBMDAwOUFDNEYzMjQ4RjNGNjk5RTMyRTIxMTk5RjNEOUREMjg0NAorOjEwMzNCMDAwNUZCRTIyMTI5RkNEQjlCNzM3MzUyREU2N0M5RjZFRUJFRAorOjEwMzNDMDAwQ0UxNTVEMTgyRjg4RTQ1NkJCQzgwRUYwMjY1QUVGNDI4MgorOjEwMzNEMDAwNzVGRUYwMThFMkNCMDZFNUZDNjU3QjY0RjY1ODgwQjcxNQorOjEwMzNFMDAwNkNEMzc5RDAxNTBENDI1NzQzRkY5NTYyNkFCNTA0RjM0QgorOjEwMzNGMDAwRTdCNjMxOEYwREVBNEUyNjkxMUYyQkY3QjI5RUYwMkNDNworOjEwMzQwMDAwRjdFMDEyQzJERjMxRjYwMTIxRTg4RTk5MDc1OTcwNENCRQorOjEwMzQxMDAwM0NFNEQzRTY2QUEyQ0JEQzkxODNGNjFCQzUwRDNFQjUzNgorOjEwMzQyMDAwODdFNzIzNUQ3RkZBMDQ1RjUxRUU3N0I0RUQyMDVCQzkzNworOjEwMzQzMDAwQ0Y3QzRGOEIzNTg0MjZFMDk4ODcyNTFERDY3MzlGMTU0QQorOjEwMzQ0MDAwNTg4RTEzRDc3MUQwRjkwOEZBNjk3RTk4NDQ3RTFBRkQxOAorOjEwMzQ1MDAwNTYxN0Y5NTk5RTE1RkNEM0YyODEyRUNFODRFNEFGQTIwMworOjEwMzQ2MDAwN0Q0QjNGRThEN0Y4MzVFQjhFOEQyNEJGMjJCMzQ5N0VFNAorOjEwMzQ3MDAwM0RBMDYzM0IxM0Y4OTE2RUNGRTdGNkRDRDI3QzRFNUY0NAorOjEwMzQ4MDAwQjk4RTM3NzI1NzU0NjA3OThDQ0VGQjVBRTlBODEzRjk3QworOjEwMzQ5MDAwMzU4Q0YzQzg4OENEMTRFNzBBNTZCMTIyQjRGQjNBMEQzNworOjEwMzRBMDAwODA1NzA5RThGNDVGRjM5NTc4OTlDQTg3MTVGODU5RDBFMQorOjEwMzRCMDAwNEE4MTdERTgwNTQ1QkZEQkZERkNGM0NGNjdBMkJDNjYxMgorOjEwMzRDMDAwQThEQzBERDI5QjNBNEU1MjUxMTczNTI2NzlCQzBDRkQyMworOjEwMzREMDAwMEQ4MkU0RTVGQzU1MEEzQTgyMThEN0Y5OEIzRTIxNUU0RAorOjEwMzRFMDAwM0ZBOTlDREYxQUU3N0EwN0Y2QUY3Njc5MUM0ODA3QkQzQgorOjEwMzRGMDAwQ0VDOThFM0IwMTdFMzY5QjkxOTk2MkY4QUY4QTI3ODdCMQorOjEwMzUwMDAwOTIyNzkzRkVBMThFQjMyQTM5RUY4QTc2QjYxMUY4QjBDRQorOjEwMzUxMDAwN0MwNUY5NkM0NDdGMzdFQTMxN0Q1M0NEMzJBQzc3QkQwMQorOjEwMzUyMDAwQUQzQzgyN0FENjdBOUJCRDlDRkNFNjM2RTAxNzMxN0VCNAorOjEwMzUzMDAwMjQ5QkVEMDhFMUExQ0RDM0ZENkIzNkU0QkJFODQ3NTIwNworOjEwMzU0MDAwRjZERkVCM0M0MkZCNTdGQkFENTJGODhGQ0QxM0U2NzEzMworOjEwMzU1MDAwNDdCMDYyQjA5RjQ1RjQwNUQxQkVCMEQ4MTlEOTkzMTZEMworOjEwMzU2MDAwMzNBN0E3MjQzODBFNzMwQzFGNTFFN0JEM0Y5RkRCNjlCQgorOjEwMzU3MDAwRUI3M0NBMjM5NUI0M0UxMTNEMDE2Q0JEQTNEQzQxNzJDRgorOjEwMzU4MDAwMTBFMThDN0FFOEE4NDEzRDk0RkMyNUNGMjk3MDU2QzdGQworOjEwMzU5MDAwNjlFRkU1RkJGNEI1M0FCQ0Q1RTk2ODdGRkE5RTQ1QkUxNAorOjEwMzVBMDAwQjBERTc2QTczOTg4RjIyMDc5RTIxNUM3N0IyNTVGRDA5NworOjEwMzVCMDAwRjg3QkEyRTNCNUNFNTBDNjdCMEVDN0QzMjc5NzRCMzgxNgorOjEwMzVDMDAwOUUwMUY5NDQwMkZDMEIyQkVCRkFBMkZFMzA4MEE4NDRDQQorOjEwMzVEMDAwRjYxQUUzN0ExNTYwQkMyMzkxRkVBMDk2NjZDNUFGMzU1NgorOjEwMzVFMDAwRjQzRENFMjc5RDhBREQwMjdDRjIxOEFFQkYzMUU3RjRCMAorOjEwMzVGMDAwOTE0QUVBQzVFRDk1QjREOTYyOTEwOEU3RjUwOTlDQTAxNgorOjEwMzYwMDAwNUU4OERBRUZGMTdBNENBNTdFODBFNDk5MkE4NzU0Qjk3NgorOjEwMzYxMDAwRjQzNEVBMzFDNjI4M0RBOTdFOTdFQzA2MUZDOTZCQzE3OAorOjEwMzYyMDAwRUUyM0JDMDFCRDQ2NDZCQUQxNjNCQzM3MDFEQzI0MTc4QQorOjEwMzYzMDAwODc5QjkwMzI0NTQ2N0FBOUJFRDQ5RjRENzIzRUY5QTMyRQorOjEwMzY0MDAwNkMxNkUzM0Y1M0Y5RTFBMUNGNzY1OUIwRkREMzg2QUFCQQorOjEwMzY1MDAwMkJFQTJCNkEzQzc4QjgzODcwQ0E0M0JGRkY0QUFDQkUyRAorOjEwMzY2MDAwMzI1QzVDRjg2QUYxRTBCRTE0MjNGOUREOUUxMUI0N0M5MworOjEwMzY3MDAwQzlFQUUyRkNDOEUwNTJGRDI3RkVCRkUwMzkzQzIzRjg2RQorOjEwMzY4MDAwM0NBNDJGMkE3RTk0N0Q4NTdFRTY0MkJGNTdBNzkxMDVGNAorOjEwMzY5MDAwRTEzQzBGN0MzNkQ5ODFGODcxQURGMDU1RkRFNjU5OEFEMQorOjEwMzZBMDAwMUU5NTY1REIyNTIwOUQ2NjM1ODQwNEY0N0I2NzM3NzRBMQorOjEwMzZCMDAwMDlERTJCRjQ3QjA3RTkzOTIzREFERkEwOEMzRjVEMUNBMAorOjEwMzZDMDAwRDBBM0JDOUFBRUQwNzFGNjQ1OTExNUM1RTg3RjZGRTVFMQorOjEwMzZEMDAwNzMzRENBQTBFOEVEMjk3RENGNTk3MEJDM0U5REFGQjNDNAorOjEwMzZFMDAwMTBFNTQzOEE0RURFMTk0M0VGODY3QkNCQ0Q1NTMxRjA5MgorOjEwMzZGMDAwNjlDNzc4NEU4MkYzMkI3NzBERUE1QjY0MTdBOUYyRDY3RgorOjEwMzcwMDAwQTBDQTA5QkJBODkxMTM4MTI0OEVCN0FBQkUxM0I4OUU4NAorOjEwMzcxMDAwREI0MTgyRTAyRjQxQjg5RUJCRkVGN0I3RTAxNkNGMDkzMAorOjEwMzcyMDAwNjE4M0RENzlGNTc4QzZBMDVFQTMwQjJENTdFRDE3QTQ1NAorOjEwMzczMDAwOTcyRTgzRENERDRGRkE1NThBMDdGRDAwQUE1RTU1RjYwOQorOjEwMzc0MDAwM0QyMTFGRkI3OTA0MkZEMUM5MjRFNkE3RjIzQUM2RjUyMworOjEwMzc1MDAwNDBEMEFGNkU3MDkxQkUwNzVCODkzOTc3ODZBRTg4Q0M1QQorOjEwMzc2MDAwQUJFRkFGMDBGREUwMTgyNzEwMjNFNDRGRkRGQTI1ODFGMQorOjEwMzc3MDAwRjg3QjNDRENEQTA2RTEzNjE4Q0ZEM0Y4NDVCMzE1Nzk4RgorOjEwMzc4MDAwOTdBREI0Q0JFODE3NzU2MjdDNEFFQkI3QUMzOEFBQURGRAorOjEwMzc5MDAwNEY4QTY4RUJENzlEOENGMzgzMDZCRDZGQkIzMjc5RkNGMworOjEwMzdBMDAwMUYwN0REMDZGNDg2N0M2Mjg1MTJCN0NDMDk4NjJBMjVDMAorOjEwMzdCMDAwNTg2RjJFRUJBMkY4NjA3NjQzOUEwNkRFMzdFOTk1QkM4NworOjEwMzdDMDAwMDlFNjE1OThCQTRFRjg2NThCRjMzRUM2Rjc1QjVDODM0NQorOjEwMzdEMDAwRkUzQkQyQkZFRTUxREFGRkExN0FDNTU3M0JEMDk2REU1MQorOjEwMzdFMDAwNkMyMEZGQTgxOTI2NDc3OEZEQzNFQzA1MzNGMUJDODc5MAorOjEwMzdGMDAwRjg1NzlCQjU3RUQ1RUNEODc2ODBDMzNEREIwQzlBNzYyNgorOjEwMzgwMDAwOUZCNzhDRUM4Mjg1OEFERjc2NzBCRkI4OEUwQ0JFREZFNgorOjEwMzgxMDAwRUNGMkExRjM1RjdENUVGODJGNkRFOEZDRUFCODRGMDM5MAorOjEwMzgyMDAwMUY0MkZFQ0EyRUMxQjk0RTQ2QjgzMUY0NDBCMDVDMzFEOQorOjEwMzgzMDAwMkM2MDlDM0FBQjk5Nzk1MTRGQ0U2RTYxREU0NEZFRkUwRQorOjEwMzg0MDAwNUQwQUJDRTJFMUNDODJEMzA5N0UzMzk0Njc1OTM2M0RGMAorOjEwMzg1MDAwRDlFRDU5MkQzQUQyMEZCMzgwNEYyMDdGQjg2NTI1OTAwRQorOjEwMzg2MDAwMTFENEIzNTdDQUE0NUZERURBQTA2MzI4MUZEOEE1MzZFNworOjEwMzg3MDAwQ0RGQkIwNUNGMjdGQUFFN0ZFMzQ4RTg3RkE2NTIzMEI5RQorOjEwMzg4MDAwRTk3MDNGQ0RDNTQ0NjdCNEFFQkMyODNFMDBCQzRFNzM2MgorOjEwMzg5MDAwNzg5OTA5NUVCNzRFMzE2OEZDOUNCOUU4RDc4QzgxOEI2QQorOjEwMzhBMDAwOEEwN0Q5NzFDRkJGRTQ5MjM0NzQwMTcyNkU5NzhCRjA5RQorOjEwMzhCMDAwODRDQkJGMDI5NDdGQjBBNDMzNTM0RkVFRUE4MkY1REQ5MAorOjEwMzhDMDAwQjQ5NkQxN0UwNzUyQUQyMTlFMEYzMTE4M0ZEMDVGMUVCNgorOjEwMzhEMDAwMEI3Q0NCM0NBMzA4RkQyQzlCMjRBQjBFRjMxNjBFQTQ1MworOjEwMzhFMDAwRjY3RjlCQTUzMkQ2MEQ2QTcxNzUwRTYzM0ZCMTBFOTRCQgorOjEwMzhGMDAwMDg1MDNGRTQ2QUQ4RDI3OTIzQjQ1QjA2NUU0MEU3QUY1NAorOjEwMzkwMDAwQ0QxNjU4NTAxMzUzNEY0OTY5NUY1MDgzODczNjg1Qzk4OAorOjEwMzkxMDAwMjJDMEM3OEEzM0MwM0VBREQyOUNERDdBOThERkVBQjZCQQorOjEwMzkyMDAwOTE1M0QyQ0EwNkU5OTRGNkQzNzFCREZDMjhFNjdENzRBMgorOjEwMzkzMDAwMTRFODQ4N0Y2MkIxRURCMDhGQjIwMjQ5QTEwMzZGMTE2NAorOjEwMzk0MDAwRjE4RjFBMUVDNzhGMUQ1RkI0NUY2MUZDMzkzMEZFQzQ1MgorOjEwMzk1MDAwQ0YzMUJFOTlBRjNGMTMxRjgxRENDOUM0RjVBM0RGMUE3NQorOjEwMzk2MDAwQzdDN0YzNDVFNzUxRUNGQ0NBNzgyMjBCNkVDNzc4MEI0QQorOjEwMzk3MDAwQ0M2NzEzRjg3QzEyRTY5NTY0MzI2RDFFQzFFMDdDMTJCMAorOjEwMzk4MDAwQ0M1N0ZBNzdEODRGRUREMEYzMzA1Q0U5M0M2RUZGN0MzMgorOjEwMzk5MDAwRTdEMUExRjNEMjdBODNFMzZENjQxNzMxNjhENjRENDYzRgorOjEwMzlBMDAwRkI4M0NGNjcxMUQ5MjFCMTlDQzNCNTYzNzIxNEFFQTA1QworOjEwMzlCMDAwMDdEMkI4RDA3RENENjUwNUNFMDY4NEIzNjQyNDM4MEYxOAorOjEwMzlDMDAwMDdCNzNFODlFNzM1NkQ5MEFDQTEzNUNFRkYwM0U3RTUzQgorOjEwMzlEMDAwRTBFNzE1M0IxRkVBOTNENzNDREZFRDMwOUZGRERBRTdDOAorOjEwMzlFMDAwNDNGODIyRkQwQ0MyMTdDRTY0NkRFNkI1QzMxNzU2MTUxOQorOjEwMzlGMDAwQkMxNkY4RjZDMUI4QkExOEI4NDZGMzg3OUU5MkQwMkUxNgorOjEwM0EwMDAwQjAxODdDNjYwRkYwREY5QjBBNTI0OURFQkFFRDBCQ0M5MgorOjEwM0ExMDAwOTQ0RjkwQjFDMDhDNzk3QUVCRENCNjFBQ0NFNzVCRTdCNworOjEwM0EyMDAwNUE2NDM2QzRDOEU5NzVFRTNBNkE4N0ZFOTRGN0U0MEUyNAorOjEwM0EzMDAwNUJEMTZEQzE0QTU5ODRGQzAyMUI2RUE4NzYyQzQ3RkNGMQorOjEwM0E0MDAwNjlFNjc5NTQ2QTVFOTEyQTBGOTkxMkFGQTQ3REMxOEIwMQorOjEwM0E1MDAwMjM2RURDM0JEMDA3RkQzNzM0NEZBNEJDQjExMUE5RkY2NgorOjEwM0E2MDAwNEVGOTUyOUIxQTNDMUU2Q0ZGQjY4NUM3MUQ5RjU0RTI0RgorOjEwM0E3MDAwNEU4OEE4RTQ1NzFCN0ZGRDc3MzBGRTVBNUVCMDRBQTBGRgorOjEwM0E4MDAwNzhFM0NBMkJDNzFCQ0JDRjQ3QUEzMEVGOEEyREU3Nzk0MworOjEwM0E5MDAwNTU4RTNBMzE0RTFFNkFFOTc2MTNDMjk1RTczRjg1MDQ4QQorOjEwM0FBMDAwMEU1RkNENzgyRDA1MTkzQzFFRUREQUMxRDBFRTdCMDVGOQorOjEwM0FCMDAwQzZEMjZCRTk0Qjg3Nzk0OEYxRjQyODFBQkQ1MjI1RUE0MgorOjEwM0FDMDAwRUJBQjc0QjQ4RTZDMENFRDgzODgyQjJGOURFQjU4MEVGMgorOjEwM0FEMDAwQ0Y3M0VFMTYzRDAyM0MxRkU5N0U5OEYyOTE0MERCMjc0MgorOjEwM0FFMDAwN0RDM0VEM0U1Njg1RjUyMUZCNUNBMURENDdGQ0JFRTJDMgorOjEwM0FGMDAwRDcwRDgyOEJENkFEOUU1N0Y5Nzk0RjEyREE1N0U1MDU2RgorOjEwM0IwMDAwMEIyODVGOEM3RTJBQkRFQkUzRjY5MzhFNzZCMUNFNkJFRAorOjEwM0IxMDAwMTk4Rjc2NDFDQ0JFOThBNjlGNjJCRkZERDdENkVGNDRFMQorOjEwM0IyMDAwNjQ0MkJEMzAzRTFFRjY0RjNFNUFBNzg5NzlDQzQ2N0E5NAorOjEwM0IzMDAwQUY4RUVDNDgzNUNFOTY4NUI0ODNFNzNFOUFGMTM4NDU5MgorOjEwM0I0MDAwRkNGQjkzRjlGQkNDQzFFMzZFMjYyQjk4QTQ0MDdGQzIwQgorOjEwM0I1MDAwN0Q1NkYyNjc5QTRDNTA4N0YzMTE4Q0NDM0MwQTlFM0ZGRAorOjEwM0I2MDAwQURGODAzRDcwODRDQzQ3QTc0QkUzMEMzRjlEQTA1REY2OAorOjEwM0I3MDAwNjY4RjEzNEI2RTQ3MTk1MjdEOTQ2Rjg4NjFEQjU4N0JCQgorOjEwM0I4MDAwQjQwRkYzMzhBMDdERDVCRENFOTFFOENGMUIwMTA0MTE1MQorOjEwM0I5MDAwNDE3QjVBODk1M0E5RkU5Mzk0RkNGRUE1MjhCRjVGMkM1NAorOjEwM0JBMDAwRjg2ODgxMTlFNTMzM0E5Q0FFNjc2Q0ZGQ0VEMzVCODIyRgorOjEwM0JCMDAwMzk1MUJBMzQ1RENDNjI3MjhDNUQ2MzEyOUIyOTlGQzMwQworOjEwM0JDMDAwNzQ3MUI0QzZDRjEyNTZFQzMxQjVFRUI1OEJENTM4NUZGMworOjEwM0JEMDAwMDRFRDA1Q0M1RjYyNTIwN0JFNTcwOTQwOTE2M0ZEQTYxNAorOjEwM0JFMDAwMTcxRDlBNzFBMkUzRTc2OEU2MEQ4MzVEMUQxQjE3MTg4OAorOjEwM0JGMDAwN0VGQzI0MjYxN0M1OEU5RjM3Q0NGODg1NzFFMzRCMDlEMAorOjEwM0MwMDAwQzc4RjhFOUJBRTE5Nzc5REM4Rjk0NUQwNkUwRDI1RjJGMgorOjEwM0MxMDAwRjM5RDJEQTg3QTFCNDk3OUI4N0NCMzMzMDVEQzBGMDhENgorOjEwM0MyMDAwRkM1OEE0Mzg5NDgyMzc4RjM4OUEyOUZGNEM2RkU1RjFGRAorOjEwM0MzMDAwNTI4MzEyM0YzOTk4RENDMEYzMjQ3MkI0Rjk2NzU1NENCMworOjEwM0M0MDAwMTJCMTdENURDQUFDQTMwMkI0NTdEOUI0N0FGQUY0NEI3MQorOjEwM0M1MDAwQTdGNUM4NzdBNjhCNUEzREREQ0I5QTA5M0Y2RjYyREE4QworOjEwM0M2MDAwRTc4NjFDMkQxRkQ4QThEMDg3MkU3OTYyODRGMkQ0MzIyMworOjEwM0M3MDAwNkM5NDc3MzA5QzVGRTFERDM2NDZGOTUzODYyNDVGMzNFMAorOjEwM0M4MDAwQ0EzODYzRTFBNUI0NzUwRUE4OEZFMEY4NjUyRjRDNURDNgorOjEwM0M5MDAwODg3RUEyNzcxNTNDNUUwNzc0OEY3MEFDNUIzNTcyQkI3MworOjEwM0NBMDAwM0U2NkRDM0E2M0I4MDBFNTQ4OUQ4RUU3RUJEMzBGRTY0RAorOjEwM0NCMDAwN0YzNzIzOEJGQ0FDRjFGMzUyQzY2RjhDREZBQkJFNTk2MAorOjEwM0NDMDAwRjBCOTYyRjZGMUFFNDIxNzgzRjNBRENFREU4RTdBRUMzOAorOjEwM0NEMDAwRTA3Q0E2RjAyNDlBNkYzMEVGNDc5OTJGRjM4QkNERjc1NQorOjEwM0NFMDAwOUU0MkNGRUE3Q0Y1NUZENUVFQUZERTE4QTFGREQ1RUJBNQorOjEwM0NGMDAwOTg5MkU3Q0ZFNzdCMEZGN0U3RkMwMkYzMjlGOTVCODNBNAorOjEwM0QwMDAwRjM3RDREQkJCRjdBNTM4NEY2NTczRjY4NEYyQUYzNjU2NgorOjEwM0QxMDAwN0VCMUY5NENDNjY2OEFDRjNDMjZGMDczOURCQjZCRDQ0RQorOjEwM0QyMDAwRTNFOEE3QkYzMDc3OTU4Q0Y4QTZEQTY3QjdFMDBCODA5OQorOjEwM0QzMDAwNjdCNzI4Rjk0REI3RTYxODQ5NkY1MEM3RERERDM2ODVGRQorOjEwM0Q0MDAwNzk4RERDOUY4MzY1RDEwRDAyRTVGQjhGOUIyMjc4MzE1NQorOjEwM0Q1MDAwM0VCNjBERThERTVCODhGRTJBODlEQTQzNkQwRTJBNzdDRgorOjEwM0Q2MDAwQjRDOTU0N0UxN0VDNDEyRkY5QUQzQzU0RkYxRjg1RENEQworOjEwM0Q3MDAwQ0U3RjZDOTRCNDY0MDVFQTBCOTU1NjlFRUY3Q0MzMzRGOQorOjEwM0Q4MDAwRDA0NEEzRjYxNjE4NjA3RDE2Q0MyQkZDMzIyQkRCMDgzMgorOjEwM0Q5MDAwQjVDMkFEMUMxRUY2RUFDQzEwOUU5M0I1RUM1MEE0MEQzNgorOjEwM0RBMDAwRUFBNkE5N0ExOUYzQjg0RDRFRTY0QkU0OEY2OTJERTRFMworOjEwM0RCMDAwN0U5RTQ3RDRGQ0Y4MUIwNTFFN0YwNzdEQTQxMkY2QkYyQworOjEwM0RDMDAwNEMwMTM1RDNDRjE1NTBBRkJBRjU2QkE5QTQ4RkQ0MkRDNAorOjEwM0REMDAwRUE0Rjk2NjAxRDc3MDg2NTZGQkIwMDFFQkY1MUY0OTFENgorOjEwM0RFMDAwNjVBMzM5MURDN0RCOTM3Njk0MkMxMzMxN0Y0RjFGMEFDRgorOjEwM0RGMDAwQzE5RjBCOTMxNzkyM0RCQTcwMzE2MzY5RjBGRUFERjgyNQorOjEwM0UwMDAwMUVDODk1RTM4QTNFRjM0NkJGODlBMUJEMTZBQ0U2NzE5NAorOjEwM0UxMDAwRTczQjFFRDZEQTkxOEY1OUMyMTJFQTcxOEY5NUQ5MTlGNAorOjEwM0UyMDAwOUU0NzVEOEJCNkZEMTEyNThFQjAzMENFQUVCQzM1MkVEMworOjEwM0UzMDAwQUYwNkI0NEM5RTFGODI3QjlFQ0FEODAzODVEQUJDOUExQgorOjEwM0U0MDAwOEE0Mjk5RjNCOTFDM0IyNTU1QTdDRDc2OERDMDc4QTQzRAorOjEwM0U1MDAwQzk5OEY4MUU4RTNBREUzM0FBNUNCNjdCMDkwRTZBMUUzQworOjEwM0U2MDAwMUFEM0JGNTg0NkVGMkJGM0E5RUYzRDJEQkMzOEVBNEFEMQorOjEwM0U3MDAwRkU0RUQwREIzRUVDMkZFMkYyMTlGNUVCOEQ3MUVCQkM4MAorOjEwM0U4MDAwMzAzN0VGMUJENTJDMTFERTBFODhFODU3NTBEN0ZGQkYxNworOjEwM0U5MDAwMEI1RkFCRDFBNzAxNzg3NDdDQzZBNzEzMjkwRUMzNzI0MAorOjEwM0VBMDAwNjhERkI3QThGOEEzRTQ1NzJEMUNBQzhCNEM4Q0M5QUZDNgorOjEwM0VCMDAwNjM4RTAxMzc5RUY3NUIzNzI2NzkzNjEyRkUyOUZBNDM2NworOjEwM0VDMDAwRjgxRERERTVBNENGM0ZERUUwM0ExQ0RFNUNFRThGQUJGMworOjEwM0VEMDAwOTYyODNGNDgxOTZGMzgzOEM3RTczRkE4N0UxQkZBQzVCOAorOjEwM0VFMDAwRTQxRkI2NkZFN0Y5OEY1OUY2QUE4RkYxOUUxNDNFM0Y5MworOjEwM0VGMDAwQURDMTJCRUQ3REE4RjZERUU3MDRCNDJGQkU4REY3QkI3OAorOjEwM0YwMDAwQzRFODdDRThCRjBEOTJGRUFBQkRBNzE1QkYyRUY1RkU0MgorOjEwM0YxMDAwOERCQTlFNzYyMzJCMjI3QjU0MDdGQzAxRTY5QjY3RUIzMAorOjEwM0YyMDAwMTcwNTE5RkRGMTAzMjJDNUNCQzc3MjNGMTFFNjA4RjM0RgorOjEwM0YzMDAwN0IyRjVDQ0ZEMzY3RUI3ODNFQzcxODk5RUI3REFFODFDMgorOjEwM0Y0MDAwRDFCMUYxQTI4RjBBQjk1QzlGOTdGNDY2OEIwQ0YyRUZBNgorOjEwM0Y1MDAwRkRDMkMwNDJDQzU3OUEzN0UyQ0QxNjI3RDQ0RjE1MzY1MgorOjEwM0Y2MDAwMkZDNDdDQTY3OUQ5NkY3RUVBMDQ5REVEQjc4NTVGRTEwOQorOjEwM0Y3MDAwRjU5MjM3M0ZDRDgzRkFGRjJBNUNDNUVCRDMxODAxRTVGNAorOjEwM0Y4MDAwNzc4NUFCMTcyMjVGRkRBODUwNTJGQzk3OTExQzlDNkY2MAorOjEwM0Y5MDAwOUVDMEYxRTU4Qjk2N0E5MzJFNjEzQ0ZGN0NBMUVBNEY5RgorOjEwM0ZBMDAwNjQwNjlDQzdEN0YzQUYyNzkxMUZGOTU0RkZBQjU3MUI4QgorOjEwM0ZCMDAwODc2NEQ4OTQ4OUY3ODY5NDlGM0Q4NUY0OTkzOUY4MzdCQQorOjEwM0ZDMDAwQzBGMzY2MzFEQzhCRUZFQkNDNjE4MkVCNThDQ0EzMjlEQworOjEwM0ZEMDAwMjIxNDc4RTJGMjE1RjIyNUUyRjE0ODAwNzQ2RDQ1N0Q3NQorOjEwM0ZFMDAwNTk5NjU4MURFOEM3RURBRENDNkZDOThGQzE3M0U2NTUyMgorOjEwM0ZGMDAwRjA5Q0U3RjVBOEVCNTFFNzFGQjIyRTM4NTIzMTJENzYzMQorOjEwNDAwMDAwNUREQjY4MUM3NTVERTdDQTRDNDFCQzVGQTZDNjU1RDUzMworOjEwNDAxMDAwNzU5RDEzMDY5RTQxNjdDNDlDOTI5RDhCRjE1Q0NGMjVENAorOjEwNDAyMDAwMEY4QzE2QTBGRUZDRDhCN0U5OUNDRjY1MEMzQzIzNzgxQQorOjEwNDAzMDAwNjJFQTA2N0U4RTIzQzczRTRBN0E0RjhCRTAxRDM5MTYxMAorOjEwNDA0MDAwRjlBNUQxNDZGN0Q4M0ExNTNENkY1Mzg2M0ZDOEI4N0VEQgorOjEwNDA1MDAwNEZGOThGQzE1QzdFM0ZBMDdBQTJFMDhEOERGQjNCQzdGQworOjEwNDA2MDAwRjJCODQ5NDgyOTY3OUEzNjM3OUYwMDdDMENFQzE1RDg3RQorOjEwNDA3MDAwMUFFODFGQjg3NEMxODhGNkY4QkM5RTUzNDZCNEJCOUJCRgorOjEwNDA4MDAwRjY5RTMyQTI1REREODQ3NTE4QTc2OTlCOTFGODU1M0NCOAorOjEwNDA5MDAwQkM3NzhFRDU2QkUyRUJBQTNENzEzOEI3NzA5RDFERDYwQgorOjEwNDBBMDAwRDNCNDQyRjA2MENBRUNBQUZEQTkzM0IxQkU2QTM5RUVCRQorOjEwNDBCMDAwOTJCMURCNkZEODMzMTNEMUE1REVEN0JCMEVDQjY1QUM4NQorOjEwNDBDMDAwRkYzMERFOUY1QkUyRDdFQUY5NEIxQkI0N0E3OTdEQjMxMAorOjEwNDBEMDAwNTY5RjVFQjYxOTRFMDdFNEQ3QjJENjZDQ0Q3QjBDMzUzMQorOjEwNDBFMDAwNjQ1OENGMTJFNTNDOTczODFFOERFOEM3NjMzREU2NUUwNQorOjEwNDBGMDAwOEU0MDY0NERGRTlEQTU3QzA3NTA2QUZEMTZGMzdBMDQ0MAorOjEwNDEwMDAwQTJFM0E2NUEzM0Y5NUYwRkU3RjI3Q0ZBQzA0QTNERTUxNQorOjEwNDExMDAwMDkwNTEwMURCMERFMkMyOEZFMkMyRkYxNDc1NTdFQ0Y0RgorOjEwNDEyMDAwRUMzRTdGMjQxQkRGNUY2OTIwMzhCMEEwMzc4MjdFRkQyNAorOjEwNDEzMDAwNUEwNTlGOTZENUQ2N0M4Qzc4NTYyQkRGQzdFNUY4OTgyNAorOjEwNDE0MDAwNUQwNkYyQUZGOEI5M0UyRTJCRkVFRkJBRUVDN0FBRDM0QQorOjEwNDE1MDAwNTBGRjZDMTFDOEJGQjFCNDQxQUJBRkQ3RTMxRkE4QkZDQworOjEwNDE2MDAwQjUwQUExQjAxM0UxQTQ2RDVGRDZBQUFEREYzNTU2OTFCMworOjEwNDE3MDAwNjMyNUFDMDRFOUE0NjFBQzIwMTJERDI4RjUzRkU2RkUxRQorOjEwNDE4MDAwRTI4RDMwNENGNDkwRTBCQjdGMkMxQ0QwNEE2Mzc4M0MyRAorOjEwNDE5MDAwQ0FCNTg3MDQzRkQ1RDU3Njc4REVDNEU1MEU5N0Y3M0FFMQorOjEwNDFBMDAwQTAyOEUyQkIwNkVFNTcwODM2MEE4NDhGNEI4N0M4RkY2QgorOjEwNDFCMDAwMThGRDQwM0ZCNEZFQ0M1ODJFREZEQTJEQkUxNkIyOTc2NAorOjEwNDFDMDAwNUUxNTI0RDQ0N0FBNDVBRjk4RTY4RURBQjNGMUY4RjgyNQorOjEwNDFEMDAwQUM4MkRGNkZCMDdFMzdBRUFCMTA4MTBFRjAyRjVDMzg1MworOjEwNDFFMDAwMjI4NEZFQjBDMjlGMkNBNzdDQzdDMjBBQzFBMzIzN0EzNworOjEwNDFGMDAwRDZCMUQ2NzIyQzQ1RTIwRkE4NkY1QUEwMkNENDc3RDUzMQorOjEwNDIwMDAwMTJCRjlFNjA5NDc4M0VBMTgzQzVGMjAxRUY3MzRDQzA0QgorOjEwNDIxMDAwQkMzRTVDM0FDRTdCNzNDRUQxQ0ZGMDFDNkZEOUZBRThBRQorOjEwNDIyMDAwNzlFNDc3QUU3QzZGRjk2M0IwQkU0RDE2M0VGRkE2RkQxNAorOjEwNDIzMDAwMDJFOUFGNERFRTIzQzQxNzQ3MDI5QUUwQkM0RDBFODU0QworOjEwNDI0MDAwM0Y3NjAzN0Y1NEY3MEZFNzNEMTJGOTE1NUUxMDk5RUJBNworOjEwNDI1MDAwQTY3OTQ3QTlGMTAxMzVERjM2NUNBNUJCMENFNzM3NTJEQgorOjEwNDI2MDAwOTk3NzY3QTk0Q0ZCQ0VCQ0FGNEJDMDdERTdCMkUwMUE5MworOjEwNDI3MDAwRjQxM0ZERjM1ODQ2NzA1NDRCRDU4RkJGMzgxQUM3NzZFOAorOjEwNDI4MDAwRTI3OTM2M0FGQThEQTQ3RjJCNzFFQzA0RkQ0QTEyRjZERQorOjEwNDI5MDAwRjMzMjhEMUY2MUE2RkU1MjBBQzY5QjU3QkQ5QTdGQzU5OQorOjEwNDJBMDAwN0MwQkJENTlBN0ExNTc4MzY0RDVEMEY1Q0Q0NTVBM0FBQgorOjEwNDJCMDAwOUZFN0QxRDJGN0FENTNGMjM1RURGM0JEMjU5QUY2ODVFMAorOjEwNDJDMDAwMzUxNTlBRkE2MkRGMzQ0REZGREI2QTY3NjhFRDdEQzcwQQorOjEwNDJEMDAwMUM0RDdGOEJCQzQwNTM0RjJBQkE1REQzM0ZEOTczQTc4NworOjEwNDJFMDAwOTZERkQ4QkIyOEFGQzA2ODBFRjZGQjAxMEU5RDgwQUJGMQorOjEwNDJGMDAwNTNEMkEyRkNCQTI0QzU4QzQ5QzdDQzVBNjFCMTYxRDk0QQorOjEwNDMwMDAwNTk2NjBBRTNCOTc1NjZGMTM4QUJFOUI1MDcxQzYxODRGMworOjEwNDMxMDAwRkE4ODE3Q0Q5NTUwQkUyMDg0QUEzMDVFNjQ1NkVDQkM1NgorOjEwNDMyMDAwRTI4Nzk5ODY5RjhGMkRFMTc4QUU5NkVGOEZGNTdGNUNCRgorOjEwNDMzMDAwMDRBNTdCQjc5Q0NERjNBNzIzQzU3ODNFNjY3NDIwMjJFNQorOjEwNDM0MDAwMUVFRjMzOTNERTMxMjE0RUZGRkQ1RTY5RTU2RjUxQUUwNgorOjEwNDM1MDAwQjgxRkY2Q0UyNkJGNTQzNzkzRjBGRUVDMEUyM0NGNzM3MgorOjEwNDM2MDAwMEFFRUUzRjlCNEVFRUU3RTlEMzc4NkRFMDI0NTVDREVCMgorOjEwNDM3MDAwN0ZEMzU3NDU3OTRCNEQzRDIwQ0QxMEJGQjc5RTM2QTIxOAorOjEwNDM4MDAwREZBRUE5QTczNzA1RTVDNjc4REY2OTIzRUFEN0QxRTcwRAorOjEwNDM5MDAwOEEzQzExMDdBQzE4QkZGQzk3QUVDNEY5Njk2MzhBOENEQworOjEwNDNBMDAwMzRGRTExODVERkQ2M0ZDMEY5MkQyMERDNUNCNDhGNTQ3QworOjEwNDNCMDAwRkU1OUJGODdFRkFGN0VCMTkxRTg1QkU1QTNDMDNGMzUwMworOjEwNDNDMDAwRjFCMDc4QkVCQ0Y0ODZEMDNBQTQ1REUwQTMxQUZCNjVEOAorOjEwNDNEMDAwRDlBMjU5MUZBMzNEQzQ1ODk4RjQxOEUwQTNEQUY2OUM1QgorOjEwNDNFMDAwRjU0NERGQ0JFMkVDOUJFNDIyRTBBN0E4NDc5NDMwRjc0QQorOjEwNDNGMDAwNjVBMDk3OTMzRTVEQzI3REI5NEJGOEY3MDI0RUZBNjcxMAorOjEwNDQwMDAwMTBCQ0JGMDk3MDQzQkJGMTlCNDNFMEM0RTE3NzM1RjhCMgorOjEwNDQxMDAwQkNBNEY4MTNENTczOEFFRjU3NTZDMkY5RTg0QkMzRjAyMgorOjEwNDQyMDAwQ0IwNzhBNzhGQjBFMjE1MjhFQ0MyQ0UwQjMxMjlFMkU0NQorOjEwNDQzMDAwMzU5QjE3NjNGRUMxOTFEQzNGQURDNzc4NDJGRDBGMDQ4OQorOjEwNDQ0MDAwQjQ2NUQ5QUY3QjVGQ0JDNDdDMDRFMzlFQzM5OTk4Mjc0NgorOjEwNDQ1MDAwMTFFODNBOUNDOTAwNEUyQjBERjIxQUQ0OEIwMTBGM0M4NworOjEwNDQ2MDAwNkJFMDVDOUFCQUMzQjRGRUM2QUU4QTVFN0NERUQ4MkQyMQorOjEwNDQ3MDAwNzg5MDE1MDZGNjlFOUY0NUZCNjRGREVCNTE4RkRGMzE2QQorOjEwNDQ4MDAwQ0NCQUE2MTU3MTdENzg1NjkxQ0NGMzk4RkQzMDI3Q0EyOQorOjEwNDQ5MDAwRDlCRDI2QjI2M0VCRjcwMDFGQzI3NUVEMTdFODVFQzYwMworOjEwNDRBMDAwOEUwREU2REE0NEZBQzk2NDg0MzdDMEU5RDAwNjIzQzMyNgorOjEwNDRCMDAwMzhDQTRBNzgxRkY3NzEyNEY3ODhEMThDNzhCMzQ3MjAxRgorOjEwNDRDMDAwOUIzMEQwNzU2MjMxRkFFMzAzMkQwNjg2NzE1Qjc1N0RGMgorOjEwNDREMDAwNjc3MjIzRUZFM0ZFREY1OTYxNjA3ODhGQjA3RDA1OEY0RgorOjEwNDRFMDAwQzdCRUQzQTJBNzcxRjQ3NzFCQThCRUU0NUU5RTM3N0MzQgorOjEwNDRGMDAwNzBDNTZGRDc2N0MzQjhFRkFDMTQyOERGN0VDNkRERkY4OQorOjEwNDUwMDAwNzYwNEVCNEJFRUU1N0E1MDNDRkUwRUUyNkIxQzdFMkUwMQorOjEwNDUxMDAwRjE2QkYxNkUwODlFMzY3QzMxM0NCRDMzOEFBN0UzNTFDNgorOjEwNDUyMDAwQ0VDMkI5Q0YxQzg5RjhGMzIwQTM3QjhDQjU5NzBFMUFBNQorOjEwNDUzMDAwNDZDMjdBRjNENjRCMUUwQ0VEOTZFQTQzRUIzMjkxMkYyRQorOjEwNDU0MDAwMUNFNEVENjUyQkI3MEI5Q0JGQzg3NEJGM0RCQkQzQzg0MworOjEwNDU1MDAwRDA2RTdDNDAzOUFGMDc5NEYzOTJEOTgwODBGOTZFNENDRAorOjEwNDU2MDAwOENFNEUxRkE5QzRBN0VEN0NCMDY1NkJCMDdGRDQ4MjI3NQorOjEwNDU3MDAwRTcyRkE1M0Y3NDZDOEZGNTIzQjkxNEJFQTJGMkJEMTJDQworOjEwNDU4MDAwQjBGN0Y3OTAxRkJBMkIwQkVGOURCRjY0RTBGRUIxRDFERgorOjEwNDU5MDAwQ0E3ODA1RjkwM0IzRTY0M0Y5Q0QyMkNFMDdEQjk0NzU1QgorOjEwNDVBMDAwQTg3NUFGODJGRkNDQkU4M0UwM0JDRkNDRTEzRUE3MzUwMAorOjEwNDVCMDAwNUM4N0ZCQjg0N0Y0QUYyQjgyRjZCOUEzN0ZCMTkyNTE2OQorOjEwNDVDMDAwN0VFNEVCNkUzRkY5Qjk4QTQ5QUUwNTk0RjMzODM4RjVDRAorOjEwNDVEMDAwNzdEQjU2NjMxRURFMzgyQjlERTNGQ0JFQTcyMjc4QUU0OAorOjEwNDVFMDAwNEQyRTkxRjIwRjJEMDUxMzQ3RkFBRkUwNDcwODVDOTQ2QQorOjEwNDVGMDAwMzVGN0Y4OUE3QUNFQ0ZGMjI2QTBFQjY5Q0E3QTRCOTVCNgorOjEwNDYwMDAwRkI3QUFDODdGQjBGODAxRjhCNTNDQUEzRkRENEZEQUI5NQorOjEwNDYxMDAwN0UwRjRCQzE3N0U5OUM1NjdGODU5NUYxN0JGQzhGRDE0RQorOjEwNDYyMDAwRkU5N0FFM0MyMUUwM0Q5NURCMEM1RTgzMERFMEZDOEJGQworOjEwNDYzMDAwMTE2QzMxREFDMUFGQjczMUJBQjc3NjBDRUZBRjAxMkJERAorOjEwNDY0MDAwNzlBMzREQTI3QTQ0QjlDN0Y2NjY5QjRDRTU2RDQ2REY2NworOjEwNDY1MDAwNkU4NENGRTI0M0NEMDUwOEFGODNCOTRGRkFGMEJCMENBRgorOjEwNDY2MDAwRTc4RTI5RkEyQzkzRjhCRDQ2MDVGNzJFRjRFODk5MTk0MAorOjEwNDY3MDAwREEyRkVDMTU0MkU0MzQ1MUQ2N0ZDN0M1MkNFNjA3N0UwRAorOjEwNDY4MDAwRjIyQkU1QkU1QzYzRUJDRjg5Q0Y3OTFBQ0VDRjQyM0JFQworOjEwNDY5MDAwQTM2Q0U1QTlGNTU4MEZCNEZFREIyQ0Q0MUJERTA3Mzk1QgorOjEwNDZBMDAwODFGODE1RTgxNjk4MDNDNkE5QkI5ODQ2RUYzNzc2OUZBMAorOjEwNDZCMDAwMzBBMjNERkY5MjZFNjAxNkMyM0Y3ODQwQTA3QjU2ODFDQgorOjEwNDZDMDAwRTZGM0M0M0ZCNzI5RkU5NThGOEE3ODFDMzFEMDUzQTZGNAorOjEwNDZEMDAwQTNGM0Y0MTY3M0ZCNDQzOUZGREVFMjdGNEY0MUZFNjUxRQorOjEwNDZFMDAwNkU5NThGNEZDMzczM0NBQUE3NzNEQzU4MzU5MDIyMjU3MworOjEwNDZGMDAwMzg5NzkzMzAyRUU2OEZGQzRBQzlEMzhCNkZBRjM1MDZCRgorOjEwNDcwMDAwQzkyRjVCQUJFMDZEN0NGQjA3MEEzRTAyODQwRDRBOUUxRAorOjEwNDcxMDAwMTIxMzYwM0Q3NTBBN0VENUUzRjc2MUQyNTBDRjE3QzIwMAorOjEwNDcyMDAwNTZBMERCRkE5RTE5RTRERkE4NkZCRUYyRjc1RTg2QzNERgorOjEwNDczMDAwQjc2QjJEOUIxOEY3NkZBODc1QjRCRjYyRjNCOEQwRkVBNgorOjEwNDc0MDAwRDJERTRCMEZEMjNFNENCOUFFOTFGRTJCRTg3NzgxRkUwNAorOjEwNDc1MDAwMkM4QTlGMzQ3NTMyOEE5NzM0NUUyQ0E2RjJFQ0ZFNDc4MQorOjEwNDc2MDAwRTgxRTk0RDkzQUYwMjRDQTA1NTZBODIzQkRCRTMxQTg0NAorOjEwNDc3MDAwRDU2RjhFMTc3MzNBMzg1RUNDRTlGOTUyMTFEODI3NjY5NworOjEwNDc4MDAwMzY2ODlGODAxRDcyMTlGMTEyRUM5MDk0M0VBNkIxNEZDRAorOjEwNDc5MDAwRTI5RjkzN0Q2MjU2RkM4NkEwMkVGOTVGNEVCMEVFQjc4NQorOjEwNDdBMDAwOEFBQkM0NzExOTQ4NTc5QjA5QkYxOUUwMzdFMjU1RkMyMQorOjEwNDdCMDAwM0U0NzhDRTNFQjUyRTk3OTQ5REZDNzQ2RDQ3NzAzREQwNgorOjEwNDdDMDAwODlFOUY5MzdDNTk1MjM3MERDMERDM0U0RTVCRDVEQ0NGRgorOjEwNDdEMDAwRjk1REUzNTY0NkYwMEE2QzREMjMzODlENjE1QjdENTVDQgorOjEwNDdFMDAwODA5NzY3NjAxRDc4NEZGRDlDQ0Y5Nzk0MEFFRjlGRjNFOQorOjEwNDdGMDAwRkI5MjMwM0VBN0QyN0ZEMzU2MkJCREI3QzFCNTIwMUQ0QgorOjEwNDgwMDAwQkZBQkUxMUFDN0JGRUI3M0I2N0I4NjE5RTE3Q0M3NTYxNQorOjEwNDgxMDAwNEU3N0VBN0NFRjg3OTdBNDIzRkQ0QzMyMEMxOEQxM0ZFQQorOjEwNDgyMDAwOTlEMzczMkEwNUY1QkE0OUZCMTdBNjIzRkQwREI3NEU5OAorOjEwNDgzMDAwQkI3MjFFOERBRDU5OEJFOTFFMTBGQ0Y0NDBGN0Y3MkJBRgorOjEwNDg0MDAwNzIyQ0IwMzY2QzQ0RjhERkRGQ0EwODdGN0JGN0ZEQkEwNAorOjEwNDg1MDAwMDlFOUY3NkM0RjkyODQ3MkYyQ0NBQjQ5NDFFNEY3RTc3NworOjEwNDg2MDAwMEU5ODQyM0ExODZBQTVGMjNEQTQzMzg2RkU1QjQ4N0Y1MworOjEwNDg3MDAwRENBRkE3N0M4NUMwODEzRjNDODlGNDE4RDg2N0EyN0I1OAorOjEwNDg4MDAwMzVGN0Y3M0M3MjFFRTVEQ0NBOUVEOTFGOEI1OEJFRjg3RgorOjEwNDg5MDAwRjdBNTg3QzZENkQxOEI2M0YzOEVGRkQwQjYzQjBCRjk1NQorOjEwNDhBMDAwRTc1OTkxRjM4OUZCQkI1RjIxN0RGNkZFNEIxN0M2NjM4OQorOjEwNDhCMDAwRkVFMDk5NTdGRjYzMzJGMkIzQzA0RjJFNEM0NjNFMTZDRQorOjEwNDhDMDAwRjhGMTg1QzlEODFFRjg2MTUyNzMyMkZENjQ2NjA5RkZBQworOjEwNDhEMDAwQ0U4NjJBMUY5RDZGODkxQTNGQ0IzOTA1M0Y5QzFEOUJCMQorOjEwNDhFMDAwNkJGMEJCMDU5MzRFMkNBMjM4ODBEQTNFQTk0MEU3QzM5QgorOjEwNDhGMDAwRkU5M0RFQUU0RUJGM0JFNkJEOEU4ODQ4RjkxMjEzNEZFNQorOjEwNDkwMDAwNTQyN0FEODhDMUNCMEY4QTBEQUE5RkVFREFGQzIzNEE0QgorOjEwNDkxMDAwMUU4MkVBMUZEOTEwMTFGOTNEQkIwNjdEMDhGMzdCOTc3MworOjEwNDkyMDAwNDY3OEZDM0RERTZGQzI5OEVGRTY1MjNDRUY3QjMzM0NBRAorOjEwNDkzMDAwRjhCRDFFQkNBNzhFNzE5MTczMEYxNjg0RTg5RTdBRDBDNQorOjEwNDk0MDAwN0NEODE1QTMwNzJEODlFOEMyMjZGNDgzRjQ5OEMyQTg2MQorOjEwNDk1MDAwMEYyRDg5ODhBNzRDMzE3RTkxRjdBNTk3RDdBMTFBQkY1MworOjEwNDk2MDAwQzRBRkY1NjNDNEZCNDFFMDk3MkNDNkM0NEZFQTVCQzJGOQorOjEwNDk3MDAwMDY1NTRFQ0Q4M0Y5N0ZCMThFNDkxOEI3MTlFMjFGQTlBQworOjEwNDk4MDAwRkQxMkY5NjFFMkZEMjQ3MkU0MDkzM0JFMjdCQkY4Rjc5QQorOjEwNDk5MDAwNzU1NDNEMTNDRjZCNkYwMjdBQjcyOTc0QTJEMjUxNDc3OQorOjEwNDlBMDAwNDQ0N0U3RDAxMUE5MzJCQkEwMzQyOEVEN0I0MTZDMDYwNworOjEwNDlCMDAwMzEyRkE4NjdFMTRFQjREMzNCMkVERDk2ODRGMEVBNzgyMAorOjEwNDlDMDAwNkIwMUMzRUY0NzlDOTNBQUNDMDVGOERFQTUyRjk5MTc3RQorOjEwNDlEMDAwQkJBM0Y4MzE4NDdGOENFMzcyNjU1MDFGMTg0NkNFMUQ0RgorOjEwNDlFMDAwNTFGOEQ2REY0QkRFRjU4REZCRUYyMUVGQzBBRTdFNkRDQgorOjEwNDlGMDAwMUNCN0FCOTc3MkJGMDdCN0FCRTNFNTg0Q0E3RkQ1NzEyRAorOjEwNEEwMDAwM0Y1M0UwM0Q5NEZGN0U0Q0ZBMEJEOEJGQzQ3RjNGMUI2MQorOjEwNEExMDAwMjdGM0VGMzRGNENDNEYyN0JCRjhBRDQ1RTlCMjZERTg4RQorOjEwNEEyMDAwRjhGOUEyNDc5N0U2MUUzQUJFQUFBRjA1ODJERUMzNjYzMgorOjEwNEEzMDAwQjQ2M0JDM0NGRjM0QjA0OEEwRUY0ODA1N0MwMkU5RDkyMAorOjEwNEE0MDAwODEzQTQzMDhEQkQ1RjU0NDE2RjFCOEUwNjI4RjQwREZDOAorOjEwNEE1MDAwMDU1MUY1M0Y1NTNGMUM2QzlGMDhFRENFQThCRUE4RUE1NgorOjEwNEE2MDAwODUxMTFGRjc4QjJFRjIxQUE4RkQzNkEzN0Y2MERDMjQ3OAorOjEwNEE3MDAwREM5Rjg1OUU0RjlBQ0FDNzA1M0U3MDE4RkQ5RkI3N0Q4MworOjEwNEE4MDAwNTlBMEVGNzZBOUZBQTI4QTlGRjFGQUU0MjczREY5NTdENworOjEwNEE5MDAwRkMxRUREMzYwNTJGNTVGQTFBMUQ0NzE3QUE5QzcyMjlGMAorOjEwNEFBMDAwRjA2OTQyMzk5RDhFNzJGQTMzNjNCRjZENzhCRDFCRTRBNQorOjEwNEFCMDAwQjQ1ODRDRUYzMUMyREI4OTZGOEJCRTQ0NzZGN0I3QzY3MgorOjEwNEFDMDAwNzE3RTZDMkY1NkNFMkQ3MkE4MTJENzlCQ0IyMjk0MTdENQorOjEwNEFEMDAwMzU5Q0ZDRkNCNDk4RDNDMzcwRURBRTcxNUNDRkI5MUFCMQorOjEwNEFFMDAwMUQ0RjJGRkVGQkQyRjFCNEUyRkYxRTc0M0NBOEZGMTk0QworOjEwNEFGMDAwMTNFRkYzQURFMkNBNkEzQzdGQUJCRTk5RUU0REIxOUZCNgorOjEwNEIwMDAwMUFDODZGMURERkVGMzMwNUZFMjBDRjM0Nzg3QzM4RDcwRAorOjEwNEIxMDAwQTg0M0JCMjdEMEMwRURGRUNFNTRGOTM4RDkyN0FGRjE1QQorOjEwNEIyMDAwN0JGOEY3MkJGOTRBRjc1RDk0QThFQ0M0MEY4NTYxRkI3RAorOjEwNEIzMDAwMDM0RUYyREJEQ0I3RkI4NEMxMEJFRjJGNkQxMUNBRDA0MworOjEwNEI0MDAwMUZCNEI0NDFCQjlGQ0UwQ0VGRUM1ODNGNzhFN0E4MkVDMgorOjEwNEI1MDAwOEEyQjA0NzdFNkNCMzg3RTNENkUxNkZEMjE5RDU5MjFDOAorOjEwNEI2MDAwOEMzRDM2QTExRjY3MDIzRThGQjk4NzAxRjMzNDJBQ0ZFRgorOjEwNEI3MDAwQTcyOUZFMUQxNkE3MDdGQ0I4RjcxREYyRjc2MDVDMDgxMQorOjEwNEI4MDAwRTlEN0Q4MjM1MDVFNDhFMDI4Rjc3NzM0RjU3MEJFRjBCNworOjEwNEI5MDAwNTE4MzQwRkNFNDIzMjUzRjIzRDA2QTIxRkZCNkFBNDc3NgorOjEwNEJBMDAwN0NBQ0Y0QkJGNzQxODFGNEJEMjE3QTg1NTcxQjc3Njk1MgorOjEwNEJCMDAwRkNFRURCQzQxN0UzRjU4OEI0QkQ3QzFDOENCN0EwNUZBQQorOjEwNEJDMDAwRTY3MEVFNjQwMUVCOEQ2MDE3OEU0NDdENTE5NjZGQ0REQgorOjEwNEJEMDAwRTZFQjYzMjFFMjJGNUU4RDFGRTU5M0EzQkYyNTNCNzJCOQorOjEwNEJFMDAwRTk3RTgxQTU5M0RFMTExNzdGRTk5QzEzMTc3RjM5NzI0NworOjEwNEJGMDAwMzgxQkM3NTFGNDBDMDlGRTBGRkQ4N0YxN0E0NjUzRjdCNQorOjEwNEMwMDAwMDkwM0RBMDU1NzhCQjM2QzJFRDZGQTA1Qzc4OERDQ0ZCQgorOjEwNEMxMDAwM0FBNjQ3OTBEMDlGMzQ0NjgxRDM3NTFCQUMwNEE3NTk2MAorOjEwNEMyMDAwRUZBRDQ4NDczQTU3Q0ZFN0VDN0M3RTVFNjdERkY5QjREQgorOjEwNEMzMDAwMTJERjlCRkM5RTI4MjFCRkZERjEzQjJEM0ZDRkU2NzU4NworOjEwNEM0MDAwRDkyQ0UzN0IyRDQ5Njg4NzlDN0Q2RjU1MTJDMkYxQzczMworOjEwNEM1MDAwNTBFMkY3OTI3RTc4NTI0Q0U4M0ZGQzZCRjFBMERGNzg4RgorOjEwNEM2MDAwNjczMUNBQjc4NzE1QkZCMTA4RjIyRDM5RUE3Rjg5N0Y0RQorOjEwNEM3MDAwMkZBNzg0RjNBOTRFRkM4RTExRTJERjdFMUVERkVFMUMwRgorOjEwNEM4MDAwRTU5RjQzRjVBN0YyNzgxRUIxQzhGMUY1OTU5RTU0MDk0QQorOjEwNEM5MDAwRjVCRDEyRDgyQ0M2NjFCRjZGNjUxRDE4NUZFOUNDRjA1OQorOjEwNENBMDAwQkY0RUY0RjE5NDhFRjAxN0RFRTdERkExRDgyMzkzQkM1QQorOjEwNENCMDAwQzNEMDE0QzYzRkM2ODNBQzMxNTM1RUEzOURFMjIwRUE0NQorOjEwNENDMDAwNzc2MjQ2ODExREFBN0M1NzYxMTFDNjVENEI5NDM4QzgzNgorOjEwNENEMDAwNzgyQjEzNzFGQzREMDZGRkM2NzExODc3RTkxNTNENkJGMworOjEwNENFMDAwRjAxREQxOTM4RURGNDU4QThGQzdBOEYxNjEzNTJFQTNDMQorOjEwNENGMDAwQzY4OTg3OEJDQjA4MzhDRjc4OEU2N0IxREYzRDUxRTMwQgorOjEwNEQwMDAwMkZFQ0NCM0M3RkIzN0Q0QTMzREQ4QkREOEUzMTEyRTI1RAorOjEwNEQxMDAwOUY0M0UyMjk3RjQ2M0IzNTNFOUUyMkEyRkNBMTM4OEQ2RgorOjEwNEQyMDAwMzY5RUI2QjFFODY1QzJCN0NGMUI0NzlCNUUzQ0RDRkM0NAorOjEwNEQzMDAwMzJCN0U3RTJFNjlGOThGQTQ5MjZEOTJGN0ZGOTczMEEzRQorOjEwNEQ0MDAwQzlCMzlFMEIyNDc3Q0UwRDk4OTRGQjlERkREQzRGRERGRgorOjEwNEQ1MDAwNjMyMDdCRkQxQ0Q4NDExOTMxRjI2Q0Y5MzgwRTg3QkVGNworOjEwNEQ2MDAwOUUxOTg0OEY3QjIzRDU0OUQ4QkY1M0QxNzMzNkJDQjVFOAorOjEwNEQ3MDAwNjgyMUVBRDNDMTg4QzhGM0IxMTlCNzZCRjY0NkM0NDlCNAorOjEwNEQ4MDAwNUMzRjE4MDIyN0E5Mzg0MURDQzk2QzREOUMwNzE0NTZCQQorOjEwNEQ5MDAwRkMwNTYxNjVERjMzREVFMUY2NEFBMDg1QzcwRjI0ODU5NworOjEwNERBMDAwREUwMjM1NDZFMjI3NDc3MjMzMDVENThGM0MzMjUxN0MwRgorOjEwNERCMDAwNjFGRjAwRjFEOUZBN0I3OTdDRjc5QUUzMEJEREJEMDY0MAorOjEwNERDMDAwOTY5N0MwNkY1QjMzOEJGOENEQjVGQTZCMTk1QUMxOTNDOAorOjEwNEREMDAwQTNGQzM5QUI0NEUxMjdBNThBRkZCNjk4RTdGM0E3MzVEMgorOjEwNERFMDAwOTc1NUUyRjdFRkMyQzM5RUI3N0Y2MzQ5ODJGMzRFRDA3NworOjEwNERGMDAwNkZBQkZCREFFMjgxQkZCRUM2Qjg2MTZBRDFCNUY1MUIwNQorOjEwNEUwMDAwOTM4ODFFMTJGNDlCN0U4REUzN0RGMzFBRkJCNTVERTM2MAorOjEwNEUxMDAwQkMwQkM3MjVFQUY3RkY2OEZDMzMzRUJFMTkxRjBGOEQ5OAorOjEwNEUyMDAwOEY3MzlBNUVCQjNCODg2RDhGMDg4RjBFODQxMUJBMjlGMQorOjEwNEUzMDAwRkI2QTA1MjA1NTMxRjVCQjY2RTQ2QjczQTdGMjc4QzBCOQorOjEwNEU0MDAwODY2QTczNjhCQjEwOEQ4QkFBRjAwQTk2NzJCRDRCNzI4RQorOjEwNEU1MDAwOUYwRkUyNzcxMjQ3N0IyM0Q1RTk0MEM3RTdBNjMyQjIxRQorOjEwNEU2MDAwMUJDRTU5OTRFRjIzODlEMkE4Rjk3NDdFMTI3RDFGQTcxNworOjEwNEU3MDAwRDM5MjM4QkUzNDUxMTk2RjM4M0VGMkJERDJDQUY1NDhDQworOjEwNEU4MDAwMkZEMjMwREZBRkM4MkRFMTc2ODBENENEQzg1RkMzNDRDOAorOjEwNEU5MDAwNzlENDAyOUE1NzFFNDVERkRGM0JDNDlGQTc4NDE5RTVFQQorOjEwNEVBMDAwRjc0MUJCNzMwMUU5Q0ZCMjEzRDdCNzQ1ODk3QkE1Q0RENQorOjEwNEVCMDAwMjk3NEEyOUYyRTBERTQyREM2NDUxRUMzRjgwOEY5RjVFRQorOjEwNEVDMDAwMjVFQUE3Q0U5N0VDRTZGMzZEMzEzMDAxRTM1OEMxNzFDNgorOjEwNEVEMDAwM0NBRjgyNzU3QzVGMTNENzM4NjYwODdGQjA1Q0EwQjhBMgorOjEwNEVFMDAwQzY3NjVDRkZDRjc0NjFGNzBFMjczRjE3ODRBRjdCQUZBOAorOjEwNEVGMDAwNDRGMTk2MzdBNjdFQUY4OEVFQ0IyQjcxOEVENTEyRUY5QworOjEwNEYwMDAwNzIxMEVEMEM1OEM3RUE1NzJCMDg3Rjk3RjY0REZENjVEOAorOjEwNEYxMDAwMURFQTgzMkU5MUUwM0M0NDBGNTdFQ0FCOTM4QTdEQThBOQorOjEwNEYyMDAwREE1N0ZENjgyN0M2RDgxQjNGNTBGNDg2MDQ3NEY1ODMxMgorOjEwNEYzMDAwNDQ3QzY5OEJDMEVEREZFMENGQjhGRDVCNjFGNEU0Qzc3MgorOjEwNEY0MDAwRTY1M0Y1MkE3MTkyRTU2MUVFODc1NUVEREFGMURFOTBEMAorOjEwNEY1MDAwMkUxM0UwNTBGMUEwM0U2QzAyMzk1REIxQkVENDg4RkM0NgorOjEwNEY2MDAwQkE2MjdEQUU5NUZDNEEyQkY2RTg1NDc4MjczQUY3OUY1MworOjEwNEY3MDAwMkFFQkRDNzA3NDgwRTIxMkFGQzRDNTI3OTNERDQ2NkE2OQorOjEwNEY4MDAwN0Y0OEMxOUY2NDNDNUIyODU3MTc4OEVEMjg3RTQ3REMyQgorOjEwNEY5MDAwMjBFOTEzRjlDNUVCNDFFRkM3RjUyREVGRTRFQjU1RTMzRAorOjEwNEZBMDAwMjBGNTYxNzkwNkNFNzNFQUYwQzA3QTJDQ0IxQjlDMzNENgorOjEwNEZCMDAwQzg2RkI4RjJGQzdBOTQ5QjgxNEIxNzhFNEMyNzNGODBDOAorOjEwNEZDMDAwNTE0RTc0NUY2MDRCMjlGNzFGQkU4MjhBMDhDMjZCQjZEMAorOjEwNEZEMDAwNDg3OUJCMTVCMzQ1M0FFRkI0N0EwQkQ5RTE2OTA2QTYxNworOjEwNEZFMDAwQzdFRkIwQTZDREU3NzJBQ0JDQzYzRTAzRUI2QzUxMkE0RQorOjEwNEZGMDAwQzlFMUYyQTM3MkVBRERFRUE4OUQ5RjM2QkIyNTAzRTE2RAorOjEwNTAwMDAwNzRCNUY4OTBFQTJGQjhDREU4RkQ2MzQ5QzZFNzhGMEY3NQorOjEwNTAxMDAwMzUxRTdCOEJGMkNDRUVFOEQ3QzY4N0Q0NzhDRjcwRjEwMworOjEwNTAyMDAwMjEzNTNFMUJBOEY5NTQxMzRGMEU4ODAzQjNEMEFGNTI1RAorOjEwNTAzMDAwRjFFQTI5OEEwRjA3QkEwNUM5RTE4Q0M2OEQwMjdCQ0YzOAorOjEwNTA0MDAwMUIwOUJFNEFCQzA4RkExQkYxQkQwQTM4RjY1MTY5RjhDMworOjEwNTA1MDAwMUQwMjFFM0ZEQTg3RjlCODQ2RkNCRTlFNDQ3OUI3M0Y3MQorOjEwNTA2MDAwQzI3Q0RDNDJGQ0JFMUVDRkM3M0Q4MEY5Qjg0NkJDRkYwNworOjEwNTA3MDAwQzFGMzcxRkI5NEZDREU0MENGNzk4QTM3QTVCOTg3RTQ5MAorOjEwNTA4MDAwNTM1MTNDRTIyMUMxOTdFMTlFQTQ4OTU3NTAzRDNFNUVCOQorOjEwNTA5MDAwQTFCNzcyM0IzNDcwRDQ0MERGM0YwRjFDMzMxMzlGQUQ3OAorOjEwNTBBMDAwRUM1OTNFMDZGNTMxRjVCQkU0NEQxODJGODhGMTJGOURFNAorOjEwNTBCMDAwRjU3QTJDNzhCRkU3QUNDRjYzQzEzODQxNDVFRkM3NDZERQorOjEwNTBDMDAwOTlGODRFMzgxQjUzOTg5QUM0ODgxMUVEN0Q4NDAzRTVGNgorOjEwNTBEMDAwRjlGNTU0NUExMEFFNTdGNUVCNzdGRjdGQkZGRUU3RjFCNQorOjEwNTBFMDAwRUI3RjJCNEE5N0M0M0ZDQTdEM0FCQTU3NUU3RUQ0NkI5QQorOjEwNTBGMDAwQjkzQjg2M0Y2Q0YwNzFGRkYwMDY1NzFFRDFERjEzQkUzRgorOjEwNTEwMDAwQkNENDE1QjE3RUZDMUE2RUJGQTVDRDc2NTk2MjlGQkY4NworOjEwNTExMDAwNUJDQUZERjg2OTQyRTJGQjA1NzdCOTg3RTVCNzc3Qjk2NQorOjEwNTEyMDAwMTNFQTNCODlFMzAxMUI2QTM4MUY1MUZERkQ0M0UzMDM4QQorOjEwNTEzMDAwOUVENzVDMzE3RUZFQjMzRjMzRDNCRkFGRDBCQkRGNDRERAorOjEwNTE0MDAwRjJGQzRGQUY5QTc2QTBERTVENUVCMzYyNEMzMkQ0Q0JGOAorOjEwNTE1MDAwNEY5QTk4OTNDQjIzNEQ1QzYxNjk4RENFNkI0OTQ5MTQ2RQorOjEwNTE2MDAwNDdGMDY2RDNGNzQzRTNFMzA1MzUzQUUyRUY4M0YxODI5NAorOjEwNTE3MDAwMUFGMTE0RDUxNUZERkM4RUYzQkY0QkM2NEY5NEJFMjIxOQorOjEwNTE4MDAwODQzQUQxQkU3OEE1NTFGMEY0QjJBMUYxMDMxODM4OUI0RQorOjEwNTE5MDAwNEQ4MTVERDQ3MDNCQzE1MzZCMjZCQkUwNkE3MTg1QkEwQgorOjEwNTFBMDAwQkQyN0Q2QTE5RkEwOEM2REVFQzRFRjUxOTZCOTc0MTJBNQorOjEwNTFCMDAwODhBMjA0NzEwNTlFREY1OUFFRTgxMUYxRkUwMUM0MEYwQgorOjEwNTFDMDAwOTRGQkYxN0VDMUFENkU2RTlGNkY1NUU0N0U1RTA5OTdENAorOjEwNTFEMDAwMzNFQTM4RUE3QkYxRTc3RUM2QUQ4RDNGQzRCN0JGQTc5RgorOjEwNTFFMDAwQjQ3N0Q0OTQ2RkMwNzMwQkNFRDUzMUU0RkYxRDM1NTUyMQorOjEwNTFGMDAwNjY1N0NDNzgyRkI4NzlERUNDMTY4QzUzRDg2M0UzMTQ3RAorOjEwNTIwMDAwM0MxRTExMUY5RjUwRjk1MzQ1RUY2N0IzRjBEQzlGRTgzOAorOjEwNTIxMDAwRTFGRUEzODA4M0ZCMzMyQjBFNTREMjNEOTNFODNBMzk1MQorOjEwNTIyMDAwN0UzRUUxMThCQzY3OThDQUY4QkU5ODk5RkJCOUM4QUYzMgorOjEwNTIzMDAwNTAzRUY3RDMzRUZDRjcwNzk4MkY5NUZFM0Q4M0MwMzFEMworOjEwNTI0MDAwNTdCQjBERjlDODVDNzE5MjIwOTM3RjdCRDBERjhERkUzOAorOjEwNTI1MDAwQTg4NUM3MUJFNjYwM0U3MEM1RTJCMjEzNzgyRThCRUJDMworOjEwNTI2MDAwMEM5NDc3QjRGMDc4MkQ3RDY3NUM5NTU3MTU4QkI3QUZBQworOjEwNTI3MDAwQjU2MjdCOTFFMEIxQzhEODVFNTM4NUVEMzdCRjE4NDY2MworOjEwNTI4MDAwQ0YxRTlCODdCQjA3N0E4OTFDODNERTc5RTRERkZFMjk2QQorOjEwNTI5MDAwREE0NTE1RjMxNUJGNzcxRDk3QUI4QjdCRTYxQkY4NDdGNworOjEwNTJBMDAwQUZCNDcyRUU2MEVFOUZDODZFQkVEMDUzNDFGRUVDNzQ5OAorOjEwNTJCMDAwOENCN0JBQTM3MkE2RTI1NTkwM0ZDOTUxRjlGM0I3Q0FBOQorOjEwNTJDMDAwOUQzMzZFOUVFNzNGMDFFNDBGQUUyNzZEM0U4RjBCQzYwOAorOjEwNTJEMDAwOUZGRjBCMEEzRTBEMjc0Rjg2RTM5RjI4M0Y3NDUzMzhFQworOjEwNTJFMDAwQkQwODhFQThEQzk1RDE5RUJFMkUyQTdGQTU2RUE4OEYwNAorOjEwNTJGMDAwMUMxRUZGRjIxNUJDNEUxRDQ2RkYxQTVEMkEyOERGMUIzRgorOjEwNTMwMDAwMUIyNjVGQTNGQkVGRTNGN0NFMkE1NUY5RTdGRkU1N0UwNworOjEwNTMxMDAwNkZDNUJFNTFGRERGQUEzREQ0QTJDMDU5MkQxRjUwRjQ2OAorOjEwNTMyMDAwRDlCRjM5NUYxOTg1NjJDMjdDRTVCNEM0RjlDQTc3NzQwNAorOjEwNTMzMDAwMDlGNDFEMTYyNTVGRjlCMDkxNTVFRUIxNjM5RTlFNzI3QQorOjEwNTM0MDAwMkYyMUU0MjNGREU2RjBEM0JGNUFGRjlDMURFRjI1MDg3MworOjEwNTM1MDAwMTI4QTlEQzZBRTEzMjQ5RjFCNDE5RjIxM0RBOEU3MEZEMworOjEwNTM2MDAwREMyRkQ1QzVGMzRCMUJCQkI1RjcxRkQ0NzI1QjI5QkYzMAorOjEwNTM3MDAwQUY1MDBERkIyMTNGQjI5MkM3Mzc2QjJGQTdFQjgwRDcwMQorOjEwNTM4MDAwMTg5MjlERTgxN0ZBQUExOEVCMTcwQUM4OTEwQzM1M0YzNgorOjEwNTM5MDAwMzBDNEU1NTJDMjNDQkUyNjM2NDBGOTdFNEQwRDgyMDczMAorOjEwNTNBMDAwRTVDMTE3RjYxMzc5Nzk3RURGQjVGQTg5RUE0QkI1N0U0OAorOjEwNTNCMDAwRTZCNTI1REMyRjU0RUIxNzA0RDQ0N0NEM0FERjRBQ0FCMworOjEwNTNDMDAwRUYzRDIwNDg4OUYyNDQ1NzJCRjg3RUIzRTJBN0RENjUxNAorOjEwNTNEMDAwRTQ3OEIwRUI3QTgxRjI2QUYxNUUwQzlFRUZBRTAzM0NBQQorOjEwNTNFMDAwN0Y3RTU3MzlDRjlGNTdGREIyNkE1RUZDQjhBODVGOTZBMworOjEwNTNGMDAwRUVDM0E4RjlGNDZBN0VCQzdBM0Y3NEZFNTY2QjE4RjVDQQorOjEwNTQwMDAwOEI0RDg2MkUwN0QyQTE5QTU3RTQyQUU1NzJDRUFBN0M0QworOjEwNTQxMDAwNzczQzdFOURDQjRBMkI1REE1MThBNzJCRDUwREU3RTdFMgorOjEwNTQyMDAwNkEyQjREQTBERkJDQUVDOENGNzVBNUMzRUFFNTlEQTUyQworOjEwNTQzMDAwNUFCRDlDRUFGMTdBRjk3Rjk1NUY3NkNDRjA3RUUxNUYwOAorOjEwNTQ0MDAwOTc1QzlCREZFQTk2QzQ3QURDOTA3RTk1QTUwOUM2NkJEMworOjEwNTQ1MDAwQjcyNEZFOEVFOEVGNTRGRTFCRjdFRjhGQjAyMUY3N0JFOQorOjEwNTQ2MDAwQjg3Q0VCMTRFNDVGNEVBMzM4OTc4MUUyNUMyQTdGRTlCNQorOjEwNTQ3MDAwNENFNkUzRUY1M0Y4OEE1QTlFNTBDNjFGRUU3QjkzRUYzQgorOjEwNTQ4MDAwMkFGRDVBMDRFRjBGNzBERDI1QkJCNTdFQjJEMjJFQUREQQorOjEwNTQ5MDAwOUY2QzQyNzc5QUE2NUUxNkNFRDJGNEFGMzg5QUE3Njk2RgorOjEwNTRBMDAwOUYxNDI5RDZCNDVGNzdCMjVDNTM5RkRBN0ZCREE2RkYwNQorOjEwNTRCMDAwQjQ4RkFBMzRGNTFCMDdCNDdFQjJFOTE3MTdDNEREM0JERAorOjEwNTRDMDAwRTJGODVEMDkxODExRkJERTBDRjM1RDlBN0VEOTBEREE2NgorOjEwNTREMDAwN0RFNTM2NkJGNzM1QTY1NUJCMkY3NTVDNjc1MEJCQkZCNgorOjEwNTRFMDAwRkM0RUVERkVEMkQwN0ZFRkZFRTJGRUZCREJERDMyQ0RFNworOjEwNTRGMDAwRDNENzkzNEZERjAzREM1MkUzQTJFRjVFQUJGN0ZGRkU5RgorOjEwNTUwMDAwMTMwN0FGRkI1MjQwNkYwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwNTUxMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEI1M0UxNjc2MEY4NTE4QQorOjEwNTUyMDAwMEZDMTVCRjkxODE4MkVGMDIxRjhGNEMwMUNDQzBDMEMzQworOjEwNTUzMDAwOUM0MEFDQzhDOEMwMjAwMUM0RkM0MENDMDZDNDlFMEMzMgorOjEwNTU0MDAwMEMwQ0ZGODFGODFCMTBCRjA1RTIyNzQwRUMwQ0M0MDdEMAorOjEwNTU1MDAwNThCMDlCRTNDNkNBQzBFMDAxQzREQzQwQjM3ODk4ODk2OAorOjEwNTU2MDAwQjdERjg5MTdDMTdFQ0NDM0MwNzAwRTg4OUZGMUQwMzdEQQorOjEwNTU3MDAwMEMwNjFCNUUyNzQwM0ZCQjdFNDNFRDNBMjkzMkYwRkUwRQorOjEwNTU4MDAwMDY2MTIxMzE2MDlBMTQ0N0YwQTc4QUEzQ0EwQjhCMjFDOAorOjEwNTU5MDAwRDhDOUQyOTREOTk1MEZENDBGMDBGMTkzMjFGMDgwMDM4QworOjEwNTVBMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA0OQorOjEwNTVCMDAwMDAwQkVEN0QwQjdDOTRDNUI1Rjg3Q0JCREZCRTkyRERBNgorOjEwNTVDMDAwQ0QyNkU0NDkwMDM3MDk2MDUwMUU0QjgwQzg0QkRERjAwMgorOjEwNTVEMDAwMzI1MkM0MDQxMTgyOEEyQ0FGMTAwMjc5MTRBOUE1RkY5QgorOjEwNTVFMDAwREFCQjBCMjgwNEFBREU1ODUxQTM3RjZBMTcwNDFCMkRDRgorOjEwNTVGMDAwREE4MEQxMUI2REUwMkVBMjA4RDU2QTY4NDU1MUFCMEQ0QgorOjEwNTYwMDAwODg4ODA4NDk4QzhGNkFCNTdBQ0YzOTMzREY2NkU3Q0I1MworOjEwNTYxMDAwMkU4OUI2RkU2RkZGQkY3QkMzQUYxREU3OUI5OTMzNjczMworOjEwNTYyMDAwQ0UzOTczRTZDQzk5OTlCMzI2OTZDMjBDOTczM0Y2MEQxMgorOjEwNTYzMDAwRkU0MTZBMzMzMUM2QzY3NEE1RUQ0QUM3NzAzNUE3QUJDMworOjEwNTY0MDAwRkMzNkJGOTc3OUNEOENENUY5QUQ5NDZFRjFBNzMzRUZDOQorOjEwNTY1MDAwNjBGOEVFMzMxNDA2RUQ4Q0RERUI3NzUxRkUxN0ZFNDI1OQorOjEwNTY2MDAwNEE2QkZENDU1NEVGNEU3RjA5RTU2RkY3RkIyOERERUNGMworOjEwNTY3MDAwMkZBM0VGMzVGRTZBQ0E2RkYwQUZBMTc0OTNCQTI4MEQ1RAorOjEwNTY4MDAwNTA4MkJGQTJDMkFDNjRDNkFBOUVDOUM5REIwQ0I5MkRBOAorOjEwNTY5MDAwQjNDNjI3QThBMzIxRkY4QTkxMTlCMzAwQkU0RkE1RkU2OAorOjEwNTZBMDAwOThFQURFMzQ3MDc0NTczRDBEQ0Y0REVBQTQ3RTA4QTcwQQorOjEwNTZCMDAwNzYwOUM3OEI1OTk5MkQ0NkJEMkMxQ0U3OUQ0QjA0M0NBMAorOjEwNTZDMDAwN0I2QjRENEU3MkQ0N0E4MzExREVFRDI1MDA2RjI4MTQ2QQorOjEwNTZEMDAwQjg0MkQ2OUNFOEYwMkU0Njc4OUI0QjU0NUUyRjM5NTg0MgorOjEwNTZFMDAwOTMxRDFEOUUwN0VCRDVEQzIwRTBBNTA3QUMzMUVBOERBQworOjEwNTZGMDAwQzE3QTFCNkUxMEY4RjVGM0Q1NjQ0NUVGNzczQ0Q2NjM5RAorOjEwNTcwMDAwMkVGNTZGQUQ1NjQ2N0ZERjY0RTNGRkRCNURBNzJFMTZGNworOjEwNTcxMDAwNzkyMzY2OTMxODFCRDdENTRFOUYzMjE2NjAzODRFOTU2NQorOjEwNTcyMDAwRjkwQTg5MEZFRUNDQUZCRkM5NjdFQzI2ODQwOUVEMDNGNworOjEwNTczMDAwOTM1OEM4MDhGRDA3OTI1ODcwN0Q5NjU0N0YyNkQ1NkYwMAorOjEwNTc0MDAwRURGQkY1MzdBOTUyRkQ4MDIxNEE3RDEzNkI1MEIwRkM2QgorOjEwNTc1MDAwRTcyODQ3QzBGN0ZCRkNCOTk0NkUxNEYyNzNERjUwMDNERgorOjEwNTc2MDAwNjNEODJFREQxQzFDMDRFREVFRjE3QjQ4NUVFRUY2OEY1NworOjEwNTc3MDAwQTVGMkJCODQxQ0ZFQkI5MEIzQTA5MEIzMDc1MUNFMjAxMgorOjEwNTc4MDAwREQ4QTcyNjZDNkZFN0NBREE1MDBBNzdENkYzQ0RCRUNCMgorOjEwNTc5MDAwMjZGOTVBNEM3OEFBOENFMDZGRDgzQjY0RkI2NjgwN0Y3MAorOjEwNTdBMDAwREYwREFCNEU2RjAzRkFCNzM1MEZGMzE4QTFERTNENDNBMworOjEwNTdCMDAwMzVGOTYyNUU5NkRDNTVFRjlFRDkyNzlDOEI4NjEyQkQyQgorOjEwNTdDMDAwQ0IxMENFREQxRUMxM0YxNTA2MTY1MUVGRUUxOUUxN0E2MgorOjEwNTdEMDAwMTU1OEVGMkU0RjE4NUUyOEIyREZCQkE2ODRFQkFEMjIyMgorOjEwNTdFMDAwM0UyQkFDQTRDMURFOUQyRjNCOTg0MkYzMTEwNDg1RTgwQgorOjEwNTdGMDAwNkI0MkZBQzJCQzdDNzZDMDc1NEEyQkI0NEY0OUNFNEI4MworOjEwNTgwMDAwNjNEMEVFN0U5QzhGNjY5Qzc3NkVBMjhCRDYxRUU5RUNGMQorOjEwNTgxMDAwODNFRjE5MTY1NjhERjA4MUIyRkI4RDgwQUY2OUI2M0JEMAorOjEwNTgyMDAwMTFFOTcyRkJCNTQ1NEMxOUM2NTg1RjUxOUUxQTI4NTJCMgorOjEwNTgzMDAwQjIwMEFFN0Q0RTkxODJERjREQjNBMTFDQkVCQjQ0Nzk1OAorOjEwNTg0MDAwRjIxQTVFN0UzQjk2M0JCQUNBMTNCMTFDQkUyNzU1NDM4MworOjEwNTg1MDAwMzlFNEVENzM3OUY5MUQ3RUUwQzRFMEFFN0E5QjgwQ0YyOAorOjEwNTg2MDAwM0VFMjc3M0FGRjBFNkM0NUZBOTg0NkYzNTRDM0ZCMDlDMworOjEwNTg3MDAwMTQxMkEwREY0MTRDQzc3NEUxQkY2OUQwQkQxOTBCRUQxNAorOjEwNTg4MDAwNURGOERBMDZENzUzNUVDMzZGRDNFMDM4Q0E2QkY4RDgzOQorOjEwNTg5MDAwMkVFQzk3QjExMEQyQkU0QkZBMzI2RkFFOTgwRkFDM0JFNAorOjEwNThBMDAwOUQxM0JERDk1Mjc5QTZFQTQ5NTA4MTRFOTkyRjE5NTlCNQorOjEwNThCMDAwMDA1ODkwMDlFMjg5RjBGNEVEOEE5ODgxRjBFQzcxRkVDRAorOjEwNThDMDAwMjVGNzZFRkU5OTg2Q0E3NEQwRDJBMzgyMUUxQTFEMzZBMQorOjEwNThEMDAwRjY5N0U5NjAxOTIwRDM2MUUzMDA5OTBFOTYwQkNFNEYzRAorOjEwNThFMDAwODcxRENDNEQ3NDhFNDUwRkFEREZDRDQzRTQ3RUUzMkU5NgorOjEwNThGMDAwOTJGQkREN0M5MURDNkZEQ0M1RkY5QzdFNkJCMkU0N0VBRAorOjEwNTkwMDAwQUREOTcyQkYzNUQ5NzJCRkQ2OUM3RkFDNUZBNjdBNjAyNQorOjEwNTkxMDAwMzJBMEJFRDJGRTJFOTRGNERCRDVDQzc3MTZEQkEzOUU0QworOjEwNTkyMDAwQzNGOUE0RTkzOTUzQjI4RkY5RUM1REZDODQ3NThBQjFFRgorOjEwNTkzMDAwRkM0ODM4ODMyNUJEMEE3MDNFQzU3QTAwQzc3QjdFMzg5NworOjEwNTk0MDAwMkUxRDlDNDE3QTM4NUYwQjdDNThBNDlFRUUwNjg3MEQ3NQorOjEwNTk1MDAwRDQ4RkMzQTRGMDc2MjE0MzQ0RkY0Q0Y1QjEyMjQ3NjRCMQorOjEwNTk2MDAwM0I4RkFFRkYxQzdERkY0RTQ1OENDMzcwREVGRUREM0FFMworOjEwNTk3MDAwQkE2NkVCRjE0OTEzRjgzMEMzRjlFOEMxNUMzQTM4NTkxQgorOjEwNTk4MDAwN0EzODZFODE0RjQ4MzkyRjFDQjc3RTFDMTc4QUZFMDM2OAorOjEwNTk5MDAwOEFCNDdFMDEzRDg2NzVCNTZCMDdGQzY4OURDQUIzMDQ2OQorOjEwNTlBMDAwNzc4MjdFMDhFREZCRjIxNEFFMDNFNzFBQUY3NTVCQTBCOQorOjEwNTlCMDAwRkVGRTkxOTZEMEU1NTA3RTJFNTgxMEI0NDBGOUU0MjdCMworOjEwNTlDMDAwOEYzQUQxOEVBOTc4RDJBODYyQjk2MTlGOERENjk3QjY0OQorOjEwNTlEMDAwMUQwQTk1NTc1OTVBRUU5QzAwRTUxRDRGMUFEOTc2RUFEMworOjEwNTlFMDAwMkVEMzgwRTMzQjI1NzQwQTBCRjE3Q0E5OEQ2NzJCQjY3RgorOjEwNTlGMDAwRURCRjExREI5NzM1NTk5ODBERTA1NTNDQkQ2Q0U2MDRDMQorOjEwNUEwMDAwQzgyRjNCNjQ2MjU4QTU2MkU3NUE3MzVGQzgyRjBGMkFGQworOjEwNUExMDAwMEQ5ODA3N0M2OTlEMEFFNEQ5ODIzQkExRkVCQTdENUY5RgorOjEwNUEyMDAwQjYyMUZFRTcxQTREODMxMDlGMzNCMDRFQjg2MTlENzhDMgorOjEwNUEzMDAwQzlEMTkyM0ExQkU4NTMxRURDM0QwRERCOTdFRjUyM0M3NworOjEwNUE0MDAwQTBFMTAwRkY5RDA3MzMxMEZGNDcxNDhGMDU1OEI4QTI0RgorOjEwNUE1MDAwM0U5RUI5MjNFNkNCQTk0NjIzOEQ3N0Q1MzYyNUM4MDBDRgorOjEwNUE2MDAwREUzMjU2M0IwREU5NTk4MUM0NDEzQzNDOTZBMDRERTlEQworOjEwNUE3MDAwOUE2RjY3RkM3NUQ0OUY5NkFGNzgwNEZBODNGNjk1OEY3QQorOjEwNUE4MDAwMkIxRTFDNzJBNTgxRjk3MDFFQjczRDZEMkI3OUM4OEUzNworOjEwNUE5MDAwRTM1RDZCMUVFQ0MwNzE2RTM0NjNCRDY1QzE4NTRGRDk4QgorOjEwNUFBMDAwREM4OEU3MzZGMzM0QzQ3N0VCMzY3M0U5NTBBNDIzNUIyNAorOjEwNUFCMDAwNTAzNDE0RjFGQkJGMzI3RTc1NDYyRjhFNzdENTQ4Q0IxQworOjEwNUFDMDAwNzYyM0UwQzFFQ0ExODFCMzFDRERGNUVDMTk1OEFGREMwNQorOjEwNUFEMDAwMTFFQjY3MzkwM0JENEZFQjc3RDA1QzNDQUNFQkZCOTcyOAorOjEwNUFFMDAwODY0NEQyMUYyQkVBOERDQzZERURFQTQ3OTM4RkMwMTEwRgorOjEwNUFGMDAwMjExRjdCMUQ0NDZGOEQ5RkFCNUM3QzBBNjhGQzVDOTUwRAorOjEwNUIwMDAwMjhGOEFCNzZFNENGMUFENjFEOUYzQjkxMkY2NDRGQkI4QworOjEwNUIxMDAwMjhGRDA1QUM5Qjk4NkU4MTc1MUVFOTc3MkZEODRGNkVENgorOjEwNUIyMDAwQjJDQjNERjRGRDAxQjA5MzMwREQwQTc2MTJBNjBGODJCMAorOjEwNUIzMDAwOURFNDE2NzYxMkQ2REIwRTc2MTJBNjNCQzA0RUMyRUY1RgorOjEwNUI0MDAwMEY4MzNEOEU2OTNERDhFM0Y4RkQ1MUIwQzczMURERTVFNworOjEwNUI1MDAwMEZEMEY3QzdGRDM1OTQzNkY4NkIyOUREODM3QzgzQjQwRAorOjEwNUI2MDAwRDExRkE0N0E0RkY5RUIyOTZERjIzN0QwRjc2N0ZDNERCRQorOjEwNUI3MDAwOTRERTJFRThFODlDQzgwQTcwMUQ3NTdBOTkwQkM5OUVDMAorOjEwNUI4MDAwMzRDMzVCNjA4MjdDNTIxMUNGQTdERTEwMjgzMDQzM0VDNQorOjEwNUI5MDAwRDUwNzc5QTA0QkRGOTVBMTAyMEJFNEZCNTZGM0YyMDE4OAorOjEwNUJBMDAwQjdCMDQ5NTZDODBGMDhGMEYyRUNEQkJEOTM2QzkwQ0Y0QworOjEwNUJCMDAwQUVFNUU1ODNCNzA2MjZDNTQxN0U3MDkwOTc1RkI0MkJBRQorOjEwNUJDMDAwMzQyOTFFRjIxNzM1RjBGMkUxQ0Q2Q0IyMURGMkMzNDM1OQorOjEwNUJEMDAwM0M5RkY3OTI3N0IyMDNGMjc5MkQzQzlGRkZFN0MwNjRCOAorOjEwNUJFMDAwMjdFNEYzNUI3OUZCRjE2NzgzNDY3Nzk0RjU3NzhGQzlGOAorOjEwNUJGMDAwQkQxODU1Q0UwMUU1NkRBRjlBMDE3OUIzRkIyNjU0ODlFNgorOjEwNUMwMDAwNDc5NTUzOTQ2RjM0NzlBOUZDN0RBNUREQUJDMjNBREY4QgorOjEwNUMxMDAwNjhGNjUyRjkxN0NBRTc5NDdGQ0FFNEEzRjI3ODgzNTI3MAorOjEwNUMyMDAwNDA3OUIzOEZDQUZCMUJFMjI4REY2NDBBNTBGOTA4NDNBRQorOjEwNUMzMDAwMUY5RTM3MDdBOEJDQzBEMEFGMDBFMTNGNjMwQTUyRjlFRQorOjEwNUM0MDAwMzU4NjQxM0M2RjBFNTJGOTJGRDRFMTA1NTNBMEZFRTM5NworOjEwNUM1MDAwMDZERjVFRDQ3N0VCMTU1RjE5REE4NzRDNkQ0ODQ3N0QxOAorOjEwNUM2MDAwQTVEOTk1M0I3MTcwNjg2NzY2OTg2OTFFRUNGOTQzRkU4QgorOjEwNUM3MDAwNDMzNDBGRjAyRjE5RjNBNTBGQTM1RDBBNzAwRTEyMUMwOQorOjEwNUM4MDAwMTNDMDMxRjYwQzI3RUZFNUIxMTI5Q0JDOTdDQjM0MzgyQQorOjEwNUM5MDAwQUYxMDFDNUJFRkUwRUM3OTc5QkM4Q0NGQ0JFNTFBOUNBNAorOjEwNUNBMDAwNjMwNEM3RDFCQjcxRTVCRDMyNTFDNkU3OTU5NTFBOUMxNworOjEwNUNCMDAwRTMwNDI3QjE3N0Y4MzQxRTk1RTlEMzc4MzQ0QzlGMzM0OQorOjEwNUNDMDAwQjgzRUFDNEZFOTFEM0VBMzVGOTNFOTMzRkFCNTMwN0Q5MgorOjEwNUNEMDAwM0UyNjdDMzI3QTA3QTdGMTM1OTkzRThEQUY4NUU5RjNGMAorOjEwNUNFMDAwMTVDMUU5REZCQjcxOEQ3RTVEQTZDRkU4RDdDM0Y0MzE2NgorOjEwNUNGMDAwMTkxMDRFNTZFRkUwM0NGNUI2NEM5RkE3REUwRUQzQzcwOQorOjEwNUQwMDAwNjk0MEZBMENFQUREQjhGMkRGOTFFOTkzRkY0RTk4M0U2NAorOjEwNUQxMDAwNjk4NENGOTBERUMxNzlFQTFEOTkzRTRGQkQxM0E2OEZFRAorOjEwNUQyMDAwOUJGMDE5RDZCQjcxRTVGRjQ1QTY0RkZFNUZDMkY0MTk4MworOjEwNUQzMDAwNDI3MDQ2RjYwRTlGQTZGNzY0RkEzNEJEMTdBNjRGMUVCMgorOjEwNUQ0MDAwQzExOUQzM0I3Q0M2OUU5MkU5MzNGNjU0OTgzRTEzMDhBMgorOjEwNUQ1MDAwQ0VCOERFQzE2OTNBMjVEM0E3RTk1NDk4M0U1Mzg4Q0UyMAorOjEwNUQ2MDAwOTdGNjZFNUM2M0RGOTdFOTMzRjZGRDMwN0RBRTIyMzgzRgorOjEwNUQ3MDAwMDVCRTdBQzI4NzAxMUM0NzZDMzhDRjlDOTNFOUYzQ0NFRgorOjEwNUQ4MDAwQjkzMDdERTYxMDlDQTkwMDI3QTc2NzM4RTNEQjY0RkFFOQorOjEwNUQ5MDAwOEM2RjBCRDM2NzAxQzFCOUIyNzc3MDlFNjk5M0U5RjMzOQorOjEwNURBMDAwNEM1Qjk4M0U2NTQ0RTdBQjdBMzdBRUYxRUQzMjdEQzY4OQorOjEwNURCMDAwQjc3M0ZBNTQ1OTNDOTMxRDY4REYyNTMyQ0Y3NjY4NzI2OQorOjEwNURDMDAwQzlDOTg2MDM0RUM4OUJFQ0NDODM2MDVGNTI0MjNCMTAyRQorOjEwNUREMDAwM0VBQzk1NjQxN0FBMUVDRDRFRjEzMEI0NDM2NzM4REQ1MgorOjEwNURFMDAwMUVGNEZCMTgzNTdCODRCNUQwN0VDMUJFMkI1MUYyMDc2MworOjEwNURGMDAwN0Q2OTk4NzQwQkUyRUIwMEFCMkREMjJFNDkxODFCMjc1RQorOjEwNUUwMDAwRDk0Mzg5REUyNDI5REZBN0IwQUY1NDNGQTUyODVCMkFGOAorOjEwNUUxMDAwNEYyQkI5NDgyQUNGRjBFNTQ5RjlDQ0IyRjE1MkZERkUzQgorOjEwNUUyMDAwRDU5M0E0RkMwNTZCQTY0QkY1QjMwMkIzQTQ3QzRFQ0Q3MQorOjEwNUUzMDAwNzU1MkZENDFCNThCQTRGMjBCRUJDQUE1RjIyMUMxNTVGOQorOjEwNUU0MDAwNTJGRUUyRkFGRjIzRDUxRkQ2QjA0RTJBMUZEMUI0NTkxNQorOjEwNUU1MDAwMkExRjE5RkE4NTk0MUY3NUU4MDFBOUZFOTg5NkVENTIzQworOjEwNUU2MDAwRjkyNUM3MUU5NUNBQzdCNUVFOTFGMjEzNEUzRkEzQjNFRAorOjEwNUU3MDAwMDNFNUZERkZGQTAyQzZFREMxMEMzM0Q5ODMyMTg3OTlGMgorOjEwNUU4MDAwRjJFNjdEMzZCMkZGRjc2MzFFRjg2OUVFM0I4M0YyRTY3OQorOjEwNUU5MDAwNjcxN0JCOTM3MTNGOEQwMDYwQkQyRkU4NUI3NjIxRkFEOQorOjEwNUVBMDAwN0I2RTFFRUZCQkQwMDVERjZGMzZGQjQ2QjhBMkY4MjMzMgorOjEwNUVCMDAwM0NBQTZGOUY4MUZDNDUyRDBBNEJDN0Q0NkRDMDM0Q0VFMAorOjEwNUVDMDAwMjhGNkVCMTYyRTVGMUJCM0YyMUYwQTQ0Qzg2OTREN0ZGQworOjEwNUVEMDAwOTg3RjkwM0Y2QzMwOTNGREFBQzlGN0M2RkVBNUU5MEJFOQorOjEwNUVFMDAwMjNGQUQ5RDBERjVDQjI3RDI4RkZCRUQ4OEVGRDE1QkQ2OAorOjEwNUVGMDAwODhGM0FDQ0FEQzMxMThGMUQyRjc2M0M5MUUyQkY1NjMwNQorOjEwNUYwMDAwMUQ1MDQ2RkRCQzg2RkQ0NEY4QkQyQzAzQ0E3NEZENThFNworOjEwNUYxMDAwNEJCNjhCRUZBMjlGNjMzOEFFNThGRDZDQ0MxRTJGOEYxMworOjEwNUYyMDAwNjc0MDM5RjVGM0FFQUU5RjhEMDNDQTc1RkRDNEYxRjEzQworOjEwNUYzMDAwQzA3N0QxQ0Y3QkU3MUQ0RkNFNDQ3OTNDMTdBQ0E0N0UxMAorOjEwNUY0MDAwM0E3NDc0QjM1Q0IwNTJENzhGOURGQUMxRUY4QkM5OUY3RQorOjEwNUY1MDAwMEJCQjgwMzRFMEIzQTVBMzk0RTRFMDNGNkQyQzAwNzI0QQorOjEwNUY2MDAwNjFDRTJDRkYzNUU2RDk1QjM2MzYwOEZCNzE0M0JGNTA1NgorOjEwNUY3MDAwOEZFNTcyRkZEMUQzODYyNDFBQ0Y2NzcxQzBGRjA4M0IyQgorOjEwNUY4MDAwQjU2QjNGMUJBMDdERjE1MjgxMjIwQjAyNDZCMEJGQUQyNQorOjEwNUY5MDAwMTRCMkI5NjQ1N0YxODA5QkRDOTAzNjFEMTg3ODM3RjYzRgorOjEwNUZBMDAwQjNDNUUxMTkwNEY5QjZBNkM5RTZDNTUxRTQ2OTY5QURGRQorOjEwNUZCMDAwRTk1NDZCQTQ1RjQ0REJERjRDNjJCOUQ1RDBGRjJFOUI2NAorOjEwNUZDMDAwNEJDQTZCRTk0QUM1QzU4NDNGODJGMjI3NjBERkMyNjBENQorOjEwNUZEMDAwM0ZGMDY3RDgxNzMwMjBENUJCMjZCRTRGN0IwN0Y2Mzc3QQorOjEwNUZFMDAwOTg2Rjg1RkQwRDk2MzNCNjk2REE5RDEwN0VEQTEzQjc1RAorOjEwNUZGMDAwMkI0MUE0Rjc2NzNGRjlBMTg5RjQ3ODgwQkQ5QTlFOEE2NgorOjEwNjAwMDAwN0UzN0ZFQjc2MDREM0NGQUY4QzNGODJEMENGNDkxRjJFMAorOjEwNjAxMDAwQTAyRTMzMERFOUI0MkZBNEZENkZDN0QzOTZFMDc2QTQ2QworOjEwNjAyMDAwNkI0RDI2RDA1NEQ0Q0I2NkVDNzVEOEU0NjYyNDUxMzYzQgorOjEwNjAzMDAwRDMzMDk2QjFEOUQ1QzU1M0QzNjgxNjI5RkQ1NzAxOUVFMworOjEwNjA0MDAwQjMxQTQ3OUFBMDA1NkIzM0I1REVFOEIxNzdDMTY1NUUzOAorOjEwNjA1MDAwRDMwOUE0OEYxNUZFMjE5QzZCMEEyMTFGRDFGRkI1NDVFMgorOjEwNjA2MDAwNzI3RTJFNTNCQkYyQzBFRkMxQzY2Q0MxMzdEMUFGREIxRAorOjEwNjA3MDAwNkI0MkJFMTZBNTcyN0NFNjYyOUE4N0M1RENERjUxRTJGMAorOjEwNjA4MDAwRTI2RDM1N0NBQTE2OUI1ODg4RjZBNzgxMTQ4NkZFRTgzNworOjEwNjA5MDAwNDAzMkQ1QkI0RURCNjdFQUYwMkIzMTU5QkQ0NTQwRDdDNgorOjEwNjBBMDAwOTI4NTQ2QTJBQjFFREYzN0Y3QzU3QjBEQzMyMUFEQjk4NAorOjEwNjBCMDAwREI4NEFFQ0Q5RUYwOUZFNzkzQ0I1OTE5RUY0RkEzQUI5NgorOjEwNjBDMDAwMjYyRkE3MDQ3RjRGMjBGRjIxN0QxRkY5MEY3ODlGMTRGMworOjEwNjBEMDAwRkNFRjkyNjNDRUZGMkE4QjZGMjZGMkJGRTM3RTIzMjM3MQorOjEwNjBFMDAwN0UwOUJFQ0YxMTdDNUY1QTJCRjM3RDBFRkFDOUExRkU0QgorOjEwNjBGMDAwOUNENTU5QzFGNTU4QkZBRThGQzQ1RjE4Qjg0Qzg3REEyQworOjEwNjEwMDAwQkJBNjgyNUFFRDg2RkZEQjQyMEVBRUFCRDlGRDNDQjI5OAorOjEwNjExMDAwRjdGQTMyRERGODA0MUY2RTE0N0M5OEFGQTNDNzFDQzFEOAorOjEwNjEyMDAwQjdGOTgyNkZDQjU4RTBCNjBDRjIxRjA1NERFODE3OUIwQworOjEwNjEzMDAwNTdBNjMwRDQxNzU1M0ZENUY4RDYyQUYxQ0RBN0YxNEQ0MworOjEwNjE0MDAwODdFRjhEODI2RjM3RkU4NEYzNEQ4Rjc3QUJFMDVCNkIwQgorOjEwNjE1MDAwRERDNzI2OTZERDFENkYzRDlFMEJENkU4QzYxNUQwRjMzNAorOjEwNjE2MDAwQUQ1NjlDM0JCOENDNjhFRjE0N0IwQkZBOUM4Q0E4N0Y5NworOjEwNjE3MDAwNERFMTk1N0Q0RTQ2RTg4NTZCOEI4QUE1RkNEQzkyNzlENgorOjEwNjE4MDAwNTJGRDc5QkU4NTUyRjlGNTY1Q0JBNUYyRjlENTNGOTQ1QworOjEwNjE5MDAwRjIwQkQ2RkM0NEFBQkYzMEIwNTYyQTVGNUNCMzQ5MkE0MgorOjEwNjFBMDAwNUY1QTdCOTc5NDVGNTY3N0JGNTQ3Rjc5NzA5QjU0QkUzQworOjEwNjFCMDAwQTJGRTExQTlCQ0EyNjFCNzk0QUY2QTdBNUFBQTZGRDg5RAorOjEwNjFDMDAwMzdFNDZBOTRBRjk3OEUxQTE5RkFDQjNFRjVCQzRGRkVBRQorOjEwNjFEMDAwQkE0RjNEMjYwRkQ2QTk0NDk5MUI4N0YyRUMyNjc5M0U4QgorOjEwNjFFMDAwRTVDRkE1RjRCNERGNDNGMjdFQzYzRjk2RDJCNkE2MDM1MAorOjEwNjFGMDAwNzZGNDNGNTZDNTgxREU0RjA0M0JEQ0Y4RTZEQTlBN0U0MgorOjEwNjIwMDAwQjhERTQwRkJGMThDMzUxQjVCRDcwNjIwN0YwMDBGQTM2NworOjEwNjIxMDAwNjBERUNDQTgzM0IzRDAyODA2RDJERDM3MkNDRjFEQzYyNAorOjEwNjIyMDAwODhGMkQ2MUVDQUVCNTQxNkVBRDNCRDdDNDY2QkY0RUY1NworOjEwNjIzMDAwRUQ0QUM3RTAwQ0Y0MTNCRTYxNjEzQjIzRkM3NUREQ0Y3MgorOjEwNjI0MDAwMkI1ODI2REExNUIxQ0FDRjFBNTg1OUU0NzlENjQ5MjMwMgorOjEwNjI1MDAwM0YyNzcxMUEyNzlEMzQ0MkJBRDJDQ0U3RkZDQTNEMTlCNQorOjEwNjI2MDAwOTM5ODEzRjNBMUMxRDU1MUZDMkVFMUZFMUEwMDk5MzQ4NQorOjEwNjI3MDAwRTQ3MzhFMzRFRjk3RDU1RERDMzVDRjE5RjY5MzRENzIwQworOjEwNjI4MDAwQkIzQzM4NEFGQUJFQTI3RTgyRDQyRTU3RjFCRDZCODQ0NQorOjEwNjI5MDAwN0E2N0Y3MUI2OUJENjZBMTAzMDNBRTE5ODZGODc5NEZDQgorOjEwNjJBMDAwRTI3N0Q2OTQ0Mjc2NTc4QkRGREJFN0U0NDBDNkZFRTgyMAorOjEwNjJCMDAwMkZBNEY0NTU3RjExQTVBRkY5NEIyODNERTZGNzUxRkEwRAorOjEwNjJDMDAwQTZCRjhDRDIzRkZCQUIyOTdEQzdCRjg2RDI1NjdGODA0RAorOjEwNjJEMDAwRDIxM0ZFMUE0QTRGRkE2QjI5M0RFNUFGQTNGNEI0M0YzRgorOjEwNjJFMDAwNDhFOTE5N0YzREE1NjdGRDBEOTRCNkY5OUIyOEQ1RjRDMworOjEwNjJGMDAwNjc0RkYyNzc1QUFDQUY2NzUwRkVBMkM4OTlGOTU2QjYwRAorOjEwNjMwMDAwQUU2NjYyOTc5Q0M1QTk5Njc1Mjg2NzFBN0Q2N0Q0NTlCMQorOjEwNjMxMDAwODQzQ0E0NEFGMjkwODhFQjMwQzk1OTBGRTU3NTI2MjFEOAorOjEwNjMyMDAwODdCMURBNDcyRjQ3NzlFQkZCM0RDODFCNjNFQjQ4MEU3QgorOjEwNjMzMDAwNjYwQUI5RkJBRUYyQzZEMDFCOUY4MkYyOTRBOTkzMjdERQorOjEwNjM0MDAwNTkwRTM1MzlEMkY0NDBBRTUyMzQ1QzFERDMyNTU3MzM0MworOjEwNjM1MDAwOEREQzRFRDJFNEVBRTc2ODI3NDZCMUI3NkU1MDE1QjEzRQorOjEwNjM2MDAwRkU3MUZCODhGOTMyMEM2OEJGQUQxMjdFN0ZFNjRFQTc0NgorOjEwNjM3MDAwN0NBN0U4N0IzRDgwNkJDMTdBNkEzMDE3RDc5MUNFREM3MQorOjEwNjM4MDAwQkYwRDQ2RkY3OEU3MzEwQjQzM0Y3Q0FDRjFFOUU1MjVEMworOjEwNjM5MDAwMzZEREJEQjQ3RjI4MERDMkEyMzZBQTdCQjkyRDhFRDNCRgorOjEwNjNBMDAwRDU2NjYwODUyQzBGQ0Y2N0YzOEZGOTgwOUY3MUZGNzlEOQorOjEwNjNCMDAwNzExRUVFNkJFMUJCQ0FDOEFFMEE3QThBQTNGOERCMTk3QworOjEwNjNDMDAwQ0E3ODVBQ0ZGNEQ1RUE5RjdBRTBDQjdDM0MzNzlGMjkzNAorOjEwNjNEMDAwRTY3OURDMDEyMzNGRDcwRTNERTRCOTI2RTI3QzA2RjZFMAorOjEwNjNFMDAwREJFOUU4NzdFRTE4NjQ3NjkxRkQxMEVBMkJEMzMxRDgxQgorOjEwNjNGMDAwNTdBMkUzODE0MTlGMERDNkYzOEQ0RDIwODczOEJGM0FFOAorOjEwNjQwMDAwMDcwRTRFNjBFNzkxOEY5RUY0N0M0RkY0NUMxNEVDREIzQQorOjEwNjQxMDAwNEI3QTlBMTk5RTFCMDEzREI3RTNGRDk3REVEMkIzMjc1NQorOjEwNjQyMDAwM0REOTkzN0UzQ0IxOTlEM0Q5MjlFQ0QzNTg3NDZFOUY1MgorOjEwNjQzMDAwMDRGMzJFOEExQ0RGQTNBQUIyMUNCMzgxRkNCQzQzQTNDNQorOjEwNjQ0MDAwM0ZFRTRCMjNFODdGQTlERDRERjU5RkRCRjdENjgwNTY2NQorOjEwNjQ1MDAwRThBN0IzRjFDMjA0QzZDRjczQzhBRUVCNzg1MkQ4RUQ0QgorOjEwNjQ2MDAwRUU0Qzk5OEZBRDdEMDlBRTA2RTdCOTI3NUYxRjgwRkIyMworOjEwNjQ3MDAwRTREQjMwMDNGM0VDQzlGOEEyNUZBOTI5NURGMDdBN0I3NQorOjEwNjQ4MDAwMEUxRjZCNUNCQkJGRTVGQzZDNEZENUU2NjdDQjAwOTQ4MQorOjEwNjQ5MDAwQTdDRjg0MUU4ODM5QkU5RUU0MTRDNzA3NzBBRTUyRjg5OQorOjEwNjRBMDAwRjgzNjE4OEI3RTg3N0EyNjNDQkVEMTI5QkQxQTVGNTVGNworOjEwNjRCMDAwODI5OTI5MjMwMDNGODdEOUNDMTIxOERCQTFGQTBFQUFCMgorOjEwNjRDMDAwQjQ4RkYzQjQwNkQwNEZCMTJGREVCMzFFNTg1MkU1M0M2MworOjEwNjREMDAwRjM3MkM4OERFRDY0N0ZDNjhBN0E5QjRCQjY5RjEyNURCRQorOjEwNjRFMDAwQjJGRDk0RTE4QUI0OUYzQTBGM0RFNEY0MDE3RUFCRDI1MQorOjEwNjRGMDAwMERBRTkzQTM3MDlERjM4QTc1OEVBRkFCMUE3RTE1MEQwQQorOjEwNjUwMDAwNTkyRUJCMDQ0N0NFNzdENjJBODUwRDI0NEZFRTg0RDk2OQorOjEwNjUxMDAwNTFDRUNCQjQ3NDU1QkFEOTc1MTJENkFCMzNGNTM5MDkwRgorOjEwNjUyMDAwRDhFRjE5QkZENUM1RDc1Nzk3OEJGNzlCRUU4QTVDNUYxRAorOjEwNjUzMDAwNTdBRTg5QTNGQTFBN0VCMUUwRkVCM0YxNjNBQzkxQkQwOAorOjEwNjU0MDAwNkJDNTc1MTFDQTcyNjJENzhGQzk0RkY1MTMzMzlENEI1NgorOjEwNjU1MDAwMzc5QjNFNDNGQkREOTZBQkQ5RUYyQUU1MzVCODU1MERBOQorOjEwNjU2MDAwQzY4MDY1MDQ3RURGMjVGNTA3RUREQ0RBMTkzM0I2OEJDRQorOjEwNjU3MDAwMkQzNzJBM0JBNUYxMTNGODZGQzU4Mzc3REFCNzVBODkwRgorOjEwNjU4MDAwQ0YzRTgwOTgwMEYwREE1NTdCMERDQUQ1MDk5NUNGRTc0QworOjEwNjU5MDAwMkEyMUE3MTVENjU2QjNDRjRERTQ2RTQxNzk1RTM0OTZDNQorOjEwNjVBMDAwNjkxMzY2RUU1QkEwQTczRjc4RDE0NEY3QjREODU3MDBEMworOjEwNjVCMDAwM0RCRkVCQUFDMDEyNTZFNDQ0QTdFN0EyQzYxNTMzNzA0QworOjEwNjVDMDAwRERGRUMwQTBFRDg3NkJGMzcxRENFNzk4QTExMEY1RDI3QQorOjEwNjVEMDAwMzlGNjQ3RTdBODg4RjkzQUM0QzRGRDMxQUM4NkVGNzNCMQorOjEwNjVFMDAwMDJGMDBGQzdCN0I0NTZERUY3MkNBQjkzRjNBNTZDNTY4OQorOjEwNjVGMDAwMkFFQURCRDIyRDI2MTYwNERDOTdFM0JFNDkxQjM3RThENgorOjEwNjYwMDAwREYwQzEzRjc2QjJDNjNENTFCNzA5RjdFQUY4OUZCN0I3MAorOjEwNjYxMDAwMTZCOTk4OUEwOTc4NTVGQ0M3MkZGM0QxRUZFMzMxNzE3OQorOjEwNjYyMDAwQkI0MzNCNEY1RTlFQzRGMTJFOUYxRDM0N0JBMUZFQkIzRQorOjEwNjYzMDAwOERBM0U2ODBDNjg1RjZDMTBENjRGRjE0MzNDRjRFRDYxOAorOjEwNjY0MDAwOURFRThCNkI2NEZDN0FDMjVGOEZBRjY2MDc3NTNCRDc5QworOjEwNjY1MDAwMTY3ODI0RDcyQkRFNjAxNDNENzc5OTQ5MTFGQjNGM0UxNQorOjEwNjY2MDAwM0Y2NjlCNjQ3RkNFM0M5M0VDRjdEMUU0QzAyNEU0RTAyQQorOjEwNjY3MDAwODRFQUJCREEzNDg2RjMxREY5QThBODFENjY1RjQ0M0RBMQorOjEwNjY4MDAwNzM1N0JERDlFN0FCNjdDMTdBNDZBQTM3Q0Y5NDgyRjU3NQorOjEwNjY5MDAwM0FBNkQxRkU5ODgxM0MwREVEQUE2N0VCODI3NzIzODc1RAorOjEwNjZBMDAwMjdEN0FCRjg4RkM3OUUwQTgwQkM5NEZGRjYxRTI3ODNCRQorOjEwNjZCMDAwNzVGMzAzQjUzNkQ1MDNERjU3RUVCQ0NERTk4NUY0QjRFOQorOjEwNjZDMDAwMUE3MDIyM0YzRjA4MUEwQkEzRDE2MzRCOTgxRTVFQkI4MgorOjEwNjZEMDAwODJGRTM0MjE5RkFDMjY0MDdFOEFDRjc2OUE1Q0U0RTcyNgorOjEwNjZFMDAwQUZCNzg0MkMyMEE3OTU4RENCNjdCMEUxOTQzRkNFRjM1NAorOjEwNjZGMDAwMUIzRjMyNjJCRTQ5RTY1N0Y5QUZFRjQ5NzVGMzdCMzY2RgorOjEwNjcwMDAwREM5RkM0NDI2NEU3NTZFRTc4NkYxQUFFMTc1NUFDODMyRgorOjEwNjcxMDAwRTQ0Q0RGMEVGQkZGM0M4OUU2RjU0MjczNDJGNzcyQzBBMgorOjEwNjcyMDAwOTNGQzA5NTU2Mjk2NTUzNUZFRkMyM0EzMTNGM0IyN0MwNgorOjEwNjczMDAwOTQwOTdCMTVFOTg0RkJGQ0RCNEM4RUU0NTNGMTkwQkQ5RQorOjEwNjc0MDAwODQ1RDgyRjM1Q0EzMDcwQjcyQkI3NUZEMjNGNzBEM0ZERAorOjEwNjc1MDAwMEVGODlDRERGMUEyNTMxOTFBQTkxRkI4OUM3NTM2MkNBRQorOjEwNjc2MDAwRkU5NUQ1MTA1QjhGQjQ4MTFDNDZEQTQ3MDA5OERBQjlFNAorOjEwNjc3MDAwOUI4NEJERERDQ0QzOTVBNjkwMTNFRkIzQUNEQzY2RjI2MQorOjEwNjc4MDAwODAwNEIyOTU4RjE5MTlERTAzNjA2RjU4ODJFODE3NUQ5NworOjEwNjc5MDAwRjFEOEYzQUY4RDA3QkFBRkQ4NkQ0QTlFQzE4NzYzNTc2MgorOjEwNjdBMDAwNTJCQkY4NTIwNUZGNUI5M0Q3QzU4N0YyMjc5RTM3QkJENAorOjEwNjdCMDAwODdGMUVGQjcyNDc1RjE2M0M1RUVGRDY2MzZBQzNCRkQ5RQorOjEwNjdDMDAwMjYzN0VDMzdCN0RBQTNGMEE1RTFGODM0NUM2N0Q3M0Y5QQorOjEwNjdEMDAwRjI1NzMzRkExMzNGRDhBN0IwQjRBQ0VFRURDQkI2M0RDOQorOjEwNjdFMDAwNEZFQjFERDI4OUY4MjhGODE0RTY1QjM3N0U4NTY2M0VBQworOjEwNjdGMDAwMzM5QUVBQjk1MDBGQzZFMkQ3MzJBMTc3NDE5RTFGN0Y4NAorOjEwNjgwMDAwMDZFRkZGQkM2OUYxRTBGOENCMUVCRkM5ODlFMzc4NUZGMgorOjEwNjgxMDAwQURFNjcyRkRDQkRCNTI3MTdFOTc5OTAyQTkyRTRBRjk0MworOjEwNjgyMDAwRjdCMjA3N0Y0NEYyQjZFQ0M4OEY1MkM5NUU2MERFMEM0NworOjEwNjgzMDAwMDNFOUUyNDAwNjhFNkZFOUQ2NkI2OTdDQTVDQzQ3NzIwRQorOjEwNjg0MDAwNTdGNjRCNjMxMURFNDdGQzU0NjU4NUJCQTNDQzhCMzhGMAorOjEwNjg1MDAwQjM0MkY4QkNCRjFEMEMxOTE4REZGQkI4QkY0NDdERjY2RQorOjEwNjg2MDAwNDcyM0REOEI2MkVDODc3NDZGRUM0NzYyQUNCMEYyNTE2QQorOjEwNjg3MDAwRkU1MzJCRTdEMzcxQTEyNzcxMjI0QkYyQkE2MzYzMEI0RQorOjEwNjg4MDAwRjJFNzRDN0Y2RjFBOUU3MzAwMUQwMjgyNUVDQTM3MDBDQQorOjEwNjg5MDAwRDc3ODY0NkExQUU3MEY3M0FCRjlBMjFERThGN0M5Rjg1NQorOjEwNjhBMDAwMURFQkI3OThCQ0I2RTE1MjNCQTEwRjc5RkZBQjQ1RkY5QQorOjEwNjhCMDAwODA3NzFDQUU1N0VGQTc0NkI3RjdDNjg4RjFDMTVGMEJDQworOjEwNjhDMDAwOEI5MEFGODhGOUNERTdGQjhFNEQ3QzdFNkJGMzNENTgwNgorOjEwNjhEMDAwNUM4OEU1OUZCQ0NBRTcwRkI2QzNGNTAxRjAwQUE1NTE3NQorOjEwNjhFMDAwRjlGRUQ5MEFFOTAzRDg1NzQ3OUJENzNCNEM2MjVFQ0JFOAorOjEwNjhGMDAwRTU2MDI5RDI3QTBGNzhBQjRBNDJBNDlDMDBGQzI0QTIxRQorOjEwNjkwMDAwM0ZFRDgzNEJCNzQwQkIwOEZCQUIwQUZCQTM3QUU2QUU3NworOjEwNjkxMDAwRUYxMUVCQzMzMkExMDc0QzY2OThGRjE3NzdDRDdGQjYxNgorOjEwNjkyMDAwOTVDRkZCOUVFQ0M5OTVBNkUwQzMwRkUwN0M3REMzRTI0QQorOjEwNjkzMDAwMDlCODcxQkU5QThBNzBEQzFGRUUzQUYwREE3NTIwRDc3QQorOjEwNjk0MDAwMUYzNjY4RjM1NEQ2OUZGQTc5NUFCNjY3MEM4QjM2NEZDOAorOjEwNjk1MDAwM0ZCNEMzRkUyQURBM0M4NUVGNTFFN0E5QkQ5NUU0RjhDMAorOjEwNjk2MDAwRkJENjlGMUFERDg2OUE2NUJEODk3QUYwMTk3NzZDRkE5NQorOjEwNjk3MDAwRTlGNUUwRUY0RDZFQTJBMzVFMEZDMkRGQUIyQ0JGQkIwQgorOjEwNjk4MDAwREM2OUYyQTZDOTU5Rjk2RjJBMkU0MDdEMTM5NjQ3NEQ0RQorOjEwNjk5MDAwREVDMkYyQThDOTlCN0U5QzMyRERGNEU1N0YxNUZBRTZFMworOjEwNjlBMDAwN0E2QkUxMzU2ODE3NUIzQjE4RUQ1NzBBNjYxQjgzQjhCNQorOjEwNjlCMDAwNEZCNjdFQzI2OEJFNEZCQTIxOUVGMjczOERBRDRGQTAxNgorOjEwNjlDMDAwQ0RGNzU2QzVEQzYxQjg4RTVGQ0YwMjI2N0U2RTVFNkI1QQorOjEwNjlEMDAwMjIzQkY1QUI2RkJFOTkwOEUzQjk0RUQwRjU3QTIwRjNCMAorOjEwNjlFMDAwNTVDMDg3MTI1NTA5QzUwMTlFRjM1NDE2NDg0ODQyN0Y4OQorOjEwNjlGMDAwQjFDMjRFNDRFMDcxN0Q5OTlDQzdCRkNCNTJCQkUwRjQ1RAorOjEwNkEwMDAwNTRGRkRCREFENURGMzUzREUyRTc2NzU3N0ZDMjk0RjYwNgorOjEwNkExMDAwMTc2MDM4NDdDODUxNzEzMzNGQTdBODFBQUQwNEIzNjk0RQorOjEwNkEyMDAwRkVCNUFBNDUxMUZCODRDN0NDRENDRTM4MzJFNTlBMzFERAorOjEwNkEzMDAwNDhCRjgyQjlDMzEyNDhCRTZCODdEMDNFQjA0QUU4QURBQQorOjEwNkE0MDAwQ0U4MDNCMDFGNTc5Njc3MzBFRURGQjNBMEYyRDc2Rjg5QQorOjEwNkE1MDAwQTJFOEFGMDM0MkNFOUUxN0U3MkNFRDc2QTVENjA4RjI0QQorOjEwNkE2MDAwREVDRTNBQzg2RTA5RDg2RDUxRkQ2RTc1NjY4M0IwNzc3QgorOjEwNkE3MDAwMDRERkUwQ0YwOEZEOTcwODM5OUMwNzREMTNGMjIyRjg5OAorOjEwNkE4MDAwMzZGQkFBMEY1NDY3NzczRUUwREY4OTg4N0RDMzNGNEExMworOjEwNkE5MDAwNUY5NDZCQTRFRjAxNUJFQkI0QTIyOEZFOTk0Nzg1QkUxRgorOjEwNkFBMDAwQkVFQ0Q5MkZDQ0I4Q0U0RDY5MkU1MDkxOEU1M0VDNDYwQQorOjEwNkFCMDAwQzlERkIxNUQ5QkFGNDNEOTUwQzRFQkIyNjc5N0RGMzFGQgorOjEwNkFDMDAwMDZFNEI4RUE5MEQxNjM4M0YxNTUzNTdGNjRGNjQ1RDk4MQorOjEwNkFEMDAwQkZFOUU5ODlGMEQxN0U2QzM1NzNGQkY4QThBOTY4Mjk3NAorOjEwNkFFMDAwRDJGNUU4QjVGQzNDRjc0RjY2NEY0NTM0M0M2NzVCMzk1RgorOjEwNkFGMDAwOUVGMzU4RDFBN0EzOTU3RjNERkExNkNDNzU4NDI2MDE0NQorOjEwNkIwMDAwM0QzQUVERkM3RTcyNzdGOUUzRjNCRUQzQTUwNEQ3MkFCNAorOjEwNkIxMDAwMjg4NzQ2OUU0RkU2Rjc3RkE3MzFERjFEMTMxNTlBRUZCMgorOjEwNkIyMDAwOTc0N0VBQUY4MkE2RTJDN0YwM0U0QjY1QjNFMjMyNDAzOAorOjEwNkIzMDAwNzlBNURBNkE0NjM5QUU2QURBQURBMjVERkUwMzM3N0YxRgorOjEwNkI0MDAwNjdDMUQ0RUE2MUIzMjNGQzVCQUQ2NkVFNEYzQUYwQjdBMAorOjEwNkI1MDAwRUJFNjIzN0QzRjlFNkQ2MTg4OTc3N0U4NDc0RTVDRUZCQgorOjEwNkI2MDAwM0Y2RTFFNDVGMzIwRDZCOEZFRTBGNzVDMzMwNUZERjExRAorOjEwNkI3MDAwNjZBRUNGRjRGMjMwMkQzOTVFQ0E1RjNCOTlGNUMzNzMzMAorOjEwNkI4MDAwREVDQjJDQUQzNzc5QTJGMDZGOUQ4NUNGRDM1RUVCMzc4RQorOjEwNkI5MDAwRUJGRjMwRkQzNjExRjQxQjk3NkI1M0E0N0U5QjZFRTEyNworOjEwNkJBMDAwNzIxRkExREZEMkEyRTlCNzU1NkJERDY5MjgxN0FCRjZEQQorOjEwNkJCMDAwRTZBNDIxNUY1NzFENUU5QTEyNERCRkJEMjBGNkI1ODczMgorOjEwNkJDMDAwQzUzREU5RjY3RUEwREY0NjQ0RThCNzdFQTBERkEyRjgyNworOjEwNkJEMDAwQzE0NzVCMzRCQkIzMDdGRDY2RkRFRjk5N0YyRkEwN0VGNQorOjEwNkJFMDAwOEIzMkRFMkI4NERDNjlGQUFEQjA3OTJERTlCN0MyN0UzOQorOjEwNkJGMDAwNDZFOTNFRDI2NTE2NjFDN0M1RDQ2RjBCRUZCOTk2RjI3MAorOjEwNkMwMDAwMjY0RjdDMTRGOTQxQkFBMjdFM0IyQ0Y0MUNGNjgzN0EwMQorOjEwNkMxMDAwRUU2Nzk2NkZBN0U3RTY1OTM5QkUzREVBQjlGRjI2M0ExNworOjEwNkMyMDAwNkI3QTZFNTU3Rjg1RUM5N0VFNzJDOEY1RENBQTJDQUVCOAorOjEwNkMzMDAwRTc1NkVERTU3QTZFRDUyMEFFRTdGNEZBNkQ1MjM3RkRGMgorOjEwNkM0MDAwQzZEQjU3RTY0MjdCREEyNzY2REQ3NzAzREVFNzJCMzFDQQorOjEwNkM1MDAwNzlBQzUwN0Y4NjVCN0I1RjUwM0QyNjUyREZGRENDMTJDNgorOjEwNkM2MDAwNDNERjc5NDBERkQ5N0JENjc3QUZBMEJFNTM0OThGMEQ4NAorOjEwNkM3MDAwQzQ3OUE0OTc4RkU5MDNFM0E1RkI2QTQ3QkYzOEY1OUI2NgorOjEwNkM4MDAwREZFMjdDRjk4MzkxRUUwM0JENkVFMEZCQTE3RDVGOUNBQQorOjEwNkM5MDAwMUE4NUYzRUU2NUM0MDdFNkNCNEUyMTdGNkRGRUIxQTRFNQorOjEwNkNBMDAwNEYyNzBGRTVGM0JERTI1MDFDQUQxMzk1OEQwQTFGRUY4MgorOjEwNkNCMDAwMkQ0QUQwOERFQkMwREYzRUE3N0RGMkZDQkQ3QzlGM0MxMgorOjEwNkNDMDAwRDdDMkU5QzE3RTZDRTRFRjIyODAwNDBCMjNFNEExRTQ4NworOjEwNkNEMDAwRjM3MkYyRjM5NUE4Q0M4QUY2RUI4MjQzRDMzRjQwQkIyNAorOjEwNkNFMDAwNzVDMUU3MzU2NEVGMkVDMEVGNzhCRjYyNzdFQjg2NEM1NQorOjEwNkNGMDAwRTg3N0ZFNzI4NUY2MUI0Q0RDODdEMEVFNEI1Q0RGQkM4MAorOjEwNkQwMDAwOUZFRUFGRThFRjQxNjhGQTdDN0VCNUZDN0Q4MUNFQUVBOAorOjEwNkQxMDAwM0YyMEM2MDlGNjJDRDE4NUJENjI4Q0VBOUYzQkEwQTcxNworOjEwNkQyMDAwODc4NzhGQkY2MjM1Qjc4RkMzRjQwMEZBQjg5NUVFRjQ0QQorOjEwNkQzMDAwMDA4RUNFNTg5OERBMzVGRUY5NEZDMkI4OTJCQkM2QTU4MAorOjEwNkQ0MDAwRDE0MzNGM0U2RDdGQjI0MENDOEQ1OEUzRDVFOEQ3NkQzRgorOjEwNkQ1MDAwQkMxQTNENzVFMzdFREUyMkVDQTI4QkQ5MzA5QzY3QUY3NgorOjEwNkQ2MDAwMUI3Qzc3OEM0MUI5RjgzRDhDMUZGMDk5MzM2RjUwNUFEQQorOjEwNkQ3MDAwQTQxRTdFNTFFOEYzQUI3Q0M3QTdBNEJBOTE1RUZDRkRDQworOjEwNkQ4MDAwREQ3NTY1QkI5RjRGODU3MTVDRURDRENBQzNBQjA4RDc4MAorOjEwNkQ5MDAwRkVDREVDNDMzRkMyMDE1QjA3RTkzNTREQUUyRUI0NzIyOAorOjEwNkRBMDAwMzlGRkJCODA3M0I0QUY2QjBBQUQxRjREOEE4QkU2NEJDNgorOjEwNkRCMDAwNDhBN0I3QzRCREIwMkFBMDI3Q0VDN0FBMjZCMURFODA5NworOjEwNkRDMDAwQkNFMTdDOUJBNkFEM0Y0ODdGRjhDRkFCOUEzOUZEQUJDOQorOjEwNkREMDAwQUExNUEyRkY0Q0Q2NzExMEU5NUI5OUFDNzg0MjAwNkEwMworOjEwNkRFMDAwNUFEM0VFREJGMDFFRDUwQjM2Rjg4RUYzQjY0Q0YxNkNCMQorOjEwNkRGMDAwRTdFNEIwNjdBNDQ2OTU0QjM1OUE1Q0IyRUEyMUU0NTdDNAorOjEwNkUwMDAwRDBENkMxMDU1ODJGMDlERjhCQkM5RTgyRjY4OURFREUwNQorOjEwNkUxMDAwQjhDQ0QyNzIxNEYxQjhFQ0M3MjZCNjhENzVCNzNGMzQzMgorOjEwNkUyMDAwN0VFN0MyQkY2RkEyRERFN0U5NDE3RTA3MDlGQkYyMDVGRAorOjEwNkUzMDAwQTRCNzFERTlEQTYxNDZCOUFGMEFGMTc1NDMyQkFGNTIyOQorOjEwNkU0MDAwREQ1Mzg4M0UxQUJEOUI2MDVEMThDREU5OERFRkJFRjQyMQorOjEwNkU1MDAwRjRCQzVBQ0JBMzNDNjNGRDY2QzU4NEVEQUYwNDNFRjQ5RAorOjEwNkU2MDAwODFBMkM5ODYyRjBFNkFGMjhCRUZDNEY0NzRDMUZEN0YzNAorOjEwNkU3MDAwNDZDNDdDNDdCRDE0NzlFRTU4RDk3NDg0RTgzMjdEMzUxOAorOjEwNkU4MDAwOTg1NTExNzQ0NzdENzUzRUZBNzQ5QjBGNERGQkEzREUzOAorOjEwNkU5MDAwODNGQUI2RjNFMTQyQUIzQzFGRjZEOTNBNUUxQzgxRkVBMQorOjEwNkVBMDAwQURCRDBBRTkwM0Q2OUMyOEVERUZBRkIwRjI3REQzMDE2QQorOjEwNkVCMDAwOUI4RkU0QjZFM0IwODlFRTdCRUJGNUM2NTg0MTdGRENFRgorOjEwNkVDMDAwNEY0NEJFODM5QjhDMDNDMUYzNUQ5NzhEQkRBQkUxOTFCNQorOjEwNkVEMDAwQ0RFNTI3NTI1RkJGNjBGMzExOUY2MkMxOUYyNkUwQzdENworOjEwNkVFMDAwQjI5N0MyRjg2MjdGNzg5RUUyOTZGQkQzQUYxNzlBOUY2MworOjEwNkVGMDAwQTdBNzcxNUQyM0Q2RkJFRjNBQUVGMEY5MjQ2QjMxMzNDRgorOjEwNkYwMDAwRUVDRkRGNkQ4RTM4Njc5QTIzRkNGQzlBMUYyQ0EyREUzMQorOjEwNkYxMDAwNENDQjk4RDhGNUQwREYxMjgyNzFCRkIwRUIyMUYyRUJFOQorOjEwNkYyMDAwOUU3QkY0Rjg0Qzk0REIxNUJGMzMzMjJCRjBCOTZEOTc5MAorOjEwNkYzMDAwODM4NUY4M0QwQTMzQUVBQkU1OERDNkE4RTcyMjhDQUQ1QworOjEwNkY0MDAwMjdGQzU2RkNENjQxN0FBNTdDOEYyNTM4MDNEQTk3M0Y3QgorOjEwNkY1MDAwRjVFRTcwRjQ0RkI1QURFM0ZBMjVGMEE4OTA4RjQwRUI1NQorOjEwNkY2MDAwNzAzQzJGMkY1N0Y5NzlCMTFFREU4Rjg1QkM5QzdEM0E3RQorOjEwNkY3MDAwQkUwNEY1QTM1MkNGREY3NTk2MzdDQzM1NTkyMkY2RTUxRQorOjEwNkY4MDAwOTU3OEUwQzZFQkQxM0RFNEMwMjMwQUY5QzFCQkUzQjc3NQorOjEwNkY5MDAwOTZENzdCODRFQkJERjIyNjUzMTBERjg3OTZENzZGQTM3RAorOjEwNkZBMDAwRkQ2QzU1RkQ0NzY2QjRFMzI2RkZGNjMxQjIyM0FBOUE3RAorOjEwNkZCMDAwOENCMjlGQjBERTE4QjI5MDFGRDM3ODFDNTNCREJGQUUwOQorOjEwNkZDMDAwQjJCMTgyRTY2MzY1ODNGMDg3RTlGQzQ1MkI3RUJCRjdBRgorOjEwNkZEMDAwQTkwMDkwNjZDNTEzQkY3NkEyOUUzOUQzQjJEMzQ5N0U2RAorOjEwNkZFMDAwQjg3QUVFNjc1M0VENkE3NDNGNUM0RkZFQjc4NjRENTEzOQorOjEwNkZGMDAwRkQ2RjY3RjAzRjYwRkU2REI1Q0FGRTM3NTZERkE3NTdERAorOjEwNzAwMDAwRTdFMDJCMUVGQkY0NDEzQzE3M0FCQkU3QzMwNzExRUY0NworOjEwNzAxMDAwOTU1RjdGRkNFMDRGRDEzRUQ5Njc3M0UxN0E1N0Y1RTg4MQorOjEwNzAyMDAwNTFGMkFCNkJFRDlFMTJGM0FBRUQ5MTVGM0ZGQzAwQ0NFOQorOjEwNzAzMDAwQkZCNjM3MkM3NEZGQUE2REVGRkIwM0RDMzBDRUI2REQ5NAorOjEwNzA0MDAwNUZBNEEyRkY3MkY1REVBOUI0NkY1OUZERTRFNEI0RjNDNgorOjEwNzA1MDAwREQyMzQxQjkwQ0Y2RTIzQzQ0Q0Y4NzAzOEQ0Njg2RUYzMQorOjEwNzA2MDAwMjBDRjFEQjM5MDlEMTFGNkEzMzY1NDcwQkZCNDVCRjhDQQorOjEwNzA3MDAwNEY3NzQ1M0Y3N0QyRkM3RTk1OERENzVDN0QyOUFFN0JERgorOjEwNzA4MDAwOEQyNjhGOUJCRTBCM0Y2MDRGN0VEMzU3ODE5RjIzN0EwNworOjEwNzA5MDAwQzFCNzVEQzIyRkFFRTNEQjM5RkMwRkUwQ0Y5RkFDQjJDRQorOjEwNzBBMDAwQkZGOUQzQzZBNUJGN0EwMENCMUFGQkM0RjQ5Qjg2N0E3RQorOjEwNzBCMDAwNDEyRkVENUM2QjlCRDVGQjhFMTVFN0MzOUVERjkwN0Y2OAorOjEwNzBDMDAwMUFGOTA1MzYzNzZCN0JFQ0QzMDFFODZGMzg2REVBQjhGNworOjEwNzBEMDAwOTFFRTVGRUNCNUQwM0RBMUYyQkRBRkQzRkM2ODdCRjI4MQorOjEwNzBFMDAwMDg5RDE3MzE3MUFFRDRDNkMyN0ZGQzFDNDBFQzY1QUE2NgorOjEwNzBGMDAwNzYzOEI4QkY1NUQwMURGREIxNkUyNzdEMTc3RTU3MkU0RgorOjEwNzEwMDAwQjc5QTNGMzY5NjFGQjY4RjREREMwMzE3RTc2QzE1M0JEOQorOjEwNzExMDAwREUzMjMzOUQ1RjVCMTk4QjdDM0EyRTlEMEI2QUUzRDY4MgorOjEwNzEyMDAwQzM3MzIxMUQyRTg5M0M0Rjg4RTVFNzE2N0EzNENDMjc5RQorOjEwNzEzMDAwN0U4RUQwQjY0RDlDMkY4NENGMEQxOEVCOTc4N0Y3REY0RQorOjEwNzE0MDAwRjk3OTc3NTU1MDc5OUQ0NTk5OEZEQTc5ODJEM0E2OUI0NQorOjEwNzE1MDAwOEZDMURFOUQyM0Y0OENFRjc3QTM4NzYyRTNGQjU2OEQwRQorOjEwNzE2MDAwMkU2N0JGOEFBRThGODdEODE0RjFGRUMwOTc2QjhCNThGRAorOjEwNzE3MDAwNzcxNjg4RjVBNDEyRThDNURGOTM3MTdDQ0Y4QUZEREQxMAorOjEwNzE4MDAwRDk0NzhENDFEQzA3NkY2ODM4NDA3QTU1M0ZBRjJCNTk5RQorOjEwNzE5MDAwRjRGODIxRTM2RDVDOUY1NDM2RUQxRjhFRkFFN0VDQjNGMworOjEwNzFBMDAwNEY5M0RDNTVFRTNBNkUwRTAwOUM4M0Y1NEY5ODVCODc0QgorOjEwNzFCMDAwNzZDOTM5RUFFQjYwODRCRTNFRkJGOEZFRTFGQzlDODNCNQorOjEwNzFDMDAwRUYyM0Y1RjBBRjEwRjBBQjlBNjVGODU1QkIzRTkyRTBCNworOjEwNzFEMDAwQUYwODM0OTg1REY2OUVGQjM5QTM3QUU3RTI3OENGQjQyNgorOjEwNzFFMDAwOTgyODJFQ0E5OTA2NjM2MUI0NzgyNTQzMzE5MDU0NEE5MQorOjEwNzFGMDAwMTc5RDM2MzhGOEZCMzg2MzkyOTlFQ0M4RDU4RUIxQzcyNQorOjEwNzIwMDAwMTI5MjMxMzVCQjcxMUZCRDdFMkRCRjBGQjlGRTY3OUUzNworOjEwNzIxMDAwNzRFNENCRkFDNDM5NzQwRTU0QUJBM0EzMkJEOTU1ODBCNAorOjEwNzIyMDAwRkI2QkQ3OTRBMkQxMjg1NjdBM0Q5MEU4MzU0ODc4QUZDOQorOjEwNzIzMDAwNzYxNEE2RTE3QkVFNUI4NTNEQzI1NDBGQkRERjMzM0E4OQorOjEwNzI0MDAwQTcxNUUyMzg4QzJFODNDQjE2NzUxREU1RjA0Q0Y2MjI3RgorOjEwNzI1MDAwOEExNzYxNzJDOUVGRTlCRUY3RjgwRkVFN0U3MkZDODdGQworOjEwNzI2MDAwNDBCRjdGMzRGRTAzQTMzODE4RkZFRkUzM0YwNEIwOUYxNQorOjEwNzI3MDAwN0Y4MUY4MEYyMUYyREI2OEYxMUY5MkJGRTdGODBGNkJGNworOjEwNzI4MDAwOTkxQ0ZGNDFGMDMzMUNGRjQxRjBGMzdGRTMzRkZDRkYwQgorOjEwNzI5MDAwMTVGRkMxMThGN0Y3MjkxODlGNDE4QkZGOTAxMjY3OUVDMQorOjEwNzJBMDAwMUExOUZGRTFDMkI4ODRBOTkxRjExRkM2QzVBNTRGOEQ3NworOjEwNzJCMDAwOENGRkYwODNCOEFDQTk5MUYxMUZFNkM3NUQzNDM1MzI3RAorOjEwNzJDMDAwRkU0MzU1RENBOEE5OTFGMTFGRDZDNjREQTRCQzE2RkZGQworOjEwNzJEMDAwRTFFRUI4QTk1M0U1RjgwRjMzQTc0RTgxN0M1QjlDRUYzNAorOjEwNzJFMDAwRUZCODVFQzU4QUZGRjAxRTRFOTYzMTNEQzc3RjAwMzg2RAorOjEwNzJGMDAwRTZCODMxQjFFMzNGRThFMUM0OEFGRjAwNzAxMjA4NEVGRQorOjEwNzMwMDAwOENGODBGRERGMDg5MTFGRjAxRTBBNDEzOUMxOEYxMUYyOAorOjEwNzMxMDAwQkFFMTEzMjNGRTAzQzBDOTIyMzgzMUUyM0ZFOEUxQzREOQorOjEwNzMyMDAwOEFGRjAwNzAyRThBNEI4OTFERkY0MTBGMjc1NkZDMDdFQworOjEwNzMzMDAwODAzMzhBRjA4OTExRkZBMTFCM0UzMUUyM0YwMDlDODkxNgorOjEwNzM0MDAwMDQyNzQ2RkM4NzZFRjhDNDg4RkYwMDcwQTZEMkI4NjI5NgorOjEwNzM1MDAwQzQ3RkQwQzM4OTE1RkYwMUUwQ0MyNDdDNjJDNDdGRDBGOAorOjEwNzM2MDAwQzM4OTE1RkYwMUUwQ0MyNTdDNjJDNDdGRTg4NjRGOEM4MQorOjEwNzM3MDAwRjgwRjAwQzc0N0Y4QzQ4OEZGRDAwRDlGMThGMTFGMDAxMQorOjEwNzM4MDAwQ0U3MjgyMTMyM0ZFODMxRTRFQUNGODBGMDA2NzE1QzEyOAorOjEwNzM5MDAwODkxMUZGNDEwRjI3NTZGQzA3ODBGMzUzODIxMzIzRkUwOAorOjEwNzNBMDAwNDMzNzdDNjJDNDdGMDAzOEI3MTI5QzE4RjExRkJBRTFFMgorOjEwNzNCMDAwMTMyM0ZFMDNDMEI5ODNFMEM0ODhGRkEwODcxMzJCRkUwQworOjEwNzNDMDAwMDNDMEI5OTdFMEM0ODhGRkEwODcxMzJCRkUwM0MwRjk2MAorOjEwNzNEMDAwMTVDMTg5MTFGRkExMUIzRTMxRTIzRjAwOUM3QTkyQzM4NworOjEwNzNFMDAwMThGMTFGQkFFMUYzNURFMzNGRDg0MjAzOTUxQzhBRkYxMQorOjEwNzNGMDAwNDA3MTIyQzNGMTFGOTJCRjc1RkM4NzY2QzRGNzdGRTMxQgorOjEwNzQwMDAwM0ZGQ0NGOENGRjcwQjNEREY3NzUxQ0Y5NDFCRjVCRkMwRgorOjEwNzQxMDAwMDc1QkZDQjc4QkZGNzBCM0JEMjgzRTFFRjc5N0RGMzJDQQorOjEwNzQyMDAwRkU0MzZBRkNCNzhCRkYwMEZEQTRDNzhGODlERDRGQUMxQworOjEwNzQzMDAwRjgwRjM5QkE3RTdBOEFGRjAwRkQwQzNBRUY3ODYyQzQwMQorOjEwNzQ0MDAwN0ZGMEU4RThGNjdEQzU3RkY4MjJFRUZDRjExRkZFRTU0RgorOjEwNzQ1MDAwRTIyQ0MwMzYwNUNGN0Y4QTQ5MTREOUJGNENEQzg1NkIzRQorOjEwNzQ2MDAwRTNGRkM5NzExN0M4NThGODU3OEFCQkEwQkRERjZGMzA1QQorOjEwNzQ3MDAwRTE3QUY1QTZFMEZCNkI0MjJFREUxMkYxMTc4RUM1OEM4OQorOjEwNzQ4MDAwQkYxMEJDOEFGQ0EyQ0JFNUY4MEJEMzA1MUZFN0Y5NjQ1QgorOjEwNzQ5MDAwNzk5OENFRjg3OUMzRjQyOTU5M0M1RTY2OTkyRUZFNDI1QworOjEwNzRBMDAwQUU3QzdFM0RDMzc3NjQwQTgwNjM1Nzc5RTQ3MTFDMTExQQorOjEwNzRCMDAwRjIzMEIzRTRBM0U3OTAzRDU3OEY4RDFFN0Y2MTk2RTBENQorOjEwNzRDMDAwNDdCMThFMkVEMzA1REY4QTQ1N0EzRDNFNDkwMTc5OUUyQworOjEwNzREMDAwNTE3NjQ0NDVCQUNFNzRCN0FBRTREN0ZFODFDNjNGQjcwOQorOjEwNzRFMDAwQzRCRkQ5MDJBRTFFREY1OTgyN0ZCM0FFRTRGQ0QzRTM0MgorOjEwNzRGMDAwRkQyQUYyQ0YwOTY5RDkyOEUyOUYxRTZGM0Q5RTdBRkVEMAorOjEwNzUwMDAwQjM0ODdFNDdDNENEMjg2MDcyREM4NUM5NTYzOUVFQzJDNworOjEwNzUxMDAwNTQ5NzFDNzdFMThBNzQzOUVFQzI5NTZFMzlFRUMyMEYyQQorOjEwNzUyMDAwNzJFNUI4MEI1Nzc5RTRCODBCNTc4Rjk1RTMyRTE0N0JBRgorOjEwNzUzMDAwRDdFQUUyM0U2Q0QyQzU3REI4NEIxN0Y3RTE3RTVEREM0MQorOjEwNzU0MDAwODc2REJBQjgwRjhGRThFMjNFRUNENkM1N0Q3ODVBMTc0MgorOjEwNzU1MDAwRjc2MUJGOTQ1RjVDNzM1OEFBQkZCNEY2ODg5NDVGNTYxNgorOjEwNzU2MDAwRjc4NjU0N0Y3OUYwQjg1NEJFQTJGRTAzQTlCQ0EyRTEwRAorOjEwNzU3MDAwMjMyOTVGRDVGNDg1NTRCRkI3NzExRjVFMTVFRjgxNUY3NgorOjEwNzU4MDAwMTNFRjgxOEY4OUY3QzA2RkM2ODhGQkYwRDc5RjdGNzE5QgorOjEwNzU5MDAwNUJFNDdCRkMyRjdGRkVDRDZERjgxRURGMjBERUMxQzZENQorOjEwNzVBMDAwOEFGQjEwMkU4RjExRjdBMUFCRkRCNzhGRkI5MDkyRkNEOQorOjEwNzVCMDAwQ0Y3Rjg3OUY2M0U3RTc5QjEzRTIyN0U1RDg1M0JFRkJBNgorOjEwNzVDMDAwM0JGQzZCOEJFNEY3Q0M3MzRCRTRGN0NDMzk3NkFFQ0Y1NgorOjEwNzVEMDAwRTdGOUU0NzdDREQ3OTdDOUVGOUFDQjZDQkU2Q0M0NDM3QgorOjEwNzVFMDAwMUZGNzYxNDJCQzM3Qzc4RUZBNTJCQ0NGMEZFMUZCNTQ4NAorOjEwNzVGMDAwNTgxQjlGQzVGN0E5OTAzRTg3NzExRjIwM0Q4ODcxMUZCQQorOjEwNzYwMDAwMjAzRDg0NzExRjIwRkQzREM2N0Q4MEY0MjU4Q0ZCMDA0QworOjEwNzYxMDAwRTlDQjE4Rjc0MUM1QjgxMTAxMTEzN0EyNDZDNDhEQThBRQorOjEwNzYyMDAwMTU3MTIzRUE0NERDODhBMDg4MUI1MTJGRTI0NjM0ODg3OAorOjEwNzYzMDAwQjgxMTREMjI2RTQ0ODhFMDlDRjAxRkEyRjRBNEJGODVDRgorOjEwNzY0MDAwRDI1M0ZFNjM5NDlFRjZCNzUyN0FDNjdGOUFEMkIzRkVBNworOjEwNzY1MDAwMEU0QURCRkM5RjUzREFEQkI4MTE5QTVDRkUxOUVEMDY4QgorOjEwNzY2MDAwMzNGNkNGRTU1ODkzRDMxOUY2ODExQjIyRTVCNEM4N0VEMworOjEwNzY3MDAwRDEwNjk0RDM1OEYxMjJFNjIyNEQ1MzYyQzc4QjA4OTc2NgorOjEwNzY4MDAwQzc4ODE3RDFENTNFNzZCQzg4QjREMURGNUZCQzg4N0Y3MAorOjEwNzY5MDAwOEJFN0YyRkE4RkM2OEI5ODVGMkRDNzMzNThCMEU2RkNBNAorOjEwNzZBMDAwRjEyMkNBNkM0NUFCNTEyRTM1NzlGQ0I3Nzg3RTVFRDU5OAorOjEwNzZCMDAwNTNCQzg4NkQ3NjQ1QUNENzQwMTdCNEJCODAyRUI0NUUwMgorOjEwNzZDMDAwRjdGMERFRkUzOUM3QzNCOUI4OUZFOENDQkRFOEJDNzE5RQorOjEwNzZEMDAwMEVGNDcyMTE5QkRFM0NBRUMxNzVERjczOUM4ODlFRTg5MAorOjEwNzZFMDAwQUFENTdGQjM5Q0M3MkZGOEI3RjhGM0M3MkZFODE2MjdBMgorOjEwNzZGMDAwQTJBN0Y4MDI4MzNFMjMzREQ5REIzODExM0RBRDBCM0RGNworOjEwNzcwMDAwRDE3M0Q2RjcxQzI3QTIyN0JEREE5MzNFRkRFMzc0NEU1MgorOjEwNzcxMDAwRTcwOUYxRTc4RkM3MTE4RTBCNjc2RDM5NDg4RDVENUUwNAorOjEwNzcyMDAwOUFEQUFBNzgwNzVFMzBEQjQ1RkU5M0Y2NURFMkRFOThEMgorOjEwNzczMDAwOTdCOTVEQTlGQzlEM0FEQTlCRUQ3QjEyODYzMzdBQkYzRgorOjEwNzc0MDAwRUU2MjVFRTA0RkJDRjhBRUVDREFCRjFGQ0ZEMzZGNzVEMAorOjEwNzc1MDAwMzI2RjYyMTJDNTgzNzcxQjczNzAxRjM2RDI4QUZFOTQxNAorOjEwNzc2MDAwOEFDNjhGNUVGRTFEQzBCNTM1MUJFOTNFNTkzQkUwRDA5MQorOjEwNzc3MDAwNDI3NjlGMzcxMUY5MTZDRjZFQTc3RDNBOUU3MTdERDM2MQorOjEwNzc4MDAwMjdGMjNEQjNFRUY3MUJCMDRBQzRGOUNENTRBMzlERjZFMgorOjEwNzc5MDAwNEQ5RDVCRjkzRDRGMjNCQkU4QkU4OUM5NzQ5RjlBMDU5NworOjEwNzdBMDAwRERDNDNGQjI1MzU3MDgzQzNCMzFDNUZBM0UyQkQ5OEY1RAorOjEwNzdCMDAwQ0IwRTNGOTExRjYyRkNCQzMyRDI2RkQwQTc1MEY2RDNFNAorOjEwNzdDMDAwRDREOTlDQzNGMTVEMjUwQjc4NUJEMEZFNUUyMkUwQTU4OQorOjEwNzdEMDAwMTRDOUZFOUIwRjE3MTUxRUMyNzNGQTI1QkU1MkJBODczNQorOjEwNzdFMDAwOTA1NjIyRkI3Mzk4NzgzNzhFREJCMUYwN0QzOUMwQTdCNQorOjEwNzdGMDAwQjQ0OTYxMEYyOEREREY5MTk3MzVERkI1MDFGNzM5Q0I0QgorOjEwNzgwMDAwODM3QUZCOUJFNUEyOUM5NUIzMzgwRkVFN0I1N0Q0Q0JENAorOjEwNzgxMDAwRTUwRTg3QjhDRjYxNjdGNjVFRDFBRDc1RjA3RDEzNDc5MQorOjEwNzgyMDAwOUY5NzZFOUUxMEQ2REZFNUEwRkJCMENCMEUyRjM2MjNDMAorOjEwNzgzMDAwQjMyQ0U5MzJERDZDNkU5OTZFRjFCOTMyN0RGNEY0NzNEQworOjEwNzg0MDAwNzg2NEZBRThFOTk3MzA1NkY2N0Y2OUY0RDNFRTFCQUExQworOjEwNzg1MDAwNENEQzE3MERGMjdCQTRERERFRTEzNzZEMjMzQ0Y1RjQ0MworOjEwNzg2MDAwRDNEMzZCOTQ0M0RDOTNFOEEyNTc5MTM1OTU1NDNFRTExMgorOjEwNzg3MDAwOTlBMTg2NDhCRUY1RjMyMUQzMUU1MkYwQkZGQjI3MDcxRQorOjEwNzg4MDAwRDc1MjJCOEY0MzQ1QkQ5NUNFNDEzMzY1MDk2RjE3OEY3NgorOjEwNzg5MDAwRjMwMUUzQ0EzMjBGQ0QwN0RDRDFBMzdGMzc5RUZENTkzOAorOjEwNzhBMDAwQzhGREJCRUMxQjQ4NkYyQTdFRUVGODIyMjhERDhBRjI2OQorOjEwNzhCMDAwMzY4MkZGRkUwMkY5QUJCNERGNEQ2MDFFMTdFRUEzMUE0RAorOjEwNzhDMDAwRkM1NkY3MTIxNUNGMDU5OTdCQzk0MDNDMEY3NDUxN0FDRAorOjEwNzhEMDAwQTc3OEY3REIzRTk0RDFCRUJGMjFGNDQ5MkE5RUEzRERGMQorOjEwNzhFMDAwOTlENzMxMTNGRDBGNTU0QjU5MTFBRTVGM0Y3MkYyNzdBNworOjEwNzhGMDAwMTc5QjQ0M0FDMkM5RkQzMzlCOEIwQ0NDM0IxQTdGODc0NAorOjEwNzkwMDAwQzcxODU0RDBFRkVBRjIxRUJFMUNFREQxNjY5MzlCREU4MQorOjEwNzkxMDAwMTFCQjNBNUVCRTlFQ0E0N0QxRkJFODBDNDNFRDQ4QzQ5QQorOjEwNzkyMDAwMDdFQUQzRkJEQUY2RTY3NzlEOEIyM0Y0NzA1QkQzRERCMQorOjEwNzkzMDAwNDNGMDdFRjFGRDg2RThFRjdBNEIxRERBRkIzNjdFQkYyMQorOjEwNzk0MDAwNjM0NDU3OUM4MTUyQzcxODhBNDc3MDY3MzZGNDUzNTk2RAorOjEwNzk1MDAwREM0OTdDRDRFNDcyODJBMEZGNzNBNUQzMDlCRjI3OUJDNgorOjEwNzk2MDAwMTUzN0ZBRUJBNjE5NkZGOEMxMzBDMDZGREM1MTk1RUJGMworOjEwNzk3MDAwMkY3MUFGN0JCNEE4RkYzNEYzQTQyM0JFRTMyRTY1MEFCNgorOjEwNzk4MDAwQ0U5RjcxNkYzMDRGMDA0OTVDNUQ0QUY3RTk3RUU3OUNGRQorOjEwNzk5MDAwNzYwOEY5MzVBNTE5RTQwOUY1Qzg1OUJCMDdBRkNBOEZCMAorOjEwNzlBMDAwNjk5MUVGQ0IyNTRFRjExREMwRkI4NTk3MUM2M0E0Q0ZEOQorOjEwNzlCMDAwMkUzOUE2RUFFRkM3MTg3MUJGM0ZBRTU1RkUzRTQxQjc1QworOjEwNzlDMDAwRkY1Q0E3Qzk5RDkzQTVBMkRDNkRGOUNBNDg3OEI1Nzc3RAorOjEwNzlEMDAwMzBDRjNBODBEQkJFQTQyRjlEREJCNjdGQzJDODRFNkM5MQorOjEwNzlFMDAwRkZDQTU4MThFRDdFQzlERDBFRUVGN0JBREZDQzQ4N0YyRQorOjEwNzlGMDAwREY1RjZBQTc3NzBFQ0Y5Njk2NUY4MEY2QzU2NzNGRjE4NworOjEwN0EwMDAwNUQxMENENEYxOTYxQTcyNUYwRjdFN0RFMDQzNjE2RTVDNgorOjEwN0ExMDAwRjA1Njg1RDNCQjM2QTMyOENBQkFBNUM5OUQyNjg3OUEzNgorOjEwN0EyMDAwRkM2NTk0QzZGOUEyRERENzRDNzY3MkZCNjg1MjY5QUU0QworOjEwN0EzMDAwNjI0NkY5RDlBNzMwQTQ2QkRCM0FDMEVCM0NFQjc2ODAwOQorOjEwN0E0MDAwQURDQjQ0N0NBQTlBM0VBNjdCNThENjY2MjVFQUVGRjJENworOjEwN0E1MDAwM0NFMTcwRjJGQjgwRUIwMjZCRjFGRUM1Q0QzMDg5NTA0QQorOjEwN0E2MDAwNEY2NTk4NkJCM0EyQzEwRkIwMkQ2NDk3M0VFMDcwRjNFMQorOjEwN0E3MDAwNzcwMzU2MTE0NzQ4QURDREMwRkIwODZENEQ5M0FGREM4MQorOjEwN0E4MDAwMDA3ODNFMDBGMzAxRjk3QkJGQzk0Mzc4MDcyQTE4QTNBOQorOjEwN0E5MDAwRkJBNEMyNUZENzZGMjZEQkI2MzlDMkZFRERFQjI4MzgwOAorOjEwN0FBMDAwOEM3MjdCRDhDMUVEQzYzRTNFOEY4Mjc4N0JGRUZFNTczRQorOjEwN0FCMDAwMjdDMjZGRkZEQzQyRkNFQjJCRUM0REFEREQ0OTA3QTc4NQorOjEwN0FDMDAwNEY4OUQzN0IwMERCQjNCMjY0NTIzRTFFOUZEM0JEQTQ2QgorOjEwN0FEMDAwMEZGQUNEODFERTUxRUMyQjZENUQ0RkYyMzEzQTlGNDhBQworOjEwN0FFMDAwQjIxQjgyQTQ5Q0JDNUVCNzRCQkFFRjFEQTA3OUEzQ0Q5QworOjEwN0FGMDAwMDMxNjUyMThCRUQ3RDdGNDlCRDJBQzg0MUMyMEY3QTMzMAorOjEwN0IwMDAwQURGNjEwREUzRjRCMkE4MzcxMjc2MzNDMEYyQjg3RDdERQorOjEwN0IxMDAwQTI5RTk1RkQ1QTIwOEZGOTY4REMzMzdBRUY4RjhFNTQ0MAorOjEwN0IyMDAwODRBRkU5M0Q0RDVGREU5QUM4RjVEMUFENzdBOTE0MEY1QQorOjEwN0IzMDAwNzRBQkRBNkE0MzdGNkE5NkQ3M0QwOTQzRDMyNEE5NkVCMgorOjEwN0I0MDAwQkE5N0QyQkY4Q0NGQzNGODlDNUYyNjg2RUQwMDk4RTQyRAorOjEwN0I1MDAwMjNCRjM2MkU4OEY2OUUyOTAzRTUyOTA1RTlFNUZCRDBFQgorOjEwN0I2MDAwMDFFOUYwNDMxRENGQTJCOUUwQjFCMTNFRkNGRTk0RDBEMworOjEwN0I3MDAwMTNDMkFFOTkyNkQ2QkI3MUVGMTlGODNCQ0FEMEU1MkNEQgorOjEwN0I4MDAwRjI3RDkxNUU0RjgwRENGRjA5N0ZCRkU3RkVGNzU0OEFFQworOjEwN0I5MDAwMTMxQUQ2MEZBNUQzNjg3RDYyQzZBMTA3NTBDRTI2QkNBNgorOjEwN0JBMDAwQzhGODcxOTREMDBGMkVGODg3RjRCOUU0MjVERjdBNDQzMQorOjEwN0JCMDAwRTNCQkVBMDUzREJGNTlDODFBQ0VFMzRGQjM4RDNBMDQ4MworOjEwN0JDMDAwRjMyRDcyOUQ3NThBRjU1RUU4OTE5QjhBMDdBRUM3RjkyMQorOjEwN0JEMDAwQTVDOUQxMDVCNzc4OENCRTA4M0FFQURCODdGRDk0OEEzRgorOjEwN0JFMDAwMzVGQ0REOUQ4MzdBRTQyNTIzREUwRjZCMkYwMDdFMDNCOQorOjEwN0JGMDAwNUQ5RUM0RjkwMkY0NEVGQzI0NzgyNUYyN0Q0QkYzMTUwQQorOjEwN0MwMDAwMzY5NEVGNUI0MzkzNUMzM0EwNERBMkI1ODg5ODk3QzgzOAorOjEwN0MxMDAwQkNFNENGQzkwM0VBNjA5Qzg4RjUyNDE0QjA1RjU3OEI5RAorOjEwN0MyMDAwQjI5QzI5Nzg4RkFCNTBGMkY3NjhCRjhCMDcwMzI1QkU1MworOjEwN0MzMDAwODRGOTAwNzIxQzc5OEY1NTkzNEZCRDNDNkFGMkJCMUVDQworOjEwN0M0MDAwMzc1ODc4N0U4NzFFNzM0ODhENEEwMzMxQzhDMkI2QkE0QQorOjEwN0M1MDAwNTBDRjZBRjZFNUZBQjAzRDk3NDhGQjhDRDVDMjJFNUE1NAorOjEwN0M2MDAwNkY5RjY2MjUzNUIwM0Y5OUQ2RjNENUI4M0VDMUY4NTcxQQorOjEwN0M3MDAwQTczMDlBMDdEQTM4RjRGMjU4RjVCOTgxMDUyM0Y2MDdFOAorOjEwN0M4MDAwNTU2QTA3RERFM0FCRkFEQ0NDODI3RDcwRENCRTQ5Mzg5NworOjEwN0M5MDAwNkU4RDJFMjMwNTVERjQ3NEM4NzY4QUZEQTZBMDQ3NkMxMAorOjEwN0NBMDAwM0NGMzVENzg3RjM2RDFFQTY1MUIwOUNGNDk3NENGQjlDMworOjEwN0NCMDAwMjE5NDY3QzVGNUY2MzYxRDlFQkRDMDZGNEUzNEZDNTQ0OQorOjEwN0NDMDAwN0IwQ0ZDNDRGQ0I2MDlDQ0Y3QkI1NjkwRDdGQzlCRUE3NgorOjEwN0NEMDAwMzJGODdBQzE1RTREOEZFMDlGN0VERThDNkRBQTNFNjBFOQorOjEwN0NFMDAwOEU5ODJGOUE1RjU3M0Y0RjQ2MzRCMzZCOTBFRUUzNDIyNgorOjEwN0NGMDAwMkFDM0YzRDc5RUU2Q0IyNzYyQkM1NUYxOUM1RUVENzM5OQorOjEwN0QwMDAwM0EwNkEzN0NFRTUwN0RENTRFQjIyRjVBMEQxOEY3QjcyOAorOjEwN0QxMDAwRkQ2OTQ2RjNEOUIzRkZBNDkzRTIxQkI1RjRFRTdFQkEzNgorOjEwN0QyMDAwNjY0NzY5RjY5M0JFOUU2NjNGNjk3QTU3QkIxRkJFREQwNAorOjEwN0QzMDAwRTlGMzYzRkY0QTEzQzgyNzhDN0ZCRDhCRUY4QkY2M0FCQworOjEwN0Q0MDAwN0NFQkYwN0IzQzhDMDE4RjkyNTg2RTI4OEJCRjdGOTUyQgorOjEwN0Q1MDAwRTUzRjk2QkNDN0VCRTRCOTAxRTg0NEJGOTMwNUZBN0Y2MQorOjEwN0Q2MDAwOTBEMjFEMEZBREZGMjlDRTQ0N0VERTAyQjMxOUY1NTAyRgorOjEwN0Q3MDAwQkY3Q0M2M0JBQjY0NzQ3RkIyREY3MEU2QzNGNUE5NUYxRQorOjEwN0Q4MDAwMUVCRkY3MTcxNEVCRjYzNkExNkZCNTc0QUZBM0U4N0VFQworOjEwN0Q5MDAwQzRERkE0QjI4MDI1RUZCQkUzOERBOEUyN0RFQ0VENEVGRAorOjEwN0RBMDAwRUY3RDI4N0ZENjQyMkY4RDIzRDNDNTNDNjg3RjY2QUFGRQorOjEwN0RCMDAwMEQwQUJFOUI0QzVBRTk1NkY4M0Q2Q0Q2RjU4RTA5RTA4QgorOjEwN0RDMDAwNjVDRTcwMTdBMDlDNjRFMjNFMUFFQjM3NDc4RkEzRjU4RgorOjEwN0REMDAwODREMzI0RDk5OTFFMTY4RTUzRjUwNEY2MEI3NkU2NDEwQQorOjEwN0RFMDAwMzNFMERENjc4NjE2Rjc0QTNCQjdGMTI4NDhBNzM2Qzc2OAorOjEwN0RGMDAwMUM0MkJBRUQ1Mzg1REJFMzg5OUM1RUZBRkQwMDEyMUUzRQorOjEwN0UwMDAwRjE1MzQ1RkUzNjMzNTM2RDQ5QUNFQjc3MzgwRDU2QjIxRQorOjEwN0UxMDAwRTNFMzk5QTcwMUY1RDJDQkNFNkM3MTJFRUFBOUMxRkNBMAorOjEwN0UyMDAwQkZBQjFERDZDNEExNUQ3MjdDRTdDNDU5MUUxNUFBMzgyQworOjEwN0UzMDAwMkZFRDFDOEU3QjI2OTBFN0MzODg2RkRCQzRDRUMxQjdDNQorOjEwN0U0MDAwMTIzMTNBMDY3MEI5RjExQUE1QjgzODFBRkQ5QjRDMTJENgorOjEwN0U1MDAwRkQ2REI4Q0Y4RUQ0ODMwRTMzRUQyM0RCOTQzODBGQ0U3NworOjEwN0U2MDAwQjNCNkU1MEFDNzUzQjE4QUI4NDFBQUJDRkYxN0ZBNDhBRQorOjEwN0U3MDAwRDNBRjlEQ0UyQ0MyM0Y5RTA1NjgxRkMwQUMxRTJCREQyQworOjEwN0U4MDAwNjMxN0Y4NjM1QzQ1RjJFQkVDOEQwRjZFQzdGMzI4NUQ2QQorOjEwN0U5MDAwMUM0NTdEOUNDNUM5OEJFRDc0RUY2MkNCNUUxQkVENEIyMQorOjEwN0VBMDAwM0I4QkY4Rjk3QzY3QjM4NUY0NkZBQzc5OUE4NkNBRTBBRQorOjEwN0VCMDAwM0NGMTAyODE2RTFENDhCNzM0NTM3NTIyRUFCREI0RjkxNgorOjEwN0VDMDAwN0NGRUVCRTlEMThFMDNDNUZEQ0UxRjRDQzE2OEVGRDUxQQorOjEwN0VEMDAwQjUzNDNEQkQ2RjMxREE2NUU5MTlFOTk0NkFERkVCRUM0MQorOjEwN0VFMDAwNkFENDdCRDhDNjA0NDU4QUQzMzcwNDdBMTRGQjFDNjM1MgorOjEwN0VGMDAwMDI3QzNGRTdGQkUzNkI1RUQ2NzVBRkJEMkU4RUQzQUY0MgorOjEwN0YwMDAwRDMzNzNFRTE2MTk0MkIxMDM4RkEzRDAxRUQ1QzUzRUMyMAorOjEwN0YxMDAwRTdCNUY4NDk1QTNGNUJGQ0Q2NjIwQ0Y5NTlCNzY4QkEyNQorOjEwN0YyMDAwMERENzgxMTRFNkJENzIxRTRFQ0EyRDI2QjY5M0RBRTUzMgorOjEwN0YzMDAwNEFGNzVERUZGNThGMkNDNkY3Qzk5OTA5RkMxRUVEMjdBRQorOjEwN0Y0MDAwNUJBNkQyN0JFNjU0QjZDRTM2MThFODUwNUE2NEYwQTA1MQorOjEwN0Y1MDAwM0ZFMERDQTIzNzlEMDY5MDlGNDU5OTJERjkyOEE3MDk5RgorOjEwN0Y2MDAwMjY1RjY2QzIxODcyNUREMTdFNjM1OTg5MzkxODAyN0ExQworOjEwN0Y3MDAwMjVENzgxNDIyMDNBMDZBRTI0M0EyRTM0NDRGNTBGNjdDNQorOjEwN0Y4MDAwMjdGMDdERTc1QjYyM0Q0OTRGMUY1MEJDNjQ1NDY0QkVERgorOjEwN0Y5MDAwMUZEMTU1OTMyMzk4M0YxOTRCNDY3N0M1QzMwNDdFNUU4NgorOjEwN0ZBMDAwOTQxMDY1MUVCNDlCNTgxM0JFOTdEMEY0NTFCMjEwMzM5MQorOjEwN0ZCMDAwNEQxRjZBNzI5QzhDRjMwM0VEQjgyMkQwNEZEMjc5MUYwQgorOjEwN0ZDMDAwNTQ0REVERkEzRDQzQTVGOTg1MkZEMDhFNzU1RTNBODk2MworOjEwN0ZEMDAwRjQwRENDREIxQTkyRjM1Q0FFM0Y2REE4Q0YyMkZDNTZCOQorOjEwN0ZFMDAwRUQ3QjVGRUY4RkVGOThERUZFRDlDNzBFN0NEN0YyMTdERgorOjEwN0ZGMDAwQjVDMzgxRkFFQkY0MkQ3RjcyNjAxQ0IwQjc2RkUxRkI2MworOjEwODAwMDAwRTQxQjc1RjZGRjU1NDIzRTgyMDk0NTUzOTBBRTBCRkNDQQorOjEwODAxMDAwN0ZDRjhGQjREN0Q4MUFFRTdGNUUxRTk0REZBRkUyRkQxQworOjEwODAyMDAwRUY0ODNGNjA0NTgzRkUzRTQwODBDNzI5MTNCRkNGQTk3QworOjEwODAzMDAwRTdDMzNBQzE4N0U1QkJCNjk5MzNEREQ4QkY2RjBFRjYwQgorOjEwODA0MDAwN0Y1QUVDNkY0RTM3M0FFODNEODU4NkNGQTI1RDIzQ0Q0RgorOjEwODA1MDAwNjhGM0ZGQTVEOTIyREVFOUI1OThCODVFRjZDRUMwRjc4MQorOjEwODA2MDAwMzkzRTQxMzczRDlFMDdGN0M1MTNCQ0E1RjdGMEY3QUI4NgorOjEwODA3MDAwMEJBMUFGMzVBMDE3N0RDRDNDOEU5MjdFMUM0QkRGNzZEOQorOjEwODA4MDAwNEY0MzNGRkFEMjREMEFFREUzQjBGRTJEQjA0RUY4RDY4NQorOjEwODA5MDAwNkNBNDc3M0NGQTcxMkUwQ0M4RkUxQzdEQkM0NjZEM0Y2QgorOjEwODBBMDAwQjA0Q0YwN0YwOUZFMUE2RjRFOTQzODhFQ0RGQzNEREQ0QQorOjEwODBCMDAwMzI5RDdERDE3OTI4MjcxRUM3QkYyNjQxRDhEOUY5RUMzQQorOjEwODBDMDAwMTI4Q0RCQjlFNzUwNzY0MkI0NzgxODVBN0E1NjlDRjc4RQorOjEwODBEMDAwRTNCRDdFNEM0RkZCMTlBNTUzMTJEQzNDNUU1N0YzOTE3OAorOjEwODBFMDAwOUI1MUFFMkE5Qjc2NTM3Q0M0N0RDMUY3RkE4Qzg3MkFCQworOjEwODBGMDAwMDVDRDVGMTg1MUE4MEE4NDNEMzY1RkQ4NjM3QjE4OTc3OQorOjEwODEwMDAwMUJCMEEzMzdBM0ZDNUZGRUI5Q0U4RTE2RTNCQzQxOTMzMAorOjEwODExMDAwRkI0MzQ5MjQzNzM3RTBCODg2RTM3N0Y1OTM2OEUzQkE0MQorOjEwODEyMDAwM0I0MTdFRkZENURCNzE2OUUzRDFDNkE3OTU1Nzg4Rjc0MAorOjEwODEzMDAwRTdGQTc2OUE5QzRGMTE3MkI3NjQ0N0YxODZCRTQwOEE3RgorOjEwODE0MDAwRjU3QkRGMUYyMEUyQzg1MTlDMkQ0RDhFRjQ3MkIyNEM5RQorOjEwODE1MDAwRjAyRDJDMEZDRDc3RDBCODM0QkU4MUJDQTc4Qjc3NDlEQQorOjEwODE2MDAwRTlFOENGRTg0OTJFRjRGQzZGMzNCNTBFQzBGOUFBRTc3MQorOjEwODE3MDAwN0Y1QjhDNzM5RkVEMDlGQzVDNjM4OURCM0IwREZEMkIwMgorOjEwODE4MDAwNjAxRTZFNzA0NUQ4MEZBN0Q1REE4MzNGQzU3OUI0ODNEQQorOjEwODE5MDAwQ0I3MUU0QkE0OEM2RDI4QjI2NUE2NzU3MzlEQzY5ODk1NQorOjEwODFBMDAwNzZDMUI3NzFGODdFRDExMkMwN0E1QTNGQTdGQzM1QjNCOQorOjEwODFCMDAwMDZEMjc5NjNFREFDODEwM0U5REQwNkE1NUE3OUU5RkRDNAorOjEwODFDMDAwMUYzQkQxM0U2RENGNjVFNDVGNjg3M0M4RjgxRUMxQzUyMworOjEwODFEMDAwNjYwQ0E2OUNGRTJCRDU5NkFGREY0MjFEQjRBMzg1RTJBQworOjEwODFFMDAwQjc5RUZBNEFGODI3QkVCMjE0NDYxQkU3RDkwNDZFMDdCOQorOjEwODFGMDAwNkFGNzRGNkUxNEYzRThDNjY2RkVERTZFRDFENjYyMzNDMAorOjEwODIwMDAwRjkwMUQ2QzhGNzM1NUU1MjVDRDMzMkExQTlBRjYxQTQ5QgorOjEwODIxMDAwMTlGOUFDRTdDNzUyQ0YxNUY0MEVCQzFCNUZEOEVEQzRGQgorOjEwODIyMDAwRDdBNUZBNzc2REUyMUVEMzAyMjExRjMzNUQ2RTYxQTdEOQorOjEwODIzMDAwRjlFODFERjE5MjNBMjNEOUY3Q0JEQ0Q1QjRCRjU5QTFBNworOjEwODI0MDAwNDY3RjhGMzVDNjY1MzhFRjc4RjRFMzU4RDhBODkwREVCRQorOjEwODI1MDAwRDNFM0JGNkNDN0RBMEQ3RDE5OEU5RjhGQUZGQjM4NDIxOQorOjEwODI2MDAwRkQ0OENGODg3MUIyRDZDQkY5QkI0Q0IxNkVGRjE3NDczMgorOjEwODI3MDAwOTRCQzU3MDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAyNQorOjEwODI4MDAwMDAwQkI1N0MwRDc4NTRENUI1RTgzRTczQ0VGQzI0MzM5NQorOjEwODI5MDAwNDkyNkZGMjE0MTNDMjExMTEyMTJFMjkwODQwMDAxNzExNAorOjEwODJBMDAwRjI0QkM0MDgwMzAxODI2MDc1NDA1MTg0OTAyMDdBNUJEMAorOjEwODJCMDAwRUZBQkI3OTk5MDY4MkRGQTdBQTM1OENCNkRFREZEMDYxOAorOjEwODJDMDAwMkJBRDBBNDg4MEEwODEyNkU5MDQxNDAzMDQwRDgyMEExQworOjEwODJEMDAwOTZENjgwMTRCMTA1MzI4MEI1NTg3RDhGQjdENkRBRkJCQgorOjEwODJFMDAwNjQ2NjRFOTI0MjZGNUY4N0Q2OUQ3RENFM0VGQkFDQkRFRAorOjEwODJGMDAwRkVEN0RBNkI5RjY1RUNEOTRCNzIwRTYzMEZCN0NCOEM1MAorOjEwODMwMDAwRTUzMzU2RkJBQ0VDNjVBOThDMkQ2M0NBRTlCRTBDNDY3RgorOjEwODMxMDAwQkY2QkE5Rjg1RjY3RTU5MjA0QzZFRUM1M0Y1NTY4REIwMQorOjEwODMyMDAwNTc1NTMyNzhBRTVDQUU5OTg1Q0ZGNTZGOTA5OTU5ODJFQQorOjEwODMzMDAwRUIxRUVGNTNDOTcxRDAzNjQ5OEU0NjE4QzcxRTM3OUVDMworOjEwODM0MDAwRUVCMzMwNjY4MTdGRDc0NkQzM0M4QzI1RTBGQ0ZDRDc2QQorOjEwODM1MDAwMjNCMUE3NTI2MEZFQjM4QUZGQkQwODc4RUUyQ0MwRTFCRQorOjEwODM2MDAwODE3OTk2NzhGODczRjQ3RUY4RkYzMkM3OEMyRjI0NzhFMQorOjEwODM3MDAwREZGREVERjIyOTczMEU1RTVENkQzMkMwRjhBNTJGNDk2OQorOjEwODM4MDAwNkMxRDhDQkZGRjY5REQ3OEIxMkVGRDNBMUVEQUYwQTNCQgorOjEwODM5MDAwQjlFOTE5ODE3MTBGN0I5RjBCRTlDM0RBNTQ1NkMwRDgzNAorOjEwODNBMDAwN0QwMjNFRjZFQTdGMDVFRTczRjg0REFFMDhDNjMyRUQ2QgorOjEwODNCMDAwMTE3MTY3QjNBMDVCQzAyNjVENEI2M0FDQ0UxQTk5QzM0NQorOjEwODNDMDAwQTJBMDM1MzNDMjIzM0I2NEY0NkUwMkI4RDY0NEMwODIwNworOjEwODNEMDAwMDFDRTM1NUJBM0JEMUVDNEUzRUE2OEM2NDZDMEI4RjY0RAorOjEwODNFMDAwOEQyNkI3MERFNkM0REZFRDhDOURBQjZGOUU5QjlFMEU3OAorOjEwODNGMDAwRUJBRjdGN0E2RUJBQzJEODJDQkI5REIxODk0MDhGQjZFNQorOjEwODQwMDAwRTc2ODVDQjdFMjlBNjQ4N0ZFMkE0QkRGOEZFRjU2ODNGQQorOjEwODQxMDAwRjAzODk5RDM2Mzk5NUM2OTYyODZDMDdDRkE3NjU5QjM2NworOjEwODQyMDAwRjFDQkJFQTA3NTE2MjFGQzU2Rjg2MzEyQzAyRkZGM0Q5QworOjEwODQzMDAwRjhENUM0Njg1QjAwNkVGREJDN0ZBQURGMTAwMkY3NEE2NgorOjEwODQ0MDAwODUzOTVCNkM4MUY1NjhFMzI2REEwREI0MUVGREYzN0E5RAorOjEwODQ1MDAwN0EzMEU2QTU3MTdBQkFBQzQ0M0EwNEQxMTdFMTU0MDBGNworOjEwODQ2MDAwQUYzRDFENTZFRjVBODlGODg4RTBGNjc0ODQxMURDMTc4OQorOjEwODQ3MDAwOTNENkNEM0Q5M0M3RDg2MTdDMDBFMEFFMURGMTMyRjVCNworOjEwODQ4MDAwNUY1MTVDNkU3QjNDNUVGNDhGNzI4REM3Njc2MjE5OUI5NworOjEwODQ5MDAwMzIzQ0RFNjA0NkM2NjA3QzJFQ0UwRkUzNzY4NTM5RjMzMworOjEwODRBMDAwOTg4Q0Q3NURCMUM4MDdEMzFCRkFBQTJDNDBBQTNBRkIxNworOjEwODRCMDAwQTQwQTA1REUzM0ZEQjlCRUFBMzBFODNGNjI5RkNDRkJCQgorOjEwODRDMDAwOUJGQThFNUExQzhDMzVCMDI5MTVBNUYwRkM2MzcwMEZGMQorOjEwODREMDAwRTdCQjVFOUI2Rjc2MkQ2NkMwNTczNTgwNTM0QjBDQjQ1RgorOjEwODRFMDAwQzdDNkJDOERGMjU2RDM1QjU5MjE0NTQyQ0I5ODRGQ0FDMworOjEwODRGMDAwMDU3RTcwNDZGQUFDMzlENDY3ODUzMEFFMzNDQUZEMUZBRAorOjEwODUwMDAwQjhCRTU1NTc5QjJFQzkzOEVFOThDMkU1QTUzQjhFRjBGNAorOjEwODUxMDAwQTAwMEVDNjFGMDVDNTNCODUzQjUwM0JFOUE2MjJDOEU5OAorOjEwODUyMDAwQzY1NEJBRUUwOThCQzFCRTUzNTU4M0FFNkJGNEMwRTc5NworOjEwODUzMDAwMTA4RTI2MDM3MzQ2NDNEQjc1NjA0QzU0NUZGNkYwNzg2QgorOjEwODU0MDAwRUJBQTU3QUIxNEEwRkZCRUZBMEM2QUY1Rjc4QjRDRjZGQQorOjEwODU1MDAwNzQwNzNDNUY2NDYwRUUxNkRCRTBGQkFGMjJCRjEwOUQ0QQorOjEwODU2MDAwRDQxNEE0NzM2REI3ODlFNDFDN0YxMkYwRkQyQUExODc4RgorOjEwODU3MDAwNkE4MTQwNTEwMENGQUE2M0NDMTcxRTg5RTNDQUJGNTA1RAorOjEwODU4MDAwQjA2RDk1RDhFOTEwQkU2MjgxQkUzQzNDREMzN0RBRDZDRQorOjEwODU5MDAwRTI3QzRBMzA5RjcwM0MxNTJCQTk1NTRBRDA3QjRCNkQyRAorOjEwODVBMDAwOTkyMTdEMzlEMTkwODFFQjYxNzJCODYzMTNFMDU3NEUwOAorOjEwODVCMDAwMzFBQ0RFMDFFQjk3NkY4NjE2RjBBMUQ4MURGMjEyNjg4MAorOjEwODVDMDAwOUI0QkE2Q0I0QkExNkQzNEIyODUyREQ4MUFEOEYyNjA0NworOjEwODVEMDAwM0M3NTA4NzlEMkRBNEI3NkQ3NkY5MEVFMTdERUVGMkQyNworOjEwODVFMDAwQjA5MjlFMUE2OTI3RjkxNkVCNkQ5NDFDM0VENDQzOUVGNworOjEwODVGMDAwMkVFNkQ4MDRENzlBNjQxN0UzN0NEQ0MyOTA4RjdGMkZENQorOjEwODYwMDAwRTY3MTk4MEQzQjU1RTBEN0Y3RUMwRjEyRkYzQUEyMEMzQworOjEwODYxMDAwOEZBNjQyRkZBM0U2MTUxNTBBRjBBRjIzQzU3MDI1MTVGNgorOjEwODYyMDAwNzhGNDc4RjM0QURFQ0YzMjVDMTkwREZENEY5QTZCNzhGRgorOjEwODYzMDAwN0YyQTRDOTlDQ0Q4QzlFNjU1MTU5RTZDOUM5N0VCMzE5NgorOjEwODY0MDAwQjZDNTk5ODVFRjUxMEMxMkM5QTlCMkQ3RTQ2RDg0M0YyNAorOjEwODY1MDAwOUIyMjM5M0YzNTE5ODEyRjYzNzBCQzRBRTM5RjZBMjhGQQorOjEwODY2MDAwREU2QzA1RkU1NzhBOURFQTZBMUJDNzM1RjJDM0ZGQjQ2QworOjEwODY3MDAwRDVGMDI4NUIwREFCMTE4RkQ4MjJCRUNGODg3NTZCNzRGNworOjEwODY4MDAwNjBBRENFQUMzOUE4MTc1QTlDNTk3MzIzMTBBRkVFQ0YwQQorOjEwODY5MDAwMTFBRjc5M0RCREQzNTEwRkI3N0VGMDQ5ODEzQjlCRDNEQworOjEwODZBMDAwMEJFN0M5RUI2MTJDMTJENjczRTFBRDlCMzZDQTUyODA0MQorOjEwODZCMDAwM0U5N0VDNDVFNzUxNUY0QkEwQTYxRjg3NzU0OUFBOURFMQorOjEwODZDMDAwREQwMzcyRDdFODY0QUEwOUQ2OTVDODVFQjJBM0ZEMzA2RgorOjEwODZEMDAwMjA3RDQwMDVCNTMyQUU1RjNBQTM1QzVGRTI3MzZDQTRDNworOjEwODZFMDAwOEZFQzRDQjVEREY1MTVCRTVGRDNDRkFDMzc2NjQ4M0Q5QQorOjEwODZGMDAwQUNENzU3QTY5Q0M3NjUwNjdDMTA5M0QyNzY3QzI5RUEzNgorOjEwODcwMDAwRjNERjlBMURCN0E4MDg4RjkzM0QwRTcwNkMzMzMwODU0OAorOjEwODcxMDAwQzUxMDdCNjQyODcwREZDQUMyMURFQjUwREUxRDJDQzk1QQorOjEwODcyMDAwMDNGMjg1NjgyM0UwRTAxNzA3RjZEMDI4NjQ0ODVCMDc2QQorOjEwODczMDAwM0M1RkNBQTA5RDg0NzBERDRBRUI5MjkxOUYyNjMwOTdFMgorOjEwODc0MDAwOEM3QUFCODA3OUFERDhGNjc3QkM5NTg0Rjg3QTNFOEM3QworOjEwODc1MDAwRERFNzgyRDZGMjJBNzM3QTgzRjQ0NjdFQjQ0NEY4OUYyQQorOjEwODc2MDAwMTU2M0E0MzZEQ0Q4MzIxN0Y5MzRGQzEyQjNBMzFGRDAzQQorOjEwODc3MDAwRkYwQjkzODJGMzgzNjBEQzg5RDcxREZCMEQwQ0UxRkNCQQorOjEwODc4MDAwQjVEMTZCOEY4MkJFM0Y1MzUxNUY2NjgxRjlGQTA1OUQ2QgorOjEwODc5MDAwQjU3OTlGMzdBOTk5RDFEMEFGOEE5MTA4MkZCRjJFRTIyMgorOjEwODdBMDAwRjZEOEZGODVDOUZCNzIyQUUyQzdCMkRBMUIyNDU3RTM2OQorOjEwODdCMDAwQTNGOUI4QkFCOEUyQjFEMUYwN0M0QjQ3MzhDM0Y3NEY1MAorOjEwODdDMDAwRUEwQzM3MjBGRTM3NkZDOTBENDMzRUQ4ODZCODgxRjVENQorOjEwODdEMDAwQzc5OEVEOEZFMDdDMzE1NzAwREU1NEJBRUUyNEJDMkFGNgorOjEwODdFMDAwRUE4NDI4QzA2QkUxNEM5QkJBMEVGMEZFRUJCMDk2OTk4MAorOjEwODdGMDAwQzhGN0ZFQUQwNkY2MzJCQzYyOUJDOTMxMDdGQkRCMkUyMworOjEwODgwMDAwQUI3NkQ0QjNCRjRFNkQwOUE3RjU2QzM1RDA3QUI2ODU3QgorOjEwODgxMDAwRkJDN0FEMDFCOEQ3NjUyODE1MDg5RjYyNjUwQUVBNUZGNgorOjEwODgyMDAwQzU1MEFDM0UwMkQ3QTc0NTczRkRBOEU5RTM5QTY4OTUwOQorOjEwODgzMDAwRkFDRjRCRjBGRTVDMUM1NzQ0NzI1MzI2REI0OERFRkEzRAorOjEwODg0MDAwRkRDQzZCODZGN0M0Q0ZFQjk1OTExRUUxNzM4MDk1OTBCQworOjEwODg1MDAwREYxNTlGQ0M3MDNFMTcxMjFBNUE5QkQxQUI5MjlFNzVCMgorOjEwODg2MDAwREE5NjAwRERBNzBCM0QzQkZENjQ0RDI1OEJDNDhFRTNGRQorOjEwODg3MDAwRDg1NDk4NkY5RkNEQzg3MDVEQjdCMTNFRDkwMkZEREI2QgorOjEwODg4MDAwQUUzMjg3MEZGOUU3QUE0MjdFOTgxREZFMDVGQjdCNjU5NQorOjEwODg5MDAwNjI5RTVGNDk0Qzg5ODI3MTQ1NUZBQTBBRjI1NzExMEJBQgorOjEwODhBMDAwRjVEQkNBMzY5NDdGODFGNkFEQzRBMkJCOEVGRTVDMjQ5NAorOjEwODhCMDAwQjY0QUUwM0FDQ0IzMjg1QUY4NjFBM0Q4QTg2QkE0Q0Y0MworOjEwODhDMDAwNjBENjA0NjE0NzU1NUM3RkY2N0ZFMUJBRkEyQjRDMEUwNworOjEwODhEMDAwNUNGRjc2OUJGM0UzQTlBODA3N0I4RDZDMTMxQjVFOEU3MAorOjEwODhFMDAwN0U1NTBGMUE3RDBDMDhDN0Q1NzBFNjhEMjUzRUI0MjE0NAorOjEwODhGMDAwRkRDNzZENjhGNjg0QzE3QUM3QTVGM0Y5OTFERjUwNkZBMworOjEwODkwMDAwOENGRDQ1NUMyQ0VBRUQ4ODY4QUU0RkI0NTZFMzJGRTQ0RAorOjEwODkxMDAwMjM3QjE0RTcyM0ZCQUQwMUY5RkI1RTc0MkE4REQzRTRCRQorOjEwODkyMDAwMDlGOTBCRTdEOTYzRjQyRTc2MEQ2MTE3ODEyRkJGODcwNAorOjEwODkzMDAwN0NCOUREQzYyQTkwQ0Y5RjE5NjE1OTg4RjJBNEJENjcyMgorOjEwODk0MDAwQjdFMDdCN0RGQjU0QzM5QTJFMjNBRUZCMkZBMEZGMDEyMworOjEwODk1MDAwRUVEMkU0QUJBNjYwRkJERDE1QzdFMTJEOTNCRjI1QkZDQQorOjEwODk2MDAwRkE2MkJCNDRGRTdDNDIzQkQ3RDdDMTdDMzE2MjY4QkUxMQorOjEwODk3MDAwNzgwMUYxN0EzREJFRDBDNzAxMUE1RkVDQjgxRTVGNzQ3MgorOjEwODk4MDAwRkY2MzdDRjE4QjY4RTFERjBFQ0IxN0RGNDZFMkZBMUY1NQorOjEwODk5MDAwRUIyODQ5NjQ3RkM3OEY2OTEzN0MzMERDRkQyOTU2QUUxNAorOjEwODlBMDAwRDdGNEQ3REIwNTNFNzc5QjlBRUZDQzQxQjlCRkNCRTAzQworOjEwODlCMDAwNDBCOTA2QUFBN0NDMDVGQkIyM0I5QzNGQzc5NEQ1NjkzQQorOjEwODlDMDAwRDhERkFFNzAzREIyQkRERDRDN0E2NEJCQ0RFRDI2N0IwOQorOjEwODlEMDAwOUQ2NDYxRTgyNzMwQzVEREY3N0RENDdGQzkxNjc1NUREQworOjEwODlFMDAwMTBERjNFMkVGNDQwOEJEMTM3RTU3M0Y0N0YwRjcwRkEyMQorOjEwODlGMDAwNEVCRTJCNTczNkMxQjgxMTBGNzBCOUNFM0Y2N0RBMjg3QgorOjEwOEEwMDAwQzMzQ0Q1MzE0NUJFNjgxOERGMTdDREVENjJERDE5MThCRQorOjEwOEExMDAwMDU3QzU5N0JDNjQ0RkFFREFEQ0UyM0U1NEUxQkY5MzdGNAorOjEwOEEyMDAwNEVFNEFGNDk3QjhFOTQxNzY3RTM3OENFNDdEREEyRDUzRAorOjEwOEEzMDAwRkE1MzcwNEQzMTY0NzY4RTI1MDE3RTVEQzI0RTRDNjFENQorOjEwOEE0MDAwNUMwRkI5OTAzRjcyMDI3REU2MzQ1MjNDQTZGMTQxMzU4RAorOjEwOEE1MDAwNjM1OTY4MjdFNkY2MzlDQTkwOERBQTJBNDJFOTVCRUQ4OAorOjEwOEE2MDAwOUI0OTcxREZGQ0UzQ0VCMjA4NThENzdDOTdFRUJFQTBERAorOjEwOEE3MDAwN0ZCNThFRkVFMDA3RkYwMUU1NjRENUU2REU0RTFCRjIxMgorOjEwOEE4MDAwQURDQUVENjk4QjY5NzUxNkY3N0I1NkE3QTFGRkFGQzkxMworOjEwOEE5MDAwMTFGRDAwNEYyREJGQ0Y3ODc5NUQ5MDFENTc2M0Y4M0FENworOjEwOEFBMDAwOUY3NTI4NzRERkQzNjdGMkRFMDI5N0ZFMzdFM0NGQjVGOAorOjEwOEFCMDAwMDg3QkYzQUQ5MEUzRENDN0RFNTg4Q0ZDOUJCN0RDQjlEOAorOjEwOEFDMDAwMEZGMUJGMjg0RUE2RUJGRkM5N0M5NjM0QTQ4RjQzMjEzQgorOjEwOEFEMDAwRkZBQkM1QTg5NjdDMkUwNUM2MzFDNTk1NjE4M0ZCN0I4RgorOjEwOEFFMDAwRTJDM0YzRjBGREQ1MzFFRTZCNDgyN0E2RjhCQkYxQjkzMAorOjEwOEFGMDAwNDk4NUI5NzkyODU3QjYwOTREQjE2ODdGMzRCODAxQUVCOAorOjEwOEIwMDAwOEE0REI2MDAxQzFBNUNFNzg1RkVBOThFNTk3MjBERjFEQworOjEwOEIxMDAwODBDRkExNUU2OTNCNzVENjgyQ0Y2Qjc0NkZFOUI4QzQxNAorOjEwOEIyMDAwRTkxRDQ0N0ZBNDc3ODBGRUQyN0REOEQ3RjA2MDExQURENworOjEwOEIzMDAwRDZGRkU3RTlFRjFCODlGNDE4OTZGRTE4Rjc0N0ZFOEY3QQorOjEwOEI0MDAwRTgzRjJBNjYwOEZBODMzRjk1OEVENzM1N0ZBQUM1MDQ4OQorOjEwOEI1MDAwN0U3NTc2QTBBRkQxQkREQTVFNDRFMzFDMjY1ODE5RkFDMworOjEwOEI2MDAwNEY5RDEwNTdBMjFDQkFBM0QxQjk2MTNCRURGQzVERkQyRQorOjEwOEI3MDAwQkYzRjNCMEE1QzQwMzYyOTI2ODZDQjkzQzkzRjA2RkRBMgorOjEwOEI4MDAwOEQwOTNFODlGQ0JFMDkyMEYwRjc5MDlGMzU5MkY0OUQzNworOjEwOEI5MDAwNDNFMDg3OUQ5NUE0QjMxOURDMDVCRjk2ODJGRTlGMkYwNQorOjEwOEJBMDAwMTZFNTYwODJCOUQyODdGQ0JFQzMzQTNEMDVGREI3NUNDRAorOjEwOEJCMDAwRUJCNDM0RTRBNzM3MzMxRTNCODQyNkU3Q0RFNEU1M0IzMgorOjEwOEJDMDAwNUY1MTAzN0U4RUE2RDdGNjg5NjlCNUY3OTdDNzcwRkEwRAorOjEwOEJEMDAwREYwRTZBMTZGRDNENzQwRDgzRTFEMEY0Mzc5MjA1RTE5NgorOjEwOEJFMDAwOTA3Q0Q1ODY2QjU2RDJDN0VEN0Q4MEFGREIxMTBFQzA3MQorOjEwOEJGMDAwNkI5N0M0NUE1MTdGMTcxOTlDNzEyNUU4OEZDNUZCMTREOAorOjEwOEMwMDAwRUVENzdEM0Q0QTA1QkVBOTZDN0ZGNzM4QzI1QjY5QjFERQorOjEwOEMxMDAwRjkzMERGQzIxQ0M2RjM3RDQxRjkxMkJEOUZBQkY5MjVDNworOjEwOEMyMDAwOUFERkFGRjkyRDVBN0M4OUZFMERERUNGQzdFQjAwQkY2RQorOjEwOEMzMDAwREQwQzAwQTJGREYxNTlCQzBERjBGRUU3MkZBQjk5NEUwMworOjEwOEM0MDAwMjFBRjBBQUNBMzUyQUM2MzM2RUIyNUI4RDhCN0Q3QUU4OAorOjEwOEM1MDAwNEQwM0ZBQ0MxMkY4QThFQzg2QjgzMDA3RUYzMzc2MTczQworOjEwOEM2MDAwRTBFMTJFODVDNzhCNzczOTIwM0UwQ0UyQTNEOTkzNDNGMAorOjEwOEM3MDAwRkJGODlCOUUxMDk4RTc3QUUzRjVGQTdGQUFDODE3RkNFOQorOjEwOEM4MDAwQjM3MUE2RDY3NjgzMUQzQTBEMEM3MEIwOUVDNzM0ODU5RAorOjEwOEM5MDAwQTM2NThGODJGMTgwM0JEMzgwRkM1ODI3RUMxQTg0QzlFRQorOjEwOENBMDAwNDNEQjIzMjFBRjg1ODZCRTFDMDdFMEI3NkJDRjM3NjQ1QgorOjEwOENCMDAwRkZGNkVFRjlFNjIzRjRFN0E2N0NBMTMwMzMzQzVGRjgzQgorOjEwOENDMDAwNDU3RTE0RUEwN0U2MEE5REI3RUU4RkFENTZDNkFGMTM5MAorOjEwOENEMDAwRkZENDhBQjVFRkFGQzc4QzE4QzI2N0ExRjYzN0U3OUZGQworOjEwOENFMDAwNUY4RkYzN0Q3OTQ2RTFCQzJEREU1RjZFNzJBN0RCNkQ5MQorOjEwOENGMDAwRDhGMjc4N0ZCRkM0RkQxREVERkU3RTIzQzAwREQ3MzdBRgorOjEwOEQwMDAwQzU2ODcxN0ZBRjQyRjkxOUY4OTk4M0U4N0MxN0M2RkJGMworOjEwOEQxMDAwQjkwMUJBREU3NUFFRTIwQjI1NjczMDdERjBGN0ZGMjNBRgorOjEwOEQyMDAwREVEN0UyRkNCNzQ0RkNDMEY2OUQzMEE5MDBENzhDRDY1NAorOjEwOEQzMDAwNDcxNEY0QTM2NzI0QzlDQzE5RjRERTNCNTQyQjczMDYwMworOjEwOEQ0MDAwQzVGQjZGQzRFOEZDOTA3REFGQUQ5RjA1NzZBNEFFNDczMAorOjEwOEQ1MDAwNzY4NEExQkNCNjZGM0Y5NDgzRkQ1RUQ5NjExRDgyOEY3RQorOjEwOEQ2MDAwRjRGODlERDFGRTg4ODJGQzlGMTBDQkU1RTY3QUVGMkZDOAorOjEwOEQ3MDAwMUMwNzdDNzIyQkQyOUQ5MTFGNzdCMTQwMjIzOUQyRDMzMAorOjEwOEQ4MDAwNzdFRjlFOUZDN0Y2NjUwRjhGRUZFMUU4QUZBN0MzNkY0MAorOjEwOEQ5MDAwQ0UxNzQ3MjE1RUFFNDcwRjNEREY3NkMyM0EzREIwM0U2QgorOjEwOERBMDAwMUZBQ0QzMDNGRUQ2REU3QTNCRjVERkFFNEZBMkJFQzZDNAorOjEwOERCMDAwQUY3NTFEQkY4QzQ1N0Y0REUzRDNCMjU4Q0UzNzUzNzY4OAorOjEwOERDMDAwQUY4RjY1QjYwMEJEMzQ3QzVEMTQ3NEFCNjY4RUY5QjNBRAorOjEwOEREMDAwRTBDRjVEOTIyMzgyRjQ4NDg3RjUyNjE1MDRFQzU1RjVFNworOjEwOERFMDAwQjE3MkYyMzMzNDdCNTUyRDY3MUI1MUZGNkFGNjBBRDNGQgorOjEwOERGMDAwQzJBOENGRjRGNjY5N0U3QTkxMTFENUFBREUyRUMxMDJGRgorOjEwOEUwMDAwOERDOEJGRDUwQjQzQUY1N0Y0MzQyQjExRDQzMzEwOUQwRAorOjEwOEUxMDAwMjQ0OUUwNDNGOEQ1MUEzQzFGMzIxN0MxQUJBN0E3MDY3NworOjEwOEUyMDAwOUYxRTJFQ0Q5RkFFMTY3NDgzNzU5NkUxRDJFN0FBNDU5QworOjEwOEUzMDAwQjQ4RTQxNzY1NUFDRjc0NkVEQTkzOTM2MzRDRUJBNzJDOAorOjEwOEU0MDAwQUVGNEZEOUMyMUY4NzUzOEJFRDVERkQ3RjQ0MDM5QkVBRAorOjEwOEU1MDAwMjA5NzVBMEZGQTExMDlCMTA5NDRBRkYyQUIyNkU2MDQ4NAorOjEwOEU2MDAwN0JDMTQ2ODZCMUNGODJGM0VGQUY2NDkyQkQ3QjU0RDgwRAorOjEwOEU3MDAwREZFMUY4QTZGNkFBODFCOTYzMDNGQzYzNkM3QkNFOEFCNgorOjEwOEU4MDAwRkNCMzVCNjlCNjYyREVGMTM2REI5Q0M2MjhDMDUzRTlGMQorOjEwOEU5MDAwMUY4QkU3QTE1RjU3RDc2NzYwOTg5QTJBNkJCRkI0MEYwMworOjEwOEVBMDAwRTNGNkJBRTNDQzgxRkFCMEI4QkRBQjA0RjlFRDZEQTUzOQorOjEwOEVCMDAwNTdBNjM4RkE0QkM2OUUwQkYyMEZEQkRBMUJBREU4M0YyNAorOjEwOEVDMDAwQjVDNUM5MTRBN0VGOEZFNkZDQThERDZGODlFNUZDRDcwRgorOjEwOEVEMDAwNzZFNkYyMkNFNzEwRjczRjEzRjc0QjRGRTUxQUQxNDgyRgorOjEwOEVFMDAwRjZDNzQ3NTBCRUExRkM2OTAzQURCRjU0QjI1NzU1QTJBNworOjEwOEVGMDAwRkY3MTg3OTFGQzdBODg1QkZFRjA3RENDMzdCNTk5QjcxRQorOjEwOEYwMDAwNjNBQUJFQUNFRDg3OEZEODgxMTAyREZGRTdCMzA2MzM3RgorOjEwOEYxMDAwRTYwRkU2NDg4RTk3NjE1Q0I5RUFFRkMyN0VGOUJDNTQ3MQorOjEwOEYyMDAwREE4Nzk5RjQ3RjY1RjI1RkZENzc0Qjk0RjcyODA3NzYyRgorOjEwOEYzMDAwQzE3RUY5M0RBOTVFQ0MzRkVDOTE3OERGRDNDMUYzRkU1MQorOjEwOEY0MDAwQ0NFRTg5OUQwNUVGRjlBMDMyNzZDMjNBRTIyOUFEN0ZEOQorOjEwOEY1MDAwNEJFRTNBMjYxODM4Mjg5RTdBNkMxN0RGM0Y3QUFDNENENQorOjEwOEY2MDAwQTJGREEzMzI3QjBBRjMwNEYxNTVGOUQzNDBDRjNDRTBENAorOjEwOEY3MDAwQzdGNkM0NjJFNERGQUEwQTk5Nzk4M0Y4N0FCRUNCQ0EzRAorOjEwOEY4MDAwQkM0MUUzRjc4NzcxNzhGQzkyRDk4QkY5MTI0RDVFNjc4QgorOjEwOEY5MDAwMEFGRUFFNUUxODFCMzI3RTBFRTM3RUUyNDJENjZDNDRDMQorOjEwOEZBMDAwRjlBRTEzRjBENDE1MDEzQ0YwRkM0QzExQTdERUVENEVFOAorOjEwOEZCMDAwMDk3OTZGMjU2NjQxNjA2ODU2REM2OEIyOEZCM0JGRUNGMworOjEwOEZDMDAwMjNCMzNBNDczRTc5NkMzMUJDODc2NTcwRjlEMEU0QUM4NQorOjEwOEZEMDAwNENBRTY5MjIzRTQ4OTIxQzE4MUZDRjk3QzBBQjk0NTFFQgorOjEwOEZFMDAwREY4NUNBRDFFQ0M5QTFGRDM5NEVCRDdFMDg5NTc3QkQ5QworOjEwOEZGMDAwMUVEN0U0N0M3RTg3NkNDNDM4N0E3RTkxRTQ2MDQzRThCNworOjEwOTAwMDAwMDNCRDNGQURENzAzOTMwQzhFNzczMEFFOUU3QkQ1NDkyMQorOjEwOTAxMDAwRkMzNTQ4MEY5Q0FDRjg4N0Y0QzA1QjIwNUI5MzQxNUU0NQorOjEwOTAyMDAwN0ZBNEU5ODM5QkQ4NERBODBGQ0FFNDJERUI5MTNGRkFBQQorOjEwOTAzMDAwQzFBRTk5ODdFMDBGQ0QyRTY4RjE3NjM5QzgyN0YyMDNDQgorOjEwOTA0MDAwM0JDRkY3MjVDQUFFODI5Q0M2MDZFMkVEMDFGRDAwN0U0RAorOjEwOTA1MDAwODM2MzA4N0ZFNjU3QjE2OTIxRkI0OTAzRkEyMkM4NkY5MQorOjEwOTA2MDAwMzAxNkZDRjM3RTQzMTlGODhCQTY1Qzg0NkYyNEYzRTQ3RQorOjEwOTA3MDAwOTE5RUEyRkMxRUI0M0VDQUIzMjU1REEyM0M0QTFEQzQwQgorOjEwOTA4MDAwRjExNENGQjM1RjEyNUNBOEQ3QTQ5ODAwREZFQkZEMDkwMQorOjEwOTA5MDAwMkQ0RjNCNDJFNDA5RjRGQzMwOTBCNzlCNjdGNDIyOUZDQworOjEwOTBBMDAwNjlGQzUwNkVFNzcyNTEzRTRGQTZGQ0I5OUUzRkI0Rjc4MworOjEwOTBCMDAwNUQ4RjJGN0MxMkYwODVGNDc3Rjg0MkM4RDM4REYyQzUwRQorOjEwOTBDMDAwMjE4RDFGRDI1OUZBOERGMDgzQzYwNzFBNUZFOEVEQzVDRQorOjEwOTBEMDAwNDE1RERFNjUzODdCNzFGMjNBRjZFMjlEMEMyM0U5NjU2RAorOjEwOTBFMDAwQkQ5REQwRUNDMjgxMzhBRTdGQzdDN0YyN0Q4QTk5OTkwOQorOjEwOTBGMDAwRjM2REU4NTc4QzQwN0Q4MEZFOUVCMDM3MDM3OUEzMEQ1OQorOjEwOTEwMDAwOUMwRkRFRTk1QkFBNDg2ODM3NTAwRkE0MDZFMTVERTRENgorOjEwOTExMDAwNEQzNUJFQUI3RDlBNTFGRUIwNTJFODlGOEIxRDNDOUZGMgorOjEwOTEyMDAwNTY1NzJBN0IyREYwNjc0OUZCNzNFQjc5REY0OEY5QjY3OAorOjEwOTEzMDAwMjJBNTRCQjFDMEJDQjMxRDkyMDNGMzM1NEU5MTdGOUI2QQorOjEwOTE0MDAwNzVENUU0NTUyOTNGM0ZGNDdFN0E5NUUwMUI4QzczNzAwQQorOjEwOTE1MDAwRkM2Q0E3RTQ4NTEwNzQ5MDFFQUFCQUNBRURCRTVFMUYwRgorOjEwOTE2MDAwNTU4OUZERjIyQUREN0VCOTI5NEVEMEY1NjY3NkYzQkYyQQorOjEwOTE3MDAwRDJFRUM3QzcyNTcwQjkxOTg2OEVEQUYzMUExRDM1RkFGMworOjEwOTE4MDAwNERDMEIxMjgzRkZCQkUzNkE5MTFEQzNGNDZGQUNEQjgzMQorOjEwOTE5MDAwQUFEMDNDQTNFMjQyRkQ5NjJGQ0ZFN0ZFMjdDNTc0NjIxQQorOjEwOTFBMDAwN0M1REZCMjU5MzdCRkNGMEYwNUZDRjJGQkQ1OUYzQzNCMworOjEwOTFCMDAwODU1RkFFQkQ3NzI2Qzg3ODBBM0E4NjNBRkJBMUJERTczRgorOjEwOTFDMDAwQkFGNjQyM0NBRkE3RDNFNEI4RDA3ODQyQTM4N0E2NDcwQgorOjEwOTFEMDAwMDdFMTVCRThEOUUxRTg3NTNEM0RBQkU5QjM3RkI1OUVCQQorOjEwOTFFMDAwRDVFNkQ3RUM4MEY2NUVCREZFMUQyRTNFRDNGNEU5NTNFNgorOjEwOTFGMDAwMUIwRDk0MTdCOTREQzRDMUI3ODkzQ0VCODM0MkNFOTc4MAorOjEwOTIwMDAwMEI3RERCRkYxNzhCMDFGREFDNkQ5RERDMUY3MTk4RURCNQorOjEwOTIxMDAwODdEMDZGMDhFNEYzMzg1RDlGOEM2MDFFREMyRjY3NEFBRgorOjEwOTIyMDAwQUY4NUY2MkY4QjgxQTRCODdGOTlDQ0Y3MkZCNzI4M0U1NgorOjEwOTIzMDAwMTdFOTY5ODdDMjFBNDA1RUZFMkFGMjE2NEZFRUY1MkMzNgorOjEwOTI0MDAwNDYzREZERTRFOTMxMDZEQTQ3NTc3Q0JEMTgxNzRGQ0FBMQorOjEwOTI1MDAwNTU2ODNGMjhEQUFDNTJCRUY3NjI4N0Q5OEVDRkY1RUY1QQorOjEwOTI2MDAwRkU1RTk3MTFFN0Y5MEI3MzYwQThGNjc2ODc3OTYwM0Y4OQorOjEwOTI3MDAwMDZGNTQyOTlEQzIzNjM1RUJFREYwRkJFMzg4QzlGQjZENQorOjEwOTI4MDAwRDA1NzgyRjFDRTZEQUNCNzExRTNFQTQyQTRFMzEwRjRGQgorOjEwOTI5MDAwN0I1NTY3NUZGNDc5RkI5MjBFRUUyNzk1NDRGMEJBOUZGOQorOjEwOTJBMDAwRTk4MDQ2N0NFRkY0MzYxM0Y5ODVEN0NCREIxNzdEQzkwRgorOjEwOTJCMDAwQzg1RjFBOTRBRjZGRTM3QTA2MDYxMTlGREM2OERFQkVDMgorOjEwOTJDMDAwMTA3RDNERTBFMzlGRThGNDBFMUIyNjdGQkZDREM0Rjc4MQorOjEwOTJEMDAwNzNGQzQ3OEMwQ0ZENUU3NjJFNkVDOEJDQ0JGNUYyRjhBNQorOjEwOTJFMDAwQkIzQkMzOUQ2QTI0RUVCQjcxRkY3Qzc3NjdCMjUzQ0Q1NQorOjEwOTJGMDAwMTk3RTdDNEU5RkJGMThGMzk1REJCNkNDNTUyODRFMTREMworOjEwOTMwMDAwRjlDRjQxRkIyMjNBRkNFRDkwNTg5MzE1RjM2OUVEOEVBRAorOjEwOTMxMDAwNTI4QzNGODZEQkU3MjhGNjNCNjlERTFCQzUxQjYzQ0QxRAorOjEwOTMyMDAwOUNDRUEyN0VFOTc2MjE2M0RCQ0U4NjNCOTFCRkI3OURDMgorOjEwOTMzMDAwNEQ3NjIyM0NCQjA1N0Y2QUZDQkVGQkNDRTU3MERBQ0ZFNAorOjEwOTM0MDAwMzQzOTU1REMwN0Y2NDc1QjFDMkYxM0JGNzIzRTZGMTk4QgorOjEwOTM1MDAwMzFDNjhCRkJBRERCODUzQzZDMEJGNzFGQ0M4QTBCREU3QgorOjEwOTM2MDAwQ0ZFMEZCMTc5REY1OUVBQTMzRTlCNERGMkQ2MUJFNTExNgorOjEwOTM3MDAwREIyN0Y2ODBCQzUwNUQ0RTBDMjM3RTMyQjIxNjg2RUZBMgorOjEwOTM4MDAwNkQ3NEIyOUY2MzNCN0Q5QTFBODVGOEJFMUNBN0VENDdBQQorOjEwOTM5MDAwQUE1MTk0NjdGOEY2NEE4MTZCRkM2MEJDRUZBODc3NTEzQworOjEwOTNBMDAwM0Q0OTZCRkRDMjJBMDU2MDdDQjNERTRENkQ1QkZENzJFRAorOjEwOTNCMDAwNkFGN0Q0QUZBNkZCNkIwRjQ1M0U4RTc2QkZDRUI5QTA0MQorOjEwOTNDMDAwNEEwOUQyMUI5RkM1RjNGQzUyNkVENkU5MTJFNDczRjYyQworOjEwOTNEMDAwMEQ2MzE4RUY0QzdGQTI0RjQ2M0Q3MUZCNTU1ODQ3NDgyRgorOjEwOTNFMDAwREQ4ODcyMTlGMTRDRjlDQkI0NDAzRjU1NUExMjg2N0M5NgorOjEwOTNGMDAwNzlGQjU1RTgwNzhEOTdFMkEzMzkxRDlBOTRBNjVCMEE3RAorOjEwOTQwMDAwNDg1QTg4MUZDMkUyOUQxN0UzRTBGQTBGRUQyRTdGNUNGOQorOjEwOTQxMDAwM0NGMjQxRjVCRTBCOENGQTk3RjFGQTBFRTk2RUY5MDJCNworOjEwOTQyMDAwOENDQkYzMTU1MURFMzgwRkYzQzZCOTM0RUQ2MkM0REZDRgorOjEwOTQzMDAwQzQyRTEzRUQ3QjZCRjlEQjVDMzFBRkYzQUJEMDNDNzIyOAorOjEwOTQ0MDAwOUVDOERCQkVDOUZBMjg5RjlDNkY4MUMwQ0E4MDcwNzExQworOjEwOTQ1MDAwRkEzOUE1Rjk0OTEyRTZGQkUyNEQwRUFDNTc5ODk4RTZBOQorOjEwOTQ2MDAwQ0FDMzdDNkI1NzNDQTNGQzY5NTc1N0MyNDgxNUYwRTA1MAorOjEwOTQ3MDAwNTQ3ODVFRDdBOUU1NzVEOURGQ0ZFQjc2N0YxQUU5MjE1RAorOjEwOTQ4MDAwN0QwNTdFMEFFQUE3RUVBMzkxMEUxRkVERkY1OUM4RkZFNgorOjEwOTQ5MDAwREI4MTBGNjI3RDQzMzhBRjE3NjBGM0U2NTExRUZENzYyNgorOjEwOTRBMDAwMEI1RjA3RDg5RkY4NzhDQUZCRjlGNjFEODZFNzdFN0IyRAorOjEwOTRCMDAwOTlGMTdEQzRERTkzQjQzRjVENjJDODRDRUMwMzM4Rjc4QworOjEwOTRDMDAwNDk2M0EzQjA3REYxRDNDODZDNkE4RjQ2OUU0N0ZDNzQ5NAorOjEwOTREMDAwMUFBQzJBQkVGN0MzN0E1Njg1NzU2N0NFRjc2REI0OUY2RQorOjEwOTRFMDAwMzFGRDdEOUI4MkVERTFGQTNFQUE0NzdCQkZGRTFDQjVCNAorOjEwOTRGMDAwNDdFQUZERDQxRUFEQkY0QUVEM0I3MDFERjlFNzEwM0NCNQorOjEwOTUwMDAwOEY2REVFRTIwODdBNkVDN0EyMDgxM0MyREIxOUM5QjZFNgorOjEwOTUxMDAwNjhFRkMxN0EzMzVGQjhBRjE1OTNGOUVGQzU3RkJFQ0U2MAorOjEwOTUyMDAwNzIxM0Q4M0JCMzdCQkMzNDgxQjExM0YxOUZDRjU0QTBFRAorOjEwOTUzMDAwN0Y2OEM2QTg3RkZGMEJEQ0ZGREQ0RjJFQUNCMzAwNUM1RAorOjEwOTU0MDAwRjM4RURBNUE3QkEwRkZFOTRGMkVBRUIzQTE5RTNEMTRGNQorOjEwOTU1MDAwMEVDQTBFRjU0NkZGNDE5MDc0OTY4NzM2M0Q5OTcxMDUwNworOjEwOTU2MDAwM0IxOUZBQjFBMkVGRTk5RjU5MEEyNDVGNTBEMjk3QzU3RgorOjEwOTU3MDAwODBCNUE2RkNDNDNGRDMwMjc4NUM2MDc1RkYxQkY2NEQzNgorOjEwOTU4MDAwOUU5NzY2OTZERTg0N0RFNkMxN0EyRUJGNjRBNEY4OUUxRgorOjEwOTU5MDAwOEQ5NEUyQjA3RTY1OTlERDdEMkMzRUM4N0UzQkE1M0Y3MworOjEwOTVBMDAwRDJGRTUxODE1MzYyRDE3MTQ0NTdEQUNGNjJGNjUzQjE4MgorOjEwOTVCMDAwQzFGMkI2Q0M1RTc2MENFOTcxNDczQ0RGQkY5QTM4NERGQworOjEwOTVDMDAwNzIwNkQ3NDlFOEM3NEQzQ0EzOTYyMjlEMEFDRTk1MzcyRgorOjEwOTVEMDAwNjEzQkJCMjI5QUZBQUU4NTkzOUE1MDlFNEI2REMzM0Q3OAorOjEwOTVFMDAwNUY0MkNGMkY4ODM3MTI3RjE2MkI1MjQ4N0Q4ODdFNUNEMgorOjEwOTVGMDAwMUUzMDEzRkFDN0ZFMDNFMTk0MTc5ODc4Q0NERDg4NzUwNgorOjEwOTYwMDAwQTM2NTQ5QTlCOUIyRDA3OThDRkFEMTFCNzExRjZENjJEQgorOjEwOTYxMDAwRTU4N0E1QjEyODNGMzZDOTgxRTZBMTgwRjUzNUM1QzZFNQorOjEwOTYyMDAwNjFGRDIzMTY0NEUxQkE5RTJCQzFGQTlEODlBQUU0NDA0QworOjEwOTYzMDAwQjQxNTM5QkI1QUYxRjkyMjQ3ODRBMzA4RkRGMTYzNkFENgorOjEwOTY0MDAwMjk5QTlDQTNDQTg0QzNGOTMwNkU0NkJBRUNCMEMwNDREMAorOjEwOTY1MDAwNDc3RDc3NENCRDAwRkRBMjhDMjhDQUUzMTYyOUFCQUYyRAorOjEwOTY2MDAwMUNBNjdFODRBMzQxQzU3NTZDRkM3OTJEQ0Q2MzI2N0IzOQorOjEwOTY3MDAwQkU2MzU2Qzk3RjIwRkYxNEJCQTIyOEU3NTc2QTNCMzU1QgorOjEwOTY4MDAwMzdCODJFMENENjRENzAxN0Q5NjU2Rjk4ODRGQ0ZEODNDMgorOjEwOTY5MDAwNTIzQkY0Nzc4QzkyMThDQUNGNTE1RkU2OUZFOTdFNzdGMAorOjEwOTZBMDAwQjgxQTA2ODBFRTMwRDk0QjcxQkUxRDI2QzlCRTk2RkE5NworOjEwOTZCMDAwQUUxMjFDRUYxOTYzNTQzMTRGNTQxRUY3NDVDOEZDMzNFQQorOjEwOTZDMDAwNEFBNTI5NjcxMEZFRUNBODA5NzhBRDYyRTRBNTkwRkJENQorOjEwOTZEMDAwM0Q4QkFDNjQyNzJBREZDRjI2N0ZBODY3NTEwQUQ5OEI0MAorOjEwOTZFMDAwQ0FGN0E3MTU2M0RCNjNFMDdFN0FFNUZCOTUxNTc0REZBNworOjEwOTZGMDAwQzBFM0RGQ0FDNURGNzE4QTNFQzVCQjk1OEI1NzUxQkYzQQorOjEwOTcwMDAwNEI0QUZDNzc3Q0RGOTVFQ0E4NUNDQ0EzQ0Q0Q0ZGN0E3MAorOjEwOTcxMDAwQUUxMkVDRkZBRENFMjRGOUNGMTU3OUJDMjI0M0U2RkFBOAorOjEwOTcyMDAwNjkwMEZGQTMwN0Y4M0U0NDY1QjYxNDUyMzczNzJCRkY5NAorOjEwOTczMDAwNTQ0ODNEQTg2QkRBMTcyMUZEQjlBNTk3NDJFQTQzRTdFMworOjEwOTc0MDAwNTU3RTFERDI1RjMwNEZBQTBBMUU1RjdBMjA5RkVDNkJCOAorOjEwOTc1MDAwQkVBODVGRDJGMjRCNDU4Mjg1REVBOUNGQTgyQTA1QjkwMworOjEwOTc2MDAwM0MwMEVEMDNBMDFGOEE3QTQ1REU1NUUxNzE3NTA2RkNDOQorOjEwOTc3MDAwNDMzRDU4NkFEM0U1Nzc5OTRBRkJEOTE1REQ3Q0RGQkFCQQorOjEwOTc4MDAwM0NDRTc4M0FEODNFNTRDODRGNzA3RjQxQjdGRURDMDNEOAorOjEwOTc5MDAwNDZCMjkzQjlEMTMyRTVBQjM0RjgyQTQ2ODYzRUFGRjlFQQorOjEwOTdBMDAwNUYxNTAyQ0UxRDA2Nzc1MzBDRTVDNzlDQkRFODdGNjhBOAorOjEwOTdCMDAwRjA2QkVGRDdFMEFFOTBFRjI5QTVFREJGRUJDMEFGODcyMAorOjEwOTdDMDAwMTcwMDI1RkY0RDBGQzc4MTc4MTE4NzgwQkY0MUZFNTlEMworOjEwOTdEMDAwMzdBRjRCODM1RkRDNTA3NjVCRjNDRjJCNDE0RjQ1MDdCMAorOjEwOTdFMDAwRUIyOTlCMTQ4N0Y1NzZDM0U5Mjk2RERFRTFGQzMwNkQyQQorOjEwOTdGMDAwREU2NTc2MTczREVGRENGQUQ5RDE0MjM5QTg5RjdBMkE4NworOjEwOTgwMDAwMzYyNkI4RkZEQTY3RUI0M0VFQzc5RkFBOEEwRUVFNkZFMworOjEwOTgxMDAwRkFBQzBBRUY0RjU3RDQ0NjFCRjBFMzQxMjYzOTNDQzg1NworOjEwOTgyMDAwOUYzREFBODJGQkNGMjVDNzlDNEREODk2OUQ3NDYzOTkxNgorOjEwOTgzMDAwMjk5QjcxQzZEMzg0RURENEYzREUxRTMzQUNFQjhFMENDMgorOjEwOTg0MDAwNTlDNUI4NURGMzNGRjRGMDlBMTM3ODFDNzJGMEFBNkExOAorOjEwOTg1MDAwQzVGREQzMUQxRUQ1OEFGRUZCOEUyNzU0MkJGQTFGM0I1OAorOjEwOTg2MDAwOUNBQzAyRTMzMTY3OUE2MTM1RkFGM0NFMkM1RTY3NzhERgorOjEwOTg3MDAwNTVFOEUxNkZFMkY5RjM1QTdCNUE3MTdGODM3QTExRUI3NQorOjEwOTg4MDAwQzJEMTI3QThGRERBNEY3NUUwMDdEMUFGQ0ExRUVDNTc0OQorOjEwOTg5MDAwMUQ1NEJDMzY3Q0RGQzEyN0JDQjZFMDdEQzIxQkY1QUJENgorOjEwOThBMDAwRkU4QzM2M0ExRUY5NkM0RTg4N0M5NjU4RUVBRTBBOTZCRgorOjEwOThCMDAwRUYzMkZCOTI5MEZCOUZDNkE5MDRGRjhDQTQ4NzQzQzY5RQorOjEwOThDMDAwRERBMTNFMTJEMjA3N0YzMTAzRkQ5MTQ2MTNBMzNBNTkyMQorOjEwOThEMDAwOEY4MUQ3QzlFQUYxRjhBOEMwQTNDMzY2NDczNzg2MTlCNAorOjEwOThFMDAwRTM1NEFBNkJEMzhGNzM5NDcwRkNFOUFGQTcyN0YwQjg0OQorOjEwOThGMDAwNjgyM0M4MENCNkY3MjQ3MEY4RjQ3NUIxRkEzRUM0N0MzRQorOjEwOTkwMDAwMEI3MTNFOTgzOTA5RjlEQzYxMzU1QzAxNTc5NzM5MTNDMQorOjEwOTkxMDAwOTJFRUE0N0FEOTNDQzNBMzY5RDBBRjRFQzhFMkZEQTlBOAorOjEwOTkyMDAwODY5RDU4MUY3Qjc3NDIzNkVGREY2QUM4MzM4MjFGRjA2RgorOjEwOTkzMDAwMkIzNkZFNEVBQzA3QUYwRDEzNzU5RDBGMjREMjdFOThDQgorOjEwOTk0MDAwMTZERjI4ODY1MzJGMkVDNjM4NzM4RjkxNjFGRUZFMTlCRAorOjEwOTk1MDAwMTNEOEJERENDMEJFQjlENUNDRTM1MkFCODlENzZEM0ZCRgorOjEwOTk2MDAwOTU3QUY0MjlENDFCNkE5ODdCN0EwMkY5NTFDNTJBRTJDOAorOjEwOTk3MDAwRUZCQ0RENDI3NTlEOEZFRDJFNEI0NEZBREY5M0MwRjNCMworOjEwOTk4MDAwNUM1OTNCQTcyNkExN0VGOTE3QkM3RjU2QzJDNEUxREYxNAorOjEwOTk5MDAwOEY3NUJFMzhDRkY5MUQ1OUU0N0Y2N0REMENFODk1MDI1RAorOjEwOTlBMDAwRjg4N0YwOThBRTg3NDE5ODQwRTcyNTk4MzMwOUYzNkMyMworOjEwOTlCMDAwOEREMTI2OUFFNzlFMDRDRTdGMzdEQTBFQUFGQjhEMzIzMAorOjEwOTlDMDAwQUNERTBFRURGRDgyRkUwRkUwN0IwOTVGRkU1MTczNzA5MQorOjEwOTlEMDAwNjNDRUVFMUYzNTc3M0NFRjIzN0Q2NTM5RDc4RjdFQUNBNAorOjEwOTlFMDAwRkYzQjExQjRBRkMyNDZGQTY5RkZFNUUzN0JCMjFDRTg2NgorOjEwOTlGMDAwOUY3RTEyQ0VGMUI3RDAzQkJBQjE0RkM1RkEwREVGNERGNQorOjEwOUEwMDAwNTgyRjkxOTFFOEFFNDUzQzJDMzI3QjZGMjFGRUIxQUREMQorOjEwOUExMDAwOEVDMEY5NkZCNDFFNzhGMDdCMjE4MDA0RkE1NDRGRTFCOAorOjEwOUEyMDAwRjREMURFMEIzOEI1QTAzREY4NTg5QzAzRDFFMDgwRjdBNworOjEwOUEzMDAwRkYwMEY5NDA4MzY3MDAwRTVENURCODk2NjdBRUZCQTMzQgorOjEwOUE0MDAwODFGMjBDNzUxMkU4M0RFOEVGM0NDOTFDMUU5OEU3QTJCNAorOjEwOUE1MDAwRTZBRjhCQkMyNjZFNDVFMTdCQTYxQzVFNUE2MjgzMzY2MAorOjEwOUE2MDAwQkY2RDI1OEY3MzdCOTU5MDNDRDdBNEUzOEE3RUJGODMxRgorOjEwOUE3MDAwRUNENjU0RUQ3OTVEOUU3MUFBODg2QkE3RUFFMkRBMTdGRAorOjEwOUE4MDAwMTM4NDlENDk2NkM5QzE3OTgwMzUyMjZFQjhEQzMzM0FBQQorOjEwOUE5MDAwMEFGRDRDRDQ1MTMyRTBENUE0Q0E2QzcyNEM0MENFNUI2NgorOjEwOUFBMDAwMjFFRTY3NDE3MUJGQzY2N0UzOEZEOUVGNDdCOEM3MUY4MworOjEwOUFCMDAwNjNGNzkxNUREN0U2MURDODJGNzBCQzVDM0VDRUYxMzJENgorOjEwOUFDMDAwQTEyRkUzQTdEM0EwNkZFQzM2MzJBRjFBNTg0RjIxMDc2RQorOjEwOUFEMDAwOTU1REM2RkZFMDc4QkJDOThCNzVDQjA1MDc3RTk5RTcxRQorOjEwOUFFMDAwODM0QkU2MjQwMzUzODNGMDEwQTY4NjMzMzU0ODJGNUE2MAorOjEwOUFGMDAwMzM2MjQyRkFCMjg2NkY2MUNGRjNDNEZDMTE4RUU0OTBGOAorOjEwOUIwMDAwNzlGNkM0OTQ3N0EzN0RDRkIzMkQyN0ZCMUUzNTc5NzRFNgorOjEwOUIxMDAwQzgzQ0FDNDcwOUIxRjNCMDI4REFCRjlDMDg0MEZEMEM0MworOjEwOUIyMDAwRjA1QTcwNEMwOUIxRTc5M0UyM0NCODYyMzZGOUE0QTI0RQorOjEwOUIzMDAwQjNGRkNEMzJDQTQxRTE5OUQwRUIwNzg2QTNDQjcwRjhEMQorOjEwOUI0MDAwNjMzOTNGNDVGRkVFMUZDNTVGQjQzMzE0N0ZCMTE1QTFFNAorOjEwOUI1MDAwRjg4Qjc3ODVFMjJGNzE2MTI4OUU0NkI4NDNGMTkyQjI2NworOjEwOUI2MDAwN0M1Q0M4RkQ5QjU2RTc4NkY0NkY3RUJDMzA2NDdDMkEyMworOjEwOUI3MDAwMThBNEUwN0VEQUQzMzM0M0M2REZEMjNDMzdBNDNGNzY2NQorOjEwOUI4MDAwQzNBMjkwRjE5OURFQTUyMUY3QjM1RTVENzE0M0Y0MUU4NworOjEwOUI5MDAwREZCMjI2NjQ5QzlFREVCN0I2RkRBRjkwNzkzNTdBN0I0NgorOjEwOUJBMDAwRTBERkJGODJERUU2QzQ1MDdBQTcwQUZEMUFFREU0RjVENQorOjEwOUJCMDAwNjVGRDQ2REJEMzEyRTgyMzRDMTNBMTVFOEI2RTdGRjc2NQorOjEwOUJDMDAwNkJDQzQzNzg4QTU1QUE5RkYzQ0M2NEI0MEZGRDgyRUMyQQorOjEwOUJEMDAwOTI1MDBGQTVDMDE0ODYzNEFBNUZBN0ZBQkIxRjFCMENCNgorOjEwOUJFMDAwMjFGQkUyODk4OURDQkUyNzI2RjI3Q0NEQ0Y0REZDREM0RgorOjEwOUJGMDAwNTIwQUY4OEY2NDg3MEMyQzEwMkYwMzFFMjIzMTVFQTZBOAorOjEwOUMwMDAwNzhGQUM3Q0Y2MEJDREMxNEREOTdBMTQyN0M2Q0M2RkUzRAorOjEwOUMxMDAwNEQwMTdEQjlDOEFDMzZGNjAxM0UyNkM4NUMxRjgyOUU1OAorOjEwOUMyMDAwNEM0Qjg0RjkzRjkxOUUzMDcyM0ZDMjYzNDQzRjIyQzU0MgorOjEwOUMzMDAwQzIzQzkxQjk2NDNGMjg3RjFDQ0RFMjI0QUNDNzhGMEE5NworOjEwOUM0MDAwRTg2OUY1MUExMDZCREY4QTJDM0EwN0Y1MUU0MjgyRkU4RQorOjEwOUM1MDAwQUYyNTg2RUNFOEREOUE3RTVBOUU0OUZBRTlCMjJERDQwQQorOjEwOUM2MDAwMEZCQkZDNDAxQTVEM0Y3MUFGOTlGNkZCNEY4ODNBNDQzOQorOjEwOUM3MDAwNkRGREU3ODRERUZBNTNCRDg1REFGM0Y1RjYxMDNEQjZFNworOjEwOUM4MDAwN0NFM0ZBMDhGNDFGNEY2NDcwN0Y1MUJCNUU4Mjc4OUJCRgorOjEwOUM5MDAwODhBRDJDRUM5QUM1OEVGOUFDN0JDMDM4NDcwMUJFNTcxNQorOjEwOUNBMDAwNzVGNzQ1MkU2MkU0MzcxNkUzQkE2QjM3NUVCOUY3NERBOAorOjEwOUNCMDAwRThENzE5RkMwOURDM0U3ODc4QkRDQ0M3OENGQ0NGRUEyQworOjEwOUNDMDAwNkY1ODg4RkYzNDM3OTFDN0U5NzNDNUZDMEJBMEIxMDMwNworOjEwOUNEMDAwOUUxNjAwRkVBM0IxN0Q3NzVBMzlGMjI3NUNBN0YzNjk3RgorOjEwOUNFMDAwQjNCQjE5RDU5RkNDNzFBN0QyM0VFMzUxRTZGODcwMTdFQworOjEwOUNGMDAwODBGODlENDQ5NUUwOUNDNzVDQjQ1RkZGRDFCREFCMjI2QQorOjEwOUQwMDAwNzBEQ0MwN0NEQTNDQzAyOEU4NkY3QzFDRUQzMTI2NjAzQQorOjEwOUQxMDAwREM3RjFCQUY2RjgwRjc1OUYwQkFFQjlFOTQyN0QxMEUxMgorOjEwOUQyMDAwNjlFRkZCODhCOTJGN0M4OEZCRERDQzQxRjM2QUYzMzMwNAorOjEwOUQzMDAwMTYxM0EyOUY3NjJDNUZGOTY5MkNCQzZGQ0QwMTAzRTU0OQorOjEwOUQ0MDAwMTNENjc0OTgyOUVFRUE1RkYxRDdBRDJGQzJGREZCNTIwRQorOjEwOUQ1MDAwRkE2RTQyQkJGQ0M5OEE2RkM2MjAzRkRDQkQwMUY0MTAxRAorOjEwOUQ2MDAwQUNCMTMwQ0FGRDcwNjI1MDlDNzJFMjgxMkIxMTc4MUYzOQorOjEwOUQ3MDAwRUNFQkE2MTdEMTM4NkUzNjUzN0RFRjI3MkIzNjhGMDlDMworOjEwOUQ4MDAwRjY0NzFGNEQyQ0FBQzVFN0Q4RTQxQjNCNkY1OEYyN0E2MworOjEwOUQ5MDAwNjYyMkQ1NjMwOTdFN0E1OEYwRDM5QUQ3QzY5MjFGQjU0QQorOjEwOURBMDAwMjY2MjgwOUY3ODdGMTNBRkVGRDBENkYxQTFFMEM3MTU3MAorOjEwOURCMDAwQUY3RjVEMTA3Q0NFNzQwN0YwOTEzQTg2RUY2QkE5MjBERgorOjEwOURDMDAwNTMzQjdCMkVFN0UwRkQ1NzE0NzcxM0MyRDc3OUY1NzQyOAorOjEwOUREMDAwMjRGNjc3QkVGNzM3ODI5RkNEQkIzMTc4NTEwNjNEMDUxQgorOjEwOURFMDAwODFGRDY1RUREQ0U1QzJGNkQ4M0NBNDNCQzg1OTMzQ0UxNQorOjEwOURGMDAwQkZFODM3QUY1REY4MURFMkE3NjNGM0E2RUZFMzk4MUI1QQorOjEwOUUwMDAwM0M3RkM5ODQ3RDcxMDgzQzgwN0RBMUY4QTA5Rjg1RjNDQgorOjEwOUUxMDAwNzMxRDQyOEYyQUI4ODM5RTg2RTc5OTFDMkFGMUIzOTM1QgorOjEwOUUyMDAwMURDMjdEOTdDNjJFMDNDM0JBOTU0OERDQjQwOUNBQjNEOAorOjEwOUUzMDAwNDVDQTA2Q0QwODM5MkQ0OUEwOUY4NTVFNzkyNUYxRTRGNAorOjEwOUU0MDAwOUQ0REU0RTc4N0ZBM0RGOTZGQUYwOEYxNzc1Q0YwOEYzRAorOjEwOUU1MDAwRkM5RDk3REM4RDk4MDdCQUFFREZFMzMzMkMzMTQ1RERFRQorOjEwOUU2MDAwQjhGRjAzODFCMDUzMkExMDVCMzhGMDZCNEIxNEZCMjIxMAorOjEwOUU3MDAwNDIwRjc3QTIxQzYxRkQzRkNFODVGOTdBNUYzODNGNjdCQworOjEwOUU4MDAwMENBNjAyRjVGODBGNjA0REY4QjAyOTQ1QjREMkM1MEMwOAorOjEwOUU5MDAwMEJFOEM1QkQ4OTdGNzhFNjY5RDA5Mzk2NzRCRTVFRUMwOQorOjEwOUVBMDAwMzdFMkRGREQ5Q0RGMDZGQ0FCQjdDNzkxOUU2MkRGQzIwNQorOjEwOUVCMDAwREIxMDBGMjI1RkExQTc1MzNFQzgwNzhCMEQ5MjMzRjEzMQorOjEwOUVDMDAwQkM2RkZGREYyMjMxNEZCQjM1NDY3RDFGRTlFMDNGMjBFRAorOjEwOUVEMDAwRDMzRTREOThEMjY3OEExRTIyMkU3QjEzRjU5RTg5RkJCNgorOjEwOUVFMDAwNEQ1NDZGREVDNkYzODExNkQ1QzkzMDBFMDhCM0RCMjc5QgorOjEwOUVGMDAwMDQ5RkIzNkIxN0ZBNkVENUZFNEY0Njk5ODAwRTE3MEM3MAorOjEwOUYwMDAwM0Q5MUQ5MzA3RkNEQUUxRDkxRThDNkRGNkI3NDdGOEE1RAorOjEwOUYxMDAwN0NCN0YyQzQwNzA1NzYzQUNGQjY3MTE0OUQwM0YwOEQ3NQorOjEwOUYyMDAwQTZCQTgzRjEwQUYzMjhCOTgzRTFBOERCOTA0QkM2QjgzRgorOjEwOUYzMDAwNzYwMzI1RTNEOUY4RjZCQzg3NTAxRkQ1RjlGODNBNzFCNgorOjEwOUY0MDAwNkUyQ0ZDQ0I2QzYzRDRCRkQ4RDYxODgzRjNENUZEQjY4QQorOjEwOUY1MDAwMjMxOUU1Njc3MzNDOEYxMzVGQkYzQThFM0ZBRjMwMDUxRgorOjEwOUY2MDAwQzc3Rjk5MTgyREY4RDk2QkMwMzg2M0IzODg0RjJFNUUyMAorOjEwOUY3MDAwMzVEMDM4RURGREUzREI4QTY0M0JGMDQzQjZBRjc5MkY5MworOjEwOUY4MDAwQzU0M0VENjYxNUU5MUFGNjBBRTM3ODY4MEYyMzM5QUY4MQorOjEwOUY5MDAwRUI5Q0MxMzA5RkRGMUZDRDFDMTJEQ0RGMUFFRUZGMDNFQworOjEwOUZBMDAwOUQzM0VCMzBBQjk4MUYwREIzMzdCMzE4OTg3RkFCRDgwOAorOjEwOUZCMDAwMEZDRDA0OEVDMkYzNEFEQTc1RUQ3RDYxRUQzRkM1NThEMQorOjEwOUZDMDAwMDJGOTgxRjJCNDYxNEEzM0JCQ0QxNjhDRTcwOEMyNzM0MworOjEwOUZEMDAwM0NGMjUzM0NCRUM3NjdDMEZDODhGRjE2QzY1RTI2Qjg3RAorOjEwOUZFMDAwMDI3MDMyN0FBRjA2NjcyNkY5NzM1QjRERkVCMzc4N0U1NgorOjEwOUZGMDAwMDVFMEIyMjNGRDMzMTk4NzkzQjU4RjU1MzFCRTBGQjNGQQorOjEwQTAwMDAwM0I2OTFENjE3NkQ1RTE5MTA2QzM1NTk3QzNCQzY4QkYxNgorOjEwQTAxMDAwN0ZCQzk2MERDODJCQ0E2RjVENzhBMDZGMDExOUQ4M0EyNgorOjEwQTAyMDAwOUEwOUY5QjYzRjVCM0EyREI4MEY4QTY0NzJFMEY5NzE2QworOjEwQTAzMDAwMUI2MjlFNkQxQTQ5NzE4MzQ3QzYzODE2REE4ODE4NUMxMAorOjEwQTA0MDAwQTdDQUNGM0I2MzZBMjg5N0UzMDFGN0M1QUQxNjdFN0ZBOQorOjEwQTA1MDAwNjAzQ0YwQjcwREZCMzYzRUNFMTE2NUI3Q0U5NDQ4NEU0RQorOjEwQTA2MDAwMjhBRjU3MkJFNEZEMzFDOTc3RjY3NjkwRDNCRkY4RjZDOQorOjEwQTA3MDAwRTZBODAwNEJDREJCN0I4ODRGNTcxQURBNUYxQzBGRjc2MQorOjEwQTA4MDAwMzc1QURDRjk0OTgwQ0ZCNzRFMUFFODFDRTk5RjVFMEJCRQorOjEwQTA5MDAwRjM1NjYyRkNCODdCNjM4MjczMDhGOUQwQ0ZGRkMzRTM0OQorOjEwQTBBMDAwNkI5RjRGNDFGQUVGOTY1NENDOUJGNjFCRkRBMzEwREUzRAorOjEwQTBCMDAwREFGNkNGNEQ1NDhGRDA3NjhBRUE5MzhFMjRCOTlERjg4NAorOjEwQTBDMDAwOUVDOTZEMERCNDZGM0M4NTM1RDNCRTcxOTYzODdGREQ2QQorOjEwQTBEMDAwOTJDNEY1QzdFNTYzNjM1RTZFMDhDMkZGODM0OURDMEY3NworOjEwQTBFMDAwNjM3RUY3Q0QyODM3RUQ0MjNFM0JEMTJGODE3Njk3RjA0NgorOjEwQTBGMDAwOEY3Njc1REQ5REE2MDZFNUZEMUFEOERFMTRDNEY3NUFFNQorOjEwQTEwMDAwRjYzNkI1REFGNTdFMkYzRkNGOThGNTkxRTUzRTY3MTAyQworOjEwQTExMDAwRkZCOTkzQjg5RkU3MTZFRkYzMjdCOTE3MjRBMURDNzZCMAorOjEwQTEyMDAwOUQzNjQ1QUE3ODVFQTU2NTE0REE5MTE2RjA5RkVDNDMzQQorOjEwQTEzMDAwRTA2NTQwNkU3NTcyNTRBN0Y4NEQzOEJFRUUxQzNGNzc0RgorOjEwQTE0MDAwMEE3NDZFQzJGQUZGQ0QxRkI1OEQ1QjAyRDc3NzAxQUVFMAorOjEwQTE1MDAwQjFERUQzNzNDMjRDNzU4RkJCOENBRTE0MUNERkYwRTE0MworOjEwQTE2MDAwNTczOUE4QjcyQTEwNjlGMEJGQUYzQTU2REU4Qzc4MDM4QQorOjEwQTE3MDAwQkUyRjBFNDdGOURBQ0U0ODhGNjlGMjk5OERGMjA5Q0ZEQQorOjEwQTE4MDAwNjcyM0RGRTc2MzNGOTNGNEYwNTY1MzJGM0ZGN0I5OEIxNAorOjEwQTE5MDAwOUZGQjA0QkUyNzM5MDBCRUI3QTM5RjkwNkQwNzM5QTA2RgorOjEwQTFBMDAwRTdDNzkyN0M2RkVEMzVEMEY5NTQwRkU4RjE1QkE4NUZGQgorOjEwQTFCMDAwNUM4NUZEQURCREE1NzY5MjZGQ0NDM0U3QTI5Q0ZBRjY5NworOjEwQTFDMDAwRDIzQzJEMTA4MzIwRTkyNEU2MEFGNjFGREIxMzIzODlGNQorOjEwQTFEMDAwOEYzNUZENzgzMDkxRUJGRjk2MEMzNTBBRUJGRkFEQjI3MQorOjEwQTFFMDAwMUMyMjE3NDE3NjkwRjc4NTlERUNERDUwRkNFQzBCRDNEQgorOjEwQTFGMDAwRDBERTA5QkIyMEZDMjc3NjlDRUJGOTQ3ODVBRDVBRjNFRQorOjEwQTIwMDAwNEVFMUVDMkRCMENFMzU4N0U1ODE3QTZFRjQ1NzdEODIzNAorOjEwQTIxMDAwNEZGNjBBRkYxNUVEODQ5QUM3RUI2N0YwRkFDNDBEQkM0MAorOjEwQTIyMDAwQ0VCNUMwQjlCQTA0Q0IzODI2NTczNEVGQzNCNkQwRDVCMworOjEwQTIzMDAwNTI4MjY3OEVBNzJERUNEREM3Q0YxRUYzRjNFM0FEN0IxMworOjEwQTI0MDAwRUZDOEMyN0RFQUZFMTM2Njg2RkIyNEFEN0ZGM0ZGRTExMworOjEwQTI1MDAwNzVDMEMzNzczQjAxRkY0M0Q4MjU1ODBFRjExRjU4RUE1QworOjEwQTI2MDAwMTQ5NjM0Rjg3RUJGQTRFOThGRjk5NTI4NkYxNzVCRTU0MworOjEwQTI3MDAwNDAxRkVDNjEyRDMwMzhGNjdGOUQ1NEY1QUMwNzAwNEI0NAorOjEwQTI4MDAwMUJFMTdDMUQ1OUEyMzBEOTRENkRGRjkxQkYyNUEwMkQzQQorOjEwQTI5MDAwRDg3NThDRkI0REFEMjY2NzE2RjI0RkVCRThEMEYzRkE3QworOjEwQTJBMDAwNUFGQjYyMTIzRkU3OUM2RjY2NDNFNjI1MEYwOUJCMzdGNgorOjEwQTJCMDAwQzZDMzlFNDEzRUFBNkQ5NUVENUVBMEZCODU1NkQ5Njk0OQorOjEwQTJDMDAwMDJGRkU2QUNEMzlEODA2NzY1Q0UzMUNGODJBOTY4RTdGNworOjEwQTJEMDAwNDVEQ0E4N0Q0RjY1MTlGQTI3NjBBNzFFN0M2MTUwMUVEQQorOjEwQTJFMDAwREY4MDdDRjQ1MEJCQzQ3RTA2NkI1RUZFRDJEMEZCMEFERQorOjEwQTJGMDAwMzU2MjlFODdEQjM2RUU0RjAxM0FBRTc4MjU3NDVDOEQ3MQorOjEwQTMwMDAwQTgxM0FCRDFGOTJGODc5MjQ0N0M5OEM2RDJEMDJGMDFFNQorOjEwQTMxMDAwRkUyMUJENjA1NDU4QjcxOUY4RjVDMTY0NzcwN0M2MUIxNAorOjEwQTMyMDAwOUJDNTc3MEM0MDdGOTIxQzc2MDhCRURDMkFFQTA0RkNCMQorOjEwQTMzMDAwNUIyNURBRDdDQjdDRDUyQjFCRTBGOTQyQzUyQkEzOUQzRgorOjEwQTM0MDAwNjJEMEUyM0VDMTY0QTdCQjFDRjEwQkVCM0U4NkZCMzUzRAorOjEwQTM1MDAwQ0I4NTFFNUNBRUY5NjU1RUJFOUYwMUU2OTZGQ0IyMjkxOAorOjEwQTM2MDAwQ0NEQjE4ODlFQjdFNTU3MkY4NTRGQzhFQzhBMDNBNUNBMQorOjEwQTM3MDAwNUE3NzlENTg3N0NEODYyM0ZCMzE4QzVCRDUxMjNBQUU0OAorOjEwQTM4MDAwNEVBQ0JCNEVCNzZFNkQ1RkZCQ0Y0OUJBNzNDODM3QjhFMgorOjEwQTM5MDAwNkZGMTY3MjNGNzEzM0UxMEYzNjhGN0NEMjNCODNFQUM5NworOjEwQTNBMDAwMDVGMDkwNkUzNTVFRDlFQkU1N0U5RDBEQkZDMzczQkZBMgorOjEwQTNCMDAwODBGNzdFNDFFRjNBRTYzM0E1QzBCODU1MkZGMDc1QjI2RAorOjEwQTNDMDAwNjc0M0VCM0YxRjZDN0RDNDg0RjE5NTlFMkY5NjZGMzFFMAorOjEwQTNEMDAwOTIzRjBBODgzM0ExQkZBOEU3OEIxNTYyREQyQjc0RUI4RgorOjEwQTNFMDAwQUU3NTRCM0FCOEI4OUYzQzE4QUU5NjA1NDhENzU1NUI0QQorOjEwQTNGMDAwOEMwQ0VCMTFGNTcwMkQ2QjU5NTI4RTdDMzY5ODVGMzlCMQorOjEwQTQwMDAwNUQ1Njg4RjkwMjcwQUVBNjczN0MzNzBBRTdBODExODIwMAorOjEwQTQxMDAwMkZDN0IxNzE0NDk3OEFEODFCQTI4QkRFOEZEREJFN0YxOAorOjEwQTQyMDAwOUMxNUU1RkI3MkY3Njg4QURGMzVCQUVCOUYyRjE3N0UyNAorOjEwQTQzMDAwRjA4QzBEOENEQTBCNkQyNUQ2RjExOEE3RjQxODFDOTI1MAorOjEwQTQ0MDAwNEFGMTU2RTQ3OEMwNDc1RTg3Q0MyQUExREZERjlFQjY4QQorOjEwQTQ1MDAwREUwMzc4Q0YzRDlDNUY4NUYxN0NERTYxMDM5RDc3REI3OQorOjEwQTQ2MDAwRDk5RDRGRkJDMDc5MDdEMjYzRDMyODFGRURBMEVGQ0Q1NAorOjEwQTQ3MDAwQzAzQzY0M0ZGQjdCNzJEN0UzQjk4MEZFOUVEMjdDOUNEQworOjEwQTQ4MDAwNTc4MjcxNjhFNzczODUxRDY4RThDOUI1MDY5RkVGMkU4RQorOjEwQTQ5MDAwMThDMUUzRjVBNzkyM0VGQjMxRkFFMTMzQjYxQkU5N0MyNAorOjEwQTRBMDAwQzMwQ0EzRkYzREFDOUZEQUQ5QUREMEJFNzVDREUxQTVGRAorOjEwQTRCMDAwNkJDMzkwQUVBRjQ5QjQ2RkJEQkY3NzREREM2MkU0QUIwOAorOjEwQTRDMDAwNzZBMzFERjdBMUZCREJGRjZEMkZERUY3NkM5MUU4N0IxOAorOjEwQTREMDAwMTI3NTFENjU1OTVCQTE5RkJCMzFDRjExN0NERTJCMzdGNworOjEwQTRFMDAwNUEyNUY4RDgwODJCQzVDMzMzNkUzMjkyNUQzQzlGNkM1OQorOjEwQTRGMDAwRkQyNUZBMzcyQjlDMUI0OThFQ0ZFRkQ5NjlBMkZBQjlGQgorOjEwQTUwMDAwQUQxMjQzRDNCRjNGNjlERjFCODg4RkYzNkYxRTMxQTFBQworOjEwQTUxMDAwOTM1REQyN0FDNEQ0Rjc3N0VDRkQwNTJGMDRGRTE0MDdCRgorOjEwQTUyMDAwMzc5QjMwNEU1OUI1NTFFQkY3OTk5MDRFMkVFMUZGRDQ0MQorOjEwQTUzMDAwQkU3MjhBRkEyQkRBMjREMjMzMkI1RTkyRTkzQ0ZCQkU0MAorOjEwQTU0MDAwOEVCNzRDQzhDN0I1NUIyNDk2OTgxQTc0N0Y4MzE0RjJGMworOjEwQTU1MDAwMUQ4NEE1OENGM0MxNTJBMTY3NTYzMkVGNTNDOTMwNkVFQQorOjEwQTU2MDAwNjUzM0FGMjM2MDRGODdENkU1QUVEQzMyODdCRURCQjQwMAorOjEwQTU3MDAwQUM3OTY4N0RGM0IwRTBFQjg3MzAxRUJDMTVCRjgzMTQ2NworOjEwQTU4MDAwM0FFRTYxRURCQjVDM0E3RTdFNUNFM0U3NEM5Njg5RkM3QgorOjEwQTU5MDAwRkM1NTkxMUE5NTBERDdCRjNBQjJFMkU2QTFDRUIxRjdCQworOjEwQTVBMDAwMDgzQkFDRDlDMUNCM0UwM0Q5MTFGREI4OEI2RDU3MDgyMAorOjEwQTVCMDAwREVCQTlFQ0IyNkI0ODNFNUVEOTcwOEVGOTVFRDVENTRBQQorOjEwQTVDMDAwQzc3MTE3NzNENzIwOUVFRTZBQjdEQTUxOEUyQkZCQjg4RQorOjEwQTVEMDAwNUU5QUQ5NkVGNjdBMjVCQ0RGRDI4NEY0RUNFRkU0NzU4RQorOjEwQTVFMDAwOEI5RTNEMTJGOTJGOUFCRTdBNDhFMEVGMjE4MUJGODdGQQorOjEwQTVGMDAwNDA0MUE3RTRBMjFGQ0JFM0RFODczMzM2RUU4RjgxRkIxOQorOjEwQTYwMDAwQjVFMjdBQ0Q4MTdEOTFFOEVGQ0Q2NDk3RUU0NTdBQzBEMQorOjEwQTYxMDAwN0IxOEJFODdCRDE0OEFFNzNCMTk4N0UzQ0UyREJDREVDRAorOjEwQTYyMDAwNTk2RkFGRkE0NzY0Q0RBNkZDMjNDNDlEMDg0RkNEOTY2MQorOjEwQTYzMDAwNTAzQ0Q3RUFFMkVENzUyM0I4N0RERUE0QzM3M0E1OUYzNQorOjEwQTY0MDAwNTlCMzExMEU1NTc2Nzg2OTc0QUY4MkVGRURDRTkxMjgyQgorOjEwQTY1MDAwQkZEQUFEQTY0NTBEQjVGRkE4QjVFRjA5QkY1OUVCQ0ZFMQorOjEwQTY2MDAwMTZFN0FCNUJFQ0NEQjZFMDM4RDg5NENDRURGRjhBMjk4OQorOjEwQTY3MDAwQjIwN0U5MzQxMDNGQTRFRkNCNTEwRDgxRjgwMUUyODYxNworOjEwQTY4MDAwREY4Qzg4RTc3MTA0MTY3NEJDM0I1MjY2NzE3MTgxRjhFNworOjEwQTY5MDAwRTE4NzQ5RUIyQjczQTE1RkI3ODVDQkY5QzVDOTMwMUZBMworOjEwQTZBMDAwN0VERjRCNjFFNDVGRDY2RDMxRDMzOUMwM0FBMDNCQzU0NAorOjEwQTZCMDAwMDlFREZDMUM4M0FCNUQyQTQzN0E4M0ZGRkRFRTg4ODk5QworOjEwQTZDMDAwNzhBRTg2MTlFMzYwREQ3M0RBMzg5RkNGMjlCRDQ0N0MwQworOjEwQTZEMDAwNzIyMDlEQUZGN0IyQTIyNjBFRTU4RjZCN0UzODlFQzMyNworOjEwQTZFMDAwNTI4M0NGM0Y4MDVDRTJGOERBNzY1RTBGRDRCQUY3RUJBNAorOjEwQTZGMDAwNTFBOUE4RDczQUZFM0E2QTA5QjQ1NzQ2RjBGNTZCN0VERAorOjEwQTcwMDAwOUUxRkZDQkNEMURDQ0YzOTg2RkVFNzgzOUFEQ0Q4RjlFQQorOjEwQTcxMDAwM0VEQTgzQzJDRTMwQTk4OUY4QkJENkQ4RjI3NjBDRkFERAorOjEwQTcyMDAwNEQ1QkY5QkUzRERCNkRDNDZGOUNCMTg2MEY1RTZGOEFEOQorOjEwQTczMDAwODE3NTVGN0M1REEyN0EzNDdDRkUwOUUwQjM4QjRCNUI1NAorOjEwQTc0MDAwNEVBMzFGRkRENTU2MEJGOThGMEY4MjhGMzgzRDc3QjA4MgorOjEwQTc1MDAwM0M2QTcyQUI3RDc3QUE4MUFEMjU3RjcyMkQ2QkEyNzZBNAorOjEwQTc2MDAwOTVFMEUzOEI2RDhEMjZDQTlCNzk4MzlFMUYzREQ4RUZDNAorOjEwQTc3MDAwNThBNUUzM0I1MzcyMjhCRjM1N0MxMDRFRkU1RkZGMDFBNgorOjEwQTc4MDAwRDk4RUZCMjc4MEE3RkY0RTBFQzY4N0YwMkY1QUY3ODY3QgorOjEwQTc5MDAwMTEzREZCOEZEOEM4NUVGQzQ5RjBEOTc5OTEzNzZFOTg4RQorOjEwQTdBMDAwMkNEM0ZBMEQ1Mzc4OUJENUY5RDY2OEE0MUZFMjFCRUI4NgorOjEwQTdCMDAwREUzNzc3QkUzNThFOUZBN0Y2MTJERTU3QkU4QTQ5RjE4NworOjEwQTdDMDAwMjAzODVCQUM5NERCRDNGQTBEMUYyQ0EyRUZGMEQ0RUQ1NAorOjEwQTdEMDAwMTk4MDZCOEMyOTJFMDBENzcwRkMyRjQ5M0MxRTM0NDgwMQorOjEwQTdFMDAwQTFGMTYwREQ2RUQ5MTU1Q0VGMDVFQkI5MEZGNTRGOTI2NQorOjEwQTdGMDAwOTAwM0E2RjgxM0QwMkYxOTk5QUM5MkZENkE2OEU3RjQ3QworOjEwQTgwMDAwMzQ3NEYwMTZERUJGODBFNzNCOENGNEZFNDFGNzhCM0RERAorOjEwQTgxMDAwMzU3OEZGQUI1NDJCREY0RkJFRUFBOUM0RkU3NzQ3Q0I5OAorOjEwQTgyMDAwNTQ0RkY5REQwRjU2OEMwREQ2OUIwQ0UxMDQ3QUQ2MTlFNgorOjEwQTgzMDAwRkQwOTE0MzcxRTMxMTA3Qzc1NDcyRTI3QTREQjUwMUZFRAorOjEwQTg0MDAwNkQyQ0I1NjdBM0RFRTFGQTZFRkY2OEVCNzJFNDYzMEY2RgorOjEwQTg1MDAwQkUzNzMxMzBDRjZCQzJERTMyNUM2RjEyN0ExNTJGRjAwQgorOjEwQTg2MDAwNzlDNTdBRDdCMkI5MjIzRUU2N0M5NDJERkMzRDg4MkI3RgorOjEwQTg3MDAwMjYyNjRGMUMxQzU3RENBODNGMDlGNkUwRTg2MjA5RUJDRQorOjEwQTg4MDAwODkxNDBGQzZCNTNCOEY3MzdERDBEMEYxRDBBN0M4RTczMAorOjEwQTg5MDAwNzU5Rjk4QTlCRUVBQkI5RDBGOERBNTNBNUJCN0ZCNTY4NQorOjEwQThBMDAwRjQyQkJFRUE3Q0Y4NTZDQUYzNDk2QjA5MkUwRkMyOTcwNworOjEwQThCMDAwODRGRUNCODcwOTU4MEZCQUFBRTNDMzA0QjJBRkJCMjYwNAorOjEwQThDMDAwQUVGNzQ0QTA5RjkyN0IyNzVFMDdCRjgxRjgwRkZDMTc2RAorOjEwQThEMDAwRTJCRjlEM0RGOTlBQkY2MkM1Nzk1NzFENTA1Qzg4OUZDNAorOjEwQThFMDAwNTUwN0YyMEY1NUEyMUY3MUI4MzgxRkQ1Qjg3NDM4OUY5RAorOjEwQThGMDAwRkM5NTNDRjQ1NzZDMDFGRjQ1NUI0RjY1MzJBRjc3RTkzRgorOjEwQTkwMDAwRUYwQUEzM0M4MUM0NDY3M0ZFNjFFOTIxRkM1M0QzRkFFQworOjEwQTkxMDAwMEVEOUY1OUEzNjM5QTQ2RTUwN0JDRTlEQUNGMDdEN0U3MworOjEwQTkyMDAwOEQ3RjVBMjQyN0YxQzc3NkRFRDZCNEVEQTRGNUFEMzQ3OQorOjEwQTkzMDAwQjYxMEJEMUJCNjE4RjlGREFEQkNENUVBQUEzRDJDQzZCNAorOjEwQTk0MDAwODNGODM4ODQ5NzgwMEUzMzRENUVGQTZFQzVDMTU0RUU5RAorOjEwQTk1MDAwQkZFQkU5RjE1OTMyQ0Y2MzFDM0NFMUJFMTlGOUU1NjA2OAorOjEwQTk2MDAwOTE3QkFDN0QwOEZCRTA2MUM1M0MzRTk1MDRCRTVCRjk4NAorOjEwQTk3MDAwNzkyNUZEQjg1M0M5M0M4RThGOEMwRDNEM0YzQTYwNUYwMQorOjEwQTk4MDAwOTIzOUZGQ0MzNDBERkQzREJEOUY2OUYyQzREODMzMDYyQQorOjEwQTk5MDAwRTA4QkEzOTU0NkZCM0FFMUI3OEYwOEZBNUU0MkQ1NUQ5RQorOjEwQTlBMDAwNDZGMjBGOEUzMkZCM0I1ODY3Mzg0QkQzQUY5M0I5NURGRAorOjEwQTlCMDAwRDVGMkREQUUwRDJBREZENzE5N0NBRTkxRjRFNDdDNkRDMworOjEwQTlDMDAwM0VGRDc5NjlFMUQ3Q0NEN0Y5MzVFQjM1RkQzNzg2OEQ3QQorOjEwQTlEMDAwNDFGREQ3MjJDRUI5QURDOTBDRjMwNkU3QTNGNEVEN0U1NQorOjEwQTlFMDAwQjE4RjgxRTc3NUIwNkRDOEZDOThGMjM2MDdCQjRFQkNERAorOjEwQTlGMDAwNDE3NTY2MjdDMkQ4Njg5RTk3QTNGQ0Y1QUE2MUYyRDc3NQorOjEwQUEwMDAwMEQwM0YyMzgyRjg0QkYzNDdBNUMxMERGNTVEMUQzRTNDNQorOjEwQUExMDAwMEQ4MTc3NkQ5RjJENUNFQ0IzOUQ1NkRDNkYyNDUzNURFQgorOjEwQUEyMDAwRDY3OTEzRkY4RTlBOUZFMkFCODY0Q0VFMUY1RDI4OTM3QQorOjEwQUEzMDAwNjg1RjFDRTAxQzY1MEVEMkVCMTc0NkYwQjhFQUJCMEI1MgorOjEwQUE0MDAwMjRDQTlCNzZFMTc4OEM5RjVBMjRBQUFCNUVFNUVCMzU0RAorOjEwQUE1MDAwMjExRjhENjk1REYyMjRDOUFCODcxRDYzNDFERkE5OTg3MQorOjEwQUE2MDAwNkRFMTc2NzE4MDZFREFCQTA3RUM1NjhDODdFQkUxMzhDRgorOjEwQUE3MDAwNkE3MTNDREFDMTU5QzJFRUU5Q0YyMThENjVCREU1MTg5NgorOjEwQUE4MDAwNTc1NjNCMjUwN0VFREJFQkU5M0Q3N0UxODQ3N0UyRkZBNAorOjEwQUE5MDAwMDEzQTlGNEI3NjFGMjFGREQ2N0I3OTAxRTYzRjBGNjY3OQorOjEwQUFBMDAwN0UzRTBBRUQ2NUVEMzA3Q0ZCM0JDMUI3REFGNzU5MUMwMQorOjEwQUFCMDAwNjNENTQ2RkMzRUM5OEYxMkREOUYyMDdFRkIwRERGNDYyRAorOjEwQUFDMDAwOEU2M0Y4N0NERjdGQUY5MTkwMkU4Q0U4MzE5QzlDOUM0QworOjEwQUFEMDAwMTJGMzlENEExNkRGMjU4Q0UzRkIyNENCQjE4RkYyNkE3QgorOjEwQUFFMDAwRjQ4RUE0RkM0MkY2OERFRDRCMzVFQzdFMzcwN0Y1RDY5RgorOjEwQUFGMDAwQzVBRTAzMzlBNjIwM0E5RTVGMDNGMjhFRjZBMzYzNUZDQworOjEwQUIwMDAwODI2QTBCRTYzMzAzRjE5NzI0NjlGQ0E2MDhCQjE4Q0FENgorOjEwQUIxMDAwNzdFNzkxRUZCMkIxRkQzMDMyMURGNUVFRjZBMzkxQjdCNAorOjEwQUIyMDAwRTA3Q0JCNzgzQkMwOUZFRDMyOEQ4Mzc4NjdDQ0ZDODg5RQorOjEwQUIzMDAwNjBGODlFMjRGODJFQjRGMDc5MThFQjFCNTMzNTNFRjhEQworOjEwQUI0MDAwN0VFMzcwN0M2QjRDRTFGNTg0MjE3Q0FCQURCNzA1QkYzNworOjEwQUI1MDAwODc4M0ZFN0RBNzk5QkU4NzgzRjlFNkU4MjBCOTQ4NEQzMworOjEwQUI2MDAwRTFGMjMwNDk3Q0ZGNjYwQUYzRDBGNzAwMjc4OUVGRTA3NQorOjEwQUI3MDAwNEM1MTk4NEY4OUMxN0QyRTlGQ0NGNzY1Rjk3OTg2MDI5QgorOjEwQUI4MDAwQzFCRjkzMTQ1RjE3RDYzOTRDMTFGQjMyODVBQzk3QzYwMQorOjEwQUI5MDAwNEQ2NzdFNkE5RENDNEVFNzE0OEE5OTgzREFDOTE2REYyOQorOjEwQUJBMDAwOUQ5ODc2Qzk2RTY5QTFGQTNGNUY4MjEyN0RENjIyQ0U0QQorOjEwQUJCMDAwNDMwQzQxQjdDMEZBMTVGQUVFMERGMUE1OENFNzYxODY5QQorOjEwQUJDMDAwRkU2RTRBNjUwQTk3NzNGQTM4MDdEMkY3MDJBM0ZDMTQ5RgorOjEwQUJEMDAwN0VERjBDNUYzMjU1NjExNTU4Nzc3NDlCQzIyQ0UxMDAwMworOjEwQUJFMDAwRUZGNkI3MEQyNEJGOUQ3REFBMTdFQjQwMURCMUUyQjk2QQorOjEwQUJGMDAwMkYxOEQ1QkI0RTcyNzJGOTQ0RDM4Mjc1MTJEQTdBRjVFQQorOjEwQUMwMDAwNzgyODg0RjkzMDNGMzY0OTgxQzg5MkYwRThBM0Y3REQwRgorOjEwQUMxMDAwQ0VGODM5OEQyMkE2RDIwNzU2NkVDNzhGMjc5MzVFRjdERQorOjEwQUMyMDAwNTM5QzU0MDI3MTEyRUE3NTgzQzU0M0Y4MjhDM0U0Q0FFMQorOjEwQUMzMDAwNDRCRUJGMTEwOUYzMTQzNjRCRUMzOEVFNTdBNEYxRjVCRQorOjEwQUM0MDAwNkFGMzE3MDIyM0UwQjlCRDMyQjE1RTRDODExRThGRTE3OQorOjEwQUM1MDAwRkIxRTkxNTQzODVDNkFFN0RGMDk0QUEwRUYwNEREMjg0NworOjEwQUM2MDAwNUVGQjEzRjg3NzIxMjNFRkY3NUZGQzdFN0U2MEZGQzc2MgorOjEwQUM3MDAwODFERjBEOEEwQzdDOEZEMjgxRTc0QzMwN0ZFNzUzQ0U4OQorOjEwQUM4MDAwMDdGQkNENzdBNzJDQUQ0RTk5MThBODk3NjM2RUE2QTJBNworOjEwQUM5MDAwNUZBMUFGOTc0M0Y0OUQwQjNBREZBQ0Q1N0JCQ0VBOUQzNworOjEwQUNBMDAwQUJFMkI5Qjk4NTcxMTYzQTRGOUI2QjE5OTU4Nzc2MkIzNAorOjEwQUNCMDAwMjNEMTVEOUQ0Mjc1MUY1QjZFQTE0OTE0RUY0NDU3NDQzQgorOjEwQUNDMDAwODBDRkFEQ0MzOTE5RjExQ0E4RDdFM0RGNEYxQTM4Q0ZBQworOjEwQUNEMDAwOTRDMEU4RkM5RkQ1Q0NFQjE5OUYwMUI5QzBFRjE3ODE1OAorOjEwQUNFMDAwNTRBOTU4RDdDMjlFMjhBMUZBQzdBN0EyMkQwRTNDODcwNworOjEwQUNGMDAwNjA0Njc4QUQwMTc4MUIyREEyRUU0NzU3NzdEOTY4MzNBRgorOjEwQUQwMDAwRDBGNzM4MUI1OTM4OURFNzlFMTVFNkZFMUVBRUZGQjEwMQorOjEwQUQxMDAwODg2MjNBMkY5REI1NkQ1QTEyRjk4M0IwREU2OURBN0FFRQorOjEwQUQyMDAwMEQ4M0VCMTBCMUZFMEY5RkQzRDdGRjY5RUJDMkUzRUJBRQorOjEwQUQzMDAwRjg1RUJCQzA5N0I2NEVCQjc2REVDN0E5ODQ5Q0Y3RDE0MAorOjEwQUQ0MDAwRDZGRjRDMzg1RkE3MTE3N0UyRDNFODU5MTVGNTgzN0UxQgorOjEwQUQ1MDAwN0QxQTNGRkMzRkRERkIzNTZENjA1QzAwMDAwMDAwMDBBQworOjEwQUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAzMQorOjEwQUQ3MDAwMDAwQkJCMjZDQkMwRjBBMzFFODE1OTY0MTgxODI2RjEyNgorOjEwQUQ4MDAwQTE4QUQxMTJDRkUwNjY2MDc4MDRDNDJDM0MwQzBDODVGQgorOjEwQUQ5MDAwNDA3QjIzODA3NDI0MTAxRjAxRTJBMzQwQUNDMkNCQzBDRgorOjEwQURBMDAwMTAwQkM0NzE0MDNDMDdDODlGMEJDNEE1NDA5QzA1NzU5RgorOjEwQURCMDAwNjMyQjBCMDM0MzNCMTA3NzAyNzEzNzEwRUIzMDMzMzBCQQorOjEwQURDMDAwRTgzMjEzNkY3RkIxMDgwM0MzMTMwOTA0NUY1MTEyNjg5RgorOjEwQUREMDAwQTczNEZERkMzRkQ4RjAwQzdERkFEQUM3NkRDMEMwQjBENworOjEwQURFMDAwRDQwMkMxMTcwM0IyOTc1OUEwQUE1OTZFODFERjhDMTVGRQorOjEwQURGMDAwNjhGMjJCRDFGOEFCRjBFOERGQTc4N0NBRDdEMzQwNzM0RQorOjEwQUUwMDAwOUYxNjAzODMxNTUyOThFODZCRTA3NzBCM0FDRTA0RUE1RAorOjEwQUUxMDAwQ0QwMjYyMDA5RjMwOTBDRDY4MDMwMDAwMDAwMDAwMDA2QQorOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA3MAorOjEwQUUzMDAwMDAwQkU1N0QwQjc4NTRENUI1RjAzRTczMUVGM0M4Q0NGRQorOjEwQUU0MDAwNjQxMjQyMDgxMEMyMDkyRkEzMEQzODIxMjEwNThBRUQ5MgorOjEwQUU1MDAwMTAyMEEyNDU4RDhGMkE1NEQ0MDk4RjI0RTQzNTAxMUY3OAorOjEwQUU2MDAwMTc2QkRCMEMwNDIzMjA2OEIwNThBMjQ2M0I0MTUwRjAxRQorOjEwQUU3MDAwMDYxRDY4OTAyMDAxMDdCMDFBN0E3RDA0QUZGNUQxRjY1RgorOjEwQUU4MDAwN0E4MzUyNDAwODI0RTIwQkJENkRGREY3NUE3QjlGQ0NCQworOjEwQUU5MDAwMzkyNzMzNDBGRkY2RkY2RkZGRkJDN0FGM0RFQzczRjY3QQorOjEwQUVBMDAwNjNFREY1REE2QkFEQkRGNjFFOTkwQzI0RDIwRjA4RjlFRgorOjEwQUVCMDAwMTZGRUU4NzNBNjQ0MDg3REQ1Rjc3NEJFNDI1NDkyNDg0NgorOjEwQUVDMDAwNDg3RDBFMkRBNzEwOTIzRThBODQ4ODQwNDg0MTBEMkQ2MgorOjEwQUVEMDAwRTcxMUYyRDA2RDI0NjRDRDI0NjRGRkVCMTZGQ0JFQ0FFQQorOjEwQUVFMDAwQ0ZDQUI0NUREODcyMzlGRDNFOUFCRDdGMkM4QkI2QTMxNAorOjEwQUVGMDAwRUYxRjNCMjc2MkJCRTAyQzEyREE0Q0NCNDk4NEY2MzZCRAorOjEwQUYwMDAwOTJEMDIxRkNGODJDRjAzNkQ4QzdEMkZBNERCNzU5ODgyOAorOjEwQUYxMDAwNTUyNUU0NTEzQTBDOTk0NDg4OEJGOEVDODQzNjVEMzUxQworOjEwQUYyMDAwOEFGNUY3QzgyQ0NCMzNBMjAwMUYyMzY5RjM2OTc5RjVBMgorOjEwQUYzMDAwRjQ5MkZDRDVCNEI0NDY2NjcwMzVDRTI5NzkyNjQ4RkIyOAorOjEwQUY0MDAwRjc1ODQ2RTIzQzY4QkRDNzlDQjRERUMzRUY5NzkyRDU4NAorOjEwQUY1MDAwQjRERDg2QjkxNkExMjQ5QkQ2NkI1NjY2ODdCMkEzRjNERgorOjEwQUY2MDAwRDc5RTczODlDNERCMDVBRDk2ODlGMEY0RjE2NzQ0ODFGRgorOjEwQUY3MDAwRTcyRkE2NTg3MDlDQjUzNTBDMUZCNDlFNjI0OTIzQTREOAorOjEwQUY4MDAwQjVGMzgwQ0Q0RkZCNUI1QkQ5N0FCODkwN0U3RjcwOTQzMAorOjEwQUY5MDAwQzU0QjMxNDgxRUVDM0M2MEJGODQ4RTFGQ0NCMzc4NDc1NAorOjEwQUZBMDAwRDNEQUU5NTI0NEYwMzhBM0UzNEQyMjE0RjAwOUI0OUVGOQorOjEwQUZCMDAwNzc4NzRENzVGNkFGNEZGQjlEMEFGMzVFNDNGMTJFNjYyMgorOjEwQUZDMDAwNDZEQjhEMDczODY5QkJCNTk0NjQ2MTNBRUUyRjY1RUZCNworOjEwQUZEMDAwMjExOEY3OTdENzI0MEI0MTEyQUQ3NzE1MDAwOUY1RTYzNAorOjEwQUZFMDAwNUE0ODg0RDYyMzUyQUY4REQwNzE1NjRGNzlEQjM2OUFBQQorOjEwQUZGMDAwRDY1RjVENjQ4MTQ5OTBCNTVFRURCQkQ3NEVBMEJGMTlBOQorOjEwQjAwMDAwNjMwRThEMDJCQTVFNDVCRkMzM0NCMjFGOTkwREYzN0UzRAorOjEwQjAxMDAwNzhCQTQyMDBGRkJGMTQ2ODNEOEFFMkM2NjJFNTg3MDA0NQorOjEwQjAyMDAwOUZBQjg2NzhFMDNEN0RGQTYyRTFCNTREQjAyMTFDNjRBRQorOjEwQjAzMDAwQ0QwNjQyRjIwOTgwODA3RkFCN0RBMTk1MjM4MEJGRjJDRgorOjEwQjA0MDAwODgxN0NBRTk1RURBREVEOUJGN0Q5NzYwNDVCQTM0Q0E4RgorOjEwQjA1MDAwQzFDMTgwQkY3OEY0MUJDNUYxQjkzQTZCODkxREU4NDFDNQorOjEwQjA2MDAwNDg0MzVBRDE1ODQyRDYwMzlFNjA1MEM5QUY1RUVGOEExQQorOjEwQjA3MDAwRDY1RjI5MzBGQ0FDOTM4OTRGQTBGMzRCQzg1MzQyQ0IyOQorOjEwQjA4MDAwMjg5RTJERDk5RTM5MzA1RkE3NUYyMTU3RDJGMjJBMjEwMQorOjEwQjA5MDAwMzg1ODA0QkE4QzU1Qzg2NjE1RjlDMjNFOUE5NkQ3NUVFMAorOjEwQjBBMDAwOUFFQzA1RkVBQjE3QzI2OTEyN0NCRjg2N0VBNzVEMUVCNworOjEwQjBCMDAwMjgxQTNGMDdGOEIzQzlBQjIwM0Y1M0ZFMzkwNEY4NUVBNgorOjEwQjBDMDAwRUI0RjI2QUI1NUZDREU4OUVEOURBMzNDNTZDNDA0ODVCMQorOjEwQjBEMDAwODdFMjY1MDBFNTI1QzA2QkNFNzVGNTU3OEQwNEZBNEMwNworOjEwQjBFMDAwQjA3ODgwNDJBQjg1QTlFQTdDOTA5RjI0OUIwN0M2OTdFNQorOjEwQjBGMDAwMjdEQzgwRjQ5MzA3MjYwQjQ0NDdFRjlGMDNCRDI5OUU2RQorOjEwQjEwMDAwNkFENUEyOUZDM0JDOUVDOEZCMjg2OTM0QURCRjI2RTdBMQorOjEwQjExMDAwQzU0NkEwRDM5M0Y3RDg5MDdFNEY0RUU4NUMwQzcyRjVFRAorOjEwQjEyMDAwRDhCOURDRjdGRDI4OTc4QTc3MzNFREU3QTk5QzYzOTlCNgorOjEwQjEzMDAwODQwRUY4QzhDQzhGOTIwMDdGQzM0NjM1REM0OURDRjQxRQorOjEwQjE0MDAwMzlBQkI3OTY4Q0EzRjA5MTg2QTIwNTk5QzgyN0MyOEQxQQorOjEwQjE1MDAwMTRBRkMzOTYyQTQ0QjUzMTVBN0U0QkUwM0JGMTg1QjMxOAorOjEwQjE2MDAwNTlEOTQ5RTczMzhDRDNCOUI1RjM2RDVCMzFGNDM3OTdDRgorOjEwQjE3MDAwNDRDNkI4RjFCRDJEMzUzOUFBNjc4NkU1OTE0ODJBRUQ1OAorOjEwQjE4MDAwRkZCMTg1QUZBMjlDM0Y3OTU5QUE5N0M5NzkxQUYyNEJCMgorOjEwQjE5MDAwMDZFRjI3MURFQTUzRkQ5MjY2MjNDMTA0RkExQ0Q2RDE5RgorOjEwQjFBMDAwN0IwM0MwMzUyQ0VCRDg1QzgwNzNGRjFCQUYwQTQwQjcyNAorOjEwQjFCMDAwQTdDNkE1QUFBMDhGOTJGQzlEQTQ4QkQyN0Q1OEY2QkJGMgorOjEwQjFDMDAwRjc0MTNEOTczMzk0NTY5NDhERjVGRjgyRUQ0Q0YwM0Y1NworOjEwQjFEMDAwQTlGQTM2MDFERUI2MDkzNTg3ODAzRUMxMUM4Qjk3RDFBRQorOjEwQjFFMDAwOUJFOUMxMzU3N0E1ODY0MDhGMEM3M0ZDRjE3QTcxMDQxOQorOjEwQjFGMDAwRjIwMTIxQTkxNDNFMEY0MTM5QTkxNzIyQjY5MUQwRUVEMAorOjEwQjIwMDAwNUVENjZFMzgwOTA5ODBFNzYxNTlDMUM1QTIxQkVBRkIwOQorOjEwQjIxMDAwODUyMjU3RkY3MTVCNDEyMzgyN0M1MDRFMDc3RUREQUU1NQorOjEwQjIyMDAwOTBGMkEyMTg3MkYwMzI5N0U3N0E4MUNDNDY3RTI2RDI0RAorOjEwQjIzMDAwNUY4MTZGODYyNzMxQkVEMUNBNEYwMTNDNzREQ0VEQUYxMAorOjEwQjI0MDAwMjRGRjMwOUJDMkYzQUJBNTIzNzI0NDBBQ0Y0M0QwMkUxOAorOjEwQjI1MDAwODZEQ0FDRTU3MkUwRTgyMDQxODFFMjc1RkY2RjdGNkIzMAorOjEwQjI2MDAwMDdCQzZEQjc5MDMyQTgzRjM1MkI2Q0VCRTI3NDA1N0FDMgorOjEwQjI3MDAwMkMyNEFDRkZBNkVDOEQzNkQ0MTc0MjE2RjJEREMyODkyMQorOjEwQjI4MDAwOEFDRjNFMEVFNDZGQjlFMEE3RUREMzNDNEMyRkJCQkM5OAorOjEwQjI5MDAwNEEwOEY0QjIyQjJEMjg1ODI4M0M2QTM2RjE2Q0NDNjQ0RAorOjEwQjJBMDAwREQwNTI5RkVFNkMxM0Y4MEQxMjU1NjdGQ0REQUE0RDA0OQorOjEwQjJCMDAwNkFGQTdENUUzNjE1MzRDMDFCQzU5NTg1OEVCQjgwQjA5RAorOjEwQjJDMDAwNzlDRUYzRDYyRjA2RkExMTUyNjQwMTdDQUVGNjMwRkEyRAorOjEwQjJEMDAwMzRDMTM4NzQyQTRERTlBQzlGQjU3NzkzRDA3MkUwMjMxRQorOjEwQjJFMDAwMEY2QjNGMEE5QTUwQkE4RENBN0JGMTVGMDREQTZGM0E0RQorOjEwQjJGMDAwNkYwNzcyMEZFRDEyRDI0MjM2MEI2REE3RDY1ODA4QzJGNworOjEwQjMwMDAwMjc0NTBFMDk0MEY3QjFBOTJBQzBEMzk0RTZGREY3NTlBNQorOjEwQjMxMDAwMDBGRjZDQzlCQjkxN0UxRTA1NzBEMDdFOUE2QTJDM0VFMAorOjEwQjMyMDAwRDQxNzc5NEEzM0U4RTlENTNFQTZFNzM1N0M2NUYyNzE1MgorOjEwQjMzMDAwRDNCRDExODFDRTlENjQ1MjNEODk3OEYyNDVFQzFFMjgyMworOjEwQjM0MDAwNjczMzc4MzJGM0Q4QkNGQUUwMUZBQjg0OTZEM0M2RTlGMgorOjEwQjM1MDAwQjYwODgxN0ExQTFFNEE3ODdGMjU3QzFFQ0VCNEQwNEE2MAorOjEwQjM2MDAwMDlFMENFNjM3MEQzNzUxOUUxNDlDRjU2OUE0MTBFRDJFOAorOjEwQjM3MDAwRDM1ODdGMkFDNThGODY3NzgwQ0JBMUMxOTU0N0VCODNCMQorOjEwQjM4MDAwMUVGNjJBQ0RDMDBBMEUwRTVGNDkzNjgzNjdGRkVCNkZBQgorOjEwQjM5MDAwNzcwOEFDM0Y5NDJCMDc4N0Q3QzFFNzRGMDBERTU0QUU0OAorOjEwQjNBMDAwRDc2OTdGMkQ3MjQ0MTA2OUZERDAwNEEyNkU2NEEzQTlGMQorOjEwQjNCMDAwNTI3RUY0RkIyMzM1MTQwRkI0RTBFNEUzOTBGNTU2OTQ4OQorOjEwQjNDMDAwMDdGQTJBRjgyREU1ODNGOTBEQjQ5QzE1OTU4RkQxMkIzQQorOjEwQjNEMDAwQUQwNjc5NzFGMjc5OTMwNjI2NDc5NDZEMjJEMDJFOTNBQgorOjEwQjNFMDAwQjBCMjA1Q0E3NDFFMjU1OTQ2MzkyMzVFNUQ5OUMyRTE4MworOjEwQjNGMDAwMDI3RUE3RkE2N0Q5MjQ4NUYxQ0ZBNUNDOEUyMTQ0NTdDOAorOjEwQjQwMDAwMEZGODdDODJGQUY0MUFGQ0FFRTBCQTlFRjE1M0M1MDA0NAorOjEwQjQxMDAwREZCMDlBRDQwMjExRjQ0OUM3RTMzNzU4ODBBRkVFMjI2NworOjEwQjQyMDAwMTYzMTExRjk1OUU4RDM1Rjc0QkMxRDRCMjI3Njk4QTRFQworOjEwQjQzMDAwQTNBMzI4MTlGMDk2NTE5MzVDQTAwMDFFM0JGQzU4NzZGQworOjEwQjQ0MDAwNzRENEY4RjAwOTRCRDM3ODQyODYxMEREMzg5OUEwNUZBOAorOjEwQjQ1MDAwM0QxNTJEMTRBRkE0NDYwOTgzQkU5RUEwODc5MzdFQ0ZEMQorOjEwQjQ2MDAwNzhBNUUxN0FBMEQ3MDM4QjVGMUQwQ0YyOUI2QTZBM0YzNworOjEwQjQ3MDAwQ0UzMjAyRTU3NEQ4MkJCNDE2OEU3RkVDNjc1MDdGMTU2MAorOjEwQjQ4MDAwRDcyNzBFODA3ODNDM0U1RjgxRTczMDI3RDVCMzU0NEZGNQorOjEwQjQ5MDAwNjc1MDA0MkJFM0EzRkE2MkY1QTVFRkU2Rjg5RDlDN0ZDNQorOjEwQjRBMDAwOTJGMTE5ODFBNzU5QUZFOEVBNUZDQUVCMDc4NUYzRDY5NQorOjEwQjRCMDAwM0I4NkY1MzQ3OENDREZDRjA4MTZENDUzMkVCMDMzMjkzMQorOjEwQjRDMDAwN0UxRjI2OUUzOUI4MkU3QjJEQjgyRTI2RjBGNzYxRUYxMQorOjEwQjREMDAwODEwMkE0Njc5ODc4ODU0Q0QwQjc3RkI1RUFGOUUwMjc1OAorOjEwQjRFMDAwRjAxMkY0QUQxNDQ2Mzk1MTMyMUM2ODFGNTIzOTRFODBBNworOjEwQjRGMDAwNzVBRjQ5QUEyOTgzRjdFMTc0MDcwMUJENzA2MEM2QUIzNworOjEwQjUwMDAwMDJFMDMzQkRDRDNGMUNFNDUwQjM3MzBCQkNFMTM0Nzg5MworOjEwQjUxMDAwRkZFMDIxRkYyNTI4OUY3MUVDNDZDRDRFMzRDRjY3RTgzMAorOjEwQjUyMDAwMTVDQjUxMUYwQ0Y3Rjc3NkMwN0FFRkFDOTRCQzU3MDJERAorOjEwQjUzMDAwN0ZGOTI5NUM0RUQ0OTMyQUY5MkU4NURGMUI1QzA2N0FBRAorOjEwQjU0MDAwNTZGNUQzRjIyMEZBQUNFNENGMzJGNjdENTU2RDU5RUVDNAorOjEwQjU1MDAwNTEyOURBRUZBQTUxRDQxRUE1N0E3MTdERTc3QURCMzUzRAorOjEwQjU2MDAwNjA2N0Q0NTg1NEUwREJCNURFQjc2RDNFMjc5NDBCMDYxOAorOjEwQjU3MDAwMDA5RTVCOEIzNEJCMkYyMkMwNzhFOUVGRjhEMENFOUJDNgorOjEwQjU4MDAwRTA1MTNDQTBCNEM2NUEyMzgzM0RCQUY1QTI2OUM2QkJCQworOjEwQjU5MDAwRTMwMTBFNzIxMzI1RTJFMEY4NzRBNEYzNDUzRThCQjc4NQorOjEwQjVBMDAwOUUwMDJDMTZERDNBQjIzRjZCMDdBRTJGNkY5MDRCOTE4OQorOjEwQjVCMDAwMkVEQUJBQTJBRDIzRDgyM0Q1MkZGM0I5MUMzREE4ODYyNQorOjEwQjVDMDAwNkQwMkVBMkIyQUJCOTQzRUYzQjkxRTcxNzJCRDQ5RjU5OAorOjEwQjVEMDAwMzBEMzczN0MzRDU5QkIzODE1RDcxMzREN0Y4MjZEMEQyOQorOjEwQjVFMDAwNEE2MjNFRDdCNzZCNzM5RTQ5QkE4NkMyRTQwNDNEMEJFQworOjEwQjVGMDAwN0EyOThEMTRDMEZBM0IxQUY0MENFODI3MjkyOEMwNzg2MAorOjEwQjYwMDAwNEQxMzNDNjQzNUFFNjM0NjdEM0FCQTg2RTlDMTA3RDMzMworOjEwQjYxMDAwMDhGMjEzNUQ4NzlBNjFCRDZCNEEwRkE3NDEzRjREMzUxNAorOjEwQjYyMDAwMDcwNEJGNkVGREQ0RDYzQjU3NEQyNzAxM0QzODJGOEYwMQorOjEwQjYzMDAwQUQ3M0YzQjJEOTc4QkYwNzA0NEQ2MEYwODI1RTM1QUZDOQorOjEwQjY0MDAwN0JCRjk4QjIwMzk1NjUwMkI3QjdDQ0Y4MTcyQ0NDMEUyOAorOjEwQjY1MDAwN0M3OEQ2REI4OEM3QjUwQjFFQzEyNzY5RDg4MEZEQTVDRAorOjEwQjY2MDAwRDkxODBENTY2NTFEQzBGNzZCRkM5Njk5NjA3N0FGOTc5QQorOjEwQjY3MDAwM0E1NzhFQTJGMEFGOUYzOTRGMDlEMkVGNkJCQ0NDRUY5NworOjEwQjY4MDAwNUEzRDY1REUzM0IwQUU1OTJEMEE4M0FCQTYwQ0VERDUxRAorOjEwQjY5MDAwMDQwRUQ3MDZFODFCRkQ0NDA1RkRBMkJCNkZEQkI4NzJBNAorOjEwQjZBMDAwMDRFRDI3OERGQTMxODIwQTk1NDIzNjJCRkRFRTA0OUE3RAorOjEwQjZCMDAwODJGRUY2NDcxOEZDNUU1MjQwNjJDMEZGMUY4MjgzRjk4QgorOjEwQjZDMDAwQTFGRUNFOEVEMTQ4NEY4QjA3RTA0REYwRjZEQUMwNEY4OQorOjEwQjZEMDAwNTRBOTFGQTZBQTAwQUY2QTFGOEJGMDVBM0NDQkQ0NjhBRQorOjEwQjZFMDAwRkJERjcxN0ZFMTc2NThGOEMxQkU5RkYzRUU0QzkwQUY1RgorOjEwQjZGMDAwNzVCNzMxQkZDQzBDRkZERDUzNDMxRDE2MUM4N0EwNUIxMworOjEwQjcwMDAwRTc4QTgzRDdCOUEwQzE0MEZGNzg0MzA4OTcyQjhCQzE0NAorOjEwQjcxMDAwNzU1NDYwRjQ3QUI4QjNFMDJBRjQ5MzhBRTg3QkRBRDFGRQorOjEwQjcyMDAwMjM5RDIzRUMyMERGRkRFQ0NDODQwRjczRDBERTMxQUQwNAorOjEwQjczMDAwMzMxNzJBMEYzM0U5RkJCMUQ2RjBENUM4NkZEQjJDQTgzRAorOjEwQjc0MDAwQTcwODYxN0E0RTIwMTZGNURCOTFCMDg4MzBCODkwRjVFNQorOjEwQjc1MDAwQThGRTVFMjE0N0U2MkNBMEY1NTdFQzc0MTJDMDk3QzZGMAorOjEwQjc2MDAwMEZFOUJDQ0ZENTM1OTQwRjYyQ0NCQjQzMTBFM0QxOUQxQworOjEwQjc3MDAwRDkxOTlDRUU5RDMwREVDMDBCRDM5RjRBQjMxREVDQjZBOQorOjEwQjc4MDAwNzBBODdFNDgzOUY4MUYzNUNDREYwRDQ3MEVBMEZFNDk2MgorOjEwQjc5MDAwOUY3RTMzRkEyOTVCOUE1M0U3MkMwMEJFQ0FGMjc5MDFFNworOjEwQjdBMDAwMUQxQTNDNjA5RkM0RjIxM0FGQjZEOENFRUJCRkM3RDMwRgorOjEwQjdCMDAwQzM4RDk1MkJEMEVGNkRFQzhDM0RGRjI5MTZFNjZGODc3RQorOjEwQjdDMDAwQTk5RUY0NjZDNzFGM0ZERkMyRUNFODI0MEJFN0JCMTk1NAorOjEwQjdEMDAwQUZBNkU5RDczMzZENURENUQ2RDk2MTEyMDk4QUJBRjUxRQorOjEwQjdFMDAwRjAyNjhFM0ZGM0JBNDlBNDA2REIxOEM2RTdFODNGMzZEOQorOjEwQjdGMDAwMkU2MDcxODgwRDUzMkMxODVGRDFGODlDRDY0QjAzQkM3QQorOjEwQjgwMDAwRDI3OUEwM0Q0N0Y5MzAwNEY2RENDM0E0MDFFNTI2NDgwRgorOjEwQjgxMDAwREI2RjI2RkRFMUJFOEQ1ODJFNkE3RTkzRjlGQ0ZBQzZEOQorOjEwQjgyMDAwRTNGRUY1RUQ1QzVGQURDQkI5QzcwRTVERDFGMUQyODAyMworOjEwQjgzMDAwM0YwMjZFQTYyN0FCNUNDQzhFOURCNjUzOEVGQzgwQzJCOQorOjEwQjg0MDAwNTFENTJDQTA5RDY1RDk2NzQ3MzhDRjZDQTI2NURBNzVCNAorOjEwQjg1MDAwQzRBNTYwRkREMzFFMUI5NjAzRDZDRTg3QkU0N0NCQkRDNQorOjEwQjg2MDAwM0I0NTgyNzY2NDk2QzMwMkZDN0E4Q0YzMkJDOUEzNjVCMAorOjEwQjg3MDAwQjA4N0VEQUM1OEQ1QkNGRjc2RThBRkFDQ0Q0QUVDQjRBMAorOjEwQjg4MDAwRkZBQUREQTVENzdFOEY5NjRCM0I2NDAyNTVBQTM2MkZDMworOjEwQjg5MDAwNTM4NkQwRjJBMjkwMTA4NjcyNEYwMTVEQTgwMDJGQzk4NgorOjEwQjhBMDAwNEEwOEZDRjYxRTc3NjdFQThGRThCQzRGRDZEQTg4NEE2QQorOjEwQjhCMDAwNDFBOTczNzVBNkRFNDRGMTUxMUVEQTVFMDhFRENBNUIzQworOjEwQjhDMDAwMDREMDg4NzQxRTlCNUYxRDBDRjNEQTJBNzhDMUJGQUZDOQorOjEwQjhEMDAwRDg5MjYwQjAwNzhGRDFBOUZDODA3RTVGNDJFNzA5NzJFMQorOjEwQjhFMDAwNTk0QTFBMEE2MTlEQUJEQUJDNEU1MTc1RjE4NzkzQjU3RQorOjEwQjhGMDAwMUUxQzQ3MkI1NzZEQTVFM0QwNzZENUNGMEI1RTk4NjIwMworOjEwQjkwMDAwQjU4NUY4NDEwRjlERDk2RDlGRkRCNDEzRTZCNzRDMTk2RAorOjEwQjkxMDAwRTM4Mjc5M0RBMDQwQkREMjUwRjE4Qjc2MTVFMDZCNTZBNQorOjEwQjkyMDAwMEFFOUY3RjJBNjY2MDVFMjVCMDEyQkI5MDNGQ0RDOEFBMworOjEwQjkzMDAwMkQwMzhDNzAzNThBMjhBRjRCOTI2QzFCNDE5RjEzQTc0NworOjEwQjk0MDAwMkZFRDg2QjFGREU5N0NCMjk2RUFEODMxRDE3MjM5RThBMworOjEwQjk1MDAwNDNFNEMzOTA3MkJEQUVGRTcwMzEwOUY5QjU2MjhCNjhFNQorOjEwQjk2MDAwQjRCM0Y5RkExRjNDQ0NFODFGRENFQkMyQjg5RjQ2QkY2QQorOjEwQjk3MDAwMjVEQzVGRDZFOEI3MjQ4OUQzNTNFQUNEOEYwNUNGNDNDMgorOjEwQjk4MDAwNDAwRjBBNEYwM0UwOEIzRUQ3NzBGOERDNTNDODU0ODg1MQorOjEwQjk5MDAwQkJCODdEQzQyM0M0RTA2QkYzQjM0MTI2QzVDMEJBRkY3NgorOjEwQjlBMDAwQkFGQ0ZBQTlEMjYwNzQxRjE2NDNFNEM5QjM2MkNFRDRCQworOjEwQjlCMDAwRTlCNEZDM0I0QkQxNjYwQkVBMEZBRjBBNzJBNEY5RDk4QworOjEwQjlDMDAwNEY1OTk4NUNENjBGNTYxMDdGMEQzM0YyOUY2NkYxMDlFMAorOjEwQjlEMDAwODJFQjVFQzM4QzkyNjdDMDJFQTBFREI3NTk1MDBFNjkwMgorOjEwQjlFMDAwRkJCMUYxREI3QjBBMjcxQURBN0IwQUNCQjRGNjNCQjE1OQorOjEwQjlGMDAwQkRFREZDRUQxQjBBMjcxQkM3MkYyQ0Q3REFFRjQ1Rjg0RQorOjEwQkEwMDAwOURFNzg3REY3M0U1MTRFM0Y4NTc1NjYyRkI4MDk1RDExNQorOjEwQkExMDAwQUIzN0M5ODY3NkNEMEFCQkQ3MjczMTNCMkEwMkVGQTVDMworOjEwQkEyMDAwRTQzMTFCQTE5RUE4RjEwM0U5RjQ4MUZERUQ2QzQ5MUFGNAorOjEwQkEzMDAwQkY5QUU4RjlBMkUwMEQ4MEMzNDVBNTQ1Q0YxNzg5MTM0OQorOjEwQkE0MDAwMUQwNjdFNENGMjI1MUJDQUI0MjdDRkIxRUZGMDMyMEM5NQorOjEwQkE1MDAwRTJCNjIxM0NDQTEwMDVGNUM1RDQyMTM2ODRGNzlFN0Q5NworOjEwQkE2MDAwNzYyQ0RGMzM5OUMxN0JDRjEwMjdDQTE5QUUyRDk0OEU2NworOjEwQkE3MDAwRjcyOEZFQ0JGNTc2MkJBQzRDMTA0QTdBNTNGNDdGMDRCMgorOjEwQkE4MDAwRjg4REJFNTcyREYwREUyMTkyMUFENENGNTY4MkZBRThGNworOjEwQkE5MDAwODFDQ0ZDQTc4MzNBRkNBQzFDNDZFOTRCQ0JBN0MxRkU4QQorOjEwQkFBMDAwMTkxOEM1RUIwM0MzNEFEMjhBNzVFM0Q0MEY1MzY2NkZFNgorOjEwQkFCMDAwQ0M2NkVGRTczQjYxQkNBMjFFQzA0MzQwRTkxRDAzNzZBNAorOjEwQkFDMDAwQTU3OTFDRUI4ODg5ODY3MTZDMTk2NTM4Q0UzN0E2NzEwQgorOjEwQkFEMDAwQUMxOTY1QTY3MTZDQjMzN0YyRjc3QzlDM0ZDM0JDRTIyRQorOjEwQkFFMDAwOERGM0MwODhDOUM2Rjk2NDk0RTMzODU2RDEzNDlGOEM2RAorOjEwQkFGMDAwNzJEMzM4MEUzNjFGRkE5RThGNjMxN0NGMzc5RjkxNTMzQworOjEwQkIwMDAwOENGMzE5NUU4OUUzQTQ4ODhBMjE2RTY1MUQ1RTY5MUEyQgorOjEwQkIxMDAwQzc4OUUzQzA3QjE4ODdBNDMzRkY0NkIxRjY5NjIwRkRBMgorOjEwQkIyMDAwNUZCNjEzQjBBNzE1QUJGRjU5RTg5N0ZDQzE0RTUwOUYwNQorOjEwQkIzMDAwQTg3NERDNDFBMDU3OTI3MUJGRTAzRjJDQzkzODlGMkZGOQorOjEwQkI0MDAwMUQ5NEZFNEUzRDlEODM5QTVEODBGNkNFNDIwRTIyMDlFNQorOjEwQkI1MDAwRDVBMzdGNUVDRDc5NzQ0MUNCRjUxOUNCRTBEOTM2MkRENQorOjEwQkI2MDAwQUQxOEZDRUNGNTJFMkZDNDRGQ0ZCNDRENTNFNkM3QjA0MworOjEwQkI3MDAwMEIxNjM2QzhDN0JBMENGQ0NCRjU1RTAxQzlBQTAxM0Y0QgorOjEwQkI4MDAwOEJEQjAxNUFGOTE4RDU1Rjg0RUFBRDhGQThGRTgyRTdGNgorOjEwQkI5MDAwNzE5OUVBNjlGQUZFMjhENTZGNDREMUMzQkIwQ0RCMUQ0RAorOjEwQkJBMDAwOTMxODFFOEYzNUIxNzVFNENCNzU4NzY1OENGMzA1Qzk4NQorOjEwQkJCMDAwM0I1OTc0MUUzN0YzNjkyQzZDNDg2MEJFMDI4NzIzQzA2MgorOjEwQkJDMDAwRTlEMUJCREIxQURBODhGNEYwMEQwNUJCODczNDBFQTA4RgorOjEwQkJEMDAwQjhFMkY1NDYwMEJFQThCODI0NjM3MTI4RDg0NzNGNUU5NgorOjEwQkJFMDAwQjlGRDM3NTBFRDVEQTE3OEQ4MTIzQURGRDlBREVCRTQ1RAorOjEwQkJGMDAwQTFCNDdDNDZFRUJBRERFQkQ0RjUzMzVCRkUwOEU2NkQwRQorOjEwQkMwMDAwQTNGRjQxM0Y3M0ZDQjRBQzFCRkZENjMyNjNGOTM2MjI2RAorOjEwQkMxMDAwNDVDQjk0NkUzM0M0MTE5QzFFN0M1QzM1MjQwM0JENkVGMQorOjEwQkMyMDAwNEU2NUYwREMwNkNGRjFGMEQ5ODNGNEJBRERDM0RBNkFGMQorOjEwQkMzMDAwRjAwNEVFOTM0OTA0RDdBM0FFODFDQ0I4MUQ4OEY1RkM3RgorOjEwQkM0MDAwREFCQTYyODJFRjc2RDlFNjJCQTJGNEJDRkQ1RTExRjE3RQorOjEwQkM1MDAwNjg4NkI3NkI1RjgyQ0Y0MkZEQUFBRUM2Q0Y2NEYwMkY3NQorOjEwQkM2MDAwMkYwNEZGMUQ0QjhEREY0OTkwOERBN0UxNTVFMzgzNUJDQQorOjEwQkM3MDAwNjY0RjFENzA1NDU3NkY4RUZGQUEwMTQ3NzVGQzcyNkI5QgorOjEwQkM4MDAwRDlGNTg2RjI2RDM1NzMwQ0Y1RUY1ODVBNkNGODVFMUNEOQorOjEwQkM5MDAwNUM2NEY4M0U3RkU1NjI0Mzc5NjFDM0JEODZGQUE1OEQ5OQorOjEwQkNBMDAwQ0IwQ0RGMTc4NTU2MTlCRTU3NkM1OTY3Mjg1Nzg1MUY2RgorOjEwQkNCMDAwMzNENDBGQjQzNTFCQkU1QkY2NUQ3QTFEQzg2M0RERUY3MAorOjEwQkNDMDAwNDQwMkY2RDkxN0NFNjMwRjgxN0RGNTg1NTM0MkJGQUE5MgorOjEwQkNEMDAwMUE3ODhEQ0FFMTg5REEzNEU0RUY5M0I1MkEzRUNGQjRGRAorOjEwQkNFMDAwRTVFMkZFNThDMDQxRTU5OUFFRjUxQkVBMEUyRDVCMzk0MQorOjEwQkNGMDAwMDVGNDA4QUQ0Rjc1RjgxMzc1NkYyRDBCNTJERjdEMjNEQQorOjEwQkQwMDAwMDRBOTI5REY4QjhEMEE4OTBDMDAzRjI2Qjk4RkFGN0JGMAorOjEwQkQxMDAwNDVEREY3QUUwQjdDNkZBNDBCNTY2RUZGRUY2MjU3RUM2MAorOjEwQkQyMDAwRjczRDQyRUYxOEIwRUY4MjFGNTg3MUZGMjY5RUZENDA4RAorOjEwQkQzMDAwRkY4NjkyMThGRTgzRjZFQzg2Rjg4NjRFRUZCQzJDMzIxNgorOjEwQkQ0MDAwQkJGQTcyQjFFMDY1OTEzRTJCMTUyNkVGOTUzQjA2MTdDNQorOjEwQkQ1MDAwNDBCQ0EwNTI4OThDQTk4OTYxNjdGNzhEMTdBNkMwMENEOQorOjEwQkQ2MDAwODI3RTk4QkMyQzBBMEQ4RENBMkZEMjZGQTQ0MUVFQUZGMworOjEwQkQ3MDAwQjFGOEY3ODE3RUVFREUyRkIyRkQ4MUM4QzEwQ0Q4QTdFNQorOjEwQkQ4MDAwQjk1Q0Y0QkQwQ0VGNDlEQjQwNUMxRkRGQURGNTBEMzg0RAorOjEwQkQ5MDAwM0E4QTkwRjc2QjY3RTJGM0Y3QjU0NTAzMjA3RUY0Qzc2NAorOjEwQkRBMDAwREFEOTU4RkVCMEQ2OEZDRkFFREEzMjdDN0U1NDVCODNDMAorOjEwQkRCMDAwREY4RkQ2MkVDNUYyQjFEQTIwM0U0RkQ0QUVDNEU3QzkyQworOjEwQkRDMDAwREEwNkZDREU1RERCODhFNTMzQjUyMTdDNkE3MkEwRDkzQQorOjEwQkREMDAwQTMyNDg1REI3RkRDNUVBNzJCMDc5NkNGRjIzOTg4RjQ5RQorOjEwQkRFMDAwREY5RDI4RDdERTM0OTBFQkIzQ0UyRkM3ODA5RDdCRjY0NgorOjEwQkRGMDAwN0QyQjA2RDFFM0UxQzlDQzZGRjFFOUU3QzNGNUJFMjRBMQorOjEwQkUwMDAwNDRFOTlGREJGRkJCRERDMUU4NjNCNzkwOTlFMDlGQUREQworOjEwQkUxMDAwMUFBRDEwODhBQjNCNUVGRTBFREFDQkY0QkQ0NDUwNUYyQQorOjEwQkUyMDAwODZCQ0ZBN0RDNEJFRkU2MUNFODMyRTRDMjdBREZFQjEyQQorOjEwQkUzMDAwQzdGRjJCN0Y1RTM2RDA4N0QxRDc3MTUwQUM2MTc0N0I0MgorOjEwQkU0MDAwREEwQjc0RDNFMThGRDk2NTNCQjkzRTM3RTE1MUUyNzIyOQorOjEwQkU1MDAwNjdDNkU3RTk4MTFBM0UzQjMzMjBERTUyMjUxNjU5MjQ5NgorOjEwQkU2MDAwRkFFRTZDQUIxNUU3NzVCNjNEODFFRDYzN0I1MjJFMkE3OQorOjEwQkU3MDAwOUU1N0IxQzVFRUQxRUI4N0FBNzA5MkM3QTgyRjA2N0I1QgorOjEwQkU4MDAwRjRGQUUyNkNDN0QzNkU5MEZCMjU2OTE2Q0ZEMTVDRTA2MworOjEwQkU5MDAwMEYxRkU3MEZDNjc3NUFGRjU1RTE0QzhGRDNEMDhGQjFGNAorOjEwQkVBMDAwN0NCNjQxOThDOUY2MTVENUM0OUI2MkY4MDdEQTczNDk4OAorOjEwQkVCMDAwOUFFMjM5NEFGNUMyQzkyRDIzMTM2MTVDRUFDNzc5NjA1OQorOjEwQkVDMDAwOUNFRTVBOEY4NzhEOUJFNkQxRjM2NUU1NTIwN0Q2RDc1NgorOjEwQkVEMDAwRTA4QkQ3RUYzRjFBM0VEOEYxRkJEOEM2NjI0RDEwQTdEMgorOjEwQkVFMDAwODk1NzNGMkUzREE0Q0YxNUYwMEY0OEJCRkMyNUFDM0IzNgorOjEwQkVGMDAwOEUyQzZEREQ5MUIwQUNGNTFCMDg4QjQxRUJFNUYwQkVFRgorOjEwQkYwMDAwQzUzMDFFNkRBNzZBM0UzNEI0OEI0Rjc3ODkxQ0QzRThDOQorOjEwQkYxMDAwNDlGNUU0OTUzQzNGODQzMjMzRDJEOTRGN0I0Q0E0RkRBNAorOjEwQkYyMDAwRjU0OENFOTUxMEU3Q0Q5NDU0RDQ3NzAxMTg4OEYyNTM5NAorOjEwQkYzMDAwOTVBRDRCRjFBQjg4RUU0RThDN0I0RUQ0RTQ1RUJERTUwNworOjEwQkY0MDAwMEY5NEU1M0VGOTM3MTlFMzE5RTRDRkI0NzdGQTVERTZDQgorOjEwQkY1MDAwNUYxNzkwMjIzNzM4MTlGMzVBMkI2NjgxOUVGQ0M0QTJEMgorOjEwQkY2MDAwRDkwMzBERjkzMEVGRDNDNDgyRkJGOUE3QzlEQkVFNUMyRQorOjEwQkY3MDAwOUQ1RDU2MjZGMUY4RTQ0QUI2M0UwN0U5N0YzMDNGNkFGOAorOjEwQkY4MDAwQTcxOUQ2RUJEMjQ2NjNCOTg0REM5MDBBRjI1MEIyNUVCMAorOjEwQkY5MDAwODYxRDVCQjIwOEQ2N0JEREJFQzk2Q0M5ODNGMzJFMjUzNgorOjEwQkZBMDAwMzVGNTYwQTdBQzk2RDkzRUVBM0MwRjkxODY1MkI4QUEwNworOjEwQkZCMDAwNzYzRDk5MEZGNjZDNDA2MkZBNUVGMzlGMTcyNTMzQjgxMQorOjEwQkZDMDAwQ0I1MzQyOEE4RjdFRkZCODM1RjdFNkVGMTE2ODFGQUE4MAorOjEwQkZEMDAwMDdCRDE2NzQxMTZGQUM3OENDRkM5NTQ2RjgyRTA0QkZFMworOjEwQkZFMDAwMTk1RTQyOTYxQkUwRDBGQUQ1RTAxMEI3MDgzMUYzMzQ2MQorOjEwQkZGMDAwN0UyNjA5M0NBRUMzRTQ2M0FENjRCNDVGMUZFMTc4RDAzNAorOjEwQzAwMDAwQ0ExQjRDRTUyNjUzN0Q4RDRGNjRDRTI3OTk5MkZGMTFCNAorOjEwQzAxMDAwRDAzRjU1QjZERTQyQjREMzA4RTU4RkVDNjgzRDI1NUFEMworOjEwQzAyMDAwNkZDM0Y5RUE1OUExOUU4OEY1OUFBNDA5RjFFQkQ5QTM0NworOjEwQzAzMDAwRkQzNUM3RUFBRjZBRDdCNjE3ODM5NDlGQ0E1Rjc4RDQzNQorOjEwQzA0MDAwMEQ0MURGNEZBNDg2NTQ4ODdGNTU2RUJFREYwRDc4M0FEMAorOjEwQzA1MDAwMjEwNURENDBFRjRGNDI2MkNDQjhFMDdCN0RGOEYyMzkzQworOjEwQzA2MDAwMDVGMDIzOTBCNTI5REU5RjdCRjA1QUQwRDc1RjZFOTZGRQorOjEwQzA3MDAwMzEyRjI2QjBDNTFBQjE1MjNFQUU2RTVEMzQwQkUyRjdEOQorOjEwQzA4MDAwQjQ3Qzg0OTUxRkY4MTRGNjBEMDM2RDQ2N0E5NjNGRkIzOQorOjEwQzA5MDAwNjgyQUM0ODkyODI2OTlCRDREMjI2ODc3NTQ2RkZBNTNCRgorOjEwQzBBMDAwMjFFOEYxMDBFOTQ1M0UzNEI3ODNGMUNGMjVBM0RDMTc0MQorOjEwQzBCMDAwMkI4OUZEQkY2QkY5MEEwMTJFNjc4MUQ2MDczRjg1QkMyRQorOjEwQzBDMDAwODQ4MDg5N0ZDQUZBRDY5MzJFMDVFMjA4MUQ5MjJCMDUzQgorOjEwQzBEMDAwRkRGMkVGOTJFRjgyMUVEMEYwNDE0MkNDOUVBOERCQkE3NworOjEwQzBFMDAwNjFEQzExMEE0RkY3QTY3RjczMEIwNkJGOUJGMUUxRDkwNAorOjEwQzBGMDAwRjBGQzVGQkRBNEM2RDczMzY3QjgzRjE0NkQxN0MyNzY5NgorOjEwQzEwMDAwNkExQkIzN0Y0ODNCN0I1NkNBMTEzN0Q4OUI5NUNEQjI4QgorOjEwQzExMDAwOTc3MjI4QTlEQ0Y2RjQzMzhGODM5RkY2ODExNUZEQjQ1RQorOjEwQzEyMDAwOEE2REJGNzk3NzMyMkQ1NzZDOTc1MzY2QjFFOTM4ODVBMAorOjEwQzEzMDAwRDQyODVEMDJGNDdGNEJDNzQ3RTk1MEZFRUJERjI4RUFDNQorOjEwQzE0MDAwNThGNkZFQTdDOTUxN0E1NDZDREZBRjkwQjFGREYxMzdCNAorOjEwQzE1MDAwMkRCQzVGRTk3MkM2QTA0QkY4NDgyMUQ4MkI3NTVCQkY5OAorOjEwQzE2MDAwNTJDMEVGRkE2NDlGNDAwNjY1RjY2RjVGRDZGQzFCNUMxOQorOjEwQzE3MDAwMEYwMTRGNDg0NzRFQTczRUJBRjVBMzU3RTREQTk3RjJBRQorOjEwQzE4MDAwQjA5RTA3RjQ2NDNDN0EzREM3RjU3MkQ1MkUxNzQ5ODJGQworOjEwQzE5MDAwRjhFN0VGQURBMTU5NDBDN0U3RUY3NEMzM0M4RTRCMzVDQworOjEwQzFBMDAwOENBRjlGQkMzRjE1RjZGRkNBRTQ2MEFBMDc5RkVDN0RFOQorOjEwQzFCMDAwRDk1Mzc3MjNCRjk1MEEzNUE5NkMxRkQzMzc5OEM3Q0JCRQorOjEwQzFDMDAwMDdDM0ZDMTYzNkZEMDhFNzU3NDJGQ0M4Nzc2NTRGOEE1RgorOjEwQzFEMDAwNDUxMDFGRkU0MjIyMzNCN0M3OTA4QjZCNjRCNkZGNzRDNQorOjEwQzFFMDAwN0NBMzE1OTJGQ0M4NzFCMEYzQzFCRTdFNUJDNDM4MkIzMgorOjEwQzFGMDAwMjE4QjcxMUZFQzZFMkQ4RTRCOTY2MEY5MEJCRTJGMzU4NworOjEwQzIwMDAwNEFCNjY4RkVBMUNEQzBBRjlCMUVFODA0RkE5QzFDRTZBRQorOjEwQzIxMDAwMUIwNDcwNTIzQzA0MzlCRTA0RDhFRjE3MEZDRjE4QzQ2QQorOjEwQzIyMDAwRThDM0YyMERCMDFERDVGRkQzRTAzREQ0RUY5NDcxOUY2QworOjEwQzIzMDAwNTBENzhFRUI0QjM2RkU1RDdDN0MwQUI3MDNENkIzRTM1QQorOjEwQzI0MDAwQTk2Q0JGRDIzQ0JGQTU3QzdFRjRBRjkzRThGODRCMjcyNgorOjEwQzI1MDAwREY0Q0RFMzdBRDYyRjJBREM5N0JFOEZBOTlGMEZERjM1MQorOjEwQzI2MDAwNzc5OEZDNDAzQjU4M0YyODVDOTE0MUY4N0RGRjREMDI5OAorOjEwQzI3MDAwRUEwMzJCODlDNDkyRUI0RDMyOTc2QkUzRjcwMDk1NTM5OQorOjEwQzI4MDAwODgwQjUwQjgyNUM4Njc4OEYyMDlFRDNGMTlGMThGN0VGOQorOjEwQzI5MDAwNDlDOTdBREE0RTY3OUYwNTYwM0NBQ0E3NDRERkVCRDYwQworOjEwQzJBMDAwOEY1MkFFMDc2NkNBNDZGOTI3NEQwMzJGQ0E1RUFDOTQ3QgorOjEwQzJCMDAwNDkxMDRDQ0JDQTBGQUNFODc3NTc2RTkzOEI2MERFQTc2MgorOjEwQzJDMDAwNUEwRUJFRkI2M0NBRDdBN0MyOUE5QzFBRjVBNzU5NEU0RAorOjEwQzJEMDAwQ0I3NjZDMTY4MDNGQ0Q3MjdBQUE4Q0FFRDZCMUU0OTQ0MAorOjEwQzJFMDAwQkU4RjI5QTc2NTVERkY1N0Y0QTc4NkI3ODAwOTZGNTRGNQorOjEwQzJGMDAwMEYwRTRGQjJDNEM3OUY1OTBGQkE2NDM1QTYxRUE0N0Y1NAorOjEwQzMwMDAwRUY5MEZDRkU3Q0E3RjE5QkM2NjdENDQyMUIwRUZBQkJFNAorOjEwQzMxMDAwOEYxRjM1N0VFQkUzNDc4RERGQ0NGMzM0RTJDREZDN0QyMAorOjEwQzMyMDAwMzIxODZBMTRBRUEyREQzMkZBMjU5NUVENkNGRjg2QjY5RQorOjEwQzMzMDAwN0I3NTY4MUVFMkM3ODdDQjE3Njk3ODc1Njg4QUJFMUM1MworOjEwQzM0MDAwMzI5NUMzQTZGQTNFNTNCOUM4NTRERjZGMkFENzE4RUEwQworOjEwQzM1MDAwNTdCNjFENTQ1ODkyNTFDNDUwQ0ZCQUY0NzFGMjcxMENCMworOjEwQzM2MDAwRkI1RTVCNjcwMkFEOUYyQTQxRTA4N0Y0NUUwNUY0OUNBQgorOjEwQzM3MDAwQkM5QzlBNjYxMDNGREIyQkEyQkZENUEzRjZCQTkzRTkwQgorOjEwQzM4MDAwRkJGQkVEQ0M4RkVERjFGMDcyMTIyQkY3MEU1NEVBNDE2RQorOjEwQzM5MDAwQ0Y2OUVGN0JFRDJDQ0VEOTUzRDRFQjRFRDJGOUY3NDdEMgorOjEwQzNBMDAwREE0NTM3RUMwNzc3ODU1ODNFNkE3Rjc4RUE1MDZFQkFFRgorOjEwQzNCMDAwNDhCQ0VGMkMyRTM4NDM3NDY2MkMwNUZGQUQ0MUY0ODI0NworOjEwQzNDMDAwNkJCODYwRDkyRDZFRDg3N0VCNjkxRjc5REQ2Q0ZBN0U3QQorOjEwQzNEMDAwRTEyMTExQ0M2N0QyRTM3MDhGMDNCODQ4RDAyNzBEQ0U4RQorOjEwQzNFMDAwRTdGOTEzRjRFRjA0MDlGRTcyMEFFNDREQjQzM0ZCN0E2MworOjEwQzNGMDAwQzExQTkzM0RFQ0JDNEJDMUZDQjJGNUJBQjg5NjhFRkZBNgorOjEwQzQwMDAwQ0I3OTNGNjU0REM2RUZFNTY0MERGMjVGQjk0OTFFRkM3RgorOjEwQzQxMDAwREMxRjM4QUNDOTQzMEVDOTYxRkJEQjg0RjlCMTVDRUZBQQorOjEwQzQyMDAwQ0UxMEIzQUY5QjRERjFERUQzMjE2MkRFRUNEOTc2OTExNQorOjEwQzQzMDAwRDRDMzNDNUIwNERDRTcyNEMxODEyODU3RDVBNDE3RjU5RAorOjEwQzQ0MDAwOUQ4Njk3NkU5MDFCMjVCRTNFRUFERUY5MUZGOUY3MDEyNworOjEwQzQ1MDAwN0ZCQ0Y4ODc3MTRGRDA2N0Y3OEIxRjhDRDkwM0U1NURFMAorOjEwQzQ2MDAwRUY2NUZDODFGNEFGM0Y2RERGRDdCODhGRDhCM0NGOEFDQgorOjEwQzQ3MDAwNzFBRTlFN0RBRjY1REMwN0U1OTdBQzE4RTdFQTU5NkVCMworOjEwQzQ4MDAwQzU3RDk0RTAzRTU3NjgzNDdDMUZDNkZDODFCQUJENUYxMQorOjEwQzQ5MDAwOEQ2Mzc5OTIyQjkwNEU3Rjk2OTkzRjcyQjZGREJGM0U4OQorOjEwQzRBMDAwODRGQzkxQjNFRDc0NTY2MDE3RUM0QjQwQjkwOUJDNjQ0MQorOjEwQzRCMDAwNDdGRkJCNjdFRjU3Rjk3RUU3M0Y2RTNFRDUwQUYxMjM5MgorOjEwQzRDMDAwRkZCOUM4RUMxREMwQUY0OTJDMUUxQ0Q4MzNFOTY5QzhBMAorOjEwQzREMDAwNkZBRTZBRERBRjQwOUM3RERBQ0I3RjE5MDc3QUIyNjcxOQorOjEwQzRFMDAwMDdCMzc3Q0VDODVENEZDMTdFOTg1NUY5NzRCOTRDRjE0QQorOjEwQzRGMDAwN0MwNjg0NjcwODIxNEYyQkUzQTcwNUIzNjNFMTg1RTE0MAorOjEwQzUwMDAwQTE4N0UyMDFFNjQ1RjE1MjA2RkEzRDFFM0UzMjk0N0ZENAorOjEwQzUxMDAwNTY3QzdDN0EzQkQzNjNERkM1M0NGQjI4NUUwNDFGN0JFMworOjEwQzUyMDAwRUYwQUQ5MDQ5QzNGN0JCRkVGQUI3MUEwNjc0RTg1OTdBNAorOjEwQzUzMDAwQTEzRDcyQTE3OTVGQTFCMDdEOTZGRjM5RjMxNjIyMTc1NAorOjEwQzU0MDAwMzNFRkI5RkZCNEY0NjZGQ0ZGMTFBQ0FGMDNGQkNCNDE5MgorOjEwQzU1MDAwN0YzRURGNzUwRjk2OUY3Nzc5MTFERThCOTRGRjlGRkVFQworOjEwQzU2MDAwNEZBM0ZCMEU0QTc3Rjc4NUU5RkVDNDNGRURCQzJGNDQ4RAorOjEwQzU3MDAwRjc0MzlDRUUyRTBGRUMyRkY3RUNGRDBCQzY0REI1RjlGMworOjEwQzU4MDAwNUY2OERFMkZGRDNGM0E2RkNENUU3RkNEQTJCRTkzNDM0NQorOjEwQzU5MDAwRUIxRjIyMERFRjhDMTEyMDdGRjFFMDYxMzgwMjU2MjA1NQorOjEwQzVBMDAwOTBBMjU4RjZDODQ5ODVDNTNGMEEwNDk2Mjc0ODkyMDRDOAorOjEwQzVCMDAwRUVERjMxQkY2ODI4QjcxMzg2REU1NTgyNzZDNkQwRjQyOQorOjEwQzVDMDAwQjU2ODFGMTA0OTVEMEZGQjcxQUY2NUNDRjdCMjdDQjA0OQorOjEwQzVEMDAwRjE3ODBFRTUzNUNGMTVCQzZDRjQwRjlGMTA4ODBGRjI4MworOjEwQzVFMDAwODY4NzY2RkNCMDAzRUNENUY0NzQxMUVENTlGQTQ0M0IzMAorOjEwQzVGMDAwRjYxNUY3NENGNkJFNTIzMUY4NDU1NzExNUQ5OUNFQUJBMgorOjEwQzYwMDAwMzBDNUU4RkY0Q0U3RkRDRDIwMjNERUM5QTFGMENGQjA1NworOjEwQzYxMDAwQzk5RTEwNDVEMTU1NTNGRDEyQ0NFN0FBQzEwMjY5RDA3RAorOjEwQzYyMDAwRUQwNzREMzdGOTQ5QUY4MjVGQUI4Qjk3RkRBREY4NEIwNgorOjEwQzYzMDAwQjczMjNGQjI0MDE4QjFCRTA4RjAzNzRDQzQ3OEUwMDVCRAorOjEwQzY0MDAwRjE0NzU4RkVENzZCOUUxQzk2RDcyQTc5MTlGRTkyQUJGQworOjEwQzY1MDAwQkMxODRGRTU3RTMzODQwNUMwNUU5MTlDRjU5RDIwQjdFNAorOjEwQzY2MDAwMTJBMTdFMkY4MzFGRkQ2NUNERUY4RDg3NjdDMkZENjgwOAorOjEwQzY3MDAwODkwRkE5RTE1RDRBMTczMTVGNTVENzFGRTI0M0EzQzc3MAorOjEwQzY4MDAwREY0QTA3OEQ3RTdGMkYzRENFOThFODkxRkVCOTQ3MDJBNQorOjEwQzY5MDAwRjk5Q0M2RURGRkU5OUY3NzhBNTg0RUY3NEFCODFGQzU0NworOjEwQzZBMDAwRURGRkE5Q0UyNDA5RUNGRjJCQTRDMzIyQzg2NUE5QUREOAorOjEwQzZCMDAwRUQ2QTg4RDNEQkJDMDJGMkY1MjVERDE2RjQ2RjZDNzlFOAorOjEwQzZDMDAwMDJFMjNEQUI1MUMyRjI2MThCNjcwMjE4REFENzdFNkY4RQorOjEwQzZEMDAwRDdBOTdCMDlDNDg3N0QwQTFBREVBNDg4QzVFN0ZGRkNCOQorOjEwQzZFMDAwRURCNzUzQjRGMzFBRjg5RDkwNkJBOEZGQjVBMDg5NDQzOQorOjEwQzZGMDAwMUMxNDRGMEIyNTEyNEM0Qzg2RjhBRTQwM0UzMkM0NzdDQQorOjEwQzcwMDAwOEQ2NUY4RkI3RTZBQjQ5RjBCRDU4RkE3NDdGRUQxQ0YwRQorOjEwQzcxMDAwNUQ1NDZGN0Q0NDk5NjMzNzNDNzE1Rjg1QjI4NENFM0YzMQorOjEwQzcyMDAwRkU2RTNCQzM1N0UwNzUxMjFBODE3MTA1OUY1OEE0REI1QQorOjEwQzczMDAwMzc3QkQwQ0FGNEM3QUUzRkVFQzg4NUI4RDhENDlFRUNEQworOjEwQzc0MDAwNDRBNjRGNDdBMTVGMTBFMDdFQzE1OUEyMjY0MkZFQzExOAorOjEwQzc1MDAwRDlGNjkxODlCODJGRDgyMUJBRkMzMUUyMzI1QkI5RkYwMgorOjEwQzc2MDAwRkNBRjkwNEY0MTlGM0Q5QjQ4MDM5Q0MzRTgyMUJEMThGRgorOjEwQzc3MDAwOEYwRDZFQjJDNURDREZCREM3QUFDNTlCMzhEREU4OUY1MworOjEwQzc4MDAwQTg5RDM3NTIzMTVGMjQ5OEE4QTc1QkY3QUM0RkE0NzFERQorOjEwQzc5MDAwRkRFOTAwN0YxRkU5RjY0QkZFNUVGQzgyQkYwRUY4REQ2RgorOjEwQzdBMDAwNkFFRjJBOEM3NTFFNkMyNUM3REZCNTA3QkVDNjM4RTY1MgorOjEwQzdCMDAwNjVFRENEMTZFMERGQ0IzNjU5MENGQjhENDEyQkY3QkI3OQorOjEwQzdDMDAwQzY5M0YxMDBEN0I1MDdFQ0FFM0NBMDRCODdFODg1RkNEQgorOjEwQzdEMDAwQzE0MEZCQTc4QTNGQzZCRTk1MTk5RkQwM0ZDNEM1Rjc4RAorOjEwQzdFMDAwNTk1OTlDN0Y4RjFDOUUwRjc4REQ3M0RBODZGOTM5QkIwRgorOjEwQzdGMDAwOTU4NjhBNTg3MDVFNjI2NzdBNkUyMTA5REYzOTJFRjM1QQorOjEwQzgwMDAwOUYwRkJGNTM3QjlDOTEwMkYwMzMzNzExMUVDNzMwRjM0QgorOjEwQzgxMDAwMUY0MTNFM0VCQjg1RTBGOTUwRjA0QjQxMkY5QzZENjFCRQorOjEwQzgyMDAwRTc4MDI5NEFENjgyM0Y0REU1RkQwN0ZBQjhDQzI1NkQ1MQorOjEwQzgzMDAwREJGRjE1RUM4MEVBNzZDMTAzQTlCM0Q1NTI5NzAyRjE2QworOjEwQzg0MDAwRDY0MDVCOTIwOEVCNkU4RUFBRTU1NTdBQzZERUE0OTNCRAorOjEwQzg1MDAwOEI3RDU2OTY2RjdDNzBGMjlFNUI2MURDQ0ZCQTE1MDJDMQorOjEwQzg2MDAwRjY4OEVGOTU1RTM3QUNEQjlGQjVFNzI2QzZDQTlCRDc0NworOjEwQzg3MDAwOUVCRkFFMjU1NzRGOTdBMDFGODI3ODM3RjM0Mzc2OEIyNAorOjEwQzg4MDAwQzM1MEZFOUVFODFGMDJGMjc1QURCNUVCMkU2RjBDRkE5OQorOjEwQzg5MDAwRjk2RDhDQ0YyRTVBQkY4NUZFM0ZEMzZGRUY2OEZBQ0Q2RQorOjEwQzhBMDAwMkYxNkU5RTQyOENCRDY0RkJGMEQ4QUE1REY5NjA4RUFGQworOjEwQzhCMDAwMjBDMEZCOTJCRDIzMDcwMTVEOTcxQzkyMDdDNkQyNkY3MworOjEwQzhDMDAwREI2QUQ5N0VERTBCM0MxRkI2QTc5NUVBQjdDQjc1RkFCQgorOjEwQzhEMDAwQURENTg2Nzk3MUU2NzZDOTM2MEI1RjE3MkZBMERGNDI5QQorOjEwQzhFMDAwRkYzREYyQjcwREY0NUI4Q0Y5OEVCNjMxQkRBMUU5QjcwRgorOjEwQzhGMDAwNzFFRDQ3NTBCRjhENkJCNTE4RjI0NkQzNkQxN0QyNkZFRgorOjEwQzkwMDAwQzJDMDlCQzAxRUVFOTBCRDA5MzFGODY3MUJCN0JGNUY2OAorOjEwQzkxMDAwRTA3OTc4MzAwRUU4Qjk1QjZENkM3RkYzNjJGNTVDQjY1OAorOjEwQzkyMDAwOUREMUZCODI3QUVFQkYwOUNGOUE5RTVCQjI1MzNCRTc2MworOjEwQzkzMDAwNjhFNjQzQTZFNzk2RUNBNjdBNEUwMDdFNjQ3QTZFQzk1NgorOjEwQzk0MDAwNUU3NjhGODM1OUJGNjVGNUQzNkYwNEVCNTc0NzU4RkI2RAorOjEwQzk1MDAwNDA1QkU2ODZCOUI0QkZGMTNFRDk2QkEzRjVDNzQ3RjU5NgorOjEwQzk2MDAwREQwNEJEQkVCQkQ1QzZFRTVERThBN0VGM0EyRTRFREZCNworOjEwQzk3MDAwRURFNEZBOEVFQUIxMTFBMDVGQ0RGQ0UxNkQzN0U2MUQ2MgorOjEwQzk4MDAwRUY5OTc0QkNFNUQ3MjAyRjZGODhCODZGNzg5ODlGNEJDQworOjEwQzk5MDAwN0I3M0QyRjEzQ0UwQUYxNjFCRDNCRjc1OUNGRkNFRDRBNgorOjEwQzlBMDAwMDZCMUZGNjlBRkIwRjk1NTM5NTkzRTcyNzUyQkIzMEYxNworOjEwQzlCMDAwQUI1Qjg0OTA0QUZGNTkzOEY5NkIwNUUwNUZCNDU3MjBCMAorOjEwQzlDMDAwODM2OEY5N0EyQkFCNEY5RUQ1RjZCREM4QUMxQzFEM0ZEMgorOjEwQzlEMDAwMkM5ODU4ODE3MUZCMDUxMkIxNDE1Q0JFQzI1OUY4MDkwRgorOjEwQzlFMDAwRDhCRjE1MTM1OTFDQkY4MkJGNUY3NEE4QUIxRUUyRDkxNAorOjEwQzlGMDAwOEIxRTEzNzBERjkzRjA3QzAwMkRCRkIxQjQ3RDE5QzY4MAorOjEwQ0EwMDAwNkJDRDc5MDE5QTNFNUYxNDMyQkVBRjMwRTUzMzM2RjMxOQorOjEwQ0ExMDAwNzk1RTJGNzYyMTVFQzg1QjYyQ0NCQzg0NjYzMzNFM0E3OQorOjEwQ0EyMDAwMzgzRTM2ODlCODZFRjZFMTgzRTI0N0NERUM4RjBGNEE4NworOjEwQ0EzMDAwRDE1OTM5QTlEMUY5MkY3QTgzQ0UyQjJGM0EyRjBEMUYzNworOjEwQ0E0MDAwRTZGOTY5NzFFNzBBREUyRURFN0MzNUZDRjU5QkFGODZFMAorOjEwQ0E1MDAwNEZEM0JDOUYwNkJEMDEwQTIxODdFNDQyNUUwQ0U1MDM2QgorOjEwQ0E2MDAwRDQxQkMxREY4QTc4N0VCRjY4RUFFODQxN0EzREJDOTU3NQorOjEwQ0E3MDAwRUJGM0RDODZBOUQzMDYxM0MwMTdBOTAxQkUyOTY5NUNCNAorOjEwQ0E4MDAwRkNFQTYwM0FFRjA5RUZBQkUzNjE3OUZDREU2NEFCMUZDRgorOjEwQ0E5MDAwRjY0N0I3REE3QjUxQUY2OTdDRjUwREU3QUI3NzM5MUUwNgorOjEwQ0FBMDAwRjcwQ0E5QzE3M0FBODEzNkMxMDM3NjQ1MjA2MjQ3RkMwMQorOjEwQ0FCMDAwMDUyOEZFRTBGQzRBODA5RjVGMEM1MEZFMDI3OTNBRjhBMAorOjEwQ0FDMDAwRDg5NzBDNUY3QjA1MTVFMkUzODVEQUZBMDNGOEE3RjU0MgorOjEwQ0FEMDAwNzNEQjE5RkUwMzIxMDFGMTlGNDc3QTcxN0ZBNEJBNTFEQworOjEwQ0FFMDAwRjA0NjY4RkRFQUI2QzU5OEY3QTBFOTVCRkFFN0Q0RDM0QgorOjEwQ0FGMDAwNDNDNzhGNTIyQzdFQzQ0QUJBRjVBRjgyRDdCQkQ2REE3MQorOjEwQ0IwMDAwRjAyRUYwRTdCNUNGQ0FBNDU5Qzc5RjU5RjRCRjZGNjNBMQorOjEwQ0IxMDAwRDA0OUMzRTc4NUY4RjIxQ0M3RDMzNkMwQTMxM0YwRDVCQworOjEwQ0IyMDAwQ0JFQ0E3QzhENzc4OEU0NkZCMUU5MDgyMDYzQzRFN0I4NgorOjEwQ0IzMDAwRkNEQzc5RjEzNDQxQzMxM0YwMjlFOEE5RjY2MjExQ0E4QgorOjEwQ0I0MDAwMjU2RDAyMTk5MEQ5N0Y5RUIwM0ZBOTk3REI0NTdCOEY1OQorOjEwQ0I1MDAwQjBGRTlGMTRGMERFMTIzM0RGNkFGM0VFQzdCNzcxRjg1MAorOjEwQ0I2MDAwMTVDRUE1ODE1Rjc0QjE3Q0ZCOEQ4OTZGREZCNEY3QkVGNAorOjEwQ0I3MDAwOUUwQjdDQkI1NzYwRjE4M0Y2MjRDM0ZFRTIxMDNCNUI0NworOjEwQ0I4MDAwRkZCN0RBMjk3RkMzQkVENjIxRDlCQjUxRUQyRkRGMDkwQworOjEwQ0I5MDAwN0NGRDAyQkI1RjdGMkVFOTUyOTgwOEU0M0Q2RUIxNjFENworOjEwQ0JBMDAwMUUxOUMyMzE4MkQ5OTU3QUJEQkFDRDRFMDZERTk0MTdEMAorOjEwQ0JCMDAwQkZGRkMxQkNGRjc4NzY4RDU2MUUwQkUzNDFCRTU3MUJFRAorOjEwQ0JDMDAwMUQyRjJCM0E5RTU5QUY2QjdFRkU4NUU2MzVFNkVGOUMxNgorOjEwQ0JEMDAwNTc1RjFFMjZFOUM0N0RBNzRDQzlGRkIwNTU5NzA3Nzc1QworOjEwQ0JFMDAwMzNDRjMzQTIxMEEwN0RBNUFCOTc2RDNCNEYzRDkyRTZBRQorOjEwQ0JGMDAwQzFGMzRGNzc3QTM0M0U2M0Y5RUU0NTNDOEY3RDg2MzgzQQorOjEwQ0MwMDAwRTUzRDU4M0YzRkYzQjE3REJFM0MwQkY5REQxNEQwQ0Y3RAorOjEwQ0MxMDAwMDUzMjlFRTNGQkVDNzUxOUUzQjU5RjRENjc3OTlDRDcxMAorOjEwQ0MyMDAwQkQ3MTUwODIzOENENzVBMDlDMjgzRUFFOUIyMEEwQkYyMAorOjEwQ0MzMDAwMDJDN0IwNjBERjZDMTdCNTZGN0M2MzcwM0VCOTcwOEU1MQorOjEwQ0M0MDAwMkI2NzUzQzMzNDM4N0YzQzdFNEJBODBFOUVERTY5QkRGNAorOjEwQ0M1MDAwMjk2RjAyMUVBNzhBMDRGMEQ4RTkxQjMwMERFRTRGQkFFNworOjEwQ0M2MDAwRjM0RjA0RUYwRkExRUIyQ0I2MUZERjQxMDY0MkJEQzkwNQorOjEwQ0M3MDAwQkU4MUU4MEU0QzZBNUQzRjBERTJBM0Q3MUY3NDNBRTExNgorOjEwQ0M4MDAwN0U5NkFDMjYwQkY1MTlBMkY4OUI0QzQyNzVCMERGM0VBMAorOjEwQ0M5MDAwRTlBOEVGNDY4MEI3OENEQTBCMTA3NzJFNkI2RkFFNzM3NgorOjEwQ0NBMDAwNDNCOTQ5RjBBQUI0RkY0MEQwNUZFOEE2RjNEOEQ2Rjg1QworOjEwQ0NCMDAwNjlFMTc3NDAxRTY5M0RFODI2RDBDNEVBMDUzNkMxQzU2MgorOjEwQ0NDMDAwNDNGMDdFMURFNkQ5OTQ2QzEyRjBFMEQ3QjY5MDQwNkMyQworOjEwQ0NEMDAwQUNERjkwOERGNkJCQUQ4OUI2Q0Y4Mzc1ODJCNjg3N0UwQgorOjEwQ0NFMDAwMzc3REZBQ0U4RDIwRUZBRjhCQUM3RDBCREJBNzJFQTE2RAorOjEwQ0NGMDAwRUQ1NEUwREI0RDhCQjFCRjQ1NEQwMjQ5QTNGRDk1QjUyOQorOjEwQ0QwMDAwQjA3NUEwRUM3NUQ5MEJERjVCRjczRjg2RUJEODJDM0FGQQorOjEwQ0QxMDAwREVFMDRDRDBGQjkxRTk1MDI2Qjk4MjA3Q0ZBMTU0OEVCQQorOjEwQ0QyMDAwNDFCQUY1NzAzOTI3NTM0NjMzRkQyMUYwMzJGNzFCMzRGMQorOjEwQ0QzMDAwQkJFOTVEM0JDQkY3MkRGMTJFNTMwNkQwN0VERTlDMzg1MAorOjEwQ0Q0MDAwMzAxM0QyMDIwMjZEOUZFMkZFRjM1MThBNjczRkVERjI4QgorOjEwQ0Q1MDAwMzBDRkRCMzgzOEYxNjNBNTRCQjcwRTdENjY2N0Y3NUJFNAorOjEwQ0Q2MDAwMkQ2ODlCOEFGOTBDMEI0OTExRTYzMzVDM0I4OUQ5NkIyMgorOjEwQ0Q3MDAwNkY1RDYxMEZDMTE1MDc2RkM5QkRFOUYwRkVFMDE1NTY4MworOjEwQ0Q4MDAwQjQ3RkNGNkM5MzkxOEZDRTBDRUJDMkY4RjRGMTI2MTlERgorOjEwQ0Q5MDAwQ0YwREQ3MzVCMUZCQjk4RUI3QjA3NTVDN0M5MkVERUI5QQorOjEwQ0RBMDAwOTdCQTE0MkMxRjZDQkFCMTEwRDZCN0UzOUJEODc5QzdDOQorOjEwQ0RCMDAwNjk0RkNFNTBBMDVDREEyQzc4RDlGRDQ1NEMzRjZBRkUxNQorOjEwQ0RDMDAwNUI4OTg3RTUyMzY4RkFBRjhBQ0ZCQjVGREVBMjQ5REZDNAorOjEwQ0REMDAwNTU2OUVCOEQ0OURGNTVDMUJFQjIxQjlFQzZGNzAxRTIxNgorOjEwQ0RFMDAwNjQ3QTEwRUM3RUEwN0JFNDZCRTRERkVBRDc2NTAyNzYyMAorOjEwQ0RGMDAwQkZGMDcxNzcyMUU2NjNFRDE1MzA5RTNGQTk1REYwQzE2QworOjEwQ0UwMDAwQkU3RUQ5RkJENjEwREFBQkExRTIzQjdFMDI3QUZDMDNGMAorOjEwQ0UxMDAwMkIxMTU0Qzg2QkE3NzhBN0ZBNjFBMkI1Rjc4RkJGQTBGMgorOjEwQ0UyMDAwRUYzRjM5NkM4MzRDMThDQTI3QzU4ODY3MkRGRjMzNkZENQorOjEwQ0UzMDAwMzNDQjYzQzkzQkJDM0UxNUNFNUI5MkU5MDM1MERGOTYxMgorOjEwQ0U0MDAwMzY4QUM0QUZEMzFCOUYwOEJFMUI3RkNDRjQzMkRFNEZBMworOjEwQ0U1MDAwQTFEMTJGNEY2OTI4ODE3NTZDQTQ4M0U5MjU3NUIzMEM4NgorOjEwQ0U2MDAwMzkyMkU0MTA4RjkzNTA3QjFBQ0ZERjJFREFCRDJFNTU3NgorOjEwQ0U3MDAwQTFGNUVBNzlGRUM3QTJCREVCNTI0NUZBQkUwRUQ2MkY0OAorOjEwQ0U4MDAwNUE3RjkxQzJGQTVGQjQ0RkYwMzRFQkZBRDdEQTZCRkRGOAorOjEwQ0U5MDAwNjlGRDI4QkI4REZEOENEQ0NCQ0IxN0Q5OEYwNjg3MzY3RgorOjEwQ0VBMDAwN0UzQzdCN0NFMkJGOUY1QjBGRjdDNTRDN0M0QkM0QTRGMAorOjEwQ0VCMDAwRTM4OTFGQ0YxQUE5REZFRkQwOUU1QUZDMzVGRjFEMEI2NworOjEwQ0VDMDAwRjFFOUYwMzZGMThGMEVFMkQzRjE0NUVCMDQyQURGOTQ1RAorOjEwQ0VEMDAwNkVEN0I0MDkyMTAwQTU3NUMyMTFBNTJBMEZDQjFFOTBFQgorOjEwQ0VFMDAwRTc2QTFFQTdBRDlFQ0VGNkFENUE3MzBFQUYwMEY5OUU0RgorOjEwQ0VGMDAwOTUyNzIwMUY5MEEwNUYxOTkwODI3NjkwMEFGMUYxRDJCOQorOjEwQ0YwMDAwM0NENkJFOTRCNjA3Qjk2QjdEOENDOTIxRDUwNzJBRThGQgorOjEwQ0YxMDAwOEJFQUE2NzU4NTU4N0Y5M0EwNDJGRkFEQ0RDNUI4REVEQworOjEwQ0YyMDAwOTc0RDE0MDk3RURGNzQwNEVEOEZCMkI2MjMyOTIwQUYyQworOjEwQ0YzMDAwNTQzRUQ3QzNGQTVCM0RDNThBRjc3OTY5NzJBN0M5RjEzOAorOjEwQ0Y0MDAwNUIzMkJGQUZDOUU2MTkwQjc5RkRGNzAxNTAzMUU0NTdFOQorOjEwQ0Y1MDAwN0M5RDMwM0ZCNTQ1NDYzOTBCNEM2NDcyRjlENjM2MTE4RAorOjEwQ0Y2MDAwRTVGOUUwMTVCN0EwMUM5RUQ5MkNDNDkxRTM2OTBBOUM5MQorOjEwQ0Y3MDAwNEIzRTFFNjJERkZCRTQ3OEFCQzBFNTk4RTk4N0UzNEVFOQorOjEwQ0Y4MDAwMjZEN0QzRTAzQkM4RjE0RTgxRkI4M0NDMUUzNENCQjExNgorOjEwQ0Y5MDAwMjY5NzE3OTJERjhBMkQyNjc5OEUyM0I3OUQ1MkQ3NEQ3QgorOjEwQ0ZBMDAwMzBFRTlENTdEODExRUU2OURGREZGREVFOURBODdGNjQ1RQorOjEwQ0ZCMDAwQ0NGQjk4RjZGRDdCNTM0MURGOTU0ODJDNUY0OUMzNjM1QQorOjEwQ0ZDMDAwOTVDNEYyRDlGQUMxQjE3RTk5MzJGOEEyRTAzMUMyRjEyQQorOjEwQ0ZEMDAwODRERDE1RDUxRjIyRjAzOUJCODcyQkI4NDk0NjNFMzc3MworOjEwQ0ZFMDAwQ0JFMURGMkIzRkZGMjg3OTNFQzRGOTQ3ODM0N0RDQ0JGOQorOjEwQ0ZGMDAwREE0M0ZFNTg4NEUyRTlCNTk2QTczMTRGRjVGNDczNDc1QQorOjEwRDAwMDAwQUUwNTNDNTdFQ0ExN0M0QkU3N0JBNkM1QzVFRjdCMDk4MQorOjEwRDAxMDAwRTEzQTUzREUyQTYyMUUzODkxMjJGOTM3QkFGNDcyQzkxNgorOjEwRDAyMDAwRjI5MDJBNUU3MDIxN0Y5NEVGNjBGOUE0RTUyRjdFM0M5OAorOjEwRDAzMDAwMEVGMzQ0OTZGNzYyN0U1NUYwMzk2RTZGMDZCQkM2MDE1QgorOjEwRDA0MDAwNUY5NzRCMkMxRkNBMkNFNzM3Mzk5OEZERDlCRDNCNjE0MAorOjEwRDA1MDAwMzZDQzQzRDhDMkNFRTk5Nzg3NkY5MTgxMEZCNTdBM0YxRQorOjEwRDA2MDAwNzRDODVBM0REQ0JGMEM1MkJFODVGRDc1ODA0RjdGRUUwMworOjEwRDA3MDAwNUNDQjgzRUFERUNBRTRCRUJDNEQ0NjdGQTk3QzRCMzM2MQorOjEwRDA4MDAwQzZCMTAzNUIzRUM1M0NGNzY5MkY2Q0MzRjg0MUEwNERBOAorOjEwRDA5MDAwMzRFNjNENkUxMTIzNTZDQ0NCMTQ4RjU4RDkzQTY1Qzg2RgorOjEwRDBBMDAwM0ZBQzZFQURDMkZEQjZFQTMwQ0ZFRjMzRTVCRjU1QkM0NQorOjEwRDBCMDAwQjBGN0M1MjA0NTREQzVBRjlGNzU4MzFFMzhEOUI5RDk4NgorOjEwRDBDMDAwMERGOEE0RkQ2MURFRTBGNzNGOTcwQzc5NTFGMUYzN0I5OQorOjEwRDBEMDAwN0RDNjdDQzJGMEFBOThGOTg0MjdFMTFGOTRDMUVGNzU0MAorOjEwRDBFMDAwNzA3RUQ1RjIzMEI3MENFMDc5REE5MUZDQTIxOEYxRkIzMgorOjEwRDBGMDAwQkU3MzNCREJCRTc4MEFGMkRDQkI3NzlDN0EwQUUwQUVGQgorOjEwRDEwMDAwRkNFQjY3NEY0MTNFMTNEOTY3Qzc3NTI5RjBEQ0VGMzA2MAorOjEwRDExMDAwNEY1ODZCRjcwQjA3RjdGM0I3M0U4QkY5RDU2NzNFQjA2NworOjEwRDEyMDAwQTI5RjczNjZFRkYxMENDODVGM0JCM0ZERUI1NDg4Qzc1OQorOjEwRDEzMDAwRERCNTc3MDZDNjJCRUZEQTM5NkQxMDg5QTFERkI1Mjc4QgorOjEwRDE0MDAwRjA2NUU4MjJGMkJCQ0Q3NDM4RDg3QTEwRjNBRTRFQkY0QQorOjEwRDE1MDAwNkY0NTdERDY5NzE3MUFBRTYyNzlCNjJBQ0YwNzZEODlDQgorOjEwRDE2MDAwOUQ0N0FGRTUzMTU2QjdERTc4REQxNUEwOUY1Qjk5M0Q1MQorOjEwRDE3MDAwRDc5N0Q3NzhBMTNDRDA3NzI4M0QyRkJGMDhCQUI1RjAxNAorOjEwRDE4MDAwM0M1RjEzREQ0RUMzM0YyODdEQzIyNkJBN0REMUJBRjA4NQorOjEwRDE5MDAwNTc4RkMzQjdENjAxNzFGMzQwMjMxNzgxMkYyRDRGRkY0RgorOjEwRDFBMDAwRTcwRURGMUUwNzlDRkJEQjkxMTA0QzYzRjQwQUNEMTJFNworOjEwRDFCMDAwQzBERUZCMjIwM0NFMzU5QzkwN0IzMURGQTM3N0FGRDU1OQorOjEwRDFDMDAwMDNGOThDRTU3QkRGNDNGOTM4QjNGMzMwQzY1NTA5Q0Y1QgorOjEwRDFEMDAwOTMzRjQzRkFGRTU4NUVCM0MwRTdCN0M5QzVGMjQ3Mzk3QgorOjEwRDFFMDAwREUyMUJGNTQ3NUUzN0I5RTQ3Q0FGODU2Q0IyRjhEOTczRgorOjEwRDFGMDAwNTdEQUVCMThDMUUyRDBGQ0RDNDAxNUY1OTNGOEJENTlDNQorOjEwRDIwMDAwN0RGOUE2QzI0NEEwRDMxMTQzOUVBRTM2NkY3MzdGMUUzNAorOjEwRDIxMDAwQUUzN0EzRjlEMUIxRjM3NkI1N0NDMTI4OUREODNBQTIzNworOjEwRDIyMDAwRTUzRjlGNjlFNjc5RDNGNDdERkE3OEM4ODM2M0VCNzVBRgorOjEwRDIzMDAwMjAyNEJDNDc2MkM4QTM5NjFGN0RDQTYxQ0E4QjBFNURCRAorOjEwRDI0MDAwNUM1RUY0ODVFMEZEREZDNUM3ODcwRTE2QUZENkYwRDI3MQorOjEwRDI1MDAwRkRFN0Q4RkE1ODQ5NjA3NjI3RjU0RkU1MDREQzE3NjBGQQorOjEwRDI2MDAwRkVFOTFEREMzRkQ1RjBBNUMxNUIxRjY2NzY0M0Y3MTZDRQorOjEwRDI3MDAwRTYxRjk4RTVCOTNBQ0U3RDQ5Mjk3QzlDRUFCNkZERTNFNAorOjEwRDI4MDAwNDBFRjc0MUZEOENERjk4REYxNzM3NUNCMTE5Njc3NEJBNAorOjEwRDI5MDAwRjU3MzQ4QUY5RkY5RkQxMkU2RkUzMjc4N0Y4MUY2RDgyQworOjEwRDJBMDAwRkQwNTVBM0U4REQ5REY0OUM5NzcwQkMwN0ZCMjkzRDlBRQorOjEwRDJCMDAwNDkyN0MzRTJDQzU4RjdEQkQ4MTI2NDQzRkU0MEJEOEI0QworOjEwRDJDMDAwREQ5NzIxQkExRDY4MUZEREU1OUFGODdFNjIwQTNDMTVEQworOjEwRDJEMDAwQ0NFQkE5NUJDNkYzODA3RUU2QzU3QjQ1RUI1QzU3MTNDMAorOjEwRDJFMDAwODBFNzdFQzA4RjJFQ0UyMDdCRkMwNEVDMzQzOUFEMjg0NQorOjEwRDJGMDAwNEY1NEEzRjBGNkQxMjNDNTQyNDI3QUZBNEI5MTc0RDAzMQorOjEwRDMwMDAwRTcxRkU2MUM5N0ExQkZGRjM0QzU0N0ZFNTMyMkY1ODNGNAorOjEwRDMxMDAwMjg1Q0ZGMTkxNEJDQ0JENEY4NzZCNTU2RjZGRjU0MzQwQworOjEwRDMyMDAwQzQzM0FBQURCRDFGODI3RDRFNUVCNkUzN0VCOEI4Q0ZEMgorOjEwRDMzMDAwMUVDNEY4RDg1M0VDNUU4RDgzM0JCRjdBMDZFRkU1Rjk0NworOjEwRDM0MDAwOTU5NTcwQkI1MDAwN0Q1MENBRTMxNEM3Nzc3RUY1RDQyNQorOjEwRDM1MDAwN0Y4MTFEMDk4REU5RjhBNTRGRDFGQTYwM0ZCNzI0QTA2MAorOjEwRDM2MDAwQkRERkIzMjM3MTFDQzQwMTRBNUZCRUVGNUFEMDE3QTVCRAorOjEwRDM3MDAwQTBGQkMwQ0U3QzYxNTBBODhFRjY3NzZDMjAyQjFGREIwMworOjEwRDM4MDAwMzYwQ0NGMDU1NEVDNzA2MTNFRTFDMTlEQkJBQTQxREY3NAorOjEwRDM5MDAwOUY3OTIxODE4MEJFM0YyRDc3RkQxNUNBODEzRDg5QTRFQgorOjEwRDNBMDAwNTk0NUJCNEZENUFGQUI4Qjg4QTRFQUVEQjkwQTI4MUIxMgorOjEwRDNCMDAwRjI1QjA4RTZCNzYwRkM4REYyNzM0NTVCMjI5RUZGRDBGRQorOjEwRDNDMDAwRDVFM0YyMUMxQ0MyRUY4OTFBMDI3MjQ3RUQ0NkQ1OThDQworOjEwRDNEMDAwRjdDQ0JFMkY0ODYwRkEyQjYwRURCRDg3REQ4N0MwRUEzMQorOjEwRDNFMDAwMDc5NERFMTI1NjZFMThDMkU0QjYxM0VCMkZENkY4OTVFQQorOjEwRDNGMDAwN0ZFRkRGMkZBQjFGNDg2MEYxODA2ODNGQUM3REI1OTVCNAorOjEwRDQwMDAwRERBRjYxQTZFRjRGMTMwNDdFMUVGNzJGOTdDNEJBN0ZERQorOjEwRDQxMDAwMjIwNkZDRUM1RTJFODEwNEUxRkU1NUIyREQ4RUY3RjFCMgorOjEwRDQyMDAwNTQyQTkxMzE5MEFGRkVBMkMyRjYzRjJBREQ5MTMxOTA4RAorOjEwRDQzMDAwQUZCRTg3RUJCRjRBMDcyREQzRjc0MzM4MUM1MDFGQ0EzNgorOjEwRDQ0MDAwQzRENkY1M0NERUVCQjRDQjhFRjdFMTU1QkRFQ0YyQTFEMgorOjEwRDQ1MDAwOUZGMEUyNTdDNzlFQzg4MzdDQjUwNENDOTNBRTdBRjk5RgorOjEwRDQ2MDAwNUY5MEZFNTVENkM4RURDMEZGQkREQkFENzgzRjY5RjdENAorOjEwRDQ3MDAwRjY0MzE5NjAzNzc0Q0I5MThDRTRGM0VDRUI1NDg1QUQzMworOjEwRDQ4MDAwODY3RDZBNkQxRTI3NkI5NzRFODY3M0JDREEzOUMzRjJCMAorOjEwRDQ5MDAwMzhGQUUyOEQwNDk2RDdEMTlDRTBGQjE1RDM3M0M2RkIxNgorOjEwRDRBMDAwNjU0RUQ2Q0UzNkRDOUI1ODZFOEJBREM3NUE0MDJGRTgwMgorOjEwRDRCMDAwRTI3ODYyRjQ1QzYxMEJGNDdCOUE3NEQ1MEZBMTI0QTkyNQorOjEwRDRDMDAwMTI3QTcxN0ZCQzdDNEI2NjNBRjhCQjA3RUM5N0UwQkVFMgorOjEwRDREMDAwRDUwMTU5NDU3RjEwOUU3QTdEN0NBMkQ2OUIyQkUxNzlBMAorOjEwRDRFMDAwRkFBQzVDODlDMkQxRDNGQzY5QzkxMDAyRjk4MUY2RDlDMgorOjEwRDRGMDAwQjFGNEQzREU4NDA0RTRBNzcyOUIzNUU2RjlDRERGNzI4NAorOjEwRDUwMDAwN0VEQjA2RjIzNjgxOERFN0NEOEU4RTdCNDAwRTI5MDBDNAorOjEwRDUxMDAwQzcxNEE3OEFGMzI5QTc3RTAwQkIyNzZBNEVBRUZFREM5QworOjEwRDUyMDAwRjYyMkE5MDFFQjUxRjk0MjdDMkMyMkVCOTUzQzY3N0Y1NgorOjEwRDUzMDAwQkRCMjY4Njk1RUFFOTQ4QjBBRUI5QjNFN0UxM0EzNzQwQQorOjEwRDU0MDAwMjJDMTE0QjQ5MzI0NEU0M0IyN0VCMDIxREY1RjkyOEI4QworOjEwRDU1MDAwNkM4MDJGODUxNDc5MjQxMTQ4REQ4MDcyRUEyMDYxN0M2QgorOjEwRDU2MDAwM0FBOTE5QzJENkExMUEwMkYxRjExMzdDN0ZENjJBQTlEMQorOjEwRDU3MDAwMEZFMzdEMzMxRDIyRUFGMzBCRTFFREJEMDQzN0MyNkRFRAorOjEwRDU4MDAwOTU2QTg4MTdFRDhENTkxRUIwQzc4NEEwOUY3QzRCRjkxMgorOjEwRDU5MDAwQTFBRTc2NjYyRTNCMTc0RTdDOTBFRkU2MjYwQzNFQjc4QQorOjEwRDVBMDAwRTdENUFGQzEzRUEwN0NDNkVFQjFGQTNFMDlENUQxRjFCOAorOjEwRDVCMDAwRTA5ODMxQzZGRjBBRDg3REY2RTZGMUZFQ0NFOTQwODI1QworOjEwRDVDMDAwRkIwREY3OURDMzVGQUY3NjdGMUVGOEVCODk3RjlEMDg0QgorOjEwRDVEMDAwRkIzMTRFMEY4OTgwQkQ5NEUwMjQ5MTg0NzE3MDRGOUU4MQorOjEwRDVFMDAwNzQ1MjJGQkY2RUMyQ0EyMzI4M0I4MzVFRjM0QzMxN0UzOAorOjEwRDVGMDAwMzdGMzM1RjE0QTlGRjdFOTQ1MTFEQjdGNkU2QUZGRjk5MgorOjEwRDYwMDAwRjlEQTZCRjgwOEQ4MzY3QThGRTY0NkYxRTJFMDczMDg2QgorOjEwRDYxMDAwMTY3OENGNzUwMTNFQzZCOUJENzU0MDQ3QTVGN0MzRkI2NworOjEwRDYyMDAwMDAxRkUzOUNDQzFGNEM2OTI0N0E3RjJERDdDOUY0RDUwOQorOjEwRDYzMDAwMEE3RUZGMzRGRDJCNzJFQUZBMjMxRTFCQzY0NzU3NzE4MAorOjEwRDY0MDAwQkNGN0Q1RDdFMjI2RkRFQURCMjVDMDZCQkZGQUY2NzgzQQorOjEwRDY1MDAwRjUxREIxRUJCQkUyQzE5MzEwMUI5RUE0MzhGRDA3NjMxRgorOjEwRDY2MDAwRDdBRjdFRjlCRDM3MjMyQUJDNjQ3QTAzODJGM0ZDREM5MgorOjEwRDY3MDAwNzJBRTEzRkNBQkM0MEY1MzhCMTk1N0IwRkQwMDEzREQxMgorOjEwRDY4MDAwMUNDMDdGOTQxRjFDQTM3NEVGRTFGRkIyNzVGNDFCMTE0MworOjEwRDY5MDAwODNGRTI0ODI3QzU3Q0NFMUExNjVFNzYwMEFERjhGMzlFNQorOjEwRDZBMDAwQjhEMzM3QjFGRENBQjk3N0IxMzhEMThGNkRBNUU4RUZERQorOjEwRDZCMDAwMUVFMUY3MDFDRDZENjQ3RUY1RENBNTZDMUY5MTk0QjE4MAorOjEwRDZDMDAwNzMzRTFFRkExRjhDNzcxQjc0NDJFOTdENUI4MzEwOEFDMAorOjEwRDZEMDAwNjRDMkJEMzUyNkZCQjVFRjdFOUM0NTBBRDQyRjM2QzUwNgorOjEwRDZFMDAwNUQzNDdFRDJDRTIzQ0RFN0Y2NzUyNkU3Q0Y4NUE0RDc2RAorOjEwRDZGMDAwMDU3MjZGM0VGN0ZFMEFENzZCOUFERTBGQUUyMzU5NzBBNAorOjEwRDcwMDAwNkU1RkI0MzhCQ0IwM0YyQUYyNzNBNkM0Q0RFRUYzMjNFQgorOjEwRDcxMDAwQkU2MUVDN0UzOTJEOEYyQjRCNEQ4NEY1OEQ4NEY5N0JDQQorOjEwRDcyMDAwQkVDRkIyRTQyQTc1OTBGRTlDOTY3NENFODFGNzgzRDQ2NgorOjEwRDczMDAwQzlERTM0RDA4M0YyMzk2QUQ3NTE1NzREMzkzNzgyQThDMAorOjEwRDc0MDAwQkE3MzY0RDQ5RTQzRTE5NjNERUNCRTQ0Qzk1MzQ0NEE0NworOjEwRDc1MDAwQzEwRUU0RjcwMzkwOTRBQkZCRUNBRUI3MjgxRTk2QUM3OQorOjEwRDc2MDAwNTNGMURDRUE0MjI3QjMzMzdGRTEyQUJBRDMzOTAxRUMyMworOjEwRDc3MDAwQ0I4OTVFNzZDRkFEOTE4RUMxOUQ2QzdFNzUzMEJGQ0M2RQorOjEwRDc4MDAwRkU3MEQ3Mjk1RTJGREE5RDU3NTM4QjAxRTMzODVFRkM3QworOjEwRDc5MDAwN0QwN0QxQUFCRUE3ODIzQ0ZFOUJDQzdFQUZBMDFGMUVGOAorOjEwRDdBMDAwMThGRENFQTYyNEUzQkRFQzBCRENBQjNGMDQzRTVEQzMwRAorOjEwRDdCMDAwRUYyMzVDNTk5Qjg1Q0ZENUI1Njk2ODc3RDZENzdBRjFDOQorOjEwRDdDMDAwQTlFMUM1RTY2REMwN0JERjZDQTM1ODdGMzY4RjlGRDk3QQorOjEwRDdEMDAwMTVENDk2ODE3QzBBQzk1MzEzODFCMjJEQkQ4NjgwQkRCNAorOjEwRDdFMDAwNkJFRkMzNEYwM0UyNDdFOTJCRkJCMTZDRjVCMERGOEQ2NAorOjEwRDdGMDAwOTAxQjY3MjE5RTY5N0I1MjRBQkYyRjcxRjkxRjA3MzkyMQorOjEwRDgwMDAwQjFBQjk3MTlFRTkxQjNBNjhEMzdERDM3NjhDMjlCQzZEMQorOjEwRDgxMDAwMUZEQjE4RkVENjBBOEMzRkNDRjg1QjJCNzdBQUIwQUY4MworOjEwRDgyMDAwQkNGNkFBQkU3QjY3MTA3RkQ0QkM2N0Y4RkIyRERCNjcxNAorOjEwRDgzMDAwOEI4QjNGNEYzMkRBQUYwQkYyRUI2RkFGQTNBRjFFRTQyRgorOjEwRDg0MDAwRkI4QjBGRDQ0RTQ0N0NBREUyRjc0OERFNUZFQkMzQTcwMQorOjEwRDg1MDAwMDhGOEEzRjNCMzY2MDcwOURDOEZDRTdFMUI4MjNFOUREQQorOjEwRDg2MDAwNDUzRUI4N0YxNjc4MTdGMDI3M0ExOTNFQUQ2OTM1QjhBRQorOjEwRDg3MDAwQkY2NjczMzI3Qzg5Q0UyMEUyNDU3NjMyN0M4OTRFQzYwMworOjEwRDg4MDAwNkYwQTJGNEI4MEJGNUM2QzhGRUYyOUZFMEUwMDdGRDk5MworOjEwRDg5MDAwRDIyNzFCRjBBNUE0MTQ1QzFDRkUxRUEzRjhBMzcwQTQ0MQorOjEwRDhBMDAwNzBGOTMyRTMyMTQ1NjFGNzUzNkE3MjE1Q0Y4RTdCOTQ4QworOjEwRDhCMDAwQ0UxRkQ2RUQwREI1MDQ5RjAzRTNGODhCMjM1QzZDREQyMgorOjEwRDhDMDAwNENCMUQ0RUM5NzAxMUZDOTg0QUYyNzQxOTI5RTRGNThBOQorOjEwRDhEMDAwRUEyMUZDQTUwNTg5MEE2NTgxQzE0MTFBODYxOUVFOTVFMAorOjEwRDhFMDAwMTQzRDkyRTk1RTM2NzUwM0YwQzFGQTQzQjIwNUVFQTMyQQorOjEwRDhGMDAwMTM5NzVFNkQzODBGMkFDRUY2MjVBOTg4NEYzRkRFRDNFOQorOjEwRDkwMDAwRkM2MEFEOEFGNDVCMDc3NDg0N0I0MEI5RkY3NTNGQTc2OAorOjEwRDkxMDAwRTcwM0ZDMUVDQTU1NUMzRUQ2NzI3OTc5OThDQjQ5MUQ0NworOjEwRDkyMDAwQkYzNzc5Q0Q0Qzk2Njc5NTkyNjNFMUY3OTU0NTg4M0U3MAorOjEwRDkzMDAwOEYyOUM5MUIyNjBBODUwQjZENkExNTlGNzhDRjIyNzkxRQorOjEwRDk0MDAwREYxQTFBNEREQjI1NjQxMzFGRjA0OUQyRkJGNzg2RDg4NgorOjEwRDk1MDAwN0Q4RDQ1ODNDMTBFNEFEMkVFNUY5Q0EyMjZDREMxODM0OAorOjEwRDk2MDAwQjAxMTg5RjkxRDU0MTVBMjFGRDM2OTg5NzU0RjU1OURCMgorOjEwRDk3MDAwRjc4MDBERTJBMUYxRTA0OUYwRkEzMkVGQTdFMzI1MzQ5OAorOjEwRDk4MDAwQkFEMDdFMUZFMDJGOUFCMzkwOTY5RDhEMDkxOEZGNEI1OQorOjEwRDk5MDAwRTBCRkNGRTJBNDcwOTdFQUU4MURFRjFFRUE4REFFQUJDMAorOjEwRDlBMDAwMTI1RDk0OUUxRTgwOTEzRTFGNjkxQzg5QkZDQkYyQTgxOAorOjEwRDlCMDAwNUM4NEJGRTNGMjI4NUY0RkI1N0JDRUI1NzZERjcwRkRBOAorOjEwRDlDMDAwRThDRUJCQ0NFMEI3QUU5NzdERDhDRTMzQzUyOEZGRUIxMQorOjEwRDlEMDAwQjlCRTREOUU2RUU0NzM0RERGMUVFREQzQjdGRTExMDA1MAorOjEwRDlFMDAwNEZFQUI5RTlBOEM3NTI2RTg4QUQ3N0VCNjQwNUVGMkQxMQorOjEwRDlGMDAwQUYxQkNCRTQzQzU4QUNCMEZCNEJGQkVCMDE4QzUzOUYxMworOjEwREEwMDAwRjU4RkQ5MDg3QTU0RTNBQkU1ODRFOTlEMjA3MTc4NzFFQworOjEwREExMDAwMURFMkY3REI2ODc2RjA0QUI4MDc5MEVCNTc3ODhBQTNFNworOjEwREEyMDAwRDhFRjBGQTRDRTY1RjdGOUFFRTFGNzU4M0Q0NEY5OEE3NworOjEwREEzMDAwRTBCREE3NUU3QzVFRUQ2MkZCMTNDQjZERTNGMTNFQjUwRQorOjEwREE0MDAwM0FBNzA1RjU4NEY0ODEzNTA0MjY4N0I0N0Y5MjA3RTI2RQorOjEwREE1MDAwMDU5MkVDRURGNDQxQkNDRjI1ODVFMURFREMzQTY3MUU5MgorOjEwREE2MDAwREVGQjJFMjRFNTc5ODBGRTVGQkExNjBDM0Y1RjNFMUQ3QgorOjEwREE3MDAwOUQyOERFOTdFOTQ5MjkyMjFGNjVFMzZFMDA5RTQ3OTY5RgorOjEwREE4MDAwM0QzNzEwODgxQjZFNDhBOUIxMDNERTI2Qjk1ODVDQkYyQworOjEwREE5MDAwQjEzODFGRjE0OEYxN0I5RDZCNjBCNDlGNDFCM0FGRUU4RAorOjEwREFBMDAwQkIwNzBCQkFERDEwRTc1Q0YzQUQyRTY2MkY5MUY0MjBCNworOjEwREFCMDAwMTlBNTkzRjM0NkVENzc0RUQ0MjBDOUQyQzlGQkYyRDExNAorOjEwREFDMDAwODUwNEY2ODdGQUNCNzkxQzNEQjY5OUU5QjExNTQyNkMwRAorOjEwREFEMDAwM0RBNkQ5OTk5QTFFOTM0REZBNDE3QkQ2MEY5RjY5Mzg3RQorOjEwREFFMDAwQTdBNUE0Nzg4MTc3RTExOUI0NzhDMUJFN0JCMUZFRDYzMQorOjEwREFGMDAwMjRDNDQzMERFMDgxQTQ1RERERTdCRkZFNjAwNEQ4OEY0MAorOjEwREIwMDAwRjkzMUY5Q0RBQ0JGMTZGNEFERTdCRTU0QTBEMzA5NTkzNQorOjEwREIxMDAwMUQzNDA3RjhFOTUwRUNGNTdDRUEyMzk3M0UwQzdDQjAwNQorOjEwREIyMDAwRTBCN0EyQTBERjRGMjkzREI3MTJEN0QzOTI3MzEzRjEwQworOjEwREIzMDAwNTlENjM4MTNGOTlFNDAxNDVDRTc4NzFENkZCQURCMEQ4OAorOjEwREI0MDAwNzAxRDZGRTQ3OTAwNEQ3MjA4RjIzMzhFMzdERThERjc2OQorOjEwREI1MDAwOTU0MDlFQjdBOERCREYyNzc5MkFEQTk3REEzRDYzQzdCRAorOjEwREI2MDAwNDM3N0JBRjVGQkJCMjVCRkIwRkJDMDZFOERDNzVGMjUwMQorOjEwREI3MDAwNERCMUZEN0E1ODQzMjE3RTRBMDFDQzAyN0I5OERBMzdCOQorOjEwREI4MDAwQkQxMUIwN0YzNjVBQkQ0MTEyMkQwNzFGQjFDN0NDNEYxMgorOjEwREI5MDAwNUNFMjlBRjEyOEUwN0Q4OUNCRjcyNEM4Mzk3MUIyN0IyOQorOjEwREJBMDAwNDFFM0YzMzkxQkY3MTg2QzAyQzM3RUQzRTMzQzRGNTNCOAorOjEwREJCMDAwRjJCQkY1RjdCQkY1RERDN0M5RTMyNEM0MTZFN0JCNDNFOQorOjEwREJDMDAwRkI3RDgzMzhERkREMkM5RjgzNzg2MjdGRDdGQzg0ODRFNAorOjEwREJEMDAwQTg5RkQwMDZGM0E4NkEzQzU1RkYwMUUyODlGQjA5MUMwNworOjEwREJFMDAwRUUxMzMyODNGQkM0MzM1NkY2M0IzNzI2QkUzOEMxRjNGRgorOjEwREJGMDAwNDcxNjA5MENBRjFBN0Y5RkU4QjM3N0ZDNzgwRjhEOTkxMQorOjEwREMwMDAwRkY4NDhEOTc2RTk4NDRGQkZEQUM0M0M2Mzg1QzI1RTVEOAorOjEwREMxMDAwMUZFMDFCNjFFMzI0Q0M1RjE3MUU5OUY0MzBFNDI1N0RERgorOjEwREMyMDAwRkVCQTg4REZDQkNGRDlGMDdCRjdDRkJDMUJFNjQyOUM5NgorOjEwREMzMDAwRTcwRDE5RUZFQkZFQkM2MzQ2MjI4QkYzMThFM0QwMEIyNAorOjEwREM0MDAwREQ2QzlEM0ZDOUU1QkVFNERDNkFFNENGM0VGRTY4NTg2QQorOjEwREM1MDAwQTg4MDVDOTU5QzdCMDhFRDk5OTIyRDAyREUxMzQ5ODI4OQorOjEwREM2MDAwQkRBRjRFOTUzODFGNEU4NkY2QTcwQjk3MDNCRUE3MzQ1RgorOjEwREM3MDAwRTBGRTQ2RTk2NkFCNzdCNUQwOUZDRTI3NURBQUUxNUVCMAorOjEwREM4MDAwRjVEMkFFMzVEODJGQTFGNjU0OEE2RUJGRkIwNENGMDM3MAorOjEwREM5MDAwMkUzREM3RUUwNzI0OUUyMDQ5MDNCRUU3N0EyN0NBQkY2MAorOjEwRENBMDAwQzY3QjVGQkJFREIxRTNFQ0RGNzA3QkE2RTREQzY0ODM5NQorOjEwRENCMDAwREYxMDlEREZGNzk5N0NGMkY1QkNCNDZCMjI4M0FCNkY2QworOjEwRENDMDAwM0UxQjI2QzU5QTRGNzQxRTUzQjA3RDc3NTJFQ0YxMzMzQworOjEwRENEMDAwMzk5RThGRDU5NkMxQzkwRDUyQTZCMDdBMjUwRDc3MkJFNgorOjEwRENFMDAwQTA0RjRBOUE5MjkyMDVEREJDNEExQjJCMEM3OTE4QTVDRAorOjEwRENGMDAwNERDNUNBM0M1REJGNTEzQTM4NUU5QjNBMkE0QTg3Q0MzMworOjEwREQwMDAwODdFNDJCOTczQjYxQkQyRjcyQjk2MUJDOEQ4QkYyN0Y4RAorOjEwREQxMDAwQTI0MjdGNENGRjdDMjIzNzY0RDRBMDdFQjlEMzFERUI5NgorOjEwREQyMDAwNUM0M0E2NUIzNUM0OTU0QTFCMzk3REE4OUQ5Q0E3QTM3RgorOjEwREQzMDAwOEY0NjE3NzNGQjYzQ0RBNUY5M0Y4MTc4RjI2M0VDNTZFQworOjEwREQ0MDAwOTBGODdBQzc0NEI3Q0NEODc4OUJEQzg3QjcyQ0NDMDczRgorOjEwREQ1MDAwQkEzMERFQkU2M0M4RkJFOTg3Mzc0RTVGMEQyRkRBN0IzMgorOjEwREQ2MDAwNkExRkU1MDJCRTI2NDNDMDY5MjBGNEMzRTg3RjIxN0MxOAorOjEwREQ3MDAwNDVDN0U1RjQ5RjFBN0IxRUZFQkU3OTJDMjU0MTZBM0ZGQworOjEwREQ4MDAwMkNCOEUwM0NFRTIzNDFEQjc5RTZBMUQxOUY1QzY2QTA5NAorOjEwREQ5MDAwQkZGRkExRDE1NzgyMUM2QUY0NUU3MEUwMzFFNERGMDU1OQorOjEwRERBMDAwNTQxRTYxNUZGRTc4QzNERDg2RjUyMTBBNUYxQ0JBOEZDMQorOjEwRERCMDAwMEE5MkVDRkNGRjczNzRGRjQ0MEU2NjQwREU1NzcwMUQ0MAorOjEwRERDMDAwNUI0NzRFNkM3QzMwNDM4RkU3MjVBRUE5MEI4MTJFNjRGOAorOjEwREREMDAwRDNDMDhCNUEzRjgyMDVERTBFMTVENzI1MTlFMzYxQkJGMAorOjEwRERFMDAwNURGRTgwOUJCRTJGRTM3RUY1OEFBNEMyMzFCMUQ2N0Q1NQorOjEwRERGMDAwRUExNzRFODFGODczNURFRENDMjkxMDZGOTNCOUREMDhGOQorOjEwREUwMDAwQkZBQzA1RjYyNjVDODExRUVCN0VBRDA2NEVEN0ZCNkJFNAorOjEwREUxMDAwNkIzMDdFNEQ2QzQxRTJEMTlGRjcyNUNDMkVGQTg2QjA1NworOjEwREUyMDAwNzg4QkQ2NEU5MUZEMUU4ODdGMkFGQzNDQjIyQ0Y5NTc4OAorOjEwREUzMDAwNjZFNjQxMUMyMzI1MjdBOEMzREY0MzZFNjZEN0FENDk5QworOjEwREU0MDAwM0JFMDgxN0M1MjJCRUQxRkUyMzFCNjc0RTlBQzcxOUY0RgorOjEwREU1MDAwOTI5NTczODQ0OTMyQ0M0NzRFMDkxMzhDNjc2NkQzRjc4OQorOjEwREU2MDAwM0E3QzJCMjkxNENFRjNGODlCOTJDRDhERkI0NTEyNjFBMQorOjEwREU3MDAwNzY5QTM2N0ZGQTA2RDdCMzA3RjhCQUI0MUNFMkI4MjkwNworOjEwREU4MDAwNjA4NzU5RDAxRjVBQ0ZFMzk0QkZBQzJERTI3ODkwNzBEMQorOjEwREU5MDAwMURCMzI2QjFGQTRBMjI4M0RCMEU3MTZCMTFENkQ1MDg2OQorOjEwREVBMDAwOTY1RDcwQzM4RTg4NTc5M0UxRUY4RjI2MTExNTdGQTc3QgorOjEwREVCMDAwNkYwMDg5RDRFMzNEMjY1M0JCRUU4MUY3QkUwNEZGMTYwNQorOjEwREVDMDAwRTA4MzJGMDc3NzdFMjg0MDFDQkFDODdGMDlBQ0JGOEQzRQorOjEwREVEMDAwNjIzMDQ3QTVGNTdGMjVGNkU2NDAzREY4N0RBRkY3OTMyNAorOjEwREVFMDAwRDk3MzM4RTQyREZCNzVGQjUyRUM1RTRFNTUxRkQ3MzNDQQorOjEwREVGMDAwOTc4NzJGOTU0Q0ZCMzU3RkJFNDRGRkJEMzlDMUI3MEJDQgorOjEwREYwMDAwRTA0OEY5NThDMDdEOTgzQTNCQkJEN0E3Q0U3NTczMjIzRAorOjEwREYxMDAwQUNERjg3MzlCRDkwRkVDMDNGMURDQzhFMzkyQkE5ODk1RgorOjEwREYyMDAwQzkxOERGQ0NDQTdEQzUzMEJFRDc1MDk2QjhGRkI2ODlCOAorOjEwREYzMDAwRjJBM0E0QkI5Nzc1OTRFNEIzMDBCRjhDNkVBMEVGRjU3OQorOjEwREY0MDAwRjQ4QjExNTc0Qjc2RTJGNUI3MzFGNzYxMzRGOEU4Qjg0NgorOjEwREY1MDAwMDRGMDI3OUUyQjY0RUJBQjg5MEZGNjA4MENGRUEwOEIxOAorOjEwREY2MDAwRkI1QjI0MjgwMjNERTc2OEY3MDU0QjJCNTg1OUZCQkRBNgorOjEwREY3MDAwMDhBMDIyODVFMzAzNkQ3RjgxQUM2MDY1QkU0RjE5OThEMAorOjEwREY4MDAwQzdGNjIxQ0RGMENDNjk3RkEwMTNFMkZBNzNEQTA3Q0Y5MAorOjEwREY5MDAwODdGREE5MzlDRTMxN0Y4MkU3MUVCOUY3NDAwMkQ4ODFDQgorOjEwREZBMDAwNzcwQjc4RkVFM0M3QkY3QjQ1NEVBMENGOURFRjZDQzRENworOjEwREZCMDAwRjNDNkE3QjlEQ0RENEU3QUYxMUU3NjNGRjFGMDdERjJCMworOjEwREZDMDAwMTBCRTlGMDczRjMwODdFNUIwMEM3RUZBREM0OEU4NDc3QgorOjEwREZEMDAwRDdEMEQyNkRBRjg0QUUwMUIzRURGNjhFREVERjgwMUFGRQorOjEwREZFMDAwRjA4NzNEODVCODA3QTBCNTZCRjNCRUNBQ0FBQzVEMTQxNworOjEwREZGMDAwMEYzNjZFOEZEQTcwNUVEMTc5REIxMDBGMUZGNEU1OEQ2RQorOjEwRTAwMDAwMDc5MTFFN0Q3OEUyRjcyQTY5NzhFOTlCNzdFMkNENTc4MAorOjEwRTAxMDAwNDM5QzM3OUUzRTlCRTNDQ0ZBMTNEQkZDNjA3MDk5RjE4NgorOjEwRTAyMDAwRjQzOTdDQTI3NkU0RTc2RTlGM0Q5MUVBQjc4RkREM0UzRQorOjEwRTAzMDAwMDczQzJCNkRCRDE5RDIwODk0MTczNzk0QUI0NUZGRjAwMAorOjEwRTA0MDAwNTQ4QTg3RDNDM0ZDOTcwQzA0N0M3NDBFQjgyODNERkExRAorOjEwRTA1MDAwQTE5REU5MDE5Mjk3ODFGM0QxRUU3RDNGNzhFRjcxMTc5MQorOjEwRTA2MDAwRDg5REY1M0JERkNCODA2Nzk1RDhCNUY2MTY4QzZGOEFDNworOjEwRTA3MDAwRTgwRjlENkRCREU0QkNFN0MzM0U4NEI4MTM1REZGNDY2OQorOjEwRTA4MDAwMjc2QTdDQzhFNjc3MDczRjVGNzM0NzZCMDI5RUFGQjk4QworOjEwRTA5MDAwNjNBOTY4QjhCN0Y5OEVBNTJDRUY4RTQ4OURFMzZFMzI2MAorOjEwRTBBMDAwRDhFQjJCRTJGNjAzNzEwMDczM0ZGMzk3MTY5MDhGMDdCRQorOjEwRTBCMDAwQzAzRUFCNjcyQUM2MDU5RTYyRkMzNTdGQkE0Rjg0N0NBMgorOjEwRTBDMDAwRTRDOTJCMDU4Q0I3NEMzQUFBQjY3NUQxRjJGQzUwMTJCNAorOjEwRTBEMDAwRkVERUQxRkM3Qjk3RTRDMjNEMDRENTlEMkNCRTM3NDhDMworOjEwRTBFMDAwNUM5Q0YzMzM4ODlGMUM2MEVCMzg5NDE3ODM3QzNCN0RFQQorOjEwRTBGMDAwQUE1MzE3RUZFRjk2NkI3MkUwREVCREUwNkQ0RTFGRjA5NgorOjEwRTEwMDAwNEZGMTREQkUwRkYwRjcxMjc5MUM0MjVCNTc3NzM1MTY3MQorOjEwRTExMDAwNjMxRTZCRjE1Qzc1MjJEMEJEMzg2Q0M3REYxRjJDQjY1NworOjEwRTEyMDAwMTFDOTQxRjU1OEIxNDQ2Q0YwMUNBNDEwQzkwRTRGMDczOQorOjEwRTEzMDAwQjFDMTMzN0YzOUJCMjdCQkE0RjE3QUI0MEZEQzEzOEI5OQorOjEwRTE0MDAwMTRCOEZGQjZCOEZERDkyRkEwN0RBOTE0RDlDRkNFQjU4QworOjEwRTE1MDAwMzBGQzE0QjcxRkZBMUFGODY3QTFBRjA4RjMwRUJGQjM2QgorOjEwRTE2MDAwNDUzMUY4N0Y2M0MzQzZGMkU1NkRDNjcyNEVDNDU4Q0UyMgorOjEwRTE3MDAwRUQzMDk2QjdDMjFENjczQTNCRTJDMDVFMkJBRTEzMTU3OQorOjEwRTE4MDAwQTdEODM5QkQ5NzA0NTg5QjIwMUU2QzQ1Nzk5QTU2RDE2MworOjEwRTE5MDAwOUUwRkZCRDFBNzlFNzc1OUUwRkI5RUJGMzBCRkI3Nzc5QworOjEwRTFBMDAwQUIxREVGN0JEQkZGN0IwNzcxNDA1RUUxMEJGNjhERjA3MworOjEwRTFCMDAwRkQ5NDIzOUMwRjcxMzg1QTlGRkRDRTU2NTE3ODBDRjg3MAorOjEwRTFDMDAwNkYyRjVFQTZGOUU5QTE3MTMwQUYxN0ZGQ0FGMjY0N0EyQQorOjEwRTFEMDAwQjc1QUYxRjc1MzRFRUQ3RUY2NzlEODE3M0JCNTc1Mjg0RgorOjEwRTFFMDAwREE1OTJGMDk0MTBCRjQxQjVDQzVFODZGRTZEMzhBMkQ4MQorOjEwRTFGMDAwNDZCRkY4OUU0NEE2NkY3QTA0ODZFRjRCMUE4REYzQkU5NQorOjEwRTIwMDAwMzQ2NDJDRkYzQzkxRjk1M0YzODhFRTdEMjZFQ0RGQUJCMAorOjEwRTIxMDAwRjU2OUIwQUUzRTFERkJCRUUxRkJCOTVDM0NGNzlDQTJDQworOjEwRTIyMDAwRjFBREM4RUY2NzIzQUFFRUZDRDI5RUU4RkVERDVENDNBOAorOjEwRTIzMDAwMjFBRjAyNzAzMTIyRkFCRUMyMzRBRUQ2N0Y1MTIyREI0QQorOjEwRTI0MDAwODc0RkUxRkIzM0JENkY4ODg4OUY5M0E2REYyREVDQjMyQQorOjEwRTI1MDAwRUI2QTZCMDY0RkQ3QUQ0MzI1OERGQjUzOEJDMTNGNkFFRAorOjEwRTI2MDAwREE5RjNBNEZCN0JFNTQ2RTNEOTg3QTJCRTYyNTQ5RjhBRgorOjEwRTI3MDAwQkI0Qzk1NzM5RTc5Njg3MjBBQkMxN0MzMDAyRjdDODdDQworOjEwRTI4MDAwQjg1Nzc3RjgzNzZFQTg0N0VERERGMUEyMEVFRkE1OERGMAorOjEwRTI5MDAwNzcwRjlFQUU5M0QzQkY5NTJGMzU3OUFBRTRGNkM5QUUxQQorOjEwRTJBMDAwODk5RDg1OTAyNzVFRDFDODdFQkZBOTIyRkNBMzFCRTE3MgorOjEwRTJCMDAwRjcxNzQ5MTMzQjY3OUEyRjkxMjI5MUNBNEZFNUY2MUYzMgorOjEwRTJDMDAwRkQxMDdFOEYyQkYwRTQwNDJGQzA0M0JCQjgwOURFNTc0RQorOjEwRTJEMDAwQjQ3QzhBRTcwOTU2OUI3RTQ3NDA3QkVFRTNGNEE1RjVDNAorOjEwRTJFMDAwMjMxNjVBN0ZGNUNEQ0UzMkQwNEZCNERGNTdBMDdDMjAxNQorOjEwRTJGMDAwNkIyM0RFNkZFMjNFQzFFMkI0RjRGREZCRjA5MzI4MjcwRQorOjEwRTMwMDAwMEE4MjZGREU0QTlCOUUyMkUxNzdBRkM5ODQ3OTFCRjlBRQorOjEwRTMxMDAwOENGMkFEMDA3NjU3RUY2NjAxN0ZENzk2NUE1QUY5MzdERgorOjEwRTMyMDAwODA0OUVENUI4Njc5QjdGNEZCMURCMUNFM0IyRjBBMTkwRQorOjEwRTMzMDAwRkIzMUQzRkZGNzlDN0ZFOTVGOTY5RThGQ0NGNTA2Q0MyRgorOjEwRTM0MDAwMEFFMkI5QzRDQUE1NTRERkU5RUNGQ0NBQTMwRDc4OUY2MAorOjEwRTM1MDAwQTM3OTFDMENDMkU5RjIwRDYwQkQ1NDUxQkVFRERDNkUxOAorOjEwRTM2MDAwMjA4MjJEOUZFN0NEOEU2NDY1QkNCNzEwRjg5NTMyNEFBOAorOjEwRTM3MDAwQzU2NTY0QkEwQUY4QkU4MUNDODRFNzRCNDJFNDIxNTFGQQorOjEwRTM4MDAwNjQ3QTAyRTM0MERCMTI1MDRGNzQ3QkJBOUU3OTAyRjg0NAorOjEwRTM5MDAwQUI2NTJDQzY5Rjg2RjBGMzlFREQ2QTA0RUY3OUVDRTE1NQorOjEwRTNBMDAwRjFDOTZFMEYyQjk3QjdEQjMxMEZFNkQ0NjkwNUY1RTg5RAorOjEwRTNCMDAwQjJGMDQxMzdEMEEzRkI3OUJCMDU3RTk3RjRENEY2MDFDOAorOjEwRTNDMDAwMDU5MDI3RDkxRDY2RjdGRjlFMEMwRkMwREY3RjhEQjcyNAorOjEwRTNEMDAwNkU5OUY1ODFCNjRFMUU4MTdGQzI3QTlBRThGQjA2RDYwOQorOjEwRTNFMDAwNUJCMjgyRTU5MTBFMUE1MDkzMTNFQkY3MjRCNDc2MjlCMQorOjEwRTNGMDAwNEE0RDBFRjgyOUZGMEJDOTM1NDAwMjAwODAwMDAwMDA4RAorOjEwRTQwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJERDdEMEQ3ODU0RDU0NworOjEwRTQxMDAwOTlGMEI5NzNFRkZDNjU2NjkyOTlDOTI0OTk4NEZDNEMxNAorOjEwRTQyMDAwNDIwODAxMDI0RTQyODg0ODUxMjcyMTYwQzA1NDA3OEFBMQorOjEwRTQzMDAwMUE3RjhBQzM3RjgwRkM4OUI2MUI5NTZFMjYyNjYyNDJBRQorOjEwRTQ0MDAwNTFDMzFBMTExMDcwNDA1MUJBNkExQjVDRDQ2ODgzQ0Y1MworOjEwRTQ1MDAwODA2OEIxRDU3RUIxNzZCQkZFRUNCMjIzQjA4ODU2MjA4MQorOjEwRTQ2MDAwQTJBNUI0REI5NkVGN0RERjczRUVDQ0RDNDlBMjc0NzcxNgorOjEwRTQ3MDAwQkZFRUYzN0NFOTQzQUZFNzlFNzNDRkNGRkJCRUU3RkQ3MgorOjEwRTQ4MDAwM0Y2Nzg2QkU2QkY1RUVDRTY3RjAxN0NDNTc1QzhDOUQ3MAorOjEwRTQ5MDAwMEJCOEJEMUJBMEJDNTg4MjU3NTczMDY2NzFGQThERjY3OQorOjEwRTRBMDAwMzRDNjZDRTU4Q0Y5RTA5RkYzODhCQzVCODZGQUUzQjI3NgorOjEwRTRCMDAwRjdGQkY2QjE4QzJENjM3RTAzQzM2Nzc5QzBDMDBBRTAxOQorOjEwRTRDMDAwOUI0RTY4OUNDOUQ4NTI4NTg1MTUyNzNDMTdGQTNFOTAwQgorOjEwRTREMDAwQTY1MDk5MzFGODdFRTk3NjI5RDQwMURGMkZEQjY4NjRGNAorOjEwRTRFMDAwQ0NDNEU4RUYyMkZDNUJEMTBCRTVFMjU4NzkxNTBCMTk5RgorOjEwRTRGMDAwOTgwQ0ZGQjEzREFFMURGNEJGNEEwOTFGOTQ5MjE5NUIwMQorOjEwRTUwMDAwNkQ2MjYxMEJGNEJCRkEyOUVENzc2QjU4OThFNkQzRjA5NgorOjEwRTUxMDAwREM0NTYzN0NGRkIwM0VDNjYwNkFCRjYzRUFCQTdDMUUxRQorOjEwRTUyMDAwRkIzNEM2NUMwNjI4QzNCQTg3REVEMTg3MTAwRUZGMjFGNAorOjEwRTUzMDAwRkI2OTVENkI1ODgwRkFCOUE1QjU4QTFENEY2NUFDRjlDQQorOjEwRTU0MDAwRUVENkNDNjVGMDNDREI3QTRGRTZCMkE5NTA4RkYzODA3MworOjEwRTU1MDAwRjFBRDhDN0ZDRjYwNUQ3QjAwNjY2QkFBNTkzODA3RTYxMgorOjEwRTU2MDAwQjcxQ0Q2OUI1NDA2RTUwMTI5M0MxOUNCMjYxNjRDMkUyOAorOjEwRTU3MDAwRTNFRjUzQ0FGODdBN0Q3MUYzQUI2NzNEMzQ1RUZENzYwNQorOjEwRTU4MDAwRUQ3QkY2RUI1NDgyNjcwMzFCQTQ3QUY2NTQ1QzNEQzAyNgorOjEwRTU5MDAwQTM0MUMwQTFFMTM5NzgxRjA3ODcxOUNGNDk0MURCNjU0NQorOjEwRTVBMDAwNTgwQTc1QTRDM0ZDOUE0RTMxQjYwMTRBNERGQjJGMUE4NgorOjEwRTVCMDAwMzVGREIzMUVDNjAwMEUxOTQ5OEM5OTAxNUY4RjRBQUMxOAorOjEwRTVDMDAwQUVBRjg0QkU5QjMwN0YzMkI0QzFCRkFCQjFEQzRFRUQ4OQorOjEwRTVEMDAwOEUwQUY4M0Q3QUMzOEFDQzAwQjQ3QkQ4MDFFNTJDMDFDMQorOjEwRTVFMDAwRTBFOTMwODYwRTA3QTc3MkQ4MDRFMzI0NEQ4RDk2QTk4MgorOjEwRTVGMDAwQkVFMjNFNUU5RTZGMkZBRUQ5OTJDREQ4NjY3RDIwRDMwRgorOjEwRTYwMDAwMEU0MDVDMkFGQkRGRDQwMUZDOUU3MTA2NkU0MEJDMkNFMAorOjEwRTYxMDAwRDVGOTcyMTU1QzJGRjMxNUY5NjExRUFDOTVDM0UxQjEwNAorOjEwRTYyMDAwQjI5NjA5MkQyNUIxNzlDNUU2QzdGMUJCNTlFQTBCRUJDNgorOjEwRTYzMDAwODBDRTgyQUY0OERFM0QxRUE0REIyMTdEQzAxQTZCRDdBMQorOjEwRTY0MDAwNkM5NzY4MUQyOTg3MjI2RjhFNDFCQ0JGMjhCMURERDAzMQorOjEwRTY1MDAwNkVBQkY0RjE5QjYzRTBCQkFENzMzREFDMDNDQTZFQzAxRgorOjEwRTY2MDAwOTM1Qzg2RUY1OUE3MDQ3MDI5REYzRkZGOEUzNzEwQ0ZFOAorOjEwRTY3MDAwRTU0OURFNzFGMDY4REM1RjI5Mzc1QTY5RkRCN0ZCNjE1NworOjEwRTY4MDAwM0UxOTk2OTY1RDNBQThDRkI4QkRCODBDRTkxQkQ2N0Q2OQorOjEwRTY5MDAwRkIwMjc4N0Y5N0RENDNFMzY1NUEzOURFRERGNzA1RjM0QQorOjEwRTZBMDAwRDc5NkUwRjhGRTNCREU4MEYxODYyNjI3Nzk3MUZDMENEOAorOjEwRTZCMDAwODA5NUNENDlDRjJFMzNCNjYzRUQxMkI2N0IzNDk5RjdGMgorOjEwRTZDMDAwOUZBNjkzNkY5RjhGRTUzMjVFNzZBRTkzN0NCQjg5RjhGMQorOjEwRTZEMDAwMzZEMUJBMzM4Q0FDMDZFNzg5RUY0MzI1QjQ2NTdDRkJCMQorOjEwRTZFMDAwQTgzRUM0RjEzQkFCQTUxNEZCQ0IxOENCOUYyRTQzMzhGRgorOjEwRTZGMDAwMUJGQjc5NUJDNUY3NDBBNjhFQTVFMzdDRTFCRjYxM0VCRAorOjEwRTcwMDAwNzdFREFCQ0M3MEMyRjc2RjdGNkU1Mjc0MjlGMDc0MzMyMworOjEwRTcxMDAwMzY4OEVEOTRCMDk1RTFCM0IwOThCNzM3ODlGNkE1QjNENAorOjEwRTcyMDAwMzI3MDMzQjg3MkI1RURDRUVBN0QyOTUzMDEyRUMxNzczMAorOjEwRTczMDAwNjU4NkY4RjhDQUVBNEI3MTQwQkI2RjE5RjgzQTEyRjFENgorOjEwRTc0MDAwQjgxM0YxMDNFQjY5QkUwMDMzNEY4REMzNUJERDc5MDM3MgorOjEwRTc1MDAwRjZENzdDNDE2MUExQTlCMUY3OUZCNzk5NThBODI4NTY2RgorOjEwRTc2MDAwNkVBODNGMzQwN0RCMzVCMkMxRjU0ODU3OEQ3RDE2MTZDQworOjEwRTc3MDAwOEFBM0Y3NkYyNThEM0NBRTRBREZDRDE3NzQyQzk4NEFEQgorOjEwRTc4MDAwRTQ5QkVEQjcyMTdDODZENjJGQzdGOTFGOTBEODFFODY1MworOjEwRTc5MDAwRjUwNjE2OEMxQkJGRjk4MjUzNUI4RUNFMzM5REZBODkyQQorOjEwRTdBMDAwQjU2M0RBNzZGREJGQTc3NjZDN0EyNDE5QzczOTYzOEYxMworOjEwRTdCMDAwMjQzQkM1RkFGMEJCMkM5OUI1MjA1RUNFODY3NDQxM0Q1MgorOjEwRTdDMDAwRUNFMzMzMUU1RTdGOTZCMTlBM0U2QkFDQkREQURGOTkwNworOjEwRTdEMDAwM0EwMzBCMTNEQzg3QTg1Rjg0NEIxMDc4REJCNjgxMkZEQworOjEwRTdFMDAwMEMxRTI4MzcwQzFDMjRCOEE4RjQxMDBGOUY2MDFDREZFNworOjEwRTdGMDAwNDhFRjE4MENFQjYwNEZGRkRBQkVBQUFCQzQwQ0E4Mzg4OAorOjEwRTgwMDAwQTRFRURGMzU1REJFOTk1MDJGRUIzNEZCRDk1MjFFRERFRgorOjEwRTgxMDAwREZDNDU2MUVENUM5ODIxRjM0NzQ1NUNGOEMyRkYzRjYzMgorOjEwRTgyMDAwQjFFRjFCNkJBQTYxRkY5Nzk3RjBFRjhGREE5QjhFREMzRAorOjEwRTgzMDAwQTdDNEY4MTFBQzIzMTdFMTEyMkQ5QjEyQ0E1NjI4NEYxQQorOjEwRTg0MDAwOEUyQkRCMTNFQTVEMDlGNUVFODQ3MjM2NkZGRkI5MkQ2RQorOjEwRTg1MDAwOUMyQjdCMTlGQkQ0QkVCNjQ2MDFGRUYyNzk2Njc4OTFGQgorOjEwRTg2MDAwMDRFNThEMUQ3N0Q1NTQwMzlGNkIyQzFGRjRDOUM4M0Y1OQorOjEwRTg3MDAwMDcyNEFGQzQ2MkYwNkJGMjMyNUYwOEUwNjdGNTQ2MEMyNAorOjEwRTg4MDAwNEI0QjEwMEU4MzZGRTJGRTZGRTg5N0VDMTJEMEI5QjVEOAorOjEwRTg5MDAwNkY1Rjk4Q0FGODlEMjdFRUJCM0U4OUJFNkJFOEZCOTg3OAorOjEwRThBMDAwQkUxQkI1RkY2MjFERURFMzBEQzVDN0E4MUQwMEMwN0VGMAorOjEwRThCMDAwMDJGMDc0MTM5MzU4MEE4MDM0NUYwOUZDMTFGOTY0NjMwMQorOjEwRThDMDAwREYyNzVDRUVCMjIxMDM1RjFGRTc4MzY3MzI3REFGMTM2MgorOjEwRThEMDAwMUYzQzIwRDk3MURGNDVFOTBFRkJCNUM2RTg1RDZERkYzMQorOjEwRThFMDAwRDFFNDgxN0ZDNjZFMkM3NzdERDFBRTQwRkI3RjZCRkM3RgorOjEwRThGMDAwNjQxQTAzNTQ3RDg0NERBRTQwQkUxQTlBODBGMjc4MUI5MAorOjEwRTkwMDAwMEI0QzQwMzlGNEREQzY3MTA3NzVEMEVFQTgzRUIyODNEQQorOjEwRTkxMDAwMDFCQzhBMUQxQjZBMTQ2ODc3RDQxNkM5OTE4MDg3NEM4NAorOjEwRTkyMDAwRENENENCQ0I2OTkxMUQwOENGRTBBNjQ3MDlCRTQ3NzM2NQorOjEwRTkzMDAwMjIzOTNBMjg0RjcxODQ3OTc5NUM2NDA3OTY2RkRDRjQ0OAorOjEwRTk0MDAwMkMyRjRGOEVFNEM4RjA3RDQxRjBCOTlBNkEyOEVGQjFDMAorOjEwRTk1MDAwOEZCQzVGRjMxQzlDOEZBQkYzM0IzMUQ2OTdFNTQ4NDNFQworOjEwRTk2MDAwQjJFMzcyNjI4NzFFMjAwNkZDNzBEMUVBQ0Y5RURGMDNGRAorOjEwRTk3MDAwNzA1ODc0OEY4NUY4RDQ5RUNGQkYzM0NGNEZFQjBGRkEwQQorOjEwRTk4MDAwOTUwQUUwODc5Q0Y0QjkxQzIzN0VBQzkwMUU5MDg5QjI1NgorOjEwRTk5MDAwQ0IxOUMzODcyRDc3RDA0MzdDN0U2MkNCM0U5NEY3MTk4OQorOjEwRTlBMDAwOEI0QTg4Q0Y1RjQ4RjFCNTNCQTZDNTlFQkY0QkU3Q0ZFQQorOjEwRTlCMDAwNzY4NzlERjM2NTU5RTdBM0Y2RjdEQTQ4RUY3OUQ4Q0M2NworOjEwRTlDMDAwRDcwM0ZCODZGMDZCMTVGODI4MTdFQjI5NzdFOEU4OTk1MQorOjEwRTlEMDAwNkI5RjRERkQ3QzI4RjlCNjlBNjQ3Q0IyQTAxOUYxQjkwMQorOjEwRTlFMDAwMkE4OUY0OEM1Qjc3MDE1RjAwQkVEQzJCRTZEREJCNjkxNgorOjEwRTlGMDAwNDIyODA4RkRERjJBMzEzRkYyOEQ1RTg3MkYxM0Y5QzNDRAorOjEwRUEwMDAwNEI3RjkxNkZDN0Y1RjY5NjQyMTk5RTNGMTVGQ0JFNzc3NgorOjEwRUExMDAwQkUyRkQzMTEyNzE3N0I3N0YxN0E5NUVGRjRFNkYzRUY0QQorOjEwRUEyMDAwNTU3OTkzRDFDMUM3Qzk3ODc4QzI2RTVDODc0NTYxM0U3QworOjEwRUEzMDAwMkMyRkFGMkJEQURENEU3MjdCMDFDRDk3Rjk3Qzk5MTIyQQorOjEwRUE0MDAwQUNGN0M0QUEwMjFERUE5MTJBN0U5NDQyREY3NTU4N0Y3MgorOjEwRUE1MDAwMEJGNjZGOERFMTQ5MURCRjFERDc5RDg2N0EwMEM4N0RERAorOjEwRUE2MDAwNTg2RjlCMzNEMDhFRjgwNDNENjAwQUU5ODE0MjBGNjhFRAorOjEwRUE3MDAwQzdGNUM2QzE5NzI5OTE2OUY4RkVGRjIzMzhERDg5RUJGOAorOjEwRUE4MDAwRkVFRkMyNjkwNDdFMTFDNDcxMUI1QjgxNUZFOEUyRjg4RQorOjEwRUE5MDAwODU4MERGNjYyOUFDQ0ZFMEZDQzI4QjcyMEVERjJGMDBEMQorOjEwRUFBMDAwRkU3ODhCM0RGMDAwRjZBRjhFQkZFOERFNDZEMkZCRDQ5OQorOjEwRUFCMDAwNzk1OUZFRUVFNTlBOUJEOEYwN0Q5NkE4OTcxREZERDA3QQorOjEwRUFDMDAwQjQ5MTgxMUMzQjZBRTgyM0JFNzg3NDFFRjNCNjIzRkYyMQorOjEwRUFEMDAwRDBCMTdBODRBM0FBNTc1NkRDQjNFNjZEMDZGQUVDOTc1OAorOjEwRUFFMDAwMEU5OUYwREMyREY5MzI3MTVEREQ4MDU3MTNDQUUxRjkyMgorOjEwRUFGMDAwODZEMDlFRkM5ODVDRUM3NTg0QjZBRTQwQkNERTUwRTJERAorOjEwRUIwMDAwMEQ3QTQ4M0VEMjdFMEJCNjVBQTg1REFGMjNDMjE0QUMzNAorOjEwRUIxMDAwQkZDMjYzODc5OTIwOUUwOTFGNDMzNzFCNDJCQjI1QzQ5MAorOjEwRUIyMDAwMzdBNzk3REU1NTEzNDM0MTg5RjAxRUE0RUY2RkU2RjQzMworOjEwRUIzMDAwRDMzQjlGOTE3RURGN0JCMzlCRThDNkNDNDI2NjlDQ0ZFNAorOjEwRUI0MDAwNjg3NDkwREVDMTg4OEU5OEUyOUIzMkRGMTY4M0MzMkZGMworOjEwRUI1MDAwQzVCRUI2OTQ0NzVFRkMxN0Q0MjMzNzlBNDk4RjQ0OTlCMworOjEwRUI2MDAwODk3NjE3RUJDOUEwRjkwMjNFNUYyMkZBNTBFREE1NDc1RQorOjEwRUI3MDAwMzI0MzFCQzgzRUYzNTYyMDNFMUVCMEY5MTZEM0ZDN0YyRAorOjEwRUI4MDAwNjBGMUUwRkNCNzlCNTk5N0E5MENDRDBGRDY0OUZDNEUxQworOjEwRUI5MDAwQ0M4N0Y1M0NDNjUwM0ZCQjVERTg2N0ZGNUU3RkNFODYwNQorOjEwRUJBMDAwN0FDMDFCMEVBRTVGMjFBMTk4ODBGRjJENjFCQzdFQzk4QgorOjEwRUJCMDAwM0FDQkM3NjhDRjJDNTkyNzg3OEQ2MEFGQjBBRUQ5QkU4RQorOjEwRUJDMDAwNDg5QzlENDExNDA1RkQwNTA0QkY2NDVCODY2QzQ4Mzc3NQorOjEwRUJEMDAwMDFGQzJFMTlGQkZGQTNDRDYzQzUzMjdDM0YwNUQxMEU4RQorOjEwRUJFMDAwREYxN0M3QkU3RjVGRUNEQjQ1MzI5RjNGNkJCMzc4MTAwQQorOjEwRUJGMDAwQkU4OTdDRkQ3RDc1N0UzRDhGRjlFMkM3NTNDNzQ5RUMyOAorOjEwRUMwMDAwMTdFQ0I4MEY5MDNFMDFFRUUxMTRENEU3N0YyMDEzNUVCRAorOjEwRUMxMDAwMTNFN0VCMzIwQzNENjg4NkZBNDU2REIyRTMzRTgwNjc0MAorOjEwRUMyMDAwQTBENTQ2RUI1NUU3N0I3QkM2RDA5NTY0NUYyNUY0N0Y4NgorOjEwRUMzMDAwRDJEMjU0QTFFMEZBODVGREMxRDY2OUVEMkZDNjBDQjE0MAorOjEwRUM0MDAwMzJEMEM1NzIzNjQ0NzZDQ0IwRjdDMjZFNERCNEZCMThFNAorOjEwRUM1MDAwRkI4QjMxQkU5REJBNUY5ODQ3NEE5OEJGQTAyQjhGQTQwQgorOjEwRUM2MDAwMjBERTAyMTJDNzlCQzEzMEI0MDhGOTRFRTJCQzU1NzhEMQorOjEwRUM3MDAwMUE5RDNBMDE3NzRFMTc4OUYwMzYzQUI5REM0OTg0QjdDNAorOjEwRUM4MDAwQ0IxMEM5QzE3RTAzQUQ0NjgyNTM2MkZGQUE1QzdDQ0MyNworOjEwRUM5MDAwMENGQjA3RTg2RThCMjQxMUJENkVCOURCNDI3MjhFOTlCNgorOjEwRUNBMDAwMzg5RTlCNTcyNzc5OTA3RUI3MTk4NjlFQTY3REY1QUEzOAorOjEwRUNCMDAwOTEyMURFQ0Y5QTg3NUUyMjdFNTVDOEZEMEE2NzdGMjlBMworOjEwRUNDMDAwRUZDMjc2NjdEMjM4REQ5Rjc5NDU0RkZCOEQ0RjA2RjQ1MgorOjEwRUNEMDAwQTE1RkNBQkJBOTVFRTJGRDlFNjlCNzc4NzBCRjM2MjMwQgorOjEwRUNFMDAwQTQ2MUZDRTZFMDdGQjYzMTgwRUY3MTFEQjc5MzlCRkIxQQorOjEwRUNGMDAwQjVGNkYwMTlGODU3NUYxNkUzMUI2NzE5MUYyN0Q4Q0YzMQorOjEwRUQwMDAwRjkwNEFDNzQxNThENzM2QjEyREIwMEZEMzZFOTI0MUYxQQorOjEwRUQxMDAwRUE0RjREQUIyNzg2M0EzODNEOTk3MDNGMzU4ODI5MzUwMworOjEwRUQyMDAwRTlDMDJFMkM4QkVERkYyNkREQjEyMkI0QUIxQTRDMUJCMworOjEwRUQzMDAwMDdFNTY0QUEzRjhDRjYxODQzN0IwQUJFNUI4RDFGRTU4RQorOjEwRUQ0MDAwMEY4NzdGRDNDNkRGRkUxOUU3RERCNDVGNEIxNzBEMzFBOAorOjEwRUQ1MDAwRkE5MTJFNEFGODdEMUMzREU1QzdFODg0RjQ2RkU0MUY2NAorOjEwRUQ2MDAwRDUyQzM0NEVFMjdFMUEyQzVCNkEwNjQzRThBNzY5MTY1RQorOjEwRUQ3MDAwRkU4QkI0NDM5MTM5NDgzRkI2RjIzRUI2MDQ5RUNEQTcxMAorOjEwRUQ4MDAwQjhGRTMxNjM2MEQ3RUI2ODA3M0I2QTA2NzM3MDk5Q0RCNAorOjEwRUQ5MDAwQUQ2QkE3OUU5ODFBQzNBRjNBQ0YyQjA2MzZDOTY4REY3MgorOjEwRURBMDAwQTk3QTRCOUM3RDM5NjFDMUU0RjhFNzdERjQxRERBQUJBQgorOjEwRURCMDAwMzg1RTA0NUZFMUJFNTFCOEJDREIyQ0U0MURDODQ1RTJGRgorOjEwRURDMDAwQ0JDQjdCQzY5MzVDNDRCOTg1RkM0REI1Nzc5MURGMjFGNQorOjEwRUREMDAwN0Y3OUM2NTk3NTlCMTNENkU5NERBREJBQzkzOThEOEY2OAorOjEwRURFMDAwNDM3QTNFMUE0OTU3MEM4NzY3QTJEQzUxREJBMUREREI3MQorOjEwRURGMDAwNjIxREJENURENDBGQjQzNTg1RjMwRjQ1QTJGMjhBNUY2NQorOjEwRUUwMDAwRTg3NzZEQTBGOTI5NDQyRjZCNzdFNDEzM0Y1NkZEMzU2MQorOjEwRUUxMDAwMERDMjRGQjU0MkY4Nzc1NjA4RkZDRUNBMkQ0NkU2ODk5NworOjEwRUUyMDAwRjc2Nzg1QjRFNTA2QzEwRjFBNTk4NEZCQjlGNjQyN0QzMAorOjEwRUUzMDAwQkM1RkE3OUE4NTZENTg4RkZFMUQ3Q0Y2NjlCRjZGNjYxMworOjEwRUU0MDAwQTE1OTBBRTJCN0ZGQTIzMUZFM0RFQkU1RUJCRDVERTA2MworOjEwRUU1MDAwN0RBQjk5RkI3NTY2QUNEQjI1NzM2NzE1NUY2RjRBOTlDRgorOjEwRUU2MDAwMkZGRjdFOTQyMzZGRTlDOUZGRjAxRjAyNEYyQTVDMkMwRAorOjEwRUU3MDAwQ0VBQUM1MDhFRjI0QjREN0IwRERGRDQ2ODJDQjA5OTBGOQorOjEwRUU4MDAwRDdGQjg0REY2MzAxREFBMTZEODFDQ0MyNDIwNDhGM0RFMAorOjEwRUU5MDAwNzc4MTZEMzg3QzM3QkM2QUFFNDc3QUU5NzE3MkJENDVCRgorOjEwRUVBMDAwN0QzRkM3QTlBNzMyRjk4MzEwRUVFRDE2RDJCQjAxQ0M4NgorOjEwRUVCMDAwNTM5MDhFMkEwQTU0MzlDQUE2QTAxRkVBNjMzREU4NjMxQworOjEwRUVDMDAwNTA2RUJBRDExQUMwRkUyMkE4Mzc0MDc5ODdFMDVGM0I2NgorOjEwRUVEMDAwOUMwNkVBNEYyRDQ3RUQzQzQxMkYzMDBFRjU4NzdFMTlGOQorOjEwRUVFMDAwN0YxQzFEM0MxNTZEQkY0OUU4OTM5QzJGNkM1RTk1NDRCQgorOjEwRUVGMDAwRkMyODQ2QjczQTQ2NzQ1QkUyMzdBMDNGRTk1NUMxNDc2NAorOjEwRUYwMDAwNUUwNTgwOTI5REQ1NjdFNjdDNDRFMUZDRTlENTUzMTMwQworOjEwRUYxMDAwODlFRjFERjk2QzM1RjE5NTczNzU0OUNDMjg1MTdCOUZBQworOjEwRUYyMDAwODRGNTJGMUE0M0Y3NDE3OTk5RjBCM0JFMkE3MTNEMzEyOAorOjEwRUYzMDAwNzhDMDQ2RkQzNDE4MDI1QkQxRUZEMEYwQzIzODJGNjBBNAorOjEwRUY0MDAwOENCRDY0MDhGREU4NjlBQzdGQ0Q0QzdFQUQ4NjY0M0UyNworOjEwRUY1MDAwQ0Y4NjU3QzcxMDlGRkNBOTNFRjRFQzhGQzk0RjYxMjRBMAorOjEwRUY2MDAwRkRBRDIxQzk5MzQyRjUzRjRGNjU1OERGNjUwOTg0NzFCNgorOjEwRUY3MDAwMUY2NTE5Qjk1RUQ5NjAwODE3MzkwMDhFQzc0MjVDM0YxQQorOjEwRUY4MDAwM0U4NjhDMDZGQjFGQjA5MURFMDNEM0NDQzRGMThGNzc5NQorOjEwRUY5MDAwNjc3ODM3Nzg2MjcwMzlGRUUwMjRBMkZGQ0Q3QThFQjdBOQorOjEwRUZBMDAwRTAyQkRDRUY3OTRDRUY5RjkzMDlFNTYzMkY5NjdBQzE1NAorOjEwRUZCMDAwQjI2NDY3RkQ4NkIwMDFFNkQ4RkMzMEQ3RTc5NkVBM0MzQworOjEwRUZDMDAwM0I1QjkxMzdCRDY2RjE2QUVDRDE4NzU2RDY2MjdERjMyMworOjEwRUZEMDAwRUE3NUQ3MjExRjFDNkQzRjIzM0Y4RkY3RTc5RTYxNDNFMgorOjEwRUZFMDAwQjk2NDhGRDYxN0Y0ODU2MURDMzMwMzEzQkMyNDNFOTlEMgorOjEwRUZGMDAwMUI5MDBENzQ2MkU3NkQ0RkU4MDFERTQ4NUYwN0Y0NDQzMworOjEwRjAwMDAwQkY5N0RBM0ZBRTE3RUQ0Mzk0MkYzODRFMzNGMERGQThBOQorOjEwRjAxMDAwOUY5OUY4NkY1QzU5MUVBOUNDRjFEOUZDNkE4NkQwREZBNAorOjEwRjAyMDAwQjRGNUI3QTYwNENFRTFGRTZBRkE4N0RGMUY2RDI1RjhCNgorOjEwRjAzMDAwMEUxMUZGNjMzRERDN0Y3RTQyRUY1Qjg0NzRFQUE4MEUxNQorOjEwRjA0MDAwMUI5NkM0QzlFREE0NTQyRUNGOTcxQTg1OUVDN0MyODZCRAorOjEwRjA1MDAwRjg3REE3RDY1NzU0NjlFOTVDN0Q5QTUzMzlCRERCMDYyNAorOjEwRjA2MDAwMzkxRjFGNUVBRjEzRkJFMTNCNDY5NDVCRENCNTAzRjYzMworOjEwRjA3MDAwRjYyOUVFRUY0ODRBRjU1MEZEOEM1MzYxQzM1MjI4RTc1QworOjEwRjA4MDAwQUQwQjFCNTY4ODI3RUUwQjgwNzdEODA0RUIzRUIxRDUyRAorOjEwRjA5MDAwQzZGNzMzODAwMUZCNTkzMTlEOTFCRUIyNDIwNjNEQjVBMgorOjEwRjBBMDAwMENERjdCRkEyMzgwOTc5MzJGM0EzODdERkQwOUEwMDI2RAorOjEwRjBCMDAwRjA1RUNDNDQzQjIzRThCNUMwQjc1RUVFOTRDMkE4RjczRgorOjEwRjBDMDAwMkZERTYyREM2RENFQzc3REVDOTM2RDg4Q0YxRDEyRjExMworOjEwRjBEMDAwQURDNTlEOTU0NTVCQTFCQzdBRkY2NEMyN0ZGMjc0NEVCRAorOjEwRjBFMDAwOTdBQjQzMEU5MjdGMzMwNDFGNUM2QTBDMTk0OENGN0VBNgorOjEwRjBGMDAwOTZGQkYxQTA3RkQyOTcxQkUwQTNDQ0IyRTE3MDQwRkU1QgorOjEwRjEwMDAwQURBMTg3OTAzNjBFMzFBMzRGRjBEM0JENzFGMTg3ODI0OAorOjEwRjExMDAwMzhCRURFOTdGMDNERTg3OTVBRkEwOEFBNzI4N0YzMzlDQgorOjEwRjEyMDAwRTZDOTQwM0VBN0YyNjE4QkQzM0YyRDk1RjA1MDk4ODEwMAorOjEwRjEzMDAwRjgwNTdDNzIzRUI5NEYyMkI4MzZCMjE2MkUzNzA0QkY5RQorOjEwRjE0MDAwOEY4RTJCRTRDNTQ5MzlDOEU1OTI3MTEzM0RFN0E1RTZEQQorOjEwRjE1MDAwMTNERTU2QTNCQzIxQkYzQUI3RkY0NkEzODM3OUE5M0E3MQorOjEwRjE2MDAwNjEyNzhDNEMwN0Q3MEEzQTY4MzhDNUMyNTdDMjc4MEQ1OAorOjEwRjE3MDAwRUI1OEI4NzEwQTdGREFBNjkwMUNFNEYyRDAyNEUyMURBNQorOjEwRjE4MDAwMjYxRTBGRjkyNkI5OTgyODA3ODdDOUJEMDQ3OTk3NjEwQgorOjEwRjE5MDAwMTBGMjRERTAzOURFREY4REYyN0VDNkJBOTA4QzdFQ0Y2NAorOjEwRjFBMDAwNUNCQkFGMzI2MzVBNEM3RjY5N0VERjY0RjI1Qzg2NjU3QworOjEwRjFCMDAwM0YyQkIwQTJGRkE2RjI1OTM3RkE3RkMxNUVDNzdENjUyQgorOjEwRjFDMDAwMDFCOEVDNDJGOUEyRUFCNzZFQkU1RUI3ODFEM0FGNUU3QQorOjEwRjFEMDAwRjFCMzUyMkJFMjY1OTBFQ0Q5QTEzNDY2NDc3QTU0RTE0MQorOjEwRjFFMDAwQjlDMzA2REY5NUUxNzc3Q0JGNDVCRjM3QjFDRUE0Qjg4MAorOjEwRjFGMDAwRUZBQjVFMzUxMzVGM0RGRjhBMkQ2NDI0QkQyMzkwRTc5RQorOjEwRjIwMDAwODBGRUQyM0YzMjkyMUU3QUU2NTUxQkM5Q0YzMzQyRkVCMgorOjEwRjIxMDAwQjk1NEJGMDA1QjRGRjg1OTI3RjAxQTY0NTU2M0QwQkY0QgorOjEwRjIyMDAwQ0FBNDc5NjM5MDA1QUE3QTU4QTM2MzM0N0ZCN0E4Q0Y5QworOjEwRjIzMDAwMUZCQzkxRDM5NTkxRUNDOUYzOEVDOEY3QjEwQ0YzNjE2MworOjEwRjI0MDAwQTg1RkRGMjVGMERDQkM3RjU2RTlCREYwQkVEOTZGRjVDNQorOjEwRjI1MDAwNzJFODA3NEE5MTVFOERGMjVEMzdBMkRGNjU4RUJDNkU2MworOjEwRjI2MDAwRTg2RTU4NDc2MzhFRDU2RTg0NEZBQUYzRkVGNTM3MzdBNAorOjEwRjI3MDAwNDNGOUQzRkQ3QTY2NDQzQ0VGOTk1NUM3MEE0NkU3QkY4OAorOjEwRjI4MDAwQUI0MkZBNjM5MUI4RkRCMjY2QUZCNkRDRDhBNzJEMzdCMgorOjEwRjI5MDAwMzNFNTU4MjQ4RTFGM0Y5RTZBNzM5RDlDNDRCQ0MzN0JGQworOjEwRjJBMDAwMTFFOERCNjg2QzM5QjUwQkU2NkJGQ0E5OTFFNDUxNEJCNgorOjEwRjJCMDAwNkEyMDk0OUE4NjdBRjlEMDlCMDg2NzYzREVFNzUzRDA3OAorOjEwRjJDMDAwOEY1MTk1RjcyNzhBRkI5Q0ZGMDFGM0UyQkNDRjlCMkI2NAorOjEwRjJEMDAwNDk3RTlGREY2QUY2MDRFM0Y4NTdCM0EwRkZERURDNUFFRAorOjEwRjJFMDAwQUFFRkRENjZGNDQ4QkNCRTc2NUEwNUVBODMzNDM2RkVFMgorOjEwRjJGMDAwOTk3NDAwRkZFNjJENzMzRjI1QkIwOUI1NzYyOEY3QTI2OAorOjEwRjMwMDAwN0U4OURGQkQyMDg1REE1MTdGRENDMkU1REU2OUQwMUY1MgorOjEwRjMxMDAwNEQzMDlGOTMwODY3OEM3QkM4MDM3MzRDRjA5RkJEQ0UyNAorOjEwRjMyMDAwOUEwOUM4NUY5NDNGMkI3RUM0RkYwM0Q4NTU5Q0JFN0JDRgorOjEwRjMzMDAwMjBDQUE3Qjk5RkU3NUFGNEYzOEMyNTNGQ0YwMUU0MUJGRAorOjEwRjM0MDAwOERBNjg4QTExMkZBQjlGQUNGNUYxMTVGNUVEOUJBODQ4RgorOjEwRjM1MDAwRjRGQTk4OUU2QjI0M0VCMkYyRUUwMEJEN0Y3REVCMzU1MQorOjEwRjM2MDAwQjRBRTkzQjA2RTg0Q0ZDOTFEREM5RTVCOTk2RDBERTE4OAorOjEwRjM3MDAwRkNBRTc2NzBGRDc3MjU3QzI3NDlDM0UxOTIwODg3NEY2NAorOjEwRjM4MDAwQjY1RkUzNDY3QzdGQzJGODc4QzEzRUFFMjc3QzYyMUY0MQorOjEwRjM5MDAwNEMyNkZFRTM2OTQ5NDYzREFGNzlDQjM1OUYyMkRGNUFDMworOjEwRjNBMDAwQjk0M0Y2QTIxQzY3MDc2Q0U0MTc1OUI5NjNGNjg0RTUwNAorOjEwRjNCMDAwNTZFQ0U3Q0JENDRBODREQkNFRDk3Njk5REVDQkZFMTA2RgorOjEwRjNDMDAwRjdBRjBDNUUwREVGOTU5RDk3N0I3MDlGMUNERTYxRTQ5RgorOjEwRjNEMDAwRjM3Mzk4OUVDNkY5NUZGRDY3OTlFODVFRDFCMTAwRUFDNAorOjEwRjNFMDAwQUJCRDA2REYwNERDNkY5RUVEN0JFNjIwNUMzRjk5OUZBMgorOjEwRjNGMDAwQTVBM0Y2Q0Y0QkNDOEU3MDcwQjRBNkUzRkI5NTkyRTIzQQorOjEwRjQwMDAwQzdGRDU1QkY2NTU1NkRCQzNFRDI5NTJBMTM3RTJBRjNDNAorOjEwRjQxMDAwRDZBNTQ3QUM0NEVGMzdBMjlDNkJEQ0ExMjdCREVFRjAyQworOjEwRjQyMDAwODIwRjdGNzNCMzJCNDZFRjJCRTU5RTFCNjdDNEU5MUI0RQorOjEwRjQzMDAwQ0REQkJGMkRFODAxMjQzNkMwNjlBNTgwOTMzMTZGNUQxNworOjEwRjQ0MDAwMTE4RUZCNERGNEJGRjJCRTk2MjIxRUFGRjlGQTdEMTA2RAorOjEwRjQ1MDAwRERERkRCRjk3RUY4MzNDOEZCOEJFOEVGQ0I3NjZBRjRBRgorOjEwRjQ2MDAwRkJEMUVDMjBENTFGNkRGMjMyREYxRTJCQzUxNTdENjg1OAorOjEwRjQ3MDAwRTcxNkI4MTRBQTJGNDAwMjAyRkE1MkZFQjA3NkVGM0IwQworOjEwRjQ4MDAwMzBGRkZEQTkwMThCMEJDQTc5Q0M1NzhBNzhGNTBDRDlDRQorOjEwRjQ5MDAwQUI0MDlEQzQyNTkxRkVDM0I2MUJCOTNFQTk3MEJGREMyRAorOjEwRjRBMDAwRTYzNEY2RjQ4NkI4NzlFNjhBRkU2MDdGQkFCMDlGMzMxOAorOjEwRjRCMDAwMUZGQ0U5NEQ4NDVGNTNFRUU3NTM3OEJDRUQyQjhBNUY2OAorOjEwRjRDMDAwNTkwNzc4NUNEM0VBRjUzM0E0OEJFNjgxRjk2QzU5NDk4NgorOjEwRjREMDAwOEMxRjM2N0IzOUJGMUVDNjU3NUM3QUNFQkY1QzQzRDRDNworOjEwRjRFMDAwNEY0RDFBRTc2N0FBM0Y3ODVCNkIxMkY5RkRCNkI5NDIzOAorOjEwRjRGMDAwNjY2RURGMDYxOUYyRjNFQkNBNjUxRThGMTE3QTg5NUYxQgorOjEwRjUwMDAwRjhEMTRDQkVENzE5QzY2Qjk4NTdGNjhFODNGMkEwRUY5MAorOjEwRjUxMDAwNzg2NzJBOTRERjI5OUZFRDk1QTE2Q0Y1M0REOTU1ODAzOAorOjEwRjUyMDAwRUJGNkVBNDVGRDU4RjIyN0JFM0RCMzkyRjQ5M0VCN0MyRgorOjEwRjUzMDAwMzI4RENCRUE5M0M5NUUxRkY0QkRFNzVBMDZFMzVFQ0Y3NgorOjEwRjU0MDAwN0NBOTI3NjA4QzFBMTBENjg4Qzc0MTFDMUJGMDY1NTQxMworOjEwRjU1MDAwMDJEMzVENzE3NkQzQjdCRDczNTM0RkM0Q0I0QjFGOTdBNgorOjEwRjU2MDAwRkY2ODhGRjc4OUI4QzI0ODcwRjBBNjU2NUU4NUYwQkQ3NworOjEwRjU3MDAwRkEyQThFODdDRjlFRTdGNkM3Njc2NkVFRTc1NkRCN0RGMQorOjEwRjU4MDAwNjZFMzcyQzZFRjUyRkQ4NDdEQjlDOEU3QTNFNURCOEE2NgorOjEwRjU5MDAwMzU3MTYyOTdBMTJGMTdGN0Q5NkYyNTZEM0ZBQkJCNzRGQgorOjEwRjVBMDAwMTRCRjVERDVDNTI4NUVGQkQ5OEY1RUNFNDU3RUZCRTlENQorOjEwRjVCMDAwOUU5NzczOTdDNENEMkZGMTNCRjU3OThCM0E5RUYwNEIxNAorOjEwRjVDMDAwQTk3RTRBOTc4ODVCMkZGMTFBQjkzRjcwMTQzRkE1REFEQworOjEwRjVEMDAwOUU2REUxRjZEODU5RTBFRTQ4NzdFQTc3NjdFQjkzN0NDOQorOjEwRjVFMDAwQTg1NzlFNjUyNkUyNjc0QjA2ODRERkQzRTcyQjc0QTFGQworOjEwRjVGMDAwRkRBMDdFOUZEMEZGMjM4MjdFQTQ3RTg5RUM3MzRCQzk0MQorOjEwRjYwMDAwMTBGMUQ3NTUyNkZGOUI2MzNDOThCN0UyMjNGQ0NDNDUwRAorOjEwRjYxMDAwM0M0QTQ4QUYzRTAzQUU1QjExNzY5RTUxRjFERjgxNzhFNAorOjEwRjYyMDAwNThERUEzQzU2MzhFNEJDNDMzRUMyRUMyQkJBMUM5QUE1RQorOjEwRjYzMDAwQTA3QzQ4RUYxMEZDRkE3QjNBQjI1RjBDNTk2RTJCRjJCQgorOjEwRjY0MDAwQTVBQjhCOTIzQTMxMkVFRjRBNEE5RTgyN0VGNTlDQUM1NgorOjEwRjY1MDAwNjI2QTFGQUNFMjc0MUQ0QzY3RTRCN0NBNjQyRDEyRjFGNAorOjEwRjY2MDAwNUIzQkY3ODM2NzRGNjc3NkNDMDNGOUE5OEJFQjBENkU5NQorOjEwRjY3MDAwRTZERDIyOTMzRUQ4Mjc1MTNDNDBBQzVGRTVFQjQ4MkZCNgorOjEwRjY4MDAwQzhFNzNFOTM0QzQ0MkZEMjgwNDRGQTlEQUNFQjVCODQ5OAorOjEwRjY5MDAwRkQ4RTQ2M0Y1QjVDQUE1RENERTkyNzVBRkUxQkQxQ0ZBQworOjEwRjZBMDAwNkU3NUJDNjFGNDEzQTAzOERFMTJCNzY5NjRGQTExN0U3RQorOjEwRjZCMDAwRDc0QjZFM0Y1QTFDRjE3QjI2RDUwRjJERTE3QTZCNDU1NworOjEwRjZDMDAwN0ZCNTI2NkI1ODlFNDJGQ0UxRjM3ODdGRUE3NkQwMzMxMworOjEwRjZEMDAwRDExRTUxRTM4RTYzM0ExNjdCQjg5RTNFMTg0MUJCRENDNworOjEwRjZFMDAwNzJCOTg5RTREQzBGNzU4M0Y5QThDRjI3QzYyMTAxQjM2RAorOjEwRjZGMDAwMEVFNEY3Qzg2M0M4QUZEODVBRTUzRjkxMUEyN0VGMEY1OQorOjEwRjcwMDAwNzBCQkExRTk2RTFGQkQ5RjM1QzBFNTdCNzNBMTgxRjQ3RAorOjEwRjcxMDAwQ0VFNjdFMjk4ODc4NkVGMjFCNDJBNjdDOEFCQjJDMjYxOAorOjEwRjcyMDAwQjlGREEwRDlDM0UzMjg5RTc2OEFBM0ZDQzBDM0UzMkMwRAorOjEwRjczMDAwNTEzRjZBNjRFN0JENDg2RkY1NTZGMjNCMjRDNjYzNUVFRAorOjEwRjc0MDAwRkE4QkNDQzcxRkM3NjhGQ0RFNTIxRUZGRTk5REVCMjE3OAorOjEwRjc1MDAwQkY0NjYyOUM4RDc1NjlGN0FGMUE2NzM5NkIwM0MwQzBFRAorOjEwRjc2MDAwNzg0QjM2OUEwOTBGNTkzMjg3MzM0QjMxNzFGOTMyOUNGNQorOjEwRjc3MDAwMEY5MEJGMzY3REJBNDA4Qzg4ODc0NEY3MzU5MDI0OTYyOQorOjEwRjc4MDAwQjM0NEJEMUFCRkIxOTVGOEYzNTFDMzVEOTRCQUZGQUQ1MAorOjEwRjc5MDAwQTQ2OTdGNERCRUMzM0QzRkM0N0M4NjUxRjMxRDgyQzYyNAorOjEwRjdBMDAwNUFBQzM3QTFGNjJDRUE3MURBMjA2RkQ1QjJDRkVDQzE5MgorOjEwRjdCMDAwRjg0RUFDNUUwMUJERDFENDJGODlGMTVFQkU3NjM2ODg5RAorOjEwRjdDMDAwRTBCMzkyM0E3RUU3MDY5Rjk1RTJDOTlBRjFFMkU3QTc5NQorOjEwRjdEMDAwMjRGNEFGODdGRUFEMUVEMTNFRjhFM0I5QjMwQjI5NkUxQQorOjEwRjdFMDAwMjlFQUE1MEQzRTk4REZDMzdBNkQ3RjA0NTJGMTNEMTZEQworOjEwRjdGMDAwRDRGMTBFNjdENEZDNzBFM0NDOThEQzA3M0RDMDlBMzY5OAorOjEwRjgwMDAwMkQyNkZGMUZGOEIwQjZFNzMyMThDQjYyRkZEMjgwNzIwOAorOjEwRjgxMDAwNTU5NUUzQ0QyRTlFRkY5MEI4NUZEM0QzMzhCRjA3RkQzQgorOjEwRjgyMDAwMzUzRDhERTQwRUQ3NkI2QjQ1RkMxMkY0RDkzOUI4QjU3NAorOjEwRjgzMDAwOUFEN0Y5MTlDNjJGNDE1RkM4NEEyMzdERTFGMzkzMDc5MAorOjEwRjg0MDAwMTE3RjBCM0UyMzdEQkVGOTgyQzJGRDJFQTA3N0EwN0VFNAorOjEwRjg1MDAwNkUxMjc0Q0VGQUY1MjQ2RjU1M0E1ODJERjg0RkFGMDM1NworOjEwRjg2MDAwRTQzREQyRUIwMTY5NUE5MEU4QTIyNUY3MDZDMEMxREY1QQorOjEwRjg3MDAwQTdGOTBBNzExRUFBREQ5NTM4REYyQkQzQjg3RERDNUNCMQorOjEwRjg4MDAwNUNCNUI1MDhGQjdGNEE2MjI4RUYzNzE0MUY0QjQ3QkRCNAorOjEwRjg5MDAwQTQ3OUUwRTNGNEU1NzFERkFERUE3Rjk0RTBCMDZBQUYwQworOjEwRjhBMDAwN0VDNEY1NUY5OUM2RTM5RDREQUZCQzQ4RkVDMUNGNDIxMworOjEwRjhCMDAwMTJFREU1N0EyNUQ0M0QwM0NBRjVGNTNBRDREMDU4Nzk0RQorOjEwRjhDMDAwNjhGMUNERTRFRkFGMzNCMDcxQjBCRUIxMjg4RjcwMUVEOAorOjEwRjhEMDAwN0JCRjEzOUM4MUY2MTlGQzkzRTBENTM2RkYwQTkyN0IxRgorOjEwRjhFMDAwREJFQTRDNTY4QzNCMzQxNzJGQjk4M0UwNjA0RkYyMjE5MgorOjEwRjhGMDAwMUMzNjE0NTc2NUUyMzg0REYzRTdEODI5NEUwMEZBMTU0NworOjEwRjkwMDAwRDYzN0REN0QwQkY5NERENDc5NkRFOEQ3RDdBMERFNTUxQworOjEwRjkxMDAwMDE3QUQ2M0ZDMUJDNzM5Q0YzNkFCQ0IwRkZDNkM4RkI3QQorOjEwRjkyMDAwNEFFRkI0NjJEQzc4NjRGRUZCNUUzQUM3NjdBN0U0MEY3NworOjEwRjkzMDAwNUU1RjRFN0U0MjE2RUZGN0NCRUJFN0ZBREMwRDY5MDYxMQorOjEwRjk0MDAwOEQ1RkY4ODYzNDg1RTAzMDMzMzgzODBCNjlFRjM1MjUyNAorOjEwRjk1MDAwNjI0MUJEQjc5OUY5QkU0MEZCOTJGOUFEOUUzRDg0Mjc0NworOjEwRjk2MDAwQ0U0NzVDNkQxRUYyMUY5OTVDOTExRjVFODZGNTMzMTVDNAorOjEwRjk3MDAwQjIxRjk4MTI3OTA0QzczREQzRURGMjZFNjA4MjdFQjE1QQorOjEwRjk4MDAwN0M3NzQ5MDhGOUU4RUI2OTgxMjU4OERGMEFBMTNGOUU2OQorOjEwRjk5MDAwNzlFNTlBNTJGNEIzQTlGQTUxRjcyRTczMDhFMzg0REQ5RQorOjEwRjlBMDAwMzZDRjNGRDQyMDFGRkM4M0MyRTNFMkE2QTFDMTU5ODgxMQorOjEwRjlCMDAwOEYzRjNBQTlERjZFNzNBODFCRjExRkRDQTRBN0ZBNTc4QgorOjEwRjlDMDAwNkM4MTQ2QTRDQjUzRjM2QjhBMjgyRkM3MUEyQ0MyMzhGQworOjEwRjlEMDAwQjBERUQ1QzM1MDRGMDA3MzgxRkMwOTI2OTc5RjYxQkNGMAorOjEwRjlFMDAwNzQ1NjcwQjEyMjIxOUY0RkQwM0I2Njg5RkM1MjYyOUVCMworOjEwRjlGMDAwRjBCRTRBQjBCMTcxNDAwNTI3NERCNDA1M0EyRkE2QzZGNgorOjEwRkEwMDAwRjQ5MDIzN0Y1QUE4RTA0QjU1M0ZEMTk5NzgzQ0FCQkE4QworOjEwRkExMDAwMkU4OUM5NDhGN0VCODdERUQ0QTFGRkRBMzU0OEZBNkJBNworOjEwRkEyMDAwNjM5RjQ0RTMzNDE2QkY0MEY5NjI2QjQ0NUU1MjM0M0YzNworOjEwRkEzMDAwNDg4OTUwQkVENEZBMzQ4QkQwMDMzQkI5MUVDRDA2QzlEOQorOjEwRkE0MDAwNUU2NkNGNzE3QzMyMTZBMTNDQUE5ODFERDE0RUVERDREMgorOjEwRkE1MDAwRkUwQ0MyRUZERTI4RkMyRTIwQzFBODdFNTM5QUFBNUZCRQorOjEwRkE2MDAwREVBN0Y1RDc4QjcxMzc0QjgzM0UxOUUxNUEyQTY5RkMyMworOjEwRkE3MDAwQzVFQTczQUZGODNFRTVEMEQwMUNEQ0JGNDNBRkE4NzkzMAorOjEwRkE4MDAwOUMzQzRGNzNFQkI0ODk1RTU0OUQ4NkU1NzFGNjdGMzFFMworOjEwRkE5MDAwMDdFOTA2MTQ2RERBQUY0REZEOTc5NkM3RjlCQ0Q4NjczNAorOjEwRkFBMDAwRkZFMzc5OUM1RUM5QjcxQjlFMkZBNzM5QjQ3OTlDNUU5MgorOjEwRkFCMDAwMEUzRjM1Q0U5Njk4QkY3OTI2MzNBQ0YwN0NBQ0M4Q0VERAorOjEwRkFDMDAwM0Q0ODlGRkQ0NkNBRjNBQUVERkZEOUZCMjgxRjZCNERBOQorOjEwRkFEMDAwQUMwRkUzOTA4OTdBNDY5QkZEM0I2MUE0RkJCM0E3NEYzMworOjEwRkFFMDAwRUVCQzlGNjExRUVGNEI1RUNBRTc0OEQwMUYxMkVEODQ0QgorOjEwRkFGMDAwREREODI0NzM3NDdERUYzNzUxN0M3MjdEMkY1QUZFMUY0MQorOjEwRkIwMDAwRDdGN0I4M0UxRkRDQzNGMzA3NTQ3RURFMkNFQ0IzQjM0QgorOjEwRkIxMDAwRjVFNzkyNTFDRTFDNEI1M0Y1Q0Y4NDNDODdBNzQ0OUUwQQorOjEwRkIyMDAwQzNDMEM4NzkwRThBQzgxNzAyN0QzRDQ4NzRCMjhGQzcxQQorOjEwRkIzMDAwNzU4RTNDNkQyMUZFNzFDRUFFRUM0NjdERTlCNDZERTg2QworOjEwRkI0MDAwRkIwODJDNDVFODQ5OUQwNzhDMUVFNDE3QzBFRjg4N0YxMQorOjEwRkI1MDAwMDdGN0U5Nzk5QzA2RTMzNjE4Qzc3OTZEODI4OEUzODg1MAorOjEwRkI2MDAwNzhEMUFCMTZEMjVCMUE5MjNEMjlGOEJEMUFBN0Y5QTkzNAorOjEwRkI3MDAwOTAzNzBENDkzQzNFRDM2NTA5RkMzRTZEODRCOENEMkVDRgorOjEwRkI4MDAwQTE3RkVEODJBRUVDRDhERkZCNDYxMUM3MDYwNjgxRjZGOQorOjEwRkI5MDAwQ0U4MzM5M0NFRTIwRTIzNjY3NDVEQ0U2NzhCMTJFNkM0OAorOjEwRkJBMDAwRTA3RTA4RjI1Mzc5QkExNDk2MDlGNTlFRjdDRDIxMEYzRAorOjEwRkJCMDAwRjc2Nzk5NzQyMEY3OTdBQTcxOUJEN0I4OUY2QUE5ODhBRAorOjEwRkJDMDAwQ0YxQzVGMzA4N0YyODc5NjYzN0VCQzhDN0UwQ0VFNjcxRAorOjEwRkJEMDAwOEVFNkVCMzNCQjBFRDdCMzA2RDhDNTM2NjQzMTQxODAxMQorOjEwRkJFMDAwRkFFNUYwNUFEMjQ5QTg0Rjc4M0FBMTRDQ0FCMkFGQTc2OQorOjEwRkJGMDAwMDZDNjVERDJBOTIzN0I2NDY5OTdENjVGN0U3RUMzMUQ0RQorOjEwRkMwMDAwMzUyOEJGMUZFOEU0RjFDNzYwOTc0NEYyN0IyOUYzQjlCOAorOjEwRkMxMDAwNTFERjUwRTk2MTVDN0EyQUQxNTlCMDUzRTdDMzcxQUUyNAorOjEwRkMyMDAwNENFN0ZFMDQwMDdEODhENjI3OUU5RDdBRTE2NzE3RjM5NgorOjEwRkMzMDAwNjg2N0JBMzAzRTc1MTI3RjNFNjA1NzZBNDY5NENCQTIyMQorOjEwRkM0MDAwQkY0RTdEOEJBOTEyRjVEODFDMURGOTc5Q0YxQjdDNzU5MQorOjEwRkM1MDAwRTQyNzc1MTYxMURFM0E2RDJENUQzNUJDOUVGNkNBNzkyNgorOjEwRkM2MDAwRjM5MDlGRUFBRjU0QjhBMkM3M0M0RUU0OTM2M0QyNDVFOQorOjEwRkM3MDAwRkMyNjYxQkRDQjdCQjRFNUM0RjhDM0FBOTBCNkJDOTRBNgorOjEwRkM4MDAwMDVDNjY3RTIzOTg1QkREQUY3NjNEMjM5RkYzRkJGMjE4OAorOjEwRkM5MDAwNUZGOEY5QkRFNEU3RUZENDdCN0U5NThGN0NBQTVCMjEwQQorOjEwRkNBMDAwM0VEOTlFQ0RFMUE1Q0JFMUNGMDI0Nzc1MURFOTA3MEVGOAorOjEwRkNCMDAwRDAyQjY4QkU3Q0ZFMDU1N0JBMjQ5NDk3OUQwRTRFOTdCNAorOjEwRkNDMDAwRkZERDc5MjdDRTc3NzY3QTExRDcxMzUwQjlDMzdERDQ2QgorOjEwRkNEMDAwMkQ4NTM4QkNGOEJDMkZENTVGQjEyMjVENkI2RjQ2Q0I0QworOjEwRkNFMDAwRkZGM0Y2MjZBN0M3NkU1OUVDMzczQkYxOUYyNTIyREVCRQorOjEwRkNGMDAwNzg1Q0YyM0UxREM2Rjc1NkQwMEI2MERFNEJCQkU1MzI5QQorOjEwRkQwMDAwRDQ0RjY2N0RDNzRBRUI2ODdBQ0QxQzMyNDI3REUzQkE5OAorOjEwRkQxMDAwNDgyRUVFQTNBNkFBNDg1MUNCMDg3MEM1RDkyQTJBREZERgorOjEwRkQyMDAwODI3NjRCNUM2MDFGRTBCRUVERDJDNkExODZDNzE1N0QxMgorOjEwRkQzMDAwRjdBNkE3QTExRDcyN0NERkNGMTBERkZCQ0MyNDk3RTBENAorOjEwRkQ0MDAwQkYwRTFBRDFERkYxNEEzRUU5NEI1MzUyMDIxREU5Mjg5QQorOjEwRkQ1MDAwQ0Y5M0MyM0I5RkM5NDdGRDg0RUI0NzhEMDNDNjVEQTg4NworOjEwRkQ2MDAwRkYyREU5RDQ5RUFCNjExQkI1NzEyRUQ2RTUyNDdGMDYyRAorOjEwRkQ3MDAwRUJENUJFQzdGMzJCOUFFRjg2QzVCREI4OUNERjZDMDhFOAorOjEwRkQ4MDAwNEM0MEJERUVFQUFCNzg3Q0ZERjQyQTFENDNGQzJFOTU3OQorOjEwRkQ5MDAwQkQyQjkwOEY5QzM2NkJGNUVFRDMzNjhFQUZEREU5QUE4NgorOjEwRkRBMDAwOUNGMTE2MjE5RUEzRTU2MTc4RjYxNjIxOUU5N0VBNThFQworOjEwRkRCMDAwMjBCRTlGNDZDNEYzNTRDQzRFRTc3ODNFRkRFMkU1NDVCNQorOjEwRkRDMDAwODhFN0NGRjc1RDVFODQ3OERFQUNFRkYxRTFCRTc5QzZGRgorOjEwRkREMDAwMTk3ODFBRTE3MzYyQjY5RkY0MjYzNUFGRjI1MkU5QjE5MQorOjEwRkRFMDAwM0Y4MTFFRkJGRkRGRDE2MzVEN0NCRTVGQTIxQzNDMUMxQworOjEwRkRGMDAwODU5NzU2MEVCQTBDOUU2Q0U0ODc0QjRDQzZBRjk1ODcyMAorOjEwRkUwMDAwRjgzN0EyM0ZDRDY0MjQ3RkM0NkI3RkZBRjIyMTk0NkY1MAorOjEwRkUxMDAwQzEwMTk5RjQwRkI1QkZENzk0QzA1OEY0MTdCQ0Y2QkUxMgorOjEwRkUyMDAwREIxQjk0NDZFRkJGNDVFODU1NkUxMzBCQTJERjQzRDVBRAorOjEwRkUzMDAwRjc1NUJEMzE5MTFGQkYyRkUwNzgyQURENTc4QjdBQjY3OQorOjEwRkU0MDAwRUE5RkFEMTc3RDlBNDI1RjcyRkRGNDI5ODlGQ0FGMjZDNworOjEwRkU1MDAwNEYxRkNGQUYzRkIwRDg4RUZFRDk1MzIxRUU4RjZEN0FCMgorOjEwRkU2MDAwQjE5NEZDQjVBQjQyQUY4NzMxRkY4OTBENDg3NkI0MUIyNgorOjEwRkU3MDAwNTYzREY1NzEzMkM2QjNDMTBFRkQyNDNEMkVCRTMyNUIzOAorOjEwRkU4MDAwRDhBMUE3NDJDNzkzMzFFRTBERTNEN0EwNUNCNkI4ODZFMAorOjEwRkU5MDAwMEM0OEJGNEQ2MDlGNDExM0Q2QTQwQ0QxQjlBMjI2MTdDMAorOjEwRkVBMDAwMjM3OTVGREVBRkI1RDdENEY4RTQzNkJGODFGOEREQjY4RAorOjEwRkVCMDAwMDEyOTg0RjY1OUJBMjE5MDlGOERGMjg5NjVEQjRGNUE0QQorOjEwRkVDMDAwNjJGQkU1NzdFOTNFMTdDNjJENjM3MTYxREZFRjcxNUU3NgorOjEwRkVEMDAwQUE1RjI3QjIzNTg1RTgzMEEyNjczRUQyMDNCNkRBMDRCRQorOjEwRkVFMDAwNUZFMkYxOUFERjZENzc4NDc4RkUxMjZGRkZCQjUwM0VDMAorOjEwRkVGMDAwOTU1NTc5QkQ0MjlDRDM1QjIxQ0VFOTIxRkYwRTI3RjBCOQorOjEwRkYwMDAwRUZGODcyMzRERUFDOUU0NzAzN0UxRTFFMjlGRTFEOTc1RAorOjEwRkYxMDAwQjcxNEZGN0QxMzFCMTJGOTc5MTc4RDlBN0VBM0Y5M0E1NgorOjEwRkYyMDAwMkRBNTFFOThGNzlBREJBQzc0MEVCMTE5RThCQUI1MkM2MgorOjEwRkYzMDAwNDY4NzBENjIyOTJBMUQzNjA5QkY2RTczRkQzMUIyMDM1MworOjEwRkY0MDAwOUFGMUZDMDVFQTU1NUU0RTg3MEQ2MDFGNjE3RTY3RTJGRgorOjEwRkY1MDAwQkU2NTdEREE3Q0M2RDFGNjcxNjk4Njc2MUY0N0NCN0Y5OAorOjEwRkY2MDAwMjMzRkU2Q0MwQ0VERkU1NUQ3QUZGQUMxQTNFQjFDOTBCNgorOjEwRkY3MDAwRjhGRTRBNTg1N0EyNUQ5OUU4QkY1NkVEQzI0QkU1NkJCMworOjEwRkY4MDAwREY4OUNFODdDMzIzNUFGRTFCRjNCNURCMzM0NkUzNkIxMQorOjEwRkY5MDAwREFGOEMwNUZDREQ3MTJFMzA0ODVEQ0ZGOEQ3MTAyOENFNworOjEwRkZBMDAwREJGRTc3RTMwNDlGN0E3QUQyNzUzQzRGNUYxMzNGRUQxNworOjEwRkZCMDAwOTI1QUFFMzM4REM1QjgyMjhGMkYzN0RBOEMxNDg3NEQwNQorOjEwRkZDMDAwOENBQjM2N0JFNjg4MzhFMkUwNkZBRTQwQjlCOTVGQ0ZFNAorOjEwRkZEMDAwNTA5RUQ3NUI1NzUyQkNCMjU5N0VDRTgwNDcwRTg3QzUyNAorOjEwRkZFMDAwMTM5NTgzQTRCN0ZGQjU3MUY1RjUxOTM2MTdGMTIzMEZGMworOjEwRkZGMDAwQ0JDN0I4N0E2MjVFRDFFQkQ2MkY1MzAzNzFGOEFEMkEyNgorOjAyMDAwMDAyMjAwMERDCis6MTAwMDAwMDAwMTg1N0YwNDNBMzYyOTQxMTY3RjVFQUQzNzgzRUJDMTA3Cis6MTAwMDEwMDBBRjhCRkMxN0I3ODFFN0IxM0Y2QzAzM0IwQkQ2RTdENjNDCis6MTAwMDIwMDBGMUZDOUNCRjRGRjM2RkNFNDg0MzNFQ0VFMUY3QzQyQkFCCis6MTAwMDMwMDAzNzMxM0M3N0Y0ODRCRThGRjg0NEIwRDFFQTQ1N0VBN0NGCis6MTAwMDQwMDBGQTU1QTJFMzA5RkJGMzUyRTlGQUM3MDlGQkZDQzc3RkEzCis6MTAwMDUwMDBFMzdEREVBRkQyRjM1RjFCRUZEQTAyNkJENUQwM0ZBM0I3Cis6MTAwMDYwMDBCOEQ2REIxOEFGQzkxRjRFQTdBM0Y1MzMxQUJERkUyMkMxCis6MTAwMDcwMDBDM0ZGNjYwNkVEMzNERjE0Q0FCQkJENDQ3RTYyMjkxRjkxCis6MTAwMDgwMDAzQThFRkUxQkI2REZFODQxN0JDMjI0Q0U2NUIwOEQ5OTY3Cis6MTAwMDkwMDAyMjRGRDI1QjMxOUZGMjg1RjlCOTA2RjVGQ0M3Njg3QTI5Cis6MTAwMEEwMDBERkM3RDFGRENFRjVCRThGNDdFNTNCRkYzNUJEQUZDREY4Cis6MTAwMEIwMDBFOTNGOEU3MkY2NDRBNUFGMDhFNUUyMDMzNjk4M0ZEQUQxCis6MTAwMEMwMDA3MzNGMzI4RTc4Q0U0MjNEMEYwMEY0QzRDRjlCM0NDRkJECis6MTAwMEQwMDBFM0RDODk3NEY1ODcwNDdFRjk4N0ZGMjU3RUE5NzdGRjI1Cis6MTAwMEUwMDA4REY4NjVGRDFGOTNEMUFGMzk3QTNGNDE5RUY3NUIzNTlGCis6MTAwMEYwMDBFODEzNzEyOTg2NzEyMTc1MURDRDgzM0NCRjJDNURFNDA5Cis6MTAwMTAwMDA0REE5RUZCRjEyN0FFQ0VENkU1Rjg2MUI5RTlGN0Y2MDVDCis6MTAwMTEwMDAzMkIxMTQ1MDcxOTBDNjUwREZGMjVCQzlERkRGRDRDNzMzCis6MTAwMTIwMDBGMzQwOUFENjMxOEFFQkFBRTcyODlCRkFFNzMzRDRFQjVGCis6MTAwMTMwMDBGNkE3MDZGMkYxRkIwNzNFQjQwNkU1MTRGNDgzMkY2MDQwCis6MTAwMTQwMDBBOENGOURGOTgwOTc1QjUyMDNFM0IwQkU3OTVENDQxMzVECis6MTAwMTUwMDA1N0E4QjhGOEU1N0FGNDU3QzA3Q0M5RkU3NzE5QjVFNzE3Cis6MTAwMTYwMDAyOUU2QkIzOTNGNTM5RkQ3MDk3ODQ3RDdFNUUyRjM2NEM3Cis6MTAwMTcwMDA3RDcyMDhGNTQwOEI2NzkwRkM0NDRERkJCOTcyNTYyMUE3Cis6MTAwMTgwMDBGQkM4MUZDRkQ2MzhFOTdDNDREM0ZFQ0E1MjNBNkZERTkzCis6MTAwMTkwMDA2NzJFNDUzREI2RTJBMzVBM0JGQTFGM0VCRkQyNDU3OUQyCis6MTAwMUEwMDAwNEI5NzI2NDE1RUE1MUFGQTcwNTY2RTI3QzZERTVBMTVBCis6MTAwMUIwMDBCOUE4ODdFNjgxMUU4QTdBRURFN0ZCRTY5NjA2RTJGQzlGCis6MTAwMUMwMDBEOTlCRDE5RjBERkQ2RUI2NjlGREQ1Q0NDNEYzQzBFQkI0Cis6MTAwMUQwMDA3N0YzM0NERjU3NkM4MTM5RDhERjY2MzM5RjZGNzA5M0JDCis6MTAwMUUwMDBDODZCMTY3RUVDQzRGREFGRUVGQkU4MzlDNzVCNEQxNDVGCis6MTAwMUYwMDA3NzU2RjlDMjY2M0QwQkEwNUM1M0Y5NDk4OUM4ODMwMzYxCis6MTAwMjAwMDA3OEYwM0NCQzgxRjkzQzlGNDM5NEFEMkU2RDNFRTJBOTUxCis6MTAwMjEwMDBGNEQ5MjUzODlGMTIzNzhGMEIyQzM3MEQ0OUU4NTc1RkRCCis6MTAwMjIwMDAyRUUyRUNENzg4N0MwOTM1M0ZDQUE4RjhCRjhCRUREOTAwCis6MTAwMjMwMDBCQTlBNTg3Q0JEMDBCRkI3OEI3M0JGM0MwRkM2NzI4MUEyCis6MTAwMjQwMDBFQkM3MDU3NjAzRDE4RDBERjYxN0Y5M0Y4MDZFMTAzRjkxCis6MTAwMjUwMDAzMzg3MDY2N0UxNzlBMkMyREVGMDRDODRFNzZCMTc3NDNFCis6MTAwMjYwMDAwNDBGNjVGRURCMTQxRjQ5NDFCNDQxM0Y2MzM3NDZCQUIyCis6MTAwMjcwMDBDN0EzOUZDNEZFRUIyQjExMkY5RTFFN0IxNTgyNkU3RkEyCis6MTAwMjgwMDBBQUJGRDE0REZFRUM5NjYyQjQxQkFCRkU1OUNGRjNGQzc2Cis6MTAwMjkwMDAwRTU4QzhGRUVGQ0Q2REEwM0NCRjMzMUYxQTQ3M0MxNzY4Cis6MTAwMkEwMDBBMjNFODNFQzNFQ0FFQjJCRTg3RjhGRkNGNEI2RkREMjc2Cis6MTAwMkIwMDA4OEY5OUE1RDZFMkI4RjFGMDUwNzI5N0Y4Q0NENzRGMTBECis6MTAwMkMwMDBGMzg0MDczRUEyQjhBRUQyQUQ5MDg3QTI1M0VGRDNFMTNDCis6MTAwMkQwMDAzOUE4NjAzQjIzRkZFNEI4NUVCQjBFRjE5MjI3RjI0N0RBCis6MTAwMkUwMDBDRUJFRjY5RjUzMDI2NDg3QTg3RUY5MTBDRkY3RDE0N0EwCis6MTAwMkYwMDBENkEzNURBNUI0NDdBRTgyMURDQzFBRjczQjc0NEQyNTNECis6MTAwMzAwMDBEOERGNTAxM0NGNUJCNzMwQTQ5M0JDRkVCMUY3N0QwQkExCis6MTAwMzEwMDBDQTc5NUQ3NjI2MjFGRjc5NzU0RDFFRjk0MzYxOURFMzBCCis6MTAwMzIwMDA0NjU4RTcxRDZFOUU5RkEzMUNCMEU4NTA2RTI5OUIxODhGCis6MTAwMzMwMDBFNTE3MkE4RUY0MkE5QUY3QTM1MDg2N0VENjA4QkE1MTdBCis6MTAwMzQwMDBFMzhEMzA1RDM3Q0FBM0RCREQ4MTFEODhFRkU4Mzk5ODg2Cis6MTAwMzUwMDBENjI0N0UwRTQ2OUNCQkI0QjU3RUY4M0M5RTJGRDk2OTUwCis6MTAwMzYwMDBFMEU3MEMwRkJEMzY2OTAxRjlFNUJBMTUwOUYxNzBERTU5Cis6MTAwMzcwMDBCMTM4Q0YwRUVGRjc4QTdENkI1MzA2OTlERDFBMEZGRjY4Cis6MTAwMzgwMDA0Mzk0NEY1OTcwODBFNzlEMjk3QTRFMjc0QUI3NkIxN0RGCis6MTAwMzkwMDBGQUZEMkVBNDA0Mjg2RkY0Q0FDRUIwNENGMTJBRkI4OUQyCis6MTAwM0EwMDA0NzZBM0M3MTc2Q0IxNjJFNDc5QUY2NzI3QjM5RDE0RTRFCis6MTAwM0IwMDBGOTI2Rjk3MUQwQURENTRCQTJFNUJGOTE1RUYyNzY4MkY4Cis6MTAwM0MwMDBEQ0Y4QUJFRDBGQTZCNURCMTJGNTkzNDQzQjZEOTg1RTAwCis6MTAwM0QwMDA5REQwREY2ODdBOEE5QUI3NTExNTFCODdFOEUxNzU5QjMzCis6MTAwM0UwMDBBQTA3MDUzNTc5MkQ1NTU2NzFBRUNEQTRFRDdGQUY4QjlCCis6MTAwM0YwMDBGMzA5MzVDRjI1QkRDM0QzOEU3OUUzNDMzRjYwRTQ0NzhFCis6MTAwNDAwMDA1M0YzNkQ4MjU1REMyRTA4RUE0Qzc0REVDRENEN0EyODhDCis6MTAwNDEwMDBDRjY2MEMwQjRCMTJFOUY3MTEzQUQ3OTk4MUY5MzZGMEY4Cis6MTAwNDIwMDBERDA3RUUwMjdFM0U4NTc5QkI2NEUyODcxRTA5RTc2RDNCCis6MTAwNDMwMDBDNjNDMERDQUNCMEM2RDVEODFFM0RDNjBBNTcxQ0M5ODI4Cis6MTAwNDQwMDBBNzMxMTU0M0VEQkVBREM4M0Y2N0Q1RjMzODQzMTZDODk1Cis6MTAwNDUwMDA1QkE0REJBQzQyNEU4N0U2M0E5RUFGQTFFNjYzQThGOTA3Cis6MTAwNDYwMDAxMzJBMUNBQTA0N0NCM0M2QUZDODQ3RkRCRjVCMEFGQ0I1Cis6MTAwNDcwMDA0ODNENEYxQjdGNEUzQTdBM0U3QTU1MDE5RDI3ODk5RTEzCis6MTAwNDgwMDA4RjJCNjRBMkZFRDJDRTQ5MjdDMjUzQ0RERkE4QjIwNzdDCis6MTAwNDkwMDBFQzk5NjlDM0NGQ0JBQUY0MTE4NzM3OUFEN0I2MDM1QzFFCis6MTAwNEEwMDA1RkFGQUEzN0QwRkNDRkFFOUE0NzdFQzJCM0FCNzQwQzE1Cis6MTAwNEIwMDBGNzRERDU4MDkxRDM1QkMyNzhEQkEyRjc2MDg0Q0M3NDEyCis6MTAwNEMwMDBERjg1QzBGQjM3RTlBQjgwQ0Y2MkY0QzMxRTZBQUI5OTBFCis6MTAwNEQwMDA3QTAyNjA3QkI4Q0Q0RkNGQjM2NkE5NEZCRThDQ0UyQkNFCis6MTAwNEUwMDAyRTQyQ0VGNDY1RTZCNjVBQkNBN0UwQUM2RDI4MTdFRkY1Cis6MTAwNEYwMDAzOUY4MzJFQkZFNkY1MzM5NkRFODI4OTY5M0IzOUVGRkJGCis6MTAwNTAwMDAzNkRFN0I3MDc2RENEMDRFQkNGN0EwNzA1QjI1QUY0NzQzCis6MTAwNTEwMDAxQUNDNjJFQ0IyQ0M4QTZGMDc2OURERENBRjM0MkI3NjgzCis6MTAwNTIwMDAzRUJCMUNFMUQzQzgyMkVCMDdDOTdGQzNGM0YzMzE5RjY1Cis6MTAwNTMwMDAwRkYxRTBCNjFBNDg5RjcxOEIzQzRBNTYyREYyMkEzMUQyCis6MTAwNTQwMDBDMjAyRTU4RUNDNTI4QTQ3NUI5OTY3RkYyMEQ2NjdGM0RCCis6MTAwNTUwMDA3MzQwNTA0RkY0REIzMThFRkI3RDREMDJBRjJDNUJGNUM5Cis6MTAwNTYwMDAxMzQ1ODJDODlGM0FGMjFERjQ3RDk0OEZFRTM3ODZCODBBCis6MTAwNTcwMDBCRjhBOEZGRkVFOEI5MzI5N0VBNEU2ODczMjY2Q0Y1OTIwCis6MTAwNTgwMDAzODk5RjI0OTM0NjVGNTdFMDNBNkQ4NzM1MDVGRThEMEY4Cis6MTAwNTkwMDAwQkJENTQ5NDUzNTMwMkYzMzNFM0Y0QTI3NzY3RkY1RDJBCis6MTAwNUEwMDAwOUVFODNEMzJGREQ1Qjg4N0NFOTFBMDNFOEVEMjNGMEE1Cis6MTAwNUIwMDBBMTdGQ0RFMjdDRThBQ0RFREEyNTgxOUVGNjVFNzJFMEJBCis6MTAwNUMwMDAxNkVDRTc3RENCQTIzOTBFNTg1NzVENkFBNUMxODFGM0MxCis6MTAwNUQwMDAwREZFNDg0NkJFOTgyNkYwRUQ1OEM4RTdFN0E4RjY0QjUyCis6MTAwNUUwMDBDQkExREYwRTMzRUM1RkY4M0UyREEwRjgyODhGM0VCMDk0Cis6MTAwNUYwMDA1MEJBMDFFNkREMjE3MTdFMEIxRkE1OTA1RDUyRUM0OURBCis6MTAwNjAwMDBDMUZDRTQwNjcxMUU1MjE2RkJGRThBQkU0RDMyRUFEM0NGCis6MTAwNjEwMDBCRjZBRUI5RkExMTRDNkU1M0I4OEY4RjE3QkY5RUNGNkM1Cis6MTAwNjIwMDBGOTIzRjgyRDVCMzMzOURGNUUyMDdCMjYyMzFEQUQ5NzQwCis6MTAwNjMwMDBGQURGQUVDREM0Rjc5QzFFNjcyN0I3OTY2MzVFRjEzNTJGCis6MTAwNjQwMDA5Njk2NzI5NDNGQzNERUE3QzBGQjkyQjhCMjkxQjc2Qjg3Cis6MTAwNjUwMDAzMDBERTVFMkY5NjQ5RjI1QjAyRTEzRTMzRThCM0ZBNkYzCis6MTAwNjYwMDBCOEU0RjdCM0RFM0Q4QTc5MDVFRkVBN0I2NjI1QTM3QzIzCis6MTAwNjcwMDBDOTE3RTdGQTg1NUZGMENERjFBQTVGRDBDNENCOTNCODc0Cis6MTAwNjgwMDA1RjMwOUFBRjM1OTlFNzhCRDUyRUU0RTcxMDZCNDUzRTg2Cis6MTAwNjkwMDBDMjFDM0IzRkI3MzNBNzNDREZEQjAxNTNCQzhFMEQyOUE3Cis6MTAwNkEwMDBDOEY3RTZCQ0VGNEY0NkJCOUQyRDBDOTRGQjI3OEZBRUUxCis6MTAwNkIwMDBDRjMwQjdERTEzQkY1RkU3N0FFMkNBRjBFRkRBNjI2REUwCis6MTAwNkMwMDBGOURCNUU2REY5RkFFOTdGMUUxRjVGREU2NUYxNkRDNTJFCis6MTAwNkQwMDA3NUZGNTRFMkY5OERDMTJCOTg5REQ2RTk5MjgyQTg3N0Q3Cis6MTAwNkUwMDA0QzdBMzk0QjlDREZFNDc5NzhGRjI4RUNBMjk3QTczMzRBCis6MTAwNkYwMDBBQTRGREY2QkRBOERGOUVEQUExRjU5MTZGNTkzRENDQzAyCis6MTAwNzAwMDA5NEU3RTRGNzA1QTBCQzFBOTI0NDNFOUY4QjYyMjVFQzY3Cis6MTAwNzEwMDBBNTNCRUMxQzdFRDBENjAwRkRCQ0I0RDg0M0ZCMjNERDRBCis6MTAwNzIwMDBBQTYzNTdFMTFFMkEzNzkxMUU1MjMxQzY5NDg0NzQ3MzBFCis6MTAwNzMwMDA0OEQwOUQ3QTFFNTdBNUMzMEE4NUY5MzEzRjAxODY1RUQwCis6MTAwNzQwMDA4OENGNzdGNUY2ODNFODNGMEU3RUNBMThDNzU3QTU0MkQzCis6MTAwNzUwMDBGOTg1NjIyQ0M2REFBOUZDOThBMEVGNDM2MjRFQzExRjRFCis6MTAwNzYwMDAyOEI0OUZERkIwMTkwODlGRjJDRkU1NUQyODI3MzBGNjQ3Cis6MTAwNzcwMDA4MjdFRTE3MzFCMjdEMkZDRDRGRDAzQkJCQUQwOTU0RTE5Cis6MTAwNzgwMDAyRTZCRDFBRkEyQzM0OTE0MEI3RDQyQTU2RkQ0ODBCMEFDCis6MTAwNzkwMDBERDE4RkNDRjdDQTI3M0UyMzc0M0QzRjhGRDA5RUZFNTA3Cis6MTAwN0EwMDA3MzdFMzJCNEM5MjlDRTdCRjE3ODU4OEUyOURBQUYwRjI3Cis6MTAwN0IwMDBGQkNEOEM4RUMzQ0YxM0E1OEIzMjU0ODU3NUIwRUU0RjE1Cis6MTAwN0MwMDAzMkYzNjlEMzRBMDMzRkZCMDNDOTY1QUIzNzgwRTMxOEIzCis6MTAwN0QwMDA5MjRENzQwRTQ2REQzN0Y2Q0VERkJFNUQ3QjA1QUVCM0JGCis6MTAwN0UwMDBFODdCQjRDRTc5MzYzQkFFQjMxOEM4QkFDRTQ5NEY1RjdBCis6MTAwN0YwMDAyQUY1QzdGNzhGOUNFNEY1RTAzRUY5NEVDRDJCMzM5NEY0Cis6MTAwODAwMDAzOEJBODFFRjFCRjlGNzE2RURGNzZFRjhERTE5Rjc3REIwCis6MTAwODEwMDAzMjdDNUYzMkZDRkJBNzZDQTZCMDZFMEFGNjUzRTE4OTBFCis6MTAwODIwMDAxMDNGMEZEMzYyRTY4OTc1QzlFOUZDQkI3OTIyREZCM0JCCis6MTAwODMwMDAzMDE5REFBM0JDMjlENkU2NjNCMEU5NUUxM0JGQUY0MzMzCis6MTAwODQwMDA5QjdGNzE4REI0MkUxM0Y3RDU1QzUzRTM0MDA0RkFGQjA0Cis6MTAwODUwMDA5OUMwREIzNUJBQzA1Nzc4M0ZERENGMTYxNTFEQzZGREYwCis6MTAwODYwMDA1NjYzMEEyOTY4MEY1RENCQzJFQjExOTk2NzJCMDM0RkMyCis6MTAwODcwMDAzOEM2MTIzRkY4MEJFRThCMjYzOTMwREUwOUU1RDNGQTg1Cis6MTAwODgwMDA5RUMyM0JGMjY5QkY1Q0NDOUMzNjdDQkUyQTVEQThGMzVECis6MTAwODkwMDA0NUZBNDAzQThCRDI0N0MyQkNBMzc4QkFBRThGMTJENTg0Cis6MTAwOEEwMDA3NjgwREU4MzRGNTUwRjAyNEI5QUU3MTM3QjcyNjJFQjIzCis6MTAwOEIwMDAwMjIyOUE2MzZBMjk0NDNERTQ2N0VENDFFMjFCRDczODdFCis6MTAwOEMwMDAxRUExQkNBNTMzNjMwMkFFMkNDMDdGREQ2NTVGRDBCRDI5Cis6MTAwOEQwMDAyNkNDQkQ3ODNDRUFGNzMwREZCNEFDQjRGRkJERjlBQTUyCis6MTAwOEUwMDBGQURFQjA3Q0RBNEYwRDlBN0NEQUQxRjY5NTNBNkUzM0E3Cis6MTAwOEYwMDBFM0Y3RDNDQzFBRDg0NUY5QjFDRDBCQUQ1RTNDRTdEMEM4Cis6MTAwOTAwMDA4Q0Y5OURFNTE0M0YyMjNEMEVDRjAxRDMzRDI3OTI0OTNFCis6MTAwOTEwMDBFODVEOTc5QTc3Q0JGNzYxNkZBMzg3RjRCNzI4MUYxNzI1Cis6MTAwOTIwMDA3OUUzQkRBNTdDREVCRDc3NzhENDdCNEVCODdFQjc5OEUxCis6MTAwOTMwMDBGMTdCNTJENDdCNEU5NkRCQTk1RUNEMkZFRkREQzVGRDVBCis6MTAwOTQwMDA3OEJEMkY4RUE3RjM1MEEwQkY5MUJFQzA1Mjc0N0M3RTlECis6MTAwOTUwMDBGOURBRkI1NUYwNEY0QThGRTU0MzZGRDY3MzdENzM5QkYxCis6MTAwOTYwMDBDRTVCODE3MERFODY3MTlFQUY4OUVGREU5NEE1RjU5QjJDCis6MTAwOTcwMDBBOEU1NDRCRkRFMzNDRUMwMkQ1OUU4MEYyOEYxRTU0QTgzCis6MTAwOTgwMDA0MDNGNEIwRERDNkYwN0Y0QjUxRENGNEVENEIwOTZBNzlBCis6MTAwOTkwMDBGMEZFQzBCOUFDRTVEN0JBQjE0NDVGMDFBMkFGNDk1RjgwCis6MTAwOUEwMDBGMDdCMDU2M0Y0QjU5OEQzNTc5MDk4OTI0QTVGNTFCQTlCCis6MTAwOUIwMDAyQTRFQ0M5RjBBQUNDNkY2QkQ4RUJFOEY5QTUwNEYxREY0Cis6MTAwOUMwMDAzMDEyNUVENDNDQjhDNDdEMUMzNzlGMTM3QTNFMUY5NzBCCis6MTAwOUQwMDAyQ0QzN0NENjhFMzQ5RjRCQTFGMzc4RkFDQTYwOUM5RUIwCis6MTAwOUUwMDA0N0EzRjcwQzg1MDU2RDY1MzE3QURGNjUwOUI0RTNCODc3Cis6MTAwOUYwMDA1MUJBNUZDRkVEOTE2MUYzOTZBRDQ0MUYzN0RFMkNGMzEyCis6MTAwQTAwMDBGQzcwMEI5NzU3MTg4RkM4ODRGMUU3OEJGMTZGRUNFNkY5Cis6MTAwQTEwMDA3NDc0QTNDRDQwNzQzNzdGQTA5MUYyODU1ODM1OEYyQjI1Cis6MTAwQTIwMDA3OEUxN0ZEQzBFRjQxMTdDRUJDNDc3MEI1REE1N0EyNEIyCis6MTAwQTMwMDBEOTg1QjVEQUY4NDM5RDU1OEQ2RkY4RjVCODFGNkY1QzExCis6MTAwQTQwMDBBODNGMTYyRkVGRUJEOEM2MkYzMEFGQUQwRUUzMTRFQTU4Cis6MTAwQTUwMDA3NzMwRUVFMzU5RDFGMzdGRTMzMTRFNzE1OEQ4RTk2NzJGCis6MTAwQTYwMDA4MUJFOTFGRURGNDg1QkI5RkQwRUEwREJGMThGOTc5NDRDCis6MTAwQTcwMDBBMTNGNjc3NkZBQUFBNzM2NDFGOTk5NkQxM0E5RkM0NkZBCis6MTAwQTgwMDBGQUFENzdCRDhCRjUzQjhCQTg1QzhEOTdCOEEwQkREMTM3Cis6MTAwQTkwMDBDOEJGMkZBRUI4Nzk1RTNFOEM3QkQ4MkNGQUM1N0Q4NTU5Cis6MTAwQUEwMDA3NjVGNTJBMDc3M0VCNDczNEYyOTI4QzM3Q0MzNkFDMUQ2Cis6MTAwQUIwMDAxRkNFREVDMUYzRERBRkJEQ0NDNjUzMzg1NzdBQzg2RjQ5Cis6MTAwQUMwMDA1NDlEMjRFQUJGQ0JGQjdEQkJGNDVGQ0EzMEVGQjRCQUMwCis6MTAwQUQwMDA4MERGRTNGMjc2RDk0RjI3NjJGOUIwRjRDNUEyOTFFMjQ0Cis6MTAwQUUwMDBERjkzOEFBNUYwMDQ4MDRGQjU5M0I3QUYyREZCNTExNjY1Cis6MTAwQUYwMDBEQUYxRDU1NUJDM0NDOTVCRDkzRDE2RUI3NUU3MTY4RENGCis6MTAwQjAwMDA3NEVFRjMxNzYyM0Y0NUNGMzU4OTdERkFCMkVGNjMzQTUxCis6MTAwQjEwMDBDN0U0Mzc0OTVFNUNBMjdGRkFDN0ZDNUUyMkFCNjQ0NzNDCis6MTAwQjIwMDBGRkEzREY5N0FGQTA5Rjc0OTY4RkU3MjU1Njk5REEzMzFFCis6MTAwQjMwMDBEMUZFQkQyRTYwMjhDN0ZDNTJCQkE5RjQzMEVBMTkyOUFBCis6MTAwQjQwMDBEMzJCQTcyMTdFNjc5OTk4MUVFNTEyRDBGOUZGMjEzQTkxCis6MTAwQjUwMDBCRkZDOEJEQzY0MjQyRUFCOTZDRTU1M0E5QUFGRDI3NzhECis6MTAwQjYwMDBCNTk2OEU2MTdGRkU3MzU2REEzN0YzRDdEMUU4MThDNjkzCis6MTAwQjcwMDBGRjc3RTQxMzc1REZEMkNBOTU2ODdGMDlGQjJEQjFGRkJCCis6MTAwQjgwMDBEMUY4MDBGRUM1RjNCOUQ4M0NGQTY4NUY2NTYzRDZEN0UzCis6MTAwQjkwMDA1OERDNzczREVBQkUxQkMyNzUxODc0ODM3NEFFMjM0RkQwCis6MTAwQkEwMDBGMjRFQTQwMzhEQTNDODdGNzU3RTM5QzBEQjU4RDlGMEZGCis6MTAwQkIwMDA3OUUxOUZBMkVBNjVGQ0NGODU3NjZFQjZBODg3RUY3Q0M3Cis6MTAwQkMwMDBDQzE5OUIxNzhDQ0ZDNkEwREM1RkNGRTdCMzQzNkFFMTlCCis6MTAwQkQwMDA3QzQzRThDNUFBN0REQ0E0QUVCNzVGQkJERThBMjQ3RTc5Cis6MTAwQkUwMDA5RUQ5OERGRTBCRkNDRTU1M0FGMUVCRTZERDJDRTRFNjBBCis6MTAwQkYwMDA0MjkzRkY0MTIzQUNFMTA2Qzc1MkEyODc5QjU4RjA0NUMwCis6MTAwQzAwMDBENDRGOEMyOTAxRTc5ODM0QjRCQjgyMDcyMkY5RTRDRjkyCis6MTAwQzEwMDBBNUJDMDBDMDc3RUE5ODM4RkQ0NDlENTcyMjNDOUE0NjBGCis6MTAwQzIwMDBFMTg3ODlGMzRFODQ0MzBDM0Y4M0E0NUZBOUU3QTNBMjI1Cis6MTAwQzMwMDBFQjRBNTg4RjJBRkY1RDA2QUQxRkM4MjlGQzM2NEVFMUVFCis6MTAwQzQwMDBBNzQxMEE0MTM5NThDQjkyMjg2RjYxOTY1NzIyMzk1RUU1Cis6MTAwQzUwMDBDQjRDQzQzRjZCNkJCOERDNzQ1QUI5OUM1N0U1RUI2ODVFCis6MTAwQzYwMDA3NDdERjU1NTlDQ0ZENDM2MzA3MUVFOEFDRjNGOTFBRTZFCis6MTAwQzcwMDAzMjU4RTQ3QkY4QUMzNTc5QjYyRUMzRkQ4QUZBODAyNzZBCis6MTAwQzgwMDBCNkRGNkJBRERDQUYzQjc3OENGMDFCQjJDODM0QjQ2RjEyCis6MTAwQzkwMDBBM0U1NjE3RUM0QzgzNEU0MUI4OUY3NDVENTVFRTA3RUQ4Cis6MTAwQ0EwMDA0NEE3Qjg5N0I1RDZGQkYxMzRCNEQ3OUQzNTkxNjlDODQwCis6MTAwQ0IwMDA3RjFFNzRGOEU2MjFERUQ0RkJEQzEyRjlDRThENjM3NDVFCis6MTAwQ0MwMDBBQTFGRjE5MkU4MkQxMTBGNkFEQzI4MzVDNTVGODdFMzcyCis6MTAwQ0QwMDA5Qzk2MDYyQkIwRjI5MTM0RTFENzY3ODE3Q0E0NDc4N0JDCis6MTAwQ0UwMDAzREJGMTJGRDAxQzBERjJFNUU0NEEzMEFBQjAwNUVEMzAwCis6MTAwQ0YwMDA5RDgxMDBEMkRCNERDQzNGMUJDRkUyMzk2QjAyN0FFRUY3Cis6MTAwRDAwMDBFNzY2QjRGRUI1NjJGREIzODVEQzNCQjc1RDI2M0Y3RDhCCis6MTAwRDEwMDBCNUFGRjgzMTc0QTUzNzFGRDFCMzEwRUQzQjFGQzlCMTgyCis6MTAwRDIwMDAzNTYyRkVFNzE4QzdEMzM5MkI5NzdGMkJERkZBQTcwQTY2Cis6MTAwRDMwMDBBMDVDMzY3RThCMkU3NjhGMDFGQzlCMTA0QUQyREM2MzQyCis6MTAwRDQwMDAzMDY5QUY1MzUzOUVEQzk3QTU2OTdGNTk3RjgxQTZCRTVBCis6MTAwRDUwMDAzNDNDNTE1MzNGRjU0ODk5QTYzQzZENzA4NkE2RkRFNTlECis6MTAwRDYwMDBFRjU3NjlDQTU3NDRFNjY5REE3RkVCRDQwMjRERjlDQUY2Cis6MTAwRDcwMDBBMTVCMzRFRDhGMEJGQjk0MDU3RDgzQzVFOTc4Q0ZCNzdDCis6MTAwRDgwMDBBMENCMEI0QjM0REZGRDM2NzlDRTExQTRDQjY1MUI3OTlDCis6MTAwRDkwMDA5RTcwMjU0MDQ2NzM5RjQzMEY5N0VGMkRGMDNGOEU1NzZGCis6MTAwREEwMDBCRjgyRjA1QTAxN0EyRkU2MDdBRkRDQTI5NUZGRjUwMzY4Cis6MTAwREIwMDA5QkQ2MjM0RjRCQ0M1RjU4Q0Q1QUFBRjA2QUI4QzRGQ0RGCis6MTAwREMwMDA4NTZBRkI2MjFERDJFMUUzNjM0NDlFQzJFNUVDNzI3MTY5Cis6MTAwREQwMDBGRkNBRDdFMkI1ODgxNUZFOTdGMDZBNzQ2QkYxNkFGNjIwCis6MTAwREUwMDA2OEYxNkEyOUQ2RTJENUU2RDVFMjM1NjVCQTE2QUYwRUM2Cis6MTAwREYwMDA5RjE2QUZBOTM1NUFCQ0E2RjlCNTc4Q0RBOEQzRTIzNTcwCis6MTAwRTAwMDAzM0EwQzVFQjk4N0EyRDVFNzM1QUI0NzhDRDZCRDVFMkRBCis6MTAwRTEwMDAyRjNGQjg1QThCQUYwNDdDQUJGQzZGNkNENzVBNERCQkRECis6MTAwRTIwMDAyOERFRkRGNTk0NzczMkFFRTcxRTREQkYyQURFODNGMDUzCis6MTAwRTMwMDAzRjhFRjcxNkNBMEJGRjZCRjEwRURDODZGQ0EwODk3ODlCCis6MTAwRTQwMDBGRjIwMDFERjIwMzczRTQ0QkUwMEYyRkVERkYwNTkzN0JECis6MTAwRTUwMDA1RUU4RDVGRTkxRTVCRENBN0ZFMkU1NkJCQ0ZEMzgxQUMwCis6MTAwRTYwMDA1RjFBMjY0Rjg0M0QzOUFBM0M0OUIwMjczRkMwRUMxODkxCis6MTAwRTcwMDBEMjUzMzY5MkJGRTU2NjQxOUY1RkUyQUIyQkQwOUZGOTFDCis6MTAwRTgwMDA2MzkyOTMxRkMwNDRBNkMzQkMzRUMwNzlDMzM4MUYyNERECis6MTAwRTkwMDA0RDIyN0JGRjU2MTZENkQzRkRCQjk4RjEwNzlEREU4RTAzCis6MTAwRUEwMDAwOUMwMzJERTlCRTNBMUU3NTIyMTQ3OTcwQjdGODBDRjM5Cis6MTAwRUIwMDAxMkI4Mzg4NkZCMDFGMkQyNzFEQ0VDNDE3RTBGRjJEQjE2Cis6MTAwRUMwMDBBOTk3NzQxRkMwMzFGNDg3MkI4QzlENDA3RjM4M0NDRjhECis6MTAwRUQwMDA5ODM5M0Q5QzU0Rjk4MzhGNzk1QzcxNzA1QjMyNEIyQTUxCis6MTAwRUUwMDAyNkJENTE0RUEyQkM5QzI1Mzc0OTI0NDc5NkZDOUUzRjA3Cis6MTAwRUYwMDBEM0IzQjlGRTk5RjhFQzY4NTVFMUM2RUQ5Mjk5RDkxRUM1Cis6MTAwRjAwMDBFMkVCRDlBQzRGQzgzQjE2QjA4RUE1N0VCOEZGRkE0OUNDCis6MTAwRjEwMDA3RTBGRThGMzEyNTNBNjNCRTkzODEyRTEzMUMzQzRFNzcwCis6MTAwRjIwMDBGNUJDOUU5OTEwN0VDRkIyODAwN0UxRjI0MzA1NTgxM0JECis6MTAwRjMwMDBDRjg3OUY4OEY0QjBFNEY3RUYxNkEwM0Y0OUVFQjA1RjhCCis6MTAwRjQwMDA4N0Y3M0M0RkMwRjE2MDFFQjM2RjZCOTFEMEJGOUFFMTQxCis6MTAwRjUwMDA2RTkxRDA3RjMzRUNGREZFN0IyNDNDQzcxNzJEMzNERTMyCis6MTAwRjYwMDAwRUZGMTAwRUFBOUZBQzU4QzdFM0M1NDM3NzcwM0RGRjM0Cis6MTAwRjcwMDBBOUVGMzJGMkZGNzRCNDA2MkI4MzE4Mjc5MkMxMjBDMzY1Cis6MTAwRjgwMDA3QzEyM0QzRkY3M0IzMzlCRkJCRjMyRDkyMEREMkZDQTlDCis6MTAwRjkwMDBERTE0RkE5OUI4OTdCRDQ0RTQ5NzlGMTFGMTk2MTVCQkZBCis6MTAwRkEwMDA0QzBDRjMxNTRBRjYxRDc0NjI3QzY1MDVFMDcyMTBFNTgxCis6MTAwRkIwMDA5OTEyQTA3QjJDNEFCNkJFRTFFNEY3N0RFQjFENzg1RTZBCis6MTAwRkMwMDA0Qzk1QTNBM0UzNUI2MTI3RTNGMkI0MDE4RjIzREUxNzAzCis6MTAwRkQwMDA3OTVCMEU5N0UzMUQ2RDM1MzMzMTNFQTJDRUU3RkUzNkM5Cis6MTAwRkUwMDBERjRDQTQwRjU5RjE1MjlFMTdERTZGRTM4OEZCREVFMDYxCis6MTAwRkYwMDA4MkZBQjhGREFCNTg2QjM0NjVCREQ1NEY5NzQ2QUM2RkUwCis6MTAxMDAwMDA2QjIxM0FEMzhCN0I3ODFFQzg1RTZCOEZCRkJGRkZENjM4Cis6MTAxMDEwMDA2Q0ExNDc5ODgyQ0M5RUNFODQwQThCNEZFNTI0RjI4NzQwCis6MTAxMDIwMDAzRjMyNkUwRjFBREREMDRGM0M1RkJCMkI5N0M1RkI3NzZECis6MTAxMDMwMDBCQkRBRkMzNERGRjU1MjIwODA5RDE4MEI1OUQ4OUM4QzBDCis6MTAxMDQwMDBGOTAzNzhDNjExREU2RkJERTYwOEU2QjMxODZDNkJCRDE4Cis6MTAxMDUwMDA2MUNGRTg3MDMzQkE5NUYzRjE3Q0E5MjE1QkNCOTdGRUExCis6MTAxMDYwMDBBMUVEMTRDMUE5QTNBRDhFQzYzQjgzQkExQ0ZBNzczMjk5Cis6MTAxMDcwMDBCOTdGQTdBMzZEMzFCREQ3RDU3ODg4OUU1RURGM0FGRUQ0Cis6MTAxMDgwMDBBMDA3RUE4RkMyM0ZCQzhGQzZFOEUyRjM2MkU1QjkyNDRECis6MTAxMDkwMDA5RjE2MDkzQTQwREY1MTBFRDBDRkQxNTYzREQxRDk5RDkwCis6MTAxMEEwMDAzOUQ2MTA2RUMyM0JERjE5NzcxMEVGRDMzNDAwOENFNEQxCis6MTAxMEIwMDBCRjYyREVEMTcxMDQ5QzBDODIyRjAxM0RGOTcxQkYxOTEyCis6MTAxMEMwMDBCMjE0RjJDMzNBRUQwQjA4NEZGRkQ1RkU1NEY4MUFDQzE4Cis6MTAxMEQwMDA4Q0VFN0IzMUU0NThDOTdGNzJBOUYzREM5MjJERUM3QzU1Cis6MTAxMEUwMDA1NUNFOTdFNzEyMUZCRDUzQzBFNUY1QUQzQ0ZGRTdFOENECis6MTAxMEYwMDA1RDhDRjRFRTNCRUZFNjdFQjAzQkMxOEVDNzdEQzk1QUY2Cis6MTAxMTAwMDBFMUFGMjI0NjM3MkFCRjRFQzMxQjM3RTA2NTRGMUIzMDg1Cis6MTAxMTEwMDA5QTIyQzYxRTZBMzNFMTA5Mjc2NjQxN0ZENUQ4MTgxRTc4Cis6MTAxMTIwMDA3QjdDOEEwM0RERTI5QkFBNURGM0YxRjlEMEY0MTMzREU5Cis6MTAxMTMwMDBDODU2MUU5RUY5RDUyMDNFRDFENzhDRTNEQjVCNTgwOEZDCis6MTAxMTQwMDBGNTRDOEE4OUMyRjg4RTdBMjhDM0Y4QzlBMjNFMzlDMDA0Cis6MTAxMTUwMDBDQjI5QTIzRUE1OEU5NzczN0MyRjQ4RDUzOEIxODQ3OEQxCis6MTAxMTYwMDA0NDhFRDUzOUI3MTBGOURFMzJDNkNGQjc4QUYzRUQzQkRFCis6MTAxMTcwMDAwNERGMUQ2Mzc1Q0VBRkM2RkFEQjE4RTVCREFCRjU4Rjk2Cis6MTAxMTgwMDA4QkZBNENFQkIxQUVCMUM4OTcxNzZBQkZERjJBRTA5MDdCCis6MTAxMTkwMDA2MTNERDYzMzhCRTIxNkRBN0EzNUNFOTA2NjNENzc4NEEwCis6MTAxMUEwMDBCRTJGRDFENjNGMkFCRUI3NTlDRjBEQ0VDMkZBNDJFRERGCis6MTAxMUIwMDBGODBGOEE3QThCOTVGMzQzRTZFN0Y3OTRBQUY1M0YxNDg0Cis6MTAxMUMwMDBGNTY2MkIzRkU3MDUzQzU5NTNERjJEQzZFRjkwNDI4NDZGCis6MTAxMUQwMDAxRkJBOEIxNUY3NEYxQUY3NUJFRTZDNjM1N0UyRkVFOTA3Cis6MTAxMUUwMDA2OTFCQTI3REY0NTBEQjA1QzJEMzM5Q0NGMzk5MTZEQjIxCis6MTAxMUYwMDA1N0Y2NTYzNkUyQjlFQjczODI5RjI0N0IyMjNFREYwODE2Cis6MTAxMjAwMDBGQzRFQUQ3N0RBRjlCOTcyRDk2RDIwM0EzMjVBMDVCRjgyCis6MTAxMjEwMDAxMEZCMzBDQTJGQTQxNjJGMjcyRUVFNEZGRTI2N0E4NkZCCis6MTAxMjIwMDAwRDc2MUVGNThCNUNGODQzN0FDRUJFNEJDNzAyNzE3Q0ZGCis6MTAxMjMwMDAyQkFCMjE4OTA1RTJEQUJCOTczOTM1RTVGNERCQjIzNDEzCis6MTAxMjQwMDBFRDVEMEIwQjM0RjVENkYyODk5QTdBRTZDQkExRkRCMkFGCis6MTAxMjUwMDA1NkQwNTU1MjQ5OTlBNjVFM0RFRkNFN0E3MjM0RkFCMzE0Cis6MTAxMjYwMDBCRTcwODZBNkREQjk2MjBGRkQ4RUM3QzlCOUVBRUY3REYzCis6MTAxMjcwMDA3ODREQzgxN0Q2REEwQTMyNTBFRTNDREIzNjFEOTU2QzM1Cis6MTAxMjgwMDBGNjNDRUMyNzNDQTJGNDlDODNFN0Y5M0U4N0YxNTFBODk5Cis6MTAxMjkwMDBGRkM3MzYxRkJEREYwM0Y1QTBCOUIwMjc2MUJGNzlBMDM2Cis6MTAxMkEwMDBGREFFMzYzQjk1OUY2ODczRDM3MzQ3OUI4NzlFOEZCNzgwCis6MTAxMkIwMDAxNTUzRkRENjM2MkY5NTFGODNGRUYxRjkyOEY0ODNFRkUxCis6MTAxMkMwMDAxRjY5QUJBMUYyQTYzNjNGOTUxRjZFQUJBM0YyODM2REVCCis6MTAxMkQwMDAwMTdBRkVCMEFEOUVERTc3QjdCNTUwRjk4MUI2NTY3QTg5Cis6MTAxMkUwMDBERURGMTZBNDY3NDc1QjE3RDUxNzBCRjlGNjlDMzgyRjdFCis6MTAxMkYwMDBGODVDMjUzRkZGOUI4OEM3QzkzOUMyOEYyNkUyRjhCNjQ0Cis6MTAxMzAwMDA1ODFDN0Y3MjBFQzZGMUZCMjI5QTdCRDY3MURERDQ5RkVBCis6MTAxMzEwMDA5OUFGM0ZCMUJGMkFEMURGNDQzNkQ4NkVFMUZCOThFMkU2Cis6MTAxMzIwMDA3RkUzRkFCREY3NTk4MERFQzdCNDcwM0NFNEY3MEY1MTk0Cis6MTAxMzMwMDA3RDY2M0RDNzQ1OTU5ODJGNzMwNTU5NzYwNTNGRUU4OTIzCis6MTAxMzQwMDBFRENFNDg4MzU1MTYxRTBGMjU3RjAwNzNDMzNBMkJDNDdDCis6MTAxMzUwMDAzRDM0NDQ3NjIxMURDRTRCOTlDRUU1QTY4QUQ3RThCQTE2Cis6MTAxMzYwMDAxRDdDOUVCOEZFOTFFNkZCNkQzMTVGQjlCQzhGREYzMzBCCis6MTAxMzcwMDA1MUQzMTM0NkIyNEZGMkI1RDAzRDEzQTYzQTdGMTg3RjMyCis6MTAxMzgwMDA0N0MyRTUwRkQwQjlGNzg5MTdFNjgwNzEwMzdDRTZDMjQyCis6MTAxMzkwMDA1NUNDMDNDRkVDMDZBREREOTNCNUFDNEM2MzVGQzgxN0ZECis6MTAxM0EwMDAxRTYyOUVBOUQwNkY4OUQ2M0U0OTJBNUNBQkY5Q0U5NEM1Cis6MTAxM0IwMDA3RDhGQTZERUUwQkE0RjUzQkY2NDRERkU3QTM3QzI3MzBECis6MTAxM0MwMDAwQ0EzMzg4OTcxNjMzQkMzRDBERUYyREU0RDM0QUY3QkIyCis6MTAxM0QwMDBDNTNBQ0U0ODFFM0EzNzFCRENBN0M2QzlCOTdFRkU4QzdCCis6MTAxM0UwMDA5MDJCQ0NCNDkxRjZDMzc4MDcyRjE2QTUwNDc1MjgxNzU3Cis6MTAxM0YwMDAzRUZGQTcxNEUyNDc0RjNGQTEwQkExMUY3NDAyMEJFOTY4Cis6MTAxNDAwMDA3MEZGNEYwMjc1MEZFQjI3RTM0REI1MzI1RDVEMjI2MzMwCis6MTAxNDEwMDBCOTk0Nzk2NDJDNEY2NTQzNjQ5RjgwN0U3RTI3RDIwQkZDCis6MTAxNDIwMDBFOEU3NEY5ODMxNEU5NzEzNzg4NkU3MEY4NTQ5NkUxNjk3Cis6MTAxNDMwMDAwOTdDMTZBOUY2QzgxNjI1RDEzRjdBNzcwRUY5M0ZCNDc0Cis6MTAxNDQwMDBFNzg2M0E4NTlFREVFRUE4QzhDMEY4RTQ5OTUxRjJCQjYzCis6MTAxNDUwMDA2Q0VFMTkzM0YwRjdBQzZDOTlEM0U5QTlCRTdGRDBBMzM5Cis6MTAxNDYwMDAxQkYxM0NFQ0M2MUNENThGQzRFOTdFMDIxMEI5QTBGQjcxCis6MTAxNDcwMDA4RDM4OEZEM0U1QkY0QTQ3NzNBRkE5NzA4OEU4RkY4Q0RBCis6MTAxNDgwMDBFNDczMkY0NkI4QkUyNTczM0ExQ0M4QTQ3NTI5MDJBRTcyCis6MTAxNDkwMDBDQUJFNEFGNzYyODA5RkYyQ0U1ODZGOTBDNUM2NzlCQTJECis6MTAxNEEwMDBDRDM3NDM1MTYyRTUyMjkxOUZCOEI3NkRGRThDRUFCODAzCis6MTAxNEIwMDBGN0ZEMDI3RkM1NkNCMDA2RTU1MzcxODlDRTFCQTI5RTc1Cis6MTAxNEMwMDBERDFBRkU2NTJFRUNGMUUxNzk2RUE1OEM3OTkxQkQ0REFBCis6MTAxNEQwMDA2MDNERjdBMUFDNTZGRTIyNTNCRTg5NzJFODBBRTYwMUQwCis6MTAxNEUwMDBCQkMwNkEwRDMzQ0NDRkU5OEZFRTZGQTZGOTlEQTNBRkQ5Cis6MTAxNEYwMDBFQ0Q1Mjk3NDJGNUY1Njk0RUZBMTRDQzRERjM1MUE0NDA0Cis6MTAxNTAwMDBGQUY5QUE1N0NGRDc3NTQ4NUI1RjZDRTU3OTM0MkI4QTE3Cis6MTAxNTEwMDAwRDIxOEY4NEUxRUQxRUJBN0Y0RUQ5MjkzMTU0RkQ5NUZFCis6MTAxNTIwMDBCRkNDMjIzOEIwOTcyQzQ0N0Y5NjJENTNFOEVBRUFFQkUzCis6MTAxNTMwMDA5NDQwMDhFOUUzNzREOEYzOTI2RUFDQTA0NTY4RDczOEJDCis6MTAxNTQwMDBDOUIwMUJGNUIxRjEwODE3NUM1MDYxMzFDMTc1Qjk1OENDCis6MTAxNTUwMDBFRkRFQjZDNTA0QTc3NzA0QkUzQTczMTJFNkMzQkMzRUZECis6MTAxNTYwMDBCQzlGNzE0NUFGRUFGRkQwQUVGM0MxRjJBQUVCRjEzRUVBCis6MTAxNTcwMDBCQjhFNDE1OUU4NEE1QTc4NkVEMDBGNEVDMURGODgzQjg2Cis6MTAxNTgwMDAxRDgxNzlDOTM0Q0Y3NzEwRkZGMjk2MEFGQTlEMjMxMDk2Cis6MTAxNTkwMDAyMEI0QkVDNjI3QzBERUNGMjc3RTU0NDM3MjdCOUE4RTBFCis6MTAxNUEwMDBGMjQ0MTNFOUVBRDc4MjhGMkRDRUUxRkUzQzlCRkJBQUUxCis6MTAxNUIwMDAxOUY4N0I2QkIxRjI0Q0EyQ0Y2Nzc1RENDRjFBRDQ3MUVFCis6MTAxNUMwMDBGQjUyQ0RBMzAwQzVDMTgzNzY1RDQxQUVFQTY3RUM2NEYyCis6MTAxNUQwMDBGMzUwNUUzQjc0OTQ3RjI3RUY0QUEyNzM4MEIyNDNBMTFECis6MTAxNUUwMDA3Q0RGNEU2QkI1N0QzNUY2NjM1NzI4QkUzMTQ3OUUzOTlCCis6MTAxNUYwMDA4ODdBQjNEMUExOUI4QTdBRjdFMURERjcwQzYyOUU4N0U2Cis6MTAxNjAwMDA5Q0EzMzBGNDE3NzVEQTE1QUU3NzY0RUIyODJGNEE3MTc2Cis6MTAxNjEwMDA1NDlCMzAxRTUyNjQzRDUxODlGMDNDQjhFQkZCRTRERjMzCis6MTAxNjIwMDA5MEJGMjc3MjM1ODQzRjQ5MkY1MEQ2Qzk1QUE4RkY2MDEyCis6MTAxNjMwMDBCNjIyRUVDREYwRDU5NkE2MEI1N0JFMDdFRDlGOUE0RjdBCis6MTAxNjQwMDBEMThGNzJEODdFQ0U4Q0ZBOEFDN0JBODJGQzY5NjlCOTBBCis6MTAxNjUwMDBEQzJFRDQ2M0RDMEJDQTRGQUMzQkU3NDBCRUY1RDZBRTA0Cis6MTAxNjYwMDBGNUNFN0NENDlGNDMwQUU5MjBDNTdGRUVDOEEyRjNERDA2Cis6MTAxNjcwMDBCQjBDNzRGRTVDODU2QjVFNTBEMUM0Q0Y3MjVBQjU2NUVECis6MTAxNjgwMDA2MzQyMUM0RDlGNzBGRTI3MDlDN0E3RkQ1RUM3QzI3MTRDCis6MTAxNjkwMDBFQkQxQkJCOUJEQzY1QzU2QjI3N0QyNzIyNUVFRTcxMTZECis6MTAxNkEwMDA2NTZCMkVCRjc3NzBBRjNFOThFNTA1RjgxQ0RBQjUyMjYyCis6MTAxNkIwMDAwRkQ3NzVGRTk1MDBFNURCOEVBNkVGN0Y5NEUzMTFGODVBCis6MTAxNkMwMDAwQjlBNzU3NDhGNjlEODhDRjlCNzRGQjVCMTM0RDRFRkQ0Cis6MTAxNkQwMDA0QzIxODVGMjlGRjcwODdFNTY2OEU1RjRGRkZCNUM0RUNGCis6MTAxNkUwMDBFNzg5Q0ZDMjFFQkVFRjk0RTc5MjQyMTZDNDlCQkRBRkZFCis6MTAxNkYwMDAyQzA4NzQzMkU5RjVCOUNDMDNGMkFGRDBFRTIzRkY2MUM4Cis6MTAxNzAwMDA2MUFCMjEwREUzRjg3MzdFNjIyNTNBMzk2NzREMjIzRkM0Cis6MTAxNzEwMDBBMUQyOUFFNEM1RjcxREJCMkI4QUUzQ0YzNTg1REFFQzVECis6MTAxNzIwMDA2OTk4MUZCM0JCQ0Q5NDg2N0MyQTM0MEE3RjFERUJEMDA5Cis6MTAxNzMwMDA1MURFQjA0N0M3RjNEQUJFMjVFNkY1QUQ1QzBCQkY0NzE3Cis6MTAxNzQwMDAzOTk3RjM5OTI3OTVFMDAyOUNFNzkzODA0RkNDNTczRTU5Cis6MTAxNzUwMDBCODkxRUJDMzZCREI0RDM0OEZCNTZGOEQyNUJENkEzNDBCCis6MTAxNzYwMDBCODNERERFNjRFQzM3QkQ4Nzc2RkQ0NjVBMUZGQThCMjQ0Cis6MTAxNzcwMDBCQjcwMDNERTQ3QjBENkM2RUY2Mzk1NTMyNjkyQkY5Mzg2Cis6MTAxNzgwMDBGRDQyQ0Y1MDdGRUY0ODlFRTE1RDFBQzdERkU1OTQ5OTk3Cis6MTAxNzkwMDBDNTQ4NTdCMjFDQ0M0MkJGODg3RjY3RDVGNTk4QjcwOEJCCis6MTAxN0EwMDBGOERCODZFNUJBREM4OUQ3NjM1RUUzNUU1QjMwMEJGMzdBCis6MTAxN0IwMDAxQzAzQjk1Mzc4MzkyREI4MERGMzFDRUI3M0NCNzgzOTcyCis6MTAxN0MwMDAyNzk4ODVCRkU3RDQ5MjVCQzFCRjFGMTdEQzg2RTVENjlCCis6MTAxN0QwMDBEQzE5QkMxRTdENEZDMDNCODNCOTU3NUQxRjg0RjEzQUI1Cis6MTAxN0UwMDAwQ0RFN0E2NEM4M0Y4NkY5OTdDMEZDRkJDNEYzM0UwMTY3Cis6MTAxN0YwMDAxN0I1RkUwNTdDMEY3MERFMkY5RTg5RjUyRjg5RUZGQTU1Cis6MTAxODAwMDA0N0E5N0Y1NUQ0MEY4Q0QyRkY2QkUyQkJGMDI4REYxRkI2Cis6MTAxODEwMDAxMkRGMUQxRUU1RkIzN0M1Nzc0NzQ2QTlGRkI5QTg3RjM0Cis6MTAxODIwMDA3Qjk0RkU3RjI5QkUxQjFDRTVGQjVGODlFRjdFM0RDQUQyCis6MTAxODMwMDBGN0JGMTFERkJEM0Y0QUZEODdBMkZFNUYxM0ZBM0YyQUMzCis6MTAxODQwMDBEQTQ3QzRGQjAyREJDNjBGQzM0MDc3MDVDMDQ3OTAyRkMxCis6MTAxODUwMDAxNURCMzYzQTcxOUZFRkVFMkEyN0ZBRUZBOEUwRjExRDZCCis6MTAxODYwMDA5NURFMEJGMDc3OTRBMEZFQ0I1QzdFM0ZFODk3ODJGRjdECis6MTAxODcwMDA2RTE3RkQwMzFEM0U4Qzc0QjdGNjFEOTlGMjVEM0E3NDI4Cis6MTAxODgwMDBERTUzMjFFNEEzMUI3NEE0MEZBQzdEOEJEQkU3NkJCQkExCis6MTAxODkwMDA5NTUwRkMzOTg4RUQwOUYzNUYyRkU2RDcyOUU2REI5QkVECis6MTAxOEEwMDBDQkYzQTk4RDZFNzc1QTZEQkMxRkM5QUUyRDYzN0ExNDI4Cis6MTAxOEIwMDBGMjVERTBERjk0M0Y1QkRDNURENTU1MENFNTMxNEUxREZDCis6MTAxOEMwMDA2OTIwNEFBMzI5OENGNzIyMjgzNjIxMTdFQ0U1M0RDNTZCCis6MTAxOEQwMDAzODNGQUI0MkU3QzExNTg3MTJERThCREZCQkNCNDlCRjc4Cis6MTAxOEUwMDA1M0U3RDc2OTU1RTg1RTJDRDlDNkU1QzA5QzlGQ0NCNEI4Cis6MTAxOEYwMDBBMzlFRDVDOTAyODMzRUZDREVBRDkwRkU3RUIwQUJDQzhDCis6MTAxOTAwMDA4RTdDQ0Y2MDVCNjZDN0ZEQkJENkMzRjc3Rjc1NTM3MTE2Cis6MTAxOTEwMDAxMkYyNkJGOTQxMURGMUVGQzM3NkJFREY3N0JBNzVFNEMxCis6MTAxOTIwMDBCNzAwQjk0MkU3NEE4MDVGN0I1MTQ2OEM2N0UxNzYzQTVGCis6MTAxOTMwMDBBN0YwRDA0QjhCQjk1RjhGRDk0QTJCRThEQzg2MUEwRjAyCis6MTAxOTQwMDA5Njk0MzhGREZGMDRDMjA3Q0Y0QjA4MzlBMkEwN0M4MUQyCis6MTAxOTUwMDBFNzkzRTVFMkJDNDE5MEZCOUZGMjE0RTYxRTEzNzc2RTFECis6MTAxOTYwMDBGMjQ0QUVDQ0NGNjMyODA4MjNFODRCQUVBNUZCODE3MkNFCis6MTAxOTcwMDBENzI5MUFGRjdCRjY1RERBQjIyMTQxNkUyODA5NzI2NTFDCis6MTAxOTgwMDA2QzE3RjBDOTM4Qjk5MzFGQjQ2QkNBRUZFNTBBQkY5OTU5Cis6MTAxOTkwMDA5Nzc5NTE3RjlERjM5MzhEQzQwRkNGQTE3QzkzNDZFNzM4Cis6MTAxOUEwMDA3QjUxRkUyQkY4RjE5M0UyQkU5QjI3ODNGQ0JDRUVDMTdBCis6MTAxOUIwMDA4RDY1M0Y0NzdDQUZFREQ2RDFGRENFOTdDQTQ3QjdFN0RGCis6MTAxOUMwMDAzMjgyQzNCODAwQzgxREQ0NjcxNDk2ODVGNkQyMzdDMUQ5Cis6MTAxOUQwMDA2MTlDREVFRkE0RkIwQkJFMDExRUUzMUUyRDc3MjJCRjMwCis6MTAxOUUwMDAxRDE3NTA0OEVFMEM5MzFCREYwMEFGRTcyNUVGRkIwMUZFCis6MTAxOUYwMDBDNEEzMjM4OUVCRDU3NkJFRUVDRTc0MTdCRkY3NDc5QzAwCis6MTAxQTAwMDAwMzk0ODVCRTc2QkZGMDgzMkIyOTczM0NGODUzMUM5RDRECis6MTAxQTEwMDA4RTE2MkFBRjk3QkMxOUQ3NDJGQjA3QTQ4MDFEQ0I0NzZGCis6MTAxQTIwMDA5QzQ5NUNFRUU0MjQxMTFERUU0NTVEODZFRTJGQ0NGNDVFCis6MTAxQTMwMDBBMzdGQTQyRjY0NTBFRjAzMENFM0ZGRURDMzNDMTlGNTIzCis6MTAxQTQwMDBCRTQxMzdFOTY3QTJGQ0UwRjVENUQ4NUVCMTRGNDI5NUJCCis6MTAxQTUwMDBCMzI4QUZFNzYxRkQ5NUQwREVDMEEyRURGMTVDRDNCMzUyCis6MTAxQTYwMDA4Nzc1QTJCRkNEMEZBM0JFQkEyRjg5NjlFRTVCREM4NzU1Cis6MTAxQTcwMDA3RTc0MkE2RjdEMThFRjRGODRGMUFFOTVDMTA2OUJGRUYwCis6MTAxQTgwMDBDNDEzMEY1QkFGODhDRDY3NkFFOEE5ODdEQjI5NUY5NTMwCis6MTAxQTkwMDBEQjI1MEVDNkVGQzMzRUVEODkyNEUzNzYwMUZCQzQ5MzNDCis6MTAxQUEwMDA4Nzc2RjlBRTEzRTk5QURGM0YxM0VENTM0NEZCQTY4MTI1Cis6MTAxQUIwMDBBMUE2RTczQ0Q0QkU4OERBRjcwRjI1OTdEMEZFMUFBQTc0Cis6MTAxQUMwMDA4ODZGOUYyQ0VDRkRCOEY2MjU1RkQ3QkU1ODlEQ0Y3MzZECis6MTAxQUQwMDBCRkJBQjE4NEI3MkZDM0Y2NjczQzkxNzRDQTNENDk5ODI5Cis6MTAxQUUwMDA0RkVBRjBGRUE3N0Y1REZGMTM0NUZCRDNFMTVGNTFGQjlCCis6MTAxQUYwMDAzMzJDOTIzRTM5OUZCRUJCM0EwRkU4RjhFQ0RCQkZBQTBECis6MTAxQjAwMDAxMEVCNEU0NzNEMTlCOEEyMEZERjI3N0I5OEI4NzdBRDkxCis6MTAxQjEwMDA4NUY0RTczRTUzOEYxREY1MzVCM0JFQzc4RjdDQjcxMEY0Cis6MTAxQjIwMDBFRjRGOUExRTdCQ0VDQTJCRTQ3QTU1QzJGQjNFMTM0Qjc1Cis6MTAxQjMwMDBBRDQ1N0E2Q0Q1OTFGREQyNjcxQTJDMkI0MTdERkE2NUEzCis6MTAxQjQwMDAyQjZCODczMTc0NzlFQkJDQzgwN0ZCMjM2QkJEMjVEMEE5Cis6MTAxQjUwMDA2RTY3RjY0Q0IyMkJGNjE5NUFGQUU4OUNFRDYyMkI5RDkzCis6MTAxQjYwMDAwM0RENjlFRkIxRTNGRTMxM0I3QUVDMTg0NzkwRUZFNjE1Cis6MTAxQjcwMDBGQTkzQjJDNDFBNzgwQUU5MjlCQ0I2Nzg3OURDRkU5RERBCis6MTAxQjgwMDBFQUUxQkYyM0QzRkQ4Njc1MjNEQTAxREQ3QTZGQ0Y3OEQyCis6MTAxQjkwMDBENEIzNkQwQUU1ODEyQjRCMDZFNkQxQjlCRDFGRUIxODE2Cis6MTAxQkEwMDBGMTc3NTg1NzE1OTQzQjFCNzU3NDJGN0M5QjY3QzkzMjhFCis6MTAxQkIwMDA4NDJCNTNGQ0ZFMkFGODJFMzc0RDkxRjAxQ0M0RkQ4QTZECis6MTAxQkMwMDBERjg0RjEwQkEzRDBEQjc2N0FGOUVGQUVBQUUzNkVDODFGCis6MTAxQkQwMDBFM0YyNjk0MzFFQkYxRkFBN0JGMTczQzU2RkMyNzczQjU3Cis6MTAxQkUwMDA1QkQ3RjZFMTc4RTYwOTI2ODZGOTVFM0JCMzRGNzZFM0VDCis6MTAxQkYwMDBCOUNEQzdERDYwRjEwMjFDQUMwRDNBRkE1RDk0Qzc2QjNDCis6MTAxQzAwMDBBMTREMEFGQTMzMEMxQTdGQzVGMzUyMUZCNTBGMzZFQUZECis6MTAxQzEwMDBDODRFQjA5NjE4MzRGRThERDQwNjlEMEZGRDhFM0IzQzA5Cis6MTAxQzIwMDA4MTdCNzFERTUzREY1MUFFQzVGMURDRTMxNDNCQ0FBNzAzCis6MTAxQzMwMDAwN0REQkYzNkU5NjA5RUM5RTVEQTdFRUQzM0I1RkQzOEQ0Cis6MTAxQzQwMDBBQkI1RjVBRTVBNkQ3REZBNDI2REJERkIzNjQzODJCRjMyCis6MTAxQzUwMDA0NjVCQkU4ODgyMDhFMTA4M0NDMDBBNzIyODg5NTdCMUY5Cis6MTAxQzYwMDAyNEVCNzlGQTVEQUVFRUMwRjY5RUYxQjAxRUEzMjU1OEM2Cis6MTAxQzcwMDBGQTI2Q0MzNzY5NjIxMkQ5RkIwRkJDOTE4NDlCMEZGODBFCis6MTAxQzgwMDAwRjIzQkVGM0MwNjQ0NkY5QTc4NzcyQkVFRjQ2Nzk5QTY4Cis6MTAxQzkwMDAwODlGOUREOTA2NUFBRkI1MTBFMDk5OEZGNkZBMjlGQTM4Cis6MTAxQ0EwMDBGRDJDMkI4QjZCOTc4RkYwRjE2RENGOUJDNkNCRUUwQTgzCis6MTAxQ0IwMDBGNENGMzFFMjgzQ0ZBQkZFRTMxQkY4QjlBNjlEQUREQ0Q4Cis6MTAxQ0MwMDAyRkZENjAxRENGQ0ZBMzE1NTRFMEZFRTZFRDkzRjFGNzk1Cis6MTAxQ0QwMDBCQ0E2QTBERkJFRUIwRUNDM0I0Qzg0NkIwNkU2RTNDODkzCis6MTAxQ0UwMDAzMUZBNThBRjlFMjNDMTUzOEMxNTlDMkRFM0JFM0JFRUI5Cis6MTAxQ0YwMDBFMTc0RjI5MzNDMkVGRkY3ODk3QjBGQTJFRDcxMUZBNkQyCis6MTAxRDAwMDAzMzZFQ0E0MjdGQUZFNkE5RkUwNzlFOTdCRjU5OERDN0MzCis6MTAxRDEwMDA4ODMyNUUxNzg4RTU3RDg3OUREN0UyN0VEQUJDRDA1OTkwCis6MTAxRDIwMDA4NkZCRTkwMUExOTdBNTY0MUI3QzEzNjBCRThGMUMzMTYzCis6MTAxRDMwMDAwNEE1Q0JBMEFDQjBDMzdBOTBFN0ZCOUM3QzVDQzM1QkYyCis6MTAxRDQwMDA0OTQxM0NEN0Y0ODhCQjlDQ0U0OTdEMjRFNkY1NDJBNUE5Cis6MTAxRDUwMDBGN0JENUFEQThGMEFFNTM5M0RFMkYyOUFDQkI4QkU4MTc3Cis6MTAxRDYwMDA3NzRBMzNGQTQ5NTQ1MDJEMEVENjk2OTE5REZBODhDRjcyCis6MTAxRDcwMDA2QkM2RkRGQTQ4QjZENzhDNzlDMkU2NENDNThFRkJEODQ3Cis6MTAxRDgwMDBFOTU2RThCRUFBNDc0QzAxM0JFQTJENEUxMDgwRjgzQkNECis6MTAxRDkwMDA2RDg2OUM5RUI5NzQzRTA4NjBBOEFCRTAyMTAxMjZGMkQ2Cis6MTAxREEwMDBFOTMwOUYyRDU1QzA2QkE3N0I5OTFEQ0Y5MUJCMEFGN0RBCis6MTAxREIwMDBGRjFERkFENTUzQjFCRjY0RkUxREMyQzkyMUUwNzQzQ0JBCis6MTAxREMwMDBDRkMzRjM4MzQ1RkZBOUNCNUVBMEY2RjhENzU5MTFENzRGCis6MTAxREQwMDA5Rjk3RDM5NzYxMkUwQkQxRUY4RDg5RjFENTdFQTJGRDEwCis6MTAxREUwMDAzMzFGRjlFREQ3RkY5Q0MzQUQzRDg3REZEMzYzNThDM0U1Cis6MTAxREYwMDBDODBFN0JBMTMyQjBGNzIwQzIyNzMzODlFQ0VDMkM3N0Q4Cis6MTAxRTAwMDA1NjE1RDI0N0Q2OTE2RDBCRjAzQ0MwRkE5RjczRjk2OTE1Cis6MTAxRTEwMDA1OENFRTM0RDU5MEEzMzVEODVFQjRFMEJEODExOEU4OUIwCis6MTAxRTIwMDBGQjMwRjM3MENGN0MyNDM2MTUyRjg5RkIzMjUzNjE1RDc0Cis6MTAxRTMwMDBCMjczRjhGRUNDNzRCQkFBOEFBNjhDQjA0RjEzRjY0MURECis6MTAxRTQwMDBFNjkxQTFFRjYxRkY4OUZCNzU4N0U1NjgyOUMyRTVGRjhGCis6MTAxRTUwMDAwMjlGOEJGQUY0MDA4MDAwMDAwMDAwMDAxRjhCMDgwMDM2Cis6MTAxRTYwMDAwMDAwMDAwMDAwMEJENTdEMEI3Qzk0QzVENUY3M0M3QkIyCis6MTAxRTcwMDBDQjI2RDkyNDlCMDQ0MjQyNDhEOENEOEQ0MDJFNkNDMjNCCis6MTAxRTgwMDBDNTg4QTg0QjQ4MTAyREUyMjI3MjM1RTIxMzEyMjA0MDdCCis6MTAxRTkwMDAwMjAxRjQ2QjZDQTk1OTBDMzcyREQ2RjAzNjBBNUFENENFCis6MTAxRUEwMDA4RDA1OEE4QTM2MjgyMDU2NkM5NzhCOEFENTZBNUFGNTEyCis6MTAxRUIwMDAyRDU1NEIxM0ExOEE3MjhCQTE3RDNGREFGQUI2REZGQzU4Cis6MTAxRUMwMDBDRkNDMjRGQjJDODlEMjdFNkY3RkJGRUY0QjdGNzU5OEUwCis6MTAxRUQwMDBFNzk5NjdFNkNDMzk2N0NFOUNEQkNDMzI2NjYzMkUzQjU0Cis6MTAxRUUwMDBBM0JGN0Y5OEYxREZBRkFGQUZENTNBRUUxRjM2OUEzMTdGCis6MTAxRUYwMDA3RjhBQzVCM0MzQzU1ODVBRTg3QjM3RkVGQkY3MDhENEMxCis6MTAxRjAwMDAzNTY2NzJGRDIzOTNCMTUxQUU3OEM2MDZFMjc5QkRDQjNBCis6MTAxRjEwMDA1N0MwRDgxRTlCNzNBMjYzMDA2MzVEMkI5OEU3MjlGRTEwCis6MTAxRjIwMDA3REU5NEI5QkU2QkVDNUVCRkY5NUU2NzA0NkYwNTZBOUYyCis6MTAxRjMwMDBDNzlBREJGM0Y5NzM3NjQwMUY4NkY2REIyQ0ZBOTNEMTUwCis6MTAxRjQwMDBGQ0ZEQjZFMzgzOTg1RjYzMkMyMjlBRDVCNzM5Mzg1NEU5Cis6MTAxRjUwMDAyNkE2QTNGQzA3RkVBRUM3Mzg1NjFBNjc5NENCQzREODkyCis6MTAxRjYwMDAxOEM2NzgxNzAxNTNGMkJGNUVCNjBEMTk5MkU3RjRGMDY4Cis6MTAxRjcwMDBGRTAyMjlFRDc2REU2RjlCQzU5OTY3RTFGNTlDQTFDRDQ4Cis6MTAxRjgwMDAwRjU5QUZDNTNDMzg4Q0UzNjhEQTVFNTZDMkQ4QjM0NzA4Cis6MTAxRjkwMDBGOUI4ODM1MTdERTRBMTMyMEI3RjFGRDVGM0RFOEZGN0IzCis6MTAxRkEwMDA3QjRDMjY1OTdGRjRBMUIyMjE4QzBEMzlEQUI2QzZFMUZCCis6MTAxRkIwMDBFNEYzMUZEQUZBOTA5REUzMkRGMjU3RTJGRDA0NUVGNzk5Cis6MTAxRkMwMDA2NzAxMkZCNTQzM0JGOEZDMEVBNzJGQTFGOTM3RkQyRTczCis6MTAxRkQwMDA4MjQ1RjA3NjA1NjZDRjU2RDREOTQ3OTE2QzA3QUZFRkFFCis6MTAxRkUwMDBEQTM3N0VCNjhCQjc2QjhBMTlFQkQyRjMxOTJCNzM2OThDCis6MTAxRkYwMDAzNEZGNTI1OTg2Q0ZDQjZDRjNFODFFQzdFNUNGQzc0QkYxCis6MTAyMDAwMDBCQzMxRTYzOURFQ0FFOTVCRjA2MzFCN0I4MEJGQ0MwNURGCis6MTAyMDEwMDBEQ0EwNTc2QjY0RTAyOUQwQjc3OTBCNjM0OThDNTUzQjQyCis6MTAyMDIwMDAwNUNEQUJGNzNGOTA3RTg4OTcyRkM3NENCQkNEQzVGMTUwCis6MTAyMDMwMDA1NDFENTM5NjA0Nzg1MjJGMzFBNjI3NzJCQTM1REE5OTc3Cis6MTAyMDQwMDBDRTcxOTUzQUUwMDU4RDcxRjg4NjBDMzgzQTgxMzlDMDI5Cis6MTAyMDUwMDAzN0VENkI5QzI4RUJBMzk4QUVGODA3RjRCRjY0NjFGQUU4Cis6MTAyMDYwMDAyOEY0RTdBNUZFRjA2NzRGMDIxNzhBQkZCNTA5M0E1QjZGCis6MTAyMDcwMDBDM0UxRjE3MzVDRUYwMDc3M0FBMzNBQjU0MkZFOEZFNDE3Cis6MTAyMDgwMDAzMjZGNDdBRUVDMjcwMzdDQ0E2NkI3RjFGMTJBODEwN0FECis6MTAyMDkwMDBERThGOEREM0M0NUFDQzRCODcyNTE4RDE0N0ZCODUxMkQwCis6MTAyMEEwMDA1RjY2QkIyMzY4MUVDOTRCRTdFQkM3QTk1Rjg3RTU2QzdBCis6MTAyMEIwMDA4N0JEQjc5RDNENjAyMTdDQjA1QTE2QzhENjA4NEZGRTNCCis6MTAyMEMwMDAwOEQ0RTMxMkE4Q0VCQzVFRDc4MDI0RjAzRjIzRTRBNjU4Cis6MTAyMEQwMDA1QUQ4RDEwODNFMkU3MTJGNUYzRjI5MkM0OEU1RTMxQ0NBCis6MTAyMEUwMDAzRDhFNEMzNDRBOEJGRjM0OUFFMTExMDMxRjNGQzVEODEzCis6MTAyMEYwMDBFNDUwQkU1NkU1QzU3NDEzQ0QyM0FCQzEzNEYwMTRDNzBDCis6MTAyMTAwMDA0RkRFOTE0ODgyQzNCMjkxMDUyMkY5NjA1OUEwMDdBNzFBCis6MTAyMTEwMDA1QkQ2MjYxNkIwQjhEMUNFMzZGMDU0MjJCRTczRDE3NzM2Cis6MTAyMTIwMDAyRUU2MzQzMTFBQUY2RDA0RDZENUQ2RDcxRDlCNTgxQzc4Cis6MTAyMTMwMDBEMUY3NEUxRjFGNkY2QjE0QUIwMUJFRDQ3ODhDQUQyMTRECis6MTAyMTQwMDA3QzZDNzY4OTcxQjczNTNBODk4RUVBRkQ5MERBQzM2MTg1Cis6MTAyMTUwMDA3NDRDMzBEMDUxQjU0QkJEMzQ5OEU4RDlEQjZGODBGQTYwCis6MTAyMTYwMDA0RDZERDg0QkZDOTA3QTI5NURGMjg5RUIxQkZBQ0ZFOEQ0Cis6MTAyMTcwMDBBN0ZGNjRGQUJFRkZGRTg3RDBGODhGMDdERjhGOUZDQUU0Cis6MTAyMTgwMDA1MUYxQTNBRUJERjEzRTVFNDY1QTlCN0Q5RTNFRjA5QzUyCis6MTAyMTkwMDA3QTU3ODgzQ0UzRkYxRjc5ODBENzczN0JFQjBBMkY5MTM2Cis6MTAyMUEwMDA1NkVGODA2OTFDRkY5MTc3OUIzQ0FEQkNCRkFCOEUxQjhCCis6MTAyMUIwMDBEQjRENzY3RjEwOEZGNUQ4REIzRTM4NjAzQURBRDc4OTcxCis6MTAyMUMwMDBGNkQ3OUMzNkI2Rjc0REQ4MTdENjVFQzA3N0ZEMjU2Mzk3Cis6MTAyMUQwMDBCQjcwRkE4NEMzQ0JFMTFBMzgyMzA0QUU4OUY2MDhDMzc2Cis6MTAyMUUwMDBGN0IzMkIyRjgzNkJFMEFDMTBCODZFNDgzNkI2RDdENzU5Cis6MTAyMUYwMDBGNDBERDdCNzcyMjNCRTE2MkVENUVFOTY5MjJCNkIxNzIxCis6MTAyMjAwMDAzRThGRTk5MzIzRkFDMUJCNjgzRjZCRjY5NUY1N0I3QjY0Cis6MTAyMjEwMDBDREQ3QjdCQkIzMjE3QzFDQkZEQ0FGRjhEQUUyRUIzODFCCis6MTAyMjIwMDAxMUZGRTA0QjIwQjFDMUU0OEQ4QzY1Q0NDOUJBMThENjQyCis6MTAyMjMwMDBEMUM5QTEyRTZBOTdDMDlDQjQ5RUY5QzJEN0IwQUVERUI4Cis6MTAyMjQwMDBDMzNGNTNGODU2RTBGNjlENzM4RDAxRkVCRDE1MEZGM0E1Cis6MTAyMjUwMDBBNjY1NzJCRjYyNTM3ODhGNTdBMzczNUZDMUFEMDU5N0IwCis6MTAyMjYwMDBGMzFGNjNGNzExNUNBRjY4QkFDRTY4OUZCNTdCNzZGMDU5Cis6MTAyMjcwMDBGNTlEOTdDQUVDMjkwOUZDNzU3MjIwRTNENjE4QzZCRUY1Cis6MTAyMjgwMDBFQTkxRDc1Q0Q0NzAzODQ3NDhEQzNEMzdCODZENjUzQzdGCis6MTAyMjkwMDBBREYzNDAwMkUwRjk2N0M3QjVCQkJENjZGNzk4REVGNjVGCis6MTAyMkEwMDBFMUVEN0FEQjBCM0NEOTZDNkQyQjAwNjc1NzlEQzM4MzQ2Cis6MTAyMkIwMDBGREUxN0RCQ0UyREZGRDc4NjY0NEQwQ0NGMTc1QzFFQTdBCis6MTAyMkMwMDBEOEE4NzEzOTczM0M3QURFRUIwMzM5MUVERThCRDVFMzc3Cis6MTAyMkQwMDBEMUZGRUM1OTM3QUU0NzVEM0I5Q0U4NUFDOUUxQkI1MDkyCis6MTAyMkUwMDBEOTMxMTY3OEY1NDZFQjAzRERCQ0RGNUFCQjNFMzQ4OUE1Cis6MTAyMkYwMDA0RkYxNUM5QTNFMkMwRUY4RjUyNTEyNUVGOTNGMEE3Q0YwCis6MTAyMzAwMDA3REMyMkZFMDI5RDMwNEZFMTNFM0Y0NzRGNDUzNjY2QTBDCis6MTAyMzEwMDA3RkMyODc2Nzk2RjZCMUY4OEUzOTA3MTI3Q0U3NkM1QzRFCis6MTAyMzIwMDBERUY1QjFGRTE1MUU0QTY1M0Y4N0FDOUVBRkJBRjhGQ0RDCis6MTAyMzMwMDAwRTZEOEVGMzM0NzE3OEFCMTM2N0NENUJDRTVGMkQzMEFECis6MTAyMzQwMDBGOTkyODI2NjAzRENGOTA0QjdBMzcyNjgwQUUwQjY0QTIwCis6MTAyMzUwMDBCOEVEMDMyNURFQkQ1OTVGMDc3NzEzQzZDM0JFRjYzRDUyCis6MTAyMzYwMDAyREIwQzMyRDY4ODlGQTRCRkVGOEMwMDNCQzFFNjFCQUJDCis6MTAyMzcwMDBGODNFRTQ0NzU3ODFDOUMzRjcwOEI2OERFQjE3NzZCRTIwCis6MTAyMzgwMDBBRkJDMkJGMUZEMzg1NzdGRUMwOUY0N0MyMzlFMjc0NzI3Cis6MTAyMzkwMDA4OUVGOTMxRjMxMDU5QUY4RjdCRUQyOTc4OTRFM0Y1RUI5Cis6MTAyM0EwMDBFNkYwOThGOTU4OTVDQzY1MDNERjU2MzFBRjBERjBGRjk0Cis6MTAyM0IwMDA3MUMyREY1RUVERTBGM0JCQzlBRDk3ODMzRTc3MjY5QTJECis6MTAyM0MwMDBEMkRGMjczOEY0QkM2OTlDREZEODc4ODFGRjZGRTIwNzQxCis6MTAyM0QwMDBDNjM2OTlEODU4QzY2RTk1RkFDMTAyODlDN0U5Q0M2QjQyCis6MTAyM0UwMDBDNTM4MzM5ODZFQzVCOEJGMzk2RkYzMzJDRTFGQkZFMTIxCis6MTAyM0YwMDBCODYyMUNERTU5Q0M0RkNGRTdCMDAwOTVCN0IzMjBCNTFCCis6MTAyNDAwMDBCRjgzNzU1MEZERDdEMTg1NjkwRDFDQkU2OTVCODY2NTlDCis6MTAyNDEwMDA2MzNEODZFMEZENzZDOTJGNzcwRTEwRkNGMkQ5MjBFMEVGCis6MTAyNDIwMDBCRDY1RTAxNUYxRUYzNDRERTA2RkIwNUJBRjc2RDM3QTY4Cis6MTAyNDMwMDA3NTBERjAwMDI2RTdDNDIxQkU5ODkwRjU1MzM2NTBGMDk0Cis6MTAyNDQwMDA5RkM1OTlGRDc1RUJBN0JEM0JCNjkwOEQyNDc5RTA0OEZCCis6MTAyNDUwMDBFMTc4Qjg0MTkyRjIwNkVGRDIyOTk4MkYyNDA4RDZFQjAyCis6MTAyNDYwMDAyRDcyQkQ5NjlCMUQ2QzAwQTc0QkJCQ0IxQzg4RTBCMEFBCis6MTAyNDcwMDA0QzlFQjAyMjE5RjM3RDYzMERGQkQ1Mjg0RUJGMzcyNjQ1Cis6MTAyNDgwMDA5ODU5MTNCNUY0RDI3NzUzNjU3RjUzODc0Q0ZBMUNGQUU5Cis6MTAyNDkwMDBDOURCMkMzODYwMzRGRkFFRkM5MjdFMzQ4RUUzNjdBQTMxCis6MTAyNEEwMDA3OUY3NUFBRTcxQjNDOTQzQUM5Rjc0ODRDOEI1MUIwN0EyCis6MTAyNEIwMDBFQ0IxMzBBRUJGREM5NDY1N0MzRTI1OUZENzQzRTRFRUEzCis6MTAyNEMwMDA1NDY2RTk3RENGRTk3RjA4Rjg4MURDNjFDRDY2RjBFRkU1Cis6MTAyNEQwMDA0Njc3Q0M4MDRGRjM3ODc1MDQxQjIxRUMwMzRFOEQ5MDJBCis6MTAyNEUwMDBGOTc0REJGRjZFQkJDMEJGN0JDNUFEM0YwNEJBQUM4Q0RCCis6MTAyNEYwMDAzRjNGOEZGNDBFOEI5OENGQjI3N0NDQTQ1NzdFRDJDOEQzCis6MTAyNTAwMDBDMDc5RUMxNEQ3MEZCRDM5OEM3RENBRjUwQkQ0NEYzNzg5Cis6MTAyNTEwMDAyNjUzRjkwNUQ3MDc1MDlFNkRDQ0E1RjdFNzFCM0Q1NDEwCis6MTAyNTIwMDBGRkM0RUREQjhBN0VFNzZGRkNEMjgyN0Q2OTQzQTRDMkUzCis6MTAyNTMwMDBCNzgwNjM5NUU0QkIwRDY5NjNCN0ZDOTVFMzc1QzNEQkI2Cis6MTAyNTQwMDA3QzYxNzA3ODZBREE5QTI3NzEzNThCQUQ0QUZCRTQzRTdDCis6MTAyNTUwMDBFOENGQUI5RUQ2M0M2OEI3RjRBMEQ3RTZFMEYwMkMzOEM1Cis6MTAyNTYwMDBBQUFGMDc5OTE3QkRERDMxMTU2MkEyMEVGQTJCRDcxQjUyCis6MTAyNTcwMDBFRUI3RkE3NjYyQkMzMTFGOUM0QUQyNzkwM0VGQzFDRTI2Cis6MTAyNTgwMDBENzEzNzlGQkNGMUE0QjA4QUVDRjFCQkQwNEQ3OTlDNjIyCis6MTAyNTkwMDBDOTU0RkVDREVEREI4REY2NUVGNkE1MERFRDZGREVEREVCCis6MTAyNUEwMDA2OTQ5RTVFRENCQkQ5QTE3RUJGMTNBMkYwQjA0MzgzQ0E2Cis6MTAyNUIwMDA1QkFENDJCRTZGRTVGMjFERUI3MzQyQzFBRDhGREYwNTJGCis6MTAyNUMwMDA3MUUxRDZGNzgzMEY2NzI0NTQ5NTI3RjJFNzUzNEIyQTFFCis6MTAyNUQwMDAyRDY4MzdFQjJCMkVEM0RDQkQ3Q0Y4Q0RFQjUwRTBBMzgwCis6MTAyNUUwMDA0RUQyRTVEQ0NGMzVDMkQzQjlGRDc5Qjc1Q0MzRkJGQjc2Cis6MTAyNUYwMDBGOTMxMzMzMzczQjhCQTJGOTkwOEFFRUVFMzUxMDEyODlECis6MTAyNjAwMDBBREFBRERDQTdENjZEMjI3NTdBNkQ5MDJDMERGQ0E3RDMyCis6MTAyNjEwMDA3OTgzQTA0RjlERTE3NDYzMzlCREUzOUQ3OUVFREIyRTk0Cis6MTAyNjIwMDAzRDQ0OEU5RTQ5NjhGQkFGMEYyMUE3N0UyRkU0MTRENzRGCis6MTAyNjMwMDAzNzNGN0QwQzcyNkNDODYwMEZFODdFREVDQUY1NzIyMEYxCis6MTAyNjQwMDA5QUQ1NDc2MzFGNUI2NjkzRUI4QkNCMTlENENGNDQzMThDCis6MTAyNjUwMDBEMjQ3QzczRTlGNUE4QUY1ODJGMTVDQjY1RTM5OTRGMzQxCis6MTAyNjYwMDBGQzk2OENFRkJBN0FDN0RCRDVCNkUwQzNDNzc4RkQ1Q0MxCis6MTAyNjcwMDBDMEU0QjdGMjdERTYxQzZCM0JGRjMzQzhEMUVEMEUwRjEzCis6MTAyNjgwMDBFQzgzMEQxQTg3MDdGQkU4OEVDMTU0Q0ZENTJDNTEwRDcyCis6MTAyNjkwMDBDNENGMDE1QUFGQjk5QUNCRDJDMEU1NEZFRDBCOEYwRTI0Cis6MTAyNkEwMDAwNjNGQkRDMjcxNTBDMkRGQkZCMjM5OUFFNEQzMkI1Njg4Cis6MTAyNkIwMDBDRjg5MDZGNEY3QjhFOEVGMjczRkI4RTc5MzAzMjgxRjYwCis6MTAyNkMwMDBBQzJCQkU4Nzk3MTdERDA5RDQ0RkY1N0YyQzFFODFFRjA5Cis6MTAyNkQwMDBGOTNFQ0Q1Mjc4N0ZDRkJFQTQwNTIzRjlGQTJDNjgzOTk0Cis6MTAyNkUwMDA3NDVGMEE4NzZGRTRCNjRFRDM2MDVFMTY2REQ3OUE1MDVBCis6MTAyNkYwMDBFNkE1REQ3NENDQ0NERkZGQzVFRDEyNzZFQjZFQjczOTA1Cis6MTAyNzAwMDAxNUNCNkE3MEUwQzNFQjY5RkYzNkVFRUJGOTJENUY5NkVGCis6MTAyNzEwMDBDMkJDNTRGQkZCMDhBREVEOEI1NkQ4QzNFOUM3OEI3NTIzCis6MTAyNzIwMDBDMjVGMzNDMUIxRUZFMEY0Rjc2RTY3OTgwN0Q3MUMwMEMyCis6MTAyNzMwMDA3N0E1Q0Q0M0ZCNDlDMERGMEEzQTlGRDM3MzNEMEY2MEI1Cis6MTAyNzQwMDA0REZCRkM4RjgyQkVFN0Y0MjQwRkY2OTdGRDI2N0ZFQzRECis6MTAyNzUwMDAzOEI0M0Y2MUExNzlCRUI0RkREN0IxNTY1RThGREI2QjUzCis6MTAyNzYwMDA2NTkxRkM3RDVENTFENzI0QjRBRjRCNzM5MTFEOUVGNkVFCis6MTAyNzcwMDBDNDBEOTM4MTlGNjU3QkY3QjU1MjNGQjU3NjhGODY3NTAzCis6MTAyNzgwMDBCNkVGRTJFQkE5QjA4NzZFNjQ5RTZDRjBERDVFNTFGRkEwCis6MTAyNzkwMDA3RTk5RDcwMzdFQUI2OUZEQjNBOEI3RkJBOEVFMzNGQkU4Cis6MTAyN0EwMDBERDE2QjRBRjEyN0FDRTE2Qjk4RkIxOEU0MjkyNzdDNENECis6MTAyN0IwMDBDQUFFNUU3QTdEOUZCRkM2RkJBRDZFN0Y0QUJEQTM3NzcyCis6MTAyN0MwMDBGRkUzRkJENjkwMENGRTNFQzUyNkJGNzc0RTRGRjdGRENDCis6MTAyN0QwMDAxM0ZCOTY0REVFNDNBQUJGMkQzNkU2OEZFNEZEQTRGMTIwCis6MTAyN0UwMDBFNzFBRjY1NTlCRDg2Rjc3NzBGOTAyN0U1MUZCMkQxRkMzCis6MTAyN0YwMDAzNzFGRTNGMkVGQkQ5MDkzQTk3QzczMkRFMkYzNDlERDFGCis6MTAyODAwMDAxMjExQTAzREZEMEFDNzU3N0FEMkYyMjgyMUNGOTRGRUJCCis6MTAyODEwMDAzMTNCQjFFOUQ1MEU4RUQ3M0ZDNUVBMjUxOUJDREQwMkEzCis6MTAyODIwMDBCOTVGMzM4QjI3MTlGMzNCMTlFQkJEM0E4M0Y2QkZBRTgzCis6MTAyODMwMDA3NENDODFFRjg3RDdBMkJFQ0NDQ0Y1QTdDQzEwRkRDOTU0Cis6MTAyODQwMDA3RTY1RkI2MTQ0OUM3NzIyQkVCRkQyRjZFM0EzRkE5Njc1Cis6MTAyODUwMDBCRkUzQkI0QjQ4RkVCRTJBRTVFRkFBM0Y5QjU4MTFBRjMyCis6MTAyODYwMDBBRjdBMzg4MkU0MDlFRDY5N0RFMEU1NTVCRURFNzUyRTZDCis6MTAyODcwMDA1RjdFMDFCRjAxMkZBRkZENTM4Nzk5RUM4RkEzQTZEQUNFCis6MTAyODgwMDBEN0Y5N0U0QTQzNjdFMDNGNUQ0RDcxQTNBOUVFMDU5OUY0Cis6MTAyODkwMDBBRkZCOTNBOTRGRkI1MDk1OUM0RTk1QTA5M0Y3MkJBM0FDCis6MTAyOEEwMDBCRkUxRkFBRjlDMzZFQURGOTE3MDQ1RjMzNUY3MzM1RjRECis6MTAyOEIwMDA3M0FDOThFRjQxQ0M5N0QzNkVENTk3QzUyNDJGMEY1RTlDCis6MTAyOEMwMDBFMTNDRDMyMkJDMkIwMTVGRjgzQzM4REMwREEwNDczODNCCis6MTAyOEQwMDBEQzNERkNERDc1NjU3MERGQUQzMUJGMDlFQkVDNEI1QkJBCis6MTAyOEUwMDAwMEVCRUMyMDA3MTNFQkY2RTBFMkZDMDBENkYzN0U5QjU2Cis6MTAyOEYwMDBBOEZCNjM2REE0N0YxRThDNjE3RUM4OEY4M0QzOTIwMjc4Cis6MTAyOTAwMDA3RUVDRTc2ODBGRjkzMDkwODlGNzkxRjJGQjM5NDlGNEQyCis6MTAyOTEwMDBGREUwMDhDRUZGQkNDRTZFOEY5MkZERDdCRjU1ODBGNzhECis6MTAyOTIwMDA2QjUyM0QxQzAyQUVERjA2MzY2NjkwN0U2QjI2QkZFMTIxCis6MTAyOTMwMDA3MTI5QUY1QkUyODNCNzlCRjlGMzk2MkY3MzE4QzYzOTAxCis6MTAyOTQwMDBDRTgyQTlDQkQxQUUyNjhBRTQ1MDRCQkMzNzI1ODFFMzk5Cis6MTAyOTUwMDA3MUZGREZDREI0MkZCNDE0RjFCQTgzRTQzNEY5Nzc1QUEwCis6MTAyOTYwMDBBNjc5NTNFMjc5N0RBRUE0NEI0QjZCNjBDNzIzRTg2RjI5Cis6MTAyOTcwMDA1QUFFQzdDRkM3MTk2QzY2RjVENENFMkRGQUY5RDAyQTU2Cis6MTAyOTgwMDBCRUZCOURBNDBCNUZDN0I0Q0U4RjY2Q0NERjAzRkNFQjEwCis6MTAyOTkwMDA1M0EzMkRGMDhCNzA4Q0E3NjgxQ0ZFQzdBQUIzMTlDOTZFCis6MTAyOUEwMDA0QkU5Rjc5QTJENjkzMEI3OTcwRkJDRjZCMUQwNkJDNURDCis6MTAyOUIwMDBERjlDMDUzQjIyMjE4RjY3RDQ0NDkyNUZFQTc4Q0Q3RDZFCis6MTAyOUMwMDAzMTJFM0VERTBDREQxQzhDODBGRTc3NUJCOUMxRUY3NENFCis6MTAyOUQwMDAzNEMzNEJFMzcyQzM0MkRBMDlDMTJBRTBGMUU3NUQ3NjAyCis6MTAyOUUwMDAwNkI5REMxRjNERUJEQTI2MjQ5RTBBRTE4NzFBOUI5MDhDCis6MTAyOUYwMDAxRkE3QTUzRUY0NzI4Q0ZFMEJGMENERjIwMzM3MjY5RTg2Cis6MTAyQTAwMDAwQUQxRjdBQTE3OTRFNzQwN0Y1NkUzN0QxM0RGMzQ4MTlDCis6MTAyQTEwMDA0RTIzNjlCREZBNERFMDhGQjY0OEEyRkZFNDVCRUQ0NDVBCis6MTAyQTIwMDBFRjZFODdFOTI5RjgyNUVGOTRGMkFBMDk4NjMwN0ZERTU4Cis6MTAyQTMwMDBCNDJGMjI3MDFGN0ZCNjNDMjIzODEzRjI4QUQzRkZFOUVECis6MTAyQTQwMDA5REEwRUJBQjkxNDRGRjVBOUJFMEE3REE5RkU1MTE3Rjc1Cis6MTAyQTUwMDBFREI3NzlEREVCRDBGRkNGMjM4OEVFQjVCMUFFMzg3QTk0Cis6MTAyQTYwMDBGRkNCNDQyNkY5OEZGNDg2REFBODYwNEUzQ0M3RTdDNjUwCis6MTAyQTcwMDA2OEZENDNFMDhERjMxREY5ODM2QjZERTJGOTA5Qzk1N0Q5Cis6MTAyQTgwMDAyNzc4MUY4MEMzNUYxRjQzRkNDODY0NURGRjZFMjJEOTk3Cis6MTAyQTkwMDA1MzVDMUYyNUZFRDUxRkNBQTNCQTZFRjNBNjJDQzBGQTNECis6MTAyQUEwMDA1ODE5NERGMDlEOTBGRUI0MTNCNUYxQzRERjE1MEYyREVDCis6MTAyQUIwMDA3RDlCNzE3QTlFRjBFREJDM0Y4N0I3M0I3MUQwRUFDMTM4Cis6MTAyQUMwMDBCRUY0NzE4MzM5NjhFMzc0M0RCRkZBRTREOEFEQkNERTZGCis6MTAyQUQwMDA3MURGNDdFOTdBODgxRkFERTJCRUJBMjlGOEFFNjJDOTU0Cis6MTAyQUUwMDBFQUE5RDgyRkZCQzM3NzQ1NkQwNDk3QjlCRDc0QjI2NkM4Cis6MTAyQUYwMDA3QUZGMDRGQUI5MzNGNUZGOEQ3OTJFQ0ZFRjU4MDhCOTc0Cis6MTAyQjAwMDA3N0RFRDZGRTA0RUM4MzBGRTNGNEJGRTJGRDg1OTczRjRBCis6MTAyQjEwMDBEQjQ5RjJEMEQyOTUwM0ZEN0M5OTg1RjMwMUY4NTJFRUEyCis6MTAyQjIwMDA5RkNCMjU1RjA2MzI3NTk2Mzk4NkYwNDdGQTc4NzQ3RTFBCis6MTAyQjMwMDBCQjkwN0JBQkFGNENDRTdGNzE3MEM3N0U4RDhGQjMzNEIzCis6MTAyQjQwMDBFQUUwMzIyQUNEODE0MkY0NzM0NjBCQzY2QTk5QzAxRjZGCis6MTAyQjUwMDBEN0UzNzg3RjY3OURDMTU4RDA0MTk3NzZEM0QyNURDNkMxCis6MTAyQjYwMDA3OUUxMEY3RTk1QTVGODA3RkY2RTY5OUI5OUZDMkExQ0Y5Cis6MTAyQjcwMDA0MjFCRTA1RjBBNEZBRjIxOUUyMEU0MEFFRkU3Mjk1QThCCis6MTAyQjgwMDA4NzhFOEZFNzdEOTdFMzdGQzlEM0MzOEJBMTRGMkU4REFGCis6MTAyQjkwMDAzRkYwODM2QkE4MURGRjRFRjFCOUY5RjJCQTlBQ0ZFNTY5Cis6MTAyQkEwMDBGMDg4Rjk5RDk1N0M3RTk2NDkzOTM4REJENjYzODc0MzVBCis6MTAyQkIwMDAwRjNBRkZEQzIwMDNERjlDN0Y3QTM4RDVCRkQwQkFCNDUwCis6MTAyQkMwMDAyODBFRDc3OTI5OEY5OEE3NkRFQzM0MTgxMERFQjZCMThFCis6MTAyQkQwMDBEMDY3MUY5MUNGOTcyNkI2OEQ4NUZDNTFGMjg4RDlEQjNGCis6MTAyQkUwMDAwQUM5QUVDRTZEMkI4NDNEQTlFNDE5RjNCNUU1RDBGMzQ3Cis6MTAyQkYwMDA0MDVCMEVCRURGNkYxMjdFMEFGQUMzQkM5RjRENkQyNThGCis6MTAyQzAwMDAzQ0Q4QzU3QTVDRjI2QzFFRTE0NThEMTM0RUJGRjBGOURECis6MTAyQzEwMDA1RTlGMjlGQ0RDMUNERTNCN0RCQ0ZEQjBBRDM2QzNGQkZBCis6MTAyQzIwMDBFMTAxNjNGRDA2RDk3RTY4MTg1RDA2OUJCQjBFNDU0MDM5Cis6MTAyQzMwMDBERUZGOThEMTdBMEQxRjc3QUFGQ0VFOTk2NzdBRTg2MERCCis6MTAyQzQwMDA5NkY2MjI3MzI5RkFCQjg0QkU2RDA1QkU3RkQ3ODNFRjRCCis6MTAyQzUwMDBCQjUyQjkzQzVEOEEzOTY2RjRDRTdGN0Y5MTlFMEFCOTNBCis6MTAyQzYwMDA3RkRFMjRGQ0Q0RkJFMzc5M0QxRjdBOEVDMEE3QUEyQjFDCis6MTAyQzcwMDAzQzg2RjNEMTdEQkY1Qjk4OEE3OENBM0Q5OTI2QTk1NERBCis6MTAyQzgwMDA3QTA2ODFERjlBMjAyRkI5QkM2OEIyMEE3QzdDRDE1OEMxCis6MTAyQzkwMDAzM0VBOTQwNUY2Njg3RDRBQjVBNTc3M0UwQkI3MTZEOTk5Cis6MTAyQ0EwMDBCMTVFMTY2RDJCQjJDRjBGQjE3NzlBNzY4RDNBRTZFMjEwCis6MTAyQ0IwMDA3NDM5QkJDQjQyNkU4MzI2NEJFMDA3RDBBMzlCNzY5OTM5Cis6MTAyQ0MwMDBEQkZDOENERURCQkRCQ0ZENTlDN0UxNzdEMDZFRTFCNjI1Cis6MTAyQ0QwMDBGODYyRThCREVBRkI0NTVCRUY0RUE5MEVDMTc3REUyRTM4Cis6MTAyQ0UwMDAyM0ZFMEJEQThDNzVGOEEzNDNFQjRERDAwNUM3RkNGMzNDCis6MTAyQ0YwMDBERjE1MDU4REY1NTFDNzhDRjVDRkRFQkY2QjI2RDhGOEYzCis6MTAyRDAwMDBBNTEyQzFFRkE3MDMzMTAxQzRBOTZBM0U5QTc0MENGQjU2Cis6MTAyRDEwMDBEQUU5RkQyRkM1ODIzRTRCN0Y1RkZEM0FFQzk2NDU1QkJECis6MTAyRDIwMDA4RDdDQzZFOUE2NDFBRkY3RUZENDg4M0YxNjA3QzJENzFFCis6MTAyRDMwMDA5RDVDRUY5N0FEQzczNUNBQUY5OTFCQ0EyN0UxRjQzQzNDCis6MTAyRDQwMDBDM0RBNjY3QTM5M0ZENTM2QUMxQzg1Nzg0OENEMTRDRUM3Cis6MTAyRDUwMDBCODFDOUVBQkRCMzZEQjEwMzcwODFGQUZCRjc1Q0YxQzJFCis6MTAyRDYwMDA1RTE3RkM1NTk1MjVFMkREQjg4NjUyNzYxMjRFREY0RDkyCis6MTAyRDcwMDBCRjlFODRGNTU2Rjk3RDhERjZGRkNBMTc4NzFEODVGQzI5Cis6MTAyRDgwMDBFRURDMzNFNzI2MkE2NzRFMjYzQzI4RkZEOUEyODM1QTc5Cis6MTAyRDkwMDAzMDg2RDc5RDI1QUUwMzFERkNCQjA1MDE4REY2ODdGOTU2Cis6MTAyREEwMDA2QjIzN0FFNTEwRkY3RkY1QTYzMDM4NUE0MkRFNzNGOEMwCis6MTAyREIwMDAxNzFEMzhGNDE3OERGNzVGQjNDREY4REQ2MjhFMkZDODdECis6MTAyREMwMDBGRDI1REJGRjExMTFGQTVDRDk3REUzMEVCNjlBMzFFRkQ4Cis6MTAyREQwMDAwNTBBN0VGRjc1MENGMzEyMjE0ODJFM0FBNEJFNzIwQTMyCis6MTAyREUwMDAxNTJFRUZBMzEzN0M4NzMyRjlGQ0M3QjU4OEVGQjhDMDY2Cis6MTAyREYwMDBBQUM0N0NFQjFDMzYxN0U2NUI2NzY3QzE2ODBFQzdCMUQ3Cis6MTAyRTAwMDAxODlCRDdDOTlGNUZEQzFBNDNGRUE5ODUxMTVDMkYyQzQ0Cis6MTAyRTEwMDBBNjkyNDUxNkUzM0IwRkVERDM5RkJFNkIyNjdEQTUwRTE0Cis6MTAyRTIwMDA2M0EzOUYyNzM1QjI3RkVBRTA2QzQ0RkRDN0EyQkU5ODNBCis6MTAyRTMwMDAwNTY5MUVFMDE3NkZFOEZDMDJDNjNBNkIxNjc2NTNBREMzCis6MTAyRTQwMDAyNTc4MDhGODU4QzIzQTg0RERDM0U5RTgwRDg5QzdENTZBCis6MTAyRTUwMDBGMjc5MUU0RjgwM0U2NEZDN0UzOTZCQTNGNkNCMEZGQ0VCCis6MTAyRTYwMDAyMzIyRjQ3OTg4OUY5NEVDMzk2NTU3OUE2RENDMEJGRDM5Cis6MTAyRTcwMDBEODdDNkYxNEVERjc1QzEwNDc4MTNGRDc2OURFNDdFREQyCis6MTAyRTgwMDA2Njk0NjI1RUZFQ0Q0MkZGOTlEQjJBRjYwQkFFOUZFNkFBCis6MTAyRTkwMDAwMDNGMkQ5Qjg3N0JBMEE3Q0NFNTdBNzYyNEY0ODhDNURDCis6MTAyRUEwMDA1MUQ0QUUyNTlFOTE3RkE1NjU0RThFRDBCM0ZGRkU2MkI0Cis6MTAyRUIwMDAxMEUzNzQzREFDOTE3RkE0QTU0OEY0REJGMkUwNzA3QTk2Cis6MTAyRUMwMDAwRjc5QThEMTM4MTFBNEI3QjQ0QzUzRUZEMzQ4NEZGQUI3Cis6MTAyRUQwMDAxMEEwQTU0MENGOTVDRjA3QkFFOEY5NjBCMzM3MDdGQTNECis6MTAyRUUwMDAzQUZCNjEyNEQ5RkI0QUFGRkQ0OTgyRkUwRkVDRkI2QTM1Cis6MTAyRUYwMDBCRTRBMEY2NjM1NTdBNkZGRUQ5MEZCNURENzY2MTFGRjAyCis6MTAyRjAwMDAzREE1Rjk1RTM3ODVFOEE1Q0UyQzIxRTdDNzk2N0E3N0VGCis6MTAyRjEwMDBDQTc2MTQwN0E4MzY0RDdCRTA3QTBFNEZGNTIzMjY1NzY0Cis6MTAyRjIwMDA5M0JCMTdFRkNDRUJDREMxRkM0RjZEOEUyQzA2OUY4RDY0Cis6MTAyRjMwMDAyRDE1RkU5RTEzNDU0MjZFNDc4RjY2REUwMDJGNTM2NEFCCis6MTAyRjQwMDBCRjI5NTkyNjQzOTkxQ0M1Rjk4RkY3NzNBQTVDRjg4N0U2Cis6MTAyRjUwMDA2MzQ2RkJDOENGQzY3NTM2OTJERkUxRjNDODk2RkQ1NEQxCis6MTAyRjYwMDBEQjdDQkZCQ0I2MEY3ODdBRjhBMDRDRTgxOUE3NTY2ODhFCis6MTAyRjcwMDA0RjA5QjgzODVENzk3REVDN0Y0NDkyN0ZFRTk0REM1NzQxCis6MTAyRjgwMDAxNEZFMzlERjhDQTE3RDVBQzU0OTI1OUY2QzA2RkRCMTIxCis6MTAyRjkwMDA5RjJEMTY3NjUwMkY5RjE4Rjk2MEFFMjZGMENBMUUxNDhBCis6MTAyRkEwMDBGQTY5NEJCQ0E4MkIzRUUwRjYwRUZCMkJGOEE0OUMxMTUzCis6MTAyRkIwMDBERUZCQjM3QkQ0M0M1QjVBQzU3QjRFRUY2QkIzQzY1Qzg4Cis6MTAyRkMwMDA2RUY3Mjg3QTMzNEI2MDBDRUNDNkZFRTgzREJGMjQ3RURBCis6MTAyRkQwMDBBQzY2QTJCOEI1MUY3MTZCRUM3NTg0OTdGQjJEODFGQkI1Cis6MTAyRkUwMDAzODFDNDMyQzAyRkY2OTE2QzE1RjVDMkFGQkEzOEFBOTI3Cis6MTAyRkYwMDBCREQ3QzZFQjk1M0Y1Q0M0QkNCQzdENjUyQTIzN0YxMDYyCis6MTAzMDAwMDA2RkNGRTJEMDlFNzc2Mzg2N0Y4NDk3RjhBRTMyNEVGNDFFCis6MTAzMDEwMDA1QjM5ODg5MTlENDA3RjVDNUU2NUExQ0NBMDdFQkRBNjlBCis6MTAzMDIwMDAwNEYxN0Q2QzMxN0RFRjM3ODlFRkJEMTY1RTBFQ0QxNDU2Cis6MTAzMDMwMDBGQTdDRDdCQTg4QzA1MzkwQ0YxQkQyNzJDMDA3NTM0QUNDCis6MTAzMDQwMDA4RDdDRDAyNkY5NDY5NUE5RDkyRTk1RTc5MDhDRjUzRDMzCis6MTAzMDUwMDA3RkVENzBEQTJGOUEyMjdENzVGQjQwQjdFNzg0RkU1RjIzCis6MTAzMDYwMDBCOUZFOEU5QkM3MDBCRUU3MTMzRDAwRUY4QkE5N0IyOEZFCis6MTAzMDcwMDBERTMwN0ZFRDlDQkIzRjgwRERCMDJCOTI5RTk3NjRFQkYyCis6MTAzMDgwMDA0QkIzQTAxRjZCQUU3OUZCRjg4M0Y5MzM4RUQ4OTJGOTVFCis6MTAzMDkwMDBGNzdBREJCNDczM0ZFM0U1NTRGRjlFNzdBMDBGNENCRDk2Cis6MTAzMEEwMDBDRDRDRURBNzMyRTExRjY1NkJDNTM4MzdGQkJGQjQyNEFCCis6MTAzMEIwMDBGM0ZFNkUxRUFGNTFDRTQwNjdBNDMzN0QwNUYyMTYyNDk5Cis6MTAzMEMwMDBGREJFMERGRTg1MUQxNkM5NjZCRkUwMDA1QzY5MzkxOTlECis6MTAzMEQwMDBGQ0Y5Q0REMDMwRkI4ODVGRUQ5M0ZDREUzNDQxREIwNjlDCis6MTAzMEUwMDBCRDY2RTg0NEIxQkU1NDdCRjQ4MzdFNUZDOTEyN0FEMERBCis6MTAzMEYwMDA3REIyNTQ3NThFNTc2QTVGQkQzMUEyMzMzMzE2QTUzNTQ0Cis6MTAzMTAwMDAzODBDRkI1RDRFRTk3QUYwRDU5NDBDMzY2OTJCRjA3RUQ1Cis6MTAzMTEwMDA4RjE5QjkwQTFDREVBRTRBNUFGNzMxMzkyRUYwQTlDRTAyCis6MTAzMTIwMDA1ODkwRjIyMzAyQzM4OUFGM0IyNzc0NzU2RUUwRjVDRTQ5Cis6MTAzMTMwMDBENjYxMUVGMkY5NDgzQjdBMDFFQzJCMTdERTBCMzlBNjVCCis6MTAzMTQwMDBFNENCMDk2NzQ3MENGMUFCQjRBQkFCMjQ2QkZDQjE2MUNBCis6MTAzMTUwMDBFMjIzNTdGMUY2NTUwRTVCMjdGNjgzMDUwRjRGOEY0NTk3Cis6MTAzMTYwMDA5RTQ5NTU4QjU5RTQ3MzZDMzJEQUQ1RENGRTBEMDBERUQ2Cis6MTAzMTcwMDA3MDNCMzlEQzFFMDZDRjgwOEZBQTM3NjlDNDg3NDM5QjFBCis6MTAzMTgwMDAzQ0I2MTQ5MjYzOUExM0YzQUI3NjA0QjMyMERGQUIzREU1Cis6MTAzMTkwMDA5MTFFQkMzRkRCRTg0RDNDOTU4NTc4QzQ2NDJBRDk1NzI1Cis6MTAzMUEwMDAxQ0VGNjNFMThGNjU5NEM0RjE2MkI2RkUxQ0Y4QTFCMjE2Cis6MTAzMUIwMDBCOTkyRUNDNUU4N0M5REU0RDNEOTJDQzE3NzUzRTA0RjlDCis6MTAzMUMwMDA4NEJDQjE3NEE0NjAxRENFNTNDRjEzOUMzOTBFRTJFN0NBCis6MTAzMUQwMDA0ODA2M0M3NDVBOUQzOTgwQUI3MzVEQTQwOUZCRTY5NEE0Cis6MTAzMUUwMDBGQjA0NUZGMzc1NjZCN0YwRUZFRkI3QjAyOEFDRjdFRjBECis6MTAzMUYwMDBFMjdCM0U1RUM1MUE4QkFGOTVENzg3RDg5OTI1MjYwMTBECis6MTAzMjAwMDA3QzU1NDQ3QzlEMzk0Q0JGMEZGMDlDRkUxRTJCQzFGRUFCCis6MTAzMjEwMDA1RkI1NjkzM0MxQTNGODgyNTlEQUNCMTJBMURGRUQ3MDMzCis6MTAzMjIwMDAxNzNGQzA3QUY5Mjg3MzU4RTk1MUUwQUY4NzFGNkVEMzcyCis6MTAzMjMwMDA4ODBGNzg3OTI4OTNGOEUxRDYzNzg5MUY0QTgzNTkyQjZDCis6MTAzMjQwMDBGMzExQzdBQTY1NUVDNDExOTI5OTA3RkU4MDZFRDY0NTM4Cis6MTAzMjUwMDBGQTQ0MzdENzI3MjBDRjk0M0M1MTcyODNGMzgxMTc3OUYyCis6MTAzMjYwMDAzRDhBQkU0QTdFRUM2Q0U0MjA3MUJDRUU2QUI0NTNGOTMwCis6MTAzMjcwMDA0Q0EzOTM1OUI4MENEOEREOTg0Q0Y1RTcxQjVENTRCNkI4Cis6MTAzMjgwMDAzNUU2RDJGMzE3MUEzRDU0REZEQjU4NDJGNUZEOEQ1RTZCCis6MTAzMjkwMDBBQTFGNjg5QzRDRTVDRjFBN0RGNDlDRTM4NUU0OTA5MkNDCis6MTAzMkEwMDAyQjRBMUUyOTdFNTI3MjI5OUM4RkU2NzFGNDVFNTc0QzgwCis6MTAzMkIwMDBERjkzREM1M0YyMEVGMzMwMTVGN0NBMjM0NURGMENDRDU0Cis6MTAzMkMwMDBFNzRGNzY0MzhFNzVDQzgxQkMyODM3OUY3REVFMjVGODdECis6MTAzMkQwMDA0OTZBMUM5RTA4MTdGMDIyRTQ1RUI3QzM0RTcyM0VEREI5Cis6MTAzMkUwMDBDNjBFQzA1RTZGNUFFMUVEREMxMEIyQUZERTVFQTMzMUY4Cis6MTAzMkYwMDA0QjA4OUZERTUxMUZDOTJDMjE3QzdDNjc0M0JDQTE1RTFCCis6MTAzMzAwMDBEMUYwREU2QjgzNzhGRjVBQkNGRURGQTBDQjg5N0IzRjE4Cis6MTAzMzEwMDA3REZDQjdGQ0Y5OTNGNzdFOTEwRDdBNzMzODc2NkNDMTFBCis6MTAzMzIwMDBCOEFCQTM3QUUwNDg0MDdEQUQ5NUY0ODdBMTUxQzIwRUI5Cis6MTAzMzMwMDBDMjFGRTgzMjlGODlGNUY5RTRCRDdGQTVGNURERDkxMEZDCis6MTAzMzQwMDBFMTMyRjM3NkYzMUIyMjA4NUYxRjgyNEUxQ0FGMUY0QjQ2Cis6MTAzMzUwMDAzQTU1QUUzQkY5REM0QjU4RTdBQjZEMjRFN0U2QUY5NTQ5Cis6MTAzMzYwMDBFQjcyMjNDNzY3ODhCRUY2NDkwQTIzQkQ0Q0YzMzI4NjQ5Cis6MTAzMzcwMDAzOENDMjdERkIzMDVGOTlFQ0YzRUQxRUMwMTBEQkEwRjUzCis6MTAzMzgwMDAzNzkyMkFGODczN0RFMzFCOTQ3RkE1MzUxQzIzN0Q1ODYzCis6MTAzMzkwMDA0NzVFMTZGQzA0N0VBQjIxMUY0QjZCOTA3OTVBMUQ0MzkwCis6MTAzM0EwMDAwQzc5NTREMUEzQkQzNkM4MDdGMDM0RTgzNjNGRjczMDY2Cis6MTAzM0IwMDBDM0JBNjZDRDlBMTM1QjQwQjU3QzVFQkQ1MTIzN0RBMzM1Cis6MTAzM0MwMDA0NzVGQzgzNjEzMUQyQkIzMkM1NEZFMDI2QjlDRUNDNTEzCis6MTAzM0QwMDA2NkRBOUYxNEJGNzI3OUUxMEQ2MDVEMzQxN0Q5MTY4NkU1Cis6MTAzM0UwMDBDOEUxRjlGMjc5NTVBRTg5NEFGNUJDMzJDQjQ2RkRGQzBECis6MTAzM0YwMDAwMjhCOTFGN0ZCNDA2RTg2NkQwMUM5Mzk5NzBENzI0MEMzCis6MTAzNDAwMDBCNTlGOUY1QkJDM0U2MzM0RkE5OTMwODA4NUFDQzdBMjAwCis6MTAzNDEwMDA2QzBCN0Q1Rjg5NDQyRkVDNUY3NkUxRkZBRkVENjcxRjlBCis6MTAzNDIwMDA1MDdBQzk2OUZDRjM2QTgyOUZFQ0FEMjVDRjNGRkIzQzIzCis6MTAzNDMwMDBFMjYzNEIzRThBMjAzQTJEMTkyOUZEMTFGOTgxQjFEMzVGCis6MTAzNDQwMDA0OTlGRjEzQTM0M0VDRjY1OTJGRTY1Q0ZGRTNFQjY4MzhBCis6MTAzNDUwMDBCRjVGQkU1N0Y4MkY3OUQ5ODk3MkQ5RUExQUYyNkIyRDVFCis6MTAzNDYwMDBGM0YwRjU5MTAwQjk2QThDMjMxRjdERkVBM0Q4MEVCMjRDCis6MTAzNDcwMDAyQkZDQTlDODJGRTREQjQyMkE0QjQ2QkNFOEU0MjRGODI1Cis6MTAzNDgwMDBDNTk3QjNBRUY1QzhFQjBBRkY2RUI5RjY1NUFDRjBFRkQxCis6MTAzNDkwMDA4QjM4Qjk4QTVGOTZCRkZBRTcyNDgyNjNERkM1MjRDOEY4Cis6MTAzNEEwMDBCNUU1QUZBRTRCRDJGQjk4RjdGMkIwRjhCNThBOUIyQkRGCis6MTAzNEIwMDAzRkQ4NzJCNkU5NEJDNEREQzJEQjU1NjVDNzBDMDBGRkNGCis6MTAzNEMwMDBCMEFCRDg1NUU0QTdCMDMwQ0E2MzU4NjkxNzc4RTgwRTk2Cis6MTAzNEQwMDA2NEM3QjEzRUM2RUIxOTc3MkIxN0VDREMwRUVEQjZCODFFCis6MTAzNEUwMDBFMjNDMUNDRTBCRkRFNEYxRURDQTE2RkJGOTM5MTk0NzlECis6MTAzNEYwMDBCREIwREI0QzdBRTE4NUREMzFDNEZGQ0I3NkZGRjBGNTYyCis6MTAzNTAwMDA2Qjc4N0REOTc2MERDM0IyM0FENjRFNzg1QUI2RDdDQzAxCis6MTAzNTEwMDBFQ0ExRjYwREZDMzY4OUZEQzNCOUY0RDk5ODdBRjBEMzQ1Cis6MTAzNTIwMDBFMjM2Q0RCQjIzMUY3MTc5NTdEQ0MwMTA3OEQ2NDk3RUI3Cis6MTAzNTMwMDA1QTFBRDEzNjk2RTgyMEUxRkZBRUQ0OEY1NEJCQzUwN0E2Cis6MTAzNTQwMDA3RjY4MDNCRDc4QkJGM0E0QjdGQzM0MUFCQTM2RkZFQjJGCis6MTAzNTUwMDA3QTA3NzA5RUQ5MzY4QUUyQkE4QkRCRjYyQ0EzN0Q3RjgwCis6MTAzNTYwMDA3N0I0MTM1M0ZDQzI2QUY0NDc2RDk2RTM2RENFMTY3QUI2Cis6MTAzNTcwMDBDNjE5RTlGRjNERjNCQzk5RTQwRkUwQzQzQUZDNDIxM0RECis6MTAzNTgwMDA3RTVFRjVERDE2RjlERDE2ODlCN0VCMTA1NDFDRDNEQjMyCis6MTAzNTkwMDA3RTcxNUI2NzZDMTY2RkZGRDk4MUY3QTg2Qzk1RUQxNzhDCis6MTAzNUEwMDAzQkRBMEJCMTVGN0VCNjM3N0E3MjgwQ0ExRjREN0E4NURGCis6MTAzNUIwMDA4Rjc3QUU2REMyMDAyRDY0NUQzRDlGNkRBNUZFQ0U2RDEzCis6MTAzNUMwMDAzMzRGMDZCRTU4NDBFNTE5QjVEMTdDQ0VFQzRFRDVDODc4Cis6MTAzNUQwMDBBRTA1QkUzOTdFQ0VFQzdEMzFENjQ0RUJENjZGQTBBM0NFCis6MTAzNUUwMDBDOTJFRkNBOTZFOEI0QkVBOTc3NjI3RjQ4Q0I5NUNBQjlECis6MTAzNUYwMDA4QkUzRjJBRTZFQUZDODA3MDg3RkFFREFEMzdBNEIwMTI5Cis6MTAzNjAwMDBCRjc3RDkwNEZGQ0JGOEJEOEMyRjIxNEY4NEUyRjEzMTc1Cis6MTAzNjEwMDBCNjAwRjZENzc5MjM1REIzNkU4NzNDN0JDQjJBRTgzMUMxCis6MTAzNjIwMDBDNEI1MDU3NkQ1QkM3NzEzQzk1RkIxRDJFQTFBODRGQTVFCis6MTAzNjMwMDA5RkRFQjY5MkZGN0NERTI4QjlDRTkzM0JDNkMwM0ZEOTUxCis6MTAzNjQwMDBFOTE2RkI3QUVENDZCRTQyRjg5NDA3NzNGQUZCRjlGQ0UzCis6MTAzNjUwMDA2QTAzMjZDQUE3N0MzRjNCODNFNkY3NTg4REM5NkJBMzU0Cis6MTAzNjYwMDAzODQ3MzAwNzdFQ0ExMzM2RTYzNzQzNEY3RTIxOTJGNDNGCis6MTAzNjcwMDBCQkRBMENFMTc3N0YwQ0ZDQ0VDQkRBODQ2MDRFMjJGNDBGCis6MTAzNjgwMDAxRDQ5QzdEQTVCRjlGQjEwN0FENjNFMTVDQzgxREU3Mjk0Cis6MTAzNjkwMDBENjI2RkM3ODc4RUY0NDU5MkNEQTM1NDlCRTQxM0ZFODBDCis6MTAzNkEwMDBCN0QzRUQzQzRGRkFFNUJFMTgwNjNEREZGNDUyOENGMDdGCis6MTAzNkIwMDAyN0ZDMjQ5MkUyMEVBQURGNTNEOTQyQkY2RjkyNzEyRUVCCis6MTAzNkMwMDBGRjBFMDExRkUwODJERUJDRDhENjlDMDNCRDUyOERCQjJECis6MTAzNkQwMDAzOEI2OTlDNjNCMkJDNzVCMUNENTJDRTIwNzMyMkYwQ0EyCis6MTAzNkUwMDBFRDY5N0MyQkYzQzIxRUVGN0EzQTgyRjREMzJGNTJEQUMzCis6MTAzNkYwMDBGNzYzRkMyRjlFMUU0RTcxRjA0RTc3NjBFMTAxN0FDRjhBCis6MTAzNzAwMDBGNTM2NEU4NzI1Q0Y0NDA0MDFFRkU3NEZDNzUwOUNGM0IxCis6MTAzNzEwMDA3M0FCRDA4MzNFOEY0OTIyM0RFODU4Q0MyM0YzRDA1RjcyCis6MTAzNzIwMDBGN0Y2MDgwREZFOTRDRjM1NjY0QkM2RkIxRDAzMjk1RUU4Cis6MTAzNzMwMDBCNUE0QjE4MUUyMDQ0QkY4NzI0NzNDOUE5NzkzMTE1N0I0Cis6MTAzNzQwMDBGRTdDQzc3MEYyQjM3Q0ZFQTY5OUUyOEJGQ0Y5NDYzQzg2Cis6MTAzNzUwMDBENzU5RjNCQ0VGNjBEREVEOEEyNjNGREIxN0NGRkM2RDU4Cis6MTAzNzYwMDA3ODY4RkM0MTk1NEJCNjFCRkQ0OThBRkVFQUJEMzU0NzlBCis6MTAzNzcwMDBEODBERDYxQzgxQzdDODFDQjFDRkQ0NDVCNzNEOTI0MUU2Cis6MTAzNzgwMDBGMzE0RUI5NUQzODFFQzJEQkUzRTkyRTA5RjNFRDFGNjMzCis6MTAzNzkwMDA3MjkyRTYwMDlFODMzOTNGMDJERTc3MDlCQkU2OEJERDNECis6MTAzN0EwMDA1NjhBOEIyQzc5MjlDNjRCRkU5QjBENTc5OUIwNUYyQ0ZFCis6MTAzN0IwMDAzMTBCRkQ3NzA5NjczNzUxMEFGRkQwOTJEODFDRjIwRjAxCis6MTAzN0MwMDA3MTdDOTNGREQ4QjVDMzJDQzcxMUUzN0VCRTMzNERGODkxCis6MTAzN0QwMDBERjgzQjJCRUJGMjAwMDNFOUY5MkMwRUVCQzk1RjQ5QjNCCis6MTAzN0UwMDA2RDg1QzBFQkM1RUREMTI2RjAwNTFGQzc4QkI4RkQ5MkU2Cis6MTAzN0YwMDBFRjdDNTdFMDMzNkUyMUU5RTMwQzc5RDA2MzExMkYxNzhBCis6MTAzODAwMDBGMkIyNkVDMzM1NzFDODg3NjFFRjlBMTk0NERGNDU4QkY4Cis6MTAzODEwMDA2NzEwRTQ2MTM4QkU2NkU3NDg3OUI5RkY3MTFCRTI2NzVCCis6MTAzODIwMDBCNTdDQkQyMDNGNjhBOThDOUIyRTdENDYyMzdENkVFOTJCCis6MTAzODMwMDBGQTZCQjY5MDFDN0NDN0NBQjIzOTFDNjdEQjdFMTgxQkJBCis6MTAzODQwMDA0QThGRDIxQ0ExNTdGNDdFRUZBMUY2NEI3OTdCRjFGRDk0Cis6MTAzODUwMDA1QkIxMDRDRjRFQUIwN0YwODREM0YxOEFCRjdGQzY3QzQ3Cis6MTAzODYwMDA0NURGRjdGMDQ3MUJERkQ3MEIyRjlGRjc0NUQ2RkVCRjhECis6MTAzODcwMDAzRTgyMUNEOTFERTlGMUQzRDMzNjhBM0I5RkIxQjYyREM4Cis6MTAzODgwMDBDNEJDQ0YzQzE3NDlGMkU1NENCQzU4RUY5RjcxNzlFOEI2Cis6MTAzODkwMDBCNzAxOEU2RjNENDRGRThEREY0QzY3MTBERDhCMDJDNjk1Cis6MTAzOEEwMDA3RUQ1QjgzN0U0ODg3MzFCNzU4OTlFMzhDNDMzRUEzOEVGCis6MTAzOEIwMDAxREQwMUZBN0NCMkRGNEZEQkI1NkZBM0U3QzFFMzkzOTE3Cis6MTAzOEMwMDA0MjZFRjdBQ0NGRTdBMjg5NUZDRTBDMTZGNDM4RjNGQzVBCis6MTAzOEQwMDAzMERBNTczQUUzMDU5RjczNzhEMzYxQTc5Qzg5MTcyNTlGCis6MTAzOEUwMDA4MzMyQzJGOTYwODlCNDQzQ0Y0QzY4MjNCQkZCOENCNkVBCis6MTAzOEYwMDA4N0NBNEVBQkY4NkU0OTgzOENEQjcyQkU0QjA2REY4MDA1Cis6MTAzOTAwMDAyNzExQjdCMjZGNkE4NzFFMDFGRkY0RDg2MjJBODMxMUFDCis6MTAzOTEwMDAwOTk3RkI5OUMxOUZEODg3OUU5NEVCMEI2QTBERTQzQUY3Cis6MTAzOTIwMDBDNTM3NDgzRjY5QjM0MTFFRUI1MjhGQUJERDdENzlCQzkzCis6MTAzOTMwMDA4Q0UyQTBCQjM1OEFGQkRDQUJGQUUxNTAwRjUwRkU3MTg0Cis6MTAzOTQwMDBDRThGNEJGRDlBMTdGOTQ2NEJEN0FFNTgwQzdFNUY1QTc3Cis6MTAzOTUwMDBCRkY5NzZGMEJCOUFDNzUyMEI5QjBDRkJBQTUzMzMxM0VCCis6MTAzOTYwMDAzQzlEOTE3Q0REMDAwRkExRTM2NUY0RTJGN0ZFMUNBRDA4Cis6MTAzOTcwMDAyNzBGREE5OTQ0N0EyNjI5RDcwRkU2ODhGRDBBRjU2NkRCCis6MTAzOTgwMDBERTVGRUQ1QTZEMTM4REUzNTZGNkE0OTg5RkMyMTM0NzgwCis6MTAzOTkwMDA4QjBEN0UzMjZFRTc4QkY3RkRDQzVGQzExOTNFN0YwNTQ0Cis6MTAzOUEwMDA0RjZCOEVEMDFCM0FEREFFODdDNjgzREVCRjMyOTNGRkVFCis6MTAzOUIwMDBGNEUyNTdBM0UyMTJCRTQ2MkY4M0M1RDZFMzJGRTZGMDBBCis6MTAzOUMwMDAzRkNGRjc2QUMwQkY0MkNBQjdBNUYwNDc3MzM4NzNCNjk2Cis6MTAzOUQwMDAxOUUzMUZCOURCOERGNTExQkI4REY1RkNCREM2N0FFMThFCis6MTAzOUUwMDA0MTYzREQ3M0Q0NTg3RjA0RTMwRUVDQzUxM0VDNUNFNDUzCis6MTAzOUYwMDBCNUMxQ0U0NTA5M0JENzk1MjNFQzVDRDQ2MUU3QTI4NEUxCis6MTAzQTAwMDA5RDhCRTdCMDczNTE4NzlEOEIzQUVDNUNENDYxRTdBMjQ0Cis6MTAzQTEwMDA4NDlEOEJFNzdGOTA3OEFBOTU3RTQ3RDA4MUYyQUI1RTNDCis6MTAzQTIwMDA4RTU0NzE3MDVBMkYxN0U2MjQ5MUZDNTRGMUNDMEI4QkY1Cis6MTAzQTMwMDBGM0E5REVFM0NGOTk2NjI3N0Y4RUNBRDNCOTNENEU3RkM3Cis6MTAzQTQwMDAzMzg3RTI4NkVERUI1MzQwMzc0QjA3Rjk3MTk3RkY0QzE0Cis6MTAzQTUwMDBGODcxNkI4QjIzMURGMDJGNzRBQ0ZCNkMzREQ0QTdDMkE3Cis6MTAzQTYwMDAzOEZEMURCNEJGNjBFRERBMjlGMjk1ODIyNDM3M0FENkNECis6MTAzQTcwMDBCOERFQkQ1RUQwOEZGQzFDMkFFRkE2MTJGQjVENDJGRkI0Cis6MTAzQTgwMDA3NDBDOEZBM0IwNERDNkI4NDk3ODFDMjUzQzdFMTJDRTZECis6MTAzQTkwMDAwNzJBNkVGMkE0QjUyQjA1RjJGRUU0RDNGNjREODBGRkEzCis6MTAzQUEwMDBBNEY0OEZCMUQ5NEVEMkJGOTQ1RUREQTM3RjNEQTgzRDczCis6MTAzQUIwMDA4NTdERkI0MjhFQzhGQkVCM0VDNkY1RUQzRUY2NUI1NUMxCis6MTAzQUMwMDA1NjVEMkEyNkJEQjFBN0JFNDkzMzUxREU0ODcyMkNFREEyCis6MTAzQUQwMDA0M0FCMjQ0Q0U5NUE1N0U3MDZDOEJCMTgxM0VERTMxNzZDCis6MTAzQUUwMDAxRDI2QjIwQjJFQkU2RjI2M0Q2MjE4RjRGMzkwRjkwQzIyCis6MTAzQUYwMDAwRjQ0MTlGODJCNkY1NzQyNThGQzZGQjBBMUZEQzgwMzUzCis6MTAzQjAwMDAxOTYxRjFCRjExQzZCOEQ0NkQ2QjBFQzFCRTlFQkU2OUZFCis6MTAzQjEwMDA5NEExNURCNUVGOUEzMDNDNEFCOEE1NUVEQUI0N0E2QkYxCis6MTAzQjIwMDAzQUU0Q0ZBQTk4NkU4MjdGRDVCRTQ4Q0FBQkFERTZGMDI0Cis6MTAzQjMwMDA3QTExOTc0Mzg1QTNBMEM2RUU5RDBBRkNENUI0NTlFMzNDCis6MTAzQjQwMDBCMUNGNTdDOUZEODczNTE4RjdFMzFBMEJGMzNCMTM3QTRBCis6MTAzQjUwMDBGOUFFQzZDOUJDRjFGQ0ZCNzM0NUNEM0I0RDlDNkVFNzhECis6MTAzQjYwMDA0Q0RCMUUxOUVGNDI1Q0E5MzVEREM5RjlFQTJFQUQyREZCCis6MTAzQjcwMDBFOTZBREVERkRGMkM3QURBMzA0RThGNzQ2QkYwMDcxNURFCis6MTAzQjgwMDA5MDk3N0IzMkQ5MUFERUVFRTRBNjE3NjM0OUVGOTY3QzU0Cis6MTAzQjkwMDA5NjZFNzU0NjgxREVBRENENjZCMjBCRTA5NzMyMjdGNEE2Cis6MTAzQkEwMDBGMjQzNkI3MzYyNTQ5NkEzNzc5RUJERjRGRjhBRTZDNzE3Cis6MTAzQkIwMDBFOUUyQzEzOUM1NkVDN0UxMjFBQkEwQzdCNTg5RjlENjI1Cis6MTAzQkMwMDA0Q0QwRkNBNDI3Q0JGOUFDOTRGQjBBQ0IxMkZEREMyNTJFCis6MTAzQkQwMDBFQkE3QTRCREEwRTY3Nzc2RjhBMTQyMTdFMjk4OEQwNzdGCis6MTAzQkUwMDBEMkNEOTBFM0E2REQzQjcxN0VFMERFMjhCRDY0RDg0MEY3Cis6MTAzQkYwMDBFNDRCNjZGRjc2M0MxRjc3QzkwNzIyNUZGNzhGMkQxM0QyCis6MTAzQzAwMDA2M0FGODZGRUY5OUNENTMzODVENzM3MzRGRkQ4MDZCQjIyCis6MTAzQzEwMDA3ODg5MjU2MDgzREQ1OUYzNzRBQkNEQ0JDQjFCNzZCNUFBCis6MTAzQzIwMDBEMkYzODVCQjJBQzlERTVFQzRFQUM5OEUzQ0FERjI2RjExCis6MTAzQzMwMDAyNTNFNkE0QUI1NkQ0RTBFRjc5M0MzODREQ0E4ODkxMkZGCis6MTAzQzQwMDA3OTFCRTVFNkYxQUYyMTJGRkRFMjJFQUQwOEYzQkRDREU2Cis6MTAzQzUwMDBCN0M3NTZDOTlGREYzQTRDOUUzQjA5NUIxRkRENkY0RkNDCis6MTAzQzYwMDAyRjFGMDg3RjUyOUI4ODdCRjZCNzFFNjYwNDczNjkzRDQxCis6MTAzQzcwMDA0Q0JGRTRBMkYyQjY0QjIzQzg4RUZEODBGOTBBNDg0RTMxCis6MTAzQzgwMDBFNDg3RDlCMzZGOEIzQ0U0RUU4MzYyMURENEQ4ODIwMzAyCis6MTAzQzkwMDBBNjYzOURGQ0RDNEFFQkE0OEVDQkFGOTI2MkQ4Qzk4Q0E0Cis6MTAzQ0EwMDA4REUzQTU2RkJDRDlDMEFGQ0JDQkEyMERGQzNDOUIyNTRGCis6MTAzQ0IwMDAxOEUyQzgzMzcxNjgzM0E0N0VEQjk0NEM0M0ZCNTlCN0Q4Cis6MTAzQ0MwMDBFNTg1RjE3RjcxRUY3QjkyMjNFMzBDNzkyNjc1QUJGRERGCis6MTAzQ0QwMDAyRThERjI1OTRBOERDRjc5Qjk5QUY4RUMyNkMzRjc3NTMzCis6MTAzQ0UwMDBFQ0Q2REU3NkIwODNCN0ZGOUFGMENDNThCQjBERjY1NjEzCis6MTAzQ0YwMDA4RDQ5RTRENUNDRDYzQkU1RjMwRTdBQ0UyNzYyNTg4N0MyCis6MTAzRDAwMDA0MzMzM0RCRjE1RkJBMjk1RkNGMkNBMkYzRDFCRkZDRUVFCis6MTAzRDEwMDBFQzZCNUZFNDg0OTZFMzIyM0YxNEZFMDU0MzdFMjEwN0FCCis6MTAzRDIwMDA4MEVDNEYyNkU4NTAyN0ZEM0Q3NUI5QzJERjUzRTc2RkExCis6MTAzRDMwMDBCNzIxRkY5NkUzREY5MkNBNTFCMkFDNTkyMzdGMUU2RkMxCis6MTAzRDQwMDA2RjRGNEQxMEY1RDU3OEJFRDc3OERFMDBGRDVEQzJGQjE0Cis6MTAzRDUwMDA2M0U2NEFBQzk3RjBGN0NCRjhCQ0ExNjcyQzgzOUYwNkNCCis6MTAzRDYwMDA3RTI2RDVCRkVDNTdGMUU3QTJBRDQ2QkZEMTMyRjg3MzNFCis6MTAzRDcwMDA0MkU4RjhDOTMwMTdGMUYzOTI1RDdCNUUxRkNDRjEzMjU3Cis6MTAzRDgwMDBERDE3NUY4NEY1NTNEQjM2Q0Q1QTk5N0YzOTlGMjlGOUNBCis6MTAzRDkwMDA3RUIxQzY0NDcxRUVFRUI3OEYxMDlGNzVENzU4ODg5RkRECis6MTAzREEwMDBCRjA5MUZDQkJDQzI5RjE5Q0U3RjBCRjk3QzEwOTc1RDVBCis6MTAzREIwMDBCODU3RjMwNDM0RDEwRTc4MTkwQ0JFMENDMzRCNkExRkVDCis6MTAzREMwMDBGODUyNzhFQUMxNUJEOEZCNDVGOEM3NjhFNDBENjg4MTEyCis6MTAzREQwMDBBMEJCMkZCQzQ4M0NBQUZFQzNGMEM0NEE4Qzc4NThBOEFDCis6MTAzREUwMDBCQkRFODVCQzU5NzhDQ0NDMDI1NzMwRUY0NTk4MUZDNjU2Cis6MTAzREYwMDBFN0YzQzNGOEI3NUUxMjdFMTIxNTM3OTg3OUM5NDJGNTFBCis6MTAzRTAwMDAxRTNFRjE4OUZDRTlEQkE2MThENzY1MEZERkY4QzQzQTNFCis6MTAzRTEwMDA5OTcxMjk4OUJFRkI5RkU2OUY2RkUyMUIwNTc3Nzg3RTJCCis6MTAzRTIwMDBCMjNBREY3MzdBOTgzQ0ZGMzI4NjhEQTFGNTdGODU3OUFGCis6MTAzRTMwMDBDMzZBQkY1Nzc4MUU3QTZGMDlFNTEzNzUzQjMyNDg3RjE2Cis6MTAzRTQwMDBFOEQ5NkY5Q0M2RjcyQjYzMzIyODhGNTg5N0ZFMzkyNTI3Cis6MTAzRTUwMDA3Nzc1RDk0RThENTNDOURGQkI0NjgxOEY4NzI0QzFFRjVCCis6MTAzRTYwMDBCQTdFNkQ2NjdBNDc4ODVFQTJBRkIzOTJERjM0N0Q0RDJECis6MTAzRTcwMDAyMjk1OTU5MUNFMjRFQzE3OTU2QkNDM0VFQzgzOUZEQzdDCis6MTAzRTgwMDAzRjI4QTkwNDdFRjg3NUQ2MDE1Mzc4RDc5RkRDMzMzQUQyCis6MTAzRTkwMDA5RDE1QTA1RTRFRTVDOUNEMTFCMzQzRkREOUFBOENDRkM3Cis6MTAzRUEwMDAxNUZCNDZEREJEQzc2OUZGM0E2NzdBM0I3NjM2RDZEOTQyCis6MTAzRUIwMDBCQTdEQjE0OEE5NTlCQUVFQkRCMTRFQUU3QUI0NUE3NEMyCis6MTAzRUMwMDA2NzJFQzU0OTVCNzczQTgxMzc2NzZCMjFGQ0QxNzRGNjYxCis6MTAzRUQwMDA3MjYwQUY5RUIwNjQ1REY5MjBGOEJGNkFGRjdFRTQwOUFFCis6MTAzRUUwMDBFQ0VGRkExQTZCMTJGNENDQ0ZERkU3RkI5RjQ2RkIxNzFGCis6MTAzRUYwMDBFOTA3QTc5MTdGM0MwMDcxQUI2ODNBREY3NjVBNjM1RUIxCis6MTAzRjAwMDBDNDZGMTY5QjBGMTUzQTBERkJFOUMxOTk4MEUzRTUyOEI0Cis6MTAzRjEwMDBERDk1M0IwNkUzMDc3NjI2NjM3QzhGOUZGMjI1RjUzNTFBCis6MTAzRjIwMDBEOTcxN0RGOTRCNTRCOTdDQUJEMERGNzYyQTdGQURGNEUzCis6MTAzRjMwMDBFQjQyNkY0NzFEN0EzQjgyNDJEMERCNTE4N0RFOEUxMjA3Cis6MTAzRjQwMDA3QTNCOUU5N0MyNUY4RkI4NkE1MzU3MTFFQzRFN0YyOTE4Cis6MTAzRjUwMDBDQkFEQTdGREQ1OTEwQkJEN0M5NTE2RTU4MUJDNTlBNUQwCis6MTAzRjYwMDA3OTA2QzEwRkM2QjZBNzg4N0QzNThDQkVBQUJDQjY4QkI0Cis6MTAzRjcwMDBFQjU2MjFGQzdFRkQyNTNCMEJDRDFGOUJDMEUyMERGNUQyCis6MTAzRjgwMDA4OUY2MTQ0M0ZCNzJBN0RCRjBGRTg2RTRFMTg2RjczNzdGCis6MTAzRjkwMDBCQThBMENGNTZGRTU1RTZENjg3RkIzNjc4MkExN0U0QkQwCis6MTAzRkEwMDBDOThEODZGNkQzQkNEMzBDRjVFOTkzRTcxOERBQ0ZGMEM4Cis6MTAzRkIwMDA1NTFBREVDRjlBQkREOEYwN0U4RUJFQzI1MEJGQkRFNjg4Cis6MTAzRkMwMDAxRTQzRkIzQkVBRDcxOERFN0I5OUQzODJGREVEMjBFQzQ0Cis6MTAzRkQwMDAyOThFRjc5RkMzOUVFMkU1QUE1RjY1M0I0MkU5M0E3RUUwCis6MTAzRkUwMDBBMkE5QkUyRjdGRkNBMjVDQTFDRkRDM0ZEQzNCMUZGQzYzCis6MTAzRkYwMDA5MTI2Q0Y4MUE0QzlGMzFDNzdFN0JBNDRERTAwQ0VFRDQ5Cis6MTA0MDAwMDA5MzNEREI5RTAyQkUwOTZGMTdGRTdFN0NGNEUxOEIyRTkyCis6MTA0MDEwMDA0RUMzRjZEQzVCNkVCMzcwRjkzMEZFQUFDM0EzMzI3OUVGCis6MTA0MDIwMDBEREZDNzREMzZEMTYyRTU3QzY1RjczRjhDNTBDNUU4RjFBCis6MTA0MDMwMDA3RUZBNTU1MTFGNzlGODIyREVBRjdFN0E4M0E4NEY2NzRBCis6MTA0MDQwMDBBNDVBMjQzRTNERUUzNjNGOUZDN0Y4RUIzMzM2Nzk4NEMxCis6MTA0MDUwMDAzRkE0Q0Y3QzRCNTUwMjBGQzg1QjA0MUU1MDA2Mzk3RjJFCis6MTA0MDYwMDBBMjNDQ0NGOTEzRTU1MUNFOUZENTU5OENCRENFRjkxM0E2Cis6MTA0MDcwMDBFNTMxNkU1N0UyRjkyRkI5NUQ4OUYyNkQ2RTU3QTI3QzdBCis6MTA0MDgwMDA4N0RCOTUyOERCQjk1RDg5RjIzNzhEQjNBOTdDQkY1MUY5Cis6MTA0MDkwMDBBN0VGRkVCM0IxODZDQUUzOERGNUY0RkNDM0M2MDYyQUNBCis6MTA0MEEwMDAzRjZFRjREM0YzQ0RCOUNBNEYxMTI0M0Y4QjhBMjcyRDJECis6MTA0MEIwMDA0MzFDMEY3RUI4MDNENkIzQTE3MTU2MTUwRjU0RjFCRjQwCis6MTA0MEMwMDBBNjdBRDYxMThENzVEQTYxODlGRkQ0REUxQkQ3RUI1RjM2Cis6MTA0MEQwMDBDRTVBRDhBNzIxRkE1NjZCQjQ3NzVCMkVGOTJGODYzOEMzCis6MTA0MEUwMDAyOUFFMjM5Rjk3NkFEM0QzOEE3OUY5ODU0QjdGMEFFRjRDCis6MTA0MEYwMDA2NzE0NTdBRDhCNzNFMzFDNDhCRDE1RkNGMjgxQTlFRjIzCis6MTA0MTAwMDA3M0MxNzc0QjNFQTkxQUVFRkQwOUJFNTM3MTZDMTU0NzdBCis6MTA0MTEwMDBFRUM5NEYwOTg5NzM5QjQyRjI2MkU4MkYyNEJGNDVDNTVGCis6MTA0MTIwMDA5QjU1M0VDRDc1NzY5MTlGQTdFMkM5MkE2RjQ2RjU1N0ZDCis6MTA0MTMwMDA3RTg5OTFCQ0JCNzZBMzg1RjQ5MzE4MEIwQkEyN0Y5NTY3Cis6MTA0MTQwMDAxRjczQURCREFEMDhGOTAyRDdENjNBMjgwRjZEMTA3RkE5Cis6MTA0MTUwMDA2RTJCQTY3NjVFMzMyRkI3RkY5OUI3MkZFQzhENUYwRkNFCis6MTA0MTYwMDA5MkYwRjNGNzA0N0ZGOTI1OURGQ0FFRDdDQUY4M0RCRTY3Cis6MTA0MTcwMDBCNzhCRjc3RTdDOEZEQzI5RTgxOUJDMjRCRkRBRTNDODUzCis6MTA0MTgwMDA3MzJBRUU4REE3QTM3REI0NjgxRjQ0N0Y1OUZGQzVDNzZFCis6MTA0MTkwMDA4QkVENUQzRjY5MDk2RDQ1QzhBNzRBNUJFNkEwN0NBQTI3Cis6MTA0MUEwMDA2RDEzODI3NDdFNEI3N0VCRUYwMTlGQkUwOEU3RUZBM0EwCis6MTA0MUIwMDA2OUZENjRBNkMxNEYzMDRERUFCRDVGNDM4N0UzNThBRjQ4Cis6MTA0MUMwMDAwQTNGMEFDRjhBMkUwQUJGMjE3OTQ3ODREN0ZFRTgxNDE2Cis6MTA0MUQwMDA0RTlGNzBCQTI4N0E5NDVGRUFDNTMzRjA3NDM5MUQ3QTFECis6MTA0MUUwMDBFOTA0N0ZFQ0ZGMkI3NDE4NkQ2OUEzRjM3RjExQjU3NjlBCis6MTA0MUYwMDAwRkUwRkEyNkJBRENEOUM1MjZFMTNDNzE3Mjg2N0UzNzFCCis6MTA0MjAwMDBFODUzNzlDOUY1M0FFQTU1NkNDMjI0NkM0REVBQkRGQjE2Cis6MTA0MjEwMDAxQkRFNEZGRTg2RjcwQkZCNzlGRjU2QTRDQTQ3RjAzQTI4Cis6MTA0MjIwMDA4QTM4NUQyNjRBRjlCMUFBNUNFMDc3QjJEQjRDRjg5RDhBCis6MTA0MjMwMDA5OEJGODhGNDUxRTYxMDdBOUQ4QkZGMEZGMjY0RDI1NzM1Cis6MTA0MjQwMDBCRUI1RTg2RkQyMDBBMzdFQThFMkMxMzdDOUZFMjY4N0JCCis6MTA0MjUwMDBDNTgxNkY5MjdBRTM0RDYxN0FFMUIwRTEzMjNFRUM2NjVFCis6MTA0MjYwMDA2RTYxRjc4OTczRUU2NTcyOUY0RTk1NzRDRUU0QzZGQzVECis6MTA0MjcwMDA3OEQwOTFFOTE2MDhBREEzMzhFNzVFODg3M0UwN0VBQThFCis6MTA0MjgwMDBERkM4MDI1NDdFOEIwNTY5REZCQTk5MEIzOEQ0NkY2MUExCis6MTA0MjkwMDA4Q0YyMTk4RjQ0NEZBRDU4Q0VGQjlCMzg2QTYyMTY5RTQ0Cis6MTA0MkEwMDA4NzlDRUIyQjE5M0U4NkNFRjVGREMxMTk3MkFFRUY3MERGCis6MTA0MkIwMDA5OThCRjQ4NkMzRjY0Q0QyNjNCMDBFQUMyMTdFQjQzNzMyCis6MTA0MkMwMDBCOURDNDcyQUMzMTFCRTJGQTA3QzhERUYwQjU5OUNDOUM2Cis6MTA0MkQwMDBERkUwRkIwMkVBMzdFNUFFNjFGODZFOTJDQjk4NkZBMkExCis6MTA0MkUwMDBCRUZGOTZCMzk0NTk0NkY1MkY3N0JGNTVGOEYyMTBGOEY0Cis6MTA0MkYwMDA1N0RFOEExRjU2MDZCRkYzNUJGMTU3OTU2MUJFNkZDNTQ3Cis6MTA0MzAwMDAwRjMyODkzMkMyNDY2NUMxNEI1OTdERTk1OThBMEY3QjBDCis6MTA0MzEwMDBDNzlCQzQyQzg5OTdFMzU3RTEzMzFDOEYwQUJGRkYwMjY4Cis6MTA0MzIwMDAzRUU3Rjc4NUNGQkJBNTNFREE2RDdGMkYzNjM5MDNGMTI3Cis6MTA0MzMwMDAyRkIxRkVFQjVFMkExODA0RjgzRjA3NjhDODRCQjYwQjk2Cis6MTA0MzQwMDBCQzg0RkI3NzNFNkI2NDQzODA1RkI2M0Q4RTlFREYyRDYxCis6MTA0MzUwMDA3OUU4REE4NjcxRDRGRUJBODYxMjlBREYzNTUxRkFBQTY0Cis6MTA0MzYwMDBFMTM4Nzc1MjFDQ0NFMTlBMDNGQjZDNUIxMzlEQkYzRDk3Cis6MTA0MzcwMDBGN0JDRDkwM0ZEQkJENkVDREFFNEMxNUE3RjRCOUM5NzVFCis6MTA0MzgwMDA2MzVGMUQ0OTQ3QkM4RDZERUYzQjZGQjdENkFFRjBFNjVFCis6MTA0MzkwMDAyN0Y4OEIzMkJDNzc4QkZENEY5QzIzNTZGQkVGOTAwOEEwCis6MTA0M0EwMDA5MUVGQUFDRUIzRjZCNzFGOEY4RDEyNzI2NTQ4ODQ5MDM1Cis6MTA0M0IwMDA4MzhBNEVGQzNCQUFBN0YyN0VDNjcyQjk5MUZBNTAxNENBCis6MTA0M0MwMDBFOURGMjUwOURFMDc4MDRGNTZDNjBDRkFBQkIyQUJCQjVFCis6MTA0M0QwMDAwNzk4Mjk2RUJEMTJGMUNCMDFCMDZCRUNFNENGQjk4RTFBCis6MTA0M0UwMDBFNURDMDIzREI4MENGNjI2Qzc0M0Y5OUI1NTc0NEY4MUI2Cis6MTA0M0YwMDAzQTk3MTE5MTZDMzJERTZGRTM4QTMyRENENzEyOUQ5QkMzCis6MTA0NDAwMDA2MEE4Qzc3ODA2MUJEQUM3OTU2NDE4REVDNzdCNDcxODEzCis6MTA0NDEwMDBERTI3NEUyRTM2RDQwN0ZBQzYxOURBMEY5QTVENkFBODNGCis6MTA0NDIwMDBBN0U4MzcxOURBQTdENkRDNkFBODJCRjk5MjJBMUVCMUI5Cis6MTA0NDMwMDBCNEZBQjk4NkVGODczNkNDMzdCNDc3RkI5NzE4RUY5RjdECis6MTA0NDQwMDBGMTdCREI3MzkzMjA5N0M0NUZFNkM2OTU4NkY3M0Y4QUJFCis6MTA0NDUwMDAxNUU3MEUyNjNCMTZEMjdEMTJEOUNEREYzMThFNkZGRUM5Cis6MTA0NDYwMDBDQTBDRkNBNkM2NjlFMkJFMDA5NzkwN0Y3RUZFM0ZEMEQ0Cis6MTA0NDcwMDBCNTNDRDkyODBGMjczQThERjYzMEQ3RDczNEVDQkZBOUYxCis6MTA0NDgwMDBGNTE2QzNGMzM3ODY0QkJCQjc5MDE1OTJGQ0ZCMjdFOUIzCis6MTA0NDkwMDAxQzhFOTdFRTMyRTYwOUEyM0RGNDE1NUVCRjRFMUZGMTY5Cis6MTA0NEEwMDAxMEZDMEU2NTAzQUM5RTAwMTNGRUVFRDA3OUMxREYxRDNCCis6MTA0NEIwMDA4QTA3RjhCQjQzRUJGMDc3MUJFRjZEMzJEMjFERkVFRTlGCis6MTA0NEMwMDBEMEY3QTM4RTE5RTkzRUE2REQ0OEY3QUI4RTFCRTlBRTA3Cis6MTA0NEQwMDBGODMxOUMzRTU3NzcxOEY5MjE5QzNFRDc5QzBFRTMwRjhDCis6MTA0NEUwMDA0OThGRDlGQzdGRkYxMEU3OTg4OTVFOTMxQzFBN0JDQzFCCis6MTA0NEYwMDBGREFGRDNFNzZGNjFGNEU5QTE4N0MzNEVGQUUyNzVDMTVFCis6MTA0NTAwMDBCQzM4RDRDQkIxQ0VBMDM3QzhGOURDOTA1N0VGQzg4MDA3Cis6MTA0NTEwMDA5Q0I0RTlENjExMDM3QkY5QTcyOTQ1RjA0RkY3QjExN0YxCis6MTA0NTIwMDAyMzIxRjcyMjQ2MThGQjNGOUZBQTQ3QTFGREVDQzQ4QjJECis6MTA0NTMwMDBFOTM2RjA0Mzk3QjhBRjZGQkU5NDlGMkE5RjkwREJCQkRDCis6MTA0NTQwMDBFMjNDREQ3N0NDMTRERjNGNjE2QUE2RkI5MjBFM0JGNUJGCis6MTA0NTUwMDAwNDdDN0Y2NzdFQkQ4NkY4NDEzMkYzRUQ1OUM4Qzc5QjY2Cis6MTA0NTYwMDBGNzhCMDg4QTI3Q0MxQjJBQ0U3NUIyRkMwRUNBQjM1NzJDCis6MTA0NTcwMDA3MjZFNUVBQUM4NjMxOTNDNDJDNjI3M0QyMjlGMjU2RDE0Cis6MTA0NTgwMDA4NEQwMEI2MzNDNEVDQTdCQURDQzE3RTcwOEI4NTk5MDdBCis6MTA0NTkwMDAzRUFGMDBGODc4M0IxMkY3MTY3NkI3MDhGRjdEODc1NUQ3Cis6MTA0NUEwMDA5QzJGRjU3MzNFNDU1QzBDN0EyMkY0QjgzNEE5NDczNTRDCis6MTA0NUIwMDBGRENFNkUwN0ZDQzNCNjMyQzNCRTM4M0M2MDM3RTQ1RDQ3Cis6MTA0NUMwMDBFNkVENzIxQUVBMDU2REM5ODZGNjIzMEZCODBDRUY4QjdCCis6MTA0NUQwMDA4MkI5ODZGN0EzOEU3OTBDRjUzMUVEMjU4NkY2NTcxRDQ1Cis6MTA0NUUwMDBGNzFBRUE1Nzc3NEMzNkI0QkZFNkI0Q0Y1MDRGNjU1RDQzCis6MTA0NUYwMDA4RjAyQkY0MzM1NjE4RkNFMTgyMUYyNzhGODFBQTU3ODYzCis6MTA0NjAwMDBEMkJDMERGMUUyRkNBMEI0NTM5NTFFQUNGMjcxNzVDOTk5Cis6MTA0NjEwMDBEN0UxRkFGNDUwOUI0RUY5QkQ0RDI5Q0M0M0U3MDBFQ0FECis6MTA0NjIwMDBEMjNFNjE0NjNENUI5N0Y5QjQ0QTFGNjU3RTYzM0VBRDVECis6MTA0NjMwMDBDQUEzRUREMUM3QTVGRUFERjRFMTkwM0M1QTZGNjgxRTQ4Cis6MTA0NjQwMDBFRDNDNzlDRTM3N0NERkFCMUMyMUNGRjM4NUMxM0ZENDY1Cis6MTA0NjUwMDAyNkU2REI3NDhGOERDRTJEMjhCOEMyRTEzOTJCRjMzQkQzCis6MTA0NjYwMDA3N0Q4RkIzRTNGQjI3Qzg0QjA2MzdGOTZFOTVCMzQ4MkFGCis6MTA0NjcwMDA5NzRGNDAzQzY1RjYzNTlFQTdDM0NGRjlBQkU5N0IzNjMzCis6MTA0NjgwMDBDRjdEQUU2RjFFNkZERTQ4MzE5RjBBOTNFOUNFNjlGOTg4Cis6MTA0NjkwMDA5NEI3MzRGQjg1OTBGMTFCMjU3RjU3RTc2QjdEQ0U2Rjc4Cis6MTA0NkEwMDA1RTlDQzgyQjYyNzEzNjE3RjhCN0ZGRjEwNDNFOTM2RDFDCis6MTA0NkIwMDA2QzJEOUQ3MzkxNzlFNzc3NkM2QTdCMTAyRUYyMEE1QjAzCis6MTA0NkMwMDBCMzU1REM1RjE2QjA4MjFGQTY5NDcyRkRBOTg4REJDOUMyCis6MTA0NkQwMDBEQkZGRUI4NzBFQUVFNzNDRDE2MDIxM0ZDNEZBNjdDQTJGCis6MTA0NkUwMDA2NzcwQ0RBQkU3MUNDMTUwNkU1RjgwM0ZBMEFCQzAyRUEyCis6MTA0NkYwMDBGOTRCOUVDODlCRkRDOTA4NDY2NUI5RjlBQjlFRkM2Rjk2Cis6MTA0NzAwMDBGMkE3MzMyNkY3MDc2MUI3RjRDMTZGQzQ4NzZBMUVGRkFCCis6MTA0NzEwMDBFRTNDRjA3MDNDMjlCQjkwQzlCQ0JCMkMwOTk3QzI1RjMyCis6MTA0NzIwMDA4RjFEMkZGMUE3RjJGMTVEMkJBQ0JFQTcxQzk0RDczRkQ0Cis6MTA0NzMwMDAxOUY5NEM4QTdFMzFGOTgyMkY3RjI3RjE4MTc2OTA0N0QzCis6MTA0NzQwMDBGREI1MkIzN0U3QzdDMTVGREJDRDVDNzFDRUFGRjE0NzVECis6MTA0NzUwMDBGRUJCRjBBMkYwREZERkY5OUVGRUU0QzM2NTcyQTE5RjBECis6MTA0NzYwMDBGMzNFRkRGMTI3RkRGRDEzRTc3RTQyRTQ4M0M4MkY5MTYwCis6MTA0NzcwMDBGNDA4NjQ5OTI4OUVCQjIxQzZCODhFRUQ3OTYyNUY3OEYzCis6MTA0NzgwMDA0RUVEMTc3RTZFNEYxQUU1MDQ4MzdGQjk2OTlENTlDQUI1Cis6MTA0NzkwMDAwOUIxNkY2M0ZGQzRGMzA1RUJBQ0E0Q0ZCMDA2OTE4RkYyCis6MTA0N0EwMDA1QzIzNjUzMTYzQkVBNDcxQTMxMThGQjVEMjdENTZENzRBCis6MTA0N0IwMDA3OTE5RTkzQkYzMURCNjQwMkI2RjVGRTkwRkRGQjdCREY5Cis6MTA0N0MwMDBGNDNEQzU2QjVDQjhCN0M0QjMxRUZFRjdBQThEQzY3NkMwCis6MTA0N0QwMDA4QjFDRTI1RUFGMDU2MTc2RTkyMjY5OTcyRTBBQjM0QjI2Cis6MTA0N0UwMDBGRjNBNDJEQUE1MUVFNjIxQkQ0Q0M2OUYxNTlDM0Q3Q0QyCis6MTA0N0YwMDAxNUM4QTRCQzYwRDhBOTY2RTEyRkExN0MyNTg1MjcxNzIwCis6MTA0ODAwMDBFMjBCMjFGNzY4NzI3QzQ2RTU2MkRGNUU2QkU5MzM4RjZECis6MTA0ODEwMDBBQzA3OUZGREM0QzlDRjIyNEVFRUMyRkFFRkE2RjMzRjBDCis6MTA0ODIwMDBERDdCMjM0NTFDNERDNTJGNjRGQkIzRkU4QkY0MUVFREQxCis6MTA0ODMwMDBEMURCQjlBMkY2NDJDNDkxN0FFMjFENjE3MTkzNkU4NzExCis6MTA0ODQwMDAyOUI2MDRGREVEMTZGNzJGQTgzQzgwMjU3RjBEMTQzQUZDCis6MTA0ODUwMDA0M0UyOUM3QTg3Qzk5MDc3MTE1RUVBNkJGNjUxNUU0MDFECis6MTA0ODYwMDBBQjQ1Q0ZDQzQzM0VCMkM1NjNDNzdEOTFGNzNCMEUyNzI2Cis6MTA0ODcwMDBFMUJDRjYxNEU5QUYwOTg3Qjc0N0FGMUFBRjg5MzhBMTkxCis6MTA0ODgwMDA1RkU4QjlERDkzMzVEMjczQjk1QzY0NTg0NzJBOUUzRDIxCis6MTA0ODkwMDA4RDA1MDdBMDU0RjEwMzdENjMwOUUxNTlDNTBGMkE4M0YzCis6MTA0OEEwMDAyNTA0RTc4Q0E2NDU1NjVDRDlEN0YxRThFQUYyMjg1N0VCCis6MTA0OEIwMDA2RjVDQTEyMzRERTRBM0Y0MTc1Rjk4N0VDOTQzRkRERDJGCis6MTA0OEMwMDA3NjY5MUNGNTUzOUFFNzE2RTdGNUQ3M0VCODAyN0MzNEIzCis6MTA0OEQwMDA2MjE3QjM2MjlFMUQ2MUY5RDhBQTdDMjE0RkM4OUY3N0U5Cis6MTA0OEUwMDBGMzk0REM5Njc5MkU2QjM0QTFDNzZCNENFNUJEOTBEQzVDCis6MTA0OEYwMDA1NkY1OEJDREIyNUUyRUVBQUJENjg5N0E4N0JDQzc2OEY3Cis6MTA0OTAwMDBBN0Y0Mzc2MDlFMjgzMTFGRDhDNUJCQTUzRjAyRjM0MEVFCis6MTA0OTEwMDA4OTc5RTAzOUU0MTRFQTkwNTNBODQzNEVBMTBFMzk4NTExCis6MTA0OTIwMDAxMjcyMEFDRkU3MzM1RjdBOTE1OUM0NDFDQTQyRDYwRDU5Cis6MTA0OTMwMDBFMjIwNjUyMTdBMTBFMjIwQTE3NUM0NDE0MkRCMjMwRUZBCis6MTA0OTQwMDAxMkZBMUU3MTkwRDBGNzg4ODM4NEQ2MTEwNzA5NkQ4RkYzCis6MTA0OTUwMDAzODQ4Njg5RDk1RENEODVCODc1Q0YzNEUzM0Q0QTc3M0U5Cis6MTA0OTYwMDA3REJGMkM2NEREMjIwRTEyREEzRkUyMjA4NkZFRjQxNUI0Cis6MTA0OTcwMDA4NkVGNkY2NzBEODZFRjExMDcwOTZEN0Y2NzgzNjY4ODg1Cis6MTA0OTgwMDA5M0RDMjlDRkE1NTc2RDREMjBGRUI4QzlFRDZCQ0NFMzY0Cis6MTA0OTkwMDBGNEZENDNGNERGRUZCNkMyMEUzNDFGNUM0Q0Y2NTk1REY0Cis6MTA0OUEwMDA5NDQ3RDBCOTc5QjJBMEJCODkwOTNBNzdDRDIxM0FBRjAzCis6MTA0OUIwMDBCNjg5N0FCOUM4OEJFRDJCREU1MDk2MjVFMjBEMjgxMTA5Cis6MTA0OUMwMDA2RjQwODk3ODAzNEFDNDFCNzAxRjM2RTIwRDI4MTE2RkFGCis6MTA0OUQwMDBDMDczQzQxQjUwMjJERTgwMTJGMTA2OTQ4ODM3QTA0NEI1Cis6MTA0OUUwMDBCQzAxMjVFMjBERjgwRUYxMDY5NDg4MzdFMDM5RTIwRDlFCis6MTA0OUYwMDAyODExNkZDMEYzMTM4ODdCNjRGNUMyMDVCRDNEQ0I2MDAxCis6MTA0QTAwMDAzRjcyM0UzNEQ4OEY0RTQzMUQ3QTdCNjg3QkU4RURBMTIwCis6MTA0QTEwMDBFRkExQjc4N0JFODdERTFFNUE4N0RFMUVEQTFFN0E3QkJECis6MTA0QTIwMDA2OEZERDAwODE3QUQzM0U4RUZBMURGNDE3RjBGQUQxNzY4Cis6MTA0QTMwMDAzNEZCNUY4MzhGRTlFNjZERTc4RkEyRUM4OEQxOUVEMENGCis6MTA0QTQwMDBCODI4MDhFNjdEM0MwMzcxQTQ4RTQ4MkQzRDlFMkY3OTQxCis6MTA0QTUwMDBFQjlBQ0UxOTY1QkNBRUNCRkNCMjQyRDY0NUY3M0JFQjI4Cis6MTA0QTYwMDBGMkRFMUEzREM4MjgxRkI2RTAyRkM5NDIyRUM4MzgyNEVFCis6MTA0QTcwMDBGRDcxQkExN0VENjU2NDA3OTRDQUYzODNFQTdCMEY3MzdGCis6MTA0QTgwMDA5QTUxQUFGNkJERjVCRURCODU4RkFGREE5MUJDMEM4MUQ5Cis6MTA0QTkwMDA4MzFCODg0NUM4ODMyODVBRUQyODQ2MUVGNzRFOTMyNjY3Cis6MTA0QUEwMDBGMjIwRUYxMzc5QThFMTdDRjUyN0I5NkZFRjM0RUQzOUU3Cis6MTA0QUIwMDAxQzg1QkM5NjRBOERFRThCQ0ZCMUIwNjNCOEM3QkJBMDQ2Cis6MTA0QUMwMDBCOUJFMThGQUMyQzc3OTNERjdDQjhGNDM1RThDODI1QkMzCis6MTA0QUQwMDBGOTAxQjk5Q0EwNzM1NUUzQkI5OEFEM0ExRkY3ODkzMTMyCis6MTA0QUUwMDBEQjAyQzg3NzlCRDAxM0YwMURFQ0M3M0NCRkU2N0QyQUU0Cis6MTA0QUYwMDA4NEJGM0ZDRDEzN0FCRkVFNUYzMUFFOUEzRkNGREI1RDBGCis6MTA0QjAwMDAzRjBFRTdCNUE2NDQ4OUVGN0VGMjY0MkNFMTcxRUE1QUM0Cis6MTA0QjEwMDBFRDI5OUM4QjFCQkY5Qjc5NzFGRUYyODI4NDNCNkZCN0EyCis6MTA0QjIwMDBEMzU2NERFMzNBRTk5QzU3OEZCREIyMkQ5RENFQTU1NTg2Cis6MTA0QjMwMDBCMjhFQjI2NEYyRTU2Qjc0OEZCOUMyMUI5RkRGNTFDQ0E5Cis6MTA0QjQwMDA4RjhCRjg2MzU2RDI0N0M1Nzk5MTI4Nzk1RTQ0OUQxM0JGCis6MTA0QjUwMDA3MTVCN0M3QjYwOEZBOEYzMjJENzhFOEUyRjQ3QkUxNkE5Cis6MTA0QjYwMDAzQjI4RUVEREJCNzk3NEU1QkE4MUJDN0YzRDIwRUVEREVDCis6MTA0QjcwMDBCQkY2NEZGNUFGNTE3REJCQjg3NzhGRDg2MDJDOEQ0MzE2Cis6MTA0QjgwMDBGQkRBMzBCRjQ2RjczRDRDRjVCNzlBMDZCODcwN0U3NDM1Cis6MTA0QjkwMDA4RDM1MDlFRDc3MzMwRkQ0OUY2MTRDOUM4MzU0RjBFNTNDCis6MTA0QkEwMDBCMzc2MTNFRTFERTc1QkNDOTFDNDEwM0VFMjlDN0ExQkZBCis6MTA0QkIwMDBFODVFRTRCMUQyN0QxMEQzMkM0RTJCRTQ0NkY4M0U3RTY1Cis6MTA0QkMwMDA3OTNFNUQ5ODlFMTA5NjBGRDFCNEZBNzhCQTM5MDNGRUZCCis6MTA0QkQwMDAyNDkzMjcwOEI5QjUyRjlBRjQwNUE1RUY1NENBM0NBODI5Cis6MTA0QkUwMDA4QjZCNUZBM0ZCQUMyQkY3MDhGRDQwRTc3MjAwRjI0RjI1Cis6MTA0QkYwMDBFNTQ3RDQ2NTA2RDI0REQwMTcwNkI3MTYyNjk4QzVGRUYwCis6MTA0QzAwMDA5RkNGRjE3OEM2RkZFMkNDMTIxN0NFMzFCRTQ2RjlGQTNCCis6MTA0QzEwMDA5NUVCQzZDNDg5RjMzQTIyRkU1MDJERjE1NDJERjM1RjczCis6MTA0QzIwMDA1OEJFMzMwOTdBQTdCQUM3QjREQzNDM0U4RUNFQkIzNTNBCis6MTA0QzMwMDAwQjdENEVGOTc3MkE3RjM1RUE3NUQwQjlGMjcxNzkxRjZECis6MTA0QzQwMDBDOEM2NEEzQTA3MTQ5RTg3QTJGNDQzNzVERkM5RTJCNTg1Cis6MTA0QzUwMDA1NkNBNkY1OTFDQTYwNzJFOTU3QUUwRDIzMDNERjA5QUJECis6MTA0QzYwMDA3Q0U5OUY1MTdBQTBCQTlGNEVCNkE5RkNENTkxMTlBNEIwCis6MTA0QzcwMDBBN0Q0OEJGQkY4MkFENjA4QkQ4NUVEMTFGN0Q4NTdBQzIxCis6MTA0QzgwMDA5OTY4QzJCRDE1MTVGQkJDMUVBRDBGRkU3ODU3RUEyRjAzCis6MTA0QzkwMDA1MzMwNjgyMkYyN0MwNjUzMzlGMzUyMzI5NUIzMkVFNTM1Cis6MTA0Q0EwMDA5MjFDQzA1OTBDRDBCRkUzNjU0NkZBRjQ3QjUyNUY5OTYxCis6MTA0Q0IwMDA4MTNDM0Y5QzhGRjM0N0M4N0MzRTQ2RkE1MjExNzM5NjY1Cis6MTA0Q0MwMDA0MzZFOENGMDZBNDdFMEJFOUU2MkQ1RDcyMThGNzA0QTUyCis6MTA0Q0QwMDAyQkEzRjMzMDM3NDNBRkUxMkY2NjQzQ0YxOTA1M0U3NzVGCis6MTA0Q0UwMDA5N0QzQjk4MEM5MUE5REFGQjg3OUY0MEFDOUQ3OUNDRkI4Cis6MTA0Q0YwMDAxOUY4REMyRkY5RDY0N0Y1OUVGRDQwRjJCN0VFRUZCNDc4Cis6MTA0RDAwMDBEMEJEQUM3RUNEODY3QkQ5NzQ2OUNGMkFGRTBERTdGMzhBCis6MTA0RDEwMDA3OUYyRjcyNjk4NDNGODk5N0FGQzUwMDAxNjk3QUJGODg5Cis6MTA0RDIwMDBDN0NFODRCRTM4MEZCRUMxQzE5MjkwNzZEODc1RTJGRDYxCis6MTA0RDMwMDBEREJCQzdDRTVDOEIxQ0VCRkY0QkZGNDQ4NUZBMUQwNjI5Cis6MTA0RDQwMDBBRTY3NDE5RURFNzE1NzkxNkQ3RTg4NUMyOTJEMkM2RDdBCis6MTA0RDUwMDAyOTE4RDg0QkY3RjkzREU3QzZGMjA3NDFGRjVGNzk3Rjg1Cis6MTA0RDYwMDBGNkEwQUYzQkJGNThDNUYxOENGNTMxMkZBRUUzNkVEQzNBCis6MTA0RDcwMDA4Q0ZCNzAzRUYzOTYyNUUzM0U2NkE2MkU5MTA5MjI1RkRBCis6MTA0RDgwMDA2REFFQUMxRkRFN0RFNzdGNkU3NDEwN0VBOEJFMzlCRkFFCis6MTA0RDkwMDA3Q0E2OUZENjhCOTA1N0I3NDM1RTk5MjFBN0Y0ODdGMkU0Cis6MTA0REEwMDA5MTFGNjRFRjk4MDQ3QTQ0RTc3N0M5RjNGMEYyMUM2QjIzCis6MTA0REIwMDA5ODNGRTI3MEJFQTA0M0I4NUZBMjJBNUZDODcxNjY3MUQ3Cis6MTA0REMwMDBBNURGNEVFNzU0NURFNEQ3NTNGMDdGNjIzNTlFMUI1NDU4Cis6MTA0REQwMDBFNUNGQTQ3REZERUZDQUI3RkY3MzkyRkUyQ0U2Rjc4OEZFCis6MTA0REUwMDA0OTlDREYxRTZDNkU2NkQyM0YyNDdFMjc0M0FFMUYyNjkxCis6MTA0REYwMDBFRjMzRThBNTNGOTcxQUEwRkZGRDlBMzM5NEZFRkE0NkQ5Cis6MTA0RTAwMDA0RDlDOUJFRUM3OEZDMzcyQkIxRUREMDEzRjVFQTNGOEI2Cis6MTA0RTEwMDA3RDhFMjc3MzA0MUYzREY5MUQxQkU5REYxNUI2RjZEN0ZDCis6MTA0RTIwMDA3MDRGOTNDMkUzNDcwREZGNjFBNUZCRkU1ODMwMUJGNzlGCis6MTA0RTMwMDA0RkNEQUQ4RkE0RkI1RTRCMEI3RDg3MjBGN0EyRjMzRERBCis6MTA0RTQwMDA0NDhGOTYwMkMxNjcxRDRFREY1MTNDQUZEQjc0RTgwOTA5Cis6MTA0RTUwMDA5QzFGNUY3RUQwNERFNzFBMkIwRjE0QURDN0JEMTZBNTYyCis6MTA0RTYwMDA4NUZBOUI5ODZGQTVDMzY5QzNGRUJENkM2RDNDRUQ2NzY5Cis6MTA0RTcwMDBGMzA2QzlGMzg1QUM4QkUyNTQwQUZGOURGOTYyMUZERDhFCis6MTA0RTgwMDA1MkM4RTQzREE3MzJCRjlFMEJDQTY5ODY3NjMyQUYzODVFCis6MTA0RTkwMDA2QzlEMjhGRjYwQjg5RjIxRkMzRTgxRkVENjhGRjIyN0QzCis6MTA0RUEwMDBDMDdGNjAwQkYxMkYyQUZGODQzNUY3OTMzOUQ4M0YyQjUxCis6MTA0RUIwMDA2Q0M2RjM3MEFBNEMyODkwNzZBRUI0MDMxN0Y0RUM1RjdFCis6MTA0RUMwMDBGOTkzMDY0MTVGREVBQ0QxRUZENjU0M0I1Q0IzQUVFNjVFCis6MTA0RUQwMDBGNUVBNjM1NjY0MEFCMjI5MDkyRTcxOEZDNEZERTIxRUY5Cis6MTA0RUUwMDA4OUY5N0NCRDQyREU1NEM4QkNBMUVBQUQyNUI0REVBQTc2Cis6MTA0RUYwMDAwM0JDNENFQzdGNURERUJFRjk0OERBQ0JFMDlGQTA5N0E3Cis6MTA0RjAwMDBDRTg5NTczQkJEQjY4NDkwNzU1RkQ1QUMxOUNFOTlBQkIxCis6MTA0RjEwMDBCQUE5QzAyQ0Q2MTFBRTMwMkY4NkJDNzBEQjcwOTc0QjZGCis6MTA0RjIwMDAwNTU3MkI5MDg3OTY1MDIwRjg0MzdEQzdEQjUxMUVDMzUxCis6MTA0RjMwMDA5NDBDRjZCQUI4Qzc4N0MzRUQxNkUzMTU4N0Y0M0ZCRkU0Cis6MTA0RjQwMDBEOTc4NUU5RUI3Mjc3REM4NTExMDIzQ0VBNzNCRjlCQzA4Cis6MTA0RjUwMDBFMUZGNzAzQTA5NEU4RTA3QzI1M0Q3ODNCQzNGMTc4RENECis6MTA0RjYwMDA0M0Y0QTgwQTA2QUNCMEI3MkI5MDNGQzFFQjczOUQwMTg4Cis6MTA0RjcwMDAyQkM2OTlCRjU2REM1QkExNkYxMkUzRTgxQkUzNkQwNUZFCis6MTA0RjgwMDBEMDk3MkM0RTVCMUFGMDI3RUZCNUU3RjA5MTFDQUNFNkZBCis6MTA0RjkwMDA3OEMxRjkxRjc1MEUzMDFDM0Y5NTEyREVFQUU2NzhBMzQyCis6MTA0RkEwMDAxRUQ2QkNEOTBBN0FDQ0U5RTdGQ0ZDNzUwNTgyNkZFNzBFCis6MTA0RkIwMDBBRjlENDBFNzlGQUIyRDVFQ0FBRkQ3MjU3RUZGQjgyMkRECis6MTA0RkMwMDBGMjAxQzQwN0U2QjQ2Q0IxQkE3OUJEQjA0MEM4OTlFQjQwCis6MTA0RkQwMDAwQTA0N0Y0REM5MDg2NkQzRkQzNDJCMjIzRDgwNzM4RUIxCis6MTA0RkUwMDBCMzk5RTZENzgzREY4NzM5M0UzNERDODNFMjIzRkM3MjUyCis6MTA0RkYwMDBCRUYwMjM4RkFDQkFDNTQ4Q0Y1RTc4NjJDNDNENDYyRDYzCis6MTA1MDAwMDA5NUI0REUxNjVBNzQ5QjMzMTQ4RUFEODdCMjcxQUU2N0I5Cis6MTA1MDEwMDAwRTVGREZCODc3ODczOTc1M0E2RkYzRTlDM0IzRDI2OUFBCis6MTA1MDIwMDA5RTFDNEVFMDM1QzZFMzlBODRGQjY2Mzg5RjEwMUYyQjBBCis6MTA1MDMwMDA3RTUxRTc4M0Q1NzgzMzBCQzQ3OUM3OTkwNTdERkJEN0JCCis6MTA1MDQwMDA3QkQ3QTU5N0Y0OUIyNjRFNUZGOEJERkI1Qjk3MzYxQzdDCis6MTA1MDUwMDAzNEUyRTNEQUFBQzUzRDYwRTFFQjU0QUQ0RkI1MkVENTlECis6MTA1MDYwMDAzQTU1RUJGNzA5QUIyRjk4QUNGNUNBMTlCRURGRDZCRjlFCis6MTA1MDcwMDBEMDA3OUU1QTBBODQxQzk5MkJFOUNBRjE3QTM0RjQ1QzUxCis6MTA1MDgwMDBEMUY3RTQ3QUFFQzgzMEFFNzdGNDQ3RjcwNjRBQkE1NzlDCis6MTA1MDkwMDA5NDA2QjM3MTBFNTBCNTU3RTM1NjI0ODhFRkMwRjdFMDdECis6MTA1MEEwMDBCN0E1NzIzQ0I0NUY0OUVENEQwNjc5NTFENTIzMkY3NkYzCis6MTA1MEIwMDBBRjRCODJCQ0Q4QTM5MUJFQkJGMkMxMjM2OURGODYxRTcxCis6MTA1MEMwMDBGQjlDRDA2M0NGRDRFRTU4OTYwMkJGODEyNTkwMUU3QTA4Cis6MTA1MEQwMDAzRjUzNzU1MEM4ODcwNTVDRkY4MUJDNTgyOEY3RTk5MjlCCis6MTA1MEUwMDA2Q0ZEM0IwNTIxRUJCN0ZBODdDRkU1RTg0MkJFMDQyMTEyCis6MTA1MEYwMDA1RjNFN0VFRTk1MEZDNkI5N0FGNzRGMDVGRkZDOERCRjc4Cis6MTA1MTAwMDBCNjU2M0E0MkYxQTVDOUZCMjhCQUU5REM1Nzk1QzNFNjgxCis6MTA1MTEwMDA0MjlFNkRENURBNEE5MkI3MkM5OURCMTM1QTQ4OUU1NEI5Cis6MTA1MTIwMDAxODFGNTRBRUQ1RThERUFDQUE4NkIxMDFGM0ZGQTA1QzJGCis6MTA1MTMwMDBBRURBMzQ4REVFRTY1MTc0NTJGNzZGQThGRDU0QzFGRjFDCis6MTA1MTQwMDBCODg0N0ZBRUU0RTM4MDk0NkI3MzZCRENCNjg1QjRFRTE5Cis6MTA1MTUwMDBEREI2MkFGMEJGN0MzRkE3REFGOEJDODc0RTNENzFFQzg0Cis6MTA1MTYwMDBGQ0Y1QzlGMjFDMEJEOTI1OUJBQ0MyQkZCNzNCODZGNDNBCis6MTA1MTcwMDBENTMzMkI1RjdBNjcyNjZGRjdDNTIzQURFOUQwNEYxNDdGCis6MTA1MTgwMDAxQzhCQTQxRjZGODFGNEM3MkQ5NDdBMkJBN0QzNEYwQkQwCis6MTA1MTkwMDA0MkYyNUIxNjNEMjlFODU0RjVGQ0FGN0U4RkZCQTEyQTU1Cis6MTA1MUEwMDAzMkE0M0M3QjUwOUMyRjlGREZCNjg3RTgzNjY3RTM2NkNFCis6MTA1MUIwMDBBQjlCQjdGQjQ1ODFEQjIwQTdBQkVBOEI5Q0YwNEZDRkM1Cis6MTA1MUMwMDBEREQ4NkE4NTFDRjg4NTk0MzdFMUZDNUUyMUYzNTIxNTIxCis6MTA1MUQwMDA1RUIxRUY2ODIxRjEwQkQ1MUVGMjZGMEYxRkU3QUUxNTIwCis6MTA1MUUwMDA5MUIxQzg3MzUxRTM5Qzk2N0M1QzU1MUY5RjgwRjFBQUQ2Cis6MTA1MUYwMDBFQTJCN0YwMEJCNDdDOUZCRjA3NTc3MzI1MkFDODdGOUM5Cis6MTA1MjAwMDBCQzNGQUNDQjkzMTMzQzc0Q0VCNjQyRkVCRTU0NzhGQjhECis6MTA1MjEwMDAzRjQ4QkFGREM4MkFFRTExNEM4RDZFN0I5QUYyMTY5NjY1Cis6MTA1MjIwMDA0Nzc5MjAxRkIyQjIzQTAyMTgxN0ZDMENCODZEMjY3MUVDCis6MTA1MjMwMDBFRjYwNTY2REM3OTc4MDgzQUJDNTk0OUY4MjEyRjcxREIwCis6MTA1MjQwMDA0MTRENEVFMkY1QTc0Q0UyM0M1MDg2NTk5NEQ2NDJDMUZFCis6MTA1MjUwMDAwRjcwNERFMTNEMUJEMDQxRjc5Rjg1RTQ2NzFBRjhENUVCCis6MTA1MjYwMDBDNkI2NkZDNEZEMkJCNjAxOEM3RUVGNDVGMUE3RUE0N0E5Cis6MTA1MjcwMDBGMUE3RTJERkZFRTZGN0RGNTczOEJGOTM2RUU5ODdDODk0Cis6MTA1MjgwMDBGNUE0RTMxQ0M1QkM4Nzg2RDFGREZDREYzNDRGOUJCQzc1Cis6MTA1MjkwMDAwN0FGNjdCRTExRTI3NzBCMkU5QjZGOTY4QzhGRjczQkEzCis6MTA1MkEwMDBERjk2RjJBNDNFRTYxQjNFNEZCNTRFNTRFRTc1NEY1Q0MyCis6MTA1MkIwMDBBMTU5QzQxNTRFNkE3Q0ZGRTJERjlENUMxMTQ5Nzk1RkZDCis6MTA1MkMwMDA2QTVFQ0FFRjdEQTVGOUYyRUVDMjA0OTkzN0RDMTEwM0RDCis6MTA1MkQwMDAzREIyNDJGRTFFMDQwQjhBM0E5RTRGMEI3OUFFRjY3RDFDCis6MTA1MkUwMDA3NTZGOTg5MkNGQTdFQUU1QkVDODNBMUVDNDdBNjYwRERDCis6MTA1MkYwMDA5OTc0NEZDNjg5RTY5MzMxQjhCRkUzRTQwNDAxOUZGQTdECis6MTA1MzAwMDBFRTJFQUIzOEY3Q0E2MjZDMkVEQzlGQzhFRDJCRkFEREFGCis6MTA1MzEwMDA4NzA1NkIwNzkxMUQ3OTQ3NDMyNkM5ODUzQkZDRjFDMjgwCis6MTA1MzIwMDBFRjIwRjVGQjg1NTIwRTQ2REY1NUI5RkUyQUI0REZFQUMxCis6MTA1MzMwMDA3NjZBN0M5QzA1MEVDRkE3NUJFOUZCM0MwRkY0QzFFOEM1Cis6MTA1MzQwMDA5NjY5QjYwQ0QyN0I4NTFEQTBFMjQwNzc2OUNDNDdFNzExCis6MTA1MzUwMDA5OTIwMjdCMUJFNEM4N0IyQjBFRjJDREEyQUVDODAyOTE1Cis6MTA1MzYwMDAyNkI2MTFGMUMyQTE0REJFNDkyOTkwMTM4RjhBN0IyMzI1Cis6MTA1MzcwMDBEOTM2RTNCRDRBMkY2NkZCQzYxNzAyNkY2MUY3OTFERDkwCis6MTA1MzgwMDA2NTZERjMwRTgyMUNFN0ZBMDZGQzRDMEIxQzNFRDJEQjZCCis6MTA1MzkwMDA1RjkxNzJGMjQ0NEIyN0RENEZBRUYwN0FEOTM5MTU5QkZECis6MTA1M0EwMDAzODk3REExNTYzMjJGRkRCOTU5RTU3QTk5NkYxMjRDNTNECis6MTA1M0IwMDAzNzJBMUVGNTE4RkU3MzM1RjA2NEEyN0RBRERDNUM0MTIyCis6MTA1M0MwMDBGN0ZBQUM2Rjk5NDg2NUY1RTZGMjQ3RkMwNTM4MEZFQjQ0Cis6MTA1M0QwMDA0QjFBNDc3MDVCQzkzRjU2NUQzNzUxOUMxRjdEMkEyMjhGCis6MTA1M0UwMDAxRUY2NERCQUQ1OUYxRUFBOTc1NkI3NkVBMDczMkFBNzcwCis6MTA1M0YwMDA1QjIzRTk5QzRBOTk3MzVBNTlGQzAwQkE2Rjk3Q0U3RDlBCis6MTA1NDAwMDBBOTc2QjU4NTYyM0Y1RjUyMzdEMTcwQ0U2NDAxRUYxMzQ0Cis6MTA1NDEwMDA3OUIwN0Y2RThCQTZCQzUyNzU3RUU0REUyODdENTFFMUFCCis6MTA1NDIwMDA0MDcxOEVFNDZBOTczODNGOTI0MkVENUQ3REZBQzM1NTM0Cis6MTA1NDMwMDBGOTY5QTMzODhGMTA3MjJFNjZFQTFDRkU3RDZEREQ4QjM0Cis6MTA1NDQwMDBCMUU4NjdFOUMzRUY4REU1OTg4MUZGNjkxNUZBRUYzOTk3Cis6MTA1NDUwMDAxN0IzNTU5QzhCQjkwQkY2MTJGNEM4MDRERkNDMzlDMEQ2Cis6MTA1NDYwMDBGRjlCNjZDMjdGN0ZFM0Q1RTA0NzQ5NDJFQzg4M0IwMjYxCis6MTA1NDcwMDA3MUE0QjdFQTQxNjY0MzNDNTk3NzMyRDI4QjRGOUI1OUFFCis6MTA1NDgwMDAwM0Y0MDBBNUJGQThFNzFCMjQ1RTRFQzczNUE3ODMzRkUyCis6MTA1NDkwMDAxNkVGREM5MjhFRkRFNUYzMTg1MUFGRDgzOUVCOTc5MEZCCis6MTA1NEEwMDA1N0ZBRjYwOEExOUY1QjE4RTlDMzU1N0VBMTVGQjM5QTJFCis6MTA1NEIwMDAwNDc1MkY2NkU0M0NDRTQ3OUIwQkEzQzUzRDNERjJGQzMzCis6MTA1NEMwMDA4QzgyNEJEREI3RkFCOTQ1REMxNzgzNzMzMUUwRjc4Rjc3Cis6MTA1NEQwMDAyQ0MxMDVBMEVGNDc1QzdGODUxRDVCMkJFNUQ4NDdDRDMwCis6MTA1NEUwMDA2NkZBREQxMTNGNUYyOEQwNDMzRTZBN0UzMTA2RTc3M0RFCis6MTA1NEYwMDA5NUJFNTY2RUZFRDg4QkZCNjg1NkVFMTNFNzU0NzFBRjFGCis6MTA1NTAwMDAzOURENTkyOUZEMjBDQkE0MUY2NEU1Q0JENjQ5RjhERDUwCis6MTA1NTEwMDAxMUFFN0ZEMTkzNUE0QkQwRDYxN0ZEOTY0OEZEQUFBNzVFCis6MTA1NTIwMDBCRTc3MEZEOTZEQjVCQjg1RkU1MERCRDY0OUZBODNEMjY1Cis6MTA1NTMwMDA0N0Q0QjlCOEE1QkIzQjQ5OUY1MERGMkREQjJCRjA1MkI4Cis6MTA1NTQwMDBCNzU3M0NBRjQ0REVCQUZDQkQ1MDJEMEJGNkI0NDZGNTYwCis6MTA1NTUwMDA3Nzc2Q0Y5REI1QzY1MDlGNDNGNTc3RjJBNUJGREVEMkQzCis6MTA1NTYwMDA0NUZBRTAwM0I5QkYyMTNCQkM2RUFERUM5N0Q3QUQyMTQ2Cis6MTA1NTcwMDBFM0VEMDcxMzhEMTFDRjMzMURGOERFNjVEMDFCRUFGNjdFCis6MTA1NTgwMDBDNkQzRjdDMUJBQTg4REQ4RTdCRENCMUMxNjk0NEQ3NTBDCis6MTA1NTkwMDAwRURBRjdCN0Q1OUI3MjJEQTMwMTVDOTQwNzdBREM0MTM0Cis6MTA1NUEwMDA5OUJGMzU3MEU5N0Y0NkMyN0Y5MEMyQkE4RUUwREVEN0UwCis6MTA1NUIwMDBDMzRFRkQ0REM4MTlGNTdCOTZFQURDQ0I4NTU3M0YxQkUyCis6MTA1NUMwMDA4NUZFQUYxQkRBNzExMTc3M0M1OEI1ODVCMzEwOUZGODkzCis6MTA1NUQwMDA3NUExOUM0NzdFQzcyOEYwRjVDMEMzNDIzRTNGNkU2NTZCCis6MTA1NUUwMDAxQkU5RkU2MDhCOEZDMTZGMUY5NDcxNDVGRjVGNENFMjFBCis6MTA1NUYwMDBGNzI1QjRFMDhGNDNGNTJCRUI0OEIxOUZGQTIyNDQ3Q0FBCis6MTA1NjAwMDBCMUM4QUQ3RjA4Mzg2RUQxQUMwNTQ1QjBBOTVERTY2Qzc4Cis6MTA1NjEwMDBGNEFGN0U0NzQ1RTlBOUE1NTIzRUE3NDlGQkNBMzYzOEYzCis6MTA1NjIwMDBEOTAxM0VENkJDNUUzQTg3Nzg1RkZFRTEyQUVDQ0JERjNCCis6MTA1NjMwMDBFRkIyRDNFRkFCQUEzQ0JGRDJBRTI4RDI1QkQzMDY0RkJBCis6MTA1NjQwMDBBNkZENEM3MzU5NTg0NTMxRkMyQUE2MjBGMjU1QkZDRjEwCis6MTA1NjUwMDBFQzIyMkZDMDFFQTZENzlBMjIyOTFGNTkzQkY4QzY1RkZECis6MTA1NjYwMDAyMENGNTNDRDVGMUVDMUVGOTRBNDdFNUJBM0ZCMkZFNzM5Cis6MTA1NjcwMDA3NTdGRkEzODdFNjNBNjgyMDU4QUU4MUVCQzc4RkQyMjEzCis6MTA1NjgwMDA0ODc3QTI3QjcyQTdDRTQ5RjY3RDY3OUJERDIzRjYwOTlBCis6MTA1NjkwMDAxNjBBRkZDMTdCRkUxMjlCNjBFQTg1RUI0MkQ3QTc3NDE2Cis6MTA1NkEwMDBBRkUwODUyRTNCRjk2QjRCMEZDQUZCRjZDMkUwQjk5MDE5Cis6MTA1NkIwMDBFQ0EyQkM2OERFOEVGNENDMEIwRTEzREQzMzU2N0FGMDEwCis6MTA1NkMwMDAwOEREOUI1N0FBRUVENUIzMUJFRkQ1NjNBRUI0NzhGOENGCis6MTA1NkQwMDA5M0M5ODdDQTk1ODJBNDI2NDFCN0VCRTI4Qzc2NjJEMjQxCis6MTA1NkUwMDA0OEExMjcyNjhERDRFNDNEQTUwMjdGRERGNkYzNkZFOUJFCis6MTA1NkYwMDA1QUVGM0E1Q0FFRTJGN0VBRjdBNjZBMjJFOEY3QTZCQUYyCis6MTA1NzAwMDAwRjY2N0VFREZEMDlFRjQxN0ZFMDdBQzFGNzMyQkNFOTFCCis6MTA1NzEwMDAyM0M3RjRFRTlGMzMyNDVFRDQzRTZDOTZGRENGOTBGODAxCis6MTA1NzIwMDA5OUUxMzAwOTdDODRGRERFODZFMjBGNDU3RjA1QUYzQUMyCis6MTA1NzMwMDA3N0E0RThDNkJFRDNGRTFBQ0UwNTcxN0ExNTNDQzQ4ODlDCis6MTA1NzQwMDA0RUI5MThGRkM0NUZERTVFODc2M0ZFODNDRERFNEVERDlCCis6MTA1NzUwMDBGRDZGQTE1MzEwRjdFMDVDMzE5RERBQzNFOTE0OEMxQzk2Cis6MTA1NzYwMDAwNjNERTE2MUYxRkI1QkUxNzk4RDJDOTdEMTNBOUY2N0IyCis6MTA1NzcwMDA4RTIyM0ZBMDJFRUYwNUU3RUJGQjM1QUM2RkI1QUU4NzcxCis6MTA1NzgwMDA0RUVFMjhDMEZFNzg4MjlCREU4MEFCQzNENDQ2Q0YxNzk2Cis6MTA1NzkwMDA4RENDQTA3NTM4ODRCNUE3QzhGQzlCMzFEMENCOUFFNERBCis6MTA1N0EwMDBGREM3M0RCRjYzQjhEODQxRjc4RDVDMDhBOEZCOEYwM0U4Cis6MTA1N0IwMDA4RjJFRTRFM0I2Q0NDODI3QkZGRTA1MjZENzdCNERDRjlFCis6MTA1N0MwMDAzREQ5RTJGRUUzOUU3QkIyQ0Q3RUYyOTNDQzg5MjIzRkFGCis6MTA1N0QwMDA0RkNGM0REOUQ5RTJCRUVCNTczNDk2ODM3QjY4RkREM0RBCis6MTA1N0UwMDBFQzk0MUYxRjdFNEYzNkRGNjc5RTQ2M0NFM0IxOUEyODNDCis6MTA1N0YwMDA4QTQzQTlGQjkxNEI5RDdBRTVDODgxOTdERjhGRkM4ODhFCis6MTA1ODAwMDBFNjlCQjMwMEZEMTUzOEE4QkY4RTM5NTFDRkVGMTQ2ODYxCis6MTA1ODEwMDAwRUMyOEY3M0EyMjE4NkVFODU1NjdDQTlGQ0Q3NDNGRDZDCis6MTA1ODIwMDA5RDhGMDI0RkVBNUNFNzFGMjQ3RjI5QkNBQjczNkQwQTkyCis6MTA1ODMwMDBGRjhBQ0ZENDdERUNEQTZBQzE2RjNENzlCMkNCMThGOTFCCis6MTA1ODQwMDA0Nzg2NzAxMEEyMjlFRkQxRTMwMjlFMUY4Q0Q3MUIwMDYwCis6MTA1ODUwMDA3N0QzMEEyRTM3QzgyRjJFRjIzNzRGOTg4Q0JGREJBQjg5Cis6MTA1ODYwMDBDQTI2QjkyRTk5Q0NGRjlGMjdGN0E5NzkyQURGQkZDMTk1Cis6MTA1ODcwMDA5OEVGMUY3RTdGNjY2MjlDNkYxREM2M0JBN0JEMzcxNkUzCis6MTA1ODgwMDAwRkRGRkU2RjczOUZGOTIzM0Y5MDcyNzk3NEI0RkUyMDhGCis6MTA1ODkwMDBEQUFCNzMwRjRBMkY3Q0JCRThCMzM0RkE5RDkxQUY4RTFECis6MTA1OEEwMDBEMEVGMjlDRTc1RkE5QUIxOEUyMkIzNDQxQ0UwMEYyOUFECis6MTA1OEIwMDAxRDc0NEVFMzBGNzNGRTlBNDY3RUU0RDVFMkRFQ0YyQkQ1Cis6MTA1OEMwMDA4NUYzRjI3M0I0ODIwRjU2MkQxMDc5ODZBOUFDOUVGODM5Cis6MTA1OEQwMDAzNkI5Rjc3QzY2MjRFMEY4RkZFRDFDNkRFRjM5RDdDOUM3Cis6MTA1OEUwMDBBMzRFNTFCRTg1OEY3RUE3MjI5QzFFRTMyMzBFQkZFOEU4Cis6MTA1OEYwMDBFMjE2Q0ExQjIzM0Y5OTQ1RTc0RUUzMEVBRjcyRjNGQTU3Cis6MTA1OTAwMDAzQjNGRkQ1NEQ0NTMwRjVGNzRFMzVDRUE0RjNGOUI0NTJDCis6MTA1OTEwMDBFNzRDRjMwRTVGQzQzOUQ0REZGQ0Y0QjQ3ODdGMERBM0Y5Cis6MTA1OTIwMDAzOEQ2RkIzRkZEN0MxNkNFOUREQURERkEwN0EwRUJDQzI2Cis6MTA1OTMwMDA0QkY1QUY2MTVCRkQ2MENEQUQwQkRDNzQ4RTcyNUE1QUQ2Cis6MTA1OTQwMDBBRTM4NDdGOTE2RTgzOTIzNjlGRUJBMzhBREY3MUM2NTU5Cis6MTA1OTUwMDBGNzQ4REYwNzc4N0VFMTRCQzFFNzZFQzRDMDA2RkVFQjc3Cis6MTA1OTYwMDBBNTNBNDdBQUU0NkM3RkYyNTBBREI3N0ZENzM5NThCNTU2Cis6MTA1OTcwMDA3RUQ5NEVDRjQ2MkI5OEQwRkYyRjlGNEZFRDEyRkI5OTJCCis6MTA1OTgwMDBGMTdDRUE2QkFGRkVENjg1QkNDM0YxQTNFREM0Q0ZFM0Q3Cis6MTA1OTkwMDAxREVEMkVGODA1NTA4NzVDRENGRUE1MzhDRjg3NzY5Njg2Cis6MTA1OUEwMDBEMDc2MDNDNDM5QkVGMTM4NEYwMUZGNDFCNzM4NjdGOEVDCis6MTA1OUIwMDBEQUFCNkZBNDQwREU4RkFGQjc1MTlFQ0YxNkY5QkIwMEI0Cis6MTA1OUMwMDAzMUE2NDM2NjhDRjM3RjAwQjE0OTJGMTYwMDgwMDAwMDlBCis6MTA1OUQwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQjUzQzE5Cis6MTA1OUUwMDAwQjU4OTRENzk1Rjc5RjdGOUUzMEMwODAwODI4OEEzRjM4Cis6MTA1OUYwMDA4MjA0MTNBNDMzQkMzNDVCREI4RTBBMTRBNTREMzFERDY1Cis6MTA1QTAwMDBBNDFBMDk4RTkxMjBBRjAxRDRCNjcxQjdDOUM3MTg4Q0ZBCis6MTA1QTEwMDA1MTlCNzQ3NTYzMTI2MzhDMTk1MEQ0MzRCODNCNDYzMDczCis6MTA1QTIwMDBBMEQ4NEM0Q0E0QzYzQzk2QjA1QkUyQjdEQkY4NjE2MkYwCis6MTA1QTMwMDA4Q0FGMEM0ODkyNkVGQ0Q2RDYzREU3RENGQjMzMEYyMEQyCis6MTA1QTQwMDAyNkVEMkU3RUVEQ0RCOUVGN0JERUU3RENGQjRGQzQzMERCCis6MTA1QTUwMDA2MzREMTI2MzUzMEM4QzE5QjMxODhCRDczMzY2OEE2MTZDCis6MTA1QTYwMDBFQzU5MURDMDUwRUUxRDY2NUU0RDI0NjM1MzYzMUE1NkZCCis6MTA1QTcwMDBCMzFDMjhDQkNDRDZBNjY0MDY3RjZFQzY3MjE5NEI5QzhECis6MTA1QTgwMDBFMDlENjQ4NEZBQzRCNTdBQUE4RkQwRjQyOTBENjZDNjY1Cis6MTA1QTkwMDA3QzhEREU0NUU3NTMxOUNCMEY4QkNDNjRERjgxNTJDRjcxCis6MTA1QUEwMDBEMkI1RDA4RjY5QzJBQ0FEQjA1RTgxN0NBMzI3MTFFMEM2Cis6MTA1QUIwMDAzNTVEOTIwRDk2NjZGOTg2OTI1RDJDODVCMTNBMkQwMDgyCis6MTA1QUMwMDBCMUY4M0Y5M0JCMTVEN0QxRjY1NkVEODc3RTdENzE4OTJFCis6MTA1QUQwMDBENjJEMDA0RTQ5MzhDMjUyQjM2MTdDN0Q1MTA2OUJDRTEzCis6MTA1QUUwMDBEODA5OEI2MzhBNzUyMkI0QjNBRDEyOEUwRkNGRTBFMzcxCis6MTA1QUYwMDA3RjVBMTRERTIyQzNGOEMxRTNCN0U1M0FBMEVFNkU4MzA1Cis6MTA1QjAwMDBEMkMxQUM4Q0E1NzhBMjk3NjhFRjA0Mzg0QUM5OTUyQzBECis6MTA1QjEwMDAwMDVCNjM5NzY4MjcwMTFDQUY3NDQ4RDA2RTc0NDUyRkYzCis6MTA1QjIwMDBDOTlGODRFNzMzNUFDRUE3MzNGNjMzMjZCMTI4OTlCMUZCCis6MTA1QjMwMDA2NEFEMjMxREQ3NzExNjdEQTY2NzFBNkMxRkQyOTdDQzUyCis6MTA1QjQwMDA2MjJDQzM2QTIxM0M0QzNDMDE3ODgyN0QwRTJEOEM3MDA2Cis6MTA1QjUwMDBCN0MwRjk1ODg2OTI4QkVENDlCQUExNDgwQkUwNjNGMEMzCis6MTA1QjYwMDA4NkI2Qzg2REE2NzE5MTdGMEZGNTM3RjFFRjA3OENFRDAyCis6MTA1QjcwMDBFRTk2QTk1RTg1RDVEMjY3ODU0OTYwQkRGQTU0RjMxM0M4Cis6MTA1QjgwMDA4OEJGQkEwNEEzOTFDQUVFNkI4NTBDRTdEMTk2QTRERTU4Cis6MTA1QjkwMDAwREYzRDhGNTZDNzk0OUM2RThGMTAzNTYwREVEMkI3OTc0Cis6MTA1QkEwMDAyMzEwNzQzMkFFQ0JFQzRDODFGRjBCNjMyQUVDNjI3MzkyCis6MTA1QkIwMDAxODZCRkUyNTU0RkMxRDZGODc5MzMwRkQwQzhEODA2RDk2Cis6MTA1QkMwMDAzQkYyNTM4M0ZBREJCMUJGQkY5REQ5OERDQzNGRkU3RTQ0Cis6MTA1QkQwMDBFQjhDMUQxQkI0NjIzREE0NzMwNTczQ0Y4MDIzMjRCMkVDCis6MTA1QkUwMDAwNjg5MDFGRTEyOTg5N0U4QjNEQjE2NDNGQkEyM0ZBMDlCCis6MTA1QkYwMDBEMzBCQjFBNkU2MkREMDJGNTU2NjJFNTMxNjk1Q0MwMkE5Cis6MTA1QzAwMDA2NTYyMzhBQzA3RUQ4OUFGOTlEQ0M4NTc3QjRERDAwRTgzCis6MTA1QzEwMDA0MzUzMzVCQ0RDQUJFMUZERjU2MUNDODU3QzNBMTU2MEM2Cis6MTA1QzIwMDAwNkU1MzE5QkEzQ0UzNjkxRTZGMUQyM0NGMjIxMUJGMjgwCis6MTA1QzMwMDBFMzI0RTZBMUY1RTM5OThCRjZBM0Y2OUJDMjdBNEQwODFGCis6MTA1QzQwMDAzM0VENTAxQUQyNkJBRUFDMTkxMzlGM0FEQkJDRjU0ODVBCis6MTA1QzUwMDA3RjVGQTM5RDdEQTIwREEwNTM3OEU0QkE0MEZBRDVFMTAxCis6MTA1QzYwMDA3ODczRTBCOEY5MzQ0RTFERUY1Q0E3NjE5RjRDQzBDMzU4Cis6MTA1QzcwMDA3Qjg5N0Y5Q0E5MUFCQjNCMDNDN0IxMzdBNTJDQUNFRjJFCis6MTA1QzgwMDBENTk3NDRGOEM3RjUzNzFBRDkyNzQwODdGRjY4NjQ1NDc5Cis6MTA1QzkwMDA5RTY5QjREMEZBRkZEOTk4NDBFNTFGMUIxNUFBM0ZEQkQ3Cis6MTA1Q0EwMDA5ODRFRTU0MEEzOTVFQTNGNkE5QzQzRTVCRENCMjI3MjNFCis6MTA1Q0IwMDA5MEZGRUIzQkU3QjE0RjhDMUNFRDM3RTE3RjRFOEZDRTcxCis6MTA1Q0MwMDAzMTEwMDBGN0NGMUI5QjhGRjYwQjNFRUE0RjFFQkJERDVBCis6MTA1Q0QwMDA4QkVEQjhDRkVGNzM3QTBFM0VDOERDMkRDOUM0OTcxQjhECis6MTA1Q0UwMDAyQzMxQTNFOTBGRTczM0UxRjkwNjIzRDgxMjBGRTBFOURECis6MTA1Q0YwMDA1ODhFNDRGMzBGNEVFMjcwQjM1NTQ3RjNEOTM1NkMwNzE1Cis6MTA1RDAwMDA4RTNGOTZBM0U3RjM0RkQ3NTQ2MkJCM0Q4NkNGREI5RjEwCis6MTA1RDEwMDAwNjMwRUNBNzY4Q0VCQzE3MTE0RkY2MzhBOENGRjJDM0Y3Cis6MTA1RDIwMDBGREI3RjM3NkZCNjQ1RUFGRUU1NzZEQUZCMzU5Njg1RUI3Cis6MTA1RDMwMDA5NUVFODMzQTU4M0Y4M0Y4OURFNjU3RkI3Rjk2QzdFNTdCCis6MTA1RDQwMDAzMEI0QkYzQjU1NTNFNDFFMDMxRjFBMUJFRjRGNzIwMUMzCis6MTA1RDUwMDBGODcwQTExQzI0MDdDODQ1OUQ0MjcyQTFGMkExQ0E3RjE4Cis6MTA1RDYwMDBCQjZEMUM4RkE5MDZDMUU3RTEyMDA3MzEyNDA3MzQyRTQzCis6MTA1RDcwMDAzMTFFRTQ0MDIyQkNEODE5OUM2N0FGMjRFNDI1NTQxRTkwCis6MTA1RDgwMDBBMDQ0M0RBRUNBODMyQTA3MkFCRjI3ODI5QzQ5MzFGRTIwCis6MTA1RDkwMDA3MzdDMkY4NDVGRDVGMjk0OTVEM0E1MzcyRUUyMTc0NEY4Cis6MTA1REEwMDBENzZFOUQwNTU0MjFGNDA3NDJDNjIwN0M0RjhFMURDNjM4Cis6MTA1REIwMDAxNTNDNkU2RTE4NEI3RkREQjRGRThENzg1MEY1QzEzODAyCis6MTA1REMwMDA3ODE4NzU3RTNEMkZCRkVERjk0OUJGQTFERTQ2QkUxRDk3Cis6MTA1REQwMDA0MzVGN0Q2NjU1RjUxNUU3NUI5RENERkVBOTE1Rjk1NTI5Cis6MTA1REUwMDAzMjY5QTUyODI4NEQ5QzZGNDJDRjdGMkM4N0NCOERDQTY2Cis6MTA1REYwMDAzRkJCNkQ4Q0RCNEIzQzY3Q0E2ODdEQTc5RTY3RTQ5QzBDCis6MTA1RTAwMDBBQjE4RTlCREQ0MzA1RTFGNEE1RkY1NUMwMTdBRUZDRjc1Cis6MTA1RTEwMDBCODJGMTU5RjhDNzk2QzE2OTg2NzRBQUREOUJBMjVEOUQ5Cis6MTA1RTIwMDBDRkJGQkU4OUQ3MkJEMDdFNkRCNjJBQjQ5RkU3MzUzMjVGCis6MTA1RTMwMDBEMTVGQjUyNzIzRjU5MkJDN0M3MTQ2OTA5RDYxMTZBMDc5Cis6MTA1RTQwMDBFM0QwNzEwM0M5Qjc1N0MzMkE1RjgxNzFBREI4RDQ5RDQwCis6MTA1RTUwMDBGRTczQ0YxNkY0MUI1RTMyNDNCMzBFRjZFNUZCOTNEOTA3Cis6MTA1RTYwMDA4NTc2Q0IzNzc5RThBQzA0RTM3RDNCNzRDQzQ1RkU4MzgzCis6MTA1RTcwMDBGRDQ3NTIxQzYzMEY4MjRENDFCQjc0MTVGNDFDNEI2M0VDCis6MTA1RTgwMDA0QzdFRUVDQkIzMTJFQ0JCRTIzOTk5MTkwMDc1M0U1MDUzCis6MTA1RTkwMDBEQjMyOENBQjdGM0FDMjZERTRFMzE4ODM3MUI1NjI1QzkwCis6MTA1RUEwMDBEMzhFQ0ZFRjQ1RkVCQTAwRkM2OTgwRjY0RjRDNzVEMzE4Cis6MTA1RUIwMDA1OTI2NjMwQjlFRDMxMTFFMkIyMkY0NkVBQzdGNjNDNzUxCis6MTA1RUMwMDA1M0E3OTYwMTdDQTE1RDUyRDBERjI4OTRDREQ0NUVGRDBFCis6MTA1RUQwMDA5MkVDQzY3NTZBQ0Q4NTk3MjRGMDczN0NFRENEQ0Y4NEE2Cis6MTA1RUUwMDA0MUJERjM4MDhFOTk2MDVDNjFCQjY0RjVDMkZDQUIzQzQ0Cis6MTA1RUYwMDAxMTg4MTk1NkIxNURGN0QxNDBCQTVGNkZGRTUwRDhCMTI1Cis6MTA1RjAwMDBDQUJEOTIxQjM4ODY1NUVFMEE2RUFGREUxQjBDRDczMjI3Cis6MTA1RjEwMDBBRDFGODZGOUIzNkMxMUIxMTdFRTAwNjAyNkIzREQ0NEY2Cis6MTA1RjIwMDBCQTZEOEY0MTYzMzVBMkI3NDNGOTBBQ0QzNkU5QzczNTVCCis6MTA1RjMwMDA1QzFGMzNGNjQ1RENEREMwOTdGMkYxMkY5MzNFMzI3M0UwCis6MTA1RjQwMDA3OEIxODBDRjAxRkNEOTk3MUNGRjJBREVFQTg0Q0VGRjBFCis6MTA1RjUwMDA2QzEyQ0JGMUMwMzlFQjhFOUIyQzJFMzg1ODVEOTc0Q0QwCis6MTA1RjYwMDBFN0YwNzlBMjA4Q0ZGNTYxMDM3NzkxOUMxRTk1MkRFOEEzCis6MTA1RjcwMDA4NzZERUU5NDVERDhFRUVDMzZFREQxQzAzOUVCM0EyNDY2Cis6MTA1RjgwMDBBNjQ1QjhEM0UwRTY3OEJBNTY4MUVEQUIzQTREMTYwNTkyCis6MTA1RjkwMDBEQjhGMUE5ODBDRTM3RDQwMzcxM0QyNzFFQTAwRDExRkQyCis6MTA1RkEwMDBFOUVBOTI2ODBCM0Y5MkYyRkNGNDk3OTE1RUIxN0U3QTM3Cis6MTA1RkIwMDAzNUVERTBGQkI5NzA4MEQzQTc1MDdFNTg0QkY0NkE5NjVDCis6MTA1RkMwMDA1ODdDMDA5RDdGQUY3OTc5ODQ1RUQ4NkZDMTczN0ZFODdDCis6MTA1RkQwMDA0MTNBNTdDMEZFMEMwQUQyNUQyNjNBNUYwMEZBRTBCQzk3Cis6MTA1RkUwMDBGQUUzOUYyNDBEOThGREY0OTY4MURFQkY1MkM3NDNGRjZDCis6MTA1RkYwMDA1NUI3QTA3NzI1NzM2RDQ0N0ZFRURCRDIzOTVDQzgzRjdGCis6MTA2MDAwMDBGOEJEMTc5RTQ3QkYzNzQyNkY0NTNFOEMxNUZFRjFDNDYxCis6MTA2MDEwMDA5QUZFOTNCMUIwNjA1OUNDMTVFNzZBQTg5RjkxRjAwQTM3Cis6MTA2MDIwMDA0QjA1M0Y0MThBNzYzQzY0ODM3MTY3MTdCRUZCMTg5MjJCCis6MTA2MDMwMDBBMzZGRDFDQjM2RTQ4QjI2REQ0MEVCQjM1MEUxOEEwRTYzCis6MTA2MDQwMDBCN0EyMEMwRTI2MkZERUY1MkFBQzkzMUY3MzNERTkxMDg0Cis6MTA2MDUwMDBDQUNCRUYwQzE2NjRBNzI2MjE4RkY4NjcwNEZBM0IxOTA4Cis6MTA2MDYwMDBDNzM3RDBGMTFDOUVERkQ5NkRGMDFBMDA4RkFDQkRDMEQwCis6MTA2MDcwMDAzRUUyMEY0QzQ3N0JFQ0QxQTM5RTJBRDAwRjk1QUQ0NjU0Cis6MTA2MDgwMDA3RjFDRTZDMzc1MjQ2MDIzOTRFQjlBRUVERjlGOTE2MDNBCis6MTA2MDkwMDA5Q0E0QzRCMjUyODQ4RDY2QUY4Q0YzQjRFOUFFOEU5Q0RFCis6MTA2MEEwMDAxQkU2OTEyQ0VGNTJCRjVEQjZFOUI0OEY5NEY4RUYyOTRGCis6MTA2MEIwMDBBODdGOUE5NjMyNDc1OENBRDdFOTc5NDY3QUZFMDU5RDU1Cis6MTA2MEMwMDBEMEVGRTNGOTdGRTNFODdCRDVFRjYzQUUyOUQxMTc2MDJBCis6MTA2MEQwMDA0RUM0MDU5NzFGQUU3NzU2Q0Q2MUUyNEZDODg1ODAyQjIxCis6MTA2MEUwMDBEN0JCMjI4REQwNzlENTFERDYwNDNDRkZBN0M4Njc5MUI4Cis6MTA2MEYwMDBDODdGRUY2ODI3QzBCRTZBNUIyNUEyNUIxREYyMEY5Q0JDCis6MTA2MTAwMDBFQjI0REEzN0E4MUZGNDA4M0RGMjUyNkZGRTg0NTgyQ0I2Cis6MTA2MTEwMDAyNTJCNDgyQUFCRUE5NkFENUU2OEFGRUFFNEZDMzQ4QUU4Cis6MTA2MTIwMDA2Rjg0RkVBODZFRTNGQTYzMTQxRkI1MDExQ0UwQTdENUM3Cis6MTA2MTMwMDAyMTVGQTkzMEQwRkJBODVGN0ZDQ0JBMDlGQjdENzEzNjA3Cis6MTA2MTQwMDAxM0Y0RTY3QUEyNDBDRTg4MUEwMDdFMTk2NjRBOTQyNTk2Cis6MTA2MTUwMDAyM0MwNkU0OURDREY1MkY1Q0E2RDNCNDBENTA3QUMzQjJFCis6MTA2MTYwMDBEMzZENjREQTgwNzVFRjM4NjAwOTgyNjc3OTEyODJGQTNDCis6MTA2MTcwMDA3RkE3NTMwOTZBQjc3OUQzODNEQUIzNEY1OTgzRTBEQzM5Cis6MTA2MTgwMDBERTM5NDFGRDY3OUZCMTA3QzE3NzBFMTQwNUY1RkZFRUJCCis6MTA2MTkwMDBDNTkyMjA3ODM4MDNDRTMzOTZERjIxQ0ExRjI2NDg0MUE2Cis6MTA2MUEwMDBGRDE3MkFBNkEwRjk4QkQzQTM4M0UwNjFCM0MwOEZGMEJCCis6MTA2MUIwMDAwMzU1RkZGNEEyOERGQjQxQTFBNThBREYxRjVCODNEN0E2Cis6MTA2MUMwMDA1MUUzRTI5RkNDMDk1RTZGQjEzRDc4QkQ2RjRBOTc3RDg4Cis6MTA2MUQwMDBFMEY3NkJDMUFGM0YwMEY2MTFDQkRGODJGRkFGMDVCRjI5Cis6MTA2MUUwMDBCRTBERkM3Rjg0RkYwNUZDN0YyQzNERTBGRjYzRkQyQjkzCis6MTA2MUYwMDBFMEZGMjNEQzBFRkUzRkMyNDcyMDVFNDFCOEIzQjE4ODBBCis6MTA2MjAwMDBDQUEzOEQyNTU0N0YyQkZDRjU4ODc1NEY4OTc1NEY4QjVDCis6MTA2MjEwMDA3NUZGNUEzQ0E5QTVCMzY4ODZFNjJCOTBEMzc5MzE5N0QwCis6MTA2MjIwMDBGNEE4ODdFRDZCMDYwQTMxMEYzMEY0OTZDQzVBNTA0MDMzCis6MTA2MjMwMDAxQ0VFNTM4REIxNjg4RjI2MzBGNDVCNThDOUQwREIxQTQxCis6MTA2MjQwMDA4NDNCNTIyQzVCMTRCNDQzRkZGRTFFQjZGQkRBNjUwNTlCCis6MTA2MjUwMDBGNUY5ODlDRThGMjM3MTlFQUI1RjgxMUM2NkUzQjg4RjAxCis6MTA2MjYwMDAyMzMxM0VBRUJEQ0UwOERFMDJFRDBBQzAwQjBGODE2MkM3Cis6MTA2MjcwMDAyMDdGMDZGNDFBRjY0RjU1NjFCNzlFNDE1OUQyNzY0OEYxCis6MTA2MjgwMDA4RkY0QTgzOTcwODhEQURGRjJFODgyREIwRjM0MDdCNUMzCis6MTA2MjkwMDA1QkIwM0Y5NDM1NUEzN0M1Rjc5NzNCRDVGOUJDRDRCRkFGCis6MTA2MkEwMDAzNjU1QjJBMzVGN0NGOUMwQkZDNzU1NjBCRkI2RjdFM0YwCis6MTA2MkIwMDA1NjdFMERCRTNGM0JGMjcyMDZFQTc1MjdEODYxQUZEOTE0Cis6MTA2MkMwMDAzRjhGQjM0QjI3NjBCRUVGREFENDQzODUzMTY4MDhEQURECis6MTA2MkQwMDAyNDM2MDM4QUFCNkMyQjVCMDdGQUFFQTZCM0I1MTZGNTcyCis6MTA2MkUwMDA1MDRERkEzMjFENEIyNjdEMjRGMjBEQTA2REQxNUZDMkI4Cis6MTA2MkYwMDBFMDFFRjA3N0Q1RjM3OUU0NEE5OEY3MzVDRkM5QkJFQ0M3Cis6MTA2MzAwMDA0OEJGRUUzNzIyNzFEREMxNzYzOTI4OUU1OTk0QzVGRDBDCis6MTA2MzEwMDBENjQ1NTk3QUEyRTNENUY2MzcyMjE1NjhERkVDNzk4M0EyCis6MTA2MzIwMDBFMzVCRUJBNTczOUYxMEYwMjA5NDg0RTc0RTk5Q0U1RDVDCis6MTA2MzMwMDBGNTk1ODZGMEFGQ0U3NzRGOTY0Q0YzMkRFQzlDMTE4MUZFCis6MTA2MzQwMDBFN0VBRjNGMEY1OTY2NzI5MzRGRkMyRDQxNUU1QjhGRjA0Cis6MTA2MzUwMDBEMzA5NEI3MzY1RjJGMzQwMzFBMzVFQkRCREI4MTVGM0FECis6MTA2MzYwMDAwMzM1MUVEOTNFNTZCQ0I1NUFDQ0RCQTNFMzdDRjg1NkE4Cis6MTA2MzcwMDBFQUUxOUVDOUMwMUZBNzhCMjZEODQ4RTc4QjdFNTU1OUY2Cis6MTA2MzgwMDBEQzFGMkZENDNCNTJEMTJFRjQ5OTk1MDhFNEUzNDc4QkMwCis6MTA2MzkwMDA1MjIyOTBBRTI3QjBDNEZBQTIzRDdBMDc5NEQ1RUQ3Qzg0Cis6MTA2M0EwMDBCRDNFNEI2RjI0RjI1QjVGN0JCNjhDN0U4QjNBREY0QTNGCis6MTA2M0IwMDBCMUVFMDg1RjhGRDBDRDQ1NzRBQTc0Mzc5QjcxMUUzRjM0Cis6MTA2M0MwMDBGRDc4RkRGMjJDOUUyRjNBRUQ3RUZGNUVGNDUzRkFEMjVCCis6MTA2M0QwMDBDM0FENDg5NzFFM0RBM0Y4QjYwNkU4OEFGNkEwQUYzQkNBCis6MTA2M0UwMDBCMTE5RjFBMEFFQjczQzRCQzRDOUU5MUFBMkFCQUY1Mzg3Cis6MTA2M0YwMDAyN0ZBMkQ2QjY1NDFGRDc4RkM3Qzc1NkZGMDdFMkNFRUU1Cis6MTA2NDAwMDA3M0JGNTk4Njc2RTkwNUYwQUJBMUJBNTZENzEwODdFNzc2Cis6MTA2NDEwMDBGRjc0NTdGMEZFMkEwNTlFNkI3NURFQjhCODAwN0VBRDlFCis6MTA2NDIwMDBFRDFBOTExNzMzRjE3Nzk3MkExRjBBRDE1M0E1NjM1RkFECis6MTA2NDMwMDAzQUY3REJGQTEyMEM2RThDMTc2QjBGQjUxMjVGOEZDRTJBCis6MTA2NDQwMDBFRkY0MjZBMzlGOUZGODkwOTFGMjg2Qjc4QTY3NTUzRjk1Cis6MTA2NDUwMDAyMDIwRUU2MTE4QzdFOThBNTI3MjM1RDNGREY2N0VEMDRFCis6MTA2NDYwMDA2NjdGM0U2QjIyQzY0MzI1MTRFRkY1QjFBMTBBMzRGRUM4Cis6MTA2NDcwMDA0RUY0ODNBMzUwRUZGRUYxMTk1Qzc3QjgxREZDM0Q1ODM0Cis6MTA2NDgwMDBENzY5RUM1Qzc0MUVGQ0FDNjEyQjA4MEFFQzdCNzg5NzM2Cis6MTA2NDkwMDBDRTJERTIxMzMzRkFBNzE1QzIzRkZENTQ3MUU0Qzk2MDUzCis6MTA2NEEwMDA1RjlERUIzNTc0QkVEQThDMzBFRUQ3MEEzREY5RDlBMTg5Cis6MTA2NEIwMDBFNDlGMjBCRkQ2OUU5MjJENDZGNDQzMjE2RTIxQjg4REQ1Cis6MTA2NEMwMDBGQjA1NzU5RUU0N0Y5QThCRkU3NjlCOEVGQzAwRDVFRkQ0Cis6MTA2NEQwMDA3MDBBQkZFMzgyRjA2NzJGQUMxRkQyOTNCRjdBNUM2MjcxCis6MTA2NEUwMDA0RkMxM0UyQTNCQjdGNTI0NDJCQjMzNjMxMUY5QUI0RTkzCis6MTA2NEYwMDBCOThERjI4RkFCNzYwNEZCMDU1NUVFNjBCOEU2NDAzMEZGCis6MTA2NTAwMDBFQzBDRjExQkQ0QjhFRDQ0RDY4OEZGMzAxM0UzOEYwMkI2Cis6MTA2NTEwMDA3OTZFM0NDQUMxMDc4MjlFNkEzQ0IyNzY5NjM1MUVFNTBBCis6MTA2NTIwMDA3REIzNTY1OUE0RTYwMzEwNEZGNUM3MEY1N0UxN0VERDQyCis6MTA2NTMwMDBCNTYxNTY4QTBCRDYxRDI1N0MwRTdFQzFFMzhFQzEwNDQzCis6MTA2NTQwMDBDNkZEMjNDNkYxM0FEOEM5RjlCQjVFMjdGMTM4MDNEODk2Cis6MTA2NTUwMDA5NUU2MzM0QUVFRjVEMDM0RTgxQThFMjRCREM0NTgxMUJFCis6MTA2NTYwMDBDQUMzOUFBNTNDOEVCNDYzQ0UxNUNBMTc4NDVFMEFCNTE5Cis6MTA2NTcwMDA5N0RGRDcwRUM4RDEwMUZBRTE3QzE2RjczN0YzRjVDQ0Q3Cis6MTA2NTgwMDA4MTc2NkE2RDg0OTVFQ0Q2MzQyM0Y3QjcwQjFFRjZEODY2Cis6MTA2NTkwMDA5MDBGQTY0MTdDNkMwOEM4Njc0RjMzMEY0OUQ4NkZFRjQ2Cis6MTA2NUEwMDAyMzEwRTI2NkZBRTNGQkM1NUE4QjJFM0FDMEVFMzFCNkYxCis6MTA2NUIwMDA5RUZBQUJGMzgzMjZFMUUzNkYzNUJGMDVFNjM3RkJFN0QxCis6MTA2NUMwMDAwNzdDNDcyMUJFM0ZDRkIxOTIzRDRFNUFDQzU4MkZDOUQwCis6MTA2NUQwMDA2MzAzQzlBMzdBOUVBQkMwNjc5ODhGQzU5QzA5RDJBREVGCis6MTA2NUUwMDA3NkQ3RUI5NDA3NzZCMjVFOEE0NzBBMjNGOTNFMEE3MUEyCis6MTA2NUYwMDAzRjA4ODdGMTkyNjU3MzdDRDlCM0I5RkU1ODlCMUQ2QzM3Cis6MTA2NjAwMDA5N0JCQjJFRDUyMzY5NDNCQjIxREJBNkNEMjY3MTZFMjFDCis6MTA2NjEwMDBDQkI1ODI1N0MwNEY4OTFGMTg0M0VGQUU3OTk3Qzc1NTQ2Cis6MTA2NjIwMDA5RjgzMUNBMDlDREZERjIwMjlBOTQxN0UxMEU3RUY3QTIxCis6MTA2NjMwMDA1RUM1QUUzMDRGRkY1Q0M0ODNDQkRFOUIxRTg3NzExNEZBCis6MTA2NjQwMDA5N0FCRTVFQjRDNEE2QTAwOUZENjIzOUYwMzVFMkEyRDQ5Cis6MTA2NjUwMDA1NTNGNDJCRkRCQjEyRTRFQzE3QzdGM0RGMkZENzQ0NEZECis6MTA2NjYwMDAyM0U3RUI1OEY4ODdGMUM1MjgzRUY3MDRDM0YwQjcwQkQyCis6MTA2NjcwMDBGOUFCOEUxOUFDNjg0N0VBM0I0M0RCQUQ1QUNDRUJBNENGCis6MTA2NjgwMDA2NDgzMUM4NEZCRTUyMDQ5RjA2NUIzNDM3MkEzREU2RjhECis6MTA2NjkwMDBCRUExRTU3OUFDNTI4OUYyNTZGNzQwMjVGMjI1RkQ2MTlECis6MTA2NkEwMDBCRkNBNzk2RTlDRkYxRTAwMzExRTYyREI2MzQ5NkVBODczCis6MTA2NkIwMDAxMUY0QzhERjhCRjNERUEzRjVCRThFNzI3QzUyRTc0OTdFCis6MTA2NkMwMDBDNjdDQ0E0OUE3RDE4QUYzMkY2NUUwNzA4MDdFMjk2NTEwCis6MTA2NkQwMDBCRDU0RjY4N0Q3NzU3ODY5NzJENzU0OEM5QjNGNzAxODc0Cis6MTA2NkUwMDAyODhGRDNCQ0ExMjUwMkY1NjkyNkRCNjBCOTkwOEVDNjQwCis6MTA2NkYwMDA5RDFEQjg5OTNEQkU1RjAxOENDNDJFQTg3NEExQkNEMDZECis6MTA2NzAwMDA1NjExODc3MkJBRUVDOEI2Q0ZDQkNFMUQ3RjdDQ0QxRjk3Cis6MTA2NzEwMDAzQUVFQzI5MEEyRTYxN0FERkE3OENFMzZCREU5Nzk3RUEwCis6MTA2NzIwMDBGQUQ1MzM0RjNBRUU1N0E1RDcwOEZENjBDRjUzMDAwRjg3Cis6MTA2NzMwMDA0QkQ4NTAxRUM2MzUyQUREOENGMDZGMkNCQUE5Rjg0QzA4Cis6MTA2NzQwMDBEMjBERkQxNDUxMDY3Njg5RjQ0QjI4M0Q1NUZDRDZCMTg3Cis6MTA2NzUwMDAwNjFEQ0Y3MzM1QkNCNzE0RkFERkI3NDFBM0EwN0YzODRECis6MTA2NzYwMDA4QUJFQjdBMDgzRDdDNDlCQkMxMTEyQzU5QkUzRDE0NTk5Cis6MTA2NzcwMDBBNTg3NEE5RjMzRDE3Q0RDOTlGQjY1Q0FEM0ZENUZEM0UzCis6MTA2NzgwMDBBNTJCREJGMUQwRDdDOTYzQThGQzhEMjc2RkNCRDc4NUFDCis6MTA2NzkwMDBDODY1ODhGQ0E5RjQ3MkFDOEIyNDM5NTNFOTU4QUIzMDM2Cis6MTA2N0EwMDA4QTVCNkJCQjIzQUM2RUU2QTc5RjE5RkUyMUZERjA5RUIyCis6MTA2N0IwMDA4MkYyMzFFRDEyREIyOTdEMTMzOTFDQTA3QjhENTBGQTVBCis6MTA2N0MwMDAwMDZGRDg1MUFGM0Y5NTFENkM4NzU0QkE4REE3N0Y1NDg5Cis6MTA2N0QwMDBGREY1MjFGMzlFQjQ0ODc0M0ZDMEU1RjM5NzA2MzdERTFDCis6MTA2N0UwMDAyRkFBRjcwM0VBM0RDMDYxQTFGNzQyQ0IwRkMxRUZDMDZBCis6MTA2N0YwMDA3Qjk3MkRFOTdEMTNEMTVGRUJEN0FCRjNGMEZCQzcwRjkwCis6MTA2ODAwMDBEN0Y3NEU1RDBERTMzRjlDQzdDQjdFRjREMzAyNjA3QjkwCis6MTA2ODEwMDAxOENGQzM3RDM4QzlFMDQyQkM3RDI4Q0Q5QzhGNzZGQzYzCis6MTA2ODIwMDA0M0U5QTFCQjM4MUNBRjU3MTA1RTFBM0ZERjAyNzBCRkFGCis6MTA2ODMwMDA0RUNEREIzRDJBRjRCMDlCRUY2M0U5RUM3Q0VBMjdCMTU3Cis6MTA2ODQwMDAzNzExMUY4QUM0NEE2ODFENDk4QTI5ODJGRDdDRjg4QjRBCis6MTA2ODUwMDAxOTU5NERDQzdGRkU5NjZDRUVDRkJBNTVGREFFRTZCMTIwCis6MTA2ODYwMDBGRjQxQTIzQ0Y2NzIzMDAxMTZDQ0I3Q0Y3RkI2NjgzQTMyCis6MTA2ODcwMDBENDlGRkRDNzE0MUJEREZGQUQwOTVFMUZFRDY4MzJFNTM3Cis6MTA2ODgwMDAwN0I3RDEzQ0RGRkY2QTQ4QjcyMkMzQkZBRjExRkI5NzAwCis6MTA2ODkwMDA3RjhERDc5N0NGQTA3OEEyNTJEMEQwMUUzMzkzQzdCMUE3Cis6MTA2OEEwMDBFRTk0MjhCNDQ3QUE3RDFBM0U3NUQ4MUM5OEJGQkMwNDQ0Cis6MTA2OEIwMDBGNjhCRTkwM0UwOTk0RjI2MDVEQUI3RDdGN0ZEM0EwREQ1Cis6MTA2OEMwMDBFN0E5RDRCQjMyQUQxODRGMzYzRjlGODQ3RTQwRTVCRTZBCis6MTA2OEQwMDBDN0QzQzgyRkREQjczOTBERTM4QkNBOTY1RkE3RDkwOTk3Cis6MTA2OEUwMDAwRTc3NTA3Q0EzRTVFN0JFNzJGMENFM0Q1QjAyRkNFMDg0Cis6MTA2OEYwMDBFQTVDOTlGNjVGNkE3Q0JEMDBGREQzNDU3NzdDRjYxOEFCCis6MTA2OTAwMDBFNkMzNjdGQ0EzNDQ3OUIxRkI1OUVGNjM2ODM3Q0JEMjg4Cis6MTA2OTEwMDBCOTFDQjFFRDQ2RDJFQjMwMUZERDNCQjZDRUZDRjE1RUNCCis6MTA2OTIwMDBENEU3QTdEMzNGRDY5NTQzQkZFQkQ5NUFDMjRGMTk3M0NCCis6MTA2OTMwMDAzRjExOEZGOUIwNEQxMkU1QzNGQ0ZEQTdEMjNERTY4QUE5Cis6MTA2OTQwMDAwRDkyM0UyMTE2RUQ2MUI0NEQ1NjcwNUMzNEVERTM4MTNECis6MTA2OTUwMDA0REI2MUVBQzJGN0I5OEQ3MkYzMkI4REJGQjcwOUU2N0VECis6MTA2OTYwMDBGNUQ2NTYwNTI3MkE5OTVFMTI3MDJGN0MzRDlCQzc1RDkwCis6MTA2OTcwMDBDQjlGOTBDODFGNTdENzk5RjE0QzVDNzNFMDM5QUYwQjkwCis6MTA2OTgwMDBGQUIzMUJGRjQ2RkFFRDI3ODIyRTNGN0FGOEZEMzcxMzQ0Cis6MTA2OTkwMDAxNEJDNEY3MkRDNDQzREYyREVEMzE3NTI1MTdGRTVDNzgxCis6MTA2OUEwMDA1Q0NBNDAzRTlGQTE3N0VDQUNDMjczQjcxODI4N0Y5OEIxCis6MTA2OUIwMDA5Mzk5MjhDNzQzRkZBQzlGQ0Y3QjBBQ0JFNTBGQUZEODk1Cis6MTA2OUMwMDA1OTg1NzlEMDFENDY4QUEzRDRGREFEOTExNDBEQzY5QjdGCis6MTA2OUQwMDA2RjM0RkZFQzAxQzREQkM1QTc4REU0NDdBRjY5QkUyRDYyCis6MTA2OUUwMDA5RThEMjFBNzZBQjkxRkU4QUZBNDMxRjY1MkEzOTFDQUMwCis6MTA2OUYwMDA5NzFCMkQ0QzgxMjMxRTZDNEMyMEY4NUYxQjE1MkFEOTQ4Cis6MTA2QTAwMDAxMkNFNUY2QjQ0QkMzQURFN0NEOTEwRUYyQkEwQUY3Mjg0Cis6MTA2QTEwMDAzNkMxN0NFMDZGREE0Q0Y2QzkzOTgwQUYxOUI3M0I1QjAxCis6MTA2QTIwMDAzNjhCNzNDRDgwRjEzNjU3RjIwMkM0NDNDRUU2RDUzREE2Cis6MTA2QTMwMDBFODhBRUE3Mzc4N0NGNDc2REZBNjI0RjJBMzFGM0VCN0Q3Cis6MTA2QTQwMDBCQjBBREExN0U3OTRBNEUwNzhFM0FFNkIxNEU3QkZEMTkyCis6MTA2QTUwMDBGNTc4MTlFNUY1NUIwQ0ZDN0NFMkRDMTc5RjRFOEJERkNCCis6MTA2QTYwMDA4OTc5RDdCNzc0MTQ3RkQ3RUYzQUI3N0IzMzk0MkI5RkNDCis6MTA2QTcwMDA1OEFEMEZFNEY3NkY3QURFNjRCMTlGNUJDOUQ1Nzg3OEMzCis6MTA2QTgwMDBGOEY2NzJGNUVCMjQ5MjlGMTY5MEFCOENCRjVFQUVFQURGCis6MTA2QTkwMDAxRjVFNEZGODdCMjhBNzY0NTEwRUVDRkZBMkNFOTU4NEIxCis6MTA2QUEwMDBGMjc0NzFFNkY3ODhDRjVEQzcyNUMyQkZBQUM3RDVGMURBCis6MTA2QUIwMDA0NUUyQkMzNTFBQ0YxM0U0MEYwQTNERkUyNTQ0N0U4ODFCCis6MTA2QUMwMDBERkQ3QkIzRTRENDM3RkY4Q0JDRUE1NUY3QkVFMjM4RDVBCis6MTA2QUQwMDA3ODgzOEU3OTJEMjM5NUExRUQ3OTdBNDc4QTE1Q0U5NzAzCis6MTA2QUUwMDBBN0UxN0VGMDI4RkY1NURDQ0ZBOUY3RURGODg3NzlFMTIzCis6MTA2QUYwMDA1QTYxM0Y5REIwQjFBODE4QjQ3RjkyMzcyQzEzRUYzOTdCCis6MTA2QjAwMDA3RTc4NDk4QkYxMTdDNDc1MUYwNUZCOTdFQ0EzMDAzQkZBCis6MTA2QjEwMDAzRURFN0U2RjU1RDZFMTNDNUFCRkRFOUQ3RDQ2QzNCQzRFCis6MTA2QjIwMDAwMTc2RkJDRTgxMzBFNjBENTg3NzI0RUUzMDIyNEY0M0JDCis6MTA2QjMwMDAxQ0RBMzU4OUY0MDJEMjBERUY2NTdDNUQzMzVCMTBCRTQzCis6MTA2QjQwMDBBNEU3NzRGNDFEODFGODhBRTc1NTk4OUNFNzNGRTdBNTEwCis6MTA2QjUwMDBBRTJCOTlBODY3NDNDRjVCNzdGNDBBRjE0NzZERTdFMzYzCis6MTA2QjYwMDBENzI0M0FGRkMyNEJEQUNDNUI5RkZGRjU3RDU3MzI5MUI5Cis6MTA2QjcwMDA3RTk3NzQwMzc5MTg0N0Y5RjQwMzk5NDg4N0JBNjM1Q0UwCis6MTA2QjgwMDA5RjdGNUIzQ0E4RjU1NTlCRjQzQ0JGMjc1OTI4MUUyQ0UyCis6MTA2QjkwMDA5MEFGNTIxQ0VGM0JDNUUzRjhCQUFFM0RBNDRGODdCQkE0Cis6MTA2QkEwMDA3OTNFQTU1RUQzNUIxODhGRjk4Nzg2NzMzREE4Q0Y4NkEzCis6MTA2QkIwMDAxMzc4N0MwNUYzREIxMTZGNzM1Mzg0MURENDBFMjUyREUwCis6MTA2QkMwMDAwNkJERjZDQTA4M0ZGMEI4RUUyMkNBQUYxRUU3RjFENDAwCis6MTA2QkQwMDBEMjdCQTRDQzcwODY3RUM1NjU5NDY3QTgyRjVCOTdCQ0RBCis6MTA2QkUwMDAxMUY5RkNBMjdCMjI2NjgyRDhEQjk5RkY1MzQ3RjlCN0UzCis6MTA2QkYwMDBEN0MyMkQzMkY5QUQ1MDFCNDBCRjkxNzNCODY1RkU3MEZFCis6MTA2QzAwMDA4NkE5NzE3QTM4QjMwN0Y0QUJENzJCM0ZBMUY4RjgzNEQzCis6MTA2QzEwMDBCRjI3QUJCRjlEQ0IxMzNCQ0FFNUM5QjlFMTc1N0Q0MjI4Cis6MTA2QzIwMDBDMDdDQkI1MTlFNjhERkRDN0Y1Q0Y0REFGRjkwNUM3NjUxCis6MTA2QzMwMDBEQkVDREQyODk3RTFBODBCNzFCRTg0MjhCNzI0ODk3RUEwCis6MTA2QzQwMDA3OUZFN0I0MDczQjc4OEM3OEI2NDZBQUZFRjk0RDkyNDExCis6MTA2QzUwMDAxQzkzMTA0MUY3RjU0NTZDQUIxNkZEREQ0NUNDMzM5NzIxCis6MTA2QzYwMDBCRjkzMTlGOENENzdBMUJERjgzNTM5MUJERjYzODFGRkRDCis6MTA2QzcwMDA0Q0Y3Qzc4NTYxOEVENDM1RTgxRjY5MjQ4MTU3NEZDRTA0Cis6MTA2QzgwMDBFMjQwN0IyNkRFNzlDQzk1MjVCMjYzNDM5M0MyQzk0RjlGCis6MTA2QzkwMDA1OUI4QzQ1OThBRkIxREQxMEY1QURFMEZFNjIxM0Y4QjJDCis6MTA2Q0EwMDBCOTg3MzJGMTNFOTM3OTg3MzJGMTlFNTNFRDc3RUY2QkRFCis6MTA2Q0IwMDBFMTBENjQxNzk5MjdFN0RFODA3NUMyNzJCOURERkMxQzBGCis6MTA2Q0MwMDBFRjlGNDE5RkQ0OEJGQkNGMDJGOUM2MzMxODQ3QUQzOUY0Cis6MTA2Q0QwMDBDRUVGMDlGQjM1QzkxRkUwN0IyRDE3RTAxOUU5N0EwNUQ2Cis6MTA2Q0UwMDBFODZBNDdGQkUzNjA3NjNCQ0FDRkFDODk2RTk0OUZGQUIzCis6MTA2Q0YwMDA4MzEyQzM3NzZCNzU1RDg2MTZDQ0VCRDRFOTA2RTI5MDAwCis6MTA2RDAwMDA5RjM3NzdGRTQxOEZGQzVDREZGMUJFNUU5OTg1RTM3OUFBCis6MTA2RDEwMDAxRTA4RkM3NTBERTJCNzVFRDgyRjY3RTc2RDFGNjBERUI5Cis6MTA2RDIwMDBDRDc5OEE1QjUxQTdGNjdEOEFFQjZCREEwRjUxRkM1RTU5Cis6MTA2RDMwMDBDQkJDMTRCRkQ3QjYwNUYzQ0I3MDAyQ0ZCMzg3Q0E0NzFECis6MTA2RDQwMDA1OEFFNDJGQTUyODUxN0VFRTA3MjcxQUZDQzFBMjhERUM3Cis6MTA2RDUwMDAxNzc5RDM4NTA5RjFFNDhGRjhDNzA5M0Y1MUJFRjIxOEJFCis6MTA2RDYwMDBGQTJGODNEMzI1QUIwNDUzMEQ4NkI5MzZBMDVGRTQ0QUNFCis6MTA2RDcwMDBFM0ZFQ0NFMEVGNUVDRUE5MjBCREUyQ0VGOTI5QkU4QkNBCis6MTA2RDgwMDAxMUZFRUVDMjREREJCNDcyQzA3RTE2NzZGMzNDRTE2MEJDCis6MTA2RDkwMDAxOEFCM0M0MkY0NzY0QzQxM0E0NDY2OTU5ODczNzM0OTdCCis6MTA2REEwMDBBRTMyRTk5RDhGODZFNzM1NDNDRkYxQTRDODY3OUVDNjEyCis6MTA2REIwMDAzQzRGODY3RkRGQzU4OTg5NUM4RjMxMzdGMTRGOEY4NkU1Cis6MTA2REMwMDBBRkFGQkU3QjUxQzdBRkM4OTU4MkUyQTUzNTEyQ0Y0RjlBCis6MTA2REQwMDA4REE3NTdGMDFFQTU1Q0RDQTM5NDhCN0I5NDcyNzE4RkZBCis6MTA2REUwMDA1MjJFRUU1MUNBQzUzRDRBQjlCODQ3MjkxN0Y3MjhFNUQyCis6MTA2REYwMDBFMjFFQTU1Q0RDQTM5NDhCN0IxNEFDM0Y4RDVCQTVGN0Y2Cis6MTA2RTAwMDA3MENGRUY0NEZCRDk4MzMyMzZEOTBGRjdDNzg0QzA5M0Q0Cis6MTA2RTEwMDA4M0ZCRjdDNzQ4QzFGMDY0ODlGQUU3RTQzRUJGRDM5NTI2Cis6MTA2RTIwMDA4MTc5NEM4QjkwNkYyNTAyRkRBRjhCMjY5RTVGRUE4QTlECis6MTA2RTMwMDA3MEZDMURFMkI5N0M2MUQzM0VGRTFFRDE0RUVGNTlGMkNCCis6MTA2RTQwMDA2Mzk2OTZBMjdDMERDNzFBMThFQUExODY1Q0M3QkM1QzQzCis6MTA2RTUwMDBBMEZCQTk1MzBCNTJCNzkxN0UzNDU5RjE5RUJCRkZCRUU0Cis6MTA2RTYwMDAzQkEyMjgyRkY3OTZDQzY0NTg3MjVFN0FGNjg2MUM4MDc3Cis6MTA2RTcwMDBFNzk5MjVFMjVCRDAxM0RGMjk1MUUzNDk5ODY3NDEzNzUxCis6MTA2RTgwMDBCRkNGMjg5MDZCQ0I3MUZFMzU5MzRDRDlBODc3ODdCMkQyCis6MTA2RTkwMDAxQ0M1QjkwMUZDNTgzODc5NTUyQUZBNDEzRDNBRTUwMzM5Cis6MTA2RUEwMDBDQ0E3QkFERUQ1MzE4Q0EzRDRGQzlCREFBRjI3NkJERTNFCis6MTA2RUIwMDA1MjFDQjczMDNENjU0MzE2RUExQjEwMkVENDZGNzYzRDQ5Cis6MTA2RUMwMDA2QkMzN0REOTM1RTE1MjEzRTkyQjQ1OEJGMkJGNTRGMEVBCis6MTA2RUQwMDBFRjdDODVGQkMzNUVCREEyOERDMUI4M0Q2QzVFQUM0QjQzCis6MTA2RUUwMDBFMUY3NTVFNUUyQkVBQTVDREM1NzIxN0RERUMxQkMxOUE1Cis6MTA2RUYwMDA5NEVGNDEzRDk2QkQ1MDhGNjVFODdCQUU2NzcyNEE1NjcwCis6MTA2RjAwMDBFNjUyQkMzRDk0MTRGODFFNkMxMUNBMTVENzMzNDlDODFCCis6MTA2RjEwMDBDRjNCMDVERjI2MDgzREQzOTM1RDUyNERGQ0NFM0MzNDdDCis6MTA2RjIwMDA0RjhEQzhCRjVERDEwNURGRTNBOUUzRkNFMzE5OTU3Nzc5Cis6MTA2RjMwMDA3Rjg3RUI2NzE2QTVFN0VGNURBNzMwMTdCRUE3QkRGQjAwCis6MTA2RjQwMDBENTQ5OTQ0RkYyQjkzNTJFNUQxNEMwMjBFM0E4QkZEOEJGCis6MTA2RjUwMDBBQjNDQkU2NTA5NUM1RUVFM0UxQzRGRkQ5QTQ0MUVENDAwCis6MTA2RjYwMDAxOUQzOUIxNjgzNzY1N0M4OTUwQTFGRjkwQjdGRTdFMzYxCis6MTA2RjcwMDBDQzAyMThDQTYzMTIzRjlGRjNFRURFQjQ2ODgwN0Q5MkE0Cis6MTA2RjgwMDA0OTgzRjk3MTY3MEI2RkVGMTM3MkU3OUMyRUU2MTNFN0U1Cis6MTA2RjkwMDA2MTQ2NEYxMkQyNjNGMEY4QUI0OTBGMDBCQ0M1RUNBREFGCis6MTA2RkEwMDBFMEZBREU5QjQ2N0E5QTc5RDNGMEJERDAxNUM5NzMxNjA0Cis6MTA2RkIwMDBERkRCQUUzQTkyQjUwQ0RGRDc1RUQxNzk3NjIzNUM3MzE2Cis6MTA2RkMwMDAyNDg3QzNEMkExQjM5NkMwRjY4OTlFMjQ3QzhGQkJFQUU2Cis6MTA2RkQwMDA0OEY2MzI3QzlGN0I2NUUyQTFEREQxRDYwMDU4RjdDQTI2Cis6MTA2RkUwMDA1OTZDRDczRjlBQjMyQzFGRTA2MjgzRkI1NDIzRjJDRDM4Cis6MTA2RkYwMDBCRjcyRkUzMjFERUNCODgwRjhBOUU5RTJGRUZBRkM4MzBDCis6MTA3MDAwMDAxRDU3NUY0MTdCREMxMTQxRjdGNTA3NzI5Mzg5REU0RDE3Cis6MTA3MDEwMDA1REZCOUY0MDdFRjMxREQyOTExQzZDNjlGQkMzRUU1RjRDCis6MTA3MDIwMDA1MTNGMDNBNTUxOEEwRDlFMUM0Q0I5MzRFNEZEQzc3RDI4Cis6MTA3MDMwMDBCODZFNzFCOEU3MEI4NEQ3RTdGRDgwRjY1MTNDODFDQjgxCis6MTA3MDQwMDBGM0M2QkNGOUNCNTAzRTdEMUQwNzdGODlGMjU3MUMwNTY2Cis6MTA3MDUwMDA4RTJDRUVFNzY1MTNEMUE3RkFGMENDN0NDQzAzRjgyMjk2Cis6MTA3MDYwMDA3QUNCNzBGRUJBREYxQUFDQzhBN0Q1ODdFM0U3NjM1RUI4Cis6MTA3MDcwMDBBMDIzOTdFN0E3QUI2RURGOUE4NEY2NTU3M0Y0QTU3RDNFCis6MTA3MDgwMDBCRkMyM0NFNTZGNEQ3NDNGNTMxRkMzRkRCQjZBQjkzOUE2Cis6MTA3MDkwMDA2RjM1RDE2RkNGM0U3QzM3RTI3QkM5NDRGN0E0NTUzMEMyCis6MTA3MEEwMDAwN0FFNTdCNTZGMDZFNUQ1OEZGREY5RTMzMkE0NDM4MUVFCis6MTA3MEIwMDBCQzZCMUZENjdGQjFEN0E0NDEzQ0Y0RTlFRDUxREY0MzRGCis6MTA3MEMwMDAzOUVDRDM1MTlDNTkyNUUwQUFGRTA5N0MzRkUxMDM4NUE4Cis6MTA3MEQwMDA0NEJGRDhBRDQ5Njg1RkFCMjdGQ0MzNURCOEVGNjI3OUE4Cis6MTA3MEUwMDBFQjZFOEM3M0Q4N0UwM0REMTU1QzdBMDlGMDA2RTMyRTE3Cis6MTA3MEYwMDBCNUVBRTg5NUFBRUZBNTA4MkRGMkNCMTU2OTZCRDk0RTM0Cis6MTA3MTAwMDA5Q0JGOTVGN0JCNjJEQTRBRjg3NEI1REVDNjcwM0RFOEZECis6MTA3MTEwMDBDNzUwNUY1RDkxQjYwNUQ1NUY2QUREOUY4OTcxRThFNTZGCis6MTA3MTIwMDBERjE2NTMzQ0FBRjJGOTQ4OUNCMUQ3MTA2NDBGNDkxM0ZCCis6MTA3MTMwMDBDNDg5RjcxMjY0NjY1RENDMEM3NkI2NEE4MDk3OEYzQ0EyCis6MTA3MTQwMDBFN0RCQzlGQ0UzMkZCN0U5QkM3QUMwNTE5NTgxNkRDMDdDCis6MTA3MTUwMDBGN0MxQUEzQzU0MjdGRUIwMDhDRjU3QUQ2OTRFNDM3RjE0Cis6MTA3MTYwMDBBNTJBN0JBMDBDRTVFMjkyODkxOTEzQTBERkRCQzI1RUExCis6MTA3MTcwMDA1NUI3QUY1RjhDN0VFRjc4RkJGOThCQjAzRjVGMEEzOTc0Cis6MTA3MTgwMDBGQ0IyRDNFNDBFQkMxRjBDMkRGRkQ4Qzg5NDc3MDJERUVFCis6MTA3MTkwMDAwRERGREY2MDIwREY1RDlERUY2REJEQTcxNkUzQjNCQUE1Cis6MTA3MUEwMDAxOEFFM0ZDRTQyRkYzNkQwNjMzNzg0REU1QkJFMkVCOENBCis6MTA3MUIwMDBGRkI1REMxOEZFMkU1NTNGOTA4Njc2NEY5RERGOTdBQkNFCis6MTA3MUMwMDBFQUI1ODEzNEQ0NTdBMUUzOEE2NUExNkY1RTk2NDhERkEyCis6MTA3MUQwMDA1NEI3NEJFNzY0QzA1M0I1RDFFNUM2RjczQkQ1MTg0QzVGCis6MTA3MUUwMDBGMjczNkE2RjRBN0M1QzQyOUVDMDNCOEM3RDNDMkY5OTU3Cis6MTA3MUYwMDBDRTVEREQ2NkIyOUI2MDVDNEREODQwMjRGQTQzQjUxMThDCis6MTA3MjAwMDAwMzkxRThFN0Y4OEVDQUFDNDU5MDJCMzY0RUQwNjdCQUFBCis6MTA3MjEwMDAyMDU5NDBERUIxQ0FBM0IzOUIzMkM3QTAzM0ZBNERGODYwCis6MTA3MjIwMDAzRTA3RkYxQkQ2REY5NTM3OURENkFCRUMwQ0E3RjU5ODM0Cis6MTA3MjMwMDA2NTIwMEZGOUI0NzI1N0YwMzgzQzk3MjU0MEZFN0M5RENECis6MTA3MjQwMDA3QkUyMDJFM0YxNjRCMUVGNDFFOTFDQzlDOUUwOUYzRjcxCis6MTA3MjUwMDA0QTQyQkE1NzZCRDgwNkJDNDdCQzJDRjFFRjFFMDBBNkI5Cis6MTA3MjYwMDBFRjFFMkU4QkZCQzhFQTNGOTlDMzkwNUYyRTdGNTk0QkQwCis6MTA3MjcwMDA3MkVCOTMwNjQ4QUZCRDdCQTQ4NEY0ODE0RjM3NDA3QTBDCis6MTA3MjgwMDBFRDQ0REVCREE0Qzc3Q0QxMDM2NUE4QTdERTNENTJDMTk1Cis6MTA3MjkwMDBEQjI3MEQ5NDI5RDBERTg2MzBCNjRGNjU2NEVGRkYyQkQ3Cis6MTA3MkEwMDBDRjQ5RkFBMzU4RTZFRjFCRDgxRTlEODVFNzgxMzZGNTM2Cis6MTA3MkIwMDAzNzUyNUNBMTUzMDJFM0VFM0ZFNkE5RjczNjdBRkZCOUY1Cis6MTA3MkMwMDA2NUJGRENGODk4NzJCMDFERTVCMEQyNENGOTFDRjA5Rjk4Cis6MTA3MkQwMDBEQTVFNDEzRjZGNjk5QzE1RjNFMjk1Mzg4RUYzODEzRThCCis6MTA3MkUwMDBGMEZFMkYzNkU2N0EwNUQyNjc1OTk0QTMyMDJGMTdFRkM4Cis6MTA3MkYwMDAxOTA3Mjg3RTAwQUUyNjNGQkRFRTc3MDY4QTIzMDc3NTY0Cis6MTA3MzAwMDA0M0ZCNTA0RjY1NDYzOTE2RTYwMTdGRDVFQTdCMzdBMjJECis6MTA3MzEwMDA0QjdGNTUzN0QwODNGNzdFOEI2NEFFOEZEODdFQ0U1N0E4Cis6MTA3MzIwMDBCRThDM0RGQzNCMDk3MTdGQjg1NEUwMUZFQzE2NkI0NkU4Cis6MTA3MzMwMDBCRTkwMzg3RERGRTgzQ0ZDMEVFQTE1NUY2RjBBRTlFMzlBCis6MTA3MzQwMDA1MEI5QjlENEY5NTQyNEVBODczMzYwQzc1RDAxNzFGRTlFCis6MTA3MzUwMDA5OTE1RkJFOTlFN0UwOUJFQ0I4MEYyODEwREMxRkMzMDAwCis6MTA3MzYwMDA3Q0UzQTcxNEVGQjEyNzAyRUE5MTBGQjcwN0MzQTE3QzEyCis6MTA3MzcwMDA4NEZDRTgwREQyM0IyRTkyQTc2NzczQjkxRjU2MzNCRjJBCis6MTA3MzgwMDBCNzBFRjEzMDAyREYwREIwMUMwMDlGMDg4MTQzRkFCMzQ1Cis6MTA3MzkwMDAxMkVFMjczQzhCRkY4RDc4OUNFQUVEQTdGOEZDMjA3RjRFCis6MTA3M0EwMDAxN0RCMDRGNjhCRTA4RTcwQkEzN0Q2MUMwNEZCMTRDQkM3Cis6MTA3M0IwMDBFRDEzREE4NTlBQzg1RUNBNEJGOTNBMEM3NDNGRjI2ODRECis6MTA3M0MwMDBEN0E3RjQ5RTExRjg5MEYyMkYzNTVEQUZDNjYxREM3RTMxCis6MTA3M0QwMDAwMEUzODQ1Q0IyODM3MUY0NEVBNUEzMkIwRUUzMERCNURDCis6MTA3M0UwMDBCRTU2RTM0OTEzRUZGMUM5NEY1N0VCOURCMjM3MERGNzg2Cis6MTA3M0YwMDA1RjIzRjU2NjYyRkIwMUIxRUY1QTBEQzAzMkMyNjJERjU2Cis6MTA3NDAwMDAxMjk3NzdENjI1OTMzRTBGQTVEQjBFQzFBRkEwMTczMjlBCis6MTA3NDEwMDBFOTlEQzU1MTlFMTc1MEY1NDA5NUQwMjcyN0IwM0U4MzcyCis6MTA3NDIwMDBDQkJENDVCRDU3OTJGMEJENUNGODk4RkEyMTNFNEZFOEMwCis6MTA3NDMwMDAzN0Q2NDA3OTlCRUQ3OTdDREZFQTc4OUE5N0U3OTVBODczCis6MTA3NDQwMDBCREVFRDg5NUNDRTkxOTM4NEUxOTc5MDczOUEyODc1MjgzCis6MTA3NDUwMDBGQzdBMDVFNTNGODFFNEZGNTE1RDFDOUNBQjdBQjc2NDgzCis6MTA3NDYwMDA2RDQyM0Q1NUJBQkUxMEJBQjM1NURBRDU4NTk0MkYxMzg3Cis6MTA3NDcwMDBFRjNGNDNGNzE1Q0E0NzU2RDgwQkU5NDk0RDc0NDE2Q0E1Cis6MTA3NDgwMDBDMDdDOTcyMTVDNEZDODIyM0Q0M0VGRTgxRjhDN0RCMjQyCis6MTA3NDkwMDAxMEYzMTMzRjJCREQ0NkZDM0M2MjZGMDJFNTFDQ0ZCM0JCCis6MTA3NEEwMDA4QkVCNzExNDlCOUI5QUQxN0NCQ0FBQTE3OTYzRkMxOENECis6MTA3NEIwMDBGQjA4REQ2Nzk1QTNCOTMwNEUxOTVEQUZFRUY3QjI0OTExCis6MTA3NEMwMDBERERGN0NEREM0NDAzQzJDNTk1RjM4MTFDQTU1QzZCRjk2Cis6MTA3NEQwMDAxNjBGRkNCQzk3QkIwQzVFQjRBQjU1QTVBQjM3NDY4RDA1Cis6MTA3NEUwMDBDMTM3QTNFQ0MxQUUwMEZCMzUxREU5RUJBNjdCOERGMUU2Cis6MTA3NEYwMDBGNjFGNUFENjRBREU3RUNDMTMzMTkwQUI1NjkyMkY5MEFGCis6MTA3NTAwMDA5NzAwQkIzMDI3MkYyNERGNTBCOTYyMUFDNjlEQ0NCMTNCCis6MTA3NTEwMDA2MjFBREExOTkwQUIzMkVCMTg3MTI1N0U1OUEyQTFCNzI1Cis6MTA3NTIwMDAxQjJFMkE0M0Y3NzMzRThGRTc0OUU3RTQ3MTc5RTlCNkVBCis6MTA3NTMwMDBEOTdEQTgzN0M3RkJERUUyQkZDNTNFQzZGQkRFMjI1MUMwCis6MTA3NTQwMDAzM0ZDMUVDQTVCNjI1Qzg0ODJGNzQwMDUwQkMyNzlCRkM0Cis6MTA3NTUwMDBFMzI2MEJFNjZEMDY4RjVGQTdCQ0VFRTA2M0U2MjVGQzM1Cis6MTA3NTYwMDBCRUMwQ0MyNjQxN0I0RkMyQUM5NjQwM0JCMjc1MzY1RjY1Cis6MTA3NTcwMDAyNzNDODdGQjJERjVFOUJBQUZDRjBCNjU0NDhDRTQ4NTNBCis6MTA3NTgwMDBDODZGQzgwOEE3N0IxMjVGRTdFNzY0QjcwNkJCNzMyRDE3Cis6MTA3NTkwMDA3ODlGRTFFQjg1RTgxMEU0QTlGRUNGRkYxRDg3RjZENUMzCis6MTA3NUEwMDBEN0ZEMDlCRDA3RjNEREY4OTRERTg5NkQxNkVGRjQ0RUMzCis6MTA3NUIwMDA3NDhBNzc1NkJENEEwNDdEMTc1N0Y0NzEyMUY2REIyMjkxCis6MTA3NUMwMDA0QTdGN0U4MEU3ODlENTUyOERGRjAzRTJERkM5QjNDN0NBCis6MTA3NUQwMDA4RTdGNjMxQ0U2QzBCQzgwMTIzRjU2MUUyNTMwMkY5MDY0Cis6MTA3NUUwMDBBQUU1NzkwMTJDMzEyRjkwOUFDQUYzMDIwODYzNUUwMDU0Cis6MTA3NUYwMDA0QkNDMEI2MDNERTYwNTEwQzZCQzAwQzI5ODE3NDAxODg2Cis6MTA3NjAwMDBGMzAyNTg2MjVFMDBFQkJGMTBERjNGMEM4MjYyRTJGOUNBCis6MTA3NjEwMDA0QTMzRTlGNUI1RjhCRTFERjBCN0Y2MzhCRjc3NUFEQjQ3Cis6MTA3NjIwMDAyQUQzRkQyRDdFRkY4MEY2NkRENEJCOTk3NkYxNkVDNjEwCis6MTA3NjMwMDBCMzhERUVGMUVBM0I2NDJCOTJBODVFMzc3NDEyRjMzOEY3Cis6MTA3NjQwMDBGNTg3MjRFQjdBRDQyQjhENEI2OEZEQ0REREI5MUY5NEUzCis6MTA3NjUwMDA2MjdEQUJDRUFBNTE4ODhGMzgxRDlCMjU3QUE3NUZERDRFCis6MTA3NjYwMDBERDRBNzlBN0ZDRjhFMzdBQUE2RjkzMThFNjQ5RUYzNTZCCis6MTA3NjcwMDBGMDM4RDcyOTQzNkQxNkREODM5MjFGRUMzNEY0NTJGQ0E5Cis6MTA3NjgwMDA1MTczNDA1MkNBMDNERjY5Q0NCOTQ2N0E0MEJENEZBRTUwCis6MTA3NjkwMDBFMDREQ0NFOTMxMjlFNTYzQkMwMzE5Nzk3NzJFREU0RDQ1Cis6MTA3NkEwMDA1N0UwM0QzM0JFMTc5NzZGRDBCQjdFMjcwNEE0MTM5MERECis6MTA3NkIwMDAwRjc3RjBGN0NGMTZGODQ3RjIxRUYyQUVBOUJBRkJEMDVCCis6MTA3NkMwMDA0NjdDMEYxNTdBREYzQ0YyM0Q1REM4QkQ3M0Q5NkM3MTA1Cis6MTA3NkQwMDBBRjZDRTNERjU3MTQzRDVEN0VCMDAzRDYxQkRFNkEyMDNFCis6MTA3NkUwMDA3RkEzMjFEN0YxMjBGMkQxNDk5RDlERjIyMzI3OEY5QkMzCis6MTA3NkYwMDAyODJFM0FCRkVEQjZBMEZDQzg1MDk2QTM3QTM2RTU5QjdCCis6MTA3NzAwMDBBNjUwQkU2MjhENEUyMjdCQkNBMDI4MjUxRUYxQjhFMDlCCis6MTA3NzEwMDA5NDhFRUM0RTRGNTY0OTJERjY1QjMzNEJBMTdDNTQ4MTMxCis6MTA3NzIwMDA4MUZEODJFNjExRUZBNTU0N0ExNDM0NDk2RTBEQzAyQjA5Cis6MTA3NzMwMDA5ODk1REVEOTJGMDczNDYxQkU3MjUwNjdERTg0RUY5QUM4Cis6MTA3NzQwMDA5NjMzRkVDRTQxRTU5QjM1REIyNEUyMUI0QzEwMjAzRUY4Cis6MTA3NzUwMDBDQjA0M0U5Nzc3RkZGRTNBQkU2MzU4NjlFMDdFNkJBMjhBCis6MTA3NzYwMDA4NkRGNUYyNzZFRTFFRjE5MUU2NDBFM0REQUQ5NTVDODNBCis6MTA3NzcwMDA1RDMyRDlDN0RGMEQ0MEJEMjM3QzRBMTJGN0NCOTU3ODI3Cis6MTA3NzgwMDA5QzdGQzU2OTFEQkRCNzJEODhGRjcxOUE4M0VDNzQzRTNGCis6MTA3NzkwMDBCRDYzOTBCQ0NCRTQ5Qjc3OEMyRjNGQTFFRjE4NEVFQUUyCis6MTA3N0EwMDBCODVFMDEzQzUyM0NENDgzN0M0OTc5MTkwNzk1QTcxQkVDCis6MTA3N0IwMDAyQkE5QUMxM0RGNDM4QzdFRkYzRjc0MTZFM0M0QzRGOERGCis6MTA3N0MwMDAwODJCRUFCOTcxQkY3NzBCRkJGQUVGQkQ3NjhBRjc2QjJFCis6MTA3N0QwMDA4OTlBQkU2QzA1RjFGMTI3QjMxNUYxQTFCRTEzRUNCNjgxCis6MTA3N0UwMDA5NTM0MjM5REVDOTFDQzY1QTFFRkMxNDAwMzAyNUUwQjYzCis6MTA3N0YwMDBGMTIwMTJFNkI1M0Q3NkZDRUU2OEU4Qjg2NEExNzdDOUUxCis6MTA3ODAwMDBBM0Y0RTNCNkM3RjA5RDQ4N0RBQTY0OTExNENDN0Y2RkMyCis6MTA3ODEwMDAyRDg4ODM3RDE3NEU0RkE2N0RENzc3RjJGQzI4NjEyOEVGCis6MTA3ODIwMDAwRUYzRTc5QzVFOTE1OThFQzNCMzczRkRGNUM1NDI2RUFFCis6MTA3ODMwMDA3Q0QwOUZGM0M5NzdEREM4NkZERjIwNkZCQTE3RkJCQjIxCis6MTA3ODQwMDA5ODg5QkVBN0E2M0ZEODRGRjExRDUzMjk3RkFBRjJDRDM0Cis6MTA3ODUwMDA3MDVCN0MwQkYyQ0RFRjY3RjMzOEIyQjRGNDdEMUREQUM4Cis6MTA3ODYwMDBGRjlFNkNDNzA5REM0NzU5RjlCNUM3RTJFODdDNjNFN0JFCis6MTA3ODcwMDBBRkQ0NzdFQUExRjlBQjQwRkRGOUZGRjEzRUZEOURDNjFCCis6MTA3ODgwMDAwNjJBREY2QjVDNDc2NTZGQTM4QkRBMDNGNEZGN0Y4RUZDCis6MTA3ODkwMDBBM0ZGNDNGMzlGRTdCMDVGNjhGRTkzMTk5NTI4QjI5RjVCCis6MTA3OEEwMDAyMERGM0NERjFDOTJFRjJDOUFGMEMwMjZDMERGODJFRDc3Cis6MTA3OEIwMDA3QTJCNTZBOUY5NEY3QzNGQkNENjRDRkFFMEYyRUMzMTVBCis6MTA3OEMwMDBGMzlFMkFERUNDOTQyNzFENjZBNjJDQzRGRkZDRjQxNDdDCis6MTA3OEQwMDBBRDA2REFCRjEwNzQ1MEYzOEUyODFGNzgzRTk0MEYyQzNCCis6MTA3OEUwMDA1MTNFQjQ1QUJGN0NCQ0EwMDcxMUNFRTE3NkRFNDU3NjhFCis6MTA3OEYwMDBERTQ0NzREREI4MUVGNDA3QzAyQjk5MjU0ODdGNUMwRDZCCis6MTA3OTAwMDBEMTFGMTA3MERDNDdERjU1NzUxQjE4RTYwOUQ1Nzc5NDM5Cis6MTA3OTEwMDBGM0ExRjgyQTZCMEM3REUyRTFGQTY0NkE5OEU3MjVGQTk0Cis6MTA3OTIwMDBERUJGMkU4Q0RFRTc5RTE0RUZFMTRFNkVFNkVGRTFDQTdECis6MTA3OTMwMDA1OTA5QUQzQjg2NUU4OTQ0N0FBQzlDMzA3NEY2NzlFODhGCis6MTA3OTQwMDBCRkYyRDc2NkYyNTczNjRFQUFDOEZCNUJGNENBRTA2Q0FBCis6MTA3OTUwMDA4RThGNjdGMTc3MDVCNDVGRjdCQjAyNEY0ODc4MUZCQTg3Cis6MTA3OTYwMDBFNjdFNjY0MzNBQUJCRjJCMTAyRkVFQjNCRkM1RUYwQURFCis6MTA3OTcwMDBEQzM2NjdFMjM3RkY1RDgxQ0MzOUYxQTU4MUJGMkI5MDAyCis6MTA3OTgwMDBEOTM5ODlDM0VBRUYwQUIwRjhEMjcxN0U1NzIwN0I0RTBECis6MTA3OTkwMDBFRUU4REYxNTk4M0Q4N0M3MzlFM0ZEQUUwMEY4OTM3MzM1Cis6MTA3OUEwMDA3MDdGM0E5QkZENEUyQzEzQzUzRTQzQkZBNzNEMkRFRTg1Cis6MTA3OUIwMDBFRjdBMzQ4RTUyMkMwQjIzNUQ1QUFBRDdCODczQjA3QzYxCis6MTA3OUMwMDA1QkUzRjkzOUQ2MDMzRkU3RTMzRTBBOUZCMkREOUUwRTQzCis6MTA3OUQwMDA3MEEyQzE0MzdBQjIyN0NCNUU4MEY1ODMzNjdCMjFBRTlECis6MTA3OUUwMDAxMzlBMzc0N0RBNjI3QzBGRkI1OTg0RURBMUVGQUU1NDRFCis6MTA3OUYwMDA3QUFFOThDM0Y5RkUwMTUxQ0U2RDFBRkI3QkYyMDdFNjExCis6MTA3QTAwMDBGMEVGRDU2RUI1NkZEOEVGN0RCODJGNzVGRjZDRUI4QUIwCis6MTA3QTEwMDAxQzkyQTcyQ0ZCMzJCMURGNTIyQzk5MzkyNkU4RkJENEZCCis6MTA3QTIwMDBEMTdDRTYxMkZCRTJGQzA1RkFBQ0Y4M0NGNzA3QTk0QzY2Cis6MTA3QTMwMDBEM0JBQTNEMTdGOUNGQzg4M0IxQUY3M0JCOTc5Qzg4NEExCis6MTA3QTQwMDBERjQxQkNFODFBMzJBMTdEN0ZGMUUxMjExM0Q2QkY2ODg2Cis6MTA3QTUwMDBFN0VGOTU0M0U3N0Y3MTBFRkY0RTIwNkRFRTEwOEQ5RjhGCis6MTA3QTYwMDAwNkZGREQ0QkZFRjk1MDM0RkE0RjY5OTVFNzM3RDI3REJBCis6MTA3QTcwMDBDQjgxOTk2NDVGQTYwOUZCMzJFRDkxRTk5RDAzQzA2RjRDCis6MTA3QTgwMDBEMzlFOEJBMkZCNkM5NjFGNEJFREQ1NDYyRUE3RDU4RkIwCis6MTA3QTkwMDA5NDFGRTk1MEU4QkJBREUyRjMwMUZFQ0U0QzM3RUMzQjVFCis6MTA3QUEwMDBDOEZGRDIwRUYzNzc5NzAwMjM5RTBFRTgwODQ2OUU0NTQ2Cis6MTA3QUIwMDBGRkNBQzlGOEJCQ0JDOTQyNkZBMDlGNTYwQTdBQzE1OTA5Cis6MTA3QUMwMDBGOUU2NzVCQUY3QzdGMTM4MUZERUQxMjJGRjc1RUE4NkVECis6MTA3QUQwMDBDNUY3NjkxNjhDNDM1NzJENTlERjQzNzFFMThFOTE3QUIyCis6MTA3QUUwMDAxMTY3MUVEQTg4NzEzM0Y4NkY0MUY1RDVFNUFGRjdBMDVECis6MTA3QUYwMDBCREE5MzkxMDVDRUY2Q0I4NDZGMTJCRjg2RjQxRjVGNzcyCis6MTA3QjAwMDBGRkZDOUM5RUZGN0U0MTcwM0REMDc3MDdGMjlCNEFERkQxCis6MTA3QjEwMDA5MzNBQ0Y0QzhDRjM0RTNBQzNBQ0ZDRkRCRTg3N0VBRjlDCis6MTA3QjIwMDBBNDQ1N0NGRkJDRTc5RkU3RTdGMEY3QTI5Q0RFMzBERUQwCis6MTA3QjMwMDBGRENERjhBMzg5RkFCQkU2QjM3NDk0ODc1Qjk1QUE1RTgyCis6MTA3QjQwMDAxQUY5RkQxMzNENzM1MTdFNkY1MTA0RTk5RDdBMTE1NzY3Cis6MTA3QjUwMDBENTk1NUJDOENFMjdENjE5NDk3RjE1Qzg2MTU2ODQ0NzhECis6MTA3QjYwMDA3RUZGQTQ0ODE2N0FDQTQzRjJERjc3NTczNEU1RjFFODdFCis6MTA3QjcwMDAwMDA4QzdDQ0EyN0I5RkI4MjYwRTBGNEQzNDkwN0UyOEZDCis6MTA3QjgwMDBEMDk0RDRFRTg3RjI0RDRERjA3N0VDMkZBMDdFOTA1MTNCCis6MTA3QjkwMDA3RTc5M0VCNTVFRUZFMURGODk2Qjk1NUM4QzczOUIyNDRCCis6MTA3QkEwMDBGQjczRjhERDYzOTMyNEYyODg1NTY2QkEyRjE4QzRGQzgyCis6MTA3QkIwMDAyMjlDNjc3QkI0RkJCOTBBNTg2N0ZCM0QxOUU0MUYwRjkxCis6MTA3QkMwMDAzMkFFNEY1RDRCRjhCREQ1RjZFODkyRDJENUQ4QkVGNEIzCis6MTA3QkQwMDA3NjZBM0ZGMjk3OTQyNzczRDA3RkFBMEFCM0EyRkZCNEM0Cis6MTA3QkUwMDBEREM2RkRFQkVEOEJEM0E5RkQ5OEE0QUNDNzczQkIxRTFFCis6MTA3QkYwMDA2MUI0Q0VGNkM1RkNEQ0RCOUY5QzJBQkVCRjcwOUI1MEY3Cis6MTA3QzAwMDA5RUI3MzdEQjI3RTE3REQ0N0M4QkUzMENEMjZCQjJCODE3Cis6MTA3QzEwMDA4RkRCOUUwQ0Y1NTAzRTIzOTUyQzdEMTBFNzk5QzVGNzIwCis6MTA3QzIwMDA1QjY3NTM4ODVFMjc5N0RFRkVFNDNFODVDQzg4MTdFRkJFCis6MTA3QzMwMDA4NUVBMTc0NTUwMUNGQ0JGOTMwMTEzNTNGMDQ2MDAwMDIyCis6MTA3QzQwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDE1MDAwMDAwMDAwMDFBCis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngtZTFoLTQuOC41My4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC1lMWgtNC44LjUzLjAuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhkNzYxMi4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyeC1lMWgtNC44LjUzLjAuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDEyMDI4ICswLDAgQEAKLToxMDAwMDAwMDAwMDAzOUQ4MDAwMDAwNjAwMDAwMDYzMDAwMDAzQTQwQ0YKLToxMDAwMTAwMDAwMDAxOTFDMDAwMDQwNzgwMDAwMDA5QzAwMDA1OTk4NjYKLToxMDAwMjAwMDAwMDA4MkU0MDAwMDVBMzgwMDAwMDBENDAwMDBERDIwMDcKLToxMDAwMzAwMDAwMDBDN0NDMDAwMERERjgwMDAwMDA3ODAwMDFBNUM4NzIKLToxMDAwNDAwMDAwMDA1Njk4MDAwMUE2NDgwMDAwMDBDMDAwMDFGQ0U4MkUKLToxMDAwNTAwMDAwMDBGMUQ0MDAwMUZEQjAwMDAwMDAwNDAwMDJFRjg4QjAKLToxMDAwNjAwMDAyMDQwMDQ4MDAwMDAwMEYwMjA0MDA1NDAwMDAwMDQ1OTQKLToxMDAwNzAwMDAyMDQwMDU4MDAwMDAwODQwMjA0MDA1QzAwMDAwMDA2MzYKLToxMDAwODAwMDAyMDQwMDcwMDAwMDAwMDQwMjA0MDA3ODAwMDAwMDAwNzgKLToxMDAwOTAwMDAyMDQwMDdDMTIxNzAwMDAwMjA0MDA4MDIyMTcwMDAwRjYKLToxMDAwQTAwMDAyMDQwMDg0MzIxNzAwMDAwNjA0MDA4ODAwMDAwMDA1RTYKLToxMDAwQjAwMDAyMDQwMDlDMTIxNTAwMDAwMjA0MDBBMDIyMTUwMDAwOUEKLToxMDAwQzAwMDAyMDQwMEE0MzIxNTAwMDAwNjA0MDBBODAwMDAwMDA0ODkKLToxMDAwRDAwMDAyMDQwMEI4MDIxMDAwMDAwMjA0MDBCQzAwMTAwMDAwN0UKLToxMDAwRTAwMDAyMDQwMEMwMTAxMDAwMDAwMjA0MDBDNDIwMTAwMDAwMzAKLToxMDAwRjAwMDAyMDQwMEM4MzAxMDAwMDAwMjA0MDBDQzQwMTAwMDAwRDAKLToxMDAxMDAwMDA2MDQwMEQwMDAwMDAwMDMwMjA0MDBEQzAwMTAwMDAwMjAKLToxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKLToxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwMjA0MDBFQzQyMTQwMDAwNTMKLToxMDAxMzAwMDA2MDQwMEYwMDAwMDAwMDMwMTA0MDEyNDAwMDAwMDAwOTgKLToxMDAxNDAwMDAxMDQwMTI4MDAwMDAwMDAwMTA0MDEyQzAwMDAwMDAwNEYKLToxMDAxNTAwMDAxMDQwMTMwMDAwMDAwMDAwMjA0MDFEMDAwMDA4OTA2MDMKLToxMDAxNjAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGNzkKLToxMDAxNzAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGNTkKLToxMDAxODAwMDAyMDQwMDE0MDAwMDAwRkYwMjA0MDAxODAwMDAwMEZGMzkKLToxMDAxOTAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGMTkKLToxMDAxQTAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwQjkKLToxMDAxQjAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGNTkKLToxMDAxQzAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDNGMzkKLToxMDAxRDAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGMTkKLToxMDAxRTAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MDRDQzAwMDAwMDAxQUYKLToxMDAxRjAwMDAyMDQyMDA4MDAwMDAyMTEwMjA0MjAwQzAwMDAwMjAwOEEKLToxMDAyMDAwMDAyMDQyMDEwMDAwMDAyMDQwMjA0MjAxNDAwMDAwMjE5NUQKLToxMDAyMTAwMDAyMDQyMDFDMDAwMEZGRkYwMjA0MjAyMDAwMDBGRkZGNUEKLToxMDAyMjAwMDAyMDQyMDI0MDAwMEZGRkYwMjA0MjAyODAwMDBGRkZGM0EKLToxMDAyMzAwMDAyMDQyMDM4MDAwMDAwMjAwMjA0MjAzQzAwMDAwMDAwREUKLToxMDAyNDAwMDAyMDQyMDQwMDAwMDAwMzQwMjA0MjA0NDAwMDAwMDM1NzUKLToxMDAyNTAwMDA2MDQyMDQ4MDAwMDAwMUMwMjA0MjBCODAwMDAwMDAxMzEKLToxMDAyNjAwMDA2MDQyMEJDMDAwMDAwNUYwMjA0MjIzODA3RkZGRkZGRTUKLToxMDAyNzAwMDAyMDQyMjNDMDAwMDAwM0YwMjA0MjI0MDA3RkZGRkZGNkYKLToxMDAyODAwMDAyMDQyMjQ0MDAwMDAwMEYwMTA0MjI0ODAwMDAwMDAwODQKLToxMDAyOTAwMDAxMDQyMjRDMDAwMDAwMDAwMTA0MjI1MDAwMDAwMDAwNzQKLToxMDAyQTAwMDAxMDQyMjU0MDAwMDAwMDAwMTA0MjI1ODAwMDAwMDAwNTQKLToxMDAyQjAwMDAxMDQyMjVDMDAwMDAwMDAwMTA0MjI2MDAwMDAwMDAwMzQKLToxMDAyQzAwMDAxMDQyMjY0MDAwMDAwMDAwMTA0MjI2ODAwMDAwMDAwMTQKLToxMDAyRDAwMDAxMDQyMjZDMDAwMDAwMDAwMTA0MjI3MDAwMDAwMDAwRjQKLToxMDAyRTAwMDAxMDQyMjc0MDAwMDAwMDAwMTA0MjI3ODAwMDAwMDAwRDQKLToxMDAyRjAwMDAxMDQyMjdDMDAwMDAwMDAwQzA0MjAwMDAwMDAwM0U4NDAKLToxMDAzMDAwMDBBMDQyMDAwMDAwMDAwMDEwQjA0MjAwMDAwMDAwMDBBODUKLToxMDAzMTAwMDAyMDUwMDQ0MDAwMDAwMjAwMjA1MDA0ODAwMDAwMDMyRjEKLToxMDAzMjAwMDAyMDUwMDkwMDIxNTAwMjAwMjA1MDA5NDAyMTUwMDIwMkQKLToxMDAzMzAwMDAyMDUwMDk4MDAwMDAwMzAwMjA1MDA5QzA4MTAwMDAwMzMKLToxMDAzNDAwMDAyMDUwMEEwMDAwMDAwMzMwMjA1MDBBNDAwMDAwMDMwRjgKLToxMDAzNTAwMDAyMDUwMEE4MDAwMDAwMzEwMjA1MDBBQzAwMDAwMDAyMDgKLToxMDAzNjAwMDAyMDUwMEIwMDAwMDAwMDUwMjA1MDBCNDAwMDAwMDA2MTAKLToxMDAzNzAwMDAyMDUwMEI4MDAwMDAwMDIwMjA1MDBCQzAwMDAwMDAyRjcKLToxMDAzODAwMDAyMDUwMEMwMDAwMDAwMDAwMjA1MDBDNDAwMDAwMDA1RDYKLToxMDAzOTAwMDAyMDUwMEM4MDAwMDAwMDIwMjA1MDBDQzAwMDAwMDAyQjcKLToxMDAzQTAwMDAyMDUwMEQwMDAwMDAwMDIwMjA1MDBENDAwMDAwMDAxOTgKLToxMDAzQjAwMDAyMDUwMTE0MDAwMDAwMDEwMjA1MDExQzAwMDAwMDAxRkIKLToxMDAzQzAwMDAyMDUwMTIwMDAwMDAwMDIwMjA1MDIwNDAwMDAwMDAxRjUKLToxMDAzRDAwMDAyMDUwMjBDMDAwMDAwNDAwMjA1MDIxMDAwMDAwMDQwNkYKLToxMDAzRTAwMDAyMDUwMjFDMDAwMDAwMjAwMjA1MDIyMDAwMDAwMDEzOEMKLToxMDAzRjAwMDAyMDUwMjI0MDAwMDAwMjAwNjA1MDI0MDAwMDAwMDBBNTkKLToxMDA0MDAwMDA0MDUwMjgwMDAyMDAwMDAwMjA1MDA1MDAwMDAwMDA3RTMKLToxMDA0MTAwMDAyMDUwMDU0MDAwMDAwMDcwMjA1MDA1ODAwMDAwMDA4MTMKLToxMDA0MjAwMDAyMDUwMDVDMDAwMDAwMDgwMjA1MDA2MDAwMDAwMDAxRjkKLToxMDA0MzAwMDA2MDUwMDY0MDAwMDAwMDMwMjA1MDBEODAwMDAwMDA2NjUKLToxMDA0NDAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxOTAKLToxMDA0NTAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNzAKLToxMDA0NjAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxNTAKLToxMDA0NzAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMzAKLToxMDA0ODAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxMTAKLToxMDA0OTAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxRjAKLToxMDA0QTAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxRDAKLToxMDA0QjAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxQjAKLToxMDA0QzAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFODAwMDAwMDA3NDIKLToxMDA0RDAwMDAyMDUwMEYwMDAwMDAwMDcwMjA1MDBGODAwMDAwMDA3MTgKLToxMDA0RTAwMDAyMDUwMEU0MDAwMDAwMkQwMjA1MDBFQzAwMDAwMDI3REEKLToxMDA0RjAwMDAyMDUwMEY0MDAwMDAwMjcwMjA1MDBGQzAwMDAwMDI3QjAKLToxMDA1MDAwMDAyMDUwMEUwMDAwMDAwMUQwMjA1MDBFODAwMDAwMDE3RTEKLToxMDA1MTAwMDAyMDUwMEYwMDAwMDAwMTcwMjA1MDBGODAwMDAwMDE3QjcKLToxMDA1MjAwMDAyMDUwMEU0MDAwMDAwM0QwMjA1MDBFQzAwMDAwMDM3NzkKLToxMDA1MzAwMDAyMDUwMEY0MDAwMDAwMzcwMjA1MDBGQzAwMDAwMDM3NEYKLToxMDA1NDAwMDAyMDUwMEUwMDAwMDAwNEQwMjA1MDBFODAwMDAwMDQ3NDEKLToxMDA1NTAwMDAyMDUwMEYwMDAwMDAwNDcwMjA1MDBGODAwMDAwMDQ3MTcKLToxMDA1NjAwMDAyMDUwMEU0MDAwMDAwNkQwMjA1MDBFQzAwMDAwMDY3RDkKLToxMDA1NzAwMDAyMDUwMEY0MDAwMDAwNjcwMjA1MDBGQzAwMDAwMDY3QUYKLToxMDA1ODAwMDAyMDUwMEUwMDAwMDAwNUQwMjA1MDBFODAwMDAwMDU3RTEKLToxMDA1OTAwMDAyMDUwMEYwMDAwMDAwNTcwMjA1MDBGODAwMDAwMDU3QjcKLToxMDA1QTAwMDAyMDUwMEU0MDAwMDAwN0QwMjA1MDBFQzAwMDAwMDc3NzkKLToxMDA1QjAwMDAyMDUwMEY0MDAwMDAwNzcwMjA1MDBGQzAwMDAwMDc3NEYKLToxMDA1QzAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxMEEKLToxMDA1RDAwMDAxMDYwMEQ4MDAwMDAwMDAwNDA2MDIwMDAwMDMwMjIwMEIKLToxMDA1RTAwMDAyMDYwMERDMDAwMDAwMDAwMTA2MDBCODAwMDAwMDAwNjgKLToxMDA1RjAwMDAxMDYwMEM4MDAwMDAwMDAwMTA2MDBCQzAwMDAwMDAwNjkKLToxMDA2MDAwMDAxMDYwMENDMDAwMDAwMDAwNzE4MDQwMDAwOUIwMDAwNTkKLToxMDA2MTAwMDA4MTgwNzk4MDAwRDAyMjMwNzFDMDAwMDMyNUUwMDAwMzYKLToxMDA2MjAwMDA3MUM4MDAwMzU5NjBDOTgwNzFEMDAwMDFBRUExOUZFNzkKLToxMDA2MzAwMDA4MUQ0M0QwNTc4NjAyMjUwMTE4MDAwMDAwMDAwMDAwNjUKLToxMDA2NDAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNkMKLToxMDA2NTAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwNEMKLToxMDA2NjAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMjIKLToxMDA2NzAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRjUKLToxMDA2ODAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0RDYKLToxMDA2OTAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwQjkKLToxMDA2QTAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0OTUKLToxMDA2QjAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNzkKLToxMDA2QzAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwNTcKLToxMDA2RDAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MzUKLToxMDA2RTAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxMTkKLToxMDA2RjAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRjcKLToxMDA3MDAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0RDQKLToxMDA3MTAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0QjUKLToxMDA3MjAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyOTAKLToxMDA3MzAwMDAyMTgwMEE0MDAwMDNGRkYwMjE4MDBBODAwMDAwM0ZGRjkKLToxMDA3NDAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwMTkKLToxMDA3NTAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMzIKLToxMDA3NjAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxRUUKLToxMDA3NzAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4QjMKLToxMDA3ODAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQzMKLToxMDA3OTAwMDBDMUI4MzAwMDAwN0ExMjAwQTFCODMwMDAwMDAwMTM4MDYKLToxMDA3QTAwMDBCMUI4MzAwMDAwMDEzODgwMjFCODNDMDAwMDAwMUY0QjAKLToxMDA3QjAwMDAyMUIxNDgwMDAwMDAwMDEwQTFCMTQ4MDAwMDAwMDAwQ0UKLToxMDA3QzAwMDA2MUExMDAwMDAwMDAyQjMwNDFBMUFDQzAwMDEwMjI3MTYKLToxMDA3RDAwMDA2MUFBMDIwMDAwMDAwQzgwNjFBQTAwMDAwMDAwMDAyQUYKLToxMDA3RTAwMDAyMUExQUQwMDAwMDAwMDAwNjFBMUFEODAwMDAwMDA0RUQKLToxMDA3RjAwMDA2MUEzNjc4MDAwMDAwMDYwNjFBMzY3MDAwMDAwMDAyNUQKLToxMDA4MDAwMDA2MUE1MDAwMDAwMDAwMDIwNjFBNTAwODAwMDAwMDA0RkEKLToxMDA4MTAwMDA2MUE1MDE4MDAwMDAwMDQwNjFBNTAyODAwMDAwMDA0QjAKLToxMDA4MjAwMDA2MUE1MDM4MDAwMDAwMDQwNjFBNTA0ODAwMDAwMDA0NjAKLToxMDA4MzAwMDA2MUE1MDU4MDAwMDAwMDQwNjFBNTA2ODAwMDAwMDA0MTAKLToxMDA4NDAwMDA2MUE1MDc4MDAwMDAwMDIwNjFBNDAwMDAwMDAwMDAyNUMKLToxMDA4NTAwMDA2MUE0MDA4MDAwMDAwMDIwNDFBNjJDMDAwMjAwMjI4QTQKLToxMDA4NjAwMDA2MUEyMDAwMDAwMDAxNkMwNjFBQjAwMDAwMDAwMDI4RTMKLToxMDA4NzAwMDA2MUFCMTQwMDAwMDAwMEMwNjFBMzJDMDAwMDAwMDEyMzcKLToxMDA4ODAwMDA2MUEzMzUwMDAwMDAwNjQwNjFBODEwODAwMDAwMDAyQjYKLToxMDA4OTAwMDA2MUEyNUIwMDAwMDAxNkMwNjFBQjBBMDAwMDAwMDI4NUUKLToxMDA4QTAwMDA2MUFCMTcwMDAwMDAwMEMwNjFBMzMwODAwMDAwMDEyOEUKLToxMDA4QjAwMDA2MUEzNEUwMDAwMDAwNjQwNjFBODExMDAwMDAwMDAyRUQKLToxMDA4QzAwMDAyMUEyQjYwMDAwMDAwMDAwNjFBMzAwMDAwMDAwMDAyMkYKLToxMDA4RDAwMDA0MUEzMDA4MDAwNTAyNDgwNjFBMzAxQzAwMDAwMDA3MDAKLToxMDA4RTAwMDA2MUEzMUMwMDAwMDAwMDgwNjFBNTAwMDAwMDAwMDAyN0QKLToxMDA4RjAwMDA2MUE1MDgwMDAwMDAwMTIwNjFBNDAwMDAwMDAwMDAyOTQKLToxMDA5MDAwMDAyMUEyQjY0MDAwMDAwMDAwNjFBMzAzODAwMDAwMDAyQjIKLToxMDA5MTAwMDA0MUEzMDQwMDAwNTAyNEQwNjFBMzA1NDAwMDAwMDA3NEEKLToxMDA5MjAwMDA2MUEzMUUwMDAwMDAwMDgwNjFBNTAxMDAwMDAwMDAyMEMKLToxMDA5MzAwMDA2MUE1MEM4MDAwMDAwMTIwNjFBNDAwODAwMDAwMDAyMDMKLToxMDA5NDAwMDAyMUEyQjY4MDAwMDAwMDAwNjFBMzA3MDAwMDAwMDAyMzYKLToxMDA5NTAwMDA0MUEzMDc4MDAwNTAyNTIwNjFBMzA4QzAwMDAwMDA3OTUKLToxMDA5NjAwMDA2MUEzMjAwMDAwMDAwMDgwNjFBNTAyMDAwMDAwMDAyOUIKLToxMDA5NzAwMDA2MUE1MTEwMDAwMDAwMTIwNDFBNDAxMDAwMDIwMjU3MUIKLToxMDA5ODAwMDAyMUEyQjZDMDAwMDAwMDAwNjFBMzBBODAwMDAwMDAyQkEKLToxMDA5OTAwMDA0MUEzMEIwMDAwNTAyNTkwNjFBMzBDNDAwMDAwMDA3REUKLToxMDA5QTAwMDA2MUEzMjIwMDAwMDAwMDgwNjFBNTAzMDAwMDAwMDAyMkIKLToxMDA5QjAwMDA2MUE1MTU4MDAwMDAwMTIwNDFBNDAxODAwMDIwMjVFODQKLToxMDA5QzAwMDAyMUEyQjcwMDAwMDAwMDAwNjFBMzBFMDAwMDAwMDAyM0UKLToxMDA5RDAwMDA0MUEzMEU4MDAwNTAyNjAwNjFBMzBGQzAwMDAwMDA3MjcKLToxMDA5RTAwMDA2MUEzMjQwMDAwMDAwMDgwNjFBNTA0MDAwMDAwMDAyQkIKLToxMDA5RjAwMDA2MUE1MUEwMDAwMDAwMTIwNDFBNDAyMDAwMDIwMjY1RUQKLToxMDBBMDAwMDAyMUEyQjc0MDAwMDAwMDAwNjFBMzExODAwMDAwMDAyQzAKLToxMDBBMTAwMDA0MUEzMTIwMDAwNTAyNjcwNjFBMzEzNDAwMDAwMDA3NkQKLToxMDBBMjAwMDA2MUEzMjYwMDAwMDAwMDgwNjFBNTA1MDAwMDAwMDAyNEEKLToxMDBBMzAwMDA2MUE1MUU4MDAwMDAwMTIwNDFBNDAyODAwMDIwMjZDNTUKLToxMDBBNDAwMDAyMUEyQjc4MDAwMDAwMDAwNjFBMzE1MDAwMDAwMDAyNDQKLToxMDBBNTAwMDA0MUEzMTU4MDAwNTAyNkUwNjFBMzE2QzAwMDAwMDA3QjYKLToxMDBBNjAwMDA2MUEzMjgwMDAwMDAwMDgwNjFBNTA2MDAwMDAwMDAyREEKLToxMDBBNzAwMDA2MUE1MjMwMDAwMDAwMTIwNDFBNDAzMDAwMDIwMjczQkQKLToxMDBBODAwMDAyMUEyQjdDMDAwMDAwMDAwNjFBMzE4ODAwMDAwMDAyQzgKLToxMDBBOTAwMDA0MUEzMTkwMDAwNTAyNzUwNjFBMzFBNDAwMDAwMDA3RkYKLToxMDBBQTAwMDA2MUEzMkEwMDAwMDAwMDgwNjFBNTA3MDAwMDAwMDAyNkEKLToxMDBBQjAwMDA2MUE1Mjc4MDAwMDAwMTIwNDFBNDAzODAwMDIwMjdBMjYKLToxMDBBQzAwMDAyMDBBMjk0MDcxRDI5MTEwMjAwQTI5ODAwMDAwMDAwNTQKLToxMDBBRDAwMDAyMDBBMjlDMDA5QzA0MjQwMjAwQTJBMDAwMDAwMDAwQ0UKLToxMDBBRTAwMDAyMDBBMkE0MDAwMDAyMDkwMjAwQTI3MDAwMDAwMDAwOUYKLToxMDBBRjAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwQ0EKLToxMDBCMDAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwQjkKLToxMDBCMTAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwQTkKLToxMDBCMjAwMDAyMDBBMjc0MDAwMDAwMDAwMjAxMDBCNDAwMDAwMDAxRjUKLToxMDBCMzAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxMTkKLToxMDBCNDAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxOTcKLToxMDBCNTAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4MzcKLToxMDBCNjAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0QkUKLToxMDBCNzAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwRTUKLToxMDBCODAwMDAyMDE2MDgwMDAwMDAwMDEwMjAxMDU1NDAwMDAwMDMwRjUKLToxMDBCOTAwMDAyMDEwMEM0MDAwMDAwMDEwMjAxMDBDQzAwMDAwMDAxQkQKLToxMDBCQTAwMDAyMDEwMEY4MDAwMDAwMDEwMjAxMDBGMDAwMDAwMDAxNTUKLToxMDBCQjAwMDAyMDEwMDgwMDAzMDAwMDAwMjAxMDA4ODAwMDAwMDI4Q0YKLToxMDBCQzAwMDAyMDEwMDkwMDAwMDAwMDAwMjAxMDEzNDAwMDAwMDA0NTYKLToxMDBCRDAwMDAyMDEwMkRDMDAwMDAwMDEwMjAxMDMyQzAwMDAwMDAwMDEKLToxMDBCRTAwMDAyMDE2MDg0MDAwMDAwMDEwMjAxMDU2NDAwMDAwMDMwODEKLToxMDBCRjAwMDAyMDEwMEM4MDAwMDAwMDEwMjAxMDBEMDAwMDAwMDAxNTUKLToxMDBDMDAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxRUMKLToxMDBDMTAwMDAyMEMxMDAwMDAwMDAwMjAwMjBDMjAwODAwMDAwMjExNEQKLToxMDBDMjAwMDAyMEMyMDBDMDAwMDAyMDAwMjBDMjAxMDAwMDAwMjA0NDQKLToxMDBDMzAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGMjAKLToxMDBDNDAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGMDAKLToxMDBDNTAwMDAyMEMyMDM4MDAwMDAwQzYwMjBDMjAzQzAwMDAwMDAwRkUKLToxMDBDNjAwMDAyMEMyMDQwMDAwMDAwMzQwMjBDMjA0NDAwMDAwMDM1M0IKLToxMDBDNzAwMDA2MEMyMDQ4MDAwMDAwMUMwMjBDMjBCODAwMDAwMDAxRjcKLToxMDBDODAwMDA2MEMyMEJDMDAwMDAwNUYwMjBDMjIzODA3RkZGRkZGQUIKLToxMDBDOTAwMDAyMEMyMjNDMDAwMDAwM0YwMjBDMjI0MDA3RkZGRkZGMzUKLToxMDBDQTAwMDAyMEMyMjQ0MDAwMDAwMEYwMTBDMjI0ODAwMDAwMDAwNEEKLToxMDBDQjAwMDAxMEMyMjRDMDAwMDAwMDAwMTBDMjI1MDAwMDAwMDAwM0EKLToxMDBDQzAwMDAxMEMyMjU0MDAwMDAwMDAwMTBDMjI1ODAwMDAwMDAwMUEKLToxMDBDRDAwMDAxMEMyMjVDMDAwMDAwMDAwMTBDMjI2MDAwMDAwMDAwRkEKLToxMDBDRTAwMDAxMEMyMjY0MDAwMDAwMDAwMTBDMjI2ODAwMDAwMDAwREEKLToxMDBDRjAwMDAxMEMyMjZDMDAwMDAwMDAwMTBDMjI3MDAwMDAwMDAwQkEKLToxMDBEMDAwMDAxMEMyMjc0MDAwMDAwMDAwMTBDMjI3ODAwMDAwMDAwOTkKLToxMDBEMTAwMDAxMEMyMjdDMDAwMDAwMDAwQzBDMjAwMDAwMDAwM0U4MDUKLToxMDBEMjAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDBBNEIKLToxMDBEMzAwMDAyMEM0MDA4MDAwMDA0MTEwMjBDNDAwQzAwMDAwNDAwRUEKLToxMDBENDAwMDAyMEM0MDEwMDAwMDA0MDQwMjBDNDAxNDAwMDAwNDIxQjYKLToxMDBENTAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGQkYKLToxMDBENjAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGOUYKLToxMDBENzAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDA1MTgKLToxMDBEODAwMDAyMEM0MDQwMDAwMDAwMzQwMjBDNDA0NDAwMDAwMDM1REEKLToxMDBEOTAwMDAyMEM0MDQ4MDAwMDAwMDcwNjBDNDA0QzAwMDAwMDVCQkQKLToxMDBEQTAwMDAyMEM0MUI4MDAwMDAwMDEwNjBDNDFCQzAwMDAwMDAzMjkKLToxMDBEQjAwMDAyMEM0MUM4MDAwMDAwMDEwNjBDNDFDQzAwMDAwMDFCRTEKLToxMDBEQzAwMDAyMEM0MjM4MDdGRkZGRkYwMjBDNDIzQzAwMDAwMDNGQ0MKLToxMDBERDAwMDAyMEM0MjQwMDdGRkZGRkYwMjBDNDI0NDAwMDAwMDBGREMKLToxMDBERTAwMDAxMEM0MjQ4MDAwMDAwMDAwMTBDNDI0QzAwMDAwMDAwRDEKLToxMDBERjAwMDAxMEM0MjUwMDAwMDAwMDAwMTBDNDI1NDAwMDAwMDAwQjEKLToxMDBFMDAwMDAxMEM0MjU4MDAwMDAwMDAwMTBDNDI1QzAwMDAwMDAwOTAKLToxMDBFMTAwMDAxMEM0MjYwMDAwMDAwMDAwMTBDNDI2NDAwMDAwMDAwNzAKLToxMDBFMjAwMDAxMEM0MjY4MDAwMDAwMDAwMTBDNDI2QzAwMDAwMDAwNTAKLToxMDBFMzAwMDAxMEM0MjcwMDAwMDAwMDAwMTBDNDI3NDAwMDAwMDAwMzAKLToxMDBFNDAwMDAxMEM0Mjc4MDAwMDAwMDAwMTBDNDI3QzAwMDAwMDAwMTAKLToxMDBFNTAwMDAxMEM0MjgwMDAwMDAwMDAwQzBDNDAwMDAwMDAwM0U4ODAKLToxMDBFNjAwMDBBMEM0MDAwMDAwMDAwMDEwQjBDNDAwMDAwMDAwMDBBQ0EKLToxMDBFNzAwMDAyMEQwMDQ0MDAwMDAwMzIwMjBEMDA4QzAyMTUwMDIwMUIKLToxMDBFODAwMDAyMEQwMDkwMDIxNTAwMjAwMjBEMDA5NDA4MTAwMDAwRDEKLToxMDBFOTAwMDAyMEQwMDk4MDAwMDAwMzMwMjBEMDA5QzAwMDAwMDAyQ0IKLToxMDBFQTAwMDAyMEQwMEEwMDAwMDAwMDAwMjBEMDBBNDAwMDAwMDA1REIKLToxMDBFQjAwMDAyMEQwMEE4MDAwMDAwMDUwNjBEMDBBQzAwMDAwMDAyQjUKLToxMDBFQzAwMDAyMEQwMEI0MDAwMDAwMDIwMjBEMDBCODAwMDAwMDAzOTMKLToxMDBFRDAwMDAyMEQwMEJDMDAwMDAwMDIwMjBEMDBDMDAwMDAwMDAxNzUKLToxMDBFRTAwMDAyMEQwMEM4MDAwMDAwMDIwMjBEMDBDQzAwMDAwMDAyNEMKLToxMDBFRjAwMDAyMEQwMTA4MDAwMDAwMDEwMjBEMDE1QzAwMDAwMDAxNkMKLToxMDBGMDAwMDAyMEQwMTY0MDAwMDAwMDEwMjBEMDE2ODAwMDAwMDAyRjIKLToxMDBGMTAwMDAyMEQwMjA0MDAwMDAwMDEwMjBEMDIwQzAwMDAwMDIwN0UKLToxMDBGMjAwMDAyMEQwMjEwMDAwMDAwNDAwMjBEMDIxNDAwMDAwMDQwRkIKLToxMDBGMzAwMDAyMEQwMjIwMDAwMDAwMDMwMjBEMDIyNDAwMDAwMDE4MzAKLToxMDBGNDAwMDA2MEQwMjgwMDAwMDAwMTIwNDBEMDMwMDAwMjQwMjdDNDQKLToxMDBGNTAwMDAyMEQwMDRDMDAwMDAwMDEwMjBEMDA1MDAwMDAwMDAyRDQKLToxMDBGNjAwMDAyMEQwMDU0MDAwMDAwMDgwMjBEMDA1ODAwMDAwMDA4QTcKLToxMDBGNzAwMDA2MEQwMDVDMDAwMDAwMDQwMjBEMDBDNDAwMDAwMDA0MjcKLToxMDBGODAwMDAyMEQwMDA0MDAwMDAwMDEwMjBEMDAwODAwMDAwMDAxMzUKLToxMDBGOTAwMDAyMEQwMDBDMDAwMDAwMDEwMjBEMDAxMDAwMDAwMDAxMTUKLToxMDBGQTAwMDAyMEQwMDE0MDAwMDAwMDEwMjBEMDAxODAwMDAwMDAxRjUKLToxMDBGQjAwMDAyMEQwMDFDMDAwMDAwMDEwMjBEMDAyMDAwMDAwMDAxRDUKLToxMDBGQzAwMDAyMEQwMDI0MDAwMDAwMDEwMjBEMDAyODAwMDAwMDAxQjUKLToxMDBGRDAwMDAyMEQwMDJDMDAwMDAwMDEwMjBEMDAzMDAwMDAwMDAxOTUKLToxMDBGRTAwMDAyMEQwMDM0MDAwMDAwMDEwMjBEMDAzODAwMDAwMDAxNzUKLToxMDBGRjAwMDAyMEQwMDNDMDAwMDAwMDEwMjBEMDExNDAwMDAwMDA5NzgKLToxMDEwMDAwMDAyMEQwMTFDMDAwMDAwMEEwMjBEMDEyNDAwMDAwMDA3NkYKLToxMDEwMTAwMDAyMEQwMTJDMDAwMDAwMDcwMjBEMDEzNDAwMDAwMDBDM0QKLToxMDEwMjAwMDAyMEQwMTNDMDAwMDAwMEIwMjBEMDE0NDAwMDAwMDA3MEUKLToxMDEwMzAwMDAyMEQwMTE4MDAwMDAwMjkwMjBEMDEyMDAwMDAwMDJBMDUKLToxMDEwNDAwMDAyMEQwMTI4MDAwMDAwMjcwMjBEMDEzMDAwMDAwMDI3REEKLToxMDEwNTAwMDAyMEQwMTM4MDAwMDAwMkMwMjBEMDE0MDAwMDAwMDJCQTEKLToxMDEwNjAwMDAyMEQwMTQ4MDAwMDAwMjcwMjBEMDExNDAwMDAwMDE5QzQKLToxMDEwNzAwMDAyMEQwMTFDMDAwMDAwMUEwMjBEMDEyNDAwMDAwMDE3REYKLToxMDEwODAwMDAyMEQwMTJDMDAwMDAwMTcwMjBEMDEzNDAwMDAwMDFDQUQKLToxMDEwOTAwMDAyMEQwMTNDMDAwMDAwMUIwMjBEMDE0NDAwMDAwMDE3N0UKLToxMDEwQTAwMDAyMEQwMTE4MDAwMDAwMzkwMjBEMDEyMDAwMDAwMDNBNzUKLToxMDEwQjAwMDAyMEQwMTI4MDAwMDAwMzcwMjBEMDEzMDAwMDAwMDM3NEEKLToxMDEwQzAwMDAyMEQwMTM4MDAwMDAwM0MwMjBEMDE0MDAwMDAwMDNCMTEKLToxMDEwRDAwMDAyMEQwMTQ4MDAwMDAwMzcwMjBEMDExNDAwMDAwMDQ5MTQKLToxMDEwRTAwMDAyMEQwMTFDMDAwMDAwNEEwMjBEMDEyNDAwMDAwMDQ3MEYKLToxMDEwRjAwMDAyMEQwMTJDMDAwMDAwNDcwMjBEMDEzNDAwMDAwMDRDREQKLToxMDExMDAwMDAyMEQwMTNDMDAwMDAwNEIwMjBEMDE0NDAwMDAwMDQ3QUQKLToxMDExMTAwMDAyMEQwMTE4MDAwMDAwNjkwMjBEMDEyMDAwMDAwMDZBQTQKLToxMDExMjAwMDAyMEQwMTI4MDAwMDAwNjcwMjBEMDEzMDAwMDAwMDY3NzkKLToxMDExMzAwMDAyMEQwMTM4MDAwMDAwNkMwMjBEMDE0MDAwMDAwMDZCNDAKLToxMDExNDAwMDAyMEQwMTQ4MDAwMDAwNjcwMjBEMDExNDAwMDAwMDU5NjMKLToxMDExNTAwMDAyMEQwMTFDMDAwMDAwNUEwMjBEMDEyNDAwMDAwMDU3N0UKLToxMDExNjAwMDAyMEQwMTJDMDAwMDAwNTcwMjBEMDEzNDAwMDAwMDVDNEMKLToxMDExNzAwMDAyMEQwMTNDMDAwMDAwNUIwMjBEMDE0NDAwMDAwMDU3MUQKLToxMDExODAwMDAyMEQwMTE4MDAwMDAwNzkwMjBEMDEyMDAwMDAwMDdBMTQKLToxMDExOTAwMDAyMEQwMTI4MDAwMDAwNzcwMjBEMDEzMDAwMDAwMDc3RTkKLToxMDExQTAwMDAyMEQwMTM4MDAwMDAwN0MwMjBEMDE0MDAwMDAwMDdCQjAKLToxMDExQjAwMDAyMEQwMTQ4MDAwMDAwNzcwMjBFMDA0QzAwMDAwMDMyRDIKLToxMDExQzAwMDAyMEUwMDk0MDIxNTAwMjAwMjBFMDA5ODAyMTUwMDIwNjUKLToxMDExRDAwMDAyMEUwMDlDMDAwMDAwMzAwMjBFMDBBMDA4MTAwMDAwNkIKLToxMDExRTAwMDAyMEUwMEE0MDAwMDAwMzMwMjBFMDBBODAwMDAwMDMwMzAKLToxMDExRjAwMDAyMEUwMEFDMDAwMDAwMzEwMjBFMDBCMDAwMDAwMDAyNDAKLToxMDEyMDAwMDAyMEUwMEI0MDAwMDAwMDQwMjBFMDBCODAwMDAwMDAwNEUKLToxMDEyMTAwMDAyMEUwMEJDMDAwMDAwMDIwMjBFMDBDMDAwMDAwMDAyMkUKLToxMDEyMjAwMDAyMEUwMEM0MDAwMDAwMDAwMjBFMDBDODAwMDAwMDAyMTAKLToxMDEyMzAwMDAyMEUwMENDMDAwMDAwMDcwMjBFMDBEMDAwMDAwMDAyRTkKLToxMDEyNDAwMDAyMEUwMEQ0MDAwMDAwMDIwMjBFMDBEODAwMDAwMDAxQ0YKLToxMDEyNTAwMDAyMEUwMEU0MDAwMDAwMDEwMjBFMDE0NDAwMDAwMDAxNDMKLToxMDEyNjAwMDAyMEUwMTRDMDAwMDAwMDEwMjBFMDE1MDAwMDAwMDAyQkQKLToxMDEyNzAwMDAyMEUwMjA0MDAwMDAwMDEwMjBFMDIwQzAwMDAwMDQwRjkKLToxMDEyODAwMDAyMEUwMjEwMDAwMDAwNDAwMjBFMDIxQzAwMDAwMDA0Q0EKLToxMDEyOTAwMDAyMEUwMjIwMDAwMDAwMjAwMjBFMDIyNDAwMDAwMDBFQjgKLToxMDEyQTAwMDAyMEUwMjI4MDAwMDAwMUIwNjBFMDMwMDAwMDAwMDEyQzAKLToxMDEyQjAwMDA0MEUwMjgwMDAxQjAyQTAwMjBFMDA1NDAwMDAwMDEwNjkKLToxMDEyQzAwMDAyMEUwMDU4MDAwMDAwMDcwMjBFMDA1QzAwMDAwMDBGMzQKLToxMDEyRDAwMDAyMEUwMDYwMDAwMDAwMTAwMjBFMDA2NDAwMDAwMDBCMEYKLToxMDEyRTAwMDA2MEUwMDY4MDAwMDAwMDMwMjBFMDBEQzAwMDAwMDAzOTAKLToxMDEyRjAwMDAyMEUwMDA0MDAwMDAwMDEwMjBFMDAwODAwMDAwMDAxQzAKLToxMDEzMDAwMDAyMEUwMDBDMDAwMDAwMDEwMjBFMDAxMDAwMDAwMDAxOUYKLToxMDEzMTAwMDAyMEUwMDE0MDAwMDAwMDEwMjBFMDAxODAwMDAwMDAxN0YKLToxMDEzMjAwMDAyMEUwMDFDMDAwMDAwMDEwMjBFMDAyMDAwMDAwMDAxNUYKLToxMDEzMzAwMDAyMEUwMDI0MDAwMDAwMDEwMjBFMDAyODAwMDAwMDAxM0YKLToxMDEzNDAwMDAyMEUwMDJDMDAwMDAwMDEwMjBFMDAzMDAwMDAwMDAxMUYKLToxMDEzNTAwMDAyMEUwMDM0MDAwMDAwMDEwMjBFMDAzODAwMDAwMDAxRkYKLToxMDEzNjAwMDAyMEUwMDNDMDAwMDAwMDEwMjBFMDA0MDAwMDAwMDAxREYKLToxMDEzNzAwMDAyMEUwMDQ0MDAwMDAwMDEwMjBFMDExMDAwMDAwMDBGRTgKLToxMDEzODAwMDAyMEUwMTE4MDAwMDAwMEUwMjBFMDEyMDAwMDAwMDAwRjUKLToxMDEzOTAwMDAyMEUwMTI4MDAwMDAwMDAwMjBFMDExNDAwMDAwMDJGQzAKLToxMDEzQTAwMDAyMEUwMTFDMDAwMDAwMkUwMjBFMDEyNDAwMDAwMDAwQUQKLToxMDEzQjAwMDAyMEUwMTJDMDAwMDAwMDAwMjBFMDExMDAwMDAwMDFGQjAKLToxMDEzQzAwMDAyMEUwMTE4MDAwMDAwMUUwMjBFMDEyMDAwMDAwMDAwQTUKLToxMDEzRDAwMDAyMEUwMTI4MDAwMDAwMDAwMjBFMDExNDAwMDAwMDNGNzAKLToxMDEzRTAwMDAyMEUwMTFDMDAwMDAwM0UwMjBFMDEyNDAwMDAwMDAwNUQKLToxMDEzRjAwMDAyMEUwMTJDMDAwMDAwMDAwMjBFMDExMDAwMDAwMDRGNDAKLToxMDE0MDAwMDAyMEUwMTE4MDAwMDAwNEUwMjBFMDEyMDAwMDAwMDAwMzQKLToxMDE0MTAwMDAyMEUwMTI4MDAwMDAwMDAwMjBFMDExNDAwMDAwMDZGRkYKLToxMDE0MjAwMDAyMEUwMTFDMDAwMDAwNkUwMjBFMDEyNDAwMDAwMDAwRUMKLToxMDE0MzAwMDAyMEUwMTJDMDAwMDAwMDAwMjBFMDExMDAwMDAwMDVGRUYKLToxMDE0NDAwMDAyMEUwMTE4MDAwMDAwNUUwMjBFMDEyMDAwMDAwMDAwRTQKLToxMDE0NTAwMDAyMEUwMTI4MDAwMDAwMDAwMjBFMDExNDAwMDAwMDdGQUYKLToxMDE0NjAwMDAyMEUwMTFDMDAwMDAwN0UwMjBFMDEyNDAwMDAwMDAwOUMKLToxMDE0NzAwMDAyMEUwMTJDMDAwMDAwMDAwNzMwMDQwMDAwRDIwMDAwMjIKLToxMDE0ODAwMDA4MzAwN0E4MDAwQjAyQkIwNzM0MDAwMDMxQjYwMDAwOEIKLToxMDE0OTAwMDA3MzQ4MDAwMzY1MDBDNkUwNzM1MDAwMDM3NTkxQTAzQTgKLToxMDE0QTAwMDA3MzU4MDAwMjg2MTI3REEwODM1RkY0MDQwMTgwMkJENjMKLToxMDE0QjAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwQzYKLToxMDE0QzAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwQTYKLToxMDE0RDAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwODYKLToxMDE0RTAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyNTEKLToxMDE0RjAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwMzEKLToxMDE1MDAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxMEUKLToxMDE1MTAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxRjIKLToxMDE1MjAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwQ0YKLToxMDE1MzAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzQUYKLToxMDE1NDAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxOTIKLToxMDE1NTAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwNkYKLToxMDE1NjAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzNEYKLToxMDE1NzAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxMzIKLToxMDE1ODAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwMEYKLToxMDE1OTAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzRUMKLToxMDE1QTAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDAzRkZGNkYKLToxMDE1QjAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwRjcKLToxMDE1QzAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwMzMKLToxMDE1RDAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwOTcKLToxMDE1RTAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBQUIKLToxMDE1RjAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwNjMKLToxMDE2MDAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDdBMTIwQkIKLToxMDE2MTAwMDBBMzM4MzAwMDAwMDAxMzgwQjMzODMwMDAwMDAxMzg4NzUKLToxMDE2MjAwMDAyMzM4M0MwMDAwMDAxRjQwQzMzODM4MDFEQ0Q2NTAwQkMKLToxMDE2MzAwMDBBMzM4MzgwMDAwNEM0QjQwQjMzODM4MDAwNEM0QjQwRDYKLToxMDE2NDAwMDBBMzMxNDgwMDAwMDAwMDAwMjMzMTQ4MDAwMDAwMDAxRkYKLToxMDE2NTAwMDA2MzIyMDAwMDAwMDAxMDIwNjMyODk4MDAwMDAwMEM4MjYKLToxMDE2NjAwMDA2MzI4OTYwMDAwMDAwMDIwNjMyMzIyODAwMDAwMDA0QzEKLToxMDE2NzAwMDA2MzIzMjAwMDAwMDAwMDkwNDMyMzIyNDAwMDEwMkJGQTkKLToxMDE2ODAwMDA2MzIzMTgwMDAwMDAwMjAwNjMyNTAwMDAwMDAwNDAwQzUKLToxMDE2OTAwMDA2MzI0MDAwMDAwMDAwMDIwNDMyNDAwODAwMDEwMkMwOEYKLToxMDE2QTAwMDA2MzI0MDBDMDAwMDAwMDMwNjMyNkI2ODAwMDAwMDAyQTYKLToxMDE2QjAwMDA0MzI2QjcwMDAwMjAyQzEwNjMyNkIxMDAwMDAwMDAyOUYKLToxMDE2QzAwMDA0MzI3NEMwMDAwMjAyQzMwMjMzMDgwMDAxMDAwMDAwQUIKLToxMDE2RDAwMDA0MzMwQzAwMDAxMDAyQzUwMjMzMDgwMDAwMDAwMDAwQjMKLToxMDE2RTAwMDA0MzMwQzQwMDAxMDAyRDUwNjMyOTAwMDAwMDAwMEEwMjgKLToxMDE2RjAwMDA2MzI5NTAwMDAwMDAwNDAwNjMyOTcwMDAwMDAwMDNDRDIKLToxMDE3MDAwMDA2MzIyNDUwMDAwMDAwQjQwNjMyMkFEMDAwMDAwMDAyNDUKLToxMDE3MTAwMDA2MzIzMDgwMDAwMDAwMjAwNjMyODAwMDAwMDAwMTJDREMKLToxMDE3MjAwMDAyMzIzMjM4MDAwMDAwMDAwNjMyNTAwMDAwMDAwMDIwNzMKLToxMDE3MzAwMDA2MzI1MTAwMDAwMDAwMjAwNjMyNTIwMDAwMDAwMDIwNTYKLToxMDE3NDAwMDA2MzI1MzAwMDAwMDAwMjAwNjMyNTQwMDAwMDAwMDIwNDIKLToxMDE3NTAwMDA2MzI1NTAwMDAwMDAwMjAwNjMyNTYwMDAwMDAwMDIwMkUKLToxMDE3NjAwMDA2MzI1NzAwMDAwMDAwMjAwNjMyNTgwMDAwMDAwMDIwMUEKLToxMDE3NzAwMDA2MzI1OTAwMDAwMDAwMjAwNjMyNUEwMDAwMDAwMDIwMDYKLToxMDE3ODAwMDA2MzI1QjAwMDAwMDAwMjAwNjMyNUMwMDAwMDAwMDIwRjIKLToxMDE3OTAwMDA2MzI1RDAwMDAwMDAwMjAwNjMyNUUwMDAwMDAwMDIwREUKLToxMDE3QTAwMDA2MzI1RjAwMDAwMDAwMjAwNjMyNkI3ODAwMDAwMDUyMTUKLToxMDE3QjAwMDA2MzI2RTA4MDAwMDAwMEMwNjMyOTI4MDAwMDAwMEEwODUKLToxMDE3QzAwMDA2MzI5NjAwMDAwMDAwNDAwNjMyOTdGMDAwMDAwMDNDMTAKLToxMDE3RDAwMDA2MzIyNzIwMDAwMDAwQjQwNjMyMkFEODAwMDAwMDAyOUEKLToxMDE3RTAwMDA2MzIzMTAwMDAwMDAwMjAwNjMyODRCMDAwMDAwMTJDRDcKLToxMDE3RjAwMDAyMzIzMjNDMDAwMDAwMDAwNjMyNTA4MDAwMDAwMDIwMUYKLToxMDE4MDAwMDA2MzI1MTgwMDAwMDAwMjAwNjMyNTI4MDAwMDAwMDIwODUKLToxMDE4MTAwMDA2MzI1MzgwMDAwMDAwMjAwNjMyNTQ4MDAwMDAwMDIwNzEKLToxMDE4MjAwMDA2MzI1NTgwMDAwMDAwMjAwNjMyNTY4MDAwMDAwMDIwNUQKLToxMDE4MzAwMDA2MzI1NzgwMDAwMDAwMjAwNjMyNTg4MDAwMDAwMDIwNDkKLToxMDE4NDAwMDA2MzI1OTgwMDAwMDAwMjAwNjMyNUE4MDAwMDAwMDIwMzUKLToxMDE4NTAwMDA2MzI1QjgwMDAwMDAwMjAwNjMyNUM4MDAwMDAwMDIwMjEKLToxMDE4NjAwMDA2MzI1RDgwMDAwMDAwMjAwNjMyNUU4MDAwMDAwMDIwMEQKLToxMDE4NzAwMDA2MzI1RjgwMDAwMDAwMjAwNjMyNkNDMDAwMDAwMDUyN0IKLToxMDE4ODAwMDA2MzI2RTM4MDAwMDAwMEMwMjMyMkEzMDAwMDAwMDAwRTAKLToxMDE4OTAwMDA2MzIzMDAwMDAwMDAwMDQwNjMyNDAxODAwMDAwMDAyNEEKLToxMDE4QTAwMDAyMzIyQTM0MDAwMDAwMDAwNjMyMzAxMDAwMDAwMDA0MkEKLToxMDE4QjAwMDA2MzI0MDI4MDAwMDAwMDIwMjMyMkEzODAwMDAwMDAwRjAKLToxMDE4QzAwMDA2MzIzMDIwMDAwMDAwMDQwNjMyNDAzODAwMDAwMDAyREEKLToxMDE4RDAwMDAyMzIyQTNDMDAwMDAwMDAwNjMyMzAzMDAwMDAwMDA0RDIKLToxMDE4RTAwMDA2MzI0MDQ4MDAwMDAwMDIwMjMyMkE0MDAwMDAwMDAwOTgKLToxMDE4RjAwMDA2MzIzMDQwMDAwMDAwMDQwNjMyNDA1ODAwMDAwMDAyNkEKLToxMDE5MDAwMDAyMzIyQTQ0MDAwMDAwMDAwNjMyMzA1MDAwMDAwMDA0NzkKLToxMDE5MTAwMDA2MzI0MDY4MDAwMDAwMDIwMjMyMkE0ODAwMDAwMDAwM0YKLToxMDE5MjAwMDA2MzIzMDYwMDAwMDAwMDQwNjMyNDA3ODAwMDAwMDAyRjkKLToxMDE5MzAwMDAyMzIyQTRDMDAwMDAwMDAwNjMyMzA3MDAwMDAwMDA0MjEKLToxMDE5NDAwMDA2MzI0MDg4MDAwMDAwMDIwNzIwMDQwMDAwNzQwMDAwRjYKLToxMDE5NTAwMDA4MjAwNzgwMDAxMDAyRTUwNzI0MDAwMDMyMjYwMDAwNUUKLToxMDE5NjAwMDA3MjQ4MDAwMjQ2RTBDOEEwODI0Q0JCMDY0RjAwMkU3QzAKLToxMDE5NzAwMDAxMjAwMDAwMDAwMDAwMDAwMTIwMDAwNDAwMDAwMDAwMjEKLToxMDE5ODAwMDAxMjAwMDA4MDAwMDAwMDAwMTIwMDAwQzAwMDAwMDAwMDEKLToxMDE5OTAwMDAxMjAwMDEwMDAwMDAwMDAwMTIwMDAxNDAwMDAwMDAwRTEKLToxMDE5QTAwMDAyMjAwMDIwMDAwMDAwMDEwMjIwMDAyNDAwMDAwMDAyQUMKLToxMDE5QjAwMDAyMjAwMDI4MDAwMDAwMDMwMjIwMDAyQzAwMDAwMDAwOEMKLToxMDE5QzAwMDAyMjAwMDMwMDAwMDAwMDQwMjIwMDAzNDAwMDAwMDAxNkEKLToxMDE5RDAwMDAyMjAwMDM4MDAwMDAwMDAwMjIwMDAzQzAwMDAwMDAxNEUKLToxMDE5RTAwMDAyMjAwMDQwMDAwMDAwMDQwMjIwMDA0NDAwMDAwMDAwMkIKLToxMDE5RjAwMDAyMjAwMDQ4MDAwMDAwMDEwMjIwMDA0QzAwMDAwMDAzMEIKLToxMDFBMDAwMDAyMjAwMDUwMDAwMDAwMDAwMjIwMDA1NDAwMDAwMDAxRUQKLToxMDFBMTAwMDAyMjAwMDU4MDAwMDAwMDQwMjIwMDA1QzAwMDAwMDAwQ0EKLToxMDFBMjAwMDAyMjAwMDYwMDAwMDAwMDEwMjIwMDA2NDAwMDAwMDAzQUEKLToxMDFBMzAwMDAyMjAwMDY4MDAwMDAwMDAwMjIwMDA2QzAwMDAwMDAxOEQKLToxMDFBNDAwMDAyMjAwMDcwMDAwMDAwMDQwMjIwMDA3NDAwMDAwMDAwNkEKLToxMDFBNTAwMDAyMjAwMDc4MDAwMDAwMDQwMjIwMDA3QzAwMDAwMDAzNDcKLToxMDFBNjAwMDA2MjAwMDgwMDAwMDAwMDIwMjIwMDBBNDAwMDAzRkZGQ0EKLToxMDFBNzAwMDAyMjAwMEE4MDAwMDAzRkYwMjIwMDIyNDAwMDAwMDAwNTIKLToxMDFBODAwMDAyMjAwMjM0MDAwMDAwMDAwMjIwMDI0QzAwMDAwMDAwOEUKLToxMDFBOTAwMDAyMjAwMkU0MDAwMEZGRkYwNjIwMjAwMDAwMDAwODAwRjIKLToxMDFBQTAwMDAyMjM4QkMwMDAwMDAwMDEwMjIzODAwMDAwMDAwMDEwMTAKLToxMDFBQjAwMDAyMjM4MDQwMDAwMDAwMTIwMjIzODA4MDAwMDAwMDMwREEKLToxMDFBQzAwMDAyMjM4MEMwMDAwMDAwMEUwMjIzODNDMDAwMDAwMUY0NDYKLToxMDFBRDAwMDAyMjMxNDgwMDAwMDAwMDEwQTIzMTQ4MDAwMDAwMDAwOEIKLToxMDFBRTAwMDA2MjIxMDAwMDAwMDAwNDIwNjIyNzAyMDAwMDAwMEM4RkMKLToxMDFBRjAwMDA2MjI3MDAwMDAwMDAwMDIwMjIyMTFFODAwMDAwMDAwMkYKLToxMDFCMDAwMDA2MjIzMDAwMDAwMDAwQzAwNjIyNDA3MDAwMDAwMDgwNjUKLToxMDFCMTAwMDA2MjI1MjgwMDAwMDAwMDQwNjIyNjcwMDAwMDAwMTAwMzcKLToxMDFCMjAwMDA2MjI5MDAwMDAwMDA0MDAwNDIyNkIwODAwMjAwMkU5NTUKLToxMDFCMzAwMDAyMjMwODAwMDEzRkZGRkYwNDIzMEMwMDAwMTAwMzA5RUIKLToxMDFCNDAwMDAyMjMwODAwMDAwMDAwMDAwNDIzMEM0MDAwMTAwMzE5QzkKLToxMDFCNTAwMDA2MjI4MDAwMDAwMDAwQTAwNjIyODUwMDAwMDAwMDQwNTAKLToxMDFCNjAwMDA2MjI4NzAwMDAwMDAwM0MwNjIyNDA0MDAwMDAwMDA2REMKLToxMDFCNzAwMDA2MjI4MjgwMDAwMDAwQTAwNjIyODYwMDAwMDAwMDQwQUQKLToxMDFCODAwMDA2MjI4N0YwMDAwMDAwM0MwNjIyNDA1ODAwMDAwMDA2QjQKLToxMDFCOTAwMDAyMjIxMTQ4MDAwMDAwMDAwNjIyMzMwMDAwMDAwMDAyNkIKLToxMDFCQTAwMDA2MjI2MDQwMDAwMDAwMzAwMjIyMTE0QzAwMDAwMDAwQkMKLToxMDFCQjAwMDA2MjIzMzA4MDAwMDAwMDIwNjIyNjEwMDAwMDAwMDMwMDcKLToxMDFCQzAwMDAyMjIxMTUwMDAwMDAwMDAwNjIyMzMxMDAwMDAwMDAyMjMKLToxMDFCRDAwMDA2MjI2MUMwMDAwMDAwMzAwMjIyMTE1NDAwMDAwMDAwMDMKLToxMDFCRTAwMDA2MjIzMzE4MDAwMDAwMDIwNjIyNjI4MDAwMDAwMDMwNDYKLToxMDFCRjAwMDAyMjIxMTU4MDAwMDAwMDAwNjIyMzMyMDAwMDAwMDAyREIKLToxMDFDMDAwMDA2MjI2MzQwMDAwMDAwMzAwMjIyMTE1QzAwMDAwMDAwNDgKLToxMDFDMTAwMDA2MjIzMzI4MDAwMDAwMDIwNjIyNjQwMDAwMDAwMDMwODMKLToxMDFDMjAwMDAyMjIxMTYwMDAwMDAwMDAwNjIyMzMzMDAwMDAwMDAyOTIKLToxMDFDMzAwMDA2MjI2NEMwMDAwMDAwMzAwMjIyMTE2NDAwMDAwMDAwOEYKLToxMDFDNDAwMDA2MjIzMzM4MDAwMDAwMDIwNjIyNjU4MDAwMDAwMDMwQzIKLToxMDFDNTAwMDAyMTYxMDAwMDAwMDAwMjAwMjE3MDAwODAwMDAwMDAyMTkKLToxMDFDNjAwMDAyMTcwMDJDMDAwMDAwMDMwMjE3MDAzQzAwMDAwMDA0RDMKLToxMDFDNzAwMDAyMTcwMDQ0MDAwMDAwMDgwMjE3MDA0ODAwMDAwMDAyOUMKLToxMDFDODAwMDAyMTcwMDRDMDAwMDAwOTAwMjE3MDA1MDAwMDAwMDkwNjYKLToxMDFDOTAwMDAyMTcwMDU0MDA4MDAwOTAwMjE3MDA1ODA4MTQwMDAwM0EKLToxMDFDQTAwMDAyMTcwMDYwMDAwMDAwOEEwMjE3MDA2NDAwMDAwMDgwMzQKLToxMDFDQjAwMDAyMTcwMDY4MDAwMDAwOTAwMjE3MDA2QzAwMDAwMDgwMEUKLToxMDFDQzAwMDAyMTcwMDcwMDAwMDAwMDYwMjE3MDA3ODAwMDAwN0QwMUQKLToxMDFDRDAwMDAyMTcwMDdDMDAwMDA3NkMwMjE3MDAzODAwN0MxMDA0MUIKLToxMDFDRTAwMDAyMTcwMDA0MDAwMDAwMEYwNjE2NDAyNDAwMDAwMDAyNDYKLToxMDFDRjAwMDAyMTY0MDcwMDAwMDAwMUMwMjE2NDIwODAwMDAwMDAxOUQKLToxMDFEMDAwMDAyMTY0MjEwMDAwMDAwMDEwMjE2NDIyMDAwMDAwMDAxRUQKLToxMDFEMTAwMDAyMTY0MjI4MDAwMDAwMDEwMjE2NDIzMDAwMDAwMDAxQjUKLToxMDFEMjAwMDAyMTY0MjM4MDAwMDAwMDEwMjE2NDI2MDAwMDAwMDAyNjQKLToxMDFEMzAwMDBDMTY0MDFDMDAwM0QwOTAwQTE2NDAxQzAwMDAwMDlDQUEKLToxMDFENDAwMDBCMTY0MDFDMDAwMDA5QzQwMjE2NDAzMDAwMDAwMDA4QjkKLToxMDFENTAwMDAyMTY0MDM0MDAwMDAwMEMwMjE2NDAzODAwMDAwMDEwNEIKLToxMDFENjAwMDAyMTY0MDQ0MDAwMDAwMjAwMjE2NDAwMDAwMDAwMDAxNUUKLToxMDFENzAwMDAyMTY0MEQ4MDAwMDAwMDEwMjE2NDAwODAwMDAwMDAxRDEKLToxMDFEODAwMDAyMTY0MDBDMDAwMDAwMDEwMjE2NDAxMDAwMDAwMDAxODUKLToxMDFEOTAwMDAyMTY0MjQwMDAwMDAwMDAwMjE2NDI0ODAwMDAwMDAwMDcKLToxMDFEQTAwMDA2MTY0MjcwMDAwMDAwMDIwMjE2NDI1MDAwMDAwMDAwQjkKLToxMDFEQjAwMDAyMTY0MjU4MDAwMDAwMDAwNjE2NDI4MDAwMDAwMDAyOTEKLToxMDFEQzAwMDAyMTY2MDA4MDAwMDA0MjQwMjE2NjAwQzAwMDAwNDEwRDMKLToxMDFERDAwMDAyMTY2MDEwMDAwMDA0MTQwMjE2NjAxQzAwMDBGRkZGRDEKLToxMDFERTAwMDAyMTY2MDIwMDAwMEZGRkYwMjE2NjAyNDAwMDBGRkZGQzMKLToxMDFERjAwMDAyMTY2MDI4MDAwMEZGRkYwMjE2NjAzODAwMDAwMDIwNzUKLToxMDFFMDAwMDAyMTY2MDNDMDAwMDAwMjAwMjE2NjA0MDAwMDAwMDM0MTIKLToxMDFFMTAwMDAyMTY2MDQ0MDAwMDAwMzUwMjE2NjA0ODAwMDAwMDIzRUUKLToxMDFFMjAwMDAyMTY2MDRDMDAwMDAwMjQwMjE2NjA1MDAwMDAwMDI1REQKLToxMDFFMzAwMDAyMTY2MDU0MDAwMDAwMjYwMjE2NjA1ODAwMDAwMDI3QjkKLToxMDFFNDAwMDAyMTY2MDVDMDAwMDAwMjkwMjE2NjA2MDAwMDAwMDJBOTMKLToxMDFFNTAwMDAyMTY2MDY0MDAwMDAwMkIwMjE2NjA2ODAwMDAwMDJDNkYKLToxMDFFNjAwMDAyMTY2MDZDMDAwMDAwMkQwNjE2NjA3MDAwMDAwMDUyMjMKLToxMDFFNzAwMDAyMTY2MUI4MDAwMDAwMDEwNjE2NjFCQzAwMDAwMDFGRDgKLToxMDFFODAwMDAyMTY2MjM4MDdGRkZGRkYwMjE2NjIzQzAwMDAwMDNGQTcKLToxMDFFOTAwMDAyMTY2MjQwMDdGRkZGRkYwMjE2NjI0NDAwMDAwMDBGQjcKLToxMDFFQTAwMDAxMTY2MjQ4MDAwMDAwMDAwMTE2NjI0QzAwMDAwMDAwQUMKLToxMDFFQjAwMDAxMTY2MjUwMDAwMDAwMDAwMTE2NjI1NDAwMDAwMDAwOEMKLToxMDFFQzAwMDAxMTY2MjU4MDAwMDAwMDAwMTE2NjI1QzAwMDAwMDAwNkMKLToxMDFFRDAwMDAxMTY2MjYwMDAwMDAwMDAwMTE2NjI2NDAwMDAwMDAwNEMKLToxMDFFRTAwMDAxMTY2MjY4MDAwMDAwMDAwMTE2NjI2QzAwMDAwMDAwMkMKLToxMDFFRjAwMDAxMTY2MjcwMDAwMDAwMDAwMTE2NjI3NDAwMDAwMDAwMEMKLToxMDFGMDAwMDAxMTY2Mjc4MDAwMDAwMDAwMTE2NjI3QzAwMDAwMDAwRUIKLToxMDFGMTAwMDBDMTY2MDAwMDAwMDAzRTgwQTE2NjAwMDAwMDAwMDAxRDMKLToxMDFGMjAwMDBCMTY2MDAwMDAwMDAwMEEwMjE2ODA0MDAwMDAwMDA2NDgKLToxMDFGMzAwMDAyMTY4MDQ0MDAwMDAwMDUwMjE2ODA0ODAwMDAwMDBBRDYKLToxMDFGNDAwMDAyMTY4MDRDMDAwMDAwMDUwMjE2ODA1NDAwMDAwMDAyQkEKLToxMDFGNTAwMDAyMTY4MENDMDAwMDAwMDQwMjE2ODBEMDAwMDAwMDA0QUQKLToxMDFGNjAwMDAyMTY4MEQ0MDAwMDAwMDQwMjE2ODBEODAwMDAwMDA0OEQKLToxMDFGNzAwMDAyMTY4MERDMDAwMDAwMDQwMjE2ODBFMDAwMDAwMDA0NkQKLToxMDFGODAwMDAyMTY4MEU0MDAwMDAwMDQwMjE2ODBFODAwMDAwMDA0NEQKLToxMDFGOTAwMDAyMTY4ODA0MDAwMDAwMDQwMjE2ODAzMDAwMDAwMDdDNTUKLToxMDFGQTAwMDAyMTY4MDM0MDAwMDAwM0QwMjE2ODAzODAwMDAwMDNGMTkKLToxMDFGQjAwMDAyMTY4MDNDMDAwMDAwOUMwMjE2ODBGMDAwMDAwMDA3MjIKLToxMDFGQzAwMDA2MTY4MEY0MDAwMDAwMDUwMjE2ODgwQzAxMDEwMTAxQ0MKLToxMDFGRDAwMDAyMTY4MTA4MDAwMDAwMDAwMjE2ODEwQzAwMDAwMDA0QjcKLToxMDFGRTAwMDAyMTY4MTEwMDAwMDAwMDQwMjE2ODExNDAwMDAwMDAyOTUKLToxMDFGRjAwMDAyMTY4ODEwMDgwMTIwMDQwMjE2ODExODAwMDAwMDA1NEUKLToxMDIwMDAwMDAyMTY4MTFDMDAwMDAwMDUwMjE2ODEyMDAwMDAwMDA1NTgKLToxMDIwMTAwMDAyMTY4MTI0MDAwMDAwMDUwMjE2ODgyQzIwMDgxMDAxRjkKLToxMDIwMjAwMDAyMTY4MTI4MDAwMDAwMDgwMjE2ODEyQzAwMDAwMDA2MUMKLToxMDIwMzAwMDAyMTY4MTMwMDAwMDAwMDcwMjE2ODEzNDAwMDAwMDAwMDMKLToxMDIwNDAwMDAyMTY4ODMwMDEwMTAxMjAwNjE2ODEzODAwMDAwMDA0QzQKLToxMDIwNTAwMDAyMTY4ODM0MDEwMTAxMDEwMjE2ODE0ODAwMDAwMDAwQzcKLToxMDIwNjAwMDAyMTY4MTRDMDAwMDAwMDQwMjE2ODE1MDAwMDAwMDA0OUEKLToxMDIwNzAwMDAyMTY4MTU0MDAwMDAwMDIwMjE2ODgzODA4MDEyMDA0NkMKLToxMDIwODAwMDAyMTY4MTU4MDAwMDAwMDUwMjE2ODE1QzAwMDAwMDA1NjAKLToxMDIwOTAwMDAyMTY4MTYwMDAwMDAwMDUwMjE2ODE2NDAwMDAwMDA1NDAKLToxMDIwQTAwMDAyMTY4ODNDMjAwODEwMDEwMjE2ODE2ODAwMDAwMDA4MTIKLToxMDIwQjAwMDAyMTY4MTZDMDAwMDAwMDYwMjE2ODE3MDAwMDAwMDA3MDUKLToxMDIwQzAwMDAyMTY4MTc0MDAwMDAwMDEwMjE2ODg0MDAxMDEwMTIwRkYKLToxMDIwRDAwMDAyMTY4MTc4MDAwMDAwMDEwMjE2ODE3QzAwMDAwMDAxRDgKLToxMDIwRTAwMDAyMTY4MTgwMDAwMDAwMDEwMjE2ODE4NDAwMDAwMDAxQjgKLToxMDIwRjAwMDAyMTY4ODQ0MDEwMTAxMDEwMjE2ODE4ODAwMDAwMDAxRDYKLToxMDIxMDAwMDAyMTY4MThDMDAwMDAwMDQwMjE2ODE5MDAwMDAwMDA0NzkKLToxMDIxMTAwMDAyMTY4MTk0MDAwMDAwMDIwMjE2ODg0ODA4MDEyMDA0N0IKLToxMDIxMjAwMDAyMTY4MTk4MDAwMDAwMDUwMjE2ODE5QzAwMDAwMDA1M0YKLToxMDIxMzAwMDAyMTY4MUEwMDAwMDAwMDUwMjE2ODFBNDAwMDAwMDA1MUYKLToxMDIxNDAwMDAyMTY4ODE0MjAwODEwMDEwMjE2ODFBODAwMDAwMDA4NTkKLToxMDIxNTAwMDAyMTY4MUFDMDAwMDAwMDYwMjE2ODFCMDAwMDAwMDA3RTQKLToxMDIxNjAwMDAyMTY4MUI0MDAwMDAwMDEwMjE2ODgxODAxMDEwMTIwNDYKLToxMDIxNzAwMDAyMTY4MUI4MDAwMDAwMDEwMjE2ODFCQzAwMDAwMDAxQjcKLToxMDIxODAwMDAyMTY4MUMwMDAwMDAwMDEwMjE2ODFDNDAwMDAwMDAxOTcKLToxMDIxOTAwMDAyMTY4ODFDMDEwMTAxMDEwMjE2ODFDODAwMDAwMDAxMUQKLToxMDIxQTAwMDAyMTY4MUNDMDAwMDAwMDQwMjE2ODFEMDAwMDAwMDA0NTkKLToxMDIxQjAwMDAyMTY4MUQ0MDAwMDAwMDIwMjE2ODgyMDA4MDEyMDA0QzMKLToxMDIxQzAwMDAyMTY4MUQ4MDAwMDAwMDUwMjE2ODFEQzAwMDAwMDA1MUYKLToxMDIxRDAwMDAyMTY4MUUwMDAwMDAwMDUwMjE2ODFFNDAwMDAwMDA1RkYKLToxMDIxRTAwMDAyMTY4ODI0MjAwODEwMDEwMjE2ODFFODAwMDAwMDA4NjkKLToxMDIxRjAwMDAyMTY4MUVDMDAwMDAwMDYwMjE2ODFGMDAwMDAwMDA3QzQKLToxMDIyMDAwMDAyMTZFNDBDMDAwMDAwMDAwMjE2ODgyODAxMDEwMTIwREIKLToxMDIyMTAwMDA2MTZFNDEwMDAwMDAwMDQwMjE2RTAwMDAxMDEwMTAxQUUKLToxMDIyMjAwMDAyMTZFNDIwMDAwMDAwMDAwMjE2RTQyNDAwMDAwMDA0NkUKLToxMDIyMzAwMDAyMTZFNDI4MDAwMDAwMDQwMjE2RTQyQzAwMDAwMDAyNEMKLToxMDIyNDAwMDAyMTZFMDA0MDgwMTIwMDQwMjE2RTQzMDAwMDAwMDA1MzQKLToxMDIyNTAwMDAyMTZFNDM0MDAwMDAwMDUwMjE2RTQzODAwMDAwMDA1MTAKLToxMDIyNjAwMDAyMTZFNDNDMDAwMDAwMDUwMjE2RTAwODIwMDgxMDAxRjgKLToxMDIyNzAwMDAyMTZFNDQwMDAwMDAwMDgwMjE2RTQ0NDAwMDAwMDA2RDQKLToxMDIyODAwMDAyMTZFNDQ4MDAwMDAwMDcwMjE2RTQ0QzAwMDAwMDAwQkIKLToxMDIyOTAwMDAyMTZFMDBDMDEwMTAxMjAwNjE2RTQ1MDAwMDAwMDA0QzMKLToxMDIyQTAwMDAyMTZFMDEwMDEwMTAxMDEwMjE2RTQ2MDAwMDAwMDAwQzYKLToxMDIyQjAwMDAyMTZFNDY0MDAwMDAwMDQwMjE2RTQ2ODAwMDAwMDA0NTIKLToxMDIyQzAwMDAyMTZFNDZDMDAwMDAwMDIwMjE2RTAxNDA4MDEyMDA0NkIKLToxMDIyRDAwMDAyMTZFNDcwMDAwMDAwMDUwMjE2RTQ3NDAwMDAwMDA1MTgKLToxMDIyRTAwMDAyMTZFNDc4MDAwMDAwMDUwMjE2RTQ3QzAwMDAwMDA1RjgKLToxMDIyRjAwMDAyMTZFMDE4MjAwODEwMDEwMjE2RTQ4MDAwMDAwMDA4MTEKLToxMDIzMDAwMDAyMTZFNDg0MDAwMDAwMDYwMjE2RTQ4ODAwMDAwMDA3QkMKLToxMDIzMTAwMDAyMTZFNDhDMDAwMDAwMDEwMjE2RTAxQzAxMDEwMTIwRkQKLToxMDIzMjAwMDAyMTZFNDkwMDAwMDAwMDEwMjE2RTQ5NDAwMDAwMDAxOEYKLToxMDIzMzAwMDAyMTZFNDk4MDAwMDAwMDEwMjE2RTQ5QzAwMDAwMDAxNkYKLToxMDIzNDAwMDAyMTZFMDIwMDEwMTAxMDEwMjE2RTRBMDAwMDAwMDAxRDQKLToxMDIzNTAwMDAyMTZFNEE0MDAwMDAwMDQwMjE2RTRBODAwMDAwMDA0MzEKLToxMDIzNjAwMDAyMTZFNEFDMDAwMDAwMDIwMjE2RTAyNDA4MDEyMDA0N0EKLToxMDIzNzAwMDAyMTZFNEIwMDAwMDAwMDUwMjE2RTRCNDAwMDAwMDA1RjcKLToxMDIzODAwMDAyMTZFNEI4MDAwMDAwMDUwMjE2RTRCQzAwMDAwMDA1RDcKLToxMDIzOTAwMDAyMTZFMDI4MjAwODEwMDEwMjE2RTRDMDAwMDAwMDA4MjAKLToxMDIzQTAwMDAyMTZFNEM0MDAwMDAwMDYwMjE2RTRDODAwMDAwMDA3OUMKLToxMDIzQjAwMDAyMTZFNENDMDAwMDAwMDEwMjE2RTAyQzAxMDEwMTIwMEQKLToxMDIzQzAwMDAyMTZFNEQwMDAwMDAwMDEwMjE2RTRENDAwMDAwMDAxNkYKLToxMDIzRDAwMDAyMTZFNEQ4MDAwMDAwMDEwMjE2RTREQzAwMDAwMDAxNEYKLToxMDIzRTAwMDAyMTZFMDMwMDEwMTAxMDEwMjE2RTRFMDAwMDAwMDAxRTQKLToxMDIzRjAwMDAyMTZFNEU0MDAwMDAwMDQwMjE2RTRFODAwMDAwMDA0MTEKLToxMDI0MDAwMDAyMTZFNEVDMDAwMDAwMDIwMjE2RTAzNDA4MDEyMDA0ODkKLToxMDI0MTAwMDAyMTZFNEYwMDAwMDAwMDUwMjE2RTRGNDAwMDAwMDA1RDYKLToxMDI0MjAwMDAyMTZFNEY4MDAwMDAwMDUwMjE2RTRGQzAwMDAwMDA1QjYKLToxMDI0MzAwMDAyMTZFMDM4MjAwODEwMDEwMjE2RTUwMDAwMDAwMDA4MkUKLToxMDI0NDAwMDAyMTZFNTA0MDAwMDAwMDYwMjE2RTUwODAwMDAwMDA3NzkKLToxMDI0NTAwMDAyMTZFMDNDMDEwMTAxMjAwMjE2ODI0MDAwM0YwMDNGQ0QKLToxMDI0NjAwMDAyMTY4MjQ0MDAwMDAwMDAwMjE2RTUyNDAwM0YwMDNGRUYKLToxMDI0NzAwMDAyMTZFNTI4MDAwMDAwMDAwMjE2ODI0ODAwMDAwMDAwNTUKLToxMDI0ODAwMDAyMTY4MjRDMDAzRjAwM0YwMjE2RTUyQzAwMDAwMDAwQkYKLToxMDI0OTAwMDAyMTZFNTMwMDAzRjAwM0YwMjE2ODI1MDAxMDAwMTAwQTUKLToxMDI0QTAwMDAyMTY4MjU0MDEwMDAxMDAwMjE2RTUzNDAxMDAwMTAwMDkKLToxMDI0QjAwMDAyMTZFNTM4MDEwMDAxMDAwNjE2ODI1ODAwMDAwMDAyRUQKLToxMDI0QzAwMDAyMTZFNTNDMDAwMDAwMDAwMjE2RTU0MDAwMDAwMDAwOTYKLToxMDI0RDAwMDAyMTY4MjYwMDBDMDAwQzAwMjE2ODI2NDAwQzAwMEMwMDQKLToxMDI0RTAwMDAyMTZFNTQ0MDBDMDAwQzAwMjE2RTU0ODAwQzAwMEMwNjYKLToxMDI0RjAwMDAyMTY4MjY4MUUwMDFFMDAwMjE2ODI2QzFFMDAxRTAwNUMKLToxMDI1MDAwMDAyMTZFNTRDMUUwMDFFMDAwMjE2RTU1MDFFMDAxRTAwQkQKLToxMDI1MTAwMDAyMTY4MjcwNDAwMDQwMDAwMjE2ODI3NDQwMDA0MDAwQTMKLToxMDI1MjAwMDAyMTZFNTU0NDAwMDQwMDAwMjE2RTU1ODQwMDA0MDAwMDUKLToxMDI1MzAwMDAyMTY4Mjc4ODAwMDgwMDAwMjE2ODI3QzgwMDA4MDAwNzMKLToxMDI1NDAwMDAyMTZFNTVDODAwMDgwMDAwMjE2RTU2MDgwMDA4MDAwRDUKLToxMDI1NTAwMDAyMTY4MjgwMjAwMDIwMDAwMjE2ODI4NDIwMDAyMDAwQzMKLToxMDI1NjAwMDAyMTZFNTY0MjAwMDIwMDAwMjE2RTU2ODIwMDAyMDAwMjUKLToxMDI1NzAwMDA2MTY4Mjg4MDAwMDAwMDIwMjE2RTU2QzAwMDAwMDAwQ0EKLToxMDI1ODAwMDAyMTZFNTcwMDAwMDAwMDAwMjE2ODI5MDAwMDAwMDAwQjQKLToxMDI1OTAwMDAyMTY4Mjk0MDAwMDAwMDAwMjE2RTU3NDAwMDAwMDAwOUMKLToxMDI1QTAwMDAyMTZFNTc4MDAwMDAwMDAwMjE2ODI5ODAwMDAwMDAwODQKLToxMDI1QjAwMDAyMTY4MjlDMDAwMDAwMDAwMjE2RTU3QzAwMDAwMDAwNkMKLToxMDI1QzAwMDAyMTZFNTgwMDAwMDAwMDAwMjE2ODJBMDAwMDAwMDAwNTQKLToxMDI1RDAwMDAyMTY4MkE0MDAwMDAwMDEwNjE2ODJBODAwMDAwMDBBNkMKLToxMDI1RTAwMDAyMTY4MUY0MDAwMDBDMDgwMjE2ODFGODAwMDAwMDQwNzkKLToxMDI1RjAwMDAyMTY4MUZDMDAwMDAxMDAwMjE2ODIwMDAwMDAwMDIwOEIKLToxMDI2MDAwMDAyMTY4MjA0MDAwMDAwMTcwMjE2ODIwODAwMDAwMDgwRjMKLToxMDI2MTAwMDAyMTY4MjBDMDAwMDAyMDAwMjE2ODIxMDAwMDAwMDAwNjgKLToxMDI2MjAwMDAyMTY4MjE4MDFGRjAxRkYwMjE2ODIxNDAxRkYwMUZGNEEKLToxMDI2MzAwMDAyMTZFNTEwMDFGRjAxRkYwMjE2RTUwQzAxRkYwMUZGODQKLToxMDI2NDAwMDAyMTY4MjNDMDAwMDAwMTMwMjE2ODA5MDAwMDAwMTNGMzkKLToxMDI2NTAwMDAyMTY4MDYwMDAwMDAxNDAwMjE2ODA2NDAwMDAwMTQwMDQKLToxMDI2NjAwMDA2MTY4MDY4MDAwMDAwMDIwMjE2ODA3MDAwMDAwMEMwOUMKLToxMDI2NzAwMDA2MTY4MDc0MDAwMDAwMDcwMjE2ODA5QzAwMDAwMDQ4QzcKLToxMDI2ODAwMDAyMTY4MEEwMDAwMDAwNDgwNjE2ODBBNDAwMDAwMDAyODgKLToxMDI2OTAwMDAyMTY4MEFDMDAwMDAwNDgwNjE2ODBCMDAwMDAwMDA3NUIKLToxMDI2QTAwMDAyMTY4MjM4MDAwMDgwMDAwMjE2ODIzNDAwMDAyNUU0MDEKLToxMDI2QjAwMDAyMTY4MDk0MDAwMDdGRkYwMjE2ODIyMDAwMDcwMDA3QTgKLToxMDI2QzAwMDAyMTY4MjFDMDAwNzAwMDcwMjE2RTUxODAwMDcwMDA3MjMKLToxMDI2RDAwMDAyMTZFNTE0MDAwNzAwMDcwMjE2ODIyODAwMDAwMDAwMTkKLToxMDI2RTAwMDAyMTY4MjI0RkZGRkZGRkYwMjE2RTUyMDAwMDAwMDAwMTMKLToxMDI2RjAwMDAyMTZFNTFDRkZGRkZGRkYwMjE2RTZCQzAwMDAwMDAwMEIKLToxMDI3MDAwMDAyMTZFNkMwMDAwMDAwMDIwMjE2RTZDNDAwMDAwMDAxNDYKLToxMDI3MTAwMDAyMTZFNkM4MDAwMDAwMDMwMjE2RTZDQzAwMDAwMDA0MjIKLToxMDI3MjAwMDAyMTZFNkQwMDAwMDAwMDYwMjE2RTZENDAwMDAwMDA1RkUKLToxMDI3MzAwMDAyMTZFNkQ4MDAwMDAwMDcwMjE2ODBFQzAwMDAwMEZGMzkKLToxMDI3NDAwMDAyMTQwMDAwMDAwMDAwMDEwMjE0MDAwQzAwMDAwMDAxNEYKLToxMDI3NTAwMDAyMTQwMDQwMDAwMDAwMDEwMjE0MDA0NDAwMDA3RkZGNEEKLToxMDI3NjAwMDAyMTQwMDBDMDAwMDAwMDAwMjE0MDAwMDAwMDAwMDAwMzEKLToxMDI3NzAwMDAyMTQwMDZDMDAwMDAwMDAwMjE0MDAwNDAwMDAwMDAxQkMKLToxMDI3ODAwMDAyMTQwMDMwMDAwMDAwMDEwMjE0MDAwNDAwMDAwMDAwRTgKLToxMDI3OTAwMDAyMTQwMDVDMDAwMDAwMDAwMjE0MDAwODAwMDAwMDAxQTgKLToxMDI3QTAwMDAyMTQwMDM0MDAwMDAwMDEwMjE0MDAwODAwMDAwMDAwQzAKLToxMDI3QjAwMDAyMTQwMDYwMDAwMDAwMDAwMjAyMDA1ODAwMDAwMDMyMTUKLToxMDI3QzAwMDAyMDIwMEEwMDMxNTAwMjAwMjAyMDBBNDAzMTUwMDIwNEQKLToxMDI3RDAwMDAyMDIwMEE4MDEwMDAwMzAwMjAyMDBBQzA4MTAwMDAwNTQKLToxMDI3RTAwMDAyMDIwMEIwMDAwMDAwMzMwMjAyMDBCNDAwMDAwMDMwMUEKLToxMDI3RjAwMDAyMDIwMEI4MDAwMDAwMzEwMjAyMDBCQzAwMDAwMDAzMjkKLToxMDI4MDAwMDAyMDIwMEMwMDAwMDAwMDYwMjAyMDBDNDAwMDAwMDAzMzMKLToxMDI4MTAwMDAyMDIwMEM4MDAwMDAwMDMwMjAyMDBDQzAwMDAwMDAyMTcKLToxMDI4MjAwMDAyMDIwMEQwMDAwMDAwMDAwMjAyMDBENDAwMDAwMDAyRkEKLToxMDI4MzAwMDAyMDIwMERDMDAwMDAwMDAwMjAyMDBFMDAwMDAwMDA2Q0UKLToxMDI4NDAwMDAyMDIwMEU0MDAwMDAwMDQwMjAyMDBFODAwMDAwMDAyQUUKLToxMDI4NTAwMDAyMDIwMEVDMDAwMDAwMDIwMjAyMDBGMDAwMDAwMDAxOTEKLToxMDI4NjAwMDAyMDIwMEZDMDAwMDAwMDYwMjAyMDEyMDAwMDAwMDAwM0QKLToxMDI4NzAwMDAyMDIwMTM0MDAwMDAwMDIwMjAyMDFCMDAwMDAwMDAxNjcKLToxMDI4ODAwMDAyMDIwMjBDMDAwMDAwMDEwMjAyMDIxNDAwMDAwMDAxMUEKLToxMDI4OTAwMDAyMDIwMjE4MDAwMDAwMDIwMjAyMDQwNDAwMDAwMDAxMEIKLToxMDI4QTAwMDAyMDIwNDBDMDAwMDAwNDAwMjAyMDQxMDAwMDAwMDQwN0MKLToxMDI4QjAwMDAyMDIwNDFDMDAwMDAwMDQwMjAyMDQyMDAwMDAwMDIwQTgKLToxMDI4QzAwMDAyMDIwNDI0MDAwMDAwMDIwMjAyMDQyODAwMDAwMDIwOEEKLToxMDI4RDAwMDA2MDIwNTAwMDAwMDAwMTIwNDAyMDQ4MDAwMUYwMzI5MDQKLToxMDI4RTAwMDAyMDIwMDYwMDAwMDAwMEYwMjAyMDA2NDAwMDAwMDA3MDYKLToxMDI4RjAwMDAyMDIwMDY4MDAwMDAwMEIwMjAyMDA2QzAwMDAwMDBFRTMKLToxMDI5MDAwMDAyMDIwMDcwMDAwMDAwMEUwNjAyMDA3NDAwMDAwMDAzQzYKLToxMDI5MTAwMDAyMDIwMEY0MDAwMDAwMDQwMjAyMDAwNDAwMDAwMDAxQjIKLToxMDI5MjAwMDAyMDIwMDA4MDAwMDAwMDEwMjAyMDAwQzAwMDAwMDAxODkKLToxMDI5MzAwMDAyMDIwMDEwMDAwMDAwMDEwMjAyMDAxNDAwMDAwMDAxNjkKLToxMDI5NDAwMDAyMDIwMDE4MDAwMDAwMDEwMjAyMDAxQzAwMDAwMDAxNDkKLToxMDI5NTAwMDAyMDIwMDIwMDAwMDAwMDEwMjAyMDAyNDAwMDAwMDAxMjkKLToxMDI5NjAwMDAyMDIwMDI4MDAwMDAwMDEwMjAyMDAyQzAwMDAwMDAxMDkKLToxMDI5NzAwMDAyMDIwMDMwMDAwMDAwMDEwMjAyMDAzNDAwMDAwMDAxRTkKLToxMDI5ODAwMDAyMDIwMDM4MDAwMDAwMDEwMjAyMDAzQzAwMDAwMDAxQzkKLToxMDI5OTAwMDAyMDIwMDQwMDAwMDAwMDEwMjAyMDA0NDAwMDAwMDAxQTkKLToxMDI5QTAwMDAyMDIwMDQ4MDAwMDAwMDEwMjAyMDA0QzAwMDAwMDAxODkKLToxMDI5QjAwMDAyMDIwMDUwMDAwMDAwMDEwMjAyMDEwODAwMDAwMEM4RUQKLToxMDI5QzAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwMUYKLToxMDI5RDAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyNEIKLToxMDI5RTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGMUMKLToxMDI5RjAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDAwRTIKLToxMDJBMDAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyQ0EKLToxMDJBMTAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwMTQKLToxMDJBMjAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyRTAKLToxMDJBMzAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGQjYKLToxMDJBNDAwMDAyMDIwMTA0MDAwMDAwMDAwMjAyMDEwODAwMDAwMEM4QTgKLToxMDJBNTAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwOEUKLToxMDJBNjAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyQkEKLToxMDJBNzAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGOEIKLToxMDJBODAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDAwNTEKLToxMDJBOTAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyM0EKLToxMDJBQTAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwODQKLToxMDJBQjAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyNTAKLToxMDJBQzAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGMjYKLToxMDJBRDAwMDAyMDIwMTA0MDAwMDAwMDAwMjAyMDEwODAwMDAwMEM4MTgKLToxMDJBRTAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwRkUKLToxMDJBRjAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyMkEKLToxMDJCMDAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGRkEKLToxMDJCMTAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDAwQzAKLToxMDJCMjAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyQTkKLToxMDJCMzAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwRjMKLToxMDJCNDAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyQkYKLToxMDJCNTAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGOTUKLToxMDJCNjAwMDAyMDIwMTA0MDAwMDAwMDAwMjAyMDEwODAwMDAwMEM4ODcKLToxMDJCNzAwMDAyMDIwMTE4MDAwMDAwMDIwMjAyMDFDNDAwMDAwMDAwNkQKLToxMDJCODAwMDAyMDIwMUNDMDAwMDAwMDAwMjAyMDFENDAwMDAwMDAyOTkKLToxMDJCOTAwMDAyMDIwMURDMDAwMDAwMDIwMjAyMDFFNDAwMDAwMEZGNkEKLToxMDJCQTAwMDAyMDIwMUVDMDAwMDAwRkYwMjAyMDEwMDAwMDAwMDAwMzAKLToxMDJCQjAwMDAyMDIwMTBDMDAwMDAwQzgwMjAyMDExQzAwMDAwMDAyMTkKLToxMDJCQzAwMDAyMDIwMUM4MDAwMDAwMDAwMjAyMDFEMDAwMDAwMDAwNjMKLToxMDJCRDAwMDAyMDIwMUQ4MDAwMDAwMDIwMjAyMDFFMDAwMDAwMDAyMkYKLToxMDJCRTAwMDAyMDIwMUU4MDAwMDAwRkYwMjAyMDFGMDAwMDAwMEZGMDUKLToxMDJCRjAwMDAyMDIwMTA0MDAwMDAwMDAwNzI4MDQwMDAwQkQwMDAwREMKLToxMDJDMDAwMDA4MjgwN0E4MDAwQjAzNDgwNzJDMDAwMDM0MDYwMDAwMjIKLToxMDJDMTAwMDA3MkM4MDAwMzc5NjBEMDIwNzJEMDAwMDNCQzMxQUU4RjEKLToxMDJDMjAwMDA3MkQ4MDAwMzgyNjI5RDkwNzJFMDAwMDEyNDUzN0UzRUEKLToxMDJDMzAwMDA4MkUyMjIwM0JCQzAzNEEwMTI4MDAwMDAwMDAwMDAwQUYKLToxMDJDNDAwMDAxMjgwMDA0MDAwMDAwMDAwMTI4MDAwODAwMDAwMDAwMjYKLToxMDJDNTAwMDAxMjgwMDBDMDAwMDAwMDAwMTI4MDAxMDAwMDAwMDAwMDYKLToxMDJDNjAwMDAxMjgwMDE0MDAwMDAwMDAwMjI4MDAyMDAwMDAwMDAxREMKLToxMDJDNzAwMDAyMjgwMDI0MDAwMDAwMDIwMjI4MDAyODAwMDAwMDAzQUYKLToxMDJDODAwMDAyMjgwMDJDMDAwMDAwMDAwMjI4MDAzMDAwMDAwMDA0OTAKLToxMDJDOTAwMDAyMjgwMDM0MDAwMDAwMDEwMjI4MDAzODAwMDAwMDAwNzMKLToxMDJDQTAwMDAyMjgwMDNDMDAwMDAwMDEwMjI4MDA0MDAwMDAwMDA0NEYKLToxMDJDQjAwMDAyMjgwMDQ0MDAwMDAwMDAwMjI4MDA0ODAwMDAwMDAxMzMKLToxMDJDQzAwMDAyMjgwMDRDMDAwMDAwMDMwMjI4MDA1MDAwMDAwMDAwMTEKLToxMDJDRDAwMDAyMjgwMDU0MDAwMDAwMDEwMjI4MDA1ODAwMDAwMDA0RUYKLToxMDJDRTAwMDAyMjgwMDVDMDAwMDAwMDAwMjI4MDA2MDAwMDAwMDAxRDMKLToxMDJDRjAwMDAyMjgwMDY0MDAwMDAwMDMwMjI4MDA2ODAwMDAwMDAwQjEKLToxMDJEMDAwMDAyMjgwMDZDMDAwMDAwMDEwMjI4MDA3MDAwMDAwMDA0OEUKLToxMDJEMTAwMDAyMjgwMDc0MDAwMDAwMDAwMjI4MDA3ODAwMDAwMDA0NkYKLToxMDJEMjAwMDAyMjgwMDdDMDAwMDAwMDMwNjI4MDA4MDAwMDAwMDAyNEEKLToxMDJEMzAwMDAyMjgwMEE0MDAwMDNGRkYwMjI4MDBBODAwMDAwM0ZGQjMKLToxMDJENDAwMDAyMjgwMjI0MDAwMDAwMDAwMjI4MDIzNDAwMDAwMDAwRDMKLToxMDJENTAwMDAyMjgwMjRDMDAwMDAwMDAwMjI4MDJFNDAwMDBGRkZGRUQKLToxMDJENjAwMDA2MjgyMDAwMDAwMDA4MDAwMjJCOEJDMDAwMDAwMDAxOTQKLToxMDJENzAwMDAyMkI4MDAwMDAwMDAwMDAwMjJCODA0MDAwMDAwMDE4QTEKLToxMDJEODAwMDAyMkI4MDgwMDAwMDAwMEMwMjJCODBDMDAwMDAwMDY2MzcKLToxMDJEOTAwMDBDMkI4MzAwMDAwN0ExMjAwQTJCODMwMDAwMDAwMTM4QzAKLToxMDJEQTAwMDBCMkI4MzAwMDAwMDEzODgwMjJCODNDMDAwMDAwMUY0NkEKLToxMDJEQjAwMDBDMkI4MzQwMDAwMDAxRjQwQTJCODM0MDAwMDAwMDAwMkMKLToxMDJEQzAwMDBCMkI4MzQwMDAwMDAwMDUwQTJCODM4MDAwMDRDNEI0NTEKLToxMDJERDAwMDBDMkI4MzgwMURDRDY1MDAwQTJCMTQ4MDAwMDAwMDAwQTEKLToxMDJERTAwMDBCMkI4MzgwMDA0QzRCNDAwMjJCMTQ4MDAwMDAwMDAxMTEKLToxMDJERjAwMDA2MkEyOUM4MDAwMDAwMDQwNDJBMjlEODAwMDIwMzRDMkUKLToxMDJFMDAwMDA2MkEyMDgwMDAwMDAwNDgwNjJBOTAyMDAwMDAwMEM4MDIKLToxMDJFMTAwMDA2MkE5MDAwMDAwMDAwMDIwNjJBMjFBODAwMDAwMDg2NzEKLToxMDJFMjAwMDA2MkEyMDAwMDAwMDAwMjAwMjJBMjNDODAwMDAwMDAwMUIKLToxMDJFMzAwMDA0MkEyM0QwMDAwMjAzNEUwNDJBMjQ5ODAwMDQwMzUwREQKLToxMDJFNDAwMDAyMkEyQzIwMDAwMDAwMDAwMjJBMkMxMDAwMDAwMDAwQTIKLToxMDJFNTAwMDA0MkEyQzA4MDAwMjAzNTQwMjJBMzAxMDAwMDAwMDAxNEEKLToxMDJFNjAwMDA2MkE0MDQwMDAwMDAwMTAwNDJBNDAwMDAwMTAwMzU2Q0IKLToxMDJFNzAwMDA2MkE2QUMwMDAwMDAwMDIwNjJBNkIwMDAwMDAwMDA0NTcKLToxMDJFODAwMDA0MkE4NDA4MDAwMjAzNjYwMjJCMDgwMDAwMDAwMDAwRTgKLToxMDJFOTAwMDA0MkIwQzAwMDAxMDAzNjgwMjJCMDgwMDAxMDAwMDAwNDYKLToxMDJFQTAwMDA0MkIwQzQwMDAwODAzNzgwMjJCMDgwMDAyMDAwMDAwRUQKLToxMDJFQjAwMDA0MkIwQzYwMDAwODAzODAwNjJBQzAwMDAwMDAwMEZDMDAKLToxMDJFQzAwMDA2MkEyNEE4MDAwMDAwMTQwNjJBMjU0ODAwMDAwMDI0MzEKLToxMDJFRDAwMDA2MkEyNjY4MDAwMDAwMjQwNjJBMjc4ODAwMDAwMDI0MEQKLToxMDJFRTAwMDA2MkEyOEE4MDAwMDAwMjQwNjJBQTAwMDAwMDAwMDI4QzYKLToxMDJFRjAwMDA2MkFBMTQwMDAwMDAwMEMwNDJBMjlFMDAwMDIwMzg4RjEKLToxMDJGMDAwMDAyMkEzMDAwMDAwMDAwMDEwNjJBNTAyMDAwMDAwMDAyQzIKLToxMDJGMTAwMDA2MkE1MDMwMDAwMDAwMDIwNjJBNTAwMDAwMDAwMDAyN0QKLToxMDJGMjAwMDA2MkE1MDEwMDAwMDAwMDIwMjJBNTIwODAwMDAwMDAxODgKLToxMDJGMzAwMDA0MkE2QUM4MDAwMjAzOEEwNjJBNkIxMDAwMDAwMDQyQjUKLToxMDJGNDAwMDA2MkE2RDIwMDAwMDAwMDQwNjJBQzNGMDAwMDAwMEZDRTEKLToxMDJGNTAwMDA2MkEyNEY4MDAwMDAwMTQwNjJBMjVEODAwMDAwMDI0QzAKLToxMDJGNjAwMDA2MkEyNkY4MDAwMDAwMjQwNjJBMjgxODAwMDAwMDI0NUIKLToxMDJGNzAwMDA2MkEyOTM4MDAwMDAwMjQwNjJBQTBBMDAwMDAwMDI4MDQKLToxMDJGODAwMDA2MkFBMTcwMDAwMDAwMEMwNDJBMjlFODAwMDIwMzhDMjQKLToxMDJGOTAwMDAyMkEzMDA0MDAwMDAwMDEwNjJBNTAyODAwMDAwMDAyMjYKLToxMDJGQTAwMDA2MkE1MDM4MDAwMDAwMDIwNjJBNTAwODAwMDAwMDAyREQKLToxMDJGQjAwMDA2MkE1MDE4MDAwMDAwMDIwMjJBNTIwQzAwMDAwMDAxRUMKLToxMDJGQzAwMDA0MkE2QUQwMDAwMjAzOEUwNjJBNkMxODAwMDAwMDQyMTAKLToxMDJGRDAwMDA2MkE2RDMwMDAwMDAwMDQwMjJBQzdFMDAwMDAwMDAwNEQKLToxMDJGRTAwMDA0MkEyOUYwMDAxMDAzOTAwNjJBNTA0ODAwMDAwMDBFMjEKLToxMDJGRjAwMDAyMkFDN0U0MDAwMDAwMDAwNDJBMkEzMDAwMTAwM0EwQkYKLToxMDMwMDAwMDA2MkE1MDgwMDAwMDAwMEUwMjJBQzdFODAwMDAwMDAwRDcKLToxMDMwMTAwMDA0MkEyQTcwMDAxMDAzQjAwNjJBNTBCODAwMDAwMDBFREYKLToxMDMwMjAwMDAyMkFDN0VDMDAwMDAwMDAwNDJBMkFCMDAwMTAwM0MwRTYKLToxMDMwMzAwMDA2MkE1MEYwMDAwMDAwMEUwMjJBQzdGMDAwMDAwMDAwMkYKLToxMDMwNDAwMDA0MkEyQUYwMDAxMDAzRDAwNjJBNTEyODAwMDAwMDBFOUUKLToxMDMwNTAwMDAyMkFDN0Y0MDAwMDAwMDAwNDJBMkIzMDAwMTAwM0UwMEQKLToxMDMwNjAwMDA2MkE1MTYwMDAwMDAwMEUwMjJBQzdGODAwMDAwMDAwODYKLToxMDMwNzAwMDA0MkEyQjcwMDAxMDAzRjAwNjJBNTE5ODAwMDAwMDBFNUQKLToxMDMwODAwMDAyMkFDN0ZDMDAwMDAwMDAwNDJBMkJCMDAwMTAwNDAwMzQKLToxMDMwOTAwMDA2MkE1MUQwMDAwMDAwMEUwMjEwMTAwODAwMDAwMDAxQTYKLToxMDMwQTAwMDAyMTAxMDUwMDAwMDAwMDEwMjEwMTAwMDAwMDNEMDAwQjgKLToxMDMwQjAwMDAyMTAxMDA0MDAwMDAwM0QwOTEwMTgwMDAyMDAwNDEwNjYKLToxMDMwQzAwMDA5MTAxMTAwMDAyODA2MTAwNjEwMTFBMDAwMDAwMDE4QjkKLToxMDMwRDAwMDA2MTAyNDAwMDAwMDAwRTAwMjEwMjAxQzAwMDAwMDAwODgKLToxMDMwRTAwMDAyMTAyMDIwMDAwMDAwMDEwMjEwMjBDMDAwMDAwMDAyOTkKLToxMDMwRjAwMDAyMTAyMDA0MDAwMDAwMDEwMjEwMjAwODAwMDAwMDAxNUUKLToxMDMxMDAwMDA5MTAzQzAwMDAwNTA2MzgwOTEwMzgwMDAwMDUwNjNEOEUKLToxMDMxMTAwMDA5MTAzODIwMDAwNTA2NDIwNjEwNEMwMDAwMDAwMTAwOEUKLToxMDMxMjAwMDAyMTA0MDI4MDAwMDAwMTAwMjEwNDA0NDAwMDAzRkZGNDEKLToxMDMxMzAwMDAyMTA0MDU4MDAyODAwMDAwMjEwNDA4NDAwODQ5MjRBODcKLToxMDMxNDAwMDAyMTA0MDU4MDAwMDAwMDAwMjEwODAwMDAwMDAxMDgwQjMKLToxMDMxNTAwMDAyMTA4MEFDMDAwMDAwMDAwMjEwODAzODAwMDAwMDEwNTcKLToxMDMxNjAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMTMKLToxMDMxNzAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNUMKLToxMDMxODAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQzMKLToxMDMxOTAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMkEKLToxMDMxQTAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNDQKLToxMDMxQjAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBRjcKLToxMDMxQzAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDAxOTYKLToxMDMxRDAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwN0EKLToxMDMxRTAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1QzkKLToxMDMxRjAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNDUKLToxMDMyMDAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyM0YKLToxMDMyMTAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MjQKLToxMDMyMjAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRDgKLToxMDMyMzAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwOEUKLToxMDMyNDAwMDAyMTA4MEFDMDAwMDAwMDIwMjEwODAzODAwMDAwMDEwNjQKLToxMDMyNTAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMjIKLToxMDMyNjAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNkIKLToxMDMyNzAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGRDIKLToxMDMyODAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMzkKLToxMDMyOTAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNTMKLToxMDMyQTAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBMDYKLToxMDMyQjAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDAzQTMKLToxMDMyQzAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwODkKLToxMDMyRDAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1RDgKLToxMDMyRTAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNTQKLToxMDMyRjAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyNEYKLToxMDMzMDAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MzMKLToxMDMzMTAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRTcKLToxMDMzMjAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwOUQKLToxMDMzMzAwMDAyMTA4MEFDMDAwMDAwMDQwMjEwODAzODAwMDAwMDEwNzEKLToxMDMzNDAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMzEKLToxMDMzNTAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwN0EKLToxMDMzNjAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGRTEKLToxMDMzNzAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwNDgKLToxMDMzODAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNjIKLToxMDMzOTAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBMTUKLToxMDMzQTAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDA1QjAKLToxMDMzQjAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwOTgKLToxMDMzQzAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1RTcKLToxMDMzRDAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNjMKLToxMDMzRTAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyNUUKLToxMDMzRjAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0NDMKLToxMDM0MDAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRjYKLToxMDM0MTAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwQUMKLToxMDM0MjAwMDAyMTA4MEFDMDAwMDAwMDYwMjEwODAzODAwMDAwMDEwN0UKLToxMDM0MzAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyNDAKLToxMDM0NDAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwODkKLToxMDM0NTAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGRjAKLToxMDM0NjAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwNTcKLToxMDM0NzAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNzEKLToxMDM0ODAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBMjQKLToxMDM0OTAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDA3QkQKLToxMDM0QTAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwQTcKLToxMDM0QjAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1RjYKLToxMDM0QzAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNzIKLToxMDM0RDAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyNkQKLToxMDM0RTAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0NTIKLToxMDM0RjAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBMDYKLToxMDM1MDAwMDA2MTA5NkU4MDAwMDAwNEEwMjEyMDVCMDAwMDAwMDAxMTMKLToxMDM1MTAwMDAyMTIwNDkwMDBFMzgzNDAwMjEyMDUxNDAwMDAzQzEwRTQKLToxMDM1MjAwMDAyMTIwNjZDMDAwMDAwMDEwMjEyMDY3MDAwMDAwMDAwOEEKLToxMDM1MzAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGMzcKLToxMDM1NDAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGMTcKLToxMDM1NTAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGRjcKLToxMDM1NjAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGRDcKLToxMDM1NzAwMDAyMTIwNEJDRkZGRkZGRkYwMjEyMDRDMEZGRkZGRkZGQTcKLToxMDM1ODAwMDAyMTIwNEM0RkZGRkZGRkYwMjEyMDRDOEZGRkZGRkZGODcKLToxMDM1OTAwMDAyMTIwNENDRkZGRkZGRkYwMjEyMDREMEZGRkZGRkZGNjcKLToxMDM1QTAwMDAyMTIwNEQ4RkZGRkZGRkYwMjEyMDREQ0ZGRkZGRkZGM0YKLToxMDM1QjAwMDAyMTIwNEUwRkZGRkZGRkYwMjEyMDRFNEZGRkZGRkZGMUYKLToxMDM1QzAwMDAyMTIwNEU4RkZGRkZGRkYwMjEyMDRFQ0ZGRkZGRkZGRkYKLToxMDM1RDAwMDAyMTIwNEYwRkZGRkZGRkYwMjEyMDRGNEZGRkZGRkZGREYKLToxMDM1RTAwMDAyMTIwNEY4RkZGRkZGRkYwMjEyMDRGQ0ZGRkZGRkZGQkYKLToxMDM1RjAwMDAyMTIwNTAwRkZGRkZGRkYwMjEyMDUwNEZGRkZGRkZGOUQKLToxMDM2MDAwMDAyMTIwNTA4RkZGRkZGRkYwMjEyMDUwQ0ZGRkZGRkZGN0MKLToxMDM2MTAwMDAyMTIwNTEwRkZGRkZGRkYwMjEyMDRENEZGODAyMDAwRkEKLToxMDM2MjAwMDAyMTIwNEI0RjAwMDUwMDAwMjEyMDRCOEYwMDA4MDAwNEUKLToxMDM2MzAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4MjAKLToxMDM2NDAwMDAyMTIwM0EwMDAwMDAwMDgwMjEyMDNBNDAwMDAwMDAyRkUKLToxMDM2NTAwMDAyMTIwM0JDMDAwMDAwMDQwMjEyMDNDMDAwMDAwMDA1QjcKLToxMDM2NjAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwOTQKLToxMDM2NzAwMDAyMTIwMzZDMDAwMDAwMDEwMjEyMDM2ODAwMDAwMDNGMDgKLToxMDM2ODAwMDAyMTIwMUJDMDAwMDAwNDAwMjEyMDFDMDAwMDAxODA4MzQKLToxMDM2OTAwMDAyMTIwMUM0MDAwMDA4MDMwMjEyMDFDODAwMDAwODAzNUUKLToxMDM2QTAwMDAyMTIwMUNDMDAwMDAwNDAwMjEyMDFEMDAwMDAwMDAzMTEKLToxMDM2QjAwMDAyMTIwMUQ0MDAwMDA4MDMwMjEyMDFEODAwMDAwODAzMUUKLToxMDM2QzAwMDAyMTIwMURDMDAwMDA4MDMwMjEyMDFFMDAwMDEwMDAzMDUKLToxMDM2RDAwMDAyMTIwMUU0MDAwMDA4MDMwMjEyMDFFODAwMDAwODAzREUKLToxMDM2RTAwMDAyMTIwMUVDMDAwMDAwMDMwMjEyMDFGMDAwMDAwMDAzQ0UKLToxMDM2RjAwMDAyMTIwMUY0MDAwMDAwMDMwMjEyMDFGODAwMDAwMDAzQUUKLToxMDM3MDAwMDAyMTIwMUZDMDAwMDAwMDMwMjEyMDIwMDAwMDAwMDAzOEMKLToxMDM3MTAwMDAyMTIwMjA0MDAwMDAwMDMwMjEyMDIwODAwMDAwMDAzNkIKLToxMDM3MjAwMDAyMTIwMjBDMDAwMDAwMDMwMjEyMDIxMDAwMDAwMDAzNEIKLToxMDM3MzAwMDAyMTIwMjE0MDAwMDAwMDMwMjEyMDIxODAwMDAwMDAzMkIKLToxMDM3NDAwMDAyMTIwMjFDMDAwMDAwMDMwMjEyMDIyMDAwMDAwMDAzMEIKLToxMDM3NTAwMDAyMTIwMjI0MDAwMDAwMDMwMjEyMDIyODAwMDAyNDAzQzcKLToxMDM3NjAwMDAyMTIwMjJDMDAwMDAwMkYwMjEyMDIzMDAwMDAwMDA5OTkKLToxMDM3NzAwMDAyMTIwMjM0MDAwMDAwMTkwMjEyMDIzODAwMDAwMTg0MTMKLToxMDM3ODAwMDAyMTIwMjNDMDAwMDAxODMwMjEyMDI0MDAwMDAwMzA2MDQKLToxMDM3OTAwMDAyMTIwMjQ0MDAwMDAwMTkwMjEyMDI0ODAwMDAwMDA2NTIKLToxMDM3QTAwMDAyMTIwMjRDMDAwMDAzMDYwMjEyMDI1MDAwMDAwMzA2M0YKLToxMDM3QjAwMDAyMTIwMjU0MDAwMDAzMDYwMjEyMDI1ODAwMDAwQzg2OTYKLToxMDM3QzAwMDAyMTIwMjVDMDAwMDAzMDYwMjEyMDI2MDAwMDAwMzA2RkYKLToxMDM3RDAwMDAyMTIwMjY0MDAwMDAwMDYwMjEyMDI2ODAwMDAwMDA2RTUKLToxMDM3RTAwMDAyMTIwMjZDMDAwMDAwMDYwMjEyMDI3MDAwMDAwMDA2QzUKLToxMDM3RjAwMDAyMTIwMjc0MDAwMDAwMDYwMjEyMDI3ODAwMDAwMDA2QTUKLToxMDM4MDAwMDAyMTIwMjdDMDAwMDAwMDYwMjEyMDI4MDAwMDAwMDA2ODQKLToxMDM4MTAwMDAyMTIwMjg0MDAwMDAwMDYwMjEyMDI4ODAwMDAwMDA2NjQKLToxMDM4MjAwMDAyMTIwMjhDMDAwMDAwMDYwMjEyMDI5MDAwMDAwMDA2NDQKLToxMDM4MzAwMDAyMTIwMjk0MDAwMDAwMDYwMjEyMDI5ODAwMDAwMDA2MjQKLToxMDM4NDAwMDAyMTIwMjlDMDAwMDAwMDYwMjEyMDJBMDAwMDAwMzA2MDEKLToxMDM4NTAwMDAyMTIwMkE0MDAwMDAwMTMwMjEyMDJBODAwMDAwMDA2RDcKLToxMDM4NjAwMDAyMTIwMkIwMDAwMDEwMDQwMjEyMDJCNDAwMDAxMDA0QTAKLToxMDM4NzAwMDAyMTIwMzI0MDAxMDY0NDAwMjEyMDMyODAwMTA2NDQwNjYKLToxMDM4ODAwMDAyMTIwNUI0MDAwMDAwMDEwMjEyMDFCMDAwMDAwMDAxQTQKLToxMDM4OTAwMDA2MDBBMDAwMDAwMDAwMTYwMjAwQTBFQzU1NTQwMDAwMzUKLToxMDM4QTAwMDAyMDBBMEYwNTU1NTU1NTUwMjAwQTBGNDAwMDA1NTU1RjIKLToxMDM4QjAwMDAyMDBBMEY4RjAwMDAwMDAwMjAwQTBGQzU1NTQwMDAwMzcKLToxMDM4QzAwMDAyMDBBMTAwNTU1NTU1NTUwMjAwQTEwNDAwMDA1NTU1QjAKLToxMDM4RDAwMDAyMDBBMTA4RjAwMDAwMDAwMjAwQTE4QzU1NTQwMDAwNzUKLToxMDM4RTAwMDAyMDBBMTkwNTU1NTU1NTUwMjAwQTE5NDAwMDA1NTU1NzAKLToxMDM4RjAwMDAyMDBBMTk4RjAwMDAwMDAwMjAwQTE5QzAwMDAwMDAwNUUKLToxMDM5MDAwMDAyMDBBMUEwMDAwMTAwMDAwMjAwQTFBNDAwMDA1MDE0QzgKLToxMDM5MTAwMDAyMDBBMUE4MDAwMDAwMDAwMjAwQTQ1QzAwMDAwQzAwNEUKLToxMDM5MjAwMDAyMDBBNjFDMDAwMDAwMDMwMjAwQTA2Q0ZGNUMwMDAwNjcKLToxMDM5MzAwMDAyMDBBMDcwRkZGNTVGRkYwMjAwQTA3NDAwMDBGRkZGMEYKLToxMDM5NDAwMDAyMDBBMDc4RjAwMDAzRTAwMjAwQTA3QzAwMDAwMDAwNkMKLToxMDM5NTAwMDAyMDBBMDgwMDAwMEEwMDAwNjAwQTA4NDAwMDAwMDA1NzYKLToxMDM5NjAwMDAyMDBBMDk4MEZFMDAwMDAwNjAwQTA5QzAwMDAwMDA3RTUKLToxMDM5NzAwMDAyMDBBMEI4MDAwMDA0MDAwNjAwQTBCQzAwMDAwMDAzODQKLToxMDM5ODAwMDAyMDBBMEM4MDAwMDEwMDAwNjAwQTBDQzAwMDAwMDAzNDgKLToxMDM5OTAwMDAyMDBBMEQ4MDAwMDQwMDAwNjAwQTBEQzAwMDAwMDAzRTgKLToxMDM5QTAwMDAyMDBBMEU4MDAwMTAwMDAwNjAwQTIyQzAwMDAwMDA0QjQKLToxMDM5QjAwMDAyMDBBMTBDRkY1QzAwMDAwMjAwQTExMEZGRjU1RkZGRjgKLToxMDM5QzAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwQjQKLToxMDM5RDAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwQzUKLToxMDM5RTAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwM0QKLToxMDM5RjAwMDA2MDBBMTNDMDAwMDAwMDcwMjAwQTE1ODAwMDAwODAwREEKLToxMDNBMDAwMDA2MDBBMTVDMDAwMDAwMDMwMjAwQTE2ODAwMDAyMDAwODUKLToxMDNBMTAwMDA2MDBBMTZDMDAwMDAwMDMwMjAwQTE3ODAwMDA4MDAwRjUKLToxMDNBMjAwMDA2MDBBMTdDMDAwMDAwMDMwMjAwQTE4ODAwMDIwMDAwNDMKLToxMDNBMzAwMDA2MDBBMjNDMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwOUUKLToxMDNBNDAwMDAwMDAwMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMDNBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMDNBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEwMDMyRjMKLToxMDNBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMDNBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMDNBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyMDA1NjAwMDAwMDAwOUUKLToxMDNBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMDNBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMDNBQzAwMDAwMDAwMDAwMDA1NjAwOEMwMDAwMDAwMDAwMDAwMDAwMTQKLToxMDNBRDAwMDAwOEMwMDkwMDA5MDAwOTQwMDk0MDA5ODAwOTgwMDlDNDYKLToxMDNBRTAwMDAwOUMwMEEwMDBBMDAwQTQwMEE0MDBBODAwQTgwMEFDQjYKLToxMDNBRjAwMDAwQUMwMEIxMDBCMTAwQjMwMEIzMDBCNTAwMDAwMDAwOUQKLToxMDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMDNCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUwMTAwRUYKLToxMDNCMjAwMDAxMDAwMTA2MDEwNjAxMEMwMTBDMDExNDAxMTQwMTFDMjUKLToxMDNCMzAwMDAxMUMwMTI0MDEyNDAxMkMwMTJDMDEzNDAxMzQwMTNDMUQKLToxMDNCNDAwMDAxM0MwMTQ0MDE0NDAxNEMwMDAwMDAwMDAwMDAwMDAwNjEKLToxMDNCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMDNCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMDNCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMDNCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMDNCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMDNCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMDNCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMDNCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMDNCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMDNCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMDNCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMTRDMDE1MTAwMDAwMDAwMjYKLToxMDNDMDAwMDAwMDAwMDAwMDE1MTAxNTIwMTUyMDE1MzAxNTMwMTU0QkYKLToxMDNDMTAwMDAxNTQwMTU1MDE1NTAxNTYwMTU2MDE1NzAxNTcwMTU4RUMKLToxMDNDMjAwMDAxNTgwMTU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMDNDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMDNDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMDNDNTAwMDAxNTkwMTVFMDE1RTAxNkEwMTZBMDE3NjAwMDAwMDAwRkYKLToxMDNDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMDNDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMDNDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMDNDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMDNDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMTc2MDE3NzAwMDAwMDAwMjUKLToxMDNDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMDNDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMDNDRDAwMDAwMDAwMDAwMDE3NzAxOUEwMDAwMDAwMDAwMDAwMDAwRDEKLToxMDNDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMDNDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMDNEMDAwMDAxOUEwMUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMDNEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMDNEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQzIwMUYzREMKLToxMDNEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMUYzMDFGQTAxRkEwMjAxOTYKLToxMDNENDAwMDAyMDEwMjA4MDIwODAyMEYwMjBGMDIxNjAyMTYwMjFERUIKLToxMDNENTAwMDAyMUQwMjI0MDIyNDAyMkIwMjJCMDI2MzAwMDAwMDAwMzkKLToxMDNENjAwMDAwMDAwMDAwMDI2MzAyNjcwMjY3MDI2QjAyNkIwMjZGRDEKLToxMDNENzAwMDAyNkYwMjczMDI3MzAyNzcwMjc3MDI3QjAyN0IwMjdGN0IKLToxMDNEODAwMDAyN0YwMjgzMDI4MzAyRDEwMkQxMDJFQjAyRUIwMzA1MjAKLToxMDNEOTAwMDAzMDUwMzA4MDMwODAzMEIwMzBCMDMwRTAzMEUwMzExQjMKLToxMDNEQTAwMDAzMTEwMzE0MDMxNDAzMTcwMzE3MDMxQTAzMUEwMzFENDMKLToxMDNEQjAwMDAzMUQwMzVFMDM1RTAzNjIwMzYyMDM2NjAzNjYwMzY5MTkKLToxMDNEQzAwMDAzNjkwMzZDMDM2QzAzNkYwMzZGMDM3MjAzNzIwMzc1NjMKLToxMDNERDAwMDAzNzUwMzc4MDM3ODAzN0IwMzdCMDM3RTAzN0UwMzdGRjUKLToxMDNERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMDNERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzdGMDM5MTAwMDAwMDAwOUMKLToxMDNFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMDNFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMDNFMzAwMDAwMDAwMDAwMDM5MTAzQTYwM0E2MDNBOTAzQTkwM0FDOTUKLToxMDNFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMDNFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMDNFNjAwMDAzQUMwM0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMDNFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMDNFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDkwNERDNzYKLToxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMDNFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMDNFQjAwMDAwMDAwMDAwMDAwMDAwMDAwNERDMDRFMzA0RTMwNEU3NjkKLToxMDNFQzAwMDA0RTcwNEVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMDNFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMDNFRTAwMDAwMDAwMDAwMDRFQjA1MkIwMDAwMDAwMDAwMDAwMDAwQjMKLToxMDNFRjAwMDA1MkIwNTM0MDUzNDA1M0QwNTNEMDU0NjA1NDYwNTRGQjIKLToxMDNGMDAwMDA1NEYwNTU4MDU1ODA1NjEwNTYxMDU2QTA1NkEwNTczODEKLToxMDNGMTAwMDA1NzMwNUNCMDVDQjA1REQwNUREMDVFRjA1RUYwNUYyRTYKLToxMDNGMjAwMDA1RjIwNUY1MDVGNTA1RjgwNUY4MDVGQjA1RkIwNUZFQTkKLToxMDNGMzAwMDA1RkUwNjAxMDYwMTA2MDQwNjA0MDYwNzA2MDcwNjBFMkUKLToxMDNGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMDNGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMDNGNjAwMDAwMDAwMDAwMDAwMDAwMDAwNjBFMDYxNDAwMDAwMDAwMjMKLToxMDNGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMDNGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDNGOTAwMDAwMDAwMDAwMDYxNDA2MTcwMDAwMDAwMDAwMDAwMDAwRUEKLToxMDNGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMDNGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMDNGQzAwMDA2MTcwNjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMDNGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMDNGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMDNGRjAwMDAwMDAwMDAwMDAwMDAwMDAwNjFEMDYyQzA2MkMwNjNCRjkKLToxMDQwMDAwMDA2M0IwNjRBMDY0QTA2NTkwNjU5MDY2ODA2NjgwNjc3QjgKLToxMDQwMTAwMDA2NzcwNjg2MDY4NjA2OTUwNjk1MDcwNjAwMDAwMDAwQzgKLToxMDQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMDQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMDQwNDAwMDAwMDAwMDAwMDcwNjA3MTkwNzE5MDcyQTA3MkEwNzNCN0YKLToxMDQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMDQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMDQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDIwNEMwNzkKLToxMDQwODAwMDAwMDMwOTgwMDAwNDBFNDAwMDA1MTMwMDAwMDYxN0MwNUQKLToxMDQwOTAwMDAwMDcxQzgwMDAwODIxNDAwMDA5MjYwMDAwMEEyQUMwRjEKLToxMDQwQTAwMDAwMEIyRjgwMDAwQzM0NDAwMDBEMzkwMDAwMEUzREMwODUKLToxMDQwQjAwMDAwMEY0MjgwMDAxMDQ3NDAwMDExNEMwMDAwMTI1MEMwMTkKLToxMDQwQzAwMDAwMTM1NTgwMDAxNDVBNDAwMDE1NUYwMDAwMTY2M0MwQUQKLToxMDQwRDAwMDAwMTc2ODgwMDAxODZENDAwMDE5NzIwMDAwMUE3NkMwNDEKLToxMDQwRTAwMDAwMUI3QjgwMDAxQzgwNDAwMDFEODUwMDAwMUU4OUMwRDUKLToxMDQwRjAwMDAwMUY4RTgwMDAyMDkzNDAwMDAwMjAwMDAwMDA0MDAwNDAKLToxMDQxMDAwMDAwMDA2MDAwMDAwMDgwMDAwMDAwQTAwMDAwMDBDMDAwNkYKLToxMDQxMTAwMDAwMDBFMDAwMDAwMTAwMDAwMDAxMjAwMDAwMDE0MDAwNUMKLToxMDQxMjAwMDAwMDE2MDAwMDAwMTgwMDAwMDAxQTAwMDAwMDFDMDAwNEIKLToxMDQxMzAwMDAwMDFFMDAwMDAwMjAwMDAwMDAyMjAwMDAwMDI0MDAwMzgKLToxMDQxNDAwMDAwMDI2MDAwMDAwMjgwMDAwMDAyQTAwMDAwMDJDMDAwMjcKLToxMDQxNTAwMDAwMDJFMDAwMDAwMzAwMDAwMDAzMjAwMDAwMDM0MDAwMTQKLToxMDQxNjAwMDAwMDM2MDAwMDAwMzgwMDAwMDAzQTAwMDAwMDNDMDAwMDMKLToxMDQxNzAwMDAwMDNFMDAwMDAwNDAwMDAwMDA0MjAwMDAwMDQ0MDAwRjAKLToxMDQxODAwMDAwMDQ2MDAwMDAwNDgwMDAwMDA0QTAwMDAwMDRDMDAwREYKLToxMDQxOTAwMDAwMDRFMDAwMDAwNTAwMDAwMDA1MjAwMDAwMDU0MDAwQ0MKLToxMDQxQTAwMDAwMDU2MDAwMDAwNTgwMDAwMDA1QTAwMDAwMDVDMDAwQkIKLToxMDQxQjAwMDAwMDVFMDAwMDAwNjAwMDAwMDA2MjAwMDAwMDY0MDAwQTgKLToxMDQxQzAwMDAwMDY2MDAwMDAwNjgwMDAwMDA2QTAwMDAwMDZDMDAwOTcKLToxMDQxRDAwMDAwMDZFMDAwMDAwNzAwMDAwMDA3MjAwMDAwMDc0MDAwODQKLToxMDQxRTAwMDAwMDc2MDAwMDAwNzgwMDAwMDA3QTAwMDAwMDdDMDAwNzMKLToxMDQxRjAwMDAwMDdFMDAwMDAwODAwMDAwMDA4MjAwMDAwMDg0MDAwNjAKLToxMDQyMDAwMDAwMDg2MDAwMDAwODgwMDAwMDA4QTAwMDAwMDhDMDAwNEUKLToxMDQyMTAwMDAwMDhFMDAwMDAwOTAwMDAwMDA5MjAwMDAwMDk0MDAwM0IKLToxMDQyMjAwMDAwMDk2MDAwMDAwOTgwMDAwMDA5QTAwMDAwMDlDMDAwMkEKLToxMDQyMzAwMDAwMDlFMDAwMDAwQTAwMDAwMDBBMjAwMDAwMEE0MDAwMTcKLToxMDQyNDAwMDAwMEE2MDAwMDAwQTgwMDAwMDBBQTAwMDAwMEFDMDAwMDYKLToxMDQyNTAwMDAwMEFFMDAwMDAwQjAwMDAwMDBCMjAwMDAwMEI0MDAwRjMKLToxMDQyNjAwMDAwMEI2MDAwMDAwQjgwMDAwMDBCQTAwMDAwMEJDMDAwRTIKLToxMDQyNzAwMDAwMEJFMDAwMDAwQzAwMDAwMDBDMjAwMDAwMEM0MDAwQ0YKLToxMDQyODAwMDAwMEM2MDAwMDAwQzgwMDAwMDBDQTAwMDAwMENDMDAwQkUKLToxMDQyOTAwMDAwMENFMDAwMDAwRDAwMDAwMDBEMjAwMDAwMEQ0MDAwQUIKLToxMDQyQTAwMDAwMEQ2MDAwMDAwRDgwMDAwMDBEQTAwMDAwMERDMDAwOUEKLToxMDQyQjAwMDAwMERFMDAwMDAwRTAwMDAwMDBFMjAwMDAwMEU0MDAwODcKLToxMDQyQzAwMDAwMEU2MDAwMDAwRTgwMDAwMDBFQTAwMDAwMEVDMDAwNzYKLToxMDQyRDAwMDAwMEVFMDAwMDAwRjAwMDAwMDBGMjAwMDAwMEY0MDAwNjMKLToxMDQyRTAwMDAwMEY2MDAwMDAwRjgwMDAwMDBGQTAwMDAwMEZDMDAwNTIKLToxMDQyRjAwMDAwMEZFMDAwMDAxMDAwMDAwMDEwMjAwMDAwMTA0MDAwM0YKLToxMDQzMDAwMDAwMTA2MDAwMDAxMDgwMDAwMDEwQTAwMDAwMTBDMDAwMkQKLToxMDQzMTAwMDAwMTBFMDAwMDAxMTAwMDAwMDExMjAwMDAwMTE0MDAwMUEKLToxMDQzMjAwMDAwMTE2MDAwMDAxMTgwMDAwMDExQTAwMDAwMTFDMDAwMDkKLToxMDQzMzAwMDAwMTFFMDAwMDAxMjAwMDAwMDEyMjAwMDAwMTI0MDAwRjYKLToxMDQzNDAwMDAwMTI2MDAwMDAxMjgwMDAwMDEyQTAwMDAwMTJDMDAwRTUKLToxMDQzNTAwMDAwMTJFMDAwMDAxMzAwMDAwMDEzMjAwMDAwMTM0MDAwRDIKLToxMDQzNjAwMDAwMTM2MDAwMDAxMzgwMDAwMDEzQTAwMDAwMTNDMDAwQzEKLToxMDQzNzAwMDAwMTNFMDAwMDAxNDAwMDAwMDE0MjAwMDAwMTQ0MDAwQUUKLToxMDQzODAwMDAwMTQ2MDAwMDAxNDgwMDAwMDE0QTAwMDAwMTRDMDAwOUQKLToxMDQzOTAwMDAwMTRFMDAwMDAxNTAwMDAwMDE1MjAwMDAwMTU0MDAwOEEKLToxMDQzQTAwMDAwMTU2MDAwMDAxNTgwMDAwMDE1QTAwMDAwMTVDMDAwNzkKLToxMDQzQjAwMDAwMTVFMDAwMDAxNjAwMDAwMDE2MjAwMDAwMTY0MDAwNjYKLToxMDQzQzAwMDAwMTY2MDAwMDAxNjgwMDAwMDE2QTAwMDAwMTZDMDAwNTUKLToxMDQzRDAwMDAwMTZFMDAwMDAxNzAwMDAwMDE3MjAwMDAwMTc0MDAwNDIKLToxMDQzRTAwMDAwMTc2MDAwMDAxNzgwMDAwMDE3QTAwMDAwMTdDMDAwMzEKLToxMDQzRjAwMDAwMTdFMDAwMDAxODAwMDAwMDE4MjAwMDAwMTg0MDAwMUUKLToxMDQ0MDAwMDAwMTg2MDAwMDAxODgwMDAwMDE4QTAwMDAwMThDMDAwMEMKLToxMDQ0MTAwMDAwMThFMDAwMDAxOTAwMDAwMDE5MjAwMDAwMTk0MDAwRjkKLToxMDQ0MjAwMDAwMTk2MDAwMDAxOTgwMDAwMDE5QTAwMDAwMTlDMDAwRTgKLToxMDQ0MzAwMDAwMTlFMDAwMDAxQTAwMDAwMDFBMjAwMDAwMUE0MDAwRDUKLToxMDQ0NDAwMDAwMUE2MDAwMDAxQTgwMDAwMDFBQTAwMDAwMUFDMDAwQzQKLToxMDQ0NTAwMDAwMUFFMDAwMDAxQjAwMDAwMDFCMjAwMDAwMUI0MDAwQjEKLToxMDQ0NjAwMDAwMUI2MDAwMDAxQjgwMDAwMDFCQTAwMDAwMUJDMDAwQTAKLToxMDQ0NzAwMDAwMUJFMDAwMDAxQzAwMDAwMDFDMjAwMDAwMUM0MDAwOEQKLToxMDQ0ODAwMDAwMUM2MDAwMDAxQzgwMDAwMDFDQTAwMDAwMUNDMDAwN0MKLToxMDQ0OTAwMDAwMUNFMDAwMDAxRDAwMDAwMDFEMjAwMDAwMUQ0MDAwNjkKLToxMDQ0QTAwMDAwMUQ2MDAwMDAxRDgwMDAwMDFEQTAwMDAwMURDMDAwNTgKLToxMDQ0QjAwMDAwMURFMDAwMDAxRTAwMDAwMDFFMjAwMDAwMUU0MDAwNDUKLToxMDQ0QzAwMDAwMUU2MDAwMDAxRTgwMDAwMDFFQTAwMDAwMUVDMDAwMzQKLToxMDQ0RDAwMDAwMUVFMDAwMDAxRjAwMDAwMDFGMjAwMDAwMUY0MDAwMjEKLToxMDQ0RTAwMDAwMUY2MDAwMDAxRjgwMDAwMDFGQTAwMDAwMUZDMDAwMTAKLToxMDQ0RjAwMDAwMUZFMDAwMDAyMDAwMDAwMDIwMjAwMDAwMjA0MDAwRkQKLToxMDQ1MDAwMDAwMjA2MDAwMDAyMDgwMDAwMDIwQTAwMDAwMjBDMDAwRUIKLToxMDQ1MTAwMDAwMjBFMDAwMDAyMTAwMDAwMDIxMjAwMDAwMjE0MDAwRDgKLToxMDQ1MjAwMDAwMjE2MDAwMDAyMTgwMDAwMDIxQTAwMDAwMjFDMDAwQzcKLToxMDQ1MzAwMDAwMjFFMDAwMDAyMjAwMDAwMDIyMjAwMDAwMjI0MDAwQjQKLToxMDQ1NDAwMDAwMjI2MDAwMDAyMjgwMDAwMDIyQTAwMDAwMjJDMDAwQTMKLToxMDQ1NTAwMDAwMjJFMDAwMDAyMzAwMDAwMDIzMjAwMDAwMjM0MDAwOTAKLToxMDQ1NjAwMDAwMjM2MDAwMDAyMzgwMDAwMDIzQTAwMDAwMjNDMDAwN0YKLToxMDQ1NzAwMDAwMjNFMDAwMDAyNDAwMDAwMDI0MjAwMDAwMjQ0MDAwNkMKLToxMDQ1ODAwMDAwMjQ2MDAwMDAyNDgwMDAwMDI0QTAwMDAwMjRDMDAwNUIKLToxMDQ1OTAwMDAwMjRFMDAwMDAyNTAwMDAwMDI1MjAwMDAwMjU0MDAwNDgKLToxMDQ1QTAwMDAwMjU2MDAwMDAyNTgwMDAwMDI1QTAwMDAwMjVDMDAwMzcKLToxMDQ1QjAwMDAwMjVFMDAwMDAyNjAwMDAwMDI2MjAwMDAwMjY0MDAwMjQKLToxMDQ1QzAwMDAwMjY2MDAwMDAyNjgwMDAwMDI2QTAwMDAwMjZDMDAwMTMKLToxMDQ1RDAwMDAwMjZFMDAwMDAyNzAwMDAwMDI3MjAwMDAwMjc0MDAwMDAKLToxMDQ1RTAwMDAwMjc2MDAwMDAyNzgwMDAwMDI3QTAwMDAwMjdDMDAwRUYKLToxMDQ1RjAwMDAwMjdFMDAwMDAyODAwMDAwMDI4MjAwMDAwMjg0MDAwREMKLToxMDQ2MDAwMDAwMjg2MDAwMDAyODgwMDAwMDI4QTAwMDAwMjhDMDAwQ0EKLToxMDQ2MTAwMDAwMjhFMDAwMDAyOTAwMDAwMDI5MjAwMDAwMjk0MDAwQjcKLToxMDQ2MjAwMDAwMjk2MDAwMDAyOTgwMDAwMDI5QTAwMDAwMjlDMDAwQTYKLToxMDQ2MzAwMDAwMjlFMDAwMDAyQTAwMDAwMDJBMjAwMDAwMkE0MDAwOTMKLToxMDQ2NDAwMDAwMkE2MDAwMDAyQTgwMDAwMDJBQTAwMDAwMkFDMDAwODIKLToxMDQ2NTAwMDAwMkFFMDAwMDAyQjAwMDAwMDJCMjAwMDAwMkI0MDAwNkYKLToxMDQ2NjAwMDAwMkI2MDAwMDAyQjgwMDAwMDJCQTAwMDAwMkJDMDAwNUUKLToxMDQ2NzAwMDAwMkJFMDAwMDAyQzAwMDAwMDJDMjAwMDAwMkM0MDAwNEIKLToxMDQ2ODAwMDAwMkM2MDAwMDAyQzgwMDAwMDJDQTAwMDAwMkNDMDAwM0EKLToxMDQ2OTAwMDAwMkNFMDAwMDAyRDAwMDAwMDJEMjAwMDAwMkQ0MDAwMjcKLToxMDQ2QTAwMDAwMkQ2MDAwMDAyRDgwMDAwMDJEQTAwMDAwMkRDMDAwMTYKLToxMDQ2QjAwMDAwMkRFMDAwMDAyRTAwMDAwMDJFMjAwMDAwMkU0MDAwMDMKLToxMDQ2QzAwMDAwMkU2MDAwMDAyRTgwMDAwMDJFQTAwMDAwMkVDMDAwRjIKLToxMDQ2RDAwMDAwMkVFMDAwMDAyRjAwMDAwMDJGMjAwMDAwMkY0MDAwREYKLToxMDQ2RTAwMDAwMkY2MDAwMDAyRjgwMDAwMDJGQTAwMDAwMkZDMDAwQ0UKLToxMDQ2RjAwMDAwMkZFMDAwMDAzMDAwMDAwMDMwMjAwMDAwMzA0MDAwQkIKLToxMDQ3MDAwMDAwMzA2MDAwMDAzMDgwMDAwMDMwQTAwMDAwMzBDMDAwQTkKLToxMDQ3MTAwMDAwMzBFMDAwMDAzMTAwMDAwMDMxMjAwMDAwMzE0MDAwOTYKLToxMDQ3MjAwMDAwMzE2MDAwMDAzMTgwMDAwMDMxQTAwMDAwMzFDMDAwODUKLToxMDQ3MzAwMDAwMzFFMDAwMDAzMjAwMDAwMDMyMjAwMDAwMzI0MDAwNzIKLToxMDQ3NDAwMDAwMzI2MDAwMDAzMjgwMDAwMDMyQTAwMDAwMzJDMDAwNjEKLToxMDQ3NTAwMDAwMzJFMDAwMDAzMzAwMDAwMDMzMjAwMDAwMzM0MDAwNEUKLToxMDQ3NjAwMDAwMzM2MDAwMDAzMzgwMDAwMDMzQTAwMDAwMzNDMDAwM0QKLToxMDQ3NzAwMDAwMzNFMDAwMDAzNDAwMDAwMDM0MjAwMDAwMzQ0MDAwMkEKLToxMDQ3ODAwMDAwMzQ2MDAwMDAzNDgwMDAwMDM0QTAwMDAwMzRDMDAwMTkKLToxMDQ3OTAwMDAwMzRFMDAwMDAzNTAwMDAwMDM1MjAwMDAwMzU0MDAwMDYKLToxMDQ3QTAwMDAwMzU2MDAwMDAzNTgwMDAwMDM1QTAwMDAwMzVDMDAwRjUKLToxMDQ3QjAwMDAwMzVFMDAwMDAzNjAwMDAwMDM2MjAwMDAwMzY0MDAwRTIKLToxMDQ3QzAwMDAwMzY2MDAwMDAzNjgwMDAwMDM2QTAwMDAwMzZDMDAwRDEKLToxMDQ3RDAwMDAwMzZFMDAwMDAzNzAwMDAwMDM3MjAwMDAwMzc0MDAwQkUKLToxMDQ3RTAwMDAwMzc2MDAwMDAzNzgwMDAwMDM3QTAwMDAwMzdDMDAwQUQKLToxMDQ3RjAwMDAwMzdFMDAwMDAzODAwMDAwMDM4MjAwMDAwMzg0MDAwOUEKLToxMDQ4MDAwMDAwMzg2MDAwMDAzODgwMDAwMDM4QTAwMDAwMzhDMDAwODgKLToxMDQ4MTAwMDAwMzhFMDAwMDAzOTAwMDAwMDM5MjAwMDAwMzk0MDAwNzUKLToxMDQ4MjAwMDAwMzk2MDAwMDAzOTgwMDAwMDM5QTAwMDAwMzlDMDAwNjQKLToxMDQ4MzAwMDAwMzlFMDAwMDAzQTAwMDAwMDNBMjAwMDAwM0E0MDAwNTEKLToxMDQ4NDAwMDAwM0E2MDAwMDAzQTgwMDAwMDNBQTAwMDAwM0FDMDAwNDAKLToxMDQ4NTAwMDAwM0FFMDAwMDAzQjAwMDAwMDNCMjAwMDAwM0I0MDAwMkQKLToxMDQ4NjAwMDAwM0I2MDAwMDAzQjgwMDAwMDNCQTAwMDAwM0JDMDAwMUMKLToxMDQ4NzAwMDAwM0JFMDAwMDAzQzAwMDAwMDNDMjAwMDAwM0M0MDAwMDkKLToxMDQ4ODAwMDAwM0M2MDAwMDAzQzgwMDAwMDNDQTAwMDAwM0NDMDAwRjgKLToxMDQ4OTAwMDAwM0NFMDAwMDAzRDAwMDAwMDNEMjAwMDAwM0Q0MDAwRTUKLToxMDQ4QTAwMDAwM0Q2MDAwMDAzRDgwMDAwMDNEQTAwMDAwM0RDMDAwRDQKLToxMDQ4QjAwMDAwM0RFMDAwMDAzRTAwMDAwMDNFMjAwMDAwM0U0MDAwQzEKLToxMDQ4QzAwMDAwM0U2MDAwMDAzRTgwMDAwMDNFQTAwMDAwM0VDMDAwQjAKLToxMDQ4RDAwMDAwM0VFMDAwMDAzRjAwMDAwMDNGMjAwMDAwM0Y0MDAwOUQKLToxMDQ4RTAwMDAwM0Y2MDAwMDAzRjgwMDAwMDNGQTAwMDAwM0ZDMDAwOEMKLToxMDQ4RjAwMDAwM0ZFMDAwMDAzRkUwMDEwMDAwMDAwMDAwMDAwMUZGNzkKLToxMDQ5MDAwMDAwMDAwMjAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwNzA0QUMKLToxMDQ5MTAwMDAwMDAzNTAwMDAwMDAwMDFGRkZGRkZGRkZGRkZGRkZGNjkKLToxMDQ5MjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTcKLToxMDQ5MzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGODcKLToxMDQ5NDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNzcKLToxMDQ5NTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNjcKLToxMDQ5NjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNTcKLToxMDQ5NzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDcKLToxMDQ5ODAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzcKLToxMDQ5OTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMjMKLToxMDQ5QTAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGMTMKLToxMDQ5QjAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRkYKLToxMDQ5QzAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRUYKLToxMDQ5RDAwMEZGRkZGRkZGMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGNDIKLToxMDQ5RTAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGQ0YKLToxMDQ5RjAwMDAwMDAwMDAzMDBCRUJDMjBGRkZGRkZGRjAwMDAwMDAwMUUKLToxMDRBMDAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAzQUIKLToxMDRBMTAwMDAwQkVCQzIwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDQKLToxMDRBMjAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwRUQKLToxMDRBMzAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwN0UKLToxMDRBNDAwMEZGRkZGRkZGMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGRDEKLToxMDRBNTAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGNUUKLToxMDRBNjAwMDAwMDAwMDAzMDBCRUJDMjAwMDAwMjAwMDAwMDA0MEMwODkKLToxMDRBNzAwMDAwMDA2MTgwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwNkQKLToxMDRBODAwMDAwMDBFNDgwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwNEUKLToxMDRBOTAwMDAwMDE2NzgwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwMzEKLToxMDRBQTAwMDAwMDFFQTgwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwMTIKLToxMDRBQjAwMDAwMDI2RDgwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwRjUKLToxMDRBQzAwMDAwMDJGMDgwMDAwMzExNDAwMDAzMzIwMDAwMDM1MkMwRDYKLToxMDRBRDAwMDAwMDM3MzgwMDAwMzk0NDAwMDAzQjUwMDAwMDNENUMwQjkKLToxMDRBRTAwMDAwMDNGNjgwMDAwNDE3NDAwMDA0MzgwMDAwMDQ1OEMwOUEKLToxMDRBRjAwMDAwMDQ3OTgwMDAwNDlBNDAwMDAwODAwMDAwMDEwMzgwRDcKLToxMDRCMDAwMDAwMDE4NzAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwNkQKLToxMDRCMTAwMDAwMDM5NTAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwMUQKLToxMDRCMjAwMDAwMDVBMzAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwQ0QKLToxMDRCMzAwMDAwMDdCMTAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwN0QKLToxMDRCNDAwMDAwMDlCRjAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwMkQKLToxMDRCNTAwMDAwMEJDRDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwREQKLToxMDRCNjAwMDAwMEREQjAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwNDg3RTQKLToxMDRCNzAwMDAwMDAxNTAwMDAwMDE5MDAwMDAwMDAyODAwMTAwMDAwQ0YKLToxMDRCODAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwRTkKLToxMDRCOTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMTUKLToxMDRCQTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDUKLToxMDRCQjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRjUKLToxMDRCQzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRTUKLToxMDRCRDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRDUKLToxMDRCRTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQzUKLToxMDRCRjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQjUKLToxMDRDMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMDA3RkY4NkQKLToxMDRDMTAwMDAwMDA3RkY4MDAwMDAzRTAwMDAwMTUwMEZGRkZGRkZGMjkKLToxMDRDMjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTQKLToxMDRDMzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGODQKLToxMDRDNDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNzQKLToxMDRDNTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNjQKLToxMDRDNjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNTQKLToxMDRDNzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDQKLToxMDRDODAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzQKLToxMDRDOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjQwMDAwMDAwRTAKLToxMDRDQTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDQKLToxMDRDQjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRjQKLToxMDRDQzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRTQKLToxMDRDRDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRDQKLToxMDRDRTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQzQKLToxMDRDRjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQjQKLToxMDREMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQTMKLToxMDREMTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMDAxMDAwQzMKLToxMDREMjAwMDAwMDAyMDgwMDAwMDMxMDAwMDAwNDE4MDAwMDA1MjAwOUYKLToxMDREMzAwMDAwMDA2MjgwMDAwMDczMDAwMDAwODM4MDAwMDA5NDAwODcKLToxMDRENDAwMDAwMDBBNDgwMDAwMEI1MDAwMDAwQzU4MDAwMDBENjAwNkYKLToxMDRENTAwMDAwMDBFNjgwMDAwMEY3MDAwMDAxMDc4MDAwMDExODAwNTUKLToxMDRENjAwMDAwMDEyODgwMDAwMTM5MDAwMDAxNDk4MDAwMDE1QTAwM0IKLToxMDRENzAwMDAwMDE2QTgwMDAwMTdCMDAwMDAxOEI4MDAwMDE5QzAwMjMKLToxMDREODAwMDAwMDFBQzgwMDAwMUJEMDAwMDAxQ0Q4MDAwMDFERTAwMEIKLToxMDREOTAwMDAwMDFFRTgwMDAwMUZGMDAwMDAwN0ZGODAwMDA3RkY4QjYKLToxMDREQTAwMDAwMDAwMjNFMDAwMDM1MDAxMDAwMDAwMDAwMDAyOEFEQTkKLToxMDREQjAwMDAwMDAwMDAwMDAwMTAwMDEwMDM1MDgwNENDQ0NDQ0M1ODcKLToxMDREQzAwMEZGRkZGRkZGRkZGRkZGRkY3MDU4MTAzQzAwMDAwMDAwRDcKLToxMDRERDAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDM0QKLToxMDRERTAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMkQKLToxMDRERjAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMUQKLToxMDRFMDAwMENDQ0MwMjAxQ0NDQ0NDQ0NDQ0NDMDIwMUNDQ0NDQ0NDMEMKLToxMDRFMTAwMDAwMDAwMDAwRkZGRkZGRkY0MDAwMDAwMDQwMDAwMDAwMTYKLToxMDRFMjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwODIKLToxMDRFMzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNzIKLToxMDRFNDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNjIKLToxMDRFNTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNTIKLToxMDRFNjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDIKLToxMDRFNzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMzIKLToxMDRFODAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMjIKLToxMDRFOTAwMDQwMDAwMDAwNDAwMDAwMDAwMDBFMDIzMjAxMTYwMEQ2NjMKLToxMDRFQTAwMDAwMTAwMDAwMDAwMDAwMDAwMDcyMDIzNjAxMjMwMEYzMzEKLToxMDRFQjAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTQKLToxMDRFQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTYKLToxMDRFRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDYKLToxMDRFRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzYKLToxMDRFRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjYKLToxMDRGMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTUKLToxMDRGMTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTUKLToxMDRGMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODUKLToxMDRGMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzUKLToxMDRGNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNjUKLToxMDRGNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTUKLToxMDRGNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDUKLToxMDRGNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzUKLToxMDRGODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjUKLToxMDRGOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTUKLToxMDRGQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDUKLToxMDRGQjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRjUKLToxMDRGQzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRTUKLToxMDRGRDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwRDUKLToxMDRGRTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQzUKLToxMDRGRjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQjUKLToxMDUwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwQTQKLToxMDUwMTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwOTQKLToxMDUwMjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwODQKLToxMDUwMzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNzQKLToxMDUwNDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNjQKLToxMDUwNTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNTQKLToxMDUwNjAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwNDQKLToxMDUwNzAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMzQKLToxMDUwODAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMjQKLToxMDUwOTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMTQKLToxMDUwQTAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwRkZGRjAwMDAwMDAwMDQKLToxMDUwQjAwMDAwMDBGRkZGMDAwMDAwMDBGRkZGRkZGMzMyMEZGRkZGQzMKLToxMDUwQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjQKLToxMDUwRDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwRUZGRkZGODYKLToxMDUwRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDQKLToxMDUwRjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRjAKLToxMDUxMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTMKLToxMDUxMTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGN0QKLToxMDUxMjAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzQjUKLToxMDUxMzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQzAKLToxMDUxNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQTMKLToxMDUxNTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGQjQKLToxMDUxNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODMKLToxMDUxNzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxRUZGRkZGQ0UKLToxMDUxODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNjMKLToxMDUxOTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwMkZGRkZGNjEKLToxMDUxQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNDMKLToxMDUxQjAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxMEZGRkZGNDIKLToxMDUxQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjMKLToxMDUxRDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGNjQKLToxMDUxRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDMKLToxMDUxRjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRUYKLToxMDUyMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTIKLToxMDUyMTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGN0MKLToxMDUyMjAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzQjQKLToxMDUyMzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQkYKLToxMDUyNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQTIKLToxMDUyNTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGQjMKLToxMDUyNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODIKLToxMDUyNzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMwRUZGRkZGQ0UKLToxMDUyODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNjIKLToxMDUyOTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMwNEZGRkZGNDAKLToxMDUyQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNDIKLToxMDUyQjAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxRUZGRkZGNjEKLToxMDUyQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjIKLToxMDUyRDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGNjMKLToxMDUyRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDIKLToxMDUyRjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRUUKLToxMDUzMDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTEKLToxMDUzMTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGN0IKLToxMDUzMjAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzQjMKLToxMDUzMzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQkUKLToxMDUzNDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQTEKLToxMDUzNTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGQjIKLToxMDUzNjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzODEKLToxMDUzNzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA1NkZGRkZGRDgKLToxMDUzODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzOTQKLToxMDUzOTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGN0UKLToxMDUzQTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNDEKLToxMDUzQjAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMyMEZGRkZGM0YKLToxMDUzQzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjEKLToxMDUzRDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMxMEZGRkZGNjIKLToxMDUzRTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDEKLToxMDUzRjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRUQKLToxMDU0MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzRTAKLToxMDU0MTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRjQwNjFDQkZGRkZGN0EKLToxMDU0MjAwMDBDMzBDMzA1QzMwQzMwQzNDRjMwMDAxNEYzQ0YzQ0YzQjIKLToxMDU0MzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQkQKLToxMDU0NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzQTAKLToxMDU0NTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkY4QTA0MkZGRkZGNEQKLToxMDU0NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzQjMKLToxMDU0NzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkY5NzA1Q0ZGRkZGNzcKLToxMDU0ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDQzAwMEYzQ0YzQ0YzOTMKLToxMDU0OTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGNTMxMEZGRkZGN0QKLToxMDU0QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNDAKLToxMDU0QjAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGMzMxNkZGRkZGREYKLToxMDU0QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMjAKLToxMDU0RDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGMTMwMkZGRkZGNDIKLToxMDU0RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzMDAKLToxMDU0RjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwNUZGRkZGRUMKLToxMDU1MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzREYKLToxMDU1MTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGNjMwQkZGRkZGNkEKLToxMDU1MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMxNEYzQ0YzQ0YzQUIKLToxMDU1MzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGMjMwNEZGRkZGQkMKLToxMDU1NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzOUYKLToxMDU1NTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGQTMwMkZGRkZGQjAKLToxMDU1NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzN0YKLToxMDU1NzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGNzMxQ0ZGRkZGRUEKLToxMDU1ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzNUYKLToxMDU1OTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGMDMwN0ZGRkZGMTIKLToxMDU1QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjMwMEYzQ0YzQ0YzM0YKLToxMDU1QjAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzMKLToxMDU1QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNTMKLToxMDU1RDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOTMKLToxMDU1RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMzMKLToxMDU1RjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzIKLToxMDU2MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMTIKLToxMDU2MTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNTAKLToxMDU2MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRjIKLToxMDU2MzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMkUKLToxMDU2NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRDIKLToxMDU2NTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMEEKLToxMDU2NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQjIKLToxMDU2NzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTIKLToxMDU2ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOTIKLToxMDU2OTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQjIKLToxMDU2QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNzIKLToxMDU2QjAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzIKLToxMDU2QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNTIKLToxMDU2RDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOTIKLToxMDU2RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMzIKLToxMDU2RjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzEKLToxMDU3MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMTEKLToxMDU3MTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEYKLToxMDU3MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRjEKLToxMDU3MzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMkQKLToxMDU3NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRDEKLToxMDU3NTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDkKLToxMDU3NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQjEKLToxMDU3NzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTEKLToxMDU3ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOTEKLToxMDU3OTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQjEKLToxMDU3QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNzEKLToxMDU3QjAwMDAwNDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzEKLToxMDU3QzAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNTEKLToxMDU3RDAwMDAwMDBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGOTEKLToxMDU3RTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMzEKLToxMDU3RjAwMDAwMDFDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNzAKLToxMDU4MDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzMTAKLToxMDU4MTAwMDAwMDJDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGNEUKLToxMDU4MjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRjAKLToxMDU4MzAwMDAwMDRDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMkMKLToxMDU4NDAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzRDAKLToxMDU4NTAwMDAwMDhDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGMDgKLToxMDU4NjAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzQjAKLToxMDU4NzAwMDAwMTBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGRTAKLToxMDU4ODAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzOTAKLToxMDU4OTAwMDAwMjBDRjNDQ0RDRENEQ0RGRkZGRkZGRjMwQ0ZGRkZGQjAKLToxMDU4QTAwMDBDMzBDMzBDQzMwQzMwQzNDRjNDRjNDQ0YzQ0YzQ0YzNzAKLToxMDU4QjAwMDAwNDBDRjNDQ0RDRENEQ0QwMDEwMDAwMDAwMDcwMTAwNTEKLToxMDU4QzAwMDAwMDI4MTcwMDAwQjgxOTgwMDAyMDI1MDAwMDEwMjcwRkEKLToxMDU4RDAwMDAwMEYwMjgwMDAwMTAzNzAwMDA4MDAwMDAwMDgwMDgwMzMKLToxMDU4RTAwMDAwMDI4MTAwMDAwQjgxMjgwMDAyMDFFMDAwMDEwMjAwOUIKLToxMDU4RjAwMDAwMDcwMjEwMDAwMjAyODAwMDBGMDAwMDAwMDgwMEYwMDQKLToxMDU5MDAwMDAwMDI4MTcwMDAwQjgxOTgwMDAyMDI1MDAwMDEwMjcwQjkKLToxMDU5MTAwMDAwMEI4MjgwMDAwODAzMzgwMDEwMDAwMDAwMDgwMTAwMUUKLToxMDU5MjAwMDAwMDI4MTgwMDAwQjgxQTgwMDAyMDI2MDAwMDE4MjgwRDkKLToxMDU5MzAwMDAwMEU4Mjk4MDAwODAzODAwMDBCMDAwMDAwMDEwMEIwRjgKLToxMDU5NDAwMDAwMDI4MEMwMDAwNTgwRTgwMDAyMDE0MDAwMDEwMTYwMDMKLToxMDU5NTAwMDAwMEUwMTcwMDAwMzgyNTBDQ0NDQ0NDQ0NDQ0NDQ0NDOTMKLToxMDU5NjAwMENDQ0NDQ0NDQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDODcKLToxMDU5NzAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwNzcKLToxMDU5ODAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDNTcKLToxMDU5OTAwMDA0MDAyMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMzEKLToxMDU5QTAwMDAwRkZGQjUxQ0ZDMEYwMDM4QTI3NzAzMzMwOUNFMzQ1RTIKLToxMDU5QjAwMEYwRTk4MTgzMTgyOUQzNUZDNkNFQzA1MDAxQzQ1NTQwOTkKLToxMDU5QzAwMEJDMEI4ODNGQjEzMjMwN0M2NjI1NUVGRjM1MjkwNERCOTUKLToxMDU5RDAwMDQ4ODI4MTIxMUU4OEQ3ODgzMTMwQTg0OTIyQzQxREE0NUQKLToxMDU5RTAwMDE5MTgyNjAzRjlBMTUwQjE0NzQwM0E1RjhBMzI3NzBGNjAKLToxMDU5RjAwMDE2OUNBNjgwMjlFNjJBODc2MEE3NjM5MTQ3QzYxOTY4ODYKLToxMDVBMDAwMEYyNEJFNTUwRjk5OTA0RjQwRjM0QkVBMjhFQ0FGRkEyRkUKLToxMDVBMTAwMDBBQTExM0EwRTI1N0QxRTRCRjQyRTUzQkEwRkVCQUE2MUIKLToxMDVBMjAwMDhFREREQzRFMzJGRDVEQzMwMkExMDFGQzk5QjA0Nzk4Q0EKLToxMDVBMzAwMDAzMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQjEKLToxMDVBNDAwMDAwRkZFRDdEMEI3ODU0RDVCNUYwM0U3MzFFMzM5Mzc5OEUKLToxMDVBNTAwMEU0MjRFNDMxODExMDRFMUUyMDY4MDgwMzg0ODg4QUI3NEMKLToxMDVBNjAwMDI3MTAzMEY2RDI3Njc4RDU1ODJEMEVBRjEwRjI4NjZCMEYKLToxMDVBNzAwMDJEQkRCNjdGMDYwODQ5NzhBOEMxMUYxMUFERDVFMTI5MTMKLToxMDVBODAwMEY2ODIxRDMxMjJCNjg4MDMyOEQyQUJCRDM3NTg3QzU1MkIKLToxMDVBOTAwMEVCMUZEMTBCOEE5MDQ0MkE2QUVGQjVFNUVFQjVGNjNFQ0UKLToxMDVBQTAwMEM5OUM5MzA5MDQ3QkRCQUZGRkZGRkQ3QzlGRUVFQ0M3MzUKLToxMDVBQjAwMEQ5N0JFREY1REE2QkFERkQxOEM5MzE4MUE0MEQyM0U0NzYKLToxMDVBQzAwMDIyRkNGQjA2MjE5MjlEMTAzMkExMzc5REUzMjAyMUQ3QjUKLToxMDVBRDAwMDE4NDI5MjY2MkZGREREOTIxNDQyRENCQUUyQkY0OUEzNjAKLToxMDVBRTAwMEE5QkJGRUU0MUE5QTVGNUZFQ0YwQUZBNDRENUIxRjREQkIKLToxMDVBRjAwMDc4NkEwOTJEQkZFRkExMkZDMzRGRDA3Q0ZBRUM3OUFEQTYKLToxMDVCMDAwMEM1QjQ3RUNFMjRDOTBGNUQxRDFBQUIxMDAyRURFN0Q4RDcKLToxMDVCMTAwMEMyNzYwMTUyODFFNTk3OTAzMEExN0Y5MkFGRThGODQ1QjcKLToxMDVCMjAwMDg0QjhFODlGMjQ5N0ZFMzc4OTFDQjJBNTYwM0VFNEQxNzMKLToxMDVCMzAwMEEwOUUwMjk5NDY0ODM2MzFGRTU1NjA3RTM2RkMwOUY1MzYKLToxMDVCNDAwMDQ0Nzc2N0QwRUY3NTlFNzdFNTEzRUM3RjhFNUYwQURCQjUKLToxMDVCNTAwMEU5NDc3M0YyMDM3MkM4NEREM0M2MDg2RDQ5QzcxREZCRjAKLToxMDVCNjAwMDVEMzkwOEY5QzAwQzk5RTQ2Mzg3QjZEOEZFNkZDQTBGOTcKLToxMDVCNzAwMDRDNzUxNEQyRkU2NzBCMDhGRkY5RDk0OTM2REE4MkNDOEUKLToxMDVCODAwMEE2RURFMTNCMjI0RTFGMUFDQzY3OUZEOUU4QjhERkUwQjMKLToxMDVCOTAwMERGRERERjQwRkZBN0MwNUY0QjA5QTFFNUNCMUMwQzlFRkEKLToxMDVCQTAwMEU0RDlEOUM1MzBDRTg5MTlENzE2NDNCRjczQTYxMzMyQUQKLToxMDVCQjAwMDg4NTY0RDlEM0RGNjkwNDRGM0VCMUE4OURGNEVEQkNEQzAKLToxMDVCQzAwMDI5MEQxQ0NGODFEOUY4Q0JBNzkzMDJFODk3OEVFRTYwMDAKLToxMDVCRDAwMDdENUZDNEZGRUIzOEVGNjQzRURFM0ZDQzFFMkIxMEZBMzYKLToxMDVCRTAwMDQxRjY5NzhBQTk1RDcyQTBGOTUzRDE0QjQ4NkEwNTJERjkKLToxMDVCRjAwMDFGMTk1M0VFOUY3NjlBRDBGMkU0RTlFNkY2NDAxMzcyNEQKLToxMDVDMDAwMDFEMjEyNUM0OTM3MkVBMUFGQTc3MTZDOUJBMjg0MkFENDMKLToxMDVDMTAwMDZBMEI4Q0VFRTUwRjZCNEFGRkZERjkyMkQwMDFGQTEyRjgKLToxMDVDMjAwMEZCRDYxRjZBOUNFOUU5QTBGODVBMzc3Qjk2ODdEMEY0MjcKLToxMDVDMzAwMEY1QzAyQzBGRTBFRkY1RDlCMzEwOEZENkY2NzM2NjY3NzkKLToxMDVDNDAwMDI3MDI1RUZCMUJFRkZFMDYzQUQwMDhGQTNEQzdCM0I1NEMKLToxMDVDNTAwMDdFOTA0OEVBMjNGNEZCMzkzQUQxQzMzMUZEREYwMTkzNEEKLToxMDVDNjAwMDREMjU2NDA5MzAxQjREQjMyNUQ1QTZEMkZBNkM4REU4QkQKLToxMDVDNzAwMDkxMzhFMzk1MDJCMTY5M0I5MjQ5OTkyOEUzNTJGMzBGQjkKLToxMDVDODAwMDYxQkIzNzI2RDk0QUMzNzFFNjczMDdFRkM3NTUxQUI4MDcKLToxMDVDOTAwMDY3MEVBNTZGRDY3NDEyNzU1MUJBMTIyOUFBQzZFMjc1OUQKLToxMDVDQTAwMDVEOEE1NDFBOEUwM0M3REQxQzVFNDI2ODdCQ0ZDMEUxNUIKLToxMDVDQjAwMDcxNjVEODAyRDA5RjMyNDcwQ0M0QzJGNTAzODA2NzQyOTkKLToxMDVDQzAwMDZGNEFBMjRDRUVFNkY4MThGRDcyQkZGQjZDNTA4RjMzQTIKLToxMDVDRDAwMDhGQkIwMDhFMDk5MEFBRUMzQjBFOEYwQzdDOTMwMUIyMTcKLToxMDVDRTAwMDk2ODJGQzQzQzI2MzI0RTBGQkNDMUVCOTI0MDEwN0U1ODUKLToxMDVDRjAwMDhGQTFGMDE3MTVBRTJEQTQ3QkQ0MTIxNEIyNTZFQzQ3MjkKLToxMDVEMDAwMEY0QTQyNDAzQkQ1NzExREUwRjI5NTE0RjUxN0UxNTQyRDMKLToxMDVEMTAwMEFCODQ4QkQ3NUM2QTlFMTIzOTY1RjAzNUYwQTkzQjE5Q0MKLToxMDVEMjAwMEM3QkYxQzVFNDhBMDE4RTU1MjMxRDQ4ODc4QzAwN0UzOEQKLToxMDVEMzAwMDJCRjk0REVEMDJBNUNCQkFEMUU1N0U5NDZGOEEyMTkwNjcKLToxMDVENDAwMDMzNDM3RUUxREY1N0Y0M0IzN0ZGQ0NCRDlDRDI5MUNBOTEKLToxMDVENTAwMDkxNkIzOUQzOEY4QURGMkM2N0VCOTI4RUI1MDgyMEM4MDAKLToxMDVENjAwMDY0Qjk0OTBGMTAxMjI0NDA3NzAzNkZFQkJFQTI3OEJDRDAKLToxMDVENzAwMDA0QkY1QkZCREQ2RkM4RTc2MDMyOThDOTI3OTMzRjA1MUUKLToxMDVEODAwMEZBMDdCRDc5RDM3RTA3RjBGNTNBREY1RTA3Q0M2QjVEOEQKLToxMDVEOTAwMEZFNUU4MjdBOEFEM0M3RThENzk1QUY1RDUyQ0VENjgxQjAKLToxMDVEQTAwMDdDOEQ4MEVFQzM0OEE3OUVGMkQxQTdDNjAyN0U3NkE2NjAKLToxMDVEQjAwMDJBRjc4Qjc0N0UzQjkzMDhFQUQ5NzU2QjQ4NzgyQkQwMTEKLToxMDVEQzAwMEI1OTRFNUI1NkY2OUUxQjU3NDhFM0I5REJDQkU5OEQ2QzAKLToxMDVERDAwMEQzQkMwNkVEQTlCRURCM0E0OTBCODc2ODdFNkI4QjhEODEKLToxMDVERTAwMEI1MUZBQjg1NDU5QTFGMzE5MTg0MTQ4QTRGNkRDNUMyOEEKLToxMDVERjAwMDk1NEU1QUJFNzVBM0VBMTdCNTVFRkQzNEEyMjU2NzJERjAKLToxMDVFMDAwMEI0REZCMkRFQTYwQUYwQkQ4RkFEMjMzQkYzNDkzODQ0QzAKLToxMDVFMTAwMEM3REZCMTM5Rjk5QjIzNjkzRTE0QjJGOTg3RDM0RkYyM0EKLToxMDVFMjAwMEY4RkE0NUQ5QTU0NDI4MDJCNDMxM0E5QzIxNzk1Q0FFRjAKLToxMDVFMzAwMDA0MDJFNUE5QkM3Q0NCN0VGRkJGOEVBNEYwM0QzNjVEOUQKLToxMDVFNDAwMEYyQUZBMDQ1M0JENkNGNENEMDI4OUU3NjY4ODEwNDNGNjgKLToxMDVFNTAwMDREN0ZGMEMwN0NDQ0VGQ0MwQzI2MDBERDc2NkU5QzlGOTUKLToxMDVFNjAwMDAwNENGMUMwRTY5OTFCNDY0MTdCNjFEMjYxMURFOTZDOTMKLToxMDVFNzAwMEQ2RkY0NzFGMjgzQUVDMDAzODRCOTk5RTRGNkEwRDdFOUIKLToxMDVFODAwMDUzQTJGOUJDNDkxMkI5ODk0RTIxQ0ZBRDIxRENEQjFGRTkKLToxMDVFOTAwMEIyMTE1ODRGRkJFODZEOEJCRTRFRDRDRDc5NTdFQkI0QTEKLToxMDVFQTAwMDhGODE3RjVEMEYxNjA5MjBEQTNCMzU4NkU3NDEzNzkyRjcKLToxMDVFQjAwMEYwOEFFQ0JFRTNFRjVDQzhFQTEzMjk1RDgwMEUyRUJGQ0EKLToxMDVFQzAwMDYyNTk2Nzk2NUFGODU2NDc3OTcwNzEzQ0I5NUE3NTFDRjEKLToxMDVFRDAwMDhGNDg3QTg5OTBENjhCNTdGQTlGNDY2MkYwRTk3QUYwMUMKLToxMDVFRTAwMDI4ODFGNUU5OEFFNzYzODEyNzVEQTA3QzBGODNBQjlDNUQKLToxMDVFRjAwMEVGQjkxRTFDRjdDQTU3NjNFM0YxQjEyMUVGMUVBMDdGNzMKLToxMDVGMDAwMDIyQzU3NzYxMjQwNEVCNTA3QTYxMjQwQUZDRTJDOTU3NjgKLToxMDVGMTAwMDM0QjAwQjlBMDkzMUM5QzVBMUQxRkI3QzFEMjAzNzEzQzAKLToxMDVGMjAwMDIyM0U1OEFGRDc4RDdFODNDOThGNTY4MUY4MzBFNjZGRjkKLToxMDVGMzAwMEI0RjdFNEI3OTM1OEZCQzFBODg3NzJGOENFNTM3ODY5RDkKLToxMDVGNDAwMDM5QkI4N0NCNTk0RjdGODRBRDQ3MjQ3MzFDQzI3NTRGMzMKLToxMDVGNTAwMEUxNjE3NTVFMUM3RDRDQzgwQTk0Q0I5NzQ5RTA3QTgxNUIKLToxMDVGNjAwMEE2REVDREVENTFBNzA2NkNBRURGMDA3OUI3NDAwMjkxRjkKLToxMDVGNzAwMDM4REY0RDEzRDg3QUQyNDI3NDVEQTBFOUEzNDQyRjE2QkUKLToxMDVGODAwMDcwOUQ0QjY2RkFEN0IyMkVGNUQxOUZCQzVEMTZFOTE2MEYKLToxMDVGOTAwMDQwREY2OEQ0M0U4MDM0ODdGODMxQ0QyMzAxNEM0NzkyRUUKLToxMDVGQTAwMDU2NENBRjI2MTE0Q0YzNDkzQkE2MDVBNDFCNTM0M0FGRjcKLToxMDVGQjAwMEY4ODkyQTQyN0VDNEM0RkFDOTIwRTdBNERBNjM4QkU1RDMKLToxMDVGQzAwMEJCRDA2NDMyQjIzRUNFM0M5QTJENzg3MzkwRjhFQkY4OTkKLToxMDVGRDAwMDFEMDI1RkU3NDhBNjhBRkM0M0Y4N0FGMTZFQjAxOEU4MjQKLToxMDVGRTAwMEM1NTQyOEZDQkJEQkNDRUZFMjI0QkUwRTM4RUEzRDY5ODkKLToxMDVGRjAwMDgwNTczM0REOEQ1NDU0Q0Q3QzVBNkRGMEE5NDQyNDFDNTgKLToxMDYwMDAwMEM3MzIxRkM0NjNDQ0I4RDZGRTU2NzNGQkM2OTg5RjlDOUMKLToxMDYwMTAwMEEyMjMxRjQ5NkU2NkNGNTAzOEY0QkQ3MUYwRDEyODA4MTUKLToxMDYwMjAwMDdDOUU0MUFCREMzQUIyMjlCRjRCNDlCNkM4NUE5QTZCNDkKLToxMDYwMzAwMDc0NEY3NkU4MzgyRjNGODk0NzY3RUI3Q0FDRjAyQUJFNzcKLToxMDYwNDAwMDgxQzFCM0E5MDc5RTBBQ0IzQUZBOTdDMkYzNEZBNkZFQzUKLToxMDYwNTAwMEE0NENCMjFERDYwQkEyODY3MERFNTZCQ0Y2RjlERTQyMDkKLToxMDYwNjAwMDhGRkVFNEQyOTE2OUQ2NTc0QThBRDcwMjg3ODU5RjA2NjgKLToxMDYwNzAwMDY4N0Y3Q0UzNEJFQTdGRTRDM0ZBMUIyMTQxMkFFQ0E5NDkKLToxMDYwODAwMEY5MDEwMUU2N0ZBRDQwMUExMzI5NUVDODY4QTJFREEwQjAKLToxMDYwOTAwMDcwQ0RGNTZBQ0M4RThCNjkzNzE5RjQ5MTY2MEJDOTc0OTMKLToxMDYwQTAwMEJFQ0Y5MkVFMjNEMDNFRTQyNzkxMURGNEIzNjdGMzZEOEIKLToxMDYwQjAwMEE1NUI2OTdEQUE5RkI2NjNGRDA1NDAxRUFFMUQ2RDBCRjUKLToxMDYwQzAwMDQwQjlEMTlGNEU5RTMyRjU0N0ZEMkUxMUYwRTEzNkU4RTIKLToxMDYwRDAwMDYzRjFDM0U0QjEzNkI0MUY5NTdDQTI2Rjg5MjM1RkM3MTcKLToxMDYwRTAwMEI5N0MxNTFENzFFQUIwOUVCOENBOTRCMDMzMUJGQThGMDMKLToxMDYwRjAwMDE0NDMzRUI1OUFGODYxNUQ5RkQ0Q0RFNjUxQzZFMTMwQjgKLToxMDYxMDAwMEU2OURGQTU5NDAwMDdFNkFGNzMxM0JDMDU1NDhEMDNGQzIKLToxMDYxMTAwMDU0MzJEQTc0RjAxRkREQjQwRUY1NDI3RTU0MTc1MzUwM0EKLToxMDYxMjAwMDNGQTIzRkQ4MUY5RTNENUYzREVEMEJEMDdFN0RENEI5OTEKLToxMDYxMzAwMDZBMDdCRTkyRkNFOUEwOUY1NzhGNTZDODYwRkFCREY4NjcKLToxMDYxNDAwMDNCM0JGNkZGQjlBNzYyMTg4OTk5Q0Y0NzBERDFCMTBCMzgKLToxMDYxNTAwMEE5QzE3MEE2RTExOEE2NjcxQkRBMzFFRDZDNzgwQkQzRTQKLToxMDYxNjAwMEZFRTk0QTU5OEVEQUNFRUI3RUUyRDdDMDFFMTAwRjNGMTEKLToxMDYxNzAwMDQ3MzQwRkMwMURENTc1NUMxNzFDQTIxMkIzMkU4MDgyNDgKLToxMDYxODAwMDA2RkY2RkQzRDhCQ0YwREE2Q0M0NkIwOEU2NERENTY3NTgKLToxMDYxOTAwMDc4NzgzNkUwNUIwQTAwOUU4NzM4MjJDMkQyN0M4Njc3MDgKLToxMDYxQTAwMEMwM0ZEMDAxQ0E4QjhFM0NCNzAyRjE1QzREQzYwMjlFNDcKLToxMDYxQjAwMDM3QzlBNDBDRjQzQ0UwMTNENjg5N0Q4MkVEMEU4MDAzMzAKLToxMDYxQzAwMEYyRjM2OUZFRkE4RkZBQzFGQjU5ODZGNzhDOTcyOTlFODQKLToxMDYxRDAwMDAwNEU0OTRCNjRDNkFEOEVGMjk1M0I5MTBCMTJENzI3MEEKLToxMDYxRTAwMEJEN0E5MkY5RDlCREY2QkRGNkVGMDBDRjk2NDY4OUFDREYKLToxMDYxRjAwMDg1QkNBNjY4NEExMUI3Rjc0MTRBODIxNUQzQzFERkRDRDYKLToxMDYyMDAwMDU2M0VGRDI4RDgwQkI5RTI1Nzg3NjQ1QTNFQjQ1RTNBMzEKLToxMDYyMTAwMEQ5MTEyMzRGNTk2NTc0RkRBNDc2QzJCMEU1RTZGMkVDQkUKLToxMDYyMjAwMDkwMzk0RjA3NDA3RjM0QjdDNTVDM0VDNEM2RjVBRTg3OTIKLToxMDYyMzAwMDc4NDAxRUFERjM1QUI2RTg1NzcxRkREMzU1MEQyNEVBRTgKLToxMDYyNDAwMDk2NjNGMjAyQzNBNzkxMTdCQzEzM0I0Mjc0N0VDQjQ2MDAKLToxMDYyNTAwMDExOEMwMzRDQjdCMUY1QjMxNUJFQTM3QzcxMkY0RkQ3OEEKLToxMDYyNjAwMDVCRkEzMTUyNjlBMkRCNDZDNjMwM0QxOTZGN0RCQURENUIKLToxMDYyNzAwMDU2M0NDRTQ2RkI2QkIwNEQxRTY3QTM3MkU0OTIyMjA0REYKLToxMDYyODAwMEVDNzc5NzVCRDFFM0Y5OTNEMzZEMTI4RTlGMjBCNUVCM0EKLToxMDYyOTAwMDIyODVBQkZCM0FFMkRGNEFGMUJFNENFRThFODI3QzJDQ0IKLToxMDYyQTAwMDJCRDZGQzIxNTA0N0ZFMzBDQTYzMTJENTYxNjJGNjE1MjkKLToxMDYyQjAwMEMxNTMwMjcwNTA3ODRBNkMzODRFMDRGQkU5QTYzODA3ODcKLToxMDYyQzAwMEZCN0Q5OUNDRkE1RDM2NEEyMzY4MzdGNjAzRTc1NTM2RUQKLToxMDYyRDAwMDE5RTEwQ0Q4MDQwOUZEMzQ0RTk3NTUxNTM5Rjc0REEzMzMKLToxMDYyRTAwMEQ5NEU1NTlGMDVGRDY3MjYwNTY3QzE3ODQ2Qjk2RjdFNzMKLToxMDYyRjAwMDI5RkE2MzE5QzNDQ0Y0MkI3N0Q0NjcwMTdGNTQwNjIyQTMKLToxMDYzMDAwMEQzODA3RjRFN0I1RjZDOTJFOUJDQjczNjEwQkY0NEYxRkYKLToxMDYzMTAwMEZGOUUyQjcwMUJGNDU3NzM3QkZEMDhCMDdGREYwNjVFN0EKLToxMDYzMjAwMDk4MDAyQTNCODA3QUFDQTU2NEE1NUZBMkU1NzI4OTE0MjcKLToxMDYzMzAwMDk1MjkzRkNBMTMwRkJGMjUxNzQwMUEyQTg2Mzg4QjkzMTkKLToxMDYzNDAwMEQ0MzM3RDQ3RjU0QjIyMzVCRDFDMjNGNThGMjE3RUEyMkEKLToxMDYzNTAwMDgwM0NEMDcyNTU2RjI1NjAwRjM4QThEQjcwMzI4NkVGMTUKLToxMDYzNjAwMDk0NEM3MzFFNkNGQUQ4N0M3RjdBRTM3MjI5OThFNzI3RTUKLToxMDYzNzAwMDg3MDNGRTA5REFFOURENDlDQzdGOTIyNkZBMEIwMERFQkQKLToxMDYzODAwMDdCQUZGRkE2MDZGMEZDQzQ2NjMzRjk2NzU2N0Y0RDVBMTMKLToxMDYzOTAwMEZFNkY2OTc5MTA2OEUyRkVCNkI0RkNENUI0QkNGMTgwM0EKLToxMDYzQTAwMDk3NTY5Qzk3NjNDQTMyOTQwQjA1RjAyNDMyRjkwN0JGQzUKLToxMDYzQjAwMEJFNjcxREU0NzhGODVCQ0ZEQjU4MkY1NzM3QkMzNUY4NDQKLToxMDYzQzAwMEMzRTEyMEE3MUQ4MzNGQTRDNDU5MkQwNTkxRkY0MjNFODAKLToxMDYzRDAwMEYwQjUyODFDOTI5OThGMDk3ODRGMTM2MjUyNkUxNzE4RTYKLToxMDYzRTAwMEY2OUI5QzVBODg3NDk0RENEMkE5OEU5OEY1RERDMDhGRjgKLToxMDYzRjAwMEIyRkNEREMxMUY4RTg3RjQ2RDRDQUQ3ODU1QTQyMDAxMzEKLToxMDY0MDAwMDNGRDA2OEQ3MTNCNzE4RTBGQUVGMzRFMkE5NzlDNDFGNzgKLToxMDY0MTAwMEE1Mzg3M0E0QjA3ODZBN0E1RTI4MEFGMzcyNTJGRDA5MkYKLToxMDY0MjAwMEVCRDMzRDIzNUY2QkM1RjA4MUM1MEYzQjk0QUQyMDNGOUYKLToxMDY0MzAwMEI0OENCNjYxNUNCMzY1NzhFNDkwMDJGOTBDNkE0MEQxMjMKLToxMDY0NDAwMDdBNjdDQTVEMjE4ODZENENDRDYzN0NFM0Y0QjNGNUQ0RTMKLToxMDY0NTAwMDM1M0M4QzdFOThBMUJGQkQxQzFGNUVBRDFDRjVCMzY3OUIKLToxMDY0NjAwMEEyRDlERTMxRDYwMTI3MkJBMkY0MzZEQjUxQ0U5NEE2NzkKLToxMDY0NzAwMDRGQzU4MkJFN0U5QTUzOUI3NjFBRTU2OUE0QjkzRjIzMjUKLToxMDY0ODAwMERFRDE2RUUzRjE4QjZCQzlCNTY4Mzc1OUUyMTJGREUxREQKLToxMDY0OTAwMENENkJGODcxMTNEOUJDRENEMzQ5MThGQ0U2RjQ4OTUxRjMKLToxMDY0QTAwMEM0OUJEN0NGRjA2NkQ4OUIxRTNFQkY5QjRBMjMwNEZDRkIKLToxMDY0QjAwMEJFOUVGOEYzQ0QwQzZGRUJBRjhCQTI3RkI3N0VFQzI5QkQKLToxMDY0QzAwMEI0NjdCRDg1MUQyNjNGQ0VGODFFQ0FBMUZFRkNDNDc2NkEKLToxMDY0RDAwMEE4QTFGNjE4Q0IxQjcxMjM4QUE3RTkxOTY5QkRFQjYxNDYKLToxMDY0RTAwMDJCQjdEQkFENzQ1MzI3OTI2MkQwNjM0NzQ3QTcxNTgzNjAKLToxMDY0RjAwMERFQkVCNzg0QzI0RUFCM0M3QTU4OTc2MkYwQURGMjdFRjYKLToxMDY1MDAwMEQ0N0M4NkRGN0JDQkQ4N0M2OTdCRjREM0VGOUQ5ODkzREEKLToxMDY1MTAwMDA0RTM2NkYyRjhCMDExN0ZFRUYxQ0JFQkNENzg0RjI4QjMKLToxMDY1MjAwMEI0QzQ4NTJEN0VCN0VBNjdGNDUyNEJDQ0U1QUIzOTVGMzYKLToxMDY1MzAwMDJCMjJBNzU3MkExOUNFRTgzNTMwM0U0RjMyRjhCQzg0QkIKLToxMDY1NDAwMEYxNzkzMkRGMzc0ODJGRDEwRTAxMUQ5MjRBOTlGRjRENjQKLToxMDY1NTAwMDJDN0VGMzREMjkxRDhDNUUzNzhGQzgwMDNGRkNGRUE5QjEKLToxMDY1NjAwMEREM0U2Njk3MzBCQTI2NzE3RUJDRUZDNjExMDJDODcxNTcKLToxMDY1NzAwMDcyODkyNjQwN0Q3MjNFQzM1MzMyQzUxM0FDNzdDOUE1REMKLToxMDY1ODAwMENDRUZGNjRFRDRCMDVENTIwOUEzNUIwQjdDNENFMTVGQkYKLToxMDY1OTAwMDAzNzQ4QTg5MUYzQjRCNUI3NUEwN0Y2QkYxNEUxRDc0QTIKLToxMDY1QTAwMDU5MzJDNUUxMjAwQUNGRDQ1MjBBMUJEODlEQjQ1RjgwNkUKLToxMDY1QjAwMEQ3NTMxOEM1Qjg1QTUyNDk3MEQ4QTVGQzdBNDJBMjgyNUUKLToxMDY1QzAwMENEODdGODEwNkM2ODRCRTkzQzI1NTg3RTY4NjJCMjIwOTQKLToxMDY1RDAwMEQwN0VFRkE3N0NDMEYxODA3MTNDMTc4RkEzREY1Rjc4N0UKLToxMDY1RTAwMDEyRjVEQ0ZERjA0RDM2QzhBOUY2RUIxQzlBMjdBNTM2NEUKLToxMDY1RjAwMDNGRjgwN0Y3OTdFNjA4RjFFMkU3QzZCQ0ZCODNDQjJBMzIKLToxMDY2MDAwMEM3MTJGODM1MzFGQzcyOTVDOEUzREUxNkZFNUQ0NzIyRUQKLToxMDY2MTAwMDZBMkVDODU3NDg2RkY3QTVGNUVBMEY4M0ZGN0FFNDY1M0QKLToxMDY2MjAwMDEyRTNDQkZFRjQ4OUExODdERDI0MThCMjY1RjdENTFGRUMKLToxMDY2MzAwMDkyQ0VGOERFOUUxNzQwNzlFQjAzRUYyNEM2QUY1MjhBNjQKLToxMDY2NDAwMEI5RkMzNjkxREI3Rjg2NUVEMTkyMDcxNDI3MjdBMTAwMjMKLToxMDY2NTAwMEFFNzcyMkQ3NEY0RkRBMDIwQkM1NTRGMEJCQzNCODRFMEEKLToxMDY2NjAwMEI4Qzg3NEFFMzcxOTlGQ0E5Q0ZGQTZFNjMzQkRFMjRBOEMKLToxMDY2NzAwMDg5QjA3Njk3OERBNzNBOTBERkQ2MzRBOEE4MUY1QUM2NUUKLToxMDY2ODAwMERFRDU5RTQzRjFCMDY2Nzg5MzFGQkU3MzhDNkIxOUI5NEIKLToxMDY2OTAwMDhERjZEQjNDN0M3OTcwMkIwQ0MwRkQzMEQ0QkYyMkFDNzYKLToxMDY2QTAwMDgzOEM1RjhEN0QzMDAzMEU5MjE5RDI2MTlGQ0MwOTdFNjEKLToxMDY2QjAwMDExRTA2NzI0REI1RjkwMjQxMkI1OEZFQjFEREY5NTQ3NTcKLToxMDY2QzAwMEUxQ0Q2NzY5Mjg5RkMxMERGRUM5RUJCNkUwMkE5QzZGM0EKLToxMDY2RDAwMDdFNkI5NEEyOUJDRTlCQzlDQjZBMjE0MjVDMjJDQ0VCMDEKLToxMDY2RTAwMDcyN0MxRUIyMzFCRThFOUZGNkY3NUQwMkVDRDNDNEUxMjAKLToxMDY2RjAwMERGREQyMkRCQTc1OTJENDc4ODUwMDg3RTFCRUQ4OUYyOEMKLToxMDY3MDAwMEM5RUE2QzZBOTdDNzgxQTM5MUYzNkJENTJFNjdGOEMzNkEKLToxMDY3MTAwMDE4N0VBQjg5MjQ5OUYyNzVGQjMzQzIxRkM2RkExMTc3MzQKLToxMDY3MjAwMDBBQjg0RjUxQ0REMTU4NDMzQUIyMDBDRkVGMjkxQUY2RUIKLToxMDY3MzAwMDU3NkJFQjQ4ODM3QzE3RTk0RTVCMDI3ODEwMDM4RjhCMTUKLToxMDY3NDAwMDc0RkQ3NzUyQkVDNEI4OTA3QjYwRUJENkU1RjBBNzgxQUMKLToxMDY3NTAwMDBDRDE4NTQwQ0JFNEE5MEY3OTk4OEUxN0RDMDdFMzY5NEIKLToxMDY3NjAwMDJBMkJCRkQyNzFFM0YwRjUwQkIxN0M0REM0NTc1OTZBQTcKLToxMDY3NzAwMEU1NkI3RjE0RjlEQTlEMTJDNTdBQjc5RkYxQjVDMThGMjkKLToxMDY3ODAwMDg5OUMxRkFEN0M2ODhDQkY5RUM3QUZENjcyM0U1RjMzQkQKLToxMDY3OTAwMEExNDk4NTcwREZEQTUxOUIzMDlFRTYyQ0RBNUMwMTdDRTIKLToxMDY3QTAwMERFMzJBQTI1MEM3Q0RFNjRGMDM1REYxN0ExRkUyRURCN0QKLToxMDY3QjAwMDFGRDM1QUEzQjA0RTI2NzJCRTU2RDRFRTA2OTA3QkVCODIKLToxMDY3QzAwMDdDNUQ5MzM4QkMzNDA1QkUwNkI4Mzk1RkJGMDdGODkzQ0IKLToxMDY3RDAwMEZEREQwOEFFQzFENzZCMDdDQ0Q3QkE0NTZGOUJEM0ZFQTIKLToxMDY3RTAwMEZDMjdEOUMyRDcxRTg5RjFFNzY3QzBENzAwNEYwQUIzOEIKLToxMDY3RjAwMDYzREMzRTk2Q0E3RUVBREZDN0U5RTcwNjg5Rjk5OTZCNTIKLToxMDY4MDAwMEI5MUNBQ0U1NzJCMEI2MUYzOUY4M0YyMkYzMDNGRTlBMEIKLToxMDY4MTAwMDcyMzA4QkM5ODE0M0EyRTU4OTkzQUU4QzFGMjVCMEQzMUEKLToxMDY4MjAwMEUzQzg3QjlFMjRGQ0I1RTFERTM0NDNCQzcyM0NGRTI3MEEKLToxMDY4MzAwMDMwQ0Q4NEJFRjQzNEQyQ0Y0NEU3QzBFNDNCOEZDOTczN0IKLToxMDY4NDAwMDdGNzJCRTc2Njg3QzM4RkU1MzY0RjRBN0Y4MkU5MjI2RDkKLToxMDY4NTAwMDVDMzlCRUZGNUE3MDE1NzI3RTM2RjA0MzgyQzUyOEI3ODgKLToxMDY4NjAwMDMxN0E2NjNBQzAyQkE5ODY5RTc5MDREM0E5NzlBRDI4REUKLToxMDY4NzAwMEE3ODZCRTgxNTgwQUZBMkI2QTJCQzYzQjlDOTlBRDY4NDUKLToxMDY4ODAwMDlGMzlGMzk4QkUzMUZDMjRFQjdDOERCODc4MTNENzMzNTUKLToxMDY4OTAwMDQ5NzkyMTAyRUI5RjNEODU3MDNGQUE5RUY5NTE5OUNDMjEKLToxMDY4QTAwMDFGMzBFMkQ1ODZGREE4MTg3RUQ0RDBCQjcwOUZBNzc5OTMKLToxMDY4QjAwMDc4M0REQTk3Q0QzN0Q2M0JFMkVEQzMzNkZCRUU3N0YwODUKLToxMDY4QzAwMDRENUZEMzNFRUIxQTVBMEVGREFFQzlCQjlGQzRCM0MzOTYKLToxMDY4RDAwMDhDNzkxOEZCNDY0RTNFNkU3MzFFQjVBODYwNUNERjMyQTUKLToxMDY4RTAwMEZDREU2QUM3MzQ2N0IyRkU3QUJFRTc3QTU3RUVEMUJCRTgKLToxMDY4RjAwMDJDOEY3NjU0NkU4QzlGNkZFOUM3RTAwMzg1RTg0M0EzMjUKLToxMDY5MDAwMDEwMzcxOEU0MUUwOUU3NEM5QTg0MDQzRkQ4Qzc0RDkyMEIKLToxMDY5MTAwMDIwOUQ3MjkwMUU3QkE5NUE4OTE2NDBGRjI3NjZCQzlDNTkKLToxMDY5MjAwMDg1RjZCMjNEQjgwNkU0QkNFOUFCODAwM0UyQTlBQjUzRkYKLToxMDY5MzAwMDVFRjNDNjk2OUY5REYxRTZCN0MxNkNBNURGRDVFMjdFRkEKLToxMDY5NDAwMDhFODM0OEIxRkI2MzI3RENEQkQxN0U0QkM4MzdDN0U5QjgKLToxMDY5NTAwMDlDMTRBRTA5MDJDNDEzQ0NFNTBBOEZCRjI4OTlFNjcyRDUKLToxMDY5NjAwMDk5Qzc1RkE0MTQ0QjM5RTcwRkI5MzRCRTVFNzk5M0VCMzYKLToxMDY5NzAwMDE1REYwMjc2NEVFN0M0MUMxNkQ3M0I3MTJCNEY2NzMwRUMKLToxMDY5ODAwMEZFM0VDN0RCNzVGMzM0QzJGNUVFNUY1MzFGMjVFNUY2MTcKLToxMDY5OTAwMEMyRUY5QkUyQzdGODIyOTk2NTQ3QkIzRTJCODU5RDJCMzIKLToxMDY5QTAwMDIwQjFFNzI2RTA1RjZCQTI0NDYyRkNDQ0ExODE5N0ZGOTcKLToxMDY5QjAwMDA4RjFENDYxMEJCRUNBMDYzQzZCMTVFQTYxNTg0NkRCOTAKLToxMDY5QzAwMEE1NkM5Q0M3NjM0MkY3MjgxOENGRTYzQThCRkJGNTAyMEIKLToxMDY5RDAwMDQ1RTM3MjZBMTIwQkY0REJEQjIxODVFRkJEQzA1MjNBNEUKLToxMDY5RTAwMDhGN0IwNTkxQkZFQ0MwMzcyMkQwMjk4Q0E5OEI0NEIxOTUKLToxMDY5RjAwMERFNDMzQTMwOUYwODFCRTZCOUUwODc1MUJGNEJDNDMzRjIKLToxMDZBMDAwMDRDNjExQkM2OEQ3RUNDRjY0M0Q2ODg3ODZFODNBODAzNzYKLToxMDZBMTAwMEI0QkZDOUVEMkFGODk3NDI4ODdFRTcxQUY4NzdCRTQwREUKLToxMDZBMjAwMDZCMzFDOEM0RTBCMjA4QzY5M0FERUQ3QzUzRDgzOUEwMzEKLToxMDZBMzAwMDNFN0FGQkFGNEZERjM3NTI3MzgxOEY1NDJDMzdFODFDRkYKLToxMDZBNDAwMDE0RjU0RTY5NDJERkYyNUY4OTgxRjMxMkM2QUI1OERDNjAKLToxMDZBNTAwMENENUE1RjJBRTkxNzQwREVBQ0U1QzIwQjdGM0EwNTdFQ0UKLToxMDZBNjAwMEY0QUE2NzY0RjRBM0E3M0MyMzQ3QkY0MUYzMzU1QjA0NTIKLToxMDZBNzAwMEY0NTM2RDA3OURFODBGNzczRUMyRjI1MThGQTI0M0ZCOUUKLToxMDZBODAwMDczREIwNThDMDdENUQ5REJFRkJEMDFFMjhBQ0Y4ODA0MjMKLToxMDZBOTAwMEZEOEQ3MDE5RUU4QjlERTI3MzI2RkI1OUJFOUMwNzgwMUQKLToxMDZBQTAwMDZBQjYxQzlBMEJERjU3RUNCNzEzRDg3N0E4Nzk2RUYxNEEKLToxMDZBQjAwMEI3NkZBMEY5QzVDNzY0RjQ1MTZBNzZBQzUwNjA3RjY1QzIKLToxMDZBQzAwMDQ5NTg4ODQwQkU2QjMyQzFGMTQzRkJDNEYwMEVEQUJFQjgKLToxMDZBRDAwMENCREI5RTM2QzcwREZCMkIwRUEyNUQ0NUUxRjZCNEE3QkUKLToxMDZBRTAwMENEQTZGNEE5MEMzRjM1MERCRUFCREMyREY4QzFGRjk4NDcKLToxMDZBRjAwMEYyQ0M4RUEzMTlGNEJCOUEyNzA0M0NBNzUwQjVDQjQ1MjIKLToxMDZCMDAwMEI0MThCQTlDNkExM0EzREY4MEY4MzM5RDI3RjhDNThCQUQKLToxMDZCMTAwMDQ5RUIzNEMwN0JDRDhFMEQ4QTE2MTNCNzNDRDMzMDkyMkYKLToxMDZCMjAwMDY4RjZERTdDQ0QxMzc0MUNGQTVERUQ5MzgyMUZBNjU4QzcKLToxMDZCMzAwMDZCMjM0MUUwOEZDRUU3OUM2NURCREMzMEJGMTVDQTA4RDQKLToxMDZCNDAwMDBGQ0NBQjU5ODE3NjhCQzNGM0Y2QzE3RTdBNjU3ODhCMTcKLToxMDZCNTAwMDMyOERENjU3M0VCMjQ1Mjk4RkUxQTdBQTVERDcxMDJEQjkKLToxMDZCNjAwMDg2M0Y0RTZEQ0U0REJGRDQ3QTdCODZBRTVCQjFGMDU0N0UKLToxMDZCNzAwMDEyQTZCNzg4MTQ1NjY2QzRFQzdCNzZDODQ5OUMzRjQ1N0MKLToxMDZCODAwMDUzRkYwNkRGODc1RTI3MThDNzBBM0RFRjQxQkMxQTc0MjIKLToxMDZCOTAwMDVCQTYzMkJENjBEMEVEQkNDQUU5Mjg3NTE3Q0Q4OEIzQkQKLToxMDZCQTAwMEFGN0EyRkQwQzEwRUYxMkExNUQzRkIxQjdDOTg2RTZDRTcKLToxMDZCQjAwMEQwOTAzRTlCMDA3RjU3RTFCRTA2OTY3QjI3OTE2Mjg4NkUKLToxMDZCQzAwMDhCNzg3NUEyQzI1MjlGM0M1RDJGOTYyMTRFMTI2MEY5QzAKLToxMDZCRDAwMEI0REI4MzgyNzY4OUY5MUJFOTI2MzkzODBGODI1Q0I3RUEKLToxMDZCRTAwMEM5NEY0Qzk2RThCQUJFNDkwOTJFMjU3RTNBQkVCNDc3MDUKLToxMDZCRjAwMDcyQzk3NTYwQTcwNUU3QzhBOUIwOUYxREFDNjBGMUU4MzAKLToxMDZDMDAwMDg4MEZFNEEyODlFRkNCN0M0QjY2RjJENjk0QTE2MDdDMUUKLToxMDZDMTAwMDY0RDNGNzhCQjZBMUVENDExODVFMzY3REJGN0MyN0VDQkYKLToxMDZDMjAwMEFCRDE3RUU2Q0E1NEFFMUE2NURBNEZFRUU1RkI0OTlCNUUKLToxMDZDMzAwMDNCRDFENDRGREFEQzBBQTM5RkM1RDg4RjczNjBGRDZDQkIKLToxMDZDNDAwMDlBN0JCRDE5OUVCOTk1NDYzRkY1RDg4RjY3NjBGMzRBODgKLToxMDZDNTAwMEJCNjM5MjE5OUUzQkFBQjE5RkY0REJGRDY4MUY4ODA2QjcKLToxMDZDNjAwMEZGOTA3NkRDMTc3NUVGNEUxQUI3OTZDNEYyRDFFNDFGODkKLToxMDZDNzAwMEMzNzgxRTJBNTVCMTdDOTQzODMxQzEyNDRGNDk3QUIyNjkKLToxMDZDODAwMDI5M0ZBODc0QjBBOTdENkEyMEM3NTQ5RjVFNzZCNTg1NTgKLToxMDZDOTAwMDJGRERBOEJGMzE0RjgxOEEyNkIxMzhBQjMyNTg0MUJEQjQKLToxMDZDQTAwMDUzM0NEODgxRjlCQjA2QkI1MUVGREM3NTdERjAyQUIwQUYKLToxMDZDQjAwMEY3MDA1NkQwRjM3NzI5QzEzMTZBMUNCRUExRjMxMjA4NDAKLToxMDZDQzAwMEM2Q0YzNDFCQTQ3REVDMzJCRUVGMzk3OUM4NTcyM0RFMjIKLToxMDZDRDAwMEE3REZEN0Q5QkE0NzI0RDFGQzQzNEFGMTIzMzBFRkFEMUYKLToxMDZDRTAwMDMyQjNFMzhEMzg0MzgyOURBMEZFNkJDRTJFREExNjhBMzYKLToxMDZDRjAwMEMxNkJDQjUwQ0EyRjQyNkZCRjJENzJEMDA3RkNCODczNDcKLToxMDZEMDAwMEY1NkY1NzRBMTRCRUE2QTEwQTFFNkU3QTVDRkVFREUxMkQKLToxMDZEMTAwMDEwQjU5OTlCODc5NkZCMDBGRjc2ODVFQThGRDhGMTE1MTEKLToxMDZEMjAwMDNBN0UzRThFQkYxQkM2REYyQjMzM0JEOTNBQkUzRDY3NTIKLToxMDZEMzAwMEEyNjk3QzQ3NTY4NTY5N0M4NzQyQzdBN0YyQjE2RkY1ODcKLToxMDZENDAwMDNCN0M3QzhBQkZFQjA5Nzk1NjdFMDdDN0I3Njc1NUUwNjUKLToxMDZENTAwMEY4Q0QwQUE5MzA4RDlGRDAzM0ZFMDE5MDlGQzNGRENEQTEKLToxMDZENjAwMDNGRTc3QUYzRkNCMzJBQ0RGMzU3RDhGQzhGQUVGRTgwMTEKLToxMDZENzAwMDhGOUY4MEYzN0Y1OUZFODBDRDNGQUI5MkNEREZDRUZBNUYKLToxMDZEODAwMEVEMTlERkRCODNGRjU3NjFGRUFGRjUzN0ZGREM0OUU2MjYKLToxMDZEOTAwMEY5MEZBQjM2Q0ZERkNFQzY3RjYzRjUyNzdDN0MzNzhFMEQKLToxMDZEQTAwMEZGQTZGQzA5OUJGRkIwNkExQzVGQjEwN0ZEQzA0N0NBODQKLToxMDZEQjAwMDkwODQ3QUYwOUZBOTYxQTQ2MTQwNURBM0UzNDAzQTkyNzgKLToxMDZEQzAwMEM1QTkzN0M4MzkwOEM3NUQwOThDRUYzRTRGQTBGQ0U2NUUKLToxMDZERDAwMEVFRDVBNzI0NEMyNTkwRUFDQjVBQ0VEMzU1QkI4QjE1QzQKLToxMDZERTAwMEU2MkY4NEQwNUY1OEM0NDE1REI4NUZDNEY1OEM2Q0I0QTUKLToxMDZERjAwMDg3ODc1Mzc4M0JGNzhCMjFDODJGREM3ODIzOUU1QkFDQzkKLToxMDZFMDAwMEIzMTNEQzc3QTc1NjMwRkExRkZGRjFDMEU4QURCMUYzM0EKLToxMDZFMTAwMEIyQTY4QjVBNjVDQkZFMTM4M0M3MzhFRjU0MjRBQkE2QkEKLToxMDZFMjAwMEZDMjk4OEE3NTAzRDdDMTJGQzFGOUE5RTk2RTk3OEI0RjUKLToxMDZFMzAwMEZDNDNGMDgzQUU4QTk1MUI3NjJFOEM3Njc3MjI5RkNFMEMKLToxMDZFNDAwMEVCQkIxQ0ZFNTMxMkMzRjdBOTNCMDVEQzQ3Rjg3Q0MzMjAKLToxMDZFNTAwMDUyMDVGNEQ5QTI1Njk3Qzk2RkE4RTM3NEVBN0VDRThFODQKLToxMDZFNjAwMEZCOERDNjc5QkU1QjUwMTQwOUY5RkRDMTZGMUQwNUJCRDIKLToxMDZFNzAwMDcxRjFFNjQxQTZFRjZFMjdFMUQ1NzAxNDczQzFGQTc5N0UKLToxMDZFODAwMDQzNTUzQUZGREJDQUVDRTM0NDhDNkJFQjQzNTgxQzlDNDQKLToxMDZFOTAwMDBDODFCODQ5NTlEQjA2NzkwOENEREM1MjI2OUJFQ0Y5MDgKLToxMDZFQTAwMDVCODNFNkZDNkQxNUU2N0NBNzFDOTY2RDYwQ0YyQzExMEMKLToxMDZFQjAwMEM4MTZEQUVGRjdFQjY1Q0JCOTAwMzY4RTU3NDlFNjc2QTAKLToxMDZFQzAwMDI1MUJFRkJCOTQ4NjE5QjRFOEZCOTA4RTgzNjIxNUU5MEQKLToxMDZFRDAwMDNBNTc2NURGMUFGMEQ0REQyRDkzMjhBRUM3MURBOUI4NDcKLToxMDZFRTAwMDBGMTQ0QTQ1QkYyREE4QjI3OTVCRTE5RDJCM0JGNDAwRkUKLToxMDZFRjAwMDg1NjdFRThGNDRDNEE3MTVGRThFODMyRURENDZFREYzMjUKLToxMDZGMDAwMDhFQ0Q3RjkwMjE3RTZDOUQ4RjE1RkUzQjk2NUJFN0EzMTcKLToxMDZGMTAwMDJBQjAzRUNDMEI1OUNCMTk5RjU4RjlBOTZFN0ZGMTM2OTgKLToxMDZGMjAwMEIzM0Q3QkYzQjY1OEZCQjU2QUQ3MEM1MzdFNDlGODU2OTAKLToxMDZGMzAwMDUzRkJDNTlCRTc5OUVBMTdCNTJFMzFENTJGNjg1OTZBREYKLToxMDZGNDAwMENBQ0YwQkZEQzhENEZFOEVFNTJCNENGNURGQUY1RjYzRDcKLToxMDZGNTAwMEFBQkZBRDYyODMyOTdGNkJGMDIxNTNGQjVCQ0FCNjk4NTEKLToxMDZGNjAwMEVBNkQwNzQ3N0QwN0U0NjhENUVCMjI5RUZEQkRFMDNFNTQKLToxMDZGNzAwMDc1MkZEODlCMTdEQzEyRUU3MzdFNDRFRDE1OTA4MzMzOEEKLToxMDZGODAwMEQ0NUU4MUI0NzNGRjc4RjRBN0E5MUUyQzg3NERBMkY5QjMKLToxMDZGOTAwMENBOTg1NTJEOTlBMDk3MDlFQUNGNzI2NUMyQUFEMDI0NDQKLToxMDZGQTAwMDhBMTdCMEQ3QTk3Qzg4OUIxNTEyMUQwNENFNEM3MjBGOEUKLToxMDZGQjAwMDFGNzc4QjMxRjUxRDk3QTlERjRDMDU3RDdDREY3QUIxRkEKLToxMDZGQzAwMDIzN0U3OURERDY3OUMzRDQzODdFNkFBRkRDOTIyMUIwRDYKLToxMDZGRDAwMENFNzU1OUNFOUYxODY5QjVFNTNDQTdCMUJGN0Q4MUVCNTEKLToxMDZGRTAwMEQ5NkE4NUU5ODNFQUJEMTk5MzYxNzM4NkZBRTUyM0UyREMKLToxMDZGRjAwMDlEOUJFQ0Y5M0UyMkIwMEQ0OEIwRkU1MzgxMUY4Njk4NTAKLToxMDcwMDAwMEY2NkJBQTc2RTU5QUU0RkJFQzIxMTFFMUFBMDU5RDQwMTYKLToxMDcwMTAwMEY1RUExNzUyNjA4RDAyNzIxNjNEOTIzNTZCMzRDMEExQUQKLToxMDcwMjAwMEFGNTU0MEVGRUM0RkM1NzVGRDZDNDNFOTM2RDhBRjNGMjcKLToxMDcwMzAwMEQzMTBDMEY0QTM4NjMyNEM0RjM1MDQzMUZEQjBBMTAyMDkKLToxMDcwNDAwMEQzOTMwREY1OTg3NjM0MkNDN0Y0QkQ4NjEwQTZFRjM2OTEKLToxMDcwNTAwMEI0NjBGQUJCODY1NjRDREY2QUQ4OENFOTFCMEQ2MTRDRDQKLToxMDcwNjAwMDNCMUI3NDRDMEQ3OUU4RDFCRjAxNkUwRjFCMUJENzg0RkQKLToxMDcwNzAwMERCQzM3QzJFOERBOTNERTdDMjcwRkZGN0JDRkJGMzExOEIKLToxMDcwODAwMDYwRUY5RjdGQ0I4RUZCNkNGREUxQ0JDQTZGRkREMzUxRDAKLToxMDcwOTAwMDQ3N0JBNTNDM0MwODlENjM2QkJEMzM4MUQxQzk2OTIzMDcKLToxMDcwQTAwMEE1NjQxQ0VDRkZFQ0Y0Q0ZDRkM3QkNDNDJFRjU4NEZENjcKLToxMDcwQjAwMDMzM0M3MUZBODU3ODVERkFFNUU5NDRGNEVFODI5OTk0RkYKLToxMDcwQzAwMDFFQTcxRUZFQUYyMkU4RjcwMkFDN0Y2MDA3MUMxMTcxRkQKLToxMDcwRDAwMDFEMjZEMTZEN0VBMEQ3OTVFMjRENzhFMUY3NTkxMDJGOEUKLToxMDcwRTAwMDNCRDc4M0JGRjYyQzg4OEI1REFCQThEOEZGRjkzNjNCMjYKLToxMDcwRjAwMDgxRjhEMkY5MDMyRUJDQ0Y3NUZFRDgzNjJGQzhFMzMyMDMKLToxMDcxMDAwMDlGMTg4RTNENDc2MTRENkIyMkQ5NjFCN0M5RUYzNkU3QjUKLToxMDcxMTAwMENGQjcwQUE1NzgxRTlBNjg4OUIzNDcwMzVGQTk2MTM4N0IKLToxMDcxMjAwMDBGRDJEOUUwQzNENEU4Njc5OTRGQzE3MUNFRUNDQTY1REMKLToxMDcxMzAwMDcxMzM3RTVFODNFQzRFNDI3RUE1N0UyN0I2RkY5Rjg2MkUKLToxMDcxNDAwMEE3QkY3RTBDNzgwODY5MjMxRjM4MDg1RTcxQkI5OERCRTcKLToxMDcxNTAwMDdGRkI3RUY5NDlGQTRDODFGODJBMzkyMDdGMEVGNjgyQUUKLToxMDcxNjAwMDlERkU3NzExMUM2NTIyNjFERUU4QjcyRTIyODZFQzYzNTYKLToxMDcxNzAwMEEwN0NCNzY5M0NGQTlENjZGOEY0MTc3MzJFQzVCN0U2OTQKLToxMDcxODAwMEZCMzQyMjA0NjhCRjQ2OUNBNDBBRkU4MEYzMzBGNTAyNUIKLToxMDcxOTAwMEM2QUI4Qzc4NDk5N0U0NkUxMUM2RjRDNjRCRUE3OEJDNEUKLToxMDcxQTAwMEI4QzZEMUExMDQ2OUQxQjlCNkRDNEJFRTlGOUU2OTM4NEYKLToxMDcxQjAwMEE2QzIzOUFGMEE0N0FCMDJDRTRGNDU2NDU0MDlFOEI5QkQKLToxMDcxQzAwMDczNkRBQkQyQzAxRUFDMTJDRkRGMTUyRjdFOUI2NzY3RUQKLToxMDcxRDAwMDcxQkQyNTYxQjlEQkJDOEU3MkZFMjBCNDVGQTM5QzFEMUUKLToxMDcxRTAwMDcyNzQ5RjhBQzk5RkI1MzEzQkRCREFFRjA0RkJDMEY2QUUKLToxMDcxRjAwMDJENkE3NzFGOUY3NjgzRDYxNzRGQjVGQjNGNTUzMDNFREMKLToxMDcyMDAwMDJFMTE1MzVDQzlDMERGN0I0QTYwODI5REUyQTk3MkQ3MTAKLToxMDcyMTAwMEZCNjg4RjdFMjQ4NzQ2REM3RDA5RkRENDc3N0U2RTlGRDgKLToxMDcyMjAwMEU5N0M3Mjg4QjRDMzM4RjMyN0YyODE4ODc2Q0IzQjc0NEIKLToxMDcyMzAwMDNERkRGODE1OTk5RERCRTRFNzgwN0JGNjk1RjlCRUZFRjAKLToxMDcyNDAwMDAyOUU5QkRGNTY4NUU3ODQzRURFRjc4RjY4RkYyRDI0ODQKLToxMDcyNTAwMDAxMkZEMjgxQjQxNjgxMUQ3OThFRDg0QTAxNEZFN0M4MUIKLToxMDcyNjAwMDZCREVGMTMxNzRCODk1M0E0QTQwRUYwNTJENjYzQjg2RTYKLToxMDcyNzAwMERBQkZBNkZDRTJDREU2N0MzOTk5OTkwNkZBQTQ3Q0EzOTQKLToxMDcyODAwMDRDQzIwMkNFQ0Y1NDdGQjM1REM1N0UxNzkzRkEyNjU4MDkKLToxMDcyOTAwMDU3MjVFRThGQ0M1Nzg5MzQ4NEVBRDU5QTY3N0Y1NjM0QzgKLToxMDcyQTAwMDhGQzIxMUI0MzMzRkM4ODhCRjJDNDk2Njc2NjA2NTRBRTcKLToxMDcyQjAwMDU4ODE3REMyMEZEQUM2N0ZGNzA2MjA4MzNEREMwNDcxNUEKLToxMDcyQzAwMDI4OTI0OEZDM0I0ODVGRkM1RTI5RkM1Njc4OERGNUJBNTUKLToxMDcyRDAwMDRGMUM4OEMzMjFFRTEyRTJFRTAzRDZEQTA1NkVDRjg2OEMKLToxMDcyRTAwMDMwM0RDMEU3NkRGODA1QzcyQ0Y5MTU3NjdFREU1MjI0RDcKLToxMDcyRjAwMDIyRDBGRDlDRUEwOEQ5MTJCMURFMUY4NTc4REM1RUJCODYKLToxMDczMDAwMDdGOTUwNjcxRkNDMDZBN0I2QTZGRENERjY4OTc2NDBGNEIKLToxMDczMTAwMDYyRjk1OUUxRDU3MjNDRjcyMDQ1MEJGMERFMjE4RkVGODEKLToxMDczMjAwMDJCOUMxRkM0MDQ2RjAxOUMyM0Y1NDBEQzFFQ0U3NTNBRDQKLToxMDczMzAwMEJENUIyMURGRTRBOUMwRjMxRjc1MjBFRkI0QkY3QkJDQTgKLToxMDczNDAwMEQzOEU0MTlDREE0MTVBQTMzQUU1NUZCQkNGQjIxRkEwNkUKLToxMDczNTAwMDk5RjMyRTkwNEJEMDY3NTA4MEU3QTIwOUM2Qjk1QzIzMDEKLToxMDczNjAwMENERUQzQzdFNzNGRTMxMkU4Rjc0ODE0MzNFRUUzOURGQ0UKLToxMDczNzAwMEU2NzA0N0UxM0MwOTk5Mjg5REVERjFCNzcyQzBERjYzRTMKLToxMDczODAwMEYwQzNGRDU2Njg3RkE3Q0FEQUQ3RjI3REREM0JERjlFRUEKLToxMDczOTAwMDlDOUU3QzA5N0Q1NEY3QTU0MEMyMzFFQjQ4OURENEFEM0QKLToxMDczQTAwMDAwMUZENjdEMjk2MUY5RDdENjlCMUE1RDU1NjNGNEU2OTcKLToxMDczQjAwMDJCNEFGMDU5RkIwNEE2MjcwMTNFODE4RTEzQkJERjY0RTQKLToxMDczQzAwMEJEODc3MDAyRjg2MTQyMkYzRjdDNkQzODUyODg0OTdGM0IKLToxMDczRDAwMEJGQTcwNDhGQzU4M0UzNkJGN0VGRUJEM0ZGMDlFMEJCRDcKLToxMDczRTAwMEZGQjFGRUYzRkFGNERGMTEwRkZFOUE2N0Y3RUMwQkQxNTEKLToxMDczRjAwMEY1QjVGMjE3MEY3OEUxMTBEM0M3NTI2QjFBOUNFRkFDQkEKLToxMDc0MDAwMERFQjFEQTBCNzJGOTkxMTRGMjAyNUQzRjBFOEI3MUVGNkYKLToxMDc0MTAwMEU3QTYzQjBDQkVEM0RENzA4RkIwOTZGM0REOTk5RkFGMkUKLToxMDc0MjAwMEZCMzZGODJGOUZFRjkwNTU4QzBGRUNCMjQ3RUQ5NDI5NjcKLToxMDc0MzAwMDZCREI5NjMwRjlEODY1N0Y5RkU1OUJGMUJDNTNERDdFMTEKLToxMDc0NDAwMEIzQkVBODdDRkM4MTM0MEQwRjU1ODVCOEZGMUM0NUZGRTkKLToxMDc0NTAwMEEwNzZGQjdGNEMwM0JCQUI4RTc0QTNERUIzN0UwN0UzNDkKLToxMDc0NjAwMDdGOTk4Q0Y2QzAzQzI1QjE2RkJENzEwRUFCOEVFM0E1NDQKLToxMDc0NzAwMEFFNkQxRERFMTNBRjZCQkJGOTM0MTM5QTBFRjQzQkFENEEKLToxMDc0ODAwMERGNTU3MEJCREZFMTMwOUZERjM0RjA0MkMyQ0NFRTVGRUUKLToxMDc0OTAwMEY1QzQ4MzA1RUY1M0I4Q0U2RTdGQzUyQkU0QzdGMjI5NDAKLToxMDc0QTAwMEQzN0ZFNzIzMEIxRUZCQTVENkJGNUM3NTUyRkQxODZCN0YKLToxMDc0QjAwMDVGMUJFQkI0QjY5RkZCMkIwNzU4NUEyRDQ3QkRFMDBGNUYKLToxMDc0QzAwMDU2NkY5MUYxQkM3QkY1OUU2RDNCMUY4NkY4Q0NEQjc2NDkKLToxMDc0RDAwMEZGNzBEQTdGRDU5RTk3REVCODlFRTZBQjlFOTI1M0E2RUMKLToxMDc0RTAwMEIzNjlCOEUxOUVBMjQxOUYzQUZBREZGMjcxQkRGNEE4RjgKLToxMDc0RjAwMDdDRkEyNTQ1MUJDRENBN0Y5Q0RDNEI5N0FBQTcwRTI5OTkKLToxMDc1MDAwMDY0NzQ1RjdDNEM4OTFDNTJEODdFQjY4NTNFOTFGN0E3ODcKLToxMDc1MTAwMDgxNUZCMUVBODkyRjE0RDA1RjFGMUYxNDQ4N0E3NjFDNEYKLToxMDc1MjAwMDdDNkU3OTA5RUQ2M0MwMTNEMjkzRDNBQjg3N0U5NkY2NTgKLToxMDc1MzAwMDc1OTQyRUE4MTcyREY0QjJCNkZCOThBRjA3RDAyRkM0QzAKLToxMDc1NDAwMEUzMjk3RjNGRjk0QkQ4QjdGOTlEREQwRjc4QTg3OEYyOTIKLToxMDc1NTAwMDlGQkMzMDlGRDM1MjNERTNGMzlGQUQ0RTgzRkIyMDE1N0MKLToxMDc1NjAwMDcyMjg0REM1OTQ5NTU3M0NGQTAzRTRCRkM1Qzc3RjkwNzgKLToxMDc1NzAwMEM2Q0VDNUVBMTlGQzVDNTcwNkNDNzNEMTIzNzM3MDlFNDYKLToxMDc1ODAwMEU1MjQ4ODdDNThGMTMzNzZDRkZDODI0NDRBOUY4QTIzRDUKLToxMDc1OTAwMDI3RjczOUQ4M0E3NjdBQUIxRDM3MTE0RkMzNDIwMkZCMzEKLToxMDc1QTAwMDE4QUY4OUUxMUQxODBGNjRFNzBEN0Y2MEVDM0Y5MTY1MEUKLToxMDc1QjAwMDk4QkZFMDYwRjQ1QUU0MzBFRUYxRDFBNTI0OTY3RkI3OEQKLToxMDc1QzAwMDM3QjcwMzlEQ0UwQ0Q1RDMyMThFNUM0N0E0MTBDNzg3NTcKLToxMDc1RDAwMDcwOTFGNjJCMUU5RjlBQ0VDRjFENjg1MjExRkY4RUVBMzYKLToxMDc1RTAwMEZGMjk1MDBFRUREQjY1REQ1OTYwRkE4RTVDQ0NFRTFEOTcKLToxMDc1RjAwMEZGNEUzRTNFODUzQjAxRUNEN0QzNjlENDFFOEMzM0JGOTIKLToxMDc2MDAwMDAzMEU2MzlEQTY3NjU2MEM5RkM1QzgzQjkzRkZFRDZCOUEKLToxMDc2MTAwMDk4QkMxQkYyMUY5RTUxMEFGNTlGOUQ2MDcyMDRERjgxOEEKLToxMDc2MjAwMEZENDJFMThBQTY2M0ZEQTFEOTAyRUEwNzNCODlDNjkzMjAKLToxMDc2MzAwMEYzRUQzMjk3NzM3M0JEOTU1RjI4RkMxMkFDQzczRDdDQTgKLToxMDc2NDAwMDAzRTMyNDIzMUREMEJFMkRERjQ4QkY4RkQ1QUIzMEFFNjIKLToxMDc2NTAwMEI3NkZCRjg2MUMyRkU2RkE2MEFENDUxRjkwNDc1MjA3RjMKLToxMDc2NjAwMEI0N0Y1QjJEODc3NzNFMENGMjRCRTUzNUE0ODFGQ0NBRDUKLToxMDc2NzAwMEY4NUVDMTI3QkI4RkJDRjEzRDJBQjc5RjQ0MENCOTM1REEKLToxMDc2ODAwMEVCNTVBQkRDNTZFQzlENDBFMkM5RUQyNzZFM0Y4OTJCRjQKLToxMDc2OTAwMEI3QjQzQ0FFRENCQTNCOTA5RkZGRDY3QUQ1QzBFM0QzRkIKLToxMDc2QTAwMDE2M0MxQTdBQjIzRjdDNUFGNUU0QjcxRDVBNUMzRDQ5NDQKLToxMDc2QjAwMEZGOUQyMDQ1N0RGOUQxRTA0MzgzRkYyQUZGQTUwNkNGM0EKLToxMDc2QzAwMDBCRjVGMEE5QzE4NzNEN0M2QUYwNjE5Rjc4QTQwOThGMTIKLToxMDc2RDAwMEQ2RkFCQkUxNkYzQTg1QzA3MzMyQzZDRkFCMEZCMEZEQUYKLToxMDc2RTAwMDY3RkFEREQxMjE4NTg4MkYxRDk3MzlEMjdBNzQ0ODRBRUYKLToxMDc2RjAwMDZDM0U2Q0M5NDcyQ0VENzU0QjNFNjA2OTFGQjRFNEVCRTIKLToxMDc3MDAwMDRERURBQkY3MUY1MUQ4Qjk5RUE4QTk5REI4RkNBN0U0RDEKLToxMDc3MTAwMDgzMzhGMTAxNjMxREFBNkJGQjU0MDkwMTdGQjhCQkYxRUIKLToxMDc3MjAwMDdCNzkyNTA5NzkyMDVFRkVCQzg4RjFGMjJFOEFFMzI2NUEKLToxMDc3MzAwMDNBNEVEN0VFNkM3QzhGNjBCNTkzQzU1N0JBRDQ2RTJGOTYKLToxMDc3NDAwMEQ4OTNBQjkzNThCRTNCNTU2OTAyM0Q2ODk0NzczQjU5M0IKLToxMDc3NTAwMERDQUYyQkQwRUQ0RDhBQjFFRkRFM0YyMEEyMUVFRjA4NEIKLToxMDc3NjAwMDkzRDI3ODdFMjhERTQwQTFGOEVEMjBGREQ1QjNGRDgwRDAKLToxMDc3NzAwMDJFQjBENzYxQkM4NEFDMzBGMEUzNTREMTlEQjUxQ0UyOEYKLToxMDc3ODAwMDM1QUQyMkRFNkI1QkI4RTIxNjJGOUMyM0U5M0E5MEZCMDUKLToxMDc3OTAwMDlEMzI1QUJFRThENzIyREJBNjBDRTk1MjQ2OEMxRkY4NzAKLToxMDc3QTAwMDExMDk2RDlBMjRDMEZFRjU3QUU0OUYwNTA3OTg1RkI4MjkKLToxMDc3QjAwMDcwN0Q3Qzc5QThFNERGOTVCQkVGNTQ0MEVGNTI3RkVFRkIKLToxMDc3QzAwMDY0RUNCRTg3RDE0RkM1MjM5NkYyMDNGRkM4RTVBNjE1MkEKLToxMDc3RDAwMEUzMUY5NURCQ0RGNTQxMUUzRjE4RUNFNEU3QkVDNzkyRjEKLToxMDc3RTAwMEIxREM3RkI3QzVERTBGOUUyQUU2N0ZBNzhDRDJBN0VCNjAKLToxMDc3RjAwMDk4NDhFMDNDQzFGOTAzMjJEMkU3RkM2RTc2N0UwMEUzQjQKLToxMDc4MDAwMEZDRDcwMUJGNzcyQkIxRTdBOUNFODI3QzVERDVCRjFFMjcKLToxMDc4MTAwMDNCRkJDQ0VGOEJFRTA2M0VEQUY3NEVDMTRGNjk3QTc2MzIKLToxMDc4MjAwMERGREIyMzdFMDVGOTY3REZDQzdBODdGNDZEM0ZFNUEwQzcKLToxMDc4MzAwMDEzRjc1NUJBMEU3QTkwRkZCQjlFRkY0REQ2REQ5MDdGQjEKLToxMDc4NDAwMENFOEVGMUVDQUU4MzVGMTQwMDNGNzVBREI0NTc4MDFFNTEKLToxMDc4NTAwMEVDRTJFN0VGNTYzREZGNDU0MTA3QUVCRjhENDhDN0E5QjMKLToxMDc4NjAwMDRFRTY0RjlGM0ZGMDVGRUZDMUZEODFGMzA3RThBQ0MwRUMKLToxMDc4NzAwMEJFMzhFODQyRjlBQUZCQTUxM0UzNkY1RENGN0Y1MTE0MzAKLToxMDc4ODAwMEVCMjdGQ0E1RjNBOUU1RkI5RDVEMUU1MkI2MTdFMDRCNjcKLToxMDc4OTAwMDYyRkI0NDc1QkZCQTZFMUJCQzJGNTFEMzc2NDg1OTQwNkEKLToxMDc4QTAwMEVCQTdCQ0YwQTcwMkQwQUY1RDdCOTlEREQ0Mjk3NzNDNzQKLToxMDc4QjAwMDBBRkI3OTgxMzUwRjM0Q0E5NDVFOUQyMDY0ODM2OUZGODkKLToxMDc4QzAwMDZCREUyODAxMzlFQThCOTczRjYxNUM3MUEwRjg1OEZDQTgKLToxMDc4RDAwMDdGMEQzRTA0OURFOTNGNEYxODRDODUyOTA3RkZGOERFRDgKLToxMDc4RTAwMDNCQTAyNzBFREE5MTJGOERGOTdFMTI1OTgxRjZDQ0U1NTcKLToxMDc4RjAwMEU2RERGNEZGRENCQzg1RTg0MEU2QkQwM0U2M0RFMUVGRjQKLToxMDc5MDAwMDc3REVEN0MwQTFBMUQ0QkU3MkQwOTdDRjlGQkYwQkYzQjMKLToxMDc5MTAwMDdCM0M3RTg0Nzc4MEZDRkVEMkRGRjlGQ0FGOThFRTdCNjcKLToxMDc5MjAwMDI5RERCRDk3OUZGNzg3N0ZFN0YzRUU5RkVFQkY5RUNCRTQKLToxMDc5MzAwMEU5QUVDMjc5OThCQTE3RkU4NEYwNURBOTlFOTMxMkZFNTMKLToxMDc5NDAwMEJFRTVCREJGRjkxQkY2RkU1QTlCQkYzNTI3MUJDRjkzODMKLToxMDc5NTAwMDNBQzBCMDcwN0I2NkI2NDA3ODcxRURDODk5MkFEODlENjAKLToxMDc5NjAwMDYyM0ZFRkQ1NEM0ODYwN0U5NTI4QjBGNzIxQzg1MDE2OEQKLToxMDc5NzAwMDBGMjREQ0NGODI2MzBERjgwRTg4OUJERDNCOTNEQzREM0EKLToxMDc5ODAwMDY4NzcxM0M5REZBRTUzQkNBQ0JEN0FCRTFGQ0YxQTkxNjYKLToxMDc5OTAwMDcxNkYwNTIxOUYzOUM5OEZGMTZFOEJCRkQ5MjgxMDVEOUEKLToxMDc5QTAwMEEwRjZBRTc0RjUzNzhGODFERjIzOEZCNDQ1RUQwNTk4Q0YKLToxMDc5QjAwMEJFMEY2OTMzOEY2M0NBQUE2MkYyODdEQ0Y5RTZCQzUzNTMKLToxMDc5QzAwMDMzRTdFREJDM0YwNzYxRjAzQjdDMjQwQ0YxNkM3MUQ0RDQKLToxMDc5RDAwMDYxMTVDRUQzODk2MzI1MDI0RkE1Mzg0OTZCMDhGQzBFOEIKLToxMDc5RTAwMEJCQ0ZGQzdENTIwMkUxN0VFRjVGODZDNzhBMDQxNkE3RkIKLToxMDc5RjAwMDEyODU3MUVEM0FFMDcxOTQwREUzREM3ODQ4MUJGMUUyRjkKLToxMDdBMDAwMEM3RjdCQTA4RjdBRjdCRjFEQUQ0MEVGODk0QzAzRjY2MzcKLToxMDdBMTAwMEY2MTdGQUQ1ODRGQkQzMTJFRjQyMUE2OUQzOURFNjc2QTYKLToxMDdBMjAwMERDOEZCRTJDOUQxODVEQjJBQTM5OUQ5Njk5RTg2MkQwNzQKLToxMDdBMzAwMDIxMEU3RDRDNzQzMUYwN0NBNUY0QjFEMkM1OEFGRkVCRTgKLToxMDdBNDAwMDEzMTg1RkY3NDcyRjgzMkU5OTZFMURFRkQ3QzlEQzdGODAKLToxMDdBNTAwMDI4MDEzRjEzRjI5OTAxODJGQkFCREM3RjkwNTI3NEJDOEEKLToxMDdBNjAwMEE3MjRBQTdFQkM5NzAwN0U1Qzk0MUFFMDJGRUZERTg2RTYKLToxMDdBNzAwMEYxQTQ3MzNGN0ZGRkRCMDA0RkQ1QUY0NEUyQTBGOEVCRUEKLToxMDdBODAwMERDRUQyMTUxRjg1RTBBMkJFMDlGNTZCNjg5Qjg0RjQwRDUKLToxMDdBOTAwMEE0NjhEMUFDOTg3RDYyQzMwRkE4RkE4NTA3RTc1M0I5RjMKLToxMDdBQTAwMEQ3MUU5RTRFQkZBRkRDRjc0MTAxREE2MTJCQkJEMUNGQjEKLToxMDdBQjAwMDA5RkQ1QzYwNzQwRjc1MTRDMDNFNzBBNUM0RkMxMTJCRTkKLToxMDdBQzAwMEJGQUM0OTYwRjE5NkIzQ0ZCOUNBMjBBRTIzRUM2MkU3RjAKLToxMDdBRDAwMDdGMkIyM0I3QzhGNjk4NzM0REExMDQ5OUM1OUI5RTczNUQKLToxMDdBRTAwMEExNUUwODNEMjFFMEY5Mjg4MDJGRjZEQ0E5RTE4NzlDMDIKLToxMDdBRjAwMDdENDI2MEYwRUQ5N0YxOUQ5OENBNUQ0Rjc1NDI3Q0FBN0EKLToxMDdCMDAwMEYyMkRCQjFGQ0NGOEJBNUQ5RkUyN0VDODk0NUZFQ0YxMEEKLToxMDdCMTAwMDc2QTAxRjJFOUFFMjEyN0RFMjAxQkI0NEU0OEZEQUI2MTIKLToxMDdCMjAwMDFBRjQ0MzY4MUVGOUEyMzZDMkZERUYyQkY0NTdBQjdFNjAKLToxMDdCMzAwMEYxRkMzRUI4NzA1NkY1RjRFMzVFODg3RjlENjlERkUxQTUKLToxMDdCNDAwMEM1QjhDMEFFNEJDN0U3RkFGOEZGOTEzNURDRkZGRkQ2RUEKLToxMDdCNTAwMDY5NzY0RjNCQkVGRjdGMDZGRUEwNzZGMUQzMDk5NkZCMDgKLToxMDdCNjAwMEFCQkIwNkIxRjcxNDQ5QjRFODUyRUY3MTU1RURCOUYwNkIKLToxMDdCNzAwMDI4QzRBRkNGRUVGREU0NTE4MEJCRkFDRjdGNzgxNEZDNzAKLToxMDdCODAwMDBBNzJEMEE5QzI3RDgyQkE5RkJGOEVGMTNFRTNCQkRGRUQKLToxMDdCOTAwMDcwM0REMEY5QzRFMzE4MkZFRDdDOUJGQTFGRjQ1RkU3MkEKLToxMDdCQTAwMEYzQTdCM0MwQ0ZFQzdDRUE4RjY5MTA0RkI5RjNGOUE5MDIKLToxMDdCQjAwMEY4NkVDRTlEQ0Y0QzQ5Mjc3MUY0ODk5MTAyRkY4NjA3NUMKLToxMDdCQzAwMDEwQUZCNUQyRUQ0OERCMTFGNDdGQ0U1MUJBODNGRkQ5QTcKLToxMDdCRDAwMDEzRDc4OUQ0QjA3ODk5QzZFMzM5QkJFM0M3QzdGQkM0RDAKLToxMDdCRTAwMDZGREE2NjdERTdDNjQyNDg2NUJGNDYwNjEwQzczOTQxNzEKLToxMDdCRjAwMEU5Mzk2NjAwNzREQ0NERTM3NTkxNkY1RDMyOEU3MzBFRUEKLToxMDdDMDAwMEZFQTBGNDNBNkJBMUUzODVCNjQ1OEYzRDBDNzU2RDgzRkMKLToxMDdDMTAwMEZBOERFMzQ0MDc4MDNGMjNGRUJFM0Y0MUZGMjIwMUU0OEIKLToxMDdDMjAwMDY4RUZCRjYwRkMwQ0U4Mzc5RDRFQjg3M0NGODUyQ0Q4NDkKLToxMDdDMzAwMEJGRjg0OEVFOUU4QkVGODUzQzZGNTcyMTFFNTFGOUZDMzMKLToxMDdDNDAwMDlCMjg0RjlEQ0YxQ0M3RjgzNkUxNzFGMDRFRDJGMzhGQzEKLToxMDdDNTAwMEM1MkJGOTk5Q0NCQUVEMUUxNkZGRTE3NDgwRjg5MEU2QjkKLToxMDdDNjAwMEM1NzIxRTA3NjI3QzZEQzQ4N0ZBOEIwQjhENzFCMTczNzAKLToxMDdDNzAwMDI3QzZCRTQwQ0RGNjc3NzhCQ0E1OTc2RUMyNDRBMEQ3ODQKLToxMDdDODAwMEZCOTdEQ0NGMzBGMEEwMDIxRUFFOEQ4RDdCQzY4RkMzN0MKLToxMDdDOTAwMEY1QzQzRDJENzQwMzdBNDJCQ0IzMjdBRTQ5RDgxMzdCOUIKLToxMDdDQTAwMDc1NjFFMUNENzg3MUY0Q0UyRDJDNUVEQTI5QzczRjhGNTYKLToxMDdDQjAwMDY1QzQ0MUFGNzY1OUUyOUZFMTgxQzUzRjJGMzc4RjJCRDUKLToxMDdDQzAwMEM1RDM2MDk3ODZGRDVBRjE3NUY2QUJGOEZBRkQ1QkFFNDkKLToxMDdDRDAwMDgxOUQ1RkU4Nzc3RkFEREE3QzFGRTYzRDI1MzhERDA1QzUKLToxMDdDRTAwMEZCNkI2REVGMkIwNENGQTc3NEIzNzMyQjdDQkU2N0Y5Q0UKLToxMDdDRjAwMEY5RDNCMzNGMTczMTJFRDYxNDM5ODJGQUREQUEzRjhDNUYKLToxMDdEMDAwMEZENTcyQkJDNzc3MDc4NkJGN0IzRjVFM0VDNUU0RkQ4N0IKLToxMDdEMTAwMDRERkIzOTdCRjgzOUU0RUJEQURERUY2MzVDRUVFOEFFN0UKLToxMDdEMjAwMEE3OTU4RTk4RjUxNkQ2OEY3MENDN0NDRTNFNzlBODgwMUMKLToxMDdEMzAwMEM1NzlFM0RGMUJBQjcxMzE3QkIzRUU0MEZDNzFFQTc2QjIKLToxMDdENDAwMDdGNkExQUE3MkExNDUxOTgxRDcwRTlGMUNFNDhGQTJEQkUKLToxMDdENTAwMEQwREY5OTc2MTlERjREM0ExMzExRTNCRTE3MUM3MEM5QjUKLToxMDdENjAwMDdDMUZBMTk1QzkwRjVENDdGMTlFQzA3MTc2N0ZBN0YwN0EKLToxMDdENzAwMEI1MDQzQzU3N0ZFN0YxRDI3N0UwRkRCNzNCQTk1ODgzQzQKLToxMDdEODAwMEREREZCNjgyRjE2OURCNEZGNDIxNDBFRkI2RTNERjEzQUMKLToxMDdEOTAwMDYxRkREQTA3Rjg4REIxRkY4QjRFRDQ0RkYxNTBGRDUwRTUKLToxMDdEQTAwMEY0NkVBMDEwRDhENUFBNzdBRTdEQ0I2NjgyOUY4RTkzNTUKLToxMDdEQjAwMDBFRUI0MjIzRUQwN0VFODNDMEI5MzlCQzU3RUU5RDU2NUEKLToxMDdEQzAwMDBBRjA4OEFBNEQ3NTBBN0RFNzIxQkJGOTdENTVERUFGMjMKLToxMDdERDAwMEFDOUFFRjIxOTBBRkM2NkJEMDhGNkYyNjhCNEI2NkNDRTEKLToxMDdERTAwMDMyNTIxNjlGMEMxOUY3ODdDQTEzQzJBQkU4N0M3RkFGREIKLToxMDdERjAwMDA2MzdCQjI4NUU3QzlFOEREOTJGMTE3ODI3NkFBMjA2OTQKLToxMDdFMDAwMEY2RDM2MzJFN0VERUMxNEJCQ0VDQkM4MzNCNjRBMzdBMEQKLToxMDdFMTAwMEZENjFGRkY2MEQ5MzA4OUU2N0Q4MDY3Q0Q5NzM5RTgxOUQKLToxMDdFMjAwMDQ0MEI4MDJGOEQ3NjdERUEyREU3MUQzMkUxMTMyQTVBMEYKLToxMDdFMzAwMDIyODczMzE3RUUyNTUwRkRCMjZBODY3NzJCRTQxRkYxQjcKLToxMDdFNDAwMEIwRjdDREIyNDhGNzIxMzhERkIwOEREQkEzRDk2MDE1OEMKLToxMDdFNTAwMEU3RjY3REU3RUNFQkJFNkY5NjMyQTU3OEU5MzAzRjg1MUIKLToxMDdFNjAwMEQzRjU1RjUzRTE1QzdDQ0EyREM1NEYwRDUxNjk4NTJENUIKLToxMDdFNzAwMDYzMUFEQ0EzNDk3OUJDNzg2QzA2Q0RDRjVGRkZGNDM0N0MKLToxMDdFODAwMEFDRkZGN0UyQjE1OTM0RkY5MzdCMEVCMkZBMkEwMUNGNkYKLToxMDdFOTAwMEMxQkVCMEFFNzYxQUYwRUZENzk2RkJEOTE0MzM2NkI5RUYKLToxMDdFQTAwMDdGMDVGMDc3MkVGMEVFNzcxNzY5NzBBRUEyNUJFMUVGRjkKLToxMDdFQjAwMDY1MDRBMERERDA4OTBDN0Y5OUVFNzc5RjAyN0Y2NTk4REQKLToxMDdFQzAwMEFENjMwNUYwRUI2M0NGN0Y5MTg0RjcxNkY5RkJBMTJBMzAKLToxMDdFRDAwMDY5NTRFMURDMTUyRDlBNzhGMTEyRTdGM0ZBQkNGQkNDN0EKLToxMDdFRTAwMEY1Q0I4RDQ5QzE3NzgxM0Y5QUU3OERCQzZGMUExREVGQTUKLToxMDdFRjAwMEUxOEE3MTBFNzYwRUQwRjI0RUEzOUE4Mjc0NURDOEU5QzMKLToxMDdGMDAwMDRBRjgzRENCNDU3QzNFOEJDNTkwQzIwMkRGQUQ1QzdGMUQKLToxMDdGMTAwMDE5RUY1MTU3OEI1N0Y0MUUzNTg3QUJEQkQ1RUZGQjY3NTUKLToxMDdGMjAwMDdGMDA3ODMzOTM4MjdGMDBGQzU5REYzRjdCQzUxNUI4MTMKLToxMDdGMzAwMDAwRjUxOUU1NUZFMjdENUNFMzNEMzNFQkJCNjg0NEVBQTUKLToxMDdGNDAwMDhFRkIzRUZCNTZGRTJFNUE3RkYwRkU5QjNCMjhCQTY5MDUKLToxMDdGNTAwMEZGMzkyRjY4N0I4RjUxMzkxQkIzNTBGMUMzRDFDRjMxMUIKLToxMDdGNjAwMENCMEJGREQyMjBDMjI2MDQ3NjEwQTcxRjNDQ0Y4OEY3OEEKLToxMDdGNzAwMDFGRUUyMkI4NUZEQjY1MTc3NEYwQUZCQkZFNDk0NTdEOEQKLToxMDdGODAwMDlFQjk3MDNBRkE1RjVEQUVFQzA4OUMzM0VBQkE1QkMzMDcKLToxMDdGOTAwMDdEM0Q4QTAxMDFFNDY5RTg4MUM0MjhGODg3NTQxRTNFQ0EKLToxMDdGQTAwMEI3QzhDM0U3NjZGRTM3OEZEQjc1NTFEQkRGODFGREE5RkMKLToxMDdGQjAwMEJDM0Y2QUEwQzVEQzhCRUQxMjk5OUVFRTZBRDAxMDhFOTQKLToxMDdGQzAwMEExMjQ3NDA4RDZGRDgxOEU5N0UzRTZFQjM3QTdDRjQ2NTAKLToxMDdGRDAwMDlCOUVFQjlFODBGODFGRUU4RUMxRkYyODc3QkY3NENDNkUKLToxMDdGRTAwMDc3MzMzQUU2QkJFM0QwRDFGQTZFREQ3QkFFRTA1ODY4N0EKLToxMDdGRjAwMDc3QkFGQzI4QkU1RjY3N0RBRkNFNEFERjNBQTlGNTIxOEMKLToxMDgwMDAwMDc4M0IyQkVEQzBBN0I4RkUxOEY0MUJCMzdDMkNEMjI5MEIKLToxMDgwMTAwMDg2OUU5MzAwOEUzMTA3M0VCNTAxQkMwNjFEMUZFQ0U3MUUKLToxMDgwMjAwMDNDNzlBOTlCQUQ3M0Q2RjFEMkNBM0EwNjA3RTNCNDlGNTcKLToxMDgwMzAwMEU1RDY0Q0Y3MEUwQTFDNDU3RTg5Q0E2OUJBOERDNTg3RkMKLToxMDgwNDAwMEZBQjZFRkI3RkY5QzRCOURGMzJDNTA1OUJGMTRGRjczNEEKLToxMDgwNTAwMDAwNEYwNkZFNkY3NUYzRkJFQTdERjE3RjNCQjRBM0Y4OUEKLToxMDgwNjAwMEJGMURFNjNGMDBGQ0NGQkIxNEZFMERGQkJGOEFFQjg3QjQKLToxMDgwNzAwMDJBRDg5RkEyN0NGNDFGREFDQ0I0MUMzQUVFMzREMThERkUKLToxMDgwODAwMDcyQjA2NDg3QzhGNzMxRDlGQjVGODYzRTU5NzI1REZERDcKLToxMDgwOTAwMDIxQjgxN0I5RTQ2NzAyRjJFQjQyRkVGRUU1MjdGQ0ZEQ0EKLToxMDgwQTAwMDRCRUJCOUMxRjJCMjEwRUFDQkNCOUYxRjBDQTMzRUFBOTcKLToxMDgwQjAwMERBNjUyRUZGNjc3N0NGQkI5NzU5NzhERTE3MjQzNUFEODkKLToxMDgwQzAwMEY3QkQ0RTJCRkVDRkJCQjlERTU4RThCNEM1N0IyRkQ3MkEKLToxMDgwRDAwMDQ4ODdENkRCNENFN0NDMzNBNkY0RjQ4M0ZFQTBDRkE2Q0EKLToxMDgwRTAwMEJEODlGMUI4N0Y5NTA5QzQxMzc0MjlBNTEwREUxOTIwNDQKLToxMDgwRjAwMDg1NDIwOUY0NUJDQ0U1RDdFODZGRDg3MkYzRkE5RjFEOEYKLToxMDgxMDAwMDMyREY0M0NDNkQzMURGNDMxQ0RFNkFCRTg3NzhENTY2MzMKLToxMDgxMTAwMEYzM0RDNDUxNjFGMzNEQzQ2Qjc2OEQzM0U1NDc0N0FFMDMKLToxMDgxMjAwMDM3QjUxRkIzN0ZCMjI5M0YzNkZBNEQ1M0ZCRjFDNzY2MEYKLToxMDgxMzAwMDlBRjIxM0RBQkY2NzZBN0ZFRDVCRjM0REY1RDc3NTU0OUEKLToxMDgxNDAwMDlBRUE2RkY4Njg5OTI5N0Y2M0Y3M0Y5QkRBNDcxNzMxRkUKLToxMDgxNTAwMEZENzhCODYxNzkxMURDNUIzMEYwNzI3OEE5NjI1M0ExQzcKLToxMDgxNjAwMDdDRTkwODlCNUExMDVCOUVBNjZCMDU5MDE2RTlFMDdGQTAKLToxMDgxNzAwMEY1MjcyRjUzMUMzRjJBOEE1REE3OEI4OTZDRDI2RjUzM0EKLToxMDgxODAwMDFDRTY3Q0Q0NkRGRTdEOEY5NzJDNzIzNUE0N0U1MkNCN0QKLToxMDgxOTAwMDA4OUExREJDMjQwRkNGNjM1M0Y5M0FDNkY1REJCMTAxMzEKLToxMDgxQTAwMEVBQjdERkEwN0NENTQ2OUIyMDZGOTUyRkUzQkQwMTlBRUYKLToxMDgxQjAwMDg2RDg4RkFEQjA3NzlGMUY3MjlBRjlENEQ3OEY1RUY5QUEKLToxMDgxQzAwMDlEREIzODA3RDRDQUZBNTNDQkM2NEIyNjM5MzFDQTNGOTgKLToxMDgxRDAwMDJBOEMyRDE3MTY0RkM3NzM0MEZERjVBQkY4MTY1Q0IzMEMKLToxMDgxRTAwMDdEMTBCQzNCM0MwRjUzQTNCQ0E5Q0MxNkY3RENERjY3NkEKLToxMDgxRjAwMEVFQkZEMDdGREFEQ0M3OEVGQTBDRjA3Q0NFRjdEQTI2NDEKLToxMDgyMDAwMDM4QkY1NjdCN0IzN0ZBNTExOTc2MzM1RTdBRjNFQzVERDMKLToxMDgyMTAwMDYzMDM5RTQ3MUE0ODNFQUNGN0M2RkRCNjQ1MzRFMUVCMTIKLToxMDgyMjAwMDM2Q0U3N0QxREIzM0QzRTA5QzQxNjYzRkZFNTVBMTg3NDQKLToxMDgyMzAwMEU5RUI0NzFCNDJENzJDMDRDMjExODdFOTVFNzk1NkI0OUIKLToxMDgyNDAwMDZFMUFGODM5QzNGODc5RUI0REI2RjhFN0EwOTIzQzBDRkEKLToxMDgyNTAwMDJGRTlBMDQ4QzE1RTUwREQ2ODJGOUMyQjdGRDcwQjRGQzQKLToxMDgyNjAwMEM3REM2ODBGMjY3OUU4MzhGM0M3QjQxN0IxRkJENEJBNzYKLToxMDgyNzAwMDdGRTZFODVFQjgwRDdEOTRFNTBFNkMwMkZEOTJFNTkzMTUKLToxMDgyODAwMDg4OTZERDE3OUVGNERCODMyREYwOEU3ODYzQjJDREVGRjgKLToxMDgyOTAwMEM2N0NCNzAwRTNEOTdGNENDODIwM0E1RUUzOUY0NTg0OTMKLToxMDgyQTAwMEFGRjFGMDc1NzgzRUM4RUVBRUM3QjhBQjMxNEZDMkNGNzQKLToxMDgyQjAwMDA5MTg3MUU2MEJCRUQ5ODk4MENGQzZBQjdCRUUwN0UxMEEKLToxMDgyQzAwMDdCOTAxN0RDQzE3NkU4RjdDMjQ2MTlDNzZEOUMyQzk4RTUKLToxMDgyRDAwMEVBOEQ3OTRCOUJCRjhERjdCRUIyREM2Q0RFRTU3NERFQjgKLToxMDgyRTAwMDAwQjczRDkzQzFENUY4QTg0MDMyMTFBRUZGQkRGNDI4QzgKLToxMDgyRjAwMEY4MzVGQjVDRjhERTA3QzVDNzEwQzBDNzM5M0RGQjczMTYKLToxMDgzMDAwMDlCMzE3OTNBQUY5QTQxRUVBRDZCRDE5RTg5RUZBNzRFODIKLToxMDgzMTAwMDM3RTZBMThGMzREMTNCRTMyQTMzRkNFMjQ2MTlGREM2OTAKLToxMDgzMjAwMDQ1NDk2RTNDRUYxMDZFODg3MkZBOUFFN0RGRTQ5QkY5REMKLToxMDgzMzAwMDlENUIyOTVDQUI0RTg4RjhERUI2RDZEMUJBRjQyOEZEMzkKLToxMDgzNDAwMEFFQkNDREU1MEY2QjdERjE3RjRFNjNGMDUyRjhBNzdCOUQKLToxMDgzNTAwMDQwREUzNjRGQzNGOUUzNzk2QTgwRkYzMTgxM0M5QzBERTIKLToxMDgzNjAwMEZDMTcyQzQ1M0UxODZDMjNCMDZGRDNDNzRFRjAzMDc5MDQKLToxMDgzNzAwMDlFRUQ1MUQ5N0IzNUJFNzIyNjg3QkU4NUQ3NkNBN0ZEOTEKLToxMDgzODAwMDk1NzlGQTVERjc2RkYzQjA3NUZGMzY0RjlDNzVGRjcyMDQKLToxMDgzOTAwMEVGMDc1Nzk3QjUxRjg1NTRENDQ1QjQzNzA4QTkxRjExNjcKLToxMDgzQTAwMDZCNDc1MzNENTYwRUZEMUI3OTMxRjFDNzA1RDA2RkZGNkEKLToxMDgzQjAwMDc2OUFCRjY1NDRGNkU1RUQzNEIwQ0Y4MDBGMERGQkVDNDcKLToxMDgzQzAwMDRFOEZEOUFFOENEMUJCM0ZGNDMwQkRGQjQzQ0ZDMEY0NTAKLToxMDgzRDAwMEVFOEZBMUZERTlFRjQ1RTNEQTM1QTk0QTdDQkRGN0I0OUMKLToxMDgzRTAwMDg3REQxRkFDNTMxNTgyRTcwM0ZCRDkwRkQ4QzlFNURBNDcKLToxMDgzRjAwMDNBRUZGRUQ2QTVDQkY5MUYzOTJFODM0RkNERkFGRUZDRkUKLToxMDg0MDAwMDMxMkQxMUY0NTRDQTA3NDJEQzc3Qjc4NjJDQkY2RDNDN0UKLToxMDg0MTAwMEQwNkI5QkFENzgzM0NDRjc2NzE2RkU3ODY4NEQ5RkY1MkYKLToxMDg0MjAwMDJCQ0NGMTE4OEU4QkM3NkE4QTQ3OUIwOThGM0IzQzk3RjAKLToxMDg0MzAwMEIwMEZCRkI2QkVBRjMwREZGM0U5RTRGOEE2N0FCRjA5RUMKLToxMDg0NDAwMEM2M0IzN0VCQkQyMjg4NkJENENFRjkxQ0Y1RkVENzFFOTgKLToxMDg0NTAwMEE3Q0NCQ0FFMTg3RTM5MUQ2NzA1RTBBMTczRDY5Rjc5MDUKLToxMDg0NjAwMDdDQUUwM0UzNEFBQjlFQjkyQTExRTI1ODM1OTMwRDdBRUMKLToxMDg0NzAwMDQ0RjA3REFBRjNGOTM5NDg5NzczRkJFQzNBQzA3OTJFQTIKLToxMDg0ODAwMDk5OUQxMzNEQjdFRkRBQTMxMEY3RjhBNEUxNTg3MjJDQzkKLToxMDg0OTAwMDdEQ0YzRDc5QkM0OEE2RkQ5RERCN0JCQzQ4QzIwMzc3MDAKLToxMDg0QTAwMDYxRDMzQkQ0MzUxNzdGNUIxNDcwRjdERTRCRThFMTM3QkYKLToxMDg0QjAwMDA3NUI4RjM2M0E1OTdDRTU0MTM4MTczNzg2REFCRjZBNTEKLToxMDg0QzAwMDEyRjI2NTdBOUFFRDVFMjgxNzFEQkYxREZDMjE1QzM5RkEKLToxMDg0RDAwMDNGRTYyRkE2NTlCMjRBRDAzMzE2QzE3RUQzM0MzN0VFQzEKLToxMDg0RTAwMDY3Rjk3MkM5Qzg2Q0ZBOUQxMkFEODdFM0NDQzRGOTZBMEEKLToxMDg0RjAwMDk4QzBFRjA0Qjg0RTQ0RjFGNzAyM0NFRjc2NjBGODNFQzYKLToxMDg1MDAwMEYxNDNCMjAyOUVDMkZGQkQxQTNDMDk3ODRGM0FBQjA5NTMKLToxMDg1MTAwMDg5MUFDNDc3OEE2RTFFNDc1MzY5MEFEM0JGRERCNzNBRkEKLToxMDg1MjAwMEYwRjc4Qzg0MDVBRkFBNTNBOEZFREEzQzkzRkQ4RURERUMKLToxMDg1MzAwMEY5NjMwQjkyQzAxRjY5NTU5OURFRjIwREVCRTE2M0I0NEMKLToxMDg1NDAwMDhCMDdFNzZCMzcxNzIzRTY3NTdDNTc0MDU1MTkxRDkyNEIKLToxMDg1NTAwMDMzNkM2QjhBMzU4Q0M3RjlGMzk4RkUyNTUyMUFGRjNEQjAKLToxMDg1NjAwMDI5Q0FCNzFFQ0RBNjQzMUNEOEY4Q0VDNUJGMkI1MkZDRDYKLToxMDg1NzAwMEJGQ0UwMzc4NDZEQkZDRjA0RThGRkJBQjZGMzhDQTkyNjAKLToxMDg1ODAwMDY5RkJDQzI4QkU1RjVFOTRDMEUxOURDM0RFMDdFRkZCQjQKLToxMDg1OTAwMDRFRTM0NUQzN0QxOEI1RDRGQzRFQjcyN0QwQjQxNEUyRDIKLToxMDg1QTAwMEZDRDBFRjZEQzlGOENFOEJCOTlFQTIzODkxOTZCQjBCNkIKLToxMDg1QjAwMENERTVBRTBBOUE4RkUxNDdFQjc3RDZGNjg2NUY5MkFFQUQKLToxMDg1QzAwMDMyMzhGNjM3MzgxMDBGQkY2QzUwRkQ3OTk0OEYwRTM0NjcKLToxMDg1RDAwMEY4MzA3RkIwNDFDMzM0REEzMDEyQ0IwRjM3RjgzMTJGODcKLToxMDg1RTAwMERBRjQ2Qzk4NEZGQUFGN0Y5MDE0QkJFRUMyRUY1NDlENTMKLToxMDg1RjAwMDhDRTFDMzc1NzJFNEFERjk4MDhGREY4ODg4QUYxNUFGNjkKLToxMDg2MDAwMDhFNDdGRURFMzQ5QThFM0E4NkJENjc3MzMyQzZGRUZFMTIKLToxMDg2MTAwMEU5RjI1N0QyNEEyODVGMERGOUQxQUZEMzRBQzZDM0VGNkEKLToxMDg2MjAwMDk2QjBGMzE3NzA0MTNBRjYxRUVFN0EyNUEwRjk5M0UwNjIKLToxMDg2MzAwMDc3MzRDNjM0M0I4NkMyRkJBNEMxNUJDOTU4OTQyM0ZEODIKLToxMDg2NDAwMEM1ODlGMEJCMEI3QjMzNkNCNDdFOUE5NEQ3RUNGODA3RUEKLToxMDg2NTAwMDgwQUJERTY0RTdBRkU3RTczMzFGOUY2Q0Q2QUZFM0JDQzgKLToxMDg2NjAwMDRDRkY2NjBBQzVFM0JDNzFGODA5N0U1MzAwRkRBQzM5QzYKLToxMDg2NzAwMEM2QjkwNzMzMUU4OTU0QkZFMTc2OEFFQkU2RUZCM0RGNTQKLToxMDg2ODAwMDVGNDg1NEM3RkJFMUJERjdDRDVFQzNDRUE5RjdDNUJFQjkKLToxMDg2OTAwMEU3QkU5OUZGMEU0NEUyRTEyNTY4MTcyOTNFRjYzQjEwM0MKLToxMDg2QTAwMDI5MEE3QjBGODkwNDkzNERFRkVEQ0RFNUZEQ0MwNjA2M0QKLToxMDg2QjAwMDlBRDA1NzFGQ0ZFNkZEMTUxRDc5MEVGQjgzREY5Nzg4RjMKLToxMDg2QzAwMEY1RUY4N0YwREZDM0Q4Q0NGNUQzNzQzNTUwRUM0REVEMjIKLToxMDg2RDAwMDZENjdENDVCQkZFQjU5Nzc2RDIxRDEwQkY2NDMwMTg5RjAKLToxMDg2RTAwMDgwQkQwNEVEOEE2OUJCRDQwRjAzMDJEQ0VGMzNDRUQ3MjMKLToxMDg2RjAwMDNFMEJGOENERUZGREREOTM3RDAyQzNFQjkzM0M3RDhBMEQKLToxMDg3MDAwMEZGNEU0OUQ0MTM5ODA3RTNGQjE2M0MxMkRBMDM3NkNBRUUKLToxMDg3MTAwMDNFQkIwNjYyNTI3NEU0OEZGODdFOTRGODNCQzUwMUU3RDUKLToxMDg3MjAwMEZDNTMwRkJDQ0ZFRUU1RDkzQTE0MzhCRkI4RDI1QjdDMEUKLToxMDg3MzAwMDEzQzQ1MTQ1QTUzRTAzRjNGNzRFNkY4MUZDODM5RUZBQTcKLToxMDg3NDAwMDg3RDhBM0REQzUzNzAxMUZBNEYzRjcwNjA4MDQwMDAxOEQKLToxMDg3NTAwMDBFMDhBQUUxOEY2M0ZENDNCMzRFNjU2NDlGQ0NGMjJCRjQKLToxMDg3NjAwMEJEMzczNjg3MzIyMTVGM0YwRkY4MDhGMjhEQjRCRjdERTkKLToxMDg3NzAwMDQ5QzEyMUMwNDc2RUUxODZFNjYzMzc0MkRFNjg3RjAzNjgKLToxMDg3ODAwMEI2RkY4OTU3NjVGRThGM0I5ODBERjY0QTRGNUVBNTc5NzcKLToxMDg3OTAwMDRGNEM1RTYyNzlFMjYwQTkzMUJGOUEyMzdGQzQ3M0QwRTcKLToxMDg3QTAwMEI1MDdEODNCNURBOTA3NjYwODMwQ0ZENEZEMzMxMEZGNkQKLToxMDg3QjAwMEU3RDVCN0JDMkIzNDhDODc4RjYwRUIwNDhCOTcxQkY0MDkKLToxMDg3QzAwMDMwRUVFMUE2RDk4M0Y3Nzk2M0Y4NjE5REQ3NkNDN0M0MTEKLToxMDg3RDAwMERDMjdCQzBGRjBEREQzMUY4RkFGQ0IzNkY2OUU0QUY3RjgKLToxMDg3RTAwMDhGRDhFRkM2MEQwMzdCNTQ4NEI4Qjk4NjY5MkVEQ0EzRkQKLToxMDg3RjAwMEE3RkVDMTcwMTI1QzM5OThENjVGRTNDRDQxM0E1RUI1RjEKLToxMDg4MDAwMDNCRkJDREE5NUEyRjVGQTc2NDI5Nzc4MDNFNEVCNUY4NzAKLToxMDg4MTAwMDM1RDk1QzNGOEY1MDhCN0Y5MzQ4MkIzNzBBQzFCNUYwMTkKLToxMDg4MjAwMDlFNkM2ODhGQUNFMjdEOTM1RDE5Mjg0NzY3Qjk4RTIyRjQKLToxMDg4MzAwMEY1ODMzMTVGQ0RFRkJGQ0IyQjgzNkI0NzgxMUU1OUM0Q0UKLToxMDg4NDAwMEY0NkU1NTc2QTA1OEE2REY1NzNEOTc4REJGMEI2N0YwQTUKLToxMDg4NTAwMDVENTU1MjI0NkQ5Q0JCRjc1Q0I3OTEzNzdFNDdFNDIxOTAKLToxMDg4NjAwMEI1RDUwOUVGRjIxOEZCNUFCNUZCMzc2NEMxM0VGREM3MTkKLToxMDg4NzAwMDg3REU0NjNCNzE0OTYyMzZDMjU5RDM3NjVDODFERjY5MzcKLToxMDg4ODAwMEE5NkRBMzdDNDdCRkZCRDhEOTYzQzdBMzVGRjI4N0M4OTQKLToxMDg4OTAwMEEwNkYwMkJFRkVEMDY4QzNDQkRERkREOTU1MkY1MkZEQkYKLToxMDg4QTAwMEE2RDM4NUVBNjg4MzAzRDM5RDdBRkRENUUwMEE5Q0YwQzAKLToxMDg4QjAwMDJFQjhDOTQ5RjlFOUYxMUM1RDA1RkVFQUJDQjcxRUY1MDEKLToxMDg4QzAwMEQ4RTM4QTNBMEFGOEFGRDNGQkMzNjZFMEU3QUEyNDkxNUIKLToxMDg4RDAwMEYzRUIwRjVGRDZGM0Y4N0UzRENERUZCOUI3RURBNkJGNTIKLToxMDg4RTAwMDY4REY2MEExRDlGRUE5N0JDNDhERkM0MUVEOTJERjAyNTcKLToxMDg4RjAwMDFGRDU2RUI2ODU2MEZEQjMzOURBRjFCRTczMjdFODFCNkMKLToxMDg5MDAwMEQ0NUZFNkZCOTkxQjA1QTYwRjQzNzM1ODFDRkE3MkY3NTgKLToxMDg5MTAwMDM0MkJCRTc0OTE3MDhDRkRCRDI0OTFFOUFCMEEyOTg0N0YKLToxMDg5MjAwMEZCNzYxNTVGN0FCMUZFMkYxRkM3NjlCQTBGREE3NzFDODUKLToxMDg5MzAwMDM3RDYxQkUzNTRGNzhFODM3QzUyRkRGNjYxRjRDRjVGOEMKLToxMDg5NDAwMEJDREFCMEFGNzVENEZGNzczRUM1Q0Y2MTM4RjU3NEU4QjcKLToxMDg5NTAwMEU3NDFEOUQwMjdENENGQTQ3ODg2RTcxRTc5M0UyNEY5MDEKLToxMDg5NjAwMDA4NzlBOTQ3RkZBQzZEMkVDOTA0RkFGNkQ2MTNCMzdFNzkKLToxMDg5NzAwMEQyMjU0QUI3OTcxMjc4M0U3NDdGNzNDOUE0MzhFRDEzOTUKLToxMDg5ODAwMDJDRUQ3MzhDRkM0RkIxN0YyQjNDMEYzQTdCRjMwRURBNEUKLToxMDg5OTAwMDVFRkE5M0JEMjcwRkYwNkRCMDU5RkE0QjM2QzZERjg2RUQKLToxMDg5QTAwMEZEMTlGQ0I3QzdCQkZCNjU3OEVGRTlBNUE0NDBGMTEwNDIKLToxMDg5QjAwMDY2REY2ODIwODc1QjI0MTU3Rjg3RDFDMEYzMUVCRTNFMkIKLToxMDg5QzAwMDU1N0M3OThEMDlGRkJENzgyRjMwOTU5RjZFRDA0Q0ZCN0IKLToxMDg5RDAwMEExOEIxNzJFQzM3QjNGN0JGODNBNTY0MTQyRUMzRURCMUUKLToxMDg5RTAwMDIzQjlBNjdERDBGRjBGQzdENzg1QTNCODFGMzg0QUZFOEQKLToxMDg5RjAwMEM2NzA4QzMyRTk4MTVFMzhGMjRERTU1RjE3MEUzMTY5NDEKLToxMDhBMDAwMDc2NjkzNkVDNTNBREIxQTE5RjkwNjYwQjM5NzJDMDZFOUEKLToxMDhBMTAwMEZCNUZFQ0Y3MUEyMDM0MDdFNzk5QTg2MTZDREE1N0NFQjAKLToxMDhBMjAwMDM5NjA5RjA3QzY3OThFNDQ4RTQ5RTM0MDlFNzQ2RDA1NzgKLToxMDhBMzAwMEFDNTMzRjkxRDBBRkExRTUwRTM5MTk4NjZFRDVFMUZENUIKLToxMDhBNDAwMDJCMkE5NUQ4NUY0RTc1QjA4NjE5RjVFNjc3NjI4N0FCMEQKLToxMDhBNTAwMEE0NThBMkU1RTNENTc5QjhFRUU1OTRERDU1MDdGNkZEMTcKLToxMDhBNjAwMDM2NzdFMUNGNTcxMzkzQkNBMjdEQjI1QTU4OEFGNkM3MjYKLToxMDhBNzAwMDlBQzQxNzlCNjFERjM4M0Q4MUQ5MzMwMjc5QjFGOTU4MjcKLToxMDhBODAwMDQ2QkM3QTI2QUYyREY3QkQ3ODEzQzQzMUI2QUVENEFFNEUKLToxMDhBOTAwMDA2N0Y2RUFCMzMxQzM5MENFQkY5M0Q2RUZDM0RBQURDNTYKLToxMDhBQTAwMDc1RTExNkY4QkQwQTcxODMwREQ3NEIzMTI5QkM2QjJCQ0MKLToxMDhBQjAwMDlDMTc3ODYwODQxRkVDOEJBRDYwRDc0MEZCMzU2RTVDRjMKLToxMDhBQzAwMEZGNUIxQTQyNjgyRkFGRTJFQkMwRjZGNTkzNTQzOEU3MkMKLToxMDhBRDAwMERDRTg5NjkyNjFCRDZCOTFFQjZGMDVCODVFQkFFRjY0MEUKLToxMDhBRTAwMEIzRTMzQUQwNjNGRTk2NDEzQ0VGQ0I4MDc1NERDQjcxM0EKLToxMDhBRjAwMDhDRTVGNTE0MTk1QjU3Njg4M0MxODUzNEYyQzNGRjQ0RDQKLToxMDhCMDAwMEFEMTJENDMzMjdEMTBFNkI3NDJGQUIwNDNCOEVENkJGN0UKLToxMDhCMTAwMEVDQTA3ODdBM0M5OUUzODVEN0U3RjRFOEE1OTNDREEwNUIKLToxMDhCMjAwMDA3QzUxNUJERjkxMjNBRUYxRDNGNjM3QUVBMDlEQTNGMkUKLToxMDhCMzAwMEJDMkI0NUU3MTM4Mjc3MThCQjQ3NDlFODg3MjUyNEMxM0EKLToxMDhCNDAwMDZGQzdEMDc0NzQwRUZCOUQ1QkFBMTdCREU4Qzc0OTM4ODgKLToxMDhCNTAwMDVGNjMxRjQ5MTlDNTdFMEYxRERBQzM3QTkzOTA5MTgzMTUKLToxMDhCNjAwMEZCOThDQTBDRjY1RTgzRTI3MUUzRkQ2NkUzNzc1NkREOUYKLToxMDhCNzAwMEM0RjhBN0IzNzgyOURGNjc3MTU5REU0MzcwQUU1Rjg5MDcKLToxMDhCODAwMDlCRTk0RTc4MzcyMTg2NEYxNUNCN0IwQjEyMDlDQzA3MUEKLToxMDhCOTAwMDdCNEI1NENERTVCRjQ5RTRGQjRBODNEOEVGQUQwRUI3MUMKLToxMDhCQTAwMDg1RDAyRUEzNTI4NEU5MzUyNDhBRjZEOTY4RDI4MUY5N0EKLToxMDhCQjAwMDMxRTA2REU2QzIzNTJDMEQyRjhFOEQyN0JBQzhFMkJCOTEKLToxMDhCQzAwMDAxMTFFQ0M3QjQ1QjhENzg0Q0YwRjU0NEJBREVCRjk2NkEKLToxMDhCRDAwMEM4RTMzNkZDNzc4QzUzNjYxNEUyN0U3RDY2MTJBQjVGODkKLToxMDhCRTAwMDE1QzhCQjBGRUNCQzhEMzNBNjYxOUNDNkIwRUY4Q0Y1RUQKLToxMDhCRjAwMEQyQjBERjE2NzI5ODU3QUI0MjVDN0JDMUIwRUIxNjNBMkQKLToxMDhDMDAwMDU5M0U3NUI2RkVFMDY4ODg2QkI2NTMwQjM0MUJFRTJGRTkKLToxMDhDMTAwMEIzRjg2QUY5RTZFMjM0QjBDQjE2MUVCQTE1RURFNDRDQUYKLToxMDhDMjAwMDk1RDk2NThCMzZDRTUwODJBM0UxREVEQTNDRjQwNzhBMTMKLToxMDhDMzAwMDM3NEM0ODg0N0Q4NEQ1NEU3RkUyNzU4NUU4NjdFMkZCM0EKLToxMDhDNDAwMEI5MDNCNUM3QjZBNjVEMzUxOUU0NzFBQjhEMTI5MENBRUMKLToxMDhDNTAwMEZCNEJCMkVFMUUwQjdDQjEyMTBGRURDQ0FEMDlDMUM2QjIKLToxMDhDNjAwMDI0REFFRkQ2N0ZENkZDQUI2OEZFQTc0RUJERjAzODhDNzkKLToxMDhDNzAwMEIzM0E4MUQ1QzNCQjUxQzA5QjNERTcxMkI2RTFCQkM5MzYKLToxMDhDODAwMEZEOEQ2RjNEOTdGMDUyMTI3QjdGQ0FBOEZGNkY1MzdFMTgKLToxMDhDOTAwMDdDN0QwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQTkKLToxMDhDQTAwMDAwRkZCRDdEMEI3Qzk0RDU5NUY4RkQ2NkJFNzk2NTY2QTkKLToxMDhDQjAwMDkyQzk2M0YyMjIwOTEzQzI0QjVFNEU5RTgwMjI0QzEyNkYKLToxMDhDQzAwMEMyNDNCNDRDMTAyQTIwRThGMDM0OTBBNzQ4NUREQ0JBQzcKLToxMDhDRDAwMEZGMEMwNDMwNTBCNjA2NTcxMTJCRUE4NDYyQzVBQUJCQkMKLToxMDhDRTAwMDQxQTMxQjM1RUE4MDgwQjhENjZENDREQUQyMTZGRDhGRDkKLToxMDhDRjAwMDRBMTUxMDQ4OEFCNUQyRkVERDY1Q0YzOUY3REVDQzdDNDcKLToxMDhEMDAwMDkzMTlGMEI1RkZCNEZFM0VFRUY3RERFNzc5REY3M0NFRTEKLToxMDhEMTAwMEJENzNFOTEyRkM0RDYxMkM5NEE0MzA1NkNBRDhDMTUxRTAKLToxMDhEMjAwMDhDRjU4QzYxOENBOURFMjQwNkNGNEQwNjZGRDJFMjM0MUYKLToxMDhEMzAwMEM2RkE3RUEzNjdCQkUxRjUxNzY2NkY5MkMzQzZEODI1NTYKLToxMDhENDAwMEQxMkVGQTc5QUE5OUIxQTA4OUIxQjNDRDZFMTYxQ0MxMDIKLToxMDhENTAwMEQ4OTk2NjMzOTU2Qjk2MUY5OEM2QTA5RjlBMEU4NUI5RDEKLToxMDhENjAwMEYyMTk1QkM1REEzNjYzM0ZBRjNCOTI2OURDNTUwMTNERDIKLToxMDhENzAwMDBCOEU2NEY0NzcwOUZFNUJCREZDMjhENTVGRERDOUVCODMKLToxMDhEODAwMEQ3QjIwRUFBQkY5MjMxNEYwNzNDNkJGNzVBNTlEMDFDOEQKLToxMDhEOTAwMEFFNUZERjUxQUM2OTFGNEFEMjUxQkZENzI1RkIwNjNCRkUKLToxMDhEQTAwMDlDOENERDVCM0RGQ0JFMkE3ODlGNTY1RDYyRjZFMUZBNDUKLToxMDhEQjAwMDU4OEVFMzEzQUJBOEFGODdGNzNBRTZFQjg4QjFBRTc3RUUKLToxMDhEQzAwMDA0NUNERTQ5ODI4QTRFQUNFREQwQjEzMkM2RDYzQUUwQzAKLToxMDhERDAwMDlGMkVDNjFFNTBEODdDNkNCN0Y2RjcxNTE5Mjk2M0MyQjIKLToxMDhERTAwMEVERDYyQTlFMENDNzk4Rjg3MDZBQkNBODY3ODFENDg4MTMKLToxMDhERjAwMEIyREE2N0M0RjUzNTVFMzREMkZCRjMwRUIzNUYwNzYzQjYKLToxMDhFMDAwMDFFQzlGNDNGNzAyREFDN0YyNkVCNTMxOUNDNTM5RjkwQjUKLToxMDhFMTAwMDM4OEU1RENENTg4QjI1NzEzNzNFNjdCQTBDN0RBMTA4MjEKLToxMDhFMjAwMDM4MzAzMzUzNzE3RTMzRjgyQkY2RUJDNDY5NDc5NDcxQjUKLToxMDhFMzAwMEQ4M0U0MEVENjdEOThFQTkwQzQwNzNDNDVFNzMwMzgzOUUKLToxMDhFNDAwMEY3MzdCMDkwQ0EwQTA2Q0UwRkZBRkQyOEIyREY1OTIzRDEKLToxMDhFNTAwMEI1RTUxQkREREFGMkVDMDlEQTMyNjM3RTgyRDc0RjlBOTAKLToxMDhFNjAwMDlCQ0E0RTFBQzJGREZFMDRBNkQ2MTEwMzJFQjcwMjU4QTUKLToxMDhFNzAwMEIxN0VFRDVFNEJFMDY0MDQxRUVCM0I5MjM1RTVDNkFFODEKLToxMDhFODAwMEFDQzBDOTg4NzE2QUYxMUY1OUYwNUYxMzVGNzc5RDU4QjQKLToxMDhFOTAwMEY3MDc0NkRGQUQwRUMwNUIzRDBCMTk3MURENDBDMTQ2RTMKLToxMDhFQTAwMEVGNThDNkFDMTZFNjQ1N0MxREQ4NkZGMUIwMTJFOENGN0UKLToxMDhFQjAwMDY2NkVCNzAwN0MxQkJCQUI5NTI1RjBERTZBODdFRjMwOTIKLToxMDhFQzAwMDNGMjc5NkUxNjkzNUYwRkE4QzA1ODgwRUUwOEZEQTM5OTQKLToxMDhFRDAwMEJEOTlFRDVCMTVFNDEzQjdBQkRBRkVDREU3REQwMEZGMUUKLToxMDhFRTAwMEREOTMwMjRGOTUzREFDMjQ0NkFDQTMwRUQ2OTExRTVFOTkKLToxMDhFRjAwMEM3MzlFQjA3NjU4ODJGNThDRjZGRUNBNTQ4MTc0NkE2RjIKLToxMDhGMDAwMDI0ODVEN0YzQURFMUI1NUMwQkFGQzY1RDM2QTIzNzE4NEIKLToxMDhGMTAwMEU3QkQ0NDE4QTc2MUE3Q0U2Rjg0QjJDRURDNjM0NDdFNjAKLToxMDhGMjAwMEI5MTdFOTNDMDZERTcyMUM0QTRDM0M2RjQzM0NDN0UwNzMKLToxMDhGMzAwMEE3RURBQ0ZDM0VFNEM3MUNFNDFGMThDN0I2RUUyNzY1REUKLToxMDhGNDAwMDI3OEI4MThGQUEzNzE3RkFBMEJFNEQwNUZFODY3MTU0NzQKLToxMDhGNTAwMEY4QkZBOTA4QzhEOTNCNkQ1NTMyRDBFOTI5M0JFN0MzMTIKLToxMDhGNjAwMDBEODkyRTdBRUU1MEJDMEFFMjM1NURFN0M5NDdGQUQ1ODUKLToxMDhGNzAwMDI3Qjg0M0NDQzFGMUEzNjY0MjE5NjBDQkFFQzE2MkY5RjgKLToxMDhGODAwMEJEMUVFOEVGMjE5ODFCQ0IxNjg0MDlGMDc4QzhDMkNCMzAKLToxMDhGOTAwMDJGMzlDQUVGREQwOEUzNkU0QUU2RTUwRDNGQkRCOUQ1Q0UKLToxMDhGQTAwMDNGMDlDQTE2NTk5RTQzRTU4NzBDNkQ0MTNERTBEREZGNDAKLToxMDhGQjAwMDgyQzlGNTQ0M0VCNUY3Mjg1ODVFMzAzMkYwMDQ0QzRENzYKLToxMDhGQzAwMDNGODQ2NTIzNUVBNjI2NDJFNzIwQjdGNDJGOUE3NjlCNUUKLToxMDhGRDAwMEEwNUVEMEVFRkIyNzg0QTc1Q0ZGMzlGQkYxM0MzNjI2NzAKLToxMDhGRTAwMDY2N0Y3RTREN0Y3OURGQUMzRjE4QkY1Mzc3NzVGOEZCMDYKLToxMDhGRjAwMEQ0QzQ5RDQxM0Q2RkU3QzI3NjJDQTdFNzAzM0ZGNDlGQTEKLToxMDkwMDAwMEZFQTI4OTZEODVFMjIzMDY3NjlCMTdEQUQ1NUQyQzYzNzcKLToxMDkwMTAwMEMxMDgzOUQ0MjNGMDc5QjZEOTQxNzI1QkJFQUY0M0Y5QTgKLToxMDkwMjAwMDNEMDZGOUE5ODdFNDcwN0Q0N0FBNDZGRTRBQjk1QzdGRjAKLToxMDkwMzAwMEYxNUE0RDdGMzk4RTdDQzI1N0JEREE0M0YyQURGRUUyNjQKLToxMDkwNDAwMDY0RkExRTEyRjJGNDZDNzMyNkU5ODlGOEUzMENEMkM4QjQKLToxMDkwNTAwMEY1RjAzODEzNTlCMEY4NzJFMzRDQTJFRjcyMUNFNkNCNkUKLToxMDkwNjAwMDIyQjlCRDA2RTcwQzI0QTQzNzgyQkM4NzcxMkUwQzc1OEIKLToxMDkwNzAwMDI1MjU1RjQ2OUZEOTc2MDI5MTQ1QUM2NzlCMUEzNDYzREMKLToxMDkwODAwMEZGREJEQzA3MUNCRTE4RkMyMEU1NDRCOEJENTFEQjFFMkQKLToxMDkwOTAwMEY0MjMxQjgxRjRFRDYzNDhCN0ZGQUM3QUNDOTFGQUQ0OEEKLToxMDkwQTAwMDY2RjAzODUwNkZBOEY2OEEyMzJFMzczNDREN0U2NDg2REEKLToxMDkwQjAwMDBBMjg2OTUxMzkzRDdGRDlCNjgxRThEMTZFNzAxRjQxQzgKLToxMDkwQzAwMEZDREFFRDNBOTcxRkJFQUZCN0U5M0M0ODI3MkQwRTczODcKLToxMDkwRDAwMDAwRjFCRDUxQjlDMTgxNzI0M0Y2NkIwNzMxOEZGM0I4MEUKLToxMDkwRTAwMDYwMUI0MjdBM0RERTdBRDU4Qjg5NTQwRjY2OTIxOUE5QUUKLToxMDkwRjAwMDFGRkZGN0M2ODNDNTE3MEYxQzhGQkQzMUYxODgwQkZBMTAKLToxMDkxMDAwMDU3NEI3NDZFMEJFMDBCOTFGQTcxMDQxRDQ0Rjc2M0RGNEIKLToxMDkxMTAwMEE5QzY5Qzc3NzQzRDA5RkZCOEY4MzY4NDEyMTFGRUU3QTIKLToxMDkxMjAwMDZEQkExOTgxMThGMzJFNEQ1NkJFOUI5RTVBMTQyNURGMzkKLToxMDkxMzAwMDkzN0YzQjNDODhFRDk1RDAwRjBBRjI0OUZFOTYyNkEzMUIKLToxMDkxNDAwMEZDMkRCQzkwNThFOTIyMzk5RkVFQjU3M0IxODVFM0I2OEEKLToxMDkxNTAwMEQ4OEU5QTdEQTQ4Rjk4RUQxM0Q5QkYzRTNFRkQ0OUI4QjUKLToxMDkxNjAwMDE4REVBQTY0ODgxRjYwMDQ4NjdBRTM0QTcwQjAyQjQxMzcKLToxMDkxNzAwMDJGRTI5NzE1QUEwQ0U1RDM0MDNBNkZBN0Y5RjRENzc3RjkKLToxMDkxODAwMDQzRTcxMUVCNkY1MUREMEVBNDZCRkQ3NTFFMzNDQTk5RDkKLToxMDkxOTAwMEY1OEUzOUU2MTA5NDM3QUFBRUQ5RjkyMDg3RkFERTAyQTcKLToxMDkxQTAwMDdCMTJENkI3MjlBREM4MUM4QjhGNUFDMTZFQzRGOTJENUUKLToxMDkxQjAwMDRERDY2OUQ2MjM5RjY2MURFN0RGRThGNzVCOTJCOTlFMUYKLToxMDkxQzAwMDY4REQzRkIxQzc1MzEyOUY3RTQwRDI3OTUxOEY5QkNCNTAKLToxMDkxRDAwMDU0Qzc1NjU4OUZERUMwRTc2Qjg5NjMwN0NBN0VFM0MxNTgKLToxMDkxRTAwMDZCQ0I3RTBCQzk2OTc1QTgzOTgwRjY0NEY0Nzg5QjU0MjMKLToxMDkxRjAwMDc3OEYwN0JFNkY4MkY5RjhCMTlDQzNDN0RGNTRBMjNBREMKLToxMDkyMDAwMDc2NDNENzE2NTcwMjMzNDdENDM3Mzg0QjA4RkUxNzZDQ0UKLToxMDkyMTAwMDY5NEMwRkRGMzcyMTNEQzY5ODk3ODREM0JDRTRFRjY4RDMKLToxMDkyMjAwMDNGRjlBMkU4MzJGN0I3QzNEOTEwMEQ1REI2QzZBMkNCOUQKLToxMDkyMzAwMDc5QTgzNzRCRjlGQzk5Mzk3MkZFNDM5M0JFOEU3QzhDMkEKLToxMDkyNDAwMEE2OUJCMjQ5Q0M4MzdDOTcwMUNGNzY1ODZGQTdDQTY2OUMKLToxMDkyNTAwMEVDNDM3RDgwQjZENjQ0OThERkNEMzZFNjAwOTkzRTM5QTIKLToxMDkyNjAwMEI1N0M2NzMyQUNCN0FDRTc4MDkxMjEzRjc0M0E2OTFEOTkKLToxMDkyNzAwMDc1QTI3REY0QjhBNjE0OEUzRjUzOEE4MzlFNDlDNzNEREMKLToxMDkyODAwMDRGNEYwMUY4NzZGNjI0QjgxNEY4RDQ5OTAyRkEzMDA2NTQKLToxMDkyOTAwMDdDOEYwOEJDMzNENkM2OUY2QTY4MUNGMjhGQUM1RkI2NjEKLToxMDkyQTAwMDg4Nzk3NkMzRjM1MDAyNkIzNTgzQkRCMjRGQzgwN0M2QzkKLToxMDkyQjAwMEVFRTc0RjE1MTgxN0M2OTlGRENBRThERDY0MkY4QUY1NDkKLToxMDkyQzAwMDFGMDJCNTgwRjVEM0QzNDNFMzE0RkQ3N0MwREI1RTU4QUUKLToxMDkyRDAwMDdEMDRERUVBQ0QyMUMyREJEQjQ2REY2QjA4OUZDNkUzRkYKLToxMDkyRTAwMEExNzQyQzc3MUUzRDkzODdGODcwQjY3MEZCQjVFRjI1RkYKLToxMDkyRjAwMDZCMDBFOTZFMjA3RUQ2RDNGQ0VBMkUwRTYyRkVFMjgxODAKLToxMDkzMDAwMDc4QUI1MzgzQTQ1RkVCMkVFNkQxNzc1OEI3REY5QzEyN0UKLToxMDkzMTAwMEZFM0UxQjZDODYwOUIwMkU2NkU2NzA0MkY4QzRDMjQ3NUEKLToxMDkzMjAwMEJCRTA2Qjg5MEY1MEVCQTNFRDAyMUYwOEE3OEZDNDNFNzMKLToxMDkzMzAwMEE3MUZFRjRFRTM2NjA2NzgzRjZCRTZFRjk5NjcyNERGRTEKLToxMDkzNDAwMDg3MDk3REZFNTE0MjVFMDBGNzMzMUYwRDA3Q0U0NjdBMzYKLToxMDkzNTAwMDUwNURFOTkxN0FBN0NFRTJCOTZGM0VBQzlCQkRBQjY3OTkKLToxMDkzNjAwMDRGQzA2MzU5QTVBRDE1RURBQjY1MjY0RjEyREE1RENCNDUKLToxMDkzNzAwMERFRDMyQkVCRjMwOTg0QzQwNzJCMDQzQ0NGMzJGNzVEMUIKLToxMDkzODAwMDg4M0ZGRjM2OEJFMzA5QzI5Rjc2RkY5N0JGQTNCQ0Y4RTcKLToxMDkzOTAwMDFENjhCRkEyNEJFRjQ2OTM3MTY5QTVDRDhGRkQ5NkY1NzEKLToxMDkzQTAwMDU0M0M2RDg3RjcyQjVCQUQyRTA2RkQyRTlCRTJGRTA0MzEKLToxMDkzQjAwMEVEQkQ2NUY3NTk1QzFCRjI3MUJGMzhBNDNDMEJGQTVEM0IKLToxMDkzQzAwMEZCNjBCRTAzRTU4MTc1OUQzN0QzRUMwNjkzRTA3RUVCMzEKLToxMDkzRDAwMDRDMkJFMDZEOTNCMjY0ODk1MjA4QUM3RDdGQ0ExNjE1QTAKLToxMDkzRTAwMEYwQUNGRTU3RTU2NzE2Mjg1Rjc1N0ZDMTE2RjM3NThDRTQKLToxMDkzRjAwMEJEODJCMjFDRUQ1OUZGRDA5OTY4REZGRTEyQTc0NkY2NzgKLToxMDk0MDAwMDJFQjc2RjdGNzk0NDI3Q0FDNTVCQTY4MjBBMThFNUVDQTAKLToxMDk0MTAwMEQ0RDk2MENFMkI1MzhBQjc5ODYxRkNGNDE0NEZBMTBFQjcKLToxMDk0MjAwMEM2NUI5MzMyNjEyNkY2QjdGNEJFQjE3RkREMDlERjc3MDQKLToxMDk0MzAwMEE0Q0M5QUE5RTYxM0RFNDQ3QkVGQ0NDQUExRDA2RTkyRUQKLToxMDk0NDAwMDJDQ0ZCMzU0NDI3RjY5NTYxNkI2QTcyNzAwQkYwRjA5MjkKLToxMDk0NTAwMDhGOEZGNjc3NjdCRkZEQkQ2MEU2RDQxQ0MwNEI0NTUzQzgKLToxMDk0NjAwMEE1MEFGREJGOUU3MkRCOTYzMTU3MzEzNkZFODE3Mjg3QTkKLToxMDk0NzAwMDA3QzYzRjk4QjI2NEE2MTVGMERGNjk5NEY1OTc2REYxQzEKLToxMDk0ODAwMEMwNTg5RENDRjc4NjAxQkVGRkYxRkVCQTk5NjZBODlGMzEKLToxMDk0OTAwMDk2RUEyRDc0QzBGQTUzQ0RGNzZGOTk5MUZCMURGODY1Q0MKLToxMDk0QTAwMEE0MTJCRDRGMkM0ODcxMTJERjFDNDY5MEU2QURFQjMzODEKLToxMDk0QjAwMDcyRkQyQUY4M0Q4N0QzNzE3Rjc5MjQ5NEVEMTFFNTRDMzQKLToxMDk0QzAwMDVFRUVEQzEwNUI3RTlDNEVFNTcyQjkzMzIxRjY3NzhGNDEKLToxMDk0RDAwMDkwNEIwMEVGQTAwRUU5QjNDQjFBMTg5NjFGOTYyN0MwNDkKLToxMDk0RTAwMDRGRTYwOUM0NUZEQkI5M0MwMUJFOUE2MzI3M0U4RUQ5QzMKLToxMDk0RjAwMERGMzdFNTVGODAzQkY1RDNBOTdBQUNFOEJGOTA3MjBEMEEKLToxMDk1MDAwMDY2NjZDNTcxQkU0Qzc2NjlFNDc1NTlDRjUyOTJCN0JGOTUKLToxMDk1MTAwMDRBMTU3Q0VCRTJGMDcxNTY2QUU1MEEzM0Y3MEM0N0I4NUUKLToxMDk1MjAwMEM4NzY4QkM1M0FGMzQ3NEJGRjUyRDA4OEZDQjlENkUyRDgKLToxMDk1MzAwMEM5QzBGOUFDREQ1NzlFQzEyRTYzODdENzVEMkNEN0Y4MjMKLToxMDk1NDAwMDRCQzJFQjk4NEFFRjA3RjQwQkZEQjk0NEZGRUUzMTVGRDUKLToxMDk1NTAwMDA3NUVDOTU3ODA1NzFBN0RCRkQyM0FDM0ZENjlGRDNCRUMKLToxMDk1NjAwMDAzRkJFMzdFOUUwMTdBQzUxODdCOUUxQjUzQjg1RTQxQzgKLToxMDk1NzAwMEY4RUIyMkU0REE0QTIxNUY0MTZBOTEzRDdFRkVDNUFCRjkKLToxMDk1ODAwMDc2NkZDRDhGMUM3NzAzRjUwRkY4N0Q3QTBBRUUyRjQxQTkKLToxMDk1OTAwMEJFQTIxQzJCNTMzREIzQjA3RTU5NEY4QTAzRUQ3OUEwNzgKLToxMDk1QTAwMEI3OEQ4MkRFNTRBNDM3ODlFN0NFOTRBNjcyNUFFRjc2M0YKLToxMDk1QjAwMEM1QjEzQjg2MURGODEzMzlBRjM2QzU4M0Y2NDlDNjIyQkYKLToxMDk1QzAwMDlGN0U0OUM0RkNBNEZDODdGRTNCNDVGRjI1OUM5RTFGNTMKLToxMDk1RDAwMEVEQTdFN0M1QzgzRkMyMkZDNERDNDBERjYzMDdDRTVGRkQKLToxMDk1RTAwMEMxMzZDRTA4RkRGNTgyMjU4MEYzOTE3MEZCQjZGNDJGQ0QKLToxMDk1RjAwMEVEODdCQUI4N0EyQTkxREE2NTFDMEYyNkJBQTA5RTIxQTcKLToxMDk2MDAwMEM1QzVGOUI5RTNFM0M0NkI1MTVGNzVFOTk5RTJFMkVCRDMKLToxMDk2MTAwMDQ2Qjk1MTI2RTVBNEJGRTc0ODg1NEE3NjRDNTgyRUJCOEIKLToxMDk2MjAwMEM4OUU5MTcyMzM2ODM2ODdFQkRGQkZCRDY3QzY0Njk0MkMKLToxMDk2MzAwMEFCMjZCRTJGNEZEMzgzMTQyRjBBQ0ZFM0U1MTRBRTJGRjIKLToxMDk2NDAwMDI3Rjg5ODI3OTYxRDc4MjREOTJFRTUwOEFERTNFMTc1MTMKLToxMDk2NTAwMDk1RUM2MzU4OUY1REU4RDcwOTIxM0ZGOUIzOUU0QzY2QUUKLToxMDk2NjAwMEMyM0VFMUYwOTBGQTdCQjYyOUY0QUZEQzRGQTZBNTQ3RTUKLToxMDk2NzAwMDU5MDYzQkE1NDE1NzEwRUUxRkJGQ0Y4OUEwRkI2MzgyNUYKLToxMDk2ODAwMDBFQTJGMUYzNURFNTEzQzBDMThGNzA0ODRERTE3MkM4QzEKLToxMDk2OTAwMDA5NjUwNUVEMEIxNUY0MTdDMEZGNUNCNUNEQkQzNTNGNzEKLToxMDk2QTAwMDYyREUzNjJFOEY5RDdBMUQ5NzYzNTdFMDhCQjQ1NEZFOTEKLToxMDk2QjAwMEJERUYyNTNCRjE3MzE4MUVEQzhFRjkyRjAxRjc3NjFERTcKLToxMDk2QzAwMEFCQzE3REMxMjExREYwMDlEMkEyOERBRkYzRkM4QjU5MzYKLToxMDk2RDAwMEQ0RUZFNzI5M0FCOUZFRUY0NTJFQjcxQjYxM0NDRUQ3NTAKLToxMDk2RTAwMDY0M0ZENkJGM0NBODVEM0I3RkRFREZEQzU0NEU4RjY1MTgKLToxMDk2RjAwMEM3M0Q4NTY4QzcwQ0YzREFEQ0I4NUYyOEVCOTk3M0MwMDcKLToxMDk3MDAwMDAwRTVFMUREOEEwMzZCNEIzQTFGREVDMUY5MTRBODRCN0IKLToxMDk3MTAwMEMwRTVBRDY3MjJGQkI1QTU3MjNBRkFCRUQ2MzFGQzM4N0EKLToxMDk3MjAwMEE3NTdDNENCRTIwODNFQ0Q0REI1NzE3OEMxRkE0QzA4QkQKLToxMDk3MzAwMDRGNTUyQjQ3RTVGM0ZCOUI4N0Y3ODAwMUQ2NUIwN0YwN0UKLToxMDk3NDAwMDQwQjEyREUxRDZEOUIxNjQ4MzA1RjlGODM4NzMyMzFGRjAKLToxMDk3NTAwMDlGRUY1OEEyMUI4Qjc4RERDOUM4QkVFQjk3MEYwRkYwQTcKLToxMDk3NjAwMDc1NDg3QjE0RThCMjAzRTlGMkVBRDQ1QzFBNkZEODcxNDkKLToxMDk3NzAwMDhGNzUwQzdDMUY4Njc2MTNGQTk1M0JFQzAxREM1NzRDRjkKLToxMDk3ODAwMDRFRjVDRDRENDU3OENFRURBQjY0MjA0QTFBQUM0REVCOEQKLToxMDk3OTAwMDJEMTFFRkZCRUI3NzQxN0RBMjYzOUY3RTJDQ0VGMzM2M0MKLToxMDk3QTAwMEM2QjZCQUMyRUI4MUE5RkFEMTFGNUE2RjA0M0UyREEwRUEKLToxMDk3QjAwMDcyMTBFMUQ2NjlFNEY1RkIxNjMzOEFDRjM0RThGQjhDRUUKLToxMDk3QzAwMEY4MURGNEY3MkNBMkNGQTNCQTE0QzQyRkVFOUJEMDZFRDEKLToxMDk3RDAwMEFFRDM3QjczMTREQ0Q3Njc5OERDQTgwNzYwMUY0MkY0MTQKLToxMDk3RTAwMDdFQzhDMjU0MEJGNEZGMjYzQzUxNEU1N0U5RUZEODhGODgKLToxMDk3RjAwMEYwQUEyQTUwREMyRDI0QUVEQTg1REM2MDQxREMzN0NEQkUKLToxMDk4MDAwMDlFNjIyNTdBNjQ1RkREMzlCNDFBRjVCRjk1RTMwOUZBRTMKLToxMDk4MTAwMDMxOEI3RUNDRTZBMjMwRkZGRDNBRUYyQURBRkY0OEZEMUQKLToxMDk4MjAwMDc2NDg1MUE4OUY0M0Q3OERERUREMTJCMTJGQzJGRTUwN0UKLToxMDk4MzAwMEZFMUY1MkFBNzNFRTQwRkExN0ZCM0FCMjBGRDNDMjdBNTgKLToxMDk4NDAwMDE3RUQ5NTIyNUIyNERFRkQ2MjdFQTEzQ0E0QTM0ODdCM0MKLToxMDk4NTAwMDE0RUREMzdFN0JENkRGQjE2NTNBQzhEOUYxMzMzQTgyQjUKLToxMDk4NjAwMDNBMDc1MkQxRjMzM0ZGMDFENjUxMDVGNkFDMDVFMDcwNEIKLToxMDk4NzAwMDVCMkE5NzMzODdGMkZERkE0NDlDREYzMDU4M0ZCQzNBQUQKLToxMDk4ODAwMDlDRTAxQkQzNjQwQjhGOTMyRUZDMEZFOTQ2RUUyRjQ4MTAKLToxMDk4OTAwMDRGRTBDRkJGQTc3MjNCRTcyNzY5NUMxRUZFMjE4RDk3ODMKLToxMDk4QTAwMEQzMTM2M0ZCMkJCRTEwRjU1NDEzOTcxRjVCQ0JCOUZDOEUKLToxMDk4QjAwMDhGQUVCNzQxRjRGQkFERURERTMxOEE2NjdGMEY3NkVGRjgKLToxMDk4QzAwMDg2NTQ2RUY3MUFCOTVGODhDNzEzOTYwQUZBMDYzQjg3NjMKLToxMDk4RDAwMEYwMTRCNkFCNzgzQzUwREFBMTVGRjRDQ0EzRjI3MkYzOEIKLToxMDk4RTAwMDdCRDlFOEJGQkZFRDlGRTZERDg3RjRCNkYyMzc3QUYyQTkKLToxMDk4RjAwMDU3OUMxNEYxODI5NUM5QkVGNDY0RENCRjI3QzRGNkFCNTMKLToxMDk5MDAwMDNDMjdENjc1QkE5OTkxMUZGODUzOEMxQjgyRUMzRDg5ODAKLToxMDk5MTAwMDcxNDMyOEFGREFGOUUwMzRFNEJGRDUyQzQwRkVFMEU1MkUKLToxMDk5MjAwMDNCMzc1MTVDNzA3OTQwNjEyRTA1Rjc2OTVFRUUyNzE2NzIKLToxMDk5MzAwMEY4NThCRDQ3QUZGMTRCREZBRTM2MTk5M0M3ODRFOTc3Q0UKLToxMDk5NDAwMDQ1OUIzNjZFNThCM0FCNTg1M0ZFRjZGNjY5MjUwQjQ0NkIKLToxMDk5NTAwMEM4QTFCMEZDOTk0NkVGQTNGQjk1RjQxRTZEQTc3RUQ0NzkKLToxMDk5NjAwMEVDRDJGOEMzOTdFRTFDNDZFQjk3RjU5NzMxMzdBRDc3RkQKLToxMDk5NzAwMDU5NkI4MTY2REVBQzk1RjM0OUJDRjk0OUJBNDVCQkQ0NTUKLToxMDk5ODAwMDFGNzM5RTQ2Q0RGQjhGMDBGRUZFMDhGRkZGRDI1MzQzQTAKLToxMDk5OTAwMDY5MUUyREE5QkVGRjQwQkEwOUNGQzNDQUZDMUFCRkRBOUYKLToxMDk5QTAwMDI0QzcyN0IwNTY2NkUxN0U0OUEwMjNGRkU1RUM4MTUwMkQKLToxMDk5QjAwMDJBQTdGRjZGMEZGN0QxNzFGNjA1RTNGRUJGRUUwQkNBQzIKLToxMDk5QzAwMDI2NzEzOUNDREExNDM2MEMxRUUzQTc2QUVEQjRCRkEwQjkKLToxMDk5RDAwMEJFMkJDNUE3OTVFQjZCNjE0NzJENUZBNEFENzc1MUQ0MjYKLToxMDk5RTAwMEJCMjhFQTVEQzlCRjEyNjk5RjI5MDUyOEQ3Nzg3RjBEN0EKLToxMDk5RjAwMDgyOEZGM0NGMUMzNUJBQTBERUY4MzQ2RUM3MTYzOTNEMUUKLToxMDlBMDAwMDk3NTBFRjZDQjMyNDhFNDM3RkNBMzY0QjVFMDBGNTUyRkQKLToxMDlBMTAwMEZGRkFCQTM4MUQ2RDMzNDgzRjhBM0IwM0UxRDZGRTVGM0IKLToxMDlBMjAwMDc3QjZBODg4Qzc3REIwMEYwMDc5NThGRUU4NDExNjhBM0UKLToxMDlBMzAwMDkwNTMzN0FFNTMzQ0NCMDFERTc2MjFFRkVBREM3QzdERTAKLToxMDlBNDAwMDc1RUVBMDcxMjhGNDkzNURDN0U3OTVEM0IxNUY1MTIzRkMKLToxMDlBNTAwMERBRTVENDA4N0Y1RjlBNDFCM0NGQ0NDMTMyNEUyNThENzEKLToxMDlBNjAwMENCRTM5QzlBQTAzMjE0RUE2NUVGREFBM0E4RDg1Rjg3MEIKLToxMDlBNzAwMDQyN0EzM0JCMDkwMDEzNDE1N0Q5MjVEQ0JFQjlCMUE0RTIKLToxMDlBODAwMDVENTkzNjI2MEM4NzU2NURGNTE4MDdFMEE3MzVEREVBRTcKLToxMDlBOTAwMDQ2N0Q3MzhGRDMzNzI0MERFNzc5MjIxOEM0RURGQ0Y4ODcKLToxMDlBQTAwMDEzM0QyQURBRUYzRjc1N0EwQUQyOUM2MTM4QjhGNDhFRkEKLToxMDlBQjAwMDZDRDRBN0Q2MTM3QzlFNkRGREZCNjNBRTY3MjhBMjREQzgKLToxMDlBQzAwMEZFQUJERERDOUVEMUIzMjM4Q0RCODdBNEFGRDIzNzhDMTkKLToxMDlBRDAwMDI0QkQyN0U3OTc5RTIyRjQ0NTNBRjMzRDY3QTNGQUFERUMKLToxMDlBRTAwMDhDRjBDOTY4M0RFOTFCODZFRkU2RjYyQ0M3Nzc1NTgxRjcKLToxMDlBRjAwMDc3MEZCRUFGQ0FCOEFBQTgwNURFMTc2QzBCQUE0QkExOTgKLToxMDlCMDAwMEREQ0JCQjYyRkI4M0NCODUzRTgxNzU0Q0MyRjVDOTc1NEQKLToxMDlCMTAwMDVDNDkyRUM4N0E4NjM4N0UwQUM5MEZENjE5QjFGNzFGNUMKLToxMDlCMjAwMDMwMjI3RDJGN0YzNDZEMjFDRUI3NkVBMzkxOTk5NDMwNzIKLToxMDlCMzAwMEZDN0ZFQUY0Q0VDNkY5NjQ3N0I0MkIwODFCRTlERjkzMDcKLToxMDlCNDAwMEUzNEFGRjFEN0U0N0ZFRkNDODI4Rjk5NkQzNUY1Q0ZFMDIKLToxMDlCNTAwMDVGQTdGNzJDOEY5NDY3MUI4RDg0Mjc2OTNGODdFN0M3MjIKLToxMDlCNjAwMEVERkRENTY5NUNDRkJFRUFGNDJFQzFGOTM0NzQ2RDI3RTIKLToxMDlCNzAwMDdGQ0ZBQTNEMUYxQTYzRjlBQkEzRjlFMjRBNzA1NDZBN0EKLToxMDlCODAwMEY4QkVBMDZFQkUzOTgwRUIyRjdGNTQyNTNBQThERDY4NjEKLToxMDlCOTAwMEE0Mzg1OUREMzNGQkI4OUZFNzFFRTY0NjM5NTFEN0IxRUIKLToxMDlCQTAwMDRGNTkwRUUzRDYzRUIzNEY1OTExMDFENzQxNzUwMTA1MDgKLToxMDlCQjAwMEU3MzNDMjJFRjk5MENCQUY2OEJBNDczRjMyREEyRDg3MzAKLToxMDlCQzAwMDJENUM0RTlDMkRCN0Y5MTU4MEVCNTk4M0FGMEVFQjlEQTQKLToxMDlCRDAwMENEQjJCQUZERjk2MTNDQkNCOTZGRkExMUNDMzdCMDNGRDgKLToxMDlCRTAwMDY3MEFFMkIzNTVCNzNCRDMwQ0Y1NUE0NzE5REQ0ODVGMTYKLToxMDlCRjAwMDNGNzVGQTM2MjM1QzUyNTQ2RjI3QjY0RjRFQjNCQkQ3MkUKLToxMDlDMDAwMDQzNUI5Nzg5MTVBMUJDRkJCQTcwMTgxRjQ1MjdFM0VGOEEKLToxMDlDMTAwMEUxRkNEMzg1NzI4OERCOTE0NUM4M0Y4MTM0QkJCNEE3OTIKLToxMDlDMjAwMDQ4QUUxRDM2RjA3NTNDQzdGODdDRkY5RUVBNzk5MEU4OTcKLToxMDlDMzAwMEY4NDgwQThEOUI1RDE3NTREMDlGOUQ3RkU2Mzk5MjZCNDMKLToxMDlDNDAwMEIyRkYzMDlENzkxRTg5RTRERjJCQ0ZCM0MzODhGNDU2NzEKLToxMDlDNTAwMDJCRTQ1MEY5QTM3Qjk0OEYyM0U2RkQ0QjMwRjQ5MTZFRjcKLToxMDlDNjAwMEIyOUYwMUJBQjREMUY3RkQzM0QzQTgzRTMzQjlGMEJERUEKLToxMDlDNzAwMDQyRUQ2QUUxRkI4QTA4NzkyM0Q3MTE0M0VFRUNDM0Y1ODQKLToxMDlDODAwMEQ4NEVGNDFDRTQ3MjI3QzhGRDhENjJCRUQxRjg3QzE1NTUKLToxMDlDOTAwMEU1MUY3QzlBMDZFQTk5REUxQkZEMjMzMTJFN0E3ODQ4NkYKLToxMDlDQTAwMDAyRjUyN0U1NDAzNERGQkUyQUU4MUNFNUE1Q0U0NkZFRDYKLToxMDlDQjAwMDVBQjIyQkU1RkM2NEJEMjI2N0M1RkUzNDgyNDMwRkMxNTYKLToxMDlDQzAwMEExN0U5NzRBRUJBOTMyN0E4N0RFMTFDMTBGQkYxNkZEM0MKLToxMDlDRDAwMDFEQjhGOTAzMjNDQUZEMDdGRUZENURBMkM3RkEzNjg1NEMKLToxMDlDRTAwMEUyRjFBQ0VENURFMzNDRDQ0N0ZFQTdGNDY4NjdDRUUyNTkKLToxMDlDRjAwMDI2MDFEQkYxQzJCQjg0QTc1OTlENUMyRUQ3NzdFRTUzQkEKLToxMDlEMDAwMDk3RDlDMjc0OUE3RkU2QzBBRDQ4NjdGNTFEMjY4NkZCRDkKLToxMDlEMTAwMDIyQTBCRkRGMjA3Q0EyRTk1NEMyNDdDQURENzhGOEI0OTQKLToxMDlEMjAwMENFRTA3Mjk0Rjk4REU0NDc4NUZENTQzRUZBMjlBNERDMTcKLToxMDlEMzAwMEZFN0JBQTRFRjgwOUY4RkIwQjY5QkMxQ0E2MUZERkE3MjcKLToxMDlENDAwMDA4OEZCMERDQjUxMDVGRTQ5RjI5M0E2MEM2N0RCODVCMzAKLToxMDlENTAwMDIxM0Y3RjVBMjU4NzY3RTRCQ0FBQzdDNjk3OUJDRTU0OEMKLToxMDlENjAwMEExMzdENDUwREUxQzdCNThCRUY3Q0I3RkQxRkUwQjgxRDAKLToxMDlENzAwMDZGNzgxRkU0RUZEOTEwRDRGMzcyRkVEMUY4Q0I3NzcyNkQKLToxMDlEODAwMDdEMUI4M0NFRkUxQkQ3MTFBRERGQTQzRDIwRTlFNkM5QzQKLToxMDlEOTAwMDVEQUE0NjhGRDg5RDQ2RUFDRjBFMUI3MzlDQzc4RTcyNzQKLToxMDlEQTAwMDFFQ0ZEODYxRTBGQTZDQzc3QTczMDBFNUM5OUIwQjc4QzcKLToxMDlEQjAwMDVFOTk3REExMzE4OENGNDNCQUE1NzVGOEZENTAzNjFGNTUKLToxMDlEQzAwMEJGNTVBNzVCODNFNUQ2MEQzNkQ2NDI3OEY1MjQzQTRCQ0UKLToxMDlERDAwMDkxN0UxMjE5OTc4RjVDMUUzRUYwM0M5NzY3NzU3RTVCRjMKLToxMDlERTAwMDgwQzEzRkVCN0M3Mzk3NTNEQzM5Q0RFMkM2QjgzM0YzQzcKLToxMDlERjAwMDFEMzRDRUIzMEZBNDJCRDc3M0ZCOEQyRTc4M0ZBQjgzQ0UKLToxMDlFMDAwMEYzOUZDNDAzQzg1M0EyMkZDOTBGMTJBRTYxNzg3MkI4NzIKLToxMDlFMTAwMDRCN0U5MkY4RjhCQkY0NjcwM0JEN0NBN0JDQUEzRERBODEKLToxMDlFMjAwMDc4RENEQjQ2REZENTRFQkVDRjNBNkM3MEExOUY4NkM3OEIKLToxMDlFMzAwMDE3RTJEMTZGRURCQUI3QjM0RjgyMURCNTNBRjMyRDdBNjEKLToxMDlFNDAwMDRBQkU4NUZEQUM4NkJGMjcwOUJDMTczOEI5QkVBRjc0QzIKLToxMDlFNTAwMDcyQkFBOTJERTkyMEJFQUMzREQ5NDRGQzZDOUJDMUU1OEEKLToxMDlFNjAwMDlBRUQ4NDU2MUUzM0Y2Q0Y2MkJEREJBODVEOTVCNTYzQ0YKLToxMDlFNzAwMDFBRTY3NzU0M0RBRTM4NzBCRjFGNEY2RURFQUVGMEZDNzEKLToxMDlFODAwMEI4NEY3N0JEOTE4OEY5NzJFQzJCQjBGMjMxOUU2MkUxNDgKLToxMDlFOTAwMEVCOURFQkU0NzJFMkVDNUUwMDM4RDE3QjkzRjE3MkY2NUQKLToxMDlFQTAwMEZCOTVGQTYzQzE2MzBBQzJCMzU2QzBGQUVDMzM5NTEzNEIKLToxMDlFQjAwMEZGODQ3RUVDQkQ0OUVFNjFCMEU0Q0Y5RUI5RTlFRTNGOTAKLToxMDlFQzAwMEMxQkNDRkVFOTlFMjQ2Rjc2NTVBOEI5N0U4QTdDRjY5RjgKLToxMDlFRDAwMDcxRTM3RTAzQzRGNzBDRjQxN0FFRUY3ODIzRjE1QTY4RjAKLToxMDlFRTAwMDc3RkFFOUFCOEI1MDZFRDc4QTc5OUU3OTVFQkYwRUUxMjcKLToxMDlFRjAwMEIyRTFDOTdGOUI4Q0RGNkIwMzRBQUEwOUM3RDlGQkY4ODMKLToxMDlGMDAwMDdGNjc2M0JFRUE5RTQ2RjIxN0I1M0NGREJBMTFGMzE3QjAKLToxMDlGMTAwMDc0ODE3NkZFN0U2RjkyMDNFQjlERkVGOUY2QzkwOEVGMjEKLToxMDlGMjAwMDk2OEUxNkZBN0VFNkU3RUQ1NDNFRjBFNEJGQkRGNjc3NzYKLToxMDlGMzAwMEY0RTM3ODEzREQ1OEVGQ0NGM0ZCMDkyRjc1M0U5NUYyNkYKLToxMDlGNDAwMERCRTJEMUY1OEU3REZCQjlCQzQ0M0Q4RjdDMzA5RkNCRUQKLToxMDlGNTAwMDMxNDlENzkyN0U0RjNGNzlEQkM0NDhCRDIxREZCNzBBMzQKLToxMDlGNjAwMDdGNEU2QjAyRDcyMzlGMDlGRUFEQURFMEYxQ0VDRjlFQjEKLToxMDlGNzAwMEI1Q0NBN0ZEODEzMTM0MUNGN0M1NzU2MzM4NUREQzJEODgKLToxMDlGODAwMEUwNTFENzcxODdBMUMxNDZFREE5OUZERjAyREZFMzczREUKLToxMDlGOTAwMDJDRDBFNzI3MjMyOTg1NjRDRjI1Q0FEN0Y5NTdBQTBGRTQKLToxMDlGQTAwMEY1MjZBMEJGRTdFNjQ1MUYyQTM4MUZFQjk4MjY0MzJENkMKLToxMDlGQjAwMENERjM2OUZFMUQ1NjFERjlCRDZDNkQ2QzNGRkJCRjM4QkUKLToxMDlGQzAwMDZEQzIyRUUwN0M5MERENTk5REUzMjIzOTYwNzIwRjhCQ0IKLToxMDlGRDAwMEIwODdCMzZCN0MyRDE4MjdCRTdFQURDRkFEMDczQ0JFREUKLToxMDlGRTAwMDdDRUFFOEI0NDE1MDdFNzJBNDUyNENGOEQ3MkI1Q0NGODcKLToxMDlGRjAwMEY5NkQzNDRFM0RGQUMxODE4Rjc2MEIzRTQ5NzczMEY1Q0QKLToxMEEwMDAwMDFBOTIwM0RDMUY1MEE1MzJENTQ2N0VBQTNFOTIxM0Y1NjQKLToxMEEwMTAwMEFENDIwRkVFMTE3RTZFNzM1RkRFNEQ3NjZBNjdCQjI2MzIKLToxMEEwMjAwMDYyMUYwNkVENkMzNjJBRjdFNUZEMTBGMzRBNjdGOEU3ODQKLToxMEEwMzAwMDkzREU3MTE5NjlCRTY3QTQzQzYwN0VGMjdCNEE3RThCMTkKLToxMEEwNDAwMEY2MUJBMUJDQzFGQ0QxNTc5REU1NUQyODFGRTUzMzNENDIKLToxMEEwNTAwMDhFQkZFNEVGRTJGQkI4NzQ0RjE3Q0ExNUI2Mzc1NUEzQUQKLToxMEEwNjAwMDBGRTJDOTk1MDMzNzlGRTc3QUZCOTUwRjg5MEUxQjkwODYKLToxMEEwNzAwMDBFNzE3Q0RGNDk4RERFNUU0RUMyMTVFOEYwQTUwRjg5QkEKLToxMEEwODAwMDBFOTc3NzcxRjlEQUQwNTU2RUM0RkRENDBFRTFENzY5MTkKLToxMEEwOTAwMDEwRjQ4NDc0ODRGQkU4QkYzQTkzNjk5Qzg2QzlBMUUxRkIKLToxMEEwQTAwMDI4QTdDRTBCQkEzQkZGMTJBN0I3NDMzQTFERjkwMTBFMDIKLToxMEEwQjAwMEVEMUVERERFQTIwQ0Q0OEY0QThEOTdGMEREMDBGOEU2QjAKLToxMEEwQzAwMDc2RjNEQUEzNjg2N0Q1RDczMDM3RjI2QjQzQTdFMDA3OUEKLToxMEEwRDAwMEIwN0IxMUJFMEQ1REQ1Q0JCMUJGNDE2OTMzQzlERjBEN0EKLToxMEEwRTAwMDc2QzlCNDQxNTA2RUE4NjNBNUM4NkZEOUJCMkE1RTQyMzkKLToxMEEwRjAwMEJBNjA1RDdDM0Y5RTVEMDNGNjJDRDI0RDVBQkQ1QjlGREUKLToxMEExMDAwMDhGN0E4RkRCQkRENzhGMkNBM0Y2M0I3MjVEMTRFN0YyRkQKLToxMEExMTAwMDU3MzE4QUYzRUY0MEZCMTlGNTVERDY2ODZFM0ZGQjM2ODkKLToxMEExMjAwMDkyRERDNTVDMDlFNDM3NjUzRTc1MERENjZGRjAyRjYyOTAKLToxMEExMzAwMDk0RDcxMUNEQzcyRjI5QjQwRjY4MDg1ODI5MUY2ODU2MjYKLToxMEExNDAwMDE3Qjc3RjFBQkEzODFGOUY5M0YwOTE0RjQzQ0ZBREU0RjIKLToxMEExNTAwMDhGN0ZDMUM0RkMxMUZFRDAzNzVGOUFDRUY1RUM4QjI2MDEKLToxMEExNjAwMEQyQjM5RjM1N0JEOEM3QjBBMEI3ODVCQzk3NzBBQzZEMTQKLToxMEExNzAwMENCRDcyMUREMzI3NjkzMDlFN0IxNENDQ0EzQ0RDMEY1MjYKLToxMEExODAwMDQ2QjJEMDAzMDVEQkY4M0NENDc0RTE3NzRDRDc4OUE3RkQKLToxMEExOTAwMDUxOUJFN0UyRjA5MzdGRTE5QzE4OEZDODIyNURFODM5N0MKLToxMEExQTAwMDE4QkE3RTc5OTBGOEE0RUUxOURFNUY5QUM5NTM3ODY3RTEKLToxMEExQjAwMDA0QkQ0QUZCMjg5QTFFMEJDNEI4RDlCQjBFMkEyODRDRjIKLToxMEExQzAwMEIyNzdDREQxRjBGOUY1MzUyQ0Q4MDhFQkJDN0U5NzJFQkYKLToxMEExRDAwMDM4NjUxQ0Q5NEQwQjQ5OUVBRjM3QjI1OEY5MkEyM0QyQTYKLToxMEExRTAwMEI5RkQ1Njk1RUEyRDQ0QkY3NkQ1Q0QzNjc3QTQzRkI5NTMKLToxMEExRjAwMDJBQzFBM0IzQTAxRDU3MjRGREQ4REUxMjhDMUI5RDRBOTMKLToxMEEyMDAwMEI3QkIxMTZGRTNEMjVERDIwRUQzRDg1QjAzRjdERkRDQUYKLToxMEEyMTAwMDBFQkNBMUNEM0YwRUY3MUY4MUY1MDlGMzI5QUUwOURBNzcKLToxMEEyMjAwMDhERkNEQzBFNjg4RkZCRjdEREQ3RkU5Q0VGREY1QkI4QTMKLToxMEEyMzAwMEZGMDIwNDA3Qzk5OTU0NkYwOUZBOEY5RDA1REVCNTVDQ0EKLToxMEEyNDAwMDNGRDlEREIxRDZGM0FBOTNBRkU3QzBDREI3MTZFMjNFNTIKLToxMEEyNTAwMEIxNjFBRThERjhFMTgxNTc5NEE1OUNERTQwMTFFMkJFNUMKLToxMEEyNjAwMERBQzdGOTgzMDE3RjNDRTEyMjdBMjQzQkFBQTFDOTFCMEEKLToxMEEyNzAwMDg4NEQ4RjlDNUYxQUMwQUU0MjNCMUJFODcxMERCNzkzQUYKLToxMEEyODAwMDZEOENGMzEzQTc0QkI5QkY0N0I5MTU2OUNGNEEzRThEMDMKLToxMEEyOTAwMEU2N0I0OUJGRkQ3Q0ZGMzVGOUZEQkM4MUYzRTM3OTgwQTYKLToxMEEyQTAwMDAzRDI3QjNGOURCRkNDRTk3Q0VCN0FFMDQ3RjhCRTE1M0IKLToxMEEyQjAwMEY4QjEyNTQyRkU0N0VGN0Y3MDlFQjgxRjkwRjJGNjFFNjAKLToxMEEyQzAwMEE3Nzc1MTNBQ0FBMURENkY2REM2NTBBQjk0OEYwRDJGQTEKLToxMEEyRDAwMDZGMTk3RTM5QkJDQjhDOTVBMTVGMzNGMDZCMjRGRDYwODkKLToxMEEyRTAwMDhDRDY1RTQ0NEYzRkVBMDlFQkJBRDhGRThGQkJEMjZERTUKLToxMEEyRjAwMERGQ0QzRjNGMzAyRkU1QUVGNEQyODE3OTI5RTlBODczNTUKLToxMEEzMDAwMDEwNkZCQkFEMDFCNDhGQTUxRjI5N0EzRTRCMDQ5RjQ5NDYKLToxMEEzMTAwMDdDQ0FGRDAzQzYyMUIwRkVGRDgyRUYzNzg5N0E4Rjg4QTMKLToxMEEzMjAwMDY3QzRCRTg0RjhDMUE1RjM3RDQ4NzlGNjcxRjQ5MTZDRDkKLToxMEEzMzAwMEY3N0RGOUI1RTQzODUyMkY0NkQzOEQ4Q0EzRTA3QUFBODUKLToxMEEzNDAwMEM3QzRBRkQ3QjY1RkVDQ0ZBMkU4RjgyOUMxNUYwQjgwRDYKLToxMEEzNTAwMDM3NzBERTZEODZFMDE3QzQ4Rjc3RDgxOUU1MTNGODk5NEEKLToxMEEzNjAwMDI3MTVFMzcxQUY4REUwN0MzNEIyNkYzOEI2Qjc2NkZBNkIKLToxMEEzNzAwMEJFNDRCQTkyN0U1RDdDOEY3MUFBNUExMUJGQUNERDZCNzAKLToxMEEzODAwMDA4NDQ5RTdGQjkzNzgzRDEzOEJENzZCMzVGMEZGQzkxMDcKLToxMEEzOTAwMDlCRTlEQjg3RURGRDE1Q0MxRDQ0M0RGMzhGMTY4QTJCMjEKLToxMEEzQTAwMDgxODE1QjhBRjJBNjkxODUxMjExQ0VFRjI1RkI1RTIwOUEKLToxMEEzQjAwMEZBRDVGNzBDNDdCRkUzMzkyNTM0MEVERjlGMTBGRURBREMKLToxMEEzQzAwMDEzQzI1RkZCN0VENzdCQ0ZCRTAyQUQxN0JGNzI2RUYxQUIKLToxMEEzRDAwMDhGOTFDRTVFQjRFNDIxN0Q5Q0IwRjRFN0JGMjVBMURENzIKLToxMEEzRTAwMDdEODFCOTkyMkU3NzBFNjk5MTU5RUY1NTIzRkM2NzI3MkQKLToxMEEzRjAwMEVDQjFGRDdGNkYwQjNDMzc4QTc4MkI1MzE5RURDM0I3NTcKLToxMEE0MDAwMDY3NzBGOTE5M0VCRkM0RTNBREVGRUJCNEZFMzdGOTFDM0EKLToxMEE0MTAwMDkzQzFFMURGMTlFNzFDNTA2MTA2REZENzc0MEVFMUZDNDAKLToxMEE0MjAwMEQ4RDdBRTUwQkNBRjY2RERGQTNGRUI0MTJFRDRBQ0I1MDkKLToxMEE0MzAwMDA3RTkwOTlGRDE4RUFCNzFGODgzM0EyODlGMzA3MEI5MzQKLToxMEE0NDAwMDA0N0Y3M0NENjU2MUZEMDdGNUQ0NDlDODMzN0UwN0M1MjgKLToxMEE0NTAwMEJGOTYwQUZEQjVBQ0U5Q0RCRkExNUZBMTQ2NjVFNjQ5NEYKLToxMEE0NjAwMDQ1MThDN0YyMUUxRTA0OUYzRUI1MkQ0RjQ0RjFCRkYyQTIKLToxMEE0NzAwMDQ3NzdBNkEzN0VDQTU4RDQyNkYyQzFBNjNBRDBGRTU1ODUKLToxMEE0ODAwMDNDMzdFODJGNTkyRjY3NkZBOTY0MjcxMzFEMDBERTFFODQKLToxMEE0OTAwMENDRjBGNjIyMUYyRjRBRTI3RUMxNDU3NzVBMDNGRTA4MTAKLToxMEE0QTAwMDc5Qjg1N0YwNjEzNEZEN0MxMEU3QkNDRDk3MTkxNTAxRTAKLToxMEE0QjAwMEVDNkY2MUFBRjc2RkQ0RUY5REU3MzQ3MkVEQkMxMkZBMkUKLToxMEE0QzAwMEM1MjM0ODVGNzdEOERENEZGMEVFRjIyMkYzNjNEMjA1NjMKLToxMEE0RDAwMEZDNkIzMTBFMDRBMkIxQjdCMDY3RjhCQTdDQTRFM0JFM0UKLToxMEE0RTAwMEJDREZBMTVGQUJEQkU0RjBCQkYwQkI5MUJFQ0I3NkYxOTAKLToxMEE0RjAwMEUyNDFGMUUzNDAyRTIzRDI0N0MzNDU4NUU4NjE2OUY3ODUKLToxMEE1MDAwMDlCQzc1MUFFMzdBODIxQTI5M0E1NjYxQkUxQjFFMUEyN0EKLToxMEE1MTAwMENBRTlBOUQ1NzAzNjI0REIwM0VFRDdBNDdBRDIzMjYwMUIKLToxMEE1MjAwMDlFRkU3QjI3MjU1MzNDMDlGODg5QzMxNzJBNDU5Q0UzRTcKLToxMEE1MzAwMEY4MzJDMzM3MjgwM0UwRjc5MDM1RjEzNkRDN0Y1RDMwMjEKLToxMEE1NDAwMEJCOTIzMDhGQUREMTA4RjQ3MDM1NzVFNzM1NDdEODQzRUQKLToxMEE1NTAwMDJDQzdBRUE1ODNFRUI3RkU4NkYzNUE2RUY2MTk1MUFGM0YKLToxMEE1NjAwMEFGRjAzNEQxNzlCMTQ1NDlDMTUyQzc5ODQ4QkM0RkQyRjgKLToxMEE1NzAwMDVGMUFGREY1RjE3RTQ5Qzg5N0Y3OEQzQzZGNjQyMDlEMDkKLToxMEE1ODAwMDczM0M2Q0NGMTBGNUIyMzlCRkJDOUZDNzZBOUVDM0U3NUUKLToxMEE1OTAwMDI4Nzg0MkJCRjc4Nzg4NzI5MTI4MEYxN0Y1RDI3OTc5MEUKLToxMEE1QTAwMDlBRTA5N0Y3QzdGMTdBRDFFMzJDMTVFMzdDOTlFMTk5MEEKLToxMEE1QjAwMDhDNzA4Mjc2NDEyM0QyQzc2QjE2M0E2N0M0NEE0MEZFM0MKLToxMEE1QzAwMEExQkM1QjkzNEI3NjJDQzhCOTY5MDg3NzE4Mjc5ODRDQzcKLToxMEE1RDAwMEY1NENBNDY3NTgxM0M4NDFDMDY3NkZBOThCRTBCM0I1QTkKLToxMEE1RTAwMDFDRTgwNUUzNDFBRjlBMjgxRTI0RjEyQkYxMUE4RENGMDgKLToxMEE1RjAwMDg1MTlDQTc3Q0I0RjFGMThCRjVFOTg1MTNBMzA3RUNENzAKLToxMEE2MDAwMEQ4NTBDMjE3RDE0QjhDRjMxRkYxRjBGNTZCM0JDNzAzNDkKLToxMEE2MTAwMEYwRUJGMjBDRDI4M0MxQjE5MTdDQjM0OUMwNTFDQUI1MDEKLToxMEE2MjAwMEY3MTNCNDc4RkQzQzlERTNBMTVFRDRCQjg0NzYxRkRBQkEKLToxMEE2MzAwMEQxRUUzRUUyQkZGNzUzNzhGREI0MDJBRTk3QTQ1REZFQzMKLToxMEE2NDAwMDRGMDIyRTVGQTY2QjlGNTJDRjQ0RkJEMUJGMTRGMkUyQTQKLToxMEE2NTAwMENCNzRFRTQ3MDdCQ0RFOERGMzk1RkEwOUU0NEMzMDE5NTQKLToxMEE2NjAwMEY4NzhEMUVCMjY5MjMzNkM2MzFGRTVENTQwQkRGRjgzQUMKLToxMEE2NzAwMEYwNUE2NEVBQkIzNTE1RjRDQTBGQzFERTMxMTY1MUJCN0UKLToxMEE2ODAwMDRCMjg0NzA2RUNFRkM3NDhCQUIwMzNENERCQUQxOTBFMDAKLToxMEE2OTAwMDZFMUY5NEY0RjFCOEQ3NDhCRUFFQTUwQ0U0ODc3MjY1N0UKLToxMEE2QTAwMEZDNjMwQzIxMEJFNEYwNkIyMkJGNDJDMUJDQUUxNDYyMTAKLToxMEE2QjAwMDY3MTdGNjA3NzBGRjk3OENEMjMwRENBM0M3M0IyMUU4MDEKLToxMEE2QzAwMEUwRDEwQzQ1MjVCQzE1QjI0MkM0REJBREVGN0U2RTVGMTgKLToxMEE2RDAwMDBDNUQ5RTEzRTc2NTkzNERCRTc2RUNFN0VDREQ2RjkxNjQKLToxMEE2RTAwMDlEN0VDMjE4MUNERTY2OEJGMUREMTg3Q0VDMjEyNUZDRkEKLToxMEE2RjAwMEZEQjZBN0Y0N0VFM0Q1OTg3RjdFRjZDMTlCNjFERDRCNjYKLToxMEE3MDAwMDdCRjQ2RTFDNzJFOTNENUZCQzMzMUVFREVDMUUwM0M1OEQKLToxMEE3MTAwMDZCNDBERjZGNTM3MURFNEREQ0FFM0NBMUQzRDJDMTY3MUQKLToxMEE3MjAwMDc3NjlGNzNEQUYwQjdBOTBFNzcyQTVEQzkxRkE3QzE1NUIKLToxMEE3MzAwMDczNzM3OTkzOTBCODFCQ0IxRkRENzEzQjlEQ0I1RENFQkUKLToxMEE3NDAwMEJDODczRDAwRjdEMzZCNjY5MjVEN0MzQkYzNTE1RUNGRDcKLToxMEE3NTAwMEIyNTZFRDM5REIxNTZEREFGMkVEM0IwNzlDQzMyNTM5QjYKLToxMEE3NjAwMEJDMkExMEZENUVGOEE1MkI2M0VCRkJGMzgyMkUzRjMzNzIKLToxMEE3NzAwMDhBRjhGRDdBNTNDQ0Y4RkRFRjg1RkMwOUM3RDlGQkI0MDQKLToxMEE3ODAwMEYxRkI1NzJGMUZCRjZGOEM4QURGODdFRDg4RThGODNERkMKLToxMEE3OTAwMEVGRjcxMzYxNkY2MEJGOTE3MUZDQ0YyQTYyQUZFM0EzNDMKLToxMEE3QTAwMDBDNjlCNzU4MzVGOTE5OUYwQ0IwNUIxMkU5N0JFMzQ1OEEKLToxMEE3QjAwMDRCOUNGOUQ4RThGRDY3MkI2MzhGRDNENzNGOEUzNjVGNkMKLToxMEE3QzAwMDIwREM5RUU3MDlDOEZEQjVBNDkzQzY4QjU5QTQ2NzY1MzQKLToxMEE3RDAwMDU5REFDN0UxNzYzOUY0M0RGQUJDQkFGNDZGNEJCRUY4RUEKLToxMEE3RTAwMDU4NjFFNjJDRjI0NzZEMTc3NkJDOUJGMjMzM0Y0NkJCQUYKLToxMEE3RjAwMDA4Rjk3MkJBRUJCNTEwNEM3MUQ5OEYyNzBFNTc4Nzg0QzAKLToxMEE4MDAwMEY5MjY3QTFENDA1RjY3NDIxMUYyRDg5ODY5NEYyM0ZERkYKLToxMEE4MTAwMEVCNjY2RTNBOTcyN0U4RkVENkJCQUJFODdDQ0ZGRkJENzAKLToxMEE4MjAwMEE3MzIyMzMyNkUyQUY3NTMwRDQ2Njk4RkQ5MzRGQTk2MzAKLToxMEE4MzAwMDQ1RTlFMzY1NUQ2RjkxMUQwNkY2RDc3MDE0M0U3RjdBOUEKLToxMEE4NDAwMEY1NkVEMkMzMkI5OTM3MURFOUJERjdENTExNzQ2RUU1QUUKLToxMEE4NTAwMERCRUE2MTM5OUY5QkZDNEIwQzNDQkYzNThERUM4NzM5QTMKLToxMEE4NjAwMDYyM0UzNzc1NzMzQjUwNjdGNjE4NjgxQzBGNzMzOUQyMTgKLToxMEE4NzAwMDY5OEJDREU3MEI0MjU0ODVGMjc1RkRGMzQ3RTcxRDYzMDUKLToxMEE4ODAwMDkzQzRGQzE1NkMwRkYwQkQ0RTNDRDk1MjVGMjZDRURCNTUKLToxMEE4OTAwMDg0RTNFQTMxMEQyNjkwODlDRjk2ODk2RTE3M0VBNzI4NkEKLToxMEE4QTAwMDVFOTVDRjgzRTM3OTFBNkJDQUMxRkEzQTczNDhDRkQ3NjIKLToxMEE4QjAwMDA5MzM0OEM3RjZGREYwQTJCMjVEOTQzN0NFQkQ3MEVCMDgKLToxMEE4QzAwMDBBN0M2RkIzOTMzQzMxOEE3OTRDQ0YwNEI5ODhGQzZEMTQKLToxMEE4RDAwMDY2NjY1Q0I3QzkxNjNDNERGMTMzRjFGNDU3Qjg4ODhGMDIKLToxMEE4RTAwMEZENDMxOEY5NDExMjU4MDc5RDNGQjVEOUNFRjk3MUIxMTIKLToxMEE4RjAwMDBFRTY1MEIwNkM3MTVDMDhFMjdFRTI5Q0MzRTZDN0YzRTIKLToxMEE5MDAwMEM0MjAyRjY3NjVBMjNGNUZGOUQ1NEFDNDBCQzg2N0VFMjQKLToxMEE5MTAwMDE3OEFGNzVEMERGMkYzMTE0MkRFQTU4OEY5QjUwODc5QzMKLToxMEE5MjAwMDk3QzVEQzhBQjhDNzgwRTREREZERjY5NTM3RTA3RTI2NjIKLToxMEE5MzAwMDhENzlGN0EzQkM3QjM4NzEwNkM1RkQzMjk4OEZFNjkzRkQKLToxMEE5NDAwMDNBNDNENUM4MkRBNzU3NUJDRTk4QUY0NkNCM0IwNUU3MUEKLToxMEE5NTAwMDk3RTVEM0JFMzdCMzEzOTQ5N0E0MDRCRDk5OTc1MjY5NzIKLToxMEE5NjAwMDFGMzYxMkZEMzEwNjIxMzc4RTU5NzgzRUMyNjYzMUNGMkYKLToxMEE5NzAwMDNCMzM1Mzg4NkU4RTU5Nzg1RUMyQjdCNjVCRENEQTdEQTYKLToxMEE5ODAwMDdENDMwQTNGQkY3RjNFREQ2Q0M2RjFDMDhFQjkxM0UxNDcKLToxMEE5OTAwMDA3NzZDQzA3N0UxNkNFREYyQzlDRDI0MTc5MDI5QjZGQzYKLToxMEE5QTAwMDU0REMxQkUwRkQ2NkJCNkJCRDBBQTRFQjlGQTk3MDdGNjYKLToxMEE5QjAwMDhGRUEyOEM3N0M5Q0Y2M0M4NzFCRjM0NDFCNDVCRUY3RjcKLToxMEE5QzAwMDY2OEJBM0Y2MTlGMjYzOUE3ODNERDZCNzE5RTM5NkVEMzQKLToxMEE5RDAwMDVCMUQwRUFDOTc1NkQ5MzdDRDg4RkJBQTE1Q0NCMTlCMjEKLToxMEE5RTAwMEM1QTBGN0FGODA4RjYwQkUzRkM3MzJFMDQ5MTFGNDYzNjYKLToxMEE5RjAwMDNERTJCQTg1RDYyMEJFRUZDMTdGMTdGMEYyOTQzMkRDN0IKLToxMEFBMDAwMEJGRjJCRjgyRUU0MjNBNzdDOTNDN0FEMjk3OERERDg1OUMKLToxMEFBMTAwMDZGRDg2MEJDODJCOTg1RTRBRkY3NTZGMkI4MkYxMzcyRDUKLToxMEFBMjAwMDYwQkMxQzU3RjBEOUI1NjFCQUE3RUY4NUEyM0NCNDVCRjYKLToxMEFBMzAwMEY4N0ZEMzRDM0NBRUVCODAyMUNBQzQ5MTQzQUM5RkM2OTcKLToxMEFBNDAwMEY5QzFDREU0MUZFN0QzNkI1OEY4MEZGQkFCMENGNzRGMDAKLToxMEFBNTAwMDcyNjk2QUY4NzM5OEVGNjBBODIyQjNCQkE1MEVFQThERkQKLToxMEFBNjAwMDU3ODNGQjkxQUZBRjE1Q0Y0MkYxM0M1NDdFMjNFOUU1MEMKLToxMEFBNzAwMDFFOURDRDY1RDQ3MTNFMzcxN0EwQUJDM0FCNDdCODk0Q0MKLToxMEFBODAwMDM5QjZCNDYwM0ZENzI5NDE3QUU2Q0REOERFODJEMzlGNkMKLToxMEFBOTAwMDIzRkM0Q0M5OTlDNjAwOUUzNzZCOTkwMDc4MjZCRkM4MjUKLToxMEFBQTAwMDlGMEZBM0ZGNUFGRjJGQUMxOEYxNzRDQzIwRjU5RTI3RkYKLToxMEFBQjAwMDg5RTdGRkI5NjgzREQ1MEUzRTU5OTdDRTMzN0IyRUMyNEMKLToxMEFBQzAwMEY5MjgzRkNGQzZEMDc0OEJGOEZFOTdBOTU1NDk5N0Q3ODAKLToxMEFBRDAwMEJCM0MwRjMwMjU0QkNGRTVFMzBDMUU4NzZEOUM2RkE2NkEKLToxMEFBRTAwMEJDRTU0NjcxMEYwMzUzN0RGOTNGOENGMEFGQzhCOEM1ODQKLToxMEFBRjAwMEJCMDYzNjdGNUY4Q0ZENDY0QTE2QjcwN0U2RENDMEZEMTUKLToxMEFCMDAwMEMyOEQyMjFGNDc3RTRGQ0NFMjdFQjJCRjY0NEU3QjM3QTAKLToxMEFCMTAwMDkzRUMzRDFFNkZGRDlEOTQ1RjIzRDk0ODk0NUYxMUYyMjUKLToxMEFCMjAwMEU1OEYyNDVGQ0FERjhFMjc3RkI0REY4NUZDOTlFNzI5OTQKLToxMEFCMzAwMDM2RDBCRTQwQzgyMTI5RUZCRDIyRUY2ODAxRjMxODEwQkUKLToxMEFCNDAwMDRGM0RFMjFFOTVBM0U1QUI0ODBFRERDQzdDRjRGRUY3NEQKLToxMEFCNTAwMDE1M0NGRjAwMDhEMzgwRkRERDM0NDM2QjNGQ0RGMzZBMjUKLToxMEFCNjAwMENCMzdDRjhGQjZBRjM4M0VFNEI4MEI3Q0RBRUY3M0E0QTcKLToxMEFCNzAwMDlEM0M0MzZCMjcyRkZBODdBRjkyNDlDRjY3RkNBMkZFMUIKLToxMEFCODAwMEQyRTA3MDNFNTE2MzU0M0U1MTgzQzgyNzZBRUMyQTNDQTAKLToxMEFCOTAwMDk0MTY5MTRGRDREOENERjM4OTFBQkFBRTk0NEZDNEVEMjAKLToxMEFCQTAwMDI5QUYyOUIwMUZFMzI0REU1QUQyOTRFQzBEOTE3RjcyQjUKLToxMEFCQjAwMDEwRjM0RjhBQzI3NDZFQUZCMEYzM0MwQ0U2QTFCQ0EyOTYKLToxMEFCQzAwMDFDODc5NUNFNURCNEVBOEFDODhGREI5QTY4RDdGOEREMUEKLToxMEFCRDAwMEI3QUU3NzU1NjEzREU5QkY5NUY5NDM0ODM3QjFGNkMzNDQKLToxMEFCRTAwMEQ5NTk3QzVGQjM0M0UxN0U3NEZGMDIzM0VEM0I5RDA1OTEKLToxMEFCRjAwMDVFNEQ1Q0MxQTk2N0M3RDFBRkY4NkVBNjRCRDYyNzNGQTMKLToxMEFDMDAwMEM5MEU4MzJGQUIxODlFMDE4NUQxNzk4OUZFRjY3QUI2REQKLToxMEFDMTAwMDkxRkM5MDUxNzJDQTk5RUFBNjM4ODAzMzY5MkNGOUY1RjMKLToxMEFDMjAwMEU3NzUxNzkyM0Y5MkQ5MkNFRTYxNEFCOEZGNzk3M0RCMzIKLToxMEFDMzAwMDU1Q0NFQjY5RUM2RTU3OTdEQkMyNzQzNzM2NEJFQzQzNUYKLToxMEFDNDAwMEFDQ0M4QUY0REFFRkQ3N0JDRTQ0N0VCRDY0OTNCNzMwQzgKLToxMEFDNTAwMDBCREFENzE5ODNFNEJGOEJBMDU3N0ExRjRGNUZERTJFMjQKLToxMEFDNjAwMEU4QzU1MEUxNURCMDAyRTZEN0ZCOEVEMThERkI2QjBBRTMKLToxMEFDNzAwMENDNDFGRkNGQkY5NDRDN0U0OTc1MEUyMzNEQjVCMTlDQUUKLToxMEFDODAwMENCOTM1RUY0OTNDMTNBM0U0REU2RjdGQTZDQUM2NkE0MDIKLToxMEFDOTAwMDVGQ0ZBNzRDMjMzQTVFQzUwMjg3M0RFODQ3REIwNTc0Q0EKLToxMEFDQTAwMDE4NzlDRkQyMUU2REI5OEU3NTkwRkVBOTdCNjYwMDNERDYKLToxMEFDQjAwMDkzN0M5NEYyQjg5RUI5RjQwNjhDMUI3NDZBREJCM0ExNDIKLToxMEFDQzAwMDVBMzk1QzI4RjQ0N0YxQkNBOTJEOThGRjUwQUNFM0YyNDcKLToxMEFDRDAwMDkxMkQ3NzBGOUE0M0ZCRjU0NThFNEYyQzI4NzI3RkExNUIKLToxMEFDRTAwMDVDQ0VBRUVCQjU5RkQyNzNGRUU3N0FBMTU0RjQxRkFERjQKLToxMEFDRjAwMEJGNEE4NTNEMzcxOUU0MTdFRTZGQTU3RDA2RjVBOTdDOUYKLToxMEFEMDAwMDUwRDdBRENGRDQ4NUU3NTkyMkRBNDlCQjUwRUEwQjg5MzkKLToxMEFEMTAwMEFGRjIwOThDRTE3OUI1QkJCMjg0N0MxQUMyODYyMEJFNDEKLToxMEFEMjAwMEExN0ZFMjEzMDUzNzU4MjlENEJGMUZGNzg1RDc4QUYxRDEKLToxMEFEMzAwMDgwMUVGQ0E4QkZGRDNBNzMwMEU5NkJCM0QyNDRGQUQyN0YKLToxMEFENDAwMDhDRjYzRjNDQjcyQTNFRDIwQkZGNUVFM0Q3MjM3RDRDMDcKLToxMEFENTAwMDY0NEQzN0REMDBGNTI2OTk3QkFDMjhCNzgwNEVGRTMxNzcKLToxMEFENjAwMDkyN0U1QTU4MzA2RjlGQTJBMTIzRkE3RTM2RjlFRDk4NTEKLToxMEFENzAwMDc0MjRGNTVBRjBGN0RDOUU5OUM1QkM3NENGOTNFNzBGQTUKLToxMEFEODAwMERDRUUzQUE4RjA3RDI2RDg5RjA3RDFFRTdBNUIzNzkzQTgKLToxMEFEOTAwMEU4NjQyNjJDMDNFQjU1MzlCNEY4OUY5RUE5MkQ0N0RGQjQKLToxMEFEQTAwMDBGQzVEMDVBMjg0Mzc0NDg3ODA2NTQ5QzRGRjRCRDUxQkYKLToxMEFEQjAwMDFFMjlGNzk4NTZFRUU1QjNBRjc4REVGODk2QzMzRjQyMEEKLToxMEFEQzAwMEZGODM3NTFEMUI4OUY2MEU1OEFBQzQ4RkQxRjRCMDI3RDYKLToxMEFERDAwMEVCN0I4RkI3RUNDOThBMTE2RkU5MTU3RUU1NkI1ODY4N0MKLToxMEFERTAwMEU1MzNDQTQwN0EzQjdGNjg5RDNFMzM4MjJFMjU3RkJDODcKLToxMEFERjAwMDZDRTA3OTEzQ0FFQjNDQUUzNUMxQ0NDNjA0MTEyRTI1RUMKLToxMEFFMDAwMERDRkYyOEY5RTMxQUE0RDM5NDMwRkQ5NTg5Rjc4N0E0RDEKLToxMEFFMTAwMDdDMTlDQzA2MjNCRDVERDc2NTA5RUEwMTNGODVBMkJGMzkKLToxMEFFMjAwMDZCOTBGRThBQzJGNjg5REM3N0I0NEMxODQwNjdGOTk4QkIKLToxMEFFMzAwMDE3MEVGNjRDMDFEMjk1QjQ0RjhBOTU4RTE2M0NFN0ZENUQKLToxMEFFNDAwMEZDNEJGN0I2RTA3QzIzRThFQTJEODRDMzU5MDVFODhBNzkKLToxMEFFNTAwMEZDNkEwM0Y0QURGNjdCMTRERDQ5RkM0QjdCQkE5QzM1RjAKLToxMEFFNjAwMEQxN0U2NzZFMDJEN0IzQzFFQURCNDlDRjgyQjgyNEJBN0MKLToxMEFFNzAwMDdCNzMwRUE3QkIyQUU2MjFCQTJCNjc1QTdBQTkzNDZCREIKLToxMEFFODAwMENCRDE3NDA5MjNFQUI0NzRFNzIzQkE4QkE2RDc3ODc0QkMKLToxMEFFOTAwMDM3MThFOTRFRUFEQkQ0MkJEM0RERTc0ODc3REZDNThGREYKLToxMEFFQTAwMDM5OTBFRTNFQ0Y3MkM2QTdCQjY4N0E5M0YyNkM5RkM1MEQKLToxMEFFQjAwMDUxODk3Njc1NjM4RDQyRkFBMUY4OURBMTJENTgxRTUxRDYKLToxMEFFQzAwMDlGNEY3NkY2QkU2NDM3RDlERDhENERGQzdCNDk4RjQ3QTkKLToxMEFFRDAwMDhGNzkzMzA1NkJDNUY3N0M2RjI1OTYxQkQ3QzE3N0U4NTMKLToxMEFFRTAwMEJBRjQxOENGQUIxOTdBMEZGRjVFQjhBMUU5MERCQ0JGNTkKLToxMEFFRjAwMEEwRDFDRkRCQkY3QzdBMzM5RDg3MEE2QzE2RURDQkRCMEMKLToxMEFGMDAwMDJBQjFEQ0Q4Q0FEQjdGOEE3MUFFQUIzMUJGMkREMDgyQ0IKLToxMEFGMTAwMEVGQUZEQTk2RUZFNkRCNkY2RUQ3NEYxMUVCRERBNzNDQjQKLToxMEFGMjAwMEY3MDZCNTZCRTNFRDZFM0Y2QzRFNjBFNDI3RTBGNkZBOTIKLToxMEFGMzAwMDY0QjFDRTI5QkJGODNBRDMzRUJFN0U4NjBCRTg2MzQ1QUEKLToxMEFGNDAwMDlGOUZFQ0I5NEY3NDc1NjUyNEVGRTJFQ0IzQ0I5NUI2RDcKLToxMEFGNTAwMDFDN0M0RTQ3MzlBNjQ3QkNCQjVCRjU0Mzc4MUM3NDM3NTUKLToxMEFGNjAwMDBDNzE3NTM2RjdEM0M4RjgyMUU2Mjk1NDQ3RDgxNzU3MUUKLToxMEFGNzAwMDY3NzMzQjQ0RDY0QjRGNjE3NDdFOERGRENDNEVGRTcyQTEKLToxMEFGODAwMDE5REYwQzNFQzQxNEQ0MDdCODQ2NjE5N0M0OEM3NzRFQzEKLToxMEFGOTAwMDJGNjgyMkJCNjJGQTYwMTlFNzBDQTk0QjYxRENDMjRCMzcKLToxMEFGQTAwMDlGNEY4QkU1NDcyQUNCRTZGNkYzMjk5MTc3MjFERkQ3MzAKLToxMEFGQjAwMDA0RjI3NTQ4MTdGQjkwNDhFOEZDRjA5MDc3RDA5RURCRDAKLToxMEFGQzAwMDk3Q0MzNEU3RENGNkU1RjNGMkQ0RUNCQzdGNkVDRDAxMzAKLToxMEFGRDAwMEY4RUE5QTU0QkNGNzhCRTUyOTk0QjdGMjgzMUUxNjRDMTUKLToxMEFGRTAwMDRBMUMzOEZGRTkyQTBCMUEyOTBGOEFDRjdGNjU4QjUxM0IKLToxMEFGRjAwMERDNTdDMkU1REEzQzgxM0YzNjY5MThEMUVGNUM4MUE3QTYKLToxMEIwMDAwMEVBNkNBMTE3OEI1OTMxQ0FBOTc5MDI2RjNGMzQzNzE5RkQKLToxMEIwMTAwMEI4QkU2RTMzNDRDOThGNzlEOTI4M0YxRThFNkJDRjZCNzMKLToxMEIwMjAwMEJGNDdDOTk3MUEzMUVFNEE2MUM3QUY2MjdERTQzRkZENjEKLToxMEIwMzAwMDQ0RDhGMUE3MUVFNjc2RkM2QUQ2NDFGRUQzREU5RjcxQTYKLToxMEIwNDAwMDNCQkUxRTk2ODdGNDEyRUQwN0FERERBQjJERDc3NzY4QkEKLToxMEIwNTAwMENCMERBMERFQjFGRkM2QUUyOEI5MzM4NkZCQTU3QjFGQTIKLToxMEIwNjAwMEFFMkY0MzNGNjRDRENFNzdDOEZGNUQyM0U1NEM0MDJCMjgKLToxMEIwNzAwMDY3QzA0MEU3NzJFNkExNTFFNEJGRkFENkYyRTMxOUQ4RkYKLToxMEIwODAwMEQ1OTU2OUYyNEJFRkM5NzY0NkY4Nzc1RUU0NzkyRTBERDcKLToxMEIwOTAwMDhDRkIxMTdBRUQyMzZGQzE3RDJDOEJEMjRGRDE3MkE1MjEKLToxMEIwQTAwMDUwQzgxNUU5RkY5MEYyNUJDQTlCNDJDNkY1MTRFQzc3RDUKLToxMEIwQjAwMERGRjE2MDlCMjgzQkVGRTE2Q0ExQUZDNEZFNERGQTREODAKLToxMEIwQzAwMEE0N0Q1NDg4RjYxMUQyRDdBODI2MjJCQUIwN0U3MkJGQ0EKLToxMEIwRDAwMDZERDI0N0U4QTUwNTI1NjZDNDdCOTExOUY4MUJFMUE2NEEKLToxMEIwRTAwMEI3OERGNUQ5MzRGNEYxNjhGNkU1Rjc4M0RBRUY1MUY0NkEKLToxMEIwRjAwMDIzRjc2MzBCMDVGRERDODQ5MTE4MThGRjBGNzIxRkI4NEUKLToxMEIxMDAwMDhBRDNDRjVDRTYzRDg0RjRGM0ZCRDU5QzdFRTRCRUYwQUQKLToxMEIxMTAwMDlCRUYwMzNERkFDODdEQTBEQzRGN0VEREZENjAzRkREODcKLToxMEIxMjAwMDU4QzAzRTg2RTdCMTVDRTkxN0UwRjFGRDQ2ODVEMzQ1OUUKLToxMEIxMzAwMEZEOUNERjNENTZDNUMyRjJFMjY4MzM3M0FCODY3MEI5NDEKLToxMEIxNDAwMDY1QTZDOThDN0U5NzE2MDNERjJGQ0Q5OUY1N0VEOUQyREYKLToxMEIxNTAwMDA4RjkxM0I0OTcxRjQwQjhCMTZFMjdGOTc3RUJBRERBNTEKLToxMEIxNjAwMDcxMzYyQjNENzdGRDExRjc1NThGNUFDOUFGNzRFMTA4NDEKLToxMEIxNzAwMDIzOTNFNUMyQUUxMTk0MEZGRTk5ODFDNzVCRTU3QzZFMDcKLToxMEIxODAwMDNGQkNGN0I1MTBENDVCQjlFRTk2NjJDQzJGQTg1NTAyNDAKLToxMEIxOTAwMDJGRDZDMUI3MEZBQ0JFNzc5MUJGNkI3NTQxNzEyRjY3Q0EKLToxMEIxQTAwMDBGQzUyN0U0QjhGMUZEQkE3RTkyQzdDNjAzNUMzRkY3MkUKLToxMEIxQjAwMDI5MDk5NERGMEJFRjg3NDdDNkU5RkUzODg4Q0JFRkRDMUYKLToxMEIxQzAwMDRDREYwN0I4MUVBOTQ3NUJGQUYzMjdGODEzQjQzMDFCMEUKLToxMEIxRDAwMDk0MTJDRUE3MDhFNzRENzA3RkNCNUY5OEU3OEE3OTEzNkEKLToxMEIxRTAwMDFCMjNFMjA0RDAzRTY2QkVEQjc5MjFDRjQ3NjE3MjAxQUEKLToxMEIxRjAwMENDNjc2NUJBQTcxN0Q3N0Y0QUM0ODU0Rjg5MzhFMkE5QkIKLToxMEIyMDAwMDQ0MUU1N0ZDN0I3RjdERkVCNDBERTI3QUU4OTQ4ODNCQjgKLToxMEIyMTAwMDlFNEFEMUM2OUI2NEJENDRGMTNDRDk2Q0Y2NkUzNDYwNDUKLToxMEIyMjAwMEJDOUU3OTM3ODJGRTcwM0Q2NDZBQTI3Qzk1NDUxQzVGQTYKLToxMEIyMzAwMEJEMkYyNTZCRUUxMUM4MUE1NDNFNkExMEI0RkI5OUQzOEEKLToxMEIyNDAwMEFCMUYwNEUzMkM2RkQzOUU4M0VBMTVGN0RCRjYwQUJBMzMKLToxMEIyNTAwMEU5QjVGMEE3MUMzNzZCNTBGNTI4NkNEN0JCODBERkIzN0UKLToxMEIyNjAwMERBNUY5RTI4Q0I1RUVBQkZGN0JBMTBDOUEzRkVGMjhGNjEKLToxMEIyNzAwMDQyRTI5QzNBRjc5M0M4Rjg0MEJDRjg2MTc0QkMzMEZBREIKLToxMEIyODAwMDlDNjk3NEJDN0ZCMUU0MzcxMUVGNUYyNEU0RDRFMjZFQjMKLToxMEIyOTAwMDFFNkZCOEQ1Q0MzNjBGODJFRkI3NzU2NzUwRkNCODI2NTUKLToxMEIyQTAwMEQxM0Y1QzEzRUZGNzVCQkY1MTlFODdBNENGREVEQzlFREUKLToxMEIyQjAwMEZFRjhGOENGMjJFMkUzRjUyMjNFNUEyRkQ3RDdBOTVENTgKLToxMEIyQzAwMERGNjQwMUNGRUYzMTNFM0U3OTkwNzM2MDdDM0MzQTlGNjIKLToxMEIyRDAwMEUyNDVCNDMzMEM2MTNDQUM3MTcwQjg1NUU5RUIyQUQxNEUKLToxMEIyRTAwMDRGN0M2MTM5QTMzQ0Y3MzU2RjJENkI0MTNGRjI5QTJEQUUKLToxMEIyRjAwMEUyOTY1NTYxNzdENzBCMzhDNzVCOTdEM0FCNjMyRThEM0EKLToxMEIzMDAwMEJGM0U4MUI5MjJENjkzRTU0QkQxOTRDOTkyOEZDODMzMDEKLToxMEIzMTAwMDFENTQ5M0FENjk5RkRCMzQ0NDUzN0ZGMEJBNTE5QUVGQ0IKLToxMEIzMjAwMEY5RkUyMjREQjlBMEY1MUE0REZENjE2RDE1OUFGMjg4MEUKLToxMEIzMzAwMDlERDc2QkVBMTdCMjIxNDlFNDZGM0JBMjQ3NUYxMkJCNkUKLToxMEIzNDAwMDJBMzA0N0YzN0RGNERFODU5QUY2OUZCMkE2MUQ5M0EwQkUKLToxMEIzNTAwMDVFQTc0NTdCMkYzM0YzN0I3QUM2OTQ4NUYzQTlDNzc2MjYKLToxMEIzNjAwMDJDRDVGNEMzODI0QTUwMjkwQkRGMzNGNjk5QjhBNzc5NUMKLToxMEIzNzAwMDc5MEY4Rjg3NUNEREI1NUEzMzRFQURCRThFRjAxODFENDgKLToxMEIzODAwMEVGMkQ2MjdERTQzNzZFMDgyOEVFMjAxQjE4RkY1REQ1OTcKLToxMEIzOTAwMEQ1NEVFREFFNjRGN0M4NzhDOEM2NDEyMkRFOTdDREIyNkYKLToxMEIzQTAwMDM5NUQ0N0QzODU4REVDQzMwQkJCRjRFNDdGMkM2NEMzQkMKLToxMEIzQjAwMDFGOUE0NEYwMzJCMDgwNkIyMEZFMkUzMEVFMTdCQkYwQTcKLToxMEIzQzAwMDhDREQ4RDc5NDVCN0JGQjU4Q0U2NjNDQUQ0RDIwNURFNzYKLToxMEIzRDAwMDFGMThCOTVFRUI0ODJENUREOERENUEzQTQ4OUFBMEE1RjIKLToxMEIzRTAwMDgzNjg3ODI3N0JCNDc0QzE0MkYwQkZDQkMwM0I3NTg2QkQKLToxMEIzRjAwMDk2NkVGRUI3RTBEQzgxRjBCNTg2RTE1QjdDRDBEMzYyNkYKLToxMEI0MDAwMDIzQjhGMUJDMzU2OTlGOTk4NDNEMTQxREQ3OTA3NjRFQzEKLToxMEI0MTAwMDcwOTBCMEJCNDUzRjMyMkVCMTU5RjE5MzVERDUxRjc3ODcKLToxMEI0MjAwMDlDMTBDQzBCRTZBMzNERDVDNEI4NUZDOTdCMTBFNTZGN0IKLToxMEI0MzAwMDBDQkYyNEJEOEZFNzk3OTQ3MDlEOUJDMEY1NjcyREYzREIKLToxMEI0NDAwMDkyRkMzRTY2RTFGRUE0OTNENUFCQzg5RkI0OTIzNTkxQzEKLToxMEI0NTAwMERERkREOTlDRTlDMkVGRThBNzdBNTdDQTUzMTg5MDlGM0YKLToxMEI0NjAwMDAwRjYyOThCRjBEN0FFMDY4QjFBRUYxRjhBODZBN0QyN0IKLToxMEI0NzAwMEFEMDRFRDc4NkU5ODc1NEI3REUwQTNGQzE1MEZERUVEMDUKLToxMEI0ODAwMEE5ODlGRjY4RUQ1RkU2NTEyMkU1OTdCNDg3RTU3ODEyNTgKLToxMEI0OTAwMDlFNTJBRUM5NzE0Q0FDNDk5Rjg5N0MxMTI1RTdEOEM4MzIKLToxMEI0QTAwMEU4Rjg5M0Q2OUYyM0ZENDEzMjhFMjNFMzRDRDFGRTlCRDcKLToxMEI0QjAwMDA4QkJCODU1OEY3MUQyQzFGOTJENzhDRUI3RDhFMTIxMkMKLToxMEI0QzAwMDNGNjEyOUVCQjkwNURGNEYzMDc3QjRBODJFRTFCRkI4NTMKLToxMEI0RDAwMDhBRjVGQjJGRTJFQUFCMkJDNEI1NkZGMjJCQTE0N0YyNDIKLToxMEI0RTAwMDA3QzZCMzY1N0MxQzk2RkZGMTFGQTFGMTI0QzU5NThCOUYKLToxMEI0RjAwMEYzOThGM0YyMDgyN0QyRDM0MEJGQTZGQkY4MkJEMDhGRTYKLToxMEI1MDAwMDVFRDc5NzhBRjVBQTMwMzEzRDIyREVGREE2MTJBMkY1NUMKLToxMEI1MTAwMEZDOTA3OTM2NDU5RURCNkY2MDFERDM2RTIxN0YzMkU4NEIKLToxMEI1MjAwMDQ5QkMyN0E3OTNGQkJCNTg1N0I0M0RBQzkyQkY1OTA3MDIKLToxMEI1MzAwMDJCNDFCQUFGNjUxMTcxREVGQ0YwNzcyQUVCMDc5NjY1RjcKLToxMEI1NDAwMDFFRDI5NUVDODlBN0YxODI3MkNBQTNFMEY5NTM0Q0M4QzgKLToxMEI1NTAwMDQxQjlGRjhDQjdDRjkzRjkxOEYyN0U0Rjk5Nzc1NDk0ODUKLToxMEI1NjAwMDIzRjg3NTFDMUI4N0ZEMDNCRjk1RTU5NEEyN0YwMUY4QTYKLToxMEI1NzAwMDUzODlFNEM3RkUzQzI1RkEzRTgwMUZBM0Q2MkZGMzMxNDIKLToxMEI1ODAwMEY0RjYxMkYyMUIyRDhCNUNFRkQ3ODA4N0I0NUI3RTlDQTgKLToxMEI1OTAwMEMzRThFOUM4NzFEMUIzM0VFMUM0NkYzREY4QjlBNDQ3MkYKLToxMEI1QTAwMDkzM0ZEQTY4ODQwRDBERkExMzVFMTQ3OTgxMUQ1QUJCM0UKLToxMEI1QjAwMEZEOTYxQzlEODAxQkRGRjc1QzA5NUVGMUYxMjFGMkY4MUUKLToxMEI1QzAwMDA0M0VCRUFFMUQyNkYzRjgyNDFDOTcwQzg0RkIwQTBEMjYKLToxMEI1RDAwMDVDRkJGNzhGRkQ3MDVGMTEwQkVFMTIyRUU3NEE3QjdFNEUKLToxMEI1RTAwMDgxRjhEMkRCOEZBNTIzQkMxN0E2N0E1NzYzRkREQ0UzNzUKLToxMEI1RjAwMEExNEYxNDVENzg1RTU1RkFCMzk0ODc3QkExNEI0RkU3NUEKLToxMEI2MDAwMEZGMUFBRUUzNzJCMEUxMjUzRDg5ODZGM0REMjY4QUIzRTkKLToxMEI2MTAwMEQ2NzRCRDQxNzZFMUQ5NjYxMEI0MDZGQ0JEMEMxODcyMzMKLToxMEI2MjAwMEQ4NjVGQzA4NTFGMDhFQjc0RjkyRUJEOTkwMjNGNkU1MjAKLToxMEI2MzAwMDYyRkQzMkVGMDdENkI5MzkyNzY2NUU0NzNGMUNCNERGOUIKLToxMEI2NDAwMDA1MUNBQUY0NjM5MkYwMUM1OTdGQkU5MkRBOTcxNzc5MTEKLToxMEI2NTAwMDVGNUZGNDNBMkE3Mjc4RkVEQjI5QjNGNzNFRUNFRkMzNjIKLToxMEI2NjAwMDlFOUMxREQ4NUY5NUJFRkI3MDM2QzI2N0FENDJFN0JCOUUKLToxMEI2NzAwMEE2OThGODc5REMyQzcxNUU2RjQyQThDOThERTc5OTMzRTIKLToxMEI2ODAwMDczRjg3RDY2MjM3RUE0Rjc2MjFDRjlGREI1NzdBNkUwMEEKLToxMEI2OTAwMDM5MzREOUZGMDg0NTQ3RTc0NzE5N0JFRTgzN0YyQ0MxMzIKLToxMEI2QTAwMEY4RTYyMjM3REU2RkJGRDgyNEVFMkZCQUNCMUEyQzAwNzMKLToxMEI2QjAwMDM5RjJCQTkxREY0NzY1MThEMjQ0RTc2NkZBOTJGNUU0QTkKLToxMEI2QzAwMEQ3NENEM0IzQTk0ODc3NzJERUYyQkNBRDdDOEZGNzAxQkIKLToxMEI2RDAwMDYwNUVCMTdDM0ZBNUE1QUY3ODBERkE3QjA0M0RDODc1Q0YKLToxMEI2RTAwMDRGQTlFQzJCNkVCMjg1RTEyRkYzM0NBM0UxNTMyNUY4NzMKLToxMEI2RjAwMDQzRUU0MzFCRjA1RTVCRDBCRkU3Q0RCQzFDN0RBRjZENUUKLToxMEI3MDAwMEZGRkU3NDU4RkYzRDM2RjZDOEI4N0U4M0M1OTMzNDFFREQKLToxMEI3MTAwMEY5NTFEQzZCRkIxNzg3Mjc4OURGNzdBNEJEQTdGNkJDM0YKLToxMEI3MjAwMEM4Qjc5N0JGNTMxMkVGREU5QkZGQ0M1MUJFOTc3QjgyMDkKLToxMEI3MzAwMEUyRTU4NUNCQkNGRjc4NzA2OTQ4NTY5OTdBMzU5RDczRjAKLToxMEI3NDAwMEY3NUVBRURFMkJGRkFEOEZCOURGQkUyOEJFRjdERkQzQ0QKLToxMEI3NTAwMEY5NkFFQ0JDQzU1RUIxQ0U3MDdFNjE4OENFMjlGN0U3OTAKLToxMEI3NjAwMDJEQkU1NDdFRDk3QjQ3MUFGMDNFRDIwODM4QzhCQ0Y2QUQKLToxMEI3NzAwMDA2QkM4RkI0Mzg0NkJGRDA5RkNCNzZFNTdCODdBQUM0ODIKLToxMEI3ODAwMEJDMUEzMDhGMzAzNUYyM0RBN0I3RjAzODY5MjIyRjMwMjAKLToxMEI3OTAwMDk0ODg3Q0ZCQ0IyRTNEOURFM0ZGRTUxMUREOENERDMxRjQKLToxMEI3QTAwMEU2OUQ5QkNCRTEzMkNBQTkxMjFGOEQwRUYyRkJCNUUzRDkKLToxMEI3QjAwMEQ1OTNFNzc5RTRCOUQ4RThGOTc1NTY4NDZFQzVGOTYzOEQKLToxMEI3QzAwMDlFNzJBQ0YxMUNCOTdDM0YyQkU3REQ5OUMyRjFEMUYwNDAKLToxMEI3RDAwMDlBODlERjlCQUFGMjdDRjJDRTk0RDA0QUUyMTM4NzE2QjQKLToxMEI3RTAwMENGQzMwNDFFM0JBRjBGRTVEMUI5QjI5OURDRUYxMDhGODgKLToxMEI3RjAwMDFFMjZBN0ZBQ0E1MUJFQzg3QkVFQ0FENDI2QzUxMUMxRkYKLToxMEI4MDAwMDhGNTdBMjg3MzBEQ0Y1MUFCQzBFODRCQjkxQkVDQjdFNkQKLToxMEI4MTAwMDRGMUYxNTdDQ0IzQzM2RENDRjJEMTFGQTZFQzk5RTVBREEKLToxMEI4MjAwMEIyODdFNTdFRTlGNDRFM0RFNTZGOUM2NjNDQUU3MkJBQTgKLToxMEI4MzAwMDREQTFGREQwNTIxRjYzRUI0MDJFQUQ3Q0EyNzgzM0FBMDAKLToxMEI4NDAwMEFFMjU5OUIwOTYxNEZFMUU3RjFGNjZFOUM2QThGOEJBMDkKLToxMEI4NTAwMEQ4NUY0OUJEMkFDNzVGQkU0RDZCMTdEN0IwNkQ3RjQ2MTUKLToxMEI4NjAwMEZCRTlGNDUxMkUzRjU2QjAyNkQyM0YyQjFGRDBGNjU3OUUKLToxMEI4NzAwMEIzNjdENkE3MzhDRkU4QkM4MDExQzI4RjM3MkQ1N0VDRkQKLToxMEI4ODAwMDU3Q0E1ODE5RUE4RjM1NEY3QzZFQzQ5RjYwODlDNzE3MTUKLToxMEI4OTAwMEY4RkI0RjQzODdGMURGN0RDMjI3RkU4RTA4M0U2RkM5NUMKLToxMEI4QTAwMEY1RkMyMDE3RkQzRUVGRjJGOUFFQ0VGNUNEQzk0NTdGOTAKLToxMEI4QjAwMEM5QkI3QzdFMTdFQTJFNzAzREIzMkI4REY0NUI4QkZERUMKLToxMEI4QzAwMDJFOTJGRkZBQzE1Q0ZFREY4QkY3MzUwMDlDNEMyNjcxOEYKLToxMEI4RDAwMDZGQkFBRTQ5OUY0OEY2NEQ4MEU4RUM0M0U3MUQ3MzdFOTIKLToxMEI4RTAwMDQwNjU3NzI2RjI0M0RBRDNEMzY3NjBCRkNFQTdBRDFFOUIKLToxMEI4RjAwMDVDREZENjcyNEYyMUZBMkZCNjU2RjNGM0ExNjYxMzhGOTEKLToxMEI5MDAwMERGMDc3RTM5RjEwMDg2NTM4Njc2NkNBRjQwMTc5REEzMjIKLToxMEI5MTAwMDdCN0YxMEZENDJBREJBM0YxRkM2QkM5OEQ2QzkzQzVGQzUKLToxMEI5MjAwMDMyNUQxN0RBM0YyODYyM0NBNzM1OTA4OUYxN0RFNzY4RTAKLToxMEI5MzAwMDdFNkY0RTlBQkVCQzkwQ0I3RjZFMjczNjA4NUM1Q0U4NkIKLToxMEI5NDAwMDJBMjA3RjYyQUY0MUZBMTczQjJDNzQyRUFCOEVGRjJFNUMKLToxMEI5NTAwMEM2MjhDNkYxMkZGM0VBNzAwRTkxNzZGMUQ5NjZBNkY5RTIKLToxMEI5NjAwMDlEODY1MTFENEFEMDkwNDhGN0E4NTAzQ0E4NkU0MzMwQTAKLToxMEI5NzAwMEZEMTZENDY3NEZBOTE0NEY5M0YzNEI3QjNEQUIwMkUzMDUKLToxMEI5ODAwMDY2NTI4RkREQTIzOEI4QkY0REQ4RkQwQjk4RkNFMzcxMkQKLToxMEI5OTAwMEI3Rjk4MjlFMTYwODdCRkYxNjJCODdGNzUyRTZDRUMzQjcKLToxMEI5QTAwMDc2MEJDRDJDNTEwN0FDNzY0QjY1NDcyOUFEQjNENjkwQkQKLToxMEI5QjAwMDhDNzY4NThDMUZDNUI3NDc2MkZCQzkxQTdFNjFFN0U3QTUKLToxMEI5QzAwMDlFOTVCRUUxRDhDOTE5RjQ0MTVEODYzRkRCODUzQzY5OEYKLToxMEI5RDAwMDE4Q0VDRkZGQjFBMUNDODNGMUNBODZENzQ2RDBFRjMwQzUKLToxMEI5RTAwMDk5MTI3ODNDMUNFNDk2MTlFRjExM0E4NEZBMUVENkJERTAKLToxMEI5RjAwMEVBMTU4QkM4NUIwQTg4NzNDREZDREVEOEM2MzkzOTQ1OTkKLToxMEJBMDAwMDc0MUVGMTc4MUZEREZGNzFERTEwQ0EyM0ZFMDY3OTg0RjMKLToxMEJBMTAwMDM3QTZCRTkyRkJCQjFGRTBCREVCMEREOTYwRDc0MUY5NDUKLToxMEJBMjAwMDc0RUU5Rjc4Nzk0ODY4MjVERTFCOTk5Mjc3ODk5NzQ3NEQKLToxMEJBMzAwMDg1M0VDMTcyNEU1RUMyNkMyQTE3ODU1NkVBQTEzQzNFMTUKLToxMEJBNDAwMDJGOTM5NzcxMDMwQTA0MzYzNTZGRjA2QzNGREEyREM5RDYKLToxMEJBNTAwMEMyMkU3MDg3RThCQzc3QzNDQjIzNzQ5MUZFNTg3NzFFNDMKLToxMEJBNjAwMDk3Njc2Nzg0M0ZGOTRDM0VCQjZEMEVDMjdCNjRFQ0ZBNkUKLToxMEJBNzAwMDY5NzlEMkRFNkVBM0Y1QzlGNUNBRjYyQzMzNzZCQkZGMjEKLToxMEJBODAwMDEwNzI3RTk1MzhBNzNEQzVDQTVBMkQzQ0ZFRTc0RjA0N0IKLToxMEJBOTAwMDNDMUNFQzFFNDFGMUNCN0ZDRDRERTFGRDNCNDI3NDRGOTAKLToxMEJBQTAwMDhGRUMyN0ZBNzcxQ0U0QjhBQjE1RkU3QjU5RTdBM0YyQkQKLToxMEJBQjAwMEJDN0U5N0NCRTUyQjhDQjM5MUM2MTlFQUUxRTc5QkU3RjcKLToxMEJBQzAwMEU0MTQyMkZFMDA2RkFBQzA5QkNBRjdDOUVEN0M3RUQwQTkKLToxMEJBRDAwMDJGRkVGRTEzRTg4NzYyRjRGQjFGRkMwQUVBRTc4N0U3MDQKLToxMEJBRTAwMDFENEQyNzI3QzUzOEFCNUE3OERDQjYyRkI5ODBFODY5RDkKLToxMEJBRjAwMDhBNTVEQ0Y3NTJBMjVEQzdGODNDNkU5RkJBRjM5MkM1MzcKLToxMEJCMDAwMDc5MUQwOUFGMEM4NUM2NjkxMTcwQ0MwOTBEOUYzM0Y2RkMKLToxMEJCMTAwMDlCQUZGQkFGRkY0QkVCOEVDMDk3MDdFRjZEMzlEOEM1REUKLToxMEJCMjAwMEVGMzcxRTlGQzdGMTg1RjQ5QzQyNzZFMDc2NEQ3RjY3MjQKLToxMEJCMzAwMEQ2NDdCNTlGQzAyODVGQUUyMUE1ODBEQURGMkJFRTZGMTgKLToxMEJCNDAwMDk1RjdEOTYxQkJGQzcxRENCRTQ1QkI1N0RFQTdDMUZDRDQKLToxMEJCNTAwMDkzNTk2NDFDQjJGRkRFOEMwRTcxQkY3MEZGM0E2RjI4RTAKLToxMEJCNjAwMDExRUI3NDg4NzUzQTIyRUYzM0VDRTdDRjYzN0Q3OTczN0MKLToxMEJCNzAwMEVEMDNFOUI4MUZGRUZERkQ4RDI5MTJGRDY5RjgzQzU2NjUKLToxMEJCODAwMDdGQzhEN0YxRjA3MjU1MUU5NzI3REYxQjVFRTQzQ0EzRjgKLToxMEJCOTAwMEUwRDkwRkU3QThGOTQ5NzgyMjdGNTNCQjMxNUFCQTk0MEMKLToxMEJCQTAwMEYzQ0MxMUY0Mzk4MEJGRjNCRkU1NzhFMjdFRDlGQUJCNUMKLToxMEJCQjAwMDc5QkUzODczNjlFOUJBQkUzMzVGODdGOTA5QjJERDA3MjgKLToxMEJCQzAwMDc4QzBBMDM0RUMyN0JDMjE0RkVDMjc3MzU4NEU5Q0JDQTYKLToxMEJCRDAwMDQ3NkY5RTMzQTY3RjkxREU0N0VGMjc3QjkzRTVFRkQ5MzIKLToxMEJCRTAwMDY5RkQxQUJENEVGRTdCMzlGRTczRkM3RTgzNkJBM0ZDQTAKLToxMEJCRjAwMDNDMTg4RjdBQ0UxNjZFMTdENjJGREFGMjYzMDI3RTAzQzgKLToxMEJDMDAwMEZENTQ3RDc5MzhCRjEyNTNDNUYzRjgzQjVCQUJGMzRBNjMKLToxMEJDMTAwMDY3QUI2MDc3OTQyNDU1REM5OTBGRTVBNkM3QzY5M0ZDMDMKLToxMEJDMjAwMDJFMTk1NEYxNzkzRUM4RjMzNThGNERFMERGNDc1NzdDMkMKLToxMEJDMzAwMDNFMDRDQjc5MTM3OTc5OEFFNzc5OTRGNzYwQjRDQzlFODYKLToxMEJDNDAwMDlBMTVCNjJCRUVDQzczRDFCOEZBNEExRERENkI2NzQyNUMKLToxMEJDNTAwMDIzMDZENjYzN0FERDQ0Rjk4MDEyQUVGMTlFMjUyNjVENzcKLToxMEJDNjAwMDUzQUNGM0JGRjdGNEQzMDM4RkJGNENDMDdGQkFEMDFGRTAKLToxMEJDNzAwMDI4RkMwNTIxNTVFMzJGRTg0REU0RTdDRjdCNUZGRDkyREIKLToxMEJDODAwMENFRDdEQzlCRTc1QjlGMDdFRDFCQUQ2NzZGQ0Q4N0YyREYKLToxMEJDOTAwMDA2RUIwNzE0RUY1MzNDNjA4N0EwMUZDNkU1NjA4QjYwN0UKLToxMEJDQTAwMEJFQ0FEOUFENUVCNDlGRDg2QUI3NTkyNUI4MEFGRjE4ODUKLToxMEJDQjAwMERFQTkwN0YwN0JFNUI1QTc3RTNDODgwRkUzQzU3OTRDOEMKLToxMEJDQzAwMDE0NzJBMEYxQjVCRkZEMTVFM0M0OEQ2NzZDNkUzNDFCMTMKLToxMEJDRDAwMDI3NzYzRjdDMjdEQTVGMTNCQkRGRkUxQkQ3QzNGQzNDMTQKLToxMEJDRTAwMDkwOUNGNzQ0RjQ3RkMyRkIwOTVEMjY5QUZGQzRFRUFCM0IKLToxMEJDRjAwMDU2NjBGRDZCREZFQjJFNDAzQUI5RUU0NEIwMDVDNTQyMEQKLToxMEJEMDAwMEVGQUJGRjNFNDg3MzBFODg3RDdBRDk3Q0QxQjhGMTM5MEMKLToxMEJEMTAwMDA5OEYzRjAxQTA5MzA4MUUzRkU3RjBGODhBRjJEOUNFQzEKLToxMEJEMjAwMDNCOEY2RTBFOTE5MzU0N0JERTBBRUM3ODhBM0I1RjYwMEEKLToxMEJEMzAwMDA5NkU4QzdCQzg3M0ZERDE3RUQ1RTNENUIwM0U3ODdGOEMKLToxMEJENDAwMDVEMUZDQzIwQzI5RTlFNzJEMTBDODIyNDVDMkU2N0M5REUKLToxMEJENTAwMDlBNzJBNTM5NEI1M0JGQ0E5MUFGRjkzRTNERjMyQUNEMzQKLToxMEJENjAwMEY3OTlBRTQyNEQ3OUQ2Qzg4OTlBRkEzN0JBQ0IzNUU1RkMKLToxMEJENzAwMEQ5MTM2NjZBRUE1NzdCQUEzNUU1QzI2MDg3QTY3RUYxQzkKLToxMEJEODAwMDkxMkVFREY3NjM0QzhGNzgyODNBRUU3RTAzOUZBNTI3MUUKLToxMEJEOTAwMDNERTQ5RTJEM0JENUY0MDYzRTI3RkU4NTgzMjNEQUFGOTYKLToxMEJEQTAwMDdDQ0RDNThFMzdGMEJERjQyQjQ3OUY5RjkyN0VFNjlCREUKLToxMEJEQjAwMEY1QjY4MDMxQjYzRjM5NTMyRDA4REY4M0EwRDdGMUYzQjQKLToxMEJEQzAwMDUzRUYyNUZCRkU4MDc4OTNFN0E3QTZBMDVGMTk5MDUwNUMKLToxMEJERDAwMDc1REJCOTlGRTJFRjMyNUM1OEM0RkQ2RUM3MTEzMTk0MzgKLToxMEJERTAwMDRGNkUyNzdGRTU3MTQzRDNCMzdGRTQ3OTAzQjkyOEY3MUEKLToxMEJERjAwMEFFRUI5QkFGNTlGNzk0OEIzRUNEQkFDQkQ5QUEyODNDN0EKLToxMEJFMDAwMEREQTEyOTU3MzlFRUQ2RDQ5RjlFQjk1RUYzN0RBNjZCOEUKLToxMEJFMTAwMDRCMTQ5RUI2NkJDQTM3QkExRjhFQzI1MzdCMTQ5RTlFQkMKLToxMEJFMjAwMEQyN0M5N0Y0REQyREZDNUZBRkExREYwQTlFOTM0MjNERUIKLToxMEJFMzAwMDk1ODg4N0M5QTdGQTA4MUYxMzdBREEyQTExNEZENzFDRTkKLToxMEJFNDAwMEVGMjA3Qzk1MDRCRDk1MjgyRUNCOEUzNEJEODFDRjIwNkMKLToxMEJFNTAwMEVDQ0JCMEREODFFNjRDN0ExRTZDNzY5MUZGRUI3MEYzOTMKLToxMEJFNjAwMDQ4N0ExRTY5NzZEM0ZCRkY2ODlFNDBDRjVGMzU3QkU4M0EKLToxMEJFNzAwMEY5OUZDRDMzRThEOUQzRUNBNTY3NDc3MzA3RDU3RkFFREIKLToxMEJFODAwMEI5OEJGQkNGNTJGQkVGRERDODQ1QkZDMTc5NURBODAxN0YKLToxMEJFOTAwMDIzQzY4RUMxNUI0OTlFOUU0RjA4OURDN0YyMDY3RkVCNkQKLToxMEJFQTAwMEVDQTkyMDM0RjA2NzFEOTAyRjdGMjA5RTQ1MkU0RkZCN0MKLToxMEJFQjAwMDYwNzgwRTFFQ0NGOEZEMTkyMjdGQTM0M0U3Mjk0NDNCOEUKLToxMEJFQzAwMDdDRjRFMzBGREVBN0U2MzJCNjY5QkQzNzEzN0YzQTE4N0MKLToxMEJFRDAwMENCNjYyODEzQjJFOUY3OTAxRUJDQ0Y5M0MzRDhCM0E4QTIKLToxMEJFRTAwMDRBRThCRUY3MDc2NzYzQjk1N0ZDOUVFN0UwQzcxRjI0MUYKLToxMEJFRjAwMDNCRkM1QkM3RDkzRDAzRTJFQ0EzMDdDNzg4QjMzRjdCOUMKLToxMEJGMDAwMENBNjU0NzdGQ0ZEMUFGNDZEODExMUU0Nzg1REZDQkMzNjcKLToxMEJGMTAwMDBBMERGODNCMUNFNTZBQTEwMUY1RUNGMTM4RTcyMTU0NjQKLToxMEJGMjAwMDUzNzlDOUUwNTI1Q0I3N0IxRUU1OTE1RjZGQTBERkUxRkEKLToxMEJGMzAwMDlCQTNGMEZEQUZBQzk3RUNFMkZBQTBGNzQ2MTNFREE3OTgKLToxMEJGNDAwMDhFRTkzQzJCOTAzRjdBOTVCRUM3MTBDRTM3M0RGRTE0NEMKLToxMEJGNTAwMEU5QTk1RTdCNUYxRUMyQUZGQUYxQkRCQ0VDRUM3QjRDODUKLToxMEJGNjAwMDcxNDc5NDBEMUMzRTk1OEYzRjM5REI2RkZCNUVFMTMzQ0IKLToxMEJGNzAwMDFCRDcxMTBEOUZCOTgzMUQ3QzVGMTFGNEU0QTIxRDIwMTYKLToxMEJGODAwMENCQzdBQTNERjUxNDU3MkNGNzBDQzM3NTFDRjU5QTM4OEUKLToxMEJGOTAwMEZGN0FFRDgxNjFFNDM3RjI5NENFOEJGMEZGRjQwQzM2M0EKLToxMEJGQTAwMEQwRkFFN0EyREU0NDNGRTg0MjdEMjBENkVGMTU5RTFGN0YKLToxMEJGQjAwMENDRUQzREEyMTNEQzY3MkVCMEQyQkVFMDk4OEVERkEzOUQKLToxMEJGQzAwMDEwNURERkVFRTJGQkEzQ0ZFMkRDODc5QzI4QkU1N0RDRUUKLToxMEJGRDAwMDU0RkZFQzBCRDA1RkVGNUEwQjc1RERFQjFENDFGNjU4QUIKLToxMEJGRTAwMDZGMTM0MDE3NjhCQUY3NTREMzM5RkVEREU0MTYyMEExNjkKLToxMEJGRjAwMDM4RUYyREY4MkZGOEZFNkNGNzlENUZGQzA2RUE3RkIwNTYKLToxMEMwMDAwMEQ2RUEyNjFERTIxODQ1RjA1QjI4MkEyRjRFMzU5M0ZEMEYKLToxMEMwMTAwMEI0Nzg0RTZFMDVFQUM1NUI0NEJDRjA1NkJCOUE0RTYxREYKLToxMEMwMjAwMDQzMzVEOUU4ODA3RTk2REIwQTM3MDMwNEQ5Q0FCNDZBNUYKLToxMEMwMzAwMDIzRkU2NDUzNERDRTFEOUJGMUI5N0FFODc2MjNGMjU4NjYKLToxMEMwNDAwMEREOTg3RDlCRDE4Q0FEMDcxNjJFMjVGOTE3N0FBNzE5OUYKLToxMEMwNTAwMEU2NzVEQjNBQkQ4QkVGRTdFNEY5REFEQTZGOTRGNzIyQTUKLToxMEMwNjAwMEU5Rjc5OEM4NEYwMjIwRDA3RTM1QzlBNTY4RjY0OTQ5M0UKLToxMEMwNzAwMDgyNEUxRjE4MkNFMjMxNjNEOUQ4NEJEQTc4RDc0RUU0QzAKLToxMEMwODAwMEEzQjM4QkRGMTkxRTI3MUVBMUZEMkVFQ0M3REY4QTdCMTEKLToxMEMwOTAwMDlFQTNFRjRGOTFFMzNBNUM3Q0ZGNzVDQzA4OTQ4OUY2NDAKLToxMEMwQTAwMEU0NDJBRTA3QzZDREZGN0M0MzI5QUM3RjVDQjc0MzQ3NzMKLToxMEMwQjAwMDc5MERCN0Q1QkY4MDc4QjhEMDI1RjA2ODYwNURDODRGREUKLToxMEMwQzAwMDM3Rjk5NzdDRjAxQjQyNEM5QUU2RENGMDk1RjRBNUJCNUYKLToxMEMwRDAwMEM3NTExOUE5MkY0QjQyREVDQTQ4N0QzOUExQUZBRDEyMTUKLToxMEMwRTAwMEY1QTJENDhGQzFFNjFBMjE4RjlCNDg4RTFFNkM1RTQ3NDUKLToxMEMwRjAwMEU1QzNDRDdFN0ExRTY5NkUxNUYyQjg4REJFRkZBQTc5QjIKLToxMEMxMDAwMEE3OTBDNzAxMjE4RkY3RDJGQkVFRTZGOUY0N0NBREQ5RjkKLToxMEMxMTAwMDQ3Q0Y4NUE5QkVENzExNkUzMjhFM0JEN0VDQTNCQ0RDQ0UKLToxMEMxMjAwMDQzMEY5QjE4QzZGMTJFNzQ5QjI4OEYwMzM4RTJCMTQ3NEEKLToxMEMxMzAwMEQyMzA0RkM5NDRFNzQ0QTNGMzk1QTJFNTdDM0YzRDc0NTgKLToxMEMxNDAwMDBFQjhCN0U1NkRFNEY3RkUzQzIzQjQxNzA3QzdBN0E3MDEKLToxMEMxNTAwMEEzQ0M2NTQ3QjlGNEYxRTBGMzI0ODc4RUJBNUM3NkI0REEKLToxMEMxNjAwMEE3NEYzRTJFQ0ExRTk3REQwMEU1M0YwREVFMjVGRDcxNUYKLToxMEMxNzAwMEQ0RTdCMjlCQTBGQ0M5RTNCREZDQkJERjY1Qjc0MEY5QzcKLToxMEMxODAwMEQzQzE3REZDN0I4MDUxRDBGRkVDRTAyRjQ4OEU5NTMzRUUKLToxMEMxOTAwMEU1MjBGMjQ3QTUzOTdGMkFBODBCRDBEN0U1MDc5MTJGRDQKLToxMEMxQTAwMEE2NjcyRTk5OEE3Q0IxNjBCMDhCRTg3MkE2NkJGRDQxQzAKLToxMEMxQjAwMDJDQ0YxQUQ5QUVFMjE1MTUxRTVCRTE0NjZDNTc5MTU2OEQKLToxMEMxQzAwMEFENjJCQkE5Mzk3NzZDQzQ3NkQzODY2RTU3MjNEQkNEQkQKLToxMEMxRDAwMDE4QjM2RjIzOTY2RjcwQjdBQjY4OUYyRTQwMzk1NjFBMEQKLToxMEMxRTAwMEVFNDc5NkU1NzcyOUE3NjUzRURERDVERDVFRDIwN0UzMEMKLToxMEMxRjAwMEJBQkNBNDBGMjQ1QzJBRTY1NjZGNDJGRjY3NjM5N0UyM0QKLToxMEMyMDAwMEMwREZBNUE5OThBQkY0MjczMzYwRUU2MjAzREU5MzBBODIKLToxMEMyMTAwMEYyRkFGRjNEQUU3N0FDODc3NTM2NjJGOTFBMkFCN0FERjAKLToxMEMyMjAwMEZGMDZGQUVEN0YwMEY2RTIzMUU4MDA4MDAwMDAwMDAwMzIKLToxMEMyMzAwMDFGOEIwODAwMDAwMDAwMDAwMEZGRDUzQzA5Nzg1NEU1ODIKLToxMEMyNDAwMEI1RTdDRTlEMkQ2NDkyNEMzNjA4NDJFMjY0OTkyNDk2NUYKLToxMEMyNTAwMDJDNDNCNjI2MTA2NDQ4MENFRTMwMDFGOTQ0NjUxOTEwRTEKLToxMEMyNjAwMEMyMTY0ODA0RUIxN0FCN0UxOTFBMTdFMDY5OEQ2QkQxMjMKLToxMEMyNzAwMEFBNkZDNEI1QUZCNkU0NjFENDU4MDkxREFBNTJEMjg3REIKLToxMEMyODAwMDNBNTUxMEI0Nzk3NEE0ODhGMDk5OTAxMURDNzhEMkM3MkIKLToxMEMyOTAwMDNCRTdGQ0Y3NjZFNkNFMjQ4MDE0RkRCRTA3ODY5M0ZGREQKLToxMEMyQTAwMEZFRkJEOUNGRjlGRjVGMDA4MDUzRjhCMzAyN0Y2MDM0MDMKLToxMEMyQjAwMEZFMzgyNTNEOEMwNDY4MDRGMTY3QkZEMTZEQjI5NTAzNEIKLToxMEMyQzAwMEFDMzQwNzhDQTBBMzJGNDFBM0FCMTA2MEFGMEU5Njc2QzEKLToxMEMyRDAwMDE0MDBBNDI0QzNGQzdBMEI5NjhEQjA3NDBCOTZFNzVEMTIKLToxMEMyRTAwMDY4MDM0ODA1NjhEQUJBMjA2RTgxODVEQUJCRTM2NjYwQzgKLToxMEMyRjAwMEZCNDUxN0UyQUYzOENFNTIwNTZFNTRFMDkzMEFENDlCNEIKLToxMEMzMDAwMDlDODkzNDRGOUE0REQyMUZDQUM3NkY4NTUwNzg0QTA2MTAKLToxMEMzMTAwMEU4Qjc5QTNEQkEwNDgwNDQ5MzdCQUMwREM3RUQ5QkZCMTQKLToxMEMzMjAwMDRFODM1ODg3QUY4OEQ2MzE2Q0JEMUVFQkUzMDAzMjZDNkMKLToxMEMzMzAwMDU2MUUxRkNBODIxOTU0NUUwOUVENDZDODQ2QjhGNUNGOEQKLToxMEMzNDAwMEZCQTQyMkRBOTdDNTI3MjM4NDRFNDM1RjIwNUZFQ0Y5RDQKLToxMEMzNTAwMDU0MTZGRTYzMDYzRDU0RTA3QUU5MDM2RTY5OTlENzcwN0UKLToxMEMzNjAwMDIwNjA1NkVBRjE2NzM5NzRFQzcwNjYyMkRFNUVENDdFOTYKLToxMEMzNzAwMDZGMDRCRjE4QkY0M0ZCN0QxNUUyOERCRTM3NzU2OUJGRTMKLToxMEMzODAwMDAzNTQ1QjBGOEQ0MzMwMDJDQkI4REZEOTEyRkU1RTg1QkMKLToxMEMzOTAwMEZGMEQ4Rjg3NDk2N0MwQzNBNEExRjAxMEI1MUZGMDFBMjUKLToxMEMzQTAwMDQxOEVERUQ3MEFDQjZFQTY3M0U0QkVDMDlEQ0FGQ0QxMTcKLToxMEMzQjAwMDA4ODEyMUY3QTdGMjQ1RjRGRURBMDVGRUY1MDJGRjI1MTQKLToxMEMzQzAwMDM2RTc3NDVBNUZEREZDMzg5MDUzMDA4RTZEMzU3OTREMzkKLToxMEMzRDAwMDk5RENGRkE5M0QyOTQ0MTc5Mzc1ODMyRDlBM0U1QjVCMzkKLToxMEMzRTAwMDY3ODNERTAwQjBBREQ1Q0REMEQ3QkExNEY0NzY4MDNGRTgKLToxMEMzRjAwMEI1MzY3M0Y5QURENjE2MkVFRjY4RjUzMERDRDlCQThFQTYKLToxMEM0MDAwMEUxNUY1QURCQjk3RTU3RUI0NjJFQkZEQkVBNjVFODZGOEEKLToxMEM0MTAwMDdEOTFCRjVGM0I3RjY1ODZEQjEyNERGRkQ1QzlDRTQ1NjEKLToxMEM0MjAwMEM0OEY5RTdCQUExMzk5M0VCOEY3NTNDOEFCOUUxQUM4MTcKLToxMEM0MzAwMDZGQjY0NEMzMDE4MzY1OUQ5NEMwNjU4RjExRjdFMUQ5NDAKLToxMEM0NDAwMDE2RTM2REMzN0RGRDczOENCQjg5QzYxOUE4MDk3RUFENEIKLToxMEM0NTAwMDQzN0M0MzRBODBGMUQwMzBEMkJEOUFCRTRCNDYxQzNBNTEKLToxMEM0NjAwMDg5NjZGNUU0MTJGRTBFRUIzQ0JGMDc2NEQ5NTY5QkQzRjgKLToxMEM0NzAwMEE1NDczRTM4MUE4RjU1MTcwMERDODI2NTBGQ0VGMzc4M0EKLToxMEM0ODAwMEFBQUI4NUZBNDE3RUMwNDhFMzlDQTIzRjkzNzE3QzA5MjgKLToxMEM0OTAwMDY2NzdGMDNBMTBBMjFDMEVDNDA4RThCMTQ5MkM4RkQxN0YKLToxMEM0QTAwMDUwQzhERDQwQkE5RkY5NjBFMEU5MTMxOUI2ODIzM0NCN0EKLToxMEM0QjAwMEM1NzBGOEE4OTNBQjAzOUUzMkE0Njc2NUFDQzM4NEQ1NUUKLToxMEM0QzAwMDdEMTJGOEE0MTI4NDUzNDZENjAwOEVEMzk3NkVENDEzRUYKLToxMEM0RDAwMDlDMTQ0NDU2NTBDN0MzOUZDOURGMjI2Mzg2RjFDQjE0MTYKLToxMEM0RTAwMDQ4RDQ5NDZCQ0RBMzM1RURFQkFDOTk5QUZBQkVGNDVDQ0QKLToxMEM0RjAwMDFFRkZEMkI0OEIzNEVERkE0NjU3OUFDNUJDNTMyRjIzOTYKLToxMEM1MDAwMEQ4NjU3NDZGNUM4MDc0MDk1Njk5MUM5QkIwRkVCRDk4MDkKLToxMEM1MTAwMEY4MjIyODA2OTgxNjFCQkY4OUUwN0IzMTE5NUU2QTM3MUUKLToxMEM1MjAwMEVEQzBDOTE0QzA3RDRFOTM3RDIzOEIxMDU1OTdEQkM2OUIKLToxMEM1MzAwMDZCQzdFRDk5NTM2M0MzNzY1N0U2NTc2OUQ3MjFDMTI1NzkKLToxMEM1NDAwMEI0REZBQjFENTMzNERGQTc1NzVFQUVFOUVGMzJGQjkzODgKLToxMEM1NTAwMDA4QURGNUNFN0FDREY3QzY5NkFGNDE5RjBDMzBCMUU1NjgKLToxMEM1NjAwMDI0RTg0QjAxQzZGQjNBMzRFMzk0RUVFQ0QyQjQxRkJGOEYKLToxMEM1NzAwMDFCNjQxMkVCOTI3RDhFMzcwOTk2MUY3NENBQzQyQTE1NkMKLToxMEM1ODAwMDg3OUJERjI0NThGNUE1M0Y4M0Y2MDE0RUIwNTk1MTlGOTQKLToxMEM1OTAwMDRCOEFEQzgzNDcwMjNEOTYyNzI5RTVDQUEwQjcyRDgxNDcKLToxMEM1QTAwMEU4NzAxMkYyRjU0OEJGODkzMEMyMjE2MzYzQTlGMkJGNzcKLToxMEM1QjAwMDRFMTAxRjRDNTIyMDAwMzIwN0Y2QUIxNjRCODA3OTNBRDIKLToxMEM1QzAwMDhCRDc5ODQ1NkEwNUU1MUJGNUMxMDZDOTkxQTY0NzM4ODIKLToxMEM1RDAwMDQ3MEU1NDUwRjkyODA0OEEwOENBM0E5NzlFRjg2QjJBRTUKLToxMEM1RTAwMDM0OEZBNUIyMDlEQzY5MDQzRjQ4NzRCRjRGN0NEQzJGNEYKLToxMEM1RjAwMDA1REFDNEUyODJDOUM0Q0Y3NTNGRkY2OERFNkRBQzE3QUYKLToxMEM2MDAwMDYyMUMyNjVDREZFRkJBRkU5MTRBNkJGREJCM0ZGNTkxRTEKLToxMEM2MTAwMDM3NkMyMTdFNkZCMjdFQ0Q3ODUyQ0I4RDJEQzcxOTdGQkUKLToxMEM2MjAwMDZBQjk2RjJEQ0M3N0UxOTJEQjBENjg5RjEwMzZGRUFGQjMKLToxMEM2MzAwMENDNzYwQUVEREEzQUEyNTMyM0ZDQzlCOEJBMjBENDFFNEMKLToxMEM2NDAwMDNBQkUxOEM0NzczMUVBQkY3QTVBRDMwNEMyRDdERjVENDUKLToxMEM2NTAwMDRFNkM1NzZGMTA3MjA4OUU0NUY1NEUxQ0E3M0U0NjI5M0EKLToxMEM2NjAwMDgzNEZENEE3MkFFREExQjI5RUNCRTk2QTdEOTU2ODZGNkUKLToxMEM2NzAwMDU3Qzc3QjU4QjQxRkFEOTY5NUYxMkU1MkNCQ0RBMjlDRDcKLToxMEM2ODAwMEE5Q0VGN0EwMjgxN0FBRTVGRjcwNzEzOTRFQjQzRjYxMTMKLToxMEM2OTAwMDlCNTVFRjI5MDhFOUZGNTNBQUREMTgwRkUzQzk2RUEwRTcKLToxMEM2QTAwMDNEOTAzM0M5MUU0OEJCMUE5ODFGQTJFRDg1QjY1RUIxRjYKLToxMEM2QjAwMDE3RjM3RjIzN0I4Q0M1NDQ4RkNCNjNERjIxQjlFRTkwQ0EKLToxMEM2QzAwMDgwRTRCQUYxNzY4M0QzOEJGMzdGOUVENDUxQjRDNjEyNDMKLToxMEM2RDAwMEMyREZFN0I3MDg3Q0JCNkFFMzlDMzJCNjVGRjk2QURFNkIKLToxMEM2RTAwMDI2RTIyMzM5NkVGN0M4ODVGOEREM0E1NkM3N0FBNzRFOTkKLToxMEM2RjAwMEI2Mzg4MUU4N0JBRkQwRkI2QUZGNDhEOEQwRjI4Njg2OTcKLToxMEM3MDAwMDlFNTFGNUIyQzRGM0MxNkNGQ0MxRjlGQUVGMUJGNUY0MEMKLToxMEM3MTAwMDA2QzI1OThFM0Y5NzcwOTM5OTI5RjREQzQ4RDRBRDk1QTEKLToxMEM3MjAwMEY4RjMzNkVBNTkzM0QyM0QyNTFCOUMzQTZDOUZGMjFBMzYKLToxMEM3MzAwMEVBNjdBMkYxNDFCRkQwQzdBRkM1RjgyNDE0OUM5NThGMUEKLToxMEM3NDAwMEJEQzlGNjZGQTE4QzUyOEVGODdCMkRDRjlEOTc4OTdDNDkKLToxMEM3NTAwMDdBMzRDRTlGNEI3Q0RCRDBCMjhERDc3NThERERDQUUzQUEKLToxMEM3NjAwMDgzMzU1ODEwOEVDRkUyQ0MyOEZDOTc5RTAxRkZBNTNGNjEKLToxMEM3NzAwMDI2RkU3MTgyMDNBNENGNzUyODc0QjRCRUU1OTZCNzc4RkYKLToxMEM3ODAwMEJGQ0I5NUVGQUM1RjMyNDNFREI4MkM0Nzk3OEZDNjM5REUKLToxMEM3OTAwMDMyMDgxRjBFODU0RTA3NzRCNjBBMDU1RjU3MTNCRUZBOUUKLToxMEM3QTAwMDE3RkI3MzEzQjFFQ0YwRjk0N0JBRDkzRUVDMkE5Nzg4MUUKLToxMEM3QjAwMEVFQ0Q3MTQwNzQzRjJBRjk4QkY2MEU0MUZGOEVENjBFRjYKLToxMEM3QzAwMEI2Q0I1QjVBQkIxOEJFODQ3M0QwQkE1NTdDREQxMDhERDYKLToxMEM3RDAwMERGRjk2N0MwRUZGQzFGMTNCRkEzRjQwMUEzMDNGQkFEOTgKLToxMEM3RTAwMERBMDczQzRFODVGRjgwMTFDMkY0NEMyQkYxMjVFMjI3N0QKLToxMEM3RjAwMEExNEJFMkZBM0FCOTIwMjFBMEE5OEYxM0ZFNTI4RTczMDEKLToxMEM4MDAwMDNDRjFFOUNBMTlCQkFBMzc0ODIxNzk5ODFDMEIxRDMxQTQKLToxMEM4MTAwMDQ5Q0NENzBFODVBRjFEQzRENzJBRkYyMjNGOTZFQTExMTcKLToxMEM4MjAwMENGNkY5REM0N0U0M0UwMzdDNEJGQzBGM0E4NzhCQTNCNDYKLToxMEM4MzAwMDFBQUYxQjg4OEVBN0MxQUJCNkZFMDdDNjZCMjdGQUM3MTcKLToxMEM4NDAwMEE0Mzc4MkFGQzQ3ODM3NjU0NkUzRjk3NzBBNUU1NTdDMzIKLToxMEM4NTAwMDZGNTNFNDdGMzgzQzZGMjMzQ0E3OUU3RjNDNkZDQkI0ODMKLToxMEM4NjAwMEYxQjg5MUY4MUVDRTNFNDVEMjQ3NURGNzEwNzI1QTdFNjAKLToxMEM4NzAwMDJFNzIzQTJEREJBQUY4REZFODc3MTY0NkQzRkQ2REEyQkIKLToxMEM4ODAwMEJCNTk0M0Y3OUUzM0M4NTNDRjhGMjk0RjkxNzg4Qjg0ODAKLToxMEM4OTAwMDhEMTJCODNBMkNEMURGM0ZDQjFDNTZERjlEMTczQzRFOTIKLToxMEM4QTAwMDBBQ0VENkY4Njc5M0JGNzU2QkZDQjMyOTE4NjE2OUZEOTIKLToxMEM4QjAwMEQ4OUIzNEU1M0FFQkFEOUFGNjk3QTZBREQ1RDQ1RjZFMkEKLToxMEM4QzAwMDVCQUZBOUJGMzJGRjAxNERGOTZBQzc2MzExN0VFNkQzQTIKLToxMEM4RDAwMDlBRkE3QUU3NkYzNEY1NzM5QkI3NkJFQUU3QjdGNDY4QjcKLToxMEM4RTAwMEVBMTc3OEZFQUEyOUFCNzhEQ0RBMEExQzJGNkQ2QjM1QzMKLToxMEM4RjAwMDJCRjFEMzY1MENBQjAzRkU1QTEyODM4QjBGMDdEOURGRTQKLToxMEM5MDAwMEFDRjRCN0Q3QjI0QkIyQUY4M0ZERDEzMjlGQUI5NkMyNzYKLToxMEM5MTAwMEFBOEE5RENENkYxMkY0QjU1QTk1NzgyRDhERTE1QkFENDUKLToxMEM5MjAwMDM2RDZFRjNCNUFGMzE5RUU2Qzc1MjhGMTVBMjVDMzVERTQKLToxMEM5MzAwMEFENEUyNTRFNzMzMThDQjQwQkFGNjZCQkE3NjQyMTNENjEKLToxMEM5NDAwMEE2QkRCQzQ0MDdCODgwRTk3RkY4NjdDMTVFNUFCQzc3RDIKLToxMEM5NTAwMEJDOEVFMkRDMzVDQTVFOEU1NzdGQjNGRjM2RTRBRkUzQjAKLToxMEM5NjAwMENEMjYwNzk1N0JCNzFGMzFEODBBQTNGOTY1RUVCNzMyRkMKLToxMEM5NzAwMDM4QzNGODZDNkVDQjVGMERFNDY3Q0Q0NTBGQkE2MzA4MjIKLToxMEM5ODAwMDM5OUQ5QUE1NjM3RTIwRjcwMzUwMkZDQzM2ODMyMTA1NkQKLToxMEM5OTAwMEY1QzFFQ0Q5OTJBMzBERjhCQjA3OTIxOEZBREM1ODNGMDkKLToxMEM5QTAwMDREMEYzRTEzOTZFQjJEN0E5RjI5OUU5N0U2MzJBMzNGQkIKLToxMEM5QjAwMDNENEIyQzEzNEM3QUYwNTAzREE0MjQ3MzlDN0UwRDdEOEUKLToxMEM5QzAwMEI0QTEzQzM4NjVCODE4QkZDRjIyM0YxQ0ZCNUQ2RkU5QUUKLToxMEM5RDAwMDMwOTBEREJENkVFNzJGRkE2RkMzN0FCOEQzNTNDRUYxMzYKLToxMEM5RTAwMDNENUM2MjI1RkQyRDc5M0VENjlEMUEzN0JDQkMyMDM1QjUKLToxMEM5RjAwMEUxNTAxODVGNEYyNTE5NEVBNUY4RDFFMTc3NTJEQzdBNDYKLToxMENBMDAwMDkzQzFGMTlDMkRCQURGMDVDQTdFQTdDOTEyRkI2RkMxODUKLToxMENBMTAwMEQ3NERERTRENTI0ODNFNzE3RjNCNERCOENGMjZFMjAxRTcKLToxMENBMjAwMERBNjdCM0MxOTc1NzQ0N0VGNjc2RjZCMzlCMkFENzE2REEKLToxMENBMzAwMDExOUQ5QTJFOTEzRTMxMTU4NUUyOURBNjk2MkZEOThGOTQKLToxMENBNDAwMDhGRDRDRjkxRjA0Q0YxOTBDMzZGNjVGRURCREZCQTkzQ0EKLToxMENBNTAwMEY5NDU4RDhCN0E1QjdENUMyRTBCQjg2QUMzRTNBMzM5RjUKLToxMENBNjAwMDkzRkY0REE2QjhBN0VBNEIxMUZGNEMzQ0U5RENGQjUzMDIKLToxMENBNzAwMERDNzdBMEQ1RkYyRkU1MTdENEJDODI5QTY3ODhDQzVCMDIKLToxMENBODAwMEE4N0E2NERFQUQ3NTA5NkVEQ0VGOUEyQzUxMDZGMzk0M0EKLToxMENBOTAwMDc0QTZBMzVFNDA1NURGREU5QTE1NjU5N0VGQzgzQUJERDAKLToxMENBQTAwMDdFRDZENkZGQzBGQUY5NkNGOUJGMzE0REQ4RDU0OEJFNTUKLToxMENBQjAwMERGMzdFMzA1MDNBRDUzRTVFRjQ4RkU5RjQzN0Q3MEZFOEUKLToxMENBQzAwMDM5NEQ5MkQ3ODM3QTdBRjY5Mjc2QzM0NEU5RENGOTdEQzAKLToxMENBRDAwMEI5RTVBMDg4OEIyM0VEQzJGN0I2MDczNkE2OUI1QzJCODEKLToxMENBRTAwMDczN0M2MTkyNkY3MjUwMUU0NEE1NDM0NzM0REQzQUNGODgKLToxMENBRjAwMDQwQjdDRTFGOTM2RUQxNzZGMUUwQkM3M0IzOEJBMEYxM0IKLToxMENCMDAwMENGREZDQjhBRjIyNzNFQzgzQUJEMUZBOUFERkY4MUY3MjAKLToxMENCMTAwMDZEMUQ2QjYzQjg3MjQ0RUYzQzU5MjdFQTQ1N0M2MjAxOTYKLToxMENCMjAwMDFERjJFRjgwNTdFNkI4NzQ2OTY2N0IzQ0M1MzM1MDE5MzcKLToxMENCMzAwMDhDMjc3REI3QUM1QjA2RjIwRjQxRUZENDhGNDZGRTVDQ0QKLToxMENCNDAwMEEyRjA2NzFGRjgzRTI0N0U1QzA1Rjc3RTQxMDk5ODI1MTgKLToxMENCNTAwMEQ1NEJBRTIyM0RCN0Y0MDk0MzA4NEZGQ0FGOTNGMzI3MDIKLToxMENCNjAwMEFCOTQ3RUNCMkQ5RDQ2REFFRkYyNjdCNUVERDQ3MTFBMEEKLToxMENCNzAwMDVGOEFDODFGNTc1RkZBMTlCMERERjA3M0RFNkY1NUE3RTMKLToxMENCODAwMEI2REY3NzU5NzEyOTg3NjI1OTE2NEIwOEVGNjdEMkE3MkMKLToxMENCOTAwMDQ3QzlBRTFCQzJDQTI3NUIzOUJGMjAzRkYzRTAwMzlFRTMKLToxMENCQTAwMEIxMjFGQUM0NjQ0N0YxNzE1Q0Y2RTlGOTU4NUJGRjIzREYKLToxMENCQjAwMEYzQjExQ0Y3QUM5MUU4Rjk3REY5NzhCRkREOTk0NUVCNEQKLToxMENCQzAwMDU2RjVGM0EwREU3OUMzQzQ3QTY3QTBEQzI2RjJBNDM3NTkKLToxMENCRDAwMEZEQUUyRDlFRjhFNDA0Mzg4ODFEMTYyQUY5RDI4NTZBMjgKLToxMENCRTAwMEJFNzQ5RDM2NUYzQUI5Q0ZDNzc5Qjk0OTA3QkQ2RDcxM0IKLToxMENCRjAwMDQ4Rjc4OUJEMUVDRURCNTVFRDc2Qjc1OUIwRkNEMzVENDUKLToxMENDMDAwMDRFOTlGQ0EzRjE2RkI5NjQ1QUI3RUFERkE4RkU0RTQ4MEIKLToxMENDMTAwMDhGRTVCMEJFRTNCQzZCRjZEOUVCM0JENTJFQUFGNjMwNjAKLToxMENDMjAwMEQyMEU1NjA2REI2QkM5RkU0REY4QjZFMzREODJFNzJCRkMKLToxMENDMzAwMEFGMUU2OUY3REU4QjEzN0FFMkE4QzE1N0JFOTdGQzhDNTIKLToxMENDNDAwMEQ3NjMxQ0NGNDFGNEZBQUZDQjE2N0VDNjRDQ0YwMjAzOUMKLToxMENDNTAwMENCMUYwOTFGQ0FEQjBDNDU2RUFFNEY3NjVGOTc0REY1QjMKLToxMENDNjAwMDhBQkREMDk5OUQwNkIyQTM3NTcyREYyM0Q3MTI1RkY5RjIKLToxMENDNzAwMDY1Q0UxQkRFN0NDNzA3QkZGRkI1RURDQ0Y5ODUyNkVCODMKLToxMENDODAwMDcxRjYzRjg2OEIzMzlBNzRFMEE2RjhBMkE0RDY1NjRBNzIKLToxMENDOTAwMDdFMENDNTZEOTQ0NzU0RjM4QTkxRUQ5RkIwRDdBQ0M4MTQKLToxMENDQTAwMEU2M0M1N0I1REY0OUVCRDkyOEQ2MzMxQ0JEOUE1QUJFQUUKLToxMENDQjAwMEQwRTQzMTg3OUJCRkE5QkJEQ0JBMzA0QzNFNUVDQTE2QkMKLToxMENDQzAwMEYxMkVEMkRCN0FDODFDQTJGN0Q5RjJDNUZGQjdGODY1RkUKLToxMENDRDAwMDlBMEMxRTA5RUQ2Q0ExRTQxNUZFMkYwODNGNzgwRUY4QTIKLToxMENDRTAwMDE5Q0U4MzIwNDMzNzU4Rjk3QzZBMjEzODE4MkUwMjE3NTEKLToxMENDRjAwMEMzN0NCQkRCNEI3QzMzNjAwODhFMjRCRUVBN0ZGNUJCNzQKLToxMENEMDAwMDAyRTI5QkZFOEIyN0I2NTdDMUY5M0I1RjhBRjRGRjA2MTAKLToxMENEMTAwMEM2REI3OEZFODE1N0JFREI0M0ZDMzk3MDg3RTFBQ0Y0OUIKLToxMENEMjAwMEM2RUE2NDY3MjdGMTUxRTQ3OUNCQkI1MzY0M0VENzAxNkYKLToxMENEMzAwMEZEN0E5NjhCN0FBQkU4MDM5N0E0NzIxQkVCRDg0Q0U2OEUKLToxMENENDAwMDhCOTBERTFDRjVCNEFBMzcxNzYwQkZDMjRGNzRBQ0Q3MDYKLToxMENENTAwMDYwOTlFNEI1NjNEM0FFODA4RTQ1QUM3MDcxQTY1N0E2REEKLToxMENENjAwMDcyQTdBODJGNUM5OUU4OTVCMDVDNTgxNTIzRUE2RjRBMjIKLToxMENENzAwMEY0NDIyNkM1NDMwMTk2Q0JGOTAwQUMwRjE3ODBEMDhCNDcKLToxMENEODAwMDM3ODI5M0Y3ODk5MTQxOTY4NEZEMTc2RjM1OTc3MDNFRUUKLToxMENEOTAwMDE2MDIzOUE0RkY4QjI4OEUxQTIyNEVCN0U2MDg3OTJGODcKLToxMENEQTAwMENFMTJGQUJFQjg0NjlCMTdGOTMwNUJDOTFCREI2QjRBNDMKLToxMENEQjAwMDcyMTA1NkU3MzhGNzEyMUQ4QjkzRkMxQjFFMkFBMzdDQkEKLToxMENEQzAwMDkwMEUzNkExN0M3RDU2NzUyQjlGNzdBQUZEMUFFRDM1MDYKLToxMENERDAwMEJEODRCRkNEMTI3MEJDRTJFOTM2Nzk5RjEzRTc4QzIzODYKLToxMENERTAwMEMzQ0ZDREYyRURCNTA3QThERDExNUE3QkY5RjA3OEM1QjgKLToxMENERjAwMDdFMUNGNzQ3Q0I5NTg3RDc1NzRDQjExQkU3RkJGMTQzMTgKLToxMENFMDAwMDI1Q0ZDQkU1RkY3OUU2RUJGQTNCMEJGODRDQzE0MzdFMkYKLToxMENFMTAwMDcyQTNERDdEOUNENzZGMDRCMEQwRkE5RjE0NzExNDQwQ0IKLToxMENFMjAwMDczMDZFNTQ3OTczQzY1RDI5MTlGRjExMTlBNjNDODAzNTkKLToxMENFMzAwMEY4MUJDNkREMDRGRjFCRTM2NzgyN0ZDN0Y4OTlFMDI3NzQKLToxMENFNDAwMDE4M0YxM0ZDMDdDNkNGMDQxNzdGM0IxRTgzMjI4MDhEM0IKLToxMENFNTAwMDM5NEU0QjRFNzlFODFDMzA3MkJEODYxQzgxQ0ZDMUY5MkEKLToxMENFNjAwMEJCOEQzQzdGOURERENERjgxREE0RjdFQkUwQTU3Mzk5NEMKLToxMENFNzAwMENEODlDMTBCOTI0RUMzNkYwM0REREZGMEY5RTk3MDc4MDUKLToxMENFODAwMDUxQ0YyNTIzRUJCRjUzRTg1QUQ0QTk2N0ZCNUZENDE1RDQKLToxMENFOTAwMDg4NkYwODZCNzc0MThFOTFFQjBCNUYzOTE4NEZFMzFGNUEKLToxMENFQTAwMEI1MEVFMkQ3MjlFMTk2QTdFOTQ0Rjk4MjY3MkQzMzA4NDgKLToxMENFQjAwMEJGNzU3NjY3MDlFRDFCRTUzQzgzRjY1MUQ0RjVDMTgzNTgKLToxMENFQzAwMDEzQ0I3ODdDQUI2NEEzNzUwNDFGRTVCODIxNjIxRjkxNzYKLToxMENFRDAwMDc4NTBGN0I1MzlEMUJGODFGQTZGN0UyNThCNzY4MjdBOEIKLToxMENFRTAwMDA3ODREQzEwMUY0OTQzRUQ3NzJERjNDRjc0NTNCMENDOEEKLToxMENFRjAwMDhBRUI5RDdFNEE2RTFFMEFGRjc1RjYyOThDRTc3NzU0RjEKLToxMENGMDAwMDdFNTNDRkM3MTVGRTUyRTk3NkFFRjIxRDM5MUU5MDZCRTcKLToxMENGMTAwMDg0N0VFNzZBRDJBNTM2QjI0QjI3RTNDOTJGQUM1N0VFMjEKLToxMENGMjAwMDE5NzQ3NUU2QkM0N0ZCRjRFQzk0QzE2RTYzM0VENkM4MzkKLToxMENGMzAwMERGNjI4NTVGNTQ1OEQ4NkQ3NDExQkQzNjc3MUZDQTU5QUEKLToxMENGNDAwMDY0NjFGQUU0MkNDNkY2QjM3MkVDOUFCQzY3NjFENTg5QzkKLToxMENGNTAwMEM3MUY0QUUxRjY1NjlBRUEzQTc4QkFDRThBRTNERjYwMEEKLToxMENGNjAwMERFRkUzNjZENjlBRUY1OTNCQTQ0MkNDRjRGOTM3NjEwNDIKLToxMENGNzAwMDVDNjBDQjlDOUE2NEEzRTU3QTc5RkQzN0U2NEZEOTQxOTIKLToxMENGODAwMDIyNzU5NUEzOUVGREI5MjlBNDY0QzJFQzQzQUQzOTk2RTAKLToxMENGOTAwMDBFMUYwN0NCNzVENjY0NERGOUQyQjQzMTlBRjY5N0RCRTQKLToxMENGQTAwMEIyMzVGNTU3RTY4RkQzRDRBQkYzNUVFNTI4RDVCNDJCNzUKLToxMENGQjAwMDRFMEE2NjUxNUM4N0ZCNjBCOTgwRTc2NEFGNURBMjdENzUKLToxMENGQzAwMEVGQkU2MjFDOTZBNzNEM0ZDQjQxNkVDQTY2QTU3RURBRDYKLToxMENGRDAwMDk2NUEyRkQxNjMwMEYxNjk0NDg3RUE3MEU1RkE0NzFGM0EKLToxMENGRTAwMEEyQzEyMkUyODZDNkVFNjc3NjM4NkRFNzEwMzcwQzEzRDEKLToxMENGRjAwMDJGQUMwMDcxOEUzRjVDREMxMDE5MkZBMEZFN0M5MEY0RUEKLToxMEQwMDAwMDY3RjFBQkQ3NThEQjcwRENDRDU1MjcyRUIwRTEzRUVGOTIKLToxMEQwMTAwMENDQzEzODgyRUM4RDEyNDcwQ0M3M0Y4MzcyMjJEOTA0RjEKLToxMEQwMjAwMEZGRjRDOEYwREMxMEZDMDNGMDBCODUxRjA1OUNGNjNFRjYKLToxMEQwMzAwMEZBMzMwNURGNUZCRjdENEFGQThERjMwNzFFQzVFRjU3NTAKLToxMEQwNDAwMDYwNDRCRUFGRDhFODc4NkYwREU1QTdERTkxODFDRUY5RDgKLToxMEQwNTAwMEUxMjRBRTAzRUIxQkU4NzczOUM0RjdCMEU4RTlCQjQ2M0YKLToxMEQwNjAwMEE3RjA3NzBGQjlBNkFCOTRGQ0RGMUY3MzE0QkZBQTcxQUEKLToxMEQwNzAwMEZCNURBM0NCNDJGNTcwRjMyNzlBRjY3MEJCNzRCN0E2OUQKLToxMEQwODAwMDdDNjdBNkI2N0NFRjk0QkJDM0ZCMEZFNzk3MzU2QzVDNUYKLToxMEQwOTAwMDYwNzRBMzlDMzYzQzJDMzlCRDQzRTg4QkMxRjVBNDI4QjEKLToxMEQwQTAwMEZBQTE3QjA5RUJEQjQzREI5NzE5NkQ3MUQxRUQ1N0UxRjkKLToxMEQwQjAwMDc4OTRCNzZDMThDNkRFQUE3QUVBM0ExOTlBODdBQTdGREEKLToxMEQwQzAwMDQ3OURDRjcxN0VFN0ZCMDg3MTRGRjZDREYzOUFCMEMzNTEKLToxMEQwRDAwMDFGMjVCODhERTE3Q0IyMkY0NzlDN0JGNDNGRjZDMDFEMjUKLToxMEQwRTAwMDVGRDM3OUVFRUIyMkJFRUE0RjE0RjZBM0E4RjMzMzlEOEIKLToxMEQwRjAwMDBFNjFGMTA4QzE1RjQ1RDY4MDhFRUNEMkMwRDI1ODBGQzgKLToxMEQxMDAwMEEwOUMzNTJEOEJGM0U4OEFDOThGMDg3RTY4MUU0RjVFODAKLToxMEQxMTAwMEM3MkQwRjlBOTFDRTFGRUI3NDFBQkIzQzQwQzExNjk2RDcKLToxMEQxMjAwMEZCOUVGREQ5OEMzQkU5RjcwMjcxMkZFOTdDRURCMzJGMTMKLToxMEQxMzAwMDA3ODQ3REFEMTE3QTYzMUVGMTlGNjJCNzAwNTU1NkQzMDcKLToxMEQxNDAwMDVEMzA2OEM3NDhDRjEwNUVBODlDNkJCRkY1RkQ4N0M5RUUKLToxMEQxNTAwMENGRUYxMTdBODNGMjBBMzdCMDVGRTBCNDY4RjMwRDFEQTgKLToxMEQxNjAwMDJDRTdGOEJCMkRGQzNFRDc1OUVCOEZCN0RBOEQ5NkYzNDEKLToxMEQxNzAwMEE4NDc0NkQ4QjU3OTg3MjFGNEM1RkI1NzIyM0Q5QjVFNjkKLToxMEQxODAwMDk3Rjk1RUQwQjFBREY2MDQwOEQzMUY5MTc4NkNEQTI4MTgKLToxMEQxOTAwMEIzOUNBQkU1QTM1QkU1Q0JCQzZDMEY4MzE5RjU4NUQxRTQKLToxMEQxQTAwMEY4MDZBNzgzRTU3RkI1NTVDQ0I3N0FEMjM3MzNDODRFOUEKLToxMEQxQjAwMEFGRUVENjhCNEIyRkMzQ0RCMzRFMDY1QkQ4M0M5QkI3OUYKLToxMEQxQzAwMDk5OTY5MjVENTNENzNGNjA1NUY0NDlGNzU3NDk1MzBBRjIKLToxMEQxRDAwMDA0NUMzQjg0N0Q0NUJGQzA5MDQyN0U0MUJEQzRGMUVDMDAKLToxMEQxRTAwMDlFRUU1MTM1ODRBNzNEMTJGODZDMjUzQ0M0MzU2NjVDMzMKLToxMEQxRjAwMERGNEMzMTFDN0RCNzUwNUUxNEQyRjJGOTlFQTUxQUQ3RDAKLToxMEQyMDAwMEFBRjFFQ0FDRUU1OTc2RjI2MzNGRUM1Q0I4MDcyOTA3NjMKLToxMEQyMTAwMDkzRUNEOUNDNEZENzgyODdGREVFM0Q4OUFFNzRDQTkzOEIKLToxMEQyMjAwMDRDNTNFRTNGRUM0OTBDRjY5MUJGQkQ2NzUyQUM0NEY3NEUKLToxMEQyMzAwMDE5NzBGQzNCNjk3Qzc1NUY3QjBDQUVGNDY2REU5NzkyREYKLToxMEQyNDAwMDJGNzVGRTQ0M0UxNTdCRjY3MUEyQUE2N0VCRTREQkE3QkYKLToxMEQyNTAwMDVDNDlFN0Y3NzNDMDRBRjFFQzc0NTlGOEQ1RjA0NzIxRkYKLToxMEQyNjAwMENGQUE1RTZEOTJGQzQ5NkNBQUVEMzNBNkRCMTE0RkEzRTkKLToxMEQyNzAwMDVBN0VBOUU0N0REQjM1RjcwMENGRDZBRjFFOENBMzVGQzUKLToxMEQyODAwMDk0OTg3RjU2Mzk0NEJDQjFBQUZBRjM0N0FFQzVGOTU3MTIKLToxMEQyOTAwMDYxQkM0RkZFRERDMkFFRURGQjA4N0Y5MUYxRkQ2MDdDMEQKLToxMEQyQTAwMEY1MkZFNjdCQTNFMzMzRDczMkRBREZDRDc3MUNERjczQ0MKLToxMEQyQjAwMDJENDRDNzY5ODM3MTgxRUE1RjNFMTdDQkU3RDZBODU4MzIKLToxMEQyQzAwMDg1N0MyOEZDN0E2NDVCRUVERTM1NTg3RkU0MkYwNjY2QTkKLToxMEQyRDAwMEQ3MzcyN0ZERUFFOEFENThCRUY5Qjk1OEM2RjM5MTI0MEYKLToxMEQyRTAwMEYwOTAxRDM5QjIyOUNGRUJDMTA2NEI3NEMxNUVCMjZGMEQKLToxMEQyRjAwMEIwMjU4RUNGNjkzRTdCMzJFRkI3MkY1MTdFRjJCNzc2RTUKLToxMEQzMDAwMEY2NDM0ODdFNkNFOEMyN0M0NkY3OEZFOEZCQ0JBM0I5QjYKLToxMEQzMTAwMDFGQjhDNUJDMEQ4QTVDQ0EyRjE0REU1RjRERjUyRjI0RTMKLToxMEQzMjAwMDczN0U0MkE1REZFMTI3NjM5QzE0QUM3RDA1QkUyMjJCRjIKLToxMEQzMzAwMEIyREVFNzkyRTcxMERENUI1Q0ExN0I2OUJGODQ3Q0Y5MUMKLToxMEQzNDAwMEQ1MDhGNzA2REFGN0YyQzdGRkYzQzM4OUI4OUZEQTE3RjMKLToxMEQzNTAwMEFFRkU1NTE1QUU2RkQ5MDdBOTQwRTM4NEU4M0FCNERGQjUKLToxMEQzNjAwMDcwNkM2QkI2OTA3RjA1M0YyQjVFOENGMTFFMENEMzI3NDMKLToxMEQzNzAwMDJCM0IxMjM1RTVBNkFFRDFERTgzNjE3QTY4RjA5RTcyNTIKLToxMEQzODAwMEEzQzRFNzA0OEQ4QTVDRUQzN0JBREJFRDk0RDdBNUZCMjcKLToxMEQzOTAwMEE5NEMzRjcxMUZCNTg0Q0VBQjA4RkZGNzk5MThGRjkxRDgKLToxMEQzQTAwMDdDRjZBMjVEMzk2NzU2RjMzQ0M5NjA0RTIzQjk3NTBCMTQKLToxMEQzQjAwMEZDMEREQzk3Qjc4OUUyMzE5RjNENDlGMTNCODJCOTMzREYKLToxMEQzQzAwMDBBQzNGOUIzNzdENTFCOUNFNzMxODk3QjhGMzE0MzlGMjMKLToxMEQzRDAwMEVCNzdEQTEzQjk3RDgzRjk0QjREOUU2OTU1Q0IwOTREMzcKLToxMEQzRTAwMEZFNjc1NTAxQjAxRjUwRDI2NjJCQkQ4OUNFODcxNEJBOTcKLToxMEQzRjAwMERDOUZFRTdBOERGMURFRjFDMEFCQkIxODlGNEZEQ0YyMDMKLToxMEQ0MDAwMDMxQ0RCQkQzQzJGNDgzNUQ0QTNDMTYxMTZGMzU5OEJGNTIKLToxMEQ0MTAwMDUwRTRFRjY5OEQ3RjdFRThCMUJENDU5NEZGMzhGNENBRDIKLToxMEQ0MjAwMEI4MjJDQUQzMkU5NEZEODc3RTlEQzlGNzlDRjZERjg2NkQKLToxMEQ0MzAwMDcwQ0JDRUY3MzkyRjFFQjlERUE4N0IwQzkyRDA0MzhENkUKLToxMEQ0NDAwMEI0OEY2NEJBRkZFMzdBQzdDRTcyMkVGNEMzODEwRDg1MjAKLToxMEQ0NTAwMDhDM0YzNTFGM0Q3MDY0RTg3ODUwNURBNzNBQkVCQTNFRjgKLToxMEQ0NjAwMDc1N0NCNUREREZFQzIyNUZEMDZGRjQxNzkxRkQ1RjQxNzUKLToxMEQ0NzAwMEU3MzA2MUZCRUE4RkY3MTcyNTVBRThCQjU1RjgxMzQ5RTcKLToxMEQ0ODAwMDU4MEVFM0I3N0ZGNUJDMkFGMjdDNkFGMDVDNTZDOTQ3QjgKLToxMEQ0OTAwMEVERDNBREZEOTkxMUY5QUZBRkUzMjE4MzNCNUNFRjdFOTYKLToxMEQ0QTAwMENGNzMyQTc1QkRFQUZEREE3RUFCODVGRDlCOTM3NjI1QTkKLToxMEQ0QjAwMDFGOUYwRUU5RDQwRUVCMUQzRUYyQkZCNzk4MUNFNEM3QzgKLToxMEQ0QzAwMDI3OUE1QzkwOEJGODY5MzRGQUY4RkU5QURBMkZEMUU0NDcKLToxMEQ0RDAwMEU2RUY5MTc5Rjk4MTQ0MjNEMEJERTU4MTU0RTVGQ0Y3NkQKLToxMEQ0RTAwMDJCNjBCRDQyNzFFODE2OUNCN0FDNTZEN0JDQzUxMkQyQjIKLToxMEQ0RjAwMDg3QUFGRTJDMUI4N0RGMEJFODFFQTkzRUU0MjcyMERGNEUKLToxMEQ1MDAwMDk0MTU2QkRCODdGNkEzMkRGRjdCQUVBMDYzNTlCMjZFM0IKLToxMEQ1MTAwMEM4MzhCOTI0NTdDODY1MUI3NEM4NDI5RTg1MUQ5REE4OEMKLToxMEQ1MjAwMEUwMUQwREJGMUNFRUQ3QUM1MkY0RkM0MEJDRDk0MzA3NDQKLToxMEQ1MzAwMEJCMTNCNzhBN0JBQjEzRjVCRUVEMDQ1MTBCNDA0QjEyMDYKLToxMEQ1NDAwMDVEOTlGNDg5RjFCQUI0RkE5QzZDQzgxQ0I2Q0JFM0Q4RTcKLToxMEQ1NTAwMDJFNEY1MEM4N0RCN0Q0Q0NGNzVCNDNGNzVDRkQzMkMxOEEKLToxMEQ1NjAwMDhCMjFDOEQwMDk1NjNENDEyNDAzQzM0QkMwQzU3MDJBNDYKLToxMEQ1NzAwMDM0MzNCQzBDREExOTVFMDExRDBDQUYwMjNGNDNGODg5NEQKLToxMEQ1ODAwMEFGMEREODFFREM2RTY1RkZFOUYyMjUzQUIyQ0I2NUQ3NDgKLToxMEQ1OTAwMDBFRUQ5N0NGNTJGMDM1M0MzRTUwQ0I1NzlDM0IzRUE2MEMKLToxMEQ1QTAwMDJBRjc3Mjg3QzVDQkQ4N0NFNjdCMTUyRjI2RTI0RkVDOTUKLToxMEQ1QjAwMDE3MDNERTM0ODI5MzIwQzBFMzRDMjY0NkNFQTY3OERERTYKLToxMEQ1QzAwMEM2Rjc3RTZCQzFDOUU1QkFCM0M0NDc2NUMwQUQ3NzE3NkUKLToxMEQ1RDAwMDBDODE5N0RBQTFGOTY0OUVDMjI3MDNCOUMwRjg1MUU5MUEKLToxMEQ1RTAwMEY1NDhBRThEQ0IyQUREMzA1MDRDMjM3QjEwNEQ0RkM4MTMKLToxMEQ1RjAwMEEwNzU5NkM1RDYxQ0E3QTcyMkI3M0Y1RjM2NTM4RjdBNzIKLToxMEQ2MDAwMEI0QUNCNDY2MERBOTkwNUZFNjRFMTVFNTg5MzUyRkQzMEQKLToxMEQ2MTAwMDUxN0RGQkYzOTc4QTcyNzE0REE5QzE4MTVFRThEQUNCMjcKLToxMEQ2MjAwMDY2NUU4MkZBRDlBRERDMjczN0EzMTFBMDdCNjM3MkI2QTAKLToxMEQ2MzAwMDM4MTc3NjJCRjdDQTRENzJFNjVBQkEyRjY2QkEwRDU4Q0MKLToxMEQ2NDAwMERGQjg2MzAwRkNFQ0Q3MjJCNzkxQkNCODQ1MUM3QkIzQjQKLToxMEQ2NTAwMDU1RDBBRjNBRDY3RDRCMkVEOTMzQjMyRkRFODY3NEI4NzIKLToxMEQ2NjAwMDc5NkRERDI4QjI5QkY3MThDNUY4OUZBNERBQzZCRDgxOTUKLToxMEQ2NzAwMEY4MzI5OUM0QkQ1Njc1QkY1OEVGODlDMTcyNDBCMkFEM0EKLToxMEQ2ODAwMDY5QzkwQ0FENEI1REM3NTlDQzdCRDdFOUU2Q0Q0Rjc3NjcKLToxMEQ2OTAwMDZGMjAzRDAyMzYwN0M3MTU2MzE0RkJCRTY1Q0JDNDM0NEIKLToxMEQ2QTAwMEY0MzA3MDFENTY1RTQ3MjAyRTc3NEQwQjU2REQ5MUVFRkYKLToxMEQ2QjAwMDdBODRDNjFCODgxMzdDRjgwOEQxMjk3NTc4RThDQjc1NjUKLToxMEQ2QzAwMDNFOTQzQkM0Rjc4MUI1REZCQ0VBMjNCREY0MjkyRTA0QTgKLToxMEQ2RDAwMEM3Rjk0REFFRkI3MTVBNDc5MzJFOTA1MThBRjRGQjQ1MjIKLToxMEQ2RTAwMDJDN0EwMDA1MjFCRTk2OTA5ODczMTAwRjZENEVGMDFBOUIKLToxMEQ2RjAwMDU5NUU5NDc3MzZDQUY5OTkyQTE3MDM4QjcxM0NDNDRGNDcKLToxMEQ3MDAwMDk5Q0I1NThCRUUyMjU0Q0M2RTdFOTM2MEE1QkJCRDE2OTMKLToxMEQ3MTAwMDZCNjg5RTE3NjgzRDRENzJCMDgxRjhFNDY4RTIwN0M2RjkKLToxMEQ3MjAwMDRGNTk2RUM3MEFGRTU0RjQ1OUY3QjY5RURCQzY4OEEyNUQKLToxMEQ3MzAwMDBCQzJFNEIyNjlEQjg5QUZGRjg2NzQ2RjNBNjY3MTUwNDEKLToxMEQ3NDAwMEYzOTAzQzNFQjY0NjlDRTc1QTM0RkE0Njk1RDMwOTVEQzEKLToxMEQ3NTAwMDI2M0UzODlDQjhGNUEyQzVENDZFRDIwN0JERDlBNEI3NzEKLToxMEQ3NjAwMDI3RjcwNkRBQzg3RDFFRThERTNCNDZDODg5RUFENzdGODAKLToxMEQ3NzAwMDIzOUQ4QjdERjlDQzhDRkM5MTQwMTBGOTIzNUU5QzgzMUEKLToxMEQ3ODAwMDczRkNGNDhBMzgwNzVGQURFNDNEQTlFQ0UxN0Q4Qjc4NEEKLToxMEQ3OTAwMDU0OEQzQjU3RjZCQzJEREU4NTc5RjA2RjA1QkQyQjEyRkQKLToxMEQ3QTAwMDdGOTYzRTcxRTM1NUM0NkY5MUVGOEJENDc4QjQ0OTY5OEQKLToxMEQ3QjAwMEI3QTJENzdCMzdFRDI3RjJCRDUxMTNDNUEzNDVDM0JGMzEKLToxMEQ3QzAwMDM3NkE3QUEyOTZFM0QxQzhGNzQ2QkRCOTRBRkU0QUIxOTQKLToxMEQ3RDAwMDhGQTBGOEExNEI5NDM2QjQzRjBCQzc4NzQ2QUYwOUY3MkIKLToxMEQ3RTAwMEI2RkFDOTM1MEUyQjk1RDMyRDBFRDZDNzU3M0QwRUUxOEYKLToxMEQ3RjAwMEVERTE4OTY0RTYxOTU1OUU5N0FEOTNEOEJGNTZGMTVBNkQKLToxMEQ4MDAwMEZDQkNDOTQ5RUIyODdFN0UxNEZCQ0RFOEVGOEI3QkU5OUQKLToxMEQ4MTAwMDRBM0U5MURFMTJEMDdCODNDRDg5QzEyQ0JBNjdCQUI5NUEKLToxMEQ4MjAwMDNCREY0MUZFRjgxRjVBOURGMDBGNDM2ODdENkEzQzUwNzQKLToxMEQ4MzAwMDI3QkY1NDRCRUY4NzhFMkRDMjM4MEIzRkFERUU3OUE2MzQKLToxMEQ4NDAwMENEOENFNUQ1RUJFOTU1MTBBNTg0RjMxM0M4QUYyQURGREQKLToxMEQ4NTAwMDI5ODM5N0M2MDFFRjQzRDUwODNCMTUzOTM3QTVFOUMwQTEKLToxMEQ4NjAwMDE2ODY4RjE4REIwOEIwMEQ5MTBGMzAyOUY0OEJDRDRGNDEKLToxMEQ4NzAwMEQyRDRDNzM5MkVEMEY0NEZBOENDRDJENEI3QzU4OEY3QUMKLToxMEQ4ODAwMDMyRTA3MUZBMEIyQTQyRUY0ODEyOUQzRkQxRjQ4MzAwMzcKLToxMEQ4OTAwMEZFQUQwOEJEMTdCOTI3N0VFQTRFN0U0RkUyNkZFMDNDMzEKLToxMEQ4QTAwMDQ1RjI2NTI1OUFGNjI2NzlBQjRDRkM1REZEQTU1RTQzRjUKLToxMEQ4QjAwMENGOUY1MkE2MUJGMTU2QjkxQkZEMUM5QzY3NDI5RkI2MTkKLToxMEQ4QzAwMDNFMjZFMDAxRUExN0IzNUJBRkM5NEI5ODZDREFGMjg1RUMKLToxMEQ4RDAwMDc5NEE5RTYyMkM4Q0Q1RTQyOTA2RjEyRUY4RkVEODYxOTcKLToxMEQ4RTAwMDFERjM0NTA1RTRGQ0FBQkE4Q0YwNkMwMEFGMkQxQTZGNEQKLToxMEQ4RjAwMEM3NDBGODVEQzdDNjVBMUNGNDk2NkE0MkNGQ0IzMkM5RkUKLToxMEQ5MDAwMDQxQUE0QjhCRkY1MUIzQjVGODFGRURENkUyN0JDQzUyNDkKLToxMEQ5MTAwMDJEQkVEMzlCQjVGOEJFQjA0NThCRDc0QzhGMTY2RkQ5QjMKLToxMEQ5MjAwMEVCMjY2OERBREJEQjZCMzRFNUJDOEQ1NzY4REE1RkU0NDUKLToxMEQ5MzAwMDlEQTEyOThGN0JGMTdBNERGQkMyOEU4NTlBRkFFMkFFQ0EKLToxMEQ5NDAwMEU1OUE3QTk1Q0Y4NkUzODNGMUJFRDUxMUZDQTYwM0RENzcKLToxMEQ5NTAwMDY5RjhBMDc0RTdDRjM1RjNGRDUwRjQ5RjlGQTdFODA1NjEKLToxMEQ5NjAwMDg1RkVENzJCNzZFNURERjhDM0Y3OTJCODRFOEIxNTdBOTYKLToxMEQ5NzAwMDcwMzBERjUwNkRFMDc4RUUzRDVCNzI2RDFDRTkwNUM1REYKLToxMEQ5ODAwMERFQjkxNDdCMDczOTRGODlCMjU1OTQxRDdFNzFCRkEyNTEKLToxMEQ5OTAwMDY0OUZBQjM2REU0NkY3MkNDNEZEOEE4QUMzRURCNTA5MTkKLToxMEQ5QTAwMEQ0M0VFMjFERDZGNDRBNDk3M0RFMURGOTJFNkJBNjY3RkMKLToxMEQ5QjAwMEFEOUMyMEQxQkQ0NDcxM0YzMUYyMUU4NEZBM0VBQkRFRjYKLToxMEQ5QzAwMDE5QTMzOTI3MUZFRUJEOTY5QTVGQzI3ODAxOEMxNDJGRDgKLToxMEQ5RDAwMEU4Q0NGQzNFMzFEQTFGNzI2Qzk0RDk1RjczQjNGRkY2NkEKLToxMEQ5RTAwMDY3QzlDRDc5QTc2QkNDRkUwQ0UyRUZFQ0IxRUVGNTc5MEYKLToxMEQ5RjAwMDg4QjdBMzNBODc4REZEM0RFNUZERDYwMDZEOENERjJGRkUKLToxMERBMDAwMEY1Q0NBNDNDRTkwMDg2QkI5NEQ3RDRERkIzNjMyNkJEMzQKLToxMERBMTAwMDVCQzRFNTVCMDMxNTIyQUNBNjNGOEZFNkI5MUZBNDcxN0EKLToxMERBMjAwMDBFNDhENkJCNEJCMUVGQkIxMzNFQ0YyMDdCNjZBMjczMzMKLToxMERBMzAwMEZFMTIzRUZGN0UzODJGRkNGQzdCMTRFRTBGRjU2RDQwOEUKLToxMERBNDAwMDY3RjNGMDc5RUVDRjI1OEU1MzNFQTdDMUFBQzJFNDc3RTMKLToxMERBNTAwMDlENDE3OTRGMkFFMkI2QjkwQUJFRDRCODZEOEUzMkZGMjUKLToxMERBNjAwMDAxMUM2MjI5RUFGM0I5NUQ3RjY2QkNBQzQ4RUI1M0UyNjYKLToxMERBNzAwMEJENjY4NzE1QzdCRjcxQUNBNTg0RUY3QjM5NEIxRDIyRUUKLToxMERBODAwMERFNTdFM0I4MzFGMkY3QjFCMzY3QkE4N0I1MjJFRDg4NTQKLToxMERBOTAwMDI2OUU4Njk3OTI4N0NDNTc0NkU2QzU0MkZCMTZFMzFGMjMKLToxMERBQTAwMDU4MUZDQjc2RThDMEZBNzRDRTNGODZDNjNGQ0FGOTg1QzgKLToxMERBQjAwMEI5Q0REQUZCRERGMzVCM0VEMkYwREYwMkNGMjc5QUZBNzUKLToxMERBQzAwMDQwNEFEMDMwMDZGNzFGNzg3NUY0RDQxQjEwN0ZGREFGQTUKLToxMERBRDAwMDk4MkEyODlFNDVCQUY1RTQ5NTg3QzYwRkRDOTc3Nzg5ODIKLToxMERBRTAwMEYwMUJDRUI0Q0ZDRjc5MURCRENBRkQ1QTc1OUZGQjVCMkQKLToxMERBRjAwMEY3NzEzOUQwMUE4OEI4RUZFNEQxQzRCRjJBMzRGRTA5Q0YKLToxMERCMDAwMEYyQzk4RjBFNEEyMzFDNDNFNTczNjZFNzhCMzhBOTU3ODkKLToxMERCMTAwMDc5NzdEQUFCQkMzQkVENTVERTg5RjYyQUVGNDI3Qjk1OEYKLToxMERCMjAwMDc3QTFFQUJCREQ1RTA5OUM3NEJGNjQ4RUU0N0E2QTgxRUEKLToxMERCMzAwMEM0RUY3NjBGRDEzRTlCOTYwNzhCRTg1RDYzNTM3MTYwMEYKLToxMERCNDAwMDlFMjRGM0JCREQyM0Y0N0Q4ODc3QkI0NTkyOTVGNDY5NzEKLToxMERCNTAwMEVBMzVGNDZFRjdGMDA4Q0Y1MUIyRDhEOUY5ODlENzUwMjkKLToxMERCNjAwMEJDNzBEODI4RTRBM0Y0QzU2RjY2RDI3QkJEQzc1M0RENzMKLToxMERCNzAwMEM3ODlCRjNGOTU2NDFGRjNGM0VCMTI5RjJCODMzMzYwN0MKLToxMERCODAwMDlDNzExNkVGN0FCRkNCMTNFNzM0MjdGM0M0Qjk4OTBBMjcKLToxMERCOTAwMDQ3RTYwQkJENTY0QUIwOUNFODcyNkYyRUJGQkJEQTY4RjEKLToxMERCQTAwMEUyNzc1NzM4OUY1MzE3NzYxRjIyRjI3RDVDQzkxRjREQ0QKLToxMERCQjAwMDNFRDIxRjZBREUyNzIxNUY5QzM3RDNCQjM5NUE2N0NBMjIKLToxMERCQzAwMEZEMjZGMTZFMkVFMENGQTA3Nzc2NzQwRkNBNDVGMkJEMjgKLToxMERCRDAwMDFCOUNFMjFENUVERUE2RjBGNzMwMDlGOUNBM0RCRDQ1OEIKLToxMERCRTAwMEEwNzlBN0I3QjJFN0MwN0VEMjI3QUZFNUI5OTNGMzUzQzgKLToxMERCRjAwMDQzRUZDNzU2QzY2RjY3N0ZBRjIwREZDNkYzRTI3QTc5N0YKLToxMERDMDAwMEZGQTgxN0VFMjRGQTlDQzc3QzYxNTY3RTc5RjRGRkQ3RjMKLToxMERDMTAwMDYwMzhCQ0Y1MkZGNjNGNUE5MDE5N0FGNzE2RjZERUFENEMKLToxMERDMjAwMDIwM0YyQ0FGQTdBRTNGMzRDRUU5RTU0MkNEN0JBOUU1M0UKLToxMERDMzAwMDQzOEZERDkzNEI3Mjg2NzQxMUY5NDg1OTlBM0Y2Mzg4N0MKLToxMERDNDAwMEZFRDNGMzA1RkRFRjRGNzc0REEwRjk5NzM3OEJCQzYwRkUKLToxMERDNTAwMDg4NkZEQTZGRjk5OEU4REM2MzE5RjIzRUJGREEzRjcyMzkKLToxMERDNjAwMDlGMkJCN0Y1MzAzRTcwOUZGMzY4N0Y2MUZCQkM4Q0YwNTMKLToxMERDNzAwMEE1RUVCM0JGN0JFRkEzMDVCNjczREZERkY3N0Q3NzZFNEQKLToxMERDODAwMDFBODE3MTZERDI1MDc5NzZCNDNFNjE3RTk5NDlFRDNGMkIKLToxMERDOTAwMDU2QUZFRDhGMEUzOUU1QjFCQjQ4REVEMTZGRTk1NEUyRTYKLToxMERDQTAwMDFFQjJDQkM0MTdBQTVERUU1NEUyMjAyOUIwODNFRDAyNjgKLToxMERDQjAwMENENEI3MjcxQjdFNDYxRkJBOEU2M0JEQTI0QjQ3Rjk0RTQKLToxMERDQzAwMDU3NzBBRjYxN0IyMTVGNjg3MTEwNUY3NzIyRUZGOTQ5NzAKLToxMERDRDAwMDFFRjRDRTU4Q0U3MzQ3QzRENzNGOEI3NURGNDQ3OEJDNTMKLToxMERDRTAwMEY5QUYzNUEzMjhGRURFRjI5NzJCOTQzODRFRDhBQjcyRUQKLToxMERDRjAwMDg1M0ZDQjY5N0VEQTQ3NDEwMkYzNkQ5OUIyQkUwQTczNjQKLToxMEREMDAwMDMzRkJDOTU1RTA5MTQ1NUU0M0M5OTNBQ0RGQzFGMURGRjgKLToxMEREMTAwMEZGMDExQTE0QUZBQUQwNDMwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEREMjAwMDFGOEIwODAwMDAwMDAwMDAwMEZGRkI1MUNGQzBGMDAzNzQKLToxMEREMzAwMDhBNzM5NDE4MTg3QTM1MTgxODM2NkIzMjMwNjg2ODMxM0YKLToxMERENDAwMDMwODgzMTIwRTQ2ODg1QUY3MTUzQTY5RjlCOTU4MTgxMEYKLToxMERENTAwMDE3ODhGOTgxNTgxMDg4RDczMzMxMzA2QzYwMjI1RUZGMDQKLToxMERENjAwMDExNTEwNEZCOUUyMDAzQzM1MTIwN0YxOTkwRUUxNDY2Q0QKLToxMERENzAwMDYwNTgwNTY0MUYwM0UyMkY0MEJFODAxMDAzODMwQzEwMUYKLToxMEREODAwMEZGMTU2MTYwMzAwNUQyQzE0MDZDMDNDNEM3NDVGMTlCRUIKLToxMEREOTAwMDdGODI4MDdDQkMwODJBQkYxQjhEOUYyNzhDNUZGRjI1NUMKLToxMEREQTAwMDExRkNGMjBGMDhDODYzQzMzMjE2RTRDNzQ3MjIwNTdBOTQKLToxMEREQjAwMDA3MDIzNzI5QTJGMjhGQ0EzMzMwM0M1NDYwNjBEMDUxMzkKLToxMEREQzAwMDgyRjA5QjkxRTRFRDgwNjJDN0U0MjFFQzI5OTJDMEI4MTcKLToxMERERDAwMDA3Q0FCNTI4NjIzNzc3MkE1MEZFMDQ1MENFNEI4OTM0RTMKLToxMERERTAwMEY3RENEMzQxRTVBRjM0ODREMDAwQkMzRTE0RTRBODAzOTMKLToxMERERjAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNzEKLToxMERFMDAwMDAwRkZFNTdEMEI3QzU0QzVCOUY4OUMzREU3RUM2RTkyQjQKLToxMERFMTAwMEREQ0QyNjIxMjFCQ0MyMjYwMTQ0MERCODQwMENBMDQxMTUKLToxMERFMjAwMDM3MEY1Mjk0QThFMUExQTIyMjZDNzgyNDIxRUYyMkY2QTgKLToxMERFMzAwMDYyMUZCRkRERjA4OEM0NTIxQjFGQzVENDhCNzY1MUIwNjIKLToxMERFNDAwMEQxOEIzNjQwRDA1ODE3NUM5RTQ1OEI2REU4NDVBMEQ1RTgKLToxMERFNTAwMDdBMTM0MDVFMDZCMjQwQTVCNjQ1RkRDRkY3Q0Q5Q0RERjYKLToxMERFNjAwMDczNEUzNjI2NkFFRkZGRjZGRUZGREI5RjFERTZDQ0NDMzUKLToxMERFNzAwMDM3MzNERjdDRjNCREU2OUI4OTY0QkU5MUQ4ODcxM0YyMEMKLToxMERFODAwMDI1RkM2RTI1RTQ1MTg5MTA5MjE4NEU5QjNDOTNDNjlGNDkKLToxMERFOTAwMDk0MDlCMUVEN0UyNEVBM0I5OTg0MEM5RTZCNzA0NkQxQzcKLToxMERFQTAwMEEyNUYwODY0NEU0QjA2MjFDOTY1OEQ3NTQ2RkEzRDc5MUYKLToxMERFQjAwMDkxN0RCQ0U4MDhDMzE5OTg3Q0U0QkFCRDA5ODQwQzcyNTIKLToxMERFQzAwMEQzRjY2NjgyQkYyRkU5N0YzRkI3MzdDNjkxNzRDODc5MTIKLToxMERFRDAwMDg1QTIzMUUxRkE0QTlBQkM0OEZBN0I4N0FBQkU5QjE0MTQKLToxMERFRTAwMDc1QTZERDQ4RkJGQjUxRkQyMEI3ODU5MDFGQzM3ODQ2MjIKLToxMERFRjAwMDQyQTlDQjQwQjJFOEI4Nzg1RDZGMkVGRDNGM0EwRUFGMzUKLToxMERGMDAwMENERTg1QjI5MTAyMjFBMUNCMTQ0MjQyNDI2MjM0OEEwMDIKLToxMERGMTAwMDlEQkU5RjY3M0NFREQ3NDkwOEE3MzZBQUM4NEFFNzQ5ODYKLToxMERGMjAwMEM4QjQ5NjA4RjU3Mjg5ODA3ODg4Q0Q3NjI1N0JFOTc4MjMKLToxMERGMzAwMDU3N0QyRUUyQkM1NzBEMjJBNDlERDYyNzkyRDM0RTY4NjIKLToxMERGNDAwMDNBOTVDNDYxQkRDNzJEMjMwNjQyN0VENUFFM0YxMjA3NjgKLToxMERGNTAwMDg1MUI5QjE5MjQ1RTE1REMwNjBGMjEwRTEzQzVBRkM3NjgKLToxMERGNjAwMDhDRTkyQThGOURBN0M5QzQ3MTBEMjFBQjNEMEU0QzU3N0EKLToxMERGNzAwMDc5NDY2M0ZBRDhEMDI3REI3MzA2RDBGOTBDMzJEOEU5OUEKLToxMERGODAwMDQ4NDg4MzYzQTZERDkxMTE4NjI3QzcyRDMwRTczODA5RkQKLToxMERGOTAwMEM5MjYyOUFFQzQ1NDVBMkZEMTQwQzg0RDg0REM0MkYzNUYKLToxMERGQTAwMDc1MjMwODE5NDlFQzg0NTBGQzNEOTNCQzJDQ0E5RDAxOTMKLToxMERGQjAwMDc5MDdFNjQ1MDM3MUMzN0M2MzMyMDMyRTkxRTIyREM2RDcKLToxMERGQzAwMDY5Q0Y5NTFDRTFFRkY4MUI4MERGNUY3ODJDMTVENkMxNzcKLToxMERGRDAwMDdEMUJDQ0VGMTlFMkVDRjAwMjlFREQ0NkU3MjY1QTdGNkUKLToxMERGRTAwMEE1RUM0QzVFNEFFMThBNDZEQTJFODNBREJCOTQxMDFFNDYKLToxMERGRjAwMERGNENDMDFGRUQ4RkNDQzlENUFDRDczMDE4NDcyMkI0NDkKLToxMEUwMDAwMDczREMwNUVCNjQ3MUIyNzU1QTA5NzQxNTYxMURFNkYyOTMKLToxMEUwMTAwMDc1NTg2NTc3RDkxOUZEMzg0OTI0RkExMUVENUFGQUIxQzYKLToxMEUwMjAwMDY0NjhFOThGN0VCMTlGQkE5RUU3NjlCRjRENDJFRDNCQzAKLToxMEUwMzAwMDUzRTkzQ0JENEIwQ0NFNERGNERCNjBBMTUxMDBGODBBMTYKLToxMEUwNDAwMEJDMjVDNDgwRkQyQUY5NDE2NTUyQTA2M0I0MUE5RTE3MEQKLToxMEUwNTAwMENCRTlGN0Y2MEU3M0NGRUYyRDA2RTI1MkU4NzI1MzJBQTIKLToxMEUwNjAwMDdDNzdDNENFQTBFMzI2NjY0N0VDNEM2QkNGRjE4N0U5MDIKLToxMEUwNzAwMDI0RDkyNUM5NDBFRjBFNEMxQjA0NDdBQzAwRTM3QzQ3NzQKLToxMEUwODAwMDI0OUIwNDlDN0Y3MkE0RjZGRkQzRUQwOEYxRTE3QTM3NUMKLToxMEUwOTAwMEYwNzU1NERBNTEzQzIwM0Q3OTFGOEI0NjNDODg1MDM0NTIKLToxMEUwQTAwMDM5MENFNzE3MUNDRjE3QUQ0NTRGNDM0QTQ4RTM2ODU4NzIKLToxMEUwQjAwMDVGOUE1Rjg3RjQ2M0E2NzkyQkU2OUJCMERDMUVDQTNGQUMKLToxMEUwQzAwMDhCRTVDOUFDM0U1RDVFQkExOEJERTM1NTU5MTdEQTZFRjMKLToxMEUwRDAwMDAzQzI5MTQyNzA1RTQ0Mzg5NjUwQkY5QjMwM0YyMDk0RkIKLToxMEUwRTAwMEZGMjVENjFGQ0FFQUY3QjcxRjI1RURDRTBEOUVDMkY5NTAKLToxMEUwRjAwMEJGMkUzQjAwOUZDMkRCRDZDMEFEOTQyRTBFNkUxMDdDQUYKLToxMEUxMDAwMDI2OUEwRkVDOEM0MUZFNzU3RUZEMEM5Rjg5RTI2N0Q3NDUKLToxMEUxMTAwMDM4OTMwQkVBOUZERjk4ODNGOUJDRURFRkRCMjQ1QTVFNUUKLToxMEUxMjAwMEI1NUQ5NDIwNkZEODc5RDZENjQxRjE1QjYzNkE3RkZDRTgKLToxMEUxMzAwMDY2RkEzREI4NUQyNDJGNjA3N0QzNzE5RjlERTJCNDQ4QTUKLToxMEUxNDAwMDNFNjNGOTkyMjg5NkFEREFCMDZCMUVDMDJENkIzMzkxMDkKLToxMEUxNTAwMDI4MEFBN0VBQ0REMjNCNkZBNkY5RDIwMzMyODEyQTU1MEQKLToxMEUxNjAwMDlCRUE4QzgzNjk3RTg5NEY2ODgxRkM4QTlEMUY2MDNGOTIKLToxMEUxNzAwMEREQjlBNDBDRjZGNzM5RTA1Qjk0MkY3NURCREE5M0VFOEEKLToxMEUxODAwMEE2REZDQjdENUIwQUEwN0VGOTY2QzEwOTRCNUNCRTdFMzMKLToxMEUxOTAwMEQ3ODcwMEJGQkM1NTFFMjE1MkY4MTVDRDMxQzRBMURBNzYKLToxMEUxQTAwMDJGNzlEQjE3REYwOUUzQUQ3QTQ3MjY5NEVEOTFCMkFCMDcKLToxMEUxQjAwMDBGMTk5MTE4QTQ0NjIzRTBCNTZBRDMxMzQ2RTA5QkU3RjQKLToxMEUxQzAwMDNDMDdCMDFGMDU5RjU1MkZEMzdFNjhCQkVBRDcwNDI3QjUKLToxMEUxRDAwMDRDQUREQUMwRjhDRDg1MzdBM0U2QkM2ODgxNzlENTE5OTYKLToxMEUxRTAwMDQ3NDFGQjM3MUYzNTQyQkQ1MjVGRjFFQjUxMEUxOERGM0YKLToxMEUxRjAwMDA2NjMwMThDNzNGRDA2NjM4OThBNkY1NjM0RkY1NjMzQkMKLToxMEUyMDAwMEFFNTM0REU5MDNERDE5QkRBRkU3MzlDRUI3OTU3QzM5ODMKLToxMEUyMTAwMDE1NDA0OERGOTJDRjM4NDNDNTg3OUUzM0M0MjFGRDU3NTAKLToxMEUyMjAwMDM0OEJDNDExODExRjc4REZFN0ZCNjA4Nzk1RjEwM0JFNTMKLToxMEUyMzAwMDVFNEJFREMwMUFDMkVCNzVDOUNFRDc0RjBBNjZDRDg4Q0EKLToxMEUyNDAwMEMwRTcxRUU3RjJBMzkxQ0I4RjI3NDE3RUQwRjQ2OTJFNjEKLToxMEUyNTAwMDNGRDY3MUY5RDFFNDcxRTJGNzY3M0Q5MzMwNURFRjcxMUMKLToxMEUyNjAwMDYxRkFCQzY3MUFBNjNFNEYxMUQ2N0JDMTMzMDdEMzhEMjYKLToxMEUyNzAwMDFFMzc3RTdGQzk1Mzg2NjlCM0E3MTZCRkJGRTI1OThFOEEKLToxMEUyODAwMEU5NjY4RjE3QkZCRkU2NTk4MzY5OEJBNzExRDNBRDlFOEYKLToxMEUyOTAwMDI2NEM1QjNEM0VBQ0Y3QkFBNzE5RDMzNjRGMEI3RUZGMzkKLToxMEUyQTAwMEI1QTcwRDUzQkYyNzgwRTk0RTU4NUY5QTA2M0NFRDk4RkQKLToxMEUyQjAwMEVFRjYxQ0MzNzRBRkE3MDNEQkVERjc5Q0MxNzQyREM3NEEKLToxMEUyQzAwMEJCMkQ5QkU0NDgxNDZGMzYxNzQxMzkxODVGRThDQTkxOUIKLToxMEUyRDAwMDY5M0VCRTg4RTU5M0U2N0E3MzhDMzQ5RkU0QTY3OThBMUEKLToxMEUyRTAwMEM3QzE5NTgxMUMxM0NEMEZBRTY1RTUyOTNGMjRCOTY2RTIKLToxMEUyRjAwMDlBNEZGMUIyRjJCNEI1QUVEQzI4OUE0RjZCNjRFNUEzNDUKLToxMEUzMDAwMEQ2N0I3M0EzNjk3RTk0OEY5NTVGQjczOTkwMUI0M0YzRDcKLToxMEUzMTAwMEQ3QjVCMEYyQjE3RTkyNjdBMUY5QjEwMTk2MUY3RkQwNTcKLToxMEUzMjAwMDk1NjdBNUY5RjFFRDJDOUZGNUExMzdDRjQ2RjM1OTFENUYKLToxMEUzMzAwMEFDRkQ0RDVEODFCQzU4OUFCRjI5QzhDQTZGQjk0QUYyN0QKLToxMEUzNDAwMEVEMDM0MDJFMEI5OENGQjVFNEU0QzdEMTdDQUU5REU1M0MKLToxMEUzNTAwMDBCODYxNjRCOEUwOEY0Qjc1M0VFNTgwODIyN0M4NkIwMTUKLToxMEUzNjAwMEQxMjU1MTdFQjNEM0Q4RjExMDE1N0Q2NEExRjBBQTRCMEQKLToxMEUzNzAwMEEyRkMzMzIwOTM0NTUwRkVCMEYwM0E5NjA3OEM2NDE5MDYKLToxMEUzODAwMDk0M0YyQUJDOERFNUJCNjUwNzk2RkY1QzM4QzBGMjQ2MUEKLToxMEUzOTAwMDA3OTZGRjg3NzAwOEYzN0I2NTE3OTZFRjEwRkVDNEYyQUYKLToxMEUzQTAwMDQ2MTc5NkZGNUUzODgxRjlGREIyMUJDQjNCODUyRTk2NTIKLToxMEUzQjAwMDM3QkFCMUZDNDlFOTUzNTczRUVEMkZERkUwOUUyRURDMjIKLToxMEUzQzAwMDA4NzJEQjVEODY3MjU5NkE0OTA2N0U1OUNGRjlGRjA0RUYKLToxMEUzRDAwMDQwMDYyREFGMUY2NDQ0MzlCOEYzRjNBQzE3NDU4MUQzMjEKLToxMEUzRTAwMEY2MDBDODk3QkMwNEZBMDU4NTMzNUI0ODA0N0Q4MkMyRjkKLToxMEUzRjAwMDExRkI4NjczQ0IxNzkzMzQ3MDZFRjlBMjRDODFGMzIwMTYKLToxMEU0MDAwMEMyODlFQTFGOUM5RDVGRENBNDFEQ0YxN0U1MEE5QzEyMDAKLToxMEU0MTAwMDlDOTdCNTdGRjNCQUU1Q0I2Q0VENzhCRUFDNTRFMEQ0RjUKLToxMEU0MjAwMDIwOUNCOEZFOEQyNzIwNEZENEMwMDlDOEE1MEE5Q0U1QzIKLToxMEU0MzAwMDA4MjdCMTdGRTM3MTE5Mjc2QkUwQjg4QzRCMTQzODc1NEUKLToxMEU0NDAwMDA4Njc1MEZGRTAwNDhDMzc2QkM3NjNBQzUwRTAzQzg2MzQKLToxMEU0NTAwMDc4MUVENkJGNzlCOTRDNTNCNEUzMzE1NTI5NzA5RUMyQUEKLToxMEU0NjAwMEYxQTRGNjBGQ0U2RUFCMTYzRkJCQUQyMUZDQUM0NzM4MjYKLToxMEU0NzAwMDIzRkIzN0FGNUM5QjE2M0ZCOUI2MTA3RTM2MjE5QzZCRjEKLToxMEU0ODAwMEZCMDc2N0I3NEQ4QjlGRERCNjEwN0U1RTQzRkM4Q0U5QzIKLToxMEU0OTAwMERGQkM3MjYzQjVGOEM5OEQwREUxRTcwRDFDQ0ZCOEZFODYKLToxMEU0QTAwMDhENjc2RkEyMTYzRjdCMTM0M0Y4MDkyMDlDMUJGQjM3MzcKLToxMEU0QjAwMDlFRkMyNDJEN0VGMjkzNDJGODc5MDdFMTRDRUUxRjlDREUKLToxMEU0QzAwMEJENDk1QUZDRUM0RDBBRTFFNzBGMDg2NzRBRkZFNjk1QTMKLToxMEU0RDAwMDNGNTA4QjlGRkM4MTIxRkM3QzgwNzA3MkRDQ0Q0Q0E5NkQKLToxMEU0RTAwMEE0NzBBQ0JEQzNEOTNGNEM4QjlGRkRDMzQyRjgzOTg5QTIKLToxMEU0RjAwMDcwQTY1MjM4RTk3REMzMjk0OEQxRTJBNzIwMjU4NDlGMjAKLToxMEU1MDAwMEYzMDhFN0I2RkVDMUQ5OUZBMkM1Q0ZGRTk0MTA3RUFFMzgKLToxMEU1MTAwMDIwOUMzQkZBMzdBRjgyRTE1QUZDMTQwQzY3RjhCOTU1REUKLToxMEU1MjAwMDFBODc3Mjg2Q0E0RTI3RDhFN0RGMTk5QUUzMTIzMkMxREEKLToxMEU1MzAwMDRFNjI3OUQxRUUyNEEwRjc4ODhBM0U0M0RBNUQyMkFEOUYKLToxMEU1NDAwMDZGRDkxQzM3RkUzMUEyRDY2QjcyOEQwNjRBQ0Y1NkFBMDAKLToxMEU1NTAwMEU1QTlGNTlBRDg0OUQxMUEzRDJBQ0UxNUFGQzkyNzRDNUQKLToxMEU1NjAwMDFCQUNBOTlGNTg5NEE2MjkxRjM4RTczQTRERjkyMEY3MEMKLToxMEU1NzAwMDc4NEQ3RTQ4RDk0RDlBRkFDMzZBNzMzNUY5RTFDQjZGNkQKLToxMEU1ODAwMEQ3RDQ0RkY1Q0VENEU0RDNEN0RDQUZBOTNGQjI3MTgxNTUKLToxMEU1OTAwMEE2RkM5QUE2NzI0REY5QjVCRUE1OUFGQ0Y1Q0RERkQ3QkIKLToxMEU1QTAwMEQ0MUZEM0IyNDI1MzdFNDNEQjYzOUFGMjcxODEyNzM1ODUKLToxMEU1QjAwMEY5MDkwNzlFRDVENEJGQjFGRDA1NERGOUM0NjNBRjY4MTUKLToxMEU1QzAwMENBMjc3NzZDRDVFNDZGM0VGMzZCNERGRDI5QzFERDlBMDgKLToxMEU1RDAwMEZDQUQ5RkJEQUJBOTlGNDNGRTUzQUI2RjlCM0ZEMEQ0MTcKLToxMEU1RTAwMDlGNkEzRkExMjlGRjRFRjIyNzNBM0Q1NTZCMUZBRkNDRTIKLToxMEU1RjAwMDIxQ0NBRjMyODhEOUFGMDFBQjExRjNDNkMxMTY2NkE3RTMKLToxMEU2MDAwMDU4NEIxQzI3MjlGRDE4NzcyRjc0MENBMEY0MDMzNDAzRjIKLToxMEU2MTAwMDc2NTFDRUUwQjI2QjNBRThGN0VGRERFNEJFQzY0RUJGMEUKLToxMEU2MjAwMDdGQ0ZFOEJFQzExRTQxQkZBMUY0MjY5MDY0NDgxRDA2RkQKLToxMEU2MzAwMDQ4RjVFNThGQ0E4Q0RFNzM4NzVDMURENTQ5REJENzE4OUEKLToxMEU2NDAwMDgyQTNFMjY4RkUyMzMxRTczRUEwQzdGOTA2MDNFRTgzMEEKLToxMEU2NTAwMDY4OTFENDQyQkQ2ODEzNDFCQkU5RDFENEFDMTdCREFBQkYKLToxMEU2NjAwMEZEQjA2NjE4RDUzMzg0MzBEQzM1QjIzQjE5RjUyOEMzQ0MKLToxMEU2NzAwMEY4M0FEMDlCRUE4N0QxNzkwRDI2NjREMThBNzFCQkJDNjgKLToxMEU2ODAwMDIzNjhGQjYxMjVDOUUwOEYzMDE5OTkzRjI0RDRCRjkxREQKLToxMEU2OTAwMEY2OUY4MUZEMkY4MUZFNkI3QUU5REY5NDM2NDlEM0JGNjcKLToxMEU2QTAwMDM5QTU0Q0QzQkZEOTQ4RkJCNzEzRjI5MEUxMjZERUJGQTIKLToxMEU2QjAwMDE5RkQzNkNCNTY0Q0M2RkU0RDI5NjVEOEZGQTM0NjZBRDgKLToxMEU2QzAwMDc3QTlGQjhGMEVGNUZGODg4MUY2RUIzMTMwQkJCOUM3MTgKLToxMEU2RDAwMEZDRDM2RUQyQ0UzRkE1NUMzQjdGMjM5QkZGNEE0MzJFRUIKLToxMEU2RTAwMEVGM0YxQUU3QkY2QTQ1MEU5QjdGNEEzOTlCQkY4OUMxM0UKLToxMEU2RjAwMDBERjU2RjBCRTFCRjAxRkFGRjY5MkZGRDlCRDJCM0I1OUEKLToxMEU3MDAwMEYzMUY1RUE5OURCRjg5RjVGRjk0RTE3NkRFQkYwNUZCOEYKLToxMEU3MTAwMDdGN0FDNTZENkNGRUMzMkJCMTdGQTNDOUVEMDRGQTMxQkUKLToxMEU3MjAwMDBFODlBRUY1RDFGRUM5NTA2QTI1MEQwNDcyQTFGRDQwRDcKLToxMEU3MzAwMDNBM0ExRUZEMDg3NzFBRDI3MDFDREY4QjY2RjQ3NjI1RjQKLToxMEU3NDAwMDlBRDIxQkYyMzMyRkIzQzM3RDk0NzM1MkJCQUE5QUQzRDAKLToxMEU3NTAwMDdBQzVFNjFDMjNGMDNEMkM0RjIyNjQzMTFGRUFBMjM2MTUKLToxMEU3NjAwMDExRTk5QjNDNkRGMjhEQTRFM0JERDAyNjdBMjFCRkU4NzAKLToxMEU3NzAwMEU5MjkzRUUwQUYzNTI2MzJCRjA4REE0OTI0MDBERjNGMDEKLToxMEU3ODAwMEZFRDk5ODE3RDRGM0QyQTc4QjFCRTU1MzkxRkM0NURFMzUKLToxMEU3OTAwMDVDMzJCQTk2OEVFRjAyMTA4MTJBN0Y5Q0RBNzE2MDE4ODMKLToxMEU3QTAwMDdGNDhFRDFFNDJFRDlGMTMzMkVCRUYyMzZBRUY0MUJFMkYKLToxMEU3QjAwMDgzREE3QjY4Mzg5MzNBRTY1N0YzQkFERTFGNDFDNzVGQzYKLToxMEU3QzAwMDQ0OTQ5RjBCRTc3OTJGNkUyOTBBNEY2MkZCRjdGODVBQTIKLToxMEU3RDAwMEMxMDdFQjMxN0Y3OTBDNDU3RTc4M0NDNURFMDQ0REJFMjgKLToxMEU3RTAwMEM2QzRFQTA3NkYxMzdDMkYwODA4QzMwREY4OTlDMUUxNkUKLToxMEU3RjAwMDExMTgyRkNEQ0ZCMUIzMzY0Nzc3REVCMTVGQjBEMTdERTEKLToxMEU4MDAwMEI0NjYwODVEOEIzMDlDNTlDNDI1MEZBNEVERUY1RTU2QUQKLToxMEU4MTAwMDJDODM2QkE3NUQxMDg2ODE5RkIwNjZBMTRDMDI2ODM3ODAKLToxMEU4MjAwMDdCMTM0OTA2MjcwRTNBREVGQkVEMENGRTBDOTc3QzUyNUIKLToxMEU4MzAwMEVENDc5QjIzOUI1RDQ1NzQzQzczOEE0NTFDRkZBQzY5ODcKLToxMEU4NDAwMERBRjIzRkVEOEM3MTE5QzZEMjc0Q0Q1M0Q4Q0ZERDQ1QzUKLToxMEU4NTAwMERBRjI3QkU3NjhGM0Y3QjlCNTc5MkE1NzY1OTBBQjBGMjEKLToxMEU4NjAwMDk0RTlCRjUzQjQyNDgxREYzMUY0MUIwMEUzN0M5MEUzQ0YKLToxMEU4NzAwMEUxQzE1QUQ5QUI1OTU3NkE3NjFCOTU3MjcwODRCODA5QjEKLToxMEU4ODAwMENFMEJEQjhCM0RFQkNGNUZBRUNEMTc3QkI1Rjk4NTZCNDgKLToxMEU4OTAwMDc0RjAzOUREOUNFMkVCN0YxQ0U4ODNBNkE3ODEzRTI4NUIKLToxMEU4QTAwMDNFNEY3MkZBMDhGMzU1MkQ3RERDMTM5QTA2QTMwRjY1Q0YKLToxMEU4QjAwMDFFQTcyNEI2MDRBN0Q2MzNGQTU4REMxODEzOTkxRThBNkIKLToxMEU4QzAwMDQzRjRFMDUyRDM5NzQyMEZGMzM4M0RGQzk5RDM0MzY5QTgKLToxMEU4RDAwMDkzOTZBRUVFMjNCRUQ1QzlCNEZEMDM2Qjc3RTEzQTFEMjYKLToxMEU4RTAwMDExOEExOTNERkM0MEExODcwRTBEM0RCODM5M0RFOEQ3OEUKLToxMEU4RjAwMDZGMUVBNzg3Nzk4RjMwN0FEMEFGNjcwN0E3ODc4RUE2NUMKLToxMEU5MDAwMENCMzI0OUVCQjlBRTc0MUQzNDc5QkEwRUJBNzVCN0EzRTAKLToxMEU5MTAwMDFGOEFBRTQ3NDQ3QTU4MTA5QTM3OUQzOENEMkZFNDY1NDgKLToxMEU5MjAwMDNERDY4QkQzMDM5NkE3MDFEQTA5RTIwOURCQTdGN0FDNDIKLToxMEU5MzAwMDRGRjk4NDI2NUZEQTE0NzlGRDZCREEzNkFDM0RBOUZBMUIKLToxMEU5NDAwMDVFRDVGMkYyNUFCNTdGQkJBMjc5OEIyNkJGQzRGN0E2N0IKLToxMEU5NTAwMEE2N0U2OUQzMkU0RDdFNzFFMzNCOUFGQTBCRDcxQ0QyNkIKLToxMEU5NjAwMEU0OEJCRDdGRDRENDlGQkZCQzUzNTNGRTYwRUQ1OTREQTMKLToxMEU5NzAwMEY5MDM2NTE3MzVGOUZCREM3RkQzRDRCRjc3OEVGMDEzMkQKLToxMEU5ODAwMDc1RkVFRUEyQTg5RkE4RUJDRjlBMTZBN0M5Q0Y3MDBENkYKLToxMEU5OTAwMEQyRDQzN0VDQkNGNjJFQTBDNzgzRUY4QjA0RjQ4RjRGOTQKLToxMEU5QTAwMDlEQTdEMUZGRjlBOTUzNzY0MjlEOTMxRTA3RUU4MzUzOEQKLToxMEU5QjAwMDlFRDE5ODlFRjEzODcxOUY5Q0YzNENDMkY0NDJEQjFFQUQKLToxMEU5QzAwMDBCQzgxNTJBNDc0QkUwQzhBNjc0RTU5NkJBMzVEOTIwN0UKLToxMEU5RDAwMEQ3MDlDQURGOEE5NTZGRDQ3OTg3MTJCMjE0OTQ2MzhBRjMKLToxMEU5RTAwMEVGQzIyNjIzMDk0QzIwNDQwMEUxQzRDNzE1MTQ1NUU1QTUKLToxMEU5RjAwMDFEN0Q5NDM3NTE0MTkxRDBCM0JDQjAyM0YyRjc5QTI3RDMKLToxMEVBMDAwMDhCODdEQjIzOUM3Rjg0RjczNTE5MDI3QTUyNzcyRkU3QjcKLToxMEVBMTAwMDI0OTUwMjI5NTI3RjI3NjQwNUYyODFBRDVDNEZBOTM0MDkKLToxMEVBMjAwMDMyN0U1MUI5NzU1MDJFQjE0MTNFMzBBQUY2QUJGQTZCMjkKLToxMEVBMzAwMEExOUI2QzIwRDA0OUJBNjYzRjk3MzY1REFGRTFGNzA0RTEKLToxMEVBNDAwMEJDQ0Y4OTQwNkYxMzM0REYyQjlBNkZENkI0RUJEQTI1MzUKLToxMEVBNTAwMEUyQjhBQjgxOTc1MEI5RkQyQTI5N0E1MjA0M0UxNUQ4MDUKLToxMEVBNjAwMDkzMzI2QjBDOENEM0Y1MTRFNkRCMTI1MThGRUNGMjM0M0QKLToxMEVBNzAwMEFGODVGM0M3NzM5RTE2NENDRjc4REEzMDNERTUwOUFDMEQKLToxMEVBODAwMDg1NzNDMDkzOUUwMzk4MUVGN0I0NjNEQUUxMzk4NkU5NzMKLToxMEVBOTAwMDQ3OUUwRTRDM0ZGNDlDQzFGNDRGOUUyMEE2QzczQzlGNUUKLToxMEVBQTAwMDYxN0FDNDQzN0UwMjcwMEU3QkNDOThGRUMxNjNDN0I0MEEKLToxMEVBQjAwMEREOTM4Q0U5MDU4RjBGRkI1MUY2NUQ1Rjc0Nzc4NkNCOTQKLToxMEVBQzAwMEVENzM0MDdGMTFFODZDQkI3OEFDNkVDREQwMzA5REJENEUKLToxMEVBRDAwMEI5RjIyM0E0MzMwNUNGODU0RDI2NEUwRjQ5MUE3QTA4ODMKLToxMEVBRTAwMDgwRUQ3NzIzRDA0QjFGRTU0RDMyQTdDM0RFREE0NzJFRUEKLToxMEVBRjAwMEFGNzlFMUJGODdERUFFN0M0QjdBMEJEM0QzMTAxRDNEREYKLToxMEVCMDAwMEE1Rjc0NTRGMUZBQUU5RTk4QUMxQ0VFNDIwQTdBNzFGQjAKLToxMEVCMTAwMEYzNzM2QjdEQkY1MTEyM0JBNzBDRTk3N0FFREIwQzgwMjIKLToxMEVCMjAwMEFBQTVGQ0RDODQ5MDY5OThCRkM0RkI1RTQ5QzFCNUEzNkIKLToxMEVCMzAwMDFFRTgxQjBENzJFQkQyRThCRjhGODI3Mzg3NEJDN0U4Q0MKLToxMEVCNDAwMEUyQTdGNjNFM0YzRDlERjQ4RTc3MTdEQTQzMjUzRUJBQTUKLToxMEVCNTAwMEU4MDkxMUM2MUJDREYwMUE2NTIwRDNDODc4NDIxQTQ2QzEKLToxMEVCNjAwMEJFRTQ1QzkwODE3OTg5QzQ0MzdCOUY3MzQ2ODRGMzNBMDkKLToxMEVCNzAwMDQyNzU2QkMwNkY1Rjc4NUQ2OUJEMzIxNkUwOUQ3QUY2QjUKLToxMEVCODAwMDFGNTk5MDVFRTFGQTc1RjQxRTExRjU3QzEyNzhEMTA5RDcKLToxMEVCOTAwMEY4MERDOTI1OTMzMzE5RkNGM0MxOTE0NjNCRUEwOTY0OEEKLToxMEVCQTAwMEJBMTY3RkRFREIzNUY4NkI0ODU1Q0VDRjFCOTMxMTdGNEQKLToxMEVCQjAwMDIzQUU4QzFBRDQwRkZDRjVDNURGRkJDMkU3MDI5OEY3MzEKLToxMEVCQzAwMDdGMDMzRUZCRTI4RjdERjE0NUUyNzJCQ0Q2NDZFN0RGNzQKLToxMEVCRDAwMEJENzNDQ0Y4QzcxQ0MwMDdCRjFBREZDQTc5OUM3RTNDNDYKLToxMEVCRTAwMEY5OTJGNEI1RThCODNCNDlBMUUzRjYxNDg4NUJEODI0NjAKLToxMEVCRjAwMERBMTFGRUE1RDY2QjYyNjE1RDQyNzBGQTU4NEZFMUVEMDUKLToxMEVDMDAwMDNGQTc4MEJEN0YzRTU1MEIyRjRCMDdFRkQyODExNzZEN0QKLToxMEVDMTAwMDYwNzcyRDRENUVEODcwMzJDMjNBMjg2OTU1NEI1RDgzQkUKLToxMEVDMjAwMDQ1QUQ4N0I2NjlGMzk3MUE4NTY5MkQzODJFNDdFQ0VDMDgKLToxMEVDMzAwMDMxMjAyNzZBMUIxOERGNUU4RUE5MDI2NzY5NzIwOUY2MDgKLToxMEVDNDAwMDczQUUzOTNEOTZEOTdCM0VDNjBGMzZDNzIxQkYzOEU3MzQKLToxMEVDNTAwMDI5QzNGQUZGRUNGMUY0MDY0NzE5MEYyMUFERTQ4NDE5M0EKLToxMEVDNjAwMEY4MzEyRDRCRUZCRDdFQUZGNDJDRkRDNTg4RTdERDdFN0UKLToxMEVDNzAwMEY5MEFFODg5NjZGQURGOTc2MDc3MTAwOUYzMEFEQzlBRTcKLToxMEVDODAwMDE2RDE2QkJBMDFCRTZGRDZGNDQ3REIzOTk0MzNFMjJGNEQKLToxMEVDOTAwMEQzQkU2QURGNDhFNDk0NDJCNzU0NUVENDgzQkQ4MEU3QjQKLToxMEVDQTAwMDlCNEIxQUQ0N0E1OTU1Q0I3NzM1Rjk5QUI2NDcxQUQ0NzMKLToxMEVDQjAwMDdBNUMwNUZDODNGMjVGNTIyQjQ4NDAzNzk1OUM4Q0JBRjYKLToxMEVDQzAwMDI1Q0IxQTgxOEVBRjE4ODI0RjgwOEYwOEFDNUU5NUI5MjQKLToxMEVDRDAwMEMzRThBNjlGQ0VCN0IyNzVFQjZEN0NFNzNDRTY1NDg4REYKLToxMEVDRTAwMDNCMjgzMzM3RTIzOTcyNTlDQkI1RjkyMDY3Q0VCN0FFM0UKLToxMEVDRjAwMDRDMDJGOTVCMjE1RUZBNUU1MTg0RjZCRjk0MDQyRTVGRUMKLToxMEVEMDAwMEU0QTA1NkNGRTdGNDQxMjg1Q0Q1QkNFOUNGMTJDMjE3ODYKLToxMEVEMTAwMENENzcxOTk4NUY0NjBGQjc4RENCOTFCRUYwNTNCREY5RjMKLToxMEVEMjAwMDUwQzFDRDhFOUU3OEFBNkVCQjY4NzQyMzVGQTRGRkNCQzIKLToxMEVEMzAwMDBBRTM0OUMxNUZCMTU0RDQyNkQxNzE5NzM3NzdBMkZGNTYKLToxMEVENDAwMEUyOENFQzFERjU4M0FGRTA5NzNERTc2NzQ5M0UxNUEzRTQKLToxMEVENTAwMDlBOTc5N0I0NDMzRjBCMjZGMThFODhFM0RFMEYyODFGNjYKLToxMEVENjAwMDNGRkI1Qjk5MDAxRjIyNTc2OUFEMkM3NENENzBCQkM3NjgKLToxMEVENzAwMDQwMEM1OTYxQkI2NzQxNkI0NTIxRTBGQkVDRUJEM0QxMDMKLToxMEVEODAwMEVFNUI0NDhBNkNCODBFQTQzMTBCRUM5Q0YzQzQ4MDcxMkEKLToxMEVEOTAwMDU1RTdDOTFGNkMxMzU0RUJGMEIxNjRFNDc4QTY1QzMwRkUKLToxMEVEQTAwMDg5QkIzNDEwQkU3QjEwRDg1RkE2MzlGNUVERTI1OEY4NjgKLToxMEVEQjAwMDJFMjk3NjkwRjAyNUNBMTVCNzgwRjExNzczRDg3NzJGRDIKLToxMEVEQzAwMDMxRDcwMUZENTI3QjRBNjNBRjUxN0I0QTkzQTdGNjk0M0EKLToxMEVERDAwMDI2NUY0MjY2MjY0MTNDNDVDOUQzMzJGMTA5ODgyNzRENUEKLToxMEVERTAwMEY5NDFDOThFRTMyQjI1QjVGNUEwMUZGRDlDRkJFMTE2NkIKLToxMEVERjAwMEQ4ODkzNDg0Q0E4N0FBMzc5RUNCMkFBNkYzRTk5Mjk4ODkKLToxMEVFMDAwMEZGNEI4OTBGNTg0MjY1QzUyMDVBNUU1RUU2MzNCQTJDMjcKLToxMEVFMTAwMDNERTc3N0EyNzVDMjNEOTRGMzAzM0MxNjA3NzBCRkQxNUUKLToxMEVFMjAwMEM3RTI2Qjg4NDNDQUUyQUE0RjVBRUZGMzFGRDgyQUJBNDcKLToxMEVFMzAwMEEyNkM1MDhGN0U1N0M2OUJGQUY1RTdBRjlGMkYyMTRGRUMKLToxMEVFNDAwMEUyM0NDQTlCNjc2MDFDNTY4Rjc4MDczRTFGQjk1OTcwMTkKLToxMEVFNTAwMEY5MjJFQzI3NTExNjM0RjEyRTA5MzJDMzlGRTJENzFBNUEKLToxMEVFNjAwMEFFQ0I1RjBGNzk5NURGNkJBMkFFRkMxQkYzOTcwMTQ0MkQKLToxMEVFNzAwMEMzNUY4QTI1Rjc3MDM5OTFGMTEzQzBCRjIwMDU3MTdGRjgKLToxMEVFODAwMDdENjNGOEM5M0RFMDVGMkZERkY4NEY4NDNGNTRCQkVGNEYKLToxMEVFOTAwMDI5RkM4OUZGRDRGMThGRTgzMUZFQkM0OEYwQUJERTc4NjUKLToxMEVFQTAwMEY1NzU4ODc3MkNGRkQ1Q0Y2Qzg0RUVCN0IzNTI2MzkyOUIKLToxMEVFQjAwMDkzQUU3QkU1QTZENTM2MTdGMDFEQzk2QjgzN0Q3MUQ2NjEKLToxMEVFQzAwMDI3NEU4QjQ0MEZERjk3NzlEQzFGNzE1OTA0RjBCQkMyQ0EKLToxMEVFRDAwMDNGMjlGQzczQUZGQ0Y4NEVCMEEzQUU2QzkyRURFODRGNDcKLToxMEVFRTAwMDZEMzYwNTRDOTQ5RUFCNUI5NzE0OTJCMTk4RUY2NEY5MjQKLToxMEVFRjAwMDQ3MkYwMkZERDdCNEM5QzdENTc0NUFGRUNCOUYyNTQxMTEKLToxMEVGMDAwMDdDMTBBNTk0MjE4NjY0NDgwMzY4OUY1NDZGRkNCODAwNjgKLToxMEVGMTAwMEY0OEQxQTEyQzRGREFBNkYwN0ZEN0YxNjhGRjJCMEQ4QzgKLToxMEVGMjAwMDE4REJCMzFDMUQzNDQ5RDA5RUZENkE1QTdGN0M1MUI0NTYKLToxMEVGMzAwMDQxN0FEQjY5RTA2RkQ0QjI0NEJGOTBCRTVEMTlCNzNCNDQKLToxMEVGNDAwMDJBNjRFQjAwRTRBQjEzQzk0NEUwQUIwQTVFODg4RkQ5QjYKLToxMEVGNTAwMDFEMkI1RjdFNjY2QzI3MUQ1N0Q3QzZERkRBMDQxNUJFRjIKLToxMEVGNjAwMDE0N0JFOTUyQ0JDMjVGRkNEQUQxM0IxRkJGNDBGN0EzNTEKLToxMEVGNzAwMDVBQkY1NUU0OTRBMzhEREI0QjdFOTY1NkNBMDExQkM0NDEKLToxMEVGODAwMDczNTU2RTkwOUQ1RUZBQjlGMkQ1MTc1RjdBMTZGQ0Q5NkIKLToxMEVGOTAwMDdGMzQzOTQ3NTJGODE1QUZFRTNCNzIxM0NENTc2QzkxNjEKLToxMEVGQTAwMDA3MTRCMjY5NTg4NEE0RjBGQUQ0RDBGRjk2OEYwRkFGM0IKLToxMEVGQjAwMDQ3RjlCNjdENDZDNzE4RjZGRDg3RjFFMTc1QTlEOEIyQzUKLToxMEVGQzAwMENCNDhDNkY0QzQ0NzVFQ0IyRTYzODcyNUMyRkFCNDc0MUYKLToxMEVGRDAwMDE2ODBGRUI3RjJFNUJGMUE4MUVGOURERDI5OTA4MUE5NjkKLToxMEVGRTAwMDExRjBCOTYxMUZFQTg3ODAyNzVDNEZCRTVFQTFGNUQzOUYKLToxMEVGRjAwMEQ1QUZBMUVCMDI3MjQ2QkY1RUZBN0E4NTlDQkYwMDVDN0EKLToxMEYwMDAwMDg4QjNBMUY0RkREQUFGMjEwRUVFNEYyNjI3RTBBMUVDODQKLToxMEYwMTAwMEI1ODc2QzMwOUZEMzUyMkRBM0YzRTc1NjI3MDFCRjJCNDIKLToxMEYwMjAwMDkzQkQ0OTc2NENEOUY3QjJFNzFGNDZGQTJCM0RGNDcwRjEKLToxMEYwMzAwMDEyRjM1N0JBMDYxOTUwNzY3QTA3QzEzQzE3QUZCRjFCQjcKLToxMEYwNDAwMEU3NTk0MkRDNDg4NzY1Q0Y4OTQ1M0U5QTdFMkE5MTY5MTcKLToxMEYwNTAwMDVCMjJFQzkzNEI3QzlGOUM3RTgxMkUyRTlERTc2OTQ1MjUKLToxMEYwNjAwMDJFRkM0MUU0NzJFMUJCRTgwRjdEOThDRjg1NkE5MDk4NTEKLToxMEYwNzAwMEZGRDRDQ0Q2RUI4MDZDRDBDOEQxMTBGRDZFN0MxNEU1RUIKLToxMEYwODAwMEM3Qjk2MUFFODE3MEVFNTYxMzk2MTcyODQ3QzQ0MzUzMzMKLToxMEYwOTAwMDA3QjI3NTYyNzIwN0RCNTFCOTkzMDdERkExN0VCQkVDNDMKLToxMEYwQTAwMDhBMUFBQjY5ODc3MjQ2RTk3RjE5RUY5RjhFM0IxQUY0ODMKLToxMEYwQjAwMEI3RDM0OTkxRUQ5MUUxNDY4NTBGNTAzRDQzNDU2N0FBOEQKLToxMEYwQzAwMEZEQ0VGNkZGQzYwNkI2REY5NUZERUY5QjMxMERDQUZGRkMKLToxMEYwRDAwMDcyOThFRDIzNjgwNzcyOTc4RTJCMzAxMENCNzdDRDE2ODAKLToxMEYwRTAwMDkwM0Y5ODQ4MjBEMjNFREYyOEYzN0RBRTJERDdEMzBCM0EKLToxMEYwRjAwMDFEQkYyNEM0QUFFODA2RkE4OUM3NzU0MDc5NUZGMjM0QjcKLToxMEYxMDAwMDZEQUZFMkEzMzVEMEFGQUQyNzVDNjUxRjk3NzI3RTcwRkYKLToxMEYxMTAwMDFFRjhDMUY1NjE3RTQwRDYyN0Y2MkI1RUI0NTJGNkJEQ0YKLToxMEYxMjAwMEY0MkNFQzVGQkE1RkJEMEVEOEJGNzIxMUNDRkY5M0NENEIKLToxMEYxMzAwMDdCOEVEQzRGRjdFRDI3MkRDQUJFRDVGMjU1RkRCRTJERDcKLToxMEYxNDAwMERCRkEzMEM2OUZFQkY3RUQyNzQzNkI0OUM0N0Q0QkJGMUQKLToxMEYxNTAwMDQ3RENCNzQzM0JGRTQ3RjhBQTgyQzcyNEEzOTZBRjJBRjEKLToxMEYxNjAwMDdDQjIzNzdDRUFGOUU0MTZEOTgxNzhENUYzNDlGQTNCQzkKLToxMEYxNzAwMDRDQjI3QUQyQTM0Mjg3MEFGRDk1RkY0N0Q1NzBFMDQ3OEIKLToxMEYxODAwMDIxM0E1NUU4MzA0NEE3MEExREVBRTdBREM1QTNCRUZDMDUKLToxMEYxOTAwMDIzRjAyRDUyN0EyOTdBNTNDNkYzOTU0QTNGOEIwM0E2NjIKLToxMEYxQTAwMEVERjYwRkM5NDQ3Q0I5NTBDQzkxQzZGRDQzMDZBOEYzRDcKLToxMEYxQjAwMDNFNURCRTQ1NTdERkE1Q0IxN0U5RUFCQjc1Rjk1QTRENTEKLToxMEYxQzAwMEZEQ0FCNjNENDY4Mjc0MTBEMEQ0MTM5N0ZGM0IzOTMxNDcKLToxMEYxRDAwMDIxMTJEREZBOThCRkExRjVBMjExRUUzOUQ0NTg4MkQ4RDgKLToxMEYxRTAwMDVFNUU0MUJDMTAxRjE5REMyMUUyQjk1MTM3QzU3MTNEOEIKLToxMEYxRjAwMEY4MzczNkE3RkFCQzk0OEZBQzhFNjI3RTg1NkU3QkQwRDIKLToxMEYyMDAwMDE2NEZEM0Q1NzEyQzFGNEMzNEQ2MDMxRjU0QkUwN0EzMDEKLToxMEYyMTAwMDk4REZCMUJCMjg2ODhCNTNEOTVCOUQ3RTExRjk3ODg3NDUKLToxMEYyMjAwMDJGRjJCRDBEMkE2OTcwREQzQjdBQjlEN0ExOUM4Rjc1OEQKLToxMEYyMzAwMDQ3REJDNjYyN0ZEMTI5M0VBMEM3QTlBMjI1NjUzOUY4NjAKLToxMEYyNDAwMEExMUE0NTI3RThFQzhCRUFFRUI1QzE3OTU1QjczRkZEMjkKLToxMEYyNTAwMEFFMzlGNEZCRTI3NzQ0MTY4RUUzNzU0OTgzNTQ3NkQwRDkKLToxMEYyNjAwMDE5RTI1RDk3MkQ0MDVDRjA1QUE0OUY4NTdFNjYxNzJEQUMKLToxMEYyNzAwMDVBMUI3OTNGOTRGMzc2MjU5NjY1NDZFMEJCRDQwRTM5NDgKLToxMEYyODAwMEFFM0VFRjUxRTA5NEFERDc3REY3NEZFN0ZCQTYxMUVEMTEKLToxMEYyOTAwMEZGRjI4RERBNzIzN0I3OUY3RjY0RTRGQzY3MUMxOUM3RjEKLToxMEYyQTAwMEVENTdFNkJGRTE3QzdCQUE5ODcxRDcxQ0JBM0VERDA3MUIKLToxMEYyQjAwMDQ0NjJBMkY5NEI3RTExRDdFN0QyNjZDMTA3RkUzN0UyNUUKLToxMEYyQzAwMDREQzRGRDU3NEQ4MjQ2RjU3RDg4MkVEODVGRDdGNENFQ0MKLToxMEYyRDAwMEM3QkFCNkZGMzlFQjA3NDA0N0FGN0YzMEY2REY2OURBRDAKLToxMEYyRTAwMEY1RkExRjQ3QkQwNUY5Mzc4RUE2N0M0MDdBRDZDRkRCRUQKLToxMEYyRjAwMDE5ODVGMTAyREQzQkFENDhGRkREM0JERTRCRjkwMUU0NTIKLToxMEYzMDAwMERGMzQzOTYxOUNERDNCRkYzQTE2RThBOTdCODVBOTBDMDcKLToxMEYzMTAwMEY4NjBGNzMwRTZCRjVEQjlFM0FGNjMzQjUwRkVBRUMyQzUKLToxMEYzMjAwMDc1NkMzNjFBOTk5RkM5RkY4RjhGRTBERUMyMjUzRjlEMEQKLToxMEYzMzAwMDE1RTgxNzNDQUVCRUU2RDc1MTNFODJGMEZGOUFBNUJFNTcKLToxMEYzNDAwMDBGRjQ2REU3NTNDREUzNDNCQUFENjRDRTU2MTg1RjFDOUUKLToxMEYzNTAwMDhCN0ZBODc5NkJGMjhCNzVCNEZGQUFENjVEQzY4NUI0OTYKLToxMEYzNjAwMDNDRUZFRENGQzc2MjFDRkQ1NkE2Mzc1RDkwM0I5RTg3RjQKLToxMEYzNzAwMEY4ODc2REM2RUZBQzk0Mjk5RTJGQzAyNkEzNDZGNjVEOTQKLToxMEYzODAwMEE2MzU3OUIwOEY3QUUyRTU3M0Y0QTdGNTE3MUZFRjFBNjcKLToxMEYzOTAwMDk5N0RGREFGOEYwRkMxQzVGODlGRDU2NzE2NjBERTdGRTEKLToxMEYzQTAwMEZCRTgwM0Y0ODM5QTkwMkU5NUY5N0VEMjUyODdGQTRDQUIKLToxMEYzQjAwMDVGRjMzRUZCQkY4NjBFRkEzQjZGMjFEMDlGNzk5QjREREEKLToxMEYzQzAwMEZGREFFQkZEQjhEMTgxRUJBMkRGMDczREU5N0NDN0Y3OUYKLToxMEYzRDAwMDMwRkZBQUQ1ODlFM0VEMjdCRDhGMzZGRDNGQjZFRTVCNDIKLToxMEYzRTAwMEU5QkFEQkZBOUVGNzc3RkVDNUU3RERGQkJBQkYzMzhGREMKLToxMEYzRjAwMEFGQkIxRENFNTM2QkRFRkUxQ0M3Rjc3NUY5NUNFOUZGOTIKLToxMEY0MDAwMDUyQkE1N0Y0RkQ3NjQzQUQzRDkzOEU2RjBFNjlCNDgyQzgKLToxMEY0MTAwMDYyNzE1RkUyMjU0QkE2MDNBMjcwMkYwRkMwRjgzQjM4NDQKLToxMEY0MjAwMDVGOEQ2MDU3MzU5OTk4QkZDRDI0MTg1OEJDREFERDgyQkUKLToxMEY0MzAwMEUyNDc0NDNCRUI0RUFFNUZEQzM5QjQwQ0Y1OTAzQjVERUMKLToxMEY0NDAwMDNGNDE3RDgyNDhCNUVEMzlCNDdFN0JFRTQyMjdDNjZBRTYKLToxMEY0NTAwMDkyRjFDN0RDOTA5RjNEODVFN0I1RjZFNkVGMDRFMjEyMzYKLToxMEY0NjAwMEE4N0U3RjY3RUVGNDAzQTBFN0RFRTUxMjUxMEZBNjI5MjAKLToxMEY0NzAwMEVBQkZFRkE3MTRCMEVGOTNCNEY2RDA3RDZFNkRGRURFNTkKLToxMEY0ODAwMDM5REFGQ0REMUNERTNEODQ4REZGOUUyMkMxMDc3RTU4RUIKLToxMEY0OTAwMDUzQ0U1Mzg5RTA5NzM1MkQ5Njg5OTAwQTcxNDZCNUFCQzYKLToxMEY0QTAwMEMxRUVCOEJCNDhEQjdFMTkyODY3MkE3RkUzMzdDNUUzODYKLToxMEY0QjAwMDZGNDM3ODVDOEE3ODIxMzkyMkRFMDNFRDEzOEY3Q0RDODAKLToxMEY0QzAwMEVEQjNDN0Y5MjBDRTlBNDg0RTg2Qzc3QkFBOUNFODM3OTEKLToxMEY0RDAwMEU3RjZCOENDREJDQjk2MzVFREIwOUY2NTlEMURBRUQ4NzkKLToxMEY0RTAwMEQzQkRFMTlCNzBGQjFDRTFBNDg1RjEyRkJCNDRCNENGREQKLToxMEY0RjAwMDY1OUQ3REFFQUNDQkQ3NUQwRjY1MURCRkVEQkEzQzA3RkEKLToxMEY1MDAwMEVCNzI2Mzc4NUQ4NjVBNUMwNEY2QUJDQ0VEODc3QzhCM0UKLToxMEY1MTAwMDkzRTU4NzE2MTE3NkFFRThDM0ZBRDIwMDE3RjE2Njg0MzgKLToxMEY1MjAwMEUzRDE5Nzk4OEIyQkUwOUNDQzNDNUE0MDdGQzg1RDZCMTUKLToxMEY1MzAwMDQ1OTQwRkU2MEMwMUM3NTUzNDQ5QzZGOEUzOEYwRDQ1RDUKLToxMEY1NDAwMDU5QjBERTg1MTMyNjU2N0Y5RjBEQzMwOUY4NUNDMkYxQzIKLToxMEY1NTAwMDVFNDI2QTUxN0YyNTU3QkZGQzMyM0IwQkNFMjUwOEVBM0QKLToxMEY1NjAwMEJGNEI1Qzg0REM0MUVEQjg5MjZDMjExMDBERjE2QTEyNDYKLToxMEY1NzAwMEYxQzY4RTA3M0ZCOTQwOEU2QkZDRTREQTNDRkM2RTQ5NjUKLToxMEY1ODAwMDBBQzNFOUFCN0U2RkZDRTU5RjlERkUxN0U1NjdDNzI5QkYKLToxMEY1OTAwMDkxNzQ0MjNBMTJCQjk3RDQ3NkY3N0MzRkMzNjM0REE1NzIKLToxMEY1QTAwMEUwNEI0M0JBMEJDOEVBRkJEMzA1NjZCNjBGRkVFQjg3MDgKLToxMEY1QjAwMDEzOTA0RkU2RkM3NDRDMkNGMzA3NjRFMjdEQzQxQTZFODIKLToxMEY1QzAwMDM3NUNGMjNBNjJDMTBGNzZDOTlGQ0VDRjczRjM2QzZBOTMKLToxMEY1RDAwMEJFQUFBNDg3QjgxREZFOUYxMDk3NDhEM0VFN0NBMTUxMDgKLToxMEY1RTAwMDA0M0I4QjA0RDFGRkVCQ0Q4RkMyN0JDNUZBNzZBM0NDNTUKLToxMEY1RjAwMDA2QkVBRjZCRDEyRjAwM0YxMUVFQUZGMjc5OTREMkE2QzkKLToxMEY2MDAwMEIxRjFBQTc1NUI3QkM3NTk2OTZDQ0Y3NTgwREY3MUQ1ODUKLToxMEY2MTAwMEY5RERCN0M1MkZEOEZEODBENzQzNTExRDA1NDUxMUU2NEIKLToxMEY2MjAwMDNCODlFM0FGNzBGN0RGRjBGRUVBNEM3RkFBMEM3ODk5RDQKLToxMEY2MzAwMDk5MkY2QUNFRjk5RDY2RUVDRjk4NDAyNkMwQjgwQTc3MUEKLToxMEY2NDAwMERGNjY5QjBDRUI3MjQwNzRDMjdERDUxQUZGNDVBMzNCNkQKLToxMEY2NTAwMEMyRjlCMTFFOUYwMDFGRkNGMDI3NjQ2NzA5RTBGM0M0RTQKLToxMEY2NjAwMDRGQTIwOEQ4RDVFRkYxNzNDOTBDQjhDRjkxODFBRTFFNjcKLToxMEY2NzAwMDE3RjgxRDczQ0NDQzRGQjhDRTZDQzc3NDU2NjE4RTlDRjYKLToxMEY2ODAwMDQ4RkJDRDY4QjU4RjgzNTBCNUMxQkNGRTNBQjMwM0NCMDAKLToxMEY2OTAwMDg3RjA3NjRBQkRDMTk1QUM1RUE3RDE1RTFENjlGRUJGRkQKLToxMEY2QTAwMDhCMTJGODc5OTlGMzdCOTM4NDdGQkQ3NUNCRjlBOTM1REIKLToxMEY2QjAwMDkwMEJGQTQxQkVFMjY3RDFEMzM1QzFGRDcxNjk5QUUwODIKLToxMEY2QzAwMDAzRjkwREY2MzBFNjBCMDVENDFGREU1M0VFQUZDRjY0MjEKLToxMEY2RDAwMDcyNTZBMTdCM0Q5RUFCQ0REQUY3MDIxRUU3Nzg3Rjg4OUMKLToxMEY2RTAwMEQzODc4MjY3MDVCRkZBRjEyQUY1MjlCRkJBNTVFRDlGODYKLToxMEY2RjAwMEJBQUI2RERDNkJBMERGNTRGQjA1QkI4MTgyQUE5NjNBRTYKLToxMEY3MDAwMDhDQjAwRjZCREE5RTkwRTE3Q0U2M0UwNzgzNEJBNEEyOUYKLToxMEY3MTAwMEIxRUFGODgzNzU2NjE2MEZCMjY3RkNDREYzODA0RTJFMDIKLToxMEY3MjAwMEFGMzU4MTJDMjRBRTQ1MTc2REMwODdERjMzMzg3RjBGOEUKLToxMEY3MzAwMDcxNkNERURGODk2NEQzNTdGMEFCMEYzQ0Y2RjI3QzU5NzUKLToxMEY3NDAwMDBEMzcxNUU3MzNBQjMyNDcwNjc3REEwMzk1QkJFNDgxMTMKLToxMEY3NTAwMDJBN0E1QTY3OEVDNzcyRTVGQkUwNEEwN0JFMEY0MkZCNjIKLToxMEY3NjAwMEMzNzE3ODFGMzcxMUI4NEY5MkQxRDI4RUY3NkMxRkE4OTIKLToxMEY3NzAwMDhENjM3NDU4RDZCMkNCODhGOTU0Q0Q3QjIyNEEzRkZBQjgKLToxMEY3ODAwMEZEMzRCQjUwMUJBRkJDMzBBRjYzMjhFMEE1RDAxNDU4OEMKLToxMEY3OTAwMEU2OEM0MEE3OTNBMzk0NzNDQUFGMjkyNzVDOTQ2RUM3RTUKLToxMEY3QTAwMEZFN0YyNDI3OTYyOTcyQTIwM0UzRTM5NUY2MDJERkU3QTIKLToxMEY3QjAwMDJBMzkzMTMwOTI5QzU4NUFFNzE4MDhFQkIwNzQ0N0ZBNEUKLToxMEY3QzAwMDQwRDgyNDRCREY5OTlBMTQ0OTRFQkNFRjYxRTdDQzQ3RUYKLToxMEY3RDAwMEY5N0RGNkVFRDk1NDRFRENBMDkyMTNCM0EzOTA0RUY0MEIKLToxMEY3RTAwMEVEM0U1MUY2NDk1RjcyNDI1OUI3RkZDQkZDRTY3RDkwODIKLToxMEY3RjAwMDEzMTFGNkY3MTczQTM5NzE4RkJGMThFNUM0M0RCMzQ1QjkKLToxMEY4MDAwMENEQkRBQzRGRkI5NDEzMzk0OUY3NjE1RTc2QzY0NEEwNzkKLToxMEY4MTAwMDlGRjdCOTdENzM5NERGMEI4MDdFNDA1RTY0NDZEOTExRkIKLToxMEY4MjAwMDZGN0FCOUQxMUI1RkZGNTM3RkY5RkFGRjEwOUUxNUJFQTcKLToxMEY4MzAwMEJFOTREQTNGQTZENDQ4NzQ0ODkwOUU5N0RFNDdGOUJBNDIKLToxMEY4NDAwMDAwRjRDOEY4RkFEMjA3Qjk5RjUzQzc2NzhCODBDRjY2MTgKLToxMEY4NTAwMEFBRjkyQzZCNUZFRDY2NzJBMUE2MkRGNTk5QjlCNEZDREYKLToxMEY4NjAwMEZFNDZEOTA5QTJGMkZFMzBERkNENTJGM0REQ0NBODVFMTAKLToxMEY4NzAwMEY4NkUxOUUzQkI5N0ZEMTM1MDdGRUE2RDdFN0ZFNkZDQkYKLToxMEY4ODAwMDk2RjJCMzExQ0UwOEY0MzE2NzZFOENFNkRFREU4OTcxMzQKLToxMEY4OTAwMEJGQzlEODA2RkJFNTNEMTFDRjc5M0ZFNjdBQzBDMTcxRkIKLToxMEY4QTAwMEJGQzkwNDdERkE0OTNFOUU3OTdDM0QyRjc4NDg3OTNFNTgKLToxMEY4QjAwMEM1NUZERTIyQTY0RjU3NkQxNjExN0ZENUFENkNGRjU3ODEKLToxMEY4QzAwMDM3MEIzRTA3Q0QxNzhDRkYxQjlFRDc1NkVDNjBFN0I1NzQKLToxMEY4RDAwMDc0MDY4NTM5QUFGNUFGNzhBRkEzMUVDRTA5MkEzNjA4N0IKLToxMEY4RTAwMDc4REUwQ0Y3MUUwMDlGQTUxQzlGMjVDRTBBM0M1NzI5RTkKLToxMEY4RjAwMDZERDJGQUMxMUJBMjZEMkY5MDFCMTAxRUZBQzNBQjc4RkMKLToxMEY5MDAwMEZENDI1MzEwQ0YxRDBBN0YyOTM4MzcyMDlGRDRCNkFCNTQKLToxMEY5MTAwMDFBNzFGQjU5QjA0RjJBOUE3NURGOUQwRDc4QUUwNDM3RTYKLToxMEY5MjAwMEQ0NDFBRkFENkFEMTk2N0JGOEJDMTc4QjgxOEM2RDE0MzYKLToxMEY5MzAwMDNFRjkzREIzRjNGNDc4RjdFOEYxNTNGNjJERjE3Mzg4MEYKLToxMEY5NDAwMEUyMjdGMzlGODc5RjI1RkU1RDc4NUVGMDc1RjFBMkM3RTEKLToxMEY5NTAwMDQ3NUQxNDNGMUYxODRGMzI2MTNGN0U2QzcwMjE3RkYxNkQKLToxMEY5NjAwMEJFMkJFMkJCNEU4QjlFMThBOTc5MEZFNUE3MUMyRkVGOEIKLToxMEY5NzAwMDE5RENGNTgzQTA1RUI1ODBGNTRBRDc2RkQ5OTc0NEYzQkIKLToxMEY5ODAwMDczNUJDODM4Mzg2NjI4NkREMkNBRTM5MEZDNkY3NUEwRTcKLToxMEY5OTAwMDdDOUY1QkJCNDU4MEI4REFDNUZDQkU2MDk5RUYwOTdDRjMKLToxMEY5QTAwMDNGRTZDMUU1NTRERUQzRkEwQkM3OUJEQzcwNUU3RTI4RDAKLToxMEY5QjAwMDJBODhGQzUzQTFERjlENDBCRjk0NkZGQUY5Mzg0RTBDQTIKLToxMEY5QzAwMDBFRTZBMzlDNkExM0VDQjgyRjAzNTE0QzZFRDE3NTgyREUKLToxMEY5RDAwMDc3NkRGNjRDRkU2QjAxNUYxN0U2NUY2QTYzRUI1ODQzODkKLToxMEY5RTAwMEQ3MERGNjc1ODE5RkU3NUI5ODNFRjg4MEZGMjIzQkU3RDUKLToxMEY5RjAwMEY0RUY5MkQ5RkIzODAyNDk0MDdFRTc0NEZCNUM5MThGREIKLToxMEZBMDAwMDcwRUU5QTkzQTQ1QURGMUQ5RDhDRkUzNzA5NEVGQ0UwRTAKLToxMEZBMTAwMEEzRkZGQjM2RUJEQkNCQkEyQUZBNEM3RkQ3NTdDMUQzMTcKLToxMEZBMjAwMDRFREQzQTFGOEE2QTJGOUM4MEU3NzI4MjEzREYwQkYyNDkKLToxMEZBMzAwMEM3RTE3OUQxQzk0NkY2RkVDRDQxQUUxRkU5RjcwNUQ4MzkKLToxMEZBNDAwMDFGRUFGNzc4NjZDMEMwMjEyRTdBNUExNEM2OTU2MkJGQTUKLToxMEZBNTAwMDY5NEMzRjUzRjMyOUZEM0I0ODVGMzc2RUE5ODZCNEEzMzkKLToxMEZBNjAwMDVFMTY4RTdGNzRERjZFMDZCOTNGNEREMEM0NDlEMTE5NDIKLToxMEZBNzAwMEUxQkVGRjI3QzA5N0EzQkUwMjNFNDkzNkEzN0M3OUM4RUEKLToxMEZBODAwMENFQkVFRTE5NjYyNEYwMUVEQUU1MzUzMkQyRDFCRDA2QkYKLToxMEZBOTAwMEM3OTE2Q0UwMkY4RkM5MDRGNkM3RTU4MzM3MUU5RDNCRTUKLToxMEZBQTAwMDAwQ0E0NUE0OEZFMkY3MjY1NDgzNkJBNTk4QzVBQTkxOTYKLToxMEZBQjAwMEUyNDc5ODVDM0FDMUZCRkYxMzk1RDdBRTZCNzg5N0EwRUQKLToxMEZBQzAwMDA3N0JFMjdDNzBCRjc0QjY3M0Q3NTQwN0Y4NUIzMjBGQzQKLToxMEZBRDAwMEFEODY3M0NGNTk3OUY2MjM0NzYwMUQxQkQ4QkI0RkM3M0UKLToxMEZBRTAwMEQ3RTRBMTlERjZEMDc3MDVEQzY3QzdFODdBMDE5Q0JCMTcKLToxMEZBRjAwMDY3QTcxRTM5NDJDN0Y3RTA5QTQ0M0NCNzlDRUI0QUJDNjMKLToxMEZCMDAwMDA3Q0UzMUU3MUUxNDlEMEU1QTZGRTE1RDU2MEI5QzdGQTgKLToxMEZCMTAwMDRFMUYyRDEyQjcwQTJGMEY5Mjc2RjRFRkNDQURGREVFRUIKLToxMEZCMjAwMEREQjA0RkNBQTgzQzg0Rjc5Q0NBRkM4N0E2MEU4NEZDQjMKLToxMEZCMzAwMDdBMDFEQkQ3NzhERDQ2QjhFN0Q5REU3NEQxOTg0OUZCODYKLToxMEZCNDAwMDJGQTFGNTAwREQzNUVCNTlCRDlBOEQwMkJFMTc1OEUyQTUKLToxMEZCNTAwMDdGMDJGOTY0Qzk0NjAxMUZDNDY5QTdGQUFGOTlDMUY1Q0MKLToxMEZCNjAwMDgxMjlEMUJFOUVCNkE3Rjk1MjY4MEY3MDM3QzZERDAzNTIKLToxMEZCNzAwMEU3OTMzNTc0OUNEODdFNTIxRDlFNTM5N0QwNzZCNDk4RTcKLToxMEZCODAwMEI0NkZGQzJFQzI1QkIyNUUyMDcwQUZCMDZDNTJFQUUzODEKLToxMEZCOTAwMDkzMDBERTQxRDkwOUU1NDc3N0ZEREMwOEUzOUU0N0ZCOEEKLToxMEZCQTAwMDFCNDRFMTJGMTQzQkE2NDI3REYyMDNDMThFRUYyRTE1QkMKLToxMEZCQjAwMDVFOEJGQkJBOUJFRjNCNjIxRkNERTIxNDA0QTJEQ0VGMkQKLToxMEZCQzAwMDkzRDRGMTJBMjVEMTY5Qjg5RjRBOTZEN0Q1QzNCQzNBQjgKLToxMEZCRDAwMEJDODlBOTA2QTRBNzhCNDY5MEUzMjcyOUJFREQ1NDdGRTQKLToxMEZCRTAwMDNENjE2NDcxMzA3QkJDMjc4QzFEMkFGRUI5MzIzQTFEMDEKLToxMEZCRjAwMERCMkY2QUNCNDEzRUIzOTgxNDYxM0M4NUJCOEVFOTIzNzEKLToxMEZDMDAwMDlEQUJBMzdDRTA1N0VCOTRFRDI5RjA3RENGNkExMzdFOEEKLToxMEZDMTAwMEJGRjAyQTkzM0IxNzg2NzVBMDdGRkJGNDdBOTlDMEJEOEQKLToxMEZDMjAwMEM3OTVFQkQzRDdDMTNBOUVERTJDM0JFMURDNDA3QzhFRkUKLToxMEZDMzAwMEM1MTE5NEJFQ0FGQzY0N0JENjMzQjhBNzlCMTk3RkNCOTEKLToxMEZDNDAwMDdCRUVFRTAyRTBEQkE1OTQ0Rjk5NzA3RTVBM0U1NkUyQzEKLToxMEZDNTAwMDI4NDczRUY1NUMxNEUzNEI3QTdFQTVFNzUzNjU4RDFCODAKLToxMEZDNjAwMDIyQ0JBMTY1MDU5MUU1RDBEMDdBRUUzNzhEMkM5RjZCMjQKLToxMEZDNzAwMDg4ODVFOUJCRTNDOTc4RjA2MzE2NTcwRDlCRDcwNEY0NzgKLToxMEZDODAwMEZDMjBCQjcwRDAxRTc4RjNEMzlGODFEQ0FEQjRFMjNCODcKLToxMEZDOTAwMDY1RDU5MjdEOURDMEU4ODMwMEZGOUZFQkRGRjIyOUVDRTQKLToxMEZDQTAwMDg3QjJCOTUxRjgwRUQ5Mjk1ODBGRDg0NzZCMTNGMDFDRjkKLToxMEZDQjAwMEJCQzQ1NzhDNzg1N0UyNzk0QjlCQjRGNEFFRjgyMUVGNzQKLToxMEZDQzAwMDczOEJDNEE1OTY1RjY1MzFDNEE1QUE3N0Y0NDc5NDZFN0IKLToxMEZDRDAwMDY5M0ZGM0RCMDQxRkIwQ0FBMzNGRUFEQ0ZGNzAyNkU2RUUKLToxMEZDRTAwMEVEMzhBRUU1NUMzRjU4NkI0NUJBM0VGQUM4QzVENTQwMjUKLToxMEZDRjAwMEI3RjM3RTI4MTBEMERCODlENzVEMEZGMkIwQkE0OTcwMTgKLToxMEZEMDAwMDgwOUZCOEY0ODdBQzdEMjk2RDBGRTMzRUZBNzM0NjVGQTAKLToxMEZEMTAwMDk0Q0UxREIwMEZBQUQ3M0ZCMTFGRUI2RjE0MUMwMEZGOEMKLToxMEZEMjAwMEU4ODY2MkQ0MjdDQUJDMjJDMUYyOEQ5RDY4NDc1MDc5MEIKLToxMEZEMzAwMDg1RjE2ODdCQkM2MjEyRUM4M0VBNTUyNjNCQjg2MjE1RkMKLToxMEZENDAwMDdBNTJFOEIzOTNCRkE3NDBDQ0NFQjFCMzY4M0I2N0I0NTcKLToxMEZENTAwMDAzRjlCMjlFMkVDNTM5NDI0ODlFMDJGREQ0NzgxOUJERTIKLToxMEZENjAwMDc1QkUyQTNCNjE4QkY0NEQ5RkVDMUVCRDQyN0YyMkQwQjUKLToxMEZENzAwMDVGNjY5OEZFRjZBQ0NGMzMwMjNEOUVGNjA5MTg2NzkxOTgKLToxMEZEODAwMDA3RjQwQkY0RjlCMkUyOUYyMTE2QjUxRUQ1MTc3REVBRjAKLToxMEZEOTAwMEU5QjAwN0ZEQzFDQjU4RTk2MUZBNTRFODUxNEY4N0M3NzQKLToxMEZEQTAwMDI1NzIwRjhDRkJBMUQ1NTEzODhGQkNGQTM3RUY1OUNFOTUKLToxMEZEQjAwMEY2MTk5RUNGRTVENTNGOTIwNEZCQkE0NDYyNzE0MDBBMjIKLToxMEZEQzAwMDVFQUIyNDE2MzdENjYzNUM0RkQ3MTkwN0Y1Njc3Q0JBNEMKLToxMEZERDAwMDcxQ0M4QTBFQzlFREYxMjBCN0E5M0U0QTAyQjQ5RkRGNkIKLToxMEZERTAwMDZDN0UxMUUzMkJDRkJGRDI3OTI3RUEzNzZGNTEzQTAwRUYKLToxMEZERjAwMEZDNkZCNjkyMDBEQTIxM0VFNDQ3RTVBRDIyQzY2OTEzRjYKLToxMEZFMDAwMDI5OTAzNTRCNjVCRjJCNzEzMTE1QkZCMjIyQkVDQkI3RTAKLToxMEZFMTAwMDlBN0M4NUI0N0RGOUVCMjdDNjYyNUNDMjBBQTY3RjdCMUIKLToxMEZFMjAwMDVGMTFEODM5ODhCNzYzMkNEQzNCMkE5NzU4N0M4RTVFRUIKLToxMEZFMzAwMDJGRjg1RDM0QjNDM0JCREU4Qzk5MDM3QTlCRDBDQ0RFNDQKLToxMEZFNDAwMDE3MkM2RkI5NTczNkE5RkNCQkZCQTI2NUE1MUU5RTkzNjQKLToxMEZFNTAwMDc5RTkzQUMzRkIwQTMwM0VGNUZCNzY0QTVDNEVEN0NCRDQKLToxMEZFNjAwMDhDRkVDQURCNjRENEU3Q0E5QkI3NUM4MDc4Q0RGMjYzQjIKLToxMEZFNzAwMDI2QjQ3NzZCOUEyRjFBQzE5RUNERkJENUFCRUMxREM0NkYKLToxMEZFODAwMDM2NTExM0E3RDcyMzNFQUU1OTBDOTgyMEFFQUJCNTBBMTYKLToxMEZFOTAwMENGNzE2OEJFMTNGMzJEM0MxRUVENkJDNjZGNTVGQzZBMjcKLToxMEZFQTAwMEM3RUI1RThBQzI4QTZEQkZCNEUxN0I4NUVEOUI2Qzc4M0YKLToxMEZFQjAwMDVGQUFGOUFCRTM1NTdCQzRDM0I1MzRGMDc4QjgzQjRFQzkKLToxMEZFQzAwMDEzRTQ4RjkxRTNFMUNFQzEzRjI4MjE3RDE2QUQ4RDg3RUMKLToxMEZFRDAwMDIzQ0Q4Q0JGRDE3MTY2NDU3QTBGMzVBNDc3QkRGQUU5ODEKLToxMEZFRTAwMEYzMTBDRkREQjVGNTkzRTc2MURDOTU1RjVDN0UxRUUyMzQKLToxMEZFRjAwMDZDQTg4MjY4MDczREE1RTY5NUY3MzFGRTU1NjkxNzFGODYKLToxMEZGMDAwMEMzRURBMDk3N0Y4OUYxQzMxN0ZFNjg3MjAyQjQwQjNCNjMKLToxMEZGMTAwMDRFQTc4MEZFNzE2MUNCREY5MjIwMkU3OEQ5OEVBOUU4QTIKLToxMEZGMjAwMERGNTlCNjNEMEZERkJERURDRDlFMDVGQUY1RjUyMzdFMTkKLToxMEZGMzAwMDU5QkY2RTdCNUFGNzYwM0NEMDc5QkFFRUMwMjc0MjcxNDgKLToxMEZGNDAwMDhFMkQ1NTJDN0VENEMxRTMxQjM3NDc4RTE3RUYxMUNGNzIKLToxMEZGNTAwMEQ4M0FFQkFFMjlDMDFGNUI5OTlFRDA2NzVDRTM2MUJBQ0IKLToxMEZGNjAwMDlFMzdGNDYzMUQzN0YzRjhENTk2M0JCRTMyQUVGMTNDQjUKLToxMEZGNzAwMEZDODNBRUQ3QjgxODZEN0NFOEE3QUQ4QjdGRjEyQzk0Q0QKLToxMEZGODAwMEI1MjZGNDFBRDcxOEU4MDdGRTk0NzhGNENGQTM1REQ5MDQKLToxMEZGOTAwMDMxODlCMERFRkY4MUYxQTRCMDdFODUwRUUwRDc5RkE2NDcKLToxMEZGQTAwMDgwQkZGODhDMUM0NEJGNDQ3MDg3MDlFRjZCOTZFRjM4MTQKLToxMEZGQjAwMDhBRkJFOUMyRjY0MzE4RUY0RDc4NUNGODA1MTJGQUIxRjYKLToxMEZGQzAwMEY4NURFRTAzQUFEOTY4NjVGMTkwN0MxRDIwNUVEMjYxRDAKLToxMEZGRDAwMEMzRUYzQzJFOTJEMUI1MTIyRkQ5NUI5Q0U0QjI5ODM0N0EKLToxMEZGRTAwMEZFM0UwQjhCRTdBQ0RBRjgwMThGM0YwQ0FGOUIzMDA5N0MKLToxMEZGRjAwMEQ2QUJGMzJCRTM1MDE1M0NEODAxMEYxM0Q1NzFDMDkxNEMKLTowMjAwMDAwMjEwMDBFQwotOjEwMDAwMDAwRTM1MjQzNzFDMEJBNzU4M0Y1MDQzRTFFOEFGM0E1RjkyNQotOjEwMDAxMDAwQTExMEVGRTkxMzhFNDY4QTJCQkZCMDgxQzUwRjVGOTAwOAotOjEwMDAyMDAwMjNERjhGNTZFMjgyNkI2Mjc0RkJENkQ3QkY3OEUwQkVDNwotOjEwMDAzMDAwRTZGMTc1RjEzNDNGQzZBMUExMUIwNTVGNUQ1NzIzRjNCRgotOjEwMDA0MDAwRjcyNzYzODQ2RjY0Qjc4NUVFOUI1NDBBRkFGQjJDNEY0NQotOjEwMDA1MDAwQzRDMDdEOTlENjRFMjNCRTkzQTJEODU1N0NCRTVEREMyQwotOjEwMDA2MDAwREZENkY1OEE4ODcxQTJGNTJEN0I5MEJGRUJGOTQ3MzU3NQotOjEwMDA3MDAwM0Y0N0QxOEY3NzIzMUY2Rjc1MUI5MzFGNUQ1QkFEM0U4RAotOjEwMDA4MDAwMEI4NUQzQjVGQjREQTRFQkVBQ0Q5RDE4QTdCQUJGNzk3QwotOjEwMDA5MDAwOUJCMTQzNzVGRTBDRjJDM0E3MUE3RkQ3NkJCQkM2MjI3OAotOjEwMDBBMDAwM0ZFN0VGQTJFOUZCRDlDQUY5NjM4RDNGNzIzRjM1OUI2OQotOjEwMDBCMDAwMkY2QUZBQTlGMEI2MThFRDk2QkVGQjNCMjdCOUVFMDVGQwotOjEwMDBDMDAwNzhFN0RBOTkxRTc1QUU0NTlDRTY4QkQwRkZDRjYyNjQ2NwotOjEwMDBEMDAwNkU1NzM3MzIzRjM4OTVBM0Y4M0U5Qzk1QkQwNzI3REExNwotOjEwMDBFMDAwQTI1MTJGNUI2NjlENzQwQ0RFMjE1RDY2MzU2MjVDQ0M4RgotOjEwMDBGMDAwQ0EzQTFFNDdGMzIzNjczMkFDRjc0QUVCRUQwNEM2QkI5RQotOjEwMDEwMDAwMUFGMEFCQjJFRjY1QkI5QjgwM0UyNzI3MTc2NUFBQ0ZERAotOjEwMDExMDAwNjE5NEYxMUIwNzE4ODg0RkJEOEZBREQzMDY4MjdENEFDRAotOjEwMDEyMDAwMjRFRjUwMThDNzlENjk3Rjk1NDAyRUI2N0I5ODdGOUYxRQotOjEwMDEzMDAwNUMzRDMxMDJCRUI3NEJGNjdEMDkxNDZFN0JCRUUwMDQxOAotOjEwMDE0MDAwRDc2QzRGQkE2N0YwNDM3RTA2OTdGNjFENURCQzUzNDdFOAotOjEwMDE1MDAwRTc3N0M5Njk0MDNERDE2QTA4RDg2OTE1NjI4RDZBNEY1MQotOjEwMDE2MDAwNDYwM0Q3NDExQzUyMTI1RUE1QzA3ODg5QzczQ0U2MTFGMAotOjEwMDE3MDAwNzAzRkQ0NDZBOERBMEFGNTlDOTJFNjVEOTVEODQ5OTI3QwotOjEwMDE4MDAwRUU5RDE1NzI3ODA0QTU1NzBCQTc1N0M1NUY2NzY1RkZFRAotOjEwMDE5MDAwQTY3MDNCRjBGRDk2QjgwQzUyMDdFNEJCRDZFQTQ2N0Q0QwotOjEwMDFBMDAwRTIyOTlCMEJFRjNGRDJERjY4ODg5Mzg4MjdEMTRFRjU3OQotOjEwMDFCMDAwQkI1MEI0NUZDRDdEM0JEQUFGMjYxRkU3RDJFNjEzQTY3NgotOjEwMDFDMDAwNDkyNzIzQzk5QjA0M0U4RTAyRDE4Mjc4ODg5QjZBRTAyRQotOjEwMDFEMDAwRkFCMkFCNzA2NDUyNzhEQzcxODlDNDE5ODBGMjNCMkM5RQotOjEwMDFFMDAwNzg4RjgwNkUyRkFGN0ExRTE2OEI3NkRDNzQ3QzFBM0U2OQotOjEwMDFGMDAwMTE5QkQxRTEzNUIwNzE2QUJFREI4OTAzREY0N0E3RTMwQwotOjEwMDIwMDAwM0RBRTFCQUYyNjZGQjU3MDdFMjcxMTA5Rjg5REM1REM4QQotOjEwMDIxMDAwNEUzOEZFMkY2OUYwQkQ0QTJBOEE0RjIyNEM2NEMyMzhGQwotOjEwMDIyMDAwRTkzMDIxREUyNTk2Q0Y4M0Y2QUZBOTZGMDdFRjAxRUIwQQotOjEwMDIzMDAwNUYwQjg3MENCNUFCRUZCNURFQzBFNUUwMTE0QjUxOEEyMwotOjEwMDI0MDAwODVFRTkzQUNFMUI1MThCODlEOUQyQ0I4NEU0RUEwNjVENwotOjEwMDI1MDAwRkUwMUM4OUZEMjk2RTc2MTVDOEFEMEM4RTg2QUM0NUE5QQotOjEwMDI2MDAwODJGQjY2NDQ5MEM3NTVBRDhBNDYzREQ1NjQyNkRFQTgxQwotOjEwMDI3MDAwRjE3MDNGOEU3OEU1RjFEMDhCOEY5RjNGMzk1NjE4Mjg2QgotOjEwMDI4MDAwMjg2OTBEQTUzNURBQ0UxRkNDMzUyQ0E2OEJEMDAyNDVCQQotOjEwMDI5MDAwMTRGRTEwOEI2QjBDRjQ1RjNGQzM5RDZDMTgwN0QzMUJDRgotOjEwMDJBMDAwNTZCRjc3MjhFRURBNkJDMTYzNjhBODFCQkFGRkMwMTQ4QgotOjEwMDJCMDAwNjQyMUY4MkUwOEYxMEVERDBGNzJCODUxQzk1M0M2MEUzNQotOjEwMDJDMDAwRUYwNjM0NDY4N0YyMkUzM0U1Rjc4RDY5MkM3RkYzREE5QgotOjEwMDJEMDAwQTFGNUYwN0U0REE3QkRFODY2MEI4Q0M3NkNCRjBFQ0ZCNQotOjEwMDJFMDAwQzMwMkYxOUFGN0Q1N0I5MzJGQ0EzODQ3NkYwQ0U0QzE0QwotOjEwMDJGMDAwRkJDN0I3MDdEOUZCQzUyM0FEQTE3QkZDMjg4RjM3NTlCNgotOjEwMDMwMDAwOTQ3QzAwRUQ4QkEyRDY0M0M4RDdBQTVBMEU2MUI5MDFERQotOjEwMDMxMDAwRjIzNDFEOUUxMEM4MUI0MkU3NzlCRjY1NEM0MUYyQjUwRgotOjEwMDMyMDAwMTQ1RTZCNzEzMjNDQzFCMUQwMzI2NkJGQTRDMUMzQjg5OAotOjEwMDMzMDAwRkFCREQ5NjEzQzQ4MkI2RUQwRTFFMTg2QUY4NTg3ODU1NwotOjEwMDM0MDAwNkI2RkE4ODdGNzU1RkEzQjZGNEExNzBCMDA1RkQzNzNBMwotOjEwMDM1MDAwMENGODhFREJDNDYzMTZGNEJGRDA1RjE0Q0EyMzBFNjc5QgotOjEwMDM2MDAwNDMyRkY3QkMxNTNCODVDMjI5NTdEMzk3RDI0RUExQUI3QgotOjEwMDM3MDAwREVFODI2OUREOEFGNjNFRjgzNkFFOUU3REYyREFFODcxRAotOjEwMDM4MDAwMDBERTMyOEIyQkREOTY4OEYzQzc3NzA1QTZCQjhCOEJGRgotOjEwMDM5MDAwRjIxM0MyNzQ0RDJDRUUwOUYwQUVGRTExQ0I4MjFGNUEzRgotOjEwMDNBMDAwNTRGRURBRTkzOTRCQzUzNDNBREUxRjAxMjNCODMxM0MzQgotOjEwMDNCMDAwOUZDNEU1REVBODUxNzQ5RTg5MkUwM0M2RDUxRkIxQjgyRgotOjEwMDNDMDAwNTc0MDNCREI5QzYwMDA2MkNCMjYxMkY3MDQ0MTBDRjdFMAotOjEwMDNEMDAwQTNFQzhGRkExRENDOEVBRjJGMzZGODU2QjBGMzYwRkMyRAotOjEwMDNFMDAwQkIxRDYxRkFFOEQwRDE0NzkwRDE0NzVCMjdEMjQ3QjUxMgotOjEwMDNGMDAwQkY5M0QxNDc1QjVENkUzNDNGNTcwMzNCQkE5MTA0Qzc0RgotOjEwMDQwMDAwQzFCQTM3NTkwQTBCQTQ2MTk0NkU2MjgyRjU0MDM3QjJDMwotOjEwMDQxMDAwRjdCNjgyQzIyOEM0RUIzQTE4NUY4RkY1RTFFMzUyRTZFMwotOjEwMDQyMDAwRDVEQkZBMzYxRTQ4RkI3MTA2RDg5OTA3MEQ3ODFFQTY1MwotOjEwMDQzMDAwRTA0REE5QjdDM0MyRTI0NkZGQ0RFNjdFMTFGQUE5OTkwNQotOjEwMDQ0MDAwRDRCMTFGOTY2RkVCODEzRjYwNUM4N0VERTBDQzVERDA0RgotOjEwMDQ1MDAwREUzNjlCQUU5MDIzREM2RkUzQzExNUY4NEU3ODIzN0YyOAotOjEwMDQ2MDAwRDczQjk2MDRCRDIwRDc3QkM3MDdEQjNGMjE3QzgwREVDRQotOjEwMDQ3MDAwOTMwMUY4RThDNEZERjIwQUJGNjc5NkREMjZCODQwQ0VDNgotOjEwMDQ4MDAwMEY4RjYxRUY5MEJDNkU2MTc2RjVCQjE2OTFBNzRDQUZGNAotOjEwMDQ5MDAwNDkzQ0I4NUIwNEZCMkI3Qjk1MDFFQjI3NDI5QUExOUU1QwotOjEwMDRBMDAwRkYyQTVFNUZEMkY4REQ5NTc1NTVFODg5NzJEMjE4NzgxQgotOjEwMDRCMDAwQ0ZFNEY5NzhGNzFFMkRGREM0QzdBNEE5RTAyOUVEMUVFRAotOjEwMDRDMDAwRjc5MEEyNDU5NDUwMjZFRTVERjAxMEM4NTU0QTNGM0U4NQotOjEwMDREMDAwNERCQjMxNzIxNEUwMkQ0NDNGOTQzRTIzQUQwRjZENzczOAotOjEwMDRFMDAwODhBRDZCN0MwQ0U4MEI1QkY2MkUxNUYxNUQ4RTdFQUU1NQotOjEwMDRGMDAwNkIxNkJDNDc0OUVCNjdDNTkwREFBREI0N0Q1NjJDNEQwMQotOjEwMDUwMDAwMjE5RkMwRjMwMzc5N0UwODRCRDMzRjc0MUEwNEZBN0QxMAotOjEwMDUxMDAwMDNGN0NCOUVFNTc4MjU5MkZEQkE5OTYzMjBDRkY0QjgxNgotOjEwMDUyMDAwRUNFNDE4OTQwQkNBQkU4NTY3NTRFMDVDNUJFMkU3REI0MQotOjEwMDUzMDAwNjlDMTM0MDNBQzlCQjI4RkE1QTAyMTYwQTU0MjJCNERBRAotOjEwMDU0MDAwNzIxODIwQ0VFMTVEOEZCQjA4Q0UwQjdCRTMzQkI3NUYxQgotOjEwMDU1MDAwQ0JFRTgxRUFCRjdGQ0VDN0YzOERGNUVCQkZGNEI4MkZBQQotOjEwMDU2MDAwRkUzOUUwQjdDQURDRjFGODRDOUFBRkJFRjYzMkZBNjk1MAotOjEwMDU3MDAwNTdDNDU0REZGQzU1RUY2OEU4QzdGRkVFRDVERkM0MDA3MQotOjEwMDU4MDAwMURGQTNGMzM0NUJDM0YzNUNFQ0FFOEYxODA2NzBFQjY1MQotOjEwMDU5MDAwQ0JFMkVGMDQ5MjgxNEExQ0IyMkFDRTE1Q0FCODVFODYxRAotOjEwMDVBMDAwNEI5OTg2REY1MUNGQkEwNTU5MjBBQ0E3NTc4QTg3RjZGOQotOjEwMDVCMDAwMzFBOTc4QUU3OEFCMkVBRTU1MzkyRkJCMjVDMEZDODA2MwotOjEwMDVDMDAwNTlCMUJFNDJFQ0VGRkE3NEY2Rjc0OTNFNjNGQTkyOTlEQwotOjEwMDVEMDAwRkUwRkNFQTFBNkYyNzMzM0Q3MzFGQjVFMTA4NzU5MDkwNwotOjEwMDVFMDAwOERGOTA4M0YzNjE1RkQ1QTM5NDRGQkZFNDFENjQwQUYyMAotOjEwMDVGMDAwNjQ4MEYyRjQ1NDg0OTc2N0Q2OTVBNzEzRjQ1QjkxNkJFQgotOjEwMDYwMDAwQUVDM0Y5NEQyNTJBRkQwQ0U1NDZBMzEzRjhGMUY0RDE0QwotOjEwMDYxMDAwOTRGRUY5RjdDQkY0QkZFMTI2MzI3Rjg2Q0FDRUI4Q0Q3RgotOjEwMDYyMDAwNzE1RjUxQkU0NjZGNjlDNDc3ODU3RUZCQjkzODNGNTIxMgotOjEwMDYzMDAwRkNDNTYzMjEzQzE3MTU0MTNDODAxRThGQjkwRTYxOTVBNgotOjEwMDY0MDAwRDVEMTEzREY3QUZDRTlGMUFERTA1MThGQjc5QzBGOUQ1NgotOjEwMDY1MDAwRjlGMThFOUVGOEQxRTMyMzdDN0VFOTVCMEJFQjMwNzVEQwotOjEwMDY2MDAwQjQ4OEYyNEJDMTdCNEZGQ0IwRjVGQUVEQjVCNDlFMDBGNwotOjEwMDY3MDAwRjQ0MkYxMERGODRDMTczMEJFMjcyQjg2RDM0RjZDM0E1RAotOjEwMDY4MDAwRTIzNzBCMTRDMDAxNDgwRjk4RDdFMzU1OEZDN0FDMDQ2RAotOjEwMDY5MDAwREUzRTgxRDVERjBGRjgxQTg5RkMwMEVEMjE2NUREQjI2MQotOjEwMDZBMDAwRDI2QkY3QzY0MURFQzRFODRDRDFBQkE3NzJCQzUwQkREQgotOjEwMDZCMDAwMUFGNUU2QkM0NDJCRkE5QjQwQUY5RTlBMTRDNjVCNUVDQgotOjEwMDZDMDAwMTUxQjU3REU0OENCMEI2MDlGRkUwQUZDRDFCMTA4MDYxNAotOjEwMDZEMDAwREZDNUJDOTVGMDVGRTA1NjNDNUZDQUUyNTkwNURGQjc2NQotOjEwMDZFMDAwN0VBNkQ1OTNBN0ZBMEJDRTgyRkUzRERDRTQ1RTY1MDVCRgotOjEwMDZGMDAwN0Y4QzEwODdFNzc5MTRGRkM3NzVGOEQ3QjZCMzZCRjMxMwotOjEwMDcwMDAwN0E3Q0ZDMEFGRTMxQjkyN0RFMTQ3QUFCQjM3MkZEN0MyOQotOjEwMDcxMDAwMzAxOTBBRkFGMkQ4MzczMzYzODE3RjEzN0Y3QzQ0QkZFNAotOjEwMDcyMDAwQzRDNDYzNDUyMTM4OUM2RTkxOUUwNUUyMEU3REI3QTczNwotOjEwMDczMDAwN0YwQjNFNzY5MDRBNDkxNTFGQkI1MzcyQUZCM0RFRDg4QwotOjEwMDc0MDAwOTM4RjI5RUIzNTg1QUZDNzE0RTJERDA1N0VBNjI5NDREQQotOjEwMDc1MDAwRkE0QkM4MUU0ODBEQ0ZGRjc5MkJGN0IzMEQyMTQzNjAyQwotOjEwMDc2MDAwOUU1RjU4MUM4Q0ZGRjM3OTg2RTY0REQ1NEJFODNGOUI4NgotOjEwMDc3MDAwRjc5RjZEQjZFMEZEMUIxMjk0QkE0Mjc4NEVDM0Y3OTMxMwotOjEwMDc4MDAwQkNDNkY4RjAzODY0NjVCRDUzNkEwOUQzRTdFNkUyRkJGRQotOjEwMDc5MDAwRDkxNDJGRTRDQjk4RjAzOEI2NTkwNTA5REYwRkUyRTNGRQotOjEwMDdBMDAwMzhERjZDRjY0MjlDREJEMzkyRkIwRDJCRjgzRDg0ODM0MwotOjEwMDdCMDAwNjM3MTdFNTI2MDE0QzgzRjdERjlFNUI2QkRENTUwNEVEOQotOjEwMDdDMDAwRUI5NTYwM0QzRUZFMEE5MUY5MUY4MjNCNENCRTE3NTJFRAotOjEwMDdEMDAwN0JENzUzRTlGNjQ2MzlBMUQwNzEzNkRDN0JCRDAxRTgwMQotOjEwMDdFMDAwM0UyOEMyQjhGREZDNUM2NUU3NDU3NkNGQzE0NUVDQUI2MQotOjEwMDdGMDAwQUVBN0YwRjY1RDYyRjcwMkYyMjhEQjgxN0E3QUZBRURCNQotOjEwMDgwMDAwOEI0RUYzNDk3MDFFQjREM0QzQUIyMkNGMUJGOEZENUJFNAotOjEwMDgxMDAwNDUzRkJCNjg3NUJGMEZFQkRFQzBFRkUzRkEyRjhFQkEyMgotOjEwMDgyMDAwMEVENkU3MUJEM0Q1NjEyRDVEMjlGNDQ0RTlFQjM4RjRFRQotOjEwMDgzMDAwRDM5REY5RjEzQTUwQ0JERkNCQkM5QzA0RjI1MUQxRTMwQwotOjEwMDg0MDAwQzNGQThBRUI2M0E4RDc5QjNFM0ZEQ0U2RUVCMjdFODUxNwotOjEwMDg1MDAwM0VBRkU4MzU3REQ5MjM2NEFGNDQ0NkQzNzFDRUUzRUI5OAotOjEwMDg2MDAwMzNEN0RDMkVCMzhCQzY0MThDRDM2Rjg4NTZERUNCNzM2NwotOjEwMDg3MDAwNDQ4MzNFMzlBRjIxRUQ5NTY2Mzg1N0FDNjM3RUY5MDc2NgotOjEwMDg4MDAwNkI2NThEM0RFQzg2REJCRUQ4OUVCRDY3M0I3RkI5QjYwMAotOjEwMDg5MDAwRkMyMzhBRUY0MUYxRjhDRUFERDY4RTg2RkQ5MTE0N0UxMQotOjEwMDhBMDAwQ0ZCNzY3QkYwNjJGQzhDOTc5MjNBMzMxN0U0RURGQUYwQwotOjEwMDhCMDAwN0U3RUZBN0VGNUZEMzU3MEZCQUFDMUQ4MzhEQUE5RDI2MgotOjEwMDhDMDAwNEZFQzM2MTY0NzdENjlDRDkzQ0RGMDE0NUU2RkY4NzMwQgotOjEwMDhEMDAwOUI4N0I4RDQ3RjZGQUVBMzIxN0E0RUE0Rjc2ODE0NzhCMwotOjEwMDhFMDAwMEFCRUU3QzJDQjk4RTAwRkE4OTVGRjFFRTk5RERENkMxQwotOjEwMDhGMDAwMzdGMzEzRjRENkVGODg2MDNFRUE4Mzg2QTcwMzIyRTgzNQotOjEwMDkwMDAwRjUyMzgyMDRGNUYwRUNBMENCQjA1MDYzMEYzMDdCQjkzNwotOjEwMDkxMDAwODczRDAwRUZBNEQwN0M2NUVCMkU2NjBGQjRENEExNURCQgotOjEwMDkyMDAwNTE0OUVEMEE5MDNCMUJFMDFEOTBDMTdDNDAxOTY4Mjc5RQotOjEwMDkzMDAwODRFQzVFODhBRkNBODY3NzMyQjk1RDBDNEZBN0E1MzdDNQotOjEwMDk0MDAwQjJGQTMzMUY0RjM3MzU4QzAwQkJENTlEMEMyRjkzQ0U5OQotOjEwMDk1MDAwQjQ1REZCQTg5OURBNTdGNUE5MjQ4QTUwRkJBQUM4NzY5QQotOjEwMDk2MDAwRUQ3N0Q2NEVBMkRDM0JERTI1QzBCQkE0MzRGRkE4NjVFNAotOjEwMDk3MDAwNzJGRkVERUM5OUI2RDE4RjgyQkY4MURBNjdCN0Q5NTQ5NwotOjEwMDk4MDAwNzY2RjZGRkJFMzY2OUIwM0YxRDlEQkZFRThCNDE3Q0QwRQotOjEwMDk5MDAwMDQzODhBREY4MkYyMjFFNDA3RkUyOEJFRkZBMzQyRjQ3NgotOjEwMDlBMDAwMTcwQjc4NTNFOEU1RjZFNTBCRDFDRTg4QkFFNjZBMEE2QwotOjEwMDlCMDAwQzQ5MzY1NzMzQTcwREJCODVGMzY4NkMxQTk4OTYxNzBFQwotOjEwMDlDMDAwMjY0QTZFMzdGNEQzQkRGQkVBMjhGMDNCQkYzQkZBMDQ1RQotOjEwMDlEMDAwREE3OTdFMkJGM0RCMUZGNDk0MTVBOUUzREI2QjZEMDI1MAotOjEwMDlFMDAwQTc5N0MwMTBEODdGNzdEQ0I4MjcwMUVDOTU2QzU5QzA2OQotOjEwMDlGMDAwRjc0RUZEQjJFRkU5RjE5OUMwOUY2NkRCNTdEMjI5NjY0OQotOjEwMEEwMDAwNEYzNkUyRkQzMjdGNTQ2MEM4QzMyQTNEQ0VDRkRGNEQ2MgotOjEwMEExMDAwRjU1RkRDM0Y0NDFERkZEQzZFQ0RBQkI1MzFGODIyQzA4NQotOjEwMEEyMDAwQ0ZDRURDN0IwQ0Y0ODBERUU0NEU1OEFFQjgwNDkwMkJDNQotOjEwMEEzMDAwRTRFQUExMjQzQzVGNkFERDY3MDM5RjY4MTc3RkU3RTA3MwotOjEwMEE0MDAwN0NFQjlFQTQwNTM0QUREQUYyOUYzNkIwRTNFQTM4M0U4MwotOjEwMEE1MDAwQ0U0QkVERjg1RTUzRTU3NjExREYxM0ExRkQyNjNEMDA4OAotOjEwMEE2MDAwN0VFQkQ2ODU1OUVDREUxRkJCQUZBNkM4RDVGMTlGRUY1NAotOjEwMEE3MDAwMTk1MkM0OUM4OTc4RkY0Q0QxMzdBNzk4QkQzRTE4OUY2NgotOjEwMEE4MDAwQkY4RUZEMURDQzI5QkFGN0M5NkVFNUVGOTNFOUY1Q0YwRQotOjEwMEE5MDAwNjc2Q0IyRTIyRkMzRjhBOTY1NzZENjRGNkZGQjJCRkJDQwotOjEwMEFBMDAwQjMwNEUyNTNFREJGNkMyOTIwQzJGOEIzM0Y0QkMyRUY1MQotOjEwMEFCMDAwRTcwRkE0M0Q1NTA4RjYzRDkxOUQyMzAxQUM0NEY2QTJGNQotOjEwMEFDMDAwN0VDQkNGQTdFODZGMkZCQzdCQkU5MzY3REU2RUJEM0NBRAotOjEwMEFEMDAwRUI2NjI0NkUyQUQ3MDREMEM3REMwMzk4RDM5MUM5MDdFQwotOjEwMEFFMDAwNDVGRkJCRjUzM0FEREY1NUFGMDcyQjcyMzJENzNGNkVGNQotOjEwMEFGMDAwRDUxMDAyNzg3N0NDQzJGQjEzMDcyNDhDRjdEMkVCQzk1MAotOjEwMEIwMDAwNTM4MzA1QkRFOEMzNEYyMDdENkQ2RDREOEYwMTdCRkU4NgotOjEwMEIxMDAwREY2MDlGMDBEREI2NUVDNkY3ODNBQTQ5RTAxRTc4Qzc5NgotOjEwMEIyMDAwQTlCQTU1QjQwNzYwRkMyNEYzN0FEODY3OEEzRUExRTBERAotOjEwMEIzMDAwQTVFREVBMUVGMzU4REE3RkY2NDU4MzdEMDUwNUYxNzZDQgotOjEwMEI0MDAwRjAyRjY4NTc0RkY4RkRDMTA0OTA2N0ZFQTA4NEU3MDdCNwotOjEwMEI1MDAwRDkxN0Y3QzYyQzU0RjE0NUZGNTUwMzdFN0ZGQkVBNkU4QgotOjEwMEI2MDAwRURGNzYwRkNGNUQwNkU4QjgxRDlDQjdCRjdGRjNEMDZBRQotOjEwMEI3MDAwRjhENERCNTcyRjIxQkM5MDNFRDE1MzZGNDZGRDNCQ0ZCRAotOjEwMEI4MDAwMkE4NkZDRDE2QUJEOTk4OEQ5ODcyMURFNkI2QTJDMTUyQgotOjEwMEI5MDAwNkI0MkVGRkE3MENFODc2NDk1OTVGNEQ0MkI0Mjc4Mjc5OAotOjEwMEJBMDAwMkUwOUYwRDA0MzFGNTZGMEFDRDMzMzNFQjI3MTNENzdERgotOjEwMEJCMDAwMTgxOTBGRUY1RUI2NUQ0REE4QzA3QkM3RkUxOEZCMEE4MwotOjEwMEJDMDAwOTRDRjRDOEZFQURFN0JFRUM5RTlGMEZEQTBDOERFOUQzNAotOjEwMEJEMDAwQjgyQUUyN0VEQUJEQjM2Mjc4ODc2QURGNTI0RThBRUJDQQotOjEwMEJFMDAwNzY2NUQwQzUwQjZGRDFGQTU3RjY0NTMzRkZCQUU0QkMzMgotOjEwMEJGMDAwNUU3RDRGMjI1Q0RGQzdGMTE1MThDQ0NFRTlCQzgzRTFFNgotOjEwMEMwMDAwQkRBODZGQUNDRjc0RjVCMEY3RkY2MTQzM0QzOTU4MDAxNAotOjEwMEMxMDAwRTI2MkQ0RkE0RTIzQUNGRkJGRDk4QTNFNjdGQ0E1MjUxOQotOjEwMEMyMDAwMDZGODhCOTdFNDBFMjFCNERGQjI2ODkyMEI3NDE1QUMxMgotOjEwMEMzMDAwMjM3NkIwMzNCNjFGMzAxODYwNUQzMjM3QTU2MjVDQ0ZDMwotOjEwMEM0MDAwMkJGQzFDNzM0OTRCQTMzMTU1NDUxNzRCRjgzOUQ4MTk2OAotOjEwMEM1MDAwRDk5QjEyQUZGQUJFMzI5NkYxOTczM0ZCQ0E3RjgxNzFFRQotOjEwMEM2MDAwMUQ3RjM0OTE5MTExRjREMDg1QjE0Q0ZFNkUzMzdBQTc3QgotOjEwMEM3MDAwNkY4NjdBQzcwRDc4REY2OEVGRkU1RkVGODc3NzkzOTcwRgotOjEwMEM4MDAwMUM3MzhDMDNCRkUwOTQ1OEI2MEZEQTBFQkU1MjBGNzE3RQotOjEwMEM5MDAwQzE2RDFGODJENEEyNzI2NjYzQjE2OEEwRkRCRTQ1MUNGRgotOjEwMENBMDAwQ0NBRjc3OThGREJERDY5MDNGOTRCODEyNjA5RTM3QzUwMwotOjEwMENCMDAwMzJCRUZERDYwMTgzRTZEQ0VDMkRGRUJFRUZGNUIxOEMzNQotOjEwMENDMDAwMEZBNUM2MzJCRkRBRDYwM0I5MDkwQjcwRkZCOTQ3QzQwNgotOjEwMENEMDAwODIxRkYwNjQ0NzNENkM0NUM1MEZBOEU4NkY5MzBGNkYwNgotOjEwMENFMDAwOUQzRTg2RkU3MzcyOTdDMTBFQ0JFRDM4RkM4MjA4RjNGMQotOjEwMENGMDAwNzU5QzIxMjQ0RTIwM0RGNDM5MEE2RkFDMUFERTVCNURGMQotOjEwMEQwMDAwMEMxRTFEQzc2RUQ4QUYwQUZFQTkwNEZFNzEwNkNEQkYyQQotOjEwMEQxMDAwRDUyRUM1NDMzQzk4ODI3RjY1MUU0QUZGOEUxNkUyREFDNwotOjEwMEQyMDAwNjBDMUFERTREQUZBMTVGRTY4RTVFRjMxNENCMDEzRTVDOQotOjEwMEQzMDAwRUYzMzIwNUQ2RUI3Qjk2RTg5QzU3MjZGMEFFNENGRUNGMAotOjEwMEQ0MDAwNjM3QUQyMzYyRTRGNDk3MkYxNzBDMDlGQjI0RUYzNzk1QQotOjEwMEQ1MDAwQUE4Q0E3QjdGRUVGRTdFMzU0RDJBRjRCRDdBRkM4MEVDQwotOjEwMEQ2MDAwMkZEMkNENzYxNjRGRUVGMDA2Q0NFOTEwNzdENjk2OEVDMAotOjEwMEQ3MDAwN0Y5RjRBMTU5NzdCM0Y4RUZGOENGNkZEQzJCNjBFODM5MAotOjEwMEQ4MDAwMDFFRThGNTVFRjEwRTI1MERERURBN0JFMURBMjMzQTk5NQotOjEwMEQ5MDAwMDVFOUFGRUQxOEMxN0Q1Q0RFRkM1REU2OEZBNDcyOUZCNgotOjEwMERBMDAwQkZFQjg2RTdFQkIwN0ZGODM5RkIyMDgxQTY5M0ZEMUJGNAotOjEwMERCMDAwNTYwRTQxRkMwNjZDQjBBRkMyNzhBMkZCMDZEMkRBNDZGMgotOjEwMERDMDAwMjNEMEVCOTI2NTJDMkRFNUU3RDU0QjlBRENCODNGNEI1MQotOjEwMEREMDAwRDZCMzc4QzQ2NUIxQTk0QzNFNzM3QTI1ODZFOEMxRjhDQwotOjEwMERFMDAwREVCQTREN0I4RkYwMUY1QzdFOUU2RDdENkEwRkY0NEJFQgotOjEwMERGMDAwRTlFQkZCODA4RjlCREE5RTU4MDdDMzU1RThGNUVDNDY3QwotOjEwMEUwMDAwMTlFMTk0NDU2QkNGRjMzREIxQ0NDRkI4RkQzMEEzRjdEQQotOjEwMEUxMDAwQzkxQkU1NUM3ODRGNkNCMjk3RDhDMUJGRkRENkM2NERGMwotOjEwMEUyMDAwMjJGMEVGQjc4MDlFNTNEOTNFMDc3OTdCNjZERjYzMzFBRQotOjEwMEUzMDAwREYwN0Y5RDY2OTIwRTA0N0RGNjYyNDY1NUI1NEZCNjI3MwotOjEwMEU0MDAwRUY4NjM3MzRGQkI3QkNCOTZFM0FGQUVCM0JFMjA1RTAwQwotOjEwMEU1MDAwRjNDQUJFNTVGMEJFQ0RFOEJDMERGN0ZGOURCQUZEOUZBRAotOjEwMEU2MDAwQ0ZEQUI3QzJCQUQwN0E0RkYxRkRGRkQ0MzRCQUZGRTk3NgotOjEwMEU3MDAwQTdCODhENzEwMkMwRDk2NjhDRkNDRURDNEJERjkwRkUyQQotOjEwMEU4MDAwNDI3Q0I1QTMwNzVGN0QyOTk2RjkxRjZDRTlCNEZGRUFBMAotOjEwMEU5MDAwM0IyRUExRkYyMTM0M0U0RTM3NEZFNTJCNzQ5MzJBMDBBMQotOjEwMEVBMDAwRkUxQkU5MEE4RTAwN0M1MUJDMDIzRDUzM0Q3QUZFQ0MwQwotOjEwMEVCMDAwMENEQzk1MDcyNDNDRkZFMUU3NEIzQzJFMDQ3Nzk0NkE1OQotOjEwMEVDMDAwQkY4NkY5OTlCMjZGREQ2RkMwMzhCMkYyNkI1NzgyOUU2MAotOjEwMEVEMDAwOUY1MEU4NDVGQTNDMkJCODg3Qzc1Mzc5NzYxNkY2NzFEMAotOjEwMEVFMDAwMDQ3RUIwOEVFM0UzOEFFQ0VFRUI3REZGQzE0MENGNjU3QwotOjEwMEVGMDAwRDQ2Mjg0Rjk5MEY1ODIxREQ2NDUyOTc3QUM2N0VGQkRBMQotOjEwMEYwMDAwMUVFNkYwOTRFRjg3QkYyREJFODMzRERFMjEzRENDRjA4MQotOjEwMEYxMDAwMUQzNDQyNUNFQjI4MUY5MzYzNDRDOEM1RkQ0MDBDQjdFOQotOjEwMEYyMDAwMEY4NjdEQjY4NENBQUZGQjU1RjJFQkFDREM4ODc0QUFBMQotOjEwMEYzMDAwRTBFMTIzQ0VCN0FFQzRCMTc5M0ZDRUM3RTkwNzFGNUQ2QwotOjEwMEY0MDAwQTIwQUZGODIyNDA5NkMzRjhCMDJEQkU3MjJDMDNGQkI3MQotOjEwMEY1MDAwRUZBNkRCOTBERUVGODg0Q0VGNzZCMEI3RTJFMUVGNDcyQgotOjEwMEY2MDAwNkQ0MEZBOEM5QjY2Qzc3QjJGNEY0OUNFQTgzODhEN0U4QgotOjEwMEY3MDAwRTRDMzc0RUZBNjY3RDBDRTAzRkE4NUZEREUxQkZEOTdCMAotOjEwMEY4MDAwMDFGRDkzMDg3NEVGQTM3NEFGNUEzRjg1MEUyODVERkNGMgotOjEwMEY5MDAwMURGMEE1N0NEN0QzODU3MjBFQTlFMDY1OUJFRTFDNzM2RQotOjEwMEZBMDAwQUE5REUxRTlGRjAwNTI4RDZFQjUwMDgwMDAwMDAwMDBBRgotOjEwMEZCMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZCRDdEMDk3QzU0RDU5OAotOjEwMEZDMDAwRDVGODdERjM2NkM5MzIzMzk5NEM3NkIyMzA0OTBDQTAxRQotOjEwMEZEMDAwMkMwRTQ5ODBCMEQ4NEUwODIwNEE4OEMzNTJEN0EwOTMxRgotOjEwMEZFMDAwMDAwOTRCMzYxMDk1NTY5NDgxMjAwNjhCMTgxNTJEQjZBNgotOjEwMEZGMDAwMjA4Mzg1RUY0MzFCNkQxMEE4NTg4MzI2MTAxMTJENjJBNgotOjEwMTAwMDAwRENCMTdGQTU0MTkwNDU0MTIyQTgxRkVEODdGNTNCRTc2NAotOjEwMTAxMDAwREM3QjMzMzM2RjI2MDI2QUZGRTFDN0VGRTZERTc3REY2MgotOjEwMTAyMDAwNURDRTdFQ0YzOUY3QzU2RUQzMzEzNjg0MzEwNzYzQUVERQotOjEwMTAzMDAwRTYwMThDN0Q4RjNGQkZGNDk3OEMyREExRTc3MzM3Q0ZFRQotOjEwMTA0MDAwNUU3MTI0ODJEMUNGRjdGMEJGQkE3OTVFNTBCRDc2QzcwQQotOjEwMTA1MDAwQUY1NzFDRTlFN0FGQ0ZDNTVGNTJFMEZGNzFBNjY3ODlDNAotOjEwMTA2MDAwOEM1NUYxNDdBQzRDRUY4OUI1MjVDMEZCMTE5REQ2NkM3MgotOjEwMTA3MDAwOThCNDY2RTIxOTYzODQwMzlGNzgxOTgzRjY2RjYzMUM0MgotOjEwMTA4MDAwNTQzRUFBNkZERUQzMkIxRkNBMzFDQ0U5ODVBNjM5OUIwQgotOjEwMTA5MDAwMzMxNThGOTlCMTA1MzYxQkFENjdGOTI3RDM5M0REQjBCMgotOjEwMTBBMDAwREU0NkM2QzZFM0JBOUJDNTdDNzJEREQ5MzY4NUM2OTlENQotOjEwMTBCMDAwRTAyOTczOEY4OTgzNjc2NjRGOUU3QkEwRkZGOTA3NjZERgotOjEwMTBDMDAwNEY5NjZEODhCRjNFQTE3MEJFRUExODQwNEI4Q0M0N0UxRgotOjEwMTBEMDAwNjM1NTk4MENFNjlGQkZDOUU0MzM2NTMyQjYwNTlGQzREQgotOjEwMTBFMDAwQzMyQURCQTM3QzlCMzJGREVGRDlGNENDQTVCNzMzOTZBMgotOjEwMTBGMDAwNkJDQkE0NzVDMUVBNUFCMUVFNTg2ODY0OTdDMUJDREZFNgotOjEwMTEwMDAwNjY5NkI1OUJFMUQxRDUxRERFRTI4MUIwOEYyRDQ2RUYwRAotOjEwMTExMDAwRDQ4OTk5Mzg5OEYzMUExQ0ZGOUE2MjlERUQwMTU4NkE5OAotOjEwMTEyMDAwQUNDQkE2MzgwN0QwOTI2OTVFQjY4RkNGOTM5N0VERUMyMwotOjEwMTEzMDAwQ0ZCMkExRUU3MEU2QjkyRDhDOEQxMkY4NjJBRDMwQzkzOAotOjEwMTE0MDAwNzAzRjFDNDJGMUM2RTFEOTEzNUUxNzIwN0M4NjUwMTcxMAotOjEwMTE1MDAwN0E3RUUyRDVBODFCN0Q2NkZGRjM0NDAxQkYyRjYzNzgzQQotOjEwMTE2MDAwRjlBREMxRDNEQjY2MEUxRDI3NjAzRTU1NDk2NkNDQ0E3QQotOjEwMTE3MDAwM0M0QjU1NUNGRjI4NjZEQkU0RjAzRjc3OEM2MjJFMUMwRAotOjEwMTE4MDAwN0Y5QTE4NTdCNkNCRkE4RkE2QUZBRTEwRkE5QTg2NzgyOAotOjEwMTE5MDAwQUQ4RUU4MjJCQUVBNTNEMDY5NzRDMEJDNEMxOUREOEIxRAotOjEwMTFBMDAwQzFGQTk4RUVEQTVFQUM4MEJBRUE3MUJEMDA0ODU1MjkwMgotOjEwMTFCMDAwRTBFQkM3RjY4NDhEMzNENzIzOUVEOTAxMTNDQkM5MEMzRQotOjEwMTFDMDAwREQ2N0I1Q0RDMEUxQjZEMTMwRkE2NkU4OTdFMDY1QjgyNQotOjEwMTFEMDAwMDNDMDhCODNFMzg1MzVERThBRjg2QkRDNjg2Mjg4RDdEMQotOjEwMTFFMDAwNkY2MzM5RENBQzUzRDk2ODAzRjRCNzQyN0YyNEY3QzY4OAotOjEwMTFGMDAwQTk5RTAzNTc0MUJEMzFEOUU4NTA2MDlFMTM4NjJFQzI4NwotOjEwMTIwMDAwRkI4OUFCQTA4REU4QzNBRDIwQkU0RkJDM0FFMjlBREZBQwotOjEwMTIxMDAwNDBCQjc3QTI4RUU1QzA4QjVCOERCMDA1QTRDM0JGQTc5MgotOjEwMTIyMDAwRjkzNjI5NDhBNzJEQzQyN0YzQzdCMkMxMjY3OERFQkVGOAotOjEwMTIzMDAwNjkxOEQxRDVBQ0UyMkMwNUU5NzZDRUU2NTgwNTlGREJERQotOjEwMTI0MDAwQzdEODc0MkFGM0VGNjNEODQyOTVFODEzRjhBMERFMTZFNgotOjEwMTI1MDAwODA4RjYxREUzQTE1RTFENTNCQ0U5MzZDODg2NUVDMTE0OQotOjEwMTI2MDAwREIzNUUzMjNEMjgxQ0UzMjU5MjQxQkNDRDg0MzUwNUZFNwotOjEwMTI3MDAwMDk3MDZCQjRCQjE0MTY0QkY1MDY3MzBBRjEyMTYzMjM5NgotOjEwMTI4MDAwMDhBRUFEMENGMEQ0MThENTVENzc0NTYwRkYyQzVFN0ZCRAotOjEwMTI5MDAwQTRGMUVBODY4NjM0QzY5RTg5NzEzNTIyOUUzRTMwQkIxMwotOjEwMTJBMDAwMUZDMUY5ODcyNkQ1QTk0NEU3ODJBRTdGODBDRTdFMTI4MgotOjEwMTJCMDAwQkRENDJFMkM2Mjg3RjNFMEY3MEU2NjBFQTQxQjkwNDc3OAotOjEwMTJDMDAwQjc2RTA2Rjg5NUU4M0Q5QjcwNUQzNUJEOEUzRThFQzNDQQotOjEwMTJEMDAwRDVCNjdDNjVGNDg0QTE3QkI5OEU3ODIxMTdEOEM3OENFQwotOjEwMTJFMDAwRjAxMUVGQUU1M0NCQ0Q3RUI5QjNDNTY2MTc0Q0VENTJCRQotOjEwMTJGMDAwMjY1QkZDRkM4NjcyRUI3OTMzOTczQjU5NTA5QTIyOTgxNwotOjEwMTMwMDAwRDc2MkM3N0UzRUEyMjNBQ0M3RTRGQUU1RDFDQTYyREQ0QwotOjEwMTMxMDAwNzg1RjE4M0U3RTBEODlFQjY3OTRDRkFDRTU3RkZGRjJENgotOjEwMTMyMDAwOUJBMUQwMUY3RjU3ODk5RjVFRTNGQ0M0RTVGNUEzQzU1MQotOjEwMTMzMDAwOUYyNjIyM0M5MDkzRjBCRERCQzUxQ0VCOTczQURGRUE3OQotOjEwMTM0MDAwOEI3NEI5NUY2NTlCQTAzRUQ4NjRGNDJBMzFCODZERTYxMgotOjEwMTM1MDAwQjAyNThBRjE5MDBENUI5NDU2Q0IyMEE4RkY0QjYxMkVFRgotOjEwMTM2MDAwQzBDM0U5N0ZBOTU0QUVCRkQ3M0QzRTEzREVBRkQ5QTFCQwotOjEwMTM3MDAwNzMyRTg1N0UzNTJEMEFGMTgzQjMzN0YzNDUwMDFEMzc3MwotOjEwMTM4MDAwNDc1OTA3MzExOEFGNzBCN0Q5NjU4MEY2RDM0QTA0QzlGOQotOjEwMTM5MDAwNjU5QzAwRDc2MTkwRUIyRkU4Q0E2ODgyRTdGNTJEQzAwNQotOjEwMTNBMDAwN0Y1MDNENUQwOEE4QzZGNUVBOUQzMTZDODAxRkJFODM2NQotOjEwMTNCMDAwREU3Q0I0MUZFQzAwREExQjlEQzg2NzRGNDVGMkYxOUYzRAotOjEwMTNDMDAwOEFDQ0YwODExMDgzNTJCRUU3ODgwMTRBNjE1OTgyNkU0RgotOjEwMTNEMDAwRjQ3QUM2NjIwMDRGNTA3OEIxMUNCNTMwREJBNTA3M0NFQgotOjEwMTNFMDAwMkI3QUU2MzUwMEJFNDY3NUI1QUEwODlGQUMyRTg3OEVDRgotOjEwMTNGMDAwOTlGREYzRTlCQjE4RUQzQjRCRUZEMDM5MDNGNEQ1RDY5QgotOjEwMTQwMDAwQkRDRkFCN0E4MEVCRDAzMThERjUyQTk0ODkzMTlFNkZCOAotOjEwMTQxMDAwMTBERTIzNDZENUQ1NjM3QjVDQjE1N0Y1NDBGRjdDQTUzNAotOjEwMTQyMDAwNkVCNzA1RTlFQzFBRTY0NEI5MkFGOTI0QUU5M0I1QzFDMgotOjEwMTQzMDAwNzI1OUVDODE0RTk3MTVEQTQ3MUM3N0I1MEQ4MEZEQzdDMAotOjEwMTQ0MDAwQjg5OTgyRTM0OUZEMEQ3Q0M2NjI5MTBFRTM1RENBNDQwMgotOjEwMTQ1MDAwMTg2N0U4M0YxOEMxNDc4RUIzNzVFRjY4MDVGOTNFQkVCRgotOjEwMTQ2MDAwNjM4Q0UyMTgxMDRBRTc2Qjk4RTNCNzM4QUU3NzlGQ0VFQgotOjEwMTQ3MDAwODlGODc1MzQzM0Q3MDY5NDEzN0ZCQTYyMENDMjRCRjZFMQotOjEwMTQ4MDAwRUYxRENCRjVDQTQ4OEZBNzA4NDQxNUVFMjcwNkU3MURDOAotOjEwMTQ5MDAwN0VBMzZGQjcwMUQ2MzM2Qzk2NzdCN0QxMTFCMDlGRDlDMQotOjEwMTRBMDAwOENDNjRCRURGNEQyM0U1MjBFNzgwQUIxQ0NCNkM2RDIwMQotOjEwMTRCMDAwMzgyMzhFQjdCNjBEODA3RTQ5NzVCMDFGNjg0RkVGNzgyMAotOjEwMTRDMDAwNEY0MUI4QTZENzc1Mjg4OENGQUQ3Qjc3RDE3QUQzM0E2QwotOjEwMTREMDAwREE3OTI5RjhFQjc5NjExNzc0REIwMzU2MURFRDIzREIwQwotOjEwMTRFMDAwQ0FGNUNERjI1MzVDNkY2NkM3N0FCMkFEMDlGRTdEMkNBQQotOjEwMTRGMDAwMkZGNDI0RDdDMUY4NkJGNjY2NzVFRjE3RTVFRTk1Mjg0MwotOjEwMTUwMDAwRTQwM0U0NTI2RUFDOTFDNkI5Q0JFQUU5OEZGQkFCQkQwNAotOjEwMTUxMDAwQjE3MzBGRDJFMEYzN0JERkIxMTI3RkI0QzQxMzdFMTMzQgotOjEwMTUyMDAwRjc3RDRBRjg0ODVDNDhCQTk4QUREOTM3NUY0MTc5QjE0MAotOjEwMTUzMDAwQTYxNDcwQTY4NEMyNTlDQThEMzVCODdFQTIxRjVCRjQ2QQotOjEwMTU0MDAwMjRBMENGMjdFRDlFODJEODQwN0JBNUNDMUU5RDE1MjBFMAotOjEwMTU1MDAwOTdFNDdCOEYyRjY2RUUxOUIwOTA2MUVERTU1QjU5MTYyRAotOjEwMTU2MDAwQzlGNzdFQjEwMUYyN0RDMkMwRkIyMjkxOUU5QTJDMkU1QQotOjEwMTU3MDAwMTdCNjlGNTZEODhEMzhDRjMzNTg0MkZCMzMwNjVFOTc0NwotOjEwMTU4MDAwRjA3QTQwRTAzMzNCNzY1MkI2NzUwODg3OTMwREU4Rjg2MQotOjEwMTU5MDAwOTk0OERFNEYyQjhGRUU4REQ1MDlCQjgzRDMwQkVCRTA0MwotOjEwMTVBMDAwRjQ4MkZCMDhCNEJGNjZDNjcyM0M4Qzc0Nzk4QUY0OUNFMgotOjEwMTVCMDAwNEVBNkUyRkU4NjE3Rjg3NjIzREQwRTFCRUZERDhERjRENgotOjEwMTVDMDAwOUZDRTA0OUQ4Q0U3NzRBMkE1RjdEQjYzQjk3QzFENzFFNwotOjEwMTVEMDAwQkM4QjIxRENGMzE1RTYwRTY3RUY1NEM2NzJCQjI5QkU0NwotOjEwMTVFMDAwNjMzNEQxMEZGMDQzMTlDRTM3MzRCNTRFMzVBMERDNjZFNQotOjEwMTVGMDAwQjYwOUE4N0Y3RTEzRUJBMDdFNzkwNUFFREQ0ODZGMzY3NQotOjEwMTYwMDAwOTc5QkY4NzlCRUQ5QzZFOTI2OTNEMzA3QkMzRjI3MUMyMAotOjEwMTYxMDAwM0Y2RDQzM0UxQUUwRTdBMzc4QTQ0NzczMjgzRERFMjZEQQotOjEwMTYyMDAwRTBGNDFCMDFERkQwRjEzRDc3RTFGOEYxMUQzQTk3MDJCQwotOjEwMTYzMDAwODMwQzNCNjBGNjMxRTgzQTZDMDFFODQ5RTQ1MzA2RjQ2OAotOjEwMTY0MDAwMEYwQkI0Q0ZCMjE1MjI5RkE1NTYzOTE1QzRFQjAyQjNDOAotOjEwMTY1MDAwRkIxRURDRDc3Mjk0OERGOTQ4Q0YzQTVGM0RCQzk3NkM4NgotOjEwMTY2MDAwNzMxMUZFN0VCNDlFNjg2NzExNkM2ODkwOURGNTQwMkNFNgotOjEwMTY3MDAwQjdFMzU3OTVBMUJDN0VGQTVCMjNDQTUzODdFNEJGQkQ4RAotOjEwMTY4MDAwQjlEMUU1MDFGNEYxQzc1MDdDM0YxMjBFREY1QTM5QTdGQQotOjEwMTY5MDAwQzVCNzVGMkUwNENCMzk4MEQ3NUE4RTBGNkVFN0M3Nzc1OAotOjEwMTZBMDAwMkM1MEI5N0MwODk2NkIzREUxMjM0NDNFMDgzQ0ZDQzFCQwotOjEwMTZCMDAwRUNEQTg0RUJDQ0M2NDU0MEU5MURDREZBNjE3QjRGRkFFQwotOjEwMTZDMDAwRjhDNTU4RjM0RkIzNjcyRkFDOEY1RjhDNEQwOEQ1Qzc2MwotOjEwMTZEMDAwQkE4OEFFRDcxNTgwNDc3NThCRUE1MDYxMEJGNThCRUM1NQotOjEwMTZFMDAwMkVDNEZGRkE2NkM1ODk3NkUxRUUxNjk1RTg2MUZERjIzMwotOjEwMTZGMDAwMjhEMjlCNzJCRDVGNkU4RjE5QzRBRTg0NTJGMDNGNkJDRgotOjEwMTcwMDAwOEYyNTdENUExQjJCRTY1RjA2QkZDMEZDQTc2REJDQkFCOAotOjEwMTcxMDAwRERFNjc5M0Q1MDBFQUQ2RkY5MjYxMkUxREMzRjU5NzFERgotOjEwMTcyMDAwMUQ0MUJCNEFBQjhGODE4NTE0NzhERjg0QkYyOTA4RDc2MAotOjEwMTczMDAwQzEwRDJBMzJENkY1OUVBRDI2OTVGMEY2MkU4RTM3OEM0OQotOjEwMTc0MDAwNzVCRTMzMEFENkY1QTdBNkQxQkE0MDdCRUJFQzhFQUZCNwotOjEwMTc1MDAwNkZERDA1RUJBRjhERTZGQUI5MzY5QUVCRTdEM0JCQ0U3QQotOjEwMTc2MDAwRjc0MTdBQkI3NkUxNzQ5MjdCQzNGNDlFOEYwM0U1REM4QwotOjEwMTc3MDAwMUJGRDBFNzMzOUNDNEE2RDQ3RkJFM0Q0MkVFNUZCNjhBNQotOjEwMTc4MDAwMDBBMTM1QTI5RjFFRUQwQTM1Q0FBOTA2REIxNTQ0MUMyRgotOjEwMTc5MDAwRjUzOTAwMUY4NDVGNUIxNEMxQUYzRTA3RjgyRTkzRDY2NgotOjEwMTdBMDAwNzkwMkQ3RDk2RTMxQjIxNDY4M0YwQkZDODhGREU0QkFEOAotOjEwMTdCMDAwN0ZDNDdBQ0Y4NDVGNkY5QUVENjhCNEEwMEJENUJGQkVBQgotOjEwMTdDMDAwNkVCQzIwMUU2MDdDRDVBMkE3N0Q5QzY2NTE0RUM0Njc2RQotOjEwMTdEMDAwQjNEMUM1MTBGRkRFODNDMjNFMTA3OEFCMTEzNDc3QkFBNwotOjEwMTdFMDAwNjVDODAxMEZFQzZGRkQ4MTM0MjdCRTdGN0FDN0Q5NDhFOQotOjEwMTdGMDAwOUQxOUVENDc4RjZBODc3REE5RTk1RDU2RDQ4N0JCNUI0QwotOjEwMTgwMDAwQ0U1RURFMzk4MEU0OUJDMTBFRUIzQkJCRUZCMEREMzMzNwotOjEwMTgxMDAwRTA0N0VEQ0Y2QUJGODhGREQ1RUFDRDBEODE3NjIyQUFEQgotOjEwMTgyMDAwNTk1Mjk0MUEzQTUyNUFEQUZFQTkwQzIyRkU2MzI4MEYzMgotOjEwMTgzMDAwQkQxOUNDNTcwRkZCNUUzRTUwRDBEMzU0RTY0MEJFRDcwNwotOjEwMTg0MDAwRTI3QkJCQ0Q5RDYxMEZFMERCQ0QzNkI3MDNENzg1RjNERgotOjEwMTg1MDAwQTRFNkQyM0VCM0IwM0VFOENERTk3OTA2MURFRTZGMENBQQotOjEwMTg2MDAwNDNCRDI5RUQzREI5NEZCNEM3MjM3M0ZERkI5M0Y2NUUyRAotOjEwMTg3MDAwRjdGRTczQ0UwRkRBQzc2OERGODNFQzc0MEU3NDJDQzVFNQotOjEwMTg4MDAwNzM1QTJEMjg4NTA3MzIwM0Y3REY0QTc4QTkxNkZCQUM3NwotOjEwMTg5MDAwOEUzMEI3QUFCMDJGQjZDRDcwQjI1M0NBODNBQ0QwN0QwQwotOjEwMThBMDAwMDA5RTg2RjM3RDM4MEY3ODEwQ0Y3RjM3M0JFQjExNEVDQgotOjEwMThCMDAwRkEwRTFCREFBRkIwQUY5MUI4MEY1NjUwOTY4QzcwRjg5NQotOjEwMThDMDAwQzBFQzlBOENGMkZFOTkyNThDRThGQUY0QjNDQ0Y3MTRBQwotOjEwMThEMDAwNkM3QTRCQkI4RUU4NjYwM0JCODJFOEZGMEFERDk5NUIzRQotOjEwMThFMDAwREQ2NkUyRUJCMUY4N0U3RTQ3QTMwRUU1NkY4RUNGQTFGOQotOjEwMThGMDAwNDNCOTdBNzk0N0IzNEU0N0Y0RTAxOTJGRTA3NDU2MEY5NQotOjEwMTkwMDAwRUJFQkRGNTRBN0ZFNDhCQTk4MTQ5RTJFNDJGMEY2QUJEQwotOjEwMTkxMDAwNDBCQzQ5Qjg4RDEyRjQzMDBBRTE4NjMyQjk0QjdGQjIyRgotOjEwMTkyMDAwMzNDMjBGMzdDMDBCNEJCNTg3OEVDNzU4NjcwNkMyQTlBNQotOjEwMTkzMDAwRURDNTYzN0QzQTYxQkM5QTk3OEZERDhBNzBBOUY5QUJEQQotOjEwMTk0MDAwODk4ODYxQ0M1RjJGOEY0MUJBRkZCMjMwQkM1RDczNzI2MgotOjEwMTk1MDAwNzE5RDVCMEZDNDc4QUIzRDhCRTQ3QjE1RUIzMEEyQkQ3MgotOjEwMTk2MDAwMDA3MkREQUQwRjkwRUJEMjhFREI2N0U4MjhDNkYxRjc5MQotOjEwMTk3MDAwMEQ1MUQ5MTI4MEYzNTlFN0IwMjQxNjQ2NUZDODcyM0Y2MwotOjEwMTk4MDAwREE2RDM5MDA3RkY0NTVFMUY5RTRDNUZDMTg2RTQ3REFFOQotOjEwMTk5MDAwODNGQzVBQjJEQ0I3Nzg5NjdCOENBMUU3RjFGNjBEOEUwQQotOjEwMTlBMDAwMjQ3RjRFQjFDNjFFN0FDOENFRUQ4REE3RUQ1Q0NGODFFNwotOjEwMTlCMDAwNjA3NkUxM0E0RkZEQzVFMkYzNDJEM0E5RENGN0FEMEMwNgotOjEwMTlDMDAwRTA3NDZBREJCQjc5NUVBMEEzNTNBQ0UzRjY5NzkwREZDQgotOjEwMTlEMDAwQkUzNkQzQjlBRTc4RjBGQjc5NEIyQzdFRkVCQzhBRkJDOQotOjEwMTlFMDAwNTJEODU1MkZCQzY5NzU0MEZGRTIyREJCRTNCRDAxRjAxNQotOjEwMTlGMDAwQkI4QUU5QkZFRUE2RUI0QzlDOTdFRjhGRTkzQkZCMjAzRgotOjEwMUEwMDAwM0VEODRCMjcxMjFENTAxNkJGRjg2QTNDQTcwMzM4Mzc0MwotOjEwMUExMDAwMEQ0NUZGMTRFNzhGM0Y2MzUzODBERDVEQkNCMEM2M0RDRAotOjEwMUEyMDAwMjYyRkMwMUY3MzJFOTJGOTAyRUJGQTBFMjMxRTg5QUJFQwotOjEwMUEzMDAwQ0Y5OUE5RkQ3NkJCMjU5RUU0NEQyRkQ2MEJFNTREOEZBMgotOjEwMUE0MDAwRjBCQTQ4Nzg2QURCMjUzQ0Y3MEQzRTkxODFGNkM1OTdFMAotOjEwMUE1MDAwM0REOEM1MDdFQ0MxN0VBRjM3MTY3QkRDNjM3MkZDRjU2MQotOjEwMUE2MDAwQkY3REE3REVFNjBFRjM1RThCMThGRkFDNzM3ODEyREE0QgotOjEwMUE3MDAwN0RDNUM2RDZDQkMyRjlFMUU0Mzk1MzBCQTczN0NFNTdBMwotOjEwMUE4MDAwNDZFM0I4N0YzOTY3MUExRjZFNUREQkVEQkE5RkU2M0YwQwotOjEwMUE5MDAwRDgwN0FCMEFCMDBCNEJGNDlFMzdFRERDNUZCMDZBMzI2RgotOjEwMUFBMDAwRDQ2QjJFM0YzQjhFQ0VEOTkyNUU4NERDQkI4QTc5REIzMQotOjEwMUFCMDAwOTA3RkI1RjQyMUYxRkRCRUM0NUIyQTRCNDVCQzNENjk2NgotOjEwMUFDMDAwNzc3MEJBMTFGQzIwRjk0MzBCNDc2RDM5QzFDODNDRTE2RQotOjEwMUFEMDAwQ0UwM0NGNzVDMzM1OTI3OTQxMUVERUJFQzE0MDdBRkU3QQotOjEwMUFFMDAwQ0RGMzFGNEVDRDAzN0EzRkI2RDY2MDVCMEE1M0NFNUE3NAotOjEwMUFGMDAwQjczQkVENTFGNEE3MEQzNkQ5MTRBODFGNzNCNDVFODYxOQotOjEwMUIwMDAwN0M1RkI5NEU3NTIzM0QxQzVCN0I3QkUyNzQyOEJGMDA3NAotOjEwMUIxMDAwRkVBRDgyNzU1NDZFMzA1MEZCQUMwRDc3NTBGQjA5QzFBMQotOjEwMUIyMDAwRDc5NUVCMTJGQUEzQkM3Q0IzRkQ4MTQ0QzRFM0FDRUZDMAotOjEwMUIzMDAwRUVCRjFFRjFCMkM1NjhFQjNGMThDQUFBMjZDNTNEMjYwNgotOjEwMUI0MDAwMDBERTczMzY0NjA2RDVCN0U4RDgyQ0RDODdDNDJCNTNBNQotOjEwMUI1MDAwM0NERENGMURCMDFFNjNEQzRGQzQ2MzZCODgxRkQ1MThGRQotOjEwMUI2MDAwQzdFRENDOTIyOUIwRUY5QTIxNjdDOUJFREZCRDI3OEFBNQotOjEwMUI3MDAwRjRDOTJCNjY5NUVDQzhENkMxRkZGM0I3MkJBMTVFRjQ3MAotOjEwMUI4MDAwOURERTQ5MzY5RUMwRjM1ODgxNjc4NkNFNDBBMDhGOEE3RAotOjEwMUI5MDAwMDg1RTJGN0E1MTRGNzY2ODkxNDUyNTc4Qjc4MjVDMUQ5MwotOjEwMUJBMDAwNDM0QURFNjUxRTBCRkQ3RTIxREY1MzQ3QUQxRTBFRkQ1MQotOjEwMUJCMDAwQzZDNjE4MThFQUExNUZCNENFMjk2NkEwMjc3Rjc5NEU2MQotOjEwMUJDMDAwRkY2OTY3QzA3RTQ2MzM5NzFFRURFMjQyNjYwODZBNUY5MgotOjEwMUJEMDAwMTE2NTdEMEFFRDVBMTg0QzhGRkFCMDI4MjJGOEY5RDgxMQotOjEwMUJFMDAwQ0JBRTNEODFGNkM0NTg1QjcwQkJBNEJGOUMzOEEwQkY5MAotOjEwMUJGMDAwRkU3RUI5QjE3QkNGRTc4RjRDODA3RDU2RUM1M0M5OUVGQQotOjEwMUMwMDAwQkU5MDVDREU4RkZCQ0E0MTdDQkY1MURBMDRFRkJEMjk3OAotOjEwMUMxMDAwQTBGM0U2Rjk2M0NCNTI5MEJFMEExNDg2N0VBRTYzRTc2QQotOjEwMUMyMDAwQzNGM0U1NUM0MTlGOEMwMTlFRkJGOUYxM0NEMTM5QkJDQwotOjEwMUMzMDAwQkI4RTZDN0Y1REMxQkNFRTNBQUVGRkUyRTVEOTBGQ0I0NwotOjEwMUM0MDAwQUI0RTNCRjc2RjY4RjU4Nzk2N0ZGRTUzRkFBMzc4RjBBQgotOjEwMUM1MDAwQUIxOTVFMEI5NUZGODVFNUM5MkQ1Q0ZFNkFFNTg1NTZERgotOjEwMUM2MDAwNUZDODc1NjlENzVCN0Q0RTBERDIxM0NGMDk3OUUyRDc3NgotOjEwMUM3MDAwMTc0NjdBRkUzMzlFOEY2QkUyODY4NDlFOEZDMTlFMjEyQgotOjEwMUM4MDAwNzg3OTg3RUFFOTVDMEU3NkQ3RUREODZGODBEOTExNTc1RAotOjEwMUM5MDAwMDg0QjVBNjZDQjhBNDZCOUQ2NjRGMURDMTkxN0UwOTcyRgotOjEwMUNBMDAwRUFERkQ0QTg0M0Y5RDFFREFGMzEwNEZCNkRFNEY5RjVENwotOjEwMUNCMDAwOUUzOEJFRkZGMjM4NUU4N0YzMkI5REZCMzc0NDc5OTI0NgotOjEwMUNDMDAwRjUzODZGMkZBMzMzMzA3RTI1Q0JGQjg1RkM5MDc2QUZBNAotOjEwMUNEMDAwQjQ3N0E1OUQyQkVENTk3RDAzQjc2N0IzNjNERDQxN0VENgotOjEwMUNFMDAwMzNENkFGNUY5MDNGMThFRDc0RTQ3M0VGQUUyOERBRTdCOAotOjEwMUNGMDAwNjc4QTdCMTBGMjY5MTU3MzNEMTQxN0EwMDdFQjBEN0MwMgotOjEwMUQwMDAwRkREQUY1QkMxNjI3RUMxM0U2MjYzQjQxQjZDRjFDMURDOQotOjEwMUQxMDAwNUU5RTZGOEREMzUzRkZDMkM3NkZDQTQwM0JFRUIzQjYxMgotOjEwMUQyMDAwOUIzMzUwQ0U3RUE2RjFGRkY2QzQwRjBGMEI3RTdENTA4NQotOjEwMUQzMDAwRTg5MzU4RTEyNzc4MDhGOTA4RUFDMEVEQUUyREYwRkVFNwotOjEwMUQ0MDAwOEFDNTZFRTJBQkRGMkVCRTkxQ0E0NzE3MkZBNEU3OEY3QwotOjEwMUQ1MDAwQzU2NUQyRkNCNkMyNzdEQ0Q5MDBBNzIzMkI1NUQyMTdCNAotOjEwMUQ2MDAwMzM4REVFM0VCMUYwREU5MTA4MURGOTFCMEVENzk5QzdGOQotOjEwMUQ3MDAwNkYzMzYzM0JBM0YzRTVDQ0M3Mjc2Q0YyMDZGODAxMUY3MgotOjEwMUQ4MDAwQzM3RDBDRTk3OTlGQUYwOUJDNUUyQTlENTZCMzRFMkJFQgotOjEwMUQ5MDAwRUFBRDZFN0EzRDEwQTJCN0RCMTEyRkE3NTk2NzIyRjY4NAotOjEwMURBMDAwQUI1NTNBRkEzNDI5QTFGMzNGQzg1Q0FGNjFCRjY2MjM1MwotOjEwMURCMDAwRUI4RjdDRDMxQ0M1RjU5MkI2REY5QjAyN0ZBQkQwOUUyOAotOjEwMURDMDAwODVGMjMzRDQ1RjYxRTRDQzNCODI1RTdCNUI1REVGQzQyNAotOjEwMUREMDAwOTFCQzMzOTNERDRFRUI1NjI5NEVGNDNFQ0UwN0U3QjQ2QgotOjEwMURFMDAwMEZGMTM5QzY4OUQwNUY5NzZEQjU3NUM3NTVGODc5QzdCQQotOjEwMURGMDAwRkQ3MTVDMTg3RjVDNEZGRTFGRUQzQUVFODlFNzcwRDVGMAotOjEwMUUwMDAwRkE4NTY0MjlGRDQyQzdDNDdFMTZDNUQ5ODJGQzQ0RTgyMAotOjEwMUUxMDAwMEYwRkU3MEZCQTNBREU0OEZCREIxMEQ1RTlDNUI4QThDQgotOjEwMUUyMDAwRjc2NjdFM0U0RjFBRTU1NUQwREY5NTVBREM1ODg4RkU5RQotOjEwMUUzMDAwQjA3RkM2NzEzRkE2N0RCQzI3MTlDRkYxQkQ5MjhENEVGNAotOjEwMUU0MDAwRjRFMzVDMkMzRjBFNjg3NkYxMzg4MTQ3NDdFQjU4RDNCQQotOjEwMUU1MDAwRTE4REVDMDNFQjRBRUNGMDE0MUFBMTM0QzQyNkQyRjg1RAotOjEwMUU2MDAwNDlBQzZFMDlFMjBERkExMTMwRjJEQkEzN0M4QTNDNzRCNgotOjEwMUU3MDAwNDM5NzNDMjE0NzYxQTU5MUM4NzdEQkFEMUU1MzNDQkMxRAotOjEwMUU4MDAwMzc3NDQ2NUQzREZBRUQ1M0FCNzgzQ0UyODRFMkU5NkQ5MAotOjEwMUU5MDAwQ0YwRThEMUJDQjMyMzk1RUYwQUY4OEJCRTY2RjM0RDBFRQotOjEwMUVBMDAwQkFGMjM3M0U0NkYxRDFGQzhENTdFQjk1MDAzOTk0MUZCRAotOjEwMUVCMDAwNkZBMEZFMjc1RTlERDM5QkZDMTgxRjg1OEZCRjBFODhFOQotOjEwMUVDMDAwRTdGNDYyNDYxRkUxMTA4QTg3ODZBNUJGN0VGMTNGMzFBNQotOjEwMUVEMDAwQUVEQzA5RjY1MEIwM0NFRjE3M0YyNDIwNkZBMUZBMEM5RQotOjEwMUVFMDAwQzk3MzdEM0NENzIzN0ZDMDdDMDU1OEQzMUY2NkM4N0M0RgotOjEwMUVGMDAwODUwREU0OEZERDZBNkNCRTA2RTM1MURFMUExRDQzQkMxRQotOjEwMUYwMDAwQjdFRkY5MkJDNTZCNjdDRDcwNTBCQ0I2RkJGRDdEQ0YyRAotOjEwMUYxMDAwMkNDN0Y2M0ZDQzYyODMxMUZFMjlCRTg3MTVGNENGN0MxNwotOjEwMUYyMDAwMUJDOUUzQzlERjZFMzJCMTI1QjBBNUQ5NkYzNzUzM0M2OQotOjEwMUYzMDAwNzg0RDk1OEVBMTdDRDFFRTFCNjYzMkU4Nzg1Q0RCQTBGMwotOjEwMUY0MDAwMkJFMEY4NDczOTI4RjEwRTA0NjQ0NDdDNDhCQzIxRkM5RQotOjEwMUY1MDAwQjY5ODMxNkVGQzAyQUQ1RkFFQ0I4MDdFRjAwNERDQzc3QwotOjEwMUY2MDAwOTY2QjkwNEU3QTU1RDkxNUY0MTdDODc1NUQ0ODlGNENGRAotOjEwMUY3MDAwOEFGRjY5RkFFNDY3RDRDM0I3QzU1RjlDMUU5RTgxNzQ2QgotOjEwMUY4MDAwQUVENUMzNUFGRERCNjQ3MTU1NjJCRjBCRTlFMTEzNDI2NAotOjEwMUY5MDAwRkU0RDg5RDdDNDQzMzA3RTE2MDY2RkM3ODQxQzBDRjBGMwotOjEwMUZBMDAwOEZERjE5RkYyM0ZDRTMxRkExMUMwOUUzMUY3RkM2QzhCNQotOjEwMUZCMDAwRTU2RkEzOURERDM2MjkwQ0JGQkMyN0U2RDdBREVFMzIxOQotOjEwMUZDMDAwQTJGRThDNkY1MUMyQ0FCMzZDQUI1MUM2MTM1N0UwRkE3NAotOjEwMUZEMDAwNjRGQzQ0MkI4RkMzQzBCNzExRkI1RkRFRDRCQTBCN0IwQwotOjEwMUZFMDAwRTVDNjVFMTY4REU2REIxNURGQzNCOTM3Q0MzQzZCMDQ2NgotOjEwMUZGMDAwOUYzQjE2MzA4QUEzM0FFQTE4QzkyQkE4RkJCODkzQjBDNgotOjEwMjAwMDAwOTVGMjIzMDAxRjRGRTBCODE3OEE2MzlEQjYxNTkyMUQwNQotOjEwMjAxMDAwMjRFMzU2ODZEOEUwRjNGODlFNzhEOUNGRjU0N0M0NkYwRAotOjEwMjAyMDAwN0EwRjdBRTI0RjYyNURCMEZGNjdCMDVGRkMwMjE2MTQ3MAotOjEwMjAzMDAwOUY5MTcxOTlGODNBQUY2MkNDNDc3NUM0QzhERkRBM0IxQgotOjEwMjA0MDAwQ0VCMzA0RjMzRkJBODYzM0U3NTM1MDhGMjlCNTE1QTJCOAotOjEwMjA1MDAwM0NCNUNGNzJCNjYxRkM2NkY5MjlFRTlGNUYzRThGRjkwMQotOjEwMjA2MDAwOTYyQTAxNzkwNTlFMkNDQTAzNDJCQzA1RkEwNzc2MEExNgotOjEwMjA3MDAwRjlCNjUzQUMxQkY0RTQ1RkUzRjlCQTVBRTIwM0Y0QTRGMwotOjEwMjA4MDAwQzQ4NzZFNzVBQjRBNzhFRDBBQUZBNzAyRjBEQUZFNDM1QgotOjEwMjA5MDAwNzhGRDE5RjlGMjlEOEJFNENCMEYyRjg1NkVGRTcxOTFCRgotOjEwMjBBMDAwNzRGMzRCOEM2RjBDMDkzQkRGNjc4ODU3RUQ3QzQwNjdGRQotOjEwMjBCMDAwNDc4M0Y4QkUwNzNBREI3ODg5RjFEMkY5RTY5RkE4QTdGMwotOjEwMjBDMDAwNDJFMUZBNUQ3QzQyMjg1QzU3MTZFQkZBOTFCQzY2NTFGRQotOjEwMjBEMDAwQ0U3MDdBRDU5NjYwRkU0RkU3OTFEODEyODY1QzdBMUU1NAotOjEwMjBFMDAwQzlGQTdCM0I4RDg4NjcxOTA3OTFFQkQ1RTY4RkM4RjY1NwotOjEwMjBGMDAwOUExNjI1MEZDRjlGODVCQkNGRDMzOUUwNzREQkJGRTg5RAotOjEwMjEwMDAwMUMxMDlBMDdDMkU3OUQwRkU0OERGQzM5NTYxREQwRENFOAotOjEwMjExMDAwMEFGQzc3QTZDOTQ4Mjc3NTk1Mzk3RTM3MEFGREY3N0JGMwotOjEwMjEyMDAwMERDQ0U3QTBGRTExRDhGRjBBQzZGQjVGRDFCNEJDMDNGQgotOjEwMjEzMDAwRkQ1NzU3MzBCRDU3OUM0Nzk1RUZCOTFEMTU4MzdDN0NFMwotOjEwMjE0MDAwQzU1RTk1RjJCRkQ4NjZGRUJDOEU0NTJDNDFGRjc0NEMyRgotOjEwMjE1MDAwODE4RTM5MDJFMDE5RUI4QTYyOEUwMDc4QzY4REI3MDc0RQotOjEwMjE2MDAwRDVFNTM5NzlBRTk4MzdDMUREMkJFOEZEQTQxQkIzODJFNAotOjEwMjE3MDAwRkFBNzc4QUUwODdBOUUzQTJCMzdBODlFNUUzNzIyQTgzNwotOjEwMjE4MDAwN0ZFRjg1QTM4M0VBOTlERTZCODNGQTY3Mzc0QzBFQUE0QgotOjEwMjE5MDAwRTczNERFMUNENEZGMThBQjdCN0MxNEVDQjMzRkZBNUI1NgotOjEwMjFBMDAwMDAzRkNDRUJFQUI4MENENjNCNDNBQ0I3RUY5QUYyQTBCOQotOjEwMjFCMDAwRjc4MUZENUEzMTFFMzg1MzkwQzkxN0NGOERERkFCMDAyMAotOjEwMjFDMDAwMUM2NzA4RkZDRUU1QkUzOTQxRTNDRjU1QUI4ODdFNjc3QgotOjEwMjFEMDAwMzYxQThFMDRGQTY5RjRBQzZCNEYyQUMwQjlDNkE3MzgxOAotOjEwMjFFMDAwNUJBMTVFQjkyNkY4RjlFQzFEMUJFOEJERDlCRUUwRjY4RgotOjEwMjFGMDAwQjk5QjgzRUI4M0RFOUNEMjlGRTcwMUI5MjlCRjcyNDY2RQotOjEwMjIwMDAwNDJCMERGODc4NUQwODk5OUU0RjQ5OUI1RENGRkE1N0FERgotOjEwMjIxMDAwRkI2QUU4MjQxODVGRUMyN0QyOEQ0M0QwOEQyOTM5OThDQQotOjEwMjIyMDAwNkUyMjFEQzE3NDUzRjlGQUQ2QTEwODA3MkRGQ0EzRkIzOQotOjEwMjIzMDAwNjlFOEM5MEJGRjdFMDBGRTE2NjczMDdENjlFMTRFRkI0MQotOjEwMjI0MDAwODM3NTU2RUM1MEQ4RUY5NTUwQjhDRjZBNzk3ODc5MkFEMwotOjEwMjI1MDAwMEI4NTNCNjMzRTIzRDcxRkMxRUQ4RjY4RTBGRDgxRDkxRAotOjEwMjI2MDAwRjMxOENBODlCMzNCMTZBODE4ODc2M0UzNzkzQ0ZGRUNERgotOjEwMjI3MDAwOEVBRjA3RUQ3Mzg0ODkyRkU1ODRDNDk3RDYyNTA0RjhDMwotOjEwMjI4MDAwN0Y2NDdDRTkzNEM2MTlBRjY0MTcxMTY3RENGRDRGODRBNQotOjEwMjI5MDAwMDdDODAwOEYwMUYzMTEwQjlDMTFERDcxQzU0ODdGM0MwRAotOjEwMjJBMDAwNDkyQjNGNjUwOUZBRTNCOTA0RDIyQkZFNzg2QzNEQkM5QgotOjEwMjJCMDAwM0QzNEU2MDMzN0FFNTNDNkU1NjRCRThFQ0MyQjBBOTM5RAotOjEwMjJDMDAwOUZGQzk3ODQwNENDMEZCNDQ3RTNGOTc1NEJGQjdDM0EzMQotOjEwMjJEMDAwNzdDOUJDMjIyNkYyMDJDM0Q4RkZBNDRGOUFGMUQ3MTRDMwotOjEwMjJFMDAwQjIwQjc2MjY3MEJERkUwQThFRDc2RDE3ODhCQzJGQTk1QgotOjEwMjJGMDAwRDc3QjFBNDdDNkRGN0EyQTk1NUQyQUM1MTNCQjk0Mjg3NwotOjEwMjMwMDAwRTc1MzYxRjRDQTQ3MDkzRjUxQkY4NUU2OEY3RjE0QThBMAotOjEwMjMxMDAwNDc2QUVFMzhCQjA3RjUwQkMwRkQ2MzZDQjc1ODQwNkZEQQotOjEwMjMyMDAwMkI3RUJERkRCQjY4MkJEMTZCRDdFQkFBQUYyRjM0OUNBNgotOjEwMjMzMDAwODk3MEM0RDgwMThFMkQyMkRGQUY0NUU0RkJDOUY1RDZFNAotOjEwMjM0MDAwNDVBNEJBRjQ3OUQ4MUU5Q0ZGMjdFMzhBREFGRDhEQzIzMgotOjEwMjM1MDAwRkU3MUZFM0FCQzE3NjQ5NzJDQ0ZFNTc2REI2OTAxODdFNgotOjEwMjM2MDAwMEQxNjZFMjcxODEzQjk5RDUwQUIzOTFGRDUzNjcwRkI2QgotOjEwMjM3MDAwMENBNEQ3QUM5NjgwNzE4Qzg5MTZFQURGREY1QzY4NENDMAotOjEwMjM4MDAwQzQ3MTg0REY2NTc5QTY0Mjc2QzU3MjQ1MjE3QkU0NzcwNgotOjEwMjM5MDAwQjZEMUY0RkNDRjA5ODU4NjQ0RThGRjZGMzFBRjExNjBGOAotOjEwMjNBMDAwODg2NTYzMTY1RjhGNDM5MzE3RkU5MkU4RkY1MkMyNjhGOQotOjEwMjNCMDAwMkE4RDg5MzZFMTdGQjY1RDgxRjQ5MTZBNzYxOUE5NUQyRgotOjEwMjNDMDAwMEQxRkE3OEE0RUU0RkIxQTI5RjI2NEI0NzE4MDcxNDI5MgotOjEwMjNEMDAwNkVBMkRGREZDNEVERDJFMkIxODk0MUZFRkVGNzhDRjFERgotOjEwMjNFMDAwQzJERkFGRDBFQjJFOTQ1M0JGMTQ3OEVGQzlGRkVGRUFGMgotOjEwMjNGMDAwNjc2QjQ3RjFBREY1RkZBRjhDRTRGRTdGMTkxRjA4RjE2NQotOjEwMjQwMDAwRkYzQkM3ODVGNUZGMjMxRUEyRUQ3RUZFRTk5M0Q4MkQ4NQotOjEwMjQxMDAwOUZEMjUwM0VFRDMwN0FFQUYxRkNENUI1MURFQzc4NjhEQwotOjEwMjQyMDAwRUVFN0VCQTRCOEMwQzA3REQ5NEUzQzY3MkRDRjY0QkJBRQotOjEwMjQzMDAwMkM0ODZGNEIxODQzM0I3RjQ3QTc2RTY5MjQzQzVGRTlFQwotOjEwMjQ0MDAwNjUzNjdDM0U3QzJEM0ZCRjU1QUU3MTM4NzE5QjUyMEU3OAotOjEwMjQ1MDAwNUM5REM4RkQ4NzA2MzgxRjVCNzJGMUJEQzk2RDE4MjdFQQotOjEwMjQ2MDAwNTgzOTk1RDk1MTBEMzVCMkM2MjIyQkRBNDU2QjU5RDg1QQotOjEwMjQ3MDAwRjNFMzY4NDE0RjEzMEE3NzUxRkU3NjQyMTdDRkI3MEY0NwotOjEwMjQ4MDAwRURBNzkzNzY3RTIxRTI3MzU4OTdFNzJDOEZDRjcxNzk3MQotOjEwMjQ5MDAwNDIyMjExQ0ZBOUVEM0E1RkI4NzM3REIyQURFODZBQTRDQwotOjEwMjRBMDAwQUY4MUJFRjBFNzg4OTFDMjRGRTYzMkJCMjdFMkY4MDM2NgotOjEwMjRCMDAwQjdGMTdDRDg0QTI5N0Y2N0U4OTgxRUYwM0U0NUUwNzU2MQotOjEwMjRDMDAwQ0E1QTlFRDdDMUNFN0ZGRkJEMkFFRDQ1NDZFMzMzOTQ1RAotOjEwMjREMDAwMkI5NTUzMkQzRUY0MTM1NUI2NjQ3QTY5NUQ2RUM1OTlGQwotOjEwMjRFMDAwODNGMkEyRTU2RDM3RDYyQkYzRjM2REU4OTc3MEZEOUQ2RgotOjEwMjRGMDAwMjk0N0ZCOTFBOUM5QjhGQ0QyQjNBMzUyOUU5MDFFOEY2NQotOjEwMjUwMDAwQTczOEQ0NjQ0MTZGMjNGMUIwOUM0MDcyN0U2NTM0QzAxQgotOjEwMjUxMDAwQkI3MkVEOTI1RDk4RDdGM0ZFMUYxOUM1OUIwRUE4NURBNwotOjEwMjUyMDAwNDM3MUIwNUYwMTcwMTZFNjYyQTk2N0E1RTRCNzQ4QTZEQgotOjEwMjUzMDAwNzFBNjhBNzFCQ0ZGODI3OTIzRkNGM0ZFQUFFNTc1REFFNQotOjEwMjU0MDAwQ0YwMTAzRjM0NjAwMUQ5RERFNzk4MzAzRURFRUU1MDkxRgotOjEwMjU1MDAwMTFFNENGOTM3MURBODNBQUU3M0U1MjQyRkFBRTFBNUNENQotOjEwMjU2MDAwREE0RDJERDEzNkY0ODM5Q0RFRjk2MTNBQzY0RDNFQjk4MQotOjEwMjU3MDAwRTdBQzA1RUREODdGRThCQjJDOTgyRjdDN0NEMUJCMTY0RgotOjEwMjU4MDAwMTdDMEYxOTM0NTJBRTU5REREMkFGNDg2ODRGQjdEODlGOQotOjEwMjU5MDAwMUNFRTFGMjdCQTE3MjFEQzZGNUJGQ0RERDBDMDNDMkE4NAotOjEwMjVBMDAwQjYzMDgxRTg3OUI2NEZBNTkwNUNCNzlDREQxQzhEMTZERQotOjEwMjVCMDAwNEE3N0JEQkEzOTJFQTgyRUY1NDBCNTg5RDU4NTNCQkZERgotOjEwMjVDMDAwQkMyNEU4Njk3NkQzMDY2M0FBMDNFN0Y3QUM0MkZBMzg3RAotOjEwMjVEMDAwQUVFNzc0NzQ3QzlCQzVFN0NERjRBRkE3QkM2OUIwMTFCRQotOjEwMjVFMDAwRUQ4MzdGQjQ5ODU4MkJFQTMzN0Q4NzgxRTc0OUJCOEExNgotOjEwMjVGMDAwMTVBMDBCOEZDMEJGNzY5RDdCNUU4RUE2RjE2NjNFQzY5MgotOjEwMjYwMDAwRTU0NzE5Q0NCNTEwRTBFQjY5OTk0RDcyNDFCQjhGOTk0NAotOjEwMjYxMDAwOUYzOEM2MjUwMTVDNjdBRTUwMThGQUUzQjBGRjIyQzBCMAotOjEwMjYyMDAwOUY2N0UxRkQ1RkExRkRBNURENjc5OTM3NTgwRTQ4Rjk2OQotOjEwMjYzMDAwNTUyOUYwM0NCRDIxRjg3OTY1Q0I2RjY5OUMxOUNDNDNENQotOjEwMjY0MDAwNzkyMDYwMjc2OTlFNUY3MzBDRjUwQUQ4NDc0MUVENjdEMgotOjEwMjY1MDAwRjY2NjlCNTE4RjZGNDkxNEYxRURBMTZDRDhGN0YwRkUyRgotOjEwMjY2MDAwQUU4OEVDMTg0RjE4N0U5MkU1QzlDNTM2MjJENkNGMTczMgotOjEwMjY3MDAwNDc1MDc5N0MzMUEzNzI1MTIyQTdFM0FBOTZCN0VGNDQ2MQotOjEwMjY4MDAwN0JBOTY2QzcxNjIzOEU3M0M5RjE4MTk2MTNENjlCOTlEMQotOjEwMjY5MDAwNUZFRjk2RTgzREFGMjExRUQ5MkMyNTI4NEU1MEIzRTFCRgotOjEwMjZBMDAwQUM5MUVDMzIwMTlGNTJEMTVFOEFGMDAwM0NEQ0MyMUMzRQotOjEwMjZCMDAwQUJGMTNDNTA1QTY1RjBDN0U5RTBGRjVCNzJCRkMzNjAwNQotOjEwMjZDMDAwQkY4MERBRDE5MTM5MTdCNTVGQjk0RkI5NkZGOUJDNUFFQwotOjEwMjZEMDAwMDU3QTBDRjNCRUU0ODM0NTQyMUZDREQ4Mzg2OTc5MkZDMwotOjEwMjZFMDAwMDA1MUZEQ0U2MzE5OURGQ0JDNDlGNjc4OTFDMDZCNTEzOQotOjEwMjZGMDAwQzRGRDY0OEYxNzg1RDhFM0VDM0REQ0I3QTRDNzRBRTY3OAotOjEwMjcwMDAwMjQzREEyQTUzQjQ5MDdDQzZDQTBGNzIzODRCRERFNEQzOAotOjEwMjcxMDAwNkYyRDBGMTI1QzI0M0RDQzVDNUQ2OEU0RTY5QkM3Qzg1RQotOjEwMjcyMDAwRUQ0QTZGQjJGMEQ3MjZBM0JGMTZFODMwQzgzRTA2QkEwRQotOjEwMjczMDAwMEJBQTZCRURGMTJGMEQ5RDE5MjgxRkI0NzZCOENDRTdDRAotOjEwMjc0MDAwRDRDMkU3NjAyMkNGNUY5QUUxNzA4REIzMERDMDczODA3MQotOjEwMjc1MDAwN0IzOUY5ODVGMTQ2Q0ExMEU0REJDNjNENzcyM0RGNkU4RAotOjEwMjc2MDAwRTQ3Q0YzMEY0MTBGQjM5MjNDMTE0OUYwRENCM0Y0OUFDRgotOjEwMjc3MDAwMUFDNDdGRTcxMjUzMDZGMkIzNjc2OThBMUEwRkZEM0Q0OAotOjEwMjc4MDAwQUIxNDkyQzNBMzk3QTYxODExQ0VEMzk3MEQxRTg3N0NDNgotOjEwMjc5MDAwOURDQjVDMzRGRUI0MzgxNkQ2NkUxODlDQzRFNTQ3NzlFMAotOjEwMjdBMDAwOUQ4MTE5NjMwODI5NDZGNDBCOUY2QTUwQzgyRjhDOUFBMwotOjEwMjdCMDAwNjQyMkUwNkI5NkMwNTdGNThBQjdBREE0QUYxQ0YwNkZFQQotOjEwMjdDMDAwMjg1RTFGRTAzRkIzRUEyQTA5MUY3MEVFMDhDQkM3NTIwQwotOjEwMjdEMDAwQUY1NEIxNjY2MzBBOEMzQjY3NjUxQkQxMzE5QzQ3ODI1RAotOjEwMjdFMDAwRkFEN0IyOTU4NEFGRUE2NjREN0JEREQ1ODQzRkQ4Qjk4MAotOjEwMjdGMDAwMTFDRjg5QjUzQjgyOUZGNzRGMTI3NjgyOTMzOTkxQkVGNAotOjEwMjgwMDAwM0Q3NzVBMjIzMEFGNzFCNDgwNEZEOTRBQzU4NjcyNkI3QQotOjEwMjgxMDAwRkFCMkI2ODQxQkEwM0U3REFGRUE4NEVENzRDMzg3ODUwRgotOjEwMjgyMDAwRkEyMzI4MUZFRENDREUxQ0YyNTc5QzcxMzg5MkIwOUYyMgotOjEwMjgzMDAwQzdDQUVENTI0NUVGMTk4NkVERDNFMjNDQzNEMENGRDhERAotOjEwMjg0MDAwRjU5MTg1NjE3RURGQTE3MzJBNzNFNDExOTUwRkEyRkNENwotOjEwMjg1MDAwMkExQjFCMzQyOUMwQkUyRjMzRDgxMjMxMUVFOTY1RjM2MQotOjEwMjg2MDAwOTNDNTNEQjg4ODQwRjhENDQ2QUMyNDdFQTg0NTdFODgwMAotOjEwMjg3MDAwRjBGM0MzMzQ4QzdCQTFEREYzQTI0Mjc5ODQ2QzQ3MzA0MgotOjEwMjg4MDAwQkQ5RjcwMzQyNkMyOTE5MEI5RUYzMzkwOUMyRTZGOEExMQotOjEwMjg5MDAwQTVGMzcxRjlCMjIyMjNFQUQ1RjI2REIxNjQxRkMxRjkzMwotOjEwMjhBMDAwRjRCRENCODZGQUYxNzk2ODU5REU5RTY0MThCN0JDMzk1RAotOjEwMjhCMDAwRDNBOTA2RTMzMUY0REMxOUIwQ0UzOTBEODcyNEZFOEU5RQotOjEwMjhDMDAwRjQ4MEJGMjNFMUYwMDc3ODBCNkEyRjRGMTI3MjQ5RTBDMgotOjEwMjhEMDAwOEQyRDhBMjNCRDVBM0FFRkQ1OUMwODU4RDc5OUJBNDgwRQotOjEwMjhFMDAwQ0E5M0VDRTk3Q0M0NjY4Q0EwRkMwM0U5QkYxQURGQUI5OQotOjEwMjhGMDAwREJDRjQ0NzkzRTY3NTcwRTIxRkM2OUYxMzZGRURGRDMwQQotOjEwMjkwMDAwODdBMUJEQ0JGRTZFNjE2ODY3NERDQjY2Qjc0RDg2RjY3RAotOjEwMjkxMDAwREIxNENFNkZEM0VBQUYxOThGNzZDNERENDk1QzlFQkQ2MAotOjEwMjkyMDAwMDU3MkQwRDU5N0IxQjc0MTBFQkE0MDBFQkUwQkYyMTE2OQotOjEwMjkzMDAwRUJFRjJGNEVBNkZBODc4QjFENTQ3RUI0QjgxRjk1NDczOAotOjEwMjk0MDAwODRCRjVGRjIxRDEwMDJEMUVEOTIyNDJFMTc5NzI0Qzk4NwotOjEwMjk1MDAwRjhGQTgyNjQzNDY5QzZGRkZCREQyMTNBMUJERTY3NkMzRQotOjEwMjk2MDAwOUIzMDM2OURCMUVCNUNDMUZBRjdDNkE5QzFGQUI1RDM2RAotOjEwMjk3MDAwNjAxQjk3OENFN0RCMTUwQUQ5QTNFNUVFOTE0MUZERTFEOQotOjEwMjk4MDAwREM2NEM0N0IyQkFDNUY5RUJGOURGNDg2QzMzODE5RTgyMgotOjEwMjk5MDAwRjFBNkUyQjhBMEZFRDczN0E0MDZENTlGNDg3MkQwRkFCOAotOjEwMjlBMDAwMjY4RENGMEU2QUJGQjlCNDdGNTBCREVDOUM5MTMxQTQ4NwotOjEwMjlCMDAwNzc0NzAxRjFDRjAyOTE2NzA0MDc3NzhFMTcxQkVGRkI3MgotOjEwMjlDMDAwNzVEREIwQTRCQjYwQkQ1RkVGMzNEMDczMkQzRTI0NUVEOAotOjEwMjlEMDAwNjdBQzUxOTkwN0M2OUJCRTA2RTQxRjJDRjE0OEUzNzQwRgotOjEwMjlFMDAwRTJBRjJGMEU1OEU4NUNCMkJDMjk2RjdGMDFENDBGMzVERgotOjEwMjlGMDAwMTkyODBGRThEMEIyQjg1NTY4QUYxRDZBNEFCMDMyMjgxRQotOjEwMkEwMDAwM0RDQjU1NjFEN0Q4OEMyQzQwREUxNTJENUI0MkY5QTYwNQotOjEwMkExMDAwNjUzRTkzOTNFQzk3NzZFRjkzQjJFRUMwRjMyQTJFMTJCNQotOjEwMkEyMDAwRjlFNDNERDVEN0FBMTBGRTVDMDRERjY3MjJFOTVFRTEzOAotOjEwMkEzMDAwNzFCMDI3RjEyQUUxRjQ0RUJFQUVFMzBBNUI4NkY1MTNDRQotOjEwMkE0MDAwOTExRkY3QjkwQkQ2NzE2QTYyNjM4NTBFRkQxNUVBQkU1OAotOjEwMkE1MDAwMDQ5MjlGQ0ZBQjBDRTlCNjc0OUU4MUYyMEM2NkJGQUZCNwotOjEwMkE2MDAwNkVDMDNBNTM3MjUzMzlCRTU1Q0FBMzY2Q0Y5ODY4N0M3QwotOjEwMkE3MDAwRDYwNTE0MDJGRDE2M0M2RDdBRUEwMUFFRkY3ODdERkJBNwotOjEwMkE4MDAwNDBERjAzODIzRTkxOEU4RUM3MzI1NzJDMkQ1NkExRjUyMgotOjEwMkE5MDAwN0VGRTc2QzIwNjdDRUU4N0E3NkYxMEVFN0JCREMxRkQ4MQotOjEwMkFBMDAwNjYxMkUwRUZGMzBBREYyMDkyNkY4QjEyODhBRkI0NzBFQQotOjEwMkFCMDAwM0Y2MkU0RjJDQjhCN0NBMEY4RTVBNjlGQ0Y5NjkyN0U5NgotOjEwMkFDMDAwOTg2RTcwMjYzQTQ5NkVFNUE3QTBEQzNBQjJEMjQwNzZGRAotOjEwMkFEMDAwMzBEM0JCQUM5MzQ4OEYzRTRGNzQyQ0U3MzlBMjc3OEMzMAotOjEwMkFFMDAwQzNGNTFENjlDODY0OTg1RjUxQkU1MkE1RjMwQUQyMUY5MQotOjEwMkFGMDAwRUZFRkUzRTdENDg3NTUwRkQ4MjRDQ0RCQTA3ODU4NTIwQQotOjEwMkIwMDAwMjhERERDM0U2RjE4RTU1RDZBRUQ2RDU5N0UwOUJDRUE5MwotOjEwMkIxMDAwMDlCMDRCRTZFQ0U0Nzk4MTJDQkY1MzNGNzU2MEUwM0U5MQotOjEwMkIyMDAwOTZGMUY5M0MwNTQxRjk0QTU1NTlBRjFEMzRFQkM4MkVEMQotOjEwMkIzMDAwOENDMTczQzI4OUY3NTRBMkIzMTM1OThENDM5MzAxOUY3QgotOjEwMkI0MDAwMjc3NUJCODZERTA1RjUyRjI2N0E4RkVBQTEzRTIyREFBRAotOjEwMkI1MDAwRjMyRjg0RUI1Q0REQ0EwQzI1MEJGM0ZBMEZBRjFBMDlENwotOjEwMkI2MDAwRUY3REZFQUNDMTQ5NkMyRUVDRkMzOUNGQ0NFRUZENDNDMQotOjEwMkI3MDAwRjYxNUQ4MUJCREI4RERFMTRBQzFGQkNGNzMxRENEMUFEOAotOjEwMkI4MDAwN0I4MEMzQzc4MTQ5MjAwMDE3REI2QTA1NkQzNzc2NzhFMwotOjEwMkI5MDAwODhFNTAxM0M1NzRGRDczMTRGRTA3OUUwQjBDOEUzQjE0OQotOjEwMkJBMDAwMjRGMzczQThCNDFCQTYyNDczMzkzMzVEQzdFOTlCQkQxNgotOjEwMkJCMDAwQUM3MDdBMDNGQjJBNTAwRjQ4QjkzRDE3RjNBQTU1QkZGMgotOjEwMkJDMDAwMUU5MDcyQkI4QTM1NTJGRThBMjM5OURCMkZCMzE1MUZFNAotOjEwMkJEMDAwRDlERDM1OTg4OTAyRkQyQjZDM0M2ODU2QjVEOUU0RjNGNAotOjEwMkJFMDAwNjVEMjk4QjY0MEZCNjA3QTMyOTcyNzczOENDRjNFOEVDMQotOjEwMkJGMDAwRTQ1QkM5M0FGODNFMzVGRDNFMzdGODJBM0EzMjQzRjVGMAotOjEwMkMwMDAwNEY4NTZEQzMzMjNCOEQ2RjcwQTI5RkI3NTJGMDZCNzVDRAotOjEwMkMxMDAwQTNFMjZCMjUzQjg1RUI1MUU5NTc5RDI5RjRBODU2M0Y2QwotOjEwMkMyMDAwODVFODI1OEQzRTlBQTlEMUJCQUMzMTU4Q0ZDMjdBRTk0RgotOjEwMkMzMDAwREVCMjVDQUY3NjlERUU2ODBCQzE2MTBFQUMwQkY1NkYzQQotOjEwMkM0MDAwODVDN0I3QTc4NEQ2QUQzODAxQTMyMUVCQTk2NEVFMzFCRgotOjEwMkM1MDAwQjFCODBGNzhERUVBMDg1RDlGNzY1RjIxRUIxNUZCRDRGMwotOjEwMkM2MDAwQUVCQkMyRjk1NTJCRTZCQjU0MzUyOTA0MkZFRDNFMjRFQgotOjEwMkM3MDAwM0VCNDc2OUNDNDRCODU5N0MzQjdBMjQ1MjE3QzdFRDZEMwotOjEwMkM4MDAwNkQxRjMyRjI2RjRCQkE2MUNERjAyRkUwN0Q0OTQ3QjAzNgotOjEwMkM5MDAwQUYxMjk0NkY5NUFCNDExRTY3ODZEMkQzMUNENjZDNDU5QwotOjEwMkNBMDAwQkFBOTYxQURDQjUzOTBERjVBOUJBRjFGOEU3RTg2QjUxQwotOjEwMkNCMDAwNkZEM0Y5QTlENERFOUFBMzhCMDU1MDdBNzM1NzhFQkZEMAotOjEwMkNDMDAwQ0E0RkU3MTc4QTI3RkM1Q0YwQzNEREU5QTU5RjFFRTAyOQotOjEwMkNEMDAwMzU3M0EzRUE4QTFDMTRENDRGRTQzRjdBMDk4RUIzQkMzRgotOjEwMkNFMDAwNUUyM0ZBNjM2NzA5M0ZFNTg1RDY1OUFCRTdGNzVGMkVBOAotOjEwMkNGMDAwQjg1RTAxQ0Y5RjdCREQwRjI3Rjc2NDc3ODUzRjE3NzY5RQotOjEwMkQwMDAwREI1QjFBM0RGRkIxODFGQjVCQTU3Q0ZFNUFFRjIyRkYyNgotOjEwMkQxMDAwMkVCNDBCM0JBQ0NFQzZFMzdEMUFCOTlFOUU0RjcyQkQ1RQotOjEwMkQyMDAwNDJFODc5MzlDRkQxMzU1QjI5NUUzMDEzRUQ4MDgwRjZFQQotOjEwMkQzMDAwQ0Y1NjZGQTU3OEE1RjFEOTk5NTZCNENCOEZBRTk5QkU3MQotOjEwMkQ0MDAwMEFGMzUyOEYzNjREMjdCRDVGRjk3QkE5RjczREM2NDA4OAotOjEwMkQ1MDAwN0JBMjY4NEREOUZBN0I5MDhFMzc0NzUyNUNCMUEyREREOQotOjEwMkQ2MDAwMjNDRTQ1MjA2N0ExOUY2MzBEOTdBQjZDMzU5N0IzOTUzNAotOjEwMkQ3MDAwQTgxRjA3OTA3RUVDOEJGREVFQUNGMEY0NDU3RTA4Njg1MgotOjEwMkQ4MDAwMjdCRDc5RTc3NENGOUY3N0MyQjg3N0ZFMjlEQUU5MjVBNgotOjEwMkQ5MDAwNTBEODVBNzU2NENGREI1QTUxM0Y1NkNGRkZGMDIwREUzMgotOjEwMkRBMDAwRDMwMTdCRTBGRDVGNEI3QjAwQUE0NTA2NEY1QjMyRUExNwotOjEwMkRCMDAwMjE2MTA3NTRBQjFCMzI2QzY4MzcwOEJERjExRjgwN0Y1RgotOjEwMkRDMDAwNDQ3OEY4RTcxMkZDQ0IxMUZFMDFGMURCNEYxQjM4OUM3NQotOjEwMkREMDAwQTc2QkUwN0Y3ODI1QzdDQkYyQTY2QzJCOUUyRjNGNkRBQgotOjEwMkRFMDAwQzgyNkJCRUJEM0E2MUM4MkZGOEMwNzAwRkVEQzVGMUY0RQotOjEwMkRGMDAwNkM3NzM1MDBGQ0YxN0M4MUYwODdGNTk2QjczQjA0RkNERAotOjEwMkUwMDAwOUQxQ0ZFMEQxQ0VFNkMyNTJGNjc4NEMwRDk0QkY5NTcxNQotOjEwMkUxMDAwNzdGRUQxRTQ0NDNCRTI3ODY0MkJEOTU3QzdCN0E4QUMxRQotOjEwMkUyMDAwM0VDMDJFOTM3NkQxMzdBQ0YxNDlCNERGMjRGQzY3Rjc2RQotOjEwMkUzMDAwRTkxODg0RjJBN0Y0RTFEN0FDODg4N0Q5NUI3ODUwMzFFMAotOjEwMkU0MDAwMDRGRUNDOTU0NEYxQzdFRUY5QkJFREE4NkYxMTVGREQzMAotOjEwMkU1MDAwNzZENDQ1RTJBOTg2QjkxOUU5Qzc5NkQ3MEVFMDM5NDI3QQotOjEwMkU2MDAwNzE3MUJGNDU4REJDNkZCNjIzRjhCRTE5RTY5Mjk1REEzNQotOjEwMkU3MDAwRDFDNUUyOEM4OEMwRjVBNDY5RUZEMzc5MThDNkJEQkU3MAotOjEwMkU4MDAwQ0RGOUVBRDZGOUM0RTc1RDQxNzlCOTI1QUNENTgwRkUyNAotOjEwMkU5MDAwMzZENkFDRDAzREVERUEwNTg1RDY0Mjg2NzFCNTNBNUFCNAotOjEwMkVBMDAwODczMzQ1MDlDQUNCQUU1Njc1NjQ0RjU2MTk0NTdDNDRFNQotOjEwMkVCMDAwRTQ1NTI0ODk3RTQ5MjlEQzJGOTA5QzYyQTNGMjc0MjQ3NgotOjEwMkVDMDAwMjM3RDcwREE2MkY0RTE3RDJBMzg1RjI1RTNGQ0RFOUQyNAotOjEwMkVEMDAwMjZDMkRCNDE1QzEzQzA1RjM1MEEzRjMzQTg0MkE0Qjc2QQotOjEwMkVFMDAwNUIxOEE3RDM1QkNDN0IyOUFFMDcyNzk3NzVBODFGQTdENAotOjEwMkVGMDAwMkQzNDM5QzlDRThEOEZBMUY4RDJDRDQyREVERDYyNUU5MAotOjEwMkYwMDAwRUU0NjNEMzFDRDZDNzQ2MTA5RTM3QTMxRjlENzMwMUE2MAotOjEwMkYxMDAwQTY4N0Y5MERCRDhDNzRFRkIwMzRBMkYzNTkzQzEyREZEMwotOjEwMkYyMDAwOTY3Q0Y4OEUwODU4RUE5NTYwOEVBMzFGMTg3RURERjYxMQotOjEwMkYzMDAwN0Q1QzI4NUVGQ0Y4MDlGNjRCRDc0Njg1Rjc4QjBDMTdBRAotOjEwMkY0MDAwNzA1MDVDMkVGMjNGOUI2MEVDMjg1OEM3QTgxNDA3NkZBNgotOjEwMkY1MDAwNzdEOEI4M0Y3QTJERTBDOUUyQzdBRkI2OUQ3OTc5RkM0MgotOjEwMkY2MDAwQjIwQUYzQjFGOUY3NThCQzI0MUY1NDVENTBCRENBQzg2QQotOjEwMkY3MDAwOUY0Rjc5NjI0M0YxRUEzNEM2REU2MThFODE4OEI3MkFCOQotOjEwMkY4MDAwOTQyMTc4RUUyRjhCRjE2MTdDRUYzQUY0ODdEQkIxRDQ5QQotOjEwMkY5MDAwMTNCRDRDRDYzM0FGOEU5NzBENjYzQjBFQzdGREUzMjVCMAotOjEwMkZBMDAwMDI5RUJGMkE2MEFEMzEwMEY3RDZENzgzRkRGMzM3QjQ1OAotOjEwMkZCMDAwRUE1QUZCMDI3Q0FGRDNCN0I2MjE3REVBMjIxQzA2MUI3RQotOjEwMkZDMDAwQ0NFMzFFQUZFNEUyMzlBNTZBRTlDNUFEQjdFMjg5QTY1NAotOjEwMkZEMDAwRTJENUEzQTBBRUUzRjlBQzVEQkZFNkZFODk1QjgwNTkwNAotOjEwMkZFMDAwMTE2RUI3RUE1OUJCOUFDQkU5MDBFMTUyNkI3Nzc4QTkyOQotOjEwMkZGMDAwREYzQzg1RTIzNzMyMkUyMEYxM0YxODg2MEZDNEUzMkRFNwotOjEwMzAwMDAwNjI3RDMwNEU4MzE1REYzNzg2QzdENzdDODEyRkNDOEMwRAotOjEwMzAxMDAwNDZCOENGMTU3QzM3NTdGMjVCNTMzMEJGM0Q4Mjc4MDRGQQotOjEwMzAyMDAwM0U1NUQwMkUwNkI4REQyMkNBOUVGOEUyQTExNDZFNDdBNgotOjEwMzAzMDAwM0Y5NEMyQ0ZFRkY3NUNFMjdDQ0NEQzk1NDE3OTc5ODI5QQotOjEwMzA0MDAwNUZBQTREN0M3QzM5RkY3NUEyN0MzMEM1NEVFM0NCRjU4MQotOjEwMzA1MDAwMDBCRDdFOEFFM0U4NDAwMjIwQkQxRTY5QUMyN0ZCNjgwNAotOjEwMzA2MDAwMTYwQjg4QzM2NUZBRkI0OUJBMEVBRDc3Q0IxMURERjdCNQotOjEwMzA3MDAwNTgxQUJCNjYyMEU4OTU1RjQ0M0E1MThFREU2MjZDQ0VFQQotOjEwMzA4MDAwQTkzMzg3RjY5MzcxRTY1MkQ2NjFBMEVGMDM0OTNGOTlDMQotOjEwMzA5MDAwRDAzRjYzNTUzM0U1MzU5NTJBRkMxRUY0RTk0MjhCNTc0MgotOjEwMzBBMDAwMDc3NkUyQzcyMkJFN0IwNkVDNDY5Q0E3MzQ1NkExRkNGRAotOjEwMzBCMDAwQUY2OTMxNzc5NjIwNUY5NzVBOEQ3QTJDM0YxNkYxREZGMgotOjEwMzBDMDAwNUI1OTE3OERGRjg5MkQyQkU2MDY4NkRGNEQ1MDMxRTZDMwotOjEwMzBEMDAwMDcwQkY4QTREODA1RkJBRDQ3RjlDM0VCMkI1RDY5RTRGQQotOjEwMzBFMDAwOEQxMkY1NEZGNzYxNUM2NkVBNzlBMDAzQUExRjJFNzY3MAotOjEwMzBGMDAwQzFCQ0E3NUYxNUNGRDk5MTYyN0M3RUZBM0U0MUNGREU3RAotOjEwMzEwMDAwRTMzNERFRTlDN0U0RjM1M0ZDRjkwQUY5RkMyQjVFN0ZGNAotOjEwMzExMDAwNTA4RTJGRUEwRjZCOUUyRkQxM0M3RjgyRDc1QjlGRjg5QQotOjEwMzEyMDAwQUFEODhCRjZFQjY4NEVEQUE1MjMxNDkyNTc0NjIxMzdCRQotOjEwMzEzMDAwNEE5N0I2MTI5QzRCNzVCQjc4Mzk5QUI1RUFGMjJGRENFOAotOjEwMzE0MDAwRUY2NDhBREI5ODkyODBGN0NFOEY1ODUwMEZGRjMzRDUwQgotOjEwMzE1MDAwNjU0QzgxN0U5RjI2NzlGRTg2RTU5QzQ5OEFENzg4NzJEOAotOjEwMzE2MDAwRjczRDFGRTk4NTkyMUVGMjI3OEQ0MkFFOUZFQUU1QTY0NAotOjEwMzE3MDAwRjdBNTFFODM3MURFQzNGMTJGNzU5Q0JCNDNDN0Y5RTQyRAotOjEwMzE4MDAwQzc4QzczNEQ2QUM4Mzg0NzdGQ0NCRUZFOUNDQUUxMjQwOQotOjEwMzE5MDAwQzc5MTc2NTE3MUJBNEJFOTg1RkMzQTY2NjQ5MEJGNzA2RAotOjEwMzFBMDAwRUVCRENFMThGNDRCMzFDQzc3MDNEMENGNUREQTlDOTFENQotOjEwMzFCMDAwMDdFM0NGN0RFRUM1OEMwQUI0OUI4NEJFQUYzOUE3MzIzRQotOjEwMzFDMDAwMTdDOEEzREE3MzBBOTU1RkI0N0Q2NEM0N0JCMzM1REI5QgotOjEwMzFEMDAwREE4Q0UzQTA1RjJEOTQ0NTAxRUJBQTEyRUIwNDdEQTdFNgotOjEwMzFFMDAwOUYxQ0EwQTc4REJENzQ0MjZFM0NDQ0YzMzI5RTNCQTFDOAotOjEwMzFGMDAwNDc3Q0NFRDUzNTFGRkQzREVBRUYxMTRBRDhGOEYyOTc0RQotOjEwMzIwMDAwNjI3RjA3N0JCODFGNjFFRUM1RTU1MTYxNkY1NzM0RUVGMQotOjEwMzIxMDAwRjMxNDA2Mzk2MEZDQTJGQUYwRjkwMkJGMTJFQjI4MTU4QwotOjEwMzIyMDAwRkE2RkZBNTA0Qjg0MDNFMDNDRTQzRDFFNUZBRjU4OUJCRAotOjEwMzIzMDAwOTk4QkZFNjI2M0YyRTgwNDgyNUI4RjdFRDYyRUVFNjc4NgotOjEwMzI0MDAwNkRFMTdFRDY1MjdCQzcwMkZDNEU5OUJCNTdFQzgzRjhFQQotOjEwMzI1MDAwRERCMjA5QkY5MzdDMDYyQzBCRUY4RTM3Qzk3QUJGODk4QwotOjEwMzI2MDAwNjM0NjcxM0YxOEQ2RjM3RTlGRjkyMEYyQ0RERTI4NkVCQgotOjEwMzI3MDAwQ0Y0RTFCMzYzMDBBRTU0MzY3NjZCNENFMDZGQ0FDNEYzMgotOjEwMzI4MDAwMkE3M0Y3NEFDMEY2QUJDNjYxN0JBMUM5RDJBNzhDRTAwRQotOjEwMzI5MDAwQ0I4ODJFRjQ0OUVFRkVCODRFRUM4RkZFMTE4RkIxMzU3RgotOjEwMzJBMDAwRTEwNkQ4ODdFNzBEOTVFRTAzNzgwNjQ1N0JDMkM1Q0JDRQotOjEwMzJCMDAwMkZFRkM1RTVCOUJCOTc4REUwQjE1NzA3RUJDQ0Y1QUY2NAotOjEwMzJDMDAwNDNDRTBGNzZGRDgyMEUxOEVGQzhEMjk0QzEwRjM4MzA2RQotOjEwMzJEMDAwMUU1Mzc4NURBRjA0RkZGQ0IzOTIzQ0EzMDJFNzNGQTIwQwotOjEwMzJFMDAwNjM3REYwNjg3MUIxRUIxODJFRjA3MTFEQzIwNjRBRjdDQwotOjEwMzJGMDAwMjhBMEI3ODBGM0RFRTQzMUQxNDFGNUE5QzU3MUNDMTUyMgotOjEwMzMwMDAwRThCRjlEOUExQTU0QkZCMTM0M0JBOEZGQ0QzM0ZBMDdFQQotOjEwMzMxMDAwM0Q5RjY4RUFDOEFGMEJCMDY3N0JCNjk3QkMwNDlGNUE2NQotOjEwMzMyMDAwOEIyNTBBRURCQTRGNUFCRUY5RTAxNkI0MDMzN0FBNEUwMAotOjEwMzMzMDAwQjQ1OTY3RUZEQ0Y0QzE0OEU4NzUwNkYwMUI0NzdFNDlENQotOjEwMzM0MDAwMDdGOUQxM0U5Nzc5NzQ3QTk3M0UzMDdFNzQ4QTc1NTAyQQotOjEwMzM1MDAwQkVBMjNDRDc1RTZDREM2OEFFQUQ5REYyMDk3RkFFNzg1NAotOjEwMzM2MDAwRDFCQzVFRTJGQzlCQ0I3MjUxM0Y5RUE5N0I5RkZDNzk1NgotOjEwMzM3MDAwMzU2NkJFQ0Y1MzJGMUVFMkRGMkQ0NEJEMDI3NDdGMzU2QwotOjEwMzM4MDAwQkU4OEY2RTIzOTEwRkNDMEZGNDUzQjBFNTE5Q0NEODY0RAotOjEwMzM5MDAwQzE0REI0RjdEM0U2RTlGMUZFNjQyRDk0QTg1RkM2ODE3MAotOjEwMzNBMDAwREM4QTAxQkFFOTY4NjMwM0I3NjFERTQ4QTY4NURCRTUxQwotOjEwMzNCMDAwRTdBNjkwQkY3QzZGMTRGN0ZCRUM0RDhDQTVFRjQ4Q0NEMwotOjEwMzNDMDAwNkRCODg2REE2QkNFNDVEM0Y4NkZBOTFERTMyODJGRkFDNgotOjEwMzNEMDAwMDU4NUUyMTMxMzUzQTcyREM1RkRFQzhERjIwRUI4MUQyNAotOjEwMzNFMDAwRTY5REY4RTdBQkM3MjNEQzZBQjZGMTdCMDIxM0Q1NzcxRAotOjEwMzNGMDAwRjJFNzQxNTlENTc4MERCRDNGNTE2NTdCMTVCMDFGNjI4RAotOjEwMzQwMDAwQ0VERDQyRTM0RTQ0MUIwMEVBRUE1MENCMDNBODk3NTVCOQotOjEwMzQxMDAwNjM2QjlGM0ZBMEJDMzE1QTQ4REVENDlFOEJBNEY3MjYzNQotOjEwMzQyMDAwMTQ3MUZERkQ3QjIxNEYwQzlEN0M1RDYzQ0Y0REEyRTdBOAotOjEwMzQzMDAwOTIyRTdDQkRCMjgyRjJGNzBEMDkxQkY1RjhCRDIxNDMzNwotOjEwMzQ0MDAwQTc0MkZEQUYzREQ3OUY0QUI5REYzN0ZBRkQ5MUJFMkZBNgotOjEwMzQ1MDAwNjA0OEY4N0ExQ0U2OERCRTExQUZEOEM4MkNEMUM4RTNGRAotOjEwMzQ2MDAwQjM3NUMzNjI1ODE4NzlENTNEQ0YzOTlFNkY2QzNBQzc5MgotOjEwMzQ3MDAwRjM4RkZGM0JDREY1MTdFNEMzOTI0NTlEN0E4QzE3MzE0RQotOjEwMzQ4MDAwNzM4NDBERTE1NTUyMzBEODUxMTFDMDY3RUFBRTlCOEM2MAotOjEwMzQ5MDAwODgxRkMzRUFCNzhEQThBRjRENTAxNjA1M0NBRjE2Rjk4QgotOjEwMzRBMDAwNTg1QTc5REQyMkU0ODNGQzhFOUJENDNGMkM3OTA2RDFENwotOjEwMzRCMDAwRTdBRDM2NDFBMDgyOEY5RTE2N0MyQ0RGRUZBMDMzMEU0NQotOjEwMzRDMDAwRTA3MTNCRjdGM0I3QTY3OURFNDIzOUQxNTFDODZFN0M4MwotOjEwMzREMDAwOUVFNDY3NDcwNkM2Njk3RUFFRjUwMzlFMjMxNEIyMUJDMQotOjEwMzRFMDAwM0IyOUFGQkVBNEMwQTFDM0Y4QzA3QkREN0E4N0YzRjM0QwotOjEwMzRGMDAwODVGNkQxMjZGNkZEOTZDQTE2RTJCODZGRkRGMjk3MUQ0NQotOjEwMzUwMDAwMkUxOEFGRURFRUJDM0NENDBCNzJERUNGN0FGMTdCMEIwNAotOjEwMzUxMDAwQ0NENjc1MUVDRjg3QjUyRjQ3M0I5MEVGMjdFMkUxMEM0NQotOjEwMzUyMDAwRTNBMjNCNEQ3NDZFODE3NjhBNzdENEJFNkM3QTBBRUY0MwotOjEwMzUzMDAwQkJENTVBRTFGQzBBRjMxN0JEMTJEOThBNzREQ0Y2NEFFRQotOjEwMzU0MDAwQTQxRUY1QzcxREJEM0Q5RjIxN0M4QTVFRTkzQjA2Q0ZDOQotOjEwMzU1MDAwOEJBRTE2OTM5RTkxRkRFMzNBNEFGMkI2ODdGNTVFNDgyQwotOjEwMzU2MDAwN0U2OUU5NENGMkE3QTc4MUYzNEI5OUEwRDM3MkMxN0Y4MgotOjEwMzU3MDAwMUVDMTQ3NjdFQjkyODgwRkNGMkU4MjQ1NjMzQzc1OTE0MQotOjEwMzU4MDAwMzI3MDFCREEwQjBFMEI3RDk3NEVGMkU1NDQzQzFGNDE2NwotOjEwMzU5MDAwRkJDNEZFQjE3NDhGQTFFQTVDNkMxMDFGNTY5RkNCMTQ2NAotOjEwMzVBMDAwRkMxRDQ3RUQ5MkRGQ0EwNTlGOTg4NDdEMzE0M0QwQjU1RAotOjEwMzVCMDAwQjQ1QjI0M0ZCMjc0NEY2MjJBRUM2MzYyM0RGMEJEOTU2OAotOjEwMzVDMDAwRTJGRUY5Qzg0RjdFQkEzMURBOTBCRTgwNkU5MjJCMDJDRAotOjEwMzVEMDAwRjhBN0JFRUQyNjg2NzY4QTI5REU0RDc0MzMwM0NBNDBFRAotOjEwMzVFMDAwM0I2NTY2Qjc5RDYyMUI5NzA4RUIyRjU5OTZBOUMzN0I3NQotOjEwMzVGMDAwOUJGMjc5NkFFQUE1RDE3RjQ0QUFDODI3MzBCN0U2QTAzMgotOjEwMzYwMDAwNUQ2QkE4OEI3NEUyN0Q5QTMzRjEzQzFFMzQ3RjA1ODc5NQotOjEwMzYxMDAwRTM3QzgzQkIwOEVEOENGOTRGMjhFNDNGNDNGQjAzRTVEMwotOjEwMzYyMDAwRDJEMDAzNzVDNjQwQkZDQTRERTcwNjUxM0M3RENBQjkyQQotOjEwMzYzMDAwQ0JBODM0MjY3QjJFNDczODk0OURCQjVFRTA2QkQwOEZBMQotOjEwMzY0MDAwOEEzRjBFNzE3MUJGOTJDMTY3NzI2RUM4NDRCRjkyNDdDNAotOjEwMzY1MDAwNDUzQzFGNEY2N0I2NDcwM0UzN0Q2QjU0RjI4RkM5QjhGMwotOjEwMzY2MDAwQTRGNDMzOTlGMERFNEY4MDNFRkQ0NkRGOTg0MURGQTM5RQotOjEwMzY3MDAwRDFGQTlEMEFCOUZFM0ZCOUQxNDBGQUJGQUFFRDlEQTE4QQotOjEwMzY4MDAwM0E3OEZFNzlBNjJCMDlGNUM5N0E4M0E3MDhGNzMzNjczQwotOjEwMzY5MDAwQjJFRjM5MDNENEU3M0VCOEQ1M0FEQ0UxODc2N0IzQkU3MQotOjEwMzZBMDAwMzUwN0Y1NjkzM0MwMTFGRDVGQ0QyQkQ1RjEzRTZFRjdCRgotOjEwMzZCMDAwNDRGMzM4MUFBNzZGNDlDRjVBM0E5RjczMkU5QkUwNzM5MQotOjEwMzZDMDAwQjZDRTQ0N0FFODJDRDAyRDBCRDA0MzUyRUY0ODM5MkY5OAotOjEwMzZEMDAwRjU4RkE0RUI2QTNEOTc1RkQ1RTYxOENBMjNGM0VCOURGRgotOjEwMzZFMDAwNDlFRTQyQTRCQjdFM0MxRkQwQUY3NzlFNUEzNTAyRjkwQgotOjEwMzZGMDAwRTA3NDNDRTU1RDRCQkQyMUY5RTA4NUM1Qzk5NDQ3MjRFNAotOjEwMzcwMDAwRjU5MkU0MDMyOUNGQTU3Qzk3NzQyRkY1RDZFODNGRkQwOQotOjEwMzcxMDAwRUZENkJGQzNBRjkzRDIzQzc3QTUwMjdENURBQkU3RkE4RQotOjEwMzcyMDAwRUI1QUJEODVFODY3NkNGQzI0M0REMkNEQzVDQkQxNDNCNwotOjEwMzczMDAwNDI4RTFFMEE5MkEzMzUzREU4ODE0NUE5NTI3RTVFMUM0OQotOjEwMzc0MDAwMUZDQzExN0MzM0RFQzRFRDQ4OTRGMzgxRTNCNUE2OEQyNAotOjEwMzc1MDAwN0UwOEY3QjEzQTk1RUJEOTlGNkJERDNEQzlGRkQ1QTkzRQotOjEwMzc2MDAwOTcyNkZGOTdBNDVFOUNGQ0ZGRUY1NEZFOUQwQUFEQkMxQwotOjEwMzc3MDAwQzcwRjcxQTNCQzNGQkRGMzcyMUZFQTgzODMwQ0Y0MDMzMAotOjEwMzc4MDAwRUFDMTk2NjhDNzI2QTEwRjQ4NUY0NEM1Rjg3RTQ4MUY2NgotOjEwMzc5MDAwMTRGNjlFRkVERkE5RTFGNUMxNjY2Q0ZGQjFGQTQwRDJENgotOjEwMzdBMDAwOTdFNDFCQzkyNzkyMkZCNDdDMjRGOTYyQzI2RkUxQkM1NQotOjEwMzdCMDAwODg3ODdBOEJERjhGQUFENjdCOUIyODBFRTk4ODFFOENBRgotOjEwMzdDMDAwRkNEOTZEQzc2RDUzODhERjQyRjQ4NEUwMUYzRkJGMDQwRQotOjEwMzdEMDAwRUIwREM5MUY5MjVGMjRGRjU0MEJGRTk4MjlGODQzRjJBQQotOjEwMzdFMDAwQzU2RUI1RjlEMTExOTgwQTkwRTZGOTA4RTU4OEU0OTMxOQotOjEwMzdGMDAwQUFFN0I1RkFBMTQ3QkE0MjRGMjM5QjE5NUZDNzkwQUUxQgotOjEwMzgwMDAwQUFBMTBDQTQyQjUzMEZGQzcwRjAxMkY1QzJCRThCQTQxRQotOjEwMzgxMDAwQTdBRkZFRjNGNEY0NTUwRkY0NzRFNkE3RDA1M0E4MUQzOAotOjEwMzgyMDAwRkI2MUJFMDNENjczMzYxRkU0NkRBNjlGREUyNkZDOERCQQotOjEwMzgzMDAwNzFGQjIxOUI5RjA3RjY0NkYxN0RFRTM1QTY5M0ZGNjc0RQotOjEwMzg0MDAwQzJGNzNDQ0Y1N0RBMDMzMzg1QkY0MUQyNjkxRUQ4MDE5NgotOjEwMzg1MDAwNjk0M0ZDRjhDN0YzQzBCQzhCOTM3Qjg0Njc1MzdDODdCOAotOjEwMzg2MDAwMTFDRjI3MzNBMTBDQjQwMzdBQjI3RjUzRDMyRTRERUU4MAotOjEwMzg3MDAwNDU4QUZFMTdDMkYzODBCNDlGREQ2RTFDOTAxNjFFQUYwMgotOjEwMzg4MDAwMDNEMzdFMDI1RTI3NjJBMjJBRjkyQkIyNEI1Q0EzMDAwRgotOjEwMzg5MDAwM0YwRjg5QkFCNzRGMDlDMkYxRkEwMkY5RkNCMjU1MkVBRgotOjEwMzhBMDAwM0RDQTA3RDZGRERENzVGNDc3QkNBNUNBN0FDRUZFMzFEOAotOjEwMzhCMDAwQjA5RTA5OEYzMkJGMUYxRDlFOEYxRDE1RDNFRDFGNTE2NgotOjEwMzhDMDAwOThCRjdGNzE1QUQ2RkU5NUE0RTcxQjQ1REU0QUE3OUU5NgotOjEwMzhEMDAwQzc4MzQ0M0QxRkVBOTY4MDdBODFBNkJFOTZGN0I3RUE3MQotOjEwMzhFMDAwM0I1OTYwM0UwOUQyOEQ5MkNCRjFFQzBFQjAxRjYwRkFDRAotOjEwMzhGMDAwRjZCM0E4MkY2QzBBNDNGRjQ2NkRGQzg2NTdDRkEyNUMzNwotOjEwMzkwMDAwREJBMTUwNkNBQTFCMEVERTgxMDQwN0ZBM0UzOEQ1MDdGNgotOjEwMzkxMDAwRUY3NzVEQzZEOENEREI3OEZERjZCNTQzNTY3OTJGMTMyQQotOjEwMzkyMDAwRTMwNkRDMUIzMjM0MkIyRUNBNDcyODUwN0M1OTk5QTE2MAotOjEwMzkzMDAwRjBCRTNENERDQTEzQjkxRTQ2RjcxNDAyREU2Nzk4QUZCQwotOjEwMzk0MDAwNzcyOUVGNzdFNzRENjdEMUZCQURBNjRCOThGRjg2NTFGRQotOjEwMzk1MDAwRTFFRjZGQUMxMEZEQzZFNEM3ODQ3REZFNzA5QUNBRTE0QQotOjEwMzk2MDAwMkZGQzA2MzQzRjM0NEQ2OTBFN0Y5RkZGMDlDMTJGMUQ4OAotOjEwMzk3MDAwMTgzRjIxNzg0RTVBODVGRUVEMEVBMzg0Qjc3QjE1QzIwMQotOjEwMzk4MDAwN0IyQzYzNDE3RTM0OTg5RkVBMUJEN0JBNEIxQUY0N0M5OAotOjEwMzk5MDAwQkIyRTBEQkM3RTY4QkY3N0E1MDVEQjAzRjQ5QjA2NUZERAotOjEwMzlBMDAwQTYxRjgwRjdERDYxREU3NzA0QkZERkZBNDNGODVBMTIwNQotOjEwMzlCMDAwRjJCRUEwREI1OTkyOEU1RDQxRjQxRUEzNzcxMzdEQzY0MwotOjEwMzlDMDAwQzQyQjM2QjRBMzZCREM5MTJCRjFCQ0UwRTdDRkQyMTI1MQotOjEwMzlEMDAwODI5QjhDMTM4NEYwREZCNDkyMzEwM0M4NEUxMkNGNkZGOAotOjEwMzlFMDAwNUI4NUZDRUJENjc1RjdFN0ZDMjhFOTFBQUYzNjAxNUM3RQotOjEwMzlGMDAwQzlGNTA3RUZCRjlDNzZFQjJBRjQ0RjAyNUREMDczQUE5RQotOjEwM0EwMDAwRUIwM0Q2QURFNUM3NjY0RDdEOTQ4NjdGMDVGRjkxRkMzRgotOjEwM0ExMDAwNDA3RDAwNzBDQTQxRjkxNjdGQzhFODA4QTA5MzRGMDRBMgotOjEwM0EyMDAwOUM0RTg5N0NGMjhFRDFEQzlFRUNDOEUyRTU3NzY5M0M0NQotOjEwM0EzMDAwMkVGNTk5QTBDQjUzOTI5RUEyMDJFMDkwMTY0NDNGRjQzQgotOjEwM0E0MDAwRjcyMTAyRjY0RDcwQkEyOTVFRjJGM0JEMjVDNUMwQkY1RAotOjEwM0E1MDAwMUQ3NkZFRkM3RkQ2RkU2Njk1MzdDRDVGRDc4RUY3Q0ZGRAotOjEwM0E2MDAwQjVGNzk2MjA1Q0JBQzdGNzJFREE4Rjc2QzQ0RDAyNkU5MgotOjEwM0E3MDAwREZBREJENjdCRjc3ODBDMDczQTJGRkJCQUI0MDFGRjQ1MwotOjEwM0E4MDAwM0Q5RTZBQTQwRjI1OTQzRTVFMERBNTJGQUZFNjdERkFGQwotOjEwM0E5MDAwM0IwNDNEQkRGRkI3NTA3OUUwRDJCQ0NGRjA3QjEwMTc5RgotOjEwM0FBMDAwRkZCRUMwNUJCMTA2QUZFMzM1NzgxREEzQTk5N0NBQkFDNAotOjEwM0FCMDAwMkY0OEZFNEFCOTVDQkVFM0UxRkIxMkUzRDFBRkE5RDBDNwotOjEwM0FDMDAwNzUyNDNGM0QzRjQ4RjQzQ0Q3MjZFOTc3MTVDMUQ1NEZEMwotOjEwM0FEMDAwQ0YwRkVENDdGQTlEREMyQ0U5QjU5MUY0Q0YyNDk0QzNDOAotOjEwM0FFMDAwMjNGQ0Y1MjkyODg3QThGRTcwMDlDNkM1RkNGQUVBOTFDRgotOjEwM0FGMDAwNTUyOEI3NkY2ODkwRkQxRkE1RkUzNzJGOTNFM0FEQTYzRAotOjEwM0IwMDAwRTcxMjhGOEMzRDQ2RkFFRUE2N0NBOUFGMUUyN0I5M0Y3RgotOjEwM0IxMDAwQTc4NUJGRUY0Q0ZGRERGRTFGRTQ4NzQ2MEQ1Q0Q2NkEyQwotOjEwM0IyMDAwRUE1RTRERkZENTE3RDA2RkNCMzRFRjJGRDIzQzVGQTlBMwotOjEwM0IzMDAwQTlBRkQxRDQxQjgyREYyRjlCQTExMDFGOTYxNUYwMzg5RgotOjEwM0I0MDAwQTU5NjJGQjVGNEUxNEFFRkI2NzNCQUY1Qjk2MjI2RkIzNAotOjEwM0I1MDAwMkU4OEFGMjZENEYzRkFCNUU5MUI0QjFBQ0MwMUY1NzVDNAotOjEwM0I2MDAwOUI0QTM4NUZDMDZDMDFGNzlGNDFFNjdBNTVBMDA3NDMzNgotOjEwM0I3MDAwMEY3MkIzMjBCRDA3QjlEOTRGQUJFRkY5RjM3RkUwQUZCOAotOjEwM0I4MDAwMjkxNDM3MEFCMjRCNzZBQkMxRjUzNjU1QUNEQkJCNzVBMQotOjEwM0I5MDAwRkY4MjAxODFGMUQ1RTc0QkYwNUNERDYzMUNDN0RCNUM4NAotOjEwM0JBMDAwMzIyNkQwMkU2MkNEMjVBRTgwN0RDQUZFRTNCRUZCNUVGRQotOjEwM0JCMDAwQzVGOTNDRUJGRTVDQjJEMThDNzE0RjExREZCNEYzMTI0RQotOjEwM0JDMDAwRjRBNThBRkFCQTU2Rjg2RkM2NjExRTJGQzY5M0EyNUE5OAotOjEwM0JEMDAwNzNFNjBGMDhEODI3NkJFRTgzRkI2Q0JCNUJFNURGQjdBMgotOjEwM0JFMDAwQUIwN0ZDMDA5Q0NBOTg4M0YyNTBBNzMzMTdFNUE1QjYzMwotOjEwM0JGMDAwQzVDNDJDRkMyRjc4NkZGN0RERUE0MkQ0RDMwNzE3QzY3MwotOjEwM0MwMDAwNTE1RUQzMkJFOUZDN0NCMTNCQTY3N0UyNENBOEI3NDVDQgotOjEwM0MxMDAwREY0NkYyQjZFREZFQjE1NEVFNTI1RENCQkI2QzhDMkQ5RgotOjEwM0MyMDAwNUVGNzRBODlGOTcyN0MxRTQzNzBCQTNCRkRBNTkyMjU2NgotOjEwM0MzMDAwNDBFRkY3QTYzQkU4N0Q4RkREOTZCODAzRURFRDA3MEM2RQotOjEwM0M0MDAwMTQzNzA0MEU3ODkyRThFNzQxRDM2MDNDNkY5NzJERTk3MgotOjEwM0M1MDAwNEY3MUIxRjJDNzI2OERDMzdCQTRFNUY3MTkyODVFRDI1OAotOjEwM0M2MDAwQTlCMzkxOUZDOEYzQzA1OENBOTM5QUIxNEM5NERFQUJFNAotOjEwM0M3MDAwQTk3Q0U1REY3RkFDQzc3QkE2NURFQjE0RkE0RUNENTU4MgotOjEwM0M4MDAwNUYzN0ZGNkQxMEQ0MkIxQkIyRTk3RUM2Q0JFNzc0OTQ2RgotOjEwM0M5MDAwMTdGRUU5OUFCRTNFQ0M1MzNFMUM1OTQ3RjlBNUQwOUY2QQotOjEwM0NBMDAwRUVCQjU2OUU3N0VDMkZDOUM3RkVBQTBENTMzODhFNDI0NQotOjEwM0NCMDAwM0JEQUNGNDc1N0E4NEZFMTNEQ0UzMkFCMjUwQUYzQkJFNQotOjEwM0NDMDAwOEY3RUM3QzhBRjczRjQzRTEzN0RFRkU2NTNCM0U3RDZEQwotOjEwM0NEMDAwMzVGMTc0OEYwOTJEN0Q3NjU0NzE1ODE1ODBDM0RBRjQ0RgotOjEwM0NFMDAwRkQyNUM5MjlEODZFMTJGOERDNkYyRDAzM0UyRkQzNzU0MAotOjEwM0NGMDAwRDMwRkU5OTM4QTU4NUU1RkJCRUVDRDkyNERCMDhGQTM5MAotOjEwM0QwMDAwNEZGNEE1N0NCMTg0MENEN0JBNzQ4MEQ3RTEwQ0Q3OTM1QgotOjEwM0QxMDAwNTQ4QUZCRDlBRkZDOUJDNzI1NUYzQTU5OUU4OEY0QjVGRQotOjEwM0QyMDAwNTlEMEY1Q0JFN0NBMTMwM0ZGNkU0MUM1MjkzREQxQzE3OAotOjEwM0QzMDAwMkI0NkM3MDJGQUVFNjk1NEJBODJFNzZDQTA4MzM4RjRDNgotOjEwM0Q0MDAwOUJDRjEwRTcxNkEwRTc4NTVCQzNEODU3NEJEM0I5M0Q4RgotOjEwM0Q1MDAwRDZGNkRCODQ1MThFMjBCQUZFOThFNDI5OUQzN0EwRkU2QQotOjEwM0Q2MDAwNjJGQTQ3QTRFNzhFOTgxNjYyMkU3NTc3M0UyNERCMUQxMwotOjEwM0Q3MDAwNDk3MDMyMzQ0NUZBMjIzM0QxN0ZFQTFBRTdBMkYzNEY3MQotOjEwM0Q4MDAwNzM5RkM5OTYwMDNFMTRGRDNGRjFGMkZDREY0RkEwM0Y0OAotOjEwM0Q5MDAwOUVGQjNFRjFGRTNGNEI2MDNDNDNGNkFGQjQ1QUJDNjgxRAotOjEwM0RBMDAwNUMxQ0IzNThGNDg4OEY4M0ZBQzU0NzMxM0ZBRDYyOURFMAotOjEwM0RCMDAwODFGNDQwQzVCQTg0NDU1RDI4N0Y4MDZFRDBCRkE2REQwMgotOjEwM0RDMDAwOTcyOUMzQzBGRDE4M0RDNjU3M0YyRjE5OTMxNjc4NUUzQgotOjEwM0REMDAwMzk0MUYyQkIyN0JFN0MzN0ZENDRDOUM2MDEzREYzNjVCRQotOjEwM0RFMDAwQTU4RENCQTc3MUVCRjhGNzc1MkI4NzU4RjQ3NEJGN0JDMwotOjEwM0RGMDAwRERBQjlCRTgxRUYwQkNDODVDQkM1NzUxQjlDRTQ0RjhBMwotOjEwM0UwMDAwRUFCNDU4QkNCNjJCRjFCRTgxNDUxRjBCRTVBMTc0QUVEOAotOjEwM0UxMDAwNEZGNTE5MEVDMjQ3OTFDQUY0MTFCOTU0RDIzRDBBMTk4RgotOjEwM0UyMDAwM0YzQ0IxRjBEMUM3MzExREYzNzNFNkJCN0UxOEMwRUY0NAotOjEwM0UzMDAwOEM4QkQzRTk5OTZEMkFGOTFGQjVGMUM0RUFEN0I3MUE2QgotOjEwM0U0MDAwMEJEOThGODgyN0Y2MTA0N0FDNjI5REUyQkJFMkUxRTMxNQotOjEwM0U1MDAwODlEQTM4RTJCRkQyQzVCREIzRUUzOEEyODFCRTg3NTE0MAotOjEwM0U2MDAwMjlFMjg4NDU2QjE1NUE3RkU1NDJGRUJEOTJBMjM4RUVFNQotOjEwM0U3MDAwM0YzRUIyMThFOEEwMkZFRERGNkJDQkM1M0M2OUFFN0ZBQgotOjEwM0U4MDAwMkE5OUUyOEI4MDVGQUY1RTNCOEZGQzk5NzVFOTFDNUVERgotOjEwM0U5MDAwNjVFMjNCQjA4NzIzOUQxOTc4REVBRjU4MTc0OTcwQUVCNQotOjEwM0VBMDAwN0M3MkY2MDc0RkU0RTM3REMwODlGMTgxRTc2QjlCQTA0QwotOjEwM0VCMDAwMEYxODlGRTEzRDY4MzlDRUIxMjVGN0QwNzc2NzhCRDZEMwotOjEwM0VDMDAwQzMzOTE5RjNCNDYzRDk3MzM3NjUyMkRFNTIzMjMwREU1OQotOjEwM0VEMDAwMjlGQjU1MkVCREJCMEZFRjA3RTc2Q0Q4NzdEOTBBOTVBNAotOjEwM0VFMDAwN0YwRjZCQkI4OUY0MjFGMDdDMzIwQkI4MkYzRTYzRDk3NgotOjEwM0VGMDAwRUI0NjIzRDc2NzJDNzlBOEIwQjMxREZFRkI2QzlGQzI5RAotOjEwM0YwMDAwNzNGQzA0NDFBREI4QjcyNkUxMjdFRjVCOTVFOUY4RjdGQwotOjEwM0YxMDAwMzY0Qjc1MEFEREMzMDI4OTQ2Rjc5NzdFOTFDMUZEQTMzMgotOjEwM0YyMDAwNzkxOURDQ0UyRENCNzBEMjNEOUVFQTU1MjZFN0QyNENENgotOjEwM0YzMDAwM0U0RUY3QkQ3NTM4RTc1NUVCM0EyQTI4QUVGOTE3MTMxMAotOjEwM0Y0MDAwRjk1NzZBOTc0NUJBMjJBRDNDMUZFM0Y5MDE5NDc3QUQ2MgotOjEwM0Y1MDAwMzcwMjNDQUExQzVDNkVGQzQyRDA2M0FENjNEMkQ1OTRBMAotOjEwM0Y2MDAwOUZBRTY3MDdGMEVGMDc1NjVCQjg5Q0FDOEUwNUI4OUIxOQotOjEwM0Y3MDAwMzkwMUU5ODZFMkY3MzkxOUU1NTNFMkI4Mjk4MzAyRTYwNwotOjEwM0Y4MDAwNTc0NDNCOENFM0IwRkFDN0REQUI2MzBERThBN0MxRkUzNQotOjEwM0Y5MDAwOTcwRjQyMzhDNjVEN0YyM0FFRUY1OTk1RjgxQTgwQjQ2QgotOjEwM0ZBMDAwQUEwMEVEQkY2N0Q1M0MzQzc3OTdBREQ4M0QwRUU1RjA1NAotOjEwM0ZCMDAwREMyRDgzRjE0NjA1MkI3QkVFNUREMjIzNzMwNUZFM0JBMgotOjEwM0ZDMDAwNDUzRTVBMzlENEYxQkI4MTM3NjQ3MEI5RTk1MUI5REY0NAotOjEwM0ZEMDAwRTgwNjAxMkY0OTA3RjI3OUY1MEEwM0Y3RTM4M0JDNDdBNgotOjEwM0ZFMDAwMDE1M0JERTQ0MzFBQjdEQUQyOTE4ODcyQjg3QUJCODEyMwotOjEwM0ZGMDAwRUU4N0RGOENFQjA2Mzg5NzJGNDkxRjc1MDBFOEFBRENBNwotOjEwNDAwMDAwMTA0M0RGNTFBREYyNEUzNDYyQkRBQTUxQTFCQUZGQkREQgotOjEwNDAxMDAwODQwQ0E0RDMyRjk2QkQ2MDQ1RkEzOTFDRDk5QTgzRkEzMwotOjEwNDAyMDAwQTk2QjVFQTQ5M0VFMjlEQUI4REZFRThCNjUzOTc0QUYyNQotOjEwNDAzMDAwNjk4NkFEQzM4MkRGNjU5OUIxMjBEQjhFNzJGQ0EwQURDRAotOjEwNDA0MDAwRDU4OENGMEYzNjY3RUFCMEVFQjJEOTQ2NjFEREE1QkY5RAotOjEwNDA1MDAwOTJFQTVGODg3QzE3RkE0MUJBNTIzODlFQUI5QTc2MUI3NwotOjEwNDA2MDAwRjFFRjJGREQyQkU4RTJENEIzRUZGNjQxM0Y1MDc1NDY3OAotOjEwNDA3MDAwNDcxRkQ0MkY0MDA3N0Q1MjExQ0VDRjI4QTQ5RjZCOUFBMwotOjEwNDA4MDAwNzgxRUJDQTQ4MzFBQTQwM0UwQkIzOTgyMEU2QUI2QkRCNQotOjEwNDA5MDAwNzAxN0YyNDMwREUyM0YzNzk0OEU4MDlFREJBOUZERjk0NQotOjEwNDBBMDAwMERFMzE4N0ZCRjFERTk0NEVBMzNBODJGMzNBMDNGQ0VBQwotOjEwNDBCMDAwQzhFQjhCMDVGRUExN0QwQzZGRjcwRUUwRjk3NURERjlGRAotOjEwNDBDMDAwMDg0MTdDRDAxMzdFRDc2NkU4MDQzRTRDMjQ3N0Q3OEExQgotOjEwNDBEMDAwRkQ3NkFFRDg2RTQ1RkM5RDdBNzZGNzFFOENCNzU0M0ZDMAotOjEwNDBFMDAwMEZEQURBMTE4NjFGMDQzQzZBNzFGRjU2NUEzRkQ5MTk1QwotOjEwNDBGMDAwQjVCODVGQUI3RkZGREQ3NDJGRjhCMDk2RjFGREM5RkQ1OQotOjEwNDEwMDAwRDZFQUM1RkVFNTczRjFGRTNBQjFDRjJBMjZFMEI1QUQ5OQotOjEwNDExMDAwMkZFNzNCQzE2N0M4QzdGNEREMjFCMTNGOEYzREY4QkIzNgotOjEwNDEyMDAwQkFCQkM1RkU5QTQ0Qzk2Q0NENTY4NDBGRTIxN0U1MEZBMQotOjEwNDEzMDAwRDA4RkNCMjhFNTA5NzQzOUI1NjUwM0U1Rjc0QjdDQzkwOQotOjEwNDE0MDAwRjVCRkVGRDcyQjJFRkM5MzU0MTI4RjlEM0Q3Q0Y3QjYxNQotOjEwNDE1MDAwNDVGMEM5QTFGQjkyMzI3NjAwRkNCRUQ4NEM5RjBEMjRERAotOjEwNDE2MDAwN0FENTA3Q0MyN0U5NDZDRTU3RjRBNzQ5RDdFMkJFNjFGNgotOjEwNDE3MDAwRkM1NjFDNUZDRTdCRDAxQkFEQzc3MTBFMzJDRTFGNzJCQQotOjEwNDE4MDAwRkQ5MjJGOEJFQUE3NUQzQkQ4OEFGRDRFNTlCMkQxNUVENgotOjEwNDE5MDAwMTE3ODdDM0ZDMzQ2RUZCQkQwNkU4MEY3NUQzQjE0RjJENQotOjEwNDFBMDAwNUYxRjEyRTdGRDQzRjdCRDYwMkQxRkUwQTdGNzc3QzUzRQotOjEwNDFCMDAwQkEyNTlERTEwRkZBQzlFNDdBRjdEQUI5M0Y1OEJCNkUyOAotOjEwNDFDMDAwMjk4N0U0QkE4QkVFQkZFMTVBNkM5N0VCQzdGODUxMjAxMAotOjEwNDFEMDAwOUQ0QTM4NEE3QTk1RjdGQUI0NzQ0QjM0MjdGNUFBREEyRgotOjEwNDFFMDAwMzM3REQ3QTYxREEyRkM5RDkwNzZFRDc4QzIzRTNBMkM3OQotOjEwNDFGMDAwRjJDREJCOUU1NkY5N0RFNzY1QzlFRDQxRjc4RTE4MzNDOAotOjEwNDIwMDAwMDdFQTlGMjVGM0FFQjYxNTYyM0NCNzQ5QTE3QjFFNTI2MwotOjEwNDIxMDAwQUZDMENGNEE3RDgwM0U5MkY2QzFGMERFM0M3RkE1MzYyRQotOjEwNDIyMDAwREU3NTAyRjE1OTc1QkM2MzFDN0U5MjQ0REFBNTU3N0Q5OAotOjEwNDIzMDAwRERBQUM2QTBGRjZBMUJDRjgzOTM3NDUzNzVCMjlERjhBNQotOjEwNDI0MDAwQTE1QURDOTMyQTVCRjFFRUM0NjE0OEY3NEYxQjI4Q0VEQwotOjEwNDI1MDAwNTM3NkRGNTgyM0RBRkJCMzM3NEQxRjhBRTBDMDdCMTI1OQotOjEwNDI2MDAwMjhERjRGNkMxQzkyNDdFMDYxQjZDNEVCRjFCRUM0QzZCOAotOjEwNDI3MDAwNDdBRkM3QkY1RjNBNjM4NzRBREZBMUMxNzE5MDhGQ0I1OQotOjEwNDI4MDAwRUVDODIzN0ZFQkUxQzhDRTg5MjNEMEFFRkZCNTZBNDNFOQotOjEwNDI5MDAwQkI3RUU0QTYyMThCQjBGRjQ4NEJFRjU4RkE3OEQwQzYxRQotOjEwNDJBMDAwMzhBQUJCRjQzMUE0MjdBNDFEMkNGMzAzRUJDNUJEOTBBMQotOjEwNDJCMDAwRUNERTlDQUY3QTc1OTc4QUM4MEJBQ0VGODNGMUY5QUU1MAotOjEwNDJDMDAwMEQ5MUY0RERBODUyQTNBM0I5MTVFN0RCOTk0NEU3OEU1RAotOjEwNDJEMDAwNUEzODI2MjVEQkU5OUUyQkQ5NjlCMzhDMkMyMjI1OTdFOQotOjEwNDJFMDAwREEyMzMwNDVGOTc1NDNDNzFEQTg0RjVFQkZDMzMyMThBNgotOjEwNDJGMDAwQkY4QkNCRDRGMzQzQ0JCOTdEQ0RFMzkwNzFDMURGNjFFQwotOjEwNDMwMDAwOTJFQkM4RUFDREU5NTczQjlFN0M3RjJGOUUyQkVDNzQ0NQotOjEwNDMxMDAwOUY5MURFM0ZCMUVDRTlFQjUxMUY5RUQ4OUM2M0M3N0RCNgotOjEwNDMyMDAwMUZEQjE5NDlGNzBCOEUxOTgyQkZFNzc4QTlGN0MyQjREMgotOjEwNDMzMDAwRjdBOUU0M0REN0ZDREVDMUY2OUNBNEZCMEJERUNCQjlBQwotOjEwNDM0MDAwRUNEMkYyOTg0RTJFNjY3NDRGRkM1QzA2RTNGRUU0RTg3NQotOjEwNDM1MDAwRUZCNjYyN0U2MTQ1QTNDOTg2Rjc2NDhFMjBGRDYzN0M1QgotOjEwNDM2MDAwNkJCQjRBREYwMUEyQkJERjgwQUYyM0RCRjNFODNFNzAwQgotOjEwNDM3MDAwQzVDN0JDNUVEMUFDRjhGMEZFNzJGQkMzRjc1M0ZFQzJGQQotOjEwNDM4MDAwNENCMDM3RjE2QTc5QjczREJERkFFMUVCOTEwRENFMzgwQgotOjEwNDM5MDAwM0RDQkYxM0IwMDY3MzZGMzdDOEI5MEVGM0FCQ0JFNzVBQQotOjEwNDNBMDAwNEY4QUUzRkZCRkZEMkNGRDEzRDM3QjA3REY0NzkzRjA1QwotOjEwNDNCMDAwOTZFN0FBNTc4MDJFMEE3MkZERjBGQjcyRjEyQ0IyOUY4RAotOjEwNDNDMDAwNEYyRUY2NTA3OTVBMzlCNDZBMjREMkIzMjU4NkVFMTVBOQotOjEwNDNEMDAwQkNCNEUzNTExNUJGNzM1M0JENkRGMDc5M0MxRjhGMzBGMgotOjEwNDNFMDAwQzdEMEY3OUZCRTVDQkM5MDgyOUEyNzE3RDc4OTNGOEFCNwotOjEwNDNGMDAwQjY1NEY4MTU3QzU0NUVCNUFEOERERUZCNzI0NzVFMEI4RQotOjEwNDQwMDAwREVFQjdERDkxQ0MzQzU5QUFCMjBFODNCOTkxMkJGM0RCQQotOjEwNDQxMDAwREQ1Nzk2RkJGQUZDRDcxQ0NGNzJERDlGNkY5RTZFQzVGMQotOjEwNDQyMDAwN0RCNUZEMjFBRTY1MzhFMjM3M0FDNjg2NzY2MEE1QzgwRgotOjEwNDQzMDAwMkYzOUJBODZEQkQ5QzcyMzYyRkVBQjE4RjA3QzdDRUQzRQotOjEwNDQ0MDAwOTQ0NEZDMEVEMUNDQjZBOUQ3NjM3QkM1NEVDNTg2RTc5NAotOjEwNDQ1MDAwMDNFN0NFNDk1NjNDQ0Y3REE2RUZCNEUyM0RBQUNGRDZDNgotOjEwNDQ2MDAwQzhGQjU3M0VGQUJCN0IyM0M2QjMyOUQ4N0Y0NEFCOUUxQgotOjEwNDQ3MDAwMzkzMjI5ODQ0Q0Y0MzJGQ0E0OUVFRUNCN0UwMUVERTQ2QgotOjEwNDQ4MDAwM0YzOTFGNDVGRTEzRjg4OUMzN0M5Mjk5MkY3MkJGNEJBOQotOjEwNDQ5MDAwRjdGOTU3OUNGRjQ2OEE3REI3RjdCNkNCRjgwNkI1MTdGNAotOjEwNDRBMDAwMTVGMEY2NjM2QkI3OTZEMERGNEZERTY4QjBFMUJBQkZBOAotOjEwNDRCMDAwREM2OEEwRjFFN0MwQjk0RDA3RUIzREJFOTk5RjgzQjAyMgotOjEwNDRDMDAwOEVFN0U4MTM5QkY5Nzk2NzRFMzMzRkVGNTRDRjMzQjg0QgotOjEwNDREMDAwRjhGREQyNjBCQTJDMEFFODQ3REYyREVCRTFCQjIzNzM2RAotOjEwNDRFMDAwNUM3QzdGNzM0MDdGRTI3RTJGNDRCRkIxQUM5OUVFOUYyRQotOjEwNDRGMDAwNUQ2QTNFQTk5NjdFRkZBQTkxMTdERDc0REIxM0JEMDhBNQotOjEwNDUwMDAwQjgyMkZGMjNERDRBQkE5OEIzODZDN0Y1RURDRDgzMEJGOQotOjEwNDUxMDAwOTFGRTI0OUQ2OEJGMDM1ODZGNjRGQzNCQjJCQTI4RkEzMQotOjEwNDUyMDAwRUVGNzI0QjNDMzgwRkE2MjRBN0NFNzE4MDQ0RjVGMDdCMgotOjEwNDUzMDAwOTdBRjZBOTFDRTg1RjdFNDU4QkQyOUVDNzdDNERFMTVCNAotOjEwNDU0MDAwRjI3ODFBQkM0QkY3QkI3QURCRjhGN0NGQzQ3RDMxNTk1MAotOjEwNDU1MDAwODJCRTRBNDc3RDNFMjlEQUZFOEQwM0JBNzRBRUZGRjI3MQotOjEwNDU2MDAwM0EzREQwRjVBNDkxRjYzQkIyOUQ4MEQ3RjU1RkYzN0E0MgotOjEwNDU3MDAwOUU3RDdCMTZENDNGRUY3REY2M0EzREVDNkZEMjk1RjZFQgotOjEwNDU4MDAwMjEwNkE4MkY1OUYyQ0Q3NTYzRTBCOUM5RTEzQUQ4M0JBRAotOjEwNDU5MDAwNjA5RTEzOUI5MkQyNzE3RkQwN0UwOERCQTcyNzdBOEUxNAotOjEwNDVBMDAwNjA1OTJCRUU4RjlENTZCQTA2MkRDQ0Y0Rjc3RjdCQTc3MgotOjEwNDVCMDAwRTVFMDRCMEU3RkJERDNDMEU4QkIzQkE3N0JDQkY1ODdDNwotOjEwNDVDMDAwMkY5RDBFRDdBOURFMDlBMUVERTU4Q0RENDdGOTdDNUVCNAotOjEwNDVEMDAwN0U2RjA3N0VEQzExODk3OEFGOEFEMzVEQjlCQ0M3RDMwMwotOjEwNDVFMDAwQTBCOUM3RTNFNEY3RDVFNEZEMkE3OTdGRUE3MkZGRkRCRAotOjEwNDVGMDAwQjNCNTk3NzJGRkVDRkYwMDY5RjNCMjRGMDA4MDAwMDA4MwotOjEwNDYwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkU1N0Q5NwotOjEwNDYxMDAwMEI3NDU0NTU5NkU4Qjk1NUI3M0U0OTJBNDkyNTg0NTQzOAotOjEwNDYyMDAwMjVBOTg0QUE3QzJCOTBDMDI1N0MwQzMxNDhFNTAzMDQ4NQotOjEwNDYzMDAwODg1ODI4NkFENEEwMDVBMjgwODIxNDAxMUQ3NEY0NTVGQwotOjEwNDY0MDAwNjEzMDdDOUFFOThFOUYxNzIyNDYyRDEwOTU3MTc4REQ5NgotOjEwNDY1MDAwRDFCMTZEODY4RjUzMjAzMkZDOUEwRUI0NjNFQjhDRDNBQwotOjEwNDY2MDAwMUREMEQxNjg2MzFCMzEzOEY0MEMzNjZGRUY3RENFNEQxMQotOjEwNDY3MDAwRUE1NjJBODBCRUU3N0I2RkFEOTc1RUY2NjE5RjczRUVDOAotOjEwNDY4MDAwRjlFQ0IzRkY2N0RGNUI1RjE5MkNFQkE1NjRDNjI0MEY2MQotOjEwNDY5MDAwNjNBQjUzQTE3NDVBNTk2MzE5OTQ3QkZGRTlDRkQyNjg3NQotOjEwNDZBMDAwQzY5QTgzQUMzQjJFOEZDMTVGQTNGNUQzNTE1MENGN0MwQwotOjEwNDZCMDAwQkE0QjUwMkU0QjQ4MUFDREM2NjA5OTEzNjJEMDZGOTlGMQotOjEwNDZDMDAwODlCMUFFMTJFODI2M0I2RENDQzJEODEyMDlGRTlEMDExRAotOjEwNDZEMDAwRkZGOUNBMTk0QjY3NkM5NTE1RkVFRDQ0Qjg0Mjg3RjA5NwotOjEwNDZFMDAwODM2NjQ2N0Y5RjA1OTgzRkRGQzBEODFGNEY3NDI1MzlFQQotOjEwNDZGMDAwRjU4QzlEOUQxRDJFMENCQjE4RkI2NUJDQ0ZFNjlDMDA2OAotOjEwNDcwMDAwRUQxRENEOEVBNjM0QzZCRTdDQzNBNEQ0NDNGRjlFRDA3RgotOjEwNDcxMDAwREYyN0Y5NjBGQ0E1N0FFNkVGODQ5MjZEMUZDRUQ4MjRERQotOjEwNDcyMDAwMjgyRkVBQzM1M0EwREY2MTU3RjFCNjhERjBCQ0NCQTlBNwotOjEwNDczMDAwNjMwQzlFM0ZFQjBBRTdGQ0Y1NzhDNjgyMkU5M0YyMzJCQgotOjEwNDc0MDAwQTM3RTc3MzI4MEVCMUU5RjNFMUNGQjlEN0Q3RDVERkUzMAotOjEwNDc1MDAwM0RCMDZFOTNDQzU4MTJFQzdCMDY4QzU5MEU3ODMwMDAyRAotOjEwNDc2MDAwQUMyRkMzMDc0MjM0MEVCNDA3OTNBMEJFQzVGNTc0MEUzOAotOjEwNDc3MDAwMjM3QzMwMkY5QkM4RDgwRDhDRUZFQjA2MzlCQzFGRjE4MgotOjEwNDc4MDAwQzU5NDY0MTlGNzM3OUI2RjBGREI4MzMyOENBMzMzMzNFNwotOjEwNDc5MDAwMDNBRUJCOTg3NTU4M0Y0RDAwOThCMThFNEJDMzYwN0ZGOAotOjEwNDdBMDAwNjZDMDYzMzI5NjgwQzcyNEM2QTZFQUExMTNBQ0FGRTlGRgotOjEwNDdCMDAwOTdGQTkwMDlENkQ3ODQ3ODE0NzBEMDg1MjM3QTJDRDdBRAotOjEwNDdDMDAwQzNGODhCQzVCQ0NCOEVCQzZCQzRDMTU4MTBGRTA3RUJDNQotOjEwNDdEMDAwNTkyMkU2NUREQzcxNzczRDlFQ0I5MjkwRTE0Q0I3QzBFQgotOjEwNDdFMDAwRjUyNUZBN0YwRjlEQzc3MkQxRUZGRUYyQUQ0NjlDRTIzMAotOjEwNDdGMDAwRkUxRERBN0VDQkQ5QTZBRkY1RjBGQzUyRDY2REM0RkQxNgotOjEwNDgwMDAwMkVFQjhDNkFFRkE4RjkwQ0Q3QkI3Qzk3QjZCRURFOTk2RAotOjEwNDgxMDAwOTg4Njc0QzJDNkIyQjE5N0Y0NTQ0REU3QkQ0OEY0OTk3NgotOjEwNDgyMDAwQUE2Rjc0Q0FCODlGRTE2NkM1MDQxMzM3M0Q5RjQ3RjQ2OQotOjEwNDgzMDAwQzJERTBDQjBDODdFQUM2MzE4RDE0RjhCNEI0RkU3QjFEMgotOjEwNDg0MDAwNjQ5N0M0OUNFMzE4QkI3RTU3MTY3MzQyNTNGREFFNjE1OAotOjEwNDg1MDAwNTQyNjVEQzhBMEZBQ0Y1RjM5MzZERTU3MzI3MDVFRDc3NgotOjEwNDg2MDAwQkY2QUFCQzZGNTVERkY2QTExOTVFQTNBOUEwNDFENEUyMAotOjEwNDg3MDAwRDU5Nzc0ODY2MTFERTcyQ0IwMEU4MDlCOEVDMDYyODEzNwotOjEwNDg4MDAwN0U5QTZFRDY4NzE4RTE5OTk5QjFCRjU3MkNDNzZCNTk5QwotOjEwNDg5MDAwREZBNTRGNDI1ODBFOEFGRDRBOTcyNDNBODQ2NDNDMUY5NAotOjEwNDhBMDAwRUY2MTNENDM3QTYyMUUwM0I1M0I5OTc5Q0RBNTVDQTBDQgotOjEwNDhCMDAwMUJCQjhFMzk2M0UwREYyNENFMkZDRTE5Q0Y5Q0VFODE1NwotOjEwNDhDMDAwNzYzOTU4RkNCMzRBNTg4NzYxQUU0MTA5NDE3QjczNUMyNQotOjEwNDhEMDAwRDIzNkU0MzMxNkY0NzRFNUMzNzMwREUyQjlBRTM4NEU0NAotOjEwNDhFMDAwMzcwOUVFNTRDREYzMkExRERDMkFGQUFENEI5QTc2MTgxRgotOjEwNDhGMDAwRTlCMkMxQjM4OEU4MjE1MUM5RDRBQ0M3QTQ1RjZBNDAwQQotOjEwNDkwMDAwRkFCOUQ1NjdGOEE0M0I2MjFDQTI1RjU4QzcwRDVFMjlBRgotOjEwNDkxMDAwODRGQzc4NzM4M0I2REQ1MEY5NzVBRDQ0MjVENDQ3OEU5OQotOjEwNDkyMDAwRTdENUY2RkIyOUQyMDNEMDNCMTA3RTcxMjQzRDBDOUNDOQotOjEwNDkzMDAwODNDNUEzQzM3M0YwMjQxMkJEQ0JDQ0I5QjkxMkUwNUIxRAotOjEwNDk0MDAwMEUxQjE4RUVERjE0Q0ZGNzc5MEUzMTk3ODZGRDgwMEYxRQotOjEwNDk1MDAwNjBFMjc1ODgxN0E4NEYyRUQ3RTIzN0M1QTNDNUU3QjAyOAotOjEwNDk2MDAwM0EyRDdFODY3QkI1RkJCNzM1RTQ2QURBMzM3QzIzMzU5NgotOjEwNDk3MDAwRUQ1OThCQ0IzNDcwQjZCRjQyRDM3RkM0RUE2QTBERUNERAotOjEwNDk4MDAwMEFDRUQ0RjRDRjVCN0ZBMzA2MkU2OEJENUREM0JGQTg0QgotOjEwNDk5MDAwN0Q4MUE2QkQzODc0OUZBNjdERDQ4RTI2MEQ1Q0RBRjk4NAotOjEwNDlBMDAwODhBNkZGOTg1RDhGNkJEQUM3ODYzNzZBREFDNzFEN0VFNwotOjEwNDlCMDAwNEEwMzRGRThEQUEyRTk3RkNEMDdEQjM0RUQ5M0JBNUYxMwotOjEwNDlDMDAwRDNCNDVGREJGMzg2MDY5RURDQkI1QkQzN0ZDQTg1MDM3MwotOjEwNDlEMDAwMUFCODhBMUREM0Y0QUYzMUZGNTYwMzRGQjVGRUFCQTYwQwotOjEwNDlFMDAwRkY3NEZCQzc5QUY2MTlDRTNGNkFEQTY3QjlCRkQxRDIxNgotOjEwNDlGMDAwNkIzQzk3OTNENzJCRkZBNTc5RUU1OTkzRUZERjUwNUY3MAotOjEwNEEwMDAwMzQ0Qjk1REQ0MTg2RjRFQjI0M0VCQTM1NERBNzg0MDE0NQotOjEwNEExMDAwRkU4MzJBOTcwNDFEOUUxQzYxMjUzOUMxRjI1OThFQjc2OQotOjEwNEEyMDAwMTRFOUIwMzI4QzdDN0M2RTk3NDRGMkUwQUIyOEJEMjg1MAotOjEwNEEzMDAwRkZEMUVCOTFBMDlERkQ0QTUyNUU3NjIyREQ0MTVEQzQxRgotOjEwNEE0MDAwRkMyOTFFMzM5MzIzRDYzOUFDQ0VBQTgxODc3QkVEOUFGRAotOjEwNEE1MDAwRkVCNjA2QTdBNjNEQzNFN0Q2QjQ2NzJENTYzNDcwQjY5QQotOjEwNEE2MDAwQkY1Q0QzN0ZDNDZBOEYwNjc2MDVFQjM0RkRGM0Q2N0IzQgotOjEwNEE3MDAwMzU3MDQxNkI4M0E2N0Y1MUJCNEZEMzVFMUM1QUFDNjkyNgotOjEwNEE4MDAwMUZCNUMzQUY4MTRCM0I1NzZCRkE4RkQ5MTVENEI0OEY4OQotOjEwNEE5MDAwMERBRkQ3QjQ4RjNCRENBQTgxMjc3NEI1NkJGQTVGRjNGNwotOjEwNEFBMDAwNDE0OEQzM0VBOTdCODdBNkZEREE5RTRFMEQzQ0I5NzdERgotOjEwNEFCMDAwOTdBNkZGOTQwQjYxMEQ1Q0M1OEU2OEZBRDc5ODRGNkE3NAotOjEwNEFDMDAwRTBBOUQ2MEYzNUZEQTdEQjRGNkJEQTY3MzgzRkQ3QjRDNwotOjEwNEFEMDAwQUI3NkQwMkNGN0Q3REE3QTYxMTc1REFGRkM1OUYzN0M0RgotOjEwNEFFMDAwQjBEQUMzOTAzRTgyNkY0ODRBQjMxM0Q2RUIwMkUxM0Y3RgotOjEwNEFGMDAwOUNFNDdDNzc5QzFFRUQyODJGMTgxNDhDMDEyOUFENDE3NQotOjEwNEIwMDAwRkQ5MjBDNDIwQ0U5MEE0ODhDMzVBNkUyMjg0MEFDMjAwNAotOjEwNEIxMDAwQjc0OTU1QzFGM0M5Njg0RjAwOTBBQTczQjlGQ0EwMUZFQgotOjEwNEIyMDAwMTNEODVBRUJBNzY2QjIxQjFDOTc0MERGNURDMkJGMjlBMgotOjEwNEIzMDAwODM0Qjk0QTA5RkFBRUI4NUY5NjZBMTRFMDIzQTZGNzI0RgotOjEwNEI0MDAwRjkzQzJFNThDRjdEOURBRjRGQ0I2MjY4MjcwNDVCNzAzOAotOjEwNEI1MDAwMURBMDA3OTNCQjQxNkY5RTg4NjM3Nzc5NEIwNjhGMzcwMwotOjEwNEI2MDAwQzMwQzc4ODk5OEVGNDg1Q0FCQTNDQzMyRjRGQzMzQ0MwRgotOjEwNEI3MDAwNjdBOTdGRkZCODA2M0VBRTA0RkI2QjhBMThGRkE3QTBBQgotOjEwNEI4MDAwRUU2NUIwRkI1QTAzQzAzNzA1OEMzRDE1QjAxMkZDNENFNgotOjEwNEI5MDAwQzA0RTcwNUJDMDQ5NjU3QkMwNERFNTk2ODA0MkVEMURGRgotOjEwNEJBMDAwODE3MjgyNUYwODc4MDgwRTA1RUFBOERDMTZGMDUyRkREMwotOjEwNEJCMDAwRjY0MDAzQzFBRjA0N0M1NEVFMDgyQ0E2RjJCNTgwOUZFQQotOjEwNEJDMDAwREE3NzA2NTYxM0ZDRjM0MDkwQ0FDRUMwN0FBQTdGMjM0OAotOjEwNEJEMDAwRDA0QUYwOUI4MTc2ODJERjBBODRBOERDMTVEODQxRTVCMwotOjEwNEJFMDAwRUU0MDI3QjVFRjBERUMyMkY4RUQ0MDk4RTA3MEUwMzA5NAotOjEwNEJGMDAwQzEwNzAyNUQwNDFGMEM3QzQwRjBBMTQwMzc5NTg3MDM3QwotOjEwNEMwMDAwM0Q1NDFFMERGNDUyRkJGMUMwMDU4MjA3Q0U0QjZCNTc4RAotOjEwNEMxMDAwMzM2MTU3MkUxMjc0QzBEMkI4M0Q3OTJGM0Y1MkY2ODVCQQotOjEwNEMyMDAwOEUyRDQ2QkI3NzkxQTA0MzQzMzU5ODg3NDA3Nzg2Q0MzRAotOjEwNEMzMDAwQzI2RENEMkUzQzZBQTAxMzM3RDFDOTcxQjQyRkFGOTY4NwotOjEwNEM0MDAwNEVEMDcwNDA3QTBENTYzMzM3RDI5QjVBQjY1NEU5QzlDQwotOjEwNEM1MDAwRkUwQ0FFOTA0MjJGNzNCQjg4RUI2RjMzNTNGNTM3QjUyNAotOjEwNEM2MDAwMzczRTI4ODVEMDlFOUIwNzc2QjIxMUY4RTYyMzYxOUZEOAotOjEwNEM3MDAwN0MxNEM3RTVGNTM5QkZDMThENzY1RkEzMTRBRkMwNjY1QwotOjEwNEM4MDAwMDFGRTc3QjIzQkUwMkY4Q0E0N0ZENzVFRDM1NkI0OUY1MgotOjEwNEM5MDAwRDRGNTM1QzIzODNBMThFN0JGRUMyRTVBNTcyMzNCNkM4RgotOjEwNENBMDAwQzBGNTQwQkQ0NzBGRkM3MkM2RTZEQkUyMDJCQUJFMkY3QwotOjEwNENCMDAwNUIxNzM0MjIxMzU5NDI4NURFNDRDNjhDNzZERkYzNDhGNQotOjEwNENDMDAwRTdFN0ZDRjcxQ0MyQzExNzU5OTU0MjlDRTc3QTUzNzg3NQotOjEwNENEMDAwRjhBRDMwN0ZFRjExQkRCMkNEMzkzNDVFOTZCN0NFMDA1RQotOjEwNENFMDAwRTE3RDk5RjZCNzNGNzdBMDFENUZGNzE3QkQwRkNGRTFDNAotOjEwNENGMDAwODQyMUIxMjEwNDc0RERFOTkyODhDRjNBNUQzQTRERDkxRgotOjEwNEQwMDAwNjZGN0ZEMDJEN0Y5NkRBMkZGNEUxREEwRjJEQkVCNTY1MAotOjEwNEQxMDAwQkNCMjEyQjZENEI4QTIyMDE5RUQ1NUYwMEYwQzY4NUZFMgotOjEwNEQyMDAwQ0Y2MTRFMDNDQTg3OUI5OEU3NUQxQ0VBNjZFNjIzRjhDRAotOjEwNEQzMDAwNTYxNkE0NTJCNkY5NzZFMUJFNkU2MzIxODI3RDE1QTZBMQotOjEwNEQ0MDAwOUM1OEZCOEE1RUQ3M0IzOEQ4NzAyQzc1OUFGMjkwREQ2MAotOjEwNEQ1MDAwNzcwMEM3RkIzNkQxNDNFQjNBMzE2OTdBMjFFRTRCNURFMAotOjEwNEQ2MDAwOTczOUMzNDlGRDY2QjNERTE3NzA3RERGRUVGQkZBNTM1QQotOjEwNEQ3MDAwMjk2RjMwOURGQzg4RjQ2MTgxNjlCMDNGMzNDMjc5Mzc3NwotOjEwNEQ4MDAwMDNFRkUwMzhDRDBGNEIyMUE0NzM5NTNFMUFDMTRDQTcxOQotOjEwNEQ5MDAwRjExRjg1N0EyOTkyNUU4MDRFRDA3RjRCRUJDRDk5OTM5RgotOjEwNERBMDAwNDhGNEQyNERGMjZGOTIzRTY4MDQ3QkZBODQyRTU0Mjg2OAotOjEwNERCMDAwRTk4OTRFOEMxMkFDNzM1MTFBRDA0OUVFRDBGNEYwQzA5MAotOjEwNERDMDAwN0EyODIzRTQyMEQwRDkxNzM4REU5RkZFRTExQTM3RTI5MwotOjEwNEREMDAwNkRGOURCOTM5Qzg4Qjc2NjFEOUMwN0QwNzNGMEE4OUU4NQotOjEwNERFMDAwRUMwNDI2NDRCQkZFREFEMjEwRjkwN0IyQTJDQzI5QzVFNgotOjEwNERGMDAwNzNFMzcyNzFCRjlFQUQ3RTNEODZEQzREQzhFNUY0NzRGMQotOjEwNEUwMDAwQzI2RUE4MEJEMUI4OUNFRkQ1NzY3RDJFM0Y0NzdEMkU4NAotOjEwNEUxMDAwM0ZERkE2MTU5RjJERDVDM0ZBNEYxQ0Y4RENFODJDOEQ3QgotOjEwNEUyMDAwQjE4RkQ1M0Y3OTI4M0Y4MkFFOTdFRjNBM0RDRDgzN0U1MwotOjEwNEUzMDAwMTdFQjJFQjkzMTcxQTBCRTUwQ0NBQkQyOTFERTk4RTgwMQotOjEwNEU0MDAwREI2QTg5NUM1NzNGNURDN0U3MjI1REE3MDA1REU3MTExQwotOjEwNEU1MDAwNUQ3RjhBNzZGOTZDOTMzM0Y5NTYyOEJCMDEzNTYxMjg1QQotOjEwNEU2MDAwN0QyRjVBQzk3RjVDQzAxNDJBMTczMjJGOTU4QjgwMEM3NgotOjEwNEU3MDAwOTA4RUJEQzEyNzhEODhGN0ZCNTgyN0Q1M0Y1MDdFNzc5MAotOjEwNEU4MDAwM0FEMkY1QkQzQTFGRjlEOTRCNTkxN0Q1MkY2N0JEQjVBMQotOjEwNEU5MDAwNzhCNDM3QUY1RkYzQUUxRDU2N0Q1M0VCOTM1MzkxNDQxNwotOjEwNEVBMDAwNkYwQ0NEN0YxN0NCMzlEQkE1NEY4MzRFRTI5M0VDNUNDMwotOjEwNEVCMDAwQzA0N0I3RTQ3RjIyMTNFNkJGN0Q2N0Q1MTM1OTUwM0Y0MwotOjEwNEVDMDAwNUJDRkNGODUxREUzRTdBMkNBOTFFODdEMDM1RjE0RTBDNQotOjEwNEVEMDAwRjNERkE2Nzg2ODVGRkFBNDNBMEQ1RjM0M0VDRTNDMTI0OQotOjEwNEVFMDAwOENEM0JCQ0YxNERBRTY4QUUwOTNGMkZCRkY5MDg1RjIxNQotOjEwNEVGMDAwNENFRUJEMTNDRjdCRjlEQkE2NTQzQ0VGRkIxOEQ3RkI4MAotOjEwNEYwMDAwOTI0NzhEQUZBOEZBOUUxMUJEREZDRkUyMTVFQ0Y3ODU3MQotOjEwNEYxMDAwQTBFRjJGQjIxOUQxRjcxNzEyMzg4QTY1MDM3NjI4Q0I4NAotOjEwNEYyMDAwRjFEOUNCRjIwNkY0RjY3MkREQ0VEMTg4MjdEMEVCOTUxRAotOjEwNEYzMDAwNzgwRUY3N0REQ0Q5MzJENjg1RkEyMDk0ODM3Njg4RTEyNQotOjEwNEY0MDAwMzU5M0QyRUNEMkU4MTc3NjI5MDE4NThEOUYyMTNFN0ZEQgotOjEwNEY1MDAwOEFFMzhFMTlCQzJFQTlGQ0QwOUZEMUVFMzAxOTU5RDAwRQotOjEwNEY2MDAwNUM0NjdDQ0UyNjIyN0Y2NzFBODlCRjlBMTFCNTc5MzhCNAotOjEwNEY3MDAwOEZEN0U5QjcwQzFFRkY4NDU4RUZFMUVGQjgzRjFEODRDRgotOjEwNEY4MDAwRkRCQzJDQzU5QTg3RUIyRjUzRkNDMDNDMjQ0N0QyMTk5QgotOjEwNEY5MDAwQ0Q3MzQ3MkVFNzYzNzUzRTY2RTk3NkEwOUQ3RTM0QzFFQQotOjEwNEZBMDAwNzczQjlFOEYxQTQ3NTJGREM4QzNBRUNGRjJGMTdDNjZBNQotOjEwNEZCMDAwNTc2QzUwRTUzMzhEQzdBRUUzNzJFOTg0QzExOTQ0RjhFQwotOjEwNEZDMDAwNDQ5NTRCMDEwOUQ2MkY2RjZGMjhGRkE3MEY3MDFEMzcyRgotOjEwNEZEMDAwOTgyRDYxOEM3N0IwNEFDM0Q5N0VGRjM1Nzc0MDFGREZBQgotOjEwNEZFMDAwQTBFQUUzQ0FBOEY4OEUxQUY3NjE4QTAxRDc1N0NDM0UyNwotOjEwNEZGMDAwNTJGMTQxRjExRDU1NEUwRUQyQkZCMEIxMkVDNDlGODg2MwotOjEwNTAwMDAwOTdGNUM3NzlGRUI5M0ZDRUEzQzM3OThENDI4RTMyRTZCQwotOjEwNTAxMDAwNzc3QjIzRjhENEQ2MDBBRThCQzY3RjMwQjM3QzhERkY3MAotOjEwNTAyMDAwNjBENUMwRDk3RUJCQTZGRjg4RDU0RTREQkIyQkU4RDYzOAotOjEwNTAzMDAwQjRFN0FENTczNDcwNDE2QkI5QTY3RjUxQkI0NzAzMTczNgotOjEwNTA0MDAwODdFQTM0RkQ0N0VERjA2QUUwRDJDRTA2NERGRjMxQkI3MgotOjEwNTA1MDAwN0M5QUY2QjFFMUM1OUFGNjcxODdGRDFBNzg0MkQ3NkE1MwotOjEwNTA2MDAwNERGRjZCM0UwODZBREEyNzc1QUZEN0I0NUZEQkQzQUE3MgotOjEwNTA3MDAwODEyN0Y3QjY2QkZBNEZCOTEwRDJCNDU3QjFCRkQ1QjQ4OAotOjEwNTA4MDAwRDc5ODVGRDdDMDJGQzZGMTc4RTc1NEVCM0Y2ODlFOUI1NwotOjEwNTA5MDAwNkVERkFGODE1Rjg4RTdGMTlBMTlDRTIzREFFN0M1RjlCMQotOjEwNTBBMDAwMDY2RjhCMjc3RTk4RTUzRUE5NjlERkZGQzhDOENEOERDNgotOjEwNTBCMDAwQzAyRkExNDc3NEU0N0ZCNkQ1NzEzREM1MUFBQTM5MUQyQQotOjEwNTBDMDAwQzRGMUJFRDcyQjFGNkFFNkNCRDFGN0JBOTA4RTlEN0E3QQotOjEwNTBEMDAwNkIyNkYyNzU3RUY5OUMwMzQwNzZBQ0QwQjNBMjFBQzU1QwotOjEwNTBFMDAwOURCQkVFQzkwMzU4OEVGNEJFNUU4RDZDNTNEMjcwRjIzOAotOjEwNTBGMDAwMDA5NkEzN0Q1RjU3MDMxOTMzNjU3MUNBM0I1ODk2RjkzMwotOjEwNTEwMDAwQzdENkQ4NzA4OUFCRTdCQzgzRTVDNEUwOEExQTk0QjNFQwotOjEwNTExMDAwNjAyNjdFQjEwOEQ2N0QzRTM4OTI2RDg0NzUyNTY1QUFERAotOjEwNTEyMDAwNzE1RTBGRDFFREFBMEMxREYxRjlBQURCMkMxNDM3NEJERgotOjEwNTEzMDAwQkZENjIyQTMzRURGMUNFODFBNzkxMEVDRENGNEE3RDMxQgotOjEwNTE0MDAwRDc2MkRDNjkzREQ4RjlBMTIyQjAxN0MwRUVDN0YyNTk4OQotOjEwNTE1MDAwQjBFQjQzRTAxQzZEMDRCQjFGQ0I0RDYwRjc2M0ZENzNFOAotOjEwNTE2MDAwNjBGNzIzOUNGRTc0RDk3QTdDNkVENUM5N0JFQTcyNjFBNAotOjEwNTE3MDAwRkMxMTBGQ0E1NjM0NTNENzM5NzUyQjBFQzA3QUVDMEY3OQotOjEwNTE4MDAwMUFBRDI4NEI4Q0FFNjdFMjlDQjA4RUVDNjVCMDhFMEFFRgotOjEwNTE5MDAwNDI4QjA3NTFGREVDNTIzMDFDMzIzOTFDMDdGREVDMkJDMQotOjEwNTFBMDAwNzQxQUI4MURGRjQ1QjAyRTU4OEJDRjk3M0VFOURFQUU3RQotOjEwNTFCMDAwMzBGNkY5QjZCMzM3MTk4QTYxOUY3OTVEQjc2RDREMDE0NQotOjEwNTFDMDAwMzg5Nzc5RTYwMkJFRDNGMTJDNjBGQzkzNzk4RkNEMDkzNAotOjEwNTFEMDAwOTYwQzg2OTcxNDdBRkY0ODcyNDlFRTJDNDYzRUI1MTYxNwotOjEwNTFFMDAwN0Q5NDgxRUJEQTUwRkQ4NUEyQjNFMjNDOEZDQzM5MDg4NwotOjEwNTFGMDAwRUI3RTdFNzhCQzU4RTcyMzczQUFGMkFGNjY1Q0NGNzk2QQotOjEwNTIwMDAwOTRFRjUwRUZFRjhDMjE0N0ZFNTNFOEZGOTM3OTVDMkYyQQotOjEwNTIxMDAwQzM5RjE1RTU5MzhEOTMwOEIzODE5RDk0MENGMjc2RjNBQgotOjEwNTIyMDAwQTRENUE3RDFBNzkwQUQ0MTA5RTUyM0JCMDhDRjRGMTQ2MgotOjEwNTIzMDAwMjhDODIzNzg0QUZDNDQxRUIyNDc3OTUzNTRFNDMzRTcyNAotOjEwNTI0MDAwQzE3ODM2MUZEODRFOTFGMUIxQzU1QTc4MzM5Q0U3MTkxMQotOjEwNTI1MDAwQzNDMDdBMEM3N0U5ODIzMkVDQzFGMDkyNTc1MTYwOUU1QwotOjEwNTI2MDAwOEU3OUIwNUY4MDM3MUJCNUZFNjU5MThFOTE3RDcxOUYwMQotOjEwNTI3MDAwQkFFRThCMzcyOTY4QTdERDk3QzdGNUYwOTY4MEJCRUNBRgotOjEwNTI4MDAwMTMwM0ZBN0Y0QUQ5Mjc0MDQ3OTk4QkZEOTIwRkU0QUI2RAotOjEwNTI5MDAwQUREMUFCMDRBMTlGRTFEMkRGRUYzNzIyNjFERkM1M0E4OAotOjEwNTJBMDAwNTE5RjYzRkQ5QTA4QkIyNzQ3OEM2QkI4QTQyN0JDMTk5NAotOjEwNTJCMDAwOUFCRDRBNkFDNEZDMDZCREU0RUY4QzYxNzc5NUU2QzlFNQotOjEwNTJDMDAwRkNCOTY2NDZFRDg2NzcxRTk2OUMzMDVGNjY2MzQ4QkFFOQotOjEwNTJEMDAwODdDNkYxNEIwQUQ0REJDMkJDM0VBQkIxNTM1QTA4RjBDRgotOjEwNTJFMDAwMUQ3OTRFM0EwNzc1OUNBQ0M1QjBGRTA4M0NEOUU1QTBDNwotOjEwNTJGMDAwNjQ4NUU3RUQ4RjA2MjVDNDgzRERFQTU1NTgyMkUyREE5RQotOjEwNTMwMDAwNEJGQ0JENTJGMEI0N0RGNUM0QjI0Rjg2RTFCQUJEOEEwNAotOjEwNTMxMDAwMTdFNzlCQTVGMjlCREZDQTcwM0QxRjJCQkZBOTQyQkRCQgotOjEwNTMyMDAwRjYxQjNEQzNGQjhDNkY5QzRBNzI1QThDN0RBOEE1QTlDNQotOjEwNTMzMDAwNUJDRjNDOTdGMTY3OTI3MjFFRjE5MzlFQkNEREUyMkMyRAotOjEwNTM0MDAwMDBGRTdERjEzNjRCQzNENjE4NzQ3NjQ3MUVBN0IzNzVBMQotOjEwNTM1MDAwOTlBQURFRTJFQjQ5RDc3MzNDQTlGQUVBMUIyQkE3MUZGNwotOjEwNTM2MDAwNTU2RUFENENFMUIwM0FDRUNBRUNGMTI0Mzc4NjVBOEY3NwotOjEwNTM3MDAwQUQzRDhFRjkyMkQ2QkIxOUU2QjFFMkZEQ0M3NzJCQUM2MAotOjEwNTM4MDAwODgzN0YwMjFCQzM0OUZDQ0U1RTlENkU3RERFNDM3NDYyOQotOjEwNTM5MDAwRDNDRjIwM0UwMEQxOUI1Qzg2NzREOTFENkEwNkJBMzFGQQotOjEwNTNBMDAwQ0QzMzJBNjgyRkRBRkU1QjhCODQ3MjI0OTNCNTRBMjhBQQotOjEwNTNCMDAwNDc2REQ5QjU4NzY1RDRFN0IyQUZEODFCQzM4RUJFMTI4RgotOjEwNTNDMDAwM0ZBOEU3QTlEQTI1ODNDRkNGRjlCQjJBQjI0MzBEMEM1QQotOjEwNTNEMDAwRTlCNkM5RTVCNEUxRjlBOTc0REE3NDY0NzhBQTJGRTJGMAotOjEwNTNFMDAwM0NENzBCM0EyRTY3QUQ3QUU0RDMwQUQ2NDk2NTI1RUI1NAotOjEwNTNGMDAwQTJGMjNBRDY0QkE1ODc1OTY1MkNBQjk5NDI2NTJERjM5RAotOjEwNTQwMDAwNTIzOThERjlBOUFDNjNBRDU0Q0U2NDlENTRENkIzMkVGOAotOjEwNTQxMDAwMkFDMUJGQTNEMkNCQUNFNDg3REUwODc2MEM5NjczOTk4MQotOjEwNTQyMDAwOTdDQTVCOTg5RkNBMkQ0OERGMTNGMEZFQTE5NUUwREI3OQotOjEwNTQzMDAwNTkyNzk1QkI4MEZGOUQ0NTE4MUYzMTUzQjkxN0U0Mzk5MwotOjEwNTQ0MDAwOTY2RjgzM0NDNzMyMENGMkRDNjlDMkY4ODg5QkNBODMzMgotOjEwNTQ1MDAwMDE4NUNBNDM4MTcyMkEwRjA3M0NENEVGNjhBMDhFQ0EyNwotOjEwNTQ2MDAwRTMwMTJGOTUyNzAyMEQ1NDc2MDU3Q0Q0RUY1NDYwMzE2QgotOjEwNTQ3MDAwOTVFRjA1RkM1NEJFMUY1ODRERTUwNzgxMjA5NUZGMTI5RQotOjEwNTQ4MDAwNTg0RjY1OTExMUU0MEFFMkRCREQzRDE2RkQ5QTlDOEZEMQotOjEwNTQ5MDAwOEQxRTI3RThBMzRGRjM4NEZGRUJEMUZERjdFMkYxNzhFRgotOjEwNTRBMDAwOEUzQUJBODNCMUQ1QUU5NDkwMUU2RDZFOUQyNzA0RTVGOQotOjEwNTRCMDAwNDY3NzkzNzQzNzk0RUI0RTcwM0JENjY0NEIyNDNCRDlCQwotOjEwNTRDMDAwRDZCRTRBNzJDMkI4QkJBNDZFN0QwMjlDRURERUJDMEY5NAotOjEwNTREMDAwRTc5ODQxNEY1NEVENjU2QjEzMTQ4NDdGRkZBNDE5RThERQotOjEwNTRFMDAwNzBBQkMxREZCQjE1REE3RkY1RDJCRkNFMzE4M0NFQUU1NAotOjEwNTRGMDAwNDgzQ0Y1QzdENzM4NENFRDkzMEVCMjY2MkJDMDA3RjI4NwotOjEwNTUwMDAwNEUzRjk5MjZGMTc1QTAxMDNFRkVEMkM3NzNENkU0RTM1NAotOjEwNTUxMDAwM0FCOTFDNzlENTA1OEUzNkZBMTkwRjVCQzhDRjE4REI1RQotOjEwNTUyMDAwN0U2NkFDMEVFMDQ5QUIyRDY1RTgxRjQ3RjRBM0I4RjVFNQotOjEwNTUzMDAwNTBGREEyREJENUU3M0E1NkE0MzcyMzFFRDY3RDBBRUVFRQotOjEwNTU0MDAwODkxM0U1NjVGNzU4OENDRjQ1OEVBQkJCQkFGOTk5RkU0OAotOjEwNTU1MDAwMzJGMzQ3RjY5MzJFMzM1RTUxOTFFNzU0REVGRjAzNzQyNgotOjEwNTU2MDAwMUU0RERGODY0QjFGQkZBRUEzRjg5ODM1MTVGNUZBRjYzMgotOjEwNTU3MDAwMTQyRTc3N0FCM0UzNDNEQjYwREREQjUzMDVCQzIxOUY1OAotOjEwNTU4MDAwRjZCNTBFNjFEOEQ3QkE4REI5NjRDNzZGOEZGMzM2MURFMwotOjEwNTU5MDAwQzFGNkJGRDEyOURCQTA2OTdCQkM2RjYzMzFDMUY5MTRBRgotOjEwNTVBMDAwQUY1OTk3RUE3N0EzNUVDQTQ5RTBGQUIxQ0RGMTQ4OUNCQQotOjEwNTVCMDAwMzM4MkZGRkYyMkU0RUVFNkNBQkVBRUFERTg0RkFERDdDMAotOjEwNTVDMDAwQjEwMjc4NkVEQkZBMDUxQkRDMzBDRTRCOUJDMDJFMDI5RAotOjEwNTVEMDAwMzg3OUYyQzIwRDA1RDA5RUJCNDEzNzUxMkY2NDFFQUUwMwotOjEwNTVFMDAwRTNBNTREMEI1RkQ5MjhFMUI4MjM1MzBCNjFEQzNDMjFDNwotOjEwNTVGMDAwM0Y3Mzg2NzU4RjVEMDk3NERFNjZENEM2MTVGQUY1NjM1MAotOjEwNTYwMDAwM0VFNzk3ODUzMENDMTlEMEJGMzkyMjVFQjFENUMwMUE5QwotOjEwNTYxMDAwMjJGNTY2NDEzRTk3QjczNTQ1QkMzNDRDRTFGMTNDRDNBOQotOjEwNTYyMDAwODhGOEQwRTNCMEZGQUExMTNDRkU5M0JFRDY0Q0YxOUZBMAotOjEwNTYzMDAwNzRDNzdGOUU5QzBFRURFOTFEM0EwNTRENUFEOUI2NzQ4QwotOjEwNTY0MDAwOEQwMUZEOUVEQjU4MjdGMkUzNTY4OTNGMUZDQ0U2NzY5RAotOjEwNTY1MDAwMzIxODJDQjk3MzIyRkMxRUIwMzdDQUYyMjNFMkE3RjYyNwotOjEwNTY2MDAwODZBMDg0NzE4Q0FBMTE0QjI1OEMzN0E3M0JFRTkzMzAxMgotOjEwNTY3MDAwRkU5MURFRTA5MzdDODlFODI3RjlBOUZEQUUyMjlGMkJGRAotOjEwNTY4MDAwMUZENjY3NkY4NEU3MzVGN0IxQkUwQzNDNTc5OEI3ODFEQQotOjEwNTY5MDAwRjIwOTY0NTYxNjM5REZFQzIyOEU4NzI3NjQyMDNEQjQ2OAotOjEwNTZBMDAwREZENzFBNjk1REQxRjg5QUU1QUUxRTk5M0Y3Q0UwMUMwMAotOjEwNTZCMDAwQTNEQkJGQ0NFN0U3QjhGRDcxOTgwMkY5NjAxMjhGMUYzQQotOjEwNTZDMDAwOUM3ODM5OTNFQ0U1RDk2REYxMUVGNDIzNEYzQzM5QjI0NwotOjEwNTZEMDAwOTZFMEE3MkEzQzY4RkY5RTc4Qjk2MjFBOTZCMzlGOUExMwotOjEwNTZFMDAwNDlGRDRFNDhFQzMwQzYwNTY2M0Y3NUJCOENGNTM5NzlFRgotOjEwNTZGMDAwQjAyRTFDRUZCNDkxRTg3MUY2NTNGNzg5RTcxRkE5QzVFNgotOjEwNTcwMDAwRjY3MjVERjBFRkQwOUYyRTZGN0UyRDAxRTMwNTE1ODlCNwotOjEwNTcxMDAwNkY2NDYxNzk0MkQ3QkQ2QTNGQ0M3RjgzOTVGRDFBRDUwRQotOjEwNTcyMDAwQjU3NzQzREFERkQ0QzEzRkU2M0M5OTZCQzA3ODhDMzc1QwotOjEwNTczMDAwM0Y5N0NFRjMyNkU2MzFGMDdDMDcyRkY5Qjc5NTNCQkFCOQotOjEwNTc0MDAwREUwMThCOEU1REQ3RDk1QjgzRDdCQTlFNURENjgzNTgzOQotOjEwNTc1MDAwNTY4NzE1MzRBMzU5RUQ2MUVGNDEyQ0E3NzVGOTZCRDEyQwotOjEwNTc2MDAwQkNBOUZCQTBGNTIwOTZERDIzN0Q1RUM0RkZBQkZGRUQ1OQotOjEwNTc3MDAwOTYzNzVFMDU3OEM0NjNBQkFDNjg4N0U2M0ZERTNENjM3MQotOjEwNTc4MDAwMUJDNTJGMEQwQ0Y5QTE2MDkyQkY1NThGMDQ2Q0Y2QTZCNgotOjEwNTc5MDAwQTI3Qzc4RjYxOTU5ODdGQURERTQ2QThENDNEODc0NEZGNAotOjEwNTdBMDAwQUUwRUUzNENEQjUzNUExN0QzQkUwQkUyMTlFMkYxMjhERAotOjEwNTdCMDAwRTgyMUE0OEI4MjE0NkYyQUYyMTNGMDI1OURDMzlEODJFOQotOjEwNTdDMDAwM0U0RDI5N0U2QjBBRDY4QjdCOEVGRTdFRjExQzVFRDgwOQotOjEwNTdEMDAwREZBRjM1NEVBMjc5NTJBNUEwQzRDRDA4QjQyM0VDNDI2OAotOjEwNTdFMDAwOUZCNzMzN0YwNkUyQzM5NkU4REY4QUYxQUQ4MjJBQ0UwNwotOjEwNTdGMDAwRkYyQzkxRDMwNTc2NkY5OTQ4OEY1MDEwM0VCREQ1M0Y1MQotOjEwNTgwMDAwMEJDRkMxRTZFQkNGMUJFMDc0MDc2QUIwREYzRUM5MjVDMgotOjEwNTgxMDAwOThFRTdGMzY0QjFDMDYzOTQzRUJDMjNGOENFN0E0NUIwNgotOjEwNTgyMDAwRDJDOUNFNTFENzZGNkI4MEYxMjJFQzBFRENDNzhEOTZCQQotOjEwNTgzMDAwODFFNzU0QkFEQjIwRjZGNTg0MjgwQkU2RjNGMUQ0RjVDMgotOjEwNTg0MDAwNkVDQ0U3N0ExREQ2RURENEUxN0FGNDYyM0RCMDBGNURGRgotOjEwNTg1MDAwQzQ3QTIyRkFEMUZFRkFEN0NEMTQzQkQyMDU2MzdFODlGMQotOjEwNTg2MDAwOTdDQzI5NDdFRTdGQTFDRTEzMzcxQUQ3RkZENjVGNjFCOQotOjEwNTg3MDAwNUMyOTA5RTUwOEFDRjM2N0ZCMjc5OTkxNEZBM0Y3RjE4MQotOjEwNTg4MDAwNDJCRTg4RkI4MEJEOENGRUMzNEMxRkU3REZFNjQ2QkZFRgotOjEwNTg5MDAwODRGRTk0MEQ2MURDQkY0M0Y2NjA1Q0Q0NjY2OTkyMENCMwotOjEwNThBMDAwMTFGQkI1MzlCODlFOUVEOUU4REY4RjcyNjU2Njc5ODJBMwotOjEwNThCMDAwODJGNDNEOEI3NUFFQjU3MkZFM0U5ODBGRUIyQjYyRkQwOAotOjEwNThDMDAwN0YxNjM2NzFDMDRFN0NGRTk5Rjc0RUUyOTEzQTU4NjdDQQotOjEwNThEMDAwNTUzMUVBQ0ZDN0VFQTVCQzg5Q0Q4RkNDM0M4Q0VCQ0Y0MAotOjEwNThFMDAwNzQzRkI5M0YxNTA2RjQ3RTJEQ0U3RDNFOEY2RjY1NzdGMAotOjEwNThGMDAwQzg5QUJDODcyQ0JGQUNDOThCQzg1OEFDNkQwNzdBRDA4RQotOjEwNTkwMDAwQzAyQTVERDlBNUQ1MjlBODZGNzQwOTI1MzM2N0EwOUQ0NAotOjEwNTkxMDAwOTJBNDIzRjkwRTcyNEE5QTFCRDMxRThEQTIyQjgxN0Y2QgotOjEwNTkyMDAwRjU3Q0RFQ0RDRkE3NzNCMzU5RjgzOUIwNUVDNTdDNzM3MwotOjEwNTkzMDAwQTJEOEFDN0E0RTMwNkYzM0IwNzkzMkQwN0Q3M0FEM0VBMQotOjEwNTk0MDAwMjRBMTFGOEZGREYxMzJCMjk3MERGNzI2MEUzRUE3QURCMQotOjEwNTk1MDAwMDZFN0NDMTkyOEE3MUZENDU5MjlBRjJBMEFBRkEwNjc5OAotOjEwNTk2MDAwRkU5OUZDOTQwN0QzQTgxREVBNjUzM0M1M0QyM0Q2QUI0OQotOjEwNTk3MDAwOEYwNTZCQ0ZFMzRBRkQzQjU4NzhDRTBDRDdFMEZBNEM0RAotOjEwNTk4MDAwQzdEQzk5QTg2NzMzOTczMjNBRkZFOEY2QTI0N0I1RTczNAotOjEwNTk5MDAwNEE3RUVGNzg4Q0EzQjE1MEY4MDc5Q0U3NENDN0Y2NUFDMwotOjEwNTlBMDAwQjRFRkEzQ0Y1NUE1QkI5QzYxQjFGNUMyMjMwNTVDMkYxNQotOjEwNTlCMDAwRTQyNDI4QTdFQUM4QUU5MEM5NEVGMDY2Q0JDMzIzRkQwNQotOjEwNTlDMDAwQTRFRkYyQjkxRjMwRTU1NzE2RDI0M0VDNjM3MzA4MUZGQQotOjEwNTlEMDAwNTVDMjVEM0YyOTg2NzNBOEVFRDNBMUZCQzJERTNEN0U5MgotOjEwNTlFMDAwRTBFOTk5NTA0RUZERjU3QjREQzdBMERGRDRFRjJDRTNFNQotOjEwNTlGMDAwQjA3RTM3RUI5RTgxODFBMEUwNjEwM0Y5OEQ2QkJFN0NBOAotOjEwNUEwMDAwQTUxNTAzNDRDRDhENEM0MUJEQUJDRUUzMjhFMEZBNkUyNQotOjEwNUExMDAwOEYyMUU0MjVGOTVBMkNCMzZEMjQwN0Q5QzU0QjExRjQxNQotOjEwNUEyMDAwMDI5MDlFRTg4N0I3MzE2RjYzMkJGOTkxQjZGQzEyODYxRQotOjEwNUEzMDAwNzkzQ0NEQUNGMzBFRDI5NzY3OEQwQ0UzQUYzNzM2Mzg5NwotOjEwNUE0MDAwMEQ1NUIwRkYxQjFCOUQ4NkY5Nzg5RjIxQjMzQUI0MjNGNwotOjEwNUE1MDAwNkU2QTUwQThGRUE2NDY4NUQ3OUI3OUZEREMwNjBGRDU1OQotOjEwNUE2MDAwQ0Y2REY0RjA3QTBCRDQ1QjMwMEYyOUQ0MTU4MDcxNkZCMQotOjEwNUE3MDAwQjZBNDNBNzU3ODFGRDBFOEU1RUQxNzRDRDQ3RTFDRkMyRgotOjEwNUE4MDAwMDFDQzI3OEM4RjBCOTFCQzZGRUREMUYxN0IyMzdGN0NGOAotOjEwNUE5MDAwNDg4MkI1OUExMkNCMEUzQjExN0ZGN0U4MTQ1MDE3Q0MxMQotOjEwNUFBMDAwOTQyRDMzMkJDMENGMzY3ODQzN0E2ODdGOEU4NTMyMTBBMQotOjEwNUFCMDAwOTFCQjE3MzY3OTBCQTE3RUI3NDNCNkUyRkU3NjgzN0JBNgotOjEwNUFDMDAwOEJGOTQ3QzFBNTMyRTE5REZFMDBERUJERDg0MUY3M0ExMgotOjEwNUFEMDAwNUI0NUZDM0VCOEM0NENGMTY2QjA3NTI4REVDQzk2NjREQwotOjEwNUFFMDAwMEEzQjg2Qjc3NzJDQjA4NkQwMUUwMzM5NDhFN0Q4N0JBRgotOjEwNUFGMDAwOEY0Qzc2MDBDOEMzQTM2RUI0OEI3NkU2MkIxODlGQ0E3MgotOjEwNUIwMDAwNUNBQUU1QjdGNDg1MEJBQTY4QkM0NjY2NDUzRkJEQkVGNgotOjEwNUIxMDAwOTE4RkQ3QkM1MzE3RDJBMTVENjVCOTcxMjZEMjQxRjNERAotOjEwNUIyMDAwMEVBNkEwM0ZGQkVDQzI1M0I1QzMxMEVFNTAxNDJFM0Y5RgotOjEwNUIzMDAwQjQ3MkExNzlFMTUzNDc5Q0I4MUZCRkNFNUE0MEZENzk5QQotOjEwNUI0MDAwMUNBRkQ5NUZCRDVEMkYwREYwMzM5REI3NzM0MDdFMEM0OAotOjEwNUI1MDAwOTYzN0NBNjExQzI3NjM1RUI1ODJGMUMxNzREODI3QzYyNwotOjEwNUI2MDAwRjMzQjhDQkMzRTc4QTc0Q0Y3MkRFOTBCRTVCMDc1RjQwMAotOjEwNUI3MDAwMDA3RjY3MEIxNEE2MjMxRjI2OTE3Q0QxRjBEN0M4OUQwOAotOjEwNUI4MDAwNUFGODc5QzFBN0MwRUYzMkVFMkJCODlENTEzRTY3RDFDQwotOjEwNUI5MDAwNzY2RDNGOTA5MzNBOTQ1N0Q5RUREQUZBNUI4QkZBRTMzRQotOjEwNUJBMDAwMDIxQTNDNDRFM0Q5RTZFNzcyMkY3QTlGMDNGQjBBQzc0NwotOjEwNUJCMDAwMTVEMUJFNzQ3QzVGMjhEN0EwQkVEODcyODBFQThCMUIzQgotOjEwNUJDMDAwNjVDNUU5NDQ3OUQ3NzkwQUY3NUZCNDUzNjY2MTgwRUIxQwotOjEwNUJEMDAwMTc5NkNENDQ3QUFBREZBNEEzRjBDOEY1QUM4QkU0QzIzMwotOjEwNUJFMDAwOTVGNkFEQzYzQkEyRjcxOUJEQkZFRkYyRjU1QzhFQThFNgotOjEwNUJGMDAwRjZFMDEzNjZCMjA3REIxRUI2RThGMDlFMTVFQ0FENzg1MgotOjEwNUMwMDAwOEMyQkRDNTU1NDFEMkM0MDdCNDBDODFEQzMyNTNEOTc3MwotOjEwNUMxMDAwMjdDRDE2QTI1MzgzRUQ1MTc3NjRGQ0ExNjU1NEY1MTM4QgotOjEwNUMyMDAwMDVENDZGRDg4RDc1M0M2RTQxRkI4RTk2NjMzRjE3RTNBQwotOjEwNUMzMDAwNERFQUQ2RTZFMzVEREIxMzFGOTUzRkE2Q0RDNzlCNzIwOQotOjEwNUM0MDAwMjEzMzJBN0YyQzJGMkE3RjZDOTRBNjdEQUE3NTVDNTQ2MQotOjEwNUM1MDAwRkVEOEI1NTFGOTYzMzUxQTc4OTY3Qjk2QTZGRkY1Q0EzQQotOjEwNUM2MDAwNEQxQUY4ODZGMjNCMzRGREU3NzhFRUQ2QjRERjU0Nzc3MAotOjEwNUM3MDAwQkZBNkZENjZFRjRBMEQ3QzZCQzM1RjZCRkFERkU2NkI3OAotOjEwNUM4MDAwRDZCNERGQjFGODI3OUFGNjY4RkY0OTJENzcxNTcwRjk3OQotOjEwNUM5MDAwQkVEOUVFM0Y0OTAxNkNEMEY3OTFGNzNENkE5OURFMjhGNQotOjEwNUNBMDAwRjc0NjlFN0I1MjAyQjdBN0EyRkJGREI5ODBEM0ZCOEJDMAotOjEwNUNCMDAwMTI5RjhGMDVFRDlBNzgxQ0YzRDgzNUYxQkE3MDQ1ODU5RgotOjEwNUNDMDAwQjkxQkM2NzExQTk1REYyMURENjJFMjBFQkZCRkI2NkI0QwotOjEwNUNEMDAwRUVEOUY2M0YwRUZENjBCQ0E2QzQ1QzFCRUEzQjhDRkYxMAotOjEwNUNFMDAwRkE0MEI5Mzc4Nzc0NzQ1RjYxNUJCRjRBMjIzREI4Njk3NwotOjEwNUNGMDAwMTU4RkFCNUMzMDUyM0NBRjdGMURBQzhFQzZGQjQ2RENEMwotOjEwNUQwMDAwNkJBOUVCRUMxMDcxQTQyRDE4NDc0Mjg1RTQ5OTQxRkQ3NQotOjEwNUQxMDAwNTZDNkYxN0UzRjRENTdFMzhFM0UxQTM3QTNEQzE4QTREQQotOjEwNUQyMDAwRkNCQzg1N0UwOUUzQzBDRDNFNjZDNTdCOTM3NENCMDI4NwotOjEwNUQzMDAwOUFGRjlCMDYyNTk5NUQyNjJFREExNkIwMzMwRkNDNjdBNQotOjEwNUQ0MDAwNUYxNTVDNjM4NEJEN0Q1MkQwRjdENEIzRjBCQ0REQ0Y2QQotOjEwNUQ1MDAwMjgxRUQzNUJGMEVENTMxODhGRTk0M0UxMDg3NDlEMjFCMQotOjEwNUQ2MDAwNzMzQzNGRjdDMEVFQ0Y1RjgxRjlEQUU2QTU5N0ExNUNGRgotOjEwNUQ3MDAwOEQ2RUNGNUFCRUY3RUI0Mzk3Njk3RjZFRDk1QjFGREVGRQotOjEwNUQ4MDAwN0JCOUU3MUZEODc1QkEyNUEyN0RDODM4Njk0MzI2RjNDOQotOjEwNUQ5MDAwNDREMDAxRTAyQ0U2RkQ4MDVDQzhGNUY5RjIwQTIzQzU4OQotOjEwNURBMDAwQjFBRTAxRkMxNTAyQkVCRkFBRjhDRjg5M0JFMEI5M0ZGNgotOjEwNURCMDAwMzlGQkVFNDQzQjFERUE2NUFDODc3RTg0RDczRkU1OUYwNwotOjEwNURDMDAwQTNGQzkyOUM1MTYwREZBM0ZEMUQxNzlCNkVDNzE1NzI0QgotOjEwNUREMDAwQkE5NTZEOERCRDE4MDc2QTRBMzQzQUQxQ0ZDRjMyQkIyMAotOjEwNURFMDAwQ0EzRTE5MDc3NDZERTA3RTc1QjRGRkZFNUNCRkJGREQ2RgotOjEwNURGMDAwNDlGRTc3OTExODI3NEI5NDdBMkI3RjlFOTk4MzRDNEVCRQotOjEwNUUwMDAwMTdGNzE0MzFGMEExNEY2QTk3NTA1RTY1MkU5NDNGOERCRAotOjEwNUUxMDAwRTQ4QkZEODk0NjhBMjNBNDVCNDREQ0MxQjI1ODEzMTc4NgotOjEwNUUyMDAwNTBFMzA2RkIxM0VGOTU5MEVFRDNDMzRCMjg5RThGRjEwMgotOjEwNUUzMDAwMDIxQzZGNUNBMTkzRDYxMTFEMkZDODMyRTdEM0JBODYxRQotOjEwNUU0MDAwMUU5RkY1RDcyNzQ4MzFFNjg5NUE4NzFBOUY4ODlFMjdEMwotOjEwNUU1MDAwODRGNjA0RUE5OTY1RjE2NDRGNDRFRjdCNDk2MTU1NzkxMgotOjEwNUU2MDAwRTE3MEU0RDdERTkzRDM1MTdFOUYzMjkwM0UxQzhBNUU3MAotOjEwNUU3MDAwMzBDRjNDMTQzMUZFQjQ0MkVFREY2M0ZFNzg2NDNERTY4MQotOjEwNUU4MDAwODc4NzIyRTNEOUNDNDFFRjJCMTAwQzJBNjY4NEIxN0JBMwotOjEwNUU5MDAwNDMxMUNFNzc5NENGNzdDMkEwRDhDOTFFMDRCNTg3RkUzMAotOjEwNUVBMDAwNUY3RDIxRDcwM0QzMzA5NzZEMzhGMjE5RjdDQkRCODFCMwotOjEwNUVCMDAwQUZCMURDMTJCMDkyN0RENjAxRkM4N0YwMEIwMTI3OTVDMwotOjEwNUVDMDAwQTE4MDlCQ0E2RDAxODVEQUI3MDdDQTA5N0UyNUUwMjE0QQotOjEwNUVEMDAwNzg0N0EwOEVDQUQ3MDI1RUFBREYxOTY4MjBGOEU3MDFDQQotOjEwNUVFMDAwMUY5NTlEODFDNTU0RkY0NkMwNEZGMDlCODFENTA0QkZDRgotOjEwNUVGMDAwODVGNjYwMDFDNkE5RDc1M0I5M0JEMDRBRUQ3QjAzRURDNwotOjEwNUYwMDAwMDRCRjFEMDg1MTE5MEVFQ0EwRkEwMzgxNEU4MjBGMDY0MgotOjEwNUYxMDAwNzYxMTdDMjgxMDI2Rjg3MEUwMzA5NTQ3MDM1RDU0N0Y5OQotOjEwNUYyMDAwM0NGMDAxQzEzN0UzM0VDOUFFNThERjE1QzA3ODg1NEY1QwotOjEwNUYzMDAwNzZBMjdERjdBQzZGQTExNUVENkJGQjdDOUQxNUM1Nzk0NQotOjEwNUY0MDAwQkI0RkI3MDRFMzFDMUQ4REZDMUUxM0VGMjMzMTBFMDQ2MQotOjEwNUY1MDAwNzY2ODA4RUQzOUZCRkM2NzhFNENBNUY2QjlENEJFMTlGRQotOjEwNUY2MDAwODcwNEE3QzRCNjgyREJBRjZDOTk5MUZBRDkzMDIxMEFCNQotOjEwNUY3MDAwOUVFQjU4REExOEQyMDNEQzVBMTg0RkVEQjYxNTMyRjlGOQotOjEwNUY4MDAwNkRDRkU5RkMyOTg1RENFRTIyRjk2RDMzNzBGQjQxQTU2QwotOjEwNUY5MDAwODMzNTg1NUNERUFFMjlFNEY3NUMxRjE2RjE3MzRBQ0FDRgotOjEwNUZBMDAwOEJBRDQ3OUUyRDU0RURBNkY1ODc3MTdGRjY3OUIwM0ZGNgotOjEwNUZCMDAwNUNFRkJDNTU2NkJDOTdCNUREQTNCMzcyN0I5M0RGQ0JCQQotOjEwNUZDMDAwM0E2MEJGQjg3RTU4MEZDNTg1RDk3QzZFMkZEQkU2QUQzMQotOjEwNUZEMDAwQTU3NTM5RTZERjQ4RURENkEyNDc1M0QwNEY2RkY3QUYyRQotOjEwNUZFMDAwOUE0M0VCNkQ5NDI5QUVEOUVFM0I5MDgyRjc2Q0NGODk0MgotOjEwNUZGMDAwN0MyN0RCRjA3ODZGQTg2NEYwN0E5RThENUE3RjA3RTNFOAotOjEwNjAwMDAwN0U4MzAzRUNBNUQ3NjNFQzAzRDM2RTQ5Q0YzMDExQzc3MQotOjEwNjAxMDAwN0JENDFDMzM4RUQ3MjlFOEQ3MjE3MUZFNjMwRkNBQzQwNQotOjEwNjAyMDAwN0YyRjMwQjBGQkUwQjkyRDYwREYwNTUxMEU1NEJGQjZCNQotOjEwNjAzMDAwMDJFMzU1QkQ4NUJFOUQyODM3OUY3NzhFM0YyMDAzOUM4OAotOjEwNjA0MDAwNUFDN0M3Q0Y1RDI1QkY4Mjc2MzQ5Q0Y3RTcyRDUwQkY3NgotOjEwNjA1MDAwRTFCRTRENUU1Q0VBQjA0RENFMzVDODZFRURGM0RGQ0FGMQotOjEwNjA2MDAwQzBGODk3NDNEMjlFOEY1QUJFMkRGNkY5ODI4NzhGQjcxQwotOjEwNjA3MDAwNjU5NTRDRjE2NERCOEEzNzVEMDdGOUJDQkI5MUZGMzM1MgotOjEwNjA4MDAwOEIzRThBQzMzMDRDREU1Q0E3MEU0NTg2NjM5RUZDMzU5MgotOjEwNjA5MDAwQ0UxNzc3RkZBNjNBNDJDRDI2OEYzQURGNTg5Q0VGNkE5QgotOjEwNjBBMDAwRjEzNEUyQjE1QTlCMkZDNkJBODY5MjI3NTc5MjIzQkY4QQotOjEwNjBCMDAwMjkxNEVGODE2NEIxMkM5NDIzQ0YxOUI4REMwQTlFRTQzMwotOjEwNjBDMDAwRjYyNDI1MDU0RDFBM0M4RjlBMkZBMEU2MEY0NEU3MEJDNgotOjEwNjBEMDAwRkM1RUUwMjlDQkM0NjJERUU3N0VENjRGQkY0MTNBRDdGMwotOjEwNjBFMDAwMTczQzFCQkQ5NDY3RTM5MjMxNDk4NzM1MTlEODEyN0E2MgotOjEwNjBGMDAwRUZBNzJBREVCQTI2MDYzREE4RTU1MzI4QzcwMEMxMUYzMAotOjEwNjEwMDAwMTYzMjcxMkU5QkVBRjgzODNBM0VDRTY0QjY4MkUwMkEwNwotOjEwNjExMDAwOEIzNTE4NDM1RUFCRTUzMzYyOUM3RjJCRTQ3NDlCNzUzMwotOjEwNjEyMDAwREZDRTBEODdGMDdDOEYxQTI4Mzc2QThCMkVCNDAxRkRFNQotOjEwNjEzMDAwODRFMDA5M0RDOUQ3NEM3REU3RDY1NzIyRDZGNTE3NDFGMwotOjEwNjE0MDAwOUY1QjhDQTE2MkJDODc2RTg3RjE0QTUwQUUyMkJGOTRFMAotOjEwNjE1MDAwNTBGQzgyRDU0N0UwNUQ3REVFM0Y4NDFERjBGQ0M1NzVBNwotOjEwNjE2MDAwMjk3NEZGM0M2RjZEMUNEQTQ3RURDQzRDRjQ2MDMzRjhCQQotOjEwNjE3MDAwNTNDNjQ2RDA4MzBERTkzMjA2N0QzODhCOEMzNDBFRkMzNQotOjEwNjE4MDAwNTlBQTI2RTJCRDBDRDdDQjM1Mjg5NzYwRERGQjE2MjYzMQotOjEwNjE5MDAwOTEzRUFDOTlGRkRFQUMzMTAwNTdGNkM5OTRDRkIyNjVBMQotOjEwNjFBMDAwMjlDRkQzOUNGNEVGM0FDQTEzNzlGQjMxRUVGNzVERjdCMAotOjEwNjFCMDAwNTAyREJEOUY5NDIxQ0E2N0QxQ0Y4M0IyNzIzRDUzQzI4NwotOjEwNjFDMDAwNzAyRTk1MEIyRDE0QkY5OTdDNDEzRTEzRTlBNzUxNDhDMQotOjEwNjFEMDAwN0EzQ0ZBMTczQzVFNzM2REFGQUM3OTBGNkQ1MjhGQjY5NwotOjEwNjFFMDAwM0Y2MDU0OEY3NjQ2NDZCN0I2REUzRUVGQ0REMzUzNjE1RgotOjEwNjFGMDAwOUVGNkE1RkNFMUY2OEJCRjNCODI3MDcwOTU4RUUyMjQ4MwotOjEwNjIwMDAwRUFGQjY0NTA5MzQxRjE0RDM5OTg4MUY5OUIxQkNDOEM4QQotOjEwNjIxMDAwRTRCOTZEQkVEOThBRjI2MDdGN0EzQ0M5QkZGNkRCMkM0NwotOjEwNjIyMDAwNjQ4N0FFQ0I2RjhBNDMzQkQ5MzQ2RjU1MEE5NjIzOEM3MwotOjEwNjIzMDAwQzFBRDE4M0JCREU2RDUyRDM3RDkyNzkxQkM1NUYzNTVENwotOjEwNjI0MDAwODJBQzFDRUM4MUJCOEREQ0M4MDkzRUY3RjQ1NDE5RTUyNwotOjEwNjI1MDAwMjVDRjY3OTlGNEVBOTZBNzgzRjlEOEFEOTVENkUxRDQwRQotOjEwNjI2MDAwQjE0Q0JFRjk3RUY4NzZCQUI3OTZCOEJFNzAxQUExMURDOQotOjEwNjI3MDAwRTA3OUEzN0NENzE1NDE3QjQ2NUE3MDNGMzY2REI2OUNCQQotOjEwNjI4MDAwNjlBNDdDNkI0QzMyODJGOTBEMEJGRENDODhGNThENjVEMQotOjEwNjI5MDAwRTY0ODNFNTdGOUU0RkJGMjdGM0NDNjg3ODc1RjU5MEUxQwotOjEwNjJBMDAwNUM2OURDMkJGMTdCNDEzRUU3OUJBMUZDNjlEMzEwRjJEQQotOjEwNjJCMDAwNTRGNThGMUYyOUUwRkM4QjZDNEI3QUY1OEMzMUE2N0Q1MQotOjEwNjJDMDAwRjVBQjIyQ0U2N0U1NDY5RUE3MzJCQjYxNUExREREQzMwMgotOjEwNjJEMDAwMDRCQjY1Q0NFNzdCNTFEQzBCQjVBNzI3RDIzRDcxN0JCNgotOjEwNjJFMDAwMkUwQkUzQkQ0MTcwODE4RUM3N0JEMkY4N0ZFRDhEQjk1NwotOjEwNjJGMDAwMTQxRjZBOTNGQzI5QzEzQ0NDOTdGMEI5RjBGQ0RBMDE3OQotOjEwNjMwMDAwNDc4OTMwN0Y1QjBFOTdFQjJDRTRCN0UyN0QzNThDQjM4OQotOjEwNjMxMDAwMzg3MkZERTBFRjA1QjU3NENDQzgxRUE2Rjg4NTlFNzhFRQotOjEwNjMyMDAwQ0Y2OThDODhCNzYzNUMxQ0UzMTdEMUNGNERFRUQ1QzIyMwotOjEwNjMzMDAwNTMyRTY4RTEyQTY2RDBDMDM1NjYyRDNDRDVBQTg1MzczNAotOjEwNjM0MDAwMTU3MTNCN0RCQTVENUIzRkMzQTk4NTFERDkwN0UzNzQxOQotOjEwNjM1MDAwM0NDRkRGQzIyMkUyNDlGMEY3NUU3RTQ0MUM2OERENjg3NAotOjEwNjM2MDAwRkUzRTVGNzZGNzUyOEFDQkI2RTVGMDc4OEY2Mzk1MzZCRQotOjEwNjM3MDAwQ0U5MUM1NDIxMkUyMkY3MzY5NTQzQ0Q2QkQ2NjNGODY2QQotOjEwNjM4MDAwOTdFRDBCQTNFMzQxRkM1RTAyRjBBMUE5NDczMThBN0NBMwotOjEwNjM5MDAwRjBFQTY4OUU4N0RFM0REMkI3QkQwOENFQjM2MDBDNUZFMQotOjEwNjNBMDAwQzdBQjFENEQ3NDNGQzVEQUQzODhBRjVDMjI1RjY5QjBCRgotOjEwNjNCMDAwQkU3QzhBRTg0MDFEMEZGOTIyMThCMTdGRTQ4NzQ4RjhCNwotOjEwNjNDMDAwQTE1MUJFMzc3MDFFRTQ4QjYwQTRGRTJDRTkzNkQwRkJEMQotOjEwNjNEMDAwQUI2MkJFQTFGODQzRTVDRjcyNzE4RkEyRTZEREY0ODkwRQotOjEwNjNFMDAwQjFENEJDOUI1NTIyNUY3MDU3NTRCRTRFOUZBMzM2MTk0MwotOjEwNjNGMDAwRkRFN0JFQUU5NUYxQjFGODEwRjkyRTY4RTI3Qzg4RTVCNAotOjEwNjQwMDAwMDY5MTdGODM3QzE4MkNFMjdDODhGNUE2RUY1Njc4NjM5MgotOjEwNjQxMDAwRDk4QjBCMDU1RERDQkY2M0M5ODY0RjIyRjZCN0FDNzMyMQotOjEwNjQyMDAwODUwNjVFQkVFQkUxMEQ5MUY5NTFGN0UzM0YzMDA4QkYwMQotOjEwNjQzMDAwOUU1MTdFRUQ1MkIxOUQyRjRGRkZDQjJCQ0QwQ0NENDgwMQotOjEwNjQ0MDAwREYwNzI4Q0Y5NjE1OUMzMUYyN0JBNzVFMjM5RUVCNDI5NwotOjEwNjQ1MDAwNjFGRjk5Q0NCM0YyRDEyRkRCMTFFMkYyNkM5RDg4Mzc0QQotOjEwNjQ2MDAwMzQ1QjE1MzNDNjgxOTkzQjU1MTNDNzUwRTMxMTRENEIyRgotOjEwNjQ3MDAwNUNCNjU0RDg0NzcyN0Y3Q0MxNkJBNTdDRENFMUY5MTQxMwotOjEwNjQ4MDAwREY0OEFBRjFEQ0NFQzYzMkQ2NTM2NDlDNkIwNjYyRERDRgotOjEwNjQ5MDAwOEVDMTU2QzBFOUY5NTdEOTMzNDFDN0MwQkU0RDE3Rjg3MAotOjEwNjRBMDAwN0JDOUZEQjBFQzY3MjQ4RjJFRTQ2OEVBREI0NDlDQTMzMwotOjEwNjRCMDAwOUZCRjJEMEJBQTcwM0U4QkRCNDlGQkIwMzFGRjFBMUUyQwotOjEwNjRDMDAwMTdENEM2RDE0Q0UyM0RFN0MxRTMzQjM0RjU2RDIyN0VFMwotOjEwNjREMDAwNzJFNUYxQjU3MTM5RDM4NUJDMjFDNjJGOEMxQURGMUE0QwotOjEwNjRFMDAwNzNGQzgxNzFCNUYxQkRBQkI4Mzc0RjcxNEYxODNBMkVCRgotOjEwNjRGMDAwMzZEMkNERTk2OTlERERERjg1NzEzMTgzRTA3RjY2MDZBNwotOjEwNjUwMDAwM0E5OTg4RjI4MEZGRTlFMzc5N0VBRUMxQTE4RDhGMTlCNwotOjEwNjUxMDAwMzBBRjBCRkEzRjk3Qjg5OEU0OEFGQTNFQjVGRDk5MDU3QgotOjEwNjUyMDAwMTJDQUNCMjdGMEZERThBNEMxRjIyNDVBOEVEODQ0REU2QgotOjEwNjUzMDAwN0NCNDFDODFGOTM0NzBEM0MzNUNDRjM2NEI4QTBGRTUzMQotOjEwNjU0MDAwNzNGNDdFRkU3RkYxODc3NTg5RTNCQkM4QUVDRThFNzc4QwotOjEwNjU1MDAwOUEyRTYzMEZCNzA1ODI2M0YxQjk3NUYxRkVDNTc4MDcwRQotOjEwNjU2MDAwN0VGNzhFOTE2OTRGOTRFMzdCRUI4Q0Y4NkNDNThFMjk5NgotOjEwNjU3MDAwNzMzMTBGQjY0REYwRUIxMzY5M0FBMkE3RjREQkQzQjczMgotOjEwNjU4MDAwRUEyM0U4MjlEREU4NzNBMTNEOUNBRTEzRjk1RkY4ODdBMwotOjEwNjU5MDAwNzFCNDI3RDJCNzZEOEMzMUJGNkFEN0E5QjBBRDAxRDYxRgotOjEwNjVBMDAwMTE3MThFNkRDMjlFRUU5RkVGOEVDQ0FERkE4ODcxRDJDNgotOjEwNjVCMDAwNERCRUIxMzQ1RjdGRkVBMzk4QUZFNTg3Q0RCNzU5QzQxOAotOjEwNjVDMDAwQzNENEY5NkM3NzZBRjc2NzMzRkE2OTdGMzZBMTg3RDQ0OQotOjEwNjVEMDAwRjkzNkUzRkU2MkYwRDUxNUU3MTNGRTc1RkY3Qzc3NjlBNwotOjEwNjVFMDAwRjc2NzMzRjk2OTdGMzZGNTNCMUJFQTdDMkQzRjZDM0UzQwotOjEwNjVGMDAwQkJFMENGNzZGMURFOTczRDlFN0YzNzY0QThGNzIzOUEwNAotOjEwNjYwMDAwRkJGM0NDQkQ2Njk0MkZFRDZBQkM1MEU4QkI3MzUxRkEyNgotOjEwNjYxMDAwQUU0OUU4M0JGNUY5NzM2OUI5MTRGRjNENzdGODI2NzM4NQotOjEwNjYyMDAwMkMzRDg3RkE4RDA5M0I5MzA5M0I5MzA5M0IxM0UxRDkzNAotOjEwNjYzMDAwMzVBNzU3MEQwNzdBRkNCQjFEMzdDRjk1NDFBRkNGQkVBRAotOjEwNjY0MDAwRkZGNEY4MUM4MERGRDlGMThCQjkzMkU4QTlEOUFGOUVFRAotOjEwNjY1MDAwN0UzMzBCMUUyOUZFREJGQjM4RkNGNEU5M0UwN0I0NUJGRQotOjEwNjY2MDAwODJDRkNDQUQwNTM4NjkxOEQ3Q0ZFQUJBRDU3OTc3QjlEQQotOjEwNjY3MDAwQjk1REI5N0M3NTFFOEY2RjgyOUM0NTNERDY5Q0UzNjdFMgotOjEwNjY4MDAwMTg3RkZDQ0FEMTlCMzQxRkZBMkZDRkVFNEQ1RjEwMDM0OQotOjEwNjY5MDAwMkY2QUI5N0M3NTIxN0YxRUFEQzA4OTk4Q0ZDNjQ4QUZERgotOjEwNjZBMDAwRERBOEJFQzc1MkE3N0Q4RjI1Mjk2OTIzRDk4NzcxMkMwNAotOjEwNjZCMDAwNjQ0NTM5OTY2MEY2RDBGQjk3RDcxNjczQkQ3MDMzNTM5NwotOjEwNjZDMDAwMUFCODVGRTEyQzEwNzkxQ0Y0REVDQjRERTU2MjVDNkJFRgotOjEwNjZEMDAwRTUyRkIxRkQ2NjlERTcwOUY0NzdGRjc5RDJCQ0UxNjg0QgotOjEwNjZFMDAwM0VBQjc5NzNBMzA2REUzQkRERkU3RERFNEY5RUZEQjE0MgotOjEwNjZGMDAwQzQ2REU1NjQxRThGOTkzNkNBQzlERjdCOEI4ODJCQTJENwotOjEwNjcwMDAwNUQzQzE0M0UzRjc1NzNGRjdFMDA5RjFFOEVDRjU0MEY3RAotOjEwNjcxMDAwQzdBN0I1Mzc2OTBEOUNGRkYyOTRERUY0Qzc4OTRGQzM1NAotOjEwNjcyMDAwMzFGMTM1MDhBRjUxRjhGQjkzOUJBOTdFQTAxRUVEODg4RgotOjEwNjczMDAwMkJFMTVCQzVBQjlBNUZEODJDMzkwQkM4NUU2NzE5OUEwMQotOjEwNjc0MDAwRkM2MEM2MTQ2N0FDN0IxRUE0Q0Y0ODNENkJCNDdCMTlCQwotOjEwNjc1MDAwREFBMzg2MzRDNThERjlFRkNEN0ZEMUM3Q0NEQjczMTVCNQotOjEwNjc2MDAwOEJGODVFNTIzQ0U1N0QzNjI3MTlDOTFGREY5RjM0OTNCNQotOjEwNjc3MDAwNjFGQzU5QjY0QzIzQkNENDI2RDU1MTNFQTY3RTE4RUJGRAotOjEwNjc4MDAwNDQ3RjM1M0EwRjVEOUY3QzNCRTUwOUU5NkRFODYxNDA0OAotOjEwNjc5MDAwRDk5RkM3RUMzMTIzNUZFOTNGNTY5MjVENDgwMDU3OTk3NgotOjEwNjdBMDAwODcyRTVGMjkwRjNENzUyNkNGNDM0RjMyM0EzMTVFRDg5MQotOjEwNjdCMDAwOUU2ODhDOTk4N0ZFQUQ5QkZCNURGQjcxN0Y2OUI4MUY1RQotOjEwNjdDMDAwMjNGRjZFODhEODk3NkNFNUY3RUU1ODlGMDBGNTQ2QUIyRgotOjEwNjdEMDAwOEY1MUZDNURFQ0ZGNUI2MTA3QTlGRDRENTYzRjQzRjkwRQotOjEwNjdFMDAwQTAzNzJBNEVCNDVGRjRBOTVDN0ZFMDc3NUJEQzMxRTIyRQotOjEwNjdGMDAwMjg1RkJCMERGNEZDRkRBM0FDNUNDRjk5QjlERDNFRkI3QgotOjEwNjgwMDAwMzdCMURGMjcyODJCOTY0NEJDMjQzNkREMEQ0NTM3MzdCQQotOjEwNjgxMDAwRUE3OERFOURDQTk3NzMyRDQ2Q0EwNzlDNkJCMUQzRjcwMQotOjEwNjgyMDAwNkNFNjAyMjFGNkE0NDZGNEJGRUU1NkZFM0VCNUFDRDhBNwotOjEwNjgzMDAwOTE5RTdFN0JFRDk0NUZGRTk2RTFCNTAwOTdEQkE3NjZBNwotOjEwNjg0MDAwMThFOEJEQzI1MzEyRjMyOEE5ODNGMzVEQkRERTk0QTlGNQotOjEwNjg1MDAwQjhDQzFCRUE0RkFGNDU3NjJDMThDM0M4NEU3QTc1QzEyOQotOjEwNjg2MDAwNDNBRDk1NEVGMjhGRUE4QTkxOUU3RDczQTZBMjBGNzc3MwotOjEwNjg3MDAwNjNDM0Q4NzdCMUZGRjIwNDJFQ0ZENUZCQTVFNTA5RkNBMQotOjEwNjg4MDAwN0RERTZCNjRERjZDRUNGRjU1QzUxNzQ5RDU0ODVGNzI0MAotOjEwNjg5MDAwNkYwRUFFMkJBMjNGREQzMzQ1RjQ5RjVCM0M4MUZBQ0ZGOAotOjEwNjhBMDAwRTZBRkRERjVEMjc3MzlDRUE1OURGOUM4QzdFODdDRUMxNwotOjEwNjhCMDAwQjFFQzI5RjRCNzU4RTRCRDg2OTAxRkU4Nzc0NUQ2QTMxQwotOjEwNjhDMDAwQkZDNTIyQ0U1MzVBNTA2RUVCOEUyMTRGRDQzMkMzM0VGOQotOjEwNjhEMDAwNkVFNDQyQTBENzhDOENCMTU0QUFGNUNGN0FGNDc1QTE5RQotOjEwNjhFMDAwMThFN0ZDOTAzOEU3MUZFQ0Y3QjRDMzZBMjcwRUY4M0RCMQotOjEwNjhGMDAwRTBFRjNDODRGOEY4NzJFMUE5RjRGMUIwQTUwNzZBQkZCMwotOjEwNjkwMDAwMjZCRkM3NkVFQ0ZGQ0UxNkY5NzEwM0IwRjZCRUIzMkRFRAotOjEwNjkxMDAwRDA1QjhDREYxOTYwODg4Nzg5MTFGOThCNjJCRkY2MjVGRgotOjEwNjkyMDAwNkI1MkQwRUY4MUIzRjQyMERENzYwNEJDMjM2QjBEMDNGMgotOjEwNjkzMDAwQ0ZCRjJDRTQwODBCMTZEMkYzMDZCMTJFNDc1QUVCMEM0RQotOjEwNjk0MDAwOENCQjM4MkMzQUNBNzM2MENDQUE5MTY3NzM2QTUzQTY4MQotOjEwNjk1MDAwQTZBMTBCQkI5QzI5MTYyN0ZBRjc1REU0MTc2NEUwRkJBMAotOjEwNjk2MDAwMEQxODlGN0NFNzM2ODZGNzVGNTk2OTlEMTJEQTc1RkQzMQotOjEwNjk3MDAwRjM4OEY3QzY1Nzg5N0JFMTNFNUYyREVEMjdDM0Q2RUYzRAotOjEwNjk4MDAwOTczMUYyNUZEMzgyNzM1MDZFRjUzREMzNTc5NEYxOTIwNQotOjEwNjk5MDAwQjZERDkxQzZGMzFGRUU1RDE4MUY3MjAyQkQ2NzJERURDNwotOjEwNjlBMDAwQzI0RjRGQjAwQzcwRjgzMEE2OUY3MUE5RDlENTgyNzIzMgotOjEwNjlCMDAwRTY1NzA5MTQ3N0Q2QjdFN0IzMjBDOEZCQjBFQ0ZCMUI0QQotOjEwNjlDMDAwQzI3N0M4Rjk5MDJFNEY2QzE2OUU1QkI2Mjg5RUVDQjkyNAotOjEwNjlEMDAwNzZBOTc1MDZGOTMxRjdFODU4QUM3OEQxQ0U2MkVFQTcwMgotOjEwNjlFMDAwRkM4RjYyMkJCRkNGQjU0RkU0RjQ2MzFGM0Y3MkUxQjg1OQotOjEwNjlGMDAwQUJFN0ZGNzc4NDlFRjk0OUIyOTNERTdGNTJFREEzNEQ1QQotOjEwNkEwMDAwNDNGODQ3OEU5MTNBMjE1Rjg0NUUxMUY4MzMzMzlGMTkyMgotOjEwNkExMDAwRjk0NTJGNzk3OUIwNzRDNzZCQUZCRDk2Q0VFODUzNUI1QgotOjEwNkEyMDAwNDg0NzFCODRGREEzOEUxMzlGMUZBMkM2NzhDNTQzRjI1RgotOjEwNkEzMDAwNTJCMjdBQjhCRUIwRkFFRDQxMzhBRjc1REZFOTYzQ0UzNQotOjEwNkE0MDAwRkY4NUEwRkIzNUQ5MEZEOUIxN0ZBREQzRTdDNjMyRkFBOAotOjEwNkE1MDAwM0Q5ODk2OUM3QkRENzgzRTJEMzNGQkU5OTVFQ0JBOTYwQwotOjEwNkE2MDAwMzNDRURGNjEzRTU2RjAyOENGMzdEODlGNUQ2OEMzRUY0NQotOjEwNkE3MDAwNDE1OTBFMUI2NEQzNjVFMkYxNDZEMDI3Q0VDQkQ4MTkxRAotOjEwNkE4MDAwNDY5MUFGREU3MjgwRTc5OUI2NThDQUJBMzBBRkExQzU1OQotOjEwNkE5MDAwOTI1NjQ2NkFEOEMyRjM1NkQ1RkUxNkNCMjFEMjA3MTZCNwotOjEwNkFBMDAwODVERkRGNUE1MDdGNDhCODRDQzA0NzA5QUVFQjEwRTE5NAotOjEwNkFCMDAwNDNFRDc3NTBDODVEOEIxMjY2Rjg1RTVBOUNEMjRBRkQ1MgotOjEwNkFDMDAwQ0NCMkQ3ODM3OUNBRTYzNDQ2Rjc0NDY2MkJGMDE3RTI5NgotOjEwNkFEMDAwMzU1RkM3Q0MzMUY0QzlCRTYyQUU0RjVBNEFDQUJBQUFCMgotOjEwNkFFMDAwNjk3RDMyN0VCOThFQjVEOENCRUNBNEU3MTFFRkYwN0M4RQotOjEwNkFGMDAwNzM4Njk2Q0ZCRjEzNzg1N0M3NjkxNkY5QjQ3N0FFNEUzMQotOjEwNkIwMDAwMDlENjhFQzMzODkzRjcxQkE0RTcxNkNCMDI3MzEwRjU5MgotOjEwNkIxMDAwNUFFMkY4Q0I4RTY3MUEzOUQ0NzhGQkQ3OEFGMUJFNDM5NAotOjEwNkIyMDAwNzlBRTRGMkNCM0UyNzgwNkM2RjcxNThERjdFMTYyOUM3QgotOjEwNkIzMDAwRkZENUZCN0JDMDJDQkQ0NzREMzAxRDU4RDgxRUVCN0RDQgotOjEwNkI0MDAwQUNGRUYzMTNGN0YyRDFDRkZENjA3OUJDNTYxQjg3MDI4MAotOjEwNkI1MDAwNzlFQzFFMDlGQjVBNTY3MkU2NTAzNUQ1RjBGOEQzMEI4NgotOjEwNkI2MDAwQzI5RjUxRkQ5Mjc0MzFGNjBCMTI3RkJGM0YyOEM1MkI5NwotOjEwNkI3MDAwRjQ1RDBDRTFBN0E0Qzc2OUYxMzBGMDNFMkQzRjg3NkZBQgotOjEwNkI4MDAwMUE3ODFFREUzNzY5NEM3Qzg3NEVDQkQ3REYxQ0ZGMzg2NgotOjEwNkI5MDAwNDU5MzlGMDU3Q0VDMzE3MTNGQzYyM0RFQTdGNTg4MzgwRAotOjEwNkJBMDAwMURDMjE4NkZBMDE3OUQwNEZGRjdDNzg5MUI5QzNGQzMyOAotOjEwNkJCMDAwRUZBQzk5NDA4RUVCNjA1Q0M5RTEyN0ZBMzYzOUJBNUREQgotOjEwNkJDMDAwQzhFRjM5RTJGQjBGRDE3OEZFQzk0ODJFQUZBNTQ3N0E0RQotOjEwNkJEMDAwNUM3OEFGNTE5QkQ2OUIxMThCREY1RjdDRjg0MjA2RUU1MQotOjEwNkJFMDAwRTdDNTE5RkQ3OTNCNzRERkY0RTI2OUU3RTYwMkM0Q0IzRgotOjEwNkJGMDAwMTFFREZCNkZFQUY4NEQ0N0NFQTdGODIyRkRBNUMwRTVFMQotOjEwNkMwMDAwREYyRjRCM0FCMzcxMjVEOThEMEJCOERERjg3RkZBN0RCNAotOjEwNkMxMDAwQjMxN0U2NzMzQjc1OTdBNDk1Q0Y0RjA4QjkxQzE0RkNDNgotOjEwNkMyMDAwNjBCQjIwRDNGNzQzRUUyQUYyQUQ0MDNBNkE5M0FDMEIzNwotOjEwNkMzMDAwNTAyRUU3M0NDQ0YzRjI5QTFFNUJENUIzMjgwNjdGQjQwNgotOjEwNkM0MDAwOENGMkZERDVDODA4QkZCQTdDQkQ5MUU0NUVCMzI1Mzc5MAotOjEwNkM1MDAwRjk3MkY3Mjg0MzlGQkI5RkU0OTQ3QURFNTU4Rjk4NzlBOQotOjEwNkM2MDAwQkU4QThGREJEMUU5QkU3QjI5MEYyNjNBM0Y2NUE4N0UxRAotOjEwNkM3MDAwRDUyMzlENDQwRjZBN0YxMzhFOEZGMkM1NzIyM0M1MTVFRAotOjEwNkM4MDAwQ0VBMThGODE3MTNCMkJCNzMzQTJENzU5ODlDODk4QzA0OQotOjEwNkM5MDAwRjE2MzA2N0Q5OTc0NjA0OTFDOEU2QjEwRkVEQzBCNkFGMwotOjEwNkNBMDAwNUNBNEExQ0NFQzg5NzhERTcwNUI5OUI5M0E4MjRFOUFFQgotOjEwNkNCMDAwMTlDRjBGOEUxRUZGMzcyMzU1RkIyMkFDQjE2MzBDQThGMgotOjEwNkNDMDAwN0YzMUM2OTQyNjlGRUQ5NzNCNjQ3OEYyRkNCNDk1MDMyMAotOjEwNkNEMDAwN0NDQ0UzMEU0M0U3QTNDNTcxQkUyRDIzN0JBQzBERjM0MwotOjEwNkNFMDAwRDJDMDBFNUVEM0IwNjAwNEUyQjc0REY2QkQ2ODAzM0M3RgotOjEwNkNGMDAwRjQ3RTY4QTIzQ0VBREYwQjNFRUQxNjdDM0FENEY5MDUzRgotOjEwNkQwMDAwRDkwMTMwRDIxODdCOUMxREM0OTdFMjgwNEVDNjI3MjM0MAotOjEwNkQxMDAwNUYzNEU3RUJFQTQyMzFGNjc5NUNFQ0YzMzJGNjc4NzhFRgotOjEwNkQyMDAwRTRGN0IzQzcwRjg5RkUxQTdCMUNFRDZENEZENEZENDYwNwotOjEwNkQzMDAwMjQ4Qzc2QjYyNzg2M0Q3RTQyMTJGMTA1OTEyNzc0QzJENwotOjEwNkQ0MDAwRTBEQ0Q1MEQ3ODM5MzEzOTk5QkU5NzU2OTBDMEVGNURBQQotOjEwNkQ1MDAwNEVBMDdGNTIwNjdFQzhBQkE3RjNEMTdFOTkyREY1N0Y1QQotOjEwNkQ2MDAwMTc0OUY4NDM4QzYwRjA0N0ZFMDVGOTYyMEVGM0JGQjY5MQotOjEwNkQ3MDAwNDgyMjNFRTJGNzM1NzgxQjlGN0VFNTczREUzNjkyRDFERQotOjEwNkQ4MDAwQkEzNkMwRjlFMUZENDZEQkM1RjkzMzYyREQ2N0E0OEU5MgotOjEwNkQ5MDAwNTJGRDM3NTA2NTExRUYxMzMzM0M5RDg4RkJBQzQxRjczMgotOjEwNkRBMDAwNzQ1MUY3NzI3ODZERDM5Rjc3QUMxRkRDRkY4NjcyRUQ1QwotOjEwNkRCMDAwQkREOTg2OEIzQzJFNjI1QUMyNDI4RjRCOTg5N0FBNkRFMgotOjEwNkRDMDAwQkZBOUNFMTA3RDJGQThCOTRGQkJEOTZCODg1RTBGN0RCMAotOjEwNkREMDAwMTdENDIxRDY5QkRENzExRkREQkY0RkNERTZGOTQ0QTY0OAotOjEwNkRFMDAwNjU4Q0UyMDREMUY3NkRBNkIxNUQxRTNEREFDRjBEOEM0NgotOjEwNkRGMDAwRUNGREU4MzgzOUU2QTk1MkZDQjA4MUIxMkQxMkU1NzlGNQotOjEwNkUwMDAwNkJERjczNzlBNkZFNzNGRTdEOTRENjNBOUNDNzBFNzYyRgotOjEwNkUxMDAwMTBEQUQzRDFFRjQ5QThGNzVBRUFGNzUxNTUzQ0FCREY2NgotOjEwNkUyMDAwOEY0QUJGNEQ0N0VCNjNDMTI5RDRBRUM2RkRGMTdCQjg5NQotOjEwNkUzMDAwNTVFOTExRjlFNDJCNTg3RjdGN0E3RjJCMTg3QkRGOUI3NAotOjEwNkU0MDAwREJFQTI5Q0YyMDczQkM3RjZDMTg5QUIyMTQ0Njc4Qzg0RAotOjEwNkU1MDAwNUFDOEM4NkYwMDNDNjhGMjA5NENEOURCNjk5RkU3MTYzNQotOjEwNkU2MDAwMzMzNjRDMjIzQzY4REEzMzQwRDNEM0ZEQzA0MjZEN0VDQQotOjEwNkU3MDAwMDFFQzUzMDM0N0ZCQUI1N0YyNTM0REQ5Rjk5Nzk1RjMwOAotOjEwNkU4MDAwNTc4QTYzOUFDNEJERTQ5NDUxRTJGQjk3QTVBQzE0RUQxNAotOjEwNkU5MDAwQTJGNERCOUVBMUYzMzgwN0U3ODE3MTVGNzQ5QzYyREQ4OQotOjEwNkVBMDAwM0I2RTgyRjFEMThGRkM3N0MxMkZDREUyNkU1QkZEQUVFMAotOjEwNkVCMDAwMEZGM0M4RjQxRTlCNTRDRUQ3MkMwREYzRjI3QkU5MTJDRQotOjEwNkVDMDAwNDY3QzZFOEE2NzY2Q0M4Rjk3MkE0QzFFQzRCQkM5MDQ2OQotOjEwNkVEMDAwMzA2QzU5MzIzMjczMDZENEVCNDUzQzdCOERDNDY0ODRFQwotOjEwNkVFMDAwOTk1NTMxRjNGOEEzRkE1REExMTA3RDU3NjhBODc5RDRCQwotOjEwNkVGMDAwRUYyQkIyMjA3RjRFOUQ2N0QwNzdGNTJFRjMzQ0Y5N0JDOAotOjEwNkYwMDAwRDZFOEU3NkIyOTlFQTlDRTNGMTRGRTg3RkE4RURFQkYzNgotOjEwNkYxMDAwRDVCQzM3ODFDNzUzMUQ0NEFGOEQwM0Y0NEFGMDdDNDE4MwotOjEwNkYyMDAwOEZGODNDQ0E4NUJCRDU2NjdCNTcyOUZBMEY2NzFFNEM4NAotOjEwNkYzMDAwNTAzNjRBMTFGQjA4Q0VEMkYzRUYwMzdFQkZGMUZBRDdFOQotOjEwNkY0MDAwNjE3NzkyQkNFRkRGOTcxOEVGRkJFRThCRkUyMkU0REE1RAotOjEwNkY1MDAwM0E3QzU5MDlGMzVFMUExOUU1MzFBNEZCQUEzRjk3MjkzNwotOjEwNkY2MDAwRkYwMEY2QTA5MTEzMTFERjQ5ODBGMUQ2M0RDRUVGMUY0RgotOjEwNkY3MDAwMzZFMzc3M0VGMEZFRTdDMDQwRkVFRDEzMTY2Q0Y3RDEyNgotOjEwNkY4MDAwNzczNkQ0QkM1Q0NDQTM1RDVCMzJGMDNFNzJGNDdEODM3QgotOjEwNkY5MDAwQkQxMUM2ODk5ODZGQjI5OTA1MTM0MDlGQTRGNDMxMDVCRAotOjEwNkZBMDAwQkZGM0VDQjk2ODU0QTYwMzdFNkM3REEwNTAwMUJGOTM3QgotOjEwNkZCMDAwOTk4OUVFQTUyQUFEN0UzM0ZGMEVFMTBBMTY2OTY3RUZDNwotOjEwNkZDMDAwOTc2RUE1RUZCRDg2QkY2NDk0QkYxNDNFQ0Y4OEVFQzMxNQotOjEwNkZEMDAwOUZDM0M0NzAyRUZGRjhEREZCN0FFNENCQTk3RDVEN0FGOAotOjEwNkZFMDAwRDRGMzkzRkJGQ0E0N0ZGNkQ5NEYzREVERTJFNzYyOTkyMQotOjEwNkZGMDAwMTE5MTFGNzUxRDVCNTRDRkU5OEE5Rjk3MkNFQTI3NUY3QgotOjEwNzAwMDAwMzA2QUY4RkREQTVFQTM0NjFFQzgxNzVCQkU0NkZENjUxMgotOjEwNzAxMDAwRUE4OUFBNjdEMzNGRTNFM0Y5MjhERTJEREJCNUVENTMxOAotOjEwNzAyMDAwNDQzRUQwREIyQURGNUZDM0FFQTE3M0JDOTgxNjMzQ0ZEQQotOjEwNzAzMDAwNkVFMERDRDU3MzZFRTI3MTc0QzZDNzc5NkU5NEY3OUYwQgotOjEwNzA0MDAwNDY0RDQwRkZDMDQ3NzFFODY0QzQyRkQ4MTcyOTk1REQyRAotOjEwNzA1MDAwQ0M4RTc5NThFNTRDOTk4RTcyQkRCMkYzMURBNDg3RTRBRAotOjEwNzA2MDAwQjMzQzBGM0M3QUZDRkQ1RkJFOTU4NTdFQzM5RUM5OURGNwotOjEwNzA3MDAwNTk2ODJGRURGOUYyMTUzRDhFNTdENUQzQ0JCMDNFMTk5NwotOjEwNzA4MDAwNEExRUE0NTg0Qzc4QUExMEI0MzM1MENGRTM0NDkxRjU2QgotOjEwNzA5MDAwQjQ5RTRBRTc2NUU1RTRDRjUwNEUxQTg3NkVERjMzRDlEOAotOjEwNzBBMDAwQzJDMkU0ODc3NTI2QTAzREM3N0M3Q0ZFNjRCM0NBNTc4NAotOjEwNzBCMDAwRUMyRjk3NzA1RTg0ODE5RkY2NTRFQTUyNkE2MTlGN0I0MQotOjEwNzBDMDAwOUU5MTE1NkNEQ0QzRjM0NjAyQ0VCRkU3RUMzOUNEN0E0NgotOjEwNzBEMDAwOThGRTIyRjM0NUFDRkI1QTcxRUU1MzJCN0JDOUZFN0UyMgotOjEwNzBFMDAwNEFBQzJCRjk2QzJGQzVBMTUzOTVERTMwRUFEQkQ0QzMzMwotOjEwNzBGMDAwN0FGQUZFMzdCM0YwQkNDODYxNENBMTM4OUFCQTVFRkM4QwotOjEwNzEwMDAwNkUyQTNFRDc4MjcyREU4OEZCQjMzMjU2MjhFQzdFMjg4OAotOjEwNzExMDAwMzMyQTgzNTU5ODhGOUFDQzc2NEE0ODZCNTMyQjdENDFGRQotOjEwNzEyMDAwQTRFN0U0QTU5QzlFOTNBREZFQzMxOEJGNEY1RUFGQTMzQQotOjEwNzEzMDAwMzg0NUYyNTlERjA2RjRDQjkyQ0I2NTA1QzlFNDRBRjgyRAotOjEwNzE0MDAwRUMxMEYzQjc4QUY5RDRGOUQ1RjU4Q0E4RjQ0QkU4N0VBNgotOjEwNzE1MDAwMjRCM0UzNjJGRUFFMkExMzhFQkY1QUNDRUYxNEVCNTk3MAotOjEwNzE2MDAwQzVFODNCMkNDOTY3QUQ1NUU4MkYyNzgzOUQ0MURGMzMyOAotOjEwNzE3MDAwQjhFMjc5OUEzNUYzNDVCNzI3NEZEOTk5NDVFN0UwQjE5OQotOjEwNzE4MDAwMUVEOTBBRTNBNTY0NUIzNjU0NDFCOUNFQTEyM0ZGMzI3MAotOjEwNzE5MDAwQTk4NzUxM0MzREE5Mjc5REU0N0Q1MjRGQTEyODI3OEEwQwotOjEwNzFBMDAwRkE2OTQyMEY3MDM5OTNENEYzNTAyREFGNkZBMUQyQTQ3NgotOjEwNzFCMDAwQ0ExNzg3M0Y4Q0ZCOThEQUNCQjg3QzcxNzg0OUJFOThBOAotOjEwNzFDMDAwRDJCODdDNTFFOUI4NTY5NTJCQ0M1QTMyMUZFQUY3MEY0QQotOjEwNzFEMDAwRkZBQ0I1MDY5RTdCRjc3M0ZFRkVFNUJCRDk1Q0JFQkM3QgotOjEwNzFFMDAwRkIyNUY3RkI0RDY5QkZEM0EzNUNBQTQyQzMwNUZBNEQ0QgotOjEwNzFGMDAwQkJDMEVEMzM5NTFGQUJCQTI1MzYxMTQ4NjM5QTgzRTdDMAotOjEwNzIwMDAwODcxRkJBQzg5RjNCODREOUQ1MDBBRjYzMTJDOTI5OTU5RgotOjEwNzIxMDAwNkU2QjA1RERBRUIzRUE4MzQ5RDhGRTgxODlERTc3MzQzMwotOjEwNzIyMDAwMzlDRUU1OThDMTFFRkU4M0FFRjc0MTdDRUZGOEY3MzMwNwotOjEwNzIzMDAwN0FFRjVENDFGNTgyN0U0MzRCNDkyRTlBODQ2QzM5RTRBNgotOjEwNzI0MDAwNTg2MDQxM0U4NDc5NDhBRTFFNzIxOEU5QkMwRTA4M0E3NwotOjEwNzI1MDAwM0U2N0FGRTkwOEMzM0Y1QkNDREZGQzY5M0VENEZGQzFBQQotOjEwNzI2MDAwOUVFQjQwOTM0QzNEOTcxRTQxMkY1Rjg4RjMzQjJCRThFQwotOjEwNzI3MDAwQTYyOUREN0I1M0M5MDRGQ0ZFNjIxRUNEN0JDRUZFMEQyQwotOjEwNzI4MDAwQkQ3RkIyRENGNjFGOUZDNkZBMkVBNzNBOEVGQTdDNEY1RQotOjEwNzI5MDAwNjhBNTE5Q0ZGNUQwOUIxRjlGNDBCNEFCRTM1RjIzN0I1QwotOjEwNzJBMDAwRUZFNEUzN0UzMzlBRjhEMDEyM0JDRjc4OTBGQ0YzQUQ1NQotOjEwNzJCMDAwODg5NjdGOEI0QTg2MEZDOEJGN0E2NjkxNzkxRTEyRTczRgotOjEwNzJDMDAwRUI1OTQyMUU0RDU1QjhERDVFNkZFNUU3NTU1RkIyNUY4NQotOjEwNzJEMDAwQTZGRThBOEJGNjU1QUZEMjhERjJFNDVBRTQ3RjlCRjI3QwotOjEwNzJFMDAwMjREMTRCN0QzRUE3OTdCRDgyOUUwRjBBN0NDRUVDNjNENgotOjEwNzJGMDAwOURFODk3RUQyRjk4NkUxOTBCRjgzRUUyRDIxM0ZGMUMxNAotOjEwNzMwMDAwMTlCQkM2NTIwNkNGMUQyOTk1RjA0QjAyNkM3QUM5RDYxRgotOjEwNzMxMDAwQjVBOTAwQ0Y1MjI0QTJBN0ZBOTJBRDFENEREMDdGOTZGOQotOjEwNzMyMDAwMzU0MUE5MDNGOEU4RjlCMzE2MzRBRjBFMDVCQzg0OTdDQwotOjEwNzMzMDAwRTk3MkY4RTM1NDE3OUUxQkM3RDNDQ0NBQjA4Q0ZFNEYzQQotOjEwNzM0MDAwQkQ2M0JGOENGQUY2NkRDNEFCMTFFMzJFMUVDMTY3NzUyOQotOjEwNzM1MDAwMDQxRjU3NkEyQ0I4OEYyM0E1MjYyMTJGM0RFMzUxNUVDOQotOjEwNzM2MDAwQ0VDQTM3RDU4RkExNzU3QzdENkM0QzFBQkU3NzZGNTAxNQotOjEwNzM3MDAwRjg5NTNDQTdGRkM5ODI3RUVBQ0MyNzZCNTNBMERGQ0NFRgotOjEwNzM4MDAwOTI2NjE5RDc3QkQ0MkM5MUZDM0NEQUQ3NDRGOTkzQzc4OQotOjEwNzM5MDAwM0IzOUFDRDIyRDNEMDc3NDc5QkM2RjVCNzMxMkI2NkY2RAotOjEwNzNBMDAwOTc0ODNFRDUyQjJGMURFMkVBOEZEM0E3M0E3RTBGMEJDRAotOjEwNzNCMDAwQjZFMTc3MzBDRjI5QUZCNzYwM0VGNUIxQkUwNUNGQ0M4RgotOjEwNzNDMDAwMDEzQzFDN0Y1MzNGQzRCODREMUZBREMwNzFERjRDMjQzRQotOjEwNzNEMDAwM0E5RTZEMzU2OUY0QjE4QzRFNjk4NDVFQUQxRTZGRDNGMwotOjEwNzNFMDAwQzBGNTRBMERDNUQzQ0YyOTkyRTUwNjc4REVGMzVEQUQzMQotOjEwNzNGMDAwN0IzOTkxRDE1MkRBNzdCREU4N0I0Q0UxN0M3OUNDQTEyNQotOjEwNzQwMDAwMjNCRTNDRDZGN0I4OUM4QUYwNTk0NkZCOTE5OTc2REVBQwotOjEwNzQxMDAwRkE5MjFBQjJBRkNFMjk1QkY1NDQ2NzgyMEZENUYxNTRDOAotOjEwNzQyMDAwM0EzRThBNEYyMzFFRUQ5Q0ZGOEZGNjZEQjMyMEJEMURBMwotOjEwNzQzMDAwNzVCRjIzRTMzOTVENjc4OTFBNTdEMEExQUFERkYwNURENAotOjEwNzQ0MDAwNzFBNDlGREE1MUZCRjM3RTg2RUI1MTM4RkU2Qjk0RDcyMwotOjEwNzQ1MDAwOEYyMzdERDUzQjY0QTJBN0EzQ0FGRTlBMTQ4NkJGMjdCQgotOjEwNzQ2MDAwNjJEMkVDRkZGRTFEQzk5QUYxOTc3NURBMzQ3MEI0NURGMwotOjEwNzQ3MDAwQjVDRkZEREJBN0NCQzQwRTY2QTQ0N0Q4NDdGOUMyM0UwMwotOjEwNzQ4MDAwRDIxRjc3RTBGQUFFNjgxNzI5RUJFOEY3NDkwNkQ5NDUyRAotOjEwNzQ5MDAwRjlEQzJFOEFCNjg3NTRCRTZFRDY4OUI4QUM4RUM3NjUyNQotOjEwNzRBMDAwQTNGOURGNThGQUMzRUVGMUQ4MkE0OThFQkNCRjVCQzZGOAotOjEwNzRCMDAwQkE3MzkwQkVFNkEzMTI4NkYxMUVEMDc1QTcyM0ZDMTUwMQotOjEwNzRDMDAwRUI2RDhCMDczOTdDQURDQzc2NjlCRkJGQ0FCRjM3M0Y0OAotOjEwNzREMDAwQkVENDc3MUVFNTk1NzQzNjRDREY2MTY1QUIxOEU1MDdDMQotOjEwNzRFMDAwRTg2Qjc4OUUxMTVFNjZBRDg4RDQ4QjI1RkRGMTJEOERGRAotOjEwNzRGMDAwNURBNDRCRDg5Qjg1NzhBQzM4NkJFNEYxOEY5RUU4Mzg1RgotOjEwNzUwMDAwOTdFQTFGODUyNUYyMkJBRTUyMkVFQTkzRjlCODdCRTY1NwotOjEwNzUxMDAwRjA3ODY3N0Y3OTMzOEY5MzE1MDlGQ0U1OTQxQTY5NUREQwotOjEwNzUyMDAwOEE4MEY3REMxNkZCOUVCNUE0NTRGQTQxRjlBMkRGMDc2NgotOjEwNzUzMDAwREYyOTgwRUZBRjkwRTY2MTlFM0Q1NUIxRDc5MTUyQ0FFOQotOjEwNzU0MDAwRTNCNTc3OTc3OEYyNEFBMTJDMkFGMTE1OTYyMjVFM0Q5MQotOjEwNzU1MDAwNjA1RkQzNzdDNTNENjQ5RkE5RTNCQzMzQ0FFMzE2RkRFMgotOjEwNzU2MDAwNDY2MUM5QkNEQzBFOEZFRTA3RUQ2MzY4OUM4NkQ4RTNFQwotOjEwNzU3MDAwNDBGQjM4N0E3RTZFRUNGNjQzQjgzOUZDN0QyM0ZCMzA1NQotOjEwNzU4MDAwRDI0MzA2MEM2NEE2RjI1MjJBRTNFNTE2RkFBRTQ2ODgwOAotOjEwNzU5MDAwRkJFNzBEMUVEMkYzNDY5MUFGODgzNzEwOTFGQ0M3RjQ3QwotOjEwNzVBMDAwRjUzNEJFMUM5RTQxRjc1ODJERDgyNTgzRkJGOTkxNzYwMgotOjEwNzVCMDAwOTRBQzg0NkEyMkUzQUQ2QUI5QTg5NERGNzNDRTI4MTUyRgotOjEwNzVDMDAwRUZGMzRDNjAxM0M4QUZBOEJDRkMzQ0VBRjM0M0NEQzM1NwotOjEwNzVEMDAwRUM2NTU3Qzg3QjVFRjM2M0QzNDlGQUMzRTQyNzVGQTUyNAotOjEwNzVFMDAwN0Q2MDBFNEE5MURGMzkxRjZBQkY4OTRBOTQxQzhBQzJBNgotOjEwNzVGMDAwRDM1MEYzNUNFRDc5REMyMkU4RjY2QUQ3NUQ2NTdBQ0M4RQotOjEwNzYwMDAwNEVGOUQxMkVDRTA3NkIwNTdERjVEQkQ1M0YxRTNGQkU3MwotOjEwNzYxMDAwM0YxRjg2RkVDQUQ5RkJGRTkzRjg3RTRBNDI2OEE1MzcxMwotOjEwNzYyMDAwQzY3RTVFMTRGQkY5MzFFNUMxRDM3MENFMUI4Q0ExRkI4NQotOjEwNzYzMDAwRDFERTk5MDdBNzYzMDJEMjdCQzdGMkYxRjAwNUIwOUVCNQotOjEwNzY0MDAwMzdDNUZDMkQ5Njk1RUI2Rjg1NDc1QjFDQkE5OEY5MUVFNAotOjEwNzY1MDAwNkZGRTc4N0FBMjBEM0ZEOUZGOTVFM0RDRkI2RDIwQTc4MgotOjEwNzY2MDAwNUIxRTdERDBBQ0IwODE3NTMwNkJEOTE1Q0VGOTQ3RTM4OAotOjEwNzY3MDAwMTM3NTVENkQ1QjMwNUU2MjREQkRBQUY3MTQ1QTVDQUY0OQotOjEwNzY4MDAwMjRFMDdENjlFREU3NEQ3NkZDMEU0NkI0M0RBMEM2NDM4RgotOjEwNzY5MDAwNTRCREE1QzY0RDU0QkJBNEMyQzFFMzFGMzNFREZDN0I1MgotOjEwNzZBMDAwM0QxNUY2NjlBNERGMEZCMkFFMUFGMkFGMzAzQjZEMjI4MgotOjEwNzZCMDAwQjEwQUZEMTlERDVBRkJFNDNBQkY1NzQ2M0IyQURBOUU3MAotOjEwNzZDMDAwQTg0RDMzNDVEOTA3QkQ3QTk0REYxNTE3QjVGRDU0RkU5MwotOjEwNzZEMDAwRjhBQzU0QzQ1MTU0NzkxNzY1NDc5QUNGOUY0OTQwQkJDMQotOjEwNzZFMDAwRUJFRDBCNjcyODJFMTQ4RDlGRUIyRTVDREU5RkJEQUU1RAotOjEwNzZGMDAwNUQ0RkY3ODNEMTcxQURCNzJGRTREMkZEQTAxMUFGMUI2MQotOjEwNzcwMDAwQzFENENBQ0MzRkM0OEM4MDk3NEM3QjZCOTUxMUVDMThDQwotOjEwNzcxMDAwQTM4MzI5RjhERDM2RkM1ODMzQzYwRDhEMTc3ODlDN0M4MQotOjEwNzcyMDAwODQ5REZCRDc4OThCQzEyRjg1NTEzMzk1QTA3REMxNzg2RQotOjEwNzczMDAwN0NDRTQ4RUZEMzk5NURFRjkxQkRCRDA5RUE4NjIxOUVDRAotOjEwNzc0MDAwQzc5RTE5QTY4QjExMDc1M0NGNjM4QUMwRUY2RUU2QjdBOQotOjEwNzc1MDAwRTNFRjgxNERCMThCRjdGNzJFNDZEQjU5RkMzQzJEQTJCMAotOjEwNzc2MDAwN0ZFMjYyMkQzRTJERTIzQzI3ODM1QjQzREY3OUVDRDM0MQotOjEwNzc3MDAwM0U2RjExRTc2QjU5MUFGQjFDRUNBMzYzOUY0M0EyN0E3RgotOjEwNzc4MDAwMEUxM0I2QzVFMTM5NkM1OUJDNEQ4QTc1MEU5OThCMkYxNQotOjEwNzc5MDAwN0YwRTVCODQ1RkE5RDJFRkI0QUMwNEIyQUZGN0E2RTg2QQotOjEwNzdBMDAwRThGQjQxN0IxM0MzNTlDQjMxRkVGREIyOTlERUNGQUM3MAotOjEwNzdCMDAwMTA3MTM2QjRBNDEwOUY2QkI3OTdCRjg0NzFEQjcxQTNBRgotOjEwNzdDMDAwRjU3NDhFN0IyNUQxRkZCQzhFRkZGRTYwQ0Y3OEVBMUY1QgotOjEwNzdEMDAwMjdCMzgzRjhCQjgwMDdGQkFBRTlCQjFCRDFGQ0JCRDM1MwotOjEwNzdFMDAwN0EwMEREMzNCNkNFQjkzRDZCMDE5QzgzMjVGQjgwOTlEMQotOjEwNzdGMDAwRkI5QjgzQ0YwN0VGM0Y0QTA1QkU0QjdCRjhCOTU0QTZFRQotOjEwNzgwMDAwOURENEEzQkQ1RUYyNjZFQ0YzNTFFMzhGN0JBNDlEM0E1OQotOjEwNzgxMDAwMjAyQjM2QUFBRjhCRkM5ODkxM0JBM0VDRTlCMzJENjRFNwotOjEwNzgyMDAwNjc1QkM2NDdENUY3QzAzOUQxQkQ4RTlGRUMxNkQ5QTE4RAotOjEwNzgzMDAwM0RBRkVCODczOEE3NEExMTg3MzA3RjdEOEFFMjY1RkIzMQotOjEwNzg0MDAwRkE0RTcxN0VFOUQxQzYyNTI3Rjc1REZFOUM1RTEzRTdFRgotOjEwNzg1MDAwQjQ1M0M0QTE3RTJFRTIwMDlEQzI3RjdFMjNFMEE0RjIzOQotOjEwNzg2MDAwQ0Q4MDlCRUFERjBBMjgwNEVGMEE5NDBCNjFDMUNGNzczMQotOjEwNzg3MDAwNTYzRUNCNDcxN0FGQUE4NEZCRUQ0N0NGNzNCRjdEN0Y0MgotOjEwNzg4MDAwNjJBODgzQkVFRjc0REU0MkRGMTdBNEJENEQxNEJGREJEOAotOjEwNzg5MDAwMDc3QzcyMkNDRTQ5QkYxRjc4MzREQjRDRjFCM0EzQTUxMwotOjEwNzhBMDAwQkZGQjdCOEFCQjdDNkJEMUYxQjgwQkM3QjM3QTRFRUJDNQotOjEwNzhCMDAwNzA0RTE4NkY1RDg1OEJFRUE1MzZFMDQ3MTRBMUZGRUU4NAotOjEwNzhDMDAwMzI4OUJFRkYzNDFCMEUwNEVGNDU1NDNBMzdGNTY5RjE5NwotOjEwNzhEMDAwNTkwRkZGNjU5NUYxREYxREM4NDI3RjYxOEM4QkU4QTRDRAotOjEwNzhFMDAwNDJFRjczMjIzRTM3QkE0RjkxNUYxRTU3RDhFRTFCODc4NwotOjEwNzhGMDAwNzE4MEYxN0EyNkJFRkIxNDM0NDVBQzNCMEU2RjQyRTAzQQotOjEwNzkwMDAwNzk1Mzg5NDRERjczMUEwQUJGRDFFNTg2NTRBRTJGQTM5OQotOjEwNzkxMDAwRUJGRjc1MzRENzgzMUJERERCRTgzQzc3M0JCQUIyNTAxNQotOjEwNzkyMDAwQUZFRjEzRjkxMEIzNjQyOTQ4QkY1RjI4NzdEREIxMUNBRQotOjEwNzkzMDAwRjY1QjkxNjUxRkJCMTFDMDJEQTM1MzY4RkRGQjRBNEYzOQotOjEwNzk0MDAwNTMxQ0Y4RDg4NTU3QzYyMUZEMURCMzc2NUEzMENFNzkyMQotOjEwNzk1MDAwQ0NDOURGNTM4NzEzOTVGOTdCQjc5REYyMkQzMUYyQTQ4MwotOjEwNzk2MDAwRDVGMjU4RTkyMkZBRkQ5NTdGRkM3Q0VGREFEMTdDREY3NQotOjEwNzk3MDAwNEM1MkY1MEE4QzVCODFGQjRENDJGOURFQjIwMkY5QzMzMQotOjEwNzk4MDAwOThCOTgzRkNDQ0U4NzNBQTcwNUZCMzg4REVGMzY0RkMxQgotOjEwNzk5MDAwN0I0RkJGQjY4NjJDNzgzRjFDRUQ2NzAyN0Q2QzQyRkZBMwotOjEwNzlBMDAwNzhGNzA0M0Q3REFGQUQ1RUU2RTc4MkU3ODhFN0E0MUY4OAotOjEwNzlCMDAwQTMxMzdFOTk3NjdDNjY2NTNFNjNGQUMwNzk2MDFEREUwRQotOjEwNzlDMDAwRDdEMDNBRjEzRUFBRUZBREJGOTI2MkY4QjU4M0Q2QzlERgotOjEwNzlEMDAwRkM5RTU4RjlCMEQxQ0ZDRDc2QjIyMDlBODZCMzE1MTY1OQotOjEwNzlFMDAwNzZBMTlGNzAzMDlGQzY5OTZERTVFM0NDMTI3MTdDOUJBOAotOjEwNzlGMDAwQTBGRjU5MTc3NTk0REY4MUY0RDY4MENGOTVDQzI3NzlGNQotOjEwN0EwMDAwNzJDQ0Y1NTA1NzFEQUNCNzFFQ0VDNjQxRkU0NjkzNTZGQwotOjEwN0ExMDAwMEUwOTM5NUI1RjUyNDVGN0JEQzdEQzA3QzZBM0JFQkY4MQotOjEwN0EyMDAwQkU3NEU1RTEzMjI3QzI5RkQ0NTQ0MUI3MjlBNTJGRDVCMgotOjEwN0EzMDAwMjA1RDVBOTQyRThBMkY0Qzc2Q0I3NDVENzg3REI5MzZCMgotOjEwN0E0MDAwNEVEMUFGMTdBM0Y0NEJCNEJFQTg4RjkyM0IxMUY3NTQ5RAotOjEwN0E1MDAwNEU0M0M0RjlDRjcyOUY0Qjg4QTQ4M0FCQzdDQjFDMkY3NgotOjEwN0E2MDAwN0VBRjdCRDYwNTFFQTcxRDhDOTdGN0U5NzNBNTAzNzgxQgotOjEwN0E3MDAwODkzRUVGRDg3ODg5M0VBNzAxM0NBREVBQUFDQjFEOENBMAotOjEwN0E4MDAwNUYxNTZGQkYyRTc5QzkxQTk5RTcxQjhEQjcxRjhBQUY5MwotOjEwN0E5MDAwRTZEMTU2NDFBRjVDOUU1NzA4QkU3RDNCM0I0NDcxQjc3MwotOjEwN0FBMDAwQjc0QkY5RUY0QjFENzNGRjk2RTJCRkIzNThBODYzMERCOAotOjEwN0FCMDAwQ0E0NUUwQ0IzOTQyRjlFODIzRTQ0QzM0MUUwNkY4RjQxOQotOjEwN0FDMDAwM0YyODJFQkZGQkYzQjcyODJFQUFDQTIxMTNGMjI1RUFCRQotOjEwN0FEMDAwMTNDMTFGRUFCOTk5OTAxRjkxNkYyRkYwRUY4NzVFMkRBOAotOjEwN0FFMDAwN0ZBODdDNDVFQjIxM0YzOEE0OEZDQzFGRkNERkM1NUYwRQotOjEwN0FGMDAwN0I3MUNEMTgxNzc2MTY1MjNDQjhDQUQxQTVDNzdCQUM5RQotOjEwN0IwMDAwQzk1MEQyM0Q5Mjg4N0ZEMjNBOUM5MUY1M0M2RTFDNTk2NwotOjEwN0IxMDAwNEY3MTJGQTFGN0Q0QjhBNkRBQkUzRUJCMkI0MTE4NTU0MgotOjEwN0IyMDAwQTQ0NzREQzJERTUxRkRDNDdEOEU1MzY0N0ZBQUZBNTQzMgotOjEwN0IzMDAwMTZGN0ZFNTdBQjRGRjcwODdEM0E1NEZCREU3M0JCNzk1RgotOjEwN0I0MDAwRENFN0NCNDMzRDBGODAxQzlGOUM2RkE0RUZCODRDMEUyRAotOjEwN0I1MDAwM0ZDQ0RGQTM3MDg0NDlGRTZGNzQzNzkxMUYwQ0ZCNjkyMwotOjEwN0I2MDAwNDZBMzA0RTY3NTQ0RTZGM0E5RTVCRUYzNkQwQUQ2RUYzNQotOjEwN0I3MDAwOTVCQkY0MEFGNTA3RkYxNkUwMDM4NjU2RkE5RDg2MERCRAotOjEwN0I4MDAwOEY3MzdEMTM1N0Y0NTFENkU1REU4M0JBQjM0Rjk5RTY3MAotOjEwN0I5MDAwNEFDMkVGNjE2RjVGODNERjAxMEIyQThDQkVFQjk4QjVBMQotOjEwN0JBMDAwQjQ4QjQ1RUVGN0E1MzFEQ0FGOUQ5Q0ZGRDYxRDA3Njg3MQotOjEwN0JCMDAwREQxRkVBNjlERDY4NTcwMzlENEY5NjlEMEUwNUU3Q0ZFRgotOjEwN0JDMDAwRjZEQjIzRkRFQzdERDlGN0RBOUQwMEI3N0M2OTZDMDgwNAotOjEwN0JEMDAwRDE3QUMzQTM3RTAxRjNFQzMzNTc4RDA3NEI4REVENzM0MAotOjEwN0JFMDAwMUYxOEY1MEJDMEM3NDY3M0Q1MDRDQ0EzQUNCNkRGREJCQQotOjEwN0JGMDAwM0UxRkU1REFEOTVCMjY2MEZDMUJFQ0JDNTZENEI3ODM4QwotOjEwN0MwMDAwRjZERkI3Q0Q4Q0JGM0I1REVENzg5RkQ2MzFBMkFGQUIzMQotOjEwN0MxMDAwMDZCRkJGNUFFREUwRjc0OEJFRDFCRTg3QzY0QzQwN0JEOQotOjEwN0MyMDAwMzlFQ0MxNzM0RjM0OUYwQzIyREQ0QzE2RUI2NTE3MkZENgotOjEwN0MzMDAwNTFGQzQxQkQ5N0Q5NzM5RUQzNDdGRkY4NDAwRkI4OEZEMQotOjEwN0M0MDAwNkJCRjVDNDVGNzIyQjk3REJBRjkyNkEwRDU3NTdEM0M5RQotOjEwN0M1MDAwN0YwQ0RCRjE3QkUwNThCRjI4ODYxRDAwRjM1Q0U3NEIwRgotOjEwN0M2MDAwQzZGM0VCQ0FCQTM3ODZERUNERURGQjM2RTA4M0U3RjYyNgotOjEwN0M3MDAwNjQ3MEJDNDRCNzZGMUVDM0VEODJCOEFGREVDRjcyOTJBMgotOjEwN0M4MDAwM0RDMEY1N0ZCMEMwMTJGMzNCNTVCN0E5RkFEMjFBM0JGRAotOjEwN0M5MDAwMEY0NTJENTU3OUE1REEyMzgwNUZCMzIxMDJCRjlCQzYxRQotOjEwN0NBMDAwNzBGRkZEN0NBOUE3MDNGMUY3N0RFNzdGMEE3MTBCRTU2MwotOjEwN0NCMDAwRjE1MkNGRjYzMUMzOTFBRTA0NUZBRDk3NjNDNjAxRUVDQQotOjEwN0NDMDAwMUNGM0EzQzUyQjZFNDExM0VGQUJCRTczRTk2RkU5ODZCRQotOjEwN0NEMDAwQTZEQjQxNzQ2NTUwRTlGODIxQTJFM0ZGOEJGNDdCRTI1NwotOjEwN0NFMDAwRkJEMEVGMjA3OTc0RkUxNEREQzM0N0QzQjE0QUJGMDM0NAotOjEwN0NGMDAwNzRDOEU2OUI5MjA2RTg3OTI4QkFDMTdFOEI5MjA2RThBMgotOjEwN0QwMDAwN0FBODdFRkJDRUJGMUY5M0RFMDdDNkU5QkQyQ0REQUI5NAotOjEwN0QxMDAwRjRCNzU5RDA5MTdBMEY1NDI5Q0U3OUZERDc4Q0VDRkU2NwotOjEwN0QyMDAwQTMzRDQ2RjU3N0M2MzU3RTExRTgzRkNBQTNBRUIwNzJEMwotOjEwN0QzMDAwQjk3RkI0Mzc5N0ZCMTkzRDY2QkE5RjlBRTk1RTI5QkVCMQotOjEwN0Q0MDAwQkIwRDVEMjNDNkFEMTFGMjdFQTZEQjc1NTkzOUFGRUFENgotOjEwN0Q1MDAwMEI1NURGRkQ0RjdDNzc0Mzk4MDA4MDAwMDAwMDAwMDA0QQotOjEwN0Q2MDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZFRDdEMEI3NDU0Qzc1RQotOjEwN0Q3MDAwOTU2MEJERUVENzNGQTk5MTlFM0U4ODE2OTJBMDg1QzAyMgotOjEwN0Q4MDAwMTY0NjQwRUJGRjA1M0Q3RDEwMzIxRkE3QzExODBCOTAzMgotOjEwN0Q5MDAwNEM4QkUwMDQxQjQ5REQ2MEUyOTAzRDlFQTEzMTMyMTIyNAotOjEwN0RBMDAwOUZDRDYyMUZDQzc4NjZCRDM5MEQwMzhDOURCMTc3QzAyNQotOjEwN0RCMDAwNTYxQzYxMEJEQ0UyMzczODRCRUNDNjcxMTg5QzRDM0MwRQotOjEwN0RDMDAwQzI0MzA4NkM2Q0QzMThDNzQzQjI0QUJDRjdERTdBMEZDMwotOjEwN0REMDAwRjU2Qjc1MEJEQjQzRUJDQzY0NTdFNzQwQTk1RUJEQUE5RQotOjEwN0RFMDAwQkE3NUVCRkU2RkQ1RDM3QTMzNjNDQ0NFRDgxN0Y4NTM4MAotOjEwN0RGMDAwM0RCQ0FDMDgxQTE5Q0I2NUY0RjMwNUZDREJFMkYyRUJGMQotOjEwN0UwMDAwMjUyQjYzREZCOUVFQ0JCNDQzRjk5MzJDREYwQTY3MUU1MQotOjEwN0UxMDAwNjNBRjVGMzVDQUFDODhCMUFFQTlFM0Y2RUFCMzg3RkFCRgotOjEwN0UyMDAwOEY3NTA4OEMxNTQzN0IxMjc0ODY3NkVGNTRDMTc3MDBFQQotOjEwN0UzMDAwMUUzMUQxMjcyRTlEMUU3RERFOUY0Q0ZEQUVDRDk1ODczOAotOjEwN0U0MDAwQjNGQTMyOUQ2MzY4N0FBRjNFOERCMTU5Rjg5QjBFQ0E4MgotOjEwN0U1MDAwMjA5MzJEMzNBMENDRUQ1QUM3MTJBMENDMkNGOTM2OTYyNgotOjEwN0U2MDAwNEM2MjJFQjE4NDMxOTNGMjlFRTlDQTZCREYxNUYwMzk3MgotOjEwN0U3MDAwOTMxOTgzRkVFQjk1RjU1NjMwN0Y1RDBEQzAzMUNGQ0M2NQotOjEwN0U4MDAwQkNGMTg5Mzg3QUQzQzlDOUQwNUVDRDk3MEFFMzY5RDdFNgotOjEwN0U5MDAwMURERTlGRkVBNTI5RjNFNDMwMzYyRTU3QTBGNUNERkI1RAotOjEwN0VBMDAwOENGOTRDRjA2Qjc1NkVFQjAyMzYwM0U3ODc3MUNDRDEyMQotOjEwN0VCMDAwQzdBOTYwMUU5OUU5MDExREU1NUVEQjJBRTgzRjZCQUFCMAotOjEwN0VDMDAwQzlFMUU1QUY0QkY4REU2Q0M2REYxQjNFQ0U3QUM2NEE5MQotOjEwN0VEMDAwODZDNkQ5RTIwOUM4RkE1NEM2OEU0OTRDRTkyRjVCNkZCMQotOjEwN0VFMDAwQzE2N0U3RjhDMzdBODVCMjNFNTM2RUNENTVDNENCRUI3QwotOjEwN0VGMDAwOTJDN0UxMDc3ODY3MEY4NjhENkYxRENCNTgzQTYzNTU5RgotOjEwN0YwMDAwOUY2OTlGOEIwRTZEN0QzODVDMzBGQjU4RkFFNTRGNUZBMwotOjEwN0YxMDAwQzA3QzQ2MzNDNzhGMzk1RDQ3Rjg3OTVEMzJGQTkwM0VCMQotOjEwN0YyMDAwMkFBRUQ0RUU2MjkzMTg0Qjk2RUM4N0ZDRjBEQzJBOTlDQgotOjEwN0YzMDAwMUQzRTA1MzYzM0Y2NTM3RUFGQjgwMjA0MDRFRDlGQzJGMgotOjEwN0Y0MDAwQkYxNDgwNzM5QjZFRUY1QTI3RDBERDE2NkM0QzFGQTJCNgotOjEwN0Y1MDAwOTcyNTBCNEMxQTM4OTYyRTQ5RDRENDlCOUFDNzY5RUFCOAotOjEwN0Y2MDAwQ0I1NzRGRDRFQzZGNzNEQkREOUFGQTQzMUI2NjZBRUE5QQotOjEwN0Y3MDAwQUUyNzRBMzVGNTU1OURENTlBRjE1NkVGOUNBQjY5RkY3MgotOjEwN0Y4MDAwRDZFRTZGNjhFQTZCOUU3RjUwNTM3Rjc0RkZDQTExRTk4QgotOjEwN0Y5MDAwMjIxQTVGODhCNjkxRTk4OTc5MDUzQkQyQkY4ODREM0FBQwotOjEwN0ZBMDAwRkNDRkM1OUNEM0EzRjdGNzIxN0ZDMjdFQkQ2RUFGQjdEMAotOjEwN0ZCMDAwQUQ4MkZFRDU1NzNGOERFN0ZEQjRGNEM1QkM3MjAwRjkyNAotOjEwN0ZDMDAwQTM1NkQ5MTc5OEM3MkI0MDdCOEQ1MkFEOTVCRTQ1RjQ2QgotOjEwN0ZEMDAwNUU2MzM2NDVFNDFCOTVFRUI2MEE1NjExQzdBRjY2REEwNgotOjEwN0ZFMDAwRkRBQUIwNkRCREFFNDc3RTJFMUFEMEVCNjFCRTU5MzdFQgotOjEwN0ZGMDAwQjVGQzU3MjEzNUZDMDZDNzY3Q0NBRkM3RjU4NENCQTVDOAotOjEwODAwMDAwRkZFRTE4OTM3QTM5OUU2MEI1N0YwMUZDQzRBQ0M5OEMzMQotOjEwODAxMDAwOTU0N0M3QTM0QUE3Qjc1RDM3NjM1RjZGRERDQUZDRUEyMAotOjEwODAyMDAwN0EyQjU4QTAwRUU5M0VEQUJBNjczQkZDN0E5MjZCNTE4NAotOjEwODAzMDAwRDYxREJFNUUxNUZFRUY2Rjg2NUY4MUVGNUZGRjIzRjNGNwotOjEwODA0MDAwRUQxMzEwREJCMjg4RkNFNkRGNURFQkNGQjUyQjQwMDIxMQotOjEwODA1MDAwQkMyNzE1N0FBODkxODIyNzEyOEI5MDBFOTgwMzY1ODMwRQotOjEwODA2MDAwNzE5MEY5NTEwRUQ0MzNDMTZGODQ1Mjk2MUMwNEFGMzgwRAotOjEwODA3MDAwNjhFRjM0MzAyQUVCNzE3RTcxMTA4NkE2RDI0NUVCMzU1RAotOjEwODA4MDAwMEVDQThEMjg2RjQ1MkNBOUVFOUNDN0VCOEUwNjVFODcyNQotOjEwODA5MDAwRjdBODJFRDVGMkJBRTczRTVFODc5MkVBNUUyN0FGNDM5NQotOjEwODBBMDAwM0ZBQUVGNUE4Q0Y1Q0VCOEMwODk0NDAxRUJCRTI1NThFMwotOjEwODBCMDAwMzcwRTFFNUFDQTRCRkYwNTgxNEE5OUU0OTYzOEU4NUQ4RgotOjEwODBDMDAwQTdBNzdFRUMyMkFGMDczNzcxRkFEMEYyODMzMTVFRjZCNAotOjEwODBEMDAwRjlCMzE5NUYzRDNDM0Y4MUJGNERDMkZENUNENzZGMDBENgotOjEwODBFMDAwM0NENDhBODJDMzBFRUZENTBDMzI4NzNGMTVGN0Q1RTQxNgotOjEwODBGMDAwOTBEOTk3RTAzM0EwMzMzMTZEODhDRjhDMkM5OEIxNEE1QQotOjEwODEwMDAwMjAzRTc5MEZGMUFEQ0FFREUxRTM2OEU5QUIxRUY1NUEwNwotOjEwODExMDAwMDFFQzNCRkNCRTMxMTlFNTMwQTdBN0ZBQjJFMDEyMkMwNgotOjEwODEyMDAwRjFGOTEzRDAzRTdCMzJGQzRCMUU0RTFGMkE1Q0EyMzI2QgotOjEwODEzMDAwNUZBNUI1NUY4RkFBQjYzMjE4MjZCNzU5MTdEMTU5ODVGMgotOjEwODE0MDAwNzk5RDJDRDk4N0NCNkQ3MTUwRTUyRjJFMkZDMkUxNTYyQQotOjEwODE1MDAwRTVBRDM5MUZGODZDMUFGQjNBN0M5NkI5MEE2QUIzQUVFMgotOjEwODE2MDAwQkVBQkYwRDlCQTMwM0U5M0FERjc5Njg0RjAxOTEwMzIxOQotOjEwODE3MDAwRDNGMEQ5Qjc4OTlFNkUyNzVGNEUwOTgzNzUyNjE4NEZCNQotOjEwODE4MDAwRjYwQ0U4MjNDQTk5NTRDMDQzNDIyNDNFOUJGQjFCQjIyMQotOjEwODE5MDAwMUZBMkM4OTczN0YwMTc1ODY3NkU3RTk4OUM1MUY0NUMwMQotOjEwODFBMDAwQjVBQUU3RkVBOEIzQTJEREUyNjc3QTExQ0I3MDdDQzg1RQotOjEwODFCMDAwMkMzQjMxRDI3M0I1M0NCRTA5MDZCQTZCQTgwRUY4OTBDMQotOjEwODFDMDAwMEY4MUJFNjMxRjE1REMwNkNGOUJDOUNFNjJCODVBODBGMwotOjEwODFEMDAwQzdBQUUyMzE4QzZFQUQ3MTJGOUQ5MEVDQkMwNUY1RUMxOQotOjEwODFFMDAwMTg4NTZFNEU2NkE3MTFERkMzNzZCREM3NDJFNDlEQjUwNAotOjEwODFGMDAwRThDQkYxMDFDRDM3MDlDNzczNjYyMkJGRDU0MERCQzY5NgotOjEwODIwMDAwODJFMUZEMzNCMTBGRjA5OTM1Qzg3QzNFNzhDRkVBMDhBMgotOjEwODIxMDAwMDg1OEFGNDZGRDlFOERGNENGRUE1MUZFNTc1RjA5RTgzRQotOjEwODIyMDAwMjVFQUE1RTU5NzVCNzQwMEJGM0YwMUE0NTc4QjdDNTFGRAotOjEwODIzMDAwMzA5QzJFNjRFNkQzRTM3RTdDRDVGREFGQjYxRjM0OTAzMAotOjEwODI0MDAwQkMwRURCRkY5QTQxQjBDRjAwNEUzOUQ1RTQyMEZBMUFCQwotOjEwODI1MDAwNjQ2NENGQzg0RUMxQzc0OEJFQUMyMUJDQThGNkUzQUQyQwotOjEwODI2MDAwRjYyNjY4MTdFODkxMkU2MjdCQjM0MEY2RDBBNzZDQjM3MAotOjEwODI3MDAwODFGMzA1RjNGQTU1N0E4NkU3Q0JBRjMwMzkxMUVEMzQ0NwotOjEwODI4MDAwQ0JGM0Q0N0U2QzEzMjNGQUE4QjY5NzNDNTU2NzQ3Qjg1NgotOjEwODI5MDAwMDY3NkNDNDRCODI0QkQwQTk3M0YxNUM3QkQ2MEUyNzA4RQotOjEwODJBMDAwRjlEQTA4N0ZENTBBRkVFNDQxMUQzMzQzQkJCRjRGNjlBRAotOjEwODJCMDAwMEZBMzVGRkYyMEI3RDNGQzRGQzQyQjcwRERDOEYwNDM4MgotOjEwODJDMDAwQkYwN0QwNEUwNjkzNjhFNUREMDNGRjQzODRGN0RDNjkwMgotOjEwODJEMDAwNzczRkRGMDE1REFFMjhGMEZDNkY4NTZFM0ZEQTI0NTFGOQotOjEwODJFMDAwQjkzRUNERjVGRDdDQTBDNzdGOTE2RTdDRTI2NkM4MEZEQwotOjEwODJGMDAwMzk0NEY3RDVGNkNGMjc5MDFFNTJGMUQ5Mzc4NkY0MTBCRQotOjEwODMwMDAwQzI0REY4RThCMzQ0ODNEQkFBMTA3NTM4QkMwQUJGRTU1OAotOjEwODMxMDAwOENDODU3MkE5QzJBN0M1NzdDN0FBQjBCQzY3QkIzRTc2OAotOjEwODMyMDAwNUYxMzFDRjYyMUY4NEI0NUU3N0U4NEZCQ0RDMTRGNjdGOAotOjEwODMzMDAwQjg4OEVGOTIzNTc2NjYzNEY5NjY1MkZDODhBNDRDOTY3QwotOjEwODM0MDAwMkJBNkEyM0U4ODczQ0M4NTc1OENDQjc0RDFCQTRDMzZFMwotOjEwODM1MDAwQTMxREZEMDI0QjI3OTNGMzYwNDg3MzgyQ0Y4Q0YwRjc4NwotOjEwODM2MDAwQTczN0VDRDI0M0ZCRDZBOTIyMzNDMUZCNUJCM0JDMzZBMwotOjEwODM3MDAwNUFBN0ZFMDk4NkVCOTk5M0U5NjEwM0Q2RThGMzc3NjU3RQotOjEwODM4MDAwM0UyOTExOUM4MzUwNDdCRkM3QzZGMUEyOUY2OEY0RjhFRAotOjEwODM5MDAwRTBCOTVGQzdENjFDMEFDMUNCQzEwMkVFOEY5RENERTcwNQotOjEwODNBMDAwRTVEQTE3MUVEOTc2Mjk4NDNGREEwRkFERDNENEREQkRDNwotOjEwODNCMDAwREZEQjc2Mjk1NERFNkUxMDQ0REM5NzM2ODU4RURCRDkwMAotOjEwODNDMDAwQzAwNEY0NUY1QTQ1M0JFMUExNDMzNzkwODZGNTZCMkMxRQotOjEwODNEMDAwNzg3RTBBQUUwRkU3OEYwMEZGM0ZFNzVCNjIzREZGRDI3QQotOjEwODNFMDAwQTk1MEY2OEZFMUZFNjlGRjI0MUZGOTBERUFGQzFGMkI0RgotOjEwODNGMDAwRUJGRjM4NUYxNzczMzhBNjAxMUVCQUIzQkZDNTcwOUY3NQotOjEwODQwMDAwNkE2QzdDM0Y0RDUwNzI3QUU2NzI0M0Y1Nzc4NjlFNzNCNAotOjEwODQxMDAwNzk1MUE1M0UwRjNBREU3MzEyMURFOTFDQTg3NjRDOTlERQotOjEwODQyMDAwRjYxMUU5N0QyN0QyQkI3MUE4QkVCNTQ4RDdFODhCRjAxRAotOjEwODQzMDAwRkU3MzA1MjJDMTdCQzAxNkI5M0Q1QkExOTc5RDEzNUNGRAotOjEwODQ0MDAwREREOUU4REYzRkFCNzM2Qzg2MjVDRUNCREMzQTFFRTU4OQotOjEwODQ1MDAwRkQ1NkRCN0FBMjUzRTZFMkVCNThDMDM4QkZDRUNCRjQzMAotOjEwODQ2MDAwNzgxOUU4RDE3OUZFQjc4MjQyMkFENjhEQ0NDMjg2RjgzNwotOjEwODQ3MDAwNTdGNTBCRTc4OTNFRDEwMUZEQkJGMkQ3OTk3MURENUQ2MAotOjEwODQ4MDAwQjZGNTY2MUNDRjg0RDY4MjZFMzgzQ0VBQkEwRkVDRTZBRAotOjEwODQ5MDAwRjNDRUNCRjQ4OUUwRTlCMkI5Qjk3QkM1MDFBODNGQTMxQgotOjEwODRBMDAwQUM3QjVFRUUzQTZBQUY2QUY0OUYxNDA5N0ZFMDY3NDNFMwotOjEwODRCMDAwRERFODY4RjVFMjNDMjY4N0JENDZDMjNBNzM2Q0M2QjI3OQotOjEwODRDMDAwNEY3ODg5RUMxMzU1QkYwREU5NEZBRDlENzJGQUJBOTEwMwotOjEwODREMDAwRTQ2M0Q3MTU5RENGNDRGMjUzNUUzMDA3REU5RkFGQkNGNwotOjEwODRFMDAwNkQwRDcyN0JCRTZCQkZBMzVGQzRGNzFDMDJGOUUzRjM5MwotOjEwODRGMDAwNzNCRjRENzY5RDM1NzcyRUI3RTdCMzU2Nzk5MTU0OTg3MwotOjEwODUwMDAwNEZGMEExM0YzMTRGQzU1QjlFNTY1RjE5MUQxN0I3QTBCNQotOjEwODUxMDAwRkEzMERFRDRFQUQxNTkyQ0MwOTBCRTJBQzJGQ0YzNzBFNgotOjEwODUyMDAwN0QzQkJCNDBCMUQ3NzI1OTMxREEyQjJEMjZERjYzQzhCMgotOjEwODUzMDAwMEY5NjBENDIzQUMyQTFFMjc1NDU4MThFRTgyMDg2N0NGNQotOjEwODU0MDAwQjA2NzI2OTQ1REQ5NjVCNEFGRkFDQ0QzMTcwNDk4NUZCMQotOjEwODU1MDAwMTdERjY2NDNCRUQwREI4QzdFQzQxQkIzOEExRjBEQTgxOQotOjEwODU2MDAwRjM0REMyRkYzMzI1QjJCN0IwOEU4NDJGN0QzOTc5RkMyRAotOjEwODU3MDAwNkU5NkM3ODZFQkVDMzJCMEE2NDhGMkE3QjY4MEYzRkQ0NAotOjEwODU4MDAwMDc1OTdFOTIwRkQxREE4RDFCMDREMjdCQUE3QzM3NjYwNQotOjEwODU5MDAwMzJEOTM3QzI3OERCOEM1Q0NFODA1RkQyMkI0MEJGM0VCNQotOjEwODVBMDAwQTQxN0EwRkYxNzVBQjNGN0U5MDVBMjdCMTlFNUYxQURBRgotOjEwODVCMDAwNTJCMUVGMTIwQkI5MUZGRTY2ODE4OUNBOTNDQTdFNTQ2RAotOjEwODVDMDAwN0Y3MTM2QzMzNTgyRkNBRkFBRjIzMDg0REY5NENBQzcwQwotOjEwODVEMDAwMzM2NUYyRjE0QzIyMkY3Mzk1NzEzRjJFRTI3Q0RDNUMwNwotOjEwODVFMDAwMTQ3QkI5NUY5QTMzN0FGQjFDNEI3QThEODc1MjI4OTBBMwotOjEwODVGMDAwRTg3OUREOTg4NzQ5MkVDNTEyNkYzOUEzODgzN0EzNURDNgotOjEwODYwMDAwQTEzRjA3QTcxM0I1RkQ3MzQ1REVGRkFBMjBFNjc0QjJBQwotOjEwODYxMDAwQjQ3MjE0RTU0MTJDRTlBNEUyQ0Y4M0RFQ0Y5N0ZGNzk1MQotOjEwODYyMDAwRUM0N0RBNjhBRUUzQTM5OUYyRDQ0MkUwOTNCRjlDMkUwNAotOjEwODYzMDAwREY4M0U1OTZENzIzREJCQkYzNjMyRjc3RDMxRTgwNzJFRQotOjEwODY0MDAwRjEwNERGMzcyM0U5QjM3OTg1QjE5N0ZCNEJEMUJFNDhGRAotOjEwODY1MDAwRTFGNjQ1RjhGQ0NCMTUzRDE0NEI3OUQyMDQ2NUIzMTExNgotOjEwODY2MDAwRDYxRjAxRkY4RjhFQzJGQ0NCNzM1MEVGNzI3QjgxRTU2QQotOjEwODY3MDAwOUVCOUE0MEZCMURGRTE2N0IyMkVDNDNFMDY3QjE0MUM4NQotOjEwODY4MDAwNDFCNDQzMDUzOTkyRERFRDhERkQ3RTJEN0Q0ODNGNjQ3QgotOjEwODY5MDAwQUZDQzYxNUMxRkE4RjMyRjJDRTFGODdBN0ExNEUwQjAxQwotOjEwODZBMDAwMDBERUVBMjU2RUFGOUJDMkUwNTBDQkJGMkQ4Q0JEN0RCNgotOjEwODZCMDAwMkFFOTQzRTA0ODA1QkIxRkNCMDU0MjQ0N0JBRkE3RDA2NgotOjEwODZDMDAwMTg3MzdFMUEwQjc4RDlFMjYwOEQ5MUU0QzlDOUQ4RUY4RQotOjEwODZEMDAwNEI5QTBEQ0FBQUU5Q0VEMzI4RDc5NjRCODdFNzYwNUNBMAotOjEwODZFMDAwRjlGQkY4MUZFNjFCRDI3OUJFNjFBNUMxRTU0NUZGQUVENwotOjEwODZGMDAwNEJCMjNCQkM3NjhDNDdBQ0EyRkFDQTdDQkI0M0FGNTJCMAotOjEwODcwMDAwM0VCNkRGOTQ3Q0RCMDU2Q0Q3NTE3REU1RUYyNDFGREFBNAotOjEwODcxMDAwQzNERjE3RDY5REM5QzZGMTM2RUIxREZCMThDNjlEOTU2NAotOjEwODcyMDAwN0M4MzhERTcxQkFDMzY5RTlGMTA2RDNDRUY2MEI1MjlCNgotOjEwODczMDAwNzkwNzFCQ0YzQjU4NkQ0QURFQzFDNkYzMEU1NjlCOTI5QwotOjEwODc0MDAwNzdCMEYxQkM4M0Q1QTZFNDFENkMzQ0VGNjBCNTI5NzkwOAotOjEwODc1MDAwMDcxQkNGM0I1ODZENkFERUMxRDMzODE1RTM5MTM2OUVCNwotOjEwODc2MDAwNzdCMERBNzhERUMxNkFFMzc5MDc5ODk3RTcxRDZDM0M0OQotOjEwODc3MDAwRUYwMDcwRjFCQzgzMkQ3MkRFQzEzQTk0NzcyMEZGRjFENwotOjEwODc4MDAwMTg5NkE0NjdCODVGN0Y1NEE5Q0YwNjdCREQzNDYzNzg2MQotOjEwODc5MDAwNUVCNTZBRTdGRTJEMTgxN0FCMDk3MkZDNTUzOTc4NUU5NQotOjEwODdBMDAwRDkxNEI0NzcwQTMwN0U0NTY2QjBERjA0RkU2NTQ1MTEwMgotOjEwODdCMDAwQzNGMEQ1QjBGOUMzRjMxM0RERDlFN0JEMDJGQUEzQjAxNgotOjEwODdDMDAwOTcyOUJDMDNFNTI5RUExODdGM0Y3Q0ZFNjE3MTU3M0I3RQotOjEwODdEMDAwOEZFN0Q2NjU3RThCRjAzQkJCMkM0ODc4QzNFNzE4ODdDNAotOjEwODdFMDAwQUQ1M0YyMTNCNTU2QURGRjJBN0ZFNkIyRjk3MTVGOTkyQQotOjEwODdGMDAwRDQ5OTA4Rjg5MDQ1NkRCQjg4RjkyRjhDQkI1RUYxRDdGMgotOjEwODgwMDAwNjFEQ0I3NkE1MDFCNzcxNTMzMUJENEI4M0NDRjRCODQ1RgotOjEwODgxMDAwQzEzOURGRTExQzVGMDQ2QjZBMDE3RjJBMDFFNkNGQzEyOQotOjEwODgyMDAwQTQxNUFFNTMxMjdDNUVBNEI3REQxQjg4QkVCQzNCNDVDRAotOjEwODgzMDAwQzcxNDY4QUEwNDY0NjA5RUE1MTIyMDZBODZEMjU0QzYzMgotOjEwODg0MDAwQUNEMjRDRjI5QjM4OURGRUQ3RDRCREYxRDkyODBGMDM5MgotOjEwODg1MDAwN0E0NjA0NkMyMzNDQThGOTg1MDQ1OEJGMzQ4M0ZDMkI2QQotOjEwODg2MDAwRjJFRjJBMzNGREJGNDczQTUwRUI4MkNDRjMzODgyNURGQQotOjEwODg3MDAwNjJDRDgwMkZGOTZFMjY1QzM2OTNBQkNFOTA2RkVCNDVDMAotOjEwODg4MDAwRTYzNUMzNzM0MUU5Mzc5QjA1Mjk0RTJEMzM4OUYyNzZDRQotOjEwODg5MDAwQjVDQzQxNjVEMTc0NTc2OTExRjBBM0NFRUM3NUUxN0E3RQotOjEwODhBMDAwQUFFQzY2MDlGOTg1M0RFRTNDREI0OEYxRTQ3QUU5MzI1MQotOjEwODhCMDAwRTA0OTAwRjZGODYyREE0ODc2OEFDODJFQUJGODFDNDUyMwotOjEwODhDMDAwQkI0ODFGMkY3ODIyQzlBRDhBRDhFQjYxQjI4MzJBMEEzMAotOjEwODhEMDAwMTlDOUM3MkQyQ0IyRkM3Q0FDODRDQkNGMzc0QjVEREZFNAotOjEwODhFMDAwNDQzQ0Q3RkIxNkQ1OEY4NzJFOEZCRUQwNEE3OTlCNkQxRgotOjEwODhGMDAwNjFGMUMyNUJGRDhBNjI2RjQ3MjRFNzkwM0RCOTAxRTlFRgotOjEwODkwMDAwN0FGMTA0OEYwREUxODgxNkM3NzgyQUY2RjBFQzQ5MUIzRQotOjEwODkxMDAwQzFBRTdCNzYxNEVDNUFENDQzQjdFQzJBRkI5OTkzRkE5OAotOjEwODkyMDAwNTAzQkNBQjEwRTRGQkFEMEVGQkE5MjkwMzhBQUREQzMwRAotOjEwODkzMDAwM0MxNDY3OEQxQ0FGNzk2OTE0RTIyMDk5QThCRjEzRkUxRgotOjEwODk0MDAwMEI5RDYzRUEzQTAyRkI4N0U1RkJCQzU0RTFGODhFNDJEQgotOjEwODk1MDAwODdFMzRCNjNDRjE3RDNBMEQ0MjczRTYxMEI4RDFCNzdFMgotOjEwODk2MDAwNTkwNDBFOTc0MUQwQzBGNUI5NjJGRkZEQTAyNEY2NzhGNgotOjEwODk3MDAwMkE4MTcyN0RBOUZDMkVGMjYxRDU3NEY5Njc1OEFBN0MxMAotOjEwODk4MDAwM0JERkUxQkE0MEZDMjkyREFBNEYwMkY5QkM2NjdGNzY5NQotOjEwODk5MDAwMDFFQTg5MDZEQjVFRTMyQTgwRjdENTUyRjlGRDIyM0EyNwotOjEwODlBMDAwNkZGNDFGNUIxRTZFQjExRThGNDdCQ0Y3QjkyMkNCQTNCRAotOjEwODlCMDAwQkIxMTA5QzVFNDRGREUyOEUyRkVFNDY3ODQ4NzI4RkU4OAotOjEwODlDMDAwRTRBRjhCNjNCRTJGN0JFQTczODZGQ0M5NzBGRTFGNUIyRQotOjEwODlEMDAwQ0NFMzlENjM0NzAxOEUwNjI4NTc0NkYxRUJBNjhDQzI3NwotOjEwODlFMDAwRkM4RDVBQkY2RUJGM0U0NENFMTA0MTg1RTY2OTZDRENGQgotOjEwODlGMDAwQUY2MzExRkMzRDk3MzVCQUJGMzc3QjE0RDZCMTEwRjM4NgotOjEwOEEwMDAwNzFCNTkxRjVEQTdEQzUzMUY3QUY5NjdFMDNDQTA3MzNBQwotOjEwOEExMDAwNUJGREE5RDBDNEJDMzA2RkRBNTBCRUIyQzlENUFGMEY3MAotOjEwOEEyMDAwOEQ3MzNGMzhFMUUwMzdFNTA4NzA3RUIzMzhFNjcyRjJDNwotOjEwOEEzMDAwN0M5QzFFRjk3NUJEMTlFMUU5NkEwNjdFOERCMDVGMjU0MwotOjEwOEE0MDAwMjVEQ0ZGOUIzQkUxMTE5Njg4NzY2MzNBNDNGNzExRTRGRQotOjEwOEE1MDAwMDlDRjM3MzYyOTdFNjM4M0EyN0Y3NjJBNzJENDUzMkNCRQotOjEwOEE2MDAwNTJFOTJDRTVGNUI5NTFFOEZBRDdDQUZCOEQ0QTlDQjYxNAotOjEwOEE3MDAwNTE2MkYyMkI5MUY0N0ZFQ0U5RTZGQzM4MjhFN0M2NzFFRAotOjEwOEE4MDAwMzhFRjBERjNDRkRGNTNGNEM0OUVEOEQzQ0Y5RTBDQTBBNAotOjEwOEE5MDAwOTNCOUI1OTFGMTc1MzBGNjc0QjE3NDAyQ0NCRkQ0RjZDOAotOjEwOEFBMDAwRjQxQzkwRjhCMDJGOUIwRDk0NUY5QzJFQkY1ODBDRUZEOAotOjEwOEFCMDAwNkQ4QkMyNTc5RjJCNzg2OTg2M0UzQUIwRkI1QkEwMzQyMgotOjEwOEFDMDAwNDJGOTEwOTA4MTU0NDBGQUVENTVFQzZGMDE4RTMwMTQ0QwotOjEwOEFEMDAwMjAwNERFRjFFOEU3RjQzQUU0MUU3Q0NFNUM2REU0N0YyRQotOjEwOEFFMDAwODRDODFCQ0E5RjU2OTkzOURGNzRBNzgzRkY4OEZFMEU3RQotOjEwOEFGMDAwMzNEMzM5OTNBRTIwQ0Y5Rjc2NjVGMkZDNjgzODNDNkE1OQotOjEwOEIwMDAwRkVGNDZGNDU4RjE5Q0Y3MTc3NjUxNkM0ODVGMkRERUJFMgotOjEwOEIxMDAwOUI5ODI2NkZEQzc1ODVFNzg1QzE0RjhBRDNGQTQ5QzlEMgotOjEwOEIyMDAwRTQyNzg1OEY5RjkwQjk3NDVFQTg3RjI0QzhEQzFGMDI1QwotOjEwOEIzMDAwN0YyNjUwNUMzQ0U0MTdBOUZFQ0Y5ODdDRjk1Q0YxN0Y1RQotOjEwOEI0MDAwMDJGRDFEQ0Q5RjExNDc0OTBGOEIzMDA3M0VGRkRENzQ5RAotOjEwOEI1MDAwRjlERjEwOEYyM0QwRDMxRkEzRDBEMzlGQjBERjdGMzQ5MgotOjEwOEI2MDAwN0E2MkNDMTFCNzY4Q0NGMDcxQkJCMjFFQjdCNThFNzAwQgotOjEwOEI3MDAwM0YyMDIxRDMxOTkxQ0U1NEZBMDI3QTlCNTAzMjc2RThFNQotOjEwOEI4MDAwN0QyMUYzQjQ0QTZGMTM0QjhBQkYzRUJENURDMEJFRjA3QQotOjEwOEI5MDAwRUZBQ0UxQUZFQ0Q2NDlEMUZCOURCNTdBQ0MyODBGRkEwQQotOjEwOEJBMDAwMzJENzlCRjE5RUM0RDQ5OTJFMDdDRTZCMTE5OTZDMDBERAotOjEwOEJCMDAwMzhCQjVDM0UzMzlFN0IwMDNCMkZCRjY0ODRCQ0MxQ0Q4MQotOjEwOEJDMDAwMjIyRTNGN0VBREVDRkZEQzA5OUNGRjJBOTYwQkJFN0Q3QQotOjEwOEJEMDAwQzA3RjRENkM5NzAxRjc0RDdERkY1ODQ5RUNGRDg4N0JCOAotOjEwOEJFMDAwNzI0OEVFMzU5NjhDMjBGNzVFNTZGOEUyNzMwNTVGMkJERgotOjEwOEJGMDAwREFENjI5RTc5OTU4NDRGQjY3NTVFQ0ZEOEMzNDJCOTQ2MQotOjEwOEMwMDAwNzM1MkQ3NDVBNEUzNUI3NDg3RTc4NTIyQUM2NzE0RTIwRgotOjEwOEMxMDAwRTBFN0M3RTRFMDNDNENDRDJCNkQ0MEZDM0U1NkM0RjE5MAotOjEwOEMyMDAwMTdDREZFN0Q2QTE0RkNCMzg5MDBENzRBRjY5OTAxRkQ4MQotOjEwOEMzMDAwNjk1OUZGQzdBQzQ4RTcxMThFMTVEOTM5OUMwNjkwMDNENgotOjEwOEM0MDAwODBERjk1NTlCQUI3MzFGQ0Q5OTVBNEI1ODdENEY3NjdCOQotOjEwOEM1MDAwMkJGRUFFNjcxNEU0Njc1MjBFQ0VDM0YxMUE3RTBFNENBMwotOjEwOEM2MDAwMkRDRkM1M0UxRUIwQjQ4OEZCQjlGRjgwRkMwRUZDNzM0RgotOjEwOEM3MDAwQThBNDU4RTNFN0ZFQTg2NDY0M0ZGN0I1N0Y4RkRDMUEyOQotOjEwOEM4MDAwNTBFOEE4Q0IxMUQ5OUU3RDIxRjZGQjQwRTdFMDYwRERERQotOjEwOEM5MDAwRUY3QzE1QjkxMTZFNkZBQUU1OUVEOERCN0I2OTU5N0ExNgotOjEwOENBMDAwOUM4N0MzRDFDOEI0RTcyNDZFRjFERjI4RTAyRDVEOEYyNwotOjEwOENCMDAwRjM2OEU5NzcyNUUzRkE1Rjg1QzM1ODFBRjM3MzhDRTcwNQotOjEwOENDMDAwNjdFODMxRkZDM0Y5Nzk3REE5MkJCRTk0RUMzNjhGMTk4MwotOjEwOENEMDAwRjUzN0Q4MDcxNDY3NUZCOTM5MjUxRkNEMkFEODY3NkJEOAotOjEwOENFMDAwQTk5NkJFOTM0QTQ3QTZFRkU0RDIzQjQwREZBQTlDRkM3QwotOjEwOENGMDAwMTc2MTRDNTNBOEJDOTlBOEM4OUI2OUE1QjFERkFGMjlERgotOjEwOEQwMDAwMThBRjQ4OEUyQ0FGMkI2MzFGRTdEQjczNzc0RTc0Nzk1NwotOjEwOEQxMDAwQUM5RTM3RkI0NzQxMUI0RjZFQkQyNThGNjM0RTQ3NjlBNQotOjEwOEQyMDAwQTlGQTIxNzlBQ0VBODc3MDNDOEQ4NjVFNDgwQ0QxMEI5QwotOjEwOEQzMDAwMEQ1MUU0Q0M2OEMwMzEzNjA0MUZCNTlEMDJFNUFGOThGMwotOjEwOEQ0MDAwOERGOUE2QzBBRjlERDgzOUU0REVDNzk2NTE4ODEzNEY4MAotOjEwOEQ1MDAwMEY4RDdGQzg2MEFGNDdBMEUzRERBNUIxQ0Y3RkEzQkM3NwotOjEwOEQ2MDAwRTkzNzdDREIzNkQyRjk0N0EzRDVDNTI4M0Y2MjczMzE5QQotOjEwOEQ3MDAwM0JFQzlGQjFCMzk1RjJGNkM2MDVBRDk0ODc2NjlEMDJCNAotOjEwOEQ4MDAwRTVGRDk4RjQyRUY5NzlBQjZDREVBNzMwN0QzNjVDOUU1QwotOjEwOEQ5MDAwNkM4RDM5NUU4QjcyRDg5N0Y2MzdDNTI4N0VDREVCRjg4RgotOjEwOERBMDAwNEEzQUY5MzdBRkEzM0MxNTI0RUU0N0IzMERDQzRFRjc0MgotOjEwOERCMDAwQTRBRjdDQjlGQjU4MkYyMDEyMzAyRjlBQzRFODNFNzYxRQotOjEwOERDMDAwQTdFMUM3N0FDQzQ3MUIwNTNFRkU1Q0U2RTdGOTRGOTc2MwotOjEwOEREMDAwNzdGQ0EzRjA5RUU1QTAzMTdGM0I1NDdGNTE5QTRERkI3OQotOjEwOERFMDAwREU2OUU1Q0ZCQkY2OUJGMzlGODRBNTlFQjYxNTlFQzFCOQotOjEwOERGMDAwRjNFMTUzQTcyNzUzMUNFQ0M1MDM4RjZCRUNFQzVBQkM3MwotOjEwOEUwMDAwQzc4MDdFREYwQjFFODY3RUEyMjlEMzM1NzEyNDNCOUM1MgotOjEwOEUxMDAwMzE3RjkyQUU4QzUwOUFBODk0N0E1RUZBMDU5RDZERjhENwotOjEwOEUyMDAwRkIzQkY3Rjc0OEU4NjdCRDc4QzA0QzcyN0ZFQTgxOUU0QwotOjEwOEUzMDAwRjg1NTIxRTMyNzk2NzEzRUI2MDYzREZFMTkwMEFGMzU4MQotOjEwOEU0MDAwRDM3MzMyMDlFRjFEMkJGOTczOTE3OUNFRDRDMjJCNjMwMgotOjEwOEU1MDAwQTQwMDlEMEZERjkxNTc2QjBFQTVCQjJFQTlENjRDNzlCMAotOjEwOEU2MDAwRTQ1QzlENjM4QTFERUJGQzFDNDNGQ0Y0REFGRDgyNDA0QwotOjEwOEU3MDAwN0VERDJFMTE1MEVGOUFFMUJBODY3QUVDMEQ4OUVCQzNCNAotOjEwOEU4MDAwQTk1MzZCNDlBQjc1MkFFNzFFNzZFNDJEMzk4MEVGQzdFRAotOjEwOEU5MDAwNEZBRkE3RjEzQjU5NjQ3QkNDNThDNkU1RjA4QjA2OTlFMAotOjEwOEVBMDAwRTY3REYxODA0OEU3Qzg1NUJDREU2OTdDRDZDQjMwMEY0MwotOjEwOEVCMDAwRTBBM0RFQTZBNzdCRDhBNzhENEUxMUU1RDBFOTM0ODFDQgotOjEwOEVDMDAwRUQ4MjJEREZFOTc4ODVFRTk5RUM4ODAyRUYyRjRBQjkyMwotOjEwOEVEMDAwOUZDQTZDQTk0NDdGQTdGNzc3MkU4Rjc0N0U1RkE1QkZDQQotOjEwOEVFMDAwQzkzMzY0QTkwQ0VEQzA0OTlFMjY5NEZGQ0NCNkU0MzY4NAotOjEwOEVGMDAwN0NGMTI0REZCRjQzODdFNkNGMDNGQ0NGN0RDMTdGMjIxNwotOjEwOEYwMDAwMEVGNzIxNkJDRjc4NUNGNzA3QTU3NjZBQkY0NTBGMUY3OAotOjEwOEYxMDAwQkQ0MkY0QjBDNUM4RUZFMzc4NzU3MThFMDNCMDhFODU5RAotOjEwOEYyMDAwRDYwMTExQ0Y0RjE4NTI4Mzk0RTc2RDJBRTNGMjc0OEI2OAotOjEwOEYzMDAwQ0EwRjYzODExRkUwM0Q3RDA2QkYwN0M1MjZEQUE5Q0VCMwotOjEwOEY0MDAwMjYwNzI3ODRERUEzOUU1NUE2QUM5NzA1MzJGMUY5QzIwOQotOjEwOEY1MDAwRjg3NzM3RDgxRDhDMTVGNkE2Mzc4QkIwRkU4NTg5RUZDQwotOjEwOEY2MDAwNkVDODg2N0E0OUVGNzg1RUNGNzhGN0IzNkM4OUIxQjI3NAotOjEwOEY3MDAwREUwQzVFOUZGNkVFNjc5M0EwNUVEMTlCQzlFQjk1MzA0OQotOjEwOEY4MDAwRDQ3OEIwOUI3QUIzOUFCRDc5MzhCRUE0MTlCRjE1MEZCNwotOjEwOEY5MDAwNzIxNDdGRkQ1MjZGRDI0NThDNUYzNTI4RUI4NzFGMDMxQgotOjEwOEZBMDAwQ0VFM0VDRkI0NzNBRUZFMjM0NUJGRDc4MkU4M0M5ODZEMwotOjEwOEZCMDAwQjBGODE5MzQ4NURDNzc2MEE5MDkyNEZGRDRGQjBCRjNFMgotOjEwOEZDMDAwNDU3RjNGRjZENzk5RkQ4NERGQkI1OTI3RDk3MzgwQUQyNAotOjEwOEZEMDAwREQ1RjE0N0U3OTdCMkU1Q0VFNkREOUM4NUM3ODRFOEM5QgotOjEwOEZFMDAwQjE2NjA5RUYzMzA4NENENjdEQzFFMzc4NEU5QzVGODVBRQotOjEwOEZGMDAwNDc5RDdGMTg1Q0IwQjVDODlGNDM3MDNENEZFM0E4NzA5NAotOjEwOTAwMDAwNURDQjM3Nzk1MURFN0E2QjU5QUUyNzA0NEZENzg0RTBCOAotOjEwOTAxMDAwMEYxODZDNDVEQUFDMUQwRkUxM0U1RDFCMTM5QzIwNDAyMAotOjEwOTAyMDAwM0RCOTdDMUJFRERCQjVCMUMxMUYwODhFOTBCQTgxRUY1NQotOjEwOTAzMDAwNjM1QjZGMDlFRDYzOTcyOEI3MjE5RDlCOENENjZFMjFFQQotOjEwOTA0MDAwOTFCMUVFQjg4NDE5MENFNkQ5MzFENkU1QzU3QjZFNDBGNgotOjEwOTA1MDAwNzc3NEVGRDg5QjY1NzQxQzAwMzhFQjhCQjRGOUExQzcwQgotOjEwOTA2MDAwMTUzQUZCODMyMjBGRTY5ODc2NzlDRTAxNURCQTdCMDQzMAotOjEwOTA3MDAwODZGNzcwREM4MzM3OENBOEZGMTZGNjVEMzQ2MkJFQTREOQotOjEwOTA4MDAwQTNFN0EyMTFFOUJFMDNFQjMwNEVDN0YzQzY4OEY5NkYyMAotOjEwOTA5MDAwNjNCOTVFQkQyRjRBRTc5MUQ2NEIxQzRGQTdCMkVFN0E1QgotOjEwOTBBMDAwMkExNUUwRTk1ODJERDBCREJDRjU0NzkyRTY2MDdEN0REQwotOjEwOTBCMDAwMkJBRTkyQjFFNTU1ODdFNzIwQjlCNDM4RkI5RkMyNzI1OQotOjEwOTBDMDAwMjUxQjM4OTUwQTI0QjRDQ0E1NjdGNjEwM0RCOTYyNEQyRQotOjEwOTBEMDAwM0NCMzg3RThDOTE2NEY4QUE2QkU3MjE3RUNDRTBDMjg5RgotOjEwOTBFMDAwMzc2NjY4RkEzMUU1RkVFQTMyMzZGNDgzRTc5ODlBOTRGNwotOjEwOTBGMDAwN0Q1QzY2REIxOUMwQjhFRTMyOTdDMTNCMTAzMkRFQzIzMAotOjEwOTEwMDAwQkVDRDYyMzJDMkVEMTExQzc0OEREMkNCQ0YzRkFERTAyQgotOjEwOTExMDAwMkI4NDUyMUM3QTFGQ0ZGN0Y0MEFDNEVGMUQ2RDdBQkE2NAotOjEwOTEyMDAwQzdEM0RDQ0JFREFFRTYzNTgyQ0YyRTIwMUVGOEJEMERDOQotOjEwOTEzMDAwNzdBRjQwRURFRURFQTdFQjkzMTFFRjFCMDAwRjAwNDc3QQotOjEwOTE0MDAwREFGODg0N0QyQzExNDc5M0U5RENENTRBMDU1Njc3REZBMAotOjEwOTE1MDAwMzkwMzhFQjNFMjNCMDJERDY3NTVCRjlCQTBDMkJGQjJBRAotOjEwOTE2MDAwQTk5MUNFOTEwMTdDNUVBNDRGNzU5RDRERjY0N0U5NUNCNwotOjEwOTE3MDAwRDVDQTg5OTcwREE4ODc2MTdEOTcwNjM0RjhENEQ2NUI0OAotOjEwOTE4MDAwM0NEQUZBQ0E4RERBRkFEMTMyRTU5RUYyMzQzNjBERjlCQwotOjEwOTE5MDAwRTk3ODk5MjBFMjM5MjRCNUZFNTFENkY5QjdGMTVFRTdCNgotOjEwOTFBMDAwNkVEMTc5MEFFOUIzQ0RFODlGODFGQTdFQjdFOEEyQkExOQotOjEwOTFCMDAwREEwRUNGM0IxOEYxOURGOEUxMDBGMUIxNDBGQ0I5QzVFMgotOjEwOTFDMDAwMjA0QjM1RjgzRDk3NzY4MUU4NzYwNUI2QUJGMzY3MEYwRgotOjEwOTFEMDAwQkQ0Rjc1RkRGMEZBNEQ1NUVFNUE5QzFCRThCQjMwNDc2QwotOjEwOTFFMDAwMDUwOUVEOTA3QTUxMTY5M0YzODgyRjIyOUU3N0Y5QkRFOQotOjEwOTFGMDAwQzIwNzZGQTNGNjAzQjhFRTQyMjI4NTdEQkFFQkZFNDRBOAotOjEwOTIwMDAwOUYxN0U2QkRFQkNENTYzQUU3NzY1NzIxRDA4MTFERjk4MQotOjEwOTIxMDAwNUU0N0U3RDZFNkUzNzkyRjI4RUYwMzc5Njg4MUYyMkVERgotOjEwOTIyMDAwRkRBMTI2OTJFRjMzOEQxMkM5NzdFNTlDOTcyQTJGRTQ5MgotOjEwOTIzMDAwMTdCNUU3QjZFNjY3OUUyMTNCRUJCRUU3NzZEMjc5QjU3OAotOjEwOTI0MDAwQzkzOTcyQzFEM0E4MEYyRDdDRkUxRDQ3MDRERjY2MThGMwotOjEwOTI1MDAwQTcyM0VGMzRDOUNGNzEzMjNGMkZENzYxNTNFNDY4MkY3MgotOjEwOTI2MDAwQzg1MTc1RkRCMEJGRTM1MEFFNjEyMjY5NDExRUNEOUI3MAotOjEwOTI3MDAwNkU1NkE5NUQyNjM5MjhGODZCNzVFOEZGOEU1M0U2REQzQQotOjEwOTI4MDAwNUY2REE3NzVBNzNEN0E0OEMwNzU2NzMxRUY2NjAxRTY0NwotOjEwOTI5MDAwQkI4MjNBN0NFQzUwRjk1NUVERDdCNUY4MEJFODVENTYzQQotOjEwOTJBMDAwQUZCNTYzNUI0NUQ3RTM2NTMwNUZCQjZEQzBDOENGMkRGRAotOjEwOTJCMDAwMDY4REE4MUZFRUUwRjhERTQ4RTNDM0YyNzU3NEVFNTBBOQotOjEwOTJDMDAwRTJGQjMwNDczRjk4ODA3NkNFRkFBMzM5RTNEODA4RjYyMAotOjEwOTJEMDAwOERERUFDRDNDODExODMxNEE3OTEzN0YzNzNCNUYyNjc1MQotOjEwOTJFMDAwQTE0MzJCNzdCRTUxOTZBMzY5NUYyNDRGRDNCNERGREYzMAotOjEwOTJGMDAwNThBOEE5M0ZFMEFDRDRCQ0ZGNjA1MzlEQTY2RUIyQ0Q4OAotOjEwOTMwMDAwRDNCQzZGQjEyRkQ2RDRFMzczOTc2QkRFMUZFMzU4QTVBMAotOjEwOTMxMDAwNjkzN0JERjVBMzI2MDFFRDcxQjM3N0MwMDU3OEU4MDY3RQotOjEwOTMyMDAwREUyODRCMUVEMjIzRDMxMkUwNjUyOEUzMEEyRDU2MkNFQgotOjEwOTMzMDAwQkJGMzRENzQ0RUI2N0IzQ0U4OTc0NEVDRkYxRDNBNzc4NwotOjEwOTM0MDAwNjk0RTdDQzk1QzAzRTVERjBCQkU1QUZDN0UwRUEwQzlFQQotOjEwOTM1MDAwODVGNkRCM0Q0RjY4RTNGMEM3QUIzODVGQTk2NTQzQjlERAotOjEwOTM2MDAwRUJDMTBBMjhGMzVFQjA2N0YwN0JFOTgxN0I3MDdGQ0NBQwotOjEwOTM3MDAwNzE4Q0RCNDVBRjk5QzkyRTlBODk3NjUzODhCRjcxQjAzRAotOjEwOTM4MDAwQkE2NjdFMzlGNjdCNDJCRTE3Rjk4MkY1MzI2OTBBQkNBRAotOjEwOTM5MDAwQjdDRjA4M0I4QjdBRUUzNTIzRjVDQkVCMUREMDg1RTZCNgotOjEwOTNBMDAwRjc3RjU5Q0VFNUMxQjNDRURBN0I3MUZDOEUzRUQwQjJFOQotOjEwOTNCMDAwQzg0RkNGN0Q2ODQ0QkZBRUEzQUYzRjAxRjVEOTBDRTdERQotOjEwOTNDMDAwODc0NkI0Q0Y4NzlFMkI3QTRFMENDNjYxOUNFMzFGMEU1NgotOjEwOTNEMDAwRTkyM0RFNjNERDVFNkVBNEYxNEYyQjcyQkRFNTNCN0FCRgotOjEwOTNFMDAwM0E0RjhCRjczNzZCNEE4NkU0NzNDQkUxQTAxRkVGNjNFQwotOjEwOTNGMDAwQjdCNEYzN0I5Qjc4OEUzNjkyOUMwNkY5RkM2MUE4QkNDRgotOjEwOTQwMDAwN0QzNjFERjRDMTRDMUE0RkEzMEY5Njk3RjlFOURFM0U0NQotOjEwOTQxMDAwQzg2RkNERkIyQjk3MzQ1Q0M1N0MyNUM4NzFFREYzNEMzMAotOjEwOTQyMDAwN0UxRTk2QjEwMTAzRkE3MzIwRDczNUVEMUJDQjk1RkI1OQotOjEwOTQzMDAwOUNEMzU4REUxNzIwMDcyRTM4MjNERkRCN0RCQjhBOUZBNQotOjEwOTQ0MDAwMzNCOEUwQUFBMzdENzgxNkYwODlFNzQ3OUYxRDg2M0ZEMQotOjEwOTQ1MDAwOEVEN0RCRTFFRDY1QTQ4MTkwRkQxQjY2RkY1NzcxRkZBMAotOjEwOTQ2MDAwRUFFNTI4NzJGQkEyQjJCRkZCODQ0MDAxMEE1NUI3MzM3QwotOjEwOTQ3MDAwOEVFODc3ODVCOTc1RURBNTQyREM5N0NGQjdBMkJGREU0MAotOjEwOTQ4MDAwRjIyMzgxRUVDMUZGQjJGRkFEMzQzQkFDREY3OEY4NTQ3QwotOjEwOTQ5MDAwMUFERTk3NzYxRjNBOTU4NkY3ODlEQjBDRjZDRDY4Q0ZGMgotOjEwOTRBMDAwMDM3REQwM0RFNDhFNUUzRkMxREY3RUE4QjAxRjlGQjczNQotOjEwOTRCMDAwRjcwQTBFMTRDOUVFOUVFQjBEQjQ0RTM2QjAxNUZEQTM5RgotOjEwOTRDMDAwN0Q1MUUwM0E1OENFRURBQkMzRTU3NjJBREQyRTk4MTNGOAotOjEwOTREMDAwRjU3RThGQzlFNzEzOTAxRTQwM0UyMTVDNDdDMDBGODI4NgotOjEwOTRFMDAwRkFCRTZERTZBNjQ4RjZENDY1MDVERjI3QjcxOTE5REU4MgotOjEwOTRGMDAwRkI2RDgzRkVCODhFRDM1OUE3OERGOEJEODU5NkMzQjA5QQotOjEwOTUwMDAwMkUwMUQ3NzFFRTgxNzgxQzdGODM4MUExOURBMUMyRjdDNgotOjEwOTUxMDAwNzE1NkUwMDM1Q0ZGRkJBQjBEMENDRjJENkY1OUFEMjdFRgotOjEwOTUyMDAwN0NCRkJGODFEQjI3RkE4NzdGQkQzNTAzRUFDQjgwMkU2NgotOjEwOTUzMDAwRjEzQjBGMjc1NkRGMzg5RDAxRTNCRUJGODZEQjY5NzUxRgotOjEwOTU0MDAwMEYxQjg4MkY5N0FEMTM2RURENEIwRUE1NkI5NTZFRkYyRAotOjEwOTU1MDAwNDZBMUQzNzBGQTBEQTdEQjYxRjRCQUU2RUJEMUVCREJFMQotOjEwOTU2MDAwRTVCN0VDOTAxOUE4Rjc2MUZGRTc4QzQzM0FGQTFFNzM1MAotOjEwOTU3MDAwMUM0MDdFMUEzQzYxMTgwNzcwNEZEQTJBMzlDMEMzNjM1OQotOjEwOTU4MDAwRDNGNUJFQTdEMjUwNkU5Q0UwRURGOTZEN0IwNTJFN0YyMgotOjEwOTU5MDAwRUNDQjcxN0QxOURENDY4NkY3MDgyRTJBRkI3NjUxRDk3MgotOjEwOTVBMDAwMzczQjBCMEFGMUM4Q0Y2MjYwMTJDQUE5NkMyNUNFRjkwRAotOjEwOTVCMDAwOEE4MTM1MUQ0NkZGNTJFNEYyNjdGQThGNkQ3QkI3ODdDQgotOjEwOTVDMDAwRDBFRjdGMkJFNzc0QUJDQUM1Njk0NkU2M0E2Q0M1RjdBNgotOjEwOTVEMDAwMEY4RDVGMDRFM0JDNkNFMEU3MzUyNzI4RTM0REM5MDkzNAotOjEwOTVFMDAwMzYyQzgyNTI1N0MxRTVFNDZGMTUzOEQ0RkE5RjE0M0VFOQotOjEwOTVGMDAwNjAyNzdGNDNGODVDNjhFNkY4OUZCN0QxREY4Q0VCRjgxMwotOjEwOTYwMDAwOTlDOTc1QkQxQ0RFNUYzMEUxN0MxQkVBQkRFRTQ5M0ZBOAotOjEwOTYxMDAwQzlFM0RGQjk3MzkwMURFRTU2RjA3RkEyRkMzN0NGNjMyQwotOjEwOTYyMDAwRUVDRjMyMzU4RUY2RDc3MkY0NjkwOUU5RDkzMkE1NjhFMgotOjEwOTYzMDAwREM0OEYxMzBGN0NENkNFNjRBMDFCQUJBOTk0M0E1NUEzNQotOjEwOTY0MDAwNUY3NEZDQUE3MTgwRkM4MkVCMERDNDJGMzdEM0U5Qjk5QgotOjEwOTY1MDAwREFFRjUzMDVFRUU5NDY4RTA3RDY5NzRBN0ExQkU0QjY1MQotOjEwOTY2MDAwNTgxNjkyNjc1MEYxQTBGQUUzOTYyOUZCNjlCRjFFNUI3QQotOjEwOTY3MDAwQzcyOEVFQ0ZEOEQzODQ4RjE1NkRFNzg0NTYxOEU3NDFGRAotOjEwOTY4MDAwODM2Q0IwMDJCRUNGMjczNkFEQkQzNDg1QjE5RjZDNjIwRQotOjEwOTY5MDAwQ0MwNTBCM0FCQkM5Q0M1Qzc3MDM3RDZDOTJBODFFRDg3NQotOjEwOTZBMDAwNjRBM0ZBQkI5QkVDNTQ1RUI2MzhDN0EyRkU3OUUwQTQ3MwotOjEwOTZCMDAwNjcwQUUyRUQ0NEQ2MUU2NzJEQ0M3M0VEQUM4MUYwNDExNAotOjEwOTZDMDAwM0IwNkY0RkQ5ODQyNkIzN0ZBRjRDQzBDRUQzNzdBOTRGNAotOjEwOTZEMDAwRUZBRDI4RjAzRjc0MzM4M0I5NDBCRUZDMDJFNzgzOEVDMAotOjEwOTZFMDAwRUQxQjdGNDY3MkNGQjFFNjdBMDNGQTQ5Rjk2RDE3QjdFMQotOjEwOTZGMDAwNjJEREJERjE3NzBENjg1RjdDMDBGQTA0RTkwQ0VDN0U1OQotOjEwOTcwMDAwNjYxMzUwOUU5QzMzREE4MTBFOUE2RkE2RDAzODJGRUJFOQotOjEwOTcxMDAwODIwREM4NzdERTYzMDI0M0ZBRkNBMEY3QkE3MTFDRDc0QQotOjEwOTcyMDAwNTc3NDJERTFGOTRENzRFNjlGMkRBRDQ4MjJGQ0I4RkIyRQotOjEwOTczMDAwRjI3NTdDN0Y4Qjc0QTFGNzI5RkFFRkY5NDMwMkVFODc2QgotOjEwOTc0MDAwNzlBM0ZEOUQ0QUVDN0Y0NkNGOTBBRkI3RDcwNjEzQTQwRgotOjEwOTc1MDAwMDg3MkY4MDI4QzhCOTdBMzcwMUQ1ODg2QjczNzE5QkQxNQotOjEwOTc2MDAwNTNGMDNDNDE5MzQyQzdFMUVEOEIxNUZBMDQ0QzFCOTQzNgotOjEwOTc3MDAwRUYyOTMyMjE4RDlGMjNDMTlGMTY1ODUyNjIzMkY5NDE0MQotOjEwOTc4MDAwRkUzOEUwRTc5NkJFQkFBQjIyOTYxRTgxN0RBOEY1Q0ZFMwotOjEwOTc5MDAwRDg4NzIxNzY3QzM0M0FGQ0IyMjU3RTQzRTZDMzI5NDM0MAotOjEwOTdBMDAwNzVGNDIzNDNFRjdGQTAxRjE5RTlGQjgyQTZBQ0M5RTM0MAotOjEwOTdCMDAwNDY4QTc3QjkwN0MwQkU4M0ZERUEwMEMzQzk5RTgyRjQxQQotOjEwOTdDMDAwM0U4RENBNEY4RTc0RDk5MTdGQ0M3MUMxM0RBODJGRDhFMAotOjEwOTdEMDAwNUQzQUYyM0JEQUJENUE3QkE4NDFFMTg3MDZDNTFFN0FBNQotOjEwOTdFMDAwQjQ0MkVCM0Y4MTlGRDQ1RUMxRkRBNDg0RTM0Q0UzM0ZEMAotOjEwOTdGMDAwODUzRjI3RkZDOThDN0MwNUYzNEU4M0ZENzkyNUQyRkU3QQotOjEwOTgwMDAwNTRENUFFQzc3RTEzRDgyRUEyNzMwNjc0OEVGNDE1QkUzRgotOjEwOTgxMDAwQ0VCRkE4RTA3QTU0RTVFQjY1QzhENzQ4QkZCRDlDQUY4MgotOjEwOTgyMDAwQzNDNzZEQTlBQUY5MEIxQzc3NUI5NDdCMTBGNzU3RjE5RQotOjEwOTgzMDAwRjFEQTlGMTMwODVGRUVFNzUyMDg0RjFGQjNFNzlDQjVCQwotOjEwOTg0MDAwNDA5NzFGMDMxQ0ZCODAyRUFGMzk5REYxNDlEMEZGOUEzMgotOjEwOTg1MDAwQ0IxOTlGNkMxRDkyMDMxRENGQzU1M0JGNkQ5MzE3QTdFNgotOjEwOTg2MDAwQjQ0MkZEMTlBNDdCMThFRjkzREUzQThBNkYzRUY0MUNENAotOjEwOTg3MDAwRTczRjc1QkUwRkZDQ0I1MjkwOUY4QTBENDFBMzAzREFFMAotOjEwOTg4MDAwMzNGQjJFMjZBMDFENTg3Q0U0RkUxNEU0QzM2ODcwNkVFMgotOjEwOTg5MDAwQUQ1NEUwRENGOEQ4REE0QjI5OUMxRUYwMUNFRTVBNDU5QQotOjEwOThBMDAwQkZCOTlGRjQxQjExRkY2QjM3MzJBMkRGRkVENzdFRDkwMQotOjEwOThCMDAwODE3Q0ZDNDk1RkJDODRGQUYwRTNBM0YxNUU5NEZGRDc5RQotOjEwOThDMDAwOEU5OTdDM0E4MUZDMTA2RjIyQzhCNThGMEQwM0Y3OTFGOQotOjEwOThEMDAwQkQ3OTQ0MkZBMUZGRTgzRUY2REIzREM4OEZFRUQ3NENBMwotOjEwOThFMDAwNjhGOUIxQjU3RDVERDc1MUVGQjVGNUREN0I1NUM0RjJCMwotOjEwOThGMDAwQTVEMUU1ODdGNjhEOEZEMzdBRDVGQTZGMzc5OUVEMjgwNAotOjEwOTkwMDAwNDczRjExQjk5QzU4REJGQjJBRDlCRjZCMDc2RkNDQzAwRQotOjEwOTkxMDAwMzhFQUM3NDdGRjRGMDlDQTM1Rjc5QjM3NEE1MDlFQjkwNwotOjEwOTkyMDAwREZCODUxODJFREVFMUZDNzdCMjJEOTJENzFCM0Y0ODRDRAotOjEwOTkzMDAwNTc1NTVGNjZCRjI3NkFFMjQ1MUIxNEZBQzhFRURDRDVBRgotOjEwOTk0MDAwMzgwOUYwNTc3QzZFODkwM0YzQjY2QTdCRjExNDlEMTNENgotOjEwOTk1MDAwREYyRkZFNzk3RENBQzMyMUZEM0EwMzIyRTU4RDhBQ0UzMQotOjEwOTk2MDAwRDVDN0FGMEVBMUNCNDdBQTBDOUFFRjk0N0RENTM4MEY3RgotOjEwOTk3MDAwQjZFMkY3MkQ2RkM1NzUwMjNBRkEwRUVDQjY4MEM4QkY5NQotOjEwOTk4MDAwMkZCQjQ2RjBBMUJGMDFGNjRCNzgzRkIyQTdBRTNEOTI4OAotOjEwOTk5MDAwNDJGNzEwOTlFODlDM0ZCRDA4RUI1MzFDREJFRDI4NTZCRAotOjEwOTlBMDAwQ0NBNzI2ODdEODRCQ0IwMjNBQkYwOUU4QThBOUNGRTRCOQotOjEwOTlCMDAwMjc3QjNGMjA1RUE0QkE2MjQ3M0Q3NEZEMzc2M0IyODVDMgotOjEwOTlDMDAwMDg3MTlBREM3N0U3QTAxQzBGOEZEN0MwQ0YxODg0NUI5MwotOjEwOTlEMDAwQjVBRkNFQTdGM0Y4NTFBNjQ3RDIyRDA0Qjg5QTNCOTk1QwotOjEwOTlFMDAwODQ3ODFEMTZENzY5OUE0QkYxQTJGMEY4OEUzREIwREI1MgotOjEwOTlGMDAwOENGREVDOTM3NTEyQzJBQkRBQTVCODhGM0QxMUU0QzBCMwotOjEwOUEwMDAwNUY1NjcyNzlBNkYyNTc2NzgwRTdGNTNBMDNCNUU2Qzk2MwotOjEwOUExMDAwNTA3RTU3NjlFRjkxNzRDQzBCNzhFOUVDQkJGRjAwQzYyMAotOjEwOUEyMDAwMTczQTA3MUY4QzlGMEVGMzc0QkVCNzk4NjE5RUU3OUE5MgotOjEwOUEzMDAwNTQ2QjlFODJGRDA2RTc5QTFGQzgxQkEyOUJGMEY5MUE4MQotOjEwOUE0MDAwMkFCOTVEMzQ2NDJGNDRENjdGQTUwQTVGOEY5NjFFMkNGOQotOjEwOUE1MDAwQUNGQ0YzRDA4M0UwOUY1NzU0NzJGRjdDMDU4RjlGNzA1RQotOjEwOUE2MDAwRkYzQzVDN0ZBODcyNTkxRDc3QUQ4MkVGRTE3MkY5MkE0NQotOjEwOUE3MDAwRDkzOUUwNDc5MzVDNUU1QjY5QTdGNzMyRkIxNkE1OTA4NgotOjEwOUE4MDAwN0ZGRERFOTIxNEJCNzVGOEY4MzlBMjQzOTc5QzM3N0NCMgotOjEwOUE5MDAwN0NENTlFNzM3QkU1NTM2NkY0N0I2NDNERjFBNzdCODk5RgotOjEwOUFBMDAwRTBDM0ZDOTc2QUZGQjk5RDAyRDlFNUVFNjY4MzBGREYzQwotOjEwOUFCMDAwNTNFMTBBMkNFMUYxRDgwNzY0ODNDRjIyMENEOTg5QUE5QgotOjEwOUFDMDAwMUQ3OUFCREQyMTUwQkI2QTU3QUFGNjYzQzBDOUUzQkI2MQotOjEwOUFEMDAwNEI4QTc4RkI2NThCNkI1NUU1NTg1Q0E3ODU5RTE3OTc3RAotOjEwOUFFMDAwRjNFNzhDMzk0RkExNUZGNUUwNTI4MTkxMUM1MEVDNEFBRAotOjEwOUFGMDAwOTU0RUMzRURDRTRGRkI3MjEyNDc4QTQzM0RBRkQwQTdDMAotOjEwOUIwMDAwQ0E2NzEzQzJGODQzRDU2M0NGNTQ3MDdFRUI0MDNENUUwNQotOjEwOUIxMDAwODg3QUZDRjcxQUZCM0M3QzVDRDBFMzhGNTc1MjNGNDZCNwotOjEwOUIyMDAwRkQ4QjdFMkUzQTIzRjlFQjY2NjVGQ0FERUFGRTA1NEUxMQotOjEwOUIzMDAwRDYyMEJDNTkyQ0IwMTlGRENDNjhGQUY1N0I4QTlEMTM1MAotOjEwOUI0MDAwQURGRDE5QzU3RUJDMUQzRjFGNTZFNEM4NjhGMUYzQ0JCRgotOjEwOUI1MDAwOTVCN0YyNzBGRkE5RjlGOTk2N0Q2ODhDNjJCRjU3RDU2OQotOjEwOUI2MDAwQkM4NkZCMUZBN0Y3MDQ2QTkwRkZGRTk3ODFFMkVFRTEzNwotOjEwOUI3MDAwRUYzREE1RkE5RjIyRDNFQ0NGQTkyQ0EzMEVGRDIzRjcyRQotOjEwOUI4MDAwMUExRTNGRTg0RUIyQkY0MzdFQ0M1QjdBODZFM0FDMDUzQgotOjEwOUI5MDAwN0YxMEVEQjg0NzZGMjY1MUQ5ODZGNjMyOTQyQjVFMzg4OAotOjEwOUJBMDAwNDdGOTg4MTU2QkI0RjA3NzYzNEMxN0ZCQUZDQkE2RjM3RQotOjEwOUJCMDAwMDMyREFDOUVFMjRDMkQ3RDQ5RDIxNjUwMEFERDYzMEY3OQotOjEwOUJDMDAwOUQ0NkJFRjIxRUQwREIwRjg0QkVGRjg4RkFCRTk5Qzc0OQotOjEwOUJEMDAwRTEzNkE2RkIyOEY3MUE2NjBGQjQ3OEMyRUQ3RUFEN0Q5QwotOjEwOUJFMDAwNTBBOUM0OERBMkQ5MDk2RkY0NUJCODVDMzlBMzI3M0U5NAotOjEwOUJGMDAwRUZDMDc4RDM0Q0M2OEM3RDVDMkVCODM3RjIzODQ5NDcxRAotOjEwOUMwMDAwREZFNjA0RkMwODZBQkJEMjdFNDUwQzUwMUM4QUYyNkI2RQotOjEwOUMxMDAwRjBFQUQ1QkVBN0QzRTgzRTk3QUNDRDI3QjVFRkZGMzkyNAotOjEwOUMyMDAwQzlDQkYwQkM1MjcyMEY5NzRCRUUzNkJEOTI0NzJBQTFCQQotOjEwOUMzMDAwRUY5N0I3ODMzRjM5MEVFRDRCQkJGRDFCODg3NzgwOEJDOQotOjEwOUM0MDAwRjk0OERFQzg5QUI4Q0IzRTI1QUZGNEU5OTk3RjI1M0ZBNQotOjEwOUM1MDAwNzRDNTkxMjg3OUE0RUU3OTNDOEZBNDdDMjc3Nzc4MUU2RgotOjEwOUM2MDAwRTlGNEE5MENGQkVERjM0ODFEQkRFN0U4MUVDQkVERjJDRQotOjEwOUM3MDAwNDlBNkFBNUI3MTFDOEEzQjRFMTQ3OTdDNzc2MjlGMjBBRgotOjEwOUM4MDAwNjFCQzZBNjIxRjVGNzdFOUI2MzhCMkFGMUI3RUI1M0EzNgotOjEwOUM5MDAwMDVFNTgxQkE0RjlGMkNFMkY4RkRFNEZEQ0Y2QUIwNUY4NQotOjEwOUNBMDAwQzlBRjQ0QzkwMkVCN0FFM0ZEMEQzRkNCRTA3NUJCRDlFOAotOjEwOUNCMDAwOEVGRDM2QzRBMzNGRjNDOUFGRDZDNzIzN0VERjgwMTIyMwotOjEwOUNDMDAwRjdFN0M3MTdDNEM4RjFDOUExNzg3NTY2MTVDNTlEOTU5MgotOjEwOUNEMDAwNzhCNTA4RkE3MENDNTA1QzI3QkNERjhCNTU1QzZFNzQ4RAotOjEwOUNFMDAwODNCQjQyNzFDRDIzM0NFRkRGOURFRTlBNDdGNUJGOUVDQgotOjEwOUNGMDAwQzRGOERGMjk5MDI5MUVGRDJBRDAzNUM2OERBNkMxNjI4MQotOjEwOUQwMDAwMzEyRkZEM0ZFMzU4MjdFNjkxQkFDN0JBN0U0MjdDRjQ3MwotOjEwOUQxMDAwRDczQTNCRjIxMUY0QTdGQzkzRjdCMDlERjQyMzg2NkE3RgotOjEwOUQyMDAwMzFDRjMzMDMzRjVCNDBGNzMxNTIyOURGNzM4RkIyOEY1RQotOjEwOUQzMDAwRTlFMENGQTI1RjA5RDAyQ0MxM0NGNDM0MjVERjMzMjMwNgotOjEwOUQ0MDAwOEU4OTM4RkUwRTgzNkJGQjU0Q0MyRkY1OEI4RUNEQzRFMQotOjEwOUQ1MDAwMDQ4RTE0M0M2RjE5OUU3NzEyNjQ5RTJGNTdGMzRGNkEzRQotOjEwOUQ2MDAwREUzQzVBRkU0OUMwNzk5NEVGNTZGMEYzOTZCMjgwRjk4MgotOjEwOUQ3MDAwNzQzNUNGQzQ5NjNBMjlGOUI1QTVDQzQzRjc0MjdDODAxNwotOjEwOUQ4MDAwQjNBRjczREU2Qjg0RkNDRkMzMTUxMUYyM0ZFQjJCOTg5RQotOjEwOUQ5MDAwNjI5RjY5RjM4RERCNzM1RjIxM0FGREFBNzlDNkMzNzhCMAotOjEwOURBMDAwQUVFMjhFRTZDNUVDREMwRjBEODNCQjI4RTlEMzM0RjJCRQotOjEwOURCMDAwQkJGRUY4NkYwOUE0NjdGQjZFOTAzRUJDMTYzNEIxMDA4MQotOjEwOURDMDAwQzUxRjA3NzhEQ0JEQ0Y0MDcxODY2QkUwQkY4RDBERDExQwotOjEwOUREMDAwQjNFRjU0RjA3MThGRjdENTExRkRGNzA0RUFFM0YxRkQwRAotOjEwOURFMDAwREYyQkNGQjdCREI3RTQ3RUI0RjdCRDAxRkUxRDBCQzZCOAotOjEwOURGMDAwQjgzRkQ2MTMxMDhCRDE2RUI5ODNGQkYyNjQ2NTg0RjUzRQotOjEwOUUwMDAwOTlFM0I4N0UwQUU3QTM1Mjg1RkY0QUFCMzg5RUVCREVBMgotOjEwOUUxMDAwRTc3RTk4N0IwM0NGQUY0ODhBNUM3MDdCNzg1RUZENzRFOQotOjEwOUUyMDAwNTY5QUEwQzZEM0M3NDVDQUJGMUMwOTkyREU2ODc5NDRCQQotOjEwOUUzMDAwQTBFRkM5N0NEOUZDQ0IzM0U5OTFGM0YxMkI3QTJGNDYwMwotOjEwOUU0MDAwQ0VCRjM0MzY5MEZDOEMxNkNGMEU4RjYzRkY5RDJBRkY1OQotOjEwOUU1MDAwQTZGMzM4NzY3QTk1NDRFQjRFRjZFNEQ3OEM2MzQzRUI2MQotOjEwOUU2MDAwQkY4M0ZCQjA3NDU2ODQ3REI4ODNFMzZGOUMxRERCRjEyOAotOjEwOUU3MDAwRUJDQTYzM0JGRTEzMzExRTdGN0I4Q0M3RkY2MTc5NkM5RAotOjEwOUU4MDAwRjNFQkJBOEFEOEMyRkZEQjE4QzNERjFGMDlGRUZGNTcwNgotOjEwOUU5MDAwQ0YwNzg0RTdGRkMzQ0YwQjg0OUYwMzMwQkRGNUIwMTcxNgotOjEwOUVBMDAwREJCQTg0OUQ0MTNGQzNFRjhEQkZENjI0ODAxQzE0OTM0MQotOjEwOUVCMDAwRjZEMzdEQ0UwNUU1M0MxRkI2QURERUVDREIyQjBDOUQ2RAotOjEwOUVDMDAwMUI1MEYxRjU2ODM1RjcyM0E1QkNFQjVFRkM1RUQ0MDRBRQotOjEwOUVEMDAwMzk1MDlGODJGMUIyNzJGRTc3NDNBRTU5Nzg1RThDODkxOQotOjEwOUVFMDAwNTIzQUU2QzlFMENERjRDNTYwOTc3NDVCMjJFNzU5NTM1NgotOjEwOUVGMDAwOTVGMUEyRTk5MTgzRDUzNThCNjcxNUUzMUYzRDhBN0NFNwotOjEwOUYwMDAwMEVGRjg3NEExQzUyRUFFNUY3RTk5OTY4NEY1RjRDRjM2OAotOjEwOUYxMDAwREFEM0QxMUU0QTNDQzk5RjI3Rjg5OUJDOTdFMEIyNjdCMwotOjEwOUYyMDAwMkZFNjdGREMyMDFCRTE3QjQ2QzlGRjI2Q0ZCQjJCMUIyNgotOjEwOUYzMDAwRTNEMkM5NjAxNzYyNUVGMDY5Q0MwRjkyM0YyQkQxN0JGMAotOjEwOUY0MDAwRUE3Qzk3NjY3MTNGRUExOTAzMTMzMDlGRUI5RENBQ0ZGNQotOjEwOUY1MDAwMzlCMTlFREY5MUZEQTZFNkY1Q0UxQUZDOTc1QTA1Q0FFNwotOjEwOUY2MDAwRUJCNTIzRkMzRkQ1RjlGM0Y2NjUyQjQ0MENGOENERUJBQwotOjEwOUY3MDAwOTEyOERGRjg3NkY5REZFNUJBNjgxRTlFRTc3QjRDRTJCMAotOjEwOUY4MDAwQUY5QzQwQkYxOUUwNzhFQzY4MjFEMUVGOEFFM0U1RkY5MAotOjEwOUY5MDAwRDQ4Q0ZFQzc2NDkxRjAzQ0NDQUY1NEUyMDUxNzk0NzhBMgotOjEwOUZBMDAwODcxQTJGNTBGMzVCRkZBQ0M0NDkzRUMwRjgwQjk0MDNGMwotOjEwOUZCMDAwMTgwRjgxNzJGQjJDREQ5REQ2NEZEQjY3NDVFMEZGNjdGNAotOjEwOUZDMDAwMDQxRTFGRjJGRTk0Qzc4NzBBOEQ4RTlDRDBGMzk0N0ZFNwotOjEwOUZEMDAwMzU4QkVGNjNBQjlGRTcyRkQ0NzhDRjBGOTVGNTE0N0VDOQotOjEwOUZFMDAwNEZFRkM3RUZBMTE1NkU5RDZFNDQzRDVGQjgzNTJCMEU0OAotOjEwOUZGMDAwQ0IxOUIyNEY5NzA2Rjg1RUI2RkFCMDRFRERCRjQ4NzQ4MwotOjEwQTAwMDAwQjQ1NzU5RTdCNjMzNDFDQUVGQkQxQTk2RjdCRjM0OEI0MAotOjEwQTAxMDAwOUY2NzY4QTlFNkZCN0IwOUZGQTAxOEQ0MUY5QjIyNkVFRgotOjEwQTAyMDAwNDFGMzMxQjE0QUQyNDdDQTJCQjU4MDVGOEM3MEI2NzYwNgotOjEwQTAzMDAwNzNCODU1N0NCN0Y4RUQ3NTM4Q0ZDNTUzQzFBRDU4MTYxOAotOjEwQTA0MDAwQUNDOUFFQTNCODdCREJGNUFENjhCRkI5MDc2RjlDQUVGQQotOjEwQTA1MDAwQTY3ODk5RDE4RUZFQzQ0MzAzREFCOERCMTNENTNDRkU1MwotOjEwQTA2MDAwRkUyQTFBRTA4OEI3N0I0NUYyOEYwQkVGMTU4OTdFOTJBNgotOjEwQTA3MDAwNUIyQ0U0QkYyNjFCOThERThBRjU0NURDMkUyQTY4NEM1MwotOjEwQTA4MDAwQURDMzNBNUI5MjQ0RjY2MEMxMTk3QkQyQzM3OTQzNzE4OAotOjEwQTA5MDAwQjBFNDdCMzc4QzQ1M0NERDJFQ0ZBQUM2RDMyRTVCRTRFMwotOjEwQTBBMDAwRTNCODlGNUYzNUNGREE3RUY2M0QzQTZGQUFBRTRCQzU3NwotOjEwQTBCMDAwOEI5QTJGOEQ5NjY3NTVDRjNEQjgxQjNGRDM5Q0QzNzA5RAotOjEwQTBDMDAwOEJDMTA2OEMzRjE2MUVCRDY4NTRDRTVGNEFCNkVDQTEwQwotOjEwQTBEMDAwM0M2Q0UxOTFFQjk0N0Y1NUYzQUQ2RUNGNzVCMkFCQTFDMwotOjEwQTBFMDAwOUYxMUZCRjc2Q0UyRjlEN0Q3MDAwRTJDN0I2MUREQjIzNAotOjEwQTBGMDAwMDlFRkExREJBOEVDODM3NUUzRjM2MzlCNzJBOUY0NkYwRQotOjEwQTEwMDAwNzI1MDc5N0M1MzE5OTVGODk5QzlGNDY0Q0NEQjVFQTczOQotOjEwQTExMDAwQkNFREQ1NTlDM0NFNEQ1MjVFNkZCN0U4RkMwOEYxMTVDMgotOjEwQTEyMDAwOTJGN0EzN0E3OERFNEYxRkM3RTMzNUVFMzMwNkZBQkUwNwotOjEwQTEzMDAwQTFGQkFDOTlFNDc3NEQ1RkVCNDRGNDBGM0UzRkU3OUEwNwotOjEwQTE0MDAwODg3MDc3NjBERTJEODQyRTNFOTExRDk2MjRGNDgzOURDOQotOjEwQTE1MDAwMEUwQkU2REIwQUZCQUYxQUYxM0M0Qzg3MTgzMDYyM0M3MQotOjEwQTE2MDAwMEMyMENGQzAyMzhCRUU5RUVCRkNEQzZGNUY4RDA1RjFFNgotOjEwQTE3MDAwN0JEQkZDNThFRkZGQ0Y4RjdEOTVGQzU4NzczNTNGMjc3MQotOjEwQTE4MDAwQURDQTkxMDJBNzRFREU4QkU1MTlEOUYyNzA4ODlDRDgzMgotOjEwQTE5MDAwRTZFNEY5OTQ2RDkzMjcxMTFGRUU3NjRFNEE1QTFEMzI2QwotOjEwQTFBMDAwNUU2NzIzOEY1RjI0REYzQkQ5MTJGQUZDOTdENTNDMUZGMwotOjEwQTFCMDAwOTYyQzMwNjcyNDc5NTYzM0ZCRUJEREM3MUI0MTZFRDdGNQotOjEwQTFDMDAwNDRCMkZCM0ZGOTI5RDBFNTRDQTA4QjIzREY5RTM4OTBBOQotOjEwQTFEMDAwQzcxOTNGMzQxRUI3QUQ3MUY1QzQzMTI4OUYyRTk4RDhFQQotOjEwQTFFMDAwMTQxRUFGRDNDNEUzNTg1ODVFMkU1QTVDNkU0NUEzNEU3RQotOjEwQTFGMDAwQjZEMDc5QTFFMDA0RDREQkUxRjEzMzI2MDYyNzcwQkRBNwotOjEwQTIwMDAwMkU2N0UwQkQxNDk4MzE4Mzk1QjE2MUY5Qjk1RjMwREZGNQotOjEwQTIxMDAwQ0YyN0MzRkJDQjFBNzVBNDJGRDQzQzVENDFBM0M4MzYwRQotOjEwQTIyMDAwMDE3RDE2NkMzNEY4MjgzRkQ3Mjg1RUE0NzZDNTZGRUMwNAotOjEwQTIzMDAwOTQwQTMyOTBDRTNGMzg2Qjk0MzBBRTE2MUUxRjczMzRBMgotOjEwQTI0MDAwRUVFRjlFMDRGRDFENkQwMkREMEJCQTVEMUU0RjNEMDc1NgotOjEwQTI1MDAwREVEMkRCM0YwN0UzNkRGOTZDNTc3NzNERjRDRjlGQUM1RgotOjEwQTI2MDAwOTNGMEZDRjRGMDdDMUUzRkZGNURBMEQ4MzlFMTcxMzYxRAotOjEwQTI3MDAwQTQzM0I0NEJDMkUzRjAxQjE1M0FEODM4OUJFQkFERDdFRgotOjEwQTI4MDAwMTQ3RjUzMUQ0N0VEMTc0RTNGM0Y5RENERjU2REI0Qjg3QwotOjEwQTI5MDAwRkU1MTY1QkNDRUM2ODI2RDkzNzE3RjE3RTgxOEVBOTNCNAotOjEwQTJBMDAwQ0VDNjVBRjNFNDkwRjE3NkNDRTZFN0RCOUVDMUZDNjBDMwotOjEwQTJCMDAwNkE2ODdFOTBFNzAxQzNGMzgyQUE5QzJCRUNGRjdEMDNDMgotOjEwQTJDMDAwRTI3QjM3Qzg2QkQ0NjM2RTFCQ0YxRjE0MUVBQjM5ODM4MAotOjEwQTJEMDAwNzI2MzA4NEVBRUI3NzdDMzlFMDdDOEJFNzMyNDMxQkUwMwotOjEwQTJFMDAwMkVGQTdCNDVERUEzMDJDNUU3MEExNjdDNzYzQzFFRUEwMQotOjEwQTJGMDAwQ0M5OTQ0RjdCMERDNjcyNzZGQjFBMjNDNUEyMDE2RTMzMwotOjEwQTMwMDAwQkQxRUI3NTNCODk1NjdDMjdDRDJGREVGQUNBMUVGQkNDMAotOjEwQTMxMDAwMTYzRTkwN0YwRUY3RTU4MTY2MDM5RDBGNTRGNURFRkQzNgotOjEwQTMyMDAwRUYzNDM1RjBGNkJENEZDNjYxN0JBRUUwQjBEOEYxNzlDMQotOjEwQTMzMDAwMjM3RDNGNzZGRTRCN0VGQUJCNTgwQjExM0E5MEU3ODFBNgotOjEwQTM0MDAwQjM5NzQ0RTQ5QkNCMTZEN0RGMjMxRjE1MkU1MkYyNEM1NAotOjEwQTM1MDAwQ0Q1QzRGM0ZEMEI3QzhDMEM4Q0VEM0VBQ0QxMzU5OUYwQwotOjEwQTM2MDAwNTMzQ0U4NDY1RjIxRTU4RjUyRjBGQzQzREU5MEJFMjk2NgotOjEwQTM3MDAwM0MwQTdBNkNDQzlERDM2MzNGOUQyRDExM0U2NzgyMUVCMwotOjEwQTM4MDAwNDM3ODkyMTdGMTNDN0RGOEZFRUY1MEY2M0Y5QTVFOEFEMwotOjEwQTM5MDAwMjY4NzUxRkZGMEZCNjNERTBDQzEzNjVDOEZEQjMxRUVBQwotOjEwQTNBMDAwNTM4QUY2M0E5NEUzQTJEM0RGMUY2NjcxQkE0RThBNjJFQgotOjEwQTNCMDAwQ0ZGRDQ5QTFERkE4RTdBNzdBNDcyN0NGRjQ4N0Q5N0Y0OAotOjEwQTNDMDAwMUU3OTYzRDVGRjUyRjM0REFBQkZGNkEwNjIwRkFCNjVBRAotOjEwQTNEMDAwOTM1MkZFQkJFRjM3QTA3MjhENzhCRjIxMzlGMkZEODYxNAotOjEwQTNFMDAwODcwRTA5NjhBN0E4RjcxQjRFMTk1OUNERTE1NDNDNEZCOQotOjEwQTNGMDAwQUJEQzc3RjIyRDIyM0JFOUQ0REZGQzYyRUI4QkE5Nzg1MgotOjEwQTQwMDAwREY0OTkwNTAxREI1MUYzQTQ3N0FCRTFERUMyM0IyQTcxNQotOjEwQTQxMDAwRkE3RUNCRTNBRDg3RjhGOUYwRjZERUM4REZERERCQUQyMQotOjEwQTQyMDAwRDhERkY1MzIyM0I5RDFBRTlDQjc2REU4NTFGMjQ0QjcwRAotOjEwQTQzMDAwRTI5NjhGOEJBMTcxNEJCNzNEMzA1NjNEQzdFQjIzN0YyMgotOjEwQTQ0MDAwNEYxQkM3OEMxNkI3RUM2MDQxM0FCN0RCQjE0NjcwQTAyMgotOjEwQTQ1MDAwN0VCOEREMzlEQzVEQ0E3OUREQTg3MTRDNzlFNDczQjk2OQotOjEwQTQ2MDAwRTE3MTRDQjk1QTlCQzdCOTZGOTZDNEY3REIyNTA4NjhGMAotOjEwQTQ3MDAwRUY5QTc1Q0UzNjNBQjc3RjRDOTAyMjlERjM1RTVBQ0Q1NwotOjEwQTQ4MDAwRTVGNDdDMjUwRjcyRDBDOEU5RTM2MDg1NDBGNzZGRjBGMgotOjEwQTQ5MDAwMUUxRUVFRkJDMTYzRkMxRUNFQzEwMjdFMEY0N0NEN0JBQwotOjEwQTRBMDAwQThGNzZCQTYwRUU1M0RFOEZFOUQ3QTJGNDdCRDY3QzM3MgotOjEwQTRCMDAwOTg4RkUwNUFGNDVDMUM3REM3NkI4N0UxOTA4RERCQkQwMwotOjEwQTRDMDAwNUU3RTNGMUE2NTEwRTY0MzREQ0MxMzg5NUY2QkFCNkIyNAotOjEwQTREMDAwQzQ2QTdBRUY4RURCNEY4RjU0NDdGMDdCN0Q4QTFGRTk4OQotOjEwQTRFMDAwQUU4RUVBMkZBQ0FGRDZGQTBCNTQwRkY3MTdFRTU0REU1MAotOjEwQTRGMDAwRTM4QkQ5RUM0RUZCRkI4NzYzMUM4RjlFMzIzQkI2RjE5RQotOjEwQTUwMDAwQzRFQzQ4RkJCNkM1QTJGRDFFQUY1QTVFNTZFNERGQjBGMAotOjEwQTUxMDAwRUZDNTBEQkIyRkM5RjU3QUI3NjBGRkE3NEFDQUE3MUJDNQotOjEwQTUyMDAwMjg5RkFFQ0FENUVFMzE3Q0ZDMUYyOUUzQTk2NTQwMjlERQotOjEwQTUzMDAwQkJBMzdDRDdGOTk3NEFCQ0FDNEI5NDdCMTBFRTY5MkYzOAotOjEwQTU0MDAwNjhFMzk3RDMwRjY5RTM5NzMzN0I5MzM1RjU3Q0ZGNzgwNgotOjEwQTU1MDAwQ0RGQjg1NjcyNjY5REE4QjAzRjc2OERBNEIyRjE0NjgyMQotOjEwQTU2MDAwRUFFNTAzMTU5QUY3MkJBRkQ0NkFFQUIzODJEQUY4NjUwNQotOjEwQTU3MDAwRjVDREM1NjFGNzM4N0RCNEJFMUFBMERDRDA3RTc1RTY5NgotOjEwQTU4MDAwNkY2QURFQ0I1OEEzNUQ1Nzk2NDdCQkFFODkxQkI1RUIxMAotOjEwQTU5MDAwNTJDN0NERjY2QUQ3OTdEM0FENUQ1RjMyRTZFM0YyQkUyMAotOjEwQTVBMDAwN0UzRTJFN0ZCNjVEQzlDN0U1NThCMERGMzM4RDkzMkQ1MwotOjEwQTVCMDAwNjhCN0E5RjdBOUQ1RjdGRTJGMzc2NjU4REY0MDdGMDBBNwotOjEwQTVDMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDBEOQotOjEwQTVEMDAwMDBGRkIzRTQ2NjYwRjg1MTBGQzE3QkI5MTgxODZFNzJDMgotOjEwQTVFMDAwMjFGODQzMDFDRjY3ODZEMDZBMkMwQzBDMUE0MENDQzZFOAotOjEwQTVGMDAwQzRDMEMwQ0U0NEJDN0U3MTRFMDQ3QjFEMDcwM0MzNEM1NwotOjEwQTYwMDAwMjBERUM4MzFGMEZFMUE0ODdDOUQ4NzdFNzZBOUYzNDI5MQotOjEwQTYxMDAwNjg1OUMxODFGNzM3MDg1NzBBMzEzMEI0MEEzMzMwQzQ1QQotOjEwQTYyMDAwODg0MEY4MENBMkE4RjI1NTQyMDhCNkE5MjQ2NTc2MzlFQwotOjEwQTYzMDAwMDJGNTAzMDAyNENDNzEzNDgwMDMwMDAwMDAwMDAwMDAwOAotOjEwQTY0MDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA1OAotOjEwQTY1MDAwMDBGRkU1N0QwQjc4NTRENUI1RjAzRTczMUUzMzkzNzkzQQotOjEwQTY2MDAwNjRGMjIwMEYwMkYxODQwMEEyNDIxODAyODQ4NzA4MjdCNgotOjEwQTY3MDAwMjFDNEE4MDE4MzgwQkM1NDI2M0M0MzQ4MzIxMUE4QkZBMgotOjEwQTY4MDAwNkRCRDc3MjYwNDExQURCNTUxNjkxQkJDRTgxRDEwMTREMgotOjEwQTY5MDAwMTU3NUEwRDEwNjFDRTg0MDE0QjFEQURCQThGOEE4RDVERQotOjEwQTZBMDAwNzY1MDQ0NDA0OEMyQ0I4QjJERDU3RkFGQjVDRjQ5RTYxRAotOjEwQTZCMDAwOUM0QzQ4RDRGNkJGRkZGRkZERjFGM0RCRUNCM0NGRDlFMAotOjEwQTZDMDAwN0JFREY1REE2QkFEQkRGNjFFQzEzMjlBMjQ0RTIyRTQ2NQotOjEwQTZEMDAwNUJGOEEzNjU4NDI3ODRGNEU5MkNEQjBBREE4RjkxNjRBNAotOjEwQTZFMDAwNDJGQzJGOEJGMjM2OEUxMEVFNzc4RUYwQTQ1MTg0QkM5NAotOjEwQTZGMDAwQjU5OTBCOTg2OTNEQkNDRjQ2MDhBRDlGREUzNDNENjBFRgotOjEwQTcwMDAwQ0UyMjY0RkYwOEIzMDJFRjlGREU5QThGRjVDOTJGQkRGQQotOjEwQTcxMDAwRTcxNDY4N0JENTRCQkMwMDc1RDNCRTEzQ0U4ODlEMTA2MwotOjEwQTcyMDAwQUZCOUU1QTE2QkU5RjNGNjk3NzhCMjg1MEU0NUZDOTNENgotOjEwQTczMDAwNEQyNDg1OTA2MzE2QzJGRTJFQjJGQTUyMkJBQjU2NkQ5NQotOjEwQTc0MDAwREU3RjA3RjQ1QkRFNjQyNjU2REE0RkQ1RUU2NUQzQUVDNgotOjEwQTc1MDAwQTVGNTY1ODc0NDAyQUY1NDZEQUI5NUZBRDJGQUYyMDBDNQotOjEwQTc2MDAwMTc4NEZBOUE3RDdGQzY3MURBMEE0ODc5NzAyODIxMjcwMgotOjEwQTc3MDAwN0QxNjIyNUY0OUVCQ0U5Njk0NTlGNDc5NDU2MDY3MTFCNgotOjEwQTc4MDAwQkM1RkIxODM3MzlCRThGQjE1OUJGNjdGMENGRDU3MzREMAotOjEwQTc5MDAwOEEwMzc5REFGRjhBRUQzNjIyMEY2MTYzN0Y0QjYwMUVGMAotOjEwQTdBMDAwNEJBNjAxQkM1NTZGODhDNDRDRUJFNTk3NTY0OTA0NzAyNQotOjEwQTdCMDAwMjRENDRCQTUwRTE4RkY2MTQ5NzZDMDM4ODc3MDFDMEQ1NAotOjEwQTdDMDAwOUY1NUNGRDA3MUU4NzdENTJGNzA2RTk4NUFCNTg5Nzg5QwotOjEwQTdEMDAwMDA5RUQ2RERENjM5NEZEQTYxNUVCNUQyNjBGODdFRjdERAotOjEwQTdFMDAwN0QxMkJDQjcyQzUwRjZCMjU1MDZGODM2NEI0NTAwRTc0MwotOjEwQTdGMDAwQTZDREQyRDJBMTlERkRBREQ4RkVBNjBFQUU2MzBERDlEOQotOjEwQTgwMDAwQTk5RUE4NzY2Mzc5RDI0Nzg4NkNFRUFDNTcxMEEyMDQ1MwotOjEwQTgxMDAwRUQwMDc3NDA5QTNFQUNGM0Y5NzkyRTgxOTBEMUQwM0Y4QwotOjEwQTgyMDAwNEY2NDRCNjdGRjk0MzBDODA3RkVGN0U4M0Y4MTBGRjY4RgotOjEwQTgzMDAwM0EwMkRCQjIzQUU5QjVEMjQ1RkYyRDc3RDJFQkFDNEIwOQotOjEwQTg0MDAwQTU5RkQwOUUxN0REQkY1NjNFMDQ3NEEwRjBENEZCNUNEQwotOjEwQTg1MDAwNTgzRUUyNEJDMzcyODM0RjQ2QkNGRENBMzcwNENCMDY1OQotOjEwQTg2MDAwOUYxQjlGM0ZFNjFCOEJFNTI2OUY4MkU1MTNCRTYyMkM1NAotOjEwQTg3MDAwMDNCRTUyN0M2RjhCNkYwRTk2NUI3RDFFN0NGRTk0QUY4OQotOjEwQTg4MDAwMUNDQkVEQkUxQTdDRkVBQ0VGNkUyQzc3RjhGQ0Y4RkMwRQotOjEwQTg5MDAwMDVERjdBMkM4M0JFN0EyQzc3RjkxQUIwNkNGNDA1RjBCOAotOjEwQThBMDAwQkQ5NzdEREJCMTZDRjIwNUYxRjkxRTVGMTM5NjIxNUY1OAotOjEwQThCMDAwMThDQjdENDA1RjVBODY3RDJENTgxRUYwN0Q4OEU1QUIxNAotOjEwQThDMDAwQkUwODdFNzdEMDc3MUNDQjA3NTVCQzNCMjc5MDdDODE5OAotOjEwQThEMDAwRTJDREE5MTAxNzE1MTc5MjU4QTJFNDhCQjQ5RTU4Q0E1RQotOjEwQThFMDAwRUEyOUI3RjlGMzI1NUE0RkYxRDAzQUM1NjNERkNBNzBBOAotOjEwQThGMDAwQkU5OUQ2RkJENkIwRjZDQzdCNDg4MTg1RDYzM0ZEQUM2RAotOjEwQTkwMDAwN0RDMDgzNEE4MTk1RDYwN0Q0QjNGNkMxOUJGQzA1NzFGRgotOjEwQTkxMDAwQjQzRTM4QzBEQUFGREUxMTJFQjBEMUZBRDU0MUQ2OUVBMgotOjEwQTkyMDAwMTMyMjkzRURCNDlFMTM2NkY1RENCNzk0QzkwRTVBQ0Y4QgotOjEwQTkzMDAwNkQ2MUY1QkM4RkZEOTM5REI0OUUxNzYxREY4RjNGMTU1MAotOjEwQTk0MDAwOUUxQzRGRUJFM0RCNTlGQkM0NEJBNEQwNDVFQjEzMDkzMgotOjEwQTk1MDAwODdGNTAyN0I3RTYxMDJBRDE3Qjg1OEJEQTg1Rjk5MjBDQwotOjEwQTk2MDAwQzdFMEJGN0Q2MjY0MTFBMUJDQjBERDdGQjMyMkE0RDM3OAotOjEwQTk3MDAwQkExNDU5NDVEQzE0OUZGRTM5NTgwRjhCNjQzMUI0QkZBQgotOjEwQTk4MDAwRTUyRjUzODQ3MUI0MkU5MUQ1RDBGRTE3N0YwNUI2MUZFNQotOjEwQTk5MDAwMTA2NTZDNkZGN0FGQzJGNjAzOTI4Q0VEQTZEQTdCQjA1MAotOjEwQTlBMDAwRkVBQUE4NjA3QjcyRURCREY4RkVBQjkyODJFRDgzNkJEMAotOjEwQTlCMDAwMUZDMkZBNDFEMTgzRUQ2MzZCN0Y4REVGMUY5NDNDRDhBQQotOjEwQTlDMDAwRkVDOERBODA1MjQ4RUJGRkMxNzlCNjAwNUZENzcxOUVBRQotOjEwQTlEMDAwNzI5MjBERkMxQTRDMkJBNUZDQkE4RTIzNzM0MDNFMUVCRQotOjEwQTlFMDAwMDBBNkE2RjJCMDJFNUQ1MjQwQkZFREZCNDdERTkzM0NDMQotOjEwQTlGMDAwQTdGMjc2MzJENDk3M0VGNTQwMTZGNkYzMUNGNjIzRDIzMgotOjEwQUEwMDAwN0VGODlFRkI5OUY4Q0Q1ODVEM0YxM0JGMjlEN0ZBNjlCMAotOjEwQUExMDAwODRGN0VBQUNCREVCNjdERjM3RTNGNUYwN0M1M0ExRjVEMwotOjEwQUEyMDAwQjMxN0ZCNzFGNDZFNUUxM0JGOURBMDg3RTdEQjRBQURFMQotOjEwQUEzMDAwOUY4M0Q4NEY0MkVGRTAwOThCNjM3NEZEODRDNTY1NUE0QwotOjEwQUE0MDAwM0Y3RkM0N0VGQUY0MEUxRTQ1MUFBN0VCNDc5MTk2NkIyMgotOjEwQUE1MDAwRkQ3Qzg4RkRBNEY3QUU5RkIwNzRBRDFFMUU2OTg1RDYzRgotOjEwQUE2MDAwQ0YxMUVDQTc3RkVGRTZBNTk4QUZEM0MzNjNBRUQyRkFDMAotOjEwQUE3MDAwMzk4OTc0Q0ZFQTVEM0YwNzFDN0FGQzFDNzA3NEUwRTdFQgotOjEwQUE4MDAwMUNDMjMzQTg3N0YzMkE3MEVBRjE1M0UwRUNDMENGMjU1QgotOjEwQUE5MDAwRUNFN0FBREVGNTczQzBBOUM3Q0YwMTY3MDc3RTQ0MEVCNQotOjEwQUFBMDAwRTYzNUFDNzdGMzJBODhEN0UzQTcyMEJFMDMzRjRFMEVFNgotOjEwQUFCMDAwRTAxOUQxM0I3ODVFRURBM0M3Q0ZBQjdEM0FGMDkzOEEyNgotOjEwQUFDMDAwRjA4Q0VFMUQzQzg1Mjk3QUZDMTRBNjc0RTA0NzQ2Nzg4QwotOjEwQUFEMDAwQzZGNUFFOUY1NzUzRjRGODc5MzVBNTAzM0Y1NzYxM0Y0QwotOjEwQUFFMDAwRDdGNTZFNUU4NUE5N0FGQzE0QTY3NkUwMjcxN0ZCQzkxOAotOjEwQUFGMDAwRjc2QzQ3NzgwOEVEQzdEMTdEM0YwN0ZCRUJGMTczQjBFQQotOjEwQUIwMDAwN0YwNzdFQUVDNTdFQTZEMDdFQjI3QkVFQTcyODUzOEY5MAotOjEwQUIxMDAwOUZBMkNDMEVGQzE0MjI5RTZGRTg1RDNGMDczM0Y1RjgzMAotOjEwQUIyMDAwMzk5OEQ5ODE5RkE5RDhDRkQ0REVDREFCRTgwQTNEN0UzNAotOjEwQUIzMDAwOEFBRTYwRjg5OTI0OENDMDc1ODZBRTlENkU5RTdFNzIzQQotOjEwQUI0MDAwN0RCRjdDODVBM0VGRjMyRTU2RTc1RDZFMDI3NjBGQUZENwotOjEwQUI1MDAwRDkzM0E0NDVFMUU5RkJGNjFEMDlCOTBGOTA2OEJCQTZGRQotOjEwQUI2MDAwRTA3NkMwOEY4MzVBNzlEMTc2NERGQ0Q4Mzg5RDFEOTVGQgotOjEwQUI3MDAwQTAyNEVBRUE0OUM1N0Q3NUVGRjcyOTFEQTA2QjRGOUQxQQotOjEwQUI4MDAwNzNCNUFFM0RERDkzQUJBQjY3OTQ4RkQ3QkRERkJGQTY4QQotOjEwQUI5MDAwNDA1N0JGRTJFRTFCNzVFRjY3Rjk2RkQxRDVCM0Q3Q0Y0MgotOjEwQUJBMDAwRDNCRDNGQTg3RUExQUVGRENBODYwQTVERkI1NTgxOTU0NwotOjEwQUJCMDAwQkFGQTM1REI3RkEyN0I3RjU4NzA4REFFN0Q3OEQzMDNFOAotOjEwQUJDMDAwQkFGNjExRTE0Nzc0RjU5MTg3MUVEM0JEM0ZCQTY1OEI4NAotOjEwQUJEMDAwQUU3RENDODdDRkVBREFDNzQ1NzZFOUVBRDcxRURGQTM5OAotOjEwQUJFMDAwN0JGRkJBRjYwM0JBRkFBNDhCQkZEN0JEOUY0RkRFRDU2MQotOjEwQUJGMDAwREJEQjk2M0ZFQkRFOUZFMkZBNENENzdFN0REQTk3MDZGMQotOjEwQUMwMDAwM0JENUVFM0E3NjhENUFFNzQxQUUwOEZBMjVGRTc0MDkzNwotOjEwQUMxMDAwRURENUIwNDNDMkJBRDREN0NFRkMxNEM3NTJGOTI4RTU1QgotOjEwQUMyMDAwMUZFOUMwMjIzOTE5Rjk5MkZFNTFCQjIxQkY2RkY5OTU3NgotOjEwQUMzMDAwMTFGQUZDQUVGMTlFMkI1REY0Rjk1RDkyNjdCODJCODY5QwotOjEwQUM0MDAwN0Q0M0Y5OEQyMzY5NTBDQTI2Mjg4REVERjc4OThDREY2NQotOjEwQUM1MDAwMEIzMjJFMEQzRTQyQkZGNzlBREEwNzI3RDBGQTcwM0UyQwotOjEwQUM2MDAwM0YwOEYyRjEzMjY3NDJCQjNBOEUyNzM1RjA1RTlDOTk3RAotOjEwQUM3MDAwQTBERjc0NUY1NkRFOTNGRTI4Nzk1OERGOUZEQTE5NUNGNwotOjEwQUM4MDAwNjdCRkVCNDU0RjFBREE1MUI1OUZGOEMxQ0U1OUQ3OUYzMAotOjEwQUM5MDAwQ0VBQjJGMjFBRjcwOUY4NEZEMDNFOUY3RkQ5N0E2NzkxNgotOjEwQUNBMDAwNjg3RjY2ODlGQTE5RDFFMzRCNzRGQ0ExMzg3RTE4RTRGOQotOjEwQUNCMDAwRTEyMDhDM0ZCQUVCRjhFNjAxNjM3NUUzNUIzMkNCNzVCQwotOjEwQUNDMDAwRTM1QjI0M0FCRThCOTBERkQ3N0VBRThFNEY4OTMwOUVGOQotOjEwQUNEMDAwOTAzN0I5Q0Y3MTdDNzM2NjM5OEU3RjlGNDRGREFFRThBMwotOjEwQUNFMDAwRjFFMzNBQzY2RjgxRjlCRkRGRERGQzA3OENEN0NGM0ZCOAotOjEwQUNGMDAwQjM0MjNGN0Y4OUNERkZBM0RBRDNFQUY4NzEzOEZGM0YzMwotOjEwQUQwMDAwNzNBN0Q5RkMzMzJCRDhGQ0NEQUNERjhFRjE5RDFERjg5OQotOjEwQUQxMDAwOEZDMEY4QzdCQTE5REY5QzNENDEzRkZGMkIyQUY1RjNERQotOjEwQUQyMDAwMzdCM0YxNEZENjVFNTBDN0I3RTNGODVGNzIxN0Q4RkM2MAotOjEwQUQzMDAwQUZBOEM0RjEyNUIzQzcwREZDMjM2NUM0RDUwNEU4Rjg1QQotOjEwQUQ0MDAwQTQxRjU1N0NBOUMwMkU3NDFDMjg4NzI0NTJBMTIxNjRGRAotOjEwQUQ1MDAwMUIzNzAwRTFCODJCOEVGMURCNTc3MTk0REY1MDlGRjk2MAotOjEwQUQ2MDAwRjEzOTA5NTBDRDk5NDdGRDQ2OTVENzU3RUNDODk3NDAyMgotOjEwQUQ3MDAwRUY2MTNCRjVCNzk2QThBMDJFNkVFMjkxQkZDOTA2NzNBRQotOjEwQUQ4MDAwNjAxMDg1QjdCNTg5Rjc0MzdERjE4NkVCMDJBMDVGQkQwMgotOjEwQUQ5MDAwNjZCMkEwMTRCRTEzNDgxODlFN0ZGRUNCNjE1QkEyRTc4QgotOjEwQURBMDAwNjUyQzk3RDQ4QkM3MjI1MUYyRDZFMTA3MTY5MDIxMzUzNgotOjEwQURCMDAwMTRCRTI5QzAwNEEzM0JFQjlGNTIzRjBFMUNFMzhGQTk5NgotOjEwQURDMDAwREY0M0E4RkZGMzk5QzhDNkZCMEJGNUY3QTAxRUExRkU1MQotOjEwQUREMDAwMUUzQUNFQTQxNkJGQTNERDFENEVBM0YwOTdBQUYwN0ZBNgotOjEwQURFMDAwMkEzMDc5RkRGNDM2MkVFMEE3RjJGOUQ1OEY0N0EwN0ZGRgotOjEwQURGMDAwQkRFMDZFMUI0NTdBMjcxQzY1RkUyNDVEOURDRUNCMEYwMgotOjEwQUUwMDAwNzQ2QURGNkQwRTZDRTExMEJGMzJFMDZCM0E4QTI2MjE2NgotOjEwQUUxMDAwOEJENjY3NTA1Qzc3QkVGRkMxQkVBOTA3MzkyNzIxQjcyMwotOjEwQUUyMDAwMTI0NTRDQTVFRkRGQkU5QUVCRUZBMkUzQ0U1MkNDQjlCMAotOjEwQUUzMDAwNkMxRDUyMzI0QzI4RDcyNEMzMzQ5NjkwNUIxQTQ3ODgzNQotOjEwQUU0MDAwQjQwNzMyNUQxMTNGOEQ0NDhEM0JBMzU4NUY5RjU1QUFENwotOjEwQUU1MDAwQUZCNzhBOEE2OEEyNzBCNTRFRTdDODY2REFFRkVDMzlGOAotOjEwQUU2MDAwRkE3NjZEOUM4MUE2NDQ0NjY3NzVCQzUyOEE5Mzc0RkE0MwotOjEwQUU3MDAwNjgzNjk0QjlGMEQ4ODU3NDlFRTM2MkRGNkFGMDc4MTc3QgotOjEwQUU4MDAwODkyNDhDN0VCQ0JGMEYwMUJBRkE5M0YxQkQ3OTJFMzZBRQotOjEwQUU5MDAwNkYyM0JDNzM0NDhCNTI0QUU3MzlBNzhDMEYwMDdGMUI4QQotOjEwQUVBMDAwRTFGRjY4OUY0RDMxRTVEMDcyRkRBMzIyMzE3NTlEOEY4MgotOjEwQUVCMDAwMTFGRUI5MUVFMzdDODIyMkFDRjNGM0NCOERDRjE5REZGOAotOjEwQUVDMDAwMUM1M0U5RkYyOUYwMDcyREJGMDBGRUEwRjAxRjU1RjkyNAotOjEwQUVEMDAwQTM1M0FGMzJGRUYwOUEzREQzODAxRkRBMzdGMjA0RTk3NAotOjEwQUVFMDAwQUFGMkNCQUQyQUJGMkNBOUQ3RjMwNTIxMUUxMUU4QjhEMQotOjEwQUVGMDAwNkMwRTk3RkI0MDE0MUZDQzU2Rjk2MDU5ODM5RTZGNkUwMQotOjEwQUYwMDAwMjc3RTMxM0QwNjVERTY2RUQ4N0M2RjlBREM3NTdFOUZBQwotOjEwQUYxMDAwQTg3QzMzRkZDMUZEODg5RkFFRjM2NDc0QkE0M0E1RDMwOAotOjEwQUYyMDAwRUQzNUZBRjY1QjU1QkFERUFFRDI3NTRFQzNDM0FGNTFGRQotOjEwQUYzMDAwRjU0MUU2QzkwMTExRTREREZCNTM4RDlFMTExRDNEM0QzOAotOjEwQUY0MDAwMkEzRDhENzBERUExRDJGMzhFMUYzMzdBMUFFMThEQThDRgotOjEwQUY1MDAwRjQ4QzM0OUMxM0M5ODBBRUYwMUFFMTVCNzA3Nzk3RjlEQQotOjEwQUY2MDAwNjA1Q0FCQ0MxRjlCOUVERUE2RkM1NTQ3QTM5RTU3MDU5RAotOjEwQUY3MDAwNkY1ODc1MzQ0QUNFNTY2QzlGQUVBQjJGMEZDQ0Q1QkRGMwotOjEwQUY4MDAwQkZBQ0ExNENEN0JFQTQ3RUI5QUU3REQxRkEzQjc1RjU1RQotOjEwQUY5MDAwMzJGRjhGNzVFRjJGQjhCQjU2RDc3RTdCQ0RGREJBRjY0QgotOjEwQUZBMDAwRjlFNTBGRUJFQTczM0QxQjc1RUZDRjlFQjM1OUQ3M0UyMgotOjEwQUZCMDAwQUJGNDE5NURGQjhDRTI5REJBRkE3NDY1QjdFRTdERDNGNAotOjEwQUZDMDAwQkVBQjZFMDZGRTdDRUIzRDlFODAzRDcxQzFGRDA1QzZBRAotOjEwQUZEMDAwMzMyRkI4NDUzN0JDNzNENDI3MjM1RjFGRjMwREMxRjI1RAotOjEwQUZFMDAwQjhDRjhEN0M3RkQyMzcxNkNCRDZBNjY2M0JBQzEzNzQxOAotOjEwQUZGMDAwNUQ1QzRBMTIwODY5MzJDREFCNURERjBGRDY2OTgyRUIyQQotOjEwQjAwMDAwNjlDOEU0QTlGNUQzN0FCMzQ5NDY3OTI4Njk5MDQ4NzhBNAotOjEwQjAxMDAwMjQyMTFDMkMzNjJBMUNFRDdDNTQ3QkE0ODdGNjA2QUExRQotOjEwQjAyMDAwRjg5M0JBQjY5NzQ0NjIzRkY3M0U1Mjc2MDVGMDY1NzdEQgotOjEwQjAzMDAwRUIwM0ZEQ0IwMEJCQTc0REI1RUI4REVEOTUxQzI5OEQyQQotOjEwQjA0MDAwN0U0RUM4MUE4NEMzNkE2Mjc2NDdBNUM0RTRCRjcyNTdBRAotOjEwQjA1MDAwN0EwMTcxNDIzRDNDQjhFNjcyRTMwNTI5OTNBNzAyOUY0RAotOjEwQjA2MDAwNjRFQkU0Nzg1OUMzMzUzQUZENEUyMDlBREMwN0Y4NkQ1RAotOjEwQjA3MDAwQTRFRUY5OEFFREQ3RUFCRTNCQjU5RjQ3QjhBQjQxNTc3RQotOjEwQjA4MDAwOEM4MzY1QjFGNDMzMTNFOEUxNzA3M0U2OEM2MTAwQTczQgotOjEwQjA5MDAwNzIxNEVCNEQ3REQwMkUzQ0U1MkI1RTc1NzQxMEQwQUY1NQotOjEwQjBBMDAwMTRDQkUzQkUzOTU4MUVGMzc5QjAzQ0VBMkJDN0YyNTNGOAotOjEwQjBCMDAwNUYwRDk2MTFERkRENThGRUM1RTdDN0YyNjNERjdBMkMxRQotOjEwQjBDMDAwM0ZGMkQ1NjNGOUExQUYwMUNCRjc3RDAxMkMwRkZCQjZBMQotOjEwQjBEMDAwNjNGOThFMkY4ODY1OEJBRjA5Q0I1NjlGODJBNTI2NzdBMwotOjEwQjBFMDAwM0RGMURENzE3NTFEM0UwOUZDMTc4M0NGQTQzQTdGRUQ1QwotOjEwQjBGMDAwRkEwOTlEN0MxNkM3REY4NzdDQTZFMUI5QTRDMUFDRjIzMgotOjEwQjEwMDAwNDM4QThFMUYxMkMwOTc0MzNFRUJBMUJENDE1NEY5QjA1NAotOjEwQjExMDAwQkJFRjYzQjc3QkI3RkM2QkY4NkRFQTBGRTRCNzRFN0UwRAotOjEwQjEyMDAwQ0EzMEYwNTM3NjRGRkMzNDhDOEZFMkE3QTkyNjE3QjNCMAotOjEwQjEzMDAwN0I1NDdFRkExOUNDMjM4NjVGMzEwRjhDOTAzRTUxRjZGQQotOjEwQjE0MDAwOUE5MjZGODI3NTZDQTVCQTBGNDIxRjYwRkRBQzNBNzY3OQotOjEwQjE1MDAwMUQ3REI3MDVFREJBQzAxMDU4MzdDRTBFRjlEQjYwRDhBQgotOjEwQjE2MDAwNDczOEZCMjEyNTdFNTZGN0YzMzNGMjQ5Rjc3ODU3RDA1RAotOjEwQjE3MDAwQkY1OTFBQTA0NDRGRUFEQTZFOEQ2Mzc4QjU5QTQ4MzEwOAotOjEwQjE4MDAwQTFFQkRBRkQ4MzlFNzIyRjFDOEE3NTgxMjRDMkY3MDEyMAotOjEwQjE5MDAwRjc3NDQ3OEM3RUE5QUQwQ0Y4RUQwOUFGNzU4RUFGNzJEMAotOjEwQjFBMDAwQTBCRjYzOEZGRDNEMEZDQUE5MjY2NjJGQzczNUYzNjg4MAotOjEwQjFCMDAwQjc5M0YwOTM2RUMwNkZDN0JBNjQ3NkE3NDFCQ0JEN0RFQwotOjEwQjFDMDAwOTBFNDQyQkI4MTRDRDZFM0NGNUZBMEMzREZGRDE0NDdDMAotOjEwQjFEMDAwMkRCOEVFRDZBNzIxRkUwNjdFMzUzOEJEMTdGOEVCNDkwRgotOjEwQjFFMDAwQkZGNzg0Q0Y4NTMwRUY3RjAxM0U3QkQyOEYzREU5NDVBRAotOjEwQjFGMDAwQTJDODJGMzREMUY5QjdFRDFCOTZGQjgwMENFMzVFMUU3RAotOjEwQjIwMDAwREZEQUZFOUExMTlFNUY3RTQ3M0U2RTRCRDFGOEI4MjU3RAotOjEwQjIxMDAwOTM4MDFGQTRDQUNCRDlDNjJCRTM4MTJFMURGREY0NDAxOQotOjEwQjIyMDAwNEZFRTc3OUY2NDgyRkY3RTNBNEJERkRGN0RDNkZFRTIwMgotOjEwQjIzMDAwMjVDMjBEQTdFMzNBMjQ4OUM0NTNCRjkyRjc2Q0UzRDEyQQotOjEwQjI0MDAwOUY3MTQ3RkMxMDM3RDg2NzczRDdDOUUwMzc5RUZDQUZCMgotOjEwQjI1MDAwQjAwQzNERUJFMzBCNjcwRjNERTkwNDNGNkM2NTFBNUZGMwotOjEwQjI2MDAwNzMzNDA2MURCNUIyMkE5ODU1NjM4RkY2NTc5QUY0RjVENAotOjEwQjI3MDAwQjNGNTVDNzExMEU3MjVDN0NGMUMwNkVCOENBQkU2QThENQotOjEwQjI4MDAwMDg3QTNGMEQ0QkFEOUY5NTY5MTI4RTczNzI3Qjc2M0NBOQotOjEwQjI5MDAwRjNGRjAyNEM5RkVDNDg0MDdENzNEMjY3QzFGN0ZGRDlBMgotOjEwQjJBMDAwRjA3NEQ3OEYwNjBGMjE4REU0MzMwQkU4NzNEQTk2REQ0NwotOjEwQjJCMDAwRkRGQkREQ0E4MzcwNUU4MkY4MjkwOTg5NUY4MUJGNjk2MQotOjEwQjJDMDAwQTVGRjdGM0IwMEZBMTVCMEFFRjVFQjBERjI3RUYzNzBGMwotOjEwQjJEMDAwNzhCRTQzMzcxRUZENEVENkY2OENFMUJCRUVFNTRFMjAyMAotOjEwQjJFMDAwQzczNEJFQTdGNEZCQUJCQUJGQkQ2MkJCQjU0NjZGQzdFMAotOjEwQjJGMDAwMjZFOEVBREVBNkY0MUE5RDVEMEJGRjAwQzNCRDg2MTNBNwotOjEwQjMwMDAwNjAwOUFCNTREOUIwNERCMEFGMDc3RURBMDNDMTQ5RjA0NAotOjEwQjMxMDAwNUYzOEY2NUU5NTI1MjI3OTY0MTQ5NzE2RTBEMzg1NjMyRAotOjEwQjMyMDAwMzVGRTk3NjdGRjk5RUFBOTEzNkY4QTA0RTQ4QzVDQTI0MwotOjEwQjMzMDAwNTBFNUE5QUUyMEYyOUI4OTk4Njg3RDkxRkFGNkMyQzZDNQotOjEwQjM0MDAwMTUyNUIwNkU5RDc4RjkyNkY0NDMxNjkzNTIyN0Y4Qzc1OQotOjEwQjM1MDAwRTVBNDNFMEZFMkI1QTc4OUE5MThFNEYzMzQ3OUM3MzkwQgotOjEwQjM2MDAwMzI0QTFFQUQ4Mjg0OUQyRTVBQUZCN0UzQTk3RkFGQUJBMAotOjEwQjM3MDAwMkY2QkQwRDc5NzkyNUI1MjYwREY3RUU5MDY5MTA0MzgzRAotOjEwQjM4MDAwRDAxQkZBRjZBRjc5MTdGNkJCOENENEFDODM3NUZCNTc5QwotOjEwQjM5MDAwNkFCQzZCQTE4QjA4MTk1NDZGNTVGREY2RjFCQzMyMEFEQgotOjEwQjNBMDAwODc0QjYwNzExNjZEMUY3QTc5MjJGMzdGMkE2NjA2MjQxNwotOjEwQjNCMDAwODVCRUZGNTlFM0M4NUJBOTA2QTJERjA3RDZDMTdFQkNFNAotOjEwQjNDMDAwN0YzQTcxNkYyMzVERTlGNzVERTEzN0MyQUJEOTAzNUQ2OQotOjEwQjNEMDAwRjZDMzU1Mzg5MkI3NzM0QTIwODYxRUNCMTQzODI2NjdCOQotOjEwQjNFMDAwQUFCRTJCMTA1Q0JBQjhDNzM0NDNGRDdCRjM1MzMyRDFFRAotOjEwQjNGMDAwRjFEMzFFREU5MzI3OEM2NkZDMDNGQ0MwMDlFRDkyRTdCNwotOjEwQjQwMDAwODdGNDlGRDZBNUZGODI3RjZBRkZGRDY4RkY3OUJBRkVBOQotOjEwQjQxMDAwQTdGRDUzRkIxRkQ4MDVGRTc5QjFGQUFGRkFFREYzMkY2NAotOjEwQjQyMDAwRkJBOTNFQTk3OEYxOTc0RTQyRDdDOTEzNDI3RDhBOUI2QQotOjEwQjQzMDAwRDJCNTcyREJCRDRFODU5NkM3MDVCRjEzRjhGNTQ0ODBDMwotOjEwQjQ0MDAwMkY4RTQ1RUY4NzA1NEUxNTQyQzVDRTQxREMwREZFNDlENgotOjEwQjQ1MDAwRkIzRkY5RUNDRjMwMUVGMUQ1MzZEMTg1RjFCNEVERTZFNgotOjEwQjQ2MDAwQjA5OUNBNjE3NUUzRjIxMjkyODNGNTIzQUM3RURGMTlCRAotOjEwQjQ3MDAwMUVFQTREN0FGRUFCNzhGQTk3Mjk5MDFGNDIzOTQ1OEQyNgotOjEwQjQ4MDAwMkY4NUQxOUVBRERFRkE3OTExQUM0RjVFRDI4RTcyNjRGQgotOjEwQjQ5MDAwRkMwRUM2QkY5ODg4RkFBRjRDOEFFRkRBNEVFMUM0Mzg4QQotOjEwQjRBMDAwODE1N0M1OEJCN0YxNjc2Nzc4Mjc5NDM3N0MwMUZBODI5QgotOjEwQjRCMDAwN0EyMkU4QzcxQkJGMkI1N0VERDQzNTgyMjNGOTk4OEQyQwotOjEwQjRDMDAwRkU3QjBDMTkwMzdBNTFDMzBCMDkzMDNCQjVFRTk5NUYzMwotOjEwQjREMDAwRTcxQ0ExNzA5RERBRkFBNjkzOEJDMjk3MjY0RjY3ODM2QgotOjEwQjRFMDAwOEJGRTczOEZEQ0JEREU2REE1RjIxNjZEMEY2OUVCOTZEQQotOjEwQjRGMDAwRENBNERBRDcyMTU2NTY4QTYxMjdFNEYzNTQ2RTE2RERCMAotOjEwQjUwMDAwN0VGQUI4RjJGOTI3OUY3QTBDRTI5OTdGMzJCQjA3RDExNQotOjEwQjUxMDAwRkU1NzNDRkZEQUZCRTM2OTdEQzU0RTMxQjk4NDREQzM2QwotOjEwQjUyMDAwQ0VBNTc0RDJDNzRCRkZCRjNCQjc5MzFFMTVCRjc5NEQ1NQotOjEwQjUzMDAwOTI4N0IxRTdGNzI0NzZEMjY1QzVDRUZEMTIxOUQ2MTVFQwotOjEwQjU0MDAwMUY5MzgzRkJBNTg4M0QwNjdEODI0NzhBQzA1RUE4N0I0QQotOjEwQjU1MDAwRTZCRjI1ODgzMzlFRDhDNzkxRDRBQzE4RjhEQ0ZDMUExNgotOjEwQjU2MDAwREEwMzgwMjdBNEE3NEFBRjBFRkExOURFRjc1MkJBODA5MQotOjEwQjU3MDAwREUzNkQyQ0JGOERFMjI1NUJGNDBCRjkwNjc0MUY5RkJFMwotOjEwQjU4MDAwODUzRDkwMDdGNTkxRDkwRDc4Mjg3RjYxOTUxM0U2RjNGNQotOjEwQjU5MDAwODU1MEMzRjhGQ0YxN0I1MzQwOUY5NThCRkUxNDE3OTZBMgotOjEwQjVBMDAwRUM3OUY5MTMzRjQyRkU1QkY2RjY4RjUyMzBCRTQ0OTRCRAotOjEwQjVCMDAwNzQxM0FFNDVGRTc0OThFNzkyNERCMzcwOUU0Qjg5MDdBNQotOjEwQjVDMDAwRjlCMEZDNzFCRTM0NDBDQjBCMDIyOURFMTk0MzRFQUNGRQotOjEwQjVEMDAwMjI5MzkzMkZCNjUwRTJEMjc5N0UwMUZFMjRFOEVGNzdEMgotOjEwQjVFMDAwRjhDMDM2QjRCQkVGMjRBMDBGN0VBNENFODU1QTBDNTgwOQotOjEwQjVGMDAwQkY2MDYxRjRGQUFCQkEyRTEwQjAzRUEzRjk3N0VCN0REMQotOjEwQjYwMDAwMkQ0MEE3OTNGRDk1NTREODc3RjExMkMxQUZFMjgzRkI4QgotOjEwQjYxMDAwOTZGNkNCQkYzRDI1OTVEMTg5Qzg0MjlFRkExRDVERjdCMAotOjEwQjYyMDAwMjdDMzczNzhCRjQ1NTRBQzM5QkFFRkM4Qjc1OTlERTMwNwotOjEwQjYzMDAwQUY1NkM3QTc3MEM3QzE3QUZENDU0QTZDRkIzNTRGRDREQQotOjEwQjY0MDAwRjQwMDVEQjdBM0Y4MkM0QURFOTlGQzZGQkQ5RkM5QkIxRgotOjEwQjY1MDAwMjZGRjgxRTlDNUQwN0VGRTMwOTMyM0Y4MEVENjQzMEEzQgotOjEwQjY2MDAwNTczODE1REJGN0NGRTQ1MDNGNTAzRjNBOTY5QzZGMTVBMwotOjEwQjY3MDAwNTUzOUQ3QjcxQkY5ODVDMjJGNzBGMTUxN0MwM0UzMjRFQwotOjEwQjY4MDAwMjIxRDcwREY2NUU5MDZGQTdEOTQxRUY1QzJCOENFQUVDNAotOjEwQjY5MDAwRkQ2QTcyQkM0Q0YzNUI0NUJEM0UyMDlCOTgxRUU4REUwNAotOjEwQjZBMDAwQUVGMjIzOUUyQUM1QzA1MzhGODFGQzUyNzlGNUNCMjA4MAotOjEwQjZCMDAwQkY2MjI5Q0NGRkNCMURDREVGQ0ZBMzcyRkI2NTUwOTNBQQotOjEwQjZDMDAwNUJCRDVFMzVDQTZERjlBRUQxMjQ5NkRDN0U2OTc3OTM5OQotOjEwQjZEMDAwOTg3MjRCOUZDNzk0NUI3QjA0RjlGOUZGQjQ1RUQ1RjA3OQotOjEwQjZFMDAwMzgwQ0YwNzg0RDI3MUUzNTNERDkxRDNFOEQ3QUYyOTBFRAotOjEwQjZGMDAwMjAyMzVFOEQ3QTkyRkUxRDI2Nzk1REY5NTFFMzQzOERGQwotOjEwQjcwMDAwRkYyQTlFQUJCQTAyRjQ1MTA3OUY2QTdDRDhDMUE3MUFFMAotOjEwQjcxMDAwMUY3Njg5RUZFQUYwNjg2Q0JGMDBGQjM0MTRBRUY5OTYyRgotOjEwQjcyMDAwOEREMzhFNTI1N0QyRDI0RTcwREYyNjdGMjY4RkZCQUE0MgotOjEwQjczMDAwOTZGMzg0RTU4MTEwMTFGMzQzM0YzMEQ1OEMwNjNCNzVCOQotOjEwQjc0MDAwRTJERjZGM0Q3RDE3ODU3NzNFRjE4QjJDMkZBMDVFNDRBNQotOjEwQjc1MDAwQkJGRkQyQjdERjRFQTBGMzk5QTdFMjc5M0U0NUZCNTQ3OQotOjEwQjc2MDAwNEE5NzM5MDIxNzhFQTM3MENFMTU4ODNGM0UxMUUyQjc3MwotOjEwQjc3MDAwMUNGOTM0MEE4RUY5RTVGQTNBRkM0RDRDRTlFQ0E3QTcxRQotOjEwQjc4MDAwRjdCRkFCOUZGMjdEQ0JCNzI5NUQzRjFENDRDOEJCNTBDRgotOjEwQjc5MDAwOEEzOEJDMTBDRDU3RDM4MUFFMTQ3RkRFNTE1QzYwMDA3NwotOjEwQjdBMDAwRUFBOTg4NTAxQUU1NzdCRDIwMzJGQkYzRURDMjE5QTM1MAotOjEwQjdCMDAwQzFCRUM5OUYzRDJDOUVGMUZCNjBGNDdCQkRBQTNFM0IwMAotOjEwQjdDMDAwRUI5N0UzNDFDRjlGMEQ2NUEzN0Y3QkY2RDAyMjQ3QUM3QgotOjEwQjdEMDAwQkNEMDY2OTVDRjVFNTNGNzVEREFFQzVDM0Q0RkY5QkZBOAotOjEwQjdFMDAwOERCNEEzN0RFM0I3NUJDOUI2MThGQjgyMUI0NTRENUZFMwotOjEwQjdGMDAwQUI3NEEzN0YzQzFEN0Y4RUNBODc3M0U5QTdGMUI5NTE1MwotOjEwQjgwMDAwNzQ5QjM5RjU4NEUwRUM0QTA3RjhGQjM0Q0EwRkZCQTFCRQotOjEwQjgxMDAwRjgwNUJFMDZGQzM2NUIyMzQ1QTUzMUUyNzlDRkE5RjhEMQotOjEwQjgyMDAwOUI3OEUwNkJDQ0NGMkQwQ0U1MEI4MEM3NDIzQkFGOEJGOAotOjEwQjgzMDAwODMzQ0E5QzlFQjUwMzIxNEUwOUE3ODYwRjlDRjQ3NTNBMgotOjEwQjg0MDAwM0VGNjFFRTJERDkwOEZFQjBEOUQ5MTNDMzFGQzYxMjNCNQotOjEwQjg1MDAwM0VBMTdGQjAzMzhGODgyRUM0RDc3QjYyRTkxMkMwRUI0NAotOjEwQjg2MDAwN0JCM0FDMDRGNjM1REY5NURDNTVCMUUwMkMzM0IzRjU5MgotOjEwQjg3MDAwNjYyRTI5QkQzMDhBRkJCRjBGQkZGOUIzMURFMTAyOEFENgotOjEwQjg4MDAwOEZCMzc2OTZGN0REOTVGRjk4REM5Rjc1NzE4MTVBMEUyMAotOjEwQjg5MDAwRjg5MDY3RjU2NDJFMDA3MUI0MjJFMkY5RjkwNDBFRTUyMAotOjEwQjhBMDAwN0Q1MkI0RkVDQTZGOUFGRTNDRTRGNTU0ODczODk3ODlGRQotOjEwQjhCMDAwQjY1NzBCMTEwOUY4RDhEQkI0NTMwMEZCRkQyNjk5MjhDNQotOjEwQjhDMDAwMTg4RjEwNkE4NkNEOEM4QTdCMUQxMTA1QzQ1N0YzREY1MwotOjEwQjhEMDAwRTZERDBFRjgzRDM3RDM0QzAwMkU2NUU4MTkyN0Q4MDE3OAotOjEwQjhFMDAwRTc0MjIzNTEwRUJBOUJENzFGN0M2NDVBQTEwOEZEMTA3MgotOjEwQjhGMDAwRTQwRjIzM0YxNDI1REI3NEY1NTk5MzQ5M0YzN0E1REI0QgotOjEwQjkwMDAwNDQ3MzY0OTUzQjA2RkRFQTI0QzY2N0JERDY2Rjk2RkY3NwotOjEwQjkxMDAwQ0ZGNERCMDRBQURGMTg1RjhCRDFGQUVEMjY4OUYxN0QyNQotOjEwQjkyMDAwOTQ3RTRCOERBNURGNTZENkNBQTlDMDE3MkJGNzY2QTcwNAotOjEwQjkzMDAwMDI1RDU3QkVCMUE0NEYyQ0ZERjZCQThGRjlGNzZGQTg4MAotOjEwQjk0MDAwNzlFNjZERkRBODdFMUIxRUE1REZGQTUxRkQxNjIzQUUxQwotOjEwQjk1MDAwM0I1QUVBQTU3RUIzRkNDRkM4REZFQkEwREY2MkNDQjdEMQotOjEwQjk2MDAwNThDNTlGQTZERjhBNDNCNUE4REY4QUZCRjFCQTdDQTkzOAotOjEwQjk3MDAwNDk1MjRGRkFBREVDOTdCM0IwMkVCQTZEMzFGODA3RjBEQgotOjEwQjk4MDAwMEFGQUVEMEQ1NUNGQzEzOEEwRTdGRTVENzI3RDI3M0Q2NwotOjEwQjk5MDAwNTdENTVCM0RGNzNGODQ2NzREQ0ZBREVDQ0ZBMTNERDM4RAotOjEwQjlBMDAwOTUwRjk5OUU1Qjk5QzVGNERDQ0FCRDRDQ0ZBRDFDQzQwNAotOjEwQjlCMDAwRjQ5QzUxQkYxNTc0RDE2RkVDRkJFQTIxRjQ3QkY0MjNBNgotOjEwQjlDMDAwQjM3RTdEMUI2RDJGOTkyM0JBMkRGNEZEMTI1OTNCOUYzOQotOjEwQjlEMDAwNTEzMzNBNUFERkZEQkJENDhEQkU3MzlGQzE3MzJFM0RFOAotOjEwQjlFMDAwRTlCQjNGODJCRTFCODQ3QTZDMjBDODkxOTEzRjZFMUNEQwotOjEwQjlGMDAwNjhEM0U1RDNCREY3RjVCMUU3NUUwNDc5RjkwMzhGRkVBRgotOjEwQkEwMDAwRjcwNzI2RTYyN0VERkJGQUQ4NDg5MEJCRjcwMDFFQUFGOQotOjEwQkExMDAwRUY5RTUxRjlBRkQ1RTc0NzdEM0E3OTI4OTNGN0FBN0I5NgotOjEwQkEyMDAwMThGRUFBMUIzOTM2REZENTdDNDA4Njc1RTA2RjE3RDEyQQotOjEwQkEzMDAwOEZCRTdEMkZGM0EzNjc5QjVCRkFEOEMwQ0ZGRjVGMjIzOQotOjEwQkE0MDAwQ0EyNUZEMkIyOThCRTI4NzM5MTcyQjMwRUVCOTJCQ0U3NwotOjEwQkE1MDAwQjkwNUZDQ0MzOTAyQjE4MDFEQkJFMEQwOEQyN0MwN0U3QQotOjEwQkE2MDAwNUQ3MDcxM0REQUJEMEJFMDc5MjJFOUM4RkI5OERCQTE3RQotOjEwQkE3MDAwMjdGNUY2RUJCQ0E2OURBRjY1OTBBRUY5MTAxM0NEOEMwMwotOjEwQkE4MDAwMkUxMzU3NzE4MUNENTk1REYzMjNBODVEODZGOTJEQzYxQwotOjEwQkE5MDAwM0M4OURGQUJGMzlGQ0Q0NzEwNUZFNDhGN0NDQ0Y4RTVBQQotOjEwQkFBMDAwRUY4RDc4NzIzM0JDNTRBREU2RjU3OEFBRTE2MkUyODk5NQotOjEwQkFCMDAwNTJCQUE0MkNBNTEzMkZCN0JGMTQ1OTk3MDFFRENCMzk1NwotOjEwQkFDMDAwRjRCNzhDRjNENkYwNjY5Q0JGODY0N0NEQkY1OUEwQkVCNQotOjEwQkFEMDAwM0YzRjc0MjQ2NjlFODg4NkU3MkVGOTIyMUFERTBERjgxMQotOjEwQkFFMDAwNzg0QkQzMzNENzkwNjEyMDk3MUY5ODNDM0YxRjBEN0MzNAotOjEwQkFGMDAwRjQ3QjhBMTcwQUU3QUQ3MzA3RTlDRTJCQkRBM0UyNjU5NQotOjEwQkIwMDAwQUFFNzQ4NjE4QTBDNzgyNDM1QzA2N0YzQ0E3N0JFOTZFNQotOjEwQkIxMDAwNDJFNzc3QjM5Mjk1MEIyMUY1NTk3RjkzM0MxMDhGNjhEQwotOjEwQkIyMDAwQjZCNkEzMUVENEY4NzA5NDk5Qzk4NTU5RDUyQkVGRjVGNAotOjEwQkIzMDAwNzUxNUUyN0FEM0M0Qjk1MEJFQzIwNjNEQTdFNjk5NzkxRAotOjEwQkI0MDAwRUY2MUYyRDdDQ0ZERjdCQThDNTE4ODY3NTgyRTQ4OTEzNwotOjEwQkI1MDAwQjY1RTAxNURFODNGQTc4NjE4NURCQzQwMTdGQUNGNjk2NQotOjEwQkI2MDAwQTRGRDIwRTBCRDNBOTk3Mzg3RTFGREE2OURGNzAyM0Y1MQotOjEwQkI3MDAwQkQ2RUE1Q0Y0MUNFQ0IzOUY3MTY4NjBFN0I3QUNBNjU0RQotOjEwQkI4MDAwRjk1ODg4QzVDNzE4Q0NDOEVCNUMzRjE3QzA3Qjg5NURFNgotOjEwQkI5MDAwRUQ5Mzg5RTY5NkY3MDA4RTg5NTQ2RTM2QzNDMzAwRkQ5NwotOjEwQkJBMDAwMkY4QUZFNDZGQkM1QzgwNzNERTUwMzc1QzdFRkI5MkFENgotOjEwQkJCMDAwOUU1RjA3M0FEODAxREZFRDEyRDg0M0RFMzA1QjdGQjREOQotOjEwQkJDMDAwNzZBRjIwMTcyMkRFMzQzQTM0RDFGNTY1MTRBMzgzMjlFOQotOjEwQkJEMDAwMDY5RTZGRDZFQTJBOUVCRDIxNEU4NEVGNkZBMEZFNkZBRgotOjEwQkJFMDAwMTIwN0JCN0U1RjFGRDRGOEREMkM3N0M1MTNDNDE1RDJCNgotOjEwQkJGMDAwQTNGNDA2RThCN0U4N0RDREVBQTZCNzExNUYzN0FFQTY5NQotOjEwQkMwMDAwRTY5OURDMTU1RjFBN0Q0MDBGNUUwRTZGRERDQTRGRDNEQgotOjEwQkMxMDAwOTE5ODc5NjFERjU1N0U0Njk5RjVGMkIzQ0ZEQUZFRTY2OQotOjEwQkMyMDAwNzA4OEFCRURFNTUwQUY5MDUwODIyRTdFMzBEM0NDRUNENwotOjEwQkMzMDAwOTY2NkFCMDdGOUJDRkQwREQxQkQ0NUVFQUE3RkE2QTg1RgotOjEwQkM0MDAwNzQwMTdGMjVGQTdDRTI2NDk4MDhFODREOTc5NTdDQTZGQwotOjEwQkM1MDAwQ0Q3QjAwRTNCN0U4RjVFMDc1QUIwN0U5RDc1REZGMzNDRgotOjEwQkM2MDAwQ0NDQ0ZFRURDRTFFRDNFQUQ3QzM3ODkwRDcyOEVCQzc1NQotOjEwQkM3MDAwMzNBRTQ3NUE1Q0E5QTc3OTc5RDQ3MUJGRUZCQ0I0NzFEMAotOjEwQkM4MDAwQkVFQkJFODQ5N0I0NjAzQzRFREI5RkQ4QzM3Qjc2ODkwNQotOjEwQkM5MDAwNjAzRjE2NzNCQTdEMTAwQTM5RUU2RkZFMTNGQUJGNTk3MgotOjEwQkNBMDAwMUFERDdERkYxMDNGMEE1MzNDQkZCRUUzNDk4QzYzOUYwMgotOjEwQkNCMDAwN0VGNkM4MzQ5MDlGMTVBRkYwQzQ0MkU1QUY3NTg3ODMxOAotOjEwQkNDMDAwODQ1OTlFODgwNDc2NDI0NTIzOEZGQjVENDQwOEU3Q0Q2NgotOjEwQkNEMDAwODhCMjMzQTgyN0MzRjBGMUEyMDNGNTVFQzUyRTczQTA4NgotOjEwQkNFMDAwODQ3RTVGRjFGMjY3MzkxMDdGNkI1REMzRjQ5RkZGNTk2QgotOjEwQkNGMDAwOTUxRkZEOTExQ0M4MDdBODEwRDhGRUJDOTEzRThGQThDNwotOjEwQkQwMDAwRkM3OTZBQjc2RDBFRTg2RjZFM0IzQkM3NUIxMTlDMkRFQgotOjEwQkQxMDAwOUFBM0UyMENGNzlCNDUxNkU3REU2REMzM0M2Q0ZGMzMzQwotOjEwQkQyMDAwMUNFNjMxMDM3Q0QxRTc0OEI1RkNEMDUzQ0YzMEJENUM3NQotOjEwQkQzMDAwRDEyNDA2RTAzQzcwQzVGNjlEQUQxMDE3QUZGOEQwOEM0RAotOjEwQkQ0MDAwRjZBQjc3RkIxOTA5RUNEM0M5MkYzRUNGQ0UxQjM3RjFFOQotOjEwQkQ1MDAwQkE3ODY4OTczOEU0NzYzRTZDODZGODU5NjMxNUVBMDEzQwotOjEwQkQ2MDAwNUEzRjgyRjVBMDFBRjdGQjhFNzFCMjE1MkZFRTdERDlERQotOjEwQkQ3MDAwNEY1MUI4RTIzNzRGM0JGMTVDNzBDQjM2MjdDNjIzQjc0MwotOjEwQkQ4MDAwNUY3RTVGQTA0QkRDMzE3OEJGMUE3NzlDRkEwNUMxRjU2NgotOjEwQkQ5MDAwMjE3NkRDRjFBNENBMjcyMUIzM0VFRTQ4QjYyNzYxM0NFOAotOjEwQkRBMDAwOTJDMjk5NTcxQTIzN0VEMUMxRkZDRjVGNzgwMkY2Q0Q5OAotOjEwQkRCMDAwNEVFREZBRjIwOTgwQkJGMjlCNzM0RkZDOTRFMjkzMkE5QQotOjEwQkRDMDAwMjAxN0FDREJERTY3REZDMzdEMDZFREJCRjc1NTdERDIwOAotOjEwQkREMDAwRkFDQ0QzQjg0RkQzRkEyN0IzMUI3QTZCRERGQjQ1MjZEOQotOjEwQkRFMDAwRUM1M0I0RUVGQzNBMDVFMkI4QUJGNzRFNDE3RjZERjU4QgotOjEwQkRGMDAwNEI5MzUzNDkwQzdGNDAyQjgxN0YwM0JERDgyNzMyRDIxMAotOjEwQkUwMDAwQURCOUIxMzkxM0UwM0M0REU5MEVFQjc3NDczQzM5NThGOQotOjEwQkUxMDAwQzVFMkY0QjIxQTQ3REUxMTdCNUZBRTRCRENCODcxQzZFNwotOjEwQkUyMDAwQ0REN0MxM0FERTI4QkE2NUQyOEJGOEYxNjE0QUNGRTFBRAotOjEwQkUzMDAwQkRBMEUzMEU3NTlGMjAzOEY1QjJGMUUzRDNGMDBGNEFCMQotOjEwQkU0MDAwQUYwQjY2N0QxQ0ZFNDJFMzkyRkY3QzBDREExQTkzQkFCQwotOjEwQkU1MDAwOEQxRjg3N0I4MTNGNkRERjZGQkY1OTIxMTY5MEEzNUREQQotOjEwQkU2MDAwQ0Y2MURDMUVFODQ3N0QwRkQyRkFGQzg1NEM4OEJCMUNGNQotOjEwQkU3MDAwMTdEQkVGQzBGQ0VCQkQ2NkNDQTNBQUQ4RkIwMUNBNTMwRAotOjEwQkU4MDAwRUI0QjZGRTNCRTFBNTFGN0RGNUE0OUM3MUZEQjI3NTE0RgotOjEwQkU5MDAwN0QzQUVGNTYwNzhCM0JBQjc0ODBCOEI0RUNDNEU3NkFDRAotOjEwQkVBMDAwRkM5OUYxQjUxNjk3RUUyRTFFM0RENjMyODBFREJGQUI1NAotOjEwQkVCMDAwRkI5MTU1NUJGRjJDMTE0M0JDOUYxQjBCRjQzQTcyRDlDRAotOjEwQkVDMDAwN0Q1NDBEMEYyRUMwQzM5OEU4RkQ5NkQ4RjFGRjhFRkQ2RQotOjEwQkVEMDAwMTYwM0REODA5RTYwOEY3NUVDQTdEMDdBM0Y4OEFCMDc5NAotOjEwQkVFMDAwQjgwRjYyRURERkI1NkU2NkZCMzRBRDYyRUNCQzQ1NkQzQwotOjEwQkVGMDAwRkY2NUE0QzVCMEVGMTJFOEREQkU0QjRGRjNGOEFFNzg5NgotOjEwQkYwMDAwQ0EwNjI3QjQ0RjU3N0M5REJBMTQ1QkJGREY2QUUxRDRFMQotOjEwQkYxMDAwN0IwM0JFRTdCRTdFMjU2N0NDMUI5ODA1N0M1OUQ1Nzg5MAotOjEwQkYyMDAwNDQwMjdCNEE1QkRGQjRGOTlFNTJGREU3NTNDRkYyNzhCRgotOjEwQkYzMDAwNEU2NDVEQjAxOUY1QkI1MTdGNTQxMzE2MzczNEMyNUJBNAotOjEwQkY0MDAwNkU2MTdBQUJCQTg5QUQxRkE3NzYzOTAyNzZEQUNGQTlDRQotOjEwQkY1MDAwMDNCQjkxQUZBQjc3MUM5MUZDQjRCRjgzREI3RjIzNDU2MAotOjEwQkY2MDAwQTJGMkFDNjBGRDA4NDRDMTdGRUE4NUZEMzk2QzdGODk4RgotOjEwQkY3MDAwRjlFQkM2NzFFRTUyQzdGMTg2NjI4RkUzREQ3MTQ2Mzc4OQotOjEwQkY4MDAwQ0UwQTdGNTA2MkU3N0UyRTNGREU0OTQxOTkwREZEOUQyRQotOjEwQkY5MDAwNkMxMTA5RTRGRDlGMENGMkM1ODExOEUzQ0ZCNTg4NUFGNgotOjEwQkZBMDAwM0M4QkM5MEY1RDQ3RjExQ0E2ODM5REJCRTQxMzI1QjRGMAotOjEwQkZCMDAwQkI1NzNCQzY3RTA4RTdGRDU3M0IyNDE5RTIxNzc1QjUxMgotOjEwQkZDMDAwMkMyRkI1RUVERkRDNjk0MEVGQkE4NDVCNzEzRkFFREU0QgotOjEwQkZEMDAwODA1RjU3QjIyQjFGRTIxQUFFQzJEMjUxQzBBRTQ2QkQyRgotOjEwQkZFMDAwOTNBMDk4NzRGMEFGNzYxNEE3Q0ExNENFQjVBQTlENDY1NAotOjEwQkZGMDAwMDQzNzlFMEJFNTlENDVDNTMwMUZERTY1NzI1OTYzRUMyNQotOjEwQzAwMDAwM0I4OEY2NTJFMjg5QzI4QkU4RDI5RkUzMjQ5NzQ2Q0E2NgotOjEwQzAxMDAwRDA4Rjk2N0Y1MzY5NjkzOTg4OEQyRTA1NTM4Qzg1QjFGMQotOjEwQzAyMDAwRUNEREZDOTkyRTlDNzdEQjBFRDU3RjUwODhFQzRBNjFDNQotOjEwQzAzMDAwNzk2NEIwOEVCNEVEOEFDRjIxQzNGMTQzQTI1MDdFQjRBRgotOjEwQzA0MDAwQTlDRkI5MURGQkY3ODM1RTVBRUIyNDRBMDI5NTMzOEFDOAotOjEwQzA1MDAwNTU5OUNGODZGM0FDMjMyQzVDMzZGMEU5OTlGRjdBODVBRAotOjEwQzA2MDAwRjY2QjBERjFFODU3QjREOUI1N0M1MjI1MDFFNENDNDYwNgotOjEwQzA3MDAwMUVDNEJDNDE2MEU1NkY5MzNBRTEzNEU2MTMxMjc4MjVBMwotOjEwQzA4MDAwRUEzRThEMjlCQzFERkRBMUIzOUI1ODdDODAyNzU3RkYzQwotOjEwQzA5MDAwN0EwMjhCQ0Y5MTAwQzBBRkFFMkYyQjU0MzhDRjEyRTI3MwotOjEwQzBBMDAwMEVDM0ZCM0IxQzE4MEY1OEY2QzYyMjk0MUZBMDQzMzQ0NgotOjEwQzBCMDAwQkU5MjhBRjVFNzVFMUJBQ0NFMUNGMDY3MzY1QTU1QkZDMAotOjEwQzBDMDAwQzZBRkI0QzAzOTlCQzU2QUJGN0Q0QUY1RTc2MkE5MThGRgotOjEwQzBEMDAwRkE0MTVFOTdBOEYyRkFFNUQyQTI0Mzk4OEZFNjU5OEExMAotOjEwQzBFMDAwN0EzRTc1OEVGRURDQUMzMTRGNEIyMEFBOUYxQzYwRkU2MQotOjEwQzBGMDAwNzM5N0JDQURBNkNEMDhCNzMxN0Y2QkM1NzY3RDVEQzNBOAotOjEwQzEwMDAwRTMyN0EwMzdBRjAyNzQxMkZCRTVFMjgwM0RFMjM3MzI0RAotOjEwQzExMDAwRjhENzEzNDY3RDc3RkM5QUQzRjRGOEI1Q0E3QUZDREFERgotOjEwQzEyMDAwODYxOEYxQTdDN0FGQzNBREM3OTdFNjk3NzY4N0RGRjg0NAotOjEwQzEzMDAwQjFGQTczQzhGRjJBRkM4QTU2RDU4RTU0RjE0QUZGNEFEOQotOjEwQzE0MDAwMkQyOTRDNjUwM0RDRTk0MjE4RTVDMjI4NDcxOUY2MzA3MQotOjEwQzE1MDAwMDdGRkVFOUYxQ0E4QzVBRkRDMEVENEVGNjlFQTdDQjhFMAotOjEwQzE2MDAwQzVFQzNCMUJDODExMEZGMEJBNTE4RUUwMjQyMEU4NzlEMgotOjEwQzE3MDAwMUJGOUQ4NzVDQzBBQzRGQThDN0M3QjRERjdGNDVDMzU3RQotOjEwQzE4MDAwRkRENTIzMEJFOTU3OUI4MDdGODcyMzNGQjBGM0JFODkwMgotOjEwQzE5MDAwMjQ1MDk3MDU3MkVBNzZDMUZBMURGNDU5REM4QjQ1QjgzNAotOjEwQzFBMDAwRjc4NUI4MTcwRjgyRkI1RTVDNTgzRUE0RTZBQkI0MEQ3MgotOjEwQzFCMDAwMjU3ODZFMzAxODNFOUYwMkZBRTlBMURDRjY2OUEwRjdGNwotOjEwQzFDMDAwQkM0QjQ4MjlFOEMxMUZDNUIxRjMwMzBGQTg2NUJGMzhCMAotOjEwQzFEMDAwNDlENUFCODU2RjRDODJFRjQzQTIwQ0U3RDVEQjQyREI0MAotOjEwQzFFMDAwMkM4M0EwREVDNEUzM0QyQURFODRGQUFCNjBGQ0Q2OTA0QgotOjEwQzFGMDAwQzhFMDVBNkMwOTBDODIzOEM4NUUxMUM3NkQ1RDNDMDFGRAotOjEwQzIwMDAwQ0Y2NTc2RDg2RjIxOTYyRkQyMTZGQUNDQjkyODRBOUZERgotOjEwQzIxMDAwQjczNjNEN0ExNUM0QjkzNjlBNjJFN0E5NENCMTlBN0UxMQotOjEwQzIyMDAwRDhGQTFCRUM5MkI3MzdDNUNBRjJFQTFFMUE0MEU3NTE5QQotOjEwQzIzMDAwM0RGREFDQkEwRTMzNzlCODU2QTVGM0FCNEI2RkM0RjlEQwotOjEwQzI0MDAwQkYxNEUyNjQ1ODQ3OEFGOERCNkUxQTQ2RTczOUVFM0RDMAotOjEwQzI1MDAwNDE4RENGQjA3OEU1MjhGNUZEM0FEMDJGQTg1RkVCREYxMAotOjEwQzI2MDAwRTVFOUMzREQ0NzA1MDJFN0Y0NDZENTJDNDU3RkVCMTUyQwotOjEwQzI3MDAwMjdFNTczQ0ExNzc5NEE3MDI0RjA2RDYxMjgwMUVGQ0Q2NAotOjEwQzI4MDAwRjE3RTRDRDBBRTFGREQyMkU4RjgzMzRGNUQ1N0YzMjIyQwotOjEwQzI5MDAwNTQ1RUMwNDRGOTUwREYzRTJFMjIxOEVDQTAwMDBGRkM4MwotOjEwQzJBMDAwNzVFRDcxRkRGMzg1NTZENUVFNzI5MjE0RTBGMzBEOTc5RQotOjEwQzJCMDAwNzgwRUYyNUVEQkRBODk3QjBEODVCQjZENzE1Rjg0QTMzRQotOjEwQzJDMDAwRUQzQzlDRkFBNUU1MjVCRTM4RDY3QUJGQ0FDQUY4NjIwRAotOjEwQzJEMDAwQTM0NDcwOUREOUI4RDQ4RUYxQzUwMzRCMkJBRTgwRjUyNQotOjEwQzJFMDAwRkRBQjFGN0JBRTg4NzU4RTNDNEEzRkM1QjM3QzJDMjVDOQotOjEwQzJGMDAwOUU4QzA1RkU1RUNCMzFCQ0Q3QTc5N0M2QzhGN0Q3Rjg5MgotOjEwQzMwMDAwNTlFMzZGOERBRkQzOTdDNjc5NjJFNTM1N0U2MzY1NzY2NQotOjEwQzMxMDAwNUFDMUQyMjE5QzA0RkVEQTNFMEU4RkUzQjZBRUYxNUMyOAotOjEwQzMyMDAwRjZEQzhEOUZBQ0M5MDA3OEJDNERFN0QwRUVCNjg0MzgwMgotOjEwQzMzMDAwMjU5NkJEQjFDMUVBQzRGRTVCRDdGODZCMjE4RkVGMkUwNQotOjEwQzM0MDAwMkE5Q0EwMjdCQkVGNzcwM0ZBNUIzRjgxQTAyQzdDNjc3OAotOjEwQzM1MDAwQTkyRkMzNzNCQzRCMkM2NDBCQzRCQjg1RkFGNDVCMUNDNAotOjEwQzM2MDAwQzBGRjkzNkY1ODQ3RTE3REFDRDQ4NEVCRUI0NkQxOEQ5MQotOjEwQzM3MDAwRjBGQkFCMDhDMUY4ODMxQUNGRUQzNzhENkM4RTNFQ0Y0MgotOjEwQzM4MDAwRkM4NDM1RkY1OTJCQTVDN0IzNTYxN0QyMjVDOUUzRTY2MAotOjEwQzM5MDAwMDA3RUY3M0ZGRURCMDlGMkRENzZEMThDNzRFQ0FCRkE2MAotOjEwQzNBMDAwNDNEQTc3QUY1OTk5REQzNjMzNEVEOTBBREY5M0YyNjQxOQotOjEwQzNCMDAwOTQxM0I3QzdFOTVFM0MxMkVFNERBMDc4OEY5MkEzNEU1RQotOjEwQzNDMDAwRkFGOUYxQkI0NDBGRDU3MTE0OUU0NEJCMDlGOTkyMjhDOAotOjEwQzNEMDAwOEFFQ0QyQzUyOUZEMjg0NzlBNUM5MDMwNDcyMDhGNERDMgotOjEwQzNFMDAwRDNBQjVDODgwQjNCQTgxQzhDQjJEOEMzRTA3NzI0OTZGNwotOjEwQzNGMDAwRDM3OTUzMTBBQ0M0QzJGQTZCMTE0RTc1OUNDQkM2M0NCQQotOjEwQzQwMDAwNzlDQTk3Nzk3MDM4OEE2MDQ4MTQxMjcxQTE3RjREREYxQwotOjEwQzQxMDAwNkE3QTdBNkQwMjQxNzk1OUZCQjAxMEE4QTNGRDZDMTJCQgotOjEwQzQyMDAwMjI1Njg4QUY2NDI5NzIwMUE0MUEyNTBBMzI5RTE3RUY5QQotOjEwQzQzMDAwNUY0RTMwRkZEMjk2RkQ3ODQyODdERDQyODU3RUM0Mzc1RAotOjEwQzQ0MDAwRkM4MjU4RkI3OTdDOUM4NjJGQ0YxRjQwNkZFNDFDNkFDRQotOjEwQzQ1MDAwM0YwMEU2OEREQkNBQzY3M0JGNjY0MTNCQkQ0MzdGQTg4NAotOjEwQzQ2MDAwRjY1ODkxQkFGRThFRkJEQ0M0RjIwOUMyOTM0OEY0M0U0MgotOjEwQzQ3MDAwOUI1MTdGNjhGNkM5QjhFQjIyNkI2MEJGNjhEQzlGMThFMAotOjEwQzQ4MDAwOUNCNDVCMDVCRTFCQURDRUI3NDM5RkE4RUJFNjk4MTBFRQotOjEwQzQ5MDAwRDUyN0Y0RkJEQ0QwQzg2NkI4MDcyQkY3NjMyNkM3NUQ0OQotOjEwQzRBMDAwRjRDOTIxM0YwRkY4RkJCRTdBQzRDODE3MjNDMjU0MkUyQgotOjEwQzRCMDAwRDVGNkExMzJEQ0E3RTFFQUE4NDNGQjE5ODNERTQ5OUU0OQotOjEwQzRDMDAwM0UyQTE1RUQ1Qzk1REY4Qzc4RDZFNERCMjhGN0I5Nzc0QQotOjEwQzREMDAwQkI5QkNEMEMyRUU2NDcxQUM2MjE1QzI3MUM3MjM2RThBMgotOjEwQzRFMDAwQTVCNzc4QjBGN0RCRjIyOTFFMjg1Q0JGMDJGOUEzRjRFOAotOjEwQzRGMDAwNEIzODFGQjgwMUU2QkYyMTc0QkQxNUU0RTQ3QkFGMjdCQwotOjEwQzUwMDAwMjFGQTc1NTQ5RUY2RDNCQzI3M0VBRTBGQUUyNzRFQzAxRgotOjEwQzUxMDAwNDNGNUZFRjNFQTdBMTI0NjdBNzdDODAxOTU5M0U4NzhGNAotOjEwQzUyMDAwODlDNkZGNDY3RUQ3RTRBMzBFMkVERUM4QzY3Mzc2MDQwNgotOjEwQzUzMDAwRDY1OTlFMEJFMjY1MzA2NkIyQzkwNTc4RDVFQ0VEM0E2NgotOjEwQzU0MDAwRDVCRTI1RkU3NEI0RkY1NkJCODhCQTFFNjUwNjgwNEY2MwotOjEwQzU1MDAwRUE0NENENUU3NzVCQTJFMzUzQUIxRDA1QTk5N0RCNEZBMQotOjEwQzU2MDAwRjU1RUE0RkU1OUQ0MzkxQkFGRDA4RUZFOUJGN0EyODQ5MgotOjEwQzU3MDAwQ0ZCRjM3RkU5QTI4MTQ3OTNBRkM4RDg5MUJERDE1N0ZEMQotOjEwQzU4MDAwRjE3MTg0QjBGQkMyRkU5RjlGREYwQzIzN0ZEQzI3NzcxNQotOjEwQzU5MDAwQ0VFRjVBRTI3OTI1NDJGNTQ3REVBQUY1NzUzNjE5M0YwNgotOjEwQzVBMDAwMzk5Qzk2RDc1NTJGNjhGQjlGRERFOTAxQTNCQzhGQTk2NQotOjEwQzVCMDAwQUM2RkM2NzA0QjBGRjJFRUI1QTlGODI1NjQwNkU4QjM3MAotOjEwQzVDMDAwRjE2MTZBQjc2NDc1OTVGRkYzRUFGQ0JDMzY4NkY3QjY4RAotOjEwQzVEMDAwNUJEQjA3ODMzQ0FERTczRDM1NzE2ODJGNDY0QzI2QjBFOQotOjEwQzVFMDAwMkI3NjEzQjQ3QkRDRkI4RjNBNTFERTVCOTI3NEVCNEZGRQotOjEwQzVGMDAwNTdCQkMwOEZGMkE5RDlBNzlBNUQ2QTdDQUZDMzJFNTVFRAotOjEwQzYwMDAwRDcxQjJEM0VDQTM1NTE3OUExRjAzQzE5RTdGMTAzMUMyNwotOjEwQzYxMDAwNzUyRUU2QkZDMjAxNTdEMDYzNEY1ODNENzVDMDVGMzZENwotOjEwQzYyMDAwM0E5NzM4RDgyRjE5MTJDRTYyRjE5NkIwNEUzRUJCOTM4RQotOjEwQzYzMDAwNDc5QjQxREU4MjE0M0ZCMEZFRjlFOUZBMzc4OEVCMUVEMgotOjEwQzY0MDAwOUVCMTcxMDkwQzVFQUE4NUMwQkVFOTk3NDdEODYwRDUzNgotOjEwQzY1MDAwMDRGM0M3RkJFNUIwRkI2QkZBRTVCMkZCMzIzN0M3MzEzOQotOjEwQzY2MDAwRkI2NThCQTE3Q0MyNUFGQTE4Q0M0QjE0ODhERjlDRkI2QgotOjEwQzY3MDAwRkRFMTA2NTAyMTBFRjk2NDlDRDIwMEY4QjAxNDJCMzg2RAotOjEwQzY4MDAwOEYwQzE3NzE3Mzk0REUxOTQyOTA4M0JDODlDNDRBOTk0OAotOjEwQzY5MDAwNjNGMTQ3RDJCOUZGNDhGQkNCMjg5MUYzODEzRjMyMDZDMwotOjEwQzZBMDAwMTIzQzM3OUExMThBN0Q5RUU4OTUzOEYxODdEOUVCOEQzNwotOjEwQzZCMDAwNURDRUMxQkNBMkNBQ0Y0MTg5Q0UzN0E5ODQ5RDgzRTk5MgotOjEwQzZDMDAwODhGQjUwRjAwMUJGQUQ4RTVCNzFCMkFEMTdEODNFQUJBOQotOjEwQzZEMDAwM0Y4MUUxRDlFOEJGMDFDMTYwNUU4MjVBQkY1NzIyODIyMwotOjEwQzZFMDAwMzUxMUZEMkIzRkYwQUZERjY0NDFGRkNBNDZEQzQxRDA3RQotOjEwQzZGMDAwQjcxRkM0QjFGOEVDM0FDRUJEMUVFQUJGMTBEQTJENzBGOAotOjEwQzcwMDAwQ0Y4RjI2Mzc5QTNDM0MzNEUxMTZCNzQwNUY3NTVFNzc5MQotOjEwQzcxMDAwMzYwNzdDNUYyQTE3RUYwMDlFNUIyNzlDMURCQzE2NjdCRgotOjEwQzcyMDAwRDI5RUM5Rjg0RUUxNzVGOUY2MUFGRDlBNDQxREZEQUM4QQotOjEwQzczMDAwMTA1Nzg5RDZGMzBFNjkwOEQ4RURBRDVDOUMxQkZDQUE5NgotOjEwQzc0MDAwRDZFNTFDODM5N0IzQThFNzExMDRERDNDRDM2Q0NDMUY1RQotOjEwQzc1MDAwNjk1M0Y1RTdERkUzQjI5MDFGQjVGNTg0Q0U2RjNEQzZCMAotOjEwQzc2MDAwN0YwREYzRTgzODg3NkEzODc3NkEzQzk3OUE5NkREMTEyRgotOjEwQzc3MDAwMDc0QUM3N0NEQzUyMDlFRTMyMjM2NzQzMzZCNEUzQkM3OAotOjEwQzc4MDAwQ0VGNjRDMTJFM0JDNjQ2QUM0MUFGMzVDQjA1NjUyQkNEOQotOjEwQzc5MDAwN0QwRDc4NEIxNTZCMTI0MDFGQTdERUNFRjQ4ODExMUY1QwotOjEwQzdBMDAwNkQ5QzdGQzQ0MUQ4NDdGQjgzMTgzMzFGNDUyQkQzRDJFMAotOjEwQzdCMDAwNkU0QTU4NENERjRGNEJCRjAxNEJFRDc5ODM1RDg4MTlCMgotOjEwQzdDMDAwNTc0Q0IyNzEzRkVDREM2NDAzQjExOEZDQ0QyNDFCRUQ3NwotOjEwQzdEMDAwRUZCNEU3OURGNzE1MTRGRjc2OENCQjM3QzQzMUJDMzczNwotOjEwQzdFMDAwQzQzMUJDMzc0ODFBM0VFNTc4OTBCRkNFQkE1Qjk3RjdBNAotOjEwQzdGMDAwQjRDMTY3NDkxMDIwMEZEMTlGOEVGMkI5QzRDNUU4RERERQotOjEwQzgwMDAwRjlCRTgyRjY0RDFGQTJEQzMwMTc5NEM0MDY5MTZDNDMyQQotOjEwQzgxMDAwQkU2N0YxMjFFRDdDQzhBRjdDQ0YyNDQwQkU5NERCOTY4RgotOjEwQzgyMDAwQTVGQUZCMTY0NkRGMDQwNkY3RjkwRDUzNzBEQzE0QjJDNwotOjEwQzgzMDAwQzYzQTk4RTI3OTY5QTlDOTBENzFBM0QzMEIzRjcyQzJCOAotOjEwQzg0MDAwOTFFOTg1MTkyRDc5MjAwRkE3Nzk4RjFCRTY5NzRBOThEMgotOjEwQzg1MDAwNUZCODZDOEUxNDA4RDMyRTkzMUJBOEMyNjI3NEJBMDEwMQotOjEwQzg2MDAwRjczQkNCNEMzMUYzQUVDN0Q4RDhGRUU5RDEzODE3OTY5OQotOjEwQzg3MDAwNjk2OUQzOTA0RTlERjU5MjA0RjA0QjhDN0M0QUU1MzU2NgotOjEwQzg4MDAwN0RGMUE4Q0U3M0NDOTQ2RjE0NUIwQzc5NkIxMzQ5MTNCNAotOjEwQzg5MDAwODdFQjVCMThGMTk1QUNCMUIzQUFCNzM1Nzk0OTA2Mzk4NgotOjEwQzhBMDAwODQ3REFCNTJBQTQ3MzUzQTBGNTA1RjREQzFCODI4RkU4MAotOjEwQzhCMDAwNzFBMUQ3QkYwNjdGQzM3OTVEMDFFQTQ1NEQ4RUM4MTBDRgotOjEwQzhDMDAwQTZFN0FEQTA3N0EzRTJBMTZEN0IzRkU4MEZGQjhFOUZBQgotOjEwQzhEMDAwRkNEQjM5MDdFQzNCRkQ1NTY4Nzc4MDlFM0Q3RUNGQkI4NgotOjEwQzhFMDAwMEUzOEM3RjRDOTNEMkMyRTcyODdDMTRGNUI2NDYzRkFDMgotOjEwQzhGMDAwN0Y4RkFENzQxRUUwNzc4MUVGMUY3OTlFMjg3RTI1NzdBQwotOjEwQzkwMDAwQjNGRDkzRTUwMURFNzBERTVEN0Y2RjUwNTUzMEM5NzA3OQotOjEwQzkxMDAwOEY5MDFGRjE1QUE1REUxRjY2QTRDNzQ2MUI4QkI3MkM0QwotOjEwQzkyMDAwREZCMTU5Q0E5MDYxN0M0RjI1OEM3RjVDRjU0MzhGMzcwRQotOjEwQzkzMDAwM0FEMERGRDFFMDU5Qjg2Mzg0MDRCRUQ5NUY0MzY2NzU0RAotOjEwQzk0MDAwRkZCRDQ1NjRFQjg3NTIwMkZCNjcxRTE1NkY0NjM4MEYyQgotOjEwQzk1MDAwQUFGNzZBMkZGOTI1Q0I4RjI5QTM2M0RENERGNUIwMjcwMAotOjEwQzk2MDAwQzRDRTdCMThFN0IxRTQxM0I5Mjg5NTEyNkZDOUZEMUMzQQotOjEwQzk3MDAwRkFEREYwRkUzRDc0M0RGM0RDN0QxRkVFQjMxOUU3RDkxRgotOjEwQzk4MDAwRjU1RTFGMDVGREIzNjUyQUJEOERFNzZEOTc4NUQ4M0UyMQotOjEwQzk5MDAwRjg2MkUyNDFGOUVDNzJGRTM2QzRDRUM1MThFMzhENjc0OQotOjEwQzlBMDAwMEY2NURCMDAwRkJGQjBBOUYxQzQzQzMyMDZDRTZERUZCRQotOjEwQzlCMDAwM0EzNDIwRkU3MkY3NTY5RjUyRUY4QjgyN0JCQkExM0MyQwotOjEwQzlDMDAwRUUyMzU4Q0UwMzIzOTBFMkJGMzJGNEY2NURDMDVGRDU2QwotOjEwQzlEMDAwNEQzQkYxM0VCNEVGQUE4RkFBNDIyNzlDOTA0QkFERTlBNAotOjEwQzlFMDAwMjU2QTg3NkUwM0Y5MjA4QjM5OUQ3RDVBQkRGOTlDQzQ1OQotOjEwQzlGMDAwRkM2QTg2OUZEQkQ0RTdCNzAxM0U3MjIwREY1QkZFRDk3RAotOjEwQ0EwMDAwMDQ0QUVGREIyQUM1RjNEMUY3QTUzRDZGRDNFRkMzRjc5NwotOjEwQ0ExMDAwNzZCRURBM0NCNTc5NkJFRDU1NkE1RTlDRjEzQjREMEUwNgotOjEwQ0EyMDAwRTZBOTdDQjk3OEVCRjQ3NTdEMjk4QUVBRjY3RTkxQTlBRQotOjEwQ0EzMDAwOUU5M0MzRjM0MjFBOUYyRDIzQTU0NUU5MzFGODQ5QTNEQwotOjEwQ0E0MDAwNkYwN0RGODQ3RThFRjNEM0U4QkFCOEJFNENDNTgzM0Y1MAotOjEwQ0E1MDAwNERERDRGNEM4Mzc4OTU5MThGN0EzQUE3REQyQTQ2MzI4NwotOjEwQ0E2MDAwNDFCRThEN0NEMkRBQ0Q3RDI4MjExQkIzMkYxNkNCNEE1NwotOjEwQ0E3MDAwMTFDNENGQThGOUJCQ0UxNTY1REYxQzE3RUEwRkZFMTQ1MQotOjEwQ0E4MDAwRTQ2RTJCRTNGQjBFM0QwODRFMzFFOEY3Mzc0NTVDRkZDMwotOjEwQ0E5MDAwNTczQUU0NTRCOEZGMEZFOTM3MEVGMjEzQ0M3RTc4NEZDMwotOjEwQ0FBMDAwMUJFNzk4NEY1MTA2OEE4MEZGNjIyQzRGRkE0QTk1ODEwNgotOjEwQ0FCMDAwODMzQURCOTc2RTNDRTcwNEZCQkI2RDA4QzFCODUxQUIxMgotOjEwQ0FDMDAwNDMwRkVGNjkxQjhGN0FFM0I0NEE4RjRBQTFFNTlCM0Y3RQotOjEwQ0FEMDAwODNDRURBREE4Mjc5MTdDNzJFQTk3MUE3NEJFNkUyNTgxRQotOjEwQ0FFMDAwRjNCNEQ4MzlEREJENzg3N0E4NzJBOEY5MzUwQjU0RkFCQwotOjEwQ0FGMDAwREQxMTYyRkJFOTBCMzc0RDQ3N0E3NEM5QkY1NEZEQTFDNAotOjEwQ0IwMDAwQjI0NjBFRjU4RTkxM0U0QkRDRDc2MzNFREFBMjQwM0UzNAotOjEwQ0IxMDAwN0VERjg1NUVFNDQxQTRCQjkxNkU3N0RBNURFQzFFMzc2MwotOjEwQ0IyMDAwQTE0NjgyN0JFRDhFNkRFMjcwRkY3MTg1MTA3QkZGNzNGNQotOjEwQ0IzMDAwQjZEREY0OURFNjYzOUM0Nzc3RjAyRkRCNUFCQkFFMkY0MgotOjEwQ0I0MDAwODFGOThGOTA4MENGOERGMDZCRjM1RjQyMTRBNkE3RDQ0QwotOjEwQ0I1MDAwRjk3NjM3MkYxMjk5QzRGMjM0RDQ3NTdGMzk5QzVCODFGMgotOjEwQ0I2MDAwRkQ5MzA3Nzk5NkNGQURDNkExMzRGODM1Nzg4REYzMjhCQgotOjEwQ0I3MDAwRTIyQkYxN0M0MTVCMDM4Rjc5RDk3N0Y4RDk3RDA2Nzc3OQotOjEwQ0I4MDAwQUNFNTcwRkRFRDhFNEU5QTVFRDFGNjdCQUE5QkNBMzA2NQotOjEwQ0I5MDAwNkZDQjQzRkIwMTNCQjZFRDYzQzJGNjI5RDY3Mzc4Q0Y2QQotOjEwQ0JBMDAwNUJCN0Y0MENCMTdDQTVFRUU4NDkwOEEzREI2MjRBMzcxOQotOjEwQ0JCMDAwRjAzRkJCREU5RjkwQUYwQzhDREUyNzBBRENBMDBDOEMxNAotOjEwQ0JDMDAwREVCNzIyNDFDQzU3NTlCMTdEQkFFRUY5OEQ3NjM1OEU1QwotOjEwQ0JEMDAwQTVFQUY1OUVFNDhGRDQyNEM0OEM2RjY5RjJBNkM5OUZBMAotOjEwQ0JFMDAwMjY4Rjc3REE2NTY2NkYwQTgxODMxOTU5ODA5Rjg3RDEwRQotOjEwQ0JGMDAwQkZBMUZBN0E5RTlERjkzRDBGQ0RBNUFGNTQ2RjNDQTcxQQotOjEwQ0MwMDAwREJBNzU4MzI5NkQxNkIwOTVGODJDRkJCRDNCQjE0MEYyMQotOjEwQ0MxMDAwM0FCREJERDhBRUNGQzNGOEExRjNEMUU2QTFDOTg5MzZEQwotOjEwQ0MyMDAwM0ZBMzlDMThCRjM3RDI0MzhCRUYxOUU5NjJBNDA3QzAxQQotOjEwQ0MzMDAwMDk3RUM2NUI3QjZEODEzNTE0Q0VCNzM4MDZCNzdGQUZGMgotOjEwQ0M0MDAwMTVFMTZFNEQ5QkFDQzBCOUNERUFGNEY5NThGRTAxM0UzQQotOjEwQ0M1MDAwNEMwN0ZCQjBCNENFOEU3NkFFRUE4NzhERUE1RDVDMjJERgotOjEwQ0M2MDAwNTdCNUNCNUVCMjJBMjNEOUI5QTdEMjI0RTA5Mzg5QjVCMAotOjEwQ0M3MDAwOTExOTE2MTcyMThGM0U1ODVDMDRGN0E0NEU3QzM4MzI2OAotOjEwQ0M4MDAwMDM0MkYxQkY3RUYwNDY1NkRGMTY3OUQ3RTI4NkZCRkMwMQotOjEwQ0M5MDAwNEI4QTBBNjlGRDcxRDAyRkEwMkZGQTk1REJFMEZCNkU1RAotOjEwQ0NBMDAwRUJDNDczRjlCQUNDREUxRjY1MkU5RENGRUVCMTY2RURGNQotOjEwQ0NCMDAwOTVENDNFQjNEMEY1QUVGMkYwRTA1NzQxN0UyQjVCNEFGRgotOjEwQ0NDMDAwOEEyMTJFNTQwOTExNzhCQURFNTUyOUNFQjAyRDg3QURCMAotOjEwQ0NEMDAwRkJFM0U5N0IxRkQ5M0M0RkQ5MjFFRTc2NzEyREFFOEI1QQotOjEwQ0NFMDAwOTU4NzA1OTQyRjcyODhDNTY3MDUzQTU3MkJGRDZFNkRBMQotOjEwQ0NGMDAwMUNCNTkzMjk3RUQ3MjY1QURDRTAxN0QzRTc3RUYwOTc0MAotOjEwQ0QwMDAwRDcyNjJBQjIxQ0Y1NUNBMzFGN0MwNzcwQUMzNUIxN0MxQQotOjEwQ0QxMDAwODJGRDZGMEM4RThGNUNDNjJFRDhFRjIzMjVFMENGMzRCQQotOjEwQ0QyMDAwRkIyQzU4MUFEQkYzMjUxNzlFRTdDODM3QjE3ODg5QjE3OQotOjEwQ0QzMDAwRkQ2REJCNzZBRTQ5Q0UwMEJFQTgzRTI0QTFGQ0MzMUY0QwotOjEwQ0Q0MDAwRDg5RjU1ODRDOTQ5MzU2MUU3RDBBQTBFMTMzQzc3NTM2MwotOjEwQ0Q1MDAwN0RBODA4Q0ZEREMwQjk4NDRGNzU3QUUwNUY3M0VFQTY3OQotOjEwQ0Q2MDAwOTNBRjE4OUUwQTA0QUU0NDg4MUFCN0QwNkVENUQ1Rjk5MQotOjEwQ0Q3MDAwNTREMzEwOTgwRkUxRTNEQzcwNkU4NENGMzBENUVDQTI3MQotOjEwQ0Q4MDAwRjNFN0FGQTAyNUM1ODdFMDcyRjM3MEZGNENGREU0ODk5RgotOjEwQ0Q5MDAwM0NEQzlGNTUyN0FBNzkyRDI2NzYzRUJFNjNERDU3RTVGQwotOjEwQ0RBMDAwNEYyQkZCMzk0QThGMDJERDRGRkZCMTI1Q0ZDNkY2NTMxQgotOjEwQ0RCMDAwRDBBRkQ2RTY1QkM3Mjk4NDAzN0ZFRDM1ODJFNzE5NzJEMQotOjEwQ0RDMDAwOTM0OTMzRTBDRjQ2OTRCMUMwNkYxNjQ3QTJDQTk3NkMxRgotOjEwQ0REMDAwM0Y5QkZFNjU0MEU5MzY5QjdFMjM1MzdFRkZGQUMxOUY1MQotOjEwQ0RFMDAwMjJGRkJCRTM0REFCQjI2ODlENzNGODU5M0RDMzc0MkU2RgotOjEwQ0RGMDAwOEJCMjMwRUZBODY1RjU2QjRDRTcwNkQwQkFFODU4QzNBNAotOjEwQ0UwMDAwRUFCMEYxNEExNzNFQjNBM0FFQzgzRjE0QzY3MTMxQkFCNwotOjEwQ0UxMDAwRUU1MEFFMDFGRTE2NEMyQ0FFMjMxQzkwNzA3RjQ3Q0IxQgotOjEwQ0UyMDAwNTc1OTRCNzkwNkY4RDFFMjYwN0E3NDVENkRDMTczMzY1QgotOjEwQ0UzMDAwODg5QjE3MjgzMkU0NEZFQzUxRUY0MUZBQkVBNTg2NTc4NAotOjEwQ0U0MDAwREU2NjQyN0YwOTRBQzA3RkJDODNFMTUzQTMwQjY5NTQ2RAotOjEwQ0U1MDAwQUU4MTNDNUUxMjU0QUU4MTdEQkQ3RTBFNEZBMjgzN0VCQwotOjEwQ0U2MDAwM0ZGMkFEOTY4OUEwQ0YxQkRGRjkyODBGRUY3M0JGODI4OQotOjEwQ0U3MDAwRjUzM0YyMkRFQTQzRDJGOTlDRkU2REZGQ0REMUZCRTRGMAotOjEwQ0U4MDAwRkQxQ0Y5QTlGMDFEMjUwM0RBQUY5Q0VDMjJCNzUxMzkzRQotOjEwQ0U5MDAwQUM1Mzg4MkM2NTgzOUZBREY3MkYxQjA5RDM0RjFGRDk0NwotOjEwQ0VBMDAwNEFBRjcwQTAzRTA5RTMzQUY2MTNCQjY3MDBENDhEN0UwQgotOjEwQ0VCMDAwMzM2OTQ5RUM1NURFOUQ5NDczMzdFRTE3MjU2NjM0N0Q1MgotOjEwQ0VDMDAwQjgxMEQ2ODVERkIxN0I0QTM4NDVDMUZDRDMxNzNCRUU5RAotOjEwQ0VEMDAwNkIyMzE4OTdCMjkxMzgzN0M0OEQ4OTlCQTRGOTUzRDQyQQotOjEwQ0VFMDAwRjg5QTg5RjE1NTcyNUU5NEZGQUNDRTg3N0U1RjA4NzkxRgotOjEwQ0VGMDAwRjI2MzZDMkNCRjgxQ0U4RjA3RkQzQTgyQzg1ODhFODRCNgotOjEwQ0YwMDAwMzg1OTM2QTBEODgzRjUzRDI0RjhFMTRGNjlGRjhGNTg5MgotOjEwQ0YxMDAwNTk3Q0NBQjI5REU4RTI4RjY1MEUxNkI3NzlDMEM5RTJBNgotOjEwQ0YyMDAwOEY3MTYyRjAxNkIwMkJFMkNFMTAxN0Q4MTU2RDhGNEJCMwotOjEwQ0YzMDAwMDJFRUNGMEJBRTlCNzBERkVFQTAwOUUzREM0RjhCMDE1RQotOjEwQ0Y0MDAwMTdFQzE3QjU1RjI1Qzg1QjQ4Njc3RjZEMkFEREI1N0U5NgotOjEwQ0Y1MDAwMUY5MUU0QUIyMEVFRjcwQjI3QUIzRjlENEYzMDhGQkIwQgotOjEwQ0Y2MDAwRkQ4NDE0ODBGRERDQzQwQzRCNEQ3NDNDNjk5RTgzRDk1OAotOjEwQ0Y3MDAwQkJCRjczMTVDQzA0M0EwNEY3QzYxMTE4N0ZDQ0JFMzg3QQotOjEwQ0Y4MDAwMTNEMEUzQjkxREI5NTZFMDhCMTcwMTQ3MTQwRjg5NjYxQQotOjEwQ0Y5MDAwRDc5REQwNUZFMjM5MEE2RjE2M0U2N0Y5RkQ4MjNDMjJDOQotOjEwQ0ZBMDAwOUVFMjc3RkM4RDc2MTlFRUQxN0FEQTFBQkMxMUYzNTYyRgotOjEwQ0ZCMDAwOUYzN0UxQkRDMTJGNEFFRUU5NTA3RkYxQUNFQzAyM0Q1NQotOjEwQ0ZDMDAwRkM3NDU2MzAwRUU3RjNCQzA5RTdGMzYyNUNGQkQ1MkIyQgotOjEwQ0ZEMDAwMjlEQzBGMEM2MUYxMkVDMTQ2MDREMENGODJBOTQwQkVERQotOjEwQ0ZFMDAwOTMzRTVGQUVGMkIxQTZBRjM3ODExQ0QxRkEyMzFDQzFDQwotOjEwQ0ZGMDAwNzMwQzgyMjkxRkU1NDhDQjI3NkE2QjI3OTg0RkQ0NjdBQgotOjEwRDAwMDAwNjYwQjBGRkMxQzM3NUQ4QjNCODU3OTg4MTc0RDI4MjVGNwotOjEwRDAxMDAwNjhDRjREQjA4Qjc4Q0UwNUYyOTlFMUJDREI0NDU1MEY1QgotOjEwRDAyMDAwNEZGQ0I4QjI4NEU1MDdCQjBGQzNCRDlFQ0Q3NkY1N0UzRAotOjEwRDAzMDAwMzA3NTlGNzM5MkNBMjdENzkxMDg2RkExRURENzVEMjRGMQotOjEwRDA0MDAwNkU4ODI3NERCQUE4REY4Rjc4Q0E2MDVGNEU1MUZCNTdCNAotOjEwRDA1MDAwREE1RDg1RjAzODlGRThFREJGMjkwRDQ1Mjc2MDNEMkM0RQotOjEwRDA2MDAwMjA4QTAwRkMzNEQ5NjI2ODA3M0JEMjA5RjdGMEVCOUZCNQotOjEwRDA3MDAwM0ZFMDUwRkREQzRDOTIxOTlEQzdBNkVENDM0REUxODc4MgotOjEwRDA4MDAwNkU0NEZCQjU1ODcyMDM1RTc2REE5NTBGMjAzRkMwREYyMQotOjEwRDA5MDAwMjI5MkNCQzUyNTlGRjJCMTdDQzMyMTE3NkQwNEFFMkMyMwotOjEwRDBBMDAwQTRGQzY5ODdGOTVDREQ1MEVGQjdEMjc5NUYzRDkwRjU1QwotOjEwRDBCMDAwMEY3QzA4RkFFNUNBQzc5MzkzNDBERjhGNTdFOUE1OTUxRgotOjEwRDBDMDAwMUFERjAxN0ZCOUUyMTk3RkI5ODY3N0NBRTdEMzhFMkNDMAotOjEwRDBEMDAwN0M0RjkzMzdFMDNCRTg2NzhGMTg5ODFGNkJCRjlCRjIzQwotOjEwRDBFMDAwRUJEM0MwQUYzQkVEMDRGREI4OUZBNTVCRTY4MDlDNjkyOAotOjEwRDBGMDAwRTNCNEFBN0M2RDJDRDdENUFFREMwRkJGRkJFNEJGQzA3OAotOjEwRDEwMDAwRDY4REMyQkUxN0E1RTg3NUJGNEYwMjgzRDcyQkQ3Q0ZFOAotOjEwRDExMDAwOTgwNjc5Njg3NjExRjNDQzUyRDQ3MzUxRDFGQzkyMUVFMwotOjEwRDEyMDAwQzUyRjFBREZCNURBNTk5QzQ4RTM5RkM5QkJERkU1RTE5QgotOjEwRDEzMDAwRjlFNDBCODRCOEIyNDg4N0JGQTJGMUNGNDQ3RjE4Rjc1NwotOjEwRDE0MDAwODEyNzEyRTY5RjE4Rjk2NzU3MzdGQzkzN0Y1RTE2NDBEOAotOjEwRDE1MDAwNkY3NUUxOUY0MzhDN0ZCQUUzMUJEQTBGREU2QjYxRTRFRQotOjEwRDE2MDAwOUY3NzFDQUFCREREMkRGRjVDQzJGM0ZDQUJGNzRFQkU2MgotOjEwRDE3MDAwRUM3RTY1OTM0RjlGOUY2QTJDQzdEOTYyRTcyRkJCNTQwMwotOjEwRDE4MDAwQkNFRjk2RUE2RkNBMDFCRDMxRDVDNENFRUYwOTI0RTNFNgotOjEwRDE5MDAwMTYwQUVGRUUzOEVEREVGQzlBNkNBOEVGMTQ5ODFFREE1MgotOjEwRDFBMDAwMTkzMkEzMUVEQTY5Rjc3ODMwN0U5QjY2NjFFNzU3MDU2RQotOjEwRDFCMDAwNEYwNENFMjNCOEZCNUFFNEU4REYyMUQ5RUU2MDc2NTg1RAotOjEwRDFDMDAwNTAwQzhGRkIwMkVDRjEzNzE4MUY4QzlEOUFDQjQzMkEzMQotOjEwRDFEMDAwNUFGQTYyQTYxNzQ2MUQ5NzM2QzNFRkNGM0RFQUNDQkY3OQotOjEwRDFFMDAwMDA3Qzk2MDZCOEEzREY3OThGNEE3OENGNTJGNTUxMDlCMwotOjEwRDFGMDAwRjVFMzZGRjdCRDVEMDRGMTUxMkRDRjc5Q0M5RUI3OEI3MAotOjEwRDIwMDAwMEE4NkMyRkI4Q0RGRkVBMUVBNjVBRDhFNDc0MDQwNUYxNwotOjEwRDIxMDAwMUFFRUREMUZENzcxMUU0QjdGNkY3RTI5RjA1MTRFNjdDRQotOjEwRDIyMDAwQkJGMTNFRjk2MDFDREIzRjk5NEQ2NDExODY5ODcxQjRFNwotOjEwRDIzMDAwRjQ1RUI4REVDQzc4QUZGQ0VDMzAzQkZGMzZGM0IwMjdDMQotOjEwRDI0MDAwRjZCREYyMkE3RjE4RUYzN0E3RjY3NzhBMTNFQ0VGRTdERgotOjEwRDI1MDAwNUFGNjQxNjg4NEM4NkNERDBFNEEzNUQ3MzAzRkEzMjZBNAotOjEwRDI2MDAwMUJGODQ5OTM0M0ZDQTNGODBCN0UzMjQ0RjdCQjA2Qjc4NwotOjEwRDI3MDAwQTlGMzdGRDAyREIwRkJBOTIyMTJFRTRCRkU5Q0IwRUY5QwotOjEwRDI4MDAwODJFQTNBMzZDQUM5RjQ0MEVFRUExN0U2MDM5QzIzQ0I5OQotOjEwRDI5MDAwOTU2NkEwQ0JCMzJFMTZEN0Y5MDUwOTVCQjI4MTZFNkVFOQotOjEwRDJBMDAwMDFGNzUzODJBMjNDRjkwQkFFRjMzRDIyOTQwRUIxRDNBOQotOjEwRDJCMDAwRjYzRDdERTI0NkMyRjg4RjNBM0Q2MzlDNjA5RjA5RURFMgotOjEwRDJDMDAwODdFMEJCMzFFMzczNDc4MjFFQjc4RjU4OUIwNEVCOUEwQwotOjEwRDJEMDAwMDYzNzg1QUI3ODlCQkQxMzBFMERBRTgxNEVDNjk3OEY3QQotOjEwRDJFMDAwM0FDQkM2MDAxRUUwM0JEMDRCNEQ0NzhFNTlFMDdCOERCQwotOjEwRDJGMDAwMUY4MjdCQ0YzMDNFODhFMjBCRTA4MzRFQkVFMDE2NDBCQgotOjEwRDMwMDAwNURDMzgzQTJBRUNGQjdGRDhCRjg0MjhCNkJGNEM4MTcxOQotOjEwRDMxMDAwMTBCNzcwN0UyRkJFOTgwQjc4MzVGMjA1QjVFNzNDQ0U3RQotOjEwRDMyMDAwMThGNjVDNTA2Mjc5OTNDNkU3M0ZCMUU3RTNGQjZFODk3QwotOjEwRDMzMDAwNjBERTEzRDk2NzY1QkY2QkU4NDlDMDdEOTBERkI4RDg2MAotOjEwRDM0MDAwOTg2RDlGMUNDQkE0QTYyODU5RTU2NDc2QkRGNjNCMkFCMAotOjEwRDM1MDAwMjNDMjFDREE5RjIzQThBMkI4MERFREJDN0VBODI3REQ0RQotOjEwRDM2MDAwMkFGRUM4MzE4RTgzRkI0NjMxMzczRTAzRUNEMDcwMTI2MwotOjEwRDM3MDAwRDg2QjIzQ0MyNTYxOTA4NzVEQjY4OTE5NjAzRkU2REFDQQotOjEwRDM4MDAwMjY2NEMzRkM1RjFFQjJGQTRENThEMjVFRUU1QkZFOUI3NAotOjEwRDM5MDAwQUQ3MkE3N0RBNUU5QzM2NkI1NUI2REZDMzUyQTdGNENGMAotOjEwRDNBMDAwNTJEODc5MjdEMEVCRDE3MDY4RUIwMzkwMDlFMEUwQzI0NgotOjEwRDNCMDAwQjM0RERGREE1MDhGODcyMjE0NkY5MzAwMEU4QTg3RkRGQQotOjEwRDNDMDAwMUM2OTA0RkIyMURGQTQyNDRGMDYzQkIwNEY1ODAwMzhGMgotOjEwRDNEMDAwREJGNjdFOUQwOUYxQ0U5MkQwRUIxRjAyQkMyNURBM0UzMgotOjEwRDNFMDAwQUM1QkJGMEY2QkI0QjczNTdCNDhGMzNGMzQ3QjQ5RjM3RAotOjEwRDNGMDAwN0JDMUFFODJGNjMyRDUxRjcxOTlEOUJFRDg4NEIwMDVGMwotOjEwRDQwMDAwRUY1Mzc4RTRBQzdDOTVBMkNBQjM0MEU3NTFBMkNFRTNENwotOjEwRDQxMDAwNjZEMjgyNzA2OUY3QTk0QzUzRjE1MTcyODhGQUFCMzkyMAotOjEwRDQyMDAwRDA0RUM4NTQ4QTg3QTlFQTdEMkE1M0RERkFGQjIyNkVDMgotOjEwRDQzMDAwMUUxQkZCM0UxNUFEOUY5RURFMzdBRTFCRDcxQUY2QTMxMwotOjEwRDQ0MDAwN0U2ODc5QzhDN0VFNEZGOUJEOEZGOUMzRTMwN0YwN0U1OAotOjEwRDQ1MDAwMDFENkRGQjE1OUVDRkUwOTE3QzNDMzIxMjlGNjNBNzY4QwotOjEwRDQ2MDAwNTE5NUVCRjFBNjQ4MEU5Q0M3REVCRkU3RUZCODZFMUVFNAotOjEwRDQ3MDAwRDhGM0Y3RjdDMThFMUM3NzQyMjA5MDk3M0JGRUM0QThFMwotOjEwRDQ4MDAwNzhDQzBGMTgyQjIzNUY2OUZEN0EzRjZGQjQxMUY2OUM5RgotOjEwRDQ5MDAwNDRGRkRFQ0M0MTBBOEY3MjI1QzA2N0MxRjI5NTUzOEZERAotOjEwRDRBMDAwM0MwQUZEOUQzRjJBOTBFODczMUY0NTkyNjcyMEM0RTUyMgotOjEwRDRCMDAwOEJENERGMUQzQUM4MzE3QjRBNkIzRkE4RkVERUM3MTExMwotOjEwRDRDMDAwOTU2RjIxMjE0M0JCNjdDNTFDNDVFN0E5RUFGRDFGMUFEQgotOjEwRDREMDAwNURBNzFFMkYzRTIxRTQ3NEE1MEZGQ0ZEMzNFMjEwNUExOAotOjEwRDRFMDAwRkNFMTlDQUEwRjQ5RjM5RkYwN0NDRUY1OEQ3NzBBNjA5MgotOjEwRDRGMDAwQkY1RjlGQzYxMzI1NkFEQzFCNjRFQUU5NDdDNTIxNEU1RQotOjEwRDUwMDAwM0EwREY2NkZGMzMzOEY0RTgzQkNFNUI3Nzg0QzgxRjQ1OAotOjEwRDUxMDAwODY3NkJFOTkwM0Y1MTYzRUU2QkQyQTQ2RkM1RTFGQkEyNgotOjEwRDUyMDAwMTNFRjU1OTkxQkNGRTRBM0E3RjFDNzVGNERGOTY0MzhGQQotOjEwRDUzMDAwRDA5RDMwM0IzMDhGREQ0QjYyQTRFRjgxM0RGRjkxMTRENQotOjEwRDU0MDAwMTlEQTNEQkVCQkEzQkY5MTBFQUY5QzJBQzA3REFDOUUzNQotOjEwRDU1MDAwRTg2MUU0REI3RDc0OUVGRTJCRTE3NzUzMkRDNDhGQkYyMQotOjEwRDU2MDAwOUJFQUMyRkFBQkJFMzRBQzZCRkNFQURERkI2NDEyRDhCQQotOjEwRDU3MDAwNzkxQTlGNEU0OTYyN0MzMzZFRjdBMzQ5QzRERTQ5MkY2NgotOjEwRDU4MDAwMjNERTg2QzUzM0ZFN0ZDOUFBRDkyNUVFNTlEM0U4QTM4OQotOjEwRDU5MDAwNzdFOTNBODQ4Q0VBMjcyRDkwMzc1NkFBQzIzQUZCNzA3NQotOjEwRDVBMDAwMTFEQTI1NDQzRENGNjI1Q0RGNjZGM0I3NEQwMTc1REFEMQotOjEwRDVCMDAwRDNFRkZFQ0M5NENCN0FGNTdCMzlDNTZGRDUwQkIwMEU4QgotOjEwRDVDMDAwMTYwOUFCOTkxRTUzRUQ3ODBEMUUyMzlEREYyM0E1MDg4OAotOjEwRDVEMDAwN0Y3N0YwMTlGOUMwMDhFNzRCMURGOUY2MEFBRTA3REFCNAotOjEwRDVFMDAwRUZFMENDMTg5ODI1MjZDNjk4ODc4NjhGOTk4NEFFQzcxOQotOjEwRDVGMDAwRDlCRDVGOEY2RjhDRDdEQkVGRTc4RTE3RkUxMUQwREFDNgotOjEwRDYwMDAwOURCQzE5RTk2NjZDRDdGNDQ3MTEwQzkwOEJBNTFGRUNGMwotOjEwRDYxMDAwOTNCOUYxMjk0OERGQTI4QjEyNTFFODNBNDNGQUU5Q0ZENgotOjEwRDYyMDAwRjU5MzkyMkI5MURGNTZCOUQ4QjNFRUY4QURGQTIyNEZBRAotOjEwRDYzMDAwM0MyMzNCRjk0RTZDN0FEODA2N0NCNzVCQThCNzQxMUNGQgotOjEwRDY0MDAwRjUzQUZCRjQzQTEwQkRDMkNGMEI2NkUyRkQxNTExMTM5QgotOjEwRDY1MDAwODFEMERBOTREMDk5NjY4ODMzNzgzRjI0NzhCRUExMjBBRgotOjEwRDY2MDAwQjQ3RjMyRjBFOUFCNDIwQkZBNTk2REU3MDk3OTM4Q0E1OQotOjEwRDY3MDAwRUU2QzBBRDVEOUMwMkU2QjRBNjZFN0YzMEUyNjEwNUQxNAotOjEwRDY4MDAwRkVGNEM1NzhBNjZGOUE4RTlFOURBNkM0NjgxRkVFNjJCMgotOjEwRDY5MDAwRkMzQzgzMjhDOTM5RjQ5RjQ1RUIyOTdGODAxRkRDQzdGOAotOjEwRDZBMDAwODE3MTkyNDJDRUZENUEzMkQ4MkQ3MzM5RjQyM0RBRjZDNQotOjEwRDZCMDAwOEU3OTJEOTlDMkRCN0E3QjAyRUE5OTI5NERGN0RERTk1MwotOjEwRDZDMDAwQTI4NDA4RkU2MzI0M0U2RjJGRTNGMEZFODQyMkQ5OERFRQotOjEwRDZEMDAwRjVBMkM1NTlFOEY3OERGOTI2Njk0NjA5QjRERjIwQTJGRAotOjEwRDZFMDAwREYzMzg1QUYxNDIwNUU3NTNBOERDM0FCM0NGNjcwOTE4NQotOjEwRDZGMDAwNUFGODNENjJGRjc0MzYwRTcxRjk5M0MwM0Y3REE3MjQzRQotOjEwRDcwMDAwNjkwNEZFNjY5RUFDRDUwN0UxRUYyRTEyODNGRkI2RkFFMAotOjEwRDcxMDAwQTU3M0ZCQ0RCNDdERjUyQzBFRjM4REE3QjgzMjg4M0ZGMQotOjEwRDcyMDAwOEE3RjhBRDY0QjM4QUY1QjQyQTkwNUMwRDczMzhBRjVDQQotOjEwRDczMDAwRTcxRUMzQUEzRDM5QUJENDQ2MDJEMUZCRjk5QzBCRTVFOQotOjEwRDc0MDAwRkFBMEI1RkQ1NkZDMURGMUJEMjI4MUY5Njk3MjdFQTNEOAotOjEwRDc1MDAwQ0FFRkIzRTcyNEU5QkU5QjRFOThEREE5QzlENTREQUEwRgotOjEwRDc2MDAwRkNEREE4RkFDRDczM0QxOUJBRjE0QjA5QjM4N0ZFNDAzMQotOjEwRDc3MDAwREEwQjgxNjRGN0I4RDg3RUY0QjRGNjk2QzNGM0UxMjVFQQotOjEwRDc4MDAwQkVERjY4RDA4NzM3MEQzMUY4QkQ3Q0U1NUFFNDhCMzRCNQotOjEwRDc5MDAwQ0U4REY3QzhCOEY1RUQzNzhGRDVENzhERjI2QkQ0MEY5NgotOjEwRDdBMDAwQjMyMDhCOEZFRkFBMjczNDdEMzA2QjJGMkY0MjNDNjgzQwotOjEwRDdCMDAwNTYzRUM1MzNEQUM1N0FCQkJEMjc3RDMxMjZBRTFCN0QwQgotOjEwRDdDMDAwNzE0OUJFMTdDQzkwMkVGQUUyRTNFMkVGQTUyRjdFNEIxMwotOjEwRDdEMDAwREQ5NkIxNTRBRURGOEU1N0Q3Q0RGRUE0M0ZFODhEMjkzQwotOjEwRDdFMDAwRkM4RTQ3ODE4RkRBRThCQTY5OEVDMTQ3REFCQUEzQzVFMQotOjEwRDdGMDAwMDE4QUE4MUNBMzFFMzhDNUY2NjNBNjVDNEMyN0ZFOTFCRgotOjEwRDgwMDAwOUQ3MTgwMEUzRDQyRUQxMjc3MEM3QkE5MzUzRTFCRTVFNAotOjEwRDgxMDAwQUI0M0VGNjg3QTI1Q0EyRTExRjM3RUI4NUQzMjg1REEwNAotOjEwRDgyMDAwQTM1MjJFQzBENzBGRTEyQjUyRUYyNTI5ODI4NDJCODhEQgotOjEwRDgzMDAwMUZBNjlEQzEzODkwNTdBMEZFMkNBRUNGNEYyMjdGODFFRQotOjEwRDg0MDAwRkVFMzEyM0JFNUMzNjhBRjY4NzFFODBBOTc2NjRGRTlFQgotOjEwRDg1MDAwRjlBNTIzMUUzOTkzRERDM0FBRjE0OTExRTAxM0U0N0YzMgotOjEwRDg2MDAwMjY4RkZCMDRGRjFCRDQ3RjAzQjMwMDgwMDAwMDAwMDA2MQotOjEwRDg3MDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZDNTdDMDk3ODU0NTU4QwotOjEwRDg4MDAwOTZGMDc5RjU1RTJENDk1NTkyQUE2QzE0OEJGMDEyQjY3QwotOjEwRDg5MDAwODQyNDU4ODQ4MEVDMTY1OTU4QTMxNEEwODBDQjY4ODE0NgotOjEwRDhBMDAwMEI2QjEyOUE3MTlDRUU2OUZGQTY0MjAyNDM0M0I3ODM0OQotOjEwRDhCMDAwRDJEQUNFRThGNDU3RDgzQTgzMUFCNDA4MDEwMzlERDBERgotOjEwRDhDMDAwMTU1MDRDNTgzNDA4MkVGOEQ5MUE2RDFBRDEwRTQ5ODRDNwotOjEwRDhEMDAwRDY0NkJCQkZDRkZGOUM3M0VGNEJBQTJBODU0REZGRkZGNwotOjEwRDhFMDAwM0ZERjlGQjQ3REI5RUZERTc3RUZCOTY3M0ZFNzlFOTdFMwotOjEwRDhGMDAwREI5QjU1QjNBRDA4RTBGNjk5OEEwNzE0MDBEMEYxNzdBOQotOjEwRDkwMDAwMjJDMDQyRTA3RkMzQUNBRDE2RjA4RUM3QkVEN0ZDNjkyMwotOjEwRDkxMDAwODcwREY4RTczQkZDMkY5QzkwRkMyQ0E0NTBDRjBCOTA3QwotOjEwRDkyMDAwMDlCMDU0Q0U1RkZDNTc3RDMzM0Q1RTNDMjc3QUZFNTJGMgotOjEwRDkzMDAwOThGREI5OTIwQzcwMUJGOENEMzAxQ0Y3RjNDNThFRkYyMwotOjEwRDk0MDAwRUM0QjE1Qzc5NzJFOEI3RTlFRTk0QzRBQkY5MDg3RkYwNAotOjEwRDk1MDAwMTgwMTIzQkU1MzAxQ0FENEJBOURCNzIyQkNERDI3NTU5NgotOjEwRDk2MDAwOEY1NTRDMzNEMUZFMEYzOUM1RkUwRjM1OTcwQzgwN0M5NwotOjEwRDk3MDAwODBERjc0MTZBN0Y4QjEzREI2MTEyMTFDMEREMEJBRDFDNQotOjEwRDk4MDAwQzZFRDcxRUMwN0YxQzVFRkU4RTc2NjNDOUYwNUZDMjFBOQotOjEwRDk5MDAwMDdCNkI0NTIyMUI3MDE0ODA1MThFREM0NDUyNzYwRkYwQQotOjEwRDlBMDAwMkE5RTNGMERDNzg2MjRDMEVGNzMyNDVDRDkwMEFGRTdFMQotOjEwRDlCMDAwOThFNzA0RjFCREMzQjg1RTAwRDcwREUzRkEwMTVDRjc0OAotOjEwRDlDMDAwQzg0NjI3Rjc1RkRCRThFNkZFMEQyRTQ0NkEwNkMwRkE3QwotOjEwRDlEMDAwMTQyN0FGMzcyRkY3NzY4NzFGREY1QkUzQ0NFNkU3NTBERQotOjEwRDlFMDAwM0VEQTQ0RjgzNkUwMkY3QjZBMDgwNDEwREZBRjc3QUNFQwotOjEwRDlGMDAwRDA5NDc0ODAyQUI3RTJCMTY2RjVEMTAxNEZFMzU4OEUxNgotOjEwREEwMDAwRjNDQjI1QkUyQkI3MkExMEM0RTdFNTFGQUUyQjA3QzQwNgotOjEwREExMDAwNUY1NzMzRUU4N0Y4QTkyQTU1ODMzNkZDNjc0OUQzNjNFRAotOjEwREEyMDAwM0I0NURGMENENjA4RkFERTIyOEUwMjMzQjUxNkNEODZEMgotOjEwREEzMDAwRkIyQ0YwMjgxRTE1RjdGMTM2ODlGNzZGRjUyQTQxMURFQQotOjEwREE0MDAwRkY3OThCMjc5QTFFODc2M0U4QkU1OEFFQjM4MEZFMEYxRQotOjEwREE1MDAwREY1QjMwNDcwOTg2NzE5RDA1OTNBMkRGNUI3Qzc1RDYzRAotOjEwREE2MDAwRTdDQUQ4RkU3Q0I0OThFODNFQjYzRkJGREM0RTc0QjczOAotOjEwREE3MDAwRTMzRjg2QzEzMEEyRkI5NThCQTU2RjhEODUzRUJBQzU2RAotOjEwREE4MDAwQjZCMTc0OEUxREJGMTY5REVGMjczQTY3NUM5QkNFQzY1QwotOjEwREE5MDAwRkI3RjhCQ0UwRjExNEU5MEJFNzBGNDFCOEI5RTA0MzAxQgotOjEwREFBMDAwQkJFOTA3MUFEMTc5RjY1NThERDdBRDMyQ0UzMzE0ODYzRQotOjEwREFCMDAwRDI3OUZFRDQ1OUY4NkZCNzQyREZGQ0FBQTYyRjJERkUwQgotOjEwREFDMDAwODI2QjlGRTc2RkVEQkYyMjQ1RTdGRDY5NUY2RjdFREZFOQotOjEwREFEMDAwQkVGMzM0ODBDMTc4Q0VGOTM5RDFGODhEQTU2QjJDQkQ1OQotOjEwREFFMDAwMTZDQUY3NjJFOUI1MzVFNjFDMDY1REEwMTM5OTY4NjBCMQotOjEwREFGMDAwMUNCQzVGNTUxOThFNkJEMUFEOTcyRTE2RkYwODRGN0U1QgotOjEwREIwMDAwRkY3MTgwNUZGM0I5RkFENjkzNzQ4Mjc2Q0Q1NzIwRTAyNwotOjEwREIxMDAwMzI0N0M4MDNGMjc1MjAwNUU5NUJERTBBRTE0NDA0RUNGNAotOjEwREIyMDAwOTY4QjczM0VEN0E4RjUyOEYwNjlDNDM5RThFNzUzODM4QwotOjEwREIzMDAwQ0U2QURGRkE2NTU3MDdCMkZDMTlGQjk2NjkxMEIwMTQ3QwotOjEwREI0MDAwRDI3MzIxOTdCMUYwNTVEMjNBMjM2OTdFODBGOTY4Q0IyMAotOjEwREI1MDAwMkVEM0IyMTA5RTYzQkEwNUVFRjU1MTlCMjhEQTAzNEUyMAotOjEwREI2MDAwQTEwNzFBOUQyNjVFQjdGQjJCOUIwOTZFMDQ3OEU1RjA5MgotOjEwREI3MDAwODA2MjQwRjgzQzU2RTcwOUQyOEIyMTMzRjBGQjQ1Qzk1RgotOjEwREI4MDAwM0FDRkRGOUMwNDgxMDREQzFGQjQ3NjlCMEZGOTQ0MkI1MQotOjEwREI5MDAwMDZDODQxMzlEMzA2NTk4MjM1Qjg2NDlEMTZGNjkxREMyMgotOjEwREJBMDAwNzU3QjM0QTg0NkI5QkJEMTc4RUY0OEUwMkU0MDkyNkMyMwotOjEwREJCMDAwRkU3NDk0QTkyNjhCREUwRkI3NEZDNTc5MzcxNTZBRkEyNAotOjEwREJDMDAwMzY5Q0UyQjJFQTNGQTBGMUFFNjZBQjkzREVFQjNFRjhFNAotOjEwREJEMDAwQ0YyRDY2NUFFNzJCRjAyMDg0RjA1QTMzMzIxNThFNEY0MgotOjEwREJFMDAwNzM5ODgzQTQzN0NBRDQ5M0FBMDlGQkREM0QwMEE0OEZBMAotOjEwREJGMDAwQTYyRDBCOTcwMEQyNkQzQUI0RDczOEIxOUQ0Mjc0OENFNAotOjEwREMwMDAwNDNCRkJGRDA3OTMzODRERTFBODg3NDlBMjFFOTM0NDM0NAotOjEwREMxMDAwRUFBQjkyNjY5NUY1NDY0OTkyMUE4NEFDM0VGRDc0QjMyMAotOjEwREMyMDAwQTREMThDNDA3QjQ5MEFFRTNCNDM1MzNDMzVEOEJGRjkyNQotOjEwREMzMDAwQUExNkM1OEYyRjkzM0VCQUIxNEYxRjk1QzlGNUJEM0RBQQotOjEwREM0MDAwQkE4Njk2MDE2NjQyMzRGRjk2MzUwQTNENTQ2MjhCNzk1NgotOjEwREM1MDAwMkVFRDBGQkVDOTdDNTVFNjhDMUU5RjQyQkExM0Y5RkIxMAotOjEwREM2MDAwNjI4QzVFODIxOEZCNTNBNkZFMzVCOTAzRjFGMDhBQzVCQgotOjEwREM3MDAwRkJERTU0ODRCQkU3QjQxOTlFQzVFNzcwMTEzQjkzRkJGMAotOjEwREM4MDAwRTNBNzMxQzYxRUM1QjYwNzBGMjc3QTc1ODRFQjE1RTJFOAotOjEwREM5MDAwMjMwN0Y1MDc3OUY1QjFENzlFM0ZCNkEzQTc5ODhFRjE3NAotOjEwRENBMDAwNEFERDIyMERCMjk5MkRDRkJBMzNGQkYwREUwRkJGOTJDMQotOjEwRENCMDAwMEVCMTc4QUQ5NzdBREVEQkU4N0M4RDhFREIwRjhGQUQxMQotOjEwRENDMDAwQjNEODlFOTdGQzQ5RDc0OEY1RkRCREY4MzRFNEU1OTVGNwotOjEwRENEMDAwMEI4OTVFRTJGRjU3MkUwQ0YyQjJGRDRBRDI1OTNFMEM4MAotOjEwRENFMDAwNzkzODc4RkU3MjIyRTk1MUM0QTdBRTIxOUZGNEI4NkM0RQotOjEwRENGMDAwOUU2Nzk5OUY4NTFDODQwNjhFMEE2RUMzRkU4NTI0QzE4QgotOjEwREQwMDAwRjdBRjI0RjYxQ0NGMjNCQ0RGNjJGMjNDNEJEQjY4RUJBMQotOjEwREQxMDAwODcyRjJBMjBGREI5NzVEMTc5MzM4MEUyMDVFNTg3Mjg2MAotOjEwREQyMDAwNEY4QUVFODRCQkIxMERBMDNDMTFGRjA1NTIyMTQ4NzIxMQotOjEwREQzMDAwNjI4NjEwRDBCRTM1NUU3ODlBREExOUQzRjQxNEMyRkIyRAotOjEwREQ0MDAwNjU1Q0IzREQ0MUVCRTkyOUM0RjdGMEQ3MkIxMzdEMDUwMgotOjEwREQ1MDAwRkRGMTVGQkYxMTdDMUFFRUQzQjBEMUU2RDM1MDJGMUM3QQotOjEwREQ2MDAwRDhFOEU0N0VFMzQ2MzdCNzg3MzZFQURDNkUzQTkxRkNDMgotOjEwREQ3MDAwNDNGMjFGQUFCQzE2OUYxNkExNTdFNkE1MEFGRDMwMDM2MQotOjEwREQ4MDAwRjUwRUMxMzUwMzk0NjAwMDc5NkZDNjIzQzBGMjg4NzIyNgotOjEwREQ5MDAwMTBEQ0E0MTBCREYwM0MzOTdERjg0NEZBNUNFRTg4RTg1NAotOjEwRERBMDAwNDNBRDU2M0IyMTkzQTU4MkU5NUU5ODY3RTJGN0QxMDkxRQotOjEwRERCMDAwMDgzRTlGRDU3RjNFRDIzRkFBQkY4Q0ZDMTY4NEMzRUY5RQotOjEwRERDMDAwRjI5NkI5QjAwRDM5N0NCMzVEODhERjdBNjVFOUQxNEI0NQotOjEwREREMDAwQzBGREI5RjRCQzVFQjk0M0JEODRFQjhGMEZDRjg0MUY4NwotOjEwRERFMDAwQTJCRDE4OEY4NDIxQkNFMkNGNUQwNEZGODQxNjBCMTAwNgotOjEwRERGMDAwN0REMEIwQjI3QzE2MUFGMkY5QjVBMjVDQzBGRDQ4ODRBMQotOjEwREUwMDAwQkUxQjhDRUY1OUNCQzNDNDRGMDdBMDIzOERGMDVFNjRCQgotOjEwREUxMDAwRjNEOTQ5N0U5N0I5MDQzRjc4OTVEQkREMEFBRTM3MzlFRgotOjEwREUyMDAwQzNFMjUxMDlCNEUxQkVGMUVCMTE3RjJEMTlCODIxQ0U0NwotOjEwREUzMDAwNkY2OUM5MUNBMkU3MTNCN0JERjEzRUM5QjdEN0U2MDhBMQotOjEwREU0MDAwQUI2Qzk4Q0M5RDFEMTFGNjdDMDAzQ0UzMjQ3RjkyNzQ1MgotOjEwREU1MDAwREM3NzY4NDc1QTNGNEUwRUIwOUVCQjZBMDk5MjVFNkJGNAotOjEwREU2MDAwM0Q5M0VDMDlFMzNFRDNBRkRBRDhCRkFDQTcxNzUxNkVCMAotOjEwREU3MDAwMEYyNzI2OEY2NTNEMTM0MjBENDNGMjYzMTNFNzk4NkQxQwotOjEwREU4MDAwRjZBRjIzM0NBMDY1M0U3QTBBREZGQkVENjUwMEQyQUYxQQotOjEwREU5MDAwRDNEQjNGNTRDOTBGMkQzMUU1MEVFODQwMzg4RjJBQTM1QwotOjEwREVBMDAwNTNBODdERjJFM0U0N0M2RUNGMjQ3NzEyN0UwRTlCRUNDOAotOjEwREVCMDAwM0FFREZCQ0U0NkJENzQwNEYyQ0JBOThENTAzQTAyRjk3RgotOjEwREVDMDAwRTNBRDhEMzY2RTRGNkY3NDcyN0I2NkEzOUJEQkEzMzgxOAotOjEwREVEMDAwNEVGQ0YzM0E4RTEzN0ZCRDgxRTNENDZGQzM3MTZBNEY1QQotOjEwREVFMDAwRTAzQUQ0N0FERjcyOTg0ODdFNjdCQ0U1RDBBODJEQkNCMgotOjEwREVGMDAwMkI4OURCRkEzQjkzMkM3NDhFQzNDOTUwNjdFQzRGRkMyMwotOjEwREYwMDAwMTQ0RTBDMzc4MDA3RTUyRUQ1RkQ1M0RCMEQ2ODNGQUQ3MQotOjEwREYxMDAwRkUwMjY1MUNDMEQ0NTRGNzVDNkQzQUFFM0I3QkU4OEZDMwotOjEwREYyMDAwQkVDMkYxMTlBOUMzN0U2QTQzNzg2RjNCRTM2ODM4ODlBMgotOjEwREYzMDAwRkREMkM3RjU5RjNBODgzRjRGMjRBMjkyMjQzQzY0Qjc5NAotOjEwREY0MDAwNzk1MTM2Qzc5M0QyMThDNDY4RjdDMjI0RUNBNzE5RkREQgotOjEwREY1MDAwRUNCOUE1QzgwQTRCNEEzQUYyQzAwNUIwRjNCMUUxNzM3NwotOjEwREY2MDAwNkQ4OERGMjU3NkZGM0Y1MURGMTI2ODlCNTMzQTlERkE5QgotOjEwREY3MDAwMTA3MDkyQkMyQkU2MjBDQkZCMTAyNTdEMTFEQUJGQUREMwotOjEwREY4MDAwMEVGRkM0RDQwODdGQzBBQkZDMjE4REY0QzM0NEFGMDJBNAotOjEwREY5MDAwQUU3NEE2Nzc3MEE0RDJGN0RDOThCN0Q1NTEzNjMxMTU5OAotOjEwREZBMDAwRjlGN0Q3MkU5NUY5NjlDMjM0QzUxQjc0RjQ5NzVGNjNFRQotOjEwREZCMDAwREU4NEYzN0EyOUQxNkZFMkM1NTlCNUQ0MkU5OEUzRTIxNQotOjEwREZDMDAwQkU2RkQ5NERCNTI0RkZBNThFNkJCRDVGQzJFRjg3NUNEOAotOjEwREZEMDAwNjZENjQ3QzUxQUNFOEI2MzE3OEQ3OUUzOTFDOUM4RkYwMgotOjEwREZFMDAwRUU2OTRCMEMzRTRCN0M3REQ2NUY5Mzg0RkQzMjc3NTZCOQotOjEwREZGMDAwQTEyQTc1MzQ3MERGQjU2QjFCOEQ5N0JGREVDMDcyRTU0QgotOjEwRTAwMDAwNDlGMkU4NTlDNDhBRURBNTY5MzgzRUQzQTE3OEMyMjQwMwotOjEwRTAxMDAwMkFEMzNFQTk0REEzNzFBN0UyMjFCNENERjQ4RTNCNTU3RQotOjEwRTAyMDAwNDRFMzIzNTRDRjRDRUE5RkQ1NEI5REQ4OUVEMTY2NEVGNgotOjEwRTAzMDAwQkQ4NEYzNjZFN0E0Nzg2Q0Y4REU5OUYwOEZBRTEwRkYyQwotOjEwRTA0MDAwQ0VDQzQ5RjIyNEU4MTQxNzA0OUZBRUE0QkVDN0VBQTlCNwotOjEwRTA1MDAwRDZFOTFDOEY5NTI0RDMzQUJBRTIzMTYxQkZGRUQ2OTIzRAotOjEwRTA2MDAwRkY0NTcwMTRGQjUyNDA1MTY4RENBNTkxMUZGQkU0QzdDQgotOjEwRTA3MDAwM0YyOTc1RTJCQ0ZBQTEwQTkwRkM5QzA5RTdGRTkxRTBGOQotOjEwRTA4MDAwOUZEOTlBQTgyNzIwNDBGNTE2NjcyOUJENTc2RjUxOUM0NAotOjEwRTA5MDAwOUJCOEVGMkJBMUY5ODE1MTY2RkQ3OTVDRjdFNDlENzY4MQotOjEwRTBBMDAwQjYwN0U1NkZFNUIzNUY3NEYyQ0VDMTZDMTdDQURGOUFBRAotOjEwRTBCMDAwNTY0Q0VENDk5M0YwREJDQkRGMkE5RkMzRTMyNjA4OTM1MAotOjEwRTBDMDAwNTIyOUJGRUIxRkY4QkQxRDI1M0YyOTREQzdGNTRGMEM0OQotOjEwRTBEMDAwNzNCMTZFNDEzQTk1NkExMTdBMERFNzgzNDJFRkRGNTVDRAotOjEwRTBFMDAwQzFGMzVCOTQwMTNGM0E4RkYzQUZFNEE3MTQ1QTcxRkY3OQotOjEwRTBGMDAwNTlFOTA5NTFGM0U3MEM3MTQ1RjVFNzhEMTg1OEFBNDUyMAotOjEwRTEwMDAwRDhCMUYyRkNBQ0E4RkVBRDQ1NEFFOTg4ODhGOUJFNjlGMQotOjEwRTExMDAwMDk1MUZENDVBNUFFRDIxMTExRjM2RjJCMUYxOEQ1NUYyNAotOjEwRTEyMDAwNzI1QjU2NTQ3RkE2NjlCMkQwMUYxQkExQkM1NEM4N0QzOAotOjEwRTEzMDAwNzkyOUZCOUJEOUFDODcwQTlENjJFRTFCMzg3RTNGOEUwNgotOjEwRTE0MDAwMTdCNjA5N0ZBQUQwODVGRTE0RDJBNUI0QUQ4OEZEODA4QwotOjEwRTE1MDAwMzY3QzhGQzY4QkVDNTI4RjA1QTBERDNEOTFFQzgwRkNBOAotOjEwRTE2MDAwMDlFMjJGRjY4QjY1Nzc2NjNCRkEwNTYzODlBRTY4QjdERgotOjEwRTE3MDAwMjNFMDJGNzU0NERCRjFGQTQ0RTEyN0NDMDE3RkFEMEI5RQotOjEwRTE4MDAwRTkzOUE3NzUxRUZCNTc2NUU5RDU0NTYxMjA3QzQ2QkY3NwotOjEwRTE5MDAwMUYwQjM3MkFEMTlENzcxMzFGQjY2QUFDMzdFNzBDODk1RQotOjEwRTFBMDAwRDlBRkFERDRDMTdFOENGNEVGRTZDOEI3OEM3RDIxRTA0OQotOjEwRTFCMDAwNkQyN0ZGQzYzODg3QjFGRkI1Q0UzMzQ3OURDNjdFRTFEOAotOjEwRTFDMDAwREYzQUQ3QUM5Qzg1QTVBOTcxRTE1RkNGRkU0QzJDOUNCMgotOjEwRTFEMDAwNzlBOTMyNEY4MUZFMTVGQjg1QURBOUVDMkZFMjRGN0E2QwotOjEwRTFFMDAwM0MzRkMxRjA3RkNBNTFDRkI5MjJGNTlDNDM0OTVGNThFQgotOjEwRTFGMDAwNzA2RDNENjdBQzdCMkRGRkNGNThENzc4MUZFQTU0REU5QQotOjEwRTIwMDAwREY3OEJGRjdCOUFFQzQ3RkJFMUJFNzI3QzU3OTlFQUVFNgotOjEwRTIxMDAwQzQ3RkZFNUNGNEZDMTk5QTVFRTM0MDc5M0UwRThBMjdDNwotOjEwRTIyMDAwNDA3ODNGQTk2QkU0OUE5NTlDRjVENjUyNUJGNkExNUZDNgotOjEwRTIzMDAwMjNCNzcwRjZGOTQwMkRCNTUzM0I4MzI3QUQ3OEZFQjk2RgotOjEwRTI0MDAwMzlBQTRFRjkwN0MzMkZFQTE3NjdBNTBBN0ZFNEY4NTVFNAotOjEwRTI1MDAwRERBRUUzNzg3RDQwQjc1M0RDNTFGRjg4NkVBN0Y4QUFBNgotOjEwRTI2MDAwREUwQjczMjg4RUY0MEUzN0FEQTczOEM0OUI4NzJERjZDRQotOjEwRTI3MDAwRUY0RDE1RkE3RTg1N0NERjY4MEZBOUZFMTUwNDdGODVCQQotOjEwRTI4MDAwQURFMzUxRjI0OTJBQkZFOUIxMTA1RjFDMjc3RjJGQkZEMAotOjEwRTI5MDAwQkZCRjc3NUMwQjNBNjhCRkUzOEYwNDFEQkUwODdEN0U2RAotOjEwRTJBMDAwQkRGRURFMjI2MkE2MENFMjUzQzUxN0E5NEY0QTZDMDlENwotOjEwRTJCMDAwQkU0OEZENTFFNjc0NDVGNUM3OTNGRjgzRUZDRDc2MEY1OQotOjEwRTJDMDAwOEM3QTZGQUU5RTE1MzUwRkZERDgxQ0YyODc2QTJDOTBBNAotOjEwRTJEMDAwQTM5MTNFMzUyNTdBQzhDRjhCQzVFM0VGRTVGOTNEMEUxNgotOjEwRTJFMDAwMjdCOTUxNjA0RUQ3NTU3RjFDRkJFNDI5MTFGODhCN0Q2RgotOjEwRTJGMDAwQkUzRDU1QzQ3MzgzQzg5RUUzM0EyNzUyNzU2RTZCNTU3NQotOjEwRTMwMDAwOUY3MEU2RDA3RjI2N0U4OEVENjNBQ0JBOENENkMzOTUyRAotOjEwRTMxMDAwRERDNDc3MUVCQkU5MEFCQUUwRjBEMkUzRjNFNzZBNjgyRQotOjEwRTMyMDAwRkYzREUzNERGRjM4MUNGQkM3MUU1RjIxRkE1MzRERkIzOQotOjEwRTMzMDAwQjJCMURGRkFGODdEQTI3RkEzNjlCQ0Q5ODNFQzE5QjgyQQotOjEwRTM0MDAwN0Y2RTI5RjkwQkU5QkU3RjI3RkE3NTlCMUQ1QjE1RDRGQgotOjEwRTM1MDAwMDM5NTA5QThEN0IwRDU0QzBBMTRBNkY3QzVDN0RCMkQ3RAotOjEwRTM2MDAwNjg1RjkxQzBDODZDNUUxN0QyQzA2RTE1RjE3NDY1QzI0QgotOjEwRTM3MDAwRDAyMEQ5MTNBREQ4QUIxM0RFMkExMzBDN0E3NzY0OTI3MAotOjEwRTM4MDAwOUQ4N0RBMDk1MTcxOURERDgyRUZFMUZCNjUzNkZGMEI1OAotOjEwRTM5MDAwODI2RkMyQzkzQUVBQTU4NzBFOTYwRDIwRkUzODkxRUEyRgotOjEwRTNBMDAwNjQzQ0U0RUQ5QkVBMjY3RDg1RjBFRDIxRkJGRUZGMDE1OAotOjEwRTNCMDAwQkVFNjc4RjBENTlBQzUzRTlERjU3OTI1NjQ4RkYzODY0MwotOjEwRTNDMDAwMjE3OTk0M0VGQTE1NkEzQTNGNEYwODIxRUZCMEJGRUUyQgotOjEwRTNEMDAwNzU1M0ZFQjFDNjY1RjE5MEZGN0U0MkYyRUZGNUI2MzU5QQotOjEwRTNFMDAwMzI4RkExREEwNTFGQTkyOUE2RjU3QkIxN0Q1QkYyQ0Y5QgotOjEwRTNGMDAwMTlCOTJGNkFCRUExMEI5MTNGQzBEOTMzNzQ1MTgxRTg3RQotOjEwRTQwMDAwMTM3RkE4NkE2MTBGRjlFMTNERkY5MEU0QTFGOEY5ODM1OQotOjEwRTQxMDAwNDQ4MTNGMThEMkYzRDE4RkYxRjk3Qjc3RTc3OUI2RjFEOAotOjEwRTQyMDAwNzM4MUE3NjVDMUVDOUEwRUVDOEZCMzA2NkZBMEZDRTM3NQotOjEwRTQzMDAwQTEzNEZGNDc4NDg3M0JBREMxOTFDQzg3OEVGNTQ5QjRBOQotOjEwRTQ0MDAwOEZFMjA1OEU1MzhDRjgwRkUzM0NERDMyQkM3RjVDNzBBRAotOjEwRTQ1MDAwRURGREMxNDY3NjY1RTk2NDgxNzc2MzdGQzRCMThERThERgotOjEwRTQ2MDAwRjFERTI0RjFEQzgwMDdFMUU4MjYzRTMwRTBFQTg1MDdCMgotOjEwRTQ3MDAwODYzODM5OEYwMDIyRkZENDI1RTM4QjJFNUE4RkVDQTdFNAotOjEwRTQ4MDAwRUExMDc5REMzRjk4MzhGRjUyNDVDMjhBRkQ3REU3NEQ5RQotOjEwRTQ5MDAwMUMwRjFBNzlFMDIyMTBGQjREM0VCNTQ5NjVFMDAzRjhFOAotOjEwRTRBMDAwM0I1MUEyOTY1RTY5NUNDQkYxRkQ4NDc2MkQyNkZFRjY4QgotOjEwRTRCMDAwQjIzRDlEMkFERkJGQTlENTVGRTJBMEY2RkRFODc5NTMwMgotOjEwRTRDMDAwNjUxQzNGMDk4MjJBQzU1OTkzM0I2MkM2MUJFNzdGNDZGQwotOjEwRTREMDAwRUI0RkJEMThGRDNDMjk0RERBQzM0MTMwMjgzMjRGQjIxNQotOjEwRTRFMDAwNDFDNjREOTc0RjY2QTcxMDFGNkIxODJCQTg0ODBGOEI3RQotOjEwRTRGMDAwQUVDMkE0RDQzRTNERDNCMDExRTc1OTQ5OUZEQUI4MkQzRQotOjEwRTUwMDAwMzhFQkJDOEZGNjY5REM4ODBDM0Y5QUY0QUE5QjVCNDMxRQotOjEwRTUxMDAwRUUwQUNFQzJCRDMwMzY2MjFGMjkxNzA2MUUyRkJGMkY0RQotOjEwRTUyMDAwRjAzOEFFMjNFNzk3RDNCMDZGNkUzNTQzNTBFRkMzQzNENwotOjEwRTUzMDAwMTQ4OTJGMENERjM4RkVCQjdDRDFDMUY2NkI2MkRCNjIyNQotOjEwRTU0MDAwOTVFNEQ5RUEzNjgxMUU3MUJFMDQzRDExRjQwODdENkM1NAotOjEwRTU1MDAwQ0Y0OThERUFBQjkyOUVCNTA5RDE3RUNBNzhCOTRGOTI2OAotOjEwRTU2MDAwNjc1MEQ0N0E4NkJGNjJEMEYzNTBFQUFDNTZGMjYzQzZFNQotOjEwRTU3MDAwM0I1NkIxREY5MjMyMjkzQjZBRkRBMjkzRDFGODJFMDRCQgotOjEwRTU4MDAwOUY5N0UyNjNDRjg3QzA3MUMwQzRCMzVBOTQ3RjMyMjk4QQotOjEwRTU5MDAwQkM4M0Y5NjNEMjg3RDFDRkE3OUM4RkVFOTdBNkM5RkMyNQotOjEwRTVBMDAwNTYyQ0REQUU4NTRGMThGQkNCNjlFOTdGM0YzRTVEREUyMwotOjEwRTVCMDAwNjg3Q0E2Q0Q4OUM2Njc4NjJGMUE5RjAzOTY0NUUzNkJCNAotOjEwRTVDMDAwQTAzRjFBMUY4MzU3OEQ4OTFBQkY2MTdENjE1NDdGRDg4MAotOjEwRTVEMDAwMEZBNzQ0Q0RDRjQyODMxOUQ5MUZCRTc1NUVENEZDOTFERAotOjEwRTVFMDAwM0IxNjQ1RjU0NzNGNzU2N0Q0RkNEQ0UwOEFBOEYxQkNEMwotOjEwRTVGMDAwREQ2QkZFMkVGQTE3ODQzNjQ0Q0QyNzM0OUJCRTg3RkU5MgotOjEwRTYwMDAwMzczNkZFNEJENDdFRkY1M0Y0QUY4REExRkY1NkQyRTdEMQotOjEwRTYxMDAwMTM4ODVFQTgzNzBCRkJFQzE5QjkyNUE0M0Y1RDRENkYzRAotOjEwRTYyMDAwN0M0Mzc5OUI0MEIxQ0VGOUFBQzAzQ0YwRDRFMEQ4MkYwRQotOjEwRTYzMDAwNTQ5RjQyN0E2RTMwQTJEQTg0N0FBM0Q2MDRBQkM4MUUwNQotOjEwRTY0MDAwM0M2QTMyNzExRUQzOTBGMzE3RDM4NDNGRjI2MjlBQzhBQQotOjEwRTY1MDAwN0IxOTc4N0IxQUVEMjJEOTQxNTVFQTQzNzNGQThFMjQ0RgotOjEwRTY2MDAwRjI1MzU0OTMwOURBQzlGRTY5MUVENjFGRTcxQzEwQkU4NwotOjEwRTY3MDAwMTlGNzU1MDcwMUU3QzU0QTkyMjcyRDk4ODhGQ0E4QkVDRgotOjEwRTY4MDAwQTk3MkZDQTkwRUYyODM4RUY2QTRFNkU0Q0U1Mzg0OUYxMQotOjEwRTY5MDAwMkIwRTlCNEU3Q0FCQTZGQTAzNjRERkYwOUNBMUU3QTE5NgotOjEwRTZBMDAwQkY5RkYzREU0NjU4NDlGMTk2RDE1RkU2NUVCRjk5RTYxQgotOjEwRTZCMDAwMkZCQjdCRTY0ODhBN0Y3QjlGREZBREFDMkM4REEwNDNEMAotOjEwRTZDMDAwRTQzOTE3QzVGMUFCMEVBNDA5RkI2N0Q4MTNDMzdFREM5MAotOjEwRTZEMDAwNjlENTZCM0FEMDNFOEM1Mzg1N0Q0MEJCNzEyMDBERjFERQotOjEwRTZFMDAwRjE4MUYyODg1OUY4NjkwMTMzOUQxRkVEMkFERjI3QjhCRgotOjEwRTZGMDAwRDAyMURGODA2RDRBOUZEREQyQkY0M0U2RkEyMDNCREFBRQotOjEwRTcwMDAwNkY3RDkzMDBBMzM4NDRGN0YwM0RFMzFEODZGRTVEOTVEMQotOjEwRTcxMDAwQ0JGOEJCRUM4ODlFN0ZGOUZFRTEwMkFGRjcyMEY2OTBDNAotOjEwRTcyMDAwMEVFNzJDRTIzQzA2RkMxN0E1NUVGRTQyRUFFNTRFRDI1RgotOjEwRTczMDAwQzcxMUY5RUI1NUJCNzYyNjkxN0Y3RTJFNDdGOEUzQzZDRAotOjEwRTc0MDAwRjNERjQ5M0FGRjJFNERFNUYzQUZERDlEQjBGRTdDMDRDQgotOjEwRTc1MDAwREUyQTQyQUVBODdFNTVFM0MwRjU5MUY5Q0RCNUM2MzlBMwotOjEwRTc2MDAwRkM4QTQ2RTc1ODI3RTVBOEEyQjUyM0Y5NEU2MDdGRkU0QwotOjEwRTc3MDAwQzMzNDVDQjc3MkQ3OTU3QjBFRDBGQkE2OUU0QzYxNjcwNQotOjEwRTc4MDAwMDNCQ0RGRDJGNzgwRTM4MkE1N0Y4MTI4QkZCNjMzQ0RGQgotOjEwRTc5MDAwQ0M3MDc1QTY4OTM4NjEwOTM2NEVFNEJCMjVFODAzQjgwQwotOjEwRTdBMDAwQTg3RDYzREEyQ0UyM0Y3QzFFNTZCMEJGQTAxNUNDQTQzNgotOjEwRTdCMDAwQkYxNkZBQjNDQzg0RjQzM0UwNzk2NzNGMUVFRENGNjkxRQotOjEwRTdDMDAwM0FFRjczMUJGOEY4N0VGQkREN0IyQTkyRDgwRjM0RDYyNAotOjEwRTdEMDAwMzNENjQxODEyMDNGRUYzRDU3QzA5QzQ5Nzk5RkU5MEFEQwotOjEwRTdFMDAwRkIxN0I4OUY4RDlFRkJFRTFFQkM5OUVDQjBCMURGQkI1MgotOjEwRTdGMDAwRTBCRkY0MEVGMkM1MjJGMEYwQkFDNkZBNDBENzM0MTFFOQotOjEwRTgwMDAwN0FGOTAzNEIyRjFERUQ0NEJGMEQ2REE2MzBFNTg1MzYxQgotOjEwRTgxMDAwOUNCM0YyQkQ0QTc3NzVDRkNCMEYyMzlDMUZBRkY5NjYyRgotOjEwRTgyMDAwQkY4MjcwN0ZCNEJDRTdCRjBFRTBGMzNCOUU1MjQxNDcwRQotOjEwRTgzMDAwQkVGMUQ5RkQ1QTdBNDRCQzc5RUVGRTJCMkM2RkU4QUZCRAotOjEwRTg0MDAwM0NGRjI0MjlBNTk3QUMxRTkyOTMwRkQ2QkMzNDJBMzJFNAotOjEwRTg1MDAwNUU0ODRFOUY5OTkwNEVGNzNCOTNEMkUyREU2RkM0QzY1RQotOjEwRTg2MDAwQTU2Qjg4M0Y1OTdFNzVGNjRCMERCRTVDMkRGOTcyQzNDMgotOjEwRTg3MDAwMEJBM0Y5Rjk4NkE0REVGMzg4RkVGMzJBRTdDMTM2MzQ0OAotOjEwRTg4MDAwNUIzOUFGRjE4RUU0ODczNTJGN0UzMzMxMzJDRjU3OEYyRQotOjEwRTg5MDAwN0NBOTVCQTk3NTcyNEJGN0E2M0FGQTA5RkI0RTVFMUU3RQotOjEwRThBMDAwQ0I3MUFCRUFDRkEyNzMxRUJFRkE2OTMyRjVGN0JERjlBMAotOjEwRThCMDAwMkQ5RjA3NkVCQjNFRjhCQjExNzk5MTc4QUU0QUVBNzk3RAotOjEwRThDMDAwOTdGNDRBQzUwMUFCNEVGOUFDOTIwM0I5MjdFRUMyN0U2QwotOjEwRThEMDAwNjUyQkVBMUYzQ0NGMjU1N0M3QjFBNzI5MUUzQkE4MDBDRgotOjEwRThFMDAwRTVCNzJBQzMwOUFDRTQyQjFCOTQyMEU1QzNENjM0RUU2QwotOjEwRThGMDAwREQzMjE4RkI2QkVBMTYxNjExQkI1NjI1MEI3RDU2NTlGNwotOjEwRTkwMDAwQUYwNDM3QjExRjNFODdFOTVDMjg2NUEzRTQ1MEVFQkYzMgotOjEwRTkxMDAwRTVFMzc4RDc3MUIxRkU4NThEQjBGNjNDQzY5RDVERjUxNwotOjEwRTkyMDAwNUY1RTIwMzhENjM1NUEzOUNGNzYyMTI5NkMxOThDRkI5OQotOjEwRTkzMDAwNUVEQUFCODQwMjdBOUZEQzc2Qjk0NDFDQjYyQUY0OTg3RQotOjEwRTk0MDAwODVGNjVERjVEQ0MyMTFFNDM2NzYxRDM4NkQyMTNEQjlFMgotOjEwRTk1MDAwQUFFMUIxNTlGMjc5OTEzMEZGNDE5NjhCQjVCQjk1OTVGQgotOjEwRTk2MDAwOTE3OUFDRDVFODBFNDJBNEZENDJGODAyMTNGQkVBNDBDRgotOjEwRTk3MDAwNEU0OUZBMkM2QjFBNUU0M0U4NDJCREI2RkY2OTg1RjUzNQotOjEwRTk4MDAwREE0MkUyOTcwRjBFRUZGOURENkY2OERGODNGRjNEOTIwOQotOjEwRTk5MDAwRjE1Rjc0N0RGODA3NUY4MEZEOEI0QUI5MEY1QzNDNjNDMwotOjEwRTlBMDAwQTFGOEIyQjJDMTdDMjFERUZENTI2M0JBRUYxRURBQ0YwQwotOjEwRTlCMDAwODg4RjYzRkRFRTJEMTYxMEY3M0ZEOTEwN0M5RUVDODJGOAotOjEwRTlDMDAwQTNDN0IyMUNFMUY5NTc5QTgwRjA2OENFMUVDQjBBRUNCRgotOjEwRTlEMDAwREI0OENFQzg1RUI4MURDMTc4NzFGNUJFNzQ4REYxODQ3OAotOjEwRTlFMDAwQjFDNEZBNzhGN0EwMjEzOTVFQTI3NzU4Mjg5RjU3RTk3OQotOjEwRTlGMDAwRUVCNDEwNUY1Nzg2M0YxN0Y3RkY4RDlGQ0NGMkM2ODlBNAotOjEwRUEwMDAwQjc1RjRFNTdBNDMzM0YyNzRBREUzNzY0OEM2MUI5MzA3NQotOjEwRUExMDAwRjdEQUMzOTA4REU1QkU2MDQ1MEZEOUE5MEQwNzkxM0I4QwotOjEwRUEyMDAwMTRBMkI3QkY4N0UwMEVFQzRGRDBFOTdDMjUwNzNFOUZDQwotOjEwRUEzMDAwRDgxMUIxQ0YxRkE1N0NGNEU2NTk1RUY5NjRBQzk5RjAwQQotOjEwRUE0MDAwQjlFRjkzQjE1QTUyREZGM0FFNENDN0FBNzg3OTk5OTdEMAotOjEwRUE1MDAwRDM4NUREREU5Q0VDQkIxODJEMDcwOTlFMzBFRTVCRDkxQgotOjEwRUE2MDAwNjRFNzdCMTQ5NDgzMkQyRDQ1OTE3MjcwQzdBQTVEQzQxMQotOjEwRUE3MDAwRTc0REFBMDcyNTAyMkExQjE3RkFBQjc5N0U5Mjg3QzhCMQotOjEwRUE4MDAwQTMzNkNFMEMxMDFGQUE0RTFGRjMyN0ZDMTVGNzlCMjhBOAotOjEwRUE5MDAwRUY4RjUwRkZDRDRERjczRjRENzJBQzM5NjA2NTY0MUU2RQotOjEwRUFBMDAwQTREMkQ0RjFBQjE2ODVFOEJBQzM2QkEyRkQwQTgxRjVGNgotOjEwRUFCMDAwOTZFQUYwNzU3MDNDNTU5NEE5NTNEQzdCNzRDMjJDMjAwNwotOjEwRUFDMDAwM0NGREJDNTlFMUJDQUYzOUQ1QkYzNThCRTg3QjVDRTU3QgotOjEwRUFEMDAwRjk5NkEzMkYwNEU4QkVCQjZCMUMxNDExN0NDNjc5N0Y4QQotOjEwRUFFMDAwM0UyRTBDMkFBRUIzQjkwMDNDQjRFREU2ODM0QkREQzQzOAotOjEwRUFGMDAwQkYzRkNGMzhDNjdFODZERDEzMDJEMjJCMzVFODNGNTBBQwotOjEwRUIwMDAwREVDNzlFMUYwQUQzM0EwOTM5QkUyMjE1Rjc1OTkzRUU4NAotOjEwRUIxMDAwNjRCRUI0NThGRDFFQ0EyNzNEMjBGQjM2Q0RCNzhBRTAzRgotOjEwRUIyMDAwQjNBNTI3OEFGODdCQzhGNUU1RjlCQTQ4RkVDRDc0NkYxRQotOjEwRUIzMDAwRTlFNzdDNEI5NzU5RjA2OUQ3MERDMDcxMjJEN0ZDNEM5RgotOjEwRUI0MDAwQTYyMTJGRTNDRDA2M0JCOEFENkE1NEQ2NDZEQUQ3NDRBQQotOjEwRUI1MDAwRjBEQkU4NzlEN0MxQTUxRTgyREY5QzJERjkzRDMzOTEwQQotOjEwRUI2MDAwRTUyMjc2RkY4Rjg4OUZBOUNFQzBCNDYyNkIxNkUxOTkyQgotOjEwRUI3MDAwRjBBNkY3OUZGN0ExRTQ3QjAzMUZBMEY5NzM0ODVFMTE4RAotOjEwRUI4MDAwNTQ2RkJDRkM5MjNGQkRGODJDRDE3NTczQUEyRkM3OTU2QQotOjEwRUI5MDAwQ0ZEN0JDQzIyOTc2MjdDNjk1M0I5Q0ZGMDFDOUI3MzFBOAotOjEwRUJBMDAwQkY5NUYwODlFRjZGRDFGQzM2QzJFRjUxODk1RkIzQzVENQotOjEwRUJCMDAwQTczQjU5RkU3RDNBRURERjdCQkU0MUYxQ0ZGNzhEM0M5RgotOjEwRUJDMDAwREY5NjZDRkZGNzlFRUZDRkYyN0NFNjU0RTQzNzVBMkZDNgotOjEwRUJEMDAwMTk3ODlFMzkzOTE4MjBGRUFCNEQ4MkEyNERGOEY4QTg1RAotOjEwRUJFMDAwNkI5NjlCRTQ2RUNCOTE2Rjg2OTJCQ0Q3MjY3OURDNDAwNgotOjEwRUJGMDAwNzlCMUU2OUI5NjkxREM2RjE5NzQyN0YzRkYxNzJGRTQyOAotOjEwRUMwMDAwMTZBQTExRkIyNEE3MTc3RjQ1RTczQjJGQ0ZCMUM1RTIxQQotOjEwRUMxMDAwQ0ZBMTczN0MyQ0NGNjk5QzZCNDlCQUVGMkZFOTExRjkxNgotOjEwRUMyMDAwMjYxODkyN0U1REZDQjNEN0I4RDc5NDcxOUU0N0RBNjFGRgotOjEwRUMzMDAwOENGMzM4OEZEODBEODk1QzdGQjY1N0ZBRTExQUY4OThCMwotOjEwRUM0MDAwN0ZFQ0UwRDFEOUJGRjJDMjA5QUEyQkE5NjkzMUMxMzY0NAotOjEwRUM1MDAwM0EzRTI1QjUyMkVFRkQ5MjU1OTMxMTBDN0E2RDE4QjIwRAotOjEwRUM2MDAwRDMzNTM0OEQzQjlGRDgzOUFGMTZFMTNFMDgwMTU1RjhCNgotOjEwRUM3MDAwNjlEMUY5MENGMDJBNUUyNTMyOEZGMURBOUFFQkNCNjM3OQotOjEwRUM4MDAwM0NFM0FGMjE3OThEQ0Q2MzRDMEU5Qjk2NUI1MkFFMjM1NgotOjEwRUM5MDAwOUZGMURBQkNCOEY5OENEMTE5RDE3MTUxNDE4NkNFQzAzRgotOjEwRUNBMDAwODU3MjA0N0Y4NkMyODk0MTkxMzc4M0YxOTRCRkVBMjYzOQotOjEwRUNCMDAwNUI4NUUzOUZFMzk5NTlERTk1QUUxQzlCMEJFREUwMTM1QQotOjEwRUNDMDAwNEY2Q0RCM0EwREU1NzA4NEMwMDNGNTZCODhDOUY1RjEzNAotOjEwRUNEMDAwRUMwN0Y1RTY0NzVFMUJDMzdFMzhFQTNEOTVGMzAyNEUyRQotOjEwRUNFMDAwMDk0QjBDMUQ4QkQwN0YxMzQxQTUyNzJBQkYxMjNFRjY3RQotOjEwRUNGMDAwNkQzMkYxREI5RTU0RkQyREEyNEY0RjlCQ0E3NTI4MDk0MgotOjEwRUQwMDAwNUE4N0M1MTU0N0VFMEU5MDdGODA3NkUwOUYzMzg0M0U4QwotOjEwRUQxMDAwQjczNThBN0I0QjlCRUU2NTNEOTlFMDc0OEU1MzIzRTRCNwotOjEwRUQyMDAwMjQyRjQzRDhBNThBNjMxRjBDQjVBMDJDNUQzMjlENENCRgotOjEwRUQzMDAwQ0VDN0Y1RDdFREFGNEZBNjM0REVEQTczNkY0RkE0RDI0RQotOjEwRUQ0MDAwOUYzQjM1RkY4MjBDM0NGRjE3Q0FBRTUxMzZGMjVCQjdEMgotOjEwRUQ1MDAwMDZDNzEyN0U0MkUxNkNBRUNGMkNEMDIwQTAxNUY2ODdGQwotOjEwRUQ2MDAwQTdFQTI5M0MxNEJBMDQ5NTRGQTU3MTVCRDAzNDdFMjVERgotOjEwRUQ3MDAwRjE1RjU1NTg5Qzk3RjYzMEEzOEFDQzZENTRCOERGRDUxNwotOjEwRUQ4MDAwNTg5MzRBRUI1NUZEQjY3OTEwRTlBRjk3MzI4NDlGRjM1QgotOjEwRUQ5MDAwRTJENTNDRjFCRTA2MUFDREJGM0ZDMzI1OTkyQTY4QTIzMQotOjEwRURBMDAwN0NFMzRCMzI0RkQ5NzU1NUU1NzlDNkZFMDU4RDMzNTU1OQotOjEwRURCMDAwMjdGMjQxN0U3OEM3MTFDRThCMzY1OTc1QTI2RkMyNzM4OAotOjEwRURDMDAwMjBGMEQxOTRDMDdFNjhENUUxRDk0MDc2QUZEQjA1MUUzNgotOjEwRUREMDAwMDVDN0Y3MjRGNjdDNDRGQ0QwRDM2Q0Q1RTkzRTM3QzE5NwotOjEwRURFMDAwQjkwMzUyNzFGRDNEQjIxRTJDMTcxOUI2REVEMUY3REMwNgotOjEwRURGMDAwRDgyRkExRTk5Nzk0NDMyNEJFRTA3QkU1MDQ2RDA3NEMyRQotOjEwRUUwMDAwNzc0NEUyM0I0OUQ4NTlDOTU3N0IxMkMzMjZCQTY3RTkxMAotOjEwRUUxMDAwNDFERkVGNTk4NkFCMEY0RUUwN0QwRDM4NzNEOTBFRUMxNAotOjEwRUUyMDAwQjFGNDVDRjg3MTNBQzNFNTI0M0VDODA1MDEyNzM0OEQ3RQotOjEwRUUzMDAwRDY0OUFGMjYzOEJEN0M4RTA0QTdFRTA5MjhGREUxQUE4RAotOjEwRUU0MDAwMUE4QjhFMjBDQUNGQTNBNENDQTZGNEM5Nzc1NTYyNUZEMwotOjEwRUU1MDAwREY4NkIyQjAyNzFCQTRGQ0I3NkUyQjlEMTZEOTQ3ODU2MQotOjEwRUU2MDAwMzNBOUVGRkRGRjc4RTJGOEI2REEyMTlDRkYwQkE4NDg0MgotOjEwRUU3MDAwN0YzQkI2NDlBOTc0NEUyMTU3MjgxMkRFOEM0MjgxMDc4OAotOjEwRUU4MDAwQUEwQkI0REJDNDc4RUY3Q0U0NzM0NzJBREI3RjlFRTdGMAotOjEwRUU5MDAwQjEzQUVERjNCMjU4NUVGODdFRDFGMDBGMUY1MkMyMTdBRgotOjEwRUVBMDAwNkU0NkQyNzYzRUU2NEJDOUM3NzM3NTlBOEUzQzVDODczOAotOjEwRUVCMDAwRjNGRUI4M0MzNDJBOENGRDE2QUJGRjc5RTJDRjU3M0YwNgotOjEwRUVDMDAwNUNCMUJEODBGNEVGMUVCM0E3OUNGNDRGNDdFMDcxRjYzMAotOjEwRUVEMDAwQ0I1RjM0RUJEQjIyRTQwRTg2RjQ2NDcyREQ2MUNDM0U2MgotOjEwRUVFMDAwNTVFNzM2M0Q0RUZFNzZGNzQxNDVBN0ZCRjQ2RTczQ0ZFRQotOjEwRUVGMDAwNTA4MkJCQjJFOTMzMEJENTYzNTYxREZDODRGREVCQjJFNwotOjEwRUYwMDAwNENGRjVFREE2RjUyNjMzNUQ3Q0Y0RDg2MUQ1QzNGODc2RAotOjEwRUYxMDAwN0E5MUVCMjA0MzZFQTE0RjJFOUYxREY1NkM3NTA0MUQ1OQotOjEwRUYyMDAwREU5M0YyMDYzREZFNjE2NEJGOUFBNEJDMUVBNjM4MUNBNwotOjEwRUYzMDAwREJGRDJENzcwQ0E3RjVGN0NCRkM4MEYxNUUzNTFDMTlCNgotOjEwRUY0MDAwNEM3OERGMDRBRjcxNkIzQ0VGMEU2QTVDQkY5Q0Y3QUU5MAotOjEwRUY1MDAwRUQ1RTZGQzRGQ0QzNTJGRTRGQ0JGRDU2NjdGQURGMjA0NwotOjEwRUY2MDAwNzhEN0I2N0M2QUExRDJDMkFBRjNBMUExMTRGNzg2MzRERAotOjEwRUY3MDAwM0RDNTE5NDc4RkY0Q0E2RjhDM0M1NTY5M0QxNjlBNUZBMQotOjEwRUY4MDAwNzUxMTU4QUYyMEJENkI1MzkwN0UyRkJEREIzODY2MzlBRAotOjEwRUY5MDAwM0VERjhGMzQ0OTIxM0I4QkYxMkFEOUUzRkQ2NkRGNjBFOAotOjEwRUZBMDAwOUE1RkZEQ0VENzYzNDk4RjFEMjQyMEYwN0Y1RjM3QUY3NgotOjEwRUZCMDAwMUQ0Njc4NDNGRTJGNEUyNDM5REIwQkFDRDcwQzM5Q0RFMAotOjEwRUZDMDAwMjczOUM1RjdGMzg5RkY4QkE4OUZDQjdBNzk4RkE1N0Q2OQotOjEwRUZEMDAwMUVDQkU1N0UxMzkwNUMyMkZGQjMzQzIwRkYzQkM5REZENAotOjEwRUZFMDAwQ0I3N0EyM0NGMEZCQTM1OUNFRjdCNDlCQkNFQzM3QTM4NAotOjEwRUZGMDAwNUUxRkM5RkRFMkM1RDRERkQzNUVFQTY0MzlBNzNBODQ1NwotOjEwRjAwMDAwNDI5MkQ3RjAxMTVFMjcwNDQwRDdGMjQ1MEFGODIyRkQ1QwotOjEwRjAxMDAwRkZCQzhDNjQ3MTJGMjRGMTM5Mzk0M0Q4ODM1MDhFOUUwNAotOjEwRjAyMDAwRTJDMTczRDg1NTM1NEEzRTIyRUNBNUU4NEI3QjVBOUE4QgotOjEwRjAzMDAwRjk5NzZEQkY5ODQ2NTIyNkVEODQ1M0RBNDlGRjc4RDY4QQotOjEwRjA0MDAwRkJGRjI4NkRENTg2RDdBNzJDQThDMzczNkUzOEE1RjIxMQotOjEwRjA1MDAwRjg2MTE5Rjc4NTI1OUYxQzkxRjkxQUIyMUI3QTlBQThCNQotOjEwRjA2MDAwMUZBNkU3MTNCMDRGRjVFNTEzQkRFQjRCQzgxQzREOUEzNwotOjEwRjA3MDAwQjNFMzI4QjU1MzdDQTExMjcyREJBNjJENkIzRjZBMTY1MQotOjEwRjA4MDAwNjI5RTQ3RkNENzcwNjQ2RTFFRDVFMzc1OUZCMzQyMDI0MwotOjEwRjA5MDAwODJEOEYwNkRDRjQ3MkYyMjFFMUUzRThDRjg4RjYzQTdCQgotOjEwRjBBMDAwRjAzOENDN0ZFODdGMEQwNjc3RkZGMTZFNDVFQTkxNDA5RQotOjEwRjBCMDAwRDI3Q0UyQzdBRTA2QjVBRjhGODA1NDIyNjM1M0RGRkQyQQotOjEwRjBDMDAwQTQ3RDdCMDA2REU3N0Y2NzdBMDc2NzIyM0VDRjBDRjA1NwotOjEwRjBEMDAwNzNEQjdERkFEQjRDMTJDQkZENjc0NTVDREY2MEYxRTY0QwotOjEwRjBFMDAwMTFGRjM0NjQ2M0E4MUI4NzRGQUQ5OTIyRUY1MzY0ODVFOQotOjEwRjBGMDAwQjhGNzlDMzc2NzBBMzkxODE1ODBFRDBBQzdFQkFBMzNCMQotOjEwRjEwMDAwODg3NEJGRDRBMDdBMkRFODJGNUQ4NEMwOTJBOUE0NkYyMwotOjEwRjExMDAwNjQ1RUY3MDE5MDNGNUVGQzQ1RkEzQzI4QkIwRjkwREYzMAotOjEwRjEyMDAwODI3NkVCQzE1RkM0RDYxMTc4RDk2RjMxRjI1ODAwRUIwQgotOjEwRjEzMDAwNERDNDVGMkI5QjE0RjgwRkM0QzVBQTY3QTJFN0FGOTMxOQotOjEwRjE0MDAwNzVGMkFCMUI3NzFEMUI4Qzc0NURGMzVDQ0MzOEY5MkQwRAotOjEwRjE1MDAwN0NGRjExRTI3ODc4NUQ1RDc0M0RDM0NEOTlEMjdGMTk1MwotOjEwRjE2MDAwMEVDM0M5N0Y0MUJFNjIzRDYxRDZBMEQ1OEE3Q0FDNjAyQQotOjEwRjE3MDAwMTQ0MzIyRjY5MjQ5RTAwQkY1MkJDQjY3QkU2MTZGOEFGMAotOjEwRjE4MDAwODU1RUVBQjkwNDVDQTc5NEJCM0I3NDk0RUE4MUE2RDQ3QgotOjEwRjE5MDAwNjU3OTY4OEYyOTlBMTg5RkQyOTgyNUVFQTdCNEEwNEE1RQotOjEwRjFBMDAwNzUwQzkzQkNGRTU5RUM3NzA3QkM2N0E5REU2NDk1RDQ1NwotOjEwRjFCMDAwOTdFMEM0NUZDQUZCQzhEM0FGOTJGRURERUE2MDZDOURFNgotOjEwRjFDMDAwQThDMDUzOTU5QzM3MTk4MjM1QjRFRkNBRERBMkRFNjkxOQotOjEwRjFEMDAwRURFRUU4Rjk1NTEyNEZFQjlFM0E3RDhDRDI4NTE1QTFFNAotOjEwRjFFMDAwOTg3MTg5QTdBQUM2OTgzQTE2QjEzOERDOUYyOUVGQUQ2NQotOjEwRjFGMDAwNjQ3REZCRjVENjVCRkNEMTJDRkM4REI3RTUzQUM2RjhGNwotOjEwRjIwMDAwRTY0QzkxRUZBREM0NjMxMDdERDcwNUQ1MjBGMUQxMkEyRQotOjEwRjIxMDAwMjU5MDJDRkM1RTcwMkNDN0YzREQ2N0IwODFBQ0NGQkRCMAotOjEwRjIyMDAwNUZFMkU5M0VDOTNGN0M3RTdDQkZFMjE5RjE3REM1RkQwRQotOjEwRjIzMDAwM0Y4Qjg2N0YwREY4MkM4M0YxRjk4MzBEM0ZCMDUwREVCNAotOjEwRjI0MDAwMzE5NkRGNTZENTk5RDlGRjVEMjNGMTEzQ0I1RjZCN0FFOQotOjEwRjI1MDAwRjk2Nzg3ODVFQzVCMkM3RjU1RkE5NTZCQzAyRkZDRjYyMAotOjEwRjI2MDAwRkY1QkY4MEQzQUFGOTFDQkFDMzU4NzM5M0ZCNUY2MDk2NgotOjEwRjI3MDAwQzU0M0Y5QUI2QjlEQUJGNzNDRjI3QzdGRUZCOTlFMzU5NAotOjEwRjI4MDAwRTgzRDA2QzYzMEJERTdBNDVEMTdCRDYzRkRFREJEOTY0NAotOjEwRjI5MDAwREVCQzI2RTcwNTJGQjc2NjczM0VEREUwQUJEODc1NjZBQQotOjEwRjJBMDAwNDlCRjdERjY1M0MyN0ZCREQ0NTg2MjI3RkZBM0ZCQTQ5QwotOjEwRjJCMDAwQzlBM0U4OUNBRjRDMkVDMEYzOEY2RjU2ODFGQzkxRUUzMgotOjEwRjJDMDAwQTZFMTNCMDMwODdGRTFBOUEyQzU5NDVGMUY3RjBBRUQ3OQotOjEwRjJEMDAwMTNERDA3QjcxNkZENTcwMkRGMDc3QkQyNDhFRTY3QjY4RQotOjEwRjJFMDAwOEQ0OEZCQkQ4M0Q3NjFGQkRFN0RCMjcwNjczOUU5RTlFQwotOjEwRjJGMDAwOTNBNTQ1QjRBRTgyRTM1NDlGNUUyOEVENTRGNUM5NDIxMAotOjEwRjMwMDAwN0I0Nzg0QkRGQTREQTZDOENGNkY3MUZGRkU1MThBMUJBMwotOjEwRjMxMDAwNjZFRjM1N0IyODNGMzJEQkVDREY5NDgwRjAxNUJFQTAzMgotOjEwRjMyMDAwNzhBQTcxQjc2M0VENDc5RUE0NzU1MUJFMjhDRDhBRjNDNAotOjEwRjMzMDAwRkVFOTA4OEQ1N0VENTExOEZFRUVBNkIyQkMzRDY0M0ZDNAotOjEwRjM0MDAwODNBQTg3RUM2Mjc3RDM3REY5MEY5MjFGRDRGQzQwRkUyRAotOjEwRjM1MDAwN0QxMUZCMUQ0QjE1RkE2NkY2MEQ2NkI2RDc5RDgzRUM0NQotOjEwRjM2MDAwQkYyRUE3QkNBODc3MTdFQjhEQ0U0M0ZCMkNGQzdEQzMyQgotOjEwRjM3MDAwMUUwNURDNzhDRTYzRUVBMzJGMTMxRTNBMEY5Q0I2NTAwOQotOjEwRjM4MDAwMTA1MEQyNzBEQUQyMTE0NzdGMUJFRDI1MENGM0MyOUNDRQotOjEwRjM5MDAwQUZERDYxRTFGQUNERkQ3RkIwRDA3OTJCOUZGQjg0RjMyNwotOjEwRjNBMDAwNkY2QjI4N0UyMDNGRUYxOTk1QkY3NzNBREFGQ0FBODU2QwotOjEwRjNCMDAwRjhCNEIyNEU4MTAxNTk5MUUzNjYxRTI3RkQ0QUZEQ0Y5NAotOjEwRjNDMDAwRUE4NDlFMzZGODdGODVFNDc3ODNGRjBENzk1ODIxRjUyRQotOjEwRjNEMDAwREE3RDVCRTNGM0JCQTFGRjFFMDRFRjk2NDFCOERFMDNDOQotOjEwRjNFMDAwNzVDQkI5MEVFOTgxMUREMUYzNTc1MkZDN0EyM0NEMTdBNQotOjEwRjNGMDAwRkNCRUYyQTlFOEYxRDVCRDdDMUU2MEZEMUZBQjQ3QkY4NgotOjEwRjQwMDAwMzNGNDdGMkVFNDEyOUY1RjBFQUYxOEE2QTEzQzdEN0RFMgotOjEwRjQxMDAwN0FDRDMwODg5M0FGM0MyOUZEMDZDMzZFNUYwRTlCRDgzMgotOjEwRjQyMDAwRUVDNUNFRUI2QUJDNjIyMTdCNUJENUZBMjdGNjczNjcyQgotOjEwRjQzMDAwMzU3REM5RjQyODZGNkFFMTdBRDk1QkMwQkY4RUYwNzk1NwotOjEwRjQ0MDAwNEI5M0RENDlGRTc2Nzk4N0QwMDNGMzlBQUNDMUEwNDI5NQotOjEwRjQ1MDAwRTNBMTVBQTI3M0Y3NjFGMUJENDlFMDkwQzJGRTE2NDhEQwotOjEwRjQ2MDAwQkRCODUyRTI3NUE1QzRFMzRBOENFMzA2NTM3RDhDOEM4QgotOjEwRjQ3MDAwRTMyQjY1QkNCRTNBNjdENzMxMkEyOUE5OTRFM0VCREFCRQotOjEwRjQ4MDAwOEUyNjEzMUVFNzgxRDA1QkYzNDI0MjZGMTlGNDMxRUNGNAotOjEwRjQ5MDAwNTBBQ0JFNDAwQjc3MEZEMTc3NkQ5Mzk1RUJENkU3NEIxMQotOjEwRjRBMDAwQkQzNUJGMEVGNTk2RDI1RjdGNzQwRkI0OEJGQ0YxN0UzNQotOjEwRjRCMDAwMDE3N0FDRERBRDZDODg5RUVGMUEyMEZDRDhDQkQyN0ZGMwotOjEwRjRDMDAwMkUxQzEwNEQ5N0YyMUVCMDUzN0U3RjlFQUU3QTgyRkNBQQotOjEwRjREMDAwNTZCQjQ2RkJCNzhFNDU3RUMzRjU1QkY1RTEyOUYxRUFFNQotOjEwRjRFMDAwQjU4Q0Y2NEQxOTE3MThGRDA1OTQ2N0MzRjkyMUU3MEU4MQotOjEwRjRGMDAwNDc2NERDRkY5RjAzODQ3RkIzNjZCMjFBMjBCQTQ2QzQxOAotOjEwRjUwMDAwNDkwQjBBQjNFMkM2NDk3MzA5RjQzNzg2RENGN0IzNzFENQotOjEwRjUxMDAwOTE3MTkyNzdENzI4RTJCNzdGNzVFRjJDQTdCQUE2QUE4OAotOjEwRjUyMDAwM0FBMTJGQkEyNkUxQkEyOUU0RjcwM0ZCRDE1NTc1RDZFMwotOjEwRjUzMDAwMjBDNTMzNTVDODJGRkM3RDFBRjEwOUM5NjM5MzUyNDY4MwotOjEwRjU0MDAwN0M4MjcxQzZFREI0RkU0MkJBRUFDNEYzMkY2QzQ0RkI3MAotOjEwRjU1MDAwOEVDQjJGMkNGRDkyRjlBQjZEODQzODM3RTI2RDQwQkMxOQotOjEwRjU2MDAwQjhDMzg4MzcyQUFGMEFCRkQ2Nzg1RUE5NzU3MERDNTE1OAotOjEwRjU3MDAwRDkyNEVBQjUxQjhFN0MzMzM0MEJFMUVENkVGRUYzRDA1QgotOjEwRjU4MDAwRTU1NDRGM0U0MEQ4RTc4NkUyRDBBNzU0NTdGNEY1MUUyNQotOjEwRjU5MDAwNUI1Q0ZGQjU1N0ZGMkJCNTJDMEY5NUU2OEU0Q0Y2NkJEOQotOjEwRjVBMDAwMEVBMjFGNzkxM0VBRDFCN0JGRTAzOEE1RTE0OEMyQkQ2QQotOjEwRjVCMDAwOTRDRkVCNUFFMTFGRTZGQzFFM0E1NUMzMjZGNjgzMzc3QgotOjEwRjVDMDAwNDEyREI3RTQxRjQ1RkE4RDJCOURBMjRFRTk0MTY5M0ZCRAotOjEwRjVEMDAwQTlGRjA4RjJGNTgzMzg3NzQ2NjE3RkY5MzdGNDQ5ODU0QQotOjEwRjVFMDAwRTRFQkQ1MTBEODMyNTVFOUFGMDcyQUE0RENBQ0NEREY2NwotOjEwRjVGMDAwQjU4NUFFRjY2M0ZEQTcwQTI5NEYxODMxQjBCRDhDRjU2RAotOjEwRjYwMDAwOUZGRTMzODY1RkFCREY0RTY0RkZCOEJCNEQ3NTUyQUVENQotOjEwRjYxMDAwMTlGMUZCQUI0MUU0Mjc2MjVDOTAxRDI3NUZGQjg1RTQ5OQotOjEwRjYyMDAwQ0Y0RTc5N0Y1QzNENDk2NUZDOTkyNjhCRDZGMEI3MTBBQgotOjEwRjYzMDAwOEZDQzM3RERBNzFENDFCMjZGNzk4NzVGQ0QyNjNFNTg0RAotOjEwRjY0MDAwQkIzQkZBREU4OUU4RThFN0JBQjFBMEM4NDc4NUVDN0NBNQotOjEwRjY1MDAwMTc2NThDQkY3NEY4RDUzMUM0NkZENTZGN0YzQjRBRDAyNgotOjEwRjY2MDAwRTc5QjUxOTZGNDZCQzM2N0I0OEEyMkUyNjY5MzIyRTI2OQotOjEwRjY3MDAwRTZGRDVBNDczMkM1NkI1NTA3NTU1RjY0M0RCRjQxRUYwNAotOjEwRjY4MDAwOTdBNTNDODEyNkYyMDNGNTAzNzRFNkFCRUEyNkMxMUY3OQotOjEwRjY5MDAwQTY2NkQxRTJGRTRCNDQ3RUM4Q0NGQkY3MUIyRjQ2QkVDQwotOjEwRjZBMDAwRjkxRTdCMDYwNDE3RjI0MDk1Qjk4N0Y5QUZFQUI0ODlEMQotOjEwRjZCMDAwRTFBOTNBN0QzOTczNDRDNDdCMDE1QTc3MDBFOUJGRUE3NgotOjEwRjZDMDAwNzVDMEZBQzQwRUE0NkZFN0QzRjc5MUQ4OUZGRjdFMDJFRQotOjEwRjZEMDAwRkI2MUM3QjJCNzk3OEJGQjJGMTU0ODdGM0RGQ0Y2OUFBRAotOjEwRjZFMDAwRDE5MUY2NjBFMjAwNzEyRjBFODQwNzM3NzkzRkJGMTA4OQotOjEwRjZGMDAwRkI0QjNDNkM4MjQ1MzJCRjIwRjg3OUFGOEM5QjMwMkU5RgotOjEwRjcwMDAwN0I3MzQwOUNCOEVDN0FGREU5RUE2NjJCNTBGRUI5RUFCRgotOjEwRjcxMDAwMDMyQkQ3MTk3REREQkM5MkUzN0VCOEVBMUY0REZBMDZCNAotOjEwRjcyMDAwRkNGRTFCQTk3REY4RjBDQUQxRjRGQ0VCQzNBQjZGRTQ3RgotOjEwRjczMDAwN0NBOUIyMjkyQUNGMTEyMEY4RENFNDVGN0RGNUVFNURDQgotOjEwRjc0MDAwRTQ3RkI2NjlFQzlGMTRCNjlEN0Q5N0VFNjlGNzM1OTgxNgotOjEwRjc1MDAwRjlEQkQxOEFGRDEzNzYwNjkyQzhBRjJBOUM0RkRGMTFFMAotOjEwRjc2MDAwRUQ2QkQ1OThGRkQwREYzMkZDMkIzQkZCNTdBNzhBRDgzNwotOjEwRjc3MDAwQkZDMjc1N0M0MTZFOEI0RTk0RDNCQUE3OEE4QjY4OUFCMAotOjEwRjc4MDAwODJFM0E0RDdDNjkzN0ZFNUU4RjNCNzBDNzgzRTkzRjhGRAotOjEwRjc5MDAwRUM2RTQ5RTBCQzhCMDJEOTgyQ0Y2MDQ0MTREQ0VCMUFEQQotOjEwRjdBMDAwNUU2N0ZGNjQ1REEzMUFGNUZEODhGMURFNUYwNjg4N0I2NgotOjEwRjdCMDAwODdFRjBDM0UwQjI5NUVFNkEzQkRBMjVERDdCODJGOTM2MQotOjEwRjdDMDAwQ0VCMUQ2MUM2MjNFQTlBRTMzOEJGMTNEQTIwNUJBMDc3RAotOjEwRjdEMDAwOUFDMDFGNDEwNzA4M0YyN0U4MTFEMjY1OUUyNTM4ODQ0QgotOjEwRjdFMDAwRkNGQUJEQkRGNzhBQjIyRTI0MjhFQUY1NkE1QTg3RjNERgotOjEwRjdGMDAwNzc0Qzk3NUJGN0E1QzdCMzQzMjdFOTlFMDcxREJFRTM4OAotOjEwRjgwMDAwNTkyMjFFOEExREZGQUQ1QkU0NDE4RTlGMTNGQUYxRjg2OQotOjEwRjgxMDAwNENGRkU4Nzg3QTMyMDBDNTIyNUZBMDQ4RkEzNTg4RUZCRAotOjEwRjgyMDAwRUQ2M0U3MzVEMzdBNzhGRURENDMwMkM3ODk4RjNCRjc3NgotOjEwRjgzMDAwMjZGMEZENjNBNzRCRTQ3NTRCRUFEQjM0RkExRTY2NkREOAotOjEwRjg0MDAwODMzMjgxRUNEMkRBOUNGN0Y4N0IxOUVDMTc5MTlFNUMzRAotOjEwRjg1MDAwMUIzRUM4RjdBRjE1NzU3QjY3NzlFM0MwQjFERDJERUNCMgotOjEwRjg2MDAwQzMzQ0Y5OUQ3MkVDRjg3QzM5N0UwNjNDMTkzMjlFREI3NAotOjEwRjg3MDAwNEVGNzNFNjdDQUNENEVGMUREOUJGOEVFRjU1NkE5RDc5RgotOjEwRjg4MDAwMTdERjYyNjYzRkVBMENFODY2NzE3RjIyRUUzOTE2NDhBMAotOjEwRjg5MDAwQkQ3REFCRDRGN0IxREY2MzFCRkFGRDc2QjlDRUMyNjc4RAotOjEwRjhBMDAwNjAzM0RENzNDNDdFOUY3REJCRjQwRjE3ODE5N0Q3RUY2NAotOjEwRjhCMDAwRjc1REJERjQxMzYzRkZGRTQyODk1QkVBRjU1MTMwOEFDMAotOjEwRjhDMDAwRjQ3QTA4RUQwREQ3NUJFNDI2QjBERDlFNUYzMDMyQUVGMgotOjEwRjhEMDAwREY0MURGQTlFQkYyM0I3NTZBMERGQTU3RTdCRUM3RjZDOQotOjEwRjhFMDAwRjA3OENCQjk5N0Y5RkI4NjczMDk5MDFERTc5RUFEQ0ZGMQotOjEwRjhGMDAwMUUxQTdBRTQzNjQxNzc3OUVGNTFFMTE0MzAxQUY0QkZEOQotOjEwRjkwMDAwODQxMTVBNjQ3RUNEQTBGRjgzOTIwRUZGQzc3NTQ1MzlERQotOjEwRjkxMDAwQTA0NUU2NjMwRUE5RkUwN0REMTk1NDQ3RERDOUZFMzg5MAotOjEwRjkyMDAwOUU4MEVEMjE5RTZCQTgzQ0Q3NTA2Qjg0OURCQjM0NzBBQwotOjEwRjkzMDAwNzk1QzNFRUUzQjVGNkE0MEQ4OTM3NDZFNUI3MkFERUNDRgotOjEwRjk0MDAwMzc1Njg0MTRGRUVFQjAyMjBDQTI3RjlCQzJGOUNBNTEzNgotOjEwRjk1MDAwMEQyRDVDQkZCMUE0NTRGMTc4ODU1QTNDNEJGMDE5N0M1NQotOjEwRjk2MDAwQjRDMDI2RkMwMzgzNUY3QUYxMjVGOTg4QzZDOTVGQjg2NQotOjEwRjk3MDAwNTVGQTBCQjFGQzM0MUFEQTY3RDFGQTRCQkQ4QTg3RUEyMwotOjEwRjk4MDAwMzZBRkM5NDdDQkM2QkQ0RUUxRUVCNUY4MDhGOUQyNEM0QgotOjEwRjk5MDAwN0EzMTk2OUY1RTczRkIxRjI1RkM3NUI3NUY1RTUyODBDMAotOjEwRjlBMDAwRUIxRkNGRkQ2QzI4RjE0RkU1MzVFNEU4NDU0OUJGREQ5RAotOjEwRjlCMDAwOEVDMDcxQUU2M0E5OTc3NTA0RjVCOThEMUQ4NDk3NTZGNQotOjEwRjlDMDAwNjBCRkIyRDNENUJFNjU4M0YwQjdCOThFQTAyMjlDQzAwQwotOjEwRjlEMDAwRjVBNTE1NEQ3NkZFNkVBREEyQTEzQTcxMENFOUUzMjZCMAotOjEwRjlFMDAwRDU2M0M3N0U3OUMzRTk1MkNBMjM5NDE3ODkzQTk3MkEwNwotOjEwRjlGMDAwQkJBOEJCQUJCMjhCQkFCQkI5RTlGRUU3REMxM0Y4RUYyRgotOjEwRkEwMDAwMDM0NEQ3MTE1ODNBN0VCNUUxN0JGODNFNTZERjM1OTM3MwotOjEwRkExMDAwMEYzN0UxN0Y0RTBGMzU0QkZDNkM2OEJCOTIzOTg2QzRDMwotOjEwRkEyMDAwMzRERDdGODhFMEVFN0VGRDQ1MEI3RDhBNTEzNUU2RDVERAotOjEwRkEzMDAwNTk1NDgyRDZFQ0Q2NzlERTJENzUyREI1OTQ1NjM2RTAyNAotOjEwRkE0MDAwQjdCQjlENDJFRjlBODM0M0Q4NkZDREJGQkU3QTlCRUE4NgotOjEwRkE1MDAwODM2RjhDMjVGQkQ1RDVEMjM2RDYxMkMxRUY5RDFCNTBCNgotOjEwRkE2MDAwNkZDN0ExNjMzNTk4QTQxQzZCREMyQUNBMjJFOTQ3MDkzOQotOjEwRkE3MDAwQjlBRTZBM0U5QTQ5Rjk4QjRFOTJFNzdDNkFERjQ5MUUxRAotOjEwRkE4MDAwODE2REM1REUzM0M5MjNDOTlGRDkyRjVBNjNCRDRCNEQ0NAotOjEwRkE5MDAwMkFDRjAzQUQ2M0Q0RUQ0OTkxRjA2RDY2RjgyRTg1QzQ4RAotOjEwRkFBMDAwM0EwMDFEQTMxNjE3NDQ4RUQ3RkNCRkQ2MDcxNzg1M0UxNAotOjEwRkFCMDAwRTg4OEQyMDcwNjlFNDIxNkUwRUY4ODAzODdBRDVDQTc3MAotOjEwRkFDMDAwNDBGNzNGQUUwODNBNkEwMzA1RkQ2RUMyNjA4QUU0NzZFRAotOjEwRkFEMDAwMzJERDdCMEYyNzk3NEY4M0JCQTlBRjQxNTg0QkE1RkI2NgotOjEwRkFFMDAwRTlCMDJBRUFGQjg2QjBCRTlGMjhGN0JGNDkwQkI3NTBBMgotOjEwRkFGMDAwM0RGMDY0Nzk1RjNBMDVEQTc5REUwQ0U4RTFENjBCNEUyOQotOjEwRkIwMDAwRkUwRUJBMTgzQ0RDNEVCMjg1RTc1MzVBMkIzRjE0RTI4NgotOjEwRkIxMDAwRUY3QkMyOTk5QUVCODI0RDdFNkYxRDg3REU3RDc4RDM5NQotOjEwRkIyMDAwRTA4MjgxMEY5NUVFRDU0NDNENTNFQzc5NkUxODI4RkNBOAotOjEwRkIzMDAwQkM5QkJDNDIwRjkxNEI0MUY1QzA5MzIwQzRGN0Y5RDM1NQotOjEwRkI0MDAwQTE0M0RFRUJDNzNGQzc1NDhDMEJFOTFFNkYzQUJBMzFCNQotOjEwRkI1MDAwODk4QzhGMjBDRjlGNDZFNzUxRTM5REE3NjMzRTkzMTk4MQotOjEwRkI2MDAwNEE5RDA0OUYxMkNFMzQ3RDY3QkZGRTczNzQ1MzM1MjhCRgotOjEwRkI3MDAwRTVCREVGRUJFOUZBNzE1MURGM0RBOEE3RTk4REY3QTlFMwotOjEwRkI4MDAwN0U1OUYxN0FCOUJFRDk0M0RGOEQ1M0ZDMTNENjNBN0I0NwotOjEwRkI5MDAwRjU1OTM2QzA5ODgxMkI3MjA2NEVFOEZCNkUwNEZDQzAwNgotOjEwRkJBMDAwNzUyNEIxREY4RDQ0N0MyNzAyMTcyM0ZFMkU5MjUxRTc4NgotOjEwRkJCMDAwQkIzQkI4NDhBNzNBOTE2NUU5MzZGRTdCM0I4NUI2QTFDOQotOjEwRkJDMDAwRTMyOUFGNzkyOENEOUYzMzMwODNFQTdERUI0NkYyNjI5QgotOjEwRkJEMDAwNUE3MDAyRkJCOTkyQkZFQ0UwOUQ0NDc4NTBCQ0M2Rjc2NgotOjEwRkJFMDAwMkJDMDdDRDNGQkY3MEIzMjgxQkYyN0IyNUJDNTc3M0VCRQotOjEwRkJGMDAwREI5MTFGNkRBOTJDMDUzQUQ1NUZDMzIzMjUzQUY5RDNCNAotOjEwRkMwMDAwNUI1QzM2MEY3RDQ3NkMyNUI4RUQ3RDcwRDdEODQ0MUQwMQotOjEwRkMxMDAwNDg4RDRERDQ3OTE4RjU3MkIxNzhBREIxMTk3OTRFOEYwMAotOjEwRkMyMDAwOERGREYxOThFRjkwN0U2MkYzREY0Mjc4N0EyOEE5OThGMwotOjEwRkMzMDAwRkYwRTUzREUyQkQzREM1QzBGMjVCRjdGQUE0OTMwRjBDQgotOjEwRkM0MDAwNTA2Q0UzRTc3REY1OTRFQzY3RDY1MjNEMzdDMjU5OTM4QgotOjEwRkM1MDAwMDE1Q0ZGNzgzNDY5NTQwQUQ1NjVENUI0ODk3QUVFOUE4NwotOjEwRkM2MDAwOEMwMEVCNzdCMzVGNjE3RDVGRDM1QUQyNEFGNkUyQjI4NAotOjEwRkM3MDAwQzNDMjc1REQzNTJFNTEwNzFGQzg4MEQwRjM3QTM0M0RERAotOjEwRkM4MDAwQTYxOUY0QTBGQjRCNTk4RjY0RDA2NTVDM0E5NEQwN0JFNQotOjEwRkM5MDAwRTNDMkRFOTE4NDkzNDJEQkNCMzdEMEZEQzJCODcwNzRFRgotOjEwRkNBMDAwN0QxOUQyNjkzNUQxQTlGNzNCMUVDREM5RjUxRTA2N0Q1OAotOjEwRkNCMDAwOTA3MTk4RDk5RDkyRUUwNkJEOUNDNkRGMjNGMDZBNTFFMwotOjEwRkNDMDAwN0Y4RkMwQTBFM0Y2NDQ0MTJGMzM1NUUwMENFNzc3NzVGMgotOjEwRkNEMDAwNUEzNzk2NEVGRjFCRTExNEMxQkFCMDRCMDAwMDAwMDAyQQotOjEwRkNFMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA2MgotOjEwRkNGMDAwMDBGRkNCOTM2NTYwRjg1MThGQzBGOUQyMEMwQ0RFQkNDRAotOjEwRkQwMDAwQTg2MkI0QzQwQzVDMEMwQzQxNDA1QzBFQzQxQTQwN0I2RAotOjEwRkQxMDAwNkYwMUU5REI0MDFDQ0VDREMwMTAwMUM0RkI4MUY4MUY5MAotOjEwRkQyMDAwMTBGRjA3NjIwRDIwRDYwNEUyNUY0MDc5NDVBODFCNUJGNwotOjEwRkQzMDAwOTgxODE4REE4MEI4MDM4OEJCODA1ODg3OTE4MTQxOTc1QQotOjEwRkQ0MDAwOTE3OEZCOTM4NDE5MThERTg5MjNGODdBMTIwQzBDQ0Q3NAotOjEwRkQ1MDAwNTJGNEYzRkY2MEMzMzE1NkY0QjVFRjI5RDAzRTRFMTc4RAotOjEwRkQ2MDAwMDQzRkM3MTk5ODI0NUM1MEQ1NzBCQkUwMzc4MzA3NEQxQQotOjEwRkQ3MDAwOUUxNzhEQ0Y4NzQ3N0Y5RTIxMkFCRjVDMEI5NTNGNERGNQotOjEwRkQ4MDAwODc4MUUxMjM5MjlBMEEyREZDNkU0MUM3OEE0NjBDMENBQQotOjEwRkQ5MDAwNEE0NkM0QUJERjYwOENDQTBGMzA4MUQwMDBGOUFEQjFFOAotOjEwRkRBMDAwMDlBODAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwRkRCMDAwMUY4QjA4MDAwMDAwMDAwMDAwRkZFNTdEMDk3QzU0RDU4MgotOjEwRkRDMDAwRjVGMDdERjM5Njk5NDk2NjI2OTM5MDBEMDg3MTAyOEFBNQotOjEwRkREMDAwQTg4MDEzMDg2OTQwQjRDMzIyQTIyMjhFNUJDNTBEMjZGOQotOjEwRkRFMDAwMDJEOTM3MTBGREYwQUZGRDMyMTAzNjJERDZEMDgyNDY0NQotOjEwRkRGMDAwOEI3NEMwQTBDMTgyMDQwRDE4MjRFMDAwMkVGODJGRDUwQQotOjEwRkUwMDAwRDhCRjdCNUIwQzRBQzMxNjkyODAxQjdFQjVFNTdGQ0VDNAotOjEwRkUxMDAwQjlGNzI1RUY0RDI2ODA2REJGNUZGQkZEQkY2OUYxRTZBOQotOjEwRkUyMDAwQkM3QkRGNURDRTc2Q0YzREY3RENGQjE0REIyODk2Rjg5QwotOjEwRkUzMDAwNjNDNkNFRTAwRkQyQUIyQzhDQjE1MURERTk2Q0RCQTBGOAotOjEwRkU0MDAwQTE4N0ZBNzRFN0ZGNTk2NUQzRUE4NzQyMUVBQkQwNkVFQgotOjEwRkU1MDAwMUVENkZEOUNCMTg1NTQ3RTQwOEM2QjM4QkIxQ0QzRjQwMAotOjEwRkU2MDAwMTAxQjBFOEY2REM5MTY5NkNDRDg3RDZFNDZCRjAxMDk0QQotOjEwRkU3MDAwQkU3NDI5OTFCMUNFMTU1NkY3QkEwQzc4QUU3QTVDMDhFQgotOjEwRkU4MDAwREZGN0M4MjA3NzUwQzJGNzNDQzk1MjE2RTQzRkEyQkE0OAotOjEwRkU5MDAwRDcwMUNDQkUzRjIzQjM2Q0M2NjZEQUUwNkYwRkZDQzM1QwotOjEwRkVBMDAwN0FBMEJFN0NBQzZDMTA2M0VBNjk5OTA1QTA3RkVBNzcwMgotOjEwRkVCMDAwMTJBNTAzMzQzNkMzRUYwMDc4RjkyRDZDRENEMEVFRkVDQQotOjEwRkVDMDAwQjkxM0ZERUM3MzgwQjdFOEY5ODk3RTVCQzA5MDdGMDlCOAotOjEwRkVEMDAwOTNBOEZGRUNGQjRBQUE1RjZGNkZGMUYyNUI2QzNFMDdFMQotOjEwRkVFMDAwMzYxNjk0OERDRjNCOTY3RkU5QzJFNzhCOUI2RUExN0E0NQotOjEwRkVGMDAwMTg1MzJDRDhDRjcyQjdDODRGRkM1QzYzOTZFRUZBQkI5MAotOjEwRkYwMDAwRjExNEEyNzY3NEQ4RDMwNEVERkU4ODMxRTlCNUJGQjZGQQotOjEwRkYxMDAwMzJDMDQzRDU1NkQ1NjMwNUJDNENEOEFBODY3RjBDNzAzOQotOjEwRkYyMDAwRTk1QTI5ODRCMDY1OTc5RDMxQzA0QkZCNkEwRTg3OURDNQotOjEwRkYzMDAwOUEwRkNCOUZBODA1MThBQTI4QjczNkZGRkMwQUM0REI4NgotOjEwRkY0MDAwNTY5OUFEQTM2NkZDODRGNzU2MUJDNzNCNkJFNDcwOUVDNQotOjEwRkY1MDAwOUQ4M0E1NkI3NzRGQzdGNzBCMUFBRENDMEVGNTk1NkU0OQotOjEwRkY2MDAwQ0Y5RjdBMDVDMEY5RkI1NDg2NDU0QUQ3MkZEMEZBMDFCNgotOjEwRkY3MDAwNUMxODkyRUExMUVFMThDRkE4RkRFMDM2MzlCNDFFQ0ExQgotOjEwRkY4MDAwNzdCODlBOTM2RjgzRjExRkFCQjQzMUNGQzVEMDZGNjc0OQotOjEwRkY5MDAwNzNGMkFEODA4N0EyRDA5NjQ5Rjg1RUQxNDZDOThCMkMwQQotOjEwRkZBMDAwMzQ2MUVCRkEzN0ZCQzI3QkE1MUIyNEFGMTVGMDUyNUMyMgotOjEwRkZCMDAwMTdDQjNDNDM3ODFGQ0VDMEJGRDYwNjM5RkM2M0M4OUYyMQotOjEwRkZDMDAwMEJFMzY0MTk0OEQ3RUE0OTRDQzZGNjU3NjgxRTY3MzdGMQotOjEwRkZEMDAwOUU4RTU1MEU2MTFFNkIzNzVDQkEwMURBODFGN0NBNUVFMAotOjEwRkZFMDAwOTRCQzM4QzQzMjBCMEIyMDVGQjY2RkI3NEY3QkQ2ODEwMQotOjEwRkZGMDAwRTM1QkEwMEQ3NkUyQjg5NjZBNTgyRTNGOTRCQkNERUUzNwotOjAyMDAwMDAyMjAwMERDCi06MTAwMDAwMDBDMUZFQURENTI2NDE3RUQxRUFCNTVBOUU4MUZFQzU3NUE5Ci06MTAwMDEwMDA5NzMxOEZDREQwQUY5QTQxMjk0NkZFODg0QzhGMDE5QkY2Ci06MTAwMDIwMDAxOEZCNTNDNDk4QUYxRUY5NDQwOTY5MzcxOUU0QTI5RjFECi06MTAwMDMwMDAxNDRGRjQyRUFFOTM0REY1MDMyNjE5NEI4MkZGN0UwMDJDCi06MTAwMDQwMDA3RjAyQkU4MjNCOUQ4NDU3OUQ2RTczMDUxRkU5NzQzQjAyCi06MTAwMDUwMDAyNUU0ODcyOTlERDlDNkZBRjVGNEU3NDgwN0U4NEY3NUU2Ci06MTAwMDYwMDBBNTlCRDI1RjU0QTY1MkJBQjJEMjQzRjQ3OTAyRjEwN0VCCi06MTAwMDcwMDBFOTcyRDE2RkQ3NTgzNjRFODE3NjVEM0VFNjQ2MzE0QkY4Ci06MTAwMDgwMDA5OEUyMUJBNzAyOUNFMEU3NzBGMkREMDFDOTczOTZGMUNDCi06MTAwMDkwMDBFQkU5MTM2QTIwMTc2NTcyMTU5QkU0NTNGQTAyQUMwNTZECi06MTAwMEEwMDBFNjMwMkZCNEFGRENFODlCMzg5QUIxRDc1OUUwNzExQzI5Ci06MTAwMEIwMDBGRjIyMjk1MDgwNzQ2NUFDM0VENTBGNzQ1OTIyODExRUYxCi06MTAwMEMwMDAwMTdDMkRDNTQxMDIxRTk2RjQwNTdFMDYzQTNENzE0RjE2Ci06MTAwMEQwMDBGNkIzQjIyNEM2OUE4ODcwREU3MzhGNjY1MDNEMzU1NEVECi06MTAwMEUwMDA4RjBBRjUwQzNBNzczREM5RDM3MzRDRjUyNDRGMkZEMEM2Ci06MTAwMEYwMDBFQjU5NEJGNUQ4Q0ZBRjlFMjdBNjhGMzFGNzY3N0E5MTkyCi06MTAwMTAwMDA1RUNGMEI1ODZFOTFGM0ZDQzY5NTNDNjNBQ0I5M0YzM0EwCi06MTAwMTEwMDA0QUE4OUU5NEJCQkQyQzAwRTU2NTlEN0Y1OEIzNEY4NkQxCi06MTAwMTIwMDA3Q0M3QzZGODExOEYzMjIzMUY4RERGODZGNTM5NDFBQUFGCi06MTAwMTMwMDA4QzdDMTQ5NzEzNjM5MkE3Nzg1RjgyMDlFRTMzQjk5RjgyCi06MTAwMTQwMDBBOTdDOTI3RkEwMjkzRjY1REFBNTExN0NFOTcwQjc1RTkyCi06MTAwMTUwMDAyNjYwRTg1NDM4NUVBM0ZFNkFGRDM0RDIzQkUzRkFEOTQ4Ci06MTAwMTYwMDAwODdFQTA5RjgzRjRDRTAzNjMwMjE3QkJBMURGRDg1NzlDCi06MTAwMTcwMDAwNkY0N0Y0MDBCNUNFRThFQzIzNzMwMkU4OUE1NjJFQTEyCi06MTAwMTgwMDBCMTYwMUE5OUJGNTRFNTc4MUJERkZGRkJDMTA3RTFGREExCi06MTAwMTkwMDA3MjRCRTdFMDc4ODBGRjRCMUFGNzIxOEVGQjhGQTg0QzVCCi06MTAwMUEwMDA4MTZFMzEzMkFCQzA3MjMxNTY0NkZBNkY2OTQ2RjZCMzkyCi06MTAwMUIwMDA0MTAzNUU5NzBEMDA3RTkxQkFFQjVEQTYwNjUyOTExRjNBCi06MTAwMUMwMDA1QjgyMTU0MUU0Q0YyNTMwNDFCMDdFOEMxRDY0MTVFMTgyCi06MTAwMUQwMDBFMDg1RjBGRTgwQkM1NEM0QkY1NTAzRkQ2MTZDNUY4M0I1Ci06MTAwMUUwMDBGNjg3NTJGQkFERDg3RTVCMkZFRDVCMDdFNjk4REFCNzVBCi06MTAwMUYwMDBBNTE3OThEQUI3NjlEMDNFQzg0NzY3NzBCRTY4MUZGMDg4Ci06MTAwMjAwMDAzNzg2QjE5MzZDM0VCNTZGNEQyRkEwRjY5NzZBQUNDMEEwCi06MTAwMjEwMDBENDdFNEM1N0ZCREY2MEJCREY2M0ZCNDk1MUM2M0Y3MEE4Ci06MTAwMjIwMDA4Qzc5RkNFOTQ1RTZGMTZCN0NGQzZDNDE1MEI0MUY0M0QyCi06MTAwMjMwMDBFMzk3QTQyMDFGN0Y3QTExMUZCRjk1RDdEQkQ1QkVBQkY0Ci06MTAwMjQwMDAwQkZGOUEwNEVEM0FBNDVFQzYzRjY4QUM3OUZDMTc5NEE0Ci06MTAwMjUwMDA5OEM3NkZFNUVEQkIxNzJDMTNFRDNCQThGRDc4NjkxOTI2Ci06MTAwMjYwMDAxRkZGMDUyNUQ0QkU2NjBENzg5MThGQjRGRTMxMTUyMTkwCi06MTAwMjcwMDA5QzRGRDM0MDgwNTI0ODA3RkEyODFEOTJDMDE4RTg5MzNCCi06MTAwMjgwMDBERkIyODE4NDg3MDc2MjM4REY3RDEzMDNGQ0U2RThENjlFCi06MTAwMjkwMDBBNzJDMDQxMjA4RjM3MDk5RTBFOUUyOERFMzM0M0UzRkE1Ci06MTAwMkEwMDAwNzY5NUU5RjJEQkEzQUFCNTFBNkY5OENBREI0ODYyRTg0Ci06MTAwMkIwMDA4MkZFQjYzN0NBNDE4NDY3QURCQzMyMjREMzdDMEE3NjRECi06MTAwMkMwMDAwMkJFQTdCMDMwM0VGRkYzQUE2MUVCOENFMzhBNEM2NzE1Ci06MTAwMkQwMDA1N0FCQUQyRDA2QjlFQUQyRUZFM0Q5OTAwQUU4NUYwNTM2Ci06MTAwMkUwMDAzMkMxQTg2RUI4MTVGNDM0MDMzREZDMzlFODYzNEMwRkY1Ci06MTAwMkYwMDBBQkRDMkUzOTA0N0E5QzVENkM5NDlCMDVEQzJFMDlCMjM0Ci06MTAwMzAwMDBGNzg3NDBGRjdGMjJGQURGQUE3MDdDQjdDRTkzNDI4ODNFCi06MTAwMzEwMDBGRjZGNTZDQ0QxNTA5RkNEQUU4RTA1QTQ3N0Y3QTM1QzZFCi06MTAwMzIwMDBEMEE5NzNCQjM1NDRGNjE0NEMwNzg4OUZEQjQ5MTQxOUQ4Ci06MTAwMzMwMDBGQkQzQUUxQkRFOTQ1QzMwM0ZENkY0MzFCRDc3MzcwQjc4Ci06MTAwMzQwMDAyRDRFODVGMjMzOTdFNzBFNzBDM0Y4RUY5QTY2MUQyMUE0Ci06MTAwMzUwMDBFM0ZDQzQ3Q0ZEMkQyNEM3QUNCRjI1ODdCMTY5MEQyQjAwCi06MTAwMzYwMDBENEZFMDBEQzNFNERGREJDQzVGMEZFMUQwMTMzN0M1N0M0Ci06MTAwMzcwMDA4MTE5NkU1NzQzQUEwNUVEOTk0Mjg5QUQ4NTdBRUZBOTk3Ci06MTAwMzgwMDAzMEU3RUJFRDRDOTYxMjM4NUQ0NTdCM0YwMTFDRjQ4NTYwCi06MTAwMzkwMDA0N0Y3NjAzQTAyMUZCQjg5QUVEM0RERkM1REJEM0ZFNTg4Ci06MTAwM0EwMDAwRkE5MkM0Q0YzNzE0QjEyMjNGQTI3NTFCOTgwOUI4RjY0Ci06MTAwM0IwMDAzQkIyQkZEMzU1OUJDRjBGRkQ5OUZFQTA0Q0Y4OENFQzAwCi06MTAwM0MwMDA3RkNCQUU1ODlGMDVFQ0Q5OTY5QTJGNTU2NEMxQzhGMUUyCi06MTAwM0QwMDA0NEY2N0ZDNkZDQzhGMUI4MzU5QzFGNzI4MzkxQ0YzOUIzCi06MTAwM0UwMDA5RjQ0RjI1Mzc5RTNCODVGMUUzMkYwNTM2OUZEQjVCRjA1Ci06MTAwM0YwMDAzQzY0NzhBRkI4RUUyNjEzNUMxOEJBQzM1NDNFQkYyNkVGCi06MTAwNDAwMDBENzk0M0ZCQkJBRDA5NDNGNzNEOTFDMTM5QzFCN0NEMEFDCi06MTAwNDEwMDA1NDdFQzZGQzA1QTZGQzdCMkExRTMxRTVERjU1QjBDMjIyCi06MTAwNDIwMDAwNERGMTE3OENBNTRGRUY2Njk2QjRERjk5NjVEOTdEQ0NFCi06MTAwNDMwMDA4ODcyNTRGNTgxQ0M3MERFRjhEQUQxRkE3M0I0MzdCRjI0Ci06MTAwNDQwMDA3NjI4NUVBNEM3MTFCMDU3NTAwRThFODFCRDgyNjk3QjlECi06MTAwNDUwMDBFMzQ4QjJBQjQxMEZFNjMxMzBBMTU2NEJGQjgzQ0JDNjJDCi06MTAwNDYwMDBBMjVFNjZBNDNGNDNEMkVGODNDMTM0QzY5RTk3M0M4NDBDCi06MTAwNDcwMDAzRkI5NDY2MzYxNjA2MTg5MjU3NEYxNzFBNzZDQzg2RkVCCi06MTAwNDgwMDAzOTQ3N0UwRDA4RkFDODlFRjk3MjRCRjRFN0U1RUI3MjI2Ci06MTAwNDkwMDAyRjQwQkREMzlCM0U4MDVGN0Y5Q0U3M0E4NDNEMTA5OUZGCi06MTAwNEEwMDA1RjIyMzFCRkYxQjlCRTdFQkE1Q0UyN0FCRTQ0QUM1MzgyCi06MTAwNEIwMDA0QTVFRUEzQjlFQjkxMDBFMEZBRTM4NUI3QkY1ODA1NDY2Ci06MTAwNEMwMDBENDkzNjhGRDI3MjEzRjgwMTQxOEU4NTE1QzM3QzgyNDc1Ci06MTAwNEQwMDBERjZEQkI2NUVBNTcxOUVBMDREMEFCOTlDQ0JGNTc0MjMwCi06MTAwNEUwMDAzRDEzREU5QjdFQ0IzMEVDODdFRjc1RDRGQkFDMzE4OUJFCi06MTAwNEYwMDBFNkY1QjZDQUM5QkYzQ0E0MjI3REZDOTQxRUE5OUM0NjYxCi06MTAwNTAwMDA2OTZCNjU4MEQyNDM5NTA1OTQ3RTVFNTk0MTY5NEJFNUUwCi06MTAwNTEwMDA3QzRBMEY1NDA2MjlGRDYzRTUzMjRBM0ZBREFDQTZGNDkwCi06MTAwNTIwMDBFM0NBMUE0QTNGQUMwQzUxREE1RUU5QTM1NDk3ODcyRTBFCi06MTAwNTMwMDBGREVCMTdGNkIwNThCN0MwMDM2RTBGOEJCMTJDODJCMjJCCi06MTAwNTQwMDBDRDI0RTdERTU0OTRGMzUzOEU2RjA2QTNCRDdGRUE2Mzk4Ci06MTAwNTUwMDA2MEEyOENERUYxMTVDOTZGQkREM0QxNDdGNjRBNUUwOEEzCi06MTAwNTYwMDA5OEE3NEZDRjdDN0IwQ0E3OTNEREMyMjYzM0QwNDc4RjUzCi06MTAwNTcwMDA1Q0Y0OUNGN0RFQTEwNDJCQzgzMkMwQTlERTlCOUM1MTIxCi06MTAwNTgwMDBFQTg1QjkwRkU5NzUyRTNBMzE1RkU3NzA1QzY3QjczRUNGCi06MTAwNTkwMDBGRDk3NkNBQ0Y3NzI2OTIwOUY4N0Y3Q0EzNDBGQjNGMEYwCi06MTAwNUEwMDBCMzVFQTRENzBGQzU5QkY0REE5RkQyNUJBMERDODkyRTgzCi06MTAwNUIwMDBGQzM1QTczMzQ4RTc0ODZFQUFGRjU0ODM5NTI5ODhDN0JFCi06MTAwNUMwMDBBNkQ4MTAyRThENEZFRDdCRDY4NUYyMzgzNzU1QUUzRTJFCi06MTAwNUQwMDAzNEIyNzc3Qzk1RDY2NzU0M0IwQ0UzMjk2RjM0QzNBN0JDCi06MTAwNUUwMDBBQUE1QzlEQzdGRTA4OUJCNzUxOEYyOTVCQkZBRDA0NTk2Ci06MTAwNUYwMDA0OEZGNTQ0QUY1N0FFNkE2NkFENENFQjFCQTQxNzE3Qzc2Ci06MTAwNjAwMDBGRTBFRjE3OTcwNjMzQ0YxMkJBQzNCQTlGQzNGQkIzRjg0Ci06MTAwNjEwMDBCREQ1QTNGNzg3QjEwNkY2ODUwREY1MDFFNDBEM0FGN0QwCi06MTAwNjIwMDBGQUE4MDdERDk1QUYzNDNGRDJBQjQ5RkQwNkVEODUxODNBCi06MTAwNjMwMDBGODc3NjYyMEQ2QUIxMEFDRDc1QjVFMkYwN0FEOTdFMzlCCi06MTAwNjQwMDBGMzhEQTZGNkUwM0Q4RkJFQTZDN0Y3N0FFNzVCODVCNUNBCi06MTAwNjUwMDBFQUUzMDQ3RDc1QTVGMEU3MTREN0Q5QUJDREYzNEFCQzI2Ci06MTAwNjYwMDAwOTJFNkZFQzVCNkQ5QTY3RjAwRjkwN0Y1NjIxMjlDOEI5Ci06MTAwNjcwMDAzRjI1ODI5QjNBMTRDNzMyMDlGQTk3NkFGMTUwQkRFNUNCCi06MTAwNjgwMDAxMjJGNTc2QTZCRDEwMjFFNjJDNzY2QjQzM0VFQ0REMTBBCi06MTAwNjkwMDBGOUNGNzNGQjFGNDBERjFGRkRBRENBMUVDNTdDRTFENzNDCi06MTAwNkEwMDA1MUY1NkNCMDZGMkRFOEU3MTFEMEJEMERDNTUzNTBFRjdCCi06MTAwNkIwMDAxRERENzYzREQ5MjdCMzk4REY4NThCQTQwMjU2OUQ4RDJECi06MTAwNkMwMDA3NkNFMDk2Njk5OENGQzdGODJGRERFMzVEMkIwREVDODFECi06MTAwNkQwMDBCNzY4RDQ5Rjk5Q0JDQ0YzMkNEODY3MjYzOEJGQzYwQzBCCi06MTAwNkUwMDBFN0IxOUI5MzkxREZGMzU2QUEzMEI3QTA1QzlBRjM2RjAyCi06MTAwNkYwMDBCN0I4NDlCRUYyNTlDNTEyNUFFRjA4M0ZEOEJENkVBNjI5Ci06MTAwNzAwMDBGNDA3QjkyRjdERTU5OUVDRENBMUU4ODdFMEZBNUJGNzA3Ci06MTAwNzEwMDAwRjE0MjY3MDNCQTUyODMxQTRGOTIwRkY4Qjg2OTEzRjRBCi06MTAwNzIwMDBCOTgyRTFGQkExMjVBOEE3ODI0RUU2NURDRjdBRDJFRjgwCi06MTAwNzMwMDA4N0Y2M0ZCMkJGRkE3Q0QyQzM0RjIxRkEyMUQ3NDlCRTE4Ci06MTAwNzQwMDA1MDk0NzVEQUMzMTY0OUQ4NUI0MTRBOTc4QjcxRUI3NkEyCi06MTAwNzUwMDA2QjREMDQ1QzFCMDFENzQ3QzA3RjM3QkYyNTMyMTNCRkU5Ci06MTAwNzYwMDBBNTVBMDIzNTk2MjRDRTVGNjgyRjQ4NEFBNzE2Rjg0NzQ3Ci06MTAwNzcwMDBFQTRGRUQ1MTdGRUQzRkI1RkUzNEE4M0ZEQjU0N0ZGRERFCi06MTAwNzgwMDAzRkI1RkUwQjdCRjRCRjI5NUFGREE1QUY2Q0RBMTYwNDBBCi06MTAwNzkwMDA3RDUzQjQ3OTk1OEJDMTNDNzQ1NEE5NEVGNjAyREQ0QjYwCi06MTAwN0EwMDBENjJGNzYyMTFGMUM1MTgyMkVFNEU3QTMyMTc5NzIzNEMzCi06MTAwN0IwMDA3RUY4RDIyMkZDQTJDQ0U3OTA3MDVEODU3RjQyRkRDNzE3Ci06MTAwN0MwMDA1RUY4RDk1NEI0RTdCRTU5QUZCQTY5QkQ1NDY3MEQ1QjQyCi06MTAwN0QwMDA0MTRFQ0IxQTBBQTdBMERGMTdFMDgzMUM1RTdBNTI0NjZGCi06MTAwN0UwMDBCOEQxQ0M5RjQ1Q0ZBRjRBNDZGRjFFNzA4QTU4NEY4NDgwCi06MTAwN0YwMDBDOTVFMkFBQkZERjMyNDlDODdDQTU5MjdDOTU5RTQ3QkZCCi06MTAwODAwMDBEOEZFRTkwNEQyOEZCOTVBNUNDRjdDRTgyN0Q5RjlFNTQ0Ci06MTAwODEwMDAwMjJGRTUwRDNGM0IyOUJCMzBCREY2MzBFQTEzQjA0QzRCCi06MTAwODIwMDBDODBFOEY3Q0FGNDBEODQxODcyQ0NFQzQ1NjU4NDJCMUY5Ci06MTAwODMwMDAxRkIxMUZBMURFRDRGMUMyNDJEQzBFQUFEQUYwRTRGMDRGCi06MTAwODQwMDA4M0QwQUZCNkRBREZCQTI0MDNCRTc0NzkzQjU1M0ZGM0U5Ci06MTAwODUwMDBEN0FGN0E3QUQ3Q0JFRDYyQkREN0ZENUU4OERFRjMzNEIxCi06MTAwODYwMDAwQUZCQUQ4OUE3MjU2QUQ4ODVGNjcxQzk1QUQ1MUI4NEJDCi06MTAwODcwMDBDNzI1OUI5RTdERUU2OTVDQUY3RTYyRjU1RTA0RjUxNzMxCi06MTAwODgwMDA2RjdBRTNDMzMxMDAxNzZGNTExM0E3RjA2MTM4QTRFNDA2Ci06MTAwODkwMDA2RUZBOTRDM0JGRjkyM0JBRTk1MUY0RjIxQjlBNjcxOEIwCi06MTAwOEEwMDA3RkZFNzA0MjM3NUQ4QUI3RUNENkQ4QjA5RUY4OTg1MDdDCi06MTAwOEIwMDBCRjVCNkI3MTQ0QTE0RkZEQzE0OTY4Njc1NTZERjg1NjI4Ci06MTAwOEMwMDBDMzc1RTVEMTVEMTI0QkM5ODg4MkNGQjU2RjkwQkQ4MEVECi06MTAwOEQwMDA3ODIyN0EwQTdBNzVEMTJGQTI3QzM5RDAwNUY1N0EyNDRDCi06MTAwOEUwMDBCRDIyQ0JCRDgxRkE2NTE0QUYxN0ZEOTNDMERGMkZCRUNCCi06MTAwOEYwMDA4QTdFRUM0RkFENUVDNDQzQzE4QkY3Qjk3MDNDODc5NURGCi06MTAwOTAwMDAwQUNFRTdDRjJDNEU0NjNGN0Q4MTFBNEM3NjUzQ0E5RkM0Ci06MTAwOTEwMDAxN0FDQjk5RkY4MkZGRkJERkI5M0Y5RkFEMEQ3RDc0Mjk4Ci06MTAwOTIwMDA3MzU1QjAyRjhFNzNGNkVBREI2ODlDNzkyQzQwN0M1OEE3Ci06MTAwOTMwMDBGMDhDRUMwRjQxRkFCNUMyMjY2Rjg5MjIyN0M1MzI5Nzk5Ci06MTAwOTQwMDA5M0MzRUI4MEI4MzBDRUMzQjg0RTQxQkZFRUVGRTVEMEQ1Ci06MTAwOTUwMDA3QUYyOEZDQzYxQTgwRkVFRDdGREYxNkMyRUMxNUY4QkMwCi06MTAwOTYwMDBGRDg0NzFCMjQ1NUZFN0RBNENGQzVCQkJCNDE5RTk3NEY2Ci06MTAwOTcwMDA2QzgwMkYwNUZENkFFNTRDMDkwQTdDNDg2N0EwNUVGOThBCi06MTAwOTgwMDBCREFCNTMzODlEOTg0N0M5MTZFRjgxNUQzMDAxOUY2MzE5Ci06MTAwOTkwMDBGOTY2RDU2NzFGNkU3QThGOURDOUU4NkU3RjlFNjgxRkM2Ci06MTAwOUEwMDBGQTFEODNGM0Y5RTE2NDU2NTAxRjY1N0MzNUIyQUUwNzNBCi06MTAwOUIwMDA2MDVFMzdGMDk5NDFERUI5RkNENzNFQzJFNTVEOTdGRjM2Ci06MTAwOUMwMDBEMDREOTMzMUZGQUJGN0I5MUNFMTdCMzg1RjQyQkZDMjFBCi06MTAwOUQwMDAyOTk0QkZGQjU2ODlGNDgzOTU4NUEzQzk3OUFEMkFFNDkwCi06MTAwOUUwMDBEQzlDMUZDOTJGRDA3RjQ1OEEzM0YwMERCNjkzNDA3NDJECi06MTAwOUYwMDAyMEJGNUFERTRBNzhERkE4NTdCMTVENTdDRjdBNzUzOUU0Ci06MTAwQTAwMDBDRTE3RkEyMDRGMDY3RDcwNTlCNzNFNjBBQkI5MUVFODhECi06MTAwQTEwMDBEREVFMEFGMkY1OUIxQTdBRUU2OTk0NUY5MEQ3QTAwNzkzCi06MTAwQTIwMDBFNTU3RjVFM0Y4OEY2RkRDRkJFMTlEMjBCN0M3RUI3NTY5Ci06MTAwQTMwMDBCOTM1RUJENTQ4QjkyRDc4NjlCRDg0N0MxQTI5QjdDNzdCCi06MTAwQTQwMDAwQkMwNEE4OTI2QjdGMDNDQUFEQzE2QjRGQzRCRjRBQUNBCi06MTAwQTUwMDA4RUM3Qzc2NUIzNUVENUY1NjQ2RkY4OENENDkzOTdDQTFCCi06MTAwQTYwMDA5RUE4N0ExMjdFRUZCM0VDOUVGQ0E4RjNBMUNFN0Y0NTQwCi06MTAwQTcwMDBCRjI5QkQ4MEZDMDkzQTlGRUE3Q0Q4QzVBNzNBMUZGNjdBCi06MTAwQTgwMDBGMENGOThGMDE4OTk3RjNCRjIwNDBDQzFCRjVEMjU3RjMxCi06MTAwQTkwMDA2MjQ5MTNERjhGODNGN0RFRUM5RjQ1RjhGMkQxMzRDNzRDCi06MTAwQUEwMDBBQURGRUM5RjY4ODQ0MzExNzA3RDQ0Nzk1RjA0RUM4RjZBCi06MTAwQUIwMDAyODFGODg4MDJCNENFNTRCMUFGNzZBOENGODIwNkMyQThCCi06MTAwQUMwMDA2NzlERkYyQkY2NDU5NDc1QUMzRTBGOTUzNzlDRDQ4MkZECi06MTAwQUQwMDBDODFGNjk5RDFBRUEzRjc1MjE5OEE4RTgzRkRDMjk5MzUxCi06MTAwQUUwMDBGRkIwMDM3MEJDMDREQUU5RDg5ODExMEE4MjFFNTk2QzcxCi06MTAwQUYwMDBFN0VCQ0QwRTc3QTcyQjAxRDJDNUYxMUNFRTRDRDI5NkI5Ci06MTAwQjAwMDBBMDFFRDQ5Rjc3REFCOTFGQTRDM0RGRTk4QTM3RjgzMTcyCi06MTAwQjEwMDAwRTM2QzlBNEM3NUI0MjZDNzIzNDNGMDlDQzM0ODRERjAzCi06MTAwQjIwMDAxNkQ2NUIzRUY3OEY3NkUwQkUzM0I2ODdGQkNFNDBDRjVFCi06MTAwQjMwMDBBQjY1NDdGQTdDNUNCRjU2Q0I1RTYwMjMzNjZCQzFFRDdDCi06MTAwQjQwMDAyRTc0QTE3NzM0MERCQTcxMUEzQzlGRkRCNkNDQjc2REU3Ci06MTAwQjUwMDA4MjNFQTVBRjYxREQ3MTg0MDU5RjE4MkJFMTdFREU3MkI4Ci06MTAwQjYwMDBFMjlGOTk0RDdDMUQzMjZCNzk3NDc5MjgxMkVGRTUzOTNCCi06MTAwQjcwMDBFNjY5QTg3NzYxRkRGMEI5RDEwRkFDRDc1M0IwM0FFMjdFCi06MTAwQjgwMDA3OUQzRjU0MjZFQUE2OTNENTg1NDZCQ0UwRjg4RjVENERGCi06MTAwQjkwMDAzN0JBRkVDOTY0OTlBNDdGNzBBMTg0RUI3QUExQjdBRjdDCi06MTAwQkEwMDA5Njg3REUzODBERThEM0IxNEY2NkI4QkY3QUFBNDkyNkRBCi06MTAwQkIwMDBGQTlDREFDOEY3NTM1OTMwODlFNEFGOEM3NTkyQkVENEU5Ci06MTAwQkMwMDBGMUQ2ODZGMjc1NzFFRjdBQUM2REVCOUZCMjFGNDIzRUEzCi06MTAwQkQwMDBEQUY2ODdFMUJGODJCNDZEREIyNzgzNzcyMEZDQ0E0NzUyCi06MTAwQkUwMDBFOTdGNjAzRENCNEZEODY1MjczRjczQzcyRTI3RjE3RjQ0Ci06MTAwQkYwMDBDN0NFREZBNTNGODRGMDc2MkJGOUY3M0E3NjdEM0IxQzE0Ci06MTAwQzAwMDBGOUIxNjNBMUI1MDBGNTYwQzcwMEJFN0VBQURBRjlFREJGCi06MTAwQzEwMDBGMDE2OUE3RjE3MTExRDMzMTQ4REU4N0RBQUU5MkYwNzZFCi06MTAwQzIwMDAzMDJFRTA1NDEzOEMwQUVEOEI1REIxMjQ1RkU1QUZEQTEyCi06MTAwQzMwMDBDOTFGRDFCMUYzREJFQzgwRTM5RjM3OUUzMkIxRkZEMzA0Ci06MTAwQzQwMDBFMTY0RDM1RUMyRkVDNTczQkY3OUY5OEVEMUNGMkVDMEU5Ci06MTAwQzUwMDBGREYxODZERERBNENDODlGRjBEQTVGODdBMzdFRUQ3ODgwCi06MTAwQzYwMDA4OURCNERFRDZBQ0IxQURDREYxOEJBNDg1RUE4MDJCREZECi06MTAwQzcwMDBEQTUxQzhGQTMxQjY2RkQxQzRGMTI4NDczREYxRjI1N0M1Ci06MTAwQzgwMDBGMkIzOUMyRjNFMjYyODdDM0RGQkVGOEYwRkM5QzdGNUEyCi06MTAwQzkwMDA5RjMzNjQ5MzcwRENERjFERjgwM0VBODk1RDU2RTI0QkY1Ci06MTAwQ0EwMDA3REJDQzdFQjE3OTAzRDczQUU3MURGRkIzRjZFREM1MjJFCi06MTAwQ0IwMDBGODdDQzZCREUwREY5Q0ZGQUQ4QTg3RkExNzI5MDczREE3Ci06MTAwQ0MwMDBGOTdDRTcwMzA0NkY3MjdBQTlCRkU3QzlFRjZCRkZBNzRFCi06MTAwQ0QwMDBEMUZEMjVBMEJCRUJEQ0UzMEVGRjNGNEJGN0I3QTcwQjI1Ci06MTAwQ0UwMDBCQUJCMzEzRUEwRkNCNUJGNTJGRjdFQTg5RTZCRjkzNzYwCi06MTAwQ0YwMDBBNzdCNkZFM0Q3RURGREI3MkM5RUY3MzNBMUZDNjQ1NkJECi06MTAwRDAwMDBFRDQwQzNFMkRBRDIzRDZGNjc0MkVFNUI2OTdCRTNCMTRGCi06MTAwRDEwMDBCRkUzMjNGNjdCRjQzNDVFRTVGRUI2RjFCOEVGMDNFREY2Ci06MTAwRDIwMDBCMjc4NDlBQzE3RjkzQUFCQkZCMDJGRkFDRkNCMjMzQjFGCi06MTAwRDMwMDBBNDdGREE2MzY0NEYzMEM1QjMxMkY3MkJERjRBOUZFOTEzCi06MTAwRDQwMDBBNUQ4MEIzNkUyRTMwMEMyRUUyQjA1NkM1RTZGRkU0QUJGCi06MTAwRDUwMDA2MjNFREM0QUVEOUY3RUZEM0VCNDczRDNEMjY0QjI4MzIzCi06MTAwRDYwMDAyMTI1RkJGNzc1RDc2NEZFQkM0NDMzQUQ4N0FFRjU5OEZCCi06MTAwRDcwMDBENzQ3OTMxMkNERUJBODg5QTJCRUFCMTlFRkZGRDUwRUQyCi06MTAwRDgwMDAyOTE0MDIzQzhDMUZGMENCNDRGNEE3OEVCRjQ4NjUxMjk3Ci06MTAwRDkwMDBDMDkzNTg2MDExQUUzQjI2M0FDQ0Y1OURDMDdENkM4MzY0Ci06MTAwREEwMDBCRkYxRUZDNUUzQzQyRTNDMEU1Q0U5NDczQzBFOTBDOTkxCi06MTAwREIwMDBBRjdBNEUzQzYyQkYwOTZGOTkyMThDQzc2MThBOTdFMzc1Ci06MTAwREMwMDAzMUExRDQ0QjdFNkFCMTFFQzc2RUEyMURBMzM4OTYzNEUyCi06MTAwREQwMDBBMzNDMkJCODlFRTY3OEEwNzVCOEJFOUVFRTBEREY0QzA2Ci06MTAwREUwMDBBQ0NGMTVEMUE0OEU3RjI1NERGNkQ5Q0RGNUQxRkE1Q0M3Ci06MTAwREYwMDBBN0NCMEZBNTg3NEVDNzdGOTQyRUM5QUE5OTJFNjk4RUJGCi06MTAwRTAwMDAzOTBBQ0FFQjY0NUMzRjhDQzRGMjk5MUM0RTBCMkFCNEJECi06MTAwRTEwMDBERjI0RDYwRkQ3NzhFNjI4NDE4MDI3QTQ2NTJBNDhBRjdCCi06MTAwRTIwMDA3Q0RCRjYyMjhDMUZCNTc5MjVFQUM3QzU2RDE2OUExRkEzCi06MTAwRTMwMDA2QzU5MTJFMTdENDg4RDQyRjA3QjE2RjcyOEE0RjdENDU3Ci06MTAwRTQwMDAyQjVFMzlGRTIwNDMzRkJCNEZFMzA2QkE5RkVGOTc3Q0YyCi06MTAwRTUwMDA3RkU2Q0NEODZDRjRDN0YwMUZDNjdGREUwMEVCQjc1OTM1Ci06MTAwRTYwMDBBQjU5MzgwNkYwMzQ1QjYxQzFCODA0RjQ5MzRCRUM3M0IyCi06MTAwRTcwMDA5MzlGREMwQ0UzRUZBQUU0RUU3QUNFNTVCRTM3QkRGMkM5Ci06MTAwRTgwMDBDRjRFNUYwMTNERjZGOTQ1OEM2REM3OTQ2RjhBMjhDNjM5Ci06MTAwRTkwMDBGNUY2OEY5QTM4QkVDQUY3QjNEMDQwMUU4NzIxRkIwREY2Ci06MTAwRUEwMDBGQjhBMkZBQkRDM0ZGM0NBMUY1RjFBODlFQkRDNzExRDk1Ci06MTAwRUIwMDA0M0UzQjg3RUNERTI3MUE5NjJCRDcwOEE3OUUyQkMwRUNGCi06MTAwRUMwMDBENEFGODNFMjY4QkY3NDlGRUM4QzE2RTdCODQxQUNCRjI3Ci06MTAwRUQwMDA3RjgzRjEyODkwNzZENEIyNkExOUQ3NTdBQzkzRkNCRUMxCi06MTAwRUUwMDBDMTVBMUI1QjFGMjUxRTY2OEQ2QTExN0UyMjQxMzdGODkxCi06MTAwRUYwMDBDOUQ5Qjg3RkMzREI5RjBEQUZDNjE5RTlENjM2RTVBOEJGCi06MTAwRjAwMDAzMkJDMjcxREYwRjdCOTYxRkZFQTFGQzUyRkFFRjcxMUZDCi06MTAwRjEwMDBCRjFCRUMyRDkzRkM1MUY0NDdCREMwREZENDNEREY5MUU2Ci06MTAwRjIwMDA5RkY0RDJBNkI1MTZFNERGNEI2QjJEQTZGREQ4M0E1NTNCCi06MTAwRjMwMDBGODMxNDZCMDExRDhBRkE5N0JFQ0NFMkNBNENCM0VEOTZBCi06MTAwRjQwMDA4QkYxQTVFNTREMjdCNTQwOTQ3REM0NDg3QzYyRkRFODUyCi06MTAwRjUwMDA3RjZGNTVEREQ0RUUwRUI1N0UyNkUyNzVDNzA5MUJDMzQzCi06MTAwRjYwMDA3NUY1NzZBREJBMzg1QTNGRUZCNEYyN0VDRTY2RjVGNzM2Ci06MTAwRjcwMDAwRENGRjhGN0MzRUZCODBFNDc3ODNDQUUzRjZCOTlGMDUyCi06MTAwRjgwMDA4MzQ0RjIxRjIzM0UzRTU1Qzc0MjM4QkZFMjdBMTVGNTJGCi06MTAwRjkwMDBDMkE5OEQ4Q0U2Nzc0MEM5NjNCOEZFMDY3OUZGQjFEMTRFCi06MTAwRkEwMDBBRjczNzFFMzk2REZBMDVENTBENjI0Qjk3MTRCQTI0Q0FDCi06MTAwRkIwMDA2OUQxRDA4RjVCREUxODJGRTMzQzlDRTlEMUUzNkZERDc0Ci06MTAwRkMwMDBDMzZFMzVDODQ1QUJBQTEwQkVGNjhFRDk3MTE3QjZGQkY1Ci06MTAwRkQwMDA2NTlCQzZEMDRFRjFCRERFRTlDMjc5RkNDQkE2OTEyNDVCCi06MTAwRkUwMDAwN0JEOERFQkU1NEE1NjM0MTFFMzFDODQzRThDRTQ4NzQzCi06MTAwRkYwMDBBMTFCNjM0Q0YwMTU3MkEwMUZDQUQ3NTQ2QkNCM0M2RjdBCi06MTAxMDAwMDAxNEZBMkREMzI0QjE4Rjc4OUVGQTJERjRGRjk5N0U3QkFDCi06MTAxMDEwMDA1RkQ3NkYwMUQ5NkY5MDIzQkZDMDlCNDFCRkE1NDREMzU5Ci06MTAxMDIwMDA2RjczMjU0RjBBRTI3REVFQ0U0MTI5NDhEN0I5NkZBQkU5Ci06MTAxMDMwMDA0OUQxRjREQkE2NEFCRTJGQkE1OUM0NEQ3NzM0ODA3RTFECi06MTAxMDQwMDBCQkRDQTBERjFBNDBCRjQ1ODkxRjE5QTNFOTdFRkE3M0Y0Ci06MTAxMDUwMDBFOEI3RDBCRjQ2RkUzNkExN0U4QjMyREUxQjA0RkU3NDlECi06MTAxMDYwMDBGRDM2QkNFOTIwRTlCN0UxMEQxNjUzM0NGMDQ0NERGOERDCi06MTAxMDcwMDA5QjdBRDU2RjUyRDJBRDY4MUZFRjUzQkRCMTUxRjg2NzVGCi06MTAxMDgwMDA5M0IwQzczNzhCMzg0NjZDMDdGNTVDOTVGNkMzRjQ1Q0I0Ci06MTAxMDkwMDBERUY5RUFCOTdGMTE5RTc1M0QzNzc3MkJBM0I4RTg5RTNDCi06MTAxMEEwMDA3Q0M4RjVEQ0RDRURBMEU3MjRFNDQ3QUVFN0U2RUU2NEJGCi06MTAxMEIwMDBEQzJGMTdBMURGODZGNEQwNkY4Q0NBOTc4NUY5RkJFNThBCi06MTAxMEMwMDA4RDE5NEZERTBERjU4REYwQTk1RTFCOTQxRkQxQURFRjhDCi06MTAxMEQwMDA0NjE5RjU1RDk1RDY4QkJFREI3NzdFRkE2RUFCRDA3NzgxCi06MTAxMEUwMDBBMEM3MDZBMjdFOERFNDBGNkY5MzM5REU3Q0M3RThDM0VDCi06MTAxMEYwMDAxQjVGNDY3OUY5OUQ0Q0ZCOTJFRjU5RjhGRUQxM0JBMzVCCi06MTAxMTAwMDAwRjY3MjE3RjdEMkFGQUYzQTJDNkU5RDk1RTE5QTRGQUY2Ci06MTAxMTEwMDAyN0JDQ0VDNzU3QkE5MUZCQ0JDQjFBQjg3RDU4NTYyQkZDCi06MTAxMTIwMDA4NzNDRjBFN0E0MzFERjY5RDhGRkMyOUQxMjRCMDFGODdDCi06MTAxMTMwMDAyNjZCRjUxMzBFQjRFQjlGNTc5OTU4MUY0REM5MzRGMDI5Ci06MTAxMTQwMDBDM0FDOUM2MkYyRkI1N0Q5NURFQkYwRkNEMTJDODVEOTg2Ci06MTAxMTUwMDBEMEJGNUZFQzk4NzQxNEVERTBFMjFDQkUxRjUwMkM5RUQzCi06MTAxMTYwMDBFQjcxQjBCM0JCRjQ2NDQ0M0M0OEUzOUMzN0ZCQjM5RUUzCi06MTAxMTcwMDA3MTE2NTNBRDlDQUU1MzlGOTU0MjE4QjdEQTMzRUUyMkU5Ci06MTAxMTgwMDA0NDdBQTFCOENFRkNGQzVEMjE3RjM3QzkyRDg0MkZGNkFGCi06MTAxMTkwMDBBRTFDMzVFRTQzMkZENzg1QTc3RDAyNEY4MDE3MTM5RUQ3Ci06MTAxMUEwMDA0MjUyNTQzQzAxQTVBNzY0MjY3N0UzQTVGMDc3MkQ0QjY2Ci06MTAxMUIwMDA3MDVGQTBGMDI5ODlGNjkxMjNDN0FERTMyRDcyRkMzQTQ4Ci06MTAxMUMwMDAxRTc1M0Y3N0IxQTgyRkJGNjkyRDlENkI4QUM0OEI4RThBCi06MTAxMUQwMDBFNzQ4N0M3NEUxM0QwMjFGRUY2OTVEN0VFRDkxMThENzExCi06MTAxMUUwMDAwNDdDNDM3QTI2Rjg5RjgwMTc2OEM3M0ZFRTIyRDNGOTI0Ci06MTAxMUYwMDA5QjhGMDQ1RTQ2NTY4RjlCODBFMTBGMzc2MTFDM0FFNDVCCi06MTAxMjAwMDBFN0Q1Q0M3OUIzMkZFMDYzRDRDNzlFMTEzODlENUUzMTBBCi06MTAxMjEwMDBDNjFBQzA3RERBMERGNjRFRDI4MzNBMUYwRUIzNzIzRTY3Ci06MTAxMjIwMDBENDg0NUVEOUQxQUY2MjNDQURGMzFCMjUzN0RBMjFFNTFBCi06MTAxMjMwMDA2MTNCRTFCNTFDRjhEMTBFNDVGNjNFRjVDRDI0ODE1NzUyCi06MTAxMjQwMDAzNzlEQUY2QTE0RjMxM0QwQzE4MkVCMjY3REJFMEFGMTNECi06MTAxMjUwMDBGMzU4MjM5QjM4NURDQUVCMzg1REIyNTgyN0VEQzc5NDJECi06MTAxMjYwMDBENTQ4REUzMDhDQTdBQzcxMEVDNUExRUJGQTE5N0UwRTA1Ci06MTAxMjcwMDAyMzlEQTJGMEFGMTI4RDdGMTkzQTlCQjNCQkU3Q0Q2MkRECi06MTAxMjgwMDA1MTZFQUFCNUZBNDNEQ0U3OTkwQUYyQjE5NkQ4MTBGRTdFCi06MTAxMjkwMDA3NzE2RkUzRTU3RkM1MDI0QkQyRTEzNzhEQjg0Nzg3NUZDCi06MTAxMkEwMDAyMEZFM0FCOUZEMTVGRThFQ0U2OUU5RjlFNTRBRDA4NEYzCi06MTAxMkIwMDBENzA5NEY5RkU2RkNCNzUzRjJBMDVGQUMwQjZGQzhDRkM2Ci06MTAxMkMwMDA5MDNGNEFDNzFCRjIzM0QyQTEyOTU3NDYzODBGRjBEREIxCi06MTAxMkQwMDAyN0EzRTc3ODcxQkZENDI4Rjc4NTNCMEZGMkZBOUY5MUQ3Ci06MTAxMkUwMDBCQzJDQ0FCODdGMzA3RkZGNDBCRUVFNERERTg3NTlDNUFCCi06MTAxMkYwMDAzQTQxRjBGNzNCRjZDRUZEMjM5MUJGNzc0QURDMkZEMTgwCi06MTAxMzAwMDAxNDZGREFGN0JDQzFDQUQ3NEQxQkVDMjAwN0I4REZGNjYzCi06MTAxMzEwMDBCNkVBNURFN0U5QTkxRkFFQjI3MjM5QzBGNTg0QzdFMDRECi06MTAxMzIwMDBGN0JBMDQwNzgyRjFBNjc1MzY4QTE3QTQ3RTBDRTRGNjk0Ci06MTAxMzMwMDBBQTUxNUY2RkIyQjNBNDVCQjM3QUFGN0Y4QUE4QkYzN0ZECi06MTAxMzQwMDA3QjQ5ODc4NzYxN0JBODQ3MUJBMUJEMjFEREVENDVDRTg5Ci06MTAxMzUwMDAxN0JBRkZFMDVDRTNCQTQzRjBDRkRGM0IyRUJEOUQxRjIxCi06MTAxMzYwMDAxQTRGNTVDRTlBNjk1RjRDOEZBQjRBQjUwNDVFNTFEMTg2Ci06MTAxMzcwMDBCRTlCMkM5OUUyQjdBMEU3ODJDRUZGNzBGREI3NkFBM0FGCi06MTAxMzgwMDA3QUFGOUZBNURBQzg4RUQwQ0ZDQjVFMkQzQjU4MTBGMDM4Ci06MTAxMzkwMDBGNkE1NEYyNTc5MDEyQkUzODNCMTM4N0Y4Qzg3NzkxMDJGCi06MTAxM0EwMDA5MjJGRjc4RkZBRTg2RUNBOTc2OTlGRURDNkRGRjUyOThECi06MTAxM0IwMDBDNTdEQzgxQjc5MEMxREJCMzE1MzIyRkJFMTNEQUM2Q0Q0Ci06MTAxM0MwMDAzNERBRTEzNkU2QjM4QTI2MjEzRkU3NDdGMTIxM0NEN0ZDCi06MTAxM0QwMDA5MjU5NUIzREMxMDM3MjNEQTIyRTU0ODVBOTc3NDI2N0E1Ci06MTAxM0UwMDBFMjNCNDhBRjcxMzI0MzdBMzVGQkZBNENDMEY5RjdCRUE1Ci06MTAxM0YwMDAzRkIzNENEQzhBMDczQjgxRUExOUIxOEYyNTYxQjkzMUQzCi06MTAxNDAwMDBCRTI0NUFDRThDNkVGOEVBRkQ1QkEwN0ZBM0Y3Q0I1RUJDCi06MTAxNDEwMDAwRjk0QkI2OUFGQzM4MTcyMzY2NEI1ODUwNTBDNzgxOTJBCi06MTAxNDIwMDBDMzQyNTVFODc3MUE3REM4NzcwQkVBODMwMkIwN0JGMDk4Ci06MTAxNDMwMDA3QzQ5NDFEM0RBMkExN0MyQUIyNTdBQkYzQzE4OThFNDFECi06MTAxNDQwMDA4MkZFNkRBQTM5MzlFOTMyRDQwQjUwMEVBQjI5NUZDRDNCCi06MTAxNDUwMDBDQjk1RDc0QTVFMEM3MUNFNkI1QTQxRjE0ODc5QjUxMkUzCi06MTAxNDYwMDAxRDYwREMxNDkyOTg4REQ3MUJCMjQxQkQ5QjU2QzNGQjA3Ci06MTAxNDcwMDA1OTM4N0ZDMUZCNTg2RkVEQzlGNzZGNDFCRDAzRkRBNDFCCi06MTAxNDgwMDBGNzM3RjJGREZBM0M3OENGODM3MjUyM0I4N0VBMkI1QzQ4Ci06MTAxNDkwMDAyRDMxM0MwNzUzQjA5MUNGNEYwNUZCNTUyRkU2MzdFQzZDCi06MTAxNEEwMDA3RThBRTZERDI5RDA1RURGMEM5QzhGQzIxM0U5M0NEMTM5Ci06MTAxNEIwMDA0OEM5NERFNzM4MUZCRTgwRjQ1NjA3MEUxODVGRjBBNUU3Ci06MTAxNEMwMDBGM0Y4MDk0OUMwNjJGREEzREI3RkZENkRGQzVDNTM5RTEwCi06MTAxNEQwMDA3NzgxRDYwN0VBNzkyNzI3MjlDMzQyRkM3NDkyRjZFMTdGCi06MTAxNEUwMDAwRjAxQkUwMzU2OUMzNzc5M0NDQkRFOUMyRkI0MTZDMzRDCi06MTAxNEYwMDBGQzk4NjMxQjQ0RUZDRjZBMUM0NzcxMUVCMzk5OUZFMkFGCi06MTAxNTAwMDAzQ0E2OEVFNjc2RTdCQjU3REE0M0U4RUY3QjU3RUQ0QzE3Ci06MTAxNTEwMDBDM0U3N0JBRkI0RDJGM0Y2NEQ1QzBGQjcwRjY4MjFCRkMyCi06MTAxNTIwMDBGQkUxRDUyQUMzRjMyRjU1QUI2NUQyMTM4NzM3QUE3NEQ1Ci06MTAxNTMwMDA2RTU3N0U4NkM3MzdFNDZGRTI3NkM4REVENUJDREVDMzYxCi06MTAxNTQwMDA3NURDN0U5QkYwQ0M2RDkzNzAxRUNFNUZDRkNGRjlFQTM5Ci06MTAxNTUwMDA3QTVBNUY4N0U2QjkwQjRERjM1QkE0OUVENUY1NzBBOTY3Ci06MTAxNTYwMDBDMDQ3NDFGNTVBREE0RjhGRDRCQkE1RkE3QzE4QTE2RjVBCi06MTAxNTcwMDA0QjcxOUY5REY2RDNDMzI0NDdBNUY1OTFGMTY1OEU2RUZGCi06MTAxNTgwMDBCRjBERjI0M0Y4M0JFMkVGQjJGRDJBQzM3NThERjQ0NTdGCi06MTAxNTkwMDBEQjI0OEE2N0MzRjkxRUYyNDczNzQ5M0U4QzdCMjhGODYzCi06MTAxNUEwMDBEODFBMjI3QjNDOTQzQkUzM0Y3MDlFRjlDNENBRjBDODMyCi06MTAxNUIwMDA0ODJCRDIwM0Y0NTQ4RUI1RjM4RkJGODRFNzQ3REZCM0QzCi06MTAxNUMwMDA2MUU0MTBGMDRGMkVFMTVGOEYxM0NFNUFDRkUzN0VCMjZECi06MTAxNUQwMDBERTVCOTk4Q0U3OEREOUM0M0VBNDA3RjI2QjY0MTYzMEFDCi06MTAxNUUwMDBFODhEQTM5MkVGOTYzQkY5RkNFMDQ2RkI0N0E3NkI5NjhDCi06MTAxNUYwMDA1NjlEODdGMzZDOTE4REVCNDdDRjdBOTVDRThCQzcwQkI5Ci06MTAxNjAwMDAxOEQ2MEIzRUI0NzcwQUI3QUY0OEQ2MENGQzUwQjg3MzY3Ci06MTAxNjEwMDA0NTMyQTgwRUI2NDRDNENCNTQ4OTczRTY4NTFBNkZBNzI5Ci06MTAxNjIwMDA3MDk3RTQ1RTZCNjg0N0FGNDdBRjU3REJDRURGMUJCNDA0Ci06MTAxNjMwMDA5M0E3QkRENTVGODhGREEzNzE3RUFEQTFERTg4QUNBNzYxCi06MTAxNjQwMDA0N0ZCQkRENDkzRjM1RkE3NTdFMkI5RkY5Qzc3NjUwQUM4Ci06MTAxNjUwMDA3NkNGRjk2MkNBMjBFMzNFOEY5RUVBN0VFNkVDRjcyRDU0Ci06MTAxNjYwMDBDQzY3QzA1RkNFMUY2Mzk4Q0Y0MEVGODY1MTIwRkY0MDBDCi06MTAxNjcwMDBCRjFCMUFCOTNERDczMEVBQTA1NjlBNDVCMDFCRTVCRDRECi06MTAxNjgwMDA0Q0Y4QTNDQjI2RjJGREJCODZDQ0Y3MTZBMUZDNEZDOUM0Ci06MTAxNjkwMDA5Mjg4MUY1ODMwQTBGNTQ5MjRGQkNEODNGQjAwRjk1OUVGCi06MTAxNkEwMDBGQ0ZEN0M3ODFGRTVCMkUxMjkyRUE3QTAyRjNDQTg0RkI2Ci06MTAxNkIwMDBDQTU2QUY5ODQ0RTU2QjI1MEZENkRGQjAzNjk3RUM5MjRCCi06MTAxNkMwMDA4MjFDOTk1MTdFRUQ0MUIyOTMwQTFBMEYyNkEyM0M4M0U3Ci06MTAxNkQwMDBGQ0FFNDQ3QkEwNkNBQ0Q1OERFQTU4OTc0QjVEQ0VERjU5Ci06MTAxNkUwMDAxNUU3NjE5OUNEM0QwQ0NGNzdFMDc2NTgzNEY5OTZGNzQwCi06MTAxNkYwMDAzMzYxQjc3MkI5MkNDRkUxNzJGQkVFMjYxNTQ3NzgzRTA1Ci06MTAxNzAwMDA3MjRFNzJBRENCQjE4QzcyOUNENTJEQzc3QjU3NEZEMDJBCi06MTAxNzEwMDA1MEFFMEY4NzI0OEFBMzk5ODA3QTAwRTU3QzgzMUVFNzY4Ci06MTAxNzIwMDBDNEVERDhGMzk1RjM3M0Q5OTlBNTIwQkYzODVGRUE3MjU5Ci06MTAxNzMwMDBBRUNCNzVBNDNDMzcyQjJEQjc2MjNGRUVCQkQyNEVFMzQ4Ci06MTAxNzQwMDA5ODcwRDVGNjBGRUZFM0ZBOEFGNjVGMjc1Q0Y1NjAzMjAyCi06MTAxNzUwMDBFQUM3M0M4NUM3NzlFOTc4MkQ1NTc4NUM2MDhGN0VBRDA2Ci06MTAxNzYwMDA1Q0EwRjUzRDlGRkU0NUY0RTMzM0FCRDk1RjEyNkY4QjcwCi06MTAxNzcwMDBFN0YxRUZCNTJBRjFGREI5RTRCMzg3OUM5REE3N0M5RTA0Ci06MTAxNzgwMDBBRjVDOUQ0QjNFRjVGNkU1OURFNjdBRTI5MTY5NDdGNTQzCi06MTAxNzkwMDBBQ0FGMURGMDE4MDYzQ0JFQjVGMTU5OEEwRjNFRjFDMjQwCi06MTAxN0EwMDBDMUE5NDg4N0UyMURDMEU3Qzg1RjFCOUQyQzhDN0E0RUZCCi06MTAxN0IwMDAwOUQxQkM1NUQ0MjBEMzM5MDNBNjg0QjM2RjcxMUFFNTdGCi06MTAxN0MwMDA5OEM3NzUxNTZGNzYxMjNGMTVCRDY0MEQ0RDgxRjc4QjY3Ci06MTAxN0QwMDBCNjdEMzE5Q0UyNkExNjc2NTJEQzVBRjAwNTYxMkYwNzFECi06MTAxN0UwMDA1Qjg2QTMxQzE0MjkzQ0JFMkM1MjJGRkNEQUM2RURFNzA1Ci06MTAxN0YwMDBCNkVEQjFEMzcwN0M1MjFEQkZERkEyQThGRTc2RDU2QUNDCi06MTAxODAwMDBEOEE3NzhDMkE2NTJCQjUwOEVGNjc5ODNDMEM3NzhGRTlGCi06MTAxODEwMDAxN0ZCNjdCQzU3NDE4RjJCNkJEQkMwRjU0NDUxQTMxQUY0Ci06MTAxODIwMDBDMjdCMzI4QUVBQjZCNDYzQkM3MUQxQzc1NkYyN0Y5NUU3Ci06MTAxODMwMDBENzlEQTRGMzE0MTMzNjZGMjJGRjRBNzlBMzZDREE4Rjc1Ci06MTAxODQwMDBFQjExREY1OTI3ODdBRDE4OTdEODUwNEFGQjkwMDAxRjNFCi06MTAxODUwMDAyNEI4NUVDNDUzRkVDMEY4QzNFMkNEM0JCNzA1MDE4NTkyCi06MTAxODYwMDBDNTJGM0ZFRjQyRkQ3MkFDNzlCRDBCRjEwRUY1OUUzNUYxCi06MTAxODcwMDBERUJBNDczQzY3RkQyMzIyOUVGMzg2QzM3NDZGNEIyRjZECi06MTAxODgwMDBGMTlDQzdGMDBGMTA5NEI3NkRFNjc4NEU1NkQ3ODdFQ0YxCi06MTAxODkwMDA0QkU4NjdCNjNGQ0FGRTQ3OTc3REJFRTlFQjM1NzgxRTM5Ci06MTAxOEEwMDBBMUVEQTVFMzZCQjBERjI1N0ZGQjcyMERDNjg5QjE1REFECi06MTAxOEIwMDA3NjlBRjdDQTVGRjg4MEUyQjdGNUY3QkVCMDA5N0ZDODNECi06MTAxOEMwMDA4NkU3MjlGRUJERkQxM0FCMTc2QjZCREY3OTM4MURFMzhGCi06MTAxOEQwMDAwNkRCQjc3Qzk3OENGRUNDNzkzQkFGMjY3RkVGQkNBREE3Ci06MTAxOEUwMDAxMzUyNTg5NDc5NDM0RjkxN0Y0M0U3MTE3RjFGNDlCN0IzCi06MTAxOEYwMDBCRDBEN0IyOTlFRUQwNEQwMURGNTYwNTc5QzZFN0QyOUEyCi06MTAxOTAwMDA4RjdGRjY4OEY4REM4REQxQ0YzQkY0ODhDNzZEQjhFNUMyCi06MTAxOTEwMDBDNjJCNTFGRjM3NzA3QkYyOUM3MUI5RUYwMzNEMkYzRjBGCi06MTAxOTIwMDAwRjNBNkUxNEYxRDdGNTM3OUMzNTJFRjcwNEZFMDFGNDBCCi06MTAxOTMwMDBCMkQ4Q0Q3NEZDQkE2MUY2QUY5RkM2QkM4NjNFQkRDNkI4Ci06MTAxOTQwMDBFNTg2Q0YwMzdGRkE3OThBNzc2QzNFQTcxREU1RThBNTg3Ci06MTAxOTUwMDBERjUwM0MzNEQyNkY4QTA3RTdBM0FGRDNGMTNDQ0ExMTAyCi06MTAxOTYwMDBCNTczM0FDRTNGOUQzQkFENzRERjRGRDFDRThGNDg5RUNECi06MTAxOTcwMDBEQUI3QkU0NzdFNkEyNkNFMzVCNEIzQUUxRjhGM0Y5NzI3Ci06MTAxOTgwMDBDNDc4NkI5RDNDOUU1N0QwMDFFMzdEM0QyRTdBMkVFMkJDCi06MTAxOTkwMDA3QTM5NUZFQkYxQkVCREM1Rjk1RTZEMUYyOEVFMEZFMDMxCi06MTAxOUEwMDBGMUM4QTVCNTdGMTBGMUIzREQ3NDkzNzI5MDVFMDdDRkQ3Ci06MTAxOUIwMDAxQTQ3QURFM0MxMkRGNDcyNzcxQzdCRjRCOEVBQUUzODU4Ci06MTAxOUMwMDBGNjA4QkEyMTNENzE5RUVBOEE1MzA3Mzg2RDA0Rjk0OTM5Ci06MTAxOUQwMDAzRThBNzYyRUEyN0QyRDhGN0Y2RjU3QTM5RjM3RDZFMzQ5Ci06MTAxOUUwMDBEQTdEMTFGNEQ2QzdEQjlCQkNFODcyN0JBRTcxRkM1MDhDCi06MTAxOUYwMDAzQ0QxNjY0MjUyNEY3Q0I1N0QxRjVEQkZDRkI0NEI3RjVCCi06MTAxQTAwMDBEN0ZBQkVFQkJDNTQ4OTE0NzkxRUVCNUVFNENCRDI4NkM4Ci06MTAxQTEwMDA4M0U0Q0ZFQzVBN0Y4QkYxQjYwOUZGN0JEQjBCMzJDNTM5Ci06MTAxQTIwMDAzOTJGQTlERjRCRkEzRDUyN0Y5NEUxQkQyRDUxRkE3QjRFCi06MTAxQTMwMDBCRjVERDhFNzhEN0NGRTY4N0JDOTE5NzI0MDNENkQ3QjI4Ci06MTAxQTQwMDBCNjEzNUY5NzZEM0M0ODcxRDY2RkQ2QkRBQ0I1MThFMjQyCi06MTAxQTUwMDAyNzcwRkUwODE5QzZEM0Y2RTJFRUUxQTRDRkM1RkQzMDJCCi06MTAxQTYwMDA5MUVENTQ4OTc2Q0E5QkEyQjc1M0JFRjFBNEE5OURFMjE5Ci06MTAxQTcwMDA2MEJERTY3NjlDQkJCRDYzOEFFRjc2QUNFRjU4MzNCN0FBCi06MTAxQTgwMDAxMzhGRDVDQjkzNDNEMUY2NjlFQ0FBRDhFRkFGRTYyOUYzCi06MTAxQTkwMDBDQ0EzNzQwRjhFOTNERjdCMjNCQjYyQzhFRTlDRTdDQzk0Ci06MTAxQUEwMDBGOTM4MkUxMTUzOERFMkJBQUExNjg4MzhCMDlGN0E1M0FFCi06MTAxQUIwMDA5MURFNTVDRUVCMThGNjc3MzFFMkQ3RTBGRjUxREQwMTJDCi06MTAxQUMwMDA4NkY2QUE5QUVBQ0Y0MkJGNDNBNERFRDExMjJEMkM2NDM3Ci06MTAxQUQwMDBBMEY3M0NFN0U0MTQwRkVEOEI4NEQzOTA5RTA3MzIwRjAwCi06MTAxQUUwMDBBQjU4RUY2NzExRkVBQkNGMTRCNjI0MDVGQUY3NTk1MDg3Ci06MTAxQUYwMDBGMjJFODA3QUQ5Rjc1RjBDRjAzQjdCRDZBRkMzODE4NzlCCi06MTAxQjAwMDA2NTkzQkZBOUNDREE3OTAwRDcyQkVDMzUzQkVENDdDOEZDCi06MTAxQjEwMDBCQkVDNzQ3RjQ4RjkxQTNCOEQ3N0VGRDY2RjlGMjNCQkUwCi06MTAxQjIwMDBGQkQ3NTZDNkY3ODc2MDU1ODNGNzk2Qjk3OTFEODdCN0Y3Ci06MTAxQjMwMDA3RUJCRTYyRjY4NTdFM0NCRDA3RUZFMUEyODhGRUI4OTU5Ci06MTAxQjQwMDA4REIxQjRGRUU5NzgyOThFRUU1MUNCN0ZFREExQTlBODI1Ci06MTAxQjUwMDBEN0YyNjMzOTNGRTY2RjRFMDk1NTQxN0RBRDQ5MUM2RUEyCi06MTAxQjYwMDBERDM0ODBFRUFCMjg3RUM5NDlGMUE1N0JCN0JFNTI4NjM1Ci06MTAxQjcwMDBGMzU0RkJFNjU4MEMzMzYwRURBRjA5RkJGRjM3RTI3RTEwCi06MTAxQjgwMDBBRDFBRDU2MzhDMzMyRjY0OEFDNzc4MkVBODE4NjE1Mzk5Ci06MTAxQjkwMDA1QzEzMjMzRjA2QzkxMUZBQjExQUUzRTgzQzExRDhDNTFBCi06MTAxQkEwMDBBNjdBNEVBODlEMEY3ODg5OEY4M0ZERjgzOUFBNzAzRkQ5Ci06MTAxQkIwMDBENDA3OTFFNUY0RkNGRDc2N0U4RUJEREMwQUVGMzlCQUUwCi06MTAxQkMwMDBDQjk3NkI5RDc5MUNBRUVFQzdGNTQ5MzM5NUZGNDRFNzgzCi06MTAxQkQwMDA3MzkxREZCMzVFNUVGRTIzQkRERUFFN0FGOEZCNjVFMjk1Ci06MTAxQkUwMDA3RTlCNDhGRTNERDRBNTU3RkU3QTcxQjRGQjVCQTJGNDAwCi06MTAxQkYwMDA5RjlFREYyRkIxQTAwNUVEOTYyRDc2QkFCNzBCRUY2NzRDCi06MTAxQzAwMDBDMDczMEVEQjM0QkVGRjU1RTIwQUQzRkQzOTNCODQzRTgwCi06MTAxQzEwMDAyRTg5MDlEMzdEM0VGRDQ0M0ZCMDNDQzJDQ0Q2RjIyMjkyCi06MTAxQzIwMDBEMkJERjQxNTNCQzNGOEIzRDJENzlDM0VBNDc3RTlCNjM2Ci06MTAxQzMwMDA2RjVCN0Y5NTg1RjE4QkIxRTRENzJCN0RFRDdGMTExRjE1Ci06MTAxQzQwMDA5NDVBQzNEM0U5RkVCQzJENTY4NkY3RTdCNTZENzkzQkIwCi06MTAxQzUwMDAxREU1QjU0RDBEQTcyNzlDNjU1RkFGQjRERTZBQkU1Nzg1Ci06MTAxQzYwMDA0MDhDRTM1ODY1RTg0MkJDNzc0MTNGQUY1QkQ0OEI5RTI0Ci06MTAxQzcwMDBCOTMyODZEQkQ3RjYxODlGMzU4NkU0REQ3QzRGRDRCMUM4Ci06MTAxQzgwMDBDQUM2NDFDNkYzRkI0NTlFRTg3QUIxN0Y4Q0ZBOEY5REE4Ci06MTAxQzkwMDA0Mzc3RjQzOEY3REEzRjI2MDlFRDk5RTY2NDc0NDA5NjA1Ci06MTAxQ0EwMDA4MTNEOEVGQUJDQThFRUU0MzBGNDFGN0MxNkEzREY2RkYyCi06MTAxQ0IwMDBFMDg5QzNGOUU4MzNBRDczMThFQUJGQ0ZEMjNCODcxOTg3Ci06MTAxQ0MwMDBFNzk5MjM5NTM2OEZBMjkyNUY4N0QyOEVCNTI3RjNGQUQ0Ci06MTAxQ0QwMDAzMThDMzdCNTRGOEJBNkY3ODZDNUM0MTJGRThBMUU4RThGCi06MTAxQ0UwMDA4RDdBOEU3QTRDMENFN0FCMzQ2ODFGNTM2QzE3RTU0MzQyCi06MTAxQ0YwMDA2RkY3MzMyRDQ0N0FCODMxQzZDM0VCNDkwQjY5RjhCQzkyCi06MTAxRDAwMDBCODZFRkIyMDIzMUUwQTk1NkEyQTA3NzI0QUY4MkM2NEQzCi06MTAxRDEwMDAyQkI1MkM4M0ZFRDZEQjJCOUNFRkYwMjg3NDNGODFGMjkxCi06MTAxRDIwMDA3RkJBRjg1NUVFQTYzMzM5OTEzMThFNTFFMDE0NjY1Q0Q2Ci06MTAxRDMwMDBGMjMzRUJFNzQ4MTRENTZGNDNGQzY5Q0NFRjU2NjQ2NDhCCi06MTAxRDQwMDA5NTZBOTJGNzE4NTY0RkE5MDNDQzJFN0U1RjVBMDU0MzI5Ci06MTAxRDUwMDAzRDc5NDRFQ0VGQTMxRjBDRDM2RTdDM0Q0ODdBM0YzOEFECi06MTAxRDYwMDA4MEIxOEIzMkYwQkUwOTRGOUNEQjgwQkY2QjcwQjMzRUZECi06MTAxRDcwMDAwOUUzNjkyQjE4RDcxNzUzREM2ODhGNDhDMTAwM0IwMzcwCi06MTAxRDgwMDBGQzU0NTU1OTM3ODhERjAzQzI3QzE4MkY0OTI2MkNGNEEwCi06MTAxRDkwMDBDRkU1N0VGMzNCQjQ4MzgwNEZGOTNEODQ1N0IxNTAxNUI2Ci06MTAxREEwMDBBMDE4QzM4NkM5RUYzQTlFRjFGQkYzOTY3RENDOENFQjZECi06MTAxREIwMDA4RjEyNDEwNzE2REM0RDdBQ0NDMUJBN0Y5RDAwQTM1QTIxCi06MTAxREMwMDA0NTdENUIxNUY3QjcxQ0RDOUY3M0I4NTkxOEVEQzM1OEY4Ci06MTAxREQwMDAwNzBCQzc0MkVBMThBQTFDMzNDQUJGMkIwQjYwMDM1RjZDCi06MTAxREUwMDBCQUM3OUFGMzIzRTUwMkY0NUE0NEJCRjU4NDNGQThGNzM3Ci06MTAxREYwMDBBQjg4N0FCRjhBQThGN0FCQjNENUFCRTNBOURDMzYyOEFBCi06MTAxRTAwMDAwM0VGQTU1ODVDNTkyRkYwQzZEQkIzMDlCQzAxN0U4NkYxCi06MTAxRTEwMDBFMDNEN0ZDQzEyRTMxNUZCRTY4NEQ3MThEMTFCMkI5NjRGCi06MTAxRTIwMDAwN0JBNkU4RUM5MjA3RUZBNTlEQ0FFNEU4Qzk3NjY4OTUxCi06MTAxRTMwMDAzNTBDRDdDMzhCMjRGREJFNEZFNjc3MThERTYzNkUxQkNGCi06MTAxRTQwMDBDOUUxMjNBMjlEQ0QwMkNGOEI3NEJGNTU4RkYyNzZCMjJDCi06MTAxRTUwMDBCRjdBOTRCN0Y3NTYzRTI2N0E3OTY3NkZGRDg5OERERTkzCi06MTAxRTYwMDA5RkY4NUVFQUFGOEU4RDVBRkYwRkQ1NEI2NUFGN0RGNEJDCi06MTAxRTcwMDAwRUVFRUY3NkU5MjczN0EwREU2QzY3NkU0NkZENTQxQTRBCi06MTAxRTgwMDBERkZBQjcxNjdBQzJFRDRDNUI5QTk5REUzMUM4REZDMDMzCi06MTAxRTkwMDA2RjMxMTc5QTlGNDdGMjQ5MTRGRTcyRjQ4NTcxREYyOTVBCi06MTAxRUEwMDBEQUJCRjM2MTdFNUU0REU3ODM1QzMxQkU4OUI1N0M5RjEyCi06MTAxRUIwMDBGQ0VFNzlEQzhGMDdDQjQ2MUZFNkRGMjVGMkVGQUVFMUMzCi06MTAxRUMwMDBGNkUzREQwRkNCQjQwRjFCNzlCRkQ1QzFGRkNERUZFMTNBCi06MTAxRUQwMDBCODA3MUY4MEJDREQzMzVGMEE4NTMzQTJERERCQzVERUJBCi06MTAxRUUwMDA4Rjg3N0E2Nzg4RkU0NERFODMxNTYwOUU0OUNCRTQ2ODVECi06MTAxRUYwMDBGNzYwNzFCRUQ0Q0ZFMTQ1REU3RjMxOEJGOUM1RkQ2NjU5Ci06MTAxRjAwMDBFNkU3NTkzMTZFRTJEQjIyMjVBNDU1MEZFRDlFQzc4MjJDCi06MTAxRjEwMDAyQjgwRUZEMUZFMDRCRUM3RkQyRjU5OUNDNzY2MkU4REM2Ci06MTAxRjIwMDBDN0Q3REY5QTYwRDI3RkE3ODY3OEUyNzBCRTY2QUY4Qjk0Ci06MTAxRjMwMDBFNzZFRkU3Q0VFQjU5RTE0RTM3OTQ1RTU3NEFDRTkxRUQwCi06MTAxRjQwMDBBMDJBRDU5QjhBRkE0RDNEN0QzREYzODAxQzZBQTcwN0U4Ci06MTAxRjUwMDAzMThGMjExRkVDNTYxMjdFMENGMzI0M0Q5NUFBODQ1MDNDCi06MTAxRjYwMDAyRjJBNkUzRkNCNDdCQjM3OUVGM0IzNUU1RTRCQkNBRUIyCi06MTAxRjcwMDBDQkNFN0MxN0ZFMUQ0NkU2ODFGRkNGNURFMUExRjNERkVFCi06MTAxRjgwMDA1NzM5RkNBNzcxRkU5NTVEMzlERTgwQTMyNzNGMDRCNzYyCi06MTAxRjkwMDBGMjcxNTdFMUI4MzM3QThFQTc0QUYzN0FDOURFQkUwRUUyCi06MTAxRkEwMDBFNjQ1RjJDQjc5NkREODNGRDlFQUY5Qzg4M0ZERkJBREEwCi06MTAxRkIwMDBDQUQwMEZEMzEzM0ZERTIzMjFDODNGMTVFQTRGNzEyNDQ3Ci06MTAxRkMwMDA3MkRDOTRDMUQ4RkU3MkJDNkYxNEY0RkYzMjcxQkZFOEFBCi06MTAxRkQwMDBBMjRBMjY1MjFFNTdCNzA4RUYxRkE1MzQ0N0E0M0U5MUM4Ci06MTAxRkUwMDA0RUE2NzI4RjhBN0I0QTk3NTQ3QTI5RDVGMTZCRjM1NkE1Ci06MTAxRkYwMDBEMzNEOThCNjBCNzlGQjM2QjdBMDVGQTI0NUUwMkY0MEUyCi06MTAyMDAwMDBGNjk3MkRCNTgyRjYxREVERUU4QTMwREUyN0M3RDI2MDM5Ci06MTAyMDEwMDBERUMxNjFCOUFCMDlCRjlBOUI5MUJGMTNDQTEzNkM0NTZFCi06MTAyMDIwMDAxODUyQjU2NjBBRDE0OTcxNTdCMDdDQzg0Rjc1MDQwNjdECi06MTAyMDMwMDBDN0EyN0RFMzMxREY4NzY5NEQxRDcxRDZGQjMxQkJGODQ3Ci06MTAyMDQwMDA2RDEzQzdGQjYzMTJFN0I3NDhCQzNGQTYzNjdCMzA2RTAzCi06MTAyMDUwMDBFMkIxNkJCQkVFQUIyMkJDQzM3Mjg4RTNGRDNGRjk3RUZECi06MTAyMDYwMDA2RTRGQkMzNzRGOUI2OUMwQkIzMzdCMzJFMUZENjcwMkNCCi06MTAyMDcwMDBDRjRCMDU1RUFCMDQxREFBMDQzRUFCQzRCREFGNTVFMjE5Ci06MTAyMDgwMDBERURDMkE4MURGMkFDNDNCQTQ4Rjg4N0I3QjE3MjMzREJCCi06MTAyMDkwMDAyMDk1MTFFRkMwQkZENkExNDEyNjQzN0I3QzBGMEY1Mjg0Ci06MTAyMEEwMDA4N0UwNUJCNzg1RkNBNEIyQzNFRjQzQkM1QjEzMzlERUFBCi06MTAyMEIwMDA2RDBFQTAwM0YxMzVFMEREODNGOTQxQzJBN0VBRTA3OEI3Ci06MTAyMEMwMDA4NkYyOUMwRTAyNTYxMEVGMjNGMTM5QTcwN0UwRkRCNjA5Ci06MTAyMEQwMDBEODI0RDQ4NzYzNEM3OEQ2MTJDNzlGMUZERTlGRTJGM0MzCi06MTAyMEUwMDA1QkEyOTBGMzQ4RkMyNTZBRkM1RTYwNURCRTdCQjM4RjBCCi06MTAyMEYwMDBBQjQ0NUM3Njk1Qjg5NzExRjE4ODc2Q0QyQUMwMEZCQkJBCi06MTAyMTAwMDA5OEUzOTMzRjFGMjI2MDJGQTU0OTYyRkQ1RjA1NzRDMENECi06MTAyMTEwMDBGQzI3ODUzRDg0NzhDNjc0NjcyQzVGQjcyNDVBMkE3NkRECi06MTAyMTIwMDBBQjg4QTcwNDdFREYwRjRCMENCMkI0NkNDNjQzODBGMUMyCi06MTAyMTMwMDA5NzFBNjQxRTg0RjVGREUxNUEzM0ZGQzg2RTI1RTI3RUNFCi06MTAyMTQwMDA0OUNGOTNDODZGMkJERjU2MkRCODdGMkZDRkJGREU3NERBCi06MTAyMTUwMDBBRTVCOUVFNjhCRjcxMEZFMDMxMkRBMzUzRjEzNzJCOEMyCi06MTAyMTYwMDAwMkY5ODVGQUM3RDdDMzhCMDUxRjJDMTVGNzA2M0YyMjQ2Ci06MTAyMTcwMDBGOEU3MzEyMUNGOEZFQjdDRTNFNUU3NDg5NjRGRTZGMUI2Ci06MTAyMTgwMDA4RTg5OTkxNjcxQkY2Mjk4MTlFMzA5RTNCREY1NEM4M0Y2Ci06MTAyMTkwMDA3RUQxREFDNjQzMjlERDlGQzkzRUI2OTJEQ0M2MEU2NTA0Ci06MTAyMUEwMDAzRUU0QUZGODhGMUYwQ0YxRkI3MEZEN0REMTFFOEFENzg2Ci06MTAyMUIwMDBFRkJGMURFQjg5QkY4MzBFQjQ4NzE1NzFDRkE0Q0NEN0I5Ci06MTAyMUMwMDA5M0NENTFFRjhEQURGMkVFQjFBMTVGQTZCN0ZFRUNCRTlGCi06MTAyMUQwMDA2OTFCRjE3M0RFRTU0NDFFRDYyN0UwQkY2MzM2QzA4RTZGCi06MTAyMUUwMDAxQTU4NTdDMTJGRDYxQkM4NUU4QzdBQTVDNjQ5RkNFQjdFCi06MTAyMUYwMDA4MEZFRTcxQkY4MjRCNjE3RkZDRTU0QzdCNTFCNTA1RjBGCi06MTAyMjAwMDBCQzgwMDYyNDMwQzEyRjZBMDZEOTExQ0Y4MDczMEZGQTIzCi06MTAyMjEwMDBCMTU2QTlGRUJFMzgyRkFDOEE4RkVFOEZGQjY1MkNERjNFCi06MTAyMjIwMDA4NzcwNjU1RDZBRjIyQkFDNTQ3REY0OUU3QkFDNTlFRkYwCi06MTAyMjMwMDBBQzE0RjM0NEMyNDRCMzlDRThGM0MyNEY0NTdENTczOTE0Ci06MTAyMjQwMDAwMjNCQjE1RkM5QTcyNzkyM0MyN0RFMUM3RDlFQTg1MkE2Ci06MTAyMjUwMDBCNTIwREVGNzUxMzU4Q0NCNzczMDU3RTNGNjczMEZGREExCi06MTAyMjYwMDBDMzY4OUZFNDU0NjBGMDNBRjQ4M0U5N0NCNjkwNzE3REQyCi06MTAyMjcwMDAxNzY0RENBRUQ0QzdGNTA0RjJCRDE1RTcwMzM3RjEzRkIwCi06MTAyMjgwMDBDRTA3MDhDQjE3NkFGQ0RFRTNCQjJERTQ4NzU4MjJFNEI3Ci06MTAyMjkwMDBFRDUxMjE2N0NCODU3Q0ZEMUNFNUNCOEFGNzU4N0IyOTY2Ci06MTAyMkEwMDBGRDg1OTBBQjk1Mjg4NzkwMUU4RkNERTBGNkJDQjgzRjlBCi06MTAyMkIwMDA0QzVGQ0YyQ0I0OERBMEZCMjJBQjFDMTY5QTE3OTQ0RjA5Ci06MTAyMkMwMDBBQzIxMDdBRTBGNzY4Rjc2QTNGRjQ3NzY2NkI5MDM0RTMzCi06MTAyMkQwMDBDQ0NGQTJGQkRDQTVGODJDMzdGMkNEMzdDRTU5MTc5QzFBCi06MTAyMkUwMDAyRDFFMTZDODRGRjcxNjJCMkFGNzRCRUFGN0M4NTc4OTQ5Ci06MTAyMkYwMDBGQjA4NTRGN0NEMENGREQ1NEYyNjU2RDgyOURFMzU5NjcwCi06MTAyMzAwMDBDNzg3RDdFNDY2MTNERTgxMUU5REIxODY3NTVBQ0FCNEFECi06MTAyMzEwMDBFQkJBRUVGQkMzRUE5RkVDRTU1RTgzRUY4NURFNjA2OTE2Ci06MTAyMzIwMDA0MTc2QTE0MTRGRDQ4OEZCMjQ5OTI3Qzg4NjE4RjRDNTZCCi06MTAyMzMwMDBDMjhCMjYzMUY0RUZGNUQ0MTNCREU4Q0RGNTVDNkYyRURBCi06MTAyMzQwMDA5MkEyRUI0REREOEVEN0Y1NjZBNDdFRDFEM0M1MTc0Qzk2Ci06MTAyMzUwMDAzNjlEQkY1NDFENUU0NjdBNjc0ODc0M0Y0MkIyQzNDQTc5Ci06MTAyMzYwMDBGNzJGOTlENzlCOUJEMTMzMUZGMDk1RUMzMEUwMEJFRDA1Ci06MTAyMzcwMDAyMURENkZGMUUzMjhFMzg5RDQ5MzQ3QUVEM0U3RDcwMDlCCi06MTAyMzgwMDBERDNCMzQ0QkYzM0MzOUZBQUNGM0FCNzk1RUM4M0ZGRDJGCi06MTAyMzkwMDAwOENENEY3OUE3NDc1MzVBNTA3MzJERDkyMzBDNzc2OTJECi06MTAyM0EwMDAwQ0Y3MkUxQzVFN0RCRjBCRTk3QkI4NDZFQzlGQUY1NjQ5Ci06MTAyM0IwMDA0MzE4QkY3NEI4NjY3MTE5QzFENTc2MEZEMjY2REMyRjg5Ci06MTAyM0MwMDAxRTc0RTEzRDREQjNENkM4QjQ5RjdFMjQyNjk4NEVGMUNECi06MTAyM0QwMDA5RkRGOUYzOTIzMUJFMjYzMTZBQzVEOUE4RUZDMzg2QjNFCi06MTAyM0UwMDBERDUyM0EzNzdCMjRDMTM3RDg2RjgwNTk5Njg3RUM3OTE0Ci06MTAyM0YwMDBGREZFQzZCQzY3QUQzRUI0Qzc3QkUzREJCQ0Q1RDFGREZCCi06MTAyNDAwMDAzRDU1RjgyN0FFNTM5ODc3MDhBRTQzNzZCQkM2NzQ4NjIxCi06MTAyNDEwMDA4MTBGOEVGQ0MyNEVFQjgyMkEyREQ4OEU3MEQ1QkE1ODExCi06MTAyNDIwMDA3QzgzNTUyNTQ0QkYwRjI4RDU3MUI1MEZFOTk0RUFGMDk4Ci06MTAyNDMwMDA1RDhCMjk3MzI0RDA3RTRGRUY3MkM0REI2RjQ1NUYzQjA5Ci06MTAyNDQwMDBFRUJCM0UyREVFNDUwMjNBREQ2NEYyQkJGMjdERDc1NjdGCi06MTAyNDUwMDBFMTQ3NjNCNjVFRjI2MzQ0QkVBNzk3N0MxNzhGOTM2MjMxCi06MTAyNDYwMDBFRUU4Rjk3RkI3RkY2OTY4OEZGNTVEMzE4RUJGQjRFNjlFCi06MTAyNDcwMDBGODkyNEZFODg5NzkxRkExNTBDNDhCQ0Y1QTE3MUI1QTg1Ci06MTAyNDgwMDAxODQ1Q0U2Njg5RjNDN0IzQzQ3RTk5Q0U4Rjg1RDdFQjQ2Ci06MTAyNDkwMDBGNjM5RTdFMzQ4M0U5NzVFQjg4NEY4RkFDQjdEMkFDRDVCCi06MTAyNEEwMDA2QjY1QzBBRkE4RUZBNTE3NDZEMzdENTAwQjlFQkJFMjZFCi06MTAyNEIwMDA3MThDMEJGQzZBQkY0Q0Y5MjVBN0VEQzRDN0VEM0ZGNTQ1Ci06MTAyNEMwMDBEMjM5ODJDRURGQTlGNDlEODhBRkY2NUQ0REU3MDFEQUZGCi06MTAyNEQwMDBDNUZERDMzQTlFRDI5QzdDM0RCQ0M2QzFGNTUwREVFOTE5Ci06MTAyNEUwMDA5RjkxM0M3NEYxNTc2OEE2ODY3MjlFNzdGQUU3NUM1RTBFCi06MTAyNEYwMDBGMEZFRDkzMTM4RUNFQkRFMUM3N0ExRTA2QjgwRDcyQ0Y1Ci06MTAyNTAwMDA5RjM0NjkyMUQ0OUJERkMyRTU4QThEMEQ5NjkxMUY3Qjk0Ci06MTAyNTEwMDA2REFDRjdEMTI4RjJCRkM2RTEzMUY5QjVGMjVCOTZGM0E1Ci06MTAyNTIwMDBGN0MwQUU0QzM0QzQ5OUNDMTJERjdCQzgzRkNERUY2NTA5Ci06MTAyNTMwMDA2NUVFMjA0QjQ1NzkxMkZBQjA1QjBFQ0NGNzcyQjdEQjMzCi06MTAyNTQwMDBDREUzRDREMzE3QkJDNjc5ODU2OUZERDYzRENFQUJFOEM0Ci06MTAyNTUwMDA3OTlFQjA1M0YyNUI0NjEzREMzRDlFNUY4RDhFMzY5RUI2Ci06MTAyNTYwMDBFRTcxOENBNUYyRURGMUQxREJGRjUwQjRERjVBNTlDMDBBCi06MTAyNTcwMDA3Q0EwNEY4QkM0RkRCRjc5QTFGQjM0RDQxRjc5QUJFM0EyCi06MTAyNTgwMDAxMzI0QzNCOEYyNkI4QTRERjE0Rjc5MzVCOTc0REY1RjBDCi06MTAyNTkwMDBGRUVBNUNFRDVFODNCQzc2RDE4NUNEMzZEMUU1NDM0NzVFCi06MTAyNUEwMDA4MEU4MzJENUUxREZFMzQwQjk3Q0ExRjA4MTRGM0Q1OEFFCi06MTAyNUIwMDAyRkE3RDMxMTJEMzhCQzgyRjREQjdEQUU2OEU3QTczRTkwCi06MTAyNUMwMDA4Q0E0NTM4REEwMTNBQzFGQjIwQzc0RDJFOTEzRjk3RTA2Ci06MTAyNUQwMDBFQkZBRDIwNzNFQzVGRDhCQTdGOEVENDVCREVCQjEwODgwCi06MTAyNUUwMDBGQTY1NDRDNzVGQTc4M0YzNkIyQkQ4MEY4MUYzQzJERjczCi06MTAyNUYwMDA2NUE2RjhCQjVFRjEyN0U4QURFMzQ3N0YwRUY2REY1MTM1Ci06MTAyNjAwMDA5NEZCNEU5NENENTE1ODFGRTc4NzczRTFBREJCN0RDMTVDCi06MTAyNjEwMDAwRkUzQTI4RjI3QzVBOUYzQzM3QzE2MDQwMTNFQUE3MTVDCi06MTAyNjIwMDBGQkEzRjdGMTNDQzQ4MkI2RjMxODRGOTc5QzJFMzZGMTBBCi06MTAyNjMwMDA0MzhBNzMwMTk3NTM0MUZGQTM3QjFFMjFCRTZFMERDNUQ0Ci06MTAyNjQwMDA3QUVEMTlCRDhGMjdDNUQ5MEIxRjVDMTg2NDQzQjNGRjAyCi06MTAyNjUwMDBFRkYxQzExMUNEMzdGODI5OUM0NzYwREVDMjc5QkRGMDlBCi06MTAyNjYwMDBGOUM3ODYxQkZCOTdFQTE4OTdFNkM0NzlBOUZBRkNGNjI2Ci06MTAyNjcwMDBCNzgzRTNCREZCNzAxRDFFNUMyNzdCQUI2MDQ4MjU4RUQ2Ci06MTAyNjgwMDBDMDYwN0NCRkM4RjVGNDM3RThERjVCMTRGRkM0RjA2OEI2Ci06MTAyNjkwMDA3NkY0RTJDQTdEOTdBMERGQjVBQUIyOTk1MjU1RDhDNUEzCi06MTAyNkEwMDAwQ0VERTIwQ0ZFNUQ4RjY4RjcwNTVFMkJGNEVCRTJDQUUxCi06MTAyNkIwMDA2NkVFQjdCNTA1OTlEQjcwQ0YwMDNCMzI5MkZDRDg4QTQ1Ci06MTAyNkMwMDBDMzZDQ0Y2OTZBQzA4RDdFNzM0RERDODNBMDJBODE2NTlGCi06MTAyNkQwMDAxOTU5RTg2NzRBQ0MwQzFBRjA3NzhEOTNFRkQ3MkM0RjM1Ci06MTAyNkUwMDBEREUzQzZGRDEwMkJENDhGRkUzMzVCOUE3MkNBRTQ3NzBDCi06MTAyNkYwMDA3QjVEOTlFNTA0M0FFOUQ3NDRDN0IwN0E5RjI0OTExRkRFCi06MTAyNzAwMDBGMjU0ODQxRkYyOTRBOTFGODlDREE2N0Q4QTQ4QkMyODYzCi06MTAyNzEwMDAzNkZFMUQyODg1MDlGRkIzQzA4N0ZFOURBNEE1NkUzRTI5Ci06MTAyNzIwMDBDRTk1QzI4RkZEMDRGQUFGMkYwMjNCMzZENjQ1RjZDMUQ3Ci06MTAyNzMwMDA5MjBCMkM3QzdENjg1M0U4QkUyQjZCM0MyRkFGQzVGMTEwCi06MTAyNzQwMDA3MUQ4NzFGRjQzQzZGNTU5OTg2MDI3REUxMDI2RDNENTlFCi06MTAyNzUwMDA4QjEyQzJGMUNDMjMyMURDODc4NTk3RTA3QUEzNjM1Q0RFCi06MTAyNzYwMDBDQjAzRjhGQzc5N0IyMEQ3MDk3OEZGQTY2RkYzMDEwOTJBCi06MTAyNzcwMDBGNzMzRkM4MThCMTFDRjM1NzIzMEQzMDNFNTdGMkQ3NzkyCi06MTAyNzgwMDA2NjYyQjk3NEM4RkEzODgxQTcxN0UwMzk4NzgwNjE5RkZCCi06MTAyNzkwMDA5NERGRDdEQzBEQ0IzREUxMEJFNjJCMTFGQjg2REY1RjMxCi06MTAyN0EwMDA2Q0NDQjdDN0Y4MkFCMDFGOTFERkNCNEFGQzQyQTJGRDIwCi06MTAyN0IwMDA0MUZDNEMwNzlGRkZGRDM0M0YyRjc3RjI3NTA1RjEwNzcxCi06MTAyN0MwMDBGMkQ3M0U2RTNGOUQ1MjNDNzFCOEVGODdEODc5RERCNEE5Ci06MTAyN0QwMDBFRjYzRjNCQzZFNjg0RjExRUJEODVBRTA1N0M1QjA0RkFBCi06MTAyN0UwMDA3N0ExRTJCMzIwM0Y1RDU0MERDRjhERkQ4RDYyMjcyNzg5Ci06MTAyN0YwMDAzOEU4REFGMkE4NzZCRERFM0YzQ0FGODNGODk0NEY0RjVECi06MTAyODAwMDAyMjdCMjQ5MjJGNzY3NEVEMjdGMEVGNjlEREExMzM5RUIxCi06MTAyODEwMDBCMjg4QzNGMTRDRkZEMUZBRUU5M0FFRkRBQTQ1MUM3NjA3Ci06MTAyODIwMDA3M0E4RkM1RUJFM0ZGRTY5NkUxQ0M1OTlFQUZEQjhBM0E1Ci06MTAyODMwMDA2OTY5MzNEQUM1NzczNEY1OUQ4OUY4QkNBM0UwRTIzRkQ2Ci06MTAyODQwMDA2M0JBNDNFRERDMTM4QkZBRTI3RTg5Q0U5N0RERjlDMUUyCi06MTAyODUwMDBFQjZBMkNBNDVCREY1RjQ3RjcxRjNDMkZFNDcxM0FFQjc4Ci06MTAyODYwMDA1NDkxRkUwMUU2RDZGODdFNTc4OERGNDdDNUJDMDJBRTFDCi06MTAyODcwMDA1N0QxNUY3MTc3Mzg3NERCMEQwMERERjM3QUU4MDYzNEU5Ci06MTAyODgwMDBGN0E2RUZFQjdDMDNENTQzQTBERTNEODlGNjk0RjRGNzgxCi06MTAyODkwMDAxQUJENkY3Mjk4QkZENzM1N0VDNTQ2RTNFOTFFQUY4RDZFCi06MTAyOEEwMDBDNkFGOEYwRjdBNEFGOEVGQzI4RkI4Rjc0REM3QzdGODk3Ci06MTAyOEIwMDA5OTdDREM3N0M0REU3NTFEM0JDQjNBRTAwRURCQjAzRjg0Ci06MTAyOEMwMDBGMzc4M0VERTlGNDhGQzdDODU1OUEwMUY1Rjc0RkFGNkMyCi06MTAyOEQwMDAyMDNGM0VFM0Y0RUQ0NUJENTc2MkVCNEM1NzA2OTJCQ0ZBCi06MTAyOEUwMDBCQzg1Q0ZDQkU0QzAwNUM5MzBGRTEzMDMwMjE3MjcyMUY2Ci06MTAyOEYwMDAxRTlBRkI5Qzk3QkQ3RkMwQ0VGOUZCODA5REYzRjc4MUFDCi06MTAyOTAwMDAwQzlEQUY1QjlDQzhEN0VDNzQyMjhENTNGRjdFQzc5MkExCi06MTAyOTEwMDBBRDg3MUZCQjFERjhGQkM0REJGQzNFQkI1MkQ5NzNFMzg0Ci06MTAyOTIwMDA0M0U0OTc5Njk5MzEyRTNFMzIzRDIwRkMwQzJENUQ3QzgwCi06MTAyOTMwMDBDOEM3M0I0M0UxRjIzMkEzMjE5NkNFQzFDQzk4MkY5QjZFCi06MTAyOTQwMDBFRURCOUYzMTlGQzdDMzMyQTU3OUY4QURBNjc1QzIyMkQxCi06MTAyOTUwMDAxMUQ3RDJCMzFFRjQ4MzQ0RDYzMzczRkUwNEJBMTc2NTdECi06MTAyOTYwMDA5QkU2MUU0NzdFOTEzNTlDQ0Y2NjRFRjRDOTc4OEU2MEZCCi06MTAyOTcwMDBDQzMyODlGNkYxNDcxRkYyMzRCNjAwM0MzMzE0RUY0NUYwCi06MTAyOTgwMDAzMTlERjlFMDdGMERDMkZCNTFDQTlBQjk3RjM0NDU5RTUzCi06MTAyOTkwMDA5M0Y5NTM0ODU3RURFMUYzM0RDMjczMTA0RjBFOUZDN0IzCi06MTAyOUEwMDA2MUQ4Q0Y2OTUzMkIzMkREQzhDRkY3Mzg3Q0E4MDc3MkM2Ci06MTAyOUIwMDA2RkY1N0Q4Mjc0RDVGRDIyRkFCQ0ZCMEFEODAxMTgxNzg5Ci06MTAyOUMwMDA5QTdCQjcyNzA3RjkyNEI3REVFRUEzRDRDNjk0MThEMEI0Ci06MTAyOUQwMDA2QkI5MEFCMzYxOUFBMjMxQzU4RTY5MENCMzYxOUFCRDE1Ci06MTAyOUUwMDA1MEQ4NEYzNTM3OTFGREUwQ0FGMTZCNzhCRjc5NkVEMzdGCi06MTAyOUYwMDBGMzVGRTNGQkY5NEE3OEI3NjRFMEFCRENBNkI3QkZBM0FCCi06MTAyQTAwMDA3Mzc2M0UzRkM1RkQ1RTU2QTc5OUQ2OUZDM0VBQ0RGMENCCi06MTAyQTEwMDBFNThENjYzODMzNkM4NjQ3RUUzM0MzNjUzODM2Njg2N0I0Ci06MTAyQTIwMDA4Q0Y4MUVFMTlFOUQ1Njg2REYyQjJCREU2Q0E1MzhGNEJDCi06MTAyQTMwMDA1NzcxQUVBMDc4NUUzQkU5QzUwOUM1NEREOTE4Mjc3MTFECi06MTAyQTQwMDBGQzQ1QTcwNUZEOTUzQkZFRkEzMkM1NTk3NDZFOEE2NUIzCi06MTAyQTUwMDAxODY3QjhGQkQzMTgxNjgzNzFCQzlCRURFQjMwQkYxODE5Ci06MTAyQTYwMDA2ODg3RkVEOUUyQ0RGNkI1MTg0RkIzRUQ1MjlENEY0M0JFCi06MTAyQTcwMDAxNDBGQjVFRDZGRkNCQzRCRTcwNjZCMDhFMzJFOEU2RkIxCi06MTAyQTgwMDA3RkZFNDVFNENCRTMxQkZBOTMxREY2QUExNEI0NjA3REU4Ci06MTAyQTkwMDBDMTQ3MzhEREM3MDhCRDNFNDZFOEY1RTIzQUYzN0FGQ0E3Ci06MTAyQUEwMDAwQTk3NkVBRkJBODdFMkZDMzcyNjgxRTNCQkI1QjIyRjM3Ci06MTAyQUIwMDA4N0M1NzcyNTc0RkI2RDhDQjA2N0RENDBDRkNGODc3NkY3Ci06MTAyQUMwMDBEMzc5ODhEMENGNzlBMTdCMzUxRkQxNkI0MTBDRUFCMzg0Ci06MTAyQUQwMDA4RUEzREEwQ0Y0NEI1RDVDNjNDNkEzQ0VERjk3ODRDQzg3Ci06MTAyQUUwMDBDRjI3QkEyNEExRTcwQ0NGMzMzMDVFQzVCMzI0MTVFNzU2Ci06MTAyQUYwMDBFRjY3QTNERjUzN0ZCRDhCREIxOTJGQkNBMEU5RjIyMDZBCi06MTAyQjAwMDA4QjdCMkE5OUM3NzBBRUIyNUJFRkIzNzlGRDMxOUUwODFCCi06MTAyQjEwMDBFOTM1QjBGQjc5NzE0NEJCN0FGREIxMkUyRUNGNUZEQTc3Ci06MTAyQjIwMDBGODc5ODI0NDgxODc2Mzk1RkJDODZFRThCMjIzMkI3REQ4Ci06MTAyQjMwMDBCRTg5MDYzOEFGNjY3NzcyMkVFMTZGNzdGMkJEODZGOUVGCi06MTAyQjQwMDBBQTY0QzNERUU0QkIzMDRFQUU0RTQxOEYzNjJCQjlFM0YwCi06MTAyQjUwMDBCOTlGOEY0OUM0RTc3MjNERjYxM0YzMTE4RjZERjU2RjdFCi06MTAyQjYwMDBCOEIwMUNEOEQ5MjM4QzcxNjdGOTM1NTdGQjI2MUFFNDA1Ci06MTAyQjcwMDBGRTg3RjJCOTRFQjcxMjM3QzdDQjJCMzlDRDkzRjA5Q0Y1Ci06MTAyQjgwMDA0ODcxMERGRjhFNjE3MUZENkRCN0RDODBGODVFQ0RDRkIxCi06MTAyQjkwMDBEMzY3MkJDQzJGODMzQzk2NkNCOUVERkE2MUYwQkNGQzZCCi06MTAyQkEwMDA5OTUxNUVFQzBGNTQ3MTJCM0UyRkRFNzg5MkNFMTUzRDdECi06MTAyQkIwMDA2QUUxRkU4RTQ4RkEwNDA1OUYzREZBMTM0NzAxRUEzOTlGCi06MTAyQkMwMDBBOEVGNzVDQjA4N0E3RjlGMDVFQzlCMjNFMzgzRUZEQ0FFCi06MTAyQkQwMDAwNTQ1OEVCM0ZBMEY2RkEwRjgzMDMzOUYwMkRGNEI2OEM0Ci06MTAyQkUwMDBCRjc1QUU5N0JDRUJFOEU5QzJFQzlCRDE1NEY3MkRBMEMyCi06MTAyQkYwMDA3ODc5Qzg4RkJBN0UyOTBDOTlFQjg5QTRFRjZBQzE2RkU2Ci06MTAyQzAwMDBGMDFCNjJFNDkzQzg3MjdEQTYwNEU5REM3NEM5N0NEMDMxCi06MTAyQzEwMDA5MzA2RkY0M0M5QTE2QThBQ0Y4RDZDMDcyMzU4OThDMUQ4Ci06MTAyQzIwMDAwRURBODFFMTc1Mjg5NzlCNzg5QzE2RkMyNDVCQjY4OEE4Ci06MTAyQzMwMDA2MzFGQzQ2MUJBQzcxNUY5MTExOEEyRjg1MjM2RDE4M0JGCi06MTAyQzQwMDA3OEJEOTk0REM2NTRENzM3NkQzOUY1QzNCMUZDQUI1MjM5Ci06MTAyQzUwMDBDQjczQkZBMkZBOUMyNEU3NkRFRTMwREQ2RkRCNEY5Qzk3Ci06MTAyQzYwMDA0NzZGRjM3MDU4RkZFRThGOUU1RkQ0NjRBN0I4QUVFMzUyCi06MTAyQzcwMDAyNzM0RDJCRjBCMzA5RTE0Q0JCRjY4Qjc1OEMwNjgzRDE1Ci06MTAyQzgwMDBCRUE1Q0Y3ODhDNTM2RUFCRTdGN0E1MUZBQkVGMzM1RUQ1Ci06MTAyQzkwMDAzQkNCQkMxRUE5NEZGNEY5RjYyMEZFMzkxQUZEN0FCRUQzCi06MTAyQ0EwMDAyNjE3Q0U4MzhCNzgxQzc3NEE5RjhBQ0M4QTI4NzREMkM5Ci06MTAyQ0IwMDBERjRCRDQyQTMyNzFGREQzNzk4RkMzQkI4RUYwMTRDQzk1Ci06MTAyQ0MwMDA1MEM4RUY5RjRBN0U5QTVDRTE5RjNBRThGNkJGRUQwMjVBCi06MTAyQ0QwMDBCQTM5QTFBQzBGRkUyNUVDOTNEN0ExREZGMzBCRDlGQkRBCi06MTAyQ0UwMDA4MDdCNTBGNzNFRkRBQ0FDMDA5RERGQTMwRkY0NDBGQkIyCi06MTAyQ0YwMDAzMzE1MTY1NjgwREY2NkUyM0MzNTlDNjA5QTRGNjdBRTBFCi06MTAyRDAwMDA5NjI4OUU3MUQ2NzJGMzc4RjBCRTZFRTNGQzVBQzBBQTg0Ci06MTAyRDEwMDBBOURFMjI1NjRGNjlDMTZBNzM3RTIxQ0U0NzJFM0MyNzE5Ci06MTAyRDIwMDBDN0UzNzY4QTZBQ0RGOUZBQjlDMDkyOEQ2N0FDRDFGMDYzCi06MTAyRDMwMDBGNjM1RDNDN0U3RkIwMkM3MjdERDZDQTNGRUREQjcyQTU0Ci06MTAyRDQwMDA4RUVGNzc2OUNDODdGMzZERTcyQTI3RTlGRjYyMTZBMDNCCi06MTAyRDUwMDA3RURDMjlFNkZERjIwNzczN0RCMzIwRUQ5ODNGRDMzNzgzCi06MTAyRDYwMDBBQjBGOUVDQkU3RjMyMzJEMTk0OTlFRjlCRDdFQzUxMzBBCi06MTAyRDcwMDA1OTc4MDBCRkNGODdFMUJDNUJEQzI0ODU4NzIxNkMwM0Q5Ci06MTAyRDgwMDA1MTFEQzE5RkUzQkQyNjM4N0VFMzc5MzY3REZDMzg2RTQ4Ci06MTAyRDkwMDBFMzczRjYzRUE3NkYxMTlFOUI5MkY5Qjg4REY5MjUwMjU5Ci06MTAyREEwMDAxRjI1MUJBRDI2N0ZEMTk4OEQ1MkQwNzkzOTlFQUY2QUYxCi06MTAyREIwMDBBMUY3Q0ExQUNFNTg0REY1OEE3OTFERUMwMTY2MDdCQUZCCi06MTAyREMwMDA4RDI5NTgyQkUzNjA1Njc1RTlGMUQwMjVEMUNFQ0IxQzY3Ci06MTAyREQwMDAxMDc4NUM3NTVCNUU1Rjk0REJDN0QxQkVFRDI3MTA5REZDCi06MTAyREUwMDA0MzdBNEFGOEEzNThEODA2RURDNThDRUM4MjI5M0Y3QjdDCi06MTAyREYwMDAyMTg3OTNFMjFFQkRBNjI2OERCRTJGNEFGQjYxMzM2NTU3Ci06MTAyRTAwMDBGRjlCNzgwRUIzMzIzRUQwMzcwRURBOTk2OUYxQTUyQkNECi06MTAyRTEwMDAyNEJGQkVDMUU0NkY5RENGRjFGMEU0ODg4QTRCMkFBMkEzCi06MTAyRTIwMDBBQ0I3NzUzQTNGMjFENTUzOUM0MDcwM0I5RkE3OUQ1OTQ1Ci06MTAyRTMwMDA5RDZBQzAyMDE3MjNFM0I4QkU4Q0RCRDM0MkU3OEYzQUVDCi06MTAyRTQwMDBCNzRBNzRGRUY5MjlFOTIwOUQwRjdFRUE1QTBGNDNGRjI1Ci06MTAyRTUwMDA0MDJBRDAwOUY1RUY1MzEyNUI4NEY3RkM2NTM1REMzNDZBCi06MTAyRTYwMDBFNzBEQTQ3MzU2OEMxN0UzMEY0QTFCQzZDOUE1MEUxQUFCCi06MTAyRTcwMDAzRkI3RTM2MjJCRDZFMkJFNTRDQThDMjEyMzkwREY2MUI4Ci06MTAyRTgwMDBEQzMzNkU4NkU3QTNFMzNDRDQ1RTVGMDdBNzdCRUFDMjMwCi06MTAyRTkwMDA2MEM2RENBMUQ4QkU3RkNFMUIyODhGQzM2MkU4QkM3Qzk1Ci06MTAyRUEwMDAwQUUwQ0E5OTQwRTkzMkI0Q0Y1MjU5RTY2RUI0MzM1M0JFCi06MTAyRUIwMDBBNzc4NDZBMDRGN0Y5NThCQjc5MzY0OTE2N0RDODRGNjIzCi06MTAyRUMwMDBFMzA4MEUyNzNDMkNGOUQ2MTExM0FFQTA3NjUyQUNGQ0M5Ci06MTAyRUQwMDA5MzdBRjgxQ0VENEQxQkZBMjcxQzA2N0E0RkE4QzhDNDNDCi06MTAyRUUwMDBGNjUzMDZGMTM0NTEwQkE3NjEzREZCQkJFODFFQTA3NUZDCi06MTAyRUYwMDBDODNDMzcyMzdEM0RFRkJCNzEyOUI4MkVEQ0RGMDYwQkM0Ci06MTAyRjAwMDA3NUQwNjNGQkQzRjRGRDk3QjA4M0VDRkIwQjg3RjBGMjM1Ci06MTAyRjEwMDBDMjRFOTk5N0M5Q0ZFNzI0QTZFQkY2MTUyRkQ3QTFGQTkxCi06MTAyRjIwMDBFMjQ2QTI1RTdEOEZEQkY5NUYzOTdDRTQwN0JGNDJFQkFFCi06MTAyRjMwMDBFNTNDODBBMDUzRjlFOTU4MTYzMkNDMEJFNUQzQkUyMTBECi06MTAyRjQwMDBGQkIzRkNCNENCRjQxQ0VGMDkzNUM2OTU5NzE0RUNBMTg4Ci06MTAyRjUwMDBFRjNCOTRCMjY2M0E5RjUwNUE2RjhFODNCRjIyMjY3QTE3Ci06MTAyRjYwMDBCQjNBOUY5NzlGOTY1OTMwNkFCQjlBRjlGOUU5M0UyQzc0Ci06MTAyRjcwMDBEODI3NUFCOTY0RjNGM0QzOTIxOTZFRkM1Njk0NTNFOEU4Ci06MTAyRjgwMDAzOUNCNjk3MUUxRkE3MTBBQ0U0N0E4Njc0Mjk2QTA3QUY3Ci06MTAyRjkwMDA3OTM3NUREQUREMkRBNjc5QThEREMzRTEwRUIxQkZBOEQyCi06MTAyRkEwMDBFN0VCRjVCNzRGRDNDNDM5M0Q3RUNGN0I1QjI1MjgyMEI3Ci06MTAyRkIwMDBDMENGRDM0RDI3QzlERjVERDJCNDlCRjBBM0YzNDUzNzEzCi06MTAyRkMwMDA5RTYyNTlEMDgwQTdFNEFBRTZCMDA1NjRGQ0U5QjhGRDhBCi06MTAyRkQwMDA0Qjg3NUUwMjI0RDlBM0NCRjMzQjRCN0Q2MzIxMUZCRkZDCi06MTAyRkUwMDA2QjYxOTBFRkQ4QUMyRTc5Mjc3NUIzQ0EyMjBCRkRGMDM4Ci06MTAyRkYwMDBFRUQyODk2MzhEMzAyRkRGRkQ3RUYzMzUxMzgxQjdCMkJBCi06MTAzMDAwMDA4NkYyRjc2QkUzREU3QjZCMjFDNjA2NzU5RDNCRTg0Q0QxCi06MTAzMDEwMDBGNzNCMERCMDJEMDI3NjAwM0NDQzAwQkIyM0YyMTMyMzBFCi06MTAzMDIwMDBGMjUzMjNFMDM0NUVCRUNEMTk0RTk3QkQ4QzZEOEVGQkZFCi06MTAzMDMwMDBFMDFBMDVGNDVDNUJERkYwNzRCQzc5NjQ3OUQ1NDdENzlFCi06MTAzMDQwMDBFMEY3OEU0QkIzRjhGNzdCQ0I5QTI0QUY2NEQwQTM2NTNGCi06MTAzMDUwMDA1RTFFODdFNEYwQjY2ODMzODcyMjFFOUFERjQ0N0Q1MEY3Ci06MTAzMDYwMDBEMjI4Qjk3MUZERTBBOERGMTIyNjE4REZGMzE4REVBQjE1Ci06MTAzMDcwMDBFN0VCRDM5MkZBODNGNDVFQUZGNTBGQjE5MDNDM0YzQUExCi06MTAzMDgwMDBFNDczMkE3N0FFRkQyRDM2QzVGQzNEQUZERUY2QkI1MkFDCi06MTAzMDkwMDAyRDgxQjc1MERGRUFGN0M3Qjc2REY5QThGQjdCQUEyMEVGCi06MTAzMEEwMDA3RkVEN0Q3RDdCNDk5RjQ2OUM1QjJGQzdGRTM4QkFFNTRGCi06MTAzMEIwMDA0NUM3RTNBMzQzNEVEMTdEQkE3RjE4RDZGNDAxOUEwN0UyCi06MTAzMEMwMDBCMUYzNEUyRUMwQUI3NUZGNTQ3QTc4MTREQTVGNzgyN0NGCi06MTAzMEQwMDAyRkNFMUY0RjQ4QTE0QjcwNUU3QTlBMDUyRUMxNzZFRjE2Ci06MTAzMEUwMDAyOUJENjgzNzdFNkFFQzgwREFGMjBDNUUwOUYzNEREQ0FDCi06MTAzMEYwMDA0OUMyRkYwMTY3Q0IwMEZDNjREREU5QzdGRkMyRTFBNDYwCi06MTAzMTAwMDAxNkJBMDlFNkI2RUFFRkFGQzFFRkNEMUUxOEQwMzJDMDRECi06MTAzMTEwMDAwMkYwRjc4RjVGM0E5OUUwOEI1QTlFNDFGOEMyRUEwNEI5Ci06MTAzMTIwMDAwRTBGNkIxOTIwQzNGQjAzODM3RDI2MjNGREQ2QkJBM0EzCi06MTAzMTMwMDBDQkZEMDlBMTZGRjRGRUM1MEVGNjFEODk0M0ZCQUE4NEUxCi06MTAzMTQwMDBDRjNCNzgyQ0RBMDY3QTc1N0FEMUIxNERFQjAxMUZEM0RCCi06MTAzMTUwMDBGRjIzOTZGNERERkFCNjVCQUVGMzEzMUU4MjdFOEM2RjBFCi06MTAzMTYwMDA0QzExRjhBNjc5OTFGNEJCNDJGNjQ0NUY5QzBCMTNCQTVDCi06MTAzMTcwMDBFOUU5NEM2RkY2RDBCQzcxNjlDNTE2QjQxRjUyQTYwRkIxCi06MTAzMTgwMDBBNTc5RTM1NTk3RUYyN0VFNTFEREU5RTkyNDlFRkVDNENBCi06MTAzMTkwMDBFREU2RkE1QkI2NTBCQzQ2Q0E0MzRFQjJBQjFFMTdERjMzCi06MTAzMUEwMDA2NzAwQjkyM0ZFNzAwOEJBNThEQzdDM0NGRjBEMTk3MzI4Ci06MTAzMUIwMDBEMTFCMDA4MDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEYxCi06MTAzMUMwMDAwMEZGREQ3RDBENzg5NEM1QjVGMEJDQkJFRkZFRUYyNkFBCi06MTAzMUQwMDBCQjlCNERCMjA5Rjk3OUYzNDMwODEwNzExMzkzMThBOUY5Ci06MTAzMUUwMDBENjREODgxODMxQjUwQjIyNjI2QjcxNDlGODQ5MzBDOTQ4Ci06MTAzMUYwMDA0NkFEMTYyREJENTk0ODU0ODIwOEQxNDYwNDBBQjhFMTlGCi06MTAzMjAwMDAwMjYyMkJGRDgyNDU4QzFBRTg4Mjg4RjYyQkJEREY3MkE0Ci06MTAzMjEwMDBFQkFEM0ZCREQ3MUI3RThBODg0MjU2QjQ1Q0VBNkRFQkFFCi06MTAzMjIwMDA5RDczNjYyNkQ5Nzc5MzVDQTg3QTdCOUZFNzhCOEZCRUM4Ci06MTAzMjMwMDBDRTNCRjNDRTlDMzk3M0ZFRTY5QzMzQjMxQUJCODY5MDJCCi06MTAzMjQwMDA2NDQyOEUyNURDMzBDNzRFOUZERjMxRTYxNTlENEMyMjRGCi06MTAzMjUwMDBBNEJCMzNGNDlDNDk0QkM4N0IxMjIxQzQ0NTQ4RjAwOUY4Ci06MTAzMjYwMDA1MzY4N0IwRTIxREZFREQxMDQ3NTg5QjRERUUxNEQ3MzI3Ci06MTAzMjcwMDAxNkQxQjI0NDdDQkQ0NUMzRTVCRDdGRDVERUU1QjNEMkYyCi06MTAzMjgwMDA3MjMxMkREM0U3QUIxMjk5OEJGNTMzQkQ2OTBFNUFGRTFGCi06MTAzMjkwMDAwMkZFQUVBN0U1MUU1NjlGQUUyNUFENTg5RkMzQkU3RjZBCi06MTAzMkEwMDBBQTg0RENFNUEzQ0ZENDc2M0E2RTI5N0RBRTlEQjhCNTZECi06MTAzMkIwMDA5RDhFNkI5MTg5MTdDQTBCRTcxNjZDNUQ0RTYxNkE3MzIwCi06MTAzMkMwMDBDQzQyNzg4OUQ3OUIyNjUxRjg0RTM2RTY2QTU2RDE3NjlECi06MTAzMkQwMDBCRkE3QUZDODM1ODQ1QzUxRTBDREIwOTdEMUY5NDBGRkFFCi06MTAzMkUwMDA3NDFDRDI0NDI3OTUzNjNDRkUxQzk4MzdBREFGRDc3QTc0Ci06MTAzMkYwMDBCMzY0M0FDRkRCMURGRTM5RDBCRTVFRTM5RDQyQjREMDRECi06MTAzMzAwMDA4OUI3QzA3NzA1QjQyMzg4OUYzOTc2M0JCNjI3RjI0MDRBCi06MTAzMzEwMDAxOUJDRkZGRjA4NEY5NUI4RUU1RjExNEY3N0VGMzQ3NTdBCi06MTAzMzIwMDA5RDJDMjRGOEY3MDVGREI3QjlEN0ExMkEwN0ZBRDJCQTIwCi06MTAzMzMwMDA0RTFBODdDQjc3QzNGRkQwNzE0OEFEMjQ5MzE0M0EyQzMzCi06MTAzMzQwMDBBQjIyNkU4REZGMzZFOEJGNzlFOTA3N0FBMjgxMzc1MTRCCi06MTAzMzUwMDAzREY0MkZGMEJFNEUwQUVCNTJFOUZDODJGQjI0Q0Y3NkZGCi06MTAzMzYwMDBDMkRFQ0ZCMjExOTI5NUU4QkYxM0U2MjFFMDlFRjdDMzBCCi06MTAzMzcwMDBFNjM0N0ZEMUYwN0MyQzNGNzhBOUU2NzY1QTlDQjdFNEZFCi06MTAzMzgwMDBDQ0FFRURGNEZCNzkwRjU5MDg1MTg2REJEMzFFNzE5RDRECi06MTAzMzkwMDBERjdGQ0ZCODlBNUM0OTlGRkFERUIwODZFMkVCRkQxOTc5Ci06MTAzM0EwMDBDNEIzOUNCNjdCNUY0MzFBMDBGRkVGNzNCQzk1M0Y3NEI4Ci06MTAzM0IwMDBGNzExMzI4NTkwNUZEOUI1Rjg5RDQ5RDA4M0U0REJCRDI0Ci06MTAzM0MwMDA4OEUyQjc1MzIyNDEyM0QwQzM0QzNERDJDMzYwODhEMjk4Ci06MTAzM0QwMDBDMzk1QjBGRTc0N0RFOEZCRUUwNzI3ODc4Mjc0N0QwNkY3Ci06MTAzM0UwMDBDOTAwOTE2MTNFMTVDNEJFNUQ4OUE5QkZBMzAwRUIyOTQ4Ci06MTAzM0YwMDA5RDA0NERCNDNFREE2ODBFNkQ5NTgwNUUyOEEwQTU1MDAwCi06MTAzNDAwMDAzRjA5RUI1Rjk1RDhGQTA3RUYzMEUyMzhERDMzMTkxRDNECi06MTAzNDEwMDA3NjM3M0E0M0MxMUMwMEI2OEIwMERFQzZBMkEzOTQ3NjcxCi06MTAzNDIwMDA4Mjc0NDg2NEVGOTQ5OUI2NjE3QzZDRTM3MkMxNTIzQTNECi06MTAzNDMwMDBGMEUyREJCNDNGQjJEQUU0MTk0RjFGQjA4NDMyOTRCQjQwCi06MTAzNDQwMDA1MjcxM0M0QTBGQUI5MUJFNjQwNjQ3RkQ4RkQzNDJBQjJECi06MTAzNDUwMDA3MDVDNEYzOUFDQ0JBMzM2RUY3Qzc4MUZGRDkxNDUwMUYyCi06MTAzNDYwMDBGODM3OTlDODRBNjMwOTdENEFBNEMzRThBNEVCQzBFMUQwCi06MTAzNDcwMDAyMTVENEYxM0EwODNCQjYwMDA4QTg3N0Y2RjM4NkY1MzM1Ci06MTAzNDgwMDBFOEZCOUZEODI1ODQwMzA4Q0Q1ODRFNDgxRDYxRjU3NThCCi06MTAzNDkwMDBDQjJDQzdBNDI5RjBENDg2MEQwOUY0RERDQTFCQkMwM0NDCi06MTAzNEEwMDA4MkJFNzJEOUQzNDhGQkYzNzNCQTIyRUJBMzM2QzA4MzMyCi06MTAzNEIwMDAxRkJFNEI4MEZFM0ZCNzI5NTYyOEQzRUZBN0MwRjJEM0RCCi06MTAzNEMwMDBFRjBCODdCRkZGMzlGMDdEMTlDMEM3RTAyNzZEMTY2NTg4Ci06MTAzNEQwMDBCQjM0OEMxRkYxRkNCOTgwQUZFQjY5NkZFQzc4NjI5QzU4Ci06MTAzNEUwMDBGODdFOEZEOUJERkYwN0YwNDVGMTFFNEU3NDAxNUVCNDIyCi06MTAzNEYwMDBCOEFFRjFGMEJBRjREMUM3NERCNDdFNUU5QkQ2QjE4MkJFCi06MTAzNTAwMDBFMkQzQkZENDg2RjMxNUYwREU5NTFBQkQ4RUU0OERFQ0MwCi06MTAzNTEwMDBGRjk0QTVBNTVDODZGOTJGNjU3NDRGOTYxOTI4RTI2MjgxCi06MTAzNTIwMDBGMUEyMUYyRTUzRDI1RDQ4QTI4NzM1RDIyOEVGRTVGMEQ1Ci06MTAzNTMwMDAwMTgwN0Y1MTc3Q0NGN0Y4REZCRjFBNjJEQjA5QkUyMTJCCi06MTAzNTQwMDA4QTE0MDczRkE3MkI0NTkyNjFEREZDMTI1QjM3QkQzRTE1Ci06MTAzNTUwMDAzQTBGRTQ1NjNDREMwMjlGRkZDNkU1OERBMDhCNzg3Q0Q5Ci06MTAzNTYwMDBGRjFCRTBCQjZDMjRCRTVERkE4MTRDRThEN0JGRDQ4MDYyCi06MTAzNTcwMDA3ODhBRUY5RjkwMTA3RUY3QjQ4OTA0NEQ5NEVFRDY0Qjc1Ci06MTAzNTgwMDAxMkQyRUJGQTA3MkQyMTkwOUI4M0E2RTgwRUMwNjc2MDRDCi06MTAzNTkwMDBGRjhEQjhERUU3MUFDRDBBQTE0RDM2RUExOUJGMDVGNzRGCi06MTAzNUEwMDBEQjE4MUYxNzBDMTQ4MERDM0I0N0U3RUNBNUVCNzNFRTMwCi06MTAzNUIwMDAzN0RBOUVBMDI0ODAyMEE0RTUzN0RBQUQ0MEZGRTc1RTJECi06MTAzNUMwMDBCRTg5RjVCM0RDQTIxMDVBMEUwMDg2RTlCODgxRTA3RjBGCi06MTAzNUQwMDBCNjExOEE1NzY5OTYxMUM3M0ZCMTU3MEExOUEwQkU4RjE1Ci06MTAzNUUwMDBFMjM5NDY1RTlFQTNGRjM2OTQwQ0NCOEQ0MUE4MDAzODhECi06MTAzNUYwMDBGQTJDMDgwNzlENjkyMzhFRjc1RDMzNTk0NUM3NkZEMUIzCi06MTAzNjAwMDA0ODVFMERBRDZGNTkzMjI5RDRDRUUwMzFDNkNBRDUxNjA5Ci06MTAzNjEwMDAwREU5OTA0QTg2RjlCRjQ1NzNCQ0UwREUyMjU2MjdBNzI0Ci06MTAzNjIwMDA3MDc5QUM2MEJCNDMxMjg1QjNDOUI4M0FBMjA1RkEwNUZDCi06MTAzNjMwMDAzRUEwRjU0QkEwM0U2Nzc4MUQ1QTU2N0ZGNDE3OTg0Nzc5Ci06MTAzNjQwMDBDQjFFMzU3RDM0M0RBRjlFQzc5MjU4QkFDQTE5QTYxNzE2Ci06MTAzNjUwMDA0QjI5QzMxN0E5MjZBMUYxMTQ1RTFCMkY1QjZBMjIyMUY3Ci06MTAzNjYwMDAyREUwNjNFOTM0NzJFMjJBREFGNEUwQzA3NEEwMjM1QjRGCi06MTAzNjcwMDA2OTJGQTlBM0NGQzA2OUUyMEQ1MUI4QTdGNkY3QkMzNkYwCi06MTAzNjgwMDA4RUI2NzdENDQ0MzI2MUJBODFBNUJGQ0QzQjc5RDVGMEVGCi06MTAzNjkwMDAzQTBCMzhBRkU5N0Y0MjRCQUMzODFFN0U0NzQxRjFFRTIyCi06MTAzNkEwMDBCNjYyQkI4OUIzQUU4ODdEQUVDMEVGOTIzNTRDMkYwRkFBCi06MTAzNkIwMDBDMDJCRTAxRjk5RTlDRDc1NUM2RjUyRkQ4QUYyN0E2MUVCCi06MTAzNkMwMDBENzA0RDRBRkEwRkY0MENFM0Q5NUMwRjQzMUM4M0Q5MEEzCi06MTAzNkQwMDAzMzZEOEVBQUFCMUM3NDlFNjY2N0Q1MTQ0NzE5MUJDNzQxCi06MTAzNkUwMDA2NzgzRTkyN0ExRkU4OEE3RUI3ODNEMjREQUE1RTZCNTM0Ci06MTAzNkYwMDAxNkI3NUFDNzZFNDdGOTBDRjExNkREOTBDOEU0ODgyQzRFCi06MTAzNzAwMDA2MTc5RDFBRjc1M0RBQjEwM0UxOUU5RTZERUNEMzkyOEMwCi06MTAzNzEwMDA5NzFCNDg5NzFFRThCQzg5ODRGNDQwQzc4QjhDMjQ5ODdCCi06MTAzNzIwMDA0MEU5NjIxMTZEOTY0ODlGOEJENzFCODgxMkIzN0U4RDNFCi06MTAzNzMwMDAyMTc1Qjk4OUNCODVCQjQ5MDRCRkJGN0I2NzVDN0QzNUVCCi06MTAzNzQwMDAwOURCNjg3REIzOTE4NDJERjBFQzU1RDdCNzUwN0Q4RUExCi06MTAzNzUwMDA3Q0Q2Rjc4NTIxRjYzREU5NjZGM0JEOEJBRkJCQTMzQTc2Ci06MTAzNzYwMDBBNEY1RDM3OTZGMzA1MURERUE4NDA2NURCODNFNTM5N0Y2Ci06MTAzNzcwMDBGNUUwN0EyNjk2Nzg3MzFFMDZCREYyMkI5RDY3MkJBNTgxCi06MTAzNzgwMDBEQjNGRjBGNTEyRjgzOTY2QUZBQTAwQkM5QkI1MUE5Qzc2Ci06MTAzNzkwMDA3RkY0NjEwM0UyRTcyNEQ1RTNCMEZFNkIxREU0QUU1OThDCi06MTAzN0EwMDBGNDc5QUU4RDc4RjM3NTgwMjY3QkQ2MkNEQjQ4M0NBRjYwCi06MTAzN0IwMDA3QUM1RDQwMDc0RDNFMEQwQThFODJBRDNBMUMzNzJGOUEzCi06MTAzN0MwMDAwQThFRkZFNTk2RDBENjFDNDRGNzE0QTBBN0YyNUNBMUEwCi06MTAzN0QwMDA1N0M5OTQ5OUI0N0M0QzQ3RUQzQjVBNkU5OTYzRjU0M0I1Ci06MTAzN0UwMDA3RjAzNjA0RkQwRjJGRDBFMjZDRkVFNzdFODcxM0Q0NUE2Ci06MTAzN0YwMDA1OUNDNTdEMDBEMUQwN0ZCMzM1RkM1OUUwMjhFNjU0MzI0Ci06MTAzODAwMDBFRDlGNjA3NEMzRjVGMEJBNDY3MzBGRUFFMTIxRkFENTczCi06MTAzODEwMDAxMEE0REYyMjlGMUVGMEZBMEE5NzJCRjNDMTZFQTFGOEM1Ci06MTAzODIwMDA3RTg1MTIxNEM4OEY2MDJGQjM1RjI5M0VFNjJEQTVFNTczCi06MTAzODMwMDA1NzRFMTc3OTU2Mjk0MDY3NENERUJDRjIxRDMzNTk0MTZCCi06MTAzODQwMDA4NzdDRjNDQzRGMUZGQjI3NUE3RkZFQjQ1RTMxRDBGQTQyCi06MTAzODUwMDAwNTQwNkI3NEZENUU5MTg4MTdDNjBCQkU2ODA4ODFCRTdCCi06MTAzODYwMDA2Q0QyMzM3QkI0NjlGRjE1Q0M5RUQxRkIzNzJDODQ3MUFECi06MTAzODcwMDA1RUQwNzlDMERFNjk0QTA4M0RCNzAzRUJEMzNDOTRBMjIxCi06MTAzODgwMDBDOUFCM0E4NkNGRTBDQjE2RjZCRDM5RjRCMzlGQkJBMEU3Ci06MTAzODkwMDAzRUQ1MTNBNEVEQTMyNkZGNDY1OEQ3NzQ4MzkyODg3QUE5Ci06MTAzOEEwMDBGOUQ3NUFDMkM2MDkxNzM4Mjg1RThGODc5OEREN0Q5Q0U0Ci06MTAzOEIwMDA1NjQ5MzA0RUJGMERGQkExN0M5QUI2OTBGNjczQTIzM0U5Ci06MTAzOEMwMDAxNUU3NDNFNTJGREE1OTI3RDYxOEI2ODJGQzVEMzczNDYxCi06MTAzOEQwMDBBRTg0RUQ4RkVCN0NEM0QzNjhGOUY4OEJDNTlFRTVCNDRECi06MTAzOEUwMDA2QUQwQTcwRkVCMjkzRDA3RDYzMkJCQUY1RUEzNkMwMUIwCi06MTAzOEYwMDBGQzkwRkQxNjlDODc1ODhGQzA5QUM1QjU1MDFGNThCMkQyCi06MTAzOTAwMDBFQzE2OTA4RjYzRjEzOUM4N0IxMjIzMzdDRjkxNjgxNjdDCi06MTAzOTEwMDBGMEQzQzY4NkRDREUzMEU4OTVGRTg5MUU1NEFGQzQ0RDc4Ci06MTAzOTIwMDAxNzlGRDI4RDlEQjUzREE5NjNGODhERUVEMzIxM0Q1RkU0Ci06MTAzOTMwMDA2RUZGNDAxNzcyMzlEMzQzMzA0RTgwQ0E2NTIyRjgwRkFDCi06MTAzOTQwMDBFNTcyNEM1OTNCNUE5OUFENjNFMDk1NTQ2RURGQTlFQjkzCi06MTAzOTUwMDA1MzEyRkM0NzYwNUQ1QTlFRkM4RkY3OTcyQTMwNUUxNDI1Ci06MTAzOTYwMDBFNTIyRTk0QTQ2QkUzQ0E5RjNDRTAzQkE3NTU0ODdGNTcxCi06MTAzOTcwMDA3NTMxN0FGREE0ODNEOTk5RjUwNjZFMDc5MkIwM0U5NjBCCi06MTAzOTgwMDAwRjQ1N0Q3OTk1OUFFRUM1RjMwNEE3N0Y1Qjg0QzlGNzRGCi06MTAzOTkwMDA5MUY1MUFDRTFGQjcxQTQwOEY0RDY1MjA5MzZDRDAyMzM2Ci06MTAzOUEwMDA1NkU4NUZDMUZFQTc5RTBFRUJFQjY5Mzk3QjU5NThCRjA1Ci06MTAzOUIwMDA4ODNGODE0RjI4QkVDMzQ2M0FFRjkzMUI2QzhDQkYyOUNBCi06MTAzOUMwMDAxQUEwOUY0NTE1MDRGNUU1MjIyREI1NjM0QkUwQkREMjQ1Ci06MTAzOUQwMDAzNzQwRDdFNUQ0OEIwRUE0MkZGMjY3OEExNThBRUZGOTBBCi06MTAzOUUwMDA4NEI3MzM1MEJCOTdDQUIxOTczQUE0MzBFQzBCRTZBRjFCCi06MTAzOUYwMDAzNzZDMzVFNTAwNUY3QkI1MzY1OENGQ0QxMkNBQjFGOUNCCi06MTAzQTAwMDAxRDk1MDUxQjY4NzlDOTlFMkI3MEZEMTMyQTE4NUQyRTI0Ci06MTAzQTEwMDAwOTM5NTAyRjRFRTVGMkIxREUxMEQyQTMxREZFMzM4OUQ1Ci06MTAzQTIwMDBDMDNFODhGNjhGRjY3NDEzRkQyOEFENjQyNDFFNDBBRUE4Ci06MTAzQTMwMDBBQkU4MjExNDUzQTZGNkQxRDQ1RTI2NTcwOTk1RTcyNEE2Ci06MTAzQTQwMDBDNjZFMTJGMjFFRTQzODg5QjMwM0Q1RjQxMTE0RkE4ODU1Ci06MTAzQTUwMDBDOTNEQTJBNDgyREMxMzcyRjk5OEREOTdFODQ0M0IzRThECi06MTAzQTYwMDAzRjE1RDY5N0FFMjc5MzlCQkIyNUM0NkIzMzY5NDU3RDI1Ci06MTAzQTcwMDAyMkY0QzBEMEI4NUM4RjlDRDIwNjk5QkUzMjNDODFDRjc0Ci06MTAzQTgwMDA3QzY3MEVBRUVCMTJEMjhCRkE0NEU4OTVCMUU4MjBERkVBCi06MTAzQTkwMDBBOUUxRkI4OEQxRTk2MEJDNTNDMUZFOUE0RTkzRjA3NTUxCi06MTAzQUEwMDA3NEJDQTY2NTI0REMzQzg1M0Q2RDUzNTAzRjMyM0Q2OUI2Ci06MTAzQUIwMDA2NDdBMTI5RUU2Q0JEMDk3RjFGQTMxNUUxRkM2RUJDMTU1Ci06MTAzQUMwMDA1NDNERDM3NzYyOUQ4NTNEOTMzQThERDkwMTUzOTc4NUI3Ci06MTAzQUQwMDBCNEE0MDhGQzM1REVFQTk0RTQ2MUJCMjZGMDhFRDFBOERDCi06MTAzQUUwMDA1QzA5NjUxRkM5MDVGOTlFNTBGOTYyMkFBRDBGQzhDNDZCCi06MTAzQUYwMDAwQjdDNjVBMTc4RTlBMUVGMzc3M0ZCQjcyNzk1Q0RENzhDCi06MTAzQjAwMDBBRDY3RjRBQjkzN0RBNEQ4MEFFQjEyQzE3RDZGMzQ5OUY1Ci06MTAzQjEwMDBEODgxMUUwNTNFMzdEQkU4NzcyNUYwMURFM0I3QTFFRjFFCi06MTAzQjIwMDA4REE0QzMxQ0YzN0RENTJCMjZENDNGMTc1RUI2ODUwQzIwCi06MTAzQjMwMDA2ODhGRjhCMzFEQjRCRjk0REYxQkQwNEUzREY3OEEwRERDCi06MTAzQjQwMDBGNUU5MzlBRTBGNURDMkVGNDAxRTYxN0UxNkJFQUU0MTkzCi06MTAzQjUwMDA1MjM1OEUwMEVENEIzM0M2ODEwODE0RjY1OUIzODNEOTI0Ci06MTAzQjYwMDA1OTIzRUQyMTVFOUYxMzk5QzNFOENBODBGQkNEMEI4RUNDCi06MTAzQjcwMDA4MTA3QTA0Q0UxMjFBMDdGNkU3MTMyN0UwRkVDOTk1NjM3Ci06MTAzQjgwMDBGQzQzRkEzRUUwQjM3QTE4RjZGREM1NDBBRjA2RURGNzA4Ci06MTAzQjkwMDBFNzE4Mjk3RDRERDcyRThCM0U0OEU3RDE5QzY5QjU4MzI4Ci06MTAzQkEwMDA3RUFCQ0VGRUQ3REZERDQxQ0IxRkVFRDExMTAzQUNGM0YwCi06MTAzQkIwMDBGNjY5NzM0OUVFRDhGMkI3MzFBNDNCM0UxMEMzMkY3N0I0Ci06MTAzQkMwMDBFRjU0OTc5QjdCRDVFNTQwOUZCQTdDQkZEM0U2M0E2NTFGCi06MTAzQkQwMDA0MUQ5RTFGOTgyRDJCNUMxRDA3QUJBODdDMjZCNzhENTIyCi06MTAzQkUwMDA4MEZBNjg4NkQzRkY5MDEzRTRBRDI2N0ExOEYwNkNDODhCCi06MTAzQkYwMDBGRTc4MEFGODNCMDJGRDlGNDhGMDM0NTAzNjhBMTQzMUIzCi06MTAzQzAwMDBGQzAzNUY1RjMwQ0RDRkI2OEY4MkI3NjFGQzExQTMwNjk2Ci06MTAzQzEwMDBGMTRDQUQ3NUY2NDQzOTE3RTA3Q0UyRDI3QjNGM0M0MDc1Ci06MTAzQzIwMDBFN0JGNjg5NkQ5QkUwMkRGNzg2QkNCQ0FDMTlFNDQxODQ1Ci06MTAzQzMwMDA0OTYwRkQ0RDFGQzJCRThCQjY2Qjg0RjUzRjM1OTNCNjEwCi06MTAzQzQwMDBBMzcwMzVBQzY3RkFCMDg5NDQxMjgwNkY1QkE4REQ2OTU4Ci06MTAzQzUwMDBBNDRCRkMxQkNFNkY3Nzc3NDRDQkMzRjQ3RkJCOUQzNTYxCi06MTAzQzYwMDAxMzAxNEVGOTJGQjIwRkU4RTM1MUU4MzdDNjRFREVFQUYyCi06MTAzQzcwMDA2NDcyRkM0QkZCOTkzMjQ2Rjg5OUI2MDJGRTlBOEQwM0FBCi06MTAzQzgwMDBGQTRBM0FGRUY1N0ZGOTBDRTVGREUyQTVBRkUxM0U4Mjg2Ci06MTAzQzkwMDBDRTYzM0VCM0FCNEQwQUM4QTdDNTBGMUVDMEY3NjJERkE3Ci06MTAzQ0EwMDA3NjJBRDM4QUZCQjZENzM2MTg1OEQ5QTFDN0YyQTlDRDQwCi06MTAzQ0IwMDA2QzVGQjlCODU3MEFDMTNDQTU1OTE3OTMyQTQxMkY2Q0JDCi06MTAzQ0MwMDBENkQ5MEQ2NDI0NUVFM0YxRjhDMUE2QjcxM0MwRUZGNUIxCi06MTAzQ0QwMDAwMTIyMURGNjdCMTJCM0M3RUNBRDA5Qjg3RjUwNUExMzExCi06MTAzQ0UwMDBDMEJFMENBQ0JGRjE0MzkwOEY4QjM3NkIzRDYwMkY5MDAzCi06MTAzQ0YwMDA3RDM2RjRDRjJDREU3Q0MzQzQ4NTU2RThFN0QzQTQ0QUQ2Ci06MTAzRDAwMDBGMDEzNkRCOTAxM0M1NEQwQ0UxNzYyN0U5RUM4RjVGNDE1Ci06MTAzRDEwMDBCREJDRTU2QTA1RjhGMUQwNjYwNkZGNjI4NzcxMDdEMDgxCi06MTAzRDIwMDBEMUY1N0ZEMTIyN0ZDOTFBRTIwNzNCQjk1QkVGOUQwODJECi06MTAzRDMwMDA3Q0FENkNEQTNFMURENkU3ODM5OUU5MUE2Q0JGNEIyMjQ1Ci06MTAzRDQwMDA3NkMwOEI2MzY5MEFCQzVGMkNDOTNFRTBFMzg2RjU4REMzCi06MTAzRDUwMDBCNUIxNzY0RjlEOTNGOUM3MkFCMzk3QTUwQzU4OTFBRjhCCi06MTAzRDYwMDBFNjgwM0U2RERFNENGOTA4QzY5RkY1REVFRkVFNzAwRDg1Ci06MTAzRDcwMDBGMzk1MzQ2QkZEMkQ1M0ExRkY2Nzc1MUVFMEJCMjE3QkNFCi06MTAzRDgwMDA2NkQzQjc5MEJFRTAyRjRDRjFCNTk4RTNFQkFCRjI5OTU4Ci06MTAzRDkwMDBDMTIyRjhBNEI1MDBFNEVBRTIxNUFEMDVGNjUxRUM4Q0I5Ci06MTAzREEwMDAyMTNFRDk0NEY5NzIzMjIxQTc5RDEyRjkwMkZDOTMxOUUwCi06MTAzREIwMDA0RUQ1QkU2M0FDN0Q5QUI1NTA4MzdBQzZFODIxREVFRDYwCi06MTAzREMwMDBGNDk5NEFCN0M5QjAxRkI3MjVDOTU4NkY0QkQyMjM3REE0Ci06MTAzREQwMDBDQjdGQkE3N0U3NkZFOEJDOUU3NEZBMkY4MEJFQ0MyNjAzCi06MTAzREUwMDBERTYyRDA2QjRBRDQ1RTQ1Q0Q1QTQwMzVEQTYxNjQxMzQ5Ci06MTAzREYwMDBCM0FGODlDQ0ZDODVFQjkyQzk4RTU1MzFGQjczNTMxMjVFCi06MTAzRTAwMDBEQjRGNTAzOUYxMDVGNDczRUVERDNGMUYwNkZDQjY2NDVECi06MTAzRTEwMDA3RDNDMDVFQzg1QzBDNUNGRjRFMDVGQjNGNjRCMjhERkYxCi06MTAzRTIwMDBBRDFFMUYwMUJBMDlGNENGMjQwQjhBODZFNTcyQzBDMzA4Ci06MTAzRTMwMDBGNDQ2RkNCQ0U2MjRFOTk4MUM3NTQ1QjE5RjRBOTc4MjdDCi06MTAzRTQwMDBFNTZFMDc0MTdBREFCOEQ0OENGNkZFNDY1N0M4MDQ0MENFCi06MTAzRTUwMDBGRkFEN0MyQkVDQTc0NkVFMEYzNDZFRkI4NTU3MEI3NDQxCi06MTAzRTYwMDAxRTkyRUNFM0ExQUMzMEZFMTg2Qzk4MTdEMkQyNzEzRUQyCi06MTAzRTcwMDBEQzk2MTdDNEYyOUU0QThGOTZENjU5QjdGREUzQ0E1QzBBCi06MTAzRTgwMDBDMDUzOUZDRTAzRURBRDlFODEwNDk4REY4N0RCNEUyNEE3Ci06MTAzRTkwMDBDMEZDMUFCNjY5NzFERTBEQTE0RjUyMTYxNjBEQ0IwOTgyCi06MTAzRUEwMDA5REM2NUY5MDA0NzY4MjVEQjJDMkY4NDI1RTdDQjhFRDNBCi06MTAzRUIwMDBEMzk0MDU1NkU2M0Y0MDdENUEzQTNBNUVDQ0NFQ0FDOTA1Ci06MTAzRUMwMDBGMEZERjVERjY0RUI3MjY2OTcyMTA0NzJGMDhDODlGOURFCi06MTAzRUQwMDBGNzQ1QkIzMzM2QTZGRkFFNEIxMkZFQ0RERTJDRDAzRkVFCi06MTAzRUUwMDA0MzY1NzlBMjA2RTRDNEY3RUQ2Q0ZFMkU3RDZGMTZGMEYzCi06MTAzRUYwMDBFNTQ3OTJCQTlGMjUyQkI1MjQ0NEU1NTJFMzRBODk4NENECi06MTAzRjAwMDBBOENDM0ZGM0RDNEI1OTIwRkYzRkRDRkU1MjU2NUQwQzQyCi06MTAzRjEwMDA3Q0YxREY4OUU3OEQ0OTZBN0Y5QUYwQUZCQUY0RTEwQzUyCi06MTAzRjIwMDAxOEFGQ0U2MzYwN0VDQzMxRkNBQkEyM0Q1OUNGRkNBNDcwCi06MTAzRjMwMDA4Mzk0NkI4MTBFQzU3NzgzMEQ2NjJGRDhCQjgzQzQxODFECi06MTAzRjQwMDAwMjk3NUI1RDNGRjdENzdBQkRGOTJFRDhENzg4RUZFM0FDCi06MTAzRjUwMDBGQTVGMERGNDQ0RTE5MkZBMjRGNDI3NTg4QUEyMjg5RkNDCi06MTAzRjYwMDBCRkI0RkM3N0QxRjU4QzkxRkY3NDlEOERCMDRFQ0RDNjVBCi06MTAzRjcwMDBFOEUxNzEwNEU5NDMwRjc4RDNCNzU4NjVEMDU3MjlFRENDCi06MTAzRjgwMDA4Q0JFQTJGNzZCNzA5RkU1MzIyNzRDODFCODgwM0VERDc2Ci06MTAzRjkwMDA2RDA1Rjk3NjdEODFCOTQzOTMwOEVGQjM0MkQwM0UzMzg2Ci06MTAzRkEwMDBCRDEwQkYwQjU2MzFGQTBGQTYxMEY0QzNBNTkxNTYwOUU4Ci06MTAzRkIwMDBGREI0NzZFNkU3Q0ZBODIwRjY1NUI0RjhCMzI0NjZFNzVCCi06MTAzRkMwMDBCODg5NjdCRDM2MEZENzVGQzIzODA3Qzc4QkQwMEY0MDlGCi06MTAzRkQwMDA0NzIwMkZDRjQ4NDZBNDIzQTk1RjQyN0I1NEFCRTk5RERECi06MTAzRkUwMDAwN0ZEOEU0NTU3MkJDNUJBNzJCQTFBMkFGRjlERThFQTFCCi06MTAzRkYwMDA0OTQxQzcyM0U4Q0FBRjIwNURCOThEQTNEMzE1RjcyMzg0Ci06MTA0MDAwMDA1Rjc2N0IxMkY0QzFCRTM2OTVFMzZCMkQ5NzNGRDFGQkYzCi06MTA0MDEwMDA4REMyQUYyRUMxN0M2Qjc5N0ZCNTQ2NkI1ODBCN0FDNENECi06MTA0MDIwMDBBM0ZCMzhENjNGQkM4OURBQzVCMDdGNEEwM0JCOUUzRUFFCi06MTA0MDMwMDBDN0I1Q0Y1NzcwREQ0ODY0MDBGQzA4OTZBQjhEQTgyRjNDCi06MTA0MDQwMDAxRkQzNDQ3MkMwOEU0OTlERDRCQTFCRTgyMzc1NUU1MUJDCi06MTA0MDUwMDA0OTNCRUUwQjMzMUNBMDE3NDBEN0EyN0Y3NEU5MzQxRkY1Ci06MTA0MDYwMDBCMzIzNTgxQzI4M0E1MzhGRkI5Qzk2MDcyQjdEQ0M4RThDCi06MTA0MDcwMDBBODQxN0UwOUFDMzYyOUEwMDdBN0Y1RTcyQzA3RkEwODY2Ci06MTA0MDgwMDAyQzIzMUUwM0QyNzFDRjg2NDVFMENGOUQ2REY1ODBBQzA5Ci06MTA0MDkwMDAxM0YxMjVCMjUyQ0Q3NzlEMTI4QjUzMDU2RjIyMTgwRjY1Ci06MTA0MEEwMDAxQjhFMzMwRDZDRjkyMUU4RkZDNjIyRjQ5QjBDRjk4RkFGCi06MTA0MEIwMDBGMzA5RUE4RENCOEQ0M0Q2QUQzNjIxREU0NUZDNjhEMEMxCi06MTA0MEMwMDA0NjExNzQyNUZBOTFCMTNGOTI2ODY0N0E2OEE0N0M0MEU1Ci06MTA0MEQwMDBGRjczNEEwNTExN0ZFQkExOUMyRUNBM0NERTIzRjg1RkRCCi06MTA0MEUwMDBDNEEzNkM0NUJFMUNCMEM4MkI5QzM5QkYzMjQzOUMwNDkyCi06MTA0MEYwMDBGQzc3NkNCMzE2ODRGRDAwRkE4RDU5MTlERENBNEY2OTNGCi06MTA0MTAwMDAyODIwRTk1MEZCOUZBQkFBMzM2MkNBQkNGREQwRjdDMTlGCi06MTA0MTEwMDA1NTM3NTc1RjhCRkE3N0E4MUVDMEE2N0E1OTk0QkQyNkVCCi06MTA0MTIwMDAwNUUyNTVDM0Y1MzJCNTgzOEQ3RDEyRkZCRUUyRTYxQjc1Ci06MTA0MTMwMDBBOEFBMUU5NEM0Rjg3RkVFRjQ4MjFGRDE0NDU0RTNDNUFDCi06MTA0MTQwMDBDMjI3QzdGNUFGQTNGRDVCMTVERTNFMzhFRTI2RThFRkNDCi06MTA0MTUwMDBBOTEyNTE3RUEwRDM0QkUxNUJBQjUzRjc4NzI4RTVERjczCi06MTA0MTYwMDA0MzQxOENGNzdGNTMwRUFGNUE5RDMxNkMxRjUwN0JFMTVBCi06MTA0MTcwMDBDRjQ5NjVDMzc2QzJBM0VGRDU3NjVENDlDN0IyRDgzRkI0Ci06MTA0MTgwMDBENTgzRkUxNUZBM0VFMDkyRDAwRTg5RTdENzA0OTdGNDY2Ci06MTA0MTkwMDBENUVDNkI2NTg0N0Q5REUwNjJGNkY1NzQ2MDQ5QkEyRkJECi06MTA0MUEwMDA0MUY5MUQ1OEU2MjM2MERGNTJCQkM0RTk0MkJCRTRFMzlBCi06MTA0MUIwMDA1MzA3NjhGREI5NTk5RjFGMUVBNzQwQkI3QkU2QzFCRUQwCi06MTA0MUMwMDAyQTcwNTE0NkY5MUJEOEE5MEQ0OTk0NkY4Q0ZEQ0NBRUNECi06MTA0MUQwMDBBNkZBMUNFMzA1ODI3RTk2RDgzOUZEMzg4MjA0RkM5NzQ2Ci06MTA0MUUwMDBEREZCQTQzMkEwNzc0MjVBQjM2RUEzNkJGOTAzOTczNzc1Ci06MTA0MUYwMDAxM0M3RTFGQkNERjg3OTk3QkI5ODVGMjA1MDU4QjVBMTY0Ci06MTA0MjAwMDAwMEZBREYyNjExQjAxNzU2MTUxRTRGNTk4MEZCQTk2MzFGCi06MTA0MjEwMDAyOTBCNjNCRTZCRUM3QjBBRjFEOUI4NTMzNzJBMUVDQjRFCi06MTA0MjIwMDBBOUUxMDQ3ODZDNzlGOTQ1MkZDODhEMzMyMTA5NjU0MkRECi06MTA0MjMwMDA4MzFDRUEwNEJCQjZBMTQxMDMxNjIxMjkwRENEQkYwMzlGCi06MTA0MjQwMDBFMzFGNzNGNTY0M0M5RDVGMDZENzc3ODE5REI3MDZBNzkyCi06MTA0MjUwMDBDMkJDRTlCRjEyN0RCNUQxQjcwOEU1QzRDNkI5NDYyQkNCCi06MTA0MjYwMDBDNjkxMEFFQkVFNDEzQ0Q4Q0Q1RUMwQzNBQUMyQUEzNEM3Ci06MTA0MjcwMDAxOEE3NjVFNjc0M0JDNjREQTgzRDA3RjUyRDBGN0UwN0QwCi06MTA0MjgwMDBGRDQ1MDJBRTU1N0RCQTFBQjA3N0NBQTk1REY3MEIwQTkzCi06MTA0MjkwMDA3N0E2NzM0NjhEODdGMkY1MzhFREVFRTJGQkFDMTA1NzRBCi06MTA0MkEwMDAxRjVEOEVGRkJGNjQ0NjE3MUQ5MjJGRjhFRDUyRjQ4RkVECi06MTA0MkIwMDA5MjU4N0Y2Nzc2MUZCMzFGNkY3MUU5NTVGRUYxNUI1QzAzCi06MTA0MkMwMDBDQ0FFQkQzNjE4OTkwNkU0QjI1RjFFQjA4MDVEMUQyMEVECi06MTA0MkQwMDBERTRGNjA1RjREN0M1NjY1M0JBRTEzOTM1RkFFMzYwNTk3Ci06MTA0MkUwMDBGRDY2NDZEN0MwNjM1NzQyRkRCNTMyRUU2Nzg4M0NGMEE1Ci06MTA0MkYwMDA2MzE4Rjc1Q0E3Q0JCMzhBNzAzRTgwRjI4MzQ1MjE5MEE4Ci06MTA0MzAwMDBDN0ZCNUNGRUVGQzJGQTk2NzM3QkY1RENDQjM3MTY4M0Y2Ci06MTA0MzEwMDA3RjUxRDg1RjlEQ0Y5OTUwNkY3NkRBOTQyNzZCNDA0RUNFCi06MTA0MzIwMDBGRTQ5NjY3OTAzQzY2ODY0MUFFRDY3QzlFNzRFMUNCNzkzCi06MTA0MzMwMDBEMzE0RUE4NEY1MEZGNjY4QjFCRUM5RUE1RjA0RjREQjcyCi06MTA0MzQwMDA3OEVCRkEyOTk4ODc2MDBEMTU4MDFFRDVCOUJBMDhEMDg4Ci06MTA0MzUwMDAzMUREQkVBMDFGQzVFOEYyMTE4ODIzNEYwQkNFOTcyNTkzCi06MTA0MzYwMDBEMDE3NzE3NkNEMzRGMDYzRTFCRUM1ODU3RURDMkFDRUYwCi06MTA0MzcwMDAxRkUzMjkxNTlDMzIyMjJCNzQ3QzkxMzQ2Q0U3QkNGOTI1Ci06MTA0MzgwMDBFN0Q5MzJCQzE0RjY4RkM2QzhGQ0VFRDU3M0NEMDRFQzY5Ci06MTA0MzkwMDA1Q0YyNDhGNEIwMDZGQ0Y4QUUwODAxN0JCOEI5NTdDMjJECi06MTA0M0EwMDA3MTlBMEI1RkQwQzNGRUU1RUU1RUM2REYwMUJFREZBMEYzCi06MTA0M0IwMDBGOENCQzI3ODk0Q0JDMkVEODEwRTQ2NjcyNDcyNzgxQzhDCi06MTA0M0MwMDBFMEY5NzlCNjlFODREMDc2MzE3RTU3NDI5NjMzNzlDMDMzCi06MTA0M0QwMDBGQkQzRjNGODQzMzNGNzM3NTE0RDg4RjVBQjVDQzJDRUNFCi06MTA0M0UwMDA1OEExOEU1QkYwNzFENzQ5MTFBRjE2RjA1QTJDQTlGQzc5Ci06MTA0M0YwMDBFNEUyRDlDM0JGNEYzQzE4OUQwRUZDMUJBNUY0MDU3RTFCCi06MTA0NDAwMDBBNzBERDJDQzdCNUVBN0YzREI1MDM2QzkwM0E2OTg5QkUxCi06MTA0NDEwMDA5MjkzQjYwNERFNTM1MkE0NzgyRkVERkI2NDNBRDAwRDhDCi06MTA0NDIwMDBBOTIxQzhBRjJEN0Q5NURBNjYyQjhCRUI2MDVFOENBNTNDCi06MTA0NDMwMDBCNTA3RUE1M0VGMkE0NEZEMEM3MTkzNTlGNEZEQjMxQzAwCi06MTA0NDQwMDBBRjY5NTZFNkM3NzNBRjA4RTY0MDFDMzRGMUEwRUY5RTkzCi06MTA0NDUwMDBENzYxRkMyQkNDRTg4NzREQTU2QjYzNzNFMjczMjVGODFECi06MTA0NDYwMDBCRERDQTRGODAwRTg2Nzc3QUQ1MjAyRjA4ODc4MUZDNDdECi06MTA0NDcwMDAwQjY3MTYwREU3RTMzODNEOTI3NzJCN0RFRTc2Mzk5ODgyCi06MTA0NDgwMDBERkNFNDA2QTAwNUU3ODFGQjIwRUM3MUZDMTlGMDdFM0YwCi06MTA0NDkwMDA0MjdDMEY5RUU3RDJDMjMyRkFGRkM5QzA5NkVEQjhFRjU4Ci06MTA0NEEwMDAzNzYwM0U0ODZEREYxQkVGODBGRUFEMzU5MjVFOENDN0Y2Ci06MTA0NEIwMDBDNkQ5MkRENTg5QjdCRTAyRjQzRjc4RjZENDk2ODcwMUM4Ci06MTA0NEMwMDBBRURCRjY3QTMwRUYyNUNFMUVCOUZFOUJDQzNFM0ZCMzc1Ci06MTA0NEQwMDBEREEyMDAzRjZDRTU3MjlCREE4RkM4MjdDMTVENkMzRjlGCi06MTA0NEUwMDAxOTZGNDcxRTc1QTlGNzI3NDNFNUFGREQ4RTY0RjAwNTA4Ci06MTA0NEYwMDBCN0IzM0MwQjIxREYwMzdDRkYzN0Q4NzAzRTAxRjRENzA0Ci06MTA0NTAwMDBCRjBEQzExMzk3MEZCMjhERTc4M0Y0OEY5RTBGRjJFNkI0Ci06MTA0NTEwMDAwRTRCMTBFOEUxN0NBRjA5RkQ5MjMyOEY3QjlEQjU0NUQzCi06MTA0NTIwMDAxRjAwMjQ3NTM4MEVDRjAxNzkxQjU4NzJFNkU3MUFDQUFFCi06MTA0NTMwMDA3RjcyMEY4QjIzQzkxMjhGMzNGRDRBNEI1ODVDQ0M2QkIzCi06MTA0NTQwMDAwN0ZGOEI4MDVCNzY0Qzc3N0I4QjQwM0VCMjc5Mzc3MTZGCi06MTA0NTUwMDBCRjUxOTNCMzQwNjFGMTJFOTYzN0Q0OTQxMDJFMDA3QjU3Ci06MTA0NTYwMDBFQTU1QUU4NzlBQ0MyQzVFMzVFOEQwODc2MTVEQTMyNkVDCi06MTA0NTcwMDBGRjFGNUQxOEQ3NjJERjkzNUYxQTk0RDhCODU2NEY4ODMzCi06MTA0NTgwMDBEOTc1MjcwQTM1NjEzRDlENjcwRkQ4MDdCMDZFQUI1OUM1Ci06MTA0NTkwMDA3QzZCMjg5RjYwQkZBMUM3QzBFMjkwNTgxRUVDQ0M0MTQ1Ci06MTA0NUEwMDAzOTU5MkZFMjU2RkI5OTNGQUU5RUM3QTc0RUNDNUFGNDFECi06MTA0NUIwMDAwQ0E0NUM3NDQ4QUQzNUIwM0ZCQkIwQUExMkZERTgwRjQ3Ci06MTA0NUMwMDAzQzM5MTM5RkY1MkJENTdFRkY0NUUwQTdDRjFCOEUyM0VCCi06MTA0NUQwMDAwQkZGN0IxREYxRTg5OUJEM0NFQzQ3RDQ1MEZCNDU1OURFCi06MTA0NUUwMDAyOTU3ODFCRUNDMjFGNjE1MjBGRjk1MjA1REFEQUJFOUEyCi06MTA0NUYwMDBCMzgzM0VDMTY4OTczNDEyRDgzOTcyQTdDQjBDRUJGQjVBCi06MTA0NjAwMDA2ODg3MDZGNTU0QjA0M0UzODU3NjAyQ0YzOUM5Q0M4RjZECi06MTA0NjEwMDA3NDREMzJGMzZCRDBBNTBBQzEzOEUyRDlBMUUzNzEwNzFBCi06MTA0NjIwMDBERURGNzJBMjA5QzM1MzIzQjFFN0EzNzZCOTY2MzQ3REY2Ci06MTA0NjMwMDAyREZBRUJEMEI1MUFDMTRGMTdDREQ0QTBERkZCODJERTI3Ci06MTA0NjQwMDAzQjE3RkRDNkNFMDIwMjc5NTQxREI2RDY5NTM1QUMxRTc5Ci06MTA0NjUwMDA3OUU3ODIyOUVBQzNGQUVCNjQ2NjQ4MTJDNTA5RjIzM0E2Ci06MTA0NjYwMDAzNTk5RTdDQkM1RTE2RDYxOTdCQTFDMUY4RjY5MENBOTFECi06MTA0NjcwMDBDQkY1QzQzRjIxMkQ4RkM1MEY2MkRGQTcyNjMzRjk3NTE3Ci06MTA0NjgwMDA2MTU1MEVDN0I3MDdGM0UzQzRGQzk3NjczMEJDNjkzMkM2Ci06MTA0NjkwMDBEOTMzMzdCMzZBMkVEMDQxMkVDNDk3NzNFMEM5RkNBQjJGCi06MTA0NkEwMDA3NDI2MDg3RkVFNzUyRTA5RTkyMzBFREUwRTMwREE4MEJGCi06MTA0NkIwMDBCRTNBNTkzQ0Y0NkY4NTNGMUVFRUNBRTQxNEFFMUZCQ0VGCi06MTA0NkMwMDA2RTg4NUZENkRCRjUxODhGQkU1QzNGNDk1REIyNUEwRTJGCi06MTA0NkQwMDAwRDk1QkZGRUZEMkNEQjI3NzU2QTc5OUU4RDFERTU1MDdCCi06MTA0NkUwMDA5RDlEQ0RFNTg0RTREOTExODZGNzU2NkEyRkMwM0MzQUVBCi06MTA0NkYwMDBCNTI1NjAzRjRDQkJENThBRjM2OEQ5NkY0MjNGNzBGMzU0Ci06MTA0NzAwMDBCMjgxMkNEMEUzMkQ1NTAzMDUxMEI3ODlDNzJGNDAyQjVDCi06MTA0NzEwMDAwQkY5NDVEQkQ1QjlFOEZFMDNFQzg0RDg3NjNDNUY0QjVBCi06MTA0NzIwMDAxRDY3RjVGRTIwQjkwQ0Y2MzkyNzc2QkYwMUZBNkFCNzg2Ci06MTA0NzMwMDAwOUY1MTVGREJGMDMwNkYwQjNCQzlDODNGNkNDODczNkE0Ci06MTA0NzQwMDA3RjFCQjQwQjk4QzM1QjlFQ0QwMUJCODVEOTREQ0RGREJFCi06MTA0NzUwMDA4NjFFQjAwQkVCM0E2MkUyN0NGMDlGRDVFQUI4MUY1OTk3Ci06MTA0NzYwMDBFOTQ0RkYzQkU5NTZCRjZGRDgxNEY3REQ4ODM4NjAxNzdFCi06MTA0NzcwMDBBRUYzM0FCRDdGMjJGMDNCRDUzQjk4N0Y3MEI2NTE4M0I0Ci06MTA0NzgwMDA3OTAzRjU1QUNGMjI5MEI3Njc0RDZBN0JGQ0FDOERBREFCCi06MTA0NzkwMDBENzk2QTE3NUY2QTBCREI1NjVDQzc1RjYxNEMwM0FENzBECi06MTA0N0EwMDA2Qjg4M0ZCNjlGNjY1ODY3QkFCRTREN0M5RENGQkU3ODdBCi06MTA0N0IwMDA3NTAxQUNGM0M3QkJBRjJFODA3NTVFQTdFQkYyMDJERkNECi06MTA0N0MwMDBCNDM5RkM1QjkzNjlCRjI3NkZGMEExM0QyNUYyNTgyRkU4Ci06MTA0N0QwMDA5NzFFRjcyNEFCRkQyQjQzRTVGRjIxRkZDQTU4RkEzMEEzCi06MTA0N0UwMDAzQzA0ODc1QTFGQkFGNDRBMDZDODgzM0FBM0UxQkZENUVFCi06MTA0N0YwMDA4QkYwMzdBQTFGQ0Y2ODQwN0ZDN0ZFM0Y3RkJBNjYwNzlFCi06MTA0ODAwMDBDODgxN0UyRERBMjNBMkJGRkRCMjNGMEZFQ0ExRkRFRkUwCi06MTA0ODEwMDBCODNENDE2OUVDRkUxQkI5NUZEODZEMjQ0MUYwQUI4ODBGCi06MTA0ODIwMDA3RDgwQjAyN0UzRTVGMTVCN0MzRTFGMjU3QjZGMDBCQkZECi06MTA0ODMwMDBFNkNCRkE4RDFCRjgzQjYzRTg1MzY2RTc2RTkzM0NDQ0ZFCi06MTA0ODQwMDA2RkRDOEI3RUU0OTY3REYzRURFMDI3M0UxRDYyN0VFMzE4Ci06MTA0ODUwMDA5NjE3OEJEMTZGREMxODdBMkQwQzc5NjVBNDVGQjJDM0UzCi06MTA0ODYwMDBGRUEzNzFEQkIxMDRDODA3MTBGQjVDQkFBRjNEOTM4Q0FCCi06MTA0ODcwMDBGNEE4REVFRjlFMEU5RDQ4ODBGQzAxMEE3NzI1RTg3MUMyCi06MTA0ODgwMDA4QjJCQUEwN0JBNkZBMUZCM0RDODIzNkM5MUEzODdBMTBDCi06MTA0ODkwMDBERjE2MTdDMTNDOTdEMjNFRjVGRTRGQzQ3OTM3RkFGNEM0Ci06MTA0OEEwMDAyODc3MzdGNjRCMjE5MEQ3Mjk3QTdGNEUwNkU4MzU5MjQ0Ci06MTA0OEIwMDA2MUM3NzgyMEU3QjM4QkM5REVENDk0QjJEOEY4QkFGN0QxCi06MTA0OEMwMDBGM0U0RTRFMTdDQjA4MTBEODk0OEJGMDMzQUUyQjU4M0FCCi06MTA0OEQwMDAzQ0RCNjBFM0YyNEM0NkY5RjZDNzREOEUxMENCMEY2MzFDCi06MTA0OEUwMDBFREZGMTg2Mjc2NDJBM0M4MEI5MzQ5NThBNkVCQjU2ODUyCi06MTA0OEYwMDBCNkY3NUQ1ODZGOTBGN0UxMzg3OTFGNUIxNjcxRkJCQjE3Ci06MTA0OTAwMDA0OTE4RjU1MjMzMTkxOENBMEY4QjZEMTcxRkQ3ODc3OEJFCi06MTA0OTEwMDBCOEFBMUZEMjVBQUM4MDFGRUM0RUFCMDdFMDgxRjhCOEEyCi06MTA0OTIwMDBCQTNFQzhGNkVCOTQxRjk2OTYwQ0QzQUY1ODA3NDFCRjFBCi06MTA0OTMwMDAyRERDMEYxRDY4MzhGRTA4RDA2RkEwNEZCMjgzN0REN0U1Ci06MTA0OTQwMDBFNDYxRjREQjQ0Rjc1QjkwNDcxQkNGRUZBNDU3OUQzNzNFCi06MTA0OTUwMDAzQTE2RkY5N0E2QThGNUQxNTBGOUVGRTQ1RkJEM0U0NUEyCi06MTA0OTYwMDBDREY3NjJGRUMyNkYzRjM0Q0Y3RTg5RjE2NURDQkNFMkQ5Ci06MTA0OTcwMDBGN0E5RjFGRTc2QjFDRkJDNUM3OTM4Mjc0NTJEMEY4N0JBCi06MTA0OTgwMDBDQTdGNjc3OTU4MzdCNDJFRjFGMjUwMURDRkY4OUJFNUY2Ci06MTA0OTkwMDBFMUZGNzA1Q0UzOTk3RDRGMjdDMEJFMDNFQzc4RDhBNzk4Ci06MTA0OUEwMDBBQ0RDQUU2M0Y5MTMxNEZEQjFGMUUyRTk1QUFCOTdDNTgzCi06MTA0OUIwMDA0RkI1QTI1RTFEODc1N0E2RjMzODNDRTNFQkQ3NUVENDE0Ci06MTA0OUMwMDBFMkJBMzVGMzM4NzFGMzNFOUIwNzlBMzY1ODE3NjM5QzY5Ci06MTA0OUQwMDAzNjNFN0VCQTg0RUM5RTBFNEIxNTFGNDc2RDAyN0VDRThFCi06MTA0OUUwMDBCQjc0M0M3NTc1MEE4QjhGNTI1ODcyMjA2RjIxM0U2RkQ1Ci06MTA0OUYwMDBFQjM1RUJBNzQ5RkU5ODc1QUYyQUEyMUI4MjUxRThEQjg1Ci06MTA0QTAwMDAyODA3ODkzM0U2RkRDNjE0NjY1N0JGQzZGMzhCREM3QUU4Ci06MTA0QTEwMDA3NjhFNjBBRENERTI4NUZEOEM1QkMzRjI5RjdFRTBGMkM5Ci06MTA0QTIwMDA2RDgyQkMxOEEzQzJGMUZBRjJFRDQ0NDNGMUYyOENBRUYwCi06MTA0QTMwMDAxN0U1NEFCMEQ5RUEwMTM5MjhGQzM3QTJGRjhCM0M1RTYyCi06MTA0QTQwMDA3MUQ5RkEzRjhFREVGN0ZDMEZEMzdCM0M3RUY2OEJGMUZCCi06MTA0QTUwMDBGRUQ2QjhERDdBOEExQjE1NUYxMEE0RTMyMzEwNUZDQTY3Ci06MTA0QTYwMDAxOTQ5QkY2M0Y1MzMxNjFEMUY0REYxMUQ0OTYxNzZGRUNGCi06MTA0QTcwMDAxNENDNTdCODRDMzk2MzI5OEQ5RTAwM0YxMUQ5NjM1MDJGCi06MTA0QTgwMDBDMEFGMDk3RTEyRDQ4RkFCRDM3ODNFQUFBNzdDMjZFNkFFCi06MTA0QTkwMDA2OUIzNzMyNUUyMUNDRTU4NzZFNDA3NDNFQkMzRUNDODM4Ci06MTA0QUEwMDAwRkM2NUM5RjJGNjc0N0RFRUVGMDdEMDg3NDc2QjJEMkFBCi06MTA0QUIwMDA4QkU3MDExRUI1NTFGODYxN0ZGODlDNjFENDczMkVFMjNCCi06MTA0QUMwMDAzQ0M2QTVGQzJENUZDNEQxRDUxN0ZGNEI3MkQ0OTIzQURBCi06MTA0QUQwMDA5NjVERjk3NUNCRDFDRjEzQzA3RjNBNzYzRjQxOUVGRkVCCi06MTA0QUUwMDAxOTQxQkM0NUY3NDk2NDZCOEM1RjNCMTA2MUY5N0IxOTM4Ci06MTA0QUYwMDAxQzVFRjFGRTNGRjhCRUExMjFENTlCOTk0QURGN0ZGQ0U5Ci06MTA0QjAwMDBBRUQxNDgxMkE5OUUyRTY1NzJCMUM1NjdDNUI4NDI0Qjk5Ci06MTA0QjEwMDAyRkNCN0Y2OTU5NDY1MDhFQjc4MERGQjQwOEZDODkzM0FDCi06MTA0QjIwMDAwOUQ4N0Q0RjNBRkQxMzIwOEZFRUQxRjdBQzQxNkQyMkFECi06MTA0QjMwMDBGOERCNjcxMUIwRjNDRUJEQ0JDQTMzOUNGRUM5OTg2N0QyCi06MTA0QjQwMDBCNzZDMDBFMzE4RERCM0NFNjAxRTU2RjkxNzlGM0U1MkQ2Ci06MTA0QjUwMDA1MzhBRjBBMjNGQzE2NTUwOUY2N0I5M0Q5NUM5MzNGMUIzCi06MTA0QjYwMDA5QzNEODQ2RjJGRkFGMzNGNkU2MEY5REEwMTk3RDcwRTAwCi06MTA0QjcwMDA3RTA5RTEwRkI3MjgxMThDMkJCNEVDNjFDNjVCQjk5NkE2Ci06MTA0QjgwMDBDRDg3RkMzMDAzRTlBOTY1NEY2NTMxRjg0RDQ5QUZBOUUwCi06MTA0QjkwMDAxOEVDRERGMkRGNUI3MURGRjdGMTgzRTk5ODI3QjFDRjI1Ci06MTA0QkEwMDBFNUFGMDI3Q0Q4NEE0MzM3ODE3RDlBNERDNzAxQkJGN0Y4Ci06MTA0QkIwMDBFM0REMzcxNTAzREM0MkZFQUQwM0JGMzkxRDdGOUQ0RDlDCi06MTA0QkMwMDBFRDE3Mjc0Njk2NzdCRjY0NDcyNkVFMzM5QkFDRkU1QTE3Ci06MTA0QkQwMDA5OEZGM0ExMzgzMjNCODlEOUY0RkUxRkVGMjc4RkUxN0FBCi06MTA0QkUwMDA3QzlGQUFENUUwMzhBOURGMzU2MjlDNUNDODg1NzUzQTAwCi06MTA0QkYwMDBFMjM3RTYwRENCOTMxMjlFNjcxODcwRjEzQ0M3RkU5OTIxCi06MTA0QzAwMDAyQzRGODU5N0FEMkU3NUJFRTc0N0M5Mzc5NDAwM0MyNURDCi06MTA0QzEwMDBBOUYyNTc4QjY3NTk0N0U0MEI5NEE0QjI3ODk2RUE1Q0UzCi06MTA0QzIwMDBBMkU1MjJCM0E3NzNFRDdBQTQyN0RCNEFDMkUyNTQ5NDJCCi06MTA0QzMwMDA5RUMwQUVCRjM2MUE5OTA2RTdCQ0YyQkJDM0Q3MDI5RTMwCi06MTA0QzQwMDBGNzVGRDQyMDlFRTQ5OTQ3MzAzRTkzMjhCMUYxRjI1NkE1Ci06MTA0QzUwMDAwRjc0NEUwMDdGOENGREFERUI2MDQ5OTUyRTdCMTVBMDQ3Ci06MTA0QzYwMDBGNDQ5QTdFRjgxNTRFNEZGRDY0MjE4QUZFQTVGNzQyQ0YxCi06MTA0QzcwMDBCRjcyOUYwNUZEMENERDU5NEQ5ODVGNzlFRTNEODNFQUNCCi06MTA0QzgwMDA3QzRFRkMzMzQ4NTY2MDNFNjU2RURGNkYzMTRFNjBEQjE0Ci06MTA0QzkwMDAyMzhEOUEyN0ZCNDRBQTE1RjlBNjI1MTg5OThFMzkzNjMzCi06MTA0Q0EwMDBEN0JBNTBDRUNBRkI3RTFGMDRCQjQzRUU5NDQxMDI5MTlCCi06MTA0Q0IwMDAwRTlENTcwM0U3RDM4MkNCMDlGQUY1Qzc3N0RCMzVCMEYyCi06MTA0Q0MwMDA1RUQ5M0MzRjY2NzBGRjdGNEVGMUUzQkU0NUM0MDU0MkFFCi06MTA0Q0QwMDAyQ0JGNDkzN0YwMDhFQ0M3RTRFNTAzREYwQ0MyN0FFQ0RGCi06MTA0Q0UwMDA3MTY4NUFDMDdGQUE4QkI2QTBERjY1OUYwNUZEQUNEOTVECi06MTA0Q0YwMDA3RDc5MkJCRTQxQ0JEOTJCRUQxODA3MUI3Q0U1RUU2Q0UzCi06MTA0RDAwMDBDQ0U3QTdGMzFDM0ZDQTNDMUY0QTY1Rjk0OEYyM0U4QjJCCi06MTA0RDEwMDAwNkY0OTlGQzA0RjFDMEE4QjIyM0E1MEFFMTdFOEE5NkE0Ci06MTA0RDIwMDA2OTNGREYwNzdBNEExRThFOUI4MjNGMEFGNDU0NDNBQUVBCi06MTA0RDMwMDA3RjA3RDBDREQwQjlBNEE1NjY3NjJFODk5RkE3QjUyREMzCi06MTA0RDQwMDA3RDZGMTc5Q0Y3RDlDMkZEQjkwN0Y3NEY5RTg1RkVCRjRGCi06MTA0RDUwMDA0RTU5ODI3NUI4RTA2MEY5OTUyRkE0QjI3OEUyNDhGQzBDCi06MTA0RDYwMDAxRkM0M0NENkRDN0RCRjY1N0E4REUyMDJGQTk3NzU4QzU0Ci06MTA0RDcwMDA1RUU0NEU1NzBGRjgxOTVGNDlGMDYzREVFRTc1MUQ2MTcyCi06MTA0RDgwMDAyREM2Q0RFQzI3N0Y1Q0EzQzRFQzc3RDYzMzNERDNCMkUwCi06MTA0RDkwMDA5M0VEQ0ZFM0Y3Mzc5N0QyMkZCRjFFOTIzMzRDQkYwQzYyCi06MTA0REEwMDA5NUZGNEU3NkNCRUZFMkY0Q0FERkJDNkYyMUVBRkQ1RUUxCi06MTA0REIwMDBCQ0ZEMTJCRkJGMUI2MThGQzdGNTM3OTYxRDIzRjI1MDk0Ci06MTA0REMwMDBBQTg2Qzc2MUY2QjQ0REQ4NDk0MTU1OUU0RTk1OTU5RjI4Ci06MTA0REQwMDAzQjM0QUFGQjVGOUY2NDQ3N0ExMDc5M0IyOUVEQ0E3Mjg2Ci06MTA0REUwMDBDOERCOEZGRTg4QTBERjRFRTQxNTg5M0NBMjYwMTVDQjlFCi06MTA0REYwMDBGNzA5NkE4Qzc4MkVEMTREQkEzMDdGNjgxQzA5NEIxMkE2Ci06MTA0RTAwMDBGQUQ3MDZGMEZDNkQyQUU0MTFEMUVGNEZBNEU2NjJGRjU5Ci06MTA0RTEwMDA5Qjg5NjdBNTE2RTVBNjIyMDFGQzI2QzgzRjQ5MDJCODcyCi06MTA0RTIwMDA0MzFCMTZDMTc4Qjc1OTcxM0MxM0U0OUYyNEUxM0UwMzNDCi06MTA0RTMwMDBGOTM5RERDN0YyNTZBNzM1QjBCODQzM0FENUNGNTA0RTUxCi06MTA0RTQwMDBDRjY3NzQ2OTlBQUJDNzNDNTY5MTU3MjJGMjRGMDQ1RTA0Ci06MTA0RTUwMDBBQTM4QkVEMzI3MkNDQTAxQjkyOEYyNTRENjk5M0RFNTA5Ci06MTA0RTYwMDA2MDE3QzEzOTY4MzhCRjFDNkMzNEYzQkMxM0Q2NkY3NzM4Ci06MTA0RTcwMDA2MzJFOUU0RkZFQjI3OTI5RjE3ODE2RjkyOUZBNDQ3RjA0Ci06MTA0RTgwMDBBNkJCNkNFNDM5Njc0MTM3MzFFQjg5NzA2RERDQzdFQzQ4Ci06MTA0RTkwMDBGQ0FBMDYzRENFNjNCMDcxMDZGQTJCMDcxQjM1MDRFQzY1Ci06MTA0RUEwMDA4MUFBN0UwM0EzQzNCOEYxMzZDRUQ1OTMzMEY0MkI4NzA1Ci06MTA0RUIwMDA0QzIwNEYwNTNENUNDQUNFQTVFQjVCMDhGRUUwODM2RDQwCi06MTA0RUMwMDAzQkYzNEU1MkRFM0ZENEQ2OEJDRjQxOTNENEFCQkQxMkQxCi06MTA0RUQwMDBDRkExQ0UwM0M5RjU4REI0RkM1QUY5MUFDOEI3ODk2NkJCCi06MTA0RUUwMDA0OTk0ODQ2QUQzQUZGQTk2NENGNUM0NjA3MkY0N0QyODc1Ci06MTA0RUYwMDBERkJFRTE3QkFDM0MzRUJBNDVBMkVEOUJEMzNFNjJFRDBBCi06MTA0RjAwMDA4MTM2RDNBOUQ4NUVGRkVGQjU0MUVCNTdEMDdGN0YyNjFFCi06MTA0RjEwMDBGMUY5MUMzNUVFNjRGNEVCM0MxMjQxM0YxMkQ3N0ZBNTRBCi06MTA0RjIwMDA0QzNFQkFBRDdBQjQ5RkRDM0MxRjk1NTRGM0ZDNTQ4OEQ4Ci06MTA0RjMwMDBGOEQwNzI3QjVBMzFDNkVGQUQ0NEQ5MTM4MUZBMEMwMzE1Ci06MTA0RjQwMDBCMzI3MDhFMzg3RjZGMUNDNkY2REU0RjQ0MDMyODRCRkY5Ci06MTA0RjUwMDA2QTIwMDhGMkFFM0RDNzgxREYwRkM5RTczRDg2MTBGMzM2Ci06MTA0RjYwMDA5QkIxRjE4RkJFNzgwNTlFNEIxMjc5QjY4NEQ4MzM2NzFBCi06MTA0RjcwMDA1RjgxRjkzNkFBRjI1QTEzM0ZBNzI5REIzM0UxQkM3QkU0Ci06MTA0RjgwMDBCQjhFREJDMUJDN0NDNEU2NUY4OEYzMDRCRUE0RjZERDQ3Ci06MTA0RjkwMDBEMTFCN0U1MDA0RkM3NDc2RUYwRkYzNDFDRUREQThBNzQxCi06MTA0RkEwMDBGQjg0NTFFNDVBNTkzQTkzNkI4MzNBRUI0QTg5N0VCN0IyCi06MTA0RkIwMDBDNkU2NkYwMTNBN0NDNzMyNkYzQTFDMzE5QTlCNTRBOUZFCi06MTA0RkMwMDA3NzAwQkNDMUU3QjQ4MEQ3NjQ0RTI3OEVEOTBDM0U0NzJBCi06MTA0RkQwMDBCNTRGODIzQ0Q0NzYxMzFCMzdEOTJGN0JGMTVDODQ3RjhECi06MTA0RkUwMDBCNjc0MUI4NUJCNUQ2MkYyOUI3RTk0ODg3NjU1QTE5MjU4Ci06MTA0RkYwMDAwODcxQzgyNjdFRUU1NUNCRTU4ODk2Q0I5MTdGNkUxQjU3Ci06MTA1MDAwMDBDODk3QTlDMTc4NERFRjEzNUFCMEU3N0ZDQkUzRTJCRjUxCi06MTA1MDEwMDBDRDUxOUY5RkU4NzEzM0I4QzU3Mzk2NTZCOTAyRThDRjVBCi06MTA1MDIwMDBBNUFCM0E1MjRCRTk0MEFCRjc4NDcwRkQzMjZEMTgzN0FGCi06MTA1MDMwMDAzRTYwMkI3NzBGRDBFRkE1RUMxRjk1NDIzRTc3N0JFNkM1Ci06MTA1MDQwMDA4RjRBMjFCRUE3NzU3QURDQkU5ODcyOEY5QkQxN0YzNUJGCi06MTA1MDUwMDBCNDAzQkM1OTVBNEJDMUVGRkJCNUY1OTc0OEZCMkJGQThCCi06MTA1MDYwMDBGMkZEMERGNTYzNjA3MDM1MTlBMzU5NzA2RUZFNTk5MzBBCi06MTA1MDcwMDA3RjNCQUNGRjg1RjlDNzMwMkVGQzQwRkFEMUY3MjFBRjVBCi06MTA1MDgwMDBFM0E4OEVEMTVEMzA5M0U3RTM5M0VFNjkwOTk0RUUwRUM5Ci06MTA1MDkwMDBFNzM5Nzg1RTBBOEJCRjFFOUVDMEZDQTg1NDdFQjFGQzI3Ci06MTA1MEEwMDBEMTg5MTJFNjIxRDZDRTY2RTc2MjZGMjY5MThFMDFGQThCCi06MTA1MEIwMDAzRDNBNTk2OEZERjQ4QTFDQjQ3RjZCNzk5RUM4RjQ3NzM5Ci06MTA1MEMwMDA3QzA5QjA3RUQzNkY4RkNBMjBGN0M3QjJFNzZFNzRFQjRFCi06MTA1MEQwMDA5NDgxMTgzRUJFNDk1MTk3NkYyRTU0OTdCRkU1NTE5NzYyCi06MTA1MEUwMDBCRjVERjE5NzA5QjE2NTkzRDk3QjEwRThGNTU1ODlERjZDCi06MTA1MEYwMDA0NzcxMERCMTIzN0ZCQUE0MjBEODVEOTM1RjRBRTdFN0RCCi06MTA1MTAwMDA4OTU5M0VFNTRGRjk3RUYxQTUwQTgyRjUyOTNCOEQ1QjcxCi06MTA1MTEwMDA4RDUwQ0ZGREVGNUE1RTNGRDk0RDhDRDk0RUM0MDdFQTcyCi06MTA1MTIwMDBFOUE4QzRGMzMyNUQxODkzMjI3QkVGQjEzMzNGMzQ2REFECi06MTA1MTMwMDBBQkE3RkRFQzlEQUYyMDFGQTc1ODM1RTQ5QkMwRUJBNUE2Ci06MTA1MTQwMDA0NkI0QzMwNDVGQjQ5QjI4N0Q1MzNDOTY4RjMzOUE4MTQ5Ci06MTA1MTUwMDBERURCNzU5RUY1RDA5N0Q2NkM1MDQwMkY1NzI2MThCMUUwCi06MTA1MTYwMDA2RkVEM0ZDOEE4RDc5NjlCMENDNDRFQ0IwNzFGMzc2MzgzCi06MTA1MTcwMDBCOTVDMjYzRUM4MjNBMTIwQ0U4NkU3NTE5RDI3RDQwQURDCi06MTA1MTgwMDBGM0E1RUQ2MEJFRUQwRTE2NTdENzk2RUI1MUNGRDM3RTRCCi06MTA1MTkwMDA3MTVEMEYzRUExMDkxMTlDN0ZBNThDRjlBNjFDNjZDMTBCCi06MTA1MUEwMDA3Nzc0MjQ3Q0ZGMzRFNzZCQUQ4Njg0NTE4RUE1QjM3Qjg2Ci06MTA1MUIwMDAzOTBFRDFGRUExREY4M0JGRDJGNkEwREZBRTUwQjkxMzA2Ci06MTA1MUMwMDBFQUNGMUIyN0UwQjlBOEMwRDA3OTJGNTkwM0MwMTVEQTYwCi06MTA1MUQwMDBCOTdDRTg2N0U3RjIwNDNGMEJGOTQyQTU1RUJFMkI4NTc4Ci06MTA1MUUwMDAzMDkwMTRGODBGMDUzQjA1RUMwNDgyRkIwMDExQjdDQzlFCi06MTA1MUYwMDAzNDhBN0FEOTBCRkRBNjBEQjU2N0U3RTA1Mjc4OTk1NjQ3Ci06MTA1MjAwMDA4NTM1MjU2MEE3QkNGMTI3QTBDM0IxRTQ0NTYxMUE5Mzk5Ci06MTA1MjEwMDAxM0UyMjlFNEM1MTZDM0MzNDc2QUFGMTk2RDNEMEFFRjBGCi06MTA1MjIwMDBDN0YyMEM5QjlEQURDNzg0MENFMDRCQUQ3OTQyMDZFOEZDCi06MTA1MjMwMDBDRDc2ODc0N0YxQzU5NDBCRTk3NjZBQUUxM0YwNDVEQjZFCi06MTA1MjQwMDBEMUYyQUQzNUM3RjJFNTE4RkQ1NDk4QzZFNDAwNkRFNzFDCi06MTA1MjUwMDA0REEyRjAxRTM0MjkxOUMwQkZBMzhDREJDQ0M2QjU3QzhGCi06MTA1MjYwMDBCREUzQkFFOUI4QjRERDQxMUIxRDk3QjZEQjY2MzI4NEY1Ci06MTA1MjcwMDAzNTA5QTM4RDVGQTFDMDc4OTcxQTk3QTIxRDkxM0Y4MzJFCi06MTA1MjgwMDBBRjAzQTU5MzIwRjhDMTBFREEzNDQ4QUYzMzc4QkVGMkVECi06MTA1MjkwMDBDMTY0MzYxRTI5NTRFN0ZGRTQ5QkU5Rjg5ODVGQTZDRTY3Ci06MTA1MkEwMDBGN0I5NTFEQUQ0MDE3QUZBNjk1M0MyNTZBMENGMzczODI4Ci06MTA1MkIwMDBERDFDQjZGQzQzM0VEODY5NkZDQzJCMzg4NDcyMjY3MTU2Ci06MTA1MkMwMDA3OTA3MTBEMTBDRDI4QkYyNDZDOEMxMEI2OUM3Q0FBMUFECi06MTA1MkQwMDA0Q0U1RTE4RDY5NzRERTBGRTQxRTlEMDc5RDFGNzIzQzU1Ci06MTA1MkUwMDA5RDhGRjZBNUQ5NUI5MzU2MzYxMjdFNDE5RjAyNkVBMDI0Ci06MTA1MkYwMDA1M0UwOEIyMTNBOEQ4MzVGRDAxQkI5QTUxNzEzMjUzNzU3Ci06MTA1MzAwMDA1MzNCMTc5RUMyRUUyNUE0OTVFNUM1MkI5OUMzRjNBMzg1Ci06MTA1MzEwMDA0NDNFREREOENBRTZEMTE4NDRCODZGNzRGQzE4RjNFNkYxCi06MTA1MzIwMDBFRTE4RTdGRjFFQzAzNUY3Q0E0RkYwQkUyMkUyOUUzRkRGCi06MTA1MzMwMDAwMUY2NzcxNERFNzk2OUM5RkY3QkYwQzZEQkY5OTdDQUZECi06MTA1MzQwMDAwRjFGOEJDRkM1RjhEMkFDOUQ5ODFGMUU5ODZEQzU3Q0UyCi06MTA1MzUwMDBGMTY5M0MzRjM2RDBBMEMxQjgwMEREMEZFMjNFQTI4NTI2Ci06MTA1MzYwMDAxODQzMjA5N0E3NzJCQjVDOUM1Qjc4NDU2MkZFRDZFMDMxCi06MTA1MzcwMDA4QjA2NDU3RDNGNTE3Q0RFQjg4Mjc5RTlDMTY1MkNCRjQzCi06MTA1MzgwMDA3Q0M4N0U2RjU2RDA3RTFGRDI3M0ZDOUM0NDc3MzE5M0NECi06MTA1MzkwMDBFRERERjcyOEVBRkI4OUU2MTNGNUZENDQwQkVEMjE3MUZECi06MTA1M0EwMDA2RjhBOTQzMjlDQkZERkRENDM5MEZFQkI2REI5NTg5RjdFCi06MTA1M0IwMDBBRTY1RkE4ODdDODNFOUEzRUUxQ0EyQkExRjY5OUQzOTA5Ci06MTA1M0MwMDAzNDExRjM5NDc4NUVDMTQ2QzgzRkY4NkZGMjBCN0U5QUIxCi06MTA1M0QwMDAyNkE5RkNDMjQzRTVBRkM5MkZEQ0U2RjBFRjAyM0E1QjM5Ci06MTA1M0UwMDA1OEU0Q0Q5MjI4M0RENkVCOTk3Rjk4RDJFQkE2MDg4MTYwCi06MTA1M0YwMDA3NEM1RDY3Q0Q4QTdERDQ0NUFERkQyRTQyMUJERkUwMkI1Ci06MTA1NDAwMDBFOTc1MzJBNUQ3M0MxNUJERUU2MUZDMTU0NDIxMkRFOEE4Ci06MTA1NDEwMDA3NTg4NEUwQkUzRjMwMEZERkI2MERDNkU0N0VGRUY1QjNFCi06MTA1NDIwMDA2MDVGRDM2RkYwQjAzQzY4OTZENzE5MkYxRjYyRTA1OUM4Ci06MTA1NDMwMDAyMDMzNzg1QzVBMkRDMkYzM0FGNDEzMEZDRkU1RjA0REM4Ci06MTA1NDQwMDAyQzlEQTYxMkM2MUY2M0YxNEZBQTRDODJCNjkyNjFGRTM0Ci06MTA1NDUwMDAzMTk5RkQ2RkMxQjg0MzdDRjQwOERCQ0Y4RTgwNUI2QjY0Ci06MTA1NDYwMDA0NTdBOUE3MzA3OEI3RjA1MkNDQzJFODAzODU4MUExREVECi06MTA1NDcwMDA3RjI2MUY3RjRFQTdBRkRBMDFFRDY2NEEwQzBGNjFGQTU3Ci06MTA1NDgwMDAwRjg1N0YxNkFGOUZEOURGOEM3OTcwQjNBQTc1Qzc2MzdDCi06MTA1NDkwMDBFRDIwMjEyRjQ1REM2RDJFNkY3RkFCN0RBNjBFRjJEMjY1Ci06MTA1NEEwMDA2N0Q3QUFFMzVENzNFRjY0RjFCNjM5QjNENUZEQ0MyNUI4Ci06MTA1NEIwMDBBQjNGQzE3QzRERDJBQTAzRkNDREJENTM1REZGNDlEQUExCi06MTA1NEMwMDA1MDlDNkMwMkM0QzkwRTcxM0ZEMDIwRTUxM0UwQTNEN0Y1Ci06MTA1NEQwMDA5MzE3NkZCQTg3RDJGOTg0OUYxNDk1ODBERkYwODY5NDcyCi06MTA1NEUwMDBDNjZENEZEMEYyQjMxQjI3NjFGOUY1OTRFRjdFRkYyODBDCi06MTA1NEYwMDBENDZGMjlDMDcyMzU1Q0UyMDRGQjU2RTA0M0NBNjc4NTZECi06MTA1NTAwMDBFNTc3Q0NDODQ5MDA3REMyRkJCRDg3RTA3QkI3RDlERjFBCi06MTA1NTEwMDAzRDkzQjY3MzRGQzlDNTNDRDY2QUVFRDcxODVDQzhFQTRFCi06MTA1NTIwMDA2RkJFRDJDNjUyOTVFRjUyRDA1RjVDNkQ2NkY3MzUxREU3Ci06MTA1NTMwMDAyOTdFQkIwNEYyQUFBQjczNzlCOUU0RDU0OTUwM0UyNDY1Ci06MTA1NTQwMDA3RDgyRjczQTlDNkJCNkNBQjAwRTJERTlDQ0NGM0VCOTNFCi06MTA1NTUwMDA1MDBBNEZBNDc4QTk3NkYyRkU5QkQ5QkM2QTRCOUU0QkE5Ci06MTA1NTYwMDAwNzNFQTlBRTYyRkQ0Q0Y2NTQ3NkU2NDEzQkNENzkyQzYwCi06MTA1NTcwMDA5RjRCMzcyNjAwRkUwNUJGRTVGMDdEOTVCMDJCN0Q1Qzg3Ci06MTA1NTgwMDA0RUJDRTQzREQ2OTE0NEZCRjUxOTI1MEY0Q0QxNTc3MTIzCi06MTA1NTkwMDA4Q0RENEI2NjY1RTcwMzdEREUxQzE5RkNGNEQzQkMyQzY3Ci06MTA1NUEwMDBFRkI2Q0FCODNDMERFNEUxMkQ3RTdEMjlDQ0NCNkUyQzQ0Ci06MTA1NUIwMDAzRTA0NzkxMTg5MTU5NTY1OThBNzZEMjRCOEJFOTRGRUFGCi06MTA1NUMwMDBDN0E3MDMzRjVFRkQ0OTU2MDIxMDlENTU0REZGODJCRUExCi06MTA1NUQwMDA2NjBBQkFBRjU2RDMzN0U1REJDOUU5NjU5Nzk2REYyQTg1Ci06MTA1NUUwMDBGQTM2MEREM0Y3NThGNjNFODVBQjAyRTFGQTg2NUFBRjhDCi06MTA1NUYwMDAwRDhEMTNDNzlGRjFFMzhFMjUzN0UwMkY1NkZFMEVDM0E2Ci06MTA1NjAwMDBENzhCN0M5ODAxRDk4RDc5QzBBNzVEODI0RjZGMDIzODA2Ci06MTA1NjEwMDBGNDlBMDg5RThGQ0E5NjNDOTNGMDgwNzE4NUM3ODg3QTY5Ci06MTA1NjIwMDAyRjhFNUYwNTdDOTlFMDMzMkYxOTA5MTdGQ0M5QzI2RUQ0Ci06MTA1NjMwMDA2NTdGMkVGMEEzNjRGMDdBRkE5RDk3Mzg4N0UxQTJFM0E0Ci06MTA1NjQwMDBERjkxMEU3QUZDMTEwNkNGNjZBOTk1QzkxOUJFMkYxMUZDCi06MTA1NjUwMDBGRTk3MTYzMURGM0VGNTdDQ0JDREVDMUUwMzM3RjhDQjQxCi06MTA1NjYwMDAzMDc2NTIzQzY5MDhFRUNCNTgwNzMxOUYwMEQ3RTdCMzNDCi06MTA1NjcwMDA4RDNFOUI5RUNFRUQzNjQ3M0REMkNGRUQ1NEEzM0EyOENBCi06MTA1NjgwMDA1RUMyNzRGRjBGNzAxRUQ0MDRGN0MxN0U2RjIxRjE2MkY5Ci06MTA1NjkwMDBGQzlDRDI0NzIwM0RDNjZFMTJGMEM2RTNBOTY1MENCOTRBCi06MTA1NkEwMDAxQTNGOUY3OEZDMENBRjVCMjQwRDlFRTJGQ0UxRDA3QzlFCi06MTA1NkIwMDAyRjczOUVGMUY2OEE0QkFGRjY1QjNBQjk3RkQxMzlFQzg2Ci06MTA1NkMwMDA0RjJDODRGQTVBNjJGNkEwM0ZEMTIzRTE3RUFGOTZEQURFCi06MTA1NkQwMDAxRjIwQTc2QjZCMDhGQTcxOUM1NjBERkExMzg1MUQzMkJCCi06MTA1NkUwMDAxNjlGNUNGRjREMjZCNzZBOUIwODNGRjdDOEU2MTc0RjI5Ci06MTA1NkYwMDA4RkE5NjRFMDdFNzhENjFBOTUwRDBCODBGRjFCQUNBQUFCCi06MTA1NzAwMDA3MzA2QjU1NjE2OEY3ODRFQzgxMTMyNTAwNjdBN0ZBOEE4Ci06MTA1NzEwMDAzQzQyRUYwRjk0ODExQzhBQkY3RkFFRjYyMkYzN0IzQkE1Ci06MTA1NzIwMDAyRjRBRjhBQ0Y1MUMyQjAzQkRFRkFDMTkyODAzNzk1NkIyCi06MTA1NzMwMDA2N0Y3RkUxNEQ2NTVEQzEzMTk4RkNGQkRFOTFBOTE5NzgwCi06MTA1NzQwMDA3MjU5NzQxQUNGNDcyMjBFN0FDNEU2N0YzOTNEQzYzRjlDCi06MTA1NzUwMDA3NTU2OEFBMDlGNzVCNUNCQ0VFN0U3Q0YwMTdBNzZEODhDCi06MTA1NzYwMDA3MzJBQzFFRjM0REJEOEFBMDNCQjM4RDFFMTNGOTBDRTE2Ci06MTA1NzcwMDBFNEU4MTc1RkMwRTYxNzlBNTIzQ0RFNTZFRDdGNTg2NkE0Ci06MTA1NzgwMDBDMzIyMUVFRUU1NzhCODgxRUJEOUYzOUJCNEI4MEZBOTFDCi06MTA1NzkwMDBGNjE2M0UwREExQTBDMDlCM0ExMjQyQkVGNUEyN0UxNEExCi06MTA1N0EwMDBGN0M2OURBNzA2NTUxOERBM0Y2RjQzN0RCQkY4NTdGNTNFCi06MTA1N0IwMDAxODI3OUJCMDVFNDM5NDE4N0QzOTMxNjQ1NkREN0YzMkUzCi06MTA1N0MwMDA3OUE3NTM1NUJFQTIzNzVERDVGRUNBQkU1QzU1N0Q3MTIzCi06MTA1N0QwMDA3ODkyQUFGRUFBMzc0QjU0RTVCMkM4NTQ1NUZCQUJERjBBCi06MTA1N0UwMDBBOTUyOTVBRjE5OThBMTZBQkYwM0Y0M0RDNUUzMzc0RTlFCi06MTA1N0YwMDBDRjUyQkRGRjY4RTNGNDM3MjEzRTdENURGNDNCQUFFRjU1Ci06MTA1ODAwMDA0RjcwM0YwNDA5N0EyMzg1NzRGRTBCMDRCRDVFQUM1M0QwCi06MTA1ODEwMDA3RDRGQ0Q5QUIwNTQwRTdDQ0ZGRTE2QUM2Njc5Rjc5NUNECi06MTA1ODIwMDAxNDYzQjFGRDJERUM1MkRCMTMzNzkwMjhFNjJCQjY4NEMwCi06MTA1ODMwMDAyNDRGOTg0MERFOURCQUJFQjFBRjA3RjE3QUE5N0IwRjI1Ci06MTA1ODQwMDAyNkI4RTY2QkMwNTQ5N0M2NTEzQjYzMjIyMDgyNUMwRDlDCi06MTA1ODUwMDA3OTgzNjNGMUZCQTVENkJGODBFNDdGQTlGNTM3QjhENTdFCi06MTA1ODYwMDBFQjZGNTJENEVCNkYyOTU0QUZCRkNEQTM1RUZGQzQwQUQ4Ci06MTA1ODcwMDBGNUZBM0JCQ0VBRjU0RkFBNTFBRjdGQjI0RkJERkVBOTg2Ci06MTA1ODgwMDA3M0Q1RUI5RkU2NTdBRkZGQjgwNkY1QkE2N0I2QUFENzUwCi06MTA1ODkwMDAzQjdCQTk3QTVENzM4MjRCNTRGNUYxNzQyMEU4NDlDOENCCi06MTA1OEEwMDBDRkJDOTVGN0FBREI1M0E0Njg2MkU4NDJEMEQ5MDI1RjY3Ci06MTA1OEIwMDAwM0U2NjM4REVGN0E0ODM1NUUzQzdENEMyMDNDOEZGNEU3Ci06MTA1OEMwMDAyQkQyNDdFNTM4NkU3RjcyQkFBMDdBQTk2QTVDMzJEQUM5Ci06MTA1OEQwMDAxOTM3QzA3M0VFMDQ2RUZGRkI0NkI3MzM4NEZDOEFENURDCi06MTA1OEUwMDBFQkIxRkJFNkIxRTREQTA4N0RDNUY3RDE2M0VBMkJEODZBCi06MTA1OEYwMDA0NzlCODZGN0QxNjNEMUVGQkI4NEVBNTkxQzdDMzVGQTBDCi06MTA1OTAwMDBDRkVFQjAzMzM4MEU5QTk5M0RGRjI5NTQ1RDQzREJEMTc5Ci06MTA1OTEwMDAzNjE1MTRERTc3NjEzRTc0RkM3N0NEOTNEMTBGRjIxREZFCi06MTA1OTIwMDBEMkFCODM3MUVGMjQxMTdDQ0UyMzUxN0NGQTg5NUQ3NTUzCi06MTA1OTMwMDBCRTY1MDFGMUU5Qjk1RjY0MDlFMEE5QzkzODUwMEU3QTgyCi06MTA1OTQwMDBGRkMyRkNBM0VGNjM3Q0VFNDhEMjY1REQwNzcyMUNFMjY4Ci06MTA1OTUwMDAzRkUzMDkzOUM1RTVDOTQ5ODgwM0QxRjIzOTEzRjcyNzZGCi06MTA1OTYwMDA3QTg5RTI4QUMxRTcyOUVFRjdBQzlCMjZBMTlFMjU1QUU3Ci06MTA1OTcwMDAzM0U2QjFENUREMkVBMTlFQUFGQjBGRjY2QzFGQzdGNDRFCi06MTA1OTgwMDBEQTg4RTc1MjgxRDcyRTZFMUYzMDNCQTEwRjBFREQ2MjAxCi06MTA1OTkwMDBGQzkwRjhBRDY4OEY3QUVDQjBERUI0M0YxNjg3Rjk0NzFCCi06MTA1OUEwMDA3NjdGQjFEQkM4RTBEQzI1MTFCOUMyODlDNzA2NzFERDlECi06MTA1OUIwMDA2MUZERTE3QzlCREJDOEUwREJBNTIzNDZDMEVGNjRFMjMwCi06MTA1OUMwMDA0N0ZCRjAzMTk5OEEzQ0Q2RUYyNEQ2RUZEMTVDRjAxNzMzCi06MTA1OUQwMDA5QUNENkY3RUFCMUFGMkE5RTVFMDcyRjRERjdGOEZBODUzCi06MTA1OUUwMDBGREY3NzdCNjRBRThCRkZGMUU4NTlCM0VERDc2OEYxQjJECi06MTA1OUYwMDBGNEIyMjhFRjAyQjgyMTFFMDBFREU4RkI1NDc3QUIwNEE3Ci06MTA1QTAwMDBGRUIxQUZBREJGM0QwRkIxNzY1RkIyQkZBMTdFMDg4M0RGCi06MTA1QTEwMDAwQkZFNjAzRDg1N0YzNjgzRDJCNzgxRDJDQkI2RUYxMUM2Ci06MTA1QTIwMDBGNDFGQzZGQjZCQzc2OUE5MDY4MUZDMzExREJCOTdDMDdCCi06MTA1QTMwMDAyREFGNjdGQkUyQzMxRUJCQ0FDRjQ0NzQwRTM4NDc3QTUyCi06MTA1QTQwMDAyOTdCMEVGMkJFNEZDNTlDRDNBMDc0MzRFQUZEQkExRjY5Ci06MTA1QTUwMDA2NUIwN0NBNEY2QjZDODQ0ODg0QjlFRTM3MUQ3ODdEQjVCCi06MTA1QTYwMDBERUM0QjI1NkY2NjA1RTI2RENGN0U1ODhGOTVFRUZBMjhBCi06MTA1QTcwMDBGNTMxNzI0RUI2RDJFRjYzRTQ4RENFRUFDM0NCNkIxRTI2Ci06MTA1QTgwMDA2OThCNjBCQzUzQzdFRjI1N0IzNEUzNUVCQjNGQzZCRjY5Ci06MTA1QTkwMDBGMkNFMzg2RTI3MTk4M0M0OUU0MkI4Njk0RkZGNEU0RjJECi06MTA1QUEwMDAyMzQwM0Y1QUJCN0MyQTc2MUY2RDcwRDNGRTYyRjVFRTExCi06MTA1QUIwMDBDNTY0MTIxQjdGNThEOUY2MEVDMkZEODhFNEY3NDM2NzEwCi06MTA1QUMwMDA4NjdDMTIzNjUxN0MxQjY0MzgwMzREREY2RkI4MTFFNUJDCi06MTA1QUQwMDBBRkRFNzZBRjA3RUVBMTFBMEI3RjA2Qjc3QzIxNTY3RUFDCi06MTA1QUUwMDA3RTM4OEVERkNGQzVFNUU3OTM2REQxQzkzMDRFN0JEQkM1Ci06MTA1QUYwMDA4MDBBNkY1RDZEMTdGMUZEOUEzNjUyQzRFQTNGQzQ3QTkxCi06MTA1QjAwMDA0RDhEODJGNDczOEFEMjQyMDRFMjdBRjI4MDBERkNDMTk4Ci06MTA1QjEwMDBENDNFMjYxMDdGRDZCOThEMTg2RjMwQjgxOEJDRTRBMkQ5Ci06MTA1QjIwMDAwQkU5NjM5RTlEQzEwMDNFQkY0QzRBMUZFRjJGRDVFMTlDCi06MTA1QjMwMDBGRUZBQkU0QzJCQjZCRkVGMzdFMzBGNzgyOURGRUEyOTE4Ci06MTA1QjQwMDAxQUI0N0ZDMzdDODZDNzYxRjhEMzczRjk0OTY0QkYwRjY5Ci06MTA1QjUwMDBFNDgwM0U1REM2Mzg4NUQzM0UwQkQ3RjFDQkY2MjdGMDA3Ci06MTA1QjYwMDBBRTM3MTFDQzQ3RDY2NzVBRDE1RUI4NUMzOEREMTk2QUJBCi06MTA1QjcwMDBCQ0M3RTM4RkUyMDlFNUZGN0QxQzRGRjczREM4RkM5M0VFCi06MTA1QjgwMDBGN0RENEZGMDNDMDU1OTRBRkZDQTg3RTk2QTFDOTc4NzQxCi06MTA1QjkwMDBBOUM0ODdDRkFFMzYyQTA4MERCMDVFNDZFMjlGNDBFRDFECi06MTA1QkEwMDAxMUQyOEI4RDRERTBBNzgyN0FBRkVDODBENDg4MjdBQUUyCi06MTA1QkIwMDA1RDMzRTFCOUE2RTI2NDE3QjBFM0RBNkIzRjhCQzAxMzQzCi06MTA1QkMwMDA2MjExODAyRjdCMDMwOUMxNTVCQzk4QUI0MEM3NzdGOEExCi06MTA1QkQwMDA1OTM5ODFENzI3Q0M2NUU1NDQ1RTlGRTg2M0U1NENFRkYyCi06MTA1QkUwMDAwQjUyMzUwMDE2MTc0N0NCQjQzQTZGQ0EwNzc5QkM4MDAxCi06MTA1QkYwMDBCMDczRjFGQzdFOERDRDg0Q0IwQkFCNzM2NjM1RDRERkY3Ci06MTA1QzAwMDA0OUYwOUM4QkE4RkYwOUFGNEZCMzFFNUY5OTA3N0E2M0Q5Ci06MTA1QzEwMDBCNkZBRkIwRDFDMEZBOUQ2RTM1REQzMzBERUE2QUUxNzk2Ci06MTA1QzIwMDBGMUFDNjRFQkY5MzdGMUZCMjI3NUZENTNGQzdCOUJGNTdFCi06MTA1QzMwMDA3QzY0MUFENEU3QUJDNzdGOUNENzVCQUMyQ0VGOERDQUQyCi06MTA1QzQwMDA3RTc2N0YwM0FGN0Y4Q0Q3OUJBMDFFQzYyRjY0RjU1QTRDCi06MTA1QzUwMDA3MURGMDk2RkQ3QzlFMTE4RTIzMzFFNDMwQzI2MzNCRjQ5Ci06MTA1QzYwMDBGMjk2MzYyM0YyNTczQ0JGREQwN0Y3NzM5NTBERjM5QjkxCi06MTA1QzcwMDA3RDI5MTlGNURFODZGQjMyOThEQzQ5NTAwNkJDREU1MUUxCi06MTA1QzgwMDBFNEEyQTg3N0RBNjVDQzM3RDBCQUY1NDg0RjA2MkI5NzRGCi06MTA1QzkwMDAyNzlDMUY4N0U0ODlENEVBNjE0NEM2RTRGNEE1RTg5QTA2Ci06MTA1Q0EwMDAxMkYwMDU5MDZCNTlGNDBGRTgzQUUzRkIxQUUyOEY5MTdBCi06MTA1Q0IwMDA3M0U5NEQ2NkUyOEZFNTgzMDU0RTU1MzlFNUNFNzQ1NTlGCi06MTA1Q0MwMDA3QkQ3RUM1QzU1QkRCNTc0OTJBQTlFQ0M3NjIyOUZEQzQ2Ci06MTA1Q0QwMDBDQkU5Q0I1QzU0QTJBQTE3Rjc2NTkwNkRCQzlEOURCNTJFCi06MTA1Q0UwMDBEM0U1NEY1NUI1M0I1RkE4MjQwMjhEOUZCQTQ5RENBMzhECi06MTA1Q0YwMDBFNjMxODI3Q0I4RDc5NjlCMEFGQ0Y4QjNCNjBBNDQ0RUNDCi06MTA1RDAwMDAzQkU1MjdGNkI0RjNBNzFCOEM1OUZBNTQ3OEI5MTBDQkFFCi06MTA1RDEwMDBDRjNCNTg3RTdGN0I5Qjg3OTU3MzA4OUVBRjZGNkZBQkExCi06MTA1RDIwMDBDMUYyMkVDQTlGRjBGQzY5OUIxNzlGREI2OTU5QTFDRjc2Ci06MTA1RDMwMDA3RkE0RkQyQkI0OUYxRURBM0Y5NDlGQTFGREMzNzMzMzU0Ci06MTA1RDQwMDBFRDFGOUUzRkExRkQ0M0ZEMDZEQTJGOTQ5RkE2NzBDMTczCi06MTA1RDUwMDBGMzI5REEwRkJDRkYzMUVEMUZDQTRGQjRGOUIwQkNCNjVFCi06MTA1RDYwMDA2RDJFOTYxRjZGRjNFM0YzQjFCNjA2N0NERkQ5RDY4QUFBCi06MTA1RDcwMDBFNTQ3REI5NkUyRjNFMUI2MjAzRURCREI1NjYyN0QyRkEyCi06MTA1RDgwMDBBNzkzRTdGOTc5RENFNzJCRDlCRDAzRjFFQkRGOUYyMTdFCi06MTA1RDkwMDA2MUJCMkY5RDlGNTM0QTE1N0FCOTJBM0ZBNzNGMDNGQzQ5Ci06MTA1REEwMDAwMkJERUFGQzU0QzAxRkMyNjE2Mjc4OEM4N0UzNjgwNkJBCi06MTA1REIwMDBCMzBGMjc5MUM4NzIwQjkzMUYxODA3MUZERkU3NTk2MUI0Ci06MTA1REMwMDBBMUZDMzVBRTk1QUQ3QjRFNUYxNEVCRDMxQUQ4Nzg0NzY2Ci06MTA1REQwMDBCOTlENDA1QzQxOTI1MUNFOEU5QjQzQkI3MzUyQTRDQTg1Ci06MTA1REUwMDBDMkYyMDdEMDBGNDNEQzE0M0ZFNUVDNUE3MjQ2RTYyMUJECi06MTA1REYwMDAwREMwMjU1NzUwM0QxRTMzQUYyMTdDMzkxODlDODBCNzBDCi06MTA1RTAwMDBEMUUwRkQ1NzhFMzc2RDY5MkZCQjVGQTdBNjJCMEM2Q0I5Ci06MTA1RTEwMDA2NkY2QjZFMkZEM0FDNkI5QkVCMDRDOUYyRTlGMUZFRkE0Ci06MTA1RTIwMDBFOTk4NzQ3MTNBREQyNDUyRjk3NkYxOUI0NEExQ0Y4QzQ0Ci06MTA1RTMwMDAyNkY1RkUzMTdENDE4OTZBN0ZBNkJEQjg4NjI4NTdEMUY3Ci06MTA1RTQwMDA3RThCRDRGQjNDNzNGRUJEQUFFRjhDMTkwRkE5RUFGNTNCCi06MTA1RTUwMDBBRTE1QUFGQUJBQkI3MzFFNzEwMzNFQzdCMUI4OTk2MUY5Ci06MTA1RTYwMDBGNTcyMDIyMUU0ODVERDRGMjA1Q0U2NEMzNjhGNzM5MjlCCi06MTA1RTcwMDBDMjdFNUY2MDM3RkYzRDEzQkU3Rjc5RDZDRUYxNjU1QzkxCi06MTA1RTgwMDA4REZCRjIwOTBFNTYyQzQ4MEM2QTQwMEY3REZDOEI0NEFBCi06MTA1RTkwMDA5NDdGM0I5RUQxQTA5RjdFMjIwOTY5NDBERTRDQTZFNkZFCi06MTA1RUEwMDAyNEQ0NUYwMTM3OEM2QkYxQUEyNjJEOTQ4Qjg5QTI4NUFGCi06MTA1RUIwMDBGMjU1MjQ4QUZCM0FCQTdGRDE2NEQyRjU2QkQxRkE5RkFFCi06MTA1RUMwMDAzMUQxRjJEOTRDRkZCMzJDQkYzMDhDRkFCQTgwQUY2NzE2Ci06MTA1RUQwMDA4MUQ4QzdBRDk3RTNGRERDQzY0Q0Y0MzdBOUNGMjU3NjUyCi06MTA1RUUwMDBGMEZENEI4Nzg5RjkwRDk3M0JDQTUzQzEwRTNFMzc0NkVCCi06MTA1RUYwMDAzRUE4Q0Q3REUyOEQwNTE0REZCNkI0NjNGODE0RUYxRjI0Ci06MTA1RjAwMDA1NzM0QTM5RUQ3Q0ZDQjk0QkU1QTVFRjc3QUFBNEZENDBDCi06MTA1RjEwMDA3QzkzMDdGMzM4NUJGQUNGMjlFMDc2NkJDOThGMjJGRkI5Ci06MTA1RjIwMDA3NEU4ODQzQzUzMTI0MTlFMEQ5NzNEODkyNDY2MUUzQkM0Ci06MTA1RjMwMDBEQURFQzk5MzUxMjFGQTExNkYzMjVGMzczMTVGRjk0RkMxCi06MTA1RjQwMDA5NTc2Qzg0QjJDRTA3OUQxM0JEQkQyRjJBQkM3MEY3RjAzCi06MTA1RjUwMDBFRkUzNzQ1MDQ4MjIzNUEwNUYwQjhCMzQ5RTEwNzRFMDQxCi06MTA1RjYwMDBCNUFCRkMzMUE2RkMyRTJGOUMwQjkzNEI4ODA3QzRGMkRCCi06MTA1RjcwMDA0NEQyODVGNzI5Qzg3RkQ1NjIzRTlBN0NGMDFBQTI1MDk4Ci06MTA1RjgwMDBGQkQ4NkEwRDkzNjBEMTcwQkY4NEZCNzVCRUNGRTVGQzcyCi06MTA1RjkwMDA2N0Y2NkE5QzhGOUMyNUVDMjYwRkU4NzRGMjk5RDUxQjU2Ci06MTA1RkEwMDAwMTNBRkNBQzVCQzdEOEY0QjhCQUJFRDA0QTUwRUYyRDZBCi06MTA1RkIwMDAyQUQ0ODcxNDA5RUVDQkVCQzI3QjQwRTUyRDEyQzlDODY5Ci06MTA1RkMwMDAwMTM4QTZCOUU3ODM3RURGNkI0MTNBQjZBQzJGQzc5Rjk1Ci06MTA1RkQwMDAzMEI4NTlFM0FGNDBGQzBFMjg3QjM1QzJFOEEyRUQ5QUY5Ci06MTA1RkUwMDAyN0VCQjc4MjNEMzkwMUYwNjIwNUJDREM5MTVGMEQ0M0MwCi06MTA1RkYwMDBFNzE3MjIxRTE3RjI3OTJGRTRGM0U4QzgxQ0MyM0Y4MzhCCi06MTA2MDAwMDA4Nzc4QkM3MDFGRUZBMjZFRTE4RjUyQ0ZGM0YxRDJBQTU2Ci06MTA2MDEwMDA2RkMzQkRBMkVEMTEyREZGOTkyMjM1M0U1N0U5MjI1M0UyCi06MTA2MDIwMDBFNjRCQzM3MDUxMzgxNzY2ODI1QzAxQjhBRjgyMEZEODU3Ci06MTA2MDMwMDBGQzlBOUY5MUM4QzYxQzk0NkIzNTY4NkY5NDY5MzAzRjc5Ci06MTA2MDQwMDAzRDlFMkU5QjMyOTlEQzhGNjZEOEQ5N0RFNEVFNTM0ODc1Ci06MTA2MDUwMDBDRkMzRTU5MzZGMkM0OEMyRkQzM0IzNUI2QzMyQ0I4RjVCCi06MTA2MDYwMDBGNDdBOTU1OEJGRjcyQUUxNUZFNEU3NzJDQzFDREVBMTExCi06MTA2MDcwMDA3QjA1MjdCMUJDNjAyQjg5QUM4N0JDQjRCMUY2RjUyQjhFCi06MTA2MDgwMDAzMjczNzBEQ0UxN0QzREI1NUQyMDNGQTVDQzg4Nzk1QzQ1Ci06MTA2MDkwMDBBQjQ0M0VBMTcyNTQ5OTY5NjM0RjM4NTc2NUU0NzRGQTcyCi06MTA2MEEwMDBBODREOURGN0IzOURDRjZGM0I1RjhGNDFBM0M4N0JGMjk3Ci06MTA2MEIwMDBENjE2Qzc5Q0YzQTlFQkFGNDczRjk2ODhEMzBFNzJGRjY1Ci06MTA2MEMwMDBFMUEwNTkxRDU3NkRFNEE0MzA3OEE4QUJDQTBDRjFDMTBBCi06MTA2MEQwMDAyRTE2QTc2REVDQkY5OURENkJCQkVGQzc3ODJGMzBFREE3Ci06MTA2MEUwMDA1MzAxN0FBOEU3RURFQjU3QUFGRDU4MEI3N0ZBOTE1RkI5Ci06MTA2MEYwMDBFM0ZENjRGMTdFMzE4QTM5M0RFQzFGRTNGRDYyNUIzM0UxCi06MTA2MTAwMDBGOTdFQzI0MzhBMjEwRTdCNjI3NURFNjEzM0VDNzc3MkMxCi06MTA2MTEwMDAwODlFMEYxRkE3N0QwMUVGRERBNkJCODEyRUI4NEY5NzBDCi06MTA2MTIwMDAxNEIxRkJBM0UyRDdGRjU0OTYxRUYxQjI1M0FDRUY3ODQzCi06MTA2MTMwMDAyQkRBQTUzQkNCOTgxQ0Q4NzlFMEZDMkRFMzY5M0YyQkVCCi06MTA2MTQwMDA3MzI0RDVGOTgwOTUzOTNBNUNBN0I3Mjk3REMzQjM5N0Y1Ci06MTA2MTUwMDA5MDlBRDFFRTI5M0I5NEE5Rjk2QTcyRUY1QUY1RUZDMUYyCi06MTA2MTYwMDAzNEY3MEQxQ0I2MjgyOEZGNUUwM0JBMUYzQ0ZDNzk0MkE5Ci06MTA2MTcwMDAxMUYyNTExNDdGQkZDNDA4QzIzMDk5QzEwREU3QjM3NjQ0Ci06MTA2MTgwMDA2QjNFOTkxNzRCMEY2RjY3Q0E1OEZGMzZBNzhCMkYwREMxCi06MTA2MTkwMDA1N0I1MUFBRUIzNDU2RkE1Q0M2MDcwRkQwRUU0QzZCOTE1Ci06MTA2MUEwMDBGMEYxOTQ1ODdCNDZDMEI1N0I4Q0RGMDNGOEYwQUJFMjhFCi06MTA2MUIwMDBBOTQyQUQxRjYyRjA3NEZBQkZDM0QzNkVGREU4RjBGQ0Q0Ci06MTA2MUMwMDA5NUMzRjNCMzQzRUM1RTlCOTFGNTVGNTE5Rjc1QUJFMUQzCi06MTA2MUQwMDAzREZCN0M2NDBFODg0OTBBRUY1RjExN0ZFRTkzMjkxODFFCi06MTA2MUUwMDAxM0U2RjhFQjJERTVGNDU5Q0FFNThGMDdDRjUwOTFDMEJGCi06MTA2MUYwMDA3QjU3NjMxRTY2QUY0QzkyNkFBMTVDQkUwMDdGRjcyQzkyCi06MTA2MjAwMDA5M0VGQzMwMjFBM0Y5RUJGMjFFRjE5NDY5NTdGRDc2NEQzCi06MTA2MjEwMDAzMUJBREU5RDJFOEQ4QTg3RDIyQzM2Q0YwMzQ3RUFCMjYzCi06MTA2MjIwMDBDMUJGRjFEODNCMDYwMjcyNjEzM0NGQkY3RUNDREU2QkJCCi06MTA2MjMwMDA4NDdCQTYwNTFFQTE1QzQyOUYwMTdENzQxMTI4QkNDNzBBCi06MTA2MjQwMDA0QTNGMzMyQUQ2NTFDNkQzQjBGMUQ2QzZGMThEMTg0Rjg2Ci06MTA2MjUwMDAzQ0E3NjQxNTMyN0I1NTNBQTQ4NTczMzg2QkFGN0QwQjMwCi06MTA2MjYwMDBFRjdGNUI1QjJBQTNFQ0ZERDJGODVGMUQ4N0ZGRjA1QjNECi06MTA2MjcwMDAyOUI3MzA3QTk5OTI0NUUxNkI5MUZFOTBGMDZENUEwRUY0Ci06MTA2MjgwMDA0OEQxN0YyQTgyN0MxNUJEMUZFNzFGQTA3OEVDOTE0NjdDCi06MTA2MjkwMDBFMjI5MkQ4QkQxOEI5ODlGOThCRjgwREI3NkREMDI1QzQ1Ci06MTA2MkEwMDAwN0RCQkIwNjU0MUFBNUJDQkREMDE3ODk1Q0ZGQzFCQzc3Ci06MTA2MkIwMDA1MDVGNUMyQkIzNzM0QzY1MzJBRUZCREE4QUE5NzhFRTgzCi06MTA2MkMwMDA2QzM3Q0YxNzg5NUVBMzFGRjU3NzQ0MTY3MEJDM0Q3NkY3Ci06MTA2MkQwMDBGMUI3MTFCODQ3MzlEOEFGQzNGQjNGODgzQ0UwQkUxNUQyCi06MTA2MkUwMDBFRTFGRkY4RDhDRjc4OTUzN0FBQTgxRkJDQzBFMUMzOUU3Ci06MTA2MkYwMDA5RjAwRkJFQkY5NTkzQTg0N0IzRTk3ODc4MzE3QjUzNUFFCi06MTA2MzAwMDA3ODFFRUNDODY3NzY2RDBDRkRENzY1NjlCOTdEMTI4OTdBCi06MTA2MzEwMDBDMDM5QUYzNTI1RUMzQzhCOTVEQjAzRDYyMzI3MUIwMDFBCi06MTA2MzIwMDA3RTZCQzU0MzA2Mjk4NkRFNjY2NTE5MTBBRTM1RkE2OEIwCi06MTA2MzMwMDA4QTg3RjYxN0Q4QTcyNTYxRTZGRkMxN0IxOTg3Q0VCM0Y4Ci06MTA2MzQwMDBEQTE5MUU1QTRBMEZBMUJENjBFRDY3RjczNUQ2NjUyOUU3Ci06MTA2MzUwMDA0Q0NFNTJCOEY3RDJGN0U2ODk5RkQ5RUJBMUJFOTQ4RTA2Ci06MTA2MzYwMDA5NzNCRkNCRENEQ0VENkQzNUNDNkVFNEI1QTdCRUQzRjAyCi06MTA2MzcwMDBEQkUxM0VDODQ0RjgxRDQ3RDhFRkYyNzkwQUI4OTI3MkMzCi06MTA2MzgwMDAzNUJDREY0ODI0MTdGOENCMkU2M0JFNUE2RkY4NUUyMzY2Ci06MTA2MzkwMDBEOEZCODIyRkRFQ0FENTYyQkI0N0Y5Mzk4OTQ3MkIwQTYxCi06MTA2M0EwMDA0MzcwQUU0Q0QwQjEzNURCRkY0MDE2Q0M4RkYyQzUwQjNECi06MTA2M0IwMDA2OEVGNDQ3Q0QzMTAzRkY2NjJDODMzREYyNTQ1RTYzMkYwCi06MTA2M0MwMDAzQjQ0NkYwNzNFMkNENDY4NTRGQzE2RTFFQjI2OUU1NEU4Ci06MTA2M0QwMDBGREEzREQ3MzNGQTc1REExRjczQjQyNDYwMkU3NERGRUZCCi06MTA2M0UwMDA3ODcxNjYyMkQ4QTcxRDE5QzJERUYzMUEwMTVGOUIyNUJBCi06MTA2M0YwMDA1RjYyMEU4Q0YzMkY1QURDMEYxRTM4NzJCQzAxQzZFREEzCi06MTA2NDAwMDBBMEYzMDJCRTdERjg3NUVCNkFCMDUzM0FFQzVFRTQ1MzNDCi06MTA2NDEwMDAzMUJFRUNEMEYwRjU2MEZERUNENjdCREYwNDdGNjRENEI4Ci06MTA2NDIwMDBDMUVFQ0QzQTM4NzU4NjExRTg5RkI2RDM0MDNGN0ZBMEM0Ci06MTA2NDMwMDBGQkY3RjAwNEU4QTcxQUZEMDYwQkVEQjNBNkMzNzc4QkI0Ci06MTA2NDQwMDA4OEZGMTFCMDZGMTc3NTZCNTVGNzgzM0NDQ0U1QzVDMjVCCi06MTA2NDUwMDA4QjE2MTI4RUQ5MkYyQ0FDRjgwRTlFNkI1Qzc4MzEwMTA2Ci06MTA2NDYwMDBERjNGQ0NDRkVEM0ZDQ0NGQkRFREUyRjg3ODk5M0Y1Rjc5Ci06MTA2NDcwMDBDRkZBOEFGQjZGNEY5Q0RFNEFGRUREOEUzQUM2RjdCQjMxCi06MTA2NDgwMDA2MEZEOUFBNTAxM0RBOEZBMzU1MzNGQzdGMzY0N0Y2OEM0Ci06MTA2NDkwMDBCMzkzQjAyMTA2REUxMUYzNEMyMkUxOTg3MTg3REE1REU3Ci06MTA2NEEwMDAzNDkxNzA1MkVDRkEzMkZBMUQ5RUFGMTVFQkZGRDBFNjM0Ci06MTA2NEIwMDA0NjNDOEVEREZGMzgxNTFFODdGQkNGNTNFMTcxNjRGRjJDCi06MTA2NEMwMDAwNTU4RkY4N0I2QzI0QkY0M0Y3OThDRkU3MzU0RjAwRjJBCi06MTA2NEQwMDBGNzlCOEZFRkNGMURBQzdCRDY0MkY5RUU2MDc4QzVDNjM3Ci06MTA2NEUwMDA1NzRCRTFGN0Y3MENGODdCMUJBNEFGQjcwQUNGQjlFRTE3Ci06MTA2NEYwMDAyMjc4MEVGQTgxRkQ3RjdBMUZGMjUyMUZEOEFBRjdDMEM4Ci06MTA2NTAwMDAxODgzQkFFODNDQ0YyODdBMjY5RkQ4ODM3MEVGOUM3ODBFCi06MTA2NTEwMDBCRTlEOTU4N0VCMUNGRkRFMjg4N0VDOTA2NzZBMkM5NDY0Ci06MTA2NTIwMDBFREEwRTc4QzI0MTI1QTAxRkI5NzUyMjNDQTM5MTFERkUwCi06MTA2NTMwMDAxMkZERkUzNDUzQUI5MkIzRTI3RUExNDY5RTdGRDg2ODMzCi06MTA2NTQwMDA2MUYxQUYyNkFCRkYyQ0FDRkYxMjRENTdDQkNGNjgxRkNDCi06MTA2NTUwMDBBNzBCM0JGMDdDM0IyMTBFRENENzg4Rjg4RTBDRkJDNUVCCi06MTA2NTYwMDAzQzcwN0RGOTA4OUMwQjlCOTdFM0ZGMENCRUZCMDkxNTYzCi06MTA2NTcwMDAyQjEwRUZEMTVFQjFDRDBGRjk3OThGRjM3REU0RTNBNjU3Ci06MTA2NTgwMDA4OERCMTMyMzNGNzVEOUYyNTdCMzFCQkFFMkU4QjdFQ0E3Ci06MTA2NTkwMDA3NzNCQzI4QzdFNzVEOTQwQkZEQUM4Q0ZFQjcyRTA3QzA2Ci06MTA2NUEwMDBFMzAwQkY2NzRFNDFGQkI5QUVGNDMwREU0NzU5MjdGQzJDCi06MTA2NUIwMDAwMjJCRTNGMzU2MzIxRDYwNEY4Qjc4NTQwMkU0MTc4MkFFCi06MTA2NUMwMDBEREIwODZERDUzNTg2RjYxRTVGQTVGMjdFMUI5MTdCQTkwCi06MTA2NUQwMDAxRkIyMTQ4MTlDRDlBRDY1RkUyMjFFMDczQkNGNjExRTAwCi06MTA2NUUwMDAzNEFFQzkwMkZDMEVGMjdDOTdGM0ZEQUZFMUJEQTdFNzI0Ci06MTA2NUYwMDA1NzhFNDczQUE4RkZFNTBGRjExRUMzRERFOTRDOUYwRDBBCi06MTA2NjAwMDBFRUIzQTEzRUFCMzc3OENBRTE1RUNERERFOUNDNkVFREVECi06MTA2NjEwMDA5NUMzMDkyNTMxNzZFQ0EzMTk1NTI4QTczRjVFMzk1RTRECi06MTA2NjIwMDAxMzFCMjcxOTlGQ0RFNEMyMUFFMUZGOTRBM0U1NzBDRTk2Ci06MTA2NjMwMDBFQUUzRDJGMDNGQTEzRURENjNDMkRGMUJEM0VDRkQ1M0EyCi06MTA2NjQwMDAzOURFQkZCQUM2ODBCRjYzNTFCNTc3RTJCQUI5QjA1RjcxCi06MTA2NjUwMDA0QzkwMzExRjVCQjNENzg0RjA5QzVEQzVFRTgzODM2Rjk0Ci06MTA2NjYwMDA0MUVFMzVFRjFEODdCRkNCNTY2Rjg5NjJERTY0QjNEOTJCCi06MTA2NjcwMDA1MzAwRjFDMUZBQkRERkMwREY5RjM4RjFGOEM0MkM5MEEwCi06MTA2NjgwMDA4M0M3OTM5NTJDQkM2RkZCNzE4QTc0M0FFRkUzRkIyNkFBCi06MTA2NjkwMDBCMEY3OUQ1N0UzQjk2QURCMUE4QjdGMzRGRjg4RDA0Qjg0Ci06MTA2NkEwMDBGMUY3Q0RFRDRFMkYzRUQ3MDdGODk5NjhGNDgwMUM1RUM4Ci06MTA2NkIwMDAzOEU0NUY2N0Y3MDdENkJGMTk5REE1MjRBMEZGMDZGMzRFCi06MTA2NkMwMDAxN0VBRURBN0YwRjcxREVCQkI4RkRENDkzMDNFRTk0MjNECi06MTA2NkQwMDBGQTE1RkJCQ0Y4NzFFQkI5RkVEQUFEOEZDRTgzREZENUNFCi06MTA2NkUwMDBBQjZGRTdGOEU3QkZGNzU5QUYyOUM2REY5QjE0Rjg1RjM4Ci06MTA2NkYwMDAxMzc3MUZGM0Y3MzhERUM1RjNDNDExMTlFRkI5QTQ3Njg5Ci06MTA2NzAwMDA0NTE2Rjg4RjRFRUMzNzIwQkQ5RDU4MzMxOUVGNTcxMEMyCi06MTA2NzEwMDBFM0Q1NTM1OEVEOTQ0RjhGM0I5NTI5QjBCRTBCQjIxNTdFCi06MTA2NzIwMDAzNkZGNzZCNjdGMTVFRkU5RjgxMUY4QkRDRUU4M0UyREJECi06MTA2NzMwMDBFNkFGMEREQUEzMDkxMEM3MTRFRDQ0Nzk2ODNFRkQ1QTlGCi06MTA2NzQwMDBGQ0JEQjdEREU5MDc3MEREMjk1RDExQTAyQkNEMkY2REY0Ci06MTA2NzUwMDBBOEI3MDNCRjY0QkYxQkY3NzEyOTA5ODI5RjM0Rjg4RTY1Ci06MTA2NzYwMDAwMUY3N0IwN0Y3MTlEMDlFMUU3Qzk3OURDRjFGNzFFRjE1Ci06MTA2NzcwMDA5RjM1OUEwNUY3REMwNjdFMzkwRUU1REE2MDY2NzQwQjA0Ci06MTA2NzgwMDBCM0JGNEQ3OENGRTRFMDUxRkZENTNDNUU5Q0M2RUZEMTVFCi06MTA2NzkwMDA0QzAzQkJFRkMyM0U1MzE4RUMzRUZBQzRCODQzOTA2Q0I2Ci06MTA2N0EwMDA3M0UzRkJGRDE2QkMyRjg4M0VEOUY5MjQ2OThGMUI3RjRDCi06MTA2N0IwMDAzNzg5NzRGMUVGMjNGOEZEMDM1OUZFMDkyMEE3MUZDODlDCi06MTA2N0MwMDBBM0ZENUJFMUZCOTNEOEVFNDJBRUZGNEE4QzU5MTE5MkQ4Ci06MTA2N0QwMDBDRUM3NEJDNzdFMzNGREQ5Rjg1RUZBQ0NDRDdFMEZBODZECi06MTA2N0UwMDA4QkQ3NDdCMDNFNjBGMDVGOERGM0Y4QkQ4REY0OEMzMkVGCi06MTA2N0YwMDBDRkFGN0E1RkU0N0REOTQ5Qjg4RTAyNkU4QTY3QjQyMzQxCi06MTA2ODAwMDBFM0YxRDI5M0NERjY5RjAyMUZGMTc0MzlCNDlFOTc4MEM1Ci06MTA2ODEwMDAwRkZDMzI3OEJGQzAzRUI2OEVBQjI2RUE5OTNDRTk5Q0FECi06MTA2ODIwMDA4Q0Y2MzJERTMwMTQ5MzI3Qjg3Q0RGMDc0ODk3ODMzQTIyCi06MTA2ODMwMDBFRkQzQTA5N0EyNDc3NTg0RERDMzQ4MkQwM0YwNTc1NENBCi06MTA2ODQwMDBCMDc2RjUxNkU2RjcxMDcwOUNFMUU3MDcxQTNCNTkxRTgzCi06MTA2ODUwMDBFMTk5RTczRUM4OUE2Rjg1RjNGMzFGQThDRUNGMEJGRkVGCi06MTA2ODYwMDAyMUVEMjQwMUZDMzM1NjhGOTI1MDU3QzRFQzc2MkRDMjkzCi06MTA2ODcwMDBDNTdFOEY2RThENEVDMURGMEIwQzNFM0UxMUZEMTIyNzgzCi06MTA2ODgwMDBGNENBNUVCQzA3NzZENTE1MUFBMDI3NkQzMTk3QkY0RkE1Ci06MTA2ODkwMDBCMDc5ODlGQkREQzQzRDZERjE3ODE5Qzg2NkZBQjI5OTBCCi06MTA2OEEwMDBGOEVGODIzQkZFOEYxMzI1ODUwNzRCRjFCRTRBNzRGRjNDCi06MTA2OEIwMDA2QjIwQ0Q1MkY2OUE1ODdFM0JFQTg1OTFGNzQyRUEyRjNCCi06MTA2OEMwMDBGMTdCODJGRkJCRTU1M0IwNTY2NTgwOUY2MDAyRThENTNGCi06MTA2OEQwMDBEMzc2QjY3RkM0NUIyMjQwQkY2QkQ5M0MzQkUwMDNCOEE0Ci06MTA2OEUwMDBGRjgyRjg0RTgzNUVDNDVCMjUyODFFNEU0QkFDM0U5RTU1Ci06MTA2OEYwMDBDRTg0QkMxQjgxMEZBMDFCRTgxN0JFQTM3RDdGOUU5RDhECi06MTA2OTAwMDBDM0Y2M0Y3NjI3M0Y5NDE3RDQ0MzVFQUFEMDU3MDE0OTc4Ci06MTA2OTEwMDBENkMwN0QwRjI3MUQ0QTAyRDBFNUM5Q0UzQ0U3NzJDODFDCi06MTA2OTIwMDBGNzcxMjgyOUIxRjY3NkUwMTBDMTdCMEUxNDM4RkY3Mzk5Ci06MTA2OTMwMDAzNUZDMkU5Mjc3MEFGODA1NzczQkQ1RkU4ODc4Nzg1RThECi06MTA2OTQwMDBBODFDNDBGREYzNUY5OEM2QzU1MzAwODAwMDAwMDAwMEZFCi06MTA2OTUwMDAxRjhCMDgwMDAwMDAwMDAwMDBGRkI1N0QwQjc4NTRENUE4Ci06MTA2OTYwMDBCNUZGM0U3MzY2MjYzMzc5NEUxRTg0ODQ0MDk4MjRFNDM2Ci06MTA2OTcwMDAwMTg0MzAwOTBGNDE0MTA3NDgxMDE1Njg3ODA5Mjg4NUJFCi06MTA2OTgwMDA5MzA3MTA0MjFFODhCNjE3NUJEQjBDMjQyMDVBQjQ0MUQzCi06MTA2OTkwMDA1MUQxOEI3NjQwNDE1NEI0NDE0MTQxMDM3NzAwQTU1ODExCi06MTA2OUEwMDA1MTYzRDU1NjZEQ0IwRDg4QkMxRjMxQTg5N0ZGQURBRDk3Ci06MTA2OUIwMDBGRkY1NUJGQjlDNjRDRTkwQThCNUI3RjkzRUQ4RDk2N0NDCi06MTA2OUMwMDBCRkQ3NUE3QkVERjVEQTNCREY3QzQzM0ZENzA5NjE3NUQyCi06MTA2OUQwMDAyQjQyRjQxMDIyQ0U2RDExNjI5ODEwQTNEQzgyRjM0Mjk4Ci06MTA2OUUwMDBEODg1QzgxMUZDRjM4RENBODlEQjNBNUM4ODg1Rjg4RDlGCi06MTA2OUYwMDBBQUFBRjlEQUI1OUVDODJCRUIyRDVDMUZFMzc1NDY3NzgyCi06MTA2QTAwMDBGMUJERjFCNUZGNTBGMjI4QjMyMTRDMDg4N0ZFM0Q1RDgyCi06MTA2QTEwMDA4ODBGMzExRThEN0JFQTkwRERBNzBDNDYxQTJFQUMwOTNCCi06MTA2QTIwMDA0MjU0QUM3NUZBNDUxQUE1NkY0RUNDQkE1M0U2ODU0MjZFCi06MTA2QTMwMDA3NUM3NkM1Qzk5RDg0QUUzOTY2RjJBQ0ExMjkxQjIxRjQ3Ci06MTA2QTQwMDA0MUYzQUFEMEU3NTU5RUVBQ0Q1Mjg3MEFEMUY2QThFQUNCCi06MTA2QTUwMDBEQTg0RjZFQjU1OUU4RjZBRjNCODFFQTVFRjI3RDZEQkQ2Ci06MTA2QTYwMDA1Q0NCQTk5RjBBN0QzRTI3N0E2QkQxQzVCOTk0QjcwQTQyCi06MTA2QTcwMDBBQkJEODBGMjU2MkREQTQ1RkQyRTc4NTQyREY2NzdCMTU4Ci06MTA2QTgwMDAzRUFBRjc4MUI1QTAwQkY4NjA0RDg5M0E3QzMyQTgxRTZBCi06MTA2QTkwMDBENjY5OTRFM0JGRjc2ODcyNTdEMUZDQzJFOTc3Q0M2MzNCCi06MTA2QUEwMDBBM0UyRjdEMUZDNEVGNEQxRTYyMTdGRkM5MzMwQjE4MjEyCi06MTA2QUIwMDBGMkVBREE0NUQxRUVEQzJCRTE3REMyQTE0NTdCNzIwMTIxCi06MTA2QUMwMDA1RkI5MUUwMzlFQTFFMzE4RjBCQzA4NzhDNjIwQkRCQUNBCi06MTA2QUQwMDBDNTRCRjBBQjdENDhGNUEwQ0VCRUU2NEJEMTgwREY5ODJDCi06MTA2QUUwMDAzRDQ1NDdBRUMxRjdCNTYxMjI4Q0RBRUMzQjlDRkVDRTRBCi06MTA2QUYwMDBBRDM0OEY4QkFCNTU0MTNEOEFEMjNEMTk4OTgyQzZEQkJGCi06MTA2QjAwMDA2RUY5N0MyRUUwNzNCRjREQ0M3QTkxRDJEMkI3QTc0N0Y1Ci06MTA2QjEwMDA1QjI4RkQ0NkE3MUZGNTIxMDkyNzM1NkE3QUY0N0NBRTZDCi06MTA2QjIwMDBERjNFQjk5OEYyQzdEQzlFQzQ4MkEwN0EzRkQ2RTkyQzNBCi06MTA2QjMwMDAxNDVGNjU2QkZGMTY4RDcxMkFENkQ4Nzg1RDA2NUUyRUMwCi06MTA2QjQwMDA2MjFEMzRCRjhCOEQxMUZFRTUwNDk3OEJCRERCQjg1RkYyCi06MTA2QjUwMDAwMzRGNDZCRjE1QzA4MzQxNEY1NDZGQTVEQkE1OEZFMzlDCi06MTA2QjYwMDBCMzE3NDcxMTVDRDNCNEUxOUUyRUU4NjRDMTgzMzQyRTgxCi06MTA2QjcwMDBGQTVCMUZFNTc1RTY3REZGNzEwRDc4NzRFMDlCOTYyNTQ1Ci06MTA2QjgwMDAwQ0ZDMDM4RjRGQTQ2REJDOTdCRTU5REVCMzBBRDE5M0EyCi06MTA2QjkwMDBFMEQwNzg3REFBNDJERkNCRjY4NDA5ODVGQTJCNTNEQTYwCi06MTA2QkEwMDA4RTI4MDk5Qzc3RkIxNEFDN0ZGMTNDOEM1N0Y2NzE5OENBCi06MTA2QkIwMDAwNUU1QzdGNzVFOUZDN0YzMEFDMTJCQzEyOUI1MkI3QTNDCi06MTA2QkMwMDBCRjk4RDY5NkVBMDk4MkRGQzUzRTZENzM3OUJFMDY3RDExCi06MTA2QkQwMDA3NENFOUJFNzUxQkIzNzRDNjA1RjVDNEMyMzdDNDY3NkEwCi06MTA2QkUwMDBDMkIxMDFGODE5QzZGNTVENzZBNjZGNkYxRUUwRDdCMTg4Ci06MTA2QkYwMDA1RTU3Qzg3QTVEMjFFQkZENDAzMDdEMEI4RkM2RUIyOUQ3Ci06MTA2QzAwMDBGRjI0Q0M4MkVGRTUwRkRDOTRFNUE2NzE4RURGM0I4RThFCi06MTA2QzEwMDBENzc1M0NDRTlCODdGRDc1M0M5NUZBQ0ZCRDcyOURFNTNGCi06MTA2QzIwMDAwRkQwM0E3M0JGNjU5RDhENEVDNjU3QjdFQjhDNkI3QjBCCi06MTA2QzMwMDA0MjdDQ0IzQTM3RUE3NDY4QUNGMzMzQUIzQkRBOEFGQTdFCi06MTA2QzQwMDBCQjU1QjE5QzhBNkFGQjE0REY3RjhEQ0NCQjU2RDBEMDdDCi06MTA2QzUwMDBCNTM2NDkwRkI1NkIyM0ZDQzBENzg1NjZEQjA0N0Y2RTY0Ci06MTA2QzYwMDAyNzFGQTBGMUJFMjczRDU4OTgxRThFOEY3NTNGM0MwMjBFCi06MTA2QzcwMDBGNDc1OUZFQUYyQjkwMTk3MjFFRkZDOUNGMkM3RUY1NzM4Ci06MTA2QzgwMDA1RDAyRjlCMTEyN0VDNDBGMkNFMDBGQzc1MzhCMjc3MzNFCi06MTA2QzkwMDA3RUFGQ0RCNTgyRkFGOUI0RjE2RjdGMDRGRDVDREM2M0ExCi06MTA2Q0EwMDA3MzBCNUU1RkYxRkRCMzkwQTdGOTgyQUYxMTVDNkVDNjA2Ci06MTA2Q0IwMDBCODU0Q0VFQjU3RUYxOUQ2ODg3MkYxRTg2MDU3QTZCQkVGCi06MTA2Q0MwMDAwQkJFMTQwMkU3OEEzNUFBNjkxRkQyMDFDMUUzRDUzRTgzCi06MTA2Q0QwMDA5MEUyQzYzQTBDMzgxMzg3Q0Q5QTNBQTgxMzFFQzg0RkQzCi06MTA2Q0UwMDAxRkQ0MDk5NzVBQkJEMDlBRjhGQjEyRkI5NDQxNDFGQzgwCi06MTA2Q0YwMDAwQ0YwNDk5N0U3NDRGRjNDQzlDN0QyQTI4M0Y2NzNDODlBCi06MTA2RDAwMDBGQzQyRjk4RjUxQ0Y0OEZGRDJDMTU3Q0NGQzc4NTE3MDZCCi06MTA2RDEwMDA5RUUwNTAxOTkyNUYxQ0MyMzdBQTQyQ0FBQjQzQ0FCNzYxCi06MTA2RDIwMDBGN0ZBOUNGOTQwRThGODEzRDNFNEJFMzFFMDU4QUFDMzVGCi06MTA2RDMwMDA3MUJCNDU5MTdDRTQzRUM1QkY4OTdFMkRCNUJBRUQ0QjU0Ci06MTA2RDQwMDA2OUZFMkY4RTExRjNEMDRGOTk1NTM4QUVFNTdERDlDRTFGCi06MTA2RDUwMDBFQjJCQjU4QTg2QjAwMjdDRjc3MDNENjNEREQ0NUY0M0QwCi06MTA2RDYwMDA1ODFDRTVDMzI1MUZBMjdBMTNFQzQxNzk4M0RGMUFGMzdGCi06MTA2RDcwMDAwOTRGOTNGMDMwRDJDNTVCOUQ4REM3ODNFMDU5REQxNDc4Ci06MTA2RDgwMDA2QkNBRDdFRTRBNkUzQ0VFRThDQzJGQzYyRkM5RjQ2RjIzCi06MTA2RDkwMDAyMkFEN0UzOEUwMjI3RkFBNzdCNTFFOEMyMEZBNDlCMjU4Ci06MTA2REEwMDA2OEUxNjlENEVGQzU4M0ZGMUI5REVCNjZCQzBGMkYyNkZFCi06MTA2REIwMDBGQzE2QThFOTJGMURBNkY1QjZFRDU2M0Q5QkQwRUY5QjFFCi06MTA2REMwMDBGMkZDMTE1RjVGN0E3ODFCN0RBRkQ5OUIyMUVFNzU3NzVFCi06MTA2REQwMDBBRTNGMTQ4RTE3Nzc1RDhBNEVBN0VGMTcwRUQ5QzMwNTA1Ci06MTA2REUwMDBDOTAxQTVDREYxNjNFREQxQkNCRkJBODRCQjVCODdCQjQ0Ci06MTA2REYwMDBEMURGMDU2QjZCRjQ5NEEwN0ExNzQ0NkJGNEQ0MjA3QTNFCi06MTA2RTAwMDAyOURENzVBOTRFRTQzMUZDN0M2QTEwMUZGRjc0NEY4Rjk5Ci06MTA2RTEwMDBCMTJBN0QyRkZCN0RBRkIxMTY0QUM3RTlGRERFNkY3MzQ2Ci06MTA2RTIwMDAzRkI5ODZFNkVEREIxREU2RDk0Q0YzQkVGMEU2MkMwQjUwCi06MTA2RTMwMDBEQTVGNzhCMzQyNEY3RkVBRTVGNEIzNEY1MzMxN0VCNDYzCi06MTA2RTQwMDA0NUQyQkIzMURFODgzNDI5NEY5NTU5OEUzRTMxMUFGQzJDCi06MTA2RTUwMDBGRkQ1OUU2OUY1Njk5REU1NjU5NjgyMkNFMDc5OUJBRDJECi06MTA2RTYwMDA2RDJFRTY3RDQxMTFBQjk1QjhDRTdFQzZBNUI5QjlGREI0Ci06MTA2RTcwMDA4NUREMjc5RjAwN0ZGOEY0RkUzRTA1NjAyQjE3NzY2N0JGCi06MTA2RTgwMDBFNzY5NTQ3RUUxRTMyMTU5MkVFQUY3QzI3REM5MUVGMDdECi06MTA2RTkwMDA4NTZEMzZGNzRGOTlERUVFODlGMjYwREYxQkZENjE5QzUwCi06MTA2RUEwMDAyNUU4N0ZGNzU1QzMzNUE0MUZDQkY5NTIzRTRGOTNFMzM2Ci06MTA2RUIwMDBGQTk0ODJDRTdFQTMyREVFNUY4RjAyQkZGOEJEQ0RCM0Q0Ci06MTA2RUMwMDA5OTkyQTU3RkNGRTgxOThCRjU2MTNGNzc4MTg3QjJENTdECi06MTA2RUQwMDA2MUMyNkRFMjI3MkI3OERFQTVDMjYzODcxQzg0NzIxMTI0Ci06MTA2RUUwMDA0NDVGRTVBMjk4QkZDRjZGMzQ3RjVGNDA3QzAyREYxNzFECi06MTA2RUYwMDBBRTM3N0ZBRjEwOERBQjVBNjk3RDhCRkNFNkVGODJGNjIzCi06MTA2RjAwMDA4RjJGMTFGQkRBRjg2OUUyRjM3RUYxRDY2RkMyNENGNUYwCi06MTA2RjEwMDA4NDRGRTcwRjBFRTZDN0E1QjQxRkMxQzc5RTU3RkNGRUZFCi06MTA2RjIwMDAxNUMwRUYzRDJBQUYzMzc0NURDQkQzRDI3ODFEOEY0NEFCCi06MTA2RjMwMDBGQzYzNkU2QjEwNUU4RjU5ODQzNTg5RTA3QUNDMkUxQzExCi06MTA2RjQwMDA0OTA1RTg0NzA4OUNBQkJFM0Q2MUZFQ0RENEU0REVGRUJBCi06MTA2RjUwMDA1RkE1OTYzMkRGNEJCMkUwM0NCOEMzMDVDRTQ3RkRFREVFCi06MTA2RjYwMDAzOTk5OEE3RUNBNTYxNzc5NUI4M0U2NzdEMUU2N0RFNDQ0Ci06MTA2RjcwMDBFNzkwNTdERjIzN0U0REY1OEU4REY1Mzc4RUE1NzkxRDcxCi06MTA2RjgwMDBCQjU3RjVENDc3MzFBRjMzMjQ5RkY5RTMwOTFFRjcyOEI3Ci06MTA2RjkwMDBDMjNGODRGMkNGOUM0QzJEMjFCQzlDREU3QzMyQjUzNEE4Ci06MTA2RkEwMDA5OEZFMTUzMTJCOTgxRThEOTQ2NkMyRUI4MkFDODlGNDQ1Ci06MTA2RkIwMDAxOEFEMDVFQjA5QURENzg5NUZGMzdDMEQ3ODNBNTVCMTczCi06MTA2RkMwMDBBNDJCN0E3ODE0NzQ0RkU1Mzk3RjU3MDVFNENFOUEzREE3Ci06MTA2RkQwMDAzNjNGRTgzMzYyRTMxNzBGREYwQUZBNkNCNkI5NDBEQURFCi06MTA2RkUwMDBCNTdCNTQyRkU0NzRCMTVCRjU2N0UyMUM2QkZFMzRCQUQ5Ci06MTA2RkYwMDAxMkU3Q0NFRTIxMkUzNTY4REQ3NDBFMTdFMzdDQjlCMEI0Ci06MTA3MDAwMDBFQjUyNjI1OTJFRjczMzE5RjI0NEVEOUU4NzNDQTBERjE0Ci06MTA3MDEwMDBFRUU2RjE1QzlBRkFBRkYxM0ZBRjk5RkY5RENGRkQyMDBDCi06MTA3MDIwMDBGMTQ2RjA4MThEMjdCMkMwREY4OTBGM0U5Nzg2RkQ5OTJBCi06MTA3MDMwMDBGNUI1MUQ3OTIxNUE4NzgzRkU2ODdFMkNCRjVGRjQ3RkVBCi06MTA3MDQwMDBDNUYyQTVBMzU5RjVGQUJCQzBDMzlFMzQzQkMzRkYwN0U1Ci06MTA3MDUwMDBDRjZGMDJDRDJGQjE3MzdFMzQ5RjNERTBDQkM2M0M2QjJBCi06MTA3MDYwMDBEQzZENzY5Q0IzMTcxREQxNzlFMEE3QjRBMDg5Rjk4OUFFCi06MTA3MDcwMDBGQUY5RTQwNjdGMkQ5QjI4ODhCRjE2RUU5RUJGQzIwOTUxCi06MTA3MDgwMDA3OUExNTFGMTQwMEYyODZGNTZGOURDMkFERkEwRkFERDEzCi06MTA3MDkwMDA4NDk3QzJFQ0JCRjYzQjIxOUYzRTQ0RTVENDc0QkMzQUQ2Ci06MTA3MEEwMDBFQThGQjNBOEZFQzJGQjU0Q0VFRkRCRjhEMzNGREE4MDAxCi06MTA3MEIwMDBENzBEMzYxMTA2M0M4NjQ3NkZEMkM3NjM3OTY4OTEzRTdCCi06MTA3MEMwMDBCRjQ1Q0QzNzlENTZBMEI3RUM1MTNEMDFCNERGMUNFNTVGCi06MTA3MEQwMDBDMUY3QjJENUI2NjNDMUY0MzUxRkJGNTA3RkYzRDcyQkNDCi06MTA3MEUwMDBGRTQwMUFGODg0QjlGQ0MyMzA5RkNFMjc0MkJFNkY1Q0M2Ci06MTA3MEYwMDAzNTc1N0YwMjUyMkJFQjg5OEJGQ0U2NzJGQ0JDNEVGMzlDCi06MTA3MTAwMDBBOUQ1N0ZERjlBQjlBNjE3RjA3M0MxMjk0NDBCRjZBQjU2Ci06MTA3MTEwMDBCNTk1RjUxRDExNjg0RDA1MUUyRkVDRkUyQzE1NzhBQ0FDCi06MTA3MTIwMDA3REY1N0ZCMjQ0MTdGOEVCRDg0RkNENTEwOTI3MjI4NDYzCi06MTA3MTMwMDAzODRCRTdDNjM3MTZEMEZEQTVDOUM1NURENDdGQjE4RkUyCi06MTA3MTQwMDBEQzE3NUI2REJFNUU5MDYzRjc2RkZDOEFGOUMxQzVERDJECi06MTA3MTUwMDA1QTVGNTcxN0Y0REJCOTVGN0Q0RTRCMTJEMjgwNTMyMDM0Ci06MTA3MTYwMDAxRERBRTRCQTExRkI4NEU0QzE3QjQxMUY5QjU2NERERDVGCi06MTA3MTcwMDA0NDc5RTc2QjM2NDg0MkEyMzYzMzkyRjcwQkY2QzdGQ0U4Ci06MTA3MTgwMDBBMDdFOEQ3REIyMTU3QzAxRTkzMEM5MUY1RUVDMjNFNTQwCi06MTA3MTkwMDA4NEQ1QkFCQ0IwNzU1RkZCRTRDQzJFRTZCMzNBQ0QyNkZECi06MTA3MUEwMDBDRkRCM0U5MjZGQ0M0RDJCMEU0Rjg3OUM2MUYxNDUwMzk4Ci06MTA3MUIwMDAxRkMyRUI3NTI3MTA3QzE1OURCRUVBOTcyRDUxRjAzRDNGCi06MTA3MUMwMDA0OTM0NzJEQTVCMzQ3MUZBQjgxMDVBMjRFQTBCOEYwQjI3Ci06MTA3MUQwMDA3MDE2QTI0RjJDRTBDNzdCOUVEN0FCMzFERkZDODk4RUE3Ci06MTA3MUUwMDAzQkYwNkFEMDgzMkY1NkY4MzdEM0VGRUE0Njg3NTA2M0Q3Ci06MTA3MUYwMDAyMEVEQjU0NkEzNTFENEEwQTlCRkVFNEJFNUI2MEY1NDgwCi06MTA3MjAwMDBENjlGRDQzRTA2M0UzRDJFRTBGN0NCQzhFOTMxQzFGODBCCi06MTA3MjEwMDBEQjc3Qjg3NDAyRkFBQkRFNDk3QTJFRjU3NzdFODc0REJDCi06MTA3MjIwMDAwNEEwNTc1OTY5QkY1MDNEREJFMTJGRUM2OUUwNEJDRDFECi06MTA3MjMwMDA4QTgwQkM1QzRCNzk3Q0FGMUQ2NUY1RkE4M0UwOTI5NzQwCi06MTA3MjQwMDAyRUUxOTE5QTlFQzU3MEJCNjBGNTFFOUEwOEZBNzM5NTVGCi06MTA3MjUwMDBEQTIxRDdEQjBFOTc0RkMwNzk2MzRCMkFCNTYzNUVGQjBCCi06MTA3MjYwMDAwRThGNzVBNDAxNkZCMTU2REUzN0FCOUE4RDcxNUI1Q0UyCi06MTA3MjcwMDBFODNGMkFGNjAzOUU2RjQzQUU0NTQ0NTNCQjg2OEZDMjU4Ci06MTA3MjgwMDBGQzBDNEM4N0U0NDM2MTNBNUMxQjAyODUwRTc3MTdGOENGCi06MTA3MjkwMDBGMTg5QzIxNDMxODJDQTc3QTgxMzMwQ0ZGM0FFNTIxN0U2Ci06MTA3MkEwMDBGMDY4OEI5NTc2ODczMDlCNzcwMkY0OUFCMEQ4Qjg3OERGCi06MTA3MkIwMDBDQzZGNDQ3QTA2Q0ZGRkFCRDgyNTNDQ0ZBRjQ4QkM4MDFCCi06MTA3MkMwMDBCRTQxRjI3QTMxRjIwREJEQ0I1NTg2N0RFMzIzQkM4RkYyCi06MTA3MkQwMDA2QjFENzJGQ0E4M0QyQTlGQTM2MkE0NDNFN0RCRUZCQkIyCi06MTA3MkUwMDBDQTY4OUNDOEJFREEyNEQwODMzMTlGQTg2MUFGMEJGMDc2Ci06MTA3MkYwMDBFNzFDOEI4NUU1QjM4NjM3MjJENzgwMkYxOEU1MUJEMjk0Ci06MTA3MzAwMDAyNUJEMTlGODU4OTk2MDc1ODE3RjNDQUVEM0U3NEE1NzdGCi06MTA3MzEwMDBCMUEzMjA2ODlEQjYxRTE2MUQ1RUM1MEVDMDY5QkJCRDFCCi06MTA3MzIwMDBGODEwQ0U5NzM2RkE4RTczNzM3RkQyNTQwN0Y0MTRBQUVFCi06MTA3MzMwMDA2NzQxM0YyN0VBNjhDNzY0QTNERkU5MEVDMDc3NDE0MjhGCi06MTA3MzQwMDBFOTc4QjQ1QjI4OTZBQ0MyN0U1QkI4NUUxNTgxMjAzRUJFCi06MTA3MzUwMDBEQjYwOTNFMzJFQjgxQzIxMDI0MzNBQzc1RDQwRjhFMzlCCi06MTA3MzYwMDBGNjk3QTNGOTdCODM1M0Q2NkI4ODkyRkJFN0NFNzQyOUZCCi06MTA3MzcwMDAyRkFFRDREM0I1N0FGQTgzRjlCQUM3Q0NEN0NGQzdGRTJDCi06MTA3MzgwMDA3MTRCQTlFNEVGNzdBNjUzQkZENTRBRUI3ODg4MjZBQkJCCi06MTA3MzkwMDA5MkRBRUQ4MEVGODkzQTk3MDg4NDA1Q0RGNzhBNzVDNkIxCi06MTA3M0EwMDA4QjQwRDAzODFERjUyRTNCNDUyMDNFMTgxRjZFQzY0NzNBCi06MTA3M0IwMDBFNzdBMjNCOUZDNDQ1RDEyQzNCMUZCRkU1MzRDNzBFQzc5Ci06MTA3M0MwMDBFQzNGQzMwNEM3MkJGQkNGRTJGMjEzNzUzOURGRDFGRkNCCi06MTA3M0QwMDBDMDZFRkE0RjMzQ0RCRkIzREY3RUZDNURFQ0QyRkE4MkQ0Ci06MTA3M0UwMDBCRkRDRUQyMjdFQzA3NEQzQ0E3NjI2QkJBMkZEMDY3NjMyCi06MTA3M0YwMDAyRkYxNzE5ODgwRENGNzk1NTNDQjc2MDVGMTg3NkRFOTE1Ci06MTA3NDAwMDA3NjVEOUYwQkE0ODBERkZBQzQzQTRFNkI3NzVEMUE4RkNFCi06MTA3NDEwMDBGNjZFRTIwQjZDRTdEMENCNkI0NTFCQ0YxM0ZDMDJGQTg4Ci06MTA3NDIwMDBCRDQ4QjZCQUI5N0M5Nzk2MERCREM4OTg0Nzg3M0NGMzVFCi06MTA3NDMwMDBCQjQ4OUY4NUY2NDFEODlFQkY0NzYzMUY1RkI0QjY0RERBCi06MTA3NDQwMDA4NjdEQUFBOTU5OEQwOERFRDcwN0Y0RkQzMUI2Q0YxNzdFCi06MTA3NDUwMDA3OUIwRDdENUEwMURGMUJEOUZFRTVEOUMwREY4RDQ4NDA5Ci06MTA3NDYwMDBCNUU1NjFERUZCRjdGRTJEMEZFN0M4NTc3QjE2RjdDNUM0Ci06MTA3NDcwMDBGN0FENTQ5RkU1MEY3QjVCOEQyN0E4QkY3RUMyRTVCM0I4Ci06MTA3NDgwMDA4Q0U4NEM5QkY1RkQxRkZBN0RFQjlFRkE1RTk4QzczNkEzCi06MTA3NDkwMDBEODNENDgyRUFDNTlGNjU2QzZGMTc4QjAyMUVGODNFMEJFCi06MTA3NEEwMDA1RjgyRjgxNkVCNDNCQkE2QTk2MzIwREY3RDQ4MzIwRjRECi06MTA3NEIwMDBFNTg3RUU5NjcyQzNEMDNFQzI2RjQ5ODNEQ0Y3RTEyQ0JDCi06MTA3NEMwMDBGMDg5OUE2MTc2MTc1NEUxRjBGQzE2OTZCN0MzODczOUI0Ci06MTA3NEQwMDA1QzM4OUY5RkVEOTNDMUVCQjM0MzRFQzg0MEZCQTI3ODRECi06MTA3NEUwMDBBNkU3NTRGMUFGQzk2RDFCNDJGNjRGRTAwRjM1REI2OERDCi06MTA3NEYwMDBCQzZBQjU3NUYyMzg4NUY3RDEzMUYwQTk5QUI3QkY3ODczCi06MTA3NTAwMDA0N0Q3NUYxMzgxOUY1QThDNEJGMDc4NUZFRjI3MjE0MzU5Ci06MTA3NTEwMDAzQjg5N0E5QUEzRjVCRUFCQThERThDOUI5MzUzQTExRjNGCi06MTA3NTIwMDA5NUU4RkE5OTk4NDg0MDE5QzlGQzY4MTBFQzIwNTc5RUQ0Ci06MTA3NTMwMDBEQjUyMEY3QTRERDEzNEMwQzE5N0VDRjBFMEZDMUE5OEMxCi06MTA3NTQwMDAyMjFDQzk3MUQ4RDBGRUY0QTkzNEVFNTdFOTE2QzMyRTE3Ci06MTA3NTUwMDBBQTYwREUwM0Y0MzUzRERGQUI2OTY5MkM5RjkzRkUzOEVBCi06MTA3NTYwMDBEMEQxM0YzQkFFMjVDM0ZCNzdGMDBCQTNGRTg3MzdERkJGCi06MTA3NTcwMDAzQTQ4RUJFMkRDMzBFNDc5QkJCREU5MzZDQ0IzQUQzQTU2Ci06MTA3NTgwMDA5MkY1NDc5OEYzRDBFRUM5OUJDMzAyMkFFQzhBQjZDODlECi06MTA3NTkwMDBENUQwRTczRjhBOTg3QkIwMDdDMUUzRkUyODJEMjI4MzMwCi06MTA3NUEwMDBEQUNEOUE3OUMzMkFFNDk1RkRGMUVFQTVBMEU3OTJENjRCCi06MTA3NUIwMDBFMUMwRTdEMzRFMkQyNjgzQzZBRjcyNjg3RDEzNjk4OTdCCi06MTA3NUMwMDBFN0ZCNjhEOTMxMzhFNDhCRTMyNTlFNDRGMUEwRTIyRTM1Ci06MTA3NUQwMDBFNzJGRTc1M0EyQzhGMTBGNDc2OTQ5RThBN0M0RDJGMkUxCi06MTA3NUUwMDBDNDU1Rjg2NjZENjE3QjgzNjhFOEMxRkQ5Q0I3OEI4QUUyCi06MTA3NUYwMDBBRUU0N0YwMzBFNDdGNDc1RUNCMzg5NkIyRkQzRkFGNjM0Ci06MTA3NjAwMDBBRDhERjFENEQzN0NDQkVGOUUzOUI3OTZEMkY5OTZFMjBCCi06MTA3NjEwMDBDNDgwNkE5QTc3MTZENjU1RTUyQkU5OUI0Q0YyRjM3OTJDCi06MTA3NjIwMDA5QjNFRUY2NUZBQkNBREFFQUNFMEZEMUMzQUVGN0E0MzkxCi06MTA3NjMwMDA1RUY5ODVDMkZBMjBGRjUwRkUxNTVGQUNGRjVFQ0E4Nzc3Ci06MTA3NjQwMDA1OTJFN0QzMDBERTdENjIwMEJEQjQ5MzY4NEQzREUyMjYwCi06MTA3NjUwMDAzREYyNUQ3RDlFOEZEM0JFNzNDNEYxRjdENUY4OUUxNEM1Ci06MTA3NjYwMDAyRURCMjczRDZDRjFDMzdFNTAzQzc2MzdFM0U5Qzk5QUE3Ci06MTA3NjcwMDA0ODhGNEE2Mzk1MDhCNzFENzI1MDk5RjBCMjVDRkNEOUU3Ci06MTA3NjgwMDA5OEJGRUQ2OUE1NzUxNTY2NjhENzAxNkVGM0UyMkRBOTVGCi06MTA3NjkwMDAxRkYwM0NCNDgxNTMyMDZGOEQ5MkVCRjgxNjc5OTNENzhECi06MTA3NkEwMDAzMTU1Qjg2QzJDOTQ4OTM1MTZDODFGNTM1RDcyMjlGMzc3Ci06MTA3NkIwMDAxNUI5M0ZBNjA5QUYwREUzQ0QxMDFBRDdGQkMzMDVCQjIzCi06MTA3NkMwMDAxN0ZBQzQxRkEwMEJEMUJDNjcwQTFGN0Y5RjJERkM5QzFCCi06MTA3NkQwMDBERTJBMDI1Q0ZGQzdBMjk1RjMwNkJDODkzRUU2MjU0ODc4Ci06MTA3NkUwMDBGQTM4RDk1MzY1RjhERjhDNzlCRjE3OTFENzY3MTlBRDkwCi06MTA3NkYwMDA2M0NBMjNEOTk5QUM1RkFERUJDMUYwRjlBRTc5NEZEMTM0Ci06MTA3NzAwMDBFOTg2RjZFRjNDRjQ4M0ZEM0I5REZBOTk3QTYzQzhGRTY3Ci06MTA3NzEwMDAyREVDNjFFMDMzRjNEQkY2NTE0QjdCODdGRTE0OTk0QzgzCi06MTA3NzIwMDA3MEI4NUU0N0U5RjVERUM1QUMzRjE1QTk5MUMyNDdGOEQwCi06MTA3NzMwMDA2OTE5QTVGQTIxNzcxQ0YyMkU0RjQ4QTA3NURDRkRCOTE2Ci06MTA3NzQwMDBENDgzN0VCNzVDQkMzRDg0Q0E3RjM3NDYxNUY1RENEMjU2Ci06MTA3NzUwMDBDQkYyRDQ2NEJEOUZDOUJEQzc5Rjg2OURGNUIwMDgyNEY4Ci06MTA3NzYwMDAwQ0E1QjkxNzVERDY1RThGQTFGOTRFNTZCNzM1QzQ1MjM4Ci06MTA3NzcwMDBGOTg0REVBNEM3MDRGMUJEMUIxMkI2NUJBMUQ3REREODI2Ci06MTA3NzgwMDBDRkZDN0Q2MkFFNTlERjk5MjQxQTU1QzA3OUYyNTA3MzRGCi06MTA3NzkwMDBCRDdEODAwRkQxRDc4QTBDQTlCNzg4MDE2MjgwRUVERjRBCi06MTA3N0EwMDA2M0I5RkI0NzdBMUZFRDEzMkZEOUUxMEI3OTM1NDNCQjQyCi06MTA3N0IwMDAwNzcwNUMzQUU5QjNCOTE4NTc1OEU1N0E2QURFNTFEOUNGCi06MTA3N0MwMDA5RTc3OENFNDJDMkY5RERGQzdFQkU4ODQwODkzRjIwOEFBCi06MTA3N0QwMDBGMkE3NDg2RTQwN0FBNkNFQ0RFOTM5M0FFNzUxN0VBMUFDCi06MTA3N0UwMDBDRTIzRUI2NzE0M0Y4MDdENTZCQUZBNzMyQkYwNzJCNzQ1Ci06MTA3N0YwMDA1M0MyRjk2RTY3QUExRjc2QjU4QUE2QzZGMTk4NUVFNUYwCi06MTA3ODAwMDBBRUE2ODM0OENCMDNDNUUzNzFDQzJFMzhCNEU0MjBEMkI2Ci06MTA3ODEwMDBCQjNCRjRCNjI1MEVERDVGQzBGM0JGNURBN0QzREJBMzkyCi06MTA3ODIwMDBBNkRFMzQ4OEY2QzlFREJCQTVERkVCRjYzRTUzQTc0REM3Ci06MTA3ODMwMDA0QTQwREVDNkY5RUVFOEE4RkFCMjIyMzREQTIyQ0ZBODJFCi06MTA3ODQwMDBERUNENThCN0I3RjlFOEMxNzg1QUU3QzlCQTExM0NGRjlECi06MTA3ODUwMDBEMzc1NUU5RUZGRDlCQTA5OUNGRTNEQTNGODM5QUUyN0M5Ci06MTA3ODYwMDAzRTY3Nzk2Q0QyQjZBM0Q2MTRBQTVGRTQ1NUJDRDhCN0VDCi06MTA3ODcwMDBENzdBODVERjRGNzRCMURFMjZDRjgxRjU3NDBFNjAxRjk1Ci06MTA3ODgwMDA4RjE5MzRGNUYxM0IzMEU5MEM2RDI3REFDRkI4NzE1MTFGCi06MTA3ODkwMDAxMUM2OTkzQ0EyQzQ4QTdBMzNCRjE2MjIzRUFEOTM0RURDCi06MTA3OEEwMDBCRjhCRUU4REY1NTdFQkY4M0JCRjU3NjE3ODlFREYxQjIyCi06MTA3OEIwMDBDQkYwNkNERjkxMTEwM0Y5NjBFOUNFOEM5RTQ4ODk2RkEzCi06MTA3OEMwMDAxQTdBNkYwNEUwRDc3RUQ5QzJGMzZERkYyODlDRjU4RTNCCi06MTA3OEQwMDBEMEY2NEI3NzBFRUM4OTdBNjcwOURGMjI0OERFM0NGQjU1Ci06MTA3OEUwMDBGQzdGQjg4M0NGOTVCMzcxNEQ1RjdEMDJGRUY2NTdDOTFCCi06MTA3OEYwMDBERjQ4QjIzOUYxMThGODVGRUY1RTFFRDBDQjA1NURDRUUwCi06MTA3OTAwMDAyNjNEMjMwMkU3NUY4RDZFNTcwNDdGNDJGRTZDQjhCNEJDCi06MTA3OTEwMDBFNzBFN0YyMTY1MkNGNjE3QzY3MzEzOUNDMzFDMTlCOTlCCi06MTA3OTIwMDBDNzg3NzA3RjQ3N0U0NkZEQkRGQzU4OTIwN0ZBRUZCOUM2Ci06MTA3OTMwMDBFRDhGQTQ2M0ZDQUQ0REYzM0Y3OThDRkEzRkVGQjdGOEMwCi06MTA3OTQwMDA2Qzc0NEU5RDE3NEQxNzVFMDUxRjdFMkE5MkVEN0I3NzU2Ci06MTA3OTUwMDAyQjM0MkY5Q0MzOUI3QjcxM0U0N0IxODYyRkMzMzkyQ0EwCi06MTA3OTYwMDBGQ0JDQ0Y3MzE0Qjc3NTE5RjFBREFBMTcxRkVEMDU3QURBCi06MTA3OTcwMDA3QzhENjAzMDgyQ0E1RjVCMUJDMTdDRUQzNTlCRTdDOEE0Ci06MTA3OTgwMDAzMkY0RjdCOEVDRUZFOUZCRUYzQ0I2MEJFOTdERDUwNTM3Ci06MTA3OTkwMDA3NzUyRkE2NTQ2MUNFM0ExRkM4MTQ1MDNEMDlFQ0U3OTVGCi06MTA3OUEwMDA5MTRDRkQzREY3OEExMjgwQkY2QUQwQkE3RDJCOTI2OTU3Ci06MTA3OUIwMDA3RTgzMzcxQ0I1RjRBMjM0RkYyOUE1MUVFOUMwM0UzN0VCCi06MTA3OUMwMDAxRTgyRkRGOTZGMTk2RTZFM0Y2NDVCOUE5QTgyNkREOUMzCi06MTA3OUQwMDBDQkZGQzk3NTdDRkU5QkU1ODJEQzc1OUY4RkVEMjUzQTU4Ci06MTA3OUUwMDBFNTgzMDE0QUQzOTk4RDM0RDdCMEQ0OEYwQTM0ODY2M0E2Ci06MTA3OUYwMDAyM0FGNjc2N0YzQjRGNzZGMTU1ODA3NDkxRTk4Nzc4OTY3Ci06MTA3QTAwMDBEREMzRTc5MURGQjcxMTc4M0VBRkU1Nzg1OEJGMkJGNkJECi06MTA3QTEwMDAzRDBBN0EzQkFGMjU3QTcwM0VCRDRDRkFGQ0Q1QTg3RjczCi06MTA3QTIwMDBDNENBRUI3Q0U1QTlGN0EyNjFERjg5MjEzREQ5MDlCRjcyCi06MTA3QTMwMDA0ODdFREI3OEQ0QUZFRUUzMTZGMDg3RjU3OUUyRkEwOUY5Ci06MTA3QTQwMDA4MDRGQ0Q4RTlEMUJCOTlGMkE4NzA3RkE2RUM1Q0U0QkZFCi06MTA3QTUwMDAwNzUzMjAyRkRFMjAzQzk5QTBDNzFEMzJGRkFCNDJBRjU5Ci06MTA3QTYwMDA0N0E1QTU1NjZDRkM1MkU2NUI4QTM5NUY0Q0RBMjdGQ0M5Ci06MTA3QTcwMDBGRUEyNENDQTQ5OEZFOEU3QTA2OENENjM3RUM5MjRFRTE4Ci06MTA3QTgwMDBFRUM0RDdBRkE4MThFNUVCRDM3Q0M5QjA2RjFCRTcyN0NFCi06MTA3QTkwMDA5RDdCQTlGREIwNjVFQ0IyN0RDQkQ4NUI1MzE5MkVERjgxCi06MTA3QUEwMDBGM0RDQjNFQkU3OTdEMURGMjM3NkUxNzM1MjNGMzBERkFFCi06MTA3QUIwMDBDMDlFQkVDMTJFQ0ZFQkNEQzQ2NzQwMkZDNjc5NERFMzJCCi06MTA3QUMwMDBFNkY1OTNFREJERTBBRjI5QUEzMjY4MDdDMTIzRTU5MTQxCi06MTA3QUQwMDAzMDk2MzdCRUVGRjhCMzYyNTZGMUY5NkRDODVCQjVFMTg5Ci06MTA3QUUwMDA5MjJGRjJEOTQxRUQ1Rjg4RDJBRUVFMzcwQzc2MzI3OTIzCi06MTA3QUYwMDBERTBCQUIzQjE3RjJDOEUzNTFERTZCRkFCMUJDRDU5Njk3Ci06MTA3QjAwMDA4QTM1RDAzOTdBMURFNjUzQTM5MkZDOTUxMTI0N0Y0NTFFCi06MTA3QjEwMDBDNjdEQUY3MzM0MTBFNTJENDJGQkVGNUI3RjZDMDRDRDY3Ci06MTA3QjIwMDAzMzA2MjlGMUVGNjhBNDg2REU0NTVBNDg5N0ZDMzk3RDczCi06MTA3QjMwMDA1QjEzRjhGMzQzNjE5MjNGNDcwRDYxQkU2NEFDMzM3NDRECi06MTA3QjQwMDA5QzAzQzQwNzM0RTIzQjZGRDAzOUEzMTEzRjE4MTczOUE3Ci06MTA3QjUwMDBDNkNBNzg3RERENTI3NTkwQ0VFNTIyMzkwMjA4REExQTYwCi06MTA3QjYwMDAzQjk0RjNERTI4ODI2MzYxQTQyQUI0MkVGNDQ3MjMyNUQ0Ci06MTA3QjcwMDBCQ0NEQzczQUM3Mjc0NDk4RUExNTI1QzREQUIxOEZCRkYwCi06MTA3QjgwMDBFRkZBNTUxRDRGNkFCODNDQkZENDcwODNCRkJBMTM3NDY3Ci06MTA3QjkwMDBCRjdEQzhGQUU1N0E2Rjc3MEU2M0JFM0E1NkY5N0VFQjgxCi06MTA3QkEwMDAyRUIyMTVERjA5M0M4RjhCQ0NFNzczNzM1Q0U0OTQyMzEyCi06MTA3QkIwMDA5QUUwNzVENEUxN0JFODdBNDNENzI1MUNERjRGOEVGQTMzCi06MTA3QkMwMDA4OTIyN0MxNkVDQzdDRkVENkM3NzZCQjZCNTNFRjc1QkMwCi06MTA3QkQwMDA4MjZCRjNBMjVDMEZFQzQ3MkZEM0JFNzA4MDlGNEVCNTMzCi06MTA3QkUwMDBCMzlDREIwQ0Q5OTJFQTM3Rjc3MDcxNUNDQjZCQkFERkQwCi06MTA3QkYwMDBEQzM3NUI2RkVGMTQ3Q0JFMzRDRkVFQzU3RUY0NUU2MTg0Ci06MTA3QzAwMDAzNDEwRUM0OEY1RDI2RkQyNkM1QkYyMTZDRUVCRTZFNUExCi06MTA3QzEwMDAyOTFFOUE4MTUwQzFFRjY5Q0I3Q0U0OTdGQ0JDNUUwOUI4Ci06MTA3QzIwMDBEQzBBN0Y4MUVGNzNCQjQwRkQ3NUIxRkVENUU5OTQ1RjNGCi06MTA3QzMwMDBGNzhCMEM5RUNGNDdBNDhGRDc2MkJDOEE3MEU2NUJFQkI0Ci06MTA3QzQwMDA2MkJEQzk3MTA0OUY5N0ZGQTFGMjc5QjIyRTlGRjI5MTk0Ci06MTA3QzUwMDBDQ0Q3RDk2RUIzNkU4QTM3MTk3RUFEMDQxRDZGRUIzNjYzCi06MTA3QzYwMDBDQUYyNUVCMDkzQTIzQzREQjZGRkM0MjZFQkRGQTJEN0FBCi06MTA3QzcwMDA0QkQwRjFGQkIxNEVBN0I0RkY5OTNGNjg5MzIzQUNBMDYyCi06MTA3QzgwMDBGRjc3RkI5NUJFQzZGQjQ2Nzg5M0UxMTc3QUFDM0M5MzMxCi06MTA3QzkwMDA2RDk4Qjc1NERFOTBDNkY0QTREQkQzNjZFOUZDRENFODRCCi06MTA3Q0EwMDAxNzBEMUNDMzIxNEZDQjlGRDlGMzM3M0I0MURGMzMyQTNDCi06MTA3Q0IwMDA5QzQ3MjExRjdFNTRCMTIyMEE3QUZEMEM0RDBEODQyMTcwCi06MTA3Q0MwMDBCRTZBN0E5MUI3NDNBRTRCQzdCODVFMzk2RUI5QTExRjkxCi06MTA3Q0QwMDAwNkNBMDBERkJENkQwRTcxMkZDQkZGODEyMUMxRkE5NjYwCi06MTA3Q0UwMDA4MUU3NDVGQUJFQUQ2RTFBRjM2MEIwN0U1RDY5MjdGRThFCi06MTA3Q0YwMDAzMzE4RTU3MjNGNTc0NTZBQkYwNzdERDVFRUJBRTFDMTNCCi06MTA3RDAwMDA2MEJERkI1NEY5NDM3OUJDRUZGNDcxQ0ZENTc5MUYzQ0NBCi06MTA3RDEwMDA5RTA5Mzk2RjAyQTdDNkI4MURGQTExRjA0OUZERjZENUM0Ci06MTA3RDIwMDBDRjczREFFRjNFMEJGMERBRTQ5NEZBOTJCNUVERTM4NTI3Ci06MTA3RDMwMDA5NEFGOUYzNTgwQ0ZGNzA5NTMxRDVFRDhGNURBNzc4NDZECi06MTA3RDQwMDBGOTYxQUZBRDlGMTVFRUM1QkFFQUY3NDRGOTYxNTc5OEVFCi06MTA3RDUwMDBBN0VGMUJEMkJCRjhCQjZGQkI4REU5QURDQUVFN0Y2NjQ4Ci06MTA3RDYwMDAwQkI1QUJEQURCOUZFOTg5RTg5NUVEOTZCRTU3MjM2NDQ2Ci06MTA3RDcwMDA3OUI0Mzc2REU1NTA5NEY3NjRGQTc5Q0RFNjhFRTFGMjg3Ci06MTA3RDgwMDAzNzU1QzFFNUUxODFBQzU4ODI3NzlCNTMzQjg1NzUxMzJDCi06MTA3RDkwMDBCREIyRkRCQ0NBMkVCRjFGRDFFOTEyRkEyNUZCRkY5NjZBCi06MTA3REEwMDA0NDcxQkY0MkNGNkIzRjhGNjc3RDRGNThCREM5RjM5MTgwCi06MTA3REIwMDBCRjdEMjBBRjQ3QjNDQjdEMjE2QUE0N0U3OEM0MjVFNzgxCi06MTA3REMwMDA3NUE0Mzk5RUY3ODU0MThGNDc4QUI3REM5Mzk1ODBFRjdDCi06MTA3REQwMDAyNEFGRDJGQ0ZFQjI0QzBEQzAxRjZFRDA5RjMyRjVGMjI0Ci06MTA3REUwMDBEQjU3NTFCQjRGNUY1NUQ5NkYzM0U3RDc4QjBGRTNGQkExCi06MTA3REYwMDA5QzE1RDUxMzM5QURCQzZCMzI5RkNCRjUxRkE3RUVBMkY2Ci06MTA3RTAwMDBGMjg0QTlBN0Q4QkY2QkUwN0Y0RTk1RDk5RjlBOThFOUQ1Ci06MTA3RTEwMDA1NTMzODFERjVDRkZGNjgzNTRGRkUxRDkyNzE2MDBBRkFECi06MTA3RTIwMDBDMzMzMzU0NzI2RUNEQkY2RDY5N0ZGNENGMzZENURGRThBCi06MTA3RTMwMDAyN0Q2QTMzNjQ0NkIxMUY4N0U3MUY3RDM1Q0JGNjZDNUI1Ci06MTA3RTQwMDBGRjJDODA3RTUwNjM5NTc0NjM5Q0RCQjUzQTNEQkY5MUY3Ci06MTA3RTUwMDBBOUM1QTJGRkFBMTVCRjYzM0QyMjIyQjc0NUYyRDdCQjMxCi06MTA3RTYwMDBCRTFGM0YzQUQzQkNGOTY1ODVEQTJEMEU2RkFFRTE1NEUzCi06MTA3RTcwMDBGNUU3RTFGQzNCQUIwNEEyOTUwQzg2MkJFQjc1RTc1Q0M4Ci06MTA3RTgwMDA4MTY4RTA0N0IzNDhCOTcyRjFENjEwQkYzMTUwOTJBODZCCi06MTA3RTkwMDBEQjhCQThEREUyMjY1NThGNTdGNERCNDFBN0ExRjUxNzUwCi06MTA3RUEwMDBEMzc3QUVGNzNEQkY1NzhBMjZGOTNENzZEN0ZERDczMDU5Ci06MTA3RUIwMDBGRTQ1MDBGRUFFMzNDRjY0NkUwMjNEOUNERkY5NzQ1NjgyCi06MTA3RUMwMDBCMDlGMzYzNEJENzJCRTcyRkRFN0Y0N0Q3MzhFQkVEOEFFCi06MTA3RUQwMDA0MDZGREJDMjRDRjY4NTBCQ0YyNEVCRjQyNkU5RTlDMkY4Ci06MTA3RUUwMDAzM0Q5RUNFNzRFRDRGN0Q5MDVDNTY3MDk0N0JCNUYwODFFCi06MTA3RUYwMDA4RTY3MTA5RUE2RTExQzk3RTM2RDFBMEVCOUZCNjE5RDdCCi06MTA3RjAwMDAyRjJFOEU2RjFBMEVCRTY3RjA0MUUxNjhDQTYzQkI0MTI3Ci06MTA3RjEwMDA0RTUzMUVGNDY0ODM3RjhBRTJBNjJDRkVFRTZGQ0E0MkEzCi06MTA3RjIwMDBGQjk3MkREMjBFNjNDQ0E3RjJCOTE0OEU3QkEyQjVGMENECi06MTA3RjMwMDBGRUFFN0M2RUUwMjZFNDhENzFFQTlEOTJFRkQ0M0IyNTg3Ci06MTA3RjQwMDA3RjA5NURCNzk2MjlFREU4QTQ0RkU2MUVBN0IzQTQzRUNFCi06MTA3RjUwMDA5NkY0ODI1Q0U0OTM2NURFMjlGMzBCMzc5NEQ4RTE2RkU1Ci06MTA3RjYwMDBBRkI3QzlCQzZCN0Q4OUZEMThFNkY3MzU2OUI1QzQ0RjVECi06MTA3RjcwMDA3Mzc0QkZDNTAyN0ZBOUREMEJGQkZFRkFFNUUxMUMzRjcwCi06MTA3RjgwMDAzMURCM0VDRjRCNjlGNjdBQkI2OTVDMDMwRkZERkRFNjQyCi06MTA3RjkwMDBFRjhCRjRGOUY0MEQ4OTBCRUFBNUI2RUQwQkMzMzlGNkI2Ci06MTA3RkEwMDBBNEU4MzI4RTYwNDlBNkI0RTMzRUZCNkM0NzdDOTFBQUZDCi06MTA3RkIwMDBFQkRCQzI2REQwQTE1QkVBMUI4Q0Q3OEZFRDA2NUVFRkM5Ci06MTA3RkMwMDA0OEExRjkyRkQ2RTNBNTVFQjY0OEI4RkE5RTk1N0NFM0EyCi06MTA3RkQwMDBFNTdDMkQwNUU3RDUwNUMwMURFNzVDMkNFNTczMjFFRjk5Ci06MTA3RkUwMDA0OUJDMTk3OTAzNUZBMUYwNURGMUYxODIxNEQ4OTU5RjI2Ci06MTA3RkYwMDBDODk0RjZDNzUwN0MyQzhGMUFERTEzRTUwNjVDQ0ZENEVDCi06MTA4MDAwMDAxRENBMDBEQzhENzU5REE4RjM3QUU5NjhFQkI0QkZBRjlCCi06MTA4MDEwMDBDRjc3Njg4QzhGN0M0NzMwN0RENzZGMUQ3Mjg4MjQyMDg2Ci06MTA4MDIwMDA3MTZFQUJENTgzMjVENDVCRkRGNzQzQkZBOERGQUEzNkJECi06MTA4MDMwMDBGOTA0OTczQjgwOTc3MzkxRkJERjQxQkQwNTFCNjIwQkYxCi06MTA4MDQwMDBBMDBGMThFRDE3QUUyRkYyOTYwN0NEN0JFMDU2MzM1RUVBCi06MTA4MDUwMDAwNjM1OTlGMzgzNzc5OUYzNUI3MTA2MERGQkU3REJFNTUyCi06MTA4MDYwMDAwN0NDRjkyMTg3Q0NGOTkzMUZEQzcxMzNCNjRGODVFQTMxCi06MTA4MDcwMDBCQjVGODVCRUYzRTdGMTg3NzA0RTlGN0FGOTk1NjhFMEE0Ci06MTA4MDgwMDA2QkYxNUZDQjBGNDI4RjBCOEQ2NzIxM0MyQUQwNzM3QzQ1Ci06MTA4MDkwMDA1QjE0QTY5NzJCRTI1QUJBRTE0MzQ2REMwNjc2NjIzMEJGCi06MTA4MEEwMDBERDU0MEFERjQxNkJEQTk1RjVDRjhBQTY5QkJENDQ2N0E0Ci06MTA4MEIwMDA1NUNCREVDRjkwN0FCM0VDNzc2NEQzNUEzQkU0Q0VEMDg1Ci06MTA4MEMwMDA3MUJCRTMzQjIyRDJFQkM2M0UyQTE5MjFDQkFFNUUzNjEyCi06MTA4MEQwMDA0RTdDOEFGRUQ2QkMzNzFFRjQ1OEYyMkI4NUU1OUI5MjY3Ci06MTA4MEUwMDA5N0IyNUYwN0REMUNERDNFRkI0NjRFNkY5RUMwRjAzMDUxCi06MTA4MEYwMDBFQzkyMEI5Qjk1NDAxNEU1NUQyMzQ0ODc3RjFGRjE4QjI5Ci06MTA4MTAwMDBBNTBEMjFGMTlGNkI0MkUyODJENjk5Q0IxN0VFREFGN0VCCi06MTA4MTEwMDBGRjEwNDc1MEUxNzg4MkUzMkVBRThDNjdGNDFGODA1RTNCCi06MTA4MTIwMDA1OTc5NEFCMDdEQUFGMkE5NkZDMkNDRTU3MjVERjNGNTI4Ci06MTA4MTMwMDA3NTE4RTdBREYwNURDQkYxN0I1N0NCQUFFMjM4RkVBMzEzCi06MTA4MTQwMDA3M0U5QTg0QjNCODU3M0NCMzg3N0FGNUVCNzUxOTVGMjk3Ci06MTA4MTUwMDBCQ0I3ODRGREM4OTE3NjhFOEJBQzc2ODg0MDA0Q0RFQjlECi06MTA4MTYwMDA1MDk0RERFQkEyRUY5N0Q2NDdCMUJDQjI4MEU0NUNFODU3Ci06MTA4MTcwMDA4Qjk0MEEyN0M3NEQ3QTYyRDBFRUM0QkIyQUNCNjVENTUzCi06MTA4MTgwMDBGMTEyMUVENUJGNTFGQ0IwMUQ1N0MzQTg4QkZDOTMzMjEyCi06MTA4MTkwMDBCRjQ4MDREOEJFMEIzQUYyMDZBRDAzRjgwQkNFOEI0NkFGCi06MTA4MUEwMDBBOTVGNTY1OTAzRkIwMDlGOEU3MzY4QUJCOTVFMTVBRDhFCi06MTA4MUIwMDBGM0EzMzhDODdCRTZFRjM1QTI4REVCRDdFRUZBMjYyQzc5Ci06MTA4MUMwMDBGODdCOTAzRDlBRjU1RTQzRkY1Njc1Rjk0QUZENjUzODk4Ci06MTA4MUQwMDBDQjRGNzQyMDg0ODNCRTZDQkFEQ0JFRUUxRTkyMjM2ODQzCi06MTA4MUUwMDA3RDJCMEQ3QkY4NUEyOURGRERCMjUxOUU2MzI0OUY2N0ZBCi06MTA4MUYwMDAwMTRFRUJENjkyN0M4NkVGQTQ2RjIwQ0U0NDJDMEFGNzdBCi06MTA4MjAwMDA0QkY5NUVFQTBCRUI2NjY3QjE1Q0Y0RjIzRjVFMEE0MDQ1Ci06MTA4MjEwMDAxRjY5N0I0ODYxQkJEMkJBN0NEOUVGQkFGQkZBNzMzOUNDCi06MTA4MjIwMDBGOEE3QzJFMzg0QjExQ0I2NkU4QTUxREU4N0Y1OTE0RjgwCi06MTA4MjMwMDAzMEM1NjRDOEY5RkFGNzFFNkVGRURFNEJGNTY2QzEzRTI2Ci06MTA4MjQwMDAyMjFFNzRCMjdEQzQ5MEZCMERCOUJFMkU1NkNCQzkxQTQ2Ci06MTA4MjUwMDBENkI5RkU3NUIxNkQ1MUYwQkI4OThBRjhFRjI1Qjc2Q0MwCi06MTA4MjYwMDBENkNGRTMzNjVBM0ZGQzJBQzc5NUUyODNGMDhGMTlGNTQzCi06MTA4MjcwMDA0NjY2Qzk3MzY1Rjg1OEVGMTZCRDFFRkI1RkNBMkQ1M0RECi06MTA4MjgwMDBFRUJEOEVFNjU1RkVCMEM1MEQ3QkExODEwN0UxRjU2NjFBCi06MTA4MjkwMDAwMTBFQzdENzNBMEI0MDc3QzNDNzRBN0JEOTkxN0NDOTM3Ci06MTA4MkEwMDBFNzIzODYwQThFMzcxQUFCRjczQjM2Q0I2MjRBOTNDMjc2Ci06MTA4MkIwMDA4OTFFQTk5RkUzNDVEMjFFMUYzNUI0OThFRDk2MjQxMzVECi06MTA4MkMwMDBDQ0VCMkE2RTY1QjJERTRGQjlCREY4RjdBM0JCOTg0RjcxCi06MTA4MkQwMDAwNzVEMTQ0QUY5RkJGODZEQ0EyNjM5MkYyRkM3MjcwRTAwCi06MTA4MkUwMDA3RkMwQzlGNkNFRTNGQTM5NjRFMDgxRTg2ODE4Q0IwRkE1Ci06MTA4MkYwMDAzQTVGOEIwREExOUJCNUEwMDc5Qzg3QTAwNzI1OTg2RUMwCi06MTA4MzAwMDBDQzc0NzE4QjIyRTEyQkVFOTNGMkY3QkE1ODk5MzdFOENGCi06MTA4MzEwMDA4MkY0M0ZGMUJGQTA5QjIyQzFGMEVGNEUwRjM0RDZEQkI5Ci06MTA4MzIwMDA5RDFFNDg3NEIwMDg3NEQwNTEyRjg0MEU4NEQ1M0ZFQzQ0Ci06MTA4MzMwMDBEQkZDNDJBNTIzNjI4NzJCODQ4MjE0QUJGMDIxQ0UxNzhECi06MTA4MzQwMDA2NzI0QzNFQjFFQUIxRkIxNzhCREFEMTIyRjdEQUM5MjdECi06MTA4MzUwMDBFRUU4QjRGMTg1MTc3MDdEMkZFMjdENEIxRTVDMjhCQ0UyCi06MTA4MzYwMDA1NEJGMjQ0NUIwN0RBRDFGQzk1NTMxNzFEQzRFMjA0NTQ5Ci06MTA4MzcwMDA1ODhFMEFCQjEzQTU2ODVGMTIyM0ZCMkZFOTI5MzhGRTJDCi06MTA4MzgwMDA4RUZBRjM1QUUyNzRFNjM2MUNGRTVFQzE3MjA1REE0N0Q1Ci06MTA4MzkwMDAxNzcwN0I5RjQ1QjZGNzVBMjlFRDlCMjFGNTk4QjY5NTQ2Ci06MTA4M0EwMDA2MTFDQkY1QzcyNzc5RjJDRDBDOUM0QjE2NjNBMzlBMkY4Ci06MTA4M0IwMDBEMzk1OTFERTk0RURENjhENzU5RTI0RjA4M0QyODZGRTAyCi06MTA4M0MwMDA3Q0RFRDQzQjhCQUI3NzAyOUZDRjQ3QjBGQzU5QjJFQTNGCi06MTA4M0QwMDBDNzkzODY2MTdFMkZDNDdCODBDMjMzOTNCN0IzM0ZBODE3Ci06MTA4M0UwMDBCNDYxRjY0RjNFODRCRUI0RDVDOURGMkJCMkI1RjU1OUEyCi06MTA4M0YwMDA5MEZGMTVGN0RDOURGNEExNzRDNjAxN0IxMkI1RDc5QUU2Ci06MTA4NDAwMDBBNjlDN0Y5NUQyQzlCRUVERUY0MDlFOTgzQzVERTVGQUYzCi06MTA4NDEwMDA5Mzg1QjQzRjhCMDYzOUNFMjRERkU3RDYyNEVBNkZEMkFBCi06MTA4NDIwMDAyODg1QzM2OThFM0E1REE5QjdDMTBGQTRFM0Y3QTkyQ0NCCi06MTA4NDMwMDA0NTk3N0ZFNDNEODE5MjU1N0RCMkQyNzNFMTNGMjFDOURBCi06MTA4NDQwMDBCODBCMzlGRDUzQTNGRTE4NjUwM0U0QTVCRUUzRTRGRUIzCi06MTA4NDUwMDAzM0VBQTMxRkY0N0IzQTRCQ0E1NUJGRDVFMTYyRTQwOTY2Ci06MTA4NDYwMDBBRTVDQkY3Qzc1RDhEMThDNjhBNEI2NDAzNkE1RTlGRDVBCi06MTA4NDcwMDBDN0JFODQ3NTRFNEMxN0UzRDcwM0VFNzdBQTYyMTNDRkJECi06MTA4NDgwMDBCN0FEODRGOTQyNTQ5NjFCRjRBQjkxNDJDREZBRTNENkQyCi06MTA4NDkwMDBGRUNDMjc4RjhFNjkzQjdBMzdFNThGNkUxRTI0RUQ4Q0RDCi06MTA4NEEwMDBCQTdENjFCRTRCQjA3QzcwNzQ4Q0U0Nzc2RDlCMjM5ODcxCi06MTA4NEIwMDBGRThGQjg1QUEzRTJBNDNEOEVFRDBENjUzQTQ5N0NCNjE1Ci06MTA4NEMwMDBBQ0ZFN0VGOEI5Q0IyMkVENDc3MTdFQ0M3RjY4MUFDNzJGCi06MTA4NEQwMDAyNzk0QUQ1MzAzNjFCODA3QjBDNjZDNkZBODhBRDRERTg5Ci06MTA4NEUwMDBDNjdFMDhCNTFCODREQTA3NDAzM0EwQTNGMjM1MEFEMzUxCi06MTA4NEYwMDA2MURGN0E4RjNEOTlGOTlDRTJDMkZBQ0EyMzAzRkQ3MENECi06MTA4NTAwMDAwRTk0N0I5QzFDQzc3Qzg1RkRFMDZCODJGQjcwRDhCOTA4Ci06MTA4NTEwMDAwNTA3ODlCNTY3NkI5RjAwNEUyNThEMjVBQ0VGNDZFNEI2Ci06MTA4NTIwMDA2QUNDQkZGQUFBMDQxN0VDMTc5REZFMjZDMjVFMEJCRUVBCi06MTA4NTMwMDA2NDZENERDNkJFRkM1NTk2OUJGMTMwMzFDRTk1MTVDOTg0Ci06MTA4NTQwMDA3NEVERTRGQjExNDc2REFFMkNDQ0VGRTg0QUE3MDVFN0NDCi06MTA4NTUwMDBFREM0MTU5MkJFNjlERjM5NzA4RkUxMUVBQjA4MDczRjhECi06MTA4NTYwMDBEODlBMjVGQjlEQjNEQzVBQkM5MUYyQkQxREMyMUExNUU5Ci06MTA4NTcwMDAwN0ZBQ0E2N0ZBNUVEODVGRkIyREU2NzVFQTE3NjIwNDUwCi06MTA4NTgwMDBFNDg5QjIzNTZCRTVCQzc0RkExMEQ2OTZDMjc4MUFFNzY2Ci06MTA4NTkwMDBENEU2QjQwMkQ4MDEzQUU0REJGRTYzREIwMUM3MEVCQUNECi06MTA4NUEwMDA5OEFFMzAzREQwN0EwRUMxOEU5Q0RFQkZGNDMyQ0FFOTVGCi06MTA4NUIwMDBGQjNFRDBDQkM0QjE4MTdFODgxQjJGNTJBQjM4QkVCNkY4Ci06MTA4NUMwMDAzRDQ5NzhFMDc3NkMxNzZEMkM4RkI0OTMzQzAyQkU2NzAxCi06MTA4NUQwMDBGMDE5ODM5RjEwNUQ3ODFEODk5REY4REU1MjQ3NTMyMjY0Ci06MTA4NUUwMDAxRUJFQjVDRUMxRTlCMzc1MkU2MTI1Nzg2RkFCNEJFMkU3Ci06MTA4NUYwMDBGQzBCNzU2RTRFOUJFQTcyRjhGQjhCNzUxRUNFRUZBOEQ2Ci06MTA4NjAwMDAxQkMxRjk5N0VCQkM5Q0RGNTUzNzgxRDM1N0VCOEFGOTM3Ci06MTA4NjEwMDBCQkMxQUYwODNFQ0M5NzBDQkU2M0YwMjc4M0JFMEMzRUI3Ci06MTA4NjIwMDAxNTRBNTc3MzA5Q0NCODE3NDFFRDk5MUYxQTdDMTBFQjA2Ci06MTA4NjMwMDBCMDE0NzRGMjI3MDNDRkU5NEFCMTJGMDlGQzUwQjRDRTJECi06MTA4NjQwMDAwNkZGMjg1MkNGM0RGRjBBQzFCOUJEMjI5MkVEMjJFREFGCi06MTA4NjUwMDA0MkYyQzFGNjQ4MDc5RjA3QTk3NkIxMEJGNjg5RkFEQjBCCi06MTA4NjYwMDBCQzQ3RUYwRTNBODc2RkFENTA4NDM1ODg4RTdGQkNDNDBGCi06MTA4NjcwMDAyOUFDNDE3NDNDNkY1OUFDMjkzRjY3RDlGQjZGRjRBNDE2Ci06MTA4NjgwMDBGRURGOEREMTcyQjM2OTFFNDc3RTc5RTJGMTNGRDFGN0VCCi06MTA4NjkwMDBERkZDRjI0QzI2RjA0RUYzRDhGQzA4QzZCRDJCNUM5RkU1Ci06MTA4NkEwMDA0N0FCOUNENzVENzY5Njk3RkE4NjRCN0RBQjZGQjhENDc3Ci06MTA4NkIwMDBCN0YwRTMwODhBQ0YzREEyRTNBMzI0MkRGNjlEQTdCMTJFCi06MTA4NkMwMDA2RkVDQUU5QjQ3QzA0RUI0NTJERTRCRkEwNEY4QTNGMkY3Ci06MTA4NkQwMDBCRkU4RjgyQjVEMTZDNjcwMkQ2REQwRjc2QjcwREMzNkQ5Ci06MTA4NkUwMDBDMUY1NThCMjYwRjk0RUYxMEEwMUJGRDdCMTVGRDgwM0E2Ci06MTA4NkYwMDAyNDJCODg2MzhBQzNBRjQwNzYyMkU1NkIwRUVDOThBQkRGCi06MTA4NzAwMDA3RkY3MTFFNDc2NjVEOTIxOTZCMzM1NDcyNEM3N0YwOEYyCi06MTA4NzEwMDA5RkVENUM3MDdGQ0FCMjgzNUM0RkI0RjYzNkM1NkY0NjdFCi06MTA4NzIwMDAwQ0Y1REFDMTM3NDBFM0MwNUY2OUNFN0U4MUZEMkUxQUI5Ci06MTA4NzMwMDAxNUJFN0Y1NEFFN0YyRjVGQUQ5OEUyQTI2NzY0QUJGMkE3Ci06MTA4NzQwMDBERTQ1OTY5NUQzRjM1OTQyM0Y0NzFBRjlCQzMyRTg5Njc1Ci06MTA4NzUwMDBGODA4Qzc2MTk2MzdFNkRCMTcwNEYxRTc1MkZEN0I1OTRECi06MTA4NzYwMDA4RUM1MTRBNzc5N0Y5NjlERkIzOThGQ0Q0OUZEREU5QjgxCi06MTA4NzcwMDA5MzZFOUZDRkZDQ0ZDREY3MDU4Q0ZBQTUzOTA1QUI2MDgyCi06MTA4NzgwMDA0RjJFNUQ4M0E4QTZDRUY2MjVEOTU2N0Q1RTJFQTk3RkY1Ci06MTA4NzkwMDAzOUU4NUM4QkUyRjhBMjJFQ0YwNzQzOUUzOTg1NUY0NzBDCi06MTA4N0EwMDBGMkZDNTlFRkFBN0NFMUI5MTdFMDhGQUNGQzczMTg5RjdCCi06MTA4N0IwMDA1Mzk1ODM3NUZCNEFBRTdGRjgzNDk2ODNCQzkxQ0E3MDlCCi06MTA4N0MwMDBDOEUxMTJGRjg1Q0ZGRDM1MUE3MTVEQjUzQkE0QkQ5Nzk5Ci06MTA4N0QwMDBEMkEzNDg2QkVFQUE2MEZCNUU4RDg3RjY0OTFDRjhBRDBDCi06MTA4N0UwMDBEOUVGRkZGQTBCN0ZFNkZCOUQ4NEIwMTQzRDZFOThFMzUyCi06MTA4N0YwMDBENDZBNzY3Q0NBRjE2QkIwQzdGOTg2NzI3RjFDNUYxREE0Ci06MTA4ODAwMDBEQUJFNTZGOTlBRjU1NzQyMkNDM0E3NjhDRjk3ODkzQzMwCi06MTA4ODEwMDA4RjlEOTcxMkMxRTc2QUY3QUM0Q0VDMkE4RTI4QjQxRkUzCi06MTA4ODIwMDAyM0NFQzFCMEZGRDU4QTM1OUZDM0NGNTk3QkQ3ODQ5MzYwCi06MTA4ODMwMDA5MkRFNjVGRkExRUQxRUNBOEU0QTM4MzE1MDIwQzZFRTg5Ci06MTA4ODQwMDAyQUI2OTM1ODA1Qzc5RjJDRDVFRDM4RURGRTRDRjY2MzNDCi06MTA4ODUwMDA3NzI3NzdEN0FFQTc0NjI0OTJCNTVCREQzMTg4QjNCRUM0Ci06MTA4ODYwMDAyOEM0ODRBRUYwRjQ0OUI2OTQ2QkNGRDMzRTgyM0ZGQjZDCi06MTA4ODcwMDBFMjM2OTVFNUNBOEJEQkEyNzgzRkQ0NkM3QkYwMjBFMjMwCi06MTA4ODgwMDAwNDZCOUU1MkQ4RUQ1ODJENUEzOENFQUY2Njg3MkExQ0ZECi06MTA4ODkwMDBDMUU3MURFQzQ3RjFERENGNzNGMTczNTE0QjQwNUY4QkE2Ci06MTA4OEEwMDA5QTE0RUY2NjlBNEZCQkMzMUREMzIzNjgzRUFGODBCRUI4Ci06MTA4OEIwMDA4ODM0MTc4NzM1MEQ0N0ZGQzZGQzlGMDc3RjBCOTIzNzFCCi06MTA4OEMwMDAxNzM1M0ZDOEYxOEQ1NEVGMDJDQjM3QkY4REUwMzgzQ0YwCi06MTA4OEQwMDAzQUM5REVDMTNDQ0Y2RTE4QzJGRUY1NDU0RERCNkI1ODgwCi06MTA4OEUwMDAzRUQ4MTZFMTgyRTlFOThDQ0Q3QzBGRTQ4MDNFREU4MTQyCi06MTA4OEYwMDA2QzI5OEY5Q0Q1RUREMTY3NUY1MDU5MUZDMjNDQjEyRkI5Ci06MTA4OTAwMDBDRkU4NzFCODQ2QkIzN0Y1NzY2RjY2NEJGOUE3MjY1QkEzCi06MTA4OTEwMDBFRTRGQTNGRUEyQTZBM0QxRkRBOEZFQzk1REVGNzNGQTk4Ci06MTA4OTIwMDBCRUJFNkYxNjQ1QjZGMDNEQ0Y5MzNCMjJGODlFRTBDOTIwCi06MTA4OTMwMDAxREZGMzlGRTM1MUFFRjdDRDM5ODA0MjU2ODlGOURDODJBCi06MTA4OTQwMDBCNkM5N0RCQTQxQzYyRkYzMjUxN0Q2MTM5QTc4M0Q2NzZECi06MTA4OTUwMDBCN0E1MjhBQzJGMDNERUE0Qjc5RkRERjExMkRGNDMzNkE1Ci06MTA4OTYwMDBFNEVCMUYxQzJGMzg0QkIxODZEQ0EzMTgzRDA4NzI4RDM5Ci06MTA4OTcwMDBBMzU1QkZEN0QxQTZEQjYzRkU2RkZBQUZEMUJGMjc1OThFCi06MTA4OTgwMDA4QUY1NzFFNDNEMEQ2MUM0NkZCODY0QkQyMjM1QjcyNzI3Ci06MTA4OTkwMDBGNkRERENDMUVFOTlCODk3MkRERTkyNzE5N0EyQjdGQjk4Ci06MTA4OUEwMDAxMUU4N0Y3M0RGOEQ2N0JCQ0I1MjlCQkIyN0YyNUYxQzQ3Ci06MTA4OUIwMDAyNjg1OTVFMDMzNzc4OENFNTc5MjVBODdDMUJFN0IzNDlGCi06MTA4OUMwMDA0RENBMTU4NjNGQUQ2QUI1MjJCQzA0QkY1RTQ0NjczRTAyCi06MTA4OUQwMDBFNEZEQUFEMDYwMDdDOTQ5Njc3QzNENTY2MUYxREE3MUIwCi06MTA4OUUwMDAzRTQ2RDk5OTJFRUFCNzNCMzdDMUJFNzVDNDJFN0NFQzAyCi06MTA4OUYwMDA3RjdCRDEyOUZEMjdFOUQyMEZGMjE4RjYxN0E1NTU3MTEzCi06MTA4QTAwMDA4MUFDNzhEOEYxNzRCQUE5OUE0QUU1NDFGNDUzQjUyOUYyCi06MTA4QTEwMDA5MDA1MzlFQTlDNUREQTJCNTEwRUZEQTlBQTQwRDZBQjMwCi06MTA4QTIwMDBEN0U5MTRGREEwREZBMzY5QUUwQjJDRjdFRThDMTJEMEIyCi06MTA4QTMwMDAzRjJDQUY0NDQ5QkJDOEQzQ0U0RDYxNDFFNzc2QkYxQzQ0Ci06MTA4QTQwMDA4QjExNzdDN0ZFNEFERjY2MzkzRkNDMEJGMkZDMjI3QkU1Ci06MTA4QTUwMDA2MzE2RTQ1RDYzREM0NUQxOEQzQ0RFMzk3REJDNDVFMUM4Ci06MTA4QTYwMDA4REQyOUZBM0M3MTFBMjNFOEY2RjEzRUM3NzZBN0IyNjJFCi06MTA4QTcwMDA4Q0U1RTYzM0M5MkQyRjYzRkMzM0NGRjRFN0I4ODdBMzI5Ci06MTA4QTgwMDA2OUZFMDVCQkI4RENDOUYxRTc5NUNGODYwNTMwREZEM0I5Ci06MTA4QTkwMDBDRjQ0QjE1REVCQjQ0RENBNjNBN0EzMTI1OTFFM0IxNDdBCi06MTA4QUEwMDBGNUYwNUNGNjYzM0QxNUE2QzAyRTc0NUExMUY2MjQ5NEI5Ci06MTA4QUIwMDA2RkVFQzFGMjQwNjVERDMyRjZENzU0MTI3QjgxMUM0QjVDCi06MTA4QUMwMDBFOTA0Qzg3RkE3MzdGNzY3N0JEMUU5Mzc1NUJFNUM0MTFBCi06MTA4QUQwMDBERjU3RTNCQjI2MUFFN0ZFOENGNTgwMDhCNjIzOUU3OUE0Ci06MTA4QUUwMDBGNjZGRkQ4M0ZEM0I0NjVBRjk5NEQ5M0U2NkQwODM1MTFCCi06MTA4QUYwMDA1RTk0MjNGOTYwNTE4RUQ0NTM2RUM4NzE3MTVBMUREMUEyCi06MTA4QjAwMDBGNDcwM0FBRjUzRjIwN0MyMDNFQjgxQjQxRjEzNjFFRjY1Ci06MTA4QjEwMDAzRkQyQjQzQjUxODkwNDlDMDM1OUZGMDlCODZGOTVGQUMxCi06MTA4QjIwMDBENjk5NkQzNkY2NTM1NUJFMTJFNTY1M0JENERENTdGMTQ3Ci06MTA4QjMwMDA3REM5NEE1NUNBRTM5NTE2NzlERjUwRjlFNTU2QjZGRjY3Ci06MTA4QjQwMDBENDNGRTMyQzAwM0MwOERFQUNERkI2NkQ1NkY1NzFFNDkzCi06MTA4QjUwMDBCOEE3QjdGNDkxN0U4RDgwOUU3Rjc5MTBGQjM1MjZDNjJECi06MTA4QjYwMDA4OTc5NTM1OUNFREE5MDA3Qjg1RTdBMkE4MkUzRkU2OTkyCi06MTA4QjcwMDAxQzJGRTIzNDJBN0ZGNjczMDlDRjk4MDVBQzI3RDBDMUE5Ci06MTA4QjgwMDBDREZDQjk0QUU3Q0ZENTc3NUYxMzgzRkIxMEUyNUQ5NTQzCi06MTA4QjkwMDBFRjc5NUNCMjdBN0E4MkZGODZDMkVCRDExQzlEM0ZCRjJGCi06MTA4QkEwMDBGQzM4RjM4MzJBREEzNzg4MEY1QkFDRkIxMzE3M0ZBQjMzCi06MTA4QkIwMDBCMDVDQjk3OEQ1MzU4RjMwREY3REM3MjY3MDJGRTI1Qzg5Ci06MTA4QkMwMDBEMzgzRDFDMUY4QThDRjkxRkNCMEIzQkQ4N0VCMkZBNjVBCi06MTA4QkQwMDBGQUIyRkQ1QkQxM0M5RjJEMzYwRkU2MTM4QUM3RUZERDVECi06MTA4QkUwMDBGRTU5RjUwN0I1QUY2QzIyRjkyMkVGQ0FGNTVGMTIyREQ5Ci06MTA4QkYwMDAzRkZEMzNGOENCMzYyN0ZCNTEwOUZGN0MzRkVBQUNBRDk0Ci06MTA4QzAwMDA2OTAxRDY3RkY2NzkyN0YzOURCM0IxNzJERjlGQTRGMzk0Ci06MTA4QzEwMDBENDk3OERGOURDRjQ2QkI2Q0JGQzYxOUFDMDM5QjREMDMzCi06MTA4QzIwMDA2RkVFRDc5OEQ3RUExQzlCQTRCNzc4NEYwQ0ZDNDRENUJECi06MTA4QzMwMDA4NDBGRjQ0N0Y4RjkxMUI3N0ZEN0M2RUQ0M0Q3QjM0MDk3Ci06MTA4QzQwMDA2RkQ3QjE0RjlGOEY2MEJBMzlEQjRCRTJFNUVDMEJEOUEwCi06MTA4QzUwMDA3QzlFMUQ4RDk1RjQ0RUYzNEQ4NURFNzQzNjU2QTZCODc4Ci06MTA4QzYwMDA5OTA0N0FBODc0NDk3QTM4M0JBNjg5RUQwMjY3OTVFRDk0Ci06MTA4QzcwMDA5QzFFQjVDOTc2OTVDQjc0N0YzQkQxNUYxMkU4MDdCNEQzCi06MTA4QzgwMDAwOUJCQUE2MzREMEJFNDE5RjBGOUUxMDU5QzA2NzA0RjhFCi06MTA4QzkwMDAzQkQ0OEUwRTNBQzVGOUQ3QUFFRjMzRTMxRDA1RjZFQkE4Ci06MTA4Q0EwMDBCMDlGQTc4OUVGQzc2QkJBM0M1OUI1RUQ0QTdGMjVGMDU1Ci06MTA4Q0IwMDA1NEI1NEQ2MTdGREE3RjE5RkREMEFDMTMwQzNGMDBEMTY0Ci06MTA4Q0MwMDBFNTYyOUZDMkVGMjIyQzZFQjg2RDExRkJEMzk2QUNCRDRFCi06MTA4Q0QwMDAxNTc0NkZBQzYzQjE3RTZGRkNBOEEyRjI3QzhFM0E2OTBBCi06MTA4Q0UwMDBGRkU0NUUzOTlFMDFERkRGRTcyODFERUY3NUI4OENGM0U2Ci06MTA4Q0YwMDA4QkY2RjAzQjM5NkU0OTQ3OTQ2REE0RkVBQTFBOTQzNTYxCi06MTA4RDAwMDAzQzRFOUFBMUU3Q0FGNTE5NzAyMkIwRDg2MUU3M0JBQTk4Ci06MTA4RDEwMDBERkQzRUU2RUZEQzYzQ0JCOUJDRjMxOURDRjFGNEQ5Mzg1Ci06MTA4RDIwMDBGNzkzREJERTk2RjdDQzJGN0QzRDI0MjZFRTVCRTQ0MTA2Ci06MTA4RDMwMDBCRTYxNjBGNDg3Qjg2M0QwMjBGNUYzMjJGODFDRjYzNUU1Ci06MTA4RDQwMDBFQ0VCMzRDRkFDMEQ2NkZGNEVDRTUzRTZGQzgwNkRFNjA3Ci06MTA4RDUwMDA3Q0VFMEU3MzNFQUZEOTlDRjdCQzZFQ0VGRjA5RTMwRURFCi06MTA4RDYwMDBFQjg0MTNGNDZGQzQzNTQyRkY0NjBBRkREQjFEMjZGNTg0Ci06MTA4RDcwMDA2RkU0QTE3RjIzODVGRThERUZEMEJGOTE4N0ZFOEQzQ0YwCi06MTA4RDgwMDBGNDZGRTRBMTdGMjM4NUZFOERFRkVFRkUxMjRFNTVCQUZGCi06MTA4RDkwMDBCRDE0NzhFMEI4QkFERDRFMjMzRTgxRjdDQkM1RDk4OTQyCi06MTA4REEwMDBDQzQ3ODU1NUVBQTUxNzE3RTVCMkZDRDg2MTZGOUFFMjYyCi06MTA4REIwMDA2MDdCOTMxMThGOTUxOEFEODVGNzQ3MUM4MEQyQjIyQTNFCi06MTA4REMwMDAzOThEREJCMTFEQkFGNjU1Njk4N0FFMkE3MDQ2QzJFRTAxCi06MTA4REQwMDBEMUJBRjJFNDJBODgzREE3QTNCNDE4RDRCRjY4NkJEQkVDCi06MTA4REUwMDAwMkY4NTYyRjNCQzA3RUZGRDZFNUVFNzdBRjkzRjg2M0NGCi06MTA4REYwMDBGQjhCMTE1RjU1ODI3MzBGN0M5QkY0MjUxOTc3RUU3MTA1Ci06MTA4RTAwMDAwNERCNTM0M0ZENDQ2MjRENTAxRUYyRDMzQTczM0VENDBCCi06MTA4RTEwMDAyRjA0QkVFNjM1RURBQjQ2QzZDNzZGNkM2REM5RTBGQkVGCi06MTA4RTIwMDA5RjNFRTNFMEZCNjk5RkVBRjYzQjMxQ0JDMUYyOTgyMTFDCi06MTA4RTMwMDBDRjIzQ0UxQjcwNTk3QTlGQjIwOUU3OTVBNzdGMUNDMzM5Ci06MTA4RTQwMDBCOUZENTBBNkU5N0U2MTY4NUE3Njc5MDhDQkYzMURGOTIxCi06MTA4RTUwMDAzNThBMDVFMzk0NEY1RkJFOEZGNTZBQ0RDQkU3RDJFRDNGCi06MTA4RTYwMDBGQURDQjJENzVCNENGM0VFRUYwRjM3RDFEMUMwQUQ3MTY2Ci06MTA4RTcwMDAyMTdFQ0M1RUE2RkE4Mzc3QTU4N0Y4MzEwNzk4Q0FBNzJBCi06MTA4RTgwMDBBRDE5NjJCRThGNUY3QzhEQTlCQ0FGQkQyMzZFQ0ZBMTMzCi06MTA4RTkwMDBGQkI5RTRGQzVDQjJDRUE1QzgwMjVFNkY2OEJENTRDNUU4Ci06MTA4RUEwMDBGMzI3Rjg2RkM1REI1MjRFMkRBNzczQzYxQkFGQkYyQjQwCi06MTA4RUIwMDA1MjAwN0Y5RDc3MzJFMDU3RDE2NDhCODU5REFENEMzRjRBCi06MTA4RUMwMDA4N0M0MzJGM0I5NUM2MTE1M0U1NzVDMjdERDU1Qjg4NDIxCi06MTA4RUQwMDAzNzk2REE3RjY5NkQ0QzY1M0FGQUU1NDdBOTJBODE2OEM5Ci06MTA4RUUwMDBEMTgwOTYzQ0U4QUY4QkRFN0M3MjM4RThBQTVBREQ5OEQ4Ci06MTA4RUYwMDBFQUEyRjIzQjE0RkYxNjVDMjAzRjEzQjczRDcxMjQ5NUE0Ci06MTA4RjAwMDAyN0E5NUE0OTdGQzI3M0FBMkQ3MEZGMUNGMEQxRUQxOTExCi06MTA4RjEwMDAwMkVGQTQ3Q0JBRTZBNTY4OEUxRkQ0RTkyRkQ1RTYwQTM1Ci06MTA4RjIwMDAwNzFENkM2QzU0NTk0RjgxRkQ0QzhERUJBNDkzOEQ4REI2Ci06MTA4RjMwMDBGMUUxRDA2QjJBQzYyODNFQzhDNzA2NUMwQ0ZBMDg4NTRBCi06MTA4RjQwMDAwN0M5RUZFRkJBNjlCRDk3MEVDOUY3OTQ4Qzc1MkU3NUY2Ci06MTA4RjUwMDBDOUZBQTI0MUI2MzdERTA3MzBENjdCNUNENzQ3MkIzNzNDCi06MTA4RjYwMDBCRTkxNzUzQjdEM0ZENzdGNUY5RTFCN0VEQ0JBNURCQ0FCCi06MTA4RjcwMDBFRUM1OTY2RDVCOTIyOTdEQzdBMUREODU3NTJEN0Q3QjQ0Ci06MTA4RjgwMDA1Q0Y0NDgxQUU3Q0I2RDMyQUVGREIzNzU0RjNFRTEyMzdBCi06MTA4RjkwMDA3RTdBNzdFMzkzNzZFODBGOTU1NkJGOURERkNENzk2NkFECi06MTA4RkEwMDBBMzFERjEwRUQ3NkZEREM4REYxNzZDMkQ2MTdCODA3MUJCCi06MTA4RkIwMDBDRkVFOTQxMTk3QURDM0EzNjJBQ0IyQzE0NUVCM0NERURBCi06MTA4RkMwMDA1RkNBODUxNUUxMzI5RUE2NDgxREY1NDYwMkQ2QjU1NTA1Ci06MTA4RkQwMDBDOUM3QkFBNjE3NkZCN0UzRkQ4MTg3RjU3QUExRkJBNkNCCi06MTA4RkUwMDBGREYwQjRBMjFFQjA3QjM1MjkxQ0M3RDRERDNFOTkxMTFCCi06MTA4RkYwMDBFOENGRkI2NERBRTUzNDRFQTc1RjFFQzg3QURFODc4MkNECi06MTA5MDAwMDBCNDJGOUMyM0I5MjFGQUY1NjE1NURBRjU5QTU1Rjk0RTNBCi06MTA5MDEwMDA5ODNEOTAzMDBERjJDMjVFRjk2RTQ1MzU5RDQzMjMwQUFFCi06MTA5MDIwMDBBMEI3MEI3MTM1QTVDNUEzNTQxMzlERDcxNjQ2OThGNjY2Ci06MTA5MDMwMDBDMTJDMTFCNEFGQThCRjlCNDUyRjUzN0VGQUM0MEM1MzZCCi06MTA5MDQwMDBGRDk5RDMwNzg2Rjg5RDBCM0FDQjk5N0Y1RDZEN0E4RjlBCi06MTA5MDUwMDBBNkZBMkU5RjVCNjFCQkM3NThGMzc3NEFFRjYyM0FCQjEzCi06MTA5MDYwMDBEMUQ0QkU1QTRDMzVCRDQ3QjNFOEE5RjcxOENFNDQ2NUY0Ci06MTA5MDcwMDA3NkM0RTE1NEU4Rjc1ODY2Njk0N0Y1RUZBREZDOUQxNkY0Ci06MTA5MDgwMDA2MkRBQUY3RDMzM0M3RjkyRTdBNThERkQwOTg2M0Q3RDk5Ci06MTA5MDkwMDAxNjdFQ0ZFOEVBQkMwQ0VGODgxNzQ1QkMzMEVDMUQ5QTcxCi06MTA5MEEwMDA1OTFFNjk2MTNENTU0ODNDNTRFQkY2QThFQTFDNjk4RjhFCi06MTA5MEIwMDBBQUY2QjVEODExOEY0REYwQjdBNjEwNDg2QTFBMTVCNkEyCi06MTA5MEMwMDAzNzUyN0Q0NzRBOUNDQ0RGODVFRjNCQ0NGNzUyRDBERjRGCi06MTA5MEQwMDA2NTk0MUY1MjRCQjBCRjQyQ0I2QjY4REQzODE3NkE2MDk2Ci06MTA5MEUwMDA0NzYyM0JEODg0OTM2QzA3MzNDNkQxRkIzN0U4MzRGNDJFCi06MTA5MEYwMDA3RDgwRDBGRTA2MEM3MDMzRkZBRURDQkFGRDYwMkY4MjlGCi06MTA5MTAwMDBDRkI0RTJEODdDQzQ5RDU0MzU0REIxOTVFNDVFNDk2RjJGCi06MTA5MTEwMDAwNkZGQkY1NDYxNjFCRjdFRkJFMTAzNEM2RkVEMTU1NjQ2Ci06MTA5MTIwMDA4RjhDNEJGRjc2QjhENDc4QTVERDM1OTQwRTE3RDBCQTY2Ci06MTA5MTMwMDBFMDdGNUVCMDQzRjFGODE1NTkwRkYwRTkwNUZBMEM4MUI0Ci06MTA5MTQwMDA0RjRBMTc3MDMzRTBENTAxQkY5MDcyN0UzRjZFMjhFMjIwCi06MTA5MTUwMDAyNkU0N0IwQTU3QzAyNTE0OUVGQTM4MEIzNEMxNzIyN0M3Ci06MTA5MTYwMDBDRENCQ0ZGMzBBRTk1NzhDMDhERDhGQjdEQkQ5RkZCMDQxCi06MTA5MTcwMDA0MTExMkVFNUJCRTEzMUY1QjJCNEUzRjRDRDkwRUI2RkQ0Ci06MTA5MTgwMDBEQkE5NzgyMEJGREY3Q0Q5Q0FERjNCRThBNzU4QzZEOTY2Ci06MTA5MTkwMDA0RjlGNjhERUFGMURGNDU0MkNGN0NGOENDQjg5RENFRUVCCi06MTA5MUEwMDBERjQ1NTdERjQ1NEY4NkZGMjYzNDdFRERCODQ3RTYxOTk5Ci06MTA5MUIwMDBBMERGQjcxQTI2ODY3REYzNEZDNEUxMUJGMjQxNzdFN0EzCi06MTA5MUMwMDA0Q0M3MzlFNEQyRjExMDk5REVFNUY5QkMzNDJBOURFM0FECi06MTA5MUQwMDBDQzM1RERCRTY4RjA2OTRENkY2NzhDNUI0MkU1RUU3ODlCCi06MTA5MUUwMDBEMDdCNkY3RTY3NzE1NTQzNDY2QUYwRkIzN0RBNEExQkM2Ci06MTA5MUYwMDBEQjgxNTM5N0M3NzM1QUUyNzQyNUUyN0MyOTU5MkVERjJECi06MTA5MjAwMDA2OTM5NzY0RkNGNDRGODI5OEVBREI0MjU0Q0E0QUU4RjgyCi06MTA5MjEwMDBERDM5MzQ1NTBDNDJCRTg4RDM0RkQ3ODZDRDBBQjZDRjQwCi06MTA5MjIwMDAxQkU5MkQwM0U0Rjk2MTlDRUZFNzJEODdBMzY3NjEzRkZDCi06MTA5MjMwMDBBRURDMTk4RDkwQTFDNTJCREYxRkVFQTI3M0JFRDlBMkEzCi06MTA5MjQwMDAyRDFBQzBGRUUwOEQ3Q0NFMEJEN0M2M0NEOEU3MEMzOTdBCi06MTA5MjUwMDBBMzcyNjU1MTRGQzgwMzU1RkYzOEYwMDRFNDAxNkRCOTlFCi06MTA5MjYwMDAyRDExNzJFQUU5MEY1NDgxRDAxQTNBRTc1OEJFMzhFNTU5Ci06MTA5MjcwMDA5NEY0N0Q2QTczMDRERkFCM0NBNTA4MkZGQzUxOEJENEJBCi06MTA5MjgwMDA3RDc5MkVEMzc5REI3QzMzQzY4RjcwRDJCOEMzMzBBRUY0Ci06MTA5MjkwMDA3RjRCMTJDNkY1RjhCMjMwQUVCNjNDMzNBNjJCQkI4QjczCi06MTA5MkEwMDA5MUQ2QUU5N0YyREYxNkMzQ0VBQ0RCQTMyMUY3MjMwRjI2Ci06MTA5MkIwMDBCOTVGNjQ0QkI5MUY3OUM4RkQ0ODIxRjdFMzdCMERGQzBBCi06MTA5MkMwMDAwRUYwMUJEN0I3RTU0MzZGRjU4RDE1Mzk0QkY4MUM4RUEzCi06MTA5MkQwMDBDQzgxNUM3RkJCMTJFRTAxM0ZCQTVERjFGNEU0Nzg4NDhGCi06MTA5MkUwMDAwRjYyRTVGOTFCODI1NzIzMURERDQ2QjI1OTEwREQ1RTgyCi06MTA5MkYwMDA3N0Q5MjE4MkUzRUJDNjg4NTg1MzdFOUMyM0Q5NTRCRjhCCi06MTA5MzAwMDBDODk1NjYyQUJGM0VBOUJGQTlGQzA2NzdCRTI5N0Y1MzMwCi06MTA5MzEwMDBDRTQ4NTNGRDQ5OUUzMUE2RkM4RjQ2REM2MEFBM0ZDNTZFCi06MTA5MzIwMDAzQkM1OTQ5RjM2NjFCNkE5RkU4Q0UyMTI1M0Y5Q0M1OTI1Ci06MTA5MzMwMDA4QjRDRTVCM0I1REI0Q0Y5NUIyQkVFMzRENUZGRjE5MkVBCi06MTA5MzQwMDBFNUE2NzJBRjcwNTk3MTBFMzY0MzFGMjNCOEVGODUzRTA0Ci06MTA5MzUwMDA0NkU5RUQ2RjY3NDYwNkUzNzVENDM4NEI5N0VGMEMzNTU5Ci06MTA5MzYwMDAwRDkwRkE1Njc0QUVGNzM5RDAyNUVFMDk4MTBFRkJFODYwCi06MTA5MzcwMDBGNzgwRjZFMjlDMTkwNkJGNjU0MDkxRkE3MDRCMzJFODFGCi06MTA5MzgwMDAyNkI0NUU2OEY5QTg4OEZEOTdGMDk0NjVGRkU3NkU5RkE0Ci06MTA5MzkwMDA2MTI1M0UzMUVBQUFGRDQzMzIyODdGRkJDMEU2MTk1NjFCCi06MTA5M0EwMDBFMjJGQTNBRUQ5RkY1MjNBRTU3RkYxREMzN0IyN0NGMDcxCi06MTA5M0IwMDBGRTRCMjg1NzcyRjdDQkZDMzRDMTIyQzhBRjA2Q0U5QkI4Ci06MTA5M0MwMDBFMUEzNzU4Q0JBMkU3RDhENDdEQTUzQkE4QzUzMzU1MjkyCi06MTA5M0QwMDBDMDAxNzE5RDgwMDNEMjAwRDEyN0QyRkQ0NDlGNDg1RjE4Ci06MTA5M0UwMDAyN0ZBMkNCNzA5NzE5MEU4MTNFOTIxRDI0QkYxRkRGNzY4Ci06MTA5M0YwMDBBNDk3MjIzRDRDN0EyOUQyNzc0ODJGNDVEQTQyN0EyOTIwCi06MTA5NDAwMDBEMjNGRDRDREUyRjQ4MzNBOEREQkZEQjFBRTgyRDM4RjZGCi06MTA5NDEwMDBFQTk2RjBGNzRGRUE5NjcxRkE5NzNBMUY3RkZGNjQ4MDU5Ci06MTA5NDIwMDA2MTdGMDhCMDlEQzZGMDhCRDVDMDFGMDk3QkRFMkVEQkE3Ci06MTA5NDMwMDBCOTYwQkZCMUUyOTVFN0FCRTFDN0FDNUYyMjVBMjNCMDk4Ci06MTA5NDQwMDA0RjVCQURCMTI3MUM5REZFQzlFRUY5QUQ1NTlDMDg5MjRFCi06MTA5NDUwMDBDQjlDRTFERUNGMDZGMEY4QkQ1RENDQjdGNUVGNDdDNDlECi06MTA5NDYwMDBCNDNFMDU4NEE3NEZEM0I1QjNFMDA3MzMwQUNBNTZDNjQ2Ci06MTA5NDcwMDAxMEZGQjhFRUVCMjUzNkQwQ0I4Nzk2QUVFRkEzRUZENTM1Ci06MTA5NDgwMDBGOURCQTcwM0JENkRFOEY3NUFGRDVEQTY2QjFEMzJBRTkzCi06MTA5NDkwMDBGMDVBNkI2QjNEREJEQkJGMTQ2RUM0MDNFRDMzRUNFRkI2Ci06MTA5NEEwMDBGNzU4Rjk1RUIxRjI4NUUwRkNFODA0QzFGOUZBMkY1QkU4Ci06MTA5NEIwMDAzODBFRjE1QTk3Mjc4OUNGMUQzRDZGQzQwNTc1RjhGRDA5Ci06MTA5NEMwMDBGMTEzMTRFRjYzRjhFMThENzg5RkMyMkY1QUM3NDEzRTI0Ci06MTA5NEQwMDAxODFENjk3Nzg3ODVDNDBEQzBERkJFMkZFQThGQzZCQzEzCi06MTA5NEUwMDBGODdEMjdDM0JGRkZENDk3MjI4MEY3RjIwQzNGRkVCNTZCCi06MTA5NEYwMDA4RTk2MzREODE1NDZERkUxRjAwNEM3MzMxOUZFN0FFNUJECi06MTA5NTAwMDA4QjE2MTVFNzg5MTFBRjY0OEM2M0NDM0JDQTRBRkQxNUY1Ci06MTA5NTEwMDA3NEM2MjM1REVCNkFDQTQ3NUM0NjdENzUyNEY3RDc5MzEyCi06MTA5NTIwMDBCRUUzREQ0OUFBRTc1NUI5NUQ1MzNFRUNDN0EzQUIyMkM0Ci06MTA5NTMwMDAzRDQyRTk4QzEzRThBOUFGOUJFQUYxM0EwQkJGRDAzODYyCi06MTA5NTQwMDA0RTYyQjQxRTI3ODE3RTFDQjI5Q0RGMDExQzlEMTA0ODE4Ci06MTA5NTUwMDBDNkZCOUZBMzk3RDgzREIwODMzRThFQjhCMzgyQ0VCOEVBCi06MTA5NTYwMDAwNUQ0OEYwOERBQzc5ODI3RkFFREY3MTVDRDE3RjJCQ0E2Ci06MTA5NTcwMDBEN0NCRjA5REU2OTJGNDI5REM3QTVFM0ZBRjg1NjMyQzcxCi06MTA5NTgwMDBEQkJCNTQzRDVGMUNFNkZBNkIwNEQxQ0ZBRDE5REE5MDFBCi06MTA5NTkwMDA4MUQ0REYxRjk0OENDQzdDRDYxNzMyN0E2MERGNEYwOUUwCi06MTA5NUEwMDA3OTQ3QjAwQkZBMTkzMUYwRkY4NDdFQkMxMkVGQkQwNThDCi06MTA5NUIwMDBEQkUxNDJFOUM4QzA4RjQxNEYwNkRFQkJBMzJCODMwRTFGCi06MTA5NUMwMDA4MkUyRDAxOEVGMUQ3MTY1N0E3RkExRjRENjFEOUQxOTM2Ci06MTA5NUQwMDBGNDc1QUQ0M0QyMDFGMDhDRjgyMDgzQUU5NDJGOUFGODQ1Ci06MTA5NUUwMDAxRUVCRTgyQTA3OUY3RjA2NUQ4NUQyQzU5NTc0MjVFOUE1Ci06MTA5NUYwMDBCNEZFMjcwRUVFRUY0QUJBRUFBNDA3QzBFNTg3RDM1NUJBCi06MTA5NjAwMDA4QjhBRjNGODlGQTVBNzc5NkQ2MjNDRUVGRjk3NUM3Njk1Ci06MTA5NjEwMDAxRjQ0REFBQjlGQjYxNzdDQTY0QzhDMTkwRjEyMTMyRTgxCi06MTA5NjIwMDA3NTEwRUM2MkExRjUzMkJBQTkxNzRBN0ZBMUVENkVCQ0E0Ci06MTA5NjMwMDBBMjVENDY2RTcwQkI3MUZBNTkxOURBQUUxMkVEN0EwNDZBCi06MTA5NjQwMDBCNzFCQzI3MTExNkZFOUY3MDhERTcyMUE3MTJEOUU5OTZFCi06MTA5NjUwMDA5MDUzMEVCOTZERjIyRDJGRTE4RENDMjdCQTE5QTdGM0Q3Ci06MTA5NjYwMDBGMzQzNjIwOTlGQkYyNEVFRkE0MDRGODUzQTY5OERDQkUwCi06MTA5NjcwMDA1REM4RkE0MjYxNjRENzcxMDUzN0VBRURDNzdGNUREQ0VBCi06MTA5NjgwMDA4MEY5OEM0RjMwQ0JFMzM3RUFGMkZDRjVBMjkxRkIwRjY3Ci06MTA5NjkwMDA3RDQ3RTFDNkRDRUI1OUNFMEY3RDQ3NjFGMzQwM0RGRUNGCi06MTA5NkEwMDAyMDREQTQ4MURGMTcwQThGOUM5RkZFMEU0NkExQkVDRkRFCi06MTA5NkIwMDA1Mzc0QkFDOTcwQUI2MjU0MUNFRTlCNkE1NjFDMzJBRjJECi06MTA5NkMwMDBFMzFEOEMzQzhDRUJFM0ZDMERDMkNGRTk0RDIyQzBGREM5Ci06MTA5NkQwMDA0Q0EyMDMwOUY5MUYwOTYxOTNFRjVGQzhGQkJBMzVBQUQxCi06MTA5NkUwMDBGNkRGOTA1NzhEN0JCQTRGM0JCNTU3QjBDRjBGNDQ0QzQ4Ci06MTA5NkYwMDA5RTgzNzc0QUM2MEQxOUQ3MEZFREY2MTdCQTU5Q0VEQjAwCi06MTA5NzAwMDBFRkM4NjBCOTEzRkJEMjE2RDdDOTI3REVBNDczQkE1RkJFCi06MTA5NzEwMDBBNkJDMzc4QTE0Rjc0NkZCRDE3OUZBM0IzQUM3OTFCRjBBCi06MTA5NzIwMDAzMTY3Qjk0MEJCRjE2RTczQkM5M0QxRkUyNkQ3Mzg2MTY3Ci06MTA5NzMwMDA4REVGRkU5Q0JDMjk2Rjc3NkZEOENEREU4QUNEMkUwNENECi06MTA5NzQwMDA3RURGOEFCREFBMTBFQjdEMkJCNkE3NDVBNjYxNzY0RUJCCi06MTA5NzUwMDAwN0JERDJBRjJCQjlEOEEwRkJDRUYxQzZGMzc4RERDMURGCi06MTA5NzYwMDBEOTgwNkIyODNDMEQzOEZGMDBCODFFRUIwQUFFN0IwNzkyCi06MTA5NzcwMDAwODk2MzdBQTIzMjQ1RkFEOEU5MDdDRDU4MDczNzU1OEU4Ci06MTA5NzgwMDBDNzdEREU5RUMxRjEyNzU1MEUwOUFGRjlDQkFFMTE1NjRDCi06MTA5NzkwMDAxMkY1MTcyQzFCQzlGOTkzNzVDMjA3Qjg5RkM2OTI2MEMyCi06MTA5N0EwMDAxMDBGQjFGNzA5RUI1OENFMUJFRkRDOUQ3REY4QkRFODNCCi06MTA5N0IwMDAyNDlBRTcyQTg3RjYzRjk4REZCOTgyNDAxNjQ5ODRFMjY3Ci06MTA5N0MwMDBFNDg2N0FCRThGN0ZGRTA1RDUwMzdEQUE0QTc1QUZGMTg4Ci06MTA5N0QwMDBDMENFRkE5NjJBRUY3MTdEN0QyMDE1RkU1OEYxNTRENzQwCi06MTA5N0UwMDBGMUU4NTUwRTA5NUY0MzlGMUNEMkFGOThGN0FEQjE1RjBBCi06MTA5N0YwMDA4NUZFQkU4MDIxNUZGNTBFOTNGMURDQzYzREY3RUVFNEY5Ci06MTA5ODAwMDBBREUxRTE5MkFGRjUwRTkzRkNEOEMwRUIwNkJCN0VFRTY2Ci06MTA5ODEwMDA1MzNGQzM4OThGQTZGQzNBOUNGNUFCOTg1ODZGNEMyRUVBCi06MTA5ODIwMDBFQzgzODVDMkE0OUYxODc2OTVGNjA0Rjk3RUNBQjUyMjBBCi06MTA5ODMwMDBFQjkxNTE5NDJGM0M2NDEzN0UyQTZGMDc0MzQwNzk5MjM5Ci06MTA5ODQwMDBGNEIzQjYxRkJBQTQ4MkVGMTc0NTI5RkMzRTg2NzE2RkE4Ci06MTA5ODUwMDAyOTJDQzkyMkRDNDE3Q0MyRTkwRTM3QkQ0QjFCOTExMzc4Ci06MTA5ODYwMDA2N0NBNDc3OTdBOTlFQUM3OEM0ODM3OTVDNzdBMDc5OEMzCi06MTA5ODcwMDBDQUUzMjcxNDk4RjIzRDhBQUYzNkQ1RUYzOTZCQUMyOThECi06MTA5ODgwMDA5RkFDREQ2OEFBOUY1MjMxRDU5NDM3Rjg1ODhBRkMyNEUyCi06MTA5ODkwMDBGQTJDQjlDNUQ0QkVFRkIyNTI1M0ZEMzQ1RkE1QTk1QzEyCi06MTA5OEEwMDBDNTNCOUIzMTQwQUJCNzI1MjcxMUNGODFDQTlGOENENUQzCi06MTA5OEIwMDA0QjQzREVFM0I1MDhDQkYwQ0U3NzZCRkUzMzVBREVDQkZECi06MTA5OEMwMDA5OTEwQjk4MERGQUZDOTZDRkM5OTc5OUVFQTQ0NkIyQzgyCi06MTA5OEQwMDBBNUQ3QkJDRDdDQjEyOEM5OUMxRjE3Qjk0RjgxREY3MUJCCi06MTA5OEUwMDA5Q0NCQ0M5RjUzOTY1ODRERjkxRkU1RUFGQzM0NEZFNENFCi06MTA5OEYwMDBCMURERTNCQkYwQUYwRDMwRTEzRjE0NEU0NDBGRkM3RTExCi06MTA5OTAwMDA2ODNCOURFRjNFQ0NFQkNEMzI3RTBGMDc3RTkzRTA3NTNBCi06MTA5OTEwMDBDMDZGMTIwQzA3Rjg0RDgyRjNGMDlCMDRENzg3REYyNDQ5Ci06MTA5OTIwMDBCODFDN0U5M0UwRjIyMTg3Q0NGODFGRDY2MkM2RkY1NUEzCi06MTA5OTMwMDAxRjk5RjE2RkQwNjU3Nzc4MUFEOTZBQTYwRkExMjk5QTc1Ci06MTA5OTQwMDBGMjJENzhCQUU2OTQ5OTdFNDJGMTczMUQ4OTVCQjEwOUQ0Ci06MTA5OTUwMDBDMDg3RTIwOUI4N0YzOEJFNTY4NkUwOEJGMEMzRjczNzgwCi06MTA5OTYwMDBEQjdCNDczMTdFMUVEN0Q3NzU2RDYwMjBERjk3MkUzQTlGCi06MTA5OTcwMDBBNDBBQkM2RjYzQUNGMzcxRkREQzNGNkRENTFBNzM4OTJCCi06MTA5OTgwMDBDRkZDQ0U1RDkwMDQzRTc2OUQ5MDdFREJGMTU1MTY0RjY4Ci06MTA5OTkwMDA4MEJBN0YyMDY0OUNEOTI5REE0M0E4M0YyQkZFNTJBQUMzCi06MTA5OUEwMDAxRDc0RDIyNkRGQ0Y3QjBFN0M3OUQ4OTVGMUIyM0UxMkEyCi06MTA5OUIwMDA0RkY4QkVGNkNGNTRCRTI3NzVDNEQyQTg4MDhGQUY4RUE1Ci06MTA5OUMwMDBEMTlFMDA5Rjk5OTdCQjg0RDc5QjI0OEFCNzJGNDA1Qzc4Ci06MTA5OUQwMDBENDdGODVBNTIyM0ZCN0FGQkNDNzJENzI1QkY5RkU4OTQ2Ci06MTA5OUUwMDBDMTI3RTdBNkM4QjhBOTJEQjlCQTdGREQyM0UzQTc5RTkyCi06MTA5OUYwMDBDOTk1NzI3Nzk0QzdDNTcxREUyNUI5RjI3RTBEQTk4QjIyCi06MTA5QTAwMDBBOTczMDcwMTNFODc5REQ5ODBDRjNBMEJCRkVCRDk4QTU2Ci06MTA5QTEwMDA3QkU0MDk5REY3QzgyMTBGNDNGRUVDQTNDQjdGRjUxRjI0Ci06MTA5QTIwMDAzQjFDNTg0N0Y2N0E2MTNBN0ZGQkZCMURBNkY4RTI4MUEyCi06MTA5QTMwMDA1QjVEQTZGQ0EwQTYyNDUzRkRDMUJCRENBNkYyRkM0MEU2Ci06MTA5QTQwMDA4RUE5N0NDODIxOEYyOTNGQUM2NTg0QTlGRTU1MUY3OTVBCi06MTA5QTUwMDA0REY5OTFBRDEzNENGNUFGMzk1NTZDQ0FBNzg4QjY0NzhGCi06MTA5QTYwMDAwMURGQkU4QUI0NTMxQ0NENEQ5N0ZBQjk1QjcwRENFNEJDCi06MTA5QTcwMDBEQ0JCNjNFNTdENUZERDdFNjFDOEZCNDZEQ0I5QTZEMzU4Ci06MTA5QTgwMDA3NUE4MUVEMUQ3MkVFNUU4RkE2NDIxRjU0Njg3QUUxRkVBCi06MTA5QTkwMDAwQUIzM0VBMUU5NzFFMzFERjc1ODdDRTZCODcxMjM1RTc1Ci06MTA5QUEwMDBCQzQzRUZEMEY1OEE4RTdCMzQ5REYxRTJERUUwNzhGMUE1Ci06MTA5QUIwMDBCOTYxNURCRjFGN0Q1RUM3N0JFOEZDRkJEQUU1N0FFQjMxCi06MTA5QUMwMDBFRkI0RjNCRDFENjM1RUExRjM0OUM5OTY3NEJCRDlEMTUwCi06MTA5QUQwMDBGNUJEQUFCRkU1NEFGQjQ2NkI2NkYxMjVEMEZEMTMzNkZFCi06MTA5QUUwMDA0RjJCRkY2RDg0MkJDNkYzQjQyMjVFQjdGRTE3NzZDRkUzCi06MTA5QUYwMDAwQUY3Nzc4RjM3NzdCMDVDQ0YxQzhCNjVERTk0NUM4RTZFCi06MTA5QjAwMDA4QjMzRkRERDg0ODg0MTkyQkVBRDgzNzVGQjRBQzg3OEY2Ci06MTA5QjEwMDA3MzYzNjREQzlBODhCMUJCNDFCRkREOEYyN0UxOTk2NDMwCi06MTA5QjIwMDAxNzBEN0NGRjRCQkY2N0YxRTMzNTRERjdBMTY4OEVCRDg0Ci06MTA5QjMwMDA1MTdGM0ZDRTZGMDMzRDRDMUM0QkYyNTkzRUM5MTM1QjI2Ci06MTA5QjQwMDA3QTNEMTQ0OTcyQ0ExM0NCQUM2QzlGOEE3QkZFNTczNzlGCi06MTA5QjUwMDBGQkZBNzVERTlGRTk0QkZBMTBFODAzQjIwRUY0QTgwNzkyCi06MTA5QjYwMDBGMjU0MjlCNzBDOTJFQjJCNTJCRkVFQjhFN0MwN0UxODI3Ci06MTA5QjcwMDAyMUY0RjM0MzcwQkM0RjE3RjRDNjc0NjhBQ0UzREY3NThGCi06MTA5QjgwMDBFRkMxQTBEQjUwMzgxOUZBQUZEMEUzM0JGQjE5RjNEMjk5Ci06MTA5QjkwMDBFMTY3RUMwNzAzN0VDNkZEMTNGNzZEQjZFMjREOTE3Q0RECi06MTA5QkEwMDA4RjY1MDJFMkU1MENGQzZEQzk5M0Y2QzYwNTNBM0M1MEEwCi06MTA5QkIwMDAwRkZDQThCQjdBNDU2QTZFMENFQ0Y3RURDMjFERTNFQTE4Ci06MTA5QkMwMDA4MjBFM0JFQUZGOUJFMDYyQzBCRkJCRkI2RERERjE4NzBECi06MTA5QkQwMDA1MEJFRjA1REY3RERCQUEzRDM3RkY2REU1QjEwOUY5MDM5Ci06MTA5QkUwMDBGMTRCM0E1RUZDRkQyQzFDMTc3MDc3OTQ3OTNGM0YzMkE1Ci06MTA5QkYwMDA0OEYyODk5MTgzRjRGREU0MjNGREQ2Q0MyRjA0RkMwRkI5Ci06MTA5QzAwMDBGNTJCNTU5RDVGQzhGM0JDMjRBRDk4REZBRkM2Rjk4QTJDCi06MTA5QzEwMDBGQjVCRjMzNzRBRjk0Nzg4RTJDNEFCODdDMjhGNkZFMzM3Ci06MTA5QzIwMDBGQkNCRDc3QTA1REI2RDRBMUIxNTNGREVGOTJBRjE3NUIwCi06MTA5QzMwMDBBRDBGQjM5RkNGQ0Q3MjA3QkYzQkM4MjY0RDZBNTc0NkM1Ci06MTA5QzQwMDBFREY2QTU1REY5Q0VGQUMyNDhGOUVFNjBFOEZCRUEwQjQ1Ci06MTA5QzUwMDA3NUJEMTkyRjZBNjBERjg2RkFCREVFMTlBNEZCQjEzQzExCi06MTA5QzYwMDBDMkMzRjI5QzFFRDc1MEExRDdFOUEwMzdCRjdDNkYwRUFDCi06MTA5QzcwMDA3QTMyRjYzMUE1MUMxRjY3QzBDRDBEM0ZENDkwQ0UzQzgzCi06MTA5QzgwMDBDMTM3M0MwN0U3Nzk4M0I1Q0JGOEM1MEVGODFBN0VBQjMwCi06MTA5QzkwMDAwRUJGRUM2MUJFMjcxMTFBOEY3MUNFNzcyMEJBMkIzRjExCi06MTA5Q0EwMDA5OEUxMUZFQjZFMUY3NEY4QzdCRUMzRUZENjFFNjk4OTFCCi06MTA5Q0IwMDBDNkRGRjE2OURGMjZERjY3RTlGNDVCRkQ2NUI4Q0IyMjFCCi06MTA5Q0MwMDBGRDUzMzFGMDNGQjVFQUZEODk4RDc5NURERDBGRDU5NjA1Ci06MTA5Q0QwMDBFRkU0Mzg5NDY2OEJCNjczMTBBREVGMkNGNThGNzc3QjdECi06MTA5Q0UwMDBFRjg5REM5Rjg4NzcxMTI2RUE3NkE5MkJEN0FEQ0JDREZCCi06MTA5Q0YwMDBBMzE0RTk4RkY2QTk4Q0VGRjYwOUYyNUUzREYxNTE4MUNDCi06MTA5RDAwMDA3RDY3QzQ0RjRDMTE4MTA0QTQ4NjFGNEE1QjNEOTJFMURDCi06MTA5RDEwMDA2RkY4QTE0QTAyMjM3OTlFMzNFQTE3REFGMEU0NjhFQjgwCi06MTA5RDIwMDBBMzc3MTU4NUJCM0JGRDUzQUQ3RDY0NUM1NDc3N0VBQTVDCi06MTA5RDMwMDA2OTk3RjNCOUJGRTk5N0FGRTE3RTNFMTg5NDI2RTVCNjdGCi06MTA5RDQwMDA4NkZCNkUwMzlEMEREODJBNkM1ODY3QUJBREVCQkY0QkZECi06MTA5RDUwMDA1MUE4RjNBQjEyRTg5QTNEODJFMkFEOTYyQkJDMkY5NjQ4Ci06MTA5RDYwMDAyQUMyODhCRjYyM0U2RkU0MkYzNUVBRjkyMjk5QkY3RDhGCi06MTA5RDcwMDBBNUNDQjdFQUVGQTc2REQxRUQyMDU4Mjc1MkFDMDc3QUYyCi06MTA5RDgwMDBGOTM2REQ0RTgyNzUyMEM1M0FGMDFEN0MwRDc5RjAzNTJGCi06MTA5RDkwMDBFNEMxRDc5MDA3NUY0MzBBQkU4NkVGQTVBMjM4MTU3NkM3Ci06MTA5REEwMDA1QkY4RDMwQTgzRjYwN0ZDNjk4NTQxNzIxM0ZDNjlDMTJECi06MTA5REIwMDA3OUY4RDM4MkVCQzM5RjE2NUMwRTdGNUE3MDM5RkM2OTI5Ci06MTA5REMwMDBDMTc5RjhEMzgyRUJDMzlGMTY5Qzg3M0YyREI4M0VGQzI4Ci06MTA5REQwMDA2OUMxNzlGOEQzODJFQkMzOUYxNjVDMEU3RjVBNzAzOTQ0Ci06MTA5REUwMDBGQzY5QzE3OUY4RDM4MkVCQzM5RjE2NUMzRTZGOTk2MjIwCi06MTA5REYwMDBGMkI3Q0REM0RGN0YyODVCMUZDRkY0NTE5ODUxMUM5QjY2Ci06MTA5RTAwMDA0N0Y4RkRFRjg4N0ZGQ0M0OTYwRTNDMzcyRjAyREQyRTBECi06MTA5RTEwMDBBRDBFRjc0ODNDMzc0RTkwNzhCNzA4ODlFN0I2RDk4QzM1Ci06MTA5RTIwMDBFN0JCRUMzMjVGMjRFM0I0NDNFOTA3N0VBQjQyOUJGNDJCCi06MTA5RTMwMDA1QjIxODVERjBBMjlGQzU2NDhFMUI3MkFDQzk0N0UyQkFBCi06MTA5RTQwMDBBNEYwNUJFMTNCRkM1NjQ4RTFCNzQyMEFCRjE1NTJGODZCCi06MTA5RTUwMDBBRDkwQzI2Rjg1MTQ3RTJCQjQ4M0RGMEEyOUZDNTZGOEJGCi06MTA5RTYwMDAwRUJGMTU1MkY4QURGMEZEMDhDRDAzRkUyQjYzNUU5MERBCi06MTA5RTcwMDBGM0ZCOTlGNDUyQTI0MzkzNUVFQTMyRTUyMUU3MDdENzU4Ci06MTA5RTgwMDA4NzlDMUY1QzBFMzkzRkI4MUM3MjdFNzAxRTcyN0U3MEZDCi06MTA5RTkwMDA3REM4RjlDMUY5NDk4M0RDQkNCRjIwRUYwN0I3ODNCQzlCCi06MTA5RUEwMDAxRjlDMUZENEU4N0IwM0I2QUI0OTFCMkVCQzhFQjQzNTc4Ci06MTA5RUIwMDA0QTc5NDI3MTA5MzEzNTJGNzMyNkZDOEJBRDRFMjUzNTE5Ci06MTA5RUMwMDBENjIzODQ2REY5ODA5OTg1OTREN0Y0MzhDNzNDRDE2NjQwCi06MTA5RUQwMDAwMUJFMzlBRTgwRjBBNjA1MDRDNzY1MEZGQTdGQzk1Q0U0Ci06MTA5RUUwMDA2RUY4QjNGOTg3RjA5RUJGNDNCMERFNTBBM0RGQUYzNTA1Ci06MTA5RUYwMDBEQTdCODQ0QjQ1NkFENEVGQ0M3NzVEMkY3NDdDQTMxRTRDCi06MTA5RjAwMDBGM0NCQTA3OTkwNjI5OThGNzg5M0ZDQkIyMjBCNzBBRjUyCi06MTA5RjEwMDA2MDhCNDU5MUYxQjgyQjY0M0M3NDI4NURBRENBOTNFNzIyCi06MTA5RjIwMDBGQjE2Q0JGNkZERTE4ODUzMjk1MTNDQjhFRjkxNjUxNTNFCi06MTA5RjMwMDA4NzZDMDU4MEQzOTIwMjdFRjcyQTJGNTY1RkQ3OTJBQkFCCi06MTA5RjQwMDAxMTg3NjVDQ0RCQjA0QjEyOUZFMDdCODZBM0RBODRCRDIyCi06MTA5RjUwMDA5Q0M2MTlGRDg1QjBFM0VGNzM0Q0I0NEI3OTAyRURBMEJDCi06MTA5RjYwMDA2RjBFRjQyOURFNEQ0MUY0QkQyQzRGOUU3QjlBRUZCNjY3Ci06MTA5RjcwMDBBQkNCRTlGQkMwNkQ0QkFFQzZGREM1ODlFMUIyREREMzBECi06MTA5RjgwMDBCRjg5NjYzODRFNkU1MEY4OUVDRUE4NkRDMjhCRkJDOTU1Ci06MTA5RjkwMDBDQjc1N0UzQTcwOUJDQjVFQ0VFM0JBRjhERUEzRDE2RjcxCi06MTA5RkEwMDBDOTg2NTRCRUE3NTkyMjVBMEI3MTBGNDUwQzU1RjgzRDZFCi06MTA5RkIwMDA3QzAzNkVCNEJFRDdCMUJFMkNEQTJBQjAyRkZGRTBGQjEzCi06MTA5RkMwMDA0RjI0MkU3RTlGRkI0RkEzODdDNjE2MjFBRTUwMzRDQjY1Ci06MTA5RkQwMDBGNzQyMjcwRDJENTlEOTgzRTZBNUY5RTU3QkExQTNCRjRCCi06MTA5RkUwMDA1OEYyMDZFNzlGOTJFRjg1MzJGOTBDRTdGOUYxNzk5ODdDCi06MTA5RkYwMDBFRDUzRjhGRDk1QzlCRThEOTYwNDM3RUU2NTJGQjcyNTU0Ci06MTBBMDAwMDBBMkZFMzZFMTgxNTgwNUY1MDhGNzhBOEQ3NUU1OEExNkI2Ci06MTBBMDEwMDA4QjUzMDFCRDg4MDNGMTQxRjQ0NzlDNjMzQUU4MjVERjg3Ci06MTBBMDIwMDA2M0UzRjc1OUE2NTg1RDM2RjAxQjQzQ0UyOTcxQzlCMUQ5Ci06MTBBMDMwMDA4QkQ0NTEzMTdDQ0YzMjQ0NEVCOEQ0RDA4M0UzNjI3RThFCi06MTBBMDQwMDA3ODlDNEUzQkRGRTc1RkJBRDNDOTcyODVCNjVFNjFCRUNFCi06MTBBMDUwMDA3OTNFNUZDNkJCNTZEREY2RTE3MDRCN0E2NzlDQ0U5OUMwCi06MTBBMDYwMDAzNEZGMTZCQzAzN0IyNjdEN0JGNDA4ODVFNTg4QkQ3OTJCCi06MTBBMDcwMDAwNEQ3QTMwRDJGRjEzRENEOTI5NTZGRjAzRDk0NEIwRDdDCi06MTBBMDgwMDAwRjQ1Q0JGQjZDRDJGRjUyQUVDM0NEQjAzQkNERDdGMTY5Ci06MTBBMDkwMDA1M0FFQzc2OTFEQUI5M0VGM0FEMzM5Q0NFRkFFNUM2QUQwCi06MTBBMEEwMDBCMEIxOUMxMTJBMkYxQUYyQTdGMTFFOTExMEFFM0ZDMjM3Ci06MTBBMEIwMDBDRTUzRDE2MEUzM0JDMDBCRDc5NEFDNEExMjU3Q0E5MTQwCi06MTBBMEMwMDA4Qjc1Mzk3MzUxODM4REUzQjIyQUY0RjdENDQyRkY2RTU2Ci06MTBBMEQwMDBDRjYyM0QxRTZCRjE1NkYzRjc0RkYyNDJFNDUwRTM3RDQxCi06MTBBMEUwMDA0REJENEVDOURCMDc2NkIwM0NCNEM0QzZGRUNEMzlDQjBFCi06MTBBMEYwMDBBNTdDMjRCNjBCM0ZFRTkzQ0M1OTNFQ0U4MkY3NjZFNkE0Ci06MTBBMTAwMDBFQ0Y0N0E5NDJFRThFOTVENUQ0RTlBRDhFQTY0Rjg0RjUzCi06MTBBMTEwMDBCOTFDQzFGQzY1RUFFNTE0Q0VERjdDMzk5OUQzOTk5NzY3Ci06MTBBMTIwMDA2NURDMkFFRTIyODE2RTVBOEJFNDNCMDdFRkVCRjJEMTFECi06MTBBMTMwMDAwQ0M0QjFDNjQzM0VFQkM5RjRERDRFRjQ4RDIxRjI3NDdDCi06MTBBMTQwMDBCRTM1QzBBQjFDODA3ODM4RDFBNkFENDQ5Q0VDQzQ4RDI0Ci06MTBBMTUwMDA4MkVGODM0RDgyMUM0NUZEQ0Y4MjVDMTU4RkZEOTE1NkE5Ci06MTBBMTYwMDBDNEY3NjEyNjI4N0NCRjY4RDJEMERCRjRGRDQwRkI0M0Y2Ci06MTBBMTcwMDAzMDNGRTFGNzU3QjRDMjI5N0VDNDM5Q0REMkI2NUI4MEY3Ci06MTBBMTgwMDA3RjYzNUY2OEJFQTNGQzVFRUEyNDlGNjJDNzNCOTI5QTJFCi06MTBBMTkwMDBBRTZGMUI3NDFGQkEzRkU2NDZFODc2QjI0ODY5MDdFQjFDCi06MTBBMUEwMDBCMDkzNjFCMjc4MjRDOUI3NkEyNkU0RDNCOUIwNkRGNjJBCi06MTBBMUIwMDBEMjA5ODE2MDFGOTUyQkNCN0JGQzc2RDVDQzA2OTI0MUQyCi06MTBBMUMwMDBGRjU1RkJDOTFDOEI0NURFM0YyMzM5OTBFRjBCODg5NjZBCi06MTBBMUQwMDBBMjlFOTQyRjU5QTMxNDQwM0YzMkU2RjVCOTY3RUMzODlDCi06MTBBMUUwMDBDRkIwNEUzQTI4RUREOEE3RjIxRUU1RDI3QjMyNEQ3RTk1Ci06MTBBMUYwMDA5QkQwQjQ4Q0UwOERGRDM0MzdBNkY1MjcwQTYxNjhGNDU2Ci06MTBBMjAwMDA2MEUxMkQxQzgxRjdFQjg1RjEyODU0MDBGMTk4QjdFODQ3Ci06MTBBMjEwMDBGOUVBQzEzQkZGQjQzQTk3RTFDNEY5OTFCRjdENjhBNjYyCi06MTBBMjIwMDAyRkYyNUZFMDkzNzMxNDZCRjBERjFCNEJCMjY4NTcwRDk2Ci06MTBBMjMwMDBFRUMxRjc1MEM3MDNCRjExQjk2REZDOUU0NDRBQjY0QjNGCi06MTBBMjQwMDBGMkE5MTA3QjRCRjU2MDg5Qzc1MEJCNEI1OUFFM0M3N0U4Ci06MTBBMjUwMDA4NEQ1OUQ3QTJCRkI3QkRDNkNCNzM0RDY3RENDNjZCRTc3Ci06MTBBMjYwMDBFNzZCQTRGMzA3RUJFNzVFRERCRkU3OUVDQUMzMTZGOTExCi06MTBBMjcwMDBGRUMyNjMxNkZGRjY1Nzg4NUUyRkY3RDA2NjYwQkQ4RjZCCi06MTBBMjgwMDAyMURFOUVFN0FGRjFGQThDRjc0QzNBRjg5NUZFNkU4OTI1Ci06MTBBMjkwMDA0MTRGNDc5NjVERTJGQjJBQTU5MTc2QjcxQTQ0NEZFNUY4Ci06MTBBMkEwMDBBQjE1QkUwRjVBQkE0Q0RFRTdENjU2MkJGMjVEODQ2RTY0Ci06MTBBMkIwMDBFQzU4QkY5OUZEQkZGQzlFRDU2RjdFMTEyRTBCNzVGODMzCi06MTBBMkMwMDBDRUIxQjdCQ0UxNDhFQjg0RUY5Rjk3M0Q2MDkzN0MzNEZGCi06MTBBMkQwMDA5MDg5RkIwRUI3MkM3MUYyQkJEOTlGN0I4QUFCMDYwRjFFCi06MTBBMkUwMDAwMzlFM0M4Q0E3NzFEOEU1NTQ3RjRCOENCNjA0REY0QkEyCi06MTBBMkYwMDA0NUNCNDFEODFERTdGRUZDNkQ3RThGQkFCNjM5OERERkE4Ci06MTBBMzAwMDBCRjJDRDk5NUJGMEFFRkQ5N0NFRUQxN0U4MkY1OTc0NDU4Ci06MTBBMzEwMDBCQUVDOTA0NzZBMUE2MkY5N0M5RURCNTNCRkNGMkJEQTA2Ci06MTBBMzIwMDBEOENGNjdFMEU3QkVDMUQyOEU3NzdEQkUxQ0U3QTJBRTc0Ci06MTBBMzMwMDA1NzExQzA2QzUzNENGNUJBQjY2MzFBRjZEMTUwM0I0QjZCCi06MTBBMzQwMDBFOEJCMjFERjY1NTc4MUREQzQxRTY0NUYzNUVDMzJCNkEyCi06MTBBMzUwMDA5QzYzQjM3MUFFQ0ZCMTc3RkRGNzNFRjdFQUYzMzdGNDA0Ci06MTBBMzYwMDBEQUY5MUQ3QTZERUVGODlFOTBGRkQ3MkEyRUQ4RDNDQjVFCi06MTBBMzcwMDAyM0REMzM3MUJGQTFGQzkwMEQ5MUI0NjI2MjlDNUJCRTgyCi06MTBBMzgwMDAxRjczOEY3QzNGQTZGNDhFN0NFNjY3NzM4MDkzMDJEQzlDCi06MTBBMzkwMDAzQjE5QzlGQkI4REM0RkU5OTBFRUY3RkJBRDZCMEZGNDRFCi06MTBBM0EwMDBEOTBEN0EwQTc4RjkxRDgyNzI5N0Q3MUUxNzI0MUY5NTQ2Ci06MTBBM0IwMDAzNTJBQTY3NzI0OENGQzBCODM1NUM5OTc0OEREMDBGQzExCi06MTBBM0MwMDA3RTdDNDc5QTFENkYzOUNEMjEzMTA5RjE5OTdCNDEyNzU4Ci06MTBBM0QwMDBDMzNBREI1MTNEOEUzRjk5OTgyRTBFQ0FGN0JEMTRGRTRECi06MTBBM0UwMDBCQkU0MTgyRkY4RUY1Qjk1MzY5QURGQzNBMEZBMkNERjk5Ci06MTBBM0YwMDBFRDFBMUNDNUZEOTVCODY4REQ2OTQ4NUQzQzRGODIwM0M4Ci06MTBBNDAwMDBDM0E5RUQzRUVBQ0ZDREUzMzAzRUNBMDI3RTFCRUMwNzg2Ci06MTBBNDEwMDA3MzEwRjc0MkY5NUI1QzdFMUJDNjI5NkQ5MEVGRDQ2ODIwCi06MTBBNDIwMDA2QkU0MzhEQUVBNThGQjIwQzgwNzU2OTdCRDRGQjA1QzlBCi06MTBBNDMwMDBEODIwREZCRDlFQTNGRkREMTE5QTJGQ0JDREU1MDQyN0U5Ci06MTBBNDQwMDBEQ0IzMzNFRUREODZDMkFCNDQ5RjdGNzk2M0FDNTlDRTdCCi06MTBBNDUwMDA2QzVDNkIwMzdFNjY3N0YzNUVDNjM5REQwRTVEREEzMEM5Ci06MTBBNDYwMDA4NkRGMzcyOEI3N0FGOUJFOEFBNkMzRkJCM0RCOUNGNzMxCi06MTBBNDcwMDBDMjVGMzI3QkREMjNCNjM0Q0FGRjY1QjA5NDZCQ0ZFOThGCi06MTBBNDgwMDBGQjcxNjI3QTIwOTNERkE5QkFDREM5RjFFM0IzNUQ4RDg4Ci06MTBBNDkwMDBCQ0RFMEU3ODNGNDRGMDgxRENFMjJBNjY3ODEzOURGODNBCi06MTBBNEEwMDAxMDZGNTlCRUNFOENERkNFRjk0NEM5NzdGQ0Q3OTVGMDNBCi06MTBBNEIwMDBGRTVCNjBENUVDQUVFMDc5QUNERjk3ODlGOEExRDlCNDRBCi06MTBBNEMwMDBFRkYxMEU5NzcwNjk3QzFGRjZDNDQzMzNGOUVGMDU2MjE0Ci06MTBBNEQwMDA5RTFDQ0ZFNjcxOEZDN0JCNTM0NDM3NENENzA2RkQxODdGCi06MTBBNEUwMDBGN0YzOERGMUFDMUVBQkI0Qzc3QkJFNkI5RjdBMEY0MjA2Ci06MTBBNEYwMDA0RUFGMjc3Q0MzMEZEMEREM0VCNUUzMDIyNjhENkIyRjE4Ci06MTBBNTAwMDA5N0VGMDc1RUMxRUZGNEZERkFGRjAxNkE5MTZDRDMwMDhCCi06MTBBNTEwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMEZGRUQ3REEwCi06MTBBNTIwMDA3QjVDNTU2NUJBRjBCQkQ2REE1N0Q4QzA2NjhCQjA1MUE0Ci06MTBBNTMwMDBDMDBEMDI2MjExNkQxMDEwMTU3NUExODA1QjczNkE2MzA2Ci06MTBBNTQwMDAzNzI5QzQ4REI3NTAwMTkxQUNBODlGRjNCMTBENkZBOTA1Ci06MTBBNTUwMDA5NTI2MkE5Njc1QjZBNjhEOTU3NTcwQjI0NjFCOUJEOTIxCi06MTBBNTYwMDA2QTlBNUQwRjNBOEREMzM5NTNCNkNEMzJCQjA5RDIzNEQ2Ci06MTBBNTcwMDA5RjdERDM5OUJFRTc3OURFQjU2MEFGMERBNDc1QTZGOUNFCi06MTBBNTgwMDBDRUVGRkMzRUZDRTNGNTdERDc3QjdERUVDRkYzNUU3NjMwCi06MTBBNTkwMDAyMjYzNENCMjMxMzY3ODk4ODNCMTgxOEMxOTE4OTM0NTc3Ci06MTBBNUEwMDBDODNGQTE3N0ZCRUQwMjYzOTU3MUFDQkUyRDEzRDIyODk1Ci06MTBBNUIwMDA1NkZGNkIwQjYzREZFM0RGRjg5RTc0QTI1MzY0MkM4RkFFCi06MTBBNUMwMDBCMURCQTA1RDFCN0NBRjEwRDlBQkNDRDZGMzNERDMyOTVBCi06MTBBNUQwMDBEMEY3OEExNDM2RDMxREQ0MUVGQkMzN0VFM0Q1RUYxMzA4Ci06MTBBNUUwMDBGQzY5OEIzMzdCRUFBQkUzNTZEODc4QkJBOUQwN0U5QTYzCi06MTBBNUYwMDAwNUVCOEJEREY1MUJBODNFQ0ZCM0U5MjY5MUM1MzIzNkJFCi06MTBBNjAwMDBEQjA0RkY4N0E1OTQ0ODdCNTZDNEU2MzJENkIwNTc3MDZBCi06MTBBNjEwMDAxQUExQThFMTQxODlCMTE4NDg5RjhCRjBCMTY0QzZCRTY4Ci06MTBBNjIwMDA2OEY4Q0QzQkI3NDBCRENGMzc2RkFGNjQ0MzdCRTYzNUFECi06MTBBNjMwMDBDNzNGOEEzOTQ2MzAzNkY3NTIzNjczMEM2MDZDREVBNTU4Ci06MTBBNjQwMDAzMTk0NTYwRkYzNjQzODA3MDZENURCRjg1Q0JBMDdDNkI5Ci06MTBBNjUwMDBCRkFEMkRGQkRDN0YzMDVBQjc5RkU1MzBGNkZFNzNCRkYwCi06MTBBNjYwMDBGREUzNjhFODk3MzE5RkRFN0Q0RENGM0E2NkFEM0VBMUIwCi06MTBBNjcwMDBBRkIyMDRDMzhEQUY3MzRENDY1NzE1ODM3OUNFQjYxODZDCi06MTBBNjgwMDAxQzEyMTRDRDVFNUVDNTY0OTgyN0IzMzM2NzFBRTQxM0I5Ci06MTBBNjkwMDA3NUNDMkI0MkJGNkNGRDE2RDkwNEVCRjMzMEZFNTdCNUQ5Ci06MTBBNkEwMDA1QzkwQTk1RDYzQkU0RjgyRjUwQzg2N0FDNjFDNUVERkE2Ci06MTBBNkIwMDAwQ0YwRjc1ODBDNjc4NDQ4QThFODJEOTEwMzE5QkNDRDFECi06MTBBNkMwMDBGNzI5M0RGODFEMENBOTIxQTcwN0VGODkwQTFEQ0M1RUNCCi06MTBBNkQwMDA1NzA2NkQ3QkYwMDUwMzMzOTYwRkVCNjUxQ0FFRUFGQzY1Ci06MTBBNkUwMDBBNzJBRjNCRjZEQkQyMEZCQTBERTBENEUwN0NGNTcyNzc1Ci06MTBBNkYwMDAxQkU2QzE3QUU3QUM0RjM2Q0M4NkI0NUNGOTVFM0U0N0M4Ci06MTBBNzAwMDA1QkRFOEQyRkFCOEFBRkNDOTU3NjU4NEY1NzFCQzc1NzYyCi06MTBBNzEwMDBENzNBM0RFMUFCNkI0RjJGN0MyNTMxQTk2NzFFNzcwMEZGCi06MTBBNzIwMDBCRUQ4MDA4RTJGMzY4MkUzMEI1M0MwNTdBNTMzMkZBODE3Ci06MTBBNzMwMDBERUJGNzA3Q0NEN0VGRUVEMEY1RTc2RDBGQUE4RkZDRTM4Ci06MTBBNzQwMDAwNzhEQkUxREQwRkZBQ0I2QkQ4NEI3RjJENTFCRjRDOUQyCi06MTBBNzUwMDA1MEFGQ0U5OTRDNzA1MURCQ0ZBRUNGQjYzMjgwRTc2REEzCi06MTBBNzYwMDBBQkI3RUIxRDE2RkNFRUU4OTNFRTIxOTU1OTEwM0Y0MTc3Ci06MTBBNzcwMDA5RTA5OTA2N0JBNDBCQzNCQTJBNzdFMzlBNDdCNjE5QzJFCi06MTBBNzgwMDAyNThCQ0Q5MUVDREE5RTcxQjYyOEY0M0NCQjNFREE4NjdGCi06MTBBNzkwMDBFM0NEQUVBRjdBODg2NTcxRkE3NzY3RjZFNkJGQjM2NjQ4Ci06MTBBN0EwMDBDRTE3QjNBMDNGRTRDRkIzNDVDRTI0RTQ4QjBBNTFENEY3Ci06MTBBN0IwMDBGMDlCOUEzRTg0Nzg4Mzc5M0QwNkUwMzUyM0ZFQzNEQjI3Ci06MTBBN0MwMDA5RTQ2MzgwQzVFMTRFNjZDODY0RkE5QTkwMTFGOEU4QjNECi06MTBBN0QwMDBGNDhDRjMzNjg4Q0M2QjgyN0FBOTM1ODE4QjM4OEY1NDEwCi06MTBBN0UwMDBBMDI4NkM4NzY5ODQ4RDUyMTYwQkY5MUQzMEVEMDI0ODQ0Ci06MTBBN0YwMDA1MzI0OUVFRTczRjJGNUMzNzczRjdFNjczMTgxM0M1QzU0Ci06MTBBODAwMDBCRjRBQ0ZBMUY0NkE2MDNCNTdBNzAwRkUwRDMxQ0NEOUY3Ci06MTBBODEwMDBFQ0U4QTE0RkI1MUY5NTNFNTVGQUVENkY3RDdCQUU3MDBDCi06MTBBODIwMDA3RDY3OTMzOTNDNTk4NjMzQzkwNEUzNTYzRTNDQ0NCOTI1Ci06MTBBODMwMDA0NkI4RkMzQTBENjEwMDBGNUJEMDdBODE1ODBCNkM3REY1Ci06MTBBODQwMDBBQzM3MzU5MDU3NzZDRDBGQURCN0E1MjRCNjhGRjU4NkNBCi06MTBBODUwMDBBRTUzRTU5MzM5MjZDRUMzQzAyNzUxMDE5ODc3RDdGQTc2Ci06MTBBODYwMDBBMTUxMENGMTJEMzAyRkNBOURCMzhCQ0QyMkNFNUI1RDUzCi06MTBBODcwMDBENzUzNEQ1MDE5RTZCNkJCQzk0NEU5MzM0REMwNjhDMzQwCi06MTBBODgwMDAwMDNFNEQ3NkNBM0ZERkU0QTBCNEFEMjk4M0NBREI5RDBDCi06MTBBODkwMDAzNjlBM0Y2MzgxODg2OTgwQTc4QTMwODVGRkZEM0M4RkE3Ci06MTBBOEEwMDBFNTY1NDFFNTUzNkQ5Q0VFNEU1QjAzMTFCNjIwMzlGRDI1Ci06MTBBOEIwMDA3MUJENzkwRDhCNDJGQTBFM0M4OEZDQ0MxQTg3QjI1REQzCi06MTBBOEMwMDAzMEQ0RTlGNTY3MjNDNDRDQTQ0RjNFM0ZCNUREMTI3RDdCCi06MTBBOEQwMDAyN0M5M0YxNjYxNzBFQzAyOTY5QkIxMjRGQjc0MjNFMEZDCi06MTBBOEUwMDA2QkVFRjIzODI3OTAxMjlCRDEzODk0RTRDMjBDNkZCNDBGCi06MTBBOEYwMDA5MzAwQjA3RTBCNDM3OENDNTNFNDYwRjg5MkFBOTUyMzgyCi06MTBBOTAwMDBCMTdFNkJCMjU1ODA3MUU2NUE5Q0U3NUFBOUZERDVDRTRGCi06MTBBOTEwMDBGQkYxN0I0Qjk5MjEyNTkzQUFDQTI2OTA2Mzc3Mjg3Mjc1Ci06MTBBOTIwMDA2Qzg5QzBEQ0M4ODc3N0EwOUM0NEZFMTIwRkE1QTJGRUVDCi06MTBBOTMwMDBCOUEzNTVGMDFCMjlDRjU2MEIwMEQ3MjFDREVFRDI3ODA1Ci06MTBBOTQwMDA5NDEzNUIwNUU3MEU2Q0JCMERFNEE5QTk0NzlFNzYwRDM5Ci06MTBBOTUwMDA3MzdGODE3QTgxN0QwN0Y0MDdGRDVGMjUyMDAyNzE1RDk5Ci06MTBBOTYwMDA2RDcyMUNDQUYxNEQ4Mjc1MTdDMzc5QjkwRDA4OUYwNTI4Ci06MTBBOTcwMDAwQTlEOUM2RTM5MTNFMUM4RUM4MUVCQTNGODVGMTA2NTZBCi06MTBBOTgwMDBDQzIzOEIyODZGMUIxNDNEODY2NDQwNzk0NTRFMEUzMUQ1Ci06MTBBOTkwMDA3MEY4NDFDQURBMTEzRjNBQTcwOUU5QTBDQjkyMTJDNTczCi06MTBBOUEwMDBGQTI4NkY4ODQ4ODlDM0YyMzlBRDEyQzk0NTk1OUVBQTI1Ci06MTBBOUIwMDBENTM1Mjg3QzMzMTdCRUEzREUyQjkxMkE2MjkxQkU1NjczCi06MTBBOUMwMDBCNjRDQTQ3NENFODY5MkNENUVBMEUzMjRDMTFEM0I5QTAyCi06MTBBOUQwMDBENkEzNjdCODlFMzlCNTEzQUY0N0JDNTVFRjMwNDY5QjM5Ci06MTBBOUUwMDAwMDZGNDk3QTZGNTI0RTEwM0ZDRUQ5QkUyQTg5NDFCQkMzCi06MTBBOUYwMDBGM0RCQ0REMzUxRkUxNzVCQ0I4QUEzQTFGREJDNkREMTk4Ci06MTBBQTAwMDBEOTUyOTAxRTQ5Q0FFNjdBNjQ0MUVEQzQzODA2RjBBQ0NBCi06MTBBQTEwMDBGOUZCOTEyN0FDQTA4RkU3NDI5RjU2RThGRjlCQjY3MEU5Ci06MTBBQTIwMDA5RjE3QUFENDM0RUQ0RjkyODBFN0RFMzE3OUUyQjNBMUNCCi06MTBBQTMwMDBGRTQyRjFFMDJEQTM1MDFGMDhCRUE3RTJBOUJFMjNDRTFGCi06MTBBQTQwMDBEQTg3M0M1MEQzNzNDMDBGMEVBMEY3REFGRkY1MUVGNTdFCi06MTBBQTUwMDBGMzk1RjhENkY1RTVEMEJFQTZGNjg1NDhFQzY3RTFBNkY1Ci06MTBBQTYwMDAzRkU0NUJBMUZDQTBFODQ5QzNGRTNGMTdCNjNGNjU0NTQ0Ci06MTBBQTcwMDAwMjZDREQ5RTg1N0E3Q0VFQTZCNDI4NEYxRkYyMTdGOTkyCi06MTBBQTgwMDAwMEYxNTFCRDVGMjBGOEFBRTUzMzdDNTEwNjg0QkJDN0I1Ci06MTBBQTkwMDBDRjBDNTY0Q0FEQ0M4MEY0N0U1RTYyOEQ2ODBGQThGNjZDCi06MTBBQUEwMDA4QzVBM0UzMjlCQ0JBREYzNTFFQjkzOTA0RUU2M0ZCNUMzCi06MTBBQUIwMDAyNTA5RjVDQzY3MTEzQzVGRjFENEFENkZBMERDRjJFQzU5Ci06MTBBQUMwMDAzNDFBMTBBRjFFMUQzMzM4NTE5Rjc5NDFCRjIyMUQ1NUQ2Ci06MTBBQUQwMDAwM0ZGQzY5M0RENjFBRTA0N0EyQUNBMEUyN0I4Q0U2RjkzCi06MTBBQUUwMDAxRDQxRkE1MTlEMTc3Q0E3RjJDRjc0Q0M4NUYzMThEMjgzCi06MTBBQUYwMDBEQzk5OEQ3NEZGNjc5RDdGMkVFMkYzQ0ZGNTY2QTcxNzczCi06MTBBQjAwMDBGMTk5Q0RGNURCOUZENzRCQTU1OEVFMDU4NjQxN0JFNDQ3Ci06MTBBQjEwMDBDRkVCNUY4ODQ4QjVGNEQ4NkYyNUQyRkJCMjg0NzZENkU4Ci06MTBBQjIwMDA4QjQyMzZFQUVERjBDQzc2QzMyQ0IyMUIxOEQxNTk5RDdFCi06MTBBQjMwMDA5NUQzNTlDMzAxN0RFOUUwMThCMkM3QThBNDQ2RTczNzA5Ci06MTBBQjQwMDBGNDg1QUYwNThBQkRENTlEREZCN0Q3ODA3QzUyQjM4NzJBCi06MTBBQjUwMDBEQjExMzU2RDY3Qzg4RTUwRUQ5MjVBODU5RjE3RUUzOTFGCi06MTBBQjYwMDA0Mzc2ODVEQUFFNkUxRjg3NEJFRDNFNUU1RTk1MDFDODdCCi06MTBBQjcwMDAxRENERTU4MDAwNDJCQTBBRjEwNUY5RkJGRUY1RDdEM0Y5Ci06MTBBQjgwMDA5NzY5RjI3QjI5N0ZERkI1NTYyRTBGNzU5RDQ5QThCN0NGCi06MTBBQjkwMDBENjY0OUMzNDIwRkU2Qjk3MkJGRDQyNUUxRjM0REVCQ0Q2Ci06MTBBQkEwMDBFQzgxMDQyRjJDMUY2QUMxRjYwRThERkQ1MEJCMkY5QTJECi06MTBBQkIwMDBEQUZCNkJDMzU2QTNCRTk3RUIyQzNBNEM5QjZCMkRBNEQwCi06MTBBQkMwMDBGRkI3RDU4QjE5QkE1QzlDNUM5ODEzRURCOTgzNjE5MTgyCi06MTBBQkQwMDA1OTI4NDcwNzJFM0M2NTA2NDgwMjZBM0I4Rjg4NTBCRUJECi06MTBBQkUwMDAzQUNBNzMyRkQyNjcxQzAzQUU5MDUwNkZGODA1QjQ1RjVBCi06MTBBQkYwMDAzQjVFRjk3NDA0RjYzRjZFNDhFMDZCMDY1M0Q3MEJCRjFCCi06MTBBQzAwMDA5QjVFMENGMjY0MTk5ODJENjQxRjY3MDY0NjIwMUQwRjg5Ci06MTBBQzEwMDAzQ0NDRTVGNEUzN0FCNjFBRjUxQkQzQjlEOTM0MjhGNzVFCi06MTBBQzIwMDBBM0RDNDIzQzdGMUJFNkRCMDVGRkZGMURGMzBGQzZGRUU2Ci06MTBBQzMwMDA5OUM5M0YxNERCQkRBNEQwQTdEQjY4NTkyREMwQkNBRUI5Ci06MTBBQzQwMDAxRUVBNTk4MzRCQkU0MUQwNUY5MzJEMjIwRUE0MzRBQzMzCi06MTBBQzUwMDBEN0ExRTdERjU1N0I3NTgyMjJBNzEzQzE4RTQwQkJDODAxCi06MTBBQzYwMDAzMEM4NkU0MTNBNkUzNkYzRjUwOUIyQ0MxQTYxMUVGNzYwCi06MTBBQzcwMDA2NzFFOUU4RDdBN0E2REE3ODkxOTYxOUQxMzNBQzNDOEE0Ci06MTBBQzgwMDA3RTREMUNFNDIyQkRENjZDNEUyMkJEMkQzODc0QUMwMjI0Ci06MTBBQzkwMDBFQTFGQ0UxNEZEM0FBQ0NGNEMzRUFDQ0Y0QzIxNzZBRTgxCi06MTBBQ0EwMDA2ODk2QjE5RDcwRjBCNTZGNTFCRTBGOTYyRTFFODk4MkM5Ci06MTBBQ0IwMDBGNTBEQkU0NzcwMzY0MzlEQ0FBRTczOEZGRjFCQTQxNUJBCi06MTBBQ0MwMDA5Nzc2RUNGRDU3NDhGRjJEQ0FCMzEzRTE3QUJBQ0I3NURFCi06MTBBQ0QwMDBDNjAzQTg1QjZCNkQzMzM5QjlERTYwQzFFQjM4NzhFRjIyCi06MTBBQ0UwMDBCNzkxMzZCMTY3N0UxRDlERTc5RUZCNEQyRUE2MjYyN0E4Ci06MTBBQ0YwMDBFQTlGMDkwNzI1RDIxRkExRjNFOUIwQzNDNDg3NTIzRERCCi06MTBBRDAwMDBCMjNCM0IyQ0EyNEYxMEIwRkU5MUY3NzA3RTEzNEMxNjU1Ci06MTBBRDEwMDBCRjg0RjZCQTQ5RkY2NUIwN0U2MThFQzRFODczNTc5MzZECi06MTBBRDIwMDA0QTYxREY4MzkxMTA4QjkzNDc3RDc0RDE0Mjc2RUIzODczCi06MTBBRDMwMDA4NTBGNTUzQTdCMkI5QkRCOEY2RjI5NzI1NTg1MzM3M0JCCi06MTBBRDQwMDBDODJDNThBRkE4RjA2Q0Q2QUJGQTIyMTBDRTMyN0JGOEU0Ci06MTBBRDUwMDA3NjkxNTJBRkVCOTIyODkzMUQ1RTZERjQzMUU4QjJFQjIxCi06MTBBRDYwMDBFMDUwRDIzM0ZEQzlEOTNGQTBERDAxRjZDNEYyNTRGOTU5Ci06MTBBRDcwMDA1RDg0Mjc1M0Y0RUVDRDBBRkM1NEZEMkQyOUZEREZBQzk0Ci06MTBBRDgwMDBDMEYxNjY4QkM4RTE3NjUzMDhEQzE0N0EwQUE1OTcxRUQ5Ci06MTBBRDkwMDA3QTg4NDFEQkEzMUJDRkVDQkVGNkEzNTFDOTg0REY2QkRECi06MTBBREEwMDAxRUU2NzhGRDkwRjBGQUVENUIyQjgwQ0REOEEwQkY0RDZDCi06MTBBREIwMDAyMUZDRkUwQzc4RjU4QkI5M0YwMkFGRURBMTc4RjU5QjM1Ci06MTBBREMwMDA4NzIxNUUzNzg5NjQ2N0EwMUQ4ODc2QTMwN0U1QzBCNTMzCi06MTBBREQwMDA5NEU3RjY2MDA2MjMzOTUxMjk4NTM5RDcyNEUzNzc4MDMzCi06MTBBREUwMDA0MzE2Qzk4N0EzMjgxRjU0QjkzMEM0MTVCODA2RjVFOTFFCi06MTBBREYwMDA2OTcwRTU3MTdFMDFCMThEOTdFN0E0MTA1RDI0QjBGNjBFCi06MTBBRTAwMDA3ODJDMDdCQ0U3QTE3RDI3OTk4NjY2N0UwQzcyQjdFNTkyCi06MTBBRTEwMDAwMURGREVERjQwM0ZDRDgyNkZFQjNDOTg4RkY3NjY4QjIyCi06MTBBRTIwMDAxM0VEQjcwRTlGRThENUMzM0M1QUEyNTlENjdFMThCRjgyCi06MTBBRTMwMDA2NUZFNTU0RTJGOTYzMzQ1NkU0QzM3RjhEMDdFODNFRjI2Ci06MTBBRTQwMDA0OThERjhCRDlDN0Y3RkU5RUY2NzFGNDRGQkFDMzM4REQ0Ci06MTBBRTUwMDBEMUJBNUFCMjU5M0FEQTY3MkQ2NTE5RjRGREI3QUFEQ0FFCi06MTBBRTYwMDA3OTMwODJCNzJGRTNGNEREMzJERkU2NDMzREY0RThBMzI3Ci06MTBBRTcwMDBCRUUxQTgyNzVBQjZDQkYxMzY0ODBENTE5RUY4MUM5ODcyCi06MTBBRTgwMDBGRjIwODlEMzdENEIzMjk0NDNCQTU5NzA5N0NGQzU3RTRBCi06MTBBRTkwMDBBRUUxRjMwRDk0ODczREZGMTQ3NDY1NEUwNUQxMDZFNUQwCi06MTBBRUEwMDBBNzFCMjM3NkEwNUM1NUU5NzRGMDMwMkVERjg3NzhDRjlFCi06MTBBRUIwMDA2QzQ1Mzg3OTI3QjA4QzdBRThGRjQzODVERTU0RjgwQjZGCi06MTBBRUMwMDBDMDM2OEQwMEY3OTgxMDNDQTg3NDE3QTNDMDVGNThDQTBECi06MTBBRUQwMDBFOUNGM0I0MTU5NEYxREYzQTFCRjkxMDA1MzA5MDczOEZBCi06MTBBRUUwMDA1NzFBQzFGMDgzNzQ5NkQ1OTM4REYzNkY1RTBDRjg5MTY5Ci06MTBBRUYwMDA3MDFEMUMwRkE3NDU1NkRERDYwNzVGMTVFNjI4RjEwRDFFCi06MTBBRjAwMDAxODAyRjlBNjkyNzFCRUE5NDRCQTQyN0E2QzA0QkEwQTMwCi06MTBBRjEwMDBBMjQ3MTY0ODg4M0UxN0FFRDAxNUNBODMwOEY3QjgxQzVBCi06MTBBRjIwMDA1OEU3NTdDMjFGRjJCMUYwQURGRjk0QTZGNzM1Q0VBNDkzCi06MTBBRjMwMDAxQzJFMkYxRTMzN0I0QTczNDhFRjRERDBEODlENkY2NTcyCi06MTBBRjQwMDA3RjlBODhGQUU1RjRCREFGMjU2MDlBMTRFNTlFOENFQkY0Ci06MTBBRjUwMDBEODVDRkVENzUyMTRGRjFGQzYwN0Y0Qjg4RTBGQ0JGRjg0Ci06MTBBRjYwMDA0RjIyREEyRDk1NEI1RjIzRkFCRkQyNzk5Njk5OTgzNzA1Ci06MTBBRjcwMDAxQ0UwMUU1RDJDMzhGRDAwQkY3OTJENDZFNzI0RjgxNjM1Ci06MTBBRjgwMDA1NzVDNzUwQ0UxNTlENjZBNzQxODkxNTZEODYyOEQxQ0JECi06MTBBRjkwMDAzQjJCOEY0MDM3OEExRERBNkEyNEJBMzlGNzRCODlGNDg0Ci06MTBBRkEwMDBDMUI5OTI4QkFGMEU4MDBGRTc1NjA4NEVBQzU3RDYzMjIwCi06MTBBRkIwMDA2QzI1OTAzNzJCMjkxNkE4NUU5OTU3QTA3QTY1QTkxQzk1Ci06MTBBRkMwMDA1RjI3MUEwNUEyMzc0MEFGMjUzQjI4REUzMUE3RjU4RTUzCi06MTBBRkQwMDBBOTg4REYxM0M1NUYwRkE0RjhDMTdBMTg0N0U1NjMyRTZGCi06MTBBRkUwMDBERTQ4OUU5NTI5RjVBQjU2MUI5MTQ3QkJCRjk3QjVBQzg0Ci06MTBBRkYwMDBCQTg4RkMzRkQzMUI1MkRFM0FFOTUzRUNCN0FDNTE1QjQ1Ci06MTBCMDAwMDBFRUM2MzU4MjFENzc1NzRFNDQwQ0NBMDdFNjY0Q0VFRjc0Ci06MTBCMDEwMDAxMTQ4RjI0MEYyMEZGQTkzQkI0MDcxNDRDRjMwMEZDMjk3Ci06MTBCMDIwMDBDMzg5QkM2MTdBQTRFQjk5MDg1N0EwREJFOEE1N0NERDU1Ci06MTBCMDMwMDAzM0E3MEFCRTQ5QjBDRTk5MTZDRTY3MUY5NjA5QkVGQjRDCi06MTBCMDQwMDAwNTNFRkYwOTQwRUY2NTUwMUUwQjc0NUQxNkMzRTQzOEUyCi06MTBCMDUwMDA0OEREMjZFNjBGQzc3OTJFMURGNjA5Q0FEQkQzMzhENEEyCi06MTBCMDYwMDAyOEFBRUY4RkI0QTE1Q0Y3RTgxMTg5QjczMjJGQTVFNUM0Ci06MTBCMDcwMDBDQzQ3RTlFRENDNEZGMzk4QzEzQTkzNzQ5MEFGOTNGQzcxCi06MTBCMDgwMDAyQjMxOEVGMzJCQjM2NzAzRDJENzVGOEI0RTlDMTZFMDI4Ci06MTBCMDkwMDBGQkREMzk0MkRFMjg5NDQzOEQwMzY4REQ5NzVCMUY3MDJBCi06MTBCMEEwMDBBNTgwNzYwNkFBNDFBQzVGOTZFMzdFMTRGQkIzQ0E0QzNBCi06MTBCMEIwMDA4RjcxQUI3NDk1OEU1QTk5MzcxNUQ2MTdCQkRFRTI5QjBDCi06MTBCMEMwMDAwNEVCOEI2QkY1MUNDMkY1QTY0RjM3MzgxMEVGODMxM0RBCi06MTBCMEQwMDBGODNBMTM3NERDOUYzRjU0NkU2MEEzODEwRTM2M0YxODFDCi06MTBCMEUwMDBFNjQzM0FEQkJDMzUyMERBQTFGRUU2MDM4MDAxQ0M5N0NCCi06MTBCMEYwMDBBRjE0QkNGMERERUE2MTRFOENEMzU5NzUxRTExRURGRTI0Ci06MTBCMTAwMDBBMjU2OEYxODA4RTJBN0UxQjI0MTQ0Mzk5MUJFRDMyMzc5Ci06MTBCMTEwMDBBMjlFQjQ1QUQ3NTMzRDM1NUZBQ0Q0NEYzNzc5MDY1OTA4Ci06MTBCMTIwMDBDOTRFOUU0RUY0MzM1Q0ExMUZCNTlGRDQ1NjgzNUYwNDc1Ci06MTBCMTMwMDBCODE3Qzk0QTdEOTlCNzU3RkI2MThBOUU1NkRCNjEzOUJBCi06MTBCMTQwMDBEMjY3N0FBQkEzNEYzRjQ1NEQ1QjUwM0Y4MzhGRjgwOEUyCi06MTBCMTUwMDBDNjA1RDI3QkNBMUY3MUZEREE4NEYwMUI3OEYzQUIzNkNCCi06MTBCMTYwMDA0QzM3MDMyMUY4NzExQzlEQzc0Q0UzNzlGODNDRDMxNThCCi06MTBCMTcwMDBEQTg3QkZCRjdGOEZFMzYzMUVGMEJCQjlGNUZFMjJFNDIxCi06MTBCMTgwMDBBM0NEMDAxRkM0RjNFNjlEQjNDQ0Q0Q0ZGNDU5OUE3OTc0Ci06MTBCMTkwMDAzMUE5ODZGMjI1MDgwNzRCRUY3NTNDQTJDQzJGM0RENThGCi06MTBCMUEwMDAyMzVBNjlCRENFNDM2OEU3QTVDQjhDRTIwMTZBM0Y3NjlFCi06MTBCMUIwMDAxRDc0MDVGNDZBNzc3QTg1N0FDQ0NCOTA1QTk0Qjg0Nzk3Ci06MTBCMUMwMDAzQThFQjM0RTQwRkYzMTVEQzE1NzQ5NkJGRDYxMzNGNjk2Ci06MTBCMUQwMDBFMzY2MTQ1RjRDQ0Y4NUZFQTFGRTI2ODQ4M0ExMzdGQzc1Ci06MTBCMUUwMDA0MkU3OTk1RUNDRTc3MzQyQTlERjhFRjE5NDc0NkNFNzc1Ci06MTBCMUYwMDA1ODExNDM3NEM1RTdEN0Q1RUExNDYyMUM5N0IxOEZBMEU0Ci06MTBCMjAwMDBGREM5OTA3RTlFQzJCODBDQTRDRjRFN0U2RDRBMkVCNDZFCi06MTBCMjEwMDA3RkZFRDE5Nzc2QjREMDUyMEUzRUIzMEZFNTU2QUJGNTE0Ci06MTBCMjIwMDBFNjlCNzA5QzgzMjI5RkZGNEQ3MkUyNUQ5OERGNkQyMDRDCi06MTBCMjMwMDAzRDlBQkU1MzRFREI0NDc5OTMxM0ZERUJBRTU2REY1NTdBCi06MTBCMjQwMDAyRjQyQkQyQzE4QzY2NEVCM0Q4RjEzMEE5Q0RBMTUzQUM5Ci06MTBCMjUwMDAzODM5NzlDQjIwNUNFRjUzNDU3NzJDNTgwMkVEODc1RjY2Ci06MTBCMjYwMDBGNzM4OEQzQjdDQ0FGQzk0MTZDODBGOUJGOENCQUIzMEVCCi06MTBCMjcwMDA3RjVGOEVDNzNDMDJFNEZFQjBEMjVGREVCNjBGRTU2QUE4Ci06MTBCMjgwMDBFOUZDMUM4Mjk3QzU3NjQ1RjJBOTM5REFFM0Y1MDJCRkRECi06MTBCMjkwMDAzNzQ3REM1MjhFRkNCOEQyNjY3MDQ4MjQ3N0VCMTlGQTM3Ci06MTBCMkEwMDA1OUNEMTE3N0RCQjFCRkU1RDFGOTI2NEMwREQ2QkYzNkFDCi06MTBCMkIwMDBBMTlDM0M2RUM5MzEyMTFFOUEyRDEzMTg5NkVCQUMwQTQ1Ci06MTBCMkMwMDA5RUJFMUI0RkZBNDA1Mjg4NzI3Nzg0NzNCQTRDNzRFNTY1Ci06MTBCMkQwMDA2NDI4MjcwQzA5MDZBREJDRDY3MTc5MkZEOTFEM0VCNDYwCi06MTBCMkUwMDA5RkJBQUNGNTQ4ODFDQzYwMDk1NEEwN0M5MzU0Nzk2OTJECi06MTBCMkYwMDA3MTdBNzEzQ0M5RTJCNEEzQkZCNDQyOTEzNzJDODZBRkQ2Ci06MTBCMzAwMDBEMzYwMzlGNzlGMzhBRjVFRkQ2MzJFOTY1MDRCN0Y4NjMyCi06MTBCMzEwMDBCMENDMjg0MUY5M0ZEQTlCQzYxMDNFNTc1MzgzQzVCQkRBCi06MTBCMzIwMDAxOEY1NDQ2ODdGNUQyMDcwNTA4RUEzNEY0Nzc2MzM3RUJBCi06MTBCMzMwMDA0OEVFREQ1RUIyMUIzNDdBQTQ1QjVFN0FBMkY1MjFGMkEwCi06MTBCMzQwMDA1MjFFODE3QUEyNTgyMDc5RTk2MUVCMENCOEZFMTIwQ0VBCi06MTBCMzUwMDBCMjAwNUMzQ0RCQjg1RTU0Rjk3QjI2Q0UwNUYwRTU0OUQzCi06MTBCMzYwMDA2NTkxNUM1RUU5RTQ3MzI2MEVDNkVGRDFBRTVDMkE0NUJBCi06MTBCMzcwMDAyMjFFMDI1RUM5RTBFOUMzOUZGNzc4OTM3RjUwMUU5REFECi06MTBCMzgwMDA0MUZBODdBOTA3OTBGRTIxRkQ0NEUxMEY4RjhBMDc2RkRDCi06MTBCMzkwMDBEOUY1QTM1MDVGQ0IxMkQ5MDM5NUNCODUzNkI0Q0ZFMjU0Ci06MTBCM0EwMDBCQ0QxNDc2OUJFQzVEQzJFNjg5N0JGQTZGNTFDMkE4OUFCCi06MTBCM0IwMDA0QjQ0Nzk3OTYyRDk5OUM3RUY0MUJEQkUyOTlDRjRGRjBFCi06MTBCM0MwMDBBNEE1Njc1NjYwM0M2RUE2NTc3MDFBMjFFRjU5MUE3REU2Ci06MTBCM0QwMDBGNzdCOTg2RjM0M0E1RDkwM0ZBQkYwODFGQjk3NDU5MUQ2Ci06MTBCM0UwMDA2ODRGMDhCOENFOEM5RTc1NTYxNjMyODM5QkUyMzlGMUIxCi06MTBCM0YwMDAzMzk2NDAzQjRGQTNFMDM0M0I3QUUwQTFDNzdBNTJFRjRCCi06MTBCNDAwMDBGNTA1QkMzNzQ2RkVEMEZBM0ZCQ0Q3QThDODU5NzczRUYxCi06MTBCNDEwMDBDQUQ5QTJDNkU0ODcwQTcwNURFQkY1N0M5RThERDFEN0IwCi06MTBCNDIwMDA1M0RFMjczOTM5NzZCOTFDOUVBOUQ4M0Y5RUE1QjM1NzVDCi06MTBCNDMwMDBDNkMzRjdDMDZBNDFGOUNFRjE1NkE5QzhFNTQwRTM4ODEyCi06MTBCNDQwMDA2MzE4M0YwRDJDMTc0ODNFNzlCQzUyQTIxRkRBQ0Q1QzIxCi06MTBCNDUwMDA5RTRENzhFRjI4MEE5MDVERDhFNTNEQjQ5MjVBMkI3MjQ0Ci06MTBCNDYwMDBERUEzNzQzNjE3OEM1ODk0NkZBN0RGRTNGRTlGNDdGRTY4Ci06MTBCNDcwMDA2MzI1QjY5QkQzQTJCNTgzMjYwMkZEMEM0MEI4QkM2N0ZBCi06MTBCNDgwMDAyNkZERTlGMTk2RDFCQUVGRjA0NTY5RUE1NUFEOEVEM0M0Ci06MTBCNDkwMDBFNDNEQUI4QkFFQzdCMEU3QUM3QjI3NTIzQ0FGOTIzOUYzCi06MTBCNEEwMDAyMjkxREUyQTY1NkUzN0MxOUYyNTFCRTYzMzU3OUQ0RkRCCi06MTBCNEIwMDAzMUI3QzcyQThCQzE3RUEyRUY1QTdCQjBDN0ZFODkzMzUyCi06MTBCNEMwMDAyMERGQTg3ODU0RjExMzNBRUY1RTc2MTlFMzc2RDBBQzFBCi06MTBCNEQwMDA3NURBN0FERDc2MTAzMDE2OEFCQUNBRTVEQTc2QkYzMkM2Ci06MTBCNEUwMDBCQjlGNDVCOUU4REUzOEUwMUJGMkFCQUU1MDFFODI4MDUwCi06MTBCNEYwMDAyMTdGNkUyNkUzNzExRkE2RTg0M0Q1Q0UyRjU5N0E1MURFCi06MTBCNTAwMDA4RjcyNjg2NkUzNDUzREMyNzNFNkQyMUZFNkE3NUYzOEQ3Ci06MTBCNTEwMDBCNUYzQkVBMTIwNEFCQjNFMzk0RTkzQkZEMTM1NDQ1MzRCCi06MTBCNTIwMDBGRjY2RjczMENERjc1QkE3NUZBQkY5NUVFRTE5QTlDOUVGCi06MTBCNTMwMDBERjVFM0Q1RTUzN0Y0NkZEMjRBRDFDN0EzNzlBRDZBMzZECi06MTBCNTQwMDBFMkE3QkY3OUJGQTVFOEEzNzc0MkVDMTIzNTlEM0FFMkE2Ci06MTBCNTUwMDAzRjEzOTFCRjNGMkM2N0U0QkY3Qzc4MzNEM0Y4MzExRDk0Ci06MTBCNTYwMDAyMzI0ODJFNzgwNUMzREY5MzFGN0U1QzhFRjhGMjBCRkU3Ci06MTBCNTcwMDBDOTRGRjRBMUMyRjM0MzczQTFDOTI4QTI3RjYyRTQ3RTNDCi06MTBCNTgwMDA3OUE4NUY3MjkwMzk1MDVFQ0VENEIxRkQ0MjU0OEZGRkRFCi06MTBCNTkwMDA2NzBFRjM5Q0M3RkVCQUUzMEQ0QjBGRjE3ODQzODgxRjhCCi06MTBCNUEwMDA3M0E1NzhGRjcwMDZDQ0JGMEY3OTc5NEQyRUY3QzMxNkJGCi06MTBCNUIwMDBFRTM2QUZGRjM4MDg4RUI1NkREMTlBRkNBMkZERjFFQkU3Ci06MTBCNUMwMDAzRjBFRDYzQjRCMDQxREFFQjM0NkUxOTM1QTE2QTA3RDA5Ci06MTBCNUQwMDA1MkJCRThBMEZFRUFDNDQwMkNFNjNCNTg2NzZDQjRGNENBCi06MTBCNUUwMDA4RjgzOEIwQTBGODA4RjI1MzcyOERFQTlGQUMzM0YxOTc2Ci06MTBCNUYwMDAzRTQ1MEE5RUNCQjQ3MDFBOTNDQkUzOTA1RjhGMTAyOTFGCi06MTBCNjAwMDBERDlDMjNDN0U3RkUwM0YxMUNCNDlFRjREQ0JDN0ZEQ0E5Ci06MTBCNjEwMDA3QTIyNDdDODU5MDg5RjlGMUJBRkRGRTMxRTBGOTQxNzdDCi06MTBCNjIwMDA4RTkwMEI3RjI2Qjg0Q0ZFNDdDMkE1NDdDRjQ3MkZEODM4Ci06MTBCNjMwMDAwREZBQTM3MjlEODFGQkZEREUzMzVDQkYzNzcyRkRGRTA4Ci06MTBCNjQwMDA3Q0I0OEZGNjg3OUJGMzQ0RTcwRTA3RUQ5N0QyM0VFOTczCi06MTBCNjUwMDBBMTdCOEQ2MTE5MThERjU5QTEyMzdENzk3QTk5OTA4MTk5Ci06MTBCNjYwMDBGRUMyMjYyMThDRkMzNjBGQUI0ODE2QzhCRUI5NzhDODdFCi06MTBCNjcwMDA0OEZEMzFBQTA3RURGRDNBOTBGMzUxMDUzRTZCMDlFNDEwCi06MTBCNjgwMDBERkNDRTU3MUIxMzU2RTcxNEE4QTAzRjVGNjFGQUMxRTQ5Ci06MTBCNjkwMDA4QThCN0FFMjExMUU5RUZEMzBFMTZCNjlERjQ1RUUyQjRECi06MTBCNkEwMDA3RTEyRDA2QkU1RDExMjg1OEY1RkNDRDVEMTNBMUYyRTlCCi06MTBCNkIwMDAxNEI5OUQ5NDJBQkE3MDFGNjMxNUQ4QTk2ODU3MDY5NkM1Ci06MTBCNkMwMDBFQjI4NUY5MUM3RTk1OTZERjcxRjBBOURDNzk0REQxNEY4Ci06MTBCNkQwMDA4NkYzODhEQTI0QkE3RDdEOENGQjUxMkU4RjBGM0Q3OTVECi06MTBCNkUwMDA1NzE4RURCMzAxMkE3NDY4RUZEQkJERDY2OTJFNThBRjQ5Ci06MTBCNkYwMDBCREQwOTY4REI2REZEQURDNjhFQTZGNEQ0Njk3MTVDRjgwCi06MTBCNzAwMDBBMUZDOEM3NDc4Q0E4RUZFQTBDMEZBOEMzM0NENTVFNkFECi06MTBCNzEwMDBBQkVFMEY1ODk0RkUzNkU5NDFCRkEyOUQyMjk4MjgxRTM5Ci06MTBCNzIwMDA2MUYxMUFGOUY5MTU2N0IxMjZERUNBMUMwMjBCNkVBNzgyCi06MTBCNzMwMDBENkYzMjhGNDZBQzc0MjFCRTE5N0Y2RUZENTc4QjE1RERFCi06MTBCNzQwMDBBMTE3QTQxQkM0QkI0QUNGQTFGRDgzODlFQzhEQ0NFOTEyCi06MTBCNzUwMDA4OUYzRDkxNTUyOEUxQUU1RDk4RDc0OEZGREVBOTAxRkExCi06MTBCNzYwMDBCQzVDRkUwNzZFQkVDNEUzMkNERUQ3REVDMzc5ODhFMTg1Ci06MTBCNzcwMDA1RjUyOUMwQ0VDNEFDRTVGNEI0M0UyQkUzRjkxNEYwMkJFCi06MTBCNzgwMDA2NjBFQ0Y0MDg0NTYxRURFQUJEMEM5REE3RjgyREU0ODFCCi06MTBCNzkwMDBCQTAyQkMzRTlDQ0JFNThGQUJDMEZEMzZDQTNCQzdCMkZDCi06MTBCN0EwMDBENDMwQTJGQjFGMEIyNzk2NjA0NTM4NTE1RUJBNzIzODIxCi06MTBCN0IwMDA3OUYzM0QxRjEwOUU3NENDNkZCNDcxN0YwQkY5RTE3MjY5Ci06MTBCN0MwMDA3Q0E0QzIzMTQ5NjQ5RUJFRjRGMjg4M0NFNUZCMUJDQUVFCi06MTBCN0QwMDA3RUFFQjc2QUM4MEZEOTYxMjg3N0M1MDJDNkQyMkNDQzE1Ci06MTBCN0UwMDA2MUJDQjZGRjdBMEU5QzhGODVFODZBMzlEMkU1QUU5NkM5Ci06MTBCN0YwMDA5NDMwRTRDRjY0NjVCQ0NBOUJEMkE3MEM3N0EwNUYyMENECi06MTBCODAwMDAxOEQwMEUwNEJGQzNDMEUzM0ZEQzRFNTdFNTdBNEZCOUYyCi06MTBCODEwMDBENjdFQzQ3MjRGNjY4RjFGQTZEQUY3RUE3NzNDOTc4MjBFCi06MTBCODIwMDBFM0FBRjM1OUE1RDg2MUZEQ0Q3NzU1MTI0QjcyQTJEQzdFCi06MTBCODMwMDA1QTc2OEY4MEYwRENCMTVBRDRGODdENzE1RTYxMjUwM0IxCi06MTBCODQwMDAzRjNFQ0U3RkFGMTNGRDhFMzhCMEFGQ0QyOENGNzVGNTFDCi06MTBCODUwMDA4MjMzMDg1RTgxN0I4MTBBMzgxMzg3RjgyQkUwNEZFMjQwCi06MTBCODYwMDAzQUJENjc4OTVFNDJDNzU3RDdCMUFCODU4RjFCRTc1RDhECi06MTBCODcwMDAyQ0M4OTA5RjU0NTEyRkEwREZCNzU2OTk3RjVDMDVBMzI5Ci06MTBCODgwMDBFRjY5OTkzRTAxRTMyMTlFMTY1NjhBRTM1NTU2MzMwMzJDCi06MTBCODkwMDBDNkY1MkEzMzk5NTM4NkYyQ0FDNjQzNzRERUVEQjkwMjVGCi06MTBCOEEwMDAzOTI1NkYyMEM5NEYzQTRGRTMyQUYwQTRFNzAxMUQ0RDE3Ci06MTBCOEIwMDA0RDI4NDM3NjY3Qjg0Qjg2RjE4OTdGMTYxREE3QjU0Qzk2Ci06MTBCOEMwMDBGMEEyRUY1OUQ0RTIzQzg0RkUwMUQwMTFDNTdEM0MyRDlECi06MTBCOEQwMDAwMTFBNUZFN0U1NzE3MjVEOEJDMUU5ODA3NTQ4OEQ2NTdFCi06MTBCOEUwMDBCNEZGMjE1NTFCOUMzMkQ0M0JCNjI5REY4RkYxOTUyRDM3Ci06MTBCOEYwMDA4RERDREYwREY1OTM3NEQ2RkFEN0MzRDE1RkFCMTA5OTA5Ci06MTBCOTAwMDA0NDAxMEE3OTJBRkE1OTU2ODUyRTU2MzA3NzNCRUVGN0NDCi06MTBCOTEwMDAzMzE5RkU0MUJCNDhBNURDNUEzRDZGMkE2NjIyRTVEMEFCCi06MTBCOTIwMDA3ODgzREMxMzlGNDA5RTZCREM0MEIyRDM5NEFBOEQ2NzcyCi06MTBCOTMwMDA0ODJEMkJDOUFGMzM2MjdEQThBQzBGODk3NzQ4RDVBNUI4Ci06MTBCOTQwMDAxNDE3OTdBQ0RBRjI1QkYzMjI2MjA4OEU1OTNDMUU5RTA0Ci06MTBCOTUwMDA3M0VGODg4REI3QzI3QzcyN0Y3OUUzMUYzMDNEODc0MURBCi06MTBCOTYwMDAzMzgwNUJGRUIyM0IwNzRDODdGRjE2QUNEODc4MjNBNjJBCi06MTBCOTcwMDA0RkJDQ0VFODlDQzE4RkUwNTc2NjhDRkFGMUZDRkFFODI4Ci06MTBCOTgwMDA5NUYyQUJCMjI2MEZEMEI5QzJBRjdERDJCRjFBNEYwOTI0Ci06MTBCOTkwMDBFNTRGOTVGRTQzRjk0RTRERDc1RTg2N0ZENzI2MDUxMkJCCi06MTBCOUEwMDA5MTBGNEZERjNCMzIwM0RCNTczNkRFNzNDOEM3ODg1RjJBCi06MTBCOUIwMDAwNTA3RDA3N0E1Nzc3MTExMjNCQTYwNTY5N0QwNUI1RUUzCi06MTBCOUMwMDA4NDM3MEI0OUVDQkYzNzFGM0Y4NjdDM0JGRUVGRTcxMzA0Ci06MTBCOUQwMDA3RjA4REY5NTA5OENDRTYzODFGRDQ5RjY5QzlBQUFERjJBCi06MTBCOUUwMDAyM0YyQjkzRUJEOTA2NzI0QkM0RTQ2QzEwQUFDM0IwNTZDCi06MTBCOUYwMDBEQUUwQkVDNzc4NjA0RTJCQTQ3RjJFRjAzQzhCRTM0RDdGCi06MTBCQTAwMDA4MTNDOUVFRjdCRkQ0MDZCMENBRTM3NEJDN0Y1OEVBNzlDCi06MTBCQTEwMDBEQjhFRTY3NjQ4QjdGRkE4RDgwRjU5MDYzNjA1RUREQzcxCi06MTBCQTIwMDBDMDI2MTE3NzZFNTlFMEMwRTczQkQ2RTJCRTZCQjlDOUJDCi06MTBCQTMwMDA5OTA2RUJDQUJBREY0OEY0ODQwNDhBRjY1MTk2NjhBN0RGCi06MTBCQTQwMDBCOEU1QUVCNjhGQ0I2OTlGQjFEMUMwRDIyODZFRTAwRUZCCi06MTBCQTUwMDBDMzczNjQwMENGQjBBQTRDQjI1N0MzQUM2OEFGN0E4NTQ5Ci06MTBCQTYwMDBBNEFBODgxRTdCMDhGNTIyMEFCNDJDRUZBRDUzQUMzMDkzCi06MTBCQTcwMDBGRUFFNDJCMDQ3MzM3QkVDMUNENUZFNTk5QzlGNENFQjhECi06MTBCQTgwMDA1N0VEMjA2OEM3QjBERDhGRTVBNzRBMEI0QjIyQkIxOUU1Ci06MTBCQTkwMDBFNjgzRkJGN0I2NEMyNjkwRUQxMzUyRkZGNDMyMjNEOTIwCi06MTBCQUEwMDBBRjc2QUY3QkNBNzBCNDVCOTdBN0U2QTBERDBBRTM5QUQ2Ci06MTBCQUIwMDAyNDZFN0ZGRDNCQ0E2N0JCNEVGOTVFMjhFNkUwQjk0OUJDCi06MTBCQUMwMDA3NTFGODAwNTc0RDExODg3NTNFREFBRkVFN0E1NjNFN0JCCi06MTBCQUQwMDA1NEI5MDU5NTdGOUIyRjlGQzE3RUZGNTk3MkRENjM1NTM5Ci06MTBCQUUwMDBFODRENEQ2M0Y4NzlFMEU5MEFCRDhEQ0YzNzUzOUE5RTUyCi06MTBCQUYwMDBGRkIzREI3M0E3QUU5M0ZFNzlFQkZFMzlEN0UxRkE5Rjc0Ci06MTBCQjAwMDBCMThFRDhGRjIxRjhEODNDRjk3RkM2M0E2RTk5RjI0RjMyCi06MTBCQjEwMDA1Qzg3Mzc1RjZFQzhDRjQzNzlENjQ2RTc4OEVDMkU3RUM4Ci06MTBCQjIwMDAyRTFDRTRERTNEQkM5Q0NCMzk4QjkzMDk2NEM3RkY3NEFCCi06MTBCQjMwMDA3OUQ3ODRGRDlENDExRjFDQ0ZBMTc4NzcwODNBMTg2N0ZCCi06MTBCQjQwMDA4OEE1QTE4OEVDQ0RBNThDRjY4MTg2MkNFNUZCNDA0MzI5Ci06MTBCQjUwMDA5NjNBNEQyMkRBMDMxNjZFMjcwRTUyRUNDRTQxNEJCOUJGCi06MTBCQjYwMDBERDE5QTc5QzJCODg4QjExN0QzMkQ0M0ZGNkNCNUJDQUE1Ci06MTBCQjcwMDBFN0M2RTBCRTkwOTFFQ0Q1RTYzNkRERjUxNkQ0NTM1RTBGCi06MTBCQjgwMDA4OUNFOEY4NkRBODlEMkQyOTU0QTlDNUY2QjlGQUFGNkJFCi06MTBCQjkwMDA2ODFBRTM3OUZEQjJCM0I0NEZBN0RBQTM0Mzk0RjJCNEMxCi06MTBCQkEwMDBBNTdDM0Y2MDQ4OEJENjFFOERBQkQ2REE4RkZBODIxMDBCCi06MTBCQkIwMDAzQjczQTlCQTdGRDA0OUVCRDMyREQ3RTlGMUZDN0ZBODFECi06MTBCQkMwMDBERDg5N0JCMEE4MTQwN0FCN0EwNkI0RkU0REQ3MzBGNkZBCi06MTBCQkQwMDA3NDdFRjdGOThDMUNEQzFGOUFCOTVBRDBFODM5NTVDRjFFCi06MTBCQkUwMDAwMjI0Mjg3RUE0RTJFMzQzRDQ3Mzg4M0ZGNzM0QjU1RjkwCi06MTBCQkYwMDBEMjZGM0VBRjQ4NzA0QzJFNEZENzlDNTM2MkVDN0UxRUU2Ci06MTBCQzAwMDAyRjcxNzMzQUZBRjVFQTExNkJEMUFFRERCN0VFQzYzNzk0Ci06MTBCQzEwMDAzMTdENjlGRDlERTFFNTA0QUZGNTU0NkY3RkNCQzZFQjQ3Ci06MTBCQzIwMDAzMEZGNTA3NkJCM0QxMkU2RjVEMEE4NTNFRjA5RDBFRkI4Ci06MTBCQzMwMDA2QTNDRTM4NUVCQjM3ODI5OEZCNjE0OUU4QkQwQjM3QTM4Ci06MTBCQzQwMDBEQURGREJBNDBGNEM5RjBERTUyQjEyNDUxQzkxQkUyM0MwCi06MTBCQzUwMDAxRDk4MzIxODlEOUYzMDU5Nzg3RUY1MzU4Q0VFRTMzMDczCi06MTBCQzYwMDBFNTVDOUYxQTg3MDkzREQ3QjdDQUMzQzc1OTA1RjBDNDE5Ci06MTBCQzcwMDA3MzM1OTYxODdFMUZBOTM5RTFGRUU5MDhFRjY2ODc4MUMyCi06MTBCQzgwMDBFMTM5Mzk4QjcyRUU0RjYyRDVBRTJBQTg3N0RDN0VCRkUwCi06MTBCQzkwMDA3RDE2RUUwQjY3MTg4ODdFQTQ5OENFMjZDNDkzRDk5RTk1Ci06MTBCQ0EwMDA2M0FGQzI3MTQyRTIzNUNEMjlFOTM3MjA1OUJDQjVGQkZCCi06MTBCQ0IwMDBGMDlFNjcyMDdEN0JDRkM5MkYzMTlEMkFCNUVGQzNGMzVFCi06MTBCQ0MwMDAyNTUyNDY4ODlGRDI2QkJGOTgxMURDOUI4NzMzNUY0QTExCi06MTBCQ0QwMDAzMjk2M0I2RTEwOTE0RTc1RUI2RjlBODZGRTU0QzE1MEIyCi06MTBCQ0UwMDBFNzFBNTg0RjU4MDJGMzFCNjAxRTYxQkRGNjg5Nzk3QjM1Ci06MTBCQ0YwMDBBOTIwOUNDRUQ1NDg5NkY1MTUwREQ4REZBODA4QkE3RkE3Ci06MTBCRDAwMDBDMEJFMDNBRUNCQTdGMzRERjQ1N0Y2ODBBODQ3M0EwRTVBCi06MTBCRDEwMDA1M0Y2OEZDMzMyN0JFRDFGRDNGQ0MyMzA0REUxNTkzQjRDCi06MTBCRDIwMDBFNEMzMTU3QTVGNjM3QkNBODdGQjc3NkIxMzUyNkUxMDhGCi06MTBCRDMwMDAxRDNERjU2OTVGMTlENkJCRjJCQjFCQUI2ODVGRkQyNkU1Ci06MTBCRDQwMDA5MzE1Q0Y5Rjg1MjlGQkNBQTFFMzc0QTUzQTVCNjc0MzhFCi06MTBCRDUwMDA2QUI0MTg2NDczMTZGMTU1MEY1RjcyRTBEODUzODNFNjI2Ci06MTBCRDYwMDAwMUY1RkE5Q0E3M0E2RTczMUVDNzgzREE5RkQxQzI2NEFECi06MTBCRDcwMDBCNDIzNDNGN0FENDNGQjgxNzk3MEJFNTZFQUE5RkQzMTg4Ci06MTBCRDgwMDBENjQ2RTcwMTc0ODg4QjUxN0RCNUFCQTdCOTBEREZFOUM1Ci06MTBCRDkwMDAyNEJCMUZGRjgyRTM4MkNDMUE0M0ZDMzVBQzU1REJDRUJCCi06MTBCREEwMDA5Q0NBQ0YwREE4RjQxODJBMkZBNUQwRkRGN0Q0N0E2RjFFCi06MTBCREIwMDAzOEUxODE5RjI3MDhBRDFGMEFEN0QwRjZGMEI3MzM1ODc2Ci06MTBCREMwMDBERURENjBFMUZCODg1REE5OURCOTIyQUM3QkE1M0Q0NzI2Ci06MTBCREQwMDAzMzdGNUFCRkQwRDM3RkVGRkQzQzZEQkU0QzM2RjZCOUYyCi06MTBCREUwMDAzRTk0MDc3RENENzc4MjRFQkI2RjU5NkNEMUI2MkY4REI3Ci06MTBCREYwMDBEMTdFNzcyNTY4RjM5MjQ1RTlERjkxNkRBMkYzMUE4RTIzCi06MTBCRTAwMDA3QzEzOUVGNzUzRjlEODE4RTJFRkY3OEFERjJBRkEyRTRGCi06MTBCRTEwMDA5MUM5NzQxRTc1OTNERTc5MEVFNUM0RTMzMzQwRDIwMUY3Ci06MTBCRTIwMDA3RDNDMkNGOENDNTgyRTU1QjQ1QjUxMEZDNkFERDM5MzQ2Ci06MTBCRTMwMDA5QzdBRkNBRTVCQ0VFMEJEQTAxNkEwNkI4NEU1NzFGN0VBCi06MTBCRTQwMDA0NzlCNkVDNTdDQjE0OEYxMEQ5QkZCNzAzOUQyNTFDQjNECi06MTBCRTUwMDA3NzVGQkYzNzFCQ0Y5RjNBMEQ3NENFNUIzREI3QjE3NThGCi06MTBCRTYwMDBBQzYxMkIxRTBCOEFDQjk0Q0Q2OUYwRkRBMTJBRTY4NDMwCi06MTBCRTcwMDA5OUIwMjM2MzYzMjM3MUZDMkREMUEyMTVGNURERjNEMUI1Ci06MTBCRTgwMDBGNUZGOEU3MTk0RTYxOThDRjYxOTQyRTE1NzM3RDI0NkM4Ci06MTBCRTkwMDA3MjM2NkU3NUI2ODBGNzVCMUUxRTlCNUY4OTcyMzEwNjI3Ci06MTBCRUEwMDBGQzY1OTRBRjkwQ0E3REM1MTdDNzE1RjBGOEMwQjZDNTNDCi06MTBCRUIwMDAyRkM1MjNCRTM3NTgwRkRCNjk5RTE1QTIxM0E3RDg1MjkyCi06MTBCRUMwMDBDMUU1N0Y4Qjg1RDEzRTdCRjNBODUyMzcxRTRERUM3MkM2Ci06MTBCRUQwMDBDOTBFM0M4QkQ4RTJERTQxRjM1RTU5MkQ3MkQ5QUM5QzgxCi06MTBCRUUwMDA5NzAxNThDODUxMzk5Q0JFMEMzNjRBRkQ5ODZFMzRCMzQwCi06MTBCRUYwMDBGODM5Mjg5NzkyQzJFODdDNTA3RkY2ODFCNDg0Q0I1N0ZBCi06MTBCRjAwMDA2QzZGQ0NFOUJGREU0MzExOERGMUM4NUNDQjY3RTQ5RjU5Ci06MTBCRjEwMDA5RjBCRkQ2RDlEQjE5OUYyQUEzQzhENTNFOEJCQkJERjMxCi06MTBCRjIwMDAxMDNEQkExQkYwNEI3MjM2MUFFNDJDOUVDNzYzOEU4NzA1Ci06MTBCRjMwMDA4OUI3NzVGNUMyQjQyMDNBRDU1NTgwN0NDREUyRTcyRTlECi06MTBCRjQwMDAzMDdFQkJCRUE4MzRFMzg3RkM0QzlEOUJDQkU1MTg1NUU3Ci06MTBCRjUwMDAxRUJCRUI5NzYxREMwNURBRkI1MTVGNjMzRjc4Q0UwRkM4Ci06MTBCRjYwMDA1MjE5RDdCNzUxQTgzRjQ0N0VGMzBDODMwM0VGMzlFODQ5Ci06MTBCRjcwMDAyQTQwMEU0MzdCNUQ4MjU2NEYxQzE4QzlGMTM1RkJDMTI4Ci06MTBCRjgwMDBCQkNDOUVBMDM4NEQ4QzcyMUU2NkEzQkVERTlDMDZFQjE5Ci06MTBCRjkwMDBEOTM4NDM3NDZFMDc3ODZDQTk2ODEwRkE4QUM3QzQ1NUZCCi06MTBCRkEwMDA3MDdFOTkwREY1RDE2RkRFNTI5MTEzMUJCQzlFNjY4QzhECi06MTBCRkIwMDA3M0MwRDAzNkQ3MEY5RkRCRDM4NUM4QkY1RDIzNzlCQzU0Ci06MTBCRkMwMDBCRDY3REQxQ0JFNzE0MDNGQTg4NzlBNDc5N0FFRTY2QTAxCi06MTBCRkQwMDBEQTQxNzI1NTY3RTU2RDZEQUU3QTNBMDdEOTU1QzFDRjMyCi06MTBCRkUwMDA1REFEMTNGODdFODJBNEM0Q0I5QjhCRjI0OUJGRjQ0QkFBCi06MTBCRkYwMDAyRjE1MkI0OTlGODRFMjU3OUQzRkZERTUwN0U5MTE5OUQ1Ci06MTBDMDAwMDBGMUYxMTk4NzlCQjRDRTRDRkFFMTA3REEzQjc0Rjk0QTk3Ci06MTBDMDEwMDA3REQ0MEIxRTZEN0ZCQTYyNTEzNkUzRjhBODVGMTBBRjc2Ci06MTBDMDIwMDAzQUU2QzU3QjkzQTFGRDk1MkFGQzE2M0ExRkM5NjlFMDQzCi06MTBDMDMwMDBFREIxOUQ4REY4OEJGNERCNjkwMUUwQzhFOTgyQ0VBMUZBCi06MTBDMDQwMDBCM0Y3MzgzQ0I3MjQzQTdDNkJGODAxMkVEMjg3NzRBRTM0Ci06MTBDMDUwMDAyQkE1Rjc3ODhGMDk4RTY1QjhFRkU4N0Q1REEyRjNFNzMxCi06MTBDMDYwMDBBMTdBNEZDREFCNzAzMEIxMzZFNzlDM0VFQzREOUMwRkMyCi06MTBDMDcwMDBFQTM1NjlBN0Q3ODlGQTAxRDA5NzhBRUQzNjJBNEIwOUE0Ci06MTBDMDgwMDBCQkIzRDQ1Q0UwRThBREQ3QkE1QzZEQUJBRjgyNzI5MzYyCi06MTBDMDkwMDA4Mzk5RjYwMzNDNEM1Mzk5N0YzMEMwNzlFRDMzQ0YxQzI0Ci06MTBDMEEwMDBCRjhBRjUzRDBFQUUwM0Y4OTlFMEJDRTZGOTQ3MzNFNkVBCi06MTBDMEIwMDA0MDdCRjNFREFEMjZCNEI5NDNDRkExRjU2RUVGQTQ3Njg2Ci06MTBDMEMwMDA3MTRCQUI0Q0QzMTlDNTIzNjU1NEI5ODYwODBCRDlBRjU2Ci06MTBDMEQwMDBDQzc0ODZFNEIzMzRDOUM2RURBNzEwM0RCOTBFRjg1MDUwCi06MTBDMEUwMDA4RkYwNEE2NDA0QUZEMDM4NzFFOEY4NDkwNUM5RkNERTI2Ci06MTBDMEYwMDBFNEUyNTIxQTc3NDM0NUE3MUVFMzkwNURBRTdBQzU0RTNGCi06MTBDMTAwMDBGMkY0QTlFRjQyRkJCMTdCM0FBNzIzRkY3NzE1MUFDOEQ3Ci06MTBDMTEwMDAxRTdFRjhDMTQ5OTMxMUNGREU2NTEyQzVEMTdBRDE3QjVECi06MTBDMTIwMDBDOEJBM0QyM0Y1OUNBRTFDOEJDRDI4N0ZCN0NDQjlEQkJDCi06MTBDMTMwMDBFQ0U4QzNGRUQ4NTIzMThCQ0UyRjVBOTY3MDNCNjNBNUU0Ci06MTBDMTQwMDBCRDgxRTQ4OEE1NDJCOUU3QTJEOENCNzFBQUJGMTNBMkVBCi06MTBDMTUwMDAyN0I3NTQzNzk4RjFERTlCN0FERTkwODVEOERCOTdFREQwCi06MTBDMTYwMDBCRjFGQkRCQjYxRjk4QkYxQTg0RkVFMkE2OTg4Qzc3OTYzCi06MTBDMTcwMDA2Rjg5RjA0Rjc3MTNERkQ1OTM5RjAyRjIzODFFRTVGMUY4Ci06MTBDMTgwMDBBMjkxMEU5MjJGRERGMjdGQzYzOTNCMEUxRTE4Njk1NTIzCi06MTBDMTkwMDBGODhBREI0MzVGRTI3RjQxQkY2NjhEOTJBNzE0NjAxQzgzCi06MTBDMUEwMDAyREI1NDQ4RTc2NjBCQzc0REZCQkQzMDBBRTkzQkQ3QUYwCi06MTBDMUIwMDBGMjYzOERGQjgxRjRDMTJGMzIyNjM4NDk1RjlFMUU2OEUxCi06MTBDMUMwMDBCMDIyOURBQzZBRkM0NjhGRjc2QkNFRTJFOTU1RTg3RjYyCi06MTBDMUQwMDA1NTAyQjc4NzU2QzUxODk4REY0MkYzQTE0NTRGNzUyRTEzCi06MTBDMUUwMDA2NkE4QTdGNTA5REMzNzAxQkZDNThGNzkxNjIzMTBGREI2Ci06MTBDMUYwMDA0QzhFRjFCQUFEMDA4NzI5MzFCRUJCMzBBRDRBQUNENzA5Ci06MTBDMjAwMDBEOTYwOUMxMjQ3QjQ4MEYwOURBMjYzQzUwNjFFQUY5RDA1Ci06MTBDMjEwMDA4NUYzNUMxMUYzMTFDNTU5MjdBN0M1RDE3RDU0QTNDNTdBCi06MTBDMjIwMDBBREMzRkJDOTdBNjdENUY2QjU4Q0NFOEI1MUJDMTVCMEMyCi06MTBDMjMwMDA0QUY3RTE4QzE4QzdCREI2Mjc4RUFCRUUxM0E5RjFEQzI3Ci06MTBDMjQwMDA3NTA1MjkwNDJGMjFDMUZGMkRFMjIzQ0IxQTEwRjExRTAxCi06MTBDMjUwMDA3RTk4M0U0MEY2RjhBQTQ2MTNGOTQxQ0QwOTNCREE5MUEzCi06MTBDMjYwMDAzRDMyMjNGODNFQTQ3QTNFMTdFMDYzQjEwMjdDNTYwQ0JGCi06MTBDMjcwMDBCQzlCRDY5NTk0MTRCQjE3RTdBNUZBOTFGMTIwQUY1MDVCCi06MTBDMjgwMDBERTY1MjVDQzlCOEFFQjRCN0FDM0VENEE4NjdBQzYwQ0Q5Ci06MTBDMjkwMDA1RDM2NjAxNkUwRUFCOUEyNzhBQzFFQzYyMTNDNThEOERCCi06MTBDMkEwMDAzODRDRkJBQkJGMjJEMTQwRjFEOEQwRjIyNzBCNzg1Q0UxCi06MTBDMkIwMDAzMjBCMDUyMUFFRUI1RTEzRERDRjVENzVFMEJFRjdBQTU0Ci06MTBDMkMwMDA1MDdFMUUzMDM5Qzk2NzY3ODExNEJDRkZERTFENzc2NjVBCi06MTBDMkQwMDA3Q0ZGRERBRTlDQkZCNURCMEQ3NDNGQTYzQkJFQ0NGODRBCi06MTBDMkUwMDBCRUJDMUFFNzg4MUFFNUQ5OEM3OEYyMzFDNzIxRjRDN0E5Ci06MTBDMkYwMDBGRUFCNzE4RjFCNDZDQTRGNjA3RkFDNkRDMDE1QzU2MzI2Ci06MTBDMzAwMDBDMkM2RUE2ODlGMjcyOTg1Nzk4MkY3MDU1NjI5RUI1RjFGCi06MTBDMzEwMDBENTBEODc3QTNCRUFGNTc1Mjg5NDA3RjYwRjg3OEQzNzk4Ci06MTBDMzIwMDBFN0JCMjYyMkRENDZFQzg4NDdGRERBNDdCQzQzMTMxN0ZFCi06MTBDMzMwMDBDMTdCMjg3OUIxMDQ2MkZBOTNBQTc5OUMyNDY2RUEzQzBECi06MTBDMzQwMDA4QTc3NDg1M0Y5M0VEOTBBMTY2MEZDRENBMEMwODQ3Qzg5Ci06MTBDMzUwMDBCQUVBNEJGRDBENzA4N0U4RDdDQzdBOTI5MzkxQUU5MEY0Ci06MTBDMzYwMDBCODQ4MkY3RjQ1RTY3NjY1ODhEQ0RCQTJGMEY5RjEwMjVDCi06MTBDMzcwMDAyNUVFOTFDRkYyQkZFNzkzMjVCQjI4NTJEOUY3ODkxODU0Ci06MTBDMzgwMDA5NTQyNzJFODExNTcwQUQ5NDNDNDFDNDFGMEJFOUM5REU2Ci06MTBDMzkwMDA3MzUwQjE4NzdFQTc5QzhGRjcyQkU3ODMwRjJCRTc4MzIyCi06MTBDM0EwMDA1RkM1NzcwQkMwOTAzRjg2RUYxNjQwN0FCQ0M5NDlFNTYwCi06MTBDM0IwMDA2RjM0MTUyOENBOTlFMzZGNDVFRTkyNDhCMjFGOTRGOTdECi06MTBDM0MwMDBFOTk0RjlBREIwNEU3MzI1MDM3RTU2NkREM0QzNzk1OEY5Ci06MTBDM0QwMDA2M0MyODRFOTY4Q0YzMkFGREM5RTExREI3M0VGODc3NUVGCi06MTBDM0UwMDBDMkJGRkM5RTczQTc1RDA5MUUzQTRGM0FDN0NBRjczRjBBCi06MTBDM0YwMDA1NTdDMkQ1NEVBQUYxMkI2MTk5MDVGQzc3NjZBRTEzNkM0Ci06MTBDNDAwMDBGRTUyQTRDNkFFMkM2MkRBRjM5NzEzNEQ0MzM0RjU0QkJCCi06MTBDNDEwMDBBQ0RBRjM5NzkzRUNENzZBQkU0Rjc2NjhDRjVGNUU5NzNFCi06MTBDNDIwMDAzMTNFNjQxRjU2NEI1NzBCMTM4MDZFODA0RUFBMzM3REVFCi06MTBDNDMwMDAzNEZGODVENjUyOEE3QkNEMERCOUM3NzQ0N0FCMzYzRkUyCi06MTBDNDQwMDBERkE3Q0QyRkRDQURDREFCRTdDOUMzNDYyOUY0MzA5MkQxCi06MTBDNDUwMDA4REZDMzFGMTRFRTRGNzBDODVFRjA3MDFCRjZGQjMzQTY1Ci06MTBDNDYwMDA5OTExREFDRjE2NzhCRkY4MUVDNjAwMUJFRDRCQzk3NkJFCi06MTBDNDcwMDA4QzIzQUNFM0Y3OUZCMDVDQzdDQkJEQzM5NUY2N0FCRTA3Ci06MTBDNDgwMDA2RkM1OEVEQkU4QkUxRDRCQ0NFMUVEMDZGMEVGN0VGQzA4Ci06MTBDNDkwMDA4RUE0RjE3MjBFQUY4N0ZFMTJENjFCQTJGNDUzQzNFNTMxCi06MTBDNEEwMDA5MzlDNDVGRTgyOUJFQzMzMjM2QkIzNjI2QTAxRkVDMjEwCi06MTBDNEIwMDAzNDlBMzlFOTlFNzUwQ0FCMjdCRjc1OTA3MjdGMzI1MTYzCi06MTBDNEMwMDBFOEE0QkM0M0IwODY2MTNFNDU3MEE2RjBGODg1OEZFNEQxCi06MTBDNEQwMDBDMzUwNDlGRTc1MkFGMTg5NUI3NDQ3RjRFNjk3MERCOTlDCi06MTBDNEUwMDBCQTA3RjBBQUY4ODYwMjkxRTRFMjIzNTY0NkVGRjlEODlCCi06MTBDNEYwMDA1Q0Y3MTNCRjZFQzMxNkIwNkUzMzZCOEY0OTE1N0FGOEI1Ci06MTBDNTAwMDBFN0VEQkM2MUM0NUYxMzVDMEVEQTJGQjUxNTI0MEI3ODIwCi06MTBDNTEwMDAyRUE1ODg4NTlDQ0IzNjQ1NjlFOEEzQzQxQTE3NDI1RkNGCi06MTBDNTIwMDA0MzQyRTg0QjRCN0Y3RjlERUNENTQ1Mzk5MENFNDJFOEE2Ci06MTBDNTMwMDBGMDJGQkVFNTUxMkMxOEFGNEM4RkZBMDU4RkQ1ODk3NkI4Ci06MTBDNTQwMDA0QTA1OUVDQTAyOTY0Rjc1NDY5QjMxRUU2NzhCRDE3M0EyCi06MTBDNTUwMDA3OUE1RDgzRkE1NEE5RkFCRTQ1OUVCQjJFMUZCNkI1NkY2Ci06MTBDNTYwMDBEMTQ5RTZGNkJBMkQzREYxMjUxOERGOTYwMEY2MzVFQUY5Ci06MTBDNTcwMDA2Mzk5OTE1QzdEQjBEMzFGNzYzNUQ0N0YwNEZDRkY2NTUxCi06MTBDNTgwMDAwQ0ZEMUJFQjY0QkNFRjY1QjVFNDEwNUYzRjYyNDk3OUJECi06MTBDNTkwMDAwMEYzNUVEMEU4NTg3RjQzMzFGN0FGRTVFODZDODJFRkY3Ci06MTBDNUEwMDA1MUExQkUwNUVGQTUzREMyRjI0Q0E5QzFGNTJEQkNGRUJGCi06MTBDNUIwMDA3QTU5NjQ1MTkwOUYxODMxODJFQUJGOUQ2NzY2RjhDRTIwCi06MTBDNUMwMDA4MTc3QTBEOTg3NzFFQzYzRjJBQzc3REQ0MUVCN0Y3QjlCCi06MTBDNUQwMDAxNEQ3MDdBRjE5MUNGMUE4MEYxRTk5N0M3N0E2ODdEMjM0Ci06MTBDNUUwMDA3NDhENUY2ODRCMTBFNEJFQ0UxNzg1OEYzNjcyQkQ5Mjk2Ci06MTBDNUYwMDA1QkUyQzc3ODdDNzRDMjM0NTc5OTAzRkQxREI3MEJFOTIxCi06MTBDNjAwMDA0MkU3MTJGMUU4NUIzN0ZENDQyQjdFQThFNDA2QzEwRjM4Ci06MTBDNjEwMDA0QjlCNzQ1RDBFNDNGRkUzMTEwQjc3MzUxRTI5OUVENUFFCi06MTBDNjIwMDA1Mjg2RjkwMjkxRUUwM0Q5NUNFMkVCRDlCOEFFMDI3RUY0Ci06MTBDNjMwMDBGRUYwNEFFNTcxQTgxRTE4MzI5QURCQkY5Mzg2NDQzQzhGCi06MTBDNjQwMDAzMDE0RkFERjUwMjQ1QUIxRkYwRDdBMkJEREU3RjE0RTlBCi06MTBDNjUwMDA2NkU0NTcxN0JCRUE5N0UwQkM2RDA5MTEwQ0NGNkZEQTlGCi06MTBDNjYwMDAwQTFBNzhCRUQ4QzBDQzAwNEY5MzZCQkQxN0YxNjk0QTQ3Ci06MTBDNjcwMDBGNThDQzBGNjQ3MDc3RTdBMUNFRDE5NUI4MjQ4M0E3MDRDCi06MTBDNjgwMDBBMkNCRjlBRTFCRUIxNzI4RjE5REUyNzlFQjcwM0M5QjM2Ci06MTBDNjkwMDA0NUI0OUE1OTBGMUM1NEI5QkU5RUM5Q0JDOUZGQjIwQTAyCi06MTBDNkEwMDBGNERFQ0MwQTZCNDMwRENFRTc5MTg0NzBCMkYzNkRBRTJECi06MTBDNkIwMDAwNjBCRTI3OUMzNDAzREQxNDE0OTIyN0Y1NzZBNTVDMkZBCi06MTBDNkMwMDBCNDBBQ0NGRjYyQTA5MTcxQkVGMzJGMUY4QUZFODE1MzgyCi06MTBDNkQwMDBBMDc1MzU1QjFBNjg1RUM3MkU4OTM5QzFFRjk2QThBOTg3Ci06MTBDNkUwMDBEOUExODVDRkVGNDZGMUY4OTAwOUUzRjE4MDlGQjdGNTI2Ci06MTBDNkYwMDBDQzlDOUE4QkY0QTNBNzc4NTM3RjdDNkI3MzVEQ0U3RTIyCi06MTBDNzAwMDBGQjYxRkUyQTk0MDMwQjExQkU4NTk3QzI5ODRGNDBGQTM1Ci06MTBDNzEwMDAzRDI5NjFGRTc3N0YwMTVCODBENkQ5NjBDMUZFNDE2RTA1Ci06MTBDNzIwMDBCQkZBQTJCRjg4RDE5QzdFOUIwQjBFNEJGODRFODJEN0UyCi06MTBDNzMwMDAyMTEwMUYzNDVCNEU0RTQ0M0U3ODI4QjU4Q0U4RThBMUFBCi06MTBDNzQwMDA4MjhGOUE4OTJGODZGM0ZDREI3OUY3RUU0MTNDN0ExM0NFCi06MTBDNzUwMDBDMzY5N0ZFN0ExODI1OTMxQzFGNEJFNjA5NDQ4RjQzMkM1Ci06MTBDNzYwMDBFRTZGNjE0RTNGRTI2Mzk0ODFGOEZCOTEwOEM3NTY4Q0VGCi06MTBDNzcwMDA0Rjc5RjNDQzY0QkY0QjgyNzVEOTZDOThFN0M0NjIyOEJCCi06MTBDNzgwMDA4N0ZFQTI1RDYyM0VGMTdFNzUwNThGMEIyQjMwN0VENTU0Ci06MTBDNzkwMDA2NTNCODRGODkwNEE2NjMxN0VBRTQ5MzlGNzE0OTFFRkQzCi06MTBDN0EwMDA1QzQzMzVCNEZBNkY5NTI1OTdERUNGRDg5MkQwNzA0MkFFCi06MTBDN0IwMDBEOUI2MjBCQjZBOTAyMjU3MDY5NDg4NDUyOERGMDY1OUNGCi06MTBDN0MwMDBCODVENjVFQjk0MDU5NEJCQTFGQjQ3QUFCRUQ3MjlFREU0Ci06MTBDN0QwMDA4QzMyNUJBNkEzNTQxQjM3RDIxNTcwN0QxQjZBN0ZFOTkwCi06MTBDN0UwMDAyQ0RDNUVDMzNGQkM4RkFFQ0YzNTNGODlFNzM4NzQzMTU4Ci06MTBDN0YwMDBEQTdBN0YxOUE1OUM3MzBBQjFBRjU0M0FERjYwRTU3QTAzCi06MTBDODAwMDA2MjQzQUVEMTg3NzRCREExOThEQjU5MkExRkFCRjI0N0IyCi06MTBDODEwMDA4NUJGMkE4N0Q0N0I3RUVGMjhGNjk1NTE0RTVFMzY4N0ZBCi06MTBDODIwMDBFNEVBOTlFNTc4NkYwN0Q0OUU3MzE3QzM3Qjg5NTZGQUJCCi06MTBDODMwMDBGRUFFNzIxRkYxOTQ2MjZGQkRBN0Q4NUJGRkExRDg1QkZCCi06MTBDODQwMDBFRkEzQkQwNUY5ODY1MTgzMDhCRjM3MTQyRTc2REQwOEE2Ci06MTBDODUwMDBGMzFBOTAyMDExREYxNDNBNEU0Q0M0RURBRjcxMTkyNzMyCi06MTBDODYwMDAyQzdERDk2MTExRDFBMjBFRTMwNThGMzRGMjdCNDkzNkJDCi06MTBDODcwMDA5N0VEOTgxNUYxNTlDRjk1RjkyQzZCNzY2OTM0QkJCQ0JGCi06MTBDODgwMDA3Q0YyRTM3QUQyRDEzRUU0RUI3QjU1Qjk0Rjc5NEM5OUY3Ci06MTBDODkwMDBGRjcxNjVGRTZGMjhGMzU3RUQ4RjQ5NDNCRTMyQTFCQzhGCi06MTBDOEEwMDBERjEwQUZFRjQ3N0UyOUZDMjlBN0QwQjlBODUwNzlCNTkyCi06MTBDOEIwMDAwMUM0MDhFOUVCMjI5MUZDOUYyMDc4RTc2QUU0QkQyNURBCi06MTBDOEMwMDAyMEY3RjU0RTU5Qzk2ODFFQkZEQjYwNzY1NzJDNDY3Q0IxCi06MTBDOEQwMDA0RTY2MTRBNzlERThBQTI3Qjk2NTAzQjk0NTcyQjNGODU3Ci06MTBDOEUwMDA1Q0VCNkNDQTQ3Mzg4M0U1OUU1MTgxNjNCMUNCNUE4RUFECi06MTBDOEYwMDA3MkJFMzg0NjRGMUY1NzI0QTREMEJENUJENUZFMEUxRDE3Ci06MTBDOTAwMDBGNzcyRjAwQzk1NjdBNjgyRjU1RUUyRjNGRjQ3NzI2QzUyCi06MTBDOTEwMDAyQ0UzRTM4RUJEMjQzQUZENUNERTFDNEYyNjc5MjM5MTg3Ci06MTBDOTIwMDA3QzBBRUQ1Rjk1Mzc2RjYzQ0M2NDIwQkU0RjY0QTFGQjNBCi06MTBDOTMwMDAwMDc3MEE2MTRFODRFNzlEMjg3QzMwM0Y5N0QxN0RGRkM4Ci06MTBDOTQwMDBDMThBM0Q2NzU3REVEMTAxNEVBMUI4Q0VEODRFQjBGNUIxCi06MTBDOTUwMDA4M0Y4N0FGQzI1NTNGNzFCNkNEQzhFOEZENkU0Mjc5QTdDCi06MTBDOTYwMDBFMjM1RjU0QkFDQzk5QUVGOTNFQ0MzMzVERjI3M0JCMjA4Ci06MTBDOTcwMDAzNUY5RUIzMjQ2NjlFQUZGQzI1OUE0QzlERjUwMzA1OTk0Ci06MTBDOTgwMDA1M0JGNEMyRUQzRTQ2NTY2QTU3NzQ4MEUzNkVEMUVGQUVDCi06MTBDOTkwMDBCMTFFRkRBN0I2QTExRkE3RjU4NjRGQTFGMUYwMEIwRUEyCi06MTBDOUEwMDA2MEUxQjVBMzhCNjdFODAwNDY4NTUxODdFRjRDODZGQ0I0Ci06MTBDOUIwMDBDNkQxOTM2N0U4ODBFRjBBMDcxRkZFM0ExOTU4NjhEMzdCCi06MTBDOUMwMDBFODI5M0M3RkY1RTFBRjUzMjBCRjY1RjQ3NTNDM0Y4NjE1Ci06MTBDOUQwMDA5MUYwREMzQTdBRUEwQzJGRTA1OTFDRUE3OTc0MzREMEYxCi06MTBDOUUwMDBGMTJEOTdFQThGQTIzREY4Qzc2NUQzRTYyNjRCRjg0RUE2Ci06MTBDOUYwMDA0MDU5NjIwNkNDRTc2QzhBRTc2MUZDN0U3M0VDQUMxNUFCCi06MTBDQTAwMDA3ODExNzZGQzc3RjU3NDhGRUQzN0EzNzlCQjhFOEJGQ0FDCi06MTBDQTEwMDA1RDhEOEU4QkZDMUQwREJCQzhGMUY2NTM1M0Y1QkVDQjVGCi06MTBDQTIwMDAwNDBFOUE3RURGNUYxMTY0N0VBRjA1RkRDRDM5NjlEQ0FGCi06MTBDQTMwMDBERkM0MTRGRDRENENEMURGQzQxNEZEQ0QzOTdBRUU2RjQ3Ci06MTBDQTQwMDA2MjhBRkUyNjk2QTNCRjg5RTk1QjREMzJBNUVGMzRCOTExCi06MTBDQTUwMDAyODZENkY3MjUzREE3REJGRTAyOUU3NkEzRDBBMzhFRjJGCi06MTBDQTYwMDA0RjhCNUI5OEMzRTQxNzExNEVBMUU3NEEzQUY0OUQ0RkYwCi06MTBDQTcwMDBEMDdFQ0E0NUU2QzBGQjEyODcyMjRFMzk3MEJGQUMzOTYyCi06MTBDQTgwMDBDRjQ0NzQyRTc0QjYzQjRDRjBCRDMwOTdFNzlCMkZCNjY1Ci06MTBDQTkwMDAzQjUwN0U2MTFFRUQ5RThFRThCNjZDOTRCRkNEQjUxNjAwCi06MTBDQUEwMDAyN0VFQkIzNTVGRjRDNzIzOUYxNEQ2MUJFOERFNEM3MTFECi06MTBDQUIwMDA2NzI3QzVFOTBBMkRGQ0JEODQ0MzExQzc4RTI4RTM5MTgxCi06MTBDQUMwMDA1Q0RBNzk5MUY5NDU3QzI3QzdEQ0VFQjAyQUUzNjAzRjU4Ci06MTBDQUQwMDAzMDZFMzJFQUI3QzIyNTMwMkVGNTVCQkY5OEZBQTlCMEE2Ci06MTBDQUUwMDA3NDhGMkI4NDhDNkJGQUUxNzEyNzBBNDFFM0E2NzYzMUFGCi06MTBDQUYwMDA3QTE3MDFDNzc1NjhDNkY1NEI3NDNGRkNBMjVGQzI3ODEwCi06MTBDQjAwMDA2MTQ3QjREMzhFNzE0RDM1NUY4Q0RGMjFCRjQ1Q0ZERkQ4Ci06MTBDQjEwMDA1RjJDNzRGODI1RDQ5M0I4QkQ4OUVGNUJDNjgxRDgzM0Y4Ci06MTBDQjIwMDBEMzc5MEQxRkM5NjVBODQ3NzFCOTlENUQ3QzlEMTc5QTgyCi06MTBDQjMwMDBGQzBCOTA5RjhBOTU3NzYwQzA4Q0E1N0I5QjRDMEM3M0Y3Ci06MTBDQjQwMDBBMkJFMjg5MUJFM0IzNjM4MTdERjM5RTNFRkEwMTUxQjk0Ci06MTBDQjUwMDBERERCOTAxRkVCNzQ1Q0RFQjAxODMzREY1N0QwQjVDRjUwCi06MTBDQjYwMDBGRjE1RDQzQjE5M0I5OEVDOTUwNEZCNEIyQzc1MDRCNDkyCi06MTBDQjcwMDA1RkU0Q0E0NEJCRTMyNDVCNEY3MjY4NzU5NEU3N0Y4RjIwCi06MTBDQjgwMDAwNjdBQkUzMUIzNUU1MEY0MjdGNTYzNzc4NUVGQzBGREJBCi06MTBDQjkwMDA4ODhFNTc4NkU1MjExRjREMzMzQTVFNjRDMEJGN0YxRkU0Ci06MTBDQkEwMDBERDQ0RkMzQzJEQ0E5MTg3MkZBQ0ZEN0RGNDBBOUU4RjlECi06MTBDQkIwMDA3M0JDODgzNzgzQURBQzY5NDY3MUZDOEYzRjJGNDVGMTVDCi06MTBDQkMwMDAwRDc0OUFBNzBBM0FCNDdGRDQ3MzUzNzZEMTEzMzYwNkZDCi06MTBDQkQwMDBFMDU0RUJGQUNBQzBFN0Q3NjlDMDc4NzBENDE4MDdDMTJGCi06MTBDQkUwMDA2RkUwNjE0NkU3OTgzQTI3NDdGODc2RTA3RURGODBGQTAzCi06MTBDQkYwMDA2QzhDODdCMjRDNDcxRUQ2NEJEMjc3RDI3REYyOEVFRjJCCi06MTBDQzAwMDBGOEZEMjdBODE5Nzk1MzUwRkNGRTg5ODM5MkFCQUZGODQxCi06MTBDQzEwMDBFM0M5MzFEQzRFNUQ5NDZBNTk4Nzc4QThCMzlCNEM5NDg0Ci06MTBDQzIwMDAxRUJDNDhFNzgyOTlDRTlEOEFGMTZCRDlEMEY3N0JBOUNCCi06MTBDQzMwMDBBRjhFRTFGQTIxNzlBNTQxMzEwMjQxNzRDMjk0RTUzMDA5Ci06MTBDQzQwMDBBNkU2QkQwQ0Y0RDBGNkJCQzNCQURGOEIwMzcwMzI0MzRCCi06MTBDQzUwMDA5QUM4RjNERTFEOEYxN0VCMzRGNTY1QUNERkZEMURFM0RECi06MTBDQzYwMDBGNEFDQTdCREZDREJDRDhGMkY0RjU1QzY0MzdBOTlDN0Q3Ci06MTBDQzcwMDBDODdGMENENTNCNkIwQjZERUEzQjNGODRFN0M3NjNDQ0E5Ci06MTBDQzgwMDBEQkU5M0Q1MjQ5Nzk4NzE0RUE1QTMxNEUxMUNFRTgzRDJECi06MTBDQzkwMDBBRUMxQkYzN0ZCOUE4MTlFNzY5QTM5M0RBNzhBM0NEREFCCi06MTBDQ0EwMDAyOUYyRkFFQTNCQTVFQUJCNkJDRjE0N0E2RTJCQ0NBMzMwCi06MTBDQ0IwMDA3RUZDRDQ4RkI0MzcxQkRGQ0I4ODY3NkQzNEJFRkE2RTMxCi06MTBDQ0MwMDA5NDVBMkYwMUY0MjAwOTJCNUQ2NzNBRTJBQjUwMTJGQjE2Ci06MTBDQ0QwMDA4NEU3RTc2MzhBRTYyMDFENUM2OEYyQjI0RjgyRjRDREY4Ci06MTBDQ0UwMDA4NUYwQzhDNjYwRkNENTQ5REFGNzVBM0YxRjMzODFEQUIwCi06MTBDQ0YwMDBBOUVENkIxQjI3QjI0RjI4NzhFOTI3M0FBQTREMTU2OTkxCi06MTBDRDAwMDAxRkJENEU2MkFGRTIzQjlDMjA1OTBEQTg5N0Q1NzZBNzc4Ci06MTBDRDEwMDA0MERFRTI3OEVGODJGQ0M1RjQzRDkwQkI5RkU4RDEzRTU3Ci06MTBDRDIwMDA5RDRFRTlGQjREMUUyQTNGREQ1NDRENjlBMEE5OUVDQUM4Ci06MTBDRDMwMDAzRjZBNkFBNEY0OTZEQjIzNzI5MTdGMTZFRDVGQzYzRUNDCi06MTBDRDQwMDAwOUEyRjdEQTM2QkQyNzEwOTQzRjU1RDQzNzFEQUQ1MUVGCi06MTBDRDUwMDBFOEU4NTQ3MkRGREY5RjFDQzNFREJCNTNFMzM4M0UzQjcyCi06MTBDRDYwMDBDMERFQzBGN0RBODAyRTk3NUI2REZEREIxRDFEQ0FGREFFCi06MTBDRDcwMDBBRUEzRTNGOUZFNjU0NzNDQ0YyRjFGQzNGRDZFNTk2NDk4Ci06MTBDRDgwMDBBREQ4RkVFODc4MDNFRjNGNDVBQ0M2RUZCMjhERjc3QjM4Ci06MTBDRDkwMDAyQTVEQTQ3N0E0N0UzNUIxRThGRTMxNTgzRjE2Q0E3M0U4Ci06MTBDREEwMDA3QUYyQTdBRUUyREZFNTQxQkM1QzlEQUZGQUZEQjY0Mjg4Ci06MTBDREIwMDBBQkZBRUU2MTNBN0ZDRjhGREZGNzAyN0FBN0ZFRDVGQUEyCi06MTBDREMwMDA2MzI2NzAzRTBDQURFRjRCRTVFN0M5NDNFMUYxQTlDMjI0Ci06MTBDREQwMDBCN0M0MTc2ODY3MjMxRjI0MDdGMTQ1OUQ4M0Y4NDJBNTUwCi06MTBDREUwMDA0Mzk1RkVENjE2NzIzOEE3MUExNTNBMEZFN0U3RUUwN0Y1Ci06MTBDREYwMDBBMzJFODQ3NjgzRTNDQ0I0OEYyMEUzQkJDQkIwOUU5RDdGCi06MTBDRTAwMDA4MkMyMkZBMUZDQTBCQzYzQUNGMjgzQ0EwNzJBQkQwRjZCCi06MTBDRTEwMDAwNjNFRTNFRjM0RjM3NThDOTVGQTc5NUY1ODU5NDc3QkZBCi06MTBDRTIwMDA2Q0M0NUQ4NEQ3ODM3QTJCRUFBREIxMTI3RjJGNzlCMEMxCi06MTBDRTMwMDBEOEY1Q0VFREM4OUZCMTExMEU4QzkxOTZBQ0IyRDRGNzU3Ci06MTBDRTQwMDAyNUM3M0VGRUFGQzI0Mzk1MEJGREMwQTMxNzFDMENDQUZECi06MTBDRTUwMDBCQkMzM0YxMjBFMjRFNzUwOEUyM0ZERjYyMUI3NEU4QzQ0Ci06MTBDRTYwMDBCMTI5NzYxN0E3REZDRkM3Qzg2RjIyMUQ3NTA4NjYxREM5Ci06MTBDRTcwMDBERTdCRTgzMEY3N0Q1RkYwRTg3OEJFMEU5NThFRDYxNjQzCi06MTBDRTgwMDAzMjRBMDdFMzNBODdGNjk2N0JFQTdBQkFENzc5MDcyM0RDCi06MTBDRTkwMDBGOTk3MUFDNkNCNDNGMUFDQUUyQjQ4RkU5REMxNzlBOUQ4Ci06MTBDRUEwMDBGMDY0MENFQzFGRTgyN0ExQzY0MkVGRThERDU2RThFMDhECi06MTBDRUIwMDBGQzM2RjBEM0NBMERBQzY3RkQzNThBM0U3QjRDOTRGODQ2Ci06MTBDRUMwMDA3QkM4OEE3RUU5MkUxN0E0OTk2NTk5MUFCRDQzNDdDRjdFCi06MTBDRUQwMDAzQTVGRTFFRjhBRkI0NTU2OERFRjcyQTM2RjFEMUMxNzc5Ci06MTBDRUUwMDAxRjUyQzhFNTQzRDdGNDNDMTFGNzEzMkZGQ0Q1NDJGNzg2Ci06MTBDRUYwMDA4QjJGMENFQTNDOERGNkNFODU1NjNENTNERTIzOUIyQUM0Ci06MTBDRjAwMDA4MERFOUQ4QjNFMTMwQ0Y5QTVGMjlFRjNFN0U4RjcwRTQ5Ci06MTBDRjEwMDA4MzdBNkQxNzRGQTNCREI1NjhBQkM0NEM3ODlFNjBFQkE4Ci06MTBDRjIwMDAzN0I3MjAzRENEN0I0NTRGRTc5OTlBNUIzNzFFNDc3QTRGCi06MTBDRjMwMDAzQ0I3NEZDMEU3NkZEOTg1N0QwMkM1MzE2QjVCMjI3QzYyCi06MTBDRjQwMDA2NkE4NUYwQTc5QUM3RkM3NkVDOUM3RTM4QjMyQzUzOTYzCi06MTBDRjUwMDA2QTk0RjEzRTMxRDdBNUEwNUQzRTcxRUI1RDNBODRGQjRBCi06MTBDRjYwMDBCQ0VEMDI4QjgzN0U4RkI0REU3OTBDREYxRDM5Qjc4RDZCCi06MTBDRjcwMDBERjJGNkIzNjQ3RUVDMEY5OTc0QUVCMEM4M0EwN0NDMURDCi06MTBDRjgwMDA3NjVFNUU2MzI5RkQwQ0Y3NDMxNzNDQ0QyOEZFQjM2MDQ3Ci06MTBDRjkwMDA2RjA0Rjk4RkYzNUFGNDFGMDU4MkVDOEVFQTZEREFGQzA4Ci06MTBDRkEwMDA3Q0Q2NjY0MDNBNThCMDUzNUI1RUIzMDdGMjQxRjI3OUUzCi06MTBDRkIwMDA1MEExMTIyRjE5Q0VCMjI5NUVEMkMyRTMwN0FBN0NFRjhDCi06MTBDRkMwMDA2RDVGN0JCOTFDNkQ1MERFRkY2NjdGODlBNUY3MEY1RjMzCi06MTBDRkQwMDBGOTI2RTkyMzBCQ0Y5NzI5RjkzMzkwRkZFQTFCOEUxNzI3Ci06MTBDRkUwMDAxNTJFNzVDQUQ4NUZDNUIzREMzNjU4NjdERDJCNjYyQkE2Ci06MTBDRkYwMDBGQUVENzUwN0NFNDZFMjc5QjA0NTYxMDE3QTE3OTlCRDIxCi06MTBEMDAwMDAyQzU5RDFERTdCNjBCRkU0NDVGOEQ2MUUzNDNGODlGQjQ2Ci06MTBEMDEwMDA5ODc1MkY5RTMwNjAzQ0ExNzRERjYyQjI1NzI2MzFFRkM1Ci06MTBEMDIwMDA0QUY0OUJGREEyQzhEQTg5OEVEQUU5N0Q1RjI2NzdDRUM1Ci06MTBEMDMwMDBDMzdFMkUxQzMwNUJEMTBFQTg3QkY5NEZDNzZFQzdGQzk4Ci06MTBEMDQwMDA4QjAyRERBN0JDOTAxODIwM0E5OUI3NTVBMjdCNDMwQzAwCi06MTBEMDUwMDAyREI0RkMxRTNBOTExMEFGODhFN0I2Mjg3QThGRTUwRTAyCi06MTBEMDYwMDBDNDNCRTIxOUYwRUU0ODQ2M0FFMTcxRDA3OTRGNEJGNEY3Ci06MTBEMDcwMDBCREI5QjVEOTgwRjVDRkY5Mzg3RTU1QkM5NzRBNEIwOTczCi06MTBEMDgwMDBDRjBCMUVFN0Y4OUNCODc1RDdFNjMwQTQ4M0E3RjU2NEVDCi06MTBEMDkwMDA4RjFGODE3NjgzNzgzQjBEMUQxODVFRTFGRDVGRDhDNTNCCi06MTBEMEEwMDBDRjkxNzdEM0MxMDE2MzM3MURFMDNDMkY0NzA3QzBBNzVECi06MTBEMEIwMDBBNEY3MkY0NzA3OURFODk3OTJCRkZGRERCOUM3RDAwRUIxCi06MTBEMEMwMDA4RkUwRTc4N0Q1NzcxQkQ1NzcxQTA3MkUzQzc1MTRERkRECi06MTBEMEQwMDBFNzRBQjNCRjQwNzY3N0E1RUQ4QkRBQzU4Q0RFMDk5REI0Ci06MTBEMEUwMDA1Mzg4RTc0QjI2QkZCRDAyRDE3NzcyQ0FCM0Q5MTQyRjNDCi06MTBEMEYwMDBENTA3NzY2REMxNzg0Mzc0MzhDNUM3M0E5MkNCQjZFMThGCi06MTBEMTAwMDBGQjk4QzVCNjZGOTNGNkMyM0ExNkZEQ0U0OEU3MTFFQjExCi06MTBEMTEwMDAxNTdFQzYzRjNDMDdBMkJFNEIwQzc4QTdGMzE5QjUwNzk2Ci06MTBEMTIwMDA4REZDNUNDNjNFRURGQkUxMURGMTlDQ0U0QjBDOUQ5NTRDCi06MTBEMTMwMDA4QkQxNEY4MEZFNzAxQzQxRTZGRUU5QzI4M0ZDMUQ0NTg5Ci06MTBEMTQwMDBENTlGNUNBOEJFQTdCODQ3RkI2RTgzNjA3RDlCRUEzRDc4Ci06MTBEMTUwMDA1MDk4NDI3MDE4MUEzN0Q2ODE3Njc5NzMzOUYzODQwRDU2Ci06MTBEMTYwMDBGRDIxN0RDMURGQTk3QzVDRjE4QkZBQjUyN0ZCRDExQkNBCi06MTBEMTcwMDBBQTFEQzlCQzIxRjdEQTE1Qjk3NTQ3MDE5RkUzRDFCQkQ4Ci06MTBEMTgwMDBERkQwRTE3QjhDMUQzQkY5RUYzQkNDM0YwOEYyMkEwNjU4Ci06MTBEMTkwMDBGNzE5RjUxQUI5NTNBN0Q0RkYxNEU5MEZFMDc2REU1QjRGCi06MTBEMUEwMDBGRjkyMjgwNUNCOTdGNzhCQjE5RjlBQTc3OTNGNzU0OEQ3Ci06MTBEMUIwMDA1NzE0NTdGNTZGMEU4M0ZFQkU2Q0QzMzNFNDk3MDU0Q0JFCi06MTBEMUMwMDA5MTM3RkIyMzI4NkVENDRCQkVFQ0RDQkUxMkNERjc1MDVBCi06MTBEMUQwMDBCQTVBMDg3NjI2MkUyMjk0QkVFQUY2NjlFQjNENURBODdGCi06MTBEMUUwMDBFQzdCMEU2N0Q3RTBGOUZGQUYzMUUwOTBENzIzNUZCQTUxCi06MTBEMUYwMDBERkU5Njc4RTI4RTRFRjZFN0QyODY4RUZFRjBGNkIwNTlGCi06MTBEMjAwMDA5NjBGRUE3N0I4Q0ZDNDYzQTQ0QUZFRUFERDU2NERGRTE2Ci06MTBEMjEwMDA5QTM2QkJBNkZFQjVGQjFEOUFFRkQ5RkUwQ0NERjcxMUQxCi06MTBEMjIwMDBDNzlEOUE3QzVFN0I4MUE2RkVDOEY3NjQ0RDdFNTRDMDg0Ci06MTBEMjMwMDBBNUE5M0ZFNkJDNUI5M0VGQ0E4NEY1RjQ2MUNGQThFOUVBCi06MTBEMjQwMDAyNEJCQTBBOTNGRDk2MUQ2RjQ3RjVENDZCNDI2REY2NTMzCi06MTBEMjUwMDA1MUUwQTNEODk5QUFGREZCQTc0MjZFRkY4NkE2MkE3Q0JGCi06MTBEMjYwMDA3RkUxRDQ4RUEzRkFFRDM3MTQ2OEM3MkI5M0I1RTM1RDQ1Ci06MTBEMjcwMDAyOTVFRjAxRDQxOUQ5RUZGN0UwMkE2RjhGQjA5QkEzNDhGCi06MTBEMjgwMDBGRUZCMDk5OEM3REY0RkMwMTQ3RjNGMDFDQjdGRERFNDcxCi06MTBEMjkwMDBBNEZDQkVBNjAyQ0FCRjA0N0UwOUU2Rjc4MzlGODJFOTBBCi06MTBEMkEwMDBDQkUwOUY2MEY5RTVFMDc3NEMxOUY3QjgzMkVFMUJDQTg2Ci06MTBEMkIwMDBCODNGMTU0RTZGMjlGREJEQTNGNDg3RUYwREVBRjQzRDhECi06MTBEMkMwMDBERjZCNUQ3OUUyMjVFMEUzMjJEQjY3NzQ1RjU5NkUwODZFCi06MTBEMkQwMDA5NDYyMUNBM0YzNzU4OUUxRjk2N0U2RjExRDZGOEE0MTM5Ci06MTBEMkUwMDBGRDM2ODBBMTlEQzREQzlENkZFMjNFNkVERDhCNDNBREJCCi06MTBEMkYwMDA3OEFFRUY4MUZEN0Y3ODA3QkY1RkQ4Mjc1MUJDRTZGMDlECi06MTBEMzAwMDBGRUIzOTFEOENGOTc5N0MyRTkzMDBBRTk0NUM4RDc3Q0Q4Ci06MTBEMzEwMDAyQjUwN0UwRDdDQzc3MzY3OTNGNzRBQ0FCQjY3NkRBNDE5Ci06MTBEMzIwMDBFRkJFNEM1NUYzM0VCQTJGRURERUIzRDc4MDc4NUFCODM2Ci06MTBEMzMwMDA3QjJGN0Q3RjFERjg1QUYzN0RGNzc2Q0Q3NzJCRDY4NzJGCi06MTBEMzQwMDA3NEExQ0U0NzcxODVDRkY3QUJGREY5QTk3RTREMkE3RjM5Ci06MTBEMzUwMDAzRkZFRjNERDQ3NTY4RTQxN0RCQ0I3NkEwMEM2QjUxNzY4Ci06MTBEMzYwMDBFRTM5MTEzQkZCMDdGMEYxRDU0QkNGNjZBMjFFQTgzRDZECi06MTBEMzcwMDAyMDI5RTdEMTc4N0ZCNTA3RjQ0QTlFQ0ZCRjI2NzU2Rjg1Ci06MTBEMzgwMDAyOTlFMzc2MzdCMDRCQUIzRjQyNTVCNEZFN0M0MTZFRURFCi06MTBEMzkwMDBERjU1ODM3Mjc2NjFDNkVEN0E4QTdGQjU0OTRBQkM4M0QwCi06MTBEM0EwMDBCRkQzNTA2MzY1RENBRTZCRkIzQTEyREZBOUZGN0REQkI4Ci06MTBEM0IwMDBEMUVCRjExRTc0QzdDMTIzRjQ1RTRDQzczRTQ5RTM0RjY1Ci06MTBEM0MwMDA4RDFEQ0JGMTNCNzYyQ0Y3RkZCRURDNzcyNDEyQ0YwOTA1Ci06MTBEM0QwMDAzRUQwNzY4NEMzNURFN0E3RjUxRjU2RjIxRDkwMTJCQ0MwCi06MTBEM0UwMDBGNzRCQjRGRUY5OTcyNENERUYwMUI4QzA3MUExRkJDRDg2Ci06MTBEM0YwMDBGQkQzMjI3MDVEMjdEQkY4NzhEMzQwN0Q1MDc5NkFENTY2Ci06MTBENDAwMDAxQzlDRkYxQkY2RjIzQ0U1N0QzMkZBRERBMThFQUJBRTMzCi06MTBENDEwMDBEQjg1NzI3NjYxOUJENEU3NzlGNzM5RDgyRkNDRUY5ODBBCi06MTBENDIwMDA5RUQzRTlFQkE5MkYxQzFCMDQ3MDdGQzMzNTIwOUI3NDhFCi06MTBENDMwMDA4NDUyQUY2MjJDRDc5QkE1MDY0RjJBRUE5MTkzMTY0N0Q4Ci06MTBENDQwMDAwNEQyRjlGREFFQTExMTg4REZDMzk4NjJCOUVCNDlCQUU1Ci06MTBENDUwMDAwN0JFNjAxRjFGRUZBNEI1M0QxMkU5RUVFNEJFMTE1MkY2Ci06MTBENDYwMDBGMEZFQ0IyRENBN0FCQUU5QkIxQjZGNUVDMjUzQjU2RjEzCi06MTBENDcwMDBCQjA1RkJFOUMxMUYyRjlGMzZENjRBRjVERkYwOURCOEVCCi06MTBENDgwMDAwNUVEQUM5MzE5RkNEREMwNjMwNjQ2RkVGNUMyM0REQzNDCi06MTBENDkwMDA0RTNFNzk3MEYwRjZFMEZCNTlEMzE0N0M3NDY0RjA3RDU1Ci06MTBENEEwMDBGNTBCRkJGNTRBQkREQjc3MzE0RDNEM0RDN0Q3NEVFRDYyCi06MTBENEIwMDA3Q0FDQkUzMzBGQTE3RDVFRjNCODQ0NjcxRDZBRjRGNTAyCi06MTBENEMwMDBCMUI4RkU0RkI3NjlFNzU3QURDMEI5NDZFRjhGOEQwREM0Ci06MTBENEQwMDBBMkQ3OUEwM0REN0M2MzIxM0EzRkEwRjI4OTgzRjBBOUE5Ci06MTBENEUwMDBFMkYxNjQ4NkM0RTc2NUU3RUZGOEQ1RUNERDQ1NzRERDZECi06MTBENEYwMDAzQkJFQzRFM0I3ODNFRjMxMzkyOUJFNzQxOTdGNUFCNUY3Ci06MTBENTAwMDAxQjgyRkMyREZBQkQyM0JENkI2ODlFOThEMjYzMUY5Q0M1Ci06MTBENTEwMDAyRTk0MUYxQTlCODc3RTk4OUJGQ0NDOTMwQ0VDNUIxODc3Ci06MTBENTIwMDBCMzE2RURFQjI4RkExRDg5Q0QzODZFRDczRTNEQkRGRjExCi06MTBENTMwMDA1RjZCM0FCMDAwREYyM0VGNzIwMkEzQzBCQ0JCQjZFOTU5Ci06MTBENTQwMDBCQkRGNjc0NjNCNzc5RTYyRTc3RUVBRjBFNDRCQTA3RjU1Ci06MTBENTUwMDA2Qjk3ODlCNEJFOUEzRDkyMEZDRjE3NUM1MEU0REU1N0FCCi06MTBENTYwMDA3QjkzNkY0MDdBQUQzOTJFNTlEMTNGOUFEODk2RkM3MDkzCi06MTBENTcwMDA2MTJFRTk3N0IyNTdFQkRBQjg5RDVDQjc1QjIwQkI1OEY4Ci06MTBENTgwMDBCNTQzNkExNTNCRTQ5QzYyMDc5RjVCRDZDOUVERTM1NzQwCi06MTBENTkwMDAwNEI2MTFFQUFEMEQwMzdCMDRFNjVEOUIzOTg1RUNEQTM4Ci06MTBENUEwMDA1QTY5RERDQUMxMEUzQzQ3QTVCNTFCRTYxRjNDNDRFN0RFCi06MTBENUIwMDBBRUMwQ0VEMTk0MkZEQ0FEQ0REN0I2NjlGM0FBQkZGOEZCCi06MTBENUMwMDBEMkQ4NkUzQjYzMzhGQTM3MjU1MjYxMUNGMkMzOUIwQUVFCi06MTBENUQwMDA1RTU1N0ZFN0NFNkI5Q0Y0RkIyNzBGRTgxQzUzRDRCODU1Ci06MTBENUUwMDAwNEMyNkJEMTJCMkZDQ0M3NzlGQjZBQzI5Q0U0N0YzNDc5Ci06MTBENUYwMDBGRTk2RTBEQUYxMTdFRUQ3NzRFMERFMUJGMjMzRTNGMENCCi06MTBENjAwMDBFREQ4Q0ZFOTdDOTE1RUYwRTFFRkJBMkM0MjVEODFGRDZGCi06MTBENjEwMDA5OTA0REYzMjhDM0I3QkJCMjI0OTNFMjlFNzA4MUFDQUJBCi06MTBENjIwMDBCOUZGMkE2MzBDMThBNkIyN0UyQ0Y3RTc0M0Y1RUEzODU3Ci06MTBENjMwMDA1RDQwOEEwRTkyMTM4MUIxMjk1NEFGRDhDMENGNTdERTE2Ci06MTBENjQwMDAxOUUxMjRGRDM2QzRDNEVERjUyMTI2NkVBRjBGRDE3NTY2Ci06MTBENjUwMDAyRUEzREY4NTE4MjRGMDdEOEVBQzk3NjlGRjYwNkQ5RDQ5Ci06MTBENjYwMDA4NUY2MTcwNDdCOTUwRUUxQjE3NjUwOTUwRUU5N0Q4ODFECi06MTBENjcwMDBCNTJEMDNGRDNBMzU1RjhDREYzMzdCRUM4MzUyOEI0NzRFCi06MTBENjgwMDA4N0UzRUM4QzE3OTQ3RDA0QUU0RkNCNzQ1NjdENzQ5MDc5Ci06MTBENjkwMDA3RTY1NkM5OTY2N0VFQTNEQ0M5RjdEN0U1Njk4OUZBNUZGCi06MTBENkEwMDA2NzdFODBFRjI4NkNGRjc1QUU5M0VDODZBNDMyRjVGN0E5Ci06MTBENkIwMDAxQUVBNDkyRUE4RjBGQzEyRThCRDE4NzA0NTc3NkM4MTczCi06MTBENkMwMDA2RTZBQjYxRDIyRkZCMjk2QjVBRkM0NzZBNTkxN0MxREQ5Ci06MTBENkQwMDBBNTA2RkVCRTUxNjkxODRGNzVFM0I4RkMyQTUxRDJBNUM0Ci06MTBENkUwMDBFM0I0RjZDMzkxNzFCMjdFMUNBNDNCQzZCOTRERTNGMjFDCi06MTBENkYwMDA2ODNGOTU3OTYxN0QwRDZGRjM3N0Q2NDNFNTNFOTQxM0NFCi06MTBENzAwMDAzRDdEMEQ3Qzg4RjI2RjQ2QkQ2MDRERDVEODY5OUNCRkNDCi06MTBENzEwMDAxNkYxQTI2RTNFNUFGOEY2OTNDNDI3RUEzOUNDNkFDNkNGCi06MTBENzIwMDBGOTdCNjZBM0Q5OUExQUM0MTc4QjkwREZEMERFNzdDMzMyCi06MTBENzMwMDBCRjdDOEMxM0YwQkY2QUVCN0MzQTk3RTk2OThDQjVBMjg5Ci06MTBENzQwMDA1RkI3NDhGQTkyRjYyNTdFMkNERjJEREFBRkNERkJDRDAwCi06MTBENzUwMDA5Q0ZFRkQxMTAyRjk0OTE5RTNCQUUzMERDNDhGNDkwQTkxCi06MTBENzYwMDA3RjZDRjcwODc0MEU2MEZCNzczQTFFQ0ZBQjEwMjg3RUYzCi06MTBENzcwMDA3NzMzMTQzNkRBOTQ0OTYyQkRFQTIyQkE0RjcyMzNFMzQyCi06MTBENzgwMDA0NzYzNTk0QjhDRjJCQjNEMzFCNDZGNzk5M0IyRUU5QjNBCi06MTBENzkwMDA3NUZFNDMyODU3OEVFQURCOTIzMTlFNzRCNEQ2RTRDNEZBCi06MTBEN0EwMDBGRUNCNTkxQkJENkY1QUMxREEyOTNEMTU1RUY3QTI5RjBBCi06MTBEN0IwMDAzQUY3MjYyMkRERkRDOTYzQTQ3OEQ2RjZFNTNCMjI1MDcwCi06MTBEN0MwMDBCRTY3QjFFNTU2REM0RjA0NTBFQ0M2QjcwMUZCQjM3MzNFCi06MTBEN0QwMDA0MkY3MURENUZCQzQ2MDJGQzcyMTdEMDJGRTI3MjExRDA2Ci06MTBEN0UwMDA5QzA3RENEODczN0FCNzVGRjhDNzE3MjMxMTdGNUYyQ0NCCi06MTBEN0YwMDA3OUUxOTY1QjE5RkE1RjlERTQ0NzJEQTg1RjQ2Rjc1REQ2Ci06MTBEODAwMDA4MTlDREEzM0YyN0JGMEFBRTI1REM1NUIzNzVFMURGMEU2Ci06MTBEODEwMDAyRjE4QUZCMEE2MDQ4NDkzRjQ2NTE5QzlBNTdGOTFFOEM5Ci06MTBEODIwMDA5Q0Q2RTVGMEFBQzI3REJDODI5RjNCMEU3MEY5MTU4QTlBCi06MTBEODMwMDA2RjE1MEZCN0UyQkJGNTQzNDlFRjZFMjMzQzMxMjNDOUE3Ci06MTBEODQwMDBDQjUwN0FCODFDQkU4MDMwRTkzQ0Q5QzQxODIzRjlBMTZBCi06MTBEODUwMDA4MzQ1MkU0RjA3Q0YxMzI4NUU3OTNCRjNCQzEyODBGNDJCCi06MTBEODYwMDA5NkYwRjdGNUZDREUwQUM3NUI4NTgyQjczRjMxREYyRjA0Ci06MTBEODcwMDAzMjkyRkY3MTc4M0IzMkNFREQzNDZFNjA2RkJFMERFNUMzCi06MTBEODgwMDBEM0ZFRjhCMkM2RTFGQzM3NTU1RkZBMThGMjYzMDgzRkUxCi06MTBEODkwMDA4N0YwNkIzNzFFOURGMDJGMDg4RjlFQzY0OEUyQ0I2RTM3Ci06MTBEOEEwMDA3QzRCN0JBRTRDMkZFMjdGMzA4RUI1NUZGMEY5OTNBRkFGCi06MTBEOEIwMDA4MDVGMDU0NkJGQkZGOEY4MzhBRERFNTRGMUE2QzJBNUJCCi06MTBEOEMwMDBCRkI4RTAwN0NDN0ZENDJBRDBCRTBBRTdFM0JCOEQ3NDkzCi06MTBEOEQwMDBGRjQzREQ1NzUxRjc0RjVFMTlDN0Y1NUM2OEZBMDFEODcxCi06MTBEOEUwMDA0QkI4NUZCNTI2RTNFNDQwQjQzMzRGMTlENDdFRjhGRTVECi06MTBEOEYwMDBFRjA3Q0JEQTEzRjFGN0I2M0UyOEUyRTkyOTAzRkZEREEzCi06MTBEOTAwMDAwRjM1MkY4N0YxQjhFNDA3RjE0NjJGQzJFOTAzNjFGODFDCi06MTBEOTEwMDAwNEQ0MzMxRjA4Rjc1Q0NGRjM3MTA2MDdFNkNCRTMyNjg4Ci06MTBEOTIwMDBFMDNEOTA1MzdBMzU4RTc5QkYxMjdGRjBGMTc5OTQ4Rjc0Ci06MTBEOTMwMDAyQ0E2N0EwMkZGNUQ0QTA3RkVERTFERjYyQjA4MzYxNzdECi06MTBEOTQwMDBDQ0U3ODNCQkQyRTg3RDlERUU3RDhENzFEQzBFN0Y0NkZBCi06MTBEOTUwMDA1OTQ3NzdEQ0ZGNUU4MUUyRkUzMzUxMzVFMUZFQzQ4NDM2Ci06MTBEOTYwMDAyRDJFN0M4N0YzRjQ3RDQzQjM2OURGQjQ0MTNCM0VFQTVGCi06MTBEOTcwMDBGRDY0OEE5NzZFRTBFN0ZFMkU3NUVBQUI4MkY0NUJCNzMyCi06MTBEOTgwMDBCRTJEQkVDOENCRTdFNEQxRUY4Q0E4QkY0NzI3REI4NjBFCi06MTBEOTkwMDA3M0ZGRENDNzdGREY1MEQ1Njc1REM3NUZCMDA0Qzc3MzE3Ci06MTBEOUEwMDAzRjUzRTJERkRERjlFMTBGMjYwNUVCQzM0MzRGQUQ0REY5Ci06MTBEOUIwMDBDNzdFQUEwRERFMkNBNzA1N0Y4N0VFQjEyNEI0NUJBQTMzCi06MTBEOUMwMDA5RjVBOTU0RUY2RjQ1MzBGQTRBMzVGNTRCRDYzNkRCQUVFCi06MTBEOUQwMDA0Q0Y5NzAwRkY5NjUzQUJFRUUyRjlFMUI0NUU3RjNENDY0Ci06MTBEOUUwMDBGRUY2Q0FEQ0FGQTgzMDFEMkE0MUJEM0RFNUVBQUY1NkMwCi06MTBEOUYwMDBFMEZFNDFEQTdEMDJDNUZGNjZCMEY2MTVBODY3MkIzMzVECi06MTBEQTAwMDAzODVGQjExNjEzQzk3RkU4OEZGNjZCNzcwREZGQzU0RUVGCi06MTBEQTEwMDA5NDA3NkY2NDlDRDVDRjgxN0ExMjNFMjAzNTEwREZENUY0Ci06MTBEQTIwMDBGMkFEQTNERjA5NUNDRDdGMjdCMEE3N0UyMkVERkY1NkM0Ci06MTBEQTMwMDAyRDE3RTg5REFCMTlGNUZDNzdGM0E0RjFEMTA0Qzc1OTc0Ci06MTBEQTQwMDBBQkIzOEZEMUZCNTc0Qjc5RjkxNEEzNkZERjQ5RUM2NzY4Ci06MTBEQTUwMDA4QjgxREYzRjY0RUU5NEUwRkI3MDkyQjI1RjM4NzM5RDgwCi06MTBEQTYwMDBGMjdCNzFDQTM4Njk5QjYzQjcwN0FGNTM1MkY2MUQ1OUYxCi06MTBEQTcwMDBFQTc3MjRERjZFNTBGMDMyNzVFOTg5NTdFREQwRUY1NDI0Ci06MTBEQTgwMDBCREM3M0MxRUJFQkZCM0U5NUNBQTlGNjExQ0Y0MzMzQTFDCi06MTBEQTkwMDA1Rjk4NjZGMDNDM0ExRkQ3QkRDMzQ4NzFEMkRDQUNDMTc5Ci06MTBEQUEwMDA1MjFDRDRDRjU5NTJCNDExRDM5OTRCQUIxRTlEOEY3MkQ3Ci06MTBEQUIwMDBCOEQ1OTRDRDhGMzVGMkY5MzUwODRFMTFFNUY0OTFFREQ2Ci06MTBEQUMwMDBCN0NFNDJCODlEREZDNDdGRkZBQjYxRkIzMEZBRERDMjQ5Ci06MTBEQUQwMDBGRUU0REVBRjlBRjhFRkY5M0RERDY0QTJGNEQ5MjYyQjFGCi06MTBEQUUwMDBDM0EzRUJDRjM1RDkyOUZGQUY0RDBFNEFEOUY0M0NDREI2Ci06MTBEQUYwMDBFRkQ4RjREN0RGODg0QkUxRjRCQjczQjlBQkNERjQzQjdGCi06MTBEQjAwMDA4ODBENDYzOTc1M0NDMDJCRURBQURBMUQwRjI4RUJDMkYzCi06MTBEQjEwMDBGN0I4QjJCREM5MTMxMTBFQjkwRjJDM0U4NkE2QjM3NTY2Ci06MTBEQjIwMDAzQ0RGOTc3REYzRTRFQTI0MTRENjc3MkMzREYzQzQ3Q0U0Ci06MTBEQjMwMDBGODdFRkI3OEY3MzUwODI3RDNCNjhCMTRBNzM4NzI2MEM4Ci06MTBEQjQwMDA1NTI1QzJCQjdBODc5MUFGNEY1OUY3Rjk0REU5NzE4RkNGCi06MTBEQjUwMDA2MjdDRjk3NTNEQzUwRDE2NkQzQkYzQzQwMzBDN0Y4N0UwCi06MTBEQjYwMDA3N0IxMjE5OERFQUY3NEJENTc4RkU3N0VFNkU1RjhBQTVFCi06MTBEQjcwMDAzRjM4RkM3OEJFNUE5QjQ0RkNCMzAzRjgyQUYzQTdGMzYyCi06MTBEQjgwMDBENUEyQTVDQjA4N0VDQkM2QkI2RjQyQjg5REQ3N0I5M0YxCi06MTBEQjkwMDA5MDlGQ0UwRjFGNEI3NEVFN0Q0NTIwRjhBQjcyQkNEQjFGCi06MTBEQkEwMDBBRjU2RTBCRjUwNkM1QjU3OThEQzIzQzdCRjYxQjkwNDI4Ci06MTBEQkIwMDBERjQzMDczRTRENDdGQkY5OUJGREU1M0ZCOEVFOTc2MDFECi06MTBEQkMwMDBEREZFNjExOEFGMzM1MTFBRkEzRERGRTAxOUVBODRGNTQyCi06MTBEQkQwMDBFNUY3RjMzRUU4RDJGMTZBRkM5RjlGNTNDMDNGMjEzNjQwCi06MTBEQkUwMDBGODlEMjFFNjhEODJGOUQ0MUMxNEZDNjE1OUE4Q0YyNjNBCi06MTBEQkYwMDA3REE2NDNCRjExRkNDRjhGMzRFNzhDMTlGQjI4NDg5RkNCCi06MTBEQzAwMDBGNzM3REZDQkE1NzVEODRGNUE4RkRDMURGOTlFQzhGQ0JFCi06MTBEQzEwMDA0MTdBN0I1NDIwOENGOTgzQzZFREY2NzNBMENDNDBGQjhGCi06MTBEQzIwMDA0RUYxMjQxNzEwNkY3ODJFRUNDMjgxRTEzQjMwRkY5OTQyCi06MTBEQzMwMDA4MUUzRjFDMjRCNjA0RkYxNzgxMDkzRjI3QkQ2RjlEOUIyCi06MTBEQzQwMDA4MTJGQjI1MENFODZBRUI3RUVFNTJGODgzRTZBRjZBRjkyCi06MTBEQzUwMDBCQTI4RDBGQTI3N0ZBNkNCQkFGQ0ZBMEYzREY1NDUxNkI1Ci06MTBEQzYwMDBFMkVGMzM3RDIwMUZGREI2MEI4NjQwMTZFMkExRUVCNzMyCi06MTBEQzcwMDA1QzlFRkY1ODM4QThFNUYzNTcxQkU4RjczQUVCMDQxMzBFCi06MTBEQzgwMDBEMTQ5ODlGNDI1QzUxRjJFMUNFN0YxODdCQTAzNEY5MkFECi06MTBEQzkwMDAzQ0VEM0FDOEUzNDA4QkM0RjZEMjM4OEM5QkQ0OUYzOTE0Ci06MTBEQ0EwMDA4NkYyQUNDQkNFRkQzMUU4OUZERTcxMkIxQ0FBRTg0MTk5Ci06MTBEQ0IwMDA1RDY3MTJERUY3M0JEODREMEZEQzhGM0M4RkZDM0IwQ0QxCi06MTBEQ0MwMDBGQjY5QTNGM0JEMkMyQjlDQTE1REYxMzlGMkYzMzA3Q0YxCi06MTBEQ0QwMDBCRjMwNzkyNUQyRjk3OURGQzAxQzk0OEY2RjY2RkRBRDE2Ci06MTBEQ0UwMDA4RUUyODZCRjBGQTc3QkIyQjU2RDkyRTY5Qzc5RjczQUJDCi06MTBEQ0YwMDA3QzEyM0Y3MEM0NTRGQjI5OUNDOUMxRTdCOTBDOEUxQjMwCi06MTBERDAwMDBDODZFN0U4M0VGMTMyRUJBOEFGMzEzN0I5OUYzNTNFRDFCCi06MTBERDEwMDBGMjQzMDY3QjUwN0ZCQjE1N0U1MkVEQzgyOUJGRkYxQjI3Ci06MTBERDIwMDBGMUU1QjM4NTMyRkQwNEQ1NEZBNUM3RkY5RkZFRjc0QzQzCi06MTBERDMwMDBGRjJGNDEzM0VDNjMwMDgwMDAwMDAwMDAxRjhCMDgwMEMwCi06MTBERDQwMDAwMDAwMDAwMDAwRkZBNTVBMEQ3MDU0NTU5NjNFRUZCRDJGCi06MTBERDUwMDBGRTQ5MjdERDQ5MTM0MjEyMDg4NDA2NDI4ODFBNjIwM0VECi06MTBERDYwMDA4MTcyRDZDNEU5RkM2RTIwMzNCQjAxNkIyREM0MDg4REQzCi06MTBERDcwMDAyMjI0OUQ3NDgyRThFQzZBQjk2RTFBMDJBQzY0NzUzNjhFCi06MTBERDgwMDA4QzU5NDcxRDQ3OUI5RjgwMjhFQzc2OTQ0MEMwQTAwRDdFCi06MTBERDkwMDAwQUNCQTI2QjQ1QUEyNjNBNTU1QjU0QUJBQzBFRTBBNjYzCi06MTBEREEwMDAyMzgyM0JENkUyQjhFNzNCRUZCNUREMURFMjRGRURBNjlGCi06MTBEREIwMDA4QUJBN0RFRUNGQjlFNzlFN0JDRTc3Q0UzRDhGQjQ1MjQ3Ci06MTBEREMwMDAyMkNBMjI2QUNGQ0QwODJBMEFGRkE2NkVBMjQ1NDQ2RDU4Ci06MTBEREQwMDAyOTI0N0ZGNjQxNDUxRkFGRDM2NEJDN0Q0MEEzQzk1OEI5Ci06MTBEREUwMDA5M0VCMDhDRTlFNDE1NDQ3REQyNjlBNDVCNDg0NDI2NUE0Ci06MTBEREYwMDBBNDcxQkYyOUYyQ0I1Qjc5QkNGRTBENkQ0MTE3OTM2MTE1Ci06MTBERTAwMDAxQkFENkFCMDEzRDVBNjdBMEIzNjE0MTMwREFCQ0FBQTk0Ci06MTBERTEwMDA4NjYyQ0MwQjk1MkU5RDRCRjQwREZFN0U0QTc0OUI4NzNCCi06MTBERTIwMDA5OTRGMjIyQUQzMTQwRkY2MUI5RDlDMTZEQ0M5NUQ4QkRCCi06MTBERTMwMDA5N0ZCMUI0OTREOThBN0VBRjM5ODRGNTMwODdDODJBM0EwCi06MTBERTQwMDAyNTRCMUREODY4QjQ2NDk5MjMzRUVGOEUzN0QyRDYwNzkwCi06MTBERTUwMDAzMTRFQTFEMjNCMTJGNkY5NEI4Rjg1NjgyMUQxMTdDQkY5Ci06MTBERTYwMDAxN0FBMEY2NUYyNzlBRURBMDM3NDMzNTE4RDc2RUQyOTc2Ci06MTBERTcwMDA4NUY3REQ3MENDNEM1NjA1RkM2N0JDQUZGMjM5MDI2NzA0Ci06MTBERTgwMDAzNEVBNjVGQTUyNDcwQTc5QUNDQ0NFNEIxRTBGQ0YxQjUxCi06MTBERTkwMDA5OTNCMjlEOEM1RTc2RjNGQTA5MDg5RTdCNTFEQjFFRTQyCi06MTBERUEwMDA0Q0UxNzk2REU2NDhCNjlCRjdERDM2RjAzQjhCODdEQkJFCi06MTBERUIwMDBGNkZFRjcyQ0FFQjk1OENGNDczNjQzOUUxNDE1RkE2RENGCi06MTBERUMwMDA3N0YyNEYxNzkxN0Y2MENFRkI3NzMxM0ZGRjY5NERGNEJBCi06MTBERUQwMDBFRDM3QkQ2NzIxRDZENzA1OUU4RkZENUEwRUY2RDU4MjQ4Ci06MTBERUUwMDA2RUE1RjA1NjI3REFGRDNDQUY0OEJGOUI2RkY4REZFNTIzCi06MTBERUYwMDA1QzU3ODZCMzM4N0VCRUY4Mzk1REEyQTcxOEJERjg2OUI1Ci06MTBERjAwMDAzRUY3MDJENjhCNDZFQjQzNzY1OUVFMjE5NjdCNzE2RTM3Ci06MTBERjEwMDBDRThFMkUyNTcxOURBRTVGOEY3NjY5NEIwRUNCMTU5REYzCi06MTBERjIwMDBBOUI4MTU2NjE1NEQwRDZDNzY0MjFGODU4QUIzOTcxN0YzCi06MTBERjMwMDA0NzVGN0ZCOTc0MkRGNDlCMTIyQ0JEOURDRjE3QjU5MDEwCi06MTBERjQwMDBEQ0M3RTJDN0I2OUJCNDA0NzkxNjBGNkExRURDNDMzNDAzCi06MTBERjUwMDA5NTlBMEVDOUJEN0JBN0UyM0VBOEJDNjFBOTY3MTJENkZGCi06MTBERjYwMDA4REJFN0IyQjZGMTk1NTc5QkRGREZBNzMwNENBNzU3OTg3Ci06MTBERjcwMDBDRUIwQTlDOTdEMUI3MkQ3RTdFNUVEODBGRUQ5MDBDNEZDCi06MTBERjgwMDA4RTRFQTlGQUZFMUU5NUM3RTdDN0Q3QkY2ODlDQTc0NjY1Ci06MTBERjkwMDAyQkNFODlGMEY4MDZDNTlERTMxQzY3OUY1OEJCODdGNTFCCi06MTBERkEwMDBCRTg2RUZFOTQ1QkU2RkI0MkY3NTM4NjlDRDZDQTJGRDEyCi06MTBERkIwMDAxREI5NDJGRjczODc0QkRBNTA0NzkxRjRCRkQyRTExNjg3Ci06MTBERkMwMDBGQTYwQzcyRDQyMUZFQUYwMDgzREQwNTEyN0VERDE4RUVGCi06MTBERkQwMDAwNkU5M0YwMzUxRkY4QzcwQTAyMEVDRTIxNDdDNkQ0QUVGCi06MTBERkUwMDA5QzFFQ0UxQzQzNEY0OTlFM0Y5Q0E5MjREMzUzMTQ5OTk5Ci06MTBERkYwMDBGRjcwQjgzQzE4NjBGQUE1MzJBNzlDOTM4RENBRDFDMEI3Ci06MTBFMDAwMDBGQTY4NEU0QjJGQTEwQ0I0Rjk0MTRBNjdCQkIxN0IwM0IwCi06MTBFMDEwMDAxRUI2RkIzRkQ0RUREQTQzMzNDNUNGNEIzMEFGM0FGM0Y2Ci06MTBFMDIwMDBDRTQ2RjhEQkU1MkMyQjY5QUNDRkMzMUVFRkRGNjNERUY5Ci06MTBFMDMwMDBFOUQzNTUwNURCRDEzRjY4NzM1QkY5RkU4NzU3REM5NDY0Ci06MTBFMDQwMDAwMUJENDdGRjREMjM4REI3QUUyODVBQjBCOTk0RTkwQUY4Ci06MTBFMDUwMDBCQjIyNzZDQ0ZDNkU2RUM4NjZCQkM2NEZFNjUzMzVCOEE1Ci06MTBFMDYwMDBCQUQ0QTRFMzg0NzNCNjAyRkRCN0FFQzEzRTFCMjZEQjZGCi06MTBFMDcwMDAxNjU4NzlGQzRBQjlGNzU3RDgyN0E2RjdEQTI5RUIwQUQ4Ci06MTBFMDgwMDBCQ0QwOEJEOUY1QkVDQUYzMDJGRjZFQTY1RTlFRjc4MEE4Ci06MTBFMDkwMDBDMzlENjRERjQ3Q0IyQjgyQjA5QkM1NDVCMzM2Q0YwNzBBCi06MTBFMEEwMDA3Rjc2QkFEOUJDM0ZCQkY1N0VDOEU3NTFEMzk0NEVDMTQ5Ci06MTBFMEIwMDAzMTk3MDlCODEwQzRGREYzM0U5NTJFNDVFQzMwNkM3MUQ0Ci06MTBFMEMwMDA5OTMyOTk3RjM4QjUyMjJCQzBFQjRFMTlGNzdEREFCODFCCi06MTBFMEQwMDBFRjMzQzY3REJGQzNGREQ1RENCRUNCRkQ2ODg3QjgxRjVGCi06MTBFMEUwMDBFRDhBOTg5RTREQTM4NUQwNUZGMEE3MEQyRjc5NDRFRjYwCi06MTBFMEYwMDBBM0Y5QTBBMzY2NUEwRTNCNUMwMjNGRDNGMTI3QkY4MTcwCi06MTBFMTAwMDBFNTc4QTI1Qzk3RTM2RTAzN0Y4NjZFNkJFOEQzRDc4NUQ0Ci06MTBFMTEwMDA4NDRGOEI4NUJDQjBGRjRCNTg5RjYwOUZCMTc1RjFGNTY0Ci06MTBFMTIwMDAyNEVEQjI5QjI5OTBDMkU3QTBDM0I2MjBGNDQ0NTM4OUUyCi06MTBFMTMwMDA4MDVGQ0IwRUU3MDgyRTY5MjlCMzhBQ0Y0RjY0N0EwMTNFCi06MTBFMTQwMDAwOTlFRDJBQjU2N0Q1RUFFNkIyMUZDODU3NTI0RkI4QzlGCi06MTBFMTUwMDAwNEQ1ODA5OUVEQzQ5RjM5NTQ5OEM5RjI4RTE4N0UxNjYzCi06MTBFMTYwMDBBMzBGRkQ0OTEzRkNGNkNGNjc5QURCRDcxNEZEN0NGRUE1Ci06MTBFMTcwMDA2NTQzODUxM0IwNUVCMUE5QjAzM0ZGNEU3REZDQUNFMUMxCi06MTBFMTgwMDA4N0ZFOTkwNjNGRTMzQzk0MTJDQUM3N0Q0NDhGMURDRTlCCi06MTBFMTkwMDBCRjg3RTkyRTdCNzhBRDFFMDdDMjg1ODJERjE0MkU1QzE3Ci06MTBFMUEwMDAwNjlDNTQ0MkU3Qzg0REQ0NzdGQzdEQUZFOTI3RDA0N0ExCi06MTBFMUIwMDBFODc5RDBGREM3N0ZBRkQzNEFERjM5NjdFMkY4QTQ1MEQyCi06MTBFMUMwMDBCRUUyMDRGRDgxNDFGNzNEM0ZDMTlENDA5QjVGMzk4NzIxCi06MTBFMUQwMDA3MUNCQTZERjdCQUIyNzMzNkU1ODgzQTczQjYwMzdGRjNECi06MTBFMUUwMDBBMkRCOTdFRDQwRkYyN0QwNUJDQjExMkJDMTJFMkIwRjZECi06MTBFMUYwMDBGNDdGRjYwQThGQjdGNDNCREM4MEZCQTg2Nzg2RThCQkE4Ci06MTBFMjAwMDBGM0M4REVDNzYxNkYyMzdENjZGMTg3QUVGREJGN0JGRTdECi06MTBFMjEwMDAxMTk5NjcyNTk4NUJCRDM1NTQ0QUJDQ0ZEMUUzN0ZFM0E0Ci06MTBFMjIwMDAzNTYxOUZCNEQwMTVEMDZGNTc5QzE3MzlFQTI3RUFGRUE1Ci06MTBFMjMwMDAzRDU0RjFBOTM3MDBCREY1MUZGODZCQzRCNUZBMEMwQUJGCi06MTBFMjQwMDBDMDZFRTk2NUJFNDc2NkU0N0JGNTg2NkEyQUUxNzFDNzYwCi06MTBFMjUwMDBEMDRBRjA2RjdCQzlFQTg2OURGQTVFQ0RBOTg0MUY1RjI0Ci06MTBFMjYwMDBGM0NDMTRGQjZCQkVCMTNCMUY3MTU3M0RCQTZGQ0YyMzhDCi06MTBFMjcwMDA1OTk4NjcyM0M4REI5RUM5NzZDNDdBRjU2OTNCMTZEREQ5Ci06MTBFMjgwMDAyRkY3Qjc2QkNGNkYyMEY3M0UxQkVENjQzRUNEQ0MwMzZECi06MTBFMjkwMDBGQjM1RUY5OTFEMENGMEQxNUVGQkZBRTM5NUI4ODcxQUI4Ci06MTBFMkEwMDBFREI5M0RFOEJGQjJEQkE2NDIwRjY3MkQ5RThDNzJGODM4Ci06MTBFMkIwMDBFMTU5QjNCQjE3RUIwQ0JBNzk3OEEyMkU0RjVBQTQ1NjhBCi06MTBFMkMwMDBFRTJGQUIzQjFGNzFENzM3RjFFMUJGODBEQ0Y1NUFGNzdBCi06MTBFMkQwMDBGM0NGRTIzQzdCQUQ4NDM4NzE2MTFGRUI4REQ3NURFOEY1Ci06MTBFMkUwMDAzNUNGQzcyRDhGRUM3Mzk4NjAyRjk3OTRFRTk1Q0Y4MjIyCi06MTBFMkYwMDA3RkFGM0VFRjkyQUQ1QkY0MTlFODlENDNEODhGRTcxMUY1Ci06MTBFMzAwMDBFMkYyMjU2NTdCNTJGRjg1REVCRDI1NUVENkRGQzU5NzJGCi06MTBFMzEwMDBFQThCQkQwOUY2MUJGMzE3REY2RTZCNTI3QzE0MjQ2MDg5Ci06MTBFMzIwMDA1Q0YyMTlCRkM5MTkyMDNCQzdERjY2ODNCQzc4RTg5OTQ2Ci06MTBFMzMwMDA5MTY3MjlCRUZFRTI3RTczRDhDMjNBNkFCNkQyRTY5NEVECi06MTBFMzQwMDBDQ0I4M0ZGOEYyRkVCQzBFRTdGM0E5M0IwQTkxQzczNDA0Ci06MTBFMzUwMDAyRjg4QUM4NDVGNUNCMDUxNEEyRUNGN0JEQjg4NUZCRUQ4Ci06MTBFMzYwMDA4MzFCOTcyQTI1REYyRDRGNEQ4NUVFQzc1NzczRjUzODUwCi06MTBFMzcwMDA3Njc1QzAxNjBDMjhERjFEOEZGRUEzODM5Q0VGQ0M4RTE0Ci06MTBFMzgwMDBEMzc3QUY2NzdFMjk3MTdFNkY1QjQyQUQ2RURFQjcyREFFCi06MTBFMzkwMDA1M0M3OEY3MzNDN0YzRkUzNTg5NUIxQ0ZBQTg3OTJFNzZECi06MTBFM0EwMDBERjUyOTEyOUY2RDM2Njg5MTQyMjBFQzZGODJGQUM4ODY1Ci06MTBFM0IwMDBFMTVBQTQxMDc4MzU3NjVEM0REMjEzRTBDOENCOEFFMEVGCi06MTBFM0MwMDA4OEVGQTBGMkExOTY2RUE4MzQzQkFFNEY1RjRBMjBBODFBCi06MTBFM0QwMDA5NThDN0YwRkI5OEI4QzdCNjA1RUVGNTVFODdFRTVEQjFCCi06MTBFM0UwMDA2RkYzRDg5ODRGNEI2QTI0MUQ3OTUzQUIyMzkyOEU3Q0UwCi06MTBFM0YwMDA2OEU0QTg0NjNCOERFQkNCOEFGMTlGMTlERkFGNDk0NjE1Ci06MTBFNDAwMDBCODNGNjRGNkQ4QzZEQjhGOEY0MzNDNkYxRDdFQjMyQUJFCi06MTBFNDEwMDAzRUE5RDBGREE2NjkyMDRERjYyMzY3NjQxMUVDQjZFOTRDCi06MTBFNDIwMDBCOUU0NzUzOEE3MzNDMTFGNDcwNjc2NjU3QjEzRTI4RkMxCi06MTBFNDMwMDBDRjkwM0JBQTdDMjg3RTEzRkRGQUEzN0NEODgxNEZBNTAwCi06MTBFNDQwMDBDRDBBQUJGNjIyQUZCMTY1MEE0RDI5M0ExREIwQjFFNTUwCi06MTBFNDUwMDBGQkJFQjRBN0MyN0UyRTVFNkQxNTNGMUU1MTIyODI3Mzk1Ci06MTBFNDYwMDBCOTI3QUUwQTNFOEM5ODIzODI3MzhFQ0FGRjExRkMxODFFCi06MTBFNDcwMDA5OTEwNTkwOURDQ0FBREI0QUY5NkYxQzk5MTk1MkUxRTE5Ci06MTBFNDgwMDBGRkIyQzJBMEE3OTFFNDAzODUyNzMyNTcwMzRGRUFCNTM0Ci06MTBFNDkwMDBEMUI3MTEzNzY5OTdEOTA5M0Y4OUU5N0I5REExMjdBMjk3Ci06MTBFNEEwMDBDNzg2M0I3OEZDMEY0MUIzMEJGMTYxNEVBNTYyRTQwQkNDCi06MTBFNEIwMDA5NkY4RjlCNUI4M0Y4RDkwRUJDMDQxRjg2NzkzRERERDc0Ci06MTBFNEMwMDAyQkEzQzFGREFGMjAxRkJDMzNEQkRERTVCQTVFNkYzMjhECi06MTBFNEQwMDA4N0U1Q0FDQUZDNkEyREVFMjkzQkRERkI4RjE1Q0NERjMwCi06MTBFNEUwMDA1RjFDQzkwN0NFQjFCNTRCMUM2QTdCRERCQTEzRkI0Nzc1Ci06MTBFNEYwMDBDREEzN0I4MDVGMTcxQ0RFMjcyQjU4OUZBRDk2QTFBRDY3Ci06MTBFNTAwMDBBNTJDRDI2N0U2QzgyOUE0Rjg0QjYwNkY4MjIzQkFCRDU4Ci06MTBFNTEwMDA4RDE0RUZCMjA4OUYxRTU2MkFFQjY3OTc3MTBGOTQ0QjJDCi06MTBFNTIwMDBCNDAzRjZBMUU4RjdGQ0U2QzBBQkVGMDA2RjQ2ODY2NkUxCi06MTBFNTMwMDAwOTRFOEZGNUE3MEIwMzRGQTYwMzM3M0VFMEY4MUU5ODUwCi06MTBFNTQwMDAxM0VGRkY2MEY1NUUwQkZBOTdCRkI4QzMxMkUxRjY5RUJBCi06MTBFNTUwMDBDREM5RTdCQjdDRURGNjBDRjgwQjNEOUVEMDBGN0JFQ0Y0Ci06MTBFNTYwMDA0OUE2QzdFQTA1NzYxOTRFRjI4MzgwRThGRDlDQzcyOUMzCi06MTBFNTcwMDBGMkI3NTQwRUI1NDEwRkRGRDJDQjk4RDYxMkU4MTM2MzMxCi06MTBFNTgwMDBFODMxRjNBOTQxQ0YxRkNFNzk0OEY4QjY0RTBCMEY0M0JGCi06MTBFNTkwMDA2RjIzMDdDQzA0N0NFRkU0QjgyNjc0N0Y1QTEwRUYxQTdGCi06MTBFNUEwMDBGNTAwQzdBRDJDM0Q2RTIxNUVCNEE0MEZBREM0QkQ4QzhCCi06MTBFNUIwMDBGNDVCOUQ5OEJGRTlDOEE3RjkzODNGREI2MzNFQ0VEQjJCCi06MTBFNUMwMDA3MkU0NzAzNkMxQ0U4REY3MDRDN0M3NkM4Q0I3RjQxRkU4Ci06MTBFNUQwMDBDOUM2QkIyNEQ2REZBQTg2MEEyMTE3NDdCODEyRTA0NzZFCi06MTBFNUUwMDBBQ0RGQUY4NTBCMjE3RjhCMzI1NDgyRjEyOEU0OTZGOUEyCi06MTBFNUYwMDA0QzZCQTA0OUNFRDFBQUU4N0U0RjQ3MzRDMUY5QjFGN0EwCi06MTBFNjAwMDBGNjUxODU2RUFGOEMwRjI1QzgwNzM3MURCRDU0MTJCMTZBCi06MTBFNjEwMDBDN0YxQTBEOUMwOTUxM0U4MkZENkZEREZCOUM4QzAwOTRFCi06MTBFNjIwMDA1RURBMENCRjFGMDcyN0JDMzFEQ0EzRjUxNkM4N0RBRTMwCi06MTBFNjMwMDA0Mjk3M0JCNjVFRjhDQTNCMjMyMEUzNkRBRjVEMkE5OTUzCi06MTBFNjQwMDA1OThDNzVDNjNDNEFDMEEzNTk3MTdDMDEwRUU0MEEwRTcwCi06MTBFNjUwMDA2QzMyNjdGM0I5N0NDRjJCRUU0RTVFRDJEQ0I4QjE5NjRDCi06MTBFNjYwMDBBN0QzM0FEM0ZEQjVEMDZCMTMwNUU0NUQzNzU2QUVCMUYxCi06MTBFNjcwMDA3NkY0NzA4NTdFQkYzRTU1N0Y4RkZCRjYyOEMxNEU5NjlGCi06MTBFNjgwMDBFQjIyNjM3REVFN0NDMTlCMzBGMDY3NURGNUM2NUFGOEU2Ci06MTBFNjkwMDBERjdENTk3RTRCRTJCQkY5ODdGOEFGRUQ0OUE2RDdBREQ4Ci06MTBFNkEwMDBERjU4OUIzMzhFOUZGQjFFREE3RTZBMTI1RENGQUZEOTk3Ci06MTBFNkIwMDBCQkEzMzZEQjc1N0Q3RjRDRUU4QkI2OTg5Qzk1RTY0OTA3Ci06MTBFNkMwMDA4OUZBNThCRUIxNzYxMkI3RUI1MkZFQUZGQUQwQ0Y3REMxCi06MTBFNkQwMDBGMTg4MzU4Q0I4Q0JGQUI1RTBGQ0I3RkQ3MUJEMjUwOUUyCi06MTBFNkUwMDBCNzdGODA1RjMzMDU2QjlEMzNCRTVCRkVCMTZEQUIxMkIwCi06MTBFNkYwMDAxRTU2ODA0RkVDNUZCREUyNjdFQzM3MDlGQjZEQUExODMwCi06MTBFNzAwMDA1M0E3Njg1QTNEMUQ3OTM3Nzk1NzRGNEZBQzUzOEM2RERECi06MTBFNzEwMDAxOTI4QTdBOEI3ODhCRDQ5Q0I3RUI4RDIzRDhFM0U2MkU2Ci06MTBFNzIwMDBGMzZGQUVENDY0OUY0RDg2MUQ0RkE5NkY3OUU2MTUxRTE5Ci06MTBFNzMwMDA3RkI5Q0M1MzU2Qzk3RTU1QUVBOTkyQkY4RkREQTdBNjJGCi06MTBFNzQwMDA1MkNGMEY4NkIyMURCRjgwM0Q0NTA3Q0Q0RUY4NDlCOTY3Ci06MTBFNzUwMDBBNkVCMzM0RkJERkMyRUZDMzEyRkRCRTFFQTY0N0UzNUE2Ci06MTBFNzYwMDA1NTY5RkFCQzYzMzYyN0VBNDBEMTYzNUZFNTdCRTBGRjc5Ci06MTBFNzcwMDA1QkVDQ0JBNUNFNjJCMkQzNjQxRTNGOTUzQjU3RjAzRDE4Ci06MTBFNzgwMDBCNkNGQzdDNjNFNjlBNTdBQkVEMzVFNjRGRUZFM0E1M0Q1Ci06MTBFNzkwMDBCMUUzREIzQTkzRTQxQkM1NjlDMUQ5MTI4N0JGOTBGODk2Ci06MTBFN0EwMDAxNjFENUNFOEQ0NUNDMEY3QTAxREZFRDZGRUY1N0Y2N0ExCi06MTBFN0IwMDAyMzBFOEYwQ0ZFNjdCQTBCQjg3NUVERDM3NEQ4Q0ZCNkE1Ci06MTBFN0MwMDA4MThGRDM4MTBGMjcwNjY2MzlEMDlFMUQ3MjM5RDAxRkU1Ci06MTBFN0QwMDBBREZCQjgxNkYzQkE4QzM2NUU2NzMwOEI5Q0IxMzZGNjVCCi06MTBFN0UwMDA3RThFRDUxMzEyREVEMUNERDA2QkFGNzNEQjJGNEI2MTk0Ci06MTBFN0YwMDBFRkE5REQ4MjYzRkM4RUNFNDRGQzg4RDcxOTVDMzlFMzM3Ci06MTBFODAwMDBENTY1MTJFQjBDMDVCM0Y1M0EwMzVBRDQxOTBBQ0M3QTQ0Ci06MTBFODEwMDA5RDAxMzRFQTBDNjg1MTY3NDAzRkVBMENBMDUxNjcwMDQzCi06MTBFODIwMDA4RDNBMDM2OEQ0MTlEMEEyQ0U4MEZFMkJBODZCQjFCQzYwCi06MTBFODMwMDA1MTRFREU1MERGQUFEMUVDODJGRjBGRjQ2QTQxRTRGNUJECi06MTBFODQwMDAwRjFDRDM3NDdBODcxMkM0N0Q3RkM2RkIyMzBFNDZBRjlDCi06MTBFODUwMDBFODc1QjAyOEM3NTM3OUU3MUYzNENCRkIyMDFBREE1RTdFCi06MTBFODYwMDAzNzEzRjdENkFGQjk3MTU1MTcxMTM3RDkxNERCQ0RBM0NDCi06MTBFODcwMDAyNzUxMUY2QUVGNTNEQzFCNURFODVGMkU3MjZDMUI1QzM3Ci06MTBFODgwMDBGODdFMjNGQTdCQ0Q2RUQ1ODVGQkJBOUE4REZBOTc2RjA5Ci06MTBFODkwMDBCMDU3RUE1OEQ1MzlDNzJDNzJDRkZCMTVDQUUxRkRFRjQ2Ci06MTBFOEEwMDBCMEVBRUY2NEJGQzZCRDJDRjdCMDQ1OTUzQ0RBNkYxREVBCi06MTBFOEIwMDA5MkY3NEJDQjhCOEE3MzRENDIxRURBN0VDQkU3ODIxM0U1Ci06MTBFOEMwMDA5REI2RjQ5RDkwRDcxRkIyMzlENzI0QzU1NzhGRTQ3REVDCi06MTBFOEQwMDA3RUZDNzRDMThEM0M0MzQ1NENBRkQ1QTc5MERGNUU3Qjc5Ci06MTBFOEUwMDAwMTM4MjFGOTQ4NDI3RUI0RDZEOUZDMzNFNDY3QTQ1REVGCi06MTBFOEYwMDAzM0UxRkM3RTdFRTg0RTY0RjlENjNENkRGRTI4OTJCMDkxCi06MTBFOTAwMDA3RjczMzA5OUY2MERGNjZEQ0QyM0M4OTlEQzhGNEEwM0RECi06MTBFOTEwMDBFMkIyM0Y5NERDMUZBQTc0NjQ3RDkyQzYzRkU2RDEzQzBDCi06MTBFOTIwMDBFNDVCNzVGRkI0RTY0MDNGRUY3N0I5REIyQUY5Q0E2MUQzCi06MTBFOTMwMDA4RkY3NzAyNUZCRjE0OUIzNDdFQTJGMjc4RkQ5RTRCRDQ0Ci06MTBFOTQwMDA3NTdFRkI5Q0E0RkE0QjhEMzY1NUVBMUYxQkNDOEFDNEZFCi06MTBFOTUwMDBGMTJCRTVERTYzQjBDQkFBQkE3QkE1RUU1Mjk1RUIxMEE2Ci06MTBFOTYwMDA3RjhFRDlFMUQxRjI4NjM3QzA3N0MzNUM5N0Q0QkY2QTc2Ci06MTBFOTcwMDBBQ0Y0MEJFMUM3N0UyRkY3M0M2ODE2N0ZBQkU5NTQ4MkZECi06MTBFOTgwMDAyQUQzQUJDOTZEODE3RkFENjI3NThBM0Q5OUVEOEYyOTIwCi06MTBFOTkwMDBFQzBGQUI3OEFGQzYwNEJCREFCMDVEOTFCQzQyMEExMDk1Ci06MTBFOUEwMDBBQ0U3OTU4NjNFNTcwREZFRUI1NzBBRkJDQkJENTYzREI3Ci06MTBFOUIwMDAwRkNFNTM1NUUxOUZEN0M1NzE4QkU3REY0NzVFMEJGQzQ4Ci06MTBFOUMwMDA2NjFEQzc1NUI0MUM2NzVGOEY3MEJGMzc2RDZBQkU5RUVBCi06MTBFOUQwMDBFN0JCNzJDMDdGRjUxOTMzMDE0RjZBNzI3RTVFRTg5NTFFCi06MTBFOUUwMDA3ODVGRURGQzg0RUY1QjA5REZBNTdENzNEM0Y3RTFBOEM5Ci06MTBFOUYwMDA4OTNFNDlDODZCNEY5QTc1RkM2MTdEQ0E3QkVCMTRFQzZDCi06MTBFQTAwMDA1NUVBM0U1RTY5Q0Y3NDM0NDlCQkEyOENDNEZGMEIzNDE3Ci06MTBFQTEwMDAzRDZGMkZFMEJCNzI2NjRBRERBMjBGRUI2QkRBRUQ2RTQ1Ci06MTBFQTIwMDBFODNGODYwQkJCOERGQ0JFNDBFNTk2RTdFRDRFRDU1QjFGCi06MTBFQTMwMDAwQkQzMjlEQzNGOEQ1QkNBMTQ3RTYxRTc3Q0Q0NzE1QzBCCi06MTBFQTQwMDBDMjNGNEYzREJCQzAwNTdEN0M2OTc3NDMxRjM1MzlDNzQ5Ci06MTBFQTUwMDBFNkUxREQzMUNCRTBGRjcyNTlDMzU1REM5NzI3OUQwMjFCCi06MTBFQTYwMDBEODlGOEY0M0REQUNERjVBMUM0ODQxNUQzREU0RDE1MDU3Ci06MTBFQTcwMDAyNzNGQTYzOEYxQUVCRjFFNEZCNzZGNzFDMkNGMEExNDQxCi06MTBFQTgwMDAyN0VBQjdCNUE5REQzNUQ5Q0NCRjc2RTYwQzM3RjA5Q0JGCi06MTBFQTkwMDBGMTU1RUE2MTIzRENFQTc2NzA2QjUwNTNGNEI1QTY2QzRECi06MTBFQUEwMDBENEYzMERGRjI5RjdBNjU0NEQ4QUY3RDcxQjdFMTQxRDBBCi06MTBFQUIwMDBGQzIyMURGMUY1NDdENDZENzc4MzdGODA2Q0VFNUU4Mzc5Ci06MTBFQUMwMDAzRkVDQTBGRUE2Njk1MkJGOEREOUQxRTVGRDM5M0I2MTZGCi06MTBFQUQwMDA0NzUzQUJGNDc1OEQ4REVGOTk5MTRGMENEREU2Q0RDMUE5Ci06MTBFQUUwMDBGRTJCRDc3Q0JFMjU1QkNFMzk3RUJEOEM3MTM3MDNCODNCCi06MTBFQUYwMDAzQkI2NUUxNkMzRjEzRDQ2RkQxRDc4NkIzMkVBQkEyNjgxCi06MTBFQjAwMDBBM0FFNkIzMkVBQkEyNkEzQUU2QjMyRUFCQTI2QTNBRTQ0Ci06MTBFQjEwMDA2QjMyRUFCQTI2QTNBRTZCMzJFQUJBMjZBOTEzQUU5N0Q1Ci06MTBFQjIwMDBGNkREOEU4N0E0MURFQTA4Qzg3ODQyQkNCOEI5RUFDN0VBCi06MTBFQjMwMDBENTVEMTc1NThENTM3N0E1MTQ1Nzg2QzQ1REY2N0JCREZCCi06MTBFQjQwMDBERTNEQTZDRUNBRkVBRTI2Rjg3QkQ1RTA4NDdCMUU0MzEyCi06MTBFQjUwMDA1RUQyNjM3MUIzMzg1NDZCRjExNjNDNjAxNzdDRjA1NDhECi06MTBFQjYwMDA4RDVCNkY4REU5Q0YyRUY1RDlDQjY0OUI4RjdCQTgyQzY1Ci06MTBFQjcwMDA5QTY1NTI1MUM3MzRFRTIzNTZFRjg0REZFMDlDRjAxQkI4Ci06MTBFQjgwMDBCNEYwMUJEM0VDQjhERkZDRDZDMkFFNURBQUU3MDkwMTM2Ci06MTBFQjkwMDBDOTEzNkM3MkJGNUIzNzMyQUUzMDdEMkYzOTkzNzBFNThECi06MTBFQkEwMDBCMzMxQjhDMjBGOUExNTkwNjNFREEwOTVCQTc0M0YyM0E0Ci06MTBFQkIwMDBGODRGMjUzNzdGOUMzRjBFQ0U4NDc0OUM5OTk2MUFEQUM1Ci06MTBFQkMwMDA4NzdEQTZCNUE1QkE5MTE3QjNCRjhCOUQ5RERDQTY4ODlFCi06MTBFQkQwMDBCRkFGQTEwNkQ5NzcxQ0JDNDk0NzlFN0NFRkM0RDE3MzU3Ci06MTBFQkUwMDBCRkUxRjlGN0ZFODM1REYyOURBRDkzRDcyRUZBRkZFMDBBCi06MTBFQkYwMDA0RDREOTVBRThGNUY3Nzg0N0RFNzU5OTZFQTU0QjY0M0M1Ci06MTBFQzAwMDA4RTU3RDUxNjJBOTJCQUI4OUEyQUZFNTBBMzNEQUU1ODBFCi06MTBFQzEwMDA4MEEzNzdEMzNDREM3N0I1QjVFMTM5Qzg5OUMzRkUyRTI0Ci06MTBFQzIwMDBFRkRGMkNBM0JFNkIxQTZBREVDQkY0RDlFQzNDMzdCRTA3Ci06MTBFQzMwMDBBQjREQ0QzRDQ0MDUwQjgwNDc3NUM1QjBBQkIzRDRBREVFCi06MTBFQzQwMDA2MERENjMxOURFQkY4M0JGREM1RUNDQTc1NkUzRkU5NkIyCi06MTBFQzUwMDA1Mzk3QjZCMzRCRUU2M0NFNDJEQ0ZCMzJBQkFCMUZGNTQyCi06MTBFQzYwMDA4NjJENkY5RTkwN0FDMkIyMENENzQyRDQxQkI2QkM3OTY3Ci06MTBFQzcwMDA1QUE3NzM1Q0ZEOEExQkU1QjIxM0FCQUI3RjgyRjg2NkMzCi06MTBFQzgwMDBFQjNFOUYxMDY3RkRBMTA5NDk3NEZCQzBFNEVFRjMwOTU4Ci06MTBFQzkwMDA3MUFFMDUzRkY4OUQ0RTNGNTM0Q0I4QUY1NjQzOTQ1QzYwCi06MTBFQ0EwMDBENUJCMURGMkY5RUJGRTRCN0ZDRkQzQThDNEM5QTdBQUYxCi06MTBFQ0IwMDA3NDVDOUM3NDgyQzJCMEU3RDFDNTBFRjlGRTk3MzM3MUMzCi06MTBFQ0MwMDBGRDNDRDREQkE4RDhCNTEwRjMzOEFGRkQzNUVDRjhFMjQ1Ci06MTBFQ0QwMDBBRDlFQTdDMTI3Q0YzODc3MEVGMTc5MzU1OEM3OTAwRDczCi06MTBFQ0UwMDBFRDE5RTNCQkU0MjlENURCODhCNjM2M0Q2MDkyN0UzNTZECi06MTBFQ0YwMDA1ODhBRjY2RDM1RjQyMEZBRDkyRjc2ODE0RkVEOTNGM0NCCi06MTBFRDAwMDA2RTJDNjIzQUNGMUE5QUI3REU4RTc4RTlEOThERkU3M0VGCi06MTBFRDEwMDA2NTlFNUVFQzM3QjZFRURGNjk5QzhGRTVEOTg3NzlDM0Q3Ci06MTBFRDIwMDA4NUFBRTRGOUMzMzdFQTZEQ0MyRUMyNTUzQTBFMUQzN0Q5Ci06MTBFRDMwMDBGQ0E4QUM5M0U0RkJFNzU4RkIzOTVFQTUxQTc4RjlGRDEzCi06MTBFRDQwMDA3MkIzQkM0NzIwNEY0QzdFRUE1RTVEMEE3OTU4REVBMzYxCi06MTBFRDUwMDA4NkJDQUY2MTlDRUM5OTUyOEZGOTZFN0IwREM4N0VDNzYzCi06MTBFRDYwMDAwRDNCNjU3QzZDMzlBRkUzQTNCNDg1QTZFMDA0RTQwREVDCi06MTBFRDcwMDA1MzFFMEQ0RTgwQkM1Mzc2OENEQTVDRENCRTEwMThCNTg5Ci06MTBFRDgwMDAyMTdGNzhFMTZGNDc2REU4N0ZDMTQzNzVFM0UxQkY1NkFFCi06MTBFRDkwMDBBRDA5REZDMkIyNTE1OTNGOURGNzFBOTI3N0MyRTgwNDFDCi06MTBFREEwMDBFNDZGODU0RDZGNTkwMjZDQjc3MzlFRTY3RDkzRjJCN0ExCi06MTBFREIwMDAyMjg5NjNEMzBENUI5QUZFQTg0QUIwODdFOUNGOTBFNDFECi06MTBFREMwMDBBQjU0OUQyNUUzQkUxNERERkY3RDhGM0VBOEMyOEU2RTQxCi06MTBFREQwMDAwOEIyREMwOUY2MzdFNzY5RDNFNTQ4MTJERkIwQUM2QjVGCi06MTBFREUwMDAzMTcwODNGM0I1QTQ3MTNGMzM0N0JFM0NDNUMwMjNFNDAzCi06MTBFREYwMDA4RjhEOEMzN0ZFQTZCN0JFNDJCRUM4NzlEQzE4N0U4Q0RDCi06MTBFRTAwMDA0RDMxMUMyNkM0NURFRkVCMTExN0ZDMjA3OURFREFCQjE3Ci06MTBFRTEwMDAxRUQ5OEFGNzZENTNFMzc2OEJCQzhGRDdGNDZENDVEQjMzCi06MTBFRTIwMDBEQUZBOUUyNTg3MjRCRjRDOUFDRkY5NjUxMjdEOUQ5QzA2Ci06MTBFRTMwMDA2M0U0Njg3QkYwRjNBRDM5RTNFQ0NCNzY3MDJERDEwRTUzCi06MTBFRTQwMDA0RTlBNDMzN0UwQkQ3QUQyOUZFQTBFNDgxQzA5REQwRjg3Ci06MTBFRTUwMDA3Q0Q5RDk2QTc3MjNBRUVDRkE1NUE1RDhEN0I3RjVBOUVFCi06MTBFRTYwMDAzMjhGQTlGQTQ3RDk1MUE3Q0MwRjU0NTIxMUZDRTY4NzJCCi06MTBFRTcwMDBEQTExRTBFMUVDMjQzQzBDNDhERDcyODk0MzcwQUVERDMwCi06MTBFRTgwMDA3ODA3QjZBRDcxNEEzRTEyRjNFQjM2NTNFOEMzQUQ5ODNFCi06MTBFRTkwMDA5N0U1OTBFRjExMENCNzQ1QTYyQzdDNkY5QUUyRUU0QUVECi06MTBFRUEwMDBDODJCQ0UyRTk5MTUwNDlEREQxOTBBODNFRkU4Q0YxNUU2Ci06MTBFRUIwMDAzN0VBQzhENTY5M0FBRUQ2QTgwREFEN0I3OUZDMkQzNUI5Ci06MTBFRUMwMDAyQ0I4RjE1QkUwMDdGMzZGQjdBQzk3NzY0NUQ5NENCMTNFCi06MTBFRUQwMDBEQjVDMEEyOUZBRkY2NzcwMkRDNDdCM0RGNjNEQUQ2NzA4Ci06MTBFRUUwMDA1QkIwRUYyMERFRkI0QUYwOTlCNUE4OEZGRTk1NURFNDlDCi06MTBFRUYwMDA4OTA2RDU4MDk5Q0ZEMzMzODEwNEI3N0JFRTJDOTRCOEEzCi06MTBFRjAwMDAxM0E1ODZDNkZCOTFGRjJDNEY5NTNBNkFDRjA0RDcxMzAxCi06MTBFRjEwMDBGODZFREFEMzdDQTNFNEY1ODdGRUE0QzdGQkQxQTUyOTVDCi06MTBFRjIwMDA2RUU0NzEzREYzNUMxQjcxQUU5RTQ3NUQzMkZFOUFBMkFBCi06MTBFRjMwMDBGMzBCM0NBMUVCQTc2N0E5N0VDRTlFRTY0Qzc5OUZDNTVCCi06MTBFRjQwMDBFRUExNjc4NzY3MzJCRUJGNTkzMkJDRTVENUE4MDMxODZBCi06MTBFRjUwMDBERjFGN0I2NjcwM0ZCNzRGMjkwRDc3REUwNzNFNzM3NTY1Ci06MTBFRjYwMDA3OTU3OTRCOUU0REU0RURFNzlFMzEzN0I3NDdEODZGMTQ0Ci06MTBFRjcwMDAxREFDN0Q4OTIzRTlGREZFQkZGRTgwQ0JCMzIwMjIwMEJFCi06MTBFRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDQwODM1MDAwMDAwMDAwMDQwCi06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngtZTFoLTUuMC4yMS4wLmZ3LmloZXggYi9maXJtd2FyZS9ibngyeC1lMWgtNS4wLjIxLjAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzhjODYzCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54MngtZTFoLTUuMC4yMS4wLmZ3LmloZXgKQEAgLTAsMCArMSwxMjg1NSBAQAorOjEwMDAwMDAwMDAwMDNCQjgwMDAwMDA2MDAwMDAwNjg4MDAwMDNDMjBCMworOjEwMDAxMDAwMDAwMDE5MkMwMDAwNDJCMDAwMDAwMEFDMDAwMDVCRTBDMgorOjEwMDAyMDAwMDAwMDhEQzQwMDAwNUM5MDAwMDAwMEU0MDAwMEVBNTg2RAorOjEwMDAzMDAwMDAwMEU0MTQwMDAwRUI0MDAwMDAwMDk0MDAwMUNGNThFMQorOjEwMDA0MDAwMDAwMDU4RTgwMDAxQ0ZGMDAwMDAwMEM0MDAwMjI4RTBFMgorOjEwMDA1MDAwMDAwMEY5NzgwMDAyMjlBODAwMDAwMDA0MDAwMzIzMjgwQQorOjEwMDA2MDAwMDIwNDAwNDgwMDAwMDAwRjAyMDQwMDU0MDAwMDAwNDU5NAorOjEwMDA3MDAwMDIwNDAwNTgwMDAwMDA4NDAyMDQwMDVDMDAwMDAwMDYzNgorOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAorOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgorOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgorOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQorOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQorOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQorOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAorOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDAyMDQwMENDNDAxMDAwMDBEMAorOjEwMDEwMDAwMDYwNDAwRDAwMDAwMDAwMzAyMDQwMERDMDAxMDAwMDAyMAorOjEwMDExMDAwMDIwNDAwRTAxMjE0MDAwMDAyMDQwMEU0MjIxNDAwMDBCMworOjEwMDEyMDAwMDIwNDAwRTgzMjE0MDAwMDAyMDQwMEVDNDIxNDAwMDA1MworOjEwMDEzMDAwMDYwNDAwRjAwMDAwMDAwMzAxMDQwMTI0MDAwMDAwMDA5OAorOjEwMDE0MDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA0RgorOjEwMDE1MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMUQwMDAwMDg5MDYwMworOjEwMDE2MDAwMDIwNDAwMDQwMDAwMDBGRjAyMDQwMDA4MDAwMDAwRkY3OQorOjEwMDE3MDAwMDIwNDAwMEMwMDAwMDBGRjAyMDQwMDEwMDAwMDAwRkY1OQorOjEwMDE4MDAwMDIwNDAwMTQwMDAwMDBGRjAyMDQwMDE4MDAwMDAwRkYzOQorOjEwMDE5MDAwMDIwNDAwMUMwMDAwMDBGRjAyMDQwMDIwMDAwMDAwRkYxOQorOjEwMDFBMDAwMDIwNDAwMjQwMDAwMDAzRTAyMDQwMDI4MDAwMDAwMDBCOQorOjEwMDFCMDAwMDIwNDAwMkMwMDAwMDAzRjAyMDQwMDMwMDAwMDAwM0Y1OQorOjEwMDFDMDAwMDIwNDAwMzQwMDAwMDAzRjAyMDQwMDM4MDAwMDAwM0YzOQorOjEwMDFEMDAwMDIwNDAwM0MwMDAwMDAzRjAyMDQwMDQwMDAwMDAwM0YxOQorOjEwMDFFMDAwMDIwNDAwNDQwMDAwMDAzRjAyMDQwNENDMDAwMDAwMDFBRgorOjEwMDFGMDAwMDIwNDIwMDgwMDAwMDIxMTAyMDQyMDBDMDAwMDAyMDA4QQorOjEwMDIwMDAwMDIwNDIwMTAwMDAwMDIwNDAyMDQyMDE0MDAwMDAyMTk1RAorOjEwMDIxMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY1QQorOjEwMDIyMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkYzQQorOjEwMDIzMDAwMDIwNDIwMzgwMDAwMDAyMDAyMDQyMDNDMDAwMDAwMDBERQorOjEwMDI0MDAwMDIwNDIwNDAwMDAwMDAzNDAyMDQyMDQ0MDAwMDAwMzU3NQorOjEwMDI1MDAwMDYwNDIwNDgwMDAwMDAxQzAyMDQyMEI4MDAwMDAwMDEzMQorOjEwMDI2MDAwMDYwNDIwQkMwMDAwMDA1RjAyMDQyMjM4MDdGRkZGRkZFNQorOjEwMDI3MDAwMDIwNDIyM0MwMDAwMDAzRjAyMDQyMjQwMDdGRkZGRkY2RgorOjEwMDI4MDAwMDIwNDIyNDQwMDAwMDAwRjAxMDQyMjQ4MDAwMDAwMDA4NAorOjEwMDI5MDAwMDEwNDIyNEMwMDAwMDAwMDAxMDQyMjUwMDAwMDAwMDA3NAorOjEwMDJBMDAwMDEwNDIyNTQwMDAwMDAwMDAxMDQyMjU4MDAwMDAwMDA1NAorOjEwMDJCMDAwMDEwNDIyNUMwMDAwMDAwMDAxMDQyMjYwMDAwMDAwMDAzNAorOjEwMDJDMDAwMDEwNDIyNjQwMDAwMDAwMDAxMDQyMjY4MDAwMDAwMDAxNAorOjEwMDJEMDAwMDEwNDIyNkMwMDAwMDAwMDAxMDQyMjcwMDAwMDAwMDBGNAorOjEwMDJFMDAwMDEwNDIyNzQwMDAwMDAwMDAxMDQyMjc4MDAwMDAwMDBENAorOjEwMDJGMDAwMDEwNDIyN0MwMDAwMDAwMDBDMDQyMDAwMDAwMDAzRTg0MAorOjEwMDMwMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEE4NQorOjEwMDMxMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzJGMQorOjEwMDMyMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjAyRAorOjEwMDMzMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDAzMworOjEwMDM0MDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzBGOAorOjEwMDM1MDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIwOAorOjEwMDM2MDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDYxMAorOjEwMDM3MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDJGNworOjEwMDM4MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDVENgorOjEwMDM5MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJCNworOjEwMDNBMDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDE5OAorOjEwMDNCMDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDFGQgorOjEwMDNDMDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDFGNQorOjEwMDNEMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA2RgorOjEwMDNFMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTM4QworOjEwMDNGMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE1OQorOjEwMDQwMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDdFMworOjEwMDQxMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDgxMworOjEwMDQyMDAwMDIwNTAwNUMwMDAwMDAwODAyMDUwMDYwMDAwMDAwMDFGOQorOjEwMDQzMDAwMDYwNTAwNjQwMDAwMDAwMzAyMDUwMEQ4MDAwMDAwMDY2NQorOjEwMDQ0MDAwMDIwNTAwMDQwMDAwMDAwMTAyMDUwMDA4MDAwMDAwMDE5MAorOjEwMDQ1MDAwMDIwNTAwMEMwMDAwMDAwMTAyMDUwMDEwMDAwMDAwMDE3MAorOjEwMDQ2MDAwMDIwNTAwMTQwMDAwMDAwMTAyMDUwMDE4MDAwMDAwMDE1MAorOjEwMDQ3MDAwMDIwNTAwMUMwMDAwMDAwMTAyMDUwMDIwMDAwMDAwMDEzMAorOjEwMDQ4MDAwMDIwNTAwMjQwMDAwMDAwMTAyMDUwMDI4MDAwMDAwMDExMAorOjEwMDQ5MDAwMDIwNTAwMkMwMDAwMDAwMTAyMDUwMDMwMDAwMDAwMDFGMAorOjEwMDRBMDAwMDIwNTAwMzQwMDAwMDAwMTAyMDUwMDM4MDAwMDAwMDFEMAorOjEwMDRCMDAwMDIwNTAwM0MwMDAwMDAwMTAyMDUwMDQwMDAwMDAwMDFCMAorOjEwMDRDMDAwMDIwNTAwRTAwMDAwMDAwRDAyMDUwMEU4MDAwMDAwMDc0MgorOjEwMDREMDAwMDIwNTAwRjAwMDAwMDAwNzAyMDUwMEY4MDAwMDAwMDcxOAorOjEwMDRFMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEVDMDAwMDAwMjdEQQorOjEwMDRGMDAwMDIwNTAwRjQwMDAwMDAyNzAyMDUwMEZDMDAwMDAwMjdCMAorOjEwMDUwMDAwMDIwNTAwRTAwMDAwMDAxRDAyMDUwMEU4MDAwMDAwMTdFMQorOjEwMDUxMDAwMDIwNTAwRjAwMDAwMDAxNzAyMDUwMEY4MDAwMDAwMTdCNworOjEwMDUyMDAwMDIwNTAwRTQwMDAwMDAzRDAyMDUwMEVDMDAwMDAwMzc3OQorOjEwMDUzMDAwMDIwNTAwRjQwMDAwMDAzNzAyMDUwMEZDMDAwMDAwMzc0RgorOjEwMDU0MDAwMDIwNTAwRTAwMDAwMDA0RDAyMDUwMEU4MDAwMDAwNDc0MQorOjEwMDU1MDAwMDIwNTAwRjAwMDAwMDA0NzAyMDUwMEY4MDAwMDAwNDcxNworOjEwMDU2MDAwMDIwNTAwRTQwMDAwMDA2RDAyMDUwMEVDMDAwMDAwNjdEOQorOjEwMDU3MDAwMDIwNTAwRjQwMDAwMDA2NzAyMDUwMEZDMDAwMDAwNjdBRgorOjEwMDU4MDAwMDIwNTAwRTAwMDAwMDA1RDAyMDUwMEU4MDAwMDAwNTdFMQorOjEwMDU5MDAwMDIwNTAwRjAwMDAwMDA1NzAyMDUwMEY4MDAwMDAwNTdCNworOjEwMDVBMDAwMDIwNTAwRTQwMDAwMDA3RDAyMDUwMEVDMDAwMDAwNzc3OQorOjEwMDVCMDAwMDIwNTAwRjQwMDAwMDA3NzAyMDUwMEZDMDAwMDAwNzc0RgorOjEwMDVDMDAwMDQwNjEwMDAwMjAwMDAyMDAyMDYwMERDMDAwMDAwMDEwQQorOjEwMDVEMDAwMDEwNjAwRDgwMDAwMDAwMDA0MDYwMjAwMDAwMzAyMjAwQgorOjEwMDVFMDAwMDIwNjAwREMwMDAwMDAwMDAxMDYwMEI4MDAwMDAwMDA2OAorOjEwMDVGMDAwMDEwNjAwQzgwMDAwMDAwMDAxMDYwMEJDMDAwMDAwMDA2OQorOjEwMDYwMDAwMDEwNjAwQ0MwMDAwMDAwMDA3MTgwNDAwMDBBOTAwMDA0QgorOjEwMDYxMDAwMDgxODA3QzgwMDA3MDIyMzA3MUMwMDAwMkMyRDAwMDA0MworOjEwMDYyMDAwMDcxQzgwMDAzOEEyMEIwQzA3MUQwMDAwMjhFRjE5MzVBRAorOjEwMDYzMDAwMDgxRDY4MTA1MkZFMDIyNTAxMTgwMDAwMDAwMDAwMDA4RAorOjEwMDY0MDAwMDExODAwMDQwMDAwMDAwMDAxMTgwMDA4MDAwMDAwMDA2QworOjEwMDY1MDAwMDExODAwMEMwMDAwMDAwMDAxMTgwMDEwMDAwMDAwMDA0QworOjEwMDY2MDAwMDExODAwMTQwMDAwMDAwMDAyMTgwMDIwMDAwMDAwMDEyMgorOjEwMDY3MDAwMDIxODAwMjQwMDAwMDAwMjAyMTgwMDI4MDAwMDAwMDNGNQorOjEwMDY4MDAwMDIxODAwMkMwMDAwMDAwMDAyMTgwMDMwMDAwMDAwMDRENgorOjEwMDY5MDAwMDIxODAwMzQwMDAwMDAwMTAyMTgwMDM4MDAwMDAwMDBCOQorOjEwMDZBMDAwMDIxODAwM0MwMDAwMDAwMTAyMTgwMDQwMDAwMDAwMDQ5NQorOjEwMDZCMDAwMDIxODAwNDQwMDAwMDAwMDAyMTgwMDQ4MDAwMDAwMDE3OQorOjEwMDZDMDAwMDIxODAwNEMwMDAwMDAwMzAyMTgwMDUwMDAwMDAwMDA1NworOjEwMDZEMDAwMDIxODAwNTQwMDAwMDAwMTAyMTgwMDU4MDAwMDAwMDQzNQorOjEwMDZFMDAwMDIxODAwNUMwMDAwMDAwMDAyMTgwMDYwMDAwMDAwMDExOQorOjEwMDZGMDAwMDIxODAwNjQwMDAwMDAwMzAyMTgwMDY4MDAwMDAwMDBGNworOjEwMDcwMDAwMDIxODAwNkMwMDAwMDAwMTAyMTgwMDcwMDAwMDAwMDRENAorOjEwMDcxMDAwMDIxODAwNzQwMDAwMDAwMDAyMTgwMDc4MDAwMDAwMDRCNQorOjEwMDcyMDAwMDIxODAwN0MwMDAwMDAwMzA2MTgwMDgwMDAwMDAwMDI5MAorOjEwMDczMDAwMDIxODAwQTQwMDAwM0ZGRjAyMTgwMEE4MDAwMDAzRkZGOQorOjEwMDc0MDAwMDIxODAyMjQwMDAwMDAwMDAyMTgwMjM0MDAwMDAwMDAxOQorOjEwMDc1MDAwMDIxODAyNEMwMDAwMDAwMDAyMTgwMkU0MDAwMDAwRkYzMgorOjEwMDc2MDAwMDYxODEwMDAwMDAwMDQwMDAyMUI4QkMwMDAwMDAwMDFFRQorOjEwMDc3MDAwMDIxQjgwMDAwMDAwMDAzNDAyMUI4MDQwMDAwMDAwMThCMworOjEwMDc4MDAwMDIxQjgwODAwMDAwMDAwQzAyMUI4MEMwMDAwMDAwMjBDMworOjEwMDc5MDAwMEMxQjgzMDAwMDA3QTEyMDBBMUI4MzAwMDAwMDAxMzgwNgorOjEwMDdBMDAwMEIxQjgzMDAwMDAwMTM4ODAyMUI4M0MwMDAwMDAxRjRCMAorOjEwMDdCMDAwMDIxQjE0ODAwMDAwMDAwMTBBMUIxNDgwMDAwMDAwMDBDRQorOjEwMDdDMDAwMDYxQTEwMDAwMDAwMDNCMzA0MUExRUNDMDAwMTAyMjcxMQorOjEwMDdEMDAwMDYxQUEwMjAwMDAwMDBDODA2MUFBMDAwMDAwMDAwMDJBRgorOjEwMDdFMDAwMDIxQTFFRDAwMDAwMDAwMDA2MUExRUQ4MDAwMDAwMDZFMworOjEwMDdGMDAwMDYxQTM2RTgwMDAwMDAwNDA2MUEzNkUwMDAwMDAwMDI3RgorOjEwMDgwMDAwMDYxQTUwMDAwMDAwMDAwMjA2MUE1MDA4MDAwMDAwMDRGQQorOjEwMDgxMDAwMDYxQTUwMTgwMDAwMDAwNDA2MUE1MDI4MDAwMDAwMDRCMAorOjEwMDgyMDAwMDYxQTUwMzgwMDAwMDAwNDA2MUE1MDQ4MDAwMDAwMDQ2MAorOjEwMDgzMDAwMDYxQTUwNTgwMDAwMDAwNDA2MUE1MDY4MDAwMDAwMDQxMAorOjEwMDg0MDAwMDYxQTUwNzgwMDAwMDAwMjA0MUE0MDQwMDAwMjAyMjhGNAorOjEwMDg1MDAwMDYxQTQwMDAwMDAwMDAwMjA2MUE0MDA4MDAwMDAwMDJDQworOjEwMDg2MDAwMDQxQTYyQzAwMDIwMDIyQTA2MUFEMTAwMDAwMDAwMDIwOQorOjEwMDg3MDAwMDYxQTIwMDAwMDAwMDEyNDA2MUFCMDAwMDAwMDAwMjgxQgorOjEwMDg4MDAwMDYxQUIxNDAwMDAwMDAwQzA2MUEzMzAwMDAwMDAwMTRFNAorOjEwMDg5MDAwMDYxQTMzQTAwMDAwMDA2ODA2MUE4MTA4MDAwMDAwMDI1MgorOjEwMDhBMDAwMDYxQUQxQzgwMDAwMDAwMjA2MUFEMUQ4MDAwMDAwMjBBNAorOjEwMDhCMDAwMDYxQTI0OTAwMDAwMDEyNDA2MUFCMEEwMDAwMDAwMjhBNworOjEwMDhDMDAwMDYxQUIxNzAwMDAwMDAwQzA2MUEzMzUwMDAwMDAwMTQyNAorOjEwMDhEMDAwMDYxQTM1NDAwMDAwMDA2ODA2MUE4MTEwMDAwMDAwMDI2OAorOjEwMDhFMDAwMDYxQUQxRDAwMDAwMDAwMjA2MUFEMjU4MDAwMDAwMjBEQgorOjEwMDhGMDAwMDIxQTI5MjAwMDAwMDAwMDA2MUEzMDAwMDAwMDAwMDI0MQorOjEwMDkwMDAwMDQxQTMwMDgwMDA1MDI0QTA2MUEzMDFDMDAwMDAwMDlDQgorOjEwMDkxMDAwMDYxQTMyMDAwMDAwMDAwODA2MUE1MDAwMDAwMDAwMDIwQgorOjEwMDkyMDAwMDYxQTUwODAwMDAwMDAxMjA2MUE0MDAwMDAwMDAwMDI2MworOjEwMDkzMDAwMDYxQUQwQzAwMDAwMDAwMjAyMUEyOTI0MDAwMDAwMDA5QworOjEwMDk0MDAwMDYxQTMwNDAwMDAwMDAwMjA0MUEzMDQ4MDAwNTAyNEYyOQorOjEwMDk1MDAwMDYxQTMwNUMwMDAwMDAwOTA2MUEzMjIwMDAwMDAwMDg2OAorOjEwMDk2MDAwMDYxQTUwMTAwMDAwMDAwMjA2MUE1MEM4MDAwMDAwMTJCQgorOjEwMDk3MDAwMDYxQTQwMDgwMDAwMDAwMjA2MUFEMEM4MDAwMDAwMDI1MworOjEwMDk4MDAwMDIxQTI5MjgwMDAwMDAwMDA2MUEzMDgwMDAwMDAwMDIyOAorOjEwMDk5MDAwMDQxQTMwODgwMDA1MDI1NDA2MUEzMDlDMDAwMDAwMDkzMQorOjEwMDlBMDAwMDYxQTMyNDAwMDAwMDAwODA2MUE1MDIwMDAwMDAwMDIxQgorOjEwMDlCMDAwMDYxQTUxMTAwMDAwMDAxMjA0MUE0MDEwMDAwMjAyNTlEOQorOjEwMDlDMDAwMDYxQUQwRDAwMDAwMDAwMjAyMUEyOTJDMDAwMDAwMDBGNAorOjEwMDlEMDAwMDYxQTMwQzAwMDAwMDAwMjA0MUEzMEM4MDAwNTAyNUI4RAorOjEwMDlFMDAwMDYxQTMwREMwMDAwMDAwOTA2MUEzMjYwMDAwMDAwMDgxOAorOjEwMDlGMDAwMDYxQTUwMzAwMDAwMDAwMjA2MUE1MTU4MDAwMDAwMTI3QQorOjEwMEEwMDAwMDQxQTQwMTgwMDAyMDI2MDA2MUFEMEQ4MDAwMDAwMDI0MgorOjEwMEExMDAwMDIxQTI5MzAwMDAwMDAwMDA2MUEzMTAwMDAwMDAwMDIwRQorOjEwMEEyMDAwMDQxQTMxMDgwMDA1MDI2MjA2MUEzMTFDMDAwMDAwMDk5MAorOjEwMEEzMDAwMDYxQTMyODAwMDAwMDAwODA2MUE1MDQwMDAwMDAwMDIyQQorOjEwMEE0MDAwMDYxQTUxQTAwMDAwMDAxMjA0MUE0MDIwMDAwMjAyNjc5QQorOjEwMEE1MDAwMDYxQUQwRTAwMDAwMDAwMjAyMUEyOTM0MDAwMDAwMDA0QgorOjEwMEE2MDAwMDYxQTMxNDAwMDAwMDAwMjA0MUEzMTQ4MDAwNTAyNjlFQworOjEwMEE3MDAwMDYxQTMxNUMwMDAwMDAwOTA2MUEzMkEwMDAwMDAwMDhDNgorOjEwMEE4MDAwMDYxQTUwNTAwMDAwMDAwMjA2MUE1MUU4MDAwMDAwMTIzOQorOjEwMEE5MDAwMDQxQTQwMjgwMDAyMDI2RTA2MUFEMEU4MDAwMDAwMDI4NAorOjEwMEFBMDAwMDIxQTI5MzgwMDAwMDAwMDA2MUEzMTgwMDAwMDAwMDJGNgorOjEwMEFCMDAwMDQxQTMxODgwMDA1MDI3MDA2MUEzMTlDMDAwMDAwMDlGMgorOjEwMEFDMDAwMDYxQTMyQzAwMDAwMDAwODA2MUE1MDYwMDAwMDAwMDIzQQorOjEwMEFEMDAwMDYxQTUyMzAwMDAwMDAxMjA0MUE0MDMwMDAwMjAyNzU1QgorOjEwMEFFMDAwMDYxQUQwRjAwMDAwMDAwMjAyMUEyOTNDMDAwMDAwMDBBMworOjEwMEFGMDAwMDYxQTMxQzAwMDAwMDAwMjA0MUEzMUM4MDAwNTAyNzc0RQorOjEwMEIwMDAwMDYxQTMxREMwMDAwMDAwOTA2MUEzMkUwMDAwMDAwMDg3NQorOjEwMEIxMDAwMDYxQTUwNzAwMDAwMDAwMjA2MUE1Mjc4MDAwMDAwMTJGNworOjEwMEIyMDAwMDQxQTQwMzgwMDAyMDI3QzA2MUFEMEY4MDAwMDAwMDJDNQorOjEwMEIzMDAwMDIwMEEyOTQwNzFEMjkxMTAyMDBBMjk4MDAwMDAwMDBFMworOjEwMEI0MDAwMDIwMEEyOUMwMDlDMDQyNDAyMDBBMkEwMDAwMDAwMDA1RAorOjEwMEI1MDAwMDIwMEEyQTQwMDAwMDIwOTAyMDBBMjcwMDAwMDAwMDAyRQorOjEwMEI2MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDA1OQorOjEwMEI3MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDA0OQorOjEwMEI4MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDBBMjcwMDAwMDAwMDAzOQorOjEwMEI5MDAwMDIwMEEyNzQwMDAwMDAwMDAyMDEwMEI0MDAwMDAwMDE4NQorOjEwMEJBMDAwMDIwMTAwQjgwMDAwMDAwMTAyMDEwMERDMDAwMDAwMDFBOQorOjEwMEJCMDAwMDIwMTAxMDAwMDAwMDAwMTAyMDEwMTA0MDAwMDAwMDEyNworOjEwMEJDMDAwMDIwMTAwN0MwMDMwMDAwMDAyMDEwMDg0MDAwMDAwMjhDNworOjEwMEJEMDAwMDIwMTAwOEMwMDAwMDAwMDAyMDEwMTMwMDAwMDAwMDQ0RQorOjEwMEJFMDAwMDIwMTAyNUMwMDAwMDAwMTAyMDEwMzI4MDAwMDAwMDA3NQorOjEwMEJGMDAwMDIwMTYwNzAwMDAwMDAwNzAyMDE2MDgwMDAwMDAwMDEzNworOjEwMEMwMDAwMDIwMTA1NTQwMDAwMDAzMDAyMDEwMEM0MDAwMDAwMDE5MAorOjEwMEMxMDAwMDIwMTAwQ0MwMDAwMDAwMTAyMDEwMEY4MDAwMDAwMDEwOAorOjEwMEMyMDAwMDIwMTAwRjAwMDAwMDAwMTAyMDEwMDgwMDAzMDAwMDAxRAorOjEwMEMzMDAwMDIwMTAwODgwMDAwMDAyODAyMDEwMDkwMDAwMDAwMDA2RQorOjEwMEM0MDAwMDIwMTAxMzQwMDAwMDAwNDAyMDEwMkRDMDAwMDAwMDE4NgorOjEwMEM1MDAwMDIwMTAzMkMwMDAwMDAwMDAyMDE2MDc0MDAwMDAwMDc4NAorOjEwMEM2MDAwMDIwMTYwODQwMDAwMDAwMTAyMDEwNTY0MDAwMDAwMzAwMAorOjEwMEM3MDAwMDIwMTAwQzgwMDAwMDAwMTAyMDEwMEQwMDAwMDAwMDFENAorOjEwMEM4MDAwMDIwMTAwRkMwMDAwMDAwMTAyMDEwMEY0MDAwMDAwMDE2QworOjEwMEM5MDAwMDIwQzEwMDAwMDAwMDAyMDAyMEMyMDA4MDAwMDAyMTFDRAorOjEwMENBMDAwMDIwQzIwMEMwMDAwMDIwMDAyMEMyMDEwMDAwMDAyMDRDNAorOjEwMENCMDAwMDIwQzIwMUMwMDAwRkZGRjAyMEMyMDIwMDAwMEZGRkZBMAorOjEwMENDMDAwMDIwQzIwMjQwMDAwRkZGRjAyMEMyMDI4MDAwMEZGRkY4MAorOjEwMENEMDAwMDYwQzIwMzgwMDAwMDAwMjAyMEMyMDQwMDAwMDAwMzQwNgorOjEwMENFMDAwMDIwQzIwNDQwMDAwMDAzNTAyMEMyMDQ4MDAwMDAwMjBDNworOjEwMENGMDAwMDIwQzIwNEMwMDAwMDAyMTAyMEMyMDUwMDAwMDAwMjJCOQorOjEwMEQwMDAwMDIwQzIwNTQwMDAwMDAyMzAyMEMyMDU4MDAwMDAwMjQ5NAorOjEwMEQxMDAwMDIwQzIwNUMwMDAwMDAyNTAyMEMyMDYwMDAwMDAwMjY3MAorOjEwMEQyMDAwMDIwQzIwNjQwMDAwMDAyNzAyMEMyMDY4MDAwMDAwMjg0QworOjEwMEQzMDAwMDIwQzIwNkMwMDAwMDAyOTAyMEMyMDcwMDAwMDAwMkEyOAorOjEwMEQ0MDAwMDIwQzIwNzQwMDAwMDAyQjA2MEMyMDc4MDAwMDAwNTZENgorOjEwMEQ1MDAwMDIwQzIxRDAwMDAwMDAwMTAyMEMyMUQ0MDAwMDAwMDE4RgorOjEwMEQ2MDAwMDIwQzIxRDgwMDAwMDAwMTAyMEMyMURDMDAwMDAwMDE2RgorOjEwMEQ3MDAwMDIwQzIxRTAwMDAwMDAwMTAyMEMyMUU0MDAwMDAwMDE0RgorOjEwMEQ4MDAwMDIwQzIxRTgwMDAwMDAwMTAyMEMyMUVDMDAwMDAwMDEyRgorOjEwMEQ5MDAwMDIwQzIxRjAwMDAwMDAwMTAyMEMyMUY0MDAwMDAwMDEwRgorOjEwMERBMDAwMDYwQzIxRjgwMDAwMDAxMDAyMEMyMjM4MDdGRkZGRkY5QworOjEwMERCMDAwMDIwQzIyM0MwMDAwMDAzRjAyMEMyMjQwMDdGRkZGRkYxNAorOjEwMERDMDAwMDIwQzIyNDQwMDAwMDAwRjAxMEMyMjQ4MDAwMDAwMDAyOQorOjEwMEREMDAwMDEwQzIyNEMwMDAwMDAwMDAxMEMyMjUwMDAwMDAwMDAxOQorOjEwMERFMDAwMDEwQzIyNTQwMDAwMDAwMDAxMEMyMjU4MDAwMDAwMDBGOQorOjEwMERGMDAwMDEwQzIyNUMwMDAwMDAwMDAxMEMyMjYwMDAwMDAwMDBEOQorOjEwMEUwMDAwMDEwQzIyNjQwMDAwMDAwMDAxMEMyMjY4MDAwMDAwMDBCOAorOjEwMEUxMDAwMDEwQzIyNkMwMDAwMDAwMDAxMEMyMjcwMDAwMDAwMDA5OAorOjEwMEUyMDAwMDEwQzIyNzQwMDAwMDAwMDAxMEMyMjc4MDAwMDAwMDA3OAorOjEwMEUzMDAwMDEwQzIyN0MwMDAwMDAwMDBDMEMyMDAwMDAwMDAzRThFNAorOjEwMEU0MDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEEyQQorOjEwMEU1MDAwMDIwQzQwMDgwMDAwMDQxMTAyMEM0MDBDMDAwMDA0MDBDOQorOjEwMEU2MDAwMDIwQzQwMTAwMDAwMDQwNDAyMEM0MDE0MDAwMDA0MjE5NQorOjEwMEU3MDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkY5RQorOjEwMEU4MDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkY3RQorOjEwMEU5MDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMDVGNworOjEwMEVBMDAwMDYwQzQwNDAwMDAwMDAwMjAyMEM0MDQ4MDAwMDAwMEEwRQorOjEwMEVCMDAwMDIwQzQwNEMwMDAwMDBGMDA2MEM0MDUwMDAwMDAwMUZFNworOjEwMEVDMDAwMDIwQzQwQ0MwMDAwMDAwMTA2MEM0MEQwMDAwMDAwM0FBQgorOjEwMEVEMDAwMDIwQzQxQjgwMDAwMDAwMTA2MEM0MUJDMDAwMDAwMDNGOAorOjEwMEVFMDAwMDIwQzQxQzgwMDAwMDAwMTAyMEM0MUNDMDAwMDAwMDFDRQorOjEwMEVGMDAwMDYwQzQxRDAwMDAwMDAxQTAyMEM0MjM4MDdGRkZGRkYyOQorOjEwMEYwMDAwMDIwQzQyM0MwMDAwMDAzRjAyMEM0MjQwMDdGRkZGRkY4MgorOjEwMEYxMDAwMDIwQzQyNDQwMDAwMDAwRjAxMEM0MjQ4MDAwMDAwMDA5NworOjEwMEYyMDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDA4NworOjEwMEYzMDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDA2NworOjEwMEY0MDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDA0NworOjEwMEY1MDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDAyNworOjEwMEY2MDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDAwNworOjEwMEY3MDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDBFNworOjEwMEY4MDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDBDNworOjEwMEY5MDAwMEMwQzQwMDAwMDAwMDNFODBBMEM0MDAwMDAwMDAwMDFCNworOjEwMEZBMDAwMEIwQzQwMDAwMDAwMDAwQTAyMEQwMDQ0MDAwMDAwMzI1QgorOjEwMEZCMDAwMDIwRDAwOEMwMjE1MDAyMDAyMEQwMDkwMDIxNTAwMjA4OQorOjEwMEZDMDAwMDIwRDAwOTQwODEwMDAwMDAyMEQwMDk4MDAwMDAwMzM4QworOjEwMEZEMDAwMDIwRDAwOUMwMDAwMDAwMjAyMEQwMEEwMDAwMDAwMDBCNQorOjEwMEZFMDAwMDIwRDAwQTQwMDAwMDAwNTAyMEQwMEE4MDAwMDAwMDU4RAorOjEwMEZGMDAwMDYwRDAwQUMwMDAwMDAwMjAyMEQwMEI0MDAwMDAwMDI2QgorOjEwMTAwMDAwMDIwRDAwQjgwMDAwMDAwMzAyMEQwMEJDMDAwMDAwMDI0OQorOjEwMTAxMDAwMDIwRDAwQzAwMDAwMDAwMTAyMEQwMEM4MDAwMDAwMDIyNworOjEwMTAyMDAwMDIwRDAwQ0MwMDAwMDAwMjAyMEQwMTA4MDAwMDAwMDFDQQorOjEwMTAzMDAwMDIwRDAxNUMwMDAwMDAwMTAyMEQwMTY0MDAwMDAwMDFDRQorOjEwMTA0MDAwMDIwRDAxNjgwMDAwMDAwMjAyMEQwMjA0MDAwMDAwMDExMAorOjEwMTA1MDAwMDIwRDAyMEMwMDAwMDAyMDAyMEQwMjEwMDAwMDAwNDBGMgorOjEwMTA2MDAwMDIwRDAyMTQwMDAwMDA0MDAyMEQwMjIwMDAwMDAwMDNFNworOjEwMTA3MDAwMDIwRDAyMjQwMDAwMDAxODA2MEQwMjgwMDAwMDAwMTI3QworOjEwMTA4MDAwMDQwRDAzMDAwMDI0MDI3RTAyMEQwMDRDMDAwMDAwMDE0QworOjEwMTA5MDAwMDIwRDAwNTAwMDAwMDAwMjAyMEQwMDU0MDAwMDAwMDg4NAorOjEwMTBBMDAwMDIwRDAwNTgwMDAwMDAwODA2MEQwMDVDMDAwMDAwMDQ1RQorOjEwMTBCMDAwMDIwRDAwQzQwMDAwMDAwNDAyMEQwMDA0MDAwMDAwMDE0NQorOjEwMTBDMDAwMDIwRDAwMDgwMDAwMDAwMTAyMEQwMDBDMDAwMDAwMDFFQworOjEwMTBEMDAwMDIwRDAwMTAwMDAwMDAwMTAyMEQwMDE0MDAwMDAwMDFDQworOjEwMTBFMDAwMDIwRDAwMTgwMDAwMDAwMTAyMEQwMDFDMDAwMDAwMDFBQworOjEwMTBGMDAwMDIwRDAwMjAwMDAwMDAwMTAyMEQwMDI0MDAwMDAwMDE4QworOjEwMTEwMDAwMDIwRDAwMjgwMDAwMDAwMTAyMEQwMDJDMDAwMDAwMDE2QgorOjEwMTExMDAwMDIwRDAwMzAwMDAwMDAwMTAyMEQwMDM0MDAwMDAwMDE0QgorOjEwMTEyMDAwMDIwRDAwMzgwMDAwMDAwMTAyMEQwMDNDMDAwMDAwMDEyQgorOjEwMTEzMDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTFDMDAwMDAwMEE0QworOjEwMTE0MDAwMDIwRDAxMjQwMDAwMDAwNzAyMEQwMTJDMDAwMDAwMDcyMQorOjEwMTE1MDAwMDIwRDAxMzQwMDAwMDAwQzAyMEQwMTNDMDAwMDAwMEJFOAorOjEwMTE2MDAwMDIwRDAxNDQwMDAwMDAwNzAyMEQwMTE4MDAwMDAwMjlEMworOjEwMTE3MDAwMDIwRDAxMjAwMDAwMDAyQTAyMEQwMTI4MDAwMDAwMjdCNgorOjEwMTE4MDAwMDIwRDAxMzAwMDAwMDAyNzAyMEQwMTM4MDAwMDAwMkM4NAorOjEwMTE5MDAwMDIwRDAxNDAwMDAwMDAyQjAyMEQwMTQ4MDAwMDAwMjc1NQorOjEwMTFBMDAwMDIwRDAxMTQwMDAwMDAxOTAyMEQwMTFDMDAwMDAwMUFCQworOjEwMTFCMDAwMDIwRDAxMjQwMDAwMDAxNzAyMEQwMTJDMDAwMDAwMTc5MQorOjEwMTFDMDAwMDIwRDAxMzQwMDAwMDAxQzAyMEQwMTNDMDAwMDAwMUI1OAorOjEwMTFEMDAwMDIwRDAxNDQwMDAwMDAxNzAyMEQwMTE4MDAwMDAwMzk0MworOjEwMTFFMDAwMDIwRDAxMjAwMDAwMDAzQTAyMEQwMTI4MDAwMDAwMzcyNgorOjEwMTFGMDAwMDIwRDAxMzAwMDAwMDAzNzAyMEQwMTM4MDAwMDAwM0NGNAorOjEwMTIwMDAwMDIwRDAxNDAwMDAwMDAzQjAyMEQwMTQ4MDAwMDAwMzdDNAorOjEwMTIxMDAwMDIwRDAxMTQwMDAwMDA0OTAyMEQwMTFDMDAwMDAwNEFFQgorOjEwMTIyMDAwMDIwRDAxMjQwMDAwMDA0NzAyMEQwMTJDMDAwMDAwNDdDMAorOjEwMTIzMDAwMDIwRDAxMzQwMDAwMDA0QzAyMEQwMTNDMDAwMDAwNEI4NworOjEwMTI0MDAwMDIwRDAxNDQwMDAwMDA0NzAyMEQwMTE4MDAwMDAwNjk3MgorOjEwMTI1MDAwMDIwRDAxMjAwMDAwMDA2QTAyMEQwMTI4MDAwMDAwNjc1NQorOjEwMTI2MDAwMDIwRDAxMzAwMDAwMDA2NzAyMEQwMTM4MDAwMDAwNkMyMworOjEwMTI3MDAwMDIwRDAxNDAwMDAwMDA2QjAyMEQwMTQ4MDAwMDAwNjdGNAorOjEwMTI4MDAwMDIwRDAxMTQwMDAwMDA1OTAyMEQwMTFDMDAwMDAwNUE1QgorOjEwMTI5MDAwMDIwRDAxMjQwMDAwMDA1NzAyMEQwMTJDMDAwMDAwNTczMAorOjEwMTJBMDAwMDIwRDAxMzQwMDAwMDA1QzAyMEQwMTNDMDAwMDAwNUJGNworOjEwMTJCMDAwMDIwRDAxNDQwMDAwMDA1NzAyMEQwMTE4MDAwMDAwNzlFMgorOjEwMTJDMDAwMDIwRDAxMjAwMDAwMDA3QTAyMEQwMTI4MDAwMDAwNzdDNQorOjEwMTJEMDAwMDIwRDAxMzAwMDAwMDA3NzAyMEQwMTM4MDAwMDAwN0M5MworOjEwMTJFMDAwMDIwRDAxNDAwMDAwMDA3QjAyMEQwMTQ4MDAwMDAwNzc2NAorOjEwMTJGMDAwMDIwRTAwNEMwMDAwMDAzMjAyMEUwMDk0MDIxNTAwMjA4NQorOjEwMTMwMDAwMDIwRTAwOTgwMjE1MDAyMDAyMEUwMDlDMDAwMDAwMzAyMgorOjEwMTMxMDAwMDIwRTAwQTAwODEwMDAwMDAyMEUwMEE0MDAwMDAwMzMxRQorOjEwMTMyMDAwMDIwRTAwQTgwMDAwMDAzMDAyMEUwMEFDMDAwMDAwMzFFOAorOjEwMTMzMDAwMDIwRTAwQjAwMDAwMDAwMjAyMEUwMEI0MDAwMDAwMDQyMworOjEwMTM0MDAwMDIwRTAwQjgwMDAwMDAwMDAyMEUwMEJDMDAwMDAwMDIwNworOjEwMTM1MDAwMDIwRTAwQzAwMDAwMDAwMjAyMEUwMEM0MDAwMDAwMDBFNworOjEwMTM2MDAwMDIwRTAwQzgwMDAwMDAwMjAyMEUwMENDMDAwMDAwMDdDMAorOjEwMTM3MDAwMDIwRTAwRDAwMDAwMDAwMjAyMEUwMEQ0MDAwMDAwMDJBNQorOjEwMTM4MDAwMDIwRTAwRDgwMDAwMDAwMTAyMEUwMEU0MDAwMDAwMDE3RgorOjEwMTM5MDAwMDIwRTAxNDQwMDAwMDAwMTAyMEUwMTRDMDAwMDAwMDE5OQorOjEwMTNBMDAwMDIwRTAxNTAwMDAwMDAwMjAyMEUwMjA0MDAwMDAwMDFDMworOjEwMTNCMDAwMDIwRTAyMEMwMDAwMDA0MDAyMEUwMjEwMDAwMDAwNDA2RAorOjEwMTNDMDAwMDIwRTAyMUMwMDAwMDAwNDAyMEUwMjIwMDAwMDAwMjA5OQorOjEwMTNEMDAwMDIwRTAyMjQwMDAwMDAwRTAyMEUwMjI4MDAwMDAwMUI3NAorOjEwMTNFMDAwMDYwRTAzMDAwMDAwMDAxMjA0MEUwMjgwMDAxQjAyQTI4MQorOjEwMTNGMDAwMDIwRTAwNTQwMDAwMDAwQzAyMEUwMDU4MDAwMDAwMDcwRQorOjEwMTQwMDAwMDIwRTAwNUMwMDAwMDAwRjAyMEUwMDYwMDAwMDAwMTBFMQorOjEwMTQxMDAwMDIwRTAwNjQwMDAwMDAwQjA2MEUwMDY4MDAwMDAwMDNDRQorOjEwMTQyMDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMDA0MDAwMDAwMDFCOAorOjEwMTQzMDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDE3NgorOjEwMTQ0MDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDE1NgorOjEwMTQ1MDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDEzNgorOjEwMTQ2MDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDExNgorOjEwMTQ3MDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDFGNgorOjEwMTQ4MDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDFENgorOjEwMTQ5MDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDFCNgorOjEwMTRBMDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDE5NgorOjEwMTRCMDAwMDIwRTAxMTAwMDAwMDAwRjAyMEUwMTE4MDAwMDAwMEVDNQorOjEwMTRDMDAwMDIwRTAxMjAwMDAwMDAwMDAyMEUwMTI4MDAwMDAwMDBCMgorOjEwMTREMDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTFDMDAwMDAwMkU1RAorOjEwMTRFMDAwMDIwRTAxMjQwMDAwMDAwMDAyMEUwMTJDMDAwMDAwMDA4QQorOjEwMTRGMDAwMDIwRTAxMTAwMDAwMDAxRjAyMEUwMTE4MDAwMDAwMUU2NQorOjEwMTUwMDAwMDIwRTAxMjAwMDAwMDAwMDAyMEUwMTI4MDAwMDAwMDA3MQorOjEwMTUxMDAwMDIwRTAxMTQwMDAwMDAzRjAyMEUwMTFDMDAwMDAwM0VGQworOjEwMTUyMDAwMDIwRTAxMjQwMDAwMDAwMDAyMEUwMTJDMDAwMDAwMDA0OQorOjEwMTUzMDAwMDIwRTAxMTAwMDAwMDA0RjAyMEUwMTE4MDAwMDAwNEVDNAorOjEwMTU0MDAwMDIwRTAxMjAwMDAwMDAwMDAyMEUwMTI4MDAwMDAwMDAzMQorOjEwMTU1MDAwMDIwRTAxMTQwMDAwMDA2RjAyMEUwMTFDMDAwMDAwNkU1QworOjEwMTU2MDAwMDIwRTAxMjQwMDAwMDAwMDAyMEUwMTJDMDAwMDAwMDAwOQorOjEwMTU3MDAwMDIwRTAxMTAwMDAwMDA1RjAyMEUwMTE4MDAwMDAwNUU2NAorOjEwMTU4MDAwMDIwRTAxMjAwMDAwMDAwMDAyMEUwMTI4MDAwMDAwMDBGMQorOjEwMTU5MDAwMDIwRTAxMTQwMDAwMDA3RjAyMEUwMTFDMDAwMDAwN0VGQworOjEwMTVBMDAwMDIwRTAxMjQwMDAwMDAwMDAyMEUwMTJDMDAwMDAwMDBDOQorOjEwMTVCMDAwMDczMDA0MDAwMEUxMDAwMDA4MzAwN0Q4MDAwNTAyQkQzNAorOjEwMTVDMDAwMDczNDAwMDAyRUNBMDAwMDA3MzQ4MDAwMzExQTBCQjMyNAorOjEwMTVEMDAwMDczNTAwMDAzNjhCMTdGQTA3MzU4MDAwMzlDNjI1OUQ4MAorOjEwMTVFMDAwMDczNjAwMDAxM0Q1MzQwRjA4MzYzMDcwMzlGMjAyQkZDOQorOjEwMTVGMDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDA4NQorOjEwMTYwMDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDA2NAorOjEwMTYxMDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDA0NAorOjEwMTYyMDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDIwRgorOjEwMTYzMDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDBFRgorOjEwMTY0MDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDFDRAorOjEwMTY1MDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDFCMQorOjEwMTY2MDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDA4RQorOjEwMTY3MDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDM2RQorOjEwMTY4MDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDE1MQorOjEwMTY5MDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDAyRQorOjEwMTZBMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDMwRQorOjEwMTZCMDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDFGMQorOjEwMTZDMDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDBDRQorOjEwMTZEMDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDNBQgorOjEwMTZFMDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDNGRkYyRQorOjEwMTZGMDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDBCNgorOjEwMTcwMDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDBGMQorOjEwMTcxMDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDA1NQorOjEwMTcyMDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUE2OQorOjEwMTczMDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTAyMQorOjEwMTc0MDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwN0ExMjA3QQorOjEwMTc1MDAwMEEzMzgzMDAwMDAwMDEzODBCMzM4MzAwMDAwMDEzODgzNAorOjEwMTc2MDAwMDIzMzgzQzAwMDAwMDFGNDBDMzM4MzgwMURDRDY1MDA3QgorOjEwMTc3MDAwMEEzMzgzODAwMDA0QzRCNDBCMzM4MzgwMDA0QzRCNDA5NQorOjEwMTc4MDAwMEEzMzE0ODAwMDAwMDAwMDAyMzMxNDgwMDAwMDAwMDFCRQorOjEwMTc5MDAwMDYzMjIwMDAwMDAwMDEwMjA2MzI4MDIwMDAwMDAwQzg0RQorOjEwMTdBMDAwMDYzMjgwMDAwMDAwMDAwMjA2MzIzREE4MDAwMDAwMDQ1RQorOjEwMTdCMDAwMDYzMjNEODAwMDAwMDAwOTA0MzIzREE0MDAwMTAyQzE1MAorOjEwMTdDMDAwMDYzMjNEMDAwMDAwMDAyMDA2MzI1MDAwMDAwMDA0MDBGOAorOjEwMTdEMDAwMDYzMjQwMDAwMDAwMDAwMjA0MzI0MDA4MDAwMTAyQzI0QworOjEwMTdFMDAwMDYzMjQwMEMwMDAwMDAwMzA2MzI0MEQ4MDAwMDAwMDIyMAorOjEwMTdGMDAwMDYzMjZCNjgwMDAwMDAwMjA0MzI2QjcwMDAwMjAyQzMwNAorOjEwMTgwMDAwMDYzMjZCMTAwMDAwMDAwMjA0MzI3NEMwMDAwMjAyQzVGMAorOjEwMTgxMDAwMDYzMkRBNDAwMDAwMDAwMjA2MzJFMDAwMDAwMDA4MDA1NAorOjEwMTgyMDAwMDIzMzA4MDAwMTAwMDAwMDA0MzMwQzAwMDAxMDAyQzc1RQorOjEwMTgzMDAwMDIzMzA4MDAwMDAwMDAwMDA0MzMwQzQwMDAxMDAyRDdGRgorOjEwMTg0MDAwMDYzMjI0NTAwMDAwMDBCNDA2MzIyQUQwMDAwMDAwMDIwNAorOjEwMTg1MDAwMDYzMjEwMDAwMDAwMDFBMDAyMzIzREI4MDAwMDAwMDA3NgorOjEwMTg2MDAwMDYzMjUwMDAwMDAwMDAyMDA2MzI1MTAwMDAwMDAwMjAyNworOjEwMTg3MDAwMDYzMjUyMDAwMDAwMDAyMDA2MzI1MzAwMDAwMDAwMjAxMworOjEwMTg4MDAwMDYzMjU0MDAwMDAwMDAyMDA2MzI1NTAwMDAwMDAwMjBGRgorOjEwMTg5MDAwMDYzMjU2MDAwMDAwMDAyMDA2MzI1NzAwMDAwMDAwMjBFQgorOjEwMThBMDAwMDYzMjU4MDAwMDAwMDAyMDA2MzI1OTAwMDAwMDAwMjBENworOjEwMThCMDAwMDYzMjVBMDAwMDAwMDAyMDA2MzI1QjAwMDAwMDAwMjBDMworOjEwMThDMDAwMDYzMjVDMDAwMDAwMDAyMDA2MzI1RDAwMDAwMDAwMjBBRgorOjEwMThEMDAwMDYzMjVFMDAwMDAwMDAyMDA2MzI1RjAwMDAwMDAwMjA5QgorOjEwMThFMDAwMDYzMjZCNzgwMDAwMDA1MjA2MzI2RTA4MDAwMDAwMENEMQorOjEwMThGMDAwMDYzMkRBODgwMDAwMDAwMjA2MzIyNzIwMDAwMDAwQjQxOQorOjEwMTkwMDAwMDYzMjJBRDgwMDAwMDAwMjA2MzIxNjgwMDAwMDAxQTAyQworOjEwMTkxMDAwMDIzMjNEQkMwMDAwMDAwMDA2MzI1MDgwMDAwMDAwMjA3MgorOjEwMTkyMDAwMDYzMjUxODAwMDAwMDAyMDA2MzI1MjgwMDAwMDAwMjA2NAorOjEwMTkzMDAwMDYzMjUzODAwMDAwMDAyMDA2MzI1NDgwMDAwMDAwMjA1MAorOjEwMTk0MDAwMDYzMjU1ODAwMDAwMDAyMDA2MzI1NjgwMDAwMDAwMjAzQworOjEwMTk1MDAwMDYzMjU3ODAwMDAwMDAyMDA2MzI1ODgwMDAwMDAwMjAyOAorOjEwMTk2MDAwMDYzMjU5ODAwMDAwMDAyMDA2MzI1QTgwMDAwMDAwMjAxNAorOjEwMTk3MDAwMDYzMjVCODAwMDAwMDAyMDA2MzI1QzgwMDAwMDAwMjAwMAorOjEwMTk4MDAwMDYzMjVEODAwMDAwMDAyMDA2MzI1RTgwMDAwMDAwMjBFQworOjEwMTk5MDAwMDYzMjVGODAwMDAwMDAyMDA2MzI2Q0MwMDAwMDAwNTI1QQorOjEwMTlBMDAwMDYzMjZFMzgwMDAwMDAwQzA2MzJEQTkwMDAwMDAwMDJBOQorOjEwMTlCMDAwMDIzMjJBMzAwMDAwMDAwMDA2MzI0MDE4MDAwMDAwMDIwNworOjEwMTlDMDAwMDYzMkQwMDAwMDAwMDAwNjAyMzIyQTM0MDAwMDAwMDA3NworOjEwMTlEMDAwMDYzMjQwMjgwMDAwMDAwMjA2MzJEMDE4MDAwMDAwMDYzRgorOjEwMTlFMDAwMDIzMjJBMzgwMDAwMDAwMDA2MzI0MDM4MDAwMDAwMDJBRgorOjEwMTlGMDAwMDYzMkQwMzAwMDAwMDAwNjAyMzIyQTNDMDAwMDAwMDAwRgorOjEwMUEwMDAwMDYzMjQwNDgwMDAwMDAwMjA2MzJEMDQ4MDAwMDAwMDZCRQorOjEwMUExMDAwMDIzMjJBNDAwMDAwMDAwMDA2MzI0MDU4MDAwMDAwMDI1NgorOjEwMUEyMDAwMDYzMkQwNjAwMDAwMDAwNjAyMzIyQTQ0MDAwMDAwMDBBNgorOjEwMUEzMDAwMDYzMjQwNjgwMDAwMDAwMjA2MzJEMDc4MDAwMDAwMDYzRQorOjEwMUE0MDAwMDIzMjJBNDgwMDAwMDAwMDA2MzI0MDc4MDAwMDAwMDJGRQorOjEwMUE1MDAwMDYzMkQwOTAwMDAwMDAwNjAyMzIyQTRDMDAwMDAwMDAzRQorOjEwMUE2MDAwMDYzMjQwODgwMDAwMDAwMjA2MzJEMEE4MDAwMDAwMDZCRQorOjEwMUE3MDAwMDcyMDA0MDAwMDkzMDAwMDA4MjAwNzgwMDAxMDAyRTcwMAorOjEwMUE4MDAwMDcyNDAwMDAyQURGMDAwMDA3MjQ4MDAwMkUwNTBBQjg4MgorOjEwMUE5MDAwMDgyNEU0QTA2MUQyMDJFOTAxMjAwMDAwMDAwMDAwMDA1NworOjEwMUFBMDAwMDEyMDAwMDQwMDAwMDAwMDAxMjAwMDA4MDAwMDAwMDBFOAorOjEwMUFCMDAwMDEyMDAwMEMwMDAwMDAwMDAxMjAwMDEwMDAwMDAwMDBDOAorOjEwMUFDMDAwMDEyMDAwMTQwMDAwMDAwMDAyMjAwMDIwMDAwMDAwMDE5RQorOjEwMUFEMDAwMDIyMDAwMjQwMDAwMDAwMjAyMjAwMDI4MDAwMDAwMDM3MQorOjEwMUFFMDAwMDIyMDAwMkMwMDAwMDAwMDAyMjAwMDMwMDAwMDAwMDQ1MgorOjEwMUFGMDAwMDIyMDAwMzQwMDAwMDAwMTAyMjAwMDM4MDAwMDAwMDAzNQorOjEwMUIwMDAwMDIyMDAwM0MwMDAwMDAwMTAyMjAwMDQwMDAwMDAwMDQxMAorOjEwMUIxMDAwMDIyMDAwNDQwMDAwMDAwMDAyMjAwMDQ4MDAwMDAwMDFGNAorOjEwMUIyMDAwMDIyMDAwNEMwMDAwMDAwMzAyMjAwMDUwMDAwMDAwMDBEMgorOjEwMUIzMDAwMDIyMDAwNTQwMDAwMDAwMTAyMjAwMDU4MDAwMDAwMDRCMAorOjEwMUI0MDAwMDIyMDAwNUMwMDAwMDAwMDAyMjAwMDYwMDAwMDAwMDE5NAorOjEwMUI1MDAwMDIyMDAwNjQwMDAwMDAwMzAyMjAwMDY4MDAwMDAwMDA3MgorOjEwMUI2MDAwMDIyMDAwNkMwMDAwMDAwMTAyMjAwMDcwMDAwMDAwMDQ1MAorOjEwMUI3MDAwMDIyMDAwNzQwMDAwMDAwMDAyMjAwMDc4MDAwMDAwMDQzMQorOjEwMUI4MDAwMDIyMDAwN0MwMDAwMDAwMzA2MjAwMDgwMDAwMDAwMDIwQworOjEwMUI5MDAwMDIyMDAwQTQwMDAwM0ZGRjAyMjAwMEE4MDAwMDAzRkY3NQorOjEwMUJBMDAwMDIyMDAyMjQwMDAwMDAwMDAyMjAwMjM0MDAwMDAwMDA5NQorOjEwMUJCMDAwMDIyMDAyNEMwMDAwMDAwMDAyMjAwMkU0MDAwMEZGRkZBRgorOjEwMUJDMDAwMDYyMDIwMDAwMDAwMDgwMDAyMjM4QkMwMDAwMDAwMDE1NgorOjEwMUJEMDAwMDIyMzgwMDAwMDAwMDAxMDAyMjM4MDQwMDAwMDAwMTI1OQorOjEwMUJFMDAwMDIyMzgwODAwMDAwMDAzMDAyMjM4MEMwMDAwMDAwMEUyRAorOjEwMUJGMDAwMDIyMzgzQzAwMDAwMDFGNDAyMjMxNDgwMDAwMDAwMDFDRQorOjEwMUMwMDAwMEEyMzE0ODAwMDAwMDAwMDA2MjIxMDAwMDAwMDAwNDI5OQorOjEwMUMxMDAwMDYyMjcwMjAwMDAwMDBDODA2MjI3MDAwMDAwMDAwMDJBQQorOjEwMUMyMDAwMDIyMjExRTgwMDAwMDAwMDA2MjIzMDAwMDAwMDAwQzA3RgorOjEwMUMzMDAwMDYyMjQwNzAwMDAwMDA4MDA2MjI1MjgwMDAwMDAwMDQ0RQorOjEwMUM0MDAwMDYyMjY3MDAwMDAwMDEwMDA2MjI5MDAwMDAwMDA0MDA0OAorOjEwMUM1MDAwMDQyMjZCMDgwMDIwMDJFQjAyMjMwODAwMDEzRkZGRkY3MworOjEwMUM2MDAwMDQyMzBDMDAwMDEwMDMwQjAyMjMwODAwMDAwMDAwMDBGNgorOjEwMUM3MDAwMDQyMzBDNDAwMDEwMDMxQjA2MjI4MTAwMDAwMDAwQTA3QQorOjEwMUM4MDAwMDYyMjg2MDAwMDAwMDA0MDA2MjI4QzAwMDAwMDAwM0M3NgorOjEwMUM5MDAwMDYyMkIwMDAwMDAwMDIwMDA2MjI4ODAwMDAwMDAwODAzQQorOjEwMUNBMDAwMDYyMjhERTAwMDAwMDAzQzA2MjI0MDQwMDAwMDAwMDZCNQorOjEwMUNCMDAwMDYyMjgzODAwMDAwMDBBMDA2MjI4NzAwMDAwMDAwNDA2QQorOjEwMUNDMDAwMDYyMjhDRjAwMDAwMDAzQzA2MjJCODAwMDAwMDAyMDA1MgorOjEwMUNEMDAwMDYyMjhBMDAwMDAwMDA4MDA2MjI4RUQwMDAwMDAwM0MxMAorOjEwMUNFMDAwMDYyMjQwNTgwMDAwMDAwNjA2MjI4MDAwMDAwMDAwMDg3RQorOjEwMUNGMDAwMDIyMjExNDgwMDAwMDAwMDA2MjIzMzAwMDAwMDAwMDIwQQorOjEwMUQwMDAwMDYyMjYwNDAwMDAwMDAzMDA2MjI4MDIwMDAwMDAwMDgwQgorOjEwMUQxMDAwMDIyMjExNEMwMDAwMDAwMDA2MjIzMzA4MDAwMDAwMDJERAorOjEwMUQyMDAwMDYyMjYxMDAwMDAwMDAzMDA2MjI4MDQwMDAwMDAwMDgwQQorOjEwMUQzMDAwMDIyMjExNTAwMDAwMDAwMDA2MjIzMzEwMDAwMDAwMDJCMQorOjEwMUQ0MDAwMDYyMjYxQzAwMDAwMDAzMDA2MjI4MDYwMDAwMDAwMDgwQQorOjEwMUQ1MDAwMDIyMjExNTQwMDAwMDAwMDA2MjIzMzE4MDAwMDAwMDI4NQorOjEwMUQ2MDAwMDYyMjYyODAwMDAwMDAzMDA2MjI4MDgwMDAwMDAwMDgwOQorOjEwMUQ3MDAwMDIyMjExNTgwMDAwMDAwMDA2MjIzMzIwMDAwMDAwMDI1OQorOjEwMUQ4MDAwMDYyMjYzNDAwMDAwMDAzMDA2MjI4MEEwMDAwMDAwMDgwOAorOjEwMUQ5MDAwMDIyMjExNUMwMDAwMDAwMDA2MjIzMzI4MDAwMDAwMDIyRAorOjEwMURBMDAwMDYyMjY0MDAwMDAwMDAzMDA2MjI4MEMwMDAwMDAwMDgwNworOjEwMURCMDAwMDIyMjExNjAwMDAwMDAwMDA2MjIzMzMwMDAwMDAwMDIwMQorOjEwMURDMDAwMDYyMjY0QzAwMDAwMDAzMDA2MjI4MEUwMDAwMDAwMDgwNworOjEwMUREMDAwMDIyMjExNjQwMDAwMDAwMDA2MjIzMzM4MDAwMDAwMDJENQorOjEwMURFMDAwMDYyMjY1ODAwMDAwMDAzMDAyMTYxMDAwMDAwMDAwMjg2NgorOjEwMURGMDAwMDIxNzAwMDgwMDAwMDAwMjAyMTcwMDJDMDAwMDAwMDM3OAorOjEwMUUwMDAwMDIxNzAwM0MwMDAwMDAwNDAyMTcwMDQ0MDAwMDAwMDgxNAorOjEwMUUxMDAwMDIxNzAwNDgwMDAwMDAwMjAyMTcwMDRDMDAwMDAwOTA2QQorOjEwMUUyMDAwMDIxNzAwNTAwMDAwMDA5MDAyMTcwMDU0MDA4MDAwOTAzQworOjEwMUUzMDAwMDIxNzAwNTgwODE0MDAwMDAyMTcwMDYwMDAwMDAwOEExMgorOjEwMUU0MDAwMDIxNzAwNjQwMDAwMDA4MDAyMTcwMDY4MDAwMDAwODE5MworOjEwMUU1MDAwMDIxNzAwNkMwMDAwMDA4MDAyMTcwMDcwMDAwMDAwMDZFRQorOjEwMUU2MDAwMDIxNzAwNzgwMDAwMDdEMDAyMTcwMDdDMDAwMDA3NkMwMgorOjEwMUU3MDAwMDIxNzAwMzgwMDdDMTAwNDAyMTcwMDA0MDAwMDAwMEY1NQorOjEwMUU4MDAwMDYxNjQwMjQwMDAwMDAwMjAyMTY0MDcwMDAwMDAwMUNFQworOjEwMUU5MDAwMDIxNjQyMDgwMDAwMDAwMTAyMTY0MjEwMDAwMDAwMDE3NAorOjEwMUVBMDAwMDIxNjQyMjAwMDAwMDAwMTAyMTY0MjI4MDAwMDAwMDEzNAorOjEwMUVCMDAwMDIxNjQyMzAwMDAwMDAwMTAyMTY0MjM4MDAwMDAwMDEwNAorOjEwMUVDMDAwMDIxNjQyNjAwMDAwMDAwMjBDMTY0MDFDMDAwM0QwOTA3NQorOjEwMUVEMDAwMEExNjQwMUMwMDAwMDA5QzBCMTY0MDFDMDAwMDA5QzRBMAorOjEwMUVFMDAwMDIxNjQwMzAwMDAwMDAwODAyMTY0MDM0MDAwMDAwMENDQQorOjEwMUVGMDAwMDIxNjQwMzgwMDAwMDAxMDAyMTY0MDQ0MDAwMDAwMjA4NgorOjEwMUYwMDAwMDIxNjQwMDAwMDAwMDAwMTAyMTY0MEQ4MDAwMDAwMDE0NworOjEwMUYxMDAwMDIxNjQwMDgwMDAwMDAwMTAyMTY0MDBDMDAwMDAwMDFGQgorOjEwMUYyMDAwMDIxNjQwMTAwMDAwMDAwMTAyMTY0MjQwMDAwMDAwMDBBRQorOjEwMUYzMDAwMDIxNjQyNDgwMDAwMDAwMDA2MTY0MjcwMDAwMDAwMDIyRgorOjEwMUY0MDAwMDIxNjQyNTAwMDAwMDAwMDAyMTY0MjU4MDAwMDAwMDAzNQorOjEwMUY1MDAwMDYxNjQyODAwMDAwMDAwMjAyMTY2MDA4MDAwMDA0MjRGOQorOjEwMUY2MDAwMDIxNjYwMEMwMDAwMDQxMDAyMTY2MDEwMDAwMDA0MTQzOQorOjEwMUY3MDAwMDIxNjYwMUMwMDAwRkZGRjAyMTY2MDIwMDAwMEZGRkYzOQorOjEwMUY4MDAwMDIxNjYwMjQwMDAwRkZGRjAyMTY2MDI4MDAwMEZGRkYxOQorOjEwMUY5MDAwMDIxNjYwMzgwMDAwMDAyMDAyMTY2MDNDMDAwMDAwMjA5RAorOjEwMUZBMDAwMDIxNjYwNDAwMDAwMDAzNDAyMTY2MDQ0MDAwMDAwMzU1NAorOjEwMUZCMDAwMDIxNjYwNDgwMDAwMDAyMzAyMTY2MDRDMDAwMDAwMjQ1NgorOjEwMUZDMDAwMDIxNjYwNTAwMDAwMDAyNTAyMTY2MDU0MDAwMDAwMjYzMgorOjEwMUZEMDAwMDIxNjYwNTgwMDAwMDAyNzAyMTY2MDVDMDAwMDAwMjkwRAorOjEwMUZFMDAwMDIxNjYwNjAwMDAwMDAyQTAyMTY2MDY0MDAwMDAwMkJFOAorOjEwMUZGMDAwMDIxNjYwNjgwMDAwMDAyQzAyMTY2MDZDMDAwMDAwMkRDNAorOjEwMjAwMDAwMDYxNjYwNzAwMDAwMDA1MjAyMTY2MUI4MDAwMDAwMDE2MAorOjEwMjAxMDAwMDYxNjYxQkMwMDAwMDAxRjAyMTY2MjM4MDdGRkZGRkZCMgorOjEwMjAyMDAwMDIxNjYyM0MwMDAwMDAzRjAyMTY2MjQwMDdGRkZGRkZGRAorOjEwMjAzMDAwMDIxNjYyNDQwMDAwMDAwRjAxMTY2MjQ4MDAwMDAwMDAxMgorOjEwMjA0MDAwMDExNjYyNEMwMDAwMDAwMDAxMTY2MjUwMDAwMDAwMDAwMgorOjEwMjA1MDAwMDExNjYyNTQwMDAwMDAwMDAxMTY2MjU4MDAwMDAwMDBFMgorOjEwMjA2MDAwMDExNjYyNUMwMDAwMDAwMDAxMTY2MjYwMDAwMDAwMDBDMgorOjEwMjA3MDAwMDExNjYyNjQwMDAwMDAwMDAxMTY2MjY4MDAwMDAwMDBBMgorOjEwMjA4MDAwMDExNjYyNkMwMDAwMDAwMDAxMTY2MjcwMDAwMDAwMDA4MgorOjEwMjA5MDAwMDExNjYyNzQwMDAwMDAwMDAxMTY2Mjc4MDAwMDAwMDA2MgorOjEwMjBBMDAwMDExNjYyN0MwMDAwMDAwMDBDMTY2MDAwMDAwMDAzRThDRQorOjEwMjBCMDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEExNAorOjEwMjBDMDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDU1MQorOjEwMjBEMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDUyRAorOjEwMjBFMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDQ5QQorOjEwMjBGMDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDQwNAorOjEwMjEwMDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDRFMworOjEwMjExMDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDRDMworOjEwMjEyMDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDQ4MworOjEwMjEzMDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0Q1MgorOjEwMjE0MDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUMxMAorOjEwMjE1MDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDU1QgorOjEwMjE2MDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDAxRQorOjEwMjE3MDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDQwOQorOjEwMjE4MDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDRDMworOjEwMjE5MDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDVDRgorOjEwMjFBMDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDVBRgorOjEwMjFCMDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDg1MQorOjEwMjFDMDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDc3NAorOjEwMjFEMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjAzRgorOjEwMjFFMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDEzRQorOjEwMjFGMDAwMDIxNjgxNDgwMDAwMDAwMDAyMTY4MTRDMDAwMDAwMDQxNQorOjEwMjIwMDAwMDIxNjgxNTAwMDAwMDAwNDAyMTY4MTU0MDAwMDAwMDJGMgorOjEwMjIxMDAwMDIxNjg4MzgwODAxMjAwNDAyMTY4MTU4MDAwMDAwMDVDMworOjEwMjIyMDAwMDIxNjgxNUMwMDAwMDAwNTAyMTY4MTYwMDAwMDAwMDVCNgorOjEwMjIzMDAwMDIxNjgxNjQwMDAwMDAwNTAyMTY4ODNDMjAwODEwMDE4NworOjEwMjI0MDAwMDIxNjgxNjgwMDAwMDAwODAyMTY4MTZDMDAwMDAwMDY3QQorOjEwMjI1MDAwMDIxNjgxNzAwMDAwMDAwNzAyMTY4MTc0MDAwMDAwMDE2MAorOjEwMjI2MDAwMDIxNjg4NDAwMTAxMDEyMDAyMTY4MTc4MDAwMDAwMDE1OQorOjEwMjI3MDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDEyRQorOjEwMjI4MDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDE0OAorOjEwMjI5MDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDRGMworOjEwMjJBMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDJEMgorOjEwMjJCMDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDVEMworOjEwMjJDMDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDU5NgorOjEwMjJEMDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDFDRgorOjEwMjJFMDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDY1QQorOjEwMjJGMDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDE0MAorOjEwMjMwMDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDFBMAorOjEwMjMxMDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDEwRAorOjEwMjMyMDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDE4RgorOjEwMjMzMDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDREMgorOjEwMjM0MDAwMDIxNjgxRDAwMDAwMDAwNDAyMTY4MUQ0MDAwMDAwMDJCMQorOjEwMjM1MDAwMDIxNjg4MjAwODAxMjAwNDAyMTY4MUQ4MDAwMDAwMDUxQQorOjEwMjM2MDAwMDIxNjgxREMwMDAwMDAwNTAyMTY4MUUwMDAwMDAwMDU3NQorOjEwMjM3MDAwMDIxNjgxRTQwMDAwMDAwNTAyMTY4ODI0MjAwODEwMDFERQorOjEwMjM4MDAwMDIxNjgxRTgwMDAwMDAwODAyMTY4MUVDMDAwMDAwMDYzOQorOjEwMjM5MDAwMDIxNjgxRjAwMDAwMDAwNzAyMTZFNDBDMDAwMDAwMDBBNQorOjEwMjNBMDAwMDIxNjg4MjgwMTAxMDEyMDA2MTZFNDEwMDAwMDAwMDQyRQorOjEwMjNCMDAwMDIxNkUwMDAwMTAxMDEwMTAyMTZFNDIwMDAwMDAwMDAwNQorOjEwMjNDMDAwMDIxNkU0MjQwMDAwMDAwNDAyMTZFNDI4MDAwMDAwMDRDMQorOjEwMjNEMDAwMDIxNkU0MkMwMDAwMDAwMjAyMTZFMDA0MDgwMTIwMDRBQQorOjEwMjNFMDAwMDIxNkU0MzAwMDAwMDAwNTAyMTZFNDM0MDAwMDAwMDU4NworOjEwMjNGMDAwMDIxNkU0MzgwMDAwMDAwNTAyMTZFNDNDMDAwMDAwMDU2NworOjEwMjQwMDAwMDIxNkUwMDgyMDA4MTAwMTAyMTZFNDQwMDAwMDAwMDg0RgorOjEwMjQxMDAwMDIxNkU0NDQwMDAwMDAwNjAyMTZFNDQ4MDAwMDAwMDcyQgorOjEwMjQyMDAwMDIxNkU0NEMwMDAwMDAwMDAyMTZFMDBDMDEwMTAxMjAzRAorOjEwMjQzMDAwMDYxNkU0NTAwMDAwMDAwNDAyMTZFMDEwMDEwMTAxMDEzQworOjEwMjQ0MDAwMDIxNkU0NjAwMDAwMDAwMDAyMTZFNDY0MDAwMDAwMDRDQworOjEwMjQ1MDAwMDIxNkU0NjgwMDAwMDAwNDAyMTZFNDZDMDAwMDAwMDJBQQorOjEwMjQ2MDAwMDIxNkUwMTQwODAxMjAwNDAyMTZFNDcwMDAwMDAwMDVDMgorOjEwMjQ3MDAwMDIxNkU0NzQwMDAwMDAwNTAyMTZFNDc4MDAwMDAwMDU2RQorOjEwMjQ4MDAwMDIxNkU0N0MwMDAwMDAwNTAyMTZFMDE4MjAwODEwMDE4NgorOjEwMjQ5MDAwMDIxNkU0ODAwMDAwMDAwODAyMTZFNDg0MDAwMDAwMDYzMgorOjEwMjRBMDAwMDIxNkU0ODgwMDAwMDAwNzAyMTZFNDhDMDAwMDAwMDExOAorOjEwMjRCMDAwMDIxNkUwMUMwMTAxMDEyMDAyMTZFNDkwMDAwMDAwMDE1OAorOjEwMjRDMDAwMDIxNkU0OTQwMDAwMDAwMTAyMTZFNDk4MDAwMDAwMDFFNgorOjEwMjREMDAwMDIxNkU0OUMwMDAwMDAwMTAyMTZFMDIwMDEwMTAxMDE0NworOjEwMjRFMDAwMDIxNkU0QTAwMDAwMDAwMTAyMTZFNEE0MDAwMDAwMDRBQgorOjEwMjRGMDAwMDIxNkU0QTgwMDAwMDAwNDAyMTZFNEFDMDAwMDAwMDI4QQorOjEwMjUwMDAwMDIxNkUwMjQwODAxMjAwNDAyMTZFNEIwMDAwMDAwMDVEMQorOjEwMjUxMDAwMDIxNkU0QjQwMDAwMDAwNTAyMTZFNEI4MDAwMDAwMDU0RAorOjEwMjUyMDAwMDIxNkU0QkMwMDAwMDAwNTAyMTZFMDI4MjAwODEwMDE5NQorOjEwMjUzMDAwMDIxNkU0QzAwMDAwMDAwODAyMTZFNEM0MDAwMDAwMDYxMQorOjEwMjU0MDAwMDIxNkU0QzgwMDAwMDAwNzAyMTZFNENDMDAwMDAwMDFGNworOjEwMjU1MDAwMDIxNkUwMkMwMTAxMDEyMDAyMTZFNEQwMDAwMDAwMDE2NworOjEwMjU2MDAwMDIxNkU0RDQwMDAwMDAwMTAyMTZFNEQ4MDAwMDAwMDFDNQorOjEwMjU3MDAwMDIxNkU0REMwMDAwMDAwMTAyMTZFMDMwMDEwMTAxMDE1NgorOjEwMjU4MDAwMDIxNkU0RTAwMDAwMDAwMTAyMTZFNEU0MDAwMDAwMDQ4QQorOjEwMjU5MDAwMDIxNkU0RTgwMDAwMDAwNDAyMTZFNEVDMDAwMDAwMDI2OQorOjEwMjVBMDAwMDIxNkUwMzQwODAxMjAwNDAyMTZFNEYwMDAwMDAwMDVFMQorOjEwMjVCMDAwMDIxNkU0RjQwMDAwMDAwNTAyMTZFNEY4MDAwMDAwMDUyRAorOjEwMjVDMDAwMDIxNkU0RkMwMDAwMDAwNTAyMTZFMDM4MjAwODEwMDFBNQorOjEwMjVEMDAwMDIxNkU1MDAwMDAwMDAwODAyMTZFNTA0MDAwMDAwMDZFRgorOjEwMjVFMDAwMDIxNkU1MDgwMDAwMDAwNzAyMTZFMDNDMDEwMTAxMjA4OAorOjEwMjVGMDAwMDIxNjgyNDAwMDNGMDAzRjAyMTY4MjQ0MDAwMDAwMDBBNQorOjEwMjYwMDAwMDIxNkU1MjQwMDNGMDAzRjAyMTZFNTI4MDAwMDAwMDAwNgorOjEwMjYxMDAwMDIxNjgyNDgwMDAwMDAwMDAyMTY4MjRDMDAzRjAwM0Y3NAorOjEwMjYyMDAwMDIxNkU1MkMwMDAwMDAwMDAyMTZFNTMwMDAzRjAwM0ZENgorOjEwMjYzMDAwMDIxNjgyNTAwMTAwMDEwMDAyMTY4MjU0MDEwMDAxMDBCRQorOjEwMjY0MDAwMDIxNkU1MzQwMTAwMDEwMDAyMTZFNTM4MDEwMDAxMDAyMAorOjEwMjY1MDAwMDYxNjgyNTgwMDAwMDAwMjAyMTZFNTNDMDAwMDAwMDA0OQorOjEwMjY2MDAwMDIxNkU1NDAwMDAwMDAwMDAyMTY4MjYwMDBDMDAwQzBCMworOjEwMjY3MDAwMDIxNjgyNjQwMEMwMDBDMDAyMTZFNTQ0MDBDMDAwQzAxQgorOjEwMjY4MDAwMDIxNkU1NDgwMEMwMDBDMDAyMTY4MjY4MUUwMDFFMDA0NworOjEwMjY5MDAwMDIxNjgyNkMxRTAwMUUwMDAyMTZFNTRDMUUwMDFFMDA3MworOjEwMjZBMDAwMDIxNkU1NTAxRTAwMUUwMDAyMTY4MjcwNDAwMDQwMDAxNworOjEwMjZCMDAwMDIxNjgyNzQ0MDAwNDAwMDAyMTZFNTU0NDAwMDQwMDBCQgorOjEwMjZDMDAwMDIxNkU1NTg0MDAwNDAwMDAyMTY4Mjc4ODAwMDgwMDAyMworOjEwMjZEMDAwMDIxNjgyN0M4MDAwODAwMDAyMTZFNTVDODAwMDgwMDA4QgorOjEwMjZFMDAwMDIxNkU1NjA4MDAwODAwMDAyMTY4MjgwMjAwMDIwMDAzMworOjEwMjZGMDAwMDIxNjgyODQyMDAwMjAwMDAyMTZFNTY0MjAwMDIwMDBEQgorOjEwMjcwMDAwMDIxNkU1NjgyMDAwMjAwMDA2MTY4Mjg4MDAwMDAwMDJGQworOjEwMjcxMDAwMDIxNkU1NkMwMDAwMDAwMDAyMTZFNTcwMDAwMDAwMDBFMworOjEwMjcyMDAwMDIxNjgyOTAwMDAwMDAwMDAyMTY4Mjk0MDAwMDAwMDA1MQorOjEwMjczMDAwMDIxNkU1NzQwMDAwMDAwMDAyMTZFNTc4MDAwMDAwMDBCMworOjEwMjc0MDAwMDIxNjgyOTgwMDAwMDAwMDAyMTY4MjlDMDAwMDAwMDAyMQorOjEwMjc1MDAwMDIxNkU1N0MwMDAwMDAwMDAyMTZFNTgwMDAwMDAwMDA4MworOjEwMjc2MDAwMDIxNjgyQTAwMDAwMDAwMDAyMTY4MkE0MDAwMDAwMDFGMAorOjEwMjc3MDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDg2OAorOjEwMjc4MDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDBFMgorOjEwMjc5MDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTdDQQorOjEwMjdBMDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDA1RgorOjEwMjdCMDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4MDFGRjAxRkZCRAorOjEwMjdDMDAwMDIxNjgyMTQwMUZGMDFGRjAyMTZFNTEwMDFGRjAxRkY0RQorOjEwMjdEMDAwMDIxNkU1MEMwMUZGMDFGRjAyMTY4MjNDMDAwMDAwMTMwNworOjEwMjdFMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDA0OAorOjEwMjdGMDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDI5NgorOjEwMjgwMDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDdFOQorOjEwMjgxMDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDhCQworOjEwMjgyMDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDhEQQorOjEwMjgzMDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDBGMworOjEwMjg0MDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkYwNworOjEwMjg1MDAwMDIxNjgyMjAwMDBGMDAwRjAyMTY4MjFDMDAwRjAwMEZDQworOjEwMjg2MDAwMDIxNkU1MTgwMDBGMDAwRjAyMTZFNTE0MDAwRjAwMEYwNgorOjEwMjg3MDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkZEQworOjEwMjg4MDAwMDIxNkU1MjAwMDAwMDAwMDAyMTZFNTFDRkZGRkZGRkYxNgorOjEwMjg5MDAwMDIxNkU2QkMwMDAwMDAwMDAyMTZFNkMwMDAwMDAwMDJCRQorOjEwMjhBMDAwMDIxNkU2QzQwMDAwMDAwMTAyMTZFNkM4MDAwMDAwMDM5QworOjEwMjhCMDAwMDIxNkU2Q0MwMDAwMDAwNDAyMTZFNkQwMDAwMDAwMDY3NgorOjEwMjhDMDAwMDIxNkU2RDQwMDAwMDAwNTAyMTZFNkQ4MDAwMDAwMDc1NAorOjEwMjhEMDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDE1RQorOjEwMjhFMDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDE2RQorOjEwMjhGMDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDBERQorOjEwMjkwMDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDAyRgorOjEwMjkxMDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDE1NQorOjEwMjkyMDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDAxQgorOjEwMjkzMDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDEyRAorOjEwMjk0MDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDBGMworOjEwMjk1MDAwMDIwMjAwNTgwMDAwMDAzMjAyMDIwMEEwMDMxNTAwMjAwRAorOjEwMjk2MDAwMDIwMjAwQTQwMzE1MDAyMDAyMDIwMEE4MDEwMDAwMzBBQQorOjEwMjk3MDAwMDIwMjAwQUMwODEwMDAwMDAyMDIwMEIwMDAwMDAwMzNBOAorOjEwMjk4MDAwMDIwMjAwQjQwMDAwMDAzMDAyMDIwMEI4MDAwMDAwMzE3MgorOjEwMjk5MDAwMDIwMjAwQkMwMDAwMDAwMzAyMDIwMEMwMDAwMDAwMDZBQQorOjEwMjlBMDAwMDIwMjAwQzQwMDAwMDAwMzAyMDIwMEM4MDAwMDAwMDM4RAorOjEwMjlCMDAwMDIwMjAwQ0MwMDAwMDAwMjAyMDIwMEQwMDAwMDAwMDA3MQorOjEwMjlDMDAwMDIwMjAwRDQwMDAwMDAwMjAyMDIwMERDMDAwMDAwMDA0RAorOjEwMjlEMDAwMDIwMjAwRTAwMDAwMDAwNjAyMDIwMEU0MDAwMDAwMDQyMQorOjEwMjlFMDAwMDIwMjAwRTgwMDAwMDAwMjAyMDIwMEVDMDAwMDAwMDIwNworOjEwMjlGMDAwMDIwMjAwRjAwMDAwMDAwMTAyMDIwMEZDMDAwMDAwMDZEQworOjEwMkEwMDAwMDIwMjAxMjAwMDAwMDAwMDAyMDIwMTM0MDAwMDAwMDI2NgorOjEwMkExMDAwMDIwMjAxQjAwMDAwMDAwMTAyMDIwMjBDMDAwMDAwMDFFRAorOjEwMkEyMDAwMDIwMjAyMTQwMDAwMDAwMTAyMDIwMjE4MDAwMDAwMDI2QgorOjEwMkEzMDAwMDIwMjA0MDQwMDAwMDAwMTAyMDIwNDBDMDAwMDAwNDAzNQorOjEwMkE0MDAwMDIwMjA0MTAwMDAwMDA0MDAyMDIwNDFDMDAwMDAwMDQwNgorOjEwMkE1MDAwMDIwMjA0MjAwMDAwMDAyMDAyMDIwNDI0MDAwMDAwMDIwMAorOjEwMkE2MDAwMDIwMjA0MjgwMDAwMDAyMDA2MDIwNTAwMDAwMDAwMTJGNworOjEwMkE3MDAwMDQwMjA0ODAwMDFGMDMyQjAyMDIwMDYwMDAwMDAwMEYwQworOjEwMkE4MDAwMDIwMjAwNjQwMDAwMDAwNzAyMDIwMDY4MDAwMDAwMEI2MAorOjEwMkE5MDAwMDIwMjAwNkMwMDAwMDAwRTAyMDIwMDcwMDAwMDAwMEUzNgorOjEwMkFBMDAwMDYwMjAwNzQwMDAwMDAwMzAyMDIwMEY0MDAwMDAwMDRBQgorOjEwMkFCMDAwMDIwMjAwMDQwMDAwMDAwMTAyMDIwMDA4MDAwMDAwMDEwMAorOjEwMkFDMDAwMDIwMjAwMEMwMDAwMDAwMTAyMDIwMDEwMDAwMDAwMDFFMAorOjEwMkFEMDAwMDIwMjAwMTQwMDAwMDAwMTAyMDIwMDE4MDAwMDAwMDFDMAorOjEwMkFFMDAwMDIwMjAwMUMwMDAwMDAwMTAyMDIwMDIwMDAwMDAwMDFBMAorOjEwMkFGMDAwMDIwMjAwMjQwMDAwMDAwMTAyMDIwMDI4MDAwMDAwMDE4MAorOjEwMkIwMDAwMDIwMjAwMkMwMDAwMDAwMTAyMDIwMDMwMDAwMDAwMDE1RgorOjEwMkIxMDAwMDIwMjAwMzQwMDAwMDAwMTAyMDIwMDM4MDAwMDAwMDEzRgorOjEwMkIyMDAwMDIwMjAwM0MwMDAwMDAwMTAyMDIwMDQwMDAwMDAwMDExRgorOjEwMkIzMDAwMDIwMjAwNDQwMDAwMDAwMTAyMDIwMDQ4MDAwMDAwMDFGRgorOjEwMkI0MDAwMDIwMjAwNEMwMDAwMDAwMTAyMDIwMDUwMDAwMDAwMDFERgorOjEwMkI1MDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDI4MQorOjEwMkI2MDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDBDQgorOjEwMkI3MDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDI5NworOjEwMkI4MDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkY2RAorOjEwMkI5MDAwMDIwMjAxMDAwMDAwMDAwMDAyMDIwMTBDMDAwMDAwQzg1NworOjEwMkJBMDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDAzNQorOjEwMkJCMDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDI2MQorOjEwMkJDMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkYzMgorOjEwMkJEMDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwMDBGOAorOjEwMkJFMDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDJGMQorOjEwMkJGMDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDAzQgorOjEwMkMwMDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDIwNgorOjEwMkMxMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkZEQworOjEwMkMyMDAwMDIwMjAxMDAwMDAwMDAwMDAyMDIwMTBDMDAwMDAwQzhDNgorOjEwMkMzMDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDBBNAorOjEwMkM0MDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDJEMAorOjEwMkM1MDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkZBMQorOjEwMkM2MDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwMDA2NworOjEwMkM3MDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDI2MAorOjEwMkM4MDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDBBQQorOjEwMkM5MDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDI3NgorOjEwMkNBMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkY0QworOjEwMkNCMDAwMDIwMjAxMDAwMDAwMDAwMDAyMDIwMTBDMDAwMDAwQzgzNgorOjEwMkNDMDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDAxNAorOjEwMkNEMDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDI0MAorOjEwMkNFMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkYxMQorOjEwMkNGMDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwMDBENworOjEwMkQwMDAwMDIwMjAxMDgwMDAwMDBDODAyMDIwMTE4MDAwMDAwMDJDRgorOjEwMkQxMDAwMDIwMjAxQzQwMDAwMDAwMDAyMDIwMUNDMDAwMDAwMDAxOQorOjEwMkQyMDAwMDIwMjAxRDQwMDAwMDAwMjAyMDIwMURDMDAwMDAwMDJFNQorOjEwMkQzMDAwMDIwMjAxRTQwMDAwMDBGRjAyMDIwMUVDMDAwMDAwRkZCQgorOjEwMkQ0MDAwMDIwMjAxMDAwMDAwMDAwMDAyMDIwMTBDMDAwMDAwQzhBNQorOjEwMkQ1MDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDA4MworOjEwMkQ2MDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDJBRgorOjEwMkQ3MDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkY4MAorOjEwMkQ4MDAwMDIwMjAxRjAwMDAwMDBGRjAyMDIwMTA0MDAwMDAwMDA0NgorOjEwMkQ5MDAwMDcyODA0MDAwMEMwMDAwMDA4MjgwN0E4MDAwQjAzNEEwOQorOjEwMkRBMDAwMDcyQzAwMDAzMkZEMDAwMDA3MkM4MDAwMzU3RTBDQzA4RgorOjEwMkRCMDAwMDcyRDAwMDAzQUU0MUEyMDA3MkQ4MDAwMzlDRjI4REFDOQorOjEwMkRDMDAwMDcyRTAwMDAxQzNDMzc0RTA4MkUzNzEwMzkxRTAzNENDRQorOjEwMkREMDAwMDEyODAwMDAwMDAwMDAwMDAxMjgwMDA0MDAwMDAwMDA5RAorOjEwMkRFMDAwMDEyODAwMDgwMDAwMDAwMDAxMjgwMDBDMDAwMDAwMDA3RAorOjEwMkRGMDAwMDEyODAwMTAwMDAwMDAwMDAxMjgwMDE0MDAwMDAwMDA1RAorOjEwMkUwMDAwMDIyODAwMjAwMDAwMDAwMTAyMjgwMDI0MDAwMDAwMDIyNworOjEwMkUxMDAwMDIyODAwMjgwMDAwMDAwMzAyMjgwMDJDMDAwMDAwMDAwNworOjEwMkUyMDAwMDIyODAwMzAwMDAwMDAwNDAyMjgwMDM0MDAwMDAwMDFFNQorOjEwMkUzMDAwMDIyODAwMzgwMDAwMDAwMDAyMjgwMDNDMDAwMDAwMDFDOQorOjEwMkU0MDAwMDIyODAwNDAwMDAwMDAwNDAyMjgwMDQ0MDAwMDAwMDBBNgorOjEwMkU1MDAwMDIyODAwNDgwMDAwMDAwMTAyMjgwMDRDMDAwMDAwMDM4NgorOjEwMkU2MDAwMDIyODAwNTAwMDAwMDAwMDAyMjgwMDU0MDAwMDAwMDE2OQorOjEwMkU3MDAwMDIyODAwNTgwMDAwMDAwNDAyMjgwMDVDMDAwMDAwMDA0NgorOjEwMkU4MDAwMDIyODAwNjAwMDAwMDAwMTAyMjgwMDY0MDAwMDAwMDMyNgorOjEwMkU5MDAwMDIyODAwNjgwMDAwMDAwMDAyMjgwMDZDMDAwMDAwMDEwOQorOjEwMkVBMDAwMDIyODAwNzAwMDAwMDAwNDAyMjgwMDc0MDAwMDAwMDBFNgorOjEwMkVCMDAwMDIyODAwNzgwMDAwMDAwNDAyMjgwMDdDMDAwMDAwMDNDMworOjEwMkVDMDAwMDYyODAwODAwMDAwMDAwMjAyMjgwMEE0MDAwMDNGRkY0NgorOjEwMkVEMDAwMDIyODAwQTgwMDAwMDNGRjAyMjgwMjI0MDAwMDAwMDBDRQorOjEwMkVFMDAwMDIyODAyMzQwMDAwMDAwMDAyMjgwMjRDMDAwMDAwMDAwQQorOjEwMkVGMDAwMDIyODAyRTQwMDAwRkZGRjA2MjgyMDAwMDAwMDA4MDA2RQorOjEwMkYwMDAwMDIyQjhCQzAwMDAwMDAwMTAyMkI4MDAwMDAwMDAwMDA5QgorOjEwMkYxMDAwMDIyQjgwNDAwMDAwMDAxODAyMkI4MDgwMDAwMDAwMEM3MworOjEwMkYyMDAwMDIyQjgwQzAwMDAwMDA2NjBDMkI4MzAwMDAwN0ExMjA0QworOjEwMkYzMDAwMEEyQjgzMDAwMDAwMDEzODBCMkI4MzAwMDAwMDEzODg0QworOjEwMkY0MDAwMDIyQjgzQzAwMDAwMDFGNDBDMkI4MzQwMDAwMDAxRjQyRAorOjEwMkY1MDAwMEEyQjgzNDAwMDAwMDAwMDBCMkI4MzQwMDAwMDAwMDU3QgorOjEwMkY2MDAwMEEyQjgzODAwMDA0QzRCNDBDMkI4MzgwMURDRDY1MDAyNAorOjEwMkY3MDAwMEEyQjE0ODAwMDAwMDAwMDBCMkI4MzgwMDA0QzRCNDA3OAorOjEwMkY4MDAwMDIyQjE0ODAwMDAwMDAwMTA2MkEyOUM4MDAwMDAwMDQ1QQorOjEwMkY5MDAwMDQyQTI5RDgwMDAyMDM0RTA2MkEyMDgwMDAwMDAwNDg5NworOjEwMkZBMDAwMDYyQTkwMjAwMDAwMDBDODA2MkE5MDAwMDAwMDAwMDJCNworOjEwMkZCMDAwMDYyQTIxQTgwMDAwMDA4NjA2MkEyMDAwMDAwMDAwMjAyMgorOjEwMkZDMDAwMDIyQTIzQzgwMDAwMDAwMDA0MkEyM0QwMDAwMjAzNTA3NAorOjEwMkZEMDAwMDQyQTI0OTgwMDA0MDM1MjAyMkEyQzUwMDAwMDAwMDAwNgorOjEwMkZFMDAwMDIyQTJDMTAwMDAwMDAwMDA0MkEyQzA4MDAwMjAzNTZCQworOjEwMkZGMDAwMDQyQTMwMDAwMDAyMDM1ODA2MkEzMDA4MDAwMDAxMDBBRAorOjEwMzAwMDAwMDYyQTQwNDAwMDAwMDAxMDA0MkE0MDAwMDAxMDAzNUEyNQorOjEwMzAxMDAwMDYyQTZBQzAwMDAwMDAwMjA2MkE2QjAwMDAwMDAwMDRCNQorOjEwMzAyMDAwMDQyQTg0MDgwMDAyMDM2QTAyMkIwODAwMDAwMDAwMDA0MgorOjEwMzAzMDAwMDQyQjBDMDAwMDEwMDM2QzAyMkIwODAwMDEwMDAwMDBBMAorOjEwMzA0MDAwMDQyQjBDNDAwMDA4MDM3QzAyMkIwODAwMDIwMDAwMDA0NworOjEwMzA1MDAwMDQyQjBDNjAwMDA4MDM4NDA2MkFDMDAwMDAwMDAwRDg3RQorOjEwMzA2MDAwMDYyQTI0QTgwMDAwMDAxNDA2MkEyNTQ4MDAwMDAwMjQ4RgorOjEwMzA3MDAwMDYyQTI2NjgwMDAwMDAyNDA2MkEyNzg4MDAwMDAwMjQ2QgorOjEwMzA4MDAwMDYyQTI4QTgwMDAwMDAyNDA2MkFBMDAwMDAwMDAwMjgyNAorOjEwMzA5MDAwMDYyQUExNDAwMDAwMDAwQzA0MkEyOUUwMDAwMjAzOEM0QgorOjEwMzBBMDAwMDYyQTUwMjAwMDAwMDAwMjA2MkE1MDMwMDAwMDAwMDJDQworOjEwMzBCMDAwMDYyQTUwMDAwMDAwMDAwMjA2MkE1MDEwMDAwMDAwMDJGQworOjEwMzBDMDAwMDIyQTUyMDgwMDAwMDAwMTA0MkE2QUM4MDAwMjAzOEU4NgorOjEwMzBEMDAwMDYyQTZCMTAwMDAwMDA0MjA2MkE2RDIwMDAwMDAwMDQ0MgorOjEwMzBFMDAwMDYyQUJDRDAwMDAwMDAwMjA2MkFDMzYwMDAwMDAwRDhGNworOjEwMzBGMDAwMDYyQTI0RjgwMDAwMDAxNDA2MkEyNUQ4MDAwMDAwMjQxRgorOjEwMzEwMDAwMDYyQTI2RjgwMDAwMDAyNDA2MkEyODE4MDAwMDAwMjRCOQorOjEwMzExMDAwMDYyQTI5MzgwMDAwMDAyNDA2MkFBMEEwMDAwMDAwMjg2MgorOjEwMzEyMDAwMDYyQUExNzAwMDAwMDAwQzA0MkEyOUU4MDAwMjAzOTA3RQorOjEwMzEzMDAwMDYyQTUwMjgwMDAwMDAwMjA2MkE1MDM4MDAwMDAwMDIyQgorOjEwMzE0MDAwMDYyQTUwMDgwMDAwMDAwMjA2MkE1MDE4MDAwMDAwMDI1QgorOjEwMzE1MDAwMDIyQTUyMEMwMDAwMDAwMTA0MkE2QUQwMDAwMjAzOTJFNQorOjEwMzE2MDAwMDYyQTZDMTgwMDAwMDA0MjA2MkE2RDMwMDAwMDAwMDQ5OAorOjEwMzE3MDAwMDYyQUJDRDgwMDAwMDAwMjAyMkFDNkMwMDAwMDAwMDBENworOjEwMzE4MDAwMDQyQTI5RjAwMDEwMDM5NDA2MkE1MDQ4MDAwMDAwMEU3QgorOjEwMzE5MDAwMDYyQUIwMDAwMDAwMDAwNjAyMkFDNkM0MDAwMDAwMDA5MworOjEwMzFBMDAwMDQyQTJBMzAwMDEwMDNBNDA2MkE1MDgwMDAwMDAwMEVEMgorOjEwMzFCMDAwMDYyQUIwMTgwMDAwMDAwNjAyMkFDNkM4MDAwMDAwMDA1NworOjEwMzFDMDAwMDQyQTJBNzAwMDEwMDNCNDA2MkE1MEI4MDAwMDAwMEUyQQorOjEwMzFEMDAwMDYyQUIwMzAwMDAwMDAwNjAyMkFDNkNDMDAwMDAwMDAxQgorOjEwMzFFMDAwMDQyQTJBQjAwMDEwMDNDNDA2MkE1MEYwMDAwMDAwMEU4MgorOjEwMzFGMDAwMDYyQUIwNDgwMDAwMDAwNjAyMkFDNkQwMDAwMDAwMDBERgorOjEwMzIwMDAwMDQyQTJBRjAwMDEwMDNENDA2MkE1MTI4MDAwMDAwMEVEOAorOjEwMzIxMDAwMDYyQUIwNjAwMDAwMDAwNjAyMkFDNkQ0MDAwMDAwMDBBMgorOjEwMzIyMDAwMDQyQTJCMzAwMDEwMDNFNDA2MkE1MTYwMDAwMDAwMEUyRgorOjEwMzIzMDAwMDYyQUIwNzgwMDAwMDAwNjAyMkFDNkQ4MDAwMDAwMDA2NgorOjEwMzI0MDAwMDQyQTJCNzAwMDEwMDNGNDA2MkE1MTk4MDAwMDAwMEU4NworOjEwMzI1MDAwMDYyQUIwOTAwMDAwMDAwNjAyMkFDNkRDMDAwMDAwMDAyQQorOjEwMzI2MDAwMDQyQTJCQjAwMDEwMDQwNDA2MkE1MUQwMDAwMDAwMEVERQorOjEwMzI3MDAwMDYyQUIwQTgwMDAwMDAwNjAyMTAxMDA4MDAwMDAwMDE5NQorOjEwMzI4MDAwMDIxMDEwNTAwMDAwMDAwMTAyMTAxMDAwMDAwM0QwMDBENgorOjEwMzI5MDAwMDIxMDEwMDQwMDAwMDAzRDA5MTAxODAwMDIwMDA0MTQ4MAorOjEwMzJBMDAwMDkxMDExMDAwMDI4MDYxNDA2MTAxMUEwMDAwMDAwMThEMworOjEwMzJCMDAwMDYxMDI0MDAwMDAwMDBFMDAyMTAyMDFDMDAwMDAwMDBBNgorOjEwMzJDMDAwMDIxMDIwMjAwMDAwMDAwMTAyMTAyMEMwMDAwMDAwMDJCNworOjEwMzJEMDAwMDIxMDIwMDQwMDAwMDAwMTAyMTAyMDA4MDAwMDAwMDE3QworOjEwMzJFMDAwMDkxMDNDMDAwMDA1MDYzQzA5MTAzODAwMDAwNTA2NDFBNQorOjEwMzJGMDAwMDkxMDM4MjAwMDA1MDY0NjA2MTA0QzAwMDAwMDAxMDBBOQorOjEwMzMwMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkY1RgorOjEwMzMxMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEFBNQorOjEwMzMyMDAwMDIxMDQwNTgwMDAwMDAwMDAyMTA4MDAwMDAwMDEwODBEMQorOjEwMzMzMDAwMDIxMDgwQUMwMDAwMDAwMDAyMTA4MDM4MDAwMDAwMTA3NQorOjEwMzM0MDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDIzMQorOjEwMzM1MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA3QQorOjEwMzM2MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZFMQorOjEwMzM3MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODA0OAorOjEwMzM4MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE2MgorOjEwMzM5MDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEExNQorOjEwMzNBMDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDFCNAorOjEwMzNCMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDA5OAorOjEwMzNDMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjVFNworOjEwMzNEMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE2MworOjEwMzNFMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDI1RQorOjEwMzNGMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQ0MworOjEwMzQwMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEFGNgorOjEwMzQxMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTA4MDAwMDAwMDEwODBBQworOjEwMzQyMDAwMDIxMDgwQUMwMDAwMDAwMjAyMTA4MDM4MDAwMDAwMTA4MgorOjEwMzQzMDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDI0MAorOjEwMzQ0MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA4OQorOjEwMzQ1MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZGMAorOjEwMzQ2MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODA1NworOjEwMzQ3MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE3MQorOjEwMzQ4MDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEEyNAorOjEwMzQ5MDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDNDMQorOjEwMzRBMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDBBNworOjEwMzRCMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjVGNgorOjEwMzRDMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE3MgorOjEwMzREMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDI2RAorOjEwMzRFMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQ1MgorOjEwMzRGMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEEwNgorOjEwMzUwMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTA4MDAwMDAwMDEwODBCQgorOjEwMzUxMDAwMDIxMDgwQUMwMDAwMDAwNDAyMTA4MDM4MDAwMDAwMTA4RgorOjEwMzUyMDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDI0RgorOjEwMzUzMDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA5OAorOjEwMzU0MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZGRgorOjEwMzU1MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODA2NgorOjEwMzU2MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE4MAorOjEwMzU3MDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEEzMworOjEwMzU4MDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDVDRQorOjEwMzU5MDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDBCNgorOjEwMzVBMDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjUwNQorOjEwMzVCMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE4MQorOjEwMzVDMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDI3QworOjEwMzVEMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQ2MQorOjEwMzVFMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEExNQorOjEwMzVGMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTA4MDAwMDAwMDEwODBDQgorOjEwMzYwMDAwMDIxMDgwQUMwMDAwMDAwNjAyMTA4MDM4MDAwMDAwMTA5QworOjEwMzYxMDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDI1RQorOjEwMzYyMDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDBBNworOjEwMzYzMDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkYwRQorOjEwMzY0MDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODA3NQorOjEwMzY1MDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE4RgorOjEwMzY2MDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEE0MgorOjEwMzY3MDAwMDIxMDgwMDQwMDAwMTA4MDAyMTA4MEIwMDAwMDAwMDdEQgorOjEwMzY4MDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MTA0MDAwMDAwMDBDNQorOjEwMzY5MDAwMDYxMDgxMjgwMDAwMDAwMjAyMTA4MDBDMDAwMDAyQjUxNAorOjEwMzZBMDAwMDIxMDgwMTQwMDAwMDAwMDA2MTA4NDAwMDAwMDAwNEE5MAorOjEwMzZCMDAwMDIxMDgxMEMwMDAxRkZGRjA2MTA4MTQ4MDAwMDAwMDI4QgorOjEwMzZDMDAwMDIxMDgwMDQwMDAwMUE4MDA2MTA5MDkwMDAwMDAwMjQ3MAorOjEwMzZEMDAwMDYxMDkyNDgwMDAwMDA0QTA2MTA5NDk4MDAwMDAwNEEyNAorOjEwMzZFMDAwMDYxMDk2RTgwMDAwMDA0QTAyMTIwNUIwMDAwMDAwMDEzMgorOjEwMzZGMDAwMDIxMjA0OTAwMEUzODM0MDAyMTIwNTE0MDAwMDNDMTAwMworOjEwMzcwMDAwMDIxMjA2NkMwMDAwMDAwMTAyMTIwNjcwMDAwMDAwMDBBOAorOjEwMzcxMDAwMDIxMjA0OTRGRkZGRkZGRjAyMTIwNDk4RkZGRkZGRkY1NQorOjEwMzcyMDAwMDIxMjA0OUNGRkZGRkZGRjAyMTIwNEEwRkZGRkZGRkYzNQorOjEwMzczMDAwMDIxMjA0QTRGRkZGRkZGRjAyMTIwNEE4RkZGRkZGRkYxNQorOjEwMzc0MDAwMDIxMjA0QUNGRkZGRkZGRjAyMTIwNEIwRkZGRkZGRkZGNQorOjEwMzc1MDAwMDIxMjA0QkNGRkZGRkZGRjAyMTIwNEMwRkZGRkZGRkZDNQorOjEwMzc2MDAwMDIxMjA0QzRGRkZGRkZGRjAyMTIwNEM4RkZGRkZGRkZBNQorOjEwMzc3MDAwMDIxMjA0Q0NGRkZGRkZGRjAyMTIwNEQwRkZGRkZGRkY4NQorOjEwMzc4MDAwMDIxMjA0RDhGRkZGRkZGRjAyMTIwNERDRkZGRkZGRkY1RAorOjEwMzc5MDAwMDIxMjA0RTBGRkZGRkZGRjAyMTIwNEU0RkZGRkZGRkYzRAorOjEwMzdBMDAwMDIxMjA0RThGRkZGRkZGRjAyMTIwNEVDRkZGRkZGRkYxRAorOjEwMzdCMDAwMDIxMjA0RjBGRkZGRkZGRjAyMTIwNEY0RkZGRkZGRkZGRAorOjEwMzdDMDAwMDIxMjA0RjhGRkZGRkZGRjAyMTIwNEZDRkZGRkZGRkZERAorOjEwMzdEMDAwMDIxMjA1MDBGRkZGRkZGRjAyMTIwNTA0RkZGRkZGRkZCQgorOjEwMzdFMDAwMDIxMjA1MDhGRkZGRkZGRjAyMTIwNTBDRkZGRkZGRkY5QgorOjEwMzdGMDAwMDIxMjA1MTBGRkZGRkZGRjAyMTIwNEQ0RkY4MDIwMDAxOQorOjEwMzgwMDAwMDIxMjA0QjRGMDAwNTAwMDAyMTIwNEI4RjAwMDEwMDBEQworOjEwMzgxMDAwMDIxMjAzOTAwMDAwMDAwODAyMTIwMzlDMDAwMDAwMDgzRQorOjEwMzgyMDAwMDIxMjAzQTAwMDAwMDAwODAyMTIwM0E0MDAwMDAwMDIxQworOjEwMzgzMDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0MwMDAwMDAwMDVENQorOjEwMzg0MDAwMDIxMjAzQzQwMDAwMDAwNDAyMTIwM0QwMDAwMDAwMDBCMgorOjEwMzg1MDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMzY4MDAwMDAwM0YyNgorOjEwMzg2MDAwMDIxMjAxQkMwMDAwMDA0MDAyMTIwMUMwMDAwMDE4MDg1MgorOjEwMzg3MDAwMDIxMjAxQzQwMDAwMDgwMzAyMTIwMUM4MDAwMDA4MDM3QworOjEwMzg4MDAwMDIxMjAxQ0MwMDAwMDA0MDAyMTIwMUQwMDAwMDAwMDMyRgorOjEwMzg5MDAwMDIxMjAxRDQwMDAwMDgwMzAyMTIwMUQ4MDAwMDA4MDMzQworOjEwMzhBMDAwMDIxMjAxREMwMDAwMDgwMzAyMTIwMUUwMDAwMTAwMDMyMworOjEwMzhCMDAwMDIxMjAxRTQwMDAwMDgwMzAyMTIwMUU4MDAwMDA4MDNGQworOjEwMzhDMDAwMDIxMjAxRUMwMDAwMDAwMzAyMTIwMUYwMDAwMDAwMDNFQworOjEwMzhEMDAwMDIxMjAxRjQwMDAwMDAwMzAyMTIwMUY4MDAwMDAwMDNDQworOjEwMzhFMDAwMDIxMjAxRkMwMDAwMDAwMzAyMTIwMjAwMDAwMDAwMDNBQgorOjEwMzhGMDAwMDIxMjAyMDQwMDAwMDAwMzAyMTIwMjA4MDAwMDAwMDM4QQorOjEwMzkwMDAwMDIxMjAyMEMwMDAwMDAwMzAyMTIwMjEwMDAwMDAwMDM2OQorOjEwMzkxMDAwMDIxMjAyMTQwMDAwMDAwMzAyMTIwMjE4MDAwMDAwMDM0OQorOjEwMzkyMDAwMDIxMjAyMUMwMDAwMDAwMzAyMTIwMjIwMDAwMDAwMDMyOQorOjEwMzkzMDAwMDIxMjAyMjQwMDAwMDAwMzAyMTIwMjI4MDAwMDI0MDNFNQorOjEwMzk0MDAwMDIxMjAyMkMwMDAwMDAyRjAyMTIwMjMwMDAwMDAwMDlCNworOjEwMzk1MDAwMDIxMjAyMzQwMDAwMDAxOTAyMTIwMjM4MDAwMDAxODQzMQorOjEwMzk2MDAwMDIxMjAyM0MwMDAwMDE4MzAyMTIwMjQwMDAwMDAzMDYyMgorOjEwMzk3MDAwMDIxMjAyNDQwMDAwMDAxOTAyMTIwMjQ4MDAwMDAwMDY3MAorOjEwMzk4MDAwMDIxMjAyNEMwMDAwMDMwNjAyMTIwMjUwMDAwMDAzMDY1RAorOjEwMzk5MDAwMDIxMjAyNTQwMDAwMDMwNjAyMTIwMjU4MDAwMDBDODZCNAorOjEwMzlBMDAwMDIxMjAyNUMwMDAwMDMwNjAyMTIwMjYwMDAwMDAzMDYxRAorOjEwMzlCMDAwMDIxMjAyNjQwMDAwMDAwNjAyMTIwMjY4MDAwMDAwMDYwMworOjEwMzlDMDAwMDIxMjAyNkMwMDAwMDAwNjAyMTIwMjcwMDAwMDAwMDZFMworOjEwMzlEMDAwMDIxMjAyNzQwMDAwMDAwNjAyMTIwMjc4MDAwMDAwMDZDMworOjEwMzlFMDAwMDIxMjAyN0MwMDAwMDAwNjAyMTIwMjgwMDAwMDAwMDZBMworOjEwMzlGMDAwMDIxMjAyODQwMDAwMDAwNjAyMTIwMjg4MDAwMDAwMDY4MworOjEwM0EwMDAwMDIxMjAyOEMwMDAwMDAwNjAyMTIwMjkwMDAwMDAwMDY2MgorOjEwM0ExMDAwMDIxMjAyOTQwMDAwMDAwNjAyMTIwMjk4MDAwMDAwMDY0MgorOjEwM0EyMDAwMDIxMjAyOUMwMDAwMDAwNjAyMTIwMkEwMDAwMDAzMDYxRgorOjEwM0EzMDAwMDIxMjAyQTQwMDAwMDAxMzAyMTIwMkE4MDAwMDAwMDZGNQorOjEwM0E0MDAwMDIxMjAyQjAwMDAwMTAwNDAyMTIwMkI0MDAwMDEwMDRCRQorOjEwM0E1MDAwMDIxMjAzMjQwMDEwNjQ0MDAyMTIwMzI4MDAxMDY0NDA4NAorOjEwM0E2MDAwMDIxMjA1QjQwMDAwMDAwMTAyMTIwMUIwMDAwMDAwMDFDMgorOjEwM0E3MDAwMDYwMEEwMDAwMDAwMDAxNjAyMDBBMEVDNTU1NDAwMDA1MworOjEwM0E4MDAwMDIwMEEwRjA1NTU1NTU1NTAyMDBBMEY0MDAwMDU1NTUxMAorOjEwM0E5MDAwMDIwMEEwRjhGMDAwMDAwMDAyMDBBMEZDNTU1NDAwMDA1NQorOjEwM0FBMDAwMDIwMEExMDA1NTU1NTU1NTAyMDBBMTA0MDAwMDU1NTVDRQorOjEwM0FCMDAwMDIwMEExMDhGMDAwMDAwMDAyMDBBMThDNTU1NDAwMDA5MworOjEwM0FDMDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTU4RQorOjEwM0FEMDAwMDIwMEExOThGMDAwMDAwMDAyMDBBMTlDMDAwMDAwMDA3QworOjEwM0FFMDAwMDIwMEExQTAwMDAxMDAwMDAyMDBBMUE0MDAwMDUwMTRFNworOjEwM0FGMDAwMDIwMEExQTgwMDAwMDAwMDAyMDBBNDVDMDAwMDBDMDA2RAorOjEwM0IwMDAwMDIwMEE2MUMwMDAwMDAwMzAyMDBBMDZDRkY1QzAwMDA4NQorOjEwM0IxMDAwMDIwMEEwNzBGRkY1NUZGRjAyMDBBMDc0MDAwMEZGRkYyRAorOjEwM0IyMDAwMDIwMEEwNzhGMDAwMDNFMDAyMDBBMDdDMDAwMDAwMDA4QQorOjEwM0IzMDAwMDIwMEEwODAwMDAwQTAwMDA2MDBBMDg0MDAwMDAwMDU5NAorOjEwM0I0MDAwMDIwMEEwOTgwRkUwMDAwMDA2MDBBMDlDMDAwMDAwMDcwMworOjEwM0I1MDAwMDIwMEEwQjgwMDAwMDQwMDA2MDBBMEJDMDAwMDAwMDNBMgorOjEwM0I2MDAwMDIwMEEwQzgwMDAwMTAwMDA2MDBBMENDMDAwMDAwMDM2NgorOjEwM0I3MDAwMDIwMEEwRDgwMDAwNDAwMDA2MDBBMERDMDAwMDAwMDMwNgorOjEwM0I4MDAwMDIwMEEwRTgwMDAxMDAwMDA2MDBBMjJDMDAwMDAwMDREMgorOjEwM0I5MDAwMDIwMEExMENGRjVDMDAwMDAyMDBBMTEwRkZGNTVGRkYxNgorOjEwM0JBMDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4RjAwMDAzRTBEMgorOjEwM0JCMDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDBFMworOjEwM0JDMDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDA1QgorOjEwM0JEMDAwMDYwMEExM0MwMDAwMDAwNzAyMDBBMTU4MDAwMDA4MDBGOAorOjEwM0JFMDAwMDYwMEExNUMwMDAwMDAwMzAyMDBBMTY4MDAwMDIwMDBBNAorOjEwM0JGMDAwMDYwMEExNkMwMDAwMDAwMzAyMDBBMTc4MDAwMDgwMDAxNAorOjEwM0MwMDAwMDYwMEExN0MwMDAwMDAwMzAyMDBBMTg4MDAwMjAwMDA2MQorOjEwM0MxMDAwMDYwMEEyM0MwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDBCQworOjEwM0MyMDAwMDAwMDAwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwM0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwM0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMTAwMzIxMQorOjEwM0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwM0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwM0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIwMDU2MDAwMDAwMDBCQworOjEwM0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwM0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwM0NBMDAwMDAwMDAwMDAwMDU2MDA4QzAwMDAwMDAwMDAwMDAwMDAzMgorOjEwM0NCMDAwMDA4QzAwOTAwMDkwMDA5NDAwOTQwMDk4MDA5ODAwOUM2NAorOjEwM0NDMDAwMDA5QzAwQTAwMEEwMDBBNDAwQTQwMEE4MDBBODAwQUNENAorOjEwM0NEMDAwMDBBQzAwQjEwMEIxMDBCMzAwQjMwMEI1MDAwMDAwMDBCQgorOjEwM0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwM0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNTAxMDIwQworOjEwM0QwMDAwMDEwMjAxMEEwMTBBMDExMjAxMTIwMTFCMDExQjAxMjQxNworOjEwM0QxMDAwMDEyNDAxMkQwMTJEMDEzNjAxMzYwMTNGMDEzRjAxNDhFQgorOjEwM0QyMDAwMDE0ODAxNTEwMTUxMDE1QTAwMDAwMDAwMDAwMDAwMDA0QgorOjEwM0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwM0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwM0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwM0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwM0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwM0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwM0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwM0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwM0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwM0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwM0REMDAwMDAwMDAwMDAwMDAwMDAwMDAxNUEwMTVGMDAwMDAwMDAyOAorOjEwM0RFMDAwMDAwMDAwMDAwMTVGMDE2MDAxNjAwMTYxMDE2MTAxNjI4QQorOjEwM0RGMDAwMDE2MjAxNjMwMTYzMDE2NDAxNjQwMTY1MDE2NTAxNjY5QgorOjEwM0UwMDAwMDE2NjAxNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwM0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwM0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwM0UzMDAwMDE2NzAxNkMwMTZDMDE3OTAxNzkwMTg2MDAwMDAwMDBDNQorOjEwM0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwM0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwM0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwM0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAxODYwMTg3MDAwMDAwMDAyMworOjEwM0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwM0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwM0VCMDAwMDAwMDAwMDAwMTg3MDFCRTAwMDAwMDAwMDAwMDAwMDBCQgorOjEwM0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwM0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwM0VFMDAwMDFCRTAxRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFOTAyMUFBQgorOjEwM0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAyMUEwMjIxMDIyMTAyMjgxNQorOjEwM0YyMDAwMDIyODAyMkYwMjJGMDIzNjAyMzYwMjNEMDIzRDAyNDREMQorOjEwM0YzMDAwMDI0NDAyNEIwMjRCMDI1MjAyNTIwMjhBMDAwMDAwMDA2RAorOjEwM0Y0MDAwMDAwMDAwMDAwMjhBMDI4RTAyOEUwMjkyMDI5MjAyOTYwNQorOjEwM0Y1MDAwMDI5NjAyOUEwMjlBMDI5RTAyOUUwMkEyMDJBMjAyQTY2MQorOjEwM0Y2MDAwMDJBNjAyQUEwMkFBMDJGQzAyRkMwMzEzMDMxMzAzMkFGQworOjEwM0Y3MDAwMDMyQTAzMkQwMzJEMDMzMDAzMzAwMzMzMDMzMzAzMzZBOQorOjEwM0Y4MDAwMDMzNjAzMzkwMzM5MDMzQzAzM0MwMzNGMDMzRjAzNDIzOQorOjEwM0Y5MDAwMDM0MjAzODMwMzgzMDM4QTAzOEEwMzkxMDM5MTAzOTVGNgorOjEwM0ZBMDAwMDM5NTAzOTkwMzk5MDM5RDAzOUQwM0ExMDNBMTAzQTUxMQorOjEwM0ZCMDAwMDNBNTAzQTkwM0E5MDNBRDAzQUQwM0IxMDNCMTAzQjI4NAorOjEwM0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwM0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwM0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAzQjIwM0M0MDAwMDAwMDA1NQorOjEwM0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNDAxMDAwMDAwMDAwMDAwM0M0MDNEOTAzRDkwM0RDMDNEQzAzREY4MQorOjEwNDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNDA0MDAwMDNERjA0MEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwQzA1MEYyQworOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNDA5MDAwMDAwMDAwMDAwMDAwMDAwMDA1MEYwNTE2MDUxNjA1MUFCNworOjEwNDBBMDAwMDUxQTA1MUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwNDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNDBDMDAwMDAwMDAwMDAwNTFFMDU1RTAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNDBEMDAwMDU1RTA1NjcwNTY3MDU3MDA1NzAwNTc5MDU3OTA1ODIzOAorOjEwNDBFMDAwMDU4MjA1OEIwNThCMDU5NDA1OTQwNTlEMDU5RDA1QTYwOAorOjEwNDBGMDAwMDVBNjA1RkYwNUZGMDYxMTA2MTEwNjIzMDYyMzA2Mjc2MAorOjEwNDEwMDAwMDYyNzA2MkIwNjJCMDYyRjA2MkYwNjMzMDYzMzA2MzcwNworOjEwNDExMDAwMDYzNzA2M0IwNjNCMDYzRjA2M0YwNjQzMDY0MzA2NEE3NAorOjEwNDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNDE0MDAwMDAwMDAwMDAwMDAwMDAwMDA2NEEwNjUwMDAwMDAwMDBDOQorOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNDE3MDAwMDAwMDAwMDAwNjUwMDY1MzAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNDFBMDAwMDY1MzA2NTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwNDFEMDAwMDAwMDAwMDAwMDAwMDAwMDA2NTkwNjY4MDY2ODA2NzcyNworOjEwNDFFMDAwMDY3NzA2ODYwNjg2MDY5NTA2OTUwNkE0MDZBNDA2QjNGNworOjEwNDFGMDAwMDZCMzA2QzIwNkMyMDZEMTA2RDEwNzQyMDAwMDAwMDA3RgorOjEwNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwNDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwNDIyMDAwMDAwMDAwMDAwNzQyMDc1NTA3NTUwNzY2MDc2NjA3NzczNQorOjEwNDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwNDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwNDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwNDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwNDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwNDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwNDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNDJCMDAwMDAwMTAwMDAwMDAyMDRDMDAwMDMwOTgwMDAwNDBFNDA1OQorOjEwNDJDMDAwMDAwNTEzMDAwMDA2MTdDMDAwMDcxQzgwMDAwODIxNDBFRAorOjEwNDJEMDAwMDAwOTI2MDAwMDBBMkFDMDAwMEIyRjgwMDAwQzM0NDA4MQorOjEwNDJFMDAwMDAwRDM5MDAwMDBFM0RDMDAwMEY0MjgwMDAxMDQ3NDAxNQorOjEwNDJGMDAwMDAxMTRDMDAwMDEyNTBDMDAwMTM1NTgwMDAxNDVBNDBBOQorOjEwNDMwMDAwMDAxNTVGMDAwMDE2NjNDMDAwMTc2ODgwMDAxODZENDAzQworOjEwNDMxMDAwMDAxOTcyMDAwMDFBNzZDMDAwMUI3QjgwMDAxQzgwNDBEMAorOjEwNDMyMDAwMDAxRDg1MDAwMDFFODlDMDAwMUY4RTgwMDAyMDkzNDA2NAorOjEwNDMzMDAwMDAwMDIwMDAwMDAwNDAwMDAwMDA2MDAwMDAwMDgwMDAzRAorOjEwNDM0MDAwMDAwMEEwMDAwMDAwQzAwMDAwMDBFMDAwMDAwMTAwMDAyQworOjEwNDM1MDAwMDAwMTIwMDAwMDAxNDAwMDAwMDE2MDAwMDAwMTgwMDAxOQorOjEwNDM2MDAwMDAwMUEwMDAwMDAxQzAwMDAwMDFFMDAwMDAwMjAwMDAwOAorOjEwNDM3MDAwMDAwMjIwMDAwMDAyNDAwMDAwMDI2MDAwMDAwMjgwMDBGNQorOjEwNDM4MDAwMDAwMkEwMDAwMDAyQzAwMDAwMDJFMDAwMDAwMzAwMDBFNAorOjEwNDM5MDAwMDAwMzIwMDAwMDAzNDAwMDAwMDM2MDAwMDAwMzgwMDBEMQorOjEwNDNBMDAwMDAwM0EwMDAwMDAzQzAwMDAwMDNFMDAwMDAwNDAwMDBDMAorOjEwNDNCMDAwMDAwNDIwMDAwMDA0NDAwMDAwMDQ2MDAwMDAwNDgwMDBBRAorOjEwNDNDMDAwMDAwNEEwMDAwMDA0QzAwMDAwMDRFMDAwMDAwNTAwMDA5QworOjEwNDNEMDAwMDAwNTIwMDAwMDA1NDAwMDAwMDU2MDAwMDAwNTgwMDA4OQorOjEwNDNFMDAwMDAwNUEwMDAwMDA1QzAwMDAwMDVFMDAwMDAwNjAwMDA3OAorOjEwNDNGMDAwMDAwNjIwMDAwMDA2NDAwMDAwMDY2MDAwMDAwNjgwMDA2NQorOjEwNDQwMDAwMDAwNkEwMDAwMDA2QzAwMDAwMDZFMDAwMDAwNzAwMDA1MworOjEwNDQxMDAwMDAwNzIwMDAwMDA3NDAwMDAwMDc2MDAwMDAwNzgwMDA0MAorOjEwNDQyMDAwMDAwN0EwMDAwMDA3QzAwMDAwMDdFMDAwMDAwODAwMDAyRgorOjEwNDQzMDAwMDAwODIwMDAwMDA4NDAwMDAwMDg2MDAwMDAwODgwMDAxQworOjEwNDQ0MDAwMDAwOEEwMDAwMDA4QzAwMDAwMDhFMDAwMDAwOTAwMDAwQgorOjEwNDQ1MDAwMDAwOTIwMDAwMDA5NDAwMDAwMDk2MDAwMDAwOTgwMDBGOAorOjEwNDQ2MDAwMDAwOUEwMDAwMDA5QzAwMDAwMDlFMDAwMDAwQTAwMDBFNworOjEwNDQ3MDAwMDAwQTIwMDAwMDBBNDAwMDAwMEE2MDAwMDAwQTgwMDBENAorOjEwNDQ4MDAwMDAwQUEwMDAwMDBBQzAwMDAwMEFFMDAwMDAwQjAwMDBDMworOjEwNDQ5MDAwMDAwQjIwMDAwMDBCNDAwMDAwMEI2MDAwMDAwQjgwMDBCMAorOjEwNDRBMDAwMDAwQkEwMDAwMDBCQzAwMDAwMEJFMDAwMDAwQzAwMDA5RgorOjEwNDRCMDAwMDAwQzIwMDAwMDBDNDAwMDAwMEM2MDAwMDAwQzgwMDA4QworOjEwNDRDMDAwMDAwQ0EwMDAwMDBDQzAwMDAwMENFMDAwMDAwRDAwMDA3QgorOjEwNDREMDAwMDAwRDIwMDAwMDBENDAwMDAwMEQ2MDAwMDAwRDgwMDA2OAorOjEwNDRFMDAwMDAwREEwMDAwMDBEQzAwMDAwMERFMDAwMDAwRTAwMDA1NworOjEwNDRGMDAwMDAwRTIwMDAwMDBFNDAwMDAwMEU2MDAwMDAwRTgwMDA0NAorOjEwNDUwMDAwMDAwRUEwMDAwMDBFQzAwMDAwMEVFMDAwMDAwRjAwMDAzMgorOjEwNDUxMDAwMDAwRjIwMDAwMDBGNDAwMDAwMEY2MDAwMDAwRjgwMDAxRgorOjEwNDUyMDAwMDAwRkEwMDAwMDBGQzAwMDAwMEZFMDAwMDAxMDAwMDAwRQorOjEwNDUzMDAwMDAxMDIwMDAwMDEwNDAwMDAwMTA2MDAwMDAxMDgwMDBGQgorOjEwNDU0MDAwMDAxMEEwMDAwMDEwQzAwMDAwMTBFMDAwMDAxMTAwMDBFQQorOjEwNDU1MDAwMDAxMTIwMDAwMDExNDAwMDAwMTE2MDAwMDAxMTgwMDBENworOjEwNDU2MDAwMDAxMUEwMDAwMDExQzAwMDAwMTFFMDAwMDAxMjAwMDBDNgorOjEwNDU3MDAwMDAxMjIwMDAwMDEyNDAwMDAwMTI2MDAwMDAxMjgwMDBCMworOjEwNDU4MDAwMDAxMkEwMDAwMDEyQzAwMDAwMTJFMDAwMDAxMzAwMDBBMgorOjEwNDU5MDAwMDAxMzIwMDAwMDEzNDAwMDAwMTM2MDAwMDAxMzgwMDA4RgorOjEwNDVBMDAwMDAxM0EwMDAwMDEzQzAwMDAwMTNFMDAwMDAxNDAwMDA3RQorOjEwNDVCMDAwMDAxNDIwMDAwMDE0NDAwMDAwMTQ2MDAwMDAxNDgwMDA2QgorOjEwNDVDMDAwMDAxNEEwMDAwMDE0QzAwMDAwMTRFMDAwMDAxNTAwMDA1QQorOjEwNDVEMDAwMDAxNTIwMDAwMDE1NDAwMDAwMTU2MDAwMDAxNTgwMDA0NworOjEwNDVFMDAwMDAxNUEwMDAwMDE1QzAwMDAwMTVFMDAwMDAxNjAwMDAzNgorOjEwNDVGMDAwMDAxNjIwMDAwMDE2NDAwMDAwMTY2MDAwMDAxNjgwMDAyMworOjEwNDYwMDAwMDAxNkEwMDAwMDE2QzAwMDAwMTZFMDAwMDAxNzAwMDAxMQorOjEwNDYxMDAwMDAxNzIwMDAwMDE3NDAwMDAwMTc2MDAwMDAxNzgwMDBGRQorOjEwNDYyMDAwMDAxN0EwMDAwMDE3QzAwMDAwMTdFMDAwMDAxODAwMDBFRAorOjEwNDYzMDAwMDAxODIwMDAwMDE4NDAwMDAwMTg2MDAwMDAxODgwMDBEQQorOjEwNDY0MDAwMDAxOEEwMDAwMDE4QzAwMDAwMThFMDAwMDAxOTAwMDBDOQorOjEwNDY1MDAwMDAxOTIwMDAwMDE5NDAwMDAwMTk2MDAwMDAxOTgwMDBCNgorOjEwNDY2MDAwMDAxOUEwMDAwMDE5QzAwMDAwMTlFMDAwMDAxQTAwMDBBNQorOjEwNDY3MDAwMDAxQTIwMDAwMDFBNDAwMDAwMUE2MDAwMDAxQTgwMDA5MgorOjEwNDY4MDAwMDAxQUEwMDAwMDFBQzAwMDAwMUFFMDAwMDAxQjAwMDA4MQorOjEwNDY5MDAwMDAxQjIwMDAwMDFCNDAwMDAwMUI2MDAwMDAxQjgwMDA2RQorOjEwNDZBMDAwMDAxQkEwMDAwMDFCQzAwMDAwMUJFMDAwMDAxQzAwMDA1RAorOjEwNDZCMDAwMDAxQzIwMDAwMDFDNDAwMDAwMUM2MDAwMDAxQzgwMDA0QQorOjEwNDZDMDAwMDAxQ0EwMDAwMDFDQzAwMDAwMUNFMDAwMDAxRDAwMDAzOQorOjEwNDZEMDAwMDAxRDIwMDAwMDFENDAwMDAwMUQ2MDAwMDAxRDgwMDAyNgorOjEwNDZFMDAwMDAxREEwMDAwMDFEQzAwMDAwMURFMDAwMDAxRTAwMDAxNQorOjEwNDZGMDAwMDAxRTIwMDAwMDFFNDAwMDAwMUU2MDAwMDAxRTgwMDAwMgorOjEwNDcwMDAwMDAxRUEwMDAwMDFFQzAwMDAwMUVFMDAwMDAxRjAwMDBGMAorOjEwNDcxMDAwMDAxRjIwMDAwMDFGNDAwMDAwMUY2MDAwMDAxRjgwMDBERAorOjEwNDcyMDAwMDAxRkEwMDAwMDFGQzAwMDAwMUZFMDAwMDAyMDAwMDBDQworOjEwNDczMDAwMDAyMDIwMDAwMDIwNDAwMDAwMjA2MDAwMDAyMDgwMDBCOQorOjEwNDc0MDAwMDAyMEEwMDAwMDIwQzAwMDAwMjBFMDAwMDAyMTAwMDBBOAorOjEwNDc1MDAwMDAyMTIwMDAwMDIxNDAwMDAwMjE2MDAwMDAyMTgwMDA5NQorOjEwNDc2MDAwMDAyMUEwMDAwMDIxQzAwMDAwMjFFMDAwMDAyMjAwMDA4NAorOjEwNDc3MDAwMDAyMjIwMDAwMDIyNDAwMDAwMjI2MDAwMDAyMjgwMDA3MQorOjEwNDc4MDAwMDAyMkEwMDAwMDIyQzAwMDAwMjJFMDAwMDAyMzAwMDA2MAorOjEwNDc5MDAwMDAyMzIwMDAwMDIzNDAwMDAwMjM2MDAwMDAyMzgwMDA0RAorOjEwNDdBMDAwMDAyM0EwMDAwMDIzQzAwMDAwMjNFMDAwMDAyNDAwMDAzQworOjEwNDdCMDAwMDAyNDIwMDAwMDI0NDAwMDAwMjQ2MDAwMDAyNDgwMDAyOQorOjEwNDdDMDAwMDAyNEEwMDAwMDI0QzAwMDAwMjRFMDAwMDAyNTAwMDAxOAorOjEwNDdEMDAwMDAyNTIwMDAwMDI1NDAwMDAwMjU2MDAwMDAyNTgwMDAwNQorOjEwNDdFMDAwMDAyNUEwMDAwMDI1QzAwMDAwMjVFMDAwMDAyNjAwMDBGNAorOjEwNDdGMDAwMDAyNjIwMDAwMDI2NDAwMDAwMjY2MDAwMDAyNjgwMDBFMQorOjEwNDgwMDAwMDAyNkEwMDAwMDI2QzAwMDAwMjZFMDAwMDAyNzAwMDBDRgorOjEwNDgxMDAwMDAyNzIwMDAwMDI3NDAwMDAwMjc2MDAwMDAyNzgwMDBCQworOjEwNDgyMDAwMDAyN0EwMDAwMDI3QzAwMDAwMjdFMDAwMDAyODAwMDBBQgorOjEwNDgzMDAwMDAyODIwMDAwMDI4NDAwMDAwMjg2MDAwMDAyODgwMDA5OAorOjEwNDg0MDAwMDAyOEEwMDAwMDI4QzAwMDAwMjhFMDAwMDAyOTAwMDA4NworOjEwNDg1MDAwMDAyOTIwMDAwMDI5NDAwMDAwMjk2MDAwMDAyOTgwMDA3NAorOjEwNDg2MDAwMDAyOUEwMDAwMDI5QzAwMDAwMjlFMDAwMDAyQTAwMDA2MworOjEwNDg3MDAwMDAyQTIwMDAwMDJBNDAwMDAwMkE2MDAwMDAyQTgwMDA1MAorOjEwNDg4MDAwMDAyQUEwMDAwMDJBQzAwMDAwMkFFMDAwMDAyQjAwMDAzRgorOjEwNDg5MDAwMDAyQjIwMDAwMDJCNDAwMDAwMkI2MDAwMDAyQjgwMDAyQworOjEwNDhBMDAwMDAyQkEwMDAwMDJCQzAwMDAwMkJFMDAwMDAyQzAwMDAxQgorOjEwNDhCMDAwMDAyQzIwMDAwMDJDNDAwMDAwMkM2MDAwMDAyQzgwMDAwOAorOjEwNDhDMDAwMDAyQ0EwMDAwMDJDQzAwMDAwMkNFMDAwMDAyRDAwMDBGNworOjEwNDhEMDAwMDAyRDIwMDAwMDJENDAwMDAwMkQ2MDAwMDAyRDgwMDBFNAorOjEwNDhFMDAwMDAyREEwMDAwMDJEQzAwMDAwMkRFMDAwMDAyRTAwMDBEMworOjEwNDhGMDAwMDAyRTIwMDAwMDJFNDAwMDAwMkU2MDAwMDAyRTgwMDBDMAorOjEwNDkwMDAwMDAyRUEwMDAwMDJFQzAwMDAwMkVFMDAwMDAyRjAwMDBBRQorOjEwNDkxMDAwMDAyRjIwMDAwMDJGNDAwMDAwMkY2MDAwMDAyRjgwMDA5QgorOjEwNDkyMDAwMDAyRkEwMDAwMDJGQzAwMDAwMkZFMDAwMDAzMDAwMDA4QQorOjEwNDkzMDAwMDAzMDIwMDAwMDMwNDAwMDAwMzA2MDAwMDAzMDgwMDA3NworOjEwNDk0MDAwMDAzMEEwMDAwMDMwQzAwMDAwMzBFMDAwMDAzMTAwMDA2NgorOjEwNDk1MDAwMDAzMTIwMDAwMDMxNDAwMDAwMzE2MDAwMDAzMTgwMDA1MworOjEwNDk2MDAwMDAzMUEwMDAwMDMxQzAwMDAwMzFFMDAwMDAzMjAwMDA0MgorOjEwNDk3MDAwMDAzMjIwMDAwMDMyNDAwMDAwMzI2MDAwMDAzMjgwMDAyRgorOjEwNDk4MDAwMDAzMkEwMDAwMDMyQzAwMDAwMzJFMDAwMDAzMzAwMDAxRQorOjEwNDk5MDAwMDAzMzIwMDAwMDMzNDAwMDAwMzM2MDAwMDAzMzgwMDAwQgorOjEwNDlBMDAwMDAzM0EwMDAwMDMzQzAwMDAwMzNFMDAwMDAzNDAwMDBGQQorOjEwNDlCMDAwMDAzNDIwMDAwMDM0NDAwMDAwMzQ2MDAwMDAzNDgwMDBFNworOjEwNDlDMDAwMDAzNEEwMDAwMDM0QzAwMDAwMzRFMDAwMDAzNTAwMDBENgorOjEwNDlEMDAwMDAzNTIwMDAwMDM1NDAwMDAwMzU2MDAwMDAzNTgwMDBDMworOjEwNDlFMDAwMDAzNUEwMDAwMDM1QzAwMDAwMzVFMDAwMDAzNjAwMDBCMgorOjEwNDlGMDAwMDAzNjIwMDAwMDM2NDAwMDAwMzY2MDAwMDAzNjgwMDA5RgorOjEwNEEwMDAwMDAzNkEwMDAwMDM2QzAwMDAwMzZFMDAwMDAzNzAwMDA4RAorOjEwNEExMDAwMDAzNzIwMDAwMDM3NDAwMDAwMzc2MDAwMDAzNzgwMDA3QQorOjEwNEEyMDAwMDAzN0EwMDAwMDM3QzAwMDAwMzdFMDAwMDAzODAwMDA2OQorOjEwNEEzMDAwMDAzODIwMDAwMDM4NDAwMDAwMzg2MDAwMDAzODgwMDA1NgorOjEwNEE0MDAwMDAzOEEwMDAwMDM4QzAwMDAwMzhFMDAwMDAzOTAwMDA0NQorOjEwNEE1MDAwMDAzOTIwMDAwMDM5NDAwMDAwMzk2MDAwMDAzOTgwMDAzMgorOjEwNEE2MDAwMDAzOUEwMDAwMDM5QzAwMDAwMzlFMDAwMDAzQTAwMDAyMQorOjEwNEE3MDAwMDAzQTIwMDAwMDNBNDAwMDAwM0E2MDAwMDAzQTgwMDAwRQorOjEwNEE4MDAwMDAzQUEwMDAwMDNBQzAwMDAwM0FFMDAwMDAzQjAwMDBGRAorOjEwNEE5MDAwMDAzQjIwMDAwMDNCNDAwMDAwM0I2MDAwMDAzQjgwMDBFQQorOjEwNEFBMDAwMDAzQkEwMDAwMDNCQzAwMDAwM0JFMDAwMDAzQzAwMDBEOQorOjEwNEFCMDAwMDAzQzIwMDAwMDNDNDAwMDAwM0M2MDAwMDAzQzgwMDBDNgorOjEwNEFDMDAwMDAzQ0EwMDAwMDNDQzAwMDAwM0NFMDAwMDAzRDAwMDBCNQorOjEwNEFEMDAwMDAzRDIwMDAwMDNENDAwMDAwM0Q2MDAwMDAzRDgwMDBBMgorOjEwNEFFMDAwMDAzREEwMDAwMDNEQzAwMDAwM0RFMDAwMDAzRTAwMDA5MQorOjEwNEFGMDAwMDAzRTIwMDAwMDNFNDAwMDAwM0U2MDAwMDAzRTgwMDA3RQorOjEwNEIwMDAwMDAzRUEwMDAwMDNFQzAwMDAwM0VFMDAwMDAzRjAwMDA2QworOjEwNEIxMDAwMDAzRjIwMDAwMDNGNDAwMDAwM0Y2MDAwMDAzRjgwMDA1OQorOjEwNEIyMDAwMDAzRkEwMDAwMDNGQzAwMDAwM0ZFMDAwMDAzRkUwMDE2OAorOjEwNEIzMDAwMDAwMDAwMDAwMDAwMDFGRjAwMDAwMjAwMDAwMDdGRjhGQworOjEwNEI0MDAwMDAwMDdGRjgwMDAwMENERjAwMDAxNTAwMDAwMDAwMDFFRAorOjEwNEI1MDAwMDAwMDAwMDEwMDAwMDAwMUZGRkZGRkZGRkZGRkZGRkY1QgorOjEwNEI2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1NQorOjEwNEI3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0NQorOjEwNEI4MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzNQorOjEwNEI5MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYyNQorOjEwNEJBMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxNQorOjEwNEJCMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwNQorOjEwNEJDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNQorOjEwNEJEMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDBFMQorOjEwNEJFMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZEMQorOjEwNEJGMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZCRAorOjEwNEMwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDBBQworOjEwNEMxMDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwRkZGRkZGRkZGRgorOjEwNEMyMDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkY4QworOjEwNEMzMDAwMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGMDAwMDAwMDBEQgorOjEwNEM0MDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDM2OQorOjEwNEM1MDAwMDBCRUJDMjBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZDMgorOjEwNEM2MDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAzMDBCRUJDMjBBQgorOjEwNEM3MDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDAzQworOjEwNEM4MDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwRkZGRkZGRkY4RgorOjEwNEM5MDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkYxQworOjEwNENBMDAwMDAwMDAwMDMwMEJFQkMyMDAwMDAyMDAwMDAwMDQwQzA0NworOjEwNENCMDAwMDAwMDYxODAwMDAwODI0MDAwMDBBMzAwMDAwMEMzQzAyQgorOjEwNENDMDAwMDAwMEU0ODAwMDAxMDU0MDAwMDEyNjAwMDAwMTQ2QzAwQworOjEwNENEMDAwMDAwMTY3ODAwMDAxODg0MDAwMDFBOTAwMDAwMUM5QzBFRgorOjEwNENFMDAwMDAwMUVBODAwMDAyMEI0MDAwMDIyQzAwMDAwMjRDQzBEMAorOjEwNENGMDAwMDAwMjZEODAwMDAyOEU0MDAwMDJBRjAwMDAwMkNGQzBCMworOjEwNEQwMDAwMDAwMkYwODAwMDAzMTE0MDAwMDMzMjAwMDAwMzUyQzA5MworOjEwNEQxMDAwMDAwMzczODAwMDAzOTQ0MDAwMDNCNTAwMDAwM0Q1QzA3NgorOjEwNEQyMDAwMDAwM0Y2ODAwMDA0MTc0MDAwMDQzODAwMDAwNDU4QzA1NworOjEwNEQzMDAwMDAwNDc5ODAwMDA0OUE0MDAwMDA4MDAwMDAwMTAzODA5NAorOjEwNEQ0MDAwMDAwMTg3MDAwMDAyMEE4MDAwMDI4RTAwMDAwMzExODAyQgorOjEwNEQ1MDAwMDAwMzk1MDAwMDA0MTg4MDAwMDQ5QzAwMDAwNTFGODBEQgorOjEwNEQ2MDAwMDAwNUEzMDAwMDA2MjY4MDAwMDZBQTAwMDAwNzJEODA4QgorOjEwNEQ3MDAwMDAwN0IxMDAwMDA4MzQ4MDAwMDhCODAwMDAwOTNCODAzQgorOjEwNEQ4MDAwMDAwOUJGMDAwMDBBNDI4MDAwMEFDNjAwMDAwQjQ5ODBFQgorOjEwNEQ5MDAwMDAwQkNEMDAwMDBDNTA4MDAwMENENDAwMDAwRDU3ODA5QgorOjEwNERBMDAwMDAwRERCMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDE5M0NEOAorOjEwNERCMDAwMDAwMDE1MDAwMDAwMTkwMDAwMDAwMDI4MDAxMDAwMDA4RAorOjEwNERDMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGNDAwMDAwMDBBNworOjEwNEREMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBEMworOjEwNERFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDMworOjEwNERGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCMworOjEwNEUwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBMgorOjEwNEUxMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5MgorOjEwNEUyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4MgorOjEwNEUzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA3MgorOjEwNEU0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDdGRjgyQgorOjEwNEU1MDAwMDAwMDdGRjgwMDAwMDVDNzAwMDAxNTAwRkZGRkZGRkZGRQorOjEwNEU2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1MgorOjEwNEU3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY0MgorOjEwNEU4MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzMgorOjEwNEU5MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYyMgorOjEwNEVBMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxMgorOjEwNEVCMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwMgorOjEwNEVDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMgorOjEwNEVEMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAwMDAwMDA5RQorOjEwNEVFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDMgorOjEwNEVGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCMgorOjEwNEYwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBMQorOjEwNEYxMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5MQorOjEwNEYyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4MQorOjEwNEYzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA3MQorOjEwNEY0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA2MQorOjEwNEY1MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDEwMDA4MQorOjEwNEY2MDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwMDAwMDUyMDA1RAorOjEwNEY3MDAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwMDAwMDk0MDA0NQorOjEwNEY4MDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwMDAwMEQ2MDAyRAorOjEwNEY5MDAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwMDAwMTE4MDAxMworOjEwNEZBMDAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwMDAwMTVBMDBGOQorOjEwNEZCMDAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwMDAwMTlDMDBFMQorOjEwNEZDMDAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwMDAwMURFMDBDOQorOjEwNEZEMDAwMDAwMUVFODAwMDAxRkYwMDAwMDA3RkY4MDAwMDdGRjg3NAorOjEwNEZFMDAwMDAwMDExMkUwMDAwMzUwMDEwMDAwMDAwMDAwMDI4QUQ2OAorOjEwNEZGMDAwMDAwMDAwMDAwMDAxMDAwMTAwMTUwMDA1Q0NDQ0NDQzU2QworOjEwNTAwMDAwRkZGRkZGRkZGRkZGRkZGRjcwNTgxMDNDMDAwMDAwMDA5NAorOjEwNTAxMDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxQ0NDQ0NDQ0NDNAorOjEwNTAyMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0NFQQorOjEwNTAzMDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0NEQQorOjEwNTA0MDAwQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQ0NDQ0NDQ0NDQQorOjEwNTA1MDAwQ0NDQzAyMDFDQ0NDQ0NDQzAwMDAwMDAwRkZGRkZGRkY4OQorOjEwNTA2MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA0MAorOjEwNTA3MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzMAorOjEwNTA4MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAyMAorOjEwNTA5MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAxMAorOjEwNTBBMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMAorOjEwNTBCMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBGMAorOjEwNTBDMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFMAorOjEwNTBEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBEMAorOjEwNTBFMDAwMDAwRTAyMzIwMTE2MDBENjAwMTAwMDAwMDAwMDAwMDA4MQorOjEwNTBGMDAwMDA3MjAyMzYwMTIzMDBGMzAwMTAwMDAwMDAwMDAwMDBERgorOjEwNTEwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBMworOjEwNTExMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5MworOjEwNTEyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4MworOjEwNTEzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3MworOjEwNTE0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2MworOjEwNTE1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1MworOjEwNTE2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0MworOjEwNTE3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzMworOjEwNTE4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyMworOjEwNTE5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxMworOjEwNTFBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMworOjEwNTFCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGMworOjEwNTFDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFMworOjEwNTFEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEMworOjEwNTFFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDMworOjEwNTFGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCMworOjEwNTIwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBBMgorOjEwNTIxMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA5MgorOjEwNTIyMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA4MgorOjEwNTIzMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA3MgorOjEwNTI0MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2MgorOjEwNTI1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1MgorOjEwNTI2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0MgorOjEwNTI3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzMgorOjEwNTI4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAyMgorOjEwNTI5MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxMgorOjEwNTJBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMgorOjEwNTJCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGMgorOjEwNTJDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFMgorOjEwNTJEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBEMgorOjEwNTJFMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBDMgorOjEwNTJGMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBCMgorOjEwNTMwMDAwRkZGRkZGRjMzMThGRkZGRjBDMzBDMzBDQzMwQzMwQzMyMgorOjEwNTMxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q1RgorOjEwNTMyMDAwRkZGRkZGRjEzMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNQorOjEwNTMzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QzRQorOjEwNTM0MDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMAorOjEwNTM1MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QxRAorOjEwNTM2MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBNgorOjEwNTM3MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFNgorOjEwNTM4MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFNAorOjEwNTM5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RENworOjEwNTNBMDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNEQworOjEwNTNCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RBRgorOjEwNTNDMDAwRkZGRkZGRjczMUVGRkZGRjBDMzBDMzBDQzMwQzMwQzNGRQorOjEwNTNEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q3RgorOjEwNTNFMDAwRkZGRkZGRjUzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNBMQorOjEwNTNGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QzRgorOjEwNTQwMDAwRkZGRkZGRjMzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzNBMQorOjEwNTQxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q1RQorOjEwNTQyMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MworOjEwNTQzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QzRAorOjEwNTQ0MDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwRgorOjEwNTQ1MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QxQworOjEwNTQ2MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBNQorOjEwNTQ3MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFNQorOjEwNTQ4MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMworOjEwNTQ5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RENgorOjEwNTRBMDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNEQgorOjEwNTRCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RBRQorOjEwNTRDMDAwRkZGRkZGRjczMEVGRkZGRjBDMzBDMzBDQzMwQzMwQzNGRQorOjEwNTREMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q3RQorOjEwNTRFMDAwRkZGRkZGRjUzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MAorOjEwNTRGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QzRQorOjEwNTUwMDAwRkZGRkZGRjMzMUVGRkZGRjBDMzBDMzBDQzMwQzMwQzNDMAorOjEwNTUxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q1RAorOjEwNTUyMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MgorOjEwNTUzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QzQworOjEwNTU0MDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwRQorOjEwNTU1MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QxQgorOjEwNTU2MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBNAorOjEwNTU3MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFNAorOjEwNTU4MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMgorOjEwNTU5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RENQorOjEwNTVBMDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNEQQorOjEwNTVCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RBRAorOjEwNTVDMDAwRkZGRkZGOTcwNTZGRkZGRjBDMzBDMzBDQzMwQzMwQzMwOAorOjEwNTVEMDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RCMAorOjEwNTVFMDAwRkZGRkZGRjUzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzNCRQorOjEwNTVGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QzRAorOjEwNTYwMDAwRkZGRkZGRjMzMjBGRkZGRjBDMzBDMzBDQzMwQzMwQzM5RQorOjEwNTYxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q1QworOjEwNTYyMDAwRkZGRkZGRjEzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzM4MQorOjEwNTYzMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QzQgorOjEwNTY0MDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwRAorOjEwNTY1MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QxQQorOjEwNTY2MDAwRkZGRkY0MDYxQ0JGRkZGRjBDMzBDMzA1QzMwQzMwQzNBMworOjEwNTY3MDAwQ0YzMDAwMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFMworOjEwNTY4MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMQorOjEwNTY5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0RENAorOjEwNTZBMDAwRkZGRkZGOEEwNDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM3NQorOjEwNTZCMDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RERgorOjEwNTZDMDAwRkZGRkZGOTcwNUNGRkZGRjBDMzBDMzBDQzMwQzMwQzNBNworOjEwNTZEMDAwQ0YzQ0MwMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RBRgorOjEwNTZFMDAwRkZGRkZGRjUzMTBGRkZGRjBDMzBDMzBDQzMwQzMwQzNCRAorOjEwNTZGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QzQworOjEwNTcwMDAwRkZGRkZGRjMzMTZGRkZGRjBDMzBDMzBDQzMwQzMwQzMzRQorOjEwNTcxMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q1QgorOjEwNTcyMDAwRkZGRkZGRjEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzM2MQorOjEwNTczMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0QzQQorOjEwNTc0MDAwRkZGRkZGRjYzMDVGRkZGRjBDMzBDMzBDQzMwQzMwQzMwQworOjEwNTc1MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0QxOQorOjEwNTc2MDAwRkZGRkZGRjYzMEJGRkZGRjBDMzBDMzBDQzMwQzMwQzM4QworOjEwNTc3MDAwQ0YzQ0YzMTRGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0RFMworOjEwNTc4MDAwRkZGRkZGRjIzMDRGRkZGRjBDMzBDMzBDQzMwQzMwQzNFMAorOjEwNTc5MDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0REMworOjEwNTdBMDAwRkZGRkZGRkEzMDJGRkZGRjBDMzBDMzBDQzMwQzMwQzNEOAorOjEwNTdCMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RBQgorOjEwNTdDMDAwRkZGRkZGRjczMUNGRkZGRjBDMzBDMzBDQzMwQzMwQzMxQQorOjEwNTdEMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0Q3QgorOjEwNTdFMDAwRkZGRkZGRjAzMDdGRkZGRjBDMzBDMzBDQzMwQzMwQzM1MgorOjEwNTdGMDAwQ0YzQ0YzMDBGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0QzQgorOjEwNTgwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEMgorOjEwNTgxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q4RQorOjEwNTgyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCMgorOjEwNTgzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q2RAorOjEwNTg0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5MgorOjEwNTg1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q0QworOjEwNTg2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3MgorOjEwNTg3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QyQQorOjEwNTg4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1MgorOjEwNTg5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwNgorOjEwNThBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzMgorOjEwNThCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RERQorOjEwNThDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMgorOjEwNThEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RBRQorOjEwNThFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGMgorOjEwNThGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q2RQorOjEwNTkwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEMQorOjEwNTkxMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q4RAorOjEwNTkyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCMQorOjEwNTkzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q2QworOjEwNTk0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5MQorOjEwNTk1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q0QgorOjEwNTk2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3MQorOjEwNTk3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QyOQorOjEwNTk4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1MQorOjEwNTk5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwNQorOjEwNTlBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzMQorOjEwNTlCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0RERAorOjEwNTlDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMQorOjEwNTlEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RBRAorOjEwNTlFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGMQorOjEwNTlGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q2RAorOjEwNUEwMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNEMAorOjEwNUExMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDBDRjNDQ0RDRENEQ0Q4QworOjEwNUEyMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNCMAorOjEwNUEzMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDFDRjNDQ0RDRENEQ0Q2QgorOjEwNUE0MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM5MAorOjEwNUE1MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDJDRjNDQ0RDRENEQ0Q0QQorOjEwNUE2MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM3MAorOjEwNUE3MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDRDRjNDQ0RDRENEQ0QyOAorOjEwNUE4MDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzM1MAorOjEwNUE5MDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMDhDRjNDQ0RDRENEQ0QwNAorOjEwNUFBMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMzMAorOjEwNUFCMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMTBDRjNDQ0RDRENEQ0REQworOjEwNUFDMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzMxMAorOjEwNUFEMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwMjBDRjNDQ0RDRENEQ0RBQworOjEwNUFFMDAwRkZGRkZGRkYzMENGRkZGRjBDMzBDMzBDQzMwQzMwQzNGMAorOjEwNUFGMDAwQ0YzQ0YzQ0NGM0NGM0NGMzAwNDBDRjNDQ0RDRENEQ0Q2QworOjEwNUIwMDAwMDAwQzAwMDAwMDA3MDBDMDAwMDI4MTMwMDAwQjgxNTgyQgorOjEwNUIxMDAwMDAwMjAyMTAwMDAxMDIzMDAwMEYwMjQwMDAwMTAzMzBCOQorOjEwNUIyMDAwMDAwODAwMDAwMDA4MDA4MDAwMDI4MTAwMDAwQjgxMjhBRQorOjEwNUIzMDAwMDAwMjAxRTAwMDAxMDIwMDAwMDcwMjEwMDAwMjAyODBFMgorOjEwNUI0MDAwMDAwRjAwMDAwMDA4MDBGMDAwMDI4MTcwMDAwQjgxOTgzNworOjEwNUI1MDAwMDAwMjAyNTAwMDAxMDI3MDAwMEI4MjgwMDAwODAzMzgyRQorOjEwNUI2MDAwMDAxMDAwMDAwMDA4MDEwMDAwMDI4MTgwMDAwQjgxQThFNQorOjEwNUI3MDAwMDAwMjAyNjAwMDAxODI4MDAwMEU4Mjk4MDAwODAzODAwQgorOjEwNUI4MDAwMDAwQjAwMDAwMDAxMDBCMDAwMDI4MEMwMDAwNTgwRThBQQorOjEwNUI5MDAwMDAwMjAxNDAwMDAxMDE2MDAwMEUwMTcwMDAwMzgyNTAwQworOjEwNUJBMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MzNQorOjEwNUJCMDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MzNQorOjEwNUJDMDAwQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0MyNQorOjEwNUJEMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzA0MDAyMDAwMDAwMDAwMDA0MQorOjEwNUJFMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDMyQQorOjEwNUJGMDAwOEE1OTA1MTkxOEY0ODQxMTdDN0E2MDdFNEVDQUY0M0JFOAorOjEwNUMwMDAwRjIzMjMwMzgwM0IxMkIxMDM3MDBGMTYxNkUwNjg2MjM3MworOjEwNUMxMDAwRENDNEVCM0YyQjhGNjAwN0NBMzIzMEQ0MDJGMTdFNjlCRgorOjEwNUMyMDAwMDYwNjJCMzk4NEI4QTEwMjAzQzMxMjIwM0YwRDJBRjZDMQorOjEwNUMzMDAwMUE0ODE3Q0E1M0U2RUVDMTgyNTU1NDMxQzUxNDk1MTE1RQorOjEwNUM0MDAwNkM1NTJDRjJDODU4MEQ0REJFNDExOTk1QUY0RTQwRkYxMgorOjEwNUM1MDAwNDBFMzY0MUQ1NEZFMDQyRDA4RkQ1RTFCNDJBN0EwQzk0RAorOjEwNUM2MDAwNEY4NENBQkI0MkZEOTVBQTgzREQ1QzM3MjJGRDlEQzZFOQorOjEwNUM3MDAwODJDQTRGNDBFM0I3MzBBMkYyQ0QzOEQwREMwRjU1MEZDNworOjEwNUM4MDAwMDAwMDE3NEI2N0M4MDMwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNUM5MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEQ3ODU0RDUyRgorOjEwNUNBMDAwQjVFODNFM0Y3M0U2Q0NFNENDRTQyNDI0NjFDMkVGMjRBMworOjEwNUNCMDAwODQxMDM0RTIxMDIyMDY0QkVCMDk3Rjg2OUE3QTA3QUFGOQorOjEwNUNDMDAwOTg1QUM1MDEyMzA2MDgyNDUyRjVFMUQzN0U5OTQ4MDI2QgorOjEwNUNEMDAwMDExMTA2QjUzNDE0RDRFMTRGNjkyRkI2OTE4Qjk2NUE1MQorOjEwNUNFMDAwOEEwMzNFMkRCNkJFRUYwNTlGQjU3QUI1N0REMTUyRkMzNQorOjEwNUNGMDAwMjk0QUNBQkI1MkZCQUVBRDZGQUZCNUY3NEVDRTM5Q0MxOQorOjEwNUQwMDAwOTBFMDRGREJGQkRFQTU5RkRERDlFN0VDOUZCNUQ3REY0OQorOjEwNUQxMDAwNUU2QkVEQjVDRjc4NDgzRTI5Qjg5QzkwNEZFMDFGMkRDMworOjEwNUQyMDAwRkY5NzQxMDg3REQ0NTc3QTc0MTJDRkJBOTg5MDlDM0M2MworOjEwNUQzMDAwMkJERTUzNEVDOEQwM0MyQjQ1MkFFOTczNTMwQjdCQTU3MQorOjEwNUQ0MDAwRkU3RUEyM0M5QzMzMkIwNEVEREFGMkFEMTBBMTYzQjRDRAorOjEwNUQ1MDAwRTVDQzIzMzExODJCRDY0MDQ4MDEyMUFBNEVGMDlGNjg4QworOjEwNUQ2MDAwRUYzMUU3RUFBNDFDMUZGREY1MTNGMTVFMjFBNEREMkM0MQorOjEwNUQ3MDAwQ0U4NjdFRUVGMTA5NDkxMjcyODlCRDJFMTMyMkM2QTQ4OQorOjEwNUQ4MDAwRkQ3QzAyREUxMkZBMjA4RjEwN0Y5NTlDQkNBMjg4QzI5NworOjEwNUQ5MDAwNUQ5MjRDNDFERDA4MzNCODBGMTdCRDUyMzM4NkFFNjNCOAorOjEwNURBMDAwNURCNTFDRjE4NkExRjdBRDg0NEMyNjY0MDU4QzQ1RUJFRQorOjEwNURCMDAwRUIyNjc2RDc4Q0M5ODNGNzZBMDRERUNFNTRGNkI2NkEzMgorOjEwNURDMDAwQjRCRDUxNDJCMDdENzA2MjNDQTU2MTNGQ0IyOEE0RkRCQgorOjEwNUREMDAwNzIxODA4MjRBNzZDNTEyRDA5MTI2MkNFRDBGQUUxQzJDNAorOjEwNURFMDAwRkZCNzcwRkQwNjZGQTc5NzM4REYxQjY0RkQxRjk1MDk4RAorOjEwNURGMDAwNTBFQjI1RDE4QkU4Rjg1MzVERUZDQjY2QkQwREUzMUE3MAorOjEwNUUwMDAwODQzRTJGRTNDRkU5QkFFRTg3M0YwQTA5RjkxMjA5RTQ4RAorOjEwNUUxMDAwOURDOEEyN0Y1RjRBMkUwNTNDOTA5QTVDNDJBNjlDOEQ0RAorOjEwNUUyMDAwQkY3RUJDQzU5MUJFODQzMEJBNjhBNEVGMUZEMjQxRTdFMworOjEwNUUzMDAwNzRCODYyNDY0RkE3NDREN0VEOEJDOEM0NEIxRkNENTJGMAorOjEwNUU0MDAwNUVENDhCMDEyRjQ3MTVDNEMzQkEzQTg2RTc3NTMzRTQ5NQorOjEwNUU1MDAwNjQ1Q0MyNzVENjE2RDJGRUEzMDlDMzYzQ0VGODYyODkwQworOjEwNUU2MDAwMTQxM0IyQjE4NUQ2Qzc5RDhERTdFQzkyODQwNUY0Rjc4MworOjEwNUU3MDAwOTUxMDA5RjgyQTlCM0UxQjQyRDc5NTNEMzU4NTdDMzMwQQorOjEwNUU4MDAwQkE4QUUxOTNEQ0NERjAxMUE3RkZGQkE0QjgxRjlGRDkxQworOjEwNUU5MDAwMDI5RjExMjdCRUIyMzkzRTczNkE2Q0Y4ODJFNzU1MTQyRgorOjEwNUVBMDAwOEYxM0UwQkQxMzhGNDlGODgzRTJBQjVFRTAzMTlGOEMyNgorOjEwNUVCMDAwNDUzQ0M2NzMxMUJGMDNFMUYxMEE4QTgzMkMwQUJGRkY3OAorOjEwNUVDMDAwNTU2RkQyNUJENDhGNTdDMTE3MDJBRjI2QzdFQjg2OTlBNworOjEwNUVEMDAwQkQzQTMwQzM0NjhCRjEzOTIxMjk0OTBFRTE3ODkyNUNGNQorOjEwNUVFMDAwODVFQkMzQjIwM0YwRTZDNUZFRjg1RUE3MzAxQjdDOUVDRgorOjEwNUVGMDAwMzA5REM3NUY5NjQwRkNFQjE0MUQ0MzI0RTA1MzQzNTI5MgorOjEwNUYwMDAwODFBRjgxNEZEM0NDQkI0RTRGRUExMjZEQkY2OUFBNEMxMworOjEwNUYxMDAwODA1RUVCMkM5OTg0NjlGRDc0OTk5QTU0MDBFRUI4RDU5MworOjEwNUYyMDAwMURCMkYxQTkwMUY4QTdGOEJBOEZFMzQ3MUIyMTNCRjA5NgorOjEwNUYzMDAwQTlFNkY5NUQ3Q0VFNUNDN0E2QkVGNTU5N0M1RDZDMUREQgorOjEwNUY0MDAwQTQzQkQ5MDE3MDlDOTkyOTkzNzVEMkMwRTMwRTg0Mjc5NAorOjEwNUY1MDAwMzFFRTgwRjBGNTk4QkUxMjk4RjcwNTI1QjI4RUYyREE5MAorOjEwNUY2MDAwQkE3MEIyNDNBNkY4REEzODgzRTFFMzZDRkE3RUM2Rjk3OAorOjEwNUY3MDAwN0E3QkY1OTI0QURCN0M5MTVFREQyQ0ZGMDJFNjIxMzlDQgorOjEwNUY4MDAwQ0U3NTU1OTkzRTMzQURGRTNDQkY3OTg4Qjk2MDc0MzQwNworOjEwNUY5MDAwOTA5OTFFOUYxQkZDNjEwQUJGMEQ0RjdBRDg5NDYwN0NCQworOjEwNUZBMDAwN0RGQzNEM0FBODc4NDI3NkU4QTAxN0RERjM5QzA1QUY2QQorOjEwNUZCMDAwNkI1RUY3M0M2QTQ5QjNBNTYyQ0RBOTg3MzQzMzQxRDhGQgorOjEwNUZDMDAwM0MxNkRCQTcwODdCQUU4MjFFQTFGQUM3MUY3MUVBMTEzRgorOjEwNUZEMDAwQjdGRUQ2NDYzOEVCNkExNUQzRDcyQUIxM0QyRjAyRUQ2RQorOjEwNUZFMDAwNEVGNUNCODVBNDVGNEY1NzBFNEVCRjEwQUIwMUUxNzU0OAorOjEwNUZGMDAwRUI5MzMxNUNBRUE3RUZFREE5NTMyOUZENEJCNjA5M0RGQworOjEwNjAwMDAwN0RGNzJGQ0E2ODdEMzdFODY5NUFERkREMDk3M0QxQjJBMQorOjEwNjAxMDAwQ0JBOUE3MjdGMEMxQ0FCRkYzOTIwQzdBN0E0NzA2M0RGNQorOjEwNjAyMDAwNUQ5Q0IwQTY4MTlFMkU0OUQwOEQ4MDhFNTNCQzlFRTk4QQorOjEwNjAzMDAwRTlFMjhFNjYxOUU4MzQ4MUVCMDk3MjgwRTE0OUE3RkYzNQorOjEwNjA0MDAwQjNFQkU5NjIzRUNGOTg2RDRFM0MxNTczM0Q1REJFREYwQworOjEwNjA1MDAwRjU5Q0VCRTk2Mjk3OUVERTA4N0Y1MDdDMTU0QTFDOEYwOQorOjEwNjA2MDAwNjM0OTI5RTI3MUVBMjBGNzNCOEU0N0Y3N0U1NzBDNzNBQworOjEwNjA3MDAwOEZBMTc4N0M5MEVENzczOTc5MEM4RkVEMUQzMjAxRkQ4MQorOjEwNjA4MDAwNzA3QTlCOENGQTcxNUM1MTU0ODY3NjQyNEY3MkQwNDg3QworOjEwNjA5MDAwMTk1RkZGNEVBRUFGMDU5QzYzNjY5OEQ1QTA0QzRCODg0OAorOjEwNjBBMDAwNTkwREY0RDFENjkzNDgyQTBDN0FCQTMxMEVGMzZDNEFDMgorOjEwNjBCMDAwMzAzRDVEOTIyMDcyQ0M2NjA3NjkxQzlFNERBMURDRDlGMworOjEwNjBDMDAwMjBEN0E3MTM2QTA0OTZCOThCODQ2NUJEQTgxRkFGN0QzRQorOjEwNjBEMDAwNzYwN0M3RTNEN0EwOTU0MzFFOUM3NENDRTE3ODc1RTM5RgorOjEwNjBFMDAwNjc1Q0QyQzlERjI1MEZCQUU4QjFERTU5Q0Y3MUQxRTVCRgorOjEwNjBGMDAwNEFDOTY1N0YwQzkyMUU1RTk1QzRCREI5NTA0RkEyNUQyMgorOjEwNjEwMDAwQTdEM0I1RTZEM0JBRjIyRkNGNUFDMEQ3NDYyNzdCQTY3RQorOjEwNjExMDAwNzVDOEM5MjJDQUI3ODEzNjU2Rjc3NEE4Qzk2QTVBQkY2QQorOjEwNjEyMDAwMjE4RkYxRjVEODM4NDk4MjVEQTc4NEEyMDRFQ0NGQjE2NAorOjEwNjEzMDAwNzk1NDdGRDhGMEU5RTFGODE0NzQ4MzNGMDExRjYzQjgwNAorOjEwNjE0MDAwN0Q5MTNEMzNENzA3RkNCRDI5OEZFMzdCMDZDMzM3NTVDRgorOjEwNjE1MDAwODAzRUQwN0YwMkRGMUU4RTZGQTNCMjFCQzAyM0IzQzM2RAorOjEwNjE2MDAwNEU3QzRGM0FFQUQ0MzdEN0Q2MEQ3MUQ0QUY4OTBFM0Y2MworOjEwNjE3MDAwMjc3RDNDOUM4RTFFNEUyN0MxNDc2N0UxM0ZFRUIyMEY0NAorOjEwNjE4MDAwMkI5RDc1OEY4QjNFMkQ5MjRCRUYwQzkyM0VEQTExNTI2OAorOjEwNjE5MDAwMDY3QzNCNEVGNjQ3NzYxNDlEREQyRTIxQzk0ODM3M0FFMgorOjEwNjFBMDAwNzlGMjM4OUQ3RjAxMzVFM0IyRTlGOENCNDhDRjI4NDAzQQorOjEwNjFCMDAwRDAwMTIzOENFMzJDOTc3QjBBQTA3RThBRjQ2RTFFMzlEMworOjEwNjFDMDAwQTY3RkZDNTEyQTM5MjA1MTIzNEVBMkU4NUQ0OTQxMUE4RAorOjEwNjFEMDAwQTY5MzU0NTYxMEMxOEVFQTA1Qjg3NEM0OEI0NEZGQkIxNQorOjEwNjFFMDAwMUVGOTQ0OTUwMTVGQzM0REY2OUNDNEIzNTVBODg3ODgzQQorOjEwNjFGMDAwRjgxNzQ2M0E3OUY5OUY4NTJCOUZGRkIzNDRGMTI4RjFCMAorOjEwNjIwMDAwNTIwMTNBOEUwMUZDQzQ1MDZGRUEyNDgxNzUzRkU5QzIwNQorOjEwNjIxMDAwRDIyMERENTgwNkE5QTY4NkQyMjRBNjA0NjUyRTg5NjA2MAorOjEwNjIyMDAwNDkyRTQ4M0U5MTQyRkQ3OUI3ODlGQ0VFRkIxREY5MjRDOQorOjEwNjIzMDAwQUI3RjNERjdDMjlGMTRBRkMzNDhGNDcxMDlGQzI3M0EwNgorOjEwNjI0MDAwOUVBRUY0RjNBMThGRjMyMUI1RDM5MDZGNzU5M0YxQURBQQorOjEwNjI1MDAwNUU0MkY3RDM3Mjk0N0JGNDVGREM3ODVFQ0JGNUYyODYxNgorOjEwNjI2MDAwMTYxRENCRjUyRDI2MkU3MjY4MjgxOTk3Mjk3RDdDQjUzMQorOjEwNjI3MDAwNEM4RkU0ODQ3QTNBQzA2RkYxMzdBQjkxMkI2OERENkZCNQorOjEwNjI4MDAwRjRCRTdBMTNEODdCQjc2QjkxN0I2OEZERjBDQ0U3NDMwMworOjEwNjI5MDAwNTBFRkI4REQ2MEY2NjExQkIzNTNGRDFDN0IxRDYzN0JDMworOjEwNjJBMDAwN0I1NjUxQjgzNkRDQUU0N0Y4MjM4NzNFREEzMEJFRjc2RQorOjEwNjJCMDAwOUQ5REEwQjc2RUYzNDcwMEJGOUI0MjQ3QzJBQjQwNUVCNworOjEwNjJDMDAwOUEzNTk0MTc2QTdCMjJGREQ2NTdGQ0EyMDhFREI1OEY0QworOjEwNjJEMDAwMjlGQzk0M0UyODQyQjRCRkZFMTE2RDM1ODlCNjFCRDEwRQorOjEwNjJFMDAwREI4Mjc2N0Q3Mzc3QjU5Mjg3RUZFMzgxNzBGRjdBM0IyRgorOjEwNjJGMDAwOEE4N0UxRkVERjcxNjQyRDA5RDM5NzM5OTU3MTBCRjAyMAorOjEwNjMwMDAwRTUyQkEzQTYyQ0U1NDM1RkE1MjlDNTBEOTBDQUQ4RUJDNAorOjEwNjMxMDAwMTJFNTNGRkY4QzE4QjEyOEZFMDIyMUIzMTU3ODQ1RTczRQorOjEwNjMyMDAwNzQyMzZBMjIwNEYyRUJDNjY3QzdDODc4NjgyMTlEMzdEOAorOjEwNjMzMDAwM0U1RThCRUM0NkI2MzJBNTc5NjlEQUY1RTE3RkU2MUQ2MworOjEwNjM0MDAwRDc1OTY5RUNBOTZDNTk0MkZFM0YzMjdFMTFGQUJENUUwNQorOjEwNjM1MDAwMTIwQjY1ODE0RTJBRDNDODZFMEFFN0JBRjE4QjQ2Qzc4NQorOjEwNjM2MDAwRDJEODdCMzYzOUUzRjY0QUZBMzI1MzNGNEQyMUNENUQyMAorOjEwNjM3MDAwMzY3OEM2Q0EzMkYyOUYyNEVCNEM2RTQzOTQ4RkE4NUNFOQorOjEwNjM4MDAwRTU5ODhDOUZCNDE5QzQ0QUE2ODFFMzcyMEVCRkFFQzZDRAorOjEwNjM5MDAwODk4OUY2QjUyOTgxOURGNTQ1RTFFQjVEODlDMUI5NTYzRAorOjEwNjNBMDAwMjI3NTVENjlERTZGMDc3OEYyNDEzRUVFNEVDMUZFOThDMAorOjEwNjNCMDAwM0Q5M0YxMzVGRENGRUFBMkYwRTdBOEFDMTRFRDZCMzhDMAorOjEwNjNDMDAwRkM3Qjc4QkZGM0QwNDMwNTBGMDI3Rjk0MEZDRUZFRjIyMworOjEwNjNEMDAwQzJCQzY5RTA5REY4MjlFNkRENDhFNzk1NjUxMzlGMEI4RgorOjEwNjNFMDAwQkNCQkU5Mjk0QTQ5RjZFMUZBQ0U4Q0RGMUMwMkZCMzQzQQorOjEwNjNGMDAwMTM5Q0UxREI1MEI3OTM3MDMzMkQ4N0QyQjI5Njk3MjY2QQorOjEwNjQwMDAwMkJEREYzOURFRjc4NUY5NkQ5M0FEQ0UzOTI1RENDOUU2RAorOjEwNjQxMDAwRjJGM0ZERUJGMDk0NTcyQzg1RDI2RDc0OUNGMEI4OEFBMgorOjEwNjQyMDAwNTM3RjhDMkU5M0QxNUZEREI0ODc2RUY4NDVBMDNGNTgyMworOjEwNjQzMDAwRkQ5MTVEMjRBOTUwNTQ5RUJFRkIxRTE5RTAxQTQ5RUQ0MgorOjEwNjQ0MDAwN0M2ODNGODRDNDY0QzA1QjExMDk0QjUwMEEzREI4ODYyOAorOjEwNjQ1MDAwRUJDMTBGNDlGNDNBMzkxRkY0NzQxN0RBNDVCNTk1QjcxMworOjEwNjQ2MDAwNEU0QjE3MzdBQUU3RjI3MTNFRkJENDU3NjhCOTQwOEZGRAorOjEwNjQ3MDAwMkU4MkYxOERDODMxOEJFRUU0NDQ3QjMxQkQ1Q0QxRUREMQorOjEwNjQ4MDAwMkEzNEQ3MjYwRjQ0MTE3Q0MxRTRBOTlERjMzQkM4Q0QyMworOjEwNjQ5MDAwMUM1QTlGNzc3RDdBMzgzN0NERDQ4NjMxQkJDNTJDNDRDMgorOjEwNjRBMDAwN0Y0NzM1MEJFN0RBRTQ3MTUzMkI5NTJCRkEzRTA5RTM2RQorOjEwNjRCMDAwRDlFNEUwQkI3QzdEQUQ1QzFFQ0U4NzFGNkI2ODY5NDY2RQorOjEwNjRDMDAwMkM0QkExQUY2QTkyODkxOTQwQjdBQkE1RDg2QTk5OEVCNworOjEwNjREMDAwNTNEMTFDNzk1NkE1NzU2MzRGQjdFNTY3Q0ZEN0MyRjM4MworOjEwNjRFMDAwNzkyNUNERURDMDEyODZENTRENDBERjNFNzJGNzBBMEJGRgorOjEwNjRGMDAwRTg3ODdBMDQ1RDdBMUEzQjQxOTRBQTI1M0JFQzE0N0QzNgorOjEwNjUwMDAwODRERjY5MEYwRDUyMUUyRjg4MjRBNjAxQkM2NUUxNjM0QworOjEwNjUxMDAwRDVCOTYxQTA1MzZDMUJEMDY5QzREMUM4NjE1OEEyNTFEMAorOjEwNjUyMDAwNzcyQzk1NkZBMzU3RDg2NDY1MjMwMDRERTFEN0UyOTQ4QgorOjEwNjUzMDAwNkU0ODhGNjgwOEU4QjE5ODQ0Nzc0MkZGNDA2NTk0QzU3QgorOjEwNjU0MDAwMkIwNzA5NDcyNkZFMEY4Nzk4REUwQTczN0U2RjhGNTA1MAorOjEwNjU1MDAwN0U5N0ZBRTVDMUNGRTVBMTlEQkYzRjVENDlEMEJGNjhGOQorOjEwNjU2MDAwQ0ZBQjMwRDNFRDE3ODJERjA1RkYwQjdERTg2RTc3RjhGOAorOjEwNjU3MDAwNTNGMEY5Nzg1QTk2MTIxM0ZEOUEwRjQ5RUMzOUMwMDM3QgorOjEwNjU4MDAwNUQzRENBOUYxNkVBNDJGRjRFQzg1NTZERTREODhDMjE4NgorOjEwNjU5MDAwMTA0N0FEMEM1NzI4QjZGREZBN0RDRTc3MEI3NEVCOTdGQworOjEwNjVBMDAwRDA3RkRFRjUwQkRBRjMyOTFFQzZERDREMjJBMDY2QUZFMworOjEwNjVCMDAwQkQ3RTAxQjFGM0ZCQUZGQkRBNDc1RjQyRjlCQUJCMUIwQgorOjEwNjVDMDAwREREMjgxRkE3NUYzRjU1RDJENDU1RkIzRjMyMTFERTc0QgorOjEwNjVEMDAwNzUxQ0E3QTQzQjJFREJGNDRFMEVDN0IzMzJCMzhGM0YxRQorOjEwNjVFMDAwNEQxMENEOUFEQjEyMkFEMEE3QTIzNkEyNDhCNjc1NUMxMAorOjEwNjVGMDAwNUJFN0I0RTcyOUJGQkYwM0UzQkFGOTc0MUU2OUY2OTBGRAorOjEwNjYwMDAwRjNEODNGNDY0OUIxNUU4MEI3QjZBNEJCMERFMEQzNDI5NAorOjEwNjYxMDAwNTFGNEY3MjhEQ0E3RTFGOTE3MDBGNzI3RTc4MkZCMUQwMworOjEwNjYyMDAwODg3NTgwREU4QzU0NUI0M0MyMDg5RkFBNUMwMjdFNTQ0RQorOjEwNjYzMDAwQUEyRDNGMEM3ODNGQTYwMkRFMjk5RTM1QzU4NkU3QzEwQworOjEwNjY0MDAwQ0FGOUZEN0NCRjE4NDhERURCRTAwRkI0OTc2Mzc5MEExNgorOjEwNjY1MDAwNkQzRjQ0Njc3MjRBN0E4RTExRTY3NzM5RTM5N0MyNkVDRQorOjEwNjY2MDAwMEU4NjA4QzY1OTczNkE3QjA4Rjg2QjE3MUY1NUQwREU3MworOjEwNjY3MDAwMUQ1QTRCMjRCMEMzODQ1RDNCQzQ3NURFQjAwMUVDNjY4QgorOjEwNjY4MDAwMkEzRkY3QjU4NDUwODgyRTM2N0E4RkMyMzlDMDg2NDJBOQorOjEwNjY5MDAwOTlEOUM3NTNDRTBDODNGRTNGQUFFRTA5ODEzRjY4NTZCNQorOjEwNjZBMDAwOUQ1OTc3NTMxOEVDRUQzMEI2NUZEQjEyRTFGQjRGMTVDNworOjEwNjZCMDAwOTY4OURBQjdGNkVDQTRGMzZGMDhGOUQxNUVCRUI3QTVGOAorOjEwNjZDMDAwNENDNDZCMTFFRTIxMjJERTVCQ0JFQzdCMTExNzE2NzBGNAorOjEwNjZEMDAwRDFGRTNBMEZCNjNBREE5MzkwMEQ2RkM1QjZGRTYxQTZCOQorOjEwNjZFMDAwNkYwNkVBOUY1NUU5QzQ3QjVGN0Y2QjcwRkQyMURFNkYwQgorOjEwNjZGMDAwRUY1RjZERjUxQzg1Rjg5Q0M5RTNGRTQyRUYwNTc5MUI0MQorOjEwNjcwMDAwQjM0QTQ2RkY1OUUwRDk1QkU2OENDQjI1RjhGQzk5RjhGMworOjEwNjcxMDAwQzUzRDFGMDlGQjFERUIyN0YxMDY4NDZGMDU5NzhCNENDOAorOjEwNjcyMDAwRTNCNDczRkQyOEVBMUU5MkRFNkU1QkE2RjA3RDkyOUZCNQorOjEwNjczMDAwNEI5OTdDQUUxRjU5NEU3QzVDMkNFODc3OTBFM0NGNjQ3QworOjEwNjc0MDAwRjIyRUZDMUE4QzA3MjhGNkY5RDgzQUIwOEU3MTlBMzhENgorOjEwNjc1MDAwRDNDNzJFRjg0NTdGOERGN0NGMDQ4N0U2MUVFRjM4MUQ4RgorOjEwNjc2MDAwNjdCMjZEMUMxNzlDOTlFMDczOUY5MzkxNzc5Q0UzNjRDQgorOjEwNjc3MDAwRDY1RkFFN0UyNzA3NDc4N0IzRkExMTlCREM2MzNERDcxMAorOjEwNjc4MDAwNTUxRkU2NkE1RkVDN0E3RjgxRUI3RDg1QUI3RTk5QUIyNgorOjEwNjc5MDAwRkQzNDU3RkRBQkFFRjY3MzVERjVFQjVDRUQxN0JBREU3RAorOjEwNjdBMDAwMkY3MUJENUZFMUFBRkY1NzY3RkJGMkM1OUYwRUJGRkZDOAorOjEwNjdCMDAwOUZFMTQ5QzhENUQ5Nzg0OTNBQ0U3OURENzI1NTRDNTIxNgorOjEwNjdDMDAwQTM1MkI0REM5MUYzRTIyMjc4RDVBMzQ4RUEwOTk4NDdCMgorOjEwNjdEMDAwQzRCNzQ4NkE4MkREOEZGREJEMTFGQjFERUM2MzNCM0VGMworOjEwNjdFMDAwQjZGQzUxMkE1N0JCMTIyRjA1NjE3RjEzQ0Y0RjRBNkY1QQorOjEwNjdGMDAwMDRDNzg3QTk3REE4QTU5NkIzNzg1MDAyRTVDNjRGRDRGMworOjEwNjgwMDAwQjc3QUNBODA0QTEyQzZEMTc0QTMxRTUxQUU5N0QwRTc5OAorOjEwNjgxMDAwMzY3REU1MjU1MUE0QjMzNkMyRjk5QzI0OTgxQzk2NDBEOAorOjEwNjgyMDAwODA4QThFMTdERkE0QTFCRDE3MUY0OTkyNjM0MTlFRjM5MgorOjEwNjgzMDAwRDhGOEQ4QkVCODFGREU0OTJBRDM0RkExNjhBMjFBNjQ3RgorOjEwNjg0MDAwNzg1ODVERDc2MTI4REQ3ODBBNEQ4RjRGN0M5RUVBNjVDOAorOjEwNjg1MDAwRjIwMEYzQ0I3N0NENzRGQUQ1RDdGMTcxRTZBQkU3RUQ2MworOjEwNjg2MDAwQTdCRTMyNDlFOTFGN0ZEN0I3OEQ0ODJCNkRCMjBCODA4OQorOjEwNjg3MDAwQTBGNUY4QjdGNTI0QzQzNzQ2NDFCQzhFMUQyMjYwQkM5NAorOjEwNjg4MDAwNkUyNEUxRkY3ODVDNkUwNEZDNERGQjhEMzQ4RTYyRkM1RgorOjEwNjg5MDAwMkREQzYwMUUwMTlERjc3NUI1MTRFMTdBNDRFQTFEMEZFOQorOjEwNjhBMDAwRjNDOTU5MjcyN0IyRjNCREJGN0U4MkYxNzg4RUFGRDBFRQorOjEwNjhCMDAwQkQ5MzdCRTIxMDRGRDlBODQ1QzYyMjlFMjM4ODY3RUE4NAorOjEwNjhDMDAwOEZCNzc5MkI4MDREMTg3RTU3QzFFRUNCOUVBQjgxNUM4NAorOjEwNjhEMDAwMzg3N0UxRjQwMEZENEI0QjFGRjAxM0VDOEIyNDg1RjU2QQorOjEwNjhFMDAwMDBFOUMxN0EzNkI3NzNDQkQ0MjI1QzdGMEVGNzMzMDk0NworOjEwNjhGMDAwODk0ODYwN0Y4NEFFNENFRjk3NDdBNUVBMzJGNTkyRkU1NworOjEwNjkwMDAwQjhBNTE0NjZGMTQ5NjlGREYzN0Y5NjIwQUU1NTQ2QzJERAorOjEwNjkxMDAwQ0M3RUUxNzFDMkI1OEFGNDA5QzQ1RkNEQzFEOThCQTEyNworOjEwNjkyMDAwNkYzQUU5NEFENDY2MzJDN0U2NUY1RUFGMEEzRjhGRTE0RAorOjEwNjkzMDAwNkI0Qzg4QUQzRkI0NTE2QjA2QkY2NkQ3NkMyNzFGODg4MAorOjEwNjk0MDAwRjZFQUY5RjNDMUU2MDk2M0JFMzgzRUM4NTVDNzY0RTAwQworOjEwNjk1MDAwODNFQjREODg1NzRCNzE4QUI3QUNDMUUzQ0Q1NEFDNkYxNAorOjEwNjk2MDAwQUFCODRFODJFM0ZFNDBCMjZFQjBENzU1NjJEREE4RTYwQgorOjEwNjk3MDAwRjdENzdGQUQ0NDE3QzJGQkY4MzQ1MkQ2NkNGNDhGNDM3RgorOjEwNjk4MDAwOUZERjBDRUREMjNDNkY0OEQ3N0UxQzhGREJEMkZEMTkwOAorOjEwNjk5MDAwRjdGMTUyQUUwMzg2NkUzMzY1QjAyNzhCM0E1N0Y4RURBOAorOjEwNjlBMDAwNzkyRUE1N0NCRjdFQUM3MzlGMEZENkJCQjVGMURDRjYwQworOjEwNjlCMDAwRDE3RDJEQzhGQzE5REIwNUE1RUUyOEQwODM1Q0EyOTIwMQorOjEwNjlDMDAwREQ2OUNFQjE3RkNBRjlCQkFGQkRDQjNFOUNEMTE2QUY1RQorOjEwNjlEMDAwODZGRUI5NzUzMjgxNzgzNERERTdEMUJFMkJFMjdFRUREQgorOjEwNjlFMDAwRTZBOTcxNDlBMzcyRjhDMDE2ODI3NjcyNkVEQjQyOUZFNworOjEwNjlGMDAwN0QzRDg1N0MzRDlCNkIwQkZDNjBCNzZDQUY1RkY4NTVCNAorOjEwNkEwMDAwRjQxM0E4RkRBRkEwREYxQjVCMDdFMzE3RDZCMEYzN0UzRQorOjEwNkExMDAwMzc3Q0Y3RjJGNTI1RUExOTlFRENFRkIzMzQxMjRCMjdFOQorOjEwNkEyMDAwODczRjU1RjlGOTgzNEFEREM3ODJGRTczOTQ3QjBGREZGOAorOjEwNkEzMDAwRjk4QkYxNzRCRUQyMkEzOUUyMEJGN0MzMzlBRUNGNkVBRgorOjEwNkE0MDAwRUE0MTdDNjU1REE2OUFFQjQwMEY3NzZBMEU3QjczRkI4QgorOjEwNkE1MDAwQjZGQkI3RDRDM0I5MUY3RDBFRUFFMEQxMkYzNzBGOEIzOQorOjEwNkE2MDAwNTJCODFFRkJEQUEyMTcxNjAzREZCN0NCMDRGNDkxODBFRAorOjEwNkE3MDAwQzMyODc3REFCQjQ3RkFFNENDMzkyRjFEQjcxQUYxNTI5NQorOjEwNkE4MDAwN0Y2RUZGRTlEM0UyNjMwQjk3RjM0QzdDRTJERTU3RERDOAorOjEwNkE5MDAwN0M3MDNFRkJDMzU1Q0E2NzVGREY3RTkwNDMzQTZFMDE1MAorOjEwNkFBMDAwRjdGQjg2RDY4NUE1MUVBMzVGOEU4NDlGMjJFNjI5RTA4QworOjEwNkFCMDAwN0M5NjVCN0JCRjBGRjg2QzRCNUQwNUNBQ0ZFOURBODUyRQorOjEwNkFDMDAwMTJFODkzNEREMDMyOEQ5RTEwRjM2NTgyMjdDQjkzQzA5MAorOjEwNkFEMDAwN0M4OTJERjVGNzRCRTlGMDU2MTg2M0YxMjJGN0YzNkEzQworOjEwNkFFMDAwMEZBM0YzN0EzNTIxNDFGRjRDRUQ0NjdCQjhCRUU2NzIyOQorOjEwNkFGMDAwNTVDOEQ3MTU5QTlBOEEwMkJFMEEyMjJBQjk4N0UyRUJBQworOjEwNkIwMDAwODFEQTg1RDVBNUMwNzc1NDBFMjFCRTMyQTM4NkEwQkRGQgorOjEwNkIxMDAwNTA2OEIxNzMyMjkzRTJFQjY5QkFFRjZEQUUyNzkxMTQxRQorOjEwNkIyMDAwNkRCN0Q5RDJGMDFDQzYyRDg3NkU3RURDNUM3RjZFRkQwMgorOjEwNkIzMDAwNDIyQzVCN0JDQUZGMUU4RkMxQ0U3MzRCNDgwOUQ4NTNEMgorOjEwNkI0MDAwMEYwQ0UwQkYwRDE2QkZBMTdBOTlDNTRCNjc1NDBDQTA3RQorOjEwNkI1MDAwQ0Y1QkNGMzc4RTM5RUZDQkMwOEYzMzA2OTkwN0UwRDJBQQorOjEwNkI2MDAwMTdFNEQ5MkRCMzRCRjMyMDFFNDJGNTA1NDk4NzFGQTcyMworOjEwNkI3MDAwN0UxODA4MUY2RUZDNUYwQ0Y4QkNGMDhCQzNBN0ZCN0Q3MgorOjEwNkI4MDAwOUU4N0M3MDEwNzg5OEZGNTc1QzVGRjAzNTIyNjMzQjU2OAorOjEwNkI5MDAwNzdBRjQ3RjQxMzc5NjE1RjIxQkQwQUM4QkYwNTFDM0E3RQorOjEwNkJBMDAwMDZCQzhBMDg5NjMzNDgxNENCNjM2QTJDRUFBMUVENjdDOQorOjEwNkJCMDAwOTE2NkFDRDc5MDA0OTY4QjU1OTNEMTk5RTdDMTg4RjMzMQorOjEwNkJDMDAwNkU3NTNBRTNGQjcxOTc5MjI0OUMzQjkzQTk3M0Y5NjEyQworOjEwNkJEMDAwQjA2QTlERDAwOTg2NTIzRjQ5RTM1NzExNzIwRjhFMzczNAorOjEwNkJFMDAwRENCNTFGOEIzOEM1RDBDNjQ0NkQwNTFENzc3ODJEQ0IxRAorOjEwNkJGMDAwRkIxQzVFQjVDRkIxOEYwNUI5RkM4OEYxQjY1NjBENkVBMgorOjEwNkMwMDAwN0Y3RUQ0QjUzRjNGQUFGNkU4NDA5RjQ3QUJFRTY5ODU0QgorOjEwNkMxMDAwRUQ0NkNEN0QyNzk0QUVGRkI4NEUyNzVFMzc3Q0RDRTU5MAorOjEwNkMyMDAwOEJBNjgxNjc2QkZEMDExRkU0OEQ2REFENEE5RjE3RUI0RAorOjEwNkMzMDAwODYyM0QzRkI3MTE5Q0U5OUJFRTI2NUU3NEM1QjczRjRGMgorOjEwNkM0MDAwNkZCMDY0OUQ5NThFQkMwNEEyMTg0NUY2NzlCNzdFNEM1MgorOjEwNkM1MDAwNzJBMkU3RDQyNzRFNzlEOUU4RTFGOTIxMDExMjAwRkVBQQorOjEwNkM2MDAwQ0Y4NDBGNTE3RUQxNzg3ODZDNUFGMzkyNjg5QUZFQTU0MgorOjEwNkM3MDAwNUUyNjM3RUQzOTI0MEVFN0QyOEZCREE2MzJGRUUzN0FDOQorOjEwNkM4MDAwNzhGMjM3QzI0OUIwMTdEQTQxNDk1MEZERkI1ODM1RTM3NQorOjEwNkM5MDAwQ0ZDOTM5RkNGRDQzNjFDQ0FGMUFERTQ5RTIxQUREQ0YyMgorOjEwNkNBMDAwODZCRjVBRkY0MDBFNkQ3NzVGM0RGNTIwNkRDRkVGQUI4RAorOjEwNkNCMDAwN0NBOTAzQ0U4OTlGN0E1OUM2QjhFRTY0NUZCNzFFQTEzRQorOjEwNkNDMDAwRjA1NEYxN0Q3MDZCRkQ0Qjk4OUYxQ0RGQTY0NkM2QTI2OQorOjEwNkNEMDAwN0U5Nzg4MzQxOUJENzlBNDg3ODBGNzE5OEZDQUU4NTY0MgorOjEwNkNFMDAwNzlCRjJGMENGQjU3Qjg0NzhGNTBGQ0RDM0VFNTI1M0RBNAorOjEwNkNGMDAwNENDQkZCNDZBNDc0NThFN0ZBQUFGQjkxQ0ZGN0Q1MTcwMworOjEwNkQwMDAwN0ZCRDE0RDFFQUNDM0I5OUE1NENFREI2RTg3Q0VCRUIwQQorOjEwNkQxMDAwRDlCOTVENEU0RjRBRjc0MjlDQjU0RTI1NTc1MEY4ODI3RgorOjEwNkQyMDAwMDY1QkVGN0RFRDI0Nzk4RjA0NzAzMEZBNEE2NDBFRkEyOQorOjEwNkQzMDAwQzU4NUFFQkNBRTAyNTdERTlCNTkzOUVCNURDODY3MzFFNQorOjEwNkQ0MDAwRTE5QzFGMTZBMTM0M0U3MDExRThEQjI2OTlCOTVCQUVCOQorOjEwNkQ1MDAwRkM2OEEzRDI3QTE3RjIwMzY2MjkwNzdEOTA3RkI1QTU1OAorOjEwNkQ2MDAwNEQzNTcxRkY3MzhERUI1RTg3NDk2Mjg3MkQwOUM3ODlBOQorOjEwNkQ3MDAwODMxRkI4RTU0MUI2NEY5QTEzOEQ0ODNDMEM1RDM5REM1MgorOjEwNkQ4MDAwMjY4NTdCMDg5REIyQ0QwOUI3QzBBQjdCMUU3N0RFRjVBQgorOjEwNkQ5MDAwQkI4MjlGODc5M0IxQTA4NzQ0QkM1OUMwRUZFNkRCQkNBMAorOjEwNkRBMDAwOEFFNEZFOTcyODFDNUI1RjM2NzBCRkRFNUFGNUQyMzc0NworOjEwNkRCMDAwOUI2MDlGMkZGMzYyREVDNDU3Q0ZFQzY5RkMxMTJEN0ZERgorOjEwNkRDMDAwRjlDNzAzMjU1MDVFNTlCOEFCQjI4OUI2MEJGMDdDMDkwMAorOjEwNkREMDAwMTFDRjJCODA5MUQxN0VFNTdBOERGMzAzMjlERkRFRTY5QQorOjEwNkRFMDAwQzlDMzQ3OTg0NzcxREYxMTFGRDJBQkIwNEQ0RUZBODAyRgorOjEwNkRGMDAwM0U2QThBMDA3RkU1NUQ5NjQwQkJFOUJFRUJCQTMxRTlBOQorOjEwNkUwMDAwMjI1MEQ3MjVDNTZENzIxNjEwRjY0MzYzNEM4MkYzRkJGMgorOjEwNkUxMDAwMkJFQTEyQjM4MTBGMEQ5RTQ3Njg0NDEyNjgxRkNENTRCMAorOjEwNkUyMDAwNUVENDMxQ0VDRUU5NjY3MjM4ODREQ0I5RTk1MjVBOUYxRAorOjEwNkUzMDAwRDIyMTJGNjU3ODlCMUEwMTcwODczNzM2Q0IyMDJGQTU3QQorOjEwNkU0MDAwNTUyQzZGQjlCNEIzNEJFMjc5QzI5ODRGM0Y4RTIzNzE4MgorOjEwNkU1MDAwNUNCNDgxRTUxNTZFNjNGODE3RjlERkMxNDYyN0RENEM5OAorOjEwNkU2MDAwOUVBNzQ5RkQwQzE5RkNFRUEyNEVEN0ZCNjgwREU2NjMwOAorOjEwNkU3MDAwQkFFOTVBQUNGMUJDQTg1MjlFNDdDOEYxMzA5Q0RCQjNDQQorOjEwNkU4MDAwRUIxQkY5Rjk5Q0ExMjdDRjY1Q0ZFRUUzRTc3MzQ3NjFEMAorOjEwNkU5MDAwRkRFM0NFN0UzRjI5ODNERUJEMEFGNDJFRDUzNzhBOUNFMgorOjEwNkVBMDAwRUE0MEZGRUQzMjE5RkQzNzM3MUMxQjFBOTlCRURCQTVFRQorOjEwNkVCMDAwQzkwRUZCRkRCM0NFN0YwM0Q3RkI4QURDRDMwMUVCRkMwRAorOjEwNkVDMDAwNUJDRkRGRDhCN0ZFQkZDRkZDNzdGRDlERTc1RkY3NzdERAorOjEwNkVEMDAwQzZGRjk2QkZGM0ZBRjdGQzhERDc1RjUzMjYzOUZDQjM5NAorOjEwNkVFMDAwMUQ5MDk4NDJDN0ZCQjE1N0M0RDM5QzdBNUI5MUQzRkJFQQorOjEwNkVGMDAwRDk2RjY5QjIyMzlGNThFNDI5NEVBRkIzMTY2ODc4M0UyNAorOjEwNkYwMDAwMkUxMzdCRkU4QjE4NkZBNkYyNDYwN0U4RDMyRDVDOUZFRAorOjEwNkYxMDAwNTIzRDRBMjA1RjIwN0I4QUM4OTc2MUZBQUY4NkVCQkY1QgorOjEwNkYyMDAwMUFBRUZGRjY2NUQwQUIxNTkwMkI5Njg3NzYwNURFMDc3NworOjEwNkYzMDAwOTk0NDEyRThDNzA0OEZBQTk4NjdCQzhGRDBFRDA1RjQ3NgorOjEwNkY0MDAwNUFEODlCMzYyRkJCODBDM0VERDZBNzA1NUM5RjU2QkM5NQorOjEwNkY1MDAwRTg3QUNFRjVBODdCN0YyRkVBOEI5QjEyOEM5QkZFNzc3RAorOjEwNkY2MDAwOERFRjhGMkVCRDJBRjBCMEE1OEFEOUM5Nzk3M0QzREJGNgorOjEwNkY3MDAwODFFQjVENzQzNDJBOUIzMUZGQzA0RDhGQjczNEU2N0ZCRgorOjEwNkY4MDAwMEI3QTJDRDBBREQ3QjVGQ0NDRjRFRUUxRjRCRTlDRDM5QgorOjEwNkY5MDAwRkI1NzFBRjMzRjQ0QkU0ODI2N0E1Nzc5RDkzQzk3MDZFNworOjEwNkZBMDAwOEU4NzVBNjEzNUQxNkFBNDgzQzJFOUE0OTBGNUREMThCMQorOjEwNkZCMDAwRjcyNUI3MTNCQjVGQjlFMTYzNkE3RjUwN0E2QzM1OENGNAorOjEwNkZDMDAwQzgzREI0N0U2OTFFOTE0NUQyRkRDNzkzRkJGMzg5M0Q1MAorOjEwNkZEMDAwREQyQzdFQUFFNDY5MkUzRkNCNkRGRkVBOTgzN0JFRDU0MworOjEwNkZFMDAwOTI5M0YxMjJCMDIzNzY2QzVEMEU3NkM0Q0JGRTA4QzQ3QQorOjEwNkZGMDAwMEJCNkU2NzRCRTg4N0U1QzYyOTIwQTcwMDg3QjkxRjBFNAorOjEwNzAwMDAwQjgyQzk4MTIwNEVEMjZGN0I5OTNEM0RFREZGQTcxNTc0NgorOjEwNzAxMDAwMEFFQzJFQjM0OEMyNzg1RjQ3RjhGRUJDQjRGN0YxNUNDNworOjEwNzAyMDAwNzZCRUUxMEQzOEUyMDZFNDhBQzFEOUVCQUIzOEJEQTlFMgorOjEwNzAzMDAwOUY5OEVGQjVDNTI5NTcwNTY2NEQ2MkU3RTYzMzRDMzg5MgorOjEwNzA0MDAwREY5MUFDNTkzMkM0RDEzMzhEMDMxMURFMTNCNkYzQTZGMAorOjEwNzA1MDAwQzVBQTM1MTJDNjkzQzA2RjJDRUJGNzFCMDkxOUMxRTIwNAorOjEwNzA2MDAwRjI2MkZEODNCRDNGRDBCODk4OUQ3QjczQkNFNjVERDZEMAorOjEwNzA3MDAwRjVCOUY4OEZDMkRGMTdFRDBDNkFBRkE1QkJCRkUzRjYxOQorOjEwNzA4MDAwQzM2QjNDRDYxNEVGMjU4Mzg3RkYxMTYwMzhEQUZFODU4OQorOjEwNzA5MDAwNzJBNTI2NUREQ0EwODdFQkQ3QzBEMUFFRDk3M0U5RkEyMworOjEwNzBBMDAwMkE1RkU0NzE3RDZBQjZEOUNGRDNFRUNCNTNEM0Y2RkYxNgorOjEwNzBCMDAwMzk5NzkzNUZDMUU1NDhENEVCQTk3OEJFODRGOTI0MDRERAorOjEwNzBDMDAwRDYyNUU0RDEzREZGNDQzRUVGQzRDRjM4RkZDQjVDQUVDNAorOjEwNzBEMDAwMjc3MkI5MjYyNDgyRTczMDk5RTZBREU2N0E0Mzk0OUY3OQorOjEwNzBFMDAwNzZERTFFQkVFRTZBQ0RFNDcxREY3M0NGM0I4N0FGNzNGMQorOjEwNzBGMDAwQ0U2NzVDRUY0OTNFRUY5QzQxQUU3NzAxOUY2RkMxNjc2MQorOjEwNzEwMDAwOUNGNzIzM0VFRjgyNDFDRTdCMkJDN0VGQUQ5RjExQ0Y4MworOjEwNzExMDAwQUEyRUYxNzEwNjg3RTc1NjNFNUZFQjY3OUNEN0U0RjMzMgorOjEwNzEyMDAwQjYwRTcyREU0RDFDQkY5QjNFMjM5RTQ3RjA3OTM3QjlFOQorOjEwNzEzMDAwRjA5QzQ5N0U3NzdDQzZGOUNBNzQyNjNGQkJCOEZDQkE3RQorOjEwNzE0MDAwRjU5QTk4M0Y1MDI4NDdBMUZGRDYxMDFEQzdBNkE3QUVCNQorOjEwNzE1MDAwRjRCMkY5NDU0OTUyOUZBMERGM0E5QzlGRTc0RTU5N0UxMQorOjEwNzE2MDAwQzdDMjc0NzlFMUEyQkQ3QjNGQ0UzNENGMzc3OTlDNDY0QworOjEwNzE3MDAwOTQ2MjlFMjAzRjA3OUQ3MjE5OUQyN0NERkE0NEZCODk5QQorOjEwNzE4MDAwNzA1ODkwOUY3OUZDMjUxQzlFMjVFN0I5MEVEMUJFNUFGOAorOjEwNzE5MDAwNjM3QTM2RDNGODc3NzIzOEVFNzRDMTNGRDBGOEEyRkQyNworOjEwNzFBMDAwOUMwMUUwRUZFMDcwNzQ5QzI3RkNBMkZEODIwMUM2RkYwOQorOjEwNzFCMDAwMkU4N0UzQkJFNzA5QkY2ODdGRUIwMEY4Nzk5NEMzRjE0MgorOjEwNzFDMDAwRTg3OUMyMkZEQUI3MEUzMEZFOTMxQzhFMjdDRjEzN0VEQworOjEwNzFEMDAwRDE3RUQzMDBGODc5OTZDM0YxRUM3OUMyMkZEQUVGRUFDOQorOjEwNzFFMDAwOTM3N0E3RkMxOUUyRkIwNjExNTIwNkY3QkM0NzExN0YwMworOjEwNzFGMDAwMDRCRjZGMTBFOTM5OENERjM3NThBOTg1RjFGRTc5OTcwNAorOjEwNzIwMDAwRkI1RTk0RUQzRTE1MTVGMUMzNzc5NkM2QTFGREMzOEJDOQorOjEwNzIxMDAwNTk5RUYyQzMxMzA5RkExMTBGRTdCM0JDRkNCRTc4MTZFRQorOjEwNzIyMDAwQjcwNzFGOUUyODYzM0NFOUUxOTAzMzhGRDlFMEZFRDk3MAorOjEwNzIzMDAwQzMxMTFFMjcxOUMxRjI5ODhENzI3MTlGOTY0RTU3QzBDNworOjEwNzI0MDAwNERDNDMwRTREM0IwRkI1NUMyREUxM0Y3QUM1NkE5N0M3NQorOjEwNzI1MDAwN0U4QjI0NUI2OUZGODdDQjU5N0RFQjBDOTI5NDhCNkMwMgorOjEwNzI2MDAwRjdBRkNBNTI3ODBGMDgwQzVCODhDM0Y2REYxRkIzQzhBQworOjEwNzI3MDAwQ0EwQTVCMUVDNkNBMTRFNjE5QTgzQzVGODQyMjg0Mzg3OQorOjEwNzI4MDAwRjIzMTVDRjdCNkM0QjlFMTM1MTE2QjI2QThCOUEyNEE1MAorOjEwNzI5MDAwNzY4RTU3MTQ3NUZBMEY4RDcwOTk4QkI2RkYyREQ3OTM5NAorOjEwNzJBMDAwNjY2NUZBN0IzNTdCNzUxNjk3MTVGOTlBNTdGM0Y1MEJEQQorOjEwNzJCMDAwQkM1NTcwN0E2RTk4RjNDN0VFRTk3NDlEMkY0Q0Y1NjA1QgorOjEwNzJDMDAwRkVFODBCNDczOTFFQTcyQTQ5NzY2RTRFM0NFOUVFRTNFRAorOjEwNzJEMDAwNjQ4QUIzMTk5RENENDc3QzE0M0ZEN0JDNDgyMjQwQzY3MQorOjEwNzJFMDAwQzAzNkFCM0Q4QzcxQjU4RjkxRkYzMEFFNDZFN0JENjZDMQorOjEwNzJGMDAwNUI0MjA1RkU5QkREMTk5RTBFRjFDMEFCNUYwQ0FGODJCOQorOjEwNzMwMDAwRUYwQThDRUIyNDExMEJEMEZCRjFCNzcwOUNEQzM2MTIyQQorOjEwNzMxMDAwNDkzMjUyQjU5QTJDREVFNzhDQ0Y4OTdCQkYzQzNFMDdDMQorOjEwNzMyMDAwNjE2QUJCN0YzOTlCQUZCQkEyQ0Q2Qzg3MjNCQjhBMTkzNworOjEwNzMzMDAwNUU4N0ZEM0E5QkZCOTlGRjY0NzkxRDdFRTY2QzdFN0YzQworOjEwNzM0MDAwN0FCNkNCQ0ZFQ0Q0OURGMTNBQTMzMzNBMTNFMkRDQ0E0MAorOjEwNzM1MDAwRDVDNzJDMURFMDhGNEEyNjVDNEJCOTIxQkE0OTg1NzNFRAorOjEwNzM2MDAwRTREOURCOUFEOUJEREEwQ0U3NUFEOTBGQ0QwREQ4RURBNworOjEwNzM3MDAwNzc3MThFRkRBQjZERTdCNkQ3NDU5QzQxQzQxRDVFRTFDQworOjEwNzM4MDAwRjdGMTVFRTY3OUM1N0RGOTI4OUMzRjcyQUY5NjFDN0NDQgorOjEwNzM5MDAwRDJBOTMzM0REMjA5N0M5MkZGOUY3Q0YyNzlGM0M5NkY2OQorOjEwNzNBMDAwNzQ2N0ZDQTExM0RFNTE3OTJDOERBNDNGOUY2RkQwQjU3QgorOjEwNzNCMDAwRkY5NEQ3MkY4MDBFNDE1RjdBM0E5MEM2NkM0NzFFQjE3QQorOjEwNzNDMDAwQzhBNzcyRTM2RDBEQzc5QkE4RUIxOUVFQkQ4Q0YwRjE1OQorOjEwNzNEMDAwN0RENkVERDdCRjExQUI4Njc1ODkzODBEMjE3N0I5Q0UzMworOjEwNzNFMDAwMzVBNzQ2Q0UxNTk3NTBDNEI5OEZGQzg2MDJFQjI5RjMxQQorOjEwNzNGMDAwNzFGREEzMTIxNUM3NzdBRDAzRTVCRTAwRjIwRDM5MEM4MAorOjEwNzQwMDAwQUVGMURBNDE1Rjc4RkJEN0U1Mjk4OTVBMTJERTE3MjVGQworOjEwNzQxMDAwNzhDRTA3RjlFQUZCQ0E2MTdGMzQxREVCQjY3QzZDQkZGRQorOjEwNzQyMDAwNTlDN0VGMEJBRDJCNTM5MzU5MkNBRkNBRjlEREEyOTI3QworOjEwNzQzMDAwMUQ3QTNBQkI0Mjk0NzAyRkQ1OUVFN0UxODY1NzJCODk3RgorOjEwNzQ0MDAwQzVFREYwNjgxQzFFRjczODczMzNDMkQzRTA4ODdGOUQwQQorOjEwNzQ1MDAwMkYzQ0RFRjE4NDc0MDNERkFBOTQ4QjkxN0ZCRkU1MTg4MworOjEwNzQ2MDAwNEYyRTRCOTI5RTc0NzEyODNFMEVEQzU1QzM3NUI5RThDMQorOjEwNzQ3MDAwOTI2OTdFN0Q4NDMzRkY0OUNCNzNERTRGNTE4RDVDNTcxQgorOjEwNzQ4MDAwN0U5NDhCQkZGQUUyNDI4MzlCNEY3Q0NGNjczNUU3ODNDNAorOjEwNzQ5MDAwMzY3RTFGQzVERERGQTcyNjQ4MjQwRERFN0Q2MTc3MUUwMQorOjEwNzRBMDAwNDYxMkU5RTAwRDM5QkYzQkUwMzE1RDcwQkJDNjVGMEZBRQorOjEwNzRCMDAwQ0ZEMkU0REZCOEVGNTdBRTU1OTM2ODZGQzUyOTk4OTBFNworOjEwNzRDMDAwRTdEOUNFRjk1MjM1OTM3ODJGRUIzQjNFMjlFREZBNDlCNworOjEwNzREMDAwMjRGRDdFQUI5NkE0ODdERjdEMkY0OENCQ0I3NUQyMjFEMAorOjEwNzRFMDAwQzNGRERCQjU0MkVFQ0Q1RDE2RjAwOTkyMjYwQ0ZGRTczOQorOjEwNzRGMDAwOTZGMzgzOTE3M0VERTc1OTQyNkY0OUJGNTEzRUExNEIxQgorOjEwNzUwMDAwREFFRDczN0QyRjYxOTBGNDU1M0YxQTAyOTc1NkZCRUIyRAorOjEwNzUxMDAwNTRBRjQyQkM5NkNBMDhFNkYxQkFEQjFGMTNGODdCNjM4RQorOjEwNzUyMDAwMDdDMjJGRjQ3NEQ2MzY5MTRGRkJFOUQ2MDFCOTA2RUNBOQorOjEwNzUzMDAwN0NEQ0Q5M0ZBMzFDNzIzREE3NzBCRTdFNkU4MEY1NjdEMAorOjEwNzU0MDAwQTJBRkJGQzQ5RDRGMzgzOEZBRkE0MEVFNjFERjUzMkQyOQorOjEwNzU1MDAwN0U4OEVFOTRGQjRDRjMxMTkzQURGNzdDRTVGRUQzQzIyRAorOjEwNzU2MDAwMzlBNDI2NDY0MDlGNjlBMTE4ODlEMTdEQkUzMDk0OTBFOAorOjEwNzU3MDAwMjBDRTYwNDhCRDcxRjBDN0E4NEM4NTgxQ0UxQkUxNTI3QQorOjEwNzU4MDAwNURCRUIzREQzNERBQ0Y1MzI0QzczREQ5MjA3RjkxQzMyQworOjEwNzU5MDAwRDAzRTFFMjI1REQwN0U3RDlFNUFCM0EzQkNCRjlEMjFFRQorOjEwNzVBMDAwOTEyOEYwQkI5MUFGNDZFMUI5MTgyRjdCQUE3MzNDNkFEMgorOjEwNzVCMDAwMjYyOEY2N0I1OEVFRUYyRDc4QTYzMEZGNTRBMzc2RTgwOAorOjEwNzVDMDAwRjY3NEZBQzRDRkVDRDBBQzY3N0Q3OEFGMkYxMDM1OTI0QgorOjEwNzVEMDAwQzA5Mjg1OTU0OUNDRTMyQzZDMjAxMUYwRTc0QTNCQkI2NworOjEwNzVFMDAwNDk4QzBFQkE5NkMzNTE1ODk5QzBGQzgwQzI2RDA5M0NCMworOjEwNzVGMDAwQjdDRkYzOTI2NkQ4OTcwQjFCMTNEMjAyREIzQzY1N0VBNAorOjEwNzYwMDAwQzZERkQzRTZFQUI4NEY3Q0FCOUFERERCRUIwRTJENEM0MAorOjEwNzYxMDAwNTRDMzdDNTVFQ0RDMkI5MEE3OTI2MTE0MUY4MTU3QkQ5RAorOjEwNzYyMDAwQ0NGRkFDRUM4MTZGNDlCMDdDMTFGQUZFOUQxNjUyNTEzMworOjEwNzYzMDAwM0Y5NjkwRjc1QTc0MkM0RkI2OTg1ODlBMUZGRkNGMTA2OAorOjEwNzY0MDAwRTRCN0I0NUYzMjM5MENGOTA4NjcwMjBEQTM2MURGRjhDMworOjEwNzY1MDAwQTAyNTg0RUZFRkZCNzYyNDBDNzk0NENBOTFEN0YwM0I0OAorOjEwNzY2MDAwMTJGREZDMUU1NzQ4MTVFNEJGRjY1ODQwM0ZEQkZBNzc4MQorOjEwNzY3MDAwRjg2Q0U3RkM3REVCQTJFQjVENDBFN0I5NTc5MjZGODRCNQorOjEwNzY4MDAwRjlBMEJFMTBGOTU0NTdCNDAyOEVFRjMwQzMzM0Q4OTcyNworOjEwNzY5MDAwOUU3NjEyN0RBMjFDQkU2NzkyOTQ2RTJEQjczREY3NTE2NworOjEwNzZBMDAwQkIwREY2RDc0QjRDQTQ3QjNGM0U5M0FEMUNERjEzQzEwMworOjEwNzZCMDAwREYyRDdDOTFFMzc1NkVENTM5Q0Y0REQ2QjdBNEJBNjc2RgorOjEwNzZDMDAwOENFREFGMUIxOUVFQkJDREY1NENCQkRDNEZFNzk5MDkzOAorOjEwNzZEMDAwOTdEODI5OUY0RjlGNUIzNjE0RjBGNUEwQzc3OThGNUMzMAorOjEwNzZFMDAwOTQ4QTM5Mjk1MjAyNkRFMzg1MzJDQTIxRkZERUNBOEFBMworOjEwNzZGMDAwRjFFMUExMzlCNkYxNjc3MkY4OTUyMzNGNDFGQzY2OTUzNworOjEwNzcwMDAwMjdDNDc3Nzc2QTBCNkQ3OUZGMjM2MjBERUMzQjdFQ0Q0MgorOjEwNzcxMDAwRUM3RThDMzg4NzFDN0Q3RDRGMkIxQzQ5OEM1RUU5QkMzMAorOjEwNzcyMDAwMzczMzhCREZGMzJDNkE5NzMxRUZCNTY4MEFFQTUwNTI5MgorOjEwNzczMDAwRDQ0QTMwQkY2QUE3MTJBOTAwRkU3RTg4QkM5QzYzMjk4OAorOjEwNzc0MDAwQjAyQjEzMzI5MjhBNkE1MURDMzlDRUNFNDVCNUNGNDM4NQorOjEwNzc1MDAwMUM0MERDMUI1REQ1QzZDNjFCMTU4RTFDMEQ0M0ZDQTQ0RQorOjEwNzc2MDAwNUM0NjdCNzkzNDg5RTgzMEZFNjg0MzI2NzBBRjY4MEM0QworOjEwNzc3MDAwQjE4RDQzRUIyMzlCOURFM0JBRTEyRDBBQzhGOEREMDJFRQorOjEwNzc4MDAwMDFDRjI4QjI1RkI3RjI3MDdDOTJBNEZENDc1MDM3NkZFQgorOjEwNzc5MDAwNzgxQUY4RENGMzhDMTFFRDJFQUFBODQ4OTEzNEYzOTJGNAorOjEwNzdBMDAwREU1NjM4MTczQTZCRkUwMUM2NkRGMUY3RTVERjA1NDE4RAorOjEwNzdCMDAwOUY2RjkzRDhGQUUzMkYyODkxREQ0MEQ3NUJGNzYwQkMyOQorOjEwNzdDMDAwNjZDNDhBNEVEQ0Q3M0JGRENDQkU1QjRERUQwMUMzMDNFNgorOjEwNzdEMDAwNzYwQTJEQzc2NkU2NDNDNUE0ODhDQkM2RkQyMzJERkZEOAorOjEwNzdFMDAwM0RFNkFGREVFODg3Nzg5ODdGREE0NkUwNDNCRjFBQkUxMQorOjEwNzdGMDAwMTZFOEUxM0ZFQTIxNzA4RUU5QjcxMjI4N0ZBNDg0RDkwOAorOjEwNzgwMDAwMTlGNzk2MTc2NzgzQkNGOTlCQjVCNEZFNUE5QkRGODNDMworOjEwNzgxMDAwRjA2REYzNEIyQUU0ODM1MkRFQzI3NUE5OERFMUVGQ0UwMQorOjEwNzgyMDAwQTJENUZGOTY2RjNEMDJGM0JDOUYxRkMzNTIzQzBGMkRBNAorOjEwNzgzMDAwQUMwQjAzN0Y0RUJGQTUxQ0UzNUZBNzNCMjU4QzdGQkQzMAorOjEwNzg0MDAwMkQyNTM1NDhEMTVFN0E3NUYzODQyQjI4M0VFNkU0QzRCNQorOjEwNzg1MDAwMUU4NTdFOEQ3NUREQ0ZCMzMzREFFNjUyRjBFQjZBMjFGQgorOjEwNzg2MDAwQ0YyRjFGQTY4QjMzN0Y3MEM0NUIxMTE1RUU4MzhENTAxNQorOjEwNzg3MDAwNTM5RTIwN0NDRkU3QzhBQkFDOEM1NzAzQkZFQjcwMDNBMworOjEwNzg4MDAwODZEMjMzNTg2MkJEMEI3RTUzODBERjNGNTI0ODZGNUMxNworOjEwNzg5MDAwMDJGRjY4MkEyMTZGRDlFODA2M0U5REJEMEU2N0JBRjY0MQorOjEwNzhBMDAwN0EyNkZDMEY1NEQ2RDNCRTZGOEQ4NTVEM0U2MjQ5Njg0MworOjEwNzhCMDAwMTcyNEQ5NzcxMENDQzgwNDgwNTMwOTFEMkQyOEIxRURBOQorOjEwNzhDMDAwNzM1RUJFM0VFRkY0ODVGQzdCNDkxNkY3NkYyMkM0RUU3MworOjEwNzhEMDAwREY3QUY5QkE0MDg3QkY2NUVCRUYwOTM5RUI4QUY5RjkyRQorOjEwNzhFMDAwQUU0M0Q4REREMjMzN0YzOTAxNzQ1Q0Y1QTQwN0UzOUU0MworOjEwNzhGMDAwRDM5RkY0QTQyRUE3RjU2NURCMjVEQzY3RTQ0MzRDQUZFQQorOjEwNzkwMDAwN0ZCMDRCNDJCOTRGMDUzNEQ0MDNFRjlCM0FENjlCQkNCMgorOjEwNzkxMDAwREQxQkJFNDRFQkJENEYyQTY0MDdBMkE1MEVCRjJGNzUyOQorOjEwNzkyMDAwNDJFQ0E3MDc1ODdEMTE3NzkwOTY2RDNGM0MxRkM2NkJDMAorOjEwNzkzMDAwMzhFMDI1QjA0RjJDRkJDOTJENTc3RDg5RDY2RkExN0MyRgorOjEwNzk0MDAwMEM0RDk2RUQ2RUQ1ODZEMUZBRTJBNEQ0MDVGNTUzRDM0RAorOjEwNzk1MDAwMDhGMjU5M0M1NzRCNDI1RUNCQTk2MDc3QzEzNTA2RUUyMQorOjEwNzk2MDAwNjMyNDNDMEVDRUI3QkIwQkFFQTZGQ0I4MjRGOUM0MkNFNgorOjEwNzk3MDAwRThCNzY0QUYwNDkxNTRCQThFRERDRjE3NTJCODk2N0Q0NAorOjEwNzk4MDAwNUZDMkZENzFFOTlFMkMxMkI2RTFGMzA0NURDQUU1RjQxNQorOjEwNzk5MDAwRkQwQUJBNEVEMDg3Qjc5MEM0MkNBMEQ3QjJERDlCMzQ3NQorOjEwNzlBMDAwRkIzRUY3NUU0QjE5QTY3RTg4RkFCMkVGRDM3OTY4QkYyQgorOjEwNzlCMDAwRTUzRjk0MjJCMEM0RTU5MEVGMDBGQkU1NEY3Qzc1M0JCQQorOjEwNzlDMDAwMEQ1ODVGQUI1NjFBODA3NUFERDFBMEREMkRDOTA1NEY5RQorOjEwNzlEMDAwRjlDMjAwREY3NjZEMTY3REJGNjREQjc2NkQ1MTM5RTA0QworOjEwNzlFMDAwOEREQzA4RkJFQUQyM0QxNzkyQjA4REFFMjczQTE1RjQzNAorOjEwNzlGMDAwMTc1NkU0RTgzQkYwN0JBMjg2MTU5QTlCMjYxRUYyNUVBMgorOjEwN0EwMDAwMEI3MUMwQjU4NEVCMERFQUY3Njk3MzZDRUQ5RkNBQ0FDMAorOjEwN0ExMDAwNDEzRTVEQkE0NzcxQ0MyM0U4MUYzRjQ2RDgzREI0OUYzNQorOjEwN0EyMDAwMDVGMDFFOUFBMDlGRDhBRjA0RkQ1Njg4MEZFNUE5QkRBQQorOjEwN0EzMDAwOTNEM0MxMDNERkQ1MDI3ODEyRDRCRjgxRjJGRTk2MTAzMgorOjEwN0E0MDAwOTYwRkI2ODQ5MTRFOUIwMThGRTM1ODVFMEEzQ0E3NzI1NQorOjEwN0E1MDAwOEJERkYzMEI1QUYwQTEyOUI4OEY2MjU1NDNGRTY1NkU5OAorOjEwN0E2MDAwOTRENTBCQUU4RjQ5RTE3M0Q4RTlBMkRDRUM4OTJEMDBFNworOjEwN0E3MDAwMjM2NzZBRDZGNzY2QUFENDFGREJBQ0M1NkU4NTkwQjVCRQorOjEwN0E4MDAwQTlFRTk4Mzk4M0VFNzk4RDU5RDFDOTU5QjY3M0JGRDUwRQorOjEwN0E5MDAwRkMzQjMyMTc2Nzg1NzFGREFCMEIzNUM0RjdFNjFCMjYzRgorOjEwN0FBMDAwRUZFNEYxMjdEQzI3MzdERkIwRTg1MTg4OEZEM0ZFNUZBMgorOjEwN0FCMDAwQzkwMkZGODI5RkZGNjVFQTVGMzBCRkNBRDFCRjYwN0UwNworOjEwN0FDMDAwODNFODNGMEJGQkVCRTdFRUJGNzlGRTY1Q0VGOUU3MkZDRQorOjEwN0FEMDAwMTFGREFGNDJGODhENzNDMzVGNzBFMzU0RTdGQzM3MzY5NgorOjEwN0FFMDAwNjJGRjI2MkZBMzZGNkY4RThFNzlENjZEQkU0OENBMDNCNAorOjEwN0FGMDAwNzQ1NjA5N0U4NzVBQ0QyREREMDFFREM0QkU0MzJENEI1MgorOjEwN0IwMDAwMEJGMkI2OERCRDM5MTVFQjg4OUQ4RkE2Q0QwNzM4MDJENworOjEwN0IxMDAwNTRCQUVDN0M5NDVERTU3N0M4NTU4RTk1RUJBODBGQTkxNworOjEwN0IyMDAwMTlFNjY4OUYxRjJENzZCQzFGNUE3NzgxOEIyRjBEQkNERAorOjEwN0IzMDAwQjc4ODc1MDAwQTBDNzMwQUE3MzY0QzQzN0Q1NDNEOENGOAorOjEwN0I0MDAwRDlDMTc3MUNGMjYxRkQ4RUNCRDhGQUVFMTg2NkEwMUM2NQorOjEwN0I1MDAwMDNDQ0UwOTdERkExQzUyRUI2N0YyNzk2QUU0QjgyQzMzQworOjEwN0I2MDAwOUM5QjhERDg5REIwOEVGRUU3NjExOTlFRkI3OUJFOTNEQworOjEwN0I3MDAwREY0QjUwREZBRDI5OUFCQzMzNkVDMzY3Qzc0OENBMEZDRAorOjEwN0I4MDAwQjRERTk2QTUzMUJDNzMzQUFDMTlCOTI4NjRCN0Q3NTc5RgorOjEwN0I5MDAwOEZENEVBQzBERjgwRTczNzE5MzA1Rjc0MzVDQ0Q3QTRDMworOjEwN0JBMDAwRjU5NjgyRERFMTlFQzc1QjVDRTU5ODQ3MUZENTgwRjNDMworOjEwN0JCMDAwNkNDQTYyRjE1NDMxOEY3NzU0ODM2QjFFQkQ2RTA3N0ZBMAorOjEwN0JDMDAwQ0VFNzc5MDBGODJDRDMzQzZCOEEyRjczQUU2N0Q0MTJDMgorOjEwN0JEMDAwOUNFNzYxRDczQzZCNDYyRDcxQ0RFMzY3RUJBMUNGRjlGNAorOjEwN0JFMDAwM0NDOTczQ0RFMzFEMzNENUI5OUVEMThEMzhDRjNGQkI5MgorOjEwN0JGMDAwRDczM0JBRDEzNThGODFGM0MwNzM5ODg3MUFCRTYxRjgzNQorOjEwN0MwMDAwM0U5NkU2RUQ1RDg0RjQ3RkM2ODc3NjhFRTY4RDNEODZGMgorOjEwN0MxMDAwNzZDRUVCM0VCNDczNjgyQjBCQkZBMzU1QzZGQ0RCREIwMworOjEwN0MyMDAwQjI3MjkxM0U2N0ZDOTRGRTg2OURDRTcxOUU3NzEwNDc5RQorOjEwN0MzMDAwQkZGODY2MEUyMjQ5NTI4OEE4N0U1QkNFNzlCMDdFRUZFRgorOjEwN0M0MDAwOUM1MUFENTAxRTk4MUU1QTAwRkVFODgzMDE4Q0UzN0RDNgorOjEwN0M1MDAwNzA2MEJBNzY1MzFBN0Q3NDczQzI3M0EyQzdDNkNGN0RBMworOjEwN0M2MDAwN0E5NUM3NjM0MzU5RUMxQzUyRDQ0RkYwRjhDRjVCMTBBMAorOjEwN0M3MDAwMjdBMkU1REIxRTgyRkVEMDcxMUUyRkVBODdCNzE1RkIxNworOjEwN0M4MDAwOURFMEU3N0EyN0I2QjE3REVBQ0NBNjYzRUNCQjM5NzFGQgorOjEwN0M5MDAwRjI3MkY5NjRGODFFMERGQjc3NzMyMkNCRTE4RjM3NzExNgorOjEwN0NBMDAwN0FGNEZFQzQ5QkRDODFGNEIwODZFMzc3N0YzQjg3MzhBRgorOjEwN0NCMDAwRTI4NUJGMzlGNEI1RTc1OURFMUQxOTBFREZDQkJCQUU0NworOjEwN0NDMDAwRTM4OUU3QTBEOTJCRDI4MjkxMkJFODdBRUJGNjZGRjIwOQorOjEwN0NEMDAwMENBN0Y1MEYzQzNERjMyMzg2NkQ5QzNBMEZERUJCMTdENgorOjEwN0NFMDAwN0VDODM3NjIxRTg3RkRGQ0NEMDY2N0ZEMDY5NzNERkQwOQorOjEwN0NGMDAwNDY1NkIxMzg5RjY1RjM4NjkzMUVBMEQ3M0MzODYzQTVERQorOjEwN0QwMDAwMjRCQzAxNEE0Q0JFMzM5MTVFRjM0REQ2NTdDMEQzNzRBOAorOjEwN0QxMDAwOTc4N0E0NzBCRkVCQzlDNzM4NjczQzFGRTMzNDMxQjEwNAorOjEwN0QyMDAwNkZCOUUwOUJFRkQxQUQyOEE1RTdGQzNCMTVDNEEzMUJDMQorOjEwN0QzMDAwREU5RTQzNTk5NjRDRkQ5QzlFQ0VGRkVEODFGQjNCMDM5RQorOjEwN0Q0MDAwQzE3RkUzNEFFNzdCMTJGNzM4QkU0MzIwRjhFMERBQkE5NgorOjEwN0Q1MDAwRUE5REM3NkRGQ0YxOEREOEVDOURDNzFENzg5QUUzQTgwQworOjEwN0Q2MDAwREZEMEZDMEQ0N0ZCMUI1NzJFNzBCQzVGMTA1RkVDNzgxQgorOjEwN0Q3MDAwN0Y1M0M3QUQ4RUZBQ0Q4OTNCMURFRDZGRTk2Qzc1QkNBNQorOjEwN0Q4MDAwNUY5QzVDRUI3OEJGNzRDRjI2NDc3RDU5RDcxNjQ3RkJDNQorOjEwN0Q5MDAwQTYwM0RCMURFRkU1NDNFM0ZGMDlGREMwNUYyOTc4Q0ZCNAorOjEwN0RBMDAwRjk0M0UzQzQwNkIwREYzRTM0RDk3N0ZFREZFMUU3Nzc3RAorOjEwN0RCMDAwRUZGMUVGRkQyQzA3REU5QjAyRjIzMzQ5MDdCRkExQzlBQgorOjEwN0RDMDAwNEZFNTk5REExMjEzOENGQ0Q1MUQ1MzQxOEYxMEZDQTQ5QQorOjEwN0REMDAwNDY4NTMxN0M3NTlDM0FCQjUzRjhCRDQ0QTU1MzIzQTkxNQorOjEwN0RFMDAwMjE3MEJDRDIxRjg3RUQ1NUZBREZBQjNERjRGREE0Q0M2QQorOjEwN0RGMDAwRUY5NTRFMzVFRDdCQjU0NzREM0JFRTI5QTlCNzE0RUMxOQorOjEwN0UwMDAwQzdGODZCREVCNEY3QkZGQkU1OTIwQzg3RkQyMkQzRkIwRQorOjEwN0UxMDAwOTMzMjY5QjBGQjZGRjMwQzE2MUY3QTNFNkJEQTNDMDNBQQorOjEwN0UyMDAwRkMyMThEQzk3QkUzQkVDMjY5RTAzNzM0NkFBOUQyNzRGNAorOjEwN0UzMDAwRTczNjdERjM3NTQ5Rjg5REMwNzkwNjkzOTdDNTQ5RTcwNAorOjEwN0U0MDAwRjc2Rjk3RUUxOUUzOTBGQjU3RkRCMTZCMENEQUVFRTQ5OAorOjEwN0U1MDAwNjE4NTdEMkYyRkY1RUNBOEFGNUYwNEYzNUJGM0UwMzk2QworOjEwN0U2MDAwMzk5MDhGRkJFMzJCMkRENkNFRTNENDBGNzhCNUE1MDY0MgorOjEwN0U3MDAwQ0I3RjZEODlFRTNDNEUxREI1Mzc1QUVBQjBGRURCOTZERQorOjEwN0U4MDAwMTg5NjNEMkQwRDU4QkVENUQyOENFRjhGQjdBQ0M0RkFFNQorOjEwN0U5MDAwODk5NjM4OTZFRkI0NzQ2MEY5NUU0QjAyREY5RjZDRTkwNworOjEwN0VBMDAwQzRGQTA3MkQ0OTJDODUxQzA4N0I5NzQ0QjkzRDI5MEUzRgorOjEwN0VCMDAwNEMwOEFCOUZFNjZCNTAwQTQ0MUMzMzgyREY4RjNBNkQ0RgorOjEwN0VDMDAwOUMyOTA1M0JGQUY0QUI1RUNDQkJDRDg0MjczN0RGNjUzQworOjEwN0VEMDAwQTY5Rjg1RkJGREEyQTQzM0NFMkM0QTlGOUZEMUM3MjcyNgorOjEwN0VFMDAwOTMxQUM4OTE1ODNCNTZDMzM4OUFGRjk5MEJEMTFFQTdENQorOjEwN0VGMDAwQ0Y1NUMyQkVCNzFDQjE3RjRGQTI2RjdDNDgxRTFFM0E0MQorOjEwN0YwMDAwMzA5RDQ0RkIxM0RGRkJGN0M5MEJDQjgxM0VDNTg4MjdBRgorOjEwN0YxMDAwRkZCMzRBMzNBM0RCQ0VDOEQ3MkYxQTE4N0Y2OEYzMTVGNworOjEwN0YyMDAwOUU4RDQ3RTk5OURGOEM4MkY4RDRGQkY5MDI5RkREQTM4RgorOjEwN0YzMDAwMjBCOEE1MUFEMTJEQzA4N0E3Rjc3QjcxNURBNzBGNjY2MgorOjEwN0Y0MDAwQjE3QzE0MDhBQTBEMjJGRjc1RTkxRTVGRDJBRTFGOTYwMAorOjEwN0Y1MDAwNzVFNTI0OURGQUEyMzA2OUQ3MTdBNzhGRUUwQzgyREM1NQorOjEwN0Y2MDAwQUYwODI5QzlFMzkzODAzRjJDQ0UxRjhDRUZDNEY4Q0IxOAorOjEwN0Y3MDAwQkE4QTkyODY2MzFDNjdGRDc0NDJBQUU5QzJCODU4Mzg2RgorOjEwN0Y4MDAwRkJFQTM0RkU4NzI4NTc4NDM0OUNFN0JEM0Q2MzMwRkYwRAorOjEwN0Y5MDAwODBGQTg5QzlFMzJDREU5OTY0RjM4NjkyNzZCRTZDNUMyNAorOjEwN0ZBMDAwOTk5NTNDM0VBNDFGQkU0Q0UzN0VERUYwMTFCMjlGRkNDRgorOjEwN0ZCMDAwNEVDRjdDMEY3N0EwOTJBOEZGQTZFMUY3MkQwRjdBQ0VDNworOjEwN0ZDMDAwQzBCRUUzQTVGRjdEODJGOTQyMkFENkM1Qjg0RDVENEEwMQorOjEwN0ZEMDAwREMwQkY3NzhDOTVFQzc3Q0I0NUY1OEY4RThGNkVGRTZDQgorOjEwN0ZFMDAwOUM0RDc3NjczRUY4NkY4MTk3NzBERjY2RjdDQTYzNzBDNAorOjEwN0ZGMDAwQUY5QzhFNzc0QTM1M0FBNDhCRkJFRjk1Mzc3MUJFNUMwOAorOjEwODAwMDAwQTZGNzY4MzFGQUU4RkRGRDYzQ0U5OTBGRjI1RUNCNTExOQorOjEwODAxMDAwNTMxRDBCNzkwNDA5RkM2MDQ0NDNEN0Y4MTlBMDFGREZGNgorOjEwODAyMDAwREZCRkFBMDBFMjY5NEI5NUQzNzdBNEJCMkZGQjkxQzFCOAorOjEwODAzMDAwRTI2QzI0RTlFOUVEQjFBRDQ3QzQ2NzA4QTFFM0VBRkRDQworOjEwODA0MDAwRjAwM0E3OUZCMEQ1RERGQTVBOTQ3MjgwQzVERDk3RUY5MworOjEwODA1MDAwM0QzNkVCNEIxNEZFRTUwN0ZFQTgwMTFDMDc4Qzk4MUM2RgorOjEwODA2MDAwQjBBRDVGRTJGN0VBOTdFQzc5NTM4M0Y1QkRFMzg5OTcwQQorOjEwODA3MDAwREU3NTBFM0Q3NTM2OUM0NkM4NzExRTFBMjdERDIwQzc3OQorOjEwODA4MDAwMEJEOTZGMzAwMDNGNURGQjNBMTVDRDc3N0ZFOTIxRjBDQQorOjEwODA5MDAwQkIwRUUyQkM0MkRDN0JBODI3RDEyMEUwNkJFMUZFQTU1MQorOjEwODBBMDAwMTgxRjdFRjdBOTJCQjkzRDk3OTgwQ0ZDRjEzRTkxNkJGOAorOjEwODBCMDAwNjA3REVGOTM5NzgyOTM2Q0Y4MkIwOTMwM0Y4Njc0MzA4NAorOjEwODBDMDAwM0I0NkRDMEJBNEY2QUNDM0FFQjlBNUQzNTk1RjQ0RTY3RQorOjEwODBEMDAwMTY4MERFNThGNEEwMDdCRUExNEExNjEzREJGNzk3RTgxNgorOjEwODBFMDAwQkFGMzAyQ0NERUJEODUzNEFGMDY3QjRFRjUzMkZGNjBCRAorOjEwODBGMDAwQTE0OUQ0RTE1NDlGMkVGQkYxNDM5M0MxRUVCRjMwQzBBMAorOjEwODEwMDAwQ0UxRDQ1MUM2MzcxMkVCM0Y3OTZFNDI1MzUzODRGRjgyNAorOjEwODExMDAwRERGRTQ5RjNCRTA0RENFNzREQUU4NjdEOTk2NEE3M0ZFMgorOjEwODEyMDAwRkZCQkE5QzMwOURGNDBGMEJCRTExNUY3RERDRjhBQTc4QworOjEwODEzMDAwNzAzODk0M0Q1MkRBRkNCNDI5MDFDRTc3NUM4RkRDMTNBMQorOjEwODE0MDAwNzBEQUY5NkI1Q0Y1REEwMDhGQjMyQTQ0MDEzQUJGNkYzRAorOjEwODE1MDAwRUE3MTM5MUJERkUzRkREQUY4M0U2RjY0NTUxOEJFQTdGQworOjEwODE2MDAwMTU4RDAyN0Y1MUJCNjAwMkIxQjVGQkJEMTFDM0U3Mjc3RQorOjEwODE3MDAwQTUxNzE3RTFGRDcyMzUzNTAxRjNGMTc0QTJEQTdGOEY4RgorOjEwODE4MDAwNDFGMTA3Mjc5MDhCMjE0RURBOEM0RUZEMkE1RjcwMDc1NAorOjEwODE5MDAwRDQ1NzA3RDgzREE4MjY5MDUzQjgzRjFEOUM3NTE0RTJDQworOjEwODFBMDAwRkEzQTQ5QTRBQzIyMzhGRjc2QzZCRjdENjE2NzNEMEIyMQorOjEwODFCMDAwRTQwOUY0MDkzQzAwN0E0NDA4QzY4QkIyQ0E5Q0VEMDI3QgorOjEwODFDMDAwMTE2NzdENDkxRjlFNTI4QUZEREU0NzUwMzc1MkY4N0I2QQorOjEwODFEMDAwNEQ1NUVBNDlCQkREQkM1QzY3RjAxM0Y4OUUyQTZEN0YwNAorOjEwODFFMDAwMUJCN0U3OTc5MzcwMUNGMzE2NDM4QzBGNkU5QkNERjI3MQorOjEwODFGMDAwMjY2RTBCODRGMTVFQjJBNDVBNzgzRjYyMEQ3NEI1RUQyMQorOjEwODIwMDAwNjM0RDFGNDkyNDY5RDNFQjRENkFBRjA2N0NEOUY0OTFDNQorOjEwODIxMDAwOEFDRjFGMzY2MkRGMDZCQzZBQzQ0MjNCNTdBNzQ4ODMzOQorOjEwODIyMDAwRjM2QkQ1QTg3MUQ4QkQ2NDA0RkYyRUEwMkI3RjYxN0RCMAorOjEwODIzMDAwQzA3NEY4N0I0MjJGNzhCODVFQTRGQTYyNEQyMDFGRjQxOAorOjEwODI0MDAwNjBFRjJDNzZBRURFQTNCMUYzMURENjRFRUI2RkI3MUVGQQorOjEwODI1MDAwRTBDOEQ0Q0VEN0RGNkU1M0JBNzZDQjdFRkNGODUzNzEyQworOjEwODI2MDAwMkFFRjRCN0VGNDlEMjAxQ0E2QkRBQjI2MEEyMEZGQTE2MQorOjEwODI3MDAwNzE3NzdCMTBGOEY4MUQzNTFFODQ3NUJGOUI0QzlGRjdGNgorOjEwODI4MDAwRkU3M0FFRUYyMERGMDlFRUM5MkZFNzc0N0FFRjA3RjczMAorOjEwODI5MDAwNUUwNTc4M0ZCM0RCODNGN0VDOUJGNjc4NTM1RTRBQzQwOAorOjEwODJBMDAwRTVGQjE3MzM3RURBRTM3RDkzRDVEN0UwRUYyRTM0MUQ1RgorOjEwODJCMDAwNzBDQURCOTJDN0JFNTMxMEM2QzNCRDM4RjMxQjQ5MEE1MAorOjEwODJDMDAwRURFN0U1QkI3RTNGMEJFQzkxMjZEMjhCN0FDMkREMEY0QQorOjEwODJEMDAwRTZGRjI4MTdGN0FGMDU3MERGREZGRDVFRTQ1QjM1NzE2MQorOjEwODJFMDAwQkU2RkRBN0YyRkU2NTUzNUVEOUY4RDc5NTQ0RDJFMzlDRgorOjEwODJGMDAwNkZFMDdFQzg4MTgwRjM3NzM2MDQzRTQ4OTJEOUM1QUJFMworOjEwODMwMDAwQkVGRkREMDk2RjUyNzg0RUVFRkE2NTUwNzJDNDhGOTg0OQorOjEwODMxMDAwOUUzOERENzVEMzIzNEY4NzMzRUJGNzBGQjg1RkRGREY3MAorOjEwODMyMDAwMkY4OUZEQzIwNzk4MUQ0RjBFQjJCMkQxOTMwQTgyREY4QQorOjEwODMzMDAwRDRCOEREMTNBMTFBODQzNDNFQkVGM0QxRUYwMTdGQkY2MAorOjEwODM0MDAwRTZDNTc4QzNEMkM3OUY3QkU1MzI1QTVGRkE4NDI3QUY3MAorOjEwODM1MDAwOTYyREMzODAzQzYwNDExN0I4REIwRUY5QkE4MjBFNEJGNAorOjEwODM2MDAwRkVFNTM5MkQ3QzExN0I3RTc3NkUzRjNEOTYzRTcxNTg0MAorOjEwODM3MDAwMjMxNzlEOERCRkU5NUQ4NzM1RkM0RTkwOUIyRTVENkY2OQorOjEwODM4MDAwQ0UwMkJCN0JENUY3RkZBNDgxN0NCRDdCNDgyMjQzOEIwQgorOjEwODM5MDAwQ0VFRURGQjBGRDM5QjRFQjAwNEY0ODQ3NEVBNzNFQkFGMgorOjEwODNBMDAwOUQ0NUFGRDQ1NTRGNTc2MjNCMTNGNkIxODFFOEY1M0Q3QgorOjEwODNCMDAwRTA5OTdDRTRFQjFGM0UwREU3MDVGRkVBOEQwMDFFMUFGNQorOjEwODNDMDAwN0VGOEFEMjBBQ0U3NkRCNTk5RjFGNzQzRUQwNTcwOEUwMQorOjEwODNEMDAwREVFMDg5MTc5ODU4QjJFNzBEMEZERjhFN0M3N0NCQjFCRQorOjEwODNFMDAwREIwQjU4MUU5NDU1Qzg3RjE3QTAxMEUzODBEQkFFQzE4RAorOjEwODNGMDAwNzUyRTIyMzFFNEJGODY4Nzk0Mjg5QzkzN0RBODkyOUE5QgorOjEwODQwMDAwMjdEMkM4QzdFNTQxQTZDN0RFREVFMUM1OEZERUJEMERCOAorOjEwODQxMDAwMEExN0ZDQzU5Nzk0MjRCQjZGQ0JGMjEyNkYxN0U3MUVBNworOjEwODQyMDAwRjBERDQ2NUFGRjUwNjdGNENBMEZDQUUyN0I1NkJBODNBMgorOjEwODQzMDAwNkY3N0FERTkwNjNBQkQzN0QyMUEwQUYxNEE4QTg3MzgxMgorOjEwODQ0MDAwQzc5QjA0N0E0ODM5MzY3MzI4QTMxMzA5QUI5Mzc5M0Y0NQorOjEwODQ1MDAwQUEyN0E3QzM3MzY4REZFREIxN0MxMzFDRkRGOEJFQzY2NQorOjEwODQ2MDAwRTZCRjhEQ0Y0RkUxRjY4MzdERjY3NjAxQjU3N0QyQUNDRQorOjEwODQ3MDAwNkY2OTUwQzgzRkI1M0Y2QzdDNjY5MzczMjZGN0JCRDZENworOjEwODQ4MDAwMzIzOTE3NzI5RjlDNTMwM0VGRkZFRDY1MjY0N0QwMEZEQgorOjEwODQ5MDAwRjY3OTBBNTc2QTI4QkUzRjdDQjU4NDdBQzE0QjUyRTkwNworOjEwODRBMDAwRTQ3Qjk3ODdDQkI3RjMzREY1Q0FEMUJFMTU3QzQyRTE5QgorOjEwODRCMDAwNTc2MURGRUFFNzE3NzZDRTRCRTk4MEY2REJBMjA3Njk2MgorOjEwODRDMDAwN0ZCQjdEMEVGMzYyM0JBREZGQjk2REJGQkY4NUVCODMxNAorOjEwODREMDAwQ0I4MkFFREZEREQ5OTYzRkE4RUZFNDM1N0E5MjhGN0U2RQorOjEwODRFMDAwMEZFNDk3Q0EyQkVDM0Y4RDhGN0IzMDRGRTQwRjdCOUZCRgorOjEwODRGMDAwN0RFNTNBQ0FFNzdGRTgxMjcyRUJENEE3NkVCOTZERDg3MgorOjEwODUwMDAwNzcwOTQ5MjdCNzdGMzAyMjI0QUREQ0QyRTc2OUU1RDY2OQorOjEwODUxMDAwRTg0MTdFRkU1QkU5NTM4MUJGODU0MTY3OUU5M0QwOEYyMgorOjEwODUyMDAwOTlGMEU4RDY4RjdGMEQ4NEQ5RUYyMkI4RjQyM0ZERjdCOAorOjEwODUzMDAwMzI5OTdDMzYxRjBBRkUxMzdDQjdFNDlGOTdFMUVGODNFNAorOjEwODU0MDAwRjRGMUE3RTBCRjNFRkUxNEZDRTc1RUFGMTM3RkVFRjc0OQorOjEwODU1MDAwMTc4MkExMjJFMkM1QjRGNERDNDNFMjAxODhBN0ZFNENGNQorOjEwODU2MDAwQzE3OEVBMjkwQUQzNkE0QUU3NTM3QjhCRjAxRTcxQkJCNAorOjEwODU3MDAwOEZGOUU3QTdDQ0RFNjA2RTM5N0VGRjA2RUJCREY5REEzNgorOjEwODU4MDAwNkFEMDE3RTI3OUFGOEZDNUJGNEY0NTdCODNGNjNDOTAyOQorOjEwODU5MDAwMzcwRjJBNDEzOEVGRUE0OTkyOUE3NEZFMDhENUM4MDg4NQorOjEwODVBMDAwNDcwRkM5RjQ5RUM1OEI0RjgxRkQwN0YzRjk0NzI1ODExRAorOjEwODVCMDAwNkUzMzE1NjNENDRBRjBGMzEzRUNCRTdDN0RFQkI1NDEwQQorOjEwODVDMDAwQzg1MzM4NzU3MENDNDZEMDVGMzdCRkEwMTBGRUJCODU0RQorOjEwODVEMDAwMkFFNDlCRENDNEU5RkYwRTg5NkY5RTRBRDc3OUQzNDExOAorOjEwODVFMDAwRTY1N0Q0QUY0RkNGMkY0Qjc4RkI0NUM2NkQxQUU4MjUyMQorOjEwODVGMDAwRUExN0JDNjU4Rjg3MkZFMUJGQzdENEIwQ0RGNUZDRTA4QgorOjEwODYwMDAwOTVDODU3NEI1QzdDMTVFMzdFRTNFMzgyQUYyNjkyODlFNQorOjEwODYxMDAwREM2RjkzRURGOTZDMzM5NUYyOEQ2MDk3OUMzQUNBRTI2QQorOjEwODYyMDAwOTBBNzBGMkE0ODhGRDM3QjI1OTZGRjA0RjFFMDI5QzAzRAorOjEwODYzMDAwMEZCRDlBM0Q4RkVEMjRGMDVGOUFFRjFCRjRCRDdGRjJFMgorOjEwODY0MDAwMzc5M0VGQTI0RDFBOUY3QTdEQzI1NjVBOUU3Q0VBQjVBNworOjEwODY1MDAwRDI5RjQyRkRDN0JGMUVGNTNBMzlCQkZERjQ0MzdGQzYyQQorOjEwODY2MDAwRjNFQzUzODdCQzA4QzdBOTQzM0YxRjc1MTdENDlGRjY4NworOjEwODY3MDAwRTI3NzZBNEVEREUzNjVGOTlGODcwMkM5QjFGMDdFMjQ5NworOjEwODY4MDAwQ0IxNzVBRjVCMzNGNEQ2MERGN0Y2OTQzQkFCRDFBNjQxQgorOjEwODY5MDAwRkVEOEU5ODNGRkZFNUJDODFGM0U3REQwMUI4Njc1MzQ4NAorOjEwODZBMDAwMURDQUMyRjNBREE2QTc3RDE4QTczOUY1QjMzRjREQjZENQorOjEwODZCMDAwRTczMzdERDZGNTJDRTdERjQxM0MxNTIwNzU5MEE3N0M4QworOjEwODZDMDAwMkE4NzlEMUIzNEZENzRDQTRFQjg0N0I0NkNGRjYxMERGOAorOjEwODZEMDAwQ0U2M0E2M0ZGMzk3MDlBMDc3NEVFRDYzRjZDNDA3OUVERAorOjEwODZFMDAwOUU4N0UxOUNGNTc3QzExQkQ3NzgyMEJFMEJGQkY1MzA0OAorOjEwODZGMDAwNDI1QUIyOTM1N0M0OEQ3NDc4NjE3ODM4NDVGMTAwRUJEMworOjEwODcwMDAwQTI3ODY5MDA3RDk5MDkxRkZGRTcxRjE2MUY3RjlDMEY0NAorOjEwODcxMDAwRjMzNzFFQkMxNEU1QTYxRjJGOTJDNTlFMDc5MjcwQjVCNQorOjEwODcyMDAwODlBRTlGM0QzRkY0QTcwOTYwMUZGREExQUIxNUY3Rjk4NgorOjEwODczMDAwODFENjVEOThGREZGREFCQUE1RDQ2MEQ2NURGNTBGQkI5MgorOjEwODc0MDAwNkVDNkZGODc4MjYxOTZGN0U3OTI4M0IzRjlGQ0M3NzcxRAorOjEwODc1MDAwNjBGRDg3ODEwOEMyM0I0OEY5QUZGQjg3NURGRkE3QTQ5NgorOjEwODc2MDAwRkIzRTRBRjdFMEMwNzRGRjJGRDlFQzVDRjgxRjZGRERDOQorOjEwODc3MDAwMDNEMUZEMDU0RUY3ODAwOTc5MDhBNzdFRjYxNzhDQUY2NworOjEwODc4MDAwOEJGNTBGQjRFRUNERkY0MUQ3MkRFQ0ExNzU3MjI0NTFCRQorOjEwODc5MDAwNUMwNDc5RDhBOUVFQjAwNEJGQzMzMzM3MDE2MTI5ODVFMQorOjEwODdBMDAwRTc1REJCRTE3QTNFOUJGOTE3OEFDNEUyMzY2NDI0OEIwRAorOjEwODdCMDAwMUYxMUVFNkZGNEZENUVBQ0MxRUU1N0E5QzY2QUY2M0QxRgorOjEwODdDMDAwMzIzNTgyREZENTVCNzdDMUMyMDhFNjc2OTA4QTU3NjM3RgorOjEwODdEMDAwNTAxRjMxMTU3RkU3RDZFRDc3QjU0OUM0OTJBOEZEQTdBNAorOjEwODdFMDAwNUVGMEQ1QTM2MEZGN0JDQUU0OTQ3NzAyOTY2RjQyQjkyRQorOjEwODdGMDAwODZDN0JEM0NBNkU2RjAzNzBDOTc5RkUwMEIzQkRGN0JCRQorOjEwODgwMDAwRjk3ODNBQTk0OEMwRUY3N0VCODY2QTI2RTlGQzQ2MzU0NQorOjEwODgxMDAwRkJGRDY4QzhFRDRDRDhDRTBEQkRDNEQ2OUY4RUI3MDMwNgorOjEwODgyMDAwN0U5M0M1NjY0RjlFMkZGRUZFOTRDREZDNEY0NUFBRTg3MQorOjEwODgzMDAwODZCQzU4MzI1RTY2REYzNTI3RUM1RUYxQkExMTkxRTRGMgorOjEwODg0MDAwM0FGNDQzOTk3RkQ5OEZDRkQ1REQ4MDQ3OTU1MEZGOTA3QgorOjEwODg1MDAwQUQwRkZENEFDMkZENDk5NTBGQTE5NkM5OTZDRkQ5OEU5RAorOjEwODg2MDAwRkI0QjAzRDI4N0QxNjM1NDIzQTdDRjBBMDczRDA0RkVGNQorOjEwODg3MDAwRDNEMEM1NDEwRjgxREZGM0E1OEI5QjFFNkVCQ0ZGMjJCOQorOjEwODg4MDAwOUJDNUU3REM3NDcyRTQ4M0U0MzNCRjI0NDUwREU0OUZBOQorOjEwODg5MDAwRUZERDg5NzE5MUY3N0ZGMEU2NTVEMDdFRTk0RjE1MDI0MworOjEwODhBMDAwQkY4QkY2QzFERTAwNDk4MUZDQUE0OTBERkNBQzI1RkI1QgorOjEwODhCMDAwMTU4QzBCRkY1RjgyNDJGQ0ZGMDA4MDAwMDAwMDAwMDA2RgorOjEwODhDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEN0I3QzU0RDU2MQorOjEwODhEMDAwQjVGMDNFNzNDRTRDNjY5MjQ5MzI0OTY2MjYzMzc5MzEwMworOjEwODhFMDAwNDkyMDgyNDY5ODA0MDhBODI4MTMwMjA4NDJBRjAzOEE0OAorOjEwODhGMDAwNjA2RkQ0OTE2NzMwNEY5MEI2QjRENTFGMDM4OTMxM0M3NworOjEwODkwMDAwNkM4MzIyMEY0Qjc1NDA1NDVBQTkwRDE4MjkyOERBNDE1RgorOjEwODkxMDAwMUU2MkFENUZBM0QyNUI2Q0IxMzdFMjAzMTUwODI5QURDRgorOjEwODkyMDAwRkRFOEJERjY3MkQ3NUE3QkVGQ0MzOTkzODk2ODZGN0YyQgorOjEwODkzMDAwRjdGQkU3Q0IzRjI3RkI5QzdERjY1RTdCQkREN0RBRUJGMQorOjEwODk0MDAwRUNCOTc0MDlGRUM2MzM3NjQ5NUMxOTZCNjZDQ0M1NTgyMAorOjEwODk1MDAwRURDRjUzMTk3MzMyNzZDRjlFQTRDOEY0NDJCOEVFRkQyMgorOjEwODk2MDAwNjAzOEJCOUFCMTlFNTVCRDQ3NzNFMTdFRjhBNzhBRkY3OAorOjEwODk3MDAwMjlFQzFFRUUxRTdFMEJEQ0JGNDc2Mzc3MDU0QjYzRTNERAorOjEwODk4MDAwQzg2QkE2QzNDNEQ4NjhDNkNFRUU0Rjk5MTNCMTMzQTY0MAorOjEwODk5MDAwRUMzQzc4Mjc4RERCMzFEQjlDQTRDNEZBRDkxQzY2OUFBOQorOjEwODlBMDAwMTdGQTA1RjA3OUY4Mjc0QTY0ODhEMjdGM0NDNjU2RjI1OAorOjEwODlCMDAwRjE3RUEyNzBGOEY2OTkyMzM2ODQ2RkU3MzY0QjA4RTAxMworOjEwODlDMDAwNjhEQ0Y5Mjc0QjAwRTBBOEZBRjlDRkQyQkE2MUJFQzYzRAorOjEwODlEMDAwN0QyQThCMEU2NUY0Nzc4OUUxNzMzNTlBMzQ5Q0FFRUY2RQorOjEwODlFMDAwRTM5NUIxODA1REE5NjBBQzAxRkZGNUMxQjVCMzdFM0FGNgorOjEwODlGMDAwNEI4MzZCQzdEQTNGQTk2OUY4QkVGOTU0QjczNUY2N0VFOQorOjEwOEEwMDAwRURDRjVGREUxQjA2RDRENDNFRkY0QzlBMEZBRTlGNzVCMAorOjEwOEExMDAwM0Q5NUM2NEE2OUJDQkIyREU5OEM2OTc2Q0REMDFGQzc5MAorOjEwOEEyMDAwQkQ5OEQ5N0YxQzk4OTczMTM3RENFN0I3NTg2M0M3NkE4MAorOjEwOEEzMDAwM0U1RkU3Mzc0RTMzODQ4RkMxMzgxMjZFNThERjY3RjhEOAorOjEwOEE0MDAwOEY5N0IxQjE4RTU0RTdDNzU3QzFGRjYzRDg5ODRCMkFBRgorOjEwOEE1MDAwNUM3NzY2MzE3NjREN0YzQ0M1RjAxNUU2RjRGQ0Q5RTdDRQorOjEwOEE2MDAwOEY4NzAxM0Y2N0Y3OUM3OTFDRTFBRkZCQUYzRjNGRkU2QgorOjEwOEE3MDAwN0RDMDFGN0JDNUU2NzgwQUQ2RERGOEQzREZBNjIxN0Q1MQorOjEwOEE4MDAwRTU3QjMzMUQwQUJERDc5M0NGQzI1RUU4RDdGMzZFNTJBNAorOjEwOEE5MDAwMjQwQ0I3N0E1RTNFNURFMDgzRjVGNkVDRkU5QkRCMDdDNworOjEwOEFBMDAwRkQ5N0JEM0MyOTFCRDdCRkVDODVBQTZDNjYxRjE4OEVBRAorOjEwOEFCMDAwOUUxNThDNDU5MkY0NzA0NTg4OEVCRTdEMzA2ODM2MzRBNAorOjEwOEFDMDAwMEY4ODZCMUMzRDBFNzUxRTJBNDAzOENGOUQ0OEYyMjczQgorOjEwOEFEMDAwMjE5RUUwREVGMjcyQTQwRkQwNjkzODZGREYwN0Y4NkRENworOjEwOEFFMDAwRDhGNUUwOUZENEUxODlGMDFDQ0UzNTc5OTBBRTFGNENDQgorOjEwOEFGMDAwNDYzODE5OEJFNjMyMEZFMkI3QjdENTYxRUZERkJGOEY4QgorOjEwOEIwMDAwNUVDNzgxOUUyM0JFMDJERDc2QURFNkYzNzYwMERERDI0MAorOjEwOEIxMDAwRkFEM0VEMUNGRTAzRjQ2OTQ0QkFBNUM0RThGNjM5MEI5OAorOjEwOEIyMDAwM0RFMTJEODY3NjY3MTZEMTM1MTFCRUEyNUYwMTVGMzUxNgorOjEwOEIzMDAwMEExRkZGN0E0N0UwN0IwRTk0OUYzRDI5N0RGNDlBOEVCMQorOjEwOEI0MDAwRjRGQUQ5RTcwNTBDRThGRDg5QjlGNzRFMzY4QUIxREVBQgorOjEwOEI1MDAwOTc5MzFDREJFMUZFM0QyRkZGOEVFNEE0RTc4NUI3MkM0NQorOjEwOEI2MDAwNDg0N0Y4QjMyQkIwQUUxRUQ2RjdENzg1RUI2QzUwQzQ5MAorOjEwOEI3MDAwM0E3N0E0NDY5M0QyNjI3ODZGODhDQzk4RTI0QkEzRkJGNQorOjEwOEI4MDAwRUZEM0ZEMDhFNzVGQzQ1RjJFRDIyNzcyRjA1NjI1MDFCMAorOjEwOEI5MDAwM0QzQTFDNDVCNDBFMTY3MUQxQkFFQjc3RkNDMTgyN0MwQworOjEwOEJBMDAwMjNFOTg0RjQ1MUM2MjJCRERFOUY4Q0Y3MjU5REU0QkFFQgorOjEwOEJCMDAwRTNDNzczMjAxRUM2RThFOEI2ODNDQjYxN0ZCQUY2NUFENgorOjEwOEJDMDAwNTg3MTIyN0EwMUJDRjgxRUMyMEJFRDlFNkQ0OTlBOTIzMworOjEwOEJEMDAwQ0VFRkU3QzEzQTdBQ0M2QzRFMDdDMjExNTE3RTk3ODgyRQorOjEwOEJFMDAwQkU4Q0FEQTJGNTNDMUIyRjk3NjI3RDk3OTNDQkNCQzE3QQorOjEwOEJGMDAwRkQ4RkUyRTVDNzBFMDc4RDJGRjE3M0Y2OEJDNEZBRjlFRQorOjEwOEMwMDAwMjhDQTM5QzBCRkNGMUUzQTgyRkNDMzk4MzVGMjIxOENFNgorOjEwOEMxMDAwNzMxNzUzNTg3QTcxMEM2RjEyREVCMzFBMjNCRDdCRjZBQgorOjEwOEMyMDAwQTc2QTI0MENFQjZGRUQzODQ0N0EzNjVFQkU2MTVEODEzNQorOjEwOEMzMDAwOEUwNEYzRkQ0RUNDRDdCMEVGRTA3MEQ0NDM2NzVGREQxOAorOjEwOEM0MDAwNEZGQ0Q3QjBFQjdENEIxOEM2MzlCQUYzNzk0Qjc3NjkzNworOjEwOEM1MDAwOENERjUxN0Y0Nzc0RkFGQkVDNzMwNzg3OTNCRUM1RjEzNQorOjEwOEM2MDAwMTNFODlCMEZDNUY4OEQwNzhDRTMzN0VFRkE5MzYxRkM5MAorOjEwOEM3MDAwREE3MDg3QzU2MUJGRkMzQzlGNjk4MUQ5QjhERUNGQkE4NQorOjEwOEM4MDAwQ0MwQ0Y1REY2NzFERUE5NDQ4ODI3OTVGMTdGNjRCRTI1QQorOjEwOEM5MDAwQTlGNTJEMEJEOUIxNTE2RjI3NDc5MjAwNEZDQkRFOUEyMgorOjEwOENBMDAwRjI4Nzc0Mjc1RTJEM0U0MDJERUI1Q0M5RjlBQUYzRkVENgorOjEwOENCMDAwNDAyRUQyQTVGM0FENkZBQTY4NEZGNjIyMUVBRjg4OEQ2NQorOjEwOENDMDAwNUI3MUJDQTkyQTE1RTRCNkUyNjQ3MDE0QjI1NUJDM0VDRgorOjEwOENEMDAwMTg3M0MyNjQ4MDFCRTZDOTQ2RkREQzAyRTNGODYwMUMyMQorOjEwOENFMDAwQTZGOTNENDExODU3NEQ5QjNDMDVFMTUxMUQyNjg3MkRBNgorOjEwOENGMDAwQTE1REU1RTM5OUVENDExNjAyQjhDQzYwQjc3RDNBN0VGRgorOjEwOEQwMDAwRjJDQzRDMUJDRUQyNzE3OTVFMTNFQTg1QTVDMDVFQTg2OQorOjEwOEQxMDAwOUYzRDE2MzY1NDAzRjg5ODI5RDlGRjE0OENCQjc0NTgxQworOjEwOEQyMDAwQTBFQzA4QjQ5NzJFRjBGOEMzRjBEQzdCMEI3RkVGOUMyRgorOjEwOEQzMDAwQzMxRTM2OERDMDc2NDEwNEU1MjhFNUEyQ0E3Q0EwRkFBMAorOjEwOEQ0MDAwQ0UyQUJGNUVDODQwMjVBNDA4QkVDQUVENDgyMTNCOTM4OQorOjEwOEQ1MDAwQTJGOTM2NTU0MzNCQTU0NkYzMDM0NkQ5NDdGNjUwN0U2NAorOjEwOEQ2MDAwODYwQkRGQjNEMDdCREUwQzQ1RkIxOEQ3OURDNkQyNTBGNworOjEwOEQ3MDAwREVFNEY4QjI5RjFDOTc2OUQxRTFCODdFNjY2NTFBMDNGQworOjEwOEQ4MDAwQkI5MkM3MzhEQ0FBNTg0RjMxRUI1MjkwQkY5QjY3QTQwNworOjEwOEQ5MDAwNkRDN0Y2RDZENDFBQjJGRjA1QUNGNzYwMDBFOEY2NjRFQQorOjEwOERBMDAwREFFNDYzQThDN0UwNUYxM0Y2Q0I2RjMyREFGNzQxQ0JBMgorOjEwOERCMDAwOERFREMyQjAxNjI3QkYzRTUzMTBGOEFGQjhDRDc4REZBNworOjEwOERDMDAwNTk1NUI5NjQ5MDFGRTQ2QzdERTcxNDBERjRCNzczNzZDMAorOjEwOEREMDAwRTVFRTVDQzBFOUI0MzU2RkYzRjYzMzk1NjU1RTY4MUY2OAorOjEwOERFMDAwNUY1RjM3NTUwMzNERTJGQzRENjU1OTAxQjRDRjNGRkM1MQorOjEwOERGMDAwOURBOUY0QkMxNjkwNzQyREE4RkVGNTU3NEYwRDk3QzY4QgorOjEwOEUwMDAwRTRENjA1NjBBNkFCMjRDRjM3MjAxRUNFMDVDRkI2RTI1MAorOjEwOEUxMDAwRDNGQTU5N0ZCNUMwMjNGQzBCMjIxRUYyQzc3MjNDRTQ4MworOjEwOEUyMDAwRDk0RkVFNjZEMDdGOTBBOTdCMjVGMkU1MTMyRkZGREZBNworOjEwOEUzMDAwMENFQ0U3NjMwRTVBQUY4M0I1MzgzRUI2RTJFMkQ5RDgwMAorOjEwOEU0MDAwNEIyM0JGNEM5RjY5RUM2M0M5ODc2QTRDMEU1NDc3RTg4QgorOjEwOEU1MDAwRTYwQ0UwQUJENkI5NDMzNzRENDY1RDVCRTcyN0ZFODJCMworOjEwOEU2MDAwOTkxRDY0MEY2NTdGODc5M0U4MzM1RkQwMDdFMUI0MDJGMworOjEwOEU3MDAwOUYyREUwNUREODIyMzU2QzYxMzQ2RUJCMjU0OEY2NkFDMworOjEwOEU4MDAwQTIwM0U3NTNDMjc1RUFBNUFCQkUzRTVDRjM5MDdGOTBBOAorOjEwOEU5MDAwMUVBOTJDMTVFRjZCNzUzRTgyRUZCMDJCQjA5MEYwRTY1QgorOjEwOEVBMDAwMEFEMTU1REVGN0NDOURFMzBCMDE5RTZGQzgwOEQ2RTBEMgorOjEwOEVCMDAwN0FCQzBCMkYxNkUwM0FBNjY3MzAxQUFGNkE5MTNEODA1NAorOjEwOEVDMDAwRjZGNUMyMDE1MDgzMDlFNDRCNUVCN0FGNjA3RTZEQzgxMgorOjEwOEVEMDAwQzBDRjgzOTlBMTZGRTNCQzQ1QkZGNEVEMzkwNkUzOERBNAorOjEwOEVFMDAwOTg2RkYxREI2MDhBMTFDQjQ3RjlCNTJDQzYxNzg0RkU2OQorOjEwOEVGMDAwODdBMDlGMDc2OThBRjJGNzZEMTY0MUY5M0I5RkE0MDQ4QQorOjEwOEYwMDAwMDJEMDNFN0ZBRjgzRjQ3M0RFRkNFOUM3RDBBRTlENEY0NQorOjEwOEYxMDAwMjlFQzg4RTJGREVGRkI0ODJFQzExMzUwNTAyRUYyMEZEMgorOjEwOEYyMDAwQTQ0NzZENjlDNEQ3N0Y4REUzRUJCRjFBRjlEODM4RUYzQQorOjEwOEYzMDAwRjk0QkJFN0RERDM0OUU0MzhDMDc4RTExM0NDRjE3RjQ3OAorOjEwOEY0MDAwM0FBRjcyRkZGQ0ZDMEExRkMxMDE2RUU0NDFCNEJCNUY4MworOjEwOEY1MDAwNzVCRTQ3MzM4NDNEMTVGNEI5REYxNkQ4ODg3ODAxRkMxNworOjEwOEY2MDAwNkZENkUzN0ZFQkMwNzQ3QzQyRDBGMTg5NDQ3NDVDNjhCNworOjEwOEY3MDAwNkQyQTQwRkQ3MDRGQjA2MzMyNjg2RTM2MjMyM0I0MDMxMAorOjEwOEY4MDAwQzczREJERjA2OEFCMTlENjUzNUZERDU0ODI0Q0RGOUZGRgorOjEwOEY5MDAwQkUwQUU5NzNGNzgxQkI1NzlBQTFERDg4RjRGMUY1QTcwMgorOjEwOEZBMDAwRTM4OEU1NjU0NDJGMUQ1RDNCMTA4RTExMDdGRTY0NDI4QQorOjEwOEZCMDAwQjgyNTNEMzcyOURDMEVDNEJGRkY1Mjg2MjJFNkFENUJFMworOjEwOEZDMDAwNjkwNjNDNUVEODY3MjFGRjM3QkVERjkxMEMxRkY1OTMyMQorOjEwOEZEMDAwRURFMUQ2MEFCRjA2NzI5QTZENjJBMTQ0RTMxRUU5MzczRAorOjEwOEZFMDAwQUVENTlGOTQwMEZFQkVGMTFDN0MzQ0MwRkI2QjdBQkNFRQorOjEwOEZGMDAwQkYyMUY1NkY3RkJDRkYxRkVDMDc3OEE3RUI1N0MwRkJDNQorOjEwOTAwMDAwM0I1Rjg2NzdFOTZGRDcwQUJENTBDQkQ2OTE5RkY5NTE2OAorOjEwOTAxMDAwNjBBNjdCMzBDQzNCNTlCNTEzRkYyRjdFNEEyNUI5ODMyMAorOjEwOTAyMDAwRkVEM0JERUU5ODFFNTk3QzRERDM0MTVDRTdFMjFGMkI2OQorOjEwOTAzMDAwQzRBN0YzNDM1Q0JGOUY1OTM4RkQyOEVBRjUwNUVENDYwOAorOjEwOTA0MDAwQkY2OUUxMUNEMDMzMDBERkEyQ0RDNkZCOEIyMzcxNzE1OQorOjEwOTA1MDAwMjBEM0U5NzNFMDg3MzMzMTdFMURDNEY1OEM4N0VDQTRGRgorOjEwOTA2MDAwMkFFNEExNkE1MTY5M0FGQTQ5QUY5ODdEQkYyMTNGRkNEMQorOjEwOTA3MDAwNzU5NTZENEY4MEY3RkNDQzQyQjJDMzdERUQyNjQwODZERQorOjEwOTA4MDAwQ0VCRUIzRjkzNjEzRUE0OTM5RUVDNDQ1QTVEOUU4Q0ZDNworOjEwOTA5MDAwMkM0REY1N0Q2OUZDMzU2OEI5RDE5RTE3ODY5Mzk5NEZBMworOjEwOTBBMDAwMzc2RTcxNUJBNkExM0RBNDNEQzdEMEZGOEFDRDQ1ODYzMgorOjEwOTBCMDAwRTdDMzIyNTcxQTlFNUZCNUIzRENEMEJFQkFFMzVBNDM2QQorOjEwOTBDMDAwRkYxMUZCMjYxOERBNjVEMTlCMENGRDQ3MUU5QjY5NjhEMgorOjEwOTBEMDAwOEZFRUZBQTZBMUZGOTgxMzczMERDRkFGRTlCRUM3RjBDQworOjEwOTBFMDAwRkNCQTRGOTYxQURBRDdGNzdFQ0ZFOEJGOTgxOEU5NDU1MQorOjEwOTBGMDAwOTZBQzkwOUUzQ0JDRTI5MzhBMEY5MTAxNDcyOTEzMTFENAorOjEwOTEwMDAwOUY1NTYzNzlERkMzNEIyQzI2NDcxQTVFNEI0QzBFRTAwQworOjEwOTExMDAwOEY1NzE3NEMyN0ZCN0Y3ODg5M0JFMEEzNkI0NTAwRTMxMworOjEwOTEyMDAwMUVBNjhFMUIxNTRBRTBERjRFNzI3QzVBRjFBMTZFREU0MAorOjEwOTEzMDAwMkFBQkQ5QTBENzI2Mzk4Q0VERjI0QzExMTcwRUUyN0M2MAorOjEwOTE0MDAwMzMyNkQzMjg1NzZBRDNGNEE4MDU5QTM5OEIwNzY3RTNFNworOjEwOTE1MDAwN0MyMDVGRDc2NjcyQkQ0NkQ3QUYyMDVGRTNCMURGRTkwMQorOjEwOTE2MDAwQjQ2ODJCQjZBNTdDMzE2MTVGMkIwNTFGQzEzNTYwMjkyMgorOjEwOTE3MDAwNDc4NjRBMjUzQjFDQzA5QjNFQkExRkQ2MjAzRTk5NjBCRAorOjEwOTE4MDAwRjVFNzFEQzFGNTk4RkM0RTY0QkU4OTczODI4N0NEOUNCRQorOjEwOTE5MDAwMDNCOTFENjY0MzRENUZDNzBFNEJGOUY2OTg3QzYxQjI2QgorOjEwOTFBMDAwNUY5OThDRjI0OTVCMTY5NEE0MzMxRDVFRTc2NEYyRkM3MAorOjEwOTFCMDAwMTFEODdEN0U3NUVDMUNBOTQ5RkMxNUU5RUY0RjE5QUQ1RQorOjEwOTFDMDAwMEQ4RERENTcxNjREQ0Y0Njc5RjMwQ0EwMDcyRDlFRTI4RAorOjEwOTFEMDAwNjEzQjQwRkY1QUJDODU3NDk1Rjc1QkU3OThBNjQ0MTI0MworOjEwOTFFMDAwRDBCNTM2NTMxMTcwNzAzRjZCNThDQ0NGQUEyNTdBNzgyMgorOjEwOTFGMDAwREVERTM4MDRGMEQ1NTBERDRCN0U5NkM3RDRCRUU0MjhDMQorOjEwOTIwMDAwQUVFQjU3MkFDRjkzODEyNzg1RkE2MDgxRjA5QjE3NENFQworOjEwOTIxMDAwN0Q3OEM5NTFEMDRCMEJERTFDNDI3QTQ5Q0VCMzc1NDVERgorOjEwOTIyMDAwNzQ5OERFM0ZDODFCMjA4RTdBM0E5M0VCRjFDNzU3MDQzRgorOjEwOTIzMDAwODZDRDFGNDI3MDkxNUU5MDdFNzk0MUI4N0UzMkM2MzdFRQorOjEwOTI0MDAwODM1ODEzQzU4OTFCNERBQzI2RDEzODBGOEE3MUIyOTE1MgorOjEwOTI1MDAwRTQwOEFGQzM0RUYyNzE2RUUxQzkzNDBERDY5MTlDMUE4OQorOjEwOTI2MDAwN0ExMEQ3Mzc3NzQ0NTcwNThGMDMwM0ZFOTlFMDdGMTVBRgorOjEwOTI3MDAwNDRFRkQ4ODhGRDBCM0MxQThCMjhGREU3Q0ZBRTBFQjUyNgorOjEwOTI4MDAwMTVDMkZBNUEzMjREN0UzQkI1N0IxNUVDOUY3NDFGNjNCNQorOjEwOTI5MDAwNTlEMEJGRTVCRjU0ODJBN0U1RDU2QjE4QzY2NzQ5RjYxQworOjEwOTJBMDAwMjY4NjdFQUM1Q0Q3QTFDQ0M3MDgzRjZBNjcwQUQ5M0Q0OQorOjEwOTJCMDAwODYyRTI4RTBFRjVCODJGNjlGN0JFNjc3QTE3RkYxRjlBRgorOjEwOTJDMDAwMDYzM0NERjczOUFDRDEwMUUzN0ZERUE5NDZEMDU5M0Y1MworOjEwOTJEMDAwOUE5OTFDMzU0MTVCNkQ0QjI1N0I1RDgwM0UyN0Y0NUY4MQorOjEwOTJFMDAwRDg5OTFBRjExNUM2RjBBMjZEMUVDN0EyNjBERjkyRjJERQorOjEwOTJGMDAwRjhGQTVCMzJFRDExN0IyMUFERkI4Nzk5QTM2MzcwQ0E0RAorOjEwOTMwMDAwNzVFNzBGMTA3N0JFMjJFMDY2ODFBMTA2M0E3QjIxMDY0MQorOjEwOTMxMDAwRUJDMkI5MzU3MEY2NjExQzc1ODM5OUUyQzIwNTE5NzYwNgorOjEwOTMyMDAwODIzM0IyMjIzQzZDQkVCOUZGRkE1QTNEMzM2RkJFMUQ4OAorOjEwOTMzMDAwRTA2OTNFQUUzMjE1QzZGMTc1QjcxMzNFMTYwMjNFMjIwNQorOjEwOTM0MDAwQkVGRUY4M0VFNzJCRkNBQjQ5MjVCODVGNDE3QUE5OUJFRQorOjEwOTM1MDAwMjdEM0JBMThGQUYxRjA1RUZEMTMwQTdCQUMxMEY5MzI4QworOjEwOTM2MDAwMzQ4NUU4OUM2MzYyNEYxNTI2RjAwRjUwREU1Qzg4M0YyMQorOjEwOTM3MDAwOUUzRkIwNzg0QUI4OUM3ODA2MEZEQjAxRTNGRDJBNzM2NAorOjEwOTM4MDAwNDA3RkVCQ0Q0QzZFRjdFOTFBQUY5N0MwRkU4NTExOEU4QQorOjEwOTM5MDAwMEI5QjE1QTJFNzY5MjU2MjMxMDNDQTZBNkY4RDFBRUMyRgorOjEwOTNBMDAwQkUxQTUwQzlERjg4ODcwQkY0RDg4OTRDOUQ5RkEzQTZBRAorOjEwOTNCMDAwREYzNzFDQzcxREQ4M0ZEQjdERDA4MkZFOTk4MzkxN0ZBQworOjEwOTNDMDAwMjZGNUU3NDBGRTE5RkE2NUM4N0ZEMjJGRkIzODRFMEYwRAorOjEwOTNEMDAwQzNGQTNFMTVFQkZCMzREMUZBMTJFOEREMUVEMkJCREYzNworOjEwOTNFMDAwOEMyNkY0NkI1Qzk2QzQ3QTI5Mzc4QkVCQkI0Njg3ODU1OQorOjEwOTNGMDAwNTExRTZBODBCQ0JBMkI0QkZBNzFEQ0FGMTg0OENGNURBNgorOjEwOTQwMDAwMkVERTI4NUE1QjRBRkFGNjQyOTcyRjNEMTNBRUNFMEY1NgorOjEwOTQxMDAwOTRBNjQ0RTNBOENCOUYxRDg5NzQ1OTZDQUI0Q0NBMDIzNworOjEwOTQyMDAwRjhFQzU5NDZGQzZDNTlERENGNEVBNTY3NzE3Q0QxQjU3RgorOjEwOTQzMDAwMUZCRUVDODAyRjkzMDE1RkNFQUMyRkY1MDNCOURFQ0RCQworOjEwOTQ0MDAwQzFCQzE0Q0NENzIzRjAwM0ZBRjcyMkU5REY1QjdBNkVCNAorOjEwOTQ1MDAwQzM1OEIxRkU5NjJGNDQ5Q0NCRkJCQjg1OUU4NjM4Rjg0MworOjEwOTQ2MDAwODY4RjdDRDRGRkNGNDhCRjU4M0NEQzVEODE3MTUwRjNDMAorOjEwOTQ3MDAwMEI1N0E0QTMxRjM1NzFFRkVEMEVCQzVFNzAwRTI2QkMxQQorOjEwOTQ4MDAwOUNEQjlCMTRDMDc5Q0U2NTgyRkVCNDYzN0JDQzUxQ0M0RgorOjEwOTQ5MDAwMTM5QzU5NzEyQzUzOEZENzczQ0ZCRDU1NjE4NjcxQ0VGNAorOjEwOTRBMDAwRUQ3OUFCNDJDMzdDODNDOEE3QzhFN0Y1OTdERUE5MDg2RQorOjEwOTRCMDAwQzJGQkUxMDk2QzY4OTM1RDQ3NUYyQkQ3RUYxQjZDM0NFNworOjEwOTRDMDAwMUZFMTcyNUI1QUQ5MDhGMDZCNUQxOUY0RkVBMzZFRDNFRAorOjEwOTREMDAwMEZGMEJFNkE3REE3RTA0Mzk0RTdCOEZDQ0IwNkIzQUZCQworOjEwOTRFMDAwRDkwRTdDMEUzMTk2MUZGM0Y4NEI4NzA1QkMwQjMwRkY2RAorOjEwOTRGMDAwMzJDMzQzNzk5MzY2ODVFQkJERjAwMjFFMUYzQThCRDhDOQorOjEwOTUwMDAwRDA0MjE4Q0Y2QzUyNTU3Q0FGRDdDQkZDREJBMTRCRDJFRAorOjEwOTUxMDAwRTFGNjI4QUFBOUU0QUU4RTAwODIzRjJBMzk5M0YwN0VCNAorOjEwOTUyMDAwREQ1OTg3ODJGRUJFQ0NENzY4NTU3Q0JDREU1OTk2QzgxMworOjEwOTUzMDAwNzY1RDlFQzYzMzQ3MjMzQjk2QTI3NTMwRDRBQkIzNUNCMQorOjEwOTU0MDAwRkM3RDk5QUZBOTlBMzkyNzU4ODk3MDNENjBBMjc4MDNBQworOjEwOTU1MDAwMTRBNTgyRkEyQjU3QUNBM0QwQkI2N0I1RjQ0NTM0MzdCQQorOjEwOTU2MDAwQjIxNUMzRTQwQzVCMEJGQzNCMThGMDlDRTYzMzA1MzBGMgorOjEwOTU3MDAwM0Y5QTk2MTczRDYxMDYzRjJDQjc4NUIxNTMzQTdGMkYyRQorOjEwOTU4MDAwMDU5OTBGRDdGM0E2MUFEOTBFRjI5RkZBQzU3OEVCMUNFRQorOjEwOTU5MDAwRjA2NzUyOTJCOUZDQTQwNTVCOTc2MERFMUFFRkZGNkI4RgorOjEwOTVBMDAwMzlEMjg1QkY0RkY0NTEzMThEQzRDMkU5MDA3MkVBNThGNworOjEwOTVCMDAwRTNCODkyN0U5RDJCQUNGRUMxQzBBODdCNTYzOEU4RkE3QQorOjEwOTVDMDAwRjQwQTBGQzFGNUYwMEExRjVEN0ZCODYyMjhERDFGNDg1RAorOjEwOTVEMDAwQ0UyRTc3N0Q2ODA1Q0NBQkUzMjdFNzE4QzAwQUFDRDc2MQorOjEwOTVFMDAwQTkzMjkyQzc4NzQ2NTdBNENGNERBMDA3RTRGNUIxMTUxRAorOjEwOTVGMDAwQzdEQzEzODcwODA0MDIzRDcyRUExQ0RCRDYxNDEyOURGNworOjEwOTYwMDAwNTE2ODYwNzVBRkFEMEU4QzYzRUMwMTczNjAwOTAzRDZEMQorOjEwOTYxMDAwN0EyMEVCOEI4OTk4NTc1QUFCOTgyODhGRDQ5QTc1NzAxQgorOjEwOTYyMDAwNzUzODBGQUYzRTRFQjc0M0VGMzJDQzQ3N0E0N0I1MkI3NAorOjEwOTYzMDAwMjhBRkRFQkE3NkUyODM1MTVENUQyQzI0RUUwN0EwRUQwMworOjEwOTY0MDAwM0RDRUVGM0Y2MEUzNzg1RUM3RDgxNDg0RDdBRUIwMjAzQworOjEwOTY1MDAwNUU3QjZDREM5RTdDNkNFMzdBRUQ1MzcxMkRDQzBBM0QxNQorOjEwOTY2MDAwOUMwNUY3RkZFMjM4NTFGMjAwODA2NzJCRkQ3RDAxRUU4QgorOjEwOTY3MDAwNDdBNDFDRkExQkU1NkJENUUxMTYyQkNBODdGN0MwRkI4NAorOjEwOTY4MDAwQjQ0RkExOUFCQTJEMEM0Q0U4RjM4RkJDNEJGOTJGRDVFRgorOjEwOTY5MDAwMTIyQ0U0RUQ5RkFGQzE3NUI4RDI4MkRCRDBDNTYyRTE3OAorOjEwOTZBMDAwNzdBNzFFRjY4MERDMjAzRjVDNEJEODA4QTMxQ0FGQjUyMworOjEwOTZCMDAwODk3NkY4REYwODBGNkJDREJDRkRGQzIzQkY1RDFEQTZDRQorOjEwOTZDMDAwNzY3MDMxRTIwNURCMkQ4ODk3OEMwRThGMDlEQUY2OTVERQorOjEwOTZEMDAwRUZBQzNFNzYzREI2NjVGRjc3QThGRjczNTlEQzNFMzJBRQorOjEwOTZFMDAwN0JEMDhCRkFBM0FGRUQ4MEY2RDVCQUI2QzZEQkNDQ0E3OQorOjEwOTZGMDAwQUY3MjdERjU4N0ZFNzYzNDE3RjhCNUUxODBEMjgxQTA5MAorOjEwOTcwMDAwNzkwRkFDNTc3MDlEREU3REVCMDlERkY0MDdGMjgxQ0I1QQorOjEwOTcxMDAwQTAzQ0E2MzU0Qzc5QUZBNzU3MUM3M0I0MDA5REI1Q0NCRgorOjEwOTcyMDAwMzYzN0UyRkQwQTRGMjgxMDQ4QTBBRjdGRUU5MkZFMkE5RQorOjEwOTczMDAwRjREN0U3QkYyMkU2REU2RTlERkZFQzY1NUM2RTU4MEI0QQorOjEwOTc0MDAwRTg4NzA0RkU0MDkxQUJGMjNEMjdBQzYzODMxMjVBQTMzNQorOjEwOTc1MDAwQTI5RUY5OTlEOTgxN0E4NDc1NzEzRDc0NTY4Q0M1MjI3RgorOjEwOTc2MDAwMzlFNDhGRDREOTc4RDNCQzJBQjQ2NjE4RUE4OTNCMzQ1QgorOjEwOTc3MDAwM0ZDNkI5QjU4NUVEOTU2ODhGNkJGNzE3RkE1N0IyMThFNAorOjEwOTc4MDAwQkZENDY2NzRCOENCOTE3RjMyOENFRDY2OTExN0M5Q0U4OQorOjEwOTc5MDAwNjhDQUM4MjhDNUZEODJGNTA1OThDRjZGNjBFRDc3N0U1MQorOjEwOTdBMDAwMEZFMUZEQjVDQUQwQUZGRUY0RTAzNUU5RDc0MUJCMUVFRAorOjEwOTdCMDAwREE2OEU3RUIzQkRGQjIyMDdGM0VFOEU0RkFCM0ExMTNCRgorOjEwOTdDMDAwRjgwN0M2NTkwN0YyMTUwMEM3NjM5QkU2NDg0NkZERjQ0MworOjEwOTdEMDAwNzRBMEU5NEE3NEM5N0ExRkY5Q0I1NDFCMzg3NUNGMTRBOQorOjEwOTdFMDAwMDUxQzQ0NkZFN0E1RDU1NjZDNUIxQ0MzNTgxOUI2MkRGNAorOjEwOTdGMDAwNkI5MERGNkFDQjRDNUM4RTk4RTU1NzAxNERFQzRGNDI4NQorOjEwOTgwMDAwRkJCNzhGNTRERDE0QjZDN0VDOEQ1N0Q4QTdDNkFERjY5RAorOjEwOTgxMDAwQjA4OURCQTdGMzY4RDcxQTM2OUJDMkE4QkY0Q0Q2MkVGNworOjEwOTgyMDAwMEJEMkQ3OEU3QkFGNDQxRjA3RTE2RDk5RDRFNzcxRkE1NQorOjEwOTgzMDAwN0FEOUQ0Q0M5QkIwQkRFQzgxMjI0N0Y4NEJGMjhBMzU2MworOjEwOTg0MDAwMTc1MzU4NDRFN0NGM0NFOEU0NzI1Q0EzODU2OTlGQTNCMworOjEwOTg1MDAwRTY2MjFBM0RGRkU3Q0Q2NzYzOTE5MTVGMzY5RjlEOUU1QgorOjEwOTg2MDAwQ0JGOUVBNjJGMzExNUQwRjk1RkY2QUUzNjBBMERCQjIwQQorOjEwOTg3MDAwREQ2NjUzOTI4RUVGOTZFRDE2RkJDOUI2NDAzNjhFRTM0OQorOjEwOTg4MDAwQjIzMDgxNzdGMENGMDFCRjVBNjE1RjNCQUM4MTlDM0YyMgorOjEwOTg5MDAwRDQyN0U3REUzNTEzQzcyMURENjJDRkQ5NTg4MzFFMDhGMAorOjEwOThBMDAwNjA3Q0Y4NTBCMkQ0MDM4NTg5RkIyN0M3RjUyRjkyRUQ3MQorOjEwOThCMDAwMkJBOTdGM0MzQ0FFRTQ1OERCMEFGREI1QkYyN0Y1QjVDQworOjEwOThDMDAwMTFCRUY1QTZCOEYxMzJFNUZDRTU2QjI2RTZDNUY4RUE2RgorOjEwOThEMDAwQjc1OUQ3RkQyQTNDMTg5RTY3QjQ1NzYyN0Q0NUVGMDIwMQorOjEwOThFMDAwRTY0M0JCOENGQ0VBRDdFOUZEREYwQUJGQUZFNjYyQjExNQorOjEwOThGMDAwODFERTMxQkM5NzE4RUU5RjVFRTEzMUVDQ0IyREFBNUU4NAorOjEwOTkwMDAwNDZGQjg3QkYxNTdBQkU4Njg1MjkwRUFBRDk5QUNCMjIzNworOjEwOTkxMDAwQkFCQ0M0RkY4N0UzMUY4NUUzQkEwMUUwQjhFMTdGMTk1MQorOjEwOTkyMDAwOEU0MjgzN0NDNkUwMTg2Q0I4RkY4RkMyQjFGREI2OTI0MAorOjEwOTkzMDAwOUIwQUExQ0JBMzRBRDg1QTg0NzZFMTdFMTNFNTM5RDQ5OQorOjEwOTk0MDAwOEM4OUJFOTVCODJGNzBCRjQ2N0UxRUJBMjQ1ODlGNTE5MQorOjEwOTk1MDAwQTRCMTYzNUEzOUNBNEY3QjAwRTM3MkI2OEFFNzdCRTA1MQorOjEwOTk2MDAwN0U5QkI5OUNFQzEwRjlDMUM1MDc5MkVFNDYzRkFEQThBRAorOjEwOTk3MDAwMjZCMDE4QUYyQ0FGOTRGNjFERTRCRTFEMTM3OTJCQjk5OQorOjEwOTk4MDAwQ0YzMEM0QzEyQTM1NzBERTQ2QjhFRTI2M0I1NTE0QUM0NAorOjEwOTk5MDAwQUU0NTY3NEU0RDFEOTU4Q0Y2RjE1MTUzMjQ4Q0YzODVFMQorOjEwOTlBMDAwMUZFNkYzQjk0QzkxMEUyQkVBREVCNEMxMEVCNDc3QUVDQworOjEwOTlCMDAwMzRBRUZGRDg5QTUyQjI3RkRCNEQ0NTU3MkUwMTM4MUU4OAorOjEwOTlDMDAwNTAyQTkzNUY0NzNDNjcxNDUxOUUxNkVGMkY4NUZCREJBRgorOjEwOTlEMDAwODVERDUyMzNGQzBFQjQ1M0RCODVERDZBMTZGQTVEREU5RAorOjEwOTlFMDAwNEZDOTBDREU4REZFQzQ0OTY3QzM0REQ2NkI1MDBGMDVDMQorOjEwOTlGMDAwREFCMkMwREVGQ0MxRDlCMEM2NzMwRERBMUI1RjkxMTVCNworOjEwOUEwMDAwRUNDQjFGMzZENEFGNDE3QkIzN0RBNTJGQzc5MTExNkIzMworOjEwOUExMDAwMEZGOTNCNTg2QkQyMTNGNTZCRDA1RjY5QjEyRkJEMDdCRgorOjEwOUEyMDAwRkQxRDc4RkUyQjJCQUNGMzk5NENBMTc3QzRGM0EyM0UxRAorOjEwOUEzMDAwM0QwNTdBMDlGNDk4QkFCMkFGMUQ0NkJENTRENEE3Nzc1NAorOjEwOUE0MDAwRUE0OUVGRUM3ODVDQTVGNjQxOTgwRkZEM0U1ODQ3NTg3RgorOjEwOUE1MDAwQzVGNTBFRDFDOEFGQjcwMTJDQzlEMEI2MEQyQkEyRkRFQworOjEwOUE2MDAwMUI1ODM3NEI0NkZGN0ExODdGMkVGM0VFOTYyMTI2Q0FGNQorOjEwOUE3MDAwQkI2MzdGQzRBM0NEQ0JGQjVCNjYzMDNGRUUzNzU5NTI0RgorOjEwOUE4MDAwRUQxNDg3QzgzQ0JFMkFGNjhGOTI0NTFEODVFMjk4QzEyOQorOjEwOUE5MDAwMkVDMUZCRDY3NUU1NEIzMTFFQjMwRTM2RUU5MzVBRTI1RQorOjEwOUFBMDAwRUEyREQ0RjhGQTBCN0I5NEZDQUZGNzlDMjJGRjlFQzVGRAorOjEwOUFCMDAwM0M5NzhBNjNGNzE5RjM5N0UzRDU3RDdCNEIyNUMyQkJBRgorOjEwOUFDMDAwMzQ5NTM5NTRDQzgzODRBMkI0MEYxOTZGRDdBQzYwNDc1NgorOjEwOUFEMDAwN0QzQUY5QjBEQTU5MjBEMTdFRkY4QjJFRUVEN0RBMkZGRQorOjEwOUFFMDAwNkExNERGNkM1MEMwQkY0MTNCOUFDQUY5NENGQTQ3NjYxMgorOjEwOUFGMDAwODdFNDVCQTNERDk1RkU5MjM5ODNBRjY1RDlENDA5RDk5QworOjEwOUIwMDAwMTg3RkFCRjY4MDE1RkQ5QzgzOEU3MjhBRUI1NUU2QkZGRAorOjEwOUIxMDAwQjk1MkU3RUZCNDQ0QTc1MkJFNEM3MzA0QzgwRkNGQzY4NgorOjEwOUIyMDAwMzgxMUYzM0QwRTNGRDNGQjM5QUQyQjIwQjBCQzgyQjFEMQorOjEwOUIzMDAwMjcyQjRBMjZBMDNDM0M2NjhCNUE4QjkxQkU4RjlBMjhENQorOjEwOUI0MDAwREUzQjU0N0U0RjU4QzE3Q0Q5NzI0NjcyRkE2NDg1N0JFNQorOjEwOUI1MDAwMDJFNkJCQjc2OUMxRjQzQjUwNUU4RUMzN0MzRTRFMzcxNAorOjEwOUI2MDAwQkVDRkRBQUM2MDdFRjc3MzZCMzAxREY1QzE0M0M4RjcyQQorOjEwOUI3MDAwM0FCQzNDRTlFMjdFRkQwNTI3RjczQjFGMzA3M0I5NjgyQworOjEwOUI4MDAwMDU3OEEyMDA4Nzc2RjEyQUNBNDczREUwRTJGQUM5NTI3OQorOjEwOUI5MDAwM0Q5MUYyMzUxNkMwMDdFNkUzOTI1ODUzRDg0MUVCRTUwNAorOjEwOUJBMDAwRjlCNTI0OEZDOTUwQjdBNzVEMUM0RUVGNUY3MDlBMENCMgorOjEwOUJCMDAwNzE3NTFCQUNEM0E3RDM1RjM2MTZBNkZDMUFFMkY4QTlDMQorOjEwOUJDMDAwMDRGRUNCNDE0MTM3MkJGODQzM0VGMjRGRTJGNkExRkJCNgorOjEwOUJEMDAwRkI0N0U0QUY0OEZBRjRGOTI5MEFGODI3NUYxMjhGMzVGQQorOjEwOUJFMDAwNDJCQ0FDRDdGNzhENUEyRkU5REY0Njg4ODdGMTdFOEZDQworOjEwOUJGMDAwQzM0QUZFQTFBQzRCQjAwQjdERDZFQTA5QjU1Rjg3N0NBQQorOjEwOUMwMDAwOUU5QzM2MUNGMzAwMUFFQjIwQTRBQ0MzQkEwNEQ0ODc4NAorOjEwOUMxMDAwMUVBREI3OEZGRjQxRTY5QjZENjlEQkIxNUY4QkE4NTMyQgorOjEwOUMyMDAwNDhGMTFCRTUyNzk5QjU0NzAzMjg5RjQzNzU3MkMzMTA3OAorOjEwOUMzMDAwREY2MTFBMzdDOTY3QkNDRjU4ODg2MTlDQTE3OUUyRUIxNAorOjEwOUM0MDAwMThDMjdERjU0QTU0NkZBN0IxMkRCOEFGMkNGRERFNUM2QworOjEwOUM1MDAwNTEyRjc0MkVFNThGMTUyOEM3RTBGNzhFQ0VBMkJDNEQ4QworOjEwOUM2MDAwMkZDNTJEMzI1RkYzNzVGREU0NkMxQzAzRTNEMUU1N0Y1NgorOjEwOUM3MDAwQUVGODEwRTU2Q0M2RTQ0MkJDOUZBMjcxM0UwMTU3NUM5MQorOjEwOUM4MDAwNEIyQUM3RjA2QUYyRTIwQzU4RkYzN0IyMzhGRjM5RDVEOQorOjEwOUM5MDAwNzZBQUVCNzg1RUQ4QjFCRjM4RTY3ODI5OEUwMjdDNTI3RQorOjEwOUNBMDAwM0Q0Q0IyQkY5QkUyNDVFMUE3QTk3REZBRjFEREQ1MDFBQworOjEwOUNCMDAwQTNERjE5RDZGQjc5MkIxRTdENzc3NTRCMjlDNTJCRDRENQorOjEwOUNDMDAwN0VGRTkxMTdENzYwM0NGODgwNERCNjVGQTAzNkQ4QjlCQworOjEwOUNEMDAwMjhDNjRCNkM2RjkyMEZGOTEwREUwRkEwQkNCMURCNEFBNworOjEwOUNFMDAwQzhDRjU2OEI1ODBFRTI2MzYyOUE5NUY0QTZCQTM3NjlDQworOjEwOUNGMDAwM0JGQUMxMTAxNzNGOTdBNUNCNzM5RTRCM0Q1MTgwRkU5OQorOjEwOUQwMDAwNzA4MkYxQzI4NkYxMEFCRURFNzgzMDdGMjdENkNCQzhEQQorOjEwOUQxMDAwRTcxM0QzMzY0NzU1RkU5RTBGREY2Mzc5NUQ3RjBDQzM5MworOjEwOUQyMDAwRjg4RkJFOTBDNEQ2MDAwQTFGMzMxQkU1NUQ1RTM3OEFFQworOjEwOUQzMDAwMzgxM0Y1OERCRTVFRDE1MjNEM0Y4MDRDMkRFNTNBQzlCQQorOjEwOUQ0MDAwOTNDQ0EyM0E3RTkyNzJBRTVEMUNDNkEyM0EzOUM5NzYxNQorOjEwOUQ1MDAwMTUxMkJEMzQyRDQwNzkyNEVENjIyOTNEQkZFMEU0N0MyRAorOjEwOUQ2MDAwRDBCQUMyNzE5OTc5MzIwNzk4NjcyNEU5OEY4MUU3QTkzRgorOjEwOUQ3MDAwMTBGQTg1ODk3Q0EzNDY3NTJGNTIyRjBDMjRFN0YxRkIzRQorOjEwOUQ4MDAwNUFGMTdBNTE1RUE1NUU0Q0MxQjFFMUZBODJDQjk4NDc5NworOjEwOUQ5MDAwQkY2NzczQzc1MTY0QTFDRkVDQTE3REFFRDE1OEJGNzQyQQorOjEwOURBMDAwMzIwRDRENzg5RDI5M0ExQ0Y5RjhBM0ZFRjcxQjcwNzEwRQorOjEwOURCMDAwNTFDQzMzQzBGRDkyOUQ0QjVFNDU3NjNERUMwQTdEOEFDOQorOjEwOURDMDAwN0VEMDJCMkU5MTlGRjU4MDNENTREMURFODFCRDI4RTVCQworOjEwOUREMDAwRjk2QjI3RTY2MzQzQkU0RDkzMThDQUQzNkQ5NDhGNTUzNAorOjEwOURFMDAwREQ0MTlGMEJGMTNCQjM4MjcyMEUxMkVFQjUyQjc4MUQ1NQorOjEwOURGMDAwOTlENEIzNzYyRDQ0RjhCMjZBNjE3RTc1ODRDMDg2MzNGNworOjEwOUUwMDAwRjZCMUVCRDI0RDE4OUI2OTFBOTdBMzVGM0Y3QTk2RkM4NworOjEwOUUxMDAwMEE5QjE2MjBCRUIyMzk0QzNFRjQwQjZDMTAxN0EyREUyMgorOjEwOUUyMDAwNURFOTMwRjFGRDE2OEY5NUYyRjVBRDBBNDQ4OEEwMzc1MworOjEwOUUzMDAwOTY2NjE0N0RFOTNFQjZFNUEyOUJFQzJENDBFMkQxRUI5RgorOjEwOUU0MDAwRUQ3RkZFM0M0RTYxMUY4Q0YzNjgwRUVFMzdCMDQzRENCNQorOjEwOUU1MDAwMEUyMzEyM0VEMEU5NjNFOTBGQzRCRjE3M0ZCRUM0QTc2QgorOjEwOUU2MDAwQzRBRjE1RjE1QTRBRjYzMEExQkZGMTc3NjEzN0E1RkVBQworOjEwOUU3MDAwQ0M5NkZBRDY3NUEyMjQwQTc3RUI5NUVFMzRGNDZCNDBCMworOjEwOUU4MDAwOEZGRTFERjlBNEUxRUFERTM0OTM4RkY0QUY5QkZCNDExMgorOjEwOUU5MDAwNjFGMTNFQjNFQkY5NUFFNkE5RTVCQTI0RkM0QjVGNUZFQQorOjEwOUVBMDAwNjBENUVGOTdDNEMzMUI2RjY3RURBNUM2RkEwMjlCQ0ZDMQorOjEwOUVCMDAwNTg1RjIwRUJGNjU1MkQ0ODdDNjMxRTE3QjBBMjlDQUM3MgorOjEwOUVDMDAwNzQ5NDNCRDBDRjY5RDE3Q0JGMEI1MDVEODQ5OUZDNkRGRAorOjEwOUVEMDAwRjBERjBERjNDQkVCNDMyMEZGMDhDNzEwQjdDOTUwRjdGNQorOjEwOUVFMDAwMjJBRkE5QjgwRjkyRTBCRDQ5NkU4RUJGODcwRURFNEUzRAorOjEwOUVGMDAwN0E1OEYzRjM3REExNzhGQTMxRDY0RUZDOTI1QUMyMUNGRgorOjEwOUYwMDAwOTQzRjE1RjBBNjVENjZEQzgxRjhFODA3MDc2REU0Mjc0RAorOjEwOUYxMDAwNkI2M0FEMTFBQ0JCOEM5RjRGMzUwNzAzMEFFQUREMzI5MgorOjEwOUYyMDAwNDY3RUIyOUFDRkU3NTc4NzMwQUFEMzRFMUI5NUM5ODY5MworOjEwOUYzMDAwRUFGMEQ4RUE5OTQ5Q0Y5N0JBMUMwQ0U5QURBNjlBODIwMworOjEwOUY0MDAwODlGODQ1RTJDOUUzMzYxOUY2QUQzRDkyNkZCQ0JGQTc2QgorOjEwOUY1MDAwRkQxNTFEREY0Qzc0QkJGQUYzOERDN0NERjUyMUMyQTFGMQorOjEwOUY2MDAwQTc2RkFCQTcyODNCMTE3RDYyN0E5MUYzRDVFNUY4QTJFNAorOjEwOUY3MDAwNjIxQ0YwM0JEQTc5Qjg2RTgzNzU3NDZBNkNDQUVFNTI3MworOjEwOUY4MDAwODQ4QjUxNUQ3QkRENkMzQjczODA1REJCQzM1Mzc5OUJFMAorOjEwOUY5MDAwMUJDNkFCRTg3QTk1RDc4Qjc3QkEyODY4QUMxM0VGQzdBNgorOjEwOUZBMDAwQ0ZGRkI2OUJFQkRCQjdERDVDM0ZBNjlGMDgzQzNCMUVCQgorOjEwOUZCMDAwRjBEQ0Q5OTVFQzUzRTA1MTY3NjY2MjNERkQwM0I3NjI3MgorOjEwOUZDMDAwQUMzN0QwQkE4N0EzRkYyMkZCNTc1NDFCRTcwQjBCRkEyMQorOjEwOUZEMDAwREYyRkRGMEJERjlDODlGRURDNzRDNjY1QTNEOEFGRjBGMgorOjEwOUZFMDAwRkE4NjdEMjk5MTIxNjg1NzU5NTRCQjA1RjBCQTUzQzRBQworOjEwOUZGMDAwOEQzQjIxOUU5QzAxRTNCQTkzNTkwOEQ3RURDQTgyNzYyNgorOjEwQTAwMDAwMjlCRDFGRDg2RDhGOERGNzZCOEUzMjM2QTkzOEI4MDNGNgorOjEwQTAxMDAwQzc5Qjk0RUQyRDZCMkVFNEVGRTMzODQ3OTI1OThCQjUzNworOjEwQTAyMDAwM0M4NkY3OUI5MzgwRTUzMkYxNzkzODY3NDk2OUVDRkUwRAorOjEwQTAzMDAwMTE1MEVFRDhDRkVERUUxRUFFODBGQ0NGMzcwNURDNjhCOAorOjEwQTA0MDAwNDczRTdDRUI3QjU0MjdCQTg4MDU5RUZDMTBFODczMzVBRAorOjEwQTA1MDAwRENDNEY4QUFFMjQ0RDA4MjdBRTE1MzdDMDhGODdFRENDMgorOjEwQTA2MDAwMUU1QzhEN0NCMkEwN0RFQTkzRkEzQTE3QjY4MzdGODc5NworOjEwQTA3MDAwMjJGMUQ1OUYxRkI4RkUwMTM4QzNENjRDMDM5QzZDMkMyRgorOjEwQTA4MDAwQzI2REU1RUZDNUUzNTc1RUVGMTI3QzJDRTkwOUU4QjkzNAorOjEwQTA5MDAwMkE1NUQwNzMwREEwN0U2RTBBRjc5NzNCMkQ5QzRFN0RGRQorOjEwQTBBMDAwRkNFM0IyQjRFMjNFQ0E1OTJCN0ZDRTAyNDNCOTdGNkZDNAorOjEwQTBCMDAwRTVGNDk5OUI1MjEwNDFCRkJBNTMwQkE0QTA3RjNGQjc2MAorOjEwQTBDMDAwNkZCRjNFNDBERkY1RDREOTAyRTlENzIwRkRERUUyRjFEMworOjEwQTBEMDAwRDdFOTRBN0I5QjAyRTM5QzM2MDdEMjUxNkU0RkJGQTU1RQorOjEwQTBFMDAwMkEyQkE5RkU4MUQ3NDdDQUJBQjNEMzY2REZEQTJCRTFBMAorOjEwQTBGMDAwRjlCQzFGQTk4MTk1RjREODE4NTc5QzY1ODE5MTZGNjJBRQorOjEwQTEwMDAwOUNCNTRGQTU3REJCQzI4N0VGNTZBRjg2RkVGMzIxRTAxRAorOjEwQTExMDAwNDBCRDM0QjdDQTFFNDY3RkFFRjNGNzREN0Y0NEJCMzYxMQorOjEwQTEyMDAwRUZGMTI0REYyQTk4RTdGMEU2OTE3RkM1RjZDN0VCNTJGRQorOjEwQTEzMDAwN0Q0OTk0QUYyRDUyQkM5ODQ3NUQ1RkU4QTBGREI3RTUxRgorOjEwQTE0MDAwNENGOEFERjc0RUFCMUFDQ0Q4NEZGMTVGQjkwRjAyNkI5QworOjEwQTE1MDAwRkU5OEM5RTc0RkFDOUQwOEVCQkNEMkQ1NjlCMjAzNEM2MQorOjEwQTE2MDAwMzc2NDNGQjFENjBBRjQ3RTYwNjVEMDgzNzk4ODczMUI2QgorOjEwQTE3MDAwQkZCNTE2RjMxMDZFNzdBMDZCQkMxRkUwREJGNDlENjlEMgorOjEwQTE4MDAwRDhFRTdDNEM4QzE3NUVCRTE2RjMwRTJGOTk0Mjg1MEFEMgorOjEwQTE5MDAwM0M5RkIyNjlGRDM0QUE1MzJFOTZFMzNGQjUzNjAwRjZENAorOjEwQTFBMDAwN0ZFRTEzNTdGQ0Y1MDQ4Q0RGOTBGRDhCNjlFODFGMDBGMAorOjEwQTFCMDAwN0QwNTNDMDcwOEJFMDVFMzY0RkI2MDRBMTVGODBFQ0UzQQorOjEwQTFDMDAwMTQ2NkM4Qzc5QTYzNzkwRENBRjc3NjRBM0Y5RDFEOTlGMAorOjEwQTFEMDAwODZGOUQ4NzkxMzlBQUEzNDE4N0Y1M0Y2MUI2QjRCODdFQworOjEwQTFFMDAwMzEzNkE2QkREMjExODBGNkQ2RUMzN0E3QTUwMDlGNzRGNAorOjEwQTFGMDAwQjI0MDJERTY0RDIyRDlCRjk5NjZCRDFFQzZDRjMyOEUyNAorOjEwQTIwMDAwRUY1NDQ1NUUzRkZDQ0U1QTFDQUZBMjNBNTA4NkZFNEMzRQorOjEwQTIxMDAwQTlFN0MzQjU1Njc4REY4NTc1QUMzMERGNkQ5Qjg3QUQ5OAorOjEwQTIyMDAwNDNCRjVFRUFEMTdGMTE3QTE0RjRFNjE5OTQ4NzdBNkIwMgorOjEwQTIzMDAwRjc1MTRDRjUxNjJDRUZCNUYwRkE2NkExM0ZGMjM4NUZGNgorOjEwQTI0MDAwRjdCNTg3NzZGMzdBNzREOUY2RjA3NkU3QUFDNEZBRTgxOAorOjEwQTI1MDAwMkYxRUNFRjc5REM5ODk5RkU3NjY3M0ZEMjNFNTI2RkQ3NgorOjEwQTI2MDAwMDQwQkVDNEEyMDNGQTY2Q0ZCRkY0OEZFQkNEOUZGOEZENQorOjEwQTI3MDAwRjQ1QkM2NjVGNDVCODZENDZGMDI5RkE1NDY3RDBERDM2MworOjEwQTI4MDAwMDhCRDdGNjUxMUVBODk2MzZFOUZDMTVFNTc3NENEMjQ1NgorOjEwQTI5MDAwN0JGMkFFNDdFODE1MUY3RkRGNTVDNUVCODE3QUY3QTc0NAorOjEwQTJBMDAwNTBCRThCNTlCQjRBOTA0RUYyQkREMTAyRUY1NTBGNEVCNgorOjEwQTJCMDAwREY4NEZERUFCQUNDOENCRUYzRDg1REY5QTU3RTY1MURCRQorOjEwQTJDMDAwRTY4Nzc1NzE0ODlEMTZBNUJDNDAxREU2ODc0N0UyNzg3NAorOjEwQTJEMDAwQkZCNkEwM0Y4NEUzRTA3NzFDQjgwRjgyRjk1RDU3NzNFNworOjEwQTJFMDAwNjJGQTRCQkZBQUVFNjIwNjBCOEZFQzZGN0Y2M0UzM0IxMworOjEwQTJGMDAwRTlGOUU1RDYxNTFCQ0Y5OEJGRTgzRjlFNDVFQzI3QzU4OQorOjEwQTMwMDAwRDk0OTRCNjIzOEFCMjU5RjAyQkU0RDNBRkU1QTIwRjgyMAorOjEwQTMxMDAwMERCNDI3Rjk5MzNEN0I4NzZENUY1M0E4OUY5NzdGNUZBRgorOjEwQTMyMDAwMDVGQUY5RDlGMUE4MkY0MURGQTNCRjU5QTEwNUE2NjEwQworOjEwQTMzMDAwRkY4QUFFNENEQUE3OTJGQzIxRjk0MkQyQjUzM0IzODkzOQorOjEwQTM0MDAwRjI3RUJENUIxNEYyQTdFMkUxOUEyN0UxREFBQzcwM0YzRQorOjEwQTM1MDAwQTQzQUE0REVBRDgzNEZDQTAzOENERjI5QzYxRjM1OTYwRAorOjEwQTM2MDAwRTRFN0M3REM5RjA2QjlCOTAzRTUxN0Y3QkQ3MTFERkUyOQorOjEwQTM3MDAwRUVFMTMzQUZFRTBGRkZBRjg1MUYwNTc0RTRGODdGQzE0OAorOjEwQTM4MDAwNDY3NTBBRjFGNjMyODZGRkRDQ0JEMEIzODA5RTRCN0Y1OAorOjEwQTM5MDAwQTg2RTQwQkI5OTQ2RUY2NTlGODhBNkY5QTA1Rjk3RTAzRAorOjEwQTNBMDAwRkZDRThFMEZEMkFFNDNCOUQ4QTczMkM1QzdENzhEN0FBQworOjEwQTNCMDAwQUI0MkVBRTNGMDg4MzcyNjY4RTQ5N0M1RUM4NzhGRkM2OAorOjEwQTNDMDAwMzNBOTNGQTM1NjZCQUM3RjcwRTM4ODY5MkRBOEJGOTM3OAorOjEwQTNEMDAwQjhCQzNBNTVCMDM2RTUzMTM4MUVDRUU2N0E2QzZDMjhGQQorOjEwQTNFMDAwNzE3Q0YzMDM3NzJBM0Q5N0Y4REVCMkJDOEE3RDAwRUJERgorOjEwQTNGMDAwM0IyMUVDRkREOEVFQjA4Mjc0NTkyMEYwRDhFN0NGMDhBRAorOjEwQTQwMDAwN0Q3NjczNTJGNzczRTJGQjEwMDMzRkNBMzZGODNCMERCQgorOjEwQTQxMDAwQTY2MkRENzMzQkQ3QkI3MjNFODBCNzg1NjFDOTBBNUMxQgorOjEwQTQyMDAwMTVCOERFRTYyOTE0RTM3MEJFM0NCNTM3N0IxQkVBMEY5NgorOjEwQTQzMDAwNjc3MUEwMENGNThERTQyRkIwMjc2MkJEQTZCQjY2REE2QworOjEwQTQ0MDAwMzlGRkNGNEM0MDg3RTc4NUZFNUNCMDk5QUZCRkYzM0Y0MworOjEwQTQ1MDAwQUFBNjIxMUY3NEJFOUQ5OUIxNEFDN0VGQTc4NDFGMjlFMAorOjEwQTQ2MDAwQzc5NUYyMjRERjkzQ0ZGNzhCRjE1RUM5NEUyMzdDOUMxNgorOjEwQTQ3MDAwMTJGODQzMzgxMkQ1OEJDOUY3NzBCREE0QUZEQkI4QkU1NAorOjEwQTQ4MDAwODY3NTg3OTE0RUIwRUVCMDUyOEVFQjU2MEM3NkEyQ0YwOQorOjEwQTQ5MDAwM0UwODdDRDc1QjAwQ0Y4MEM3OURFNjcwMEVENjMxQjlGMQorOjEwQTRBMDAwNzAzRUZCRTVFNTE3RDY0M0NGN0JGN0E3OTJERTg5MUYwOQorOjEwQTRCMDAwRkY1QzM2OEZFN0I2OTk3ODlERDUxMTEzQzgzM0NBOTlEQQorOjEwQTRDMDAwOURDM0RCQjNENzRCRTM3NjBCM0VCQUJDM0VGQzZBRjJDRQorOjEwQTREMDAwQjNDREMyRUI2MjAxN0VBQTRGQUM3RjMxNzc5QjExRkVGOAorOjEwQTRFMDAwOTUwMkZFNTAzMzdFODdFN0RDQzRGQ0NEOENGMDE2NDUyOAorOjEwQTRGMDAwN0NEREVCRjE3MUZENjQwOTkxRkZENkJCODU1MUZDM0ExRgorOjEwQTUwMDAwMDRGQzA4MUZCNDFCODNGNjcyQTUzMDI2QTcyNTFEMEE3QworOjEwQTUxMDAwRDFCMTYyMDNEODY5QzQ5QjU1RTJFREY1NURGQTc5M0Y4QworOjEwQTUyMDAwQ0Y0RTM1N0M0RjU4MjdFODNGMDRFQ0ZCQjMwMEVGMTBDQgorOjEwQTUzMDAwMThFNzM5ODI5QkMzNzU2QTYzQzc3NTk4QTdFQkIzRjdCMQorOjEwQTU0MDAwOUUzNEMxMEZGMTcwNDYyREI5MUM0RUFBQ0I0MDdGQzc3NworOjEwQTU1MDAwMzcyQTA2Mjc4RThGRjMzMDdCNzAxNThFREJGMENFOUU2OAorOjEwQTU2MDAwNUNGREI4RTkxRUNFNkY0RTc1RUUwNDFCRUFCMUY1QTA5NgorOjEwQTU3MDAwNTc0OTFEODQwRUUxNzcxNkYzMEY2NDM4RDYzMDhBMUJENQorOjEwQTU4MDAwNEMxODFGQ0E3OUU3OEI3QzJEQzg2NUM1MEM1ODVBNDlGMQorOjEwQTU5MDAwREYzQ0EwM0Y3NUZBQUZDODYzRTdGREFENTUwMUFBNzc3MAorOjEwQTVBMDAwRDNCODdENzJCNTlGQkUxRkY3MzEwNkIyQUJGRjJDN0VDQworOjEwQTVCMDAwMDAzQUQyQkE3Qjc3QzNCQTdDMzFGQzc1NzZEQ0JEQ0E2RgorOjEwQTVDMDAwODZGQUYyMDRGM0EzQkU5NEVCMUE1MkREOUQ4Njc1M0MyNQorOjEwQTVEMDAwOEQ0MjhGMDI1RTRDQzgwN0NFMUZGOTU4QjM0RkE3OUYxQworOjEwQTVFMDAwMDVGRDg2MzIyRTZGMzIzRTE5OEExQjJDRDBCRUQ2MzMyMworOjEwQTVGMDAwNUNFQTFCQ0ExNzlDN0FGMUU1NjdENzUwNUNDMUU5RDVDNAorOjEwQTYwMDAwNThDREU5MkJFNUY1MEU0RkU4NUUwRkNBQzFFQ0ZCNjhBQgorOjEwQTYxMDAwN0YwN0ZBNTVBMEJFQUJEQkMwRTc4MTdFMUQ4Q0U0QjY5OAorOjEwQTYyMDAwQUJBMDFBRjBGNzJGOUVENDg0NzQ3MzA2M0I2Q0Y0QkU3MworOjEwQTYzMDAwRTBGRjczRkJBRjhFMjAxRkJBNkVFREFEQzJGQkMwMEYwMworOjEwQTY0MDAwMDQ0RjY3NDc2QTA0RTM2NkYyOTdGMUZEOTcxNTZFQkYwMgorOjEwQTY1MDAwNTg4OEYwMzJCRkRBRTFEN0YzODk4NEFGOEZFRTBDRTg4NworOjEwQTY2MDAwN0U3NUVDRkU5MDZBM0U2RUUzM0UxODk3OEY0M0YyNTM4MAorOjEwQTY3MDAwNzcxN0EzN0NCM0E0MEY4MDFDQzZGQ0JFRDQzQjJFRkM3MgorOjEwQTY4MDAwMkMzRTMzODY0Nzg5M0ZGOTdFMDNCRUNGNzhERTAwRTM1OAorOjEwQTY5MDAwQkQ0NkQ2NERGOUQzM0EzNTk4ODdGMTFBQ0I0RUEyRUY4NQorOjEwQTZBMDAwNTQyMTBFMjZGRDczQzRDNjM0MUJCQ0ZGMUE1Q0QxQkVGOAorOjEwQTZCMDAwNEY1Mjk3RDBGNzQyOTM4QTE1OTI3M0QwMTAzMjZGMTY4QgorOjEwQTZDMDAwNDUzRkYyRTZGMTI5QTQxRkQ4MTdGNzBFQzZGNUI4NTI5OAorOjEwQTZEMDAwMzhERkMxMzg1NjMxOEU5NUZDNTRBMTBGN0Y1MzAwRkFGNAorOjEwQTZFMDAwNTA4OUU5RjEyMzhBNDJFMzFDQjlGRUFBRUQ1NDlCMjk2MworOjEwQTZGMDAwRDY4OUUzQTFERjcwNDQ5OTkxNDdGRUFDQzg2RjAwREVCNAorOjEwQTcwMDAwODZFQkZEQjMxOEZGODYwNTVDREQwNUY4NUMxRjI3NjE0RAorOjEwQTcxMDAwNUNEMzE3Njc4NUM3QUZCQjExRTJBQzMxNTMzQUEyMjZCMQorOjEwQTcyMDAwMDc0QUMzODRFOURGODE3OTI3NDE5QzY1ODNGNURGOEY4MAorOjEwQTczMDAwN0M4Q0ZBQkUzMEFDQTYyMTVDNDM2MERENzBFQjY4NzJBNQorOjEwQTc0MDAwQThCNEM5MUU5QkM3MkRGMjVGNkU1MUI3OENGRTNDNUU0QworOjEwQTc1MDAwQ0Q1RTZFNTdENjdCQjlEREU4MTY1NzcwM0IxMkU2Q0I1RgorOjEwQTc2MDAwRkU1MzNDRkY3NzNCRDdFMzZCMkExM0Q3Mzc2RkYxMThDMworOjEwQTc3MDAwRjM5RDM3OEJGRDIyODhCN0I2MjBGRjQwQkMyNUVBNzdEMgorOjEwQTc4MDAwRjlGRTEyRjhCNTg0REZBQTA3QUI2OURGRjRGM0FFNTkxRQorOjEwQTc5MDAwRTlGQ0JDMDcyRUZGMEI0NEZERUM1REY3Q0ZGQTIxRjI3QworOjEwQTdBMDAwREQ4NzU4NTcwRjc0RkM0OEVDRUY3REU4MDhBNDYxOURFNQorOjEwQTdCMDAwNTk3RDcyRTIzQUVBNUY3QUY4M0FFQjA1MUU0RUFGRTA1NQorOjEwQTdDMDAwRTczMzJDQzA3RDRERjA4Mzc3N0JCOEZENUFENDdFQ0IyOAorOjEwQTdEMDAwNjRBNEZCMjI4OEUzNzE1RjUzRDY0RjQ4M0FENzZDNTU4NworOjEwQTdFMDAwMERGQjEzMEI3MDVGMzNFQjFGODkyM0NBMDY4ODIzNDZDQQorOjEwQTdGMDAwMTlFMjA4Mzk2RjdDM0M3MTZBODVDN0IwOEYzMkI3QkRFQQorOjEwQTgwMDAwNTg5QzhGQzFGQkNGNjM3RTgyN0I1RTVCQUU2MTFGOTZERgorOjEwQTgxMDAwQjVCOUJFRDJCOTA2MTgzRjg0MTNDMjY3MzFEQzNGQjU2MworOjEwQTgyMDAwQzIwQTAyQUU4M0UzOTNDMTU0N0ZCMkM1MTNGQTlEQzczNworOjEwQTgzMDAwMDA0NzBBMEIxQkYyQzlFMzFDQjRERjZGRTM3OTZDQTA3RAorOjEwQTg0MDAwN0Y1OEVGNTdDN0MzNzVDNkYzOEZDNjZCQzUwM0UwQjkxMgorOjEwQTg1MDAwRTQ3RjI1NUVBQjE4QzdGNTFBNkI1N0E4OTY2NkNDQzQ4MworOjEwQTg2MDAwMzhGRjU5RDhDQjRCOUUxNDQzMUU2MDdFQjVCMTlGRUE4QQorOjEwQTg3MDAwRTVGMUJGRUE0RDMxRjhDRDAzRTUwMUY0N0VCMzUyOEMyQQorOjEwQTg4MDAwRkE4MzhGRDcyMEVDNTZFMTY3NkY1MzFERUI3ODJGRjdEMworOjEwQTg5MDAwMzNDNkU2MDQ5MkJENzA1RDI3RUFEOEQ3RDlGODc3RkVCMworOjEwQThBMDAwREJGRTdFQzgzMzBGRkQ4RDM3Q0Q1NDc3QzBGNjcxRkVDOQorOjEwQThCMDAwQTlGQ0YxQjI2NjNDMzdDMERFQTEzOEY0REZCNTdFNjM5NworOjEwQThDMDAwQjkxMjk4MEZGMkUwMTY3QUEyQ0VDRkQ3NTNFNzhGNUE3QgorOjEwQThEMDAwMDZEQkIxQUU5OUMzOTFENzcxNTBEMTc0N0EyM0FGODY5QworOjEwQThFMDAwRjdGMzc5Q0Q4NkZBODBDMTVFN0UyRTQzOTE1N0U2MEQ0RgorOjEwQThGMDAwMjMwN0E3M0FCMTdGNDA0MzNCOTNEM0ExOTAxRENBNjk3OAorOjEwQTkwMDAwNjJGNDNENEVDRTI4RUU5RjdENjNENDM2NjU1RTY5NkM2MQorOjEwQTkxMDAwQkQ2REE2MTlBNTBFNzhBRkNEOURFMjQ3QkRCRDJBMjcxNgorOjEwQTkyMDAwNzRBNTE3RTEzQjE5OEQ2MjNBNjdDQ0M5MkUwREUzQTdEOAorOjEwQTkzMDAwMEQzOTgxQUIxMDBGNzI5RDNFRDU5MTgzRjYyN0U1MjQyQQorOjEwQTk0MDAwODdBRkJEMkYyRkMxRjUzNjYzNkIwNTVDREI3OTdDQTgyMworOjEwQTk1MDAwQjI2MzhDRkJCREI0OEZFQjVFMzU5NEVDODc1QzhGM0JCMAorOjEwQTk2MDAwNTNFODVGMzcwQkVEMjFGRjlCQjU5MUZEQjM3MjdCRUE5NgorOjEwQTk3MDAwNUU1NTQyN0VCMkE0NkIyQzlGMzJBQzFDRjMyOUM1RUIxMgorOjEwQTk4MDAwQTJEQTVDNzhFRkM1QURBNjg0RTc1ODRDMTU3ODg3NzVEOAorOjEwQTk5MDAwNENENEFGRTM3MkYyMkVGQjk5MDdDODUzNDlCRTRGOTlDRQorOjEwQTlBMDAwOTIzOEZFODMwODkwOUU1N0ZFRDhGOTREOTJDRjE2MEIzMQorOjEwQTlCMDAwQzNGQ0E2QzRGRjg2OUNFMDZDODQyN0E3NjM5QjgyQjg3NworOjEwQTlDMDAwMzkyNUVBMjM0RTI1RjNGQ0VEQTkzNUNGMkFFODg3RERBQQorOjEwQTlEMDAwQkI5ODM5NTQzNjMwREM3NUNCRDVDMDdDQkQzQ0I3NThGQworOjEwQTlFMDAwODgyRTMyMEU4OEMxQzNFMzk2MjYyRkQ3RUJBRkU3MDQzQgorOjEwQTlGMDAwMTcyMUJEMUJGNkFEQTdGQ0RFRTIxREVGNUJCRTc0RkZBOQorOjEwQUEwMDAwRTMyQkUyNERBOUUxRjE0REREMUMyQkQ1NTE1NUZFNTg0QworOjEwQUExMDAwMjNCQUQ3QjY1ODY4QkZCMjZFRDc2RUZBOEU4REREQzcyRgorOjEwQUEyMDAwRkMyOEZGNzUxREJCOTVGOTMwNkZFREFFRERDQTAyMUQyOAorOjEwQUEzMDAwMUU3M0VCMjI1NDM3N0U0NUFBQ0M1RjQ3MkRBOENGRTM4NworOjEwQUE0MDAwRjkxQkYzRkY2OEY3OEZEQUI4RkM5RkFEQjQ4NzMxOUYyRAorOjEwQUE1MDAwN0RENjFDQUFDMzdFNjdCRDI5N0VEQzNGOTU3ODdGNkRCRAorOjEwQUE2MDAwRjc4RDc0N0U0MEVBOUVBNDI4NUVEQjRDREIzRDU2RTgwMQorOjEwQUE3MDAwRDc3NkE1QzU4RkZDQjQyMTI3QjQwRUU5OTJBOTA1M0I3MgorOjEwQUE4MDAwRjFGRDBDNjdBQTFGRjNFMUJFMjQ1NjRFNzZFRjJCRTJEMAorOjEwQUE5MDAwNjE0QzFDNUY4Q0I5OEZDQkNCMkI0MkJGQzAxRkQ1NzFEMworOjEwQUFBMDAwM0RFREU1NzEyRTZFMDdBMEJFM0E2QUU2RUJEOEMzMzhERAorOjEwQUFCMDAwQkM2NjZGRTA0N0M0QjdDNzMyNjlERTlDQkFBODgyNzUyRQorOjEwQUFDMDAwMUZGMUYzQzZGODJBQjBDREVCRkEzQTcwNzY1ODUwQ0ZBMgorOjEwQUFEMDAwRDcwQTdENTNGOUUzMURDQTA3M0FCODNCQkMyQUMxOTc5MAorOjEwQUFFMDAwQjM2QjlCODJGOTE2Nzg0RUZBMDZGQTMzQUNCM0NBRDkyNworOjEwQUFGMDAwQzVGMzRDQjVGMDdDODE0RUJGQzg3NTI0RDAzM0JGQzBDMAorOjEwQUIwMDAwRjVEODRGNzYxREU2N0EyNkNBRjNDQjAyREU3ODdBMUU5OAorOjEwQUIxMDAwRjJGQTY4RkVDOTYwNjZFOUJFMjUzQzE0RTNEMEEzNDU5RAorOjEwQUIyMDAwQzkzNDlFOTRGQjc4MzkzREU0RTVGRTU4Q0VENjFEOEFBMworOjEwQUIzMDAwQzk0RTc5NzhGMkNCMjQ3Q0IyREZEODlDMDlBRjIxM0M5NgorOjEwQUI0MDAwNjNBNjc0MTExRUVBQjc2QUI0OUU0OTk2RTBFMDI1M0FGRQorOjEwQUI1MDAwNzlGOEFEOTA5QjU3NjdGRjkxQ0VEQkQ5RjA4QkI3ODgyMgorOjEwQUI2MDAwMUZFQkRCMTUxRTBGQjRCRjY1OTk4NTc2MjZGQzEzMTUwOAorOjEwQUI3MDAwRjc0REE2NzFEM0NFMzY4QUYzQThBNjc1NzIzRDVDREY3OQorOjEwQUI4MDAwQjk1QjlCNjc4RkYxNjlFMTY3QUZEMjM5NTZGNTFENDkxMworOjEwQUI5MDAwMENGNzUzODFGRkZFODBGNDhCRTc1Mzg5MUZBOTY3MDdFOQorOjEwQUJBMDAwQTIyN0U4MjNGRUZENDNEODIyRjJEN0ExQzI5OUE5MzFGQQorOjEwQUJCMDAwM0Q2RDE2Nzg2MTc2N0VGRkEyNTg1NzhDN0Y0MkU3NzAxNAorOjEwQUJDMDAwRkU5ODlFQjU5MTVDMTQ3RTU2RkUyQUQ2OTlENkZCMTU0QQorOjEwQUJEMDAwM0FCRkMzNTlDNUYxQTk4NzZCNDZDMjdEMzJBRTI3MzE1MgorOjEwQUJFMDAwNEZDRUYzMkFERDA1MzM3NURGOTNGNUU5N0JGMUZFN0Y2OAorOjEwQUJGMDAwMjJCREI5REQ4OEYyRkJBQzA4RURCNzg0M0Y5RTdFNTdERAorOjEwQUMwMDAwRTQ3MDNGMzYwMTlGNjkzOTA5RUM5OUI0RjM4NThGRUYwMQorOjEwQUMxMDAwRDFGMDdCMjBDOTNGRDM5MEVFM0FGRUM5Q0FCMUQwQjg3QgorOjEwQUMyMDAwNTkzOTFBQzFCM0IxOTJFRjVGNkQzNDczM0JCNjcxQTU1OAorOjEwQUMzMDAwOTVFQTQyNUZCQjlERDdBOUE1N0VEMzEyQzVFQjExRDM4MAorOjEwQUM0MDAwREMzQTdDN0UyNDg3QzNEMTY2NUE0NURGQzc4MTVDM0FGMworOjEwQUM1MDAwNzM0NjIzRkZBNDMxQUUxRkI5M0VEQ0YwM0NENzY3NzVDNQorOjEwQUM2MDAwNjE3QjA0Q0ZBQkE5MEJERDNBOUZFQTEwOUMzNjNGRDYzRgorOjEwQUM3MDAwRUZCMkQwNjFDQkFDRDRGRTdDRTVEQjczRDA4MkYwNEY3OQorOjEwQUM4MDAwRUJFMEYyMjdFOTAwRkE5NEY4NEJDQTgzQzQ2QjBDOUZGRgorOjEwQUM5MDAwMTE4MzNDNDk3QTk4RkJGQzg5NTAyMUY3OTc3ODlDNTJBNAorOjEwQUNBMDAwQ0E1NERBMTdBQUIxMDY4RUUyNzc4QzM1NjIzRjE1RUZFNworOjEwQUNCMDAwNjM5REFCREM0RjlEMkJFOEYyQjgzRDM4MTJEN0Q5NkZCRQorOjEwQUNDMDAwM0ZGNTJCRkFEOUI1Q0JERkEwQjhFNjFFQ0ZFQjc0OTVENAorOjEwQUNEMDAwNzIwQkYxQTA0MUJFMjcwOEJBMEZDQkUxRjY3RDZBMEVEOAorOjEwQUNFMDAwRTc5QkRBNTExRDI0OTdCNTFGMzY5MTNDREJBNzcwQkQ1OQorOjEwQUNGMDAwNjYzRjY5RDRDNzhDM0QyNEQ2QkI4RURFOUI5NEQyMzE4RgorOjEwQUQwMDAwMTlGNzIxMjczREExMzgzMDRFMUUwOENFNDVGODFEMThGMQorOjEwQUQxMDAwQzY0QjVCMEZBNUREOERGOEZEMDJCQzc1REQ3NzQyREYwQworOjEwQUQyMDAwQ0MxMUU3NDNFRTA0ODQxM0JGMzc1OUJFQ0MxRkJGREMwMAorOjEwQUQzMDAwNzgyQzdBNUNBMUYzNDIwNDJFQ0ZFRUFBQkFFNjIzREM4QgorOjEwQUQ0MDAwMzdEODk5RUVDN0VGRjNDRkVDQkFFNUJCMUYwMURDNjc0QworOjEwQUQ1MDAwNzc4Q0Y3QTM5RkUwNkMwRTEyRkZGNEJBNkNGRUVEM0MwQgorOjEwQUQ2MDAwMUYzQTA1RjMzRDJCM0IwRUE1RTE3NzQ1OUYzRTNCQTJFNQorOjEwQUQ3MDAwMUNGNUY2MTIwMUU3NjdDRkFCQ0IxMTJGQUI5RUY5RjlBQgorOjEwQUQ4MDAwMERGOEJDMzZBMjY0QTFGRjdBNzZFNzEzRkY5NTAzRTNDMgorOjEwQUQ5MDAwRDRFQzY4QzQxM0M4NThGM0IzQkZBNEI4QzAxNEQ5QzY2MAorOjEwQURBMDAwRUZFRjRDMjczRkY3RDMyN0Q3REY4MEY4NkVFRTY4QTY4QQorOjEwQURCMDAwRTc5RjNEQjk4RERBQUYzRUYzRjM1N0ZFMDNGMzFGQzFCMgorOjEwQURDMDAwMzRGQTNFRkFCM0U3MEYxMjVERUE0MjFBRDVDNTBGQzQ1MgorOjEwQUREMDAwRDcxQjc3MUZFNEZBMTJFRDNDQ0FDMTFDQUVDNzI0NUYzMworOjEwQURFMDAwNEJGRUZERjQ5OUJCQUVEMURCMEQ3OUJGNERFNDQxREFFQQorOjEwQURGMDAwOTJCOTFEMzkyM0U0QjY3NjgyQkQwREFGNjc3RTY2QTM5NgorOjEwQUUwMDAwNzMzQjFCMkNERDI1MTgxRkQ3OTU3MkJFNTg5MUMzRjVENworOjEwQUUxMDAwNjA1REM3MTI3MzgzOURERUE3NzFGRTBERTQxREFGNTcwMQorOjEwQUUyMDAwMDM3RjYyRkQxOUY0REE3MTg5RUFBODlFQTNGRUQwNkY1MAorOjEwQUUzMDAwMkNFNjQ5NjY1N0JGQ0ZCRjJCMkQ2RDMyRDcxMjlDQ0Y2MgorOjEwQUU0MDAwRjJFN0IwNkFGREYzOEE2NTg5RjczNUI2RTREODBERjkwMworOjEwQUU1MDAwRDE5Q0NFMTk3OTNFRDIwMzQ5RkUyMTNBRkYzN0E3MjY2RAorOjEwQUU2MDAwRDQ4Qzc1MDIzNzJEMEJGOUYxM0JGQTE3M0Y3OTdCMzIwMQorOjEwQUU3MDAwRTZEMzlFMTlBQThDMjRGQUFCMEFCNzczNjEzQkNENTM3MworOjEwQUU4MDAwOEZGQjBFMTA3RjNDMkJFNEM0RUQ2MENFNkI2MTNEOTNENQorOjEwQUU5MDAwMzRFNkI0RTM5NUIxRTM2NkQyMEI0RkQxRjhFMEU3OTAyNgorOjEwQUVBMDAwRkZFNkZCRTVFQ0E3RDBFRkQ5NjgwRTc5NDdFMzM4NkRGNAorOjEwQUVCMDAwQzIzRUVFRTBGMEMzRkIwRTdCMzk4REU3Qjg5NkZCRUJBQworOjEwQUVDMDAwNEJGMUJERjMyQkE3M0JEMUJGODc3MUJCQ0NCQTc4MEMzQworOjEwQUVEMDAwMzhCMjAwRUQyMzhFMzcwQUYxMzQyNTNDODdFQzk0Q0Y0RAorOjEwQUVFMDAwNDJFQjkzRTc4MUMyRkEyOTdGMkFFNTMzM0U0RjgzRkE4QQorOjEwQUVGMDAwMDlGM0FEQUZFNzU0MUVDRTcxQzVBRUVFMDFGMjFDRDYxQworOjEwQUYwMDAwNUNGRTdDNEE2RTgwQUU1RkY1N0NEMTU3NjdGNzcwM0I4NAorOjEwQUYxMDAwRkZEMkZCQzRCNzBEQzhCNzM4N0ZFODQzODM5RDk3RjVEMAorOjEwQUYyMDAwMTExQkY3QkY0RjdDM0I3RjFGRDdDNzBERkIyQTJEMTg4NgorOjEwQUYzMDAwNkY5RDU5MTE2MDFGODBBM0RCMjBGODZGQTNEMkJEOTBENQorOjEwQUY0MDAwQkU0RkRCNkZBM0VGMEU3QjI0N0ZCNkJGRkYzMUVBOUZCRQorOjEwQUY1MDAwQTI3RDVFQUFFN0U5RDlDRkY5RjQ4OEM5NDQ3OTgwMjNCNAorOjEwQUY2MDAwREJBRkRBRDZBQ0Y0QjdBQkUwNkY5MzlDMzQzNDMxRTFBRAorOjEwQUY3MDAwNkYyRjdCMUJGREIzRkExQTVFMDdERjEwQzc0Nzg1OEY2MworOjEwQUY4MDAwOUY2QTQ1N0VDOTAwRUYxOEVCMzJDMDlGOTk0Q0RGNkQ3OAorOjEwQUY5MDAwRDZCMUQxMjhBNzM5MTMwM0ZCNzM2OUZGOUJDN0U3MzlFMworOjEwQUZBMDAwMzVBMDRGQTA3RDkzNzNCMTFGNEIwNzMyMjY4MjVGOEM3MworOjEwQUZCMDAwRkNFN0JDREU4RkY5QTY4REY5MURBREU4M0Y4NzI3MzE5MAorOjEwQUZDMDAwM0E3Nzc1QTNCOTdEMDJDNkMxMUIyN0Y5MUM4MDQ5QzAxOQorOjEwQUZEMDAwREIwRUYyQUZEOTUwOEJCMDY3RjNDOTJGNkZGMEZDQUIyQgorOjEwQUZFMDAwOUZGMkMxRjFGMkJGN0YyNUY5NzcwREJFNjQzRjlFODNDQQorOjEwQUZGMDAwM0I2RDlGQjI5NEZCMzM3Njg2RjAzNzAwN0VCMTNEMkREQQorOjEwQjAwMDAwNzI1RDA0RTEzOTI3RjAyN0YxRDg2M0VFQTJGMzc4N0I3MworOjEwQjAxMDAwNUU0OEEyRjMwREE3NERFNEZDOUEzMUIxODNGNEM3NkJFRgorOjEwQjAyMDAwRkI2RjI0N0IyREY5MzI3NTZGMTJEOUVENENDREExRjg1MQorOjEwQjAzMDAwMjk1Rjc0NEIxMkMyMzM0RkMwRDMyRUVBODQzMzg0MUQ3MAorOjEwQjA0MDAwMjk1RUM3RkRCOENDNUMyRTRGOTlCOTI2NzFCNTE4RUJCNworOjEwQjA1MDAwQUMxQzYxQ0EzQjlDMTNGNDI3MzZEMTlERkI1NDNGM0Y4NworOjEwQjA2MDAwNEFGMjU0Qjc4QjhGRTc0QzBBOTREREFCRTM1RkU5NUY5QworOjEwQjA3MDAwQzk3QTAzQUMxQjk4OTE4MEJGQzdFNjcyM0I1OEY4RjhCOQorOjEwQjA4MDAwNTJBMkZCQkMxQTcxM0VDNDNBRUU1NzMwRTAwQkM0MUIwRgorOjEwQjA5MDAwRDA5MUY4RTAyNkU3MjJBMkRCQkM3NUNBMzc4OThFRTFBMQorOjEwQjBBMDAwMEFDQTFCNEFGRjJDN0VGQzcxNjI3RDNCNkRDMTUxNTg2MAorOjEwQjBCMDAwNjdEOEVCNEFGNUUzN0VEN0NFOEM4MDg5RjJFRTY1MTkyRQorOjEwQjBDMDAwOTQwNzcxNjU3MTdGRDEyNUZDQzU5OERDMDc0Nzk5NjBBRAorOjEwQjBEMDAwOUU0RkRDQTk5Q0RFOTFERjY4OTgxNzlFOTJFQjRCRThBRgorOjEwQjBFMDAwRTdGNThGRjNGOTc4RDNEQkMzQzMzMUVFOTFGNTYxMTI0NQorOjEwQjBGMDAwMUY5MTk1Qzk3M0Y0RkE3NDgyQTA0QjY0MTg5QjgzN0FFQworOjEwQjEwMDAwMDNFMjA5M0JFNUFGMUQzMDBGRTYxM0I2NUZGNzI0Q0YyRQorOjEwQjExMDAwMjdGMDczQTFBRkNBRTVERjM1NEZDQTBBOEVBMkZEQkY4MworOjEwQjEyMDAwRTJFMDMyNkUzRkY5M0FFM0YxRjFCQUIwOUJBRkNFQkU0NgorOjEwQjEzMDAwQjMwQ0UzRDg4NjVCRUQ3RTk0QkIwRDJGMjk3Mzg5QUZFQQorOjEwQjE0MDAwQzM1NjNDM0MwOEY4OUVDQjIxMzg0QzU0MEZDNTQyMUFEQworOjEwQjE1MDAwRDFBM0ExMjkxODQ5Q0NGNzMzNDhDRTFBQzBFRkMzMzg4MAorOjEwQjE2MDAwNjAxQUYyQjk5M0Y4M0VDMkY5OUVEQjNGOTk2RjQwM0RGOQorOjEwQjE3MDAwQTlGN0I3QTUzRTkwN0EwNkVEMUJGMkIzOTQ4Qjg2MUIxOAorOjEwQjE4MDAwQkE0QjkwQkU1RjU1QUZGNDk4Qjk5Q0Y3MDAxRTUwOEUzNQorOjEwQjE5MDAwQTREQ0E0QkVDOEU1NjVDRDRBNUYyNTNFNUYwMzcyQUY1RgorOjEwQjFBMDAwQTc3NzdDN0M4NjcwNjJCQzIyRjVGQkFBOUNFMEI3NzMxMworOjEwQjFCMDAwMTE0RTUzQjQ5NUJFN0QxNUZBQjhFMUM1RDUyNTg5QkVBQgorOjEwQjFDMDAwNUY5MkZBRDgyQUNFRDNCNDQ2NTIyMkZBN0QwNkRDQjM3NworOjEwQjFEMDAwNEYyREE3NkIxOEVENTFDQUYyQzRGOTk4RDVCOUQyQkU1QworOjEwQjFFMDAwRjZBQjc3NUE5REVCRUE1RkVGRTQ0NkRCODVGMkIzM0RDMQorOjEwQjFGMDAwODVCRUEzOTNGOUE5Rjg3MUJGMkZGODRERDI0NUM2Mjk5MgorOjEwQjIwMDAwQjg1RjgwRkQ5RjEyRjJCMzU5QzhFOTczRTJBQThCN0Y0MQorOjEwQjIxMDAwODhGRjdEQTZEMEZCQjhERjNGOTAxRDkzRUZGREIzRjIxMgorOjEwQjIyMDAwNjU3MjFFNjk0RkUzRTkyRkY3M0I3MDNEMzM0QTA3RUUyNQorOjEwQjIzMDAwRDc3RTUwQzQ4MTcxRkNGODgyRjBBN0VFQ0Q2NTc0NkRBNQorOjEwQjI0MDAwMzc0NzNGMjdCOTVBOTJDQTY4OUY2RDMzMEI2NEUxN0UzNgorOjEwQjI1MDAwRDkyQjU3NzA3OTA4RjQ5NkUwRjg1N0U2ODczMkYyNDYxMgorOjEwQjI2MDAwQzdGMkMyNzgxRkUzOTM1QThEODU3MTlGQUM3NkE3MzlEOAorOjEwQjI3MDAwQTJGRjhFNjcyNzdFNDgwOUZEQ0ZBNzVBQzMyQUYwRjk5RgorOjEwQjI4MDAwQjhGQ0QwNjFBNDY3NzgwMkZGNUUyRkZDM0QxQkVERkY4OAorOjEwQjI5MDAwODAyMzNEMUFGNTRCMjNFQjRFNDMzQzM3QTg1RDI1OThBMAorOjEwQjJBMDAwQzdEQ0UyMEVCRDhFRkQ0Rjk5QkEwQTc4QkQwNURGOUY1RgorOjEwQjJCMDAwM0EyOUYyQkUyNzQ1REVCN0QzMTJDREZGOEUzMzc2Q0VDNAorOjEwQjJDMDAwREQwNUM2RUI3NTJFNzQ5OTMyMzEwRTdDNkZERjNCM0Y4NgorOjEwQjJEMDAwN0IwOURFQkVFM0E1NzM3NzdDMUZCMUI1MjZFNUNFMUZFMworOjEwQjJFMDAwQzFCNURBQUEwNkY1RTdGRjlDNEM0REFDNjc0RjA5M0VBNQorOjEwQjJGMDAwRUFBQkE3NTk5OTk0MzBFRkJGMjc4RkYzNDE2M0RDRkU4NworOjEwQjMwMDAwRUY5RTNDMUZCRkRGRjc1RDE2REZGRjdENkY4MDczQjJERQorOjEwQjMxMDAwMjZFNzcxRkE3NDhBM0E5RkY4RTdEM0M0M0MzQkNEQUM3OAorOjEwQjMyMDAwNjQzM0MyQjMyRDk1RjZENzk5QzZDRjM3QUI3OUE0RDA4NQorOjEwQjMzMDAwOEZGQjkyOUQ0NUZDRkNGQ0RFNDcxNUIyMDMyN0NENUNEQworOjEwQjM0MDAwRkZDMERGQURENjhBOTgxRDQ1MzcwNUZEQzQxQTQ3MzhDMgorOjEwQjM1MDAwNkEwMkZENTFCMzJDMzU4QUU3NjdDMjdENkQxQ0NBNUE1QgorOjEwQjM2MDAwRDg0MUY1QTY3Mzg1N0Q5Q0Q3RjREQURGMzBFRjUxQTM4MQorOjEwQjM3MDAwMzFFQjM4NzhFRkI0N0Q3RTFBOUE4Nzg1REZCQTE3OEY2NAorOjEwQjM4MDAwQzA2MUQ5RDVFREEyMkU1MTlDRDcxNjk4QUU1RTRBRjk3MAorOjEwQjM5MDAwMzJCRkNFRjg1RENCREVCQ0EwMTVGOUFDM0E5REUzQkI2NQorOjEwQjNBMDAwRkE1RTdFNEVBRkVDRkY5MjkwREI3RUZDODZCQzBBRjAyQworOjEwQjNCMDAwRkU1MUUxRjYyNTdFMUU3N0ZFODRFNzUxQkYyREY3MDQ4RQorOjEwQjNDMDAwQjM2OEZDN0JDRjE5RjQ1QThGRDJGREY0OEY5MDJGOTc3RQorOjEwQjNEMDAwQTQ4QTczRDQ1ODgxQkU1RUNBOUZDN0VENEIyREVFMzc0OQorOjEwQjNFMDAwODE2QTNDNUZENjU1QjJCQzEwRjlCRkI3RTA3Nzk4Nzc1OQorOjEwQjNGMDAwM0I5MDQ0NzVCMUI1QjhFRkE0QUI2NzFCNjhERjY5RTA1QgorOjEwQjQwMDAwRkQyNjlGMDVGOUJDRTFBMjQyN0MzMkY3QzA2QjI3NTBCNAorOjEwQjQxMDAwQUYzNzY4RERDNDNGNzNBRDc2QTI0RkMzNDU4RDlFQjM5MQorOjEwQjQyMDAwMzZGMzU5RkQ3NzdBRUQ5RUMwNzA1QzVGRjhDMTcxMTlGMworOjEwQjQzMDAwQjQ2Rjk1MERGNzA5Q0Y0M0U5OUM4RkE1QTIxRUQ5OUQ0NgorOjEwQjQ0MDAwMUYxQThERkQzNkE1QTRERDg1RjFFMTA1MkIzRjk3QTlENworOjEwQjQ1MDAwRDFDMkVCOEU5OUY4RkU1OUYyMDlDQjRCMzVGMkMxODE3RQorOjEwQjQ2MDAwRDdGRjg2NzBDREI3ODZFODFDQ0IwNTczOUFFOERDREM4NQorOjEwQjQ3MDAwRUFGNEU4Njg0N0E5OUVGRUUzQkVENkI5Qjk1RUExMzdGMworOjEwQjQ4MDAwREVCM0YwRkE5Q0ZFRkNDRkU5QjAyNzhGRUJBRkY3NzI4QQorOjEwQjQ5MDAwQjgxQ0JENTdDMDZBRjZFMEY1NEFCOEMyN0JFRjE1ODkwMworOjEwQjRBMDAwNzYzOTZGQzc4RkQzMjhFNEU4QkRFMURDN0U4NTk3QTZBNworOjEwQjRCMDAwMjQzQzk3RTQ2RTIxOEY3QkYzMDJCNzIzQkVFNEZEQTcwMworOjEwQjRDMDAwMDUxQ0VFRkM0MDc1OUU4QkY0NjM0OEYwNkQzNDAzQzY5QQorOjEwQjREMDAwQUJGRTI1RkYxRDAzRDZEMjRCNzUyNTdERUIyQTExRjA1RgorOjEwQjRFMDAwQkExM0MzRDUxMjFCNzcxMThFMDdGRDAyRTRDN0JGNjJFMgorOjEwQjRGMDAwQTNFRkVGRDg3NEQwRDdBODlGOTdFNjMzRDRDRjMwNkY5RgorOjEwQjUwMDAwNjMxRTFGMzc5QTQxRkQ5MjY4MURBQzBERjQzNkYwRUZCMworOjEwQjUxMDAwRjlEMTNFQTJDQjlBNEFFMEQzNTFFMjVDN0U1RjhDQUY3OAorOjEwQjUyMDAwMjQzRkM1RjNEMTdENzlDQTQwRkJFMkY3RTE3Q0YxRkIxMgorOjEwQjUzMDAwRTI4QzBEMjY3QTEzQkY3RDhERUZEODQ2NjQ3MUJDODBGNgorOjEwQjU0MDAwRENCN0U2OTFGRDhENUVBRDk3M0I4OTY3QTkyRkRGNEI5OAorOjEwQjU1MDAwMzZGMjQ1QUE4MEYzMDdBMjVGMUY5RUM1Mzk1QUNFNjIxNAorOjEwQjU2MDAwNkUwNzY1QkNGMEI4RTg5RjIxRTgyRkFGRDJBRUM1RUZGQgorOjEwQjU3MDAwMEY2NDg4NzEzM0YyRDIyNDVEMUUxM0Y0Q0U0ODQ4RUY3NQorOjEwQjU4MDAwQUQ5Q0RFRDBFRjA5RUM1NzlERDQ3QjY3MTZEOEIzREJCQQorOjEwQjU5MDAwQzA0RkMyNzMyRkUxM0QyRkRFRUY5N0I3OThDOEVENzAxMworOjEwQjVBMDAwRTNEMjU0ODY3RUMyNEZGMjQ0REU2RjU0MkZERkJGMUJCRQorOjEwQjVCMDAwREE0QkZBNjgyRTAzQkRBMzVDOUU3RTk4MjNGMDgyM0U5MAorOjEwQjVDMDAwN0M0M0Q0MEYyOTU4Q0Y5MzQ5NkFDMDg3RTMwMUJFM0IxRgorOjEwQjVEMDAwRjM1QzMxN0NDN0NGNzcxMjFGODE1RkY4NEE5RUY4QkVCQgorOjEwQjVFMDAwQUY4Qzk1MjFCREVFN0NFQkNGQTk3N0Y4RjAxQzc0RkVGMworOjEwQjVGMDAwNURGMTQ3RjZEMEFCMzhDRUQ5RUZCRTRFNzFDMDQ5NEJBNgorOjEwQjYwMDAwQjRBNEREOUVFMEI5MjVGQUY4MjYyNUY2RkNBRTlGQTg4NQorOjEwQjYxMDAwNjFGQ0REOEJDRUFFQjM4RkNFMDZCRTlDREJBNUZBNzE4RQorOjEwQjYyMDAwQ0FCOUY3N0RGRUU2MThGNEFGQkJDQ0I0MEYwNUZFQzU3MgorOjEwQjYzMDAwM0EzQzE3OTQzNTcxN0ZGNEE0Qzk0OEZGMzNERjM2RDZGRQorOjEwQjY0MDAwNzU3NDBCNzk5NURGM0I0QjdEMjVGRDg2QzVDQ0NGRjUxOQorOjEwQjY1MDAwNTQzMjNGODdGREQ0OTI0NUY0QkRGMzdDMTYzQzhBRTcxMworOjEwQjY2MDAwQjA3RkJBNzQyQUY5RDM4QjU4ODg3RThGNjA1RTlCRjFDNQorOjEwQjY3MDAwM0NERUY4NzM3Q0UzQ0ZFRkM1MDQzRkUyMkZGRTFDREYxNgorOjEwQjY4MDAwQkU3QzdCNTU2MjNGMjMzNTlGRjNFMTE5OEJBODJGMThCMQorOjEwQjY5MDAwQzBDRkI4MjhGODU3RDYxNzM0Q0FGQTgyOTdCRkJDQkVCNQorOjEwQjZBMDAwQTAzMUFFQkUyMEU2OEZDOEZBODIyRjI4NEY2OENFRjdCMQorOjEwQjZCMDAwRDFGODM4OUVCRUNFRTBDQzg0QzQ3MDJCRjlEMkVGNDlDRAorOjEwQjZDMDAwMzE4QzJGQzc4OUNEOTM0NkNGMUJGMTNDOUY4NERGQUJENAorOjEwQjZEMDAwREJFOUZFOTk4NTg5RTc0OUNGRTdFQjZFOENBQjY3ODg5QworOjEwQjZFMDAwQkRDRkVCMTg2NDlDMkZGOUEyRjFBMjk3RUNCMTZDRjdENworOjEwQjZGMDAwRkQwRTQzREY3Qjc5RjQzQ0ZFRkI3Qzk5QTc5NzcyRjA0QgorOjEwQjcwMDAwODFDMkFDNUVDQTlCQUQxNzdBRDEzRjFDRkRERjBGRDA2MgorOjEwQjcxMDAwQUY0MjM5QkNEMUY3NEEzNzgwMzhFRkZCRDc5NDY4NDU0MAorOjEwQjcyMDAwMzEzOTg5NUYwN0YwRDM2N0ZBRUZFMDg3RTQ4QjczNzlFQgorOjEwQjczMDAwRkRDQzRGREY0OTBBM0VCRkYzQkI5M0QyNzE5RkY1REZDQgorOjEwQjc0MDAwRUZBQjMyN0NGRkQ2Rjc3REJDNDVGQTczNzY4MzVENjYzRQorOjEwQjc1MDAwNzE3NjdCREVCRUQ3Qzk1RjlCNkYwREQyNzc3ODFGQkQzOAorOjEwQjc2MDAwRkM1REIyRDcwQjU5RDA4REZDN0RGRUU1MkIwQTQyRkY2NAorOjEwQjc3MDAwMDM3QjJERTFCOTI1N0NCNzk5RkJFOTRFRjIzMzY2MEFDQworOjEwQjc4MDAwNzg2RTM5QzBGRDQ1OTMzNTYwQTY3OTAyQ0NFNzcwNTNEOQorOjEwQjc5MDAwMjhDRUUxMDVBNTg5RTdGMDVEREYwNzdGMjk5RERGMzEzMAorOjEwQjdBMDAwNEVDMEFGRTBGQjgwREZFQkM1OTVDRDBENzkxMDZFNzkxMworOjEwQjdCMDAwQUUwMDcwOTMwN0FGQ0REN0Y4N0Q3ODFEQUYwNDM1QTZFNgorOjEwQjdDMDAwRkJERTc0MzI2QkNBQzNGRTI2NkJCNzJBQ0UzQkEzRjNGMworOjEwQjdEMDAwRTM5MzYyRjhBMjc2QUE2OEI3REM3QUUxQ0UwNTc4REY1NworOjEwQjdFMDAwQ0VDRjI3QjYwODM4MTZFNjhCRUZBOEFEQ0M4QUVCNEU0NQorOjEwQjdGMDAwQjI0NzNGQTU3RDQwNzEwRDRGRTBGRTc3Qjg4OEQ3RUQ4OQorOjEwQjgwMDAwMjZFMzc5MEEzMEFGREQ3RTJFOEM4Qjc1MzAwNzlEMTNEMQorOjEwQjgxMDAwNjA3MzVDODg2MjFDQTJGQjFEODk3QkYyNURCQURGOTFCQworOjEwQjgyMDAwNjA1MTlFOUYxQUU4NzlEQ0VGNEM2NDBBRjg5QTg1N0U5NQorOjEwQjgzMDAwRjNFMjc5ODdDNTc0QUUwM0U5Qjc4NzUzMTdEMjM5RTRDOQorOjEwQjg0MDAwMkVGQjMyREE5RkRFOTIzNjg1RjYyRkREODg3OEFDNTNGOAorOjEwQjg1MDAwOUZBMjNCOTcwMTlFQkI4MkM2RjMxOEIyRTcxOERCREVCRQorOjEwQjg2MDAwOTBCMTZENjUyN0E5M0U0QTg5MDYzRDk3QjI2MkU3NEVDMQorOjEwQjg3MDAwOUE4NUJFQjgzNTk5QzM3NTZCMzI4RkQ3NTZFNzFCQkYxMworOjEwQjg4MDAwMTMwRENBREY3RkM5RTRFNzM2RjRCOEFENTZBQ0I3QzBENAorOjEwQjg5MDAwRjgzRjlGQzdGRjdGMDQ0QTQzNUNDODdGMUZBNjZDN0NBQworOjEwQjhBMDAwNjBDOEEzQTNGMDc3NEY1NEZGMkFBMDUzNkJBQTZGQTVEQgorOjEwQjhCMDAwODZGRURCRURFMjc3QzJCNDBFQUE2M0Q4NzY2NzA2RDVDMgorOjEwQjhDMDAwODlCNkRBMUM5NTk4RjcwQ0U3RjM3QzRGQTNBOEY3MDcyNQorOjEwQjhEMDAwOEFENEVFODJGN0I2Q0RDQ0E1N0VDRUFBNUVDQTk3RjYwNAorOjEwQjhFMDAwQUU2NkU0MUZGNUUzRDMyRjgwRkYwMURGNEY2MjFCQ0Y2RAorOjEwQjhGMDAwOTM5OEVGRUZDMkVGODhCRDAxOTVFQTc0RTVGMzFERjg2OAorOjEwQjkwMDAwMUNFMDU0MDQ1RkUwRkRGMTE1QjFERjcxMkEzRTUwNzY3MgorOjEwQjkxMDAwMDhDRkMzNjQyMUM1Q0ZEMzhGM0VFMkY3NTlDMjJGNkY0MgorOjEwQjkyMDAwM0M1MDc5RjM2ODgwQUJCODZCMjRCMUYxRTAwMzYyQkY5RgorOjEwQjkzMDAwQzU5OTI0RjY4REY5RjlCREYxRkQwNzYzN0Y2OEE3MUM1MQorOjEwQjk0MDAwRjNGRDZCMUQzRTMyNDE5QzhERUY0RDQ4QTE3NTFGMTdENQorOjEwQjk1MDAwRjkyNjI2RjRDMzk4MzhGOUJCMkUyNjBGRjRCQzRDQjQ1NAorOjEwQjk2MDAwMUI0NTdEMUQ5RTYxMTFBOEUwRTkwQ0VBRTdFNEYyRTFDOAorOjEwQjk3MDAwNjdGMjhGQ0JFREI1MkNGNjg3RTM1NEM1QzYyNTNEMzU3MAorOjEwQjk4MDAwMzFGNjM4MjY4N0IwQzQ3MkFCQkZCOTBFRkExRDk5QzEyMworOjEwQjk5MDAwRjdEN0M3NjhEMTgzMjhFRkQ3ODk2Qjk5QjhCMkI5RURDQgorOjEwQjlBMDAwODRERjM1MkIwMzJBQTMxMjg4OTBCQTFFREE2M0FENURCQgorOjEwQjlCMDAwNTlDOERGRTNBQ0REMkI1RDMwQ0UzNTczRUVGNjYwQkJFRQorOjEwQjlDMDAwQTRBMDk4RjgwREZDMkYzQTc3MjhDMzZFOEFGMEVGMjhEMAorOjEwQjlEMDAwQ0JGQzI4NDdCM0U3RjA3Q0VDQUMzOTU2QUEzQjlFQTVEQworOjEwQjlFMDAwRjFGM0ExOTgxNjJBQkMwRDlFREY1NkNERjNDMEQ4QUU1OAorOjEwQjlGMDAwRDZFNTU5RTRCRUM3NzE4ODUzNzYyNzg4Mzc0QjBBQjgxNQorOjEwQkEwMDAwNUQ5NEVGMzc4QUZBMUZGOUJDMDgwRjhBQzYzQzU5QzEwQQorOjEwQkExMDAwRTQ4RkYyQzk5RUYwRkRERDMzNTJDRjBDNjU0M0UzN0UyNworOjEwQkEyMDAwNkZFNjdDM0VFRTVGNTZCRTMxOTA5RTMwM0UxNzdBNjJFNgorOjEwQkEzMDAwNTZFMDExMzNGOUU5NDI1RjQ4QkQxQzE0NzU0RDVERTJEMworOjEwQkE0MDAwNUM5Nzc3Mjc3MEJDQkY1REI5OThGNEM1QURBQzg5RjQzRAorOjEwQkE1MDAwRjk2RDJDNkM0NjdDRjdFOUZGMjkzQUJGMDZFNjk5MTU4QgorOjEwQkE2MDAwMzRGQTM5QjNFN0M0RkIzRDlDNUZFNUJDQjc4NzhDQ0ZBNAorOjEwQkE3MDAwNjc0QUZGNzU4QUQxN0ZBREZFQ0UxNzE5NjQxN0IzOUY1MQorOjEwQkE4MDAwQUVCRjM0Mjg1NkJGRDQxODU3QkZENDIwRUE5NzFBRjc1MAorOjEwQkE5MDAwMkQzOUUyRDJENTJGMzUxRUUwRjU0QjBERkIyRTU3QkZDOQorOjEwQkFBMDAwRDQ0QkZCNDhDN0NEOTE4M0I4QkY3MjdDMzE4ODA0QzBBQQorOjEwQkFCMDAwNzk0OEQ0QkIxQ0M2N0E5N0YyMTg1RkE2Q0VFNDc5NTZCMworOjEwQkFDMDAwNjA1RkRBMkZDOTczQTRGOEQxNUY2RjMzOTU1MzVFQjYwOAorOjEwQkFEMDAwMkQyREQ1QUZDRjgzQUU1OTE5OUFBNENGQzdDQTdBQTU1OQorOjEwQkFFMDAwRTMwM0M0QjdDMzBCQjhGRkJBNTFFMTc5RjFGMEVENTZFNworOjEwQkFGMDAwOEFFNzVDQzU0MUMzM0U4NDRCNjUyNzMwQkZGODExRkEyNQorOjEwQkIwMDAwNTlBM0E5M0ZFNTNENzAxRjZGMjQ1QzIzMEFBRkIzRUYzMworOjEwQkIxMDAwN0IxRkJGM0JDMjdDNjQ5QzNFNzI2NUY5NjkxRkMwOTU2OAorOjEwQkIyMDAwN0UzNUU1RjNFNzFDMjhEQjQxRkFDNjZFRjNFM0VGMjIyRQorOjEwQkIzMDAwQ0FGMUU3ODRCNjY5NTg0N0Q0Nzg2MDlCMzZERjFFRTNDNAorOjEwQkI0MDAwQkJDQTAyQzFBRjI5MkMwNUY5QjUyRkJGQjcyNzg5RjJBRgorOjEwQkI1MDAwN0IxRkQ5ODM5MzBBRTBGRDNBNEI3NDM4MzNGMjMzREQwRgorOjEwQkI2MDAwMUZDOEFFMkQxMkZDNjI5RTEwQkM3RDAxQzA3M0ZFNEQzRAorOjEwQkI3MDAwMEJDRjczRERDNzQ4NUU5RkRGOUY0MUY5NDk2RDI2MjNEOAorOjEwQkI4MDAwRkJEMjUyQzlGOEVGQzA2Q0UzREYwQjlDQ0VFMEU3MThBNAorOjEwQkI5MDAwQjVDQzYwNjQwNzdCMzIyNzEzRkQxNkIzQzg1MTNDQTdCMAorOjEwQkJBMDAwQTg2NkFCRDk3MDFFRDEzRDNCOENFRDNBRDY0MUY2QTZDNgorOjEwQkJCMDAwNkU1NzNGN0UyNkJEMjVGNTYzM0RGM0E5NjZEQzA3RTg5OQorOjEwQkJDMDAwMzRCRUNGMDYxQkY1NjM5OUIwMDcyMzY3NEQ2Q0M2N0E2OAorOjEwQkJEMDAwOEQ5MUE2QTA0QUY2RjczRTdGRUU0QzhBOUZBQkI5MUQyOQorOjEwQkJFMDAwNjU0RkQzRjk1N0U3NTMzRjUxQjk5QzczN0QzQzNBQTY1MworOjEwQkJGMDAwMzUwRDc2NjlCNEYwQUY2RUQwRjhFRjJBNDg3RjY5QjQ5RQorOjEwQkMwMDAwRjg5RDg1QzNBNjAzMkFGRDc2OEY4MDY3OTQ3ODRGRkE0NgorOjEwQkMxMDAwNjk1MjVGRjdEMTczMkNFODUyRTBGQjA3MjU1RDhCNTgyMgorOjEwQkMyMDAwMTFEMjE1QzYyNzc5NTAzMEMwQzlBNEYxRTlGNzFBQUU3MAorOjEwQkMzMDAwMTNGMzAxRERGOUY5NzcyNjZCMDRGOUE4NTU2OTIyM0Q2NAorOjEwQkM0MDAwNkQ2NTQyNUYyQkExNjY3Q0Y5MTdFMTMwRTlFRDZCNTgxOQorOjEwQkM1MDAwRDMyREY4N0I5RkUzQUM1RDI5RTQ5N0RBNDM2QjBCNUM1MworOjEwQkM2MDAwMzEzRTY5NjZEMTgyREQ4QTgxNUZFOEY5RDk4QzM3MTI2RAorOjEwQkM3MDAwRjI4QkI0MkJEMTc3QjlCRjMxOEQ4MTFGMDhGMzA2N0VDQgorOjEwQkM4MDAwQ0ZGREEwQzMwQThGRjNDMDFGM0M4QzcxREUxQkE2QTk5OQorOjEwQkM5MDAwQzQwRjUzNjExOUQ4NkY5MkMzNDhFNzFCM0RDNkY2NTREMQorOjEwQkNBMDAwNUYzRjNFNTBGNUJGNUYwMTEyQTcyMTNDRDM4NjFBRkJEMAorOjEwQkNCMDAwMDVBNDdFNjM0NkZENTZDOEJFRTA3NUU1QUI4RjdFMEJERQorOjEwQkNDMDAwRTNGRjk0RTU2QzI4RkEzMUUwMzlGQTEzRkQxRUU5NzNCRAorOjEwQkNEMDAwMDUwM0VFOTMzQzU3OTA2MDlGRTRCQ0M4Rjc1RUNCQkE3NworOjEwQkNFMDAwMTdFRTUyRkFGMzREQ0Y5MUU1QUE0N0M3NUY5MjlGNUZENworOjEwQkNGMDAwMTQ3NTE1Q0EyRkM1N0VFQzI4OUVGNzhCRDk3OUNFMzdERgorOjEwQkQwMDAwMTVBMjc1MkRGMjVEMjY3RTdGMjJGODQ1RkNCRUM4RjU5MgorOjEwQkQxMDAwRkI2QzUxRkNGRDlDMzIzMUNFQjVDODNGRTUzMUJCMUVGQQorOjEwQkQyMDAwMzVEOTdEOTYyMkU0MTM3RjlCQUFGNkY3RTdERDk5M0U4RAorOjEwQkQzMDAwRTI5NzkxMjY2OUU3RkQ1OThDRUM3QzQ3QjM4NkYwRUZEQQorOjEwQkQ0MDAwMUY5MzFCQjIxQkY4RTMxREFFNEY4MDNGMjgyRkQ1Q0ZBQQorOjEwQkQ1MDAwM0UxQTlGQzdGMThGQTRFMzMxRTE0N0RGQzg3QzE0NDc0NworOjEwQkQ2MDAwNEMxMTdFNzRCNDkwRjM0Rjk1RkQ1NjBEREY3RkFEODg3NgorOjEwQkQ3MDAwRTcwOTI2RTIwNjIyN0RFRjY5QjQ4QjU1NTYyMzFGQzRERQorOjEwQkQ4MDAwRjMxN0NDNjhEMkNGMUJDRjZGMDNGMUNEMjBFNDFCNjkzMgorOjEwQkQ5MDAwMTdCMzJFQ0YzNzlGMEIzRjIzMDFERjdDNUUzMDdBNjBENQorOjEwQkRBMDAwQkU4OUU3MTdBOTU3NzZEQjFDNTU3OEE2NzA2MzhENDJDQworOjEwQkRCMDAwRkE3OEU0OUI4MzlCQjE3RDQ1N0QyMUQ1QkRFQ0NFRjAyNworOjEwQkRDMDAwMUZBMkU3NERGQ0Y5QThBRTgwOEE3NTMxQzVDQkM0RjMzQworOjEwQkREMDAwQzI2MDE1QjYxQjk3RjM3RDg5RDFDNzc5RERDQ0UwRkIzNgorOjEwQkRFMDAwRjhGM0IyNTU0RDg3RjBCQkI4QzYzMDdGRkZDNTRGNUI0NworOjEwQkRGMDAwRTk3QkExNDhBQjc4QkZCMkJEMEFEQjhENkRGQ0ZERDNGQQorOjEwQkUwMDAwQjhCRjM0MDJFQkREMjJDRDc4N0ZEOEJBNDIzRjBGNEI2QQorOjEwQkUxMDAwQjk1RjNCNUVGMEU5NkU2NUNGMjE3QUFGOURCRkI3RThCMQorOjEwQkUyMDAwQTgzNTk5N0U2NzUwRjhBRDM3ODg3NThFREZDQUQ3RTk5NworOjEwQkUzMDAwRkNFMDI2RkFEREQxMDVCRDYxRjI5RjNFMzZENTU1OTA3NgorOjEwQkU0MDAwREUxOTIwRkVBQzU0REFGM0YwN0EyM0VBMTMxNUU5MDc4MQorOjEwQkU1MDAwN0M1REM0RjcxRkI3QzMxNDY1ODM3OEZFNDJFRURCNjFENworOjEwQkU2MDAwMUQ4MUJFNkVBMDZDMTBCN0ZCQjI5RjNCOTM3RkQ3QzUwMAorOjEwQkU3MDAwMUU0QkE1QkNBRkRDNTc4QzZFNjIwQUNBMTlBRTUxRjhENgorOjEwQkU4MDAwMDEwOUY3MTk2RjJDNkVBMkZEQzUxQjA3QzlGREM1NkUxMAorOjEwQkU5MDAwMERDRjc1MkZCQkY0RTdDOTg5RjIyQjYzQzVCQzlGODgxMgorOjEwQkVBMDAwQkEwODc5QkYyNjUyNDhCRjIzQjYxQjk5ODRCRUM3N0UwNQorOjEwQkVCMDAwRjIzN0Q0MTZFNzk0MzNGMTFERDhFRTQyREU5RTNDRTgwQgorOjEwQkVDMDAwODkxRkI2RTUwMTdFNEQ0RDFBOUVFQkM2MEExNEZBMEU4NworOjEwQkVEMDAwRUU1RkJBNTgzNDNEQUQzRkZDMzc2QTJDNkFFMURGQjEwMgorOjEwQkVFMDAwMTFGQzBCOUIyRERCRjlGNzg4NUMyRkNEOTI2QTY3REM4OAorOjEwQkVGMDAwMTA5MkQzNUIwNTlENkUxOTI0RjI5MjIzRDk0OEQ0Mzc1MgorOjEwQkYwMDAwQjMwNERENkVCMzgyREY0QTdBQURERDFDMjdGRkIzMDdEMQorOjEwQkYxMDAwQTFGREQ4MzJBMEZGNkM3QzFFQTcxRjZBQzRCQzBCODU5NAorOjEwQkYyMDAwREZCQzE4N0ZBRjU0QzVGM0U2QjlGRkZDQzkxNkVFMzc4NgorOjEwQkYzMDAwREZDMzNBMjg4Rjc4RkUzMUVFMkZENkMzRjI5MDVGRkEzNgorOjEwQkY0MDAwRkRBRUQ3NEU2M0JCQkUyM0ZFNzc2NEY5RUYxMEY2RkI2MAorOjEwQkY1MDAwOURENjUyOUU5RjNEQkZBNUJFMDJGMzczMzU5QkRGQTRDNQorOjEwQkY2MDAwM0M3MDhERDQxNzExQTNCRTAwMDc4M0VCOEI0RDU3NTI0NQorOjEwQkY3MDAwNUVDNzY0RTVCRkEzMzkxMkY0MDVENjk3OENDNEJBNTFFNQorOjEwQkY4MDAwMTg3RkI4Mzg4NzY3MzVCRUMyQ0ZERkY5RUUyMEIyMzdFOQorOjEwQkY5MDAwNTNBOEFFOTRDNjUzNjkzRkY3Q0Q4MDJGNDYxRjY5MzcyQgorOjEwQkZBMDAwRTJGNTQ1OTlDQ0Q3MENDRUE0N0M5NkQ0MUY2NThDREJFQQorOjEwQkZCMDAwOEI3OEZGRTgxMTQ5NEYxMUY3NDgzRkEzMENGRDBDRTBDNworOjEwQkZDMDAwOEYyRTkzM0Q2MjMyRTlGRDhBMDhDOTIxQzQ4REQzNkM1RQorOjEwQkZEMDAwNDVDODNBREM5RjFBNzlGQjI4QUJBMDNGOEJBM0VGMjYxQworOjEwQkZFMDAwQTJFRkMwRjE5M0YxNzkxQ0ZENjVGQzUyMjFFODdGM0I4MworOjEwQkZGMDAwMEI1MDVDQjQ1N0QwRkZFRDc3RjlFRkJEQ0RCMjJGMjNENgorOjEwQzAwMDAwRkU3QkY3RjdEQ0RGOTRGMUQzRDc4RjlCMDJFQTNGMTI3OAorOjEwQzAxMDAwMzdGNUQxREIwNjdFNjQwQUZFMUVDNkQ0MjE4RkUyN0U5MAorOjEwQzAyMDAwNzhBNzhERkZBRUI1QzJFOUVCQkVGRDc4ODEzRUFGRjhEMworOjEwQzAzMDAwMzZGRTdFOEJFRTc3MjU5QUE3MjY1OTcxMUZCMEQ5Q0M5NAorOjEwQzA0MDAwRTM4QTk5RDNERUFCOThBQkQzMUI4NTU5OTUyRjBEMUE5NAorOjEwQzA1MDAwOERGNEU4RkFGNjFGMzBDRTc4NUQ5Q0UzN0FDMDQ1RjRBMworOjEwQzA2MDAwQkVEMEM1RUY1RkQ4N0E5NTNGMENCN0NGOThDNTc5NDY1QgorOjEwQzA3MDAwNEFEMzQyMkM4MTkyNzAyQzE0QkZGN0YyNTlDQTJCQjRDOAorOjEwQzA4MDAwN0YzQzIzMjM3NDBDRTk3MENGMUI3QjI5NUY1OUM3QkEwRgorOjEwQzA5MDAwRjhFRjAyOEI3MTA3Q0U0Qjg2NDk3RjU5NUVFNUY2QjAwQgorOjEwQzBBMDAwNTc0OUY2RjNFRjg2QzMyNUZBRkRBNDYzM0VBRTY3Qzc5MgorOjEwQzBCMDAwRTUwNzhGRTMzQ0QyREVDNUQ3MTU5QzVDNzIyMzdERDdBNAorOjEwQzBDMDAwRjkxNzE2NDhDN0ZENEM0NUUzQkZERjFDM0YyRkQ2MTFCQgorOjEwQzBEMDAwQjRFOEYyRDkyNzZEODlCRjMzM0QzNTg4RTcwMzhBMTA2QworOjEwQzBFMDAwNDc1ODA3OTExQkY4MDBGMUY3ODk4ODAzM0YxMUZCNUE2NQorOjEwQzBGMDAwOUZBNEYxN0RBRTlFQkVGRUZDQUFGOTg0N0UxNkZCNjA3NQorOjEwQzEwMDAwOUY2NDFBRTM0N0Q5Q0YyMkFFMUZBRUIwMDY1Qjc0RjQyQQorOjEwQzExMDAwRjQ2RDRBNkE4QTUwMUQ5NUE4MUI1OUM2NzhCQ0I0M0Y3NQorOjEwQzEyMDAwQzM3MDBFNDE4NkFGQjJDODg3RkIxNEM1MDEwQkZFQkVCQgorOjEwQzEzMDAwNzdFRjdFNkU4NzcxRkYxOUY3ODcyMzM5QTEyRjEwRUVGNQorOjEwQzE0MDAwMDYxRjBCRTBGRTJBRjM3NTVCNkVDMTdENDZGMTdERUJBOQorOjEwQzE1MDAwNzlDMTJGRTc2REZDMkFFMUZBNkZDM0FGQjcyRTAwODBEQgorOjEwQzE2MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkQ1N0RDMAorOjEwQzE3MDAwMDk3ODU0RDVEOUYwQjk3MzI3MzMxMzMyMTMyNjFCODRBOQorOjEwQzE4MDAwMkQ0RTE2QjI5MDZEQjI2MUQ4MjcwOTIwQjg2MEMyNTIwOAorOjEwQzE5MDAwNTFCNjYxREZCMjA5RDg4RkI2RjZDRjYwMTA5MDQ3NUIxOQorOjEwQzFBMDAwQThCNkM1Q0ZFNTE5MTBBODU2MkMxMTgzNDYwRDFBOTREMAorOjEwQzFCMDAwMjI1ODVCNDcwNDQ1NEI3NUE0Q0EyMjIxODk2MDJERjY5RAorOjEwQzFDMDAwQTNFNTdGREZGNzlDOTM5OTdCMzM2MUZCRDVFN0ZGQzgzRAorOjEwQzFEMDAwRjM3MDcyRUUzREY3MkNFRjc5RjdGM0JFMjc1MThFOEE5QworOjEwQzFFMDAwMjQ0NzFDNjNFRDc3RkI0RDRDNjUyQzRBRDYyQkEwOUU1MworOjEwQzFGMDAwOENGNUYyMjQ0NzExRDRBN0M4RjdBMkZFMTBBRkMzM0ZCNQorOjEwQzIwMDAwMDNFQkM1RDgxQ0ZDQ0QwMUE1QzVEQUEyRTZDMEVGRUI1NworOjEwQzIxMDAwQzI1QUZERTlGNDlFNUQ0QTYyNEM1MTk5ODc0NTQzMjUxNworOjEwQzIyMDAwOUQzOUNBNkRGODc0QjhGRDQ0MjYxNEUxRjAxRUZBQTlEMAorOjEwQzIzMDAwMzE1OUQ3MjlCOUQ0QkNEQzAyRkRDRDEwRkRCMUZFMzY5MQorOjEwQzI0MDAwMjNGNjNGOUQ3N0M1NjYzNDFGRkM1Njg5NjQ2Q0E2ODUyRQorOjEwQzI1MDAwQURFOTA3RUY2NzM1RjczNkMxMENEOEEyNDg0RkFBM0RDNAorOjEwQzI2MDAwMEI1QjhDQjY5RjgwNzExNTRGODQ3QTI5MDJGQUM2N0ZDQQorOjEwQzI3MDAwQTNCQTk2OEMxOUQ5MDkzOTNGNUE4Nzg3MzE1Q0Y3MDBFMAorOjEwQzI4MDAwMUZBRDZCN0Q0OTQ3QzI3RjE3MzJENkIxQzc2Q0RGMDI0NQorOjEwQzI5MDAwRTM1NDM1QkY3NTU0ODE3NTU1QzlGNTM1NkFENzk3RUJBOQorOjEwQzJBMDAwNTBFODdCQzYyQ0RFQ0YyRDhDRERDRTE0RDYxM0ZBNjk3OAorOjEwQzJCMDAwQjJCQTczMTE1RTU1MTYzRkNEMTM3QTM0OTU2N0MzNjhEMQorOjEwQzJDMDAwNkI4NzQ3RDFGQTdCQzNGNzMwOUYxN0VCNUNFQ0VGNjFDQworOjEwQzJEMDAwMDE3ODJFQjNGM0Y1OEY1MTJCQ0I0Q0IxOEM5RDlCQzdCRQorOjEwQzJFMDAwRUM2Njc4QjRFQ0UwREM3QTBCRDQ5NzNEQzBFQzdDNzQ1RgorOjEwQzJGMDAwOTc4MTBEODZGRTA1QkNCQTlCNUY1Q0I5ODEzOTJDQTI4MworOjEwQzMwMDAwOEVDMzRFRURDMTFDRTk4MTdBMUY3N0I0QTYwRUZEMzJCMworOjEwQzMxMDAwOUNDNzUyRDE2RkJGNDU3RDM1REYwRkE4NEREMkI0QkY0QQorOjEwQzMyMDAwNjFFNTIwQ0RGQjQ0NEZCRUE2OUVCQzZFQThBNkZEQzAxNQorOjEwQzMzMDAwMERBNTlBN0FEQUE2OUIzNUVERjM1ODUyNEYwNkYwQUY2OQorOjEwQzM0MDAwMzlBMDMyMkY4MDM2QzMzQjUxRjMzRUYzRTlCQjM0REZEMworOjEwQzM1MDAwOUY2NEI1QkYxOTBFRUQxQUMzMjM3MzE4RTA1MTdENzhBMQorOjEwQzM2MDAwRTQxNjJDOTlDN0U1Q0IwMkY4Q0MxM0VCQzg2RTk4QTM2MgorOjEwQzM3MDAwRTlFNzRDRTREODAzQjhBRkYzN0MwQjZFNjU4MDU3Qjk5RQorOjEwQzM4MDAwNEQ0QjM0RkQyRTU1MkJGOUJFNkQwODNCRUU4N0VGNkEwMQorOjEwQzM5MDAwRTEwN0UxOTlDRjNBRjZGNzgzRjk1NTdCMTU2NzBCQkNCNgorOjEwQzNBMDAwNUVCODg5QkY5N0RGMkQ2RURBNENERjJERjY2QTlGMkZCRQorOjEwQzNCMDAwN0Q1QTVCRjc5NEIyRjQ1QTJCNjNDQjFEQjY1OEMyODdGMworOjEwQzNDMDAwQkVBQ0VGQTUyMEJBMEFFMDAxMzQ4MkYxQ0UzREFFN0FEMAorOjEwQzNEMDAwQ0Q4OTA4OUZENERGMEUyN0Y4ODQzMUFGQTNFQjdFOUQ3MworOjEwQzNFMDAwNjNDQ0Q5ODJFRDc3RDg5QzFFQTgyRjNDMzg5N0U2NjNBMgorOjEwQzNGMDAwOEVEN0UyNDFCODQzOEIwNzExRTk1QTNDQjAzOUI1RkJGRgorOjEwQzQwMDAwREVCMzU4QkJFRjdBRjg0NkI5MDY1RDE2QkUzMUUzQjQyOQorOjEwQzQxMDAwNzgyMUUxNUEwQzNGREYyNTVDOUZEMEMxQjM2MDlGQUIxMAorOjEwQzQyMDAwREU0QTcwNjI5MzJEODMxMTdFN0NCRTY2NTZBRTIyOUZEQgorOjEwQzQzMDAwNjNCMUMwNjdFMEI5OTM3N0MxQ0VEQUFEMUUwM0UwQ0YzOAorOjEwQzQ0MDAwNzMwRUM1NzhDMjEyRTgyN0NGRDhCMjE3RDdCMzQ2RjExQQorOjEwQzQ1MDAwMzBGQzJFOUM3OUUzOTE1RkQ0MTdCNzI0QjRDMEJFRTRCRQorOjEwQzQ2MDAwNUI2QTcxRTdEODE3RDZGMkU3OTFFRTJCNEQyRDM5RjhCQworOjEwQzQ3MDAwNUVGNkY3ODVENTREQ0Y1Qjk1NzcxNjMwNTgyRjMzQjZERQorOjEwQzQ4MDAwRTQxMDNGQjQzMDFBNUZDMjcxNzAwRjhFQzc0QjU5MzkzOAorOjEwQzQ5MDAwRjFFMTE3MDUzRTdGRkVEMTIyODJFMzAyNTZCQkRGMDVBNAorOjEwQzRBMDAwRTM5REY5OThDMzc3MzFGMzUwQkJGOTFCQjQ3MEU4MDJGMAorOjEwQzRCMDAwM0YxRERDMDA2RDFDMzg2RThENThGNzEyQzZCQzg2RTQzQgorOjEwQzRDMDAwQUVGMDU0OUE5NTE2NUIwRTgyQTE1OUYyNkRGN0E1MDI1MworOjEwQzREMDAwOEU3NjA4Q0ZBMUFDRjMxRkYxNkYwOTVGNjhBMDA0RjM1QgorOjEwQzRFMDAwMjcxQ0NGREUyQjMwOUU4NEE3RTQ1QjcyMUMzM0FCNTUzOAorOjEwQzRGMDAwRTM5MTBFNzQ3QzhDQTU2QkY3MDkzNjhFNjE3REIwQTgzNAorOjEwQzUwMDAwQkQwMjNDRDQxMjJEMDZFQjg1RkRFMEU0MTlCQjUxOEMzNQorOjEwQzUxMDAwQzNFNkI4RTMxMTRFMTZCNjgxRjY2RkJERTI1Q0E3QzI2MgorOjEwQzUyMDAwMzhFQTBEODlGNTBDRTA1OTYwNzdBOUI4NUY0NUNDMzczQQorOjEwQzUzMDAwMEQ5RjE3NUIxQUVBOEREMEQ1MERFQ0EyRkQwNEM4MTMzMAorOjEwQzU0MDAwRDY3QjdCRDVBNTk4QzAzQTE0QjkyRThGQzI4QzUwMUZDQworOjEwQzU1MDAwMjFFQTkzM0M4QUZGQjE0NDVDQ0Y1QkRGRTJCODIzNDQxRAorOjEwQzU2MDAwMzkwOTRCRDgzRjU4RTZERkZGMEExRjBGNTcxQzAzNzBFRAorOjEwQzU3MDAwQkM4OUFGQTRDNTIxREVBQzUxNkE5OTZFN0U0NzVGODU0OAorOjEwQzU4MDAwN0U1NDQzNDcwQ0I2MUJDM0RDNDYyRTc3QkQzODQ5RjZCNAorOjEwQzU5MDAwOTZFMkE3NzlGRjg4QjlFRUM3NTJDQUI3NkFENjMwNzY1NQorOjEwQzVBMDAwMUFENEFCMUI0MTZFNDU2MjE5REVBMjQyQzk5QTc0RjBERgorOjEwQzVCMDAwNjRDNkUzNTgzN0MwNEExMEJGOTc2MjVERUU3QjYyRTAwNQorOjEwQzVDMDAwM0RENUQ1QUVGNTU1QjA4NjNFRDE1Nzk2RUYxQjEzRUQ1MAorOjEwQzVEMDAwMzQ1RjkwN0ZBOUZDM0RFNzZGOEIwNEJDMTY0OUI5RTUzOQorOjEwQzVFMDAwRDVDRUVGMThGRUQyODdCMTNGOUEwMDI2Rjk0ODQ3MTZGQworOjEwQzVGMDAwOEZBMTI3QTgwNTg5NDA5N0Q4MkU4N0U1NjBGRjQwNTc2RgorOjEwQzYwMDAwOEU0NEU4QkY1NzM0RDBBMTEyNEM3N0JDQkQ3Q0RGODU4NworOjEwQzYxMDAwRUU3NEVCNjdCNUIwQjk0MzAwREVCNjQyOTMxQjU4RUUzQgorOjEwQzYyMDAwRENFMEY1NUUwNTNDQTQxRTMxMEZEQjQyRjkyRjg3ODM2OQorOjEwQzYzMDAwRDY1REQ1RTNEODA3MkU3QzVERTg0QjQwRjkyRkY3QTlFRQorOjEwQzY0MDAwQzZDNERDMERBOEI3MzRDNEQxQjhGMkY5RTg0NDgzRDAyRAorOjEwQzY1MDAwMjcwMDFGQUYwMjRFRERFRjQzMEFFOTQzNzIxRkFFNTZCQgorOjEwQzY2MDAwMUZDQTQ1MUMyRjBBQzBFRkU2QUVGMDlFOTAxODE3MDRCMworOjEwQzY3MDAwNEYwNkYwQ0NENkMwNUJGQjVFQzA1QkMyRTM2QzkxNkYzMworOjEwQzY4MDAwM0JFRTkzNkEzQkRDMEJFMUJDMzJCRTdDMTJFRUNGODAwQQorOjEwQzY5MDAwQTNGRTEzOEEyMTMwQUYzMTZBRUJGNkM3NTA4RTM1QTk1RAorOjEwQzZBMDAwNEVBNEU1RUExMTlDQ0Y1NUJGQUMxMkU5QjczNTlCQkQ0RQorOjEwQzZCMDAwMEFGNEIzQThFOTRERDJDRjVBRUI4MDkxODY3NTBGQTc0MworOjEwQzZDMDAwQ0VGNUVBRTBERDE1MUU3QzFGRTU3QTk2RUFENjNGRjM0QgorOjEwQzZEMDAwQkRGM0I2MTkwRTVBNjdDRDE1RTA1MDEzMEEwRTY3N0VFQQorOjEwQzZFMDAwQ0M2Njk1NjdFMUZBQjI3QUZBQjMwMkUzNjZFMUJFMDM3QgorOjEwQzZGMDAwMUM3RTFFNTk3RTBGQzJBM0YwRkRGRTkxMDg5RjMxNkE3OQorOjEwQzcwMDAwRjNGRUJFMDg4NzE1OEFEMzBDRTM4RTMyMzM0RjM4RUMyNAorOjEwQzcxMDAwNzM5Rjk1NjVFQ0VGQjA1N0M1RkU1QUE3MURFMDExREY3QQorOjEwQzcyMDAwREZFQTU0MDExRTY5RjdBOEU1NUVFOEY3NkYyQjk2NDcyQworOjEwQzczMDAwQ0Y4NUYyQ0IzQTE4N0EyMDNDNTcwQ0U1ODQ2RjZDRDc0MgorOjEwQzc0MDAwMjczRjg1RkVEMjZDRDM5REVCQTEzNkMzMENGMzgxNzFEQworOjEwQzc1MDAwMTI3RjFDRDE5MjBDN0NFMjc1MTNCMzIwQkQ4NTI1RDVDOAorOjEwQzc2MDAwMUUxQTBGRkQ3NjQ0QTk0RUQ0ODM2MzU1MzYxQUYxNEIzOQorOjEwQzc3MDAwQzIzOTM2ODJBRjQzM0UyRjc5NjJBQkUyQjcwNjlFOEY1NQorOjEwQzc4MDAwQUFFRjI4NTgwNjY1NDUyMkRGNzdCOUNFNTE2NTFEMDUwOQorOjEwQzc5MDAwQThGNzQ4MzhDNzI2RjNGNkNDRDg5MTMwMzE4ODNFNzJENgorOjEwQzdBMDAwMDUzQzhFQTE1RTA3RjBBQzhFMzNBRDQxMzlEODY2RTExMQorOjEwQzdCMDAwNzVFNjRBMjdGRDc3ODU4NUQzQzdCMUYwMDQyRkNBQzczMAorOjEwQzdDMDAwNjNCMDU2MUZGNUQ3NjI2M0Q2MjBCRTE4RUVFQTc5MjMxMAorOjEwQzdEMDAwQUM5QkJEQTdCMjZENTA3QzZENzdGNThDMjI3OEQ4Nzk3MworOjEwQzdFMDAwM0Y0MkRGNkE2MzZDMUNDMjY5QzVGOEQyREVEMTUwQzYxNQorOjEwQzdGMDAwRDU3M0Y4RThGMUE0MzE5MUVCRkQ5NTE3ODBGMDBBMDJBQQorOjEwQzgwMDAwQ0YyQjhEMkQyNkJCMTU5RjlCMzRDRjhGMDNEQzNDRTZCMQorOjEwQzgxMDAwNDA3RENFQTk5NEIxOENGODhDNzMwREI2OUZCQjJFODI0RgorOjEwQzgyMDAwNzk4MkY0QUI0NjMxOEZFRUUwNTIxRDY1NjQ0NjgwNDc1NQorOjEwQzgzMDAwQjVDMkNBMkZEN0VFRDVGRkE4MDQ1RkZERkNGRjJBRjhDQQorOjEwQzg0MDAwNEM1QzU5RThGNTFEMTJFQjJCNUI3QkVCNkY1MUZGQUM5OQorOjEwQzg1MDAwRjY4NTMxMzMzQzVBRjE3MjQ5NkYxNkEyQkY0RTM4NUZFQworOjEwQzg2MDAwMThDNkJDMzE0MTc1QTM5RkUwNTE3RDYxMjQzRDJGNUIwQgorOjEwQzg3MDAwREI2QTQyQkNDNzdFMUNGMDdDNDVCOEFCQjdGMzMyNzBCNAorOjEwQzg4MDAwQ0VDNTc5RTA3QTJGNDQzMTRGNENGMDczOEU1NzgxRkUzQworOjEwQzg5MDAwNjNFOUZERUYxMTgwODBCNzlFMjZENUJCMEQzRUZERkRGRgorOjEwQzhBMDAwMDFDM0I4MkRBMUU2MkJENjNGMjhDRTQ4RjQ5MkQ5QzJCOQorOjEwQzhCMDAwNUM5QjQzOEMyRkRCRjU4QTA2N0U2REU1NzBBRUM4RUU3RgorOjEwQzhDMDAwM0FCRkM2NTJGRjRDOUNGRjhEQTM5OTJCRDQ3OEU3NDQwNgorOjEwQzhEMDAwM0IzOUVGQzY2OEZGMDI4MUY3QTkxNUI2QTBCQTVEQkI2OAorOjEwQzhFMDAwOEYzREM1Rjg4RDM3RkIxM0IwRkZCNkYxNkM2QTQzODhGNgorOjEwQzhGMDAwRkVFNTdFQ0Y4ODc3NjcyMkRGQTlCQzAzMUEwMzdFMEM5MgorOjEwQzkwMDAwMzZENjJBRjYyMDdBRUI2RUJGMDM3MDA2QkJBQkUwNzIxOAorOjEwQzkxMDAwNzAzNkQxN0JEOURGRTk0MzgyMUU5OUNCQUEwMDFEQ0RBOQorOjEwQzkyMDAwMTZGMjZBRjZENkE1QjcwMkNGRUNCNDVGNEU2RjAyRkJFMworOjEwQzkzMDAwMDU4NjM4Q0Q2QURGQjQ2MTdEODM0MkY2QzkxQzM3QzhFRAorOjEwQzk0MDAwMDBFMDM3MEJCNjE1QUM0MUIxMzUzQjlFQjE5MUQxRkMzRgorOjEwQzk1MDAwRjlCRDU4QUUwRTBCQzg1OUZBREZDNTgyRTVBMjFDN0Y5RgorOjEwQzk2MDAwREU4MzVBQkQ3NTExN0JGMDJCRDQ3QjRFMUZFMjdDMDExOAorOjEwQzk3MDAwRDQ1M0IyQkYxNzNDQTJFRDZGRDFENjVCNEVFMjNDMTc0OQorOjEwQzk4MDAwRTlGNDlGMzQ1NEYwNDBGRjQ4NEIxMkY2QzQ2MDM2MTg2NworOjEwQzk5MDAwRjlGRkIyNkRFNzREOTE4RUVFRjFGRjRCQTBGMzk0ODE1QworOjEwQzlBMDAwQzgyN0VENTQwRTRENzJFNTI0QTE3RkUxM0QzRUNGRjE0NQorOjEwQzlCMDAwNDlFRUZDMjRGNEEzQkNDN0U3NzVBRUYyMUM5NzBGOEZCOQorOjEwQzlDMDAwQzc5MjVDMzIyMzEzODc1RkNERDMyQ0RFN0E5OEM3NUE4NworOjEwQzlEMDAwNjAyM0UxMDAxRkIzOTlFQjQxNTJGRjUzRDVFNTZBMjQ3MAorOjEwQzlFMDAwQkMxRkYyQzU4QTY4MzdGMkUxNjc2RjFBODdGREM1M0Q0MworOjEwQzlGMDAwMUJFMUMyRjVBQzJGNzFFNUExQkY2MDdEODVENTU5MEY1NAorOjEwQ0EwMDAwNUQ1QUUwN0I5NDFCREVERjBGNzlBMzJGNkEwNzBEMUJCNQorOjEwQ0ExMDAwNEJGQjIxQkEzNUVGNkQ0MTdGQ0EzQUMzNTdGQkZCNDE0RgorOjEwQ0EyMDAwRkI3NTIzOTlCMzlFMDVDNkE5NjlBRTc4MUVFNzkzMzBCRQorOjEwQ0EzMDAwOTlDQjk3RjU4OUFFM0M3QjUwQkY0Q0U4NzNENTAyNzYxNQorOjEwQ0E0MDAwRUQ3QkQyN0UzOTBDRjZGN0IxMDNBNDRFQzNGQUMwOUUzQgorOjEwQ0E1MDAwODdGOTBENjI3QzlGRDk0NTgwMTNFMDA5OEUxREFDQjcyNAorOjEwQ0E2MDAwQjY4MjlDNjI2OTgxRkFBMDA2QTUyNTBDRDY1M0Q1RjgzQQorOjEwQ0E3MDAwQkMwMUU1NjBFNTdEMkRCREE2QTEzQzdBQzZFOERDMTJDRgorOjEwQ0E4MDAwMzRCRkQ4RDdGQjk0M0EyMjAzNzI2ODlBNjIyNzNENDE5QgorOjEwQ0E5MDAwRUFFNTc3MzJGOTJGOEJGMDY2QUFDMDlCM0I4NTNFM0VENAorOjEwQ0FBMDAwMkQ4MkMzNzcwRTczMjZFMDc3Nzc1OTU4QTQwMTQ4NjkyMQorOjEwQ0FCMDAwNUE1OTQzMTFDOUE5QTU2MTUxMjhGRjcxMkRBMUY2NUJFRgorOjEwQ0FDMDAwOTZEREY5OTVBQUI3REIzQzBBRUM3QjlCRDI5MThBOUQ1NworOjEwQ0FEMDAwN0M4OUJFMUVFRTVGRjI2RTQ5RUNEQTRGNUQ5MkEwQzMxOAorOjEwQ0FFMDAwNTRBMTFGQTYzMDk3MERENjVERkQ1QURBRTZGNUYwQ0FCRgorOjEwQ0FGMDAwREMwM0Y2MzE5RkY4OTFBNTM4OUZGNDYzMEJEQTNEOEI4OAorOjEwQ0IwMDAwNUYwRDZGNTEyMjAzNzA2MTc2NTc5RTAxQkVBQjk5RDhCRAorOjEwQ0IxMDAwM0Y3RjNERUFBNDQ3ODFBRjAwODFCNTg1RjkxMzg4OEUzOAorOjEwQ0IyMDAwODFERjI4MjBGMzM2MjU4REFEMzAwMkRFNTVGNzA1RkQ3NworOjEwQ0IzMDAwMEJFQUZCQjc0Q0FBMzAwMkRFNTcyN0Y5MTcxOEEwREUyNAorOjEwQ0I0MDAwOTY1NEM1RUI4M0ZDMjdCMDdFMjE2OTI1QUZFN0ZCMTcyMAorOjEwQ0I1MDAwQTg1MDhGNDk1RUMzRUI2ODA4MDI2MjM5OTIxRkFBRjBBMQorOjEwQ0I2MDAwNDBGRjVGNDYwOUI5RUVGNENGNDRGQ0E5N0UyNUNEQjA2NQorOjEwQ0I3MDAwM0U2OEJERDY2NENFQUZCRTBDRTdFREJFNEM2NEIzMjZCNgorOjEwQ0I4MDAwMjJCQ0QzRkRBOTM4NEZEOUFFMjM0OUVBQzMxQkE4QkRBNworOjEwQ0I5MDAwNUNBN0ZDOEVDNTg3RUVGRjc3NDlCQ0ZGQzU2NTQyMUZDOQorOjEwQ0JBMDAwODk2MEVCMTA2RUIwNEQ5RTQ4ODBGRkJFRTZCNDJERDg3NAorOjEwQ0JCMDAwRkVDMUE0NjhERUJGMURGQTI5MENGNDIzRTEyOEZCOTMxMworOjEwQ0JDMDAwRTMyRTQxNzk4QjdDMzgwQ0Y4NzAxMDFGNkQ0Q0UyRjIyQgorOjEwQ0JEMDAwMTJDNjU5NERFM0E0MDBGQ0IxQkY4OUZERjM3MERGNjBCQworOjEwQ0JFMDAwQkY4QzYyQkY4Q0RDNEVERDRDRURCMURGQTgxQ0UyRkJEQworOjEwQ0JGMDAwMDU0NjU4QzdCRThCRDAzRTMxMzA2RjNEN0VFQzE1RjhGMAorOjEwQ0MwMDAwQjFCODFFMTgyMUU5NjdDOTg0NDdBMzIyQjg1RUM4MEFEMworOjEwQ0MxMDAwQjVFQjg4NDlFNkYwQjMyNjQ3RjE3NTc2RUU0NzZGODVBOAorOjEwQ0MyMDAwQzZBOTE3NzBFQzBGNzBDRkJFRjY3NUJGMkZFNkYzNUQ4NworOjEwQ0MzMDAwQUYzQjY4QkY1QzJBQkU2RkNBRDgxMkJDMUVCMDJDMzU5MQorOjEwQ0M0MDAwRkQ3Q0I5NEFGNzVEMzExMDIwQUUzMzNBOTlCRTVCMUJDQgorOjEwQ0M1MDAwQ0UyQ0Y0OUM2REU5RkMyRTMxODdFQkEzQThBNzU2MDlENgorOjEwQ0M2MDAwN0Q5QTc5NDY5MjUzQTE1MjcwOERBQTc1M0U5MzAzREY0NworOjEwQ0M3MDAwMzcyODJFQUYzNTc4N0RCNzE2OEFGNUQ5QzVGQUVDN0MwMgorOjEwQ0M4MDAwN0Q1RTBEOUVCMkMzMUQwOTkzNkQ1REYxQjcxM0VFOURFMAorOjEwQ0M5MDAwRkQ2NUU1OEJGRTM0NzQxREFBM0ZBNDhGRUVGNjIzMkNCMAorOjEwQ0NBMDAwRjkzQkRFMEYzOTRGMUQzQzNCRTFBQzlCOUY4NDI3RDIwMworOjEwQ0NCMDAwMzM3RDk3QTVDNTQ3MzlDRjBCODIzRUJCRDA3NUUyNzU1MgorOjEwQ0NDMDAwOEU1N0MyQkZBQkZBMDlFQzIzRUEyNzBFMkQzRTU3MzUyQgorOjEwQ0NEMDAwMjYxQUU2NjQwNUJFNkJDMkJEMkMwQUY4RTdEMjkzODUxRQorOjEwQ0NFMDAwOURENzlGRjU0N0ZFRUQyOUU1N0U1NENGMkVCM0IzREVFOQorOjEwQ0NGMDAwNDE3RUJEQUNFNEI4OTA3RTNEN0FBRUI3RjNEQUEzNEM4QQorOjEwQ0QwMDAwNEMyMUJENDhFQjY3Njg4RjczRkE1Q0E4OUY5RTY1Q0U4NworOjEwQ0QxMDAwNkREMEVGMzA5RERFRDEwRUZCQjlDQjFBRjgyRTIwNEYyRgorOjEwQ0QyMDAwQjRGNTlGMDgzQUU4RUEzN0VBNDhDMEY5MTU5QTRCNUYyQworOjEwQ0QzMDAwNzAzODE5MUI5QkZDMTRGMUY3QzI5RUE1Q0IxM0ExN0U4MgorOjEwQ0Q0MDAwNEJGMjM2RTJENzg1RkQ0QUNGQTM2QkU2QjZFNEVEQkNFNQorOjEwQ0Q1MDAwOUU1OTdBM0UwOUVCNEY2REU3RUQ0N0I5NUU0MEZFQ0UzNgorOjEwQ0Q2MDAwM0NEQjJCNDYwRjA5RTgwRjEzOTIxRDVDRkYyODMzMzA4NAorOjEwQ0Q3MDAwQzQyM0IzN0FCNzEzRTVBNDg0Njc3NzY1QTFEOTUwMUJBMAorOjEwQ0Q4MDAwNEE2RkJEQTM5MzlFRjk3OTQ2QjE5MENGQzVEMjhFRjc3NQorOjEwQ0Q5MDAwMUIzNTc2N0M3QkE0QzVBMzAyNUNEQjUxOUVDMjdBRTc3RgorOjEwQ0RBMDAwMjRCQkE3MjNGQzZCMjI1QTY3QTIwQTdDNUZDNDI3MjZGOAorOjEwQ0RCMDAwRDQ4NzE0MTdFODFCRTgxNzcxRDhEOTc0OThBN0QyQkE4QQorOjEwQ0RDMDAwQkU5Q0Y0QzAyNTRFOEI5MUUwMjlGQzU0QjBGNjRCRDBBQworOjEwQ0REMDAwQ0ZBQkFGM0RGM0IzN0U3Qzk4NzI5Q0M3MTA0MUZGMzU1QgorOjEwQ0RFMDAwQUY3REZCQ0Q1RjUxOEU3RTY5NzVBMjFCNzA0OEYzQTNBQQorOjEwQ0RGMDAwQ0I1MUJGMUFEMkZDQTc2RkI5QkNCNUQyMzk5NTlDRjdGRAorOjEwQ0UwMDAwMTBGNDM3QzJGM0UyMjYzM0NEN0Y0ODczQzY3QzZDM0YwMworOjEwQ0UxMDAwRUNGREU2NjRDNDhGMTFDNzVBRUE5MTFEQjRFRjc5QTlGRAorOjEwQ0UyMDAwOUYzQkY4REM4QTlENTQyRTY1NUVCQjdFRDEwOThGMkYxNworOjEwQ0UzMDAwNEMwQ0Y1NEI4MEM3RkZFMUYwQjhCODAwRkQ4QTZENzE2RQorOjEwQ0U0MDAwODdENkY4NDk0RkVCQ0ZGRDk4RTI3QkQwQ0JEMzkxQ0U3QworOjEwQ0U1MDAwQ0ZCMTFFNEUzQzU3NjhCN0YxN0VGNEZFQ0RBMzE1QjA5RQorOjEwQ0U2MDAwM0U3ODNFQTIwMzY2MTBBNDM3OEZCQTYwMDEwNjEyQTg2RQorOjEwQ0U3MDAwOTdCMDI4NERCRENDRDI0N0QzN0U4QzNENTFGM0ZFQTY1MgorOjEwQ0U4MDAwRjgwQ0NERkJGMThFM0M0REZEOTZGNDIxOUFGNkI3MzlBNgorOjEwQ0U5MDAwNEIzNEY1REI4QkM3NkJEQTU3QjgyQTM0RjVCQzk2MDZGMgorOjEwQ0VBMDAwNERGQjgyMDM0RERBRjc4NzFEQjQwRjA1QzdDQUNCNTA3RgorOjEwQ0VCMDAwOUY3N0ZBRENGNTU4REVEOEJBQTFBQ0E3ODM3NUYxRUIwMQorOjEwQ0VDMDAwMTZGQUJERjVGODdDRDhDNURBQTIxNkQ2RDVCRkNCOTYzMgorOjEwQ0VEMDAwQjhFOTNDQzA4Q0ZCQTIwNjlEMEY5NEY4ODgxRURCMENDMQorOjEwQ0VFMDAwNEU0N0IwMUZGN0QxNUVFRTE3NzA5RkRFNTIwMEVDMDA4OAorOjEwQ0VGMDAwRUM5MTk2OEUxOERDQUYzMUIzMUU1MjIzNzE1RjNBMTg1NQorOjEwQ0YwMDAwRjlCRDFBNERGRTVGMEM0MzM5M0Y0MzI1QkRCN0QxQzg2QgorOjEwQ0YxMDAwNDg3RjZDOUM5QUVENDVERkRGNTFDNUZGRTI1RjkxNEY4MgorOjEwQ0YyMDAwQ0Q4ODIwN0UzMjAyMzQ1QzVBMzc5RTgxMkFCODRGNkVGQgorOjEwQ0YzMDAwQ0RCQTRCRDg2MkREM0VEREFEQTk4RkIxRkY0NEQzRkU0MworOjEwQ0Y0MDAwQTZGODU1OUFGN0UzMUQwRkU4RjY2OUEzQTY3RTlCRjNCMgorOjEwQ0Y1MDAwNTFERDNFNkRENkVERDMzMzlBRjcyMzNFRjdENzIzMTkzMworOjEwQ0Y2MDAwOEQ2QUY1QTgzNjk4RkZEMEEzMUJDQTcwNUY4NjFERjNBMworOjEwQ0Y3MDAwQ0M0MDdBMjk2QzcxRDcxMzBCRDk1N0ZCMjY5NjJENjBCQworOjEwQ0Y4MDAwNTdBMTNGRUI4REJBNzgyQUY3RDUzOUM4MUZCNUJGMkUwOAorOjEwQ0Y5MDAwOURDQTAzNzU0RTdBRkU3NjVEMzE5NUVGRDRCOUE4RkMzMworOjEwQ0ZBMDAwNEJERDM4MkE3RDc1RTU1NDM2RDQzNTUwRkI1RDc1NEQyMworOjEwQ0ZCMDAwNTQwMjA0MDdBMEJDODg4RDExRjIwN0VBNjhFN0I3MTk4QworOjEwQ0ZDMDAwRkNENTc4RTI3QUZBQTk2Rjg4NEZCNkY1RjBCNzYxRkQyMworOjEwQ0ZEMDAwM0VGNjhGOEFEMTUwM0Y5Q0MyODhCRjU5QTE0RkE0Qzc0QgorOjEwQ0ZFMDAwNzMyOUFFQ0ExNEE4NUY0OEU2Q0ZEQkMzQUNFQjUwMEU4MgorOjEwQ0ZGMDAwMzQxODVDNzlBODVGRkZGQkE5RkY2QzM0MEU2MEVDRkU2RgorOjEwRDAwMDAwNTVFNUYxRjYyODVFQjc0MDlEMzYxQjBEMzNDRjdGMzZEMAorOjEwRDAxMDAwQkE4NjMzRjYxQzhBOENBMTU0QUZDMDdBN0IzODdGN0ZFNgorOjEwRDAyMDAwRTFBOUZGOTA3RTJEQ0Y5QjI3MDdDRTlCRkY5RDFDRTJBMQorOjEwRDAzMDAwQkNGOUI5NTMwRTFCRkE1OTBFNUQ0Q0IzRTFCQTBFMDk5NworOjEwRDA0MDAwQkY5MjhCRTU4NUNEODZCMkM0OTgxNzg2NzJGMUE4NEU0MworOjEwRDA1MDAwOEY5MEU1QTdENjEyNTM0QTFDQ0VERjM5MDVGNTA4Q0ZDRAorOjEwRDA2MDAwQ0Q2MTZDMUJGMDhCODkwQUI3NDczQkY1QzAxNDJFQ0ZGRQorOjEwRDA3MDAwREI2RjMzOTNCRDczRDhFMDlBOEY3ODBFN0NGQTQ5ODRDNgorOjEwRDA4MDAwNTc0MjRBQ0Y4OTI4NTdEQTZEMUQwOTA4ODdGRTI5OTEzMgorOjEwRDA5MDAwQkMxRUQ3RjFBNEUyMENBQTg3RjE3NUM2QTVEODI2NzZFNgorOjEwRDBBMDAwQjNDRUJFMzgxRkZEM0E2RjQ4MTFFNzBDMkRBRTAxMjhGNAorOjEwRDBCMDAwN0Y2NUZENzA4NUFCMEFFNUM0RTExMkQ3NDA5Q0NGQTEyNgorOjEwRDBDMDAwNzIzM0QxOEZBN0RDRTYxRDg4NENDRUU4MkE5QTEyRTQ5MQorOjEwRDBEMDAwNkY3OTM0MjU4Q0JFOUI2Q0UyNzRDNkVFNTJCRERCNDI4OAorOjEwRDBFMDAwRDg2OTJGQTU3MDdEOUZGNjBERURCOTNCMjM0ODBGM0YwMgorOjEwRDBGMDAwNkM2MDhCNzY4NTgwRTNCQjI5NUNDRTlERTkxMURBRkZGRAorOjEwRDEwMDAwRTIxM0YwMkI5RDY0QTNGRURBNTc4NEQzNzk2RjdCNzkwOQorOjEwRDExMDAwMUFFOTQxRURCNTAwMjVBMDhGRjY1M0I1Njc3N0QzN0JBQgorOjEwRDEyMDAwQjMzQzBBQTM3M0NENjk4MjRGM0REN0JDRkMxRjQ3QTAxNworOjEwRDEzMDAwRkQyNzJCMjI5Q0M0QzNFRDgzNDgzRUREMjUxQUNGODhGMgorOjEwRDE0MDAwQjE5MERFMzI2M0UyODA1Mjk0NEJEM0M0RjlEODRDOUI0OQorOjEwRDE1MDAwQjExNzFEOTMxOUEzNEM3NkU4Njc5RTM1NkYwRDhBRkZCMgorOjEwRDE2MDAwMDVCMTE1QTYyOEE4MkZFQTdGRjcxQTJDOTdBNDZDMzRDRQorOjEwRDE3MDAwNDU0MzU5OTlGNUZDMUE1NDFGQUI4MEI0OEFDODVFRjIzNgorOjEwRDE4MDAwRkZCOTBFRTYzNTZCQTVFQUUwRjY5MzkwNkJBRUE1RDczNgorOjEwRDE5MDAwMTQ4RjIxRjExMEUxODg3ODBBRjAyNUJCRjAzRDAxNkY3MgorOjEwRDFBMDAwRjlERDdCMDI5RUIzNTJDNDM5NkQzNkNCQkVBNDNERjc4OAorOjEwRDFCMDAwOTk4Qjc4RDIzQUUzQ0ZBOURERjhFN0I1RUY4NURFRjZCMworOjEwRDFDMDAwODE4OThGQkJGNEU5MzA2RkIwM0Y0OThFN0I0OENDRTM1NworOjEwRDFEMDAwQjA4OUI5MTRENEUzRUVCMjExN0VFNDRDM0Q3RjVGMTEwNworOjEwRDFFMDAwQUMzRkE3RDk2RUEwNzM3QkM5Qzc3RDhDRkNGNjQ1OUY2OQorOjEwRDFGMDAwQkI4OUNGREREOEVBREY3RTg0MTE5RTM3MjE5RDVDNDk1MworOjEwRDIwMDAwNEU0REYyQUMyMkY5MzBFNDZCOTAzRkM4MTcyRkJBM0Y3NQorOjEwRDIxMDAwMzk0MjdDNzA5MUUwODNCNUM0QkZGNkQ1QURBNEZBRkU2NworOjEwRDIyMDAwM0EwRjk1MDdFQUQ2MDkzRUI4ODFERUJGNTNCNzQ5RjBGOQorOjEwRDIzMDAwNDFBRkUwODM0RkQzRjNFNkJBQTk1NEJFNTZFNzE2N0M1QworOjEwRDI0MDAwOTA5RkFCNEUxNEY4QjQzMkRFQkQwRUY5OTkzQ0JGOUNGMgorOjEwRDI1MDAwNkM3MTg3MjFCQ0ZFRjhBODk5QTk3ODJFRDE2QzI2M0M2OAorOjEwRDI2MDAwMDUwQTc4RjJCMTU4OEM5NzMxREJENzNCQkFDNkNERThDNgorOjEwRDI3MDAwRjk2REU3RkVFQkNFNzkzN0M0QkIxRUMxRjEzQUUzNjQyQQorOjEwRDI4MDAwNTAzRkJCQTE3QkZDMzlDNDFDMzZFNDI3M0JCNjRFMjQ3RgorOjEwRDI5MDAwRkU3MUM4RTFCMEExREVGQTVDQ0FBNDg5QzhBRjBGQjlCQgorOjEwRDJBMDAwMUNCNjMwQThGRjYxRUIyNEZFREVFREIwOTlBMUJFMzNDMQorOjEwRDJCMDAwNjUzMjdGRUY3MUQ4QzJBMURFQjA1NUQ0QkQ4QzBFQjVGQQorOjEwRDJDMDAwNzc2RkJEOTNGODRGMDk1M0Y2MjEzRDk0NTkxMjQ3MDNFOAorOjEwRDJEMDAwQkIwNkY5NThCMjBGRTlFMEE2RjhEOUEzOTEwRTUyNTI1NQorOjEwRDJFMDAwMUM4NDBGRTMxREFCRjY2MUZEOTZGNENEQzYxODA3N0FEQQorOjEwRDJGMDAwNDNGMzU2RTM3N0E1QjExNTQ2RkM2RTc0RkZCQjU3RTNDNQorOjEwRDMwMDAwNzc2MzUzMzYxQTgzQkYxQjk3RjVGQzZBQUNERkVBREMwMAorOjEwRDMxMDAwNkM0NDdEMzAwNUY5NTY1Q0EwMUY1OTk3RUYyNTdGNDU3OQorOjEwRDMyMDAwM0IwMUYxMzRCN0I5OUNGODc4NEU1MzM5RjE3MTA5OTc0NAorOjEwRDMzMDAwRDJDOTE1RjdBMzlGQUVBNjQ5QjEyQjM4OEZDOTRBRTdDQQorOjEwRDM0MDAwNjFCRDAyM0E0NEY1NDVBMDE2RTBCM0ZCQjZDRThCNUU1NAorOjEwRDM1MDAwMDVERkQ1NjA3RDI4RDU3RkI1MkEzNERGM0Q5ODEyNDJBMAorOjEwRDM2MDAwQkU3QzI4RTgxNEU1NjYwNTdDRjcyMUQwQ0YyRUE4Njc5RgorOjEwRDM3MDAwRTBGQUM4N0YzOERCMzY5QkZBNzNEQjUwQkVFNkE2NzA1NgorOjEwRDM4MDAwMzk1OTIwRTRFNjVDNTEyRTEyQ0YzRkI1QkFERTQ3QkFEOAorOjEwRDM5MDAwRkMzODQ1RDg2MzVERTlGQTEzNDFCNzBCRjgzQ0JBRDBDNQorOjEwRDNBMDAwQjVGNkJEQTA2QkJGOTQwRjg1MUQwOTU4QUY2MjFCQzhCMQorOjEwRDNCMDAwNEY3OEE1RjhBRUM1QzFGNjVCMjJDNjQ5MzQ1MEZDODU0RQorOjEwRDNDMDAwM0U0RUEyOTJGOTc4N0YwREJBMzgwQkU2MzdEMTc5NkNEMAorOjEwRDNEMDAwNTNEMDczRTI0N0MyRkVFOEMxRjlERTU0NjRENjgwOUZBMQorOjEwRDNFMDAwREY3NkNGQ0ZGRThERjBCRkNDQkFCNUVGQzVCQTE3MzMxRAorOjEwRDNGMDAwMkZDNUI1RTlEN0MxREM3MTQ0NUI0QkFEODc2OTNGQkIzNQorOjEwRDQwMDAwQUVDNzFGN0EzRDVERDZDMUVENzcxOUM3MjJGREYyQTBFOAorOjEwRDQxMDAwMDdEOTA2MTYyMTFGQjQzMUY0REYwNEYzODkyMzk3RTFGRAorOjEwRDQyMDAwMTM3QTdFRjQ1REYxQjlDQkYwOUJBNDgxMjFGODhEOEM0OQorOjEwRDQzMDAwQ0ZEMjk3NTI5RjgzQkEwN0UzRjMzQ0FGODU5MzlGRkUwOQorOjEwRDQ0MDAwQTRDMzlEOERGREI0OTc3NjdDNjM0MEZCMkNENjRGNzhBQQorOjEwRDQ1MDAwRTZFOUU3NzZFMjczQzVDNENGRTlFMTQ5MkFFRURCMjlDNAorOjEwRDQ2MDAwODNFNzBGQTgxNzBEREZGNjI0RjE5RDM2MTQwRTQwOEZDOQorOjEwRDQ3MDAwODU1MDQ3QkVFM0VENUIzRTE4QkY2M0U5MUM3RkRBMTVCQworOjEwRDQ4MDAwMkUxNzI1REQ4MzNFNDhFNTg4ODE1QzFFNzUyRDM5NURBQworOjEwRDQ5MDAwQzlCOEM2RjZDRERGMjY5MDFGRUIwQUY4REUxRDFDQzYwNAorOjEwRDRBMDAwQThDM0ZEMUVFNEY3QzUxMUE0RjJCNDJBQUM0NTAxRkRFMgorOjEwRDRCMDAwQUZCNUE0MTdFOTExQUQwMzRDNDYyQ0JGNkIzQkIxNzU1QQorOjEwRDRDMDAwNDAyQUY1QUZCNzE3NUJGQjE0NUJGOEI4NjNDNzYxRDlBNworOjEwRDREMDAwNjQ3MjZGOUE4RDc2RDIxMDMzRDk0OUVGOEE3OEMwMDk3OQorOjEwRDRFMDAwMTEzQzdFRUE1RDNDMUY4Njc2MTM4RTVGOEM0NUY5QTU2NAorOjEwRDRGMDAwQjczNzVCMEY0RTJGNzVFNDc0QjUzQjYxOURBMzcxOURFQgorOjEwRDUwMDAwOTU5RjE5RUVDNzY3RDc2QTg3NTZBRUZDODYxOTYzNDBBOAorOjEwRDUxMDAwNkVBRkJDQzg4QzA1NTc2Mzk3MzIxNUQ5NDVGRTUxRTdFRAorOjEwRDUyMDAwOUI1ODE2N0RFRThCQ0U3MUEwRkQyOUY1MDc2MTlGNUU5RAorOjEwRDUzMDAwMjEwRUE5Qjg4M0VCMEJBMzJFQjI3NDYzMjFGQTk5N0E1QQorOjEwRDU0MDAwRDBGOThENTJGQzI3NkVCNzhBNTI5RThCMENFNzUzNjA0MAorOjEwRDU1MDAwMzMwRDU2QUYyOTQ5MTM4NzE0NkY4NDcyQkFFQTFGOENCMgorOjEwRDU2MDAwRjUzNkU2QTM3MzEyQkQzREZCOTZGMDQzODE1REZCMEJFMAorOjEwRDU3MDAwQzREQjM1MjIzRTA5NzYyNDA2RjE3N0NDNEYzRjlBRjk3OQorOjEwRDU4MDAwMzNFMjAzRTFBNDBGNzVEQUI1QkIwRDE0NUZEMDY4NzQwNAorOjEwRDU5MDAwRjUxQzgxNzZFRENBODFDRTU1NTBGRkQ0MTdGN0VCNTdCNQorOjEwRDVBMDAwQTFBQ0IxN0Y0MzcwOTNGNDVCQjlGMjNDQzE1M0Q2NUIzRAorOjEwRDVCMDAwODVERjc3NDMxOEM4MUYyODJCRkZBMzkyMUNBQTY0NkMzMQorOjEwRDVDMDAwMURFRDFCN0JDM0I0MkM0ODJFQjI4NkFGM0FFMTlGMEJGNgorOjEwRDVEMDAwN0NBRjAyMDE0ODc2RDZDODQ5MkU2ODU3MjFFQzBGRTY4OQorOjEwRDVFMDAwNzk5REQ3ODVERDA1MTZDNTI0MTdGNDVCMTEyN0RBQjNCRAorOjEwRDVGMDAwODdGOUZCMDFGMkZEMjNGQ0ZENDBEOURGRjk4OUY0QkU3OAorOjEwRDYwMDAwOEZBQzhCRkUzMjY0RkQ0RkJDOUUyOEM3NkJFNUY1NkM3QQorOjEwRDYxMDAwNTkwRkU3RkREOTc4RkI5NzA2MzY0Q0YyNjQwNUY4RkQwMworOjEwRDYyMDAwOUU4MTQyM0VFNkIxM0MxMTk3QjM3N0UwRTVFMzUxQjQwOQorOjEwRDYzMDAwRUY4NTdDOThGNThDRUEzMUU1RTJGRThDOEZGODMzRDJFOQorOjEwRDY0MDAwNzc4MzQyQjE3Mzk1Rjc4NjkxQkZGQjRDNzQ0M0NFRjI1QQorOjEwRDY1MDAwMjA3QjQ1QzZBRjk0OTdEOTVDQThGRjU1QkQ5OEI2NDVDOQorOjEwRDY2MDAwMTVGMTNDQTg3RkZDQ0JDMUVEOTgzMUFBOTVDRTI3Q0UxMQorOjEwRDY3MDAwM0RDOEY5N0U3N0ZBREI4Mjk1QUY2QUY2QjNDQjdCNTU2RQorOjEwRDY4MDAwRTFGNjM4MUVEQ0MxNzg2NzFGRUFCRDk5RUM4QjE0MUZFOAorOjEwRDY5MDAwOUQ5QjdGMkFGODVEMkZFMEFEQzVEMTgxNzhCMUQ4NjQxQworOjEwRDZBMDAwRTY0MjdCMzVGNjI1RTBDRkI4Qzc5RkZCODgxRjJGNzg3MQorOjEwRDZCMDAwODlGQjdGQUIxRTdEOTNFNERFMUNENTQxRkVEQ0IxNTlCNgorOjEwRDZDMDAwRUUyRjEwNkZEQjZDM0VGMjJCMkU1OEY5MUFDREVCOUIzMAorOjEwRDZEMDAwMENBMTM3RDgzQkIyODJFMTc5QjYyQkZDQkZCQTAyRkM3MQorOjEwRDZFMDAwQkZGQTIxRTFBRkY3M0IyRkIxRUVBM0Y1MkVCOUM2QjhEMworOjEwRDZGMDAwQjYzNjFCM0YxNzc1OEE3RDNBNkU3MDBDMTZGMDhBNDg1NQorOjEwRDcwMDAwNDVGRkY5N0M1RjZBOTQ4QTQxQzdCRTVFM0M1RUU5OUQzNQorOjEwRDcxMDAwMjJCNDhCQ0VENURBMThFRUZCRjRFNTdGQ0I3MTg3RjAxRgorOjEwRDcyMDAwRkJFQUVEODExOTM4NjY1QzAwNUU3RDUyODUxRTE0ODAyRgorOjEwRDczMDAwRUYwMDFDRUYzMkYwRDVCRUZGOUVFMURCREJFODM3MzlBRQorOjEwRDc0MDAwRjExQ0Y1MjhBMzdFMDZGQjhFOUI4MkUzNjI0NkE0NzI0MQorOjEwRDc1MDAwQkNFQ0Q5QzRDRjhERjRGMTVFMjM1MjZERENFRjJEQ0UzRAorOjEwRDc2MDAwNjdBQTI2QkUzMzFDQ0Y2NzI0M0Q4QzhBNjAwREU4NkYwNAorOjEwRDc3MDAwMDdCQzc2MEFCQzc2MjI1RTRCRkMwRDlDRDNDMDc3MjE5OQorOjEwRDc4MDAwRTgyQjgwQkY1QUI4OEU0RUVEODJCN0UzQUUwMEQ3NzE1QQorOjEwRDc5MDAwM0YyNDVDMUI0MTFGQTY3M0NERERFMUU0NEZEMUMzNzk2QgorOjEwRDdBMDAwQTk4MEFCODRGN0JENTc4MEYzQkRERjEzOUNFRjRENzVBNworOjEwRDdCMDAwNjhGQzExMTJERUREQzkyN0ZERkVDODc5ODdBMEQzQTI1RgorOjEwRDdDMDAwRUJBMUQzNEI2OURDNEU2NDQ2M0ZDNTk5RUFGN0JEQkU3OQorOjEwRDdEMDAwMkIzREFEQkRDMkJFQUZGRDIxRjc1RDBGMzc3RDU5Mjk5MQorOjEwRDdFMDAwQ0UzQkY1Q0ZCN0E1NzZDQkVGQkUxMzM4RkU2RkYzQTdEMAorOjEwRDdGMDAwQ0ZBOEREQUI3OTNGNkJFNTQxQ0RGQkQ5OUVGNzM0RjU4MgorOjEwRDgwMDAwRTE3RTVGMTlBMkI5RjQ4RjhGM0NENUYxMjZENkFGRDc1MAorOjEwRDgxMDAwQ0ZERTlEN0Y3REMyMEIwQjBENzhGRTU2RUNFM0ZFRkQ0NworOjEwRDgyMDAwMDVFOUVFN0ZBNTAyOUNERjM1NzhFQjZEMDBENzFCOEZGNQorOjEwRDgzMDAwMzVBODc0MUVFNkNEQTM3M0MwRTU2MjhFRTc4N0ZGRjNCQgorOjEwRDg0MDAwOTM5RjAxREU5QzY3NjZGMjdGQjZFQ0NEMzAzQUIyQkJBNworOjEwRDg1MDAwRTI0MUM5MDU5NUI5ODJGNEM0MTI0Qjk0MTFGNUE5MTI5RAorOjEwRDg2MDAwRDA5NDQzRTFDRDI1ODEzNzE0MEYwNEY0M0VENUMyQzJENAorOjEwRDg3MDAwNjI4MUNFQTc0RTU1MjhGRTY5MkFFM0YxRDQ1MEI2Qjg4RQorOjEwRDg4MDAwRTFGRDA0MjM2QjMxNDNCREMyNkE2QzMxRDNCOTFGQ0ZCNAorOjEwRDg5MDAwNzc5OEMyQTdDOUNDNDZFNkMxRjcyQzM2ODZFQ0UwQzkxQQorOjEwRDhBMDAwRjgxMEU2QUJCQTU0OEE2NzlCNTJDQ0NGMEJFRkIyMzY3NgorOjEwRDhCMDAwODRBMTNDQkRGM0MwN0Q2NzdGMDZFRkQ5NkE0RjExOEYwRAorOjEwRDhDMDAwRDc5NkY5NkIxRjFCQUVFNTFDRjA1MjJBQTdGMzc2NDVERAorOjEwRDhEMDAwOUMyQjJCNjE0RThDNkZENTdGRjc3RTJBRjc5NzRFNTA4RAorOjEwRDhFMDAwNTdBOTE4RkZEMkYxMUUyM0JENUJEMjFEQUNFRjgwMzlDMgorOjEwRDhGMDAwOUZFNzY3MENDNTc1QjJCMDk2QjQ0OEQ0OUYzNzk2NjE2MAorOjEwRDkwMDAwRkJDQUMzMEU4MjRCNERGMUFBMUNEQ0M3OUFEMUNBNjc3MQorOjEwRDkxMDAwRTY5QzgwN0Q1M0IzRjI2QkQyRDNDN0E4M0JFQUIxRkQzRQorOjEwRDkyMDAwQjlBM0RDMzU3RTYzQUI0NzQ1N0IyNUUwQkZGNENGNDQyQworOjEwRDkzMDAwQkFCQzkyMUQyNEU3N0RBQ0FFODVGMEU5OTNCQTAzNTRERQorOjEwRDk0MDAwQkUzQkYyNEY0NUE4NjdGOEVCN0MyMUZEOTdEN0VCMkY0NAorOjEwRDk1MDAwOTA3RTAyRTkzNzkwN0NFMEQzN0JDQjdBMjM1RTY2QTQ4RAorOjEwRDk2MDAwMDkzREQwQTJGNDQzQkVDMDhDQkM5NEZDMzIzN0FEOEJEMQorOjEwRDk3MDAwNUMyRDQ4QkJCQzNFQTg3REZGM0RGM0Q3QUJDNUYzQ0FDOQorOjEwRDk4MDAwNzgyRTE3RjVGOEFEQzc2Qjg5Q0ZGMDU5OTEwMkUzREUxOQorOjEwRDk5MDAwMDVGQTFFQ0FENTY5Q0M5MzVEMDk3Qzc2RUFDMjBENjE5MQorOjEwRDlBMDAwQzM5NEVCQzdFQjI1RDZDRjEzNTg4ODNDOTU2QkU3RTdCQworOjEwRDlCMDAwMEVEQTQ3QjU0QzI1RkI0MEM2MkJDODdENTg5MEQ2NDU5RQorOjEwRDlDMDAwMkUyRUI5QzJCRTJERjkyMUY3QURBQjVDRkI3Q0U2RjU3RQorOjEwRDlEMDAwQzkzNUE2QzlFQkI4QkYyQkJFM0U5MDc2Nzk3RDQwRkIxQQorOjEwRDlFMDAwRkU3QjVFNzc1MEZFQ0M0Q0Q1MTBDODE3QzE3ODYyOEM5OAorOjEwRDlGMDAwNkI2Q0Y3RjI3Q0M4NDU4OTFCMjIyOTM4QjNCODIzMTIxNworOjEwREEwMDAwRjVDNkM1N0I1NEMyNDM2Njc0MTlGQjAwQkUyRTE0RjhEQworOjEwREExMDAwREFDQTVBM0U0MDdDNUMzODdDMjFFNUQxMkQ3QTNDNzREMAorOjEwREEyMDAwNUM3MUI1NjhCRkM0REE2OEMyNzUyRUQ5QUE2RDU3MkQ2RQorOjEwREEzMDAwRTI4QTJCNzc2OEZEQTJENUMzNkYzQTg5RkQ1NkVCRTJFNworOjEwREE0MDAwNzk3NkE2ODlGOEUxN0M5NkNGRTMyRUI0RkFBOUJFNkM2QworOjEwREE1MDAwQUI2MzFBN0Y2NURCQzUzQUYyMDdCQ0Y0QkJENjg3M0RFMgorOjEwREE2MDAwRkQ4M0VDRkZBRTc4QkJGNzBBRkJCN0Y3ODdEQzNGM0RFMQorOjEwREE3MDAwREVBQUI2QUQ5NDU3NzVBRDc4RkJEMzQxQUUwRjcwREUxQworOjEwREE4MDAwOTIxRjRGNDdERTA0RTM0RTdGRDVFQ0Y1RTBGOTY4OTEzNQorOjEwREE5MDAwODNGQjM3MTU2RjNEOUVCN0I1N0ZDQkM4N0YzNDQ3RjgwMgorOjEwREFBMDAwMzlCQkNCNEI5N0YxMDY0MzBFN0JFQjc5QkM4MTRCQzU2MQorOjEwREFCMDAwM0NEMUMxMDdDQUNCRjBCOEEyRTA5RDVBRDI0N0JBM0RDQgorOjEwREFDMDAwQjc5MkY5NTUyMjdFRTg2QUY5OUFGNEVCMEQzRTU1NEI3MAorOjEwREFEMDAwN0E5NkQzNjcyNzdENjhFODg1ODYzNzUxM0U3RTU3RkU2NAorOjEwREFFMDAwNkUyOTBGNzM2MzM4REMwQUZERTVBNEU3QjU4NUI1MTQyQworOjEwREFGMDAwN0Q4ODdBQzJDQkUxMjFGNTg0MUVFOTVDNEY5OEU0OTlEOAorOjEwREIwMDAwMURDNkYzMERCQjlDMDdGNjQ4QzdGMzQwQzFGRjBEMTZCOQorOjEwREIxMDAwNTcxOEMyNjk4Q0RBRkFFQjNCMTA3RjdDMkFGOUY3NTY2QQorOjEwREIyMDAwRkNGQ0ZEM0YzQ0U2QjhCMkRENUY2MzNGNEY3QTQzNzdENAorOjEwREIzMDAwRkE3RjhEODFFNzVERTQ5NzM5MjhDRTBGRUQyOUY0RUY2OAorOjEwREI0MDAwNDk3RjlGQkU3REYxQTBEMkZFRTk3MUU0QUZGNkI5NzBDNgorOjEwREI1MDAwM0U5QkY4N0NCQURCOUY5QTk1NUY2OUZDOEJERDhENUZGRAorOjEwREI2MDAwQjNBN0M4M0UyNzg4MEU2NkE0MkIxMkNGRUQyNzJDODFDMQorOjEwREI3MDAwRkRCRDVBM0MxOEQxMzE1NUEzRkZGQ0ZGNkU1NzRDNTBFOAorOjEwREI4MDAwNDFCNTA0Rjk5OUFENzhCOUZFQ0FCODFFM0I5REY5QTgxNAorOjEwREI5MDAwOUNDOTNBQTg3NDMzMUU3RjNGODczOUE5OUMyN0YyOTgwNQorOjEwREJBMDAwREZDRTcwNTdBNDUzM0M0QzQ3MkY4QTlGN0NGMTdGQjI0NQorOjEwREJCMDAwMTA2RkNFOEUxQ0I2MDE2M0VEQkUyRjNEQUUzRENGNDE0MgorOjEwREJDMDAwRTNCN0VGRkU5RjA0OEM4M0I5MTI1RkQ4MTBFRjlBOTdFQQorOjEwREJEMDAwMUVFMjNDRTgyRjI1MkE5REI3QjA1MzhGOTE5Q0E4MTBEOAorOjEwREJFMDAwQjczMEIwRDFGQzFDRUQ1RjhFNDRBMjlCMDA1RkVDQkQ1MgorOjEwREJGMDAwNTlGMjQ1M0M5RkNERkVDQ0MwRTM0OTE2MkJERTgxRDBDNworOjEwREMwMDAwQjRDOTZGMjBEMkNBOUU5RkU4NTVCMURFQzhERjY3NTdGRQorOjEwREMxMDAwNDU3OTE1QTg2NzBGMDlFN0VGRUY4RUYyQTIxRjdEMDY4MQorOjEwREMyMDAwRjMxMzNEQ0U2MjhDRjhERDZDQzZGOURFNUNFNkUyRjlGQQorOjEwREMzMDAwMEVBQzIzMDlGNUIwRjlDRDE2MUVFRkNGRkMyOUM4REZENQorOjEwREM0MDAwNzNCQUIxN0Y1QTA0OURFNzI2NzE3RTlFNUJBQUY1NTM5NQorOjEwREM1MDAwQUM0OUU3N0NGQzY0NDZFOTY3NDg0RjY3RDI1RDZCQjEyRAorOjEwREM2MDAwQ0M4REY2QUQ3RkI4OTBGQ0Y2MENFRDg3OTM0MzdFNDJFOQorOjEwREM3MDAwRTc4REYyQkJDODQxQTUwRjYyQkI5RDBBOEY0RkY3RUM0MQorOjEwREM4MDAwMzE1MzdDMDQ3Q0QxQUIzQzI4QUVGRkVEOENCMjVGNjE5QworOjEwREM5MDAwQkI0NzExRjY0NUREQzMxNUJFRDNFNENEMDZFOEM5QzNDNQorOjEwRENBMDAwRTc4RjM2MTdGOURGRTE0MTMxOEQ0QkY1REYzRjNENjFGRAorOjEwRENCMDAwRjI2QTJCRjlGODNEQThGNzQ2MEU3MjNGODVGQjlBNkI4NgorOjEwRENDMDAwNjJDQzhBRjM3RkMyRUNERDQyRkE2OTZEMDJGQTJCMTc0RgorOjEwRENEMDAwM0U2OTM2QTBERUYwMTE4ODVCQ0M0M0Y5NkI5RDg1Q0FBNgorOjEwRENFMDAwQkY4MTFEOENFNUE3NjAwNzYzRjkxOUQ4QzE1OEZFMURENworOjEwRENGMDAwRUM2MDJDRTc1RkM4MDM2MUMxRDhEODBDNTczM0M3RUY3RAorOjEwREQwMDAwRDBGOTU5QkIwNTNDM0JDN0RGNjNBMkYxNEY2NkI4MDlBOAorOjEwREQxMDAwQkU5REZCRkQzMkYzRTJBMUNFQ0VBODhFQkVEMTk3QzE0RgorOjEwREQyMDAwQjdFRUY5OEM0N0Q4ODNBMUUzQjk5RTE1RjNDODY5MzRERgorOjEwREQzMDAwOTI3Q0NGNjlGMjQ3MkUwODZBRjc3NkJBODlERTY3RUZFMAorOjEwREQ0MDAwRkU5Q0YyNEZEQkVDOURGMDc1MjlCMEU0MDkwNjVFN0Y4NgorOjEwREQ1MDAwRkJFOTc5OTM1NzY3RTFGQzVEOUZFMUJBODFCRUZGODJFMQorOjEwREQ2MDAwNjU0RUQzRkJCRkMyRkMxRkU4OUZFMjBFREE5NThFREY0MworOjEwREQ3MDAwOTAxREEwNUI4NzFFMEU3MjVEM0JBMzdDRUJGMUZCOURBQgorOjEwREQ4MDAwQkI5MzcwMjVDMDZGMThBNzFCQzQyMzI1RDQ3QTU3RDEyNQorOjEwREQ5MDAwN0M2RjM3NzcxNDYyNUVDQkVEOTdENDkwNzFDNjI3MzNEMgorOjEwRERBMDAwNEEwOENFM0Y5N0Y4MjZFMTI0RjZFQjdBRTlCQUYzRkM2RAorOjEwRERCMDAwNUJFMDI5OTNGNzc3MjBFRjc0QTAxQ0JBMTg4OUZBNUUwQworOjEwRERDMDAwODUzOERGNkY2QTRDNzkxN0Q3RTczOUEwQjI4MTBFQzI2OAorOjEwREREMDAwNUYwREREQzU2NkYwRkQ5MTY1RjYxRTUzMzlFRUQzQ0VCRAorOjEwRERFMDAwM0QyNzUyRTY1OTY5NUY1MkU2NDM3QjYzQzY0MDhERkY4QgorOjEwRERGMDAwMzE3QkM4QjdGRkZENzAyQ0I1QjdFMzUwNzdCMkNENjM2OAorOjEwREUwMDAwMzBGRTY0OUE2NUVGMUY3MTQ5MzNFQzlGOERDMUY4OTMyMgorOjEwREUxMDAwNTlGMUNBN0UyQzY3M0IxMkM3NjJEQzg5OEM4RjlGOUJBRAorOjEwREUyMDAwNUVCMjFGNDlFOTU2NjcwNUU5NjkyNUM4NUM4MkU0NDE4RAorOjEwREUzMDAwOTkyNTAyMEYwNTNCRUI2M0VDMzE5QUZBNERGMUZEMzQ2NQorOjEwREU0MDAwRURDNzNCOTIzNUVGNkY0OUNGRDRCQzk3RTNERUVBMkNBOAorOjEwREU1MDAwRDBCNENCOERFRTQ4NDJGQjBDRDY0MUY0QzBCNkE5MTQyOQorOjEwREU2MDAwQTc5N0JERkJGMENEOTk1MDlGQjA3RDhBMTNENTkyOURBOQorOjEwREU3MDAwRTJGRDg0NUQ2NTVFREM4Rjc2ODBBNzA5MTRBODUzQzUzQQorOjEwREU4MDAwMEZGQ0U2NjFFQzRDQTdGRjU3RUU3OTZBQkZDQjcxMEQzMgorOjEwREU5MDAwRkE3RjM3N0FCRkU0QjM0QjlCMkQ0NUM4NjdBRkQ2MEVFOAorOjEwREVBMDAwRDBFRjRGN0U4NkQ2MkVFODBFNkYzQUU5NDI3MTcwQkNGNQorOjEwREVCMDAwMzlBOEIyNkQyMUYwMDYyMzUyMzkxRUYyNzJDMjIxOUU5QQorOjEwREVDMDAwM0Y3NkFERkNFQzBCRTQ2NzMxMDFGQUU4MkM3NTdFQjlDNgorOjEwREVEMDAwNUM5M0YzRERFNUU4QTdGRkIzQ0EyODFGNEZFNEY1MkRGNworOjEwREVFMDAwQzBERkQ1MDBCRUIzNzk5QkVGRUYxMzRCQ0YzREE4RTc2MgorOjEwREVGMDAwNjI3RUE5MEJGQTVGOTIyMUY0QTdDQUJERjdGNzI5MEMzRAorOjEwREYwMDAwQkM2NzJCM0VEM0I0NjdGNzJBNkIzNEY1RDU4OURBRkFCMAorOjEwREYxMDAwODMyNTZCODJCRkVGOEUyRjJFRDgzNERCRTRBNkZDNEYxNworOjEwREYyMDAwQzVFNTBEQzExRkU0N0NDNkJDMTE0RTcxN0RCNzYxQkM1NworOjEwREYzMDAwMEEzQ0FBMkU3Q0NGODhFN0IwQjc3NTIzNDcyNUZGQjlFNgorOjEwREY0MDAwNTM2NUI1QTFERURGOTNDMUZERkNCN0JFMTE0RTcxMzA0NAorOjEwREY1MDAwRDdEQUVGNDcwMDRCOEEzMzdDODlDQkQxOEY3QUZBOENBMgorOjEwREY2MDAwQzFGQkVFMTFGRDlGMkREQUY4RjM2RkYwN0NGNDY1NDZFRQorOjEwREY3MDAwNzE5RjY3QTMzOEZGQ0Y2OTNDNjkzMEEwMUNFQ0MxRjFFOQorOjEwREY4MDAwMjVDN0VFMzdBMDVDNjk1RjE0RTFDMUI4RkU5QUM1MzZCQgorOjEwREY5MDAwOEEwN0NENERFQUY4QzAwMjVCQkZFRTk5MDM4RjU4MDBBNworOjEwREZBMDAwREYzRUM2MjRDODIwQjlEQThFNDYxMUQ0Mzc2NjFDMjA1RAorOjEwREZCMDAwQjk3QUNCMUJFMTJEODZFQjU4Q0Y0NjNDOTc0MDM5NThCOAorOjEwREZDMDAwQ0FFOTdDMjZFMjhEOTAyRkU4NjNBRkI5OUY3NUNBMUIyMgorOjEwREZEMDAwRTQwQkI4N0VBQzFGNzhFNjRGODcxRjgxNzlENzFDRTQyRAorOjEwREZFMDAwNzQ4RTExNzY3QUZCN0U1QTkwN0RDRjFFRTc3NDY5ODExQworOjEwREZGMDAwMUYxRUE3QTRBM0VGN0QxQjRDRDZDQkQyNzkwM0M1REQ5MgorOjEwRTAwMDAwNUMyRDdERUY0MDdBOEVCODJDM0QxRkJBMDVGNkE3RTY1MQorOjEwRTAxMDAwNjU3RTlGQzVCOUU2ODE5NDE3REI5RDNDQUZEOUE0MTJGQworOjEwRTAyMDAwMURDQTdBNUJCMzNBMEVGMTU2OUY3RjJFRTFDQTVDNEU1MQorOjEwRTAzMDAwQTI0Rjc5NkZENEIyMTFGRjlDODg3MjczRDkxRTIzMEYzRgorOjEwRTA0MDAwMTJFOTZFOUM3NTJBNzMwNDhEQjNGMzM1RjMyMkNBNzNGQgorOjEwRTA1MDAwMTNGMzZGOTdGMjdBQ0YzRkEyNEJCMjc4QjkyQTg0RENFMAorOjEwRTA2MDAwMDMzOTFEMTY4QjcyQkE0MjIxQkJGMkM4OUVERUE1MDg4OQorOjEwRTA3MDAwQTcyMzBBNkI3MTUwREUxNjhGNTM5RUM0QkJDM0U3NTZBRAorOjEwRTA4MDAwQkFBRjI0M0U5REUyOTNBNTdEMjlFRENBMjk3QkE2MEM1QgorOjEwRTA5MDAwNDRCREYyODNDNjM5NDc2MEU3RDhBNzE5Qzk4NEU3NzczQQorOjEwRTBBMDAwMzAwRkU5QzE0N0EyQ0EwN0EwNUY2MjgyODgwRjM4MTIwOQorOjEwRTBCMDAwRDVEMThBN0NGOUM4ODgwODA1Q0ZGQkExRkZENUQ4QkY4OAorOjEwRTBDMDAwNUNENzkxQjBGMjAxRkNERTA5MTk5NzNDRThCQUVFODkwMQorOjEwRTBEMDAwMUJBM0RFNUI3MjBCOUU2RjRGNjc3NkI0MkI2RjU3QjkzNQorOjEwRTBFMDAwOUVDQjVFRTdGNDI5Rjk1RThERTI4QkM2NzlCRTlEMzE0OQorOjEwRTBGMDAwRjFBQjBDM0MyRjVFRjkwQkUxNTcxNTcwMzNGMjM4QzRDRAorOjEwRTEwMDAwQUJENTczM0JFREQ5QTcxNTdFMUY4QTkzRUJGRkQ1QzMyMworOjEwRTExMDAwQ0ZGQ0ZBMEVDQzkzMDNCQjVCODFGOUNDNjlEQTRCRjdFOQorOjEwRTEyMDAwRkVFOEVERUM0RTdCRTdGRkQxOUZEQUQ1NUUyQThGMTgzMworOjEwRTEzMDAwNTQxNEYwOTNFQkVEQTY0RTNENURFQTdCREI3ODlDRkMzRQorOjEwRTE0MDAwOUIyMzdFREJCNjE0RUEyQkI2NDUxMDFDNEYzRjY5RjZDNQorOjEwRTE1MDAwMjAxRjNGQkRDNTRDRjZDRkU5RTg4RTYzQ0JCMUJFMkI4NworOjEwRTE2MDAwREJFOUExRDE5QzlBN0JEMTE2MUExQzFGQTJGQzYxNkYxRQorOjEwRTE3MDAwODdEMTdEMUUyNzlGMzBCN0UwRjlFRUUyQTczMkI2QTAyNworOjEwRTE4MDAwM0Q3NTcyODBFM0Q5MURFODBGN0MzNjhFRUUxOTYwNkUwNgorOjEwRTE5MDAwRkVGRDZEODIxRTkxQkUxQ0EwN0FBOEJGQjM5MTFFQjE3OAorOjEwRTFBMDAwRjg4NTNFQzRDN0U0RkU5RDdBMjI5Q0YyRTg0RjFGOTg5MgorOjEwRTFCMDAwRDQxM0ZENjVBRDg2RTcyOThGODdBOTU2MEZGMkUzQTUzNQorOjEwRTFDMDAwNUJDMjQ5MEY1QzY5Nzc2N0UzRkFDQjdFNzdEQjFEMDU5RAorOjEwRTFEMDAwMzhGRUZCNzEwQ0Q3RDNERUZDMDJGOTJCMDNGQjFCNUE3NAorOjEwRTFFMDAwQkU5RjZCNEVFNjdDQTA1M0RFRjJCOERCNTkxODc3OUJERQorOjEwRTFGMDAwNEM3MUI3MDU4M0UyMzA1RTU1REVCQkM4RTM2RUYzNTU2NAorOjEwRTIwMDAwQzU0NTc5MDcwRjg1Q0UyMzFGM0Q0ODlDQUI0QUZGNDk4MgorOjEwRTIxMDAwMENCM0M0MjMxREJBMTlBREI3RkRBMUI0MkQ2OEVGNENFMgorOjEwRTIyMDAwMUYyNEYyOUY1OTg3Qzg5Nzk0Rjg3NkFDRkE1NUYyOUY0RAorOjEwRTIzMDAwOTg3OUJDNUY3OEU4NzNFQ0YyNDEzQ0FGNzg4MUU1NkI4QworOjEwRTI0MDAwOERGRkE2N0FFNUI3MUFCRjRBNzUxNjIzQjk5QjVGRUYxMworOjEwRTI1MDAwMjhCODFCQ0FFNTAyQ0U1NTQ5RTU5MzEwN0U0QjFBMzYwNQorOjEwRTI2MDAwQkVGODBFQzFFNUYxMUY3RjhDRTMxRUIwOTJERjg2QkRDNAorOjEwRTI3MDAwQzNFMUE3Qjc2NzE2NThCRTEyRjRCNDU5QTMwNzlGNzgzNQorOjEwRTI4MDAwRjQ0MzhBMzczOUIxM0IzMzA3Rjc2RDhFRUEzQjgxRjdBOAorOjEwRTI5MDAwNzFCNUQ5N0M5RkZDMENDQTVEMDcwRUQxQkVFOEU3REJFNworOjEwRTJBMDAwRTVEQzVFRTE3Q0E1MTJENzExODNGMTJFRTU4QjA3RDE2OQorOjEwRTJCMDAwQjkzMEE3RjdFM0VCQjMwOTdFRDI5RkRCN0UzQUI0QkQ1QQorOjEwRTJDMDAwMjVFNzI5RkI5N0YzOTNGRENCNzZGRjI1RjZFQkFDQzk0OQorOjEwRTJEMDAwOTc4M0YyQjk3RkJBNDM5Mzg3N0QzNkQyOTcxMzY1QzU4QQorOjEwRTJFMDAwRTdGQzFDRUE2QzM0RDQ4M0YwRTZGQjNBREZCOTRCRjg2OAorOjEwRTJGMDAwNzk4RTFBNTZERDYzMDJGQzZCNkQ3ODM4Q0MxRENDNDdFNQorOjEwRTMwMDAwQUZGMTVDNDdDRTU3QzY5NUNBM0NEQTREODM4NDNGN0I1QworOjEwRTMxMDAwMDAxQkQwNERGRUVERTM4ODI3OTU1REYzNkZFOTc5NzcxQgorOjEwRTMyMDAwRjlCNzlERjlCNkZGRTBGOUI2MzJCRkI2QjBDQzUwMUJENQorOjEwRTMzMDAwOUM2NzJCRjk2MTYxMjYzQ0NGQzI3MzdGQUQ3QzJGQ0NFQgorOjEwRTM0MDAwRDVCNkVGOEUzRjBFQ0VFNDdFOTVDMjk4RDBGOUFFN0Y2MworOjEwRTM1MDAwMUVDNERGRDdCMzE2N0VGRkEwOTA4QkMzMDREQ0U1QkRERgorOjEwRTM2MDAwNUY1MjRGQTkxNjdDNUJFNjc5MEU2QkU2NzE5QkMzNDQ0NgorOjEwRTM3MDAwREUwRTcwMDFDQTczRUQ3MkJGNUI3QzI2Qzk1NTc5M0YxMgorOjEwRTM4MDAwOUYwMjdENEQ4RjBFOTUyRkVDQTM3OThDNjQxRDU0QkE5RQorOjEwRTM5MDAwOThERDg4MjU4MDlGQ0FEMUFDOUNDQUIxQUM5NkNBNzE2MQorOjEwRTNBMDAwNkMwMzk1MzdCMzA2MkE2RjY1M0UyQUQ5QTAxNjExRUY4NAorOjEwRTNCMDAwNzkyRkNGMzMxREJGRDA4MEYyQjVGMDhFRDA3QTcxRkJBQworOjEwRTNDMDAwMTVFMUUwQTFGQjAzQUYxNTBFNjMxOUJGRTdBRjBCM0NFRQorOjEwRTNEMDAwRkFBNzEzN0VFQkUxQTFDRkQ3MUNDMUZDNzQ3MUM5Mjg0OQorOjEwRTNFMDAwNDREQzY0QjQ4MzFEMTRERjVBQzY1QzU0MUY3Mzk1NzBGQgorOjEwRTNGMDAwMjhGNkJCOEQzQ0JGNTcwNzhGQjJEMDc4NzE0MUMwNjMwMAorOjEwRTQwMDAwMTVDQUNFQTJDMDNFNjU2NzNBRThCOURDMkYzMEM0RTIzNworOjEwRTQxMDAwOTFGRkVCRjc1MTNFMkY4QzI4M0RFRkIwRTM3RDMwQUIwMQorOjEwRTQyMDAwQTY1MDFFNzc0MUU5RjI2NEE4QTc2NkZFNkEwQUU1Nzk1QworOjEwRTQzMDAwMEYyQjdEMDFGM0JDRDM5RjdEOThCRkNGMkQyRDA4NzM4QgorOjEwRTQ0MDAwQzJCOEFCMUU5OTgyRjk4QzZFMTEzN0VEMTZGMUQyQ0NBMQorOjEwRTQ1MDAwOURBN0I5MUZDQkJERUExRUJBNkZDQzNEQzBFQUM0NzVGQgorOjEwRTQ2MDAwQ0FCQzcwMzU5OTlGQUZFRUIxQkI3QjY2QzI3QzEzQzY0OAorOjEwRTQ3MDAwRjlENjcwNDg5N0Y2OUUwQTc0RENFQTBCNjMxOEVGQkY3MgorOjEwRTQ4MDAwRDZDNERCQ0JGQjZDRTRGQUU0M0QzN0JCNzY2NTJFNTc5NAorOjEwRTQ5MDAwOTJBRTNDMEYxODY3MDA4RUUzNUUzNTkwRjJFM0RDQkI3MgorOjEwRTRBMDAwMTVFN0U1QzYwQjRGNzIyNzY1QTJERTg1NDlGMTQwMTdENworOjEwRTRCMDAwRkQ4NDFDNkVERDk1OTk4OUZCOTQ5RDI5RTI3RTYyMTM5MworOjEwRTRDMDAwMEIxMDhFRDM5MkNBQjNCMTdGOTkxNzlEMkRGNkE1QkJDMQorOjEwRTREMDAwNzI0QUE2MkIxM0RCRUI5RkNCQkNFQzkxOTlFRTNDMUM1NAorOjEwRTRFMDAwQkYyNkUyMjJFNTlCQjVFNUJEQkZDNjlGRDgzNTRGQkQyRgorOjEwRTRGMDAwREVDNUJDMjZFMjJCREFGQ0Y0RjZGOTI2QkFDRkE5QjBDOQorOjEwRTUwMDAwREM1RDhGMjFDQTM3NEVFRjE4OENGQTMxRjQzQjFDQzcwMworOjEwRTUxMDAwQUQzMUY5MTNGMjU0OEM0MkU2RjlFRkZBN0NFRjNEQUZERQorOjEwRTUyMDAwMURENEU0Qjc0QjNBRUJDQzZGM0ZDN0YzREIwM0Y0RjVGNAorOjEwRTUzMDAwRTg3MjE2OTRERjJFRTk0NkQyREQ1MENDNkY4RkM0N0E5NAorOjEwRTU0MDAwQzY3QzZDMzdFMkZENjM5NERGM0VFQTk4NUZFNEI3N0ZGOAorOjEwRTU1MDAwQThDRDZGNzdGREYzQkFGMkRCNEY4QUZCREU0RTVBRjg5NworOjEwRTU2MDAwN0Q0OUYyM0VBOTY1QkJGOUY5RUYzMjg1REYyN0I1RUNBRAorOjEwRTU3MDAwMzk3RTlGOTRCNDBCMTc4OUY1NTUxRERDQjYwNkNGRjk4QgorOjEwRTU4MDAwMTYzRDNFOTdFRUEzNjJFMjFFNTQwN0ZDMDREQjg1RjJDMworOjEwRTU5MDAwNUU1MjdEMUU0QzBEREE4M0E0MzdCNzkwREVBNUNGODc3RgorOjEwRTVBMDAwQTk3OUJDOENFQ0MxMUE5RDFFNUQ5RDI5RUM0MTIxQ0YzRgorOjEwRTVCMDAwOThEMEZGMTY4QTZGNzExRDU2QjJDRjRDQTQ3NzJFN0I3MAorOjEwRTVDMDAwNjJCOUQzOEU3NTQxNTc2Q0M3MEUzQTc3OTNFREQ5RTM5NAorOjEwRTVEMDAwMzE4NDBCOTJDRTE2QUY1MzQ4N0Y5NUYwQ0JERDZFNzYyQgorOjEwRTVFMDAwRDEzREM2REI3QjkzREUwQUZBQjZDODYzRjY3MjdCMUJBRAorOjEwRTVGMDAwNzAwNUUzRTE3NzQ2NzUyNEExOUVCQzczNEZCQTEzMzhDQQorOjEwRTYwMDAwMkM3QkE1REJGQkE3NzdFOEVFOUY3RTRBNzNGRkY0MzlFRQorOjEwRTYxMDAwRkMwRkY1QjQ1MzA2MkZGNjMzOThBNUZGMTJFRjI1MkUwNQorOjEwRTYyMDAwM0E2NTc0N0ExRDgxRkI5OEFGNzRFRkIwODRCRjU5RUNFMgorOjEwRTYzMDAwRDdCNURFNDNBQ0JGRUY1OUU2M0ZFOEVGMjM1RTJCRUVFNAorOjEwRTY0MDAwMjMxRUQxQ0Q3REM0NjZCNTU5MjVGREUxNkJBM0U2NUVFMQorOjEwRTY1MDAwRTIxQkM1M0E4QjFEQ0M4QkY3RkMwRTZEMzU2QUY2QkZGRAorOjEwRTY2MDAwRDhCRjgxQTEzRTE0N0VEOEE4RjEyMzk4MUREQTdBODMwMQorOjEwRTY3MDAwQzQwNzcxQkY0ODU3Nzg1QjNCRTE2OTI2NzhBNkQwM0Q1NworOjEwRTY4MDAwQ0Y0NUJBN0I5RTI1OUMzQUVGNzlFRTZGMjVCQzFGN0E2OQorOjEwRTY5MDAwRjAwNTE1RjlDMUI1REVGN0ZENDNERkVGN0RBNUZCQkM0NQorOjEwRTZBMDAwRjVGNzc0RUJFRkU1RUVFRTlFNkZCOUVGNzkyRENCMzQxNQorOjEwRTZCMDAwRURGNUZCNUU3MEUwQTdEQTdCQThDNTdFN0JFMEU3QkJFQgorOjEwRTZDMDAwRENFRkI2NENFMURGMTVGQkZEMzU1RTgwMDY3NEY4OTc5NAorOjEwRTZEMDAwQzg1MzBGMjI1OTRFODhFMDdDQUREM0FFMUYxRTQ2NzYzQworOjEwRTZFMDAwRDZCQjhFOTgzMjFCRDJCRjkwNTNFNTQyNEU4MTE1QzdFMAorOjEwRTZGMDAwRUIwMjVGOUMzRTFFNDc5MDdGOTRERjVGNTFFOEU3RjE5RAorOjEwRTcwMDAwMDQ4MzRGODVDRTBGQkFCRDU4RDE5Q0VGNzZCREI3OTgyNAorOjEwRTcxMDAwRTcxOTBGQkJDOEUzRjRGNEU3RkUzMjZGQThDMjE1QUVFOQorOjEwRTcyMDAwQkRCRkExOUIzQzIyRTlDNzAxM0Q5RTk5NTA4RjM3RjBBOAorOjEwRTczMDAwRkJFQzQyREM3M0JDNDk0RDBFQ0UyMzcyOTM3RjY3QjI3MworOjEwRTc0MDAwQzU5NzgwRjg2QzRCNzRDNzY3MTUwNUYyOEQ0NjYxNUVGRQorOjEwRTc1MDAwOTE0MkY2QTAxMDRBNTEzRkMyMzhDRjc2NENCMkVEOEJCMQorOjEwRTc2MDAwRjlBMzkxM0ZDMjNDMTk5OEJFREQzRjk4OUJCQkY4NkY1RgorOjEwRTc3MDAwNjA5NjNCMzEwQkU0Qzk3MUM1QkVBNjAwQkVGRENCRDA4RgorOjEwRTc4MDAwMzMwOTI4OUZDQzc4QUU5RDRGRTdCRUM5Rjg1RTdGM0YyNgorOjEwRTc5MDAwQkZERkUwMjBGREMyRjM1Mzg1RUM4NzMzRDhEOTkwMjA0QQorOjEwRTdBMDAwN0E1RDE3MjZGMjFBNzU3RkJGNDBEODUzRjJFRjE3MUMxNworOjEwRTdCMDAwODcyRTE2MDFERjlFRDFDNEYzQTg5N0M2QjcwQTNCOENGQgorOjEwRTdDMDAwREZERjNBQjdCRjk1RUU3RjYyQUUwMjI3QjdDM0E1N0QwNAorOjEwRTdEMDAwRDU0RkJEMTZCOTc5QTVGOEEyQTVGMUE3MzU3NjJFREJFMAorOjEwRTdFMDAwMTE3MzU1RTc4OTgxNzVGM0ZFOEYzRjEwNDFGMkU2RjgwQQorOjEwRTdGMDAwMDMwM0M4Q0YxN0U4QkY4REVDRkUxOUI1REEzOEUzNTkyQgorOjEwRTgwMDAwMkIzRkQyRTBERjZDQ0Y2NzlBRjdGRUQ4OEVCMDdFQjA5OAorOjEwRTgxMDAwN0VGRjhCN0RDNjRFMDNGODlEREQ2RDFFOEM3NDA2RkI1RQorOjEwRTgyMDAwMzYzNTJCQzgwRUY2M0Y5NDM2OUFFQjAxNTc1QUU3MTk0NgorOjEwRTgzMDAwOUFDNzMxMTEyNzJBRDdGOTQ5REQ1MUFBRkJFQkZDQkE1NworOjEwRTg0MDAwNzgxRThGQzYyRTk1QTVFOTBENDZGN0U0NzQyODNEOUNFOQorOjEwRTg1MDAwQTFGQzJDOUY2NjcxQkRGRDk4Qzg4MzNDMjZGMjIwOEZEOQorOjEwRTg2MDAwODlCQ0M1NjMyMjRGRjE5OEM4NTM5NEY5QTNDNzE0RTYzNQorOjEwRTg3MDAwQzI3ODhBRTk0QUY5OTNCMzE1Q0ExRkJEMDdGMUFGNjY5QQorOjEwRTg4MDAwNDk0NzBFRTZEQkQ1RTRGQTY3MkEyQUU1OEZBRUM0RjVFMAorOjEwRTg5MDAwODdDODFGQ0RDMUJDRjc1RDU5NzdGRTA4RjVGODUzM0QxOQorOjEwRThBMDAwM0M3NDJGQzlFRjc3NENFNjc1MTNBNzhGNTdCMjQ2MTEwQQorOjEwRThCMDAwM0Q3OEZCQkFFRkMzN0VCRTUwRDQxNkMyRTc5NzE1M0EzNworOjEwRThDMDAwNEY2NTJFQkY2OUUyNjVGMjRCMUZDOEUyRTcwQkVCNzU5RgorOjEwRThEMDAwRTVENjJDQ0VDRjVFMTFFNTE4RjVDMTU0Q0FGQkQ5NjQzQworOjEwRThFMDAwQTZCQzFGMThDNzY1MDgzQUZGRDdFNzY3RTVCRjZFNkU3RAorOjEwRThGMDAwNDFCRTIxRkQzMDRGNjQyNUYyNzNDRjY0RUU1Rjg5RkQ4OAorOjEwRTkwMDAwQTU5OUU3NkRGOTdEMDk5OEU3ODVGMTNFNzg2RjA2M0I5QgorOjEwRTkxMDAwQ0M1QzNDMEY4Q0RGREYyN0Y3RTEwOUIxMEY3NDkxN0VFRgorOjEwRTkyMDAwNjEyMDRGQUNFQUUwRjE0RjkwOEY4Q0NENzI2RkM2RjU0RAorOjEwRTkzMDAwQ0JGQ0E1QUFDOEJEMTQzN0YxNDI5NjgzQkU4M0Y5RDI5OQorOjEwRTk0MDAwRkE4MTFGQUM1NjA4Q0U1REZDNzBDRkUwRkVFOEYzREYyNQorOjEwRTk1MDAwQkI1QkZGRDlGOUJFREY2NDI1MDZGMkE3ODJGMkE2NUU5MworOjEwRTk2MDAwQzA3OUM4NzVDQjc5MDRGQUI5M0M1RTRCN0Y1MkMwREZFMQorOjEwRTk3MDAwQjUzNjE1RTk0NERFNEY5QkFGMkFCMzI2ODZGOEZFMDM3MQorOjEwRTk4MDAwQjE2RjU1NDlFNTdCNzExRDRCNkFCOUJGQUREMzFFNTdCOQorOjEwRTk5MDAwMzZGQ0Y4NjNEQ0FGODM1NkUyNzNERDdEQUY1RjY3RDU4RAorOjEwRTlBMDAwNkIwNzA5MUVCMENFOTlCOEJFQTA3NUJFOUIxNUU0MTdDMworOjEwRTlCMDAwM0NCQkU3QzNERjIwQThBRjc3N0RENzlBQzc2Q0VFQzExOQorOjEwRTlDMDAwRUY0M0VDRUE4Rjg2MEQwREQyQTNDQ0YyRkJGRURBN0I4RgorOjEwRTlEMDAwQzZDQ0Y4RjcxMDYwQkM0NjYxN0YzNDBBRkJBMzI5NEMxMworOjEwRTlFMDAwRkNCRDFBOUQzRERBRThFM0YxM0M4REYxMjY4QUQ3NjE0MgorOjEwRTlGMDAwRTJFRjJCNDhGOUJCRTIzRDFFREZCMzIyOTFEMTdCOUNCNQorOjEwRUEwMDAwMUZEMjgxRTJERjRGRjJBMEYzQkUyODA1RTQxQ0UwQzM3MQorOjEwRUExMDAwMTlCQkZCMDJDMjhGQjk5NzkzN0M1MDZGQjAzQTExOUYxQworOjEwRUEyMDAwNzdCRDdEQjNCMEFCQjhCQzI5MTJGMkE1MDhGQkMxNzVBOAorOjEwRUEzMDAwNjRGNTI0Qjk1MzI4QzYxRDZDQTkyNUJENzYwOEYzMDhEMgorOjEwRUE0MDAwM0Y4QkYwNDczQ0IwNUY2MzhGRkQ1RjBERjYyRDM5MTBCMworOjEwRUE1MDAwNjgwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA5QworOjEwRUE2MDAwMDAwQkZCNTFDRkMwRjAwMzhBRDc5ODMzMzAzODVBMzFBRQorOjEwRUE3MDAwMzBFNDU5MzMzMDVDMDdFMjMwNzM4NERDNEI3MTA0OUIyMworOjEwRUE4MDAwOUFGOEE3M0M2NUZBMzc0ODMyMzA2QzAyRTIyRDQwQkM1OAorOjEwRUE5MDAwNEQ5Mjc0RkRCN0I0MTBFQ0JEQUEwQzBDQjc4MUZDNkU5RQorOjEwRUFBMDAwMjBGRDVEOUQ4MTYxMTc5MDdEMDc4ODJGODNGODQwQ0MwNAorOjEwRUFCMDAwQUNDNkMwMjAwRUU0QUIwMDY5M0YyMEQ2MDdFMkJCNDBFNQorOjEwRUFDMDAwN0U5QTFBNkVGM0VGNjlFMUI3N0Y5QjA2MkFGRjFEMUE0MworOjEwRUFEMDAwRkY5MjNBN0VGRDk5OUFGOEU1REYxMTkwQzc4NjFGREIxOQorOjEwRUFFMDAwOTExRjFGRUFGNkI0NDkyN0I0QzIwN0QwRDJGNTRFMTNERQorOjEwRUFGMDAwMDY4NjBCQTYwQzBDMjJEMEI0QkYxNzQ5NUUwRDI4QjZCMworOjEwRUIwMDAwQ0IwNEMyOUVBQjA3NEM3QjY2NDAzRThFN0MzMTBGMjgwNworOjEwRUIxMDAwQkYxMTI4NkY2NDhFREY3RTA1NjY1NEJFMDAyRkE2OUE1MworOjEwRUIyMDAwNkY0QzA4RjYwNDIxNTRCOUMzQzI5OEVBQjk0NDE5MThDNQorOjEwRUIzMDAwMDA2NTgzODQ4NkQ4MDMwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwRUI0MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFNTdEMEQ3ODU0RDVGOAorOjEwRUI1MDAwQjVGNjNFNzNDRTlDOTk2NDRFMjY5MzEwQzI0MDAyNEU4OQorOjEwRUI2MDAwN0VEMEE4MDk4RTEwMzAyNjEzNzIyNjNGMjQyNDAxQzNCQworOjEwRUI3MDAwNEY2OTVBNjk5REEwNDVEQTgyMjJEQTVFNkYyRjVGMTlDQworOjEwRUI4MDAwN0UxQTIyNDVDNTE2QUREQURFREU4MTJBNEZEQkVCNzMzNQorOjEwRUI5MDAwOUY2MEE5RTU4NjQ0MjYxMDEwMEQzRjExQURERTdFQjZCQworOjEwRUJBMDAwREY4RERBOEJBMTBEMzhDMTYwRTlGNzYwRjlGNjVBN0I4OQorOjEwRUJCMDAwRUZDQzlDOTM5OTA0RDRFRkRFRUYwNzFGOUY5MzczQ0VBNQorOjEwRUJDMDAwM0U3QkFGQkRGNjVBNkJCRjZCRURCNUY3NThDOTQ0RTI1QgorOjEwRUJEMDAwQUEyMEU0MEFGQ0EzNTdERjY0NDJFOEEzOTFBQjc4NUU2NQorOjEwRUJFMDAwNjkyNzQxQzcyRDg0QTREOUY3RjZDRUM4MjA2NDlFMjY5NAorOjEwRUJGMDAwN0I2QjNEODQ0Q0IyQjdGNDkwNjI0MkNBODlDRDYzQ0I0MworOjEwRUMwMDAwMjFBNDVCRkE0REVGMEM3QTdGMzRDNUVBQjUxMUY4RjcxMQorOjEwRUMxMDAwMDAyMTczMDg1OTY3QTc3RkQyRjI0NzJGRDIyQkZERkU0MAorOjEwRUMyMDAwRTg1RjJEMjEyMjExNTIyMzM3MTIwOUJFQjc0QkJDQkMxRAorOjEwRUMzMDAwQUUyREM4MjRBNDlBQjA3RjczMkY5MjZBNUE4QzU0QkIwRAorOjEwRUM0MDAwRUY2RDI0MzMwOEE5NzJEMTUyNzZGNkVFMEEyQjRGMDhFNQorOjEwRUM1MDAwMkQ1RjQ2NThGREJBRERGOEJFOEM2QzFGOTI5RDcwMTc3MworOjEwRUM2MDAwOTE5QjhBNjg3RDk3NTVFMzdCNzdFRDA3QzQwOUU1NjI0MAorOjEwRUM3MDAwOUU0MzNGRTAwRkNBODNFQjQ5NEFDNjE5MDdGREZCMzZBNgorOjEwRUM4MDAwNzJEQjE1OTk1RTk1MDk4NERDMUVFNThCRjk0QTQ4MTAwNAorOjEwRUM5MDAwRjlENkMxQkY1NzQ4RDMwQ0I4MjdFNDQ1NkMzRjVERjBBNworOjEwRUNBMDAwQjFBRTlGQjg2OUJGMzM0QTg4Qjc5Njc2NzA1MjlEREU4MQorOjEwRUNCMDAwMEQ3QzI5QUI1NjNEMzY3QURGNUQzMzY3NzJCRjQ2Qzg5RgorOjEwRUNDMDAwMEZDRkI1Njc5MTQyRkE3OTY4MzVGMjMxODNGM0IxRkIyMgorOjEwRUNEMDAwREM0QkVGREM0N0JGRjdENTExQUY4RERFMUZCMDdBMjdENQorOjEwRUNFMDAwMzcxNThFQTZDNzU3OTc5RTQ0NjgzRDRGMzQxRDcyNjBGNgorOjEwRUNGMDAwM0Q4NEZDRUQ0QTI2QUYyNzhGOTBDRUE2RENENDQwOUMwNQorOjEwRUQwMDAwRUZDNEY1RjEwRDJFNDI2Q0QxRkIxRDNBQTk2QkQ3NDYyRAorOjEwRUQxMDAwOTc3QjA5MDY3MzM2NTRCRjFDRTkyQ0UzQkNGQ0ExNDQ2NQorOjEwRUQyMDAwOUFEQkIxREQ2NjFDQTcwMzlDRkUxRUZEOTBBM0JGMTBGRAorOjEwRUQzMDAwREU4NzFEMTZEQThGRTA5MDg1M0M0RkFCRTgxQ0FDNENBQgorOjEwRUQ0MDAwMDY3QTM3RTk5NjMwM0NFRjFDNTQ0M0MwMEZFMjZFQ0Y5MQorOjEwRUQ1MDAwNUE1NDM0OUFGRTAzNDMyQjY2NjJCRjAyQUIwREVERkU5QworOjEwRUQ2MDAwNjA5MEY2NTc4M0ZFQkRFODk4NDdFQkI5MzA2ODcxQzlFQgorOjEwRUQ3MDAwNzQ1QzlGRTBDRjBGMDREQTFEMkVGODZFMjAxREM3RjNFMAorOjEwRUQ4MDAwRjEwREY0RUYxQjEyRjNFM0YxQjlERkM4MEQ2ODUwQ0VCQgorOjEwRUQ5MDAwNkVFNEM3RTA4NTYzNzk3NERDM0E3NzJBNUVFOEQ3Nzg1OQorOjEwRURBMDAwRkNGQzAxNkY0N0RDQTc3QkMzNTUyRTVBQUYyRkUyOTVDMQorOjEwRURCMDAwNDA4RkQyMDcwOTk5OTAwMzdBRDE3OUQ4MDlFM0RCNDhDQgorOjEwRURDMDAwNTAyRjdDNEQ5NTQ5RDM1OTNGQkNCMjA3REUxRjk3NDE2OAorOjEwRUREMDAwM0U3Q0FFMzBGNjYzODQxRUEwRUYwNkEwRDM4REQ3QTc4RAorOjEwRURFMDAwNzk3QjRGQzEzODYyRkYzNjI1NUQ0RkU5QkQ1MEEyNjA4NworOjEwRURGMDAwM0RCQkY1NEQ3RTA1RUJCQjFDOTY0MTFFNTczMzc5Q0FEMgorOjEwRUUwMDAwRjAwNDM2NUE4MUZGRjcxMDZGRDAwM0Y1MTJFQ0Y3NEY3QworOjEwRUUxMDAwNzlGRjdGQzJFQjEzRUQ3NDBFQTZGQjE1QTBBRjk5NzhCNgorOjEwRUUyMDAwNDE0RDZBRTRGNURERjBCRDZGMTVBMzdGREFDMzZCMjVCNAorOjEwRUUzMDAwRTBERjc1RUJGQkYxMUFFMjc0RUU4MEVGNjk4MUVDQjU2RgorOjEwRUU0MDAwMTEwOUY4MzZGNUExMzA1RTc3NkVGQzdEMzdEMDk3QkFBMAorOjEwRUU1MDAwODUyNDgxMkQ3OEEyREE5MjA2REYzRDMxNkY0QTEyQkNGQgorOjEwRUU2MDAwNzczNjUxQzVBN0Y2QzBFNzc1M0REMDQzRkJCM0IzNUExQgorOjEwRUU3MDAwNDEzQTc3MEU1MkZFRDM3MkNFQTBDQjBCN0FFRDBDN0FDQworOjEwRUU4MDAwRjhENUVCODVGMjA3MzkzRjBFRjA3NkJCMzgxRENFQTBFMgorOjEwRUU5MDAwQ0VDQkFEMkQ4NDcyQ0U2MDEwQUYyMURFNEZFMjU5ODMxMAorOjEwRUVBMDAwNzJCNzhFQ0JERDQxNkJFMDI2RTA3QkM2MjA3MTEzQUFFMgorOjEwRUVCMDAwQ0YwN0NFRDc0Rjg2NzY0NUZERTZGMjdCOUVGRDlGQjMwQQorOjEwRUVDMDAwRTBGREM0NDFGMkFFNzUwNjVDQzMyREQwREUwREQwMEY1RgorOjEwRUVEMDAwMjdEQ0Y3QjU0ODY4QTc0MkE4NDdGQTY1MEIyMTA1NTExQQorOjEwRUVFMDAwM0I5NTcxQTk2OUZFMUQxRUI4QUI0MTNEMTI3NkEwNkMyMQorOjEwRUVGMDAwNTBCNTQ4QTlCMTdBNTY4RDdBQjA5M0VCNDFGNTYwMThCOAorOjEwRUYwMDAwRTU4NEVBRDk2MTBCRTU1M0YwMUNENTMzMkE1RjA3OUFGMworOjEwRUYxMDAwMkMzOERFQ0Y0NTU0QjRDM0E0MjA5Q0I1Mjg2NUI0MUU1QworOjEwRUYyMDAwNzUwRUFEOUMwOUZDMTZGQTM0REE3RUZDQkZBMTVGM0I3RQorOjEwRUYzMDAwNjkzRjAyNzFFQzlBNjg0RkU4OUJGOUZEQjhGQUU2MEE1RQorOjEwRUY0MDAwQTJCRTc1NTI3RDBCMDIzRjlCMkM0OUY5QTA3RjZEMTYyNgorOjEwRUY1MDAwRDQxMzc3NzU3QjM3RDM5N0Q1QTg2RjE5RjczMDdBMjZGNgorOjEwRUY2MDAwMkQwRkExMUU4Q0E3NzczQjNEMkVCRjAyRjUzNzMzM0RGOQorOjEwRUY3MDAwRUQxQzdDNkZBMzBEQzY2MzM5RTE3NkUyNzIzN0RDRkJEMgorOjEwRUY4MDAwMUU2NjdBNkRENjMzQjMxRUE2RkFGQTUwM0Y3M0I2NDRBNgorOjEwRUY5MDAwMDg1QzNEOUIxQjUxQUU2OTJCNDlBODdGMDlGNEIwMTM1NworOjEwRUZBMDAwRjRCMEY4RkYxRjNEQUM4Mjc5OUNFQTVEOUE3NjZCOEZENgorOjEwRUZCMDAwOEJGNjdCN0U4NDMwM0NBNDNERDEwM0YzNzg0REI2OEQzNworOjEwRUZDMDAwQ0RFMzUzREZCRUYzN0U3QTdGQ0NFQTQwRkUxRjlCNDg0MQorOjEwRUZEMDAwMUYxNkMzQkQ4QzdBRDc5REIzMzU3QjFEN0QzRjNGNDM0NAorOjEwRUZFMDAwQzJGNzg0QUM0MkZEQUUxNTc4MDkxRTUxRkRGMUY3NEIxNgorOjEwRUZGMDAwNjQ0RTNBOTQ3QjdGNDcxNUZERkVENTAxRTI4NTU3QUZGRAorOjEwRjAwMDAwNjZDQjU4REZFMTQxQzJGNDk4RUI2NzJERUZFRjYxRkU2QworOjEwRjAxMDAwRkVDMjI1MTIwMkZEQUMwMDQ4NDI5RjdGN0MzNjMyQ0RGNQorOjEwRjAyMDAwNEU1RjdENjhCOTVDNDQ3MkU5N0MyQ0Y4QzU3MTQ2MEQ3MQorOjEwRjAzMDAwRDdGRjU3MzM2NDFERUNDNkUxRjUyOTIxOTI4M0Y1ODU4RQorOjEwRjA0MDAwNDFERTVFN0REODE2OTI2OTdCMTdGMkYzNUUwODEzQzAyRAorOjEwRjA1MDAwN0Y5MUVCRDdEMUY3M0RBRThGNTI2MkY1NzM4MENCRUY0NgorOjEwRjA2MDAwOUZCOEZDMEU3MjNDQjFFM0U2QTY0NTEyRTVFRkFCRjlBMgorOjEwRjA3MDAwNzlBODVGMTdGMjNGOUE0NjI4QUJFRkNGRkJDQjE5QjhDMAorOjEwRjA4MDAwMTIxMkI2MDI1RTMyRDcyM0JFN0ZENTFERjhCMjQ0NzE4QworOjEwRjA5MDAwRDU0MEU4N0QyNzhDRTdCOTdEMUZDRDgwMkI3MTRGNDA4RgorOjEwRjBBMDAwREMzNTFFM0VGMzA5MUMxNkU5REIwQzM4ODQ1NDUzMzk1OQorOjEwRjBCMDAwOTkxMzk1OTM0OTkxQkVDM0MwMzdERjMwQzM2M0E0NkVFMworOjEwRjBDMDAwMEQ4RTRCQjk4QkYxQTVGQkUyNUI1OUYwNUQwN0U3NUI1OQorOjEwRjBEMDAwRDc1MDVGMTZEQUM3M0E2MzNENURENkZFRTU0REFDN0U4QworOjEwRjBFMDAwRkNERUU3NjJFMzJBRTg3OTk5RjdFQjY5NDkyMjBDMjcwRAorOjEwRjBGMDAwQjJGMUYzRjFFRkU3MkE3RDEzNkVBMTc0Q0MzRDI2N0JDQworOjEwRjEwMDAwMzdEMjQ3NzMwN0ZBQUI0OTFDM0JCNDVCNEE0Mzc5QUQyRQorOjEwRjExMDAwQjg2NDk0RDdBRThCNDc2NUUwMEJBNTU3MDY3QUNCMjMyRQorOjEwRjEyMDAwN0QzMkIzRTM0Q0NFN0M1Q0NFQ0EyM0E3MERGNjVEQjQzMgorOjEwRjEzMDAwREYxNTM5REQwMEVENUYxODYwRjYyQTExNUY4NUZDMUNENAorOjEwRjE0MDAwRTJFM0ZDQjJEMDU3MTI3MkRDNDJFNUU1MDhBNTdGREJCMgorOjEwRjE1MDAwMThERkQ3Qjg2NDAzREQ0MkZGQUFFQzBFMDM1RUFGQjgzOAorOjEwRjE2MDAwOTQ2RUMyRkY0NjdBNEI5NTMwRjJBQjE0RjhFNTQ5Q0M2OQorOjEwRjE3MDAwQUZGNTUyM0FENjVGMzZGMEU5Rjg2NUI2MkJBMkRFMkUyRgorOjEwRjE4MDAwRTA2M0UxNjhCQTA4MDhCNUEwNUJGRTNGOUZBRjlERjA2MQorOjEwRjE5MDAwMDdGMzVGOEU4MjlFOTJGRUJENzI1MzBBQ0MyNzFBREE2NQorOjEwRjFBMDAwOTNCMjZBODlFMTcyREVDRjQ2Rjg5NjM2NTUyN0Y0Q0FFMworOjEwRjFCMDAwMjNBMTlGNTdFRjkzNDJCNTgwMzdCQzNGNDMzRkYxNDJCNQorOjEwRjFDMDAwQjFDRDAzNzY2ODkyRTcwOUE1M0Y0NkRFRUFGOUY3MjM1OQorOjEwRjFEMDAwN0NEQ0EwNjMzRkJCNjdCRjlEMDVFNUJBQTY2RkNDODYwQworOjEwRjFFMDAwNzE5OEVGNzlEQkIxOEVGMkZGMjhENzlCOEUwRDc1NThBMQorOjEwRjFGMDAwQUVFQzEyNzlGNDU2MTg5NzdDQTY2NzczNzk1RjdBMzg2QgorOjEwRjIwMDAwREYwRTcxQkI3MTkwQ0Y5QjZGNkQwOEUwRjVDRDBEQUIzQworOjEwRjIxMDAwRjA3QTdBQzM1QUJDQkU3QUU5NDUwREM2QUZCNzIwMEY2MworOjEwRjIyMDAwRTdBRjNBQTU1RDg5RTc1Nzk1MEUxQUU1RTY2NTBGQzU4NAorOjEwRjIzMDAwM0JCNDdDQzNFMDhBRURCN0QyN0UxRkJGNjQ0MUZCN0M0OAorOjEwRjI0MDAwQkMyMDZGNENCQzIyRUM4NzI4Rjc4QUZCNjc1NUMwQjdGRgorOjEwRjI1MDAwQzYwMTRBNkVDRUU4RjI2Njc5MkQyMzUyM0JFMEJGMzJGQQorOjEwRjI2MDAwRUZFQjBBQTFGNjcyNDFGMTJFMkQxNkM3MUMzODk3NTkwMworOjEwRjI3MDAwMDRGNTFFOTBGRUIwNjQ5NjI3MzExRDY1QkUzRUVDRTc5NgorOjEwRjI4MDAwODJGMEVGMTQ0RjRBRTI3MjI3OTRCRUM2NTlFOEE3MzJDMworOjEwRjI5MDAwRkQyQUYzQkU1QkFERDNGNjZBMEI3NzM1QTI1QzBDMkI2RgorOjEwRjJBMDAwMTY5MDhCQzZDMkJEN0M3QzVEMzgxRTBCQzQ3QzU2MkM3MAorOjEwRjJCMDAwRDc4NTgwOUVDMTBCNDg2NzZGQTEzQzExRThEQjY2OTE0MgorOjEwRjJDMDAwNTEyRTE3Nzg2Qzg4NjcxM0I2M0ZBQzkwMzBFODk3MTJEMAorOjEwRjJEMDAwQzY3MTNBNEVFQjAxQjkzODQxRUQxRTdCREVDN0VFNjlDRgorOjEwRjJFMDAwQkRGMEJFM0JDN0E2Nzk4MTlGNkUxMThGNTg2NTkwOEY4OAorOjEwRjJGMDAwQzZGQzU5QzdCRDk0RUU1RUI3OENGOEIyRjc1MkE1OTIyMgorOjEwRjMwMDAwNDZFRjRGQzBGQ0VBODlDQTY3MTk5N0NGMTMzMEVFMjA0OQorOjEwRjMxMDAwQzcyMTE5RTczRjgxOTc0NTdENUQ5NzcyMUYyREE2RURBNworOjEwRjMyMDAwOUQwODU5RTM3RURGNTQ2REQ0QzczQkRDMEVDMzdENzU2OQorOjEwRjMzMDAwRjYwNEMzRkQ4OUMxOTk2RjM2NDE3Qjk0N0VDMDczMjQ2NgorOjEwRjM0MDAwQjhEQTQwN0YxN0Q4N0I2OENGMjVFMUZDN0ZGNDcyRjVFRgorOjEwRjM1MDAwRTBGRDUwMkU2NEE0Q0I0QzQ3RUZBNURDMjc5N0QyN0E3MgorOjEwRjM2MDAwOEZFRjkzNTE0RUFCREQ0NkJBQUEyRUJFNzkxQ0UyMzgyMAorOjEwRjM3MDAwMERENEJFMDBERjVFRDYxNTFERkE3RDYyNUY0QTY4MjM5QworOjEwRjM4MDAwOTVDQjk3MEI1Rjc3MDA2RUEwRkZCNDA1QjQ5RDJBQzJBMgorOjEwRjM5MDAwQzZCNzMyQzM1OENGRjFDMUY3QkUwRjc2RUE4MjVENDZEOQorOjEwRjNBMDAwM0I1N0Y5RDc0MzVCMDA1RTlEMkE3RUIwMDdGODdDODAwRgorOjEwRjNCMDAwNDhDOEE3RjI3M0JCNjVBODZGNTlDOEY4RkREMkU1NDZFNworOjEwRjNDMDAwRkVBQzU5M0FDMTY0RkY4REYxQTUyQTBGOEIxM0NERjUyMAorOjEwRjNEMDAwMEU2MTdEQTUxMEZGQTFGNzk1OUEzMTJFMzQxNzhDNDE0RgorOjEwRjNFMDAwNENCREU1QTZCODUwQTk4N0M1ODU0QTIxMkUyNENBRTU5QgorOjEwRjNGMDAwOTA1MTc2OUZERTYzRkJFNjc5RERBQ0RGMDlGNURGNDJGNQorOjEwRjQwMDAwNTY0MTNDODU0NDE2OEY4MzVCMzZGMUY4OEFEMURFMTI3MworOjEwRjQxMDAwNjVBNzA0RjI1MENBREJFRkIwQjYzQjgwMkVERkFEQ0M1RgorOjEwRjQyMDAwN0U5MTQ4N0FEQzc4OTVEOThFMTBGMjIwQ0E5NUUwMjMzNworOjEwRjQzMDAwNzEwNTQ5QzYxQ0U4M0YyRjYzQjY3RjlDMkY2RDc0Mzg1OQorOjEwRjQ0MDAwQUVFMDNDMTBFNEY4QzUxMzU3REZDRERGNjc3MzdEOUY1NgorOjEwRjQ1MDAwMzc0MEVENjYwNjhDOTdFQzAyQkI3MUZDMTJEMTQwMUY2MQorOjEwRjQ2MDAwNEY1MTc5NjcyREY3NUY4OTk1REI4NjgxNzY5NDRCNUFFQQorOjEwRjQ3MDAwMUU0NjkwOTZGN0EyRkUzNjRENjZGQURCOUQ1M0FCQTQ2RQorOjEwRjQ4MDAwMzFGQjE5NTdERkNEN0EzMDQwODI0RjE1RDM3MTNEOUU0NQorOjEwRjQ5MDAwOUZGN0U0NTJGQTVERUYzRTYxMDcyQzNBRUFENTNFODZDQgorOjEwRjRBMDAwN0I0RjBDQUU0Mzc5QkQ0MEU1MTVEODNFNUFFRjRGNkIwQworOjEwRjRCMDAwQjFGM0ZFN0Y5NkJFOUJGNTdDNDRGRjQ3RTkzQkIzNUIwRgorOjEwRjRDMDAwQzc4NzJERDg5RkFBOEIwQUQ2RDM3MDk5RTAzQzZFRDZGOQorOjEwRjREMDAwRkYxM0RDN0Y3QjU5N0Y1M0YzQzI3QzU4RjgzRUZBQzc5OQorOjEwRjRFMDAwRTQ1M0VCM0JGMzQzMEUwQzEwNkNCRkZDREM3QjMyRURDMgorOjEwRjRGMDAwRjlFN0E2RUY0MkNGODVERTVFQjNCRUZGMjdFOUI5Rjk5MworOjEwRjUwMDAwRjlCNzJEMUNGNzI3RDBEM0E4RkUwN0IxRENFNjE0NTJCQgorOjEwRjUxMDAwMDA3MUI2MEUyOUQ5QkIyOTA3RjQ5REM1N0RDQ0U1MjcxRQorOjEwRjUyMDAwQzgyMjFFNkIwRkZFOTFGNkFCODUwQTRCMkE2NUY1MUFCMQorOjEwRjUzMDAwRDIzRjBERTQ2MUUyNjQwRkQ2Nzc5RkE1M0YxM0VFM0YwMworOjEwRjU0MDAwMjQ5MUNDOUI2NUMwQ0Y2NDNGQ0NCRjkyNEVDOEMzOTQ3RQorOjEwRjU1MDAwMjRDOUUzMjJDQjY3MTJGMkI4MUNCMENCQjQzRTY5MjBCOQorOjEwRjU2MDAwRkM1Nzg5RjI5OTNDNDQzQzgwMDc2RjkwMDIwRTc4NkVGQworOjEwRjU3MDAwQTM3Q0QyNjg3OUEyOUM0NjlDNDhGRDM3RTRENzQyQUU3MgorOjEwRjU4MDAwNzQwQkVENUExOEUzRjAyNUQ2QzE3RUMxNzc5QzNGOTZFNworOjEwRjU5MDAwQkJDRURDNENFQjI1NjFFOUNBQ0REMTdFRUVCMTg2QjJBMworOjEwRjVBMDAwQkMxQUY0MzNGNEUzRkIyMDZFRjU4Q0VBN0QzRTBFREZFQgorOjEwRjVCMDAwMkQ5RkIyOUY2MDdFOTA5RjE2QzZDRkEwMjVEOUZCN0M2MQorOjEwRjVDMDAwMUNCQzM1RkZEQUVCN0YyQjk5NUVDQjgwOEZCNzhDRTZDNgorOjEwRjVEMDAwQTMzNDQ4RjkwNzdDNTBGRTc2MDVGQ0M0MzIzNzkzMkZEQworOjEwRjVFMDAwRjk0MzU1ODczODBEOTFFREExRTk3MUU4NThDM0U5NzhFMQorOjEwRjVGMDAwNUNENjZGQTNDODg2Qzg1NUVEQzg5RjAzMzBGRTFBRjBDRAorOjEwRjYwMDAwMkY4MzdDM0I0NkJFRTZDOTJBRDIyNTM3OTBCNTM4QkY0QQorOjEwRjYxMDAwOTBCMDA1RUNDODc4RTM2MTU1ODgyMkMzMzhGNjVENDFBNworOjEwRjYyMDAwQkJEQkNBRTlCM0QxRTdEQUNDQzRFMzI1Mzc3ODIzNjE4MQorOjEwRjYzMDAwM0E0RUU0NDMzNjRFMDdFNjFCRTU3MjNEQTdGRjQxNEVDNgorOjEwRjY0MDAwMTc5ODI3QThCRjE0RUFBN0ZDOTJGRkFDQUU4RDM3NEZERQorOjEwRjY1MDAwNkMxN0ZDRTdGQzMyOTczRkYwMjVENjdGNTE3RUFCQ0M5MAorOjEwRjY2MDAwRjQyOTc4RURFM0I2NkM1MjVFRTI3MTEzRjIyRTBEMUVCMgorOjEwRjY3MDAwNEQzNDdFNkI0MzcxRjQ3QjhFNkNFMUZEMEQ0QTU3QTNENAorOjEwRjY4MDAwMEZGM0I4NUNDQTU1NzREQ0EwN0YzNTQ2M0U2RUU2RkRDQworOjEwRjY5MDAwNUFDRUVCQkQ0QkQyRkYxRUU0RTEwNkE5RTkxRkUwNEFCQQorOjEwRjZBMDAwQUFGQjUwRkY0MEM2QTFEQ0NENDRGRjZGRkNGRDA2RDA5NQorOjEwRjZCMDAwNTM1MjY3N0M0RjlGNkZDMkVGOUFGQjcwN0Q0QTNDM0Y2RAorOjEwRjZDMDAwMkNFOTVCNjRGNkJFMTVCRkQzOERFRkE5MUNCNkMxNzNFMAorOjEwRjZEMDAwMkEyRjQ0OUUwOUNGMTkzRkE5OUMxMDNCQkQ2RkRENzVCMQorOjEwRjZFMDAwRjc5NzgxQUZGNEZCQzdCMDdFNzJEQUYwQkQxNTBDNDQxQQorOjEwRjZGMDAwM0FCQjRBMzNEOUY1NTk5MDNCRUU5RjZFNkVENjkxQUYyNworOjEwRjcwMDAwMkE1OUNCRkQ2NzM2OUZDREU1RjM5OUZEQUY2QzFFQkM0MgorOjEwRjcxMDAwRTA1MjMxQUVBNTI0RTlBMTMwQkRBNkJCQzIzQUM0MDM3NAorOjEwRjcyMDAwMjc5MEJFMjBGODYzQ0I5NkNBMDYzQkRGNkM5QTVGQkU3QgorOjEwRjczMDAwN0M4RjcxRkU1REJFM0FDQjcwRkZENTg3RjIwQ0Y3ODFFRQorOjEwRjc0MDAwRjUzNzFCRUE1QkIxNjU5NkUxRkU5RUVENjU4NkZCOTU5QworOjEwRjc1MDAwM0JBQjBDREZBRkZBNDk4M0UxRkQzNzlFNUI2MkI4NUZEQworOjEwRjc2MDAwRkRDMjlENzFENzM3QzU3Q0Y3ODhFNURERDU0REI0NUYwNworOjEwRjc3MDAwOUJFMTU1MEM1RTU0QTJFQjk3MTY4NkM3OENERjUxRjFDNgorOjEwRjc4MDAwRjMyODczQTAxQ0MxNTA4NDU5NEUxNUQzRkE2N0ZGODgyMworOjEwRjc5MDAwRkVBQzMzQ0NCNzg3ODIzOTE5MDAxNUY0MUM0NTQzRkMwNQorOjEwRjdBMDAwMUZENEZCRjIzM0EzNzhBMENBQjNCMjMxREVGQzJCRTgzRQorOjEwRjdCMDAwNTE3ODM5M0ZFOUFGODI3MUQzMTU2MzM5ODVBRkQ3NkE4NAorOjEwRjdDMDAwREUwOEM2NjFDQ0VCQjU4QTY3MUVDRUVGNjY3QURGOTFBNAorOjEwRjdEMDAwNTMzMkMwMkVEMUJBM0RCODRFQUI1REREN0MzQTZFRkZFMAorOjEwRjdFMDAwQTgyNUJDQUFGRUYxRjZGQ0QwQ0ZCQ0M0RkQ5QTVCMUNEOAorOjEwRjdGMDAwOTE4MUJDQUJFRDU3OTQ0RTIzRUUxMUVCRTQwQjU4NTFDNQorOjEwRjgwMDAwNTI5QUYzMUNGQTYzMEI4MDNFOTg5RjhCMTlERUIxRDM5QQorOjEwRjgxMDAwRkZEODNDQ0JGOERGQzBDQjM3M0RFNEIyMDIzRTZFQUE0NgorOjEwRjgyMDAwMzZEMkQ5QzA3MTE0RDU0MzA1RUM0NDY5ODFFOTNERDA4NQorOjEwRjgzMDAwMzkwM0NBMTlGMTUyMEY5NzQ3NERFMUVCRTU3M0M4MUMyNAorOjEwRjg0MDAwMUMwN0FFQjc4Qjg0REVENkIwMzgwNzcxQzU1RjQ3QUZGMworOjEwRjg1MDAwQkY0NDBCQ0RDMkY2NTFGRUM0RjNENzBBRjI5MkUxQkIwRQorOjEwRjg2MDAwMDU2REM0NjNBM0Y4RTQ5MUQ5MUI1RDk1ODBGMzc1QUI3NgorOjEwRjg3MDAwQjc4RTk2QUVGMkYyNzg5MzJFMjM5RUJEQUU4MEREMzcyMgorOjEwRjg4MDAwNTZCM0Y4NTM3REEwMEZFMzgwOERGNzg0MzZDMjc1Q0E1NgorOjEwRjg5MDAwQUFCMDgyNzQ5OEY4RkFBQzI3OTQ4NkQ4ODBGMzM3OEI5NAorOjEwRjhBMDAwRjMyQjRCRjA5NUYzNTFEOEYxMjlBQjhERTNEODU4NkM3RAorOjEwRjhCMDAwRTRENzQyQ0U0RjMzOUYxNzcyM0UyRTM0RjFCMTBCRkU4OAorOjEwRjhDMDAwQTA3Qzk5OUQ4MDhGMEIzODFFQjVDRkU2RkVERDcwN0E0NworOjEwRjhEMDAwNUNCRkYxNTkxRTFGMTNGMkEzOThFNjM1NjEzRjQ2RTY1RgorOjEwRjhFMDAwMzcyRUJGOEY4MzFEMDc5Q0U3RTIzODg1Q0Y3Qjg5RjRENQorOjEwRjhGMDAwQzg5RkRGQjJDMzBGRjFENjBDQUI2MUZENjIxRUVGNkI4OAorOjEwRjkwMDAwNjkzRTVCRUYyOENEOTAxMUY3OTdCQURGMzBDNDk5NEI3MQorOjEwRjkxMDAwNDdFMkEzQkE1NjMzMjcyQTlGNUQwM0NDRkY2ODc1OUY0MQorOjEwRjkyMDAwOTY2MTlDMUFGMjE5Q0VERkMyRjkyM0UyN0YwN0Y4QkE3QQorOjEwRjkzMDAwOTE5OUFFQTNEMzgyRDk4MDhGOEU1RDBDNjZBRjJCODY1MgorOjEwRjk0MDAwRjg4Rjg0NzJEMjc5RUIwM0Q5MkM1RjgwQzc3Mzc5N0JFRgorOjEwRjk1MDAwQUYwQzA1RDE3RjNCMzYzMEY2RkFBMkMwRjk2NkI5Mjk2MworOjEwRjk2MDAwRjU4NjcwOURCMTc0QTA1RDg2RkVENjQ1RTgxQzQ0QkI0QgorOjEwRjk3MDAwM0UyRkZDMEJEOTUzODQ3MTY5MDVFODY5NzRBRjUwMzA5MAorOjEwRjk4MDAwNUVFNjZFNTEyMEJFNUNFN0RFNTUwNUZDRjA5MUQwNjY2OAorOjEwRjk5MDAwMjdDNEQ1M0M5MjM3MEM3QzJDNjRGQUJCOEFGRTE3QUI4QgorOjEwRjlBMDAwQkY4MkRFREFDMTgwMDJGQTVFRUIzMUZBMzUzRTJFNkY5RAorOjEwRjlCMDAwMzU2RUQzRjNGQzVBOTQzNzlGNDlERTM2MDkzOTlCNEU5NgorOjEwRjlDMDAwQTZDN0NBOTk4ODVCQUI0M0I5NUM1RkUzQ0I1OTI3RTcwRAorOjEwRjlEMDAwQzdCRkYzMzhFQjFGNzg3Q0ZBMURCRUFFRjdCQjBEMUUxOAorOjEwRjlFMDAwQkNCRUIyQTEwMDlGMUZEOUUwQzVGQkI3Mzc5NEUwRkRCNAorOjEwRjlGMDAwNkYyMUNFNEJFRkRGRTA3MURDRDczNzM0RTFGREE5MEQ4RAorOjEwRkEwMDAwQ0Q3OERGQ0JFM0I0NDI4RUI3RjJGNTk0MUFCOTEzRTNBNQorOjEwRkExMDAwOEIwRERFODBERDE1MjM0RjBEOUM2RTE0N0RDMDIxODU3RQorOjEwRkEyMDAwRjFFM0FGQjY2OUZCMTU5MEFGRDMyMzdBNDJEMDVFMkNEOQorOjEwRkEzMDAwNkVDQ0Q5QkQ4REYyQzVGNjVEMTIwMDVDNjkzQkY0QUZBQQorOjEwRkE0MDAwQ0FGNTU0RkUxQkVBNzJBQzJCQTFCRDYwQkIzMjBCRTRCRAorOjEwRkE1MDAwMzFGQ0FGNEExRTNDNkZCQ0Q1N0E3NzlDRjY0NTNCODk5QQorOjEwRkE2MDAwREEzN0RCQjcyNTc1NDYzRkI4NTRDNEQxMDcwMjQxRTgwMQorOjEwRkE3MDAwRTdBNDgxNDAxOEU4MkI3NUFCOUU3ODcxRTFFRUM5MkJBNQorOjEwRkE4MDAwREQyMDRGQUQ2NzAzNkU5MEE3RDZDOTdCNjRFNkFGQjNBOAorOjEwRkE5MDAwNzhCOENBRTU1NDk0MkY3NUVGMzZFOEExQ0FFOUVFQTAwQworOjEwRkFBMDAwQ0Y4MURFOEU3MUY0RTAwMEU3OUIyOEU3NTNDMkIyNEJCMgorOjEwRkFCMDAwNEJEQzNGOUYyOTVFQkU0NThBRUZCNzI2NUIxOUFFNzVDQQorOjEwRkFDMDAwRjJGNTU1NkEzMzE1RDAzMzEwNTFBMDdGMTIxNTFCRDBCMworOjEwRkFEMDAwMkY0RDYzNzEwQjg3MzdDMEVEQjI3MTFFNEYyQjY5NkFEMgorOjEwRkFFMDAwMDJCQkE0NjUxMDZGMkQ5ODM3QURERjBENzIyMzk3Q0M0NAorOjEwRkFGMDAwM0IwQkYzMkMyOThDQjFEQkUwRjc5OEZERkZEODdCMTk4OQorOjEwRkIwMDAwQTdBRTYwNEEzQTVDQ0RFNTE4N0YzNTJFNDI2REI3MzIxQworOjEwRkIxMDAwRkExRUUzNzEwRUMxNUY4REYzQjdENDczRUNERkMwQUU5NAorOjEwRkIyMDAwM0VFNjY1RjE5OEM3MzJEOEJBRUM4NTkyMTU4OENCNEE4MworOjEwRkIzMDAwQjk1RjYwMjMzQkIwN0MzMjY5QzdFQjY2QUU2NzE3NEE5QQorOjEwRkI0MDAwNEUxM0QwN0I1OUExQjgzOTAzRThCMTg3ODJGNDdCQTc2MworOjEwRkI1MDAwQzlCRTJCOUE5MURGMTJFNUM5NzJDMEQ3MDM4QUMxREZGMworOjEwRkI2MDAwOTA0QTk4OURCNzgzQkYwRTdFMENDNzJGNTEzRjJGNDAwMAorOjEwRkI3MDAwQUUwMEYzQUYxMjRGNkRCMTFBRkQzMTcxMUQ1MDJDMjgzQworOjEwRkI4MDAwMEYyRUFCMjk5RkVFRkY3QUZFMURGRDVDRjkyN0ZDQzQwQQorOjEwRkI5MDAwMTE5Qzc3RjhFQjA0RDY2MzQ0M0VBMTI4RkY4QTI5REU0NgorOjEwRkJBMDAwQTQ2NkIzNzUxODczQkQ3NzU4MTlERjJCQUMxQzFGMEJGNworOjEwRkJCMDAwM0NFMTMzQjc5MzE0MDQ3RUFBRDQ5RjRBOTI0NkQ3OTM2QworOjEwRkJDMDAwQTgzRDMyMzA3MzlDQjhGNTQ2NkNGRjk0RTI2MkZFMDRBNworOjEwRkJEMDAwQ0YwN0EyNkVCOTY0RjA0RkVDQkEzQjc2QkQ3RkU0N0JGMQorOjEwRkJFMDAwQjdDNUEwQTdBM0U5NjZGQ0Y5QkNFOTVENDAxRDUyQjgwMgorOjEwRkJGMDAwMkUxNDc2Qjg4NEUxQzk0NTFFOEEyN0U5OUY4QjM0MjZFNgorOjEwRkMwMDAwQTcyN0ZENTI2ODEzQ0FBOTZFRjBCN0VBNEE2QUNGQTJDNQorOjEwRkMxMDAwNURBMkZFODgzQTg3RTM3NDRBN0YxQkQ0NEJFQjc5N0Q2MworOjEwRkMyMDAwQjJGODZFQzQ5RTU4QUVEQzMyQkE5RUE2NkE4NjdCNDg5NQorOjEwRkMzMDAwRjA5N0YzNjNFMzA3NEQ1NDVDMEE2NjQyQkRFQzdCNUFEMAorOjEwRkM0MDAwQjRGQjRBM0MzQUI4REQ2QTJBNzk2MEExRTY4NDdCNUQ2MAorOjEwRkM1MDAwN0ExQUYwNUU2MTBDM0UwMEJFRTZEQjhDN0MzNkQ5QkZDMgorOjEwRkM2MDAwRUE1MTc2Q0Y2ODZGRTc1MUY5REQ0RkRCQTk5M0Q3MzZCQworOjEwRkM3MDAwNDJDOEJCRjY4OTE1RkI1RTQ1NzI4NDFGRTI4OTVCRUZDMworOjEwRkM4MDAwNzFGOEUzNzY0MDdGNDZCQzQyQkMyQzhGQTMyQUU4NjkxQQorOjEwRkM5MDAwNDRCRTY3NDgyNDk0MDNGNDFCRTk5ODk3NkRGMkMzMzI3RAorOjEwRkNBMDAwQ0NGREQ4ODFFMzc4NDhBMUYzMDgxREFGNDM3NDFDNzdERAorOjEwRkNCMDAwQTA3RjFDREY5RjEyN0U1RTQ1Q0UzMEZBNTNDMkRGMjM0OQorOjEwRkNDMDAwRENERjczRDFGRjYyRjE1ODM5MkZFRjdGQzhBMzAwRkU0QworOjEwRkNEMDAwRjVEQjRENzFFNjkxRkM2MzgyRkU1NDA1MzFEMjVCQ0VCQgorOjEwRkNFMDAwRkRCRTcyOTNERjI3RjRGRDI1NjEyRjg1NUZDQkVERTEyQgorOjEwRkNGMDAwMURDMjlGMkExRjdCN0RCOUM3OTQ0RjU3NEQwOTZGQkYwNworOjEwRkQwMDAwMDYzRDIwNDAxNUFDMzc5MTExM0UxOUU0QUIzQkU3RkFCNAorOjEwRkQxMDAwRjYzMEU1RUIxRERFMjRCNkRFNDJFOTU0ODQzRDQ3M0U3NQorOjEwRkQyMDAwMzE5Q0JEOTA5N0JGQzNBM0EyRkNGQjM0QjY3RUQxMzhGMworOjEwRkQzMDAwNEVEQ0MyNTdDMkQ2MEQ0RUQ5MjUzNjFGMDRDOTlCMjRBRQorOjEwRkQ0MDAwMjYzRkJDQ0FDM0VDQjU2NjkyOEI2QzRGNTMzNUFDMDNFRgorOjEwRkQ1MDAwNjk4QUU0MEQ5MUQxRjI1QUNERkQzOUY4N0UzRDY1NDVCMQorOjEwRkQ2MDAwNzUzRUY1Qzk2N0M2Q0IyRkVGODNEMDJBMjlBNzM0M0M0RgorOjEwRkQ3MDAwOUI5Mzc4N0M3NTZGQTQwQTg2RTc2QUM3OTc5ODcwRjY5QworOjEwRkQ4MDAwQTlDODdCOThENzc1QTE1MEMyNzU5RkVFOUM4RkQxM0ZCMworOjEwRkQ5MDAwMTBFQjNCNTFGRTFEQzU3QzE0NUZDOTQ3RThBRjhDRTRGNgorOjEwRkRBMDAwNkRGMUZBMTY4QUZBNEEwRUUzN0FDREY3NUM4NzMxNEY4NQorOjEwRkRCMDAwRTQyNEFDRTNEMkVGNEYyQTExMERGQzkwRjkwMjVGNTExRAorOjEwRkRDMDAwOEU4NjA1M0Y3MzIwNEY4MkQ1MTdFNjdFRDUyOUZCMUIxMworOjEwRkREMDAwMEVCMDlCMjJFRkE0Q0IyN0Q3QzU4QjczNTZDODJDQ0U3MQorOjEwRkRFMDAwMkNBRTM3QTk2Q0RFOTlBMzMyM0MyN0VFQzVGODhFQzgzRAorOjEwRkRGMDAwOTM3Q0JDOThGOUUxREYzMThDQkJCOTdFMjhERjhDRjFCNAorOjEwRkUwMDAwQzE3MEUxNThGRTY4QTM4OUNGRDM1NDNFRUY3MUJDRDFENQorOjEwRkUxMDAwMTkxOTFCRDc4QTdFOUFGOTYwRUVBN0Y5M0JBN0NBRTJBNworOjEwRkUyMDAwNjVGNzU4RjU5QkQ1RDlEMTc2QzQ3QzY3MkVCRkM4MUUxRgorOjEwRkUzMDAwM0YyRkM3NUY2MjhDNEY5QUYzNzJFRUIxMDY0QTU1Q0FFNAorOjEwRkU0MDAwQ0YyQTQ1REE5MkVBNDFCQjg2RkE3NEU4QjI4NjM4RTZGMAorOjEwRkU1MDAwNDJFNEQwMTYxOEQ2MjNDMzJDM0U1QTRFRTQ5MDhEQ0RFMgorOjEwRkU2MDAwMEI4REIwNkUyN0Y0NDZDOEJGOTk4RUYxREEyRjFGRUVDNgorOjEwRkU3MDAwNDc3RkRDN0YyOTUyMERGMjc3ODdBRjFCRURFQTAyNkFEQworOjEwRkU4MDAwNTcyN0M0QjFBQkYzRTRDMTJEMTM0MDdGQkQ2QzdGQzdDRQorOjEwRkU5MDAwQTlERkY3NTVFM0JEMjY2MTNFQUM1RTlFQTc0QzAwMzk1NQorOjEwRkVBMDAwNzBDNThGNTdDREU1NzIzMjdBM0Q0RkQ4NTU5NzAyQjg1RAorOjEwRkVCMDAwQzExQzZGOUJDQkY1NkVBRTQ5MUUwMkVBMDgwRUJBRUQ2RgorOjEwRkVDMDAwNEFERUY4RTM5NDQ4MUUyRTQ0MkUzQzE4MkY4RTJBQUVBQworOjEwRkVEMDAwNTUwOUM2RjczRTYyRTI2RkE3MzFGRTZDQUU0N0M0ODM5OAorOjEwRkVFMDAwODhEQzk5MERGQTJDRkM1RjczQjkzNjk1QUQ3QjFDMjkyMworOjEwRkVGMDAwQkE5N0M0RTY1NTA5N0JBMDk2QjQ2QjEwMTdFRjJEMTk3RAorOjEwRkYwMDAwN0JCRTMwRTcwRkZBODkzMTRGQUNDQTZFNUM4RjdENEFGOQorOjEwRkYxMDAwRDExRjAxNzk4Q0UyQTQxNkU2QUY5NkI0QTBCRkJBQjBBNworOjEwRkYyMDAwOTBFRjBCMkFCQTE3RkQ1M0UxNTdCN0RFQkUxN0YzQjlBRQorOjEwRkYzMDAwNDRCRTk2RjA0RkNENzRGNzRFN0UxMUYzNzlDNkEzNUJBNQorOjEwRkY0MDAwRjhGMUM3NkQzMjVCODdBMDdFQkIwN0ZENzY4QUZCRTJDNgorOjEwRkY1MDAwN0NGNzhBOERGMUVCNTc4QUJFMEJGNDc1OEI1NTc3QjcxQQorOjEwRkY2MDAwQzAzQTYzOTFDREZCN0M5QzcxMThCMDMxRkRFRTREQjA3MQorOjEwRkY3MDAwREVGQTA3NThGODk4OERGRDQwM0U5OEU3MUJFMUM3OEFFNgorOjEwRkY4MDAwN0Q0QTkzREM0QzZGMUJCODFGNUI1NkQ4ODJGQTk4RTYwQgorOjEwRkY5MDAwQTY3RTJCRjBDRENCRkM1NjMyNjhGNDUzMTc2QTdENTkwMAorOjEwRkZBMDAwMzBGRUU2Rjk0RTFFRTY3RUVENTVGQUFENUI5Mzk4MUNFOQorOjEwRkZCMDAwMDU1Q0M0RUVBNkVGOTMxNDBBNERFOUZDRjdBNDVDNzk0NgorOjEwRkZDMDAwMThGOEIxMzU4REEwM0Y3MDMyNEQwREVEOEUxMzZGNzg1RQorOjEwRkZEMDAwOUJDQjVCOERCQ0RBMjA2RkU1MUM5N0E4RDVGRDFBQzRCRQorOjEwRkZFMDAwMDM0RTBFQjMzODVFQTI3MURCNjZDMkU5QjkwNUM0NkY3OQorOjEwRkZGMDAwNzNDMjM1RTIwNzdFRDA3QkREODZENzA4RTY2NzdGQkYxOAorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDA2ODY1NkVCQ0ZBNzZCNzI5NzFFN0E1M0ZGMzcxNUIyQzgyCis6MTAwMDEwMDBGMkI1RUI1ODNDRjJCRTQyMTVFM0MyOTNFQURFM0Q4QUVDCis6MTAwMDIwMDA3MkRBQzhFNTc0ODEwREZCREQ1QkE0RTBCOEY0REU5RUY2Cis6MTAwMDMwMDBEMzBFRUI5QUJENDU3NkNDNDdFOTJFRkFDREVGMjE1RjgyCis6MTAwMDQwMDBCQkJDNDQzMkU0OTcwOEY5MkQwNzVDMERGNURCNTlCQ0M1Cis6MTAwMDUwMDBGMzNFMzdCM0MzQkQxQUM3MkYzQzZGNjQwRDFGRDM5MzU0Cis6MTAwMDYwMDBGQkRFNzdDNkU2OEQyQzExNzJERkM4RTNFNDI2RkM0NDg0Cis6MTAwMDcwMDBDRDQ4REM3NTFDOTE0NzdDQkU5MUM1ODVFRjEzRkRERDM1Cis6MTAwMDgwMDBCRjc3MEJFODVEMDM5NzlCRUU4QjJCRERBODlGRkI1OTk5Cis6MTAwMDkwMDA3RTVFNkI1MTBCQzY4QkJBMjdCRkE1QzJGRDFBRjcxOTNFCis6MTAwMEEwMDAxNUVFQ0RCODQyOENFQjdEMjVCRjYyRjk5MTdDNUNENzEzCis6MTAwMEIwMDA0MDNDOUVDQUZCQ0I5OTM3NUIzREY0N0U3MUY4NzYyQkIyCis6MTAwMEMwMDBDNDNCNDU3Qzc2RDQzQTE0NUY0RkE5NjVERDI3QjU2RUY1Cis6MTAwMEQwMDA4NkFGOEY2NjNBNDg3MjA2RjA0QjBFNDlDMEI3NzAxMjcxCis6MTAwMEUwMDA0OTg2RkMzM0I3MzU5NDQ0RUYxQjk0RkU2OTgwNUIxQzUyCis6MTAwMEYwMDAyNkJDNzhGRUQ3N0JCMzQxQkY4RkNDRjg0MDgxNzZBRjZBCis6MTAwMTAwMDAyQjc5QjcxNUZBMzFBNTY0MkZDNkZCQjNGNkVGRUQ0OThECis6MTAwMTEwMDBBN0Y1MkMyQzIwNUVERDMzOUE5RTFBM0UzRkREOTdDMTU5Cis6MTAwMTIwMDBGMjg1RUVGMzg2ODJCMEVGRUNEQzY1QjY5RkEyRjJEN0UzCis6MTAwMTMwMDA2RjU0QzFCNDM2N0E1RDQ2Mjc4MDQzQzRCQThFRTJFNjc2Cis6MTAwMTQwMDBFQjIyN0M3RDgyNUNCRTIyQzU4RTVCODMxMkIwODNGRDc4Cis6MTAwMTUwMDA2RDJENzlDMzA5RjQyRUU2N0NDQkREMjdCNzgwN0M1NzYzCis6MTAwMTYwMDBGRjdBRDY1NzQwNEVDOEVEMzZENzc0REFFMDM5RDc2RkVDCis6MTAwMTcwMDA5REQ3NkJFQ0ZEQkRBQ0RFQjkwMTVBQkVBMTcwNkZGNjI4Cis6MTAwMTgwMDBDQUEyRDFGNjY1NDQ3RjBBRkZCMjIxNDBFOTM5MzlGRjlFCis6MTAwMTkwMDAzN0Q5ODBEQkRFQTA3NkQ3MDNFRDcyQkI2NUY2OTdDQzRFCis6MTAwMUEwMDBGM0FBMzkyRkM2RENFRjRDNjU1MTlENkQzNjhDRjc4RjY1Cis6MTAwMUIwMDBERDM5MzE3MjQ2RURDMDBBQTA3RkNERDM3NkNDRTM0QTVCCis6MTAwMUMwMDBEQkZGQkEyQTgzN0RBM0Y4QkQ1NjhBQ0FEMTFBMkU0NzBGCis6MTAwMUQwMDAwRDFBQjM3RkFENDUyNEI0NDkwMkY5M0JEMzU4MDY3QUQyCis6MTAwMUUwMDBGNzJBQ0IzNzlDQjRGRjVEOTYzRjZBOUExRjdBRjlCQzE5Cis6MTAwMUYwMDAyMUU2RTNERUM5RUZBMUZFOUNERkM3RjUyNTY4OTE2MjI5Cis6MTAwMjAwMDBFMzQ5NUE0OTY0Mjk4QzhCRTA0RkE3QzlERUY4RUNGMTI5Cis6MTAwMjEwMDBFMzI2RUZEODE4NUUyREQ3RDg3QjhEREE2RjU4RDczNjA2Cis6MTAwMjIwMDBCRkFGRTRGRTU0MTU1QzYzRTY4NTA3NkQwQ0Y3OEFFQkZGCis6MTAwMjMwMDAzNUU0MjEzQ0Y1NURBQUZGREREQjBGQjlFRjQ2M0JBNUI4Cis6MTAwMjQwMDAyMTZFNUZCMzdGNkYwMUFDRDk2NEVFREI1QkNERUQwNTUyCis6MTAwMjUwMDBGQTY1MzJFRkU3MjRFMjQxM0JCNTUwQjNCM0Y1MDM5M0JGCis6MTAwMjYwMDA5QzVCNEI3Njg1MDEzRThCNzkxQTFDNzIyNTMzNkE0NzVECis6MTAwMjcwMDBFNEQ4Mzg0NDFDM0Y4QzA0RjUzN0YzNjNGMkJFRThGQzQ1Cis6MTAwMjgwMDA0RUMwQUU1NEI5NTlGQ0Q1MkMyNzY5MjVENEVFRTAyMEQ4Cis6MTAwMjkwMDA1MEVFQzVBQ0ZCOUFFNUI2NDEwQkI4NjEzRDlCRUFDRjg5Cis6MTAwMkEwMDA1OUI2RkU0OUU3MkI4ODRGQzg4RDVFMUM0RjJFOUYxNjBFCis6MTAwMkIwMDBGQTFGQ0M3RjBFQUY1MTNFQUQwNUFBMDFBRjk4RTlGODA5Cis6MTAwMkMwMDBBOUNEODhGRkM1RkM5Q0U2RUU0N0ZBMTY2QUVERDlEMEE5Cis6MTAwMkQwMDBGRTI0NzczRkZBNUJENEJFNjdDMzU1Qzg5OUIwRDcyM0Q1Cis6MTAwMkUwMDBGMjU3NzQ1QjNERDg3NzkwNkI1ODIyM0Y1OTMyMkIxOUU3Cis6MTAwMkYwMDBFQzYwODM5QkUxMTQ2MjhBQTdGN0JBQzdGNjM3N0E0Q0ExCis6MTAwMzAwMDBGMjc4RDJDNUZDQUI4NjEyOTJFQzRBMDU3RDY3NzFBN0U0Cis6MTAwMzEwMDBERTQ3RDM3NzM5NjJFMjcyRkY2NDBENzREODYyRTJFQjk0Cis6MTAwMzIwMDBDRUMyMkZENkJCOUM2MDY3NThGRTU2MjkzNTVGRDZCQzFGCis6MTAwMzMwMDA2ODNDNTNDNDREQzU3QTlGODg5MzhFOEE2NzE2NzY2MzRFCis6MTAwMzQwMDA3RTk3NTVFNDVERjBGNUJGNTE3OTNGMDlENjFEQzU1NTNGCis6MTAwMzUwMDBDNDMzNkQ5QkRBMTUyRjVGMkY0MTNDRDZDOEUzNzBDM0MxCis6MTAwMzYwMDAzM0M3ODk4N0IyRjgwM0M1NjdCRkI1NEQxQzFGOUZFRDIyCis6MTAwMzcwMDBFMTdFRTYwMDE4MEY3QTVENjU3M0UxNTU4MzdDMTQ0QUNGCis6MTAwMzgwMDA2QTZGNTI3Q0RDNzY5MEZCNkREN0EyOUZDNzY0Rjg4RUIzCis6MTAwMzkwMDBCNUYzMjc5MzdDODlFNzUxM0NDQ0Y0NjA1MkM5REU5RUNCCis6MTAwM0EwMDA1ODNDNUNERTQ2Nzk0M0M3NDk2RDIzRDM0ODZBNjJCOTNECis6MTAwM0IwMDA1QjM4NjJGNzdFNjU5MEFGMTE3QzNDMEUyRTE2RjI3NUFECis6MTAwM0MwMDA1MUQ2RkY2NjlCOThCODVDMDNBNzIzRDFGQkQ2MjI1QjZFCis6MTAwM0QwMDAzM0U0NUJEMTcyNjQ1MjJBQkJERTQwQUYzRDMzRjY2NjM0Cis6MTAwM0UwMDA1QkU4RjNENzAwN0ZDNUQwRDFGQkNDN0VFQ0M3MUY1NEIwCis6MTAwM0YwMDBCNkNGQTZGN0UyQ0E1Q0MwMDdBNzE0M0RENTNFRjFFQTI2Cis6MTAwNDAwMDBFNUM3QUM0RkY2RDlCQTY3MjNENUJGQUU2QzNCQ0VDRkFDCis6MTAwNDEwMDA1RDZFODY0MzVFODc5MjMxRjJCNDRFMEQ1QzY3OUY4REIwCis6MTAwNDIwMDAxMDQ0MjdFOURDQzgwOTM5MDdBMzU5N0Q3NUZCQzRFRUUwCis6MTAwNDMwMDA3MkY0M0ZENDE0MzMzRjZDODc1NzkzNjE5RDhGQzlDREJECis6MTAwNDQwMDAyMzZBM0ZFNkUzREM0NTZCQjdEMTc2MEU2QjcyRTYwQUIyCis6MTAwNDUwMDA3QTNGRDNDRUU0RjE3MEQwMUEzN0ZGNzlBNjlERTFFNzU5Cis6MTAwNDYwMDA3NTZBRDM0Q0EwOTNCNEFGNDUzRDZCOTFFNDI2RDA3RjIxCis6MTAwNDcwMDBFMkJEQkFGOERDRTY4RUY4NzlBNTU1RDFGQUU3NjJGRDVGCis6MTAwNDgwMDBGQjY4RkQ4MDFCQkMzQ0ZFNEU1Qzk5NzFFM0VEQkNERjVDCis6MTAwNDkwMDA2MTQyRUE0MDVGMUU0QjMzRkE5QjNFM0I5QkY3RTY0NkM4Cis6MTAwNEEwMDBFQkFGOEZBRDFGRjNCMzY2RTNGMzA1MzhDRTJGQjBFN0E0Cis6MTAwNEIwMDAwNTc2QTYxN0ZFM0M5NkQ3MjZGODI4RUE1RDFBQUQ2RjlBCis6MTAwNEMwMDAyOUQ2Qjc5RjdEOTc2RkU3RUIwNjlDNkU4MUYzQ0RGOTM4Cis6MTAwNEQwMDA0RjM1NDk2QzNDQTJGQkZBMDhEQUNENTI4QUMzRjE3QzU1Cis6MTAwNEUwMDA4NTQ4RTgzMERDRkIwOURGOTcyOTMxOUNERTk1QzJGNkIwCis6MTAwNEYwMDAzMTc1NTk4N0YwOUM4NUVFNEYzRTdFMDdGNjZCMkE4QTUwCis6MTAwNTAwMDAxMURGREJCOEVDMjg5N0Y3Qzg1MEFFMzRGQjgyMjNGNjM2Cis6MTAwNTEwMDBEQzgxNzJGRUJFN0JEOEI4QUVBQTczQkM3MzkwRjA3QzRGCis6MTAwNTIwMDAwRDVFOUYzRjQxOUM0QkUwRjgwRTVFM0VCQTBFQ0NGNjRFCis6MTAwNTMwMDAyOTRFMUE2MEZCMTIyQjVDRkM5Qzg4QjQ2RkEzNUYyREM0Cis6MTAwNTQwMDBGNDdDRUIyNzZCMTk5RTlGQ0FGN0FGNjVFRjkxNjNFOUM3Cis6MTAwNTUwMDA1MTM4M0RBNUNBRkJERkRDMEJGRDhGMTAxN0M2NTlDMzEwCis6MTAwNTYwMDBCRjczRTREMDdFRUJDNzY0NkYxMjk0MzZGOTE5M0U4RUU4Cis6MTAwNTcwMDA2QkNCMzk2RTREODRFRjhGNEE4MUU3QzIyQ0JFNjlDMEM4Cis6MTAwNTgwMDBGOTQ3MzNGRjU5MDYxQzVBMUE2NkVCNEMxNTFDRDc1NzBFCis6MTAwNTkwMDAyOEExMkM5ODFGNkFCMzU5M0NBQUUzNjI1RjE2RTJGOUJFCis6MTAwNUEwMDA4RjMzNzFCRUI4NEVEOTg1RkQ5RUEyMEM2MTlFQzQzQ0FFCis6MTAwNUIwMDAxM0ZFQ0YxQTIwRTgzN0Y4QTlERkEwQzdDMTJEMzU3Mjg2Cis6MTAwNUMwMDA3NjM1RUNDRjJERjVCMEZEQjVBNTVFNTZCRThCQjYxRkNBCis6MTAwNUQwMDBBNEU1MkIyRkZFQTAwN0UwRkE2ODdDNkZDNDI5RTU5RUY2Cis6MTAwNUUwMDBBMTJBMzQyMzI2REM3RkNENzgzQTlCQzVBNTJBNEM3RUYwCis6MTAwNUYwMDA4MjkwMDdDQTBGREMzN0RGQTEzQzY4MDczRUU0NjY1QkU4Cis6MTAwNjAwMDA5ODdGMzBENUIyMUNGODQ2QUNDQzNGRDhFQUZBOTYxRDlDCis6MTAwNjEwMDBGRDAzRkExRUZDODMwQUVFMUY1NDVDOEU2NDgxN0Y2MDJBCis6MTAwNjIwMDBFRThGOTBBRkRDQ0IxRkEzN0ZEMDNERjQzMUYyMzlGQ0NECis6MTAwNjMwMDBDOTlFMkNCMENCMjI4RjVDRTA3QTUxM0U1M0YxMUYwMTUyCis6MTAwNjQwMDAzRDJFMzdFMTdDOUJDMEY5QzM2QjA5RTBGQzBBQzU4OEVECis6MTAwNjUwMDBGMzZENUNDRTJBMzhDRUVGODBGNTJFOTBEN0IzOTlDN0Q0Cis6MTAwNjYwMDA3MzY4M0YwRTBBOUMzRkVDMzJFMEZDNTJDRTg3ODNBMEI5Cis6MTAwNjcwMDA4RjMxMzhGRkUwNTlCNkFGQjIyQjNCRDc4MEYzNDdGQzQwCis6MTAwNjgwMDBDODRGODlGMzdENDlDQ0VFMDgxQzVGQ0JGMTgyNzhGRjFGCis6MTAwNjkwMDAyMUI3RTM2NjdDNkY3RTdGQURGODlFNzBGQzFFQzVDNUZBCis6MTAwNkEwMDA0NkI5RURERTlFOEJFQjJBQTUyRTNCQ0E2REY5NDA2MDY0Cis6MTAwNkIwMDBGODAxRkEyQTczNzhFRDFGOUYwMDdFQkIxRDVFRjhDQzBGCis6MTAwNkMwMDBDNkM3NjVEQ0ZDNEYxM0RFOUY0NDIyODc1MzQxNkZGMjlGCis6MTAwNkQwMDA1OUJFNTE1QUI2MEJGNUE0ODJFQTQ5NkQzQzdEMzBFMzEwCis6MTAwNkUwMDBGRjZDMzY2RTU1NEE4QkM4OEIxQjEzRTc1NzY4MkVDNEI4Cis6MTAwNkYwMDBEOThBNTI3QjU1MzhERkFDNTc3NUY5QjYzMUZERDJBQzhCCis6MTAwNzAwMDAyNDIzMEVGMzBCQkJBOTNDMTA0NEJCQTkzQzEwMDZGREVGCis6MTAwNzEwMDBGMTVGNjZGOTMzREQ5RjdDREIxRDdCOUVDMzU2NkVGRjY4Cis6MTAwNzIwMDA4NTNEMTdGQTc4RjA5MzhGNzkxRThENDlBRTk1OEYxQzExCis6MTAwNzMwMDBCMUZCOEEwRjY2MzMxQ0YyMzMyNTgyRkE3QkYwRjJDQ0QwCis6MTAwNzQwMDBFNEQ4Mzg5NTE5RTcxRkU0MzhCRjgyRTNGQzhBQ0I0QzI0Cis6MTAwNzUwMDA0RjBFOEVDNkY5QjcyNUM1RTAzNkU3RTU2NTg4RjNBRkRECis6MTAwNzYwMDAzNjlGNDBGOEFGQjUyNkZGRjU1REJCRDE3RjREMjRENzRFCis6MTAwNzcwMDBGRkMxRTdGMzI4M0Y4NzM2MjM5RTU1ODZEODdDQ0FGOTA4Cis6MTAwNzgwMDBBOTcwM0M2QjAzMUM3OTBCQ0VBM0I4M0Y1RUU4RjEyODNGCis6MTAwNzkwMDBCRTVBM0YzMkNDOTM3RThFRUYwRTJBNTc4RDY3OUI5M0M1Cis6MTAwN0EwMDA2NjI3MkU1NzMxMEU5RURERkE4OURBOENGQ0U3NzhCNjgzCis6MTAwN0IwMDA0MkUwRDlCRjQ1QjI2MkYxMkNEMTE4MEUzQkY4Q0MyNUVFCis6MTAwN0MwMDBFQ0M3QzEzNDg2NjNDRDM4MkMzMUVFNjBGNzdFNERFMjQ0Cis6MTAwN0QwMDBFQjMwNDYzQzIxRUFFOTQ4MjFEOTE4OUY5M0RFNDZCRTFBCis6MTAwN0UwMDA3NTU5RkYxMjE3OEYwOEZDNjFDNjFEQzQ4NDM3NDZFQThECis6MTAwN0YwMDAwNTlDMDI3ODYwRjg4MjAzRjZDMTc2MUM5M0Y5QkVCQUI0Cis6MTAwODAwMDBDRjhBNDMyMjcyMkNFRTEwREY3NUE1RThFOENGMEI1QzhGCis6MTAwODEwMDBCMkY1OTMzMzg4MzNCNjBFMTEzQzM5NDFFMDEyOEEzNzcyCis6MTAwODIwMDAwRTgzM0ZBN0QzRjkzQkM5MTNBNTVGRTAxMzgxMzc0Njc5Cis6MTAwODMwMDBGQUExQjBCQ0QxMkUxN0I3RkYwOUUyQTA5RjM3M0UxMTM1Cis6MTAwODQwMDBCOEM0Q0M5RjgzNTY4NjVCM0EyRUJFRjU5OUYwOEExOUMwCis6MTAwODUwMDA5Rjk4RTk5REI3NkI0NzRGMkEyRDM3M0Y3RjA4RUQ1MDkyCis6MTAwODYwMDA4N0I3MEZGNzk5NzcwREU3NjYwMDFGQzZDNzJEN0U1QzI3Cis6MTAwODcwMDA4NzFGODk1MzcyRkM3MUFEQjgyNTExNUU0OTg0MzMwRTEwCis6MTAwODgwMDAwMjhFRDFBMjM4QzY4QzVGQ0NGQ0NDQ0QyNjJEMTBGN0MxCis6MTAwODkwMDAxN0I4MjY5MURFNDJCOTdCOUQ1MUJDOTNBODFDQjVEQkVECis6MTAwOEEwMDA4ODgzMTJENjczMzk3MkFEMzhFODRDRDI5ODM4ODgxMEU0Cis6MTAwOEIwMDAyNjM3MkMzRjI4MTEzRUQ5RUE3NTY5QjFGOUFBNjIzRTY0Cis6MTAwOEMwMDBFOUNFQkVGMDBFRUUyQjFGNTBGMTdDODRFRUIzQ0M3RTUxCis6MTAwOEQwMDAyNkMyNDc4NzRDN0E3NzEwRUM4NTE2OURBRjEyRjI2NUQ5Cis6MTAwOEUwMDA4MDlERjMyMTcwNTRBMjcyNTc4QjlGQzQzQ0UyNEI2MkVGCis6MTAwOEYwMDBGMzQ0QTJGNUM5QUM2NDg2QjMxRUM5NjVGRUIyRjk3REE2Cis6MTAwOTAwMDAzNERGQzQ4OEEzNDg0NjExQ0FGM0ZEN0NERjY1MjI1QzRFCis6MTAwOTEwMDA0NTQ4QzRDOUUyNTQ0MTdDQkU4Q0ZCOUIxODFCOUNDMzU4Cis6MTAwOTIwMDBGMzBEMjhBOTRERjkyNDFGRTY4NTI2M0IxQkFGOTNCMzkxCis6MTAwOTMwMDAyNUY0MDMxNkMxNzMyQTRGRkU2QUI2M0U3NEJBODhEOUVECis6MTAwOTQwMDBFQjkzN0UxQkRBRUZFM0U3NTkzRTYyNzcwQThCQjM5RUE3Cis6MTAwOTUwMDBCQzM1QzlCQjlCOTI3MDFFRUFBNUYzRjBFOUE0QkU2MjQ4Cis6MTAwOTYwMDA5OEY3Njc4ODdFQTZCMzdFMkU3MDg0NTdFM0ZBRjhBQ0JBCis6MTAwOTcwMDA5QjJEQzE5Q0QxRkFGRDQ4MzJBNzIzNURDMzc1QjYwNkY1Cis6MTAwOTgwMDA4RTNGNjE5RDMwNkJFNkU4RkQwNENGMjRFNzIwOUYyMDc5Cis6MTAwOTkwMDA0RjNFOEI5NkRCNjJFOUZCN0UyRTdEOTQ2NDYxRUJBQTcxCis6MTAwOUEwMDA2NkJFRkU5OUQzMDM4Q0IxQzVGMEExMzFERkFFMjc1MUVECis6MTAwOUIwMDBGOTRGQkE4OUFENEY3NTU1REIzMDFGMjcwOTk2RDI2OUJCCis6MTAwOUMwMDBCRERCMEE3MjUzRTJDOTkxRTg5N0Y5Rjk0RjkzOTlGRjk5Cis6MTAwOUQwMDA3RDdBNkEwNEU3QjE1MzNDQkY3NzhEMjIwNTA5NzNCMDc1Cis6MTAwOUUwMDBCMDlGQ0E4NDI5QkJCNkQxQTI1RjRFNjZFN0Q1OUNGQUY4Cis6MTAwOUYwMDBGNUVCMTgyNzNBOTFDNkY5QTA0Qjk4Qzc3MDEyNkMyMUY1Cis6MTAwQTAwMDBDNEZCNUM1QTA4RjY2NUQyRUZBRENCQzZDOEZCRThGMzcxCis6MTAwQTEwMDBENzE2QjBGNTMyNDIyNDU4NDc4MzNGNzI0N0YzN0I0OURCCis6MTAwQTIwMDA5RDhDRkQ1RUUyREFGRTAwRThFM0U5QkEzNzFDNzBGRTU5Cis6MTAwQTMwMDBFNEMyNjEwQjAxQkQ1QkUyMkFCRDE3OUU3N0E3MzAzOTg2Cis6MTAwQTQwMDAwNjNFMDM2RTVBNTJGREM1NkZDMkYzQzY0NkUzNzgxQ0RDCis6MTAwQTUwMDA0OUNFNjVFN0M4Mjg2QzNDNjBGQ0IyNjY4RTZFOTdDRUM2Cis6MTAwQTYwMDA3RTAxMzUzMzg2RkZCRURGRkM5RDE0MzNBRjg4QkMxNTk1Cis6MTAwQTcwMDA3QjgyM0NCRTQ0RkQ5NjYyRURBRjFDOEQzQjRFMkFEOTc1Cis6MTAwQTgwMDBCNTAzRjZDNzM0MTVCMzczMkYxQTNDMjQwOEVCQkMwRDFECis6MTAwQTkwMDA1RTEyQ0VFMUYyODVGOTM0M0RGOTZDNUYxMEQ3QUZCNDQ4Cis6MTAwQUEwMDA5MjVENkRCOTEwQTcxQzU2RDhGQUIzNjkzRTI5QTM2M0FECis6MTAwQUIwMDA5NTlEMEU3MTczMzYzRTI3NjdDQkU4RDc5NTk1MzA1Q0QwCis6MTAwQUMwMDA1RkM2NzE3RDgzREU4MkVCN0E4RDhGRjY2Q0NGODVGNzAyCis6MTAwQUQwMDA3Mjc2OERERkMzRDc0NzYzRjg0N0Y2QjMzOERDMjI5M0NECis6MTAwQUUwMDA5Q0E3OThFMkZDNjU1RTUzN0UyMENGRUJFQjJBNzhDRTg0Cis6MTAwQUYwMDAwNUYyRjM0ODNBOTc5Rjk5MTJFQUQxRUI5MkU3RDFEQ0RECis6MTAwQjAwMDA5OEY5QTgzRTU5RTQxRjExOEYzNTQ2M0U0NkU0ODE4RjdGCis6MTAwQjEwMDBBRjk5RUY4OUY4NjlFNjkzNTkyRUNDRkMzRTk5NjJFMkQxCis6MTAwQjIwMDA1NzAyRkUyN0UyNzc1OTg5RkZCRjk0QkZFN0FDMzYyQjA3Cis6MTAwQjMwMDBDODZEQjdGNTgzNkNFRTBGMTEzOUM2OUU5OEY5NzY0RUU1Cis6MTAwQjQwMDBGM0E0ODA5RDM4M0RDQ0U2OUIxMzUzM0Q1RkMxNzNCMDQ5Cis6MTAwQjUwMDBBODFFRTMzOTlFNUMxRkEyRTM0MEY1QzExOUFCQ0Y2RjFECis6MTAwQjYwMDA0RjAzN0RBNjcyNjY4NTdBMUE3NTQ5NEYwMkZEREJCNzgxCis6MTAwQjcwMDBGNTAxRUMzN0U4QTkzM0FBNDc2NkZFOEZEMjNGRkFCRkVBCis6MTAwQjgwMDAyMkU4Q0QxQkFENDdFNkJDQjE0RkFCN0ZERjAxN0IwRTRBCis6MTAwQjkwMDBGMTgyNjQwRkYyNEZEOEQzNDZFMkZBNEFFQzNFNTZCMUU2Cis6MTAwQkEwMDA5RURFOUREM0RBMDRGQkNGMUIwNjJDNzhERTRGQzdGMDA4Cis6MTAwQkIwMDA4QkNBMEFEOEQ3NUEyN0UxQjRBNjkxM0VBNDU3NkI2M0QzCis6MTAwQkMwMDA3OTExRDczRkZCMzA4MUJDRjU0N0E3MTIyRkQ4MkJBRDQ5Cis6MTAwQkQwMDA4REU1NDlEMEY3OTgyNzIxNzBCRDM4QkY5MUJFRDc1OTEwCis6MTAwQkUwMDA1RTg4RjE5Q0E1MTRBRjMxQ0Y2N0YxNjAyNUFFMkZGNDdDCis6MTAwQkYwMDBGMDczOEY0NkZDMEIyMkU0RDJCOEJGQTUxNTlFNEM4RTM1Cis6MTAwQzAwMDBFRTg3NkFCQjE4QzJGODRDNDc4MkZEMkVFMjZBRjYxN0RGCis6MTAwQzEwMDBDQ0Q3MjM4NzdFRjFDREJEOTA1RjkxQUZCQTAwNTI5NEJGCis6MTAwQzIwMDAwRjg3RUQ1MERGRjcwQjBGRDU2MTNFNUI5REU0ODI3NUJBCis6MTAwQzMwMDBCNzIzMUZCNzZGODZGMzhFMTYxN0JFMTczN0JGRTdDMEVGCis6MTAwQzQwMDBCOUE3QkNEMDhGMDNENjFEREU3NEIwMEY5QkQ4QkM5NTVFCis6MTAwQzUwMDA3NDQzRTFENDE1NjNFMEEzNDA5REJGMkU2NzQ2RTI3QzU4Cis6MTAwQzYwMDA5MkQ1MEUxRUY3RUZGRUZBRUU0NzYwN0Q3QjUwRjU4MkJGCis6MTAwQzcwMDBGRjUyQ0ZGRDhFMDY2NTQ3RjMwQTNBOUUzREYzMjVFRkZFCis6MTAwQzgwMDA0NkZBQkNFN0M2MjdENjFFODIzOEVCNTkxNTM4NEU3QThECis6MTAwQzkwMDAyRkVFQzkwNjNGRTNCNTY3RUNFODdGMUVGOTc4Q0Y0RjJBCis6MTAwQ0EwMDAzMDlGNjQ1MDlEMDNGRDFEQTE3RkJBQzZERTlGN0ZFOTgyCis6MTAwQ0IwMDAxOEQ4OTlDNTA1OEI4QkExOUQyNDg1RUMwMDc5QkE2RTU3Cis6MTAwQ0MwMDBCOEZEMUQzODE3QTE2MTQwOUQwREY2Njc3MUREMkVGQjQzCis6MTAwQ0QwMDBENzgwNEY3NUJGQjI0RjA3RkY2M0Q4NTMwM0UzOTk5RDg5Cis6MTAwQ0UwMDAxQ0QwMUQ1NDFFQjMwQTczQkU5NzAxRUQ3ODg5NTc0Nzc3Cis6MTAwQ0YwMDBCRUY2MTFFMEFCQzg0MzEwQjg1RUY4OTMxREYzNzM1MjEzCis6MTAwRDAwMDA0ODBDNUY0RjBGRTdBNjYwM0NCMjhFRTcyQkNDOTc5QjU5Cis6MTAwRDEwMDBDMDNGM0VFRDlBOUU4MjcxQzgzQTk2QTc2MEU2RDc2MkMwCis6MTAwRDIwMDBDMEU5QTk0MDVGQ0VENDk1NzFFNkVGRENCQUJGNkMwODhDCis6MTAwRDMwMDA0MERDRjc0NjVCNzMzQzdFMDczOEJGOTNGRUJDNzIzN0RFCis6MTAwRDQwMDBGNDM3RTlDNzc2MTdDMEVCQTQwNDc5OTg3OTBFMUU4RkEzCis6MTAwRDUwMDA3MzVGNUQ3QzQ0RTAxOUNBNTdCQjM1MjZFRTQ3RjFGRTUwCis6MTAwRDYwMDBENzFDMzE3MTk3NkI2REZGNEVDOEQ5OUUwRDcxOEFDMDJCCis6MTAwRDcwMDBGRDUwNEYxOThGOEY5NEYzRjg0ODIyQkE0QUM3ODk1QjA4Cis6MTAwRDgwMDA1MDM5NDIzRTJEODZCOEM1MkRFQzdBMDNCREY2RDRFNzI2Cis6MTAwRDkwMDA0QzM1QzQyRDg4RUUwNjNCN0IxQUQ2RTEwMDhGMjk4QjlCCis6MTAwREEwMDAzNjM4NjAxREVFMUM4QjVGMjQ5MkRGQzVGOTdCRUUzQzZDCis6MTAwREIwMDAxNDYzRUY3QUFEN0EzNkY4QjkzRDM3QkU4RDdFRDJGRjM3Cis6MTAwREMwMDAyRUY5MUQ5MUIzQkE1RkI1QzFGOTU5REIwQTE3NEYwNDZCCis6MTAwREQwMDBGQjE3MjNDN0NGMDBGREQ3MkFDNzY2RkU3NUNDQ0Y0QkM0Cis6MTAwREUwMDAyMTVBNTQ5RTg1MUM4Rjk2NEIwOUZENTEyMURGODlDNkRGCis6MTAwREYwMDAwM0NBODEzRjJBRTQzQzUxQjlEM0YzNkY4ODJCRkZEMTVBCis6MTAwRTAwMDA3QTg2QzZENDgzMkYzODE4N0UwOTM4RDhGQzUyNEU3NDlGCis6MTAwRTEwMDAxN0Q4RTE3OTU5RUZBMERGRkEwQUI3QzcyMzcyOTJEMjQ3Cis6MTAwRTIwMDA3N0U3RkRENEVFMDQ5RkI3RTM3QTc5RDc0NTE1Q0Y1OTFDCis6MTAwRTMwMDBFRjdBNkVENUNGNjBERUU4MTlBRTc0OURDMTc5RENFRjM0Cis6MTAwRTQwMDA1QTQyRTlCQTExRkM4NzQyMUM5RjFFMjUyNjRFRjgyN0ZDCis6MTAwRTUwMDA4N0YwMUY4Qzc5QkRGRkUyRkE2M0JBOUZDREIzOUE5RkVBCis6MTAwRTYwMDBGMkZCMTYzRTRGREM5NEYzNUMzMkNDRTdCN0YwN0QxMzE3Cis6MTAwRTcwMDAzMzNBRDVCOEYzMzI4NzEwQTQzMEUzNzUwQjQwRkZDMjg0Cis6MTAwRTgwMDA3REM2NzJEQUM4M0VGNDc2MEJBQzAzREVGNDgyRTkzRDJGCis6MTAwRTkwMDBERjNGNkRDRTgzRkNCREMzQjRDRkM5MzRERkRBMkY4RTA0Cis6MTAwRUEwMDBFREY3RkUxMkU2MjcwQTI1NUVFMDc5QkVGRkMyQ0YwRDAwCis6MTAwRUIwMDA2Q0U3RTcwNkJFMDhGQjU5RTk3NTFGRUM2N0E1Q0Y1RjM1Cis6MTAwRUMwMDA4MkZEQUNGNDdFM0ZERkNGNEFCMkFGRUU3Qzc4NzFBRUVDCis6MTAwRUQwMDA5M0NBRjlEMDM2Mzk2NDg4ODc4QTdEREUxRDcwNkUxMjE4Cis6MTAwRUUwMDBFMDAxQjdDQUNFOUI3MzUxQjQwNUY5MjgxQzJGNUExQ0Q4Cis6MTAwRUYwMDAzRUJCNEFDNzU1RkQxM0MxN0M5NDZGOURFRDQzNzlEODI1Cis6MTAwRjAwMDBDRUU3NTkzMzhFMTFFNzNBOUFFOTUyQTM3QzU0MjA0RTJBCis6MTAwRjEwMDBENTM1MzVEMERDNTRDODA3MENFNDY2RjZBNDVEREI2MjM5Cis6MTAwRjIwMDBGMEI0QTYzMUI5NjhFNTdFNUJGMDIyMDkzRDJGNDVDQkQwCis6MTAwRjMwMDA5RkI4NDhGNjZDNjM3MUI2QTAwQ0I4MDNGRUEyMjI1Q0ExCis6MTAwRjQwMDAzRjQwMTBDN0Q1MTc2RjQ1RkYwQjcwMjBFMDMyM0M2NzVDCis6MTAwRjUwMDAyQzE3RjZBNUJFODQ3OEFFN0U3OENFQkQwQ0I3RThBMzdDCis6MTAwRjYwMDA3MERDMDhERjY0RTQxM0MzRTdDNUFGRTNGOUNDRjUwMzM1Cis6MTAwRjcwMDBGMUU1MkQ5QUM3RDREQzkzMUZCM0ZGQTA3MTM4RDBDODE4Cis6MTAwRjgwMDBGMTkxMkJGNjdDMDRENTI0NTdFNjdBRDI4QTI1MUM5NzVBCis6MTAwRjkwMDAwNTA1M0NERUMzRDczRkM0Nzg2RTVFREI4N0Y5MUVCRDE2Cis6MTAwRkEwMDBDNTM2MEZDNDE3Q0MzOEQxOENGM0Q1NjJCNjVGNENCOUI3Cis6MTAwRkIwMDA5REVENUJBREJGNDgzMDNGMUUwNTI2MzM3QTBFOUJDQUMwCis6MTAwRkMwMDBGMzc5M0I1QzAxMkZDNDMxMUJCQzI2RENDQkNGOTEyQUNCCis6MTAwRkQwMDAyRjMwRTI3OTMzREU1NzA3NTQxM0RFMEZCMkY5NzAxMzY2Cis6MTAwRkUwMDAxQkNGOTNFNzA5RkE1MUNGRUY2NEYxODEwMzZFMEY5M0EyCis6MTAwRkYwMDAzRjEyNDJCRkE3QzI2REI5NzU5QjA3RDZBOUQ4M0VDQzk4Cis6MTAxMDAwMDBEMjYxODJGMTkyRDIwMTBGRUVBQkFFMTgyNEUxRUI2NzEwCis6MTAxMDEwMDBFMDc5QzM2RDc4OUU5MDg5N0YxNTEwRUE0RDg3N0EzQzAwCis6MTAxMDIwMDAzRDEzMjE5RUE3OTAyRDcwOEU0Q0E2QkQ0NTA3M0Q1MEM3Cis6MTAxMDMwMDBERDZCNzFERjBERTQzMTRDNjA3MjY0OEZFNUFGOUE3QzNCCis6MTAxMDQwMDA3QzMzQTg0MDA1OEZBQjg5REZBNzk4NjRERjhCNzIxMEQzCis6MTAxMDUwMDAzMzdFNjNBRTg3QTk1Q0VFQzRGQTk2OUZEN0VGMUY2NDE4Cis6MTAxMDYwMDA3OTZENjYzOTQ4QjMwRjYxM0NCRTcyNThDM0YzOUVDREFCCis6MTAxMDcwMDBFMzZFMUVENzRBMkRGMkZFRTNCMDNGRTM2MkIyNzcxMzcwCis6MTAxMDgwMDA4Q0IzOUQ4REIzMTg0NzU1RUU5NDYxMUYwNzUxRDg3OEU2Cis6MTAxMDkwMDA4OUY1MkY3M0ZDQjVDQ0I0M0ZDRTRDOTczODE3NjFCREEyCis6MTAxMEEwMDA2NkRBMkZDNjcxN0MyNUE3QUUyRDY5QUZFMTdDREE0QURFCis6MTAxMEIwMDA2RTY3NDZFNjZEN0IxRTVGQzc2MkU3OTkxRTE4MUM3QjU0Cis6MTAxMEMwMDAxREVCODA4QjlERUY0NzVDOEJDN0IxN0I5Qjk4RkZDRDYxCis6MTAxMEQwMDBDRjExMjgyQjIxQzk4MDczQ0EwNjA5OTNBRjQ3MkQyMTUwCis6MTAxMEUwMDA0NzRFNkNGOTkwNjFGRkI4NzM3MDU5M0Q5RUM3RTg3MjI2Cis6MTAxMEYwMDA1NTQzOUNBRDhDQjBGNTRBN0Q4MEUwRkFBNTRFRjZDQTBBCis6MTAxMTAwMDA4MTk4N0U4OTc1MTA5NUM3QzU1NDg5RjU0QkYwQzk0Q0Y3Cis6MTAxMTEwMDBERjVEQzM0NjdGRTgyQjQxRTNCRTg3M0IxRjM2RUVEMzNFCis6MTAxMTIwMDBGOEQyREEyQ0MzRkJEQTU1Nzk4NkY3MzU5RTlCMERGNzlBCis6MTAxMTMwMDA1Rjc0MUJDRjA5RkE0MkMwNzg0RUQwOTJFNjJBNDNGOTc5Cis6MTAxMTQwMDA0NTREQzY3MzgyRUVBODMzOUUxM0Q0QTBERjY5RDI1RkVCCis6MTAxMTUwMDBERDIwREY1RDUyREYwRkExRkYxNkM3RUZGM0M2OEEwNzYwCis6MTAxMTYwMDA5NzhGQjc2RTFDNjRFNzA2QTExRjE4NjdCRjhCNzk1RjY2Cis6MTAxMTcwMDBEQjA3OUFDMDBCNDYzREU4MDlGQUQ5QjkzQTAzOUU5REIwCis6MTAxMTgwMDA3RTdBN0Y4ODc4MTU3NDcwRjlGOTQxMzU4NDk1QUI3MTUyCis6MTAxMTkwMDBCM0Y1OTZFQThDRjhGRUJDQjA4M0U2RjUwQTcxRkU1RjAzCis6MTAxMUEwMDBEOTYwMUZDQTQxQjlFOUJDQkY1MkY3QkNCOEU3NzlCRUU0Cis6MTAxMUIwMDBBNzcxQkMyMENFQkY0ODcwQ0VDNUE4RjlGQjZBRkJDNzlCCis6MTAxMUMwMDBENzk5QzZFRDFGNkZCNzk0RjQxRDc2RTYyNEVFREZENUYwCis6MTAxMUQwMDBGNjZCMjQ4RjBCQ0UxREE0RkNFODgzNDc5M0Q5N0I4RDNGCis6MTAxMUUwMDBFQURCOTZCNDAyM0NFNzIyQzM1RTI5QTU0QzhDQzYzQkUxCis6MTAxMUYwMDA4OTNFRUJBQUYyQ0VCQTc5MUM5RkU4NEJBRUVBRENEMjZDCis6MTAxMjAwMDAwQ0JCODdFOUJGQ0VGMEQxMTY0OTBGQzEzOTc5RTY3NTFECis6MTAxMjEwMDA1Mzk1Q0ZBNzkzMjJFQ0JDMEIxRjNGRUYyMjY5MEJEMTU0Cis6MTAxMjIwMDAwQjI5OEI4Mjk1MDREN0YxODNCOUY2RDA2NjA5RjJDNkYzCis6MTAxMjMwMDBEOTdFRDJENjFCMkQzOEZGQjQwRUU5M0JFMDc3MkREQUVDCis6MTAxMjQwMDA2RTU0NzAzRjYzOERBQzYxNzkzNTlCQ0Q0RjNFQzhCMTE0Cis6MTAxMjUwMDA4NzdDODlEN0Y0NjZDMzM5MURFRTREMkVEMDEzRjUyNzUwCis6MTAxMjYwMDBFQzdEQTJGRTc0NEU1NjlCRTNGOTBCQzUyOTRDRUU0RjY0Cis6MTAxMjcwMDAyOTREODUyOTI4MUZCQTlCQUQ0Nzg0RjBEQzMzOTE3RjI3Cis6MTAxMjgwMDA5QjI4RUY5NjAyNDcxN0RBNkQyMkYwMDExQkJGRUZDMUQyCis6MTAxMjkwMDA3QTRBMUNGREY1QTczMEJGRDg1NzI4ODVBQzkwNDdCQUNECis6MTAxMkEwMDA5NDg0QUM2M0Y4OTU5RDZFNEJEQzc4QzY0RDI5REM1RjY5Cis6MTAxMkIwMDBCRTdDMDVDRkIzNTNDNUY5N0E1OUVDN0NCRDZFRDNCOTZBCis6MTAxMkMwMDA5NTM3RjE3RTFFNEFCMUUzQjUzQjY3MEZEQkE3NkEzQTVCCis6MTAxMkQwMDAxRkJEREVCMzkyQzRFMjU5NzFDRThGMUE3OTBGRTM0QzcxCis6MTAxMkUwMDAyN0M3Mzk1RjQ0QUMzRjZERTdGQjk3QUIyRTVBOUFFMkI0Cis6MTAxMkYwMDBEMUZGNjE4QTgyNzQzQ0FGNTlFM0Y2RUY1QjlDREVDRThFCis6MTAxMzAwMDA2OTVFM0M1N0I1RjU0OTBCOUVBM0VGNzNCNzRFQzFGRDFGCis6MTAxMzEwMDBERDI5NUYyMzJDREVDNUU4QUZFNzdBRUE3Mzg3MzY5M0QxCis6MTAxMzIwMDAxNDVDQTc3RTFBN0UyNzQ0MkRCMTQxMkM4RjlDQkNCMTQyCis6MTAxMzMwMDAwNUNGODVERDBFNzk3MzM5RDFGRUE1ODg3NUVCOUQ4N0M0Cis6MTAxMzQwMDBFQUYyOEFEOUY5RjMxMEVGQTkxRDYwNzlFNTBCNEI3NjIzCis6MTAxMzUwMDBGMTNDOTI3RURDQUY2OEZFOUQ5MkQyQkE4MDBFRjNGMjMxCis6MTAxMzYwMDBDMkM2RjA2NkM0M0Y1RThGMUY3RkI3ODQ3ODM3RTJFRjU2Cis6MTAxMzcwMDBBODhDREE1N0E5MjFFRUVBMUM2NjcyREZGOTczNkYzNzgxCis6MTAxMzgwMDBGRTBFODg1QkUwNDZCREIxMjYzMzdBM0U1OEY5RDBBMTA3Cis6MTAxMzkwMDAyREIwMDQ2MzNFMUZDQzdDQkU5MEYwQ0I1NDEzQUUxNDMyCis6MTAxM0EwMDBGRTU4MDMwOTFENTZBNEQxNzFFNjQ0RkVEODYzMjkxQ0RBCis6MTAxM0IwMDA4RkRDNDhGRDMxM0FGRTc3RDk1ODNFQUQ2RkJENTQwMkZGCis6MTAxM0MwMDA0RTYzRDI3QTY5MzJEOEFGMUZGMTcxN0FCMzNDODBFN0FECis6MTAxM0QwMDBCNEI0MjZEODY3Nzc2OUE0NUMxOEY3MzM3NUU2MDREQ0UzCis6MTAxM0UwMDBERTMxQ0FERjk0MjJCMzdENzk5N0Q5RjkxRUFBOURFNTMzCis6MTAxM0YwMDA3MThENUM3OUZFOEI5MEVCNTk0RTFCOTYyRjcxMzJCRDJGCis6MTAxNDAwMDBBOEI4RjI0MkQ2NThGMzY3QTkyRjQwQTAzRkQ0QkVDNDczCis6MTAxNDEwMDBDRDBGN0IzMTg1RUQ0NzU0QzNFQzlDMEFCNUVEQkRFQTk5Cis6MTAxNDIwMDA3OEZBMkNGNDcwOUREQUI0MEZFQ0M3MTY2OTZEMjgwOUIwCis6MTAxNDMwMDBFREMwRDU5RjVGNzk4QkZDRDlFRENENjU0RDNGOUM0MkNBCis6MTAxNDQwMDBGQkZGOUFGNTQ3MUVEMDhGQ0QwMUUzRUY0Qjg5RUI2Qjg1Cis6MTAxNDUwMDA1QUMwOEVGQzc3MUY3MjgwQkY3OTNFMzk3MDFDRTg4NkI3Cis6MTAxNDYwMDA3ODM3RUMyM0VDOENCQzY4NDc3QjZBRTJCQkI5OUVCNTRECis6MTAxNDcwMDA0RUM2NzdENUMzREU5MzdGRDMzRDhCNjNFMjI0NzU0RTkyCis6MTAxNDgwMDA4OUNGMUZGQTVCNDBENzRDQUJGRTM2QjRGMzQ4NjVGQ0ZFCis6MTAxNDkwMDA3NUM4NENBNUYyMUQ3ODVGQTkzNUZEMDFBRTlEOTFEREEzCis6MTAxNEEwMDAxODNGNEU0RUQ2RkYwNzdDNUZBRUU4RkYwRUNGRkZDOTU4Cis6MTAxNEIwMDBBQUY3MzMzQjVERUQzQTUzMTBEREQ3OTA2ODlDNjFFMUFDCis6MTAxNEMwMDBFMjRDNDEyQ0JGM0UxQjlGMzNFQzRENDM2QzlDRjU4MDlFCis6MTAxNEQwMDA3NjhERTNFQ0E0RDcyRkMxREM0MjlGRjc5N0M3NUY2RkVGCis6MTAxNEUwMDBGRjExOTcyN0FBNjc5OEFGMjBGNkJERjhEQzQ0OEYzNzI1Cis6MTAxNEYwMDA3Rjg5RjI3NEZDNjUyN0U2QjUwNzlCMjBBRkYzRTQxNEZGCis6MTAxNTAwMDAwQkQ5MUQ2M0U3QzQ3OTA1QUQxMUU2MTc1RTc4NDhEQTlCCis6MTAxNTEwMDBDREZDNDI4MkY3M0ZGRjdBQ0U2RTU4REY1RDNBOERFQjBECis6MTAxNTIwMDAzMURGNzc3MUY3NDNDNkZERDBBMkREMzlBOTdDRkNDNzU2Cis6MTAxNTMwMDBEMUNGMzY1RTZFNzMyQUQzQ0YxRkE0QjI3OEQ4NTVFQkM1Cis6MTAxNTQwMDA2NzA2QUI0N0U4QTlBQUIwRUI1RDJFMjY1RkVGQTdCMjBFCis6MTAxNTUwMDBBQjJENEQxMkY5RUJEMzgxMEY1NDBGRkI1M0FFNkQ3Q0M1Cis6MTAxNTYwMDA5RTVBOTJGN0Q5RTU0M0U4ODNFQTM1RTZFNzZERTNGQTU4Cis6MTAxNTcwMDAyMkVDMTVBNUIzRDRDOUVDNDUyMEY5REFFOENDMkNGRDUyCis6MTAxNTgwMDAxQ0U0NThFQzNGOTAxRDkyMjExRUJFQzBDOUUzOTU1QzNGCis6MTAxNTkwMDA3RjRGMjlGQTQyQTA5M0VBRUYxRDI4NUY4OUY1Nzc4OUVBCis6MTAxNUEwMDA5M0U5RUYxNzlDNDZGRDVERTY2NEZBRkI0NTI3RDNERjIwCis6MTAxNUIwMDA2NkU3NjdEMERGMEZCOEZFRjg3OTFDOUYxQzM3REExRDhECis6MTAxNUMwMDA4QThCRUY4MUZBRUIxNTg5RUZFNzI2N0Y5NDYyRkM4RjE3Cis6MTAxNUQwMDBGQTgxMDBEMUQ5NjRGOTVDMkM2RUEwRjg1NUM3RkQxQkM3Cis6MTAxNUUwMDA2RjFBRUI3QjhCOEYxN0I1NjNGNzQzQkQ2RjQxRkJCNDZECis6MTAxNUYwMDAzRjlCRkYzQkUzMUZGMEYxQzUzODdBMjlGODI4REI1QUZGCis6MTAxNjAwMDBEQ0IwRkYzNUQxM0NCN0MwQzlFNjE5QkY4REVEQUYyMEM2Cis6MTAxNjEwMDBDNzY4RkI0NTg2RkU3QzE3RjgzN0QyOUYyMEY1RUNFMkMxCis6MTAxNjIwMDBGNzI3MThCNzNGN0RDNkZBNjJGQUYzMDhENDJCRkE1M0FFCis6MTAxNjMwMDA3MUU1Rjg5OEZBRTgxM0ZBRTgwQUNCMzA2RkZCOTRGOEYyCis6MTAxNjQwMDBGMzQyQUY5M0NEREIxRjNBRjQyN0ExN0VCMzdDODlFQjQ1Cis6MTAxNjUwMDAzRjcyN0Q0OEI0MEZFNjk0NTJGOThGQzBFRjUyODVEOTlFCis6MTAxNjYwMDA0MUEyODVGQkU1OThGRTk1MTZCNDg4N0UwNzJDQjE3MUUyCis6MTAxNjcwMDBCNjgxRjg3NkYyMTdDRTExRkJGMDBCOTRCRjlENkNERkFDCis6MTAxNjgwMDAwRTk1RUI1RkMyRkQ1RDEzNUNDQjcwOUZENzQ3Q0M2RUIwCis6MTAxNjkwMDBCRUY1Qzk3QTZCMUE2REE3MzlFMzg5RUZDMUY1MUQ2N0VECis6MTAxNkEwMDAxQUQyREIzMjk0RUI4NDYxRTgyRjY3RkIxRjVCMjdCMzEwCis6MTAxNkIwMDA3M0QzNUEyNUUzRjk2OUVGRjBGNjZFRTJGNkU5MUFGNDBFCis6MTAxNkMwMDBGQkFENUNGOUQzRUJDNzY3QjUwQjk0M0YyNzg0RkQ0Q0FBCis6MTAxNkQwMDBDQUJCMzZCQjM0RkI3MzY4N0ZFOTM0ODJGOEI4NzU5N0IwCis6MTAxNkUwMDA4QUU3NkMwOUJEQjkwQkM2OTY5RDc3QTA0MzFFQzU1NzA2Cis6MTAxNkYwMDBFOUJEODVERTBGODFEMzBERjYyQTlCMTBGNzRDMkMxNzIwCis6MTAxNzAwMDA1NEYxM0MwNEZEM0Y5ODNERDJDRkMwOTVEQUExMEZCODBCCis6MTAxNzEwMDAxRDFBODAyQkI1NDM2NzNGOEIxRDNBRUM2NDc2QTg4RDZDCis6MTAxNzIwMDBDQTUwMUZDOEExMTI2MkY5QkREQzlGQUFFNzdEMkQyRDBBCis6MTAxNzMwMDAzODZDODhEQjA5N0ZBQTczNjBCNzE2ODRCQ0MxMDJCNjE3Cis6MTAxNzQwMDAxRjM1NTFCQjYxRjAzNzIwNzEyNUMxRUY1Njg5QUJGRkMyCis6MTAxNzUwMDBDOTE1NzY3MDAyMzY1MzVDMDc3MTU0RjEzQjdBOUREMEZGCis6MTAxNzYwMDBCRTA2RUQ1OUYwNzc3RTVFMjMzMkFFQzM5QkVCNkI5REQ4Cis6MTAxNzcwMDBDQUU3RkQxNDJFQ0Y5MzU3QTI3RjY1RkUxREJEMkE3N0MxCis6MTAxNzgwMDA2OEZCNEM1QThGRUZEOERENkM5RkQ1RTVCQkM5QjIyMjAwCis6MTAxNzkwMDBDMDI3MDEwMkU3NkRBQUY0MEFGOTlCODJFRTY5QTlENzc2Cis6MTAxN0EwMDA5M0Q4REYyMzU2ODlBNENDMkI4Q0RBOTFBQTA4MDk1NzQ5Cis6MTAxN0IwMDAxNDIzQkVDMUZENUM1MDhGODdENzEzMjg4MkY5M0U0RDlDCis6MTAxN0MwMDA4MUY1QkVENzEyRkMxRUQzOTM3MjYwN0E2QTRDRkQ3RUZGCis6MTAxN0QwMDA2MkM0MkI3NEZDQUY0RjlEOERFMzdGMDM5NEEzRTM1RjQyCis6MTAxN0UwMDA5MENBRTZBMTFCRTFGOTU5MjdCMzdGNEZDQTREODVGMDk2Cis6MTAxN0YwMDAzQzkwQzE5NkEwNjlGOTIyNUU3RTQ2RUFFNzIwMjc5QkNECis6MTAxODAwMDAwOUZCRkQ1RDkwREZEOEY1RUFERERDM0U3NDRDMEM5NEZECis6MTAxODEwMDA0MzNCRDUzRjVGRDQzMzg1N0VCMkJBQkQwNUNGMzlBRUU5Cis6MTAxODIwMDBCODJFRjJEMTI5QzhCRkNENTI3MTNEQjBGNTUxRTMzQzdECis6MTAxODMwMDBGMjFDRkZGRTQwQUE4OERGNUQxQjhFQTBGNkFGM0UxNUFFCis6MTAxODQwMDBFOTYzRjYyRkU4NjZCRjMzREEzMjM5RjczMTA2MUZBOUFDCis6MTAxODUwMDA4Mzk5MTkzREJGQjZEQUI1MDhDRkU3RkFDNjBCMzkzMzFECis6MTAxODYwMDBFMUJDMkI5NURCRTc3OUVFNkU3NTA1OEM2QkE0M0Y2RUMyCis6MTAxODcwMDBCRUU5NTc0NkVDMjBCNURFODY3OTJBRkUzOTJGRjdBNzU4Cis6MTAxODgwMDAzMjVDNEJGNUY4QUI3Q0ZDRUUwMjNBNUY5Q0E4MDc1MjQ5Cis6MTAxODkwMDA2N0ZGRDdEOTQ3NjE4NzAyMEFCMzM3RDQ2RjBBODJERjVGCis6MTAxOEEwMDBCNEVDRDJEQTIzMzA0RDM1OTMyNzZBNjA3RDgzQ0FFNUU0Cis6MTAxOEIwMDBERjAxOUQ1RkI2RUYzREMyN0U3QTMwMzgwNURBQTVGMkQyCis6MTAxOEMwMDBGODcwMkFCMzQ3N0Y5RkNBRUNEMTc3NTI5OTNERkE4N0M3Cis6MTAxOEQwMDBDRjIyNjdGN0E2OTIzMUYxQTdDMEUxMDI3RjUzM0JCRjQ5Cis6MTAxOEUwMDAyRDk1RTE0RjhGRjNGMzk5Mzc3NkYyRkEwMkNFNkI5Qzg4Cis6MTAxOEYwMDAzN0JFRjQzOUI0NEZGMUM2Q0Y1MDVGMzkxRjEyRTFEQjY4Cis6MTAxOTAwMDA1RjcwQjlGQTY1QUE4OEZCRTlCRjA0RkUyRkI0RUJGRjRDCis6MTAxOTEwMDA5QzFBOEIzNzBBOEZGRDExRjJFNEEyNzhBMzVCRTY3ODVDCis6MTAxOTIwMDA0Mzg5OEQ2N0ZCMjhGRUUyNzk3NUY3NThFNjQ0RjU0NDU0Cis6MTAxOTMwMDA4REM0QzcyMUYzNTM0NzcwNDgwNzhFRjc3Njg2NDNFNjc4Cis6MTAxOTQwMDA4RkQwRUQxRDA4ODExRTRFRTFGQUZFM0I2NjhGNUJENDAxCis6MTAxOTUwMDBGRTdCRjAxQ0RDNzQ0NkI3OTRDRUM2RjEyOEVGQzdCQjAzCis6MTAxOTYwMDA1MjRBRENGOEU2QjE2ODdCQzdCMEJERjVBQzNERDk3MTMxCis6MTAxOTcwMDAyQkZCREQwRjYxNTdBQzEyQjYyM0UyQzNGM0QzRDk3NzRCCis6MTAxOTgwMDBBMjlENzlGQzJBNzBBQUI5OURERjQ2REJGOTJEQjZGMzNBCis6MTAxOTkwMDA5MEQ4MDdBQ0JGMDVGN0JFMjg1RkMzQjE3QzA1RkI2MkRBCis6MTAxOUEwMDA5OTEzQzM0RjhFRUIxMkUxQjgxOEZFQkQ4Nzc2QTA4RDU4Cis6MTAxOUIwMDBCNTMzQzJCRjQwN0MzQkJCQ0MyNTBCMzkxOTQ4MUQ0MzE2Cis6MTAxOUMwMDAzRUNFNzFGOTM4MUY5NThGRjM1QzNFM0U0QzQ1N0NDMjhDCis6MTAxOUQwMDBDNkUxQUUwOUM2RkRFNUMzNUNBRjFFRTE3QzEyRTM2NTVFCis6MTAxOUUwMDBBNkJGOTVCRjFGRTE4N0U3RDg3M0IxQjhENjU3OTBCNkE5Cis6MTAxOUYwMDBBQzE5RTI5NjZEQjJEN0UyMTkyRDZGRjQ1RjNFRTBERENGCis6MTAxQTAwMDBGRjA1Q0M1MkIxRUYwMDgwMDAwMDAwMDAxRjhCMDgwMEUyCis6MTAxQTEwMDAwMDAwMDAwMDAwMEJFNTdEMEI2MDE0RDVCOUYwOTk5RDI2Cis6MTAxQTIwMDBEOUQ5NERCMjlCNENERTFCNDhDMjI2ODAwRDFBNzAwOUQ1Cis6MTAxQTMwMDAyMTA2MDgzQTc5RjIwQTEwMTExMDE0NjE3OTg1RjA0QUVBCis6MTAxQTQwMDAyMjYyRUJGMzY3MzEyMTNDRDVFODU1NkI1QkI0MEI4MjI2Cis6MTAxQTUwMDA2MjhCMzY2MEFBODgwMTM3MjA4OEVGRDAyQTY4RjVCNkY1Cis6MTAxQTYwMDA0MUFDQTAyMjU5NTBFQkRBREFGMjlGRUYzQjY3QjIzMzc4Cis6MTAxQTcwMDA5QjVEQzBEQUY2N0FGRjNGREVERUMzMzk3MzlFREZGQjgzCis6MTAxQTgwMDBGQkNFMzdCMzQ1ODRGREM5MjdCRDkyM0I5NzkwQjE3RTBECis6MTAxQTkwMDBBMjdBNkQ4NDlDODNCRkFCODJBNTU1MTEwODQ5MjY2NDQ4Cis6MTAxQUEwMDA5OTVDNjU1NTg2RDIwMTY1RjVDRUFBODE4NEI0OTc3NDk4Cis6MTAxQUIwMDAyRUE5MEFEM0ZGQjYwNERBOUZGNjlCOUVCRUE5MkNEOUE1Cis6MTAxQUMwMDA0OUZCN0I2ODdCMEEyMUMzMURGNERGMjIyMUQ3RDVCNEYzCis6MTAxQUQwMDA4QjZFRERCOEU5OUY3RTNDNEYwRDMzQ0Y0RjEyNENCODczCis6MTAxQUUwMDA2RUMzMENENzIxNjczRTlEQzY2MTcyNkQyNTNERkIzNUU3Cis6MTAxQUYwMDBDN0NCQjhERUE4NkNBRjE0NDdGQkJENzk4NjI4OUI2OUJECis6MTAxQjAwMDBCRkVCMjYwQkFBOTc5RUFCODI5RkNCOTZDMENFOTFBNTJBCis6MTAxQjEwMDA0OEQ4NUZFNUZCMUMyNTc3Q0UwQjc3OEU3Q0ZFN0NCNDI2Cis6MTAxQjIwMDA5M0E4MkQ3NDlFRDEwQTUxNzc4NkU5NTcwOEZCODQ3OUQyCis6MTAxQjMwMDBBMkMzQ0YzMzhEQ0YzMzg2QjA3OTQyOUZDRkUwRkIxQTVCCis6MTAxQjQwMDA1NTEyN0VGQzA4M0VGRjM0Qzc4RUYyMDQwMkZCRDk2NEI2Cis6MTAxQjUwMDAwNkY4RTU5OUQ1NjEwQTFEQjczNjAyMUU1MkE0OTI5MTg2Cis6MTAxQjYwMDA4MEFGMjgwQTNBNzMxRTIxMzNFOTU4MTM5RDYwMTZFMEFFCis6MTAxQjcwMDA5Qzk2MEY4QUVFNTI3OEVFQTZFMDcwRTQwMTI1Nzg3QTAyCis6MTAxQjgwMDAwMTVFNEI2QzZBMTlCNDQ3NDdBQkU1MzBGRjQ4NDlBRDdECis6MTAxQjkwMDA4MEYyOTc2Njc1MTRFMjlGRjgwODI5MjA2NDAyQTc5RkQ3Cis6MTAxQkEwMDAwOTU2OUI0RjhDQTVGRjI4MzQ5RkVBQjRCMkI2NzNEOTZGCis6MTAxQkIwMDBGMEZGNjcyODFGNUY0Njg4NDA3Q0MyQjlDQkEwRUUxNUI2Cis6MTAxQkMwMDA2MUZFRTFDRTQzRUYwQUI0RkY3MDZEREM0OTI5NjQ1QzJECis6MTAxQkQwMDBCQUYyNzEwQ0FGOEJCODJGODRDRjZFRjM0RjlEMzY1MzkyCis6MTAxQkUwMDBDRjczNkFFNTZFOUJEQjBBNzAzODFERUQ5RTA5RkI2Q0I2Cis6MTAxQkYwMDA3MDZDQjYzOTI5QkM1Rjc1Qjc1ODVEQjRGRDY0MUM0MTgzCis6MTAxQzAwMDAzODc2QzVBODZFN0NCRTlCRDRCNEQwNzYzMTQ2QTg2RjFBCis6MTAxQzEwMDBEMUMxNkZCRUMyRTA1REFEMzBCQ0JEMjVBOUQ1NzBGRTlGCis6MTAxQzIwMDAwOTU2NzUwMThDOUI5QzQ5RjE0NEU3OUQ5NUQ4Qjk1Qzk4Cis6MTAxQzMwMDAwRkY3N0E4RUE3ODU5QzZFNjdDQUFDNUZFODNFQUJGOTVBCis6MTAxQzQwMDBGMzIyNDlGMEM0QzA5RTZDODczRTEyODEzRjQ4Rjc1RjgzCis6MTAxQzUwMDAzRjEzQUQ4Rjg1N0Y1MUZFMjkzQUE5NEM5RDk2NDQ3MTYzCis6MTAxQzYwMDBCNjQ2NzQ5OTY4NURDRTExQzJGMkU5OUQ3Q0JGOTQ0RjZGCis6MTAxQzcwMDBFRjg0RkQxMjI3RTU1MzNCQTUwRjM5M0M3RDdDQzVGQjY2Cis6MTAxQzgwMDA5NzQ3QTBDQjNDN0U5RTMyNzgxRTY2RkNBNTlDQUVDQkNGCis6MTAxQzkwMDA5MkRBNDU0MkM3MTc3MTdFMEJFRDM3Mzc0MUM0N0UwRDhFCis6MTAxQ0EwMDAyRTMyM0FEQzNDMEYwNEU1Q0IwMzQ4NUYwQURCNzc5RTFCCis6MTAxQ0IwMDBCOUVBMjFBOENGNTAwRTk3QzdEM0U2RTJCQjkzQTY5MjBDCis6MTAxQ0MwMDAyNDgwODc4OTU4QjIxMDRFNTY0MkUxMjQ3MTM4RDE2RDc0Cis6MTAxQ0QwMDAxMkE4MkZCM0IyQkExNEJEODRDNEQxMzJEM0UxNUQzRjkwCis6MTAxQ0UwMDAwOEUwRDc2ODc2Mzk2OUZEQzM5MzFGOEE4NEQyRDlENkI0Cis6MTAxQ0YwMDAwN0NFMEE4NENBOEJERDdFNDIxMkIzNjAxRTE5NjY4NDQ5Cis6MTAxRDAwMDAzRkQzMzlBMUU3N0NGNDk5NTNEMkQ2QTNBMEI5RjIyNEVBCis6MTAxRDEwMDA1MTJEOTQ3RUFGMkNGNDRGMjJCMTg2RjFFNDFDOURDRjVGCis6MTAxRDIwMDBFNkVGRjAwODgwM0YyQkYxQzQ1QzhFNjRGQzc2QkYxNEI0Cis6MTAxRDMwMDA5QzE1RTc0QkE1RUJDMjc5RTQyRjg5MTdDRUEzM0FEQ0JCCis6MTAxRDQwMDA5NTY0MTAyMUYxRkVDRTVGRDQ2MUJCQ0QzNTBBQ0Y0NTNECis6MTAxRDUwMDA2Q0MwNkZDMTczMkU0M0ZFRDNGNjI1REIzQTFGQkI5N0QxCis6MTAxRDYwMDBGNjZGRkIyQURBNzUxNzlDREI1RkYxMDlEQjBGRjFEODAwCis6MTAxRDcwMDA4MUFGQzU0QTE3Qzg3NzQyMkNCODNGMTNGRDBGRjg2Q0U2Cis6MTAxRDgwMDA2NDgwRUUzNzg3RUYxNzE2QzlEN0VEOUZGNDNDQ0Y4M0Y5Cis6MTAxRDkwMDA2MkQ1MjFDMEM3MkMyQjUxNjNGMzUwM0VCQzAyRjVCRTY3Cis6MTAxREEwMDA2NkRBODFDMkIxNDkxMUJDMUVEQUFGRTk4MTc5NkJCMjQyCis6MTAxREIwMDA0MDVFNkY5MDVDRkQwOUQwMzlEOTI1NTAzQTFGNDFENzVDCis6MTAxREMwMDBCRDg1Q0ExREI5OTBEODE0NUE5NzFERUNGQzRENzcyN0Q0Cis6MTAxREQwMDA2RDhBMTFFMEI5NDQ2NTIxMkRGREJFNkYwNDBBODc1ODU0Cis6MTAxREUwMDA0Nzc1QTU0MkNGMjFGM0YxMDIwNTFDOEMxNzlDMEE5OTc3Cis6MTAxREYwMDA5MTA3NzREQjIxMTI5NDBGMEU4NDg3QzYzRkVBOEY4ODA3Cis6MTAxRTAwMDBGMEIxMTU1NTBEMDFGQTJBOTM4OEM3NEFGQjBCMEUzNjFGCis6MTAxRTEwMDBFRjk1QzQyRjkyQkU4MDA3QUEwODY4NTk0MjVDNThERTJECis6MTAxRTIwMDAyQkJBM0YwNkJFQjFDQTE0QUY3NEZGNTY5M0Q1QkI1MjRFCis6MTAxRTMwMDAwMEZDNTVCRDNFMUFFMTVFQTY3QzlDMTM5NDY3OTFFNEJDCis6MTAxRTQwMDAxMDQwRUU2MzBEQUVFMkY3OTc3QkU1Q0JDM0YzRDVERjMxCis6MTAxRTUwMDA4MjdDRjMzNzI2OTc5OTVFOUU5Q0NERTRDRTAxN0JFNzhBCis6MTAxRTYwMDAwQzNEREZBRjUyOThEQzU5QzVDNzExODlGMUQ5MzI1OTAxCis6MTAxRTcwMDAzNUM1OUY4N0NGRDdGMjcxOTc4MkYyMDE3RDRDQzJGM0FGCis6MTAxRTgwMDA3MTRCM0M5MzA3OTNFRkYyMzZGNUEyRjA5QjkwMjBCODhDCis6MTAxRTkwMDA0MDBGOTc2RjlGMkRGNTc2MDZGQkE1NzI3REE3QTRBODJFCis6MTAxRUEwMDBGMUYxMzBERjZFRDc0OTZGMTI2ODFGMTlGNTdCRDM3QkQ0Cis6MTAxRUIwMDA2NDFBQ0MzRjlCQ0JDRjAwOUZGNzJGRjE2QzFGRTlCQzdFCis6MTAxRUMwMDA3RTRDQjA0RjBCMDc5N0NDRjg2RUI4NjRDMkI5ODg5QkI0Cis6MTAxRUQwMDBDMTQ1OEMxOUVDRjdEMTc1NDg2RkJFOEU1OUMwNzVEQUMzCis6MTAxRUUwMDBCMzk5N0NDQ0U2RkJEMkQ2RTlDM0U1MUY5NUZCOTdDMDNFCis6MTAxRUYwMDAzRTI3Njc3QUQzQTFERkFCNjZCNkJGRDA3NTA3MDZENzlBCis6MTAxRjAwMDAxRDg4RUIyRTYxRUI4RTA1MzkwRkZDRUYzQ0Y0MTJDOEY3Cis6MTAxRjEwMDBGOTIyNEVBNzYzRkQ2RTAyNzYwRkYwQjBBOTIwMjhFRkRDCis6MTAxRjIwMDA2NUE3NEZBQ0E3RUQ0NTExRTRGQ0YwRTAzQUMzNzE5RDA1Cis6MTAxRjMwMDA3QTg2QzczRDI5RUEwOEQ4MjdCNTBCOEFBMEJEM0Q1QjQ0Cis6MTAxRjQwMDA0MTc5Rjk2NjJGMTNEOTRDRjk3Mjc2NUFGNjNEMjAzNjRECis6MTAxRjUwMDBCNTc5NzZGMjczQjY2NzM1MzlFNjUwN0NDOTdFRTJCMjYwCis6MTAxRjYwMDAyMDlERDdBMERDMkJFMkYyQTU2MUI3OUJDMDczNEYyRjU5Cis6MTAxRjcwMDAyQTMzNzVFMzY1RkYxQzJCQjFFMTUxRkU3MTRFRUI0RjI3Cis6MTAxRjgwMDBGOUE4Qzk5RjFERTcwRTgzMTdBRDVDQkY4Mjg5MjJFMkM1Cis6MTAxRjkwMDA1QzhBRTM5NkYxNzFBMUZENkMwRkVFOEI4MUY5Mzc0MEZECis6MTAxRkEwMDBGRjFGMTEzMjkxRUIxQjdBNjBEQ0RGNThDRTNCMERGRTM4Cis6MTAxRkIwMDBDRDMxOURCNERGRUU5Q0I5ODZGREUwNzNDQTQ3NEQzOTQzCis6MTAxRkMwMDA4RkM1ODBCREQ0OTY0MUY1MDBDOEE5NTc0NDk0OTM0RDYwCis6MTAxRkQwMDA3Njg2QzdBNkI0NkFBMkI3NDc0QjFEM0VGMTYzOThFNzYxCis6MTAxRkUwMDBEQkI5NjQyQUM1NUY5MUMzNEQyRUExRjA1REM3Rjc1MURGCis6MTAxRkYwMDBFNEFBRjYwODQ5RDhGRTZDMTQ5RDY3NzlGQzI1MDg0N0M5Cis6MTAyMDAwMDAzOUM3NEQyQTcyMDEyRTVFNTI0REM3Q0I4QTRGNzREMTBCCis6MTAyMDEwMDA3QUE5OUZGOEFFQ0E4N0ZFNTRDRTBCNkMzRUE3NUQzRkVGCis6MTAyMDIwMDAwRjY5ODE3OUU0NUM0NjBGQjJCRjg1MDBGQzc2OUYzQzY2Cis6MTAyMDMwMDAzRjFDNjM3MjRDMDZGOUFERjEyNUI1RUI1NjAwMUQ5NEJCCis6MTAyMDQwMDAyOTU3OTdDNUQzRjkxNzZEQ0ZDQTEzRTlGQzE1OEU3NkJBCis6MTAyMDUwMDA3OTRFMkVDQTZEMEZEMEM3Q0U2NDc1NjVGQ0ZGQTAzRENBCis6MTAyMDYwMDAzNzhENzhDRDgwRjc1MTk5NEMwRjRDQTgxNUJDOUIyOTIyCis6MTAyMDcwMDA3QzlBNDJFQzg0OUZDNjMzM0UyQzBDQ0FCQjlGRTFCRUM3Cis6MTAyMDgwMDAwQjM1M0I0MUZEMzlENENGNjMwNzNGMEFGMDM4OEYxRDM0Cis6MTAyMDkwMDBCQzA1OUU4N0IxODNCNzQyM0I4NUQ3RTNGMUNDMEU3RTZBCis6MTAyMEEwMDAwMkQ2QTE3NkYwQjZFRjAzQjcwOTBBOTNBM0Q0MEVEREVBCis6MTAyMEIwMDAwMUYzQzY4MzcxMDNGNkQxMUY5ODNEMUFCQUZGREJGODBFCis6MTAyMEMwMDBGOUQ3RDBCMzc2MDA1RDRBNUU4OUQxMzlFM0QzRTE5QzdDCis6MTAyMEQwMDA0RkM3OUVBNEZDOTJEQjkzRkVEQjI4RkQ3QjI4RkQ5RDcxCis6MTAyMEUwMDBBNTc2OTM5ODE1OTk5RTdDMTdDOTk3QzUwRjMyQkU2RjM4Cis6MTAyMEYwMDA3MEVDNDNCRTdCOTFGMzQ1MUI1RkJGMkQ0N0FDMDQ3QzY2Cis6MTAyMTAwMDBCRTRBNDQ0NTE0N0FDRUQ3OTRFMTc2ODA1QzBGRTUzRjExCis6MTAyMTEwMDBGNTVCMjMzRDk3M0FCQzFCRjI4MDZGMEVDRDc1QzFCNkJGCis6MTAyMTIwMDA0MkY5NTFBNjY1RjVDMEUwQkU4RjAzMUYwRUQ1QzkyNzQxCis6MTAyMTMwMDAyMjQ4Qzg4RjE3RTA0Mzk4QzczRDEwRUM4Qzc4NDlDREYyCis6MTAyMTQwMDAwNTNFNjJFQjdBMEU4OUE4MjcyMkYxMTFBNTlCNTM4MEU4Cis6MTAyMTUwMDBCRjZFQjgwMEIwNzVGQkE3NzRGMzM5M0NBNzdDNzZGQTY0Cis6MTAyMTYwMDBGQkQwQ0IxQTRFMUZENDBGRjkxQUU2RUIxRkNGRTg2NzRFCis6MTAyMTcwMDA3NjA0RkZFMjFGRjFERDdFQzAzRkEwM0Y5OUMxRjQ1MDFECis6MTAyMTgwMDA2NkJDOTM4RDIzNDkzMkU4MTc1NUNDQzgwNEY5NDJFNzYxCis6MTAyMTkwMDAzNTI1RDBGNkI3Qjg3RjE0NjlERUE4ODQ2RUZFOEI0QTY5Cis6MTAyMUEwMDA4MEYzRENDMkU2M0QwNDQ2RjZEMDlFRjM4RTRBQTBGNkVDCis6MTAyMUIwMDA0Nzk4NzlEMkI4MUNCRjJFODJCRjkwQzVGRDEyOTJEQjIyCis6MTAyMUMwMDA2RDlGQTRDMDdBNTk5QzZGNzYyN0FCOEUwNDFEREYxNEQ3Cis6MTAyMUQwMDA3MUJCRTU2NUMxQTg5NzczQkFGRDdEQzYzRjQ5MDlBQ0RGCis6MTAyMUUwMDAzRjk5RDczRDZGNTY4MjBFOUU5QTFEMzA5QkNCMDc2RDRGCis6MTAyMUYwMDA5RUZFOUNGRjlDMDkwQTFCNUZDM0M2Qzc0MzlEOEVBQjE2Cis6MTAyMjAwMDBFMEZFMTM4NTRCMkVDQzQ3QUNFQ0Y5ODVGQ0EyN0IxNDg5Cis6MTAyMjEwMDAxOUM3Q0ZFNUZCMTJFMjE1NERCRjIxNUM0NzQ3RjJCQjYyCis6MTAyMjIwMDA4MjcyNzAzOEUyQzFDNUZBNUZBQTEwMERFRjIzNzExRkU4Cis6MTAyMjMwMDA5NTZDMUY4NTBBQzM3QjY4RkMyMDEyN0UzNEY4Mjc2QkRGCis6MTAyMjQwMDBFN0NENjFGMzEzNEYzN0RDNDZFQkU5MjUxMkRDREU4QTdDCis6MTAyMjUwMDA2M0Y2QzUyODBFMjdEMkM4RTcwOTkxMDc3NzRCMUQ1NkFDCis6MTAyMjYwMDAyNUNDMzlBRjhENzcxQUY4RDlFRTMyQ0E4NzQ4RjE5NDY4Cis6MTAyMjcwMDBCQzIwN0M2NjIyMUNGMkQ5QkUyM0M1NTcwQUY4Nzk0N0Q4Cis6MTAyMjgwMDA3MEZCOTY4RTlCOEY3MEI1QjFGRERFQTM3NEI3RDdFMDVGCis6MTAyMjkwMDA3Q0U5NkNCRUZBMjBCQzE3NjNCQjgzRjU4RkU0RjdEN0VCCis6MTAyMkEwMDBGMzdENTUyNzc0OEY1Qjg2RUIyNEIxNzFBMUYxMDRBREVBCis6MTAyMkIwMDA1Q0MyRjdCNzMwMzhFRTU2NUNBRjFGMUI5NzFDRENDNzBCCis6MTAyMkMwMDAxREQ4M0U5QUI1N0ZERkY4NUIzMkRGRUY0RjgyRUJBRTcxCis6MTAyMkQwMDBDMUZEQUFFQ0ZDODFCODZFQjhBQ0M3RjYyMkI2NkUyNDdDCis6MTAyMkUwMDBGOTExODg2M0U3NjhFMjcwQkUxMkZDNjIzQTQ3N0M4MEFECis6MTAyMkYwMDBFNDQ4NDlFMDM1NDVCQjQ2RDEyRUE5MDFENTA3RkFBM0VDCis6MTAyMzAwMDBFNDRCRDkwOTcyQkE1Q0I0NzkwNDJBOEYyNUE3MTVGRDZDCis6MTAyMzEwMDBFNDI4ODlBOEUwRDdCNjdGRjU2MzQ3NjcyRUQ2N0RBMDZECis6MTAyMzIwMDBENzU3NDcxNTVCQzFFRjVDOTMyNUI5NDAxRjE2REYyN0QwCis6MTAyMzMwMDAzMUZGRkE5NDA5RTU3RDg1QjgwNEU3RDlBNzY4NzZFRTAwCis6MTAyMzQwMDA4RDA2M0ZEQUE5MzgyQkEzNjAxRjU2OTEzODk5RkY1RjlECis6MTAyMzUwMDAzOTlFM0VCRjhBQ0JFQjdERDY0NDEzQ0MzNzIyODNDNTUyCis6MTAyMzYwMDAwQkFFNzI1NkEzQkY0RUJFNjU3RUI0NEFGRjYzRjI1QkVFCis6MTAyMzcwMDA0NUJEMkNGMzcxNTI3QTNEMTFCMDM0RkFEQjMyRDk3MDdECis6MTAyMzgwMDA0NjFDODQ3QTAxRURBODExN0VBM0ZGMkQzQjJCNEVDMDg1Cis6MTAyMzkwMDBGQzMyRDE4REEzRUIzRTlGNjA0RjQyN0JBQTFGRTk3RkE5Cis6MTAyM0EwMDA4RUYyOEYyNTQ3MjAxNkVBNUY5NDRCRUUzRDgwODczMUYxCis6MTAyM0IwMDBDRTZBQTU4NDlFQzc5MkVFQjY4MjFDRUU2N0Y2RjU4NkJECis6MTAyM0MwMDA3ODQyNjNCQUVDRjIwMDFCM0U1MDY2Q0QwMjdGQUI5OUI3Cis6MTAyM0QwMDBGQUU3MDgwNzM1RTFFQTgxNDEzQzU5OEE1NDAyNzQ0ODFBCis6MTAyM0UwMDA3MTgyRkNENTVEREE1ODk5OTBDOEYwRjg0OTgyMDVDQjI2Cis6MTAyM0YwMDAxMjVFRDc5RTg3RTI3RDQ4NjIzNEUzN0Y2MkY1N0M5NDZCCis6MTAyNDAwMDAwMzcyNDIyMDcxOTQwRTk3OTJDRTRDQTBDN0U0MzQyNkZBCis6MTAyNDEwMDA5RjZBNEQ5RDI5NTBFRjIyRkU5NDI0NUEzNjM0NEJBM0Q3Cis6MTAyNDIwMDBDM0Y5M0YxQjc5RkM2Q0FEMjlCQ0JERjQ0QkYzOTgwRjhECis6MTAyNDMwMDAwMDBFMTJDNDBEMkVDN0I4ODBEQkQyMzcxODNGRDBFQzg3Cis6MTAyNDQwMDA1NTJEOEUxMEM5NkVCRDU3QUNGQTE4RTYxMTE0REYzNzQyCis6MTAyNDUwMDBEMEJGQTdGREVCQzE3RDQ4RTk0QzRFNkJBNUI2OEY5OTY3Cis6MTAyNDYwMDA4OThDN0YxQzg5NTY4NENGREUzQjRBQzkxQzI3RTJFOTUwCis6MTAyNDcwMDAyQ0YwMjlDNUQzQTEyQjAwMkE1OUYzMTRDMEQzMkI1OTEyCis6MTAyNDgwMDAwRkY1ODNCODk0MzVFQjgxMjRFMENGRDE4NEQ5QTdFNTRCCis6MTAyNDkwMDA3NDhDODM5NjBGRDlEQ0RGMjRFOEU0RTE5ODdFQjNEMTE1Cis6MTAyNEEwMDA2RTJBQ0FBQzQ3N0I2QTc1MDRCRkY0Qzc3QzFGMTJBN0FCCis6MTAyNEIwMDA5MzEyOUJEQjk0MzgxNEUyNUZDQkFDMzA1RTUyQUFBMjNECis6MTAyNEMwMDBBMURDMUI5ODg0MjVCNTdCQTU0NERBN0Y3NTNBQUI1RjA4Cis6MTAyNEQwMDAwODBGRUY3MkY5MTA2OUZGQTM0MDJGNDBCQzI2QkRGQjI3Cis6MTAyNEUwMDAxQzA5MzAzRjdERUU5MUYzODJFN0QwRUQyRjI1RENGRTE1Cis6MTAyNEYwMDBDQzg5NEMxRjY5RkI5MkZBNzFCQUNDMzFEMkRENzg0RThGCis6MTAyNTAwMDA4RjM5ODk5QUJGNzhEMTc0NzdFNDYyRTgyRUY0QkM2MzdFCis6MTAyNTEwMDBCMjk2OEYxRTQwODJGQkQ3Q0VBQjlEOUY5RUQ3MDVFNzFDCis6MTAyNTIwMDAyRDk3RDhGOUI3MkE2RTE1QTZBMDcwMUUwQ0VEM0RDRURBCis6MTAyNTMwMDA2NTBEQUZGNzMzMTI0RERGRjUzQzBGMjVGNEJERjhGMzExCis6MTAyNTQwMDA3Qzg3NzlBNzI2N0UwNzM4MUQxOEE5M0E0MDlFMzQyNjM1Cis6MTAyNTUwMDA1M0ZBQTQ3ODZBMTQ1OEE5RjU4RkU2Nzg2QUUxNzRGQUY4Cis6MTAyNTYwMDA1REU0NDRGRkVGNzBCRTYyODdGMDEyRThDM0FCRENDN0U2Cis6MTAyNTcwMDA0QTYxOTlCMkEyQzFBMDc2ODAxRkU3MDFCRDk1RTRERTUxCis6MTAyNTgwMDAyN0NEQTFGNUE2M0JFNkEyRkMzQzMwQjIxRUY3QkREQTkyCis6MTAyNTkwMDA2RURDQUY1NjI2NzA3QzE0NjVBQUM4N0Y4RDlDRkZDQTdFCis6MTAyNUEwMDAwOUYzMjNCNTdFNkRGQzVDQTFGQzExM0E1RjI4NUYzRjA3Cis6MTAyNUIwMDA2NDUzNkYwNkZBNDg0ODY0RkEzMkU4RkY3NTg4N0FGRjc4Cis6MTAyNUMwMDBBRjg0RUJBRjkxRDY5QjBDRjE4RjkxRENGRjVCRkQ2NTg3Cis6MTAyNUQwMDBCNkNENDMwRjdBOTZFQUI1N0Y4OUZGRjcwRDdEMDI3RTZGCis6MTAyNUUwMDA1MjdBODk1NUVGRkYzNTVBNEJCMTdENzU4NjNBRkFGMjJBCis6MTAyNUYwMDAyNEQwQzdBMkVCMkU4MkYwNDM3RkQwMjM4OENBRDYzMEU2Cis6MTAyNjAwMDBGRUUwRUEwQ0Q5NzcxNTdENkU1MUM4RTNCMEJGNTJBQTNGCis6MTAyNjEwMDAyRjIxRkU2MjUxNTQ3MkM5QzA5RTdFRTEzRTZCMjk4MTFBCis6MTAyNjIwMDBCOEM5NTk4NTNDMEJGRUQ4ODVDRUYzNzhBMkQxMkY5NDNBCis6MTAyNjMwMDBDMDJGRTRGM0EzNUZBOEQ0OTM0RThDRjc5NDEyQjA2QjMxCis6MTAyNjQwMDBBMEREMzkxMEU0OEU0QURDNzZEMDIzRDQyRkQ0QzlBNzdDCis6MTAyNjUwMDBCM0Q2OUI5MERGNDNEN0EzNzJFQjY5QTBBMzQ2ODVGMTY1Cis6MTAyNjYwMDA3MUE4M0YyODcyM0VEN0U0NkMyODNEOTQzQjE4REQ0NEE2Cis6MTAyNjcwMDBEMUFEOUI5OURDNzgyRTMxQjkyNzVEN0M3N0Y5MzRBRkU5Cis6MTAyNjgwMDAwQzVDODA2QkM5Q0EwM0UwQUE0RDA5RjgyNTcwNzk5NkU1Cis6MTAyNjkwMDAyNzNBQjE1Rjk1NkQ0NzIzM0NEN0U2MEZDNTBGM0RCOThCCis6MTAyNkEwMDAwQUYxNzRCMDY3NThGQzg2REE2QkQ0OEUzMjUzN0I2REI2Cis6MTAyNkIwMDA5RDEwNUM3RjM1ODc3NzI0N0NBQzA2N0QxRDg2OEZERTgwCis6MTAyNkMwMDBFRTk2NkJBMTcxQTI5QjhDRjcyRjhBODcyNDE1QjBCODY4Cis6MTAyNkQwMDAzRTA5MDM3RjkxREI0OTZCMjhCRkMwRkRDRDZBQjNDQkI4Cis6MTAyNkUwMDBBMTAwOUQ2NjE0QkRFQjA2N0YzRTQzQzZGQjA4MjJENUM0Cis6MTAyNkYwMDAzQkFFQjZGNzNDRTcxQTg4OUY4NUQ5REYxNzg5MDkwOEYyCis6MTAyNzAwMDA1NzZCQkFDOTYwOUYxMTcyQTdDMTdFOEM3NDZFQzJGN0Y1Cis6MTAyNzEwMDA2NUU2RTcxMjAwOUUzOTdBNzg4NjlDQkI0Q0MxNzM4M0NDCis6MTAyNzIwMDA1OTBGRjNDNjlBNUNDNDQ3RjkyMjM2OTNCODUwNjBDNTc2Cis6MTAyNzMwMDA5QTMwMEVBQkYxQjlDMkY5NUM5MzA3MzY4NThEQUI0QzdDCis6MTAyNzQwMDBFQUNCRUVGNzQ0OUI1RkE0RTc1RjlGNDRFRDY5M0E0RjA1Cis6MTAyNzUwMDA4M0JBMEZGNUFBMzYzRThFOUZERjM2OTJDNTFCNkQ3NjgzCis6MTAyNzYwMDA5RkEyODQ4MUMzQkQ5Q0NGMjM5REIzNTk5NUUyQ0JFODQyCis6MTAyNzcwMDBGRUVFNTU5OEZEMkQ4RDM0NTU3OTMxMUVDNUUyQjUwQTEyCis6MTAyNzgwMDA4NzlENTg5QzZGMDVCQjdENTQ1MjNDOEI3QkE5M0IxNUE0Cis6MTAyNzkwMDA3RERDNEFFNEZCODlCMUQzRkQ5QzQ3NEVBRTBERDk0Rjk5Cis6MTAyN0EwMDA1NDRFNjcxOUVDNUZDQTUyOTU3OERERkU0QjkyMzRCREVBCis6MTAyN0IwMDBEMjgxRkMxRDY5QkVCQkI5OUM4RkVBRTdDMkY4QURENURBCis6MTAyN0MwMDBFNkYyQzFCRDU2OTQ1QTVEMDA2MjMxM0FDNzQ1RTZFQTY5Cis6MTAyN0QwMDBEQUEzRDU4MjIxMTYxRDFEMzY2N0M4NjFFRjIzNkVFNzg3Cis6MTAyN0UwMDBFQkRCMjVCNTBBQzZEOTE1ODlDMDNEOTk5RERCQ0I5MTk4Cis6MTAyN0YwMDBFNjhEQjQ4RjBCQUQzNzJEODlFOUQzMUVFQjM5QzNEQkUyCis6MTAyODAwMDAxNTdEOTIxOEZGNDkyMzc3NTY4MTlDMjYwMzI1RDIzRkQ4Cis6MTAyODEwMDA4QzlFNDg0ODYyRjIyNTU2RUU3NDgyQkY0RUU5RDExRDY3Cis6MTAyODIwMDA2RTNFOTIyNDczN0VGRTM3RjE4NzY2NzcxN0I3MUVDQTE1Cis6MTAyODMwMDBBNkZCNkRCMDQ5MkUwMUU0NTdFMUM5MEVBNzBFM0U1NDI4Cis6MTAyODQwMDBBRkNGNEFEMkM5N0REMUU2NDZGOTI2M0FEOUJERkI2ODU5Cis6MTAyODUwMDAwQkYzQjcwRjhDMzRERTkzQ0RFN0Y4RkE4MEMzMzE5MkQ3Cis6MTAyODYwMDA1QzI4RTJGMEY4Nzc5REYzQkJFMkFGMjQ4OUM5N0QwREM3Cis6MTAyODcwMDAyRUNEMDAxNzAyRkM3NTdGNjM0MzE4Nzk0OUUxRDM5MDkwCis6MTAyODgwMDA5NEZDRERFMUIzOTZDM0U1RTkwQkMwNjdEMDdGMTgzRTQ5Cis6MTAyODkwMDAxN0UyRUIyMDlGNzlDOUYxMzA3MDZDQjBDQjY5NzMwREYyCis6MTAyOEEwMDBGQ0RGOEM3NjQ4Qjg3RUQ1QkFGMzQ2RTI0MzhEM0UyMEY1Cis6MTAyOEIwMDA3NzAzRTFEMEFDMUFFMjAyNzI5MkE3ODNGOTk1MzcxQjM1Cis6MTAyOEMwMDBGNTlDQjhDNEM1RTUzM0Y5OTZDMjJEOUVGNzhGQjcxMUI0Cis6MTAyOEQwMDA1RjRDNkM3MDdFQjlDQzE4NEY2ODRCRTI3MTgxMjgxMjQ2Cis6MTAyOEUwMDAwNUYwMzlFQjlBMjQ0MDlFODJDNTM0NjNCMDkyMEQ0QkJCCis6MTAyOEYwMDAzNDBCQTAyNzUyNjA5RTQxODREQ0M3RTU2N0E4MUU0Q0JDCis6MTAyOTAwMDA1Njk5OUZEQzlCRDQwQjRDQUZBNEUzRkU5MkY4M0U0MjU5Cis6MTAyOTEwMDBGNTYwMUFGNTZCMjAxRTAzNDcwNDdGQkEzN0FENUJDMTIzCis6MTAyOTIwMDAwNjIxMkFERTgzMEIxRTEzRkFDQjBFRTIxNTYwRkU3NDFECis6MTAyOTMwMDBEMjg5NjUxRjQ4NDVBMEYzNjc5MTBFQTExRkM1REY3REIxCis6MTAyOTQwMDBFNUQ1ODM0MTdFQkYxMzcyOEUwQkQ5QTM1QUE5RDkxRjM3Cis6MTAyOTUwMDA2QkZGNDNGMEZFRjQ3RjJGQkM1Nzk2RUFFMDJEMjY3RkY1Cis6MTAyOTYwMDAzRjc4Q0ZFNzcyMjczNDlFNTcwNEYxQkMyQzg4RTdGOUYzCis6MTAyOTcwMDBGNjAzOUZDQURGMzJGQkEzRkRFRjMyQzZGNzFBQjM1ODQ2Cis6MTAyOTgwMDAzQ0FGNUNBQzdDMThFRjQxOUQzMkJBMUY1MjRFRTc3QUU3Cis6MTAyOTkwMDBDODczRDJFQzRFRDQ3OTdEODM3MTNGRUI5OUZCMjU4OEM3Cis6MTAyOUEwMDBBMzEwRTkyNEMyMDlFRjg2OUMyOENGMzI5MzUxREUzMDcwCis6MTAyOUIwMDAzQkUyMkFCRTdGMzk2QjlFMTVFRUJEODNGRTkzNEY2NENBCis6MTAyOUMwMDBGNjA2QjM5NzY0NEUwNzQ1OEUxMkY0NUYxQUJGM0RCRkZCCis6MTAyOUQwMDBERDcxQjE3RUQyNUVFOTAwREU1RjZCRkU1MTgzN0YwRTVBCis6MTAyOUUwMDBGQTRCQTFFMzdDOTJFRjdEMzhCRkNGMkYzQjIxREZBNEQwCis6MTAyOUYwMDA4RERGOEJCNTlEMzk2ODg4RDM4NkZBNDE5QTVENzUxNTUwCis6MTAyQTAwMDBERjdGQTlERjdERTg3MkI4REY1MkU2MTAxNkRGNjQ3MDYxCis6MTAyQTEwMDA5MEY5M0E4RDhFQjM3ODBGRkVFMkI3MjZGNEI3Q0U3MkY2Cis6MTAyQTIwMDA3RkFCMDhGQzJDM0JGMzc3QUFFRDNEQ0YzOTIxMzlCQ0I1Cis6MTAyQTMwMDBGRjA0RTMyMEFGQUU1NEYxODk2MENGNjlGRTEzQjQzQkNECis6MTAyQTQwMDBFRDNERkRBN0QxMTZGRjZCQjBCRjA5QUY4OTk4MTcxMkY2Cis6MTAyQTUwMDAwOUJFQTE3RTUzQThGRTk5OUVDQ0Y0Q0U0REM5RENBRTMyCis6MTAyQTYwMDAwQjgxQTcxNkVGMEJCRDk3NkVEMkY4NEZGMjA4N0FGRUQ2Cis6MTAyQTcwMDAwRjVENUZERTM3MDZGNzRGMTQ1RDNDMzYzQjE4NEYxNDkxCis6MTAyQTgwMDA1NDBGQjkyNTJGMTgzRjBDMTMzNzVDMEE3NEE4QzUwREQ1Cis6MTAyQTkwMDAzNTNEQTZEMUIxODVGNkI1RTIzRDczRjg3ODYyNUJENkQ3Cis6MTAyQUEwMDBDMUJFQ0MyRjdDMjkxMUY4QjM1QzYxNzEyMzZEN0ZENDNBCis6MTAyQUIwMDAyRkJDMkQ1OTg3OEYyMjNGRDNEQjk2RkY1M0RGQjk5MjZFCis6MTAyQUMwMDBDMjk3MjQxMDE3RjMwRkVBOUQ1NjVBQUY1MDQ4RTIzQUM2Cis6MTAyQUQwMDBFNDMzMUJFNjY5MTUyNTA5Qzg3NzkyMkYwQUVCMTVBNzgxCis6MTAyQUUwMDA1Q0RFMjg1QUI3RUM3QjQ1MTQ5MzYwQkQzOTI0NEEwODU0Cis6MTAyQUYwMDBEMjhGOTZEN0QxRThGRjcwM0RFMEVGRUMyOUM5NzUzRTQzCis6MTAyQjAwMDBCRkJCMDI4MjY4MDYzRjI5M0E4ODRGOTQ2RjA5ODZGQTU0Cis6MTAyQjEwMDA0MzkyRkJBMTY0QjQxNzdCMDVDNzg5OTAwRjk2NkRDOERCCis6MTAyQjIwMDAzRjdCNDY1MjdGMEE3MDlENkE1NTFGQzZGRTNGM0NCQ0U0Cis6MTAyQjMwMDA2RjRGQzY3OEYxQzE3RjBBRUZDMTc1OTgzRTAwOUI4RDNCCis6MTAyQjQwMDBBNEU5RDZCM0QxQzY2MUIwOEU5M0REMTc2QTcxRTlFNTA5Cis6MTAyQjUwMDAwNEVGNjNCNjAxQ0UyMENFRjIzOUYxNDI5Q0U1MDVGM0Q1Cis6MTAyQjYwMDBDQjIyRThBMzI2M0VDRjcwRDJFQzk0RkJCMkZENDJCRjRECis6MTAyQjcwMDAyN0I3M0EzNjAxNURGQzJFMzkwQkQ3N0ZDMUU2REUzMDMwCis6MTAyQjgwMDA5OEI2MUZEQTIyMEQ4NkI4NEQ4M0YzMTkyQkU0Q0ZFRUU5Cis6MTAyQjkwMDBEQkRBOTRERUE5RTNCRjQzNEZCQUZCODRGMzBGQjU5MkFGCis6MTAyQkEwMDBGRUM1OTkwQUYxNUNCMUFDNTQ0NTkzMDNEQjQ1QThGNzI3Cis6MTAyQkIwMDBCMENGQjZCNDJBQjBDRTkzNUJBREQzQzJDNTM1QzQxNDgyCis6MTAyQkMwMDBDNkVGQzNCNzMwQkI3Njc0OEVDOTA1RTJBRDg4NzhBNDcyCis6MTAyQkQwMDAwNEI4OEY3MTExOTc4RjM2QzQwQ0RDRDk4MTM2NzA5NjhBCis6MTAyQkUwMDA4OEY3MUFCNEJFM0Y5NkQ2NjM4NkFBRTgxRjBDMThCOEI5Cis6MTAyQkYwMDAxM0M3MEZGOEJDQzRDNUYyMjgzREI2M0M1QTVGOUY1M0JCCis6MTAyQzAwMDAzMjc0MURBREE3NDdCQjNGMDZGQUEyN0FBNjU5NDI3RDkyCis6MTAyQzEwMDBEQTEyMDM3OTAwMzEwMzI3MjVBRkEzQjUxODgxNTQ4NTUzCis6MTAyQzIwMDBCMzczRkY5QUNDRUNFRjI3Q0QxQTVDMjVDQzgzRENCN0NECis6MTAyQzMwMDA1NTQ2RkUzQTk0MjZFMkZEMTM4NURCMTJBOEZGMjUyREFBCis6MTAyQzQwMDA4NjUwNEEyNDY1QUFBNzBDRTA1ODRFNUExQUMwOUYyQUZCCis6MTAyQzUwMDA3MzVFRkQ1MjJDRjkyN0UwOTdCRjUzMDFGRTVGMUZDMTQxCis6MTAyQzYwMDAwRUZGMURERjFGMEExMTRBM0YwN0I3MzQ1RTQ3QzJFNDVCCis6MTAyQzcwMDA1MTZCNzRGODVDOEMyQUE1RDBGRTZCRjlCRDJFNzE0QzlCCis6MTAyQzgwMDA0MkZBODk4Q0VGQkI5OEJGRDlFMjZCODhBNjcwMUNCRTU0Cis6MTAyQzkwMDBCREI5OTc3RUZFMjMxMDc0NERFRTg5NkZDODdGMjY5N0NECis6MTAyQ0EwMDA0M0ZFQUQxQkYzNjkxQjRFOUExMDdFQUZFNjBBNUU4MUIwCis6MTAyQ0IwMDBDMkU3NjA4RTQ4NkQzNkJBQUI3RTU2NkY3RjVBREZDMDcyCis6MTAyQ0MwMDBFOUI4NzJGQkUxQzY1RUMwQzIyOTQ5QjhFRUFCMzk4RkU0Cis6MTAyQ0QwMDA1OTU5N0VFQkM1QzdBRjg3NTAzRTU4MDRGOTUzMTQxRkFFCis6MTAyQ0UwMDBBMzk0NjhBRjkzRTI2QjMxNEM0MUVCMjMxNUFCRDc0NzBDCis6MTAyQ0YwMDBENzZCQjc3Nzk0QzZEMTI1NUU0ODE2NUM5QjgxNUU3MjEwCis6MTAyRDAwMDA4ODAyRjIwMzVEMTAxMzQzOTQ0MkVCMjAzMjkwOUU5MkFFCis6MTAyRDEwMDAwOEU2NzNBRDJGQzhERDBDNzFCMTc1RTlDRTE2QzgzNzYyCis6MTAyRDIwMDBEQzMzRDA4QUY5NjZBMUY5QzQ3Qjg0RkE5N0UyMjEyRUJDCis6MTAyRDMwMDAxNTJGQTBCQzNFOThGMzNCQkNBNzNCOTg2RTIxNDBBRjNCCis6MTAyRDQwMDA5OEYwNEI5RjM3MjYzMDNFOERDOTM3REE5RkU1Mjk1OUQ5Cis6MTAyRDUwMDBEQ0NGMjYxRTRCNDE3MDVGMzFGREFDNkExNDI1QTQ5NzcxCis6MTAyRDYwMDBFM0Q5Rjg0M0ZEMDQyRkQwREIyMTI3OTcwRkY0QkM1Qjk4Cis6MTAyRDcwMDBDMTIwOTI5QUE1QTkwMzIzRTNGNTk1RkVBMzlDOUE1RDMxCis6MTAyRDgwMDAyQzY4RTczNEY1M0NDNzBCODI3NzREMzY5QzYzMDAzREQ5Cis6MTAyRDkwMDAwN0FEREI3MzA0NUNERkFFQUNCQjkxNjA1OUI4MDBFRUVECis6MTAyREEwMDAzMTQzRjdCRjIyODVGOTQ3MzIyNUJCMUM5MDZGMkQ2QjRECis6MTAyREIwMDBDNkU4RjM2M0U0QzIxQjI3RDg2MjMxOEYwOUVEQ0FENDk5Cis6MTAyREMwMDAxQzAxQ0YzM0U2MjRCQkNGRUQ5MTlGQUQxMEI3NkNDMDkzCis6MTAyREQwMDAwRkI1M0E1MjgyRjNDNTdDRjlFQzRGMjBGRjc3NUNBMTI2Cis6MTAyREUwMDBFMDhCODJGREYwRkM2NkZBN0ZFREEwNUZFNDdFQjM1OUQ0Cis6MTAyREYwMDBGRTc1Q0UyNjNDQ0ZEODQyQjMwQkVFNzJDNkRBQkNDRDAwCis6MTAyRTAwMDAyNUI0RkVDQTI3MTJDNkIzQzdGNTFCODVGOUQ1QTFFQkI5Cis6MTAyRTEwMDBBRjUzODg2RjM0ODVFRjJCQjkxMkMyM0JFQTkyQzc3MDZCCis6MTAyRTIwMDA5RTM3NzM0RDI4NkZDNjQxM0UzNkU0MkZFQkYzQUE1MTBGCis6MTAyRTMwMDAxRjFBRjNCOUM3ODkxRkE4QzVEMEVDNjJGQzRBMjQ0RkZBCis6MTAyRTQwMDAyRjkwRUYxMzFDNDZGOEQ5NEYxQUVGOEIyQkYzMkQ4NkRBCis6MTAyRTUwMDBGQUI4NUMzOTQ0MEY3QjEwREUyRjY3MzBCQTc4Nzk4MDdFCis6MTAyRTYwMDBFMEREOUMxNUE0QjNCMTI3MTNCQzQwNjdGMDI3MTYxODBBCis6MTAyRTcwMDBFMDY4Mzg2NzhDNUY1NjAxN0U4NzA2M0NGMTVGNzA0RkQzCis6MTAyRTgwMDAxMkUzNUM3RDIzREU4MzczRjg2Qjc0MTJDM0YxNkU0RjIzCis6MTAyRTkwMDA3RkVFMjdBMEE3MzRGODg3RDJDMUM1RTNGRkVBQUE2Mjc0Cis6MTAyRUEwMDBDMDdGQkU3NjdGMUY4MkZGMTA3QzYzMEM1MjNCNDdERkUyCis6MTAyRUIwMDA5RTc4QzdGNUIzN0FFMjVCQTM4MzFFRTdCRUJCNzU0RDcwCis6MTAyRUMwMDAzNkM1RUJBQjc2RkEwMEYwQkM0OUY2REUyNTA0RjE3NEFBCis6MTAyRUQwMDA0MUJDRjYyQjQ2QkE1OUE3MzREQjQwRUU0NzVENzJEQ0E1Cis6MTAyRUUwMDAwNkZFODE0NjE3NDQ2Q0NCRDdEQkZCRkYyQTdDOTc2QzMwCis6MTAyRUYwMDAxMDk4MzNFOTEyQkMxMEQ3N0IwQjFFMEQwQkFFRjM1MkFBCis6MTAyRjAwMDA0QTc3QkVDQzRCMjBGNzQ5MTVDQkUzNjg1MEYzRDg3QjBBCis6MTAyRjEwMDA1N0Y5NEM5Rjg2Q0E4NzNGQTRCMEY3M0FEQUNEMkZBNzVFCis6MTAyRjIwMDA5RjJGNEZCNUQyRTYyNjcwM0ZENjAwRjk3NkY0N0NGMjlCCis6MTAyRjMwMDA4NkQ5RjA0NjAzOTEyN0NGNDY3OTQ5MzYwODJDMEZBMTUwCis6MTAyRjQwMDBFOEY3MjhERkU3MzlCQ0FCODQzMEVCQTEyNTgzRkI3NEJECis6MTAyRjUwMDAzMkJCQkYyODExRkI5MzY5NUE1RTUyRDUwN0I4RkZDOTJGCis6MTAyRjYwMDBBQzdFQjFGQjdBRTM1RkI0QUZBMzk0NTY4OENFRkY5Q0VFCis6MTAyRjcwMDBDOEUzRjI5QUREM0RDMUM2RjIwRTI3MTQ4OTg4OEYzNzY3Cis6MTAyRjgwMDBCNzA4NUVDQzhGQTRGRDNDOTQ0RTE2NzFCMjlEQzhFRDdGCis6MTAyRjkwMDBDMEIzODVDRjM0MEQ3NjgyM0RBODFBRUM0RUExQTgxRDkyCis6MTAyRkEwMDBFREJFQjg0MkEzM0YxOEFGNDYxQkYwOUYzODNBQzE1MDYwCis6MTAyRkIwMDA0RkFFRUE2NUU4OUYzQTJEREIxODU3NzA1RjZBNzhERUZFCis6MTAyRkMwMDBCQjI2Q0Y1MENGQTgxRjZFRThERkU3OTYxMjQzM0RDQjVDCis6MTAyRkQwMDAzM0Q2RDBCRkVGOUE0OTg2N0FGRkU2RUIwQ0ZEN0ZGNDNCCis6MTAyRkUwMDBGMDFDQzNGMzAxREU0NTg2RTc5NzZENUI2NkE4MEY2Q0E2Cis6MTAyRkYwMDBCOUNERDBGRkYyNUQ3NzE5OUUwRkY2QUQzMzNDMUY3MjRECis6MTAzMDAwMDBFODdFNDM3RDY4QzdDRjBERkRBRjc4NzdCM0UxRjlCMEI3Cis6MTAzMDEwMDBDRTVGMTk5RThGMzhCOUQzNTAxRkU5REY2REU4N0Y1NTE5Cis6MTAzMDIwMDA2MDlGQTE1RTRDNUUzM0Y0MkZCNUZFREU1MDJGNTdERTVECis6MTAzMDMwMDAzN0Y0MUZFNTM4NkU3ODNFQzZGOTk5RTFCOTQ2MDdFM0UzCis6MTAzMDQwMDA3MkJFMzBCNDhGNzdGRDJERTQzRDlEMkExNkU3ODA3ODVGCis6MTAzMDUwMDA0MDVGNzhENDhDNjUzNDY5NjFGNzNBQTQwM0NCODUwNTY5Cis6MTAzMDYwMDBFRUUyNTRFMDhGNDczRDREOTA5MEQ0RTBGMUZGMTFBRTc5Cis6MTAzMDcwMDBBNkRGMkNFQzFCQzdFQzI3OTVFOEU1QTc5NjlGNEFGRDM5Cis6MTAzMDgwMDAxNjRGMTQyNTg1RDgwMEE1REIyMTk0RUUwMjAyOTY0QTNFCis6MTAzMDkwMDA4MDRBRDY0NDg4Rjc0NDYxOTkxMDQ4QzRGNkM0NDAzQzNECis6MTAzMEEwMDA5NjQ5ODFERUQ4OUUxQzQ4QzMzMjI1RDAxN0NCRDQ0MDI4Cis6MTAzMEIwMDAxNjk2OEVDMDY1NThBNjA1MDY2MEQ5MkIzMDA0QzdGNTU0Cis6MTAzMEMwMDAwRTBDQzYzMjNEMzAwMkRCMzMwMkMzQjBDQzBDOTQ2MjJFCis6MTAzMEQwMDA3QjlGNDAzMTk2Q0VDMDM4MkNCMzAyNjNCMENDMEU1Q0RGCis6MTAzMEUwMDA4M0ZERkEwNkFFQzZCMjVGRTA3QTZDRUYxRjk4OEVFNUZDCis6MTAzMEYwMDAyNTgxQjk1OEZFMjgzMDFCQ0I5Q0MwNjIyQzA3MDQxNkQyCis6MTAzMTAwMDA2Mjc5NjlFMDI2MUM3NzU5RTA0NjJDNzMwM0I3NjNGQkFDCis6MTAzMTEwMDBDMEMwQUQ1ODBFMEEzNDYwNzk3OTYwMjU5NkFFQzA3QTg5Cis6MTAzMTIwMDBFQzM3MzhCMDE2Q0JCQ0MwN0Y2MUZCOTBDMDdENThFNjUxCis6MTAzMTMwMDAwNzdFODFFRDQzMDMzRkMzQjIyMEYwMTg5NjU3MDQzNjUzCis6MTAzMTQwMDA2MTU5MThGODM1OTZDMzAyNEY2MjM5M0NGMDBDOEUxQjVBCis6MTAzMTUwMDAxMUQ4ODE2NTUxRTAwNTZDMUYxOTc4MUVDQjJCMDNGQjNDCis6MTAzMTYwMDBCMUZEQUE0MDNCOTY2QUUwMzU2QzJGMEVCQzgyNjU0OUUyCis6MTAzMTcwMDBFMEY3RDg1RTFBMzg4QzY1NTlFMDdENkMyRjBGQkM4NzVDCis6MTAzMTgwMDA2NTQ1RTAzODk2QTMwMkM3QjAxQzFERjgwQ0NCMzE4MTExCis6MTAzMTkwMDA0RkIwMUMxQkY4MDJDNzhEMEI5Q0MxQjIzMkYwMzc2Q0NDCis6MTAzMUEwMDAxRjFGRjgwNkNCNkU3OTE3MzE1RkQ5NkQ0MjdGOTZGQkYyCis6MTAzMUIwMDBBOTkxRkQwNTBGQ0E0OTMzN0YyRjBFNzJBQjMxRkZCRkI2Cis6MTAzMUMwMDA1RUYwNjJCQzMwQTlGMzI1QTg5QjBCMkQxODJGQkM4MUEzCis6MTAzMUQwMDBGOEYxM0Q4MUZGMjY5RDc2OTBBN0VEQzM0RUE0NDNCQzM4Cis6MTAzMUUwMDBFOUNENjQ1Rjg2M0VERkMxQ0NFMzAwRTVFMjI5MDlGQzVFCis6MTAzMUYwMDBENTA5NDlGQjkyNDE5RkRFNDA5QjIxQ0Y4OEE4RTczMDRCCis6MTAzMjAwMDAwRjcyMDJDRjgzQkM0MUEyMEUxNkRERUE2MTk4NjExOEVECis6MTAzMjEwMDBGNkYzNTk2ODdENDYyNTUxRjM2OEZGQTY2MTE2OENFQkRECis6MTAzMjIwMDAzN0U1NTEzRjg4OTY3NzY3QjE3Q0Q5MURBOTRDNUZGRTgxCis6MTAzMjMwMDA4QTk3QkI1Mjk5MURFQjI5NjBGN0ZCMzM2RUVDQ0ZGOEYwCis6MTAzMjQwMDBBOTJDRjEwMjdFMTM4M0MzREYwN0YyM0M1QjlCM0YxMzgzCis6MTAzMjUwMDBGMzYzMkY3MkRDNjcyOTdDMUNFRkRGOUM1QUQ1OTYwQTNBCis6MTAzMjYwMDBGQjI4MjEzOUY1QjY2MDNGREFGRTYyODRGNjdERTFEQUFCCis6MTAzMjcwMDBGNzk5MTgzRTNDNDc0NEVFMjc1NEM1NEQzQThGOUZGMENFCis6MTAzMjgwMDBFNjhBOEU0QjVGRUExRkFDQkYxNUMxMEYyNTY0MjVFRUExCis6MTAzMjkwMDAzNzc2REYyNzk1RDc1MjdEMzhCMTUwNzQ1MUM5NDEzRUZBCis6MTAzMkEwMDA1OEIxNkJFNDQ3RkREOUJBOTA5RkU5MjkxMTMxN0UzMUJECis6MTAzMkIwMDBBM0U4RjA4MTQ0NUE5RkIxM0MxRUYzRUVCQkY3NTU2MjgwCis6MTAzMkMwMDBDNkU3MTMxQzQ3MkU3RDg5MUVGRDg2RkFFNzQ3N0U2NEZDCis6MTAzMkQwMDA4ODhCQkFEMUVFQkE4OUQzMjg1MUNEN0ZFREQ0OUUyMzA1Cis6MTAzMkUwMDBCREIyQjhFRjREQjBCODEzRTQ5RjE5RTdFRDUwQ0RERTk1Cis6MTAzMkYwMDBGM0U1QzcxMEQ1NDI1NDAzREQzMzc4QUQ4N0ZEODNFRjg2Cis6MTAzMzAwMDA0RkFDMjY1ODM3OTZGN0ExNzA0NUJERUY4OTk1QkQwRDk2Cis6MTAzMzEwMDAwMjM4RUZDRTM4QTBCQjk4NUMzRjM5NUY3QzE5RTAyOUJBCis6MTAzMzIwMDA2MUEyNDJBNzBERUM5ODQ4RjA0QzcwMzBGQThCMkI1MkZBCis6MTAzMzMwMDAxRDFFOEE5RkM2QkY4Qjc4Q0ZCNTNGQkU0MDAxRkFCRjI2Cis6MTAzMzQwMDBDN0Q2MkYxNUY4MjNEOUMxRTIyNzhERURFRjYxN0MyQjZECis6MTAzMzUwMDAyRURGNEYzQzM2NzY3RkVFQjQ0MDFDREY4QUU1QUExNTlGCis6MTAzMzYwMDAyRTJDMUI1NzE0NjJCOTJFRkQ3RTJCQzQ0QkM0NjQwOTRFCis6MTAzMzcwMDAzMjgxNDk1NEM2M0M4QzA3NjlFQjlCRTNFNzU4OEI1RDZGCis6MTAzMzgwMDA5NDZDMUQ3MjI1ODQ5MDQ0ODgzMzBDODdGNzM2RTVDQTA3Cis6MTAzMzkwMDA5NUZEMDhGOTI2OTVFNTdEQkZFOUY4QzgwNkZDRjA0REQ2Cis6MTAzM0EwMDBBQTEzRUJBMjg5REQxQkM3RTRGQjU0Qzg0Qjg4NzEyOTIzCis6MTAzM0IwMDAyNTkyMzNEODhFN0Y0OUQ4QkUxOUZDOTEzNzQ5RTc4NkNDCis6MTAzM0MwMDA2QjAwOEUyQTdCMUZBMzgxQkY2RkRBNTBEQzlGQzM1NTMxCis6MTAzM0QwMDAxQjE3ODJGNzEwM0M4QkIyMEJFRkFEQzU2OERBM0YzNzk1Cis6MTAzM0UwMDAzMjVFMDczOEUyNzE5RjQwNUYxMkE1MkYzRkRGMzc1MUYxCis6MTAzM0YwMDA2MzRDMzA5Rjg2REZCMzkyMUZGM0E5MUE4NEYwNzk5NzRDCis6MTAzNDAwMDA0MzM4N0UxQTE1NTUzOURGM0QwQTUxQTRCRkVBRTVBOUI0Cis6MTAzNDEwMDAyRDc3NTcwODNEREI1MEJFNjIxREYyQjlCOEJDREE5RjZDCis6MTAzNDIwMDBBQTBFNzNEMEY5Qzc1Q0M5RjNFQkQzMTM1MDBFRDBGNkQ0Cis6MTAzNDMwMDAwMUMzMjE5RkNFNDQxNTNBQzAyRDQxNDY3RUExNDA4ODRDCis6MTAzNDQwMDA4MzNDNUY2Mjc1QzY0RDNBNEYxRUM0REExNTBFNTUzMjg1Cis6MTAzNDUwMDBDM0ZEODAzMzBFRTBCNTk2OUYwRkRFNTBENkNCODE3RjQzCis6MTAzNDYwMDA1N0JGQTBCQ0YwMjJERDg2RjY2RkQxRTQ0MDgyMTVFNTlGCis6MTAzNDcwMDA5M0M4RTFBMThENUJFODYwRjJEODk0NUQzNUQzMzE5NEI3Cis6MTAzNDgwMDA4RDAzM0VBMjc1MzdDMDhCNTg2OTdEMjBENkU3RTA3MzY3Cis6MTAzNDkwMDBBNUJCM0UwRkVCMEVENjFGMTM2OTJFNDIwRUQzNzE4QkM4Cis6MTAzNEEwMDA3MTlDRDQzRENGNTJBQ0RCQkFEN0FEQzM3NTkzQkFFQkE4Cis6MTAzNEIwMDAzNzYyM0Q5REY1QkZEODc1QjRCMkZCRkNCRjYzNzJGMkI1Cis6MTAzNEMwMDA0QjQ5OEQ0QkEwRjQzQ0Y2OTZCOTU1QTAwQUM2REZCMjI1Cis6MTAzNEQwMDBCMEFBOENFQUVGM0ZBRTc4NTcwNUI5RjQwMTk1Mjc4RDc1Cis6MTAzNEUwMDBCNDFDM0I2MDdGMjJGODM5RTM4N0VFOEY3MUVBRThGNTgwCis6MTAzNEYwMDAwNjFFRDc2Q0JCQzUzQzFBRjQ1REQxQUQ2MkQ1MTY4NEVGCis6MTAzNTAwMDBGNzRBQzNCRENGMUE4Nzk5Qzc5QkQ4M0U2NjQ4ODREQzZCCis6MTAzNTEwMDA5MTAwRjJGN0YwQTU4RDA2QkY5M0YzQTFDMkRBQkFGN0Q2Cis6MTAzNTIwMDA3QjlCODBGQkZEQTA5RUM5REIwRjk2MEIyODZGQkJGOTMwCis6MTAzNTMwMDAzNDlFNzAzRkRFOTcwQzcwOUFCOTVDMjdCNzQ5MThCODczCis6MTAzNTQwMDBENDVCODhEQjIwRDcyM0MxODc5MEJGRDJGQTk3QjY3RUExCis6MTAzNTUwMDAxODk3QTU5NjlBQjUyQThDM0VEM0UwMTQwOTBGMzc0NEU0Cis6MTAzNTYwMDA4OEZGNkE3MEQyRTBBREI1RkZFOThFMjEwQUIzQUJCRDJBCis6MTAzNTcwMDAwNjM4Q0VCQTczMjhDNjJCNkZFMEYxN0ExMjZGRTVGQ0RECis6MTAzNTgwMDBDOUZBQ0RBMEVCRUNDQzQ1N0E3MjAyQkQ0MzNENkM5RUVFCis6MTAzNTkwMDAwRDVGNzcwNkZERDcxRDc5MTc4NTA3Q0M5N0ZGQTBGRTM1Cis6MTAzNUEwMDA4MEREQURCQkZGMEM4NTdCNDQzQThDMDBFRjNBMEJDMTRDCis6MTAzNUIwMDBGNzJBRkM1QkVEMkM5RTk0MzQwREU3QURFMUVCOTJBNDcxCis6MTAzNUMwMDAxOUI4OEYxQUJFQ0U0QjdCNjM3QzI2Qjg4N0RBNkFERkM4Cis6MTAzNUQwMDAwQ0ZFNzA1Nzg5Mjc2NTIyRTA2QkIzMTlGM0RBRUVEQTM3Cis6MTAzNUUwMDBCQkZFQzgyRkUwM0U3ODkzMTlFRjRFMTY3RUYxNDAwMUU2Cis6MTAzNUYwMDBEQ0NCNzY3MTNENDYxNTQxM0I3QzQ3QzE0REI0M0Y1NTEwCis6MTAzNjAwMDA4MEY5MTcxMDM2N0Y5Nzc2MEZCMjM1MEVFMTdBQjI2Q0RCCis6MTAzNjEwMDA0QkQzMDg1QTc2RUU1OTVBMDlGMTk3MTM3QkM3MUYwNDBBCis6MTAzNjIwMDBGRjc5NjEzNDkxRDJDMERFQUJERjIxMjMzQzNDRTY4RkQxCis6MTAzNjMwMDA4Qzc2ODIxNEFDOEIzREVCMEJBMEFFOEIyMzJERjQ5QUQxCis6MTAzNjQwMDA4Mzc1RkFCRkM1REI4Qzc1M0RCQzRDN0E3ODM5Q0I4QzYxCis6MTAzNjUwMDBGMDcyOTYxQkUwMjVCQzY4Rjc4OTNBNzg5NTlENzkyOTI4Cis6MTAzNjYwMDAxMUY0RkI1MTg3MTNFN0FCMzlEMzk4MDJGMEE5RDlCMzEyCis6MTAzNjcwMDAxNkNCQzVEQkEyM0MxRkU5RDY1RERBMTI2RkE4RDdFREU5Cis6MTAzNjgwMDA0QUYzRThGNUNCRDk0MzhGQzVDMkY5OTczOTQ0Q0Y0NzAwCis6MTAzNjkwMDA1NDdFOUM1QUExMzYwMDFEOUY1RTMxQkE0MTRGQ0Y0QkRDCis6MTAzNkEwMDA1QkIyM0MzNkMzM0NDNkZBRDk2NjAxRUQxNEQwMzM5MzA1Cis6MTAzNkIwMDBDRjYzMkYyRTczQzhCOENFQTdEQjk4REZGOUU5MEFBQjJBCis6MTAzNkMwMDAwN0Q2MzlCNTQyRjFCMDc1MUQxRTY2NEYzMTc4MkRCOTU4Cis6MTAzNkQwMDAyNUM2RjNEMTkwRTBGRTIyQ0RGQkFGREUxRjIxQURFNDg1Cis6MTAzNkUwMDBCODk1RTBCQjNCRTdDRUEzQkYyM0YyOEJGNEE1OENGMkU5Cis6MTAzNkYwMDBCRENERkMxN0EwMUIyQkZEREYzOThDQTc0QTU4RDdFNkEwCis6MTAzNzAwMDBBRDZCMTEzRDkwNTc0Q0M4NzZDMzdBNzQ5Q0YzNjM5REEyCis6MTAzNzEwMDA1RDEwNTkzRjE4QkYzNzMxMDI2MjYyMjhBN0Q5N0Q4OEYyCis6MTAzNzIwMDAxQkVFNDNFODdDNUQ5MjZEMERDNDEzQjRGQjkwM0E1OEQ4Cis6MTAzNzMwMDA4OEY2NUQ2QUVEOTREREI0RTlGM0Q2QkVFNzdEREY5Q0UzCis6MTAzNzQwMDBFMjI5MEJGNDczOERCNTU5MDZBNTVCRDMzMkEwMENGOEIyCis6MTAzNzUwMDBFOUYzRDY4NjE0QjA2NzE3OEI2NzdGMUNFRUJEQUYyOURGCis6MTAzNzYwMDA2OTlDNkZCRDY2QkZEMTZGRjQ2QUZCQ0M5MjBDN0M0NjNFCis6MTAzNzcwMDA2Q0RERTdBNkY1NTMxMURFRjM5OUM1RTdBREREN0VCODQ0Cis6MTAzNzgwMDA2MjA0REQ3RkVEQUUzMzMyRUMyMzM5Q0QzRDJCMkQzOTk0Cis6MTAzNzkwMDA3ODdFODFERjA3MkREQTc2MENGOUZDQTREOTczQzlFREE4Cis6MTAzN0EwMDBFN0IzRjM3QkVDRDNFNjMwRTQxRjdBNDgwN0YwRTc5Q0ZECis6MTAzN0IwMDA0MkEyMzFFQ0I1RUY1Mzc5RjNDOTZCNjYwMkY3ODhFNEE2Cis6MTAzN0MwMDA1QkRBOEIzRUNGRTQ0RkU3OTFBQTU4ODBENzlDRDZDNUYxCis6MTAzN0QwMDAyODdGM0U3OTc2REM0MTk2ODdENDVDMDBGNEYxMzkzMTVDCis6MTAzN0UwMDBFMUZCRUU5RjkzREZDNTBFRDFDMTZGNUQ5QTk2NDdDOThECis6MTAzN0YwMDBCRTczQTNFNUI5RDAwREE2NjE5RTdBNEQ1MzA3QkMzRkI5Cis6MTAzODAwMDA2NjIxOTI4N0NCMjU4MTdEQjdDNjJCQTBGRDUyQzNEQUY2Cis6MTAzODEwMDAzREM0QkExMkNGQjE4NkM5MjMwRkZEMEZFQUYzOUI4REM5Cis6MTAzODIwMDBGMjY5QzFDM0M2N0EzNTk5OTQwMjc5REVENTBGOTgyMTIxCis6MTAzODMwMDA5Mzg4MkNENENCM0YwQUJGMUJEMzk4RkZCOTgwRDQzN0QxCis6MTAzODQwMDA4MTVERjc4OENDRjJCQkU3Mjg0NEVBNERGNUQxRDJFNzk5Cis6MTAzODUwMDAxRTI5OTg0REVCRjdBNTMxN0JFQzUzRUU2RkMwN0I4Q0E2Cis6MTAzODYwMDA2OUY0RjlBMjVCQkNCMjlBREJGMzdDQzc1Qjg3NEMxREExCis6MTAzODcwMDA0MTcwM0VFNjNGMkREMkVDNTdFMjg0Nzg3RTZGRjg1N0Q4Cis6MTAzODgwMDA3NkU0RjNGNzZFMTVGMUZFQTkzN0I0RUJFNEYzREMzNTFCCis6MTAzODkwMDBDNkYzNURFOEZDQTFFNzI1RTQ3RTNDQzdBMjZENTdBMzEzCis6MTAzOEEwMDBGRkE2OUQ0N0MzOTc3NjFFRjNCNkYwRUZGQjZFNEIxMzUyCis6MTAzOEIwMDAwQzc2REMyRTBFM0ZDREZGREUxMzUyREY5N0M2RUM3QTdFCis6MTAzOEMwMDBBREZFNzI0ODVEQTM2RjMzRTc2RjRBRjc3QjgwRUU5N0RBCis6MTAzOEQwMDA1QUZEMTU4QzRFM0E2NUZEQkRBODFDRUNCNzJGNkQ2OERFCis6MTAzOEUwMDBFNDdFMTZDRTJGQjRERkNCRTdFQjE3MTU5Q0VGRjU3MDE3Cis6MTAzOEYwMDBFQjJFN0RFRUE5NjdDMTJGNURGNDlCMDc2M0UxNTJFOEQzCis6MTAzOTAwMDAxM0E5MzkwNURFQjc1OEIyNzU1NTJDQzBFOUE0RTQ4OTZFCis6MTAzOTEwMDAwNUJBRjlDNDJCOEUwRTA3MkY1MzJGMEQ1RUFBNERBMEFBCis6MTAzOTIwMDA3OEFGRDVFOEJGNjhFNTA0RDBFRjdGRDk2QTU2QzAzRkNECis6MTAzOTMwMDBBQ0RCNjZGMUMxNzc5ODZBNUIxN0UyQkQwREFEMUY2MzIyCis6MTAzOTQwMDBGNUQ1Rjg3RTY1REQyRUYzODc3QUJDMkU3QUUyQzExNEI4Cis6MTAzOTUwMDBDQ0YzMjA5RURFRUM1RURERDcxQjNFMjE1NEJCRTVDRkQxCis6MTAzOTYwMDAxNUUwMkZENzExM0ZEMjczRTgzODU4M0Y5MDgwRjI3QTk0Cis6MTAzOTcwMDBCNjFDRDdGM0I5MTYzRkFENjM0REE0QUU3NUZEMTk4OERCCis6MTAzOTgwMDA5RkQ2QjU4RTM5MDE3QzVGNDdBNDBGRjVGNDU0MDMzNEZDCis6MTAzOTkwMDA0REZEOTYyRkQyNzhGRUREMTVFNDBBOTAyRjFBM0M4ODUzCis6MTAzOUEwMDAzNzE5RTU3M0MzOTMzRjFENzQ4Q0VFRTdENDk2RDc2MjQ1Cis6MTAzOUIwMDAwNUJEREZDQUVGRERDRkI2Q0NGRDUzRTI3OUY0QzM2OUI0Cis6MTAzOUMwMDA0QUE3RkFGNzMyMzRCOUVCREM0NTM3OTA0QUFCNkRBQzE1Cis6MTAzOUQwMDA1QzYyRjZDNThFQTA3MDVEQjJDOThDRUY4OTJFNzlFQTYzCis6MTAzOUUwMDBCMUM3N0YwRUY5NDRFRjU5RjAxRTY0RjE1MzA3OEUwQ0Y2Cis6MTAzOUYwMDBBN0Y1QzUzQkNDNDk5NUVDMTgzNkI4MTdENkYwNTI0NzE5Cis6MTAzQTAwMDBGRjA3RjcxNDFBMUUxNjNENzM0MDg2Rjc2OEEwMURGQ0M5Cis6MTAzQTEwMDAwNDBEMUY4Qjc3QjRDQjY0NjA0RkY4OTVCNkI0Q0I5RDgzCis6MTAzQTIwMDBCNjMwNzg2OTM5NTY4MUVGMUIzREY5QjUwQzc4RkY2NEUzCis6MTAzQTMwMDBBRjQwNTJCMzdBOEVBRkQ5NzQwMEVEMTg4MDEzRTI5MTgzCis6MTAzQTQwMDBFM0E5MUI2RjNERjBFNTlCQjAzQjFGRkIyOTIwQjcyRjdGCis6MTAzQTUwMDA4NEFGNzdCODVFQTU3NEZERjQ2RUJBOEY5QTNGNTg1QzU4Cis6MTAzQTYwMDAwMDg3OUFBNzZGOEE4NUYzOUM5MEVBMTk3RDNGQjIyQTU2Cis6MTAzQTcwMDAwNUYyREQ2QUNDOUUxNDA1NEJENjVFRjNFOENENDg3NzlGCis6MTAzQTgwMDAwQjBFREY5Q0MyRjIwRkQ1MzQ5RUU3OTEwNkU3OUNCRjc4Cis6MTAzQTkwMDA3MTBBOUVCMzlBQjg5MUZFNkExRTExQUIyMDFGRTYyQkU1Cis6MTAzQUEwMDA4OThDREUxMTg2M0Y2RUUzRkM3MTYyMzM0NTJFM0RFNzYzCis6MTAzQUIwMDAwOTkwOTczQUJGNDc3QkJGRjlFNkVFNzgwOEJCOEZGQ0M5Cis6MTAzQUMwMDA4QURGNDc1NkY1MzIxOUY0NEIzN0RENkU1OThENzJGNUEyCis6MTAzQUQwMDBEMzBDMzUxNUVFMjkyOTFDMzQzOThBRjI1NTNDNUM5RUVECis6MTAzQUUwMDBDQUYwQzRFNDMxOEVBM0Y0NTcwQUVERDBCRkMzOENGN0ZCCis6MTAzQUYwMDBDM0JBNzE1QzdFQjJGNTk3RjNGNUU5QkVBM0MxMUUzOTc2Cis6MTAzQjAwMDA5MTEyRkVCREEwQzc3QjA5REFGRTNBODg4RUNFNzQ3Qzg2Cis6MTAzQjEwMDBDRUY4N0VDQjVBQzZFNzFBREY3QkFGMUUwRENGQkY3QzM3Cis6MTAzQjIwMDA5QkYxMTE4QzAzN0Q0NEY3RTU0QkM1RTdFRDkzMDU5NEJDCis6MTAzQjMwMDAwQjE2RTIwQkM3REY1QkNDOUNCRjhEQ0ZBOUM1OEVGNjAxCis6MTAzQjQwMDA5QzQ2Mjc3NEZGMTI3Qzk3MkM0ODJGNzQ5RDA0QzQwMzU1Cis6MTAzQjUwMDBEQTJCRDUwRkQwRjEzQTNCQkIwRUQ2QzU3RTcyQjAzRDA1Cis6MTAzQjYwMDAyQkM4QzcwQkI4M0NCOEI5MTc5NTA3OTcwNUU1MDFEOTFECis6MTAzQjcwMDA5ODdDNTFGMTgxMjU2NkVGRTMzRjA3RkVBNUZDRUE3MUQxCis6MTAzQjgwMDAwMkZGOUFGMUZEOUJDRkI2RUYzRjcyMURBNUYzQ0Y1QTBFCis6MTAzQjkwMDAzNEJFMzVDQUQzNTBCRUFERDk3OTMzQzYwOTQzRjlGNjIwCis6MTAzQkEwMDBCM0Y0N0ExMjk2NkZEM0Y5RkI3M0ExN0M5QkRFRjkxRkY1Cis6MTAzQkIwMDA5NUE3MUFGQzFFMDk4MTFGOTU4RkJGRENFRDhDMENDN0UxCis6MTAzQkMwMDA1MEY5MzhBQzk3MzNBQzdDQTQ3RjZGOTM4MjlFNzRBODc1Cis6MTAzQkQwMDBEMTlGNDY3NzhCN0VCREI0MEZDOEExNkVGQUQ0RThBRkYzCis6MTAzQkUwMDA5QjNFMzVGQTBCM0RBRjExN0VBMUNGQUIyMUU5NDk2NzcyCis6MTAzQkYwMDAzRjk4RUYyMjFFM0JDNUI3N0Y4Rjg4REY0REVBNzJGQUYwCis6MTAzQzAwMDA2MzIxMEVCNDJBOEFDQzAyM0JCQzRCRTFGNTc4NTZGNzBGCis6MTAzQzEwMDAyN0NCNEQyMDI3QjQ3NjdGMTQ4QkFCNzU1NUY5NjNFMzIyCis6MTAzQzIwMDA3NUY2RjVCMTM2MzExNkUyQkM5RERFRjBERjc5QzNDQzE2Cis6MTAzQzMwMDA0NEJBN0U2Nzg0RUZDMDY5NzE4OUFFRThEODQxQjg1RTQ2Cis6MTAzQzQwMDA3NEE2MTdGMDU1MkVEQTMyNkY4MUZDRDE2NjExQkZFN0VBCis6MTAzQzUwMDAzMzZGRTVCNUIxOTAyN0QyRDVENjc3RTIzNERBM0VGRjlGCis6MTAzQzYwMDAxNUZFMzkzRjhGMkFBNTUxMzhDRkU1NzgzRjQ5M0MwRkUzCis6MTAzQzcwMDAxNUQxRjNDRDZENjNGNkYzQkMwREUxRTk0NEJCM0ZBRjY1Cis6MTAzQzgwMDBCNjJEOTc0MTFFNTFCQkY1NDM3REZDNjgxMUZGREU0MjA2Cis6MTAzQzkwMDBDREM2OTBGNkI2NzE0ODRGOEI0MkU4QzlDREZEQTMxMzRGCis6MTAzQ0EwMDBCREI4N0UxRTRDMDY3M0ZGQzRBNENGMEIyOTE3NzMyNzIzCis6MTAzQ0IwMDBDMjNCMUU1RDg3NDRDQ0JCM0VEQjI2OTIyNjM4RTc3NkFFCis6MTAzQ0MwMDBDMTRCODBCRjNEQzk0ODk3QjU1NDdFRThFM0MwQTc4MDhCCis6MTAzQ0QwMDBFRUNFRjMzRUREQTlERkZFNzdDMUVEQjRDQjkyNjdERjE4Cis6MTAzQ0UwMDAxRkY0MEI1QTlFN0FGNkJENEI1RTgwRkE3MzQ3MzNERkEyCis6MTAzQ0YwMDAyNzNERkI5N0VFRkQ2NjI2QzhGRkFFQkQxNjgyNzE5NTg3Cis6MTAzRDAwMDBCRDJGNjdERTBFRjVERDE2Q0MzRkVBQkFDQkMyRTJDMUFECis6MTAzRDEwMDA3QkVEOTg0RkQ3OTVDMURFOEI2OUQ4RjNGNTIwQ0NERkNBCis6MTAzRDIwMDAyNjhEODhCNzg0REVDQ0VGMzhEQkY2QjczRkUyN0JCNjcyCis6MTAzRDMwMDA2REY0NTRBMDZGRjdDNkEwM0Q1RUI3M0JDQTBCNEU2QTQ4Cis6MTAzRDQwMDBENzlFQUYwQkY0RjcxOERGRjczQ0I1MzI4QkUzNzdEOThBCis6MTAzRDUwMDBDOTM0ODg3Rjc1QzVCMzNDOUJCQTE3ODYzREI2OTJBRTExCis6MTAzRDYwMDBCRkI0QjU1RDg2Rjc3NzRBNUZGQ0ZCMjA5MDM3NUQzQkJCCis6MTAzRDcwMDA5OTFENzFEQURDRjkyODcxMTE5MkQxRkI4RUJCQ0QxNDNCCis6MTAzRDgwMDA1RkE3QzFCNkEzQkNGMjdDRUYzREUzRTE5RUEzMjc1QzM1Cis6MTAzRDkwMDAxODFDQkEyODFDRTA1QzE0MkUzNTIwMjcyM0MxMjNCRjMxCis6MTAzREEwMDAzN0ZCNEVDRjBGMEYxRTY3NjZDMkZBNEJEQUFFQzA3QkYxCis6MTAzREIwMDA4ODIwNUMwNDk1QjVEQkJENTYwMUNGQ0ZEQUY3N0UzRDk4Cis6MTAzREMwMDAwOEU0RjE2NzJEMkI1MUJGNUZFOERDRDdGQzYwRTlFMDI4Cis6MTAzREQwMDA5RjNEQjdFMEJCOTg3MzJGRkJDMTlFOUJEMTdGMDBGNDQyCis6MTAzREUwMDA1MzcyNEYzRUU4NDlFN0NGRkQxOEVCNEZEQjVEQjhERjdDCis6MTAzREYwMDA4QkU0RkZGQkZGNUZBM0Y3OUQwMkU2QjE1QzA4RUYzQjlFCis6MTAzRTAwMDBGRUQ3RTJGRDE1OEU3N0JCMDJGOTEyNUQ3QkZFOUU0OTVGCis6MTAzRTEwMDA3NEU3QkZEMEI5M0I3RUIwRjgzRUZGQjkzNTNCQThDM0NECis6MTAzRTIwMDA1NEFGRTREM0ZEQkQ0NzlBQTc2NEQxRjIyREY1OEIyNDlFCis6MTAzRTMwMDA3MDVCMkQ5MUVFNkJEMjk5NUY2MTExNThGRTM3OTkyMjFDCis6MTAzRTQwMDA2OEYxQTUwRTQzRkU1MzdBMEREQTFCMTNENEJCRDk3NzY0Cis6MTAzRTUwMDA5QUE0RkEwRUM4M0ZFRDI4OTlFQjVBODczREYyRjBCQkMxCis6MTAzRTYwMDAwMjFEOTM0N0YyQkFEMURGN0E1MzIwQUE0MEVEREIwOTU1Cis6MTAzRTcwMDAyNUUzMEU4MUJEMzc1MTE1RDExRUE0MjVEQTgxRUY2NEVCCis6MTAzRTgwMDA1NkIwRjY0MkEzOUYzMTNEQzQzRkI4NzY5QUYxRjkxNDdCCis6MTAzRTkwMDAzRURGNTRCMjRDQzlBN0YwOUE5QTJFMjk1RTBBQTJFOUQ1Cis6MTAzRUEwMDBDNUY1NjYzOENGRjQxQjA0RDJBQzhCNkY0RTA5OTlFRjgxCis6MTAzRUIwMDAwMzA4QTBFOUVDQzhFRjBBQkZCQzc0RTY3NzVBODQ2NTMyCis6MTAzRUMwMDAwODBGNTIyQ0YyRjc4RDJFMDAzRkMyRTBERDMxNzkzMDIxCis6MTAzRUQwMDBDQjMzOTY1QzBDN0U1Mzk3QkEzMDZFQ0FGRDUwMzMxRkJECis6MTAzRUUwMDA2RkI2QURFOTAwQkUzNTEzQTNGRkE5Rjk5MTkxRTA0QzdGCis6MTAzRUYwMDBCODVGOEFGMzY0MDdFMTZFNTY0NUY0NEI3NUYzMjEzQ0Q1Cis6MTAzRjAwMDAzNDdDN0M1NzNDNjhGOEZCQkVGODkwRDI4OUUxNUU1NTYyCis6MTAzRjEwMDAyQjE3NUE2NzJGODY3QjA4MkJFNEJERDM3OTI3NkU2MDU5Cis6MTAzRjIwMDBFRjkxNTg3MzA1ODQ2MzU1QTExOURGRTNGQUIzQTlBQTg5Cis6MTAzRjMwMDAwMDBDRTdDQTIxNTdENERFQzZBNjc1MDE3QzE2NzIzODdDCis6MTAzRjQwMDA1NjkzN0FCNDNCQzlCN0U3Q0UxNTE1RTBBRDFGREFBRDhECis6MTAzRjUwMDAwQjU1NDJDNjUzQkZBNEJBNDhGMDQ1RDNGMzJGOTA4OEZGCis6MTAzRjYwMDAyNzJFMEZFMkEwMDJGOTUwMUYwN0Y1MUFFQkYwNzc2NTM0Cis6MTAzRjcwMDA0QTcwOUUwQkY1OEYyNDFGRkVENUU1OUZBODNDRkE5MDUyCis6MTAzRjgwMDAyMkZEMTg5NDk4M0Y0MzI0QkRGRjM4QUI4REMxQjE2RTFDCis6MTAzRjkwMDA4OUUwQ0Q0NjNBRjI5OUY1RjdDMDRGNzBCQUZFRDMxRENECis6MTAzRkEwMDA0MzUwQ0UxNURGM0IzMDhFRjlCNUY5OThENzUzQzdFREE2Cis6MTAzRkIwMDBGREIzMUU2NzFDQzQ3M0NFQjZGNThEODM3OENERDk0MzhGCis6MTAzRkMwMDBBNUIxRTFGMjc5MEU3M0JGRjJGNzJCQUM1ODc2OTUwOUUzCis6MTAzRkQwMDBDRDYyMUNCRTdGMzIwMUY1NzA1OTE0MDFCOTEzM0E2RURGCis6MTAzRkUwMDA3NUJBMTY5N0E5OTczMThFNEY1ODNFN0UzNTNGQzcwMjU2Cis6MTAzRkYwMDAzQTM0MkU0MTg3QjcwREUzM0Y5MTA2RjVDNDAzRkM3REFCCis6MTA0MDAwMDBBOEJCNTdGOUJFRjAwNTNGMTZFMDdBMzhBQUIzMjJEQzA4Cis6MTA0MDEwMDA3NzBBN0ZDNkU1NkFFNUJFNkY2NDg4MUY0QzZBQ0JDMjJCCis6MTA0MDIwMDBFRjRDNEUyQTMzQkUwRjc4NUYzQUY3Q0Y4NzkwMjFCMDFFCis6MTA0MDMwMDBBRkNBN0Q2MzYyODcwMTVFMEU4OUFFMjgwQURGQkFCNjE5Cis6MTA0MDQwMDAzM0IyM0JDQ0ZENUMyODNDNjE3RTg4MjMxRjM3QkJBQTgyCis6MTA0MDUwMDAwMTlFQzdFRjhFQzJFRjAwQkNDMUVGOEI3MkY5RjcyMTUyCis6MTA0MDYwMDBFMTEzNDIxMDNGREI5Q0NFRUUyMUJFNEU2NzcxRjQ2QjM0Cis6MTA0MDcwMDAyQThCQ0RDOTc0REREQzU2NjUzMEU0OTdGNUUyRkRCRkNGCis6MTA0MDgwMDA0RTc3RTJGM0RFN0M5Q0Q2QUZENzEyRDZFRjk4QUNENDU1Cis6MTA0MDkwMDA4NjNCN0Y0NjI2QTM5RjA1QzRGNUUzNDJFMTg3ODdCN0E5Cis6MTA0MEEwMDBFMjdCRUQzRTc4M0ZFRTZDOTlDMERGOUYwOUE1NkI4MjA1Cis6MTA0MEIwMDBGQzcxNzZCNEUwMDVGRDBCN0UyQ0Q2MkIwNUQ0RkY2RjhBCis6MTA0MEMwMDA2ODc5MTU5Mzk4QkVENEU4M0UxNENFNkY3MUZBRDVENkIwCis6MTA0MEQwMDBFRkUyNzA3RjlCRDM4NzA2NjcwREJFQTFGQkQ1RkE1MzM1Cis6MTA0MEUwMDA3OTc1OTUzRURFMzI3MUQ3RTBBN0MxM0VBOTZEMTMxNEY0Cis6MTA0MEYwMDAxMzlEQUE1NkVBOTQ4MTBGRUI3NkRENjc4NkZCODVFOTZFCis6MTA0MTAwMDBGQzc3NUE4ODU0MzU0ODdGQkZGQjc1QkE4NEYzRURDRkVFCis6MTA0MTEwMDAxQjgxRjZFMzE3MUI5ODdEQUNDRTNCMTMwQjc2RDAxQkFGCis6MTA0MTIwMDAyNkQ3NUIyMzgwMUZERjE0MERERjM3MEYyRERGNUZBMTQ0Cis6MTA0MTMwMDAyQzJBMzNFQkU3Q0Q2MjdFRDI5MjYyMzM4NDg3QUU1RjY2Cis6MTA0MTQwMDBEMjZFNEVENUQxRDNENzkwOEYzNTM0RDhERTZCODkxMzRDCis6MTA0MTUwMDBGMzE4RTk3QUI4MEZDRjNEMTYwMkY5NEJCOTJEMUQyNTlBCis6MTA0MTYwMDAzMUY0RjlGNUY1RjE4QzBFNkI1QURBNjVBQ0IzRUYwRDVECis6MTA0MTcwMDA2QkVCNjlFQjg0RjJEM0U0Q0ExODQzN0Q2RTY5NjczQTRFCis6MTA0MTgwMDBDMEE1RDJFMjVCRUUwQTQzQTdGNzY3NzRDNzU1QkY5QjkxCis6MTA0MTkwMDA5RTUwMjlERDBFRkFGRjQxNEY5Q0E5MDhGNzNERDREOTY2Cis6MTA0MUEwMDAxQzZFM0FGRDkwMUE0RTNGMkM1QkU5NEMwNUY4MkZEQjU0Cis6MTA0MUIwMDBEMzM3MTU5ODYzRDkyQkU1MjlFMUY0QzMzQjJCRDhGRDAwCis6MTA0MUMwMDBFMTUxOUU3RkQ5MzU5OUVBODdDQjc1RkE2MTcyMTREMjk1Cis6MTA0MUQwMDA0N0U4Qjg3MTE5REE3NzU1MkVBMDFGMzQ3Q0ZEODdFNUMyCis6MTA0MUUwMDBDQzNCQTAxRkMyRjBGNUNDMENBMzdFOThEQTM2MUJGNUIxCis6MTA0MUYwMDBDM0Q0QzkyMjcxRUFFMjcxNTMzMjJFQTQxRjhBNTNBNjk2Cis6MTA0MjAwMDA2M0RERUM4QTA5NDMzN0VGNzBCRjA0RTAwQTI1QUMwMzk1Cis6MTA0MjEwMDA3QUUyRUUwQzI2Rjc0M0Y1NDUyNDc5OUU3REIxRjJGQzU3Cis6MTA0MjIwMDA3RjA4Q0U5QTNDNUYzNjg1QkRDRkRGOTMwRTA5Q0FFQjdGCis6MTA0MjMwMDA2NUQzMDVGQzFEOTM2NTdCOTgzQzVGNzYwMzhGNEI4NkE5Cis6MTA0MjQwMDBDOEQ3MkE5MEFGRjk3QUY5Q0FDNkQ3QkE5OTNFQThEQjdGCis6MTA0MjUwMDA5NUY1RDMxOUY0Rjk3NUNENjY5Nzk1RjZCRjJFMjg2RkFECis6MTA0MjYwMDAwQkY0RjJGNkVFMEM0OTgzNzNBNjEyMDZCRkQzNjZDNEI0Cis6MTA0MjcwMDAxMEE3NTE1RUY1MDMzOTc1N0NGMENCQjlDRjAwRERCRkQ3Cis6MTA0MjgwMDBDMURFMzdGQjMzRDdFM0FGMEY3RTM5MUZFMkU5MUZGMTAxCis6MTA0MjkwMDA3OTVCMzMxODVFNEVBRjIwOEJDQTI4MUM0QUU3MzE3QjBFCis6MTA0MkEwMDA3OEU5NzYxMUUxNTBEQkNBRUNCQ0RBNkQwMkJFRDc1QjZGCis6MTA0MkIwMDA5MUY3MERERTFCMkVERUMzRUUwREUxQkJCRUM1M0EzQzExCis6MTA0MkMwMDAyRTdFQTNCM0E5MzczQ0RGMjRFMEJENjdCNTZCMzE3QkZECis6MTA0MkQwMDBGRkVGNjExNjI3QjZEMkZGMjA1RjYyNkQ3NEVDNjY4MjM1Cis6MTA0MkUwMDA3OTNBMkFDNjlCOTc3MkI4NTU1QUZDMDc2MTdDRTUxMzQ4Cis6MTA0MkYwMDA4MjZCMTNDQTM1NjM3QzdBNjlCRkIxOUY4MDdGQjA3OEM3Cis6MTA0MzAwMDA1QjQ4QkI2QjJEREU2NzJDODVCOEIzQ0UxRkY5M0RFNzRDCis6MTA0MzEwMDA5M0Y5QTIyRkY3MTlDODBGN0M0QjBDRkJCQjY3NUFCRjUwCis6MTA0MzIwMDA2RTM4RDQ3QzRGMzgxQ0E2NzBDOEZGRTdFMTUwRDc3NkIyCis6MTA0MzMwMDAxRkU2REY3Q0RGRjNCRjkzQzFFM0VENzkyNDFGRjhFNUNGCis6MTA0MzQwMDBDRjI2MTVGOURGRjNBQTg4RUYxN0NGQkJBRjdGQUEzRUMwCis6MTA0MzUwMDA0RkU5Mzg4N0MzMUIyNjc3NTMxQUY0QUI2NUVGMjEyRjNCCis6MTA0MzYwMDBEOEI4RTMwMEJDMjIzRUEzODUwQzg2QjBGRDgyODc4REMxCis6MTA0MzcwMDA3QUIyNUIyRkI3M0E1MUVGQ0VBOERGMjFDMDc3RkRFN0M1Cis6MTA0MzgwMDA4QjA0N0YwRjZDNkU5RUM1MERGN0FGODdBM0ZDMjhDRjAzCis6MTA0MzkwMDAzNDNBQjQ2N0IyREY4RjhCQzk2NEVCMUVFRkU1MkY0MzZECis6MTA0M0EwMDBCRjYyOTdBMDIwOUZDMDc3MzVBMDRFRjEwMERGRDVEODFGCis6MTA0M0IwMDAzRkVDRUIwQTBFNzc4Q0NGRDRFRDYyNzhBQUEzNzgwMTlDCis6MTA0M0MwMDAzRUFCQTBGNjJFRTg5MUVCQTlERUMxRkJCMkI2NzYzMzg4Cis6MTA0M0QwMDBGNEFGQTFGRDEyNTFFRUI4RDBERkQ1RjQxM0RDREYxNTM4Cis6MTA0M0UwMDBBN0U4RjBCNkU3MThBM0RGQUQ4MjhCODRDMTVCMEVGREIyCis6MTA0M0YwMDBFRjdDNzg4Qjg0MkZDRDdFQjg1OEJDNjlGMEIwNjcxQUZCCis6MTA0NDAwMDBGMTc3MzhBQUEzNzIwOERFNTNCMURGMDMyMjZERjE3ODg5Cis6MTA0NDEwMDBBRkYyNTE3MzVGQzQ2MzZGMkU2NzQzRTkxQkVDN0RBNzU2Cis6MTA0NDIwMDAyRUJFNzQzNTZDMUMzRjYwMUY4NTc5NzJCODZFMzZCMzMyCis6MTA0NDMwMDA4N0Y0RjIyNUQ0OEZBRTIzMUQ2OEQ3MjRBN0I5N0Y5REJBCis6MTA0NDQwMDBBRUNCOEI5QkNBRjM1N0JBRUY3NTgzRkRFNjY3OUNBNzhCCis6MTA0NDUwMDAxRjcxOTRFMEZEOEY5NjU3MEJCRjIwODVGOTYwQkNCRTlECis6MTA0NDYwMDAzRkEzRTBFODBDN0FERTJGRDY4OEY4OUVGMkI1MjZFNzY3Cis6MTA0NDcwMDA5MTIyRTBFMzc1NjYwMjc0RjlDNUVCNjY5NUQ5QTEzMTI2Cis6MTA0NDgwMDAyODg3NjdCRjcxREMwQ0ExOTFEOTkwNUY0MEZCQ0RCRTNFCis6MTA0NDkwMDA5M0M5REJFMzMwMTk2REZCMDNENTYzMkE3Q0JGODRCNDc5Cis6MTA0NEEwMDAwQzg1RkNGREM5QUVGNjcyQzhERjlFOTI3Rjc4MTVEQ0U0Cis6MTA0NEIwMDBEMzVENTNBQTFDMzkwMkYwNUQyQjEyODBFRjg3NkI0QTQzCis6MTA0NEMwMDBEMTVGQjlFOTQ2MDFFOUZBREQxNUY4OUI1ODY0Q0FFNDAxCis6MTA0NEQwMDBBQzIzNDdFOEJBMzdBQzQ5QzY3QkI2MTlFQTgxNzJBMDZCCis6MTA0NEUwMDBCN0I5MTNFRDM2QjhBNzFCOTcyMzA2RjM3QjA5QkMwRkFBCis6MTA0NEYwMDBENUIxMEFFNEY3OENGQTFCQTdDMDdFNkJBODVFODBCODIyCis6MTA0NTAwMDA2QjREREJFMUYyNTRBODZGMTRGMEY3RDRFQTNDNkUxOTVFCis6MTA0NTEwMDA1RTg1RUE3OEY4OEMwQ0YxOEY2QURBMEZEMDUzQjc5MTg4Cis6MTA0NTIwMDBGNUFCREIyMkUwN0IzRUQ1NTQzRUMwRjlBQUI3MDgwNEM4Cis6MTA0NTMwMDA1RTI4RTlBMEY2OUY5NUNERUI4NTBGMzQ3NTZDQTRFMzVBCis6MTA0NTQwMDA2OTdEMDE4Qzg3NzlCN0M0RTNFRkRFRDVCRENFREUxMzdDCis6MTA0NTUwMDBBQTJFNUM3OTEwRTQ1MzM1MUQ0NzFGOTM4RTJEMzdFMjQ4Cis6MTA0NTYwMDA3QzBCMzcwQTA0NTI4MzZCMEFCM0VFMjk4NEY5NUUzNzU5Cis6MTA0NTcwMDBFM0Y3NDE4RUI2RkY0Qzg2N0RDRkE0RUJBNUQxRjlFN0RBCis6MTA0NTgwMDA4QTlERTU5ODZGN0RCQkEwRTA3QjRENjVCNzIxMUY3NEM4Cis6MTA0NTkwMDA3MTNFMjA0OUI3QjJGQjY2ODFEN0I5NURBOEU5QzdDN0FDCis6MTA0NUEwMDAzMkIzOTFCRUFCNkY1OUQ5MDRFN0VBRjQyNDY3ODE0QjZCCis6MTA0NUIwMDA1NEI3RUI4QzBDNzZERTQ3MkJFMDAzMzQxNDZGM0MwRkMyCis6MTA0NUMwMDA2RUJGRTdCOERDQTk5MzUzQkVDQ0JFNDg4RkYzNzYxNTE3Cis6MTA0NUQwMDAyMzlGQ0YyNzU1NzgyRkVFNUVDOUY0RjJCMTU1NTE1RTc3Cis6MTA0NUUwMDAwMUVDMTFCMzgyN0E3M0ZGQUExRjNEMDRFNzNGRkQ5NEVCCis6MTA0NUYwMDAxOUVGNEI0RjY3NzQ2MjdDRjZDNDQ2MzM3RTNGQTQ2MTZCCis6MTA0NjAwMDBBMzg4NzJFNEM0NzYxNjE3MTIxRjk5NTI5MTA2RjBBMzdDCis6MTA0NjEwMDA3MjAwRTg2RUZGQzY1MjE5RTRFMTA5QUY4MEUzNEIxRjU4Cis6MTA0NjIwMDBCOTM5ODVDNTdEOERGMkEzREFCOTA4RTVDNTIzNTE0Q0FBCis6MTA0NjMwMDAzRTJDNzgzOEZDRkQ2QTQ0NzlCMUJDODJDOUY3MTA3OTA4Cis6MTA0NjQwMDBCMDM0QkQwOUUzN0VBMTcyQTI4RUQ4MzRGOTkwMDdGNThCCis6MTA0NjUwMDAwRTVGMUFEMjZGRURFQjY2MDJGNjVEQURBNENDN0MxODRFCis6MTA0NjYwMDBFODY2NDYxNERDMjQ1M0JFRjAxRDAwRjlGNjg1NTc3MDQ5Cis6MTA0NjcwMDA3QUU4RjNFQjY3M0QzRjE0RTBGNzMxQzAxQkY4NjI0MzgzCis6MTA0NjgwMDAyMkRFQUY1NjdCNjcyMzVDQjU3Q0M0MDUwRjFCRTk1OTVFCis6MTA0NjkwMDBDQjdCOUFFRTE2ODNFRkZCRDBGRjVENUYxMzQzNTQ1RDM3Cis6MTA0NkEwMDBCRkEzNzc1MkJBQTRFQkNEREEyNTc4RTEzQjQ4NDdFRkI4Cis6MTA0NkIwMDAzQzc2RjBFNjdDQUMyQjQwODdCNUI3NzBCREJBQzE4RUI2Cis6MTA0NkMwMDA3NDdCRjRENjMzQUI4MDJFNjdERTIxRTBGRTg5QzdERDM0Cis6MTA0NkQwMDAwNDdBQTVGNjYxQzEwOTcxQ0QwNTc3QjBGMTBCRTg3OEQwCis6MTA0NkUwMDBBMDk3QTMzRjYzRjQ0M0U5RDgwOTc0NUVCQkYxQkU4MzhFCis6MTA0NkYwMDBEODdGOEJFMDg0Rjk4RjZFOUE4RDdBQjhDNjIzMTI3Q0FFCis6MTA0NzAwMDBCRUU1MThEQUNCNTQxRjYwREVEMDdFOEY5ODAyNzQ1RTRGCis6MTA0NzEwMDBEQjY4NTEwMEFGMUFCRDY4RjQ3NzhDN0Y4NzlBNTg1RENCCis6MTA0NzIwMDA4M0FFQTFFMzZFQ0M3NDg2QTUzQjcxNUExNkQyNTdEREQ5Cis6MTA0NzMwMDA3NjMzRDI0QjlEODdEMUQzQjFBNzQ0QTRDM0ZEQUJBRTkyCis6MTA0NzQwMDBBRDAwRkEzOUJENTU4ODQwN0Y5NEJFRjI4M0Y0MjUzRTEyCis6MTA0NzUwMDA2MkM2RjEwQjlFNjRGMTg1RkQxQjE5NUQ5RjY4NjVGNkNECis6MTA0NzYwMDA2OUU5MjNGREQxQUY1OUYwODY5OUIwRjgwM0IxRTlFREJECis6MTA0NzcwMDA4RjBCRDE2MTI4RERGNUQwNEI5QzBFMjNEMTlEREJEQzY2Cis6MTA0NzgwMDAzMjE1RjIwRjY2M0Y0REY3RUYwQ0MyQUJCNEU5NTY4QzExCis6MTA0NzkwMDAwMzk0MzY0REM3RjM2QUZDNTMyREIxQkM4RDc5Q0QyQkY0Cis6MTA0N0EwMDA1OTNFQTNDNEYyN0JCRUYzQkU0MkY2NzE1RjUwM0ZFNkIyCis6MTA0N0IwMDA4MTdFODRGQzEzMUZEREM3Q0JEQjFGNDMzQkUwRjM1RjJGCis6MTA0N0MwMDAxREMzRkNDNkM1MkY1MEZDRDNGRUE3QjdEQjg5MEZFRDc4Cis6MTA0N0QwMDA2QzJGQ0E5OTQ1QUQyMkU2OTcxMkM5NTc3MDhERUU3REIwCis6MTA0N0UwMDAwRDJEMkY2M0YxNkZFQzA4Rjc0NTNCMkRERTRBM0E3RTI1Cis6MTA0N0YwMDBEMUIzQzcwN0UxM0RGOTVEQ0M0RUY1RkM4QTdENkY4NkVDCis6MTA0ODAwMDA3ODNBMDc1RDAzRjk5OTEyQ0IwRjA5RDVCRkQxN0Q1OENFCis6MTA0ODEwMDAxQ0U3RDRGMzMxRjg1RDI2NjE1QjNCREUzMzJENkFCOUNBCis6MTA0ODIwMDBENjZDRDFDNTJEODUzRTY2QUQxRkRFREY3ODI4RkVFMTUyCis6MTA0ODMwMDA3RTExRjZBN0ZGNUQwOTJEMkZFNEQ0OTM4QzdGMTZFRDMyCis6MTA0ODQwMDAzMkEzN0RCNDY4REIyNjhDRjdENTZEM0I4M0Y5QjNBNTI1Cis6MTA0ODUwMDBCRjc5MkExNkUwNTBCNzRCMzRFNjRGNkQxMzdEMTZDQzY2Cis6MTA0ODYwMDBGMzEyOEY1OUQ4RjczOTBDNzk0Q0I1QURFQ0ZEOEVEQUNGCis6MTA0ODcwMDAxNjlFMjcxNDkyM0ZCM0Y4Mzc3QjlFRjU1MEQwMkM3RUJFCis6MTA0ODgwMDBFNjg5NThFMEE3NEYzQkI2QzYwMjNDRTk3Qzk4N0YzNEU2Cis6MTA0ODkwMDBCMTMwNDI3RUQyODVGMjkyNUFENkYyQkNBNEYxRjg3QkI2Cis6MTA0OEEwMDAxREExNzk0OTlGQzIzRkE4MUU3N0Y1MzFFNjc5OTI2RDI3Cis6MTA0OEIwMDA0QzZFNTFFQzE3ODQ3QjFGNDlCMzVGMTYzRkY1RDVBM0FGCis6MTA0OEMwMDA5MDQ3N0I2QUU3Njc4RkMyRkU5N0ZDRTM4QjQ3MjFBRjc3Cis6MTA0OEQwMDA4M0VDOEQ1MkMwOUVBOEZCRDUzQjk4N0ZBODhEMUJEQjM3Cis6MTA0OEUwMDA4N0ZCNDc0RjNFODFGOTlCQTdERkIzQTA1RDc4N0FDRjY2Cis6MTA0OEYwMDA4OTRDQjAxNzRFRUZGODI2MDVGMjMyOTdFRjI5QzdGODJBCis6MTA0OTAwMDBDNEYyREY5NkUyN0JBMjkxRkM0REEwNEZFRjQ1RTQ4RjBECis6MTA0OTEwMDA4NkUyNjM3RkFCRThCM0QxN0Q3RUZFQUUwNUY5QkYzQjk3Cis6MTA0OTIwMDBDRkFDNjUyOUNCREY3M0YyRkNCMkVERTFGMzc0QjU3QzVCCis6MTA0OTMwMDBBOERBRDY2QjI2OEUwNDc5RDdDQUY0N0E3NzdFRDQ4NTI2Cis6MTA0OTQwMDBGMkNBREVBNjc4QkRGQzIyRjBCNzlERTcwRkI2OEMwRjQ5Cis6MTA0OTUwMDA5QjU3RjYzOUZDODNFMkE5QTY4RjMxQUZFQ0FCRDZGOUIxCis6MTA0OTYwMDBCRkZDMzkzQzZCMERGRkJFQjZDNkQ3MTc4MjlCOTYwN0JFCis6MTA0OTcwMDAzQ0I0OEY3QTUzMUZFMDhGOURCRkM2M0MzRUMwNUJBNTAxCis6MTA0OTgwMDAxM0Y0RkY1Nzk5MTBERjNDNjlGNjYzRENEMEJGQzdBMjcwCis6MTA0OTkwMDA0MEJFRDdBMjNENDc5MTVGNEVGRkY2MzBFNkQ5MTI5RTRBCis6MTA0OUEwMDA4RjdCOUE3NEZGQjFCQzQ5MUVCQkE4REI2MjY3Rjk2OEI0Cis6MTA0OUIwMDAxQ0ZFOTBBRkU2OENDNTc2OUU5N0M2RTg1OENCNTc4QjA5Cis6MTA0OUMwMDA5NEE3RjY2NDlGNkM2NjVGRjNGQ0U0QTVDRTBFNTlCMTI0Cis6MTA0OUQwMDAwNUYxMDVGODExMEEwMTVGQzcwQ0Y5N0ZEQUI5NDNFNzYxCis6MTA0OUUwMDA1MzAwMEU1N0U4RjMyRjIzRTUwMzcyM0JCRDA3QkU5ODMzCis6MTA0OUYwMDA1QzNFQkQ4OUU3NjM3NkU3NTkxMjkyOUUwN0Y5NDE0QzA4Cis6MTA0QTAwMDAxRkQ2Nzk4NUEzRTFGMEFCRTU1RjZFMDlDMUFGNzZCRTM1Cis6MTA0QTEwMDA0ODdDQTFGMUU3ODVGN0ZEQ0ZDMUU1QTEzRUVDN0QwMDIzCis6MTA0QTIwMDAwRDNFQTdCRTBEMkZBNzVGRTRGQzRFRkQ5NkJEN0Q3NDI1Cis6MTA0QTMwMDBFRkJEQ0NFMjdFOEI5Njc3QTZFREI3QTk4NUU5RTU1MzZECis6MTA0QTQwMDBEQjk4REQxOENBREZCNTExN0U1N0VCMERCRTRFRURBRTFCCis6MTA0QTUwMDBGNjQxMjA4NzRFRUQ3QjlFRDM5RDk3QkY4NzczNENGNjIyCis6MTA0QTYwMDA3MEI5RURENUNCRUQwOEJGNjM3NkI0MEZGMzE3QTlCRkNFCis6MTA0QTcwMDAxQjc2QkVCQUVENjdDMkNFRjdBOUE0NUUwQkZCRkZCNEVFCis6MTA0QTgwMDA4M0Q5MjE5RkI2ODg2MTdGMEZBMUJEOEZGMTdERDUyNjg3Cis6MTA0QTkwMDBCQjhDN0U5NzE4MUI4REYyNjhCOUJERjA1REY4QkVEQjRDCis6MTA0QUEwMDA3MkJCOENGOTBFMEQyQjc5N0VDNDlEMkVGQzNEOEYwNkJBCis6MTA0QUIwMDBGQjU4RkMxRDg4NTUwMDFGOUQxRjZBNTZEQ0Y4RkIxMzMwCis6MTA0QUMwMDA2NjQ3NTUzRUY4NTdBMUVGNzdDQTQ5MjZFMkQ1RTM1RjFFCis6MTA0QUQwMDBGMkE0RTNGN0JCQjJCRjk2NDBFRjc0QUMzMEJFMzdEMjVFCis6MTA0QUUwMDAyMTI5MDcxMkU5N0MxRDY1ODIwQkVDREQ5RTc0NjY5QzEyCis6MTA0QUYwMDBGRjZBNTUzNEM0Q0YyMDU2MERFNzNBRUI2MkRGNDVCMzY5Cis6MTA0QjAwMDA5QjdDMEFFRDQyRUM1MTFEMEU3NEY0OUNFQzc3QUJFMUZBCis6MTA0QjEwMDBFN0JBRTAzRTdDREQwQTZCM0Y3ODhGRUJGRjAyMkZCNkYxCis6MTA0QjIwMDBENTg0MDA4MDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEZBCis6MTA0QjMwMDAwMDBCQjU3RDA5N0M1NEQ1QjlGOEI5NzNFRjRDMjZDQjgxCis6MTA0QjQwMDAyNDkzNjU2MDIwMkMzN0ZCMUUyNjEwMTJEMDU4MjYxQjlDCis6MTA0QjUwMDAwNjA5MzgyMjU1RDQ4MDM3NkM2MTBCODk2ODZENkNGRDZECis6MTA0QjYwMDA5NzYxMzE0NUU1QjVBMTJFNTBBNUNGMDFDMUM3QTNGODg2Cis6MTA0QjcwMDAxQTE2NkJBQzUxMDcwODE0MkREQUQwRTI5M0ZBNTcxQkMyCis6MTA0QjgwMDA5NDJBMjg5ODExOTRGMjVBMkNGRkYzN0RFNzlDQ0NEQ0YwCis6MTA0QjkwMDA5QjA5ODRCRUZFQTNGRUFFRTdERUIzN0VGQkY3OURFRjZFCis6MTA0QkEwMDA5Qzg5MjUyRTg5Qzg4NEQ4NUM4QUI3Mjc5QkUwREYxNUFECis6MTA0QkIwMDBGQTVGMUNBMTY1MkIyRkE3RTBFMzc4N0EwOTIxMzFFQzdECis6MTA0QkMwMDAxNUZENkVERjZGOTIwODg5Q0EyNkQ5NEEzMTIxNzYxMjA3Cis6MTA0QkQwMDBFNTkyNjlGOTg5NThGNzYxMjk5NjkwRjUzNkFEOTZEMDM2Cis6MTA0QkUwMDBFNzE1Rjg5QkQ0RkY0OTVDQ0EyOTE4Q0Y0QUZGQjk5MjUwCis6MTA0QkYwMDA0QUZCOUI0MENCRDZFMEY4RjE2RTdEMzk5MTg0OTQ3MUVECis6MTA0QzAwMDAzRTZFNDI4NkMwN0JGQUE3MTIzMjU5QTYzM0EzRjM4OEMwCis6MTA0QzEwMDBBRjM2RjkyMjI0RkM1RTlCMzEyNDM4REY3ODA3NzFGOTI2Cis6MTA0QzIwMDBFMUZCQjQxODk3OTdENjhGODk2MUYzMTNGM0E1RjNGOUQ1Cis6MTA0QzMwMDAxOEU2QTNEMjdGNzAzRUY5M0Q1RTEzQzE3OTdEMUMzQTIwCis6MTA0QzQwMDAwRkZBMjc3OTZDMzhCRjhGMERGM0ZCMzg3NDdFMDVBQUY1Cis6MTA0QzUwMDAyREU5RDM2ODVBNTA4ODcyODVDMjM3QzZEQTREMzg5QzIwCis6MTA0QzYwMDBDRjg3QzI5OTEwMkY1MTRBMDA5RTAyQUVGNDNCRUQyNzI4Cis6MTA0QzcwMDA0NTdBNTJCOTIyMDE1Q0VEMTI0OUMzRjEwQ0VENDZEOEQ4Cis6MTA0QzgwMDBCMTdGMjhEMzdFQzdDMDlBMjcxMjUyRTY5NERDQTdDNjBDCis6MTA0QzkwMDBEMUZGRUY0QzIyNjQxODIxQTkyRDk1RTQxMzVBOTZEQTFFCis6MTA0Q0EwMDAwOEMyMjc3RDNERjE0NUQwRjlBNTA3NEM1ODI2NkJBM0Q2Cis6MTA0Q0IwMDA3QzE5QjQ2RDg0OTU3ODIzQzdEMjdBMEFGMTlBQzc0MkQ5Cis6MTA0Q0MwMDBBRjNFNDJDNjIzNzA1NzlCNjg1N0NBM0E0MjFFQTNFREI3Cis6MTA0Q0QwMDAzQTAzMTVBNjA1MTRBOEVERjA4OUY2M0Y1MTc1NEY1MTFBCis6MTA0Q0UwMDA2OUJERDZEQjM0QTdBOTA4OTY5M0Q3RDY1NTQ2MDgxRENCCis6MTA0Q0YwMDAyRTQ3NzIxMTYyNUE5NURCN0Q2NDI0MjE0OTUwRkYwNkNDCis6MTA0RDAwMDBGODlFREJFRDhFQzFFRkFDNEM4ODlGRDA3NUI1NDVGNUI0Cis6MTA0RDEwMDA5NURENTYyNzJEQTdCMkYyOURCRURDQjY3NUI0QkYwRjQ4Cis6MTA0RDIwMDBEMjNENzdBQTBFRkFDRTZBQ0YwNUY4MTM3RjAyQUU3NzhFCis6MTA0RDMwMDA0MEZBQTI3MDI1OEVFMDNDQjNCN0Y5MkJBM0U4MjQ2RUFECis6MTA0RDQwMDAwOTUwODA1MkZDNjdEMDNFQkFGMzAxM0ZERDE2MjA5MjM1Cis6MTA0RDUwMDBFRDMxQTJFQ0I3MTBGQUY0RUMzQjY2RTlBMUNGQzZGNjUwCis6MTA0RDYwMDA2M0Y4REQwNDY1RkExQzlERThBRjRDQTZFQjdDNTBCREYyCis6MTA0RDcwMDBEMUUzQ0NBMUZERURBQjc3OUFFQzg0QUM1NDZGRUM1NjRCCis6MTA0RDgwMDAxQ0ExNzA5OEE0ODM4M0IyRkEyNjAzMUM2RUJBMkUzODM1Cis6MTA0RDkwMDBBQ0Y0REQ4NDcwMThFQ0JBQ0ZBOTlFMUYwMTVFQTY5NjE0Cis6MTA0REEwMDA5Qjg4NDQwNzJEM0QxMUUzOTMxODFGNDc3QTBBODJGRDIzCis6MTA0REIwMDA2QzMxOTE0NUVEMzFFMUZBNTlDNUYwQ0ZFQjA5M0ExQTYyCis6MTA0REMwMDA4ODRFRDI4ODNEMTdFOEQ0NDgyRjc0N0QzNUVEMTQ4RTc3Cis6MTA0REQwMDA1M0I1N0E0RjU1NjI5MDRFODk1RDFCMzdBMzAwRTYzOTczCis6MTA0REUwMDBGNzQ5OThBNzE4Nzc2QUY5MEEzOTk1Q0VFNzQ5OEEyM0NGCis6MTA0REYwMDBFOEQ3RDFFMjhEQ0NBNDc0RUE3MDlCNUNDMEU3RTc1NDlECis6MTA0RTAwMDBFREU3NTAzRjc2NTZDMDZGQTY1NTRBODk3NkJGOTQxNjk3Cis6MTA0RTEwMDBFQzVGRDA3REVCNkIzMkQyNzc2QkJEQzlCNzFBRTU0MTQxCis6MTA0RTIwMDA4RjA0RUIwRUUyQkRDNzgwRjcwMEMzN0JDNzQ5QzRGQjBDCis6MTA0RTMwMDBGMkNFOTMwQ0VGMURBQjJBQTI4QUExMkNEOTIzNTQ1ODkxCis6MTA0RTQwMDA0RkEwMDhGMEY5MkJERjlEMUU4NUUyNzM3NDc0QTAxNTQ2Cis6MTA0RTUwMDBFOEMxNENCRUVCQTlDRDQxQjhCRjA4NzREQTBGRUU3Q0I3Cis6MTA0RTYwMDA1RTAyRkUwM0UxQURFRDQ4RUFFM0Y5QjRBQUY3QThDOTkyCis6MTA0RTcwMDA5NUExMDZFMTI1RUExRDU3MkQ1ODZGNjNBQUY2MUIxODY4Cis6MTA0RTgwMDBBNzY5NDJDRjYxQkE1MkIyRTdDODFGNjIzNTNBREZEODhDCis6MTA0RTkwMDBBMzMzRjY0M0ZCRDg5OTE0MTM2QTcwRENCNkEzQUIyQjhCCis6MTA0RUEwMDA4MEZFREI4MEZFNTFDRTA0QkNGNjk4QUJDMTgzRjE0NTk5Cis6MTA0RUIwMDAxRjNDRjY5RDQ0Rjg5OEEwNENERkVGQjQzMEJBMjlFQkM0Cis6MTA0RUMwMDA5MERDM0VFMDhCNjg3MkFGODczRURGNTY0RDM4QkY5MzczCis6MTA0RUQwMDBBQUNDOUYxMkMzRTNEMTAzQjI0QURCOTdBRDM1NjE3RDAzCis6MTA0RUUwMDAwNzNDRjM0M0Q3QkYxNkVCOUQ1NDE1MkU3NzE4M0MwNEFGCis6MTA0RUYwMDA1RTA1MUQ1MUMyODlCRThEQ0U3OTc4OTZGNjNFQUMzRkQ3Cis6MTA0RjAwMDA0ODM3MDlEMUE5RjQ3QjY5RDdEQ0ZCNDk2QUIwREQ0RjhBCis6MTA0RjEwMDA1NjEyQ0Y3QzczQjAxRUE1OUY5Nzc1RjQ1NjYwOEUwNDExCis6MTA0RjIwMDBCOEY1RDEwRkE1NEI5MDJGNDZGQ0QwNzZBNzE5M0YyNTk5Cis6MTA0RjMwMDA0NEFCQjRGRUVFQUUxNUIyOTYzRjc4QkM5NjQ0OTA2Njk0Cis6MTA0RjQwMDA5ODdGNDkzNDY5REU0M0RCOTdDNEQxMjc5NDEzNzk3OTdDCis6MTA0RjUwMDAyODJGMjdGM0U3NjhGRTNFOEY5NUQzM0U3MDk5MjQ1QTk5Cis6MTA0RjYwMDBERTAyNzAwNzNDQTQ5ODE4OUMxNDdCMkVGMDkxMjk4NUQyCis6MTA0RjcwMDBDMUI5Q0MxOThERjI1RkYwQUI0MkMxMTk5NzAwNkE4OEI0Cis6MTA0RjgwMDA3OEUxOTkxQTQ4MzUwMTFFMDVGRjJBMDE5M0RGNDZGNTlECis6MTA0RjkwMDA1RkFBQTI5QTVDRjRGRDVCMkIzNTRGNTVDNkMwRjJFNUMzCis6MTA0RkEwMDA5NjFDRDlFMzBCMjMyRkUyNTIxOERFQTk4MEY2OUVDQTg1Cis6MTA0RkIwMDAwNkVEMkM5MTM4MjA4MTYxNUE1QzBBOUQ1N0EzQjVFNzE0Cis6MTA0RkMwMDAyNzMzRThEN0U1MzkxNzJDODA5RkQ1RDFDQjZGRDRGMkEyCis6MTA0RkQwMDAwNzFFQzczODhGQjcyRUZGMzYxQUU4QUJGMzUyNDQ0RDgxCis6MTA0RkUwMDAzODc5NTUwM0VCQTdFMzFGNTkzOTBCREIzRDFBMTU1QkU1Cis6MTA0RkYwMDBDODk1MkFEQTJEREY0MUQxNDQ5RkU5NEI2QTQ5MjFFMDY3Cis6MTA1MDAwMDBDM0FCMjQ4MEZFOEI5NjVDREIwOUUyODVFOUMzQTEyOTUyCis6MTA1MDEwMDBCRUVEMjk4MDFGNUYyRDk2RjNEMkM4NzYwOUYwQTRBREFFCis6MTA1MDIwMDBCMTQxNTk0RUMxRkExNDcyQzIzRTkyQUU0NDYwREZBQTM5Cis6MTA1MDMwMDA0MkVEMEQ0NDc5MkFFMEIzRjlBMDBEODQ3RDA0QURBRkIzCis6MTA1MDQwMDBDMjdCQkQzRDQ1RTdCNzk1OEMwMTdDQjc1NTI1NDBCRDdBCis6MTA1MDUwMDAzOERFRUYyNTY2RTcwOEJCQTgzQUZEOTYzMzEyQ0M3NzE5Cis6MTA1MDYwMDBCNDU3MDFCOTRBRDI1MjcwM0VFNUM0QUNCMzhGNEFCMkNDCis6MTA1MDcwMDAyOEM4NjE3RTU5QjkzRUY4NUU2OTM1N0NFNzc0NTRERDE1Cis6MTA1MDgwMDBDRjhFNkE3M0NEQTBGNDNFMzU5QkQyM0Y3RjdGODFGRUU5Cis6MTA1MDkwMDAzNzNBODJEQzdCNUI3RTUwQkU0RjUxRUZGMjU0RTlFQzM1Cis6MTA1MEEwMDA4RjM2MTdGMEUxRUZCRTk1OTFFRjhERjhEOENBRTlGMTkwCis6MTA1MEIwMDBDODRBOEZBNzhBRjJERkFGMjIyOTNFRTg3QTJCNTQ2OUNCCis6MTA1MEMwMDBBRDREQkQzNkZDOEM3ODMzQzJFRjNCOUQwQkQxN0UzM0FBCis6MTA1MEQwMDBDMkFCRkMwMzU3NTU4MkRBMUYzRTQ2NzgwOEY4RDNGNTc5Cis6MTA1MEUwMDBBRDA3Qjg1NTY3Q0JBOEFGMDRCQ0ZCQzM4OUQxQzNFRkVDCis6MTA1MEYwMDA3MjY4M0Q4OUQxMEZDMzg3NDQ5MDVFMDRGREM0QTUyMTI5Cis6MTA1MTAwMDBGQzRCODBGNkUwN0I3NDBBOTY4REYwMzVDMjkzQ0EwMUExCis6MTA1MTEwMDAzN0Q2RTdGODNCMEM3MENCODBBRkVFREFFQTIxNDEzOEE2Cis6MTA1MTIwMDA1MEJBRUE4QTBGQTEyQjAxODc3RTcyMjM4Qjk3MzlERTUyCis6MTA1MTMwMDA4NUJENUNDREZCQTFGNjMyREFDMzk1MEU5QjBCQzA1RjNCCis6MTA1MTQwMDBEOUM4RTY1Qjk5MTFCM0Q1OUI4MkY4REE4QUZDRTNBNzRDCis6MTA1MTUwMDAxODI5QzE3RkQ5REYyNTY2RTc1MkJCOTREMTY3RTdFNDAwCis6MTA1MTYwMDAzMzYwM0Y4RjhFRDBENjAyN0YwNEE0NzhCMjk1MjBGQ0E2Cis6MTA1MTcwMDAzRjM2QzA1RjU3QUUzNkQ4Q0I0Njc4RkMwQUZFNjc2MjMyCis6MTA1MTgwMDA3RkI4MDlCQUZCNzkwQUI1QUZGMzY4NzEzODE5MDFGNjJGCis6MTA1MTkwMDA2RkUxMkJDNTcxMjBDNzQ5NjcwMkNBNjMyMzNEOTY5RTA0Cis6MTA1MUEwMDBGMEY0RjVDM0U5MTdFOTUzMjI1QURGN0IzQkI1MjMzQTA0Cis6MTA1MUIwMDBCMjFGNzkwMkNDOUExQkFENkQzMkQwRTE4REM0QkRFNjMxCis6MTA1MUMwMDA5NDE1RDYyRkUzM0NDNUJDRkVFRUY0RUM0Q0ExRjI2NjgwCis6MTA1MUQwMDA2MjRGQ0Q5QTUzQTE3Q0MxQzcxN0YwQkU4OUMzRkIyNjhECis6MTA1MUUwMDBFMkREMkZDN0MyNTNGOUJBQ0Y4RTBGRTk2RjZGMEFGNzBFCis6MTA1MUYwMDAxNzkyNDkzMkFDQzc5RUEyMzJGOUNFRkIxM0VCMUI5RDJFCis6MTA1MjAwMDA0NkZDMTJDMkQ5RUFEQjJBQzFGQzg5RDc5MjEwMUNDRjE2Cis6MTA1MjEwMDBDQ0QxOTQ5MTMxRTNCNTE0OTRDN0NEMDRFRDY1NkE1RUE5Cis6MTA1MjIwMDAwMjEyQ0JGOEY3MzI2QjhDMUZFNjQzMDJDQUQ5M0UzQzIwCis6MTA1MjMwMDAyMERGRDVEOTAxQUUxNDJFRTQ0QTc0NzA3RUJGNEI5MUE1Cis6MTA1MjQwMDA5NDRGQjM4M0YzM0JCN0MzRUE5NTgxOUY4NzY5QkY4N0M4Cis6MTA1MjUwMDA3MUNFNEE0NzBCOTE2RjE1N0YyNkU4NDFFM0Y3MEIxRDhFCis6MTA1MjYwMDA1RENCRTEzQkFEQjcxMEVCRjE3NTJEMDVBNzkxRDI1RDlDCis6MTA1MjcwMDBFMEI1MDhERkQ2OTRBQkQ4QTE1NkFBQzI0MkU0NDE1OUEyCis6MTA1MjgwMDAxNDkzMjdENTI0MjA4M0RERDkxOUM5RjhGOUY1QUYxNjcxCis6MTA1MjkwMDAyMTNGQjg4OTdENkQxRUVERUZEMEY5Qzk0NzgwOUYyQjY2Cis6MTA1MkEwMDBBOTc4ODE3QTkzMkVFOUZEQjY2QkQxNjkxNTA5Q0M4MTc1Cis6MTA1MkIwMDA3NkQ1NzZCM0MxMEZGNEEyQkU1OUNCRTU5QUIwRDM0Q0U0Cis6MTA1MkMwMDBBOURBQjkxNDdDM0ZDQTA3N0FBNkYzQUJDOTJBRTA2RDA0Cis6MTA1MkQwMDA2QkY2Rjg1QjZFQTc1NTUyNzNDNkNEMDBGN0NDNjRFRDQ0Cis6MTA1MkUwMDAzNjgzRkU5QkNERTk2QjAyRDA5Nzg0NTY5MEEwQUY4QjlFCis6MTA1MkYwMDBEMDRGREEzQTAzN0REOTEzNzQ3RUREMkRDNDhGRUIyRkE2Cis6MTA1MzAwMDBDQjM2RkY0RDM3M0Y2RTk3MThFREY1QTA5RERFMTZENkQ0Cis6MTA1MzEwMDBCRjIzNUQwQUM5QTY3MDlFQzNFMUJDMzZERUUyMDVCOUIzCis6MTA1MzIwMDBBNkRDMjdGOTQ4MEFDQzk3OEM1QTQ1RTczOUJCRDlBQzlCCis6MTA1MzMwMDBGMzQ3RTdDNDJCODhDNzM5QUIyMjdEODRGOURGQ0U3QUU3Cis6MTA1MzQwMDA1QUQ2RThGQkM3QTA5OEVENzY4NkRBNTVBNDI1QTQzRDg5Cis6MTA1MzUwMDBEMDQzOEM4QUY0M0JDN0NFREU3RDQ0RkIxODk2MDBGRDFCCis6MTA1MzYwMDA5RTcyQTAxM0VGMzU5RjBGQTU1M0UzRjgwM0Y2NkI2ODA5Cis6MTA1MzcwMDBCNzU2MjJCM0MwN0U1QTZCNzYzQjVEMjFGNkM3QTg1NDYwCis6MTA1MzgwMDA2NkJGOUNCNzU3NkQzMkE1MEU2Qzk3NjhENjY0Qjc5MjBFCis6MTA1MzkwMDAxODJDRjdDNDVCNjdGOUMyRDgzMUEyM0Y0MTI3NjUxQUMwCis6MTA1M0EwMDBGM0NCMDdFQTM3M0Q1MDg1NzY5OUU5NDlCRjBDRjY3NjhECis6MTA1M0IwMDA3QTgwQTA3RDVDMTY3MDlCRTZFOUVDNzRFNjlGRjZCM0ZDCis6MTA1M0MwMDBEM0RCRjdBMzlEQkU2Q0RGN0U2NkE3QjdBRjQyN0I3RkMyCis6MTA1M0QwMDAxOUI1Rjc0MUJFNTNCQjExNjQyNTlCNTAzRURBRUY3REYyCis6MTA1M0UwMDA3RTI2RTUyRDUyRDYyRUY1RjlBMTBBNDU0NTVBMUJBQjZFCis6MTA1M0YwMDA3RkY3RDZFQ0Y4NDdEM0MxNEZENDlDNjZFQUY3REM5RDIzCis6MTA1NDAwMDA1QUIwQzE0QUZEOUVENjE0MTI0OUE4REYzMzJCQjVFMDJECis6MTA1NDEwMDBCNkY1MTMyODM1MjVCODI1MTI4RkU1MEQzMTEzMDdFRkEyCis6MTA1NDIwMDBEN0RFOUQ5QUJGMDFGQ0RBODFGQ0NCRUE1NEY1QUFGRUQ3Cis6MTA1NDMwMDBFNTA3RTk5RUJCNTM0M0UyMDI1NDNFODZCNTQ3MzIzMjRDCis6MTA1NDQwMDAyQUU2NDAzRDIxMzdDQUEyMTg3RjNFNkFGMkE3RkQxNDIyCis6MTA1NDUwMDBGQ0FEQjc2NDAyRkFGNDk2OTY3OUU4MDc0QzZCNTlFQzA4Cis6MTA1NDYwMDBBOUEyRjNFOTNENzAzOTkzOTg0MDVFMzJCQzM3QTYzMjY5Cis6MTA1NDcwMDBCQkE2Mjk5QUQ5OTc0REQxQjQxRjJBNkZERTc0NkE4REM1Cis6MTA1NDgwMDBEMDdGNzdGNkYzRUJDNzUyN0VBOUVCOTA1REUwMkY0NjE1Cis6MTA1NDkwMDA2NjVEMUUwNUZDM0Y2REZDRjM0RjhFQTVFMzdDMTg1MDQ2Cis6MTA1NEEwMDAzMEZFRDA2OUEzNzQ0OERGN0Y0ODI0QjQ2N0NCOEU0NUIzCis6MTA1NEIwMDA3OEY2NTFCQzdDREY1OURFOTYxQUUyOUY3Q0RGNTk4NTc1Cis6MTA1NEMwMDA2NTUyNEIxRDJCQ0ExRjJCQUM4QzJGM0YyNEZCRDM3RTY4Cis6MTA1NEQwMDA0QUM3RjEzNjRCNjgwNzlDNkY0RTg5MDMzQUU4MzREM0NDCis6MTA1NEUwMDBGNTg3RDBFM0VBNTQwNUU5NkYzNUE3QzdCQTRCMzIwNjEyCis6MTA1NEYwMDBDRDNBQ0RGRUU0NjY1QUJGNEVGMTlCQzEwRkFDQkI2NDAyCis6MTA1NTAwMDBDMUY3MzAwRjk4NEY2N0E0QkU5RkM3NzkzRjhGRjdGNTVCCis6MTA1NTEwMDA0M0UxMzAwRUVBMTlGQjUxRDg3Qjg5QURDRjg4ODdEM0EwCis6MTA1NTIwMDAyOTk1M0Y4NUY1N0NERkU5NkU0M0JDNTFGOTA1RkFBMjY4Cis6MTA1NTMwMDBBQ0I4RUIwNEQ4MTFEN0Q2NEI2RTA5RjQ1MkQzNjVDOTc5Cis6MTA1NTQwMDAzRjlBQzJGM0VDM0UzM0ZBRjc2N0MxM0ZBNEUzOUREQjE5Cis6MTA1NTUwMDA3NzcwQzg1Q0ZBNkNEQ0ZEQzc1OEYwMDdCNzcwN0M5REFCCis6MTA1NTYwMDA1M0JBNjM2MTdFQ0I1RUEyRkUwQkRBNDNGRTIxRjc2MDg1Cis6MTA1NTcwMDBGQjc5MjU4RkIxNjFBQ0ExRkE3QUVDQjcwNzkzM0QyQzhBCis6MTA1NTgwMDA3OEE4NDI3QzRFRDhBNTM3NTlCRDNFOTg1RkU3MkExOUM2Cis6MTA1NTkwMDBFNTA4RDVFNzIyNkUyQTgxRkM5RUI0NEY3NjQ3QzZGNjExCis6MTA1NUEwMDBCNzU3NUY0RTM1MEI3OTZCMDIzREY2ODA5RDhEMzM5MDdBCis6MTA1NUIwMDAzQzI4QkI5NDQ4N0MyMUYyQTI0Q0YxQ0IzMEZGQjI0QjhCCis6MTA1NUMwMDA0M0YwRkRCOTIzQTk0RkQ0MDJERDEyQjMwQkNENDQ4NUJFCis6MTA1NUQwMDA3NEExQkQyQzExRjFENzk1NEVEN0YzM0EyRkJDQjFFRjgyCis6MTA1NUUwMDBDMkVEMzcyMjMzNTJCRDQ4RUI3Q0M3QUYyNUExRkQwQzdECis6MTA1NUYwMDAyMUQyOTJBMDVEMzhFOTkyM0VFRTZBQjRBMzg1OUVBREI5Cis6MTA1NjAwMDBFODJDNUE5QjRDMDBFRUVBRUQzNzAyMUQxRTUxOTA3RkFDCis6MTA1NjEwMDA4Qzc2NzY3NTYwRjIwMEY2RjQwNkE0QTMzREZCRDJBMjY4Cis6MTA1NjIwMDAyMTJFQjA5MUYzNzlEM0JFMEI5MzQxM0UyRDI3RkUzQjQzCis6MTA1NjMwMDA2RTRDODJCODgzNkNGNzkzQUJDNUJCRDZGRTZFMTIxRDYxCis6MTA1NjQwMDBGRjhEODBBMjgyM0M3ODIzRDA2NTJEQzRCMjA5RTMxQzczCis6MTA1NjUwMDA2NTZGOTdFNTAxRkY3NjA2OTQxQUYwNUJDQkJFRUE4QTg4Cis6MTA1NjYwMDA5RTk3MUZCNDZCM0EyRjlCRjBGRDFCOTcwRkUwN0JEMUU5Cis6MTA1NjcwMDA2RjY3MjAyMTBGRjRGMzZFMTNGM0I3QkIwRUZGMkQxQUUzCis6MTA1NjgwMDBFNEVCMUI5N0NGMjdBMkRGMkZFQzkyRkU3NjM1RkEwMUQxCis6MTA1NjkwMDA5NTM2QjkyRjBFMUQ2QUJGMTNCOUVDQjgxNUZDOEQzOEJECis6MTA1NkEwMDAzMzkxMTEwRkNDMUZFRDY3OTc3QzQwRDZEQTQ4N0ZGQjEyCis6MTA1NkIwMDA0NEMwMUZDODEyRjhBNjlGNUQxRDg0QjdDRUJFQkU5MjFGCis6MTA1NkMwMDBDQUVERTU5MTY0RUMxNUIwNzMyRjI3MkUwNTdEREREQjY3Cis6MTA1NkQwMDAxOTZENUY4REYxMjk2NjU3RjQ3NjdERkVCM0E5RjBGRTUyCis6MTA1NkUwMDBBODhDRjFCNkRFQ0IzMkYyRDU4MUQ3OTc4RUVFODkwOTQwCis6MTA1NkYwMDA4NTdCMkJFMkVGRTJCMEFGQkU3Qzk1RDZCRjc4MjgwQTVGCis6MTA1NzAwMDBFM0VBNDQ3MUU1ODU4QjlGMDRFM0M5RkVFMTI2MjczQzZCCis6MTA1NzEwMDBCREMzNEQxMzkwRUQzMDVFRjA5RDYwQkNDMDkxODZGMTJECis6MTA1NzIwMDA4MkMwNjQ1MDU3OTk5QjRGNUEyMERFQjIzMUQ1MzMzNDMyCis6MTA1NzMwMDAwRERCQjc0N0MzQkExNzQ1MzFGOUU0MjUxNUM5RDQ3ODRECis6MTA1NzQwMDAyMjJGMUQzMTU1MDBCRDE0QUY1MjExRUYzQkNERDRDNEYzCis6MTA1NzUwMDAwMkZFRDhDRUZDRkI5RDU0REU4MjVGQjRCOEJEQ0Q5Mjc0Cis6MTA1NzYwMDAxMjgyRTdDNTE0NDFCMEJFRDM2NkVGQTg4NDkwRjczQjIwCis6MTA1NzcwMDBEMjU4M0NFMUY0QTEyNUNGMDE5Q0JDN0Y4QTIwMTk2MTVECis6MTA1NzgwMDBFQ0QzODdEMjk4M0NEQzZCRjE0RUREMDVGNTNFMzYxMTRCCis6MTA1NzkwMDAxOEFGRUJGMDZGMEUwRkE3Nzg1RTdDNDIyRDAyM0QzMDA0Cis6MTA1N0EwMDAyQjREQzU3QTFENDc3N0I2MEVBN0Y1M0EzRTAwRUQ0OTU5Cis6MTA1N0IwMDA0REYyNkRGNUIyODk4RUZCMkE1MTU5RENFRkI4MDlFNzNECis6MTA1N0MwMDBEQjE3MjcyNUVFNDQ1OEVGMUQ2OTRDOEVCRDdBODREMTM2Cis6MTA1N0QwMDBBQjE4RkZENTI4QTZFRjI2QTczMUY5NTI5NkM2RTI2RTgwCis6MTA1N0UwMDA3QjhFNTQyNENFNDVCRUQyMjYwMURDOUE0RUY1QjRDNjNCCis6MTA1N0YwMDBBQUMxMzhBMUIwMEYyNzFFREYzM0I1ODBGRUVGQzRCM0I2Cis6MTA1ODAwMDAyNjNCQTA0RjNEQkU1NTg2RjVBQUE3MDk4OTk3RkFDNzQyCis6MTA1ODEwMDBCMTY4N0Y1M0QyMUNDMUZFNUUzRENCRkFBM0YzMzgwMEMyCis6MTA1ODIwMDA3QzE3NTg0NUVDNUI5MUVBM0M4RkU3RDNGMkFCREQ0QTNECis6MTA1ODMwMDBDMjYzMkFFMjAzRjU4MUMwODM1ODhGOTg4N0RBNEVEQzcxCis6MTA1ODQwMDA1QjYyOTA0NURDN0JBRTE2OEZBNjdFMjdGMERCMzgyRUEwCis6MTA1ODUwMDAzRkRGNEQ3NURGOTVDNkVDQUM1MTQwNzdBNzBGNDVBMUYyCis6MTA1ODYwMDAzREI2OTdDN0I1ODlCMzdFMzRDMDRGRTBFOTdCRkM2OThDCis6MTA1ODcwMDA5Q0NGNDBFMzM3NzMzQTEwQ0Y5RDY2RDU4QkY0RjAxMjdFCis6MTA1ODgwMDBEM0JCM0I2RDdFNkIxQUM4QkY1N0QyQjBBQzdBQkREMUNCCis6MTA1ODkwMDA4NUY0N0I1MzQ3ODY0QjU2OTE5RTlCMTlERDMyM0FCRjY4Cis6MTA1OEEwMDA4OUQzQjlEQTFFQjBBNDg0RTA2MTYwRjlDNkUwREU0N0FFCis6MTA1OEIwMDAzRjRBM0JEMjU1QzcwOTgyRkNCNjY0Qzc3RDJDMEU0OUNFCis6MTA1OEMwMDBGQ0M5OEM5RkJDQzlDMDVGQzAxNzhDQ0ZGQ0MzMjRGNjM5Cis6MTA1OEQwMDA4QzA1M0U5OUQ4Qjk2NTREMzI2REQ3MDA3NDlGMUY4NEYxCis6MTA1OEUwMDA4MzBBN0MwMTdDMjZENjY5NjM3NkYyQ0Y3ODU5N0M2Rjc3Cis6MTA1OEYwMDA0QjYzNzFDNzZBMzkzRkFFRTcyQUYxQkIzNzU2M0E4OTI1Cis6MTA1OTAwMDAxMjEyQkZGQjE5OUZGRjYyQjIwMUVERDNDNTk3REJEMDI2Cis6MTA1OTEwMDA2RTU1OUJEOTczRjEwM0VDOTlCOUI5REUwMkZBNjBGMUM3Cis6MTA1OTIwMDAyNkM5MURDRUFFQjY3M0ZDOURFMzdDNDA0QzUxQzM4OUE1Cis6MTA1OTMwMDAzM0Y4RERDMUY5RTBDQ0JFMjcwRUMyM0EyOUJEM0UwN0RGCis6MTA1OTQwMDBGMEJGQTE2M0MzRDMwMDI2NDFGRjY3QjY5OUIxQkQ5MEY0Cis6MTA1OTUwMDAyM0EyRkQzNkRFRkY0QkM3MTlGRjRDREM2NkFFQjg5QkI5Cis6MTA1OTYwMDBDMjdCQTI5N0Q4MjE5RUZFRUFCNkVEMzJDOEY3NTc4MUQ2Cis6MTA1OTcwMDAzRjUyOThEQzAwQkQ3Q0ZBRDA2M0QxM0YwMDNBMzg2OUQxCis6MTA1OTgwMDAyMjEwQjdERjZCMjE4Qjc2ODdFMEI3NkJDQkNCM0E3OUYwCis6MTA1OTkwMDBCMDY0QzdBQUE5RDA0RjY5NEY4MjA0N0E0MEM4MDE4MTc4Cis6MTA1OUEwMDBFRkJEMTZENzE0OTQyN0QzMERGMkE0OEFCNTNGMDZGMEE1Cis6MTA1OUIwMDBBNEVCN0E4MkNCOTMyNzZBQTgzQ0ExQUZFMkI3QzU0QjkwCis6MTA1OUMwMDBEMENGNUUxRTI3MzZDMkFGOEJFMzUzRDBFMzhENDFCOUYzCis6MTA1OUQwMDBEQkM1RTQ2RTRGMkM3NEJEN0NEQTc5OENEM0Y2OERDM0I1Cis6MTA1OUUwMDBFOUVFODkyQTQxNzcyOTEyQzA5MURBRjlBNjc0NTgzNzZECis6MTA1OUYwMDA4NTBGRDAzRkI1RjNFRjlEOTE4RjVDN0E0NEMxRkQyMUI3Cis6MTA1QTAwMDBCRURGNDQ1NjBCRkI0N0M3QkY0MkNFQkQ5QkFBMUQ4N0Q2Cis6MTA1QTEwMDBGMTRCQUE5QUQ3ODBGRjkxNThFQjQ1QkEzRTIzNjlBMzcwCis6MTA1QTIwMDAxM0E4QkUzQTAzN0MxRDQ2MkVCQ0NBRTVDODQ1QjMzNjUyCis6MTA1QTMwMDBEQTFFRTY3QjkwOEZDODcwRTA4MzQ1NDQzM0MxM0FDOEQ0Cis6MTA1QTQwMDA2NkM5MEU3MDE1REZENUNEOENERTNFRTdGMDExRUYzRjU1Cis6MTA1QTUwMDAzN0MwNkIxMkMwMkIwREUxRjUzOUQ3NTMxNjJCOUQ2RjU0Cis6MTA1QTYwMDBBNjhGRTkyOTIyNTUyMDNEMTJEMzJEQzM4MURGQ0U5ODgwCis6MTA1QTcwMDAwOUQyQ0YxOTJBMTcwMTZFOEJBM0Y0RkU4OTU4RDczN0E0Cis6MTA1QTgwMDA5Q0FGMkVDNkIzNzVFQ0U1RTNGRTA5N0M5RUYxNTgwRjgyCis6MTA1QTkwMDBFRDBBNkZCOTA5Rjc2QjgxM0U5MERFQTYyN0EwREQ0NUMwCis6MTA1QUEwMDAxRDI2MDVGOUJDNkYzRkMyMkY0QjRDMUVDODMwMEYzQjYzCis6MTA1QUIwMDBGODc1MTgyN0RBODJGRDJFRERCNTA1RTkyNkJFQzY1RTJCCis6MTA1QUMwMDAwNEZCNDc0RjI4QUVDOEY4OTA3ODZGRDdGNjhERTg0RkEzCis6MTA1QUQwMDAwMjNEMDE1RjBFNDQ4RjhCODAxRTQ5MTgzQUY0NTEzQTAzCis6MTA1QUUwMDBBNEVEMTI2QTlBMTE4RjE0QkZGNjc0REE2RjdDOTUyNkIyCis6MTA1QUYwMDAwM0REMThGMTJCRjYxOTA1M0NGNjFBRjYyNTY3QTYzM0Q3Cis6MTA1QjAwMDBGOEE0QTQzM0ZFNTRCOUZDMUE1ODRGRThFNTJEQzU5NzA0Cis6MTA1QjEwMDA5QUVFRDBEMzM3RTA0REYwNUI0QzNBOTM0RjAzRDFGOTc2Cis6MTA1QjIwMDA0M0U5NzZFQ0I3RjVDMzc5NEU5MDE3NjIzRjRBRUMyRjA0Cis6MTA1QjMwMDA4QkYxQzdBNjMzN0ExQzY4M0ZFOTlDQUExNUE1MUJGNjEyCis6MTA1QjQwMDAzQkQ1RkMyMDlGNTQ3M0ZCNzFDNUY2MDhEQ0E3REYwRDI1Cis6MTA1QjUwMDA1RjAwRUU1RDUxQjgyRkQxMjcwNzE1RTIwNjdDOTZBN0FFCis6MTA1QjYwMDBBN0UwNzgwMkJGNkE4Qjg1QTREMzcxMkZBNkQ0NzdDNTJFCis6MTA1QjcwMDBEMDRGMzc3NzdCNkIwQkU4M0E3NjVCQkMzM0E3QTFERDYwCis6MTA1QjgwMDBFRDlBMDJGRDRGQTkzNUQ5MjE4RTFERUZCNjRCMTAwN0I2Cis6MTA1QjkwMDA0MTEyMDdCRTM4Q0FDNjIxQUE0QjM3RUZBOTFDRUUwMjM0Cis6MTA1QkEwMDA0RjAyMEUwM0U5QUI4MUYwRjMxMDg3OEY4MzdGMzdGMjRBCis6MTA1QkIwMDA3NTA2RkY2RTRFNjdGNDdGNkRCRUY2Q0E0MEY3QjE0NEJFCis6MTA1QkMwMDA1QjJEQzNGQ0NCOTgxQ0VBRTNFQjMyODJGQjhEMEJEMjNFCis6MTA1QkQwMDBGNTdDMkRDQTYxRjg3QTQxN0EyODVGNEZFOEQxRjMzNTE4Cis6MTA1QkUwMDBCNTcwQjkzRTQ1RkU3MjZDMzNCQjk5M0ZDOUY4RUM2MkEzCis6MTA1QkYwMDAyNDlCRUY4QTc0QTY4NzFDQTAzRjI4RkUxQzVFQjZFRjhDCis6MTA1QzAwMDAzQTk1RDMxOUE1QTAzOTAwRUZCNjZEMTFCODlGMjBGOEM5Cis6MTA1QzEwMDAzRTc2MjZBOTMwQzNGRTJERTgxQkE4MzU1MzNCNzExM0YxCis6MTA1QzIwMDBFQ0RCM0EyRDJBRUMyMzlGMzEwNzEwNEY2N0E4QTNEQTRCCis6MTA1QzMwMDA4NkY4RjQ2MDNFQ0E5OTQzMzczMDc5MzBBRDRGRkZCOEVCCis6MTA1QzQwMDA0RDUwN0U3RjA0RUUyNzU0Q0I5RDQ4RDcyQkFBMDlFQUZFCis6MTA1QzUwMDA4RkFFRURBNTQ4MDc4QjZBNTMyNUEwQjMyNTNCRTIyNUZGCis6MTA1QzYwMDBGODlFNTA2NTM3QzkyMTcyQjFCNDQ1NDY3QUEyNzRCQjFCCis6MTA1QzcwMDAyRTNEMDQ3RUE1REU2NjE5RTAzMjNBNTE3MzlBRTNBOUZGCis6MTA1QzgwMDA5RUREMzY3NTQ2Njg1Q0U4NDk1QTVFRUYwQ0M2ODU2ODRECis6MTA1QzkwMDBGOTY3MzFDMzA2MUYxN0RBOTg3RUNCQ0ZENjhEQTA0QTlECis6MTA1Q0EwMDAyNENERkQxNDhDN0I0RUY1NkMwNEJDOTQyNDM3NjNCQzZFCis6MTA1Q0IwMDA3M0IwNzkxMDREM0NBRUY0QzEyMzZGNkRBRkE3RUJBRTVFCis6MTA1Q0MwMDA3QjM0RjAwODdDQkQxN0UyQUVEOTkwM0ZDMEUyQUU0RDA4Cis6MTA1Q0QwMDA5REM3MzAxRURCQzlGOUY5RUY0RUNGMEIzMEVFRUNFNjc1Cis6MTA1Q0UwMDAyOUZBRjg2QjYwNzBFMzI2NzFCRTI1MUYxMDg0N0Y5MjNECis6MTA1Q0YwMDBBNzU5ODZCODg0OTAwQkZCRDIxMzg0RkYyOEMxRkU5QjYyCis6MTA1RDAwMDBFMDA3OTAyQjYwN0Y4QTNDMDg4ODg3RDkxMjgyNzIxOTNECis6MTA1RDEwMDBDQTcxMjE3QTc1N0QyREI1ODNDMkYwRDlDMUY0OThCMENFCis6MTA1RDIwMDA3MjkwNzRGRUZERDczRkEwRkU3RTEzN0M2MjcyRjE2MDFDCis6MTA1RDMwMDA3QTg4REU3RkEyRjZFMzIxMUE4QjdCNjBCQ0U5N0VFRUQ3Cis6MTA1RDQwMDA0MzNFQjdEQUY1RkIyQzkwNDNFRkM4MjhGRjhCMjIyQzlCCis6MTA1RDUwMDA1RTA5RjY4N0RDNDRCNTBGRTFGRDAxOUI3NDRBN0UxQkFBCis6MTA1RDYwMDBGNTNGOUJGRTI2MTEzN0M0Q0ZGRTI2RTNGM0I5MUY3OTFBCis6MTA1RDcwMDA2QTUyQzA5RkVGMzBCOUE4MjUwMEY5MTQ0OEM3QUVEMUM4Cis6MTA1RDgwMDBDNDY3QTVGNEQ3Q0VGNzZCQ0IwRkM2QjhDREY0N0RBRjAzCis6MTA1RDkwMDA2NDQ1RjlEN0JCM0ZDQTBCN0NERDZCMzM2MTVDQjlFQjYzCis6MTA1REEwMDBCNTA4ODRFQjg1RjQyOEVFNUZGQjc0N0VCOEQ4RkY4OEQ1Cis6MTA1REIwMDA4Q0U4Rjk0MzE5NkRCRjM1OTJGNUJCMzU5MkM1RTlCNjRDCis6MTA1REMwMDAzRTlBMTkwN0Y2RTc0MEZCRTM2NTJENjkxOEU3MTNGMUUyCis6MTA1REQwMDBDN0Q0ODA2QTYyNDk2NDZDMUMyNTQwNzA3RDYyQkY3Q0I4Cis6MTA1REUwMDAxM0U0NkIxNDBGOUNBRkYxRDdGNEJFN0M4RDAwRDA1MzNECis6MTA1REYwMDBEM0FDOUVDMzMwNDdBMzFGMzZFNEU4QzdGQkExOUYyMTY1Cis6MTA1RTAwMDAyRDJDNENCMEU5RTgwQTA5RDZCOUE5MkVCQzFGMjZFODBBCis6MTA1RTEwMDA2ODEzOEY3Qjg1RTQ0NTdDQUJEMzJGRjUwOUQxQTkyMThECis6MTA1RTIwMDBGMjUzQjQ3QjlBRTc0NTk0NzZDREREMEI3NjFFRTVFRjExCis6MTA1RTMwMDA3M0ExRkMzREI1RTA5MUM4NzBGQkYzOUU5NjFGNjI1Q0I4Cis6MTA1RTQwMDA3NDIwRkFGNzk4ODgxNjJFRUUzNzNBODNDQjVCMjUzMDBDCis6MTA1RTUwMDAxQ0VEQzEzNzJFNDZBOTYxRjIyNTNDQUY5OTFDMDAxN0Y1Cis6MTA1RTYwMDAxMTlGRTkzRkZFOEY3MEZDNjExOTdERkI3RkMzMDdCMzczCis6MTA1RTcwMDBGRjY3OUM3N0I3OTk4QzBDQTc1NzA0OUU4REUzODU2OUMzCis6MTA1RTgwMDAzRkRCMTVEMkRFNjMyMURBRUU5OEZFRUQ4NERERUI5MTg3Cis6MTA1RTkwMDBGOEZFRUU4NzA0RjVBQkEwMTMwQUY3NzExOUY0N0JFMTY1Cis6MTA1RUEwMDBEQkYzQzY0NTQxQzJBMUI1NTkwNjc5NzBBMUEzMkIxOUYwCis6MTA1RUIwMDBFMjU2MDNGOTg3NjIzRUY0MkYyMzVDQkM4NThFRTcwOTI2Cis6MTA1RUMwMDA4Nzg3NjkxOTRDQkY3QUNDQ0MwRTk1Q0EwRkREMDNGM0Q2Cis6MTA1RUQwMDBGMjdDNjU5MTIyNDJFODZDMjJBRjY3RENDN0VDRkNFQUY5Cis6MTA1RUUwMDBCRkM3QTE5QzM0RkI5M0MzQzFDRkI4QkYzOTExODI5MzA0Cis6MTA1RUYwMDA0Q0RGQjE3MTM5NUM1QUNCNDk0NTQ0MTJDNjBCQzg1NkM4Cis6MTA1RjAwMDAxNUZDNDAyNjJGRDUxNjgyN0MzRTQ2NzJFM0JBRUIyMDY0Cis6MTA1RjEwMDBFOEUyMDAzQUVGQzYzQ0M4MEI0NzY1QUM1Nzc4OUZFQTA5Cis6MTA1RjIwMDAwM0JGODlFQTg1QkIwMTdFQTU0NERCNkI0QTBCQzI0QkVDCis6MTA1RjMwMDBEMDQzRUI4QkQ0NEVEMUM1QUQxOEZGMDhGRjc1MjQ4RjJECis6MTA1RjQwMDBGRjUwNTVFMzBFQzVERkQwNTk5NDU0NDNFNEZFMzBDREU1Cis6MTA1RjUwMDA0QTk0OTAzODVCRjIyMkJCQUUzQ0IyRDlBOUFCRUZGNEM1Cis6MTA1RjYwMDBGQTI1RTAyQjY3OEJBQTdCMUY5NDU3NkNCRDIzQkQ2NDc5Cis6MTA1RjcwMDAwQkU4RkY0REE0MDdENzM3OEFDRjY3OENBNDIxN0Q1QzNGCis6MTA1RjgwMDAzOEZBNDkwMkM0MjU3RkMwRjk4N0FFQjcwNUQ3REJBMjJFCis6MTA1RjkwMDA1RDA4QTUwRkIxREU2QkFERUI4Mzk1NzQzRTk0RUYzRkNBCis6MTA1RkEwMDAwMkZGOUMzRTY3M0Y3MDUyMUE4QTcwQjc4MzNBQTA3QTBDCis6MTA1RkIwMDA5MUI1MUJGOUYwMzFGNDIzNDczNjc3QTMxRDNGQTc2NTUwCis6MTA1RkMwMDBCRjA0RkE4QkNBMEQ2Q0I3NjlBNTE1OUZDRkFDQjRBM0ZCCis6MTA1RkQwMDA5RjJGRjAzQjgyRDY4MzNDMjU2RjA1Qzk4NjdEODE4MTRBCis6MTA1RkUwMDBGNEQzQzY4QzQxRUJBNzhEMTk2MUY0OTNDOTFBNzgxM0M5Cis6MTA1RkYwMDBGNkMxMUIzQjY1MTVFODYwQ0RDMzA5OThGRkYyNUNCQjk5Cis6MTA2MDAwMDA4NEZCMkUwNzNCNTlGRURGNzNBRDUxQTg0N0M0Qjg1RjMwCis6MTA2MDEwMDBCRTE0ODdGQjNGNUZGMjdENDBEMjE1OEZGNEREMTRDRkI1Cis6MTA2MDIwMDA3MUIyMzYxRUY3Qzk3QkY5M0U2NDQ3QkFGNjFGMTkyMUQzCis6MTA2MDMwMDBGMkUwQjlDRTZGMjI0MTdGRTQ4OTNDNUI4M0RFMDE0MTBGCis6MTA2MDQwMDAyQ0QxRjZFMDEzMDExREI3QTYxNEFEOTM2MTVENzc2OEZFCis6MTA2MDUwMDBFMzIyNjVFNEY3REQ4QzVFOTk3RUZBRTVBRTBBOTMxNkRECis6MTA2MDYwMDA4MjlGMEIxRDVGQ0YzOUEwRjZERjVGMTJGQjUwNjI3RjZFCis6MTA2MDcwMDBFQTREQTdGNjZBNDY4OEJDMzZFRTNCMTlGNzRCRTQ1ODYyCis6MTA2MDgwMDAyQkU2NjlCQkU0Mjg5N0FDRDdCNzQ4ODc2QjMyOTgzRUJDCis6MTA2MDkwMDA1REIzM0YwQUUxQjgyNjIzMDZGNzdCRTk3QzhGQzAzODYxCis6MTA2MEEwMDA1RDM2MEIxOTQ2REY1RjM4MTE4M0Y1QzRGQ0U5N0MwQkM0Cis6MTA2MEIwMDA4Rjg2OTk2RjkzMjkzMEU3ODBBNDlCRUZCMUFCQ0Y1N0MwCis6MTA2MEMwMDA5RkNGMkNFNkQ3ODcxRjFFMkY5MDZEMEFBRUEzOTc0NDUzCis6MTA2MEQwMDBCOTAwQUZFRDE2RDcwOTBERjRFRjNCNTEyQzdGOEFFM0UxCis6MTA2MEUwMDA2RjM5RTdDRDVFOEEyRjg5RTJBQkI3RTM0MjI0RDBGMTY2Cis6MTA2MEYwMDBDMTc0RUQyNENDNDMxRTE5ODgwNUZGRTU2MEU3ODUxQ0JCCis6MTA2MTAwMDBFMDk3ODFGNjBEOTU4QzhBQkYwMEJFMjBGRjBGRjE2NkU3Cis6MTA2MTEwMDBENzJFRUMyMjhDMkZCNUFCQjRDQkM4QTgzODBCRjVBRjdCCis6MTA2MTIwMDAwMzNFREY1QzBGN0M5QTk0OTg3NUExRjY5N0M0RTVCM0EzCis6MTA2MTMwMDA5MTFFQTVDRUZERkYwM0ZCMDE5NDFGMzExRkQ1M0I4QUE1Cis6MTA2MTQwMDBGOEQ2NTBCOEI1MTY3MEJBOUM0OTU0MTY5RkQxRDM0QkE3Cis6MTA2MTUwMDA0N0JBQzc5Q0U5MDhGMkYxNTVFMDEzMDlGNTdFOTlFRUJDCis6MTA2MTYwMDA4OTg2MjdDQzIzNzkyQ0NBMjkxQjk0QTk1RURCNkI0OTJECis6MTA2MTcwMDAwRERBNUJBM0QzOThEQzBCQzQxM0NDNUYzMUVFRjc2NjZBCis6MTA2MTgwMDA2NENDNDhDQUE0NzA0QkNENTY0REY2RkNFQkUyODc5MTI3Cis6MTA2MTkwMDA5OTU3ODU5RjFGRTlBMjkxQzNBOTExRjYxOTI5NUNDOEQ3Cis6MTA2MUEwMDAzRUYzNTk1REJFODAwMTBFMDdEMzNENTkwQzBFNDEzQUI2Cis6MTA2MUIwMDA1QkEzNUUxNTFFNzkwQzFFNUEyMUFDQzM2NkE2RjQwMkMxCis6MTA2MUMwMDA0MDk5NTBFRkM0QkMxOEQ1N0QzN0VDN0ZFRTVDQzVFMDNDCis6MTA2MUQwMDBEMEZCMjI4M0MzRUUyRTEzRDJGNTE2OTI4QkZDOTk2QjYzCis6MTA2MUUwMDAzQTNGMDdGQUE3RjI2NzAyRjQ1M0RDREQ2NjgyN0NDMjBECis6MTA2MUYwMDAwQzlGNkE4MkI4NzI0RTc3QkJDOTc0NzVCQTJEQ0I0NEI2Cis6MTA2MjAwMDA3REExNERDQTY0RjZDNUZEODA4N0JDNUQyQzFFNzMxNTRCCis6MTA2MjEwMDBCQUFEQ0MxQzdGNUQ3MEFGQ0QxQzNGNzgzOTQ0RTlDQTY0Cis6MTA2MjIwMDAxMzRBNTc4M0NENEJBMkY0NDE5MjEzRkFGNzQ3NDgwRjE0Cis6MTA2MjMwMDBDNkZERjdCRjEyODFGMjdFRjkxRTA5RTVEM0YyRDczRjAyCis6MTA2MjQwMDA5QjAzRjA1REZFOUIwODI0Q0FBQURGNDRFMkY3RjNGQjQwCis6MTA2MjUwMDBEOEY3MkZDQkMzRUY0RkRGOTU5OTgwN0FCNkIxRkQzRUNCCis6MTA2MjYwMDA0RkE4N0UxNzc2QzM0RkRERTdFREU5NzI3MDlGMkY3MTVGCis6MTA2MjcwMDAxQTNCNkZCMjI2NTJFNDlCQjJGREJFNTg0RTY3ODkyMzhCCis6MTA2MjgwMDAzRDZFRDA1Mzg5RDUyQzlFMTQxQkIzMTBGN0ZCRkE5RjlCCis6MTA2MjkwMDAyQjYxN0NFQkUwRURFQzc2MTVFRDA3RTMzOTEzMzk4QUUxCis6MTA2MkEwMDBFNUU1MzlDOEZBQUYwMDRFODkzNUZBRUY4RTk4MUFDQzc5Cis6MTA2MkIwMDBDNzczMThGNkZGMDRCQ0JEOTlEQzZFQjYxMDI3Q0E1OTI3Cis6MTA2MkMwMDBDMzNFQkY3OEZFMjU5M0RCRUI2QkUzNERBMUYyMDRGNEY0Cis6MTA2MkQwMDAwMEMwNzU4NUNEOEFFQjVFRTEyMDg5QjUxMDU3QjAyOUU1Cis6MTA2MkUwMDAyRTFDQ0JEMDhGNzhDNkJCNEQ0NDBEM0QyRjUzMTM0NThDCis6MTA2MkYwMDBENDEwQkJDOEUxNDlEMDk1ODdDRTFBQUVBQjNGNEM0QjBBCis6MTA2MzAwMDBENTdENEY1RTk0QUJGQjNFQjI3OUFDQUUzQ0JBRTUwNkIwCis6MTA2MzEwMDA1REZEMTQwQTgwRDA3MkRBQkE1Qjc0RjUzM0RBNjZFODkwCis6MTA2MzIwMDBDQTU5OUJFRUQ2RDVDRkYxQ0RENTdEQ0ZEQkIxNDRGN0ExCis6MTA2MzMwMDBCREEwN0Q4NUFFM0NBNkUzMDdCQUZBRjIwMEY2Qjg4MEIwCis6MTA2MzQwMDBCMzJDRUM3MTVCQjEwNjc0MjVEQkFDNTJBOERERjIyMkY0Cis6MTA2MzUwMDBBRjU3MUU2QjQ1RjgzRkMyRjVGNTIzMzYwQkVBRUI0NzA2Cis6MTA2MzYwMDBCOEJFRUU3Mjk0NUM3NTVGRTY5RkY1REZERTE2RjRDMDkyCis6MTA2MzcwMDBFREI1MEExRTJGRkJGMjgwQzUwNEY0QjhGQzIwQTU4QkY2Cis6MTA2MzgwMDAzMTY4QUZCRDlEQzlFQ0I1RTlGNUI4RkE4MDA1RTQ1RUFBCis6MTA2MzkwMDBGNzAwRjkyMEVGNjU3MjNGNDNBMTdFNEMxODdGRjA5MzIwCis6MTA2M0EwMDA0QzU1MTdCNzEzRkUwMzk1NkJFRjczRkRDMkZDMjZEMjU1Cis6MTA2M0IwMDAyQzgzMUMxMDcyQTkyOTlBQTA5REQ3MTQ2REM3M0M5RkVECis6MTA2M0MwMDBERUQ4NEI5OUMwNEY1NDVFN0QwQ0VEQkFCMzlGNjgzRTRBCis6MTA2M0QwMDAwMDcyQUEzMzAyRTVENDVCRDk5RkEwM0Y3RTRCQ0I0MjJCCis6MTA2M0UwMDA2Q0ZGNjJBNjlERTFDNUUyNTJFRDI4QTdGNEZBRjdBODdBCis6MTA2M0YwMDBCOUJCMTZGMDcwNzRCQzRDNTY4MTFERTQyQTFENEFBRTIwCis6MTA2NDAwMDAwMkY3NzdDMERGQTY3NkYyQjYyQzgyRkQ1RUNCNUYzRDQ5Cis6MTA2NDEwMDBCQTcyMTFFNjREMEZENERGRDFBMjQ4OEM5QkQ2MDI1RDMzCis6MTA2NDIwMDA4NThDMUI5REM1RTA5OUMxOUZENDEwNDVCRkYzRENBRjlGCis6MTA2NDMwMDA2RDNFMkZGODRCNjNERjhEMjUzNkM4OTNGOUUzMzgyRjc3Cis6MTA2NDQwMDBFODIzRDI3RDNGRUNERjdCQkY4RUMxQjg0RTZERDFCQjYwCis6MTA2NDUwMDBFMzU2NjFCRUE4OUJGOTdEMTNEODlBNkY3QUY5RUQ1ODdGCis6MTA2NDYwMDBGMEQ3NkI3NzFGNENGMjg2RTBEMUU4RUY2NUYwRjUxMUJECis6MTA2NDcwMDBBNTI3MTNGMzRFNUYzRDMzNDRBNUNGREE1NzBFMjVCMTYwCis6MTA2NDgwMDBCODkyM0VGRkM1RThFN0Q3QjYyQ0Q3RDE2N0UzQTU0ODU5Cis6MTA2NDkwMDA1RDFFNENBM0QyNkQwMTdDMzQ1RThBQzFGN0JEOTlGQUIyCis6MTA2NEEwMDAzOEMwODBGMDFBMjQzQzhERUYwNTNDOEYxNjlEMTkwNUVECis6MTA2NEIwMDA3MUZBMkYyM0MzRDNGMTZEQkM5RTI4MUJDRjJGMEM5NEYwCis6MTA2NEMwMDAyNzNGODFCN0JCRTA5QTM4MTRFMjRDQjUxNjdGRkE2MERCCis6MTA2NEQwMDBFMjEyMDI0RTZGNUQ2RUMwNzMxMUJGMUVFMDVDNDQ1MTRDCis6MTA2NEUwMDAxNkRCMzdGOTc1RjYwMkNDNkI5RTY4NkRBRTA0RkQzRDg4Cis6MTA2NEYwMDA5MUM3M0ZDM0U0MzU1NzY3ODE5RDdCRTI1RjkzRDczQ0VCCis6MTA2NTAwMDAzRDhCRTM4N0U3MEQwRkNGNTJDM0U2MzU1RkVCRENDOTY4Cis6MTA2NTEwMDA1NDBCOTU0QjYxRjgyQkI3MEY3RTdGOUEzOThFRDJGMUQxCis6MTA2NTIwMDBGREJGMzBEQjYxNUUwREEwRjMyMERFQjJDNThDRjFENzdDCis6MTA2NTMwMDBCNzJGNDcxMDg4ODc3RkI2RDlGQzNDRTRCQjJDRkFDNTNGCis6MTA2NTQwMDBDMTExNEY0MEZDQkIyODAyRjNGMTFBQjY5ODU5QkNCNkYyCis6MTA2NTUwMDAyOEQyMDcyMTg3NDU1QkJFMzcwNEYyMkVCRkEwN0NCQjQzCis6MTA2NTYwMDA4Q0NFQUJFMTE3MEVDQzA3N0FCQkVCQjEyMTgwQTczMzAxCis6MTA2NTcwMDA5QzlGMTc3REZCRTMzQjAwRkVCQjJERjZCQzIyRkE1QzIzCis6MTA2NTgwMDBCNjRCRDJFNTk5MkZEOTE2QTkyQjhCN0MyMjgxM0YyMkJECis6MTA2NTkwMDAwNUYzQ0Y1NTJBNEY1QkIyRjRFNzY4QzYwNUY3MjU1QUQ1Cis6MTA2NUEwMDBCMkI4NUNCRDlEQ0U3N0Y5RjgwQjE2QzBFM0MxQzM1MUZDCis6MTA2NUIwMDAzOEVGMzc2MjY0RjQ3M0ZENDU3RkZEREQxODVBQUVGQzk5Cis6MTA2NUMwMDA1NkMxQkM3RTYzN0UxMjIxODg3NEIyOTBFNzExNTZCRTFDCis6MTA2NUQwMDBBMkY0OUQwMzgwQjI3RjY1MzNGMjA5NkQxNzUzMUQ5MkJCCis6MTA2NUUwMDA2RjVERjk3M0U2NEY1NzQ2QjIzQ0UwMDFGMzk2MENGOTQ0Cis6MTA2NUYwMDA0QUUyOUM0NUJGM0NBNUUwMzkwQjlEOUQyMkU4RTZBOUY3Cis6MTA2NjAwMDAyQzNENUYxRjNDQ0NGMjkyMTYxRUU1NzZFNTM1RTRFNkE0Cis6MTA2NjEwMDAzQkIwOEUwQ0MwRDc1Qjc1QjA2RkY5MzY4N0M2REI5NzgxCis6MTA2NjIwMDAzRjVCM0I4Qzk2M0Y5QjIwNDE2NDhFN0M3NjM5M0NERjAwCis6MTA2NjMwMDA3QzI2RjQxMjlDMEZDODBFRTI2NzlBNkI3MTVGMTlEODIyCis6MTA2NjQwMDBGMkQ2MDlGN0U5Q0UyRDBDNUVERTVDNUQ5RURDOTU2NTI5Cis6MTA2NjUwMDBDMUYxOERGMkRENDhGN0ZGQkZFNDdCNkREMUExNTE1RTQyCis6MTA2NjYwMDAxQjNFNUY4MEU3RDlERDRDM0UxQUY5REMyOENGNzMwRDY1Cis6MTA2NjcwMDA3MjMwMjhDNzY1OUQxQ0NGRTU3MjIwMjhDRjJERjg5RDZDCis6MTA2NjgwMDA5QTY5QjgxRTZGODlFMjVCMjNBMUZGRjMxRUQwN0Q3RTVECis6MTA2NjkwMDA4QzlBNTg0RTlCQUNCNUE3NDY2QjU3Rjc0N0ZGMkZENDQzCis6MTA2NkEwMDBFRjRBRDEzRUNBQTI3QzM0RkE5N0I5NTU2MDhDRTdFRDI3Cis6MTA2NkIwMDA2QTMzMDFGRkY2MEU2MDg3MTRBNDFBRjI4Mjc4N0M0OEQwCis6MTA2NkMwMDA3QzNGOUI1NTVFMDBGOUFBN0I1NEY2MTRGQzU5NEM5OTBCCis6MTA2NkQwMDA5MEVGMkY5RkNENjJGQkNCM0YwMUJCNjdGOTdGNUU0NEZDCis6MTA2NkUwMDBGRURDMTJBNTM5MTU1OENGNzA4QjJCNzRGRjU2M0MyRjRBCis6MTA2NkYwMDA3MjdFMUZGODdDQUQzRURGRjk3NDNBNjE3OENGQ0VENjVBCis6MTA2NzAwMDBFRENGODA3RjhGRjkwMTA3QTIxMDZFQ0YzQUREOTcwMUEwCis6MTA2NzEwMDAwRUVENEVGN0I3MzBBRjMyQTdGQjFGNTkyMTc4NTlDQjlBCis6MTA2NzIwMDBEN0E5OThGNDcxNkJGMTJDQ0QxNkY0RUY0MTNEQkVBMEMyCis6MTA2NzMwMDAyMkJDRkM0RENENjY3OUMxRTU0RkRGMzUwQUVDQ0VCRkZBCis6MTA2NzQwMDBFQ0JGN0IxNEM4QzdBRUE3NEFBRjZBODc2RUUwRkNGOUZFCis6MTA2NzUwMDA2RjVDRUVDN0YzQjhFMzRGODE2RjY4MzkwMUUyOTZCNDFFCis6MTA2NzYwMDBGRDAyOEIyNzMzM0VBNDFGNzM3NjNDREJFRjJFRkY4M0E1Cis6MTA2NzcwMDAyNzhEQzJFNUQ0N0ExOUU1RjdBOTE4MTY2N0ZDMjQ0NkQ3Cis6MTA2NzgwMDBBOUQ5QzZEQjI1RTlEQUIxNzlDQTQwRjc5NDhGOTUxODAzCis6MTA2NzkwMDA0NTc3NUVBMjE0NjhEQTMxRjAzQTRCQjM5OTFFQjUxMDEyCis6MTA2N0EwMDA5NzE1REE1QjBFREM2MjA1RkNDQTkyREJDRUYyRDIxOUQ5Cis6MTA2N0IwMDAzRDRDQTQyMzAwM0RGQzk4Q0JCMUJGM0JCNUEyNkM2QzEzCis6MTA2N0MwMDBDN0Y0RUQ0NEFFNkY5NTE4ODM3RTFEMTE1RTlFODlFNzc4Cis6MTA2N0QwMDA0QjRFNzcwOUY0NzNBN0QzNUQ5QUVEODBCODE3QzkwM0MwCis6MTA2N0UwMDBCRTY5OEYwQTlGRTc3MzEzQzdERkRGODUzRDQ2NjJEMDFFCis6MTA2N0YwMDA2RkM2RjE2NERDNTc3NTY3NjM1Q0NCNTMwMUZEQzFCRUE2Cis6MTA2ODAwMDBBQTU5MDIzRUIwRjNGQTZFODlDNTJCM0MzN0MzNzdFMjMyCis6MTA2ODEwMDA3NDRCRDMyOEJDNEJGRTRDRjAzQ0M3REUyMzE1MTJFQzY2Cis6MTA2ODIwMDBGRjI2NzU1NzQ5MjBDNzkyMzhGRThDRjNFOEUxNzBEQkVDCis6MTA2ODMwMDBDM0YzMjVGQUYzMURGMzJCNjY3MEY4RUY1MTNEQzg1RkUzCis6MTA2ODQwMDBBRDI5OUExM0ZDNTVDOENCMDNCQzFBRjMyQzdFOTlDRDA1Cis6MTA2ODUwMDBGNkQ1QjY0NEY1RTBGRUEwRjc2RTgyRjk3NzQzQ0JCQ0RGCis6MTA2ODYwMDAxMkU0MEYyNUQ3QjY5NTUzOEM5M0Y5RDlDQzlGNEZBODM2Cis6MTA2ODcwMDBEMTlDRTA4NzBGNzc1QUYwOUU4QUMxRjI1QjdFQkIxQkVBCis6MTA2ODgwMDBFMzI1QzUxQTNCQUZCQ0E5REIxQjk5NDlFNzM1QTQ1QkRGCis6MTA2ODkwMDAyQkI3RDA2NzdBQ0UxMDVDREY1MEQyQkM4QUY5MDlBQTM4Cis6MTA2OEEwMDAyRUJGQTk1OEFCQzA3RDcyMzFFRjkyRjlDRDZCMkMyQTY3Cis6MTA2OEIwMDBFNkMzQUNDODBFRjE2QjkyOTc3OUMzRTYzQjE5RjdCOTAyCis6MTA2OEMwMDBENzA4QkVFNEY5MDhDNTNDRkZBMDc4REI1Mzk4NEY1MEM5Cis6MTA2OEQwMDBCQ0VENjY0NTBBOTEzMzlCQjJDREI4RkUzMzg3OTY4Q0VBCis6MTA2OEUwMDA4NkY1MEY5NEM3REE5NkNERjBGMEZENkMyNjVGMDZDQUU4Cis6MTA2OEYwMDAxRjVCREYyNzE3RkFFNThGQURDRjc2ODRFNEQ3MzQ5RTkwCis6MTA2OTAwMDA0N0Y5RDc5OENERTRGQ0IzOTA1NzQzRTFGQUVDN0M5MTdBCis6MTA2OTEwMDA1N0IzNDU4MkY1RUVCNUI0NEZEOTA1RjM1QTZFQzIzQzc0Cis6MTA2OTIwMDBBNkJFQkNBMkY5MkNDRkFEQUYzREU0MTdEMUY3Q0YyRTU4Cis6MTA2OTMwMDA2MkY5NDVDMzdDMUI3MDVGRTI2MjI0Q0JBM0I4QjgzRDBCCis6MTA2OTQwMDA4MkMwQjlBNDY3Qjc2RDFDMDJFNzEwOUZENTRDNjgwN0Q5Cis6MTA2OTUwMDAxQUU3MEYwNzgyNzg1RUE0MTlGMjI1MDE4RjIwQUYwNDkxCis6MTA2OTYwMDBGRUZBRjI4Rjc4RkU1RUQ3RjY5NzcxREU2MjNFOTQ1MEEzCis6MTA2OTcwMDAyQzAwRjdGNDFDMzZBRjI1M0I3NjRGMDFFMjFGQkUyQ0VFCis6MTA2OTgwMDA0MTgyQjg5RDk4RDdCNUU0RkU0QjlDMkYwNjRCODcyRkNDCis6MTA2OTkwMDBFNDMwRkUwOEEzMUY1RkNEQkUzRUZERjgwNkUwODlFQUE1Cis6MTA2OUEwMDBDNzAzRDBFRUJBRjUyM0Q3OEI0MjRGOEFFRkREOUMyRTdBCis6MTA2OUIwMDA2NjY2MEZBODFGQkJCM0MzRTg0NzE1RjI5RTMxRUZDODQ4Cis6MTA2OUMwMDBFNERBMUUwNjVGMzM3OEJGMzdCQUI1NEFFMEU3QTIzNDhGCis6MTA2OUQwMDBFRDRGRDBDRkM0MDlCRTgzMTAwNzJEQURGMTFFMDQ3RTRDCis6MTA2OUUwMDAyRjk2Rjg3OUVCMjk0QzBFMjRGNjkwRkQxMDgzOEIzRkZGCis6MTA2OUYwMDBEMUUzODYzQ0U1QUE2Qzk2NkY3MUMzNjkzN0VFQjNDN0U1Cis6MTA2QTAwMDA3OTg4MDRFREM1M0QwNjZEMDlFQ0JDQjM3MUZDNDk5QzY5Cis6MTA2QTEwMDAyRjRDNEYwNjMwMUYyRUE5MzM3QzVFNkE0MTJBQjNENzE0Cis6MTA2QTIwMDBBOEJDM0MwQjcwMkQxOTRERTU2OTRBN0Y3OTFBMDY3Rjg5Cis6MTA2QTMwMDAxN0EwN0VDRTJFRkYwMUE4MzUzNjNFM0QxQUNDQUFBQjVDCis6MTA2QTQwMDBFMEVGQUYwQzdGRUU0QkYwMTRGOENBQkQyMkVCRTI3ODFBCis6MTA2QTUwMDAwMjVGNTdGOEZDNkZDRDcwRkYwM0M2MzlDQ0Y5N0IyMDdECis6MTA2QTYwMDAzQ0M2RTY1MEZDOEQwN0ZBNjY3ODE0NzlDMDNCMEQ3NjdCCis6MTA2QTcwMDA2QTQ1MEVDM0NCRTQxQzdENUMyODA0REZCMTM5RTNGQjFGCis6MTA2QTgwMDBFMzVCQzhGMUJENDdGNkM4ODBCNzkyQUFCNjM1ODAwNzY4Cis6MTA2QTkwMDA4QUQ3QTQxQ0RBQ0YwRDY1RkFGQzRGMjM1RTg1M0MzNEZGCis6MTA2QUEwMDBFMkQ3ODg1NzkxMDc0OEYxMzEzQTI3OENGRTEyRkQxODNBCis6MTA2QUIwMDBGNTU4ODg5Q0UwRkJDRTZBNUY3RTA3RDhDRjIyNEY1Q0ZBCis6MTA2QUMwMDBBQzQzRjBDRjI0MEU4RjFCMzVBREQyQzJFOEI0MTBDNjU0Cis6MTA2QUQwMDA5RDM4Q0I3N0QwMEM3NEJBQzg3QkQwMTI0QUE3OEIwOUVCCis6MTA2QUUwMDBEQkFGRTJGMzQ4RUVGMUUyN0E4NjlERDBDQUUxNzlDM0VBCis6MTA2QUYwMDA2OTNGREVFMzMxQjQ5OUFFODcwNEQ3MzNCMkZCMzhFNkExCis6MTA2QjAwMDA2M0MyQkUyQ0M0OUJGNjFFMzk4MEYzMUVEMUREQzU5RTI4Cis6MTA2QjEwMDAzQzhGQzhBODZGODNGOUI3QUM5RjE3QjhGQzZBM0RDNzE0Cis6MTA2QjIwMDBGMkY4NUFDQjk5QkVCRDM3QzM1RDk5ODM3Q0VDQUU4MjM3Cis6MTA2QjMwMDBGOUFGQzg3MDU3NDNCOTIwOTVEMTRENkM4RUZCNjYyOENDCis6MTA2QjQwMDA4RjFDNDBERkRGOUFEM0I3NEYzRDFERUEyNTNENDBCQzg3Cis6MTA2QjUwMDBFMjFFMTQ4OEMzMjc0MTI0MTBCNkYwOUJCRDkyODVDMjYzCis6MTA2QjYwMDAzNUM5NEREMEVGMUM5REE4QUQ4MkJDQjdDMDQ0RTI4MkIwCis6MTA2QjcwMDA3QzgwQjgzQTdCMzlDMDJCNjE5MTZCM0ZDMEIzRjUxQzY4Cis6MTA2QjgwMDBCRkNGRTUzRTgyRTdCREZBRjJBQkI0NTRDQ0E3MDBGRTFFCis6MTA2QjkwMDAwREU1OTc3QTNFOEZGQTFDQzYwN0Q0REU5OTkzQzNFNkJCCis6MTA2QkEwMDBBNUMxQkM4NEJEMjNGODcyMjBGQjI1ODRBRjFCQTBGRENBCis6MTA2QkIwMDA3NUYwRjVGMjlDRUJFM0VCMTUzOThDQUZFRjg3NzZEN0U4Cis6MTA2QkMwMDBFMkVCMUZFNEY0RjFGNTQzRDBFRTVBN0NGRDI4RTdFQjRECis6MTA2QkQwMDAxN0FFQzFENzNCNzhCRkZGQzVFQjg3RTFFQjQ3QzNGMUU5Cis6MTA2QkUwMDBCNUNBRTk0RUYwQzU5RTIzNjNBMzIxNUY2MDFCRUYyRjVBCis6MTA2QkYwMDA0NDdFNkY4MEY2RDc5MkRGRkYwNDlGNkY4NjdFQUY2NTdECis6MTA2QzAwMDBBNzhBN0UwNUJFQUZDNTI3QjFCOTFFODQ4M0IwNDc0RkEyCis6MTA2QzEwMDBBNzMzQkMwQkJFQTdGQ0YyOUYwMDdGQ0EyRjNCMzlCRjM2Cis6MTA2QzIwMDBGQzkyRjE4QjhBRjU4Q0ZDRDVBN0VGQkE0REZDMUUxMUI2Cis6MTA2QzMwMDA3Qjc0NjhEQ0ZCQ0Q5QzdFRkFFRUU1OUMzMEZBNkUyNDFBCis6MTA2QzQwMDBFMUYwQUE2MTcyNjQwNEYxQ0FCMUQwNkZBRDFEQ0JGNjU4Cis6MTA2QzUwMDBCMzc2NzRGMzYzNEYwNUJDMDBCN0Y3NzI5OEJENTEzQzJGCis6MTA2QzYwMDA0MDNDRTE3NzlDNEY5MkJBMkI1MEJFNTA3ODFFQ0EwOTI3Cis6MTA2QzcwMDBEMTYzNDlDNDNFMTVGQzlDQ0Y3M0Q4QkFDNjRENzAxRjcyCis6MTA2QzgwMDAwNEI5NjQ3NzdCMzA5RkRCOTFDQkUwMjJFMDQ0REJCRjJCCis6MTA2QzkwMDAxMzRFRUVFRTAzN0NFNEY3RjcxQjhDNzgzOEM4RTdGQjY1Cis6MTA2Q0EwMDAzOUE3MUY2M0ZGNDJGRTQwRkYwNUQ4QkY2QTgyRkU0NTM5Cis6MTA2Q0IwMDBGQjNGMDdFNUQwNDdCMDhFRDIwNzlBNjU1ODU3MTI3MTRGCis6MTA2Q0MwMDA0NzgzRkMxMTcyOTI4Q0EwRUQ4QkZCQjdGRjM0RDhGRThBCis6MTA2Q0QwMDA1MzU4NDc2OTMzNkQ5RjFGNkMzRjkyRjgzMTVGMjc2MUFFCis6MTA2Q0UwMDAxMTk1NTMwNEVDNzcxN0RBQjNFQjU1Q0ZCOTFDOUMyN0Y5Cis6MTA2Q0YwMDA2MUYyQUFEQzg0RjIyMDJCREQ4RDdDMTc0RUZGNDNGRDcwCis6MTA2RDAwMDBFQkQxRkZCMDFFRDBGRjgzOTExMzU3MzgzRDgxRkU4NzMyCis6MTA2RDEwMDA3MTNFQ0VCQTg2RkVDRjY1RUI4RUNCQkRCQTlDODhDRkQ2Cis6MTA2RDIwMDA2NUZEM0E3MjA3RDZGRkI5NjFFNEM0MUVENThERkMxNDI3Cis6MTA2RDMwMDA4NjhGMTI3MjFEMTA2NzcxMjc0MjNCQ0E0NzQ5NTAxNjUxCis6MTA2RDQwMDA3QTg3QjYxQjAyRUZEN0FCMEM4RUVCNkI0REQ5Njg1RjIxCis6MTA2RDUwMDA5MzI4NTczODdGMjYyRDM3NjZCMEY5NDU2OTdDOUVENzMyCis6MTA2RDYwMDA5NUZGRkFEQzhGN0EyQzAwNkY5MUE3MjJDNjM1RTZCRDFECis6MTA2RDcwMDAwQTNDMkVFRjk0QzY0MTVDQUVGQ0UwNjU4QzkzRjRFRUM5Cis6MTA2RDgwMDBGRjFCQzY0OTk0OENCOUUzNjBGQ0FFRDc1OEJDNDRFNDAxCis6MTA2RDkwMDA5NTg4RjE1NzcwM0ZCMjVBQ0U2Rjg3MzhFREY5MUQxNkJFCis6MTA2REEwMDA4QzdGQ0E0NERENTg0NkU3RDM3NEM0NEM3QzI4MDdEOThECis6MTA2REIwMDBGOTY1QjE0RjZCREVEMURBMEQ3MTc5MzMwOUI5NjcwNzI3Cis6MTA2REMwMDBGNTlEMUEwNzc0NjkzRUMyRUVCQjIxNDlFQzdCMzNCMUQ1Cis6MTA2REQwMDBBRTYyRjczMEVBRjc2OUUzRERGQTdEREFDNDFBRkQzRTA4Cis6MTA2REUwMDBBRDg4MjMyRTI1NkM5RTBFOEY3RURGNzZFODJDRkRCRUFGCis6MTA2REYwMDBFRDMwNERCRjZGOUJCQzY4QUM2MTFGNTdCRjZGM0JCQTk2Cis6MTA2RTAwMDBBNUMyQjA4RkFCREZCNzRENUIzN0MzQjA4RkFCREZCNzc5Cis6MTA2RTEwMDBGRDhDMzQzRjVENDZENzlEMkJFRUZCRjFCQUJCRTE1Q0E4Cis6MTA2RTIwMDBGNDdDM0VERkFDNERGQTdEREQyRjc2RDZFMDdEMjFGMzlDCis6MTA2RTMwMDA3OTdDM0JDN0E3REZFNzVEMkEyRjQzM0EyNjZERUM5Q0EwCis6MTA2RTQwMDA3MzMzRkQwN0UwQTY5MEMwRTE2NEM4M0ZGMDQ5MkUzRkQwCis6MTA2RTUwMDBGRERDQjA0OTdGMEU3QTcxQzcxNjZDQjdEOEE3N0ZCRjJCCis6MTA2RTYwMDA3NDg3QkVGQzQwMkVCRjA3ODZDN0JERkJEMzQxMENDQjQ5Cis6MTA2RTcwMDA2M0Q4Q0NFMkZEQjIzN0NCNDAwNzdBN0NGQzZGRTk0MkE1Cis6MTA2RTgwMDBFNTc0MTFFMUQ0RDM0NUE0QUFBNzhCODYzN0Y3OTZDMDQxCis6MTA2RTkwMDBCQThERjA4RENFRDZEMzhCMTFCRTM2OTc5RTVFMDQ1QzM0Cis6MTA2RUEwMDBBOTlFRTRGOTM4NkU1Q0VGQzIwRTg5M0MyM0Y1ODdFQkFFCis6MTA2RUIwMDBBMkNFMERBRDcwMEVERDA4NTc0MjdDQjhFRjZDODRBRkVBCis6MTA2RUMwMDBDRjAwREY3M0FBRjYzQ0YwREY4NThFMDdGMEJFMUZBMjZECis6MTA2RUQwMDA2OUUzQTBERDU1RjI2M0ZFODNENTFGNzQ3RTRDM0JENDdECis6MTA2RUUwMDAwRkZBQzlGQUZDOTg1RUM4RTMxQTQzMDY5MUM3NzVGMDE5Cis6MTA2RUYwMDA3RjIwQUYyMzgyQ0VEMDBDRjFDNjA5MkU2QkY4QkMyREJCCis6MTA2RjAwMDBFREY1NUNENDMzNkU4MkYxOUUzRjEwRDcxQTVBNkI4RDJCCis6MTA2RjEwMDBBRDI0RUYxQTcxODEwM0I5Njg0NzY5Nzg5RjQ2NjkzN0Q0Cis6MTA2RjIwMDBDQjczMjM0QUI3MURFMkJGRTFFRTZGMzQ5QzZCM0EwQTg0Cis6MTA2RjMwMDBFREZGRDlGQkYxODRERDQ4RURGNDNGRTYzMkJERkIyRUQ5Cis6MTA2RjQwMDAzQ0ZCRUM3NDZFQjcwOTdCN0JBMDdFRkFGMjVDMDY3OEEyCis6MTA2RjUwMDA0QTA3NjRDQ0IzMEE0ODUxQUU3MEY3MEQ5RENFOTVDMjc2Cis6MTA2RjYwMDBFQTBEQUEyNzRFRTczQTQyRTI1QkRGQkI3MDE4RjQwNzRFCis6MTA2RjcwMDA4NUY3MTdGMERFNjZBM0ZBNUIxQTk0RkVFRTA1Mzg2RDBFCis6MTA2RjgwMDA4QzhFNDVCQTBFQkMyOUZCQjI2ODgzRjM1NjM1MEVDRTAzCis6MTA2RjkwMDA5RjFCRUYyNzExNzk0RkNENzBGRjA4RDUyNzY1RTdCMzA5Cis6MTA2RkEwMDBFM0FFOTY2NzUwNjZCODlGQzY3ODhGNDdFQjU4OUU2N0VBCis6MTA2RkIwMDA5MkM3RDZGOTZCN0U4RkEwMzM0RkQyOUQ5NzExRjFBODVGCis6MTA2RkMwMDBBNjc1MkNGRTBBRjcwRTc2ODZGNEUzQ0M2Mzg3NTY2RTIwCis6MTA2RkQwMDA1NkNCOUQ3OTBFODg3N0IxNzg2MTZCOEE4NDc2NDJBQjA3Cis6MTA2RkUwMDAyNEExRERCMDM5QkRDMjk5NDdGQjNGOTQ1QjNFMTRFQTUyCis6MTA2RkYwMDBEOUY5Qjg0RTg4NDU4RkM3RjMzRTM4MUZENTcwNUVFQzdGCis6MTA3MDAwMDAxOEFGN0YyQ0I3MDI5RkNFM0NFMTZGRDk3MzAxRkYxM0ZECis6MTA3MDEwMDA1NTM3RjY2QjkxQzNFRkFCOEZDQzYzRjY0RjM1RjBCNEI5Cis6MTA3MDIwMDAyM0M4NEZENzczNEY4MzI1QTlGRjNEMERDNkZCQ0ZEQzg3Cis6MTA3MDMwMDBEOUY2MkU1MDA3QzY3RENGMTdBRjc1NEZDM0JFRjBGN0Y4Cis6MTA3MDQwMDAzNDAwRENBMzEzODJGQzUwOTJBN0JGRTdBQzIzQUEwNzRECis6MTA3MDUwMDBGNzQxMDM2RkNCQUVBREE0RkZCQTZGRTY3ODVDQ0ZDRjNDCis6MTA3MDYwMDA4NTM4NzhGRUY3MjhCRTlGRDJCRjNFODNEMzk2MDFFMkQzCis6MTA3MDcwMDBCRDEzRDVGMjZBODBGMzA3RTk5RTlCMDEwRkUyOUU5RDQ2Cis6MTA3MDgwMDAwRThCQjYwNkZDOEZDMDRCMDRFNzkxRUQyMzA3QTA1Qzg2Cis6MTA3MDkwMDBFMDU1MzE4RkJDMzVDNTFCOERGNzAxMTQ5OUQwOUY1NzMyCis6MTA3MEEwMDAzN0I1MUQ4QzRDQzI3M0I2MDk5MjFBOTQyNzY2ODU3ODQxCis6MTA3MEIwMDA2RDk0Q0UxNkMyNjU1RDYwREZGNUNDM0Q2MEEzREYxRDJCCis6MTA3MEMwMDA5QjZGOTNFMEZFOTYzNkQyNTYxOTBCNzZENzY2MTIzNjMyCis6MTA3MEQwMDAzRTU4Q0ZFOTY5NkFGOTAxOENCMzNCMDJFQ0JDNUZGRjEzCis6MTA3MEUwMDA3QTI2RTEyNzZBQjA4RUQyODAzNjRFNEEwRENBMjUxNDIwCis6MTA3MEYwMDBCOUUwM0Y3NTk5N0NFMUUyQjU1OUU5OTUwQkExNUQ4MTU1Cis6MTA3MTAwMDA4Rjg0OERGRjU1RjM3QjY2RUE1NENGMzJBQ0I3Q0Y4RkI3Cis6MTA3MTEwMDA3RTUxODM5MEVGRjM0RDA0RUUzN0JDOURDQkYzREIzNzBDCis6MTA3MTIwMDBCM0JDNUM3MkY5Q0ExNUI5MjQ3ODdFOEFGNjRGNDAzRTJBCis6MTA3MTMwMDAzNUNDQjRFMUJEQjEwRDlEMjk3OEZGMTZGMTQ4NzhDRjZCCis6MTA3MTQwMDA0QjUzRTczMTBGOTQxQjhBOEJFRDEwNkY3NkJGNEYyNEEyCis6MTA3MTUwMDBCODk3MERDRkVDQTExQzU0QzhBNzQyREZBMkZEOTA4NEM0Cis6MTA3MTYwMDBGQkZEMzMzODVEOEJGQjk0QTgxRTU5MUY0REUxREVCMDRCCis6MTA3MTcwMDA3OUQ1MDFDOEVCN0VGNzc5REEwN0ZENzQ0MkQ2NEVGQzZCCis6MTA3MTgwMDA5MEY2RkI1REFBQzQ1QUM2QzI1MzIxNzUxODhGNzY2MjY5Cis6MTA3MTkwMDAzRjMzNzkzRkRFQkZEMTcxQURDMTcxQkZEQkY5MjZBRUEwCis6MTA3MUEwMDBFNzg0OTk3OEFEOTQ3RUNEMTU2QzY4RjMwRkUyMzBERkZCCis6MTA3MUIwMDA1OEU0QUZEQzYxNkRBQjA2M0REQjZCMDkxNEMyRjlBOTg1Cis6MTA3MUMwMDBERUQ3REUxQjA5RkJENDFGRkU5RjBCMzZCMDhGRkZBQzUyCis6MTA3MUQwMDAwNDZDRjBGRUY0QzM3RkI0QzFGREM4MUYzRTJDRTNCRUI3Cis6MTA3MUUwMDBERTFDQUU3NzA0QkM5RkU3NzQ3RTMxQ0ZGMzBDRDBFNzkyCis6MTA3MUYwMDBCRDJCQkYyRDA5Q0RBMzI3MkQwRUU0OUZDNTNFMTk1M0VFCis6MTA3MjAwMDAxRTA0REYyREREMTEwRDE2NTE1RkI5QjEzRDUxNTcxNjJBCis6MTA3MjEwMDA3QUE0MTFFRTZCMEQ0MzQ3MjczOEJGMkNERUI1QzUwMkFCCis6MTA3MjIwMDBGNzBCNUNDQ0QzNzZDMUY4QTcxNTQ2M0ZBN0Y3RDk3Q0ZFCis6MTA3MjMwMDA3MDdGQTI5OENGREM1RDQ1MTZCMDRGRkVEQzE5NDFGQzkzCis6MTA3MjQwMDBBMDBGOTU2RTMzM0I0RkU2QUU5NTI4M0Q2ODFDRUZDNjA4Cis6MTA3MjUwMDA3OTFFN0UzRDFBRkI1QkYwMTQ5MzRGRjU3NEFDMTYwQTUxCis6MTA3MjYwMDA1N0FENzMzMUNBMjFFMzNBMTY3Q0E4NEU4NjczMUMwQkM2Cis6MTA3MjcwMDAxRTk1MDhFQ0FGNDBGRDg3MjlERUI0OTYxRjYzOUVBOERCCis6MTA3MjgwMDA3MTlERjU1RUUzN0Q3NjZFOTQ4RjBEMUNCRkYzRDZFOTlDCis6MTA3MjkwMDBCRjM3NzQzRThFRkRDQzI3RUE3QUIwQTcxN0I0MTlCRjZBCis6MTA3MkEwMDA0RkY5MENFQzlGMDY4MzNDN0IyNzhGREI1QjI1QTQxNEY2Cis6MTA3MkIwMDBFRTlEMzk2MDREOEJCQkRBQkRBRjY3NTdEQTkxMzgzRjMxCis6MTA3MkMwMDA1RjY5QzVFN0U5OTUwNDlGQ0ZFNEE5MDhGNzY1OURDNzA1Cis6MTA3MkQwMDAxRTA0RkE1OURFQjFEQjAyRkQxQ0Y0OEQ0RjgyRTNBM0RDCis6MTA3MkUwMDA1MzNCQTcyODYwNzc0REU1RkJBQ0IzRjlCOTRFNzRBQUMwCis6MTA3MkYwMDBEOTc5Q0UxRUMwNTM1NThDRTEzQzI3NUY3NzFEQzcwMzVCCis6MTA3MzAwMDBCMTI2MjI5REQ1QzE3QTBCRTFCREYyNzVFODdBQ0UxRjc4Cis6MTA3MzEwMDA0OThCQzE3RDNBQjFBRTUyQkEyRTc5RjBFQjEyRUIxMTI2Cis6MTA3MzIwMDBFQjEzREYxQjY1NzYzRkIwQjE5REEwRjM2NzM4RERDRDcxCis6MTA3MzMwMDBERjc2NUJFQjcwMEE4QTM1QUY3RDM2QUE4N0Y5QTk2OERDCis6MTA3MzQwMDBERjU3NzJCQzU1NUExRjQ3RkJCRTkyRThFRkE1QTI3RkRDCis6MTA3MzUwMDBDNzgxN0YwNUJEMzUxMDk3MDJDQzZCQTQyQjgxNjcxMkM2Cis6MTA3MzYwMDA2M0Y2RjJGQkY5RDFGRUVGQTNBN0NFN0Y0M0I4MDg3QzBBCis6MTA3MzcwMDA1MzdFNzFGMkZEMzQyN0VDQTc1MUJBRDJEOURCOTQ4RTNCCis6MTA3MzgwMDA3NEU1MDU2REZBRjI5N0U2OUU1MUMwRUYwRDg2RkJBMUZDCis6MTA3MzkwMDBCRTM0RTQ1Rjg4RTdBNUJDNTQwNjA3RDUzRDE5Q0UwNzg3Cis6MTA3M0EwMDAyQzIwOUU1NkI2RUZDQUNFMUY5RDU2REEwRUZGMTBGODVGCis6MTA3M0IwMDA3MDFCRTM4MzNGNzNGQ0I3RTQ3QjQ2RTc4M0ZFNTJEQzNDCis6MTA3M0MwMDA4NTIwRUYyQjU2MEY5MzkzNjhCREZBRjU5MjFERjg2QjRECis6MTA3M0QwMDBERURBQTJDOUMwOTc2Mzg5MUJGQjlCOUQxOERFN0VBQkRBCis6MTA3M0UwMDBDODY3N0E2NDZFQjM5OTU4QThERDNGOTc4RTAxNzI2RUI0Cis6MTA3M0YwMDBFRTNFMTlGOTFFRjJBNkE2MEQ4MTdCMjYxODNFMUExRjM1Cis6MTA3NDAwMDBERDZEMTk0NjlGOEI5QTFCOThGREUwNjM3QzIzRUVBQkU0Cis6MTA3NDEwMDAxNUY0MjdFNEZGOTJGNUZCRjFERTBERUFCN0U4RjhBQkNGCis6MTA3NDIwMDAwOUYyQkQwQjgxOEYwREVGOUI2RjQ2M0MzNDExRjZGQkNCCis6MTA3NDMwMDAwNTAyN0UzN0U1NzNCQkMxNDU1QzQwOUZEQTgzMzYyQjdFCis6MTA3NDQwMDA5QzE3QjlENkJBNDlGRkI4MDNDNjI1Q0UxRkM5NDBCQkExCis6MTA3NDUwMDBGM0JDQUEwRTg1N0ExQTFEQjMxQkVDNDg0NTJCODVGN0ExCis6MTA3NDYwMDAxNDVFQThBNzAyQUJBMkYxMUVDRjkzOTc2NEEyNDI3RTNFCis6MTA3NDcwMDA5QjVEMkIwNTNCQUFFN0ZEOTE3OENFNUREMEFCNTg2RkE1Cis6MTA3NDgwMDA5Mzc1M0REMjZCMTNEMUZCQTNGNUQ0RjE4MUZEQ0ZGQUY3Cis6MTA3NDkwMDBFRDg5OThENzQ0RkIyRkVDMDA3QjYzQkIxOUVEMDkyRkQ2Cis6MTA3NEEwMDA1OUUxODRGM0Y2OUU0N0NDMjgyN0U3NzZDNEEzM0YzQ0Y2Cis6MTA3NEIwMDA3NzJEREIyNzk4QkIyQjFFQ0YwNzUyN0YxNEVGMTExNkI5Cis6MTA3NEMwMDBGODM4QjlCNkQyMzIwQ0YxOTU4MkY3RjM5MDBFM0Q5REEzCis6MTA3NEQwMDAwQjNDRjVGNzI3MEQ3ODVBQjdGRkIwNTNFREVGNUY4NkY5Cis6MTA3NEUwMDBFMEU5RDQwMDc4M0ExNThBQTcxNUY5NUM4RTcwM0M5MUQyCis6MTA3NEYwMDA4N0I5RkNCOUVGNTAwNkRDNUY3NUJFMzkxMkNGODMxODJGCis6MTA3NTAwMDBFOTUwRTgyOTMyRkYwNkNDQkYxMjcxQUE5QUUxMEMyRjhDCis6MTA3NTEwMDA0NDcxNjE5RUUyODVGNUUzMTE2RjQ2N0NENUZDNjMxRUU0Cis6MTA3NTIwMDBFMjg1QkM2RkMzRkI4QjY3QTdCMTdCNUJFRTk1MThCRjkxCis6MTA3NTMwMDBDQzVFMzNBNTA2RjRGOUUzRjlDQ0FFRjkzRDk1NUJFRUVDCis6MTA3NTQwMDAyQzZBOEY1M0I5RTVBNjcyRUI4RjU0OUU0MUY5REQ5NUY1Cis6MTA3NTUwMDA0RTJDQkZCNzUyQzVFNzlGNTY2NkUzRjMxNERGNTcxNUFECis6MTA3NTYwMDA3QzQ0MDlDMTAyNzZFMzg2N0MyNkM3MzZFNDhCQjhFMTA5Cis6MTA3NTcwMDAwMzRFMzAyRDZBRkVGMUM3RjFGMDNCMEEwRUVGOTQzQjRCCis6MTA3NTgwMDBBQTQ3MTI3MkFCNUJBRjBGNjdDREQ0RUJCQjFFQjM3REM2Cis6MTA3NTkwMDBCMjEzRkNEQjQ3RDkzRDRDNzMzRDM3RUFFQTEzNDVCNURFCis6MTA3NUEwMDBDMDc5Njg5MjNEMkVGODFFRjk0REI1QzA3REU5NzdENUJBCis6MTA3NUIwMDAyNkVBRUFERkIxMkU1OTU3RkVDRjdDMTVENzdENUI0RDA5Cis6MTA3NUMwMDA5QUVFRkRERDc1NzlCQTcyM0REQzlCMDg3NEFFNEU0MEQzCis6MTA3NUQwMDBCRTc5ODBFNzU1NTIwNzlERTE4NTlGMjNGQ0JBQjk3NEI3Cis6MTA3NUUwMDBFOEY3RTk3Q0JGM0U2QUM2RUY0NjdDMDhCQ0NFREYyNEU0Cis6MTA3NUYwMDAxMzhERjYzNzZGMTM5NTVGNzQ4QUE3REEyODlFNjhCQkUwCis6MTA3NjAwMDAyRjRFRDhEMDBGNjlERDM1RUU5RDA5QjQ3QzcyOTcxOUU1Cis6MTA3NjEwMDBFMzA3MjdENzI2RkUwNEVDQTc5M0JCMUNCMTg0M0VCNTM1Cis6MTA3NjIwMDA1Njk5REIxOTc2QkM0RjQ5RjQ1QkI5NzYxNTlFODdBOTRDCis6MTA3NjMwMDBGNzQ1QjhEMDlFRThGMkZFQkIyOEFCRTBCN0MyMjQ4MTg0Cis6MTA3NjQwMDA2RjhFQ0IzRUJGODRGODYzRjE4MzlEMTE2ODBGOUZBNkI4Cis6MTA3NjUwMDA3NjFENUMzRDdCNUEyMjZCRTEwOTA3RTZFM0U4Rjc2Rjk0Cis6MTA3NjYwMDBCQTFEM0VFMEVCOUE3RkM4NkUyN0QwRDNDRTQ4NzY3RjE2Cis6MTA3NjcwMDAwODM4QzNGNEZCRTdDNzMyQjYzRTg2RjRBNUI2RkI5MUUzCis6MTA3NjgwMDA3RjIzRDA1Rjk4RDdDM0Q2NDdBNEIxQzk4MEZGRDNGMTc5Cis6MTA3NjkwMDBDNDFENEYyN0QxQjhFMkJEOEYxNDhBQTdDNTk5REQ4NUQ3Cis6MTA3NkEwMDA3RURBQUUyRUM1RUZCODkzQjYzQkJCQ0RDQ0VFOTdBMzNBCis6MTA3NkIwMDBGRERBNjlCOUYxOTcxMTVCOTgzQzcxMEZCREFEMjAxNEVCCis6MTA3NkMwMDA5RUJFNDI1ODc3RDY3MENGODdGOUIwN0ZCMEQwNTc4ODJBCis6MTA3NkQwMDA3MkVENjEwN0YyOTUxMUVFQTcyQzFBQzJENzBCN0MyMDMwCis6MTA3NkUwMDAwNUU1NjQ5MENGRDg3RTEwMTU2RUMzNDBERUNDMzNCQjY5Cis6MTA3NkYwMDA4NjgwQkUzQUI1REU4Qzc2MjlENTI3QjFCNzYxMUM2Njg3Cis6MTA3NzAwMDAwRkQyRjEyOTQ1OUQwQ0VCM0VCNTJFODU4MERDMTJFM0FFCis6MTA3NzEwMDBDRTVEMkZGMzdCNDIyODVENDJGRDBEQjI0NjZEMDcyMjAwCis6MTA3NzIwMDBGNDk2Nzc5REE0OTFBMUZERTlFNkZFRkI0QTMxMkZEQzlBCis6MTA3NzMwMDA2OEZGOEFFNzk3OTQ1N0I1MTAzQjYyQzk2QkVDN0U3RTcxCis6MTA3NzQwMDA1MkRDQTNDQzJDMDg1RDA3RkI3RDA1QTI0REQwRTU2Qjc4Cis6MTA3NzUwMDAyRTRCRkRFRDQ3MzEyNkI0NkJFMjIwOUU3RUU2Qjg4Q0MxCis6MTA3NzYwMDA3NDc2MjZCNUFEQzQ0OTQ5RkZBQ0U5NDBDOUY3NjlGOTVCCis6MTA3NzcwMDA4QjY5REU0RjE1NUFCRTZGQjQxNjU1NDA5N0I0RDRCNDFBCis6MTA3NzgwMDA3RTE0Rjg0RkJEOUQ5RkZDMDRFRURERkJGQzQ1MzMxQ0QxCis6MTA3NzkwMDA4NzI3NEI3NjJFMUU4RDcxMUY2RTdGRjc5NzVCRTJGRTVCCis6MTA3N0EwMDAzRkY3MzBCODNGNjVBOURBOEU3QTVDODU0MzcyQjg3RUMwCis6MTA3N0IwMDAxRkNFNTNFODc1RkI5MzEyRDg1OEU0OTNGMUI2QzdDMEI3Cis6MTA3N0MwMDA5RjlFNjczODlGRjI4OTk5RDkwOTIzMEE5ODlDMTJGQURCCis6MTA3N0QwMDBGRTFFNUU5RTY3NjI3NDRENUU5NzMwMEY5Q0YwN0JFNUU3Cis6MTA3N0UwMDA4NTNFMTBGMjVBQzhGREZDMDI2NjVGMDg3OTBEOTk3NjU1Cis6MTA3N0YwMDAyMEI3MTZDMkVEMkQ3NDlEQ0I3NjQ0Rjg3QzI5RDhENkRGCis6MTA3ODAwMDAwRTcwNUNDQ0QwNDQxNjE3QThEODZFODlFNUM1QTc4MTQ4Cis6MTA3ODEwMDA5NzFBNDgzN0NFRkY3M0IzNkY2MTc3MEFCNERGQjIzNjc5Cis6MTA3ODIwMDAwMURCOUI1RDE4QTdFNUZBMDVBRUI1MDZCOUQ0QzBGOTMyCis6MTA3ODMwMDBBRkIxNERGMkY5OTE3Rjk4OUU1Q0MwRkIyN0EwNjc0MkUzCis6MTA3ODQwMDBFNDU4M0ZGRDYyRDAyQjBCQjg1RTVENDAwQzcxREUzNjE0Cis6MTA3ODUwMDBCREJFRjM0NERCNzA1RDRCRThCOEEwM0Y4M0YzQTJGNkY2Cis6MTA3ODYwMDAzMzg1REQ0MkNENzc3ODNBQ0U1QjcyRjlDMkNDQTM4MTA1Cis6MTA3ODcwMDAwNEZDOTA3RkQ3Qjg4QkM1QkQ4REYzMzJBRTYzQjBGM0Y3Cis6MTA3ODgwMDA1Q0U4QkFBRDJBQkUzODY0NUNDM0JDMDVCQzMxNTAxQzkwCis6MTA3ODkwMDA4MjA3MDFGNzg1NUUwNkNGODU5RDEyRTJFQjJGREM1RTQ1Cis6MTA3OEEwMDBBMzdGMTg5RjM2RTJCRjgxNzhBNjQzOUU0MkMzOTM1NEJDCis6MTA3OEIwMDA3RUE2MDRFOTQxRDBDMUUyREQzRTBCRDhDQjVGOTBCNjk1Cis6MTA3OEMwMDBEODE4Q0EwN0NCMzZFREJFNjNBMjBBRkVGMzMxRjQ0M0UzCis6MTA3OEQwMDBFQTEyRkMxOUE2Nzg0MjEyQkQyRjNENUQ3M0QzQjVFM0MxCis6MTA3OEUwMDBGQ0ZGMkEzOEMxMkFFMDdFNUE2QzQ3RTFCMjYwOUJFQzZCCis6MTA3OEYwMDA4RTJDRDRENUUzNzlEQTVFODRENzIyQUZENzAyNzFEMDRCCis6MTA3OTAwMDA0NTNDQUU3OEFENzkzNjI5RUMzQ0VGQjVFN0NCRTBGOEY1Cis6MTA3OTEwMDBBRjlFRjdEMzA1N0EzQjM2NjgxRjY1ODRGNUI3RkFFQzVFCis6MTA3OTIwMDBBMjZCRThFMzBGQ0NGRTkxQTA4RjAzMjMxNUQ0NDc1RjMxCis6MTA3OTMwMDAyQkFFRjdDQTkzNDAzRjY3QTBERjMwOTBCQzVEQzhGNTFGCis6MTA3OTQwMDBGMjAyRDBEM0Y0RjlFOUE2QkQ3ODZFRUMyRjRGRUVDNTY0Cis6MTA3OTUwMDA3RDQzQ0I4QjBCNjJDMTVFRkU3NEQzQkM5RjQwREVGQ0NCCis6MTA3OTYwMDBBN0JCRTZBMTVFNkU3ODQ2RTg2NUNEMTJBQUVGMkIzNzdECis6MTA3OTcwMDBENTNGRjc3RjgwNEU3NzQ0RTIwOTg1ODU1RDFBQjdDNzBBCis6MTA3OTgwMDBBOUZDMDNCOUI4ODlDOTNGRjIyNDkzOEYwREIxRUNERThECis6MTA3OTkwMDA2RkFBQkZCMkEwREU4MzBCQjUyQ0EwRjc5MEY3QThEN0QzCis6MTA3OUEwMDAxRTlDQTc5NTYyN0I2MkY3QjM3QjIxRUQ3RUQwNUY0MjgwCis6MTA3OUIwMDBCRjBBQkQ3Qjc0OThENjU1MDA3QTQxM0VGQUVFNDM3NEY3Cis6MTA3OUMwMDBGREU3RjZDODE4RDM2OTk0Qjc4QzgyREY0MzE4NDg4RTU4Cis6MTA3OUQwMDBGRkYzRjAzNkY1QzEzQjY1MTBGMDlFMEJGMDQ2N0I4ODU3Cis6MTA3OUUwMDBDMUZCRTM3NTBDQ0U5RkFDNjc3MDZGREQ5NTE2MEI3RTA3Cis6MTA3OUYwMDBGMEM3RUJEMkQwMEVGQTc4NTcwNkMyN0JGRTYzMTRERUQ2Cis6MTA3QTAwMDA2ODA3QUI3QTNCNjgxRDg1MzdEOEZGMDA2RjNBRUVEQzFDCis6MTA3QTEwMDAyRTk1QzNEQkM1RTBCRDhFRUJBMUY1RUMzOUJGMUY1QzM1Cis6MTA3QTIwMDBCRDk4NkZGQUUwRjMxMTJFRDBFRkE3MjNGRDBFRjA1M0FGCis6MTA3QTMwMDA0RUVGOTYwOUVDRTdGN0Q5NDlEQzlFMTE3MEZFODZCNDRCCis6MTA3QTQwMDBGRDNCRDg1NUZERUM5QjBEMTFDNDRFRkI1QkZDOTIwRDJDCis6MTA3QTUwMDBDRkQ1N0MyRTk1MEYwNTA0OUM2REZCNkQyQzhDMTcxQ0NGCis6MTA3QTYwMDBCRkNGQUVCOTU0MTA2QUQ3MEMxMjNGQ0I4OTA3RjNERUYzCis6MTA3QTcwMDA5Nzc3RkVGNjA0RDhGNTcwQkQwQUY4RkRDQkM1MzlGODQ2Cis6MTA3QTgwMDAwRUZEMzk3ODQ5MDU5OTA2MjEwQTk3RDUwQTc0MzBDMjQ2Cis6MTA3QTkwMDA3ODRGODA4NkJGMEY3MTMxRTNBQjM5MkI5MDlGMDM5OUVDCis6MTA3QUEwMDBBMUZCNDE0RDUxN0UzM0M0QTMwMkJCMjVDNDc3RTMwMzQwCis6MTA3QUIwMDBFNUIxRTUwNEY2QjM5QTcxMUU4RTQyQTY5RjI1QjcxQjY5Cis6MTA3QUMwMDBFMzhDMTE5NDZFQTJFODc4Q0U0MjE1RTcyQkE5NzYxNkM2Cis6MTA3QUQwMDA3N0RDNENDN0I1MDVFNzZCN0MzRjFEMDQxMUU4RjcxODUwCis6MTA3QUUwMDAxM0VBNzdFM0ZBMjdGMzcxMUE2NTEzRkEyMUNCMkNDQzRBCis6MTA3QUYwMDAxRjExNzkxMzE5RkM3QjQ2MjFGM0VCRjMwQUQ5M0U0MzlFCis6MTA3QjAwMDA2RjI0NDFGREQxQkIyMURBQjcwQUQ3NTc4NUYxNEY4NUU0Cis6MTA3QjEwMDAzMEZBNTYwNERDRUNDQTk3QkE3QkNBNzk3QzAxN0VCRjg2Cis6MTA3QjIwMDAwMDhDRUFGOTExM0NGRTRCNTUyREI0QkY4N0I3QkZBN0I3Cis6MTA3QjMwMDBFRDZERENDRkEzOUVDQzJGNDBGRkNFNkU4OTcwODEzREQyCis6MTA3QjQwMDBFQjg1RkJBRDI4RERGRDM4OEFFREJGOTBBNDM4MDVGODQ0Cis6MTA3QjUwMDBFQTZFMkU2N0VGNjk3QkRDMDNGQTY4NzY1QkI0MUI5RUU2Cis6MTA3QjYwMDA3NDFDMkZFMUYxRDY2MkQ4QkYxRDZFQzE3ODZCOURCNTM0Cis6MTA3QjcwMDBFNzQ1MzBBRkVGNzU3RUYyM0QyQjVEREEyQTEzQjM1RjM4Cis6MTA3QjgwMDA1NjI1MTBDQzNCMTk0M0NENzg4OERGRDI0RkZCQUUyNDZECis6MTA3QjkwMDA1RThEN0VGNEYxRTQ2NTEwRDc2NUY3QjU3OTUxOUVDODI2Cis6MTA3QkEwMDAyNjVENzkxOUZGNUQ4MUJBQzJDQzNCOUYxQzQxQzgxRjdECis6MTA3QkIwMDA4ODVBMDBGODVFMDZCMDAxN0FBODhGQzNGOEMwQUQxMEVECis6MTA3QkMwMDA1RjRFODBBNzgyNzQzNjQzMjE1RTEzN0JBRThCQzE3M0Y4Cis6MTA3QkQwMDBGRTJDREUzQzlEQUZGQkJCMTM4ODNGOEVBRUQ3RkZBNkNECis6MTA3QkUwMDAzRURFN0RBN0RGRTRDRkEyNzhCODU1RjFFRjA3QkEzNkM1Cis6MTA3QkYwMDA1OTU1MzNGODA3OUUxQTY5MkNGOENEQ0I1NjBGNkVCRTM3Cis6MTA3QzAwMDA0RDg1NDUzOERGNjUyNjEzOUJFNzQzMTJERUNCNzAwRkE5Cis6MTA3QzEwMDA2NTcyQTBDRjM5MEFFOTkyQzczMkZDMDFGRDM1MjVCMDYzCis6MTA3QzIwMDA3QjgwMDNGNzMxRkExNjcxNzY4MUE3MjJEQTdEMjg3Q0YyCis6MTA3QzMwMDBFRkUxRjNBM0ZEQUM4Qjg1RjY5NkYwRjFBNTFGMTYwQUQ0Cis6MTA3QzQwMDBCRjk4RDk5RDRCMzlCRjJFMTVGNEI2NEJDRkE3Q0YwMkE1Cis6MTA3QzUwMDBCRjAwMUY4MTlENEJFMTc2MEY3RjBFNDRFRjlCMzhCRDI3Cis6MTA3QzYwMDA2RkUyRjRERUNBQ0I4MzFEQUYzMTgyRjg0MzdGQUY0NUFDCis6MTA3QzcwMDA4QzdCMkI3RjNFNUQ5ODhBRkQ4OTc5MDg3QTI2M0MzRTc1Cis6MTA3QzgwMDA2NUEyOTIwM0U4RTg1NERCMUFCNDlCMTYxOUUyQzUyNEY2Cis6MTA3QzkwMDAzNDhFMjU4NzJCRjdDOTFGRDMxNTc4NUEwMkYzNjEzRTFFCis6MTA3Q0EwMDBEMjc3MjI1RDQwRDdGNzU4REEzM0Q4QkQxMkZBN0E2MjFDCis6MTA3Q0IwMDBGRkI3MEU2RUVFQzJGMzNBNDRGNzdCMEFENTcyMENFNkJDCis6MTA3Q0MwMDAxM0Q1NDlFQzVFOTlERTcyOUJENzQ0RURDNTBGRjhCRDI0Cis6MTA3Q0QwMDAwRUU3OUJEOUY5RDBCQTg3RjhFRkEwQzQzRDM4MURFQzY4Cis6MTA3Q0UwMDBDM0JBNTg4QjAyQ0YwRkY4RkQ3MkY3OTI2RTVCNEE0QTA3Cis6MTA3Q0YwMDBEMDNFNjkyRDk3RjlFRjZFQ0NCREQzOUQwRkY3NDQxMEEwCis6MTA3RDAwMDA1MURFRTgxRTgxNTEyNTVFNkU3ODBGRjYzQjY2NUVBNjU5Cis6MTA3RDEwMDA3NDgwRTU0NTc3QkFBOURDRTgzREM0QkY3QjY5MTlGMEZBCis6MTA3RDIwMDBGODg4QTBFNzQ2RUNBRkY3MjlGMUZEM0U1NjdFNTQ3QzdCCis6MTA3RDMwMDA3RjkwOTVGRjRERjRDRkNCMUIwQ0RGNTcxOUJFRkY5Q0Y2Cis6MTA3RDQwMDA5NURGMkM3Q0YwNEUyRkQ4QjU3QzFGQTdFRTA2MDlFNUY5Cis6MTA3RDUwMDA4QTk1RDM1QkRENkEzRkMyQjlDRTc0ODAzRDJCODgxRjA0Cis6MTA3RDYwMDBDRUQ3NUVBQkRFMzc4NTFFNkJBMTAzRUUzNzM4NjUwM0Q5Cis6MTA3RDcwMDBGREZEQURDQjhERTVGM0Y5REFGMTQyNUE3RkM5NkQ5Mjg1Cis6MTA3RDgwMDBENzAyRjJGMkI4MkY5M0NCRjdCMDc5Qjk1NjRFQkYxNzlFCis6MTA3RDkwMDBDNkQwRkVDNjA3RTE0REZCRjlGMDlGRTk2Nzc1RkY3RThGCis6MTA3REEwMDAzRTg1Nzk1RDZGM0ZEMzVENkM3RDIxRkRGNEZFMzNGRDMzCis6MTA3REIwMDBFQzc1RTlFNzIzRUNBM0E5NjNERDUxNjM0MDNFNTRERDk0Cis6MTA3REMwMDBBODhCRkIyREZEOTEyQjBFRUMyQkYyMEVGQjFEOTNBNTJBCis6MTA3REQwMDBBQkRCNDc4REEzRkQyRkZEQUY1NzQ2MkQwQ0YxQzc5N0E5Cis6MTA3REUwMDA1RjkyODkxQkVFNDdCODI0RTFGMzhCRkQ3RkIyQzBGOUE3Cis6MTA3REYwMDBGQ0U1RkJGNjVCMjZFN0MzRUYyRkVDQjc1NDg2Q0M2QkI0Cis6MTA3RTAwMDA5OUM4QjMyNDNEQ0E4QzEwRkQxRTM3QzZDNEU1MDZGQkQ1Cis6MTA3RTEwMDAxRDg3QTVGRjc1NDYwMTdDMkUzNUI1N0ZGQTBDQzQ4MTAwCis6MTA3RTIwMDA2RTkwQzJFRUQ3RkU5NUFGRUZBMzAxQ0U4MzM5QzYzMDc4Cis6MTA3RTMwMDBGOTU3NTZFQzRFODI3NTVFMDQxOTQ0RUI1N0FFMDlCRkY0Cis6MTA3RTQwMDBDRjNGNjcwQzhCMjdENkYxN0I5NUU3OTVEOEFDMkE4NTc5Cis6MTA3RTUwMDBGM0Y4RTM2QzdGN0FFMUU2OTRCMTEwRTc3NTE0NTQ4QzgzCis6MTA3RTYwMDAxQTAzRjMxRDMwNUUxQTYwRjFEMjRFMTYyRkFENEJFOEE3Cis6MTA3RTcwMDA3RTAwRUUzMUJERUI1NzRGNkQ4NDdCNERBNzZFMTQ3Q0I5Cis6MTA3RTgwMDA0MkYwRjc3MjZBMjIwNERGRURCQUIzQUEwQ0UzNUY1ODNFCis6MTA3RTkwMDAyRTFCRjNDMjQ2RTA5QjIzRkM1RUYxRDlBNTA1NTEyMEMxCis6MTA3RUEwMDAxRjdBNTJBMjRENzYyQTQ3NDZFNEQ3REYwNUYzOTg1RDQ0Cis6MTA3RUIwMDA3QUQzNjQ3ODVGMUU2MUNCQUM2NzcxNzdBNDhCMTFGOUJDCis6MTA3RUMwMDA5RTYyRjgwRUY1MjFERUExNTk1OEZDNEI3QjRCQzZGODlCCis6MTA3RUQwMDA5NzU2MThBRDg1REI3RjFFQ0JFMTcwRDcxODc2NEZGMTMyCis6MTA3RUUwMDAxMTEzOURFN0Q4RTAzQ0M0RjhENDYwNzlBMDlCRjY3N0U1Cis6MTA3RUYwMDA2QUY1QjAyMkI4OTdCRjI1QkY3QzE2RDIxMzFGQkYyNUU1Cis6MTA3RjAwMDA1RkFCODZCMjE4OUYyRUI3MTBERTBGNzYxRTE1OUMyRTIzCis6MTA3RjEwMDA2NjhENjE3OEYzOTQ1MTdBMEJGMTFCNjc1NDQ1RUJDQTc3Cis6MTA3RjIwMDAzMzZCMTM4OTNCMzQwRTNCMzM1OTU3OUU1NTk3QTZBQkExCis6MTA3RjMwMDA3RkY3RkMzQ0RERjc2OTExRERDNUNERDc2MTA3MzdEOTg3Cis6MTA3RjQwMDA2QzUxNjA4RjdERDhGOUNEN0ZERjAzRjZERDM2RDkyNTAyCis6MTA3RjUwMDBEMUY1MkM3RTZERkI3RkMzRUZBMzlDODcxRjVDNjBFNzkwCis6MTA3RjYwMDBBRjMwMUVGNkY5MTFGNjdCN0ZENEFFNTM0MkY3NzVDRUQzCis6MTA3RjcwMDA5MTZFQ0MyQjBDRDkyRjA4QkI5RjJBRjYwQjk2REFCQjNGCis6MTA3RjgwMDAzMEZGRUY3RkJCQUZEMzMyODZFRjE3OEMyNTYzNDExRkU1Cis6MTA3RjkwMDA5RTZGN0UxN0UzNzBDQjYzRDhCQUNFQkRDMkVGMjEwN0M4Cis6MTA3RkEwMDAzRDQyRTlGQzY2NjgwOEY3ODU1RDVBODVCRkVGNTNDOTE1Cis6MTA3RkIwMDA3RkJGNzVEODE4OTVGOTA1MjNFRTUzRTBEQzc3MTM3RDY0Cis6MTA3RkMwMDA4MkZDOUY0Q0U1NTQxQ0E1OTNFRUZEQTQ2MDFGRTQ1RDZDCis6MTA3RkQwMDBBNEQ4MzA5RkJDRjFEMkVEMThFNzNFMTJFNUNEQkY4RjlCCis6MTA3RkUwMDBENjVCQkE2RTBBOTY5NzVGOEFDNjdFN0YyRjc3NEZDNjlBCis6MTA3RkYwMDBCQ0U2OTdEOUVGMjE0RTRCOUVCRDFBRTYwRkY1RUZBN0QxCis6MTA4MDAwMDBFMzRERkJENUNEMzUwMEE3RTVGQkQ4RjlBOTY5RjIxRkYzCis6MTA4MDEwMDA4QUExOUY2NTZENTNCMEZEMzQ5OTFDOTFBOEJEMTA3NzVFCis6MTA4MDIwMDBFOTFFRUM3NzFBRTg3QTVBOTY0QjZDOEY4MUZFOTUyREYzCis6MTA4MDMwMDBGRUNDNjc0MUFFNTg2QzI4NTc5QTJFNDU2MkJCQTk5NTc1Cis6MTA4MDQwMDA0QzRGRkJDNjMwM0JDNkRDQzNFNjU1N0RFOTM2RkMyRTAzCis6MTA4MDUwMDBGMEZGQzI5ODU0REQzRDMyNjZDNzM2MDVDRTI3OTg3QkM3Cis6MTA4MDYwMDAyNEFDN0ZDQkE1M0M3QzhBNzVCRTk1RkQzQ0RFNTc2Mjc3Cis6MTA4MDcwMDA3NjdDM0QxOUYyM0FERjRBOTJFQzY4N0UxOEU0RUU4NTkwCis6MTA4MDgwMDBFNkQyMzgxMjQ2MkVGNThENzM4OUU1MDE0NzVDNjI3OTk4Cis6MTA4MDkwMDBDMTJGMTRCOTNCODFCRkE3M0ZEQ0EzQzBGRTBFODlCMTNECis6MTA4MEEwMDBEQTAxNUVEMzI3MTRBOTBCNDNGODQ5M0U3MDk3MDVGMDE3Cis6MTA4MEIwMDA2MjdFRjI5ODA1RjQ3RTA0N0Q1Njg2N0M2RjE0RjlFQjlGCis6MTA4MEMwMDAwNkI5N0M4MENCMDE3MTdFNDFFODE5QTI3NkU4N0U1RjFCCis6MTA4MEQwMDA0REYwQ0JBRjM4QkY4QUY2REQ0MEVCODBDNzk3MjJEMDlBCis6MTA4MEUwMDA5RjdBQTM0ODdCMTdFNkRCNURDRTdFMjc4MzI4RERBMzNFCis6MTA4MEYwMDA2MDVGRTU1RjM1N0Y4QTY3QUI4NEY2N0UwRkU2QzU0RjJDCis6MTA4MTAwMDA5RkEwOUE2MEJGRTBGREJFNzUzMEJFQkRENjNBN0VDQjYzCis6MTA4MTEwMDBFQkZGNUUyNjJERDBFRkVGMjc0REVBNzZEM0ZFRjZGRjdDCis6MTA4MTIwMDA3MERDMzg5MEZGNjJEQzJGQzZCMDczQzNDNDFFQjgwQzdECis6MTA4MTMwMDBGRTVERDNFQkQxMkFGMEY3MzQ3MDk2OEE4Mzc2MkQ3RERECis6MTA4MTQwMDA4RkY3RTUzNUJEMUVCMTU1QTJERjlCNjJBOTdGNEJDN0Y2Cis6MTA4MTUwMDBBRjdDMjNEMjBGNzRCQ0ZGOEQ0ODA1N0ZBN0E4NThGQkM2Cis6MTA4MTYwMDAwMkU0NjVFNTFCNTk1NUUwQ0ZCOTNCMjMxNDgyNzY4RUI2Cis6MTA4MTcwMDBGQjJDQ0FENTAxRTY3QjJEMzk2NUE0MzNDMTk3REEzQUM5Cis6MTA4MTgwMDBDNjJGRjU5QzRFRTc3MkZFRDMzODFGNUQ2ODFFOEE3Q0IxCis6MTA4MTkwMDA3OEUxNjEzQTY5RDgwRjdENTgyQUQ4MDc3NjgxNkFDMzk5Cis6MTA4MUEwMDBGQjg5MDU1RjRFMDMzRjg4QkVGRjdGNDZFNDhFMkMwMEFGCis6MTA4MUIwMDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzU3RDQwCis6MTA4MUMwMDAwQjc4NTRENUI1RjAzRTczQ0VCQzkyOTlDOUU0NDk0MkMwCis6MTA4MUQwMDAxRTlDNDAwODQxMDI0QzI2MjE4NDEwNjAxMjAyQTIwMjFCCis6MTA4MUUwMDAwRTUwMTUzMEM4ODAwODExMDkwOTUxNUJBQ0Y2Q0Y4NEQ4Cis6MTA4MUYwMDAyNDEwNDUyRDU2REIwNjhCNzRDMDQ3NTE2OTZGNDA2Q0M3Cis6MTA4MjAwMDBEMzE2NjE3ODY4NjNGNUQzNjhFRjZERjFENkRBRjhCODA0Cis6MTA4MjEwMDA4ODhBMzU4MkY1QTNCNzI4RkY1QTZCRUY5RDk5MzM0OUI5Cis6MTA4MjIwMDAxMEVEQkRGRjFGRTUzQjU5NjdFRkIzMUY2QkFEQkQ1RUEyCis6MTA4MjMwMDA3QkVEOUQ3OUUzMTI0MzJEMEE2M0VCQ0UyNTMyOTZDQzdDCis6MTA4MjQwMDBEODNDOTU3NTJCNDk4Q0Q1OURDQjY1QUM5OEIxRjVFNzlECis6MTA4MjUwMDA5MkU5N0RGRDM5M0IzRDU3OUUxQjQ3RUZBREU3NTRFNjY0Cis6MTA4MjYwMDAwMzc4RDUzOTg1RjkwMEJFNkFBNjMzNjg0QTYwRUM0MkM2Cis6MTA4MjcwMDA1MTIwRDM5MzBBRURCNDVDM0U4N0I5MTgwQjZDQ0EyODIxCis6MTA4MjgwMDAwOTM4MTg5QjdGNTdBRjY2NEI2MThDMzkyQ0VFQzdBMTFDCis6MTA4MjkwMDBCRkY5NjU0NUU5QUJFMUZEMDVGQzk5QzE1OENCOTEyNUQ2Cis6MTA4MkEwMDA0Qzc3NDJCQjI5N0U4QjBGREVBRjgyRTdDQ0E4RjI5QkQ2Cis6MTA4MkIwMDAxOEYzNzUwMkNDOTg3Qjc2NUEwOTdDREY5QTZCQkE4N0UzCis6MTA4MkMwMDA0NUNBNzU4Rjg5QjE0OTU4REU0Q0NGRjlCMkJFREVDNUJCCis6MTA4MkQwMDA1ODFBNjMzN0I4MTlGRkQ5MDg4M0NCNjBDQzI5RUFBRkE1Cis6MTA4MkUwMDA3NDg0NDc5QkEwM0Q3MzgzRERCMzA5QzY3NTI2NDU5RjAzCis6MTA4MkYwMDBDRDAwNkVCQzFCMDA0MDQxQTNEOTNGRDMwOUUzNkVEQzI3Cis6MTA4MzAwMDBBRTc4ODJGMEY5OERBNTRFMUI4Mzc5OTY5RTY4QjAwNEY1Cis6MTA4MzEwMDAwQTIzRkQyRjM5Mzc4MUU5ODA4NzQ1RTdGMkU4OTkzQTRBCis6MTA4MzIwMDAzRTMwMDFGMUIwRTJEQ0I1ODRBRjk1NTA4RTRGQTY5Nzk4Cis6MTA4MzMwMDA5OTcwM0NCN0Q5RjA3NzFDMTBDMEE1OENERDJBQzZGNzIwCis6MTA4MzQwMDA1OUMzRTQ2MURGODFGRTNGN0JEOTRDRTU5MzdDQzExQkJGCis6MTA4MzUwMDA3MDNDRTY5MEQ1QjMwQkM2NzNDQTFFNTAxOThDRTc1NDE3Cis6MTA4MzYwMDAzNjczM0YwODQzM0M2NTY2NDEzN0QwRUJDNjBFOTUwNTMyCis6MTA4MzcwMDBBMUZENTVGMDBDQzBGMzU0MjJGMzI1N0ExMTlGMzBDRkE0Cis6MTA4MzgwMDAwMkRFRjYwNUY4Rjc3NzZENUIwRTFCMDVGNDZERkNEMzg2Cis6MTA4MzkwMDA1QkRBNDhDNjZFQ0VFRjk5MTA4Njc2NkIyQUMzQTlEN0YyCis6MTA4M0EwMDA0MUJCQTcxRjMzN0I4MkQwRUZCQTIzQUY5NzlBQTBGQ0MzCis6MTA4M0IwMDBDMzVDREYzMEE2MzIzNjY2Nzg2MDBFQ0U2N0VEQzJEMDgxCis6MTA4M0MwMDAyRkNDMDBERjcyREYzM0FFMjk3QTA0OUY5RDVBNzhCNDM4Cis6MTA4M0QwMDAwNkRGNzcwMjFFODMzMEFFQ0U3QkQ1MzkyMUEyMTc4QjA0Cis6MTA4M0UwMDA1RjMwMUUxRjgwM0RBODNBN0I4MTEyNEMwMEZDQjFFQTMxCis6MTA4M0YwMDBBOTdDREUzNjNFQjZCNUU3NDYxMTdFQ0UzNjU4QzcxRjlECis6MTA4NDAwMDA4MDc2Q0VFQTRFMEZCRUFGM0JCNzg4REVERkQyN0UwNTY4Cis6MTA4NDEwMDAzRENEQkQ1NzA4QkU4Q0U3RkM5QUI5NkMxM0YyNTk5RDRGCis6MTA4NDIwMDAwNjk1RTFCQjNBNDc0MjI4MDhGMzk5Rjc2RkMwN0Y4MDcxCis6MTA4NDMwMDBGMkY1MDcxNkY4MkI5MUVGMEExNENGNjg3OEFDREI3NkNCCis6MTA4NDQwMDA4NUUwRjNEREY3OTcwMzVFRTc3RDkyRTI2OTgxRjdCRjkwCis6MTA4NDUwMDA2QTRBMDc2NDQ1Rjg3RkQ2QjkwNTU0MkZFMURDRjVENEE0Cis6MTA4NDYwMDA5RkU0N0ZBQkUwNzczM0YyN0YxNERGQzM3NzhDQzE3NzczCis6MTA4NDcwMDA4MUEyQzA5RDg4QTdBQUE3RkZGOUNDN0ZDMkFCMkJCNTZDCis6MTA4NDgwMDA3MEZFNEY1MkYwRTkyNEZFODlBQzAzOUJGQkYxNUM1QTZECis6MTA4NDkwMDAwN0ZBRUEyODNFNTI4RjJFQjFFODgwMkZGMzQzNkZEM0JDCis6MTA4NEEwMDAzQUIwQzI3MzY2NTRGOTdBRTRFQjQyQzQ0Q0FGQjZEMDJBCis6MTA4NEIwMDAxOTc5MUZGQzlBRkNCRjVFRDQ5RjYzNjVDQkZERDg5RUUzCis6MTA4NEMwMDBENjkzMTNERERFRTFBMkFBMDczRDUwREVFMTUxNzg3QkIxCis6MTA4NEQwMDBGRjQzRTMwNjNDRDkxMEJGMzA3RTFGRDI2QjdFOTk2RUZFCis6MTA4NEUwMDBCQTI3MTdGQjkxRTNFNzdDRjI1NUUzNkYxM0Y1NUY1NTZECis6MTA4NEYwMDBEOTQ2NkNGN0Q1MTkzMzdBN0NEMERFOTEzQjhCOEI1NUZFCis6MTA4NTAwMDAzREQyRUZEMzFFMEJCNTM3MEY2ODg3RUJBOEVGMzk2QjYxCis6MTA4NTEwMDA2ODc3MkU4QTExQzYxNEE4RkZDOTczNjM0M0Y3QzAxNDg1Cis6MTA4NTIwMDBERjYyN0RFNzcxM0NDMTgzRjEzQUNFQUZGRTUwM0NENUFFCis6MTA4NTMwMDBBRjhGNEIwODI5NTA1RUVGRUFDQkY3QzM3ODY2MUVCNkMzCis6MTA4NTQwMDA4NzkxQUY4RTFDQjY2QjBDRkFBRDI4QjlGMTY5QzREMzE0Cis6MTA4NTUwMDBDQ0MzNjNBQTE1RTA0M0RGNDFBQkM2QTBERURGMjdGODNBCis6MTA4NTYwMDBGNjIyMUYwQzM1N0UzOUJFRDhBNzlDQkZFNDJCQjk1RTFFCis6MTA4NTcwMDBFNEZBOTBFQjIxNzZGREM4RjU3MEQ1NTY0RkMyNzc5MDlFCis6MTA4NTgwMDA0RTgwOThDNzcxRkQ2OEMxQkQzODhGM0EzREJFMDhENzhGCis6MTA4NTkwMDBBNTVDNDdFQjBGMjhCNENFNDBFODdBNDZFQjkxNzUyNEYyCis6MTA4NUEwMDBENzRENjQ5RDk4MDgwRkYzODQ5RTE4NkE5REQ0ODk3NUYxCis6MTA4NUIwMDA3MTkzNTgxNzcyM0QxQzUzM0IxRjJDODdFRjY2MTYwNUFECis6MTA4NUMwMDBGRTgyNzg5MkVCNjJEREZFNThCRDMwMjQ1RjMxRTRBQjcxCis6MTA4NUQwMDA5QjUyMUExOEYyNTUxRDNDQTNGOUNBM0FDNDdBNzgwNzdGCis6MTA4NUUwMDBGOTIzRjVEMkQ3NDNDRjI1RjJEM0RGOTE5RjI2RkRBRkY0Cis6MTA4NUYwMDBGMkQzREY5MTZGMDZFMUE3Q0ZGRjE1N0U4QUU1OTdCMzJGCis6MTA4NjAwMDAwRDdGMkFEMTYxM0M2NzRCNDBDRUU2NDZGOEVEQUE5NzM0Cis6MTA4NjEwMDBEOEY4MDNGMDlFOEQ3MjdBOTA3RkJBRTNGODNDQkIyREI4Cis6MTA4NjIwMDBEOUExMTZBQzc3ODEzNTIwMUVBNUZFQkYwOUU5OUUxQzk1Cis6MTA4NjMwMDBFMTUzQUYzNzMwQkM2ODUyODRGRURENzFDMUMyMEQ4NTk1Cis6MTA4NjQwMDA5NzRFNjc2QjRBOEZDNTU3ODhGNEVFMzFFOEZGQkEyMTIxCis6MTA4NjUwMDBFODNDQTJFOEVCRDFEOTI5RUE3RjE1OUQzRDQ1NUM2RTQ3Cis6MTA4NjYwMDAzMDM3RDBCMTg0RThBNzIzNUQ2M0U5OEU3NDQ1QkFENzZCCis6MTA4NjcwMDAxRkIyRUVCRTE4NURENzk3MDRBNjE2MEQyMjI3OTg4RjVECis6MTA4NjgwMDBEQjAzMTFCQTU4MTcyMURGOUMwRDgzNDI1Mzg2QTZBQjNBCis6MTA4NjkwMDBCOTgzRTM1REMyNkQ2MTRERUFEQjY0RDRCN0MwMkYxNUM5Cis6MTA4NkEwMDBEOERGMzdFNTk3NzkzM0UxRDdFMTA4M0VCNUQ4OTcwNUFDCis6MTA4NkIwMDA3NEZGQkU4MEQ5MkYxNjIzN0RBRTJEOTNFNTRGNzdGODNBCis6MTA4NkMwMDBGMjUwRUVDMEVGRTVENDgzOEZEOTA4QkYxQzBFRUUzRDBCCis6MTA4NkQwMDA1MTBERjVBRjdBQjBCRjNDODhFNUIzMkExMjQ0N0JDQzhDCis6MTA4NkUwMDBBN0IwNDhGREVCRjczRDc5RTI1RTlBQzczNkFFMEYwMkMwCis6MTA4NkYwMDBCRDlBN0Y3QzE0NUMwMkIwMzMwQTJFOEI4MTc3RjBGQTJFCis6MTA4NzAwMDAyRUFEOTdCOUE5OUQxMDVGQUZEMEJFRTJFNUZDRTM4RjE3Cis6MTA4NzEwMDBCMjQ3ODA5MkIzMTNEMTlFM0NBMEI4RUYwMUZBMkZBREJGCis6MTA4NzIwMDBGOEM0ODJGNDhBQ0NGRjAwQ0Q3RkZENDE0NUMwNUQyN0FGCis6MTA4NzMwMDA3MEJFNEIwRjcwQjg3OURGQzE4RUEwMjZEQTAzM0NBRjU0Cis6MTA4NzQwMDAxMzY4MzY3NzJBM0UxNURBNUQ1N0E2ODQ0NkU2MEVDNENFCis6MTA4NzUwMDA3MzczOTE1MURGRTE4RjY2RkM5RTU5NTJCRURFRjdCODBDCis6MTA4NzYwMDBCRUU5RkI5MUY0N0REOEZBMzVGQUJGQUU4MkY5NDI4RUFDCis6MTA4NzcwMDA4MUY1MUU5MEVCRUIzQ0MwQjI3REMwRTUyMjk4NUZBODZFCis6MTA4NzgwMDA3MDYwRkRFREEyREQxRTkzNDlFMEVCQjUwRUM0NUY4Rjc2Cis6MTA4NzkwMDA0NUUyQjNBN0MzNTcwMUY0NjcxQzdFNzQ1RkNGRTI2MDY0Cis6MTA4N0EwMDAyMTFGQkUyRjY2RkUxNzFCN0Y1QkZGQkE4RkNDNUYzNzgyCis6MTA4N0IwMDA3RTFGQkUxOEZFQjYwRUMwOUZFMDlGNUEyMzNGMjU2ODVECis6MTA4N0MwMDBGRUUzNjdBMTlEODQxNEM1OEQ3NkYxN0FCRkZENUVCNDhBCis6MTA4N0QwMDBGRjIzRkNGMTY3RTI4RjFFM0JFQkU3NjcyM0ZGQkZCOTg2Cis6MTA4N0UwMDAxOEY5N0YzRDkzRjVERkVBQzBGNUUzMzdGNUQ3RTdFQkZFCis6MTA4N0YwMDA0MUYyMTc3QzVGMDBGQzg0MjYzMjdFRkZEQ0JFQkY3NDMyCis6MTA4ODAwMDAwNDFENDQxRjJBMjczOEVGMjJFQkExMzMwNkFFODg1OUY2Cis6MTA4ODEwMDAzRjgyRkY2OUZEQTI5QzA3RkM4QzFFNDRDRUJDMjlGMDYwCis6MTA4ODIwMDBGQkIxQzIxNkEzOUNFQ0E5RTI3NjYyQ0Y0OEZFM0M1Rjg2Cis6MTA4ODMwMDBDNEVEQzJGNzA0MUU0RjhCRkEzRDcxNTE3OEM4OEFEMDNGCis6MTA4ODQwMDAxOTdFQzJFODg3NDRDRDlCRjBCNDI0NDVDRUZCQ0JDNTRFCis6MTA4ODUwMDA3MzYxREUzRDQ5QkNGQ0YzQTJGRkVFMDg2NjQ1RTBEODNCCis6MTA4ODYwMDBGNkNFMTU3RDQ5N0MxMzY5RkZGQzA5QzRFQjEyODFCNzc0Cis6MTA4ODcwMDBGMzQ1NUY5QzEwN0NBNUUwQkFBQzIzMDYwMUJFMzhBMDhFCis6MTA4ODgwMDAwNDU1RjQxMzkwMkYwNjk5RjdGMTgxN0MxNThDRjlERUNECis6MTA4ODkwMDA2N0JFQzhGN0JGMUZCODJFN0QzMURGMzM3M0M5RDdGOTY0Cis6MTA4OEEwMDA1RUQwNkQ2RTBDNURFN0M0RDBCNTNBMDZBRTkxNzBDODZGCis6MTA4OEIwMDAyMEZGQTQ1QzVDRDlGNTQwNUIxQUNDRTM5NjNEMEFBQTg0Cis6MTA4OEMwMDA5OTI4N0U3NjJDQzFGNTc5OEI1QkYyQUZGMzBEQjRCQkEyCis6MTA4OEQwMDAyMkZDRUMyMjc4NjFBNzk0ODcwOURCNTExRTJFNDA3OTk3Cis6MTA4OEUwMDA1ODFFODExN0ExQkMyMEQ4QkRDNDM3MzE1QTVGMjQ1MjBECis6MTA4OEYwMDBGOTc1RURCMjdFMTJDMTRCNUI2NTdCQzlEQjdENUE4NDk1Cis6MTA4OTAwMDA4RTJDOThCMjA0RkI1QjUyMjJGNDQ1MzBGNTBEQUNCRkJGCis6MTA4OTEwMDBGNjIwRkY3RUUyRkVCNDM3MkVCQTFFQjZDNUUwNjU0N0VDCis6MTA4OTIwMDAwQzFDOENBOUZGRDA1N0U4OTdENjk4RUZFRjhBMjlCRjg3Cis6MTA4OTMwMDAzNzA2RUU4ODgxREI4RERGQUY1OEE1RDAzQTVDMDFGQ0FECis6MTA4OTQwMDA4MDg0RjhBQTc1MzlDM0RCNkZBN0Y2RUI1M0M1NDE3NjZGCis6MTA4OTUwMDA5QjYxNUQ1REQ1QzJFMTJCRjY4RjVBRDJFRTg4ODJCRDU4Cis6MTA4OTYwMDBBMzk3MDQxRDkxNzU2MTY2RkNDNzlBQzI2ODVEOTg4N0RDCis6MTA4OTcwMDA5MDk3OTNCREIxRUI0MkNDQTcyMDU2REZGMkYyQkZFMjU1Cis6MTA4OTgwMDBBRjE5NjgwNzMzODM1RDcwNEMzNUMyNDc1NDM5RUVFMjQ2Cis6MTA4OTkwMDAzNzZFMkJDNDk3MTJGNjJFQzFGOENBNTUzRjM2Q0UwQjUwCis6MTA4OUEwMDBGQzU1MDE3Qjk2NTQ1NzQ0RDkyNUMxODk0QjcwRkRDQkFBCis6MTA4OUIwMDA3OUNBRkFCM0JGQjhBMDYyN0ZDQkJEMTM5NzNDMDZFNTc2Cis6MTA4OUMwMDAzNTU1RTFEMTBEMzBDRTlBMjRGRTA0QkRBNkEyREVBQzExCis6MTA4OUQwMDAxN0YxOThEOUNGQTk3RUQ0NkIzNTcxRTFEMThEODU1MTJFCis6MTA4OUUwMDBGMzY0OURGOTM4Q0YyMzc3QUE0NDlGNjAwQkQwMDdGMDNBCis6MTA4OUYwMDBCNDkyODE0MzAwQUVEOTkxODQ4NDhENEY0MEZENjM3NzVBCis6MTA4QTAwMDBBQTFCNTE4RkJFQjUzMTM5MERGRDlCODM1RUVFMkYxQzI1Cis6MTA4QTEwMDA0QjE4OTE3NjEzQzA0N0UyOTc1Qjc0QTg3NzY0Q0IyQzEwCis6MTA4QTIwMDA3QTFFNTU3RDlCRkI2MEFEN0Q2RkZGRjQyNThFQjE1ODlFCis6MTA4QTMwMDA5RTQwRjhCOUMzNUJCRUE0MTlGOEZBMkVBRjRFRjgwQ0VECis6MTA4QTQwMDAyNEI5RDNCQUQwN0VCRUM3Q0MxRUQ3NjlGRTNCODk2RjhFCis6MTA4QTUwMDBFRUIzMTZBMUZGQkNBMjc5NUMxQURBOTMyQjdGQjg2MDQzCis6MTA4QTYwMDA3NjA2RDQ1QkQ5NjZGNjI4NTQ4RjREQzA3MTA3RUU5OTBGCis6MTA4QTcwMDA2NUMxRjI1NUFERTIxOUJDOUM5RTg3QkY3Q0I0QzUwNUFCCis6MTA4QTgwMDBGNUZCMUU1MTNDQkJBMUZFQjRDRjNBNUY5QTAwRjA5QUIxCis6MTA4QTkwMDBGNjUxMUUyNENEQTE3MzI2RTY4NjdFREVFOTE4MTM1MjE4Cis6MTA4QUEwMDA4MTFGREZCNTM3QkMzMDlGRDc2NzU4N0ZDRDc5RkQ5NUUzCis6MTA4QUIwMDBGOTI1NTg1Rjc1NkY4MkZBMjdFMTNEREFDMzI3RUY1NjMzCis6MTA4QUMwMDA3NzJCMzgyRTk3MzM0RTgxMjk5REZDNDI3RjA1RUQ1QTM2Cis6MTA4QUQwMDAyODc3NkY4MkY3MjdEQjZFNEU0MzNCRUJBNEEyQkIxNEQzCis6MTA4QUUwMDA5OEZGRjZGRDczOTdBNDAzQkZBQ0U5QjAwQTdBQ0VDRDI4Cis6MTA4QUYwMDA1ODAxRjM1RjYxRUFFNzE3RDIxRkFCMTMzOUJDREQzQkM2Cis6MTA4QjAwMDA3N0M5RTMzMEZFOTNEQkM3QjgxMENGODlDNUJFODdCREY4Cis6MTA4QjEwMDA4MEU3Qjc4QTdEM0ZGMUE2RTIzOEI5OUUzQUZDQTVCQTU0Cis6MTA4QjIwMDAxQ0VERjFERjlFNUU5OTg2RkNGNEI4NTgzRjg3Q0VBRDEwCis6MTA4QjMwMDA0QzVCMTk2NUVGQUNGRTU4MjNCQTFGQjZFOEI3RTEzOEI1Cis6MTA4QjQwMDAwRkM3NjUyQkU4MkYwM0REOTMxN0MwRkE1RDI1RkMwRkQ3Cis6MTA4QjUwMDBFMERGOERDRjBDNjJGNzA0QkQyQUI1N0I2NDZCNkE4NUJDCis6MTA4QjYwMDA2RUUwRTNFQkRGNDBCRTI0QkYwMUUwNUZFRUJGNkUzQjkzCis6MTA4QjcwMDBFQUI1RjdBQzFCRDlCQkI4RjhFRTgyODIyOUYwM0M2NkE3Cis6MTA4QjgwMDBBN0Y4OTU3OUFGM0Q2NENGQzVGOEE3NkYzNkNBM0Q5NjczCis6MTA4QjkwMDBERTk5QkZEMDE5QjVFRTQ0RkRCRjA0OUQ1NEZGMkY1MEEwCis6MTA4QkEwMDAxRkZEQjdCRjA0RkZFQzY0OEU4MTc2RkMxQTk3MzM4OEYzCis6MTA4QkIwMDBDNkM0RkI0RUE3ODY3NDc4NEI2QjNBNzkwNzdDQjdGQTJDCis6MTA4QkMwMDAxMTMzQzlGREQ1OEZBNERFRDU4N0YyMDZGODA1RTM2MzFFCis6MTA4QkQwMDBCMUYzNTI4QkNEMzRBRjIxRDc2MUIwRDZCODBFNTkyRDM5Cis6MTA4QkUwMDBDOUVCQTFENjYxQ0ZGRTM1MTc1RDg3NkI4NDlGMzJGQjQxCis6MTA4QkYwMDAxMUIzMUZEN0QxOUE0OTRFOEQ4MUZFQTg3QUU0RjlDN0U3Cis6MTA4QzAwMDA5MURGRDc2Q0IwN0JBRDMwRjAzNThGNTg4OTVFQkQ0RUFCCis6MTA4QzEwMDA2N0QwMERFNTAxOTc1MzRCODRFNzVCODJCRUFDOThBRkZDCis6MTA4QzIwMDA5Qjk5MkFEMzZDNUU3QUI2NjI5Q0Y0MEM4QzI3MTlFMDZGCis6MTA4QzMwMDAwRjM2M0VGOEEzQzk1MEVENDMxNkJBNzYzMkUwRUYwQzdBCis6MTA4QzQwMDAxMjBDRjA3MkU2ODA0QUYxNDNBNkY5QjQ3OTIwMUY2QjRBCis6MTA4QzUwMDAxOTk3MEI3NTJGM0U2M0E5QzREOTM1QUM5OThCN0VERDZFCis6MTA4QzYwMDBDRDIxRjMzQkJEQzI2N0JCMjBBNjg5RjJCNDlFQkYwMkYzCis6MTA4QzcwMDBCRDZBMkNBRjY3Rjc3RUFBNEUyMDM2QjZFMDdBQUNFQjIxCis6MTA4QzgwMDA4QzI5NkZCOEZDN0Q4Q0JGRDQzM0VEOUQ1RTE5QUY4NTA4Cis6MTA4QzkwMDA3MTdDRUU3NUE2OUM4QzQ3NzFDOEJDODAyMTc2QTZDMUZDCis6MTA4Q0EwMDA5Q0NGNjA4QTZCMUNCMEFFNjBCRTMzNzcyODM0RUUzNTQzCis6MTA4Q0IwMDAxQkQ1OTAxNUVBQ0Y0Q0U2NzFERkY3OUE4MEZFNjM2ODBBCis6MTA4Q0MwMDBERTQxMzdDMDZCMUVFMjdBNjYwRDUzNDIzNkY4RjVGMjhDCis6MTA4Q0QwMDAxRDFCMzQ1QzBGRUI4NTdDNTlBMTMwM0ZGMkY3QkI3NjRFCis6MTA4Q0UwMDA0RjBFRkFFQkFCMUZCMTEzN0VEN0VDQkNGOThGREJFMTczCis6MTA4Q0YwMDBCQkRFRTY3OTI5RDFGRUIxNDNGMDA1QjRDRjZDNDk5MUQyCis6MTA4RDAwMDA3NkRFNkZGRTVFMEVGMkZGQ0M5RjgyOUYwQkYzNUQ5M0NCCis6MTA4RDEwMDBDODdFQjEyNDE3RTk5NTkxQTMzQjIyRjVENjZDQkEzM0VFCis6MTA4RDIwMDA5RkQ3MDMzRjE5RTZCREUyNkU5NUU2QzE5RUI1OTJERTgwCis6MTA4RDMwMDA4M0I1OUU0RTcyNTlFMDczNTVFQjhCMTY0QjIxQ0FFOUYxCis6MTA4RDQwMDA3QjdCNTRBOEZGMEVDMEFBODNGMDE1MTQ3OEI0MjBCRTE0Cis6MTA4RDUwMDA5NkUzQjcxOUZDOUJGNDUyNjE3N0VCMjQ0NzAyMzhCRkM2Cis6MTA4RDYwMDAxQTkzQjI3QzIxQzlGNTNFMEJBRUVCRjI2Mjg1QzYzMzk1Cis6MTA4RDcwMDBCMTk4REJCMzJCNzIzQzM3NTAxQ0Y5N0VBQjA3RTUxNDdFCis6MTA4RDgwMDBGRUE4NzIxQ0UwNTdENTk5N0E1NjYzM0M5N0ZERDI0QUVCCis6MTA4RDkwMDBGMTkxRkE1NkJCQ0ZFRTIyQkZDM0I3MUZDN0E3MzFDREEzCis6MTA4REEwMDAwMkY4NThBNzczNzk1MTJFRjhCMDVFNUY3MDM5RjIwRDUyCis6MTA4REIwMDA5NDlGRDA3MDdGQzVDOUU1NjI1RDIyRTA5REVCNjM5RjAzCis6MTA4REMwMDAwOUZBRjkwNDdGMUJDNURCQ0Q5ODEwRDVCRjIyREU0MzFECis6MTA4REQwMDAzQkJBMkJEMjZFQjc4OUI1NjM5QzA1RUI4RjlEODA3ODJCCis6MTA4REUwMDA0Q0JFNzYzMThFRUZFNzJBQUQ2Nzk4RkNGRDY1NjhFN0VCCis6MTA4REYwMDBGRDVDMkQ0NkZGNzZDNUREQzc2Njc3MjBCQ0FGQzg4RDBDCis6MTA4RTAwMDA0REFFRjhDNTFGNDg2RkRDMjJFOERGOEJGNjNFRUExMTU1Cis6MTA4RTEwMDA4MEY3QzE3MzUxMzFEN0ZCMDE5NUM3N0QxNjA5N0M0OTk1Cis6MTA4RTIwMDAzRTkwRTU3NTc3OUI3OUZDQkRDRDRBNzY0QzVERjM5RjBFCis6MTA4RTMwMDBBOEREM0E2NzRGMUFDQURGQkE2N0NEQTUyOEE3QUYxNUQ0Cis6MTA4RTQwMDBFMzVFRDk5QzVENzEwMkY4NkFBNTM5QzFBREMwQUI3NTBFCis6MTA4RTUwMDBDMTc5MTY4NEQ3NkQ1MzA4OEU3Qzk3OUE4MzdDRkE1MTFBCis6MTA4RTYwMDBFQkFGNUNDODNGRUZEQUMzQTM1MTFGRjU2REIwN0I3NjYzCis6MTA4RTcwMDBFMzA0NDREQ0VEQTNENkQxQkIzMTNFQjNDQURERTM1NEY5Cis6MTA4RTgwMDBBMDdDRDU2REEzOTI1MDdFQkZFNTBFNUJCMEZDQURDRTRECis6MTA4RTkwMDA1QzEzQzIzRUI3QkIwMjYxOUYzNjkxRTA4RjQwOTQ3NTcwCis6MTA4RUEwMDAwQUZGMTNGOTZEQkRDMkU5QkM2RUVGMzFDQjQ4RThFRkE0Cis6MTA4RUIwMDA0RTMxREY4RjdGRkU4NzdDRDQ1Nzc1MzkzREY5QTg1NzM3Cis6MTA4RUMwMDA4MDBGRjIzMzExQ0Y0RjI5QTQ4RkQ3RUY1NTdERjYwOUNDCis6MTA4RUQwMDAxMTNFNTg4RjdDMDBFQjZFQURFMDgzRjUwNzdFRjUxREVCCis6MTA4RUUwMDA1QzBGRUI5MUZFREU4MTdDMDQ3QzdBOUNERUVGREYzNTRCCis6MTA4RUYwMDA5QkYxRUY4RjIzOUY0ODNEMDY3MEFCMTlFMzY5MTYwMTg0Cis6MTA4RjAwMDA0MzNGMDhERjg1Rjg5QzQ0RTVENUJDM0M1ODQ4RjI5NEMzCis6MTA4RjEwMDBGNTVBRDBFRUFDRUYzMjA3N0JBM0Y2N0Y4NkEyRjM3NjRDCis6MTA4RjIwMDA0MUM3OTVDRDU2OTJCQkRCQzVCQzdCRUY3RUQ2ODU3NDIxCis6MTA4RjMwMDBGQ0Y4RTdDNzVFQzBGRDkyQkFGREEwQURGNTQxRDY4NTRECis6MTA4RjQwMDBDMDRCM0RFMkMxNDVGMzIwRkJBMjFFRTdFRDhBRTBBMTQ0Cis6MTA4RjUwMDA5RkZGQzU3QUFDNjc3QzlFNzJERUY1OUFDMDgzMkMxN0EyCis6MTA4RjYwMDBERjNGMkNGODY2MUQxMzc4M0IzMDg2QUYzRkIxREU3MEQzCis6MTA4RjcwMDAzREEzNUM5NUYzMEIyNEYxRUYyNTlGMUUyRUU2N0E2MTRECis6MTA4RjgwMDA4Rjc4QUUwM0JFRjAxNDEyRkZGODJDNTI0RTQwRDFDN0JBCis6MTA4RjkwMDBGQjc2NTFGQzQ3RDI0QjhFRkJCNTg4M0VGMTI1MjY0NTJBCis6MTA4RkEwMDBFOEQ4NkI2MkI1OUQ4M0M0NERCQTA0RkVERTZFMUI5Njk1Cis6MTA4RkIwMDBEMzA1NzhGQjA4RkMyQ0I0QTc5MDVGQjVBOEZFMjRERjhFCis6MTA4RkMwMDBDOEZFNjYzRUJERTA0QTlDMkZCNDFGQzZGNjY1QkY2RjYzCis6MTA4RkQwMDAwNUUzMzU2Q0U3MkRDNkQ3MDdGMjI3Q0E0RkI5MkU2N0QwCis6MTA4RkUwMDBCNjJDQkJCMkM4ODVGNTNFNzY4RTQyM0I0NkM4QjNENzk5Cis6MTA4RkYwMDA4QURERjRCRDBGRUQwNUY4REVEN0E1NTBGQ0Y5NkRFMTczCis6MTA5MDAwMDBEN0JGRERGNjJCRDdDQTI4M0NCRDJBQzYyREY5MEM3RjY5Cis6MTA5MDEwMDAzMDJFMjVDN0RCOURDNEUzQjlCMUUzOTY3MjQ4OEU3QjQxCis6MTA5MDIwMDBFNjk2RUJBRUM0Rjc3MkZDOTI1RjI1N0Y0QTNDNEEzRTVGCis6MTA5MDMwMDA2NTc3QTU5MjVEMTNDQkFGQzQ2QjUyQUZBQTA2Nzk0RjhCCis6MTA5MDQwMDBGQUYxRjJBQzRGMkQwMUM3QzBGN0IxQjBCNDg3REVDNTVECis6MTA5MDUwMDAzODBEQ0E4RjI3RDUxMEM5OEZENkY0RTM3OTUxN0ExRUZGCis6MTA5MDYwMDA3RTFDRDE3QUE3NzlDM0U1RUU0QURDN0ZEREFCNzhEMEYwCis6MTA5MDcwMDBFNDg5RDIyRkY3NkE1MUZBNDVEQTA1MjUyNTIzMDlFRjRECis6MTA5MDgwMDBGNTI5QkUwRjkwOEVFQjRFRjVDQzc2RTkxMTNCNzREQUU0Cis6MTA5MDkwMDA2NzYxMzUwMUUzNTIwNzcyQkREMUZBNzREREU5RTNDNEJCCis6MTA5MEEwMDBGRjc1QUM2NzMzRkE1MTJCRUVGRUMzQkNDOUM4RTc0RjVFCis6MTA5MEIwMDA5QTY5N0Y2NjQ1REIyQzBCREFGNTM3M0Y3RTYzMjlGMjMwCis6MTA5MEMwMDBEMTNCRURBMzQ4QUU3RkYwRDhBNDYyRTIyQkU2NEVCQkM1Cis6MTA5MEQwMDAxNkY4N0ZENTYzMEY1RUJCMTRERUFGRUE1MjNEMjRERjg2Cis6MTA5MEUwMDBBMTFENUNCNzJCNkUyRjY2QzgzN0VGREE3QkU3OTVBMzFGCis6MTA5MEYwMDBGRDdFODdFQTQ2RkI3REVBRTM5M0VFQzJGQTUzOUQyM0E5Cis6MTA5MTAwMDAxMjcxMUVCRUM3OTIwOUY2NjkwOUE0MUZBNERERkI5NjYxCis6MTA5MTEwMDA5MDkzMkQ2NkNFMTczOTI1N0MxREE1OTY3MEI5OTE1QTZFCis6MTA5MTIwMDBDMkY5NjY2NjRCNEIzRUVFQTdGN0VEMDJGOThDRkJDQTFGCis6MTA5MTMwMDAxNkJEMzM4Q0ZEM0QzNzhDRkM4QjdBNzA4N0QyODFFRTY3Cis6MTA5MTQwMDBBNzE0NkU5N0Q1NUE5ODJEQzM0QkVGNkQxOUYwRkU0NUI1Cis6MTA5MTUwMDA3M0NGRURBODQ3NUVCQ0RENTlENDhDMDM1MENGOTdBRURBCis6MTA5MTYwMDBFNEY2MzRERjNGNENFNkZENEJCQ0M5NzE2NDk3NzA3RTdBCis6MTA5MTcwMDA4RjZENEY3RURGOEQ3RTA0Q0E1MzMxRkUwRjVBOUZCQzI4Cis6MTA5MTgwMDAxNkY1RTAwNzdCNDYyN0UxQkNERjdGQ0VERThFRjZENDA2Cis6MTA5MTkwMDBGQjY2MkUxNzY1RkI2MEU3QkQxNzZEQTc4MTVENjc4MEQ1Cis6MTA5MUEwMDBDMThFMzNDMEMwQkZFRjE5RURDMjREMzRBRTg5MjU2MDBBCis6MTA5MUIwMDBDNzhENjNGRDc2OUNFNEY3OUEwREEzMTNBMkYzMDg2MkIyCis6MTA5MUMwMDBFRDc3OTYxN0JCNkYzMzM5ODEwRDIyNkZFNEYzNzQxMzdCCis6MTA5MUQwMDAyMDBBMThGNTJDRUUxMTQyQkZENUYxNUYzQ0QzODNGNjdGCis6MTA5MUUwMDBGRTM2QUJEQjBBRjM3QzBGRjkxRkY3QTU5RTU1NDNCODlCCis6MTA5MUYwMDAwRjgzQjYzOUFFODdGN0Y2MTU4NUQwOEY1Q0ZENjY2MEI0Cis6MTA5MjAwMDAzNkI2N0ZGQzgxMkQ5NDY3NzAxM0Q4OTdDMzk0MjhCQjIyCis6MTA5MjEwMDBGOUExMDdBRTQ1RjYzRkUzMDk2Q0NFODBFRkNFRUNFMTU1Cis6MTA5MjIwMDA3OTExNTBFQzg4QjE5NzVGQzhEMEZGNzU3QkY5NTJFRDhBCis6MTA5MjMwMDA2NDE5NkZBODI5MTFGNkIyODc3OTEwQ0YxMkJGRDI2RkM3Cis6MTA5MjQwMDAzQTBDN0M1MEU2OERFMEVCNkY0REI1NjQyNzlGNkUwQUJCCis6MTA5MjUwMDBEMEYzMTNFNUVERkJBNzIyRkYzQTEzM0NCQkUxQjNERkVDCis6MTA5MjYwMDA3NjNEQTg2NjIyOUQwRjE0OUQ0N0JGQjdEQzkxRTBDNkVFCis6MTA5MjcwMDA3NUZCQjdBNjhEQjRGOTc4QkFBOTgxOUU5MkNFMzJERTdECis6MTA5MjgwMDAzNkVEQzAxMUZBRUU2RjVEQzUwN0E3QzI3Nzg3MUMwOURFCis6MTA5MjkwMDA1Q0ZFMEZEOEVGRTFGNDhDQ0QwM0I5NzVDM0U0NjFGODNGCis6MTA5MkEwMDA1RUNFRUJDMzNCMzg1REU1QjgzRkRDNzNBMzBCRTc3NURGCis6MTA5MkIwMDBFNDI3QzkwN0E3MjAzREUzMTNEQzY4RUZBRDExRjkxRkQwCis6MTA5MkMwMDAyNzNCQjgzRDdEQ0E5NkYwQzQ1Q0NDMUJEOUIxMjg4RDM0Cis6MTA5MkQwMDA4MTlDQkRFOUM4QjdBRUM1RjdBQjlGNTNEQ0U4MDc3ODAyCis6MTA5MkUwMDA5RTVCRTA0MkZGRjRCRkI0NUU5NzFCOUZGMDVEMThDNzIyCis6MTA5MkYwMDBBMzg1NTQ5NDQ3RTU3MzE4RUQ0Nzk1ODczNUE2RTdEMkMzCis6MTA5MzAwMDA1NjJGRjFDQjk0RDM1QTA4RjM0NjNFQzI3RDJBOEM4NzYwCis6MTA5MzEwMDA5QzhGQTM3ODA4MTNGQjRGMzdGRDlBQzc1MUZBRkQ1QjZBCis6MTA5MzIwMDBFMURGNEQxNUYzRUUyQTQ5OTJGQjBBRjQ3RTY2MTk3RkMwCis6MTA5MzMwMDBGRkZFOEU2N0U2NjM3QjFGM0M2Njc2RTNCOEZGRjY5ODE4Cis6MTA5MzQwMDA5OURBNUYwQjdFOTkwOUM2N0I2QTBGRjc3N0Q2NzYyQTgyCis6MTA5MzUwMDBFNDI3N0ZCMDA3RjQzNUNDQUI2RTgzRDk2NzQ5MThDOEQyCis6MTA5MzYwMDA4NzMzQTFCQ0Q3MTFFMUMzQjVCRTEwRjEzNzEzRkM2ODM4Cis6MTA5MzcwMDA4M0ZGMkU4QzFDQzg4Rjg5QUM3MzMzRTJFMzVGRTVDQjhGCis6MTA5MzgwMDA1RkM0QUNGQjdFN0UxQzhBMEYwNEJFNzAxRDIzM0Y0QTY3Cis6MTA5MzkwMDA3QUFGRURFMEZCRUE0OTlENDU5NUM4NTc5MkZFNTI0RUUzCis6MTA5M0EwMDAwNEFCNTgwMUVBRDUxNjBCMkJDMDNDOUNBMDI5Q0U4M0Y4Cis6MTA5M0IwMDBFQjdCODE0MzM3MkI4MDg3NDUyOUJERDUyODRFMzMyNzRBCis6MTA5M0MwMDA3MTM5QURDRTM0Rjk0Q0E4NUY1QUFDMjQwNzYyRTVDOEI4Cis6MTA5M0QwMDBFRjg0NUM5RjhGM0MwREZGREUyREUxNzY4NDk5MzU5MDA0Cis6MTA5M0UwMDAxRjIyOUZBMDc3QjI1MTdGMkY4ODRGRkFCQjBFNTVGRUU4Cis6MTA5M0YwMDBGRDQwRUQ1MjBEQzZCRjYwNkFEMkVEQTMzQzhDQkQ3OTM1Cis6MTA5NDAwMDA2MEZENTIwREY4Nzc0MTcxRDJCMzIzMDE3RUFCQTQ4RTdCCis6MTA5NDEwMDBDMzEzOTMyNjk5MDE2RTZFQUU1RjVBMERGNUZGNTlFMkE0Cis6MTA5NDIwMDA3QkJEMjRBQTFGRDkyRUJDRkY4RjEyODAzNzhEMEI5Q0M5Cis6MTA5NDMwMDBDMDY3QkRDNTQxNzJGQTEzQTU2RkMyQzZEQzQ4RkRENzJGCis6MTA5NDQwMDAxNEY2RDY2Rjk1MDhEQzZCNjYzOTY4REZCRDVCMjJDNzAyCis6MTA5NDUwMDAzRkY4MzM2RjkyRUZFRDkyNDFERUFGNjRBQzBERTMyQTNCCis6MTA5NDYwMDAyQjgzQkYzQkExNzAzRkNDNkYwMzdBNUQyREY4NkFBNUJCCis6MTA5NDcwMDBDRDExMjY3RkJFREQ3Q0JBOUZERUM4NDc5RTA0MERFOTc0Cis6MTA5NDgwMDAzQTVGRjBEMUQ1NUFGODA4N0UzRjk2QjVCQTRGREFDOEEwCis6MTA5NDkwMDA4NERBNzEyMTc5NjhGOTBEMEI4RjlEOTRFRDAxQkY3QzAxCis6MTA5NEEwMDA2Mjg2RjkwMjVGMkJDMDlFMUI2MUM5Mjg4MEU0MUE5MDc2Cis6MTA5NEIwMDA1RkNBQzFERkZEMDNEQjZEMDlCMjVFM0JEMUExQzY4RDgyCis6MTA5NEMwMDA3Q0E2QjA4MEU5MDIzQ0VCRTI1RDEzMzA2RTUyMTc5RjQwCis6MTA5NEQwMDAxMzQyQkU2RjdDRjZFM0UzQzg1RTM3NEJGQjI1NTA0Njc0Cis6MTA5NEUwMDBGQzdFOUI5QkNGODcwNUNBODkxRjZGMTdGQ0Y4N0UxM0Y0Cis6MTA5NEYwMDA2QkM4ODNBNTc3NzU0RjhGNEI4NzQxOUY5RTFGQ0VDNzQzCis6MTA5NTAwMDBGNUZFNjk0RTIwNkUxMkZBRjkzQjVBQjIxQTgxN0YzRTdGCis6MTA5NTEwMDBERTZGRjVDQzg1RkFBNzQyQ0Y1MDFDNkU5REIwNDdEOUJGCis6MTA5NTIwMDA2M0E5NjJEREFCRTExOTUwQUYzQjc3RUM2RUQ0MkYyOTE0Cis6MTA5NTMwMDA5MzM4NUY5RENFMERFN0RDODk3MjIzOTdGQjNGNTA4RkY4Cis6MTA5NTQwMDBGMkRDRTY2Q0JBM0MxNUVCOURERUI3MjVFRjI2QTA5RjVBCis6MTA5NTUwMDA1NTYzNDE2NzEyM0Q5OTBCRTY3RDA1QjQ1RDA2QjAxOTcwCis6MTA5NTYwMDA2MDk1RjY3MzQzNDQyRkFDRTc0MjdEQUZERjk4Q0VFM0JFCis6MTA5NTcwMDBFRENDOEY3MjQ1RDI0QkQyNjEwMDdENjAwODY4QUY5QTA2Cis6MTA5NTgwMDA2Q0NDOENFMzFGQ0I3NkI4NTE3RjQ4M0FCRDZGMDMzQzVGCis6MTA5NTkwMDA2MkZDQ0MwNjc4ODRGNTNEMEI4MzBFMjU4ODRGMUU2RjQ4Cis6MTA5NUEwMDA2OTU0N0E1QjkzMTFGRUI5NDI3OTczMDNGNUUwRTMxNkNGCis6MTA5NUIwMDA0NDc5RUQ4RTFCNDlGRTQ4QjlBM0MzN0Y4M0M5OURBRjkzCis6MTA5NUMwMDAxRDM3REEzMTczNTBCOTMzNkQ5MkQwODM0NUFDRTgwMjYwCis6MTA5NUQwMDAzNzEwODlCRTZCQzRCN0IzRDQxQTVEQzM3MUE3REEzQzI4Cis6MTA5NUUwMDAxODRGNkI3QzY0MTRFOTFCRDZGQTA3MTY1RDhGRUQ0OEEzCis6MTA5NUYwMDAyNjdFRDk5Q0FCMTJERTZGRUU1MjI4QkY3MTVFNTcyNkQ1Cis6MTA5NjAwMDBEM0ExNjg2RTU3MzIzRDVERTczMkU4RkQwNzRGQkM1NDg5Cis6MTA5NjEwMDBDMkU1MTJBN0NCQkM5RjBEQUJBMkJDQTI5RjhEQTFBNzk4Cis6MTA5NjIwMDAxQzQ3QTNFMEJCNTk2QTYxNjcxOEVEMDgwNzhDMDNFMDhCCis6MTA5NjMwMDBDNjE3QjlERTZBQkM0NkE1QjgyNjQzMTE5RDg2QzRFNEE4Cis6MTA5NjQwMDAzRjdFNDczQkM1N0ZGQ0FDREZCRTU3MkU1MDlDNTY0RjNDCis6MTA5NjUwMDA0MEJBRjhCQjU1ODZGQzAzREU0NjkwRTNEOUQ2OEM3ODM5Cis6MTA5NjYwMDBCNkE2OUI5ODNFODhGRDYxMTU3NEIyRUI3MTRDOEZGMkUzCis6MTA5NjcwMDAzQkI0RTBEOEVGNTc2MDNDRjY1QjY2NEYwOENBNUJFQzQyCis6MTA5NjgwMDBBRUREQjg5RTU4RDBENzgzRkVDMjYyRjE1RDhGOURGM0U4Cis6MTA5NjkwMDA0NzdDNDE5MkUxRkIyREFFRDlEREM4NkY4QjdENUNFRjNECis6MTA5NkEwMDAzODNEQzMwREZENUJENTc1NjY2NDMyMTZFMEY2QTJFNDY1Cis6MTA5NkIwMDAwN0UyNEJFOEY3NkFCRjQyRkFGNTlBQzU1MDFFRDVBRUVECis6MTA5NkMwMDBCOUUyNTM5MkUzRTYwQUEzOUQ2OUY1MUJFQjdENkY5MjI1Cis6MTA5NkQwMDBEMDNCNjNEOUQ4NjhGQTQ3RjBFRUYwQTE5RDdFQzZFNzhCCis6MTA5NkUwMDAyNDNFMDZFREZFRTMwQTgwQUZFRDM2MzM5Q0FGMzU4RUE3Cis6MTA5NkYwMDBDRkVCMEM2MjBBRTNBMjNFMzU4NEYxOTIyRDg4MDc3ODA1Cis6MTA5NzAwMDA5RjUwNjZDNDY3QTJDRjg4QkZFNDM5NDY3Q0E0RkE4RDE3Cis6MTA5NzEwMDBGMzFGQjY3OEE0QTEzQzIzNzA5OUExM0NCM0Q2NkI4MDBCCis6MTA5NzIwMDBCMzFCQ0EwREY1NDc2Q0FDMzJDMEI5QzEyQjBERjU0NzYwCis6MTA5NzMwMDBCNTJGMzRDMEEzQjcyRDM1RDQxRkQzQjFEMjUwM0UzNjg4Cis6MTA5NzQwMDBCNEQ2NTAzRTZFNEZBMzAxMUVERkY5NUQ0M0ZEODk1RDI3Cis6MTA5NzUwMDA5QjBDRTU0NUUxN0IwQ0U1QzVERDNGMzBDMDkzN0ExRUVGCis6MTA5NzYwMDAzNkQ0OUY3QzYyQjdBMTdDNEFFRjUzODZGMkE5QTdGNjU0Cis6MTA5NzcwMDAxQkUwNjk3REJGMzFENDlGNzFFRUE4MDFBRTY0MkYxOTQzCis6MTA5NzgwMDBFQUNGQjRGREMxMDBDRjcyRkZEOTUwRkZGMkY0NzcwRERDCis6MTA5NzkwMDBFNTU3RTgxRjE5Q0FBRjJBMzg2QkU0RDczODJFRkZFNjIxCis6MTA5N0EwMDA3OUZFNjlGODRFQzkwQUJDM0MwOTZEMDRGNUI0ODY3Q0EzCis6MTA5N0IwMDBEQkIyNEM2MUM5MTg0RkVGNUU2NDQzMzlGMDhBOTQ0M0MxCis6MTA5N0MwMDA4MjBGOUY0N0ZEOENGNUYzNTgwRUNBQjM1OTZBNDUxOEFFCis6MTA5N0QwMDBEN0VEOTkyRTg1RDY3RkFDQkVEMzNFRjJGQjMwOUVDNzI3Cis6MTA5N0UwMDA3RUE1NzgzMENFOTYwMDZBNEI4QkVBM0ZEMTY3MDM0NzVGCis6MTA5N0YwMDAzMjAyMjdDRjcxMUJFMDU0N0ZCQUExRkVCMEM1QkFBMUQ3Cis6MTA5ODAwMDAzQzIzNTA2MDI4Q0ZBQ0Y1MThFMEVDODYzMjQzRkQxMUM0Cis6MTA5ODEwMDAxQjdEMDYzODM3MzhDNzUwN0Y1NEJCREYwMDhGREVCNjVDCis6MTA5ODIwMDBEODUwN0Y0QzQ3QzA1MDNFMzY1NDZCMjgxRkI3QTdDMTU1Cis6MTA5ODMwMDAwMDhGRUZEQzY4QTgzRkIxMkI2ODI4MkYwQUI3MUJDQTNFCis6MTA5ODQwMDA4QkJCQjcxOUUwNDkzRDFEODZGQTkzNEY4NDBDRTU1MzU1Cis6MTA5ODUwMDA3QUY3MThDQUE3OUVFQTM0QzBEM0ZBQkEwQ0Y1Njc5QzA3Cis6MTA5ODYwMDAwQjFCRTA0QUY2QTJBMUZFNENEQjZCMDY3ODk2RkIwREMzCis6MTA5ODcwMDA0M0ZEQ0JEM0RGMzY5NDVGQTE3RjYwMjg5N0Y2Q0Q1NUFCCis6MTA5ODgwMDAwNTlGMUFERjBCN0I2NzlFRTcxRjg2RUY4MzU1M0U4Njk5Cis6MTA5ODkwMDBGQzExRENBRjc4NUE3NEM2MEE0QjQ3OTI3RDAxNzJCRDQ5Cis6MTA5OEEwMDBEN0FFQTI3REU0QTdCODUxMTIyNjA4MDI1RjI2ODAxMDI5Cis6MTA5OEIwMDA0M0JFNDI1N0ExODZFMjRGMjkxNEY3MjVENUE0NjNCRUMzCis6MTA5OEMwMDAwRkQ4MDkwMDI0OTk3MjczRDE5RThFOEZEODZENTkxN0M1Cis6MTA5OEQwMDA4QTJGREQ2RTJCMkY2NUM0RTczNzk3MDYyNjk2QTZBMjQyCis6MTA5OEUwMDBCRkIyNkYzNkRBRUQzN0IzRTA2NjFDMDdFOEJEODQ1RUMxCis6MTA5OEYwMDA1QzFGNzY2MzNDNDMzRUFGQjAwMTVFQTJGQTdCRDFCRUYzCis6MTA5OTAwMDAyRENCN0IxMUJGRkYwQURCNjlBQURGREZBRTg4NzMyODhFCis6MTA5OTEwMDAzMEJGQzZBOEY2RUYwN0JGNDIwM0JCNkU1QjEzQUMxQjlDCis6MTA5OTIwMDA3MDE4N0ZEMEU0MjZGOEExQTY3NDgyN0ZENEE0RDNCM0E0Cis6MTA5OTMwMDBBM0E5ODA5RTBGMzc3OUE4N0M0NzUzMTlDMTNCOUI3QzE0Cis6MTA5OTQwMDAwNDg3OUFFNkQwNzM3NzkzOUZERTNGRDZCNDk4RTAyN0RBCis6MTA5OTUwMDBDMDhGQzZFNzFFRjBBQkYxRjkxNEY4Qzc1OEJFMTdGQzZDCis6MTA5OTYwMDA2NTg0N0ZEMTE0QTQ2NzY3NTMzQkJEREZERkI0OERFMDBFCis6MTA5OTcwMDAwMzREMUQwNEZGQjIyOTQ0Q0ZBRUE2M0RGNEZDNEQ1MzY4Cis6MTA5OTgwMDAyNzk1MUY2Q0VBMjJGODUwNTM5OEUwNzA1MzM3QzE0NzZGCis6MTA5OTkwMDA5QjdBMDgzRURFNzQ4MkUwMTc5QTdBRTlEOURENzQ4QUYwCis6MTA5OUEwMDA5RUJGNkZFQUEzRjI5NzlCQ0UxMUZDQTE4OEQ3QUUyOTg4Cis6MTA5OUIwMDBFNUYxMjI4OTE3MDkzMzU2NERGQzIwRURDM0Y5NjhFNzFDCis6MTA5OUMwMDAyMzczOTQ5OUZGNjZCMEYzNjNFQ0VENTg3QUM4N0VDQ0FDCis6MTA5OUQwMDA1NTE4MTM4NEU3RjBGQ0REMkQ1MTdFRDZBREEyQkYyREM2Cis6MTA5OUUwMDA3MTJDNjgwNzdFNkYzNjcxQkZCNjM5ODk1MTlFMzUxMzY5Cis6MTA5OUYwMDBGNkVCMUFDMTk3MkM4NURCQURBQkM1QjhENjg4RjUzMDMwCis6MTA5QTAwMDAwOUY5QjM4MEY4RjNFNUFGRTM1NzQ4QkZGMTRDNjFBMDIzCis6MTA5QTEwMDA4NUY4MzNEQjE0MjRGRkQ5MTFDQTQ3RkIzOTc1N0M2MDA0Cis6MTA5QTIwMDA3M0U5MjREQzZGQkNFOTA1RUFDRkVEQTE3REM3NzlENkU3Cis6MTA5QTMwMDA3MEVBNzUxODFGNzk1MUE1NzhERTUwRkRENThCRkNGMUMxCis6MTA5QTQwMDAyMUNCMEY3RDkwODVGNkY2OUMyRkQ1MDBFMkU5MTVCMzZBCis6MTA5QTUwMDA3MzMxQzYwQkI2OTc3MkZGNzQ3QkE5QzlGMEZDQzlGOEM1Cis6MTA5QTYwMDA0MDA3OEVFNzczNjdDMzBEMjYxOEZGRTdEMzM3M0M3MUI1Cis6MTA5QTcwMDA2QjZFQzQ5RkJFMUE1RDUyRjA4MzE2MzBERDRDRjk4OUJGCis6MTA5QTgwMDBDQ0Y3N0MyRTM0NzUwRDE4NTgwODVGQzc4MkY0Q0MyQUE5Cis6MTA5QTkwMDAwQ0VDQzJGOTJFMDE0MzFDRTE0MEI5MzU2N0IwNzlDNTIxCis6MTA5QUEwMDA4RTZCQUYxOEQ3NUUzMTFFRjk3QzcxN0NFMDY5NkNFRjZDCis6MTA5QUIwMDA3M0E3OEZDNkY1Q0E5NENCRjM3MTVFNzI1QzcxMTM3NDkxCis6MTA5QUMwMDA3MTlFQTE2RjI3OEVFRkYzRTczRTNEQTk4QzhBRTA1RjgwCis6MTA5QUQwMDBGQUVEOUIyQjQ1NUVDOTA2ODVDN0U1QTRCRDI2RjI1MjZCCis6MTA5QUUwMDBBNERGNTE3M0JCMTI0MjdCN0QxOUY4M0JCOEJGRjRBNkNCCis6MTA5QUYwMDBCMDNGREZCNDczRkQ3Q0E2QzE1QzgwNzY3RDhEMTJFNzNDCis6MTA5QjAwMDBDMTdEQjgzMzBERkZFNTQwNzcxQUVBMzNEQzI3NjlDMTIwCis6MTA5QjEwMDA5QzAzMjg2RkI5NDNBMTdDRUUxQTY4QzcwNEVERDQ2MDlBCis6MTA5QjIwMDAyMDEwQkZCQjRCMjFGRUZCNjI3QzJFOERBRjA2Q0MzRkNECis6MTA5QjMwMDBGMkIzNTJGQTcyNzBCRjE0RjhFNTQ1QTRDM0RBMjk2QTg5Cis6MTA5QjQwMDBEMDAyRjZGMDJCQTY1MEJFNDJGQkQyMzc1OTE0MThFN0NDCis6MTA5QjUwMDA5QTE0RTA5MzkxNDNGM0MzN0E3MUZFNDBCRTA3M0VGQjMzCis6MTA5QjYwMDAwM0I2RjdCNzVGNEYyRUEwMzhGRUExMjkzQUUyQURDNTg0Cis6MTA5QjcwMDBDNENGMjMwNTdGQUY3QTc4QkUwQjE3RDVFQUQ0RjExNDkyCis6MTA5QjgwMDBBNzY0OUFDNzgzNzFBNjc5RTJGQ0NBMTE5NTZEREMzNzg4Cis6MTA5QjkwMDA4ODFDRkRCQkEwREIyQkU5RTYzOTIxNkFEN0I4NUZGMzRGCis6MTA5QkEwMDBCMUEwRTNDN0EyREVCQ0EzMkY2NkUzRjlBQkY1REQ2Njg3Cis6MTA5QkIwMDBCMjQ3NTg0OTZGQTFERjM5Qzg3QzM2NkVGRDc2NUUxNDE2Cis6MTA5QkMwMDA3RkQ3NzdCRENERjMzNTU4NkY2MTc0N0VCQTZCMzI2RjM2Cis6MTA5QkQwMDA1N0YyOTM2QTcxMDY3NjM5QTJDN0Q3Q0ZERjlGMTE3RkZDCis6MTA5QkUwMDAyNzAyN0Y4RjIyRkUzRTg5RjZGNjdDQUI5RTcwMUQzQ0RECis6MTA5QkYwMDA3QjAxNDU2MTc4MDY3RUVBQTY3QzIzOTk3N0I0OEFGOUQxCis6MTA5QzAwMDBFOUI5MDZEODAxRjlEOTFGN0NDMDgyRjg1RkNCM0FFOURGCis6MTA5QzEwMDBGREZBQjIxQjczMTBBRTY3N0RENUU5RTg0RkI0MzczRjRDCis6MTA5QzIwMDA5RjBFQTM1Q0I0RUQ4MTU5MTg5RjVEMTg1QUYxM0MzRTFDCis6MTA5QzMwMDAxNzNDQTY5QzQ0RkYxNUQ2ODc3OTMyQzY0Rjk0ODZCNjRBCis6MTA5QzQwMDBFMUQwREZEMkJEOTU2RDk5RjA3RUJFQ0FFOUMxNUVFMjdBCis6MTA5QzUwMDBGNDAwQkVGMUE5NDkwM0U3MDlFQkMxMzk5OUU2RTFBMzk0Cis6MTA5QzYwMDA3OUE4QUUzOTg2RjU1MEIzODlGOTk0OTQ0OEZFN0NGRjAzCis6MTA5QzcwMDBGQTI4QkJFNUFGOTlFODBGNjk3REI0RkY1RTdGQzg5QTBCCis6MTA5QzgwMDA4NDc0NUVDQkI4RkU4RUM0M0ZBNERFNjZDNEU3QjdCMDcyCis6MTA5QzkwMDAzODBGRDZGQjUwRjBGNTg3RDk4Q0Y4RkE0MzA1MUMzQ0Y5Cis6MTA5Q0EwMDA2RkM0OUU2NDM5ODE3NEVGQTg4OEZFRkREMDE0MkE3NUI0Cis6MTA5Q0IwMDA4RDIyRkQ5Qzg3RjM3RDIxN0Q5MThFNzFCMzVCNTI2QzZCCis6MTA5Q0MwMDAxRTE1Q0IxMzQzMzk3QzFGQjU1RkNFQjMwQkYxOTFCODkyCis6MTA5Q0QwMDBEN0ZENjYxRTg3OEExRDk3NTJGNkMyM0ZEMDdFQjA1QUM2Cis6MTA5Q0UwMDA1ODEwRjczNzYwN0RCMzUyNUNEN0MzMkRCNEFFNUExMDBECis6MTA5Q0YwMDBCNTE4M0ZBQkYyRUI4M0I1REYyQURBRURGRTgyRkJDMThDCis6MTA5RDAwMDA0MTk4MEY5RTk3MUNEMDhGNUJGNDEzQzdGQjkxN0EwNDg4Cis6MTA5RDEwMDBGQjIzMzk5MkM2MENGRENEQzIyNDE3QTBDQjJCNEUxRkJFCis6MTA5RDIwMDA4REJGRDk5NDQ4NzJFN0UzMTE4MTZBQTQ5NzhDRkY0OEVDCis6MTA5RDMwMDBGRkIwM0JGN0ZEM0NGMkUzQ0ZCNzY0QTE5RDBFRkNDQjM3Cis6MTA5RDQwMDBGMzEyQTc3M0Y5RjQ4QTU5MEYyMkZDNEE2NTJFQzVGRjU2Cis6MTA5RDUwMDBBNURDQkRCQThDQzdDQkFFOTZGMUIxOEE5OEY4NTg0QzQ5Cis6MTA5RDYwMDA1Qzg2NTUwQzFFMkY2M0NDNjNDNjdFQzdCMjM3MjU3RTNBCis6MTA5RDcwMDAyODFFNzNCNDQyMjNCQTA3ODFFRTE4NkYzRTJBRkNENDIyCis6MTA5RDgwMDBDQTc4RUU5Rjc3NEU0RTI2N0U0QUJBMjI2RkQwN0QxNTU2Cis6MTA5RDkwMDBGOUJDNDdDNDU3RUYwNTNCODg0NUM1RDVFRjI5NjlCNEUxCis6MTA5REEwMDA2MTlFQzE5NjQyODVGNkJCRUVBQjhBQUI4RENFNzNERjZBCis6MTA5REIwMDAzQkNEQ0NGNzUzQTc1N0VFNDRCQzE1M0E0MjU1QTRBRTYxCis6MTA5REMwMDA3RDlBOEVGMzUwQzRCQ0M2QjkwMUVGMjY2Q0RBMkZFMjNGCis6MTA5REQwMDBBNDFFMUI4RjRCNTU5M0JFOTZGNEJFNTQ3REZEOTQxNjY2Cis6MTA5REUwMDBEQTE0ODdGMzRFNjFCNEZFOUMxRDc2OTJBMzZBQTcyRjA2Cis6MTA5REYwMDA4QzI5RDc1RjRFNUI3ODI3RDE1MUYzMTc2MDNGNDc0QUQ0Cis6MTA5RTAwMDBFMzk4MDNFQTdGN0VDNDQyRkVGRDIxRDNDQTlGNjIzRUVGCis6MTA5RTEwMDA3Q0RGMUI1Njg2RkI5RTlEQ0U0QzBERjU0NUU3MTc5N0M0Cis6MTA5RTIwMDA1NUQzRDMzOTc1MzZFMzcxQ0U3ODEzMDg4ODIyMzc3QjQyCis6MTA5RTMwMDBGNERGOTA1OEUyREM1OUE3QzJCQTE5QzVEQjdDRjEyNkUxCis6MTA5RTQwMDBGMEMxM0E0REVDRUMwQzE4RDc3RTg3RjdDMTg5QzQ3MjhCCis6MTA5RTUwMDA3RTE1RTdEOTU1MTFCODFGRDc1MzI5NkIyMEY4M0U4QkQzCis6MTA5RTYwMDBCRjc2MTdGNDdCNUY5MjhERjhDNDVGRTE3RjgwOEY5MzlDCis6MTA5RTcwMDBCNUNEODVGMTREOUZBOTMwM0NDN0RCNjYwMUI5NUM4ODQzCis6MTA5RTgwMDA3MTkyMzhCRTI3QzVCODdERUYzRjk3NEZGREVGOThDQzU0Cis6MTA5RTkwMDBGN0Y5NUFEMzdEM0Q3ODYwNjQ0OEJDQjlCNUJFRkVCOEM5Cis6MTA5RUEwMDAwOEYxNUIxNkM1RjMyNDFFQTNFOUU1MkUzNUQwMkI2MDFGCis6MTA5RUIwMDA4RUE2NTcxOUQwNkI3QzM0QkQ3Q0NBRDdBMUQ3RUQ5ODNDCis6MTA5RUMwMDA1QzM2NjkyMDdGMDZBQkY0MDdBQTRCQjg1RUMzMTRCOUIxCis6MTA5RUQwMDA0QTZCNzYyMURBRUI0N0UyMzIwQkEzRjdGNTI0NUY0QUFGCis6MTA5RUUwMDAzRTFEODQzRjM3MUM0M0Y5OTBBNUI5MzE3RTZBOUQxNzBBCis6MTA5RUYwMDA0N0ZCMkQ5MjVGMjU5RkZFNzU0QTNGQkY3QUNCRTFCOUE0Cis6MTA5RjAwMDBDQ0UxOUY4NTMyMjQ5NjVGMzExRTE2Q0Q5NzM1NDNGMjAyCis6MTA5RjEwMDAyRjczNDdBRkQ3Rjk2MDNGMjQyNEExREQ3M0VBQjFDRTk4Cis6MTA5RjIwMDAyOEJFQUM2OUY4NTRFM0YyRTNDMjhDQjhEMjQ4RkM2RUE4Cis6MTA5RjMwMDA3RTg1QzJERTg5QTYyRkZDN0JBNzQwQ0M4RkVDMUU4REQwCis6MTA5RjQwMDBGQzJEODlDNzRCQzVCN0Y5NUJDRDA1NjhDNzZEQzZGMzU2Cis6MTA5RjUwMDA4OTgwQUY3NkM1RTMxQjg2NzFBRDg2Qjc2RkM1Rjc2RDk3Cis6MTA5RjYwMDBFMjdDNzBCMEQwQzJFRDJCQjE0RTY0N0I1RjRFQUI3QTE5Cis6MTA5RjcwMDAwN0Y5RDYzOUY5NzRGQzZBQThGNzc5OUE0OTQ3RTRCNDI1Cis6MTA5RjgwMDBFOTJCRkY4REQ2REQ4OTc4ODZERkI5OTI3QjZBMUZBNTI0Cis6MTA5RjkwMDA3NTM0ODZFMUZFRTBFNzM3MDc0NkUwN0VGRERENDBBNzQ5Cis6MTA5RkEwMDA3NzI4OTkzQTM0Q0M0NDdCNTlCREMzNzAxRDAxNzJEM0Q0Cis6MTA5RkIwMDBGOTMzOTBDRURGMzM1MTFFMjJGODNCNTM0NjBBQkZDMzFDCis6MTA5RkMwMDAyN0VBRjc1MkZEQkIyRERCNkM3MUQ4NEZBRUNEQkQzQjAwCis6MTA5RkQwMDA4QURGNjc4OEY4M0ExRTIzRTdGQjY3MkQzQURBNjU3QTRECis6MTA5RkUwMDAxOUQ3QkYwRjM2RUQ5OUY2REU2ODFDNEZFN0I0Rjc2MDVFCis6MTA5RkYwMDAzQ0M5NzM0MzJDMDA3QzFDNTcxMEQ0MzEwNUM0RjZFNUQyCis6MTBBMDAwMDA0QzA1Q0YyRkIwQ0I1ODI3RjIwREJFNkYxRTFGNjlERjU2Cis6MTBBMDEwMDA1Q0M2RDc5OTBERUQxNUEwOUY2RDUzNTA0RjhBOTI3RjY2Cis6MTBBMDIwMDAzNjkzMTIxODJDREZFNThFMjkxQUZGNkUxM0EzNzJEQjBDCis6MTBBMDMwMDBEMUVENzQ5RTNGMzlDRkEzNjBERUIzNkREMzM2ODZGQjdFCis6MTBBMDQwMDAzMUY2MzA3RjlGOTJFNzUzNTY0NUI1OUIzMjE3QzYxREI4Cis6MTBBMDUwMDBDNTE3RjNGMTI0MDFDODFCREI2RTYwQ0MxMkE0NDMxQ0FFCis6MTBBMDYwMDBDNTFGNjNGQjlEOUY1QUQ1QURCOTg2RTY5MzU4N0U2M0E1Cis6MTBBMDcwMDA4MkRGMjRERkM4NzlEMkM5OTRBODczRjlENTIzQjkzRDBBCis6MTBBMDgwMDBEQ0I2RDFCMjBCRURFREYyQjI0NEMyRUY2NzI5NTUwOTRGCis6MTBBMDkwMDBFQzIyN0E2NTI3RjA0MUQwOEFGRUIxOEQ5RUJCQzFCRjBDCis6MTBBMEEwMDAwRThFNDFGRjM4OURFMDI3QzBCRkM2RTcxRUYwQUZGMTFFCis6MTBBMEIwMDBGOTE0RjhENzU4QkUxN0ZDNkI4NDdGMDFGRTM1QzI5RDlBCis6MTBBMEMwMDBFMDVGMjNCQzFGRkM2Qjg0MEY4MDdGOERGMDJGQzFCRjJFCis6MTBBMEQwMDBDNjY3MTdGOEQ3RjhGQzBERjhENzU4N0UxMEZDNkI4NENDCis6MTBBMEUwMDA2NzU4ODEzRjcwM0UwNUMxRjQ4NTQwRDdGNjNCMkMzRTUyCis6MTBBMEYwMDBDQzE3REMyMEU4N0FDQzM3MzJEOTAzRjRCNzE3OTgyODhDCis6MTBBMTAwMDBGNjZEN0ZGOTA3MENFNzYzNEYzN0QxRjlBRkNERTkzRjIzCis6MTBBMTEwMDA2MDM3QTJERjVBRUEyNEJCQTlFREU3REMxRUIxNkIwRjYyCis6MTBBMTIwMDAzMjk0M0IzQjk1NjAyREYzMzBCNkI4NkM2QzBERUVGMzdBCis6MTBBMTMwMDBFNUE1NkZBODRBMDJGODg2QjI4OTNCNkNCMDNFRjJGNUZECis6MTBBMTQwMDAwNThCOUJBMzYwRERFOTVEQkJDRjFEODE0NzE0RUVEMjdCCis6MTBBMTUwMDBDMDMzNjEzNzc2MTVFREMwQTMzRjM4MEVDQzEzQUUyQjVDCis6MTBBMTYwMDAyQkE5NjkwNjE2MEE4RjY0NjQ1N0Y0RTU1QTI4M0Y2N0RECis6MTBBMTcwMDAxNUQyNkIzNDhFOUZDNzBEQUY2MjJERTlCODZGMzk0MjhGCis6MTBBMTgwMDAwN0VGNDdBMUZBNjE5NjcyRTlGNTM3OTRFOUY0M0VGNkQ0Cis6MTBBMTkwMDBCQjhCRDUzMzk1NUM1MjNEQTY1RUE0M0QyQzU3MkVEMjg5Cis6MTBBMUEwMDA4RTRENTk2NEVCODFCMTZGMzUwQjM5OTVFQTIwMzlENTY1Cis6MTBBMUIwMDA4RTcxMUNDMDdCQkI5RDNGQkJBN0YwQjhDMUFFMjk1NUJCCis6MTBBMUMwMDBERTI5RjBGNDRFRTE3NDZEQjcwN0RENTVEOEZGNzgxMzQyCis6MTBBMUQwMDBFNTJEQjA4REI5N0YxODA5RkQ3REZCRjcxQUMzQkM0RjgzCis6MTBBMUUwMDBDOTlGRUQ4MjBGNDY4RjcwRDJGOTdCNzZBNzhERjZFRDcxCis6MTBBMUYwMDAyRjFGRjFGM0Q2MjQ4MDQ3M0ZFQUYxNjA3RUMzNTZFNjc1Cis6MTBBMjAwMDA4OTQzM0UwOURFNkJBMkZDQzZBNzRCNDYyNTJEODBFQTlBCis6MTBBMjEwMDBFMzI2M0Q5Qjg0NzJGREE0OTAzNzIxOTExN0Q0RENCNkQwCis6MTBBMjIwMDA3QTA0RUFCMUNGNUZFM0YyRjBDNzQyM0VFRDMyRjczNDkxCis6MTBBMjMwMDAxMDNEMjczOUM4RUU2MDZDMUJEOTE3Q0RFOTQwNkNEMEIyCis6MTBBMjQwMDA5MUE2MENGRUI0OThERDRCQjE5RTA1MEMwMUNDQkZCNkI3Cis6MTBBMjUwMDA3QzMxRDk4NjdFNURDQjM5RUIxQzlFMUZEQjQzNzY4NzM0Cis6MTBBMjYwMDBDNTFFNzAyN0MyRkI2RDQxMTNDOTg1MTZERDQxRjk2QzBGCis6MTBBMjcwMDA1QjFEREU2RTNDQ0YxQzc0OUIyOEVGNzU2QkExODlGMEQzCis6MTBBMjgwMDBEOEVBQjgzNjg0RjZCQ0E2MzREN0EyMUUwQkI5RjdEQkUxCis6MTBBMjkwMDA3MkUxN0RBOEQwNDQ3OThDMjFERkMyMzkwODA3MDMxQTA2Cis6MTBBMkEwMDBFNTU5RDEwRjk2MDc5MkU4MUNGNzU2RDZGN0QyNDQyQzAxCis6MTBBMkIwMDBBRkUxNzY1NzVCREE3RjFGOERDNzM4RjczNTZFMEZERjVBCis6MTBBMkMwMDA1NjYxM0FFNjgxNTE0QTk4MDlGREVCREU0REYxMzg4RTMwCis6MTBBMkQwMDAyNTRDRjhBRDQxRjI1MzVENTY0RUJGRUYxRkI5QzIzRDVDCis6MTBBMkUwMDA5MkVDOEFBOEZEMkIyQkM2RTQzQzM2MEY5NDRGNzA3ODc1Cis6MTBBMkYwMDBFN0EwMUZBOTM5QkQzNkNDRUY2Qjc1N0I2RDJCNjhGRUNGCis6MTBBMzAwMDAzQzJGOERGMjJGQTBERDE2Qjc4OUZDNTkyQ0JGQjE5MEUwCis6MTBBMzEwMDBENEUxRjFCQzUyOTE3MkFGRTNCQzdGNzAwNEYxQTFEREQ2Cis6MTBBMzIwMDBDNDU4QUU4RUUzRDM4MkQxRkI4M0I2NTExNUREM0FDQzRGCis6MTBBMzMwMDBBMzdENzUxMkNENDM1MzNDMDRCMzlCMzQxQUY3NzAzRDkzCis6MTBBMzQwMDA4RUNFMkYzRjY4OTlENzhERjZFMTcwREIyREI0OEY5NUI3Cis6MTBBMzUwMDA1MUFCMTlGNjk5ODYwNThDNzBFQTYyMjM5Q0NDQjRDODdGCis6MTBBMzYwMDAzRTE1RjRGQkFFRTA5QjU4QkNDNUUyMjNDM0RERkExQUYwCis6MTBBMzcwMDA4RTNGMjM0MDg3NkIwNzhDN0ZCQkZCQTFDNDRBODZFM0RCCis6MTBBMzgwMDA3NEQwMzhEMzFDMkIyQkQxN0U0QTY1RkU2NkU0QkY3Rjg4Cis6MTBBMzkwMDA3NTlDMTNEQzBCNkRCOUQwRkY4NDE0MTM5OTQ3MTM1OUM2Cis6MTBBM0EwMDBERjI2NkM3N0FCRTBGN0Y2NUM0RUNGQzhCQTUyMzlCRjA4Cis6MTBBM0IwMDA0RkE5Q0E5QzkyOEFGQjA0MjY3MENDMjJFREU3MDZDMTA1Cis6MTBBM0MwMDA0MTMzRUMxMzI0MTlFMEQxREI4NjFCRUE4RkU5MTg2OUNECis6MTBBM0QwMDAyODFGMUJCQUNDNTAzRTZFOEZENzAwOEZFRjJDMzdENDdFCis6MTBBM0UwMDA5RkQ4NTU2NTgwOEJDMjU3MUFFQTE3NzcyRjM0QzA5M0QwCis6MTBBM0YwMDA3QTk2MUFFQTRGM0VCMUQyNTAzRUE1NzdBREExN0NFQURCCis6MTBBNDAwMDBBOTQ2MDMzQ0FERUZCQjg2RkFEMjlFOEZENThGQTk1M0U4Cis6MTBBNDEwMDBCRTk5MUQ2RjREMUY2RUI4QzcyNkQ2NEY4OEI1RjM2RDE4Cis6MTBBNDIwMDA1RkI2RTg5QjkwOUY1RDE2RTI2NzBERjUzOUVFMkJERjc2Cis6MTBBNDMwMDBDMUZEMjFEQjc0OEY4RUYyMjU1RUM4RDM1N0E2RkI0NjgzCis6MTBBNDQwMDAyMkREMkE1RDM2RDIwQjlBODNEN0QzMUNCM0M5NUVDOUVECis6MTBBNDUwMDBFOUIwRDBGRDNBOUE5QkY1OTdDN0EzN0M2RTBBNEVDQjI0Cis6MTBBNDYwMDAxQjFEMTlCN0REQkQ4REVFQTlBODc0Q0Q2MTk4NzcyNEE5Cis6MTBBNDcwMDBCRkQ3REMzRTE2NzA2MjdGM0FCNzkzREM0MUFBNjdENzNDCis6MTBBNDgwMDBFMUZCQTg3OTFDMzI5OTk4MDNFNTM4Rjg2RDE4MUYxOTdCCis6MTBBNDkwMDBDQTRGOTNGRTk5RjRDQjg2RjJDN0E0MUY5NjYzNjI3MUVDCis6MTBBNEEwMDBGOERDQTVGNERFOEE3RTdBNjFDMzZCNTVDMzE4Rjk2QkJDCis6MTBBNEIwMDBENUE4NDdFRUMzRjNEOUU4QTc0REUwNzY1NjVCREE5NTA5Cis6MTBBNEMwMDAzQUM2NkREQTczM0JCQjQ3RTI3ODUyNEQxNDE3MDVCQkIxCis6MTBBNEQwMDBEOUIzMzBDQTVFNUMyRkU4QTk4RDZDRUY0NUZERDc5OEUzCis6MTBBNEUwMDA2OEQzRDE1RUQyNkNCQkE2QkQwN0Y4REE2OUVFN0QxMkU3Cis6MTBBNEYwMDBFMzEwQUQ4QTdCNUQyN0NBQzUzQjFDOTRFRkYxQTBDMDc5Cis6MTBBNTAwMDA5QkVFMzQxNTZGODI3NjNCOUI3RDFBOUVDM0VGQkM5QkZFCis6MTBBNTEwMDA3OTVBNzE3REE0NTQ2RTRBODRGN0EzQjM1Njk4MzBEQ0ZGCis6MTBBNTIwMDAzMzI2QUY3OTEzM0UwM0MyNUUxRTVCQjhDQjk0MENFNUI1Cis6MTBBNTMwMDBFMzRBMkExNzYzN0M0Qjc1NDM3RjE3ODkzN0FCQUUwRTBFCis6MTBBNTQwMDA4NkYzNjE3OURBNDlFNDJCQjRFRTJGQzBEMDJCOTM2Q0ZCCis6MTBBNTUwMDBCNEZGNjg0NzdBMkJGNDI0M0NEOENGMzk0Mjc2ODRGMzkxCis6MTBBNTYwMDAzODVFRUMzRTI1MTRBRjcwQkIxNUYzRTUyQTkzM0E4OEFDCis6MTBBNTcwMDBCRUQyOUU0NTNCMTdEQkY3NTcwNEQ2MjMxRkE1Q0MzNTJCCis6MTBBNTgwMDBEMjU1QjMzRDQ2RjhEODZBRTJFQkEyM0Q1MTdGMTlGNUFBCis6MTBBNTkwMDA3MzdCNkU1RTEyRUU1QkY1Q0IxMTIxNTdFRTEwRkE1MzEyCis6MTBBNUEwMDBCRTk3NzJFNTIzRjQxRDUyMjNGNjBERjA3OTA3QzZEOTQ0Cis6MTBBNUIwMDBFQ0RBMzYzQTdGNjlCRjZCMUI0M0JFQjZFMzY5NzVCMjBFCis6MTBBNUMwMDBGNzgzQkE5RkY0ODdERjkwNkY1NjNENzJCMTBERjVGNUIyCis6MTBBNUQwMDBEOTE0MkZEOUIzRjY4REJGQTRGMUM1RTJDRERFQ0JGM0VDCis6MTBBNUUwMDBDRTg2QzJBQjJCRkY2MUQyRUYyMDgwNzUzQ0I3NzMzNEFGCis6MTBBNUYwMDBDRDUxMUIxRERGOTRDRjY0MjFGN0NEMzIzRjA4M0MwOUJDCis6MTBBNjAwMDBENDY3Njc2NUZFOTEyRjlFOEYyRjkxQzNDN0YyOTdEMkIzCis6MTBBNjEwMDBGODZFNERGNTBFQkI5OEJENkQwNzdGMzMxMDQ1RjdCQjQ3Cis6MTBBNjIwMDAzNUJGMERGMUQwNzY3RUMxMUM5QUI3NDY4QjgxNkRGRDhBCis6MTBBNjMwMDBBMjcwMTdDNThEODVCRjk0MkNGMEFCMjMzRTAxOEYzOUQ2Cis6MTBBNjQwMDAxNjdFNUVDMDkzMzI5N0VFMkQ5MzcxOEZFN0E3MjQ1MTRCCis6MTBBNjUwMDBCOTI3Qzg1NDFFQUZFQkNGNEYzNzVEOTg0ODYzRDUyRDRGCis6MTBBNjYwMDA1MkVGOTIyOUNCRjUxNEZDN0YwNEYzNTI0NkI1NkJDNjJBCis6MTBBNjcwMDA3Qzc2QTFDN0E1OUUxRUJEQ0Q1ODNFQTZDMzA4OEYwREYyCis6MTBBNjgwMDAwREY4RkVERjUxQ0Y1RkMzN0YwNzNENjAyQzdGNThFODk4Cis6MTBBNjkwMDBFQjZCNTA1RkUzQkVENUI3Nzg1RTg4MEQ0Njc0ODFFQkY3Cis6MTBBNkEwMDBEOTg4REUwMzM5OTBERDE5QUU0NEIxOTk3NTlCNjZDODJGCis6MTBBNkIwMDAyNzE5MUVBMzBGRkQxNTNBRTFDQkRGQUQ5OTUxQ0ZDQTgzCis6MTBBNkMwMDBCODRDQUMxQzU2RUUzQ0JEMDFENzRCNjU3Q0JDOEVGMjQxCis6MTBBNkQwMDAxM0UzMTgwMTJCRjdDQjAzRTBBN0RDQTc3OUZFNTQ4MzIzCis6MTBBNkUwMDA3RTU1Qjc0QUY5NTI5MjRFQjE3NDlENUEyRUVENUNGRkQ5Cis6MTBBNkYwMDAxRkE3OTA3RkRDNUI4Q0ZFM0FGNjE3ODhFQTRGQzY1NzlGCis6MTBBNzAwMDAwRTREMEZCQzg5RjU2NDlDRTVDQzFDRUQ3OTQ1OEZDNERBCis6MTBBNzEwMDA1MTY0NUNDMDNCODVBRjlGQUQ5RUQ3MUI4RUMxMzg4RTA4Cis6MTBBNzIwMDA5REIwNTIwQzY0OTZGQTcyNzcxM0U2NDM2NTZCMjRCRkIyCis6MTBBNzMwMDBEQzkzRDdGRDE0RkRFRkFBM0Y0MzM5Q0NFMzk4QUUwRjZECis6MTBBNzQwMDAyM0JCQkNEQjRDNzE4MDJBQzFDNzU1QzJERjkyRjE5Njk2Cis6MTBBNzUwMDBDRjg0M0VFOTlCMjJFRDlDNjAxQ0Y3RUJDMzcxNjhCRjgwCis6MTBBNzYwMDA4RURCMDNCMkQ3NDhDRjc4NUVDRUUzNkFFMzNCNjNDQkEwCis6MTBBNzcwMDA3RDk0QTc3NDk5RTAxN0NDMkZBQjRDQzNCNDJFMEU3NzAxCis6MTBBNzgwMDAzMjI1RDkwRDc0OUNCOEI4RjcyOEJBMEU4NTJGM0UxRjE0Cis6MTBBNzkwMDA4NzdDQjhDRkNFRURCNUE3MDQzRkE0MzFDNTgzNzlGODQ3Cis6MTBBN0EwMDA2OTdCMUM5RTEwRDQ3M0FBNkM1RjBGQ0NDMzczNUMzMzlGCis6MTBBN0IwMDBFNDkzNEQzODY4ODQwQjU5MTQ5QzhCRTMzMEMyRjdFQTVDCis6MTBBN0MwMDAwREI4QzVDQ0VFQUQwMTlCMUNBNkVDMjgxNzc5NDdGOTU2Cis6MTBBN0QwMDAyQzFGRjk2Qjk2RUEyODQyRkZBOUIxRDJDMTEwQUZENjVGCis6MTBBN0UwMDBCN0M3RkNCODA3RTVDNTZCRkM3RTJBNzdCQ0ZFNDAzNUQxCis6MTBBN0YwMDA3Q0VGN0UyOUQ5RDNBQzQ3RThGRjE0RjhEMUE4MUY3RTlGCis6MTBBODAwMDA3NEMxQzM1QUNENTE3MTJEQTA2NzFFRUQyM0JCQTlCQ0U1Cis6MTBBODEwMDAxM0U4OEFGMDdFRjBBQkYzNjgxRkI5ODBERUZGMTJGQzBDCis6MTBBODIwMDA2QTg0QkJDMEFGQzZFNzZGQzBBRkM2RjcwN0MxQUY0NjBCCis6MTBBODMwMDBEODM3QkQ3MjJDQzZDM0RFODQ3QUM4MTc3MTQ1MDc2QzQxCis6MTBBODQwMDBBMzMwOUVFRDUwRTk3QzREMkMzRjZFNjk3OEQ3NzExRDg5Cis6MTBBODUwMDBDOEFBQTkxREQ5NzM1MzkxMUY2RTUzRTkxQ0YyRDhERjAyCis6MTBBODYwMDA2NENGNDVCRjM1M0FBRTE2MUQ1NzhDQzRENTdBMTUxOTNECis6MTBBODcwMDA1N0IzMDI3RDVFOThBQ0YzQkM0NTE5NUYwQkYwRjhEQTc0Cis6MTBBODgwMDA1N0I3RTM5M0VENTBCQzcyNDAzQkZENzE0QjVCRjBCRDlECis6MTBBODkwMDAwMjNDOUFBNUIwMDQ3OEZGRjExREZGRjkwNEVBOTlENEFGCis6MTBBOEEwMDA4Q0MwNTQ5Qzc3RERBNDc3MkNEQ0VFRTZFN0E2QjJDNDFFCis6MTBBOEIwMDAzQURBNjFFNzc5QTM1OTIyREYyNzM2NUUzOTdERTZEQjk0Cis6MTBBOEMwMDBCN0E2MDJDQUU2OTc4RjU5ODZGRUZGRjQ1QkRFMkVDRTRFCis6MTBBOEQwMDAwMUY4ODdFNTNGNTg4Njc5QkREMzdGRjZGNjMzOTk4MDM2Cis6MTBBOEUwMDBBNzdGRkU2NjExMkY3RkYwRURCMzU5MUVDQ0JCRjhERUJCCis6MTBBOEYwMDAzMkNDRjM3NTI1NzNGREI2NDM5QzNGOTJGOEJENUVBQzM4Cis6MTBBOTAwMDBGN0ZBOEQ4RjkyMUUwNzNCODMyMTNFNUFEMkZDQTQ1RjNCCis6MTBBOTEwMDAzRjQ5RTk3M0FEODBGQUY1QTk3RDY5MkIyRkEyMEZFQUIzCis6MTBBOTIwMDAzNzNFNDFERkVGNTAzQ0E3NDIzOEVFMjkzNjlFNUYyQTgyCis6MTBBOTMwMDBGNENEMTlDMUJCNTJERjM0REEzOTI4QzdDMzU4M0FCRDQ4Cis6MTBBOTQwMDA3RjUwQzQ4MTk4MkY5M0JFNEJCNjczRjg5OEFCOUNGNDlDCis6MTBBOTUwMDBEMkZENTVGQUFCM0FERjlGMjRGRkY4OThFQkIyRUY2M0Q0Cis6MTBBOTYwMDBGRTVDQ0IxQzhERjYwRDFGNzQ3OEVEQThCNzM2OEI3OTg1Cis6MTBBOTcwMDA0MUZCNDFDQTUzOTk2NUEzRkQxQzk2QjI5OEQ2NzU5MkM2Cis6MTBBOTgwMDBFQzI3QTU4NkYyMEU5MkM0Nzg4RTk3Qzc4NTMxM0VEMDBCCis6MTBBOTkwMDA1MjZEREI4RDcyRjQwNzhFOTFENDVFNEI5OTI1ODg3MUQwCis6MTBBOUEwMDAxOTA5NkYyQTg3RjEwMDNFMTM1RDQ5QjlENDlGOTA3MzRFCis6MTBBOUIwMDAzMjZFQ0M3MEY3MENEQUFEMTJEM0FFOTJGOTBDMzZGM0RFCis6MTBBOUMwMDBFOTY4RkJEQUMxN0E4ODdGM0MyNjVENDVGQjMwNzlBQUNECis6MTBBOUQwMDA0RUYyQUI5ODc5MTZFMzdCOEJEMjEwNDQ2NkM0Nzk5ODFCCis6MTBBOUUwMDBBMkU3QTE1NzFCRTdBMUNGMzJDQzQzNjlCNDg1RDEyRTkyCis6MTBBOUYwMDA2Qzk5MDVGMzgwRkFDNzlEQTUzNERFNThCQUM5Rjk3Qzc1Cis6MTBBQTAwMDBCNzlDRjM3M0VDM0M5OUQ4Mzc5MkU3MDRBQURDMTUwNzlFCis6MTBBQTEwMDA3MDVDQjM0Q0JFNTYxQ0Q3RjNGRkE4NDlDMTBCMjM2NzJCCis6MTBBQTIwMDBCMzA2MERERjhGOEFFNEVEQjQ3RTlEQkM4OEU5RUYyQTgyCis6MTBBQTMwMDA3QzlGRUIxNjBCQ0Q2RkU3MzQ4RTg3ODcyREExNUMzQTk4Cis6MTBBQTQwMDBDMEExODUzMjcwN0Y3NzI4M0VFRTJBRTc3MjNGQzJDN0U5Cis6MTBBQTUwMDAzRTg2RUJBQjI1QzlDN0Y5RDhEREU3NkE0NjNFNEVFQzJBCis6MTBBQTYwMDA0QkRCNDRGMzBBMEY0QTlGNTg3RThFQTVENzMxQkMxM0E3Cis6MTBBQTcwMDA4MUY0NjI1MDQ1RkM3RjE1N0QyNTVENjNGN0JEMjRCRkUxCis6MTBBQTgwMDAyNDRGNzU0QjdBQTdEMzNDQzMzOTg2RkQ0MDY4NDExRkRDCis6MTBBQTkwMDA2QzFGN0MzM0I0QTc0N0VEOUY1OUQyRkQ2NDY3OUI1MzZECis6MTBBQUEwMDAzQzA1MTg2RjZFRjk1MjFERjQ3Q0U0NTk4MUE3NjY1Nzc2Cis6MTBBQUIwMDAxQ0Q5REYyRDJFNkU3RjFGNzE1RDY5RjA5QkFBQzE4RjlGCis6MTBBQUMwMDBDMkZENjIzNTk5NzVFMkJBNTIxMzk2NTIxQzREMUQ4NjJECis6MTBBQUQwMDA5NjE3QjE4NUQxQUU0RDk4Q0JFRDVBQjdGN0EyRTdBNDQyCis6MTBBQUUwMDBCNDVFRDU3MDdGREEwMEJCMzZFOTRBNkVEN0JBMkM2NDAzCis6MTBBQUYwMDBEN0VFNzA1QTE2RUYxQTQ0RUVCQzU0Q0VGRDlGMjMzOEExCis6MTBBQjAwMDA4RjQxRkM0NkYwMTcyOTlFMjlGRDQ1OEIzQjQwN0U5RkQ3Cis6MTBBQjEwMDA5Q0U3NEI4MkRGNjU3REFCQkI4MTYxN0M0REI1Nzg3NDcyCis6MTBBQjIwMDBCNDYzNTU3MThFMTVGMzk3MEJBMkVDMDJEOUZGMEJFNUI4Cis6MTBBQjMwMDBGQzFDRkUzM0QzMzlGRDY0MUVGQkY0NTc5NTg2QzFGMDJGCis6MTBBQjQwMDBBRTREOTU3NkM5RTA3Q0Y3MkZGMDBEQzkwOUFGQzNFMjkxCis6MTBBQjUwMDA0M0JCQzNFQjQ4QTc3Q0VGQTFCRUMzQURFQTUzNDkxMTg5Cis6MTBBQjYwMDAzOUUzRjlCMjU0MjU3REE0NzkyODdGQkZEM0RDRkJDQzJGCis6MTBBQjcwMDBBQkU4MEYzRUVGMjBCRDIzRUQ3MTMwNTYyOUZGMThGQ0U2Cis6MTBBQjgwMDA1RTlGMDcxQUQ5Rjc0RjU4ODlBNjg4QkYwQkZFNTdGNjY0Cis6MTBBQjkwMDBENEE4RkRDN0EzOEQyNzY5RkYyN0Q2NEU4RDhEMjdGNDM2Cis6MTBBQkEwMDBBRjczRDcxM0I5N0MxQ0ExMEM1Q0I3NEE2M0Q5MzBFNEVFCis6MTBBQkIwMDBBN0Q4NzUyRTlGRDlFOUM1OTdBRDgyNzE2NTY3MTREMTY1Cis6MTBBQkMwMDA1M0JFN0Y4NEE5NzMwNkJCMUZBREE0MUZGRjVDM0Y4RkRDCis6MTBBQkQwMDA4NUNFMTI1NEQyQ0IyNTUzODE4RTFGREZGNjdBOUE0NzQ5Cis6MTBBQkUwMDBDNzczQjQ5RjkyN0UzRUQzNTA5NkIwMDVGOUJDMjA4OUJFCis6MTBBQkYwMDBFNDZBOTYzODFGMjZDNzkzNzVGMzkxQzQyNDA3RTZFOUUzCis6MTBBQzAwMDBGNThEQzVGQ0I2NTA5M0ZGQjI2QTMzRjkxN0JFQzFDNkM1Cis6MTBBQzEwMDAxQjk4Q0FGNTExMEI4RjYwRDFGN0ZGRTgyOTNENTc4Q0JGCis6MTBBQzIwMDAwMTdDRUIwRTkzNDdBNzc1RTUyNkJEMjdENzdGQTU5NjM4Cis6MTBBQzMwMDA1OEVEMDZGRUNFNkU2MjFFODc4RTU3MjNCQjI5MUU5NkU4Cis6MTBBQzQwMDA3RDQxMjUzRUNCM0VDNkVGNkYxRTkxRDJBN0UwQkQ1Qjk2Cis6MTBBQzUwMDBGREZEODgzQzI2QjlBRkYyNTk0MzM1QURDQkVDNjE4Qzk0Cis6MTBBQzYwMDBGNTUwRENEMjRGRkIwRjlGQTU4NDE3RTBCQUZFRUMyMTE0Cis6MTBBQzcwMDAzRUEyRUM0NzhERTVBMDZCMjk1RUJERkFCNkI4OTAwRUZBCis6MTBBQzgwMDA0RDhGQjgwQkM2ODdFM0Y5QTlDMkIyNzI3MTFDQzc3MkE3Cis6MTBBQzkwMDBCNzYwQkNFNzU3RjExNEVGNTEzQkYyMjg1RUIzMjYyM0FGCis6MTBBQ0EwMDAzMDA3RjlFMUUzOTBGRTZERDMyODMxNTlBODU3Rjc5RDlECis6MTBBQ0IwMDAzOEJBMkY2MDg3RDI3MzA1RTU0QkRDNkU2MjhGMEYxMkI2Cis6MTBBQ0MwMDA4RjVBMzM5NUZCODlCNTgyQ0ZCM0QzNEIzOUJERDM0QjY0Cis6MTBBQ0QwMDAyRTVCOTU3Q0U5RUJFODg3NDI1RTZGNEQwOEQxRkU5Q0M4Cis6MTBBQ0UwMDBDQ0ZCQkFENzNDMzg1RkJEM0VENTI0RTg5NDYzQzgwMzlCCis6MTBBQ0YwMDBCM0ExRjcwM0ZDQTIyQUMyREVEQkYzRDQ1MzRGQTUzMTg0Cis6MTBBRDAwMDA3RTg0NzAyNERGODc4Q0RFMkY4RUNCMEI1MTYxOUNDNzM1Cis6MTBBRDEwMDA0NzcyNDc3MUZCQjg3Qzc1MzdBNDA3ODFCRkI3N0NBMTI4Cis6MTBBRDIwMDAwRURBRkZBMzgyN0VDREQ5REY0RUM3RkFENUJBODc5RTUxCis6MTBBRDMwMDA0N0IyNEI0RkFDMDBGQzM5MUMxNjY2OEQ5MkJGOTI0RjQ4Cis6MTBBRDQwMDA2MkY1N0JBMzczRTQ0NUZENzcwQkM4NjFGRDIyRjEwNTM1Cis6MTBBRDUwMDA4QkM4RUZEQTdDNzQ4QTBERUYwN0RERUNGMEY2QTBERDJFCis6MTBBRDYwMDBCNUQ5OTFFMkE1RjhCQjAzRTQ0NTU0M0NDQUUxNzg4MTJBCis6MTBBRDcwMDBGOEQwRTFFMTcxM0EwN0NBNUQ4QzQ3RTFGQzBCNzFGQzQ4Cis6MTBBRDgwMDAyRkQwRkM2NUJEMjYyMTdGMUM5RTMwRUQ5M0RBM0REQjg0Cis6MTBBRDkwMDBBODlFNERGM0QzRjkzODVCMEFBM0JDMDU5QjlCREYyQjIwCis6MTBBREEwMDAxQTk3Njc2MkI2NDFFNEYwQzZBOURDRkZEQjVDRThFRDA4Cis6MTBBREIwMDBBOUEyRjE2OTc4NkM4QTZENEVGN0E2OTMxRTQ0M0NDMzM0Cis6MTBBREMwMDBGN0M3OUNBNTA5RDFGODc5NTZDODgzOTYyMzdDN0VGRUU3Cis6MTBBREQwMDA4RDE5RUVFQTYyRjQ2N0ZEN0I1MTFFNkM3NkFDQjRFMTJFCis6MTBBREUwMDA3RDVEQUFCM0U0QTJFRDFDMTJGNDhBQjRCMzNEQUQzQTgyCis6MTBBREYwMDA5OURBNzkxNkY5NUY3NTdBREREODhFNTlEQzhGM0E0MDg5Cis6MTBBRTAwMDA4Rjg5NzE3Q0QzMzgxQTYwOTBGMjc0MDgyRjQ0OThCMEZGCis6MTBBRTEwMDA4MTJFQjE0RjA3QzZDMzkyMDdGQjhFQ0JDNTVDRTFCNzRECis6MTBBRTIwMDA4MDVDRkMxMzhFQkZBRUYwOUQxN0Y4MUFFM0ZFNEFEMjg5Cis6MTBBRTMwMDAxNTNDMEZFODBDNzAzNkRFNEIxNTlCNjcxMTZCQkY0ODU1Cis6MTBBRTQwMDBCRDIzRjUxMEI0QTM2MjNCMEZBM0ZEMzIyNkIyOEU2NDdFCis6MTBBRTUwMDAxQzI3QjNENkNGRDc0QjhBOUZGODA1RUMxOTFERDc4QjhCCis6MTBBRTYwMDAyQUYyRjgwNkU4ODEwQThFM0ZDNTU1QTZBM0JFQTgzRTgxCis6MTBBRTcwMDBERjlCODlERjFENzI5RUNBRTRGNkFCNzE3RkY5RjgzRjU0Cis6MTBBRTgwMDA5RUIwNjNGOTY3QjU1NTE3QjU1M0U0N0VGMjUwRkJDODIxCis6MTBBRTkwMDBBRUVGN0VCODIxREE0RTE5NkE1RkY5QUJGNjkzOEZCQTNFCis6MTBBRUEwMDAyQzE0QjdEQkE5MThDRkJGMEZBQkUwRjIyRjQ5Q0M2RjQyCis6MTBBRUIwMDBENzk0ODBCRDIyMTVFQkY5M0RGQzQwMzM4RkNCQkMzMkRCCis6MTBBRUMwMDAzREUwQThDMDM4NUFCQjg1MDU5MUVGRkU1MTlBMUU4ODE3Cis6MTBBRUQwMDA2QUU3NTJGMTJDRTNFRkMzODUxRDM1RENGMTg0ODJFQjg4Cis6MTBBRUUwMDA3NDc4NkQ0OEMxRjg3OTY2NkRBN0UyQkI0OEJERkYxMjYyCis6MTBBRUYwMDBFQjU5RDYzNzhCRjY2NzY4N0QyQUVBQUIxOTZFQUUxNzI5Cis6MTBBRjAwMDAzM0NGNjlBQzIwNEFFRUY0NEVFNTc2OTQ1OUQ4RURBRUQ1Cis6MTBBRjEwMDBBMzRGREFCMUJEQTMyNjdGN0IzRUVBMDc5NzQ5N0YzQzZBCis6MTBBRjIwMDA2QUJEOUI2RkY2REFBQUEyRTZENzgyRkI0MjgzRDBEMTM0Cis6MTBBRjMwMDA1NzIxRjU2MDk4RjRCN0Q0Qjc2NkE5Mjc1MjM0ODM5RTk5Cis6MTBBRjQwMDBBODhGRTc3QzJDRUQ5REZBNzJFRTA3RDVDNzczN0ZGQ0M2Cis6MTBBRjUwMDBDNUY0QzAxNEM0RjMyN0U1MUZDRTFGQTVFMzM5RDhCMDRDCis6MTBBRjYwMDAzOTI1RjdBQkY3NDdGQUVEMUI1MzY4ODVGNDYzOTBGRjdCCis6MTBBRjcwMDAzQkNEN0E1NzJGRDk1OTJFM0EzRjIxRURBQUEyOUYyOUNFCis6MTBBRjgwMDBBM0IwOUU0N0YxOTFGRDM3MDk2RjFBNTE3MUFCOTZEQjYzCis6MTBBRjkwMDA4MzYwNjc1RDU5OTFDQUFGRTQ4RkU2MDMxNjczQUZFMDMzCis6MTBBRkEwMDA1MEYzRjRFMjdEQTZBOTE4MEZFQ0ExNzhFRDdERTc5NUFBCis6MTBBRkIwMDA0MUNGNDFEQzU3MjFFREE1RkVGRDQxNDNEQzM1NTNFODhGCis6MTBBRkMwMDBCRDRDNTFBRTYzREMzNTE3RjdCQjhDNzFEMUUyNkUyM0ZCCis6MTBBRkQwMDAzQ0E5QzcwODRGM0UxMTEzNjcwREZBRkUwM0NGRjk2MTc0Cis6MTBBRkUwMDAzRTAxMzZCQTAzRDYxRkNBOEY1NTYyMUYzNDJCMThBQUVBCis6MTBBRkYwMDBDNEYzRTFEOUFDOTNGNjFCMzM2QjkzMENGODlFQUU4QTg1Cis6MTBCMDAwMDAzQzBDQkNERTU4OEUxMzdFMzJCNTc5MUZFMEY3OUJGQUZDCis6MTBCMDEwMDBFNzE1NjQ4NkJDRkVFQTU1REZDNkFCMzBEOTM2N0VCRTg2Cis6MTBCMDIwMDBDRjA2OUQyM0JFRDY1Q0IxNzAxNkQyN0I0MEZDQjZDMTY0Cis6MTBCMDMwMDAxOEI3Q0Q4QzJFMDczQ0FDREU2MTNDMjdFOEY3MTU5MUE0Cis6MTBCMDQwMDA3RkIwRTg1QkM2RjM4MjMyMUYxREU3OUJFOTFERDhGRjg2Cis6MTBCMDUwMDA1N0Y3MEJGRjkyMDZGNjJGREI3RDE4RTQxMkM5NUQ3MURFCis6MTBCMDYwMDA4RjcwMzYxNjYxM0I1QTU4QzE3REVGRTEwRDhDRUUxMzlGCis6MTBCMDcwMDBDRUJDOERGOTA2REIzRjM4MjBGMDE1OEI2NzE2OUM0MTVFCis6MTBCMDgwMDBGODlCMjlERTBENzdGMDNDRDVFMUI3OTlDODRFMUMwRTMwCis6MTBCMDkwMDBGMjgyRkVDRUMwM0FGMDM1MDBDRTVDQTc5MzlENzk3NTYyCis6MTBCMEEwMDBBRDg5QTFERTYwRTc5QjBDREZDMzcwMjlCRTJBRTlGRUYzCis6MTBCMEIwMDBCMDgzRTdFMTY2RDdCMTkwMDlFN0QzNzAxOUFEMzMxQUQxCis6MTBCMEMwMDBEN0M4MDgzRjAwQkUwQ0Y3MDk1QzVENjYzQ0E3OUIxRDE2Cis6MTBCMEQwMDA3MzNFNTdGMjQxNjZDQ0ZCNkIyQURDODY3NTAxRkFFRkIyCis6MTBCMEUwMDA0MDA1QzkwRkFFMTc0N0EzNUU4NDIxN0QzQ0U1QzQxMzFDCis6MTBCMEYwMDA5ODZGMzc3RDEzRTNGN0Q5MjRDNkYxRkI2QzIyRkIxMzVECis6MTBCMTAwMDBFQTA1RTBEN0EzQjY5OTA1NjhDNzZDNzVDNzk5MzAwRkYzCis6MTBCMTEwMDBFMjUwNjJFRjRGNTgyMkY4OEQxNTJDNTg5RDg1RjcxQzkwCis6MTBCMTIwMDBGNjhENTMwMDdFQkRBMjdFNjdGQjM0MjhCN0Y3M0Q4REI4Cis6MTBCMTMwMDBDMTY1ODdFM0RCMzdDQ0M5OEVDMDJFRDczRDA0QjMzMjVGCis6MTBCMTQwMDBBNkUzN0Q0MDk4NzM4QUVCMkVDRTdERTUxRUJDRTczQUUwCis6MTBCMTUwMDBBRUQwNDFDMUNBMzg2NkJDNzdBN0I1NUNCRjE3RjM0ODBCCis6MTBCMTYwMDA1QTQ3OUJDNEY5RThBODcyOThDNzhDNjk2RTk5RkY0NjQ0Cis6MTBCMTcwMDBGOTc4NkMwRUNGMEI4ODZFMUZGM0IyODc2Q0ZGNEE2OEFDCis6MTBCMTgwMDBCRkU0NkJCNDZGRTNFMzRGQzM1N0EwN0ZEMjcwRkMxOEVBCis6MTBCMTkwMDAxN0M3RjY5MUJFMTg0NDhBRUU1RkI0QTdCMUUwMkVEQzYzCis6MTBCMUEwMDBDRjgxRkUxQzBBRUZDRjhENzkyQTY5Q0M5ODk3RDBERjJBCis6MTBCMUIwMDA5RjFCRkExQkZGRkY2MDNFOEIwN0QyQzM3QzMxN0EyQ0FBCis6MTBCMUMwMDBGRDdBRjQ2ODM1Rjk2OEJDQzEwOTBFRjI4RkYwRkUyQUU5Cis6MTBCMUQwMDBCQ0E3Q0UyRUZBQjM4QkZCQkExMEFGQURBNTExQkM4MkMzCis6MTBCMUUwMDA3RDQ4RUQ0MkY1RTYwQjAyQ0Y5ODc3OThFNkI2MTA5RUMzCis6MTBCMUYwMDA4N0MyREI1MTM3Q0Y5M0JBREIxRDE3NkFDRUZERkY0MDA0Cis6MTBCMjAwMDBBRjc0NEVBRkU4RkVEMENFQkNFNEZFOTY0MjdGMjk5N0U1Cis6MTBCMjEwMDBERTFGRTIxN0Q3NEYzRjdFODEyNjlCRDIyRTFEQkYzMDA3Cis6MTBCMjIwMDBBQUUwQTVFMEY3MjhCNDZCOEFDMjZCMjQxRjY5QkIxQjk4Cis6MTBCMjMwMDBGRDA1QkJEOTZGQzNGQ0NDQjlEMzEyNjk3Qzg1MjkwQjQyCis6MTBCMjQwMDA2RDk0OUY5MEJBOTBGMjhEREIwQTFERjRGNzA1REFGMjQ3Cis6MTBCMjUwMDBCRTY1MzM0N0U5RTlCNkMyMUEyQTg3RkE5NDQ3NTUxOEZBCis6MTBCMjYwMDA4RUMzRjAwNTFCQ0Y3QTI4M0U3MDc3NDU3NTNBRkE4QjZFCis6MTBCMjcwMDBDMTA2OUU5NzI1RjM5NEE0M0U2NDYyM0Y5NEU2MDUxRkExCis6MTBCMjgwMDAyNjRDM0JEMDc3MTRFQURGREQ1MDQyNzk2ODA5ODlGRjBDCis6MTBCMjkwMDA0REY5NTc1QjZCM0QxRTJDRkY4OTlERUY2QkZFNDhFQzEzCis6MTBCMkEwMDA2QjIxQTM1MjdDNkQ0MkY5QTNCOEJGRUIxREREQThEMDgyCis6MTBCMkIwMDA3RUU2QkE4QkVGNjc3QTNGRURBOUMyM0MyRUI2ODJFN0Y1Cis6MTBCMkMwMDA2OUE1RDc2ODMxRkFEMEI4NkVCNzIyNUU3OTNFNTU0ODg1Cis6MTBCMkQwMDBFMUY4MzVCNEI3Njk1QTJBRTFFREVFQkNERDBDRkZERUNBCis6MTBCMkUwMDBEMDMzRDA5NjZBNUM1RjI2Q0M2QjhBNUQ4RjlBQzU0NzU3Cis6MTBCMkYwMDBGNzhCQjE0NjEzOEQyMzEzNTMwNTQwQzU3OUM3Q0Y0RDQ2Cis6MTBCMzAwMDA1RjAxRUZCMzZFRDJFODFFREY2MTg1Nzc1MTdFMTM1ODdGCis6MTBCMzEwMDBGRjY0NkYxNDE2QkU1Qzg1RjA4MDc5QUUzMkNFMjM3NjYyCis6MTBCMzIwMDA1RUIxRTM5NkY3MUI0QjdBNzkzRkY1QzRBM0RGRTUxREM5Cis6MTBCMzMwMDBCRDkwRjJDRkU4NDdBRTc3MzU2NjNFNjAyN0RCNTM0Q0QxCis6MTBCMzQwMDA3NDBGNUM1QzVFRDRCQzk4QTE5RUYwRUJGRTY3RTEwNkQ2Cis6MTBCMzUwMDBEMDU1QjQ4RTYyRjdDOUZFMEYzRjJGNjQ2NTFFOUI4NUUyCis6MTBCMzYwMDBCRTkzRTc2QkY4RkVEQjcwNUMzQjQ4RjcxQ0M2RjNDMDhFCis6MTBCMzcwMDA2M0JGMkZFNURGQjM3NEJFMUY2NzhENjMzNjNDNUZBM0U5Cis6MTBCMzgwMDBBQzhEQTNCOEE2RDUwQTMwOUVCRjExRjc4QzNEMkNFMjM4Cis6MTBCMzkwMDA3MENEMEFEMzMyQkNEMUZEODUyOThGNUVCNTVEOTU4NzBFCis6MTBCM0EwMDBGRUM0NTFEQjIyMzc5RDZCMTNGRTk1MzlEMTRGNzk4QzRBCis6MTBCM0IwMDBBQzIwQzlFMEE3MUUxNUU3RDMxQTZGQ0UxRDg2NzFCRDVDCis6MTBCM0MwMDAwNDI4RUI0MTdGNUJGM0Q4OTBERTMyOUVFMjFBRDU3QkY2Cis6MTBCM0QwMDAzREVBRjFERjNFRjdDOTBEMzZENERCRTgxQzk3MzNENkUyCis6MTBCM0UwMDAzREVEQzM5RDc4QkZCMDVDOUZENjczRkM5RThFN0U1OEFBCis6MTBCM0YwMDA2QkEwM0MxMUVCQjkxQ0MzRkJCMEYwQ0ZGQUZEOTYxNDY3Cis6MTBCNDAwMDBBRDlBRUU5RjEyN0U0MzI1NzNCN0UyNzc5NTgwMUNDM0Y5Cis6MTBCNDEwMDBCRDAwRTJERThGODFFRDY3MTlERTg3QzFFRjhFREUyNzhBCis6MTBCNDIwMDAxOEJBRkQ3OEMzRkQwMjU2RjA4MzA2NkYzRjNGQTY3RDM0Cis6MTBCNDMwMDBGN0EwRUQ0N0RBNEQzNkI0REJBNjcxQjkxMTRDODkwQjk0Cis6MTBCNDQwMDAwRDE2RjdGQjcyNUFENTdCQjhBNDg3Q0E2M0ZCNjI5QUM0Cis6MTBCNDUwMDBDOEJGQjc4MTQ0QzM3RDI5QzEzRjVCRDIxQjI4QUY0RDE0Cis6MTBCNDYwMDA4REUzRkJBODY2MTAyM0M4NEZDNzlDQjUzQzFGMjNDQkI4Cis6MTBCNDcwMDA5OEQ3MjZFRjE1NjlDM0ZCNDJBMEJDQ0E2MUI0RDcyQjhECis6MTBCNDgwMDA1OURGQjE4OTBBRkFBRjQ2N0I3RDNBNEE1MkRDQUY2Mjk2Cis6MTBCNDkwMDBCMTc2N0MwM0VEOUI5QUIzOEM3MkExNDNBQzE3OTNCMzQ2Cis6MTBCNEEwMDBBNDg3RjJFMDUyMUQ5NEU3MzA1NERDRTFDRDI2NDZGOTQyCis6MTBCNEIwMDA1OUU2Nzg3RjAzRUFCQ0I0RTlEQTg4QjYzMjgwMTMzOEZCCis6MTBCNEMwMDA5RkU1NERDRjU4OEU3MURFMzcwNTNGQjc4MTFDQTBGMzQ1Cis6MTBCNEQwMDBBMzhEQzM3NkE5NTFFREQ2NThDMkEzNTFBRkQ0OThGODI1Cis6MTBCNEUwMDBCOTAwRkE4MUZFREY0QzFENEVGMUQ3RDg3RUU1QkQzMUEzCis6MTBCNEYwMDAxMjVFRDZBMDRDQ0I4QjlBREY5QjYyN0RGNEY3Nzc2QjA0Cis6MTBCNTAwMDBFNjJFQjQ2QkZCRkJCMzg2Mjc1MTdGRkQ3OTQ2QTJCRkM1Cis6MTBCNTEwMDBCNDZGRDZERjVGQzRGQTk2RkQyREZCQjY3MTdFQ0IyQ0RGCis6MTBCNTIwMDAzRDM0QkY2NUUyQkU1MkQ5REY1RjcwN0VCOURGQTAzRjE4Cis6MTBCNTMwMDA5MTFGRDZERkRGNzc4Q0YzNUI2NkVEQTFGOTJERUJGNzdBCis6MTBCNTQwMDAyRjQ1N0Y2OURGQUMzRjk5RkY2MEI1MzZENDIyM0YwREIwCis6MTBCNTUwMDA5NTA3MjFGMzFGMjY3NzY0MUFGMjFGNTgzMDczNkU2NTIyCis6MTBCNTYwMDAxRTYzMEYyODlDMkY1NjFEMUFGRDUzRTQ4QkIzNzMxQkNCCis6MTBCNTcwMDAzRDY0QTcwODdGOEZDRTBCQTk3NDVFODhGNEU4RDU1OTg3Cis6MTBCNTgwMDBEQzBFOTFFREVGNjkyQTYzQkUzMTNDNEU4NENGODIwQTE2Cis6MTBCNTkwMDA4NUNFMjM4QzJENTM3Q0I4RUZCNjAzRTQwN0RFN0ZCNzRFCis6MTBCNUEwMDAxM0Q2Mzk5Njg3OUFEMkU5QjlCQjQ5QTdFNzYzRTA1RjFBCis6MTBCNUIwMDBGQTI4MkVFNjIxRjg4N0QzNzlEQ0U1ODEwQ0Y3OTI1NTNECis6MTBCNUMwMDA2ODdGNTRDNkYxN0NFQzhBQTk2MEQ5NDZGQzM3NTgyRkI1Cis6MTBCNUQwMDA0N0VEOThGNzc4MkQyQkMyNzM2OEY5MUQxQzlGMjlENTZDCis6MTBCNUUwMDA2OTc0REY3RDVDRDFGMTlFMjY4MEI3OTRBOTNBRTY5OTEzCis6MTBCNUYwMDA2RkQxMDc4RkYzNkM5QkNFRTNCRjVCNDQxRTY1MTBDRjBBCis6MTBCNjAwMDA0OTkyNTIwMTdGMTJFNkJGNUM5MDhBQTk3M0U5RkNDRDkyCis6MTBCNjEwMDBENURGNDkyNEZCQTZFNjVCQkQ0RTM3OENFMzA2QTVFOEUzCis6MTBCNjIwMDAzRkYyMDAxRjdGMTVGNkNERjI5QzJCNDkxRUM0RkFBN0VFCis6MTBCNjMwMDAyOUE4QTk0QTMwQkY1MDBEODVFMEQ3NDVDRTQ1RTRERkEzCis6MTBCNjQwMDAyRUJBODZCMTI0RjhGRTZBRkMwRUY0RDRBQkMyM0U3QTYwCis6MTBCNjUwMDBBNUQ3Q0FEMEZGMEI1NkYzRkRFQzFCRUUzMkZBQTUwRkFGCis6MTBCNjYwMDBEOEMzNkVCNDBCMUYyODRBNjE0ODhGOUFEQjhDRTU1QjA4Cis6MTBCNjcwMDAyQzdDQkQyRDhBRjE1M0FGOEVDOTAzOTJGNzFGNkVDMThBCis6MTBCNjgwMDA1RkE3MDAzRUE3OEI3QjVGNDQxRUQwNTVEMzc1QUVBRjNFCis6MTBCNjkwMDBCMzkyMjhFOTVCOUVDRkI0NUFEOUEwRkI5NEIyQkRCRDRBCis6MTBCNkEwMDAyOEI3NTBDRUE2RjgwODBGMzI2RjhFQTk3QjhCRjA3QjlGCis6MTBCNkIwMDBEOTlGRkNFRTYxNjU2RkM2QzVFMkE5NjAwNzlFRUMyREJGCis6MTBCNkMwMDBFMEZBMUVFREY1REREMzhERjk0QTY3RTc4RUZDN0UzNTk1Cis6MTBCNkQwMDAxQjhDNkZGQjM0OEM1M0M4RjFGRjZGRjE2QkNENzQzRTQ0Cis6MTBCNkUwMDBERjU3Njc3RTU2QzJDRkRENjVCMUU4RjM3NjMyMUY2QzU3Cis6MTBCNkYwMDA1MTNGQUNEMTdEQzIzMjFGOTBBNUY3MTUyMkJERkY3RDExCis6MTBCNzAwMDA1QUJDRTcxRUUyM0Y2MThGODRERjMwNUQ4OEZGRkFFREFGCis6MTBCNzEwMDBGNThGMjNERDk3NkQzOEJGMkFEQTFCMEFDRjQzREQzNzVCCis6MTBCNzIwMDA0MTNGNTFGOTkyMkRDRDlFNzQzQTVGOTdDQUY3REY4NjVCCis6MTBCNzMwMDBBNzU0N0Q4MEU3QjlCMEZDMUQwMzdGMTlDRjZEQjUxQzAwCis6MTBCNzQwMDA3OTUyNDFCRkU1Mjc3OERFQ0QxQ0U5MTdFM0MzNkQwRUMyCis6MTBCNzUwMDA2QzM3QzRFMzRBRTEyNzI5MkU5QzU1MUI1NjVBMEIyMzBDCis6MTBCNzYwMDBFNzgzNjJFNTYyRDYzQUUzRjlCM0Q4N0IxNEU3Mzk3QTI2Cis6MTBCNzcwMDAzNTQ1Qzc3RDgwM0UzQUQ3OTgzMzQzRUNEQjIwOEVCMTA4Cis6MTBCNzgwMDA1RTJBQjcyN0Q1NEMxM0NGMUYxOUExNzNGQjMyQUYyRkY5Cis6MTBCNzkwMDAyNzdBMUY0NDlEQzFFRDg2NzlGMUFGREZBNjgzRThGRENFCis6MTBCN0EwMDBDN0ExQkI5NjYzOUVENEJDODRENzZGQ0IwNUY4RkNBMTIwCis6MTBCN0IwMDBFRjJEQzczQ0FBNzk5OUFGN0Y5NjBCRjJGNkNCNDNGRkVBCis6MTBCN0MwMDA4Nzk3OEY3QkZEQjM5MTY4MjMxRTZFRTJFNTUzMTkyMUE1Cis6MTBCN0QwMDBDOTc0MzhCODlDRjY4NzY2Qzg3QjEzN0JFOEJDNzYyQUE4Cis6MTBCN0UwMDAxRUFDOThGNENEOUZBQUQ1MzRFOEJBNzRDQzkwNzE0QkI2Cis6MTBCN0YwMDA0NkU3QjNGRDA3N0Y3NzAyRTU5NDVGQzY3OTdEQzY3RDk2Cis6MTBCODAwMDA0RjI2RUU0REJDNEFCMjU3OEE4QkVDQTUyQkYxNzdDMDgwCis6MTBCODEwMDBFNzU1RTJCRTFEOTMyRDRDNzgxRDEzQjlDRkU0QTFBRkJGCis6MTBCODIwMDA3M0RGNEVFNDdDM0NCRjNGQTg2NTIzMEIxOEVGNDVGNDYzCis6MTBCODMwMDAwOUZFRTc3OTQ0NzIzQ0IyRkYwMUUzQzI3QjAxOTNBMkE3Cis6MTBCODQwMDBDN0I1ODNEQTkxRTNGQUE0QzgxQTU0MjY0NkY2NzFFNTFGCis6MTBCODUwMDBCODNFNTFGQTc2NjJEMEEzRUVEODJGNTcyMEREM0U3MTY0Cis6MTBCODYwMDBGNkU1RTBERjM3MzkzRUUzMURBMkUzMjdBOTdEM0IxNTZFCis6MTBCODcwMDA0RjE0NkNFNjc0RjQxRURFNEVGNjU0NDU4NkNGM0IyMzFGCis6MTBCODgwMDAxNUVGMEZFMEY3MTZCNDBCM0I3MjZCNkEyMDg4N0UzRDE0Cis6MTBCODkwMDBGMDFCRTU3MTA2QjNGOUI5ODZFQTEyRTNERjYxQUIxMDdDCis6MTBCOEEwMDBGQ0Y1OUIxOTdDRkY3ODk2NzU1QkMzNkIyNTc4OEZCQTg2Cis6MTBCOEIwMDBDMjlBQTE3RUZERjlCMzE2RjRGQkU3MURFNDdGQTc3NURDCis6MTBCOEMwMDBGRDgxQjcyREY0NzcxOTEwODY3NkQ2RUZCMDBDRkE3Nzk0Cis6MTBCOEQwMDBFMDBFQ0Y1MDI1REQwREZFQ0FGM0Q5Rjk2RDI5MzA5RTVCCis6MTBCOEUwMDBGNUFCRjhGREQ4OERCRjRFOUM4NTcwRTMwQTlDMjVGRTE0Cis6MTBCOEYwMDAzREJEN0RCM0YwQjM2NUZFMjM2REY4NUNDRTdBOUZDNzg2Cis6MTBCOTAwMDA3MzdGNEIwMjQ2M0ZFMkZBNUFBM0REQkZBQ0MxNjhBRjdBCis6MTBCOTEwMDAyRkRGMDZENDAxQkRCNjdDNjM2NkNDM0Q3RUZDN0VDMEM1Cis6MTBCOTIwMDAyNTgyOUU0QkQyRUZFREMxN0IwNzk2QjA5OEZCMDE4MzM5Cis6MTBCOTMwMDAzQzhFNzQzRDlGMDEzQzhERjE5MTc5RjhGN0E0NzAxRTA3Cis6MTBCOTQwMDBFQjU0OEFGMzNFOUZCRDU5QzNGMzcwRjUwREZDNUVCMjE0Cis6MTBCOTUwMDA1OTVEOUY1QUE4MUNFQUUxN0U1M0RBNzA3RTBGOUU5NENGCis6MTBCOTYwMDA5RjUyQkY1RkZGREMyRTMzQzYwQjYyRUYwOTVDQkU3OENGCis6MTBCOTcwMDAwRUREMDdCRTU4NUZDQkY1RkI4ODNGQ0U0QTgyRjdCMTlDCis6MTBCOTgwMDBGN0ZGRDU3NDcxRkQ1RUIzNTEwOUUxN0RCQkQ3RDcxQUJFCis6MTBCOTkwMDBGRDgxNjVBQ0E3MERGRDk5NjUwREM2RjdDQjM3MUFFMUEyCis6MTBCOUEwMDBFRkNEMTA3QTZEMUMxQjg3RUI2M0QzMEM0NUEzNzNENUM5Cis6MTBCOUIwMDAwMjNFOURGREM3NTdDMkQwN0Y1NTg2QkY2RDA2RjBDOUI4Cis6MTBCOUMwMDAzQTRCNzgwMkVBQjlBQThDMDBDMUIyMUNERUFGRTc3QTIyCis6MTBCOUQwMDA4OEVCN0YxM0FDMjQ5MkJGNjYxRUI3MDhENkYxN0JEOUUzCis6MTBCOUUwMDBBRTFGNjAwRjQ0RDkwQkVBNDBCODRCQ0E0RkJCRkYzNkJECis6MTBCOUYwMDBGMkMzOUU1M0U4RUY4MjU3NkIzRTJEMjlDQTRGOEVFNTY2Cis6MTBCQTAwMDBDMzVGMEJCRTdFODVGNTE2RTJCOEYyOTFFOTgwMkVGOTkwCis6MTBCQTEwMDA4QkY4REY3RENFM0ZCQzgyRjIyQ0YzOEIxNThGODlENjVECis6MTBCQTIwMDBCMTg5NkRDNEZCQzQ0MDVFQTA1QzQwRkIxM0VGQzlDODg0Cis6MTBCQTMwMDA1NzNCMTc5MzlDOUU2ODcxRjNGQjc2RDI1OUY0RkFGNzQzCis6MTBCQTQwMDAzREM5MTRDNDE3MEUxREZCQkQyQUFCOUJFRURCOThERjZFCis6MTBCQTUwMDA3MUVGQTcyOEU3RjI0NkY5QkMwRkMwRjhCNjhBRkJCNDJECis6MTBCQTYwMDBCN0ZFNUEyMTdCNzY3REUxMEIyNDBGODcwMTVCNjBCRjE3Cis6MTBCQTcwMDBFQkQzODU1Q0VDMzJERTgzMzEwQ0U1MTQxRTY4OTk1QkY4Cis6MTBCQTgwMDA0OEZENjZDOEZEMDc5OUU3MUJBRUEyN0JBNTg2ODk3RUE3Cis6MTBCQTkwMDA3RjNGNEJBNzc5QTdBREVENTQ3MERFRDkyQ0Q4OEM3MUMwCis6MTBCQUEwMDBBODNEMjgwQjUzMjM0RkI5NEY3MDRENjRGRkJDMDJFOUVBCis6MTBCQUIwMDA1OTk3REU0QkY3QzJDOEZERjM0MUVBQ0Q0NkI5MzNBMDMyCis6MTBCQUMwMDA5RThGMTlGMjgwNjZBOUU3NURCOEJGRERGOERDQTg4QjEwCis6MTBCQUQwMDBFNjc1QTgzNkUzRkQ5MDY2QjdGMTdFQzhBQjBBOENFQjNECis6MTBCQUUwMDA3QjlFQzdCOEFFQUYyRTFCNjUyODVGRTAxQjY3Mjg1RjQzCis6MTBCQUYwMDAzNEE3RDgwMDVGRTM5RjZBQTg3RkRERTI5OUM2Mzg0Mjg5Cis6MTBCQjAwMDBCQUYxN0U0OEJCNkVCQzFGMzJCRUMwNzgzRkE0RDM2MzdGCis6MTBCQjEwMDBCQzFGOTJBNTc0NTI1RTlBQzUxNkVDMERFODc4QkYwMDYyCis6MTBCQjIwMDBCRjg3NTZDQUU5NzEyRTFCNUQyQTE3NTc2Qzc3RTBCM0ExCis6MTBCQjMwMDBCREM4MUE0NkJBQjUwRkU3RkJCOUQ2MTc2RjRGMEYyMzJBCis6MTBCQjQwMDBENjEzRjZEQTJBRTFGOUI0MTJBQUMyRkQyODlCRjAxQjNCCis6MTBCQjUwMDAyRkJCOEIxOUU0Rjg5NTMzQjkxQzk3NEZFNjBCQzQ1N0VDCis6MTBCQjYwMDA2MjVDNzY4RjlFQzlGM0I2N0IyRUJCNTg3RUM1QTUzRTIwCis6MTBCQjcwMDBGRjJGQzI3ODRCNkIwMDgwMDAwMDAwMDAxRjhCMDgwMDc1Cis6MTBCQjgwMDAwMDAwMDAwMDAwMEJFRDVBN0Q1MDU0NTc5NjNGQjdGQjY0Cis6MTBCQjkwMDA3NUQzMEQ4ODBEMjgxRjQxRjRBMUEwMjYyMDY5NDE4QzgyCis6MTBCQkEwMDA0RTY2MzZBRkJCODE2OTNGMzI2OUZDOTg2MDEwRDNFQ0JBCis6MTBCQkIwMDBFODE2MTM4MTI2RDE0QzkxQUFEREEyNTU4NjM0NjZGRTgzCis6MTBCQkMwMDA0OEFDNENDNkE0NTJCNUFEMTUzMzk5QTk3MTE3MTM1NjlDCis6MTBCQkQwMDBEQjRERUIzNjJBQUVDOTlBQjFERDMxMTk0RDJBMjk3NEY1Cis6MTBCQkUwMDBERDRDQUM4QzBBMzFFMzk4NUQ3N0RENzNFRTdEOEZFRTMyCis6MTBCQkYwMDBENzNDMTJCMjM1OTVBQTlENUEyOEVBNzJERkJCOUZFNzVGCis6MTBCQzAwMDBGQkZDQ0VCM0E1MDNDMDIyRkMzQjY4MEJFRjJCMDFCOEI1Cis6MTBCQzEwMDA5N0UxRkY0QjAxRUVEMENGMDMwMEE3RUI1QzE2QTUwNjIyCis6MTBCQzIwMDBBMEUyQUY5NTY1MzAwRERGNDVDMDUxODZFM0Y2NUE0MTdECis6MTBCQzMwMDBBMTdFRjBBMDk1Q0ZBQjg4MEM5Qjk0Q0NDNEJDRTcxNDNDCis6MTBCQzQwMDA1QzY4M0FDMDRGN0RFRTY1QjQ3RTQ3OTQzOTAwQzc3NTk1Cis6MTBCQzUwMDBFQ0JFNjQ5NTJCQTgzRjk4QTU2MDVCRTlCQjY0ODVDQ0RFCis6MTBCQzYwMDBFNEU3MTdBREY0QkM0MzFBNDk3NzYwRkJGN0ZENjY2RjU0Cis6MTBCQzcwMDBCODIyQjFBRUQ2QkExNDJCNUZGRjY0MzFCNjc4OEVFNjI3Cis6MTBCQzgwMDAyN0NERTEzNDNBM0IyODJCNUQ4QjAxMUFFOTVGMTk5RkUwCis6MTBCQzkwMDAxRjE4ODk5OTcxRkZFNjc2RTYwQ0UyQTM0NkY5QjE5NTgzCis6MTBCQ0EwMDA5MDg1RkZGODJEOTc4NjZEMDAzNkZDQkQzMzFCQ0Y1OTZDCis6MTBCQ0IwMDA5OEI1MTdFRUU1RjMwMUYyMDAxRTA1RjFGM0M4OTI5ODZFCis6MTBCQ0MwMDAwNTRDMDA0REFENjIzQ0ZERENDMUJGNDdEN0Q0NUY2MTgwCis6MTBCQ0QwMDA5NUI4NkU2N0NBRjMxOUJEQTNFNjJDOUEyRjVEMUE5RTFDCis6MTBCQ0UwMDBBRjNFMjdCQTJBNTNBNjdENUM4RTlENzJBOEI4MzMwNzUzCis6MTBCQ0YwMDBFMEJDQ0Y2NDc4QUY4NzNDMTJCRkQ3NzlCRjg3RDNGQjU2Cis6MTBCRDAwMDBBNzQ4MzczMzIzM0FBNkQyNDlEMEVGQUJFOEIzMUZDRkM5Cis6MTBCRDEwMDA5RUNDQTdENDcxNkIzQzgyNEZGQjE5MzRGNjY3OEU3RkEzCis6MTBCRDIwMDBGRjMzOTU4RjdCNTlCQzBBQ0MwMDAxMUYwQUNDNTRBNDY5Cis6MTBCRDMwMDA4N0FENjVGM0U1NkFBMkZGQ0Q1RTQ2RjRGRjA3MDY2OUFECis6MTBCRDQwMDBCOEZFMDc4MzZGRTVDOTUzMDBBQzA3ODZGMjg2NzFCRDY0Cis6MTBCRDUwMDA0MEZGNTAxRTJDMDA2OEIzQzhEQkE0Njk1QzBFOUNEQjVFCis6MTBCRDYwMDA5MDJGMUQ5MTE4M0Y3RjdCN0ZGNTIwM0Q2RjhGMzBBNzZGCis6MTBCRDcwMDAxRDhGMUExODE4QURFN0Y3ODRFMTVFNDcyNkVENkI3QzNFCis6MTBCRDgwMDBBRTY2QzVDNENGRDVBQUM4QkMwREY4NzFDRjY5MzQzRjIzCis6MTBCRDkwMDAyRDFDNjZDNEY3NjEyQjk3OEJDMzBDOUVDNUZFREUzRTNGCis6MTBCREEwMDA1QjYzRDg2MDlENzU0NDZGOTRFRjEzN0Q1NjkwNTA0RTQxCis6MTBCREIwMDBEQTcwM0VEREUzNjRGMTQ5QUI4REU0RTYwMERFOEJEMTYxCis6MTBCREMwMDAzRENFQUVDREEwRjVCNzVBNDA2Njg5RjM1RDJEOEU3RjhFCis6MTBCREQwMDA0NEY3QkZCMEQxMDI0MTdDQkU2M0EzOTlEM0ZCQzI1NkU2Cis6MTBCREUwMDAzMzVGQzdCQ0U5REY3QjhCQjBCRjBFRTUyRjBEOEY3QUM5Cis6MTBCREYwMDA3Q0UzOEQ5MzQ1QjhFRTg1NTZFQ0UzN0QzRDlCMkM1QzUyCis6MTBCRTAwMDBGRkQ2M0RDRUY4Rjg1NEY5RDVFNEY1MjU1NTNFRDdGOURGCis6MTBCRTEwMDBGNUYyOTYyQUFGRTNFNEI0RjVFQkM5NjkwRkM5NjkwNkY4Cis6MTBCRTIwMDA5N0QzQ0EzQjY2Q0VGN0JBN0M5MjlGQTdDMEI5OEZGNDZFCis6MTBCRTMwMDBFN0Y2NzE0QjNFOUU3Nzc2QUZDM0I5MURGQjBCQ0NFMUE1Cis6MTBCRTQwMDAxRkU3OTE1RDM4MkVERTJGNkNEQkMzNDg1RkYwRjA4RjZCCis6MTBCRTUwMDBEMEJEOEE0MjU2RDhDOTQ4OEUwNEJGN0VBNkYyNEI4NjEyCis6MTBCRTYwMDAxMTk2NDFGQTJBQzU2N0ZCNTAzRTcwNkI4NUY4RkNCQTAzCis6MTBCRTcwMDAwNTFBMEY1NEQwNzM2MTVGMTYxQzJBRDhCMzMzNDk2RTZDCis6MTBCRTgwMDBFQjU1NzlCNDk5QzBERjhGRTNDQUFERTAzRjkwNDlFMzQ5Cis6MTBCRTkwMDBGQkVGNkFDMDc1RjZFMzdDN0EzRTUzNURBRjZDQ0U0ODJCCis6MTBCRUEwMDA3RDAzQjY4NzY4N0ZFNEYzMUVGNTFDNUFGRjA3MjRGRjY1Cis6MTBCRUIwMDBEOEMyQ0IyNjA2NDhGNzA3NkQ4MkVFQ0JCQjYyRUJFOTEyCis6MTBCRUMwMDAxRThCNjZGODdGNEVGNjZGRTVDQ0Y3REEwMEVENDQ2ODFFCis6MTBCRUQwMDBGNkRCMTU3RTNBMUYzODRENDRGNzgwNEFGN0UzNEI3Rjc3Cis6MTBCRUUwMDBGN0YyMTZCQ0FGRkRFRTc0Q0VENzg2NjMyRkM2ODlDRkFFCis6MTBCRUYwMDAxREE1MTIxMERGRUQ2NThCRjJGRDA2RjJBN0I1ODE1QjgzCis6MTBCRjAwMDAyNUUwQ0Y0REY0M0JBMkEzRjU4QTgxNUU2RjUwRjU3NTE1Cis6MTBCRjEwMDA4MTU1REMxRkEyNDhBNDQyNkU4RkE1MjU1NTg5NzFEQTkwCis6MTBCRjIwMDBGRDAxQjZGM0ZCRDlDQjVFRTE3Q0RBRjIzODJDMzRGM0I5Cis6MTBCRjMwMDAxMzNGQzdENzY5NkEzQkNCNUE3MDlEODcyRDhBMjUxMzVCCis6MTBCRjQwMDBFOUZDREVENEM2Q0Q5N0NCMDBERUVFNDYxMzg5MTczOTY3Cis6MTBCRjUwMDBERDZEMDNGRjNDODA1Rjc3M0I3ODNGREU1REMwRkJGRjFDCis6MTBCRjYwMDBEQTJERjM3NkRFNENERkRCMEFBRUIzRjY0NDY3MTlEMTg3Cis6MTBCRjcwMDBFQjc4RjEwQjNFMzdFRTczRkRCNDg1RDMwMUMwQ0RFOTBDCis6MTBCRjgwMDBCNDQ1OTVCRDFCNTEzM0Q4RjBGRDhEMDExNjA2OTYzODhBCis6MTBCRjkwMDBGRjg2NUI0NUUwNDc3QkYyM0VFRDg3MTNEQkJCN0VDMzRDCis6MTBCRkEwMDBFRDlDQjM3NUI0NUVDRTI0QjlCQUQ4NEJGRDQwRDcxRjEzCis6MTBCRkIwMDBFQTAxREI4RkQwNEY5MDdDMDUyMjBDMEE3MDlERjVCNzBCCis6MTBCRkMwMDA3MkY5RkNGNkM4NTlBQjRDNzI2MDFBQTkyN0ZBMDc4RkIwCis6MTBCRkQwMDAzMjIwQjkwQzc0OEU3MkZCRjkzMkRFNEJDMTczQTdCQkYxCis6MTBCRkUwMDBCMjM5NUQwMkQxODUyNkMxQ0Y0NTI2RTJGRjEzMkFGRjczCis6MTBCRkYwMDAwN0VGRjk4RjJDQjI1RkI2MkVGOUNDRkRDNEM3NTM2NjlDCis6MTBDMDAwMDBDRUM3OURFRTkxMkM4NzAxNUZDRUUzQkE5MDI2Q0U0RjJFCis6MTBDMDEwMDA2REVBRkI0NjZCQjBDQzg5RjMxQTU1Qjk0RDdENkY3NTRGCis6MTBDMDIwMDAwOUI5NDQwQTVCN0M1MzA0QUQxOEQyNkRCRDJBNUZDREJCCis6MTBDMDMwMDA3ODk1QTkzOUQ4OEZCMDU4M0FFQTZENzNENDczNDVBMjcwCis6MTBDMDQwMDBCNjkzQzEyNTlEM0QwMEI4QTRFOUIzNzk2Mjc5OUI2Qzk0Cis6MTBDMDUwMDBEQjQxRUI5NTI1RDk0QjNGMkUzQTNGQjE1RjUzNkIwNjQxCis6MTBDMDYwMDAzOUQxQTRGRDgzRkMxRTY5QzVBNUY5N0U4MzdCOEVDOUU5Cis6MTBDMDcwMDBGQjcwMTFDOEM4QUY4RTEwMDMxOUU1QkVGRDU2Mzk2RkFECis6MTBDMDgwMDBBRjFEN0U1QTI2M0RCMUE1OEZCQzQwN0UwMUU2OUExQ0FECis6MTBDMDkwMDBGQjkwQkZFRDQxNTA5MkZERENBODVCRThFREE4NUJFOEFBCis6MTBDMEEwMDBGMTRDMTc5MzNFQjY3MUJCNTU0RUY3NzYxN0ZBNEI1Q0MxCis6MTBDMEIwMDA3ODhFREYxN0JGOTc3NTBDMUZCNzU5NjM5NTYwRkNCQzZFCis6MTBDMEMwMDAwM0QwMUZEQjQ4OUY3MERGNzJFNENGRUIwNkU3QkVFOUM5Cis6MTBDMEQwMDA3NkNGQTU3OTMzRTE1OTJFREY4MEYyNEQ3Mjk1N0FDRjc0Cis6MTBDMEUwMDA4NTJFNzEyRTREOUZENzFEQkI2MjFEMjZCOThEMThFQjc1Cis6MTBDMEYwMDAzM0YzQjgxNkQyQkE3RDAwNUUyMzNGRjc0N0Y1OUVFREM1Cis6MTBDMTAwMDBCQjE5QTc1NzYwNzcyRUE3RDM1NUQ4RUQ3M0EzNUM1RUY0Cis6MTBDMTEwMDBDNTczRUM0NUI5QkNFRUYzNjU2NEUzRkNFQjdFNUY0NkFBCis6MTBDMTIwMDA0RTY2NDJGRjNCNzY2N0YwNzk3REE1QUI3MjVCQjA1RkYwCis6MTBDMTMwMDA0RjcyOEZGQjVEOEI3ODZDNDRFNzBEQkI4NURFNjlGQjJFCis6MTBDMTQwMDA3RDE0NUI5NzRCRkE1MzYzMTlCMTNBRjFGRDhDRThDNTQ2Cis6MTBDMTUwMDAyQzhBRUI2QTBFQUZDRTI1RkQ5QkU4OUM4QkREQzIyRUIwCis6MTBDMTYwMDBCNTc3NkREOTdDMzk1N0M4ODMxOUY1NjlCM0VBQzcwMjI5Cis6MTBDMTcwMDBEQjYzNTZBMkZGRTYyRUUwRjIzQjc4RjA4MzBFRDJERkJGCis6MTBDMTgwMDA2QkQxMEMwN0Y5QkRBQjQ3MzI4MjY0RUZBRjFGNEQwQjhCCis6MTBDMTkwMDBBMzI1ODYzNjkyNzdCNDY3NTcyREMzREZFM0YxRTM2MUI5Cis6MTBDMUEwMDBCMzIzODhFMzAyNDczRjdEODFGNDMxNzAxMEI1MTFENzg2Cis6MTBDMUIwMDBERDFDN0Q3QTk0RkM1QjVCNzREOTE1ODlEQTVGN0RCM0Y1Cis6MTBDMUMwMDBGQUQwREVGNTIzN0U1RkFERkY2OUI3NEQyNkZCNzk0REQyCis6MTBDMUQwMDAxMjc2NjI3M0U0MEQxRUNGNkVCRTdEQTNEMjU3NDFGNzc3Cis6MTBDMUUwMDBGQ0NGQzU2NENGMDJGRjc0NjMzMUQ5QjFDMDlCMzcxNjUxCis6MTBDMUYwMDBEM0ZCQzBBMThDNEVBM0Y4QTRENTYzRTZGQ0Q3RkM2M0E3Cis6MTBDMjAwMDBDOTM5NDk0OTFFOTdBREZBQUY5MjlFNjdCREIzOTE3RTc5Cis6MTBDMjEwMDAzNTY3RDczOENENzJFMjdENEQ5OUM5NDdFMzZCREVBRDA2Cis6MTBDMjIwMDBDREREOTQzNEFGMjcyRTc5RTlGOUEyQjNCNTE5MUI5MzZDCis6MTBDMjMwMDBFNEQyRUFCMUE4NzYwOEI1MUFFRENGM0E5NTg2RUIwQUIyCis6MTBDMjQwMDA3RTEyMzc1NzUyNUYwQUFBNzEwNEJCQzNFMzZEOTAyNTczCis6MTBDMjUwMDBFNDczMTNGRDg3QUFEODE3OTc3ODNDMTM2QzM1ODdDQjA2Cis6MTBDMjYwMDBGMDdENTNEQ0E0RDgyQkU5M0RDRTRCOEEzMzAwN0MyQkU4Cis6MTBDMjcwMDAxNjEwQkY3RjM4RERCOTUzRTZGRTFFQkFBOUZGNTQ1OTI4Cis6MTBDMjgwMDA5OEZDM0QwNDZENDNBNTQ5NzFEMEJBQjgyOTk2ODY3MkQxCis6MTBDMjkwMDBEMzE4NEQ4QjUxM0NCNDJFMkU1REU0N0QzNTNFRkFDODRCCis6MTBDMkEwMDBGMUZBOEY2NzAzOEY4RjJFMjdDNzM5MTgwRjVERDZDNzE2Cis6MTBDMkIwMDA0QjMwODVDRUFCQzU0QkVGNTE1Qzg1RjE2Q0YzRDY5ODE2Cis6MTBDMkMwMDA4NUZDMTVDNjQ5QkFGMThGMzY3RUY3MEFBMzM4QTk0QjBCCis6MTBDMkQwMDBGRkJDMjQyRTk5MUVDNDdCOTZBMEI5MjMzMkY0QzU5RkJGCis6MTBDMkUwMDBCNzkxN0U2ODcxMjZGMTZCQzA0MERGMkI1NTNERDFGNENDCis6MTBDMkYwMDBBODI3NkVFMjdDRTg4OUJCNkRBNUQ4Q0U1M0RGMEYzODQ2Cis6MTBDMzAwMDA0QzEwQzRGNTdCQTJBQkY3MzE4QUNCNkUzRjlDNDFGNDU1Cis6MTBDMzEwMDBFQTM5QjcwQUI2OTNCRTNCRENCNjMyOUE3N0ZCQkJCNkI2Cis6MTBDMzIwMDBCNTE1MDlGOTE4NjczRjVDQUE3RDFDOEIwNzhDRkREQ0VECis6MTBDMzMwMDAyNzJFMzVBRUZBODZGQ0RERTUzRjE3N0ZBN0Y4M0YyNUFGCis6MTBDMzQwMDBGQjVERjE5QURDNDRGMTIxREVFNzFFOEE2NzUzRkQ4NDMwCis6MTBDMzUwMDA2NjdGQjU3NThCNTQzRThGQjdCRjU3NzhGQzgyRjkyRjM3Cis6MTBDMzYwMDBCN0JGNDU2RTk5OEY5QjExNkRDOEU1NzlGMUI5MzVCOUE1Cis6MTBDMzcwMDA3MkU2RjhGNUU3NDg0RTUzNEVDNUY4RjVCNTc4MkQxMDNFCis6MTBDMzgwMDA1NDg2NkM5NEM3Mjg2NkFFOUY4MTM1MkNDQ0E4RUY2Mzg5Cis6MTBDMzkwMDAzQ0NFMEVBQ0I3ODRFOUJENzY5RUY4MUFDNkM3QUQ3NTIzCis6MTBDM0EwMDBCMkIwOUQyNUUyM0YyRDNFMUM3QkJGMDhERjk3MjRFMjAzCis6MTBDM0IwMDA0NTJEMkU4Q0ZCMThDRjgzRDYyODE2RkU3RURFNEM3RkIzCis6MTBDM0MwMDA4RUJCODZFRTY3RTdDRjZCOTY4QTc1RDEwRTBDNTE3RUQ5Cis6MTBDM0QwMDBGNEYwRjcxOTcwM0JBMEM2OEI5QTdDQTZDNjkzOUY0NUQ0Cis6MTBDM0UwMDBFNzRDODUyRjg5MkI1RTU2RTU1MkQzQUY5OTI5N0FBMTY4Cis6MTBDM0YwMDBGOUE5N0FENTRGNzc5MDlGQUUyNjNGRkQ4NTk1RjQ2MEQ5Cis6MTBDNDAwMDBBMkI4MUJGREY0NUMzNzlGMDc3Q0ZFQTI3NzI1OUY1MUU1Cis6MTBDNDEwMDBERTdENTg1RDc3QjFDNkI3RjgwOTE3OURCNzE4RTJEQjI2Cis6MTBDNDIwMDAyODVGOUNDODdGRTY3OTRDM0FCQjkwRkFCRTdFOTI3QTMwCis6MTBDNDMwMDBEQ0EyQzYwQkRGOTQxRTM3QUJGMUQ3RkY3NTNEMUU4QjE4Cis6MTBDNDQwMDBGRkFDQzZGN0JDRTk3NkZEMTVDOTZGQkFCOTMzRUUyMjY5Cis6MTBDNDUwMDBCREZCMTdENDNCNzlGQ0I4MjIyRDlGOTQ0MEM3OUZBMTA4Cis6MTBDNDYwMDA2MkFCODlGMjlFNDBBQkMwMDE0MkQ5RjIxOTlFOUZCQ0RCCis6MTBDNDcwMDA2NTA2NUE2N0YzQUQ0MjFFQTczRDc2MkI5QkI3QTE0MkQ2Cis6MTBDNDgwMDAxMDdFRjRDOTEyOEVEQjNDRjZEQTU5OEI4MkYzOUJCNjMwCis6MTBDNDkwMDBCMjg1ODQwNzM1QjVFQUVGMTM5QUFFNzA5QzJENzg4NDg3Cis6MTBDNEEwMDBGMTc4Mzk1NEQ4N0Y5MkY0MkFCODZGOEU0Q0VCMzdEMzk5Cis6MTBDNEIwMDA2NTA5MEY2OUNEMEVFRjIwRkM4MjcwOUM3QkU5Nzk3QUNCCis6MTBDNEMwMDA4MjBFQjg0RkJCRkFGQzdFMTVERjgxOTQzOEUwQ0RDMUY3Cis6MTBDNEQwMDAwQjFDRUYwOTBDMzAyMEZEQjU0NkQxN0U5MDNEMzkyNTZGCis6MTBDNEUwMDBGMDhFOEVBOEIwMEI5Rjc0RDlCOTNERjk0NDEyRjcwOEFECis6MTBDNEYwMDA3NEIxRjAzNjk2ODgyM0FFNDQ5RkNCMjMzRDFCMTc0RjczCis6MTBDNTAwMDAyODE4NEZFNDI1RTI4OUY2NTdERUU1RjYzMDM1N0VDODc3Cis6MTBDNTEwMDAxOTEwRkIwNERBQ0M2MUMyNjM4NjhBMTczM0VBQjc2MzY5Cis6MTBDNTIwMDAzRTk4NEY3MUEyMkMzRjU0MjRDRTA1NjE2RTU3MTQxREM2Cis6MTBDNTMwMDA0RUIyRjcyRUUxRjczRjNCRjU2RjNDOEY2QzNBQ0MyMEMzCis6MTBDNTQwMDA5N0M3MUQ0QUJDMzQyRjExNzczQzFBNUFDRUZEQkYxNjJGCis6MTBDNTUwMDA2NzNDM0FFQkU0NTAxMUFEQTdDNjE5MEVGQzI1RkMzMDQwCis6MTBDNTYwMDAzNUNFRTg4ODlDQjU1MDVFMzAyRTlFNDg4OTIzNUU3Nzk0Cis6MTBDNTcwMDBFQjcxQzE1OTkyQzA1OTY3NDU5OTgzRjBBNDU5MkEzRDdFCis6MTBDNTgwMDBFRkVCNEJFNzcxNzFGRDg3MUI3MzQ5Q0YzNUZFNUM2Qjk5Cis6MTBDNTkwMDAxMEZDQkE3NkUxNzMxN0NENUJGQ0ExRTQyMDdCRkJFNkNGCis6MTBDNUEwMDA4NUFEQkYyOTEyN0REOTI2RDNCQ0FEMTk5NDg3NUNGQjFDCis6MTBDNUIwMDBGMDg5MENBMkU3OUJEODAyRUFFQkExRjM5MjIxN0UyODM2Cis6MTBDNUMwMDBBQkY2MDhGRERCM0ZCQjM5RkUyQjE3NzE1QzQ3NDJGRjIyCis6MTBDNUQwMDAzNjI1ODFCRkE0Q0U3QkMwMjNFQzQxMDhEMzBDOEUzQjEzCis6MTBDNUUwMDAxRTA2MkVCRkExNDJGRjcyREU3RjcxMzZFQ0UzQjg4RkNDCis6MTBDNUYwMDA5MEQ3MzdBMkQ5MEU4QUY3Q0FGMUIyNUQ2ODI3RkUyRTBFCis6MTBDNjAwMDAxRDdBRUM1NTI0Q0ZGRUI3Qjk3RUJDNjhFMkYyOEJGM0ZECis6MTBDNjEwMDA4MzhDRkEwNzY0RUVFRjg4NjRFQjcxN0NBNTE1Q0Y1MjJBCis6MTBDNjIwMDAwNTYyMzNENEI3N0I1NEJFMTU2MjFFNEFGOTIwOUU2NjVDCis6MTBDNjMwMDBDRDFEQTQ1M0Y5OEM1MzVGMTAxRjJCRDM0MUEyRjU5RjNFCis6MTBDNjQwMDBCMUY4NzdERThENTM5RTE5OTQ5Q0RCNjg4RUU0Q0M2RDM3Cis6MTBDNjUwMDBDMDdCM0Q2MzE3NEIzRDczMThFNTE1Q0Y4NUQyQ0RDRjE5Cis6MTBDNjYwMDBENTUxNzFGMjNDQ0Q2N0IyMDNENkUzRkM4RTgyQ0MxODczCis6MTBDNjcwMDBFMTY3MTBCMUZDN0U0QzJFNTEwRTE4RUQ1MzI5RTRFRDBDCis6MTBDNjgwMDBFM0Y5MTQxQjJBRUMwRTlBOUFCN0VCNjQ2MTE3QkVFRjFDCis6MTBDNjkwMDAwM0NBODM3NjJDRTkwNENBM0I0RkQ2ODExQTA3RDk4Mjk0Cis6MTBDNkEwMDA5NzcxRkM1QTlDMzExNTlGNEYyRkY0MTc1MjVDRDE1RTQ1Cis6MTBDNkIwMDAzMDZDMTU3MUM1ODg5NUUyOEFCOTJFNkRCQ0MwRUQ0QzAxCis6MTBDNkMwMDAzODlFRUNFNUNFRjlBRjczNzk2QkEyRTc0OUZBMENDOTU1Cis6MTBDNkQwMDBGODlFNzk3Q0JGQzUzREQxRkVCMkM4RTc1MkY2NUY5NEEzCis6MTBDNkUwMDBGRDU5MUVDRjVGRkVFQjhGNTlEQzlGNDU2RjcwQkY3MzA2Cis6MTBDNkYwMDA3RDI0MERFMjFDQjcxQjE2Mzg3NUQ0QzJGM0Y1RUI5OEY4Cis6MTBDNzAwMDAwNzRENEZGMjY3M0I1QzgyMEVDN0EyMUUyRThGMDNGMUNFCis6MTBDNzEwMDBEQTBDMUFGRjRCOTdEOEFGRUZEQzlBRDUwRjkyOUNDNDc2Cis6MTBDNzIwMDAyNTY3MTkzRkE1Qzg2QjA2RTI1MjhEODgwRkM2RDFBOUFGCis6MTBDNzMwMDBDQTZENzA0RTVCQkFCMEU3QTlGMjc5QzkyREU0RkExMjVFCis6MTBDNzQwMDBERDFCQ0ZFMUI5MjBGMjk1QzA1NjUxM0Y3MEE4RkExNjEzCis6MTBDNzUwMDBFODY0RENBRTlDMkNDRTYzMUE4RTlDNkY1NDVGMzgzQzMwCis6MTBDNzYwMDBDMkVENkNGMzBGOTkzMzI4NEY1QzVGRDhBNUU2MTlBOTg5Cis6MTBDNzcwMDA3NkE4MjM3MjQwRjAyRDE1QjdGNUQ2NzNCQjMzNTlEQzdDCis6MTBDNzgwMDAxNjI4MUI1RTlDQjBEM0RGRjFBODc2NjU4MUMwNzE0RjdGCis6MTBDNzkwMDBCODFERkNCRTM5OUQwQjVERjk5MEI4QkYwMTNERjc3QjFDCis6MTBDN0EwMDA2QUM2RDNEMzYwNUNCNEQ2ODBFRTA2RTNGRUYwQzBFNDg0Cis6MTBDN0IwMDBENkFCNTYyNkI3OUU2QjkyRTM1QTk0QzlFRDdCNjg5MjJFCis6MTBDN0MwMDBFQkVEOTlFNDdBNEYxQUU5MkRCMjVEQzQwMzBFMjEzN0RGCis6MTBDN0QwMDA3NUU2REI1OTI0RkY0RjFDOTk5M0ZGNjVGMUFDMTkwREU5Cis6MTBDN0UwMDBBRDlDQzQ3RjhCMjMxREU0MjRCRkJGNjI3RUFFQUVGRjMxCis6MTBDN0YwMDBBMEIzNDgzN0ZFQTEyNTczNzRFRjFCOTQ3MkRERkJENUZGCis6MTBDODAwMDBERTZBNUQ3RkFERUY3RURERjg4NzFCM0RCQTdFNUFDMUUzCis6MTBDODEwMDA3MkRENzhCQkJDNEFEN0NGOThGRjg4NkU3QzA4NzU2NkZFCis6MTBDODIwMDAwOURBQ0YzNDZCNjY4OEExRkM0RjcxRkVBNTZFN0M3QTY1Cis6MTBDODMwMDBCNTNEOTNGNDIyQjQzMDJENDZGMjlFRjZENkE2MjBCRDI3Cis6MTBDODQwMDA3QjlBRkQ2NDI0NDZENENEM0FEOEM4NTA2NUE1RUM1N0YwCis6MTBDODUwMDA2Q0E0MjcyQjk3OEFCQTQwNUZBRDJEQkM4N0UyOUNCQkE2Cis6MTBDODYwMDBCMjJBNjlCRTQ2QUY3RDc1MjJGRTcyNTQ4QzA2NzM5MTYyCis6MTBDODcwMDBDRTMzOTU3ODZEMkVFQUYzRjVBNUMwRjM4N0VCNzY1MUFDCis6MTBDODgwMDAxRjAwQzk1MUQ4QzBGOUU3Mjg1Qzg1NzYzRjY0MzdBRUYwCis6MTBDODkwMDAzMzM1RDZBOTc5RjEwNEY2RTQ3NDlERUIxN0E0MkYwRTc1Cis6MTBDOEEwMDA4QUNCMERGOEE4QTg3OEJEMjMwMjFDQjcwMTQ5MkU1Q0RECis6MTBDOEIwMDBDNUY3OTUwQkM5REY0QzNEMjE5RTY3QzU0MEQ5QzNDRjU1Cis6MTBDOEMwMDAyNTk3QUNFMjcxQjQ1QzQyRTdEQkE1RDZCRjcyOTZDRjg4Cis6MTBDOEQwMDAyRDIxQkMyRTA3RkQyRUQ1NDc5RUEzM0EwOUNGMDMxQzYwCis6MTBDOEUwMDA3QzlDQjY5RkIzNTZFQ0I3Q0IwMjhDRUE1OUMxQkIxOUZFCis6MTBDOEYwMDA4RjUzQzEzMTU1NTdERjM4NkQ4OTVENkU2MUJDQkU3MTk0Cis6MTBDOTAwMDA4MkNFRkY4RTI5NTZCMUI3NDRGMDg1RTg1QjMxRTBFMDc2Cis6MTBDOTEwMDA3NTk3NUYyRkZERjk3QzNGREY0N0Q0M0JCNjM4QzQ5MDU1Cis6MTBDOTIwMDBFMzk0NkZFMDM5QjYxQ0E5RTZGMkRCNzQ2Q0U5NkZEN0NCCis6MTBDOTMwMDA1MzVDNTgyQTcxM0E4RjhCQzdENTNDRUJCQzlBMjc2QTU3Cis6MTBDOTQwMDA3OUQ2MzBFNThCNDk3OUM3Nzk4RjY5MjJCQjc0REU2MzZDCis6MTBDOTUwMDBBMDU3QkI5OEM4ODM4M0VGODgzQ0I4REFFQTlDRDM5OTg4Cis6MTBDOTYwMDBDNEE3Q0I2QTNDREUxMjEzNzhBQzk2REY1NjJBNjE1MzFCCis6MTBDOTcwMDAxRUQyQTFGQTI5NzMyQzBERkQ3NTc1RUYwMjJCRDlFRDhFCis6MTBDOTgwMDBFQURFRTI3NDhFMkY2RDNDNjBEMkU4NkRDNEY3NkJFQThDCis6MTBDOTkwMDAzOUZCNEU4REYwRkFDNDFCMjk3NTRBNjdBRDk1QkZGRjcwCis6MTBDOUEwMDA1QjU1MUU5REI1QzBEQjJENjVEMjBFNzJDMzUzQkZFRDI2Cis6MTBDOUIwMDAzMDFCRTFFM0NEMThGRkQzRjk1QTQyRTJCQzVBM0RBNDQzCis6MTBDOUMwMDAzOTI2N0I2ODlGOEI0MzIzQkRENDU2QjU5Njc4Mzg3RTM1Cis6MTBDOUQwMDBEODM2REE0QkZFMzM3MEZCQzZDOTA3MzgxRTYwOTUyOTdFCis6MTBDOUUwMDBCRTRBNURGNzUwOUQ5OUNCQzUxQjE0OTAxMEJEOTY0OTZBCis6MTBDOUYwMDA2MTFBNTdCRDRDRTJGQ0NFNjlCNkYzN0MzQ0M3MDJFNjM3Cis6MTBDQTAwMDA0Q0VBMzcwODdGNTZFNTlERTZBMTNFQUNDOUU2RkVCODg0Cis6MTBDQTEwMDBFQTk0OUNCREE5MjI5MUVGRTcyQ0RCM0E5REU4RjQ1NUZFCis6MTBDQTIwMDA3NTIyMEQzNzk4Mzc1Mzk5NEE3RUUzRUJENjg5REE0RjUyCis6MTBDQTMwMDA5RkIzRDJCRDM3MENFQkVCNDQ1QURENjdBMjNBOTE1NjU3Cis6MTBDQTQwMDBBNzBENzgzRkQ3RDU5NTAzRDI0ODNERTEyQkQ1NDcyRThBCis6MTBDQTUwMDBGMjNBNzEyMEMyMUMwNTI1ODlGQTUxNjA2MEQ0Q0FFOUY2Cis6MTBDQTYwMDBBQkQ2OEQ3MEJDOTVFNjBENzQ4QkZBRDE0MURDOUZEQUE0Cis6MTBDQTcwMDAwOERFNTdDMTczRkMyM0RFOTdEQTI4REU5NzlFMUZFRDkwCis6MTBDQTgwMDA5RUNGREI1OEI3OTNCN0M3QkE5N0YwQjYxQUM1QTYzMDkyCis6MTBDQTkwMDA4N0VBNEVBM0JDRUU1NDUzQUJBRjVCNjg3NTA5NzdBMTMwCis6MTBDQUEwMDA2RjQ5NkQ4REFFNkVDMUZCQTk3NTBCNzNCQUM4NDcwMzk0Cis6MTBDQUIwMDBBNzJDQ0VCREY4M0M3MERBQzZFREFDMkJEQTMyOEJFMjk3Cis6MTBDQUMwMDBCMjlCNjdGREIzMUNCQzBFOTBDQkYzQ0EzMUY5NTU5Q0U5Cis6MTBDQUQwMDBGNjZDQ0EwNzdDNEUzQkQ1MEJBQTA3QUY1ODY1NkU3NzNDCis6MTBDQUUwMDA2MjQ1NTA0MEY4NTNEQzRBNzkzRkQxNDFFMUYxOUNDQjlCCis6MTBDQUYwMDA0RTc0RkQ0QTdDM0ZGMkZGRjhGRUQ3QzFGN0EzNzUwMkUyCis6MTBDQjAwMDBERkQ3RUM0Nzk1Q0ZBNEVDQTFGNjk0NjJERjk0NjQxRkM1Cis6MTBDQjEwMDBGQTdDMDIyN0VFMkI5RENERjVFRjc5REZFQ0VDOERDOTg5Cis6MTBDQjIwMDA3OEJFNTdFNDcxMzlDQjRBRURDOUNGNTlCRDQ1QzQ3REI0Cis6MTBDQjMwMDAwQzdDNDY3NkFDQjc3NjQyN0JEQjZCMUNERjE5RDcwNUU1Cis6MTBDQjQwMDBGQUJDQzI4RTY4QjhGRkY4M0E4MUYzQUREMjI0QkNGRkJDCis6MTBDQjUwMDBEQTNCMjhBNzk4QjcwRTFFNEVFM0ZFRkNFNjkxQjRCRDYzCis6MTBDQjYwMDAxNDdGNTc3OTM3Q0U5QTgyRkRBQUYzNjk1MDIyRkM5MTNGCis6MTBDQjcwMDBBRUJFRDBFNDM1MjlGNjJDQTM3QTgyNTI2NDQyQjkxREE4Cis6MTBDQjgwMDA1NzM3RjA5QUI4N0QxRkFCMUI3OEE1OEJCQ0FGQzZFOUIxCis6MTBDQjkwMDAxQjQ2N0YzN0E1ODQxMUZEQzMyMUNBMzNERTY4NjdDRUVCCis6MTBDQkEwMDA0MTE4NUY0N0MwODU4QjYwMDlERUMyN0I4RUQ3OTU5RDlCCis6MTBDQkIwMDA5RENDMjlDQjVGNUQ1RkM4NTM3MTg2OEU0OEI2OTlFNEUyCis6MTBDQkMwMDBCQ0Y5MDQ0MDJFMzNBQTMzNzg3OUJDNUYwNUNGODY2QTVFCis6MTBDQkQwMDBFOTdCQUM1MjkzODNGQzU5MkE1RTQwNzI0MkZFM0YxNUJBCis6MTBDQkUwMDAyNzhDQUE3QzhDRDYwQTdGNTNFNzExRkVBNjRBOEQ0QjcwCis6MTBDQkYwMDBCNDc5QTlGQ0NGNTZGREQzNDRCODIzNTNFMzlGMUU2RkVECis6MTBDQzAwMDA1NTFGRjEyRkI4RDIwNEU0MDc3QUJDNkU1QjY5RDI3QTYzCis6MTBDQzEwMDA2NzZBQzU3NzRCQkJBODZFMzEyREI5NkUyMUVBMTNBOTlGCis6MTBDQzIwMDBGNTBBQ0Q0RTU1MEY3RTUxNEZGQzdGM0UyQUYwQTQ0MEIxCis6MTBDQzMwMDA4MUMwMzdBQjhGQkE0RTkxREUyN0NFMjlFRUY3M0NGMjlBCis6MTBDQzQwMDAzOENFRTMyODY3MzY4ODdCODE0REUwNUUxQzY3QTg1QUEyCis6MTBDQzUwMDBGOUY5QjEwQ0EyOUYwRkZEMTVEOUE1RDNBNTNCMzJDOTk3Cis6MTBDQzYwMDA5RUFDOTQ2QTk4Q0NGMUVFMzFGQzlCRjBBOUQ1Njc1QTQyCis6MTBDQzcwMDA5NzAzRjlGRkI1MEJDRjEyREREN0FFQjdGMEVGOTAzNEM1Cis6MTBDQzgwMDA3RkI1RkE0QzYzQkQ3OEJGNjc3QjNBQkQ5RkNGOUM3NjdBCis6MTBDQzkwMDA5OTlFN0JEREY0N0NDNUFGNjI4NEY0QzE4Mzc0N0JENDQwCis6MTBDQ0EwMDA5QkY4RTlDQjEyRTlDQkJDOTlGRUVCQTQzRkQ1MEQyQTRBCis6MTBDQ0IwMDAwRUJFNUVGOEQ3QjVEMTA2MEI2NDhFRjc3N0M3OEI2RkMzCis6MTBDQ0MwMDBGMjNDRkE0NkI0OUFFM0RCQjk1NDdGQUQ0OEY4OEJFQUZDCis6MTBDQ0QwMDAyM0U4ODdBNkZDRTlGQzUwNzY5REM4MDdFRjQ1M0Y0NDUyCis6MTBDQ0UwMDBFN0M5NjkxMDc1QzI1NEZFOUY1MUUzQzk4OUZDQ0E0NDYzCis6MTBDQ0YwMDA3Njk0RkM4ODY5ODlEMDFCNTY5MEYwQkYzMkU1RDdGNzRGCis6MTBDRDAwMDAyNUZDQjAyMzgyRkRGQzJGQzFCRDU1QjlDRTlFMjAwRTVGCis6MTBDRDEwMDA3M0FCRjIzQkUxRjcxQjkxNkYwNjA3RkY4QkJBM0Y4RkI2Cis6MTBDRDIwMDA3QTk2OTZFNzY4NzhCODk2MTdCREE4RDI1OTZCNUY1Mjg1Cis6MTBDRDMwMDBEQjU0QkM0Q0MzQzlGMjE1ODBBRTJGQzFDOUYyMDk0NzAwCis6MTBDRDQwMDBDQjIxQjM1REMxNzFCQjQyRjUwQzYzQjg1OTJDQzc3NERDCis6MTBDRDUwMDBBNzFDQzdBOUI4OUQ4NjlGRTU2REU4NjcxNDY3MTQ0M0IzCis6MTBDRDYwMDA3MDFCRDk5NzIxMkJCODBFNENBM0VGRjYxODZDMjNGRDNFCis6MTBDRDcwMDAwRTM3RjAzODY3RThBNUY3N0I3RjQxREYxQjBFMzAwN0UxCis6MTBDRDgwMDBCOTlGRjZGRUIzREM0RkI3NjM1Q0MzRTNBMUU4QTcwMjJCCis6MTBDRDkwMDBBN0VBMTdERjlCQjY0Nzk4NjI4NDgzMEVBQUZFQjk1NkFFCis6MTBDREEwMDAwMTZFMzdEQUQ1RUZGQUVBMDc4NDVFMjc3MEEyMUY0OUQxCis6MTBDREIwMDBDOTM4NTE0MDhFNEZEN0JFMTcwQzBCRkY2NEY4NUQ1RjJBCis6MTBDREMwMDAwNzhDRjBFRjAxM0I1QTk5MzM4NkNGNTM3MUEzNTRCQ0MzCis6MTBDREQwMDBFODU5RjUzQkMwMDk3MTIzRTVFQjdERUZCN0JENkVFQzdCCis6MTBDREUwMDA3QjNGOEUzRkVGRjMwOEJCRDBFODY3OENENkI3OTk3Q0NBCis6MTBDREYwMDA2REZDQkJERkEzQ0M2MUY0RkRFODZFNTVFRTU3QThGOERGCis6MTBDRTAwMDBFREFCNTYyMTBGQUY3RThCODUyOTlFNUIwMTAyQTc3RDdFCis6MTBDRTEwMDBGNTY4MEJDNzZGNUZBRDYyNEUxM0RENTNDNTZCOTdBQjAzCis6MTBDRTIwMDBGNEI4M0I4MUQ3M0U0Rjc4RURGN0QwOUQxMDRFQkI0MjEyCis6MTBDRTMwMDBFNTNGNDA5ODlGQUI2MTc3N0E4Q0UyOEQ2NzJDRkQwNUNBCis6MTBDRTQwMDBBNDhGREFGNzQ2NUUxNTQ3NEQ0RjgzNEUyM0ZERUNBOUJDCis6MTBDRTUwMDA3Mzc5RUI2QTY4REM4NEYxQ0UyQjc1MDZGOENFNTU4RkJBCis6MTBDRTYwMDA1OEY3OTc3NTE4QTdDRjA3QTMzODdEN0ZERDc0NUQ5Q0IxCis6MTBDRTcwMDBDRUZCQTk3MUZBOUYwQUFGRjVEMDNEOERDRkZGREY5M0FFCis6MTBDRTgwMDBDNEVEMUVBRjlERENCODRENzUwNkYxREYwRTE1M0Y0OUIwCis6MTBDRTkwMDBBNTZGNjZCRDY2ODc2NzM4QjgzQzhEOUQxRjQ0M0Q1N0JBCis6MTBDRUEwMDBDNUJEODY1NDNGMTc2MkYyNkZFRkU3RjUyRjBCQUY3RkRBCis6MTBDRUIwMDA2OTc2MjYzNDQ1QUNGRjgxNkE1RkI0RjZBNkRBODYyQzIzCis6MTBDRUMwMDBDNjM4MERBQjE3N0VFQURCODVDQUZCQzRDN0YyRDdGNEMwCis6MTBDRUQwMDBCOEQ5ODI3RTNENkU3NjZGMjQ0N0Q3NUYxOEJCNEIzNzNCCis6MTBDRUUwMDBCRUZBRDQ2Q0RERkI5QUY4M0RCQUY3Rjc5REFGRDJGNUU4Cis6MTBDRUYwMDA5NzBFN0Y0QjM3RkVGRTRGRENCQUZFNzc0NkY0QjhEOTZCCis6MTBDRjAwMDAwM0I3RjRCODk5MjZERjJFOTQ4OEU0NzkxRURCMEY3NEZBCis6MTBDRjEwMDBFMzhBNUFGNUY3MkFFRUQ0REY2QjU2OTdGRTVFREFCQTRCCis6MTBDRjIwMDAyNTQxRkRGREU2ODRGNEY3Q0IyMTVDQkZFMjdGOEZFQjZBCis6MTBDRjMwMDBGRjREQURDQ0U5N0YyQzNBQzc0RUYzNzY3OTRCRUQxNDFCCis6MTBDRjQwMDBDNzRDMkYxNEYyQUE4REZCMUZBQzI3RThEOTcwMzAwMDE0Cis6MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDFGCis6MTBDRjYwMDAwMDBCRTMxNDYwNjBGODUxMEZDMUQzRjkxOTE4MzZGM0MwCis6MTBDRjcwMDAyM0Y4RjRDMEM3OTgxOTE4OEU4MzMwMjMwM0MzM0UyMENBCis6MTBDRjgwMDBERTBBQzQ2QjgwRjgzRDAzMDNDMzUyMjAzRDA3ODgyN0E3Cis6MTBDRjkwMDAwMzcxMTcxMEJGMDQ4QUQ1QjE2MjM3ODc4NThEODE4MUVGCis6MTBDRkEwMDAwRDg4NEYwMkNEM0FDNTRDQkNGRDhBN0MwOEY2MjE1RTQ3Cis6MTBDRkIwMDAwNjg2QjU0MDdDOTQ5N0JFNjEzMEQ4RjAwQzQxRkFEOTEyCis6MTBDRkMwMDBGNTBDNkFENzZFRDE4MUY3MzcwOEIzOEEzMzMwMzA0QTBGCis6MTBDRkQwMDAyMEY4RkQxMkE4RjI2Q0UyMDg3Njk2MEM2NTc2OTUwMUIxCis6MTBDRkUwMDBGNTAzMDAyOTUxMjgxNTgwMDMwMDAwMDAwMDAwMDAwMDBGCis6MTBDRkYwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwOTc4NTQ0NUYwCis6MTBEMDAwMDBCNjcwRERFRTdCN0I0OUJBM0I5RDkwOTUyNTc0ODAyMDAwCis6MTBEMDEwMDAyQTRCQ0IxMjAxMTEzQjIxODkwMTAzMDY0NDA5MjhEMjc2Cis6MTBEMDIwMDA2QzIxODQyNDlEMDE2NjFFM0VGREZGNkUwODQyQzREMTIyCis6MTBEMDMwMDA4OThBMUFGQzE5NUY4M0UwMDQwNzlERTBBMDEzOURDMDU0Cis6MTBEMDQwMDAzNDhCODgzM0U4MDRDNzA1OTc3OTVGNDAxRTIwNDIxMjZECis6MTBEMDUwMDBBMzM4RThGM0M5QUI3M0FBNkVCQUVCNzYzNzY5QjdGRkFBCis6MTBEMDYwMDBGOTdGRkY4NDBGOEFCQTU1RjdENEE5QjNENUE5NTM3NUIwCis6MTBEMDcwMDA0RjE0OTI0MjkyRkExMzcyMDk3RTZFMjBFNDU1ODUxMDg1Cis6MTBEMDgwMDBGQUE4QkJFQzkwM0E4N0NCMDM4M0VENkJCRDJFRTIzMjVFCis6MTBEMDkwMDAxMkYyODBENzg0RTU3QTZGM0E3MTVENDE5RjhGRDYxNTgxCis6MTBEMEEwMDBGOTJEODREQ0VGQjVFM0YzQzdCRDI1NTgzRUVBMkRDNTY1Cis6MTBEMEIwMDBGMjExQUYxQkZCM0RFNDJEQzdGMjU3REUxQTJDRUZGNTQyCis6MTBEMEMwMDAxNjYxN0I5RDc3MTVENjZGNTQxNkE0QzFCODg0Qjg0Q0YxCis6MTBEMEQwMDA1OUM5ODQ3ODVFMUUzODcyMDNBREFEQ0YxQzlGMjA4Rjc2Cis6MTBEMEUwMDBBNkY1QkZFQTg5M0U4QkJFMzc1QTJFRjIwRkE1MEQ3MjA4Cis6MTBEMEYwMDA0OTUxRDZFODYwM0YxNUNGMUI5NUJDQkUwMEU3RjFCMUEyCis6MTBEMTAwMDAzQUQ2Q0Y1NEYzNUE3NkU0N0U1OTY0MENDNTczQUM4QzhFCis6MTBEMTEwMDBGODEzNEJDOUU0RUNFNDg4RkQwNjAzQkM0Nzg2QjI3OUZBCis6MTBEMTIwMDAxMkJCRjNCNTQxOTFFMTVEMERGMDFFMUFDQUYxNEJCNjg5Cis6MTBEMTMwMDA0RjFFMTQxOTlFMTNGQUZEQ0FDOUUxQTU3NzFFMUUxOEM5Cis6MTBEMTQwMDBCOURGMThFODU3RTdFNEYwRkFGQTRDMDMyMjhGM0IxRUU4Cis6MTBEMTUwMDBGQUM1QzAyNzhBMTMyMUJFMTZBMzNGM0JFQkZCRjM4QjE2Cis6MTBEMTYwMDBCOEU4NUY4QTRGQzc1RUYzRDYwRDEyRjI2RjFBRDA2OTI2Cis6MTBEMTcwMDBBRDdERjk5OTJENzQ5Q0Y2OTY2MTRFQkQ4MzkwQ0Y1QzgwCis6MTBEMTgwMDBDRTA0QkIyNTI2QkVERDAyRjM4ODgxNkZBNTMwNEUwQzkwCis6MTBEMTkwMDA3QzlCMUIyM0RGMTY0MEJGMThGOEI2MDRGQUM1QzBCNzQ2Cis6MTBEMUEwMDBDQTE4RjlGNkIzOUYwOERGRUUwNTNDQkUwN0RGMzZDNEE4Cis6MTBEMUIwMDBBODZGQkY4QTkxNkYxQjYzRTREQkE2MThGNUVEQzkxODUxCis6MTBEMUMwMDBGOUY2NTQyOERGRDRFNzZBQjk4MzQ4NjgxNzZGNTQ0QUUwCis6MTBEMUQwMDA3NjQwM0Y0RjY2OUI2RDQwRDY0RjgyN0Y3QkJFQTdERTc5Cis6MTBEMUUwMDBFRDhGOTE3RkFGQzZDOEJGMjM0MDlGMThGODc3MzQ0NkI0Cis6MTBEMUYwMDBGRUJEMTMyM0ZGM0U4ODUxRUZEQTcwOURCMUM4NUZCNUM1Cis6MTBEMjAwMDAwRDIxRjg3MzY5MDBGQzZCQjE5RkJBOUFEN0Y1ODA3NzRFCis6MTBEMjEwMDAxMjIxMTlFMTcyQTA5Njk0QTMyODBGMzI3MUI3QjM3NTQ5Cis6MTBEMjIwMDBBQkUwOUI0QjM5ODRBQzMwRDFGRkQyRjc3RDc5MjRBMEExCis6MTBEMjMwMDBBN0UzRkI2Q0M0NUYyQjA5RkQzRjA3M0MwOUM5RkZFNjcwCis6MTBEMjQwMDA1MkFBRDBERkE3OEJEODlGRThBMEZENjE5MDJCQ0FGRjIwCis6MTBEMjUwMDBDRERFMjE1OEQ2NzMzOURBNUNBNDQzNzlGMDI1MUI1MDEyCis6MTBEMjYwMDBCRTlFRjAzQUIxQkRDMTNCMTZDQkM3Qjg1QzZFRTQ3MjRFCis6MTBEMjcwMDBGNDAwQzhERDE1MjA4N0E1NUNBRTk4REMxMTUyRTIyOEM5Cis6MTBEMjgwMDBBNzc0RUREODEzNEYzNjM4NTBBRUNDMTJFMDI5MzM3OTVECis6MTBEMjkwMDBCQjc3Q0Y5NTVCMzc1MEY4OUI2Qjc0NTc2RTBCOTFCMzkwCis6MTBEMkEwMDAyNzhBNTRGOUEyOTI5OTFDRUNGNzQ0RjkwOURCODJBMTcwCis6MTBEMkIwMDA0ODZGMUJDMDY5MjhENkE5RkQ3Q0ExRkQxQURDRERGREU1Cis6MTBEMkMwMDA3QTQxQkZDNzhBQjk3Q0M5MjQxMDNBRUU2M0E1RERGRDU3Cis6MTBEMkQwMDBEMjI1NEE5NzdCMjU1MkRBNjQwOUU3Q0IxNDg5RTkyOURDCis6MTBEMkUwMDA1NTE0RTQ4N0NDRTlCQjNGRUYyQzY5QTNFRkRCRUMyM0JCCis6MTBEMkYwMDBEMzA4MkQ5RjA0RkQ0NEZENzM2MEE5QkU1RjRGRTlFQzg4Cis6MTBEMzAwMDBBNkY0QzgzNDkyOUEyNkMwOTdCNDRBMEFDNTU3MUVFQkIxCis6MTBEMzEwMDA0ODA0Mzk3QTY4OUM4QjQ4NTY0MkZBNDMzQjFEQkZDRjdDCis6MTBEMzIwMDBFODM2OTI0NUNCQzRGMTZENDQxQTA2RkQ2ODNCQURBN0MzCis6MTBEMzMwMDBGMEY2OENBMUI0OURDMjc5MDhEQUFEQzFGNjU0REU5RTM4Cis6MTBEMzQwMDBFNkUwRUY1RkM3REExRkY2MTIxQzVGRUQ3NzFGRTVCMzZCCis6MTBEMzUwMDA5QkUyQjc4RUUyOEJDRjhCODkwQkU4Mjg1Mzc2RkE0MzlBCis6MTBEMzYwMDBFNjNGNUJEMkUzQkMyQjc5QTlFMjdGNUZGNkE5OENGOTlCCis6MTBEMzcwMDA0MzgzRjg5QTA3NUZDQzk4MUY4MkRGN0Q4M0U3NjA1RDY3Cis6MTBEMzgwMDBDNUM3N0M0NTI1RDZGQkFGRUE0RDNEMzFBRTBGMjQ5Qzg5Cis6MTBEMzkwMDBDRUE5MzMwNzA4RUQwRUQ5ODk3RTlBRTM4ODlFRjgyODM2Cis6MTBEM0EwMDBCRjFDNTQzQzIzRjFFNzBCMkFDRTNGQThGRUI5MTgzRDIxCis6MTBEM0IwMDBCNEVENzc2QkU4QjAyRTQzQTQ4M0ExQjc0ODg3NzVCRDYxCis6MTBEM0MwMDA0NTNBMThGQTVDOUUwRTUzMjQwN0MyOEY0NjBGNzVEQzRGCis6MTBEM0QwMDAwRDU3OEFFM0M2NUQyNThFQkJFMTJBNzFEQ0I4QUI3RkIxCis6MTBEM0UwMDA5ODcxRDdGNzEzQzczNTY2OEFFM0FFQ0YxNEM3MzVGNjAxCis6MTBEM0YwMDBGRjdFRTMxMkQ5NDkxRjMyNzM0MTFDRjBDRjNDQzFCRUZFCis6MTBENDAwMDA1RDIwRUU4NzQxQkZDMUNFRTk5MzgzNzY0RUI2OTcxMDdCCis6MTBENDEwMDBCNzI1Qzg0RjIyRDM5NzczNDJFMURDMjlEODU1MEFFN0Q0Cis6MTBENDIwMDBGRjcwMzhBRUNCQzNCMTZCRTBDQ0Q1QzJEOUM2RTE5MEFBCis6MTBENDMwMDA1MDNCMUQwNjg3RENBMTlEQzc2RkY5N0IwMTVEQzhGOEQ1Cis6MTBENDQwMDA3NDdEMjUyNUQ2RDBGNzlDOUFGMTZGRDc4RUJGMUJFQzQzCis6MTBENDUwMDAxOENDNDM3N0Q5RjExRDFBQkFDRUQxRTJCMzg3QzMyMUQ0Cis6MTBENDYwMDBCQUNCRDE4M0Q4MzU3MDY2NkJFMTFDRTI3MDAyRDI2NTBECis6MTBENDcwMDBFMTk0NkFFN0YxQkFDQTU3NDk1OEJGMjgzRDg2MDVERkVCCis6MTBENDgwMDBFQkM4RUIzQzg1N0VEMDhCOEE2MzNCNkQ5N0ZFNjQwREM5Cis6MTBENDkwMDBEQzQwRkIxRkQ5MjJGOThEQjQxRUQ4MUI4RkVCQzdGOUQ2Cis6MTBENEEwMDA2REQzQjFCRUVGMUEyM0FFMTNFNzlEOTNGRDQ2NkE0RkNECis6MTBENEIwMDAyNkJERjBCNjBERUM0QkQ1MEI3QTE5RUFCQUJEMUZEQkQxCis6MTBENEMwMDBEQTI4NUUxRTYzRUI4M0Q3RDFFNzlEMkZFOEM5NTY5NDE3Cis6MTBENEQwMDBDNjQyMUREMEZEMTQ5NzREQjI4QUQ1Q0JDQ0FDNUFCNUZGCis6MTBENEUwMDA2NURGOUQwMEI3QkNEOTQ4Q0MxNDRFRDU0QjRCQTY1RDJCCis6MTBENEYwMDA0N0VCNEIwRTJCMDRCQTU0NkQ1RjZERTg0REVCNEJGREMzCis6MTBENTAwMDA1MjEzRDQzQkYyNDgzOUU4RDM5QUJERkZEOTBFRUJEMTgwCis6MTBENTEwMDBGOURENEEzNjhDN0Y5NkFFMTMwRTZBOEY4RjU4NUI1M0I3Cis6MTBENTIwMDA2NzUyM0MyQUZDQkIwQUUxQkQ4QTlEOTI5MzVBMzg4QTE1Cis6MTBENTMwMDBFRkY2NDMxOTgwRUYwRUM5NjlBNEY0NUVENjE4NEYxQ0FDCis6MTBENTQwMDBBQUJEQTM3RjRGRURENkUzRkM5N0QzRjkxMzBBNkYwOTY5Cis6MTBENTUwMDBBOTJGMDQ3QTU2MDE3MTYwN0NBN0QxNkY5NjgyRkE3NjYyCis6MTBENTYwMDBENjdCMThDNzUzRUI1NTNCRTg3OEY0RkRFQUU3MjQyNzUwCis6MTBENTcwMDA0Q0I1NUE0N0RDODA2N0ZCNEJFNkQyQTcyQzMwQ0ZENUExCis6MTBENTgwMDA4NkMxNTY5OERGN0EwM0Y0NUJFMjlGRkZBMkQ5MDE3ODQ3Cis6MTBENTkwMDA2RTMxMTQwMkJFOUJCNzE4Q0E4NjAyRkRDOEJDOTJBMUE4Cis6MTBENUEwMDA4MERGNUY0NEZDMUFGNDJFOThFRkYyNkI4QzVCRjVDMEMxCis6MTBENUIwMDA0RjRCNjBEMDBDNkJCODlEM0Q0QkQ3MkI0N0M4RkE1OUU5Cis6MTBENUMwMDA0MTk4REQyN0IyREYzMDdENThGMEY5NEJGQTQ0OTQ4MzVGCis6MTBENUQwMDA2NThEN0FFMjA4QjUxQjVDM0U3QzQ3MDlGMzYzRjY1ODFCCis6MTBENUUwMDBGRERCQjM4MjdDNUM2RUU3RjJDQUY5QjgzQzkxRjM1NTdGCis6MTBENUYwMDBFRUNDOTkzMTJDMUM5RjA3ODEyRjQ2RTYxRjQxRjkzMDU0Cis6MTBENjAwMDA1RDM3MURFOEZGMzg5MDdFOEY1MUZGQzk4MUZFOTExMzcxCis6MTBENjEwMDA5RjNGNDFGRDI0MjgzNzUzM0YwOUNBMjdBOTlGMDRBNUVFCis6MTBENjIwMDA5RkZBNDlEMDZGMkJGNTkzQTBEQzQ2RkQyNDc4RkUzNDk5Cis6MTBENjMwMDBGNUNGQTE2Q0E0RkUzOTNDN0Y4NkZBRTU1MEVFRjRGQUYyCis6MTBENjQwMDBGMEY5NzNERTNBMkM5QkJDRjU1ODNFRUY2REMwNzJCNzEzCis6MTBENjUwMDBENzhGRkQ1RUY0MzY2MkQ5RUM2REMyRTcyRjdCOUJCMUFDCis6MTBENjYwMDA2Q0YxMDZCMERDMEI3Q0E2NjVDMERCOEFFNTdFRUYzMTkxCis6MTBENjcwMDAyQzBGN0FEQkYwQkQ0M0RFMzM1OEZFOTJEM0REMzY4MUNBCis6MTBENjgwMDBFNENBNTQ1RTZDMkU2MjA3MzYyNTE1QkI3MkMxNUY0OTMxCis6MTBENjkwMDAyQTYxRjVENDNCN0NCOTA2NUE0Rjc1RDMzQUE1NjNFRjlFCis6MTBENkEwMDBDQTQwQUU5MUQ2N0JEN0IwRjZDQzdCNDg5RTg5RDYzM0E0Cis6MTBENkIwMDA3REFDN0RDMDJGNUQ3OTY2NUExRjUwQ0ZEQTA3NkZGNkJCCis6MTBENkMwMDBFNUM1RDFGQTYwM0Y2QkJGNkE2NzIwMkY5RUQ2QUY2QTZGCis6MTBENkQwMDA2MkVEQzM1QkM4MjQwQkFEMEYwRkIwRkFDODIzQUU0OThGCis6MTBENkUwMDA1NjVBMUZEOUNBRUEzOTFGRkEyNkQ5NjgzREE3OERCREY3Cis6MTBENkYwMDAzRkZFNUM2MDUyMDJBRDhGRUY2NEVEMTNCRjI2Rjk3NkZBCis6MTBENzAwMDA1QTlGNDgyNEFDRTc1OTcyRjMxMzY5M0RDRkNFRUE4NTlFCis6MTBENzEwMDA3REU3Q0I4RTA4RUJGQjVFQTU2RDIxOThCNDlGRUI3Mjg1Cis6MTBENzIwMDA3MjY1RUEyN0VDMzVCNEFEMDA5M0JCNUU3NzQzQUUzQzNGCis6MTBENzMwMDA4RUQyNEYyMThCQTA3RDkzQUU4OEQ1MEQ2NDI1QjRGRjhBCis6MTBENzQwMDA1NjM3MURFQkZCMTUwN0I2RUZEMUNENjE3NTgzMDNEQkIzCis6MTBENzUwMDBGRkFBNUI4OEY1ODM4QTBCREI4RkVCMkE1OURERTBDMkQ5Cis6MTBENzYwMDBGNkNGNzQzRkM3RjEwRTI5NkU2QzU3RjRGRjlCRDUwREIxCis6MTBENzcwMDA2RTZDN0Y1ODVFOUY5QjRGRkI1N0VBREQxRTFEOTVFQjNECis6MTBENzgwMDA1QUM5NUQ0RTA2ODJCQzM2QTU4MzNENUNDN0ZERDY1OTlECis6MTBENzkwMDAzQTA3Q0FGREJBMEMwM0VBRDlERUZGQ0E3OTBBRjUwQ0NBCis6MTBEN0EwMDA3RTkyQTE1RUY2MzRGOEJEMTRDRTJBODRBMzUwMzhGQUQ2Cis6MTBEN0IwMDA5RUUxNENGQzY2QUMwMDY3RTIzN0U1MkE5Q0Q1MDhDN0MxCis6MTBEN0MwMDAxQzFCOUNCRERGOEMxN0YxRjlBNjQyODVCMzQxNDdFREM4Cis6MTBEN0QwMDA3REFEMzVCNjc5NERCQzM0NDFDNEU3NTJBNTBBRTcxMTk5Cis6MTBEN0UwMDBDNDI3MzEzNjdDMDJDQUI1MDI5QzgwQjI0NDg1QjMxOTg1Cis6MTBEN0YwMDBFMUE0QzQ4NjhGQ0IzMDRFODBFMzMyMkM1NUUxNkM0N0Q4Cis6MTBEODAwMDAzODE5QjFDMTA5MThBRTEzRjEzMTJDNTNFMTNDODdGNDNBCis6MTBEODEwMDBFOTE3REJCQzVDQzZFQjQ1N0M4QzU1MkE5QzNGMjAzRTVGCis6MTBEODIwMDA1OUIxQzFEOTZGMTVFOUIzREZEQTREOUYwMEMyQzk4RTc2Cis6MTBEODMwMDA2RDVFNzkzNjkxM0U3OUI2NkVGQUJDODY3MEFFOEMwRDBGCis6MTBEODQwMDBDRTdFOUI0ODlGRkRCNjZFRkFCQzg5NzA4NkM1MzZBRjBBCis6MTBEODUwMDBCQzA0OTEzRTc5MDlEREY0RjkwMEUxNUMxMzFCM0UwNzNECis6MTBEODYwMDA1MzQ0RkExQzRDRTlBNkNGNDk4NDMzMjYzNjdDRjI1MzQ0Cis6MTBEODcwMDA0NUZBRTRBNzc2RDNFNzNDQzIxOTE3MUI5QzgzQTkyMjdCCis6MTBEODgwMDA3RDBFQTY3NkQzRTcwQjg0NzM3RDZDRjNDQTRGMTNFOTQ0Cis6MTBEODkwMDA5MzlGRDY0RDlGNEIwODI3RDdERDg4RjgxMDBBQzcxQUVCCis6MTBEOEEwMDAxRENFQTE3RTIyN0QwRUY1RUJBNjhGNDkwRjcwMEEyOEIyCis6MTBEOEIwMDA5QzgxM0RDMzI5Q0MxNEU5NTM5OEQ5NEQ5RjQ0M0RFODQwCis6MTBEOEMwMDBDNUU0RDhFMDFDQ0ExNEU5NzMyOEIzOUIzRUJEMTE5RjgwCis6MTBEOEQwMDBBOUIxQ0RBQkIwQkY0ODlGQzJGRThDM0UxRTYzRTcyNDBBCis6MTBEOEUwMDAzQkY4OEQ4OUM0Qjk5NUJFMzIyOUY5NjcwNzYxREQ1MUNFCis6MTBEOEYwMDAyQ0M0MDk2MDhGNDg4MTZEMDA5RkFFQURFODk3Q0E0RTc5Cis6MTBEOTAwMDBENTBGNzIxMkYwNzM4QjZEMEUyN0M0MDNGNEFBQkY0M0I4Cis6MTBEOTEwMDA1QTcxM0Y2MkQ5OTkyOEM0OUI1RUQyRTcwRDA3N0NBRDRFCis6MTBEOTIwMDBENDJCMENGNTdCMTJDNkM2MDlGRTU2QTIyQjQ5QThGN0NDCis6MTBEOTMwMDAyQUVBMkRGNDRGMjkxOTIwQjRBNzk1NUUyNUI0NjdCOEJCCis6MTBEOTQwMDA0NzBBRjUzRUU1RTM4NUZFRkQ2QUYyODQ3QUZGNTU1MzBBCis6MTBEOTUwMDA4NEZFNTlCRTE5NDI3RDYwREQxQ0ExN0Y3NkZEMDJBMUM3Cis6MTBEOTYwMDBGRDhBODYwQUExRkQ0QUZGNzJBMTdFNzVFM0JGMEFGRDBBCis6MTBEOTcwMDA4NzM1QUQxMURBNDczNDZGMTBEQUFGMDkzQzJDRDQ0NzQ0Cis6MTBEOTgwMDAxRDdFNDJFODNGQTY3NUFCRDA3RUVEQjE2Nzg0RjY3MThGCis6MTBEOTkwMDA2RENGMEJGNUVCQ0VCQzJDRjRCRkJFNzNCRjUwQkZFMTE3Cis6MTBEOUEwMDBFMjlGODVGRUI5RTQ2RjQyN0Q5MkU5MDNBMTdGODFGRDhDCis6MTBEOUIwMDAyM0ExRkRDNkY0NEYzNDdFQUMxOEJGQThDRDI1Q0M5RjYzCis6MTBEOUMwMDBDRDMwQTAzRjFCQjAxQUIwNkVEODZCNjZGQjFCQTgyN0VBCis6MTBEOUQwMDA0MzFDQTIxOEVCODZGRDBCMURDOTEwMEYwMDAwRDQ5RjNECis6MTBEOUUwMDBDOEVENUQ3RTA1QzRBQjdFMzFERTdEMDVDNDcxN0Y2MTBGCis6MTBEOUYwMDA3MDhGQjA0N0YwODNEQTY1RjczRDdBOEMyN0I2NEEyNEZBCis6MTBEQTAwMDAxRDRBODcwRUNBMzgzRDhGMjcxODk5RkNBRUNGQ0E3OUI4Cis6MTBEQTEwMDBDQTE3QTIwNzc1RkRBODdGNDFFQkVCRjUxNDhGMzE0MUMyCis6MTBEQTIwMDBGRDU5REZBRjJDN0Q3RUM4MzhFQkZBMTk0QUI3MEU2NTc5Cis6MTBEQTMwMDBDRjE3NUE2MEJDOTJGQjYwM0M4RkExNzMzMEUwQTUxREVDCis6MTBEQTQwMDBDNzM4NjBBQzMwOEUyOUIzMUNDN0Q5MDhFM0E0MDRDNzFCCis6MTBEQTUwMDAzMTY2OTY2QkM2MzE5NTZFRTVDRkY5Mzg4RjgxREU0NDFECis6MTBEQTYwMDAxQjY3RkQ4MEYxRTI3QzMyMkI3MDlDMkQ5QTcxRDY2NzhBCis6MTBEQTcwMDA1NjY4QzY4OTYzRjNBMUNGRjkzODRGNUQ2RTFDRTNDMEM5Cis6MTBEQTgwMDAwOUUyN0NGQTU3RTIzOENGNjlFN0QzQkY1MjMzOEUwNUZCCis6MTBEQTkwMDBDNzgxRTczMDBFRTk0Qjc3MzE2OTk0Q0ZDNkNFMzI5NDE3Cis6MTBEQUEwMDA4MzNGOTkzMTRFNjZFODUzRjExQkE4OTMwRkNDMjQxQjlBCis6MTBEQUIwMDBDNjcxRDA3MTY5M0YzMjI0ODkwQTM1MjFGRkEyNEY0MkQ1Cis6MTBEQUMwMDBGRTdDMTE0N0Y5MUYxMjRGMEJFRUM3N0RCOEFGNUZDQzNDCis6MTBEQUQwMDA1MTI0N0U4QTExREQyNzU1NzNEOTVDQjQ3MzdBRTYwQTI2Cis6MTBEQUUwMDAwNzJEOUIwRjBDN0EwNEM2RDk2ODc1NjZEMzdBN0JGMzMxCis6MTBEQUYwMDAyNEMzQzIwOEYyQjRCODVFMzlENTE2MjJFN0RERkJCMzAxCis6MTBEQjAwMDAzQzMyQTQ4NjhFQkYyMkNFOEVGOEE4NzVCNTRDRDI4OTQxCis6MTBEQjEwMDBDRjRGRDA3RDE3QTFGQjkzMEZFOTNFODVEMEZEQ0E0N0JCCis6MTBEQjIwMDAwQURCNjdGRTNCREQ5RjQxQkQ4REVFQ0ZBMDlEOTBENTBBCis6MTBEQjMwMDBGOERFMDkxRTY3M0VGMTRCQzkwRkY0RkVFMkFFOUYyOUU1Cis6MTBEQjQwMDBCODRFRjhDODVCRTlBOTEwNEQ2MDNGRjM1NkM1NTMyNjlGCis6MTBEQjUwMDAwNEYxOUJFRkVCMjVENEE5MzlFRUEzNEJDNzdEMkRDNjZECis6MTBEQjYwMDAwRjNBNUYzMkZBQjcwMjVERUJGQTUwOUFGMjdFMDMwODgxCis6MTBEQjcwMDA3OTc3RUZENDQzOTIwREFCN0Q3NDYzMDk5OTU5MzNCRDI2Cis6MTBEQjgwMDAyMDBEQjU0OEVBQjc5Q0UyMzk2M0Y3MzUwQTdEODNCNEM2Cis6MTBEQjkwMDAyQjZENzczQTJENDFCOEM0QTU5QzAwRkE5OEU4MUY4MEY4Cis6MTBEQkEwMDA3MzRCMTFBRDg3OEM3RjZCODk1ODlGNDVFNDYwOURGMjY0Cis6MTBEQkIwMDBGQkE0N0UwMDYxRjE3RjNFQUVDM0E1MDA1RjRCRTgxQzc1Cis6MTBEQkMwMDAzMzI4QUI2NzQxMzkxMjlBNTlCQ0E2RDRDRURFNTVGMTQxCis6MTBEQkQwMDBGMTJDNTQ0ODAwRjdEN0JFMTQ4ODYzMTM1RjMyRjY5QkNDCis6MTBEQkUwMDBBM0VFOTMzNUY4OTUyQTI2NTcwOUE1NkJFOTdDM0REMjFCCis6MTBEQkYwMDA1NThCRUZGQjdCRTM1REJBRTFCNEFDN0I0NDgxRDA2QzI5Cis6MTBEQzAwMDA0RkY4Q0Y3NjhCRURBNDlDOERBN0QyNTU5NTk3NTM5QzVBCis6MTBEQzEwMDBCRjI3ODBGRkI0M0MwREZDQTc3ODlGRTRGQzBGQ0EzMUZFCis6MTBEQzIwMDBFM0JGQzdFODlFMDZGQ0VGRENBNDI3QzgyRkNFRjdEQkQ2Cis6MTBEQzMwMDAzOERGMTdENzhCN0NCRjBEQ0VFMzY4RkZEQjU2NjZCMUFDCis6MTBEQzQwMDA3ODUzNDMyRjgxQkY3NEUyMjIxREVBMUYyQUEwNjYzNTU0Cis6MTBEQzUwMDAwQ0ZGQkY3MzM5OTg1M0I3RUIxNTYwRUZFREU1OUFGOUY4Cis6MTBEQzYwMDA3MTNFRENDOUY5MzA1NzQzOEZEQjM4REZFNjcyQkUyREQ5Cis6MTBEQzcwMDAyMUJFN0IzMzMwN0VFMTU3MjBBRTM3QkI1QzIyNjAyRjY0Cis6MTBEQzgwMDAzQzc3QUI3QzZCMTNGOEU2NTZGOUE2QzFGNzRFQ0VCN0RFCis6MTBEQzkwMDAzQkVGNjI3Q0QzRTJEREM2RjlENkQ2RjA5OTQyMDY4NDJBCis6MTBEQ0EwMDBFM0FEQzU3M0RFMkFDREJDN0M1QUJFRDU3M0I5QjQxQkI3Cis6MTBEQ0IwMDBDMDlGOUFFRUNBNUQ3MTMyQTRGRjJENDU5MzU3OUMwQzBDCis6MTBEQ0MwMDBCMTBCQjc5NjRDMTdFQUIzNEE2NzBCRkQ2N0JCRTcwQjdFCis6MTBEQ0QwMDBFREI3OTcyRjE1REFFN0Q2RkM0Q0E4Q0Y1Qjc1OTdEMDM4Cis6MTBEQ0UwMDA3RkJFNkZCNUQwQkVCMEVFM0VBMTdENzFGRDQzNDI3RERCCis6MTBEQ0YwMDA0OUMzMjZBMUZGNTJGRjE2QTE3RDU5RTMwRUExQkRBQTdCCis6MTBERDAwMDA2OTk3NTBGNzM0QkYyNEY0RDdFREJERjI2NjkwQUYyMzg2Cis6MTBERDEwMDA2RkVCMDlDNEZCMkUzODRGNjM5Q0YxODI1MzcxNDI5RjE1Cis6MTBERDIwMDA5MzVFMDdDQUYxMjlFRjEwMkNDRjc4OUQyOEU3NjdCREQ1Cis6MTBERDMwMDA2M0IxQUMwNjk5MUMwNzc2RjY4MDA1RTJBNzlFMzg2QUE3Cis6MTBERDQwMDBGNzEzRTkzQTJFOEY1QjUzMzcwMUQ2MUJEQTNFOUU5MENDCis6MTBERDUwMDA3Rjk1NkY1OEUzRUI0QkI1MDBFMkRFOTRGRUM1MEQwNkYwCis6MTBERDYwMDAxMjE4NDVBODc0RjdFRTk2RTc0RTdENDg3QjVCMEZFREUxCis6MTBERDcwMDAwRDMyMDlGNDBBNkYyRjZFOEJGQ0JDNDNFQTFDOUMwMTI4Cis6MTBERDgwMDA3MUQ5Rjc4QzY0N0I0OEJDMzFGQ0JDODVGNDAxQkYyMjlGCis6MTBERDkwMDA1QUZCMzkxRDI5MEYzREVGRDkyQUIzNzM5RTIzRkFCQ0Q0Cis6MTBEREEwMDBBRDMyQzVBQkQyQzBGNEJGRjJGOThDM0M2MjgzN0E2MDZECis6MTBEREIwMDA3MDhERTUzMkUzMzU1MTY0RDI4MENGMDMwNUJENUZEMjZCCis6MTBEREMwMDA3MDc1NTBDRjA5OENDM0VDRTk1MkZGMjhFMUY5QjJDNjU3Cis6MTBEREQwMDBFQjg0RjdERTkwREM1QjAwOEY3M0ZCRjRCODVFOTNDMERFCis6MTBEREUwMDA4MUNDNUI4NjAxN0VBRUFEMzJBQ0EzQ0QyOUU4NzdCNUEwCis6MTBEREYwMDA3QTVEMkI0RTJBODRCQ0U5MkRDMkYyMkQ2RjA5OTZFRjc1Cis6MTBERTAwMDA3ODRCQjEzQ0U2NzU2M0Y5QkVCNzFDQ0IwRkJEMzU1OEY2Cis6MTBERTEwMDBGRUJCNzcxNTk2NkQ1RTFGOTYyN0JDNzU1ODlFRjRENjhGCis6MTBERTIwMDA2Mzc5Q0FEQjgwRTUxOUFGMUZDQkIzREU0NjJDQ0Y3OTBGCis6MTBERTMwMDA5QkIwNkNGNzM2NjNBOURBQ0Y5RUU0RUYwQzVGNUZDRjNGCis6MTBERTQwMDA4MjFDMUFDM0U1RUNFMERBNzk2QkVBRkEwNkU1RUNCMDdECis6MTBERTUwMDA1Qzg2NzJBNkQyQjdCOEMxQzhFNTIxNTU5MDg3QkZDMjBCCis6MTBERTYwMDAzQTlDMDJGMkQyNDM3QjgzQzJFNTMwREFGQjkxREI0MTdDCis6MTBERTcwMDBERTdBRkYwOEYyNDZDODFBOTQwMzBCQzhEREY3OTAzNzI0Cis6MTBERTgwMDAwMkE3MDgyOTIwNEY3RDM0RjIyNENBQTEyQTQ3QUE5RTVFCis6MTBERTkwMDBCRjIxOTU5QzAzRjk1MkU1Q0EyMjMzN0Y0ODk1QUJGQjFECis6MTBERUEwMDBDMTRGOENFMDZGRjU1NjI0QkVGRTMxRkY4ODA0NzI3NUI5Cis6MTBERUIwMDA0MEIyRTVGQ0JDODJGODVDNThFRkUyNjNENzUyNzBBRDJCCis6MTBERUMwMDBEMDRGRjYwRjgxNzVBNDZCQzg1NzgzMjFCRURGNzU4Q0M4Cis6MTBERUQwMDAwQTQxNTZGNEY5NjlFNTI1M0FERDVEQjg3RjI4RjM1MzI4Cis6MTBERUUwMDBFNkY3MEE2RjM3QzczMUJBOUE3NUE0ODg4Qzg0RjNFNUQwCis6MTBERUYwMDA5QzYzNkVDQUNGQjgzRjVEM0QxMkY2Q0RGNEI5NEM5MjJCCis6MTBERjAwMDAwMDhFREYzOTNEQzI3OTAxMTk0NDkwQ0UzREQxNTdFREU1Cis6MTBERjEwMDA3RkVBODlGRkNDODE3MzdGMEJFODM5OUQ3QkRDMDE3RDMzCis6MTBERjIwMDAwREQzREZBNzlDQjc4NDlDMkY3OThDQ0U3NDg4ODM3NzIwCis6MTBERjMwMDA2NjFCRUNDQzdGOTgyNEQyOTE0Q0MyRjMwMzk1OEUwN0RDCis6MTBERjQwMDBCMkJGMTgwQ0U3MzNGNzUxMzkwNEZERUExQTM0Mzg4MUFGCis6MTBERjUwMDA1QzQ2M0U3QUIyRjczREQxNzMwMUNDMzcyNjdBMUEwODc3Cis6MTBERjYwMDA5QzczNTE3QTZFODVGQjhFQjFEMkIzMjczQkQ5OTM3RERBCis6MTBERjcwMDAzQ0IxODFEMUY5MDhGNzRGQTNEMTU5M0QwRkQzRTI3MURDCis6MTBERjgwMDA4QjIyNzMzRTcwMzkyNjc3NjhFODVGMkFEMEJGQUZENTAxCis6MTBERjkwMDA4MUZEMEZFRUZEMjAxM0NFRjFCQTc2NUY5MTQwODY4NkFCCis6MTBERkEwMDBCRTVGQzBDRTdCQkFERkNGMTdGNDQwRkFEM0RGMzM2MTU4Cis6MTBERkIwMDA3RjdDRjA4NTc3QjE1QzRCOTgxRTZFQjQ5NENDNTVDNkNGCis6MTBERkMwMDAwNEUxQzU3QThGMjBEQUJDM0M4QTI0Q0VBQjA3RkRFQzk1Cis6MTBERkQwMDA0ODU1RjVCMzM1MTNFNDY5MzdCNzAzNjFGM0VCNDEzRUI4Cis6MTBERkUwMDBENUY5MUQ4MEY5NTEzODUzNDFBNkU5M0NGMkU1OTJCQkMxCis6MTBERkYwMDA4NEY5OEQ0RUMxNzlGNzM0M0Y0RjgyODE0ODIzMjg3RUMyCis6MTBFMDAwMDA1NjgzODEyNDUwNzk1NERDNkIxNURDRDczOURCN0MxMEM2Cis6MTBFMDEwMDBBN0Q4MUJFRkFDQTUyQ0YxRDhDRUJFMTE3MEMwN0I2Mjg3Cis6MTBFMDIwMDAzQzYzNTlBM0I5NDZGNDlGMTI2QjQ0RkYyOUEzMjZENDNECis6MTBFMDMwMDA3RkVBM0FGQzk0Q0Q0REYxNUI5RUFFQUYzOUQ5MEJENjU5Cis6MTBFMDQwMDAzOTE3NUZFN0Q4QkFBQUUyNTdENTk0NTU2MzExRTA4ODJCCis6MTBFMDUwMDBGNUFFN0FBOTg4RERDMzcxMjRDQzhDNzBERUE3OTZDQjhGCis6MTBFMDYwMDBEMzBEMzhDRUQ5QzY4MTA5MzBFRTU5QUZBOTg2QURBRkYwCis6MTBFMDcwMDBGNjFBMzY2RTdBNERFOEZBNUFCOTJBQkVFNkU0QTgyMEI2Cis6MTBFMDgwMDA3RUQxRTBGRUQwRjg1MTg5MjAxRjk5NjA1REE0NkQwMzE4Cis6MTBFMDkwMDBBM0Y3OEZDQTRGRjk3MzAzOUVBQkI3Mjg1RjgwRkY2RTVCCis6MTBFMEEwMDAxRUEyRkFFRjMyRDY1NUI4OUUyNkJEQ0YzODAyOUVFRjlCCis6MTBFMEIwMDAxNEM2QTNFRjM5RDRCMzcxNzgyRkJBRENDOEU0OTRDQTdDCis6MTBFMEMwMDA0RjNEOUM3NzExQkUzRjMwMjE5RkREMTQ2MjAyODVENzAyCis6MTBFMEQwMDAyMTVCRUE0MEFFRkMwQUQzNjcwRjk3RDMyQTUzOUJDMTVBCis6MTBFMEUwMDBFRDQwNzJCNzgyNUMyRjE4QUJDQUI5NjNENjA3RDQ0RTI1Cis6MTBFMEYwMDA3RkZDMTcwNUVGOTk5MUFGMjlGNDlDRTA1NTg3NDVBNDYzCis6MTBFMTAwMDBDNDA2NDFENTA1QkI5NzE1QzNCQUZERjE4QjM3RjE3RDI4Cis6MTBFMTEwMDA3QTdEMEVDQ0ZCM0NEMTE1ODE1RDNBNEZERUI0OEQwQTgxCis6MTBFMTIwMDBEMUQ3RDMwQThCNjM5MTNBQjZDRkYxRDEzRjMwQkZDNTc3Cis6MTBFMTMwMDBGNUUyQkU2NzQ5ODM1ODJGMjMzMzUyQzFERTk2NkQ1NEYyCis6MTBFMTQwMDA4ODlGRTJCRTE0RjY0REVBQkNBOUZEN0Q1N0IxMjM3MjRCCis6MTBFMTUwMDA0QjQ4Q0QzQUQ4QTczRkE2QjA3OENGMDIzQjkxRkI1MEIxCis6MTBFMTYwMDA3QjVERjU4NzVGRTc0MERDQTc1RDYxRkVBRTdBMUVCRTkyCis6MTBFMTcwMDAzNDg5RUQwNzJCNjZGQTBEMkVEQUZGQTNEREEzNkVBMzFCCis6MTBFMTgwMDAxNjk3QkVFRjVGODdGRUNGNzRFMkRDNEVDMkU5QkVCMEU5Cis6MTBFMTkwMDA0RUM0QUYyN0ZDQjVGOEFBN0U1MEQ4QjkzQ0M3MjNCOTA2Cis6MTBFMUEwMDA1MThBNzg1RkVBNkI2RUU3NTRGRDQ4MzJEODg1Qjg0RkU0Cis6MTBFMUIwMDA5QUE2QUVDQTgxQzJFNUMwQUZCOEFEODYxNEM2NzdFMEY0Cis6MTBFMUMwMDBBMzI0NzcxQURDMjFGRDBDQzE3RTQ5ODYzMUQxRkIxOUNECis6MTBFMUQwMDBBMTlGMUVGQkE1QjE3RTlEODVCODNGMjY1NDlFODYwNjU1Cis6MTBFMUUwMDBGQjk5ODNGMEZBQjI3MUM1N0U1NTdGNzhGNjQ1MUY5NThECis6MTBFMUYwMDA5NzhBREYzRDZBMjM3NERERkM1OEFFNEY3NUQyRTc5NUYwCis6MTBFMjAwMDBEQkVGQjVCOTY4Nzk0NkY2RDk4MDlGMUZGQkY1MTFFRkIyCis6MTBFMjEwMDBGQkRFNjI1MEU5RTFCMjQ4MTA0RkUzRjI0OUVBN0MxOEI0Cis6MTBFMjIwMDBBN0Y4NjJCQjYyQzc3Mzg0NDY2M0MwNDhFNUIzN0FGNzU4Cis6MTBFMjMwMDBEMjYyMzIxQ0VCQzc1OTdERkRBNzdBQTgzNzhCRkNBQUE2Cis6MTBFMjQwMDBGOENEQTNBOTBFNzY0Rjg4QzU5MzQ4MDBGRERDRUE2RDkyCis6MTBFMjUwMDBGRjUxMDhFQjg1ODc3NEEyOUM2OURGODNGMTJGMjZBMTBCCis6MTBFMjYwMDA1RUNGMzcyNDg0QjdFM0M1RTA1NDc4OUZGRDc4NzZERjJFCis6MTBFMjcwMDBGRkE5REUwNkU1RTREM0EwNDcxRThEOUM5NDczQkYxNTZECis6MTBFMjgwMDBFODA1RkJGRDdDODMzNTE5RURGREI1RTQ1QUQwNzc5NUEzCis6MTBFMjkwMDAyRUM0Q0ZGQ0Q3REExRDhGMEYzRjRFRjEzQUI3RUQyRkNBCis6MTBFMkEwMDAzNjY5NjhBODlENjBGMkQ2RDVCNEYwREY0Q0JBRThGNkJFCis6MTBFMkIwMDBBNDlEQ0E2M0E4OUY0NDAxRTM3QjhFNjZFRTc3QjdCMDQ2Cis6MTBFMkMwMDBCMjUyMDlEOEUwM0U0RUU1MTZDNTQ5MjU5MTU0M0VBQjAxCis6MTBFMkQwMDAyNzcwM0Y4MUJDNjdGNDQzN0M3NEQ5QjNBRkJDMzM5RUQ1Cis6MTBFMkUwMDBEMjdGRDkyRTI1Qjk5ODREQzcyMkE1MDZGOUUzQTE3RjgzCis6MTBFMkYwMDA1NzhEMENGMkEzRTJGN0FGMTgxQ0MzRDhGMzdCOTI4MkMwCis6MTBFMzAwMDA3QzU5QjY2QjlGODEwQzBCQTdFM0E0QTY3RDg2MzY0Qjg4Cis6MTBFMzEwMDAwNEZFMzQxRDJGODRGNUI2NzZDNzNGMEMxMDU3RkM3OEU5Cis6MTBFMzIwMDBBRjQ0RDJCMkMyREYyRkRGRjIwQUFFN0I0MDI3RTQyNzMwCis6MTBFMzMwMDBFNzU3MzdGRkMyRjgxNjk4RjZGMjY4RUM2NzA3N0JEODA0Cis6MTBFMzQwMDAxM0RGQjI2MTNGOTc4MkYyRkREQ0NCNzA4RkU5N0RBM0QyCis6MTBFMzUwMDAxM0U4NTBGRURDMEExQkNDRTdCNDVDQzNFNEZDRDdGNzNGCis6MTBFMzYwMDBBNjgyQkU5NzJCQkU1NDNCOTZFQzc5Rjk5MzNGNDdGOUIyCis6MTBFMzcwMDA1QjcyRjRFN0E5RTgzRjEwNTc4NjBFNkRCMzJGMDNFNkYyCis6MTBFMzgwMDBCOTc4RjNBRDM4Q0YzMkUyNDYzOTJDRkZCNUJFMDRFRTkyCis6MTBFMzkwMDA5OTVFOTA0OUQxQUUwODdBRjIxNzAzREJCRjlDREU0QTQyCis6MTBFM0EwMDA5OTRCRTc3OTFBRjAwM0ZCRjZBNkRFQkYxREUzRTYzRkMzCis6MTBFM0IwMDBDMzdCNzAzRkU3NzNBNjJCMjFENjJGOTgxOEJGQjYxOEUyCis6MTBFM0MwMDA3NDZBM0NENDI0QzhFRkI2RjVBREMwQTdCM0ZENUM2OTUwCis6MTBFM0QwMDA3MEVFNDFFOUUwRTM3NDkzMkU1MUI4RkFBMzA1Njk4QzFECis6MTBFM0UwMDA0RkM0MjFFN0YwRjdBOEJEOUYwNENGQTE3RkFCRTIzMjc1Cis6MTBFM0YwMDAwRjE3REVFM0Y2OTE4REJGOTI4RjRGRjE4RTgzRjVFQjExCis6MTBFNDAwMDA3NDZBNjRGRkVGMUY3QzdFRjRBNzk1ODRDODU5ODhCRUE4Cis6MTBFNDEwMDAzM0ZEREY3NjFGRDM3NzU1RkZGREQzOEJBMEZERjNCNzE4Cis6MTBFNDIwMDA5ODFFQzE3QkIwNUU1MEJDMDI2OUQ4QkU2RkE2ODRGNjUwCis6MTBFNDMwMDA4MUVFQjMyM0U5RjkzNjg1RUJCOUQ4NEU3NzM4QjhGRUNCCis6MTBFNDQwMDBBQjcyNDJGMTk3QTU4NDUwNzlBMUUzMjQyMTFGNzA3RjFDCis6MTBFNDUwMDA1Q0I2OTFCRTFGRTI5Nzc5NjA1Q0VDNjcwODNFMEY1OThECis6MTBFNDYwMDAzNzk2NzBCQjcwNDg2MzBGQzhFNjk0OThGQ0U4NEFDNUJECis6MTBFNDcwMDBGRkY0MTNBMEJGRUYxOTlEM0UwN0U4QUY1MjAyRjNGRjcwCis6MTBFNDgwMDA2NEU3ODE3N0U2NTAzOUZGQTQ0OUQ1NUJEMUFFNkFGNUUwCis6MTBFNDkwMDBCNkZDRjkzMTI0OTJERTdFNjJBMUZCQUU0ODdBNEI5RjM2Cis6MTBFNEEwMDA0N0Q0NUI0QjFCQ0FGM0ZGMkRCQkFBRDJBRjVENDMzRkUyCis6MTBFNEIwMDBCMDhGMkYzQkEyRDM1MTZCMUYzNzE4MUMxMUVEMjNGRERBCis6MTBFNEMwMDA3OThCRTQ4NENCQTEyQTdGQUFEQzU1RkNCNkFBM0ZEODdECis6MTBFNEQwMDBBMTZFRjk1NEU1QUY1QjNFNTVGOUQzQ0U1N0E0OUZCNjc0Cis6MTBFNEUwMDBGRDBGQTBERjE0QUZEQjREOUJBNjgxRkY2Q0VBMjQxODYzCis6MTBFNEYwMDA4N0NGOURBOUM3N0I5QUE2Q0YwOUJCQTc3MTQ3M0NENkZBCis6MTBFNTAwMDA2N0U5REI3RTBGM0VFMTA3NTVCMzg2QzEzQTdGM0JGMUY5Cis6MTBFNTEwMDAyOUVDRENCRTVFNDEzRkY2RUI0Qjk3MjZEMEY5Q0NFMTBGCis6MTBFNTIwMDBGNEJEOUQ5MjdCMkFFNTQ3QTkyQzA1RTIyODlFQjM2NUEwCis6MTBFNTMwMDBFMjRCNDg4Mjc4QjI0NDRFODRFMDcxN0JCOTU4ODc5RkExCis6MTBFNTQwMDA4OUE5NDEzODNERjVGRkI2N0VGNzc3MkQ4RjUyQkU5RUUzCis6MTBFNTUwMDBDODI2RTQ2RjUwRTJGRTgzM0FENjIxRjIzNEJEODU5RDkxCis6MTBFNTYwMDA2Mzc4NDY0QkZFMDFBODg3NkQ3MjQ5QzgzRUMyNjM2NDVBCis6MTBFNTcwMDBGNkU3NjhGRTJENjM4MDdFQjlCMzg2MjUzMDM5MUY4QzlGCis6MTBFNTgwMDBGQjQ1MEZCNzYzNUQzRTQ3MDJEOEY3QUU5NjgxQjgyRkMzCis6MTBFNTkwMDBFQzNBQkNEMEVBOEU2MENGMEU3MDM5N0I4NTlGQzM3NDk1Cis6MTBFNUEwMDA1OEE0N0EzRDk1RkIwRUQyODk3RThEQ0Y2MjhFMTg5NzQ2Cis6MTBFNUIwMDA5QjYzNTRFRDM0RTcxQkZERDFEM0YxNEJCOTFDQ0VBNkMwCis6MTBFNUMwMDBBRjI2OEMwQ0UxREJDQ0E5MUZDQkI2NzAzRUMwQ0Y4OTQ3Cis6MTBFNUQwMDA5MDdEQzVGN0E1MkZDODM1RDBGNzgwQjlBREIwMjQ0MkRFCis6MTBFNUUwMDBGQ0E2OTJEMzZGRTJGRTJGMERCMEVFRTVCN0U0Q0E0MDcxCis6MTBFNUYwMDBDNzdDOEI1RTg4ODcyQzMyNzI3RDFENEE4NjAyNUUxMzMzCis6MTBFNjAwMDBGNzJGN0Q2MDBDOTU2M0NGNjFCREQzNENFN0U3NjlGOUM3Cis6MTBFNjEwMDBENEUwOEVCMEJGRDNEMjEzRTA4MzdGQjlENUM4RkNFNTc4Cis6MTBFNjIwMDBCNzk1OTJDNTQwRDdCNzZGNjVFN0JEN0YzMzM4QUIyMjRBCis6MTBFNjMwMDBFMTk5NkU2NkZFRTY2QzUyNzI2MUI0RjREM0EzNkZFRTlDCis6MTBFNjQwMDAyQzZCMjA4RkQyQTNDQkMyRUU2Qjg3Q0IxRkQzRkIyRUJDCis6MTBFNjUwMDBCQkU0NUYyRDgxMUNFQTU5M0Q5OURENkYyRTI0RUUwNzQ2Cis6MTBFNjYwMDAyNjQ4QThFRjM3ODREQUFGRENFNkU5Q0ZDMjdEOUFFQTI0Cis6MTBFNjcwMDAxNkM5QUVBM0VERDU3MjlCMDFFNEQ4RDNCQzRCMDZCRjNGCis6MTBFNjgwMDBGRDI2MDc3MUUxRkU1QUFFMTkzNjMzMjRGRTQ1OTczRDRCCis6MTBFNjkwMDBBNEQ3ODFBRkU2Q0MwNUZBN0UzNkQzNDgwMDJGRDdEMDc5Cis6MTBFNkEwMDA0RjZEQjBGRTdGRDYzMjBBRjUyMERBQkM1RUY3OTI2OTc0Cis6MTBFNkIwMDBGOTBBQzA2MUY2NEMyQjBGODVDOUYxNDJGREQ2NDlBNDc5Cis6MTBFNkMwMDAyRjlDMDM0RjM0QjZBRDcwNDZFMDVGQkU4OUM5NTlDQzZDCis6MTBFNkQwMDBGNkNERjRGRjk5N0Q5QjQwRUQxQjkzNkIyNUQ0QkU1OTdECis6MTBFNkUwMDA0QzYxRjYyRDJEOTI3RDVCQkVEQTkxMDY3MkIxN0NDRjI2Cis6MTBFNkYwMDA0MEZDN0U2QkY5NkI4QjUzMjJEOUI3NTdGOUJFRjczNUM3Cis6MTBFNzAwMDA3RTBGQkNBMzJGQjU2RjIzNDJFQzVCNUY2QURGMjJDNDkwCis6MTBFNzEwMDBDOUJGODhENUJFOTlGRTY3RjRFRjU1QjA2RjExRTY2QjlGCis6MTBFNzIwMDAzNjg5RjZBREE4NjUzNURBQjdBMkJFN0FFMUJFMTIzMUY4Cis6MTBFNzMwMDA1MUZCMTY3RjM5RkIzNkZGRDE1QkIxQUUzOEUzMjNDOEZFCis6MTBFNzQwMDAwRkQwMTVFQ0RCNkJEQ0NFQzEzODYwRTc2RTMwQjFGODcyCis6MTBFNzUwMDA2NkFDNzZBRTVGQUM3NkVFN0Y4OENFQUE5RDVCREU0RjcwCis6MTBFNzYwMDA0MkZGMjU1QzBFOTk5RDVCOUVDNUVDRENGMjNEQ0NDRTU0Cis6MTBFNzcwMDAyRENGNjY3NjRFNkJERkYyQzJFQzFCN0JCRjdBMDg3RDM1Cis6MTBFNzgwMDAxRkY3OEY1OThGREYwMUY3MDk0QjE1QTc4OUY2MkY3NkYxCis6MTBFNzkwMDBBOERGNEZENDhDMDlCNTc3Mzc5ODY0QTQ3Mzk4QkQ3M0ZDCis6MTBFN0EwMDA3RThBREZDMUY0NjRFRkZFMEFGNjJFMUJFREQ4MjBEMDdFCis6MTBFN0IwMDAyM0FEN0M0QzE5MTQyRkRDNjc3QkZCQ0I1M0JGRkQxREI1Cis6MTBFN0MwMDBFOENCRUI3QUJDMkZGNEFFOEVFRDhGRjY3RTc5NkExNDJGCis6MTBFN0QwMDBFOERENDMyNjY2N0Y5Nzk4MTgzRkRCQkQzRUI0QTc5M0RDCis6MTBFN0UwMDA4NjMyN0RBRkJBODdEMUFGN0FCN0M0RTZCQjUyRUY3NzM2Cis6MTBFN0YwMDBDMDNBRjBENTQ1REMzRkNGRERDM0Y2Q0ZCMzhDQUQyOUIxCis6MTBFODAwMDBGMTcwMkZFOTVGMTRDMkJFRkIyMEM1RjM0M0U0QTFGNDBECis6MTBFODEwMDA2MjA1QzYwMTlGOEZCMzZEODVGRDY1QTk0QzRDRTBDN0FECis6MTBFODIwMDBDRTNCM0NFNTYzRjA1RkU3NURBQzQzQkY3NzFFM0M4N0MyCis6MTBFODMwMDA3MzEyN0U0RjQyQkQ0NzMxQTc3OUQ3MkI3RDQ4RjhGRDMzCis6MTBFODQwMDA4ODg5NDZDNjg3ODkyQjI0RkY5NjJDQjg4RjIwQjZDRjlGCis6MTBFODUwMDBEM0Y4RjVFQkY4M0NBOTNGOEI3NDIxN0ZENTQ3OENERkNCCis6MTBFODYwMDBBREQzRDJDM0M5RTY1RkI1NTIyRkQyQTM0NjhBNDgwRkIzCis6MTBFODcwMDBDQUQxRTJGOUE5QzFGOUNGN0RBMTZENUQxRjY4NUYyQUY4Cis6MTBFODgwMDBFMTdFNEFBNTg3NzY5RTJBN0RENEZEQ0EzQ0FFMjM5RUIyCis6MTBFODkwMDA5NjVEMEFGMDRCM0I3Rjk1N0U2MUYzNTZFOUE5OTk3RjFGCis6MTBFOEEwMDA5RDZBM0ZBRTI2QzM0MERGREVENUI5MUYxODAzRjJGMUUzCis6MTBFOEIwMDA2NzRBMDc4QUQ3NkRCM0IzRDM0MkVERjE4M0RDMkU0RDlGCis6MTBFOEMwMDA3NTFGQ0Y0Rjc1MDBEREQ4Nzc4OTczQ0E3N0JEOTI0QTFGCis6MTBFOEQwMDBFNzczQjMyQjZCMjQ3QzNGN0NFQjU3MDYzN0M0MTcwRUQyCis6MTBFOEUwMDA5ODNCRDFCRUE5RjJGNTA5OTdGNzAwODdGMzc2NkY3QkM1Cis6MTBFOEYwMDAzRUFFMjNDRDkyMURGNTI2QTBCMTVGRkNGRTk4RTcxRTJCCis6MTBFOTAwMDBBNjU3MDdBNDdGQUNFQjMzMUFFOTBBQ0IwMDI5NTREN0VBCis6MTBFOTEwMDAyMUUwMDNGREVGRDQxNkM2MDcwRkYwODFGRTc3MUFFOTU4Cis6MTBFOTIwMDAzQzA0NzRBRTRFOTY5QzAxRThERkJDRUI1RTkwOUI1N0I2Cis6MTBFOTMwMDBDREY0MzlFODZGQjlFNDY0REY5NzExNEI0NkVBNjVFNTM5Cis6MTBFOTQwMDA1MzhFMjQ5RjE4OUNDODA5QUU4QkYzQTA1RjUyQjhERjhBCis6MTBFOTUwMDAzMUQxRDhGQTM2RTAzMTkxRUFDMzE2MTJFRTg3QTg3QzlECis6MTBFOTYwMDAxRjQyRkY1QzhBNzRFRkE3MDczOUZFOThDQkU3QUI0MEU0Cis6MTBFOTcwMDA2RjBCRDBCNUQzMDBGRThDMjdDMEQ2MEZCNUREMjMzQjdGCis6MTBFOTgwMDBGMjkxM0UyQUJEOUJFOUZBMzA5QUQxNUIxNzgxOUUzN0ZFCis6MTBFOTkwMDBBQjc1NEU0RjRGOEJBNEMwRkI5M0U5RkVCNTk3MDRBNzEwCis6MTBFOUEwMDA1QjVGMUU1MkU1MThCRTg3RDNEMjAzRTIwMTE5MjE3QUJDCis6MTBFOUIwMDAwRkY2MjlGNDdDQjJCQUY5MjhEMjY1Q0E0QUVBNUU4NTE0Cis6MTBFOUMwMDBEMDFERUNENkU1RTgxMzREMkZBQTlCN0YxOEJERjg0NDY3Cis6MTBFOUQwMDBBMzE3N0JDRDlEN0YxOTAxRjFBRjNEMTJEQTA3RDI5MkNCCis6MTBFOUUwMDAyOEVDRjdFM0NEQ0NDRjM4NjA3NkEzRkM3NkJFQTZFMDZBCis6MTBFOUYwMDBGRDczQUQxREY5OUFDQjNERUMyRjQyQkZGQjlCMDQxMzc5Cis6MTBFQTAwMDAwMTNCNjczNzkzOEY1NDNDMDYzMDM5MEFCNURGQUY5QTI0Cis6MTBFQTEwMDBEREM4QUY2OEYwRTNGODNBMUNDRDdGNTJFQjM3QzI3ODFGCis6MTBFQTIwMDA3MDFGRDEyMThFMTdFNjVGRjBGODRGNEZGMzRBRTNFM0YyCis6MTBFQTMwMDA3RUQ3Nzk3NTlGNjc5MjU2MDM2MUYxRkYxNUM2OTA3MzczCis6MTBFQTQwMDBBOURCRjhCOTQwNzc5QzJDRDhDRjZFQkE0QzNGODhCRjcxCis6MTBFQTUwMDAwNEU4QkM1RkRERjkxNEM2N0ZDRjNGNzM3QzFBQzhFRkIyCis6MTBFQTYwMDBCMjNGRUE4OTg5RjJCOTdEQTc5NTA0RDhCRDBCMDNBQzAyCis6MTBFQTcwMDBCMzE1QkJGNTExQ0Y1MTA4QTk2NURGMzlGRUNFOEFGNjczCis6MTBFQTgwMDBBNUUyNzlBM0JGOThCRTVGRjFFMjQ3QzMyMTZFRDVCRTcwCis6MTBFQTkwMDA4NkQ5MTlERjMzNUMzRTdDNkRDM0UxN0NCRDQyNjZFN0ZECis6MTBFQUEwMDBDMjVBNzhENzcxNzkzOUY3NTI3QzI5RDg0OUE5OTE3RDEyCis6MTBFQUIwMDBCRjVBRDEzNDRCMzE4NkVDRDM0NzlBMTUxQzk3RjZDMzE1Cis6MTBFQUMwMDA3QkNCQkUxRDEyQzZDQkMzRjE1QkNERTBFRDYwRjZBRkQ0Cis6MTBFQUQwMDBBMjU5RjFDMzc3QjAxNThENUI3MDdGRUI2OUZDRDQwMDUwCis6MTBFQUUwMDA3RUREQTRERjNEQ0JCRUFGNkRENjhCRjFDMzQ2N0RDMENFCis6MTBFQUYwMDA4ODcxNEVGRDcxRTM3MEE2Qjc5MjEwOEZBQTQyQkRBQzJCCis6MTBFQjAwMDA2RUUyNzEzMjRERkM2OEQ5RUZGNkJDRThBM0E0NTlGNjY5Cis6MTBFQjEwMDBGQkRGRDhDMERFOUM2RERENkVDM0Y4NUMyMzhCQkZDOTA0Cis6MTBFQjIwMDAxNjM5NzI3Q0FFQTdCODVDRDM3RDNDMkUzN0Y1MzQxOTBDCis6MTBFQjMwMDAxRTFFOTczQjBCRkZBMTdBMzhERkNDRjU1NThENkIzNjQ3Cis6MTBFQjQwMDBGNjhBRTlGQzdDRDlCMzE3OUU4NEYzQTQ3M0NGN0ZGMkQ1Cis6MTBFQjUwMDAyNEUwNUZGOUNENjc0RkRFMERFNzEyN0JDRDc2NThGRkRECis6MTBFQjYwMDAzQ0NGQkM4REYxNzdGNUJEQkJCOTlDQjdFRkY4Q0REM0U5Cis6MTBFQjcwMDA0RjUwM0Q2QzdGQ0Y4OEY3QjZEQUY3OUNDRTg0RUYxOTAzCis6MTBFQjgwMDBEQjc3N0Q5OTBBRjFDRDk1N0IwQTcwM0ZCM0YyODU0OTE5Cis6MTBFQjkwMDA2OTk3QkI3RjAyRjJFOThGRTFGQzQ0Q0I4RjAzQkJGNUExCis6MTBFQkEwMDAwNEJFRTczQzdGQ0M4OEZFNDc3NzlDQjVBOThBQzVBRkY5Cis6MTBFQkIwMDAxRDNDQkVCQTMzRjI3OTk1MUEwRkFDREU3RENCQ0REN0IyCis6MTBFQkMwMDBDMzNBQjg1QjcxM0FGMDM5OEYwRkY2MTQ1NzdEOEJGMjY4Cis6MTBFQkQwMDA3NTQ0MENGQ0RCQzlFM0U3NEQ1MzIzQzY1NUNGQzM3RjE3Cis6MTBFQkUwMDAyODlGMzY5OUM1QjhFQTg1REQ4QkZGRUQwOTY4REJERDI2Cis6MTBFQkYwMDAyQjZBNUMzNTEwMDNEREQ0RjNCMDMyQjM2QjlCMTlGNDkwCis6MTBFQzAwMDBFM0Y5REY2MjFDMUJGODQ2N0Q3MkQyRkVFQzg1NEM4ODZFCis6MTBFQzEwMDA0NzlDNTEzQUVGQzQ3QkNBN0I4Qzc4Q0ZBODYyQ0ZCQkFDCis6MTBFQzIwMDBBODJGRUQyRjFDQzU3MzI2QzJDRkEzREE0OUY3MEYzQkRGCis6MTBFQzMwMDAzN0UwN0IxRENGMzYyQjhCQzc3MkZBNDNCQ0Q2NjFDMzNFCis6MTBFQzQwMDBFNzNDMkVDQkU0NTg4REQ3NDY4QkQzQkU2RjY2RjdBMTM5Cis6MTBFQzUwMDBENEYzQjlBQTZEMUYxODg4MjZGRTJEOEQwNTdFMUQxN0M5Cis6MTBFQzYwMDBDRTE1RDU3OTZCRTFEOTgxMEVENzg2OUUzRjQ0OEI4NzJGCis6MTBFQzcwMDA3M0JCMUFDNjJGNzZFRUQwQkU4NTlGNDc3NDlGMzMxMEE0Cis6MTBFQzgwMDBEMjc3MjQ5QzhGQjM3MzczOEY1RjdBMzcxMjdGRDVGMzVCCis6MTBFQzkwMDA4N0I3QjVGQUU5OEZFRERDQTE2N0JDQkYxQjVENUUzNUI4Cis6MTBFQ0EwMDBCM0ZEQUQ0QTlGNzM1RjQ3QjZEMzlENUNERkU5M0FEM0FFCis6MTBFQ0IwMDA2MUM2NzM2M0I2Q0VDQ0UzRUI0QzM1QTUxQkZCRUU4RDgyCis6MTBFQ0MwMDBFMTdCOEVFRjAzQ0YzREEzRjdDMzdFNzk1REQzMDFCNDIzCis6MTBFQ0QwMDBCNzVBM0RBRjI2MkNGRUE1MUQ0RjhBNjNGRTQxNzVGMzQyCis6MTBFQ0UwMDBCRUUxNjA4RkNFRUQ3RjA5RTVBRjdBRTc3MTgzOEZDMjE5Cis6MTBFQ0YwMDAzOUQ0Rjg3QjQzREJEMEEwQkM4MzFERjc4N0Q4RjE3M0YwCis6MTBFRDAwMDBDRkVEMUJDRUNFNDUyMkU3NjlCMTcxRjg5RTE2MTFCRTNDCis6MTBFRDEwMDA2N0U3QTcwMkZDNjVCRTI2ODNEREQyRjMzODY3NjVEN0I3Cis6MTBFRDIwMDAyQzk4RUZEOTU2ODVDMDdERjZCMzRERkEyMjdGODQ3MUI5Cis6MTBFRDMwMDAzRjgzNzU2QzRDOTA0RUVCQUNFQzNCM0U3RDkyMDFGREZECis6MTBFRDQwMDBDQzk1RDZCMUM3RTBGQkYxOTU1NjgzMDNGNkRCQjVBQkE2Cis6MTBFRDUwMDBEOUJEQ0FEQUZGRTU0QzA3QkVENDI2REU4NkU3NDZGNTA0Cis6MTBFRDYwMDAxQTNBREE5M0VEQjlCMDBGQjdFNzk3OEMwNkIxRDJEQTU5Cis6MTBFRDcwMDA4MzQ0OTc0RUMwN0JBNUI1MjhDRDYxODFCQzVFQ0M0RjQ2Cis6MTBFRDgwMDAyMUIyMTNCRjMzRDREQjBBOEI2MDFFN0FCQkNFNkU4RUVBCis6MTBFRDkwMDBCOEJFMzI3ODhBODVFNUNENTBFQ0UyNzc3RkRGMjEwRjZGCis6MTBFREEwMDAwNjgxN0MxQ0RGM0EwRjQ2QTcyNjBGNDZGOThERkZBRjgwCis6MTBFREIwMDBFNUMxRjBDMTM4M0Y4MTNDMTgwMThDRUZBODc5MzA5MjUxCis6MTBFREMwMDA3RkU0M0MxODEwNUYxQTFEOTIwN0EzNTM5MzA3ODNGMzQ3Cis6MTBFREQwMDBGMTlGNzkzMEZFOTkwNzAzNEEzNTBGQzYzQjFCQ0EwQURCCis6MTBFREUwMDAyMDRGODU5QTA3RTNDQzA2NEYwMUU0QTU1MEYzNjA3Q0UxCis6MTBFREYwMDBCNTYxMTVBQkYzM0MxODk2RkI1NzE3ODRFNkMxQzhCQzQ4Cis6MTBFRTAwMDA3RjAzQjZBQjc5MzA5Q0Y3M0Y1MjEwOUEwNzIzRUZGRTkxCis6MTBFRTEwMDBDRDA1QTE3OTMwNjZERUJGQkQyMDM0MEY0NkQ5RkRDRkM4Cis6MTBFRTIwMDAxNTA4NzkzMEQ2RkVBMTAwRjI2MEJDMUVFRjZFOEQ0QjQ2Cis6MTBFRTMwMDA4OTlFMDdBMzM5Q0UxMTUzMUUwQzBBRTczRDg0MTMyNTgyCis6MTBFRTQwMDAwRjg2MTY0RUI0M0MxODE0Q0U4OUI4MzFEMUYzNjA4NEM1Cis6MTBFRTUwMDBFMTEzMjUwRjA2ODVGMzA5QzI4OTkyMDcyMzBDOUYyODI5Cis6MTBFRTYwMDA3OTMwMjg5Q0NGNzE1RTUxRjI2MDY4RTE0NENCODM0MUQ4Cis6MTBFRTcwMDBFMUZDMTdDMjg5OTIwNzQzMEIyNzVBMUUwQzBBQzcxMEUwCis6MTBFRTgwMDA5RjEyM0QwRjQ2MTgzRTUxRjI2MDUwMzgwOTA4Mjc0QTNDCis6MTBFRTkwMDAxRThDMzA3Q0EyRTRDMUEwNzBEMjExNEU5NDNDMTg1QTUyCis6MTBFRUEwMDAzOEQxRjI2MDUwMzg1OTA4Mjc0QTFFMEMyRDlDNjg3OUQ5Cis6MTBFRUIwMDAzMDI4OUNBQkUyQzc0NENGODMxMTg2NEY5NDNDMTgxNDkyCis6MTBFRUMwMDBDRTI4QzQyNzRBMUU4QzMwN0NBMkU0QzFBMDcwMjYyMDI0Cis6MTBFRUQwMDA5QzI4NzkzMEI0NzBBMkU1QzFBMDcwMEE3MDVFNTFGMjJFCis6MTBFRUUwMDA2MDY4RTE0NENCODM0MUUxNEM0MzdDQTJFNEMxMDhDM0E4Cis6MTBFRUYwMDAyNzRBMUUwQzBBNjcxNkUyMTMyNTBGNDYxODNFNTFGMkU4Cis6MTBFRjAwMDA2MDUwMzg2RUM0Mjc0QTFFMEMyRDlDNjg3OTMwMjg5Q0FFCis6MTBFRjEwMDBBNTA4Mjc0QTFFMEMyRDlDNjg3OTMwMjg5Q0U1MDgyN0Y3Cis6MTBFRjIwMDA0QTFFOEMzMDdDQTJFNEMxQTA3MEVFNDYzODUxRjI2MERCCis6MTBFRjMwMDA4NEUxRjM1REYzNjA5ODAzODNBNDgxOTgwNzAzRjM3MTgwCis6MTBFRjQwMDA3NkU3QzE0OEZFRDY3OTMwN0UwNUY4RkUzMzBGQzYzRjFFCis6MTBFRjUwMDBGMzYwRkMxODc5MzA2RUI1QkFGRjFFOEZGQkM2RUY5NkQyCis6MTBFRjYwMDAwN0UzNENCQzI2NkY0NDBGNzkzMDZFQjU5NjlDMDU3OTRCCis6MTBFRjcwMDBGRUI2NzkzMDJFQzQ3RkJCM0MxODc0OUM3RjVDNkU5Q0JGCis6MTBFRjgwMDA2ODc5MzA3NDk2NkY5NzA3ODM4RTIzNUJDNjVDNjYzRTA0Cis6MTBFRjkwMDA1MUYyNjAyNDU4QzRGQzIxM0Y1NjFFOEM2M0YxNDkzODVECis6MTBFRkEwMDA5RjY4NzkzMDdFNzJGOTI2RTgzNjBCRjY2OUQzNTExNEUyCis6MTBFRkIwMDBDOTRGMjZGRkM0NjgwQjhGMUJGRTUwRjkyNzYwRDIzOTVBCis6MTBFRkMwMDAzRkE1RkMxMzZBMUU4MzI2MDVENkMzRjczOURGREZFMUIwCis6MTBFRkQwMDA3MkYxMDFDRjQzNzEyQzZBMUUwQUZGNTQ4Q0VGMkUxNTdCCis6MTBFRkUwMDBGMzUwNENFMTdDOUNFRDE2RTU2MTBBNjFFNzI4NTNGMjkxCis6MTBFRkYwMDBCM0ZDQjVCMDVGMkZEN0U0QTExODIyOUVEMzE3QkI4RjA3Cis6MTBGMDAwMDBFNjUzNzA2NEFBNTM5Q0M3NTEyRTBGRDM0QTNGM0QwODY0Cis6MTBGMDEwMDBFQ0I5Nzk2Q0U0M0MxNDMzMzgzRkE2NkJFODMyODVGM0U1Cis6MTBGMDIwMDA2RDNBMkY2Rjg3NEY3M0E4M0MxNzk3MUY5NTgxQUVEMzBBCis6MTBGMDMwMDAxQzZEMzJDNkU5NkY1MkY5RTcxMEY4Mzc5M0MzRDVFMjc5Cis6MTBGMDQwMDAzQjgzRjM2RkM2NjRDNjNGMkRERTZGMDFGRjI4REU2RjgyCis6MTBGMDUwMDA5NThGNDJGRTY5RjFENkUyQTlFNTNGMDlFNTc3NDhGRUMyCis6MTBGMDYwMDA5MDVDMjJFNjlGOTg2NDEyRjM0RjE0RDhDNUZDMTMzN0M2Cis6MTBGMDcwMDBBNjhCRjkyNzI2M0JDNEZDMTMzNzBEMTFGMzRGNEM3NUIzCis6MTBGMDgwMDA4QUY5Mjc2RTFFMkJFNjlGOThFRTVBQURDOTdGNzE5RkI1Cis6MTBGMDkwMDAyNkZGQzU0MzlBRkMxNzlCMzRGOTJGQjY2OEYyNUZFQzQ0Cis6MTBGMEEwMDBEMEU0QkZEOEE1Qzk3RkYxOTIyNkZGQzUzRUExQkVCMDZFCis6MTBGMEIwMDBFRTM1QTFGRkUyRkFBMzQyN0Q0OUMzN0I0MkZGQTVGRUU0Cis6MTBGMEMwMDBFMzQyRkJCMkM2OEY4NUY2QUFBNjRGODVCQUE3Rjk0QkQ1Cis6MTBGMEQwMDBBMTdGNEZGOTA3REVFMkRGNDNCRkMzQkY4NzNFQzZCRjU0Cis6MTBGMEUwMDA4NzdFQkY4N0ZDMTdFRjU4OTZBRTBCQ0Q3RkYxQkVDNTZDCis6MTBGMEYwMDBCMzBFRjIxMjFDQjczODc4NUU4MUM4RjkyREJBREJBM0MzCis6MTBGMTAwMDBFNEJGMDhCRUZGRURGMzVGQTQyNEZGRjBGOTA4NzQ1NkQ2Cis6MTBGMTEwMDBGNjNENjA2RjRCOUVDRTlBRjJEREYzMTFEQzVBMjI3RUYzCis6MTBGMTIwMDBENzNEQUI1NEZDQUU1QjY3NjVERjZCQ0Y3NjhCREY3NzhCCis6MTBGMTMwMDBERjVFMkU3RURGM0QyMkNFMkQwMTFFREFGQzE3QkQyREI3Cis6MTBGMTQwMDAyRTlEMTVFQzI1Q0Y1MzEwODBFRjc0QjMyMURFNTY4NDJECis6MTBGMTUwMDBFNTQxQzg3RjkxMERGMUI2NTIyQzBGNDNGRTBCNUFGRUNDCis6MTBGMTYwMDAxOUYyNUZEMEYyMDhFNEJGQTBFNTFCOTBGRjIyMUJGMjZBCis6MTBGMTcwMDA2N0Y4NzhGRThDM0E5RTNGQTM5RUU3Q0Y2OEUwRjkzM0FDCis6MTBGMTgwMDBGQzNDN0Y0NjIzQ0Y5RkQxQzRGMzY3MzRGM0ZDMTkwMUM1Cis6MTBGMTkwMDA4NDczQzI3QjE4Q0I5M0RFNTYyQzRGNzk4RjYxNzlDNjZFCis6MTBGMUEwMDBEQjg2RTU1OUVGMTkyQ0NGNzkzQkIxNkNGNzVFQzQzMkExCis6MTBGMUIwMDBENkZDMTlBQTVDN0UwODdFQzMxNTMwM0U5MzY3NTU0RTc3Cis6MTBGMUMwMDBBRjdFRTA5MTc1QTFGOTMzNDYzQ0IwMDlFNTM0NUFERUQzCis6MTBGMUQwMDA4QzFDRjhBNjJGMjU3QURFOENFRUY2Mjg3OTMzODJFRjg4Cis6MTBGMUUwMDA0N0NGOUI5MTM2RkFDN0NCOUIzMUQ3RjJDM0U0Q0Q5ODdBCis6MTBGMUYwMDA1QjIzRTY3NTk4QjdFQUYyNzkzMzQ2QzQ5NURDODJGMjcwCis6MTBGMjAwMDBDN0U1NzFBRTI1QjZCQzE5M0VBQkM0QkZDQkE3NzQwMTMwCis6MTBGMjEwMDBCRjhCRDIwNUQ3RUIxRUYyMEUxQ0I0M0UzRDA0RjYxMzk1Cis6MTBGMjIwMDA1RDQzQUVCQTZDQkUwN0FENUM0NEE3MzdDQkVGMzBFN0E5Cis6MTBGMjMwMDA0N0NFOTdEMTEzNURENUZFRUY1N0IwM0MwRTczMkRERjRGCis6MTBGMjQwMDAzMjVGNDYwRkY5MTYwRTY2N0Y4MTc2MzJENjdDMTkzRDA1Cis6MTBGMjUwMDBBRDBGM0REMTczQzY4RjlDMkZBMzI3QkJEQTkzM0Q3REE1Cis6MTBGMjYwMDA3MzBBQTM3M0VGMUVFOEFDN0UyRjVENjk2QTNEODQyRjlECis6MTBGMjcwMDBEQjVEQThEQTMyRkYxRTNFNzdBNjFERTMzMzFEM0JGOUE2Cis6MTBGMjgwMDBCRDM4MTc3MUQ4NTNEOUY3RkFFMDZGNzYzQzlGMzA5Q0EwCis6MTBGMjkwMDBFMDc3RkM3NkUyQTJGQzg5RTdDRkE1OURGQkY2QzFCRDM1Cis6MTBGMkEwMDA4MEI1MzZFMjRBNEMwMjY3OEYzOEY0MDM2MTFGNzY4REQxCis6MTBGMkIwMDAwOUUyMzU1NUJCM0Y3REUzOEYxNEFFQjk0NThGRjdFNUM1Cis6MTBGMkMwMDAzQTI4MEVBREU4RjdCOTEyODE2RkYxRTQ5N0I4NEY4NzhECis6MTBGMkQwMDAzM0JBNEJCRDQyQkZFQkQ2RkMxRTBFRTg5MjFBM0M3RjAwCis6MTBGMkUwMDAyQUQwNUI3MERGRDRCNTk5REQ2N0Q1OTNBQjFFOUY5MEI0Cis6MTBGMkYwMDA4Q0Y3QzY4OURGODFGQzQzM0Y3NTE5QzdCMzhCMTA2NzU0Cis6MTBGMzAwMDAwMEZBRUZCNEUyRkRENTI1QUYyRDM0QzBBMDcwREUxQUFGCis6MTBGMzEwMDAxQTM3RTg1NTI0QzY4MTFBQ0NCNkUxNzA2RjJGNURCRDRGCis6MTBGMzIwMDBCRkU3NzNCNTgyMUZCRTg4QzM0RDI5MTFFMzQ0OUYyQ0VDCis6MTBGMzMwMDAyODNBMENGRUYzMjI3NzE5REVBQjQ4MkIxNUUzNDY4NEZFCis6MTBGMzQwMDA3RjQ3MEZEQjMyRjAzMzY1QzJFRjc1RkFEOTdEQ0ZCMDVFCis6MTBGMzUwMDBFRkVBOUJCNzIwOUU0QkZEOUFGQjRCOEQ2MjVEQTVEQkQwCis6MTBGMzYwMDAzOTJCQkY5NzYyMjE5Njk4RThENjM2RjhGMTA5QTNCRkVBCis6MTBGMzcwMDAzREREOENFOTIyRERDQzBFOTE2RUYxNDM0NEJBNjhFOUEzCis6MTBGMzgwMDA2Njc1OEE3NEQxRDIyRDYxQUMxODVGNTNFOUE2REVBN0U5Cis6MTBGMzkwMDBGQ0ExRTg5NjY0RTNGNzNDODJGNDJBMzFBNUEyQzk0N0IwCis6MTBGM0EwMDAzQzMzRTQwMENBQjc1NjFGRkE1ODAyRjAxQjdFNDhCRjMwCis6MTBGM0IwMDA2NEZGNkE3Q0NCNjk5NUMxNkVBNTMzRDA0NDVBQzRERTI0Cis6MTBGM0MwMDA4QjA3N0Q4MEZDQkRDNDg5RkFBMEZFM0U4QTc4RjIyMUJECis6MTBGM0QwMDA5N0ZCOEZDODI1NUFBRTk4N0VGMEY4MDJEQUJBMTlFNDg2Cis6MTBGM0UwMDA2RDA0RkIzRDFBMThBRjRBMjJCODlGNTM4OEQzMEVGQjE5Cis6MTBGM0YwMDBBODI2QUZDOUI5NDg4MTczNERFMjVDOTQwREU3OTk3NkIwCis6MTBGNDAwMDAyQzFGRTRERjNCNzcwQzI1QjhFRjZGMEE3QzlFMEFGN0QwCis6MTBGNDEwMDAwNjFFMUNEOTM5MERFMjBGOUVDNUE0MDRENkFGNTkwOUFBCis6MTBGNDIwMDA2QzdENURDNjRCNUIwMjhCQ0Y2QzI4RDExMUQ3NjhGODIxCis6MTBGNDMwMDA3RDRBN0FCRjQ0Qzc2QkI3QkI1RUJCMDFGQ0QxMTY3NjcxCis6MTBGNDQwMDAzRjgwRDgzQkRGQjgxRERCNDdFMUY3RTExOUJBRkE2QjIzCis6MTBGNDUwMDAwMDFGREExRkJGMkJFRTY4RjlDOEI2MzBDNDBFQjczN0VECis6MTBGNDYwMDAzRjcyMjVEQzZCRERBNDhCRkMzRDczODE4REZGRkUxRDlGCis6MTBGNDcwMDA3RTNGNjU0NDMwREY0MjgxNkQwQ0U2NjU3ODcwMDAxRDhCCis6MTBGNDgwMDBBNzdBN0ExN0YyNTE5NUNCRUIzOEZEMEY5NjRENDFGQ0Q4Cis6MTBGNDkwMDA1RTY4OTExQzEwQUYyQkQ0REY3MUQzMzA4QURGQjhCNzEwCis6MTBGNEEwMDA2NTdFQUY5N0RENUYxRkNERkJENzlBQTlGRUEyRkRBQUFGCis6MTBGNEIwMDBGRjFCRkM5RTk1OTc0RUNBOTgwRjcxNzQ0RDE5REUxMzcxCis6MTBGNEMwMDBGQ0EzQURGMDMwRjAyQkM3RDUzNDBBRTQyOUJGMjUxMUQ5Cis6MTBGNEQwMDBDRjcxM0QxRjEyMjc3RTlBRDUyQURFMDdDQ0UxRjdCNjAxCis6MTBGNEUwMDA3M0RBODgxRjg0RTJEQTYzNjJGQkI4MzZCMTdFOUQ2NjA4Cis6MTBGNEYwMDBGRjM5REZDNkY1RDQ0NjUyNDFFRTM2N0VBRDk3NjBGRDRBCis6MTBGNTAwMDBFOEU4MjRDRTM1MTRERjhFNDVCRDcxRkM4RUNGMDlGQUI0Cis6MTBGNTEwMDA4OTFENUZFQjhCMjJERDhGNTk2RTYzRkNEQjY0MjA2OEY1Cis6MTBGNTIwMDBCRjM3OTU1OUYwREVGOUZFQjI4QUZFRTA1RjdDNzE5NzM1Cis6MTBGNTMwMDBCQjdGQTQzODY1ODg5Rjk2QzBCRUJCNzcyNTkwQjEyMDVECis6MTBGNTQwMDA4NzZCMjU0NkVGRkE4QzkyMDhFQjk2MkE3N0FBMUNBQUJECis6MTBGNTUwMDBGMjk3NTExNkU3OEU3NDBGRjUzMzlCODQ3Mjk2NTczNkU3Cis6MTBGNTYwMDA0NDMyODBGQ0VDOTUzMEZDRDVCRTg2RTI3NTk5NzVEQkEzCis6MTBGNTcwMDA0N0Q2RjQwMTdDM0NDRDlGRTE3RDMyNTM4QkU0OEE3NDA1Cis6MTBGNTgwMDA0RkU3NjE5QjhEREQ2RjVDRTM1QjBERjc0NjdFNDE5NTM4Cis6MTBGNTkwMDAwOEVDNTQ4NkExM0UyQjEyN0MxRkQ5ODg3RUU5NUQzNjhCCis6MTBGNUEwMDAwNzdCQ0ZDNEYzMjBDOUY1MTk3MDlGQTJCRDc5RDJFNEJGCis6MTBGNUIwMDA3NTE0Q0YyN0E4M0VDMDdBQjU0OTcxMjJERUJFMkE0MjEzCis6MTBGNUMwMDBGMDlFMkM4RkQ3RjU5RDQ2QjY2QzA4RjE3RjM3REI3MjI1Cis6MTBGNUQwMDAxQjZEMTQ1RUEzOEQ3RDZGRDlDQkVEOTQwMDZGRTc3RjFCCis6MTBGNUUwMDBGREMzMDZGMDNCMkUxQTkxN0ZCREI5QkZBOUJFNzc4MDNGCis6MTBGNUYwMDBEMzY3NUM4MjZCMkJCQzRGRTA5NzlGNTFFM0UzNzREQkQ2Cis6MTBGNjAwMDA5QzhCNDY0MTVDOUVEMjNCQzQwRTA2RjlFNjYzRjk1MUUxCis6MTBGNjEwMDBEQzA0Q0YzRjkyMkMzQTk0NDNFMjcyMzlFQ0MyN0Q3NkZGCis6MTBGNjIwMDAxRkVBOERBQTA3MjQyMDExQzg1M0EwREEzN0E5NDUwQTdBCis6MTBGNjMwMDA1OEE5REM4RjM2NTkwMjcwOEYyRUE5OUNDRTNCMTlGMjQ3Cis6MTBGNjQwMDA5QTk4MThCQzU2Rjk5QzE4RDdBMkYyOTgwM0NFM0RDMURGCis6MTBGNjUwMDBBQkYzMTA0ODA1RjhBQURENTNFREU1REE0NDY2OEZENjIyCis6MTBGNjYwMDAzRTI0NjM1RUQ0Q0Q3MjlCMTlFMkE5NTkyRTQ3MUVBNDk1Cis6MTBGNjcwMDA4ODRDOTIxRDc4QUZBNjVGMzk3MTUyMEM0OUZDQzA1RjZGCis6MTBGNjgwMDAyNzc2RkIwMTU0QzlBRkY5NDYzRjJGRDI3NzVCMTc2RDQwCis6MTBGNjkwMDBDQ0RGMUU5N0UwRkUzM0QwNkJGOEUxQ0VGREUwMkUzOEQ0Cis6MTBGNkEwMDBDREE0MTdCQkZGQzVFRDA0Rjc2QjBBRjk3QTM3RUUzRjFGCis6MTBGNkIwMDA3NEVDN0JEMUMwMEQyNEY0M0IyQUFEOUREODY0NjZFQjdECis6MTBGNkMwMDBGQ0I4RUJEOUJBMzdFRUJDMDVEN0JENkUzQjUxNTY4OEI2Cis6MTBGNkQwMDBFQkQ0Qzg5NjUxMDdFMDlFQzVDODBGOTk3RTEyNkUxRkU1Cis6MTBGNkUwMDBFQ0Y0MEZEMDI5RTdCMDRGMEZGNEY5QjY3NjQxQ0I2RkE5Cis6MTBGNkYwMDAxMjMwNzVENzg3RUFFMDFDODZFQTVCQzhGQjY3MzU3NjZGCis6MTBGNzAwMDA2NEM1RjQ0MUI1MTg1RUU2NzJENEZGMUVBN0RFMUQ0MjQzCis6MTBGNzEwMDA0N0VERkJERDcxNEFDOUQ0RkREQzMxMTBFQ0M4MTEzRDY5Cis6MTBGNzIwMDBEQzBCRTlDOEE1RjNBM0YzREZDOEY1MjVGMTczRkY2NDhCCis6MTBGNzMwMDA5OEQ3QzY5NjFCQ0QyMERGNkIwMzc5RjY2MkZBNEVBMkVFCis6MTBGNzQwMDBBOTA0OTk5NzQ4NUMxOENGMTk0OTNEMzJDODhGNTE4QjRECis6MTBGNzUwMDA0MjQxRkQ0MUE1ODQyNEE0QzAzREI0MjIyMURFNDMyQ0I2Cis6MTBGNzYwMDA0OTNDRkY0QjAwRjlEMjJEQTc1NDhFNDNFRkU1QUFGMjk2Cis6MTBGNzcwMDBBOTk1NDc1NTdFNkJFMUEwMDVDRTA3MjE2MjRFNEJCRDkyCis6MTBGNzgwMDBENDg0ODc4MTQ2QjJEOTBFRUJCQkVBNUZENjcyN0ZBRUQ2Cis6MTBGNzkwMDBENjlDRTlDN0VGOTc3QzE5RTgxRkFERTRGRTUxQURBNUYzCis6MTBGN0EwMDBEMDg0RTY2MDVGMzJBRUVCMkIyMTdFNDJFOUIwMzI4NTM5Cis6MTBGN0IwMDBEOTc5NzUzRTVBQjlGNDVDRDQxMzdGQzgzRUMxMjM3NzFBCis6MTBGN0MwMDBFMjdENDRDRjQ1MDMzRTVGQTdCODA3QzBGQzU1RkE1QzE1Cis6MTBGN0QwMDBDM0U5QTNBNTg3OTRDMEY3OUQ5QzJFM0RFMzlCNjM4NzU3Cis6MTBGN0UwMDA3QkMxODkyNjE3NTk4RkY4RTZFMTNERUVBNkMwNDgxMzg0Cis6MTBGN0YwMDBBQ0JGRjc2QUYwOEQwMUNGNkIxM0M2ODRFMzI5NUJBMjFGCis6MTBGODAwMDBFMDk5Q0NGMEJDOEVCOEZGRDg0NkU1Mzc2NzQ1NUQ2RDEyCis6MTBGODEwMDAzQ0VBMTU3OTJCM0QyNzVDQUZCNDdBQTRFQThEMUFFNzUwCis6MTBGODIwMDBCREI2QjJGRTAwNUVCQkVENDE2RjNDRjE4QzJFNEVBNTI1Cis6MTBGODMwMDAwNEVGNTczOUY3QzRBMzFERDFFQUQzRTc3Q0ZFOUU3OEM1Cis6MTBGODQwMDA0NkJGMDU4QTdCMDZDQ0NGQTNFQkNDMDQzOTE5RUUyMDRBCis6MTBGODUwMDBCRDhBMjk5MkMzOUJGNUE4RTdBNDM1QjY3QkY4QUE3Rjk5Cis6MTBGODYwMDBBNUZBNTVEQTdFQUE1RkE1REE2M0Y1MUVGQ0RBMDRGNzdECis6MTBGODcwMDA3QzkwMDNBOTk5Q0EyREM1QTdENkNFRjY0QjlCNkRFRUY5Cis6MTBGODgwMDA0NTgwNTczQ0M1M0QwRUY2OEQ0MzAyNTlFQ0ZCNUY1MTU4Cis6MTBGODkwMDAyRkEyRTk0MUJDNDZDRTlCMDIzMkFFMEIzRUJBMkU2NDhCCis6MTBGOEEwMDA0QkUxNzhBOEUzMEY0QTQ4NjQ3Q0E0NUEwRUVCN0RERjU1Cis6MTBGOEIwMDAxQ0MyMDZBQjI2OTgzN0E3RUY3MEUyODY3NUFCRUY0OEZGCis6MTBGOEMwMDA3NjlGNzE0RDAyQjNCRkI1MDk2Q0RENTJDQkNEQjY5MkI4Cis6MTBGOEQwMDBCQjUxQkY2NUUyMzM4RUZDRUU3ODAzQUE3MERGN0M2RDBFCis6MTBGOEUwMDA4MkVCMkVBMDg3QTlDODg1RjNFODYzMjc0RUYwNEJGQjc3Cis6MTBGOEYwMDBDODREMTI3QzM3OUE1NEU5OTBEODNENzMxMkZDN0U4QjI4Cis6MTBGOTAwMDBDMkVCNTNFQ0M4MDU3REVEMDNGQjZCRThERjEyMzlDRjhBCis6MTBGOTEwMDBEOEEzMDlFQUZENUVFNjdGM0E0OTc3MUVBRjQ3MTM5ODAwCis6MTBGOTIwMDBGRjc5MDg1MjlGRjQyQTU2RjM4MkE5RTczOTRFMDlFODc1Cis6MTBGOTMwMDBENDZFQkQwRDkxNkVCRjIwMzEzRjNEOTFEMTRCQkI0Rjc5Cis6MTBGOTQwMDAwMEMyODdGRUZFQkQ3QjBENDQzNjI3OTFFMEVGNTlENUZFCis6MTBGOTUwMDA5OUQwQkY4RjI3Q0UyNkIwNTdCQjEyMDZGMDczNEM2N0U1Cis6MTBGOTYwMDAxREQ0N0YyNTc3OUExMjg3MDZFNTVEOTVFMzA3MjdDQzlFCis6MTBGOTcwMDA3MDQyMkE1MkRCRjU1REMzNjE0RjQ1RTU3QTI3RDBCRjVGCis6MTBGOTgwMDA3RDQyRDc2MENDNDE0OTNBMzM5OUZDQjhGNDQyQkUyMDVECis6MTBGOTkwMDA5NTBGQ0Q4QUMwMDczM0VDQzM0M0VEQTRENTMwMDRGQ0VBCis6MTBGOUEwMDBEMTc2MjlDRTA5RjcyQ0RBOTc0QTBDNUZDOUM0RjMyOTFFCis6MTBGOUIwMDBDOUMyM0NEM0UzOTk3RkREQzFFREQ1M0IwOTU5MjgyNzY2Cis6MTBGOUMwMDBBQTNEQTZGM0FCODM1MjNCMEY4RjExRUY3NDkwQ0UzRDRGCis6MTBGOUQwMDBGMUZFQUQ3MDZFQTVDOTNGQTlDRDRGMzk2OUExMDVFRjA0Cis6MTBGOUUwMDA3RjZDREM2M0M2RkQ2QjU3MDkzQkM3RUY2QTMxQTI3REI0Cis6MTBGOUYwMDA4RUE2Qjc2OTZERTY4ODcxMUNCNUE0RjQ3QjBCRTg5N0Y5Cis6MTBGQTAwMDBBNkQ0MjQ4MjNENEM5QjdCRDIwNjdDRDdEMkE1NDNGMjYwCis6MTBGQTEwMDA1RDczMDhGNjQ1QUYyQjExQkZCQjU1Q0JGNEY0OUIxMkI5Cis6MTBGQTIwMDAxN0QxRkVFOTE5OTNCMTU0OUYzNzU4RTQ4OEY3Q0Q0RkE5Cis6MTBGQTMwMDA3M0JENTJFNUYxNEEzQTIyREYwRjlEMDY3OTNDRUY3RTE1Cis6MTBGQTQwMDBGMzFEMTcwOURFREY2Rjg4NjM3NDZDODg2Mzc0RUM3MkQyCis6MTBGQTUwMDA4RjRGNzgxQUU0Q0Q5NzgxRkFCMDU4M0QwN0U1RkI3RkM4Cis6MTBGQTYwMDAzNUNGOTQzQURFNDZBRjI5NTFBNjJBRDBCMDYwOEExOTI0Cis6MTBGQTcwMDBENjg5MTRFMjlBM0MxQjk0NzVBMzQyRTAzQkEyQzdCQzEyCis6MTBGQTgwMDAzQjEyRjMzMThFNkQxMkVGRjlEQUQ5QkRFMUNGMzcxNkEzCis6MTBGQTkwMDBFMDc3REVBOTY0OEQ3OTMwQTU0NzU5ODlDRTA5RjE4M0Q1Cis6MTBGQUEwMDBGMzBCREVCN0U5QTgzQzJERThEMzlBMDNGMkZCQkFFMkU4Cis6MTBGQUIwMDAyNkY2MzExOEVBQzJGREM5OTI1MjgzM0Y0MEY5OTZEQzFFCis6MTBGQUMwMDA0MDBEMDVBNUNCN0YwM0Y0QTE1NDczMDA4MDAwMDAwMDE2Cis6MTBGQUQwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1N0QwQjc4NTRENThCCis6MTBGQUUwMDBCNUYwM0U3M0NFM0M5Mjk5MjQzMzc5NEUxRUMwMDlFMUE1Cis6MTBGQUYwMDA5RDEwODcyNEJDMUY0RTlFNDQ4ODMwQkMwNDg1RUE4MDNDCis6MTBGQjAwMDAyOENGMjQ4OEQ2REZCNkRFQ0JDNDQ0RjRBMkI3NDVFOUJCCis6MTBGQjEwMDBBRkY0RDZEQjdGQjBBMkE4MjAwMTgyMDY5QUE0MTM0MERFCis6MTBGQjIwMDBFNDExMzQwOEE4QThBRDUxMjk2MjBCQzkwOEVBQzVENjZBCis6MTBGQjMwMDA3QkZERDc1QTdCOUZDQ0NDNDkyMkQ4REU0RTNFQkZFRDExCis6MTBGQjQwMDAzRThGQkRENzVFRUZCNUY2REE4NzJFQzk3NzEzNEI2NENCCis6MTBGQjUwMDBDQ0I3RDhDMEI2NEE4QzdEODdCRjFCNDNBREQ5NkU2MDg5Cis6MTBGQjYwMDAyQzg5QjE5NjM4M0JCNTRFRTcwQ0M3RDI4NEYwN0U4NTIwCis6MTBGQjcwMDA2MzY5M0U2M0Q1RDZEODVDMTY4NzZEN0YzRjhCODVGMTcwCis6MTBGQjgwMDA4QTU4RUFEMjAyNjg1QkFDQUU1QTk1QjEyNTQ2QUZERDIxCis6MTBGQjkwMDAwRUNGNzc0RUJBM0NBNDhFRTEyRkQ4REYzMzkyQjEyRTMwCis6MTBGQkEwMDAyMzZCOTRFMkIwMUY2MDZDMEM0MzUwRjhDRkVENTZFRDIwCis6MTBGQkIwMDBEMDk3RjBGRkUxRkQ0NDhCMkQyMEMzQjhDQ0EzNUNFQ0MzCis6MTBGQkMwMDBCMEYwNDdCRTFCMjgxRTRENjZDQzI4NUU5MzlBREVGODI3Cis6MTBGQkQwMDA0NkNBNjUyQzc2NzIxMTYzNzBERkNBNUM4RkIyMkNCODhFCis6MTBGQkUwMDAzMThDQTk5RTE4QzZBMkQ4MzNGNkYzRDk4QzE5RjA3REIyCis6MTBGQkYwMDA1ODQ3NTdGM0JCRkQ3QzAwQzcxRkZFRTU0QTBDODNGQjRCCis6MTBGQzAwMDAxRjI5QzExODU3MEU2MzE3MUUzQzE1RTNCNkMxRjUwNzJGCis6MTBGQzEwMDBFNTcyM0ZGNDZGNDc0MEM2ODdGMDkyNkY4NzBCQTMxOUQ4Cis6MTBGQzIwMDA3QkM0RUUxOTgxRUJCQTYzREQ3RjhGRjFEQTQyRjdEOTNECis6MTBGQzMwMDAwMzcwMzE5NUIxMTU3RTE5RTdFNkYwQzI3RkFCQjY1OTc2Cis6MTBGQzQwMDAxOUIzODRGQTk1RjUwOTExN0RDMDE4RTFCNUQyQ0NENjY3Cis6MTBGQzUwMDBENERCN0FEMjYzMDVEMjAzRTY1REIxN0Q4QjI5NURDNTI1Cis6MTBGQzYwMDBGOUJEOTNFQ0QwQkZBMEMwQUI4MEVGMEIwRDMxN0U1RjMwCis6MTBGQzcwMDA2NjA4OUUyNURCNDc5OUQyRTFENjQ3NEQ2NjE2ODA3NTBBCis6MTBGQzgwMDAzMEE1RERDODZDODRCNTBBMDlGMEU2MTU3OEQzQzM3OUQwCis6MTBGQzkwMDBCOEM1NEFFM0RERjU3RjY1QkYxOTk2QkExOEU2N0EyMDQ0Cis6MTBGQ0EwMDAxRTlFNkY1QTUxQzE3MjdCQUVFM0FFM0ZBODY1Mjk0MERDCis6MTBGQ0IwMDBCQ0JCRkU0RDYyM0U5NTNGRkY2MDFFM0NGRkMwMjM1RjE0Cis6MTBGQ0MwMDAyMERERjRFQjVDRUMzMzdFRDIxMUIxNkUzNzYzMDBDRkY0Cis6MTBGQ0QwMDAzMjQxRUYzQjFGOERCQ0JGQUNFOTMxMUE2NzI5RjM5QTYzCis6MTBGQ0UwMDA5MDlFNzc2REQ0REZCRkU5MzNFNEJCNjU0QzA5NUQwN0I3Cis6MTBGQ0YwMDAzQzVDM0U5MjY1NDUzQ0RDNjE4RjQ5M0MwRjIwMDM4RkE0Cis6MTBGRDAwMDA4REZEMEVERURGN0Q2NDYwOUMzN0E3Mjc3RUI1RjZFMkIxCis6MTBGRDEwMDAzQUUwNkYzMzYzN0Y1RTY3QTFGNkMyM0E0NkVEMDhCQkY3Cis6MTBGRDIwMDA0QUY0NTlERDc0RjI3RUU0QUZBQUM2NUQyNjFDQTdDNTZECis6MTBGRDMwMDBGRkE3ODQwOUYwNDg2MUQzMzczMjMyNTcyMTczREY3QjQ0Cis6MTBGRDQwMDAwRUYwRjkyMzI2QjNFRjAwN0ZCQjE5RTc5RkY1NDZDRkVFCis6MTBGRDUwMDAzRDQ4QUYxQkFGOTZEMzdERkRGQTE3NjlGQzdGMjQ5RTBCCis6MTBGRDYwMDBGODY3MTFBRTNCMTdBRjJCNUZGNkI2QUU5RkUyQkE4MEQ1Cis6MTBGRDcwMDA5RkQ5NTg1ODk3N0NGREVCRDJENkEzQUQ0RkJCNUYyOUQ2Cis6MTBGRDgwMDAwM0RGRjVGMkJFQzZFRjIzODQzRTU4RkFEQ0FDRjU2OTFBCis6MTBGRDkwMDA4MDhBREFFNkNGRkE3NzEwM0ZCMUQzMjhCRjFBM0YyRDE5Cis6MTBGREEwMDAxMzc0RDJGMzhENDZDNzZFRkU2OEZBNzc1QTlGNDYzRkFBCis6MTBGREIwMDBFMDdGQTdDMTg5NkRDMDY5MThENzkzNEZGNDdDQTFFNzk0Cis6MTBGREMwMDA4MzRFNjM0NzdGOTQ1RjNEMUY3NDRBNkM0MTZGRUJGQTJCCis6MTBGREQwMDAzN0ZCNDA1QUQ3NTJENTVENjY4N0ZCNzczMUNGN0EzQkU4Cis6MTBGREUwMDBBRDY3MjM1REJGQTA2QzNDRkMzMzk0QUJFNzM4NUY3NzE1Cis6MTBGREYwMDBFQjM5MzM5NzM3NzZEQ0U4NDdCREI5MzY0NjRENzFEOEQ1Cis6MTBGRTAwMDAwNEZEODBDRTlEQkJDQzNFN0M0RTlCRTdGQzNBQjc3QjhECis6MTBGRTEwMDA5MDExRjE1RTRFRUQ5RkQ3NzlEQzgzMDY4N0VFREZGRDEyCis6MTBGRTIwMDBBQjJCQjEyQUJDREYzNThDOTVBM0RDNzdDNjQ0QzJCQkIzCis6MTBGRTMwMDBDRjJFMTMzQ0ZCOTAwRUM4N0Y0QUZCRkY3QzgwM0FFOTMzCis6MTBGRTQwMDBCOUY2MzFBODQ3Q0Y3RkZCNUZCMTFFNzhCRUVCNUI3MzdECis6MTBGRTUwMDA3OTZGRUIzQzJERTgwN0VBRTVCNDEzRjhFQzc2MjE2N0ZGCis6MTBGRTYwMDBCNzM3NTUxMjVEOTYzQzMzQ0I4NEZDQ0MxRUUwRjhCNDFBCis6MTBGRTcwMDBDMDFGRUFEN0I2QThEODY3NzExRDhCMUIyNEQyMjM3QTdFCis6MTBGRTgwMDA3QURDRTU5QUZBMzlFQURCM0JGRDg1RjQ3RTBGRkFCMEJECis6MTBGRTkwMDBDNzg5QkU3NzIxM0Q4Njg1RTgzMUQ2QTE3Mjc4NTRGOEFFCis6MTBGRUEwMDAwM0JFQjk0M0YwQ0Q3OTY1OERDOTAwN0FFNEZDMzM4MDk3Cis6MTBGRUIwMDA2RjAwNzk5NUMyRENCREU5QzFGRTBFQ0U4NzdEQUQ0N0VFCis6MTBGRUMwMDBCRjhFQkVFMDVGRjY1Q0NERkEzNDg2RUIxRjY1NEFFQjcxCis6MTBGRUQwMDA0NUVGNjhFQkJGOEJCOTYyNDlFRjg4RjVCMjhFMUI0OURECis6MTBGRUUwMDA1RUFCMkQ3QzVFNkQ5RDJCOUFFRTlDODE3QzUxQjUxOThECis6MTBGRUYwMDBFODk1RDk3M0REQTg3NzE3RjcwMjZGOTk3Q0QxNjg4MUVGCis6MTBGRjAwMDBGN0JBMUU5MDVDQTg2RkZCQTI4M0E2MjdFRTEyRjg1QUUwCis6MTBGRjEwMDBCOTZERjEwQzM0OUE4QjYxM0UzOTEzRjVEMTE3NkZDNjY4Cis6MTBGRjIwMDAyNEEyNUM0MTVGRkExRTdBMzVDOTFGOUI3MTFEOENFM0M4Cis6MTBGRjMwMDA3QjA5RTA3QjgzNzRGREY0NUJCNkI5RDAzRDI4RUNCOTU2Cis6MTBGRjQwMDAxNUZFOUJEQzgzQzJGNTk5OEVBRTZDREJBQ0QwRjM2NEZFCis6MTBGRjUwMDBCN0REMjZCNEM3RjEwRUExQkY4NDVFRUU1QkJFNjBFMUUzCis6MTBGRjYwMDAwMEU3REExRDBFQjI2RjZDOEQ4M0Y0NjM3NUQzMTY1MzAwCis6MTBGRjcwMDBCOERERDVFNDRCOTNCN0IxMEUzQkYxNTk1NUUzMTNGNDFCCis6MTBGRjgwMDAxQ0U4NUZENTAxRkQ0QTRCQzdDRjZGNTVDM0YwMzk0RTEyCis6MTBGRjkwMDBEMDUxQUUzMEExRkVFRTRCN0Y4MkJFRjlCMjIzNkM5REY0Cis6MTBGRkEwMDAyMzFDQzJBRTA4RkQ3QjJERkRBMEMxQUQxRjU3RDMwNzlBCis6MTBGRkIwMDAxQURDMUFERjZCRUJEMUYzN0Q1RkYwRTlFOUMyOTg5RkExCis6MTBGRkMwMDBGQjBCM0FGQUFDNDI3QTg0RjUxMTVFMDVGMERCRDY2Qzk1Cis6MTBGRkQwMDBGNTNGMDRGMEI2NDkxQzdFNUY3MzE0QzFERkU5MkM3NjRGCis6MTBGRkUwMDA5RjAzM0ZBRjJBNzUyMUI1MjdGMEM1NTRGNEVCM0NEM0VFCis6MTBGRkYwMDAxMDlGOUEzRkM3MEExMjIyRkMyNDdEQUJGOTM3NzlDMkMxCis6MDIwMDAwMDIyMDAwREMKKzoxMDAwMDAwMDlGREExQkU1Q0UwNzEzMDkzRjRGMDJGMkMzOTQ5QThFODUKKzoxMDAwMTAwMDM5MTYyMEQ5QUQ4RUVERTUwQThDM0ZFNTg5OEUzOTUxMzAKKzoxMDAwMjAwMEQwNUZFOEQ4QzFGQjVCM0I0RTU5NUM4Q0Q1QjA1N0NBNUEKKzoxMDAwMzAwMDRCQTA3RjNCQTAxM0M3QkI1NjVCNjBGNjJDNDRGOTVEMTkKKzoxMDAwNDAwMDBEN0U5MjA1RUNEMUVBRDM0MzBFQTFEQ0FENkVBRjI4NTQKKzoxMDAwNTAwMDk3QzBFRUFDMDY4MzIzODEzREFBNzRDNzA2QUNCOUQ0MjEKKzoxMDAwNjAwMDY3MTNFMEI5RTdFRERFNjVDNDJGNTdFQkM4NkVBRDNFMTAKKzoxMDAwNzAwMEFENzBCOTM5OTI0OEVCNTcwMEY2Mjg3OEFGMkUxQUZDQ0MKKzoxMDAwODAwMDU1QzA1NzVEQkNDNTU1OUI0OUQ3N0Q1MUYxRDg3N0FCNUQKKzoxMDAwOTAwMDZBRDg3NThEMUVGODFFQzI1MTY3NjA2RTA3QjRBRDQ3RjEKKzoxMDAwQTAwMDg3QzQ3NTdDOEZERDZFNURDNzJBMTRFMDgzODNFQjJDREIKKzoxMDAwQjAwMEQ0RUFFRjE3OUFFQzgzRDBFRTE1MUE5OEI3Mzc3REY5OEEKKzoxMDAwQzAwMEE0ODNGQjhEQzBFNEU5NDhFN0FBMjMyNjkyNzdGQ0ExMkMKKzoxMDAwRDAwMDFGNTgyOUY0NTExNTEwMjgwRUUwQTkzQ0NEMDJEMUIxQ0EKKzoxMDAwRTAwMEY4NUNEOUU3MEFCNjBEMTJGQjI0QzI1RjYxQTFCRURDNDEKKzoxMDAwRjAwMDM3RENEN0RCNTZFMTc4ODNDM0Y5ODRFM0E5NDg5MTJBM0EKKzoxMDAxMDAwMDk0QjA3OTRCNkM1MTExN0QzOUM1MzAwQ0Q3QzNFNDY4N0MKKzoxMDAxMTAwMEQ3NTZDMEFGOUM2RTU4QjMxQkQ2MkYwRjgwMTZGMEExRDgKKzoxMDAxMjAwMEQ4NURGMjYyNjgzNzE2NEY5MTk3NDA1QjZCRTQ3NkI1MDUKKzoxMDAxMzAwMEQ2QzA5Njg3RTNFOTA1ODExRkFERkRDMEUxRDk4QTc0NzkKKzoxMDAxNDAwMEJGRjQ1NkZCMTgyQkU5QUIwQzNCQzlCOTU4NkZBREU0QjMKKzoxMDAxNTAwMDBBNTBEQ0Q0Q0E1QzVCRTE1QTlERUM2MTlDOEZFQjE5QzAKKzoxMDAxNjAwMEYyRjExQjYyMUM5N0Q5QjA0NzA1N0U2RDc0N0M0MEZDOTAKKzoxMDAxNzAwMEVCOEEzM0RDOUIwOUZEQzAxMzFGRjE3RUJBRTE0QTI2RUUKKzoxMDAxODAwMEYwRjc4MTI3M0FDQTE1OTAwNzU3QjZFMUNBNDBFODFGMzEKKzoxMDAxOTAwMDdBRTI2MzdFN0YyMjBDMDkwNkVBRjAxMzlGOTRGQjZDREYKKzoxMDAxQTAwMDM4MkVENzY3NkNCQjNCMUJFNzUxMEMxMkM5QTk3MkMwMzQKKzoxMDAxQjAwMEU0QUY4NUZGQUQ4QkU1RkM1NDA3M0M4MkZDRjc4NkIwQ0QKKzoxMDAxQzAwMEIzRUI2QjhBNUVCNjAyRkYyQjQ1NkU3NTBEOENFM0M3RjEKKzoxMDAxRDAwMDgwNjlGNERGREY2QTc4OTRBRDA2OEE1M0IwNDU3Q0JGNEUKKzoxMDAxRTAwMDI5RDZBREQxODEzNUI4QjM2N0ExNUVBODc3NjdDRjhFMjgKKzoxMDAxRjAwMDQxQkM3QTRGMjI1RUYzREJEQUE3QTAzRTZFNzhGQkZEQUUKKzoxMDAyMDAwMDMxRThBRjIyQkQ3MDlDRkMzNjg4REQ2MDNEOTc1RUVCMjcKKzoxMDAyMTAwMEI3NDUwRThCNDczRjcwMTRCRUUzMDAzOTk2RENEQzlGNzgKKzoxMDAyMjAwMDk0NTQzQjVCMDQ3MjU3RUI2NkFBMDlENjk1QTI4QkVCRkMKKzoxMDAyMzAwMDFBMThENzJGQ0ZEQjNEN0ZDNEY3NTg0NjgwRUM0REExNkQKKzoxMDAyNDAwMEMzRkIzMUNFQUY4RjU3NTk3QjdDQUY3QTU5QUZCNzRDRDgKKzoxMDAyNTAwMEI5MEZDOEU4RTdDNEE3MzdCRUI3MDRGNUZCRUZDREFFQ0EKKzoxMDAyNjAwMEMxMkFDMkU1NjYwRjAwM0MzQjBENEM2MUYxQzQyNkMzQjgKKzoxMDAyNzAwMDk0MDI4QzNGQTM1RDFCNTBFRTVEQ0NFOTAzMzlDMzMwODMKKzoxMDAyODAwMDhEODA4NDVGRTI5OEIwQjg1NUFDMDdERTJGNjFEMDhFQzgKKzoxMDAyOTAwMDQ1Rjg2RUEwRjVDOUM4NTdBMzk4NDc0NkZEMzU4NkY5QkQKKzoxMDAyQTAwMEFERDg3NjM1QkZFNjQ0QkMzRDE5QzVFRTQwQkZDRkIyRjAKKzoxMDAyQjAwMDhEQjlGRDYxRkE2MzQwM0NGN0Y3MjYyNTE4MDlFRTY4MTEKKzoxMDAyQzAwMDYzRkQ2Q0U0RDdFODJGOTgxREZEQUFBRUZGMzQyOTM4RjIKKzoxMDAyRDAwMDNFMDhDODc0QkNFRTNBNkM2MDA4RTcwQjQ2QkYzRDBFQTIKKzoxMDAyRTAwMEZBQzFFMThBRkEyQzBCOERENzI1RThBRDhERkJBNDQ5MjQKKzoxMDAyRjAwMDFERUU0MDdEOTNDMEZCMkYxNDcyRkIxQ0ZDRENFNDdGRTEKKzoxMDAzMDAwMDM2MTNGMTYzNTlFMzBGOTMyRjY3M0NGNzVCQkQ0OTQ1MDMKKzoxMDAzMTAwMEYxRjFEMEQ2Mzc0NzMzOUM3RjZDNEJCNDAxRTlGMEYyNTIKKzoxMDAzMjAwMEY2QkMyOEU0ODc5RDg4MUI1ODdGQkNEOTdFMEY4RTE3QUEKKzoxMDAzMzAwMDdGMDVFMENEQTRFQjZFQzJBQkEyOEU4QTAzQkM0RTk4QzMKKzoxMDAzNDAwMDY2NTMzNzAwREU1Rjg4QUE5Rjg2RkMxRkRDNjE2MENGQTIKKzoxMDAzNTAwMEMyMTQzQjREQUU1OUQ4REY3OTU5QjVBM0JFN0QyMUIzNDgKKzoxMDAzNjAwMDNFOUFENkIzQzM0MEVCRDkxOTFEMUNCMTE2RTBERTMwNUUKKzoxMDAzNzAwMDRDMjk0N0Y4MTQyQjUzNTAwRjJCODYyMkY1MUVCODNFRkMKKzoxMDAzODAwMDM0OUVEQjU3NEQyRjJGODhFN0YyRjNBNDA0RjNFN0UxMDcKKzoxMDAzOTAwMDczODUyNDNGQTVCMjhERTRBRTJCQzhGQzY2OTgyNzY5MEYKKzoxMDAzQTAwMDZFQkI4Q0Y0ODg5RTA1QUM4NDdDQUYwNDY0MDZGRDQ5NkEKKzoxMDAzQjAwMDFFNDY0OThENDkzNkEzNUYyNTdERUJCNjJEMDZCQTRGMDMKKzoxMDAzQzAwMDExRkE3NkNBODdBQjJCNzhEQ0UzM0EzRDExQzYzQjY4NUQKKzoxMDAzRDAwMDMzMzI1Q0Q3NjRENjIxQTMzRjM4RjkyQTczMDU5MDdGNjYKKzoxMDAzRTAwMEFFRjI3OEM2MEU3RkU4M0YzREFGRjMwNzRCQzU3OEVFMUYKKzoxMDAzRjAwMEEwQkQwNDJGMTdCMjQ4M0ZBRTc0NzNEOUU3MTJDREEzNDYKKzoxMDA0MDAwMDJBNjhBNzhCMkRCQUZCRThFN0M1NjIxQjE5Mzc5NUM1OEIKKzoxMDA0MTAwMDBCRkZBNjNGRUJGRjFERTkzN0UwNUU5OEVGM0UzQjlGRTkKKzoxMDA0MjAwMEFGNTRDRUY5MTVBRUFGQUJEQ0U0NDIzQ0VDQjJCOURGNzEKKzoxMDA0MzAwMDlEODg3QUIxRERDOEI2QjJCRUU1RTk3OTg4M0ZGREUwQjYKKzoxMDA0NDAwMDczMENCQjZBNjVGRTdDRTI0NzFCQUU2N0M0RTY4REJFREIKKzoxMDA0NTAwMDI4NThGNzg4NDE3QzdDRTQzQkQ0MjM0M0ZGMzMzMTAxQTcKKzoxMDA0NjAwMEY1Rjg1NUExNUZCNDU2RTMzM0U0Mjc3QjFDRTcyN0ZCN0YKKzoxMDA0NzAwMDBEMjEzOUJDMzMzRTkzOUVEM0U0MEFGOTBDQzdEOTZGRTIKKzoxMDA0ODAwMEY0MkZGNEY0NjIyNzgxM0ZFRjQ0RkVEQzY1NjMxNDQ3RTgKKzoxMDA0OTAwMDNEOTY2QTU5ODA3MkE1Q0RGM0JDRTA2MzdEQkJCRTY2MTQKKzoxMDA0QTAwMDZEQUIxMUQ3RkQxNUQ4MDM4MEJCMjRFREFBMjlEQzlFQzYKKzoxMDA0QjAwMEVGNDlFMjdDNTUyQTdGNEJGRTc2Njc5M0M0RDBDRjRGM0QKKzoxMDA0QzAwMDZFRTJGQTNCOUMzRjUyN0JFNzhGNUYyMjVFQUZDNTFGMTcKKzoxMDA0RDAwMDVBQkNCMEZCODdGMkM3OTFCRjhGM0YzNjVDOTMzRkJFREIKKzoxMDA0RTAwMDhENDUzQ0RDRDc1QzlDQzJCRUM3QkY2OTE0RkNEMEQ3MkQKKzoxMDA0RjAwMEZERjE1NkFFRTdGNEQ3NUYxMTc4REQ2N0RBMzgzRDE3QzYKKzoxMDA1MDAwMEY1QzBDRDA2MTdDQTM5NTAzRjdEMzZBQzYzNUYzNDdGRTYKKzoxMDA1MTAwMDhGMjk2QkIyQjBCRjRCRTE3QTY1NTc5Mzk5RjRDQTJFMUQKKzoxMDA1MjAwMDlCRDc0Qjc2REM2OTYxRTgzRjMwQzVEQkYxMzNENDg3N0MKKzoxMDA1MzAwMDY5MTY3NTQzMThGRjJFOERFN0ZDNTY2RjBDOENGRjBDNjcKKzoxMDA1NDAwMEZERTJBMzlDQ0VFMzZFQ0U5MzRERjA1Q0VBNTIyRUU3MjMKKzoxMDA1NTAwMDA1MTc0QzVCMzAwRTJCNEQyOERDODE3Qzc0MDI3NTE2MjAKKzoxMDA1NjAwMEI0RDVFN0UwMjk0MDdDRDUzOTEzRTlCQkQ3NUE0RTk2N0MKKzoxMDA1NzAwMDYxN0UxMUZDMUUzN0YyRDlEOEZEMjdDQjhBNzJGMDc5NDMKKzoxMDA1ODAwMEFFNEZGNzhBNTZFQjhGQzczNUM1QjNFRTc4RDcyM0VDNUQKKzoxMDA1OTAwMEM2NzhDNkY1OTIwN0Y5MjQzN0Q0Njc2RTIzQzU2QjFBNUYKKzoxMDA1QTAwMDNGRDQ0NzAzM0Y4MDVDQ0M2N0FBMzExNjg2OUM3M0NFNEMKKzoxMDA1QjAwMEYzMzA5ODQzMzZBNzNDOTJDRUYzMDNEMzI4M0U5QzdCN0UKKzoxMDA1QzAwMEJBRkQ1NUQwQ0M2QzlFNDc3NzVGRjBDMTdDMUQxRjgwNzMKKzoxMDA1RDAwMDlEM0QxRThGRkVEMkYxODBDOTgwRjM5OUQ2NjQ3MzdGNTIKKzoxMDA1RTAwMDY4NEQxNkYyOTMyNjRGRjQwMzNDRDVGRjYxRDhCMzFCMzgKKzoxMDA1RjAwMEMyRUM3QjZDMDI5N0EzQzc1RDBBRERGNzc1OThGQzgzOUMKKzoxMDA2MDAwMEUxRDJCRjMzRkU1RUJEQjAzRjlGQTMzQzYzRkM3MERGMTEKKzoxMDA2MTAwMDJCMEJEMThFRTYyRjc3MUY0NEZDNEY0RjkyRTlGQTJGMTgKKzoxMDA2MjAwMDU4QzA5Mjg1RjQ3MTI5RTQ5N0Q1MUJENUUyQ0ZBNEQwQTgKKzoxMDA2MzAwMDczNENGMTBDQjNDMUZERkQ0OUQxRjkzODdGNjk4MkY3RTQKKzoxMDA2NDAwMDIyRDI4OTI5QzEyM0Y4REVEODA5NzlGOTI4NUZCNjUxNjkKKzoxMDA2NTAwMDc1MDk2ODhGMzRCODAxQUVGMkFEQjYxMDFDMUE1QzY3MkMKKzoxMDA2NjAwMDA1NUY5NDI2MkNCRTg4RUJDN0Y3NTBCRjM0N0U3Q0RFMzYKKzoxMDA2NzAwMDgyRUY2Qjc0QUY2RkZFODJEMzNCOENGRTQ4RUYxMEZEQjAKKzoxMDA2ODAwMEE1M0JCMEFGRTFFMTJCQTE1N0I0RkUzRjRBN0YyRDdGRTAKKzoxMDA2OTAwMDcwNERGQTYzN0UyMEY2RUZBMkJGMzUyMTI5NDQ3RkYwMkEKKzoxMDA2QTAwMEIzRTJCMUFGRjdCM0VBNERFMDc3RTdGNEJDNUVFODI4MTgKKzoxMDA2QjAwMEE0RTc1RDI2NTgyMUZBNTUyRDEwNzdBMjNDN0ExREI0ODcKKzoxMDA2QzAwMDJGQjBDN0NFRTdFQUZBQzNGOUZFRTAyMkIyQzEwOUYxQzIKKzoxMDA2RDAwMDg0Rjc2QTUzNzAwOEZBMjFBMzAyMTJGOTg1QTM0MEYwNDcKKzoxMDA2RTAwMDE3OTFGRjk1NDE3QUNGMjVGMEM0Q0U0QkQyRjk2MURDNEEKKzoxMDA2RjAwMDQ1RkYyRTFERkRDMzQwMDJGQTUxQTNDQzE1MDFFNEY3QkUKKzoxMDA3MDAwMERERDYyOUU5RThEN0U1NTkyNzY1MjE1RkJEM0FFQ0JFN0EKKzoxMDA3MTAwMEUzNjg4MjVFNEQ1QkJFRTczOTM1RTRGRjY4RkFFREEwMjEKKzoxMDA3MjAwMDE4NTY5QkJGMjA4MUVCQTExQjQxRERBMjFGODgyRTYzQzEKKzoxMDA3MzAwMDM4MUM5QTNFNDdGMjIwMUM1MjYwQkVFMTNCMkJFOUU1OTMKKzoxMDA3NDAwMEE2MEVBMEM3OEQwODA3RTBBMTU1NjIwREE4Q0YwQjBEMUUKKzoxMDA3NTAwMEVFQzQ2MkY0RDM5MjAyMEFGN0Y3QkVFOThGRjlDMThBQjgKKzoxMDA3NjAwMEE2MzdERTQzNzgyQjcwM0YwNEUzNTA5N0YxNjI3NzNFNjMKKzoxMDA3NzAwMDYyNjA0RjNGNThGMzU3QjRCODQwRjM2N0I0RjgxM0ZEQzUKKzoxMDA3ODAwMDFFQkMzRjQwNUNCNzlCMDE0MEI0NDcwMThCQkYwNkU2RUYKKzoxMDA3OTAwMDdGRjJCMjNBREMyREU0NTY4MTc1NTQ4ODc1Q0M2NEVENTUKKzoxMDA3QTAwMDA0MTdGQkY2QkJFRjI2MDE3RDY2MDg3QzU0MUM4MUI4NUMKKzoxMDA3QjAwMDMxMTdFRjMzNzYzM0UwRTE2Njg1Qzc5MzM3QkIyMDdFOTAKKzoxMDA3QzAwMDBDRTNBMzk5RTMyMkZCRjg5QjkyMUMxQUU3NUFDRkVCQTgKKzoxMDA3RDAwMEVEQzA0NERERkVDQzNGREExRTAxN0JGNDA5QjhDRUM3ODQKKzoxMDA3RTAwMEQ2RjFCODc0QzI0MEQ5QTdBMEUxMUM5NzY5NDA3RUFDOEQKKzoxMDA3RjAwMDE2RjYwREMyRTg1RUVERDI0QkMyMkY5RTYwRThDODc1QkEKKzoxMDA4MDAwMDAxN0U1QkY3RkY4REVDRTA4MUZEN0Y3QjA3RkRCQ0YxOTYKKzoxMDA4MTAwMDlGMkJDQzBDRUY0RkY4QkMyMDBFRjUwNDFCQTcxMjVGRUEKKzoxMDA4MjAwMDY5RTM1NkZGQTlDMUNBRjg3NUUyRkYyQUIxRjZDMzAwMTEKKzoxMDA4MzAwMDhGN0IyOEMyNjdBMUY2NzcxNzlGREM4NEUzN0Q3OTRFMTIKKzoxMDA4NDAwMEUxQkMyREU2MkYzMzc5MDc2MTFFQkJDQ0M0RjMwMTg3RDEKKzoxMDA4NTAwMDI1RUVGRjY4RjcwRjFCMDE2RUI4QkUyOTQxQ0IwQkI0MjQKKzoxMDA4NjAwMDkzRERDNzlGMzk4Q0NFMzc2MzNFMjAyRjQ0RDc5QjJGMTMKKzoxMDA4NzAwMDk0N0ZBRUU0RjZBNDBGRkVGRTM3RjIwMTVBMUU2MEFCODEKKzoxMDA4ODAwMEMwMUYzQjc4RDZBNDAyNUM1MzFCRUU1MUQwQkY5RUVBM0EKKzoxMDA4OTAwMDk0OTkzQjZDREU5QjU0MkI3Mzg3RTUwMzlFNDlEMEY5RkEKKzoxMDA4QTAwMDIzMDc1RkRDMzQwM0VDNDk3NTlCRUM4QTQyNzk2RERBRUYKKzoxMDA4QjAwMDc1M0MxN0ZCRURCMkNCREEwQjFGRTlGMTNCQjVFOTFFMzYKKzoxMDA4QzAwMDA1RjlERjk4QTg5MjdDNUY2QkZFMDkyMzgwNEY2RTQwOEMKKzoxMDA4RDAwMEJBMzNGMkVCM0FDNzQ4MjQ0NzdBRkExRUQ4RkZFQjg0QzIKKzoxMDA4RTAwMDhFOUNCRUYxREQxN0ZERjU3NEY4RERDNTIyREFFRkI5OTcKKzoxMDA4RjAwMDE2M0RGNDdDREIwMkVCRjRDMUZBMDJCMDRFMUZGODVENEEKKzoxMDA5MDAwMDA3RDZEOUE5N0Y2ODlEOTNGQTFBQkY1NjM3RkYzNjAxREIKKzoxMDA5MTAwMEZEMzY4RDRGNEIxMzM4REY4Q0RGQjcyOTgxRDk0MkY0NzgKKzoxMDA5MjAwMEQyRjBGNUExQjA1NzdCQTMzNDdGQzMzNTZGMDY1QzNBOTQKKzoxMDA5MzAwMDA1NzY4NzE4RDRDN0RBOUQ2MzQyRjY2QkZFRTkzMkYyN0EKKzoxMDA5NDAwMDM3MzRGQjM1NUY1RTU0NEE2QTUzRDgyRjRDMjNBMzVFN0QKKzoxMDA5NTAwMEQzREJBOUI5RUE2MjIzRUJDRDNFMkQ4OEVDOTdCNzZEQzYKKzoxMDA5NjAwMDU0NjJBODY3MjAzQTQ5OTJDMDg3RjBCMzM1MzhDRTMwMzgKKzoxMDA5NzAwMDBGQzFBOUE3QTcwNjk3MUUxRTZEN0Q5QTdGM0Q1RkQwNjgKKzoxMDA5ODAwMDZGQ0VBMDRDMjNDMkRGQzNBRThBNzVFMjQwOTg4N0I4MTEKKzoxMDA5OTAwMDVFQkJGQUI1OEU5RkFGNUMyODc5MkJCNzE3QkVFRDhCODcKKzoxMDA5QTAwMDdGRjVGNzM1N0Q1MDg2MTNFNDUxRUI0M0JGQzI5ODk4MkQKKzoxMDA5QjAwMDRDNzQyQkJCNkE2MjZFQjAxQjJDMjM4QTdEMUE2NjU3NUYKKzoxMDA5QzAwMDU4QzU1MEUyOUY3Qjg1MURFRThCN0ZBQUFFQ0FDQzlCOUIKKzoxMDA5RDAwMDFGRTIyMzYzRTMxMzU2RTRBMzdEQ0E0NjJCRTYyNzI3RDEKKzoxMDA5RTAwMERCNjZENUM2MDE5RTRBRkU1NDM0MTdGREJDRUEwRTAzRjEKKzoxMDA5RjAwMEMzMTQ1NjY5RDMxNzA3MzFBRUFGN0U4RkI5NTAyRjE2ODcKKzoxMDBBMDAwMDM1QjUxNjIzREYxRDUyREE2NThBQjNCRjY0RUM4OTMwMzEKKzoxMDBBMTAwMDdGQjFCMUE5RDY4QUZFNTQ2M0EyNEM3MUZDNjEwN0U3OEQKKzoxMDBBMjAwMDRCRURGRTk2NDRBRTNGMUFDRjVEOUVFMUVFRTVGRTE5MUEKKzoxMDBBMzAwMDcxQkZFNEUzM0NFMkEzQjI0NzQxQUUzMTBFNEQ4QUExNUYKKzoxMDBBNDAwMEJDNDQ4OTY0OUY1MzgxN0VDODRENDZGMkYzMjE4RUY5RTAKKzoxMDBBNTAwMDIzRUUwMzVFNkEzNEVGQzJENDdFNjlFMzIzRjdEODgxQzQKKzoxMDBBNjAwMDEwRjVGRkZENjk4RDE5RjMwQkIzMjREN0IzRjA1Qzk5MzIKKzoxMDBBNzAwMDFBNkNDNTdFRDlEQzRDQUE3QjE4RkIzRjMyRjlCM0MxOTYKKzoxMDBBODAwMDVCMjVDQThCOTQwMUJCNjBCRjZDNTFBNjFGRjMxM0ZCOUYKKzoxMDBBOTAwMDI1REVGNzM1RjM3RDAyNjZGNzI1Q0M4MDc5REVBRTQ4OUEKKzoxMDBBQTAwMDE4QjU4MTc4NEFFQjBGQ0VEQkMwMDQyMzg3QzU1N0Y3MTIKKzoxMDBBQjAwMEVEOTU0OUNGREM1NzJBRjk3MUJGQTlENDlFQ0U3QzYxNTAKKzoxMDBBQzAwMDdDNTVGNkE4ODlENjM1QkIyOUE1MDhGOTc4NEVCOUNDNEUKKzoxMDBBRDAwMEZDNjFGQzFEMTA3RUUxM0MwRkM0RTE2MUVGMUQ4RUUyNjQKKzoxMDBBRTAwMDcwMDUxNzAzREM1MjQ4NkVBNzA5M0U5RkM1Qjg5RjM4QjIKKzoxMDBBRjAwMDdGNDE0MkM0N0JGMEM2MkQ2ODhGNkU2RDgyMzgxNTdBQjcKKzoxMDBCMDAwMEQzNDRGQzdBQUIzNzNENjI1RTBGRTM3RUNEMDkxNjJDRjEKKzoxMDBCMTAwMDg5ODNGMUZCMjUwRDI0RkU5QjExQjQ4RjBFQThBODc3QzUKKzoxMDBCMjAwMENFMjRBMjVFNjNDM0I4OUM2ODcyNTcyQUFGQUUyMzdFMDAKKzoxMDBCMzAwMDcwRjI3REIyNzkxMjQ4OTM4Q0ZBMkY1MjlFNjY4RThCOUEKKzoxMDBCNDAwMEVDQ0Y3MkY3QTgzNzg4OTA3RkJENUVEN0U0N0U1RUIzQTYKKzoxMDBCNTAwMDRDRkI3MkYzMEEyNTE3RUI0NTNGRThGREVDQjFEMTdENjQKKzoxMDBCNjAwMEU4ODU2RkQ1ODdFMzdBRDMwQjFGOTZGRjVEN0FFMTM1NzEKKzoxMDBCNzAwMDA4MkJDNjgxRkNGRTM0NTFFODg3N0VBQzFGRUE4NzUyMDEKKzoxMDBCODAwMDc5RkIyNkU0OTcyRUIwNzdFNjVFRjg0NUIzMTc1QTNDMUEKKzoxMDBCOTAwMDVFMDZGMjRBRjI3RTkxRUY2Nzk0NUU0RDY1QkVGQzUwQjAKKzoxMDBCQTAwMDNDREVBRDJGQzA5RjcwRjVFMkU3M0M5RDk4NDU3MkQ0QzYKKzoxMDBCQjAwMEFENUYzNEZEMTFFNjRGMThDN0ZDRTNGRTQ0MjlGODkxMDAKKzoxMDBCQzAwMEE2M0M4NDJGODNFMDJCNjMzQzFGNTg4Njg1NDM5ODk3NkYKKzoxMDBCRDAwMDczN0U0MUY5OTY2QTg4RjMyOURFNjdCRjI1Qjg1MENGNDYKKzoxMDBCRTAwMDQ5RjEyMTM5RDBGQjE5NUE1RUQ3MkFGMjA4N0FCRUU4QkEKKzoxMDBCRjAwMENFRjNDRDM1NTIxRDhDQzYxNzY1NzYyRTFGNjU3MzY1RjUKKzoxMDBDMDAwMENBQkJFQkY5NDQ5QjRGQ0YxRjAxNUQ1RUU2OUFGQzIxMDYKKzoxMDBDMTAwMEU0RUM4N0YyNDc3M0EyRDg1NzFEQzQwNjVEMEY1RjY4RTYKKzoxMDBDMjAwMEZDQTBGMTg3REU4RTFDRDNFNTY3RkFCMjIzNkZBMjFEMEMKKzoxMDBDMzAwMDE5RERCNzFENzk3RDk4OTFGNEI1REU3RTY4RjZFMjc3MEYKKzoxMDBDNDAwMDQ5NUMyRjY3MjRGMjdEOEU2OUMzRTdEOUQwRUZCMDI2QzcKKzoxMDBDNTAwMEYxM0EwRENEMEU3NUU3OTczNjczN0U3OEJENjM4OTIyMjQKKzoxMDBDNjAwMEExM0Q0MUJEOTAxOTg2N0Y5MTZGRDVGOEFGRUE1MTg5QkEKKzoxMDBDNzAwMEYyOEQxNTQyMkY3NTM2RjNGQzVCNzU4OUVDQjdDMEZGMUEKKzoxMDBDODAwMDE2MzczREIxODlGNzhEOTQ5RjJCNTQ1QTE1MEI4QzNCMjkKKzoxMDBDOTAwMEQzMjVCOTMwQUZFMzE2RjlCQTE5NkU4OUU3RUI1QzkxNDkKKzoxMDBDQTAwMEZCRjQyRDNBRkFDRTExN0MzNDkzMDVFQkQwMUZEN0VCMzEKKzoxMDBDQjAwMEE1Mzk1N0I5NUZBMEQ3NEY3M0M0QkVGQjFDRERCRUZCN0YKKzoxMDBDQzAwMDU1NERERTA3QjAwMUZGNEM3RkMwOUNGNEZERkU4MEY2NjEKKzoxMDBDRDAwMEJFNDY0NzhEN0UyQUVFQzVBMTFDMURGQ0M2QTRDNjcwNkIKKzoxMDBDRTAwMEZGMTlFOTM3RjVBQTQyRTNEODkzMDQ1RjBBN0ZFNkNCMDAKKzoxMDBDRjAwMDhCNzlCRkEwOTg0RjNDNUZEREY0ODVDOTNCQjI2RkY4OUMKKzoxMDBEMDAwMEFGRTVCN0M2QTI5RjNFM0FFNEI3NkJGMzRFNTMxODRCMUMKKzoxMDBEMTAwMDQ3Qzc0QzY3NEY2Njg5RUIzRkQ0N0UwQ0Q3QUQ0M0EzRTIKKzoxMDBEMjAwMDgzQTY0NzdCRTA1OUU4RDlCRUU4NzQyRDNEQUJFOUIzMTMKKzoxMDBEMzAwMDdGQjY5RUQ1QzZEN0VDODAzNkFGNUVGRkY2MTVCNzY5OTUKKzoxMDBENDAwMEZBNzRGRDE2MDNFNTRCMjY4QkY4NzhCMkM4QzNDRTRGNzQKKzoxMDBENTAwMEUyRjFDMUFENDkzQ0VFRUNGQUNBNjI0MDdCQjlCMzg1MjEKKzoxMDBENjAwMEZCMjcyRUIzRkQzOEZBMDVBMTdDMUZBN0U3QzMzMUNDQzIKKzoxMDBENzAwMDg3RkJFQzRDNjlCN0QwQkU2NzExOTAxMkY3M0REM0Y4RjIKKzoxMDBEODAwMEJFRTc3NjI1RTAyMTNERUQ1MjU4MERDOEM5Mzk3QzBGRUMKKzoxMDBEOTAwMEU2NzlGODgwNkYyMUVBRTk4NzNGMTk2MkEwRkQ3NzI1OUYKKzoxMDBEQTAwMEQwOEVGRUM5RDgzQzg1RjY4RjFDNjY5NUYyQzE5RENEQ0MKKzoxMDBEQjAwMDY2M0JCRUQ3QjVFRkZGQjQxQTcxOUNBRjk4MEI0M0I4MzIKKzoxMDBEQzAwMDQzQ0RFNkVFRkQxQkQ0MDdBNTcyOUI4Q0Y5RkJBRTIwNEMKKzoxMDBERDAwMEM4MDgzQzNGNjk0MUEwMThFM0EwQzlBQ0JEMTZFNTdCM0IKKzoxMDBERTAwMDAyRDJCMTE3RkFGRDJBNDk4QkIzN0JDRkVGMTczNzczQzUKKzoxMDBERjAwMDNGQUUzODQ2MjYzRjZFOEFBRkJEMThGN0FEQTYyODkyQTMKKzoxMDBFMDAwMEFCMTY5RkQ1RTVGNzVGRDFDNTFGQTFGQ0JFQUFGMEZBQ0UKKzoxMDBFMTAwMDQzNURGRUJFOTFFQjk5RUJDREVCNEY0MEREMDY3Q0JDMTQKKzoxMDBFMjAwMDVFRTM3M0ExNkY1ODFGRjlGRDlEMjZCRUVGMTMzQzY5NjkKKzoxMDBFMzAwMDY0RTgwN0IzMEI4OUJERTY2M0FFOTVFN0RGRDcxMkVEMzMKKzoxMDBFNDAwMDU2NjM3MTlGOEVGQkVCRkI1QUQyREM2QTZFREZDRkU3RjUKKzoxMDBFNTAwMDc2MDQ4QkQwM0NFRURDM0U1QkExRkEzNTkxMUZFREIxMDAKKzoxMDBFNjAwMDdGRDJDN0ZFODhCQkQxN0UwOEQ1Njk1RkZCMjFDNTVGRjUKKzoxMDBFNzAwMEFBOTRGNkI5NUVCQzY5NzUwQjRDRDQzRkREQzhCNDlGMkIKKzoxMDBFODAwMDlCRTQ3NEU3Rjk2ODM3RjJGOUNFRjM2OTZFODRFQjc5ODUKKzoxMDBFOTAwMEMxQTcxQURGRUYzQjc3Mzk5QUY2NDE0RDZFMTVGNzhGRjAKKzoxMDBFQTAwMDgzMEU4QkVCNTlFMjVCQ0VFRkY1QTk0M0ZDQjg0RkZCMDkKKzoxMDBFQjAwMDFCMjExNzNCQTM4M0M3QjIxM0MzRjczREY4M0U0N0NCQjMKKzoxMDBFQzAwMEJBNDc2NzlGMzNEMjdFQjk4NEY5NDg2RDdGRDkwNzcyREMKKzoxMDBFRDAwMDQzNzUzREYxOENFMjBGMjNBQjY3Mzg2RkFEOUJGRDFBNzQKKzoxMDBFRTAwMERCMjk5M0Q0MzhDNEZCRTU0NDZEMUY1MzhEQTMzQ0M0NjgKKzoxMDBFRjAwMEI3NTdBOENFNTA4RkZGRERFQjk4MDdFQjUxMUFENjU5QTQKKzoxMDBGMDAwMDNDMEFDOEZGQUJFQkVDRDQ2RjVDRTdBNDc2RkYzQTk1RTQKKzoxMDBGMTAwMERBODc4RUM3M0U4MDc2QkZEQTZERjIyODYxRkFFMzlERUMKKzoxMDBGMjAwMDY0RUU3N0U1NjU3RjUyNENDNURGN0Y2MzU0ODczRUU1MEQKKzoxMDBGMzAwMEMxMEUxOUY1QzU4RDU3NjExRDExNzUyN0NBNjVDNDM3RDYKKzoxMDBGNDAwMEU1MzdCMzQyRkQ0QzY5NzEwQ0Y2NkZCQzBBRkRCMEU3QTIKKzoxMDBGNTAwMEFGMjQzOUI4M0RBQTUzRUE0NjI3OTNCNDEwNUZGQzJENUQKKzoxMDBGNjAwMEM5REQ5MTA0RDdFRjcxNzgzRUMxNzZCNzM0RkZFMDI1MzMKKzoxMDBGNzAwMDQ2RkQ3M0JDN0ZBQjdDMDk5RUNCMEYxNDUyNUUzOTFGQkMKKzoxMDBGODAwMEYzQ0E3OTM0RUM0MkM0REZFODU2MTNFRDk3NkJGOUREMTAKKzoxMDBGOTAwMDNDNERGRUJFOEVDQzMzRTc4QkJDRUVBQkFDODNGMkNEQ0EKKzoxMDBGQTAwMDA1MTYwOEI0MEMwODE3QTc5RjVCOUFFNzk0MzAxRjk4QTIKKzoxMDBGQjAwMDY0NzI2MUJEQzNFODJDNEYzRUU2NjM1QjkzMThDNTQ3N0UKKzoxMDBGQzAwMEFEQURDOTE5NkEwRTcyMEZDRkZCQkFCNUJDMkZGQkZFQ0YKKzoxMDBGRDAwMEJDRUY5MThGNjI3REE0QjdBRTlBNjg3RkZBQzhBOTU4MUEKKzoxMDBGRTAwMDU3ODBGNjBCMkRFNEZGNjlGNUM4MkREMUJDQ0U4MDY1ODYKKzoxMDBGRjAwMDJDQTAzQ0QzOERBMjlFRDE2MkY2OUE5MzQ5NUYwNTBFMzgKKzoxMDEwMDAwMDlFODBGNzdFN0Y5OUYxN0RDN0Y2MEY2OTVGQkJEODMwNzAKKzoxMDEwMTAwMDNDMDVFQjdFMEY0QTQzRTNCMDdERUFBM0Q4MUM2QTRGNDAKKzoxMDEwMjAwMEM1NUU0NEZDQjQxOEFDMkFDRTdCNjY5RDVBODI3NTZEQjEKKzoxMDEwMzAwMDI3RDZCMTEyQUM2MzdCNkI5RDg1REE5M0VCRUNENDlFMjMKKzoxMDEwNDAwMDVBRTdBNEY2NzVCODhFRkM3MzFDOUU0NzdFNzFCRjY1ODcKKzoxMDEwNTAwMEEzN0Q5MjI5NkZEOTE0NkNGMzE2QzY1MEJCRkJCNjE4NEEKKzoxMDEwNjAwMDEzQzJEQjEyQ0JCNjZCRjM2MEJENUEyMDNBRDA4MEM5RjUKKzoxMDEwNzAwMEZFRDZBN0JDOEY1OUZBODFERDMzN0I0NzRBQTMxODZCOTQKKzoxMDEwODAwMDdCQ0EzQjVEOTkwQ0UzNEVFREZGOTNBRkUwRkU5QkM5M0QKKzoxMDEwOTAwMENCMUVCMzAwNUM3MzRGRDkxQURBQTBGRjc2RjJGMkM3MDkKKzoxMDEwQTAwMDZDQTg2RjhGNDc4M0QyQzNGNUFFMzhFRTFFMDQ3NDQzMkQKKzoxMDEwQjAwMEE1OTBDNjA1OTc4RDgzN0U4MkQ2NUYzMUJENjQxMjYzOEQKKzoxMDEwQzAwMEI3MTQ3NzY0MzM2MEFERUNFNDk1RDMyRDgwQzc1QkFDODcKKzoxMDEwRDAwMERFMUY2M0RGRTQ0QjlBNUVEMjBGRkJDQzg3RjU2MDQxRTUKKzoxMDEwRTAwMEM5NDg3MTNGQ0I5MDEyQjFGRTY1QTZDM0ZCNDY3MjU4NEEKKzoxMDEwRjAwMEZEOUU1QkZBMTNFRDMzOEQ3MTRCQ0M0MTg3MUY4Q0I0OTEKKzoxMDExMDAwMEVGQzVFQzFGMjc4NENCREI0QzQ3RTkxQjQ4OEY4OUM5MEYKKzoxMDExMTAwMEJDMEU3OEY0MjRDOTFENUU1RkExN0Y2RUY0MzlCNTA0NUUKKzoxMDExMjAwMEU5MzRFNjQyNTkxREI2MzNDQjFERDRGNzJDMTg1Qjg3NDIKKzoxMDExMzAwMEYyNUM2MkVCRUJGRDYyN0FCRjNDOTlENzhEMTQyOTUyQzkKKzoxMDExNDAwMDQ0NUQ4OUZFQjk3QzYwMjZGNDhGODM0N0EzMjk0RjMwMjQKKzoxMDExNTAwMEZBQjRCNzE2RUI0RjRCOUQ5OTc5QjJBNkZBQThFRkQ4MUYKKzoxMDExNjAwMDgyRkI2REEzMkJDRTk0MjRBMEZDRDgyNDE3OUE4OTMxM0UKKzoxMDExNzAwMEFDQTMyRTAxRUUxN0RBQjFBMDBBRDdGNTQ0MzFENkZGQTEKKzoxMDExODAwMDhDNTYyNTE3QTJBREQwREREQTgwRUYxN0JBNjI1Qzg1RTgKKzoxMDExOTAwMEU4OEY5RjU2NEJEMEY0OUM1MjQ2OUQyODgwRTdBNjBFQzAKKzoxMDExQTAwMDkyNUQxNjE4RTg1NEUwQTY4OTk3QTA1RjM4MkM4RUYyNUQKKzoxMDExQjAwMEJDODVDQTlBMkIyN0E4MUZFM0FBNTE3MTFENUI3RTVEQ0YKKzoxMDExQzAwMDQ1RTM5OEM5QUVFRjlFNTFGQzJGQzgzRjQ1OUUzOENBRjMKKzoxMDExRDAwMDA5MDIzRTRBQzJFQkNBNjBERDA0NzdBMTVERjY0NzQ5QzkKKzoxMDExRTAwMEM4REZGRjVBNjI4N0ZFRUVGRTEyOTZDQkMzN0NDM0ZGQjgKKzoxMDExRjAwMDQyRjc4RjQ0QUI1MTAwRTg2RTkzQkQwNEM3REI2RDkyOUMKKzoxMDEyMDAwMEVDMEY1MURGNTM4Q0NGRkI4NjE4NTVDQzFGOTUyNTQ2MkMKKzoxMDEyMTAwMDQ1OEMzRkI1NDQxQTdGMEVFMUNGODkxQjg1RDdDQTMzNzEKKzoxMDEyMjAwMDFDMTFGN0RCNkVCMzkyOURBODc4MkI4N0ZDQTJCNkRCNkUKKzoxMDEyMzAwMEQyQzk1RTU0QkMzNUE5MDhEQjM2MDNGN0QzMkJERUFBMkUKKzoxMDEyNDAwMDI4QTdGQjA2MUUwNzU3MkNGQzkxNUJGNDI5RUVBRDU4MkUKKzoxMDEyNTAwMDU4NDlGRDU2MjlFNTI3MzhERjk1OUNCODNDQ0NBRjRENjEKKzoxMDEyNjAwMDFCOTQ1QUEyNDRGODgxMDM0OUZFRjM0NDdFQUZEMDMwNjgKKzoxMDEyNzAwMDdDRDMyNDgwRkZERUEzN0M5RkEyMjIyNzMzRTJGOTE5Q0UKKzoxMDEyODAwMDA1NTI0OTc4RkRBODY3NTI1NDQ0N0Y3Njg5QTMyNEJDNEYKKzoxMDEyOTAwMDBFNzU2RTQ1NkE0NEZGOTZCOTk5MTFGRDkyQTMwNTY0RDcKKzoxMDEyQTAwMEJGNDEwRjU0OTQ4MDFFMzgwQUVENTI2MEMxMDI1MTA3QUQKKzoxMDEyQjAwMEE1RTU5RjBBMDU0QjE1QjY4QkJDQUNDMkUzRUI2MUYwMEMKKzoxMDEyQzAwMDg3N0FCMEM0MTY2OUE3Nzc0NzczM0I1RkNFRDZEMDA2M0UKKzoxMDEyRDAwMDQ5RjkxMUJFQkY1RDk2NjhGQzI0REM0RTk0Q0IxNTM2RUYKKzoxMDEyRTAwMDVFOTcxNTg5ODdCQ0EzNDZCMjk3NzkzMTkyMUZFM0ZBQkUKKzoxMDEyRjAwMDkyQTM0QkVCRDBGNDk2Njc0NEJFQUZGOTYxRTUwMjNFOTIKKzoxMDEzMDAwMDZENUVFNjczQjdBMzNGQTJDMUFEQ0RBRkMxNUYyRTJGMTcKKzoxMDEzMTAwMDJBQTE3Q0Y3MzVENkExODc5N0MxN0E1MDNGRThFMTY4Q0EKKzoxMDEzMjAwMDRBMTZGRTFBRjgxRkU0QUY4OTczMjRGMDRCRUNDRDdFMDkKKzoxMDEzMzAwMDZCRkU3QTA1RTgyQjQ3QjhCRUIyNDk4OTU4QjdENzk3RjQKKzoxMDEzNDAwMEJFRDJDNkVEQ0IyRkQzQzY5REU5RjBEMEZCRUUxRDlGREMKKzoxMDEzNTAwMDlFOUEyMDg3RjUzMzNGNEU4ODBGRUZCRkY4RTlBNjg4QTUKKzoxMDEzNjAwMEZCNDkxRkNGNzE4NEY3Qjc3RTNBMDdFRjRGNTFENDVBMkMKKzoxMDEzNzAwMDFCRjBFNTMxMjZCOTdDQzgwNzZEQUExMjAzRjQyODNFOUMKKzoxMDEzODAwMEVEQUVDM0I2RjQ0MzJGOTZBQkIyQTlFNzdDNzVEODRFNDkKKzoxMDEzOTAwMEJDRTg2RjMzQzNCQTZFMUEyNkFCMThCRjZCN0U4ODFFQ0IKKzoxMDEzQTAwMERFQkYyNkYzQkNDM0IxQUJBQTE1Rjc1OTc3RkI1NDJCQUMKKzoxMDEzQjAwMEZBRjNCQjFGNTRBREU4ODdFQzc2RjM3MzE5RUUyQzAzRjgKKzoxMDEzQzAwMDlEOEY3MTY3RjM3QUM1QkYyNEYzQkE4MzRFRjFCRUQ2MDEKKzoxMDEzRDAwMEZBOERERTRFODQxQkVCQ0NEMTM3QThGQTI2NDg3NUU1OTIKKzoxMDEzRTAwMEM3RDBCRkNBRTlFOTVGMUQ1M0ZDMzY5Q0VGRDg4MzdFQTYKKzoxMDEzRjAwMDVCRjg3RUUyRjVGQTU3N0YwNDFFNDMzODBBOTlFNDA5NDgKKzoxMDE0MDAwMEQ3MjNDNTk2Mjg0RkI4REM5NkRBMUQxMUZEOTNDMjBGN0QKKzoxMDE0MTAwMDk5RUE0QzhENzhFRjI2MzUzM0UyMzlGMDFCODdBMTVGQ0UKKzoxMDE0MjAwMDUyNkI2MjU0NkZFQjMzRjA3QTVCM0QxRTU3QTRGMEY4QjkKKzoxMDE0MzAwMENFNjVCM0EzM0I4M0ZCNjY3MjZGRTc5MTVDQzU4NjVFQTYKKzoxMDE0NDAwMENGQjdBNUE0NzA3RkYwM0Y1MjE4QzEzNTJCODVDM0E3MzUKKzoxMDE0NTAwMEFGQUZENUY3NkJGMTdDMEZFMjkzQjk5Q0M4RTcyRUFCMjkKKzoxMDE0NjAwMEUxMEFCOEJDQUNFMEU5MjdBNjUzNUQ2REJFRTFERTJDMTUKKzoxMDE0NzAwMEU4NTczQ0JENzUzQUFGQUIzNUVDQzEzQURCMTk0RjNGOEQKKzoxMDE0ODAwMENGRUZERjYwQzgzNzgyM0ZCMENERjdDMjc0QUMyQkFGNkYKKzoxMDE0OTAwMDhBRTJGNTA5NTU1MUEyM0VCNDZFNzQ0NERDQTMxODNFQUQKKzoxMDE0QTAwMDdFNkEyMUM2OUZGQjhEMENGM0ZDOEY5OUMwMEVFNjg1RUEKKzoxMDE0QjAwMEY2RDlBRDY2MUVBRjVBNERCQzBFN0M3REU2QTlGNUE4RTcKKzoxMDE0QzAwMDNGM0U4QkYyRTZBNTUwOUVCMTQ4NDUzQzVFQjQ1QkE4MUEKKzoxMDE0RDAwMDNFRjRCRTdEQTUyOUM4MDdCMzUyNzhERTJCN0JDRjQ0RUUKKzoxMDE0RTAwMDI3OUQyRkZCRTdDMTUxRkM3RDcwNjBGRDMwOEU3MzcxMkQKKzoxMDE0RjAwMDc3MzZGOUU1RDkwMzE4OUQyN0QxRTgwMUUxMzM1RDhGRUYKKzoxMDE1MDAwMDgyRjA4MUNFNjMzMEI3MTNGMzZGQjUwRTEzOEQzMzJCOUEKKzoxMDE1MTAwMDg1RjNFM0Y1QjYzREVBODlFMzBDNkI3NjQxQkIyMDg1QTQKKzoxMDE1MjAwMEM3Q0RCN0UyQkMwNDZGQjBGRjJDRENEMEIzMDdGQkNGNTQKKzoxMDE1MzAwMDFFQzlGQjQ4NkY1OUNFMEJBMjdGMUJGQzUxMENFREMzOUIKKzoxMDE1NDAwMEJDMUZDREYxQzYzMjgyQjQ2RkYzRUVBMjZDRDcwNkJBREYKKzoxMDE1NTAwMENFRjFCOEMwM0ZCMEI2NDNDNUZBMEY3RjNGQUNCNzE4NjUKKzoxMDE1NjAwMEU4RjQyRTQ1N0NEQzY2RjYwRjI2QkVCMkFEODlDMTc5NjMKKzoxMDE1NzAwMEFFQjdERUI4RUZGOTIxRTAwNDdCMzI3RjNDQTc5NzM2QTcKKzoxMDE1ODAwMDNGRTBEODgyNzQ3QzU3OUMzQkQxRTAwMTM4N0U4QzcwNjAKKzoxMDE1OTAwMDY4NzA3NUMzQTNBQjNGRUYxNDdFN0IyNzhFOTcxQkNBODEKKzoxMDE1QTAwMDUzNTdGRkM5NDA3OThBNkEwOUY0MjRGNEY3N0NDODVDNzAKKzoxMDE1QjAwMDNFOTVFODQzNzk1MERDRDJDMkY5QzY5RjU4NTI2QzgzRkQKKzoxMDE1QzAwMEI2QTA3MTE1OEY4RkRCOTU4OEJDOTg2NkNGMjY4QUU3MDkKKzoxMDE1RDAwMEM3QkVBNzQ0RDhBMzg5MjJGRTFEQUZDQjRGNEU2QzlDM0IKKzoxMDE1RTAwMDRFRTdGODI2RUFFMkUyNUZBNDg4QkM2NTFBNEIwQkNGMEYKKzoxMDE1RjAwMDIzQUMxNUYxQzZFNUI2ODE3MUU4OUYyQTEwRTdDQTgwRDEKKzoxMDE2MDAwMDZGOTMyQUIzNzFGMTIxQkREMEIwOEU0NTlDNTNENEY4QUQKKzoxMDE2MTAwMDcwRTQ2OUZCOUQzOERGQzhEM0VDMEVGMjA3QjQ3MUJCRjAKKzoxMDE2MjAwMEYzMTMxQzJGOTdERkUzNzgxOUQ1MzFFQ0U5NDlEMDM3NTQKKzoxMDE2MzAwMDFFMzEzMkJGMUE1QUU3MDQwRTJBODMzMDg3RTJBNENCNDgKKzoxMDE2NDAwMDE3NkM2NDVGQzYxQzlENDNGNURFNjZBNzgxQTk2MUVCM0MKKzoxMDE2NTAwMDhGNTJBMzk5MUFBNjJGQURDM0UyMjNGQUIyQTA0RjVEMTEKKzoxMDE2NjAwMDU0QTQxRjkwMkZFNjg5NzFBNTQ1OENCNzNGQkVFQzA4QTYKKzoxMDE2NzAwMEZBMDVGOUI2RTVFNDE3QzQ4RDFCMTgzMTFFNkI1MzIyMjkKKzoxMDE2ODAwMEZDODMzQ0U2NzE2M0RDRTgwMkZBRTI3RUQ5OThEMzRBMzcKKzoxMDE2OTAwMDg0MUYzMDJFQjA5MUNFQTE4RUZCMzBGMkZBODQ3MzkxNkMKKzoxMDE2QTAwMEZEMDM3REQxQTUyRkZDQjFEQ0E3RDEyRkZDQTFGODczRTAKKzoxMDE2QjAwMEI4MjNGMTk3NTAxRTg5QkYyNDRGMjRGRTUyMTY0NEUyRUUKKzoxMDE2QzAwMDI3RDUxQjg5OEZGNEU1MjMyMkVFRjc1QjkzMTdEMTFGRjMKKzoxMDE2RDAwMEYwQzA4NDg4RTczM0MxODA4NUY3QjMxRTlEMTZGMUZDMDYKKzoxMDE2RTAwMEUwOERCMzIzRkE0MzM3REYxNkYxRkM3MEZGOTI4OEZCREQKKzoxMDE2RjAwMEQ5REI1NkZFMjA3QThGQUM1RjFCRjFCQzlFREUzNzM0RkYKKzoxMDE3MDAwMEZFMzQ2MjdDOERERTNFRjhGQkRGQTQzNzczMEFGRjUwQTcKKzoxMDE3MTAwMEQwM0I1MUQ4NTk4NzlCRDdBRDc1MTk2RDhGRTI3OTdDMzUKKzoxMDE3MjAwMDNDMzY4MkZBQ0U4MUU3RTk2M0QxRkVBQjU0OTdFNzlCNjIKKzoxMDE3MzAwMEM2Njg1RkZCOTdCMjQ3NDJCRDk0MEVBODM1NjQ1MUJEQTEKKzoxMDE3NDAwMDNDRDVGNUZEREM2MDg4RDg2N0I3M0JCOTNGNjQ3NzcyNUMKKzoxMDE3NTAwMDNERkU2QjEzM0YyRjk1MEVGRTI2RDkyOTAzMEJDNUQ5RUQKKzoxMDE3NjAwMDE2QUM3NzY0ODI5OUFDOEY2MzlDNURFN0U4MThBNjNBNjMKKzoxMDE3NzAwMDMwNkYwN0ZEQzkyMUJEQUFFOUQxREJDQzZBNkQwN0U4NEUKKzoxMDE3ODAwMDk3NTEzMkQ3OTNBMDNGRkIzOTYxOUVGN0E1MDc4RERDQjcKKzoxMDE3OTAwMEZGRjAxOUQxRkY0OEI3MzA1RjZDMUVEOTE5Q0E0MzNCMUYKKzoxMDE3QTAwMDU4QTI4NEU3MDBFMjQyN0E1Q0ZEMEU4ODc1NzA2NTM2QzcKKzoxMDE3QjAwMDlEQzM3QTEzNDE0MEJGNTk3NUQxN0VEM0FEOUE5RTVBQ0QKKzoxMDE3QzAwMDNFOUNGNEQ0NjU1QkE0RkY3Njc5NjkxNjVEM0Y3QkJCRDQKKzoxMDE3RDAwMDk5RUEwN0NFOEEzQTQ3MEQwRkZBRjNENkRBMzk2Q0VENUIKKzoxMDE3RTAwMEZFRjIyRDlCNjJEMEVGM0MyQkNFRkY2QUQ3MjcwQkZDN0QKKzoxMDE3RjAwMDRENzZDQUMyRkU1OUQ2NjAzRTZDMTExOEYxMzhDMDdCRDYKKzoxMDE4MDAwMEU1OTE4RUQ4REIxOEY5OUI5MzcwREQ1NTVCQUVEQ0ZFNUQKKzoxMDE4MTAwMDJBRjRBQjBEQzE2NDZFMzc3Q0Y0REVGQzc3RjlCOUVFQzcKKzoxMDE4MjAwMEY5N0Y4QkZDQUU0MDg1OTNDN0Y5MTU2MkZDNUJBMEIxRDQKKzoxMDE4MzAwMDAzOUU2RTAxM0EzOEIwN0Q2MzUyMTlGMjI3NUNBN0YzMUMKKzoxMDE4NDAwMDcxMzM4RjMwMjNDQUYzMkM2RjI2RDU0RDlDNjJBRTMzOTMKKzoxMDE4NTAwMDdCMDFDNEY5NEU5NUUwOUNDQjNDNDZDQzVCQkQ3MzdCRDEKKzoxMDE4NjAwMDY1MEMzRUQ3M0Q5RTM2MEUzMDBDRkEyNUVGM0E3Q0M2MEQKKzoxMDE4NzAwMDY0Q0MxQjRDRTY3NTEzMzA5RjA1QUY3QjE2QTUzRjhDREYKKzoxMDE4ODAwMDc2NDk5QkVGMURFNkJENzQwNkU4M0I5QkI5Njg1QzZEMkQKKzoxMDE4OTAwMDdDODZFOUY5MzAzREI1N0JGOUFBOEYxMjYwQkVCNTQ3NjkKKzoxMDE4QTAwMDBEOTQ4RjU4REI2Q0E2NzhBRDZCRTU3RkVENzgwQUVFNzIKKzoxMDE4QjAwMERGOTFERUQxMEZFREY2RkIyQkZGMzYwNEY5RTFENkNEM0IKKzoxMDE4QzAwMDMyNTM4MURFQUFERDdCQTczMzZDNUZFNUVDRDIyQjMxOEUKKzoxMDE4RDAwMDc4MUZFQ0VFRDZBN0QwNThCRTZDQTYzQUUyRjc1N0JFRkEKKzoxMDE4RTAwMDNDMjREQzhGQUQ3NDE2MkVDN0Y3RDhCOEVCM0JFRjU4MEQKKzoxMDE4RjAwMEZDRDJGMDE0QUFGNzEyRkNCNDQyRjBEM0RBMTc4NzkyQTQKKzoxMDE5MDAwMEJGQjUzNkE2OUI5Rjc4N0YyQkFGMUJEMUQ2NzE0NkYwMTMKKzoxMDE5MTAwMEUzQ0E5N0JFODlGOENFQzQ2RUUwMjNENUNDRjdDNUQ0MTAKKzoxMDE5MjAwMEExNjBFRkRCMkVFN0QyNzcxRjhDREU3Rjc1QzJCQzJENjYKKzoxMDE5MzAwMDU3M0Y4OUM1RkU5RTM3RkY0QUYwQjNCOUQ3MDcyRkNBNzQKKzoxMDE5NDAwMEEyNkY0QzY4N0Y1QTNCRUZCOUEwMjkyMTFGRTkwRTcyQTQKKzoxMDE5NTAwMEI2MDFDN0JGRUQ3NzJGNUVGQTAwRjFEM0ZDRjJENjlGMzgKKzoxMDE5NjAwMEUxMzNENzc5RkU3Mzk3OTY3NzE0RjZDNjI1RjAwMUY2MjIKKzoxMDE5NzAwMDg2RTI4QjJFMTZDRENGOTMwOEZGNDZDMTFERjkyQ0ZBQjcKKzoxMDE5ODAwMDlFODc0QTdDRUQ2NkM3NzExRkE3QjZENTQwNzUyNkIxMDQKKzoxMDE5OTAwMEI4MDkxNDk2QUY4Qjk1MEQ5QTUxNzI1QjlDQTBBRjg1RDgKKzoxMDE5QTAwMDlFRjk3RkNFREIyQUVBQTgzRTIwRDIxRjJBMzhCNDMyMjUKKzoxMDE5QjAwMEMyMEZGMkMwNUZBRjdFRDAzM0RFNUFDQzJGRTlGREExNUIKKzoxMDE5QzAwMEYxMDFDMzYyNTNEQ0Y3Rjg0NTg3QTZGNUVBMTc0MTQwRjkKKzoxMDE5RDAwMEVEOTZDNjg4QUQyMUY4MzVFOEY0RjM3RTIxNTdGNTM4NDkKKzoxMDE5RTAwMDE2RTZGRjAzRDFGQ0ZDMzM5ODBFRjQ3QjdGOUFDQUY1MTAKKzoxMDE5RjAwMEI3MkQ4M0YxRjM2OTUyRTczMDBCRThDQjE2RTdBMkM3QTYKKzoxMDFBMDAwMDFGODU2Qjk2NDE3Q0RERDhBRkE1MzMzNUY5QzQ3RkRERUEKKzoxMDFBMTAwMDdFRDdBMTExQTRCN0Q4QjczMDFCRTI0M0U0M0RGNDc0REMKKzoxMDFBMjAwMDJCQzBGM0VDRjk2MTcyMjdERTBGMUNGRTZCMkNFNjdERjgKKzoxMDFBMzAwMDc3QzRBQjZGMjEzRDgyNDc2NURBRkY4OTUyM0E0QzhFRkQKKzoxMDFBNDAwMDVFRTJCQjU3NTEwRjAyOUZDQUE5REMxRTU4MUE3OTdFNkQKKzoxMDFBNTAwMEQxQTJCQTE5QzYwRjUxNzZGQkE4RjA3MzdGOEQ0RTFFMjYKKzoxMDFBNjAwMDRGNTYxRTdFQkZCRjA5RTg3MUM5RDAxNjlCMDNFM0FGNzYKKzoxMDFBNzAwMERFQkIzQjE2RERGRjBDOTNGNzAzRTRDMzU1NjdERjFFQTcKKzoxMDFBODAwMDYzQTdGQ0NEOTZGRTE4MEZENjA3Rjg3NzMwNDYyQUNDMTAKKzoxMDFBOTAwMEE3RTRGNTg0QTM3QTMzMkMyNjAxQ0ZFOTI3NTAzQkIyODMKKzoxMDFBQTAwMDI5N0YxOUYyNTk3NTgwQUYxM0M3QzY0MkJFRTE4RDEyNjYKKzoxMDFBQjAwMEY1M0IxQjZCRTM3MUJDRUFERjM3QTdBMTNDQkQ5Q0M0QkYKKzoxMDFBQzAwMEUzQ0Q5N0FFNjZGM0Y3MTVBNkUwRjM0MUE3NDMxMEQzMzUKKzoxMDFBRDAwMDZGQzBGOEU0NjUxMUQ3NzQ1RTk1RTkzOTZERkU5MThEOUMKKzoxMDFBRTAwMDg1QjIxREY4MjEyN0IwRjEwMEM1NTE0RDY2MTVFOTFBRTAKKzoxMDFBRjAwMEY1MUNFMzc4Njg4QTIyQjlBRjZFOTlDQUQwRUU3NzM5QkYKKzoxMDFCMDAwMDk4NEI4MkZCM0JBMjgzN0ZBNEYzNkVDRDY2MTVGM0FEQTkKKzoxMDFCMTAwMDUxRjY4RDJDMUVDNkRGMjFGNjU5ODcwMzQ3RTE3OTI5M0UKKzoxMDFCMjAwMEVEQkEzNjVGNTREM0QzMTg3MzIwM0Y1MERFMzc0QUQ5MEQKKzoxMDFCMzAwMEM4MjZEQkMyRjExQzQzNzg3NkE0NzIzRURBMTExRDMwNTAKKzoxMDFCNDAwMDYwOUUyNTM4OThCMTY3MDlBRTEwOUM4Q0U2RDVFMDFDRTQKKzoxMDFCNTAwMEVFQzdGMzg0M0I0Q0MxRjM3ODZFMDZFMEIyMjNGRDg3RjkKKzoxMDFCNjAwMDMzMEUyNzZCMUFBQTYyOUUyMENBRUVBNjc1NDREOTU1NzkKKzoxMDFCNzAwMDk3NEZFQTA5NTc3NTJFRjNBMzVERkZGOTQzQUM1QjZFRUYKKzoxMDFCODAwMDUxOEVBQkEzNDM3RDBCQzhDMDhFODE0Q0M4RjlDRjFGQ0IKKzoxMDFCOTAwMDJGQzkwOEVGODM2MjE5MTc3QTdGQzhBRjM2M0U1RTM3QzgKKzoxMDFCQTAwMDg5RTIwOTlGOENGMTJGQjQzMUYxQjg0RTk1RDZBNzYwMjgKKzoxMDFCQjAwMDhBMjk4RkUzMDFGN0RCQUQxNjdFQkZGQjc5RTA2RjFCNEYKKzoxMDFCQzAwMEY2NkRGQzM5NTc5Q0REM0E0RDIyMzlFMUY1Qjg0MjFGREMKKzoxMDFCRDAwMERDMjcwNUNFREYwOEE0RkQyQTcwMjA1NzA1NTg1NkJGMjQKKzoxMDFCRTAwMEIxOUZGODc0OTVBMUU5QTk5MTcwRkZFRTI4QUYyQjE1NkMKKzoxMDFCRjAwMEU2N0JFRDQzMDM5RDZCRkRGMzhCNTFGRTBBQzBDN0IwM0UKKzoxMDFDMDAwMDdENUI5MkREQkRDODg3N0VGQzQ3REU3QkU4Qzk3NEE0OUUKKzoxMDFDMTAwMEZGM0U0OUM1M0M2Qzk3MzE0OERGMzdBOTZBRkFDQzQ0OEUKKzoxMDFDMjAwMEY1MEQ4RDFGNTNEREQzOUJBOURFNDkzOENGQjhDNjFBRjkKKzoxMDFDMzAwMERBOEYxRUNGMzZEMjdFNzRCNjM4MEY1RUVGRTRGQUUzNDkKKzoxMDFDNDAwMEYyRTkyMUNGRDY4NEUxN0Y0OTJBOTcyRjE2RjQwRTQwN0UKKzoxMDFDNTAwMEI5NjkxMkYyRDk4MjdFMEFCNDdCODVCRkI0QjdGNUQ2RDIKKzoxMDFDNjAwMDJDMzUyQzdGNThDMzBFQTQyM0JFMUY2Mjg3QThENUFFODcKKzoxMDFDNzAwMDc3RjlGOUI5Q0FFQzc3MkM3N0I4QzNGODZGOTE5MEY3NzgKKzoxMDFDODAwMDQ1QTkyMjRGOTZFQTlEOERGMEFFNkFGREM0MTRBQkUyRTEKKzoxMDFDOTAwMDM5OTlGQUZFNjg1N0VBQzE5RkIyRjc4Mjk3NkVCOUQ1QjMKKzoxMDFDQTAwMEM5NTFCNTEyMzRFMUYzRDUxN0Y4Rjk1N0EwNzMxRDlFNDkKKzoxMDFDQjAwMDM3NzhGOTlEQzYxMThCRTFGQTVFQzAzNUQ2OTVGQUNFMUMKKzoxMDFDQzAwMDlBQTlCRTcyQUZEMTkzOEVDRkQ3OUNGOTNBMTdGNTU2MjkKKzoxMDFDRDAwMDA5MDIwMUYwN0NEREJDNkEwMEUyMERGOEJFMjgxQUU1QkQKKzoxMDFDRTAwMDZCMTcyMzNEQTZDOTY3MEVDQTI3QkM5RjgzN0M1RjgwMDQKKzoxMDFDRjAwMEZERTFBNDg3Nzc5OERBRjlGOUQzQkRGQ0ZDMjlGMDNEMjIKKzoxMDFEMDAwMEM5MDFGMEJEMURGRDg2MUMzQkM4MDFCRDNGOTRFNDdCQUQKKzoxMDFEMTAwMDQ3QkI4MUNFQzlGQTQwOEYwRkE2N0VEMTFDRUNFRjY4N0QKKzoxMDFEMjAwMDJGQjE5MzdDNjM1RTNGMEZFNTM0NzA4MEM2QTk4N0Q4REUKKzoxMDFEMzAwMDA0NDkyNzMxNEZCODNGRDlFODhDMjVCQTY5RkFGMUIwODgKKzoxMDFENDAwMDkzMDkzQkExQzZFMTc5MDNBQjJDNDdDODQ1OTgzREU0MTQKKzoxMDFENTAwMDdENjEyRjRGRkMyQUYwRjgyRkQxNzZCODg1NUQxMEZFRkIKKzoxMDFENjAwMDE0RjNFNjkzOUVCRjU3RDhBQUI1QUY0Rjk4QjkxREQ2QzYKKzoxMDFENzAwMEI5RjY4NERDNUQzRjhFRkU2QjQwRjBDOTAxRTFDRkEyNzUKKzoxMDFEODAwMDlENTAxMzc4M0QwRTVFMUZCRDk5RDdENThFNzFBRjI5M0EKKzoxMDFEOTAwMEM2QjNDRkUzQ0EzNzFFQzQ3NjgyQTdCRTE4Q0YzRTRGNjQKKzoxMDFEQTAwMDVBRDA3RTkwOUY4MUU2RTdEOTFCMEVEQzk0OERGQkRFMzYKKzoxMDFEQjAwMDVENjdDRDBDRjc1RDFBRkUxQUZDRTM0QjgwODdGQjVCNzkKKzoxMDFEQzAwMDAwRkZCREQ4MjU1ODBFRjExRjU4RUM3NEU2RUM3OUJGMjIKKzoxMDFERDAwMDRCRDJGNEM3QTkwQUU0QzdDRTA2MzlENDA3NDBBQTgwN0IKKzoxMDFERTAwMEMxQjFGRkRCRDQ5MzhGRkJBMDlGOTVFNjdFM0UxNUZEMkUKKzoxMDFERjAwMEVENzQyRkI1NUQyN0ZGOUE4Q0I2NjBFRjY5RUU0NzM1MUQKKzoxMDFFMDAwMDk4RENEOUM4M0YwRDAzMjNCRjFGQTBCNTRGQTYxQTg5ODAKKzoxMDFFMTAwMDBFMDU3RDdDQkZFQjQ4MkFDRjZGMEVGMUIxQzc5MDhGQzYKKzoxMDFFMjAwMEFBMUE2NEJCMUZFODdFQTk0MTc2OUJDMDFGM0FFRkY2NTEKKzoxMDFFMzAwMDI2RTNEOTlDMEJDQzc3Q0I0NEI0RjMyMjhFRDRCRUY3RTcKKzoxMDFFNDAwMDcyMTdGQTI5NjBBN0VFRkU2NUVGRkIwRkFCOTlGNjVCMDAKKzoxMDFFNTAwMDYzNDBCRTVBRDYyNEIxRkYwMDFDMkM3RjI2RjJGOUQ1NzAKKzoxMDFFNjAwMERBRjc2QTFBQjcxQ0M2RUY4OEFEN0M0RTc3MUZGRDE1RUUKKzoxMDFFNzAwMEZBMEU0NkE0MUY3MzI0NTVGODI3NTkyQzBCRkQxM0UwQzYKKzoxMDFFODAwMDIzRDIwRjQ2ODUxRDMxMDNERkFFNDhGN0VFNDM3QkZDQkUKKzoxMDFFOTAwMEIyRjhCRTAyRTg1MTkyQzc3RDRFNjE1NzQ0RkQ0MTcwRDEKKzoxMDFFQTAwMDA3QUYyQjFFQkVDRDJGMUJFMEZEMDk4QTVGNDY3QkM1MDkKKzoxMDFFQjAwMEEwQzU3RDg3NzE2RTZGMTk3RDg3QzlFNzNFOERGQjNFOUEKKzoxMDFFQzAwMENCODUzRTVDQUVGOTY5N0VCRTNGMDI2NjM3QzI0RkFCNDIKKzoxMDFFRDAwMDE2QUIxRkNGRkNCNUIxQjhGRTZEMTJDNUNCQUJCNjQ1ODYKKzoxMDFFRTAwMEVFQTc1NDhCRjVBRkRFN0NGMjMwOUFCQ0NBN0FERDdENkEKKzoxMDFFRjAwMEIxRkU2QURERkFCNTdERjNDRjUzMjNFQkJGQUU3NzNGN0EKKzoxMDFGMDAwMEU0MkY0NkVFMzdCQzJEQzZEMUVFOUJEMkI4N0VBQzgyMTQKKzoxMDFGMTAwMDY1MjBERDU2RkI2NUJGOUZGQjc5MzZGQzVFRDA5RDYyNzgKKzoxMDFGMjAwMDVENzcwQUZBRDMzQUUxQjlDQTZEOTIzRjgwM0NGRTc4RjgKKzoxMDFGMzAwMDY0OURFOTVERjU4QkNCOTBBRTdBM0U1OTI5RDZCRDdDODgKKzoxMDFGNDAwMEJCOTFGQzU1RkNGRTBGQ0E5RDlFM0Y1NjhBRjVBRkQ0NEYKKzoxMDFGNTAwMEFEQkZDQTJCRTlFMEUzN0U3NDRGRjhFQTZGNDEzQTU3MTAKKzoxMDFGNjAwMDZFMzdCMkRFRTBEM0U4QjU1MkUzRUIzRUUwRDVFMEQ0MjUKKzoxMDFGNzAwMEUwRkVBMUYwRjY0RjEzRjlBRDExNkMwNEQxQTkzQ0UxREMKKzoxMDFGODAwMEJBRThBNEY3NzM3NzFEMUU0MURGNUJCQjdDNjQyMEM1RjQKKzoxMDFGOTAwMEZCMUExRkU4REYyRjEzN0VGMkQ0Q0REQzZGQkNENDU4QzAKKzoxMDFGQTAwMDZDMUQ4OUYxNEM5QkMxMjVBOTE0OUZDNThFMDRCQ0U0MEUKKzoxMDFGQjAwMDM3Q0JBQzAyRkE1RDRENTk5QkYwRkI4Mzc5MjcwQUU2REIKKzoxMDFGQzAwMDYwRkM5RjdGQzI0MEU3RUZGNjFDMjlBMDdERTdGQ0EzRTEKKzoxMDFGRDAwMDgzMTJCMjI4Q0ZFREEyRUZFM0MwMzg2NDVGQkJEQUYyMjAKKzoxMDFGRTAwMDM2RTFGOTg0QUVCNjkyMDIxQzU3ODJFN0QwMEZDODEzQ0YKKzoxMDFGRjAwMDc2QTJBNjJEQ0YxQTdFRkU3QzRDMUE4RkVGRDczQjNGRTAKKzoxMDIwMDAwMEZEMzlGQUU5NTM3NzE5RTk5Q0M1NTQ2M0YwNERBQ0RCMEYKKzoxMDIwMTAwMERBNzM0NEExN0RGMkQ1Mjc5NjNDMTQ4NUY0N0Q1MUEyNTQKKzoxMDIwMjAwMDdERjJDM0VENkIxMzE3MjI5RjM1MTlFREI4RUZEREQ1QTcKKzoxMDIwMzAwMEY0RTMwMzc4REZCNzVEQTJFRjVFNTQzNzk3NjZFRjgwNzUKKzoxMDIwNDAwMDdFREU5NjdDNTdGOEY5QjMzQzg3NEFGMEIxNTQyQkM1MzUKKzoxMDIwNTAwMENGNTNGQjE5Qzk2RTVFNENCM0ZFMTZGRDlGOTVFRTJENTYKKzoxMDIwNjAwMDI0REYxN0Y3RUYzMTUxRERERTBFODlBMTI5M0JFQzNDNkYKKzoxMDIwNzAwMEY4MEFFMkUzRTJBQjI3NERFODg0MTczNzlDMzQ3NTdDMUQKKzoxMDIwODAwMDhGM0Y3MEM5MkZCMzAwQzVDRDFCNEQxOEM3NTQ2RUQxRkIKKzoxMDIwOTAwMEZBMUQyNkE0OTM0N0Y4NDc1NUNGN0Q0Q0ZEOTVFOENGMTAKKzoxMDIwQTAwMEMzN0MyQjlGOTFBOTdFRjc2MEYzNkIyNkU0RTdBQUVEMzIKKzoxMDIwQjAwMDEyNEJDOTBDQkJCRjU5OEFGODVFQzMxMkM2Rjk2MDg5QkUKKzoxMDIwQzAwMEQwM0ZBQjk4N0Y3RDFBM0NCNzZBMjNBRjVCNjA4RjQ2RTkKKzoxMDIwRDAwMEQ2MDE2QkZDQkQ0MkYwRjdBQUVEQjNFOEZCNTMzREJFNjEKKzoxMDIwRTAwMDVCODg3MUUzMERGODFDRTdFRjY1OUIyM0VGQUYxMDdDNzUKKzoxMDIwRjAwMEJENDJDN0Q3M0Y0OTEzRkE2NzM4MUI4RTdDRkQ3NUExRDcKKzoxMDIxMDAwMDFBOTcwM0Q3QkYzRUI5NzI0MDZGRTdFQ0RCODRCREQ2QTgKKzoxMDIxMTAwMEVDRTVFNTgwODFFQzhERkVCOUNFQzYyQjA0Njc3NURCNUUKKzoxMDIxMjAwMDY1MTNGQUE3NjU0RDVGMTBGRTJCOUE1QUE5N0VFNDY2RTcKKzoxMDIxMzAwMEU2NUQ4REY4QkFCOUM5NkE0N0I5QUVFOEUwN0E2ODVBN0YKKzoxMDIxNDAwMDkzRDlFRjk3RjA3RTNERDUzOTc3QjVGMEJBNDlERjdFNjgKKzoxMDIxNTAwMDg5RkMxQzREOEY2OURGNzc1QzI2RjBCODBDMTQ3ODdBMDcKKzoxMDIxNjAwMDFFRkFCQjNDNkVBRTEyNzFGMjhBNjE1QjBFRTMzRTdCREYKKzoxMDIxNzAwMDk1QjhCRkZBRThDMTU4RjQwRkE3QjEyRjZFNDdGQUMwNUYKKzoxMDIxODAwMDdDMENFNzYzQ0Y0NEUyN0RCQUQwOEJEM0I3NzNCREE4OTQKKzoxMDIxOTAwMEI3NkI1REE5RDkzMzI5OEYwOTcxMkFDMkI1N0E3QjI0MUYKKzoxMDIxQTAwMEJFQUI3NEYxRjk2MzY5M0MzRkY2ODIwRURGMTU0MTY2MDAKKzoxMDIxQjAwMENENDEzODU0RDlFNUE3QTdEQjE1OUNGNzQ4MkVEODVCNEQKKzoxMDIxQzAwMEI0OTM2QUQ2Rjc3RTg3RjE0REUxNjc2QkZEOTlFMjFDMDcKKzoxMDIxRDAwMDc4QkQ3REEzMkQzQzZFOEU0QUU3RkVDMkNBRjFCMjBGRDgKKzoxMDIxRTAwMEU5RDUxRDZGMEMzQTk4QUIxQTQyRjEwNkM0MTlDRDY5QjYKKzoxMDIxRjAwMDQ5M0NFRUMwODI5MjM3MzI2NDk2OTgxODhBMzcxRTcxMzUKKzoxMDIyMDAwMDZFQUFDODgzN0VGNTc2MkVGNzlERTM2MDNDM0M3RkFERDkKKzoxMDIyMTAwMDMwRjI0N0FCQjc5QkU5OUM2MjM1RDA5RkUyOEEyNjdFQkQKKzoxMDIyMjAwMDlFQzJEMzI0OTUyMkREQzE1RjNGOUE4NkZCQjE5ODUyQUUKKzoxMDIyMzAwMDg1NzVDRjZBRTQ3QzNGQUJFNDBCRTI5N0EzODNGODdBMjEKKzoxMDIyNDAwMDJGMkI2QTRBNkZGRUJCRTZCN0UzRjkzMDM1Q0M3RkFGODAKKzoxMDIyNTAwMDAyMzlDNUU3QUI5QTc4M0Q1MkMzODE2RkZBNjdBMjlFRjcKKzoxMDIyNjAwMDZCRkVBRkZFOEJBMUZENUFEODQ1Q0QyRjBDODI1RjM4OTcKKzoxMDIyNzAwMDkwRkI0NUY0QkRDOUJCODU3QzJEQjNGMzdEQkFCQjg1MEUKKzoxMDIyODAwMEZENjE1MjFERjE3OTk1QjFGRTUwM0NGQTU5M0I3OEJEODQKKzoxMDIyOTAwMDAwREI4NzFGODUwM0ZERjhGNjRCNzVGMUIwRUVDRTk3OTYKKzoxMDIyQTAwMDI0QUE4N0MzRjdGMTdCOTQ5RDRCRUEzRjQxQkZGQkVCMjgKKzoxMDIyQjAwMDFEMTZGMjM3RUYwNkJGNjU0QTVFNEZCOUQ0RTQ1QkZCRUIKKzoxMDIyQzAwMDZFNTYwRDdCODhGQ0NGODc1ODFEQjU5NTgyOUYzQjFCQjIKKzoxMDIyRDAwMDZCRTlGQkEwOUFCRjQyRUYwRkVDRTk4RjU0MEFCRUFGNDcKKzoxMDIyRTAwMEQ0RjE1RjU0N0EyNERGRDVCQzFENEQ3RTYzRDc1MUQ5MUMKKzoxMDIyRjAwMDhFRkIzMTgwQUZERkE0ODVFMzQ1RjgyMTBEMDdBMjg4NkUKKzoxMDIzMDAwMEFFNUQyNzZENjQ0N0ZFMkNGOEVEQTJDODNGRDc4QzkzRDUKKzoxMDIzMTAwMDA5MEY4NkYxQkNDRDZFNzk2RDIwRDIxMUYxOEVGNUY3RTMKKzoxMDIzMjAwMDJGQjdCQzM2ODI5RkZCRjYxM0ZFNTc2RDkzMjNCRTBGNkIKKzoxMDIzMzAwMDVCNTkxRkY5RkRENzlBQjc2RkEzRUYwODU1RUZFRjg2RUEKKzoxMDIzNDAwMDZCODgyOTMxMDQ1NzVGNzIyMDQ5M0M4RTM0NDg5MTcxNjMKKzoxMDIzNTAwMDY0RjUzRUQ5MTM1RTc3MDZFQkI5MDNGNTUxQkE5MDA3RTEKKzoxMDIzNjAwMEE2MDQ5MzMxRkYzNTAwOUQwNjgwQUZBNjg5RDNENUQwNTIKKzoxMDIzNzAwMENDNUI5OEZGMTY5RTI3MzFEMkZDM0RFRTE3Rjk1NkUzNTEKKzoxMDIzODAwMEZEQUYzM0FEN0NGRkZBQUFBRjAyRkJGNzBGOTRBOUFFMDUKKzoxMDIzOTAwMEYzRkVCNzU3MEUwREQ3QTMwQ0UxMDRCQTU2MUI4M0M5NDEKKzoxMDIzQTAwMDE0NkY5RTM0MTA3Q0Q1MjcyRjI3MEZCMkExNUVEQTUyMEUKKzoxMDIzQjAwMDgyREYwRjlEMkVGNERGRTE4MUQ2RTVDOENGM0U5QzM3NEEKKzoxMDIzQzAwMDI1MzRDRUNCNjlCQzdFOEZFMTdBOURFODZERkM5MjhGN0YKKzoxMDIzRDAwMDJCRDZGQjEwOUIyREUyNkFDRTRGMzk2OTdDQkQxMDhGNDYKKzoxMDIzRTAwMDhDNEJFRjI1MUVCOTVFQkYxM0VDQzNBOTg1MTJENjMzMDMKKzoxMDIzRjAwMDI5M0U4Qzg3RjdCQ0M3RjU0MjRERjNCMjhGOTBERkFCMTcKKzoxMDI0MDAwMERGMzc1MzlERDdGRDJEQ0I4NjUyQkRBRkQ3N0IwM0ZBNjcKKzoxMDI0MTAwMDFCNUZCN0FDQjg4MUYyODNEMjQzMDQ5NzBGRTE3M0EyN0MKKzoxMDI0MjAwMDVGNzMyNjE5RUI1MjJCOUJDRjI0OTNEREREM0I3QTkzMTAKKzoxMDI0MzAwMDJGMDZGRDk3QkNFOTc4MURGQzA5RTIzRkYwNkI4OEZGOTEKKzoxMDI0NDAwMEY2QjQxNTY4N0U4QzE1QzdBRDNDQUE3ODEwM0Y5NTQ3NDkKKzoxMDI0NTAwMDBCOEU1N0EwN0Y3MUEyQTgwMEQ1Qjk3NEEyODBGQzk4RkEKKzoxMDI0NjAwMDdDRjQ2MzZDMjFCRkE2NUI0RkE2NzMzRkE2QUIzNThBOTUKKzoxMDI0NzAwMEYyMEIxMjFCQzhGOTg3MEQ4QUUwOUZENTBEQUY5M0JERjMKKzoxMDI0ODAwMDVGREQyODQ3RDQyRjZBRUZERDk5QUVEMDM4Q0IzNEZFMUMKKzoxMDI0OTAwMEE5OTdEQ0M0MUZCQjc4QkJCQTcxMEZBRDZGOTVCMTlFMTUKKzoxMDI0QTAwMEU4NURCM0REQzhFRkVGRTBBREY2N0Q1ODFGOEJGNzIxOTcKKzoxMDI0QjAwMDNFOEVFMzI1QTBDMzM0OTMzRjAzRjNEM0M3MzJCOTlGQzUKKzoxMDI0QzAwMEFGQTdDN0U3RTkzQ0ZGNzFFQ0FDNzcwMEYyQ0JCMTQyQjQKKzoxMDI0RDAwMEVGNTA3QjJGNzZDMkM3OEE3ODVDMkIwOTdDMzdGMDczNkMKKzoxMDI0RTAwMDUzRkFFNzNFNEI5N0M0Nzc0MjIyQ0ZCNzZBRURBOTc0RkYKKzoxMDI0RjAwMEFFM0ZBNzk5N0FGRjJFRTA2RkQyQjU3MzA5RUMzMTQzNTYKKzoxMDI1MDAwMDAxNDZDNTQ2RkIwNkUxRDdBNzg2N0RENzYxQ0VDRDQ2RkQKKzoxMDI1MTAwMEYyMTc0RTMxRkJFQjU4RUYzODQzRDNCM0UzQjg3REQ1MTgKKzoxMDI1MjAwMEU3Q0JFNzg5RjczQzlCNTVCRTVGQTQzQjNGMzM0RjNCNkUKKzoxMDI1MzAwMERGQTQzQkVGMzY0RkY4M0JGMzc0RkVDRUQzRTlDMjhGRjYKKzoxMDI1NDAwMDFGQzI4NkEwMUVBQzE3RTdFRkQ2MEU4RkYyODdFN0IzNDcKKzoxMDI1NTAwMEY0RUQ2MUIxMkY4MkU3ODdCMEFEMTlGRTJFRTU3RDhFRDcKKzoxMDI1NjAwMEI1OUU3RDg1RUFERENFNDZCMTgxM0NBRjQ3RjlFRkNBMjUKKzoxMDI1NzAwMDNFRjJERjM1REQ3MjM5Mzc4MkNGMzRCQTVDMTJERjgzNDkKKzoxMDI1ODAwMEQxRDM2NUI3QTZBRkM0QkU1REI0RDhCN0YzMUJCREJCOEUKKzoxMDI1OTAwMDUxOUUyQjJEMTc0REJDRUUzMDY4NDI3RDU2MzM5Q0ZCNkYKKzoxMDI1QTAwMDREOTc0QTI1REE2RjA3MzhGQjlCQzNGNEZCQTU1NDFFRjEKKzoxMDI1QjAwMDdGREQ3RjhCNDQ3OUQ3NTY3QzFFRTNBQzdBODlFQUJDRjkKKzoxMDI1QzAwMDJCMDNFRDI2RTRBNzIxMEQ4QjFGMjZCOUY1QjFEMzJDRTMKKzoxMDI1RDAwMEVDQkIxQTMzMkREQzRFNzZEMzRGNUI3N0I3MUQ4QkY3RjAKKzoxMDI1RTAwMDcxN0Q5QzQ4MkQzRThGNzY3MTg2QjA4M0ZBNzM1MTQzN0UKKzoxMDI1RjAwMDU5N0I1OTNBQzAzM0RGMkRCOUIwMUVBMDJGM0FDRjVFQjgKKzoxMDI2MDAwMDMwRUE3NTQ0QzNGNUQyQkIzM0RERkI0RTNBQ0E3OUZCRTEKKzoxMDI2MTAwMEU1NUIzMDhGN0E2Q0Y4NjdGREQxOEU1NkY1QzFDNzFGMjgKKzoxMDI2MjAwMDBCM0NFQkJGMkJFMzFBQUFENkUyRjc1NTZBOURERTBFRjAKKzoxMDI2MzAwMEQyOUY4NjZGNjM0NzMwMUNBN0UzMzc2QjI1QTQxMzIzMTMKKzoxMDI2NDAwMEZFRUY0QjdFM0UxM0UzN0U5NkNFQkY3NzBGQjhBNzdEOUQKKzoxMDI2NTAwMDk3NTVFOUJDNEVFQjk4RDE5RjQxNzk4QTlDRUJEQkY3MEIKKzoxMDI2NjAwMEFBRDlGNzQ2MkVFQUIzQ0VENkEzQjlBNjMwQkE1RTVDOTUKKzoxMDI2NzAwMDBCN0EwMEVENEFGM0MxNjRENTE2Q0U3NzA2RTIzNzQ5RUUKKzoxMDI2ODAwMEQyRjg0RjExRjYzMjkyMEYyRjIyMUZFNjYwN0IyNjc2OEEKKzoxMDI2OTAwMDEwRUFFMzVEQTc2MjA3RTM3ODdCNzlEQkNEQUY0REZDMDEKKzoxMDI2QTAwMDdCRjYxMDFGMEQ5OTE3MTMwRURGQzMwNERGQTU3QTNFQ0EKKzoxMDI2QjAwMDBFNjMxRDQzRTY4QzBDQkY1RkRCMTcxRjVCMzM4ODhGRjcKKzoxMDI2QzAwMDNCMjJGODU4NUI2RjNEN0VDRjA3RTM4MDE2MzM3RENGMEEKKzoxMDI2RDAwMDA3RjNENzhFMzAzOTE5OUFDMUY1Q0Y1OEYxRkQ5RUYxMjUKKzoxMDI2RTAwMENDNDdERjM5MUMyQkJFRTMzMzVFNjEwMTI1MUVGN0NEREQKKzoxMDI2RjAwMDAyMzJERkY3RTVFNzJEQzYwODdFMUVBQjA0NUFCMThFMjUKKzoxMDI3MDAwMDYyQkNEOEU3OTlDMERBRTlCOTI5MkM0OEFEOUJEOUU5NzAKKzoxMDI3MTAwMDFDNDUxMTczNTEzQkNFMTI5ODhFRUU1NDRFN0QzREQ1MjMKKzoxMDI3MjAwMDI1MDY5MjE1Qzc3OThCMzhBRkQxMEJERDQyRUI1N0U4MDAKKzoxMDI3MzAwMEJCM0RDNDlGMzI5RUQ3RTlGREJCMkZCMzMzQjhEQ0QzN0EKKzoxMDI3NDAwMEM3NDU5MEJFOTcxOEU1QjlGMDdCNkQzOEM5NDQ4NTk1QUIKKzoxMDI3NTAwMDYzN0REMzY0ODU1OUEyMDFERTVEODcwQzI0Q0YyRDFERDYKKzoxMDI3NjAwMEFBMUZFQjUzNUQwOUUyQkRDRjE5RDVFMThFNzU3Mzc5RDAKKzoxMDI3NzAwMDQ1OTM4M0Y1MThEQTdBRjU3ODk4MDBFMzYxOUU2REFDOUQKKzoxMDI3ODAwMDAyOTEyOEUxMzE0MEYzRERDOEY4Mzk5MjQyQTY1MkZEQUEKKzoxMDI3OTAwMDczNjk0NkE2RDBGNzQxOEFBMzhBMjE4RTQyN0Q2RkIwMjUKKzoxMDI3QTAwMEY4MDgxRkQzMzM1NEJBOEZGQjI1QjEzMENFODQ4RDEyNzUKKzoxMDI3QjAwMDdCMEZGNzNGQjJGODdBQjVGMTI3MDAyM0UwRjlDMkU5QzEKKzoxMDI3QzAwMDE5REM5RTYxNEFGNUJENzhCRThGMTI0QjA1Q0QyNTc2OEEKKzoxMDI3RDAwMEZFOURBMzY0RkFDRUQxRjVFMkI1MkI5OTdGRUYzMkY2RDgKKzoxMDI3RTAwMENFNjBFN0NGMEE0MkZCNDkyRUZDRUU1MTZDRTgzQjlCRTIKKzoxMDI3RjAwMDJFRURERjgzMDg0NEZFN0IxMDc3NjQyQ0Y5MTFGMkEzRTEKKzoxMDI4MDAwMDU2QUZDN0JDRkNERjdERDBEN0VCODVENUU3QjEwQjYxRjgKKzoxMDI4MTAwMEU3QjBCNUJBOTI2REZFRDkyQTlFRjM1QjkwNjhBMTczQkEKKzoxMDI4MjAwMEJGNzk5NkZFRjk2OEM3MDYzQUJEMzRGRUZCRDJGNkMxMDEKKzoxMDI4MzAwMDM0OThFMjFGRUQ4OTA5RjFCQjk1QjlDNzIxQkU0Mzc1RjQKKzoxMDI4NDAwMDgzRkMzQjUwRERFN0FFOTIxOTlENTdCNDlBNzk3REU1NDQKKzoxMDI4NTAwMDYzMjAxRkY4MUQyNjkwMkUxNUVCNjhEODgzQzU1NDhGNzIKKzoxMDI4NjAwMEI5REU2MTcxRTE3OTA5MzNDMjZEMERDMTVENkIxMURGQjQKKzoxMDI4NzAwMDA1QjVGMDdENzE3RDNENjhBRENENDBERjFEQUQ2NUQxMDUKKzoxMDI4ODAwMDc0MEUzRDI5REFCQjJFMDNFMEJBMkZBNjg4Q0U3NzY3RjcKKzoxMDI4OTAwMEVGOUNFNDQ0QkYzMTdDRkQ5M0I0RjUxQjdBRDY0N0MyNkMKKzoxMDI4QTAwMDdBMUZDOUU4QTUxRTUxNUJBN0Y2RUY3NkQ4MDVGRUI0REUKKzoxMDI4QjAwMDc1REJCNTczNEE2RTI1RTI5QzkyODY4RkM3QTJGOUJBODIKKzoxMDI4QzAwMDhEQjhGMzlGNDVFRkFBQTgzN0Y0RUJGREZGREMyOUJDRDgKKzoxMDI4RDAwMDE2QTA2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDI4RTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRDNENzY2NjBGODUxNzIKKzoxMDI4RjAwMDhGQzAyRTlBMEMwQzVERDJBODYyQjRDNDFEMTIwQzBDQjEKKzoxMDI5MDAwMDk3ODBGODBCMTA2NzAyRURGNTkyNjQ2MEYwMDZFMjZEQjcKKzoxMDI5MTAwMDQwQkMxRDg4QzVBNTE4MTgwMjgwMzgxMDg4RkI4MEZDQjMKKzoxMDI5MjAwMDdFMjA0RTA3RTIyNEE4MUJCMzA1MTkxODcyODEzODFGQjgKKzoxMDI5MzAwMDg4MEI4MTU4NDg4MDgxNDE1ODgwNzhGQkNCMTUxOTE4NDUKKzoxMDI5NDAwMDVFQUIyMkY4NUE2QTBDMENDOTFBRjRGM0ZGNjBDMzhFMEUKKzoxMDI5NTAwMEI2RjRCNUVGMTREMEJFRTU2RTA4QkUwNDkwQkRDMjBENEUKKzoxMDI5NjAwMDU1Q0Q0QTM3RkM2NkFDNDI5MzVGOERDNjVGODM0NzdGODcKKzoxMDI5NzAwMEEyMEQyQTdGOTkyOTJBN0Y5RDM5MDNDMzQzMjQzNUNCOTEKKzoxMDI5ODAwMDRERjFCQjA1MUQwQjAyRkQyNzg0Mjc0Qzk3MzBBMkYyQTkKKzoxMDI5OTAwMDI3MzJBMUYyRjlBMTdDMDBCQTBCODA3NEE4MDMwMDAwRDEKKzoxMDI5QTAwMDAwMDAwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwNzUKKzoxMDI5QjAwMDAwMEJFRDdEMEQ3ODU0RDU5OUYwQjkzRjczNjcyNjk5REEKKzoxMDI5QzAwMDk5REMyNDQzMzI2MDEyNkU3RUQwQTAwMTg3OTg2MEIwRkIKKzoxMDI5RDAwMDU4NkUyMEUxNDdBMzBFMDgyQ0I0NDAyNjI4ODgxNjZEQjcKKzoxMDI5RTAwMEM0OUZDNkRENTAwNjA5QkYwOTIxRTE0RjcwRDExRDEwRkIKKzoxMDI5RjAwMDVERUE2M0ZCQzU1NjVCNzVCQjc2ODJENjQ2QUIzNTY4MzAKKzoxMDJBMDAwMEQ3ODc3Njc3NjVBMDE1QkZCQTc2MUJEOTZEOTc2RUJCNTEKKzoxMDJBMTAwMEY1N0JERkY3OUNDQkNDQkQ5OTAwRkVFQ0I3QkJERkYzQjkKKzoxMDJBMjAwMEM1QzdFNzcwRUUzRDNGRUY3OUNGRkI3RkRFNzNDN0M1Q0IKKzoxMDJBMzAwMDQ2QjFFMDU4QzYzRUM2QkY2OThDNERDQzY1OENENUE2NjQKKzoxMDJBNDAwMENBMTYwRjhCNjVFNzMwOTZEQjIxMzE1NkMzRDhDQTc2OUMKKzoxMDJBNTAwMDI1M0UwQkZFNTlEOEQxRjIwQUQ2OTdCN0I5MEQ3NzI5ODIKKzoxMDJBNjAwMDYzRkQwRkI4RkQzNTUwM0ZCRDVEMDlCQkExNkJBM0UyMEYKKzoxMDJBNzAwMEEzRkFCMjJFNTdEODZEQzBGM0FEMUZCRDlDOEZFRjM3QjAKKzoxMDJBODAwMDRBNjEwNjc1QzZFRTY2NkMzMjYzNkIzQ0YwNEZBODJGNDgKKzoxMDJBOTAwMEFCNDg3NkUwRkI3N0I3NDhFMTE4QkU2NkE2NkYxMkJDN0MKKzoxMDJBQTAwMEJGOTVGMUY3Q0QwRjI4MUE5M0ExQkVFRkI2MjYzNjkxNDgKKzoxMDJBQjAwMEIxNUI3QTYwMTYwRjM1NjQxRkYzRjY4QzE1MzAxNkUxQTIKKzoxMDJBQzAwMDhGNThDQjE2Nzg1Rjk5N0ExRjYxNUQxRjI5RDBBRjM5NzcKKzoxMDJBRDAwMEU2NzhCRTZGRDZGQjJDODBFRkI1RDQ3MzU4Q0YzMUZDQUYKKzoxMDJBRTAwMEM3MTRDNjJFNjVGRUUwRTk2Q0Y4Nzc5ODg1M0Y1NkEwQkUKKzoxMDJBRjAwMDZDQzg2NzZDNzQwQTVGQ0U5MjMxODA3RTE0NjM3MzE5NjAKKzoxMDJCMDAwMDczQjE3MjE4QTdGNjMyMTcyQjgzRjU1OTc4NkNFMzc4RjYKKzoxMDJCMTAwMDVDRDYyNDExMUU5N0Y5MThENURGOUQyQkM1MUYyQ0E1NTcKKzoxMDJCMjAwMDdFNkM3QTM1OTRGMEJDMjAwRkNBMjAzMzBCQTE4Qzc4RDAKKzoxMDJCMzAwMDU4MjIxQkUwOUZEQjc2RDk3QkI4RkUwRDM4RDU2ODZBM0EKKzoxMDJCNDAwMDlGMDhDMEZCMDUyQ0VBNjIwMERGOUZCMTE4OTU4QjU5RTYKKzoxMDJCNTAwMDlDQ0EyRkIzMDRDMUIxOTQwRDk1QTg1MEJGNEI0OTZDQ0EKKzoxMDJCNjAwMDYyMzA0RjM4MTQ5RDhFRkJGQkJCRkE2M0VGNEFGMEZFRDgKKzoxMDJCNzAwMEZFNkFBOTc2MEE5NENDOTc0N0VCQkVEMEZBQUNGOTU1MTkKKzoxMDJCODAwMDE2QjkwRUM3NjE0Qzc2NDVGQzhDOERCN0Q2Nzk5OEM1QzEKKzoxMDJCOTAwMDJBODI4Q0U5M0QzRTRFMkY4NzU5M0Y4M0ZBRjgwNjQxNDEKKzoxMDJCQTAwMDJGOERFRkNCMjE1ODc3Q0ZGMzJDOENGNTEwNkNFNjE0REEKKzoxMDJCQjAwMEE4ODdCQUIyRTIxQkEwREVGMzc4QUMxRUYxNzJBQzA1QjYKKzoxMDJCQzAwMDMwMEZGRDhGMzVCQUE1NjgxNTk0MkVERDE1ODEzMkE0MUUKKzoxMDJCRDAwMDMyQTYwMDlFRUExQkQ2NEIwQUI0OUIxQkU1RTM4QzM3NUEKKzoxMDJCRTAwMDM1OTk1RDA5RjVDMzMxNDkxNUNGQjFCRkFFQzcyNDFENzUKKzoxMDJCRjAwMEVBRTNBMUZFQTA4NEVGNzUxNzgzNzExQTFBNzI1REM5MEEKKzoxMDJDMDAwMDJBQzQ3N0NGMTgxRENBOEFDMzVBNDIwNkZDRDY5QjNBRkIKKzoxMDJDMTAwMDNENjc2QzExRDFENTc4NDE2QjczNERERTZGRUVFMTNDQjEKKzoxMDJDMjAwMDNGQTNGN0VDNEYxRjVCRUYwMUJGOTcxNEYxN0QzQjc2OUQKKzoxMDJDMzAwMEI4MkMwN0UxNjU1MTdCRkYyMjk1QzUzQzc5MjkzQ0VGMTMKKzoxMDJDNDAwMDVDMDcyRkRDMjlGQ0VFM0E1Q0I2MTVGMTc2QUM0RjBEMzMKKzoxMDJDNTAwMDBCNTJCNjhEMEZFM0Y2MzZDMEZCMzM1NTcyNTgzMTkwRTgKKzoxMDJDNjAwMENGOEEzOEZDMTVCQTVGRjdBNUM2RDlCOTBFREE1Rjk2RDgKKzoxMDJDNzAwMDgyQTM1MTk5REE0RkY4MzAxOUYxRTNEQzFBNjg1Rjk1QjUKKzoxMDJDODAwMDZBRkYwNEI2MDczOEY2MjAzQ0Q0NkZDRDUxMkZDRTEzMUYKKzoxMDJDOTAwMDYxMzRDRjQ4RjRGMEMyM0E5REZBMEQ4QTc1NUNGM0JGRjcKKzoxMDJDQTAwMEMzQjQ0RjczMUI1QTI0M0VBRjgwQUZDMTBFOUY1NTVBMTkKKzoxMDJDQjAwMEYwOEQzNEZFMzEwMTk3MzVCRTM1REYxM0VCNDI1NDM2Q0IKKzoxMDJDQzAwMDJBNTU4RkRDOEJFQjNBQTJGMTc1Q0QzNzFFREY4REY4REMKKzoxMDJDRDAwMDNCRTIwOUM3QTBGRUU0NzU3RjMzRTY1RTE4RTI4QUU5QUQKKzoxMDJDRTAwMENGNUZGRTBDQzNGOTk2M0Y3QzNCQUVFQkI5MkM1QUQ3QjUKKzoxMDJDRjAwMDUzMUY5RTc5RUQ0NjM2N0NERUI3MDQxRTdFN0E2RUZFNEIKKzoxMDJEMDAwMDEwRDVBREY5RTc5QUQyMTgwOUU4QUNEMjk0MTIyRUEwRUEKKzoxMDJEMTAwMDk3NjNGNTVGNzlGODVFMDNFQkZEMjZDQTkzNEFGMzk4NTMKKzoxMDJEMjAwMDI5NDEzOTExODZBMUZENjZFQTlGM0UwNjc5NTYwOURERTMKKzoxMDJEMzAwMDkxMUYyNzM1NDgyREQ4RUU4OTFCMUZGQUQyN0RGMEU4NjgKKzoxMDJENDAwMEE3MkUwRUY3MTU3RkM5RTFCRUVDRkFCNTRGMjJCQzk3NEUKKzoxMDJENTAwMEREQjhGNkU3Q0Y0MEZEMEExNDgyQzA3Nzk3REVCNDdGNzYKKzoxMDJENjAwMENEREZDMTNGQkZCMUYwMkY5N0VGNjEyNDE3NjJEOTAwQ0IKKzoxMDJENzAwMDQ3QUUyOTMxRENERjY1REY3N0RCRTRDQUIxRTdGRDI0NEMKKzoxMDJEODAwMDU3MEFDREQyMThGMkRGQjIzRTg5RTQ3MzdGQTM5QjA1QzgKKzoxMDJEOTAwMEYxRkRDRkRDNzEzN0YyRDcwMzkyNDlFRDlGNzVDNzUxMzIKKzoxMDJEQTAwMDNFMUM3MzMxODZGMjc4RDk3MTZGMUNGOTg1QUQ1QTQ2OTUKKzoxMDJEQjAwMEYyM0E2MkM5NkIzMzdGRTlCRDMwREVCQjBEOTYzQ0U3NkEKKzoxMDJEQzAwMDc0NEFFRjYxN0RFRjlBQkZEODdFMzVGNDNGNjNCQUMyOTMKKzoxMDJERDAwMDI4MzYyRDc5RTFDNEYzQkIwMkJGOTFGQTcyQTI4MzY1NTQKKzoxMDJERTAwMDZBRDIxNUNFNDAwRkNENkQ4QTRENkVENzM3OUMyNEJBNkUKKzoxMDJERjAwMDVBMDYyNTRCRTNEM0I5ODJDRjk2MzVGQzQyRjBBNzRFNTUKKzoxMDJFMDAwMDcyQzkwOUNGMUJCNTg1QzU5OUU4RUU5NDgwMjcyOUU4REEKKzoxMDJFMTAwMEVENUREQ0VGQ0IxMDNFRTg4NTc0RDNBNUM0OTUzNDM5NjUKKzoxMDJFMjAwMDBEN0ZBRUM4MDRBQUM3OTBBNTZGRDk2Mjg3RDM5MkRCODUKKzoxMDJFMzAwMDJEQjE2QzlCQkUwMkY5RkIyRjI4Mzc5QkRCRjI2RENGQzcKKzoxMDJFNDAwMEU3RTZCMERBQTk5RjRFMEVGRjgxRTQ3MDUyMjI3ODQwODcKKzoxMDJFNTAwMEZGRDJGRTQ3RTI1MjFDRTVBMkI1M0Y3Nzg4RkQ4OTU0QjgKKzoxMDJFNjAwMDMwNUFDRkFGMEU0OEYxMThFQ0VGQUY4RTg4RjVFRDkzRTYKKzoxMDJFNzAwMEUyOEE0NEY0NkE5RUY2RTBCODMwNjc3OTZBRkY2RjE3MTkKKzoxMDJFODAwMEZCOUZEQTNGOEUxRjBCNUYyOTNEOTdCQjI5MDkyMEI0QkEKKzoxMDJFOTAwMEY4MjIyNTI4QUYyREZFQjFGMERCQkZFNzQ3MjVCODdGMkMKKzoxMDJFQTAwMDg1NkRBNURENzUwOEU3MDE4NUY4RjdDM0ZBOTNDNUI4MDgKKzoxMDJFQjAwMDZGRUZCQTAwQUZEMDNGNzJGOEIxMDBGM0E1RTA2RjExMjkKKzoxMDJFQzAwMDcyRjA4MzBFQTAxNzc4MkUyMTlDOTU2OTcwMEFCODVENjgKKzoxMDJFRDAwMDU4ODc3NkI3Mzc0ODdEQzhBN0JGMTRGMzVBRkQ3RUI0MkMKKzoxMDJFRTAwMDY1QzY0Q0M0Q0YxRDNEMTI0M0ZDREM3RUE0NzdEOTlGNDAKKzoxMDJFRjAwMEMzRkE1N0M3QjNDMzM4QzVBRjFBOEIwMzk3MDAzQzJCMkYKKzoxMDJGMDAwMDdBRUNGQjc5NkFDQkNEMDFBNDlCMEZGQkYyMEI3MDlDOTIKKzoxMDJGMTAwMERCQTcyNjM0ODQ3Mzc1RTI1NUNEMDAzQTlCNjVGNjZBQ0IKKzoxMDJGMjAwMEM5MEM3NEY1NjFERjg2MDBCNkZGNTBFREI5RjExQTlDNEIKKzoxMDJGMzAwMDY3OUYxMjVFMEZFM0FGM0U1MjNBRDNFNDc0NEFGNEJCOEMKKzoxMDJGNDAwMDVBRTBGN0E0REEzMzczMENDMEQ3RjI4RDcyOTIwN0VGMTAKKzoxMDJGNTAwMEY1MjlCM0UzMTlFNEU3RDcyNTg1RTg2MDc1OUI1QkM2REYKKzoxMDJGNjAwMDc1OEU0NDJGMUY3NkI4NTgwMkU3NTExMzg0Q0Y5MURBM0IKKzoxMDJGNzAwMDdERDBENzQyRUZGQjFGMjhCQzAxRURCN0RCREI1RDI0MjIKKzoxMDJGODAwMDJGNkU2RjczMTMzREFENkU5MEUyNEM0QUYxREIwQTAxNzgKKzoxMDJGOTAwMEVGRUFERDBBQkQzRjY5NEEyNDNGQUNGREJBNUREMERCRjQKKzoxMDJGQTAwMEM5QzM1N0JEODJGQUZFMENDODFGOTRCQjMzMzZGRTUwMEUKKzoxMDJGQjAwMEJCMDRGMEIwNjIwQjk3NDcyNzc3RTcyRUJEMDdFNTg4ODMKKzoxMDJGQzAwMEQwOTc3Nzg4NzE2RjhCMkIzNkZFNThEOTlFNkREQjhGMkIKKzoxMDJGRDAwMDY4NTdCRUFEN0VGQTQ4RkU4RDc1NDhENzVEMEFFOUNGQzkKKzoxMDJGRTAwMDVCMzYzRUE2ODU0ODNFRDlFRDRERTRCMDQ5MDUyOUZCNDgKKzoxMDJGRjAwMEYyMDQxQjVBNzA4RDk0QTIyNzhCN0U2RTZEMDM3QjMzNzcKKzoxMDMwMDAwMDMwRENERTZDMzkyMjkxM0Q3QUQxNzY2NjFCRDg5OTEzN0IKKzoxMDMwMTAwMDg3REI5OTk2MUM4OUEwN0Q1NjlFOTIyMzk2RENCODRCM0YKKzoxMDMwMjAwMDg5OEUwRDAyMUNCRjc2NDUyRkNCMkYyN0I5RjE4MDU0MTYKKzoxMDMwMzAwMDhCNzRBMkZGMTZFRDRBMTY1MzZBNTFCRTVEQUNCQ0EwNUMKKzoxMDMwNDAwMEM1NUE3QzA0N0ZFRjc1MDA1RDY1QTBENzE5NDg1NzMwREQKKzoxMDMwNTAwMENGQ0M5RUZFOENGNDNDNDMzMjY4QkMxNEREREMxMjIwRTUKKzoxMDMwNjAwMEJFQzU0MTAxOEU2NjhGRDk4NTcwNUUwMjEzN0JBQkE5MDgKKzoxMDMwNzAwMDY0NEExRTJGNTVBODZGNDY5ODgxMUU0RUFEOTVFMjg3NzMKKzoxMDMwODAwMDRBNzkzQjFGQ0E1MzgwRUIxQTc4REVEQzc1Nzk3QzlCNEEKKzoxMDMwOTAwMDg0NzYyMUZDQTFGRTZDRTM3NjM3QjQzM0ZENzlGNERDNTEKKzoxMDMwQTAwMDk0QTAyQzZBMkY3RDE5RjdFNzEyMTAwMDVBMzU2RjhGMDQKKzoxMDMwQjAwMEYzODA5RDQ1Mjg4MUY2MDk3NzM1NzU4RDA1QTAyQzg2MEUKKzoxMDMwQzAwMDdFMzJFRjRGRUZCMTVEODBFNDc4OUNENjhCRTNFMzM4M0UKKzoxMDMwRDAwMDE1NEE3QzBEQ0ExOThCOEU5NzA5QjkwMzcyQjU1MjA1MzIKKzoxMDMwRTAwMEZBNkE2NjU5NjFENDlCQ0Q2REU1RTdCNTVGNkUwOERCODIKKzoxMDMwRjAwMEU1Qzc0RDc1NzYzRDMwRDdCNENCRkY5QjY3NUY2MjZCRkMKKzoxMDMxMDAwMEJGMjA1MjZFN0JGRjY3OEJBRUIwQkQ1RjFDQkRDQTU2NDEKKzoxMDMxMTAwMEZGRjJBQTJGRDhEQTJGNkQ5RDYxRjc5MzdFOUE0QkVCQzEKKzoxMDMxMjAwMDU5MjNGODcyMjRCODVGMTdGMkYyMjcwRUZCRDQyQTlCQkEKKzoxMDMxMzAwMEFFNEZENEJDMERGQkM0RDZCOUMzOEY0MzcxNjIwRTVCRDYKKzoxMDMxNDAwMEQ0OTcyNjU3N0NCMjQ0RjhGQzBEQjAwOUY3MEZGRUY0NzMKKzoxMDMxNTAwMDMxRTEzMUM0RTc2REZBMEI3NzZCMjZCQUQzNDQzRjM0QzMKKzoxMDMxNjAwMDk3RDA1RTcyQjYzRkIxMThFNjQ5RUJGNzZGOTI0NDc0QTAKKzoxMDMxNzAwMDc4QUUxRkYzRjRGQzEyNDA2RTAxNEVDRTAxRDRERkM5Q0QKKzoxMDMxODAwMDkyMjVCODZGRUU1QzgzREVERjI1MjcwQkIwRkUxQjM2ODEKKzoxMDMxOTAwMEI0MzcxRkY3RDc5NzJDNDZGRTY5NTZEOTczNTIwRUY2RUYKKzoxMDMxQTAwMDBCN0JEQzMwMUY1ODQzQUMwREU4QTNBNUVENDdDN0QxMUUKKzoxMDMxQjAwMDhFOTM4QzIwNUI4Mjc1OEYyRjgxRkNDRDNBNUMxRjI2MEQKKzoxMDMxQzAwMDJEQkMwMzFGRjY4NkEyMUY0QTAwODdENERFRkY3QjA5QjEKKzoxMDMxRDAwMERGN0Y5RjE5QTg4NzU5QjIyODE3RkQ0NzlDMkE5RDBGQUEKKzoxMDMxRTAwMDlCNjZCMDU2QzRENzg5NDYzQkRFQkM2MjFEM0Y5NzY0RTAKKzoxMDMxRjAwMDZBRjcxQzMzN0Y4QjdDNzQ1MkQyRjlGQTA0QkNEQjI0NEYKKzoxMDMyMDAwMEYzMkNDRTY3QzFGRDZFQUVBRUIxNEYwN0I3MjJENzIyMDkKKzoxMDMyMTAwMERDM0YyMkI4MzdCNEIyNjRCNjMyMzJEQzU3MzBEMzJEM0IKKzoxMDMyMjAwMDhGMUEwRUNGNTk2NjY2NjU3QTNFMEJEODM1RDNGM0NCMkQKKzoxMDMyMzAwMEREQUMxMkVERDUxMzUyNTY3ODdEMjk5NjQzRkZGODM1NTMKKzoxMDMyNDAwMEUwQUJEODM3N0NFMUM3OERFMTc0MzE1NUNFQTVGOTlCNTEKKzoxMDMyNTAwMDg1QkQ1QkQ4MkUyNUIyRDEzRTY1MUVCMjVGNTlDRjQzRTYKKzoxMDMyNjAwMEE2MDdFNTlBMTA3MTJENkREMjQ5NUMzRkVCNjgzNDkzNDcKKzoxMDMyNzAwMDlFRDQ3QTk5MjFCMUY0NzZFN0Y2QkRDRDRERUQyRDc5NDYKKzoxMDMyODAwMDYzQzkyRDBCOUY5NjVDQjFFNDk3ODU1N0U3RjgyM0M5NzYKKzoxMDMyOTAwMDE5MUM0RkNENDNGOEEzOTNFNDc0M0FEMTAxMUYxMzEwQzYKKzoxMDMyQTAwMDFFQjMxQUY3Q0ZEQTM3NzAyMzYzOUVFQTkxRjdDRDkyRjcKKzoxMDMyQjAwMDUzRDA4RUExRkYzRkQyN0UwMTlFQzhBRTczODUxOUUxMjcKKzoxMDMyQzAwMEU5RERFMEQwRDJBNzYwREQwMzZENUM1RkJGNUJDNEM4MDEKKzoxMDMyRDAwMDNFM0NEMzc2RDU0MDBFRTJDN0UzQTk0MEZDMTRGMkE5RTgKKzoxMDMyRTAwMDU4NjE3MDY4MURDQTU3OUY5QUU4NDdCODBBODVGRUYyNzAKKzoxMDMyRjAwMDMyQUVCRjBBOTlCMUUzNkFGNEVGREI0RjJFQzE3NkQ2NDYKKzoxMDMzMDAwMEZFRTQ4QUZENjk4NkZENDE3RkE0RDkzNzU0OEM3NjkyMEMKKzoxMDMzMTAwMDFCRjUxQUI0NzM4M0RDNDVCOTVDRDhGRUZFN0ZBMDVFNTIKKzoxMDMzMjAwMDJDNzRFODQ1ODQ4NEE1QzM5MTU1QjVFMzZBMjM3REZDREMKKzoxMDMzMzAwMDhGMzZBMjdENjk4RDRCMUREMkY3M0ZBODlENDRGQzE2QTgKKzoxMDMzNDAwMEI2NkZCRTVCMDlEOEM2OTczRTQ2M0MwOEI5OEQ2NkQ3QjYKKzoxMDMzNTAwMEI5Nzk0QUQxNUU5NTEzRUU0MDhBMkU5QzcwNTlGRDQ2OEMKKzoxMDMzNjAwMEEyMTM5NjNFNEZCOUFENEVGNjg0QjNFRTBFNkIzNkY5MEUKKzoxMDMzNzAwMEZDRUUxRkNCNzM1QTdERTdBMTM3RTc3ODRFRkE3NkYyNjEKKzoxMDMzODAwMDgxQzBDM0E3QTBEMzREOUM0RUI5NUNCMEY4RjYzRjhCNkIKKzoxMDMzOTAwMDRFQTNENkJFQzY3MkVGMzg4MkZBQjU0QjBCQ0YzMkQwRjEKKzoxMDMzQTAwMDRFMThGQTIxQjcxM0RDQzYyMUE0QjM5ODk0NTUwOUVGM0YKKzoxMDMzQjAwMEEzMUQyQUQ5OEQ5NjVERDFCRkY2QUZCNzk0QzFGMzEzODMKKzoxMDMzQzAwMEI1MzJGOTExMjdENjczQkFERkYzMDBCNzQ3MkRCRDFEMEIKKzoxMDMzRDAwMDE1N0ExQkVEMDJDNDJCRDgwRDAzNkU1RTdBNzAxQ0ZGQUMKKzoxMDMzRTAwMEZBOUI0QjI1ODBEQjYzMENGNUJCQjE3RDlCNDFGNjZBRjQKKzoxMDMzRjAwMDRFNUQ1QzZGODQzMjVFNzFDODMzQ0U0OEM5QTU2NDJDQzMKKzoxMDM0MDAwMDNGNkYzOUVDRDdCNzcyOEQ2NTExQjJBRkEzQTNFN0ZBNUUKKzoxMDM0MTAwMDUzRUY3RjJDNzNGRDM0QUQ4NEU1Q0Q4NkYxOTI1QkU1RUYKKzoxMDM0MjAwMEYwODNEMDNGRTlCMkVCMzFBQjVDQTM3MDdEOTlGNEIyOEQKKzoxMDM0MzAwMDEyRjQ4MzQ3NkEzN0E0NTg3QTU1RDc2ODVGRTYwRjFDQTEKKzoxMDM0NDAwMEM3N0QxQTY5MUY2MDA3NzQ4QTYzOUVBMzQzOEU3Nzk4QUQKKzoxMDM0NTAwMDg3QzY0RkZBRUQ3QUU4QTREMDQzMTZGQzlGNDBBRjJFMDIKKzoxMDM0NjAwMDJDMDZGQUQ4MkI2NTg2RkIyMzMxNUVGNDM5MDAwMEY2NzIKKzoxMDM0NzAwMDNCQUEzMjMzNTMzQkU3QkFGRjQxRjQ0QkM4MkFDREI3REUKKzoxMDM0ODAwMEEzNjJFNzZDRENFRjU4NEMwOUE3RUY4NzU1RkU4NUMyQjUKKzoxMDM0OTAwMEY1NjdDRURDODZEQzQ2NjhDN0Q2Njc2RTk3MjdEQTNEQ0YKKzoxMDM0QTAwMDc2NUZENjIyRjRBRjAwNzUyQUM2NkI0MjMxN0RERTZDQTIKKzoxMDM0QjAwMDhDNDc0RUNEOUI4NDNFRjY4RjUxRkZDMEJDQkIyMzY3MkIKKzoxMDM0QzAwMEY0MTZERjI3QzI0NzQxNDgxOTE5MUY2RkNBMzJERjQ3NzgKKzoxMDM0RDAwMDA3REZFRTAxNzcwREU1Njc1MkYyNTBGQ0E1MjVFNkNFMzkKKzoxMDM0RTAwMEM4Qzc5NjlDNzJDQTIzQTc5RTkzNEM5M0I1NTUwRjk3NTUKKzoxMDM0RjAwMDJCRDZCODlGNTQ5RjgxN0NDODUyNDZBNUVDRjY3M0ZBMzAKKzoxMDM1MDAwMEVDNjJFOTcxMDQzOTUwMjJCMzY4NUYwNkZGRjQ2QTg1MDIKKzoxMDM1MTAwMEUzQTkzRkM2RTMxNEFBMjk5M0RFOUFBOTM0MzEwOUYwM0UKKzoxMDM1MjAwMEI0MjFDODQ4MUVFNEUxNUUyM0RGMzZCMDM4QTA4MEU1NTAKKzoxMDM1MzAwMEIzRjA4MDBGRTU0OTUwNjYwOUYyNUI5RDdFQTBEOTg0MDcKKzoxMDM1NDAwMDdFNjA5MDgzQzZGNDUxNjVGRDg1RjAzQzM4N0YyNTlERjMKKzoxMDM1NTAwMDMzQjAwODk3QjczQUZDQzdGOUM4MjQ3REUxMTY3ODhERDcKKzoxMDM1NjAwMEM2MjY1MTlDMzNBRkM5MkVDN0RERTgwNzgyN0NENDFCMjkKKzoxMDM1NzAwMDFDQ0ZFN0NGQTRGMzA2Mzc0QjdCMEVFQkI4NEFGMTA3MUQKKzoxMDM1ODAwMDRGODM2OUNGQUE1OTBERjI2N0Y1RkVBQjc2MkQ4NkYxMTAKKzoxMDM1OTAwMDZCMUVCOUY5NkQyQzI3MUZCQzI3RkY0QjUwRDYzREJFQzMKKzoxMDM1QTAwMEVCNjYyQzRCNUU4QjhFQ0QxNDRGQjU0QUUwMTQyNkQ3QkMKKzoxMDM1QjAwMDAxN0MzRTY2Qjg3MzQ2NkU2N0FDNTcyMjY4NTdDMzNFQkYKKzoxMDM1QzAwMDc2MjAzRDI0NjNFNTU5NDhERkFCMTRDRUZGRkQwQkI0RjQKKzoxMDM1RDAwMDAwQzY2N0Q0MkQ1Q0FFQUFGMzAxNzk0NEZGREM0RjZGQkYKKzoxMDM1RTAwMDRFRjlEM0U0NTdBOEMyNEY1MkRBMTU4QTIzMjRGNTMyOTQKKzoxMDM1RjAwMDhBQjcxQ0RBMjI2QjU4ODI5QzhERTEzQ0Q2RkNCRDIyMzYKKzoxMDM2MDAwMDRFREQyOUUyQUQ0RUY4N0E0Qjg2OEE1MTBFOUU1OEZGNjgKKzoxMDM2MTAwMDExRDk4NzhBOUUxNTlFMERGMzc1Rjk1OTA5QzEyMUUyQ0EKKzoxMDM2MjAwMDA1Q0Q2MkZGOTI2QkVCM0RFOUYxMjI0NUY4MzkxRDQ3NkMKKzoxMDM2MzAwMEU3MEMxODQ4MDcwMzRBRDg2QjEwREY2ODM4NkU3NENCNjQKKzoxMDM2NDAwMDc0ODZGMTk3NTk3QTk4QTEzREQxMjlGQzFFQzU2NzMyM0QKKzoxMDM2NTAwMERDRDc2QzlEQ0Q0NEJGMTY1RTY5MjFFQzVGQzVDMjA5MDUKKzoxMDM2NjAwMEVDREZERThGQjg4NUY1OUFCNzIzMUZGQ0UwNUE2RTg3MzIKKzoxMDM2NzAwMDlDMjhCNUNCNkQyMEExMkVEODUzMzZBQjY4QkQ4QUI0M0IKKzoxMDM2ODAwMEQ5MTQ5Qzc0MTVEMkZDRUY5NTAyMjE1NzM5QkRCRTUxNTcKKzoxMDM2OTAwMDNCRTVCMTZENDAwN0NGQjlDRDdCOTQ1MTlGODA4RjFDMjYKKzoxMDM2QTAwMDcyRkQwN0MwMjZCODZGOEY0QTc2Nzk2RTk1MDc5RDdDQUMKKzoxMDM2QjAwMEQ0MjY5MTVEQTg5QTdDOUQzMzk1MEYxQjUxNEY2RTA0QzMKKzoxMDM2QzAwMEJCQjFEMDE4Q0UyRjFCNUY2NzY0Mzc2RTA0RkU4Qjk1OUQKKzoxMDM2RDAwMDY2RTI5RjZBMDk2NUM0QzVGMjRGNUU3QkFFODQ3MThDNTkKKzoxMDM2RTAwMENGQ0EzRjdGQTk4ODczM0FDMTNGNDA2NzA5QjQ2MzFFQzAKKzoxMDM2RjAwMDk1OENDRTI5QjBCRUVGRUM2QkZDRjExNDc4RkRFQzgxMUIKKzoxMDM3MDAwMDE1RDlENzQwRjlCREY4QzZFQkFGODFGOTZGN0Y3QzRGNzMKKzoxMDM3MTAwMDM2RUVGM0EzQUYwMjNGOURDNzhGQjdGOEE5MTk2REQ4NTYKKzoxMDM3MjAwMEYzQzREOThDQjU3NjdFMzJENjU3MTAzRkJEQTU3MEZENTcKKzoxMDM3MzAwMEQ1QkZFMDc3NkY1Q0ZERkZGOUU5N0NGQ0Y0QjYwMkY0REQKKzoxMDM3NDAwMDM5RUQ0RjY3OEJBM0U3OTE2RkNENDU0QzQzN0IwQkRBODcKKzoxMDM3NTAwMDk4NDhFN0QxQTBCREY0QTk1OTg0RUY3NTJFMkVDN0ZDNzcKKzoxMDM3NjAwMDJFMkZCNzNCNDJGQ0JENzNCQ0JGNTEzRjc5RkM2MDQxN0IKKzoxMDM3NzAwMEY5NjdFN0QzNzUzRUYzQTNDRjgzREY0MUVFOTBCQzM5MDEKKzoxMDM3ODAwMDMxQ0VDRUY3OUQyRTRFNzdCRjcyN0RFMkY1QkRGMzg1MkIKKzoxMDM3OTAwMENGNjE3RDYwRDc5MzdENzc5RENBMENGNDAzMjZCRUUwOTAKKzoxMDM3QTAwMDIxNjFGMUVBQjg4RDQ3OTAyNUE2QzFGMzUwMUU3RkVGNDUKKzoxMDM3QjAwMENFMjM3OTE5NDczQjY2NDhBOUE0RkUyNkUzNzY3QzUzQkQKKzoxMDM3QzAwMENERTYyM0ZDNUM2MkIwNjIxMUY4Q0I3M0UwNUY2ODhGREEKKzoxMDM3RDAwMDVDRTdFMzdFMDU4Q0MzNDIzMEZFNkE2RkI0NTgxRDQ1M0EKKzoxMDM3RTAwMEUzOTE3RkY5RUFGM0ZCODIyODVGNUVGNzk4MjVGODlDNjYKKzoxMDM3RjAwMDI1RDU1QzNDMUZCMEVDOEU5MUY5NUQ2NUE3RDNGQ0FDODAKKzoxMDM4MDAwMEE3MzU0NjcwOUNCQTU0QTM3ODI1OEFCMTAwRDRCNzk2RTAKKzoxMDM4MTAwMDVFNEE3MTRBMTY4RTFEOTdCMDNFNEE2NzI4Qzc5NTYwNkEKKzoxMDM4MjAwMDY0MzFEOTIxNkQ2RTYzMTZENEI3ODIwMTE1MEIxMkREOTgKKzoxMDM4MzAwMDkyREM1NERBN0I0MzAxOTQwMzYwOTdFMDdCMzUzNkQ3MDIKKzoxMDM4NDAwMEEzQTFGRjMyNEFDNjIwMzQ3M0I3N0Q0NDdFRjc4OTYyNTQKKzoxMDM4NTAwMDJFNkYzQkE2MzAzQUE3MTk3OEUwREY5NkNBNjhFRkI0MUUKKzoxMDM4NjAwMEJCRTlEQzAyRUM0NkUyRDdBODkwMUJDOUUwRjQ1MDBCQTAKKzoxMDM4NzAwMEZBMTk0NTVBNTg4MkZBQTZEODJGOEU3RjhEQ0IxM0QzQ0EKKzoxMDM4ODAwMDMzMzkzRDNFQzJFMzFEMkQyMUVFRUYzQUVEQkVDRDVGNTMKKzoxMDM4OTAwMEJGRUM0RDAzQzdGQkUxNkI1RDk3NDNGOUZBOTMzRjdGQTQKKzoxMDM4QTAwMEZENzI3OEY3QzZCNzVFQUJDMUI4QjdCQjRFQjNDNTFERTYKKzoxMDM4QjAwMEREQ0M3ODEzRUQyREYwOTkxMjFBQ0FFN0Q4QzkyNUI4RDYKKzoxMDM4QzAwMDk5MjlCRjRFOEEyMTdFQTIzNUZFMzhBRTE3NzkxQkYxQTkKKzoxMDM4RDAwMDkzOUNBMkYwRjM0NUY4MEIwMTdDMDEwMTVGNzdGMDU0NTMKKzoxMDM4RTAwMDE1Q0QxMzdCRkYzRjMyQzk3QkZBOUIyQ0Y0MDhCNERCNjgKKzoxMDM4RjAwMDlDNzc3RjFDRTU0ODZBQkU0OTI0OUZBMjIwOUZEMDhGRjkKKzoxMDM5MDAwMDhDRkE3QTk2QUNBMUY5RkNFMTA3QjFDRjFGNjE1NzI3NzkKKzoxMDM5MTAwMEE3Q0UwQjBGNkQ5OUQ3ODI3ODlFQkJDMEEzMjM5REI5MEMKKzoxMDM5MjAwMDYzOUJFRjQ2M0E3N0FFRjM4Q0VGQzE0QjMxMzQ2NzlCMjQKKzoxMDM5MzAwMDFGRjhDNDVEQTE5OTVFQjI3RkQ5NjFEQTBGRDFDNDgyNEMKKzoxMDM5NDAwMDVCMDcwNTgyNzEwN0U4QkY2QzA1Q0JEMERGODBGRUI4NEUKKzoxMDM5NTAwMDRFOTA2NzY4NkY1QkZEODA4QzRENUNFRjE5REZGNDRCMTgKKzoxMDM5NjAwMDI5REUyRkUyMTU1NkJGOUI2MjEyOUQxM0RDNTQwRTZDQUMKKzoxMDM5NzAwMDUwM0UxQzRGMUI3Q0YyNEZCRTg2RTcyRTMxNDU1NzM4MTgKKzoxMDM5ODAwMDFEODQyQUQyRjA4NjdGRjZCODE5QTc4QkNCRjZEOUY1MUQKKzoxMDM5OTAwMDJFQ0NCRkIwMTRERkM3MTRBMjE3MjdCRjhDOEZEQkRCODAKKzoxMDM5QTAwMDZGRjA5REZGNUM3RkY4N0U3MjNDNEYxNEZDNjZGNUI3QUMKKzoxMDM5QjAwMEUwMjM3OEE1NENGMTc1RkJCOUNDNEQ3NUY2RkFEQzYxQzYKKzoxMDM5QzAwMEY4MzgzRjVDRDM1NUZCQjk0RDgzQ0YzRURFQ0NBMEZEMkMKKzoxMDM5RDAwMEZERUMyMjdCN0QwM0M2NkYzRUM5QkExRDdDRjdGNDE4NEYKKzoxMDM5RTAwMEYzM0JFQTY3RjBFQjJEQjlGQkJFMjdGMkI3MzQ4RTFBMzIKKzoxMDM5RjAwMDY2Mzg0RUZGODJCREYzRTcwMTFEMTRFQURDRUUyODlDMTkKKzoxMDNBMDAwMEJGQjAyMUI3MDZFNTE0MTM3OTI2OTlFRDhGNDJBMUVGRDcKKzoxMDNBMTAwMDk1RjY5Nzk0MUNGNDQ3NERERTNFQjlFNEFEMTkzOTc4MUMKKzoxMDNBMjAwMDVFNUNDN0U4M0MzREFBREUxM0NCMzE1MkY2NDhCRjVBNzQKKzoxMDNBMzAwMDlFODU3OEZFRkNFRDkxQkJCREU5NzkzNzI5N0JFNDgxNTkKKzoxMDNBNDAwMDU3OEQ5QTBDRjY4ODdBOEY2NEMyMzhCMzk2ODAzRDUyQUYKKzoxMDNBNTAwMDk1NkU4RkI0NEEyODgzQjI5NzgwM0Q0Mjc2NDdGNDNERjUKKzoxMDNBNjAwMEM0RDc0ODc2Qzk4RjJERkJERTlGRDlBRUZFODNDQUY1MzkKKzoxMDNBNzAwMDJDRTg5OTdGRkEyQzdBNjY5Q0Q3RkMxN0Y1NzNCMDA3NkYKKzoxMDNBODAwMEE2OTUxODJCMjMxOUU4RjAwMzk1QzczQjJDRkREOTE4RjAKKzoxMDNBOTAwMDRDMjg3ODc2MEU3QTUzNzVDMUYzNkJFQjkyMkZBMTM4RDAKKzoxMDNBQTAwMEVFRDA3NzA2NzFEREIwMUU5N0FCRjZEM0FGRTc4Q0NBQzgKKzoxMDNBQjAwMEUxOTlBOEYyM0M5ODkxRkE3RDZCMDQ3RkM1QUI3OTg1QkEKKzoxMDNBQzAwMERENjJERkVGRkUwNUVGRTgzMkZBMkZFMEM3QTBGRjkyREMKKzoxMDNBRDAwMEY0OTU2REMzQjhFMDk5OTg0QUYxM0E3NUZFQ0FERDczNjIKKzoxMDNBRTAwMDkxOUVDMENFRTZGNDdDN0VGQkZBREEyMUQ5QzZDN0QzMUMKKzoxMDNBRjAwMENFNjZEOUY4QkU5RUQ5Q0ZFOTY2NzhFQ0U3NzQ4REJBNjgKKzoxMDNCMDAwMEZEOUM2RTU2Qzg3RTRFMzdDN0IwOUZEMzVENUY2OTNGNDAKKzoxMDNCMTAwMEE3NzNEQUY3MzM0N0JCRkU3QkRBRjdBMTQ2NDZGQzc0OUUKKzoxMDNCMjAwMDAxRkIxRUY4RTkyNkE0QTc5MUY4RTlCQTdDRTNGRTQ4NTgKKzoxMDNCMzAwMDg2RkRBRUQ2Qjg5REJBREExQjU5ODA3NDM3Q0RFMDc2RDMKKzoxMDNCNDAwMDVEMzRCNjlFRjIwMUYzQTIyMDZGNEEyOTZFNDg3MTJGQjAKKzoxMDNCNTAwMDJCQUU2NUM1QkRBQ0JDNDAyQjlFRTU4QzVGNTk3MTJGNkIKKzoxMDNCNjAwMDJCOEUyNUM1NzhEQ0FBRDkxMzVEODFGMDM2Qjc5Rjk0REEKKzoxMDNCNzAwMDUxOEVFOENGQzEzQ0M4MDhENjM5REVCMEY4MUM5NzA3OTMKKzoxMDNCODAwMDJERUQ5OUUzNzJDRUY4REI4OEVEM0UyNTVGN0QwRUZBRDAKKzoxMDNCOTAwMDYxM0RBRUQ3RDIwRkMwRTcwRjdFMTYzRTA3QjlCNTBEMTcKKzoxMDNCQTAwMEM3RkIxN0U0Rjc1MTI0NEZCQTY5RkYyQTAwRDc2OEE3NkIKKzoxMDNCQjAwMEMzM0U2ODE4QTc1RjcwN0EzRkM2RTNENEUzNkVFMkRCQ0EKKzoxMDNCQzAwMDhCRjU3RjMxRDE0MTg2NEQ4QjgyMEY4RUYxQUM2OEFDODUKKzoxMDNCRDAwMDk0RjQ4QkM1MzcxNjlGMzhGREUzNjFGQ0YxNUZDRDNGNTAKKzoxMDNCRTAwMDE3RTkxRjAzRkY3Q0NGNzUxRTdEMDRGQ0YxM0NFMjdCQ0YKKzoxMDNCRjAwMDVBMjVDN0FGOTMxRjJDRkEwNzkyNDg0OEQ1QjhERkQxOTIKKzoxMDNDMDAwMDA0QjZCN0U4OURCRDE4MzYxMUNFODlDMkFGMzkzMTVBMTYKKzoxMDNDMTAwMDIzRkZFMkM0RjNGRkNFQ0Y2MTlGRjc4NEM3ODkzNUUyNkIKKzoxMDNDMjAwMEZCODlERDA1RjE2REE1MjkzRUIzRjhBOUREMTNGREIxRDIKKzoxMDNDMzAwMDJCMkQwRkM0Q0E3NzNDRUMzMTVGQzdFNzIxQjUyRjgxMkMKKzoxMDNDNDAwMEZFNEE2ODM2MEI2RjMwODhDRjhFRjFFNzlDNEY3RDYxNUUKKzoxMDNDNTAwMDQ2RjFEM0NGRUM5N0VENzVDNUYxN0NBODQ1MUE1QUNBNDkKKzoxMDNDNjAwMEM4NkY2NTFBRjJBRDJBRTRDOThCNTlEMTkzODhDRkU2QTMKKzoxMDNDNzAwMEU5OTExMjRFNEY0M0UzN0MwMEQ3MkYzQTE0RjJENzNFMUUKKzoxMDNDODAwMDJCM0YzNThGODRGRjczRjg4ODBFQjk2QTg3RTcwN0E0NDYKKzoxMDNDOTAwMENCMkQ5NDZGQTE5MDE2REYyMDY1OTA1NzAyNUY3MTE2QUYKKzoxMDNDQTAwMDFFODNFQjgzRkRGQzc3QzQ2MzVFMTU5MzY4Mzk4MjhGQjYKKzoxMDNDQjAwMDlCM0RFNjFGNUM5RkNERkU1MEI0REExNDFGMDNERTNDMzMKKzoxMDNDQzAwMDFBQ0FDNTZBQzA1QkY5NzBCQzlENzRGMUY1M0JFOTJGNTcKKzoxMDNDRDAwMEE0MjY2NUE0RkYxMEM4RDEwRDUyREEzOUE5QzA4QkI1NEUKKzoxMDNDRTAwMDlFOTFFNEIzNDVBNzY5RTcwRDIxMkQ3REJERkY4RkNBRTUKKzoxMDNDRjAwMDY1NEI1RTVFRUU4OTRFQzY3RDcwOUIxMTIxRkY0Q0RBRUUKKzoxMDNEMDAwMDVGQTc5QzE5NkUwN0M5NzRDRTc4MDZFQzFFRUM3NkIxREQKKzoxMDNEMTAwMEYyNzVEQTU5MkYxRTk2QjBBOTY3MTUyQUFGM0Q0Qjg3NjkKKzoxMDNEMjAwMDI3RUM4QjY3QjNBOTM0Q0ZFNjUzNTk3RjM2OTdDQUU5OUUKKzoxMDNEMzAwMDY3MkZBMTcyQzZEOUQxNTQzNjlDMDU2MEMwQzQ2OTNDQjYKKzoxMDNENDAwMDVCNEFFNUNDQjM1NzUwMzlFQkVDNzgyQTY3OUZCRDhBQzQKKzoxMDNENTAwMERBQ0QzOTNCODlDQUVCQ0U3RTgxQ0FFQkNGNEVBMUQyRjgKKzoxMDNENjAwMDY5RkYxOEVCNTU5MkRGOTZGQ0IyRTRCQjUzN0U1QkYyMjEKKzoxMDNENzAwMEVGRkY5QUZDOEUzNTVDOTRGRDAzRkFFRkFCREE3OUU0NDEKKzoxMDNEODAwMEY3NDhGMjAyRjhGQTNFMkQ1RDRFQTRGNEYzRkREQTY3MkYKKzoxMDNEOTAwMEUwRUJFMzgyNEY4MTdGREZDMzM4OEMwN0JDMzg4QTUzNjYKKzoxMDNEQTAwMDg1Nzk5QzJBNjA2ODA2RTY2OUVDQzMyNkIwQTVGRUQyMzgKKzoxMDNEQjAwMEM4NDk4QzFCMzQyRkYwRTgzMTgwN0JBMDU0MjNGOUI0MjAKKzoxMDNEQzAwMDJEQThEMUI5REI2NjQ5MUZDREU1NDEzMjgxRjRCNzMzNjcKKzoxMDNERDAwMEE0RDE3OERCRkVBODc4MzE3RkUxQTU1MTA1MDE5Q0E3MkQKKzoxMDNERTAwMERCMkZFQkQ4RkU1QkI5Qzk3REI3RTAzOUZFMTQxNjNFNzgKKzoxMDNERjAwMDA0RTNBREQ4QjNDNzkzRUU4N0VGNDdFMzAwRTAwQkM0MEQKKzoxMDNFMDAwMDlFNjYwQ0Y4N0FFM0E4REYyREM1Rjk3QzUzMTlDNTYzQ0IKKzoxMDNFMTAwMEEwMzQzM0U1OEI3REQzMkRDRUE3RDVBMTEwRTI2OUFCQkQKKzoxMDNFMjAwMDRGMjY3REQwQUQ3QjQ0MUU2QTcyQTAwNUZEREMzQTk5MTkKKzoxMDNFMzAwMDZEODM3OTM3OEM3RTY3MEI4MkFEOEUyQkRCNTEwNkY1NTcKKzoxMDNFNDAwMDlENzU2NTVFRENBNEE3NUZGOTIwNDRGNjA0QkM0MzUwNzEKKzoxMDNFNTAwMEEwNEM4OEQyQ0M4MUZERTlGNDg2OERGMzlEQjcyOUM2QUMKKzoxMDNFNjAwMEQwM0EyNDU2RUNFRkFFMUVCOUREMjZGRjQwMDhFOUEzOTgKKzoxMDNFNzAwMDYzRDJFNENBNUI2MEZFREU0OTA1QTM3MUZFRUQzNTQ3RkYKKzoxMDNFODAwMDZERjg1MDc0N0IzQzQ1QzE4MDIzRkFFMTc1NDk4QUFCREIKKzoxMDNFOTAwMDZEOTA4RDFENjVCMEJFODBDOEI3MDYzMDJCMjM2OTc5NDMKKzoxMDNFQTAwMDA3MTYxQzRBMThENkMxRTE0QTI4N0MzREFDMDA5RUU3QTMKKzoxMDNFQjAwMEQ2MjU2MjQ5QkU1RTEzRTNBRTNFNUYzMjg0RkVBMjUyNTcKKzoxMDNFQzAwMDc3OUFFMjZEOURGRUU0MjJBQTNCRTBCMEM2RkZBRDY2QTQKKzoxMDNFRDAwMEU1MDU3MEJFRjEwOUJFNjk5RUY0RUQ0NTk0NDc1RUE1MDcKKzoxMDNFRTAwMEQxQkU3NUJCODYxNjYwM0RCNkQ2QzUxRUNGMTBCRkQ5RjQKKzoxMDNFRjAwMDIwRjg3OTVCRTVGOUUzMzJBQUNGMEU0N0I3RDdFRTJGNkEKKzoxMDNGMDAwMDVBRjBCQzJGNEEyNzFDQ0RBRUExNTE5OUY2RUZEM0NFNjMKKzoxMDNGMTAwMDdGQTE3NTdGREVGMzc1OEU5MDNGNzBCOURCQkUwRjAxMTgKKzoxMDNGMjAwMDIxQ0Y5QkE3N0MzQjg0RTdFMjE2M0M5RDEyRUM0M0NENUUKKzoxMDNGMzAwMEU3QkYwRkNENTNCOEJDRkVCQ0Q3RkIzRjZERENERjZCREEKKzoxMDNGNDAwMDNDQUUwMjdDM0FCQjFDRTM4QzYzMjY4NzMwNUVFQkIzNEQKKzoxMDNGNTAwMEUyRDFFMTM4RTUyNzA1MzAxRTREQkQwQ0QyNDNBQUNFOTMKKzoxMDNGNjAwMEM3NTA1NDk2NDAzRTk0QjMzRjRDRTAzRTI5RDU5QUExQTkKKzoxMDNGNzAwMDkwOUNDREJDRUY0QTc4MTNFNUI1MzlGOUQzODI5QkZFMEUKKzoxMDNGODAwMDI2MEJEMzgxQ0UwRkJENTY3Q0RBNTAyN0YzRkIxMjE4RDcKKzoxMDNGOTAwMEZGNTU5ODc1M0VDQkUzRDM1NjdGQjU0MkE2NzgzNDA1REUKKzoxMDNGQTAwMEIyRDNDNjUxNDEwRkUzMzk4RTgyNzFFQUJDRTFGMzdGOEYKKzoxMDNGQjAwMDM3NDU4RkY2Rjk4Qjc4N0M1QzUxQjkxRkY4OUVDNEYxQjgKKzoxMDNGQzAwMDExN0I1NUExN0NDRkFFRTdCOTdDNjNDNzE5QzlFRkFFQjEKKzoxMDNGRDAwMDVBODNDRTU1NzZDMEZGRTgzRkM0NkE3RDcxQTQ1QkM1QTUKKzoxMDNGRTAwMDkxOEY3N0E2NzI3QTA4RTVBODE1MTdBN0Y5RjhGOTAwNTYKKzoxMDNGRjAwMEM1QjkzMTRGOTFFMkU2MDZBQkMwRjdERDAyMzQ2QjFDNjgKKzoxMDQwMDAwMEQ1OEFDQjU3QUU5OTg0RURGQzA2RjMzQzA3RUJGM0Q3OEEKKzoxMDQwMTAwMEIxQzQyNTAwNkZEMEREQkFGNUYyRDIwQ0YxRjBDQTM1OEIKKzoxMDQwMjAwMERGNzgxMkU2RERGREQ0RjQ1RjNEMDlGNTVENzJGOEQ1NjkKKzoxMDQwMzAwMDNBNjg5N0ZGRTUzQUMyQUIzMzFFQkVBRDUyMzY3NTk0NkYKKzoxMDQwNDAwMDBGM0VERjIxREM1N0IwQTE4OTJFNkVFRDkxNjJGODNDNjYKKzoxMDQwNTAwMERCRTczQkM4RjdCQjM1QTQyMDVFNDA0RjIyNUVCQ0NFRjkKKzoxMDQwNjAwMEJDQzg3NDdDOTcyMTFDM0IwN0U2QzFCRkJENUJFNzJEMzQKKzoxMDQwNzAwMEMzNzkxMTZFQ0NBRjVDRDE1QkFGQTE5RTA5MkVCMTlGMEQKKzoxMDQwODAwMDVGRjg5QkVDNzU2Rjk1MURDRUFENjJGRjJFNDRGRkNFQTEKKzoxMDQwOTAwMDNDQzQxRTczREUyMkE0REIzMzQxOERBMUJDRDlCOEY2MkIKKzoxMDQwQTAwMEVBMUI0OUVFNkY1N0Q4QjhEMjBDRjRFQjU4NTdBN0U2ODUKKzoxMDQwQjAwMDIyRkRERjZERDRFRkFENDBCREQxQTA1MTVFNEY3N0RDNjYKKzoxMDQwQzAwMDFCQzcxNEVGRUQ3NUE5NzMxMzlCRkQ2RTY4RkMxQ0FCNDkKKzoxMDQwRDAwMDQ2NEVCODMzRDlGMUUyN0MyQzIwOUUzMUM3Mzk1OEY3Q0YKKzoxMDQwRTAwMDZDOTlFQzlBRUUxRTNFOEYzNTVFNzdERDVCMUU5NDEzNjUKKzoxMDQwRjAwMDIzOERGQkY0MThGMzg4MUJFREE5NjhERTQ1RERCQkI4MDIKKzoxMDQxMDAwMDZGQTM4QkQzRjUxNDJEMkU5NUEyM0RBQTJGNUMwNEY1MzkKKzoxMDQxMTAwMENERTM2NEIyODc5OEYwRkZCQUFGRTVFNzg5MEY2Qjg2MEQKKzoxMDQxMjAwMEVEN0VDNUE2MjkyQkM5NkVCOEM5QUQwQkZFMDJCQjcwQ0EKKzoxMDQxMzAwMDQyRUFCRUM1MDFBRkY5ODIxQjlFQUJDRkMxNDg2MDBGRkEKKzoxMDQxNDAwMEJDOTcxQkJFMTFFOUEyMzFGODExRDk1MUI3MTZDOTNBNzMKKzoxMDQxNTAwMEQyRDc4QTNEOERCNEFFQ0RCQUNDMTI2OEY3QUFBRDY0ODEKKzoxMDQxNjAwMEE0MzZCMTU2MTNDRjAzMzA1MTEzRTk2RTBFQkM5MUU5NUEKKzoxMDQxNzAwMDVFNDRGMjUwMjdDMDM5Njc1Q0UxQTQ2RDUwNzMxN0I1RjcKKzoxMDQxODAwMDUyMUU0QkEzMjE5MTFGNzYxRDYwMDZFNTQxNEI3MTQ0RTEKKzoxMDQxOTAwMDk1QUFCMERGRkM3N0QwRUU5QjEzMkM5NUQxREZCRjRFRjQKKzoxMDQxQTAwMDY1MEQ1QTlBN0QwRTc2RjEzMTc3REFCQTRFOENEQjEzQjMKKzoxMDQxQjAwMDk0QUI3MDdFOTgwN0U3NUZFNEExRkIwNDZFQjQ4RkFGMDkKKzoxMDQxQzAwMDRDRDlDNzEzMTE5MTY5NzZGMkFGRDFBOEM0Nzg0NjUxODIKKzoxMDQxRDAwMEUyRjc5NEU3RkRGREE0OENGM0IyMTc1OEY1MzZFOTkzQTYKKzoxMDQxRTAwMEZCRDVFMDVGRkUxMkY3MzNDRThDN0U0QzM1RkNBQzcxMTQKKzoxMDQxRjAwMDg5QUY2QjYyOUZDNEJEOTVDMzlFQzg2RjcwN0MyQjFFMzgKKzoxMDQyMDAwMDMwNTFFM0Y3OUIzN0I3QjA3MDJDMkRBRUIyRjlGOTNGQzAKKzoxMDQyMTAwMDNGOEVGNkFBMTU3RjM5OTc3NzI3RTBCNEUwREUyNEIxMDgKKzoxMDQyMjAwMDJDRDJGMzlFRTgxRkRDRTk3RTMxNEI5NkNEOURGMEY5NTAKKzoxMDQyMzAwMEMxOUQyMTVGQ0U1NzBCRkMzNDU2RjA0RjVFNkQ4NTE3NDQKKzoxMDQyNDAwMEU1RTY1OENDRjdDMTdENjhFN0YyQzQ4NEZGRDJGMzdEODAKKzoxMDQyNTAwMDE0QzE3Q0MxNzA2QkJGNkMwQzk3NEI4QUI4MzcwNTc0NjYKKzoxMDQyNjAwMDJEQTExREVCQ0MwNzUyMzBFRjY3RTI3MEI5NzE0MEQwNDEKKzoxMDQyNzAwMEZGMjUxRTkxRkYzMzk5NERFNjdFQjhGREZDQ0FCRjk0MjEKKzoxMDQyODAwMEVCN0RENjlBOTdGMTFFRUFGNzg1REU3RjUxRjg5NTA5MDYKKzoxMDQyOTAwMDcxQUZGMUE4QjhCN0Y4RjIzQTgzRkNCQzU3RDY1NTUyQzMKKzoxMDQyQTAwMDM5QjAyRTRDQ0Y1RjVCNTc0NzY1RUE3RTE1OUYzNzVGNkQKKzoxMDQyQjAwMEQ4NjEyQTA2RDVGMDlDREZDN0UyMDZDMEVCMUZCNTY2QzEKKzoxMDQyQzAwMEEwMTRGOUJDOEVERkVGRUU2RTNBQjVBNTlDRUM0NjdFRUQKKzoxMDQyRDAwMDZFQjFCOUE4M0E1MTg4RkUwQkMwOUEwRjc1OTdBRkNGNEYKKzoxMDQyRTAwMEMzRUY3OTk5ODM5NTA1NUNDRDIxREVGRkFCQ0YyQjlDODUKKzoxMDQyRjAwMDc0QTE1QkZCRUZEODZGMUY2QjY1MjhFRjAyQTY3REJGMzMKKzoxMDQzMDAwMEIzQzM0RUZGODZFRkJGQUJFOEUyRjZCRDE3RkYwMUZCN0MKKzoxMDQzMTAwMEY4MjU2QkRGQUY2NjU3RjNFRjMzNUM5QzNDNDYzRUFBNTMKKzoxMDQzMjAwMDE0NzI2MDBDRjBEMzAxRjBFN0REMEFDRjU3Q0ZFNzc5QzQKKzoxMDQzMzAwMEFFNjY4OEYzOUJBOUYyN0E2Q0JDNjhFRkUyMjRDNDA2RUYKKzoxMDQzNDAwMEYyNzg1RTdCMzEzRjRGQTA3RTk4NTc4RUVGMzEyQ0Y5OEIKKzoxMDQzNTAwMDAyOEY2RkIxMUM5MUZGM0U1NjhDQjM1QThDM0JCMTlBQzEKKzoxMDQzNjAwMEVFRURGMkYzN0ZENkE3NjNFOTYzNDlBQUU3MDIxRjYwODcKKzoxMDQzNzAwMDE5NjRBRDEyMjI3MzBDMUIyNDdGQkI1ODFBQTJCQTIxRjgKKzoxMDQzODAwMEU5NTk1ODJGOTNDMjY1REMwRjhGOTNGRTJDNTdDQzZGRTEKKzoxMDQzOTAwMDU3MTBGMjIzMzI4RjE3MjUxNzkzM0QwOTdBMTlFNTYyREEKKzoxMDQzQTAwMDVDOEQyQzQyRjlCMkExNEQwQjAzMjZDRUU1QzlFMUZEOEYKKzoxMDQzQjAwMDM5MkMzN0Y0RDUwQ0UwRjk0NzJDMjY5M0ZDNTE5RTYzMzkKKzoxMDQzQzAwMDU5RkE5NTY0RUY5MUZFREFCMDNFRUY2MDM2RTU2QjI0NjIKKzoxMDQzRDAwMDI5Q0Y3REJGQTdENEE2QTcyNkZBMTY1RUE3QzM3RTZERjgKKzoxMDQzRTAwMDE0Rjk3NDJFRThDRjMyRTQ5RjVBRjk3NDMwNkU0OUE2NUUKKzoxMDQzRjAwMEY3NTZCOUQxQUYyRENBRTRGNzNGRUM5MTQ0M0MyMzM5Q0QKKzoxMDQ0MDAwMDlBRTI4MDYyNUZFMzUzRTU4Q0Y3MTlGNzc5Qjg1REYzQzAKKzoxMDQ0MTAwMDY4Njk2NjdCOUFCMTA3NjlCQ0ZEMUVERDMxNkVCMjg1QTUKKzoxMDQ0MjAwMEVFQ0ZFODNDQkU5MUU1MzIyOUJGNjY2MzFCQkZBNzZGQTQKKzoxMDQ0MzAwMEUxNkYzNEQ4QjU2ODBGNkZFQzlCM0YxQkY5M0I1NkE5NzEKKzoxMDQ0NDAwMDUyQkUzOUFDREY4N0Y4NzM4OUJDRTQ4REUzODMwN0IzRDAKKzoxMDQ0NTAwMDc5NUNBMjE0RTU3NDNGRTJBRjM2MEQ3RkMxOTU0RDg4QkIKKzoxMDQ0NjAwMEJGOEU1Nzc5N0UyRkU4NzMxRkNCOTA2RjY4RTFDRkU1NDEKKzoxMDQ0NzAwMDYzNUZDQ0Y0REUyQTNCNDY2OThCMzJERDFCM0VFQUIxM0EKKzoxMDQ0ODAwMEVDRjQ2NDI5QTcxMzhFQkZBQzZCRDU0OEE2RjYwOTgxNUUKKzoxMDQ0OTAwMEVGOTIzMjE2M0QxRkZFRkEzREJBNkQ1Q0VCREM1NzE5MDgKKzoxMDQ0QTAwMDIxREUyNUY5MTIxNEU3OUFBODcxM0I2M0MzNjI4RUQ3MDcKKzoxMDQ0QjAwMDBEQ0Y1RjczM0M5QTc2MEVGMTRCMUM3MjRBMkExRTZDMkMKKzoxMDQ0QzAwMEM1OEQyREJERDlFRTg5RkVBMzY3NTQ0QTVGQjJFRjMzODcKKzoxMDQ0RDAwMDkyQkJFQzA1Q0Y0MURDQjcwQ0U3MTBBNzNDQjUxOUNFNzkKKzoxMDQ0RTAwMDIxN0EyRUVFRkIyRTYzMDVERjFFREE3Mjc0MUVDRUYzRTgKKzoxMDQ0RjAwMDU3NzU4Q0VDQUJDMDMzN0NERTVDOURDNUU1NTJGQzRFNDEKKzoxMDQ1MDAwMDgxMjk2MTlDRTU5QTg4NUU4RkY2OUJBQjlEOTk5ODNGQzcKKzoxMDQ1MTAwMDMzNTZDNDZEMEFEQkZCMTRBNDhCMjBFQzY1QTE4NEY3MzEKKzoxMDQ1MjAwMDlBOTIzMUZDOUVDOUQ4REQ4Q0ZDNDRCNTcwRTZBQUY1QTAKKzoxMDQ1MzAwMDg2MTBBNTY5Rjk1MTBBMUJFQUE3RjVCNTZCQzZFM0E1NzQKKzoxMDQ1NDAwMDA0RDY0RjUxM0Y4QzExRUYwM0VEMzM3Rjg1NzI3MzRDQ0UKKzoxMDQ1NTAwMDI0NEE3OUI4RDAyRkU2NDdGQjQyRTBCMUMwQ0JGOTc2QzgKKzoxMDQ1NjAwMDc5NDM1ODkyQTA3RDMwOThBNEY4QTQ1M0FFOEYwMUZDRjMKKzoxMDQ1NzAwMDVDOTI2NkJGMDU0NDlEQURFMjcyNUE4NkZGNTBDRkU3NUMKKzoxMDQ1ODAwMDQ3RUM3MjdCOUNFMzVFNzRDMDkxRjc5MkVCMTVGOUVFRjkKKzoxMDQ1OTAwMDk2REMyRUUyOUIzQTQxMUQ5NDMzRjlFNTI5RkRFQTgwMzEKKzoxMDQ1QTAwMDBGNjU1ODc1QUE3RkMwQUE3RjQ2Rjg4MDEwODg5RTJEOTcKKzoxMDQ1QjAwMDc4RjAyQTI1Q0FERDNEMkVGRDJCNEZBMTdFQUVENzc4OUYKKzoxMDQ1QzAwMDFFOTlCODJGOTcyREYwRUU0Mzg3MTlEQTBENEM3OUM1NTcKKzoxMDQ1RDAwMEM0N0RERDExRTZERkE1MzkzMzc1MUVGOUExRDk3NUQ2ODUKKzoxMDQ1RTAwMDdEM0E3RTVGMTlDQTE4QzZFOUIyQzVGQ0Q2QkRCQTZDNjEKKzoxMDQ1RjAwMDY2QkM1OTBFRjQ5MDZEMjZFOTVFOUQ2RTdENTdDMTY0RDAKKzoxMDQ2MDAwMDA5Q0NDM0QxN0QzMkU1RDFFOUJFMDhDOUE3OUUwNTFFRkMKKzoxMDQ2MTAwMDFEQkZGM0ExODk3QjdBMkU3MTdGM0NEQjNDNERGN0VCMEMKKzoxMDQ2MjAwMEIyODdBRDhGREZBRkIzRTBDRUNFQUE3QUIzRENCMENEMjgKKzoxMDQ2MzAwMEIzMUVFM0RCQjBGNkQxMTlFRkQ3RDU3MTNGMjlEQkU0MjgKKzoxMDQ2NDAwMDcxODhCNEYxRTk3RUREOEVBOTY1QjZGQjc1MzQwRkZBODkKKzoxMDQ2NTAwMDcxODJGRUFDN0I3NjRFQjhDRUY1QUJDOTZDQTc0RDA4MjcKKzoxMDQ2NjAwMERCRUQ4ODBCRERBRjczODVFQ0VENzc1QzIwM0ZFQjEzNjIKKzoxMDQ2NzAwMERGQUYxMzc4MThENkNFNjEwRkJBMkMzQjc0OTRDQzcwOTAKKzoxMDQ2ODAwMEZGQ0UzNEM4RjQxRDkxREM4RjkyOTExOTEyQzUyNTQ4RDQKKzoxMDQ2OTAwMERGNUI3NjVFMUUxRkVBQkY5RDlEOTc2N0U1RjUzQkVDRUQKKzoxMDQ2QTAwMDNDQ0I3RUNCOUQ2REM3QjdEM0VFNzM1NzQ1QThDRkM1MjYKKzoxMDQ2QjAwMERBNzlCQkYwMUY0MDJGMEY3OTFENzY1RTUzNjZGQTcwRDIKKzoxMDQ2QzAwMENBOEI3QzM2QjhGQjRBMThFNzY4RUQ4RjE0Q0M1N0RCRjEKKzoxMDQ2RDAwMDk1Q0JCRjdGQzQ4NkY5MDc2RkNEQTA3REYxRjFFRjFEQUIKKzoxMDQ2RTAwMEVEOUFEMkFGRTJGNzZGN0VCNzk0OTE5RDY0QzUxMURDNkQKKzoxMDQ2RjAwMDAyRTY1RDQ1RjI3QTBBQkI3NzNENDRGODA5MEEzQzM0OEMKKzoxMDQ3MDAwMEUxMDdDODZBMDg1N0YxNzFDNDY3QTYxN0YzMTZGMjlCNTAKKzoxMDQ3MTAwMDE4MzUyQUFDMDhEM0JFRTM2NzA5NjRCQUI0MTU1MzUxRkYKKzoxMDQ3MjAwMDhGRDcyMzU2RDJGMDM0QzM2M0ZGNEU0MEEzOUVFRkQ4RjkKKzoxMDQ3MzAwMDQ3RkIzRTlGM0IwNzdGOTA3RjRGNjE4RTYxREY3N0NCQ0EKKzoxMDQ3NDAwMDRGNDI3MzE2RTdCQkJFRDI0RTA3MjdBNEM4QTAwMjVEMzYKKzoxMDQ3NTAwMDlFQ0UyQTE1RjZDRkEwOEVGQUIyN0JBRDhCRUNDNjg3MjMKKzoxMDQ3NjAwMDk2OTQ2REJEMTJGREQ1QTBBQ0YzRTNDOEExNzE2ODFGOEUKKzoxMDQ3NzAwMDM1MUYzNUJENjhFNzZEOEY0Q0Y3OEU4M0Y3MEY3NTI4QjEKKzoxMDQ3ODAwMDYxMzQwRjlGNUFCMkU2NTVBQ0M3NzZCQkM4MEU3QUFBMDEKKzoxMDQ3OTAwMDZGNUVDMThBMzRCRURCQkM3QkMxQzJDNUY4QkVDMzQ1RjcKKzoxMDQ3QTAwMEZBN0RDNTlFRkIwNjRBODNEOERGNTU5QkZFQkRBOTk2QzAKKzoxMDQ3QjAwMDhERjdFOUU4QjdCRDUxRUJDRDY4Qzc1QzlEQzVFRDkyQkIKKzoxMDQ3QzAwMDhENUE5MkUyNEYxQkU3NjkwQzVEQUU4RDI1RjVBMzU3MUMKKzoxMDQ3RDAwMEEwRkQ3MDhEOTZGMTNFRjk1RDU5NkU3RTlGQ0ZENTJBNzIKKzoxMDQ3RTAwMEExN0MyRjhDNjZCRTE3NjBCNTFCNUJGMzVCM0FDNzA4RDQKKzoxMDQ3RjAwMENFOTYxOUZBNzFBRUVCRTdDOTU4N0YwOEY2NTU5NzUyNzUKKzoxMDQ4MDAwMEY0OTQyN0U4Njk2M0QxQkQ1QjJCNzA3RDAzOTlFRjFEOUMKKzoxMDQ4MTAwMDVBRTVEQUFDNzE5QzRFMjM3NjNFNzcxNTM2OERDNjc1MTcKKzoxMDQ4MjAwMEJCREM5MTgxN0EyNEFFNDI1OUM3Qjg4OENCREQxQUI5NzYKKzoxMDQ4MzAwMDE5RUREMUFCNUQ0OEUxNkM3M0M3MEYxQjE2RTFCRTg0NjcKKzoxMDQ4NDAwMDI1NUQ4Mjc5ODI2QTY0MTVEMTU5MzA4QkExM0U2ODU4MDIKKzoxMDQ4NTAwMDEyNjk0NUJDMTQ4MkZFQzNEMDVFNjFEMTJGRTk5Q0EyQ0YKKzoxMDQ4NjAwMEIwNEU2MzVFQTg3Qjk2RjQyNDVDRjBERTUzMTFCRDBBNjMKKzoxMDQ4NzAwMEYxRkVEMjVBRkU5RDk3QzJBMDhGRUUwNTE1NDZGODM5N0IKKzoxMDQ4ODAwMDVDNjFCQjlCQTFDOUIwMTE1QzYwMTdGOTA3MTJDNTg5QjcKKzoxMDQ4OTAwMDlDN0M2NEFEQUI3OTI5OTdFM0JCRDdGRTc2NTRBNkVGMzkKKzoxMDQ4QTAwMENENTQ2NDk1MTE1RUJEODY3REREMUVENEJCMzBDRTU0RTMKKzoxMDQ4QjAwMDczNzAwOUUxQkJDNkNERTJDNEJGNkVBMkVGNURCNTJFMzkKKzoxMDQ4QzAwMDgyNkJENzk0OTM1RjQxQjg3RUY3RkIyQ0RBRUY2Qjk5M0MKKzoxMDQ4RDAwMDI5MjE1Q0Y5NDNGQzlDRDU5QTI3QkY2OTUwRTFGMTcwMEUKKzoxMDQ4RTAwMENFODc0RUJFQjNGOEMxMDlERkNFRDlGM0U4M0M2RTMzQjQKKzoxMDQ4RjAwMDFCOUM4RkY4OEU5RDk1ODk4RTM2MTdBREYxQTZDNzQ1MDYKKzoxMDQ5MDAwMDVCMDVGREMxM0U5MDdDODlFOThDRjY1QkY5NTdCNjFFQ0MKKzoxMDQ5MTAwMEYzNjEzNzdFMzE1Mjg5RkNGMUI2OTdERjVCQkQ2RkE5MzkKKzoxMDQ5MjAwMDQ2RUI3ODY4QUU0NkYxQzY4N0ZDQUQ0NEY3QTczNkJBQzkKKzoxMDQ5MzAwMEMyODcxMDFDNTU1Rjg4RkJCOUJCQjgyMjhDRjFCNkJGOEIKKzoxMDQ5NDAwMEMzQzNFNzM0RkY2MEY3QTgyRjU1MjIzRUJGRjg4NzJDN0EKKzoxMDQ5NTAwMDNFQ0UxNEQ1MUFFNzY3NDRFRkI1NUU4MjczODZEMkZFNjkKKzoxMDQ5NjAwMEIzMTU2ODg3MkU5MTI3NTNFRUY0QUEyNTI0QkY1QzQyMjUKKzoxMDQ5NzAwMDhFQkZCQzI0QUYxRUZEOTRDMDBEQ0IxOTk3ODczQzRFNTMKKzoxMDQ5ODAwMDExNTg1QkNERUYzMzM4RTQ3RUEyNEVERDNEODM3Njg5NEUKKzoxMDQ5OTAwMEM3N0ZFQTg1QkMxQjdCQzNGNDdBNUM2N0JERDAwQkE2REUKKzoxMDQ5QTAwMDlBRjlCQjhDQjlBMjdERTE1MDA0NERCMjYxRjE5RjVDRDQKKzoxMDQ5QjAwMEExM0ZDNkVFNzYzQzE3N0EyMTc3NTgxQzdDQjBFMjY2QTAKKzoxMDQ5QzAwMDkwM0Y1RkNBMTI3NkU0MDg3MTlGNUQ0QkU2MTEzRjlDRjEKKzoxMDQ5RDAwMDAxN0VBMEI4NzRDOTQ5QTJGRjE4QzgwOUI0OUJERjkwMzIKKzoxMDQ5RTAwMDkyQTExNTY5RTc2MUQ2NzdFNjdFMjJFMjQxMTFCMzk0ODAKKzoxMDQ5RjAwMEYyODRERjEyRjFBMDlGOEFFRkNFQkQyM0UyNDFDNzQ1Q0EKKzoxMDRBMDAwMDNDRThFNzIyMUVGNDBGMTgwRkMyRUY4Nzc5MkZBNzdEMkQKKzoxMDRBMTAwMDFCNTdGNzUxM0ZDNjcxNzZENjJDRjAxODMwQ0U1NDdEMTcKKzoxMDRBMjAwMEYwMjUwNEYyOEJFNkEwNEZFNERGMTNCQzQxNEIwRkNEMjEKKzoxMDRBMzAwMDNEN0Y5QzJBODE3MEI5MzEyRUM1RTE3QzU5N0M4RkVFNzcKKzoxMDRBNDAwMDE1MDFENzgwODBFQjM1MDE5N0E1MDc1MTZFMjA5REIxRTgKKzoxMDRBNTAwMEIxQUE5RTQ5MUUwNkQ1NTYwOUNGN0I1MTVFRjQwNzQ5N0YKKzoxMDRBNjAwMDVFRjAzQ0YxRTAxQUM5OTgzMDVDNEVDMDc4QTNEM0VERkIKKzoxMDRBNzAwMDc0OEJGRTRFOERGMjExMUQzQkM3N0YzNDhCREYzQjdDNjgKKzoxMDRBODAwMDY5RURBQ0ZEMkM5ODI2OEYyMjBCNTcyMURERTVDM0ZFODYKKzoxMDRBOTAwMEEwM0M4QTM2NzEzOTFFQzU3QjE3Njk3MkQ1OEFBN0MxQjkKKzoxMDRBQTAwMDhFODQ0OUVGRENDMEYxMzQ5MjdDQjk5MDVDMjk3NEM4RTMKKzoxMDRBQjAwMDk1REQyODU3QTBCRTFCRTU0QTMwNURBRUI0RjZFM0JBREIKKzoxMDRBQzAwMDgzMjg1NzU4NEEwRjA1MjM5RjRDQUVGQ0NDNUI2NjhCNUUKKzoxMDRBRDAwMDkzNThGMkU1NkE2MDYzQjIxM0MzQTA0RkZEOUY1RTlGRDcKKzoxMDRBRTAwMEJFMkRFNEM0ODVGNEFBOTVGRjExMzAxOUU5RjUzRDk4NkYKKzoxMDRBRjAwMDE3ODJGRUNDNzg0NkY3NzAxNDczOTBGMjg5NzJEQjVERjIKKzoxMDRCMDAwMDBDRjM0MUI2NjI5N0QxRThDRjJDQTQ3QzkwMURGMzNEMDUKKzoxMDRCMTAwMDNBRDJDNUMzNTIyMjg0RjhEQzI3RjU3OEY5QkVFOEZEMDUKKzoxMDRCMjAwMDY4MkY2QzlCQzBFMzI0M0JGRTc4OEYxN0VERUM5NzZFRUIKKzoxMDRCMzAwMDJGMDhFMDM5NEU2RkFFOTUwN0EyMkZCRTE1RUFBNzFBQ0YKKzoxMDRCNDAwMDE5RDFDOThBM0QyQjZDNzkwRjNGQ0ZDQTIzN0NFNEM2QUIKKzoxMDRCNTAwMDQwRkUwMDNFMUVCRTlERUIxRkRERTA3OTIwNTA2NkNDN0UKKzoxMDRCNjAwMDAzNzFGQjQ0M0M0ODhEODU5MDNFQjY0OTUxMEZDNTYxQTkKKzoxMDRCNzAwMDFBNjVEMjUzQkQ2MTlFQkZEMjBCN0UzOTlFMEZGNjM2QTkKKzoxMDRCODAwMEVDOUM4M0ZBNzlDM0FEMzJBMzdDRjFDQTlFN0I1MENFRjQKKzoxMDRCOTAwMDc0NEM1ODY4MjA1RkJBNDY5N0JEODlFNkY4MDY5RkVDQ0EKKzoxMDRCQTAwMDREQ0YyM0M1RTMwNEFEOUE5RjFCOEFEMkNDMDE5MDM3MjkKKzoxMDRCQjAwMDdCNERFMzdDRjc0NzU1RTFGNzYxN0ZGNzc5RjJFMDNCMDYKKzoxMDRCQzAwMDczNDNBMzMxNEVEMERCQjgzMDg0RjNGNjhFOEE4NEYyN0YKKzoxMDRCRDAwMDI4M0Y2NTBDRDkwMzFCNDc2RDVBOENGMUE3OEVFNTFBNDcKKzoxMDRCRTAwMDRCQjc5Mzg2Q0QxN0I0REJENzU2OUM1MTZERTBGOTIzQjQKKzoxMDRCRjAwMDFEMzJGNzJGNzNDNUY5MzRGMDU1MjVFMjJEN0Q5RDA4NDAKKzoxMDRDMDAwMEE3NkFGMkZDMTE1Q0FGQzJENzRCREYzN0NENkQwMEZGNTYKKzoxMDRDMTAwMEIwOEFBRjFGRkQ1N0REQTc4RjQ2RjlBMTM2RjBGQzkxOTIKKzoxMDRDMjAwMENEN0U3RDMxRkE4RDRFMzhBQ0YxQUZDRDk2NkNGRTkxRDQKKzoxMDRDMzAwMDZFRTUyREQ0QUZFMUU3ODg0NTNDNkZBMUQ3NzVGRUJDOEEKKzoxMDRDNDAwMDg1MEUyMTBGMkRCRjcxMjQ3Q0I4MUNFN0Q0QkQ1RTdCN0YKKzoxMDRDNTAwMDFDRDA4MkU3NEE1MTNBRTExODI5NUZFMEQzQ0U3RkExMDgKKzoxMDRDNjAwMDc1N0ZERUYzOEQ5NDQ3QjAyNjVCQjJEREFGQzhCNUYyMzkKKzoxMDRDNzAwMDU5MUFENzg0NTA0RTU4RjA2Q0JFNDBGRUM4QTc4NUFCNzkKKzoxMDRDODAwMEI5OTFCN0ZGQkNEN0ZCM0Y2RERDRkE2Q0FFMUY4MTRGMEIKKzoxMDRDOTAwMDA3RjAxRTY1QzdDNDk5MjE5NDQzQTk3OENDRDA0MDM5NDgKKzoxMDRDQTAwMERBNzNFMjNFQTM5NTNGRTJEMkY5M0Y1NTk1N0ZFNzRFOTYKKzoxMDRDQjAwMENFMkVBMkVGMkNBQkQzNzlGRTA4RkQ2NUM4MDNEOUM0NzQKKzoxMDRDQzAwMEQ4NkNGNDc3NTQxMUJGNzFGMkU5ODVFMDc3RTY4RERDOUEKKzoxMDRDRDAwMEVDMTM3RTYzRDQzMTlGQzgxMzYxOEVCQzEzMzVDNEYzQ0IKKzoxMDRDRTAwMDRCQUM3QzkyMkUwOUQ2MTc0Q0U1ODM4QzM4QUYwMzZGMDIKKzoxMDRDRjAwMEUzODVEQzdGQ0ZEMTdGRDhCQUMzRkM3RUE1OTU3RjMyMTgKKzoxMDREMDAwMDJDOEY2NEFBQkMxRkI3NjA1ODFFODlDODQ3RTlDOTM1RjMKKzoxMDREMTAwMEUyM0M0RjlDRTc5NUEwREFDNDc4REVCMDNDOTJBOUQzODAKKzoxMDREMjAwMDQzRjg0REM5NjkyNUEyREYwRDhDQkVCRkRCRTNFNUY1NzUKKzoxMDREMzAwMERFMzkyQzhFREYzQkVCQzUzQUYyNTMyREEzQkM5NjYxRDYKKzoxMDRENDAwMEY5MjU1M0Q3MTA5RTM0MTY1OUM2Q0Y3N0Y4NzlCRjg1MDkKKzoxMDRENTAwMDA3Njc3RUM5MDVFOUVEMDI3OTI0NDE5RkY1M0Q4QTA4ODAKKzoxMDRENjAwMENERDNFMzBGRkZBNDhFRTA5M0U5M0NCRUUwNEJDN0MzNzUKKzoxMDRENzAwMEU5RTM1RkUyRTM3MkIyNDdFNEUxRjVFNERBRjNGMUVFOEUKKzoxMDREODAwMDEzRkI1MjIxREEzOUY3NTcyRkUyNzRERDU1QUY1M0RDQUMKKzoxMDREOTAwMERERERDMEUzOTVDM0JFMDM1MTYzRjcwNzlDRjFCQzEzOEYKKzoxMDREQTAwMDQyNUU1RjY4RkRDRUI4REVCNjExRUU5QjJERjBGMTNDQTEKKzoxMDREQjAwMEFFODc5NjFDQTJCQ0Q4MzNBQjQwQ0YwMkJFMUVDNjdDQzkKKzoxMDREQzAwMDk2OUE4QkNGNjc3OTNEOEJFN0IzRjQxQUY1MEIyRjQ1OTUKKzoxMDRERDAwMDNEMTZENTE4Q0FEMzVFQ0M2NzgxRjcxQjFBNDZDODY3NDMKKzoxMDRERTAwMDExRjE0NDJCM0UzQTUyM0U0QkVFQjlGMzc4N0IzRTRCRTkKKzoxMDRERjAwMEVGQUQzQzlGQTVCNzg3Q0Y2MzhERDdEQjUwNEQ3NkQ2RkYKKzoxMDRFMDAwMDQ4RTMzRTNEQzY5NDdEQjhGRjE1MTc3NzdFM0FBRDI0NDIKKzoxMDRFMTAwMEYyNjc5OEJGRDI1M0FBRTkwRjFBNDgyRjlDOUVCQjFBN0IKKzoxMDRFMjAwMDM1QTJFRjJFMTdGNzYzNjNBM0I5REZDQ0Q0Nzg2ODIxREUKKzoxMDRFMzAwMEI0RDlFMjRGMkNBMjc4QjJDOENCRTgxNUY3RTdGRjNFMTEKKzoxMDRFNDAwMENCQjBEOUM3OUQ4RERGMERBMTVEMEY3NEY4QjJDRUY5M0YKKzoxMDRFNTAwMDg0QzZDOTU3NEJENzgzMERDOERDN0E4Qjg5M0VFNTQwQTEKKzoxMDRFNjAwMDM2OEYyM0I4NDJDNzA2RUFEMkU4NzQ4QkQwNzc4ODFGMDIKKzoxMDRFNzAwMDE5RjA5MzJCOURDMzU3NTQyRUEwRTgzRUZEQUQxMUY0QkQKKzoxMDRFODAwMEY5NDYzNjlGREZBMjQzQTY0RTBBRjNGMzNGNTY4MTcyREUKKzoxMDRFOTAwMEM0RjI1Rjg3QjVGM0YwNzZDM0U0OEY0MzhFRjQ2MDdFOEYKKzoxMDRFQTAwMDFCNTYyQzc5NzI4MzI1NEZFQzc0NjlDOTBGRTY5MDMzMzkKKzoxMDRFQjAwMEU3RTRDOTFDNkVBNzlGOTMyNzIwM0ZGMDUzNjc0RTM5NDQKKzoxMDRFQzAwMEQ0RUJFNUZBQzI4MkM3OEQ4MjE5RTRDODdCQUVCMDJENUYKKzoxMDRFRDAwMDRFRTM5NDNCMTdFMkEzQ0Y1QkVFQkM5NDlEMkZFQzBGMDcKKzoxMDRFRTAwMDJFNzc4MjQ4MUJDODM3RDlENjM5MjJCRkY3NzA2NkVBQjkKKzoxMDRFRjAwMDgzMjQwRjNEMkE1RkI3MjdDMkU4NzcwMkIwOEVGMkRDMjkKKzoxMDRGMDAwMDgzRTcyODE5RTU3QUI1NDRGMTA2NzEyRTkyMkZCRTNGNEEKKzoxMDRGMTAwMEY4QjAyQjRDRjk2OTBGMDMzRkEzOUYzN0MxNzBEQTY3RDQKKzoxMDRGMjAwMEU3M0Y1NzcwOUUyNzNEQkNGNjZCREMzRjAzN0NBM0RGNTkKKzoxMDRGMzAwMDc1QjE3MkM4OTIxMzFGNjZGMzc1OUZBMzJGOTNDMzY5NEYKKzoxMDRGNDAwMEQxNTcxQTNERDNGNzA1MkNGQUI1QzZCNUU4OTgyMTgzOTkKKzoxMDRGNTAwMDE2OUM4NzVFMDU1RDYzMzg5QUUyRDQzMTI5OEU3MTEwMDQKKzoxMDRGNjAwMDJCOEZDQzFBRUYwRDFGQjc0NzQ2QkE1RjY1QjVGQjhFODYKKzoxMDRGNzAwMEU1Nzc5RDhCMDdFQjAxOURGMkM5N0FFOEJFMzlFQkUyM0MKKzoxMDRGODAwMEY0Mzc4N0VENTZENzU0NTEzRTgxQ0EyODlGMjA1MjgyNkMKKzoxMDRGOTAwMEZFQ0M2MTlGREQyRkI2RjJDMUE2OTU4NDQzMjgyNzM2NEIKKzoxMDRGQTAwMDA4M0JERENBMjNCM0YyRDIwRUZCNzJBRDczNjY1QjdFQTMKKzoxMDRGQjAwMERBODYxMUVFNjdCRjc5MEUzRjE3RkZGRDEzRkM2RURCM0IKKzoxMDRGQzAwMDZBQUZGOTM4Q0E0NUMwOTcyOUJFRTc0NDc5NjhENkI4QjAKKzoxMDRGRDAwMERGMTU3ODdBREQ2MzNFRTlGQjBDRjcyNzVGQ0NCMkU3OUIKKzoxMDRGRTAwMDVENzVGQTBDNDc1QzgwRTM3NUEyMUVBQkE3RkI3ODUxOTgKKzoxMDRGRjAwMDdFQUZDQTc5QUUzRUQyRkQ1N0U3QkRCRDczRjc1RkM1NDAKKzoxMDUwMDAwMEY5N0JCMzI3RkEzMkMxRkYyMkNGN0ZEM0MzRDE4MzlENkYKKzoxMDUwMTAwMEVDRjM1QkNGMDFBRkY5MTMxQ0JGNTNGMEY3QjQyMEJGMjMKKzoxMDUwMjAwMEI3RjNCRTI3RkEzNjNFQkY4RTcxQkZEQUIyNzMwRTYzOTYKKzoxMDUwMzAwMDNCRThFRjdGMTlBNDM2RDBDQkE2NUE0RUFGNDU5NThDRUUKKzoxMDUwNDAwMEJFM0YzRUJEOTVENzc3MkNFNURGMzVFRDdGOURERkZCN0QKKzoxMDUwNTAwMEQ4MTZFNURGMzM4NTdFN0QzMkUwNjVDNzc4QUUwRkY3ODEKKzoxMDUwNjAwMDU3RjE3RUZCRjE3RTEzRjI2OTA1QjdCQkYyMzA3QUFGRTAKKzoxMDUwNzAwMEEwQjg4RTUyMzlCREE2QzczQjAxREUxRjU4MkE1MzVDMkIKKzoxMDUwODAwMDc0OEZFMDhCMDAzMzI5Q0VCMUFEOTJDRkIzQUI0MjdFQUIKKzoxMDUwOTAwMDQyN0M4RjY2RDEyRDUwRUY5Q0JENzIzMkRFMkZEOTJFMEYKKzoxMDUwQTAwMEUyMjlGQjE2QUY3QzAyRjNGQTNFMDg5NDBCQkE0QkQwMTAKKzoxMDUwQjAwMEJERDc5RUUzQjc1MTdDRTRBMTI1NzlEMjRBNThFM0JFMUYKKzoxMDUwQzAwMDgzOTlGMzVCQUFGQ0FBRTgxNzczOEI3ODkyMjgxMzFBQ0EKKzoxMDUwRDAwMDk2NUI0RDkxQjdEQUNBQzRGN0Q4NjMxQUM2OUY5RTE5N0EKKzoxMDUwRTAwMEU0NzlBQkREQUI5RjM5MzYxM0Y1NzFBNTRDNzk2NjVEN0MKKzoxMDUwRjAwMDgzNDdCRDk3RTFCQUVCNzg1RTRGOTE5QTkwRDJGRDE3NDYKKzoxMDUxMDAwMEFGREZDNUVEQjQ5QUEzMUVBMzZBNzhGQjY3MDY4RjEyQzIKKzoxMDUxMTAwMERENkQwN0JDMkI2OUZFOUYyQ0UwRUM0NjdGMDJGQUVEQUIKKzoxMDUxMjAwMDc1RjUwQ0NDODQ3NjdCQzdFNTQ5MzEyM0Q1NkVCNDlGRTkKKzoxMDUxMzAwMEYzNUZGNzEyNTk3Qzg3OUVEMTc3MUMzQUNENTMxRTk0QUEKKzoxMDUxNDAwMDlCOUQ3OEZFMDFFREJCNkJBQ0JDRDQxRUJBOTdCNTc3QzYKKzoxMDUxNTAwMENFRTQzOTk4MjdCRUVEMDYxRTJDRUQwQTFGMjIzRkI5N0EKKzoxMDUxNjAwMDY3MzZCN0NCRjY0QUQwMEVGNjY1NUY4Qjc2M0RERDYzQ0EKKzoxMDUxNzAwMDZBRTU3MTIyMjgzM0M2ODk3QTMxMTExOEYxMkFDRUVERjkKKzoxMDUxODAwMDI4RjUwNUU2RUQ2Q0U4MUJDMDc5OEFFQUY4RjcyRDhBNjgKKzoxMDUxOTAwMDZBMzJGNzdGMjFFMEE2RkVGQjVDMzE4QTdGOEVCNDdGMDYKKzoxMDUxQTAwMEZGRUFFM0Y4RUNBQ0UyRTcwNThDQzUyOTJFQjU1QkY4MjUKKzoxMDUxQjAwMDVENEM4RDFBRTlERjA5NkQwOTcwRkNFQzc0MzExM0UzNjUKKzoxMDUxQzAwMDY1QkUzQThERjRCQTFDMzZDODBFRjU4M0ZEODhGMUI4NzkKKzoxMDUxRDAwMDZENTI2QzMxRTY4N0M0MjY2OUVDNzFDMjg4RTkxRDg3N0YKKzoxMDUxRTAwMEYxQkIwOTc5NjFBNEJGNEQ1MjIyODRERjU1OEU4REUzNTYKKzoxMDUxRjAwMEYxRURBMzkxOUQ3NEVGRUEwMEQ4RDExNDBFNjYwOUQyQTcKKzoxMDUyMDAwMDUzREREMTNDQkEwRjc1MzQ1MjNENDhGRDdEMTVCQURCRjQKKzoxMDUyMTAwMEQyMjg5ODM3NEYxRjhBNjQ2Q0QyNjU5QkI2QTI1REQzQTMKKzoxMDUyMjAwMDM5NDVENjMxNkZCMzUzQUE4RkUyNzhCMTVDMEZDNTkxN0YKKzoxMDUyMzAwMDVENTNFNkQxRkVCOTQ2RTU0OUU5RkFFODQ2M0ZENzBCQUEKKzoxMDUyNDAwMDI3Mjc0NDZFRjRDM0JBNDI1MzRFRTU2MkRDNzI3QkVEMEQKKzoxMDUyNTAwMDJCRkI3MEZGMUVCOURGNDM3NEY0NDhFREUwREQzOENGNUYKKzoxMDUyNjAwMEZFQjM1NzFEOEYxMjVGRjJGM0JBNDc2QjRGOTdBMkRENjMKKzoxMDUyNzAwMEIzQUJFOTU0MkVFMkFGMThFMzczQTAwRjhCMkI3ODFDNkQKKzoxMDUyODAwMDBEMzUyMEQ5Njc2QTBGQkIxOUYwNThEQ0E2MzEyMzREQzQKKzoxMDUyOTAwMDFGN0IxOTNGQ0ZDMzNGREY2NDkyN0JGNEY3Q0NFMDI5M0IKKzoxMDUyQTAwMDRGMEI4RUI3ODQyNTJFMEREMDczMEZDNkIzMkMzOTUzRjgKKzoxMDUyQjAwMDVDQzcxMjA1MjAwRkY3QUY3ODI3ODY3OTcyOEY0QzJDQzgKKzoxMDUyQzAwMEEwN0I5NDQ1RTIzRDQ5NEUxOEFGNDQ4Q0Q3RkZDNjJCRDYKKzoxMDUyRDAwMEVCQjFEREEzRDUwNTA2Q0E4QkUyODFBMTc5QTgyNDhBQUEKKzoxMDUyRTAwMEFCNEU1MzlDMkQ2NERERkY4ODFBRkI2RjI1RkE5NEU5QzEKKzoxMDUyRjAwMDNCOTVDNUUxNzdGRTAyRDcxMUYwRjU5MTlFODNGNjE0MzgKKzoxMDUzMDAwMDM3NzNBRUUzRTMwOUU2N0Q4OEJGNkY0QUFEQUY4RTBCMUUKKzoxMDUzMTAwMEE2RkMzMUZBNDM3RUJDOTdERkNCMkVDRUZBODdCOTRBODIKKzoxMDUzMjAwMDVBQkU2RDg5ODgwQjZDOTIwNjY3OTM1REZBMDBCN0MzMEQKKzoxMDUzMzAwMEM3QjIzOEM5QjlFMkFBRDhERDNDREYzNjRBRjlCNkNFRTEKKzoxMDUzNDAwMDc5QjdGQkNGRTk1Nzg5RUU1MUU3Mzc4OTdCMjVGQzc3QTEKKzoxMDUzNTAwMDZDNEFDNEVGRDgzOEU5M0UxNENBQUZFQUI4MkE1NURGMjAKKzoxMDUzNjAwMDE3M0Q0NUY0RkZCNDY2REM5NUU5N0IwRkZCODQ1Q0Q4MDAKKzoxMDUzNzAwMDI0RkMzMTZCRkNCMUI5N0M3Q0FCRkVBOENFRTlGMUU5MzEKKzoxMDUzODAwMDk3RjNBRUFGODJGNUZDNTU1QkQ5MjQ4QzdGRUUxOEMxNDQKKzoxMDUzOTAwMDhGNUIxOUUwRjQ5NzNEMDAxNjBFRTg4MUZFRDc1RUYzQUYKKzoxMDUzQTAwMDYyM0VDQkQzMzI1Qjg1NzJBQUJFMkFFMTQ5NTYwOTNDRTQKKzoxMDUzQjAwMEMyRjhFNDhCQzFGODA3QzJERkY2QTA1Q0ZBNkFBMDkyREIKKzoxMDUzQzAwMEUwNUEzMTk1QzcwRDNBQUIxRUE0NzNBMDkwQ0VGNTBFRUUKKzoxMDUzRDAwMEYyMjdDQTc3NUYyODI2NjFEQzdCNzkwREQzMEY4OTc4QTUKKzoxMDUzRTAwMDRCMENGMDRGNzdFNzY1OTZDQUVCREY5RTRCN0UwRUYwRDUKKzoxMDUzRjAwMDBBQkY1NzgzQjk0OTkzQzVFRjRGOTRFMzM5RDFBNkJCOTAKKzoxMDU0MDAwMDQ1RkVBQzhDRjhFRTE0RjMwMERGRDIzQzA3OEFDNDM4QkEKKzoxMDU0MTAwMEY3NzFGQjFGRkQwQkVDNUYyRUU2MjlBRkZCRUVENzUwQkIKKzoxMDU0MjAwMDhGMTdFOTlDMkU1MkYwRjU3OTA4QkU1Njk5MTE3QzZBQzcKKzoxMDU0MzAwMEUyNTVGNDQzQjc0RjJBMzA5MDZFMEU4NEMyNkYzNzQxNjUKKzoxMDU0NDAwMDdERjkyMjk1RTJGMUU1MzUxQzhFMDNBRDMyRkQxRTkwMEIKKzoxMDU0NTAwMEJGNEUzQjQ4RjdDNzRDRDAxNzY5RjgzMkM0QkM0NTM1M0UKKzoxMDU0NjAwMDA5MDlDRkI1OEM1NkJFMkU2OEU3NDVCOTY4ODQwMTFFODAKKzoxMDU0NzAwMEE4MUI2MjVERTdFMDlGQTQxMUZDNDU5RTQxQ0MyRDNBM0MKKzoxMDU0ODAwMDg3ODc5NTM4MUVEMEVGQ0EzQURFQ0YxRkVBREI4MjcyREIKKzoxMDU0OTAwMDZDNzkxRDg3MUJGNDNCQzE1MzE0RDYwRUEyQkUyRjBBOTQKKzoxMDU0QTAwMEYxRjE5NjAzN0UwRTQ5MjlCOEIyMkRCOEVBNjRDQUJGNUQKKzoxMDU0QjAwMDJBQUFEMTBFQTIxRjlDMkRFMDVCMTlFNkYwRjRCRjdFNTQKKzoxMDU0QzAwMDZBNDBFMkUzMTkzODVFQjY4MDM3NUJBQzlGMTI3NjBCMTgKKzoxMDU0RDAwMDg0N0U4MEYxOUU3MjI1RUFGMTVFQ0VBOTI5Q0MzOEM0ODMKKzoxMDU0RTAwMDY3QTM3ODk2RjU3RTU3MkJFMDAxRjBFMzE3RjNCMERENjQKKzoxMDU0RjAwMDZFRTIyNzU4NjJFQzYzOTlGRjdFODg5MTE2QjdBOEQ4QjAKKzoxMDU1MDAwMEFERDlFQTdFQjE3RkFDOEIzRjI3M0Y4RTU0MjJBRkNCMjMKKzoxMDU1MTAwMEMyQUY1QjU5NjVFRkM3NkFEMkVBNjU3OEJGOENEM0ZCMkYKKzoxMDU1MjAwMEZBNkJGOTc5Qzc4MTA5REMzRTQyQkZFMzFDN0YyMzlERkEKKzoxMDU1MzAwMDRGMzExRUVCMEFFMjdCOERGNDVENDlCQjdERENFMkQ2ODgKKzoxMDU1NDAwMDgyRTkyODFGOEEwNzFFOUUyN0MzN0E4QUVFNjVCMjkyRDcKKzoxMDU1NTAwMDQzRjQyQzlEOTM3RjMwREZCN0Q3MjRFOEZFNkNGNjQwRjAKKzoxMDU1NjAwMDI0MEZFNTVENDk2QkRFNzRGQ0ZFNUJGNjQwOTRFQUQ5REUKKzoxMDU1NzAwMDAzQUQyNkNGM0YwMzE3MjYwRkYzRjVEMkU2Mjk0NTM5QjEKKzoxMDU1ODAwMENERjNFOTU4QUJENjg3NzJBRDM2MUQ0RTc4NUZGMjcyMTcKKzoxMDU1OTAwMENGNUNFQ0JGRjlFRTU3NDYyM0ZGMTYzOEZBN0I3MkI4QTIKKzoxMDU1QTAwMEZGNTBGQzMyQjQwQUUwRkNBN0Q3NjI3QjJCQkU5MzhEODAKKzoxMDU1QjAwMDEwRTc1MUY5MzI5NkM1M0U5MEM3NTA5Njg4RkMzQjRCOTgKKzoxMDU1QzAwMDVFNzQ0RTc4Njc1MkQ0MjdFODg3RjJGMTU4MjJERENFMTgKKzoxMDU1RDAwMDc3OTZEMDdFQkM2ODFGOTNDRURCRUUzNEI1MUIyOURFRjgKKzoxMDU1RTAwMDM0MTBFMEYxQTY4MEIwNTc3Qjk4QjE5RkY0N0IwRENGQ0IKKzoxMDU1RjAwMEY3RjBFMTczRDAxRjdEMzU0N0E3RDM3RUY2QjEzMEQyRTcKKzoxMDU2MDAwMDczNzFEQjlGRENFOUYyRkFFNjQwQTlCODA3OUQyMEJBODYKKzoxMDU2MTAwMEQ3NEFCMkU4N0MwRkY4OThCRTZGN0E0MDZEQTU3M0Q2NzIKKzoxMDU2MjAwMEJFMjI3RUFFNzk3NENFMkIxMkUyQjNFODM5OUVBNzZEMEUKKzoxMDU2MzAwMEQ5Q0JEMzZCMTIyMTdDREVGNTZBRjQzMkUyQ0YxMUVDQzgKKzoxMDU2NDAwMDRGQ0JERTc0QUVFNzkyRkEwNzQ5MUU4QzhEMzIyRjlFNDcKKzoxMDU2NTAwMEFGRjk1N0FCOTRDNzVBMTIwNUI4QUE1MDJFMDA0OTE3OTQKKzoxMDU2NjAwMDAyRkMzNUIxRjU0ODM3NDY5NEQ3OERENUEyNUMwNUU1RTcKKzoxMDU2NzAwMEQ1NjBERkFFMUIyOEZGQTUyQjM1RUVENjBBQjA2QkQxNjcKKzoxMDU2ODAwMDdFMUFEQ0VEQjkwMUVEOTU1NkIwNDYwQ0I0MTc0Rjc5OTIKKzoxMDU2OTAwMEYwN0IyQUREQUREM0YzMTFDRkNGNDQyQ0ZCMzIyMUUxRDcKKzoxMDU2QTAwMEY4NDUzRjM1Qzk1RUFDRDUzNTFERTMzMDEzREM4OUQxRjMKKzoxMDU2QjAwMEU5RTc3NDA3RTZCQzUzNERERjEzOUI3RjcxRjk2NDIzNjAKKzoxMDU2QzAwMEU5MTM4NDQ1NEVEMzIzRkQ1NTQ3NDlCRjNDRTExRjRGQTUKKzoxMDU2RDAwMDdBQzhEMjJCOTYxRUExMTE0MUJFREMyMkY4QThDQjQ4NzUKKzoxMDU2RTAwMDc4MjQ5MjU3QzBCQjAwRTcyRDI4NDc4MDhFRkQ0NTVDOEIKKzoxMDU2RjAwMDlFODMxQ0U2NzJDRUQyMjc3NzczQkQ2RkM5Q0YwQTMxNjUKKzoxMDU3MDAwMENFMkQyODZGQTE1Rjc3RUQxM0I5MzdBMDVDMTE3MkQ2NEIKKzoxMDU3MTAwMDFGMzI2NkUyRjk1Qzg1OTBBRjRDOEQ0OTM4REY4MTI5RjQKKzoxMDU3MjAwMEZDN0I5NTAxODczQ0FENjhFNUUzNzQ4NTE4RDExM0U4RUYKKzoxMDU3MzAwMEExODM0ODM3MDc4QTEyNzQ0RkZDNDBFQjUxMjlGRDlFMjQKKzoxMDU3NDAwMEE5QTVFRjAyQUQ0OTg2RkIzRkFFOEVDQkMxNzE0MkFFM0IKKzoxMDU3NTAwMDdFQzc2RjcwRkFGNDcwQjk3QTRFRUYwOTc5QkJENTNDMDkKKzoxMDU3NjAwMENBQzQ3NzYxMzNFNjYxRkRCREQwRTczRDE1ODdDODJGMTgKKzoxMDU3NzAwMEQ4NzZFQjI5QzJBNzE1MEYwRDg5Nzg2ODc3RDU1QkY0MjkKKzoxMDU3ODAwMDdFN0I5NERGMDNEODY1NEU5RjQzRjA0Nzk2NkI5NDdGRjIKKzoxMDU3OTAwMDVBNzM3NDRFMTlGQTFCNERDQjM1QjRFQjRFMDYwQUFDNTYKKzoxMDU3QTAwMEYzMkZFRjQyQjQyNzVCNTc5MUZERUIxM0ZCRjg1MDk4QjIKKzoxMDU3QjAwMDA5QkY1MzIzM0ZFQkJFQTVERjFFQzBGRTIxRjA4QjI0QTMKKzoxMDU3QzAwMDAzMUJGNTc5REM0OEU3RjgzRDA1QzQ3Nzc0OTAzQUZCOTQKKzoxMDU3RDAwMDZBMENGQTBFODQ3MzFEREYwQkYwRUZEMkZBQTNDOTgxQjUKKzoxMDU3RTAwMDcxQjRBRjMyNURFOUYxRDUzMEYyM0I5NzgzNUY4N0MzODcKKzoxMDU3RjAwMEVFNTZDM0RFMDlGMDdFNzc5M0FDQUY2N0E5RkVGRjJCQjAKKzoxMDU4MDAwMEMwRjNEMTI2RkFGOTNEODU5RDhCNEY2RkMxMzhERkNFQUQKKzoxMDU4MTAwMEE1RTIzQjY3MEVGOEVGNkJFQ0YzMjgzNDBGQzYwNDI4QzMKKzoxMDU4MjAwMDhGMzlFM0Y3RjZBQkZDNTlGQ0ZCMEIzNTdEMDM2OENGRjIKKzoxMDU4MzAwMDA3QUEzODVDMkYwNjBDOEVGNzQxOEVDNzlFODg0QzdDRDkKKzoxMDU4NDAwMEI0NkJCMERBOEJGQUNFNjkzNzNFOTJGREVFMjQ5RUQ3NjgKKzoxMDU4NTAwMDYyRDczNzE3QUExNzNCRTRGRTA0NzdERjc1MjRFRkJFNDMKKzoxMDU4NjAwMDI5OTNCQzYyOENDQjNCODlDOTA2RkVBRTQ2NEI4MEQzRTQKKzoxMDU4NzAwMDUzOTU5MEQ3MURBRUM0N0VDQzJCRTg3OEQ2QzdENjFCRTcKKzoxMDU4ODAwMDI5QkEyODEyNjM3NkI2Q0ExOTdGM0ZFRDUwNDBFMUZCNzIKKzoxMDU4OTAwMDNGN0NERkI5RkQyMEY2RkQ0OTgxODcwQkVEM0Y4NjU5M0UKKzoxMDU4QTAwMEQwOUVFRThCNkYxQTczMDdDQUYxNTZFRTNGRjcyNURFRDYKKzoxMDU4QjAwMEEyQkNBM0EyRDkwQkM5RUYzOTcyRjA1MkYyMDc4QUFBOEYKKzoxMDU4QzAwMDRDREJFRjZCNjY4RkUwQjc1NkU0NzhDRTFCMEYxODQ5QzAKKzoxMDU4RDAwMDFFRUY1QkRENDE3RUY2QkVDMUNDRjc2MjBBNzI3ODVFRDgKKzoxMDU4RTAwMDVBMUZDODRCRkNCRUM5NDhGM0VCMzk5Q0ZGRkUyOTIwNjgKKzoxMDU4RjAwMEU4NkVDRTNCRjRCRDhDMzQzREZCQjJEMEIzQTQ2RjhCQ0QKKzoxMDU5MDAwMDU1MTY1M0QyRjIxQzI2MDhGQzM5RjUyNzUzRTM5RTRCNUIKKzoxMDU5MTAwMDZCODhDRTA5N0ZGQkM0RjlDNTQzQTY0Qzc4QjdFODFDNTkKKzoxMDU5MjAwMENGMEYxMEFGQjAwRTUzRDAyMTlENkZGNEIwQjgwN0Y5NzAKKzoxMDU5MzAwMDI2RDZDNEYzM0M5QzcwNEZGMENCMTdCNUJFNjAwRUY3NzMKKzoxMDU5NDAwMDQzQ0VDRDI3RkNGNTg5N0UwRUY3Q0VEQUZCRTk5RTIzMDgKKzoxMDU5NTAwMENDMTc0MkZBOTA3RUYwMUZBN0U5M0VENEIzMkVGQTNENTEKKzoxMDU5NjAwMERCMTlDRkJBMTIxOEQzQkFGMzIwRkZCRDQ1Rjk0NTJGODIKKzoxMDU5NzAwMEMxRjlDRjg3RjlGN0Q1MTM3RTZFOEZGRDVBRTdCRjU3NzAKKzoxMDU5ODAwMEY0NTVGNzYwRjcxN0EwM0VGNEFDQzJDODlFOEM4M0UyRDIKKzoxMDU5OTAwMDAyN0EzRDJERTg5NTNEQzdFQjJCQkRCQzdBRTdDMUZFRjEKKzoxMDU5QTAwMDY1MzhERUFBRTc3ODFFRTY5RENGREY3NkUzMTdBMDdFOTYKKzoxMDU5QjAwMERCODA4QkVFMENEQ0Y5Rjg3QTZEMENENDZGOEY0QjdEQUQKKzoxMDU5QzAwMDU4RkZDRDc0NDZCRkY3MTlDQkQzMjhDRUY1OUJDMDYwRTYKKzoxMDU5RDAwMEMxMDJDMEY3MDdFQjNDQ0NCODBDRTNBNDgzMDVGMzAxOEMKKzoxMDU5RTAwMDBGNzdDNDlGOUU4OUZERUU3ODRBMEEyM0RCQ0U3OEY2QjYKKzoxMDU5RjAwMEYxNTc0NjAzNUM3NzdFNDNBMkZDQUZBRjFDQzlCNkQ5MTIKKzoxMDVBMDAwMDg1QTc2MTI5RDNFMEZEOUE4M0ZDNzcyMzZGNjMzRDMzM0IKKzoxMDVBMTAwMDExMUY3NzNFREU0QkJGN0Y2OEUxRjM4Mzc1OTVDQzQ4NUQKKzoxMDVBMjAwMEZCRERCMDNCQkZGMTM0RkQ5RUUxNURERjkyRThGNzE1OTEKKzoxMDVBMzAwMEVGOTJGOTNEQTI3RjdFREVCQkU4MzExRkFFNkZCRDc2RUYKKzoxMDVBNDAwMEE5MUZEN0I1NTlDMzc2QjdDNTVCQkU4QjI5NEQ3N0M0OUYKKzoxMDVBNTAwMDBGNkEzM0UxRkQxRDA3MEU2QTJCRDEyRjczQjM2NkQ0OTUKKzoxMDVBNjAwMDNGNUYzOTcyODU0REVFOUNERUE3OTA3RkIwMjZENzQzMEQKKzoxMDVBNzAwMEY3RUI5OUNGMENDRDlCMzA3QzlGM0Y1OEM3NkM3MEREMDYKKzoxMDVBODAwMDYxQzUwOUQ0QjgzNjM3QURCRDRCRTdGRUVGNTc4RTI4NTgKKzoxMDVBOTAwMEI2NzkyQzNCMjA3NjhDRUI4NUQ4REZGQTI5N0U2RUVEMkIKKzoxMDVBQTAwMERGMUFFMTc3NUJGQkI3QzYwQUM0QUI0MzkzMzNDMUQzQkMKKzoxMDVBQjAwMDhERkIwMUYwRjRBQ0QzQTlEQ0I5MkU0NEU1RUU3NTA2RkMKKzoxMDVBQzAwMEVERDM1RUM0MjM5NDVEMDJFRUMwNTQ1NjhGREZFNzBGMjIKKzoxMDVBRDAwMDk4M0NFRDM4QUZDOUFDQzdCQjY1NzkxMTVFMkY1ODEyNDEKKzoxMDVBRTAwMDI1M0Y2NDI0M0JDNjJBRjdCQUEyMkRFODQzNzZFRUU4QTgKKzoxMDVBRjAwMDlGQTU4MkREQjM1NzhCREU4RDkxMkZCREUzRDU1OTBENjgKKzoxMDVCMDAwMDUwRkY5QjlDQzhDNjFDOTIzNzYxMDNGOUNFRjJDRkJGRjEKKzoxMDVCMTAwMDlFQzNFNUVFQTZEMTFBRTE3QkVGRDJDOThGMjk5NkZGOEQKKzoxMDVCMjAwMDg1NzFCRkE1MkI5RjQwN0IwMkZBNkZDRjIxQkUwREQzOUQKKzoxMDVCMzAwMDc3QkE0NkVBNUZCMEFDQ0VENkJGNjBEOTJBQUJGRjFFQkIKKzoxMDVCNDAwMEVBRUYzOTdGRkZCRENCQUVCMUNGQkZFQzBFQUJGRjIzODkKKzoxMDVCNTAwMDA0QkZFRkZDRjAxNzM0NEZCNUNGREZCQzlBRkE3RkQ1MDYKKzoxMDVCNjAwMENERjc3NzI4RDc0M0Y5RjQxRERFNzBDMjQ1RkUzM0EzODUKKzoxMDVCNzAwMEVGNzNBODc5OTcxRUEyRUYyNzlEOEIzMzBEOUFBODY3MjQKKzoxMDVCODAwMDdENEZFNTU2QTMxQzRCRDFEMUY0NkZFMjNBRkNDMDVEQ0EKKzoxMDVCOTAwMEU5NzQ5NDUzOTc2NUUzQUI1QzMzQ0Y1NkNGOUYzREM2MTIKKzoxMDVCQTAwMEQ2N0U1NEE0Q0NGNkJFNzBEMUU1MEVCQUY0RTk5NDA3QzMKKzoxMDVCQjAwMENCQjgzRTM1MzFDRTA5NzA2QTYzRjhGNzlBRUFDNzc4RjgKKzoxMDVCQzAwMDY4N0RGN0JGRThBNUZBRkREN0YwRjVERDNGQzY0NzdDNTUKKzoxMDVCRDAwMDRDQkEwQkY2RkQ3RTJEN0E2NUJBN0QwQ0VCOTIzMEU0NjMKKzoxMDVCRTAwMEY1OEMxRTFEQzhBOTREN0Y2RUM4RjgzQzRCRTFCRjYzMDQKKzoxMDVCRjAwMDk3RTVFNkZBNzI3M0U5RTRDNzYyNjlGOERDNTIwQ0Y0REYKKzoxMDVDMDAwMDAwRjVCNzczMzQ1QjlDNjc3M0YxQ0E1MDRCREEzQzlCNjkKKzoxMDVDMTAwMDhBQjU0NTg3QUFGOEYzNUJEMDhFRDcyMzdGODdGMzdEQkIKKzoxMDVDMjAwMDU1MUJCQTE0RUQ1N0U3M0NFRUIyM0FEQjNDOUU5MjU1NTkKKzoxMDVDMzAwMDM0NEZEMjMxOEZCQjY0OTU2MzFFQ0ZBMjQzRTJCOTk4MzMKKzoxMDVDNDAwMEU3MTREMkM5NDhGMzZDMkVCQkM2QkU5RTkyM0I2ODlFMzkKKzoxMDVDNTAwMDVGRTMzQ0I1NjlFQjI5QjlDMzMxNEYxNjVGMEYzQzE3QzEKKzoxMDVDNjAwMEYzRkNFNkJDRUIyOTlGNkE1RkNGRDhENTM0Q0ZCRjNCQUUKKzoxMDVDNzAwMEU2NzE4RjVERUQ5OEM3NDdGM0UwNzM5Qzg3MTU3MTNGMjAKKzoxMDVDODAwMDRBNzMwRkFEQTRGREZGODE5NzYxMUM0ODczNDdGRjlBQ0IKKzoxMDVDOTAwMDJFQTlGQ0JEOTdFMkMyRDBDQUM0NzZGRjA3RkUyMjYzREMKKzoxMDVDQTAwMDk2MDA4MDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMkMKKzoxMDVDQjAwMDAwMEJFNTdEMDk3ODU0NDVCNjcwRERCRTRCNzcyN0RERDYKKzoxMDVDQzAwMDlEQ0VCRTEwQzIwRDI4OEI4NkQ4ODE5MDAxNUNBNjU5NEUKKzoxMDVDRDAwMEU0QTEyMjA2NTc3MDgxMEU0QkY2QTRBM0UyM0MxQzc1OEEKKzoxMDVDRTAwMEQyMTA0NTU0RDQ0NjUxODMwNkE2QzFBMEUwODAwNjI2QjIKKzoxMDVDRjAwMDY4ODA4MDBEQTg4MzMzMkU3MTlFRTMzMjBCMzY4ODA0QjIKKzoxMDVEMDAwMDIxMjYwREEyRTI5QkM1QkZDRUE5QkFFOTdCM0IxRDYwNEYKKzoxMDVEMTAwMERFQ0NGRkJGNzlFRjhGREY0QzUxQjdFQUQ2QUQzQUZCNEYKKzoxMDVEMjAwMDM5NzVBQTlBMEM0RjIyNjQxQzIxRkIxMjY4Mzk4NjkwOUYKKzoxMDVEMzAwMDZGRTMzQzE3Mzk2RDg0RkMwMDdGM0YyNkY0Q0Y0NzQ4NjIKKzoxMDVENDAwMDJBMkZEMzA4NTk0MEY4NUY2MEE5NDA4QTA4QTlCNUIwNDYKKzoxMDVENTAwMEVBRkM0RDMzNzIxNjQzRDkzNjI5QTNBNDkwRkU2M0E1RkQKKzoxMDVENjAwMERENzVCRTRBNDg3N0RCMjQ2NTVFNUU2NDNDQUQ1Q0UwNzEKKzoxMDVENzAwMDk3OEY4NDg2QjM3NzdGMjA5MUVGRjgyNjkyRTE3NUY0QjAKKzoxMDVEODAwMEZCNjUwOTRFOUM4RjU2M0Y1MjRGRUI2NjQyMEVENTEzNzIKKzoxMDVEOTAwMDJDM0I2NTMyQTc5ODNFM0Y1QzRGMjczMDRDM0ZERkM1MTgKKzoxMDVEQTAwMEY4REUxMTg5RkUzMzg1OTY0RDQyQzAyN0QwNzVBREY4RDcKKzoxMDVEQjAwMDQwMjY0M0YwMzMxRjBFQTdFQkI4OTEyRjYzODEzRjlFMUYKKzoxMDVEQzAwMDEwNEI2NDFFNUUzMzcxQzM3QkUxRURFNkMwM0EwMTlFNjkKKzoxMDVERDAwMEJBMDc5ODMyNjhEMTk4NEM4ODM2REZDMTg0RkM2OUY3REQKKzoxMDVERTAwMEQ1NkYwOTBFQUMwRTMwOEQyNUU0RTY2NTVCREU4NDZFNjIKKzoxMDVERjAwMDFGMDkyNTAzRUZBMEVCOUREOUJBNDIxRTQwRUJERDcyQ0YKKzoxMDVFMDAwMDY4QjZDQkE2MUI2N0E2N0MwOEQ2NkRBMUZGQzEzOEIzQzgKKzoxMDVFMTAwMDNDQjRBRUZCRkUyREU1QzZGQTZENDQ4QUQ0NzMwOUI5RDUKKzoxMDVFMjAwMEQwMzk5OEUzODM3RjU3MERDODgwQUYxQkU5OUEzMjI5OTgKKzoxMDVFMzAwMDBBNkY4MzcyMTQzNDNCMTE1RkIzOURFQzVENkQzRURFREYKKzoxMDVFNDAwMDdCNjQxMjg0Rjk0OEExNTQ5MjA3MkRBOUQ4Q0YwM0ZEOTEKKzoxMDVFNTAwMEQ0QkVGMzlCMkQ1QkRDQzUxNDlGQjNFRjE2MTE4RUQxMUUKKzoxMDVFNjAwMEYzMERFRDhFNzc5QkYyNjlEOUY4QjU0QzA2OUY3REZFNTgKKzoxMDVFNzAwMDczMTYxOURCODk4RjdENEY4M0FCNDYwNzM3Q0Q5Q0YwQjYKKzoxMDVFODAwMEU0NjExRDdEQ0NGMjVDRjFFNDYxMDM5QzY2MThFQUI3MjUKKzoxMDVFOTAwMEQ1Q0QzMkY0OUZCM0E4QzREMDVFRTJBQjMwQjRDRjVCQjMKKzoxMDVFQTAwMDc2QkJBMUJFQzA3RkI3QTE3RjU5RTM2MjQzN0I0NUUwQ0IKKzoxMDVFQjAwMDIxNDM3QkQ1ODYxNTg2N0E0RENCMkE0MzdGNkZEQjVBRUIKKzoxMDVFQzAwMDQzQkI2OUY3ODg2QjA4ODU2M0MzRUY0NDYyQTY3MEZDMjcKKzoxMDVFRDAwMEM2NzZFNEIxOEI1M0EwOTQ1QzAwRjdBM0Y1MTk0OEQ3QkMKKzoxMDVFRTAwMEM3RUE1NTJDNkI4MUY2QzYwMUZGOENCNjc4Mjg5RUJDOUMKKzoxMDVFRjAwMDcxRTE1MjkyNDhDODdERkU0Qjk2MkRCQjg0RDYxNURBQ0YKKzoxMDVGMDAwMDNFOUU1MkJCN0ZFMjMyNUYzNjIxQ0I5QzJBRDJCREQ4NjcKKzoxMDVGMTAwMEE4OTAyMDI1NTU4MTI0RjVEMjc1NThENEI1ODdDRUQyQzYKKzoxMDVGMjAwMERFMjg5MUUwRThCRUVENjIyOEY2RjMxRTIxM0MzNDhCQkEKKzoxMDVGMzAwMEFFQzNGN0E5OTlBQzE3RkFGMjc5ODQyRkM5MDA5MkQxQjAKKzoxMDVGNDAwMDdGN0I5Nzg5OTRCN0U4RTRDRTdBQTcwOUU3OTNFQTlDMjgKKzoxMDVGNTAwMEI4REU0OUU5QTE1QTYxRkM1RUJEMzU3MzIyNzE0MDNENEUKKzoxMDVGNjAwMDM4QjRDRTc2ODZFRkI1RDBDOUE0QzMzODhDNUYyQTAyODgKKzoxMDVGNzAwMDAzMjJGQzhCRjgxQjYyRTBGQjYxMDk5RTY2MjdGRDVFMzUKKzoxMDVGODAwMEQ3MUU3MTI2Q0M4MzA0RjdFNTVDMzcxMkJFRUY1RTBGOTcKKzoxMDVGOTAwMENGNDkxQjFEMjQ5M0YyNzdCREZCQzlDM0U3MTNGMjQ5MTgKKzoxMDVGQTAwMEZENTQyQzdGNUY1RkZDRTQ2MTk5OTAzRkQ2Q0ZDNEZBMkIKKzoxMDVGQjAwMDgxN0EwRjk2QTFGQTcyMkMwRkQ1RDc2MUZCRTFGQTQ1RDEKKzoxMDVGQzAwMDU4M0Y1MkVGQzNGMjY4RkQzMjJDOEZENUZCQjFCREFCMDkKKzoxMDVGRDAwMEJFMTFFQkRERjUwMTJDMzUzRUEwRjI2ODRFMzFGMDY5QzMKKzoxMDVGRTAwMDcxQjEwOUY4RjQwRTJCRTE3RkFDN0U5MkFGNDFBNEZGQjIKKzoxMDVGRjAwMEVFNDBCRTc2NjUwMDVGOUZCNDdEM0IzNDhCRDJEQkM5M0IKKzoxMDYwMDAwMDRGMjgzMUU1RjYwRkE3NjhCQUVCMUY3RjZFMTNFMEFGOUMKKzoxMDYwMTAwMDM0NDA4OTI3Qjk2RkJCMzU4RUUxQzc2QTIyNTMwOTk1OTEKKzoxMDYwMjAwMDNGMEY5REFGMTA4OTdFM0ZFRUY1MEJENzg5QjlGODVDMjUKKzoxMDYwMzAwMDAyRDJBMThBQzMzNUMzMUU2M0ZDRjMwOEUyRUI2Qzc4N0QKKzoxMDYwNDAwMEQyRkExRjc5RjZDRjQ1NzNGMzAwM0Y4MzkxNEVFMkY2MDMKKzoxMDYwNTAwMDg5NzUwQzZGQ0ZCQjAwNkY2NzgzOUZDNEY5MkIxQThFQjUKKzoxMDYwNjAwMEMyRUI3RkNBMDlEMUZFNUZBNTZBRjBFQ0M4MjFCNEJDQkYKKzoxMDYwNzAwMENFNTk3QzE0RThFMDY0QUIxOUQ3NzVCMjNEM0U0MDYwNjAKKzoxMDYwODAwMDBDNjcwQUQyNDVGRjcwNjNGM0E4REE2MEY1RUJFNTQzQ0QKKzoxMDYwOTAwMDRENEJBMkRGMjgyRjMyRkQ3QTc5NzE3MkZGRjMwRUUwQUIKKzoxMDYwQTAwMEZCM0IzMjQ0RkZFMUQxNDAxRjZFNEUxRjhDRUVCNEYxM0EKKzoxMDYwQjAwMDZCNUE3MkZEMzZDMzM4QzZGQTQ5QkYzMEI1MDVFNUJDMjgKKzoxMDYwQzAwMDlBNzBGREM4RkVFNzc5NDc4NjgyREYzOUI2NjE0ODAyREIKKzoxMDYwRDAwMDdDRjc1OEJEQzUwRkRGRTlBQTc3RkFEOTc3MzNGQzdBODgKKzoxMDYwRTAwMEJBQUM1RTE0RUYzRjlDMUM5OTVGN0ZFM0ZFQjNFNzQ3QjkKKzoxMDYwRjAwMDQ4MkJGOURDNDIxMEY0M0YwQ0U5QkY3RkJGRjg5MDRFMEIKKzoxMDYxMDAwMDI5QzU0MDFGRURGMkI3QTA3N0UyODY2QjdBNDdDMkJBODUKKzoxMDYxMTAwMDM2QUVCNzQ1RjQ5OTJGODJFNzlCMENERkEzRUZBOTQ3NzIKKzoxMDYxMjAwMDM0M0MwRDNFMTNERTI1NzI0NDVCMjc5NTkzMjNBOUVDODYKKzoxMDYxMzAwMDA2M0FBNUM0OEM3OEY2RDAxMTEzRTg3ODNEOTI2RDk5OTMKKzoxMDYxNDAwMDQwQkY2MzRFNTRCMUREMEIxRkEyRjQ1NDYzMDkyOTFFRjYKKzoxMDYxNTAwMDE1QzFERDAxNzZENkRDQjExQURGQUIzN0ZEODE5MkRDRUIKKzoxMDYxNjAwMDk3QkY5MUM5QzNEMEZFMTczQTNBNkQ5Nzc5RUI3QzUyMkQKKzoxMDYxNzAwMEVDMjBGNDdCNzM1QkFCQTY4MTlDRkNGMkQ1QUJCODlEQTUKKzoxMDYxODAwMEUyMkY4Mjc1N0Y0NTRDNTM4MTRGQkUyMkJGNzU4Q0Q2NUUKKzoxMDYxOTAwMEQ5NjVEMzEzMTUzNkJGNjU0QzNGRkJFODdGQjAzRTZBMjcKKzoxMDYxQTAwMEE3MTlGNDc1NTlBM0IxNUU0QUFFNEQwMzdFMjg1RDI5NDcKKzoxMDYxQjAwMDkzMDA5RDdCMDVFODdCNkRERDk0RUYyRjRCNjQ3NjVDNEYKKzoxMDYxQzAwMDE5QTk1QjBBNzZDQUMzMzI5OTA5Rjg5RUVCMjREMjAwNUEKKzoxMDYxRDAwMDJBMjc2QTVFNUI1RDU0NDJFQjM3MjQ5QTkwQUU4RTUxNUIKKzoxMDYxRTAwMEZCNEVBNTcyQTgyMjg5RDkzMTk1MjkwMUM1NEREQjNGMDcKKzoxMDYxRjAwMDZGMUQ3REUzQzUwNERFMEYyQzA1QjlFNkIzMTNENzdBMTYKKzoxMDYyMDAwMEQyMTdFRUYzOTYxOUU3NzdCNkY5NDdDRjk3OTAyNTM4NkUKKzoxMDYyMTAwMDVGNkQxRURBQjhEQTNDQzQwRDgyM0IxMEMzOUU5RDk3QjkKKzoxMDYyMjAwMDI4NDRFQzY0NUFERTk5NjhCNDVGMTc0MTVENjdERkRFOEQKKzoxMDYyMzAwMDE3NTU1RjEyNTVEN0U4NDRFNjc0NjI0RUY0MkM0QTRDNjkKKzoxMDYyNDAwMDA1QkEwODRGNDEzQjhENTBGQUM4OEJGNDUzMjJGREVFM0UKKzoxMDYyNTAwMDNCNTMzRjMzRjQxM0IxREY5MjMzRjVCMzQ2QzY3QjMwODMKKzoxMDYyNjAwMDU2QkY5QUQ3MzZCRkVBQTNGNDU0RjlDQTUzMEU0MkU1OTMKKzoxMDYyNzAwMEY5OTc5MjNGQ0Q0NTlGNTdBRjdGQzAwMTcwM0EyQUY5RjkKKzoxMDYyODAwMDFDODBFRjJGMDNFMkQ0NThGMERBREQwQjJGQjc0RDAwNUUKKzoxMDYyOTAwMDNGMDI0OTlCQzJGREE1NDdBNjgzOURGNEVEN0FEOTI5MEIKKzoxMDYyQTAwMEQyMkVERTBERTZBMDk5RDI2RjZENkJDNTM0OTI4RkY1QkMKKzoxMDYyQjAwMDgzQUNGRUUwMDkxMUVBNkQ0NjdDNTZCRUY4NTQ5QTZBM0EKKzoxMDYyQzAwMDQ3M0MzMDdCOUIwNEQxRUVBODZERkU2MjBBQzg3MTJGNUIKKzoxMDYyRDAwMDA5MjMxRDQ2QkYwN0RGM0Y5RDg0N0M1RkEyMjRGNDZEMjgKKzoxMDYyRTAwMEE3RjM0NDNCRDlDQkY5Q0NEQkZBQzgwOUQxMDFFNTE1QkEKKzoxMDYyRjAwMDlEQzA2N0RFMjgzQTJBRUZENTJGMjFBNTk4Q0VFNzk1RDUKKzoxMDYzMDAwMDQ0N0JDQTkxMEI2OUY1NDdFNDQ3MjAwRjM0Qjg5MDAwRUQKKzoxMDYzMTAwMEIzMkIxQTM2M0U5MzdGOTBDRUFCQUJGOTM3MEUyMTRGOUQKKzoxMDYzMjAwMDJGNDcxODNEOUU2Qzk5RjdGMzFENkFGRkYyQTY5QkZCNjEKKzoxMDYzMzAwMDQ1OTFGNzAyRjg5RURBQzZFQzIwRDJDRUNBNkEzOUU4NTcKKzoxMDYzNDAwMDAwQkJCMzdBQURFQ0EyOTQ0QUFBMzczRkZGQzJCM0UwRDgKKzoxMDYzNTAwMEFGN0Q2QTQ2N0ZBRDZBRjM5QjFGOERBN0Y1QUEyRDcyQUMKKzoxMDYzNjAwMENBMzRCNjFDOUI5MDE2QzE4Rjk3RkU2RkQxQTgwODNFMDkKKzoxMDYzNzAwMDJBN0ZGOUE2QTI4RTY0Q0ZFRjREOEFFMEE1NkFDQjFFRDQKKzoxMDYzODAwMDg1OENFQzBCQzc0OTJEN0I5NDkwMkQwNjdFNUEwRTRFQzIKKzoxMDYzOTAwMDAxQkJBNTYxRTM3NzBBRjg1RjVGRUUxNjQ4N0E2RURGMEUKKzoxMDYzQTAwMEY3Q0JEN0JFODk3QTExRTA4NEY4RTRGOEVBQzU1RjFGMUQKKzoxMDYzQjAwMEJDMDVBN0VGMjhDNDdFNEU5MDk3NjdDMzlCOUZDQkU5OEYKKzoxMDYzQzAwMDlBRDdFQzI0OTFDRUEzRkNGN0U2QzAzNEMwRTdDQjc3OTQKKzoxMDYzRDAwMDNBNjAzRDlENTIxREEzRjNENTBGQTRCOUU5RjdDQjY1RjMKKzoxMDYzRTAwMDVGOUExMzRCRjZCQzdDQ0Q1RDQ4N0Y2NTQyNUQ5QTEzODYKKzoxMDYzRjAwMEY5Qzk5RDY5NDJEOUVEQ0I4NDc1MkU2OEJBMDFENzU5ODgKKzoxMDY0MDAwMDRBM0M0ODg3RTVBQkM1RTIwMDJEQkY5MUM4RDQyRDMxODkKKzoxMDY0MTAwMEY4QTQyODg5RjE0OUU3M0E4QTVDQkFDRTRFQjBGQkMxQUMKKzoxMDY0MjAwMERFRkVBRDE4NTg4RkZFRTlFRDA0RTRGRjVEN0NDRDU0MkYKKzoxMDY0MzAwMDUzNjJGRDFCMEJDMzk3MkRDOUE0Rjk4QjE2MDNGRDM2QzAKKzoxMDY0NDAwMDNGRDgwMTc4M0EzNkQwOUQwRUYzQTQ3MEYwNzFCODA5QTgKKzoxMDY0NTAwMDNGRDA3MUM1MEYyRTRGNjc3ODIyQUE1NEM0REZBM0ZBMkMKKzoxMDY0NjAwMDYwMTIzQzg3RkUxREIyREI5QTZGNzg4RkNCNEZGNkZEMzIKKzoxMDY0NzAwMDg1RkNGQjc0REU3MUEwREYzQUQzQTg3RDFGNjM3RDczQkEKKzoxMDY0ODAwMDYxN0RBODE3QTk5RUQzRDE5OThFREYxOUZGMzczRkM0MkMKKzoxMDY0OTAwMEY4NURFM0ZGQzA4Q0E5RDA3RUVBNDNDNjQ3RjAxRUU4NTIKKzoxMDY0QTAwMDEzM0FBRjYwM0FCNkVGQjk1RTQwRjk2MDI2QzE1ODdDNDYKKzoxMDY0QjAwMERFMkM3MzNFMzdCNjdCMjlCRjQyOUM0MEEzMTMzQTdGNDQKKzoxMDY0QzAwMDQ5NDhEMEQzMEJGRDRFMTJFMjAxRkQ5NUQyOTVGNDdERTMKKzoxMDY0RDAwMEJEN0QwM0RGQzU3RTRBRTRCOTRFQUY5NDcxQjk1MDkwREIKKzoxMDY0RTAwMDQ0RTU0MTdDNDQxRTkwQTZENDczQjIyM0FCNjVFMjAzMUQKKzoxMDY0RjAwMDkzQjNGQTUzMzNGQUUzRDU5QkU1NjI1OEZGRjE0REZCQjIKKzoxMDY1MDAwMDNFQkE5OUQyRjlGMTE2OEQ2RjhENzIzNTlBNkZDQkI3NkQKKzoxMDY1MTAwMEFFMTc4MDRFQTNGOUY2NzgzOUQ1RTJCMUY4OTYzRThGRTIKKzoxMDY1MjAwMEM5QjdFNUExRkZBNzcyNTU4M0RGQUMyNEEzM0NBNUYyNTAKKzoxMDY1MzAwMDcxMTA5ODEwRkRDMTMxNUEzRTdFMDNGNjU2NkE1RkY5MUMKKzoxMDY1NDAwMDQ4RkYzRTI0NDU3REU5NTBBMzNGOERFRUE4MDUzNzA4NUUKKzoxMDY1NTAwMEU0N0EyRjdENkFGNEQ3NEI5RjFBRkQ0NUFGRDcwOEJGNjkKKzoxMDY1NjAwMEU4RjZDMUUwMjM1MTNBMjlERTRFMkQzQThBQ0ZFQTc2ODkKKzoxMDY1NzAwMDIxNjA0NjNFRjdCRDM1QTAxMEUxRTQ0NkY1NDZGQzZGQ0MKKzoxMDY1ODAwMDBENDhEMUQ3MDM1MUY1OTZBOEZFRUVBODdBNzE1NDdGMzUKKzoxMDY1OTAwMDRGNTRCRENFRDBCRkJBNkQ5RjQyMTBGRjQxNDMzRkYzNzEKKzoxMDY1QTAwMEEyRTdDOEU3MzFGQzQxNERGRjc4NUI0RjI4M0VBMDhCNDYKKzoxMDY1QjAwMEVDQjAwMjcyNEY1RTQyNEQzNzg4QUZFRDEyMzFCRUQ2NUQKKzoxMDY1QzAwMEEzODYxRDQ5RjRGOTAzNTZFNkE3RjUzODc5M0Q5MUQ1MjAKKzoxMDY1RDAwMEMzQTlDQTUyOTA3QkRBRjNCMDk1QTA3RkRFNTMxQzc2MzQKKzoxMDY1RTAwMDI0RUFGQ0ZGODNFREEyNDNBNUVEQTEwMDk5QUE4RjIzMjUKKzoxMDY1RjAwMDQ0RTZEMzgwRjgwRTkxRkVEQTU5RENCMDI3Q0U5MThGQjUKKzoxMDY2MDAwMERGOEJDQjA5MDBGRDVEMkVEQTcyMTY4MUJGRTcxNzVEQzcKKzoxMDY2MTAwMDk0N0NDOEZDQzUzNzM5MDhBNUIzOUVGNjIxRDdDQ0E0MTUKKzoxMDY2MjAwMENGMTdCQzJEODJCOTRERDFFMzk2MzIyOUREQ0NFMzc0NkUKKzoxMDY2MzAwMDdDOTRGODlFQkU4NEFFNkY1RTNCQjNDM0U3MkY4RjRENTQKKzoxMDY2NDAwMEY3OTVCQzdGQTk2REExMDJGMjk1REFEMTg3RjQ3MUQxREIKKzoxMDY2NTAwMDRBQjIxQ0U5QUVCQzI5RUE3OUZCNTVDODFGOTU1MUZDMkEKKzoxMDY2NjAwMEUxRTFGRUMzMkU4RDNGMEE0ODAxQ0ExNzQyOThGRkNCRDUKKzoxMDY2NzAwMEU1RjJFNTYyREUzNTMzMjkxRTdBRjY4QkM0QUM4MjNGNDMKKzoxMDY2ODAwMDJCOTJBNUIwQ0U0RDQyMDBFMjA1QzQ5NzhBN0M1NjRCQjIKKzoxMDY2OTAwMEMyMjgwRjM1Mzg3NTAxMUYwREVCNUY0RTc1NkRGQjUzMkEKKzoxMDY2QTAwMEQxM0Q0MDJGQUZGRTIxRkYzOTVBNzZCREZBRTlEMDlEOEEKKzoxMDY2QjAwMDUwN0ZFREUzOUMzRjkwQkVGRDI3RURGRTdFMzZFOEIzQjQKKzoxMDY2QzAwMDlFREQ2NjhDOEJGNUVDRkU1NUNFM0Q1MERGNjFDNkI4ODUKKzoxMDY2RDAwMDU4Q0YxMkIzMUJGOEMwQjdEQjFFMzgxRkRBMDczMkZGRTIKKzoxMDY2RTAwMEExNjFENzc3RjkyMUQ0QUZGNzIzREU4RTI2MzFGRkU1RkMKKzoxMDY2RjAwMDY0RkI5RjBGMDgyOTUwRDI1NTgxRkRCMDNCMUVGOUM4OUQKKzoxMDY3MDAwMEJCQzM4QUZFN0FDRkFFRUY4QTNDQjY3RkRFN0E2QTE1Q0IKKzoxMDY3MTAwMEUyNDE3QUI0OTM5OTVCODE3RTEzNTlGQ0Q4QkI3M0RDNTgKKzoxMDY3MjAwMEYzOEJFOUY3NkI1QUY3MjhGMzY4RkJBNEQ3RkY5QTBGQUUKKzoxMDY3MzAwMEYyQjM2NzJCQjM4QkJBRTVEMDFBRTIyMkU0RUJBNEIyMzIKKzoxMDY3NDAwMDg3NjQ4OEYzMDEzMzY1MTFGMjc4RjI4NjJCN0M3OUIxODYKKzoxMDY3NTAwMEUwQzJFMEQwNDNFMTAwRUJBMjcwMjkwN0I5REYxRjNDQTMKKzoxMDY3NjAwMEUyOTIxNUE0Rjc3RjNENzg5Qzk4Q0RFNERBOEYwOEM0QjcKKzoxMDY3NzAwMDg1MjI3MDExRENFQ0I5M0Q2MDExNzBGREVDRjlFRUVGOTMKKzoxMDY3ODAwMEYyNDFFRTFDNkY1OThDRjZDQUQ5RDYzRDIyRjk1Rjk1QkQKKzoxMDY3OTAwMDBFRkVBQkVCMTY4MkU3QjJFRUE5RkZCMkY4NjZGNEZGOEQKKzoxMDY3QTAwMDVFOTI4QUYzOENFNjgzQkU3NEZFREE0RkIwRkVCMkRERjEKKzoxMDY3QjAwMDg1RjMzRDQ3RkUyRkZGREY4NkY3QUQxNEVGOEVCM0UzODEKKzoxMDY3QzAwMEZEQzFGRkIxNzg3RjlCRTNEREVFMzQ4MzNDREJGNTU3MDEKKzoxMDY3RDAwMDhDQjM2QUVCM0ZEQkJBNUZGODFGQkE2RUNEOEVGRjk1QzQKKzoxMDY3RTAwMDQ5RkRCMDgwRjY3RjlCRjgzRjFDNEFFN0Q5OTRCREVGODYKKzoxMDY3RjAwMDgzMDJEQTNBNTEyMEM1QjFFQzkzOEY5Mjk5MUYzODUxMzgKKzoxMDY4MDAwMDMwQTFGRjQ3MTIwNUVFRkYzMUJGNjkwMEI3MjMwNjJDMDgKKzoxMDY4MTAwMDJDNDU3QjYzNDBGNkEzNjgzNzEwNDk1RDA5RkI3N0JGQzEKKzoxMDY4MjAwMENBOTlFNzdBMTg3QjhDRkFDNDAzNzVFN0E1QkM2RUY0QTUKKzoxMDY4MzAwMDFGOUYxMzg4NUJBMDM2RTg4MDlDQUJGNjgzRkQ5QTlENzIKKzoxMDY4NDAwMDJEQTI3RDRCNEJCNDZCREY3MDRDNjVDRkFCMTU4M0RGNTYKKzoxMDY4NTAwMDc0MDVEMUQ1RTlCQUE2QTQxOEZEQTJDOTdDQkNDQkM5RTAKKzoxMDY4NjAwMEUwMEYwQkU4RkMyRkI3QzhDRTAwMDVEMTE1MTMzQzEyODIKKzoxMDY4NzAwMEFDRTc4QTRDODFGODc1RkI0NzkzQTNGQ0E3QURENEM2NUYKKzoxMDY4ODAwMEQ0QzdEN0ZFNUVGODU5NTI5ODlGMzk1MTE4QkNCMjE4MzgKKzoxMDY4OTAwMEUwMzc1MEM0RjhFMTU5RTEwN0M2MUVDMkFCMjBGMDMwMjIKKzoxMDY4QTAwMEQ4NDU5MjhCQzEyRkE5QzY4NUYxNTdFRTU3QzM3NjMzRDEKKzoxMDY4QjAwMEQ4MkI5MjZENjkwN0YwQUQ0NEE4NUZDQ0U2OEZGRUI0OEIKKzoxMDY4QzAwMEU2MTdGNzA3NjdDMkZENkM4OTdGNTI4M0JCOTQyREJBMjgKKzoxMDY4RDAwMEFEQzZGMTEwMUUxQTNFRkU1RTNDNjhGOEZCNDdGMUYxQjIKKzoxMDY4RTAwMDdCQzBDNzk4MDgzRUIyNEYzOTI1RTBDRjQ5REMxRjk4REUKKzoxMDY4RjAwMDdDQUE0M0M0N0FCNjRCQzJGRDE3RUUwRjRDQjAyNTRBQjIKKzoxMDY5MDAwMEUwMEY1QzJBN0QyMDAyNUY5NjU5QjY1N0MyM0U4MkM1RDEKKzoxMDY5MTAwMDI1MjA1RDBGRUIzMkExQkY2MzI5MTQxMEVFQzMxQjI1QTgKKzoxMDY5MjAwMEFDN0Y2MDcyOEUwMTQzN0JGQUM1QUYxREJGOUI0MDNDQkMKKzoxMDY5MzAwMEQ5QUQzMEMzQkI5OEM1RjNGRkYyQzMwRjk3MTQ0MTVDQzgKKzoxMDY5NDAwMDg1RkQ5NUQxRkY1RDRERkRCMUY5NEQyNDE4NDdFMUI0QUEKKzoxMDY5NTAwMDQwMjIzRTQ4NzE1ODQwMTc3NUM4MTAwRjM2RDZFMUVGRjcKKzoxMDY5NjAwMEIyQjRDODM4NjdFQkRGOUYxQ0Y5Njc5N0FGNTFCOTc1QjAKKzoxMDY5NzAwMEU4N0M0MkI2NDNDOTgyRkQ5MkRFNkZGRTUxM0I4Mzk3QUQKKzoxMDY5ODAwMEY3MUQxMjE4OENGMTA2Qjc1OEFDREI2N0ZCRjcxNDI2MUQKKzoxMDY5OTAwMDNGNUVGQkUzRDZEMTEwM0Y5QkQwOTM5N0MwRTQ2OUExNDMKKzoxMDY5QTAwMDA5RThEMkNCRkQ4MjkzNDQ0RDgwN0M4NTkzRUQ0MzEyNjAKKzoxMDY5QjAwMDcwMUY3MUJGNjhGN0M0ODhEQjZDRTRGRUY0MkZFQTMxMDYKKzoxMDY5QzAwMEE4NEM3QTlBODk1RjA0QkY4OTg0MzE3RUVCNkJCNkM0ODgKKzoxMDY5RDAwMERDMEY5RTlCNjJFMjc0QzNGMTQ2RkZDNDIyRDhCNzYwMEQKKzoxMDY5RTAwMERGNUY0MDVGNEREMEUzQUQ2QkRBOTc1MjdFNUYzQ0MwMTYKKzoxMDY5RjAwMERGMjFEREZFQ0EzRjBBNUZGMERGMDFCRTFCQURBMTI5MkEKKzoxMDZBMDAwMEM1MzFFNEM3NDIwRUJGRTk3QkJGQzc3OEU3MDVFRDZCMzAKKzoxMDZBMTAwMDRENDBCRjE3MzQ5QjBDRkI5M0Q1MjlEQ0VGMUE0NTQ2M0MKKzoxMDZBMjAwMEMxQkNBNkVGQjVEQTBCMDEyRkZCNDU5Nzk1QUVDRkRCQzYKKzoxMDZBMzAwMDdFNDJGMUM0RDhFNzhBODYyNzhDMEY3MUY0OTc1MkQ4MkEKKzoxMDZBNDAwMEJFQzA0RUI5NjUxRUMwNzVFNzU3MTZFMkEzRjhEREFFQUQKKzoxMDZBNTAwMEY4QUI2MkNEMzMyNThEQzlCOTA1QTRFNUNFRkNEQzdGNEEKKzoxMDZBNjAwMDNERjg0RUU4QjEwNTI3ODI5RkQ5NEM3ODVDMjM5QUZFMDkKKzoxMDZBNzAwMDA4RDJGMUM5MEQyNDAwRkExNEZDNTI5MDBCMjczNzExRUIKKzoxMDZBODAwMEQ0RTcxNDI0OEY4MjVGNERGOUZEQzdGQTM4Q0RCMEI2MzQKKzoxMDZBOTAwMDJEQkYwMDNCQTBCNjVENzA5QTY4N0JBRDE0NTIyMDFFREUKKzoxMDZBQTAwMEVCNkQ0QjE0NDFFRjE2QThDNDhERkJDMzkyNzNFNEY1NTQKKzoxMDZBQjAwMDNBQkU3ODI5NDU0MkY4RUUxQkJGRjMxNkY4RUVENzVERDMKKzoxMDZBQzAwMDBBMDE3QkM0RkQ0NkQ4MDE3QUZCRUJGNkQxQzgwN0ZENkQKKzoxMDZBRDAwMEFERUI5N0Y1QTQ3MkIyMENFMzMwNzkxODREMEY3OTlCQUEKKzoxMDZBRTAwMEUyMENGNThCNDU0RjE2RjBENzc0NzM2OEExMkIwNkZFQTgKKzoxMDZBRjAwMEE2QTUzMjNBM0I2N0Y5MTZGOEZGNENCRTdEQThDOTM3MDgKKzoxMDZCMDAwMDhGNThBQ0UzQTM5NDU0NDZGNzNBRjk5NjFFNEJCRUREN0EKKzoxMDZCMTAwMDIxQThFOTAwRjczQjc2MEQ0OTA3QkNERUYxQjY5QzFBQzcKKzoxMDZCMjAwMDRCQkU2REFFNjdGQjdGQUY1MDdFODRCMkE3OTVDQUI3RjAKKzoxMDZCMzAwMDhCNzRGMkFEOTVDQUI3RENCRUVGRkRFRDVDRTU1QkUwQjIKKzoxMDZCNDAwMEJGODdGRjM2ODM3QzhCQjFERTQ0MEUzRjREQkVFNUI3NzkKKzoxMDZCNTAwMDFGNDRGOTk2REY2QTIyQUFDRTdFQjBBNDlFNERCRTA5REMKKzoxMDZCNjAwMEE5RDc4MzNEQkM1Rjc2QzVDN0EwOUZDRERDRkU3RTg1REYKKzoxMDZCNzAwMEU3RURDMTc3NDBDRUZENUIyQURCMkYzRDU3Mzk5Nzk5NzIKKzoxMDZCODAwMEM2RjhFNEFDNzJFRUJGMDlDRTlBOUNCQjYzMUI5NTczNEEKKzoxMDZCOTAwMEI5QjFFODkwQzlCOTNCQjY1MzM5MjcwMDNEMzIzOTc3Q0UKKzoxMDZCQTAwMEM3MkVDMkUyNkY1MUYyNkQ3ODFGRjk0NkIwN0Y2RDkwMkIKKzoxMDZCQjAwMEJERUY2RENCN0RFNjU2M0FERTI4QjdFQ0IyRDBGRUEzMzIKKzoxMDZCQzAwMDIyRjI2RThDNUVERUZENUJBQTg0NzBFRTIzRUZGNjlGRjAKKzoxMDZCRDAwMDlCQkNEQkM2RTUxRDk1NjM4MzQxQkU0NkQzODdBQjNEQjkKKzoxMDZCRTAwMENFNTBERjM5QUU3M0QzMkY4MTVGREUxNTcxN0ZGMTAzOTUKKzoxMDZCRjAwMDEzREIwNzdBNkY1QzY3MjFEMEQ3MkEzRTFGMkZBN0JGMTAKKzoxMDZDMDAwMEVFN0ExRjhFM0ZFOTBEQjZCRTlBNEQyQ0ZFNUREQkNBQjMKKzoxMDZDMTAwMEVDQzNEQTY2MzFBMEQyN0Y0RTE5RkZCRDAyRjNBRkQ4QzQKKzoxMDZDMjAwMDI1OTA3NDVBOUY2MUY2M0Y2RDAzMTlGQ0EyNENCODVGMjIKKzoxMDZDMzAwMDM0QUQ0MDQ3MEZGM0M3NTY2MTFDQkZDMUVBNTg0NzI4MUYKKzoxMDZDNDAwMDFGQ0Y5Nzg4MDVFMkY1NTVCNjI5NUY4MjFENUMzNTk2MDIKKzoxMDZDNTAwMEM1RjdBQkY4NzNDMkYzMDZCNDNDQzhEMkI2REJERjFBOTMKKzoxMDZDNjAwMDQwRkFFNjBGNEMzNzMzM0M0RTdGNUUwOEFDQ0Q4NUZDRDYKKzoxMDZDNzAwMDI1NjM3QjU1NTRGRUUzNjM3QzlEMzNDNDEwQzI4NUJDMDEKKzoxMDZDODAwMDJGQzZDQzYzNzgyQzFBMUVGQjM5M0NFOEZBMERGMDA4QUQKKzoxMDZDOTAwMDA4MzFFMTQxMzEzQUFEMjAyREIyRkU4QTc3NDM0QjIxRDQKKzoxMDZDQTAwMDlFNUZCMTRBQzA3RDVGMEQxRUQxRUJENEUwQTNDNUE3QTYKKzoxMDZDQjAwMEFCRjhGQkRFRjZEQjcxREYzRjdBRkQxQUZDRkFBQzVCNkEKKzoxMDZDQzAwMDgzNjdENEZBRkRBOTdDREZBQjgwOEM4NjdDMUE0QTBGREYKKzoxMDZDRDAwMDI4M0Y3Q0JGQTY3MEEwREYyOTlFNzA3RUJBNUUxRTNGNTMKKzoxMDZDRTAwMENERTEzMERBM0Y2MTUyMjYwMUI4OTEzQUEwOUZEMkM2NzkKKzoxMDZDRjAwMERCREZDQUE0RUIxRkYzODkzQTBBRDRFNEM1RTNDRDFFNTcKKzoxMDZEMDAwMEQ4NDdERDY4MERBMzdDRDNFOEFCNTNBMzc3M0VDRUNFNDYKKzoxMDZEMTAwMEFDQkE4OUU4QUZCNzA5NEVCMDJGQkM0MTJCQzJEMTRCRkEKKzoxMDZEMjAwMEU5Q0M0QUJCRUM1QkY1RUQxNDBFNDdBNzE5Rjk4QUVCRTkKKzoxMDZEMzAwMDFEMEE3NzEzRjg1MzlBMUVBMjcwMDdCRTE5REQ3RTAyNTIKKzoxMDZENDAwMEY3NzMwQjQ5MThGNzRCNkExQjA1NTc5MEFFQTNCNjhEMjYKKzoxMDZENTAwMEMxNEI5M0I3RjRDRkE2Qzc0NzBDN0E5NDYyRDEyMzgxNzUKKzoxMDZENjAwMDIwNzE1MTQ0MEY1NkYxN0VEM0NERkU4RjYwMUY2NjNBREQKKzoxMDZENzAwMEE1RjdCNTI0ODJDN0UxRjQzRkMwNjMzNDlFMzQ3ODlFMDIKKzoxMDZEODAwMDhEM0VCRkUwRjZDNzY2ODBBMzBERTAxNTY2NzY1NDkwOTEKKzoxMDZEOTAwMEVBMDU3QkE0REQyQkY5MEM3MDlDRjRFQzY5NDY1RkJCMjMKKzoxMDZEQTAwMDA0MTVGNjEzN0FFMTA0RjQ0QURCQzdCNDMzN0EwNUI4NjQKKzoxMDZEQjAwMEE5MDBGN0Y2MTIxMUVBQTUxNEJFQzlCOTdERDcwOUZCREYKKzoxMDZEQzAwMDk3N0FGRUFERDg3NTkwOERCRjVBNzA5MTE4RjRBQkFEMUYKKzoxMDZERDAwMEJCM0ZGQUZENDdFOUI2MzM4QTZFREZCMzg2REYxOTBEOTQKKzoxMDZERTAwMDc0QkI0QjYwNzE4NEY2NDRDM0JFQTMzOThERURCQjZGOTkKKzoxMDZERjAwMEI0NTJGQTg2RkRBRUI3NjVENzNBQjUyRjlGOUZFNkYwM0QKKzoxMDZFMDAwMDA0RkI1RkQ1QzVBNTQ2QzAwMjYwMkY3MDgzMDVGM0NGOTQKKzoxMDZFMTAwMDcwMUU4Mzk5N0RBOTk3QUY5QkFEMjRGNUZBQzJGRUM3N0EKKzoxMDZFMjAwMDU3QjgzRkQwOUY3REEzRDU0N0MyRjc0MEVFQjVEMUVGMEQKKzoxMDZFMzAwMDBEOEY3QzJGNUFCRTZCRkVGRUQ5RDY5NTlDRjY4RkFEN0EKKzoxMDZFNDAwMEFCMzc3RjkzNzRFMEZFOTMzOUQxNzM0RjBBQzY3RjU4RjYKKzoxMDZFNTAwMDdFRDI4RDNDM0Y4OUNFMDBFRDJDNURCRjhDRDQzMUZEQzAKKzoxMDZFNjAwMEY3MjMxOTE2RDRDMzc3RjJCQ0Y4Q0I0NTFCRjFEMTc1QzMKKzoxMDZFNzAwMDdDRUQ5NjkxNEVBOTk2RkVERDI1MjA5NzI3NTIzRDQyNDYKKzoxMDZFODAwMDhCQUZERjE5RjNGMUFERDgyRUUyN0VENDM1RUYyNkQ3RTQKKzoxMDZFOTAwMEMwM0VERDM1MjA4Q0U4RjM2QjBBMDRENEJGMUZDMDYwMTAKKzoxMDZFQTAwMEUzQzA4RUI1MTBCNzk5OTMzMDZEMUZGQkEzQzRDMEMzNjgKKzoxMDZFQjAwMEI0QkRBMEQ5M0Y0OUE1RkMzNDZBNDNBMDAxNEFEN0E0NzgKKzoxMDZFQzAwMDcwQ0E3QjAwQkYwOTIyMDFGODc1Qjg5MzI3ODFGRUJBMEEKKzoxMDZFRDAwMEYzMEI1MjIwQUFBODY3NzE5QzUxRkI0OTJBRjQxQkVGQkYKKzoxMDZFRTAwMDRFNDU3NzYwNUNFQkNBNDkxMDFGOURCMUNGNjYwMzNBRUYKKzoxMDZFRjAwMDFGREU2NDIyMUUxREZEOEUyNzgxMDZEODg3MUY3N0Q4Q0UKKzoxMDZGMDAwMDdEMURGMDVGMzlCNTE3MjBFRTVDREVCRUI2QzEwMUY1MjAKKzoxMDZGMTAwMDI2QzFBNUQyRjFCRDNFQ0YxNDA3OUREN0U2QzYxMzUzQjcKKzoxMDZGMjAwMDJFMDQzRUE0RkQ2MDE4NkYxM0VCRTc2RDE2NUM5MDJBRUIKKzoxMDZGMzAwMDVCREFCRTAyRjM3MTRBOUIwNUUyODRGRTAxODE1OEQ4RjgKKzoxMDZGNDAwMEI4MDEwQjFENzc3MzEzN0Q5RkQ2Q0JFMDdEMThCN0Y5ODEKKzoxMDZGNTAwMEM0ODdENzAxOUZCRjIzQjJGNzM3QjE3REVCNTJGQTlFQUEKKzoxMDZGNjAwMDBBRjREQTdDM0I4RTU3RDEyNDkwMEMzQTVFRjkyNjI2M0YKKzoxMDZGNzAwMEZGQ0JERjkxNUREMERFQkE2NzE1RUFCMTY5RjQ3Qjk5OEEKKzoxMDZGODAwMEI5MjBFRjgzOTNBMTRFNDYwQjRFQjBCNzQ5RjZDREM4NUEKKzoxMDZGOTAwMEQ3M0Q5Q0FGNDlENzRDMjYzNzA0NUVFNzdFODM2NjM3RTIKKzoxMDZGQTAwMEVENEQ2M0Y5QzFBNUFFQzU0QTMyMURFN0JEQjFBOUI5MjIKKzoxMDZGQjAwMDkwMjZFMDZEM0I4MUZCRDE4NzI5OUMzRDE0Q0UxRkYwQ0MKKzoxMDZGQzAwMDdDOEU3RDYzM0Y1NzQyM0FGREYzNTlEQTEwQTRDM0Y5MzIKKzoxMDZGRDAwMDZEMTMzMENGNjEwMTI5QzYzQzg3RTlFMzk4QkRGNkZFMDkKKzoxMDZGRTAwMEE1RDY4MDQwRTdGNUJFMUNDRTg2RTdGQjJFMzVBM0ZENzcKKzoxMDZGRjAwMERCQkQ1OUM2RkRFMkVFODEyMThDNEY3NzM2QzkwNEYyMjQKKzoxMDcwMDAwMDM1MUE5QTQ0OTQ4QjlEOUI5ODFFMTc1N0RGMzAyNTEzOTEKKzoxMDcwMTAwMEUwQjc1RTcwODFEQ0RDRDczNDQ5MDFCREQ2MTkxMEYwRDEKKzoxMDcwMjAwMEZENDlBQkVGNEE2MzdFMEM5Mzg3OUFERjU2RUFBQzMwOUEKKzoxMDcwMzAwMEU4OEY2OEY5QTZDOUJGMUEwRTg3NjgzOTU3QTNFOTk5N0UKKzoxMDcwNDAwMDI4Mzk1NzAzRkJDRDBFMjg4RENGQkRDNEM2RTQxRkQ4MDkKKzoxMDcwNTAwMEZEODBGN0UwRjc0OEJGQjVFRkM4MDRFQzdFRTFGM0FFODIKKzoxMDcwNjAwMDI5OThCNzA1N0E5M0I2OEY2QjE3RENCMENGNUZGRTg5OEUKKzoxMDcwNzAwMDM5ODBGNjZBQTA2NENFNEY0MTdFN0Y2QTI2ODIwQTc5MDMKKzoxMDcwODAwMEYwMTRFRTU0MkU4QzM1ODdGRkY4MjQ3REZFRTUwNzE2QUMKKzoxMDcwOTAwMEM4OTBBMTc0NTI4MjcwRDZGMjQ1MEJEN0IzRkM5NkMyNDkKKzoxMDcwQTAwMDBGNTZBNjk1MDIxQzI2MjdBMzlDMkQ2QjE0ODk0NzI3RjMKKzoxMDcwQjAwMDJGQkUxNERDRDdERENDRTRCMTczQkQ0RTFFMTUyQUZFMDUKKzoxMDcwQzAwMDUyRDA1RkNFNzQyNjA3RDVGNTMyRTQ4QzkwNkQ1QzNFQ0QKKzoxMDcwRDAwMDUxN0JEQTBENzY0M0M1RjYxNTY5MEFFREI3OTRFNzgzNUYKKzoxMDcwRTAwMDU0RUM1QTkxNDY0NTAzNjkwMEJENDVGQjU3Mjg2Q0ZDOUEKKzoxMDcwRjAwMDhBREQ4MjczQUQ2RTdDRUQ3RDZEM0M2RDFDNjVCQjcxNzAKKzoxMDcxMDAwMDlDMjFCQjc4RkQxQ0M3RDFFNkExN0RCRjNGN0I3Q0VDRjkKKzoxMDcxMTAwMDdGOUM1RTI5RDBGMUM2QkUyRjYyOTJGMkQ4Q0ZBNzBEMTgKKzoxMDcxMjAwMEQxRUY3NzY4QTUxNjdGMkRGQUQwNDREQzNBQjg4REZERjMKKzoxMDcxMzAwMDYzMUM3MUVCRThBMjc1MENFNTZGOEFCN0FCREI5ODNENzkKKzoxMDcxNDAwMEQ0M0FFNkEwNTI1Mzg4NzUyN0YwNzMyRDhGRDNENjRFQ0MKKzoxMDcxNTAwMDY2RkI1NkFEMDUxRkRDMEZGQzNEQUQ1MDQwM0EyMDNFQUUKKzoxMDcxNjAwMDhGOTI5QzgyNzY5MDBBRjFGMUIyNDJGNjdFMTk3RDFGRDEKKzoxMDcxNzAwMEY4QUU3NTE1RTM0MzJBMEY1NDkwMTdCNTREMkJBNjYwNTIKKzoxMDcxODAwMEZGNjY0MTg1RjE1QkQ3OTZBMDlFMkYxRjJCMTI2QzZGNzcKKzoxMDcxOTAwMDNFODg3NjQ3NzlEQkMxMTRFMDU3Q0E5RjJCNDFFRkQ2NzIKKzoxMDcxQTAwMDVFNjI3NjAyN0Y2ODdDQTdGMUYxRkIzMkNCMEYyMTE2N0QKKzoxMDcxQjAwMEU3NDgzODA3NTA5NkE2QzZFNDVGRjExREMyRkNENDREREYKKzoxMDcxQzAwMDMyRjI5RDc3MkNFM0NCRjczNzhCQzhDRkZCMkVCRDY5MEUKKzoxMDcxRDAwMDBBRjA2MUY3N0FBMTFGM0VBNjdDNUExOEUxNTM3MTM1NzcKKzoxMDcxRTAwMENCRDcyOURCQzhGQzk1N0Q0RDRDM0U3NEI2MzIzQjcxNDQKKzoxMDcxRjAwMEQyNkFGOTZBQTg5N0JEMkIxMzE2Rjc2MkY2RTBCOUYyQzYKKzoxMDcyMDAwMDczMUYzQjY1NDM2QzdFRUU4RjdGQTdDQjJEMUZERDQ5M0YKKzoxMDcyMTAwMEU3NzdDRENCNzRGRTZBMDQ1RTkzMkVCQkRCODE3MUZBRjcKKzoxMDcyMjAwMENCNjZFMTdBMzUzOTU0MkFCMTdDQTZGOUZFQzUyQ0RGNEMKKzoxMDcyMzAwMDU3NjI3OTZGN0ZGN0JDQTJFNkYxNjA5QTNEMjI0NzQ0MUUKKzoxMDcyNDAwMEEwRjc0NDk2MjdERDJDMjNCRDQ3RjNFMzNGQ0E0N0ZGNTEKKzoxMDcyNTAwMDJDQkVERUM2RTk0ODlCOEZCODhCQkQwRjc5NjU0MTBBMEQKKzoxMDcyNjAwMEM3NUY2RDdBMUVGMzVBQkY3QUU5RTA3NEMwNzNENTRFREEKKzoxMDcyNzAwMDRBQkY3NEJEREQ5QkVDMjQwODcyNEIwQUEwQkVBOTZDMEEKKzoxMDcyODAwMDE1MzE3RjlDNDhDMUEyRUJFQzdBRkU2NEY5NDk1NUFGRjkKKzoxMDcyOTAwMEQ4OTE2RTJBQjdCMkJDRDNDQTU3M0ZDRkM3N0M5MTI1Q0QKKzoxMDcyQTAwMDYxQ0NCQkYyQkRDNEVENEQ1RjI4MUZFOEJCNTI2Mjc5RDMKKzoxMDcyQjAwMDUyRDFGQzNFMjE5REQ5OUY1RERCRTM2N0MyM0E4NDBEMkMKKzoxMDcyQzAwMDdCNzBCRkI1QjJFNTI2MTlFOEFGNTc3RUE0Q0I1QTNGMTUKKzoxMDcyRDAwMERDQzdGNDUxRkE4NTdENzY5OERGOEM5MUZBRjkyRDQ2NUEKKzoxMDcyRTAwMDNDNzU2RDY0RkM1RkQ5MjYwN0FDMzBCRjBENkIzMTlFRDkKKzoxMDcyRjAwMEVEREQ3MDAyRjNFMzI3QkRCMjE5RTMwOERFMzZEMTk4NjUKKzoxMDczMDAwMDE3Qjk0MTBDOUEzMTdGNTMzQzY4NDZCRkM2OTg5RjU4QzUKKzoxMDczMTAwMERCNUE4M0ZCNkVCNTJEM0NGRjJGMkEyRkFFRUE5NTVEMUQKKzoxMDczMjAwMEFGRkEyODY4QUE3RUY5QTIwM0U0QzFCMThFRjUwRTgwRjcKKzoxMDczMzAwMDI3MUQwRkYzMEEyRjNCMjUxOUYyQTNGQUNGMDc3NjFCNUYKKzoxMDczNDAwMEYzMEQ1QjFFRTJGOTg2NTc3NzkyRkNCRUY5ODZDN0UwMjMKKzoxMDczNTAwMDFGQTA2RkQyQTNGMjM1MzcyNEYzRkNFRTYwNTE3MThDN0QKKzoxMDczNjAwMDc4N0VFRkI5OUZDRERGQUM4MTNDRjlBRUFEQzdEN0MwMTkKKzoxMDczNzAwMEZDQUJGRkY2RjUxQUM4NkYyMkJCQURBOEE3QkMyRkZENkEKKzoxMDczODAwMDBFRjM4QUI1RjcxNkE3MzM3QUVCREVGODIyRTY2NTc3QjcKKzoxMDczOTAwMDdGNkE0NjdGQTc3QjU3NjcwRUU0Qjc3NTZGRjkzRTBEOEUKKzoxMDczQTAwMEUyNzMwQjc3NUQ4RUYxQ0I4NURCMjZBNTkzMThGMjVFMzkKKzoxMDczQjAwMDJCODEzRTAzRTc5MDE3MUU4RDhGN0RBREZCMzAwRkVCQzkKKzoxMDczQzAwMEFCNEZDQzI4REY3QUYzNDc1QjZBNTg1RUFFQ0FGMzQ2MTAKKzoxMDczRDAwMDM3QzVDRUMzRDdGMjFDNkI1QkFGQkJFNjUyOTBEN0FEQkYKKzoxMDczRTAwMENDQkVFQkNEN0IzQzVCQkVFODg3MTRBRjE3OUQwM0ZFQTQKKzoxMDczRjAwMDM2RjFCQ0UwOTZBQjYzRTY4QjdFMDVGRkEwNzhGQTc5QTgKKzoxMDc0MDAwMEJBMzE1RkY0OUJENjA1M0Y3RjE2REE1QTkzRkJDRDE3NEUKKzoxMDc0MTAwMDBEOUUwM0RDQjQzQ0ZGRUE3NEY3NEJFOUMwNDc1QkUzMjUKKzoxMDc0MjAwMDdEMTkwQzZGODE2OTAyRDg4MURGRTRDMEY5ODhBMzcyRUQKKzoxMDc0MzAwMDE4RjM0MEMyQkJDQzRFQzg3QkFDRENGNTMxRjI0QkY3NDUKKzoxMDc0NDAwMEI2MEYzMERFNEE3ODlFN0QzN0U5RkQ2M0Y5RDAwMjVGRTIKKzoxMDc0NTAwMDY3QjM5REU1OTk3MkY4NDMxRUFBRUFDMEU3M0NERjk0NDIKKzoxMDc0NjAwMEQxQjE5Njg3REE1RkZFNjkyODlEOUYxRkU2RTcwRTZBMTUKKzoxMDc0NzAwMEE4REZDNEYyRDQyMzc5QTlDMjU4QzBENzQxNDM1RUFGNzQKKzoxMDc0ODAwMEI2RUVFOEYxOUM1QzhFNDZGMkFBNjNFN0Y5NkE3OTg0NkQKKzoxMDc0OTAwMDdERjFDNUY0OEE5NjM3RERCRDk2RTc1QkQzRTdEOUEzQzYKKzoxMDc0QTAwMDIwNEY4RUU5NzM2RjQwRjgzODE2N0VCNUJDRUEzRjQ0MzIKKzoxMDc0QjAwMEUxNTc1QjVGN0Y3Q0ExRjFFN0Q5RTZGRDVGODVDQkJCNDAKKzoxMDc0QzAwMEU5MkM5RUFEQzFBN0VCMkZCMUU1RjRCNzlDREZBOURGOTYKKzoxMDc0RDAwMEZBNERCQUNFQkY5REMzRkQ1NjBENkVEQTdDOTdCNjMwMUQKKzoxMDc0RTAwMEJCQTI2QjAzRjMxRkEyRjk5QkFFQzcxRDJCQ0Y1RUNBRDUKKzoxMDc0RjAwMDYwRjY2RjZEREI5RTdDOTA0MzVEN0JCNzczQkE2Mzc0RkYKKzoxMDc1MDAwMDVEQkJFOTIwQ0JEM0E1NzIzQkEwOTdEQjg0QzU5MUEzREIKKzoxMDc1MTAwMEM3NzNGMEYxQkNFREIxQzdGMzZFM0ExMTczQkM2MzkyNUYKKzoxMDc1MjAwMEZCMjY5OEZGQjEwRTY2NDcxRDZCMTFBNzA2NjI4QzdGODQKKzoxMDc1MzAwMDlBRUJBNURFNzVEQjE1Q0M5NzEyMUQ3MTY4NEYyREI0NDMKKzoxMDc1NDAwMDhGRkQyNDIxMDU0QTA1RjM3RTFBMTZGMzNDQTFGQjVDNEUKKzoxMDc1NTAwMDE5MDBFNzA2RkI5NTA0RTZGMzAwQzA0NzE3N0Y5MDlERUUKKzoxMDc1NjAwMDFFMDI3NjlDOUM1MTVDMjhBQTkxRjk2QUVENEE4QTg5OTAKKzoxMDc1NzAwMDA0RjRGODk3ODJEOTIwREYwRjE0NzRDQTMwREU2NzUxMDMKKzoxMDc1ODAwMDcxOTNDRjI0QjIzNDlEQ0VFQjMzOUZFMDVBQUNGNjZGQUIKKzoxMDc1OTAwMDc3NkI3NUNGQkRBMjIxQ0U1MTZCMEUxRjAwRkI5REJDM0EKKzoxMDc1QTAwMDZFQzVCOEI1QjhEQkVBQzNCOEQ5MUEyQkFFNzNERkI2NkYKKzoxMDc1QjAwMEVGNUUwMDc4NzVGRkRDNENEODNFMDIyNTBDMkExN0NBMTYKKzoxMDc1QzAwMDc4RkNBMjczREI3NzZCRkUwQzc2MjZCQzRDQkY1RkI2RjMKKzoxMDc1RDAwMDg2RjYwN0ZCN0E1MzNDRkEwMzNENUIxM0YyRDE5RTdDOUYKKzoxMDc1RTAwMEZEOUVFOTIwMzdDQTQwODc4MTlERjc0QTdBQTA4MThFQTcKKzoxMDc1RjAwMDc3MjQ5NUQ1OEY2QzFFODhFNzA5QUFCNkRBMzFERjcwM0IKKzoxMDc2MDAwMERGQjZENzZBNDFGRTc3QkYxMjBGREJEMUU0MkIzOUY0MjYKKzoxMDc2MTAwMDM3QTg3Qjc3MjY5MEI1MkFEQTgxQUE1RURGNTYxMDQ5MTMKKzoxMDc2MjAwMEQ1REI3OTU1NTAzN0U0QkYxMEY0RDMzMTFFNDdFOUI5QTMKKzoxMDc2MzAwMEFBMkQwMUNGOEZFOEZBNzE3RUY2NjVCMUYzMzJDMTJDMjUKKzoxMDc2NDAwMEUwM0I2QTRGMUFCRUEzQjU1RjlGMzE5ODlGRUYwREZGRDUKKzoxMDc2NTAwMDg0RERBRkMwRkE3Qjk1NzAyOUFCRkJCMzE4REY3NjYwOTEKKzoxMDc2NjAwMEZGMTI4RDVFNzk3QkRGNzE1OUZGMzkxOTgzMERGREI0RUYKKzoxMDc2NzAwMEY3NkJDREE0MkUxNjFGNTQ2NzA4RkM3Q0VGNUY4N0M1RkYKKzoxMDc2ODAwMEJBQ0YyMkM2RkNGMUY5NUQwMkYxOTlDMDBFRDg2MjBEQTUKKzoxMDc2OTAwMDQwNUNBMzVBMDkwRTg1RkNGNjU3MTVCNjNGNTJFRDA4MUIKKzoxMDc2QTAwMDBFODVGQ0Y2OUQ1Q0ZFNTVDN0QxM0E3RDlFQzVFNzAxNkYKKzoxMDc2QjAwMEZEQTE0RTJDQTE5NzAxREYzNUFGNTkwOUU0MjdENUJDQjgKKzoxMDc2QzAwMDZFNzcwMzlFNkI1RUZERUVDODczODU5MENGMTY4RjcxNEIKKzoxMDc2RDAwMEFCOUFEN0ZGMURGMTVGNjMwRUNFMDZGQTBGNkYzMTkzQTEKKzoxMDc2RTAwMDc1QjQ3RkQ3OTZCNzczQzA4RUU4OTI4MzM5NDk2N0Q4NEYKKzoxMDc2RjAwMEY3QTk2OTMxMUJGNkIxQjU3NTFDQUIwRjlDMDdFN0Q3MkQKKzoxMDc3MDAwMEI1NzM4Qjk1RkRDODhCNUQxOUNDMUU1RDkxRTE3RTNDRjgKKzoxMDc3MTAwMDAzRjlEQUU2NDQ3OTBERTM4OTMwNEVEQjEwRkRCOUU2NzIKKzoxMDc3MjAwMDRBMzVCNjFDNkJDQTkwMERFNzY4QzVDODM5QzUyNjE4MUUKKzoxMDc3MzAwMEY3MkIxMjVBOUE0NTUxNTIyMzg0NzFGRkJDNzJDMzg5QTgKKzoxMDc3NDAwMDkxRTAwRjdGRjZCMzBCNzE1RkVCMzMyNTNDMTJFNEY2NEIKKzoxMDc3NTAwMDY3MzlFMTkxN0E3OTdDQjRERUEyNEEzMkM2MjVCMEVDNzEKKzoxMDc3NjAwMDU5N0JBMjM0OEI0MEZFQTA3NTY2MkNGOUI0MzkyMzFFRDgKKzoxMDc3NzAwMEU3NTE3OTZGN0NDQ0YzQTAzQjM4QkRBRDA2MUE0QzY1NjAKKzoxMDc3ODAwMERGODUzODg0RjZERENGOTQ4MDAyRjNDOENCNTRCMUJERDkKKzoxMDc3OTAwMDMyM0JBMEMwRjNBQTBEREI4NzE4RUU5RDkwRkNEODhGN0EKKzoxMDc3QTAwMEYyMTdDMkEzODJBQzU0MEE2RDdERTU0QUM1MjI5QjJBMUEKKzoxMDc3QjAwMEUxRjk2OEU5M0Y3QkU5NEQ4Q0UwMDk4MzlDOTBBN0M2MUQKKzoxMDc3QzAwMDcxNDgzNTEzQzY0MUI1RjMwMDkyNUM2QzAxNzgyOUE0NjkKKzoxMDc3RDAwMEQ4Mjk4OTgwNkEzRkYyNjkxQzY5QzFEMjQ2Q0QxMUE2QjkKKzoxMDc3RTAwMDg3RUEwOEU0MTUxREU1RkJCNzY2NDk3RDFDRTQ4Nzc5NDcKKzoxMDc3RjAwMEJGODhGMkZDNkM3MEZCNTU4NjAzRTc2RDk2RUE4ODBCMzgKKzoxMDc4MDAwMEVEOEU2OTRFQjBBQjA1OUY4N0ZDNDBFOUExQTE3RUMzMTgKKzoxMDc4MTAwMDkwQzM2Q0ZGREYwREY5NzAwRUMyRTZFNzcwQkVGNTNENTgKKzoxMDc4MjAwMEQ4MDc5NENFRDBDRkY2NUQ0NjAyMERGNDdCOTJDMkVBMjMKKzoxMDc4MzAwMDY0MjIwOUM0REE4RkVGRTI3ODIwQkUzRDI4N0Y2QzI0RjEKKzoxMDc4NDAwMEYyMTdBNkY1Nzg5NDUwRjRCQjA5N0YxQjBCN0VBRUNERTIKKzoxMDc4NTAwMDQ5ODI2MDM3QzVEQjQ4MzA5RTk2QjYzQ0U5OTg5RTdGRUEKKzoxMDc4NjAwMDFEODRENTA3NTM3MjA2QjlFNkJDQzREODFFNEREN0M0RDMKKzoxMDc4NzAwMDI1OURFQTk1OEIyMkJFN0YyQUVBRkQ1MzY3N0E1RjgzQjYKKzoxMDc4ODAwMDg3RDczMjI0OTc5RDdGNjc3MDg5RTM2QkYwNEQ3NDlEOTUKKzoxMDc4OTAwMDBFMDEzQ0YyMURBRTA2QzBBMzEyM0U3MDBGQzAyM0RGRTYKKzoxMDc4QTAwMEM2RkNDNDk0NDZBMkY3RTM4NjY0MzI3OTc1QkZDMEY0N0YKKzoxMDc4QjAwMDI1RkQyQkI2RTlDNjIzNEUwQkM2NEYxRkUyNzBFRkVEMzgKKzoxMDc4QzAwMEFGQzU1NUZBRjRCNzRBMDBENzNFRkRBREZERjU4RjhCMzUKKzoxMDc4RDAwMEREREZERURGN0NFMjYzQ0YyN0IxOUZGMTdEQjFGQkQ3MzcKKzoxMDc4RTAwMEJFRkVGMTdCNDExNTFFMzJCOTIxMTE5Mzc2MEU3QTQ4MDYKKzoxMDc4RjAwMDI2Rjg1QjA5MDdEMjRBMTg1NUIwN0Q4MjI4QkNDNTAxMUQKKzoxMDc5MDAwMEZENTE3QTg4M0I0RkY3MUNGRTJGNEY4N0JGQzEzMUYwRTYKKzoxMDc5MTAwMDRGODI0ODc3MjU3QzNFQjQ2RUNCQTRGM0JCOTk0Rjc3NUEKKzoxMDc5MjAwMDcyMzNEQkM3QkM3NTIxOEIyM0REN0MyRjNCMkY3NEYwQkEKKzoxMDc5MzAwMDY3RUNEQ0ZFQUQ4RENDREZCRTc1MTFEQjM3MjNFNUVDRUIKKzoxMDc5NDAwMDFDOTA5M0ZFMDdERkJCMEQwNkExRjhCRUNEMkYwNDgyNkQKKzoxMDc5NTAwMEI5NzAwRjRFOTRGRERBN0JERkNFNUQxMkY0MkY4OThBNjkKKzoxMDc5NjAwMEM3NjhGNEE0OUQ1QjlBQzdFREVCNUM0RTlGMEI0OEQ4QUIKKzoxMDc5NzAwMDBFN0MxRjdEOEVCRTM1ODNFNUE1NTE3N0NDMERFQkJCMEMKKzoxMDc5ODAwMDg1QUY0RkQzMDNCRTE1NjQzOERDMEIyMDlBRTI1Q0IwQTAKKzoxMDc5OTAwMDNGMjJGMjczQUJDNEExQjBCQ0U1RUI5MzBDRjJFN0U0NzkKKzoxMDc5QTAwMDcwMzUwMUY0MUQ3OTgzM0ZFN0Y3MTFERDcxODU5QUFFREIKKzoxMDc5QjAwMDNGRTcyNTlEOEVDN0ZCNDcxQTY0NTcwNkM4NDVGOUY0NzMKKzoxMDc5QzAwMDU1NDRBNTdDQTE5QzFFNDI1NEREMzkzNDZBREYyMUIzQTUKKzoxMDc5RDAwMENCNEU4MjcxMUNDOTU5NENDQUMwMkU0Q0U0NzQ5NjcyQUQKKzoxMDc5RTAwMDY1QUYxREY2M0U4NUNCMUQyQjU0M0MwNzdCNTMyNkQzM0MKKzoxMDc5RjAwMDJGMEY2NzE1MkYwMEJBMTAxRDYzNUQxRTVCNUZCQ0ZBNjkKKzoxMDdBMDAwMEI2QjFGNTM1QzBGQTcyRkJDRUJCNDE3MUI5RDAwRUJEMkYKKzoxMDdBMTAwMDkyNUExMDE4RUY3MTU5NjAzRUEyNTlGRDU4MDVGRUZDQUMKKzoxMDdBMjAwMDhENENDMEZGRUYwQjA3ODZDRjkzMjk0OTAxQzg3Rjk5ODIKKzoxMDdBMzAwMEVGNzhGODAwRDBFREYyN0EyN0VFQTMyREFCMUY4RUU1OUMKKzoxMDdBNDAwMEMzRjUxOTY4ODcyRUFENzc2MUE5QzFDNUUyRjJCQjQ1QzAKKzoxMDdBNTAwMDBBNjdDQjc5NkMzQzhCRDNDM0VDMENBQTg3MjBGRjQyMUUKKzoxMDdBNjAwMDcyRDYwNUExNkVDOUFFMjM2MEZGNUE3QkUxRTM0N0Y4RTkKKzoxMDdBNzAwMDI4QkQ3NTBGRDZDRDUwQTdBNURDMzgwREUxNEJERjI3MEIKKzoxMDdBODAwMDY1MTA0N0NERjIyQzA3Rjg1OEQ1MEI4OEFBQTMwQjczQzUKKzoxMDdBOTAwMEM2Mjg0M0JEMEZEQzM0RkFEOENDRTBGN0E4QzBFODIzRjEKKzoxMDdBQTAwMDFBN0U4RkNBMUQyQUVDM0YzRjdBNDVFRkJEMzYwODNGNEMKKzoxMDdBQjAwMDZBRUUzM0Y4RkQ5QUVEQ0ZGNTBCM0Y2NzEyREFCM0YzQjgKKzoxMDdBQzAwMDhCOTZDRTZFQTA4RjFFRTFGQjkwMEZENjhGNDU3ODNEMzIKKzoxMDdBRDAwMDA0Nzk1REMzQzAzRjcwNjMyOTAyRkMyODFEOTlGMzdDQzMKKzoxMDdBRTAwMDQ0QTRFRjlCNTUzNjY3QjNBREQ4NkQyQTY0QjQwQkYwNTAKKzoxMDdBRjAwMDEzNkQwQzlFRTY4QzNBREM4RkIzRDgxOEJDNDQ5QjBGRjgKKzoxMDdCMDAwMEUxMjJEQjE4QkM0NDFCQTMzNzg1RDcyNTgwREY2ODdDQzYKKzoxMDdCMTAwMDFGOUY1M0Y4QjU2NjhFMDEzQzhDMzdDMDRCNDk5OTc4NEUKKzoxMDdCMjAwMDZFRjA1QjQ1RTE0N0U3OTFDMkY5MkIxQTBFMjk3MDRFQzIKKzoxMDdCMzAwMDIxMkZDMjU3RkREOTc1NEZEMUY1ODMxRTdGODZDMjA3MEQKKzoxMDdCNDAwMENBRDQ3RUZDQzdENDJDMjY0NzUzNEM3NTdCNjQ4MDQ3MkYKKzoxMDdCNTAwMDEyRTFGQUM1NDdCMjhCMDg0QjU1ODRCRjBDMUY1MUExRTcKKzoxMDdCNjAwMDJFQjA3OTkwNjYyMzVFNDVBNzE0NzVFRjlCRkEwQ0QwNzIKKzoxMDdCNzAwMEMxQ0FCNzY1MTNFQzkzOEE4QkFFMzI5QzI3MTU2N0JBREUKKzoxMDdCODAwMDEzNTU4NEE3NDcwMEZERkM0OEJEOEFGODVCMDE3ODFDQUIKKzoxMDdCOTAwMDA2RkE5MUY5NjMwRjcwN0MzRTA4N0M4MkY4NjVGQ0YxNkYKKzoxMDdCQTAwMDI4RTc5N0M3Mzk5RjM0QjhEOEY5ODlFNTUzNTk1RTU2MDUKKzoxMDdCQjAwMDRBODE4OURGODcxNjI0RkFCQ0E3NDQ1NzBCNTFFOEJDRDkKKzoxMDdCQzAwMEQwQzY1NkIxMENBMjlERjE4OTM5NzAzRTdEMkYzRThGRjMKKzoxMDdCRDAwMEI4ODE0RTEyM0ZCOTNCODA2QjI1QzU5OTYwMTcyNTcyNUQKKzoxMDdCRTAwMEZCOTc1Q0EyMjZDRUMyODNCNDQxODlGOTIxNTQxNEEyMkEKKzoxMDdCRjAwMDVGRDM2MThBNzUwRjU2ODM2QkFGMDVFMkE2RkRDRDY3MzMKKzoxMDdDMDAwMENGOEM1NzkxMkU0QjJGQzJGNDYwOTJFQzI5OUVCNTgwRjkKKzoxMDdDMTAwMEQ2NkQ4REYxMTgxRjhDNzc3OThBMUUwMDNFNkZCNDIzQzQKKzoxMDdDMjAwMDlEREFFOEZDQ0I3NDc4OEZFRjA3QUZDRjY2NUQ2MUNBNTEKKzoxMDdDMzAwMEEyNzQyODgyRDE0NkYxRkI0NEUzMTAyQkMwRjkyOUI5ODQKKzoxMDdDNDAwMDM4MTNFNEVCNTM1Q0NGNTIxQ0E4RkE3REE4MkUyRTI3RTQKKzoxMDdDNTAwMDFEODUxNzE4RkNEOTk1QjIxQkRGNzM1RTYyOTQwMzJCNDgKKzoxMDdDNjAwMEI5REM0RDlBNkNBNDc3NERFRTdFRDQyQjc3M0RBOTMwQ0MKKzoxMDdDNzAwMDlGQjREMzkzOTExRjUzQUU4RDJEN0YxQjY0QzUwN0Y3MUYKKzoxMDdDODAwMDBBMzQ4QzY0RkNFRTJCNTFEMEZFOEIyMTBGMzBBRTdEN0MKKzoxMDdDOTAwMEQyMzM3NDFEQzg1MzhEQkU5NjEwMjY3RjdDMjRDRTg1QUEKKzoxMDdDQTAwMEZBODhERkEzQTNEOUM3Q0JFMEJFNDEyRTY3QTExNENGQ0EKKzoxMDdDQjAwMDUzOTA2RUQyNkUzNTYxN0VERTcyN0U1RkQ2NjM5NEJFNjcKKzoxMDdDQzAwMEEwRjQ1M0ZBODJGMkQyMkNCNjlGQjFDNDMyMEFFRjZERkYKKzoxMDdDRDAwMDZCQjA5OTUwNUU0ODlGOUEwMzM2QjA1N0Y3OEM3MzQyNDkKKzoxMDdDRTAwMDFDNDE5MjVEMUQ2RTg4MDdEQUE1OTY3NTA0RkExNTVBMzcKKzoxMDdDRjAwMEUwM0UwOTIxQjFEMDA5NzRGMEFEN0RGRUEwMzNFNUUxOEQKKzoxMDdEMDAwMDUxNzQwQTQwNDdDRTk0NjI3MjI4MEY3NzBGRjA1Q0IzMkIKKzoxMDdEMTAwMEVDQkM5NjQwNUNGMTk5OTQzQTJCQzAyRDJGOEJGOTVEMDkKKzoxMDdEMjAwMDhEMjU0NTA4NDcwQURGODk1OUE5OTE3MUQyNjc1RUQ5MjcKKzoxMDdEMzAwMDdCREYxNjBDRkI0QzNGRTdBM0E3Njc3MTNCM0FEQjQ3QTEKKzoxMDdENDAwMENFRDNGMTdCQTNDMEVEMzBENTQ3ODZFQkY4N0VDOUY5RTEKKzoxMDdENTAwMDUzMDhFQzJCRjVFNUY3N0VFNEQ5N0EyNkNGRUUxNzYyQ0YKKzoxMDdENjAwMENCMzNDREZFRDRFNDk5MUMyNTI3QjQ3MkU5QTBBOTg2QjMKKzoxMDdENzAwMEYzNUQ0QThBMEI2ODE3NEE5Rjg5QTI0OEYyNURGNEU4Q0UKKzoxMDdEODAwMDJEODkwODg3NzkwMDA3OTI3MTY1QUY1RkZCRTNDMTYwQjkKKzoxMDdEOTAwMDU3MTZDNUE0Qjc2ODM5MzZCRjU3QUZCQkQzMDA0RjQ3OTYKKzoxMDdEQTAwMDY1MzU3RDE2RDBEM0RCRkRFOTc1NzcyOUQyQTE3RjgwQkIKKzoxMDdEQjAwMDBBN0E2OUNGMTM1NzYxNUNFN0YwMTM3NjE1RTQ1MEQ5NUUKKzoxMDdEQzAwMEU5ODc1MDNGOTQ5RTFFODc2NTc5RTMxNUE4Q0Y4NTI3RTQKKzoxMDdERDAwMEFGMkUwMjdBRTg2Q0JBM0NGRjUzODhGM0Y4RURBOEI3RUYKKzoxMDdERTAwMDNCMUIyNzBEQzVGRDQ4N0ZCQzBBRjkxRDlEOERCNEJEMDkKKzoxMDdERjAwMDMwRDIwRUY5RTJBMjJFNUY4MDQwRjQ1RDc3RkU5QjE0MzQKKzoxMDdFMDAwMEFBNjg5NzZBRjc5RTUxQkZDRTMxMUVFMjQyQUI0NTNDNEQKKzoxMDdFMTAwMEQ3NTRGQUE0REQwREY2Njc3RkY0NTdEQTE0M0IxRTAwNDEKKzoxMDdFMjAwMEJBMTZFMkFFRjQ4M0MzQzE4RURFRTMxODFGMEVEMjcxMjAKKzoxMDdFMzAwMEU3QUY2M0ZCMDgwRDhBRkI0ODEwRUNBNjI3QUNCODBGMzAKKzoxMDdFNDAwMEQ5OTAxNEZCNUU5MDA1NTk5NzJGMDczOUIwMjBDQkZERDAKKzoxMDdFNTAwMDE0RTJDOUM2RUUyOUVEOUYxRkQ4Rjc4RkMwMjYzM0VDNzgKKzoxMDdFNjAwMDYzM0RDQkVGNDc5MTNDOEUxOTg2N0QzNkI2OEY3NTg0ODYKKzoxMDdFNzAwMEM3NTk4OEE1OUZGNjM4REVBRUY2RDNFRTYwRjkyMkM0NjYKKzoxMDdFODAwMDE5QkI1REYzMzNFMjIzN0U0NjBCQUNBM0E2RjFGOEQyMTcKKzoxMDdFOTAwMDRGMTE1RURDQ0ZFMEYzM0UyQUIzNzkxRjdEQzExQzU4NDEKKzoxMDdFQTAwMDEyODNGRThGRjJGQzk0MEE4MUMxNTdFMzgzQTNCREY2Q0YKKzoxMDdFQjAwMDkxMDdFRkMzODlBNjUzNjFERDg4NjdDNkQxNzFCRkRFMjQKKzoxMDdFQzAwMDJGQTNERUE4QTZGNDg1NzRCNTZFMUNFNkM3MEI0RjhDRjUKKzoxMDdFRDAwMDdCMUNGMjg2NEZCRDIzNjI3QkU1NjkyQkI2NzdEREU3MUQKKzoxMDdFRTAwMDdBMDZGMjlFQzJFRkNBMDRFNEQzQTlGRDk3MjdCMDM4MDAKKzoxMDdFRjAwMDkxMzE4RTdEREIwMDI2MTcwRTcxRjk1MDdBRkExMUE0QUMKKzoxMDdGMDAwMERGNUUzQUYxMkY1MDgwRkY0QTRGM0ZDNkU4N0I4MzgwMDcKKzoxMDdGMTAwMEY3NTYxMjVGRjVCQjEzQ0VFM0Y0MzkxRURFQUZCODdBMjUKKzoxMDdGMjAwMDA5QzBGQjEyM0ZFRTkzOTRBRDM3QkJDMDFFODhDNkYzNjkKKzoxMDdGMzAwMEExMkNENTEwRjcyODBCMkRDNzcxMDlCNUJGNTI3NEZCQzIKKzoxMDdGNDAwMEU5NDc3OTlFNzFEOTY5NzY1RjIxNzFGQTQ4MDZGMDAzOTUKKzoxMDdGNTAwMDk3NEYxMTNBMzZERTQzREI2NThEMURBNzNGQzlFRDlGNzQKKzoxMDdGNjAwMEQyRDMxNzFCRkM4Q0M4RkEyRUMzRTdBNTVDRkY5Nzg1RkMKKzoxMDdGNzAwMEM2NjEzREIyOUU2N0M2QzU1QTRGNjQxRDk3NjBGRkFFOEQKKzoxMDdGODAwMEM0RDhERkNGRTQ3MDNFNTI1RjRFREM1NEJFOTUyQkFDQkMKKzoxMDdGOTAwMDVGQTlGRjJFMDVFNDRFNjk1MzYyOTJBMDVCNTc1OTYzQjcKKzoxMDdGQTAwMDk1MjFDRkEzQUNBOTQ0OTlBQjFCMzc4Mjg3QTVFRjRFOEYKKzoxMDdGQjAwMDkwMjI3OEM4N0M2RUYxRDU0QjZDNjAxNzE0Q0IwMzgwOEYKKzoxMDdGQzAwMDlGRDY1NTE0RkQ1NDg1RjE5ODdDRkE1MkY2RTc4MEJDOTMKKzoxMDdGRDAwMEVFNkNCQ0QzMTFFQkRDNDRFNjgwMjhGQzM0NzJGQzUwMjAKKzoxMDdGRTAwMEJCQkE1MDg3MUYwRDJGRDFFRjFGNTk1QjU2RjQ1Mzg4MzIKKzoxMDdGRjAwMDQ3QUY2MkI3OTBGNDJGN0ZBMkYwOTYxQjFCNkVBMzdBNTcKKzoxMDgwMDAwMEUxMzYxQ0YzOERDRTBFQjcwQjBENzk0NTdERTBDNkYxNDAKKzoxMDgwMTAwMEFCQzE0NTdCNEVFREE4MEIwNzhDODFFRjExNzY3RUE3OTcKKzoxMDgwMjAwMDkxRTFGRjZDRjA4QTdDOTdFMzdGNDJFQzc1Q0NFQzVEQ0MKKzoxMDgwMzAwMEM3MjJFMkEzOEMzQUZGQUNFQkI4ODdGODJDNjc1ODg3Q0QKKzoxMDgwNDAwMDg2N0ZGMjgyMDFGRjMzOUY1QjhCN0NBOEUxN0JGRURFQTMKKzoxMDgwNTAwMDU1NDhCRkYzMjkzRkMyN0U3RkE3RkYyRTQ3QUNGQ0EyNDUKKzoxMDgwNjAwMDk5RkRFMUZEM0MxRkM5MkJGQUJGODdGNzJGNjU1RjBFMTUKKzoxMDgwNzAwMEU0OTVGOTU2NThEMTFGMzlCQUVFOTExQzNEOUMxNzY0MEUKKzoxMDgwODAwMDREQjgwREYwNDI5QTUzQ0Y0OTdGRjgyNkJBRjY4MzdGNTgKKzoxMDgwOTAwMEU5N0I0MkM2NzhEQTk2MkM0RjE5QkM1RkNFRkRGMEZCMjcKKzoxMDgwQTAwMDEzQTcwQzhENjUxRjNDNTBCRjdGMDRDNEU5MUFFQTNCM0YKKzoxMDgwQjAwMEIwOTRCOTdENDlDMEJFQ0M0NTdCQzkxREVCN0VBRjY1OTAKKzoxMDgwQzAwMDAzOTg1Qzc5QTBCRTgzQzUzRDJEM0VFMkQ0OUYyNzI2NTAKKzoxMDgwRDAwMENDN0VGQTRGQzJFMjM1REE3QjhBRUM3MTQyRkM1NEUxODUKKzoxMDgwRTAwMEU3OUQ2NUM5QjMyQ0I3MTBFMjFFMjkwNTNFMURGQzk2MUQKKzoxMDgwRjAwMDBFNjBFNzkxOTY2N0VDNzVDMkI5NjIzMzFEMUZFMjM5RDUKKzoxMDgxMDAwMDk2NkNFOUE0NzE5RjkzRDUwQjg0NEY0NUM4NkY5NjUzMjUKKzoxMDgxMTAwMDVBMDhDNjQzRjNFODczMURCQzk1OTQwRTQzN0MzQTFBODMKKzoxMDgxMjAwMDBFOTJDNTgxRkI0RDEyNjFGNjlDQjY3RUZBMDRGNUQyMjMKKzoxMDgxMzAwMDgzNUMyRkFERTQ3MUNEQTdFQjVCMzBFRUJGMjRERTgxMTUKKzoxMDgxNDAwMEZBNkZFOTIwMTNGM0E3MkMxMkRFNTc2MzRFNjRGRDk1RjYKKzoxMDgxNTAwMDA0MzY2RjJCQzRCRDQ1RDBBQjQxQUNEQkUxNDYxRjExRUIKKzoxMDgxNjAwMEFGNDYxM0EwOUU0ODU0MDFFQUM5MjRCODE0RUY0OTk5QjgKKzoxMDgxNzAwMDEwRkEwOTNDNzc2NTc4MDI4MEM3NkYzMzNCMEUwODEwMTAKKzoxMDgxODAwMEM3MkVGNjBDMDNGRERCMjhGQTBBNTREQUZGRTc2MkI4QzMKKzoxMDgxOTAwMDAwRkFFNUQwQTY0RjkyNTgzOTA4RjJBMTNEQkE3RDJEREMKKzoxMDgxQTAwMDc2NEZBOEFBOEYwQjQ2RDcwNzJEOTJBMkY2N0JGRTMyRjgKKzoxMDgxQjAwMDRDREZCRTIyQzNGRDBBQ0NBM0MxQ0FFRTE5NEFGOTVDNEEKKzoxMDgxQzAwMEMwRkQ5QzA2MkJCQjZGQThDMTdFNjMwMkU4RjE1RjBGNjgKKzoxMDgxRDAwMDYwNzYzQkQyMDFEMEQxN0U2NkNGOUM5NEQ0ODQyNDE2QTUKKzoxMDgxRTAwMDI3NTVERjMwQzRGOTJERUExQkJBRUY0OERDREY2QkE2NTgKKzoxMDgxRjAwMDc0MjlFOUY2NTVDRTkzREMyNkEwOUJGM0ZERjRCOTdFRjUKKzoxMDgyMDAwMDlFMzFFMjcxNDkzNkJDOTYzN0U2N0U4RTM2M0ZDOERCM0EKKzoxMDgyMTAwMDA3Mzg4QUE3QTdBMEJGMTY0RDBGM0I3QkUzQ0MzRTExQzIKKzoxMDgyMjAwMEYwMzk0QkJCQkY1OEJBOUZENTEzODlGNjg3RkVEN0E3NDUKKzoxMDgyMzAwMEJERjZFOEZEQUNDRUY3MzlCRDczRDkzRTY2NDM0OTAyQzEKKzoxMDgyNDAwMEU2Qzc2OUYzOThENUZFNjAwN0Q4QTlCM0RBMzNFN0MxNkEKKzoxMDgyNTAwMEZFRDYyQ0RCRDAyRkEwREMyOTg3RjdDNjgzMUQ3ODk3QUMKKzoxMDgyNjAwMDgwRTc0QTZFRkVERDFCNzIzQzJEQjc3REI4MEVDRjMzMjIKKzoxMDgyNzAwMDdGQzFFNUU5NkMxMkM2N0JFMTNEQzRDOUY3RDkwM0Y4QkIKKzoxMDgyODAwMDdDMkU3MUYxN0E4QjBDN0VGREFEQzFDMDBENTdEM0RBMTcKKzoxMDgyOTAwMDZENkYwNEFFMDZCMzZERjZGRUYwOUIyMDA2M0MyRENFNEUKKzoxMDgyQTAwMDI5Qjg4N0EwQkREN0U2N0E4QkQ1RDk3QkJERUI5NzJDQjMKKzoxMDgyQjAwMEI4OUVDODdBMkRCODdFNkQ3RDc0QTYwOEZGNUVGOEYwNzIKKzoxMDgyQzAwMEZCOUEzNDc4ODg3M0U5QkEyOUJEQ0M0QUI4RjE0QTcyNkUKKzoxMDgyRDAwMDA2QkI3Qzk2NkRGODE3NkNEMzg0Q0QyNzFBM0VBN0EwRjkKKzoxMDgyRTAwMDg5REE4RjVEMDNEQzI0OUJFMkVGMEYwM0RDMDI5NEQ1NzcKKzoxMDgyRjAwMDk2NzA4RTM0MThGOTQ0ODY3QUFERTgxOTA0QTlDRjVGRDgKKzoxMDgzMDAwMDBERjQwQzRCMDUzODc0MjQ5RjkzRkMzQzYwNjVGQzdGOTYKKzoxMDgzMTAwMDAwRTgxOUYyQkM0RUE3RTBCQUI0N0JFOEY3RERERDY5RUUKKzoxMDgzMjAwMDA3QkI3M0U5QjY4RkYxOUVFNTFBMzFGNEU4NEQxODBGREIKKzoxMDgzMzAwMDE1RDE2RjNBRDkzQUVDOENFN0NGMEU0MDlDOEFFQUJGNTAKKzoxMDgzNDAwMDgxRDlEQTM5NEJCNkNFMzkxMkUzOTMzOUFERjE5ODhGMzIKKzoxMDgzNTAwMDNGNjc5MTY4Qjg0NzdBQ0UyMjk2Q0Y0N0E0OEVGQ0VCNTAKKzoxMDgzNjAwMDBERjZGQUZERkQ4RTAzRjE4MkU4NzFFNjJEOUE0NDNFOEEKKzoxMDgzNzAwMDFGMERGQkI0Q0UwOTE4M0Y1OEMzRTg2QkRFNjRCNzA4ODUKKzoxMDgzODAwMEY5Q0VFMzk3MDlCOERGM0FFRUIwREExNkEyRjU3OTgxQjMKKzoxMDgzOTAwMDQ0MTdCMEU3QkNCQkZGNjMwOERDNzM1MERCQzFFMjgxNkMKKzoxMDgzQTAwMEU5RTJFRDA1Rjc0MTlDNjUyRkQzRTM1MEJGMURFOEM0MUEKKzoxMDgzQjAwMEU2NTY2REJBRkQ4MjJFQjlBRTAwRUVGQkYzREQ2NjczQjQKKzoxMDgzQzAwMDAzRkY5NzVDRUZGRTE0RUZGM0U1RjEwQTREQUZCRUQ2NjUKKzoxMDgzRDAwMDU4ODI3OUIyMjVCN0FBNjMwMUZGMjUyRDU2Mzc5NjE2MjQKKzoxMDgzRTAwMDIyQzU1MTM5NTYyMjExMEI5NEU5MEE5MUFDNTBDNjExOUQKKzoxMDgzRjAwMDBCOTQ0NTRCRDhCREREQTU4RDMzRDAzRTcwOEMyRDU2RUEKKzoxMDg0MDAwMEUwM0VERTkyRjYxN0JGODFGN0NCQTRFMDFFNzYzRjA1NzMKKzoxMDg0MTAwMDgzNEY0OUZCREJERjAzNUUxN0I4OEIzMTlGRjFDMjBENDEKKzoxMDg0MjAwMDhBQzEwRjFDRDk2MkFDNUZENDY2QUMxNzA0OERGNUQxM0MKKzoxMDg0MzAwMEZCOERGNUY1RDkwNEU5NjhBRUU1QkEzQzgwRDdERTVEODEKKzoxMDg0NDAwMDY2QUE4QjIwRkZDRjhDRjkyRTg3MDQ4NjFGREY0NjJCNzAKKzoxMDg0NTAwMENBQzM0OTU1RUQ0NUUwMDcxRjdGRDk2RTAyM0Y3QUU3NTEKKzoxMDg0NjAwMDVGN0Y4OUZCRTFFMUNERjEwNEYyQUNGNkZDM0U4RUM0MDYKKzoxMDg0NzAwMDQxQkVFMjJCRDY3NUQwNUU0NTcxMDdGMUNCQUE1N0FDNTEKKzoxMDg0ODAwMDZCQzEwRjdGRjUwMkNEOEYwRkU0QzM3QTVFRkQxQkNCNkUKKzoxMDg0OTAwMEFGMDk2RjM0MDc2MDdGRkNGOEY2MTc1Rjg2RkRCNEUzMjEKKzoxMDg0QTAwMDFCMDdBMDdENzU0OEYwOTlFMkUwRkI1RkIyRjg2Nzg4OTIKKzoxMDg0QjAwMERGMTcxN0UyRjdDNTU1NkQzMEZBQzU3NzY0MzMzOTEzMDYKKzoxMDg0QzAwMDVBNzI3MTQyMkNCQjQ5MkI4NzY3MjRFNzREQTY3M0VCODgKKzoxMDg0RDAwMDc5QzgzQzA3RTI0MEMzMUE4RDcwRDFGQThEMDgxODlGMDUKKzoxMDg0RTAwMERGQzNDNzFGNEY5NDA4OURFNjQyOUU0MEEwQzEwMUZBMUEKKzoxMDg0RjAwMEY3RjlEOEY3MjQyRkUxRkNGM0QyNEJCREVGODlGQzlFQUUKKzoxMDg1MDAwMDM4QTJFQUNFNEQ0NUU0Mzc1OTM4MDBGMjM3MDBGRTgzRjEKKzoxMDg1MTAwMDIzQ0ZBQjg4NkUzRTNBRkI2NDJBMUZGRjZCMEJDQjY3MDEKKzoxMDg1MjAwMDRFRTFGN0Y3MUZBQkRGOEY3QUJGRDdFRUFCNzdCQjI3RjQKKzoxMDg1MzAwMEVCRUFBNThEN0JEMjRBQzA3RjZBREE5MzM2NTcwN0FGNDQKKzoxMDg1NDAwMEVBOERGQkQyNkVDMUJDMjcwOTIyQjhBNDdBRDYwQjhGNjQKKzoxMDg1NTAwMDQxQkNBMjdBQTNEODAyRjM4NDc2ODA1QjU3Q0I5QjBFRjIKKzoxMDg1NjAwMEU4NDdFREUxNTExMDA3ODlEOEEzOTdCQjI3RUJGOEY4NEUKKzoxMDg1NzAwMEVGQTU1QjhEREZBQUI5RkRGMkRBRDg4RTI5OTBBNzVFNTAKKzoxMDg1ODAwMEQ1MjhCOEEwNUI1NUNCMERENzVEMERGMDZFNjJFNzVDQ0EKKzoxMDg1OTAwMDhCMjQ1MjJDNTJGRUFBREU3MkMzNTUyMzIxNkY2NkY1M0UKKzoxMDg1QTAwMDE4MTdDQzg3MEU3MTNEM0NBRkRBNzQwMkNGMzMzQzFDRjgKKzoxMDg1QjAwMEY1QkIwNzVBQjkyMzlCRDk4NUI0N0ZEMDQ0RkIzRjdDRDgKKzoxMDg1QzAwMEEzQUQxQ0U0MTcxREY3MERBOEVGMURCRTBFRUY1NzcxRUMKKzoxMDg1RDAwMDFDNjVGQjBGRjRGOTI3MjY2QUI3MUM5REU4N0JFRjE2OTQKKzoxMDg1RTAwMEZBRUE3MUQyRjJEMUQ1MTA1NzZBMzREMjIzQTU2RjAxQkQKKzoxMDg1RjAwMEVDQjJGMDdBQzFCNTBFOUYyRTI5QkExNjRDNkVGNzYyMTYKKzoxMDg2MDAwMENDRjdBNUVENzM2MjlEQjdBRTA4MThDNzg5QzZGQjQ3QzYKKzoxMDg2MTAwMDdDQkVGNDZGQjg5RTdFQTJGQjI1NEZGMzYxM0U3OUY1RDgKKzoxMDg2MjAwMDIyMkEwRjc1NzE4MkVBQzM3RUJDNUYzMkZBM0I0NDRGNDcKKzoxMDg2MzAwMEQ3Q0M5RTIwMkFDOEMzQ0QyQzZGODZGRTA5OTYyMjlFRDkKKzoxMDg2NDAwMEE3M0I4NEQ1RjE1RTQ1QTA1MzRBMjg1NTE3OTBDOTJBMDcKKzoxMDg2NTAwMEMwRkI1QTMyMTVDQUYxMjA1N0UwM0VGREIxMkRGOUQwQ0EKKzoxMDg2NjAwMDdGODcxMDdBRTEzOTFDQ0Y4RTcyQkNDQjE5QzQ3QjI2NzAKKzoxMDg2NzAwMEIzRjgzOUQzMkU5NUQ1N0I3ODlDNTM2QkFGNkNCNzYyMkEKKzoxMDg2ODAwMDlFQ0RGMUFGMTQ5NEIzOEI1QkY2NjExRTdERDdDQjU2QjQKKzoxMDg2OTAwMDkzODlDQTgzRTM1QjkyMjc0MjNFNjY1NzBCQkJBN0Y4RDgKKzoxMDg2QTAwMDU4NEJGMjQ0RTUwQzdBM0I1QTZFNjhGQUY0MjBGQzkzN0UKKzoxMDg2QjAwMEVBREQzRjY3QkJCRkNEMDYzRDc1M0ZDQjU3NEQ0RkFFQTMKKzoxMDg2QzAwMDJCODhGNUZCMTdEQTdCMjk0QTVEMDFGODMxRTFEQjZDNzkKKzoxMDg2RDAwMEFFNzUwODI3NUZBRTg0NzFGMDBDMTdFNDA5OTUwODZDM0QKKzoxMDg2RTAwMERDQjg0MUM1RTI0MERBREY0RUZCNDIzQzNBNjlCRjg4NjQKKzoxMDg2RjAwMEJGRDdGMEI5RThGQTg5NzMwOERFMjc4Rjc2RDBGQzQyM0QKKzoxMDg3MDAwMDBGREU0RjQ5RUU2Nzc5OTVGMzI0MTI5NDI4QkRDRDAzMEYKKzoxMDg3MTAwMDdEOTQ4Rjc1OTRDQkYzOUEwNENDMkI5QkJGRENCODFFNTEKKzoxMDg3MjAwMEI4Mjc1N0FGNDcyQjQ4ODBERDZGQTE4RjIzMEU4NjdDN0IKKzoxMDg3MzAwMDE3QUE2RkUwNUU0QjBCQ0JCRkE4NkMzNkJFNTc0NTgyQzUKKzoxMDg3NDAwMDM4OUZFQTREM0Y5ODYzQzFFQjFCQTJBRENCOUQwREVCNkIKKzoxMDg3NTAwMDEyQUVCNUUwQkNFRTdDMkE4MUVERjcyOEM0MERGQTM0RTgKKzoxMDg3NjAwMEZDOTQxREU1N0IxNUYxRTA3ODM3NzNCREVFQkRCQkM0MEQKKzoxMDg3NzAwMDNEMUZFNEYwQTI3OUVFRjlDOTcwREU5NkU5M0Y3NEY5ODUKKzoxMDg3ODAwMDkwQkZEOUJENUI1NTkzNDk3MDIwQkI3NzgzODA1RUFEQTgKKzoxMDg3OTAwMDZBMTc4MjIzQTE2RTIxM0VDNzI4RjYxQ0VFMUY4MDc1NDIKKzoxMDg3QTAwMEVCQ0ZENzk0MTMzRjdFQUZCQ0M5Rjg5QzdDQzhGMDVBN0UKKzoxMDg3QjAwMENEQ0YzMTkyNjY1REZCNjBCMENGMTgzQ0FBMzc5OTBERTIKKzoxMDg3QzAwMDcxOURGMTlCMDQ5RjFEQ0ZCQjA2MUFEMkU4RkM2QThGRjYKKzoxMDg3RDAwMDUyNTk0MTIwNEZGNTA3QjM2MTdDQzhFNzE5ODM3QTlGNEUKKzoxMDg3RTAwMDU4MjlERTlFRUE5NUVCODExMUIxRjJGQzBGNzAzODNFRkMKKzoxMDg3RjAwMDc1NDM2OTI2RjBFQkUzNjBCNzY2NzE0MDhGNDVCOUM1RjQKKzoxMDg4MDAwMEUzMDcyNDY4QTFERjg5MUJERDVCQzdGNkEyMjVBQzNFMjgKKzoxMDg4MTAwMDdERjUwQkQzMUIyRkExN0U5RUVDQzE3REExNzk2MkYxNkEKKzoxMDg4MjAwMDVCNzAxRUVDQzU0MTlFNkIwMTNGRjM0Q0VFMUMwOUY5RDkKKzoxMDg4MzAwMEQ2M0QxNEUzQTE4QjE4MUM5RTE5NTUzN0EyMkU4NjFEMTgKKzoxMDg4NDAwMEE4RTFGOTY5QTEyNTA4RkJCMkJFRURDQ0ZFQjIxNzg2RkUKKzoxMDg4NTAwMDY1QkQ3RUFEMUVDOEU0NTFDMkRFMTA5RTlCMDg2RjEzM0QKKzoxMDg4NjAwMEYwOUNFNTJBRTEyMDlFNDc1Qzc1ODU0QUMwQkZDRkEwRjkKKzoxMDg4NzAwMDc4MDI3OUJDNEEyMEY3QzM3RDVDODVBRDMzNkU3RjEzRTcKKzoxMDg4ODAwMEYwNUMxOEU3ODI5RkJCQTg2OTlEMjBENkQ4NzBGRENDMEMKKzoxMDg4OTAwMDRFOEJBRjVCMEJGQjM5RTk3Mzg2OEYwMjNBQTdFQjlFRDkKKzoxMDg4QTAwMDczMkQ3RDdFRkI0MDE1QkY5NzY5NjM3OENGNThFMkNCNkYKKzoxMDg4QjAwMDg1REY4MTRBRDg1QjdDRkI5QkMwODcyM0UzRjA5QzZDRkYKKzoxMDg4QzAwMDNBODU5NTNEMDlDQjY1NjA3RjY1OTBDNTAyRjQ3QkNBMEEKKzoxMDg4RDAwMEMxQzY0RjM1ODk3MzY2NDA3RDE0QUIyN0REMkJCOEQ3RjEKKzoxMDg4RTAwMDIxRjFBREMwRjFEM0NENjQyQUNDMTM5RTgzMUQ2OTgxRTMKKzoxMDg4RjAwMEI4MDJCNjA3MTg3RTI3RDUxNUMwNzhFOTQzNTg5OUEyNjMKKzoxMDg5MDAwMDA0QjM2MTlDNzc3QUYxRUQ0MUJGNjIyMUQ3NjMwQkI3NjUKKzoxMDg5MTAwMDRDNDgwNzNGRUY5RDJFRUE3MDUzQjlGNTRFODY2NjBGMUYKKzoxMDg5MjAwMDA1NkRGOEZCNTBFNzBENjdGREI5NUZCOEIwODA5RDM3NjYKKzoxMDg5MzAwMDQ4QzkzMUY2RUI5MUREMDlBMzQxOEU3RUMwRUNGODUzQjYKKzoxMDg5NDAwMDM2MzdDNkE3MkY1NjYyQzdCMzlFMUJDOEVDMTZFRjY5MTEKKzoxMDg5NTAwMDgxMDQ3NDdBQzAzQkYzNUJCNDJCQkRBNzI1QzNGM0FFOEYKKzoxMDg5NjAwMDdBOEIyMUNGQjlCQTdDMkY5RUJCQUYyMTFEOTg4NzVEMzIKKzoxMDg5NzAwMEQzMTI2RkM4REJCRDM4MkVGNjc3MzVGQUY2OUUxNjg5MEUKKzoxMDg5ODAwMDJGRTY3NzE1RTNGM0QzQzlDNDk3MUNBQjVGOUFGMTM5OEYKKzoxMDg5OTAwMDVEODdBMURFRjY1REVGM0FFMDM5MTkxQjcyODAzRjM4NDIKKzoxMDg5QTAwMDhEREJCNTNEMDE5MzRGQkUyODgyOTc2RTY3QzhBMDc3RDcKKzoxMDg5QjAwMEJBNTU1NkVGRTFGQjcxNUFCQjM2N0VGNzRDODU5RjJCQkIKKzoxMDg5QzAwMDYyRjcyQTAzN0M3Q0MzMDg3OUI2RkQwNEM2QTNBQkRCM0YKKzoxMDg5RDAwMEY3NEM2MUJGRUZDNUU4NDIwRjI3OUY0RTdFQTQzNTc0NjgKKzoxMDg5RTAwMDA0NEQ5NEI3N0YzQkYwRTg2Mzc5MjMyODg5RURENUY4RUYKKzoxMDg5RjAwMEY4RDg2MzZFQ0FCNzY5QTJDOUMwRDdGMTg1QkQ3QzhFQUQKKzoxMDhBMDAwMEUyRTUyOTkzQzhFNUMyRjFDNzI2NUZBMkFGQjNGRTkxQTQKKzoxMDhBMTAwMEY3QkJBNjRGQTZCNjdENjExRTdCRkY4RjAzQkY3QTZGQTMKKzoxMDhBMjAwMEM5NzkxMUI5NDRENzkxNTM2Q0Q3RDUyRDUxNzUxQkFENjgKKzoxMDhBMzAwMDhGRDRENTlENTFFRDI5NTFFRDE5NTFGNTZDRDZCRkNCOTEKKzoxMDhBNDAwMDFFQ0MxMTVEODQ3NDBFM0MzMTVEMUEwN0ZCRDhDMUQ5NzAKKzoxMDhBNTAwMDcwQTNDMEYyODZBRkE3NEZBNkY1OUFDMjBFQ0M5RkE5MEQKKzoxMDhBNjAwMDZEMTc1Q0I4QURBRkU1QzdCQjk4OUQ2NTczODVGMEY3MzIKKzoxMDhBNzAwMEVDRTIwQjNCREUwMjM5NTBERDI2MzgwNTRBRUZCNjk2QjQKKzoxMDhBODAwMDJEOTg1NzUzMERFRkE5QkFGNzVBOThERjU5REQ3MjEwOTgKKzoxMDhBOTAwMERGRUI3N0ZDRTEyNkU0RTc4Nzg3MUZDMjdFREFGRUQxQjEKKzoxMDhBQTAwMDREQTRGN0Y3M0E0RTBGMDQzQ0I2NzQzMjNEMUNCNTdGMjcKKzoxMDhBQjAwMEQ0OURFOURFODdGMjMwRUFGQ0FCMTdDNkI1NDVFODVFMjcKKzoxMDhBQzAwMEVCRkY4NzkxRURCRjgzNjFFMjE3OUU1ODJDRDFGRTdGQUIKKzoxMDhBRDAwMEFBRTkxQzAzRjYxMkRDNzEwOTcyRkY2OTIxMzAwMkY0NjUKKzoxMDhBRTAwMEYzQjNDNDMzMDJGNEQxNkQzNUU3RUYzMUQxN0UwN0U0M0YKKzoxMDhBRjAwMEQwNkFCOEFBNjE2ODhFRjUxQTg5Q0FFOTAzRjZEMDQwMkYKKzoxMDhCMDAwMDgxQ0E5MkUxNkI5MkFGMDE3ODFFNDgwREUxMEQwRDNGRDUKKzoxMDhCMTAwMDVCOTNDMkRBMDc4NjA2QzJCRTZCNUVDRThGNTlGREZDNDAKKzoxMDhCMjAwMEQwNkFBODVGQkZFNjAyNTYxRjE5MUEyOEQyRjcwN0ZCQzIKKzoxMDhCMzAwMDJFQkMwNkUwQkZERTE5OUI2RjA3RTYzMDc5QUVDRDZGMjUKKzoxMDhCNDAwMDY2ODEzQjIzMDdFQ0NENkFBNjJGRTBGOEE1ODVDQUM1NTAKKzoxMDhCNTAwMEQ5OTVDNzM2QUZBNzcwOThGREQzNzg5NDU3RUJCQkFFQzUKKzoxMDhCNjAwMEJCQjIxOEQ3RUYyQjg2M0MzNzc2QzUzQkQ3NjcyODk3MjMKKzoxMDhCNzAwMDI1QjQwMzMyNDE4NzI1NDVGMDYxQ0ZFOTUwNTFERTVGQ0UKKzoxMDhCODAwMDUwQjcwNUY0N0VGQUVDM0M5NEY3QTdCMkRERjUzOTYzRjMKKzoxMDhCOTAwMDIyRTU5Rjg3QjBCMjNFODc5REY3NDgxNzREOTg2RjkwQUEKKzoxMDhCQTAwMDdFOEYxREVEQTBDN0Y5N0UxMkU1MUJDNEFGOERFMzYzNzgKKzoxMDhCQjAwMDU0MEU5MzdGQTM3Mjk4OUY5NDM1RjBGMjdBNThDRkNEREMKKzoxMDhCQzAwMERDM0U1REY5NTA2MEEzOTVDMkZGRjc0MDI0MjkxOERGMTEKKzoxMDhCRDAwMDQ2N0JGNzk2QjU1NDZFMjQ0MDNFODUzQjEzRTRDMTJEODkKKzoxMDhCRTAwMDEwRkZDRDhCRDQzNUZCN0Q2NTAxQUREQjIyN0VEQUNBNkIKKzoxMDhCRjAwMDE5RUU0QzdEMUVEMENBQjVBQzVEOTMzNzJCNzNEOUZCRjMKKzoxMDhDMDAwMDlBREU0OTZGNjBGMDQ5N0Y3Q0M0M0E1ODQ3QkM0NEYwMTMKKzoxMDhDMTAwMEZDQzU4Mjk5NDNENzJENDZGRDdEMkRBRTlCQjhERDk5Q0QKKzoxMDhDMjAwMEUwN0YxRkFFMTg2QzAyQkI1MkMzQ0ZBMjAyRjczNDVDQzgKKzoxMDhDMzAwMDhGQzhGMkQ1MzUzQzY5REZBRkU3RUI5RTI3NTJGRDRGNzkKKzoxMDhDNDAwMEQ3NTkzRkM4ODNFQkE3RjY0MDNFNEIyRTYwRjY0MDNEMTgKKzoxMDhDNTAwMDA0NjI1MzIzRjAyNTUyNjgwQzNDRkY1RjA0QTdEQkExOUMKKzoxMDhDNjAwMEZEMUY4NTUzMEM3OUYxMzNFODU3QjM4OENBMEI5MzRFMzcKKzoxMDhDNzAwMDVFNzBGODNEMkQwNEU1RjQ0MkRERkQyNUY0MzlGODgxMDAKKzoxMDhDODAwMDM3MERGNDNDOTBBM0RCQzc5OTdENEYwRERBN0ZEQUJDM0EKKzoxMDhDOTAwMEUyRkZGREI1QTkzNzkxQkU3QzE2NkQ5RjFERjhCRDY1M0QKKzoxMDhDQTAwMDM5QzYwMTk1MTY5NDhCMDdBRTI0QUVDNTIwM0ZGOEJFOTkKKzoxMDhDQjAwMEFDNjY1RjE2RkRCNEVBMURGMEEzNEVFNjg4Rjg5RTU1M0IKKzoxMDhDQzAwMEMzQUI1MEJDQTU5NEMyRTkyMUFBNTZFMTNDQkE2RjA2RDkKKzoxMDhDRDAwMENCRUZEMUY0RTY0QTdFRUZFRUNBQkIyRkM0M0NCRjFFRjkKKzoxMDhDRTAwMDEyQzJERjY1RjM4RDI1MjhGRjdBREI2NzBEQzU3NjhBMTIKKzoxMDhDRjAwMDZGOUYxNUY4QkQyMjBFN0Y3NzYwNjUwMUMxNzMzNjJCMUIKKzoxMDhEMDAwMDY3NUQ4MEVEM0JCNUI4RDIyQzBCN0U2N0U1MEM0NjRGMTYKKzoxMDhEMTAwMDJCMkI1ODFFMjZFODExODA1QjdGRjQ5MEQ2QzBFMjFCRjcKKzoxMDhEMjAwMDQ0NzJFN0VCRjMwMURFRTVGODhCMkYwQzZERkIxOEVDREEKKzoxMDhEMzAwMENBRTU1NkI0MkI0MTc3RTJGRTg4M0YxREJGNDdGMUJBMjIKKzoxMDhENDAwMDBERTU5OUU2NDczRDk5QzlFRTlCMjUyRUY0Q0YxRkI0NUEKKzoxMDhENTAwMEJCNEI1MDVFREQxN0FGQzJGQzlCQUM2NDk5NjUxNEI4ODkKKzoxMDhENjAwMDIzRTQ3RTk0N0I3QzNFQzRGRjBDRTY3OUNDRTFGNkRBMEEKKzoxMDhENzAwMDY3RTUyN0VENjAwRkJDQzFFNTBEMTAwQ0Y4Q0I3MzA5NUEKKzoxMDhEODAwMDZCOUY3QjZGRkM0MUYwNkZFNkRFQ0JFRTlCMjVDQjJFMUQKKzoxMDhEOTAwMDc3MUJGNzNCRTg1Q0QzMjAzRUNFRkYxQUMzNzY4MDgzNzcKKzoxMDhEQTAwMDA3REU3M0MwRjhGRjY5ODdGQjRDM0NGN0IyRjNCREM0MjQKKzoxMDhEQjAwMDQ3REZEN0U1NDM3RjBDRkMwQjcxNzY5MUNEOUZENEM3N0QKKzoxMDhEQzAwMEFCQjFFRTA1RkQ5OENCNzczQTdGQjdGRTdCREE3N0EyQTEKKzoxMDhERDAwMEM3QTVGRUREMjc0MEE3MTRFRTQxMzgwNzE2QkU0RkU0QjUKKzoxMDhERTAwMEJGRDc2QTlDNkY4QTEyN0VENDRBREI2N0Q3OEI4OTRCQzgKKzoxMDhERjAwMDI4M0MzRDhCRUNCODVFNkRCRTczRDJDMzk3QjJERjg1NjUKKzoxMDhFMDAwMDM1OEU3RjI0QkVCNjA4RTJFMTlBM0Y0MkVFMzVGQTYzMjIKKzoxMDhFMTAwMDEwOTdFOEFEOEI5ODI3OEQ3RTREOUZFN0RDOUY4REY2RjAKKzoxMDhFMjAwMDAzMDlGOTlCNTlERkFGRjc5Qzg2MkE0NENEOUZEMzk1NjAKKzoxMDhFMzAwMDJBNDg4MDM3MEZDRjVGNTA5NEYwNkNCQzU3MkE2QURFMDcKKzoxMDhFNDAwMDFBM0M5NTQxMjYwRTc3NDYxN0QxRjA1NjA2NzE3QTg4NUUKKzoxMDhFNTAwMDgyNzc4QTEyMUEwOEUzN0ExNjk5MTE0RUQxRTM2QkZBRDcKKzoxMDhFNjAwMEYxMTkyQkYxODExRkQ5MjgwODQ4QUY4RDc3QzdBM0JFMTAKKzoxMDhFNzAwMDIzMTY4NjY3NkY2NTlDMEFGNEZCQUMxMkM2M0MyN0RGOUQKKzoxMDhFODAwMDBFRjZGQkEwM0RENkYwQUIyOEI3Q0U2M0YxODY5RUY3NzkKKzoxMDhFOTAwMEM0QjVEMEFGM0I5NUQxN0RGNzc2OTlGMzFCNjFGNzRDMDQKKzoxMDhFQTAwMEJDMjdBRUMzNzY4MThEREJCRDM4MUVGM0E3RTA3Q0E4NUUKKzoxMDhFQjAwMDAyRTczNjdEN0ZBRTg3Rjg4QkU2RTc3RkZFMkFCQjZGNDEKKzoxMDhFQzAwMDAxN0VENzQ3RUYyN0MzQjlEQUYyNTExMUY5ODFGN0M3MEQKKzoxMDhFRDAwMDAwQkZCN0M1RjMzODkyQTcwMkJGNzc0QjFDODEzQzhEMEEKKzoxMDhFRTAwMDVBOTM4MDc5QkZCNTk1MTdFMDM5MTNDMkVGNzlBRUU2OTIKKzoxMDhFRjAwMDUzQUIzNTUxN0Y3MTU0NDQwRUQ0OUEwRTBEMDU3RkFCQTAKKzoxMDhGMDAwMERBQjIxQ0VGN0ZBNkVENkY4MDlGMDYzRkMzREJGQjNCMTEKKzoxMDhGMTAwMDFGQjk3REYxNTBCQkZDRjg1RkYxREM3QkFCOTEzRUFBNDEKKzoxMDhGMjAwMDIzNzQ4NEU3RTcyQUY1NzQ5NTFCQTExN0I0Qzc0MThFMTMKKzoxMDhGMzAwMDRDMjY3ODZFREZDRUVCRjE1MzNCMDIxMEM3RjFGMkI4NEUKKzoxMDhGNDAwMDQ2RUE1RTc2QUZBREJEQjA4NTQwNUNENTdCOTREOTIzNTMKKzoxMDhGNTAwMEUzREJEN0VFMDNGRjM4NzE2QTA3Nzg2NEI0M0Y4QkNCNEQKKzoxMDhGNjAwMDQ1OUYyRjFBRDdCRTQyMDRCRjRGQjM2Mzc0N0VFNzg4NzQKKzoxMDhGNzAwMDZCNDdFQTRCNzYxRTE3RkM1OEY4NUUwODFFMDFGRjQ4NDcKKzoxMDhGODAwMDRDRkYzRENERjUxRkQ1OTMyOEFGMTdGODg3QTE5RTA0NjAKKzoxMDhGOTAwMDNEMDY3MjRFRjM4MzQxRUU4MTlDNzk3MUQwQzQ1QjA3MkMKKzoxMDhGQTAwMEE1QzI3RDg2MTM2RjFBQzRGNjY5NDZBMERERUYzQkI3RjQKKzoxMDhGQjAwMEZEMjhBRDFGRjhDMzY3OEU5NzMxQjg4NTU3MjUzMDM5MjYKKzoxMDhGQzAwMDAyM0YxMDBBNzFFNERGQzg2QjFGQzZGOTQ5RUNCRUM2NDgKKzoxMDhGRDAwMEQ1QjkyODk3QjUzODRFMzU4RjYzOTVGMkI4NEYyOThGOUMKKzoxMDhGRTAwMEZCNDBEQzU1OUYxNzBCNzE0RDdEQkQ5QUNCODUxQUY4NjAKKzoxMDhGRjAwMEJEMjlCQzRGQzAxQ0M5OEI4NTc4Q0Y2NDEyQjQ0MzNCREMKKzoxMDkwMDAwMEM0N0QxQ0VDRkM5REZFN0QyRjA5NEM5MjkwQ0U3RjMwRTAKKzoxMDkwMTAwMDFCRUVDRDVBQzlENjNCODdFMzdEOTU5NUM1N0JDNkRGNTAKKzoxMDkwMjAwMEJCNTY2NDQxMkNCNkRFODQ1MUVFREMwNzBBMjNGNzc3ODkKKzoxMDkwMzAwMDdEQzFGMUE0QzEyNTZFRDBDNDEyODA3QjlDQzhFRTNGRDcKKzoxMDkwNDAwMDBGM0ZDMDdFMEZGQjMwRDVERjVCNzgzQ0U0NUExQjlFQTAKKzoxMDkwNTAwMDNGNzY5RjA3NzkwQjkyMzNFN0RBMThCRkVCRkFGMDBFRjEKKzoxMDkwNjAwMDJCREVFM0VGRTdGMjQ4N0IzRTY1MTBDQkY3QzUzODExMDYKKzoxMDkwNzAwMEMwN0Q3MTNDREFFMTE0Q0NGOTQwNDc0NTgzMzU3RDRBMjcKKzoxMDkwODAwMEYyMjEzRTc1OTBFNzdGRDZERTY4RjNDMDc4MjExRTM3NjcKKzoxMDkwOTAwMDVGM0Q4OEU5OERENTgzRDhFRjNGNjhGNTVFQkY4RkQzRkMKKzoxMDkwQTAwMDhCQjZDRjA1RjExQTdEN0NCQkI5QjczRjhCQUY2OEZBQTEKKzoxMDkwQjAwMEY3RTk4QUI4QjVFQ0JFNzc4RDZFNEQ3OEJFMzIzRUFGMUIKKzoxMDkwQzAwMDU4ODEzOEQzMEUyRTQ3NEFCODNGQkYwMzM2NzA0MTlFQjEKKzoxMDkwRDAwMEI0RjBCOEI0RTQ5QzBEQkYxQkI0RTM2ODFFRTY1M0E2MUQKKzoxMDkwRTAwMDI4NENCRUVDQjgzOThFNDA3RURGRkU2MzJGM0RGMjFFNjkKKzoxMDkwRjAwMDZEM0Y3OTU0QzFGQkYyRTZGMzc4RUMwRUI4MTcxRUU0MkQKKzoxMDkxMDAwMEU1MzYzM0M2MTlBQjE1NjY0RjU2RUYxRUM5RUMxOEM1QzgKKzoxMDkxMTAwMEIzMEFGMkJFN0Q1QjY1OEM3QjU1M0IwMjFCNUZDMEY2REMKKzoxMDkxMjAwMDRDMTdDNTJDOUMxNzY1NzZGMEY2NzhGNjdFNUNFMDE3MzgKKzoxMDkxMzAwMDJGODM1RkJBM0JEREU1QTNGRDE3NjU3OEY2MDIxRjY1NTcKKzoxMDkxNDAwMDk5RDUwNEEyRURCQjBBOTFGM0E0ODcwMkNDNkUzRTA0MkMKKzoxMDkxNTAwMDgyMDdCRUQzNkVFN0JGMzNFMENFNUM0MEM3RjlGQ0ExMDcKKzoxMDkxNjAwMDc0NUMwRjk1Qjc2ODVGN0RGRTk4MTlGN0Q1OUVFRUZEOEMKKzoxMDkxNzAwMDJFOEI4RjFFOTI4QkYxM0U5OTQzREIwQTVDRDRGMzI0MzUKKzoxMDkxODAwMDNEQzU0QTEwRTJERkRFQzc5OUJEMzdDRkE0QUUwMUY4NzYKKzoxMDkxOTAwMDkwRERGMTJFODNCRkZBNTgxOUJCNUZBMkYyREVFOTY3QkEKKzoxMDkxQTAwMERBRTcwNkY5QUU4RkZGNzY5MzcwMEVGQUFCRTU4MzVCRDQKKzoxMDkxQjAwMDIwREZCNEJCN0Q4NDhCNkQ2NzY1RTAyNjRBMkRERjdGQTEKKzoxMDkxQzAwMDNFMkMzM0Y4ODY3N0M5NDhDRkU3M0EzRUQwNDVFRkVGREIKKzoxMDkxRDAwMEUwODkwNDdGREY0REJGREYxNkJENEZEMUI3Q0VGMEU4ODkKKzoxMDkxRTAwMEREOTFDRUVEM0E2M0ZCNzVEOTlFNTNDMDZGQjU0RjdDRDAKKzoxMDkxRjAwMDc3NjA5MTBBREYwQkEzM0MyNDdFMTY2RjNGMkNCQjY3ODAKKzoxMDkyMDAwMDAzREQyNjRFMEUxQUYyQjg2QzJBRjcwRkNDRENGRTIzRDMKKzoxMDkyMTAwMDQxNDVDRjg3NUE3QkQxNDQxMjczNUZFN0ZGMDAyRTNGNTEKKzoxMDkyMjAwMEUwMjkwMDgwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDMKKzoxMDkyMzAwMDAwMEJDNTdEMEI3ODU0RDVCNUYwM0U3M0NFQkM5Mjk5MkEKKzoxMDkyNDAwMDY0NjYzMjA5OTMxNzM5NzkwNzkyQzAxMDQzNDQ4QjNBMDgKKzoxMDkyNTAwMDA5MDEwMzQ2OUQwMDJBNUE4QkMzMUI5NDNDMDQ2RDYzOEQKKzoxMDkyNjAwMDRCOUI4MTQ0MDg4ODFBMkUwMTAxMDEyNzA4NEFBRkQ4NzgKKzoxMDkyNzAwMDA2MkYyMEQ2NDgwNzQ0OEFBRERFM0YzRURBOEI3QTJGOTAKKzoxMDkyODAwMDVGNTA4QTY4MDUyMjVBN0VEQUFCRjU1RjZCRUQ3RDkyRkUKKzoxMDkyOTAwMDM5NDMyMkQ4REJEQjNGN0NCMEQ5NjdCRkQ2NUU2QkVEQUMKKzoxMDkyQTAwMEI1RDY1RTdCRUQ5RDU4NTU2MjJDOTEzMTdCMzdGMzg1QTkKKzoxMDkyQjAwMDhBMThGQjA2N0Y2RUU4NEY2MzU1MDM5NTMzMzZDNUNDOUQKKzoxMDkyQzAwMDkyMThCQjk2RjE5RjhDRDM1MERGQzY5ODRENTUxOTFCNTEKKzoxMDkyRDAwMDBEREY0Rjg3NERCMzIwOUZCMTI0NkM5QTJCRDIwMEE0OTEKKzoxMDkyRTAwMDI3OEQyQzZDMjk4NTc0QTMzREI0MkQxMzVCRkExOEY2RDkKKzoxMDkyRjAwMDMzNzcwQ0ZDMTc5QUNFOTU1OThCQTUwNEJGQUJGQjdCM0IKKzoxMDkzMDAwMERDOEM5RERBRUJGNEFFODJFRkVDQUI2RjY0NTZDNkQ4MjIKKzoxMDkzMTAwMDBDMjZFQTk5NTlBQkM1QzVEODhCMkQ1MkQ4MDJGNTY2RjMKKzoxMDkzMjAwMDZDMzA2RkIzNDI3RjY1Q0I3Q0IyMURGMkJENUIyNEVGMjYKKzoxMDkzMzAwMDM2QTgzN0EzQTUzQzZGMjNFNEVGREQ1M0VDOTVBMTY5NzQKKzoxMDkzNDAwMDFDOEU4M0Y5OTAzMzI0NDNGRDZCMUJDN0IxOEZBRTYyMzMKKzoxMDkzNTAwMDZDOTYzOTY0NTJFMDNCN0I0RTYyM0IxOEY1REY4MkZEMzAKKzoxMDkzNjAwMDJGODQ0NkM5MjU5N0UyNjFERTA2MzM2MzE2M0VGNzZGMDgKKzoxMDkzNzAwMEYwOUY1MDQ0M0UwQkZBRURFQzkwMTlDQzk3RUQ4NEVGNDIKKzoxMDkzODAwMDA1RkRERjE3MkFFMTgzNTIxQzYzQjU5RDUxRUREOURGM0UKKzoxMDkzOTAwMENDN0RGNTEwNTAxNjI0M0NCQjRERUMxRUJGOEQyNjNERjgKKzoxMDkzQTAwMEE0QTY5OEIxM0ZFMjdGOTMxOThCQzlGMDVGQUQxMjFENUYKKzoxMDkzQjAwMDcyODY0Q0I2QzNCQzJCRjhCQzdBNzc0Qjg0RDc1QUQ2OEUKKzoxMDkzQzAwMDYwNjJEODRGN0IwMjYzRDc0NDhDNkI2MUUxNTg0ODRGOTEKKzoxMDkzRDAwMEM5NDEyQTlGNkI1RTQzNjlCNTlBNDk3NEJCOTdGNTk4NUEKKzoxMDkzRTAwMDU4MzZGNkRCNkJGMjE3MEZDRTA3RDU5N0UxODM5QjA1NTYKKzoxMDkzRjAwMDFGMkMzQ0NEQzJEN0MxNzgwQjk3QjA3MEVEMDg5RURBMTgKKzoxMDk0MDAwMDIxOURBQkIwNjAxQ0UwNzUyRUUwMjA1RUE0MzEyNTFDRDAKKzoxMDk0MTAwMEFGNkE0MTNGNUUxNjg0RjQ3OUM0QTcxQTgxNjdDNDYzQkEKKzoxMDk0MjAwMDY0NzlGREZFNkZDQzkxRjkyMTI2QzZBQ0FFN0UzQTAzN0QKKzoxMDk0MzAwMEExMDhBRTIxRTMxQTQ2MzUwMDlDRDcyRTA5QzkwQ0U2RDcKKzoxMDk0NDAwMDk3OTJFRUJCMzEwN0JFQzc5NkYyRjlENjFGQjM1OEQ0MzgKKzoxMDk0NTAwMDkxOThGN0IzMkNBOEY3NjU1QUY5MEJCOTMwREY3QTg1RTQKKzoxMDk0NjAwMEY5M0FBMTNDMTZGMEQyMDFERkI3NTg1OTEwRkI3RjJBMTgKKzoxMDk0NzAwMDk3Q0ZENzYzRTJGQzZCNTRGQzZDOTQwREU5RDIxRDM2OTgKKzoxMDk0ODAwMDIwNUQxMjk5MDNGOTUxQzNFNzE2M0JCNDJCQzE3NjEyNDQKKzoxMDk0OTAwMEI1RUI2QjZGNjEyRDMxMTFFRDJCN0U2NTY1MENENkNCNzUKKzoxMDk0QTAwMDg1OTdFQzIxMzM1NDY1NEEyMEMzMDlGRDI1N0Q2MDY2MEMKKzoxMDk0QjAwMEFCMjA3RkY2NTdGNkY5RDhERjU5MjM5QkQ2MDlGNUREQTcKKzoxMDk0QzAwMDMyNkJFODI0N0U1OTRFRjRGOTE5RDIzNTExQjlBOTIyMkMKKzoxMDk0RDAwMDk1MjFFRjRCOTM1Mjk5MDdDQjk3RDE3OEI1NEVFMEFGREEKKzoxMDk0RTAwMDAxRThEQjU3OUVEOTdEM0JFNzJCQjNCQTBEQzZCQkUwNDUKKzoxMDk0RjAwMEVDRjkyMUU2MDExRTE2ODRGQzBGOTFDRTg4OTczREUzMUUKKzoxMDk1MDAwMDQ2RkQwNEJFRDdGQjZENUU4RUZEQzAyOEU0NTdCM0ZDNUMKKzoxMDk1MTAwMEMwRUQxNkUwQUYwOUYyOTJERTg3NjAxRUI1RTkzNjg3MkUKKzoxMDk1MjAwMDE5OUE1NDY2RkNFNzFGRUU4NEZDMjc3QjhDQ0M4Qzc0NjQKKzoxMDk1MzAwMERFMzE2RTFBQ0JCQTE0MEUyRDVEMTAzMjdFRDgxM0IxMDcKKzoxMDk1NDAwMDVFRUVEQkE5Q0ZENzc2RUFGM0Y1NENGOUIwNDdFMzAzM0IKKzoxMDk1NTAwMDQwQzExNkQ1RUUzRTU1NDhCMkMzRkIwREYwQjdEOURDN0QKKzoxMDk1NjAwMDcwQkEwM0UwMzVCRjZDRjYyRTg1Q0Y4QkQ0QzAzNjVDNjUKKzoxMDk1NzAwMDRGNzU4NkRFMjM4ODY3NzNDNjY3MjMwMjgwOTc4QThDQkYKKzoxMDk1ODAwMEFGOEVBNDIyRkU3RkNBQkMwOEY3MDU2QkY5MENBMkM3RjgKKzoxMDk1OTAwMDQ2QUIxQThDOTA1RkY1ODJGRkRCODc1NjUzNzlGQjI2MkEKKzoxMDk1QTAwMEIzMkFGMUYyRUFEMTIwQjdFNkQzMTJBNjJBMTYwM0UwRDUKKzoxMDk1QjAwMEJGN0VDM0M0NEZBNDExNTQ2RTQxN0FCNDAzOUY1MkJCMDMKKzoxMDk1QzAwMDE3QTREMDUyNjgzNzdGQzNCQzZBMDZFNTY3NThDODY0RTEKKzoxMDk1RDAwMDAxNzgzRUQxRjAyQzc3NERCMEMwN0ZEQjVENTVDMzUwOTQKKzoxMDk1RTAwMEJFMjg1RjJCN0VBNEZGMEFFQ0VBOUE3RTdDRkRCQTZGNTAKKzoxMDk1RjAwMDdENUFEQTRFMDI1RTZFNjIxMjhCQzc3OTNCMDNCRkM2OUMKKzoxMDk2MDAwMDc5RDY1QTdBNENFNUQwQ0YwRDVGN0Y0OTcyNzk1RUUzMDcKKzoxMDk2MTAwMEFCRDkyN0FGNDI3OUUzOUI0MUY0ODZGOUExMUM5OUY3QjYKKzoxMDk2MjAwMEQwNDFGQTJFNERCNjEwN0NBN0QyNkQyMTMzN0M3Rjc1QzgKKzoxMDk2MzAwMEEzOTlFNzlEMjZDQTlGREEyMjUxN0U1RUE3MTRCMjY0RTEKKzoxMDk2NDAwMDYyRkQ4QjA5RTUyOEJGQjcxODFENjY3NjI5OUVBMkYxMzkKKzoxMDk2NTAwMEYyRjFFNkZGODg2MzAwRjJDNzhDNTVFMUZBNjI4RTg2NkMKKzoxMDk2NjAwMDM4QkYxRENCMUFFMjI2MTcyM0JFNkVGQzA0RTVEN0JDMUIKKzoxMDk2NzAwMDJEQjIzNzhDNzJGQTE1QkIzNzk3NjE3RUZDQjAzOTM2NDQKKzoxMDk2ODAwMDZDRkY0NTQyMzlFMjZGRUI3ODg3NENERjY1M0ZDQTIxQkEKKzoxMDk2OTAwMEE2RjhCQTZGODBFRkNBRDZBQjU1NUMyRjg3Qjc3MEI4MDMKKzoxMDk2QTAwMEU3MzkyRENGMjA5RDZGRjg1QTI2RkU1NzBDMkNCMERCRTIKKzoxMDk2QjAwMDg2NzRGMDBEQzM3NUE3NkVERTMxMDFGMUZCNzE0RDhBMjIKKzoxMDk2QzAwMDgxRUEzRjJGMzEwN0UyQzNEOTk4ODRERkU3NDk4QTFGMzcKKzoxMDk2RDAwMEQ3RDlGQzBEMEJBQTU5NUMzRkRFNTdBOTMyQUQ5QkYyREUKKzoxMDk2RTAwMDhDMjU0OTNEMzZFMkZCREI1MURGRDU2RTAxM0VDN0YxRUIKKzoxMDk2RjAwMDI3QkZGRjg3M0JEREZEN0MyRjREREU3MENCQjVEOEZGNEMKKzoxMDk3MDAwMEIzNDZFMjJGQUQ5RkZBQ0QzNzBCRkU2MDJDMEM3ODlBNTIKKzoxMDk3MTAwMDI3RjA2NENFNTg5Mjg3RTM1RjZFM0RDQzVCRDY5MEU3MkUKKzoxMDk3MjAwMEIwNUQ3RTVERjRBREY3Q0Q3QzdENDg5OTEyQzk1NTk2NEMKKzoxMDk3MzAwMEU2MjIzRDMzRDg3QUQ0RjQ5M0FEQzA0MEYyREVFMjY1NDAKKzoxMDk3NDAwMEJFMUQ5MDBFMzEzMzlGMDRGMjJCMkY1MzIxM0NFNDY1NTQKKzoxMDk3NTAwMDlBQTg5RUYyOTc0NTNCREYwNEY4RjdBOTgxRjg0Q0Y4RTgKKzoxMDk3NjAwMDlFQzE3Q0EzNTBDRkE4QkQ4RThBNzhFOENEODYwQzUyQ0UKKzoxMDk3NzAwMDhBNzA5ODQzM0I0OENFNDExRUYwQjQzRTkxM0RCMzJBRDcKKzoxMDk3ODAwMDAyQ0UyQ0VDNkYzNEFENTc0RjI2RjQ3QkY2QkRBRjhFNzYKKzoxMDk3OTAwMDIwMUVFQjg2N0UzNjAyRjU3NkZEQzUyRjREMkFEMEQzRUUKKzoxMDk3QTAwMEQ2MjU5MTlDQjU3OUZEMENGOUEzQkVBQjg2Q0QyRUVBRUEKKzoxMDk3QjAwMDk3OEZGNTVFMkVCRkEzRTc1NTlCNjlFNEVCQ0NERDRCOUQKKzoxMDk3QzAwMEZEREM5Q0M1RDc1REJCOTNBRkNGNEQ4RDMxMjE5NDdCMjQKKzoxMDk3RDAwMDlCREMyMTJCMDIxRDVCMUE2NDI4REY2RjI5OTVCRDA4RDUKKzoxMDk3RTAwMEI2NjZBN0Y4MkQ5QzVFMTZERkFCNEM0NjdFRjVDQTVFQ0EKKzoxMDk3RjAwMDE0RjFEREJFOEY1QTEyMjBGRjY2RTk3OEFGMEM3OTlCMTkKKzoxMDk4MDAwMEVGRTlENjJDOUNCN0Q3MjhDQUIzODMzOEVGMzdDNjk2NzIKKzoxMDk4MTAwMDkzQkQ3MjhCNEZBNjcxRDlGQ0I4MTBBQThBNkVERjNCM0MKKzoxMDk4MjAwMEVFRDkzMEVFQURDQ0I3RjYyNEQwQjEwQTk0MzdEMkIxMzAKKzoxMDk4MzAwMDFCQzcwNjdBOUQ3MTA0QzYyMjVFQjRGOURDRUM5REI4QTQKKzoxMDk4NDAwMEY2NjRBNDlERTFFM0Y2MDA3Q0UyN0FBQzc0NjAzQzk0OUIKKzoxMDk4NTAwMEE4RTUxNTQ4QTcxQkFFRTc3NEY4RjQ3OTczNjgxOThDNkUKKzoxMDk4NjAwMEZGQTkxNUY0NEM4NEJFRjhENENFRjVDRUQ0NENBRUM3QzcKKzoxMDk4NzAwMDE4RUIxQzhBNzJCRjJGQUYwQzMzRTBCQTdGQzBDMUYxNjYKKzoxMDk4ODAwMEUxMzY3NTBFQzVGNUY2Mjc0OURGQ0ZCREFEMzIwQjgxNDgKKzoxMDk4OTAwMDlDNTlEMDJBQjExMDgwRjhFOUNGNUYxQzhBRjJGNzkzNjcKKzoxMDk4QTAwMDFEMkYwRTlEMTkwMTVGNzQzQjJEOURBRThERDdGNjg0NDMKKzoxMDk4QjAwMENGMDJFM0NENjREQTc4RTEzNDFDNkZBNkQ3N0MwMkU1RjEKKzoxMDk4QzAwMDA3NkIxREVGRUI4OUIwMUY0ODQyNDZENDY3MUI3QzI0MTEKKzoxMDk4RDAwMEJGQ0ZDMTZBNDRCRUQzREE5RDlCMUZFMzQzM0JGMzFDNTkKKzoxMDk4RTAwMEIzODQyNDE4NkE2Njk3MUMzNjYzN0YzRTVGOEUxQkU4M0MKKzoxMDk4RjAwMDVEQTdCNThGRUE3RjAzRjIwRkMwMjVFRDk3QzI3NkE4NkEKKzoxMDk5MDAwMDFGNUJENDRCRjI3NjgxQzU3RjI0MTU4QTE2MjAxREExREEKKzoxMDk5MTAwMEZFNDRBNEEzODRGQ0VBMzNFMUJDMTU4OUNCRjMzMzBFRTcKKzoxMDk5MjAwMEZGODM0ODg3Mzk2RDdBM0E2NjY2M0FCODdDNzdCODg5OUEKKzoxMDk5MzAwMEVFQTYzQTlCODJGQTIyQTk5OTcxM0JGMDQxNDMwOEY1QzEKKzoxMDk5NDAwMEI1M0IyNjZFMDQwMzNCQzY5NEUyQjFBMTlDQkEyMTJGMUQKKzoxMDk5NTAwMEE2QzUxMDhGREY4Nzg2QjA3RTdBNEEwMUI1MEI1NjcwOTgKKzoxMDk5NjAwMEZFMEUyNkIxNTBCMzg0NUQzNjQ4NjQwNzNBN0E5ODAyRjkKKzoxMDk5NzAwMERGRDNDNjMwQzcyQTk0NDU5OURDNEVGNDMwRUYwNjk5MDAKKzoxMDk5ODAwMEVDQzQ0RTA5RUQ0NDBEMEY5QTdDNDdCRTQxQjlGN0E5Q0UKKzoxMDk5OTAwMDY0MjFCRTkxQkEyNEIyRkI2NDQzRTc3NEVDNzczMDNFOTUKKzoxMDk5QTAwMERBMTJDNTQ3NUJGRUM5N0NGNEVDQTA3QzE0NTA4OThGQTkKKzoxMDk5QjAwMDNDOTY4MUY5MDhGNjREREZBOTNFMEJGQTE1QzBENzEwODkKKzoxMDk5QzAwMDgxQUZDNzg1N0NFOTdERDA0Mjc0ODMxRjA5RTc1QjJEOTkKKzoxMDk5RDAwMEZBQUJCNkQ4QzJGMjA4OTIxMzlGRjVDOTZGRTg2NzMzQTUKKzoxMDk5RTAwMEQ4OUZCODRGNDk0NkZCMTlEMkQ0RTYxOTJBQjdERkJCMzYKKzoxMDk5RjAwMDdCMjRFODJGRjY2QTBCRTlCRDQ3MENERDk5NjhFNzBGNzkKKzoxMDlBMDAwMDE5REVCMDFCRjk2M0M4RjRBMjkyNjZCMjRGRDI5QzI4NEIKKzoxMDlBMTAwMEY3NTFENkUwRkNFQjFBQzdGOUI5MUQwMEZEMjIxRkQ1OUUKKzoxMDlBMjAwMDk4NjgzRjUxRjc1MEI5OUZEQjAxNTVCNDNFRUE1NzVCNDgKKzoxMDlBMzAwMDU1RDQ2N0UzQkEzMjk3MjI3RkQ0MkYwMUZCMDhFNUVGQjQKKzoxMDlBNDAwMEZFOEU4RDczMjE1RjM3RDVFNjQ1M0JDNTZBOTk1Mjg0RkEKKzoxMDlBNTAwMEVENThBQjdFOURBRDk0M0FDOTJFMEU0RTY0NUU5NERCRkMKKzoxMDlBNjAwMEU3NDI4NkEwNzEyNENBRDk5RUFEM0Y0MTNEQkVBMEM4NDEKKzoxMDlBNzAwMDFCNTQ3MUJEMDlCRUNDNjFBNDE3REE5REJFNjQxN0UwMEEKKzoxMDlBODAwMDc1REZERjY0REExN0I1OEY4MjNDQTQyRjBCN0FCNkQ3NjcKKzoxMDlBOTAwMEY4OTI5RDkwOUZCOURBNEE3ODZGRUZFMEU1RTdFQzgwQTUKKzoxMDlBQTAwMDIwRTgzRjQ1RTZGREIxNzgwQkQ3MzM5N0NBMDMwQkUyQjgKKzoxMDlBQjAwMDNENjkwQ0QzN0UzNjYwM0U0NUNCQjczRDQxNzY4Q0I2RDIKKzoxMDlBQzAwMERFREIzMzM5M0NGNjIyN0YyNjVBQkUwMTc1NzQ3NzBDRjMKKzoxMDlBRDAwMEYwNEY5MjZDRDAzNjQ1NDFCNEJCNjM3MTRDOUVGN0UxQjgKKzoxMDlBRTAwMDcwRUIwQzAwNDgwQTY2QkY1RTUzMzkzNjMyQ0ZFQkY3OTUKKzoxMDlBRjAwMEI3N0Y2NDcyNjUxQUU5RDdCRTcyMDQxQkY0QUU5NkY3OUQKKzoxMDlCMDAwMDU5MDE4RTE1RjZGRTcyMDVFQzQ5Q0I3RTQ5QjRCRjc2M0QKKzoxMDlCMTAwMEYyRjgxQzk4QkYyNEM2MEY5QUQ2RjgwMERFQzdBRDRDRTkKKzoxMDlCMjAwMDM3NUUyNDdDNEE1NEZGNDYxNUY3RjVBMjdFNzBBNDdGNjkKKzoxMDlCMzAwMDNDNTQ1ODU3QTJCNTZGNkVGMzAxRkM4RjFCRjVGRDExMTUKKzoxMDlCNDAwMDRBNDU3QkNDNjhFM0ZEMkVFNzc3NkI1NjhGRUREN0ZGNTgKKzoxMDlCNTAwMDYwMEYzOEIzNDZGN0RCMDEyQkRFQUY2RTFCMDk2M0M1MjAKKzoxMDlCNjAwMDNBQkUzMEExN0VENUY0NzlCRDVCMjIzQjIzN0FCREE2RjcKKzoxMDlCNzAwMDY2NzE3RjA1RDhCNUE5NTkxMUY2NkUzNURBQkIzMkQ5QjEKKzoxMDlCODAwMEI5MTM3MDY5RDUyRkYxMzNCNDJGQzE2RUM4QzBGMUNFQUYKKzoxMDlCOTAwMEJFRjdEOUE5ODNGMEJEN0RGMkE3NjRFN0Q3NUY1NEM4QUIKKzoxMDlCQTAwMEZFQTgwN0ZCMDNFRDc2NEIxN0I3NjdEOTdFMjNFOTVENjcKKzoxMDlCQjAwMDhERUVGNzBBRjlEM0VFMDRCRDhGN0NGQThBMzQxQUY5RDgKKzoxMDlCQzAwMDk0QjE4NkExQjcwMTBEOUFCMzdDQzMxMDBFNkQzRjE2RjgKKzoxMDlCRDAwMDBENkY0NTE2QjdDQkVCMEIyQTM2RTY2MUZGREIyNTg2MEEKKzoxMDlCRTAwMDdBN0Y1NUMxODc0OTY4OUZENDc3OUQ0ODlBMTNEMTZFNzMKKzoxMDlCRjAwMEMxRkU3NTg0ODcwNTNCOEQwM0NFQkYyMjhCREI5Qjc1MzEKKzoxMDlDMDAwMDJGRURGNUUxN0FGRjM0MjREMTVBOUVBRjg0NTZBMjVENDAKKzoxMDlDMTAwMDM5N0ZCRTAxMkQzNTU2MUE5QTcxMjdBRTdCMzZDREM0RDkKKzoxMDlDMjAwMDcyNjE3RTA1QzJBRUE5REYzOTI1NzgyREVFREJFMEFGOEIKKzoxMDlDMzAwMDA0OUYzNkY5RTdEMkZBREUzNENENjI2Mzk5MDhFN0NDQTcKKzoxMDlDNDAwMEZCMDkwRjhFMTgxRkUyNjE1NTQxNDUzMjhFNTM1NzMzODEKKzoxMDlDNTAwMEMxODFGRTkzN0FCMEIzQjBCQ0VFQTFCQkM4OUZEMjY3RkUKKzoxMDlDNjAwMDA3RUYzNzU2QTFGRDU1MDZGNkQ2QkYwMURDRTlBRTQ5MzAKKzoxMDlDNzAwMDU1NUU1ODhGQTlGMkVFNTE4QjIxQkY3RTEwRjlGQjVFMjUKKzoxMDlDODAwMDM2QTc2NzhCRTQwRkRFOEFFQkZFMjU4OUVENTBGQkNCMTAKKzoxMDlDOTAwMDMzRjY3M0JCRUVBRTJDNkUwNzZBREZFRkNBNTJBOERENTcKKzoxMDlDQTAwMEQ4NjBGNzM4RTRCRDAzNEE0RjJDREFCRkY1Q0NGNzM5NUEKKzoxMDlDQjAwMEVFM0I5OURGQTZFRTIwM0E3MUI5RTM2RTUyQzlBRjY0NkMKKzoxMDlDQzAwMDcxRjczQzMyMTJDQkM3MkFCNDlGNjA0QUNGNUExQ0Y3QjcKKzoxMDlDRDAwMEVDNEFCNzc3MTUxM0ZDOEJGOTg3OEE0MjI4NDc4RjY2QzEKKzoxMDlDRTAwMDA1RTYyMUZGOTQwOTNCRjJFQzRCMzc4RTlBNTlENDZGNkQKKzoxMDlDRjAwMDI3QURFQ0IwODY5NjAxMUU1NkRBRDU3RkE5NDJGOUY2NUIKKzoxMDlEMDAwMDE3ODVFNDFCQjNGNDc2OEY0MzdBRkNENTQ1RkRBRUI0REEKKzoxMDlEMTAwMDg2NTYyMkZEODM2QjhDNTRCRTNCMjVCMDA4RjlFNjc0NTEKKzoxMDlEMjAwMDRENTUxRUVFODM5OTJEOTg1NzAzRkM2NDc0QjczMUI0REEKKzoxMDlEMzAwMDE3NjBGQjQwN0UwNjhCREJDRjU0Qzg4RjBCQ0U1MDI0QzAKKzoxMDlENDAwMDk0RjM1MUY2QzczOEY0RjNEMEJFMDEwNjg3RUYxNTQyRkQKKzoxMDlENTAwMDZDRTUwMjE3OUNCMkQwMTI2OEY5MjZBMURGMUUzOUZBMTEKKzoxMDlENjAwMEQ1NTQwNTNGNkE3NjhBQzExMjU4ODA0RDJCQTdDNTMwNUQKKzoxMDlENzAwMDE5Rjk3RTc5RUYxMTAzQ0MyN0Q2REQ0RDc2NkM2REE3RUUKKzoxMDlEODAwMDQ0RTNENDE2QkM2MDQyQkZDOTdEOUQ3QzVERDY4QjdEMEIKKzoxMDlEOTAwMDAwRTA2RjI4REEwMzhGNjRDNThBRkQ2NzBCRjU1QkNGOUYKKzoxMDlEQTAwMEJBNjkxRkNENzY3MTdBMzIwNkY1RUM5MUZCODlBNTU0MUMKKzoxMDlEQjAwMDRGRUJDRkI0OENGQkJENkE4NTNGMDY3QUE0RjJGNTYyMDcKKzoxMDlEQzAwMEJENkJGRTA5NTg5OEMyM0VFMEUzQUU5N0JBN0QzMkUyMjEKKzoxMDlERDAwMDc1OTRFNDhERTQxQjJEN0QzRThCRUJGN0Y4NDNCRDEzQUEKKzoxMDlERTAwMDcwRkRGNjAyN0ZBMTVGNjZBMzU0NzNGRjZCMzBCRjhERDkKKzoxMDlERjAwMEEzODc3QkQxODRGMjAwM0JDOTI1RjgxRDU4MTFGMDVFODIKKzoxMDlFMDAwMEJBRkZGMzA5QzgzNzYwNzBEMzdBQUREQjVGMkVEN0RBQkIKKzoxMDlFMTAwMDQ4NkZEM0ZFNzE0ODZDNDMwNzk2MEZCOUE3ODBGNDZBNjgKKzoxMDlFMjAwMENDNTVFQzlFQzlGMEZEMDVCMUNFOTI2RERDQ0ZFNTU5NjUKKzoxMDlFMzAwMDE2Q0M1QzU0ODRFM0ZCRUY3RjBEQzcyRjhFMjEzRkU1RUEKKzoxMDlFNDAwMDEwQTA4RERENDU2OTJCRkE4NTNDNkNBOTg0RjVENkM1M0IKKzoxMDlFNTAwMEYxRkUxMzBERjIzRDM1NDUyNDc3MjlFRkYyNEFCRTZEMzAKKzoxMDlFNjAwMDkwNzY2NTM5QTk3RkQ4Nzc1NTIxOUNGODlERjY2M0MwMTcKKzoxMDlFNzAwMDE5Qjg5RjQ1M0YxN0Y2MzMyNDlCQTc2NzkzQzMwQTBBNzcKKzoxMDlFODAwMDg4NERBQzY3RUIwRUU0Q0ZGRDY2MDdFMkE5N0FGRjZGNjEKKzoxMDlFOTAwMDhFQTFCRUFDQjZCMDRFMTlFRDk1MjgzQjYzNDlGQTk0M0QKKzoxMDlFQTAwMEQ3OTAzRkNGOUQzOUI1RjU2MUY4QjZFRUI2N0RERTAwQUYKKzoxMDlFQjAwMEQxNDU2RjNGNDRFRjE3QjY2MTk1RTRDMUVEQkQwRkZBOTAKKzoxMDlFQzAwMEU4QzlFREJEQkVGQzNGRENERUUzNzY3RDcwNDdBQ0JBOTEKKzoxMDlFRDAwMDIzNDI5RUQ3OEI3RERBQjlGOUU3RTM1MENGN0NEQzA3Q0MKKzoxMDlFRTAwMDBGRThFOUIyN0U3QjY1RTZGNkQ4MTNCOEFFRkFFQ0ZFNzEKKzoxMDlFRjAwMDI4QkJFMUU4MzNCMTQxQTRGRkY5NEUyQkY5RTkxNEI0RDIKKzoxMDlGMDAwMDdCMDA5RTMzRjZERTFGMjI3MkRDMjZCRjRGQzJGREMzRUMKKzoxMDlGMTAwMDZFQTM3NzE5RjQ1NzdGRUZBN0JGMzBDMEJBNTMzQUMwOEEKKzoxMDlGMjAwMEVFODk0NzdCNUY4RDI3MzlGQkJBQ0M3NkEwNURBNkY4MUEKKzoxMDlGMzAwMDFDRThGN0QwRTA1NzlDMTMzQ0E4Qjc1QkM0RkMxNzlBMDkKKzoxMDlGNDAwMEMyNzk2NDA3OTlEODdDQ0FDNzg1RjNEMEVFNzk1OUU4RkQKKzoxMDlGNTAwMDlEODUzMTkwODdFRjhEOUVDMEQ3NDhCNzE0MzM5NzU3QjIKKzoxMDlGNjAwMEQ4MEVCRjc3MDg3QkFCMDM1MEUyNDBCQzFDODM3RDc3RTMKKzoxMDlGNzAwMEE2RDBERkI4RkY3OTM0M0RCNDhBRkMzODE2QTJFNzQ3OTMKKzoxMDlGODAwMDA3Q0NEQkQwQ0ZGMzUxODEyMTZDRTI3RTA5RjI2M0E5Q0IKKzoxMDlGOTAwMEFEMEE0Qjg2RkFFQTMxNkI0OEU1RkUyRThCMDFGNEZGRTEKKzoxMDlGQTAwMEFDQzdFRjdCMDNGNzE1QjMwRTcwM0ZENkFDN0I5N0RDRTUKKzoxMDlGQjAwMDgyRkI4RjhGMjY0RjMwQTFCQzk5QzMwMkU0Nzc5RUM3RTYKKzoxMDlGQzAwMEI4MUY3QTAxMEI3MTdGMzU3MzE4NzBCQ0ZCNDA2QzZDNDUKKzoxMDlGRDAwMDQyNTExMzA0RUM1RjBEOUYyNTgzODQ3Njg1REEwMjc5NjQKKzoxMDlGRTAwMDMyOUE3RDZENTUzMEVFQ0MxNjAzRUQ0QjY2QjVFQUZEMjkKKzoxMDlGRjAwMEU5MTc1NkRENUY4NTdBN0M0NThCODFEQjhGQUQxMkU5RjEKKzoxMEEwMDAwMEYxNTlDQ0U3NDFCQjQzQzM2QjYxNzYwMkM5ODM2MDhCRDYKKzoxMEEwMTAwMEMxODdFMzhDQ0JFNjdBMDU0ODE0QTJGOTg5QjRDNTI4MzgKKzoxMEEwMjAwMEZDRjAwMjhFQTVDQzEwQzZENDIwRjE3NDg1NDNBOTFBODkKKzoxMEEwMzAwMDQ4M0Y2QkZEQjUxODFCMkNFODBGRUI0RDM3OTAxRkY4MTAKKzoxMEEwNDAwMDgyQzkzNzhERkNBOEFFM0M4NjdFQzQxNjdCNDM2QjE1NTcKKzoxMEEwNTAwMDJGQTczNTczQzFEQUVCQTdGMkVCMTQ2RUYwMzFENTg1N0IKKzoxMEEwNjAwMEYyMzIzM0RCNDBGRDQ1Q0Y3NzRFOUIzRTFGN0QzRUIxNDQKKzoxMEEwNzAwMDIwQTRDRkNGNjI4MUZDRTQ2Q0Y0MUJFOUJGNjc2NjczNTgKKzoxMEEwODAwMDNENzA2MTU1QTYzODA3RjBEMjM5NDA4QjUxN0QzQjEzQTYKKzoxMEEwOTAwMEU1RDU0QTg1RTRFNUQyMzQ4RTJGNDMzQTRGQjM5Qzk1RkIKKzoxMEEwQTAwMEQzODg3RjlENjA1RjEwQkMxQ0ZFQUNFQkRDMTJFQUNENTgKKzoxMEEwQjAwMDE2MjdFN0NCRkYyOURDRDFGMERFOTQ5REM3RjE4QjQ2NTQKKzoxMEEwQzAwMDFFOENEN0IyNTIwQTcxN0M3MUI4QUZENDdGQjEzMDVCQUQKKzoxMEEwRDAwMEJGRUZFQ0NCRkZFM0Y3OUQ5QzFGNTdDQTYyQkQzOTQ4MjkKKzoxMEEwRTAwMDBFQ0Q3NEYwMzk3RDI0Nzk5RjA5RTM3NzFCRDgwNzAwRTIKKzoxMEEwRjAwMEY3QUM5NTcyMDlEQTI5RTNBNkQ4NjgxRTc1MDdBQ0U0QjcKKzoxMEExMDAwMDZGQUQ1REQyMzMxNEQ3NTE1RDQ1NEY1RUMzMDA3ODQ1QzYKKzoxMEExMTAwMDY4MTU0RDdFNDFCRDk5NkVEODI3RTBCQTZERDU5RjUzMjUKKzoxMEExMjAwMDgxQTY2NTkxRTc0RTUzRDI3QzRCQjMxMzcxM0ZGMkQxQjgKKzoxMEExMzAwMEVFREYyMEJENzc1QjQ5M0ZDMUZGMEU5QTUxN0VCRDk0OTMKKzoxMEExNDAwMDQ5NzY1MzVFNUE2MDY1MzZFQUY1OThGMEQ2NjczM0QxQTIKKzoxMEExNTAwMDRFRTE3NjUyNkQ5N0I5MDNFREMwOTkyRDExRTc1RUY4ODcKKzoxMEExNjAwMENGNkFGRDM5MTg2Qjc1OTE3RjgzQjVFQkJGQ0ZERjFDQ0MKKzoxMEExNzAwMEQ1RUU5MjczMzFBRUVGRDc5QjAyQzNEMEJFQkJFMTdBNkUKKzoxMEExODAwMDVGMzJDQUQ1MzMwQjBDMENFOTNCNEJGNkNFNDUzOTcyMjYKKzoxMEExOTAwMEM2QUFCN0JGQ0ZEODM5QkQ3NjY2NkJGMkREOUI4Nzc0OTAKKzoxMEExQTAwMEVFQ0I1RjQyNjc2RjFFRDI3OTk2ODEwNTIyRkJBOTQ1RUYKKzoxMEExQjAwMDNBMDM3RDE3MEEzQTlGRDk3Qjc1MUVEMkY5QjNERDU3NTIKKzoxMEExQzAwMEU3MjE5REQ3MUJEQjdDQjg2RTlFQ0QwOEVDNDIzQzlFMDAKKzoxMEExRDAwMDFDRUYyN0ZCMDlFNDU1REU3N0UxQzcwMzUxRkM3OEUwNkIKKzoxMEExRTAwMDdGOEYxRkE5REQ2MEZBRjBCNzdENzBFOEY1QTFEQkE0RDEKKzoxMEExRjAwMEE2QTEzQzlDNjkzMTdGQUI1RUM0OUYwMUZENkIxNjMzMDkKKzoxMEEyMDAwMEY5MjUwRTdDRjVDNTYzQ0ZBMDFERDIyNTkzMURBMkY1QkYKKzoxMEEyMTAwMDc3NDAwOTY0QTM1RkUxQzAzMThGMzcyODBEREVGRjgzRUIKKzoxMEEyMjAwMEMyNkVGNTU4NTgxMEZEMUY5QUREQUZEOThGRDFGMkY4RTQKKzoxMEEyMzAwMEI4OThDRkQ5NkM1RjBERUQxNzg1QkY3NkJFRThEMzEyMDUKKzoxMEEyNDAwMEZBODJEQkE5REIyNUYyQzc1QUQ0NEUxRkRBQkQ3NUFGRkYKKzoxMEEyNTAwMENDNzBBMEJGRjY3NDg4RkI2N0VCRjY4RTIyRkZFRDgyMTAKKzoxMEEyNjAwMEQwQUJFMTU0QjQwQkJCMjQwN0VFMUYxNjZDM0YxMTg3MzMKKzoxMEEyNzAwMEU3RERCMDFGM0Q5MzRENzhFM0ZCRDFGMTYyM0Y3QTNBQzEKKzoxMEEyODAwMEY0NTExQzlFOEJDM0Y4MzdFMzNFMjJENkRENkI0MkZFQjEKKzoxMEEyOTAwMEFEODM3RDFBNTQ2MTc1NEFFRjExRUNBRkNFQ0RCQzQxNTAKKzoxMEEyQTAwMDE0MTVGQkY1RkIzNkVERkM3MjkzREY0NEYyNkU1Mzk3MDkKKzoxMEEyQjAwMDE0QzI3RDVBOTIyOTkwOTk4NkZBODlBNTM5NEVDNUY2MUQKKzoxMEEyQzAwMEFGOTdGRkNFRjZBNUUwQjk2NkZGQjlCMUVGNkI4NENCQ0YKKzoxMEEyRDAwMDhERTc0REQwQkU2NzYzM0NGMTYxOEY5MUY5QzgwRUQ4MTAKKzoxMEEyRTAwMDY4MTc3MjQ5MjEzOUY1RTdDRDRFREFGN0QwMEZENEZGNjAKKzoxMEEyRjAwMDczMjg5M0YyOUFCRTlFQUJCMEIwMDI3ODlGM0JENUY3MUQKKzoxMEEzMDAwMDFFRDIwREU1NzczODRBN0U0N0U2RkJDRUEzNTkzN0Q3RjQKKzoxMEEzMTAwMDJGMjBDRkMzMDM5RDhGOEI3MzZBM0NERjhENkM1RkM3OEIKKzoxMEEzMjAwMDdBQTkxRDlFRjNFQUZBRDVGNjAxQUM2MTk0MEE3MERGQjIKKzoxMEEzMzAwMDc3QjdDRDhCRjY0QjNERjA3NTYzNDkzRjFGMkUxNDUzMTUKKzoxMEEzNDAwMEQxRjhCMDRFRjg3OUVCRTc3RjQ4RkI4MUZBRkQ5MjAzMzQKKzoxMEEzNTAwMEZEQkIwQkJEOUMwRjE3QzIzRUM5M0NFMkQyNzVDQjNBODgKKzoxMEEzNjAwMDgxMEYyM0UwMUU2QzFENUY5REEzNUZDNzdERjk3RjkyNjcKKzoxMEEzNzAwMDNGQjMyMjQ3NkZDRjZBRjNEN0ZDRTI3REYzRUM5MkY4NEMKKzoxMEEzODAwMEZBOEE5QTU3RjRGRTMyREE5RkFERUQwRkFGNTRBRUREODQKKzoxMEEzOTAwMEQ5MDcwRkM3NDc1RkZFOUYyQ0Q3RTY0NEUxNjVCMEYzQUUKKzoxMEEzQTAwMDgyRUYyQ0Q3QTJDRjBENzJCODFGMUNDRjBERjA1Q0Y3MzcKKzoxMEEzQjAwMDdGN0E2RUYwODlEQTk2NjQyMDNERThEMzlEQTdBMjlENEUKKzoxMEEzQzAwMDhFRTNCNDZFOTFDOTNFOTgyMEYzNzNFODVBQkI5OUZDQjIKKzoxMEEzRDAwMEI0RDFFN0FERjVFQTA0NzFCRUQ4RkQ4NzZCNTA3RkVFQ0UKKzoxMEEzRTAwMDMxMzJENEVCRjM2REYzRTgzQ0IzNUVERTY1NzJBODAzNjMKKzoxMEEzRjAwMDlDMzMyQTA3Qzk3RUZGQUVFN0VGOEZFNkY0OURCRjY3NjcKKzoxMEE0MDAwMEUyRjk3QjU5ODU1RTNFQkY2QUZCMjIyMTEwNDFFNzhBNTMKKzoxMEE0MTAwMDIyMzBGQzA3RTA2NzhCMTI2NEFFODhFRjRGRTY3MDdCNUEKKzoxMEE0MjAwMEY4NTUxMTI3RTMzMUIxNTY4Q0JGNzhEQzFFRUJDMzdEQTQKKzoxMEE0MzAwMDg3QzdDMEUzNzg5QUIzRkM1QjUwMEU1QTU0OEVDN0E3MDcKKzoxMEE0NDAwMDVFQkE4MzE5NjA3RTRGMTkzQjQ5NUUwNDZCNkQ1RTk0NjIKKzoxMEE0NTAwMDdCOUE5RjQ1RUJERjJFRkMwNTU3Q0FERjdCQTNENkZCMUIKKzoxMEE0NjAwMERFN0ZGMjdBRkZCNTM2REU3NzNEMDdEQjAwQjhEMUFEOEYKKzoxMEE0NzAwMDAzNDZFNzVENkZFMEY5NERFNkE1RkMzQTU4M0Y4M0YxRUUKKzoxMEE0ODAwMEVEREIzOUZFMzc3MzY4QkRGOTQ2RDBCOUZFMTVDQTk1QzQKKzoxMEE0OTAwMEQ4RDJERThGRDA5RkMzRjY5ODU1REM1N0EwNUY4M0Y0RTcKKzoxMEE0QTAwMEUxRUE2NEFFQTcxNDZGMTlFMjE5RUNCOTMyOEM4MzNBNzEKKzoxMEE0QjAwMDhFRkZCRDY2NzBGQkVGNzRERkJBRTdGNkRGRTk0MUU1QkEKKzoxMEE0QzAwMENGREY2N0ZGMzU2NUY4M0ZDNTc5OUUyQ0Y3RTVBMTdFQTQKKzoxMEE0RDAwMDVDNjEwN0Y4NzE1RkY3NzMxRTNGQjNEOUNBRjk3M0IzQjQKKzoxMEE0RTAwMEM0Rjk5MjM1MjY2OEZFMTE5QTU3RjA3OTdFRkUxRENEOEIKKzoxMEE0RjAwMDU3MkM1N0NGNTc3REY5N0ZCMkRDQjRGNUMxRjFCRjJDOTMKKzoxMEE1MDAwMDM3RTdGRjM1MEVGRDlDODNGNzEzMjRCQTk1NTU3NDEzNzYKKzoxMEE1MTAwMERFN0E1RjkxRDhCNjA4RkY3MzdEMzc4RjQzNEIxN0YwMTMKKzoxMEE1MjAwMDZBREZGRjJBRUNCRkI5QjlCRUExMThDRkY1RDk3QjE2RjcKKzoxMEE1MzAwMDBCOEIwNzUzMDc3OTBDRUQyRUJGOERGQ0ZGNzU5RDNDRUYKKzoxMEE1NDAwMDRFQTQ2RTA5QTNGM0RFM0FGNDZGMTZBMURGQUY4NkExMjUKKzoxMEE1NTAwMDdEQjc0RjBEMTQ2MEZCMTVFRkRCODI3MjNDRkFDNTI3MDcKKzoxMEE1NjAwMDMzQjJFQkRFRTNGOTQ1NkFBMDg4RTJDNTk2RjRFOENFQTMKKzoxMEE1NzAwMDE5Q0FCRUY5NjIzOUZBMkQwMDVFRjIwM0I4RDEyRjEzNjEKKzoxMEE1ODAwMDQxQTc2OUI5RkM3QzQwNEI2RjhCODIxRkZERjRDNEZGNkYKKzoxMEE1OTAwMDlENzIwOEVEQzE1OEI1OUJGQ0ZFNzU3QkI4OTE1NjI2OUYKKzoxMEE1QTAwMEZCQzgzRkNGRUU3MzMxRTRBM0JBM0RFNUEzNUVBM0ZBNDcKKzoxMEE1QjAwMEQ2NTE2OENGOTY3RDUwRUQ0MDNGQzQ2N0Q3QjkyOUJFQ0MKKzoxMEE1QzAwMDYwQThEQ0IzMDBFREE5QTM1OTgxNzEwOEFGQkQzNDM0OTQKKzoxMEE1RDAwMDExRUREMTBDQjA0N0QxQkVGRDZDRjdDNDUxMDhCNzI2QzAKKzoxMEE1RTAwMEZGRDZBMzdGMUJGQTVENkZEN0ZCQUY5OUM1OTdGOTMwRjQKKzoxMEE1RjAwMEZBQjdCNzBEQTFGREUxRUU5NEMwQ0RCOUI4NEZCMzcyNzMKKzoxMEE2MDAwMDc4ODM2QkFDN0NCRDBBQkY3NkY0RkFEN0Q2RkQxMEQ5M0YKKzoxMEE2MTAwMDQwRTMwQ0Y5QkU4NUNFQTEzNUI5QjBERUM4MDI5NkVDOTgKKzoxMEE2MjAwMDdFNzk3Mjk1ODg5NzAzN0NGMDc4QkRBRTFBMUVFNzIxN0IKKzoxMEE2MzAwMEYyMzZCNzNFNkVGMTZDRjZGOEFCNzA3RTU3RTVGMkI4QzUKKzoxMEE2NDAwMDk0Mzk5NjVFMDlGREVDNzNDNEY5RkI4RDIyOEU0MjhCMjIKKzoxMEE2NTAwMEEzM0FFM0YwQ0ZDNkZBNkM0OTU1RkZCOTdCMTZCNjc3M0IKKzoxMEE2NjAwMDcwRkUxN0YxMzFCMTE3Qjk5RDlDRTUzMDExREZEODVCNTEKKzoxMEE2NzAwMDE5M0YzNzAyQkU0MUZBOENFREVEMUUxNzBGRjNDOTY5ODEKKzoxMEE2ODAwMDBGOEY0NTdDMUVCODY4MjA3QzI4MzU2RkQwNzk0OTNDRjcKKzoxMEE2OTAwMDkyMERGQUM5NUVEREIzMzIxRkZEMjU4RTc3QUY0M0JBNDYKKzoxMEE2QTAwMEE4NkQ4RTBBNDRERDNFRDVGRjAwQzFBMTM0MTRFMEZFNDIKKzoxMEE2QjAwMEIxRTJGNzQ2MUUwRkY4NEEyQ0U5RjlGNkExMEIyOTFFNjQKKzoxMEE2QzAwMEYwRUNGQkMwQUY5OTk3RUEwMzJEMERCMjY1MTRGRjk3MkMKKzoxMEE2RDAwMEI1RkYxREYyREJEQkY3NDgwM0M2NzUzRTlFNkJFM0U3NzMKKzoxMEE2RTAwMDQ5QzE2RThBMzM2MzYzREQ4NDBGRTU5NTBGODI2ODVGMkQKKzoxMEE2RjAwMDI4MkIxNUYyNTRCNDE4N0QwNjJCRDI3NTI5MjMzRjdCRTUKKzoxMEE3MDAwMDZFQkJDMzgwNzRDOTEwNzEyNUU3MEVGQ0Y3ODgwMEVEOUQKKzoxMEE3MTAwMDQ3MzQzRjdEODg1MkM1RDhCMzFDRjc1N0NBRDI5RUVCNDkKKzoxMEE3MjAwMDYxMDVCM0RBM0Q0RTQzMURGQTM1OERCRDc1RTQxNzc5RTkKKzoxMEE3MzAwMDI1OTZGQzlGMTlGQkIzOTc3RDBGRjIxOUFEMEUyNkExNEMKKzoxMEE3NDAwMEZDRjlENTdEMTlDOEQ3NDE5ODY3RUUwMEYzNkNDQ0U1Q0MKKzoxMEE3NTAwMDcxM0JDQTJCQjEwNkQ0NUJDQTFBNDY3MTg4OEEzM0E5RTkKKzoxMEE3NjAwMDgyRTA1RTA3NzlFODY3OTFFMDFCRURGQzExQzBGNUEwN0YKKzoxMEE3NzAwMDNFOUE5QjFCRDg4RTc4OEUxNTcyODAzNUM2OTBCRkQwQkUKKzoxMEE3ODAwMEFFNzBCRjg2QkRGMUZERTc5NzQyN0VBQkYwQjcxRTNBRDMKKzoxMEE3OTAwMDUwMzg5OUZDNzMyQjE1MDlFOTcwQzEzOTIzQzMwMURGQzcKKzoxMEE3QTAwMDdGOTlDQkVEMTFCQkQyQ0QxQ0I2NDhGQzFGQTJCOENCMTQKKzoxMEE3QjAwMEFDNTc3ODVDOUE2MkU0N0NBMkFDNzQ3N0EwRkZFRkNCRDQKKzoxMEE3QzAwMEI0MDBDNTk3NUVENzEyOTZFOUZDQ0E3MTcyNkQ5NTFBRUUKKzoxMEE3RDAwMEIxN0ZEOUMwRjU0OERENEVCRTZGOEVERUFGNUM0RTdGRDcKKzoxMEE3RTAwMDFDQ0RENURCREQ3REY5N0Y5MjVERjI0RURGRjg3RkU3OTIKKzoxMEE3RjAwMDNFODRFOUY3NkZEMUY2NDlGNDdFRUQxMkZCM0FBQUJGMjkKKzoxMEE4MDAwMEMxRUMxNDJEOEVBM0EyN0YxQ0UyODc1N0VEOUExRDE0NzQKKzoxMEE4MTAwMEQ0QzVCOTU0RDhGOEI4Q0NBMkVGRkZGOTRDMkUyN0I0NjAKKzoxMEE4MjAwMEI4OTdBNDY2NzUyOUM2OTdGN0ZFOTQ5MTNGNEQ4QkNCRDgKKzoxMEE4MzAwMEQxRTI3MDgyMTU3QzlGMTAzNDgwRENDQkM0RjM5RjM2NEMKKzoxMEE4NDAwMDhBQkY0OTY1NjE0OTIyN0JCRjg3NjFGQjIxMTg4NzAzNjUKKzoxMEE4NTAwMEVEN0I3MkIzQThGRjJEQ0NEQjJBOTM1QzU0MjU4NERGRkIKKzoxMEE4NjAwMDhBRjExQjA5MDg3NzY4RTM1QzFDRUYzNjFCOEQ2N0M1MEUKKzoxMEE4NzAwMEY4OEQwNERBMjdEMDNBNEVGMUYzQjhDRDcxRjM3OUJDRjQKKzoxMEE4ODAwMDY3MEFFODVGQ0NBN0U0NzBCRUI0NEUzMzUxMUNBNzE2MkMKKzoxMEE4OTAwMDk3QTFDNTZGNjg3OEE5MTBGODRFQzk5RjlCODlGQjAxRTUKKzoxMEE4QTAwMDJEQ0U2MzdENENFOEU3NTYxOUUzM0I4NERDNUY2MDIwRTYKKzoxMEE4QjAwMEI5QUZDNUNGQjVFN0FBMjFFNEY3NzMxOEU3NjlCQkYyRDIKKzoxMEE4QzAwMDc4OEU2OEZDNkE3MTFEMzdBNDA3OTJGMzQ2NTM1QzA3QzMKKzoxMEE4RDAwMEU5NTEyRDFFNDNFMzk3MDgzQTA2QUQzMEZFQTY1N0I4NUUKKzoxMEE4RTAwMEZENUUzMURGNDRGMDlGNUIzMDg5RkM4N0U3MTYxODE4NjYKKzoxMEE4RjAwMEFFQTM4QTJFMzNFN0JGQThGMTM2NEQzM0IxMzBGNkFCQTUKKzoxMEE5MDAwMDg0QUMyODNGMzUzRUI4OUNGRDBBNzQyRDQwRkZFQ0ExNzUKKzoxMEE5MTAwMEE2OUREOTI3NjFDRDFGNkVFQUE0RjQ5QzU1RUE5NDQ3MDEKKzoxMEE5MjAwMDYyREEzQjFEMjVENTg4Njc4NzRFNTFBRUMxMzg5NURFNkEKKzoxMEE5MzAwMEExMTJCMDRFQzlDRTlDQTk5NDRGRUMzRDhFRjk0OUY5QjUKKzoxMEE5NDAwMDM3NEY1NTQwNEY5Q0NCRURERDJBNjE5QzQ5RkU4OTI5NEMKKzoxMEE5NTAwMDk0NDc5RTRDNjE2Q0NDMzNCRjlGMTJBNDc5NzM3RkQzMTQKKzoxMEE5NjAwMDM4RTE2RjMyM0IwM0Q3RTUyNUUyN0Q4MDlFRTVEREU0RUIKKzoxMEE5NzAwMEQ3RTE3MUZEMThGNzg3RjRGMEQ4NEM2NERGNzg0NEJDNTgKKzoxMEE5ODAwMDI1QUIxNEYxOTc3OEYyMDJGOUU2RTQ1MTc0NUU2RDYzMzkKKzoxMEE5OTAwMEVBOUU2RTJDNEYzMzczN0RDRjM4M0YzN0U3NzI3RjMwOUUKKzoxMEE5QTAwMEE5NDg5NDlENjk5QUZGQTgyNzg4RjJBQTM5RDM0OUVENEUKKzoxMEE5QjAwMEZCRTRFQTFFNzM4OEZCQjFGOEY4NkZFRDJEQTY3MzI2NTEKKzoxMEE5QzAwMDJEOEU5NDMxNDdGQUQ0NjI4QTM3RDFFNTFGQjdGMjczREUKKzoxMEE5RDAwMDRGQTYzOEQyRDE3RTY4MzYwQTNCNTVFNDYzRDIwMjc3NUYKKzoxMEE5RTAwMEU1NDVEODQ5NkY4REZGNTExMUFFODczM0ZCN0U5MjgzQzkKKzoxMEE5RjAwMDcyRUE0NjEzRDhGMTAzQzhBNUQ0MDIyRTk3Q0UxOTZEN0EKKzoxMEFBMDAwMEFEMTJEODZENkZBNDA2NjYyMUJFOEVDNTRFOUZFMDg0NDAKKzoxMEFBMTAwMDc5NEQ0QjI4MzczOTExREVFMENGNjU5NDkzODk4MkRFN0EKKzoxMEFBMjAwMENFQTkxQzNFNjdBNTVGOUEwM0ZEMzY1QjYxM0Q0M0ZCRTMKKzoxMEFBMzAwMEM0ODBFMjIzN0IzRDMwNTVCQTBERTA2RTk2ODRGRENFOTYKKzoxMEFBNDAwMEQ0NzhCMkRCMEJENDc4M0NENzVCRDhGODBFQzU1NUNCQTUKKzoxMEFBNTAwMDQyMEVDODQyMEVCQ0RERDQ5M0EzRTQ4MkNBRUQ1QzIzNEYKKzoxMEFBNjAwMEEzQkRGRDhFMzg1RjdFMjc5M0RENTMzMzgwM0Y3MzdEMUEKKzoxMEFBNzAwMDFFQjcwRjI3Q0I2QTMxRjI5MUZCRTFCMUVGNTQwMzVGQjAKKzoxMEFBODAwMEM4MjY2Rjg4RTg5NzZFNTc5MURGMEZEQUNCM0MzREQwMzAKKzoxMEFBOTAwMDhGOTRGMUQzNTI4QzRCNkU0RUZGNjkyOUM2OTVDODJFMDgKKzoxMEFBQTAwMEFGQzcxRjkxNUY5RkM3RjlCODEyRUIyMURFNjIxQjRBNDcKKzoxMEFBQjAwMDUxOEZGREMzRkE4Qjg3RkU4QUZFRkVGRUZBRkEzMTczRDAKKzoxMEFBQzAwMEI4MTY1QTdBODcyQUIwM0VCRDlFQzAyNkE0REI4NTE5RTcKKzoxMEFBRDAwMDI3RThCQ0Y1ODcyOTZGMURDN0Y4ODhCNzhDNkRFM0UyQkUKKzoxMEFBRTAwMDUwMEU2NTRBODI2RkI5QkQ3NjI0NUZGMzZCRjJCOEY2RkIKKzoxMEFBRjAwMDIzODVEQ0FGMDk3Mjg4Qzc0RjE2RjM3QjM0RDU1MzE5MTEKKzoxMEFCMDAwMEFERTc2QTExNTczMUMxQzFFRjI1NEQyOENERjQzNkMzRTkKKzoxMEFCMTAwMEQ0NkU2MUJEMEFDQUU5MDlDN0ZDNzE0ODNGMzYzNTUwOTkKKzoxMEFCMjAwMEVBMkYxRURDMEU2MzFFQTMxQTI5NTcyNkFBMTE3OUY4RjQKKzoxMEFCMzAwMDdCNTM4MTNFN0ZCMzU3OUZCRjc1Q0NEN0Y5OTFGOTM1RDEKKzoxMEFCNDAwMDFFREY4QjM4RUY5NzI1MUVBNzE5QkM4NjM5Njg5RTZFQ0QKKzoxMEFCNTAwMDI5ODhGNjUyRTE4QjI5MURDMjdGNEJGMTg0RkYyQUY2MkEKKzoxMEFCNjAwMDczMkY4RTYxNTQ5RUI0RDNCMjBERUYxNzY4N0U3MDU5NjcKKzoxMEFCNzAwMDk0MTc3QTk4MjVDMzQ1RjgyMDNEREIyQjg5Qjg0NDM3RDQKKzoxMEFCODAwMDlERjVCMDdERjczQjM4RkVBMEFFMDlGQUQ5Mzc0M0E1NTUKKzoxMEFCOTAwMDc1OUM2NDMzQjBFQjcxQUQ5NzVBQzg3RUQyRDY0NUIzN0QKKzoxMEFCQTAwMDE1RjgxQkYwNTg5NjZBODk0MTdFNkYzNjdBMzc2MDVGRDgKKzoxMEFCQjAwMDcyOEM1OTQ1QkQ1QTFFNjdBMUJFRTU5RjI5QTQ5Nzk2ODAKKzoxMEFCQzAwMDVBQ0QxNERBN0FFOEQxMThDQTk3MjlDQzhGRjExODAwMzcKKzoxMEFCRDAwMEUyNTQ0Q0RGMzI3QTQzMEQzODVGQTg4N0YzNkQ3NjMyNEEKKzoxMEFCRTAwMDkyNTc3Mjk5ODlGNDM0RjQ0Qjc0M0RCNEM2MTA2MjM0QjAKKzoxMEFCRjAwMEZGNzI4NUUyMkQwNUNDREFCQTgzOTFFOEZCMTM2MjVEMjIKKzoxMEFDMDAwMENCMDYxNjI2Mzk5NjYyMjEzOTc2MThGQUM3N0UwRkJEMTMKKzoxMEFDMTAwMDJFNzc5MDFGQUQ0MEJEMUJDQkNGNUJGMkU5RkU0RDdEODMKKzoxMEFDMjAwMERGQkQyMkM1ODBDMDE1MDgzQkNBRDlDNUVGN0Y2OUVCREYKKzoxMEFDMzAwMDU5OTMyRkQxRUIxOUE0NjA4RTNCODk3MTEwNTVGQzA3RjUKKzoxMEFDNDAwMEE2OTE4NDdBOUY5MTNEQUY5RDBGQTY1QkI0NzJDNTg3OTQKKzoxMEFDNTAwMEUzMjRGN0Q1RTdGN0FGOTI0NDNFMzUzRjkzRDYxQjU0MzQKKzoxMEFDNjAwMDA5MUI0QUQwRkVGOENENUY5MDZGMzVGOUIwNzVDNUNGOUUKKzoxMEFDNzAwMDQ4M0U1QzhBRkY4MjA3MjkzRkM5RUVFMEY4Q0Y0RkMzMDgKKzoxMEFDODAwMDc1MjhDN0U0QTdBMUJFNkI3NjdBNTU3RjQ0QkUwMDk2QUYKKzoxMEFDOTAwMEQxMzQxN0UyMDdFQTQxN0U0QUQ1ODkxQzI1QzJGRjk3QzUKKzoxMEFDQTAwMDlBQUY5MkIwODQ3QUJFMDQ4MEUzOTA1NTREQzNGNTNBRDIKKzoxMEFDQjAwMEMwQjhCNTdDRENEODdGRUNCODFFMTgxN0VBMURCMkMzNEIKKzoxMEFDQzAwMEI4NTA2RkJCRDUxQzM2QzQwRDM0RkUxODE1QzdCQkRDOUQKKzoxMEFDRDAwMEI4ODA0RTQyRUEyNDgxNjdFMDhCMjBGQUE1MEVEOTBEOTgKKzoxMEFDRTAwMEM0OUY5MzQ0N0NFRUExNDQzRTFFMkJEMEM3Q0ZFNEM0NDYKKzoxMEFDRjAwMEMwRjhFNDZGRDVDN0NCREMyODZENkU0MUJERkM4NDM1NTAKKzoxMEFEMDAwMDZFMUJGMkUzNkYwNDlGMUM4OUZENTkwRURBNTVCRjk5NDMKKzoxMEFEMTAwMDlFNzcxOEU1Q0E4NEY4QTUyREM4MjQ5MzU4MjdDOTFCMjcKKzoxMEFEMjAwMDRERUU1RDQ4M0U1MTg2Nzk5MDdGRDdFNjAzREQ3Rjk4RjIKKzoxMEFEMzAwMEY1RDY3NEVDRkNCMEYzODkxQ0Q0N0YyMDFGQkU5NzlGMUUKKzoxMEFENDAwMDc4MjlGQzFBM0Y2QTcwMjMxRkUyM0FFOEUzQzMyOEY4MjcKKzoxMEFENTAwMDM1M0U2MkI3NzQ1MjgwRTExNkIwNEIzMUQ1RUM1NEM2MjMKKzoxMEFENjAwMDFBNzgxQ0I4OUFERTNGM0Y2MEUyMDk5NjA2M0U4RkE1MkUKKzoxMEFENzAwMDQxODJGQjQ2RTc1QThBMzcxQjMxMkNFMDQ3QjhBNjhENDMKKzoxMEFEODAwMEZDN0NBODgyOTUzRDMzRjI3MTFGMDZGMEQ2RkNGRjg0NEYKKzoxMEFEOTAwMDM3REEyRUJGNUMzQ0I0MDY1N0Y0M0FENkM2OTcyNkVGOTYKKzoxMEFEQTAwMEE0NzhFOEZBQTkzNjhBOEYxRTI3RTI0QUVCRTcxQjI4MjcKKzoxMEFEQjAwMDRFMDhGNjZGNjRGN0Q3MzE0QjA4RTVGMEI1QzI4RUQ2NzIKKzoxMEFEQzAwMEUyRjQ3RjI1NzFGRjY3NzBBRjU5REQxMTYxOEY1RjFBNjMKKzoxMEFERDAwMDI3QUQ1MjFDNzY3MDA5OEZBN0VFQjNCNzZCQjlCRERERjYKKzoxMEFERTAwMEE3RDdDNEJEODBGNjUxNUM5NkI3REZBRjUyQkNDNENCQzkKKzoxMEFERjAwMDEyQUYxRjlDQzFCOEJENUUyM0NBRTczODQ0M0MwNUNDRTYKKzoxMEFFMDAwMDI1QTkzRjVFQkRCRDgzMTFGRkI3REJCM0E4M0M0NUU2NzYKKzoxMEFFMTAwMEZBODc3RDhGRUI5RkY2NEM2RTRGQjZERjk5NDdFNUIwMTIKKzoxMEFFMjAwMDJGMTg4Njc4OUYyNTgzRkRDQ0NGRTdGOUZFMjA5NzhGREEKKzoxMEFFMzAwMDE3RURBNzVEOUZDRkVEQjIzRTNCNDdFNEEzRkRCMkNGMzgKKzoxMEFFNDAwMDY2MDQzNjIyREZDRjI5RjIwRDk1ODBBRjY2OTlCOERGMTAKKzoxMEFFNTAwMDE1Rjg2RTMzREU4OUE5NjIwRERCOTU2Q0JDNUZEMUYwMEQKKzoxMEFFNjAwMEFFMjE5QkY4RUUyOUUyQkI0MkUwQkI2QzFEREY4NUYyMTAKKzoxMEFFNzAwMDQ3NzNGOThCQzI1NEUzQkIzRTdFMkI4ODhFODcwQkZDNTUKKzoxMEFFODAwMDFDRkI2OTc3NzY3RTUwODdGQjhBMkUzM0QxNDE4QjZCMTIKKzoxMEFFOTAwMDhDNUVFNzExRjA5QzM0NzI3OERDQjI0Q0YwRUMxRTA4NEEKKzoxMEFFQTAwMDlFMkJFMUZGNDg3RTFCQzIzODlGMEZCNjBFODYyODJDRDIKKzoxMEFFQjAwMDY4MkZFOTVGMDc2QjNDODEzMDhFREJCNzFFOTZGMzdEMTAKKzoxMEFFQzAwMEU0MjU3MENCMzZFMjhCREJFRjk0MzlCRkM2NzI3RDhFMDIKKzoxMEFFRDAwMEU3NDlDOTMwN0U4RDE4RkZGNjk1RkU0QTI3RDZBQjkxMUIKKzoxMEFFRTAwMDA4MEYzNTVEQjUxNEY3QzUyQUY5Qjk5MDE3RkUyMDNDNTcKKzoxMEFFRjAwMENENDJDRTY5RTc1N0QzNDRGQjI5OEUxQTIzRkFFM0E2NDUKKzoxMEFGMDAwMDU2RUJDRjkxQTZEOUY4MzlENUVENTM4RDFGNDZEQTNERDIKKzoxMEFGMTAwMEQzRDhFQUNGMzE0RTcxMUE5RTMzNjlGNTgxOEZERUNGRDcKKzoxMEFGMjAwMEI3QkJFOUZDNUI2NUY5NzhDRTc0NThGODU5Q0UwMTVGODAKKzoxMEFGMzAwMDIzREZCRjk2Mzg2RkYzRkRDMDc3Rjk0RjE2OTVBMDNGMUEKKzoxMEFGNDAwMDZFN0NEMjgyRUQ2QjIwRkZFQ0E2RTE5NDdGMkRFOUZCQjUKKzoxMEFGNTAwMDBGQkM4NUU1NUJGMzI4NUY2OTkwODg0RkNGRDVGMkY2OEIKKzoxMEFGNjAwMDA1NjU3NzRFQ0E4QzQzRjkyRkZBQzVGNTg0RkJGNTk4MzEKKzoxMEFGNzAwMDQwN0IwREQ0RjM4Q0M4MkFDMUY4RDE0QUUxMzczODc3MjkKKzoxMEFGODAwMDNGQTNGMjlCNDZEQTc5NDhFRTNDOTVGQzdFOTUzMUEyRDAKKzoxMEFGOTAwMEZDMDdCQ0RGMzc0NkZENDcwOUM2MTE1NzY2RjU0RTQ3MkIKKzoxMEFGQTAwMEZFN0VBM0U0RTVFMTk4M0YyQzdEM0U3REEwMzg4NkMyN0QKKzoxMEFGQjAwMDAyMjkzQzBDRjA1MkU5RTJGNUFCNEI3RTlFODI3RTk4NzIKKzoxMEFGQzAwMENBMEE5RTJGRjQ5NkFGQ0NDNjcyQzNGOUU5MDNEREVGMkYKKzoxMEFGRDAwMDhEMTFGQjlFQkVGQjZBNjI1REJGRTgzQjQxRjdEM0ZDNkYKKzoxMEFGRTAwMDE2Qzk4QjUzRjQ4RjM5NDE3RTA3NjY5MzFDRTgzQUYzRjgKKzoxMEFGRjAwMEZCMzIxNUY0NzM4RkYzRjEzOEQzMEFDQkQyNjQ5NDVGMkMKKzoxMEIwMDAwMEI3MDQ0Q0E1MTgyRkVDQjA4QzNBOEM3MTA0RjE2M0NBQ0MKKzoxMEIwMTAwMDQ3MjM1REM3NTkxOEQxMTVGODNDQUUwMEQ2RDdCNEFCNUQKKzoxMEIwMjAwMDNGMUYxQTg3Q0M2NUQzRjNCOUM2NDczNTFBN0Y1N0VBNTUKKzoxMEIwMzAwMEY5MThENkE3MUJEQjVGNEVERTBFQzZDNzMwRkVEMDAyNjYKKzoxMEIwNDAwMDVDNjdERkQzRUI5QkJFRkVBMkQ2NUI3NEZGODNDOTAxQjYKKzoxMEIwNTAwMEZDODk5NDhCRkQ3MDc0RDJCQTRBQzNFOEJENkM1Qzc3RUUKKzoxMEIwNjAwMDZEREFCQTFCODlGMzMwMTlCQUU5OUU0RTg2RTQxRDRFOUIKKzoxMEIwNzAwMDE3NTZDNzc4MkRBNDhGQTJFMEQ2RTA0QjA3RDlDNjRBNTEKKzoxMEIwODAwMDJFODUwQjdGMTRDRDVFRTQzRjZFRjQ0QkE0ODk3MjY4NkQKKzoxMEIwOTAwMEU3NjNBRTdFQjg2MEZDMUIxMDBGNkMzOTg3Njc4QkQ0RkEKKzoxMEIwQTAwMEMwRTU4NkQ4MUY2OEZFOEMzQTZEQkVGQkY1RjMyRDhCOEMKKzoxMEIwQjAwMEUxRjdENjNERTg3N0MyNzZFRTUxQzNCRjBERUU3QUExMzcKKzoxMEIwQzAwMDRGQTc1QUZDOEY5QTYxMEVCNzM5NjcxMTNGREMwMTFBRkUKKzoxMEIwRDAwMENEMDlGM0ZGNUI2QUEwMDZGMUQxMkMwNTVGRTlDOTI0MTUKKzoxMEIwRTAwMDdGM0NDNTc3MDBCRDI3MTc0NEQ4MDExQTVDRDFGOEE4NkEKKzoxMEIwRjAwMDFCNDQxRTQ2QzMxRDhEODc3RUZBNzQyNzYzQUFERDc3MjUKKzoxMEIxMDAwMEVCOUI1N0Q0N0NBMkVEMDJCNzQ5RUZDRjczMDlCRjlCRUQKKzoxMEIxMTAwMEFCREZDRjU2ODBFNUQ1MkNDNjRCN0UzNkFGNDRGQkE4QkYKKzoxMEIxMjAwMDZBRDBGMzI4NDdBQkFCMThGOTQ3NUMzNjAzRjlEOTM0M0EKKzoxMEIxMzAwMDdEM0YxODdGREY3MDNEOTczN0Q1MEI5OUI4NEZDN0U3MzQKKzoxMEIxNDAwMDExQ0Q1RjQzNThDRjgzRjQ5RTgzNDVERDM4MUJEN0VEODcKKzoxMEIxNTAwMDdDOUIyRTBFQkVEQUM2RkRGMzJCMEIyNEUxOTdFRjE5NzQKKzoxMEIxNjAwMDhEN0U4OUJFRkMyNUZFRTA5RUQxMjgzRkE2Q0JGQTczREEKKzoxMEIxNzAwMEFBRUE4QkRDMUZFQ0JBMjg1MTVBRUQzRDMxMUFGRDJDOUUKKzoxMEIxODAwMEFFQUE5RUQxMjg4NzFFMTlFQTVCODU3NDNENkVFMEZFNEIKKzoxMEIxOTAwMEYyNEJGQzE2MDUwNkNEMUY3QzQ1N0MxNzREMEZFREZDRDAKKzoxMEIxQTAwMDJGMjZDREJGMDFDNzM5MjM3NTk3NjFFMTg2MkM3MTNFRUIKKzoxMEIxQjAwMEMzMDI5OUM4OTc0RTQ3NjYzOUZBNzE0MENFN0RGMzBEQTgKKzoxMEIxQzAwMDZFMUVCMTA4RjAzNTI2MjMxMEMyNzY3NzMwRkY3OEJDQUEKKzoxMEIxRDAwMDZCRTlBQTBBMThGOTc5MDVBM0Y5MkYxMkYzMUYyRkY0QzYKKzoxMEIxRTAwMERGRjlDRDNDQUVBMkQyNTdGMDA0MUU4OUQ0MUYzNUIyOTAKKzoxMEIxRjAwMDEwQUQzRjFGRTlCMUZCMDRGQ0U3NDFENTg1QjFGRTJFNDAKKzoxMEIyMDAwMDNCRTlDMTc5QUZDRkEyNzg4OUZDMEQ4NkZFNzcyQkUwQjAKKzoxMEIyMTAwMEVGQjA1MDhDRUVERDhBQzI5RDJFNURCRUI4MzM0NTU3MkYKKzoxMEIyMjAwMDdGRTRGRTJDNURGOUE4RjA3MDVERjk1NTQ3NEI3NEY5ODkKKzoxMEIyMzAwMEQxREREN0VBRUE1RjdEQUM0Mjk3QkZBNjY3OTJBRUZFNEEKKzoxMEIyNDAwMEY3NEU0RkQ2RTVBRkVCQkQ0QjU3RkZBM0JFN0RCQ0QwNEQKKzoxMEIyNTAwMERGNDE1Rjc3MDFDQzdCQjZDNjlGMTc2N0VBREFGRjI5MkIKKzoxMEIyNjAwMDZFQzI1MUU0Q0ZEOUFCNzlGQzc3Mzk2MDQ4Rjc4RTQ3OEQKKzoxMEIyNzAwMDFCRDdGMzBERjAwN0U5M0I5RUY1NTJEQzVENUQ0OEYyMEMKKzoxMEIyODAwMDg2MTlDNjkxRTlFRDgwMDVGQjNCMDg4Rjk3QkJGNzlFQjkKKzoxMEIyOTAwMEVGOUU2MTQwRDNGNzgzMDIxMTZGNzIzNUJCOUFDNzhENjEKKzoxMEIyQTAwMDdFM0I1REYzNThDRURGNDU1N0IzNDc0RjU3QUJBQUE3NTgKKzoxMEIyQjAwMDZCNkM4MTlFQUU3NkFGOUVBRUYxNjNGNDc0NzVGQUY0NUEKKzoxMEIyQzAwMDc0NERBOEQyRDMzNUQxQUZBN0VCOTA2OTdBQkEyNjA3Q0YKKzoxMEIyRDAwMEY0NzQ0RDlEQUZBNzZCN0E4MzlFQUUxOThEN0FCQTY1RDMKKzoxMEIyRTAwMDA2RUZENTk1MEY0NjZGNEQxRTY2QjcyRUQyRDVFRkEzNEMKKzoxMEIyRjAwMEJCN0YzRUM1MTFFNUI2RkQ1OEQ3QkY0NkY3MjBGQzQxRTAKKzoxMEIzMDAwMEJBRTczMzExRUZGODNGQTQ3QkYyMzAzREJENDE3RkE0OTMKKzoxMEIzMTAwMDBDMUI0RDdBM0YxREQzNjlGOUMyQkVGNjBGQUNGNzM1NTEKKzoxMEIzMjAwMEY5MTNBOTY3MjNGNzk3ODNDOUE1NEJGNDhBRDg2RjBFNDEKKzoxMEIzMzAwMEFBNTdBMkY2OUJFRjMxRDA3QjM0Qzg2QUYyMUZERDI5RjEKKzoxMEIzNDAwMEY4RjM1MDBDQzdGQjE3NTg3NDBERDQ4MzNBNjMwMEFFNjIKKzoxMEIzNTAwMEY3MTA2RTE4RTdCRDk4NDJGMjBCRENDNTNBOEREOEZGQTYKKzoxMEIzNjAwMEREQUM5QkQyRTlBQzk3RDIwMDczOTAxRTlEQzlCQzk0MTIKKzoxMEIzNzAwMENFNjY3RTkzRjAxM0RDMzAyQzExRkQwNzNENjVBODg3NjcKKzoxMEIzODAwMDJGQ0M3OEVCMzg5RDJGQkQ5MTcwNDVFRjNEN0M4OEU3NDEKKzoxMEIzOTAwMDE4Qjk4QzlEMTJGMkUwMjQ5RTY3NDBGRUFDNTVGOEQzOUMKKzoxMEIzQTAwMDdDNEM3NTQ3RTBFRDk0RjBGQkNEMUMyNzkxM0U2NDcyMTgKKzoxMEIzQjAwMDBDQzU1OUNEQkM0MzIyN0QzMkYzRkZGMkY0OEU2MURDMjMKKzoxMEIzQzAwMDFFOEQ0RTlCMUIzNUZDRjE3RENBREE2MTJBQzlGNzM0MEMKKzoxMEIzRDAwMEQ2MjlGNDFFMEJEOEIyQTkxRjdFRkVGMEI0ODlGNjkzQ0QKKzoxMEIzRTAwMDFFMEI4N0VGNzk4OTI5NjM1Qzc0RUQ4Q0U4RUFCMTcwRjQKKzoxMEIzRjAwMDc4OUUzNzMyMEJFMkYzMzkxNjUwOTExODhGMjgyMEEyMkQKKzoxMEI0MDAwMEY4N0Q4N0UxQzgxRjMzRkZFRjVCNTlFODJGOEI1OUI1RjMKKzoxMEI0MTAwMDdCNkFFNTM1NzgzRTEyNUM0QUZFRUExRjMwQkRCRkZBMTIKKzoxMEI0MjAwMEVFMDY4OUZDRDUzRjAwMzgyMUY1MzhCQzFFRDQ5NzVBNkEKKzoxMEI0MzAwMDNFODhGMEMyM0MyQUIxMUU3QzFGRTI2OTkwRDAzRkY0RTYKKzoxMEI0NDAwMDBGRUI2RkNGOEY3OUJEQkZCM0JGQkU3RTE4ODcwQjdGNjkKKzoxMEI0NTAwMDkwN0U5QUZGQjFDMEMwRTMxNTdBRUZFN0ZCOTRFRDNGMTEKKzoxMEI0NjAwMDYwREM4RkQ2MTgyQzBGRTJGOUE0MEMxQjRBOEM2NzMyRDMKKzoxMEI0NzAwMEYyN0JFODZCODc2NUYyRkI2RUFDOUJGNkY5RUM4ODY2QjUKKzoxMEI0ODAwMDVGMDY0OEZFMTY4OTdCMEU2N0M1RjlERURDMEUwQkMzMkUKKzoxMEI0OTAwMDc4OTlBMkREMDc1RDc4OUUzNzE3NzhCMDFCRjVCMDEyNUEKKzoxMEI0QTAwMEEwNzc1NjhBMzZCRUU2RTJGRTM3QTMxM0VGMkY2QUZBN0MKKzoxMEI0QjAwMDdGNzAzRTU1RDhBOTg4RkIwMkMwNzcwRDAzRDkxRjdCNEEKKzoxMEI0QzAwMDg2RjM3M0ZBRTZBNkVFNjE3ODFFQTdDMUYzNzBEMzUxMzYKKzoxMEI0RDAwMENBQ0I4QTk3RTIwQ0YxMUQyNjY3NDQ3QjkzMUJDQTIzRDMKKzoxMEI0RTAwMEU0OUQ2MjgzRjYxMTcyQzg2OEYzRDM2MzI2Q0I5QkJBREUKKzoxMEI0RjAwMEU5OUNDRjI4REU4QjVBOTFCNkM4MTE4OEQ4QzdCRDMwRDkKKzoxMEI1MDAwMDhDOEZDRjJDNDFFNjQ4NjJDMjA0Qzc1NDM5ODU3MkVENTYKKzoxMEI1MTAwMEFGOENFRjY3Q0QxRUU4Mjc1MjdFNUU0QzY0OTE3RUZBQjkKKzoxMEI1MjAwMEQ2QTY2MzA0RUY3MjI5MTBDMDRFQ0MzOTJDNkMwNUZBRjQKKzoxMEI1MzAwMDk4MTVCQzczMEJERjM3REU3ODE0RTNBOTRDRjY0NURFQjMKKzoxMEI1NDAwMEIwM0EzOERFQ0MxRUU1NDJBNDNDN0Q3NTk4RDg0NzBCNTYKKzoxMEI1NTAwMDc5RkEyRjREQkQ4NTM4NEU3MzUzOEY4NjJGODZFN0E2MTcKKzoxMEI1NjAwMEMxNjQ3RThGQkVCOUU5MTNGQTZFQTg1Mjg5REY1RUREMzEKKzoxMEI1NzAwMDk4N0Y1MDg1RjJFM0YwMTdERkI1MzFCQjM5NUNFQ0EyNjAKKzoxMEI1ODAwMDlCRjRFQTc0QzEwN0U4MTM0QjA3RkUzOURFNjgyNDNFREEKKzoxMEI1OTAwMDVCOUM2RTIzN0ZGREUyMzc3MzBGRkE2MDNEOUI2MEJBQzAKKzoxMEI1QTAwMEYyNzc4MEJCN0YxQzhFMjc5MzkwQTdDMDRGN0U5NDBGQUQKKzoxMEI1QjAwMEE2MTQ4NUZDRjYyRUM3NjRBMkQzREZEQjlGODY1RjkzQkIKKzoxMEI1QzAwMDk1RDE3QjQ0QTY3NDFCRDkwNTU3MEFFN0I5Mjg3RDA1OTgKKzoxMEI1RDAwMDc4MjFGOUJGNThFMDQ1N0I1RkU5RjgwMzhDRjYwQjhCQzcKKzoxMEI1RTAwMDFGRTJGRUJCQzVCNThDRTJGRDU5MjNGQzk0RjVGMzhEM0IKKzoxMEI1RjAwMEE2NjcxMkYxMjUxOEY4RDhENjA0MkIwRUJBNzhBQ0M5NzQKKzoxMEI2MDAwMEMyMDJGOTYwODc2MDdDN0M3NjNGMUREQjdDOEExMzhGRTkKKzoxMEI2MTAwMEZBRDc1NEJBNkIzMDdENkNDQ0M5MzYxNDdGOEY4RkZENEUKKzoxMEI2MjAwMEIyMUI1M0Y0RDVFM0Y4OEUwNjE2NDJGQjk4Q0VFMDYxQzgKKzoxMEI2MzAwMDdDRTc3Q0M4QzNGODcxQTIzQzJFQzBGM0YxQTIzQzdFMkIKKzoxMEI2NDAwMDFBQ0ZBN0ZCNUU5MDJBMTFCMEE4NzNBNTc0OUI2QjYyRkEKKzoxMEI2NTAwMDBFQ0FFOUQ5OENERkI3MTZFRjJENkMxMUZBMjJENUU2QTgKKzoxMEI2NjAwMEFBQTlDNEYyQkIxOUREQkZEMENBOUYxNEU1QzlCNjBGQTEKKzoxMEI2NzAwMDVCQjM1MThGNENENUI3REYyOEYwMzBDNEY2NjFEQjM4QUYKKzoxMEI2ODAwMDNBN0ZEMjk3NkJFNzNCODlCNkYzNDdBOTdEOTFCRTdDQTEKKzoxMEI2OTAwMDlENjg2RkI3OURFRjFFODdFNTM5RkFGMTFGMTVFNUIxN0IKKzoxMEI2QTAwMDM2MkUwRjk5OUZGMTc3MDE0NEY5MjNBMkRDOEFFNTM4MDEKKzoxMEI2QjAwMEJFOTc5N0NCREFGQjE3QTJERTRBMDEwN0M2QjY5MUZGMDkKKzoxMEI2QzAwMDczMThGNzdGNkU2REIyMTQxMTVEOUEyRTEyN0QxRTZCOEEKKzoxMEI2RDAwMDYyOTQ5RjM0RENDNUVGNjU1NzcxN0NCQkRDOUMxRjFDRkEKKzoxMEI2RTAwMDhENkNDMEY3MDAyNjBERTdGQkFBMzhCNUM3RTcxQjQwRjUKKzoxMEI2RjAwMEVFNjlFNTJFMDc3RkVGNDBGNjk4ODg5RkNDMzYyMTM3MUMKKzoxMEI3MDAwMEM0N0FFQzkzMUI1MjgzOTczMzE5Rjc5NzVGOEVBRjYxMUUKKzoxMEI3MTAwMEExNUQ0MEZCNjgyOEZDMjA1RkE3M0Q2MDYwODEwODc5M0YKKzoxMEI3MjAwMDk5QjIzMDg2MDUyMkVBN0I2NkJCNzRGOUE0QkI1Mzc0RDgKKzoxMEI3MzAwMEY1REQ1M0IzNzRFNUI2RDJFMUJBNzIzNkQ1NDVFQjY2QTIKKzoxMEI3NDAwMDkxRTBBRjk4QTIxMjVEQjlGNjBFMDNEQjJFRUE4OUY1RkYKKzoxMEI3NTAwMDZCQ0NCOTU2NTdFRjdDODExQThGM0M3RTZBMjJFODFGNkEKKzoxMEI3NjAwMDhBMkJGMDVBNTAzRTJDQjI2NzBENDFGREYzNUNEMzE4ODIKKzoxMEI3NzAwMDQyQ0VGM0IwQUVDMDY4NjVCQjlDM0NERTdDMTc5RUUzNTYKKzoxMEI3ODAwMDQxRjlCRjM2RjlFOEZCMEUyODU3MjE3RDFBRDY5RDBBRUMKKzoxMEI3OTAwMEY1M0I5QTFDOTQ3RkFBQzk0M0U5OTYyNjk1RDIyNzlCMkMKKzoxMEI3QTAwMDBBQTg3QzYzOTM5N0YyNEY0MEZGOThBRTgzN0VGMEZCMkMKKzoxMEI3QjAwMERBQTYyQUNBQUY2OUYyNTNGRUYxQTY2OTk0N0ZCNDI5Q0EKKzoxMEI3QzAwMDQwRTkyMzRERjNFOUZCQ0FBNjA2Q0FBRjY4NkFBNEY0QjAKKzoxMEI3RDAwMEUxQTYyMEE1Q0Q0REFENTQxRTE0RjRERTI1RUVBRkVFNEUKKzoxMEI3RTAwMDJBRTdGN0QyQTNFOUY4RjA3MDQ5Rjc1RTlDQkQzRjdFRTcKKzoxMEI3RjAwMEU0RTFFMTE4M0ZEMkQ5NDM3NkI4MTYzRjgyRjNBNkZFQzIKKzoxMEI4MDAwMEFDN0NGRUQxRkQ2RDFBQ0VGRDA5QzM1OUY3RDI1OEJFRUUKKzoxMEI4MTAwMDlFRTk5QzM2NzdCRjc3NTkyQ0YwN0Q2QTAzQTc0M0U2RjMKKzoxMEI4MjAwMEZFNUUyQTRGOUVDRjY5QjE0OUU4NjVFNjBFQjJCNDMyOUEKKzoxMEI4MzAwMDNBQURBNzdBNjdBNUVFOEE1ODdFQkU0REZFMENFNjgxMkEKKzoxMEI4NDAwMDc5OTY4OTc3OTI4OEVENDIwNjg0NEIxOUMzRjVBNzQ2MEQKKzoxMEI4NTAwMEQ3QkU3OTNCMzk5QzM4RkY4MUUwREQyMUUwOTU0QjNCMzkKKzoxMEI4NjAwMEY5RkIyNzU1NkQ2MTY0RkIxODVGMDNCRDdGNjI5OUU2QTQKKzoxMEI4NzAwMDBGMkI5MEJBRkQwMTdBOEY2MUY4QzUwOUIwMzkwMzc5QjEKKzoxMEI4ODAwMDczRjE3QUE2NDI5QUI2NTBCRjZGNEI5OTVEQTJEQjE3NEYKKzoxMEI4OTAwMEM5MTcxRjYzMkFDODAxNUI5MTdFN0YxNTkzQjM0OEQ3RjAKKzoxMEI4QTAwMENFOTJGNjYzNURCOUM5QkQ0QzU3M0VGM0JFQ0NFNTFFRTIKKzoxMEI4QjAwMEM0NjcyQTNGRTczMUFGNUVDQTkyMDFBRTM5RUQ2QjA4MkIKKzoxMEI4QzAwMEFFNzcwNDFEQ0Y0QTJBRERFMzBFRUVENkUyMUVGOEZFNjcKKzoxMEI4RDAwMEUyNTlBMTVGOTg2NTM1RDk2M0Y5NEU5RUNEOEIwRjFBNTkKKzoxMEI4RTAwMDUwM0Y3Q0Y2NkZGMTI0OTc5RTc5Q0ExMDQyN0YyRTg4RDQKKzoxMEI4RjAwMDI3MDNBRUZGNDIzMEZCQjBCQzk4RjU1MDFFNDM1NjMwRDQKKzoxMEI5MDAwMDNGOEFBOTMyRTZBRjYyQkRCNEJGODJGREM1RUY4NjYzNTAKKzoxMEI5MTAwMEZDQTgxQzc4Q0EwQUY5MzNFOTgxNjc3OUZDNUE5OEY0QzMKKzoxMEI5MjAwMDY3OUVBMDY3OUVCNjlGREFBMDQ0RkI3OURGMUE0RTdDMjMKKzoxMEI5MzAwMEE4QkZDN0Q2MjJGNjE3MkQ1NkVFN0Y1QkVBMkMxQjgyRDYKKzoxMEI5NDAwMDc2RUJEOTQxRTIwREVEOUU1NzhGQ0MwNjdDREI5MzBGNTEKKzoxMEI5NTAwMDUyQUE3RDdGNTQzNTBDNzg0RkZCOEY1MUZDM0YwQzk4RDkKKzoxMEI5NjAwMDVERjBGRjFGMTE5RTMzQTU2RjI3QTExQkFBMkVBNzk3N0QKKzoxMEI5NzAwMEQ2QzE1OUM5RTc5OTgxRjg3RDVERTZGQzA4M0IyRTlDNEMKKzoxMEI5ODAwMDlGMjJGMEFCRUMyRUY3Q0MwMDNDMkE2RjY2N0I4M0FDOTkKKzoxMEI5OTAwMDdGOUM2NzlBOEU2NTYzM0M4MDk2Q0YxM0YxQjIzQjlCODgKKzoxMEI5QTAwMDkyNzMyQTIzQkUzQjBCMzkzQzA1QUNCQjBBRjU1NTQxQ0IKKzoxMEI5QjAwMDkxQzExQkMyOEU3RDBFOUQxRkMzOUFEM0U2QzM3NzA3MkMKKzoxMEI5QzAwMDk0MTJFNjQ1MzEzNzhDQjUyRDQzRERBREZDNERBNjc4OUMKKzoxMEI5RDAwMDI3RTVEMDM1NEM4NUZEOENDRDE2NjYxODFGQTZGNUNCMTYKKzoxMEI5RTAwMDg0M0ZFNDAxMjEzN0JGNzQ1NEM2RDM3QjkyMjk3REYyOTIKKzoxMEI5RjAwMDBGNzUyNEZCRDJFNkVCNDYzRUZBQjJEREM4RTc3NTQ4ODgKKzoxMEJBMDAwMDVGNUU2MEUzNzE1QzczMEI0QzIxNTVDMkY3Q0JEQUU4RTMKKzoxMEJBMTAwMEJENDQ2NUFCQzREMjMyMTE4RTcxODQwN0I2MkY5NkY4M0YKKzoxMEJBMjAwMDMwNzZDMzA4MTY4NEY1NTJFQTBDRkMwNUY5RTQ0QzU4NEMKKzoxMEJBMzAwMERENjdDODE2M0MwOUY1NkEwQjREREJEMDNFQ0I0N0JDMzEKKzoxMEJBNDAwMEQ4MTAyRjc3RTY1NEUyRDAzOTA1ODRERjM5NjJERTc5RTkKKzoxMEJBNTAwMDg1N0NCREI2QTQ0N0MxQzNCQzNFN0M1Nzc0NkVCQkU2QjMKKzoxMEJBNjAwMEM3RDFDRkYzRDFEMjhBNUJGMUZEQzVFNjZFOTlBQkI1RjQKKzoxMEJBNzAwMDI4N0NBRTMyNzY4Rjk4MDE1RDlGRTkwMUI4NjQ4MjMzRUQKKzoxMEJBODAwMEFGMTBFNUMyODYzMjE2MjQzRENFRTc1N0ZCOTRDNDM2OEMKKzoxMEJBOTAwMDY1OTI1Q0FBMjIzRDNFREFDMDIyQ0YzMUI1QjRCODkwOUYKKzoxMEJBQTAwMENCREY5Nzg2RjNGN0RBRUM5RTIzQzQ4RkZERjlDMzQ3MEIKKzoxMEJBQjAwMDY2MDMzRTlFMzNCMDAyM0FCRjM1RjBGREIxMTYzNzIzMjAKKzoxMEJBQzAwMEEzMUYwMEQyOUYxNDZBRkVEMjE2MzYwOUY1QjZEMzQwRTIKKzoxMEJBRDAwMDcxQTA3MjQ3MENERDRGOTU5RDBBQzU5RkI3RDgyQTFERUUKKzoxMEJBRTAwMEY3NjIzRjBFODVDRTZCMjZDODYzQkJEMThFMzYzQjBEMDkKKzoxMEJBRjAwMDU3QTExRDdFNzhEQjhGQkIzMTdFNDc0RTU3MThGQUJEQUMKKzoxMEJCMDAwMDVBMUMwQUI3NDNEMjBDMTQ5N0E3MzgyQjJENzhCRTkzMzIKKzoxMEJCMTAwMDY3M0I1OThFRjgzQ0Q4RjE0MzdBOEY0MTdFNTBDNENFQjIKKzoxMEJCMjAwMDA4QkY5ODUxOTBBQzg1MzU1MEZGQzEzNDQ1QkNFQkUyNUQKKzoxMEJCMzAwMEFCMUU5NTI0OEUyNjU0REMwRjU1N0Q4MkZCRURDMzhFMDMKKzoxMEJCNDAwMEYzNTZEQzE3QThCNkI5RTQwRkFDMkJFNEZCNDQyMzlFRjQKKzoxMEJCNTAwMEUzNDFGRUE5MjVFNzlEMjhCRjVFRUY1OEVFQ0E0NDdCNkUKKzoxMEJCNjAwMDNBQTQ5MDJENTJGMDc1NzMwQUJEM0JEMDYxQTI3NzExQjMKKzoxMEJCNzAwMDM0QkM2NjA0MTVERDc5NjA3QUEzM0U2RjhFM0ExNzM0QzMKKzoxMEJCODAwMDQ2REQ0NzlCODVFMzkzOUY3ODFBMEI0N0NDQzdFOEUxRDYKKzoxMEJCOTAwMEZCMzdFNkI2RDFGRUE3QUU1MEJDODcyOUYyNzMzMDBGNTMKKzoxMEJCQTAwMEE0RDg2OTBDQTY3ODAxM0Y4NzNBRTY2NkUwQkMyRUJDQjMKKzoxMEJCQjAwMDE0QTBGOEVGQzFFQ0ZGRDI0MjU1OEMxN0I0MUFFOEZEN0YKKzoxMEJCQzAwMEREQjAxNUUzQzFCNzM3MzEyRkRBNzk5NjkwNDJGMUY4M0QKKzoxMEJCRDAwMDNCODQzQ0NCQjE3MUZFRjcxNzcxM0U4RjRFNzNEQUY4QTAKKzoxMEJCRTAwMEJBNTM3NkM1ODQ2MjkxNkU4RUNFOTIyMEFDRjNDMjU3NjIKKzoxMEJCRjAwMDI3MzIxNUY0NjA4RUMzNjc0MDdGN0M0RUEzQzk4QkY2NTUKKzoxMEJDMDAwMEU3ODQ1RkRBODg0RkNFREI3ODNDOTVEMkY4ODg4QURGMEMKKzoxMEJDMTAwMDlCQjc5NTE1NDRERUIzMEIzNTM5QkMyODlGQjYzNTU5MTMKKzoxMEJDMjAwMEJDMThBMzFFMUE0NEJFNjYzQjBEMTRDN0FFMUE3ODVDM0UKKzoxMEJDMzAwMDY1QkI1ODhGRUQ4NUIxOTRBRTE1NzJFNjY5MjUzODE5NEMKKzoxMEJDNDAwMEUxN0MxQUU4ODlGMUYzMDc1NzczRkI3OEQxNTIwQkMxRjUKKzoxMEJDNTAwMEIxRThGNTZDQjJBRjA2QzNEQjMzNEQxRTZGMEVDMkIzNTUKKzoxMEJDNjAwMERBOTA4MkZFQUFGMjk1MzlBQkYwOUQ4QzQ1NzZGRThFNzUKKzoxMEJDNzAwMEIwMUMzRjlDRkNCNkVDNzc0Njg2RjY3QzczRENCNURFRTgKKzoxMEJDODAwMDU5MTFGMjVEOEUxRjVCODA3QzI1Q0JDMTE0RjRFN0ZDNUIKKzoxMEJDOTAwMEJDRjBEQzZEMTg1NzBCRjREQjg0RjlERENGRkRFMTM2MjkKKzoxMEJDQTAwMDhDQTNERDY5MEZBNjYwOUNFRDRCQ0ZCRENGQ0IxMzgzN0EKKzoxMEJDQjAwMDlCMzBDRUY2RTA3M0M3Nzk3OTdBMzBDNTAwRjlENzlGMEIKKzoxMEJDQzAwMEZCOTA5N0U3MDYzNzYxRkVBREU3NEVGMTcyM0MwMzAzNDgKKzoxMEJDRDAwMEQ5RjlERTczOUZERTE2NDQ3RjhCQzkzQjFGMDVGMjJGMTcKKzoxMEJDRTAwMDAwRkUyMjU4NjI5RDIyRkQ0MEUwNDUyQjdGMDFCRkMzMkMKKzoxMEJDRjAwMDA2NkM4RjQ4QTNDQkY3ODk3NkZCMDcyOUZGOTUyOEVGQzEKKzoxMEJEMDAwMDFBQTRGRjAzQTI1RDc4OTBGNjg3NDRCQkMzODNCNDNGQjcKKzoxMEJEMTAwMDIyREExRDFEQTRGQ0I3QTJGQzhENDFGQUZGNzdEMUFFM0IKKzoxMEJEMjAwMDdCOTBGNjZGOEI3NkVGMEVEMkZFMEZBMkREQjE0MUNBOEIKKzoxMEJEMzAwMERGMTdFNUZGMTlENUZGNzE1MUJGNDc3Q0NGQjJBRjdFNEEKKzoxMEJENDAwMDFGRkRGNzU5MjA0NzUwMkUxNUQ4NTdCQjcwOUQ2RjZCQkMKKzoxMEJENTAwMDJEMjVGRTZGMkVFM0U3NTQxQUJGNjc0OThDREVGN0FENDEKKzoxMEJENjAwMDJFRTJFRjhBNTUxNzcxRjlGQjY3RDEzRkYwRTFFM0M4ODYKKzoxMEJENzAwMDc3OEJERTk0MjlBRUE3RDlFMDNEMUQ0MjM5QkFDQTQwN0YKKzoxMEJEODAwMEY2QzBBMkQ3Rjk3RTdERDE0QTI1MTQ3OTJGRTdDRjUxOEQKKzoxMEJEOTAwMEYwMkY0N0Y4ODA3MTVCMzA4NUY1NzZBNjkwQzdGNTlCNEMKKzoxMEJEQTAwMDNEMUU2Rjc1ODQzQzMzM0FGNDc5OTAxNzBDRTUyRUM4MkMKKzoxMEJEQjAwMDZGOEFERjJFNTg1OUQxNUEwMEY5NTQ5NzgxMkMxMEE1NUIKKzoxMEJEQzAwMEQ2MTJDNkY3M0ExNEJCRDAwQjhFRDJCNjAyODRDRkE2RDkKKzoxMEJERDAwMEQwM0IwNTlBOUM2NzM2OEZDRUFGRDE2MjUzRThERDM2RjMKKzoxMEJERTAwMEQ5Q0VDQjI3RkM3MkFDMDNFREFDMTYxNkU4RjY2MTdCMUUKKzoxMEJERjAwMDhGNDI3NkZDQzFENjEyMDdDQTNEOTM3REI2MDNEN0VGQkEKKzoxMEJFMDAwMEJCQzU3QzVFOTU3NTA1MzEyOEFGRTU0NzBEMjRCRjBGOTYKKzoxMEJFMTAwMDNCRjg3QURGRUFFMUYxNEVBMDU3RTg5RTEzQzg2QjJGOUEKKzoxMEJFMjAwMEVBODg3QzE2NUU4QTcyNzNFNzYzRkI2NjcwM0YxRkIzMTUKKzoxMEJFMzAwMDhGMkFBMzdCNDREQUY5QjZBNDQ0RUMwM0FFMkJFMkY4RDQKKzoxMEJFNDAwMEM5MTA3QTQ0NDFGRDAyRTlEM0E1RTJGRTRCOTBGQkEzNjEKKzoxMEJFNTAwMDMyMTRFNjQ5OERCOEM3N0I1RDkxQ0NFRjFGMjk4ODIzNEEKKzoxMEJFNjAwMEU4NEJBRUE2RjdBQjg2MkU1MTc0RTcwODY5MEZFOEYzRUUKKzoxMEJFNzAwMEE2MjhCREExNDRFOTk1RUM1NjkwOTNCQUYzMTM4NzJFRkEKKzoxMEJFODAwMDVGNTQyNEZDM0M1RUU2NDUzQjc2QzIyRjU3OTMzQzNDMTYKKzoxMEJFOTAwMDhGRkE0RDFBNUNFRUY1Qzk1RjIxOEY5RjQ2MDRBMDFDRjYKKzoxMEJFQTAwMDBERjI3QkU0MDc1Nzk3RkMxNkU5QkQ2OEE1ODFERThEOEUKKzoxMEJFQjAwMEJFNTIzOUZBNjc4NDA1RjA5MDFCOTA0ODJGQzA4NDUyMTcKKzoxMEJFQzAwMDcwREY3NDM5M0NFNDFBRkQyRTdBNTdFMzMyRjhDODVEMEUKKzoxMEJFRDAwMDU3RUE0Mjc5OUIxQjUwQThGRjRCRjRDNjY1RjBGNUJDQUUKKzoxMEJFRTAwMEU0M0QxNjQwM0EzQTYzODQ1RDBEMEM4MDdFM0I1NzRDMkUKKzoxMEJFRjAwMDA3QzYxNzlCODQzRjQ1OEIxNzU2ODYyOEZDNUQ3QzcxQ0YKKzoxMEJGMDAwMDVGNTUxNjdDRkMzMEYzQTlBRTZDN0MxN0E4ODFGQ0ZCNTYKKzoxMEJGMTAwMDhCNzczRkUwNDFCQjdEODUyMUUwQzBGQzUxRDdBNDVFMUIKKzoxMEJGMjAwMDFDNjcxMTZDRkExMTdGM0JCMTBGN0ExRkYzQjdCN0ZCOTcKKzoxMEJGMzAwMDAwRkVDRTkwNDk3QkJGMzI4Q0ZGRUNDNjM4MjBFRDdERjEKKzoxMEJGNDAwMDRDMEZEOTZCQTJGRUI1Qjc1NzAyREUzQjE1NDcyMTlBQkQKKzoxMEJGNTAwMEEwNEI3NzVEQjdERTc4MURENDM3QjFCRUZBNzhFRkVFMkYKKzoxMEJGNjAwMEI5QzMwNkYxN0VFNkI4RjU5NTIwOTc3NkM3MzBEREZCQkMKKzoxMEJGNzAwMEEwQkJEMUNGNEVGRDRENTg4RkVGODFDMjc4MzdDOUIwRUQKKzoxMEJGODAwMDM3NUI1Qjc0RjM3QTVCNzIzRjNDRUI4QUE3QUM1RjhBRUEKKzoxMEJGOTAwMDBFM0JCMTRGNzEzMkZFQUVGQjE5QjUyNzBFOTcwRkVDNzkKKzoxMEJGQTAwMDU3N0U1MjA0RjRBREVEMzg5OTE0Qjk1RkQ3RUFDNzhCQzgKKzoxMEJGQjAwMEZBNzU1REJENzVCQjU0QUFCRjk0RUFFRkVGOEQyQjIyRDUKKzoxMEJGQzAwMDdDRjc5NjQ1RDY4RjEzN0U4MDg4RkEyQkJFQUQ3RTgxOTYKKzoxMEJGRDAwMDA2Q0ZBRUI3NkYyRkUyRjUxRkM1RkE2N0Q1OUUyNDhBNEMKKzoxMEJGRTAwMEFEODk4MjI3RTFEMkZFRDc3RTVCRkZDMzQ1RkQzM0UxRjkKKzoxMEJGRjAwMEI3QTlGRTU5RDY5MzU0OUM0OUVEMzY2MUJCNzM2RkJDMEIKKzoxMEMwMDAwMDVEMjZFNjlEODRFNzM4RUZEQTdDNEYxNjgxNUM2QUMwRDYKKzoxMEMwMTAwMDNFRDA3RTU2MUE1NEZDREU2OTY5NzNBMEZENjYzNUI2QzMKKzoxMEMwMjAwMEY5NTEwRUU3RTAzQjVGNjNGQUQzQURBODNDNDY1RkZBRjcKKzoxMEMwMzAwMDNEOUE5RjNCMkQyQ0ExMUFGOUI1RDE0MEZCOUJGRDNEQUMKKzoxMEMwNDAwMDg2NDc5MDJGQjdBNjhENzVFMEZFNzlCN0E5QkJBNDA4RTcKKzoxMEMwNTAwMEVERDdCRDM2QjI1RjBEMTk5RjU5RDE2RjZFQ0VFN0VCQUMKKzoxMEMwNjAwMERGRUE2Q0YwMTY0MURFOUE1RTQ0RUY3NENBMEYyREVBRTcKKzoxMEMwNzAwMEE0RjdDMjdGQ0FERkQxNTI3RTY2MEE2QzQ3N0UwQzJGQkUKKzoxMEMwODAwMDJBOTgxM0IxQkVENzE1MUIwOUJFOTVBRkQ5NTZFM0ZFNEEKKzoxMEMwOTAwMDYwQTVEMURCOTY4Rjc2Qjg1REExRjg0QkU1NjdGQjI2RUUKKzoxMEMwQTAwMDkxN0RGODBCMDMyM0Y5MEZGM0FDODA3RTVCNjYyOEY0RDcKKzoxMEMwQjAwMEZCMEU0RTE0Q0YzQzU4NDRGOEYwRkIyQkEwREVEMDQ0Q0UKKzoxMEMwQzAwMDQ1QzI3QjNBMEYyQjdFMEI5RTc3OTg4NTVEQjdENUNCMEIKKzoxMEMwRDAwMEVGNjk2OUUzN0UyQ0VDQ0Y4RjhCRjhCQkVFNUJEMzJFNDAKKzoxMEMwRTAwMEJDMzdDRjhERUYzMDk4RTg3RUE1NkRBMTIxNkM4QUMzNTcKKzoxMEMwRjAwMEZCNjZEQjRFQ0Y0MzdBQzZGNkFDQzRGQkM2MzEyOThBNTkKKzoxMEMxMDAwMDAzRTdGNzY0MzU5NEQxQjk1QzI3N0QwRkQ2MUE2OERGNTEKKzoxMEMxMTAwMDkwQjBEMEUwNDNGRjYzNEM4RTQ5RTdFRkIwQzEzODkxNTcKKzoxMEMxMjAwMEZFOTA2RjhBMDNDNzEwRUVBQkRFNTQ2RTQyM0M3QkVFOEUKKzoxMEMxMzAwMDM3RDAzQkE0OEY3QURFQjUxODAwQ0VCODUyN0Q3QkM3Q0UKKzoxMEMxNDAwMDU4N0Q3QjU3QTVCRURDNURBRDJGNEY5QUFBMkZGN0RDM0IKKzoxMEMxNTAwMDZEOEFGMkVCRThGMzMzMzRCRTAyOTk2MDAzM0QxNUMzRjgKKzoxMEMxNjAwMDhCNTg4Q0VENDIxM0VFN0I1NkJDMTZDMzg4M0U0QkQ2RTMKKzoxMEMxNzAwMEI3RTVFM0ZBOENFRDI1N0NDNTBDOEYyMUJGQzA4QTY0M0UKKzoxMEMxODAwMDEzQzlGNTE1QzVEQ0FGN0YyOERENzQxM0U1NjE1RUM4MDIKKzoxMEMxOTAwMDFGNUJEMzhFRDA3RUU0MTJCQ0Q4NEU3RjhERkREQjU4NjIKKzoxMEMxQTAwMEM0NzdCNDMzOEE3RDdGMjkxQUNERjM5RTMyRjRFMzMxMEMKKzoxMEMxQjAwMDkyODdDRjRCM0VFRjQxQzRGNzVCREM1RkIxQjU5MUZCOUIKKzoxMEMxQzAwMEIxMUY5RENBRTMxMTY5MDY2NUI4REU3OUZEMzhDQkVBNzcKKzoxMEMxRDAwMDZFREM5N0M1RDk1QUVGQzczOENCNjhCQzI2ODlGMzg2ODEKKzoxMEMxRTAwMEFENzhDQjE2RjkyRUMwREY2NzVFQUVERDc3QzJFRjY1QTYKKzoxMEMxRjAwMDc0N0I4MURFMUYxQjNGODJGMzhCNTNEODA5RjE5RTg0MzEKKzoxMEMyMDAwMEEyOTY4ODdCMTM0OUMyNkZGMkY4RDg5OTU2RDQxRkJCMDcKKzoxMEMyMTAwMEM1N0IxRTdERkRBOTM0MjgwRjNENDVCRjcyQjEyNEY2QjQKKzoxMEMyMjAwMDUzQkNGRDdBRUQ5QzQ3RTQxMzlEM0NCRkZCQjBFQjI2NkQKKzoxMEMyMzAwMDVDNUZFQkE3QkE0QTcwQkZCRjQyRDg3N0YxNjkyNkRGQ0YKKzoxMEMyNDAwMDMwOThEN0RBQTNBNkEwMzQxMkYyMEEzQjZDMDRCQjYwODQKKzoxMEMyNTAwMEI3OEI4RjZCN0EzRDI2ODhGN0YzRDY3QTRBRTlCRURGMzMKKzoxMEMyNjAwMDc1NjJCQzE3Q0FCREVGRTA3QUVGODU3NTg0NzE1RjZCQUMKKzoxMEMyNzAwMERENUU2Qjg5MzgzNzBEMDI3QzY4NUFFMDNFRTU2MDc1RkIKKzoxMEMyODAwMDA5RUQ3N0Q3RkFCQzU2RDQ5QjZCRDNCQzU2OEM5N0I2QzYKKzoxMEMyOTAwMDI2MkIwRThDMDc3NTc5MTQ3QThGNkRBRDI1RTA0MEZCNDcKKzoxMEMyQTAwMEM3MDU4QUQ0ODRFNzQ5RTk2RDEzRTk5RTFCRTBEQTUwOUIKKzoxMEMyQjAwMEM2OEYxQTk4ODgzM0M0MzhCRjA0ODFDRkFEOUVEOTBFN0IKKzoxMEMyQzAwMDdDMUZDMTlEQjNFNzQ3RThBNzRGQzBGRUUyNzgzQkM0OUYKKzoxMEMyRDAwMDkzNTNFMDY5N0NCMTRBNzBCQjQ1RkYwOUIzNUZBMEZBOTQKKzoxMEMyRTAwMEY4RDM1MjE2RDE5RkEwQTM2OTIyMEJFMTNFNEQxQjVGRUMKKzoxMEMyRjAwMEVCQTdBRjdGRTZBMzczODBFNUJGRTU3ODVCOUFDRURGNUYKKzoxMEMzMDAwMEExMzJEREM3NjgzRkY3NDI3OTYwMjdGMjU5NkY3MjBDOUUKKzoxMEMzMTAwMEM5QkIxNDRGNEEwNUYyNTFDQUQxNEQ5M0YxRkVDM0YyODUKKzoxMEMzMjAwMERGQzZGMDcxRTY3MDdFNEY1MTk4RTU3QTlDNzc2MkMwNjcKKzoxMEMzMzAwMDgxNzg4QzVFQUZDOTg3REI2QTkwMjkzNUJBNDRBRkRGNUMKKzoxMEMzNDAwMDY0ODVCNUNBQUU0QkQ3NzFCMkM3NUQ5MTM3NjI4MEY1Q0YKKzoxMEMzNTAwMDFDQjU1RTkyOEZGNjNFODhGRDQ3QUZFQjJEQjFDNzQ3MDcKKzoxMEMzNjAwMDcxM0QxMkYxNURCRTdDQkU0NUVBNTk0OTcyMzg1OUExNTIKKzoxMEMzNzAwMDc1OTYxRTM1MUVCRTY3ODc3OTg5MTk1NDhDNEY1RTU3OTYKKzoxMEMzODAwMEVDRDRERUFENTIxMUFGQkI0RDhFNzEzNjdFREU0RUZDNkQKKzoxMEMzOTAwMDU1RjFFMkVBQkI3RTA3RjkwQkY4N0I3M0EwNTZFQUQxQjAKKzoxMEMzQTAwMEI2NkVEMjhCRkIwM0Y5NTg3RkIzMTI3ODBBRkRFOTlCNzYKKzoxMEMzQjAwMDhGMERBMTc3MjJDREIxRkM5RDRGNTNENEJCMjU5QUJFRTIKKzoxMEMzQzAwMDU4NTdDQ0Y3MzE2QUQ0RkI5NkRGMzVFRDRDNEIyQjc0QzQKKzoxMEMzRDAwMDAwQ0ZBQzdCRkVCNzdGQjAyNEZFRTNFRDlGQjRDMzlEREUKKzoxMEMzRTAwMDRCNkRCMEE2QjdFQ0JBNjUzREM2NDc1QURGRTRFNTlCOTYKKzoxMEMzRjAwMDIxMUY1NDEwMkYwQkM5RUY3MjY4RThCRDM0RkZFNkY3MTgKKzoxMEM0MDAwMENDRTRDRjJBOTZCRDFCMzBDRjNFQjA5MjNGNkVFN0RFMjQKKzoxMEM0MTAwMEIxRDM3MDlEMzREQkNCNTRCNEY3OUYxMUYyNjdCQjU4OTYKKzoxMEM0MjAwMENGRDFGMzkyNERERTAwREEwM0QxREZCNzE2OEI3MzA5NUIKKzoxMEM0MzAwMEU2M0RENjAxRjQyRDdFREE0NEVGMjVGNUM1NDc3NDU4NjQKKzoxMEM0NDAwMEY5RUYzMzEzNzZFODZDMjFDRjY2RUY1QjM1RjQyMEMzNDgKKzoxMEM0NTAwMEY3MzA2QUY2MTVDM0I4QjNFRDk1NDkwODRGRUE0NTg5MzgKKzoxMEM0NjAwMDA1NDBGRTZEMTZFN0IzQTlFRTE3MjQ5NDMzNjlFRUMzQjkKKzoxMEM0NzAwMEU1MjhFRkQzNTlGNzUyOTQxQkU5MERGQUYzQjJENDhCQTgKKzoxMEM0ODAwMDBBQjVEQjlERTJBM0ZFRjAwN0VGMzk5Qjk4NThEM0FFQzcKKzoxMEM0OTAwMDAwNUI4QTcyM0U4NTlGQjc5ODFDMzFGQzdFQkFBNzUyMUEKKzoxMEM0QTAwMDc3OUY1OTdCNDdGNjU1ODEwRjEzRTBENDU4MDJBOTRENjkKKzoxMEM0QjAwMEUxRjdFN0EzRUExRjE1Rjg5MkQxNkY4RkNFN0ZDNzkxRkUKKzoxMEM0QzAwMDYzRDRBRjRERjkyQ0YyNUQxNkRDOTc5MkQwNUFDOENGRTkKKzoxMEM0RDAwMDNGMDE0RjQxREM4N0IyNzgxNzNGMkZGNUY5RDRDOEI4MzgKKzoxMEM0RTAwMEQ2NTQ5MEJCRTYxMjhDM0YwOTUyOUM0OEIyQjg5RkEwMkMKKzoxMEM0RjAwMEM1RjUwMDA2OUNFODc3RDNFMjNFQjYzMUJEM0RBMkE1NjYKKzoxMEM1MDAwMERBRkUzQ0E3NTFBNjdENDdFMUFCNTZCRTNGNjg2NTIxRTgKKzoxMEM1MTAwMEFCODRGRTMwNDY3MjI3NjczNTNGOUZENkZDNjJENUI4QTQKKzoxMEM1MjAwMDk4NjgzRDM4MEMzQ0ZFQTc5M0UyOTkzNUJCMEFFODRCNkUKKzoxMEM1MzAwMDcyNjc2NUQ0N0I0RkRBN0JENTVGODhGNUI0QjlDOTQxQTIKKzoxMEM1NDAwMDc0RDRDQUQzMDJEMTc0RDQ5RjczNkFGNTUyMkZBNkIyQTEKKzoxMEM1NTAwMDQwNDI2NEJGMjFFQTM3QjU3MTBGRjE0M0VBQzVBMTU0RTcKKzoxMEM1NjAwMEJFQjk0OUJENENGRjU5ODNGNDlGNENGQzMyNzhGRjY5M0EKKzoxMEM1NzAwMDU0QkUyNUZDQUVGMzE2NDBDNTkzQkQ3QjlDN0UxNUU1RUQKKzoxMEM1ODAwMDRBNzhBMjc3MDAzQ0E3M0VBMDk3OTMyM0Y3RUJFNUFFNEQKKzoxMEM1OTAwMDg2OTdDRDhBQ0Y1RDAzRjhERUZDODBDMURCQzEzMEZFMUIKKzoxMEM1QTAwMDU0NUZBRjJBRjNGNzRFRkU3RUI0NTYzRkVDOUU4MkY1MDEKKzoxMEM1QjAwMDE3RjJGQURGM0JBREFGRUYyRkRGMUI1RDlGRTBCQkUxNzIKKzoxMEM1QzAwMDYyOTQ3RDE4NDU5RjY4NzgwMUFFQzREQjIyRTAxQTY3NEIKKzoxMEM1RDAwMEQxRkZGRUI4NjkzMzJFODEyQkYxOEUwOEI4NkVGNEU4RDYKKzoxMEM1RTAwMEVCMDc5NjBFMENENzREMDVFNjZGODU0QkFCNzdFQjk4QjYKKzoxMEM1RjAwMDJCQUIxNzNEOEYyOTU1RTY0MUYwQ0VFQkRGMzFFRENBNkQKKzoxMEM2MDAwMEZBRkRGRUZDNkZBRjc3NEY2M0Y0Mzg0MUVERkM0ODY3RUQKKzoxMEM2MTAwMDhGMjQzNDcyRkJEREMxN0EyOUNFNDRCMzNCNUNDQzIxM0MKKzoxMEM2MjAwMEUyQkZCOERERjAwRUZFMTdGNkIzNEI0NkY4NkYxRDMxRDIKKzoxMEM2MzAwMDFBRjFFRkJCN0I5RDhBRjc1NEI4QkU2MkQ1RkM3RDQ4RUEKKzoxMEM2NDAwMEQ4OTcxNDQ3QkU3RkREMEZENzMyRUFGNzY1OEM3NzIyODMKKzoxMEM2NTAwMDNENkJGMUEyREQ1OTk4Q0EyQ0M5Njg3Qzc5NDI1OUY4MjIKKzoxMEM2NjAwMDBFRDhGNDExOUFCQ0U2RjFFNUMzMDVFRTlFNEZFOTVDRTUKKzoxMEM2NzAwMEU0QTQ3NTFFNzIyMTNDREY3NURDN0I0N0Y4RTY4QzQ4MkMKKzoxMEM2ODAwMEVDQUYzRjk4QkY0NUMzOTNDOUQ0NDlCRjNGQTFCN0Q2Q0MKKzoxMEM2OTAwMEU2NDVGREYwMkUxNjQxQkJBNzZGMzc4N0QxQUVENkUyMzcKKzoxMEM2QTAwMDUwOEZDNTRFM0Y5MkE4RDJGQjAzOEJCMUZGNjk3NzRDRTgKKzoxMEM2QjAwMDVDOEU3OUU5NTA4MkJBQzg4NkY3OTc3QUI0N0I5RTNGNDAKKzoxMEM2QzAwMDQyQkMyREI0MDQzMjkyMEM3NEJFOUE4RkZCNjFFNjRGQ0IKKzoxMEM2RDAwMDEwOTc4MkZEQzUwM0M1Njk2OEYwNTQ0QTFDRkYzMTY5OTMKKzoxMEM2RTAwMDgxMjBGNjUzNjlFOERFRUFDNzZGNEEzN0RGNjczQjEyRkQKKzoxMEM2RjAwMEY5RkI0N0Y4Q0VDRDAwRUI1RkMzNDM4NUU4RTdBMEQxNTcKKzoxMEM3MDAwMEZCNTUyRkNDRUZFMDlBNzhCQTBGM0YzQkUxOEVFOUY4NkEKKzoxMEM3MTAwMDM2Q0ExQzgzM0YwOTBGRDAyM0UwN0U4Q0UwQjZDREM4MUIKKzoxMEM3MjAwMDQ4NDZCODhEMDI2RTRCQTJDMEJCMkZFN0RCRTBFRThCMTQKKzoxMEM3MzAwMDk3RjlBOUE0QkQ1MzRFRjkxNzgzNEVCQTc3NkUzNjdDOEMKKzoxMEM3NDAwMEYxRUUxNEQ0QzNDNTA2MkZEQTlEOUJDMUJFQzA3N0Q2QzcKKzoxMEM3NTAwMEZFOEZDMEY3MTYzQzYzNzFEMTc3N0E3RkNEMjNFRTVGRjEKKzoxMEM3NjAwMDc5RDYxQkU4QkQxNTdGQzU0QjQ0QTdBN0VCNkM1RURDRjMKKzoxMEM3NzAwMEI3Q0Y2MDJBQkQ2RjNBNEJEQzQ3Rjk2M0Y5N0ZCRkQyNzAKKzoxMEM3ODAwMDAzRjNEQjM1MjJGMDJDRDJFNzlFMDRDM0QwNzcwOThFNjkKKzoxMEM3OTAwMDQwMjFCRDY3MzVGNkNBRTI2N0I1NzNGOEM5QzIzRTk4NTUKKzoxMEM3QTAwMDIzRjAzODg1RjkyODZFRjczNjE2MzBFMkI4NkY5RjM1REEKKzoxMEM3QjAwMEY5RDAyRTdENUJDNDIzREZDMTgyRjRGRDRFMTZBMkY0QjYKKzoxMEM3QzAwMEZCMkM0Q0Y1N0Y4MDJGQjc0MkZFQUREODExRTk4RDAwRDAKKzoxMEM3RDAwMDVGQ0QxM0Y5QjlCODFFMjNGMEZFOEFFMDk3N0JEQzlDOEQKKzoxMEM3RTAwMDVGM0UxRTgyNzg2RjRGQkMyMkZFQUQ5MTM4RkU5NjhDNjQKKzoxMEM3RjAwMDA4MUNDMTc5OEZCM0E4NkUyRkMyRTQxODk3ODY3RTk0NjcKKzoxMEM4MDAwMEJFRjU1Mzk5QzhGOTRGNzFFNDdFREJGQUU5M0VBRkREMUUKKzoxMEM4MTAwMEJCRjdEOTkyQ0JGMEREMkRGRTczQTNFRjNFOEExN0M3OEQKKzoxMEM4MjAwMEI4N0MzN0QwQTE1QkU1RjcwRDQxNkNEODgzNDBBN0FBNEYKKzoxMEM4MzAwMDcyOTlFMkY2NTY3QzJFRUU0OUEzMTMwM0VBRkQ2Njk0NDQKKzoxMEM4NDAwMDRDRUY4NDY5RTc5MkI3ODhGRTZFNDlFM0Y3MDZBQkNCRkQKKzoxMEM4NTAwMEE3QjRDNDAzNUUyNjdDRDU1MzFBODZCNDJBNEQ3RjhGQjUKKzoxMEM4NjAwMDcwQTJCQjgzOUUwRTlGOTRBM0ZGN0UxMzZCQTMwM0UyNzMKKzoxMEM4NzAwMEVBMjI3RDlDRjkyRDUxRkVDRjgzMzgzNkYwRDUyNzIzNEYKKzoxMEM4ODAwMDQ0QkNFNDcwMzYzQ0YyQkVDMUFEQTJFREY5RUEyRjRDRDcKKzoxMEM4OTAwMEU3NjBGQ0Y0OTE4MTVFQzRFM0EyOUJGRjM4OURGNjc1Q0UKKzoxMEM4QTAwMDBBN0JGMzJBOTg1RkREQkZDQjY0NEY3RUQ4MDQzM0M5N0YKKzoxMEM4QjAwMEM3Qjg2QTBCRjM4MUMxN0YwQUVDMEFDQzlGNkVGMjUwQjUKKzoxMEM4QzAwMEZBMjlEODAxOTg3RUQ2NTQ0MEU1Njc5QkJDOTQxRjNGNTcKKzoxMEM4RDAwMEQyRkYxN0E0RjNDQ0Q2Q0YxNUQ0NDcyQkI0Nzg2QzAxNzQKKzoxMEM4RTAwMDg3MTY1N0I4NDJDNDRGMkNCNjJGM0E4NkYxMEI4QjI5QzYKKzoxMEM4RjAwMEUwOURDMTYyNkY5QjgwRTBERkJCQkZGMzA4QTZGMDVERTcKKzoxMEM5MDAwMEM2N0RDOEUyMzUxMkY5NzVFNjFDMEUyQzQ3MzJDRjdCODYKKzoxMEM5MTAwMEEzRTcxNjE0MTNBMzdGN0YzMjA5RjdFOUI1NjhDNzAyQUUKKzoxMEM5MjAwMEVCMkY3NkY5MkMyMzYxN0M1RkQ3ODkyMzA5NTBGRkUzMzUKKzoxMEM5MzAwMEE2MzEwNERGMjc0RDNFODJFRjRGNEQ1NTk0NEUxRkU5M0YKKzoxMEM5NDAwMDhGQTM3QUVDNzM3QTZGRTlFNjVEMjcxNEZDM0Q2OEUzMDgKKzoxMEM5NTAwMDdEMTJGOUVGQUZGN0IxNTAwOEYwQkFDMUM4RTVGQjA2OTgKKzoxMEM5NjAwMDkwRUZCODNFQ0I4QjI3NkY3OTAwRTExQjExRjA4QzA0NjAKKzoxMEM5NzAwMEZDRERFNjlBMzUzRTAxQkVERjMyNjY4NjgyRjVFRUY4RDIKKzoxMEM5ODAwMDBBNzQ1MDY2M0YxRjVFOEVBRkNGMUM5MDA4M0Y2NzBFNDMKKzoxMEM5OTAwMDM4MDkxRjFBOUU2QTA1QkRDRUVDMkJCQzE1REYxRjNCNjQKKzoxMEM5QTAwMDcwNTRBNkY4RDNGMzE3MEQwNERGRjk2MzMxMTQ5RjFBRkUKKzoxMEM5QjAwMEREN0VEMURFRUMyMTY4OEZGRDA5RTg4NzA3MUY4QkY2NEQKKzoxMEM5QzAwMDE2OTIzRkZFNEZDRkZGNDg4RDhDRkJGRDkzQUJGM0MyMTkKKzoxMEM5RDAwMEZCMjhBN0ZFOEJDQjI5QjAzNzRGNkQ0MjM5OTY5NjQyODQKKzoxMEM5RTAwMEVGRThGNEM1QUJCMTg2NThENDYzNzUyNkIxQkU0MENFMkUKKzoxMEM5RjAwMDYwRkU0RjMxN0MxRjVDRjY4QkQ0MEE1QzJGMzgxRUM2NUMKKzoxMENBMDAwMDdCOTlDNUVGOUI4MEZFOEVGRjE4RkFEQkI3Qzk0M0VGMTkKKzoxMENBMTAwMEVFN0NCNkZCODkyQzFDN0Y2N0U3OUNGNzM3NDFGRjY3RUMKKzoxMENBMjAwMDQyRkNGNzREOUM2MTlENjc3Rjg1RjI3NEJCOERGQzk2M0YKKzoxMENBMzAwMDJCMjQ4MDBCRjVFOThFMTRDQTE3NDg0QTRDMjMzOTMzNEUKKzoxMENBNDAwMDQyQjQ2RTBCMjQ1NUMxNzdDODE2QkVCMDMxMDVGOTBCNDAKKzoxMENBNTAwMEVGOEI2MzVDRkRDQjZCNjI0OTRFQkQ2Q0Y0MUU2RkM0MDMKKzoxMENBNjAwMEZFQjZGMEZFOUU3REVDQTEwRkY3NjNGQTY4NkRDOTQzMzgKKzoxMENBNzAwMDkwREUzRUQyNDU3ODlGRkQyRjBCODY2MzdCRDBEN0Y0QTYKKzoxMENBODAwMDdCOTU5RjdCNTEwQUEzMUZBNEI4RkRFMDMyOEM2MzFBRUIKKzoxMENBOTAwMEI5Rjk4NDIxMDVEMjUxREJBNTY2NEMwQkQzMjcxRDQ1N0UKKzoxMENBQTAwMEZGQzFERDIzNTU4MkUzQUE1RDk5MzJDNkE2MEY0RjA5NjcKKzoxMENBQjAwMEJEN0YwMzhGMUJEMUU5RjdBMkY2Q0YyQjcwOUJBOUU5QUQKKzoxMENBQzAwMEY5RTE1MkU3QTcxREI4MkYxRTdBQUM4NERGRUZFMkVGNDEKKzoxMENBRDAwMDQ0RUZFRDlBRjJDRUY3MTlDRTAzMkMwODg0N0I4Njg5QjkKKzoxMENBRTAwMEUyMkU1ODI4RDg4MTc0M0UxMzI4RjBEMkZCMjZGRUUwQUYKKzoxMENBRjAwMDQ2RTRBRjMzODEyNDdBNEY3QTlGMjExODg3QkYyRjI5Q0MKKzoxMENCMDAwMDc4OUNGRjVFOUYxN0I3QkYxNTg3RjExNEYxN0I4QzBDRTMKKzoxMENCMTAwMDdGRkY3NEVEQThERTA5MTQxRjkyQUVEMjdFM0M3REVCNDAKKzoxMENCMjAwMDhENTU4ODlGQkEzRDdCM0JBODlGODUxNjJGRkE2M0U3RkEKKzoxMENCMzAwMEVGRkQ4MkVFQkRCMDg5M0MwRUY1Q0MxRTlFN0ZBNEQyRTcKKzoxMENCNDAwMDQ3RUY4QUNGRUZGODMzQ0Y3N0ZCMjlFRjk3ODM5OTc0QkMKKzoxMENCNTAwMDdGNjIxNkI3Nzc5RTEwRkE4Q0Y1OEM2MDkxRUYxMjY5QTAKKzoxMENCNjAwMEY0N0EwNDhBQjE3QzQzNjYzMDE5REY5RkQyRjQyMEU4NUUKKzoxMENCNzAwMEFGMjY1QzdGRTg3NkE0RjY4RTI5RkNCRUZBMTVFQTJGNzQKKzoxMENCODAwMDkzRDA0NzVBN0Y0Rjk4Rjg3QkI5Mjg0NkYwRjdDRjZDN0YKKzoxMENCOTAwMDM2NzFCREJCMDNFNDBERjI4QkE2Nzc2MURDQzc3MTVDMTcKKzoxMENCQTAwMDkzQjgyRjkzMEE0QTc2MTRDQzI3RjUwOTMzOTdERjU3QTkKKzoxMENCQjAwMDM4N0VGNEJENTJDRDBFOTk5NkQwNENGNzQ3M0Y0QjBEQzEKKzoxMENCQzAwMDNDODlGMjQxQkI0N0NBMTQyRkJERUZGNzQxQUE2RkYzNkUKKzoxMENCRDAwMEM4RDFGQ0REMEM5QzAzRThDNTEwRDZBQjkzQzE4RUNBNEUKKzoxMENCRTAwMDhFQjBBMzJDNTdBNjE3RkY5NkVBN0IwNkRCNUY2OUZEODQKKzoxMENCRjAwMDY4MzkzQzU2QzBCRkQ4NkUyMDNDMkM1RTY3MjY3RkQ4NzMKKzoxMENDMDAwMDU4NzFCRjc0RUNGOTYzQjEyODRGMTZGRkI5ODRFNDRBMzgKKzoxMENDMTAwMDMzNjMwM0UyRTc5NTI2MUVFN0ZENkJGNDIzNDA3QUREREMKKzoxMENDMjAwMDk3M0QzMkVENDcwRTFCMTYxRTAxRkQ0QTIwOTBGRkIwQzYKKzoxMENDMzAwMEI3MzlCRTk0RjIzRTI0RjdGNTVGMUEwNkRDMkY2QTI5NTUKKzoxMENDNDAwMEQwRUIzNTlDOUZFRjJCQkRGRkUxODZBRjFDRjRGQjI5OTkKKzoxMENDNTAwMDk5Q0Q3NTQ1RjNFRTdGNjc0NzNGN0ZFREJEMkI5ODVGMUMKKzoxMENDNjAwMDBGRUFGN0M1OUYxQjg4N0YxNzdGNUU0MjcyQjNFQjBBRkUKKzoxMENDNzAwMEU3NkI3NUZCRkUwM0U5MUEzRDFGODBGRkJGMDY4MkJGMEQKKzoxMENDODAwMDhGREY3QkFGMENGRTA3MjU0NkJGRDcwN0Q0MTVGOUI3NUEKKzoxMENDOTAwMEJCQzQ3QjAyNUQwQjhBRTg1RDhCN0RGODJFMDhDQUNEOTQKKzoxMENDQTAwMEM5RkNERTUxMTdGNjBERjVCQjEyMURGNEVFQzZDQjQ2REUKKzoxMENDQjAwMDlFMEZERTI5REE4Qjc3MUFCQkVFNENFMUVGNjY5ODFCRUMKKzoxMENDQzAwMDdFNTc4Q0ZEMzdGM0Y4QjgyRTYzODg3RTFGNkNENzRGRTQKKzoxMENDRDAwMDEzRTgzRTgxMTYzRjdFNENDOEVENjYyOUZDN0Q3QTBGMzUKKzoxMENDRTAwMEU0NzMxM0UzRUZFQTg1NTNFQjRCRjExRDkwRTE1NEZGM0UKKzoxMENDRjAwMDk4RjhGREM5NTdGQUFFREU1RDgyM0VFRDFEQTExREVCMzEKKzoxMENEMDAwMDAxOEVGRjA3MzU4QTE1QTkwMDgwMDAwMDAwMDAwMDAwOTEKKzoxMENEMTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBCNzg5NEQ1MDAKKzoxMENEMjAwMEI1RThGRUU3OUY5OUNDMjQ5MzY0MTI0MjFFODQ4NEM5MUYKKzoxMENEMzAwMDgzMTAyNEUwRTQwNTAxNDIxODIwQTFBODY4MDMwODAyM0EKKzoxMENENDAwMEM2MzgyMTIxODRCQzA4NDhDRjQ5MkQzNTgzMDkwRjE1RTkKKzoxMENENTAwMDZCMzg0NjhEOEEzQTU4QTBBMDYwMDcwNTQ0MEQ5RTAxQTUKKzoxMENENjAwMEQ0NTIxRjM1RDVFQUIxREE2MjAyODgwRjFFMDk0MUZEOUYKKzoxMENENzAwMEIwRDdEQkRFQjVENkRFM0IzM0ZGMjQ1MURCNzNGREVFRUYKKzoxMENEODAwMDc3QkVFRkE2NUZEREVDN0ZCRkQ3NUE3QkVEQjVENzYzRUIKKzoxMENEOTAwMDRGREJCQzc0QkJDQkM2RDgwODk1MzU3ODMyMTg2QjRCQ0IKKzoxMENEQTAwMDcyQzQ0NTQyRkFBMTgxMkRDNkZDOUYxOUZDQzUzMUY2MUIKKzoxMENEQjAwMDk4ODFCOUNDOTE4QzVENjU1RjE2NkQxRkNFOThGMzg2MTYKKzoxMENEQzAwMDEwM0QwQkM3NDI0NzlDOTJDM0Q4MjMxNUEzRDlERDBBNTcKKzoxMENERDAwMDY0NUIxRjYyMkM5QUIxQzUyNjQ2N0Y0QjgzQzMyNkIwODUKKzoxMENERTAwMEFCRTk5RjBFRDM0NEM2MTZGMkNGNkNDOUYyOUQ2NkE3N0QKKzoxMENERjAwMDA1RjI1NUU2NkU2NTAyNjMxRjU0REQxOTZBODNGMTE2NkMKKzoxMENFMDAwMDNBNTU2RjUwMTg1NEI4QjFDOEQxOTVDRUVCRkUyMzE5REUKKzoxMENFMTAwMEM3NzVEMEI4QUM2MjE4NjM5MzIxRDU3QkNCMTk4Q0ZCNTYKKzoxMENFMjAwMDcyQUY4OUREOUQwNDc1RjA2RkJBMkY2NUNDQzUxOEQ0M0IKKzoxMENFMzAwMEZGQ0NDQ0M3QUZGM0NDQjhGRjhDRUMwRkZFNUY2NUI0NzIKKzoxMENFNDAwMDZDNTZDMkIxM0NEMUNENjBGQ0ZEMjM5Q0EzRURCOThDRTYKKzoxMENFNTAwMEFEM0E3Q0NERkQ2NzRDQkU3QTE1Q0I4QkQyOThDRTM3RTAKKzoxMENFNjAwMDZFRTAzODgxRTMzNUJCNzUyRTAzOEMzN0NBQjQyMEUzRkUKKzoxMENFNzAwMDBDMzQ2OTg2MDIxRENDRDNFNTMxQkI3NzI2RTFCQzdCM0YKKzoxMENFODAwMEZGQkMwMkYyQ0Q4QkFGQjJERjBERDkzOUYzNEQwRTI1QzkKKzoxMENFOTAwMDhBQjFCRTAzNDFFRTIwMDVCRjA3M0I3MDVEQ0Q0NzQyMUUKKzoxMENFQTAwMEREM0FDOERGQUE3MEY4MzcyQjhDQkVCQkY2MUJEQzNCMjMKKzoxMENFQjAwMEUxNUJBREQxQkQ2NzE3QjRBQjdENzlBQzFENDY2Njg3MkMKKzoxMENFQzAwMDhDRjAxRjJDN0YzMTg0OTc4NzM5OTIzNkU0NjA3OTBDN0YKKzoxMENFRDAwMEUxRjcyNTgzMkQ5Q0NBN0ZBRjMyMkEwRkY2QTY0NTAwQzUKKzoxMENFRTAwMEJDMUI2MzlEQjMxMEFFMjM4MjAwRkYxNkVDOTc3RjNGRkYKKzoxMENFRjAwMDg5RUIwMEY4OUM4NDZFMTFCRkFFODY1MEVBOTc4OUJDMUUKKzoxMENGMDAwMEYzMTdDM0RDNzdEMzdBMUM3MUNCMzE3RkRCMzg1QThGQjAKKzoxMENGMTAwMDEzRTcwMUYzNjJGNTBBQURGN0E0RDU3RDU3MUE5NDlGODQKKzoxMENGMjAwMEVDMTg0RUYzODgxMkY0NzBCMkY4RUJCNzI2NDFCRDkzQkIKKzoxMENGMzAwMDg3NTUzQkY2Rjk5NzQ2RDU2QjBDQzM3MjhFMEY2NUJFQ0QKKzoxMENGNDAwMDI5QUQxRERBOUQ3RTMxRDQxRTA0RTUyNUY3RDVCQzg5QjcKKzoxMENGNTAwMERGNEJFRUFDOUI0QjY5RjVCQTFCMThENEVGQkFGM0EzQzkKKzoxMENGNjAwMDQ0NjdDNjQwN0M5NEQ0NDIyQjNGM0NBRUIyM0I0QTExNEUKKzoxMENGNzAwMEJGRjdEODlENjVCOERFNTUxOTVEOTUwQ0U4RUFBMkIxRkEKKzoxMENGODAwMEYzNzFBNjMyRjZGRTQ4NjcwNTdFRUY3OUUxRDM1REY4Q0UKKzoxMENGOTAwMDFERjA5NDU2M0MxRTk2QTEwNzNBNDFGQUVEOUE0MDc0NTIKKzoxMENGQTAwMEJENEFEMEVGQjA0QzY3MzVGNjA3NzAyQzY1Mjk4Qzg1RUIKKzoxMENGQjAwMDY0NzQxQTcxMUU2Q0RERjAxRjQ0Mjc1Rjc0RUMzQ0E0OEUKKzoxMENGQzAwMEMwMzgzNUMxMURGNTk0QUFFRTA5RDhDRjM5QzUxQkE2QzYKKzoxMENGRDAwMEE0MTAxQzlEQjhGRkNFNUJCRDYxODgwRkE3MEVGMjgwMjgKKzoxMENGRTAwMDlGOUFERERBNzVFMTlGMUVFNjU1ODNGRjgwNzYzNTFFMzgKKzoxMENGRjAwMEQ1NjFDNkZEQzNEQzQ2OUM3RjBEMzNGQUVBMjdGMTdEN0YKKzoxMEQwMDAwMDg4NzQwMEZEM0M0OUZCRDVGMjk3RDI1RjAwMUVBQUY3NTkKKzoxMEQwMTAwMDhDQ0RCQTFCRjA1MzEzNzFGODU3NTNBOTFFQjQ5M0ZCNzAKKzoxMEQwMjAwMDQ1MUQ5ODk3RUIxOTM4MUZCRUJFRjM2MjFGOUM4NzJGRDIKKzoxMEQwMzAwMDA2QTQ5RkJENDE5Q0ZFMTlBNzhGOEI3QkUyMDRGRDcwNjcKKzoxMEQwNDAwMEJBQkRCODY3OEMxQkU3MTMyREY2Q0Q0NUM1QTUwQkM2MzkKKzoxMEQwNTAwMDc2QkY2NEY2OUQzMDJGNjZGNzRDOUMzNzFFNjdFRjk5QkMKKzoxMEQwNjAwMDM4M0Y5NEIxMDcxNUNFOUY2QTg2NzkyNjIyQkY5MkZDN0QKKzoxMEQwNzAwMDhCOTkzQzEzRTY0MTM5NEJGNzRDOTgwRkY1NUYxMkY1NEQKKzoxMEQwODAwMDU4QjEyNzhEQkVCQjNENjlEOEZFOTA4RTU1MjEzQ0U1MzkKKzoxMEQwOTAwMDdDQUE5RjhFREY0RUYwMzBGMUZENUFGREY0Mzg4MjhGNkUKKzoxMEQwQTAwMDFDQTcxOUY5NDgzOEE2NDA5RjYxMDNEN0ZENUJCQkMyOTYKKzoxMEQwQjAwMEY3N0ZFOEM0MThFNDZCNDNFMTNGM0Q3NjU4MDZCMjkyMkYKKzoxMEQwQzAwMDhCNEI4Q0I3M0FBMERGMzFFRDQ2NEQzRkIyREU1OEI3RkYKKzoxMEQwRDAwMEY2RkI2MUQxRkZBODAwN0M4RTUwN0I4RjA2QzE3Q0Q5MDYKKzoxMEQwRTAwMEFGMDE0RTZDRTA3OEZGODlFRDgwNEU5RjdBQUExRjdGREEKKzoxMEQwRjAwMDJBQzcyNzYzMzY0OTM3MzY4MjEzQzdEMzlGOEQxMjRGMEQKKzoxMEQxMDAwMDZCRTM4MTVGRDcyMDRDOTI3REYwM0E5NEU5OEM4Rjg0NTkKKzoxMEQxMTAwMEY0MjJFNjYxRkU4NzIyMjAwRjY5QkQ4MEJGQ0M0QkI4QTgKKzoxMEQxMjAwMDA3RDJERjlEN0ZBRThDRUY4MkY2RTdFRDNBOUE1NzIwNkIKKzoxMEQxMzAwMDVDRDcwM0ZDQjBCQ0Q5QzA2RTJEODZGNjVGMzQ5RDQ4MjkKKzoxMEQxNDAwMDM5NjNGMEFERTc2QzkzQzMwMTQ3NEQ3RkJFQjIzREQzNjkKKzoxMEQxNTAwMDg0RkI2RUM1QjY0Q0QzMzIzRkI4MzdFRkNFM0U2MTAzODkKKzoxMEQxNjAwMEJDOUVERkFEQzc5MTU4QjNERUZEQUIyOTUxRjg1REY1MkMKKzoxMEQxNzAwMEI4MTg5NTlCMUMzODBGQ0JCMTNGNjBCRENBNkQxMTU5RDMKKzoxMEQxODAwMEFBQ0RENzdFNDU3QjkxQTNDMjBGRkVFMzc2NkJGMTMxMkEKKzoxMEQxOTAwMERFQTNDRDVGN0Q1ODlCRkYxQUI5NUFFRTNGREYyRUQzMzkKKzoxMEQxQTAwMEFCQ0Q2NzlGRDBFNjNGRkREM0RBNDVCODBEOUVDRkUzMDgKKzoxMEQxQjAwMEZCRTYzMzc3QThEQjA0NzBBREZBNjhGNjA5M0M0NzNGMUQKKzoxMEQxQzAwMDNCRjQ3QzE4RTJBQkU2QUYxNUFGQzUzMzVDODc5NjRFRjcKKzoxMEQxRDAwMDAxOEY4QTFFRDZFQkRBQTUxMEJEQUM3NDA3RUU1RkMxRDUKKzoxMEQxRTAwMDM3MDZFQ0VCRjVCNDFFREM1OUZFNzQxMzg4REY3M0NDMDQKKzoxMEQxRjAwMEIzQzgwMUY0NTVEQkY4NkVDQTk5NkM5OEQ3NUMyMDY0MEIKKzoxMEQyMDAwMDk4Q0Y2NENGNTYyM0IzMEMxQzZGMjhGRUMxMkMwRTFCODUKKzoxMEQyMTAwMDAzRkEyQkNCRTM2NTUzMUE2N0IxRDNEMDFGREJGMkM3RjgKKzoxMEQyMjAwMEQ5Qjg1RkNCRUU1MTQ4REUyODdCNkVDQzJCNDgzN0REN0EKKzoxMEQyMzAwMEZCOTc1QzRCRTlBMjM5MDQ4NzcyRTYzMDIyM0Y1Q0QxNTAKKzoxMEQyNDAwMEExNzg0MzIxNkZDREIzMURFRTgyNzZDQkREOEExREU3MzkKKzoxMEQyNTAwMEJEQUMyNUM4QzdDRkUwRkYxNTVCMDJFNkQxRTY1NzBFOEYKKzoxMEQyNjAwMEYzNUY3MUY4RTgzNzBBRjQ1RkI1NEREQjZFMjVDMDBCNEMKKzoxMEQyNzAwMENGOEZFQTFERkYwOEYyRkYwRTgyMTBDMTZCNEFDNzc2RkUKKzoxMEQyODAwMDE1RDdCRDVDQ0M1RjlFN0ZDQzU1QzA3MDdENTM3ODEzQTUKKzoxMEQyOTAwMDc2MDZGRjAzRTc0NkYwMjg2NzZFNjZBRUVGMUM5Q0QyNjkKKzoxMEQyQTAwMEM2REIwM0UzMkJDMzc1RDc1OThDMzY1Qzc3OUQ4OTc5MzAKKzoxMEQyQjAwMDQzNjAzRTI3NDI4RDBFMkI3Q0JGREMxRTRBRjI0MzY1NDUKKzoxMEQyQzAwMDEwNzM5OUIyMjg2NUU2MkM2QzY3MEZDNzc2NjdERjU2MzYKKzoxMEQyRDAwMDQ5NEVBQTAzREU0M0ZEM0NBMUI4OUJCMTFGNTVFMUY5QkQKKzoxMEQyRTAwMDVGRjNGQzRBRTZBNUY1MjBERDM4RkNEN0U5RDZFNjU5MjAKKzoxMEQyRjAwMEVCMzA5MjRCNkFGNURFQTMwODk3NkFENjQ1RjA2NjgwNUMKKzoxMEQzMDAwMDRGODc4NDIzQzBBRDE2RDZGOTQxMjRDQTVGREFGNkFCNDUKKzoxMEQzMTAwMDk4ODdFQUFGM0FGQzhGMjBGRkVGMjA2NzMyMTNENERGMDMKKzoxMEQzMjAwMDE2MEMyOUNEREY0RDcwNTQ4RENDQTE4Mzc5QUE3NzA0REEKKzoxMEQzMzAwMEJCNUQyNDg3MTQwNzIzOUQxQUYwQkMwMEI4QjZEREU1NTkKKzoxMEQzNDAwMDQ4QzM3OTZGNTAxQzY5NTZFNDYzNUJDRDc2RTQ2MzRCNDgKKzoxMEQzNTAwMEI3RjM3M0E4MkQwMkU0NTc2OERGQjZGMjJBNkFCRjE0NDgKKzoxMEQzNjAwMEU1Mjk5NDUzOTY3MDdFRDcxNkUxRjEyMkRGNkY3QjIwN0EKKzoxMEQzNzAwMDg5Q0I1MzdGNTcwOTJFQkRGNzlBREQ0RjQyRkRCNjRDM0UKKzoxMEQzODAwMDJFRjdCNDZEMUQ0M0VEOTE1RjkyM0M3NTZGMjg2RjNGOTIKKzoxMEQzOTAwMDhGQzNCNTZEQjhENUVEODJGQzg3Mzg0NTgwNEZEQjc2RkQKKzoxMEQzQTAwMDQ3OUE4OURBODE5Qzk2RTQzQkE3QTQzQ0ZEOUI1MUNFMjkKKzoxMEQzQjAwMERCMTBERjcyQkQ1MkZFNjY1NTNGNENERURDMjlDRUNGNUUKKzoxMEQzQzAwMERFQUQzMDRGRThGRjhDNTJGQzlBQ0U0RjFFNkVDOUU0QTIKKzoxMEQzRDAwMEZDN0ZFMjRDQzcyRTUxQ0Y4RUY1MkE3NEYzRUU5RTBFRTEKKzoxMEQzRTAwMEYzQUQ3ODUwNjc2QjRFRjJDMTlEMzkxQzY5MDhFNzMzODUKKzoxMEQzRjAwMDVCQ0Q1OTQ4NjcxMzY3MDIxRjA2RkEzQjk5QzlGOTc5NTMKKzoxMEQ0MDAwMDQ4MEU3M0I4MjFCRDU3RjQ3QjZGQTY0RTkzQzYwNjAzMzIKKzoxMEQ0MTAwMEZENDEzRjY3OEFCQzA2QzQ2RjY4NEVCMTExQ0Y0MzM4RTcKKzoxMEQ0MjAwMEMzODk5RjA3QUVFMzYxRDE0Rjg1QjFGOEY1Njk4M0NDMUQKKzoxMEQ0MzAwMEE3OUYwRTBBQjlEQzcyNjZCNUYyMjQ5RjE3QzdGM0M0MjIKKzoxMEQ0NDAwMEZGMzBEQjlCNjlERDdDN0UxMkVFNDAzN0I5NzRERTBCNkEKKzoxMEQ0NTAwMEJFMTVEMTRGMjdFRTNENjY0MEVENTYyOTRGMjNGRTE1RjAKKzoxMEQ0NjAwMDBEOUQxMDNDREJFRTFENEY3ODVDMkFGMENDRUUzNTBCQTkKKzoxMEQ0NzAwMDNBNjFFQzZGNTg1RTY0QTM3MkEwMTM4MjRGNUIyNkUwQTIKKzoxMEQ0ODAwMENERTIzQkY3REFFNjM5RTIyMkZDQ0UyM0EwMDMyQTA3RkQKKzoxMEQ0OTAwMDdDRUZDRjFDM0VGMEJFMjVGMUNERjRFRURDRTJEMEExNTYKKzoxMEQ0QTAwMEYxQkQyQzJGNjJBMjAyQTA4RUQ3MzM1NzEwQzAwNUNGM0EKKzoxMEQ0QjAwMDNDODJDQjVEN0FGNzlEMzA5RjkxN0EwRUZGMDQzREE3QTkKKzoxMEQ0QzAwMDJGRTBDRUFFRTAyQ0FBRUYzMDQyQkVFQ0ZFMTVDQzAxMzAKKzoxMEQ0RDAwMEY1Q0JFMjk5NURFMUY1NTkzOEQ2ODc2RTU0NDhGMUNDMjkKKzoxMEQ0RTAwMEMwNzY2NUUxQkNERkIyMThFNkJFNTNDOEZEQzhBRjUyRDYKKzoxMEQ0RjAwMDMxNERBNjdFMURCQTQ4REUzRTJDOEJEQUJCNzRCQ0JEMTYKKzoxMEQ1MDAwMDQzMEZFOUE4MTRCRTVGN0EzNzA0RDFGRTI5REI5NDkwNUIKKzoxMEQ1MTAwMDg2NzQzMDc3QTY5NjBFNTJCMzM4RERDOEI0MzVDQjI2NjQKKzoxMEQ1MjAwMENFMTk3QjJDRUVFRjY1MkQ2M0U5REM2ODM2MTdENzFEMkQKKzoxMEQ1MzAwMDQ0N0NFRDBCMjE3OUIwNkNFMzJERDdFN0UyRkM5RTE5MUEKKzoxMEQ1NDAwMDg2MTIwRUZCRTI4NkZEMTM5MURFOTZCNTJDRjlEOTdCOEYKKzoxMEQ1NTAwMDc4MUZEOTZEQTZFRkZCQjI5QzFGRTNGRUZBNDJCMTk1OEUKKzoxMEQ1NjAwMDFFODQwRkNCMTYxRTM3QzY0MjdCQTc2N0RFODUxNzIxQTgKKzoxMEQ1NzAwMEJEQzFCNUZGMEYyODE3REM3MEEzNEFGNTZGNjA5RUFGRTEKKzoxMEQ1ODAwMDNGNDRCRUQwQzJDN0I5REU3NTQ5MUYwQkZENUQ5RkFGREEKKzoxMEQ1OTAwMDMwMkNFRjM2NUIxMzU3QzNGQ0NCMDRGRUNFMDlGQTZEN0IKKzoxMEQ1QTAwMDM2QjNDNUNGNUE3MDVFMDk2OUM5RjBGRDdBOTQ1NDA3NDUKKzoxMEQ1QjAwMDkxMDNDNzY2MDkzOTcxODZCMjBERTU5RTUxQjNGOEZFMzUKKzoxMEQ1QzAwMDkyRjVCMTFGRUNGNzZBODQwN0Q0RkI1QUVDMkI5OTA3NEMKKzoxMEQ1RDAwMEI4NTJGRDhBQ0Q0MUREMjk2MTk4MUFCQzYzMjA1RDk0NjMKKzoxMEQ1RTAwMDMzRjM2RkI4Q0VCOUM5NkMzNkRFOUI3QTdGQUVCMjI3MDMKKzoxMEQ1RjAwMDY5QkVCRDY1QjRFRjQzRDM2Q0I4RUY5RDhDNzk4OUVGRkMKKzoxMEQ2MDAwMEI5QzcxMkRENzdDRkU4RURERTA0RjlFRUVENjNFQ0NEQkUKKzoxMEQ2MTAwMEM0RDdGOUZEN0RCOTk1RDFGOURFM0Q4M0YzMzVDOTVGRjYKKzoxMEQ2MjAwMDRFNUFCQjQyODk1RUM1N0RCRTVDOTBDNjI3OERCMzFFMzcKKzoxMEQ2MzAwMDlDMDRGNUNCMkRDNjZFM0MwRjk2M0ZCMDIwQ0MwNkYzNzQKKzoxMEQ2NDAwMDJDNkY4M0ZCM0M5QzYzNkM4QkY2M0UwRkY3RURBOEFDMTQKKzoxMEQ2NTAwMERDODFGN0YyQzBGQjM3RDIwQ0QyNTFDNTE2ODVFODcwRDkKKzoxMEQ2NjAwMDU0QjNERDE4NDc3QzRDQjFFMkZBMkEyQ0RFNTQzQ0ZGNUYKKzoxMEQ2NzAwMDJBRUM2NjNCOTY5RjZGNzJEQzdGMDZFNEMzOEI0RDczOEEKKzoxMEQ2ODAwMDI4NjVERjAyREM2MTlFNTcyMUYyNjBERkE3NjczQjkzQ0MKKzoxMEQ2OTAwMEIyMDA4RTY1QUQ2NTc0OUYwQ0M5NzAxMjdGNzIwQUJBQjQKKzoxMEQ2QTAwMDlCMEI2MDU2OTBERkU4QkJFMjcwMUZCRTkzMjlCRTQ3MUMKKzoxMEQ2QjAwMDVBRDMyQzQ0Q0Y2Njg2NzBFODM2NThEMzcwNUVERDFCOTMKKzoxMEQ2QzAwMENDM0EzQzM3RTdERUM5RTkxQUY2OTk0OTBGRURFRkQyQkIKKzoxMEQ2RDAwMEIzNjBEQ0VGM0REODFFQzYyQjU5QUYyRkRFMEVGOTkxOUIKKzoxMEQ2RTAwMDI2QTYwRjhENDRCQUNBMjRCQTZFQ0Y3MTdFOERGQ0UwOTcKKzoxMEQ2RjAwMEIzNUZCMjNDOTQwQkNBQjc2Q0E1Rjk0OEJBNjBGQUNFRDYKKzoxMEQ3MDAwMEMyNjEyOEU3RUQ0Q0NBQzJGQkI1QTRBM0Y2OUM5OTc5ODcKKzoxMEQ3MTAwMDA4QkY3RTdBQjg1MTIxM0E4MEY0NjgwQUQxQzNGQzY5MDcKKzoxMEQ3MjAwMDU4M0U3N0E2Mzc3NTBEQ0NBQjQ4QUQ2NTBFRDQzM0M0RTMKKzoxMEQ3MzAwMDMyN0IxMENDQkY4RkY1OTIzQ0QxMDdGMjA0OUU2NzkyRUEKKzoxMEQ3NDAwMDlGNDhCRTAxNzRFMDMwNDVGQkYwQkJBQjA5QTYwMjNDMkMKKzoxMEQ3NTAwMDc5Nzc5Mzg5RDJBNzlBQUM0QzBGRjBERERCMTQ0QkY5QTMKKzoxMEQ3NjAwMDY3OUE2Qzk0N0E5QUQyRTlGQkIzNEQ3NkNBMUY2OENBNUQKKzoxMEQ3NzAwMEEzRkNBMTI2MDdFNTBGMzdDREExRjRDNUE2NjJGQTJFQkEKKzoxMEQ3ODAwMEY5MTJDMDg1Rjg5MEU0MkI5MjFGNDk3QTkyN0MyOTkwNzcKKzoxMEQ3OTAwMDhFNEEwMUJDMDU1OUQ0OUVGODlFRTQ3N0I4MEU1RDk2N0EKKzoxMEQ3QTAwMDhGMUY0OUZDMjYyQkM1QUVEODI0RTQ2MzVENEI5MDVGRTgKKzoxMEQ3QjAwMDE0QTlFN0Y3M0QwRkYwRURBQkIyRDg4MzZDMDgxN0NFOTQKKzoxMEQ3QzAwMEY3RkEyQzI2M0FFNzEzOERFQzMwREVGRjlCNTczQkJBNzUKKzoxMEQ3RDAwMDM3Rjk5REFCMzc1NzI5NENFRjQ3QjdCNzM0OTg5OURFRTcKKzoxMEQ3RTAwMDhGNkU2RjZEOENEMEU0NEIxQURGN0QzNTA2RkFGRjQ3RTQKKzoxMEQ3RjAwMDgyNzMzNUQyREZDOTNCQ0UzRUY2NUZGMEZEODkzQkJFN0EKKzoxMEQ4MDAwMDE4OERGODg2NzlFQzdDMDhDNzVEMTdEQzNGOEY0OENDMTMKKzoxMEQ4MTAwMEI3MThFODlDMTkxNUNDRUY0OUEzODJGOTNEMDlGRjEwMTAKKzoxMEQ4MjAwMDNGQ0IxOERGQTc0RkRDRjEzN0RBRTdERDhENDEzNjE1NDYKKzoxMEQ4MzAwMEU1MEZDNDE3QzBGNzJGMDI1RkNCMUE4MzA4OEU2NTFCNTQKKzoxMEQ4NDAwMDRFRUY3QjFFRjdGQjNBMjNGMUJCNjUyRDYyN0Y2RTA2MjAKKzoxMEQ4NTAwMEI4RkFDOTZEQTdFMjE4Qzk2NzhBODNCMTQ2ODBERkE5MDMKKzoxMEQ4NjAwMDVGMUFCRDcwRjZCMzUzOEFDOUFENDA0MzA1MkU0RDI1RUUKKzoxMEQ4NzAwMDA4RDdDREJGRkIwMEU1NkRBNUYxMDRDOUM3NEU5M0M1MjAKKzoxMEQ4ODAwMEFCRTJGQzVDODZGM0ZFRkQyOThEQUY1MTNERDYzNTMyMEYKKzoxMEQ4OTAwMEUyNkMwODZENDU4NjcwMENDOTcxMTg5MTRGMjA2RDIzOUMKKzoxMEQ4QTAwMEZFOTZBNTFGNjNCOEJGNTlBQjYyMUQwREVCQUExMERGMzIKKzoxMEQ4QjAwMDJCMzYyQjI0Nzc0OEY4M0Y5MkE1RDJCRTdBMkY1MzRGQjAKKzoxMEQ4QzAwMDY5MzZFRUQ5RTFDNEMwRTg5QzkyNzQwQjdDQzNFMUM2MTIKKzoxMEQ4RDAwMEZERDE5QTY5QUNGNEUzQzdDQkM0RjdGMjc0MURBNUYyOEQKKzoxMEQ4RTAwMEZCN0JCMDJEOTE0RUIyMTE0OTkwREU5RDlFNkM1QzRFM0IKKzoxMEQ4RjAwMEZDQ0U2NjQ0N0UyMEVCMkY0QkNGREE5ODlDODNGRENDODgKKzoxMEQ5MDAwMDg4NjI3RUZCNzI1Nzk2OUVEQUJEOTc2OUU1RjMzMUMxNTYKKzoxMEQ5MTAwMDM5MDZFRDZBODczODBGQTQ3Q0YyMTlGRTczMzJDRDlGNjkKKzoxMEQ5MjAwMEVFNUZENUNGM0NGRENDOEJBODk3RjgyODg4RjA1NDdEQ0UKKzoxMEQ5MzAwMEI1RDA2RjY0QjgyNzJFMjBCOUM2NjE1MTYwOURGNTAyM0QKKzoxMEQ5NDAwMEZGODU0RkZGMzVBQzBCQ0E1NzFERTBGQTUzNDhCQjMxN0EKKzoxMEQ5NTAwMEFENUY1NzQ1RkFCMjdBQjg4RjE2NDQyMjdGMzU5Q0VBRkMKKzoxMEQ5NjAwMEYyQTNDQjU3OUVGOTI4QUM4QkVFMTdBRTc4NUQyQ0E2QjAKKzoxMEQ5NzAwMERFNzgwNjY5RkQ4MUQzQjMxOUY2Qzc3QTM3NUEyRDAzQ0QKKzoxMEQ5ODAwMERCQUQ1MkJFQTU3QkE2NUM0N0QxOTFBRkEyNjk3Q0U1MTkKKzoxMEQ5OTAwMDRBMzRENTNGQjIyMTdBMzAzREM4MkFBNjNGRDVCRjdGNTEKKzoxMEQ5QTAwMDQ5Q0ZFMEQwRThENTU2QjEyRDk3NTQ5OEVGQUE3NTczQkEKKzoxMEQ5QjAwMDNFNDUzQTBGQUNGRjQxNTY2ODE0RDIwRjlCQzQyNjkxRTYKKzoxMEQ5QzAwMDFFNDNDRjc0ODhFRjM1MjYwRTg3M0VGN0U4NzBGNjFEQUMKKzoxMEQ5RDAwMEZBOTc1NUVERDAwODQ0QUQzRUJEMkREQzBFRjNFRDYxNTgKKzoxMEQ5RTAwMDZDQ0U2MDc4NDlDOEU2RTdGNDA1RDg0NzBDRUU1MjNEQTYKKzoxMEQ5RjAwMDdCNTVCQTJGRjRFQzBEMjVGQUFGREY3QkZGNkI1MzIxN0IKKzoxMERBMDAwMDVGQkY0M0MxNjE1OTFERUIyNDM4RDUxRjUwOTlDOUZGMzEKKzoxMERBMTAwMDNDNDNGRENFQjBBMUU3NTlGMzc0NjgwM0QyRDM0QThGREIKKzoxMERBMjAwMEUyRDgwOUYzRTkzM0Q5QzI4N0ZCQ0RFNzZGODI5RTZBNUEKKzoxMERBMzAwMDgyM0MxMzA5QUU2MkZFQkQ4MjlGQzk3QTJCM0JFRTM3NTIKKzoxMERBNDAwMDIyQkVBMERFNDU5MjVGN0UxQkMyNDg2RkM2N0FGRjgwNzEKKzoxMERBNTAwMEYzM0NCNzJEREI4RUZBQkQ5NTlFRkRGNTc0RkVFRjBEMDAKKzoxMERBNjAwMEIxOEU4Njc1N0MyMUY0RkNCMjFGNjMzNkRGNEZDNjZDMjUKKzoxMERBNzAwMDJFNkY5QzEzRkFEQzczQ0ZBOEM0ODc3MDlFQjgwRkJGQkIKKzoxMERBODAwMDQwMzlENzZGOUUxNkQxQ0UyMkUwRjYxQ0VFQzc1QzVGMDAKKzoxMERBOTAwMEZEOTU5RUVFQjA1NEE4RkZFOUUxNzcyOThEQ0VFNkVCMjcKKzoxMERBQTAwMDVBNjlFOTlDODBFN0U2QTcwNzQyRTZCODI5N0Q3NEY2NDMKKzoxMERBQjAwMDRCMzBERTA1Q0Y4QzI4QzU2RjVGQTU2NDFCMzgzRUI2QTIKKzoxMERBQzAwMEE5NzMxMDVFQ0MzRDRDQzhGOTFFNUFDRkI5QkRGMTBBRkUKKzoxMERBRDAwMERENkYxMURFMjBFNzlGM0JGMDVDOTg4RUY2QUQ0QjgzNDcKKzoxMERBRTAwMDQ3OUQ4OUVCNjk4MzIyNkM0MkNFMzRCNUEyQkNCMTE0NDgKKzoxMERBRjAwMEE0QkI3MEUwNzc3NTA3MkVEMUY5MUJGODVERDZBN0ZEQTIKKzoxMERCMDAwMDE2ODdGN0VGNUVEMjZCQzA5RjBFRTlCN0NFQ0E3MTVFODMKKzoxMERCMTAwMEE0NjZDNEUwM0UyOEJEREE3NkQzQ0RDOEM3REUzMDcwMzcKKzoxMERCMjAwMDNDOENCNDNEODRGN0FBRDJCNzg3OTFERTYyOERDMTE2RDIKKzoxMERCMzAwMDgzRjkyRkRGODQ4QjIwQ0NCQjM0NUJFQ0VGRDhBRTVDNTkKKzoxMERCNDAwMEQ0NzM3NjI3RjE3M0JENzYzMzVDNTQ2MDNEMjMwMEVGQzgKKzoxMERCNTAwMDJFNTg3MkFENUI2NTRFQzhBQkUyM0U3MzRENzYzMkFENkEKKzoxMERCNjAwMEVGOTEyQTlEQzM0ODc2MTY2RjFBRUEzRDRGMUE5OTRCREEKKzoxMERCNzAwMDQ1NzlGOTU5MzNCNzA3MjQ3M0JERkUyMzQ4RUY5MEQ2OTIKKzoxMERCODAwMDQ2N0FEMzg2QTFGRTRCRTBCMTc2M0U5NEZCRTFCM0Y2MzQKKzoxMERCOTAwMDQ5NkYxQUNBMkZFNzhENUNDRjg3RTU1NjRDQjM3OEJEMjUKKzoxMERCQTAwMDY2NDEzN0Q4MEZGNkRCOUQ2NEJENDg3MkU2QzE1MDg2RUEKKzoxMERCQjAwMEYyQkVFRUY5NTBBRTU3Rjg4REY5QzkyMEJGNzM3Mzg5RTQKKzoxMERCQzAwMEEwMkI5MDk5NUNCODdFRDc0RTNFM0Y5QzE3Q0FDRjJCQjYKKzoxMERCRDAwMDhEQUQ2OTI4NUZDQTcxNTc4NkI1RDI3OEU3QzU3ODJCQjUKKzoxMERCRTAwMDgzNUJCOTdEQzJDOEY1OTE1ODlGQzYzNzMwQjJBM0Y0QTQKKzoxMERCRjAwMEVFMDkyMjM5RjU4QkI4Q0U0MzM4RkUxNzdCQzYzMjNDOEUKKzoxMERDMDAwMEM3QkI5M0RDOTU4N0E5MUNFNDM3QzA0N0Y1NTM0MTVFMzkKKzoxMERDMTAwMDlDRUZFNzdCNDJERDBDRUE3RjZFRTBGMkQwRTdBMUQxMUEKKzoxMERDMjAwMDI0MEY5RDA4N0RCMDk0RUMzMjNCODIxNEQ0QUI3Q0FFQzMKKzoxMERDMzAwMDMwNjMyQzk2RUZFNDc2OENFQUE2NDZCMjNGNTRDMzc2NjYKKzoxMERDNDAwMDY3NTk5NENFNjE5MTU4M0U5NkY0MkQ5RkZGMUVGNkE5MTgKKzoxMERDNTAwMDQyREYzN0UzNzcyNzZCMkRCRDFERjdEREVFMTBEMkJCMUEKKzoxMERDNjAwMDdERjFENEZGMUEzQjk4RERBMjdBODc1NkJGMjRFOTQwQTQKKzoxMERDNzAwMDk2REY5RUNERUYxQkI3NjdGMzdCQzExREQ5RkM5Q0E5MzYKKzoxMERDODAwMDBCRjEzQzk4NENFQkU0RkIxNUYwNDBGNzJFRDgxRkQxN0MKKzoxMERDOTAwMEE4RUYzRUU5NzkyMTVBQjEyMDlDQkQ2OThGMjJEQzc3M0IKKzoxMERDQTAwMEYzRkJDRDE3N0IwRDY0NzdBOTdFM0VENDQxN0E5QzRENjIKKzoxMERDQjAwMDkzNzQ3ODVFNTRBQjVDMEVBRUQ2MDFGODIwNTVFRUQ4NjYKKzoxMERDQzAwMDlEODY3Mjc2RjMxRTczMTZDMjAzRTA0REY3QzhERTlEODMKKzoxMERDRDAwMEFBMTg4NzhGRkJGOUFFMDRBRUQ3Rjc4QUZDQTFGMUE0OEUKKzoxMERDRTAwMEQ3OUYxQkM5NkU5RDRGNzJDRUI2MDkwOEQ3Q0IzQjQyNUEKKzoxMERDRjAwMDc0NDgxNzMwOEU0MzAxRjg1NERGRkUwQjBFQ0ZGMDRBMDQKKzoxMEREMDAwMDkyQ0I2MUZGMTFCRkFDMTVGQ0IyNkVEM0Q0RjBBOUI4QjEKKzoxMEREMTAwMDlGREU1NjE5Q0EwNTk3RjVGNjE4RTQ4NzgxRjA3QTRCMEQKKzoxMEREMjAwMEYwOTU5QTQzOEYxOUQxNkU1NzBCRkJDNjA5RkJBNjQ2OTcKKzoxMEREMzAwMEQ4Qzc2QTlFNTI0OEFFQUJEOTM4RjUyMUUyODM3RjMwMEUKKzoxMERENDAwMEIwRDEzMDhGRjM5RUZCQzNGQ0YxRjFCQ0UwNjdCRUY2QUYKKzoxMERENTAwMDc2QUE1RjAzRjU3OUZCMzdDMjY4M0VCQjBDNzY5QzRGMTEKKzoxMERENjAwMDIwMUU3RjcwRkJBN0Q0MUZENEJFOUYzRTNDNzBBRTRGRDkKKzoxMERENzAwMDE4QjhFRUNCQUNGM0RGM0U0MjdFQjJENzRDRkEyQkMwRTQKKzoxMEREODAwMDdCMjJDQTFERTcwQzlFNEE1Q0Y3Qjk3RDY2RTIzM0U3NDkKKzoxMEREOTAwMDIyRjg3RUZGMTRGOEExNkIwQ0NFRTNCQUZCNDhCRkYxNkEKKzoxMEREQTAwMENFMDI4NkU3QzEwQUI3QjY1RjM5NkU4N0UwQkY3NUMzOUEKKzoxMEREQjAwMEVDRTFBODI3QUIwMzNDNjA3RjgwOTc5RjUyRkJCNzBEMzcKKzoxMEREQzAwMEQ0M0U3MDFEOEY4QTc2RkRGQjczNUYwOEQxQ0JCOTExRUQKKzoxMERERDAwMDFDMUZFNzlFMTk0M0U3NEE3NzA0QTc3Mzk4NkYyMkRFNUEKKzoxMERERTAwMDU3Q0U0NUYwOTRBMTMwMDI3NDUwMkRFRUEzRTc2Njc4MkIKKzoxMERERjAwMEU4RkU3RDRFRDk0RjY5Qjc4MUI3QUI2RTE0NzY2M0EwNEMKKzoxMERFMDAwMEJCNThBNDFCQTQ0OUI0ODc5OUI2NzRBMjNDODFGQUVBMTIKKzoxMERFMTAwMDg5NTk5NDdBODMyMjA3RUE5RDkxM0VGMTFDOEFDQUUxQ0UKKzoxMERFMjAwMEZCOEJFMTc4RDFDMkZFNDE3MjhBQzc4ODdDRDkyOUU0OTQKKzoxMERFMzAwMEI4REFCRDAzRUQ3MDg4REZEQUJEMEFEOTkxMkU4QjczOTUKKzoxMERFNDAwMDEwNjcxRDI1RjVFNTQwOEYzNTJFQzU2MUM2RjlCNEFDQzgKKzoxMERFNTAwMDVFNDk3NkE0ODZBRDM3MjNCRENCNzVENEU4RDkxQ0JDMEEKKzoxMERFNjAwMDBGNzUyQjJBQ0RBN0RCMENGQjA2RTFFMDNGOUU5RkRDNjQKKzoxMERFNzAwMEY1NzdDMTBGRjBDRjFBNEQ3MjI2MDlEN0JBMUMxQkE3MzAKKzoxMERFODAwMDFGQzhCNjQyN0ZCNTJEQ0ExNjFBMjc0OURFMkJGOUZBRUMKKzoxMERFOTAwMDI0OUMwMDJDNDZENDk3QzE3RDlGOTcwRkIxN0UzOUNGMkIKKzoxMERFQTAwMEMwRjVDQkY5NDRFNzcwRkVERTlENjRCQjJGMUZGMUZEOEEKKzoxMERFQjAwMDk2NkFDNzdCRkFFNTZGQjNDMzIzQkY0MzJFQzM5QjVCNTAKKzoxMERFQzAwMEJGREUxOEU2OUY4MjM0MDVFQjNBOEJGQzBERjczM0VBOTAKKzoxMERFRDAwMEE1NjE5RTY5REJCNEY2OTBGNDFEREFGQzU1N0JCNUY5QkIKKzoxMERFRTAwMDhDMDNEQUZDODQwRTZEREVGRThBMzYxRjIyQzY5NTcwMjYKKzoxMERFRjAwMEMyN0JBRjZEMENCRkY3NjI4QUY3NUU1QjEwQkZGNzYyNDMKKzoxMERGMDAwMDFFRUZCRDk4RTJCRDE3QkZFM0JEMTdGMzc4RUZDNTNDMjgKKzoxMERGMTAwMERFN0IzMThGRjc1RTRDRjFERThCREY2RjE0NzBBQTE1NUMKKzoxMERGMjAwMDdBNDdDNDAzREE2NUQ4MEI2NjY5NjdBN0ZERDJCMzI0QzQKKzoxMERGMzAwMDlBRjhBN0I0OTNGNkFDQ0NBMDdDQkY1RTY3OUU4OUY0MzgKKzoxMERGNDAwMDNBQTRCQjAxQjk2NEMxNDg2NzQxQ0U3MEI0OUY3NjZFRjQKKzoxMERGNTAwMDhDNDNCQ0U5QkI0ODlGQkJFQTQ1QUVDRkFEQ0QzMjVCM0QKKzoxMERGNjAwMDUwQ0ZEMEI1RTFEMzhEMjgzRUE1OEQ3NENFQ0E4MUY1QjIKKzoxMERGNzAwMEY2MTg3QTc3MTExREU4QkRDNDM3QkFENkRCREU5RUNFMUYKKzoxMERGODAwMEYxNDdGQTBFNjY4OUE0RkI0OTE5OUU3NzkxNDNFMzMxNjQKKzoxMERGOTAwMEQwQUVDMkI2NjhFRDI4ODE3Njk1NDA3QjRBMjAxRDQ4RjgKKzoxMERGQTAwMDNCQ0ExMzg2REUzOEU0RjdBN0Y3OThCNkUwRkM0RjBCQzAKKzoxMERGQjAwMDNEMTk1QjZDMjJGOTRCQ0FENTQ1QUE4NUUwQjRFNjVFRjMKKzoxMERGQzAwMEU1NDkzQ0E3MkE3MjIyQTk3RERGMDk5MEI3MDczOTZGN0UKKzoxMERGRDAwMDY1NUE3RTI1OUJFNEVBRkVGQzE2NDU0Nzc2MUFBNzgzMjAKKzoxMERGRTAwMENFQTFEQkM0OUMxMjk1REVFRTRENDgyM0ExM0EzQUM3ODAKKzoxMERGRjAwMDJGNUI3NDc0MkZCOEZDMjc5NUU0ODgzMUVEM0FDRDdBMDUKKzoxMEUwMDAwMEM2QkE4MzM1RjQzNTZFNzc2NDgwM0Q3MDg0QTZGRUQ1M0MKKzoxMEUwMTAwMDg3OTMwM0VDODE1NzY5RUQ1NDM3QUUzRjhBRjdFQjA1RTAKKzoxMEUwMjAwMDVCQjIzNUY1MkE4QUE3MDZDMDUxQ0M1QkM4QTVDREVCRkIKKzoxMEUwMzAwMERBMTM5MUZGREMxNkRBNDdGM0JGRURBMDk5RkMyRTJBMjQKKzoxMEUwNDAwMEUwN0M3MUMwQkFBQjMwMDNGQ0IxQ0FFNEI4MDFFMTU3NUYKKzoxMEUwNTAwMEU1MzE0NEEwNUVBQjVDOUMzRkFDNTE3QjFFNTdFOTk5MTcKKzoxMEUwNjAwMENCMUFFOUEzQkIyQTJCNzM0NDQwRkIwQjk5QURCQjc0QkQKKzoxMEUwNzAwMDgwQjcwQkJBNkQwRkU2REJEMEJFQjQzREQxMEE3NEI1RTQKKzoxMEUwODAwMDU2RjE0NDRGODZGRTRFNDczOEZGMDNFOTMzRDFFMEZEOTkKKzoxMEUwOTAwMDU1MDlGMkNCRkQyOTZDM0RENDNCQkRFNUI5MzA5MkJCQUYKKzoxMEUwQTAwMDA1OUQyNTFBQUNDMTg4RUZFREFEMkFERDBCNTAzRjg1RUIKKzoxMEUwQjAwMEZBMjA0OTBGREI1Qjg3MDVBNzVBN0NFQkY0RTFGRjVCOTUKKzoxMEUwQzAwMDVBMUZFMDg1RkM0NkZBMkNDNzQ2REU4NjcyOUM4N0FGNTUKKzoxMEUwRDAwMEI3NkE4NkUyMjIzOTU5QUM2NzhEMzg1NzU4MEJFRjY3MUIKKzoxMEUwRTAwMEFEQzg5RjExRjcwNUI5QkVGMzYzOEY0RUIwQTE1REIzMDQKKzoxMEUwRjAwMEU5NzBBMjhBN0M1Q0I3Nzc1NzFDQ0ExNzMxQ0U3REI4MEQKKzoxMEUxMDAwMDdGQUFCNjhGRkVBRjdDMThCN0ZBM0Q5NUExMURGOTkzOTMKKzoxMEUxMTAwMEI2NTk2MTkzNTFGRURDNjdCMENGODVGQ0E2RDY1RjFCNzQKKzoxMEUxMjAwMEYxNUU1MEFENzcxQkYxREU1OUI1NjdCQjExRURGRjNGRDYKKzoxMEUxMzAwMEQ5QkQ5REJFNTdFRTJFQTNGQkY2MEFENjQwRjdDOENGMzkKKzoxMEUxNDAwMDBDRkM5Qzk2RjBBODlBQTk2Q0IzQzJCQzg3RTc3MkI5ODQKKzoxMEUxNTAwMEFGMkE5OEZCODMxNEE5RjlBRjQ2RTE3QTc3MkI5OUI4RDcKKzoxMEUxNjAwMERFMUI4QkY3MUJDQkUwRkJFRjA0N0YwOURDMUY3RDZGMTEKKzoxMEUxNzAwMDJFMjgxQThFN0EyNTBGQjc4MzBFQjUxRjE2N0FDN0QyQUUKKzoxMEUxODAwMDdFNTg3MDI1ODlEMjFCQUY4Q0EzN0JENTdCQUM3ODNDQTUKKzoxMEUxOTAwMEYxODk4QzgwRkJFQzlCMkFENzlCNzVGMDdENTA2NUY0NTAKKzoxMEUxQTAwMDQ2MkRDMDdERjJCMjgxRjY0OTFERjBBRkJDMkNCQzI3RDQKKzoxMEUxQjAwMDMzMzYwNUQyRTI3QzU1NDNBRkFCMEE0MzM0RjRCQzk4MDYKKzoxMEUxQzAwMDQ1NkFFQ0NBOEJEODA4NERGRUM2QjkyOTlBRkEzN0RERTQKKzoxMEUxRDAwMDM4MkU4MEZFQjM3Q0U1QzQ0N0E2NjhGQzU3RUFENkI5NjIKKzoxMEUxRTAwMDZDMEFFOUQxNjY2QUJGNDNCQThFRThFQzVBNERGQjNBMzUKKzoxMEUxRjAwMDM2REY1NzBGRUZDMTNCRkU0ODcwNjZBQ0QzODhGN0FERjIKKzoxMEUyMDAwMDJBMURGN0Q3NTlFQ0VDMTZERkJCRTgzQjJDNDRCMzBGQzMKKzoxMEUyMTAwMDQ3QTVEOEZGOEI5RjhCMDZEMkNGNEJGREY0NjJGQzc3Q0UKKzoxMEUyMjAwMENBNjBFNzIyMjA1QThDMUJBRTcyRkQ4MjUzMkI3Nzc0OTIKKzoxMEUyMzAwMEQyRkQ5MzcxM0NENDA5N0Q0RjVEM0FEN0Y3RDRCOTNBRkEKKzoxMEUyNDAwMDhEMEQxNjgyQkYzRTFFNDA1MkRGQUE5MDNFMEZFQTlCMDQKKzoxMEUyNTAwMEUyMjM3OTdFMUQ3RTNGNjBGMEU5NTkxOEVGRUYwQTk2QzAKKzoxMEUyNjAwMDlGNTBDQjcwQkYwNDk2RDdDM0JBNTFDRUE4NDc3RDBEM0YKKzoxMEUyNzAwMEU5OTlFNjdDNEE3QTI2Mzk4RUU4NUZEMkU5OEE3NkFENUEKKzoxMEUyODAwMEZFQTgxRUY1M0E3RUY4NUM5QTZCMjM3QUFEREVCREZGRTAKKzoxMEUyOTAwMEI1MTEwMDlGMDVDNTExOTlCODhGNkEzREYzMEM2NTE5M0EKKzoxMEUyQTAwMDAzRTk0REYyRjlDQjU1M0FCMjdCRjdCRDc5OUNFOEFENjUKKzoxMEUyQjAwMEFGNEE0Rjc0RkQ3RDcwQTk3NzcwQkQ2NjIwMUQ1NkMyQjAKKzoxMEUyQzAwMEJBNEMzMDdFRTUwMUM1RUU1Njc4M0Q4NENGMDhBNENGMjgKKzoxMEUyRDAwMDAwRjhDNDBGMDIzNzA5QUY3RUY4MDU5NEFGQzA3RkU0QTEKKzoxMEUyRTAwMEEwM0Y4MUUyRjYyNjBEMDY5NzAwNzhDQTcxMDJFMEM1Q0MKKzoxMEUyRjAwMEYyQjRGMEE4NzREQURFNDZGRTUzNzk0MjY1RUUxRkIwNDAKKzoxMEUzMDAwMEZFMTVCODRFOUMwN0FDMTNFNzMxRkYwQUQ3OUI0ODdCM0MKKzoxMEUzMTAwMEMyQTIyQjdBQ0FGN0QzNEQzMUMwMkIwQkY3OUQ3NjlGNDMKKzoxMEUzMjAwMEY2RDM1MTMxREYzNzBCQUY0NDUzQkIxRjhCOUVCRThGRUIKKzoxMEUzMzAwMDhFRTRGQzI1REZGNkVEQTMzQjg5NkYzQTczNDNBM0NFNTEKKzoxMEUzNDAwMDAyQUI4MDdGRTcxMjVGMTBGQzc1NjhCOUQ0QzVGOUE4RUQKKzoxMEUzNTAwMDUzN0JDRThDQkEyMzhGRkM4RUZBMkNDOTI0NTdGNDlGQTIKKzoxMEUzNjAwMDQzNTY2REY5OUFEMEU0MTgyQzc3MEFCRDlERTRDNzRFNDgKKzoxMEUzNzAwMDUxNEY4RTUzMDZFNUI2NjE0OEQ3MjNBMzUxMUZCQkIxNTkKKzoxMEUzODAwMDI1MjVCMUNCNEY1RTcxNkUzMDQ0QTNCRTMwNzFGRDMwOTgKKzoxMEUzOTAwMDRBQ0JDQ0Q2NjgzQzQ3Q0FENkFCQzU3ODNFOUVCQTJCOTIKKzoxMEUzQTAwMDI2M0EwRkY1RjMxQjBDNTE3M0ExRUI1MzNGQ0Y0OTY0OTEKKzoxMEUzQjAwMEUzMzE1RjQ0RTlFOUFENDE4QkZERjVEQzMyQkQ0QjlDQjcKKzoxMEUzQzAwMDI3NzU3NzdDNDBFN0RBMDVERDlCNjE4QjcxREY2RDM4NUYKKzoxMEUzRDAwMDE4ODZBRTM3MzUxQkRFOUQ2ODA1OTE2NDUzODQ3MzczRDAKKzoxMEUzRTAwMDJFRDk1MUI3RUZCMjIyRENBQ0RCMjdBMDlFQkExREVGQ0QKKzoxMEUzRjAwMDFFQzM3REYyNDNGNTg2QTIxOEQ0OEJENUZFRkRGOEUzNEIKKzoxMEU0MDAwMDc4RUUzQkQ3MUJBMjUxRkVGQ0ZDNEY3MDJFMkE3NEFFNTcKKzoxMEU0MTAwMDkxRENGMDk5OTlEMTdERTlCMzlEMjE2RUI0REY3RkE2OUYKKzoxMEU0MjAwMDMwMDdEQTc3NTZBQTQ3Mjc1ODM1RTc2Q0M3MjI5Q0M3Q0EKKzoxMEU0MzAwMEVFMTg2NzNCMUZERkJEMkIxNkM3QjdCQkM4M0ZEM0I5NkMKKzoxMEU0NDAwMDdFNzRGODYwN0ExNDk5QUU2QUU3NzJERDJFQTlDNzE1NUEKKzoxMEU0NTAwMEZBNUU5NEU3MzE4RkYyM0MxQkMzRTU3OUNDQTMzQzhGODUKKzoxMEU0NjAwMDI5Q0FGM0Y4RkQ5MEQwRTM4RjZBRUVDREM0RkJBODZCMDgKKzoxMEU0NzAwMDI2NEI2RkEwNzNENzkyOEVGMkZBNkQ0QUIwMURGOUNGN0EKKzoxMEU0ODAwMDZEOEEzRDA2RjU2M0VDNEYxMUZDQkMwREMwQUY0Q0E3ODcKKzoxMEU0OTAwMEY1ODJDQ0U1NDdGN0QzQUY5ODk4QkY5RkQ5MEMxNkExNkEKKzoxMEU0QTAwMEM5Q0YzMkM1NjlFQTE3NTk5MzM0RTUzRjg5MURBQjI5QjUKKzoxMEU0QjAwMEJGQzY5NkE5Qzk1Rjk3M0U1OTUzRkY3QUZCMEM0REZFMjQKKzoxMEU0QzAwMEE3NzlENzY4RUFDRjczQ0NEM0U0MTdDQzU5QTJBOUJGRjgKKzoxMEU0RDAwMEIwQjg0QzUzN0VEM0UyOTU5QUYyMjVDRUQ1OUFGQ0NEQjYKKzoxMEU0RTAwMDU1M0ZEN0Q0QkZBNTYxQkRBNkRDQzFBQzdBM0NGNzNBOTUKKzoxMEU0RjAwMEYwOUUwNTcwN0YxOUVGNTk5MERFRjZENjY4OEIzRjVFNkYKKzoxMEU1MDAwMEYzNjdFOTFBMDZEM0QzN0YyQ0U4Mzc2MzkyRTM0M0E0NzkKKzoxMEU1MTAwMDhGMDQxREE3NDM0ODFEMjg0MjVDMTBFNzRBM0NGMzJBOUMKKzoxMEU1MjAwMEZDOUVEQjE5ODc3NDEzNTgyRkIwM0MzRkU0RDg2NTFCNjEKKzoxMEU1MzAwMEUwRjBBNjg5MjEzN0VCODEzRkU0NEYzQTk2OUQwMkY5M0UKKzoxMEU1NDAwMDI3MEVDREUzRjlBOUM3OUU0Qjg2RkM2RjI2REVDN0YzRTUKKzoxMEU1NTAwMDU3MUZCQjhDRTVBMzlFNUY3NEIzMUVGODRFRkUwMjQ2QTgKKzoxMEU1NjAwMDIyQzc3Mzg3QkU1RUVBODI3NUU0NEY0RkRFNjJFNzdBQTgKKzoxMEU1NzAwMDkyNDFGRDM0RkJGNTJDMDAwN0Y0NkY0NDM4NjBFQTA1NDYKKzoxMEU1ODAwMEZBQzRGNDE4RDAyN0E2QUYwMDdENTYxODE4N0IwREU4MDIKKzoxMEU1OTAwMDEzRDMxMzcwREZDNEVGQUZDMzdEMTNEMzM3RTFCRTg5NEMKKzoxMEU1QTAwMEU5MUZFMEJFODk2OTI3REMzNzMxN0RBNzY5MzFBNTdGODYKKzoxMEU1QjAwMDZBNzI1MkJCRjc5QkFBMjhGREEwQTk4MUJFN0ZEOEQ0NUUKKzoxMEU1QzAwMDQ4RTk1RjlBNUNGNEREM0M1MUVBMkZCQ0E0N0Y5MTc2NjgKKzoxMEU1RDAwMEE2N0FCNEVGQTE3RUVFQjBFMUJDQkYxRDU2REEwOUE1NjQKKzoxMEU1RTAwMDVEQjBCOTgxNzU4NUUwM0VFREQyNDc5QzM1RjlFQzdEOTMKKzoxMEU1RjAwMDQzRjM1OTNEM0JFQjI3ODc2RDhENzU0NDREMjRCREM2RDQKKzoxMEU2MDAwMDQ4MkJEOTdCQzRGNzk5Q0E4MjA0MzRGRENEOURFMDFDMDgKKzoxMEU2MTAwMDgxRTUwQkIzQ0EzNzg0MDNGRjk4RkU2RDgzMDFFOUU1RkEKKzoxMEU2MjAwMDNERTFBNzFBRDhGRjg1NUMyRTBGMUIyNjM5NDY0RDg0ODUKKzoxMEU2MzAwMEI0QzBDNEZERjAwQTRDRENDRkFFNDBERkQ1OENGQ0E4RTIKKzoxMEU2NDAwMEY5MkI2NjQzM0Y5QUEzQTE0NkUyNEZDRDc3RTlEREE4QjcKKzoxMEU2NTAwMEE3NTRCRTY0OTQ5RjE2QzUyOERGRkM1NTI3RjlFNTE1MUQKKzoxMEU2NjAwMDU4RURCMTc0REU4ODdDQkZGRDFDRkZGQ0ZDNjVBNDNENDkKKzoxMEU2NzAwMDVCRkFDOTE0N0VEOTM1MEJFNTgwNjkxNkEzMkQyOEMwMzUKKzoxMEU2ODAwMEZFOEU3NkVCQTNBMUVGQ0JGOTMwMUM0RkRBQzk3NzdDNzUKKzoxMEU2OTAwMEM1QkNCQTA5M0U3Qjc4ODFBOTMzMDlGNTA0RDNENjlBNjMKKzoxMEU2QTAwMEVDRkVGRTNGRDJFRUFEN0NEOUE5RTI3OTIyRkQ3Q0U0RkUKKzoxMEU2QjAwMDM4NzJCRUExN0FFODJGQ0JFN0M3NTM2MEY1NjRBMjVGM0EKKzoxMEU2QzAwMDQzNzM5RDg1RkE4QjgxRUZDNjJDQUFFNzUwQTk5RDI3M0QKKzoxMEU2RDAwMDEzRjVDMEQzNkEyRDc2RDQ2RjRCN0I3QjhDNTgzN0Q0MUYKKzoxMEU2RTAwMEEzNzUxNjdFRTkyNDdGODM2OUMyREYwMEZCMzFGMTcyRDYKKzoxMEU2RjAwMDE3RjYzMzJEQ0ExQkE3QzdGNTM3MThFREE4MEY3RDRDQTkKKzoxMEU3MDAwMDgxRjY1OTNFRkIzRkQ2MEZGMURCQkYzODRGRUMzN0Y1QjIKKzoxMEU3MTAwMDZCOTgyRkNBRUQwRTA3QzE3NzgxQkNCRkQ5NDQ1RTlDQjAKKzoxMEU3MjAwMENGQ0MzNDkzRjQ1N0FBQzgxRjlCRTA3NDIyREU4QjgzQUUKKzoxMEU3MzAwMEFDN0YwREExN0Q5RTkyODA3QThFNzk0MjZFRkYwRTdBMUIKKzoxMEU3NDAwMDU5OEU3NEY2REZBNzE3MDdDN0Y3NDg0NkZBQjQ0MEJBRTAKKzoxMEU3NTAwMDkxNzg5MTc4MUU4QThFMjRERUZERkNCNTA4Q0ZGREZFRUYKKzoxMEU3NjAwMDU3QTI5RjQwRkExQThBQUUyNDNEMTU5ODM4REUxMUFGQTEKKzoxMEU3NzAwMEU4NDcyM0U5NDhGOUQyQjM5REQ2NTE2QkEyNzM0RUQyMzQKKzoxMEU3ODAwMDUxMjAxRDBDQTQyMzRFOTdDRDNGMzM1MTdGMDNFOUM4ODAKKzoxMEU3OTAwMDg3N0Y4NEM3QkY0RTQ3OUQyQTlFQkJGRjJDRkREQ0RBRDYKKzoxMEU3QTAwMENCNjY4NzQzRDEyRkFFNzY1RUM4NDU3RkEwMkJCNkQ3MDgKKzoxMEU3QjAwMDMwNUZDRTY2Q0M0NjkyOTJFNTJENDM5NDA3RDI5N0FDNUIKKzoxMEU3QzAwMEZGMzRENkNGMUQ1OERGRjk2NUFGMjFEQzhGMkVBNzg5MjYKKzoxMEU3RDAwMDMzRjBGNTIxRkE3RjQzRjhDNUJGNjE5NkZFMUUwRTRCNUMKKzoxMEU3RTAwMDI2RDBDMTJDQzE4NzZGMkJFMkY0MzUyNzQ5MjU3QkM2ODMKKzoxMEU3RjAwMEFDOEMxNTI0REYzMzBCOTc4RjZERjAzRkQyQjcwOUZCM0MKKzoxMEU4MDAwMEZBQjVBMkRERUM2RjhCNUI3MDlDRDk1MTVBRjlGQjVBQkIKKzoxMEU4MTAwMDIxNzdDRjA5QjBCNzVGOUJGMTEzOTJDM0FGMEQ5MEIzQ0YKKzoxMEU4MjAwMDdGM0Y1MUM4RDE0OTJDODlERkFGQjc5MEZDNUIyOEY2RjgKKzoxMEU4MzAwMDYzQkNDMDc3OEE0RDY1RjkwMEY3MjJFNkQ0RTMyMUYwODYKKzoxMEU4NDAwMENBNDVBMzAzRkJGQjA5NzM1MUZFMUFFNkE2RjQzQUU2OTgKKzoxMEU4NTAwMDI1MzlFMDdBMzgzMDMwRkY1M0Q4N0E5ODNGMUU3MjQzMUEKKzoxMEU4NjAwMEM5MkFFODZGNTZGNkFDNTRGQzVFNkJFQTREMzRFQUQwMjgKKzoxMEU4NzAwMDNCRDBGOTIxRUVFNzdBRDVGOTMxQ0E5OTE3MTI5QzYzOUEKKzoxMEU4ODAwMEYwN0U3Q0FDRDA0NjcyRDgzMTUzMEFDOTg1Qjg5RjBDNTMKKzoxMEU4OTAwMDdFRkFDQURGQzMzOTlBMEFFN0RDNzEzODY3MzE3RDE1MjEKKzoxMEU4QTAwMENFRDk1NDM4RUY3RTA3RTcyQ0U2QUY0RDVGQ0ZCMEREMTEKKzoxMEU4QjAwMDZDOUJENkJGNDdCNkJGQ0UzQThCRTk4NzBEN0Q4RTVEODgKKzoxMEU4QzAwMDM3RTE4NTkxQThDNzdBMjM2MjRDMjFFMkVEOEQ4ODQ5MTIKKzoxMEU4RDAwMDg1QjhERTM3MjI2Mjc0M0MwRDMyNTIzQUZFRjlENEMxNUIKKzoxMEU4RTAwMEU0NTY0OUFGQkVGMTY2RDM3ODgxRjA5NUYwMEM4NEEzNkQKKzoxMEU4RjAwMDg0RUZCRjAwNEZGREE0REM4MUYwQkM4MDY3MzBFQTRGOUQKKzoxMEU5MDAwMDRERUY4NkM1MjZBMzlENTFDNEQzODU3MDNFNThGN0ZDQjQKKzoxMEU5MTAwMEY4MTg1QzQ3QUQ4OUMzNjU1QUUzNTQ0QTBCMUEyNzMzOEMKKzoxMEU5MjAwMDdEMzZEOTk5NUMwOERGQ0Y3MTA5QTg3MDBFRDBCMzMxNUMKKzoxMEU5MzAwMEZENENDQUZGNENEMDU2N0E4QzMzMUFFNzcxM0VDQjlCMDQKKzoxMEU5NDAwMDA2MTIxOUZCNzQ1QjczMThGQTY3NUU3ODQ2QjVFM0JENkYKKzoxMEU5NTAwMEE2NTZCNTZEQjFBMzlFRkMwRDk1QzcwNTdEN0IzQzExRjgKKzoxMEU5NjAwMEVEOUI2Q0M3RTBGRUQyQjUyNjA5M0YxN0MxQjVFRDZBMzUKKzoxMEU5NzAwMDA3RUQzNzg2RDZEOTY4OUY1QzMzMzI4OEZCMTk5Mzc5QzcKKzoxMEU5ODAwMDIxNkI2ODM5Njc2MjMwRTczMzIzODMzODdGOTRGODgyREMKKzoxMEU5OTAwMDc2RkNEQzg1N0UyNjAyNUY4QkJGMkY5OEVFMzU3OUEzNEYKKzoxMEU5QTAwMDFDRTM3MTNEQUM5MDY5RUUwNTUyN0ZEMTE3QTVEMkY5RjkKKzoxMEU5QjAwMDUwQzBEMjFFQzJGQjdCRTEwOTAzRERERkZCMEExOTJGMjkKKzoxMEU5QzAwMDhGRTVGNkNBQkUxMzk3NTVEQ0VGNDVBMTBBMUI5NkU0MDYKKzoxMEU5RDAwMDhCOUIwOThBRDUzMTlCOUYzQzZEQjYwNTMzOUIxRkREMTAKKzoxMEU5RTAwMDg2QTQ0NzZBRjJBMUY2MTE5QUZBRTE3OUM5OUFGMjA4NjcKKzoxMEU5RjAwMEM3NTU5QUYyNjE3M0IyMzRGOUUxQzU1MzM0RjU2MzE2MjEKKzoxMEVBMDAwMENGRDRFNEUzOUNENzZBRUFDNzU3Q0REN0U0MjUzRjhBNDEKKzoxMEVBMTAwMEU3OUY1ODQyQzM1MjRERkI1MThEQ0IzNEY1OTM1Q0Q1RTMKKzoxMEVBMjAwMDlBNzIzNTM4RUM0OThBM0I3NTM5M0FEM0EzOTE1RkYxMzQKKzoxMEVBMzAwMEJGOTRDRDZCMzRGNTFFMERFMzcxMjA3MzJDOTU3MzcxNkIKKzoxMEVBNDAwMDFGOEU2RUJENUQzQjJGRjU0RDg1RTIzQTZEOUMwRkJBNzIKKzoxMEVBNTAwMEUwN0Y4OERGQTI1ODJENUY5QzY1RDVFQTFCRTIxQkY0OUUKKzoxMEVBNjAwMDlBN0NGNTI0RTE4RjM0ODE0RDIwM0VGODdENzg3NjVFRTYKKzoxMEVBNzAwMEE1QzE3MzIwM0MwMEVGNzYyRkQ2ODc3M0Q1MDVGOUEyODgKKzoxMEVBODAwMERGOTdFQkYxREM0N0JCODJGRkZDRDFBRUUwQkY1RUI0QTkKKzoxMEVBOTAwMDJCRjhFN0QxQUVFMDVGMUZFRDBBRkVFNTY4NTdGMDJGRDcKKzoxMEVBQTAwMENGM0VBMUM1NzM2RUE3MTZDRjkzM0VEMEUyNTlEMkRGRjkKKzoxMEVBQjAwMDUwRjg5OERDQTVBNTgzNDA3QzRDRkQyQzgwMkUwNDFFQ0MKKzoxMEVBQzAwMDE2QzNGRjA2QzMwMzVEMTE4MEZFNjczNTMwRDI5QjdEMDAKKzoxMEVBRDAwMDFGNUUxRTlCMjRDRTI3ODExN0MwMDNDNUY1RjU4RDBDNDQKKzoxMEVBRTAwMDI1M0MzQzI2RTY1RkUwMUQ0NzcxQjE0NUE4Mzc0QkYyNTcKKzoxMEVBRjAwMEFERTczMTcxRUVGRTc2OTg3M0Y3MjREOERGQkZCMzY1Q0EKKzoxMEVCMDAwMEM1MjIzRjlBQ0VCODVENzM3NkFEQ0VFRTg1RUU5RjBBRjQKKzoxMEVCMTAwMEMwRkY4NEIxQ0U3RDU4N0ZGMUIwQ0I4OTQ2QTQ4NzVFMUIKKzoxMEVCMjAwMEU3MThCQzRGN0UyOEY0MjQ4MTdFOUMyRTEwMDcyODBFMDcKKzoxMEVCMzAwMEUxNzY5NUUyNkY0RUVBNUExNUU0Q0JERTA0RTcyMUU0NzQKKzoxMEVCNDAwMDFCQjc2NjM0MTA5REM2QjJFMkZEOTUzMEJGRDJGRjBDRjQKKzoxMEVCNTAwMDIyM0I0RUU5MjgxRUFGQ0IzMkJBMjhDRTQxRjJCQkQyQkYKKzoxMEVCNjAwMDc4RUU0N0Y0RjIyNDYxMTdCNjczN0ZBMkEzOTNCODNDMDIKKzoxMEVCNzAwMDFCNkFCNzkyREY3MTU5MDY4RkUzODA2QjU3NjJFOTc4QTEKKzoxMEVCODAwMDg0Q0Y5QkU2MzEwODlGMzY2RTM3RTlDMjc4RTEyODVGNzMKKzoxMEVCOTAwMEJDMzBDQTlCMjhERjI1MDhGOUFBRjlDRjI2MTNBRTYzM0IKKzoxMEVCQTAwMDRDM0JEMzlDOTM2M0REMjY4RERGRUJCOERENTY0RDdFNjkKKzoxMEVCQjAwMEJDMjc1NjUzRkZFQUMzMzY0RDc5QTYzNzVENTM5RTdENzkKKzoxMEVCQzAwMEMyQUVDOUU3NzZFNjY5RUE0RkZBQzBBMUM5NEZFRTlBMkMKKzoxMEVCRDAwMEEzQTkzRkY1QjM2MjREM0U5RUY1M0U4Q0YwMURBNUYwMTYKKzoxMEVCRTAwMEZCRkUzNzkzQjhGRjE0RUM1NUIyRTM5NTZFOEFFMDcxRTMKKzoxMEVCRjAwMEEwNDIwRjIwRTU2OUU5MEZFRDE0RjQxRDI4QTc4RjMyMUMKKzoxMEVDMDAwMDcyMzlCNTM5OEVGMTdCOTg0OURDQjc5ODU2NUU3NzBBMzAKKzoxMEVDMTAwMDdGNjYyOUE3MzI5N0Q2OUY1OUZBMzFGN0NCRjU0MjZFMTYKKzoxMEVDMjAwMDk3RjJCMTlGMUZCM0MzREY4RkI5NTRDNDZGMDc5RTdGQTQKKzoxMEVDMzAwMDg2M0NBRTFGMDk5Q0ZGMjgyMzVGNkZGM0NGOEQxNDM3RUUKKzoxMEVDNDAwMDIyRTcxNTM4MUY2NzE2QTdEQjlEQTZDMUUzNzc4NkU1ODcKKzoxMEVDNTAwMDcxM0RDMUY4Q0NFMjkwM0M0ODFGMzdEOEREQTQ0NzE5N0MKKzoxMEVDNjAwMDMwOUVCRENCODVGN0NBNUYxQUVENzdEQUJFN0ZCQ0QyODYKKzoxMEVDNzAwMEFCRjk3QTRBNzRCQTVCRTc2NTkwQkZEOEUyNjdGREM2MjQKKzoxMEVDODAwMDRGMTFFMzA2NEQ1MTA2NUQ1RjY5MzhGN0U3NjJFMTQ2RDMKKzoxMEVDOTAwMDFCRDJFRkQwRTM3MTc4QzYxQTU5MEJDNTE5MDlCRkZGMTMKKzoxMEVDQTAwMDVCQjY3OEVFMUQwMzQ1MjVDNjU2MDMyOTJGOThEQjgwRjkKKzoxMEVDQjAwMEY0MzA3NzI2Qzg1Mzk5OEMxRERBRkZFQzIzMTY5MDY3NDEKKzoxMEVDQzAwMDFFNkZENDkzOUVFN0FBQzMzMTI1QUU1NDVGMUNDNzI4OUMKKzoxMEVDRDAwMEI4NkYyMDdEQTBDQzgyRjc5NDQ3Mjc3MzdGRTVFQkYyRDUKKzoxMEVDRTAwMEY4RkE4QUQ0NkZGQkZERUZDOTdFQzE5ODM4MjcxOEY5NkUKKzoxMEVDRjAwMEMzMEM0MjZGNDQ4NzcyMUQzRjk2M0ZCRUE0REI0MDM4NzEKKzoxMEVEMDAwMEM5RkIyNTEzRkU4RUE5NjI1RTEyN0U3MjNGNDhGOEM5QzgKKzoxMEVEMTAwMDc4MDhEQjZBNDNGMTkzMTY4QUFCOTg4MzdFNjQxMjdGOEUKKzoxMEVEMjAwMEJGOURDQ0Y5RDEyRjA1M0NCMDFFRjJBM0ExRUExNUE5RDUKKzoxMEVEMzAwMDE5RTFBODBGRUY2M0I2NzBFQjc3RTg3QjdGQzQzODA1NjUKKzoxMEVENDAwMDgyRkY1MEYxNTU0M0YxODcwMTdDNjE4ODc4QUJBMUU4REYKKzoxMEVENTAwMDkzRkVGRTg5QjgyQjNGRkVDMEZEN0EwNDNFRENBOTNBNDMKKzoxMEVENjAwMEIyQTM2RjBBRDVFRUUzQTcwNDdGOTgyN0Y2MTM5Q0UzQkUKKzoxMEVENzAwMDk2NEMyRDlGNjBBOEJGNkZERUEwMEEzRUMxQ0Y2Rjk0NTYKKzoxMEVEODAwMDZCRjBGQkYyMEQwNjNBNEYxOTJCN0UxMEUzODgzRTY5QkIKKzoxMEVEOTAwMDMzOTA3RjZCODFDMzM2REJDRUVERjMyNERGOTBERDBCNDgKKzoxMEVEQTAwMEE2NTZFNkQyOUVEQjIwNDczQzg5Rjc4OUU5Q0NCRTExMDYKKzoxMEVEQjAwMEVEMTlFNTlCQjVFNTJCMkNCMzNGNDdCOTYxNzlDMEJEOTMKKzoxMEVEQzAwMDc0ODVCOEFGQUUwOEI4OTc2RUNCMTNFN0IxOUREOTQ5M0IKKzoxMEVERDAwMDFFMTM3NkZFMkE1MUE3OUY4RURDMjlFMTQyRUY0MkZCRUIKKzoxMEVERTAwMDEzNTJGMjBCOTM3MEIxQTFCRDI2REI5NzA3RjgwNUE3NkMKKzoxMEVERjAwMEUzMzlEREEyMUZENDVGQUYxRjdFNDNGODIzOUM0NzdGMUEKKzoxMEVFMDAwMDA0MUJFRUY3M0U4QUI3RUEzQjYwRTY3NjRBNjkwRjEyQ0EKKzoxMEVFMTAwMEY1Q0ZCQjJFNTMzOUQ2QzdERTJFNjQ3NjRFNDA3OUE3ODgKKzoxMEVFMjAwMERGN0UxNDYwODdFQUIzRThDMkYyQjBCRkJEMDZFQTRGRTYKKzoxMEVFMzAwMEZBNUI1NEZGQ0QzREMxRUE2NzRGNzY3NkE5MUFGRjk2N0IKKzoxMEVFNDAwMEMwRDRCOUZFMjBGOTVGNkM4QTcwQkU4QTdDRkM5Q0RFNUYKKzoxMEVFNTAwMDZFNDJGQ0RENjUzOTE2OEQ3MUYyNzM4NURFMjY3MEJFNUIKKzoxMEVFNjAwMEZERjI2REJFQzJFREIwMkUxRTM3REIzNzQ3MjEzRjAwRUQKKzoxMEVFNzAwMEUwODMwQ0Y3OERGNDFCOThDN0JDNTE5ODRBN0I4QzczQzgKKzoxMEVFODAwMEYzNjQ4MkIzQjRDNzk0NzkyN0QzM0MxNzM2QUYzMDA0MDgKKzoxMEVFOTAwMDQzOTVBRTg3RDcxNTA1REI3Qzc2OUFBRTA0RUVGNzMzNDMKKzoxMEVFQTAwMDk0QkQ2NkMxOTU0Q0VBRUZDNjJCNTNBOTlGMzM3OTQ5QUYKKzoxMEVFQjAwMDVDRUU2QUI5NzczNUQyRDE1NUJCOTkwMUQ3RDkxNUUwNDcKKzoxMEVFQzAwMEY3MkVEMzFCMjdGM0ZEQjAxQTYzMzE3MkZERkM4OUQ2RjAKKzoxMEVFRDAwMDJCNDRFNzZCMTQyNkZEOEI4ODRGQ0JGQ0U1NTY5MTJGMTYKKzoxMEVFRTAwMEUyRjlEQjM2RjA3Qzk3ODFCRjMzQjM0QkU4MUI3MDlEQjIKKzoxMEVFRjAwMDk4RTI3QUYwNUVCQzU3RTgyMzcwMUQ5OEUyM0FGMDNCNDYKKzoxMEVGMDAwMEYyMjVDQzIzNUZDMjNDRjIyNUNDMjM1RkMyMTRGOTEyNTgKKzoxMEVGMTAwMDdFNUZDNjhBMTMzMzU1NkU1NzJBRjREQjM3Njg1NzJBNEIKKzoxMEVGMjAwMEY0OTM3QkQwQUVFNDlGNDdCQjkyN0Y3REI0MkJGOTk3REYKKzoxMEVGMzAwMEEzNURDOUJGMUNFRDRBRkU3OUI0MkJGOUQ3NDdCQjkyM0MKKzoxMEVGNDAwMDdGOUVFNTVERTNDQjIzMUY3M0NDRDNFNDE3ODA5QzVGRUEKKzoxMEVGNTAwMEU4Qjc2RkQxQUVFNERGM0ZEQTk1MzRGRDM5NTc2QkRBQUQKKzoxMEVGNjAwMERGQ0MxQTM1RUREMUFFRTQ1RkZGRDY0NjQ1NjM3N0JBMDQKKzoxMEVGNzAwMDU1QkMwNzUwREUzRThDRTg2M0VGODRFMkE0Qzk4MERGMTUKKzoxMEVGODAwMDhGNDNGRUZFMzMwM0RFMzdENDhFOTU0OEI3NkJFQTgyOUIKKzoxMEVGOTAwMEVEMUNDRkFENzMzOERFNzU4Q0UzQjk3NzA5RTE3OTlENEYKKzoxMEVGQTAwMDkxRTc4QkI4RkZGMTYwRjY5QjQyMDNCN0RGNjA4QUY2MEEKKzoxMEVGQjAwMDFCNENEMTdFODMyOURBNkYwQTQ3NzNGQjBEQTY2OEJGMEQKKzoxMEVGQzAwMEMxRUY2OEJGQzExNEVEMzc5OEEyRkQwNjUzQjRERjYwRUUKKzoxMEVGRDAwMDhBRjYxQjRDRDE3RTgzRUREMDdFODMyOURBNkZGMDNCMUQKKzoxMEVGRTAwMERBNkYzMDQ1RkIwRDdFM0Y4OTc2MjRCRjc3MzM1MDRFNzQKKzoxMEVGRjAwMDRGRDVEQzFGODEwRTM1Rjc0N0FCMjY4RjcyQkE3RjdENjgKKzoxMEYwMDAwMDk0RDNGRENCNTE0RUY3MkY0NzM5REQzRjhGNzJCQTdGMzYKKzoxMEYwMTAwMDdEOTREM0ZERjNDQkYzNkNCNEJGNTA1RUY3NkY4N0YyRjIKKzoxMEYwMjAwMEJBN0Y3RTdDQUJFQjU1RDQxRDVEQkZFREUyMkI5ODc2QUQKKzoxMEYwMzAwMDg1MkE4RjJCQzAwQTk2NERERTU3ODI3NkI2MkVCMzkyNjQKKzoxMEYwNDAwMDE4MDE5Q0QyQjBGRUQ5OTI0MkQ4QjM0RUUxQzczNzgxQTUKKzoxMEYwNTAwMEY1RUExMERGNjQ2NzA3QkMzOUJEOENGQzhFQzc3RjEzRUYKKzoxMEYwNjAwMDQ3RTVEMkFFNEI3RjgwRjdDQzAzOENFNEZFNDMyMjVFQjMKKzoxMEYwNzAwMDUzQjZCNzMzQUI4QUE5QUNFRkNCMEY1RTJGNzA3QzU5NzgKKzoxMEYwODAwMDhGRjhBNURGM0NFMDYyOTg4OTdFMjY5OUVCMkM1OUU4NDEKKzoxMEYwOTAwMDJGQkY0QkE3NzA3RkQzM0JCOUJGNkYyMDVEM0QyOEU0RTYKKzoxMEYwQTAwMEEwNURCQUZEQzc4MkQxN0ZBODRDQjE2MzFDNDM5QTlFNzQKKzoxMEYwQjAwMDlEMzA2NDIxOUMxQUIyNTAzRUI4NjM3Mjg0RjAwNzZFOTIKKzoxMEYwQzAwMDk4ODJGRTQ3NzJERTUyMEYwODdDODJFMkQ3RjI3Qjk5NkIKKzoxMEYwRDAwMEIxMDJDNjk5RjYyNTMzMkU0N0ZFNkVFNDcyMDFCNkMzMUYKKzoxMEYwRTAwMEZCRTIzODk3RTI3OEQyOEZCRTM3NEZFNkU3OUJEM0I1ODUKKzoxMEYwRjAwMDdBNEEwNTdDMUZCN0I3NjEwQUM2QzVDRDBERTZFRDdFMUQKKzoxMEYxMDAwMEYzNDQxOEMxRjE4NjE2RTU0OThDM0ZDQ0RGQ0IxQzE4QkYKKzoxMEYxMTAwMEVGQkE1NUYwRDM3MTdCQURDNjBBMUFENzRBRjE3NEIyNzMKKzoxMEYxMjAwMERGQjI2RDg5MTRGRjU3QzZCQTBBMzFCRTgyRTUyODBDREEKKzoxMEYxMzAwMEVEQTMxMjZFQjBCRTU3NzA3RDY5QjA1NTBDMjQ3RkYyRkUKKzoxMEYxNDAwMEI4OUM2MDExOTcyM0UzNzE4MjIyOEExN0U2RTVGQUUyMDAKKzoxMEYxNTAwMDcyQTZFNTQ0MTRBMTVGMUNFQjYwNzYwQzAzQkUzRUE3Q0IKKzoxMEYxNjAwMDZDQzM3MEU4REZFOTc2RDhEMUFGNjhEQTk3MERBRjUyOUIKKzoxMEYxNzAwMDdFNDczMUU1ODkwQzI2RDIzODc0QUU4RDcxMjlGNEJFRjQKKzoxMEYxODAwMEM2MERBRUVEQkEyODFCQzZFQkFFMzc0NDYzRkRCRENDNTEKKzoxMEYxOTAwMDhFRTIwRTFDMzUxNDc3MkFFNzk3QzEzQTc1NjYwNUYxQTEKKzoxMEYxQTAwMENFOEUwRkYzQTMyM0UwMDAzNzIyREUzM0VEMDY3QTdGMDUKKzoxMEYxQjAwMDYzOUVERTZBNDBCRTExNzg4RTBGRjQ1QjBDOTAxMzAyRTIKKzoxMEYxQzAwMEZDNEI5QUQ3N0Q5MEE4MjZBMzdGODlDRUVFNDVCRTc1Q0QKKzoxMEYxRDAwMDMwODRFNDA1MjlFRjk0MDk3RkIzQ0IyREFGMEVCRjA5MkUKKzoxMEYxRTAwMENBQ0JGNjczRjlDMEQ5QUUxMEZGOTNGRTI2NzUyOUVFOEYKKzoxMEYxRjAwMDQ0MURDQTBCMjNCNjRGODg1NEY5Rjk4RjdDRjE5Q0VCNjAKKzoxMEYyMDAwMEI5NDVCODQ1Q0IzNkJDNEE3MTExNjUxQjcyQzM3OTVDRjAKKzoxMEYyMTAwMDE0Qjc0MzU0MDgzODU1MDhCRjIyOTY2MThENDYzOUYzMTgKKzoxMEYyMjAwMDE0RjAxREM3MThGMjRCMENBN0I4QzI1NjJFQ0Y0OUJEMUIKKzoxMEYyMzAwMDhFOTQwN0U1RkIzMTY1NkY2NUJGODY3ODJGN0I0Q0JDRUMKKzoxMEYyNDAwMENCQjJCOThDRTJBRjAyRkQ3QzZBODRCQ0I3QjJDNTQwRDgKKzoxMEYyNTAwMEZFNDMyQjAzRTRDMTFBRTEyRjU0MTMyMDBGOUU5QzJDNzQKKzoxMEYyNjAwMEY0NDA1MjFFMTRGNzE3RTlDRjVCRjZENkYxODUyNEFGQjAKKzoxMEYyNzAwMDM0MThDODJFNTdCMjlFQ0IyRjZDM0Y3MzYzM0M0M0M5RTIKKzoxMEYyODAwMEZBNTkzQTdDMzdBNEU0QTBDM0FFMEM0MjI3NkYwQjM5N0QKKzoxMEYyOTAwMDY2NkU5Nzk5RTAzQUZGNEEzQ0E1OEJBRUM0NTE3QUQzOEIKKzoxMEYyQTAwMDE1RUU0Nzg5QjEyRjQ4MDc1RDJGMzA5MkEzREYxNTcyMDUKKzoxMEYyQjAwMENCNDJGNEFCQzQ3ODQ0NTc5MEYwOUY2NDI0Mzc2NTMyNTYKKzoxMEYyQzAwMDZCMTFGMjhGQUIxQ0NBNzExNEZCRTYxQTlDMUJEMDZGM0EKKzoxMEYyRDAwMDczRUU3NjQ2RjE0N0Q3QTM3QzAzRkQyRjQ2NzkwN0Y1RjkKKzoxMEYyRTAwMEVFMzk0OTQ1MTQ4NzMxNDdBMTc4OTZFQjczNTYwQkZBRUUKKzoxMEYyRjAwMDA2N0E2NzQ4RUYyRTQxQkZDNTk0RUYzRjE3MDQ5RDNCNDgKKzoxMEYzMDAwMDVEREQ3QTg0RkJGNTJFQzU4OEVGRjAzOUM1M0Q1NkQyMTgKKzoxMEYzMTAwMDcxMjBCRDk3ODYwOEZEOTM4NUVCOTdGQUY1NEYzODU5MTQKKzoxMEYzMjAwMDdBRDRDNjc0MEJGQUI3OTZBMjZFNzAwNEUzODgwNzk4NzUKKzoxMEYzMzAwMDg3NjZGMEYyRDgyOUE2NUI1QUYwNTJGM0RGRDQ0Qjk0REIKKzoxMEYzNDAwMEU4NzQzQ0RFMDlFNDJERTRBQkI3QUNDRDM0MkVGM0UzMzYKKzoxMEYzNTAwMDJGOUY0QzlEMzk2OTZBQUUwRkVGQ0IwMkUyRjRENkRDRTkKKzoxMEYzNjAwMDM1M0FFNkJCRTI0NUNCMDFDRUI4NEY0QUMzQkI3RTA2NzkKKzoxMEYzNzAwMDE0Q0FGMkE2MzA0NzIxODg5RTRCOTg1QzI3RjNBMjVGRkYKKzoxMEYzODAwMEUwNTI5MTVGM0UyNUYzQUY5QjMzMDgzRTk0Q0Y3OTMxMzUKKzoxMEYzOTAwMEZBMTYxN0YxNTVDRUI3NkU0NkJFQTUyMkJGNzI2NjRENUUKKzoxMEYzQTAwMDIxN0VENTM1MUJGMTExOTJEMTJCREUyMUUwRjEwRTgxQUEKKzoxMEYzQjAwMDdBODhFNTUzMzgxRTAyRjUxMUU1MTk5QzlGMzNCRDJENUYKKzoxMEYzQzAwMEYxNjY4QTBCQjY5MTNFNEZDRUZGOTQ0MTFCQTcyOUQzMUQKKzoxMEYzRDAwMDVCQTY3MEJFRkM2M0M1MzdGQ0FGMTRFNzBEQjhCRTA3NzMKKzoxMEYzRTAwMDc1M0M2RTdFODREQUNBODQ1RTg4RjZCRkU0MUY0Q0JDMkUKKzoxMEYzRjAwMDIzRTFDMzNGQzg2OTY0NDc1N0FDRkVGODc3NkU1Njc4N0YKKzoxMEY0MDAwMDlDRkExMEZBMUI5NkRFRkJGMDRFRDRERjM1MTkxOUM2QjQKKzoxMEY0MTAwMEI5M0U5MUM2RTlFODg5REI4RDI0ODc5NzE4M0I1RkM1MjMKKzoxMEY0MjAwMDc3QjIyNDFDM0Y2QUZDMEYwM0U5RkY5OTc3MzRCRUZGRDMKKzoxMEY0MzAwMEI1QjRDMTZDNDdGRUZDQzlENEUyOEEyOUMzMTExRjc2NUEKKzoxMEY0NDAwMEMyQzcyNEQ4NjZEOEZGQzk4NEUyMTVGOEJENkVDQkQxRjcKKzoxMEY0NTAwMEM3MzE2RTdGNTU0NzEyQzU5MTk2MURDRURDODhFRjg5NjYKKzoxMEY0NjAwMDdDMzJENTU5OEJFQjJEQjM1ODhENzg4RUQ3Qjc0NEQwREQKKzoxMEY0NzAwMEI5NTYxQTIzRTIzQTU5MkZEOUE5MjRGQzVCQTZGMEYzMTYKKzoxMEY0ODAwMDc0NEEzRUVGQkY0N0RDNDc5MDYxQ0VEM0Q0MTM3RURDOTUKKzoxMEY0OTAwMDAxRkI0NEVBMDUwM0Y1MEI4MUVGMzgwQ0I1N0ZBNDFFOTAKKzoxMEY0QTAwMDAxRjUwNjQ2M0ZCREEyRDQ0QjE4RDI0RjJEQzE3M0I0MEYKKzoxMEY0QjAwMEM0QTg4RDNGOTRFOTQxQTk3NzEzRjdDMUU1RkRFNzU4NEEKKzoxMEY0QzAwMEM2RUMxODk0OUJCNzJBNTYzQ0M3MkEyQ0I2OUIyNjQzRjkKKzoxMEY0RDAwMEJFRTI4NDAxM0QzMEQ5REM0ODFCN0ZCRkUzMkVGRTdFQjcKKzoxMEY0RTAwMEM3MzJEOEFGQzg2RjRBODQzRjU2NDVGQjY0REE2RjE1MDAKKzoxMEY0RjAwMDZFNDhCMzg3REU5NzM3NkYzRDlFRjAwMkQyOEZENzQxQkIKKzoxMEY1MDAwMDcxRjkxNTU2ODczMUQyNkZERjk3QjcyQTlBQjg3RTk5NkQKKzoxMEY1MTAwMERGMzk0NUE1Nzk5NzgwOTg4RUYwQkI2NTZEOTIxMURGMzQKKzoxMEY1MjAwMEQwMjkwMUYxMDJGREZCMEU0RUIxNjlFMkFBQTExRUY5M0MKKzoxMEY1MzAwMDM1Q0M0RDY2QUZGMUY3OTM2MERFNDk3Q0JDMkNCRkZFNDUKKzoxMEY1NDAwMDk3QjU2QURGMjc4MEZBMjQxN0ZENzY0QTI4RTFBRkNDMDkKKzoxMEY1NTAwMDBBRUI0RUMyRDQ0QUYzMDQzODEwOUM3QUVGODVGRTZDNTUKKzoxMEY1NjAwMDM0MEVFMUEzRENFQjM2RTBCREJCMDRGRDI5MjBCRkQ0QTMKKzoxMEY1NzAwMEVBMzZFMDM4Q0I1QUY4N0IyMUNFMkQ3QzFDRTdFNjA4MzIKKzoxMEY1ODAwMEUzNzg5NDlCRjQ1NjYzMDJDMjBGMkZDQjUxMzQzRkUyRDEKKzoxMEY1OTAwMDgzMTUwMDE3OENCNzkyNzE5NzgxRjAyOTEzRjNBRDY4MkEKKzoxMEY1QTAwMDhERDBDQTYzQUQ1QjBEODg4RjI1NDNCQzU3RDAyREU4NDUKKzoxMEY1QjAwMDc2NTlDQjBDOEEzN0FGRDAzQjI4OUVDMTI5RTBGQkM5RDYKKzoxMEY1QzAwMDZBRjNERDY4MTc1OEQyRjY5MDIxMDlGMjdGMTRGNERCNTQKKzoxMEY1RDAwMDJERjZERERDNjRFRjY4N0ExNzY4QjVEOThFRjM1QzYyQ0UKKzoxMEY1RTAwMDZEQTVGNUY1QzNGNzAxODA4NzgyRUZDRjE0MTM3QzgxRjkKKzoxMEY1RjAwMDJFNUNFODlGNTdEMUE2QzVBNzZGM0UxQ0JFMTU2RDY1NTIKKzoxMEY2MDAwMEI0REYyQUY1NEVBM0Q1N0YxRUVENDc0N0EzMUZDQTEyQ0MKKzoxMEY2MTAwMEQ4REZGOERFMTFCMzNBMjlCRUU5RUMwMzM3MjVEMjNBMzgKKzoxMEY2MjAwMDYxOUVFNDA3NjVCN0NEQzY3NzdFODA0RTg4OEUyNUJEODYKKzoxMEY2MzAwMEM4Qjg2QzM5REUzNzUzNzg1Q0U2MzdERkJCMkYxRDI0NDIKKzoxMEY2NDAwMEQ3MzQwMzdFNTFERjNERDRCRTM0NjI2MDE3OEM2QkFDN0YKKzoxMEY2NTAwMEUwRUZBRjA1RUU1M0I5M0ZGQkVEMDc2MjlGQ0FGREZCM0MKKzoxMEY2NjAwMEI4QTFEODFCQUJGOEY4MEM5Q0I3MERDRjBFMDJBNzQ5NzgKKzoxMEY2NzAwMDUzRjk3Qzk3MEFCQzAyNUM1RkYxOEZFM0IyNERFNTc4RTkKKzoxMEY2ODAwMDJENDlENkVFNzdFQzBGRkIwRDkzRTUzM0JEQTMzMUVFOUMKKzoxMEY2OTAwMDUyRDY5N0UzOTY0NEYyNzY0OEY3NDg2RjYxNjIzQ0FDRTUKKzoxMEY2QTAwMEJGODZFQTZCRTM1MUNBRkJGOUM1REUwREQxQzgyRkY2NjAKKzoxMEY2QjAwMDJCMjRGN0FFQjlGNzc4QzJCRkEzM0NCQjhGQ0JCM0U3MUYKKzoxMEY2QzAwMDZBNzdENkM3QTFEQ0E4NzcyN0ZBQkY4QjU1RTFFNUZDOUUKKzoxMEY2RDAwMDYxMzlDODNGQzgyRjJBQzUzOUJEMkZDQjk5MzBENUNGNDYKKzoxMEY2RTAwMDdGQTJFMkZFN0Q2OTRFQ0U1RkJDQzg1RkZFQjJFRkE1OTEKKzoxMEY2RjAwMEY3QTZEODdDRTdBNzlDRkZCMkNEN0YzNDk0NTlGQ0UxRjQKKzoxMEY3MDAwMEM1RDc3Nzc3N0ExRkM1RDk5NTVCOEMzNkY0NUYyRTZGOTYKKzoxMEY3MTAwMDI5MjM3RUNCNjJFMTVFQTFGOEYwMUQ0ODA3NjUyRDBBMjIKKzoxMEY3MjAwMEJEMkY1NkRFMzhEMUFERkU1RkU0Q0JFNTVCRTZEMTlCNjUKKzoxMEY3MzAwMDQ4MTI0RkYyQkQxMzc5OUVDQUY5M0JDNEZDOTcwQTNBQUUKKzoxMEY3NDAwMDlFMzU5NUVGQkZBNTU1NDlDNjRBREFGNzQ5QzY3MkE0NUEKKzoxMEY3NTAwMDdGNTFCRUE0NDJGQkJEMUY0RkZENzZFQzhDOERCODNGQTAKKzoxMEY3NjAwMDMwNkU4OEVFMjc1QjBDNUNDRkI3Mzc5NEU0RDU3MzZCQjMKKzoxMEY3NzAwMDlFRkZDMzIyQThGN0M1ODNEQjEzNTEzRTkxRjM1ODIxQTYKKzoxMEY3ODAwMEY0NzlDQjg1NUVBRTUyQzhBRDgwQTdGOTUzRkRGOEVDOTUKKzoxMEY3OTAwMDhBMjczODlFQ0E5Rjc5RUJBRkY4MkU1NzQ5QjJFMDY3QTcKKzoxMEY3QTAwMEY3RjI3OEZFNjU5RUZEODRCNzI1OUJCNzFBOTIxMDVGMkQKKzoxMEY3QjAwMEY4NDhBRDVGRkJGMjA2QjhFODAyM0M5NzZFREU2RTQwOUIKKzoxMEY3QzAwMDNFQjA0Q0FFMzc4MERFNEI4NEJGQUY4NDJCOUUzQjhBNkQKKzoxMEY3RDAwMDlGREQ0MkQ2NDdGRUI3MUZDNjU5QkJEQTFDODZGQTY5QzEKKzoxMEY3RTAwMDM5Q0UzRDUzQjlEQzU0REUxMDExODlFMzk1Mzc5NEZERDEKKzoxMEY3RjAwMDBBRUYxRDkyREYwN0VFQkJEMzY2QkUxRjk2NDE3RkI4QUUKKzoxMEY4MDAwMDJGNEZDRkIwNTM1QzMzREFCNTA2M0I1N0VGOUNDQUNGQ0UKKzoxMEY4MTAwMEQ1NDcwREZDRkRDNkY4MTBDRjFFODQ0M0ZDQUE2MDNCMDMKKzoxMEY4MjAwMEYyODdENEQ0MkVCMjFCMjMzREUzQkM4RDNBRkVERTYzQjcKKzoxMEY4MzAwMDZBNkRENzI1OUMwNzg4RDRFNDlGODIyOUJFMzM4NTIyMzAKKzoxMEY4NDAwMDc2MzRFNDlGRDRGMUY4QUI2NDk1QTdCQjA1N0NBMERDQ0IKKzoxMEY4NTAwMDhCRTUyQ0FBOEJERTlERUI3RjM3Mjk4MDVFOEQ2Q0M3RjQKKzoxMEY4NjAwMDY2N0NFRkM2MThDNUVDQ0QzNjFGN0RDQTdFMjQ3RDRBNjYKKzoxMEY4NzAwMEZBMUQ2QTdERUUxRkI4QkVEMzQ5NDIxRjkxNkU0RkM0NzgKKzoxMEY4ODAwMDM4OTVEMkZCQzZEODUxM0ZGMzdERUIzNDhBRjcwN0ZCOUUKKzoxMEY4OTAwMEQ3MEJDNDlBMTczOUM4N0E1M0Y5QkQ2NUU4RjVCNjE1ODAKKzoxMEY4QTAwMDQ1MEZCMkRFQzA3NUNBN0QyMjdEREFGQkVEMEJBRERDMDMKKzoxMEY4QjAwMEJFNzA1QTgxRjMwQkRBOUQ1RTZEMjZGRjJGQjkyRUE5MUIKKzoxMEY4QzAwMEZGRkVBMTcxMDhBRjRDOEQxNDdBOURBRTUwOTQyMzRCNkUKKzoxMEY4RDAwMDgyQzVGRUY3RjIzQzdFOUZFN0Y3NUQ5RUZCRjJCRDM2RTgKKzoxMEY4RTAwMEM5OUZDRjM0ODg3MzkxNzVERDhCRkI5OTM1QTZEMEZCMEEKKzoxMEY4RjAwMDI0Mjc1QjRGODdFMjdCMjlBNzY3RjBGOUM5NzY2QjBENTgKKzoxMEY5MDAwMDNDQ0U5ODg1MUE2REY4RkUyMURDQUY0RTM2QTJEREE3RkQKKzoxMEY5MTAwMDI1ODZFRTkxQjczNEE2MTA1RkI4QzUxNUMxRjUwRjQyMjQKKzoxMEY5MjAwMEJFQUYxNDdDMzA2NDZERDk0NjdDRTc3Qjc5N0I5MjU1MDEKKzoxMEY5MzAwMDgxNzE5NjVCRUM2N0RCQTlGRDM4M0JDQTgzMjE2REYzQ0YKKzoxMEY5NDAwMDhDQzkyNEY3RjI3QjgwQjQxM0FENTU1ODMxQzU4RDIxOTUKKzoxMEY5NTAwMDlGQzRGREE1M0I5QThBRTdDRThBNzY3RTBGOThBQjYzNUIKKzoxMEY5NjAwMDlCRDE0RTM4QUFCOTc4NzYxQ0YyODk4NzE1OEEzMzY3RkQKKzoxMEY5NzAwMERCQjRFRjU4QTU2NzE3N0Y0Q0Y3QkY4MDc3RTBENjFBNDYKKzoxMEY5ODAwMDNDOEUxOEU0RTMyMDZGQTBCRTY5QjlBNTk4RTRGNjUyNTYKKzoxMEY5OTAwMDQxMjcyN0RCQkFFOTNEN0EwOUQ3MDFGMTNGNDYxRTA3MjcKKzoxMEY5QTAwMERDMUJBQTIzM0REQzBGOEQwM0FBMTA3NjI1NDkzN0QyMzQKKzoxMEY5QjAwMDJFRjUwOEZFNjczMkMyNDlBNTczQUQ0ODJEQTFGNzk0MTQKKzoxMEY5QzAwMDM2QjZDREEyQjQ2MjZCRDE4M0FFRjExODdGNUMxQzNEMUMKKzoxMEY5RDAwMDg1RTY2RDIwM0Q1OTQ1REQyQzFFQUZGQjY0NTAwNERFRUQKKzoxMEY5RTAwMDZGMTIwREFFNDQ3RkI5QjQ2MkZCMjY4QUZGRjk2Q0JCN0YKKzoxMEY5RjAwMDk5RTI3RjBBQURGMzBBMjNBMkU4QkQ2MzhBQUY5M0Y1Q0IKKzoxMEZBMDAwMEMyRjNGOTc5NTE1RDM3NEIxM0JGQjMxQ0ZBQzQ3NzM2OTMKKzoxMEZBMTAwMEJGRjI4NDkwMUY5QThDQ0JBOThENzEwNkU3RTdGMkY4QUMKKzoxMEZBMjAwMDlDQzkzNjFFOTcxMzQ3RjU2RDgzRUFDNTY1N0FCNjg5N0EKKzoxMEZBMzAwMEM3NzlGOEM1MUJEREIwMDREQUQ3RDYzRDE3ODZGREQ0RUIKKzoxMEZBNDAwMDNDRjBFRTQ0QUI4RUY0NTBEMUY5QzNGREUyOEREQTc5OEYKKzoxMEZBNTAwMEJDNTE4Q0I4MkZDRDhEMkM1RUI0MDRFMUZGN0I5NUUwQkEKKzoxMEZBNjAwMDNGRDQ3ODU1ODcxNThEMURFRjE2NzczOEM5QUQ0RTJGQzkKKzoxMEZBNzAwMDMzQTIxREQ5Njk2NTI0MTc3RkE2QjI0Njk0MDNBNEZDNUUKKzoxMEZBODAwMDIyQkY1Rjk1Q0ZGOUQ1NjdFMUFEODk0ODFGMkI3NzNENDAKKzoxMEZBOTAwMDk0ODhFN0NCRTdBMTNDNUZCMkVCQTZENzkxNUYzOTc3QkIKKzoxMEZBQTAwMDA0NzFGOTVDQ0Y0ODFFMkU3NzcxRjk5QTU1NDVDQUY3NTMKKzoxMEZBQjAwMDQ4Q0RBNTQwNDczOUY5MjFGQ0REQTM3NjZEQkNCOTdDNjIKKzoxMEZBQzAwMEU3RjY3MzNEN0Y5RjA3RTM4RDkwREUzRkQyN0I5NzIzNjAKKzoxMEZBRDAwMDdFM0YwMkY5MTVFRkIxRTFGOTlDM0UzRjZBNTU2NzkzMEQKKzoxMEZBRTAwMERGMTA2QzE0OTQ0MzNFNkE3RDJFMTRFM0ExQTVCQzU2MkUKKzoxMEZBRjAwMEE0RkVDNTgxRUZGRkFDMzlDOEUzODJGMTdEN0E3QTJCOTEKKzoxMEZCMDAwMDU0RTg0MUVBODUxRTY0Q0QwQjg2RDlGMTUxMjQ3RkQxOUEKKzoxMEZCMTAwMDk3NUFCREQ3MzgxOEZFQUE4NTdDRDU5RjNGQjA5RkVFNzcKKzoxMEZCMjAwMDZEQjU3QkI5RkM1MEVCRTkyNkY5NDFDQTIzMzJFRUIwNDIKKzoxMEZCMzAwMDY2NkYzN0M5MTNCMjVERkQwMTBFOTdCQTAzRkM3QjU5OUUKKzoxMEZCNDAwMEJBNEVFQTUxMUM0QTJBREVBNzE1Q0FBRjlFOTI1MUJBOTQKKzoxMEZCNTAwMDVFOTMxRjU3QkE1RThGQTlEMERCRUI3QjQ5MUVCQzNCN0YKKzoxMEZCNjAwMEZEMURCQTg3RDdCNTg4N0UyMTZGRjAxQjZGMDkxMkQxQjIKKzoxMEZCNzAwMDcwRkUzREM1ODJFRDZEMUFGRkRBQkEwMzExRDRERTVCNkIKKzoxMEZCODAwMDE3QkMxOUNGNzk0N0JENDU4RjY5NzM5RDg1Q0VGRDZEMzMKKzoxMEZCOTAwMDBEQkE3NEY0NTM3NzI4QzE3Njk0RTMzQTg0RkZENkYwMTMKKzoxMEZCQTAwMDlBRjdDREE4M0Y4ODYzQkRDN0YxQkQ1RDZGODJCMzE2REMKKzoxMEZCQjAwMEY3NDMwQ0JFRUVBMkZBRTI4OTdBOEU3QzlBOERGRDE3OEQKKzoxMEZCQzAwMDhDRUFCQThDNkY2QTE4RDY0RjJBNDUzQkM1REE3Q0IxRUQKKzoxMEZCRDAwMDhFOENBRTZDQTRFQkUxQzczODdGN0VDQ0MwMzZEM0JCMzUKKzoxMEZCRTAwMENERkE2Mjg2RkE3QkFGQjAyRkJBQkVEMUQxRkJCMzFEN0UKKzoxMEZCRjAwMDhBRjdEN0ZFRjJENTFFQjE2RjhCODNCODlERjFGRTA5NEYKKzoxMEZDMDAwMENFNUZFMjNDN0VBQTE4QzY2NzkyN0ZBMzNBMUFGQkVGNEEKKzoxMEZDMTAwMDExNzY0ODI5QTdDRTE0RkMzOTQxRENBRjhDMjM2MjJEMjQKKzoxMEZDMjAwMDQ4QzdEMkFGNEY3MTM4MjhERUYzQ0U4QzYzRTU3ODNFRkIKKzoxMEZDMzAwMERGRDM2QkEyNzg4MTk5QkRDMTI0QjcyNjhDOTg0M0U3QTYKKzoxMEZDNDAwMDk5N0NCNzVEQjFFOTU5MDlENDNGOTZBMUYzNjI1Q0RDQjgKKzoxMEZDNTAwMDNEQ0NDNEZEMDI0QzAxRjJBRENFNENGRUM5NEFDN0VGMEIKKzoxMEZDNjAwMEJFNDFCRTFFQUY1RTNBMUU4RUZFQjJGRkFFRDBGQkEzRkIKKzoxMEZDNzAwMEE1N0Q2NzFGN0I5QkUxN0REODlENDlGMUQwMDlDRTg3OEIKKzoxMEZDODAwMDEwODUyN0ZCRTY3NDNCMDE3NUY3NTgzRDI2M0IzRjJGNTcKKzoxMEZDOTAwMDk4RkYzQTNBN0VGRTRENThBNENFMzdCRjlFREVCM0Y0QUQKKzoxMEZDQTAwMEFFNjM0RkFGODlGNEI2MzMzQkM0M0I4NzAxRjNFOTg5QjgKKzoxMEZDQjAwMEI1OTE5RjM0RDQyMzc5QjNDN0EyQTNGN0RENjY3NjFDMzAKKzoxMEZDQzAwMEE3RjcwQTY3Q0FGNzBDNEREQUY3MEM5OTJEMjEwMkY1NTAKKzoxMEZDRDAwMENBQTQ0QjA1RTEyMEJBOTlFM0FGMjA1QzdCNUZFQ0M4NzYKKzoxMEZDRTAwMEU3RjI2Mjg3RTAyMzgxRUZERENCQjgxNTc5QUVCQzZDMUIKKzoxMEZDRjAwMEQ5NzUwQkQ3NEJGMTdEQkE0QURBRjlBRjI0OTMzQ0QxRDEKKzoxMEZEMDAwMEQ3OTFGMjlERUY1OEJDOEI3MjA1QzgwQkE3QUU3NkJDOUQKKzoxMEZEMTAwMDkyM0ZEQzc3QUUyRTE0NzA5MkU3QjM4QzVCNTgyOEUwRUMKKzoxMEZEMjAwMEI1RDBBMkUzRjAwOUY4REQxNTQ5Mzc4MTc0RTFDMzNCOTIKKzoxMEZEMzAwMDhGRjc5MkY4NjRCNzc3QkU4QUYxNTg4MEM3RjFGNzMxMzAKKzoxMEZENDAwMEMyREZEQjQ4OEYyN0JGNzk3MzAzM0VCQjMwNDI3NTc0MzcKKzoxMEZENTAwMDNCOTM3RTE0RkNEMUZCREQzRjE4N0Y5RDgxRjhGMzlBMjUKKzoxMEZENjAwMEM3QTAxQ0YxODA4RUU0MDhFOUVGRTgxNEVGQjU0QkJGQTMKKzoxMEZENzAwMDQ3OTZDRTg4MUY5NEFBQzFBNDJGNzQ4QTc3REE4MTBGODAKKzoxMEZEODAwMEJDOEE3QzQwRUVGRjUxNzNCQUM2RTMzOTdBMTJBRUU4MDIKKzoxMEZEOTAwMDM4QkYyRTlEODdCRTg3NEZFM0ZFODYyMzU5Njc5Q0YwQjAKKzoxMEZEQTAwMENGQzk0NUY5NERGNUJENEY0RDc0REZBQ0I4MUZBRTQ0MUEKKzoxMEZEQjAwMEZGQ0I4NTE2RjI3M0VGNzEwN0JDNEYyRERFMzFFRjYxN0IKKzoxMEZEQzAwMDgyM0YyQzk2RUY5OEMzN0U4Njc2NkQ0Qjc4NzlGRjNCMDkKKzoxMEZERDAwMEU2QTMxOUREQTNEQTMyNTkxQUNBNUY2REUyNzc3Rjg2OEUKKzoxMEZERTAwMDdDQzc3QzY1MjRFOTREMUY3OUM0M0QxNkNGMDNGOTdFOUQKKzoxMEZERjAwMEY1RjQwNEE3NzlEQUYwODFFRjU3M0ZBODE0MkZDMURGOUIKKzoxMEZFMDAwMDgxNzE4REU3RjNFRDVBMTJGQ0NDMkUwRTZFMkZFQTdCM0EKKzoxMEZFMTAwMDRFMzY4NkQyQkJERDkyNEVBNTlFN0I5NEFCRkI2MTg0QjEKKzoxMEZFMjAwMDkzOENBQkZENThEMDlCODRCRjhDMkI4QzBBQzA4M0E0RDEKKzoxMEZFMzAwMEJCRkVERjhCNTlDN0U5QUZERjlGQjY5RTkxM0U2NTI0QkQKKzoxMEZFNDAwMDRDMjU4NEZDMjNFRDM2ODRFQjNEODlDRTI0OUM3RkYzNDYKKzoxMEZFNTAwMDZBODAzM0U5RDFCOTlGRTc0OUYxN0IxNjgxRkIyOTYzQjkKKzoxMEZFNjAwMDlBNEVEQTg5Mjk1RUEwNTQ5QzZCQTUzMjNFQTA1MTFCQTQKKzoxMEZFNzAwMDFGMTBGOEJFNjlGMEM4RTIwOUQzNjA5RDE3OTQ3NzI3NzgKKzoxMEZFODAwMEUyQzczN0ZGQjczQUE4REZDOUE0Njk5QzhGQTdDNjNBNzMKKzoxMEZFOTAwMDI3NEVBM0YzNkRBNjQ2OEU3QzMzRjNEMzA0RkE3RDk5RTcKKzoxMEZFQTAwMDZGOEY4RkM0NzNFRkE2ODRFMkM5RDhBRjM5OTVEQjBEOEQKKzoxMEZFQjAwMDNFOEVFQkEyRjg4RThGOTdGQzJEODFGNENFRUJGOEJCMzMKKzoxMEZFQzAwMEFDM0Y3NDlFMDNFMzk5MzkxRERDQjY5Q0ZCMjNDNkIzOUIKKzoxMEZFRDAwMDA2QTJERjU4NUY5Q0FDMTlFN0YxM0YyRDlFRDkxNzZGNDIKKzoxMEZFRTAwMEJDOUI3RTU3RTRFNTI2NEZDQTk5RDEwM0YxOTExRjc0NUMKKzoxMEZFRjAwMEVDMzkxQkRDNjgxQThFMUMyQUE1RjhERUYwNjNCNzI1RTYKKzoxMEZGMDAwMDQxQkVGMUM4NEIzQzFGN0ZFQzcyMTJFMEU2RjYyMzFEQTgKKzoxMEZGMTAwMDNDM0ZFRUQ4NjU4QzA3NUU3N0U0NDgyOUM1RkZBMkREM0IKKzoxMEZGMjAwMDYwMDQ2Mzc3MUM3OUI5RDQwNUY4QTg5RUUwNkM0MjdDMjQKKzoxMEZGMzAwMDJEQkFEMkYwMkExRUMzRUZBRDlGQkYzQzg5RTI1OUU3MkMKKzoxMEZGNDAwMDI1QTRGMzc4RDZCNTU4QkUzMDdBRDk4NjcwQzUxN0NGQjgKKzoxMEZGNTAwMEJBNkQxQUI0MDM3QUU4QjlDNEU5QkZFNzEyQTdGNzIwNkIKKzoxMEZGNjAwMEU0MDNDM0ZGRjU1NEM2RjU0QUZFM0IxNDlGOTRGQkVGMzAKKzoxMEZGNzAwMEM3OEE0Qjk2RkI5OEVEQjI2RjM2MjAzMUJBRkVFNTc4MTIKKzoxMEZGODAwMEUxNDc2OERGMDRDNDBCRjcxODdBMUYyNzdCRDIyNTY2ODgKKzoxMEZGOTAwMEMzMzhDNEEzQTFFRkRCRjA5QzY4Q0VFNUYxOEM0QTZGQjcKKzoxMEZGQTAwMEE3MERGRDMwRjI3Mzc4QkVGOTUyQTcwREY5M0JFNjUxNkIKKzoxMEZGQjAwMEFGRDUxM0MxRTMxQzY1M0M2Q0YzMjU2RjFDRUU5MzdDM0QKKzoxMEZGQzAwMDhDNUI4NEZBODVCREJEQTVDODZGRjJEMThGMzcwOUZCNjQKKzoxMEZGRDAwMDdGRURCODE4OEY2MTdGM0IyRUYxNzhDMzFFNzNBN0NEREMKKzoxMEZGRTAwMDJBQzZDMTdFNjBEQzI0RTQ4QkY5NkI0REU0NkZENDdDQkYKKzoxMEZGRjAwMEE5NjEzNUY1NTM2MkU5MUY1NzA5MThEN0Y0RERFM0NFM0YKKzowMjAwMDAwMjMwMDBDQworOjEwMDAwMDAwNTJGQ0M2NERFREUzNzE5RDM4QUU0RDMzQUU5N0UyODFBMworOjEwMDAxMDAwQTEzRjhBM0JFRDg5QjBDN0UyN0Q1RkU2MEJCMTFDRjJFMAorOjEwMDAyMDAwMEY4OURGQTdDOEI3Nzk1NUU0RkYzMjNFMkFDNjI4REUxQworOjEwMDAzMDAwRTExNkY3MTVBODQ3RjE5ODNCRkFGODNBMkYzNjc5QUI1NQorOjEwMDA0MDAwNzEzRjE1MEE3RTVENjhFNEU3MjVEMzA1REJEMTBGQkI2MAorOjEwMDA1MDAwNDhGREY2QjU3OEJDOTdCQ0MwRUYyNTg1NDFDNURCNzA3RgorOjEwMDA2MDAwM0ZENkVCMzlCRjYxNTFGMjc3RDIzQTU3RkUwNkVBQkQ2RgorOjEwMDA3MDAwMTMxRDRGQkYyQjM2MzJGNjEwNEJDNTdCRjFBQTM5MTkzMQorOjEwMDA4MDAwNzg1RTgwQkNGRDExRTJGQjFERDZBQUYwREZERkUyRUQ1OQorOjEwMDA5MDAwMTdDQzA5MjFGRjkzOUUyMzYzNzI3MUZGQ0MwRkIyMUQxMQorOjEwMDBBMDAwNjRCMDZGNEY0REJCNDRGQjc0N0VCODJEMTc2RjNBQTdGOQorOjEwMDBCMDAwOEU1Q0U2RjkxOERCNDFCNEVCOUFEOEE1RDI0MkJBQTcxOAorOjEwMDBDMDAwNzEzQkVENEQzRTNCRURBN0I4MkZFQkU2NUMzMDcyQjlDRQorOjEwMDBEMDAwQUM5N0RFNjczRTM3OEQ5RjVGMjBCNzkzRENEMTdCOEQ3OQorOjEwMDBFMDAwNzg2RjMzQzM5NjhCRTU4OTg2REUzMDg0NUJDRkI3N0EzMQorOjEwMDBGMDAwRkU1RTJERUIwREJCRDFDRjJFRkI3ODA3N0ZDNzM2OTA3MAorOjEwMDEwMDAwQUVGNzE1RjA3MzYwNTVBQTg1REUzOUFCOEYzNTk5MjhBNworOjEwMDExMDAwRURCODM0OUI3RTA3NDY1RjlDOEFGNzAyODc3MTcwN0QzRAorOjEwMDEyMDAwRTMxMzA1NUNERTRDREE2OEY0RDlEREUxRkM3MDA0MzNERQorOjEwMDEzMDAwOTk3N0IxM0NDNkI2RkY1QjcwRkZCRDBCOEYxOEUzNjhDMworOjEwMDE0MDAwNzEwRjczNTk5RjI4NENENUQ0Nzc2MEZERkU3MkM2OUZGRQorOjEwMDE1MDAwNjc5M0VENDdCRUFDN0YwMkVERjgzNDFFRTJCOTkyRkIyNworOjEwMDE2MDAwNEQwNDlFMTdBNUQzMjMzNUZFNTY4RjQ1OTlDOURGMkEyNgorOjEwMDE3MDAwNTUxNTdBM0NBODZCMjU3RDIwQjdEQkM2RkZBNzk5RTIxMQorOjEwMDE4MDAwRTc3Njk4MzkxREE2RUE3OEJBNDMyN0UyN0M4NTlFNEYyOAorOjEwMDE5MDAwREU1RjdFMzFERDM5N0U3QTJFRjVFM0E1N0VENEZEOTlEMgorOjEwMDFBMDAwMjg0RkM0MzEwRjhEMkZFNTMyNTkwRkU0MkYzMzMxMTkwOQorOjEwMDFCMDAwRjEzQjZGRjlBQTZFNTA3OEJFNTIzMEMzNTE5MDhCNzRFOAorOjEwMDFDMDAwRUQ2MjlGRjg5RDEzMTc0M0MyMUFGREYxNTdBRjZBRjUxMAorOjEwMDFEMDAwOURBRjE0Q0NBNDc2QjI3RDVERTMyQ0Y2MDlDNTIxN0FERgorOjEwMDFFMDAwODk3RUVBNTI3NTc0NUZBRDU3RDkyQkY0N0IwM0FDOTNDQgorOjEwMDFGMDAwRUM5OEIyRERGQkMwMjczRkExRjcxQTFDOTQ3RTAwRkNFRgorOjEwMDIwMDAwRjIxM0YyRjM1QjRDRTk1RjlBOUNGNEZENjQ1MzE1QTU3RAorOjEwMDIxMDAwNUQ0RDBERjRGRDU0NTMyM0E1OEI2RTBFQ0Q0MUZBNUY1OQorOjEwMDIyMDAwNzU3ODNERkJDNEVGN0NBQ0YzMTg5Q0ZFN0UzNUVGQ0ZCOAorOjEwMDIzMDAwMTg5QzhFMkEwNTFEQkQ5RjM0Nzg3OTUzMDE5NzhCREU1QgorOjEwMDI0MDAwMkZFMEY4RUM1OUNFRTU0QkEwQ0IxNjZCRTREMEYyNDI5MAorOjEwMDI1MDAwNEYyOEY3NDc3ODY5MjZBN0YzOUUzODlFNzcxNkYwNzdFMAorOjEwMDI2MDAwNDIxRDNBRDY4RUVENUY5QUM5REY2MTdGM0Y1OTQ3RUY1NQorOjEwMDI3MDAwMzkzODIyNzlCRkVGQTdFOTQ4NEVCQjc2RjY4QzUyODQxNQorOjEwMDI4MDAwOTMyMzFBQkU2N0Y5RjJFRjVGQzVDQjFEMjNGODc3MzlDOAorOjEwMDI5MDAwNUY1OTNFN0U3QUJGRkUyMDhEREY4QkI5REQxREU4OUQ2NAorOjEwMDJBMDAwRkFFRkM3NkYyMTlGNUY2MDdERTk0NzFGMDg4RkEzNjI0OAorOjEwMDJCMDAwREZEMkJFNDBCOTFERjc0MTkyREZCRUE4QjdEMUJFOTBENAorOjEwMDJDMDAwNzQyOEU5QUY3NDNBODc3MzZBOTBBMDczMzhCQjA4N0VDQworOjEwMDJEMDAwNzg4NkUxQkQzOEM2NEM3MkFDMDNFRDE2QjA5RTFEMjI4NworOjEwMDJFMDAwQ0U3REMwN0UxMDc2MDBCOTFGRTQzRTkwRjQxRTBGRkI1OQorOjEwMDJGMDAwOENEQjM5RjgzQUE2QTk4M0VCRTczNzE1RjA3QjZBNjcwMAorOjEwMDMwMDAwNzRFOENGMDhBRjFEMDYyQjlFMzdEMzU0NkU2RkU4RTkxMworOjEwMDMxMDAwNTg5ODgzRkVFMDQ1OUIyQzBEODNGMUFGOTc0NUZCN0ZGQQorOjEwMDMyMDAwMTkwRTkyMUYwQzAxODcwMUVCMzcwQTdERkQzRkI5N0U0NAorOjEwMDMzMDAwRTI2RkM4Qjc5NzczN0ZDQzQwN0FERDVCMjBGOTE1QTdEMQorOjEwMDM0MDAwREI1NzBBMUNCQjkwN0U3QTE0QjMxRUVGMjczREU2QzEzMworOjEwMDM1MDAwRkRDNzVGOUFDOUY3ODVBNDlGRDJFOTRDQkMzRjAzRUI2OAorOjEwMDM2MDAwNEMxOUM4RUZFNDdBRkFEN0I5ODIxMURGNEIxNTcxQzY4MAorOjEwMDM3MDAwODFGODk1RUJGMkUzN0IxRDA1N0U3QTI3QzY0MDVFODEwRQorOjEwMDM4MDAwN0U0NkQ2NUFFODdFMkFFOUY3RTJGMDZGMkFGMUZDOUExNworOjEwMDM5MDAwNTM2MEUzRjYxNzlEMkFERTgxRTVFNzQ5RkY3NzQ1QTUxRgorOjEwMDNBMDAwNzgyQkJGNzM4NkExRENEMjdCODREQkUxQkM3MDRGNDIyQgorOjEwMDNCMDAwM0IxNkVBOUVGREUzQURCRjE2RkNBMjZGNzFBRTBFRjVEMworOjEwMDNDMDAwMDMxN0JGQjZCOEYwRENCQTM4QTJGNzI0Q0EyNTE3REI4QQorOjEwMDNEMDAwRjkzQkU3RDBFMzVDMDVGRDQ1MzBFRUM3ODZCRkQ3QzJFOQorOjEwMDNFMDAwRUQxRkVBQzM1RjlENDQ3OUE4RjI2MTk1RTQ5NzhCNzg4RAorOjEwMDNGMDAwNUQ4Njc2QUIxRUUwQkY2RjI3RkQwNjZCNDVCQkU2RjY1QworOjEwMDQwMDAwQ0I4QkU4NzdDRDgwM0U1MUZFRjlDNDVDOUY4QzcyRjFCNgorOjEwMDQxMDAwQUM4NzFGMzg4MUVGQUU1NzFFNTQ1MENEQ0M4RUEzQkU5MworOjEwMDQyMDAwMURGMjY3NzdBQkZDRjc1NTQ1QkNDOTZDRTFENzVGQkRFMgorOjEwMDQzMDAwOTNGQkY1RDc2MjlDMDlDQTJGMDdCNjNGODhCRjNCNTk4QgorOjEwMDQ0MDAwQjdEQkMwQ0NGMDdEMzZCRThGMDZFM0FDRjA4NEMyMDVDRQorOjEwMDQ1MDAwMTJGQTZERDNDNkE1RkU4NEI5MzZBMjFFQjk2QTlCRjYwMAorOjEwMDQ2MDAwN0JGNTBFNkRCRTM2QzA1RkYxNTI4MUYwNEIxQ0NCMzI3NgorOjEwMDQ3MDAwQzkyRkIxOERFQjg5MjVERjFFMjhFRkJBMzg3RjVDMjNBOQorOjEwMDQ4MDAwRkQ3NEJGQTQ3N0JERDUyMzVGMjU5RUIyRjBGQzNDOTFERgorOjEwMDQ5MDAwRUY4NkZDODVBRjM4RkMyNURDRUEwNUNGQkYxMEM3NzJCQworOjEwMDRBMDAwM0NCMEJFRkEyMzY2MkJERUZGRUI1RkUwRkE4MThCOUU0OQorOjEwMDRCMDAwNzA4MkYzQUFFMDJFQjIyN0IwMTc1NTJCQ0E2MTc3MURDMAorOjEwMDRDMDAwNTY0OTlGNTBENzYxRkUzNUZFMUU2REZENDE4NURFQTk2MAorOjEwMDREMDAwQUQzQjFDRTRFNkYwQjk1NDg5RTUyQjBFOUJBRDM2MkMwMAorOjEwMDRFMDAwN0YzMTg4QTFERUY5MjJFMDBERkQ2MTJGMjY3NDExRkUxNworOjEwMDRGMDAwMTFBRkE4OEY4MEJGQjlGOEJCMTUxMkZGRUFDM0RDOEUxRAorOjEwMDUwMDAwNUNCOTQ3RTBBN0ZEMzYzREUxRDVBREIwOThBNDgxNzg1MAorOjEwMDUxMDAwOTI3OEZFOURFRUU5N0UzQzYxQkI1OTBGQkZGNzlBQzAxMQorOjEwMDUyMDAwM0JDMzM4OUJFM0VERTVGNDdCMTgxMkRGQzYyMzlGMjQyMQorOjEwMDUzMDAwQTJEQzJCRjFBQzAyOUU3RjIxREJEQkM0M0I3OERGODFBOAorOjEwMDU0MDAwRTcyQUM0QjNFNTlGQzdGM0VCMDU0Q0M2RkI5RDdEMTRCQQorOjEwMDU1MDAwRTVERTUwMjNEOUNGQTUzRTQzRUEyRjg2RDdCQ0ZGNkFGQworOjEwMDU2MDAwMTQwQzNDM0FGNjM5OTI3MzRCMjNDRkQ1QUQ2NkE0M0ZCOQorOjEwMDU3MDAwOUIzNDFERjU5RkQ3QkM4NTNGRTdDQkRFQjlGNkU5NEMzMAorOjEwMDU4MDAwQTQ4RjY2NDMxN0ZENUU4QzJCODJCRjI3REY5MzM0NkZFOQorOjEwMDU5MDAwREJGMzMwNUU2MUU0Mzc4OUZCNzFERkJDMUM0NDY2OTM5QQorOjEwMDVBMDAwNTk4MkFGRTI5RkM5RkYzREMwMEUzM0U5RDlFQTNBODJEMgorOjEwMDVCMDAwQjg1RUVEODBENjZFRDYxM0M3N0Y5RkFGQzhEODVCQkE0MgorOjEwMDVDMDAwMUFFNTcyRTgwRkM3OTFGN0MxOUEwRUYxQkIyRkUyRkU1MAorOjEwMDVEMDAwNTYyM0Y1MEM3QjAzREU4NUIyQkU0NUY1NEFBNjI3RDMyQworOjEwMDVFMDAwM0M1MjYyQTZEOTkwMEYzNTJGNjFDRUUwOTRFRkUyRjcyRQorOjEwMDVGMDAwNUM3RjIzN0YyNzZGNDgzOTcwMDhCRTJGRTUzRkU2RDIyNgorOjEwMDYwMDAwRUEzOTI0RkY1OTIxN0U1N0IyN0Y3Rjg4N0NENTdBNTdGQgorOjEwMDYxMDAwOTg0OTI1QkFBMzc4RjFEQUM3RjhFRjJBN0U4QTc0MTdDOQorOjEwMDYyMDAwRTZBM0E3N0ExMTk3RjZFQUJGQkRBRUM3REY2N0VBRDk5RQorOjEwMDYzMDAwQzFGRDIyODA0MzNFODhGRUY5RTczRDNDMEVBRTNBQTc1RAorOjEwMDY0MDAwN0JBMkQ3ODZCRkNGQzFGOUQwQ0FCRDhBREI5NjM0MDg1QQorOjEwMDY1MDAwMUQzMUY3NDZGRTlFN0QwMDNERURGREVFRjcwRTZGOUZDRQorOjEwMDY2MDAwMkVFMkREQzZCMkYxRkYwMDc4NkVDN0Y4QTM1QzFGQkZCMworOjEwMDY3MDAwMDg4QzlCRUMzRkJGMDI3RUJGRTM3RjVBMUM3NzVGMDY2RQorOjEwMDY4MDAwQUNFNzNCRUM4QzNGODlENUJFREY3MjhENERGQkZCNEM1QworOjEwMDY5MDAwRDdBNTZCN0Y5RkE5Q0YyMkUwMjNFNDQxMjlBN0VFOUUzNworOjEwMDZBMDAwQ0VFNTk5QzA1NEMyRjc3QUJCNzYxQzc5MkZGRTY5OUVCRAorOjEwMDZCMDAwNzZCQzc5MEVFRDc4M0YxNDJGM0Y1NjNDRUJGN0MxRUYzNworOjEwMDZDMDAwMzUzMUVFMDkzMUVFRUI2MkRDN0YxNTRFMzIxRDZBQkMyRQorOjEwMDZEMDAwRkY5RkZFQkY0OUZGMEY0MjYxMzk2NDAwODAwMDAwMDBBOAorOjEwMDZFMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTVCMEI3Qzk0RDU0RAorOjEwMDZGMDAwOTVCRkRGN0NGM0NDNzMwODIxMDkwNEMyMjQyNDIxNjA1OAorOjEwMDcwMDAwODgwMzI0NTQyQjk2QzlEMzAwRDYwNjVDMkQ2ODg0MDEzNworOjEwMDcxMDAwNTJDODNCODBCNUQyMTY3RjE5MDQxMTEwNUJBOEQxQTIzNAorOjEwMDcyMDAwMjI0RTgyRTFBMTYxOUQwOEMxNDQ0MzFEMTRCMjg4RDZDNgorOjEwMDczMDAwOEQ3NDhCRkRGRDU2RENGODI4RjIzMjEzQTM3NEU1NTc1NworOjEwMDc0MDAwMkQ3QkZFRTc3RTFGOTkwQ0ExREFFRTZFRjJEMzkzNzMzOAorOjEwMDc1MDAwNUZERkI5RTc3RENGQkRENDE0RTcxOEJFOUEyMjQ0NkU5RgorOjEwMDc2MDAwQ0M1OTczNEY4NDEwQUU5NTNENDU4OUQ5NDJGNEJEQTk0QgorOjEwMDc3MDAwOEEyNjg3MTBDMkVEM0Q1NjFGMkI0NDZEQzc3MEIxMjlFNAorOjEwMDc4MDAwOTlGMDkyQkVCNzBDQzBEQkM2RDkzNzUxRkZDNkY2M0YxMQorOjEwMDc5MDAwQkM4M0ZFREUwM0FBQzM0MkZEQUZCNzdGMUM4NTc1MkU2NgorOjEwMDdBMDAwN0MxNTJFQzQ3MENDRkIzODRBMTA1RTdENDk2MTdDMTNFOQorOjEwMDdCMDAwRjUzQjA4OUZEOUFBMEE3RjI2QUQ2N0Y0OTlEMTdGMjExRQorOjEwMDdDMDAwNTVDN0JENjY0MUIwQTRBNUQ1REM0M0IwNkE0RjJCRjczMQorOjEwMDdEMDAwQkZFOTMzMERFRURGRDMzOEE4REY4RUYxMDRBQjhDREUzQQorOjEwMDdFMDAwMjgzQkMxNzNFREZBN0E3RTFFNUY5REFBQjhCQzY4REYxNAorOjEwMDdGMDAwRjM4N0I4QTUxOEQ3RjI2RURDMTI4Mjk3RjEzM0UzNkE1QgorOjEwMDgwMDAwRjhEOUMxMTczMkREMzRBRkE2ODNENjg5MTg1OEE3QTYwOAorOjEwMDgxMDAwQzNBNEUxOTJFRUVBRDRENkEyMThFMjk3Njg1MTQ0MUEzMgorOjEwMDgyMDAwODEwQjYyOEI1ODQ1RkNBQzZBNkZBRTE2RDQ1RTk1NzEzNQorOjEwMDgzMDAwQjc0OTEwNUYwMjNFQjUxOERGQTcxRjgzODhBMzc5NzZGQQorOjEwMDg0MDAwRkE4QkY4NzdDMUY3NDVENDEyNUFGNzM1REZEMURCNUM2NAorOjEwMDg1MDAwMDQwMzlENkY0NEUxQkI4MTAzMzQzRTczODA5RUU5MkUwNworOjEwMDg2MDAwRTI1RjBFQTA1OTg4MTEzNEVGQzAxQjUxMEVFQURGRTg5OQorOjEwMDg3MDAwN0I0M0YyREJFOEU3N0RCRkFFRTEwMTgyQ0NFNzc2OTUxMgorOjEwMDg4MDAwRjc1REYxOTVDQUZDRDdEN0JCQzVBNUYyM0EzM0RCRDNFOAorOjEwMDg5MDAwMjJCMUFGMTMzRUY5QkQzOTJFODc2QzRGNUQ1NDA2RkE3NQorOjEwMDhBMDAwOEYyN0NDQ0Y1MTkzOTk2RTE3RjBDMEM0RDlDRDlCODhCOAorOjEwMDhCMDAwOTQyQTFGQUQ5Qjc5MzVERjk2NjhFQjc2OTlDNDNDMUY2RgorOjEwMDhDMDAwRTQ5NkJBQkY2QjE0RTlDN0YxRTJFMTkzQTlFN0NBQjhBRAorOjEwMDhEMDAwQkI1RDA2MUU1NzY0NzZBNzJFQTc3MTI3MjIxQzkxNzY1MgorOjEwMDhFMDAwNUFFRkMxRTI3MTkxOTBFQkVCODA2ODJGREU2OTc2MTNDRAorOjEwMDhGMDAwQUMzQzIwQkY3N0MyREUxRDA1N0QzQjcxNjBBQUVBNTE4QQorOjEwMDkwMDAwMDZENkJCNDNGQkFFMTAxRTg2MDM3MkYzQjA5Q0NBQkQ3NQorOjEwMDkxMDAwOEQxMTU4Njc0MDdFQjI3RDhFQ0JDRUUzOEY3QkRGQkRERAorOjEwMDkyMDAwRjM2RURBREY4OThDNzAyN0U0RDI2NTE2RTUzRUQ2MTNDNAorOjEwMDkzMDAwRkEwOEJFRDc5OUQ4MDgzRUU4REY5QjAzNzlEMEJDNDBCRgorOjEwMDk0MDAwODY4MUU1REFEQjZFRDJDNkREREQyQzA2OEQzM0IxRENDNworOjEwMDk1MDAwMkUzQzM3OTgxRUJCRjdDMzVGREQ0REUzQUI5RjUxODUzRgorOjEwMDk2MDAwODU5QUFCNERDQkUzQjBGRjRGQjcwRkE2QUY1Q0UzNzNGNworOjEwMDk3MDAwQjVDOTFGMTcxN0E0QUZENTFENTdFQzI1ODJGNUJCNDM4QQorOjEwMDk4MDAwQjcwRjA3Q0I1Mzk3RTM4OTBDNTVEMjk1NjBGMTBBMjIzNAorOjEwMDk5MDAwQjlCQUI1OTlGNTlBQ0NDRDYzOUJDMjUwRDgwOTI2ODZEMQorOjEwMDlBMDAwNzcyNzJCQjRGRkM0RkJBRENFQjU0NEZGNzM4QUQ2NkY1NworOjEwMDlCMDAwMjAxODQzQjg0MUUyNjY4MjU2ODJDRjk4NjQzQkNDMTYzOQorOjEwMDlDMDAwRjNDNzkwMzgxNUMyNERDNUUzNzIwQzI5QjQ4RURBM0FEQworOjEwMDlEMDAwMTk3MjdENzE4NkVCNTExN0VERkY5NzMzNEEyNkNEMjBCMgorOjEwMDlFMDAwNzg0MkY0MkQxNUY0Q0Q5QThCMTExRTExMkQ0NEExRkFFNQorOjEwMDlGMDAwRkUxM0Y4NkVGRjAxOTM4MEZGQThCMTc2NTQ3RTQyN0ExMQorOjEwMEEwMDAwREFFRjI0NDMyMUJBRkJCNzlCQkMxRUQ2M0Y1Nzg0MzI5MgorOjEwMEExMDAwNEQ4OEE1Mzc0OEJCRjlENEUxOUVBNjhFQTNGMTZCMEM5NworOjEwMEEyMDAwQkNCRkVBMTZENTZCQTM3MUJERjVDNDAyNjJGOTY3QUQxMAorOjEwMEEzMDAwQzkzRjgyQkU1NjFGNTNFRDU2REE3N0JFMkZGOUQ3RDM4MgorOjEwMEE0MDAwODFCNzk4OUMxNjlBNUZFQkEzNDZDMjZCRjcyODVFODcyNgorOjEwMEE1MDAwNUM1RkMwMkU2QjZFNjA1RDE3QTc2REI1MjkyMjhCRTBDMQorOjEwMEE2MDAwOUEzRTMzQzY5RDNFQTQ4OEM3NjhEQzIzNjE1MTREQTBFMQorOjEwMEE3MDAwQkIyNjczRDY1OTI1OEFBMEJBNzk3RDIyQURCNzZDOUI2NworOjEwMEE4MDAwRTlBMzFFQUI5QzdCOTlGRUFCRUJEQ0NBN0E1QkUxMUQ1NAorOjEwMEE5MDAwREM1RUI1NjczMDVFMjM4QzAzMzhBRERGOEMzRjZFMTRBRgorOjEwMEFBMDAwQTJDRDE1MTk3QkZBM0FGQTdCODI5ODcwNTkwNTlGQTY1OAorOjEwMEFCMDAwQzdDMzFFOEU0M0FFQzQ0N0QxNDBDQzFFMjlDNEJEOTNDQworOjEwMEFDMDAwOUNGMUIwRkI4RDQ2QzcyQ0YwMjFEMDY5QjI4MzVGNzVENQorOjEwMEFEMDAwODdGNjU3ODA2RTZGNzU5OEQzNDA1QkFENURGNTJBRjM0RQorOjEwMEFFMDAwMzVGMDI1RjFGRDdBODIwOTgyRjcxRjEwOTJCRjgxNzZEOQorOjEwMEFGMDAwQTlFNzc1MjZDNTZCQzU3Q0UyMjFBRjY3NTVCQzZCQTgxRAorOjEwMEIwMDAwMkJFMEU5OEY2MkZGMjQ0NDMxRUM2MkU1RkMxQzAzRkMxRQorOjEwMEIxMDAwMUNDQzU4MTAyOUJGRDZFRDQxQjExOTk1Njg0MDY5RkYyQQorOjEwMEIyMDAwM0YzMEY2QThDMzgyRkNDNDdGQjk1Mjk4RkUwMkIzNzA2RQorOjEwMEIzMDAwRkJBOEZEREU0ODY3MzRGNDdFQUMzNTJBMEI3NDhEQjUxNgorOjEwMEI0MDAwMjY3OUMxRjdCMUM2QkUzNUY4RkUyM0EzMTRDNzgzQjQxNgorOjEwMEI1MDAwRjRFMUFDNTcyNjJCQzA2QjIzOUNEMDEzMjU2MTkxMTE3NworOjEwMEI2MDAwRkM3ODY0RDQyMjIzRjQ3REFDREQ5NzUxOTIzOTgwMTc1MAorOjEwMEI3MDAwQTAxRkY2MjBCQ0ZDQkRBMjA4QjcxMURGNzk2RUE0RTI2RAorOjEwMEI4MDAwMzdEMEZBMDExQkQxMDczQjMxREE0REEwMkY2MDkyQjg2NAorOjEwMEI5MDAwMTA2QjA2RDE0NzFFODlGMUZGNzdGQUVDNDQ1RkM0MDA2MQorOjEwMEJBMDAwN0QyNEVGNjhDQ0ZGMjI5QkY4NDMzMDY5OEUxMERERUM4QQorOjEwMEJCMDAwMTc5NkIzNUZEMEY5Nzk4MUY0QkQ4MDY0OTVBNjQ4QkRERQorOjEwMEJDMDAwQTlERTdFQjgwOEZEMzVBMjdCM0RFNjE1NDVDOTdEMTQzQQorOjEwMEJEMDAwNjEzRkMwQzMyNDU0NzNBNUJDNzIzNTc4NUZBRThDMkZCRgorOjEwMEJFMDAwQkFGRkVDQzg3NTE5NzMwOTZFQ0IyRDMxMDMxNkFBOTk5QgorOjEwMEJGMDAwRjEzRDQzRjhGQjk1OEE5NUY1RTQwQkIyM0ZGOEUzN0JCMgorOjEwMEMwMDAwOTYyQkY2RDQ4QzAxRkRENkVEQUE0RTM2NURCMTlGQUE4NworOjEwMEMxMDAwREZFRjM0OEIxNDdDQ0VENTlENDFGREU1NDJEQUY1QzI4MQorOjEwMEMyMDAwNTUzNjdCNkFCMDFEQzFDRTg4MUZFNUY2OEE1QjA1RDlCMworOjEwMEMzMDAwOUI3QjU1OUMzRDc1MkFCNUFCMTdDQzAyQkFBN0Q5NTdGQgorOjEwMEM0MDAwMkNGRDVFNEUxOUMyQkU3QzIxNzZEOTNFMThGN0RCQTQ3RQorOjEwMEM1MDAwOUVGQjIzMTVFRjVBQTIzRjM1NzdCMEREMjU2OTc2RDA4QworOjEwMEM2MDAwRTg1Njc4N0Y4RDVGMUIxOUY3OTQyQTVFRjBGQzBFNkFCOAorOjEwMEM3MDAwNUMxNUEzNkQwRUUzQ0E3M0JEODg4Rjc3MTA1QThBRjY5MAorOjEwMEM4MDAwODY1OEI2NTNFRTI0RkZGNTJGREEzRUVGMzBGQTBGQzM0NQorOjEwMEM5MDAwN0YxQzM1Rjk5MkVERDQ3NUI0QzZFQUM0RkFGMzA1MjU4NAorOjEwMENBMDAwM0FFNEQ3NEE0NTM3QzM5M0UxQjU2RDdFNUVEQzMzMDYzRgorOjEwMENCMDAwRkFGNTlFREJFMjQ0MUVENkI4QUUyOTEyN0UzQzRCQUM2MAorOjEwMENDMDAwQjM5RkNFNDA1MjIxRjY1QzlFN0FFRDdDODYxNDQ3OUMwMQorOjEwMENEMDAwRDZFNTgyNDA0Qzc5MEFFNEFEQ0I3NTVCQUUyQjJGMzc1RAorOjEwMENFMDAwRTdEQUYzQUJGRUQ4NzZEQkY3RTBCRkVFNkIzNkM3NEI0NworOjEwMENGMDAwMzVFOUNFOTgzNjIwMzc1REFFNzVDMkMzNzRFQkYyQkFEMworOjEwMEQwMDAwMjIzRkEyN0QzNEY4QTE1RTk4QzM3RUU2NTk1NTcwNUVGRAorOjEwMEQxMDAwQTFDOUNGNEFCRjQzQzk0RkU3RUYwQzREMEVDQjNBQTQ1MAorOjEwMEQyMDAwM0YwQTk1QUJDRUVGMUZEMzgyRjgzRUM1RDFFRDJDMEYxNQorOjEwMEQzMDAwNjE2MUZGMTcyQUY3NkY5MzBCNjU5OEE1RThDQThGQjUxNQorOjEwMEQ0MDAwMDhDODMzRDEyMEZENjNFMjUyRDIxM0EyRkI2RUUxM0UwQworOjEwMEQ1MDAwRDQ0M0YwQ0VGMEI3NERBQzg3OUE3Q0VFODE3QzY4RTg0NgorOjEwMEQ2MDAwN0JDMkZCQzM4Q0U0RkYzQkY5NzRFNDk2REMxRjZDODcwOQorOjEwMEQ3MDAwQTE3Njc3MkQzQkFCNzYzOEZGNUQ4RjdCRTQ2OUM4QkVFQgorOjEwMEQ4MDAwNDJFQzMzQzRGRTc0NzlCOTU3NDVCMTlENUQ5MUEzREE0NQorOjEwMEQ5MDAwMjJFRDU1OTM1NzA0RkQwRTY5NkZGODgzQkU1N0QzQUUwRAorOjEwMERBMDAwNzhGREM5REZDMUZFMTQyMjlDRTRGNjU4ODhEREU5RjIyMworOjEwMERCMDAwQjk5NkRGRDFGREQ0MjlFMTNGNkFBN0ZEOUY0QzkxNzkxNworOjEwMERDMDAwODBFNzY3MTY2RjMzRjA3NDQzMzlGQ0RFQzk4OTEyRUU5MQorOjEwMEREMDAwRDdGQzVCMjgzQzQ1Nzk4RTQyNzE2QzUzQzY4OTExODhEQgorOjEwMERFMDAwRDcyN0NERkEzQTM2NkYzM0QxN0Y2QTRERjc5ODE1MzQ0RAorOjEwMERGMDAwRkY1NEFFODQyNzkxMTcwNkUxQUUzMEIxMTA3RUZERDRDQQorOjEwMEUwMDAwNDg4QjA3N0MzQUE1NENDODQzN0MzOEE1REM3RjlCQzQ0MworOjEwMEUxMDAwRTNDRDBFRTBGM0UzRjNFQzg0OUYzNEM5RjE3QTVDRDFDNworOjEwMEUyMDAwRkRGRkE5RjlERjJCRTA3MThBMzgwMjdFMzgxNDUxQzIyOAorOjEwMEUzMDAwREY1MTk0OTg2MkEyRTdENDdENjk1M0Q2OEE4MUZEMzc0OQorOjEwMEU0MDAwRTUxQTc4OUU1N0YzREY0NDA3RjNCREVGRTc4QUI3ODlDOQorOjEwMEU1MDAwOUExNjIyQTQxMEZEQzk3OUJGMkQ0RUExRjYwRjdFMzEzRQorOjEwMEU2MDAwNkUzMkU0RUI1QTM5RjhGQjg4RDdDOUQ3MDNERkNBRUJGNworOjEwMEU3MDAwRkNFMEFCM0VEM0EyQTBCODc0MjU0RTE2N0MyRURCQ0I5MworOjEwMEU4MDAwNzIwQ0IwOTc3MjREODZBRTk4MDlEMTkwNEZCRjc3NUNDNworOjEwMEU5MDAwMzRFMjhFMUU4N0ZBOEZFRDhGNzAwN0M5RUQyQ0M1MjlCRAorOjEwMEVBMDAwMzEzRTA4OUZGMDY4NTI3MDFDM0JCQ0VCOTE3NEFDNTMxMAorOjEwMEVCMDAwNkVGNjY0MzlBOUZENENFM0QzNDlDODM3Q0E3NzNEOUMyNworOjEwMEVDMDAwQ0U3OUYwQUU4REU5MzhDRjk0MzczRDkyRUU2MjNDRENCRQorOjEwMEVEMDAwQ0RFNzI5QTNEQ0Y3Rjk3RDM3RUVEQzE0OTQ3NzU3RTVFRAorOjEwMEVFMDAwQUI0QzdGQTlGNTcwMjFFMkVEQUNFQjNFN0JDODRFRTM0NQorOjEwMEVGMDAwRDI3RUExRDhBMTVFRjc4OEVFODcxMDFGMTcyMDNGQzZDQgorOjEwMEYwMDAwRjlBREMxQ0FGRTlDRDY3MzQxRkVDRDEzN0VGODFDRUMzMAorOjEwMEYxMDAwRjg3OEM2QzdBNjMyMUE3NzI5RDdDOEZDNTkyMEJDOUJENworOjEwMEYyMDAwRTNBOTVGNkM1MEVDQ0QyMjc4RkM5ODQ2OEM1RkI0NEUwMAorOjEwMEYzMDAwMzEyN0MwMEYyQzFGMzY1OTc1NjBERTMwQTY2M0YxODY0RAorOjEwMEY0MDAwQzk1RDY4NUZCMDVBQjZDRkIyNzgwRjlDQzAzQUJGMzU2MgorOjEwMEY1MDAwM0I5QjFERUM2RjUyNEEyNjBERDA3RjI5RDdDQ0YzMTY1MAorOjEwMEY2MDAwNkU1NjM4RkZEN0JGOTNGNjQ0NUM2M0YwM0UyRjY5RjJBQworOjEwMEY3MDAwMTc1RjVCMTRDOEU1NDc5QTVDNkU1REZERUU5MTA0NUFGRAorOjEwMEY4MDAwRDcxRUVCQkUwQ0JGRjFDRUUzQTc1M0ZERDQ1RTEwNzNBQQorOjEwMEY5MDAwMzYxMzdBOUU2Njc2M0Y1NTgxN0QzNzU5OUNEODQ3NzZDMQorOjEwMEZBMDAwNTZBMjFBNEZFM0E3RkMzNEY3MzFDMDg1QUIxNzNENTU2NQorOjEwMEZCMDAwMDE3RkJCQ0RDQUU3MzY5REJFOTU4QUQzMDA3RkZDNDYzNAorOjEwMEZDMDAwRTM4RjE3ODM2RjY3MUVCNzcyREVCRUIyNzE3Q0JDMThFOQorOjEwMEZEMDAwQzI0RTc1Qjg5QkU0RUZBMDgzQ0VERTdBMkJDMzE3RUEyRQorOjEwMEZFMDAwRURDMjQxRkFCMEFGM0U4MUYxMTdFQjFEMENDNTNDQTkzMworOjEwMEZGMDAwNUYyQkI1RjNGMUI1RDY5QkZBNTVCODcwNTAzRTlCQkQ0QgorOjEwMTAwMDAwQzEyNjFDRTRBNzkyRTI1Q0EzRjI2ODlGNjkxMzZCOUE2NQorOjEwMTAxMDAwMzY2QUZCNEFBM0Y5OTMzREM5RjlFMDQzRjZDNjE1NUQ2QworOjEwMTAyMDAwNDg3OUNENzlGMjNDRjZENjg5MEQ0OTcwQ0FDQjU2N0YwNgorOjEwMTAzMDAwQjhBMzgyRkFFN0U0OTU4Q0NCQTM3NkVCRjZDRkI5QUVGMgorOjEwMTA0MDAwRjA0NkM3QzMwQkMwRUZGMjI2OEJEQzlGQjZFRjMzOEZBMQorOjEwMTA1MDAwQTdDNzNGNDVFQjdCREUzNEYxNzlCRjZFRkI4NzNCMzY5QworOjEwMTA2MDAwMTI1Q0IyNzk4NTM5NThERkJGRUI3RTkzMzU3QUJFQ0RGRAorOjEwMTA3MDAwQUVBRUM1ODc3RkRDQUUxRTQ5NjJGQjY5MjJCQkNBRkNFRgorOjEwMTA4MDAwRTdFREFBNkVGNTFBRTZERkZENzkyNUIzQzBGNzMzMjY0MgorOjEwMTA5MDAwNEYxMkVDRTlDQzg0OUI1OUNGM0Q4NzE0RTZCRkVFQzdENQorOjEwMTBBMDAwRjVGOUM1REE3RUFCMENCRUNERDM5MzA3RkNGODQ1OTFCQworOjEwMTBCMDAwQ0RGQzNERENGMTY5M0FGMkRFOEJFREYzRkZFRUJFMEZDNQorOjEwMTBDMDAwRDJCRUZEQjRFRjc2RTJBRjdGRkNENUZERDNDQ0VFNzE5RQorOjEwMTBEMDAwNEVEQURGMzQ4M0NDNzdBRkNBNUJGMzBDNUFCREEwREJBQQorOjEwMTBFMDAwNUMxMjI5NzlBRUEwMkVBM0M1NEY4QTYzOUU2OEEyQTc4MQorOjEwMTBGMDAwQkE1M0YxODc2NTIxOUVERDcyRDY4OEYzMUU5RDFCM0Y5MgorOjEwMTEwMDAwMEFDRTIzRThFN0EzQTBCODdEMkQ3QUJGMERENjYyOUQ1NQorOjEwMTExMDAwQjQwMUJGRkJCRDNGMTk4NDNGMjg0RURGRDgxMzI2RkMyNgorOjEwMTEyMDAwNDFERkJENzIzRUExMzYzM0M5QTlCNzYzMjRGQjA1QzhCMAorOjEwMTEzMDAwQ0Q4ODdBNUNDNzg0MjZFMDY3Q0Q1MjhFQkQwNzI5NkZDMworOjEwMTE0MDAwOTI3NTFDQTE0RTFCRDhFN0Q5OEVGMzU5RjBCM0ExRkJDMQorOjEwMTE1MDAwQUQ3REU1M0NFQjQ3NzVGQkMzOUYyQkJDRkY5OTY3OERDRAorOjEwMTE2MDAwNTlERkJFRkZDM0JCQ0U2NzQxN0U2NzREM0REMzcwREUwNgorOjEwMTE3MDAwRUEzNUY3NjQ0MTBFQjVBRjRBN0ZGRThGRjI0MTZGQUY5QgorOjEwMTE4MDAwRDg0MDFCMjEzQkFGNTVBQ0FDMjc4NUVBMDVBRTFCRjQxQworOjEwMTE5MDAwMUU5Mzc1ODNEQThFOURFQzRGRkIzQjY1RkRBNkNFRDA4QQorOjEwMTFBMDAwNUQxNDhGN0FDN0YyMEZCQkUwQ0ZGQTEzRTQzOThBRDYwOQorOjEwMTFCMDAwNzc4MTZGRDNDNzY5NzFEMEQ4OTczNDg3RkNEQTRCNTdFMgorOjEwMTFDMDAwRjQ0MTlFRkZDRUMwN0VDNzYzMUQ1RjM1RkM4MEM4MEExOAorOjEwMTFEMDAwMTdDODJCQ0VDMTlFQTk3REMxQUFFNEY1RDBGMzMzREU5QQorOjEwMTFFMDAwMTE1M0UwMUZERkNBRkE2QjJERDdGQjVFMEJCN0FCOUMyOAorOjEwMTFGMDAwRjc1MDZCOTBGQ0FFRUNDM0FCMEFEN0EwN0E0MEI4NzA0NgorOjEwMTIwMDAwMDU4REFCMzMzQjdFQzRGOUYxNzE1NTIwQUZBQjlCMjgwNAorOjEwMTIxMDAwRUQ0OUJDMjJFREE5NjZERDYxNzM0MkQwN0EzQjYwNEY5NworOjEwMTIyMDAwNENCN0NDMTc2N0JERjY1N0I2Q0JENTMzNUM5REIwQ0I2QQorOjEwMTIzMDAwNzBGODQyQUM5NzEwRUQ1NTE0NkQxQ0M5QkY1NkEzMjEzMAorOjEwMTI0MDAwQTI1MzNCRjcxN0FCREM1RkQ3QUU4QTkxOTg5MzEwRTlCNgorOjEwMTI1MDAwNERBMzdEMTQ4QjJENDZFNEQzQjM4NDZGM0FFQTM2QzI5NgorOjEwMTI2MDAwRDhGM0FCOUJBODdGRjY2QkVBRDQ0RDgyQ0Y0RjBCNEJFNAorOjEwMTI3MDAwRjg1Q0U5NEU1RDg5RkNDOEEwNjg3Q0Y1NjVDRjA5OEVGNQorOjEwMTI4MDAwNjc3OTMyNEU0RDU3MTU4RTYzN0QyM0MzMzk0Rjk5Mzk5NworOjEwMTI5MDAwQUZBNjE0RjRFQUUzQjI4NkM5NzFCNDBFRTc1OUMyREIxMworOjEwMTJBMDAwOTczNTA3RjZFOUVGQ0I5QTFCMzkzMEVFQ0VEN0MyOTdDOAorOjEwMTJCMDAwNzM1QzE0QkVFQzNCODNCRTEzOTYyRkVCQTM1RjUwMUNGNAorOjEwMTJDMDAwODE5RUQ0NUQ5NEY1OEU0MkY1RUIyNzkwOUZBRjNDNDQxMAorOjEwMTJEMDAwRkE4MkZDRDA5MEZDOUUwMTdFOUNGODBDQjk5RTI3Qjk0NgorOjEwMTJFMDAwQkExMDdGRENDMkU1ODJGRDRDMUFFMTg1RkRENEVENTNENgorOjEwMTJGMDAwODQxMTc1QTIwRTRCMTNFQTQ4QjVBNjlFMzhFOEYzQzZEMgorOjEwMTMwMDAwRjYzRjlBQTFDRjc1NkRFRjlBMUQ5MzMwNUZENjlEQzhCOQorOjEwMTMxMDAwMjBEOThGRDc2OUYxQUJBNjdERkM3QkE4RjNENTFDOTNCMAorOjEwMTMyMDAwNTFCNEM2RjgyRTlGREZBQjBFQjRGMjM5QkQ1QUY4RjlBRQorOjEwMTMzMDAwOUM1RUREMzI1ODVGRkExMzFDNUMxNzA5QjU4RkIwN0NEOAorOjEwMTM0MDAwQzcyMEJCOThCOTREREFDNTlEQUE1ODBFM0YyN0I0M0FCRAorOjEwMTM1MDAwRURDQzg0NzhDRTQ3MDZFNkM5N0NEN0E1OUU3RjA4RjlGOAorOjEwMTM2MDAwNEIyMDQ1NzEyQUI0NTQyMENDQjMwRTc5OTEyNzVERTYwOQorOjEwMTM3MDAwMzM4MURGQkQ5MEJEOTRGRDhBMzdGQjc2REE1NzQwQ0JEMQorOjEwMTM4MDAwNzc2NzZFRDg2QTU0ODNFODk5RDkyOUVCOTI4MTMwNTFGNgorOjEwMTM5MDAwN0U5MEU1RUQxRTBEMzkwODU3NDk0NDdFMEVEQjU1MTY0QgorOjEwMTNBMDAwRkM2QUMwMjBFQkE4QTFGQkE4RDdFQTQ1Qzc1MTRGQ0FFOQorOjEwMTNCMDAwMUNBMDdCNzY2MkEyRjQ2M0MyQ0JGQUQzNjU5MERGNzc4MAorOjEwMTNDMDAwMTlBODdGQ0FDMEZDQzVGOTcyRkVDMDc5NDhENkMxQUU2MworOjEwMTNEMDAwRTU1Nzc2OTE3Q0NBNDgzRTdCNDhDRTgwQ0Y1MzNDMkU2MQorOjEwMTNFMDAwMjMzRkQzNDJGMTE4RjhCRjUyM0MwNkY0RDU2NzcwRkI5NworOjEwMTNGMDAwNEJGNTRFQzYwRkQ0REZDMEY4QzE3QTE3RTNFREY1QzU0MworOjEwMTQwMDAwMEM1RkE5MkZFMUY2RTMyMEY1RkJGOERGRDM4REQwODc0MQorOjEwMTQxMDAwMkVEOEQ4QTgwMUZDNjQ0QzA4M0U2QUYwRjg5MzMxQ0E3MworOjEwMTQyMDAwNjA3Qzk0QzJFM0IzRjM5RjZFRjQ2NEEyNkU2QUQ3RUM1RgorOjEwMTQzMDAwREIxMTg5RkNFQjhDNERENkExQ0VEODY0MURBQTc1OTQyNgorOjEwMTQ0MDAwRkJBNjdDRUEyRjlCQjk3Njk3M0M4N0JBRDIzMUFFMjBCNworOjEwMTQ1MDAwNjYzRTlGNUZGQkU5RkMwQTdGQjQyMkRGOUQwN0I5MUM1MworOjEwMTQ2MDAwM0I5NjlGQkE5NUZEQTQ4REVCQTAyN0VGQkEyRTlBRUI4MQorOjEwMTQ3MDAwODA2RkQyNzk5QzNFOUQ5QjMxNzU1RDM2RTFCOTExMEEzMgorOjEwMTQ4MDAwRUIyRkY5OEJFQjRCRjQ3MzI1QUQ5M0RGMjlFRjUxMEE2QQorOjEwMTQ5MDAwRDVFQTMyQUNCRjcyQTQ2RDJBRkNFRjE3MkVGN0FEQTBDRgorOjEwMTRBMDAwNDNFNzc3RDFBODY1QTlDODg3QkE0QzhFRjc1MEM3RjUyRQorOjEwMTRCMDAwRkNERTI0NzA5RUQyRUI3REZBQjgwRTU3RUU1RDk4MzdCNQorOjEwMTRDMDAwMzM2M0RDQkEyOUYwM0I2NDY0RjA3MzJFQjM2ODAxNURDQQorOjEwMTREMDAwMkU0M0I4QjI5NkZEOTZDMzA4M0Y3MDk3QTZDNzc5MEUwMworOjEwMTRFMDAwOTkxN0ZCQ0QwRTYzMENFQTM3NjFCOUIxMUU5QUQ3QTVFNworOjEwMTRGMDAwQzlGOTk4MjZFN0UzOUE5Q0RGNDY5RDhDRTAzQkQ0MEUyMQorOjEwMTUwMDAwRDg0REVEODA5Mzc0RkUxQUZCOTg2RjRGRTQ5NTk0QjExQgorOjEwMTUxMDAwRkU4QUJFMjRFMDdBNUQ3MDE2RUM0QkZBOUIyNEU4RjU1NworOjEwMTUyMDAwNjY0RDdGMTMzNDdGRDM5NTVCNTIyNUU3Rjk3ODlEMkE2QQorOjEwMTUzMDAwQURERTc2NUVCQjA3RDFGN0FCQ0YxQjk4MkYxOENFQkRDMworOjEwMTU0MDAwNUU3OEFDRjBGMzJGQ0I3M0E3MTg0REY5MDhFMTczNUYwOQorOjEwMTU1MDAwOEU2NzNGQTQ1QTZGQ0ZGQzg0RUM3Q0VFNTQ3OTBFMTA1QQorOjEwMTU2MDAwRkIyRDcyNUM4MjIzMDc3NkIyNTZBQkI3RjY3QTBEMUU1RQorOjEwMTU3MDAwMTNFQUQzMzFEREU5MzE4OEJGOUE3REU5RjhDMUJGQTkwQgorOjEwMTU4MDAwRUNBRjZCQTYxMDRFRjA1NTQ1RUVBRjY2NkU3N0ZBMzBCNQorOjEwMTU5MDAwQ0M1NzZDMDZBRTZGMzdDOUZFMTM5QUZERDVBNDY4RUIyNQorOjEwMTVBMDAwNjlGQjExNTY1RjEyRTQxMTM4RjQ3MkQyNjJDMjM3NDVGQQorOjEwMTVCMDAwRjg5NzRBQkZFRjRGNjc3RjJERkNFOTczRTExNzE1REZGRQorOjEwMTVDMDAwMDdDMjQ5Nzk2NUMxRDRDNUM2OTFFMDg3NkYwN0YwRUFDMworOjEwMTVEMDAwODI5Q0M1QzYxQkQxREZGQTgxM0RCODdGODQyRjQ5QjFGQgorOjEwMTVFMDAwMDNDRjk2RkQyMzVBNzcwQzczMDZFMUE2OTczRTQwQkZDMgorOjEwMTVGMDAwRDk5MEIzQjg4MEYwRDkxNkVGQjE3QUU4Q0Q4QjUyQkY0RAorOjEwMTYwMDAwNkNGQkRBNEU4MzZGNTUxRDMyNkZDRkRCRDc3NkUxMjU0OQorOjEwMTYxMDAwQzRFNUI2NDgyN0RDRkJERUZDNjRFNkY3REE4RUREOUIyQQorOjEwMTYyMDAwQTE2RkJEQURGMjNFNjA1M0NCMUY3N0ZDOTJDNzU5NzBERQorOjEwMTYzMDAwNEQ0MkVCRkFCMjA1N0Q2N0M1OTFGRjU4MDRCQTY2ODc0MworOjEwMTY0MDAwRkJCRTA0RkVFMDkxMTk0Q0U3RUNFMUQyQUUxRjNFOTJFNgorOjEwMTY1MDAwQjcxODc2REFEQkI2RUY2N0IwQkZEOUQxOTREMDgyOUVFNworOjEwMTY2MDAwMTc2QzVDODdBOERDM0ZBMTAwNzZEQTFCRDlCRDAwRUJDNAorOjEwMTY3MDAwRDczRTZGNzE0MjRGMkJGN0M3RTdBMTNFNzAzMDVGRDY2MAorOjEwMTY4MDAwQzMyQjI2NkU0OTQyOUMzNUJDQjI3N0Q3MkY3MUJGRkE2NworOjEwMTY5MDAwQkM4REVGODVFQTYyNjQ5RTU3QTkzNjRFNUJDMUYyREJEMgorOjEwMTZBMDAwQjlFQjY5RDBCREQ3QzZGN0IzMTVBODU1MTE1RUIxMkJGQworOjEwMTZCMDAwOERFQkY4QUY3RUYzRjEwMkM4QTE1MEREQkUwQkVENUZGQworOjEwMTZDMDAwM0U2NzMzODAwRjI3Q0NBRUU4OUI2MTg3Mjc0QzdDREVEQQorOjEwMTZEMDAwQUNEMEYwOEE5M0MzMjUzREUxM0Q0NTJDQkZEODJENDlDMAorOjEwMTZFMDAwODhCMzk1QzM3RjdFMUJFODlFQUQ2RUQ5ODFGMzhFRDhGQgorOjEwMTZGMDAwNkRFMUJCODlCMzdCODk2RjM0RUY2Q0IzNjkwQUE0RENGRAorOjEwMTcwMDAwQkIzN0QyMDg3RDM5QUY2QzU5RjAxNEQ2NkY5NkUzQ0U1MworOjEwMTcxMDAwREJCNjMwM0YzRENERTMwNUJFNDdFMzA0RkNENjc5NjUzQgorOjEwMTcyMDAwRUJBMEY2QjNDREJCQjM3MDFFM0RGN0ZDNkMzRTk3RUE2MQorOjEwMTczMDAwRkFBQkRCNEJFNTczOTY0MTcxOTEzRDAxRjlBMzRBRUQ5QworOjEwMTc0MDAwNkY2MUY3ODgwODhBQjcxNTFBN0FFRUUwOTNCRDRGODk2MgorOjEwMTc1MDAwODFGOUU3NUE0QzdFMzNGMUE4QzIyMkQ2NTk2MzA2RUNEMAorOjEwMTc2MDAwQTEzMkYxOTY2MkVDQUZEMkQwOTg4RUJDQTU2MjZBQ0Y1RQorOjEwMTc3MDAwMDJEOEM1NTk5QkIwMjZEMEI4QjdCNEI4NTU3OTYwQ0Q1QQorOjEwMTc4MDAwMUNFNEJGRDdBMkU3QjJFNjhGMkUyNkM4Rjg3NUIxRERGQworOjEwMTc5MDAwRTYwREJFOTcwQzg1RUZENzBCRkJEQjY5MDNGODNEQ0I1RAorOjEwMTdBMDAwMkQ5Q0MzRUJFQkJENjVGNjU1RTM5QzU2MUIyM0ZEQzc5MworOjEwMTdCMDAwMDczNEJFODVGQ0Q4Mzc1QUJDNUJCODZBRjBGOEZFRkMyQgorOjEwMTdDMDAwMThGRTdFQURCOTI3MURGMTRGNUYzRjkwQUZGQkI1OUU3MAorOjEwMTdEMDAwNzRGOEFCRDA3OUIzOTE4RUMwOEZCQ0EwQjAxRkE5M0M3OAorOjEwMTdFMDAwQTA3Q0E4MTI5RjJBQUQxRUFGMEFCRTA4QjNCRTRGRTM2RAorOjEwMTdGMDAwNjU0NUNFNEI5OEE2RjE5REU2NkUyODQ4RTZFRjU2QjZCNQorOjEwMTgwMDAwRDg1QzM2OUE1NzE1RDYxMzg1QkNBODNBQjIyNzBBRjk4MAorOjEwMTgxMDAwNEVFRjJCQUE2OEQyQzQxNTFCQTdDOTI3NDUxMzU5NTBGMAorOjEwMTgyMDAwQkRCMUMyNjc3MkQ5QjI4NjkwMzNGMjI3MUFCNzBDN0Y2NgorOjEwMTgzMDAwRDNGNzlGMjk0OEUxRkQ5NEI3ODdGM0Y3ODRCRDY3MUE3MgorOjEwMTg0MDAwRjRCNDdDRkJFMDc5RDg5NzNEQzhGRTdBREI3N0M2MDUxNworOjEwMTg1MDAwOUZDQjUzMzRCQTAzQ0E4NzZDMjc4MTZGM0U0QTgyREMyMAorOjEwMTg2MDAwMkIwRDYyMURFRTJGQ0ZEMTFDREM2QjEyMkVBQzEyRTdCQworOjEwMTg3MDAwN0JDRkNBQkY0NDg0NDE1RkNFNURBQzY2QkJFRDU1N0E3OQorOjEwMTg4MDAwRDhBRkJENTMzMDg3RkQ1MkFGQTk4N0ZEREExQjQ3RUVCNQorOjEwMTg5MDAwNjRGRkQwM0JBQzY3MDFGQ0Q0M0IwNUNCNjRGRkM4OUUyMgorOjEwMThBMDAwMDUwRUVBREZBN0UzNjMwNEM3RkRGNzhGRDRCMEZGOTgwNgorOjEwMThCMDAwQURDQTc3MTU2MkE3QzkyRUVCNDExQjRFRDZGM0Y5QzIwQworOjEwMThDMDAwRTQwODNFN0Y5RjJBRDBFQTNEMDNGMkUxNzM5NzZFMzcyQQorOjEwMThEMDAwQkRDMkIxRUYwMEVDQjAzQzgyRUIzQTk0NDdCNUJDODQ5QQorOjEwMThFMDAwN0M2RjdFOUMxM0VGMzVDQTMxNEZFQTgxMzlGOEJFMzFFNworOjEwMThGMDAwMzZFNkQyNTJDOEU3RjZEMUVFQTI4MjFDREM2RkY2RjBEMworOjEwMTkwMDAwMzk4MkI0OUFFMzRERURFRjJDN0M5RTBDOThGQTc2QzFBNworOjEwMTkxMDAwNEZBNThGNzZDRjJBMjAzQUFBQ0REREVCQjM4OUE0MEI1MQorOjEwMTkyMDAwQTY5RTJFOTRDODY3QTlEMjFGODlERDUyQUY3QTMzNzc1RAorOjEwMTkzMDAwQ0E3QjFBRURCRUYyMkU4REZGODIwRTMxOEREMDBCNDU4MworOjEwMTk0MDAwQ0FGNzhERjZGRDZGQzNBRkY0NzY4RjYzN0YxQzZBMzdERAorOjEwMTk1MDAwNjdEQjFGOEI4MjdGRjgxM0M1NzE0RkQwNzlGRjRGOEJFOAorOjEwMTk2MDAwNzZGMzNERUIzQ0JDMDcyMUI4NzhERDYwN0RFOEZGRkFGQgorOjEwMTk3MDAwNzYzRUY3ODlDRDQxRUREMEMzODZDMTc4QTgxRTQxMUZDMAorOjEwMTk4MDAwRkQ4M0ZDOEU4N0Y5QkU0REIzQUJBQUJDRUU1QUYwRTFFNQorOjEwMTk5MDAwMEEzRTk3NzAzNTA4N0YzRDA0MEYxOTJGNEE2NDlFQjBBOAorOjEwMTlBMDAwMERGMTlGRjg1MTNEQzY3RjkyQ0ZFOUZCNEMwMjdFN0M0MgorOjEwMTlCMDAwMkRDNTJGQzZEQkMyQkQzOEFGMThGNjUxN0M4QTk1RjExNAorOjEwMTlDMDAwMDk3MUExMkFBQTlCRUI1M0JENkQxNkJFRUY3REIwRTM1MgorOjEwMTlEMDAwRDMyNEVDOUZGNDkwRUIzMDU1MUQyRkM3RTFGQ0JFNTc4QworOjEwMTlFMDAwM0IyRjUwMUM4Q0UzRjczMTZEMUQ3MTM4NzdFOEVERDUzNgorOjEwMTlGMDAwMDY1RjNBRThBMjhDODhGMzc1QkRCRDQ2RjVBNzgzRkU2NQorOjEwMUEwMDAwMkFBNTNCMEJGRDdCNDEzNzhGMjc1QzA1MkU3ODFGRDUyMAorOjEwMUExMDAwOEFCNDc3RDFBMUIyM0YwRjk1REI5MzlBQkU5MjVGQzg4QgorOjEwMUEyMDAwRTJGNzFEQUZDOEZBODBFRTA3MkEzNDdGRjIzQURBMzNDNAorOjEwMUEzMDAwQTVERERCRjU3QjI1OUE1QTAxN0IxRkMyM0YyNDE0RTgwNAorOjEwMUE0MDAwNzlGMTcyQUVERjNDNUVFMDkwQjgzNjlGRDc5NUY1MjUxMAorOjEwMUE1MDAwRUVBRjdERjU3QzU2NEEyNkU2NjlFMzgyRkREMEI4MDFGQgorOjEwMUE2MDAwQkYwMkZCNEY2MEZCN0ZEMDE0NDdGQkFBRENBMTM4RDczNQorOjEwMUE3MDAwQzI0Rjk1QUUyOUEyRTE2Mjk5NzE0NTExRDdDRDg0ODdGNQorOjEwMUE4MDAwQ0Y2REExNzQ4NUVBRDFFNDAyQzlBNzRBQzNCMEMyRDgxOAorOjEwMUE5MDAwQTBGNUNFOTE0RjRGOThDMjdFQzYwRkJGRjM5M0Q4NDdBMworOjEwMUFBMDAwOEI1MEE3Rjg3MUE5N0MzNzcwMjVERTA0REIzOUY2QjNCQgorOjEwMUFCMDAwNURGQTcxOThDRDY1QzNENTdBQkM2Qzc5RTNGQUY4MjFFQgorOjEwMUFDMDAwRTgwOEE1QjNDMkRENTgxNEU3QjhCQTVEQTdGNzlDNEQ4NgorOjEwMUFEMDAwQTcyRkNGMzQyMjk4MEZGM0Q2MTQ4RDIwQjhDQ0ZBQ0Y4RAorOjEwMUFFMDAwRjI0MUVFRjc1Qzg3QzU4RkI4NUE1MUJBNjI3REY0MTBBNworOjEwMUFGMDAwN0E3MzU1M0NEODFFMTRCRjUyMjA1RjJGREY2RjVDOEI2QQorOjEwMUIwMDAwRkU1MDU4QURGODRGQTI1RTI0QzhBRTlBRDlCRUM4NUU0QQorOjEwMUIxMDAwODJFMkMyOEQwNTIxNzU4N0YyNDU2MzkxNTcwQkY3QTJDQQorOjEwMUIyMDAwQjE4ODMzNjQ1NzBCOUM0MzlDMkZDOTQxOEUzMkYwOUI4NAorOjEwMUIzMDAwMTEwRkMzNTA3QUZFNUMyMERGMjVERDU4MjBFRDdDRjVDNworOjEwMUI0MDAwMEM1NzAwN0VGMzY2RDVDMDc5NzhFODdBNUYxNUM4N0NCQgorOjEwMUI1MDAwQTIzQjJFRjIzRUZEM0QwNzg0N0RCMzJBRjk5NjY4RTg0QworOjEwMUI2MDAwN0YwN0Y2OTYxODE3RTlDMDdENTA2MTdFQjgxQzc3QzhDQworOjEwMUI3MDAwNjY0N0ZEMjY3MEU4MTJENzc3MDMwRjQ1Q0M5M0Y3MDYyQQorOjEwMUI4MDAwMTE2MjI0RjU3NzI1NEM2QTBBOEUyM0JGMjk5NEZCMEQzOAorOjEwMUI5MDAwQ0Y5Njc5NEI1RDg2RTlFRkQ3ODczMjIzQUZENDg3Mzg2QworOjEwMUJBMDAwNkZDODBDRTdGQjkyREVGNjJGMzg2RTA1M0E3M0VDQjg3RgorOjEwMUJCMDAwRDdFOEVEQTZEMzIxRDk1M0REMzdGRjFEODdGOERBREI0RgorOjEwMUJDMDAwRjk2NzdFODdENkZCRjVBN0ZDM0U2REEzRjYzRUYwRjVFMAorOjEwMUJEMDAwNzZFRDdENTdCNzIzMTJFRDgxRTI4RjhCMzA2RTkzMDY0MQorOjEwMUJFMDAwMDdFQTA0QjI1RUFDNDNGREZDQUJENzAzODJDRUMxQTNDRgorOjEwMUJGMDAwMEI4NzNFMDdDN0I4MjM4MkVCMDQ4RUY4QTFFQTJBQzFGRgorOjEwMUMwMDAwNzU4MkQ0MzQ1OTI3MDA0NDlEMjBENTI0RUIwNEMwNTE1QgorOjEwMUMxMDAwMjcwMDQ0OUQwMEVEQTgxMzAwNDc5RDAwMzhFQTA0QzA0QQorOjEwMUMyMDAwNTEyNzAwNDQ5RDAwRUQ1RkNFOTNFRjY1MDJBNEM0QjIzRQorOjEwMUMzMDAwN0UxOUMxRkVGRERFNjZENThCRkNGQ0RFNDNGMjFFRUE5QQorOjEwMUM0MDAwREU0Njg1REY2OTVEQTBFRjIzQ0U1REY1NUVFNzgwRjZCOQorOjEwMUM1MDAwNUVDN0I3OTVFRkY1RUFEQTU0Mjc0NDU1NjdFQTNCOEE0MQorOjEwMUM2MDAwQkE0RTVEQUJFMjVDMDNGRjUyM0Y4RkJGQkZCMTMzRTdCQgorOjEwMUM3MDAwQkQ1MkI0Mzc5QjlDMDYwN0U0NzQzMTBFRjVBQUNBQ0U1OAorOjEwMUM4MDAwNjZBRTNGMTVDNDFGMzJCMzdDNUIxNDgxN0FFOTlEMTZBMgorOjEwMUM5MDAwNzlDRUFENTFBOTc1MEFERjg3NzIxRTVDNjNFOUU2RjM2MAorOjEwMUNBMDAwNDdENTFFQzU1RTE2N0M5RjdCQzNFN0VDMDdENkRBQTIzQworOjEwMUNCMDAwOUE0MDY3OERDRjY2MkYxQkUyRkQwN0RGMEIzQkM0OTU3MworOjEwMUNDMDAwRkJFNkE1NzI4OEE4ODkyOEUyRkJFNkE1Qjg2NzI2Mjg2NgorOjEwMUNEMDAwRDRBRjhEN0M3RjRDMDdEM0UxRDA0N0JDQUJDQTgwNUJDRgorOjEwMUNFMDAwQjc0QkJCMEY3OTRGNTVEOUQ5QkEzRTUxNUM3RDBGOEQ5QgorOjEwMUNGMDAwQ0EwMEU0MUY3QUZGRUMyRThDOEMzRDFEMEU0NzIxMjY3NgorOjEwMUQwMDAwMjM2RjJBN0VCQzZDNUYxQjdEQUY3RjhCODVGMzhFMTVBNgorOjEwMUQxMDAwRjlFRTY1RDBBM0EzMjYxN0Q3NDk4RTFFQjJGMUY5RThENAorOjEwMUQyMDAwOTNBREUzMDdENTQ5QkU3MEI5QUIwQkY5N0U3RTM0RDdDRQorOjEwMUQzMDAwMkQ1NjlBMTQ4RUNCRjlDNUUzRTJGOUREQzAzMTEzQzdGNQorOjEwMUQ0MDAwOUYwRTU3NDkyREM2QUQ5Q0U0RTBGQTU0QTE0NURDQzc2RgorOjEwMUQ1MDAwRUI2OEVGQjQwOEIyM0QxNUFFNTVCQzA2QzIxNzA5QTczMworOjEwMUQ2MDAwMTlGNkIzOTBEOEM2RkE2MjhBRDg4MEY3NTQwQjg1N0NFRQorOjEwMUQ3MDAwREZBMEVCQ0RDQUFEMEFFNzA1NUMyODg4QzNCREE0RTRBQgorOjEwMUQ4MDAwRUZDMkNFN0ZCQjg0RjcwQjRCMkMzMjdGNEQzNEM4RkJBOAorOjEwMUQ5MDAwRUNDNDRERjI3RENCNEY4NERCOEM3OEJCOENFMjIyMjBFRgorOjEwMURBMDAwQzVDOURGRjU1MEJCM0I3Qzc0OTJDQ0NGMURGMTU4N0Y4OQorOjEwMURCMDAwRDE3MTEzQkZGNzJEOENGRjYxQkE5QkUzNzUwMUJGNjMyRgorOjEwMURDMDAwNTBGQzc3QUI5N0FGQkJCNkZEODRCRTYzMzg2QTkyRkUxQQorOjEwMUREMDAwODVGOEM4RTdBMjJFRTgyNUQ3NjdEQzBDOEZENzk3MzNBNAorOjEwMURFMDAwOUMzNDQzRkFDNzJCRUYxMjQ5NDY3NkQwMUZERUY3MDEyOQorOjEwMURGMDAwQ0U4Qjg5RjE5MTRFRjgzQkRERUVBRjdBOUYxODI2QTE4QworOjEwMUUwMDAwRkUzRTcxMEM0MTExRjQzRTcxQjNDQkMxRkUyRUQxNzA3OAorOjEwMUUxMDAwNjJBQTAzRkNGODRCODQxM0ZDRDBERjI5QUU5RTUxQjJCQQorOjEwMUUyMDAwMTM3MjcyNDUwOTBGQkU4QjdCOTQyREM0RDcyMjZDNDQ2QworOjEwMUUzMDAwNDE5RERCRTc1MjUxQjczRUE0RDhGOTVERjQ1NTdFNzI1RgorOjEwMUU0MDAwRUI0Mzc4Qzc1Mzk3QUFEODE1MDdFQUUxNUIwQUUzODgwMgorOjEwMUU1MDAwRUVBMjk0NjRBNkJCQUU1REQ2NEI5OTQzNzFBOEE3NkI2NgorOjEwMUU2MDAwRjZFMDcyQjcxNThFMTg2ODlGQUREOTQ1MkY4RDk3N0ExOQorOjEwMUU3MDAwNzI5MzE3RkFGNjFERUFBOENGNjFCQzQ3RDg5Q0NEREE1OQorOjEwMUU4MDAwNzkwRDcyOUY3REREMThBRUE3RUE3QUQzREYxMkRGMDRFOQorOjEwMUU5MDAwQkQ3OUIzNTBDNjk5RDJEMjc3NERDODAzQkE3MkRENDcyNworOjEwMUVBMDAwQjBGRjA1NjU5RjNGMTRDN0ZCMUJCQThFNDU3RTk0RUZCQworOjEwMUVCMDAwMjU0M0VCNThCQTVGREVBNUQ1QzFFMTNGOEQ1QTlERDVDQworOjEwMUVDMDAwQThENTU5OEQ1QTlERDVBOEQ1NTk4RDVBOURENUE4RDUzNworOjEwMUVEMDAwNTk4RDVBOURENUE4RDU1OThENUE5REQ1QzhGNUJCRTVDNAorOjEwMUVFMDAwMENERkE5NUZDNUIwQkJERUMzRkQ0MUZFRkZGRDZCRjg5MworOjEwMUVGMDAwRkZEMDNBRThDNzE4MTc1QTA3MTU1NjQ3MzRDNzUxQjJFQQorOjEwMUYwMDAwNkY1OTdGMEVBOTdCMTYwRjVGQkM4MUY4OTdERjYwNzY1MworOjEwMUYxMDAwQTI0OUFGODNFMkZERjJCRDExRUMwRjJFMTQwRTU5RkY2MgorOjEwMUYyMDAwRDRGOTE2QzFGNUQyN0U2MTlCMDJGRUU3NjU4QzMzMUFBNworOjEwMUYzMDAwQThGRjJGOUExQ0Y0RkEyM0VDMDNGQjgzN0QwMEMyM0UxQQorOjEwMUY0MDAwOEM2OTAzRjZGMThDOTk0QzM4NUJDNjdCMEZDNzdCMUIwMQorOjEwMUY1MDAwQ0I3NUZEMUFGMjFGODQyRjExRjY0MUZFRTM0Mjg4RkY3NAorOjEwMUY2MDAwQTA4M0M3NURBMDYzNjlBNzdDRDdBNEJGREZDQzIzRjBBMworOjEwMUY3MDAwRDU5NDIxRkM4OTRGRkE5MzMxNjFCRUJERjhDRTk4REEzMQorOjEwMUY4MDAwMzA3RTFGN0M1NDdCOEY3NTc0QTM3QzE3NTcyNjRBRjhDQworOjEwMUY5MDAwQkI0M0Y4OTUyOEM4NjNDOUYwQkUwRjlFQTZGMTRCMUUzRgorOjEwMUZBMDAwODlFMEJDNjVGREM4QTVEM0ZFMzc3RUU1RjM0MkM5OEY0NQorOjEwMUZCMDAwREZENkZCMkIzRjIxNUEwQUMyQTRGRTE1OTg0NTA2RUUzOAorOjEwMUZDMDAwNkI4NDIxOENFREEwNTBEREFDRTA3RTc0RTUzRDYyMzI4NworOjEwMUZEMDAwRTQ1QzYwMjlEOTBFM0FFM0I1RkI2RDExQUJENTVCOEQ5RQorOjEwMUZFMDAwREQxNUJCMDkzRjExOTdFOEM0QkRENkU4ODQ4MzAyRUYzNQorOjEwMUZGMDAwOUYwQUVCOEEzM0UxMTdGRDYzREMxMzhBNzJGMDdFNzk2NgorOjEwMjAwMDAwOEI4MkY5RTE5OTcyRkZCNzE3ODczNzQxQUYwMjg3QzYxNAorOjEwMjAxMDAwRTc0MERFNzMyRDhFMzZENDAxOUM0NTA5NEI3MENFOUY3MAorOjEwMjAyMDAwMUJFREM4NDExREMwRDkzNTRBRTJGMThFMzZDNTg5NTQzMQorOjEwMjAzMDAwMzY2MTQ5MDFCRjNGQjM2RUY5QzQ4QTc3NkI4QTg4QTZCRgorOjEwMjA0MDAwN0Q1OTg2Qjk3M0YwOUQ5QUUyQ0ZFNEI5NTlGNDcxMUNCOQorOjEwMjA1MDAwQkJCMTQ4OUVCRjQ2QkMyRUZDQjhCN0VBOUIxOUM5Rjc3NgorOjEwMjA2MDAwNjcyMkQzOTE4MzdFQ0EyQkJGNUY0NEZBNzdFNDA3QUUyMQorOjEwMjA3MDAwOUIwMDEzMzUzQUUzNzE4QkE4NDJBQUREMzZDMEUzREE0MAorOjEwMjA4MDAwN0Q1RTk3QzE1RDBBNTgxNEU1MzE3MkJCQzE5QjBERjhBNgorOjEwMjA5MDAwOTZDMUY3NTNCNDkzM0UxNzYxOURBMkM3MjY0RkNDMjAzQgorOjEwMjBBMDAwM0NEMUUyNjMzRkQ5RTE3MkREMDJGQTVFOUNFMTJBMDY4RgorOjEwMjBCMDAwMENBRDlGNDNCNjM4RTcxMzNEQjdBMjNGRjQxRDk2MkVGMworOjEwMjBDMDAwQ0YyNTQ1NTJFRkNCOEFBNEZGOThCRTU2REVDNzg2Q0FGRAorOjEwMjBEMDAwQkRBQ0M4QTBGOUI3QkY0RjM3RDE1QjhBRUZFOUY0OEIyRAorOjEwMjBFMDAwMkQ4QkIyNDEwRkQxN0IwRkY2NDFGNDJFMDAxNDExMzEyQworOjEwMjBGMDAwNUNFRkI4QjY5RTc5Rjg3QjY1NDU1MkJGQzg5RjU1N0RBOQorOjEwMjEwMDAwMjJGRDE5QzM3NEEzNzcxOEYyQzc1MTBGNzg4NzgxREVCNworOjEwMjExMDAwNTE4RDdEMzZGQzNCOEM2NzNEN0QzNkM0Rjc2NzU3RjdBNAorOjEwMjEyMDAwRDlEMEZFQUM0QkJFOTMwRTVEQkZCMTQ4QkU5RjQ4OUY1OQorOjEwMjEzMDAwREVDN0YzQzdEMkI3QkEzOTRGRUYxQjg2M0MyQUJERkNDNgorOjEwMjE0MDAwOTNGNUYyREUyNTgzRTNDQjU4MkRCRThDN0QyMEE1QkQxMworOjEwMjE1MDAwODdGNDZERUM5M0QxN0NCRjJEMEE2MkI5QkZEMjJBRUQxMgorOjEwMjE2MDAwQjRGMjgxQjI4MzZEMDRDNzZGMjM3QTgzRjJBRjA5NUU0NAorOjEwMjE3MDAwQTI3QjUwNUU2NEVDOTdFRjJEMDkwNzlGRjY5ODE4ODdCNQorOjEwMjE4MDAwQ0UyMkJGQUExMUYyQkRFNTI4Q0Q2RjIwNkYyQjI1QkY0RgorOjEwMjE5MDAwNTA1MzdFRTQxMkJGMDNDMDdDQUM4RjNCNUJFODVGQkI1NworOjEwMjFBMDAwNDlFMjE0QUU3MTFFNUQzNjZGNEQxNzlGMEZCNzVENjkyMgorOjEwMjFCMDAwRDdDRTlCQURFQjcxN0VBNkZDNkQ1MDdCNjVEOUUxMkUzMQorOjEwMjFDMDAwQzQ5QkFBM0Q4M0RCNkI5NjdGQ0VFNzU4Q0FERjA2QjU3QQorOjEwMjFEMDAwREZGM0QzMEZGOTlENEQ1REZCRTA3NjkyRUY1MzkwQkY5NworOjEwMjFFMDAwMkVERkEzMjZERjA0OUNGNzhFRDY4NDM5RTVCRjFGRjBDRgorOjEwMjFGMDAwQUQ4MEJEMzc1NTQ3RjBGQkQ5OURCRkM5NjNCREQxRTU2MworOjEwMjIwMDAwNERGMzlCQkU5QjdFQUNFNUYxOUUzQzkxMDE3QkY4MzY4NQorOjEwMjIxMDAwRDgwQkZGOTQzNkM4M0Y3OUI4Q0UzNzJCOTJGRDRFOUQzMAorOjEwMjIyMDAwNzZCRUFBMkRCMzczOUM0RkFDQjVCMkZGMkE1NEMzOUNBMworOjEwMjIzMDAwQzA2QjhERDJDRjg4NjI1NUYzNTMzRUI2RkYxM0I3MERGNgorOjEwMjI0MDAwRTM3QTFFNkYwMDc4Q0MyNDdFNzcxQ0I3NTZFMjdEMjM5QworOjEwMjI1MDAwMkNFQzFGMEEwRDI1RDVCQjA5MUUzMTJDNjczRjkwODA0MQorOjEwMjI2MDAwMTc5NzI0Rjc2N0UwMUY1NEQ4QUZCQzdGQTgzM0ZCMTQzRgorOjEwMjI3MDAwNzlCRkVGQzhDMTc5NTdCRjZGNkFEOEU4NkQzRDgwRjM2OQorOjEwMjI4MDAwQjJFMjdENzIyOUVBOEE3NzQ0RjBGRDQxMDBGNTQ2REEzMAorOjEwMjI5MDAwNEZDMzMwRTk0NzFCRTZBNzczMUMwODg4OTJEMjE1QzhDNAorOjEwMjJBMDAwNDNFNjg1NzFGREIxNjE5OEUzNTFEQzI3MzY1NDRDRTQ3NworOjEwMjJCMDAwM0NGQUUwREY2NERDRUQ5QjYzNzUyMjhGNkE5OEVDNTg5MgorOjEwMjJDMDAwODNGNzJBMEQwRjM4QjhGRjU1NDVBRUU3Nzk1NEYyQTdDQQorOjEwMjJEMDAwNjE4RURDN0Y0MzQ1MEM5RjdCNzQzOTM0MzRCQTQ2RTIwRgorOjEwMjJFMDAwN0U2QUM2MThGNzdGNDI2RUEzQjRGQkI5ODY2NDZBMjc3QworOjEwMjJGMDAwRjg4NDUyMzJGRjI3NTg2NzkyQTQ3N0QyMEMwN0NCRURBRgorOjEwMjMwMDAwRThGQzg5OEZFRTcyNzAzOEYxRTM5RUE4NkU1NkU0QTA2NworOjEwMjMxMDAwNzNGMUZGMDA4NzUxRDlGNjEwMzcwMDAwMDAwMDAwMDA2QworOjEwMjMyMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAxNTAwMDAwMDAwMDA5MworOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2N4Z2IzL2FlbDIwMDVfb3B0X2VkYy5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL2FlbDIwMDVfb3B0X2VkYy5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQ2ZTVkCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY3hnYjMvYWVsMjAwNV9vcHRfZWRjLmJpbi5paGV4CkBAIC0wLDAgKzEsNjkgQEAKKzoxMDAwMDAwMENDMDAyRkY0Q0MwMTNDRDRDQzAyMjAxNUNDMDMzMTA1MUMKKzoxMDAwMTAwMENDMDQ2NTI0Q0MwNTI3RkZDQzA2MzAwRkNDMDcyQzhCRjUKKzoxMDAwMjAwMENDMDgzMDBCQ0MwOTQwMDlDQzBBNDAwRUNDMEIyRjcyMDcKKzoxMDAwMzAwMENDMEMzMDAyQ0MwRDEwMDJDQzBFMjE3MkNDMEYzMDEyNDEKKzoxMDAwNDAwMENDMTAxMDAyQ0MxMTI1RDJDQzEyMzAxMkNDMTMxMDAyREQKKzoxMDAwNTAwMENDMTREMDFFQ0MxNTI3RDJDQzE2MzAxMkNDMTcxMDAyREYKKzoxMDAwNjAwMENDMTgyMDA0Q0MxOTNDODRDQzFBNjQzNkNDMUIyMDA3NTUKKzoxMDAwNzAwMENDMUMzRjg3Q0MxRDg2NzZDQzFFNDBCN0NDMUZBNzQ2MzQKKzoxMDAwODAwMENDMjA0MDQ3Q0MyMTU2NzNDQzIyMjk4MkNDMjMzMDAyOEQKKzoxMDAwOTAwMENDMjQxM0QyQ0MyNThCQkRDQzI2Mjg2MkNDMjczMDEyQTEKKzoxMDAwQTAwMENDMjgxMDAyQ0MyOTIwOTJDQzJBMzAxMkNDMkIxMDAyNjIKKzoxMDAwQjAwMENDMkM1Q0MzQ0MyRDAzMTRDQzJFMjk0MkNDMkYzMDAyODcKKzoxMDAwQzAwMENDMzAxMDAyQ0MzMUQwMTlDQzMyMjAzMkNDMzMzMDEyQUIKKzoxMDAwRDAwMENDMzQxMDAyQ0MzNTJBMDRDQzM2M0M3NENDMzc2NDM1OTEKKzoxMDAwRTAwMENDMzgyRkE0Q0MzOTNDRDRDQzNBNjYyNENDM0I1NTYzRDUKKzoxMDAwRjAwMENDM0MyRDQyQ0MzRDMwMDJDQzNFMTNEMkNDM0Y0NjREQzEKKzoxMDAxMDAwMENDNDAyODYyQ0M0MTMwMTJDQzQyMTAwMkNDNDMyMDMyODkKKzoxMDAxMTAwMENDNDQzMDEyQ0M0NTEwMDJDQzQ2MkZCNENDNDczQ0Q0NTIKKzoxMDAxMjAwMENDNDg2NjI0Q0M0OTU1NjNDQzRBMkQ0MkNDNEIzMDAyOTYKKzoxMDAxMzAwMENDNEMxM0QyQ0M0RDJFRDJDQzRFMzAwMkNDNEYxMDAyMzAKKzoxMDAxNDAwMENDNTAyRkQyQ0M1MTMwMDJDQzUyMTAwMkNDNTMwMDA0RjAKKzoxMDAxNTAwMENDNTQyOTQyQ0M1NTMwMDJDQzU2MTAwMkNDNTcyMDkyQjgKKzoxMDAxNjAwMENDNTgzMDEyQ0M1OTEwMDJDQzVBNUNDM0NDNUIwMzE3NkMKKzoxMDAxNzAwMENDNUMyRjcyQ0M1RDMwMDJDQzVFMTAwMkNDNUYyOTQyODkKKzoxMDAxODAwMENDNjAzMDAyQ0M2MTEwMDJDQzYyMjJDRENDNjMzMDFEMzkKKzoxMDAxOTAwMENDNjQyODYyQ0M2NTMwMTJDQzY2MTAwMkNDNjcyRUQyQkIKKzoxMDAxQTAwMENDNjgzMDAyQ0M2OTEwMDJDQzZBMkQ3MkNDNkIzMDAyNjQKKzoxMDAxQjAwMENDNkMxMDAyQ0M2RDYyOEZDQzZFMjExMkNDNkYzMDEyRTEKKzoxMDAxQzAwMENDNzAxMDAyQ0M3MTVBQTNDQzcyMkRDMkNDNzMzMDAyMDkKKzoxMDAxRDAwMENDNzQxMzEyQ0M3NTZGNzJDQzc2MTAwMkNDNzcyODA3RDIKKzoxMDAxRTAwMENDNzgzMUE3Q0M3OTIwQzRDQzdBM0MyNENDN0I2NzI0NTIKKzoxMDAxRjAwMENDN0MxMDAyQ0M3RDI4MDdDQzdFMzE4N0NDN0YyMEM0RkMKKzoxMDAyMDAwMENDODAzQzI0Q0M4MTY3MjRDQzgyMTAwMkNDODMyNTE0ODIKKzoxMDAyMTAwMENDODQzQzY0Q0M4NTY0MzZDQzg2REZGNENDODc2NDM2RjEKKzoxMDAyMjAwMENDODgxMDAyQ0M4OTQwQTRDQzhBNjQzQ0NDOEI0MDE2OEMKKzoxMDAyMzAwMENDOEM4QzZDQ0M4RDJCMjRDQzhFM0MyNENDOEY2NDM1MTgKKzoxMDAyNDAwMENDOTAxMDAyQ0M5MTJCMjRDQzkyM0MyNENDOTM2NDNBRDkKKzoxMDAyNTAwMENDOTQ0MDI1Q0M5NThBNUFDQzk2MTAwMkNDOTcyNzMxNjUKKzoxMDAyNjAwMENDOTgzMDExQ0M5OTEwMDFDQzlBQzdBMENDOUIwMTAwM0UKKzoxMDAyNzAwMENDOUNDNTAyQ0M5RDUzQUNDQzlFQzUwM0NDOUZENUQ1QTAKKzoxMDAyODAwMENDQTBDNjAwQ0NBMTJBNkRDQ0EyQzYwMUNDQTMyQTRDMUUKKzoxMDAyOTAwMENDQTRDNjAyQ0NBNTAxMTFDQ0E2QzYwQ0NDQTc1OTAwOTMKKzoxMDAyQTAwMENDQThDNzEwQ0NBOTA3MDBDQ0FBQzcxOENDQUIwNzAwQjQKKzoxMDAyQjAwMENDQUNDNzIwQ0NBRDQ3MDBDQ0FFQzgwMUNDQUY3RjUwOTIKKzoxMDAyQzAwMENDQjBDODAyQ0NCMTc3NjBDQ0IyQzgwM0NDQjM3RkNFN0YKKzoxMDAyRDAwMENDQjRDODA0Q0NCNTU3MDBDQ0I2QzgwNUNDQjc1RjExQjgKKzoxMDAyRTAwMENDQjhDODA2Q0NCOTQ3NTFDQ0JBQzgwN0NDQkI1N0UxOEIKKzoxMDAyRjAwMENDQkNDODA4Q0NCRDI3MDBDQ0JFQzgwOUNDQkYwMDAwMTAKKzoxMDAzMDAwMENDQzBDODIxQ0NDMTAwMDJDQ0MyQzgyMkNDQzMwMDE0Q0UKKzoxMDAzMTAwMENDQzRDODMyQ0NDNTExODZDQ0M2Qzg0N0NDQzcxRTAyRDcKKzoxMDAzMjAwMENDQzhDMDEzQ0NDOUYzNDFDQ0NBQzAxQUNDQ0IwNDQ2NEMKKzoxMDAzMzAwMENDQ0NDMDI0Q0NDRDEwMDBDQ0NFQzAyNUNDQ0YwQTAwNzQKKzoxMDAzNDAwMENDRDBDMDI2Q0NEMTBDMENDQ0QyQzAyN0NDRDMwQzBDM0EKKzoxMDAzNTAwMENDRDRDMDI5Q0NENTAwQTBDQ0Q2QzAzMENDRDcwQTAwOTQKKzoxMDAzNjAwMENDRDhDMDNDQ0NEOTAwMUNDQ0RBQzAwNUNDREI3QTA2OUEKKzoxMDAzNzAwMENDREMwMDAwQ0NERDI3MzFDQ0RFMzAxMUNDREYxMDAxMkQKKzoxMDAzODAwMENDRTBDNjIwQ0NFMTAwMDBDQ0UyQzYyMUNDRTMwMDNGQUIKKzoxMDAzOTAwMENDRTRDNjIyQ0NFNTAwMDBDQ0U2QzYyM0NDRTcwMDAwQzYKKzoxMDAzQTAwMENDRThDNjI0Q0NFOTAwMDBDQ0VBQzYyNUNDRUIwMDAwQTIKKzoxMDAzQjAwMENDRUNDNjI3Q0NFRDAwMDBDQ0VFQzYyOENDRUYwMDAwN0MKKzoxMDAzQzAwMENDRjBDNjJDQ0NGMTAwMDBDQ0YyMDAwMENDRjMyODA2MTcKKzoxMDAzRDAwMENDRjQzQ0I2Q0NGNUMxNjFDQ0Y2NjEzNENDRjc2MTM1RDgKKzoxMDAzRTAwMENDRjg1NDQzQ0NGOTAzMDNDQ0ZBNjUyNENDRkIwMDBCQzYKKzoxMDAzRjAwMENDRkMxMDAyQ0NGRDIxMDRDQ0ZFM0MyNENDRkYyMTA1MUEKKzoxMDA0MDAwMENEMDAzODA1Q0QwMTY1MjRDRDAyREZGNENEMDM0MDA1RDQKKzoxMDA0MTAwMENEMDQ2NTI0Q0QwNTEwMDJDRDA2NUREM0NEMDcwMzA2QkUKKzoxMDA0MjAwMENEMDgyRkY3Q0QwOTM4RjdDRDBBNjBCN0NEMEJERkZEMkEKKzoxMDA0MzAwMENEMEMwMDBBQ0QwRDEwMDJDRDBFMDAwMDdDQzdBRTU5QzgKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9jeGdiMy9hZWwyMDA1X3R3eF9lZGMuYmluLmloZXggYi9maXJtd2FyZS9jeGdiMy9hZWwyMDA1X3R3eF9lZGMuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1ZTllNQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2N4Z2IzL2FlbDIwMDVfdHd4X2VkYy5iaW4uaWhleApAQCAtMCwwICsxLDkzIEBACis6MTAwMDAwMDBDQzAwNDAwOUNDMDEyN0ZGQ0MwMjMwMEZDQzAzNDBBQTIyCis6MTAwMDEwMDBDQzA0NDAxQ0NDMDU0MDFFQ0MwNjJGRjRDQzA3M0NENEFECis6MTAwMDIwMDBDQzA4MjAzNUNDMDkzMTQ1Q0MwQTY1MjRDQzBCMjZBMjVFCis6MTAwMDMwMDBDQzBDMzAxMkNDMEQxMDAyQ0MwRTI5QzJDQzBGMzAwMkU5Cis6MTAwMDQwMDBDQzEwMTAwMkNDMTEyMDcyQ0MxMjMwMTJDQzEzMTAwMjQyCis6MTAwMDUwMDBDQzE0MjJDRENDMTUzMDFEQ0MxNjJFNTJDQzE3MzAxMjFDCis6MTAwMDYwMDBDQzE4MTAwMkNDMTkyOEUyQ0MxQTMwMDJDQzFCMTAwMjlBCis6MTAwMDcwMDBDQzFDNjI4RkNDMUQyQUMyQ0MxRTMwMTJDQzFGMTAwMkE5Cis6MTAwMDgwMDBDQzIwNTU1M0NDMjEyQUUyQ0MyMjMwMDJDQzIzMTMwMkJGCis6MTAwMDkwMDBDQzI0NDAxRUNDMjUyQkUyQ0MyNjMwMTJDQzI3MTAwMkRCCis6MTAwMEEwMDBDQzI4MkRBMkNDMjkzMDEyQ0MyQTEwMDJDQzJCMkJBMjhBCis6MTAwMEIwMDBDQzJDMzAwMkNDMkQxMDAyQ0MyRTVFRTNDQzJGMDMwNUNECis6MTAwMEMwMDBDQzMwNDAwRUNDMzEyQkMyQ0MzMjMwMDJDQzMzMTAwMkJCCis6MTAwMEQwMDBDQzM0MkI4MkNDMzUzMDEyQ0MzNjEwMDJDQzM3NTY2MzYwCis6MTAwMEUwMDBDQzM4MDMwMkNDMzk0MDFFQ0MzQTZGNzJDQzNCMTAwMkE0Cis6MTAwMEYwMDBDQzNDNjI4RkNDM0QyQkUyQ0MzRTMwMTJDQzNGMTAwMjg4Cis6MTAwMTAwMDBDQzQwMjJDRENDNDEzMDFEQ0M0MjJFNTJDQzQzMzAxMkJCCis6MTAwMTEwMDBDQzQ0MTAwMkNDNDUyNTIyQ0M0NjMwMTJDQzQ3MTAwMkVDCis6MTAwMTIwMDBDQzQ4MkRBMkNDNDkzMDEyQ0M0QTEwMDJDQzRCMkNBMjg4Cis6MTAwMTMwMDBDQzRDMzAxMkNDNEQxMDAyQ0M0RTJGQTRDQzRGM0NENDIyCis6MTAwMTQwMDBDQzUwNjYyNENDNTE0MTBCQ0M1MjU2QjNDQzUzMDNDNDkzCis6MTAwMTUwMDBDQzU0MkZCMkNDNTUzMDAyQ0M1NjEwMDJDQzU3MjIwQkM3Cis6MTAwMTYwMDBDQzU4MzAzQkNDNTk1NkIzQ0M1QTAzQzNDQzVCODY2QkNFCis6MTAwMTcwMDBDQzVDNDAwQ0NDNUQyM0EyQ0M1RTMwMTJDQzVGMTAwMjc0Cis6MTAwMTgwMDBDQzYwMkRBMkNDNjEzMDEyQ0M2MjEwMDJDQzYzMkNBMkM4Cis6MTAwMTkwMDBDQzY0MzAxMkNDNjUxMDAyQ0M2NjJGQjRDQzY3M0NENDUyCis6MTAwMUEwMDBDQzY4NjYyNENDNjk1NkIzQ0M2QTAzQzNDQzZCODY2QjJGCis6MTAwMUIwMDBDQzZDNDAxQ0NDNkQyMjA1Q0M2RTMwMzVDQzZGNUI1M0MzCis6MTAwMUMwMDBDQzcwMkM1MkNDNzEzMDAyQ0M3MjEzQzJDQzczNUNDMzk1Cis6MTAwMUQwMDBDQzc0MDMxN0NDNzUyNTIyQ0M3NjMwMTJDQzc3MTAwMjY0Cis6MTAwMUUwMDBDQzc4MkRBMkNDNzkzMDEyQ0M3QTEwMDJDQzdCMkI4MjI5Cis6MTAwMUYwMDBDQzdDMzAxMkNDN0QxMDAyQ0M3RTU2NjNDQzdGMDMwM0M2Cis6MTAwMjAwMDBDQzgwNDAxRUNDODEwMDA0Q0M4MjJDNDJDQzgzMzAxMkE2Cis6MTAwMjEwMDBDQzg0MTAwMkNDODU2RjcyQ0M4NjEwMDJDQzg3NjI4RkEyCis6MTAwMjIwMDBDQzg4MjMwNENDODkzQzg0Q0M4QTY0MzZDQzhCREZGNDI0Cis6MTAwMjMwMDBDQzhDNjQzNkNDOEQyRkY1Q0M4RTMwMDVDQzhGODY1Njg5Cis6MTAwMjQwMDBDQzkwREZCQUNDOTE1NkEzQ0M5MkQwNUFDQzkzMjFDMjk5Cis6MTAwMjUwMDBDQzk0MzAxMkNDOTUxMzkyQ0M5NkQwNUFDQzk3NTZBMzBFCis6MTAwMjYwMDBDQzk4REZCQUNDOTkwMzgzQ0M5QTZGNzJDQzlCMTAwMkU2Cis6MTAwMjcwMDBDQzlDMjhDNUNDOUQzMDA1Q0M5RTQxNzhDQzlGNTY1MzU0Cis6MTAwMjgwMDBDQ0EwMDM4NENDQTEyMkIyQ0NBMjMwMTJDQ0EzMTAwMjA5Cis6MTAwMjkwMDBDQ0E0MkJFNUNDQTUzMDA1Q0NBNjQxRThDQ0E3NTY1MzgxCis6MTAwMkEwMDBDQ0E4MDM4MkNDQTkwMDAyQ0NBQTQyNThDQ0FCMjQ3NEJGCis6MTAwMkIwMDBDQ0FDM0M4NENDQUQ2NDM3Q0NBRURGRjRDQ0FGNjQzNzhGCis6MTAwMkMwMDBDQ0IwMkZGNUNDQjEzQzA1Q0NCMjg3NTdDQ0IzQjg4OEI1Cis6MTAwMkQwMDBDQ0I0OTc4N0NDQjVERkY0Q0NCNjY3MjRDQ0I3ODY2QUFDCis6MTAwMkUwMDBDQ0I4NkY3MkNDQjkxMDAyQ0NCQTJEMDFDQ0JCMzAxMTk2Cis6MTAwMkYwMDBDQ0JDMTAwMUNDQkRDNjIwQ0NCRTE0RTVDQ0JGQzYyMTAxCis6MTAwMzAwMDBDQ0MwQzUzRENDQzFDNjIyQ0NDMjNDQkVDQ0MzQzYyM0VBCis6MTAwMzEwMDBDQ0M0NDQ1MkNDQzVDNjI0Q0NDNkM1QzVDQ0M3QzYyNUEyCis6MTAwMzIwMDBDQ0M4RTAxRUNDQzlDNjI3Q0NDQTAwMDBDQ0NCQzYyODlFCis6MTAwMzMwMDBDQ0NDMDAwMENDQ0RDNjJCQ0NDRTAwMDBDQ0NGQzYyQzc0Cis6MTAwMzQwMDBDQ0QwMDAwMENDRDEwMDAwQ0NEMjJEMDFDQ0QzMzAxMUM4Cis6MTAwMzUwMDBDQ0Q0MTAwMUNDRDVDNjIwQ0NENjAwMDBDQ0Q3QzYyMTM5Cis6MTAwMzYwMDBDQ0Q4MDAwMENDRDlDNjIyQ0NEQTAwQ0VDQ0RCQzYyMzU4Cis6MTAwMzcwMDBDQ0RDMDA3RkNDRERDNjI0Q0NERTAwMzJDQ0RGQzYyNTUxCis6MTAwMzgwMDBDQ0UwMDAwMENDRTFDNjI3Q0NFMjAwMDBDQ0UzQzYyOERDCis6MTAwMzkwMDBDQ0U0MDAwMENDRTVDNjJCQ0NFNjAwMDBDQ0U3QzYyQ0I0Cis6MTAwM0EwMDBDQ0U4MDAwMENDRTkwMDAwQ0NFQTJEMDFDQ0VCMzAxMTA4Cis6MTAwM0IwMDBDQ0VDMTAwMUNDRURDNTAyQ0NFRTYwOUZDQ0VGQzYwMEJBCis6MTAwM0MwMDBDQ0YwMkE2RUNDRjFDNjAxQ0NGMjJBMkNDQ0YzQzYwQ0IwCis6MTAwM0QwMDBDQ0Y0NTQwMENDRjVDNzEwQ0NGNjA3MDBDQ0Y3QzcxODA2Cis6MTAwM0UwMDBDQ0Y4MDcwMENDRjlDNzIwQ0NGQTQ3MDBDQ0ZCQzcyOEQzCis6MTAwM0YwMDBDQ0ZDMDcwMENDRkRDNzI5Q0NGRTEyMDdDQ0ZGQzgwMUZFCis6MTAwNDAwMDBDRDAwN0Y1MENEMDFDODAyQ0QwMjc3NjBDRDAzQzgwMzc3Cis6MTAwNDEwMDBDRDA0N0ZDRUNEMDVDODA0Q0QwNjUyMEVDRDA3QzgwNTRDCis6MTAwNDIwMDBDRDA4NUMxMUNEMDlDODA2Q0QwQTNDNTFDRDBCQzgwN0RCCis6MTAwNDMwMDBDRDBDNDA2MUNEMERDODA4Q0QwRTQ5QzFDRDBGQzgwOTA2Cis6MTAwNDQwMDBDRDEwMzg0MENEMTFDODBBQ0QxMjAwMDBDRDEzQzgyMUZGCis6MTAwNDUwMDBDRDE0MDAwMkNEMTVDODIyQ0QxNjAwNDZDRDE3Qzg0NEQ0Cis6MTAwNDYwMDBDRDE4MTgyRkNEMTlDMDEzQ0QxQUYzNDFDRDFCQzAxQUNBCis6MTAwNDcwMDBDRDFDMDQ0NkNEMURDMDI0Q0QxRTEwMDBDRDFGQzAyNUFGCis6MTAwNDgwMDBDRDIwMEEwMENEMjFDMDI2Q0QyMjBDMENDRDIzQzAyN0MzCis6MTAwNDkwMDBDRDI0MEMwQ0NEMjVDMDI5Q0QyNjAwQTBDRDI3QzAzMDAxCis6MTAwNEEwMDBDRDI4MEEwMENEMjlDMDNDQ0QyQTAwMUNDRDJCMDAwMDUwCis6MTAwNEIwMDBDRDJDMkI4NENEMkQzQzc0Q0QyRTY0MzVDRDJGREZGNDg3Cis6MTAwNEMwMDBDRDMwNjQzNUNEMzEyODA2Q0QzMjMwMDZDRDMzODU2NTRCCis6MTAwNEQwMDBDRDM0MkIyNENEMzUzQzI0Q0QzNjY0MzZDRDM3MTAwMkI3Cis6MTAwNEUwMDBDRDM4MkIyNENEMzkzQzI0Q0QzQTY0MzZDRDNCNDA0NTI0Cis6MTAwNEYwMDBDRDNDODY1NkNEM0QxMDAyQ0QzRTI4MDdDRDNGMzFBN0RECis6MTAwNTAwMDBDRDQwMjBDNENENDEzQzI0Q0Q0MjY3MjRDRDQzMTAwMkQwCis6MTAwNTEwMDBDRDQ0MjgwN0NENDUzMTg3Q0Q0NjIwQzRDRDQ3M0MyNDY2Cis6MTAwNTIwMDBDRDQ4NjcyNENENDkxMDAyQ0Q0QTI1MTRDRDRCM0M2NEZCCis6MTAwNTMwMDBDRDRDNjQzNkNENERERkY0Q0Q0RTY0MzZDRDRGMTAwMjM4Cis6MTAwNTQwMDBDRDUwMjgwNkNENTEzQ0I2Q0Q1MkMxNjFDRDUzNjEzNDVBCis6MTAwNTUwMDBDRDU0NjEzNUNENTU1NDQzQ0Q1NjAzMDNDRDU3NjUyNDU1Cis6MTAwNTYwMDBDRDU4MDAwQkNENTkxMDAyQ0Q1QUQwMTlDRDVCMjEwNEM2Cis6MTAwNTcwMDBDRDVDM0MyNENENUQyMTA1Q0Q1RTM4MDVDRDVGNjUyNDg1Cis6MTAwNTgwMDBDRDYwREZGNENENjE0MDA1Q0Q2MjY1MjRDRDYzMkU4RDU1Cis6MTAwNTkwMDBDRDY0MzAzRENENjU1REQzQ0Q2NjAzMDZDRDY3MkZGN0M1Cis6MTAwNUEwMDBDRDY4MzhGN0NENjk2MEI3Q0Q2QURGRkRDRDZCMDAwQTQ1Cis6MEMwNUIwMDBDRDZDMTAwMkNENkQwMDAwNTJBNzZCMEU0OAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2N4Z2IzL2FlbDIwMjBfdHd4X2VkYy5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL2FlbDIwMjBfdHd4X2VkYy5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjEzMzdmCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvY3hnYjMvYWVsMjAyMF90d3hfZWRjLmJpbi5paGV4CkBAIC0wLDAgKzEsMTAwIEBACis6MTAwMDAwMDBEODAwNDAwOUQ4MDEyRkZGRDgwMjMwMEZEODAzNDBBQUVBCis6MTAwMDEwMDBEODA0NDAxQ0Q4MDU0MDFFRDgwNjJGRjREODA3M0RDNDhDCis6MTAwMDIwMDBEODA4MjAzNUQ4MDkzMDM1RDgwQTY1MjREODBCMkNCMjI5Cis6MTAwMDMwMDBEODBDMzAxMkQ4MEQxMDAyRDgwRTI2RTJEODBGMzAyMjdDCis6MTAwMDQwMDBEODEwMTAwMkQ4MTEyN0QyRDgxMjMwMjJEODEzMTAwMjlCCis6MTAwMDUwMDBEODE0MjgyMkQ4MTUzMDEyRDgxNjEwMDJEODE3MjQ5Mjk2Cis6MTAwMDYwMDBEODE4MzAyMkQ4MTkxMDAyRDgxQTI3NzJEODFCMzAxMjhCCis6MTAwMDcwMDBEODFDMTAwMkQ4MUQyM0QyRDgxRTMwMjJEODFGMTAwMjNGCis6MTAwMDgwMDBEODIwMjJDREQ4MjEzMDFERDgyMjI3RjJEODIzMzAyMkUzCis6MTAwMDkwMDBEODI0MTAwMkQ4MjU1NTUzRDgyNjAzMDdEODI3MjUyMjVGCis6MTAwMEEwMDBEODI4MzAyMkQ4MjkxMDAyRDgyQTIxNDJEODJCMzAxMjQxCis6MTAwMEIwMDBEODJDMTAwMkQ4MkQ0MDE2RDgyRTVFNjNEODJGMDM0NEJBCis6MTAwMEMwMDBEODMwMjE0MkQ4MzEzMDEyRDgzMjEwMDJEODMzNDAwRTA1Cis6MTAwMEQwMDBEODM0MjUyMkQ4MzUzMDIyRDgzNjEwMDJEODM3MkI1MkMyCis6MTAwMEUwMDBEODM4MzAxMkQ4MzkxMDAyRDgzQTI3NDJEODNCMzAyMkJCCis6MTAwMEYwMDBEODNDMTAwMkQ4M0QyNUUyRDgzRTMwMjJEODNGMTAwMjJECis6MTAwMTAwMDBEODQwMkZBNEQ4NDEzREM0RDg0MjY2MjREODQzNDE0QjlGCis6MTAwMTEwMDBEODQ0NTZCM0Q4NDUwM0M2RDg0Njg2NkJEODQ3NDAwQzVBCis6MTAwMTIwMDBEODQ4MjcxMkQ4NDkzMDEyRDg0QTEwMDJEODRCMkM0QjQ1Cis6MTAwMTMwMDBEODRDMzA5QkQ4NEQ1NkIzRDg0RTAzQzNEODRGODY2QjlFCis6MTAwMTQwMDBEODUwNDAwQ0Q4NTEyMjcyRDg1MjMwMjJEODUzMTAwMkM1Cis6MTAwMTUwMDBEODU0Mjc0MkQ4NTUzMDIyRDg1NjEwMDJEODU3MjVFMjE1Cis6MTAwMTYwMDBEODU4MzAyMkQ4NTkxMDAyRDg1QTJGQjREODVCM0RDNDgxCis6MTAwMTcwMDBEODVDNjYyNEQ4NUQ1NkIzRDg1RTAzQzNEODVGODY2QjVGCis6MTAwMTgwMDBEODYwNDAxQ0Q4NjEyQzQ1RDg2MjMwOTVEODYzNUI1MzQ5Cis6MTAwMTkwMDBEODY0MjM3MkQ4NjUzMDEyRDg2NjEzQzJEODY3NUNDMzlFCis6MTAwMUEwMDBEODY4MjcxMkQ4NjkzMDEyRDg2QTEzMTJEODZCMkI1MjJDCis6MTAwMUIwMDBEODZDMzAxMkQ4NkQxMDAyRDg2RTI3NDJEODZGMzAyMjFBCis6MTAwMUMwMDBEODcwMTAwMkQ4NzEyNTgyRDg3MjMwMjJEODczMTAwMkVDCis6MTAwMUQwMDBEODc0MjE0MkQ4NzUzMDEyRDg3NjEwMDJEODc3NjI4RjQxCis6MTAwMUUwMDBEODc4Mjk4NUQ4NzkzM0E1RDg3QTI1RTJEODdCMzAyMkVBCis6MTAwMUYwMDBEODdDMTAwMkQ4N0Q1NjUzRDg3RTAzRDJEODdGNDAxRUJCCis6MTAwMjAwMDBEODgwNkY3MkQ4ODExMDAyRDg4MjYyOEZEODgzMjMwNDdECis6MTAwMjEwMDBEODg0M0M4NEQ4ODU2NDM2RDg4NkRGRjREODg3NjQzNkExCis6MTAwMjIwMDBEODg4MkZGNUQ4ODkzMDA1RDg4QTg2NTZEODhCREZCQTdBCis6MTAwMjMwMDBEODhDNTZBM0Q4OEREMDVBRDg4RTI5NzJEODhGMzAxMjI4Cis6MTAwMjQwMDBEODkwMTM5MkQ4OTFEMDVBRDg5MjU2QTNEODkzREZCQUE3Cis6MTAwMjUwMDBEODk0MDM4M0Q4OTU2RjcyRDg5NjEwMDJEODk3MkI0NUZGCis6MTAwMjYwMDBEODk4MzAwNUQ4OTk0MTc4RDg5QTU2NTNEODlCMDM4NEFBCis6MTAwMjcwMDBEODlDMkE2MkQ4OUQzMDEyRDg5RTEwMDJEODlGMkYwNTk0Cis6MTAwMjgwMDBEOEEwMzAwNUQ4QTE0MUM4RDhBMjU2NTNEOEEzMDM4MjFDCis6MTAwMjkwMDBEOEE0MDAwMkQ4QTU0MjE4RDhBNjI0NzREOEE3M0M4NEI0Cis6MTAwMkEwMDBEOEE4NjQzN0Q4QTlERkY0RDhBQTY0MzdEOEFCMkZGNTFCCis6MTAwMkIwMDBEOEFDM0MwNUQ4QUQ4NzU3RDhBRUI4ODhEOEFGOTc4N0FCCis6MTAwMkMwMDBEOEIwREZGNEQ4QjE2NzI0RDhCMjg2NkFEOEIzNkY3MkQ5Cis6MTAwMkQwMDBEOEI0MTAwMkQ4QjUyNjQxRDhCNjMwMjFEOEI3MTAwMTBECis6MTAwMkUwMDBEOEI4QzYyMEQ4QjkwMDAwRDhCQUM2MjFEOEJCMDAwMEZCCis6MTAwMkYwMDBEOEJDQzYyMkQ4QkQwMENFRDhCRUM2MjNEOEJGMDA3RjhBCis6MTAwMzAwMDBEOEMwQzYyNEQ4QzEwMDMyRDhDMkM2MjVEOEMzMDAwMDgwCis6MTAwMzEwMDBEOEM0QzYyN0Q4QzUwMDAwRDhDNkM2MjhEOEM3MDAwMDhDCis6MTAwMzIwMDBEOEM4QzYyQ0Q4QzkwMDAwRDhDQTAwMDBEOENCMjY0MUVFCis6MTAwMzMwMDBEOENDMzAyMUQ4Q0QxMDAxRDhDRUM1MDJEOENGNTNBQ0ZGCis6MTAwMzQwMDBEOEQwQzUwM0Q4RDEyQ0QzRDhEMkM2MDBEOEQzMkE2RUUyCis6MTAwMzUwMDBEOEQ0QzYwMUQ4RDUyQTJDRDhENkM2MDVEOEQ3NTU1NzUzCis6MTAwMzYwMDBEOEQ4QzYwQ0Q4RDk1NDAwRDhEQUM3MTBEOERCMDcwMEMzCis6MTAwMzcwMDBEOERDQzcxMUQ4REQwRjA2RDhERUM3MThEOERGMDcwMEQ0Cis6MTAwMzgwMDBEOEUwQzcxOUQ4RTEwRjA2RDhFMkM3MjBEOEUzNDcwMDY0Cis6MTAwMzkwMDBEOEU0QzcyMUQ4RTUwRjA2RDhFNkM3MjhEOEU3MDcwMDc0Cis6MTAwM0EwMDBEOEU4QzcyOUQ4RTkxMjA3RDhFQUM4MDFEOEVCN0Y1MEE2Cis6MTAwM0IwMDBEOEVDQzgwMkQ4RUQ3NzYwRDhFRUM4MDNEOEVGN0ZDRTZFCis6MTAwM0MwMDBEOEYwQzgwNEQ4RjE1MjBFRDhGMkM4MDVEOEYzNUMxMUExCis6MTAwM0QwMDBEOEY0QzgwNkQ4RjUzQzUxRDhGNkM4MDdEOEY3NDA2MTFDCis6MTAwM0UwMDBEOEY4QzgwOEQ4Rjk0OUMxRDhGQUM4MDlEOEZCMzg0MEE0Cis6MTAwM0YwMDBEOEZDQzgwQUQ4RkQwMDAwRDhGRUM4MjFEOEZGMDAwMkVBCis6MTAwNDAwMDBEOTAwQzgyMkQ5MDEwMDQ2RDkwMkM4NDREOTAzMTgyRkZGCis6MTAwNDEwMDBEOTA0QzAxM0Q5MDVGMzQxRDkwNkMwODREOTA3MDAzMEU3Cis6MTAwNDIwMDBEOTA4QzkwNEQ5MDkxNDAxRDkwQUNCMENEOTBCMDAwNDg1Cis6MTAwNDMwMDBEOTBDQ0IwRUQ5MERBMDBBRDkwRUNCMEZEOTBGQzBDMDQ1Cis6MTAwNDQwMDBEOTEwQ0IxMEQ5MTFDMEMwRDkxMkNCMTFEOTEzMDBBMDJCCis6MTAwNDUwMDBEOTE0Q0IxMkQ5MTUwMDA3RDkxNkMyNDFEOTE3QTAwMDVCCis6MTAwNDYwMDBEOTE4QzI0M0Q5MTk3RkUwRDkxQUM2MDREOTFCMDAwRTg2Cis6MTAwNDcwMDBEOTFDQzYwOUQ5MUQwMEY1RDkxRUM2MTFEOTFGMDAwRUY5Cis6MTAwNDgwMDBEOTIwQzY2MEQ5MjE5NjAwRDkyMkM2ODdEOTIzMDAwNDc1Cis6MTAwNDkwMDBEOTI0QzYwQUQ5MjUwNEY1RDkyNjAwMDBEOTI3MjY0MTMyCis6MTAwNEEwMDBEOTI4MzAyMUQ5MjkxMDAxRDkyQUM2MjBEOTJCMTRFNTAxCis6MTAwNEIwMDBEOTJDQzYyMUQ5MkRDNTNERDkyRUM2MjJEOTJGM0NCRTU3Cis6MTAwNEMwMDBEOTMwQzYyM0Q5MzE0NDUyRDkzMkM2MjREOTMzQzVDNTBGCis6MTAwNEQwMDBEOTM0QzYyNUQ5MzVFMDFFRDkzNkM2MjdEOTM3MDAwMDBDCis6MTAwNEUwMDBEOTM4QzYyOEQ5MzkwMDAwRDkzQUM2MkNEOTNCMDAwMEUyCis6MTAwNEYwMDBEOTNDMDAwMEQ5M0QyQjg0RDkzRTNDNzREOTNGNjQzNUFBCis6MTAwNTAwMDBEOTQwREZGNEQ5NDE2NDM1RDk0MjI4MDZEOTQzMzAwNkIxCis6MTAwNTEwMDBEOTQ0ODU2NUQ5NDUyQjI0RDk0NjNDMjREOTQ3NjQzNjJFCis6MTAwNTIwMDBEOTQ4MTAwMkQ5NDkyQjI0RDk0QTNDMjREOTRCNjQzNkU2Cis6MTAwNTMwMDBEOTRDNDA0NUQ5NEQ4NjU2RDk0RTU2NjNEOTRGMDMwMjAyCis6MTAwNTQwMDBEOTUwNDAxRUQ5NTExMDAyRDk1MjI4MDdEOTUzMzFBNzhBCis6MTAwNTUwMDBEOTU0MjBDNEQ5NTUzQzI0RDk1NjY3MjREOTU3MTAwMjAwCis6MTAwNTYwMDBEOTU4MjgwN0Q5NTkzMTg3RDk1QTIwQzREOTVCM0MyNDk2Cis6MTAwNTcwMDBEOTVDNjcyNEQ5NUQxMDAyRDk1RTI0RjREOTVGM0M2NDRDCis6MTAwNTgwMDBEOTYwNjQzNkQ5NjFERkY0RDk2MjY0MzZEOTYzMTAwMjY4Cis6MTAwNTkwMDBEOTY0MjAwNkQ5NjUzRDc2RDk2NkMxNjFEOTY3NjEzNEQxCis6MTAwNUEwMDBEOTY4NjEzNUQ5Njk1NDQzRDk2QTAzMDNEOTZCNjUyNDg1Cis6MTAwNUIwMDBEOTZDMDBGQkQ5NkQxMDAyRDk2RTIwRDREOTZGM0MyNEMwCis6MTAwNUMwMDBEOTcwMjAyNUQ5NzEzMDA1RDk3MjY1MjREOTczMTAwMkVDCis6MTAwNUQwMDBEOTc0RDAxOUQ5NzUyMTA0RDk3NjNDMjREOTc3MjEwNTRECis6MTAwNUUwMDBEOTc4MzgwNUQ5Nzk2NTI0RDk3QURGRjREOTdCNDAwNUUzCis6MTAwNUYwMDBEOTdDNjUyNEQ5N0QyRThERDk3RTMwM0REOTdGMjQwOEM0Cis6MTAwNjAwMDBEOTgwMzVEOEQ5ODE1REQzRDk4MjAzMDdEOTgzODg4NzJBCis6MTAwNjEwMDBEOTg0NjNBN0Q5ODU4ODg3RDk4NjYzQTdEOTg3REZGRDYxCis6MTAwNjIwMDBEOTg4MDBGOUQ5ODkxMDAyRDk4QTAwMDA4NzhDMzBEOTdECis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggMGU3ZGE3Yi4uNDU1YWEyMCAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC00Myw2ICs0Myw3IEBACiBzb3VyY2UgImZzL2dmczIvS2NvbmZpZyIKIHNvdXJjZSAiZnMvb2NmczIvS2NvbmZpZyIKIHNvdXJjZSAiZnMvYnRyZnMvS2NvbmZpZyIKK3NvdXJjZSAiZnMvbmlsZnMyL0tjb25maWciCiAKIGVuZGlmICMgQkxPQ0sKIApAQCAtMTg2LDcgKzE4Nyw2IEBACiBzb3VyY2UgImZzL3N5c3YvS2NvbmZpZyIKIHNvdXJjZSAiZnMvdWZzL0tjb25maWciCiBzb3VyY2UgImZzL2V4b2ZzL0tjb25maWciCi1zb3VyY2UgImZzL25pbGZzMi9LY29uZmlnIgogCiBlbmRpZiAjIE1JU0NfRklMRVNZU1RFTVMKIApkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCA5NGRmZGEyLi4zNTgxYTRlIDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTQwNSw2ICsxNDA1LDMzIEBACiB9CiAKIC8qCisgKiBXcml0ZSBkYXRhIHRvIHRoZSBibG9jayBkZXZpY2UuICBPbmx5IGludGVuZGVkIGZvciB0aGUgYmxvY2sgZGV2aWNlIGl0c2VsZgorICogYW5kIHRoZSByYXcgZHJpdmVyIHdoaWNoIGJhc2ljYWxseSBpcyBhIGZha2UgYmxvY2sgZGV2aWNlLgorICoKKyAqIERvZXMgbm90IHRha2UgaV9tdXRleCBmb3IgdGhlIHdyaXRlIGFuZCB0aHVzIGlzIG5vdCBmb3IgZ2VuZXJhbCBwdXJwb3NlCisgKiB1c2UuCisgKi8KK3NzaXplX3QgYmxrZGV2X2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3NpemVfdCByZXQ7CisKKwlCVUdfT04oaW9jYi0+a2lfcG9zICE9IHBvcyk7CisKKwlyZXQgPSBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCAmaW9jYi0+a2lfcG9zKTsKKwlpZiAocmV0ID4gMCB8fCByZXQgPT0gLUVJT0NCUVVFVUVEKSB7CisJCXNzaXplX3QgZXJyOworCisJCWVyciA9IGdlbmVyaWNfd3JpdGVfc3luYyhmaWxlLCBwb3MsIHJldCk7CisJCWlmIChlcnIgPCAwICYmIHJldCA+IDApCisJCQlyZXQgPSBlcnI7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtkZXZfYWlvX3dyaXRlKTsKKworLyoKICAqIFRyeSB0byByZWxlYXNlIGEgcGFnZSBhc3NvY2lhdGVkIHdpdGggYmxvY2sgZGV2aWNlIHdoZW4gdGhlIHN5c3RlbQogICogaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogICovCkBAIC0xNDM2LDcgKzE0NjMsNyBAQAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKICAgCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKLSAgCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jaywKKwkuYWlvX3dyaXRlCT0gYmxrZGV2X2Fpb193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkuZnN5bmMJCT0gYmxvY2tfZnN5bmMsCiAJLnVubG9ja2VkX2lvY3RsCT0gYmxvY2tfaW9jdGwsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA3MmEyYjljLi41MzVmODViIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTE1MTEsNyArMTUxMSw4IEBACiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewotCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+IDksIGxlbiA+PiA5LCBHRlBfS0VSTkVMKTsKKwlibGtkZXZfaXNzdWVfZGlzY2FyZChiZGV2LCBzdGFydCA+PiA5LCBsZW4gPj4gOSwgR0ZQX0tFUk5FTCwKKwkJCSAgICAgRElTQ0FSRF9GTF9CQVJSSUVSKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggNWRiZWZkMS4uNWNmNDA1YiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCW51bV9ydW4rKzsKIAkJYmF0Y2hfcnVuKys7CiAKLQkJaWYgKGJpb19zeW5jKGN1cikpCisJCWlmIChiaW9fcndfZmxhZ2dlZChjdXIsIEJJT19SV19TWU5DSU8pKQogCQkJbnVtX3N5bmNfcnVuKys7CiAKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CkBAIC0yOTAzLDcgKzI5MDMsNyBAQAogCWJpby0+YmlfcncgfD0gcnc7CiAKIAlzcGluX2xvY2soJmRldmljZS0+aW9fbG9jayk7Ci0JaWYgKGJpb19zeW5jKGJpbykpCisJaWYgKGJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX1NZTkNJTykpCiAJCXBlbmRpbmdfYmlvcyA9ICZkZXZpY2UtPnBlbmRpbmdfc3luY19iaW9zOwogCWVsc2UKIAkJcGVuZGluZ19iaW9zID0gJmRldmljZS0+cGVuZGluZ19iaW9zOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IGU4NWIxZTQuLjE0NTU0MGEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTMsNyArMywxMCBAQAogRml4IG1lbW9yeSBsZWFrIGluIHJlY29ubmVjdC4gIEZpeCBvb3BzIGluIERGUyBtb3VudCBlcnJvciBwYXRoLgogU2V0IHNfbWF4Ynl0ZXMgdG8gc21hbGxlciAodGhlIG1heCB0aGF0IHZmcyBjYW4gaGFuZGxlKSBzbyB0aGF0CiBzZW5kZmlsZSB3aWxsIG5vdyB3b3JrIG92ZXIgY2lmcyBtb3VudHMgYWdhaW4uICBBZGQgbm9mb3JjZWdpZAotYW5kIG5vZm9yY2V1aWQgbW91bnQgcGFyYW1ldGVycy4KK2FuZCBub2ZvcmNldWlkIG1vdW50IHBhcmFtZXRlcnMuIEZpeCBzbWFsbCBtZW0gbGVhayB3aGVuIHVzaW5nCitudGxtdjIuIEZpeCAybmQgbW91bnQgdG8gc2FtZSBzZXJ2ZXIgYnV0IHdpdGggZGlmZmVyZW50IHBvcnQgdG8KK2JlIGFsbG93ZWQgKHJhdGhlciB0aGFuIHJldXNpbmcgdGhlIDFzdCBwb3J0KSAtIG9ubHkgd2hlbiB0aGUKK3VzZXIgZXhwbGljaXRseSBvdmVycmlkZXMgdGhlIHBvcnQgb24gdGhlIDJuZCBtb3VudC4KIAogVmVyc2lvbiAxLjU5CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19zcG5lZ28uYyBiL2ZzL2NpZnMvY2lmc19zcG5lZ28uYwppbmRleCAwNTFjYWVjLi44ZWM3NzM2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfc3BuZWdvLmMKKysrIGIvZnMvY2lmcy9jaWZzX3NwbmVnby5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlpZiAoc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9mYW1pbHkgPT0gQUZfSU5FVCkKIAkJc3ByaW50ZihkcCwgImlwND0lcEk0IiwgJnNlcnZlci0+YWRkci5zb2NrQWRkci5zaW5fYWRkcik7CiAJZWxzZSBpZiAoc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9mYW1pbHkgPT0gQUZfSU5FVDYpCi0JCXNwcmludGYoZHAsICJpcDY9JXBpNiIsICZzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfYWRkcik7CisJCXNwcmludGYoZHAsICJpcDY9JXBJNiIsICZzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfYWRkcik7CiAJZWxzZQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmMgYi9mcy9jaWZzL2NpZnNhY2wuYwppbmRleCA2OTQxYzIyLi43ZGZlMDg0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuYworKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtNjA3LDcgKzYwNyw3IEBACiAJCXJldHVybiBnZXRfY2lmc19hY2xfYnlfcGF0aChjaWZzX3NiLCBwYXRoLCBwYWNsbGVuKTsKIAogCXBudHNkID0gZ2V0X2NpZnNfYWNsX2J5X2ZpZChjaWZzX3NiLCBvcGVuX2ZpbGUtPm5ldGZpZCwgcGFjbGxlbik7Ci0JYXRvbWljX2RlYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwljaWZzRmlsZUluZm9fcHV0KG9wZW5fZmlsZSk7CiAJcmV0dXJuIHBudHNkOwogfQogCkBAIC02NjUsNyArNjY1LDcgQEAKIAkJcmV0dXJuIHNldF9jaWZzX2FjbF9ieV9wYXRoKGNpZnNfc2IsIHBhdGgsIHBubnRzZCwgYWNsbGVuKTsKIAogCXJjID0gc2V0X2NpZnNfYWNsX2J5X2ZpZChjaWZzX3NiLCBvcGVuX2ZpbGUtPm5ldGZpZCwgcG5udHNkLCBhY2xsZW4pOwotCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCmluZGV4IDdjOTgwOTUuLjdlZmUxNzQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYworKysgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKQEAgLTM3Myw2ICszNzMsNyBAQAogCSAgIGNvbXBhcmUgd2l0aCB0aGUgTlRMTSBleGFtcGxlICovCiAJaG1hY19tZDVfZmluYWwoc2VzLT5zZXJ2ZXItPm50bG12Ml9oYXNoLCBwY3R4dCk7CiAKKwlrZnJlZShwY3R4dCk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCA4NGI3NTI1Li4zNjEwZTk5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTM2MSwxMyArMzYxLDEwIEBACiBzdGF0aWMgaW50CiBjaWZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCB2ZnNtb3VudCAqbSkKIHsKLQlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CisJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IobS0+bW50X3NiKTsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uID0gY2lmc19zYi0+dGNvbjsKIAotCWNpZnNfc2IgPSBDSUZTX1NCKG0tPm1udF9zYik7Ci0JdGNvbiA9IGNpZnNfc2ItPnRjb247Ci0KLQlzZXFfcHJpbnRmKHMsICIsdW5jPSVzIiwgY2lmc19zYi0+dGNvbi0+dHJlZU5hbWUpOworCXNlcV9wcmludGYocywgIix1bmM9JXMiLCB0Y29uLT50cmVlTmFtZSk7CiAJaWYgKHRjb24tPnNlcy0+dXNlck5hbWUpCiAJCXNlcV9wcmludGYocywgIix1c2VybmFtZT0lcyIsIHRjb24tPnNlcy0+dXNlck5hbWUpOwogCWlmICh0Y29uLT5zZXMtPmRvbWFpbk5hbWUpCkBAIC05ODksMTkgKzk4NiwxOSBAQAogCQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQogCQkJY29udGludWU7CiAKLQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZHbG9iYWxPcGxvY2tfUSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZjaWZzX29wbG9ja19saXN0KSkgeworCQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCXNjaGVkdWxlX3RpbWVvdXQoMzkqSFopOwogCQl9IGVsc2UgewotCQkJb3Bsb2NrX2l0ZW0gPSBsaXN0X2VudHJ5KEdsb2JhbE9wbG9ja19RLm5leHQsCisJCQlvcGxvY2tfaXRlbSA9IGxpc3RfZW50cnkoY2lmc19vcGxvY2tfbGlzdC5uZXh0LAogCQkJCQkJc3RydWN0IG9wbG9ja19xX2VudHJ5LCBxaGVhZCk7CiAJCQljRllJKDEsICgiZm91bmQgb3Bsb2NrIGl0ZW0gdG8gd3JpdGUgb3V0IikpOwogCQkJcFRjb24gPSBvcGxvY2tfaXRlbS0+dGNvbjsKIAkJCWlub2RlID0gb3Bsb2NrX2l0ZW0tPnBpbm9kZTsKIAkJCW5ldGZpZCA9IG9wbG9ja19pdGVtLT5uZXRmaWQ7Ci0JCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwogCQkJRGVsZXRlT3Bsb2NrUUVudHJ5KG9wbG9ja19pdGVtKTsKIAkJCS8qIGNhbiBub3QgZ3JhYiBpbm9kZSBzZW0gaGVyZSBzaW5jZSBpdCB3b3VsZAogCQkJCWRlYWRsb2NrIHdoZW4gb3Bsb2NrIHJlY2VpdmVkIG9uIGRlbGV0ZQpAQCAtMTA1OCw3ICsxMDU1LDcgQEAKIAlpbnQgcmMgPSAwOwogCWNpZnNfcHJvY19pbml0KCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNpZnNfdGNwX3Nlc19saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmR2xvYmFsT3Bsb2NrX1EpOworCUlOSVRfTElTVF9IRUFEKCZjaWZzX29wbG9ja19saXN0KTsKICNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIAlJTklUX0xJU1RfSEVBRCgmR2xvYmFsRG5vdGlmeVJlcUxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZHbG9iYWxEbm90aWZ5UnNwX1EpOwpAQCAtMTA4Nyw2ICsxMDg0LDcgQEAKIAlyd2xvY2tfaW5pdCgmR2xvYmFsU01CU2VzbG9jayk7CiAJcndsb2NrX2luaXQoJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmR2xvYmFsTWlkX0xvY2spOworCXNwaW5fbG9ja19pbml0KCZjaWZzX29wbG9ja19sb2NrKTsKIAogCWlmIChjaWZzX21heF9wZW5kaW5nIDwgMikgewogCQljaWZzX21heF9wZW5kaW5nID0gMjsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmggYi9mcy9jaWZzL2NpZnNmcy5oCmluZGV4IDZjMTcwOTQuLjA5NDMyNWUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmgKKysrIGIvZnMvY2lmcy9jaWZzZnMuaApAQCAtMTEzLDUgKzExMyw1IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGNpZnNfZXhwb3J0X29wczsKICNlbmRpZiAvKiBFWFBFUklNRU5UQUwgKi8KIAotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS42MCIKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNjEiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggNjA4NGQ2My4uNmNmYzgxYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMzUxLDExICszNTEsMjQgQEAKIAlib29sIGNsb3NlUGVuZDoxOwkvKiBmaWxlIGlzIG1hcmtlZCB0byBjbG9zZSAqLwogCWJvb2wgaW52YWxpZEhhbmRsZToxOwkvKiBmaWxlIGNsb3NlZCB2aWEgc2Vzc2lvbiBhYmVuZCAqLwogCWJvb2wgbWVzc2FnZU1vZGU6MTsJLyogZm9yIHBpcGVzOiBtZXNzYWdlIHZzIGJ5dGUgbW9kZSAqLwotCWF0b21pY190IHdydFBlbmRpbmc7ICAgLyogaGFuZGxlIGluIHVzZSAtIGRlZmVyIGNsb3NlICovCisJYXRvbWljX3QgY291bnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KIAlzdHJ1Y3QgbXV0ZXggZmhfbXV0ZXg7IC8qIHByZXZlbnRzIHJlb3BlbiByYWNlIGFmdGVyIGRlYWQgc2VzKi8KIAlzdHJ1Y3QgY2lmc19zZWFyY2hfaW5mbyBzcmNoX2luZjsKIH07CiAKKy8qIFRha2UgYSByZWZlcmVuY2Ugb24gdGhlIGZpbGUgcHJpdmF0ZSBkYXRhICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc0ZpbGVJbmZvX2dldChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjaWZzX2ZpbGUpCit7CisJYXRvbWljX2luYygmY2lmc19maWxlLT5jb3VudCk7Cit9CisKKy8qIFJlbGVhc2UgYSByZWZlcmVuY2Ugb24gdGhlIGZpbGUgcHJpdmF0ZSBkYXRhICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2lmc0ZpbGVJbmZvX3B1dChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjaWZzX2ZpbGUpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNpZnNfZmlsZS0+Y291bnQpKQorCQlrZnJlZShjaWZzX2ZpbGUpOworfQorCiAvKgogICogT25lIG9mIHRoZXNlIGZvciBlYWNoIGZpbGUgaW5vZGUKICAqLwpAQCAtNjU2LDcgKzY2OSwxMSBAQAogICovCiBHTE9CQUxfRVhURVJOIHJ3bG9ja190IEdsb2JhbFNNQlNlc2xvY2s7CiAKLUdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBHbG9iYWxPcGxvY2tfUTsKKy8qIEdsb2JhbCBsaXN0IG9mIG9wbG9ja3MgKi8KK0dMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBjaWZzX29wbG9ja19saXN0OworCisvKiBQcm90ZWN0cyB0aGUgY2lmc19vcGxvY2tfbGlzdCAqLworR0xPQkFMX0VYVEVSTiBzcGlubG9ja190IGNpZnNfb3Bsb2NrX2xvY2s7CiAKIC8qIE91dHN0YW5kaW5nIGRpciBub3RpZnkgcmVxdWVzdHMgKi8KIEdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBHbG9iYWxEbm90aWZ5UmVxTGlzdDsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggMTg2NmJjMi4uMzAxZTMwNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTEwMCw2ICsxMDAsMTI4IEBACiAJICAgdG8gdGhpcyB0Y29uICovCiB9CiAKKy8qIHJlY29ubmVjdCB0aGUgc29ja2V0LCB0Y29uLCBhbmQgc21iIHNlc3Npb24gaWYgbmVlZGVkICovCitzdGF0aWMgaW50CitjaWZzX3JlY29ubmVjdF90Y29uKHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sIGludCBzbWJfY29tbWFuZCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzOworCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlcjsKKwlzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2U7CisKKwkvKgorCSAqIFNNQnMgTmVnUHJvdCwgU2Vzc1NldHVwLCB1TG9nb2ZmIGRvIG5vdCBoYXZlIHRjb24geWV0IHNvIGNoZWNrIGZvcgorCSAqIHRjcCBhbmQgc21iIHNlc3Npb24gc3RhdHVzIGRvbmUgZGlmZmVyZW50bHkgZm9yIHRob3NlIHRocmVlIC0gaW4gdGhlCisJICogY2FsbGluZyByb3V0aW5lCisJICovCisJaWYgKCF0Y29uKQorCQlyZXR1cm4gMDsKKworCXNlcyA9IHRjb24tPnNlczsKKwlzZXJ2ZXIgPSBzZXMtPnNlcnZlcjsKKworCS8qCisJICogb25seSB0cmVlIGRpc2Nvbm5lY3QsIG9wZW4sIGFuZCB3cml0ZSwgKGFuZCB1bG9nb2ZmIHdoaWNoIGRvZXMgbm90CisJICogaGF2ZSB0Y29uKSBhcmUgYWxsb3dlZCBhcyB3ZSBzdGFydCBmb3JjZSB1bW91bnQKKwkgKi8KKwlpZiAodGNvbi0+dGlkU3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCWlmIChzbWJfY29tbWFuZCAhPSBTTUJfQ09NX1dSSVRFX0FORFggJiYKKwkJICAgIHNtYl9jb21tYW5kICE9IFNNQl9DT01fT1BFTl9BTkRYICYmCisJCSAgICBzbWJfY29tbWFuZCAhPSBTTUJfQ09NX1RSRUVfRElTQ09OTkVDVCkgeworCQkJY0ZZSSgxLCAoImNhbiBub3Qgc2VuZCBjbWQgJWQgd2hpbGUgdW1vdW50aW5nIiwKKwkJCQlzbWJfY29tbWFuZCkpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisKKwlpZiAoc2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpCisJCXJldHVybiAtRUlPOworCisJLyoKKwkgKiBHaXZlIGRlbXVsdGlwbGV4IHRocmVhZCB1cCB0byAxMCBzZWNvbmRzIHRvIHJlY29ubmVjdCwgc2hvdWxkIGJlCisJICogZ3JlYXRlciB0aGFuIGNpZnMgc29ja2V0IHRpbWVvdXQgd2hpY2ggaXMgNyBzZWNvbmRzCisJICovCisJd2hpbGUgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHNlcnZlci0+cmVzcG9uc2VfcSwKKwkJCShzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzR29vZCksIDEwICogSFopOworCisJCS8qIGlzIFRDUCBzZXNzaW9uIGlzIHJlZXN0YWJsaXNoZWQgbm93ID8qLworCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc05lZWRSZWNvbm5lY3QpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBvbiAic29mdCIgbW91bnRzIHdlIHdhaXQgb25jZS4gSGFyZCBtb3VudHMga2VlcAorCQkgKiByZXRyeWluZyB1bnRpbCBwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIgY29tZXMKKwkJICogYmFjayBvbi1saW5lCisJCSAqLworCQlpZiAoIXRjb24tPnJldHJ5IHx8IHNlcy0+c3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCQljRllJKDEsICgiZ2F2ZSB1cCB3YWl0aW5nIG9uIHJlY29ubmVjdCBpbiBzbWJfaW5pdCIpKTsKKwkJCXJldHVybiAtRUhPU1RET1dOOworCQl9CisJfQorCisJaWYgKCFzZXMtPm5lZWRfcmVjb25uZWN0ICYmICF0Y29uLT5uZWVkX3JlY29ubmVjdCkKKwkJcmV0dXJuIDA7CisKKwlubHNfY29kZXBhZ2UgPSBsb2FkX25sc19kZWZhdWx0KCk7CisKKwkvKgorCSAqIG5lZWQgdG8gcHJldmVudCBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0byBzaW11bHRhbmVvdXNseQorCSAqIHJlY29ubmVjdCB0aGUgc2FtZSBTTUIgc2Vzc2lvbgorCSAqLworCWRvd24oJnNlcy0+c2VzU2VtKTsKKwlpZiAoc2VzLT5uZWVkX3JlY29ubmVjdCkKKwkJcmMgPSBjaWZzX3NldHVwX3Nlc3Npb24oMCwgc2VzLCBubHNfY29kZXBhZ2UpOworCisJLyogZG8gd2UgbmVlZCB0byByZWNvbm5lY3QgdGNvbj8gKi8KKwlpZiAocmMgfHwgIXRjb24tPm5lZWRfcmVjb25uZWN0KSB7CisJCXVwKCZzZXMtPnNlc1NlbSk7CisJCWdvdG8gb3V0OworCX0KKworCW1hcmtfb3Blbl9maWxlc19pbnZhbGlkKHRjb24pOworCXJjID0gQ0lGU1RDb24oMCwgc2VzLCB0Y29uLT50cmVlTmFtZSwgdGNvbiwgbmxzX2NvZGVwYWdlKTsKKwl1cCgmc2VzLT5zZXNTZW0pOworCWNGWUkoMSwgKCJyZWNvbm5lY3QgdGNvbiByYyA9ICVkIiwgcmMpKTsKKworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIEZJWE1FOiBjaGVjayBpZiB3c2l6ZSBuZWVkcyB1cGRhdGVkIGR1ZSB0byBuZWdvdGlhdGVkIHNtYiBidWZmZXIKKwkgKiAJICBzaXplIHNocmlua2luZworCSAqLworCWF0b21pY19pbmMoJnRjb25JbmZvUmVjb25uZWN0Q291bnQpOworCisJLyogdGVsbCBzZXJ2ZXIgVW5peCBjYXBzIHdlIHN1cHBvcnQgKi8KKwlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkKKwkJcmVzZXRfY2lmc191bml4X2NhcHMoMCwgdGNvbiwgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIFJlbW92ZWQgY2FsbCB0byByZW9wZW4gb3BlbiBmaWxlcyBoZXJlLiBJdCBpcyBzYWZlciAoYW5kIGZhc3RlcikgdG8KKwkgKiByZW9wZW4gZmlsZXMgb25lIGF0IGEgdGltZSBhcyBuZWVkZWQgaW4gcmVhZCBhbmQgd3JpdGUuCisJICoKKwkgKiBGSVhNRTogd2hhdCBhYm91dCBmaWxlIGxvY2tzPyBkb24ndCB3ZSBuZWVkIHRvIHJlY2xhaW0gdGhlbSBBU0FQPworCSAqLworCitvdXQ6CisJLyoKKwkgKiBDaGVjayBpZiBoYW5kbGUgYmFzZWQgb3BlcmF0aW9uIHNvIHdlIGtub3cgd2hldGhlciB3ZSBjYW4gY29udGludWUKKwkgKiBvciBub3Qgd2l0aG91dCByZXR1cm5pbmcgdG8gY2FsbGVyIHRvIHJlc2V0IGZpbGUgaGFuZGxlCisJICovCisJc3dpdGNoIChzbWJfY29tbWFuZCkgeworCWNhc2UgU01CX0NPTV9SRUFEX0FORFg6CisJY2FzZSBTTUJfQ09NX1dSSVRFX0FORFg6CisJY2FzZSBTTUJfQ09NX0NMT1NFOgorCWNhc2UgU01CX0NPTV9GSU5EX0NMT1NFMjoKKwljYXNlIFNNQl9DT01fTE9DS0lOR19BTkRYOgorCQlyYyA9IC1FQUdBSU47CisJfQorCisJdW5sb2FkX25scyhubHNfY29kZXBhZ2UpOworCXJldHVybiByYzsKK30KKwogLyogQWxsb2NhdGUgYW5kIHJldHVybiBwb2ludGVyIHRvIGFuIFNNQiByZXF1ZXN0IGJ1ZmZlciwgYW5kIHNldCBiYXNpYwogICAgU01CIGluZm9ybWF0aW9uIGluIHRoZSBTTUIgaGVhZGVyLiAgSWYgdGhlIHJldHVybiBjb2RlIGlzIHplcm8sIHRoaXMKICAgIGZ1bmN0aW9uIG11c3QgaGF2ZSBmaWxsZWQgaW4gcmVxdWVzdF9idWYgcG9pbnRlciAqLwpAQCAtMTA5LDEwMSArMjMxLDcgQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JLyogU01CcyBOZWdQcm90LCBTZXNzU2V0dXAsIHVMb2dvZmYgZG8gbm90IGhhdmUgdGNvbiB5ZXQgc28KLQkgICBjaGVjayBmb3IgdGNwIGFuZCBzbWIgc2Vzc2lvbiBzdGF0dXMgZG9uZSBkaWZmZXJlbnRseQotCSAgIGZvciB0aG9zZSB0aHJlZSAtIGluIHRoZSBjYWxsaW5nIHJvdXRpbmUgKi8KLQlpZiAodGNvbikgewotCQlpZiAodGNvbi0+dGlkU3RhdHVzID09IENpZnNFeGl0aW5nKSB7Ci0JCQkvKiBvbmx5IHRyZWUgZGlzY29ubmVjdCwgb3BlbiwgYW5kIHdyaXRlLAotCQkJKGFuZCB1bG9nb2ZmIHdoaWNoIGRvZXMgbm90IGhhdmUgdGNvbikKLQkJCWFyZSBhbGxvd2VkIGFzIHdlIHN0YXJ0IGZvcmNlIHVtb3VudCAqLwotCQkJaWYgKChzbWJfY29tbWFuZCAhPSBTTUJfQ09NX1dSSVRFX0FORFgpICYmCi0JCQkgICAoc21iX2NvbW1hbmQgIT0gU01CX0NPTV9PUEVOX0FORFgpICYmCi0JCQkgICAoc21iX2NvbW1hbmQgIT0gU01CX0NPTV9UUkVFX0RJU0NPTk5FQ1QpKSB7Ci0JCQkJY0ZZSSgxLCAoImNhbiBub3Qgc2VuZCBjbWQgJWQgd2hpbGUgdW1vdW50aW5nIiwKLQkJCQkJc21iX2NvbW1hbmQpKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCX0KLQkJfQotCQlpZiAoKHRjb24tPnNlcykgJiYgKHRjb24tPnNlcy0+c3RhdHVzICE9IENpZnNFeGl0aW5nKSAmJgotCQkJCSAgKHRjb24tPnNlcy0+c2VydmVyKSkgewotCQkJc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlOwotCQkJCS8qIEdpdmUgRGVtdWx0aXBsZXggdGhyZWFkIHVwIHRvIDEwIHNlY29uZHMgdG8KLQkJCQkgICByZWNvbm5lY3QsIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gY2lmcyBzb2NrZXQKLQkJCQkgICB0aW1lb3V0IHdoaWNoIGlzIDcgc2Vjb25kcyAqLwotCQkJd2hpbGUgKHRjb24tPnNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0KLQkJCQkJCQkgQ2lmc05lZWRSZWNvbm5lY3QpIHsKLQkJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh0Y29uLT5zZXMtPnNlcnZlci0+cmVzcG9uc2VfcSwKLQkJCQkJKHRjb24tPnNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0KLQkJCQkJCQlDaWZzR29vZCksIDEwICogSFopOwotCQkJCWlmICh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09Ci0JCQkJCQkJQ2lmc05lZWRSZWNvbm5lY3QpIHsKLQkJCQkJLyogb24gInNvZnQiIG1vdW50cyB3ZSB3YWl0IG9uY2UgKi8KLQkJCQkJaWYgKCF0Y29uLT5yZXRyeSB8fAotCQkJCQkgICAodGNvbi0+c2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpKSB7Ci0JCQkJCQljRllJKDEsICgiZ2F2ZSB1cCB3YWl0aW5nIG9uICIKLQkJCQkJCSAgICAgICJyZWNvbm5lY3QgaW4gc21iX2luaXQiKSk7Ci0JCQkJCQlyZXR1cm4gLUVIT1NURE9XTjsKLQkJCQkJfSAvKiBlbHNlICJoYXJkIiBtb3VudCAtIGtlZXAgcmV0cnlpbmcKLQkJCQkJICAgICB1bnRpbCBwcm9jZXNzIGlzIGtpbGxlZCBvciBzZXJ2ZXIKLQkJCQkJICAgICBjb21lcyBiYWNrIG9uLWxpbmUgKi8KLQkJCQl9IGVsc2UgLyogVENQIHNlc3Npb24gaXMgcmVlc3RhYmxpc2hlZCBub3cgKi8KLQkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCW5sc19jb2RlcGFnZSA9IGxvYWRfbmxzX2RlZmF1bHQoKTsKLQkJLyogbmVlZCB0byBwcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgdHJ5aW5nIHRvCi0JCXNpbXVsdGFuZW91c2x5IHJlY29ubmVjdCB0aGUgc2FtZSBTTUIgc2Vzc2lvbiAqLwotCQkJZG93bigmdGNvbi0+c2VzLT5zZXNTZW0pOwotCQkJaWYgKHRjb24tPnNlcy0+bmVlZF9yZWNvbm5lY3QpCi0JCQkJcmMgPSBjaWZzX3NldHVwX3Nlc3Npb24oMCwgdGNvbi0+c2VzLAotCQkJCQkJCW5sc19jb2RlcGFnZSk7Ci0JCQlpZiAoIXJjICYmICh0Y29uLT5uZWVkX3JlY29ubmVjdCkpIHsKLQkJCQltYXJrX29wZW5fZmlsZXNfaW52YWxpZCh0Y29uKTsKLQkJCQlyYyA9IENJRlNUQ29uKDAsIHRjb24tPnNlcywgdGNvbi0+dHJlZU5hbWUsCi0JCQkJCSAgICAgIHRjb24sIG5sc19jb2RlcGFnZSk7Ci0JCQkJdXAoJnRjb24tPnNlcy0+c2VzU2VtKTsKLQkJCQkvKiBCQiBGSVhNRSBhZGQgY29kZSB0byBjaGVjayBpZiB3c2l6ZSBuZWVkcwotCQkJCSAgIHVwZGF0ZSBkdWUgdG8gbmVnb3RpYXRlZCBzbWIgYnVmZmVyIHNpemUKLQkJCQkgICBzaHJpbmtpbmcgKi8KLQkJCQlpZiAocmMgPT0gMCkgewotCQkJCQlhdG9taWNfaW5jKCZ0Y29uSW5mb1JlY29ubmVjdENvdW50KTsKLQkJCQkJLyogdGVsbCBzZXJ2ZXIgVW5peCBjYXBzIHdlIHN1cHBvcnQgKi8KLQkJCQkJaWYgKHRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpCi0JCQkJCQlyZXNldF9jaWZzX3VuaXhfY2FwcygKLQkJCQkJCTAgLyogbm8geGlkICovLAotCQkJCQkJdGNvbiwKLQkJCQkJCU5VTEwgLyogd2UgZG8gbm90IGtub3cgc2IgKi8sCi0JCQkJCQlOVUxMIC8qIG5vIHZvbCBpbmZvICovKTsKLQkJCQl9Ci0KLQkJCQljRllJKDEsICgicmVjb25uZWN0IHRjb24gcmMgPSAlZCIsIHJjKSk7Ci0JCQkJLyogUmVtb3ZlZCBjYWxsIHRvIHJlb3BlbiBvcGVuIGZpbGVzIGhlcmUuCi0JCQkJICAgSXQgaXMgc2FmZXIgKGFuZCBmYXN0ZXIpIHRvIHJlb3BlbiBmaWxlcwotCQkJCSAgIG9uZSBhdCBhIHRpbWUgYXMgbmVlZGVkIGluIHJlYWQgYW5kIHdyaXRlICovCi0KLQkJCQkvKiBDaGVjayBpZiBoYW5kbGUgYmFzZWQgb3BlcmF0aW9uIHNvIHdlCi0JCQkJICAga25vdyB3aGV0aGVyIHdlIGNhbiBjb250aW51ZSBvciBub3Qgd2l0aG91dAotCQkJCSAgIHJldHVybmluZyB0byBjYWxsZXIgdG8gcmVzZXQgZmlsZSBoYW5kbGUgKi8KLQkJCQlzd2l0Y2ggKHNtYl9jb21tYW5kKSB7Ci0JCQkJCWNhc2UgU01CX0NPTV9SRUFEX0FORFg6Ci0JCQkJCWNhc2UgU01CX0NPTV9XUklURV9BTkRYOgotCQkJCQljYXNlIFNNQl9DT01fQ0xPU0U6Ci0JCQkJCWNhc2UgU01CX0NPTV9GSU5EX0NMT1NFMjoKLQkJCQkJY2FzZSBTTUJfQ09NX0xPQ0tJTkdfQU5EWDogewotCQkJCQkJdW5sb2FkX25scyhubHNfY29kZXBhZ2UpOwotCQkJCQkJcmV0dXJuIC1FQUdBSU47Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXVwKCZ0Y29uLT5zZXMtPnNlc1NlbSk7Ci0JCQl9Ci0JCQl1bmxvYWRfbmxzKG5sc19jb2RlcGFnZSk7Ci0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQorCXJjID0gY2lmc19yZWNvbm5lY3RfdGNvbih0Y29uLCBzbWJfY29tbWFuZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTI1NiwxMDEgKzI4NCw3IEBACiB7CiAJaW50IHJjID0gMDsKIAotCS8qIFNNQnMgTmVnUHJvdCwgU2Vzc1NldHVwLCB1TG9nb2ZmIGRvIG5vdCBoYXZlIHRjb24geWV0IHNvCi0JICAgY2hlY2sgZm9yIHRjcCBhbmQgc21iIHNlc3Npb24gc3RhdHVzIGRvbmUgZGlmZmVyZW50bHkKLQkgICBmb3IgdGhvc2UgdGhyZWUgLSBpbiB0aGUgY2FsbGluZyByb3V0aW5lICovCi0JaWYgKHRjb24pIHsKLQkJaWYgKHRjb24tPnRpZFN0YXR1cyA9PSBDaWZzRXhpdGluZykgewotCQkJLyogb25seSB0cmVlIGRpc2Nvbm5lY3QsIG9wZW4sIGFuZCB3cml0ZSwKLQkJCSAgKGFuZCB1bG9nb2ZmIHdoaWNoIGRvZXMgbm90IGhhdmUgdGNvbikKLQkJCSAgYXJlIGFsbG93ZWQgYXMgd2Ugc3RhcnQgZm9yY2UgdW1vdW50ICovCi0JCQlpZiAoKHNtYl9jb21tYW5kICE9IFNNQl9DT01fV1JJVEVfQU5EWCkgJiYKLQkJCSAgIChzbWJfY29tbWFuZCAhPSBTTUJfQ09NX09QRU5fQU5EWCkgJiYKLQkJCSAgIChzbWJfY29tbWFuZCAhPSBTTUJfQ09NX1RSRUVfRElTQ09OTkVDVCkpIHsKLQkJCQljRllJKDEsICgiY2FuIG5vdCBzZW5kIGNtZCAlZCB3aGlsZSB1bW91bnRpbmciLAotCQkJCQlzbWJfY29tbWFuZCkpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCQl9Ci0KLQkJaWYgKCh0Y29uLT5zZXMpICYmICh0Y29uLT5zZXMtPnN0YXR1cyAhPSBDaWZzRXhpdGluZykgJiYKLQkJCQkgICh0Y29uLT5zZXMtPnNlcnZlcikpIHsKLQkJCXN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZTsKLQkJCQkvKiBHaXZlIERlbXVsdGlwbGV4IHRocmVhZCB1cCB0byAxMCBzZWNvbmRzIHRvCi0JCQkJICAgcmVjb25uZWN0LCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGNpZnMgc29ja2V0Ci0JCQkJICAgdGltZW91dCB3aGljaCBpcyA3IHNlY29uZHMgKi8KLQkJCXdoaWxlICh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09Ci0JCQkJCQkJQ2lmc05lZWRSZWNvbm5lY3QpIHsKLQkJCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh0Y29uLT5zZXMtPnNlcnZlci0+cmVzcG9uc2VfcSwKLQkJCQkJKHRjb24tPnNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0KLQkJCQkJCQlDaWZzR29vZCksIDEwICogSFopOwotCQkJCWlmICh0Y29uLT5zZXMtPnNlcnZlci0+dGNwU3RhdHVzID09Ci0JCQkJCQlDaWZzTmVlZFJlY29ubmVjdCkgewotCQkJCQkvKiBvbiAic29mdCIgbW91bnRzIHdlIHdhaXQgb25jZSAqLwotCQkJCQlpZiAoIXRjb24tPnJldHJ5IHx8Ci0JCQkJCSAgICh0Y29uLT5zZXMtPnN0YXR1cyA9PSBDaWZzRXhpdGluZykpIHsKLQkJCQkJCWNGWUkoMSwgKCJnYXZlIHVwIHdhaXRpbmcgb24gIgotCQkJCQkJICAgICAgInJlY29ubmVjdCBpbiBzbWJfaW5pdCIpKTsKLQkJCQkJCXJldHVybiAtRUhPU1RET1dOOwotCQkJCQl9IC8qIGVsc2UgImhhcmQiIG1vdW50IC0ga2VlcCByZXRyeWluZwotCQkJCQkgICAgIHVudGlsIHByb2Nlc3MgaXMga2lsbGVkIG9yIHNlcnZlcgotCQkJCQkgICAgIGNvbWVzIG9uLWxpbmUgKi8KLQkJCQl9IGVsc2UgLyogVENQIHNlc3Npb24gaXMgcmVlc3RhYmxpc2hlZCBub3cgKi8KLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlubHNfY29kZXBhZ2UgPSBsb2FkX25sc19kZWZhdWx0KCk7Ci0JCS8qIG5lZWQgdG8gcHJldmVudCBtdWx0aXBsZSB0aHJlYWRzIHRyeWluZyB0bwotCQlzaW11bHRhbmVvdXNseSByZWNvbm5lY3QgdGhlIHNhbWUgU01CIHNlc3Npb24gKi8KLQkJCWRvd24oJnRjb24tPnNlcy0+c2VzU2VtKTsKLQkJCWlmICh0Y29uLT5zZXMtPm5lZWRfcmVjb25uZWN0KQotCQkJCXJjID0gY2lmc19zZXR1cF9zZXNzaW9uKDAsIHRjb24tPnNlcywKLQkJCQkJCQlubHNfY29kZXBhZ2UpOwotCQkJaWYgKCFyYyAmJiAodGNvbi0+bmVlZF9yZWNvbm5lY3QpKSB7Ci0JCQkJbWFya19vcGVuX2ZpbGVzX2ludmFsaWQodGNvbik7Ci0JCQkJcmMgPSBDSUZTVENvbigwLCB0Y29uLT5zZXMsIHRjb24tPnRyZWVOYW1lLAotCQkJCQkgICAgICB0Y29uLCBubHNfY29kZXBhZ2UpOwotCQkJCXVwKCZ0Y29uLT5zZXMtPnNlc1NlbSk7Ci0JCQkJLyogQkIgRklYTUUgYWRkIGNvZGUgdG8gY2hlY2sgaWYgd3NpemUgbmVlZHMKLQkJCQl1cGRhdGUgZHVlIHRvIG5lZ290aWF0ZWQgc21iIGJ1ZmZlciBzaXplCi0JCQkJc2hyaW5raW5nICovCi0JCQkJaWYgKHJjID09IDApIHsKLQkJCQkJYXRvbWljX2luYygmdGNvbkluZm9SZWNvbm5lY3RDb3VudCk7Ci0JCQkJCS8qIHRlbGwgc2VydmVyIFVuaXggY2FwcyB3ZSBzdXBwb3J0ICovCi0JCQkJCWlmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKQotCQkJCQkJcmVzZXRfY2lmc191bml4X2NhcHMoCi0JCQkJCQkwIC8qIG5vIHhpZCAqLywKLQkJCQkJCXRjb24sCi0JCQkJCQlOVUxMIC8qIGRvIG5vdCBrbm93IHNiICovLAotCQkJCQkJTlVMTCAvKiBubyB2b2wgaW5mbyAqLyk7Ci0JCQkJfQotCi0JCQkJY0ZZSSgxLCAoInJlY29ubmVjdCB0Y29uIHJjID0gJWQiLCByYykpOwotCQkJCS8qIFJlbW92ZWQgY2FsbCB0byByZW9wZW4gb3BlbiBmaWxlcyBoZXJlLgotCQkJCSAgIEl0IGlzIHNhZmVyIChhbmQgZmFzdGVyKSB0byByZW9wZW4gZmlsZXMKLQkJCQkgICBvbmUgYXQgYSB0aW1lIGFzIG5lZWRlZCBpbiByZWFkIGFuZCB3cml0ZSAqLwotCi0JCQkJLyogQ2hlY2sgaWYgaGFuZGxlIGJhc2VkIG9wZXJhdGlvbiBzbyB3ZQotCQkJCSAgIGtub3cgd2hldGhlciB3ZSBjYW4gY29udGludWUgb3Igbm90IHdpdGhvdXQKLQkJCQkgICByZXR1cm5pbmcgdG8gY2FsbGVyIHRvIHJlc2V0IGZpbGUgaGFuZGxlICovCi0JCQkJc3dpdGNoIChzbWJfY29tbWFuZCkgewotCQkJCQljYXNlIFNNQl9DT01fUkVBRF9BTkRYOgotCQkJCQljYXNlIFNNQl9DT01fV1JJVEVfQU5EWDoKLQkJCQkJY2FzZSBTTUJfQ09NX0NMT1NFOgotCQkJCQljYXNlIFNNQl9DT01fRklORF9DTE9TRTI6Ci0JCQkJCWNhc2UgU01CX0NPTV9MT0NLSU5HX0FORFg6IHsKLQkJCQkJCXVubG9hZF9ubHMobmxzX2NvZGVwYWdlKTsKLQkJCQkJCXJldHVybiAtRUFHQUlOOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQl1cCgmdGNvbi0+c2VzLT5zZXNTZW0pOwotCQkJfQotCQkJdW5sb2FkX25scyhubHNfY29kZXBhZ2UpOwotCi0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KKwlyYyA9IGNpZnNfcmVjb25uZWN0X3Rjb24odGNvbiwgc21iX2NvbW1hbmQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC0zOTYxLDYgKzM4OTUsMTAgQEAKIAkJaWYgKGlzX3VuaWNvZGUpIHsKIAkJCV9fbGUxNiAqdG1wID0ga21hbGxvYyhzdHJsZW4oc2VhcmNoTmFtZSkqMiArIDIsCiAJCQkJCQlHRlBfS0VSTkVMKTsKKwkJCWlmICh0bXAgPT0gTlVMTCkgeworCQkJCXJjID0gLUVOT01FTTsKKwkJCQlnb3RvIHBhcnNlX0RGU19yZWZlcnJhbHNfZXhpdDsKKwkJCX0KIAkJCWNpZnNDb252ZXJ0VG9VQ1MoKF9fbGUxNiAqKSB0bXAsIHNlYXJjaE5hbWUsCiAJCQkJCVBBVEhfTUFYLCBubHNfY29kZXBhZ2UsIHJlbWFwKTsKIAkJCW5vZGUtPnBhdGhfY29uc3VtZWQgPSBjaWZzX3VjczJfYnl0ZXModG1wLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAxZjMzNDVkLi5kNDk2ODI0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMTM3Nyw3ICsxMzc3LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKgotY2lmc19maW5kX3RjcF9zZXNzaW9uKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyKQorY2lmc19maW5kX3RjcF9zZXNzaW9uKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLCB1bnNpZ25lZCBzaG9ydCBpbnQgcG9ydCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyOwpAQCAtMTM5NywxNiArMTM5NywzNyBAQAogCQlpZiAoc2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05ldykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChhZGRyLT5zc19mYW1pbHkgPT0gQUZfSU5FVCAmJgotCQkgICAgKGFkZHI0LT5zaW5fYWRkci5zX2FkZHIgIT0KLQkJICAgICBzZXJ2ZXItPmFkZHIuc29ja0FkZHIuc2luX2FkZHIuc19hZGRyKSkKLQkJCWNvbnRpbnVlOwotCQllbHNlIGlmIChhZGRyLT5zc19mYW1pbHkgPT0gQUZfSU5FVDYgJiYKLQkJCSAoIWlwdjZfYWRkcl9lcXVhbCgmc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X2FkZHIsCi0JCQkJCSAgICZhZGRyNi0+c2luNl9hZGRyKSB8fAotCQkJICBzZXJ2ZXItPmFkZHIuc29ja0FkZHI2LnNpbjZfc2NvcGVfaWQgIT0KLQkJCQkJICAgYWRkcjYtPnNpbjZfc2NvcGVfaWQpKQotCQkJY29udGludWU7CisJCXN3aXRjaCAoYWRkci0+c3NfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJCWlmIChhZGRyNC0+c2luX2FkZHIuc19hZGRyID09CisJCQkgICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyLnNfYWRkcikgeworCQkJCWFkZHI0LT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCQkJCS8qIHVzZXIgb3ZlcnJvZGUgZGVmYXVsdCBwb3J0PyAqLworCQkJCWlmIChhZGRyNC0+c2luX3BvcnQpIHsKKwkJCQkJaWYgKGFkZHI0LT5zaW5fcG9ydCAhPQorCQkJCQkgICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9wb3J0KQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJY29udGludWU7CisKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmFkZHI2LT5zaW42X2FkZHIsCisJCQkgICAgJnNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9hZGRyKSAmJgorCQkJICAgIChhZGRyNi0+c2luNl9zY29wZV9pZCA9PQorCQkJICAgIHNlcnZlci0+YWRkci5zb2NrQWRkcjYuc2luNl9zY29wZV9pZCkpIHsKKwkJCQlhZGRyNi0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CisJCQkJLyogdXNlciBvdmVycm9kZSBkZWZhdWx0IHBvcnQ/ICovCisJCQkJaWYgKGFkZHI2LT5zaW42X3BvcnQpIHsKKwkJCQkJaWYgKGFkZHI2LT5zaW42X3BvcnQgIT0KKwkJCQkJICAgc2VydmVyLT5hZGRyLnNvY2tBZGRyNi5zaW42X3BvcnQpCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQljb250aW51ZTsKKwkJfQogCiAJCSsrc2VydmVyLT5zcnZfY291bnQ7CiAJCXdyaXRlX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwpAQCAtMTQ3NSw3ICsxNDk2LDcgQEAKIAl9CiAKIAkvKiBzZWUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgbWF0Y2hpbmcgdGNwX3NlcyAqLwotCXRjcF9zZXMgPSBjaWZzX2ZpbmRfdGNwX3Nlc3Npb24oJmFkZHIpOworCXRjcF9zZXMgPSBjaWZzX2ZpbmRfdGNwX3Nlc3Npb24oJmFkZHIsIHZvbHVtZV9pbmZvLT5wb3J0KTsKIAlpZiAodGNwX3NlcykKIAkJcmV0dXJuIHRjcF9zZXM7CiAKQEAgLTI2MzYsOSArMjY1Nyw5IEBACiAJCXJldHVybiAtRUlPOwogCiAJc21iX2J1ZmZlciA9IGNpZnNfYnVmX2dldCgpOwotCWlmIChzbWJfYnVmZmVyID09IE5VTEwpIHsKKwlpZiAoc21iX2J1ZmZlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKIAlzbWJfYnVmZmVyX3Jlc3BvbnNlID0gc21iX2J1ZmZlcjsKIAogCWhlYWRlcl9hc3NlbWJsZShzbWJfYnVmZmVyLCBTTUJfQ09NX1RSRUVfQ09OTkVDVF9BTkRYLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggNDMyNmZmZC4uYTY0MjRjZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAltdXRleF9pbml0KCZwQ2lmc0ZpbGUtPmZoX211dGV4KTsKIAltdXRleF9pbml0KCZwQ2lmc0ZpbGUtPmxvY2tfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZwQ2lmc0ZpbGUtPmxsaXN0KTsKLQlhdG9taWNfc2V0KCZwQ2lmc0ZpbGUtPndydFBlbmRpbmcsIDApOworCWF0b21pY19zZXQoJnBDaWZzRmlsZS0+Y291bnQsIDEpOwogCiAJLyogc2V0IHRoZSBmb2xsb3dpbmcgaW4gb3BlbiBub3cKIAkJCXBDaWZzRmlsZS0+cGZpbGUgPSBmaWxlOyAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBjMzRiN2Y4Li5mYTdiZWFjIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtNTMsMTEgKzUzLDkgQEAKIAlwcml2YXRlX2RhdGEtPnBJbm9kZSA9IGlub2RlOwogCXByaXZhdGVfZGF0YS0+aW52YWxpZEhhbmRsZSA9IGZhbHNlOwogCXByaXZhdGVfZGF0YS0+Y2xvc2VQZW5kID0gZmFsc2U7Ci0JLyogd2UgaGF2ZSB0byB0cmFjayBudW0gd3JpdGVycyB0byB0aGUgaW5vZGUsIHNpbmNlIHdyaXRlcGFnZXMKLQlkb2VzIG5vdCB0ZWxsIHVzIHdoaWNoIGhhbmRsZSB0aGUgd3JpdGUgaXMgZm9yIHNvIHRoZXJlIGNhbgotCWJlIGEgY2xvc2UgKG92ZXJsYXBwaW5nIHdpdGggd3JpdGUpIG9mIHRoZSBmaWxlaGFuZGxlIHRoYXQKLQljaWZzX3dyaXRlcGFnZXMgY2hvc2UgdG8gdXNlICovCi0JYXRvbWljX3NldCgmcHJpdmF0ZV9kYXRhLT53cnRQZW5kaW5nLCAwKTsKKwkvKiBJbml0aWFsaXplIHJlZmVyZW5jZSBjb3VudCB0byBvbmUuICBUaGUgcHJpdmF0ZSBkYXRhIGlzCisJZnJlZWQgb24gdGhlIHJlbGVhc2Ugb2YgdGhlIGxhc3QgcmVmZXJlbmNlICovCisJYXRvbWljX3NldCgmcHJpdmF0ZV9kYXRhLT5jb3VudCwgMSk7CiAKIAlyZXR1cm4gcHJpdmF0ZV9kYXRhOwogfQpAQCAtNjQzLDcgKzY0MSw3IEBACiAJCQlpZiAoIXBUY29uLT5uZWVkX3JlY29ubmVjdCkgewogCQkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQkJdGltZW91dCA9IDI7Ci0JCQkJd2hpbGUgKChhdG9taWNfcmVhZCgmcFNNQkZpbGUtPndydFBlbmRpbmcpICE9IDApCisJCQkJd2hpbGUgKChhdG9taWNfcmVhZCgmcFNNQkZpbGUtPmNvdW50KSAhPSAxKQogCQkJCQkmJiAodGltZW91dCA8PSAyMDQ4KSkgewogCQkJCQkvKiBHaXZlIHdyaXRlIGEgYmV0dGVyIGNoYW5jZSB0byBnZXQgdG8KIAkJCQkJc2VydmVyIGFoZWFkIG9mIHRoZSBjbG9zZS4gIFdlIGRvIG5vdApAQCAtNjU3LDggKzY1NSw2IEBACiAJCQkJCW1zbGVlcCh0aW1lb3V0KTsKIAkJCQkJdGltZW91dCAqPSA0OwogCQkJCX0KLQkJCQlpZiAoYXRvbWljX3JlYWQoJnBTTUJGaWxlLT53cnRQZW5kaW5nKSkKLQkJCQkJY0VSUk9SKDEsICgiY2xvc2Ugd2l0aCBwZW5kaW5nIHdyaXRlIikpOwogCQkJCWlmICghcFRjb24tPm5lZWRfcmVjb25uZWN0ICYmCiAJCQkJICAgICFwU01CRmlsZS0+aW52YWxpZEhhbmRsZSkKIAkJCQkJcmMgPSBDSUZTU01CQ2xvc2UoeGlkLCBwVGNvbiwKQEAgLTY4MSwyNCArNjc3LDcgQEAKIAkJbGlzdF9kZWwoJnBTTUJGaWxlLT5mbGlzdCk7CiAJCWxpc3RfZGVsKCZwU01CRmlsZS0+dGxpc3QpOwogCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCQl0aW1lb3V0ID0gMTA7Ci0JCS8qIFdlIHdhaXRlZCBhYm92ZSB0byBnaXZlIHRoZSBTTUJXcml0ZSBhIGNoYW5jZSB0byBpc3N1ZQotCQkgICBvbiB0aGUgd2lyZSAoc28gd2UgZG8gbm90IGdldCBTTUJXcml0ZSByZXR1cm5pbmcgRUJBREYKLQkJICAgaWYgd3JpdGVwYWdlcyBpcyByYWNpbmcgd2l0aCBjbG9zZS4gIE5vdGUgdGhhdCB3cml0ZXBhZ2VzCi0JCSAgIGRvZXMgbm90IHNwZWNpZnkgYSBmaWxlIGhhbmRsZSwgc28gaXQgaXMgcG9zc2libGUgZm9yIGEgZmlsZQotCQkgICB0byBiZSBvcGVuZWQgdHdpY2UsIGFuZCB0aGUgYXBwbGljYXRpb24gY2xvc2UgdGhlICJ3cm9uZyIKLQkJICAgZmlsZSBoYW5kbGUgLSBpbiB0aGVzZSBjYXNlcyB3ZSBkZWxheSBsb25nIGVub3VnaCB0byBhbGxvdwotCQkgICB0aGUgU01CV3JpdGUgdG8gZ2V0IG9uIHRoZSB3aXJlIGJlZm9yZSB0aGUgU01CIENsb3NlLgotCQkgICBXZSBhbGxvdyB0b3RhbCB3YWl0IGhlcmUgb3ZlciA0NSBzZWNvbmRzLCBtb3JlIHRoYW4KLQkJICAgb3Bsb2NrIGJyZWFrIHRpbWUsIGFuZCBtb3JlIHRoYW4gZW5vdWdoIHRvIGFsbG93IGFueSB3cml0ZQotCQkgICB0byBjb21wbGV0ZSBvbiB0aGUgc2VydmVyLCBvciB0byB0aW1lIG91dCBvbiB0aGUgY2xpZW50ICovCi0JCXdoaWxlICgoYXRvbWljX3JlYWQoJnBTTUJGaWxlLT53cnRQZW5kaW5nKSAhPSAwKQotCQkJCSYmICh0aW1lb3V0IDw9IDUwMDAwKSkgewotCQkJY0VSUk9SKDEsICgid3JpdGVzIHBlbmRpbmcsIGRlbGF5IGZyZWUgb2YgaGFuZGxlIikpOwotCQkJbXNsZWVwKHRpbWVvdXQpOwotCQkJdGltZW91dCAqPSA4OwotCQl9Ci0JCWtmcmVlKGZpbGUtPnByaXZhdGVfZGF0YSk7CisJCWNpZnNGaWxlSW5mb19wdXQoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAl9IGVsc2UKIAkJcmMgPSAtRUJBREY7CkBAIC0xMjM2LDcgKzEyMTUsNyBAQAogCQkJaWYgKCFvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUpIHsKIAkJCQkvKiBmb3VuZCBhIGdvb2QgZmlsZSAqLwogCQkJCS8qIGxvY2sgaXQgc28gaXQgd2lsbCBub3QgYmUgY2xvc2VkIG9uIHVzICovCi0JCQkJYXRvbWljX2luYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJCQljaWZzRmlsZUluZm9fZ2V0KG9wZW5fZmlsZSk7CiAJCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQkJCXJldHVybiBvcGVuX2ZpbGU7CiAJCQl9IC8qIGVsc2UgbWlnaHQgYXMgd2VsbCBjb250aW51ZSwgYW5kIGxvb2sgZm9yCkBAIC0xMjc2LDcgKzEyNTUsNyBAQAogCQlpZiAob3Blbl9maWxlLT5wZmlsZSAmJgogCQkgICAgKChvcGVuX2ZpbGUtPnBmaWxlLT5mX2ZsYWdzICYgT19SRFdSKSB8fAogCQkgICAgIChvcGVuX2ZpbGUtPnBmaWxlLT5mX2ZsYWdzICYgT19XUk9OTFkpKSkgewotCQkJYXRvbWljX2luYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJCWNpZnNGaWxlSW5mb19nZXQob3Blbl9maWxlKTsKIAogCQkJaWYgKCFvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUpIHsKIAkJCQkvKiBmb3VuZCBhIGdvb2Qgd3JpdGFibGUgZmlsZSAqLwpAQCAtMTI5Myw3ICsxMjcyLDcgQEAKIAkJCQllbHNlIHsgLyogc3RhcnQgb3ZlciBpbiBjYXNlIHRoaXMgd2FzIGRlbGV0ZWQgKi8KIAkJCQkgICAgICAgLyogc2luY2UgdGhlIGxpc3QgY291bGQgYmUgbW9kaWZpZWQgKi8KIAkJCQkJcmVhZF9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJCQkJYXRvbWljX2RlYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJCQkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCQkJCQlnb3RvIHJlZmluZF93cml0YWJsZTsKIAkJCQl9CiAJCQl9CkBAIC0xMzA5LDcgKzEyODgsNyBAQAogCQkJcmVhZF9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkJCS8qIGNhbiBub3QgdXNlIHRoaXMgaGFuZGxlLCBubyB3cml0ZQogCQkJICAgcGVuZGluZyBvbiB0aGlzIG9uZSBhZnRlciBhbGwgKi8KLQkJCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCQljaWZzRmlsZUluZm9fcHV0KG9wZW5fZmlsZSk7CiAKIAkJCWlmIChvcGVuX2ZpbGUtPmNsb3NlUGVuZCkgLyogbGlzdCBjb3VsZCBoYXZlIGNoYW5nZWQgKi8KIAkJCQlnb3RvIHJlZmluZF93cml0YWJsZTsKQEAgLTEzNzMsNyArMTM1Miw3IEBACiAJaWYgKG9wZW5fZmlsZSkgewogCQlieXRlc193cml0dGVuID0gY2lmc193cml0ZShvcGVuX2ZpbGUtPnBmaWxlLCB3cml0ZV9kYXRhLAogCQkJCQkgICB0by1mcm9tLCAmb2Zmc2V0KTsKLQkJYXRvbWljX2RlYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCQkvKiBEb2VzIG1tIG9yIHZmcyBhbHJlYWR5IHNldCB0aW1lcz8gKi8KIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CiAJCWlmICgoYnl0ZXNfd3JpdHRlbiA+IDApICYmIChvZmZzZXQpKQpAQCAtMTU2Miw3ICsxNTQxLDcgQEAKIAkJCQkJCSAgIGJ5dGVzX3RvX3dyaXRlLCBvZmZzZXQsCiAJCQkJCQkgICAmYnl0ZXNfd3JpdHRlbiwgaW92LCBuX2lvdiwKIAkJCQkJCSAgIGxvbmdfb3ApOwotCQkJCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCQkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCQkJCWNpZnNfdXBkYXRlX2VvZihjaWZzaSwgb2Zmc2V0LCBieXRlc193cml0dGVuKTsKIAogCQkJCWlmIChyYyB8fCBieXRlc193cml0dGVuIDwgYnl0ZXNfdG9fd3JpdGUpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCA4MmQ4MzgzLi4xZjA5Yzc2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC04MDAsNyArODAwLDcgQEAKIAlpZiAob3Blbl9maWxlID09IE5VTEwpCiAJCUNJRlNTTUJDbG9zZSh4aWQsIHBUY29uLCBuZXRmaWQpOwogCWVsc2UKLQkJYXRvbWljX2RlYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTE2MzUsNyArMTYzNSw3IEBACiAJCV9fdTMyIG5waWQgPSBvcGVuX2ZpbGUtPnBpZDsKIAkJcmMgPSBDSUZTU01CU2V0RmlsZVNpemUoeGlkLCBwVGNvbiwgYXR0cnMtPmlhX3NpemUsIG5maWQsCiAJCQkJCW5waWQsIGZhbHNlKTsKLQkJYXRvbWljX2RlYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJY2lmc0ZpbGVJbmZvX3B1dChvcGVuX2ZpbGUpOwogCQljRllJKDEsICgiU2V0RlNpemUgZm9yIGF0dHJzIHJjID0gJWQiLCByYykpOwogCQlpZiAoKHJjID09IC1FSU5WQUwpIHx8IChyYyA9PSAtRU9QTk9UU1VQUCkpIHsKIAkJCXVuc2lnbmVkIGludCBieXRlc193cml0dGVuOwpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIAkJdTE2IG5maWQgPSBvcGVuX2ZpbGUtPm5ldGZpZDsKIAkJdTMyIG5waWQgPSBvcGVuX2ZpbGUtPnBpZDsKIAkJcmMgPSBDSUZTU01CVW5peFNldEZpbGVJbmZvKHhpZCwgcFRjb24sIGFyZ3MsIG5maWQsIG5waWQpOwotCQlhdG9taWNfZGVjKCZvcGVuX2ZpbGUtPndydFBlbmRpbmcpOworCQljaWZzRmlsZUluZm9fcHV0KG9wZW5fZmlsZSk7CiAJfSBlbHNlIHsKIAkJcmMgPSBDSUZTU01CVW5peFNldFBhdGhJbmZvKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgYXJncywKIAkJCQkgICAgY2lmc19zYi0+bG9jYWxfbmxzLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy90cmFuc3BvcnQuYyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKaW5kZXggMGFkM2UyZC4uMWRhNGFiMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy90cmFuc3BvcnQuYworKysgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCkBAIC0xMTksMjAgKzExOSwxOSBAQAogCQl0ZW1wLT5waW5vZGUgPSBwaW5vZGU7CiAJCXRlbXAtPnRjb24gPSB0Y29uOwogCQl0ZW1wLT5uZXRmaWQgPSBmaWQ7Ci0JCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQlsaXN0X2FkZF90YWlsKCZ0ZW1wLT5xaGVhZCwgJkdsb2JhbE9wbG9ja19RKTsKLQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJc3Bpbl9sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmdGVtcC0+cWhlYWQsICZjaWZzX29wbG9ja19saXN0KTsKKwkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwogCX0KIAlyZXR1cm4gdGVtcDsKLQogfQogCiB2b2lkIERlbGV0ZU9wbG9ja1FFbnRyeShzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKm9wbG9ja0VudHJ5KQogewotCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7CiAgICAgLyogc2hvdWxkIHdlIGNoZWNrIGlmIGxpc3QgZW1wdHkgZmlyc3Q/ICovCiAJbGlzdF9kZWwoJm9wbG9ja0VudHJ5LT5xaGVhZCk7Ci0Jc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwlzcGluX3VubG9jaygmY2lmc19vcGxvY2tfbG9jayk7CiAJa21lbV9jYWNoZV9mcmVlKGNpZnNfb3Bsb2NrX2NhY2hlcCwgb3Bsb2NrRW50cnkpOwogfQogCkBAIC0xNDQsMTQgKzE0MywxNCBAQAogCWlmICh0Y29uID09IE5VTEwpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcCwgJkdsb2JhbE9wbG9ja19RLCBxaGVhZCkgeworCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wLCAmY2lmc19vcGxvY2tfbGlzdCwgcWhlYWQpIHsKIAkJaWYgKCh0ZW1wLT50Y29uKSAmJiAodGVtcC0+dGNvbiA9PSB0Y29uKSkgewogCQkJbGlzdF9kZWwoJnRlbXAtPnFoZWFkKTsKIAkJCWttZW1fY2FjaGVfZnJlZShjaWZzX29wbG9ja19jYWNoZXAsIHRlbXApOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9mcy9kbG0vbmV0bGluay5jIGIvZnMvZGxtL25ldGxpbmsuYwppbmRleCBjY2M5ZDYyLi41NWVhMzY5IDEwMDY0NAotLS0gYS9mcy9kbG0vbmV0bGluay5jCisrKyBiL2ZzL2RsbS9uZXRsaW5rLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJcmV0dXJuIHJ2OwogCX0KIAotCXJldHVybiBnZW5sbXNnX3VuaWNhc3Qoc2tiLCBsaXN0ZW5lcl9ubHBpZCk7CisJcmV0dXJuIGdlbmxtc2dfdW5pY2FzdCgmaW5pdF9uZXQsIHNrYiwgbGlzdGVuZXJfbmxwaWQpOwogfQogCiBzdGF0aWMgaW50IHVzZXJfY21kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggZTI3MTMwMy4uMWMxNjM4ZiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pbm9kZS5jCisrKyBiL2ZzL2V4dDIvaW5vZGUuYwpAQCAtNDgyLDcgKzQ4Miw3IEBACiAJCXVubG9ja19idWZmZXIoYmgpOwogCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOwogCQkvKiBXZSB1c2VkIHRvIHN5bmMgYmggaGVyZSBpZiBJU19TWU5DKGlub2RlKS4KLQkJICogQnV0IHdlIG5vdyByZWx5IHVwb24gZ2VuZXJpY19vc3luY19pbm9kZSgpCisJCSAqIEJ1dCB3ZSBub3cgcmVseSB1cG9uIGdlbmVyaWNfd3JpdGVfc3luYygpCiAJCSAqIGFuZCBiX2lub2RlX2J1ZmZlcnMuICBCdXQgbm90IGZvciBkaXJlY3Rvcmllcy4KIAkJICovCiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmIElTX0RJUlNZTkMoaW5vZGUpKQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9maWxlLmMgYi9mcy9leHQzL2ZpbGUuYwppbmRleCAyOTkyNTMyLi4zODhiYmRmIDEwMDY0NAotLS0gYS9mcy9leHQzL2ZpbGUuYworKysgYi9mcy9leHQzL2ZpbGUuYwpAQCAtNTEsNzEgKzUxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1leHQzX2ZpbGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlzc2l6ZV90IHJldDsKLQlpbnQgZXJyOwotCi0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Ci0KLQkvKgotCSAqIFNraXAgZmx1c2hpbmcgaWYgdGhlcmUgd2FzIGFuIGVycm9yLCBvciBpZiBub3RoaW5nIHdhcyB3cml0dGVuLgotCSAqLwotCWlmIChyZXQgPD0gMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qCi0JICogSWYgdGhlIGlub2RlIGlzIElTX1NZTkMsIG9yIGlzIE9fU1lOQyBhbmQgd2UgYXJlIGRvaW5nIGRhdGEKLQkgKiBqb3VybmFsbGluZyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgZm9yY2UgdGhlIHRyYW5zYWN0aW9uCi0JICogdG8gZGlzayB0byBrZWVwIGFsbCBtZXRhZGF0YSB1cHRvZGF0ZSBzeW5jaHJvbm91c2x5LgotCSAqLwotCWlmIChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB7Ci0JCS8qCi0JCSAqIElmIHdlIGFyZSBub24tZGF0YS1qb3VybmFsZWQsIHRoZW4gdGhlIGRpcnR5IGRhdGEgaGFzCi0JCSAqIGFscmVhZHkgYmVlbiBmbHVzaGVkIHRvIGJhY2tpbmcgc3RvcmUgYnkgZ2VuZXJpY19vc3luY19pbm9kZSwKLQkJICogYW5kIHRoZSBpbm9kZSBoYXMgYmVlbiBmbHVzaGVkIHRvbyBpZiB0aGVyZSBoYXZlIGJlZW4gYW55Ci0JCSAqIG1vZGlmaWNhdGlvbnMgb3RoZXIgdGhhbiBtZXJlIHRpbWVzdGFtcCB1cGRhdGVzLgotCQkgKgotCQkgKiBPcGVuIHF1ZXN0aW9uIC0tLSBkbyB3ZSBjYXJlIGFib3V0IGZsdXNoaW5nIHRpbWVzdGFtcHMgdG9vCi0JCSAqIGlmIHRoZSBpbm9kZSBpcyBJU19TWU5DPwotCQkgKi8KLQkJaWYgKCFleHQzX3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKQotCQkJcmV0dXJuIHJldDsKLQotCQlnb3RvIGZvcmNlX2NvbW1pdDsKLQl9Ci0KLQkvKgotCSAqIFNvIHdlIGtub3cgdGhhdCB0aGVyZSBoYXMgYmVlbiBubyBmb3JjZWQgZGF0YSBmbHVzaC4gIElmIHRoZSBpbm9kZQotCSAqIGlzIG1hcmtlZCBJU19TWU5DLCB3ZSBuZWVkIHRvIGZvcmNlIG9uZSBvdXJzZWx2ZXMuCi0JICovCi0JaWYgKCFJU19TWU5DKGlub2RlKSkKLQkJcmV0dXJuIHJldDsKLQotCS8qCi0JICogT3BlbiBxdWVzdGlvbiAjMiAtLS0gc2hvdWxkIHdlIGZvcmNlIGRhdGEgdG8gZGlzayBoZXJlIHRvbz8gIElmIHdlCi0JICogZG9uJ3QsIHRoZSBvbmx5IGltcGFjdCBpcyB0aGF0IGRhdGE9d3JpdGViYWNrIGZpbGVzeXN0ZW1zIHdvbid0Ci0JICogZmx1c2ggZGF0YSB0byBkaXNrIGF1dG9tYXRpY2FsbHkgb24gSVNfU1lOQywgb25seSBtZXRhZGF0YSAoYnV0Ci0JICogaGlzdG9yaWNhbGx5LCB0aGF0IGlzIHdoYXQgZXh0MiBoYXMgZG9uZS4pCi0JICovCi0KLWZvcmNlX2NvbW1pdDoKLQllcnIgPSBleHQzX2ZvcmNlX2NvbW1pdChpbm9kZS0+aV9zYik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gcmV0OwotfQotCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAotCS5haW9fd3JpdGUJPSBleHQzX2ZpbGVfd3JpdGUsCisJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLnVubG9ja2VkX2lvY3RsCT0gZXh0M19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDNfY29tcGF0X2lvY3RsLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCAyN2YzYzUzLi41Y2EzZWNhIDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtNTgsMTAgKzU4LDcgQEAKIGV4dDRfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAogCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCXNzaXplX3QgcmV0OwotCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgZW5jb3VudGVyZWQgYSBiaXRtYXAtZm9ybWF0IGZpbGUsIHRoZSBzaXplIGxpbWl0CkBAIC04MSw1MyArNzgsNyBAQAogCQl9CiAJfQogCi0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Ci0JLyoKLQkgKiBTa2lwIGZsdXNoaW5nIGlmIHRoZXJlIHdhcyBhbiBlcnJvciwgb3IgaWYgbm90aGluZyB3YXMgd3JpdHRlbi4KLQkgKi8KLQlpZiAocmV0IDw9IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIElmIHRoZSBpbm9kZSBpcyBJU19TWU5DLCBvciBpcyBPX1NZTkMgYW5kIHdlIGFyZSBkb2luZyBkYXRhCi0JICogam91cm5hbGxpbmcgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGZvcmNlIHRoZSB0cmFuc2FjdGlvbgotCSAqIHRvIGRpc2sgdG8ga2VlcCBhbGwgbWV0YWRhdGEgdXB0b2RhdGUgc3luY2hyb25vdXNseS4KLQkgKi8KLQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgewotCQkvKgotCQkgKiBJZiB3ZSBhcmUgbm9uLWRhdGEtam91cm5hbGVkLCB0aGVuIHRoZSBkaXJ0eSBkYXRhIGhhcwotCQkgKiBhbHJlYWR5IGJlZW4gZmx1c2hlZCB0byBiYWNraW5nIHN0b3JlIGJ5IGdlbmVyaWNfb3N5bmNfaW5vZGUsCi0JCSAqIGFuZCB0aGUgaW5vZGUgaGFzIGJlZW4gZmx1c2hlZCB0b28gaWYgdGhlcmUgaGF2ZSBiZWVuIGFueQotCQkgKiBtb2RpZmljYXRpb25zIG90aGVyIHRoYW4gbWVyZSB0aW1lc3RhbXAgdXBkYXRlcy4KLQkJICoKLQkJICogT3BlbiBxdWVzdGlvbiAtLS0gZG8gd2UgY2FyZSBhYm91dCBmbHVzaGluZyB0aW1lc3RhbXBzIHRvbwotCQkgKiBpZiB0aGUgaW5vZGUgaXMgSVNfU1lOQz8KLQkJICovCi0JCWlmICghZXh0NF9zaG91bGRfam91cm5hbF9kYXRhKGlub2RlKSkKLQkJCXJldHVybiByZXQ7Ci0KLQkJZ290byBmb3JjZV9jb21taXQ7Ci0JfQotCi0JLyoKLQkgKiBTbyB3ZSBrbm93IHRoYXQgdGhlcmUgaGFzIGJlZW4gbm8gZm9yY2VkIGRhdGEgZmx1c2guICBJZiB0aGUgaW5vZGUKLQkgKiBpcyBtYXJrZWQgSVNfU1lOQywgd2UgbmVlZCB0byBmb3JjZSBvbmUgb3Vyc2VsdmVzLgotCSAqLwotCWlmICghSVNfU1lOQyhpbm9kZSkpCi0JCXJldHVybiByZXQ7Ci0KLQkvKgotCSAqIE9wZW4gcXVlc3Rpb24gIzIgLS0tIHNob3VsZCB3ZSBmb3JjZSBkYXRhIHRvIGRpc2sgaGVyZSB0b28/ICBJZiB3ZQotCSAqIGRvbid0LCB0aGUgb25seSBpbXBhY3QgaXMgdGhhdCBkYXRhPXdyaXRlYmFjayBmaWxlc3lzdGVtcyB3b24ndAotCSAqIGZsdXNoIGRhdGEgdG8gZGlzayBhdXRvbWF0aWNhbGx5IG9uIElTX1NZTkMsIG9ubHkgbWV0YWRhdGEgKGJ1dAotCSAqIGhpc3RvcmljYWxseSwgdGhhdCBpcyB3aGF0IGV4dDIgaGFzIGRvbmUuKQotCSAqLwotCi1mb3JjZV9jb21taXQ6Ci0JZXJyID0gZXh0NF9mb3JjZV9jb21taXQoaW5vZGUtPmlfc2IpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IGYwNDJiOTYuLmU4YzE1OWQgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKKysrIGIvZnMvZmF0L2ZpbGUuYwpAQCAtMTc2LDggKzE3NiwyNiBAQAogCiAJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JaWYgKElTX1NZTkMoaW5vZGUpKQotCQllcnIgPSBzeW5jX3BhZ2VfcmFuZ2Vfbm9sb2NrKGlub2RlLCBtYXBwaW5nLCBzdGFydCwgY291bnQpOworCWlmIChJU19TWU5DKGlub2RlKSkgeworCQlpbnQgZXJyMjsKKworCQkvKgorCQkgKiBPcGVuY29kZSBzeW5jaW5nIHNpbmNlIHdlIGRvbid0IGhhdmUgYSBmaWxlIG9wZW4gdG8gdXNlCisJCSAqIHN0YW5kYXJkIGZzeW5jIHBhdGguCisJCSAqLworCQllcnIgPSBmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UobWFwcGluZywgc3RhcnQsCisJCQkJCSAgICAgICBzdGFydCArIGNvdW50IC0gMSk7CisJCWVycjIgPSBzeW5jX21hcHBpbmdfYnVmZmVycyhtYXBwaW5nKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBlcnIyOworCQllcnIyID0gd3JpdGVfaW5vZGVfbm93KGlub2RlLCAxKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBlcnIyOworCQlpZiAoIWVycikgeworCQkJZXJyID0gIGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0LAorCQkJCQkJICAgICAgIHN0YXJ0ICsgY291bnQgLSAxKTsKKwkJfQorCX0KIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvZmF0L21pc2MuYyBiL2ZzL2ZhdC9taXNjLmMKaW5kZXggYTZjMjA0Ny4uNGUzNWJlOCAxMDA2NDQKLS0tIGEvZnMvZmF0L21pc2MuYworKysgYi9mcy9mYXQvbWlzYy5jCkBAIC0xMTksOCArMTE5LDggQEAKIAkJTVNET1NfSShpbm9kZSktPmlfc3RhcnQgPSBuZXdfZGNsdXM7CiAJCU1TRE9TX0koaW5vZGUpLT5pX2xvZ3N0YXJ0ID0gbmV3X2RjbHVzOwogCQkvKgotCQkgKiBTaW5jZSBnZW5lcmljX29zeW5jX2lub2RlKCkgc3luY2hyb25pemUgbGF0ZXIgaWYKLQkJICogdGhpcyBpcyBub3QgZGlyZWN0b3J5LCB3ZSBkb24ndCBoZXJlLgorCQkgKiBTaW5jZSBnZW5lcmljX3dyaXRlX3N5bmMoKSBzeW5jaHJvbml6ZXMgcmVndWxhciBmaWxlcyBsYXRlciwKKwkJICogd2Ugc3luYyBoZXJlIG9ubHkgZGlyZWN0b3JpZXMuCiAJCSAqLwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiBJU19ESVJTWU5DKGlub2RlKSkgewogCQkJcmV0ID0gZmF0X3N5bmNfaW5vZGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZnMtd3JpdGViYWNrLmMgYi9mcy9mcy13cml0ZWJhY2suYwppbmRleCBkYTg2ZWY1Li42MjgyMzVjIDEwMDY0NAotLS0gYS9mcy9mcy13cml0ZWJhY2suYworKysgYi9mcy9mcy13cml0ZWJhY2suYwpAQCAtMTI0Miw1NyArMTI0MiwzIEBACiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc3luY19pbm9kZSk7Ci0KLS8qKgotICogZ2VuZXJpY19vc3luY19pbm9kZSAtIGZsdXNoIGFsbCBkaXJ0eSBkYXRhIGZvciBhIGdpdmVuIGlub2RlIHRvIGRpc2sKLSAqIEBpbm9kZTogaW5vZGUgdG8gd3JpdGUKLSAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzc19zcGFjZSB0aGF0IHNob3VsZCBiZSBmbHVzaGVkCi0gKiBAd2hhdDogIHdoYXQgdG8gd3JpdGUgYW5kIHdhaXQgdXBvbgotICoKLSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBieSBmaWxlX3dyaXRlIGZ1bmN0aW9ucyBmb3IgZmlsZXMgd2hpY2ggaGF2ZSB0aGUKLSAqIE9fU1lOQyBmbGFnIHNldCwgdG8gZmx1c2ggZGlydHkgd3JpdGVzIHRvIGRpc2suCi0gKgotICogQHdoYXQgaXMgYSBiaXRtYXNrLCBzcGVjaWZ5aW5nIHdoaWNoIHBhcnQgb2YgdGhlIGlub2RlJ3MgZGF0YSBzaG91bGQgYmUKLSAqIHdyaXR0ZW4gYW5kIHdhaXRlZCB1cG9uLgotICoKLSAqICAgIE9TWU5DX0RBVEE6ICAgICBpX21hcHBpbmcncyBkaXJ0eSBkYXRhCi0gKiAgICBPU1lOQ19NRVRBREFUQTogdGhlIGJ1ZmZlcnMgYXQgaV9tYXBwaW5nLT5wcml2YXRlX2xpc3QKLSAqICAgIE9TWU5DX0lOT0RFOiAgICB0aGUgaW5vZGUgaXRzZWxmCi0gKi8KLQotaW50IGdlbmVyaWNfb3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGludCB3aGF0KQotewotCWludCBlcnIgPSAwOwotCWludCBuZWVkX3dyaXRlX2lub2RlX25vdyA9IDA7Ci0JaW50IGVycjI7Ci0KLQlpZiAod2hhdCAmIE9TWU5DX0RBVEEpCi0JCWVyciA9IGZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKLQlpZiAod2hhdCAmIChPU1lOQ19NRVRBREFUQXxPU1lOQ19EQVRBKSkgewotCQllcnIyID0gc3luY19tYXBwaW5nX2J1ZmZlcnMobWFwcGluZyk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gZXJyMjsKLQl9Ci0JaWYgKHdoYXQgJiBPU1lOQ19EQVRBKSB7Ci0JCWVycjIgPSBmaWxlbWFwX2ZkYXRhd2FpdChtYXBwaW5nKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSBlcnIyOwotCX0KLQotCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7Ci0JaWYgKChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpICYmCi0JICAgICgod2hhdCAmIE9TWU5DX0lOT0RFKSB8fCAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZX0RBVEFTWU5DKSkpCi0JCW5lZWRfd3JpdGVfaW5vZGVfbm93ID0gMTsKLQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci0KLQlpZiAobmVlZF93cml0ZV9pbm9kZV9ub3cpIHsKLQkJZXJyMiA9IHdyaXRlX2lub2RlX25vdyhpbm9kZSwgMSk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gZXJyMjsKLQl9Ci0JZWxzZQotCQlpbm9kZV9zeW5jX3dhaXQoaW5vZGUpOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0woZ2VuZXJpY19vc3luY19pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL01ha2VmaWxlIGIvZnMvZ2ZzMi9NYWtlZmlsZQppbmRleCAzZGEyZjFmLi4yMWY3ZTQ2IDEwMDY0NAotLS0gYS9mcy9nZnMyL01ha2VmaWxlCisrKyBiL2ZzL2dmczIvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiBFWFRSQV9DRkxBR1MgOj0gLUkkKHNyYykKIG9iai0kKENPTkZJR19HRlMyX0ZTKSArPSBnZnMyLm8KLWdmczIteSA6PSBhY2wubyBibWFwLm8gZGlyLm8gZWFvcHMubyBlYXR0ci5vIGdsb2NrLm8gXAorZ2ZzMi15IDo9IGFjbC5vIGJtYXAubyBkaXIubyB4YXR0ci5vIGdsb2NrLm8gXAogCWdsb3BzLm8gaW5vZGUubyBsb2cubyBsb3BzLm8gbWFpbi5vIG1ldGFfaW8ubyBcCiAJYW9wcy5vIGRlbnRyeS5vIGV4cG9ydC5vIGZpbGUubyBcCiAJb3BzX2ZzdHlwZS5vIG9wc19pbm9kZS5vIHF1b3RhLm8gXApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hY2wuYyBiL2ZzL2dmczIvYWNsLmMKaW5kZXggZmE4ODFiZC4uM2ZjNGUzYSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hY2wuYworKysgYi9mcy9nZnMyL2FjbC5jCkBAIC0xOSw4ICsxOSw3IEBACiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgogI2luY2x1ZGUgImFjbC5oIgotI2luY2x1ZGUgImVhb3BzLmgiCi0jaW5jbHVkZSAiZWF0dHIuaCIKKyNpbmNsdWRlICJ4YXR0ci5oIgogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJtZXRhX2lvLmgiCkBAIC0zMSw4ICszMCw3IEBACiAjZGVmaW5lIEFDTF9ERUZBVUxUIDAKIAogaW50IGdmczJfYWNsX3ZhbGlkYXRlX3NldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGludCBhY2Nlc3MsCi0JCSAgICAgIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyLAotCQkgICAgICBpbnQgKnJlbW92ZSwgbW9kZV90ICptb2RlKQorCQkJICBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwgaW50ICpyZW1vdmUsIG1vZGVfdCAqbW9kZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CiAJaW50IGVycm9yOwpAQCAtODMsMzAgKzgxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWNsX2dldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGludCBhY2Nlc3MsIHN0cnVjdCBwb3NpeF9hY2wgKiphY2wsCi0JCSAgIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwgY2hhciAqKmRhdGEsIHVuc2lnbmVkIGludCAqbGVuKQorc3RhdGljIGludCBhY2xfZ2V0KHN0cnVjdCBnZnMyX2lub2RlICppcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgc3RydWN0IHBvc2l4X2FjbCAqKmFjbCwgc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsLAorCQkgICBjaGFyICoqZGF0YXAsIHVuc2lnbmVkIGludCAqbGVucCkKIHsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOwotCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsX3RoaXM7CisJY2hhciAqZGF0YTsKKwl1bnNpZ25lZCBpbnQgbGVuOwogCWludCBlcnJvcjsKIAorCWVsLT5lbF9iaCA9IE5VTEw7CisKIAlpZiAoIWlwLT5pX2VhdHRyKQogCQlyZXR1cm4gMDsKIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0JaWYgKGFjY2VzcykgewotCQllci5lcl9uYW1lID0gR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTOwotCQllci5lcl9uYW1lX2xlbiA9IEdGUzJfUE9TSVhfQUNMX0FDQ0VTU19MRU47Ci0JfSBlbHNlIHsKLQkJZXIuZXJfbmFtZSA9IEdGUzJfUE9TSVhfQUNMX0RFRkFVTFQ7Ci0JCWVyLmVyX25hbWVfbGVuID0gR0ZTMl9QT1NJWF9BQ0xfREVGQVVMVF9MRU47Ci0JfQotCWVyLmVyX3R5cGUgPSBHRlMyX0VBVFlQRV9TWVM7Ci0KLQlpZiAoIWVsKQotCQllbCA9ICZlbF90aGlzOwotCi0JZXJyb3IgPSBnZnMyX2VhX2ZpbmQoaXAsICZlciwgZWwpOworCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCBHRlMyX0VBVFlQRV9TWVMsIG5hbWUsIGVsKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAlpZiAoIWVsLT5lbF9lYSkKQEAgLTExNCwzMiArMTAyLDMxIEBACiAJaWYgKCFHRlMyX0VBX0RBVEFfTEVOKGVsLT5lbF9lYSkpCiAJCWdvdG8gb3V0OwogCi0JZXIuZXJfZGF0YV9sZW4gPSBHRlMyX0VBX0RBVEFfTEVOKGVsLT5lbF9lYSk7Ci0JZXIuZXJfZGF0YSA9IGttYWxsb2MoZXIuZXJfZGF0YV9sZW4sIEdGUF9OT0ZTKTsKKwlsZW4gPSBHRlMyX0VBX0RBVEFfTEVOKGVsLT5lbF9lYSk7CisJZGF0YSA9IGttYWxsb2MobGVuLCBHRlBfTk9GUyk7CiAJZXJyb3IgPSAtRU5PTUVNOwotCWlmICghZXIuZXJfZGF0YSkKKwlpZiAoIWRhdGEpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSBnZnMyX2VhX2dldF9jb3B5KGlwLCBlbCwgZXIuZXJfZGF0YSk7Ci0JaWYgKGVycm9yKQorCWVycm9yID0gZ2ZzMl9lYV9nZXRfY29weShpcCwgZWwsIGRhdGEsIGxlbik7CisJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXRfa2ZyZWU7CisJZXJyb3IgPSAwOwogCiAJaWYgKGFjbCkgewotCQkqYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIoZXIuZXJfZGF0YSwgZXIuZXJfZGF0YV9sZW4pOworCQkqYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIoZGF0YSwgbGVuKTsKIAkJaWYgKElTX0VSUigqYWNsKSkKIAkJCWVycm9yID0gUFRSX0VSUigqYWNsKTsKIAl9CiAKIG91dF9rZnJlZToKLQlpZiAoZXJyb3IgfHwgIWRhdGEpCi0JCWtmcmVlKGVyLmVyX2RhdGEpOwotCWVsc2UgewotCQkqZGF0YSA9IGVyLmVyX2RhdGE7Ci0JCSpsZW4gPSBlci5lcl9kYXRhX2xlbjsKKwlpZiAoZXJyb3IgfHwgIWRhdGFwKSB7CisJCWtmcmVlKGRhdGEpOworCX0gZWxzZSB7CisJCSpkYXRhcCA9IGRhdGE7CisJCSpsZW5wID0gbGVuOwogCX0KIG91dDoKLQlpZiAoZXJyb3IgfHwgZWwgPT0gJmVsX3RoaXMpCi0JCWJyZWxzZShlbC0+ZWxfYmgpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTUzLDEwICsxNDAsMTIgQEAKIAogaW50IGdmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogeworCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBhY2xfZ2V0KEdGUzJfSShpbm9kZSksIEFDTF9BQ0NFU1MsICZhY2wsIE5VTEwsIE5VTEwsIE5VTEwpOworCWVycm9yID0gYWNsX2dldChHRlMyX0koaW5vZGUpLCBHRlMyX1BPU0lYX0FDTF9BQ0NFU1MsICZhY2wsICZlbCwgTlVMTCwgTlVMTCk7CisJYnJlbHNlKGVsLmVsX2JoKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApAQCAtMTk2LDEwICsxODUsMTIgQEAKIAogaW50IGdmczJfYWNsX2NyZWF0ZShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCBzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXApCiB7CisJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gZWw7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEwsICpjbG9uZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOwogCW1vZGVfdCBtb2RlID0gaXAtPmlfaW5vZGUuaV9tb2RlOworCWNoYXIgKmRhdGEgPSBOVUxMOworCXVuc2lnbmVkIGludCBsZW47CiAJaW50IGVycm9yOwogCiAJaWYgKCFzZHAtPnNkX2FyZ3MuYXJfcG9zaXhfYWNsKQpAQCAtMjA3LDExICsxOTgsOCBAQAogCWlmIChTX0lTTE5LKGlwLT5pX2lub2RlLmlfbW9kZSkpCiAJCXJldHVybiAwOwogCi0JbWVtc2V0KCZlciwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QpKTsKLQllci5lcl90eXBlID0gR0ZTMl9FQVRZUEVfU1lTOwotCi0JZXJyb3IgPSBhY2xfZ2V0KGRpcCwgQUNMX0RFRkFVTFQsICZhY2wsIE5VTEwsCi0JCQkmZXIuZXJfZGF0YSwgJmVyLmVyX2RhdGFfbGVuKTsKKwllcnJvciA9IGFjbF9nZXQoZGlwLCBHRlMyX1BPU0lYX0FDTF9ERUZBVUxULCAmYWNsLCAmZWwsICZkYXRhLCAmbGVuKTsKKwlicmVsc2UoZWwuZWxfYmgpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWlmICghYWNsKSB7CkBAIC0yMjksOSArMjE3LDggQEAKIAlhY2wgPSBjbG9uZTsKIAogCWlmIChTX0lTRElSKGlwLT5pX2lub2RlLmlfbW9kZSkpIHsKLQkJZXIuZXJfbmFtZSA9IEdGUzJfUE9TSVhfQUNMX0RFRkFVTFQ7Ci0JCWVyLmVyX25hbWVfbGVuID0gR0ZTMl9QT1NJWF9BQ0xfREVGQVVMVF9MRU47Ci0JCWVycm9yID0gZ2ZzMl9zeXN0ZW1fZWFvcHMuZW9fc2V0KGlwLCAmZXIpOworCQllcnJvciA9IGdmczJfeGF0dHJfc2V0KCZpcC0+aV9pbm9kZSwgR0ZTMl9FQVRZUEVfU1lTLAorCQkJCSAgICAgICBHRlMyX1BPU0lYX0FDTF9ERUZBVUxULCBkYXRhLCBsZW4sIDApOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0yMzksMjEgKzIyNiwxOSBAQAogCWVycm9yID0gcG9zaXhfYWNsX2NyZWF0ZV9tYXNxKGFjbCwgJm1vZGUpOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwotCWlmIChlcnJvciA+IDApIHsKLQkJZXIuZXJfbmFtZSA9IEdGUzJfUE9TSVhfQUNMX0FDQ0VTUzsKLQkJZXIuZXJfbmFtZV9sZW4gPSBHRlMyX1BPU0lYX0FDTF9BQ0NFU1NfTEVOOwotCQlwb3NpeF9hY2xfdG9feGF0dHIoYWNsLCBlci5lcl9kYXRhLCBlci5lcl9kYXRhX2xlbik7Ci0JCWVyLmVyX21vZGUgPSBtb2RlOwotCQllci5lcl9mbGFncyA9IEdGUzJfRVJGX01PREU7Ci0JCWVycm9yID0gZ2ZzMl9zeXN0ZW1fZWFvcHMuZW9fc2V0KGlwLCAmZXIpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dDsKLQl9IGVsc2UKLQkJbXVuZ2VfbW9kZShpcCwgbW9kZSk7CisJaWYgKGVycm9yID09IDApCisJCWdvdG8gbXVuZ2U7CiAKKwlwb3NpeF9hY2xfdG9feGF0dHIoYWNsLCBkYXRhLCBsZW4pOworCWVycm9yID0gZ2ZzMl94YXR0cl9zZXQoJmlwLT5pX2lub2RlLCBHRlMyX0VBVFlQRV9TWVMsCisJCQkgICAgICAgR0ZTMl9QT1NJWF9BQ0xfQUNDRVNTLCBkYXRhLCBsZW4sIDApOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CittdW5nZToKKwllcnJvciA9IG11bmdlX21vZGUoaXAsIG1vZGUpOwogb3V0OgogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7Ci0Ja2ZyZWUoZXIuZXJfZGF0YSk7CisJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yNjUsOSArMjUwLDkgQEAKIAl1bnNpZ25lZCBpbnQgbGVuOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gYWNsX2dldChpcCwgQUNMX0FDQ0VTUywgJmFjbCwgJmVsLCAmZGF0YSwgJmxlbik7CisJZXJyb3IgPSBhY2xfZ2V0KGlwLCBHRlMyX1BPU0lYX0FDTF9BQ0NFU1MsICZhY2wsICZlbCwgJmRhdGEsICZsZW4pOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIG91dF9icmVsc2U7CiAJaWYgKCFhY2wpCiAJCXJldHVybiBnZnMyX3NldGF0dHJfc2ltcGxlKGlwLCBhdHRyKTsKIApAQCAtMjg2LDggKzI3MSw5IEBACiAKIG91dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwotCWJyZWxzZShlbC5lbF9iaCk7CiAJa2ZyZWUoZGF0YSk7CitvdXRfYnJlbHNlOgorCWJyZWxzZShlbC5lbF9iaCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2RlbnRyeS5jIGIvZnMvZ2ZzMi9kZW50cnkuYwppbmRleCAwMjJjNjZjLi45MWJlZGRhIDEwMDY0NAotLS0gYS9mcy9nZnMyL2RlbnRyeS5jCisrKyBiL2ZzL2dmczIvZGVudHJ5LmMKQEAgLTEwNyw4ICsxMDcsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnZnMyX2RlbnRyeV9kZWxldGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBnZnMyX2lub2RlICpnaW5vZGU7CisKKwlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKKwkJcmV0dXJuIDA7CisKKwlnaW5vZGUgPSBHRlMyX0koZGVudHJ5LT5kX2lub2RlKTsKKwlpZiAoIWdpbm9kZS0+aV9pb3Blbl9naC5naF9nbCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodGVzdF9iaXQoR0xGX0RFTU9URSwgJmdpbm9kZS0+aV9pb3Blbl9naC5naF9nbC0+Z2xfZmxhZ3MpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZ2ZzMl9kb3BzID0gewogCS5kX3JldmFsaWRhdGUgPSBnZnMyX2RyZXZhbGlkYXRlLAogCS5kX2hhc2ggPSBnZnMyX2RoYXNoLAorCS5kX2RlbGV0ZSA9IGdmczJfZGVudHJ5X2RlbGV0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZWFvcHMuYyBiL2ZzL2dmczIvZWFvcHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVlOWIwMy4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2Vhb3BzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgotI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImdmczIuaCIKLSNpbmNsdWRlICJpbmNvcmUuaCIKLSNpbmNsdWRlICJhY2wuaCIKLSNpbmNsdWRlICJlYW9wcy5oIgotI2luY2x1ZGUgImVhdHRyLmgiCi0jaW5jbHVkZSAidXRpbC5oIgotCi0vKioKLSAqIGdmczJfZWFfbmFtZTJ0eXBlIC0gZ2V0IHRoZSB0eXBlIG9mIHRoZSBlYSwgYW5kIHRydW5jYXRlIHR5cGUgZnJvbSB0aGUgbmFtZQotICogQG5hbWVwOiBlYSBuYW1lLCBwb3NzaWJseSB3aXRoIHR5cGUgYXBwZW5kZWQKLSAqCi0gKiBSZXR1cm5zOiBHRlMyX0VBVFlQRV9YWFgKLSAqLwotCi11bnNpZ25lZCBpbnQgZ2ZzMl9lYV9uYW1lMnR5cGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqKnRydW5jYXRlZF9uYW1lKQotewotCXVuc2lnbmVkIGludCB0eXBlOwotCi0JaWYgKHN0cm5jbXAobmFtZSwgInN5c3RlbS4iLCA3KSA9PSAwKSB7Ci0JCXR5cGUgPSBHRlMyX0VBVFlQRV9TWVM7Ci0JCWlmICh0cnVuY2F0ZWRfbmFtZSkKLQkJCSp0cnVuY2F0ZWRfbmFtZSA9IG5hbWUgKyBzaXplb2YoInN5c3RlbS4iKSAtIDE7Ci0JfSBlbHNlIGlmIChzdHJuY21wKG5hbWUsICJ1c2VyLiIsIDUpID09IDApIHsKLQkJdHlwZSA9IEdGUzJfRUFUWVBFX1VTUjsKLQkJaWYgKHRydW5jYXRlZF9uYW1lKQotCQkJKnRydW5jYXRlZF9uYW1lID0gbmFtZSArIHNpemVvZigidXNlci4iKSAtIDE7Ci0JfSBlbHNlIGlmIChzdHJuY21wKG5hbWUsICJzZWN1cml0eS4iLCA5KSA9PSAwKSB7Ci0JCXR5cGUgPSBHRlMyX0VBVFlQRV9TRUNVUklUWTsKLQkJaWYgKHRydW5jYXRlZF9uYW1lKQotCQkJKnRydW5jYXRlZF9uYW1lID0gbmFtZSArIHNpemVvZigic2VjdXJpdHkuIikgLSAxOwotCX0gZWxzZSB7Ci0JCXR5cGUgPSBHRlMyX0VBVFlQRV9VTlVTRUQ7Ci0JCWlmICh0cnVuY2F0ZWRfbmFtZSkKLQkJCSp0cnVuY2F0ZWRfbmFtZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIHR5cGU7Ci19Ci0KLXN0YXRpYyBpbnQgc3lzdGVtX2VvX2dldChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCWlmICghR0ZTMl9BQ0xfSVNfQUNDRVNTKGVyLT5lcl9uYW1lLCBlci0+ZXJfbmFtZV9sZW4pICYmCi0JICAgICFHRlMyX0FDTF9JU19ERUZBVUxUKGVyLT5lcl9uYW1lLCBlci0+ZXJfbmFtZV9sZW4pICYmCi0JICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKEdGUzJfU0IoJmlwLT5pX2lub2RlKS0+c2RfYXJncy5hcl9wb3NpeF9hY2wgPT0gMCAmJgotCSAgICAoR0ZTMl9BQ0xfSVNfQUNDRVNTKGVyLT5lcl9uYW1lLCBlci0+ZXJfbmFtZV9sZW4pIHx8Ci0JICAgICBHRlMyX0FDTF9JU19ERUZBVUxUKGVyLT5lcl9uYW1lLCBlci0+ZXJfbmFtZV9sZW4pKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIGdmczJfZWFfZ2V0X2koaXAsIGVyKTsKLX0KLQotc3RhdGljIGludCBzeXN0ZW1fZW9fc2V0KHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpCi17Ci0JaW50IHJlbW92ZSA9IDA7Ci0JaW50IGVycm9yOwotCi0JaWYgKEdGUzJfQUNMX0lTX0FDQ0VTUyhlci0+ZXJfbmFtZSwgZXItPmVyX25hbWVfbGVuKSkgewotCQlpZiAoIShlci0+ZXJfZmxhZ3MgJiBHRlMyX0VSRl9NT0RFKSkgewotCQkJZXItPmVyX21vZGUgPSBpcC0+aV9pbm9kZS5pX21vZGU7Ci0JCQllci0+ZXJfZmxhZ3MgfD0gR0ZTMl9FUkZfTU9ERTsKLQkJfQotCQllcnJvciA9IGdmczJfYWNsX3ZhbGlkYXRlX3NldChpcCwgMSwgZXIsCi0JCQkJCSAgICAgICZyZW1vdmUsICZlci0+ZXJfbW9kZSk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJZXJyb3IgPSBnZnMyX2VhX3NldF9pKGlwLCBlcik7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJaWYgKHJlbW92ZSkKLQkJCWdmczJfZWFfcmVtb3ZlX2koaXAsIGVyKTsKLQkJcmV0dXJuIDA7Ci0KLQl9IGVsc2UgaWYgKEdGUzJfQUNMX0lTX0RFRkFVTFQoZXItPmVyX25hbWUsIGVyLT5lcl9uYW1lX2xlbikpIHsKLQkJZXJyb3IgPSBnZnMyX2FjbF92YWxpZGF0ZV9zZXQoaXAsIDAsIGVyLAotCQkJCQkgICAgICAmcmVtb3ZlLCBOVUxMKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCQlpZiAoIXJlbW92ZSkKLQkJCWVycm9yID0gZ2ZzMl9lYV9zZXRfaShpcCwgZXIpOwotCQllbHNlIHsKLQkJCWVycm9yID0gZ2ZzMl9lYV9yZW1vdmVfaShpcCwgZXIpOwotCQkJaWYgKGVycm9yID09IC1FTk9EQVRBKQotCQkJCWVycm9yID0gMDsKLQkJfQotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JcmV0dXJuIC1FUEVSTTsKLX0KLQotc3RhdGljIGludCBzeXN0ZW1fZW9fcmVtb3ZlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpCi17Ci0JaWYgKEdGUzJfQUNMX0lTX0FDQ0VTUyhlci0+ZXJfbmFtZSwgZXItPmVyX25hbWVfbGVuKSkgewotCQlpbnQgZXJyb3IgPSBnZnMyX2FjbF92YWxpZGF0ZV9yZW1vdmUoaXAsIDEpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0KLQl9IGVsc2UgaWYgKEdGUzJfQUNMX0lTX0RFRkFVTFQoZXItPmVyX25hbWUsIGVyLT5lcl9uYW1lX2xlbikpIHsKLQkJaW50IGVycm9yID0gZ2ZzMl9hY2xfdmFsaWRhdGVfcmVtb3ZlKGlwLCAwKTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOwotCi0JfSBlbHNlCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gZ2ZzMl9lYV9yZW1vdmVfaShpcCwgZXIpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdmczJfZWF0dHJfb3BlcmF0aW9ucyBnZnMyX3VzZXJfZWFvcHMgPSB7Ci0JLmVvX2dldCA9IGdmczJfZWFfZ2V0X2ksCi0JLmVvX3NldCA9IGdmczJfZWFfc2V0X2ksCi0JLmVvX3JlbW92ZSA9IGdmczJfZWFfcmVtb3ZlX2ksCi0JLmVvX25hbWUgPSAidXNlciIsCi19OwotCi1jb25zdCBzdHJ1Y3QgZ2ZzMl9lYXR0cl9vcGVyYXRpb25zIGdmczJfc3lzdGVtX2Vhb3BzID0gewotCS5lb19nZXQgPSBzeXN0ZW1fZW9fZ2V0LAotCS5lb19zZXQgPSBzeXN0ZW1fZW9fc2V0LAotCS5lb19yZW1vdmUgPSBzeXN0ZW1fZW9fcmVtb3ZlLAotCS5lb19uYW1lID0gInN5c3RlbSIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGdmczJfZWF0dHJfb3BlcmF0aW9ucyBnZnMyX3NlY3VyaXR5X2Vhb3BzID0gewotCS5lb19nZXQgPSBnZnMyX2VhX2dldF9pLAotCS5lb19zZXQgPSBnZnMyX2VhX3NldF9pLAotCS5lb19yZW1vdmUgPSBnZnMyX2VhX3JlbW92ZV9pLAotCS5lb19uYW1lID0gInNlY3VyaXR5IiwKLX07Ci0KLWNvbnN0IHN0cnVjdCBnZnMyX2VhdHRyX29wZXJhdGlvbnMgKmdmczJfZWFfb3BzW10gPSB7Ci0JTlVMTCwKLQkmZ2ZzMl91c2VyX2Vhb3BzLAotCSZnZnMyX3N5c3RlbV9lYW9wcywKLQkmZ2ZzMl9zZWN1cml0eV9lYW9wcywKLX07Ci0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvZWFvcHMuaCBiL2ZzL2dmczIvZWFvcHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGEyZjdmYi4uMDAwMDAwMAotLS0gYS9mcy9nZnMyL2Vhb3BzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCi0gKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KLSAqLwotCi0jaWZuZGVmIF9fRUFPUFNfRE9UX0hfXwotI2RlZmluZSBfX0VBT1BTX0RPVF9IX18KLQotc3RydWN0IGdmczJfZWFfcmVxdWVzdDsKLXN0cnVjdCBnZnMyX2lub2RlOwotCi1zdHJ1Y3QgZ2ZzMl9lYXR0cl9vcGVyYXRpb25zIHsKLQlpbnQgKCplb19nZXQpIChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLQlpbnQgKCplb19zZXQpIChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLQlpbnQgKCplb19yZW1vdmUpIChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLQljaGFyICplb19uYW1lOwotfTsKLQotdW5zaWduZWQgaW50IGdmczJfZWFfbmFtZTJ0eXBlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKip0cnVuY2F0ZWRfbmFtZSk7Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgZ2ZzMl9lYXR0cl9vcGVyYXRpb25zIGdmczJfc3lzdGVtX2Vhb3BzOwotCi1leHRlcm4gY29uc3Qgc3RydWN0IGdmczJfZWF0dHJfb3BlcmF0aW9ucyAqZ2ZzMl9lYV9vcHNbXTsKLQotI2VuZGlmIC8qIF9fRUFPUFNfRE9UX0hfXyAqLwotCmRpZmYgLS1naXQgYS9mcy9nZnMyL2VhdHRyLmggYi9mcy9nZnMyL2VhdHRyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MmRiZTAuLjAwMDAwMDAKLS0tIGEvZnMvZ2ZzMi9lYXR0ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIFNpc3RpbmEgU29mdHdhcmUsIEluYy4gIDE5OTctMjAwMyBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvcHlyaWdodGVkIG1hdGVyaWFsIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFueW9uZSB3aXNoaW5nIHRvIHVzZSwKLSAqIG1vZGlmeSwgY29weSwgb3IgcmVkaXN0cmlidXRlIGl0IHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCi0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgotICovCi0KLSNpZm5kZWYgX19FQVRUUl9ET1RfSF9fCi0jZGVmaW5lIF9fRUFUVFJfRE9UX0hfXwotCi1zdHJ1Y3QgZ2ZzMl9pbm9kZTsKLXN0cnVjdCBpYXR0cjsKLQotI2RlZmluZSBHRlMyX0VBX1JFQ19MRU4oZWEpIGJlMzJfdG9fY3B1KChlYSktPmVhX3JlY19sZW4pCi0jZGVmaW5lIEdGUzJfRUFfREFUQV9MRU4oZWEpIGJlMzJfdG9fY3B1KChlYSktPmVhX2RhdGFfbGVuKQotCi0jZGVmaW5lIEdGUzJfRUFfU0laRShlYSkgXAotQUxJR04oc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX2hlYWRlcikgKyAoZWEpLT5lYV9uYW1lX2xlbiArIFwKLSAgICAgICgoR0ZTMl9FQV9JU19TVFVGRkVEKGVhKSkgPyBHRlMyX0VBX0RBVEFfTEVOKGVhKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZW9mKF9fYmU2NCkgKiAoZWEpLT5lYV9udW1fcHRycykpLCA4KQotCi0jZGVmaW5lIEdGUzJfRUFfSVNfU1RVRkZFRChlYSkgKCEoZWEpLT5lYV9udW1fcHRycykKLSNkZWZpbmUgR0ZTMl9FQV9JU19MQVNUKGVhKSAoKGVhKS0+ZWFfZmxhZ3MgJiBHRlMyX0VBRkxBR19MQVNUKQotCi0jZGVmaW5lIEdGUzJfRUFSRVFfU0laRV9TVFVGRkVEKGVyKSBcCi1BTElHTihzaXplb2Yoc3RydWN0IGdmczJfZWFfaGVhZGVyKSArIChlciktPmVyX25hbWVfbGVuICsgKGVyKS0+ZXJfZGF0YV9sZW4sIDgpCi0KLSNkZWZpbmUgR0ZTMl9FQVJFUV9TSVpFX1VOU1RVRkZFRChzZHAsIGVyKSBcCi1BTElHTihzaXplb2Yoc3RydWN0IGdmczJfZWFfaGVhZGVyKSArIChlciktPmVyX25hbWVfbGVuICsgXAotICAgICAgc2l6ZW9mKF9fYmU2NCkgKiBESVZfUk9VTkRfVVAoKGVyKS0+ZXJfZGF0YV9sZW4sIChzZHApLT5zZF9qYnNpemUpLCA4KQotCi0jZGVmaW5lIEdGUzJfRUEyTkFNRShlYSkgKChjaGFyICopKChzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKikoZWEpICsgMSkpCi0jZGVmaW5lIEdGUzJfRUEyREFUQShlYSkgKEdGUzJfRUEyTkFNRShlYSkgKyAoZWEpLT5lYV9uYW1lX2xlbikKLQotI2RlZmluZSBHRlMyX0VBMkRBVEFQVFJTKGVhKSBcCi0oKF9fYmU2NCAqKShHRlMyX0VBMk5BTUUoZWEpICsgQUxJR04oKGVhKS0+ZWFfbmFtZV9sZW4sIDgpKSkKLQotI2RlZmluZSBHRlMyX0VBMk5FWFQoZWEpIFwKLSgoc3RydWN0IGdmczJfZWFfaGVhZGVyICopKChjaGFyICopKGVhKSArIEdGUzJfRUFfUkVDX0xFTihlYSkpKQotCi0jZGVmaW5lIEdGUzJfRUFfQkgyRklSU1QoYmgpIFwKLSgoc3RydWN0IGdmczJfZWFfaGVhZGVyICopKChiaCktPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9tZXRhX2hlYWRlcikpKQotCi0jZGVmaW5lIEdGUzJfRVJGX01PREUgMHg4MDAwMDAwMAotCi1zdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IHsKLQljb25zdCBjaGFyICplcl9uYW1lOwotCWNoYXIgKmVyX2RhdGE7Ci0JdW5zaWduZWQgaW50IGVyX25hbWVfbGVuOwotCXVuc2lnbmVkIGludCBlcl9kYXRhX2xlbjsKLQl1bnNpZ25lZCBpbnQgZXJfdHlwZTsgLyogR0ZTMl9FQVRZUEVfLi4uICovCi0JaW50IGVyX2ZsYWdzOwotCW1vZGVfdCBlcl9tb2RlOwotfTsKLQotc3RydWN0IGdmczJfZWFfbG9jYXRpb24gewotCXN0cnVjdCBidWZmZXJfaGVhZCAqZWxfYmg7Ci0Jc3RydWN0IGdmczJfZWFfaGVhZGVyICplbF9lYTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVsX3ByZXY7Ci19OwotCi1pbnQgZ2ZzMl9lYV9nZXRfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKTsKLWludCBnZnMyX2VhX3NldF9pKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpOwotaW50IGdmczJfZWFfcmVtb3ZlX2koc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci0KLWludCBnZnMyX2VhX2xpc3Qoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci1pbnQgZ2ZzMl9lYV9nZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci1pbnQgZ2ZzMl9lYV9zZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci1pbnQgZ2ZzMl9lYV9yZW1vdmUoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcik7Ci0KLWludCBnZnMyX2VhX2RlYWxsb2Moc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKLQotLyogRXhwb3J0ZWQgdG8gYWNsLmMgKi8KLQotaW50IGdmczJfZWFfZmluZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsCi0JCSBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciwKLQkJIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCk7Ci1pbnQgZ2ZzMl9lYV9nZXRfY29weShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsCi0JCSAgICAgc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsLAotCQkgICAgIGNoYXIgKmRhdGEpOwotaW50IGdmczJfZWFfYWNsX2NobW9kKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsLAotCQkgICAgICBzdHJ1Y3QgaWF0dHIgKmF0dHIsIGNoYXIgKmRhdGEpOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZnMyX2VhX3N0cmxlbihzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhKQotewotCXN3aXRjaCAoZWEtPmVhX3R5cGUpIHsKLQljYXNlIEdGUzJfRUFUWVBFX1VTUjoKLQkJcmV0dXJuIDUgKyBlYS0+ZWFfbmFtZV9sZW4gKyAxOwotCWNhc2UgR0ZTMl9FQVRZUEVfU1lTOgotCQlyZXR1cm4gNyArIGVhLT5lYV9uYW1lX2xlbiArIDE7Ci0JY2FzZSBHRlMyX0VBVFlQRV9TRUNVUklUWToKLQkJcmV0dXJuIDkgKyBlYS0+ZWFfbmFtZV9sZW4gKyAxOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotI2VuZGlmIC8qIF9fRUFUVFJfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9leHBvcnQuYyBiL2ZzL2dmczIvZXhwb3J0LmMKaW5kZXggOTIwMGVmMi4uZDE1ODc2ZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9leHBvcnQuYworKysgYi9mcy9nZnMyL2V4cG9ydC5jCkBAIC0xNDMsMTcgKzE0MywxNCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCXN0cnVjdCBnZnMyX2ludW1faG9zdCAqaW51bSkKKwkJCQkgICAgICBzdHJ1Y3QgZ2ZzMl9pbnVtX2hvc3QgKmludW0pCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBzYi0+c19mc19pbmZvOwotCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doLCByaV9naCwgcmdkX2doOwotCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7CisJc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yOwogCi0JLyogU3lzdGVtIGZpbGVzPyAqLwotCiAJaW5vZGUgPSBnZnMyX2lsb29rdXAoc2IsIGludW0tPm5vX2FkZHIpOwogCWlmIChpbm9kZSkgewogCQlpZiAoR0ZTMl9JKGlub2RlKS0+aV9ub19mb3JtYWxfaW5vICE9IGludW0tPm5vX2Zvcm1hbF9pbm8pIHsKQEAgLTE2OCwyOSArMTY1LDExIEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKLQllcnJvciA9IGdmczJfcmluZGV4X2hvbGQoc2RwLCAmcmlfZ2gpOworCWVycm9yID0gZ2ZzMl9jaGVja19ibGtfdHlwZShzZHAsIGludW0tPm5vX2FkZHIsIEdGUzJfQkxLU1RfRElOT0RFKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKIAotCWVycm9yID0gLUVJTlZBTDsKLQlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIGludW0tPm5vX2FkZHIpOwotCWlmICghcmdkKQotCQlnb3RvIGZhaWxfcmluZGV4OwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocmdkLT5yZF9nbCwgTE1fU1RfU0hBUkVELCAwLCAmcmdkX2doKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9yaW5kZXg7Ci0KLQllcnJvciA9IC1FU1RBTEU7Ci0JaWYgKGdmczJfZ2V0X2Jsb2NrX3R5cGUocmdkLCBpbnVtLT5ub19hZGRyKSAhPSBHRlMyX0JMS1NUX0RJTk9ERSkKLQkJZ290byBmYWlsX3JnZDsKLQotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyZ2RfZ2gpOwotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyaV9naCk7Ci0KLQlpbm9kZSA9IGdmczJfaW5vZGVfbG9va3VwKHNiLCBEVF9VTktOT1dOLAotCQkJCQlpbnVtLT5ub19hZGRyLAotCQkJCQkwLCAwKTsKKwlpbm9kZSA9IGdmczJfaW5vZGVfbG9va3VwKHNiLCBEVF9VTktOT1dOLCBpbnVtLT5ub19hZGRyLCAwLCAwKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQllcnJvciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIGZhaWw7CkBAIC0yMjQsMTMgKzIwMyw2IEBACiAJaWYgKCFJU19FUlIoZGVudHJ5KSkKIAkJZGVudHJ5LT5kX29wID0gJmdmczJfZG9wczsKIAlyZXR1cm4gZGVudHJ5OwotCi1mYWlsX3JnZDoKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmcmdkX2doKTsKLQotZmFpbF9yaW5kZXg6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJpX2doKTsKLQogZmFpbDoKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9maWxlLmMgYi9mcy9nZnMyL2ZpbGUuYwppbmRleCA3MzMxOGEzLi4xNjZmMzhmIDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgInJncnAuaCIKICNpbmNsdWRlICJ0cmFucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJlYW9wcy5oIgogCiAvKioKICAqIGdmczJfbGxzZWVrIC0gc2VlayB0byBhIGxvY2F0aW9uIGluIGEgZmlsZQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbmNvcmUuaCBiL2ZzL2dmczIvaW5jb3JlLmgKaW5kZXggNjE4MDFhZC4uNmVkYjQyMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbmNvcmUuaAorKysgYi9mcy9nZnMyL2luY29yZS5oCkBAIC00MDYsNiArNDA2LDEyIEBACiAjZGVmaW5lIEdGUzJfREFUQV9XUklURUJBQ0sJMQogI2RlZmluZSBHRlMyX0RBVEFfT1JERVJFRAkyCiAKKyNkZWZpbmUgR0ZTMl9FUlJPUlNfREVGQVVMVCAgICAgR0ZTMl9FUlJPUlNfV0lUSERSQVcKKyNkZWZpbmUgR0ZTMl9FUlJPUlNfV0lUSERSQVcgICAgMAorI2RlZmluZSBHRlMyX0VSUk9SU19DT05USU5VRSAgICAxIC8qIHBsYWNlIGhvbGRlciBmb3IgZnV0dXJlIGZlYXR1cmUgKi8KKyNkZWZpbmUgR0ZTMl9FUlJPUlNfUk8gICAgICAgICAgMiAvKiBwbGFjZSBob2xkZXIgZm9yIGZ1dHVyZSBmZWF0dXJlICovCisjZGVmaW5lIEdGUzJfRVJST1JTX1BBTklDICAgICAgIDMKKwogc3RydWN0IGdmczJfYXJncyB7CiAJY2hhciBhcl9sb2NrcHJvdG9bR0ZTMl9MT0NLTkFNRV9MRU5dOwkvKiBOYW1lIG9mIHRoZSBMb2NrIFByb3RvY29sICovCiAJY2hhciBhcl9sb2NrdGFibGVbR0ZTMl9MT0NLTkFNRV9MRU5dOwkvKiBOYW1lIG9mIHRoZSBMb2NrIFRhYmxlICovCkBAIC00MjIsNiArNDI4LDcgQEAKIAl1bnNpZ25lZCBpbnQgYXJfZGF0YToyOwkJCS8qIG9yZGVyZWQvd3JpdGViYWNrICovCiAJdW5zaWduZWQgaW50IGFyX21ldGE6MTsJCQkvKiBtb3VudCBtZXRhZnMgKi8KIAl1bnNpZ25lZCBpbnQgYXJfZGlzY2FyZDoxOwkJLyogZGlzY2FyZCByZXF1ZXN0cyAqLworCXVuc2lnbmVkIGludCBhcl9lcnJvcnM6MjsgICAgICAgICAgICAgICAvKiBlcnJvcnM9d2l0aGRyYXcgfCBwYW5pYyAqLwogCWludCBhcl9jb21taXQ7CQkJCS8qIENvbW1pdCBpbnRlcnZhbCAqLwogfTsKIApAQCAtNDg5LDcgKzQ5Niw2IEBACiAgKi8KIAogc3RydWN0IGxtX2xvY2tzdHJ1Y3QgewotCXUzMiBsc19pZDsKIAl1bnNpZ25lZCBpbnQgbHNfamlkOwogCXVuc2lnbmVkIGludCBsc19maXJzdDsKIAl1bnNpZ25lZCBpbnQgbHNfZmlyc3RfZG9uZTsKQEAgLTU0MSwxOCArNTQ3LDEyIEBACiAJc3RydWN0IGRlbnRyeSAqc2Rfcm9vdF9kaXI7CiAKIAlzdHJ1Y3QgaW5vZGUgKnNkX2ppbmRleDsKLQlzdHJ1Y3QgaW5vZGUgKnNkX2ludW1faW5vZGU7CiAJc3RydWN0IGlub2RlICpzZF9zdGF0ZnNfaW5vZGU7Ci0Jc3RydWN0IGlub2RlICpzZF9pcl9pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKnNkX3NjX2lub2RlOwogCXN0cnVjdCBpbm9kZSAqc2RfcWNfaW5vZGU7CiAJc3RydWN0IGlub2RlICpzZF9yaW5kZXg7CiAJc3RydWN0IGlub2RlICpzZF9xdW90YV9pbm9kZTsKIAotCS8qIEludW0gc3R1ZmYgKi8KLQotCXN0cnVjdCBtdXRleCBzZF9pbnVtX211dGV4OwotCiAJLyogU3RhdEZTIHN0dWZmICovCiAKIAlzcGlubG9ja190IHNkX3N0YXRmc19zcGluOwpAQCAtNTgwLDcgKzU4MCw2IEBACiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2pvdXJuYWxfZ2g7CiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX2ppbm9kZV9naDsKIAotCXN0cnVjdCBnZnMyX2hvbGRlciBzZF9pcl9naDsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgc2Rfc2NfZ2g7CiAJc3RydWN0IGdmczJfaG9sZGVyIHNkX3FjX2doOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmMKaW5kZXggMmY5NGJkNy4uZmIxNWQzYiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgImFjbC5oIgogI2luY2x1ZGUgImJtYXAuaCIKICNpbmNsdWRlICJkaXIuaCIKLSNpbmNsdWRlICJlYXR0ci5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJnbG9wcy5oIgogI2luY2x1ZGUgImlub2RlLmgiCkBAIC01MTksMTM5ICs1MTksNiBAQAogCXJldHVybiBpbm9kZSA/IGlub2RlIDogRVJSX1BUUihlcnJvcik7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfaW51bV9yYW5nZV9pbihzdHJ1Y3QgZ2ZzMl9pbnVtX3JhbmdlX2hvc3QgKmlyLCBjb25zdCB2b2lkICpidWYpCi17Ci0JY29uc3Qgc3RydWN0IGdmczJfaW51bV9yYW5nZSAqc3RyID0gYnVmOwotCi0JaXItPmlyX3N0YXJ0ID0gYmU2NF90b19jcHUoc3RyLT5pcl9zdGFydCk7Ci0JaXItPmlyX2xlbmd0aCA9IGJlNjRfdG9fY3B1KHN0ci0+aXJfbGVuZ3RoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2ZzMl9pbnVtX3JhbmdlX291dChjb25zdCBzdHJ1Y3QgZ2ZzMl9pbnVtX3JhbmdlX2hvc3QgKmlyLCB2b2lkICpidWYpCi17Ci0Jc3RydWN0IGdmczJfaW51bV9yYW5nZSAqc3RyID0gYnVmOwotCi0Jc3RyLT5pcl9zdGFydCA9IGNwdV90b19iZTY0KGlyLT5pcl9zdGFydCk7Ci0Jc3RyLT5pcl9sZW5ndGggPSBjcHVfdG9fYmU2NChpci0+aXJfbGVuZ3RoKTsKLX0KLQotc3RhdGljIGludCBwaWNrX2Zvcm1hbF9pbm9fMShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0ICpmb3JtYWxfaW5vKQotewotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX2lyX2lub2RlKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBnZnMyX2ludW1fcmFuZ2VfaG9zdCBpcjsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCBSRVNfRElOT0RFLCAwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQltdXRleF9sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmYmgpOwotCWlmIChlcnJvcikgewotCQltdXRleF91bmxvY2soJnNkcC0+c2RfaW51bV9tdXRleCk7Ci0JCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQlnZnMyX2ludW1fcmFuZ2VfaW4oJmlyLCBiaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOwotCi0JaWYgKGlyLmlyX2xlbmd0aCkgewotCQkqZm9ybWFsX2lubyA9IGlyLmlyX3N0YXJ0Kys7Ci0JCWlyLmlyX2xlbmd0aC0tOwotCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgYmgsIDEpOwotCQlnZnMyX2ludW1fcmFuZ2Vfb3V0KCZpciwKLQkJCQkgICAgYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKTsKLQkJYnJlbHNlKGJoKTsKLQkJbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCQlnZnMyX3RyYW5zX2VuZChzZHApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlicmVsc2UoYmgpOwotCi0JbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBwaWNrX2Zvcm1hbF9pbm9fMihzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0ICpmb3JtYWxfaW5vKQotewotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShzZHAtPnNkX2lyX2lub2RlKTsKLQlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqbV9pcCA9IEdGUzJfSShzZHAtPnNkX2ludW1faW5vZGUpOwotCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBnZnMyX2ludW1fcmFuZ2VfaG9zdCBpcjsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChtX2lwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAyICogUkVTX0RJTk9ERSwgMCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQltdXRleF9sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCi0JZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmYmgpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZW5kX3RyYW5zOwotCi0JZ2ZzMl9pbnVtX3JhbmdlX2luKCZpciwgYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKTsKLQotCWlmICghaXIuaXJfbGVuZ3RoKSB7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqbV9iaDsKLQkJdTY0IHgsIHk7Ci0JCV9fYmU2NCB6OwotCi0JCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihtX2lwLCAmbV9iaCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X2JyZWxzZTsKLQotCQl6ID0gKihfX2JlNjQgKikobV9iaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX2Rpbm9kZSkpOwotCQl4ID0geSA9IGJlNjRfdG9fY3B1KHopOwotCQlpci5pcl9zdGFydCA9IHg7Ci0JCWlyLmlyX2xlbmd0aCA9IEdGUzJfSU5VTV9RVUFOVFVNOwotCQl4ICs9IEdGUzJfSU5VTV9RVUFOVFVNOwotCQlpZiAoeCA8IHkpCi0JCQlnZnMyX2NvbnNpc3RfaW5vZGUobV9pcCk7Ci0JCXogPSBjcHVfdG9fYmU2NCh4KTsKLQkJZ2ZzMl90cmFuc19hZGRfYmgobV9pcC0+aV9nbCwgbV9iaCwgMSk7Ci0JCSooX19iZTY0ICopKG1fYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpKSA9IHo7Ci0KLQkJYnJlbHNlKG1fYmgpOwotCX0KLQotCSpmb3JtYWxfaW5vID0gaXIuaXJfc3RhcnQrKzsKLQlpci5pcl9sZW5ndGgtLTsKLQotCWdmczJfdHJhbnNfYWRkX2JoKGlwLT5pX2dsLCBiaCwgMSk7Ci0JZ2ZzMl9pbnVtX3JhbmdlX291dCgmaXIsIGJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGdmczJfZGlub2RlKSk7Ci0KLW91dF9icmVsc2U6Ci0JYnJlbHNlKGJoKTsKLW91dF9lbmRfdHJhbnM6Ci0JbXV0ZXhfdW5sb2NrKCZzZHAtPnNkX2ludW1fbXV0ZXgpOwotCWdmczJfdHJhbnNfZW5kKHNkcCk7Ci1vdXQ6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgcGlja19mb3JtYWxfaW5vKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgKmludW0pCi17Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBwaWNrX2Zvcm1hbF9pbm9fMShzZHAsIGludW0pOwotCWlmIChlcnJvciA8PSAwKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQllcnJvciA9IHBpY2tfZm9ybWFsX2lub18yKHNkcCwgaW51bSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIC8qKgogICogY3JlYXRlX29rIC0gT0sgdG8gY3JlYXRlIGEgbmV3IG9uLWRpc2sgaW5vZGUgaGVyZT8KICAqIEBkaXA6ICBEaXJlY3RvcnkgaW4gd2hpY2ggZGlub2RlIGlzIHRvIGJlIGNyZWF0ZWQKQEAgLTczMSw3ICs1OTgsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfaXByZXNlcnY7CiAKLQkqbm9fYWRkciA9IGdmczJfYWxsb2NfZGkoZGlwLCBnZW5lcmF0aW9uKTsKKwllcnJvciA9IGdmczJfYWxsb2NfZGkoZGlwLCBub19hZGRyLCBnZW5lcmF0aW9uKTsKIAogCWdmczJfdHJhbnNfZW5kKHNkcCk7CiAKQEAgLTkyNCw3ICs3OTEsNiBAQAogCXNpemVfdCBsZW47CiAJdm9pZCAqdmFsdWU7CiAJY2hhciAqbmFtZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOwogCiAJZXJyID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgmaXAtPmlfaW5vZGUsICZkaXAtPmlfaW5vZGUsCiAJCQkJCSAgICZuYW1lLCAmdmFsdWUsICZsZW4pOwpAQCAtOTM1LDE2ICs4MDEsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0KLQllci5lcl90eXBlID0gR0ZTMl9FQVRZUEVfU0VDVVJJVFk7Ci0JZXIuZXJfbmFtZSA9IG5hbWU7Ci0JZXIuZXJfZGF0YSA9IHZhbHVlOwotCWVyLmVyX25hbWVfbGVuID0gc3RybGVuKG5hbWUpOwotCWVyLmVyX2RhdGFfbGVuID0gbGVuOwotCi0JZXJyID0gZ2ZzMl9lYV9zZXRfaShpcCwgJmVyKTsKLQorCWVyciA9IGdmczJfeGF0dHJfc2V0KCZpcC0+aV9pbm9kZSwgR0ZTMl9FQVRZUEVfU0VDVVJJVFksIG5hbWUsIHZhbHVlLCBsZW4sIDApOwogCWtmcmVlKHZhbHVlKTsKIAlrZnJlZShuYW1lKTsKIApAQCAtOTkxLDEzICs4NDgsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9ndW5sb2NrOwogCi0JZXJyb3IgPSBwaWNrX2Zvcm1hbF9pbm8oc2RwLCAmaW51bS5ub19mb3JtYWxfaW5vKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbF9ndW5sb2NrOwotCiAJZXJyb3IgPSBhbGxvY19kaW5vZGUoZGlwLCAmaW51bS5ub19hZGRyLCAmZ2VuZXJhdGlvbik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWxfZ3VubG9jazsKKwlpbnVtLm5vX2Zvcm1hbF9pbm8gPSBnZW5lcmF0aW9uOwogCiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xX251bShzZHAsIGludW0ubm9fYWRkciwgJmdmczJfaW5vZGVfZ2xvcHMsCiAJCQkJICBMTV9TVF9FWENMVVNJVkUsIEdMX1NLSVAsIGdocyArIDEpOwpAQCAtMTAwOCw5ICs4NjIsOCBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsX2d1bmxvY2syOwogCi0JaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChkaXItPmlfc2IsIElGMkRUKG1vZGUpLAotCQkJCQlpbnVtLm5vX2FkZHIsCi0JCQkJCWludW0ubm9fZm9ybWFsX2lubywgMCk7CisJaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChkaXItPmlfc2IsIElGMkRUKG1vZGUpLCBpbnVtLm5vX2FkZHIsCisJCQkJICBpbnVtLm5vX2Zvcm1hbF9pbm8sIDApOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZhaWxfZ3VubG9jazI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggN2JjM2M0NS4uNTJmYjZjMCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTg0LDcgKzg0LDYgQEAKIAogCWdmczJfdHVuZV9pbml0KCZzZHAtPnNkX3R1bmUpOwogCi0JbXV0ZXhfaW5pdCgmc2RwLT5zZF9pbnVtX211dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmc2RwLT5zZF9zdGF0ZnNfc3Bpbik7CiAKIAlzcGluX2xvY2tfaW5pdCgmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CkBAIC04MzMsMjEgKzgzMiwxMiBAQAogCWlmIChlcnJvcikKIAkJZ290byBmYWlsOwogCi0JLyogUmVhZCBpbiB0aGUgbWFzdGVyIGlub2RlIG51bWJlciBpbm9kZSAqLwotCXNkcC0+c2RfaW51bV9pbm9kZSA9IGdmczJfbG9va3VwX3NpbXBsZShtYXN0ZXIsICJpbnVtIik7Ci0JaWYgKElTX0VSUihzZHAtPnNkX2ludW1faW5vZGUpKSB7Ci0JCWVycm9yID0gUFRSX0VSUihzZHAtPnNkX2ludW1faW5vZGUpOwotCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBpbiBpbnVtIGlub2RlOiAlZFxuIiwgZXJyb3IpOwotCQlnb3RvIGZhaWxfam91cm5hbDsKLQl9Ci0KLQogCS8qIFJlYWQgaW4gdGhlIG1hc3RlciBzdGF0ZnMgaW5vZGUgKi8KIAlzZHAtPnNkX3N0YXRmc19pbm9kZSA9IGdmczJfbG9va3VwX3NpbXBsZShtYXN0ZXIsICJzdGF0ZnMiKTsKIAlpZiAoSVNfRVJSKHNkcC0+c2Rfc3RhdGZzX2lub2RlKSkgewogCQllcnJvciA9IFBUUl9FUlIoc2RwLT5zZF9zdGF0ZnNfaW5vZGUpOwogCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBpbiBzdGF0ZnMgaW5vZGU6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZmFpbF9pbnVtOworCQlnb3RvIGZhaWxfam91cm5hbDsKIAl9CiAKIAkvKiBSZWFkIGluIHRoZSByZXNvdXJjZSBpbmRleCBpbm9kZSAqLwpAQCAtODc2LDggKzg2Niw2IEBACiAJaXB1dChzZHAtPnNkX3JpbmRleCk7CiBmYWlsX3N0YXRmczoKIAlpcHV0KHNkcC0+c2Rfc3RhdGZzX2lub2RlKTsKLWZhaWxfaW51bToKLQlpcHV0KHNkcC0+c2RfaW51bV9pbm9kZSk7CiBmYWlsX2pvdXJuYWw6CiAJaW5pdF9qb3VybmFsKHNkcCwgVU5ETyk7CiBmYWlsOgpAQCAtOTA1LDIwICs4OTMsMTIgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCXNwcmludGYoYnVmLCAiaW51bV9yYW5nZSV1Iiwgc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKLQlzZHAtPnNkX2lyX2lub2RlID0gZ2ZzMl9sb29rdXBfc2ltcGxlKHBuLCBidWYpOwotCWlmIChJU19FUlIoc2RwLT5zZF9pcl9pbm9kZSkpIHsKLQkJZXJyb3IgPSBQVFJfRVJSKHNkcC0+c2RfaXJfaW5vZGUpOwotCQlmc19lcnIoc2RwLCAiY2FuJ3QgZmluZCBsb2NhbCBcImlyXCIgZmlsZTogJWRcbiIsIGVycm9yKTsKLQkJZ290byBmYWlsOwotCX0KLQogCXNwcmludGYoYnVmLCAic3RhdGZzX2NoYW5nZSV1Iiwgc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKIAlzZHAtPnNkX3NjX2lub2RlID0gZ2ZzMl9sb29rdXBfc2ltcGxlKHBuLCBidWYpOwogCWlmIChJU19FUlIoc2RwLT5zZF9zY19pbm9kZSkpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHNkcC0+c2Rfc2NfaW5vZGUpOwogCQlmc19lcnIoc2RwLCAiY2FuJ3QgZmluZCBsb2NhbCBcInNjXCIgZmlsZTogJWRcbiIsIGVycm9yKTsKLQkJZ290byBmYWlsX2lyX2k7CisJCWdvdG8gZmFpbDsKIAl9CiAKIAlzcHJpbnRmKGJ1ZiwgInF1b3RhX2NoYW5nZSV1Iiwgc2RwLT5zZF9qZGVzYy0+amRfamlkKTsKQEAgLTkzMiwyNyArOTEyLDE2IEBACiAJaXB1dChwbik7CiAJcG4gPSBOVUxMOwogCi0JaXAgPSBHRlMyX0koc2RwLT5zZF9pcl9pbm9kZSk7Ci0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsCi0JCQkJICAgTE1fU1RfRVhDTFVTSVZFLCAwLAotCQkJCSAgICZzZHAtPnNkX2lyX2doKTsKLQlpZiAoZXJyb3IpIHsKLQkJZnNfZXJyKHNkcCwgImNhbid0IGxvY2sgbG9jYWwgXCJpclwiIGZpbGU6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZmFpbF9xY19pOwotCX0KLQogCWlwID0gR0ZTMl9JKHNkcC0+c2Rfc2NfaW5vZGUpOwotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLAotCQkJCSAgIExNX1NUX0VYQ0xVU0lWRSwgMCwKKwllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChpcC0+aV9nbCwgTE1fU1RfRVhDTFVTSVZFLCAwLAogCQkJCSAgICZzZHAtPnNkX3NjX2doKTsKIAlpZiAoZXJyb3IpIHsKIAkJZnNfZXJyKHNkcCwgImNhbid0IGxvY2sgbG9jYWwgXCJzY1wiIGZpbGU6ICVkXG4iLCBlcnJvcik7Ci0JCWdvdG8gZmFpbF9pcl9naDsKKwkJZ290byBmYWlsX3FjX2k7CiAJfQogCiAJaXAgPSBHRlMyX0koc2RwLT5zZF9xY19pbm9kZSk7Ci0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsCi0JCQkJICAgTE1fU1RfRVhDTFVTSVZFLCAwLAorCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsCiAJCQkJICAgJnNkcC0+c2RfcWNfZ2gpOwogCWlmIChlcnJvcikgewogCQlmc19lcnIoc2RwLCAiY2FuJ3QgbG9jayBsb2NhbCBcInFjXCIgZmlsZTogJWRcbiIsIGVycm9yKTsKQEAgLTk2NSwxNCArOTM0LDEwIEBACiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2RfcWNfZ2gpOwogZmFpbF91dF9naDoKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF9zY19naCk7Ci1mYWlsX2lyX2doOgotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2lyX2doKTsKIGZhaWxfcWNfaToKIAlpcHV0KHNkcC0+c2RfcWNfaW5vZGUpOwogZmFpbF91dF9pOgogCWlwdXQoc2RwLT5zZF9zY19pbm9kZSk7Ci1mYWlsX2lyX2k6Ci0JaXB1dChzZHAtPnNkX2lyX2lub2RlKTsKIGZhaWw6CiAJaWYgKHBuKQogCQlpcHV0KHBuKTsKQEAgLTEwNjMsNyArMTAyOCw2IEBACiAKIAlscy0+bHNfb3BzID0gbG07CiAJbHMtPmxzX2ZpcnN0ID0gMTsKLQlscy0+bHNfaWQgPSAwOwogCiAJZm9yIChvcHRpb25zID0gYXJncy0+YXJfaG9zdGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiOiIpKTsgKSB7CiAJCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOwpAQCAtMTA4MSwxMCArMTA0NSw3IEBACiAJCQlscy0+bHNfamlkID0gb3B0aW9uOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lkOgotCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOwotCQkJbHMtPmxzX2lkID0gb3B0aW9uOworCQkJLyogT2Jzb2xldGUsIGJ1dCBsZWZ0IGZvciBiYWNrd2FyZCBjb21wYXQgcHVycG9zZXMgKi8KIAkJCWJyZWFrOwogCQljYXNlIE9wdF9maXJzdDoKIAkJCXJldCA9IG1hdGNoX2ludCgmdG1wWzBdLCAmb3B0aW9uKTsKQEAgLTExMzMsNiArMTA5NCwxNyBAQAogCQlsbS0+bG1fdW5tb3VudChzZHApOwogfQogCit2b2lkIGdmczJfb25saW5lX3VldmVudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2RwLT5zZF92ZnM7CisJY2hhciByb1syMF07CisJY2hhciBzcGVjdGF0b3JbMjBdOworCWNoYXIgKmVudnBbXSA9IHsgcm8sIHNwZWN0YXRvciwgTlVMTCB9OworCXNwcmludGYocm8sICJSRE9OTFk9JWQiLCAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpID8gMSA6IDApOworCXNwcmludGYoc3BlY3RhdG9yLCAiU1BFQ1RBVE9SPSVkIiwgc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvciA/IDEgOiAwKTsKKwlrb2JqZWN0X3VldmVudF9lbnYoJnNkcC0+c2Rfa29iaiwgS09CSl9PTkxJTkUsIGVudnApOworfQorCiAvKioKICAqIGZpbGxfc3VwZXIgLSBSZWFkIGluIHN1cGVyYmxvY2sKICAqIEBzYjogVGhlIFZGUyBzdXBlcmJsb2NrCkBAIC0xMTU3LDYgKzExMjksNyBAQAogCXNkcC0+c2RfYXJncy5hcl9xdW90YSA9IEdGUzJfUVVPVEFfREVGQVVMVDsKIAlzZHAtPnNkX2FyZ3MuYXJfZGF0YSA9IEdGUzJfREFUQV9ERUZBVUxUOwogCXNkcC0+c2RfYXJncy5hcl9jb21taXQgPSA2MDsKKwlzZHAtPnNkX2FyZ3MuYXJfZXJyb3JzID0gR0ZTMl9FUlJPUlNfREVGQVVMVDsKIAogCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJnNkcC0+c2RfYXJncywgZGF0YSk7CiAJaWYgKGVycm9yKSB7CkBAIC0xMTc0LDYgKzExNDcsNyBAQAogCXNiLT5zX21hZ2ljID0gR0ZTMl9NQUdJQzsKIAlzYi0+c19vcCA9ICZnZnMyX3N1cGVyX29wczsKIAlzYi0+c19leHBvcnRfb3AgPSAmZ2ZzMl9leHBvcnRfb3BzOworCXNiLT5zX3hhdHRyID0gZ2ZzMl94YXR0cl9oYW5kbGVyczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOwogCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIApAQCAtMTIzNiw3ICsxMjEwLDcgQEAKIAl9CiAKIAlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmbW91bnRfZ2gpOwotCisJZ2ZzMl9vbmxpbmVfdWV2ZW50KHNkcCk7CiAJcmV0dXJuIDA7CiAKIGZhaWxfdGhyZWFkczoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IGY4YmQyMGIuLmMzYWMxODAgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtMjYsOCArMjYsNyBAQAogI2luY2x1ZGUgImFjbC5oIgogI2luY2x1ZGUgImJtYXAuaCIKICNpbmNsdWRlICJkaXIuaCIKLSNpbmNsdWRlICJlYW9wcy5oIgotI2luY2x1ZGUgImVhdHRyLmgiCisjaW5jbHVkZSAieGF0dHIuaCIKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAibWV0YV9pby5oIgpAQCAtMzQ5LDcgKzM0OCw3IEBACiAKIAllcnJvciA9IGdmczJfdHJhbnNfYmVnaW4oc2RwLCAyKlJFU19ESU5PREUgKyBSRVNfTEVBRiArIFJFU19SR19CSVQsIDApOwogCWlmIChlcnJvcikKLQkJZ290byBvdXRfcmdycDsKKwkJZ290byBvdXRfZ3VubG9jazsKIAogCWVycm9yID0gZ2ZzMl9kaXJfZGVsKGRpcCwgJmRlbnRyeS0+ZF9uYW1lKTsKICAgICAgICAgaWYgKGVycm9yKQpAQCAtMTMwMiw2MCArMTMwMSw1MyBAQAogCQkJIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGdmczJfaG9sZGVyIGdoOworCWludCByZXQ7CiAKLQltZW1zZXQoJmVyLCAwLCBzaXplb2Yoc3RydWN0IGdmczJfZWFfcmVxdWVzdCkpOwotCWVyLmVyX3R5cGUgPSBnZnMyX2VhX25hbWUydHlwZShuYW1lLCAmZXIuZXJfbmFtZSk7Ci0JaWYgKGVyLmVyX3R5cGUgPT0gR0ZTMl9FQVRZUEVfVU5VU0VEKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JZXIuZXJfZGF0YSA9IChjaGFyICopZGF0YTsKLQllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihlci5lcl9uYW1lKTsKLQllci5lcl9kYXRhX2xlbiA9IHNpemU7Ci0JZXIuZXJfZmxhZ3MgPSBmbGFnczsKLQotCWdmczJfYXNzZXJ0X3dhcm4oR0ZTMl9TQihpbm9kZSksICEoZXIuZXJfZmxhZ3MgJiBHRlMyX0VSRl9NT0RFKSk7Ci0KLQlyZXR1cm4gZ2ZzMl9lYV9zZXQoR0ZTMl9JKGlub2RlKSwgJmVyKTsKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX3NldHhhdHRyKGRlbnRyeSwgbmFtZSwgZGF0YSwgc2l6ZSwgZmxhZ3MpOworCQlnZnMyX2dsb2NrX2RxKCZnaCk7CisJfQorCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGdmczJfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0JZXIuZXJfdHlwZSA9IGdmczJfZWFfbmFtZTJ0eXBlKG5hbWUsICZlci5lcl9uYW1lKTsKLQlpZiAoZXIuZXJfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQllci5lcl9kYXRhID0gZGF0YTsKLQllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihlci5lcl9uYW1lKTsKLQllci5lcl9kYXRhX2xlbiA9IHNpemU7Ci0KLQlyZXR1cm4gZ2ZzMl9lYV9nZXQoR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSksICZlcik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGdmczJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOwotCi0JbWVtc2V0KCZlciwgMCwgc2l6ZW9mKHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QpKTsKLQllci5lcl9kYXRhID0gKHNpemUpID8gYnVmZmVyIDogTlVMTDsKLQllci5lcl9kYXRhX2xlbiA9IHNpemU7Ci0KLQlyZXR1cm4gZ2ZzMl9lYV9saXN0KEdGUzJfSShkZW50cnktPmRfaW5vZGUpLCAmZXIpOworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX2dldHhhdHRyKGRlbnRyeSwgbmFtZSwgZGF0YSwgc2l6ZSk7CisJCWdmczJfZ2xvY2tfZHEoJmdoKTsKKwl9CisJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZnMyX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0IGVyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CisJaW50IHJldDsKIAotCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7Ci0JZXIuZXJfdHlwZSA9IGdmczJfZWFfbmFtZTJ0eXBlKG5hbWUsICZlci5lcl9uYW1lKTsKLQlpZiAoZXIuZXJfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihlci5lcl9uYW1lKTsKLQotCXJldHVybiBnZnMyX2VhX3JlbW92ZShHRlMyX0koZGVudHJ5LT5kX2lub2RlKSwgJmVyKTsKKwlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CisJcmV0ID0gZ2ZzMl9nbG9ja19ucSgmZ2gpOworCWlmIChyZXQgPT0gMCkgeworCQlyZXQgPSBnZW5lcmljX3JlbW92ZXhhdHRyKGRlbnRyeSwgbmFtZSk7CisJCWdmczJfZ2xvY2tfZHEoJmdoKTsKKwl9CisJZ2ZzMl9ob2xkZXJfdW5pbml0KCZnaCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBnZnMyX2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmllbWFwX2V4dGVudF9pbmZvICpmaWVpbmZvLApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCBmYmE3OTU3Li4yOGM1OTBiIDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtODU3LDcgKzg1Nyw4IEBACiAJCQkJCWdvdG8gc3RhcnRfbmV3X2V4dGVudDsKIAkJCQlpZiAoKHN0YXJ0ICsgbnJfc2VjdHMpICE9IGJsaykgewogCQkJCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LAotCQkJCQkJCSAgICBucl9zZWN0cywgR0ZQX05PRlMpOworCQkJCQkJCSAgICBucl9zZWN0cywgR0ZQX05PRlMsCisJCQkJCQkJICAgIERJU0NBUkRfRkxfQkFSUklFUik7CiAJCQkJCWlmIChydikKIAkJCQkJCWdvdG8gZmFpbDsKIAkJCQkJbnJfc2VjdHMgPSAwOwpAQCAtODcxLDcgKzg3Miw4IEBACiAJCX0KIAl9CiAJaWYgKG5yX3NlY3RzKSB7Ci0JCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIG5yX3NlY3RzLCBHRlBfTk9GUyk7CisJCXJ2ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQoYmRldiwgc3RhcnQsIG5yX3NlY3RzLCBHRlBfTk9GUywKKwkJCQkJIERJU0NBUkRfRkxfQkFSUklFUik7CiAJCWlmIChydikKIAkJCWdvdG8gZmFpbDsKIAl9CkBAIC0xMjU2LDcgKzEyNTgsNyBAQAogICogUmV0dXJuczogVGhlIGJsb2NrIHR5cGUgKEdGUzJfQkxLU1RfKikKICAqLwogCi11bnNpZ25lZCBjaGFyIGdmczJfZ2V0X2Jsb2NrX3R5cGUoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgdTY0IGJsb2NrKQorc3RhdGljIHVuc2lnbmVkIGNoYXIgZ2ZzMl9nZXRfYmxvY2tfdHlwZShzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCB1NjQgYmxvY2spCiB7CiAJc3RydWN0IGdmczJfYml0bWFwICpiaSA9IE5VTEw7CiAJdTMyIGxlbmd0aCwgcmdycF9ibG9jaywgYnVmX2Jsb2NrOwpAQCAtMTQ1OSw2ICsxNDYxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfcmdycF9lcnJvcihzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkKQoreworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcmdkLT5yZF9zYmQ7CisJZnNfd2FybihzZHAsICJyZ3JwICVsbHUgaGFzIGFuIGVycm9yLCBtYXJraW5nIGl0IHJlYWRvbmx5IHVudGlsIHVtb3VudFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZ2QtPnJkX2FkZHIpOworCWZzX3dhcm4oc2RwLCAidW1vdW50IG9uIGFsbCBub2RlcyBhbmQgcnVuIGZzY2suZ2ZzMiB0byBmaXggdGhlIGVycm9yXG4iKTsKKwlnZnMyX3JncnBfZHVtcChOVUxMLCByZ2QtPnJkX2dsKTsKKwlyZ2QtPnJkX2ZsYWdzIHw9IEdGUzJfUkRGX0VSUk9SOworfQorCiAvKioKICAqIGdmczJfYWxsb2NfYmxvY2sgLSBBbGxvY2F0ZSBvbmUgb3IgbW9yZSBibG9ja3MKICAqIEBpcDogdGhlIGlub2RlIHRvIGFsbG9jYXRlIHRoZSBibG9jayBmb3IKQEAgLTE1MjAsMjIgKzE1MzIsMjAgQEAKIAlyZXR1cm4gMDsKIAogcmdycF9lcnJvcjoKLQlmc193YXJuKHNkcCwgInJncnAgJWxsdSBoYXMgYW4gZXJyb3IsIG1hcmtpbmcgaXQgcmVhZG9ubHkgdW50aWwgdW1vdW50XG4iLAotCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZ2QtPnJkX2FkZHIpOwotCWZzX3dhcm4oc2RwLCAidW1vdW50IG9uIGFsbCBub2RlcyBhbmQgcnVuIGZzY2suZ2ZzMiB0byBmaXggdGhlIGVycm9yXG4iKTsKLQlnZnMyX3JncnBfZHVtcChOVUxMLCByZ2QtPnJkX2dsKTsKLQlyZ2QtPnJkX2ZsYWdzIHw9IEdGUzJfUkRGX0VSUk9SOworCWdmczJfcmdycF9lcnJvcihyZ2QpOwogCXJldHVybiAtRUlPOwogfQogCiAvKioKICAqIGdmczJfYWxsb2NfZGkgLSBBbGxvY2F0ZSBhIGRpbm9kZQogICogQGRpcDogdGhlIGRpcmVjdG9yeSB0aGF0IHRoZSBpbm9kZSBpcyBnb2luZyBpbgorICogQGJuOiB0aGUgYmxvY2sgbnVtYmVyIHdoaWNoIGlzIGFsbG9jYXRlZAorICogQGdlbmVyYXRpb246IHRoZSBnZW5lcmF0aW9uIG51bWJlciBvZiB0aGUgaW5vZGUKICAqCi0gKiBSZXR1cm5zOiB0aGUgYmxvY2sgYWxsb2NhdGVkCisgKiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3Mgb3IgZXJyb3IKICAqLwogCi11NjQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCB1NjQgKmdlbmVyYXRpb24pCitpbnQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqZGlwLCB1NjQgKmJuLCB1NjQgKmdlbmVyYXRpb24pCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKCZkaXAtPmlfaW5vZGUpOwogCXN0cnVjdCBnZnMyX2FsbG9jICphbCA9IGRpcC0+aV9hbGxvYzsKQEAgLTE1NDYsMTYgKzE1NTYsMjEgQEAKIAogCWJsayA9IHJnYmxrX3NlYXJjaChyZ2QsIHJnZC0+cmRfbGFzdF9hbGxvYywKIAkJCSAgIEdGUzJfQkxLU1RfRlJFRSwgR0ZTMl9CTEtTVF9ESU5PREUsICZuKTsKLQlCVUdfT04oYmxrID09IEJGSVROT0VOVCk7CisKKwkvKiBTaW5jZSBhbGwgYmxvY2tzIGFyZSByZXNlcnZlZCBpbiBhZHZhbmNlLCB0aGlzIHNob3VsZG4ndCBoYXBwZW4gKi8KKwlpZiAoYmxrID09IEJGSVROT0VOVCkKKwkJZ290byByZ3JwX2Vycm9yOwogCiAJcmdkLT5yZF9sYXN0X2FsbG9jID0gYmxrOwotCiAJYmxvY2sgPSByZ2QtPnJkX2RhdGEwICsgYmxrOworCWlmIChyZ2QtPnJkX2ZyZWUgPT0gMCkKKwkJZ290byByZ3JwX2Vycm9yOwogCi0JZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoc2RwLCByZ2QtPnJkX2ZyZWUpOwogCXJnZC0+cmRfZnJlZS0tOwogCXJnZC0+cmRfZGlub2RlcysrOwogCSpnZW5lcmF0aW9uID0gcmdkLT5yZF9pZ2VuZXJhdGlvbisrOworCWlmICgqZ2VuZXJhdGlvbiA9PSAwKQorCQkqZ2VuZXJhdGlvbiA9IHJnZC0+cmRfaWdlbmVyYXRpb24rKzsKIAlnZnMyX3RyYW5zX2FkZF9iaChyZ2QtPnJkX2dsLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgsIDEpOwogCWdmczJfcmdycF9vdXQocmdkLCByZ2QtPnJkX2JpdHNbMF0uYmlfYmgtPmJfZGF0YSk7CiAKQEAgLTE1NjgsNyArMTU4MywxMiBAQAogCXJnZC0+cmRfZnJlZV9jbG9uZS0tOwogCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3JpbmRleF9zcGluKTsKIAl0cmFjZV9nZnMyX2Jsb2NrX2FsbG9jKGRpcCwgYmxvY2ssIDEsIEdGUzJfQkxLU1RfRElOT0RFKTsKLQlyZXR1cm4gYmxvY2s7CisJKmJuID0gYmxvY2s7CisJcmV0dXJuIDA7CisKK3JncnBfZXJyb3I6CisJZ2ZzMl9yZ3JwX2Vycm9yKHJnZCk7CisJcmV0dXJuIC1FSU87CiB9CiAKIC8qKgpAQCAtMTY3Niw2ICsxNjk2LDQ2IEBACiB9CiAKIC8qKgorICogZ2ZzMl9jaGVja19ibGtfdHlwZSAtIENoZWNrIHRoZSB0eXBlIG9mIGEgYmxvY2sKKyAqIEBzZHA6IFRoZSBzdXBlcmJsb2NrCisgKiBAbm9fYWRkcjogVGhlIGJsb2NrIG51bWJlciB0byBjaGVjaworICogQHR5cGU6IFRoZSBibG9jayB0eXBlIHdlIGFyZSBsb29raW5nIGZvcgorICoKKyAqIFJldHVybnM6IDAgaWYgdGhlIGJsb2NrIHR5cGUgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgdHlwZQorICogICAgICAgICAgLUVTVEFMRSBpZiBpdCBkb2Vzbid0IG1hdGNoCisgKiAgICAgICAgICBvciAtdmUgZXJybm8gaWYgc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgY2hlY2tpbmcKKyAqLworCitpbnQgZ2ZzMl9jaGVja19ibGtfdHlwZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IG5vX2FkZHIsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBnZnMyX3JncnBkICpyZ2Q7CisJc3RydWN0IGdmczJfaG9sZGVyIHJpX2doLCByZ2RfZ2g7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZnMyX3JpbmRleF9ob2xkKHNkcCwgJnJpX2doKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbDsKKworCWVycm9yID0gLUVJTlZBTDsKKwlyZ2QgPSBnZnMyX2JsazJyZ3JwZChzZHAsIG5vX2FkZHIpOworCWlmICghcmdkKQorCQlnb3RvIGZhaWxfcmluZGV4OworCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocmdkLT5yZF9nbCwgTE1fU1RfU0hBUkVELCAwLCAmcmdkX2doKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9yaW5kZXg7CisKKwlpZiAoZ2ZzMl9nZXRfYmxvY2tfdHlwZShyZ2QsIG5vX2FkZHIpICE9IHR5cGUpCisJCWVycm9yID0gLUVTVEFMRTsKKworCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZyZ2RfZ2gpOworZmFpbF9yaW5kZXg6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnJpX2doKTsKK2ZhaWw6CisJcmV0dXJuIGVycm9yOworfQorCisvKioKICAqIGdmczJfcmxpc3RfYWRkIC0gYWRkIGEgUkcgdG8gYSBsaXN0IG9mIFJHcwogICogQHNkcDogdGhlIGZpbGVzeXN0ZW0KICAqIEBybGlzdDogdGhlIGxpc3Qgb2YgcmVzb3VyY2UgZ3JvdXBzCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JncnAuaCBiL2ZzL2dmczIvcmdycC5oCmluZGV4IDFlNzZmZjAuLmI0MTA2ZGQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmdycC5oCisrKyBiL2ZzL2dmczIvcmdycC5oCkBAIC00NCwxNSArNDQsMTUgQEAKIAogZXh0ZXJuIHZvaWQgZ2ZzMl9pbnBsYWNlX3JlbGVhc2Uoc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgZ2ZzMl9nZXRfYmxvY2tfdHlwZShzdHJ1Y3QgZ2ZzMl9yZ3JwZCAqcmdkLCB1NjQgYmxvY2spOwotCiBleHRlcm4gaW50IGdmczJfYWxsb2NfYmxvY2soc3RydWN0IGdmczJfaW5vZGUgKmlwLCB1NjQgKmJuLCB1bnNpZ25lZCBpbnQgKm4pOwotZXh0ZXJuIHU2NCBnZnMyX2FsbG9jX2RpKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0ICpnZW5lcmF0aW9uKTsKK2V4dGVybiBpbnQgZ2ZzMl9hbGxvY19kaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHU2NCAqYm4sIHU2NCAqZ2VuZXJhdGlvbik7CiAKIGV4dGVybiB2b2lkIGdmczJfZnJlZV9kYXRhKHN0cnVjdCBnZnMyX2lub2RlICppcCwgdTY0IGJzdGFydCwgdTMyIGJsZW4pOwogZXh0ZXJuIHZvaWQgZ2ZzMl9mcmVlX21ldGEoc3RydWN0IGdmczJfaW5vZGUgKmlwLCB1NjQgYnN0YXJ0LCB1MzIgYmxlbik7CiBleHRlcm4gdm9pZCBnZnMyX2ZyZWVfZGkoc3RydWN0IGdmczJfcmdycGQgKnJnZCwgc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKIGV4dGVybiB2b2lkIGdmczJfdW5saW5rX2RpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBnZnMyX2NoZWNrX2Jsa190eXBlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgbm9fYWRkciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdHlwZSk7CiAKIHN0cnVjdCBnZnMyX3JncnBfbGlzdCB7CiAJdW5zaWduZWQgaW50IHJsX3JncnBzOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zdXBlci5jIGIvZnMvZ2ZzMi9zdXBlci5jCmluZGV4IGY1MjJiYjAuLjBlYzNlYzYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3VwZXIuYworKysgYi9mcy9nZnMyL3N1cGVyLmMKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJ0cmFucy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJzeXMuaCIKLSNpbmNsdWRlICJlYXR0ci5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAKICNkZWZpbmUgYXJnc19uZXEoYTEsIGEyLCB4KSAoKGExKS0+YXJfIyN4ICE9IChhMiktPmFyXyMjeCkKIApAQCAtNjgsNiArNjgsOCBAQAogCU9wdF9kaXNjYXJkLAogCU9wdF9ub2Rpc2NhcmQsCiAJT3B0X2NvbW1pdCwKKwlPcHRfZXJyX3dpdGhkcmF3LAorCU9wdF9lcnJfcGFuaWMsCiAJT3B0X2Vycm9yLAogfTsKIApAQCAtOTcsNiArOTksOCBAQAogCXtPcHRfZGlzY2FyZCwgImRpc2NhcmQifSwKIAl7T3B0X25vZGlzY2FyZCwgIm5vZGlzY2FyZCJ9LAogCXtPcHRfY29tbWl0LCAiY29tbWl0PSVkIn0sCisJe09wdF9lcnJfd2l0aGRyYXcsICJlcnJvcnM9d2l0aGRyYXcifSwKKwl7T3B0X2Vycl9wYW5pYywgImVycm9ycz1wYW5pYyJ9LAogCXtPcHRfZXJyb3IsIE5VTEx9CiB9OwogCkBAIC0xNTIsNiArMTU2LDExIEBACiAJCQlhcmdzLT5hcl9sb2NhbGNhY2hpbmcgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2RlYnVnOgorCQkJaWYgKGFyZ3MtPmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19QQU5JQykgeworCQkJCWZzX2luZm8oc2RwLCAiLW8gZGVidWcgYW5kIC1vIGVycm9ycz1wYW5pYyAiCisJCQkJICAgICAgICJhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLlxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQlhcmdzLT5hcl9kZWJ1ZyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbm9kZWJ1ZzoKQEAgLTIwNSw2ICsyMTQsMTcgQEAKIAkJCQlyZXR1cm4gcnYgPyBydiA6IC1FSU5WQUw7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyX3dpdGhkcmF3OgorCQkJYXJncy0+YXJfZXJyb3JzID0gR0ZTMl9FUlJPUlNfV0lUSERSQVc7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZXJyX3BhbmljOgorCQkJaWYgKGFyZ3MtPmFyX2RlYnVnKSB7CisJCQkJZnNfaW5mbyhzZHAsICItbyBkZWJ1ZyBhbmQgLW8gZXJyb3JzPXBhbmljICIKKwkJCQkJImFyZSBtdXR1YWxseSBleGNsdXNpdmUuXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWFyZ3MtPmFyX2Vycm9ycyA9IEdGUzJfRVJST1JTX1BBTklDOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2Vycm9yOgogCQlkZWZhdWx0OgogCQkJZnNfaW5mbyhzZHAsICJpbnZhbGlkIG1vdW50IG9wdGlvbjogJXNcbiIsIG8pOwpAQCAtNzY4LDcgKzc4OCw2IEBACiAJLyogIFJlbGVhc2Ugc3R1ZmYgICovCiAKIAlpcHV0KHNkcC0+c2RfamluZGV4KTsKLQlpcHV0KHNkcC0+c2RfaW51bV9pbm9kZSk7CiAJaXB1dChzZHAtPnNkX3N0YXRmc19pbm9kZSk7CiAJaXB1dChzZHAtPnNkX3JpbmRleCk7CiAJaXB1dChzZHAtPnNkX3F1b3RhX2lub2RlKTsKQEAgLTc3OSwxMCArNzk4LDggQEAKIAlpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpIHsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2Rfam91cm5hbF9naCk7CiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2ppbm9kZV9naCk7Ci0JCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZzZHAtPnNkX2lyX2doKTsKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJnNkcC0+c2Rfc2NfZ2gpOwogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmc2RwLT5zZF9xY19naCk7Ci0JCWlwdXQoc2RwLT5zZF9pcl9pbm9kZSk7CiAJCWlwdXQoc2RwLT5zZF9zY19pbm9kZSk7CiAJCWlwdXQoc2RwLT5zZF9xY19pbm9kZSk7CiAJfQpAQCAtMTA4NCw2ICsxMTAxLDcgQEAKIAlndC0+Z3RfbG9nX2ZsdXNoX3NlY3MgPSBhcmdzLmFyX2NvbW1pdDsKIAlzcGluX3VubG9jaygmZ3QtPmd0X3NwaW4pOwogCisJZ2ZzMl9vbmxpbmVfdWV2ZW50KHNkcCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjUsNiArMTI0MywyMiBAQAogCWxmc2VjcyA9IHNkcC0+c2RfdHVuZS5ndF9sb2dfZmx1c2hfc2VjczsKIAlpZiAobGZzZWNzICE9IDYwKQogCQlzZXFfcHJpbnRmKHMsICIsY29tbWl0PSVkIiwgbGZzZWNzKTsKKwlpZiAoYXJncy0+YXJfZXJyb3JzICE9IEdGUzJfRVJST1JTX0RFRkFVTFQpIHsKKwkJY29uc3QgY2hhciAqc3RhdGU7CisKKwkJc3dpdGNoIChhcmdzLT5hcl9lcnJvcnMpIHsKKwkJY2FzZSBHRlMyX0VSUk9SU19XSVRIRFJBVzoKKwkJCXN0YXRlID0gIndpdGhkcmF3IjsKKwkJCWJyZWFrOworCQljYXNlIEdGUzJfRVJST1JTX1BBTklDOgorCQkJc3RhdGUgPSAicGFuaWMiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdGF0ZSA9ICJ1bmtub3duIjsKKwkJCWJyZWFrOworCQl9CisJCXNlcV9wcmludGYocywgIixlcnJvcnM9JXMiLCBzdGF0ZSk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xMjUyLDYgKzEyODYsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJZXJyb3IgPSBnZnMyX2NoZWNrX2Jsa190eXBlKHNkcCwgaXAtPmlfbm9fYWRkciwgR0ZTMl9CTEtTVF9VTkxJTktFRCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dF90cnVuY2F0ZTsKKwogCWdmczJfZ2xvY2tfZHFfd2FpdCgmaXAtPmlfaW9wZW5fZ2gpOwogCWdmczJfaG9sZGVyX3JlaW5pdChMTV9TVF9FWENMVVNJVkUsIExNX0ZMQUdfVFJZXzFDQiB8IEdMX05PQ0FDSEUsICZpcC0+aV9pb3Blbl9naCk7CiAJZXJyb3IgPSBnZnMyX2dsb2NrX25xKCZpcC0+aV9pb3Blbl9naCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmggYi9mcy9nZnMyL3N1cGVyLmgKaW5kZXggMjJlMDQxNy4uMjM1ZGIzNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5oCisrKyBiL2ZzL2dmczIvc3VwZXIuaApAQCAtMjUsNyArMjUsNyBAQAogCXJldHVybiB4OwogfQogCi12b2lkIGdmczJfamluZGV4X2ZyZWUoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIHZvaWQgZ2ZzMl9qaW5kZXhfZnJlZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKIGV4dGVybiBpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpkYXRhKTsKIApAQCAtMzYsNyArMzYsNyBAQAogCQkJCSAgICAgc3RydWN0IGdmczJfaW5vZGUgKippcHApOwogCiBleHRlcm4gaW50IGdmczJfbWFrZV9mc19ydyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci0KK2V4dGVybiB2b2lkIGdmczJfb25saW5lX3VldmVudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiBleHRlcm4gaW50IGdmczJfc3RhdGZzX2luaXQoc3RydWN0IGdmczJfc2JkICpzZHApOwogZXh0ZXJuIHZvaWQgZ2ZzMl9zdGF0ZnNfY2hhbmdlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzNjQgdG90YWwsIHM2NCBmcmVlLAogCQkJICAgICAgIHM2NCBkaW5vZGVzKTsKQEAgLTU0LDYgKzU0LDcgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZ2ZzMl9leHBvcnRfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGdmczJfc3VwZXJfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBnZnMyX2RvcHM7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgKmdmczJfeGF0dHJfaGFuZGxlcnNbXTsKIAogI2VuZGlmIC8qIF9fU1VQRVJfRE9UX0hfXyAqLwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCBhN2NiZmJkLi40NDYzMjk3IDEwMDY0NAotLS0gYS9mcy9nZnMyL3N5cy5jCisrKyBiL2ZzL2dmczIvc3lzLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0zMTksMTIgKzMyMCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHNzaXplX3QgbGtpZF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbHMtPmxzX2lkKTsKLX0KLQogc3RhdGljIHNzaXplX3QgbGtmaXJzdF9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKQEAgLTM4OSw3ICszODQsNiBAQAogR0RMTV9BVFRSKHByb3RvX25hbWUsCQkwNDQ0LCBwcm90b19uYW1lX3Nob3csCQlOVUxMKTsKIEdETE1fQVRUUihibG9jaywJCTA2NDQsIGJsb2NrX3Nob3csCQlibG9ja19zdG9yZSk7CiBHRExNX0FUVFIod2l0aGRyYXcsCQkwNjQ0LCB3aXRoZHJhd19zaG93LAkJd2l0aGRyYXdfc3RvcmUpOwotR0RMTV9BVFRSKGlkLAkJCTA0NDQsIGxraWRfc2hvdywJCU5VTEwpOwogR0RMTV9BVFRSKGppZCwJCQkwNDQ0LCBqaWRfc2hvdywJCQlOVUxMKTsKIEdETE1fQVRUUihmaXJzdCwJCTA0NDQsIGxrZmlyc3Rfc2hvdywJCU5VTEwpOwogR0RMTV9BVFRSKGZpcnN0X2RvbmUsCQkwNDQ0LCBmaXJzdF9kb25lX3Nob3csCQlOVUxMKTsKQEAgLTQwMSw3ICszOTUsNiBAQAogCSZnZGxtX2F0dHJfcHJvdG9fbmFtZS5hdHRyLAogCSZnZGxtX2F0dHJfYmxvY2suYXR0ciwKIAkmZ2RsbV9hdHRyX3dpdGhkcmF3LmF0dHIsCi0JJmdkbG1fYXR0cl9pZC5hdHRyLAogCSZnZGxtX2F0dHJfamlkLmF0dHIsCiAJJmdkbG1fYXR0cl9maXJzdC5hdHRyLAogCSZnZGxtX2F0dHJfZmlyc3RfZG9uZS5hdHRyLApAQCAtNTE5LDcgKzUxMiwxNCBAQAogCiBpbnQgZ2ZzMl9zeXNfZnNfYWRkKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogeworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKIAlpbnQgZXJyb3I7CisJY2hhciByb1syMF07CisJY2hhciBzcGVjdGF0b3JbMjBdOworCWNoYXIgKmVudnBbXSA9IHsgcm8sIHNwZWN0YXRvciwgTlVMTCB9OworCisJc3ByaW50ZihybywgIlJET05MWT0lZCIsIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgPyAxIDogMCk7CisJc3ByaW50ZihzcGVjdGF0b3IsICJTUEVDVEFUT1I9JWQiLCBzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yID8gMSA6IDApOwogCiAJc2RwLT5zZF9rb2JqLmtzZXQgPSBnZnMyX2tzZXQ7CiAJZXJyb3IgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmc2RwLT5zZF9rb2JqLCAmZ2ZzMl9rdHlwZSwgTlVMTCwKQEAgLTUzNSw5ICs1MzUsMTcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF90dW5lOwogCi0Ja29iamVjdF91ZXZlbnQoJnNkcC0+c2Rfa29iaiwgS09CSl9BREQpOworCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmsoJnNkcC0+c2Rfa29iaiwKKwkJCQkgICZkaXNrX3RvX2RldihzYi0+c19iZGV2LT5iZF9kaXNrKS0+a29iaiwKKwkJCQkgICJkZXZpY2UiKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF9sb2NrX21vZHVsZTsKKworCWtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0FERCwgZW52cCk7CiAJcmV0dXJuIDA7CiAKK2ZhaWxfbG9ja19tb2R1bGU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CiBmYWlsX3R1bmU6CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZ0dW5lX2dyb3VwKTsKIGZhaWxfcmVnOgpAQCAtNTQ5LDEyICs1NTcsMTIgQEAKIAogdm9pZCBnZnMyX3N5c19mc19kZWwoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CisJc3lzZnNfcmVtb3ZlX2xpbmsoJnNkcC0+c2Rfa29iaiwgImRldmljZSIpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmdHVuZV9ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2NrX21vZHVsZV9ncm91cCk7CiAJa29iamVjdF9wdXQoJnNkcC0+c2Rfa29iaik7CiB9CiAKLQogc3RhdGljIGludCBnZnMyX3VldmVudChzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCSAgICAgICBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CkBAIC01NjMsNiArNTcxLDggQEAKIAogCWFkZF91ZXZlbnRfdmFyKGVudiwgIkxPQ0tUQUJMRT0lcyIsIHNkcC0+c2RfdGFibGVfbmFtZSk7CiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1BST1RPPSVzIiwgc2RwLT5zZF9wcm90b19uYW1lKTsKKwlpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCisJCWFkZF91ZXZlbnRfdmFyKGVudiwgIkpPVVJOQUxJRD0ldSIsIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpOwogCWlmIChnZnMyX3V1aWRfdmFsaWQodXVpZCkpIHsKIAkJYWRkX3VldmVudF92YXIoZW52LCAiVVVJRD0lMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYLSUwMlglMDJYLSIKIAkJCSAgICAgICAiJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKQEAgLTU3OCw3ICs1ODgsNiBAQAogCS51ZXZlbnQgPSBnZnMyX3VldmVudCwKIH07CiAKLQogaW50IGdmczJfc3lzX2luaXQodm9pZCkKIHsKIAlnZnMyX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJnZnMyIiwgJmdmczJfdWV2ZW50X29wcywgZnNfa29iaik7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3V0aWwuYyBiL2ZzL2dmczIvdXRpbC5jCmluZGV4IDlkMTJiMTEuLmY2YTdlZmEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdXRpbC5jCisrKyBiL2ZzL2dmczIvdXRpbC5jCkBAIC0zOCwyNCArMzgsMzAgQEAKIAljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBscy0+bHNfb3BzOwogCXZhX2xpc3QgYXJnczsKIAotCWlmICh0ZXN0X2FuZF9zZXRfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKQorCWlmIChzZHAtPnNkX2FyZ3MuYXJfZXJyb3JzID09IEdGUzJfRVJST1JTX1dJVEhEUkFXICYmCisJICAgIHRlc3RfYW5kX3NldF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpCiAJCXJldHVybiAwOwogCiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAl2cHJpbnRrKGZtdCwgYXJncyk7CiAJdmFfZW5kKGFyZ3MpOwogCi0JZnNfZXJyKHNkcCwgImFib3V0IHRvIHdpdGhkcmF3IHRoaXMgZmlsZSBzeXN0ZW1cbiIpOwotCUJVR19PTihzZHAtPnNkX2FyZ3MuYXJfZGVidWcpOworCWlmIChzZHAtPnNkX2FyZ3MuYXJfZXJyb3JzID09IEdGUzJfRVJST1JTX1dJVEhEUkFXKSB7CisJCWZzX2VycihzZHAsICJhYm91dCB0byB3aXRoZHJhdyB0aGlzIGZpbGUgc3lzdGVtXG4iKTsKKwkJQlVHX09OKHNkcC0+c2RfYXJncy5hcl9kZWJ1Zyk7CiAKLQlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX09GRkxJTkUpOworCQlrb2JqZWN0X3VldmVudCgmc2RwLT5zZF9rb2JqLCBLT0JKX09GRkxJTkUpOwogCi0JaWYgKGxtLT5sbV91bm1vdW50KSB7Ci0JCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHVubW91bnRcbiIpOwotCQlsbS0+bG1fdW5tb3VudChzZHApOworCQlpZiAobG0tPmxtX3VubW91bnQpIHsKKwkJCWZzX2VycihzZHAsICJ0ZWxsaW5nIExNIHRvIHVubW91bnRcbiIpOworCQkJbG0tPmxtX3VubW91bnQoc2RwKTsKKwkJfQorCQlmc19lcnIoc2RwLCAid2l0aGRyYXduXG4iKTsKKwkJZHVtcF9zdGFjaygpOwogCX0KLQlmc19lcnIoc2RwLCAid2l0aGRyYXduXG4iKTsKLQlkdW1wX3N0YWNrKCk7CisKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19QQU5JQykKKwkJcGFuaWMoIkdGUzI6IGZzaWQ9JXM6IHBhbmljIHJlcXVlc3RlZC5cbiIsIHNkcC0+c2RfZnNuYW1lKTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTkzLDE3ICs5OSwyNCBAQAogCQkJZ2ZzMl90dW5lX2dldChzZHAsIGd0X2NvbXBsYWluX3NlY3MpICogSFopKQogCQlyZXR1cm4gLTI7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HCi0JICAgICAgICJHRlMyOiBmc2lkPSVzOiB3YXJuaW5nOiBhc3NlcnRpb24gXCIlc1wiIGZhaWxlZFxuIgotCSAgICAgICAiR0ZTMjogZnNpZD0lczogICBmdW5jdGlvbiA9ICVzLCBmaWxlID0gJXMsIGxpbmUgPSAldVxuIiwKLQkgICAgICAgc2RwLT5zZF9mc25hbWUsIGFzc2VydGlvbiwKLQkgICAgICAgc2RwLT5zZF9mc25hbWUsIGZ1bmN0aW9uLCBmaWxlLCBsaW5lKTsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19XSVRIRFJBVykKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIkdGUzI6IGZzaWQ9JXM6IHdhcm5pbmc6IGFzc2VydGlvbiBcIiVzXCIgZmFpbGVkXG4iCisJCSAgICAgICAiR0ZTMjogZnNpZD0lczogICBmdW5jdGlvbiA9ICVzLCBmaWxlID0gJXMsIGxpbmUgPSAldVxuIiwKKwkJICAgICAgIHNkcC0+c2RfZnNuYW1lLCBhc3NlcnRpb24sCisJCSAgICAgICBzZHAtPnNkX2ZzbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUpOwogCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9kZWJ1ZykKIAkJQlVHKCk7CiAJZWxzZQogCQlkdW1wX3N0YWNrKCk7CiAKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX2Vycm9ycyA9PSBHRlMyX0VSUk9SU19QQU5JQykKKwkJcGFuaWMoIkdGUzI6IGZzaWQ9JXM6IHdhcm5pbmc6IGFzc2VydGlvbiBcIiVzXCIgZmFpbGVkXG4iCisJCSAgICAgICJHRlMyOiBmc2lkPSVzOiAgIGZ1bmN0aW9uID0gJXMsIGZpbGUgPSAlcywgbGluZSA9ICV1XG4iLAorCQkgICAgICBzZHAtPnNkX2ZzbmFtZSwgYXNzZXJ0aW9uLAorCQkgICAgICBzZHAtPnNkX2ZzbmFtZSwgZnVuY3Rpb24sIGZpbGUsIGxpbmUpOworCiAJc2RwLT5zZF9sYXN0X3dhcm5pbmcgPSBqaWZmaWVzOwogCiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9lYXR0ci5jIGIvZnMvZ2ZzMi94YXR0ci5jCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIGZzL2dmczIvZWF0dHIuYwpyZW5hbWUgdG8gZnMvZ2ZzMi94YXR0ci5jCmluZGV4IDA3ZWE5NTIuLjhhMGY4ZWYgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZWF0dHIuYworKysgYi9mcy9nZnMyL3hhdHRyLmMKQEAgLTE4LDggKzE4LDcgQEAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCiAjaW5jbHVkZSAiYWNsLmgiCi0jaW5jbHVkZSAiZWFvcHMuaCIKLSNpbmNsdWRlICJlYXR0ci5oIgorI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAiZ2xvY2suaCIKICNpbmNsdWRlICJpbm9kZS5oIgogI2luY2x1ZGUgIm1ldGFfaW8uaCIKQEAgLTM4LDI2ICszNywzMiBAQAogICogUmV0dXJuczogMSBpZiB0aGUgRUEgc2hvdWxkIGJlIHN0dWZmZWQKICAqLwogCi1zdGF0aWMgaW50IGVhX2NhbGNfc2l6ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsCitzdGF0aWMgaW50IGVhX2NhbGNfc2l6ZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IG5zaXplLCBzaXplX3QgZHNpemUsCiAJCQl1bnNpZ25lZCBpbnQgKnNpemUpCiB7Ci0JKnNpemUgPSBHRlMyX0VBUkVRX1NJWkVfU1RVRkZFRChlcik7Ci0JaWYgKCpzaXplIDw9IHNkcC0+c2RfamJzaXplKQorCXVuc2lnbmVkIGludCBqYnNpemUgPSBzZHAtPnNkX2pic2l6ZTsKKworCS8qIFN0dWZmZWQgKi8KKwkqc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIpICsgbnNpemUgKyBkc2l6ZSwgOCk7CisKKwlpZiAoKnNpemUgPD0gamJzaXplKQogCQlyZXR1cm4gMTsKIAotCSpzaXplID0gR0ZTMl9FQVJFUV9TSVpFX1VOU1RVRkZFRChzZHAsIGVyKTsKKwkvKiBVbnN0dWZmZWQgKi8KKwkqc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIpICsgbnNpemUgKworCQkgICAgICAoc2l6ZW9mKF9fYmU2NCkgKiBESVZfUk9VTkRfVVAoZHNpemUsIGpic2l6ZSkpLCA4KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVhX2NoZWNrX3NpemUoc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQorc3RhdGljIGludCBlYV9jaGVja19zaXplKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgbnNpemUsIHNpemVfdCBkc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAotCWlmIChlci0+ZXJfZGF0YV9sZW4gPiBHRlMyX0VBX01BWF9EQVRBX0xFTikKKwlpZiAoZHNpemUgPiBHRlMyX0VBX01BWF9EQVRBX0xFTikKIAkJcmV0dXJuIC1FUkFOR0U7CiAKLQllYV9jYWxjX3NpemUoc2RwLCBlciwgJnNpemUpOworCWVhX2NhbGNfc2l6ZShzZHAsIG5zaXplLCBkc2l6ZSwgJnNpemUpOwogCiAJLyogVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aCA1MTIgYnl0ZSBibG9ja3MgKi8KIAlpZiAoc2l6ZSA+IHNkcC0+c2RfamJzaXplKQpAQCAtMTUxLDcgKzE1Niw5IEBACiB9CiAKIHN0cnVjdCBlYV9maW5kIHsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplZl9lcjsKKwlpbnQgdHlwZTsKKwljb25zdCBjaGFyICpuYW1lOworCXNpemVfdCBuYW1lbDsKIAlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWZfZWw7CiB9OwogCkBAIC0xNjAsMTQgKzE2NywxMyBAQAogCQkgICAgIHZvaWQgKnByaXZhdGUpCiB7CiAJc3RydWN0IGVhX2ZpbmQgKmVmID0gcHJpdmF0ZTsKLQlzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplciA9IGVmLT5lZl9lcjsKIAogCWlmIChlYS0+ZWFfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpCiAJCXJldHVybiAwOwogCi0JaWYgKGVhLT5lYV90eXBlID09IGVyLT5lcl90eXBlKSB7Ci0JCWlmIChlYS0+ZWFfbmFtZV9sZW4gPT0gZXItPmVyX25hbWVfbGVuICYmCi0JCSAgICAhbWVtY21wKEdGUzJfRUEyTkFNRShlYSksIGVyLT5lcl9uYW1lLCBlYS0+ZWFfbmFtZV9sZW4pKSB7CisJaWYgKGVhLT5lYV90eXBlID09IGVmLT50eXBlKSB7CisJCWlmIChlYS0+ZWFfbmFtZV9sZW4gPT0gZWYtPm5hbWVsICYmCisJCSAgICAhbWVtY21wKEdGUzJfRUEyTkFNRShlYSksIGVmLT5uYW1lLCBlYS0+ZWFfbmFtZV9sZW4pKSB7CiAJCQlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwgPSBlZi0+ZWZfZWw7CiAJCQlnZXRfYmgoYmgpOwogCQkJZWwtPmVsX2JoID0gYmg7CkBAIC0xODAsMTMgKzE4NiwxNSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgZ2ZzMl9lYV9maW5kKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIsCitpbnQgZ2ZzMl9lYV9maW5kKHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCiB7CiAJc3RydWN0IGVhX2ZpbmQgZWY7CiAJaW50IGVycm9yOwogCi0JZWYuZWZfZXIgPSBlcjsKKwllZi50eXBlID0gdHlwZTsKKwllZi5uYW1lID0gbmFtZTsKKwllZi5uYW1lbCA9IHN0cmxlbihuYW1lKTsKIAllZi5lZl9lbCA9IGVsOwogCiAJbWVtc2V0KGVsLCAwLCBzaXplb2Yoc3RydWN0IGdmczJfZWFfbG9jYXRpb24pKTsKQEAgLTM0NCw2ICszNTIsMjAgQEAKIAl1bnNpZ25lZCBpbnQgZWlfc2l6ZTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdmczJfZWFfc3RybGVuKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEpCit7CisJc3dpdGNoIChlYS0+ZWFfdHlwZSkgeworCWNhc2UgR0ZTMl9FQVRZUEVfVVNSOgorCQlyZXR1cm4gNSArIGVhLT5lYV9uYW1lX2xlbiArIDE7CisJY2FzZSBHRlMyX0VBVFlQRV9TWVM6CisJCXJldHVybiA3ICsgZWEtPmVhX25hbWVfbGVuICsgMTsKKwljYXNlIEdGUzJfRUFUWVBFX1NFQ1VSSVRZOgorCQlyZXR1cm4gOSArIGVhLT5lYV9uYW1lX2xlbiArIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiBzdGF0aWMgaW50IGVhX2xpc3RfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCiAJCSAgICAgc3RydWN0IGdmczJfZWFfaGVhZGVyICplYSwgc3RydWN0IGdmczJfZWFfaGVhZGVyICpwcmV2LAogCQkgICAgIHZvaWQgKnByaXZhdGUpCkBAIC0zOTIsMjEgKzQxNCwyNSBAQAogfQogCiAvKioKLSAqIGdmczJfZWFfbGlzdCAtCi0gKiBAaXA6Ci0gKiBAZXI6CisgKiBnZnMyX2xpc3R4YXR0ciAtIExpc3QgZ2ZzMiBleHRlbmRlZCBhdHRyaWJ1dGVzCisgKiBAZGVudHJ5OiBUaGUgZGVudHJ5IHdob3NlIGlub2RlIHdlIGFyZSBpbnRlcmVzdGVkIGluCisgKiBAYnVmZmVyOiBUaGUgYnVmZmVyIHRvIHdyaXRlIHRoZSByZXN1bHRzCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgogICoKICAqIFJldHVybnM6IGFjdHVhbCBzaXplIG9mIGRhdGEgb24gc3VjY2VzcywgLWVycm5vIG9uIGVycm9yCiAgKi8KIAotaW50IGdmczJfZWFfbGlzdChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQorc3NpemVfdCBnZnMyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGRlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IGdmczJfZWFfcmVxdWVzdCBlcjsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIWVyLT5lcl9kYXRhIHx8ICFlci0+ZXJfZGF0YV9sZW4pIHsKLQkJZXItPmVyX2RhdGEgPSBOVUxMOwotCQllci0+ZXJfZGF0YV9sZW4gPSAwOworCW1lbXNldCgmZXIsIDAsIHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0KSk7CisJaWYgKHNpemUpIHsKKwkJZXIuZXJfZGF0YSA9IGJ1ZmZlcjsKKwkJZXIuZXJfZGF0YV9sZW4gPSBzaXplOwogCX0KIAogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIExNX0ZMQUdfQU5ZLCAmaV9naCk7CkBAIC00MTQsNyArNDQwLDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKGlwLT5pX2VhdHRyKSB7Ci0JCXN0cnVjdCBlYV9saXN0IGVpID0geyAuZWlfZXIgPSBlciwgLmVpX3NpemUgPSAwIH07CisJCXN0cnVjdCBlYV9saXN0IGVpID0geyAuZWlfZXIgPSAmZXIsIC5laV9zaXplID0gMCB9OwogCiAJCWVycm9yID0gZWFfZm9yZWFjaChpcCwgZWFfbGlzdF9pLCAmZWkpOwogCQlpZiAoIWVycm9yKQpAQCAtNDkxLDg0ICs1MTcsNjEgQEAKIH0KIAogaW50IGdmczJfZWFfZ2V0X2NvcHkoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCi0JCSAgICAgY2hhciAqZGF0YSkKKwkJICAgICBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSkKIHsKKwlpbnQgcmV0OworCXNpemVfdCBsZW4gPSBHRlMyX0VBX0RBVEFfTEVOKGVsLT5lbF9lYSk7CisJaWYgKGxlbiA+IHNpemUpCisJCXJldHVybiAtRVJBTkdFOworCiAJaWYgKEdGUzJfRUFfSVNfU1RVRkZFRChlbC0+ZWxfZWEpKSB7Ci0JCW1lbWNweShkYXRhLCBHRlMyX0VBMkRBVEEoZWwtPmVsX2VhKSwgR0ZTMl9FQV9EQVRBX0xFTihlbC0+ZWxfZWEpKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCXJldHVybiBlYV9nZXRfdW5zdHVmZmVkKGlwLCBlbC0+ZWxfZWEsIGRhdGEpOworCQltZW1jcHkoZGF0YSwgR0ZTMl9FQTJEQVRBKGVsLT5lbF9lYSksIGxlbik7CisJCXJldHVybiBsZW47CisJfQorCXJldCA9IGVhX2dldF91bnN0dWZmZWQoaXAsIGVsLT5lbF9lYSwgZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGxlbjsKIH0KIAogLyoqCi0gKiBnZnMyX2VhX2dldF9pIC0KLSAqIEBpcDogVGhlIEdGUzIgaW5vZGUKLSAqIEBlcjogVGhlIHJlcXVlc3Qgc3RydWN0dXJlCisgKiBnZnMyX3hhdHRyX2dldCAtIEdldCBhIEdGUzIgZXh0ZW5kZWQgYXR0cmlidXRlCisgKiBAaW5vZGU6IFRoZSBpbm9kZQorICogQHR5cGU6IFRoZSB0eXBlIG9mIGV4dGVuZGVkIGF0dHJpYnV0ZQorICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIEBidWZmZXI6IFRoZSBidWZmZXIgdG8gd3JpdGUgdGhlIHJlc3VsdCBpbnRvCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlcgogICoKICAqIFJldHVybnM6IGFjdHVhbCBzaXplIG9mIGRhdGEgb24gc3VjY2VzcywgLWVycm5vIG9uIGVycm9yCiAgKi8KIAotaW50IGdmczJfZWFfZ2V0X2koc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKK2ludCBnZnMyX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKKwlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwogCWludCBlcnJvcjsKIAogCWlmICghaXAtPmlfZWF0dHIpCiAJCXJldHVybiAtRU5PREFUQTsKKwlpZiAoc3RybGVuKG5hbWUpID4gR0ZTMl9FQV9NQVhfTkFNRV9MRU4pCisJCXJldHVybiAtRUlOVkFMOwogCi0JZXJyb3IgPSBnZnMyX2VhX2ZpbmQoaXAsIGVyLCAmZWwpOworCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCB0eXBlLCBuYW1lLCAmZWwpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWlmICghZWwuZWxfZWEpCiAJCXJldHVybiAtRU5PREFUQTsKLQotCWlmIChlci0+ZXJfZGF0YV9sZW4pIHsKLQkJaWYgKEdGUzJfRUFfREFUQV9MRU4oZWwuZWxfZWEpID4gZXItPmVyX2RhdGFfbGVuKQotCQkJZXJyb3IgPSAgLUVSQU5HRTsKLQkJZWxzZQotCQkJZXJyb3IgPSBnZnMyX2VhX2dldF9jb3B5KGlwLCAmZWwsIGVyLT5lcl9kYXRhKTsKLQl9Ci0JaWYgKCFlcnJvcikKKwlpZiAoc2l6ZSkKKwkJZXJyb3IgPSBnZnMyX2VhX2dldF9jb3B5KGlwLCAmZWwsIGJ1ZmZlciwgc2l6ZSk7CisJZWxzZQogCQllcnJvciA9IEdGUzJfRUFfREFUQV9MRU4oZWwuZWxfZWEpOwotCiAJYnJlbHNlKGVsLmVsX2JoKTsKIAogCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCi0gKiBnZnMyX2VhX2dldCAtCi0gKiBAaXA6IFRoZSBHRlMyIGlub2RlCi0gKiBAZXI6IFRoZSByZXF1ZXN0IHN0cnVjdHVyZQotICoKLSAqIFJldHVybnM6IGFjdHVhbCBzaXplIG9mIGRhdGEgb24gc3VjY2VzcywgLWVycm5vIG9uIGVycm9yCi0gKi8KLQotaW50IGdmczJfZWFfZ2V0KHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpCi17Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGlfZ2g7Ci0JaW50IGVycm9yOwotCi0JaWYgKCFlci0+ZXJfbmFtZV9sZW4gfHwKLQkgICAgZXItPmVyX25hbWVfbGVuID4gR0ZTMl9FQV9NQVhfTkFNRV9MRU4pCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghZXItPmVyX2RhdGEgfHwgIWVyLT5lcl9kYXRhX2xlbikgewotCQllci0+ZXJfZGF0YSA9IE5VTEw7Ci0JCWVyLT5lcl9kYXRhX2xlbiA9IDA7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWVycm9yID0gZ2ZzMl9lYV9vcHNbZXItPmVyX3R5cGVdLT5lb19nZXQoaXAsIGVyKTsKLQotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCiAgKiBlYV9hbGxvY19ibGsgLSBhbGxvY2F0ZXMgYSBuZXcgYmxvY2sgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCiAgKiBAaXA6IEEgcG9pbnRlciB0byB0aGUgaW5vZGUgdGhhdCdzIGdldHRpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcwogICogQGJocDogUG9pbnRlciB0byBwb2ludGVyIHRvIGEgc3RydWN0IGJ1ZmZlcl9oZWFkCkBAIC03MTMsMTIgKzcxNiw2IEBACiAKIAllcnJvciA9IGdmczJfbWV0YV9pbm9kZV9idWZmZXIoaXAsICZkaWJoKTsKIAlpZiAoIWVycm9yKSB7Ci0JCWlmIChlci0+ZXJfZmxhZ3MgJiBHRlMyX0VSRl9NT0RFKSB7Ci0JCQlnZnMyX2Fzc2VydF93aXRoZHJhdyhHRlMyX1NCKCZpcC0+aV9pbm9kZSksCi0JCQkJCSAgICAoaXAtPmlfaW5vZGUuaV9tb2RlICYgU19JRk1UKSA9PQotCQkJCQkgICAgKGVyLT5lcl9tb2RlICYgU19JRk1UKSk7Ci0JCQlpcC0+aV9pbm9kZS5pX21vZGUgPSBlci0+ZXJfbW9kZTsKLQkJfQogCQlpcC0+aV9pbm9kZS5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CiAJCWdmczJfZGlub2RlX291dChpcCwgZGliaC0+Yl9kYXRhKTsKQEAgLTc2MiwxNSArNzU5LDIzIEBACiAgKiBSZXR1cm5zOiBlcnJubwogICovCiAKLXN0YXRpYyBpbnQgZWFfaW5pdChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQorc3RhdGljIGludCBlYV9pbml0KHN0cnVjdCBnZnMyX2lub2RlICppcCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKQogeworCXN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgZXI7CiAJdW5zaWduZWQgaW50IGpic2l6ZSA9IEdGUzJfU0IoJmlwLT5pX2lub2RlKS0+c2RfamJzaXplOwogCXVuc2lnbmVkIGludCBibGtzID0gMTsKIAotCWlmIChHRlMyX0VBUkVRX1NJWkVfU1RVRkZFRChlcikgPiBqYnNpemUpCi0JCWJsa3MgKz0gRElWX1JPVU5EX1VQKGVyLT5lcl9kYXRhX2xlbiwgamJzaXplKTsKKwllci5lcl90eXBlID0gdHlwZTsKKwllci5lcl9uYW1lID0gbmFtZTsKKwllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwllci5lcl9kYXRhID0gKHZvaWQgKilkYXRhOworCWVyLmVyX2RhdGFfbGVuID0gc2l6ZTsKIAotCXJldHVybiBlYV9hbGxvY19za2VsZXRvbihpcCwgZXIsIGJsa3MsIGVhX2luaXRfaSwgTlVMTCk7CisJaWYgKEdGUzJfRUFSRVFfU0laRV9TVFVGRkVEKCZlcikgPiBqYnNpemUpCisJCWJsa3MgKz0gRElWX1JPVU5EX1VQKGVyLmVyX2RhdGFfbGVuLCBqYnNpemUpOworCisJcmV0dXJuIGVhX2FsbG9jX3NrZWxldG9uKGlwLCAmZXIsIGJsa3MsIGVhX2luaXRfaSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKmVhX3NwbGl0X2VhKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWEpCkBAIC04NDgsMTIgKzg1Myw2IEBACiAJZXJyb3IgPSBnZnMyX21ldGFfaW5vZGVfYnVmZmVyKGlwLCAmZGliaCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dDsKLQotCWlmIChlci0+ZXJfZmxhZ3MgJiBHRlMyX0VSRl9NT0RFKSB7Ci0JCWdmczJfYXNzZXJ0X3dpdGhkcmF3KEdGUzJfU0IoJmlwLT5pX2lub2RlKSwKLQkJCShpcC0+aV9pbm9kZS5pX21vZGUgJiBTX0lGTVQpID09IChlci0+ZXJfbW9kZSAmIFNfSUZNVCkpOwotCQlpcC0+aV9pbm9kZS5pX21vZGUgPSBlci0+ZXJfbW9kZTsKLQl9CiAJaXAtPmlfaW5vZGUuaV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlnZnMyX3RyYW5zX2FkZF9iaChpcC0+aV9nbCwgZGliaCwgMSk7CiAJZ2ZzMl9kaW5vZGVfb3V0KGlwLCBkaWJoLT5iX2RhdGEpOwpAQCAtODk0LDcgKzg5Myw4IEBACiAJaW50IHN0dWZmZWQ7CiAJaW50IGVycm9yOwogCi0Jc3R1ZmZlZCA9IGVhX2NhbGNfc2l6ZShHRlMyX1NCKCZpcC0+aV9pbm9kZSksIGVzLT5lc19lciwgJnNpemUpOworCXN0dWZmZWQgPSBlYV9jYWxjX3NpemUoR0ZTMl9TQigmaXAtPmlfaW5vZGUpLCBlcy0+ZXNfZXItPmVyX25hbWVfbGVuLAorCQkJICAgICAgIGVzLT5lc19lci0+ZXJfZGF0YV9sZW4sICZzaXplKTsKIAogCWlmIChlYS0+ZWFfdHlwZSA9PSBHRlMyX0VBVFlQRV9VTlVTRUQpIHsKIAkJaWYgKEdGUzJfRUFfUkVDX0xFTihlYSkgPCBzaXplKQpAQCAtMTAwNSwxNSArMTAwNSwyMiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBlYV9zZXRfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyLAotCQkgICAgc3RydWN0IGdmczJfZWFfbG9jYXRpb24gKmVsKQorc3RhdGljIGludCBlYV9zZXRfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwpCiB7CisJc3RydWN0IGdmczJfZWFfcmVxdWVzdCBlcjsKIAlzdHJ1Y3QgZWFfc2V0IGVzOwogCXVuc2lnbmVkIGludCBibGtzID0gMjsKIAlpbnQgZXJyb3I7CiAKKwllci5lcl90eXBlID0gdHlwZTsKKwllci5lcl9uYW1lID0gbmFtZTsKKwllci5lcl9kYXRhID0gKHZvaWQgKil2YWx1ZTsKKwllci5lcl9uYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwllci5lcl9kYXRhX2xlbiA9IHNpemU7CisKIAltZW1zZXQoJmVzLCAwLCBzaXplb2Yoc3RydWN0IGVhX3NldCkpOwotCWVzLmVzX2VyID0gZXI7CisJZXMuZXNfZXIgPSAmZXI7CiAJZXMuZXNfZWwgPSBlbDsKIAogCWVycm9yID0gZWFfZm9yZWFjaChpcCwgZWFfc2V0X3NpbXBsZSwgJmVzKTsKQEAgLTEwMjQsMTAgKzEwMzEsMTAgQEAKIAogCWlmICghKGlwLT5pX2Rpc2tmbGFncyAmIEdGUzJfRElGX0VBX0lORElSRUNUKSkKIAkJYmxrcysrOwotCWlmIChHRlMyX0VBUkVRX1NJWkVfU1RVRkZFRChlcikgPiBHRlMyX1NCKCZpcC0+aV9pbm9kZSktPnNkX2pic2l6ZSkKLQkJYmxrcyArPSBESVZfUk9VTkRfVVAoZXItPmVyX2RhdGFfbGVuLCBHRlMyX1NCKCZpcC0+aV9pbm9kZSktPnNkX2pic2l6ZSk7CisJaWYgKEdGUzJfRUFSRVFfU0laRV9TVFVGRkVEKCZlcikgPiBHRlMyX1NCKCZpcC0+aV9pbm9kZSktPnNkX2pic2l6ZSkKKwkJYmxrcyArPSBESVZfUk9VTkRfVVAoZXIuZXJfZGF0YV9sZW4sIEdGUzJfU0IoJmlwLT5pX2lub2RlKS0+c2RfamJzaXplKTsKIAotCXJldHVybiBlYV9hbGxvY19za2VsZXRvbihpcCwgZXIsIGJsa3MsIGVhX3NldF9ibG9jaywgZWwpOworCXJldHVybiBlYV9hbGxvY19za2VsZXRvbihpcCwgJmVyLCBibGtzLCBlYV9zZXRfYmxvY2ssIGVsKTsKIH0KIAogc3RhdGljIGludCBlYV9zZXRfcmVtb3ZlX3Vuc3R1ZmZlZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsCkBAIC0xMDM5LDc1ICsxMDQ2LDcgQEAKIAkJCQkgICAgIEdGUzJfRUEyTkVYVChlbC0+ZWxfcHJldikgPT0gZWwtPmVsX2VhKTsKIAl9CiAKLQlyZXR1cm4gZWFfcmVtb3ZlX3Vuc3R1ZmZlZChpcCwgZWwtPmVsX2JoLCBlbC0+ZWxfZWEsIGVsLT5lbF9wcmV2LDApOwotfQotCi1pbnQgZ2ZzMl9lYV9zZXRfaShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX3JlcXVlc3QgKmVyKQotewotCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIGVsOwotCWludCBlcnJvcjsKLQotCWlmICghaXAtPmlfZWF0dHIpIHsKLQkJaWYgKGVyLT5lcl9mbGFncyAmIFhBVFRSX1JFUExBQ0UpCi0JCQlyZXR1cm4gLUVOT0RBVEE7Ci0JCXJldHVybiBlYV9pbml0KGlwLCBlcik7Ci0JfQotCi0JZXJyb3IgPSBnZnMyX2VhX2ZpbmQoaXAsIGVyLCAmZWwpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKGVsLmVsX2VhKSB7Ci0JCWlmIChpcC0+aV9kaXNrZmxhZ3MgJiBHRlMyX0RJRl9BUFBFTkRPTkxZKSB7Ci0JCQlicmVsc2UoZWwuZWxfYmgpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQotCi0JCWVycm9yID0gLUVFWElTVDsKLQkJaWYgKCEoZXItPmVyX2ZsYWdzICYgWEFUVFJfQ1JFQVRFKSkgewotCQkJaW50IHVuc3R1ZmZlZCA9ICFHRlMyX0VBX0lTX1NUVUZGRUQoZWwuZWxfZWEpOwotCQkJZXJyb3IgPSBlYV9zZXRfaShpcCwgZXIsICZlbCk7Ci0JCQlpZiAoIWVycm9yICYmIHVuc3R1ZmZlZCkKLQkJCQllYV9zZXRfcmVtb3ZlX3Vuc3R1ZmZlZChpcCwgJmVsKTsKLQkJfQotCi0JCWJyZWxzZShlbC5lbF9iaCk7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgPSAtRU5PREFUQTsKLQkJaWYgKCEoZXItPmVyX2ZsYWdzICYgWEFUVFJfUkVQTEFDRSkpCi0JCQllcnJvciA9IGVhX3NldF9pKGlwLCBlciwgTlVMTCk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi1pbnQgZ2ZzMl9lYV9zZXQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9yZXF1ZXN0ICplcikKLXsKLQlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWVyLT5lcl9uYW1lX2xlbiB8fCBlci0+ZXJfbmFtZV9sZW4gPiBHRlMyX0VBX01BWF9OQU1FX0xFTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFlci0+ZXJfZGF0YSB8fCAhZXItPmVyX2RhdGFfbGVuKSB7Ci0JCWVyLT5lcl9kYXRhID0gTlVMTDsKLQkJZXItPmVyX2RhdGFfbGVuID0gMDsKLQl9Ci0JZXJyb3IgPSBlYV9jaGVja19zaXplKEdGUzJfU0IoJmlwLT5pX2lub2RlKSwgZXIpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmlfZ2gpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JaWYgKElTX0lNTVVUQUJMRSgmaXAtPmlfaW5vZGUpKQotCQllcnJvciA9IC1FUEVSTTsKLQllbHNlCi0JCWVycm9yID0gZ2ZzMl9lYV9vcHNbZXItPmVyX3R5cGVdLT5lb19zZXQoaXAsIGVyKTsKLQotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpX2doKTsKLQotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gZWFfcmVtb3ZlX3Vuc3R1ZmZlZChpcCwgZWwtPmVsX2JoLCBlbC0+ZWxfZWEsIGVsLT5lbF9wcmV2LCAwKTsKIH0KIAogc3RhdGljIGludCBlYV9yZW1vdmVfc3R1ZmZlZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCkKQEAgLTExMzEsOCArMTA3MCw5IEBACiAKIAkJaWYgKEdGUzJfRUFfSVNfTEFTVChlYSkpCiAJCQlwcmV2LT5lYV9mbGFncyB8PSBHRlMyX0VBRkxBR19MQVNUOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCWVhLT5lYV90eXBlID0gR0ZTMl9FQVRZUEVfVU5VU0VEOworCX0KIAogCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwogCWlmICghZXJyb3IpIHsKQEAgLTExNDcsMTUgKzEwODcsMjkgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBnZnMyX2VhX3JlbW92ZV9pKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpCisvKioKKyAqIGdmczJfeGF0dHJfcmVtb3ZlIC0gUmVtb3ZlIGEgR0ZTMiBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIEBpbm9kZTogVGhlIGlub2RlCisgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZQorICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqCisgKiBUaGlzIGlzIG5vdCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIFZGUyBzaW5jZSB3ZSB1c2UgdGhlIChjb21tb24pCisgKiBzY2hlbWUgb2YgbWFraW5nIGEgInNldCB3aXRoIE5VTEwgZGF0YSIgbWVhbiBhIHJlbW92ZSByZXF1ZXN0LiBOb3RlCisgKiB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBzZXQgd2l0aCB6ZXJvIGxlbmd0aCBkYXRhLgorICoKKyAqIFJldHVybnM6IDAsIG9yIGVycm5vIG9uIGZhaWx1cmUKKyAqLworCitzdGF0aWMgaW50IGdmczJfeGF0dHJfcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQogeworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAJc3RydWN0IGdmczJfZWFfbG9jYXRpb24gZWw7CiAJaW50IGVycm9yOwogCiAJaWYgKCFpcC0+aV9lYXR0cikKIAkJcmV0dXJuIC1FTk9EQVRBOwogCi0JZXJyb3IgPSBnZnMyX2VhX2ZpbmQoaXAsIGVyLCAmZWwpOworCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCB0eXBlLCBuYW1lLCAmZWwpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCWlmICghZWwuZWxfZWEpCkBAIC0xMTY0LDggKzExMTgsNyBAQAogCWlmIChHRlMyX0VBX0lTX1NUVUZGRUQoZWwuZWxfZWEpKQogCQllcnJvciA9IGVhX3JlbW92ZV9zdHVmZmVkKGlwLCAmZWwpOwogCWVsc2UKLQkJZXJyb3IgPSBlYV9yZW1vdmVfdW5zdHVmZmVkKGlwLCBlbC5lbF9iaCwgZWwuZWxfZWEsIGVsLmVsX3ByZXYsCi0JCQkJCSAgICAwKTsKKwkJZXJyb3IgPSBlYV9yZW1vdmVfdW5zdHVmZmVkKGlwLCBlbC5lbF9iaCwgZWwuZWxfZWEsIGVsLmVsX3ByZXYsIDApOwogCiAJYnJlbHNlKGVsLmVsX2JoKTsKIApAQCAtMTE3MywzMSArMTEyNiw3MCBAQAogfQogCiAvKioKLSAqIGdmczJfZWFfcmVtb3ZlIC0gc2V0cyAob3IgY3JlYXRlcyBvciByZXBsYWNlcykgYW4gZXh0ZW5kZWQgYXR0cmlidXRlCi0gKiBAaXA6IHBvaW50ZXIgdG8gdGhlIGlub2RlIG9mIHRoZSB0YXJnZXQgZmlsZQotICogQGVyOiByZXF1ZXN0IGluZm9ybWF0aW9uCisgKiBnZnMyX3hhdHRyX3NldCAtIFNldCAob3IgcmVtb3ZlKSBhIEdGUzIgZXh0ZW5kZWQgYXR0cmlidXRlCisgKiBAaW5vZGU6IFRoZSBpbm9kZQorICogQHR5cGU6IFRoZSB0eXBlIG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKKyAqIEBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlCisgKiBAdmFsdWU6IFRoZSB2YWx1ZSBvZiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlIChOVUxMIGZvciByZW1vdmUpCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIEB2YWx1ZSBhcmd1bWVudAorICogQGZsYWdzOiBDcmVhdGUgb3IgUmVwbGFjZQogICoKLSAqIFJldHVybnM6IGVycm5vCisgKiBTZWUgZ2ZzMl94YXR0cl9yZW1vdmUoKSBmb3IgZGV0YWlscyBvZiB0aGUgcmVtb3ZhbCBvZiB4YXR0cnMuCisgKgorICogUmV0dXJuczogMCBvciBlcnJubyBvbiBmYWlsdXJlCiAgKi8KIAotaW50IGdmczJfZWFfcmVtb3ZlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgc3RydWN0IGdmczJfZWFfcmVxdWVzdCAqZXIpCitpbnQgZ2ZzMl94YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewotCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihpbm9kZSk7CisJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKKwlzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiBlbDsKKwl1bnNpZ25lZCBpbnQgbmFtZWwgPSBzdHJsZW4obmFtZSk7CiAJaW50IGVycm9yOwogCi0JaWYgKCFlci0+ZXJfbmFtZV9sZW4gfHwgZXItPmVyX25hbWVfbGVuID4gR0ZTMl9FQV9NQVhfTkFNRV9MRU4pCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChJU19JTU1VVEFCTEUoaW5vZGUpIHx8IElTX0FQUEVORChpbm9kZSkpCisJCXJldHVybiAtRVBFUk07CisJaWYgKG5hbWVsID4gR0ZTMl9FQV9NQVhfTkFNRV9MRU4pCisJCXJldHVybiAtRVJBTkdFOwogCi0JZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmlfZ2gpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gZ2ZzMl94YXR0cl9yZW1vdmUoaW5vZGUsIHR5cGUsIG5hbWUpOworCisJaWYgKGVhX2NoZWNrX3NpemUoc2RwLCBuYW1lbCwgc2l6ZSkpCisJCXJldHVybiAtRVJBTkdFOworCisJaWYgKCFpcC0+aV9lYXR0cikgeworCQlpZiAoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKQorCQkJcmV0dXJuIC1FTk9EQVRBOworCQlyZXR1cm4gZWFfaW5pdChpcCwgdHlwZSwgbmFtZSwgdmFsdWUsIHNpemUpOworCX0KKworCWVycm9yID0gZ2ZzMl9lYV9maW5kKGlwLCB0eXBlLCBuYW1lLCAmZWwpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JaWYgKElTX0lNTVVUQUJMRSgmaXAtPmlfaW5vZGUpIHx8IElTX0FQUEVORCgmaXAtPmlfaW5vZGUpKQotCQllcnJvciA9IC1FUEVSTTsKLQllbHNlCi0JCWVycm9yID0gZ2ZzMl9lYV9vcHNbZXItPmVyX3R5cGVdLT5lb19yZW1vdmUoaXAsIGVyKTsKKwlpZiAoZWwuZWxfZWEpIHsKKwkJaWYgKGlwLT5pX2Rpc2tmbGFncyAmIEdGUzJfRElGX0FQUEVORE9OTFkpIHsKKwkJCWJyZWxzZShlbC5lbF9iaCk7CisJCQlyZXR1cm4gLUVQRVJNOworCQl9CiAKLQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CisJCWVycm9yID0gLUVFWElTVDsKKwkJaWYgKCEoZmxhZ3MgJiBYQVRUUl9DUkVBVEUpKSB7CisJCQlpbnQgdW5zdHVmZmVkID0gIUdGUzJfRUFfSVNfU1RVRkZFRChlbC5lbF9lYSk7CisJCQllcnJvciA9IGVhX3NldF9pKGlwLCB0eXBlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgJmVsKTsKKwkJCWlmICghZXJyb3IgJiYgdW5zdHVmZmVkKQorCQkJCWVhX3NldF9yZW1vdmVfdW5zdHVmZmVkKGlwLCAmZWwpOworCQl9CisKKwkJYnJlbHNlKGVsLmVsX2JoKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gLUVOT0RBVEE7CisJaWYgKCEoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKSkKKwkJZXJyb3IgPSBlYV9zZXRfaShpcCwgdHlwZSwgbmFtZSwgdmFsdWUsIHNpemUsIE5VTEwpOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTUwMywzICsxNDk1LDY0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgaW50IGdmczJfeGF0dHJfdXNlcl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXJldHVybiBnZnMyX3hhdHRyX2dldChpbm9kZSwgR0ZTMl9FQVRZUEVfVVNSLCBuYW1lLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGdmczJfeGF0dHJfdXNlcl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlyZXR1cm4gZ2ZzMl94YXR0cl9zZXQoaW5vZGUsIEdGUzJfRUFUWVBFX1VTUiwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBnZnMyX3hhdHRyX3N5c3RlbV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gZ2ZzMl94YXR0cl9nZXQoaW5vZGUsIEdGUzJfRUFUWVBFX1NZUywgbmFtZSwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludCBnZnMyX3hhdHRyX3N5c3RlbV9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGdmczJfeGF0dHJfc2V0KGlub2RlLCBHRlMyX0VBVFlQRV9TWVMsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCXJldHVybiBnZnMyX3hhdHRyX2dldChpbm9kZSwgR0ZTMl9FQVRZUEVfU0VDVVJJVFksIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2ZzMl94YXR0cl9zZWN1cml0eV9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlyZXR1cm4gZ2ZzMl94YXR0cl9zZXQoaW5vZGUsIEdGUzJfRUFUWVBFX1NFQ1VSSVRZLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl91c2VyX2hhbmRsZXIgPSB7CisJLnByZWZpeCA9IFhBVFRSX1VTRVJfUFJFRklYLAorCS5nZXQgICAgPSBnZnMyX3hhdHRyX3VzZXJfZ2V0LAorCS5zZXQgICAgPSBnZnMyX3hhdHRyX3VzZXJfc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGdmczJfeGF0dHJfc2VjdXJpdHlfaGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfU0VDVVJJVFlfUFJFRklYLAorCS5nZXQgICAgPSBnZnMyX3hhdHRyX3NlY3VyaXR5X2dldCwKKwkuc2V0ICAgID0gZ2ZzMl94YXR0cl9zZWN1cml0eV9zZXQsCit9OworCitzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgZ2ZzMl94YXR0cl9zeXN0ZW1faGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfU1lTVEVNX1BSRUZJWCwKKwkuZ2V0ICAgID0gZ2ZzMl94YXR0cl9zeXN0ZW1fZ2V0LAorCS5zZXQgICAgPSBnZnMyX3hhdHRyX3N5c3RlbV9zZXQsCit9OworCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqZ2ZzMl94YXR0cl9oYW5kbGVyc1tdID0geworCSZnZnMyX3hhdHRyX3VzZXJfaGFuZGxlciwKKwkmZ2ZzMl94YXR0cl9zZWN1cml0eV9oYW5kbGVyLAorCSZnZnMyX3hhdHRyX3N5c3RlbV9oYW5kbGVyLAorCU5VTEwsCit9OworCmRpZmYgLS1naXQgYS9mcy9nZnMyL3hhdHRyLmggYi9mcy9nZnMyL3hhdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkZmQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2dmczIveGF0dHIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBTaXN0aW5hIFNvZnR3YXJlLCBJbmMuICAxOTk3LTIwMDMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCisgKiBtb2RpZnksIGNvcHksIG9yIHJlZGlzdHJpYnV0ZSBpdCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaWZuZGVmIF9fRUFUVFJfRE9UX0hfXworI2RlZmluZSBfX0VBVFRSX0RPVF9IX18KKworc3RydWN0IGdmczJfaW5vZGU7CitzdHJ1Y3QgaWF0dHI7CisKKyNkZWZpbmUgR0ZTMl9FQV9SRUNfTEVOKGVhKSBiZTMyX3RvX2NwdSgoZWEpLT5lYV9yZWNfbGVuKQorI2RlZmluZSBHRlMyX0VBX0RBVEFfTEVOKGVhKSBiZTMyX3RvX2NwdSgoZWEpLT5lYV9kYXRhX2xlbikKKworI2RlZmluZSBHRlMyX0VBX1NJWkUoZWEpIFwKK0FMSUdOKHNpemVvZihzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIpICsgKGVhKS0+ZWFfbmFtZV9sZW4gKyBcCisgICAgICAoKEdGUzJfRUFfSVNfU1RVRkZFRChlYSkpID8gR0ZTMl9FQV9EQVRBX0xFTihlYSkgOiBcCisJCQkJICAoc2l6ZW9mKF9fYmU2NCkgKiAoZWEpLT5lYV9udW1fcHRycykpLCA4KQorCisjZGVmaW5lIEdGUzJfRUFfSVNfU1RVRkZFRChlYSkgKCEoZWEpLT5lYV9udW1fcHRycykKKyNkZWZpbmUgR0ZTMl9FQV9JU19MQVNUKGVhKSAoKGVhKS0+ZWFfZmxhZ3MgJiBHRlMyX0VBRkxBR19MQVNUKQorCisjZGVmaW5lIEdGUzJfRUFSRVFfU0laRV9TVFVGRkVEKGVyKSBcCitBTElHTihzaXplb2Yoc3RydWN0IGdmczJfZWFfaGVhZGVyKSArIChlciktPmVyX25hbWVfbGVuICsgKGVyKS0+ZXJfZGF0YV9sZW4sIDgpCisKKyNkZWZpbmUgR0ZTMl9FQTJOQU1FKGVhKSAoKGNoYXIgKikoKHN0cnVjdCBnZnMyX2VhX2hlYWRlciAqKShlYSkgKyAxKSkKKyNkZWZpbmUgR0ZTMl9FQTJEQVRBKGVhKSAoR0ZTMl9FQTJOQU1FKGVhKSArIChlYSktPmVhX25hbWVfbGVuKQorCisjZGVmaW5lIEdGUzJfRUEyREFUQVBUUlMoZWEpIFwKKygoX19iZTY0ICopKEdGUzJfRUEyTkFNRShlYSkgKyBBTElHTigoZWEpLT5lYV9uYW1lX2xlbiwgOCkpKQorCisjZGVmaW5lIEdGUzJfRUEyTkVYVChlYSkgXAorKChzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKikoKGNoYXIgKikoZWEpICsgR0ZTMl9FQV9SRUNfTEVOKGVhKSkpCisKKyNkZWZpbmUgR0ZTMl9FQV9CSDJGSVJTVChiaCkgXAorKChzdHJ1Y3QgZ2ZzMl9lYV9oZWFkZXIgKikoKGJoKS0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBnZnMyX21ldGFfaGVhZGVyKSkpCisKK3N0cnVjdCBnZnMyX2VhX3JlcXVlc3QgeworCWNvbnN0IGNoYXIgKmVyX25hbWU7CisJY2hhciAqZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgZXJfbmFtZV9sZW47CisJdW5zaWduZWQgaW50IGVyX2RhdGFfbGVuOworCXVuc2lnbmVkIGludCBlcl90eXBlOyAvKiBHRlMyX0VBVFlQRV8uLi4gKi8KK307CisKK3N0cnVjdCBnZnMyX2VhX2xvY2F0aW9uIHsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmVsX2JoOworCXN0cnVjdCBnZnMyX2VhX2hlYWRlciAqZWxfZWE7CisJc3RydWN0IGdmczJfZWFfaGVhZGVyICplbF9wcmV2OworfTsKKworZXh0ZXJuIGludCBnZnMyX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gaW50IGdmczJfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CitleHRlcm4gc3NpemVfdCBnZnMyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBnZnMyX2VhX2RlYWxsb2Moc3RydWN0IGdmczJfaW5vZGUgKmlwKTsKKworLyogRXhwb3J0ZWQgdG8gYWNsLmMgKi8KKworZXh0ZXJuIGludCBnZnMyX2VhX2ZpbmQoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCXN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCk7CitleHRlcm4gaW50IGdmczJfZWFfZ2V0X2NvcHkoc3RydWN0IGdmczJfaW5vZGUgKmlwLCBzdHJ1Y3QgZ2ZzMl9lYV9sb2NhdGlvbiAqZWwsCisJCQkgICAgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBnZnMyX2VhX2FjbF9jaG1vZChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIHN0cnVjdCBnZnMyX2VhX2xvY2F0aW9uICplbCwKKwkJCSAgICAgc3RydWN0IGlhdHRyICphdHRyLCBjaGFyICpkYXRhKTsKKworI2VuZGlmIC8qIF9fRUFUVFJfRE9UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL0tjb25maWcgYi9mcy9uaWxmczIvS2NvbmZpZwppbmRleCA3MmRhMDk1Li4yNTFkYTA3IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvS2NvbmZpZworKysgYi9mcy9uaWxmczIvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBOSUxGUzJfRlMKIAl0cmlzdGF0ZSAiTklMRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBCTE9DSyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIE5JTEZTMiBpcyBhIGxvZy1zdHJ1Y3R1cmVkIGZpbGUgc3lzdGVtIChMRlMpIHN1cHBvcnRpbmcgY29udGludW91cwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2JtYXAuYyBiL2ZzL25pbGZzMi9ibWFwLmMKaW5kZXggOTlkNThhMC4uMDg4MzRkZiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2JtYXAuYworKysgYi9mcy9uaWxmczIvYm1hcC5jCkBAIC0zNiw2ICszNiwyNiBAQAogCXJldHVybiBuaWxmc19kYXRfaW5vZGUoTklMRlNfSV9OSUxGUyhibWFwLT5iX2lub2RlKSk7CiB9CiAKKy8qKgorICogbmlsZnNfYm1hcF9sb29rdXBfYXRfbGV2ZWwgLSBmaW5kIGEgZGF0YSBibG9jayBvciBub2RlIGJsb2NrCisgKiBAYm1hcDogYm1hcAorICogQGtleToga2V5CisgKiBAbGV2ZWw6IGxldmVsCisgKiBAcHRycDogcGxhY2UgdG8gc3RvcmUgdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gQGtleQorICoKKyAqIERlc2NyaXB0aW9uOiBuaWxmc19ibWFwX2xvb2t1cF9hdF9sZXZlbCgpIGZpbmRzIGEgcmVjb3JkIHdob3NlIGtleQorICogbWF0Y2hlcyBAa2V5IGluIHRoZSBibG9jayBhdCBAbGV2ZWwgb2YgdGhlIGJtYXAuCisgKgorICogUmV0dXJuIFZhbHVlOiBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkIGFuZCB0aGUgcmVjb3JkIGFzc29jaWF0ZWQgd2l0aCBAa2V5CisgKiBpcyBzdG9yZWQgaW4gdGhlIHBsYWNlIHBvaW50ZWQgYnkgQHB0cnAuIE9uIGVycm9yLCBvbmUgb2YgdGhlIGZvbGxvd2luZworICogbmVnYXRpdmUgZXJyb3IgY29kZXMgaXMgcmV0dXJuZWQuCisgKgorICogJS1FSU8gLSBJL08gZXJyb3IuCisgKgorICogJS1FTk9NRU0gLSBJbnN1ZmZpY2llbnQgYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUuCisgKgorICogJS1FTk9FTlQgLSBBIHJlY29yZCBhc3NvY2lhdGVkIHdpdGggQGtleSBkb2VzIG5vdCBleGlzdC4KKyAqLwogaW50IG5pbGZzX2JtYXBfbG9va3VwX2F0X2xldmVsKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCBrZXksIGludCBsZXZlbCwKIAkJCSAgICAgICBfX3U2NCAqcHRycCkKIHsKQEAgLTY5LDM5ICs4OSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoqCi0gKiBuaWxmc19ibWFwX2xvb2t1cCAtIGZpbmQgYSByZWNvcmQKLSAqIEBibWFwOiBibWFwCi0gKiBAa2V5OiBrZXkKLSAqIEByZWNwOiBwb2ludGVyIHRvIHJlY29yZAotICoKLSAqIERlc2NyaXB0aW9uOiBuaWxmc19ibWFwX2xvb2t1cCgpIGZpbmRzIGEgcmVjb3JkIHdob3NlIGtleSBtYXRjaGVzIEBrZXkgaW4KLSAqIEBibWFwLgotICoKLSAqIFJldHVybiBWYWx1ZTogT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZCBhbmQgdGhlIHJlY29yZCBhc3NvY2lhdGVkIHdpdGggQGtleQotICogaXMgc3RvcmVkIGluIHRoZSBwbGFjZSBwb2ludGVkIGJ5IEByZWNwLiBPbiBlcnJvciwgb25lIG9mIHRoZSBmb2xsb3dpbmcKLSAqIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGlzIHJldHVybmVkLgotICoKLSAqICUtRUlPIC0gSS9PIGVycm9yLgotICoKLSAqICUtRU5PTUVNIC0gSW5zdWZmaWNpZW50IGFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlLgotICoKLSAqICUtRU5PRU5UIC0gQSByZWNvcmQgYXNzb2NpYXRlZCB3aXRoIEBrZXkgZG9lcyBub3QgZXhpc3QuCi0gKi8KLWludCBuaWxmc19ibWFwX2xvb2t1cChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBrZXksCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgKnJlY3ApCi17Ci0JX191NjQgcHRyOwotCWludCByZXQ7Ci0KLQkvKiBYWFg6IHVzZSBtYWNybyBmb3IgbGV2ZWwgMSAqLwotCXJldCA9IG5pbGZzX2JtYXBfbG9va3VwX2F0X2xldmVsKGJtYXAsIGtleSwgMSwgJnB0cik7Ci0JaWYgKHJlY3AgIT0gTlVMTCkKLQkJKnJlY3AgPSBwdHI7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBuaWxmc19ibWFwX2RvX2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5LCBfX3U2NCBwdHIpCiB7CiAJX191NjQga2V5c1tOSUxGU19CTUFQX1NNQUxMX0hJR0ggKyAxXTsKQEAgLTQ2OSwxMDQgKzQ1Niw2IEBACiAJCShlbnRyaWVzX3Blcl9ncm91cCAvIE5JTEZTX0JNQVBfR1JPVVBfRElWKTsKIH0KIAotaW50IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY192KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCSB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSkKLXsKLQlyZXR1cm4gbmlsZnNfZGF0X3ByZXBhcmVfYWxsb2MobmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApLCAmcmVxLT5icHJfcmVxKTsKLX0KLQotdm9pZCBuaWxmc19ibWFwX2NvbW1pdF9hbGxvY192KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCSB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSkKLXsKLQluaWxmc19kYXRfY29tbWl0X2FsbG9jKG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKSwgJnJlcS0+YnByX3JlcSk7Ci19Ci0KLXZvaWQgbmlsZnNfYm1hcF9hYm9ydF9hbGxvY192KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCi17Ci0JbmlsZnNfZGF0X2Fib3J0X2FsbG9jKG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKSwgJnJlcS0+YnByX3JlcSk7Ci19Ci0KLWludCBuaWxmc19ibWFwX3N0YXJ0X3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxLAotCQkgICAgICAgc2VjdG9yX3QgYmxvY2tucikKLXsKLQlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfc3RhcnQoZGF0LCAmcmVxLT5icHJfcmVxKTsKLQlpZiAobGlrZWx5KCFyZXQpKQotCQluaWxmc19kYXRfY29tbWl0X3N0YXJ0KGRhdCwgJnJlcS0+YnByX3JlcSwgYmxvY2tucik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCSAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCi17Ci0JcmV0dXJuIG5pbGZzX2RhdF9wcmVwYXJlX2VuZChuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksICZyZXEtPmJwcl9yZXEpOwotfQotCi12b2lkIG5pbGZzX2JtYXBfY29tbWl0X2VuZF92KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSkKLXsKLQluaWxmc19kYXRfY29tbWl0X2VuZChuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksICZyZXEtPmJwcl9yZXEsCi0JCQkgICAgIGJtYXAtPmJfcHRyX3R5cGUgPT0gTklMRlNfQk1BUF9QVFJfVlMpOwotfQotCi12b2lkIG5pbGZzX2JtYXBfYWJvcnRfZW5kX3Yoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCQkgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCi17Ci0JbmlsZnNfZGF0X2Fib3J0X2VuZChuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksICZyZXEtPmJwcl9yZXEpOwotfQotCi1pbnQgbmlsZnNfYm1hcF9tb3ZlX3YoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IHZibG9ja25yLAotCQkgICAgICBzZWN0b3JfdCBibG9ja25yKQotewotCXJldHVybiBuaWxmc19kYXRfbW92ZShuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksIHZibG9ja25yLCBibG9ja25yKTsKLX0KLQotaW50IG5pbGZzX2JtYXBfbWFya19kaXJ0eShjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQgdmJsb2NrbnIpCi17Ci0JcmV0dXJuIG5pbGZzX2RhdF9tYXJrX2RpcnR5KG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKSwgdmJsb2NrbnIpOwotfQotCi1pbnQgbmlsZnNfYm1hcF9wcmVwYXJlX3VwZGF0ZV92KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqb2xkcmVxLAotCQkJCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqbmV3cmVxKQotewotCXN0cnVjdCBpbm9kZSAqZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOwotCWludCByZXQ7Ci0KLQlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV9lbmQoZGF0LCAmb2xkcmVxLT5icHJfcmVxKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV9hbGxvYyhkYXQsICZuZXdyZXEtPmJwcl9yZXEpOwotCWlmIChyZXQgPCAwKQotCQluaWxmc19kYXRfYWJvcnRfZW5kKGRhdCwgJm9sZHJlcS0+YnByX3JlcSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIG5pbGZzX2JtYXBfY29tbWl0X3VwZGF0ZV92KHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqb2xkcmVxLAotCQkJCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqbmV3cmVxKQotewotCXN0cnVjdCBpbm9kZSAqZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOwotCi0JbmlsZnNfZGF0X2NvbW1pdF9lbmQoZGF0LCAmb2xkcmVxLT5icHJfcmVxLAotCQkJICAgICBibWFwLT5iX3B0cl90eXBlID09IE5JTEZTX0JNQVBfUFRSX1ZTKTsKLQluaWxmc19kYXRfY29tbWl0X2FsbG9jKGRhdCwgJm5ld3JlcS0+YnByX3JlcSk7Ci19Ci0KLXZvaWQgbmlsZnNfYm1hcF9hYm9ydF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm9sZHJlcSwKLQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm5ld3JlcSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKTsKLQotCW5pbGZzX2RhdF9hYm9ydF9lbmQoZGF0LCAmb2xkcmVxLT5icHJfcmVxKTsKLQluaWxmc19kYXRfYWJvcnRfYWxsb2MoZGF0LCAmbmV3cmVxLT5icHJfcmVxKTsKLX0KLQogc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuaWxmc19ibWFwX2RhdF9sb2NrX2tleTsKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmlsZnNfYm1hcF9tZHRfbG9ja19rZXk7CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9ibWFwLmggYi9mcy9uaWxmczIvYm1hcC5oCmluZGV4IGIyODkwY2QuLjk5ODBkN2QgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9ibWFwLmgKKysrIGIvZnMvbmlsZnMyL2JtYXAuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbmlsZnMyX2ZzLmg+CiAjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJkYXQuaCIKIAogI2RlZmluZSBOSUxGU19CTUFQX0lOVkFMSURfUFRSCTAKIApAQCAtMTQxLDcgKzE0Miw2IEBACiBpbnQgbmlsZnNfYm1hcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eShzdHJ1Y3QgbmlsZnNfYm1hcCAqKTsKIGludCBuaWxmc19ibWFwX3JlYWQoc3RydWN0IG5pbGZzX2JtYXAgKiwgc3RydWN0IG5pbGZzX2lub2RlICopOwogdm9pZCBuaWxmc19ibWFwX3dyaXRlKHN0cnVjdCBuaWxmc19ibWFwICosIHN0cnVjdCBuaWxmc19pbm9kZSAqKTsKLWludCBuaWxmc19ibWFwX2xvb2t1cChzdHJ1Y3QgbmlsZnNfYm1hcCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICopOwogaW50IG5pbGZzX2JtYXBfbG9va3VwX2NvbnRpZyhzdHJ1Y3QgbmlsZnNfYm1hcCAqLCBfX3U2NCwgX191NjQgKiwgdW5zaWduZWQpOwogaW50IG5pbGZzX2JtYXBfaW5zZXJ0KHN0cnVjdCBuaWxmc19ibWFwICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogaW50IG5pbGZzX2JtYXBfZGVsZXRlKHN0cnVjdCBuaWxmc19ibWFwICosIHVuc2lnbmVkIGxvbmcpOwpAQCAtMTYwLDkwICsxNjAsNzYgQEAKIHZvaWQgbmlsZnNfYm1hcF9jb21taXRfZ2NkYXQoc3RydWN0IG5pbGZzX2JtYXAgKiwgc3RydWN0IG5pbGZzX2JtYXAgKik7CiAKIAorc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYm1hcF9sb29rdXAoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsIF9fdTY0IGtleSwKKwkJCQkgICAgX191NjQgKnB0cikKK3sKKwlyZXR1cm4gbmlsZnNfYm1hcF9sb29rdXBfYXRfbGV2ZWwoYm1hcCwga2V5LCAxLCBwdHIpOworfQorCiAvKgogICogSW50ZXJuYWwgdXNlIG9ubHkKICAqLwogc3RydWN0IGlub2RlICpuaWxmc19ibWFwX2dldF9kYXQoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKik7Ci1pbnQgbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3Yoc3RydWN0IG5pbGZzX2JtYXAgKiwKLQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKik7Ci12b2lkIG5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3Yoc3RydWN0IG5pbGZzX2JtYXAgKiwKLQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKik7Ci12b2lkIG5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfdihzdHJ1Y3QgbmlsZnNfYm1hcCAqLAotCQkJICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICopOwogCiBzdGF0aWMgaW5saW5lIGludCBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCisJCQkJCSAgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKKwkJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGF0KQogewotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpCi0JCXJldHVybiBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfdihibWFwLCByZXEpOworCWlmIChkYXQpCisJCXJldHVybiBuaWxmc19kYXRfcHJlcGFyZV9hbGxvYyhkYXQsICZyZXEtPmJwcl9yZXEpOwogCS8qIGlnbm9yZSB0YXJnZXQgcHRyICovCiAJcmVxLT5icHJfcHRyID0gYm1hcC0+Yl9sYXN0X2FsbG9jYXRlZF9wdHIrKzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIG5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQorCQkJCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRhdCkKIHsKLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKQotCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY192KGJtYXAsIHJlcSk7CisJaWYgKGRhdCkKKwkJbmlsZnNfZGF0X2NvbW1pdF9hbGxvYyhkYXQsICZyZXEtPmJwcl9yZXEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCQkJCSAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxKQorCQkJCQkgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKKwkJCQkJICAgICAgc3RydWN0IGlub2RlICpkYXQpCiB7Ci0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkKLQkJbmlsZnNfYm1hcF9hYm9ydF9hbGxvY192KGJtYXAsIHJlcSk7CisJaWYgKGRhdCkKKwkJbmlsZnNfZGF0X2Fib3J0X2FsbG9jKGRhdCwgJnJlcS0+YnByX3JlcSk7CiAJZWxzZQogCQlibWFwLT5iX2xhc3RfYWxsb2NhdGVkX3B0ci0tOwogfQogCi1pbnQgbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF92KHN0cnVjdCBuaWxmc19ibWFwICosIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqKTsKLXZvaWQgbmlsZnNfYm1hcF9jb21taXRfZW5kX3Yoc3RydWN0IG5pbGZzX2JtYXAgKiwgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICopOwotdm9pZCBuaWxmc19ibWFwX2Fib3J0X2VuZF92KHN0cnVjdCBuaWxmc19ibWFwICosIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqKTsKLQogc3RhdGljIGlubGluZSBpbnQgbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoc3RydWN0IG5pbGZzX2JtYXAgKmJtYXAsCi0JCQkJCSAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCisJCQkJCSAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEsCisJCQkJCSAgICAgc3RydWN0IGlub2RlICpkYXQpCiB7Ci0JcmV0dXJuIE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSA/Ci0JCW5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfdihibWFwLCByZXEpIDogMDsKKwlyZXR1cm4gZGF0ID8gbmlsZnNfZGF0X3ByZXBhcmVfZW5kKGRhdCwgJnJlcS0+YnByX3JlcSkgOiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfYm1hcF9jb21taXRfZW5kX3B0cihzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKLQkJCQkJICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSkKKwkJCQkJICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRhdCkKIHsKLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKQotCQluaWxmc19ibWFwX2NvbW1pdF9lbmRfdihibWFwLCByZXEpOworCWlmIChkYXQpCisJCW5pbGZzX2RhdF9jb21taXRfZW5kKGRhdCwgJnJlcS0+YnByX3JlcSwKKwkJCQkgICAgIGJtYXAtPmJfcHRyX3R5cGUgPT0gTklMRlNfQk1BUF9QVFJfVlMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfYm1hcF9hYm9ydF9lbmRfcHRyKHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAotCQkJCQkgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEpCisJCQkJCSAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKnJlcSwKKwkJCQkJICAgIHN0cnVjdCBpbm9kZSAqZGF0KQogewotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpCi0JCW5pbGZzX2JtYXBfYWJvcnRfZW5kX3YoYm1hcCwgcmVxKTsKKwlpZiAoZGF0KQorCQluaWxmc19kYXRfYWJvcnRfZW5kKGRhdCwgJnJlcS0+YnByX3JlcSk7CiB9CiAKLWludCBuaWxmc19ibWFwX3N0YXJ0X3Yoc3RydWN0IG5pbGZzX2JtYXAgKiwgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICosCi0JCSAgICAgICBzZWN0b3JfdCk7Ci1pbnQgbmlsZnNfYm1hcF9tb3ZlX3YoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKiwgX191NjQsIHNlY3Rvcl90KTsKLWludCBuaWxmc19ibWFwX21hcmtfZGlydHkoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKiwgX191NjQpOwotCi0KIF9fdTY0IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CiAKIF9fdTY0IG5pbGZzX2JtYXBfZmluZF90YXJnZXRfc2VxKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICosIF9fdTY0KTsKIF9fdTY0IG5pbGZzX2JtYXBfZmluZF90YXJnZXRfaW5fZ3JvdXAoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKik7CiAKLWludCBuaWxmc19ibWFwX3ByZXBhcmVfdXBkYXRlX3Yoc3RydWN0IG5pbGZzX2JtYXAgKiwKLQkJCQl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKiwKLQkJCQl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKik7Ci12b2lkIG5pbGZzX2JtYXBfY29tbWl0X3VwZGF0ZV92KHN0cnVjdCBuaWxmc19ibWFwICosCi0JCQkJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICosCi0JCQkJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICopOwotdm9pZCBuaWxmc19ibWFwX2Fib3J0X3VwZGF0ZV92KHN0cnVjdCBuaWxmc19ibWFwICosCi0JCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICosCi0JCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICopOwotCiB2b2lkIG5pbGZzX2JtYXBfYWRkX2Jsb2Nrcyhjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqLCBpbnQpOwogdm9pZCBuaWxmc19ibWFwX3N1Yl9ibG9ja3MoY29uc3Qgc3RydWN0IG5pbGZzX2JtYXAgKiwgaW50KTsKIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2J0cmVlLmMgYi9mcy9uaWxmczIvYnRyZWUuYwppbmRleCBhYTQxMjcyLi5lMjViNTA3IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRyZWUuYworKysgYi9mcy9uaWxmczIvYnRyZWUuYwpAQCAtNzEsMjEgKzcxLDE3IEBACiAJa21lbV9jYWNoZV9kZXN0cm95KG5pbGZzX2J0cmVlX3BhdGhfY2FjaGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICoKLW5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKm5pbGZzX2J0cmVlX2FsbG9jX3BhdGgodm9pZCkKIHsKLQlyZXR1cm4gKHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICopCi0JCWttZW1fY2FjaGVfYWxsb2MobmlsZnNfYnRyZWVfcGF0aF9jYWNoZSwgR0ZQX05PRlMpOworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKG5pbGZzX2J0cmVlX3BhdGhfY2FjaGUsIEdGUF9OT0ZTKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5pbGZzX2J0cmVlX2ZyZWVfcGF0aChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJCQkgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgpCitzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoKQogewogCWttZW1fY2FjaGVfZnJlZShuaWxmc19idHJlZV9wYXRoX2NhY2hlLCBwYXRoKTsKIH0KIAotc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfaW5pdF9wYXRoKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkJICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCkKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2luaXRfcGF0aChzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCkKIHsKIAlpbnQgbGV2ZWw7CiAKQEAgLTEwMSwyNiArOTcsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NsZWFyX3BhdGgoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCkKK3N0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX3JlbGVhc2VfcGF0aChzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCkKIHsKIAlpbnQgbGV2ZWw7CiAKLQlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfREFUQTsKLQkgICAgIGxldmVsIDwgTklMRlNfQlRSRUVfTEVWRUxfTUFYOwotCSAgICAgbGV2ZWwrKykgewotCQlpZiAocGF0aFtsZXZlbF0uYnBfYmggIT0gTlVMTCkgewotCQkJYnJlbHNlKHBhdGhbbGV2ZWxdLmJwX2JoKTsKLQkJCXBhdGhbbGV2ZWxdLmJwX2JoID0gTlVMTDsKLQkJfQotCQkvKiBzaWJfYmggaXMgcmVsZWFzZWQgb3IgZGVsZXRlZCBieSBwcmVwYXJlIG9yIGNvbW1pdAotCQkgKiBvcGVyYXRpb25zLiAqLwotCQlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBOVUxMOwotCQlwYXRoW2xldmVsXS5icF9pbmRleCA9IDA7Ci0JCXBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcHRyID0gTklMRlNfQk1BUF9JTlZBTElEX1BUUjsKLQkJcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHIgPSBOSUxGU19CTUFQX0lOVkFMSURfUFRSOwotCQlwYXRoW2xldmVsXS5icF9vcCA9IE5VTEw7Ci0JfQorCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9EQVRBOyBsZXZlbCA8IE5JTEZTX0JUUkVFX0xFVkVMX01BWDsKKwkgICAgIGxldmVsKyspCisJCWJyZWxzZShwYXRoW2xldmVsXS5icF9iaCk7CiB9CiAKIC8qCkBAIC0xNDgsMTI5ICsxMzEsMTEwIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1uaWxmc19idHJlZV9ub2RlX2dldF9mbGFncyhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCituaWxmc19idHJlZV9ub2RlX2dldF9mbGFncyhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSkKIHsKIAlyZXR1cm4gbm9kZS0+Ym5fZmxhZ3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotbmlsZnNfYnRyZWVfbm9kZV9zZXRfZmxhZ3Moc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSAgIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAotCQkJICAgaW50IGZsYWdzKQorbmlsZnNfYnRyZWVfbm9kZV9zZXRfZmxhZ3Moc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBmbGFncykKIHsKIAlub2RlLT5ibl9mbGFncyA9IGZsYWdzOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuaWxmc19idHJlZV9ub2RlX3Jvb3QoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCQkJY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCitzdGF0aWMgaW5saW5lIGludCBuaWxmc19idHJlZV9ub2RlX3Jvb3QoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCiB7Ci0JcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfZ2V0X2ZsYWdzKGJ0cmVlLCBub2RlKSAmIE5JTEZTX0JUUkVFX05PREVfUk9PVDsKKwlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9nZXRfZmxhZ3Mobm9kZSkgJiBOSUxGU19CVFJFRV9OT0RFX1JPT1Q7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1uaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkJICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCituaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSkKIHsKIAlyZXR1cm4gbm9kZS0+Ym5fbGV2ZWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotbmlsZnNfYnRyZWVfbm9kZV9zZXRfbGV2ZWwoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSAgIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLAotCQkJICAgaW50IGxldmVsKQorbmlsZnNfYnRyZWVfbm9kZV9zZXRfbGV2ZWwoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBsZXZlbCkKIHsKIAlub2RlLT5ibl9sZXZlbCA9IGxldmVsOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCituaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCiB7CiAJcmV0dXJuIGxlMTZfdG9fY3B1KG5vZGUtPmJuX25jaGlsZHJlbik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgICAgICAgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCi0JCQkgICAgICAgaW50IG5jaGlsZHJlbikKK25pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IG5jaGlsZHJlbikKIHsKIAlub2RlLT5ibl9uY2hpbGRyZW4gPSBjcHVfdG9fbGUxNihuY2hpbGRyZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9zaXplKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUpCitzdGF0aWMgaW5saW5lIGludCBuaWxmc19idHJlZV9ub2RlX3NpemUoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSkKIHsKIAlyZXR1cm4gMSA8PCBidHJlZS0+YnRfYm1hcC5iX2lub2RlLT5pX2Jsa2JpdHM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1uaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4oY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSkKK25pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21pbihjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlKQogewotCXJldHVybiBuaWxmc19idHJlZV9ub2RlX3Jvb3QoYnRyZWUsIG5vZGUpID8KKwlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9yb290KG5vZGUpID8KIAkJTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUlOIDoKIAkJTklMRlNfQlRSRUVfTk9ERV9OQ0hJTERSRU5fTUlOKG5pbGZzX2J0cmVlX25vZGVfc2l6ZShidHJlZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCituaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSkKIHsKLQlyZXR1cm4gbmlsZnNfYnRyZWVfbm9kZV9yb290KGJ0cmVlLCBub2RlKSA/CisJcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfcm9vdChub2RlKSA/CiAJCU5JTEZTX0JUUkVFX1JPT1RfTkNISUxEUkVOX01BWCA6CiAJCU5JTEZTX0JUUkVFX05PREVfTkNISUxEUkVOX01BWChuaWxmc19idHJlZV9ub2RlX3NpemUoYnRyZWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlNjQgKgotbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAotCQkgICAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUpCituaWxmc19idHJlZV9ub2RlX2RrZXlzKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlKQogewogCXJldHVybiAoX19sZTY0ICopKChjaGFyICopKG5vZGUgKyAxKSArCi0JCQkgIChuaWxmc19idHJlZV9ub2RlX3Jvb3QoYnRyZWUsIG5vZGUpID8KKwkJCSAgKG5pbGZzX2J0cmVlX25vZGVfcm9vdChub2RlKSA/CiAJCQkgICAwIDogTklMRlNfQlRSRUVfTk9ERV9FWFRSQV9QQURfU0laRSkpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGU2NCAqCi1uaWxmc19idHJlZV9ub2RlX2RwdHJzKGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSkKK25pbGZzX2J0cmVlX25vZGVfZHB0cnMoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlKQogewotCXJldHVybiAoX19sZTY0ICopKG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIG5vZGUpICsKLQkJCSAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KGJ0cmVlLCBub2RlKSk7CisJcmV0dXJuIChfX2xlNjQgKikobmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhub2RlKSArCisJCQkgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChub2RlLCBidHJlZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fdTY0Ci1uaWxmc19idHJlZV9ub2RlX2dldF9rZXkoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IGluZGV4KQorbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGNvbnN0IHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgaW5kZXgpCiB7Ci0JcmV0dXJuIG5pbGZzX2JtYXBfZGtleV90b19rZXkoKihuaWxmc19idHJlZV9ub2RlX2RrZXlzKGJ0cmVlLCBub2RlKSArCi0JCQkJCWluZGV4KSk7CisJcmV0dXJuIG5pbGZzX2JtYXBfZGtleV90b19rZXkoKihuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpICsgaW5kZXgpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1uaWxmc19idHJlZV9ub2RlX3NldF9rZXkoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgaW50IGluZGV4LCBfX3U2NCBrZXkpCituaWxmc19idHJlZV9ub2RlX3NldF9rZXkoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCwgX191NjQga2V5KQogewotCSoobmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhidHJlZSwgbm9kZSkgKyBpbmRleCkgPQotCQluaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7CisJKihuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpICsgaW5kZXgpID0gbmlsZnNfYm1hcF9rZXlfdG9fZGtleShrZXkpOwogfQogCiBzdGF0aWMgaW5saW5lIF9fdTY0CiBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJCSBpbnQgaW5kZXgpCisJCQkgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsIGludCBpbmRleCkKIHsKLQlyZXR1cm4gbmlsZnNfYm1hcF9kcHRyX3RvX3B0cigqKG5pbGZzX2J0cmVlX25vZGVfZHB0cnMoYnRyZWUsIG5vZGUpICsKKwlyZXR1cm4gbmlsZnNfYm1hcF9kcHRyX3RvX3B0cigqKG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgYnRyZWUpICsKIAkJCQkJaW5kZXgpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBuaWxmc19idHJlZV9ub2RlX3NldF9wdHIoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKLQkJCSBpbnQgaW5kZXgsCi0JCQkgX191NjQgcHRyKQorCQkJIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICpub2RlLCBpbnQgaW5kZXgsIF9fdTY0IHB0cikKIHsKLQkqKG5pbGZzX2J0cmVlX25vZGVfZHB0cnMoYnRyZWUsIG5vZGUpICsgaW5kZXgpID0KKwkqKG5pbGZzX2J0cmVlX25vZGVfZHB0cnMobm9kZSwgYnRyZWUpICsgaW5kZXgpID0KIAkJbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOwogfQogCkBAIC0yODMsMTIgKzI0NywxMiBAQAogCV9fbGU2NCAqZHB0cnM7CiAJaW50IGk7CiAKLQluaWxmc19idHJlZV9ub2RlX3NldF9mbGFncyhidHJlZSwgbm9kZSwgZmxhZ3MpOwotCW5pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKGJ0cmVlLCBub2RlLCBsZXZlbCk7Ci0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlLCBuY2hpbGRyZW4pOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X2ZsYWdzKG5vZGUsIGZsYWdzKTsKKwluaWxmc19idHJlZV9ub2RlX3NldF9sZXZlbChub2RlLCBsZXZlbCk7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKG5vZGUsIG5jaGlsZHJlbik7CiAKLQlka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIG5vZGUpOwotCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhidHJlZSwgbm9kZSk7CisJZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpOworCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBidHJlZSk7CiAJZm9yIChpID0gMDsgaSA8IG5jaGlsZHJlbjsgaSsrKSB7CiAJCWRrZXlzW2ldID0gbmlsZnNfYm1hcF9rZXlfdG9fZGtleShrZXlzW2ldKTsKIAkJZHB0cnNbaV0gPSBuaWxmc19ibWFwX3B0cl90b19kcHRyKHB0cnNbaV0pOwpAQCAtMzA1LDEzICsyNjksMTMgQEAKIAlfX2xlNjQgKmxkcHRycywgKnJkcHRyczsKIAlpbnQgbG5jaGlsZHJlbiwgcm5jaGlsZHJlbjsKIAotCWxka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIGxlZnQpOwotCWxkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMoYnRyZWUsIGxlZnQpOwotCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIGxlZnQpOworCWxka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMobGVmdCk7CisJbGRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhsZWZ0LCBidHJlZSk7CisJbG5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihsZWZ0KTsKIAotCXJka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIHJpZ2h0KTsKLQlyZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKGJ0cmVlLCByaWdodCk7Ci0Jcm5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcmlnaHQpOworCXJka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMocmlnaHQpOworCXJkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMocmlnaHQsIGJ0cmVlKTsKKwlybmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHJpZ2h0KTsKIAogCW1lbWNweShsZGtleXMgKyBsbmNoaWxkcmVuLCByZGtleXMsIG4gKiBzaXplb2YoKnJka2V5cykpOwogCW1lbWNweShsZHB0cnMgKyBsbmNoaWxkcmVuLCByZHB0cnMsIG4gKiBzaXplb2YoKnJkcHRycykpOwpAQCAtMzIwLDggKzI4NCw4IEBACiAKIAlsbmNoaWxkcmVuICs9IG47CiAJcm5jaGlsZHJlbiAtPSBuOwotCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihidHJlZSwgbGVmdCwgbG5jaGlsZHJlbik7Ci0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGJ0cmVlLCByaWdodCwgcm5jaGlsZHJlbik7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGxlZnQsIGxuY2hpbGRyZW4pOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X25jaGlsZHJlbihyaWdodCwgcm5jaGlsZHJlbik7CiB9CiAKIC8qIEFzc3VtZSB0aGF0IHRoZSBidWZmZXIgaGVhZHMgY29ycmVzcG9uZGluZyB0byBsZWZ0IGFuZCByaWdodCBhcmUgbG9ja2VkLiAqLwpAQCAtMzM0LDEzICsyOTgsMTMgQEAKIAlfX2xlNjQgKmxkcHRycywgKnJkcHRyczsKIAlpbnQgbG5jaGlsZHJlbiwgcm5jaGlsZHJlbjsKIAotCWxka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIGxlZnQpOwotCWxkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMoYnRyZWUsIGxlZnQpOwotCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIGxlZnQpOworCWxka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMobGVmdCk7CisJbGRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhsZWZ0LCBidHJlZSk7CisJbG5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihsZWZ0KTsKIAotCXJka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIHJpZ2h0KTsKLQlyZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKGJ0cmVlLCByaWdodCk7Ci0Jcm5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcmlnaHQpOworCXJka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMocmlnaHQpOworCXJkcHRycyA9IG5pbGZzX2J0cmVlX25vZGVfZHB0cnMocmlnaHQsIGJ0cmVlKTsKKwlybmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHJpZ2h0KTsKIAogCW1lbW1vdmUocmRrZXlzICsgbiwgcmRrZXlzLCBybmNoaWxkcmVuICogc2l6ZW9mKCpyZGtleXMpKTsKIAltZW1tb3ZlKHJkcHRycyArIG4sIHJkcHRycywgcm5jaGlsZHJlbiAqIHNpemVvZigqcmRwdHJzKSk7CkBAIC0zNDksOCArMzEzLDggQEAKIAogCWxuY2hpbGRyZW4gLT0gbjsKIAlybmNoaWxkcmVuICs9IG47Ci0JbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKGJ0cmVlLCBsZWZ0LCBsbmNoaWxkcmVuKTsKLQluaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4oYnRyZWUsIHJpZ2h0LCBybmNoaWxkcmVuKTsKKwluaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4obGVmdCwgbG5jaGlsZHJlbik7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKHJpZ2h0LCBybmNoaWxkcmVuKTsKIH0KIAogLyogQXNzdW1lIHRoYXQgdGhlIGJ1ZmZlciBoZWFkIGNvcnJlc3BvbmRpbmcgdG8gbm9kZSBpcyBsb2NrZWQuICovCkBAIC0zNjIsOSArMzI2LDkgQEAKIAlfX2xlNjQgKmRwdHJzOwogCWludCBuY2hpbGRyZW47CiAKLQlka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIG5vZGUpOwotCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhidHJlZSwgbm9kZSk7Ci0JbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKKwlka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMobm9kZSk7CisJZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIGJ0cmVlKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CiAJaWYgKGluZGV4IDwgbmNoaWxkcmVuKSB7CiAJCW1lbW1vdmUoZGtleXMgKyBpbmRleCArIDEsIGRrZXlzICsgaW5kZXgsCiAJCQkobmNoaWxkcmVuIC0gaW5kZXgpICogc2l6ZW9mKCpka2V5cykpOwpAQCAtMzc0LDcgKzMzOCw3IEBACiAJZGtleXNbaW5kZXhdID0gbmlsZnNfYm1hcF9rZXlfdG9fZGtleShrZXkpOwogCWRwdHJzW2luZGV4XSA9IG5pbGZzX2JtYXBfcHRyX3RvX2RwdHIocHRyKTsKIAluY2hpbGRyZW4rKzsKLQluaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUsIG5jaGlsZHJlbik7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKG5vZGUsIG5jaGlsZHJlbik7CiB9CiAKIC8qIEFzc3VtZSB0aGF0IHRoZSBidWZmZXIgaGVhZCBjb3JyZXNwb25kaW5nIHRvIG5vZGUgaXMgbG9ja2VkLiAqLwpAQCAtMzg4LDExICszNTIsMTEgQEAKIAlfX2xlNjQgKmRwdHJzOwogCWludCBuY2hpbGRyZW47CiAKLQlka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMoYnRyZWUsIG5vZGUpOwotCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhidHJlZSwgbm9kZSk7CisJZGtleXMgPSBuaWxmc19idHJlZV9ub2RlX2RrZXlzKG5vZGUpOworCWRwdHJzID0gbmlsZnNfYnRyZWVfbm9kZV9kcHRycyhub2RlLCBidHJlZSk7CiAJa2V5ID0gbmlsZnNfYm1hcF9ka2V5X3RvX2tleShka2V5c1tpbmRleF0pOwogCXB0ciA9IG5pbGZzX2JtYXBfZHB0cl90b19wdHIoZHB0cnNbaW5kZXhdKTsKLQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpOworCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKIAlpZiAoa2V5cCAhPSBOVUxMKQogCQkqa2V5cCA9IGtleTsKIAlpZiAocHRycCAhPSBOVUxMKQpAQCAtNDA1LDExICszNjksMTAgQEAKIAkJCShuY2hpbGRyZW4gLSBpbmRleCAtIDEpICogc2l6ZW9mKCpkcHRycykpOwogCX0KIAluY2hpbGRyZW4tLTsKLQluaWxmc19idHJlZV9ub2RlX3NldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUsIG5jaGlsZHJlbik7CisJbmlsZnNfYnRyZWVfbm9kZV9zZXRfbmNoaWxkcmVuKG5vZGUsIG5jaGlsZHJlbik7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbm9kZV9sb29rdXAoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwKK3N0YXRpYyBpbnQgbmlsZnNfYnRyZWVfbm9kZV9sb29rdXAoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsCiAJCQkJICAgX191NjQga2V5LCBpbnQgKmluZGV4cCkKIHsKIAlfX3U2NCBua2V5OwpAQCAtNDE3LDEyICszODAsMTIgQEAKIAogCS8qIGJpbmFyeSBzZWFyY2ggKi8KIAlsb3cgPSAwOwotCWhpZ2ggPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpIC0gMTsKKwloaWdoID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpIC0gMTsKIAlpbmRleCA9IDA7CiAJcyA9IDA7CiAJd2hpbGUgKGxvdyA8PSBoaWdoKSB7CiAJCWluZGV4ID0gKGxvdyArIGhpZ2gpIC8gMjsKLQkJbmtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgaW5kZXgpOworCQlua2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIGluZGV4KTsKIAkJaWYgKG5rZXkgPT0ga2V5KSB7CiAJCQlzID0gMDsKIAkJCWdvdG8gb3V0OwpAQCAtNDM2LDkgKzM5OSw4IEBACiAJfQogCiAJLyogYWRqdXN0IGluZGV4ICovCi0JaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKGJ0cmVlLCBub2RlKSA+Ci0JICAgIE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOKSB7Ci0JCWlmICgocyA+IDApICYmIChpbmRleCA+IDApKQorCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKSA+IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOKSB7CisJCWlmIChzID4gMCAmJiBpbmRleCA+IDApCiAJCQlpbmRleC0tOwogCX0gZWxzZSBpZiAocyA8IDApCiAJCWluZGV4Kys7CkBAIC00NTYsMjUgKzQxOCwyMCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICoKLW5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSAgICAgY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCi0JCQkgICAgIGludCBsZXZlbCkKK25pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsIGludCBsZXZlbCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopcGF0aFtsZXZlbF0uYnBfYmgtPmJfZGF0YTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqCi1uaWxmc19idHJlZV9nZXRfc2liX25vZGUoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKLQkJCSBjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCSBpbnQgbGV2ZWwpCituaWxmc19idHJlZV9nZXRfc2liX25vZGUoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsIGludCBsZXZlbCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopcGF0aFtsZXZlbF0uYnBfc2liX2JoLT5iX2RhdGE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5pbGZzX2J0cmVlX2hlaWdodChjb25zdCBzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlKQogewotCXJldHVybiBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpKQotCQkrIDE7CisJcmV0dXJuIG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKSkgKyAxOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICoKQEAgLTQ4NCw3ICs0NDEsNyBAQAogewogCXJldHVybiAobGV2ZWwgPT0gbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDEpID8KIAkJbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpIDoKLQkJbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOworCQluaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIH0KIAogc3RhdGljIGludCBuaWxmc19idHJlZV9kb19sb29rdXAoY29uc3Qgc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKQEAgLTQ5NiwxMiArNDUzLDExIEBACiAJaW50IGxldmVsLCBpbmRleCwgZm91bmQsIHJldDsKIAogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7Ci0JbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSk7Ci0JaWYgKChsZXZlbCA8IG1pbmxldmVsKSB8fAotCSAgICAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSA8PSAwKSkKKwlsZXZlbCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5vZGUpOworCWlmIChsZXZlbCA8IG1pbmxldmVsIHx8IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSA8PSAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWZvdW5kID0gbmlsZnNfYnRyZWVfbm9kZV9sb29rdXAoYnRyZWUsIG5vZGUsIGtleSwgJmluZGV4KTsKKwlmb3VuZCA9IG5pbGZzX2J0cmVlX25vZGVfbG9va3VwKG5vZGUsIGtleSwgJmluZGV4KTsKIAlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKIAlwYXRoW2xldmVsXS5icF9iaCA9IE5VTEw7CiAJcGF0aFtsZXZlbF0uYnBfaW5kZXggPSBpbmRleDsKQEAgLTUxMCwxNCArNDY2LDEzIEBACiAJCXJldCA9IG5pbGZzX2J0cmVlX2dldF9ibG9jayhidHJlZSwgcHRyLCAmcGF0aFtsZXZlbF0uYnBfYmgpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JCUJVR19PTihsZXZlbCAhPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSkpOworCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CisJCUJVR19PTihsZXZlbCAhPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKSk7CiAJCWlmICghZm91bmQpCi0JCQlmb3VuZCA9IG5pbGZzX2J0cmVlX25vZGVfbG9va3VwKGJ0cmVlLCBub2RlLCBrZXksCi0JCQkJCQkJJmluZGV4KTsKKwkJCWZvdW5kID0gbmlsZnNfYnRyZWVfbm9kZV9sb29rdXAobm9kZSwga2V5LCAmaW5kZXgpOwogCQllbHNlCiAJCQlpbmRleCA9IDA7Ci0JCWlmIChpbmRleCA8IG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChidHJlZSwgbm9kZSkpCisJCWlmIChpbmRleCA8IG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChub2RlLCBidHJlZSkpCiAJCQlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKIAkJZWxzZSB7CiAJCQlXQVJOX09OKGZvdW5kIHx8IGxldmVsICE9IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOKTsKQEAgLTU0NCwxMCArNDk5LDEwIEBACiAJaW50IGluZGV4LCBsZXZlbCwgcmV0OwogCiAJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKLQlpbmRleCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSkgLSAxOworCWluZGV4ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpIC0gMTsKIAlpZiAoaW5kZXggPCAwKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlsZXZlbCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKGJ0cmVlLCBub2RlKTsKKwlsZXZlbCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5vZGUpOwogCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgbm9kZSwgaW5kZXgpOwogCXBhdGhbbGV2ZWxdLmJwX2JoID0gTlVMTDsKIAlwYXRoW2xldmVsXS5icF9pbmRleCA9IGluZGV4OwpAQCAtNTU2LDE1ICs1MTEsMTUgQEAKIAkJcmV0ID0gbmlsZnNfYnRyZWVfZ2V0X2Jsb2NrKGJ0cmVlLCBwdHIsICZwYXRoW2xldmVsXS5icF9iaCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQkJQlVHX09OKGxldmVsICE9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKGJ0cmVlLCBub2RlKSk7Ci0JCWluZGV4ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSAtIDE7CisJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwkJQlVHX09OKGxldmVsICE9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5vZGUpKTsKKwkJaW5kZXggPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgLSAxOwogCQlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKIAkJcGF0aFtsZXZlbF0uYnBfaW5kZXggPSBpbmRleDsKIAl9CiAKIAlpZiAoa2V5cCAhPSBOVUxMKQotCQkqa2V5cCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgaW5kZXgpOworCQkqa2V5cCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCBpbmRleCk7CiAJaWYgKHB0cnAgIT0gTlVMTCkKIAkJKnB0cnAgPSBwdHI7CiAKQEAgLTU4MCwxOCArNTM1LDE4IEBACiAJaW50IHJldDsKIAogCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7Ci0JcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoYnRyZWUpOworCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbmlsZnNfYnRyZWVfaW5pdF9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9pbml0X3BhdGgocGF0aCk7CiAKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgJnB0ciwgbGV2ZWwpOwogCiAJaWYgKHB0cnAgIT0gTlVMTCkKIAkJKnB0cnAgPSBwdHI7CiAKLQluaWxmc19idHJlZV9jbGVhcl9wYXRoKGJ0cmVlLCBwYXRoKTsKLQluaWxmc19idHJlZV9mcmVlX3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX3JlbGVhc2VfcGF0aChwYXRoKTsKKwluaWxmc19idHJlZV9mcmVlX3BhdGgocGF0aCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNjA4LDEwICs1NjMsMTAgQEAKIAlpbnQgbGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsKIAlpbnQgcmV0LCBjbnQsIGluZGV4LCBtYXhsZXZlbDsKIAotCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKGJ0cmVlKTsKKwlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW5pbGZzX2J0cmVlX2luaXRfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfaW5pdF9wYXRoKHBhdGgpOwogCXJldCA9IG5pbGZzX2J0cmVlX2RvX2xvb2t1cChidHJlZSwgcGF0aCwga2V5LCAmcHRyLCBsZXZlbCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwpAQCAtNjMxLDggKzU4Niw4IEBACiAJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CiAJaW5kZXggPSBwYXRoW2xldmVsXS5icF9pbmRleCArIDE7CiAJZm9yICg7OykgewotCQl3aGlsZSAoaW5kZXggPCBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpKSB7Ci0JCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCBpbmRleCkgIT0KKwkJd2hpbGUgKGluZGV4IDwgbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpKSB7CisJCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIGluZGV4KSAhPQogCQkJICAgIGtleSArIGNudCkKIAkJCQlnb3RvIGVuZDsKIAkJCXB0cjIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIG5vZGUsIGluZGV4KTsKQEAgLTY1Myw4ICs2MDgsOCBAQAogCQkvKiBsb29rLXVwIHJpZ2h0IHNpYmxpbmcgbm9kZSAqLwogCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsICsgMSk7CiAJCWluZGV4ID0gcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4ICsgMTsKLQkJaWYgKGluZGV4ID49IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSkgfHwKLQkJICAgIG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgaW5kZXgpICE9IGtleSArIGNudCkKKwkJaWYgKGluZGV4ID49IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSB8fAorCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIGluZGV4KSAhPSBrZXkgKyBjbnQpCiAJCQlicmVhazsKIAkJcHRyMiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgbm9kZSwgaW5kZXgpOwogCQlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXggPSBpbmRleDsKQEAgLTY2NCw3ICs2MTksNyBAQAogCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHB0cjIsICZwYXRoW2xldmVsXS5icF9iaCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7Ci0JCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAkJaW5kZXggPSAwOwogCQlwYXRoW2xldmVsXS5icF9pbmRleCA9IGluZGV4OwogCX0KQEAgLTY3Miw4ICs2MjcsOCBAQAogCSpwdHJwID0gcHRyOwogCXJldCA9IGNudDsKICBvdXQ6Ci0JbmlsZnNfYnRyZWVfY2xlYXJfcGF0aChidHJlZSwgcGF0aCk7Ci0JbmlsZnNfYnRyZWVfZnJlZV9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9yZWxlYXNlX3BhdGgocGF0aCk7CisJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY4NSw5ICs2NDAsNyBAQAogCQlkbyB7CiAJCQlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJCQluaWxmc19idHJlZV9ub2RlX3NldF9rZXkoCi0JCQkJYnRyZWUsCi0JCQkJbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZSgKLQkJCQkJYnRyZWUsIHBhdGgsIGxldmVsKSwKKwkJCQluaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKSwKIAkJCQlwYXRoW2xldmVsXS5icF9pbmRleCwga2V5KTsKIAkJCWlmICghYnVmZmVyX2RpcnR5KHBhdGhbbGV2ZWxdLmJwX2JoKSkKIAkJCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9iaCk7CkBAIC02OTgsOCArNjUxLDcgQEAKIAogCS8qIHJvb3QgKi8KIAlpZiAobGV2ZWwgPT0gbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDEpIHsKLQkJbmlsZnNfYnRyZWVfbm9kZV9zZXRfa2V5KGJ0cmVlLAotCQkJCQkgbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpLAorCQluaWxmc19idHJlZV9ub2RlX3NldF9rZXkobmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpLAogCQkJCQkgcGF0aFtsZXZlbF0uYnBfaW5kZXgsIGtleSk7CiAJfQogfQpAQCAtNzEyLDcgKzY2NCw3IEBACiAKIAlpZiAobGV2ZWwgPCBuaWxmc19idHJlZV9oZWlnaHQoYnRyZWUpIC0gMSkgewogCQlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7Ci0JCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKIAkJbmlsZnNfYnRyZWVfbm9kZV9pbnNlcnQoYnRyZWUsIG5vZGUsICprZXlwLCAqcHRycCwKIAkJCQkJcGF0aFtsZXZlbF0uYnBfaW5kZXgpOwogCQlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCkBAIC03MjEsOCArNjczLDggQEAKIAogCQlpZiAocGF0aFtsZXZlbF0uYnBfaW5kZXggPT0gMCkKIAkJCW5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsCi0JCQkJCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkoCi0JCQkJCQkJYnRyZWUsIG5vZGUsIDApKTsKKwkJCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLAorCQkJCQkJCQkJIDApKTsKIAl9IGVsc2UgewogCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwogCQluaWxmc19idHJlZV9ub2RlX2luc2VydChidHJlZSwgbm9kZSwgKmtleXAsICpwdHJwLApAQCAtNzQwLDEwICs2OTIsMTAgQEAKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAotCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JbGVmdCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7Ci0JbG5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbGVmdCk7CisJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCWxlZnQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOworCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKTsKKwlsbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGxlZnQpOwogCW1vdmUgPSAwOwogCiAJbiA9IChuY2hpbGRyZW4gKyBsbmNoaWxkcmVuICsgMSkgLyAyIC0gbG5jaGlsZHJlbjsKQEAgLTc2NCw3ICs3MTYsNyBAQAogCXVubG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAogCW5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsCi0JCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCAwKSk7CisJCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApKTsKIAogCWlmIChtb3ZlKSB7CiAJCWJyZWxzZShwYXRoW2xldmVsXS5icF9iaCk7CkBAIC03OTEsMTAgKzc0MywxMCBAQAogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCi0Jbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7Ci0Jcm5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcmlnaHQpOworCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CisJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOworCXJuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocmlnaHQpOwogCW1vdmUgPSAwOwogCiAJbiA9IChuY2hpbGRyZW4gKyBybmNoaWxkcmVuICsgMSkgLyAyIC0gcm5jaGlsZHJlbjsKQEAgLTgxNiwxNSArNzY4LDE0IEBACiAKIAlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgrKzsKIAluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAotCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgcmlnaHQsIDApKTsKKwkJCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkocmlnaHQsIDApKTsKIAlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgtLTsKIAogCWlmIChtb3ZlKSB7CiAJCWJyZWxzZShwYXRoW2xldmVsXS5icF9iaCk7CiAJCXBhdGhbbGV2ZWxdLmJwX2JoID0gcGF0aFtsZXZlbF0uYnBfc2liX2JoOwogCQlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBOVUxMOwotCQlwYXRoW2xldmVsXS5icF9pbmRleCAtPQotCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKKwkJcGF0aFtsZXZlbF0uYnBfaW5kZXggLT0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCQlwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgrKzsKIAl9IGVsc2UgewogCQlicmVsc2UocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKQEAgLTg0Niw5ICs3OTcsOSBAQAogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCi0Jbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7CisJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCXJpZ2h0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKHBhdGgsIGxldmVsKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CiAJbW92ZSA9IDA7CiAKIAluID0gKG5jaGlsZHJlbiArIDEpIC8gMjsKQEAgLTg2NywxNiArODE4LDE1IEBACiAJdW5sb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJdW5sb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCi0JbmV3a2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCByaWdodCwgMCk7CisJbmV3a2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KHJpZ2h0LCAwKTsKIAluZXdwdHIgPSBwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3B0cjsKIAogCWlmIChtb3ZlKSB7Ci0JCXBhdGhbbGV2ZWxdLmJwX2luZGV4IC09Ci0JCQluaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpOworCQlwYXRoW2xldmVsXS5icF9pbmRleCAtPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CiAJCW5pbGZzX2J0cmVlX25vZGVfaW5zZXJ0KGJ0cmVlLCByaWdodCwgKmtleXAsICpwdHJwLAogCQkJCQlwYXRoW2xldmVsXS5icF9pbmRleCk7CiAKLQkJKmtleXAgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIHJpZ2h0LCAwKTsKKwkJKmtleXAgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkocmlnaHQsIDApOwogCQkqcHRycCA9IHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyOwogCiAJCWJyZWxzZShwYXRoW2xldmVsXS5icF9iaCk7CkBAIC04ODUsNyArODM1LDcgQEAKIAl9IGVsc2UgewogCQluaWxmc19idHJlZV9kb19pbnNlcnQoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIAotCQkqa2V5cCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgcmlnaHQsIDApOworCQkqa2V5cCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShyaWdodCwgMCk7CiAJCSpwdHJwID0gcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHI7CiAKIAkJYnJlbHNlKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CkBAIC05MDUsMTIgKzg1NSwxMiBAQAogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKIAlyb290ID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwotCWNoaWxkID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJY2hpbGQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUocGF0aCwgbGV2ZWwpOwogCi0JbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcm9vdCk7CisJbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihyb290KTsKIAogCW5pbGZzX2J0cmVlX25vZGVfbW92ZV9yaWdodChidHJlZSwgcm9vdCwgY2hpbGQsIG4pOwotCW5pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKGJ0cmVlLCByb290LCBsZXZlbCArIDEpOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKHJvb3QsIGxldmVsICsgMSk7CiAKIAlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9zaWJfYmgpKQogCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwpAQCAtOTIyLDcgKzg3Miw3IEBACiAKIAluaWxmc19idHJlZV9kb19pbnNlcnQoYnRyZWUsIHBhdGgsIGxldmVsLCBrZXlwLCBwdHJwKTsKIAotCSprZXlwID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBjaGlsZCwgMCk7CisJKmtleXAgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoY2hpbGQsIDApOwogCSpwdHJwID0gcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHI7CiB9CiAKQEAgLTk5MCwyNiArOTQwLDI5IEBACiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGUsICpwYXJlbnQsICpzaWI7CiAJX191NjQgc2licHRyOwogCWludCBwaW5kZXgsIGxldmVsLCByZXQ7CisJc3RydWN0IGlub2RlICpkYXQgPSBOVUxMOwogCiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwogCWxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfREFUQTsKIAogCS8qIGFsbG9jYXRlIGEgbmV3IHB0ciBmb3IgZGF0YSBibG9jayAqLwotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oJmJ0cmVlLT5idF9ibWFwKSkKKwlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKCZidHJlZS0+YnRfYm1hcCkpIHsKIAkJcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9wdHIgPQogCQkJbmlsZnNfYnRyZWVfZmluZF90YXJnZXRfdihidHJlZSwgcGF0aCwga2V5KTsKKwkJZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KCZidHJlZS0+YnRfYm1hcCk7CisJfQogCiAJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXRfZGF0YTsKIAogCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsKIAkgICAgIGxldmVsIDwgbmlsZnNfYnRyZWVfaGVpZ2h0KGJ0cmVlKSAtIDE7CiAJICAgICBsZXZlbCsrKSB7Ci0JCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpIDwKLQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChidHJlZSwgbm9kZSkpIHsKKwkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpIDwKKwkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChub2RlLCBidHJlZSkpIHsKIAkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfZG9faW5zZXJ0OwogCQkJc3RhdHMtPmJzX25ibG9ja3MrKzsKIAkJCWdvdG8gb3V0OwpAQCAtMTAyNiw4ICs5NzksOCBAQAogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBlcnJfb3V0X2NoaWxkX25vZGU7CiAJCQlzaWIgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhOwotCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgc2liKSA8Ci0JCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KGJ0cmVlLCBzaWIpKSB7CisJCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHNpYikgPAorCQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChzaWIsIGJ0cmVlKSkgewogCQkJCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IGJoOwogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfY2FycnlfbGVmdDsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcysrOwpAQCAtMTAzOCwxNSArOTkxLDE1IEBACiAKIAkJLyogcmlnaHQgc2libGluZyAqLwogCQlpZiAocGluZGV4IDwKLQkJICAgIG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgcGFyZW50KSAtIDEpIHsKKwkJICAgIG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihwYXJlbnQpIC0gMSkgewogCQkJc2licHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBwYXJlbnQsCiAJCQkJCQkJICBwaW5kZXggKyAxKTsKIAkJCXJldCA9IG5pbGZzX2J0cmVlX2dldF9ibG9jayhidHJlZSwgc2licHRyLCAmYmgpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBlcnJfb3V0X2NoaWxkX25vZGU7CiAJCQlzaWIgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhOwotCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgc2liKSA8Ci0JCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KGJ0cmVlLCBzaWIpKSB7CisJCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHNpYikgPAorCQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21heChzaWIsIGJ0cmVlKSkgewogCQkJCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IGJoOwogCQkJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfY2FycnlfcmlnaHQ7CiAJCQkJc3RhdHMtPmJzX25ibG9ja3MrKzsKQEAgLTEwNTksNyArMTAxMiw3IEBACiAJCXBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyID0KIAkJCXBhdGhbbGV2ZWwgLSAxXS5icF9uZXdyZXEuYnByX3B0ciArIDE7CiAJCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkJICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSk7CisJCQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLCBkYXQpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfbmV3X2Jsb2NrKGJ0cmVlLApAQCAtMTA4MSw4ICsxMDM0LDggQEAKIAogCS8qIHJvb3QgKi8KIAlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwotCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpIDwKLQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWF4KGJ0cmVlLCBub2RlKSkgeworCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgPAorCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9tYXgobm9kZSwgYnRyZWUpKSB7CiAJCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfZG9faW5zZXJ0OwogCQlzdGF0cy0+YnNfbmJsb2NrcysrOwogCQlnb3RvIG91dDsKQEAgLTEwOTEsNyArMTA0NCw3IEBACiAJLyogZ3JvdyAqLwogCXBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyID0gcGF0aFtsZXZlbCAtIDFdLmJwX25ld3JlcS5icHJfcHRyICsgMTsKIAlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSk7CisJCQkJCSAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEsIGRhdCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCXJldCA9IG5pbGZzX2J0cmVlX2dldF9uZXdfYmxvY2soYnRyZWUsIHBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyLApAQCAtMTExOSwxNiArMTA3MiwxOCBAQAogCiAJLyogZXJyb3IgKi8KICBlcnJfb3V0X2N1cnJfbm9kZToKLQluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwKKwkJCQkgICBkYXQpOwogIGVycl9vdXRfY2hpbGRfbm9kZToKIAlmb3IgKGxldmVsLS07IGxldmVsID4gTklMRlNfQlRSRUVfTEVWRUxfREFUQTsgbGV2ZWwtLSkgewogCQluaWxmc19idG5vZGVfZGVsZXRlKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAJCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSk7CisJCQkJCSAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEsIGRhdCk7CiAKIAl9CiAKLQluaWxmc19ibWFwX2Fib3J0X2FsbG9jX3B0cigmYnRyZWUtPmJ0X2JtYXAsICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCW5pbGZzX2JtYXBfYWJvcnRfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcSwKKwkJCQkgICBkYXQpOwogIGVycl9vdXRfZGF0YToKIAkqbGV2ZWxwID0gbGV2ZWw7CiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwpAQCAtMTEzOSwxNiArMTA5NCwxOSBAQAogCQkJCSAgICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCSAgICAgIGludCBtYXhsZXZlbCwgX191NjQga2V5LCBfX3U2NCBwdHIpCiB7CisJc3RydWN0IGlub2RlICpkYXQgPSBOVUxMOwogCWludCBsZXZlbDsKIAogCXNldF9idWZmZXJfbmlsZnNfdm9sYXRpbGUoKHN0cnVjdCBidWZmZXJfaGVhZCAqKSgodW5zaWduZWQgbG9uZylwdHIpKTsKIAlwdHIgPSBwYXRoW05JTEZTX0JUUkVFX0xFVkVMX0RBVEFdLmJwX25ld3JlcS5icHJfcHRyOwotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oJmJ0cmVlLT5idF9ibWFwKSkKKwlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKCZidHJlZS0+YnRfYm1hcCkpIHsKIAkJbmlsZnNfYnRyZWVfc2V0X3RhcmdldF92KGJ0cmVlLCBrZXksIHB0cik7CisJCWRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApOworCX0KIAogCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTjsgbGV2ZWwgPD0gbWF4bGV2ZWw7IGxldmVsKyspIHsKIAkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICAgICZwYXRoW2xldmVsIC0gMV0uYnBfbmV3cmVxKTsKKwkJCQkJICAgICZwYXRoW2xldmVsIC0gMV0uYnBfbmV3cmVxLCBkYXQpOwogCQlwYXRoW2xldmVsXS5icF9vcChidHJlZSwgcGF0aCwgbGV2ZWwsICZrZXksICZwdHIpOwogCX0KIApAQCAtMTE2NCwxMCArMTEyMiwxMCBAQAogCWludCBsZXZlbCwgcmV0OwogCiAJYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKLQlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aChidHJlZSk7CisJcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoKTsKIAlpZiAocGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQluaWxmc19idHJlZV9pbml0X3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX2luaXRfcGF0aChwYXRoKTsKIAogCXJldCA9IG5pbGZzX2J0cmVlX2RvX2xvb2t1cChidHJlZSwgcGF0aCwga2V5LCBOVUxMLAogCQkJCSAgICBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTik7CkBAIC0xMTg0LDggKzExNDIsOCBAQAogCW5pbGZzX2JtYXBfYWRkX2Jsb2NrcyhibWFwLCBzdGF0cy5ic19uYmxvY2tzKTsKIAogIG91dDoKLQluaWxmc19idHJlZV9jbGVhcl9wYXRoKGJ0cmVlLCBwYXRoKTsKLQluaWxmc19idHJlZV9mcmVlX3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX3JlbGVhc2VfcGF0aChwYXRoKTsKKwluaWxmc19idHJlZV9mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTE5Nyw3ICsxMTU1LDcgQEAKIAogCWlmIChsZXZlbCA8IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxKSB7CiAJCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKLQkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOwogCQluaWxmc19idHJlZV9ub2RlX2RlbGV0ZShidHJlZSwgbm9kZSwga2V5cCwgcHRycCwKIAkJCQkJcGF0aFtsZXZlbF0uYnBfaW5kZXgpOwogCQlpZiAoIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpCkBAIC0xMjA1LDcgKzExNjMsNyBAQAogCQl1bmxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAkJaWYgKHBhdGhbbGV2ZWxdLmJwX2luZGV4ID09IDApCiAJCQluaWxmc19idHJlZV9wcm9tb3RlX2tleShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLAotCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgMCkpOworCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKSk7CiAJfSBlbHNlIHsKIAkJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKIAkJbmlsZnNfYnRyZWVfbm9kZV9kZWxldGUoYnRyZWUsIG5vZGUsIGtleXAsIHB0cnAsCkBAIC0xMjI1LDEwICsxMTgzLDEwIEBACiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKLQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCWxlZnQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpOwotCWxuY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIGxlZnQpOworCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwlsZWZ0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKHBhdGgsIGxldmVsKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CisJbG5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihsZWZ0KTsKIAogCW4gPSAobmNoaWxkcmVuICsgbG5jaGlsZHJlbikgLyAyIC0gbmNoaWxkcmVuOwogCkBAIC0xMjQzLDcgKzEyMDEsNyBAQAogCXVubG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfc2liX2JoKTsKIAogCW5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsCi0JCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCAwKSk7CisJCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApKTsKIAogCWJyZWxzZShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IE5VTEw7CkBAIC0xMjYyLDEwICsxMjIwLDEwIEBACiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKLQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCXJpZ2h0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7Ci0JbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKLQlybmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCByaWdodCk7CisJbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOworCXJpZ2h0ID0gbmlsZnNfYnRyZWVfZ2V0X3NpYl9ub2RlKHBhdGgsIGxldmVsKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CisJcm5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihyaWdodCk7CiAKIAluID0gKG5jaGlsZHJlbiArIHJuY2hpbGRyZW4pIC8gMiAtIG5jaGlsZHJlbjsKIApAQCAtMTI4MSw3ICsxMjM5LDcgQEAKIAogCXBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCsrOwogCW5pbGZzX2J0cmVlX3Byb21vdGVfa2V5KGJ0cmVlLCBwYXRoLCBsZXZlbCArIDEsCi0JCQkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCByaWdodCwgMCkpOworCQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShyaWdodCwgMCkpOwogCXBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleC0tOwogCiAJYnJlbHNlKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CkBAIC0xMzAwLDEwICsxMjU4LDEwIEBACiAJbG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX3NpYl9iaCk7CiAKLQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOwotCWxlZnQgPSBuaWxmc19idHJlZV9nZXRfc2liX25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CisJbGVmdCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CiAKLQluID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKKwluID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKG5vZGUpOwogCiAJbmlsZnNfYnRyZWVfbm9kZV9tb3ZlX2xlZnQoYnRyZWUsIGxlZnQsIG5vZGUsIG4pOwogCkBAIC0xMzE2LDcgKzEyNzQsNyBAQAogCW5pbGZzX2J0bm9kZV9kZWxldGUocGF0aFtsZXZlbF0uYnBfYmgpOwogCXBhdGhbbGV2ZWxdLmJwX2JoID0gcGF0aFtsZXZlbF0uYnBfc2liX2JoOwogCXBhdGhbbGV2ZWxdLmJwX3NpYl9iaCA9IE5VTEw7Ci0JcGF0aFtsZXZlbF0uYnBfaW5kZXggKz0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBsZWZ0KTsKKwlwYXRoW2xldmVsXS5icF9pbmRleCArPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obGVmdCk7CiB9CiAKIHN0YXRpYyB2b2lkIG5pbGZzX2J0cmVlX2NvbmNhdF9yaWdodChzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLApAQCAtMTMzMSwxMCArMTI4OSwxMCBAQAogCWxvY2tfYnVmZmVyKHBhdGhbbGV2ZWxdLmJwX2JoKTsKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCi0Jbm9kZSA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKLQlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOworCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfbm9ucm9vdF9ub2RlKHBhdGgsIGxldmVsKTsKKwlyaWdodCA9IG5pbGZzX2J0cmVlX2dldF9zaWJfbm9kZShwYXRoLCBsZXZlbCk7CiAKLQluID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCByaWdodCk7CisJbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihyaWdodCk7CiAKIAluaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChidHJlZSwgbm9kZSwgcmlnaHQsIG4pOwogCkBAIC0xMzYwLDExICsxMzE4LDExIEBACiAKIAlsb2NrX2J1ZmZlcihwYXRoW2xldmVsXS5icF9iaCk7CiAJcm9vdCA9IG5pbGZzX2J0cmVlX2dldF9yb290KGJ0cmVlKTsKLQljaGlsZCA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUoYnRyZWUsIHBhdGgsIGxldmVsKTsKKwljaGlsZCA9IG5pbGZzX2J0cmVlX2dldF9ub25yb290X25vZGUocGF0aCwgbGV2ZWwpOwogCiAJbmlsZnNfYnRyZWVfbm9kZV9kZWxldGUoYnRyZWUsIHJvb3QsIE5VTEwsIE5VTEwsIDApOwotCW5pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKGJ0cmVlLCByb290LCBsZXZlbCk7Ci0JbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgY2hpbGQpOworCW5pbGZzX2J0cmVlX25vZGVfc2V0X2xldmVsKHJvb3QsIGxldmVsKTsKKwluID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGNoaWxkKTsKIAluaWxmc19idHJlZV9ub2RlX21vdmVfbGVmdChidHJlZSwgcm9vdCwgY2hpbGQsIG4pOwogCXVubG9ja19idWZmZXIocGF0aFtsZXZlbF0uYnBfYmgpOwogCkBAIC0xMzc2LDcgKzEzMzQsOCBAQAogc3RhdGljIGludCBuaWxmc19idHJlZV9wcmVwYXJlX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAogCQkJCSAgICAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAogCQkJCSAgICAgIGludCAqbGV2ZWxwLAotCQkJCSAgICAgIHN0cnVjdCBuaWxmc19ibWFwX3N0YXRzICpzdGF0cykKKwkJCQkgICAgICBzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyAqc3RhdHMsCisJCQkJICAgICAgc3RydWN0IGlub2RlICpkYXQpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgKnBhcmVudCwgKnNpYjsKQEAgLTEzODgsMTcgKzEzNDcsMTcgQEAKIAlmb3IgKGxldmVsID0gTklMRlNfQlRSRUVfTEVWRUxfTk9ERV9NSU47CiAJICAgICBsZXZlbCA8IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxOwogCSAgICAgbGV2ZWwrKykgewotCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwpOworCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CiAJCXBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcHRyID0KIAkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgbm9kZSwKIAkJCQkJCSBwYXRoW2xldmVsXS5icF9pbmRleCk7CiAJCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJCSAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxKTsKKwkJCQkJCSAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCi0JCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIG5vZGUpID4KLQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21pbihidHJlZSwgbm9kZSkpIHsKKwkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihub2RlKSA+CisJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4obm9kZSwgYnRyZWUpKSB7CiAJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2RvX2RlbGV0ZTsKIAkJCXN0YXRzLT5ic19uYmxvY2tzKys7CiAJCQlnb3RvIG91dDsKQEAgLTE0MTUsOCArMTM3NCw4IEBACiAJCQlpZiAocmV0IDwgMCkKIAkJCQlnb3RvIGVycl9vdXRfY3Vycl9ub2RlOwogCQkJc2liID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopYmgtPmJfZGF0YTsKLQkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHNpYikgPgotCQkJICAgIG5pbGZzX2J0cmVlX25vZGVfbmNoaWxkcmVuX21pbihidHJlZSwgc2liKSkgeworCQkJaWYgKG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihzaWIpID4KKwkJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4oc2liLCBidHJlZSkpIHsKIAkJCQlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBiaDsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2JvcnJvd19sZWZ0OwogCQkJCXN0YXRzLT5ic19uYmxvY2tzKys7CkBAIC0xNDI4LDcgKzEzODcsNyBAQAogCQkJCS8qIGNvbnRpbnVlOyAqLwogCQkJfQogCQl9IGVsc2UgaWYgKHBpbmRleCA8Ci0JCQkgICBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHBhcmVudCkgLSAxKSB7CisJCQkgICBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocGFyZW50KSAtIDEpIHsKIAkJCS8qIHJpZ2h0IHNpYmxpbmcgKi8KIAkJCXNpYnB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcGFyZW50LAogCQkJCQkJCSAgcGluZGV4ICsgMSk7CkBAIC0xNDM2LDggKzEzOTUsOCBAQAogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBlcnJfb3V0X2N1cnJfbm9kZTsKIAkJCXNpYiA9IChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKWJoLT5iX2RhdGE7Ci0JCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBzaWIpID4KLQkJCSAgICBuaWxmc19idHJlZV9ub2RlX25jaGlsZHJlbl9taW4oYnRyZWUsIHNpYikpIHsKKwkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oc2liKSA+CisJCQkgICAgbmlsZnNfYnRyZWVfbm9kZV9uY2hpbGRyZW5fbWluKHNpYiwgYnRyZWUpKSB7CiAJCQkJcGF0aFtsZXZlbF0uYnBfc2liX2JoID0gYmg7CiAJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9ib3Jyb3dfcmlnaHQ7CiAJCQkJc3RhdHMtPmJzX25ibG9ja3MrKzsKQEAgLTE0NTIsNyArMTQxMSw3IEBACiAJCQkvKiBubyBzaWJsaW5ncyAqLwogCQkJLyogdGhlIG9ubHkgY2hpbGQgb2YgdGhlIHJvb3Qgbm9kZSAqLwogCQkJV0FSTl9PTihsZXZlbCAhPSBuaWxmc19idHJlZV9oZWlnaHQoYnRyZWUpIC0gMik7Ci0JCQlpZiAobmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKSAtIDEgPD0KKwkJCWlmIChuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSkgLSAxIDw9CiAJCQkgICAgTklMRlNfQlRSRUVfUk9PVF9OQ0hJTERSRU5fTUFYKSB7CiAJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9zaHJpbms7CiAJCQkJc3RhdHMtPmJzX25ibG9ja3MgKz0gMjsKQEAgLTE0NzEsNyArMTQzMCw3IEBACiAJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgbm9kZSwgcGF0aFtsZXZlbF0uYnBfaW5kZXgpOwogCiAJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSk7CisJCQkJCSAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXRfY2hpbGRfbm9kZTsKIApAQCAtMTQ4NiwxMiArMTQ0NSwxMiBAQAogCiAJLyogZXJyb3IgKi8KICBlcnJfb3V0X2N1cnJfbm9kZToKLQluaWxmc19ibWFwX2Fib3J0X2VuZF9wdHIoJmJ0cmVlLT5idF9ibWFwLCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxKTsKKwluaWxmc19ibWFwX2Fib3J0X2VuZF9wdHIoJmJ0cmVlLT5idF9ibWFwLCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogIGVycl9vdXRfY2hpbGRfbm9kZToKIAlmb3IgKGxldmVsLS07IGxldmVsID49IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOOyBsZXZlbC0tKSB7CiAJCWJyZWxzZShwYXRoW2xldmVsXS5icF9zaWJfYmgpOwogCQluaWxmc19ibWFwX2Fib3J0X2VuZF9wdHIoJmJ0cmVlLT5idF9ibWFwLAotCQkJCQkgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSk7CisJCQkJCSAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogCX0KIAkqbGV2ZWxwID0gbGV2ZWw7CiAJc3RhdHMtPmJzX25ibG9ja3MgPSAwOwpAQCAtMTUwMCwxMyArMTQ1OSwxMyBAQAogCiBzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9jb21taXRfZGVsZXRlKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCiAJCQkJICAgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCi0JCQkJICAgICAgaW50IG1heGxldmVsKQorCQkJCSAgICAgIGludCBtYXhsZXZlbCwgc3RydWN0IGlub2RlICpkYXQpCiB7CiAJaW50IGxldmVsOwogCiAJZm9yIChsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOOyBsZXZlbCA8PSBtYXhsZXZlbDsgbGV2ZWwrKykgewogCQluaWxmc19ibWFwX2NvbW1pdF9lbmRfcHRyKCZidHJlZS0+YnRfYm1hcCwKLQkJCQkJICAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxKTsKKwkJCQkJICAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLCBkYXQpOwogCQlwYXRoW2xldmVsXS5icF9vcChidHJlZSwgcGF0aCwgbGV2ZWwsIE5VTEwsIE5VTEwpOwogCX0KIApAQCAtMTUyMCwyNyArMTQ3OSwzMiBAQAogCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CiAJc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGg7CiAJc3RydWN0IG5pbGZzX2JtYXBfc3RhdHMgc3RhdHM7CisJc3RydWN0IGlub2RlICpkYXQ7CiAJaW50IGxldmVsLCByZXQ7CiAKIAlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwotCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKGJ0cmVlKTsKKwlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aCgpOwogCWlmIChwYXRoID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCW5pbGZzX2J0cmVlX2luaXRfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfaW5pdF9wYXRoKHBhdGgpOwogCXJldCA9IG5pbGZzX2J0cmVlX2RvX2xvb2t1cChidHJlZSwgcGF0aCwga2V5LCBOVUxMLAogCQkJCSAgICBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gbmlsZnNfYnRyZWVfcHJlcGFyZV9kZWxldGUoYnRyZWUsIHBhdGgsICZsZXZlbCwgJnN0YXRzKTsKKworCWRhdCA9IE5JTEZTX0JNQVBfVVNFX1ZCTigmYnRyZWUtPmJ0X2JtYXApID8KKwkJbmlsZnNfYm1hcF9nZXRfZGF0KCZidHJlZS0+YnRfYm1hcCkgOiBOVUxMOworCisJcmV0ID0gbmlsZnNfYnRyZWVfcHJlcGFyZV9kZWxldGUoYnRyZWUsIHBhdGgsICZsZXZlbCwgJnN0YXRzLCBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKLQluaWxmc19idHJlZV9jb21taXRfZGVsZXRlKGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJbmlsZnNfYnRyZWVfY29tbWl0X2RlbGV0ZShidHJlZSwgcGF0aCwgbGV2ZWwsIGRhdCk7CiAJbmlsZnNfYm1hcF9zdWJfYmxvY2tzKGJtYXAsIHN0YXRzLmJzX25ibG9ja3MpOwogCiBvdXQ6Ci0JbmlsZnNfYnRyZWVfY2xlYXJfcGF0aChidHJlZSwgcGF0aCk7Ci0JbmlsZnNfYnRyZWVfZnJlZV9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9yZWxlYXNlX3BhdGgocGF0aCk7CisJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1NTEsMTUgKzE1MTUsMTUgQEAKIAlpbnQgcmV0OwogCiAJYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKLQlwYXRoID0gbmlsZnNfYnRyZWVfYWxsb2NfcGF0aChidHJlZSk7CisJcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoKTsKIAlpZiAocGF0aCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQluaWxmc19idHJlZV9pbml0X3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX2luaXRfcGF0aChwYXRoKTsKIAogCXJldCA9IG5pbGZzX2J0cmVlX2RvX2xvb2t1cF9sYXN0KGJ0cmVlLCBwYXRoLCBrZXlwLCBOVUxMKTsKIAotCW5pbGZzX2J0cmVlX2NsZWFyX3BhdGgoYnRyZWUsIHBhdGgpOwotCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChidHJlZSwgcGF0aCk7CisJbmlsZnNfYnRyZWVfcmVsZWFzZV9wYXRoKHBhdGgpOworCW5pbGZzX2J0cmVlX2ZyZWVfcGF0aChwYXRoKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTgxLDcgKzE1NDUsNyBAQAogCQlub2RlID0gcm9vdDsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4oYnRyZWUsIHJvb3QpOworCQluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4ocm9vdCk7CiAJCWlmIChuY2hpbGRyZW4gPiAxKQogCQkJcmV0dXJuIDA7CiAJCXB0ciA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihidHJlZSwgcm9vdCwgbmNoaWxkcmVuIC0gMSk7CkBAIC0xNTk0LDEwICsxNTU4LDEwIEBACiAJCXJldHVybiAwOwogCX0KIAotCW5jaGlsZHJlbiA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X25jaGlsZHJlbihidHJlZSwgbm9kZSk7Ci0JbWF4a2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCBuY2hpbGRyZW4gLSAxKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CisJbWF4a2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIG5jaGlsZHJlbiAtIDEpOwogCW5leHRtYXhrZXkgPSAobmNoaWxkcmVuID4gMSkgPwotCQluaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIG5vZGUsIG5jaGlsZHJlbiAtIDIpIDogMDsKKwkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIG5jaGlsZHJlbiAtIDIpIDogMDsKIAlpZiAoYmggIT0gTlVMTCkKIAkJYnJlbHNlKGJoKTsKIApAQCAtMTYyMyw3ICsxNTg3LDcgQEAKIAkJbm9kZSA9IHJvb3Q7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCByb290KTsKKwkJbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKHJvb3QpOwogCQlXQVJOX09OKG5jaGlsZHJlbiA+IDEpOwogCQlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIHJvb3QsIG5jaGlsZHJlbiAtIDEpOwogCQlyZXQgPSBuaWxmc19idHJlZV9nZXRfYmxvY2soYnRyZWUsIHB0ciwgJmJoKTsKQEAgLTE2MzYsMTEgKzE2MDAsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbmNoaWxkcmVuID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbmNoaWxkcmVuKGJ0cmVlLCBub2RlKTsKKwluY2hpbGRyZW4gPSBuaWxmc19idHJlZV9ub2RlX2dldF9uY2hpbGRyZW4obm9kZSk7CiAJaWYgKG5jaGlsZHJlbiA8IG5pdGVtcykKIAkJbml0ZW1zID0gbmNoaWxkcmVuOwotCWRrZXlzID0gbmlsZnNfYnRyZWVfbm9kZV9ka2V5cyhidHJlZSwgbm9kZSk7Ci0JZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKGJ0cmVlLCBub2RlKTsKKwlka2V5cyA9IG5pbGZzX2J0cmVlX25vZGVfZGtleXMobm9kZSk7CisJZHB0cnMgPSBuaWxmc19idHJlZV9ub2RlX2RwdHJzKG5vZGUsIGJ0cmVlKTsKIAlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspIHsKIAkJa2V5c1tpXSA9IG5pbGZzX2JtYXBfZGtleV90b19rZXkoZGtleXNbaV0pOwogCQlwdHJzW2ldID0gbmlsZnNfYm1hcF9kcHRyX3RvX3B0cihkcHRyc1tpXSk7CkBAIC0xNjYwLDE4ICsxNjI0LDIwIEBACiAJCQkJICAgICAgIHN0cnVjdCBuaWxmc19ibWFwX3N0YXRzICpzdGF0cykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CisJc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOworCXN0cnVjdCBpbm9kZSAqZGF0ID0gTlVMTDsKIAlpbnQgcmV0OwogCi0JYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKIAlzdGF0cy0+YnNfbmJsb2NrcyA9IDA7CiAKIAkvKiBmb3IgZGF0YSAqLwogCS8qIGNhbm5vdCBmaW5kIG5lYXIgcHRyICovCi0JaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkKKwlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKSB7CiAJCWRyZXEtPmJwcl9wdHIgPSBuaWxmc19idHJlZV9maW5kX3RhcmdldF92KGJ0cmVlLCBOVUxMLCBrZXkpOworCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYm1hcCk7CisJfQogCi0JcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cihibWFwLCBkcmVxKTsKKwlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfYWxsb2NfcHRyKGJtYXAsIGRyZXEsIGRhdCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTE2NzksNyArMTY0NSw3IEBACiAJc3RhdHMtPmJzX25ibG9ja3MrKzsKIAlpZiAobnJlcSAhPSBOVUxMKSB7CiAJCW5yZXEtPmJwcl9wdHIgPSBkcmVxLT5icHJfcHRyICsgMTsKLQkJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cihibWFwLCBucmVxKTsKKwkJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2FsbG9jX3B0cihibWFwLCBucmVxLCBkYXQpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX291dF9kcmVxOwogCkBAIC0xNjk2LDkgKzE2NjIsOSBAQAogCiAJLyogZXJyb3IgKi8KICBlcnJfb3V0X25yZXE6Ci0JbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoYm1hcCwgbnJlcSk7CisJbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoYm1hcCwgbnJlcSwgZGF0KTsKICBlcnJfb3V0X2RyZXE6Ci0JbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoYm1hcCwgZHJlcSk7CisJbmlsZnNfYm1hcF9hYm9ydF9hbGxvY19wdHIoYm1hcCwgZHJlcSwgZGF0KTsKIAlzdGF0cy0+YnNfbmJsb2NrcyA9IDA7CiAJcmV0dXJuIHJldDsKIApAQCAtMTcxMyw4ICsxNjc5LDkgQEAKIAkJCQkgICAgICB1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgKm5yZXEsCiAJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlOworCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUgPSAoc3RydWN0IG5pbGZzX2J0cmVlICopYm1hcDsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmRhdDsKIAlfX3U2NCB0bXBwdHI7CiAKIAkvKiBmcmVlIHJlc291cmNlcyAqLwpAQCAtMTcyNSwxMSArMTY5MiwxMSBAQAogCXNldF9idWZmZXJfbmlsZnNfdm9sYXRpbGUoKHN0cnVjdCBidWZmZXJfaGVhZCAqKSgodW5zaWduZWQgbG9uZylwdHIpKTsKIAogCS8qIGNvbnZlcnQgYW5kIGluc2VydCAqLwotCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7CisJZGF0ID0gTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApID8gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApIDogTlVMTDsKIAluaWxmc19idHJlZV9pbml0KGJtYXApOwogCWlmIChucmVxICE9IE5VTEwpIHsKLQkJbmlsZnNfYm1hcF9jb21taXRfYWxsb2NfcHRyKGJtYXAsIGRyZXEpOwotCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgbnJlcSk7CisJCW5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cihibWFwLCBkcmVxLCBkYXQpOworCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgbnJlcSwgZGF0KTsKIAogCQkvKiBjcmVhdGUgY2hpbGQgbm9kZSBhdCBsZXZlbCAxICovCiAJCWxvY2tfYnVmZmVyKGJoKTsKQEAgLTE3NTEsNyArMTcxOCw3IEBACiAJCW5pbGZzX2J0cmVlX25vZGVfaW5pdChidHJlZSwgbm9kZSwgTklMRlNfQlRSRUVfTk9ERV9ST09ULAogCQkJCSAgICAgIDIsIDEsICZrZXlzWzBdLCAmdG1wcHRyKTsKIAl9IGVsc2UgewotCQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoYm1hcCwgZHJlcSk7CisJCW5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cihibWFwLCBkcmVxLCBkYXQpOwogCiAJCS8qIGNyZWF0ZSByb290IG5vZGUgYXQgbGV2ZWwgMSAqLwogCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X3Jvb3QoYnRyZWUpOwpAQCAtMTgyMiw3ICsxNzg5LDcgQEAKIAogc3RhdGljIGludCBuaWxmc19idHJlZV9wcmVwYXJlX3VwZGF0ZV92KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCiAJCQkJCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAotCQkJCQlpbnQgbGV2ZWwpCisJCQkJCWludCBsZXZlbCwgc3RydWN0IGlub2RlICpkYXQpCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKnBhcmVudDsKIAlpbnQgcmV0OwpAQCAtMTgzMiw5ICsxNzk5LDggQEAKIAkJbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBwYXJlbnQsCiAJCQkJCSBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgpOwogCXBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcHRyID0gcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9wdHIgKyAxOwotCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV91cGRhdGVfdigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCSAgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwKLQkJCQkJICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxKTsKKwlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV91cGRhdGUoZGF0LCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9yZXEsCisJCQkJICAgICAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3JlcSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTE4NDYsOSArMTgxMiw5IEBACiAJCQkmTklMRlNfQk1BUF9JKCZidHJlZS0+YnRfYm1hcCktPmlfYnRub2RlX2NhY2hlLAogCQkJJnBhdGhbbGV2ZWxdLmJwX2N0eHQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJbmlsZnNfYm1hcF9hYm9ydF91cGRhdGVfdigmYnRyZWUtPmJ0X2JtYXAsCi0JCQkJCQkgICZwYXRoW2xldmVsXS5icF9vbGRyZXEsCi0JCQkJCQkgICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCQkJbmlsZnNfZGF0X2Fib3J0X3VwZGF0ZShkYXQsCisJCQkJCSAgICAgICAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9yZXEsCisJCQkJCSAgICAgICAmcGF0aFtsZXZlbF0uYnBfbmV3cmVxLmJwcl9yZXEpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTE4NTgsMTMgKzE4MjQsMTMgQEAKIAogc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY29tbWl0X3VwZGF0ZV92KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCiAJCQkJCXN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAotCQkJCQlpbnQgbGV2ZWwpCisJCQkJCWludCBsZXZlbCwgc3RydWN0IGlub2RlICpkYXQpCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKnBhcmVudDsKIAotCW5pbGZzX2JtYXBfY29tbWl0X3VwZGF0ZV92KCZidHJlZS0+YnRfYm1hcCwKLQkJCQkgICAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLAotCQkJCSAgICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCW5pbGZzX2RhdF9jb21taXRfdXBkYXRlKGRhdCwgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcmVxLAorCQkJCSZwYXRoW2xldmVsXS5icF9uZXdyZXEuYnByX3JlcSwKKwkJCQlidHJlZS0+YnRfYm1hcC5iX3B0cl90eXBlID09IE5JTEZTX0JNQVBfUFRSX1ZTKTsKIAogCWlmIChidWZmZXJfbmlsZnNfbm9kZShwYXRoW2xldmVsXS5icF9iaCkpIHsKIAkJbmlsZnNfYnRub2RlX2NvbW1pdF9jaGFuZ2Vfa2V5KApAQCAtMTg4MSwxMSArMTg0NywxMCBAQAogCiBzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9hYm9ydF91cGRhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAogCQkJCSAgICAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCQkgICAgICAgaW50IGxldmVsKQorCQkJCSAgICAgICBpbnQgbGV2ZWwsIHN0cnVjdCBpbm9kZSAqZGF0KQogewotCW5pbGZzX2JtYXBfYWJvcnRfdXBkYXRlX3YoJmJ0cmVlLT5idF9ibWFwLAotCQkJCSAgJnBhdGhbbGV2ZWxdLmJwX29sZHJlcSwKLQkJCQkgICZwYXRoW2xldmVsXS5icF9uZXdyZXEpOworCW5pbGZzX2RhdF9hYm9ydF91cGRhdGUoZGF0LCAmcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9yZXEsCisJCQkgICAgICAgJnBhdGhbbGV2ZWxdLmJwX25ld3JlcS5icHJfcmVxKTsKIAlpZiAoYnVmZmVyX25pbGZzX25vZGUocGF0aFtsZXZlbF0uYnBfYmgpKQogCQluaWxmc19idG5vZGVfYWJvcnRfY2hhbmdlX2tleSgKIAkJCSZOSUxGU19CTUFQX0koJmJ0cmVlLT5idF9ibWFwKS0+aV9idG5vZGVfY2FjaGUsCkBAIC0xODk0LDE0ICsxODU5LDE0IEBACiAKIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJlcGFyZV9wcm9wYWdhdGVfdihzdHJ1Y3QgbmlsZnNfYnRyZWUgKmJ0cmVlLAogCQkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCQkJICAgaW50IG1pbmxldmVsLAotCQkJCQkgICBpbnQgKm1heGxldmVscCkKKwkJCQkJICAgaW50IG1pbmxldmVsLCBpbnQgKm1heGxldmVscCwKKwkJCQkJICAgc3RydWN0IGlub2RlICpkYXQpCiB7CiAJaW50IGxldmVsLCByZXQ7CiAKIAlsZXZlbCA9IG1pbmxldmVsOwogCWlmICghYnVmZmVyX25pbGZzX3ZvbGF0aWxlKHBhdGhbbGV2ZWxdLmJwX2JoKSkgewotCQlyZXQgPSBuaWxmc19idHJlZV9wcmVwYXJlX3VwZGF0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJCXJldCA9IG5pbGZzX2J0cmVlX3ByZXBhcmVfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTkwOSw3ICsxODc0LDcgQEAKIAkgICAgICAgIWJ1ZmZlcl9kaXJ0eShwYXRoW2xldmVsXS5icF9iaCkpIHsKIAogCQlXQVJOX09OKGJ1ZmZlcl9uaWxmc192b2xhdGlsZShwYXRoW2xldmVsXS5icF9iaCkpOwotCQlyZXQgPSBuaWxmc19idHJlZV9wcmVwYXJlX3VwZGF0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJCXJldCA9IG5pbGZzX2J0cmVlX3ByZXBhcmVfdXBkYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsLCBkYXQpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTE5MjEsMzkgKzE4ODYsNDAgQEAKIAkvKiBlcnJvciAqLwogIG91dDoKIAl3aGlsZSAoLS1sZXZlbCA+IG1pbmxldmVsKQotCQluaWxmc19idHJlZV9hYm9ydF91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwpOworCQluaWxmc19idHJlZV9hYm9ydF91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwsIGRhdCk7CiAJaWYgKCFidWZmZXJfbmlsZnNfdm9sYXRpbGUocGF0aFtsZXZlbF0uYnBfYmgpKQotCQluaWxmc19idHJlZV9hYm9ydF91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwpOworCQluaWxmc19idHJlZV9hYm9ydF91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwsIGRhdCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfY29tbWl0X3Byb3BhZ2F0ZV92KHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCiAJCQkJCSAgIHN0cnVjdCBuaWxmc19idHJlZV9wYXRoICpwYXRoLAotCQkJCQkgICBpbnQgbWlubGV2ZWwsCi0JCQkJCSAgIGludCBtYXhsZXZlbCwKLQkJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKKwkJCQkJICAgaW50IG1pbmxldmVsLCBpbnQgbWF4bGV2ZWwsCisJCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJCSAgIHN0cnVjdCBpbm9kZSAqZGF0KQogewogCWludCBsZXZlbDsKIAogCWlmICghYnVmZmVyX25pbGZzX3ZvbGF0aWxlKHBhdGhbbWlubGV2ZWxdLmJwX2JoKSkKLQkJbmlsZnNfYnRyZWVfY29tbWl0X3VwZGF0ZV92KGJ0cmVlLCBwYXRoLCBtaW5sZXZlbCk7CisJCW5pbGZzX2J0cmVlX2NvbW1pdF91cGRhdGVfdihidHJlZSwgcGF0aCwgbWlubGV2ZWwsIGRhdCk7CiAKIAlmb3IgKGxldmVsID0gbWlubGV2ZWwgKyAxOyBsZXZlbCA8PSBtYXhsZXZlbDsgbGV2ZWwrKykKLQkJbmlsZnNfYnRyZWVfY29tbWl0X3VwZGF0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCk7CisJCW5pbGZzX2J0cmVlX2NvbW1pdF91cGRhdGVfdihidHJlZSwgcGF0aCwgbGV2ZWwsIGRhdCk7CiB9CiAKIHN0YXRpYyBpbnQgbmlsZnNfYnRyZWVfcHJvcGFnYXRlX3Yoc3RydWN0IG5pbGZzX2J0cmVlICpidHJlZSwKIAkJCQkgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKLQkJCQkgICBpbnQgbGV2ZWwsCi0JCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKKwkJCQkgICBpbnQgbGV2ZWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7CiAJaW50IG1heGxldmVsLCByZXQ7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKnBhcmVudDsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApOwogCV9fdTY0IHB0cjsKIAogCWdldF9iaChiaCk7CiAJcGF0aFtsZXZlbF0uYnBfYmggPSBiaDsKLQlyZXQgPSBuaWxmc19idHJlZV9wcmVwYXJlX3Byb3BhZ2F0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgJm1heGxldmVsKTsKKwlyZXQgPSBuaWxmc19idHJlZV9wcmVwYXJlX3Byb3BhZ2F0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgJm1heGxldmVsLAorCQkJCQkgICAgICBkYXQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIApAQCAtMTk2MSwxMiArMTkyNywxMiBAQAogCQlwYXJlbnQgPSBuaWxmc19idHJlZV9nZXRfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxKTsKIAkJcHRyID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfcHRyKGJ0cmVlLCBwYXJlbnQsCiAJCQkJCSAgICAgICBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgpOwotCQlyZXQgPSBuaWxmc19ibWFwX21hcmtfZGlydHkoJmJ0cmVlLT5idF9ibWFwLCBwdHIpOworCQlyZXQgPSBuaWxmc19kYXRfbWFya19kaXJ0eShkYXQsIHB0cik7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CiAJfQogCi0JbmlsZnNfYnRyZWVfY29tbWl0X3Byb3BhZ2F0ZV92KGJ0cmVlLCBwYXRoLCBsZXZlbCwgbWF4bGV2ZWwsIGJoKTsKKwluaWxmc19idHJlZV9jb21taXRfcHJvcGFnYXRlX3YoYnRyZWUsIHBhdGgsIGxldmVsLCBtYXhsZXZlbCwgYmgsIGRhdCk7CiAKICBvdXQ6CiAJYnJlbHNlKHBhdGhbbGV2ZWxdLmJwX2JoKTsKQEAgLTE5ODYsMTUgKzE5NTIsMTUgQEAKIAlXQVJOX09OKCFidWZmZXJfZGlydHkoYmgpKTsKIAogCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7Ci0JcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoYnRyZWUpOworCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbmlsZnNfYnRyZWVfaW5pdF9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9pbml0X3BhdGgocGF0aCk7CiAKIAlpZiAoYnVmZmVyX25pbGZzX25vZGUoYmgpKSB7CiAJCW5vZGUgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhOwotCQlrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIG5vZGUsIDApOwotCQlsZXZlbCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKGJ0cmVlLCBub2RlKTsKKwkJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApOworCQlsZXZlbCA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2xldmVsKG5vZGUpOwogCX0gZWxzZSB7CiAJCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJtYXAsIGJoKTsKIAkJbGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9EQVRBOwpAQCAtMjAxMyw4ICsxOTc5LDggQEAKIAkJbmlsZnNfYnRyZWVfcHJvcGFnYXRlX3AoYnRyZWUsIHBhdGgsIGxldmVsLCBiaCk7CiAKICBvdXQ6Ci0JbmlsZnNfYnRyZWVfY2xlYXJfcGF0aChidHJlZSwgcGF0aCk7Ci0JbmlsZnNfYnRyZWVfZnJlZV9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9yZWxlYXNlX3BhdGgocGF0aCk7CisJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwMjIsNyArMTk4OCw3IEBACiBzdGF0aWMgaW50IG5pbGZzX2J0cmVlX3Byb3BhZ2F0ZV9nYyhjb25zdCBzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlyZXR1cm4gbmlsZnNfYm1hcF9tYXJrX2RpcnR5KGJtYXAsIGJoLT5iX2Jsb2NrbnIpOworCXJldHVybiBuaWxmc19kYXRfbWFya19kaXJ0eShuaWxmc19ibWFwX2dldF9kYXQoYm1hcCksIGJoLT5iX2Jsb2NrbnIpOwogfQogCiBzdGF0aWMgdm9pZCBuaWxmc19idHJlZV9hZGRfZGlydHlfYnVmZmVyKHN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWUsCkBAIC0yMDM3LDEyICsyMDAzLDEyIEBACiAKIAlnZXRfYmgoYmgpOwogCW5vZGUgPSAoc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKiliaC0+Yl9kYXRhOwotCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShidHJlZSwgbm9kZSwgMCk7Ci0JbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSk7CisJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApOworCWxldmVsID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfbGV2ZWwobm9kZSk7CiAJbGlzdF9mb3JfZWFjaChoZWFkLCAmbGlzdHNbbGV2ZWxdKSB7CiAJCWNiaCA9IGxpc3RfZW50cnkoaGVhZCwgc3RydWN0IGJ1ZmZlcl9oZWFkLCBiX2Fzc29jX2J1ZmZlcnMpOwogCQljbm9kZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqKWNiaC0+Yl9kYXRhOwotCQlja2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBjbm9kZSwgMCk7CisJCWNrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoY25vZGUsIDApOwogCQlpZiAoa2V5IDwgY2tleSkKIAkJCWJyZWFrOwogCX0KQEAgLTIxMjAsOCArMjA4Niw3IEBACiAJbmlsZnNfYnRyZWVfbm9kZV9zZXRfcHRyKGJ0cmVlLCBwYXJlbnQsCiAJCQkJIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCwgYmxvY2tucik7CiAKLQlrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkoYnRyZWUsIHBhcmVudCwKLQkJCQkgICAgICAgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4KTsKKwlrZXkgPSBuaWxmc19idHJlZV9ub2RlX2dldF9rZXkocGFyZW50LCBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXgpOwogCS8qIG9uLWRpc2sgZm9ybWF0ICovCiAJYmluZm8tPmJpX2RhdC5iaV9ibGtvZmYgPSBuaWxmc19ibWFwX2tleV90b19ka2V5KGtleSk7CiAJYmluZm8tPmJpX2RhdC5iaV9sZXZlbCA9IGxldmVsOwpAQCAtMjEzNyw2ICsyMTAyLDcgQEAKIAkJCQl1bmlvbiBuaWxmc19iaW5mbyAqYmluZm8pCiB7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKnBhcmVudDsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdCgmYnRyZWUtPmJ0X2JtYXApOwogCV9fdTY0IGtleTsKIAlfX3U2NCBwdHI7CiAJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxIHJlcTsKQEAgLTIxNDYsMTIgKzIxMTIsMTIgQEAKIAlwdHIgPSBuaWxmc19idHJlZV9ub2RlX2dldF9wdHIoYnRyZWUsIHBhcmVudCwKIAkJCQkgICAgICAgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4KTsKIAlyZXEuYnByX3B0ciA9IHB0cjsKLQlyZXQgPSBuaWxmc19ibWFwX3N0YXJ0X3YoJmJ0cmVlLT5idF9ibWFwLCAmcmVxLCBibG9ja25yKTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpCisJcmV0ID0gbmlsZnNfZGF0X3ByZXBhcmVfc3RhcnQoZGF0LCAmcmVxLmJwcl9yZXEpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OworCW5pbGZzX2RhdF9jb21taXRfc3RhcnQoZGF0LCAmcmVxLmJwcl9yZXEsIGJsb2NrbnIpOwogCi0Ja2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBwYXJlbnQsCi0JCQkJICAgICAgIHBhdGhbbGV2ZWwgKyAxXS5icF9pbmRleCk7CisJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KHBhcmVudCwgcGF0aFtsZXZlbCArIDFdLmJwX2luZGV4KTsKIAkvKiBvbi1kaXNrIGZvcm1hdCAqLwogCWJpbmZvLT5iaV92LmJpX3ZibG9ja25yID0gbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOwogCWJpbmZvLT5iaV92LmJpX2Jsa29mZiA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKQEAgLTIxNzEsMTUgKzIxMzcsMTUgQEAKIAlpbnQgbGV2ZWwsIHJldDsKIAogCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7Ci0JcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoYnRyZWUpOworCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbmlsZnNfYnRyZWVfaW5pdF9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9pbml0X3BhdGgocGF0aCk7CiAKIAlpZiAoYnVmZmVyX25pbGZzX25vZGUoKmJoKSkgewogCQlub2RlID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopKCpiaCktPmJfZGF0YTsKLQkJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCAwKTsKLQkJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChidHJlZSwgbm9kZSk7CisJCWtleSA9IG5pbGZzX2J0cmVlX25vZGVfZ2V0X2tleShub2RlLCAwKTsKKwkJbGV2ZWwgPSBuaWxmc19idHJlZV9ub2RlX2dldF9sZXZlbChub2RlKTsKIAl9IGVsc2UgewogCQlrZXkgPSBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShibWFwLCAqYmgpOwogCQlsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX0RBVEE7CkBAIC0yMTk2LDggKzIxNjIsOCBAQAogCQluaWxmc19idHJlZV9hc3NpZ25fcChidHJlZSwgcGF0aCwgbGV2ZWwsIGJoLCBibG9ja25yLCBiaW5mbyk7CiAKICBvdXQ6Ci0JbmlsZnNfYnRyZWVfY2xlYXJfcGF0aChidHJlZSwgcGF0aCk7Ci0JbmlsZnNfYnRyZWVfZnJlZV9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9yZWxlYXNlX3BhdGgocGF0aCk7CisJbmlsZnNfYnRyZWVfZnJlZV9wYXRoKHBhdGgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIyMDcsMTkgKzIxNzMsMTggQEAKIAkJCQkgc2VjdG9yX3QgYmxvY2tuciwKIAkJCQkgdW5pb24gbmlsZnNfYmluZm8gKmJpbmZvKQogewotCXN0cnVjdCBuaWxmc19idHJlZSAqYnRyZWU7CiAJc3RydWN0IG5pbGZzX2J0cmVlX25vZGUgKm5vZGU7CiAJX191NjQga2V5OwogCWludCByZXQ7CiAKLQlidHJlZSA9IChzdHJ1Y3QgbmlsZnNfYnRyZWUgKilibWFwOwotCXJldCA9IG5pbGZzX2JtYXBfbW92ZV92KGJtYXAsICgqYmgpLT5iX2Jsb2NrbnIsIGJsb2NrbnIpOworCXJldCA9IG5pbGZzX2RhdF9tb3ZlKG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKSwgKCpiaCktPmJfYmxvY2tuciwKKwkJCSAgICAgYmxvY2tucik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAlpZiAoYnVmZmVyX25pbGZzX25vZGUoKmJoKSkgewogCQlub2RlID0gKHN0cnVjdCBuaWxmc19idHJlZV9ub2RlICopKCpiaCktPmJfZGF0YTsKLQkJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KGJ0cmVlLCBub2RlLCAwKTsKKwkJa2V5ID0gbmlsZnNfYnRyZWVfbm9kZV9nZXRfa2V5KG5vZGUsIDApOwogCX0gZWxzZQogCQlrZXkgPSBuaWxmc19ibWFwX2RhdGFfZ2V0X2tleShibWFwLCAqYmgpOwogCkBAIC0yMjM5LDEwICsyMjA0LDEwIEBACiAJaW50IHJldDsKIAogCWJ0cmVlID0gKHN0cnVjdCBuaWxmc19idHJlZSAqKWJtYXA7Ci0JcGF0aCA9IG5pbGZzX2J0cmVlX2FsbG9jX3BhdGgoYnRyZWUpOworCXBhdGggPSBuaWxmc19idHJlZV9hbGxvY19wYXRoKCk7CiAJaWYgKHBhdGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbmlsZnNfYnRyZWVfaW5pdF9wYXRoKGJ0cmVlLCBwYXRoKTsKKwluaWxmc19idHJlZV9pbml0X3BhdGgocGF0aCk7CiAKIAlyZXQgPSBuaWxmc19idHJlZV9kb19sb29rdXAoYnRyZWUsIHBhdGgsIGtleSwgJnB0ciwgbGV2ZWwgKyAxKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMjI2Miw4ICsyMjI3LDggQEAKIAkJbmlsZnNfYm1hcF9zZXRfZGlydHkoJmJ0cmVlLT5idF9ibWFwKTsKIAogIG91dDoKLQluaWxmc19idHJlZV9jbGVhcl9wYXRoKGJ0cmVlLCBwYXRoKTsKLQluaWxmc19idHJlZV9mcmVlX3BhdGgoYnRyZWUsIHBhdGgpOworCW5pbGZzX2J0cmVlX3JlbGVhc2VfcGF0aChwYXRoKTsKKwluaWxmc19idHJlZV9mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2NwZmlsZS5jIGIvZnMvbmlsZnMyL2NwZmlsZS5jCmluZGV4IGFlYzk0MmMuLjFjNmNmYjUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9jcGZpbGUuYworKysgYi9mcy9uaWxmczIvY3BmaWxlLmMKQEAgLTgxNSw4ICs4MTUsMTAgQEAKIAl2b2lkICprYWRkcjsKIAlpbnQgcmV0OwogCi0JaWYgKGNubyA9PSAwKQotCQlyZXR1cm4gLUVOT0VOVDsgLyogY2hlY2twb2ludCBudW1iZXIgMCBpcyBpbnZhbGlkICovCisJLyogQ1AgbnVtYmVyIGlzIGludmFsaWQgaWYgaXQncyB6ZXJvIG9yIGxhcmdlciB0aGFuIHRoZQorCWxhcmdlc3QJZXhpc3Qgb25lLiovCisJaWYgKGNubyA9PSAwIHx8IGNubyA+PSBuaWxmc19tZHRfY25vKGNwZmlsZSkpCisJCXJldHVybiAtRU5PRU5UOwogCWRvd25fcmVhZCgmTklMRlNfTURUKGNwZmlsZSktPm1pX3NlbSk7CiAKIAlyZXQgPSBuaWxmc19jcGZpbGVfZ2V0X2NoZWNrcG9pbnRfYmxvY2soY3BmaWxlLCBjbm8sIDAsICZiaCk7CkBAIC04MjQsNyArODI2LDEwIEBACiAJCWdvdG8gb3V0OwogCWthZGRyID0ga21hcF9hdG9taWMoYmgtPmJfcGFnZSwgS01fVVNFUjApOwogCWNwID0gbmlsZnNfY3BmaWxlX2Jsb2NrX2dldF9jaGVja3BvaW50KGNwZmlsZSwgY25vLCBiaCwga2FkZHIpOwotCXJldCA9IG5pbGZzX2NoZWNrcG9pbnRfc25hcHNob3QoY3ApOworCWlmIChuaWxmc19jaGVja3BvaW50X2ludmFsaWQoY3ApKQorCQlyZXQgPSAtRU5PRU5UOworCWVsc2UKKwkJcmV0ID0gbmlsZnNfY2hlY2twb2ludF9zbmFwc2hvdChjcCk7CiAJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCWJyZWxzZShiaCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9jcGZpbGUuaCBiL2ZzL25pbGZzMi9jcGZpbGUuaAppbmRleCA3ODhhNDU5Li5kZWJlYTg5IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvY3BmaWxlLmgKKysrIGIvZnMvbmlsZnMyL2NwZmlsZS5oCkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9uaWxmczJfZnMuaD4KIAotI2RlZmluZSBOSUxGU19DUEZJTEVfR0ZQCU5JTEZTX01EVF9HRlAKLQogCiBpbnQgbmlsZnNfY3BmaWxlX2dldF9jaGVja3BvaW50KHN0cnVjdCBpbm9kZSAqLCBfX3U2NCwgaW50LAogCQkJCXN0cnVjdCBuaWxmc19jaGVja3BvaW50ICoqLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2RhdC5jIGIvZnMvbmlsZnMyL2RhdC5jCmluZGV4IDg5MjdjYTIuLjFmZjhlMTUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kYXQuYworKysgYi9mcy9uaWxmczIvZGF0LmMKQEAgLTEwOSwxMiArMTA5LDYgQEAKIAluaWxmc19wYWxsb2NfY29tbWl0X2ZyZWVfZW50cnkoZGF0LCByZXEpOwogfQogCi12b2lkIG5pbGZzX2RhdF9hYm9ydF9mcmVlKHN0cnVjdCBpbm9kZSAqZGF0LCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqcmVxKQotewotCW5pbGZzX2RhdF9hYm9ydF9lbnRyeShkYXQsIHJlcSk7Ci0JbmlsZnNfcGFsbG9jX2Fib3J0X2ZyZWVfZW50cnkoZGF0LCByZXEpOwotfQotCiBpbnQgbmlsZnNfZGF0X3ByZXBhcmVfc3RhcnQoc3RydWN0IGlub2RlICpkYXQsIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICpyZXEpCiB7CiAJaW50IHJldDsKQEAgLTE0MCwxMSArMTM0LDYgQEAKIAluaWxmc19kYXRfY29tbWl0X2VudHJ5KGRhdCwgcmVxKTsKIH0KIAotdm9pZCBuaWxmc19kYXRfYWJvcnRfc3RhcnQoc3RydWN0IGlub2RlICpkYXQsIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICpyZXEpCi17Ci0JbmlsZnNfZGF0X2Fib3J0X2VudHJ5KGRhdCwgcmVxKTsKLX0KLQogaW50IG5pbGZzX2RhdF9wcmVwYXJlX2VuZChzdHJ1Y3QgaW5vZGUgKmRhdCwgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKnJlcSkKIHsKIAlzdHJ1Y3QgbmlsZnNfZGF0X2VudHJ5ICplbnRyeTsKQEAgLTIyMiw2ICsyMTEsMzcgQEAKIAluaWxmc19kYXRfYWJvcnRfZW50cnkoZGF0LCByZXEpOwogfQogCitpbnQgbmlsZnNfZGF0X3ByZXBhcmVfdXBkYXRlKHN0cnVjdCBpbm9kZSAqZGF0LAorCQkJICAgICBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqb2xkcmVxLAorCQkJICAgICBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqbmV3cmVxKQoreworCWludCByZXQ7CisKKwlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV9lbmQoZGF0LCBvbGRyZXEpOworCWlmICghcmV0KSB7CisJCXJldCA9IG5pbGZzX2RhdF9wcmVwYXJlX2FsbG9jKGRhdCwgbmV3cmVxKTsKKwkJaWYgKHJldCA8IDApCisJCQluaWxmc19kYXRfYWJvcnRfZW5kKGRhdCwgb2xkcmVxKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBuaWxmc19kYXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgaW5vZGUgKmRhdCwKKwkJCSAgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKm9sZHJlcSwKKwkJCSAgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKm5ld3JlcSwgaW50IGRlYWQpCit7CisJbmlsZnNfZGF0X2NvbW1pdF9lbmQoZGF0LCBvbGRyZXEsIGRlYWQpOworCW5pbGZzX2RhdF9jb21taXRfYWxsb2MoZGF0LCBuZXdyZXEpOworfQorCit2b2lkIG5pbGZzX2RhdF9hYm9ydF91cGRhdGUoc3RydWN0IGlub2RlICpkYXQsCisJCQkgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKm9sZHJlcSwKKwkJCSAgICBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqbmV3cmVxKQoreworCW5pbGZzX2RhdF9hYm9ydF9lbmQoZGF0LCBvbGRyZXEpOworCW5pbGZzX2RhdF9hYm9ydF9hbGxvYyhkYXQsIG5ld3JlcSk7Cit9CisKIC8qKgogICogbmlsZnNfZGF0X21hcmtfZGlydHkgLQogICogQGRhdDogREFUIGZpbGUgaW5vZGUKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kYXQuaCBiL2ZzL25pbGZzMi9kYXQuaAppbmRleCBkMzI4YjgxLi40MDYwNzBkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZGF0LmgKKysrIGIvZnMvbmlsZnMyL2RhdC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCi0jZGVmaW5lIE5JTEZTX0RBVF9HRlAJTklMRlNfTURUX0dGUAogCiBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcTsKIApAQCAtMzksMTAgKzM4LDE1IEBACiBpbnQgbmlsZnNfZGF0X3ByZXBhcmVfc3RhcnQoc3RydWN0IGlub2RlICosIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICopOwogdm9pZCBuaWxmc19kYXRfY29tbWl0X3N0YXJ0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqLAogCQkJICAgIHNlY3Rvcl90KTsKLXZvaWQgbmlsZnNfZGF0X2Fib3J0X3N0YXJ0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqKTsKIGludCBuaWxmc19kYXRfcHJlcGFyZV9lbmQoc3RydWN0IGlub2RlICosIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICopOwogdm9pZCBuaWxmc19kYXRfY29tbWl0X2VuZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKiwgaW50KTsKIHZvaWQgbmlsZnNfZGF0X2Fib3J0X2VuZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKik7CitpbnQgbmlsZnNfZGF0X3ByZXBhcmVfdXBkYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqLAorCQkJICAgICBzdHJ1Y3QgbmlsZnNfcGFsbG9jX3JlcSAqKTsKK3ZvaWQgbmlsZnNfZGF0X2NvbW1pdF91cGRhdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICosCisJCQkgICAgIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICosIGludCk7Cit2b2lkIG5pbGZzX2RhdF9hYm9ydF91cGRhdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBuaWxmc19wYWxsb2NfcmVxICosCisJCQkgICAgc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgKik7CiAKIGludCBuaWxmc19kYXRfbWFya19kaXJ0eShzdHJ1Y3QgaW5vZGUgKiwgX191NjQpOwogaW50IG5pbGZzX2RhdF9mcmVldihzdHJ1Y3QgaW5vZGUgKiwgX191NjQgKiwgc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kaXJlY3QuYyBiL2ZzL25pbGZzMi9kaXJlY3QuYwppbmRleCAzNDJkOTc2Li5kMzY5YWM3IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZGlyZWN0LmMKKysrIGIvZnMvbmlsZnMyL2RpcmVjdC5jCkBAIC0xMjUsMTA2ICsxMjUsNjQgQEAKIAlkaXJlY3QtPmRfYm1hcC5iX2xhc3RfYWxsb2NhdGVkX3B0ciA9IHB0cjsKIH0KIAotc3RhdGljIGludCBuaWxmc19kaXJlY3RfcHJlcGFyZV9pbnNlcnQoc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LAotCQkJCSAgICAgICBfX3U2NCBrZXksCi0JCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxLAotCQkJCSAgICAgICBzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyAqc3RhdHMpCi17Ci0JaW50IHJldDsKLQotCWlmIChOSUxGU19CTUFQX1VTRV9WQk4oJmRpcmVjdC0+ZF9ibWFwKSkKLQkJcmVxLT5icHJfcHRyID0gbmlsZnNfZGlyZWN0X2ZpbmRfdGFyZ2V0X3YoZGlyZWN0LCBrZXkpOwotCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoJmRpcmVjdC0+ZF9ibWFwLCByZXEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0Jc3RhdHMtPmJzX25ibG9ja3MgPSAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBuaWxmc19kaXJlY3RfY29tbWl0X2luc2VydChzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QsCi0JCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxLAotCQkJCSAgICAgICBfX3U2NCBrZXksIF9fdTY0IHB0cikKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCi0JLyogcHRyIG11c3QgYmUgYSBwb2ludGVyIHRvIGEgYnVmZmVyIGhlYWQuICovCi0JYmggPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopKCh1bnNpZ25lZCBsb25nKXB0cik7Ci0Jc2V0X2J1ZmZlcl9uaWxmc192b2xhdGlsZShiaCk7Ci0KLQluaWxmc19ibWFwX2NvbW1pdF9hbGxvY19wdHIoJmRpcmVjdC0+ZF9ibWFwLCByZXEpOwotCW5pbGZzX2RpcmVjdF9zZXRfcHRyKGRpcmVjdCwga2V5LCByZXEtPmJwcl9wdHIpOwotCi0JaWYgKCFuaWxmc19ibWFwX2RpcnR5KCZkaXJlY3QtPmRfYm1hcCkpCi0JCW5pbGZzX2JtYXBfc2V0X2RpcnR5KCZkaXJlY3QtPmRfYm1hcCk7Ci0KLQlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKCZkaXJlY3QtPmRfYm1hcCkpCi0JCW5pbGZzX2RpcmVjdF9zZXRfdGFyZ2V0X3YoZGlyZWN0LCBrZXksIHJlcS0+YnByX3B0cik7Ci19Ci0KIHN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2luc2VydChzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5LCBfX3U2NCBwdHIpCiB7Ci0Jc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0OworCXN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCA9IChzdHJ1Y3QgbmlsZnNfZGlyZWN0ICopYm1hcDsKIAl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgcmVxOwotCXN0cnVjdCBuaWxmc19ibWFwX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpbm9kZSAqZGF0ID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCWludCByZXQ7CiAKLQlkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CiAJaWYgKGtleSA+IE5JTEZTX0RJUkVDVF9LRVlfTUFYKQogCQlyZXR1cm4gLUVOT0VOVDsKIAlpZiAobmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpICE9IE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpCiAJCXJldHVybiAtRUVYSVNUOwogCi0JcmV0ID0gbmlsZnNfZGlyZWN0X3ByZXBhcmVfaW5zZXJ0KGRpcmVjdCwga2V5LCAmcmVxLCAmc3RhdHMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCW5pbGZzX2RpcmVjdF9jb21taXRfaW5zZXJ0KGRpcmVjdCwgJnJlcSwga2V5LCBwdHIpOwotCW5pbGZzX2JtYXBfYWRkX2Jsb2NrcyhibWFwLCBzdGF0cy5ic19uYmxvY2tzKTsKKwlpZiAoTklMRlNfQk1BUF9VU0VfVkJOKGJtYXApKSB7CisJCXJlcS5icHJfcHRyID0gbmlsZnNfZGlyZWN0X2ZpbmRfdGFyZ2V0X3YoZGlyZWN0LCBrZXkpOworCQlkYXQgPSBuaWxmc19ibWFwX2dldF9kYXQoYm1hcCk7CisJfQorCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9hbGxvY19wdHIoYm1hcCwgJnJlcSwgZGF0KTsKKwlpZiAoIXJldCkgeworCQkvKiBwdHIgbXVzdCBiZSBhIHBvaW50ZXIgdG8gYSBidWZmZXIgaGVhZC4gKi8KKwkJYmggPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICopKCh1bnNpZ25lZCBsb25nKXB0cik7CisJCXNldF9idWZmZXJfbmlsZnNfdm9sYXRpbGUoYmgpOwogCi0JcmV0dXJuIDA7Ci19CisJCW5pbGZzX2JtYXBfY29tbWl0X2FsbG9jX3B0cihibWFwLCAmcmVxLCBkYXQpOworCQluaWxmc19kaXJlY3Rfc2V0X3B0cihkaXJlY3QsIGtleSwgcmVxLmJwcl9wdHIpOwogCi1zdGF0aWMgaW50IG5pbGZzX2RpcmVjdF9wcmVwYXJlX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QsCi0JCQkJICAgICAgIHVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSAqcmVxLAotCQkJCSAgICAgICBfX3U2NCBrZXksCi0JCQkJICAgICAgIHN0cnVjdCBuaWxmc19ibWFwX3N0YXRzICpzdGF0cykKLXsKLQlpbnQgcmV0OworCQlpZiAoIW5pbGZzX2JtYXBfZGlydHkoYm1hcCkpCisJCQluaWxmc19ibWFwX3NldF9kaXJ0eShibWFwKTsKIAotCXJlcS0+YnByX3B0ciA9IG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KTsKLQlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cigmZGlyZWN0LT5kX2JtYXAsIHJlcSk7Ci0JaWYgKCFyZXQpCi0JCXN0YXRzLT5ic19uYmxvY2tzID0gMTsKKwkJaWYgKE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSkKKwkJCW5pbGZzX2RpcmVjdF9zZXRfdGFyZ2V0X3YoZGlyZWN0LCBrZXksIHJlcS5icHJfcHRyKTsKKworCQluaWxmc19ibWFwX2FkZF9ibG9ja3MoYm1hcCwgMSk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX2RpcmVjdF9jb21taXRfZGVsZXRlKHN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCwKLQkJCQkgICAgICAgdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxICpyZXEsCi0JCQkJICAgICAgIF9fdTY0IGtleSkKLXsKLQluaWxmc19ibWFwX2NvbW1pdF9lbmRfcHRyKCZkaXJlY3QtPmRfYm1hcCwgcmVxKTsKLQluaWxmc19kaXJlY3Rfc2V0X3B0cihkaXJlY3QsIGtleSwgTklMRlNfQk1BUF9JTlZBTElEX1BUUik7Ci19Ci0KIHN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqYm1hcCwgX191NjQga2V5KQogewotCXN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdDsKKwlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CiAJdW5pb24gbmlsZnNfYm1hcF9wdHJfcmVxIHJlcTsKLQlzdHJ1Y3QgbmlsZnNfYm1hcF9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgaW5vZGUgKmRhdDsKIAlpbnQgcmV0OwogCi0JZGlyZWN0ID0gKHN0cnVjdCBuaWxmc19kaXJlY3QgKilibWFwOwotCWlmICgoa2V5ID4gTklMRlNfRElSRUNUX0tFWV9NQVgpIHx8CisJaWYgKGtleSA+IE5JTEZTX0RJUkVDVF9LRVlfTUFYIHx8CiAJICAgIG5pbGZzX2RpcmVjdF9nZXRfcHRyKGRpcmVjdCwga2V5KSA9PSBOSUxGU19CTUFQX0lOVkFMSURfUFRSKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCXJldCA9IG5pbGZzX2RpcmVjdF9wcmVwYXJlX2RlbGV0ZShkaXJlY3QsICZyZXEsIGtleSwgJnN0YXRzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQluaWxmc19kaXJlY3RfY29tbWl0X2RlbGV0ZShkaXJlY3QsICZyZXEsIGtleSk7Ci0JbmlsZnNfYm1hcF9zdWJfYmxvY2tzKGJtYXAsIHN0YXRzLmJzX25ibG9ja3MpOworCWRhdCA9IE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSA/IG5pbGZzX2JtYXBfZ2V0X2RhdChibWFwKSA6IE5VTEw7CisJcmVxLmJwcl9wdHIgPSBuaWxmc19kaXJlY3RfZ2V0X3B0cihkaXJlY3QsIGtleSk7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSBuaWxmc19ibWFwX3ByZXBhcmVfZW5kX3B0cihibWFwLCAmcmVxLCBkYXQpOworCWlmICghcmV0KSB7CisJCW5pbGZzX2JtYXBfY29tbWl0X2VuZF9wdHIoYm1hcCwgJnJlcSwgZGF0KTsKKwkJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIE5JTEZTX0JNQVBfSU5WQUxJRF9QVFIpOworCQluaWxmc19ibWFwX3N1Yl9ibG9ja3MoYm1hcCwgMSk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2xhc3Rfa2V5KGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpibWFwLCBfX3U2NCAqa2V5cCkKQEAgLTMxMCwzOSArMjY4LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X3Byb3BhZ2F0ZV92KHN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCwKLQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKLXsKLQl1bmlvbiBuaWxmc19ibWFwX3B0cl9yZXEgb2xkcmVxLCBuZXdyZXE7Ci0JX191NjQga2V5OwotCV9fdTY0IHB0cjsKLQlpbnQgcmV0OwotCi0Ja2V5ID0gbmlsZnNfYm1hcF9kYXRhX2dldF9rZXkoJmRpcmVjdC0+ZF9ibWFwLCBiaCk7Ci0JcHRyID0gbmlsZnNfZGlyZWN0X2dldF9wdHIoZGlyZWN0LCBrZXkpOwotCWlmICghYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKSkgewotCQlvbGRyZXEuYnByX3B0ciA9IHB0cjsKLQkJbmV3cmVxLmJwcl9wdHIgPSBwdHI7Ci0JCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV91cGRhdGVfdigmZGlyZWN0LT5kX2JtYXAsICZvbGRyZXEsCi0JCQkJCQkgICZuZXdyZXEpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JCW5pbGZzX2JtYXBfY29tbWl0X3VwZGF0ZV92KCZkaXJlY3QtPmRfYm1hcCwgJm9sZHJlcSwgJm5ld3JlcSk7Ci0JCXNldF9idWZmZXJfbmlsZnNfdm9sYXRpbGUoYmgpOwotCQluaWxmc19kaXJlY3Rfc2V0X3B0cihkaXJlY3QsIGtleSwgbmV3cmVxLmJwcl9wdHIpOwotCX0gZWxzZQotCQlyZXQgPSBuaWxmc19ibWFwX21hcmtfZGlydHkoJmRpcmVjdC0+ZF9ibWFwLCBwdHIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBuaWxmc19kaXJlY3RfcHJvcGFnYXRlKGNvbnN0IHN0cnVjdCBuaWxmc19ibWFwICpibWFwLAogCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlzdHJ1Y3QgbmlsZnNfZGlyZWN0ICpkaXJlY3QgPSAoc3RydWN0IG5pbGZzX2RpcmVjdCAqKWJtYXA7CisJc3RydWN0IG5pbGZzX3BhbGxvY19yZXEgb2xkcmVxLCBuZXdyZXE7CisJc3RydWN0IGlub2RlICpkYXQ7CisJX191NjQga2V5OworCV9fdTY0IHB0cjsKKwlpbnQgcmV0OwogCi0JcmV0dXJuIE5JTEZTX0JNQVBfVVNFX1ZCTihibWFwKSA/Ci0JCW5pbGZzX2RpcmVjdF9wcm9wYWdhdGVfdihkaXJlY3QsIGJoKSA6IDA7CisJaWYgKCFOSUxGU19CTUFQX1VTRV9WQk4oYm1hcCkpCisJCXJldHVybiAwOworCisJZGF0ID0gbmlsZnNfYm1hcF9nZXRfZGF0KGJtYXApOworCWtleSA9IG5pbGZzX2JtYXBfZGF0YV9nZXRfa2V5KGJtYXAsIGJoKTsKKwlwdHIgPSBuaWxmc19kaXJlY3RfZ2V0X3B0cihkaXJlY3QsIGtleSk7CisJaWYgKCFidWZmZXJfbmlsZnNfdm9sYXRpbGUoYmgpKSB7CisJCW9sZHJlcS5wcl9lbnRyeV9uciA9IHB0cjsKKwkJbmV3cmVxLnByX2VudHJ5X25yID0gcHRyOworCQlyZXQgPSBuaWxmc19kYXRfcHJlcGFyZV91cGRhdGUoZGF0LCAmb2xkcmVxLCAmbmV3cmVxKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQluaWxmc19kYXRfY29tbWl0X3VwZGF0ZShkYXQsICZvbGRyZXEsICZuZXdyZXEsCisJCQkJCWJtYXAtPmJfcHRyX3R5cGUgPT0gTklMRlNfQk1BUF9QVFJfVlMpOworCQlzZXRfYnVmZmVyX25pbGZzX3ZvbGF0aWxlKGJoKTsKKwkJbmlsZnNfZGlyZWN0X3NldF9wdHIoZGlyZWN0LCBrZXksIG5ld3JlcS5wcl9lbnRyeV9ucik7CisJfSBlbHNlCisJCXJldCA9IG5pbGZzX2RhdF9tYXJrX2RpcnR5KGRhdCwgcHRyKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbmlsZnNfZGlyZWN0X2Fzc2lnbl92KHN0cnVjdCBuaWxmc19kaXJlY3QgKmRpcmVjdCwKQEAgLTM1MSwxOCArMzA2LDE4IEBACiAJCQkJIHNlY3Rvcl90IGJsb2NrbnIsCiAJCQkJIHVuaW9uIG5pbGZzX2JpbmZvICpiaW5mbykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2JtYXBfZ2V0X2RhdCgmZGlyZWN0LT5kX2JtYXApOwogCXVuaW9uIG5pbGZzX2JtYXBfcHRyX3JlcSByZXE7CiAJaW50IHJldDsKIAogCXJlcS5icHJfcHRyID0gcHRyOwotCXJldCA9IG5pbGZzX2JtYXBfc3RhcnRfdigmZGlyZWN0LT5kX2JtYXAsICZyZXEsIGJsb2NrbnIpOwotCWlmICh1bmxpa2VseShyZXQgPCAwKSkKLQkJcmV0dXJuIHJldDsKLQotCWJpbmZvLT5iaV92LmJpX3ZibG9ja25yID0gbmlsZnNfYm1hcF9wdHJfdG9fZHB0cihwdHIpOwotCWJpbmZvLT5iaV92LmJpX2Jsa29mZiA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKLQotCXJldHVybiAwOworCXJldCA9IG5pbGZzX2RhdF9wcmVwYXJlX3N0YXJ0KGRhdCwgJnJlcS5icHJfcmVxKTsKKwlpZiAoIXJldCkgeworCQluaWxmc19kYXRfY29tbWl0X3N0YXJ0KGRhdCwgJnJlcS5icHJfcmVxLCBibG9ja25yKTsKKwkJYmluZm8tPmJpX3YuYmlfdmJsb2NrbnIgPSBuaWxmc19ibWFwX3B0cl90b19kcHRyKHB0cik7CisJCWJpbmZvLT5iaV92LmJpX2Jsa29mZiA9IG5pbGZzX2JtYXBfa2V5X3RvX2RrZXkoa2V5KTsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBuaWxmc19kaXJlY3RfYXNzaWduX3Aoc3RydWN0IG5pbGZzX2RpcmVjdCAqZGlyZWN0LApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lmaWxlLmggYi9mcy9uaWxmczIvaWZpbGUuaAppbmRleCA1ZDMwYTM1Li5lY2MzYmE3NiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lmaWxlLmgKKysrIGIvZnMvbmlsZnMyL2lmaWxlLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJtZHQuaCIKICNpbmNsdWRlICJhbGxvYy5oIgogCi0jZGVmaW5lIE5JTEZTX0lGSUxFX0dGUCAgTklMRlNfTURUX0dGUAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19pbm9kZSAqCiBuaWxmc19pZmlsZV9tYXBfaW5vZGUoc3RydWN0IGlub2RlICppZmlsZSwgaW5vX3QgaW5vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmliaCkKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pbm9kZS5jIGIvZnMvbmlsZnMyL2lub2RlLmMKaW5kZXggZmU5ZDhmMi4uODA3ZTU4NCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lub2RlLmMKKysrIGIvZnMvbmlsZnMyL2lub2RlLmMKQEAgLTQzMCw3ICs0MzAsOCBAQAogCiAJcmF3X2lub2RlID0gbmlsZnNfaWZpbGVfbWFwX2lub2RlKHNiaS0+c19pZmlsZSwgaW5vLCBiaCk7CiAKLQlpZiAobmlsZnNfcmVhZF9pbm9kZV9jb21tb24oaW5vZGUsIHJhd19pbm9kZSkpCisJZXJyID0gbmlsZnNfcmVhZF9pbm9kZV9jb21tb24oaW5vZGUsIHJhd19pbm9kZSk7CisJaWYgKGVycikKIAkJZ290byBmYWlsZWRfdW5tYXA7CiAKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lvY3RsLmMgYi9mcy9uaWxmczIvaW9jdGwuYwppbmRleCA2ZWE1Zjg3Li42NTcyZWE0IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW9jdGwuYworKysgYi9mcy9uaWxmczIvaW9jdGwuYwpAQCAtNDQyLDEyICs0NDIsNiBAQAogCWNvbnN0IGNoYXIgKm1zZzsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbmlsZnNfaW9jdGxfbW92ZV9ibG9ja3MobmlsZnMsICZhcmd2WzBdLCBrYnVmc1swXSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJbXNnID0gImNhbm5vdCByZWFkIHNvdXJjZSBibG9ja3MiOwotCQlnb3RvIGZhaWxlZDsKLQl9Ci0KIAlyZXQgPSBuaWxmc19pb2N0bF9kZWxldGVfY2hlY2twb2ludHMobmlsZnMsICZhcmd2WzFdLCBrYnVmc1sxXSk7CiAJaWYgKHJldCA8IDApIHsKIAkJLyoKQEAgLTU0OCw3ICs1NDIsMjUgQEAKIAkJfQogCX0KIAotCXJldCA9IG5pbGZzX2NsZWFuX3NlZ21lbnRzKGlub2RlLT5pX3NiLCBhcmd2LCBrYnVmcyk7CisJLyoKKwkgKiBuaWxmc19pb2N0bF9tb3ZlX2Jsb2NrcygpIHdpbGwgY2FsbCBuaWxmc19nY19pZ2V0KCksCisJICogd2hpY2ggd2lsbCBvcGVyYXRlcyBhbiBpbm9kZSBsaXN0IHdpdGhvdXQgYmxvY2tpbmcuCisJICogVG8gcHJvdGVjdCB0aGUgbGlzdCBmcm9tIGNvbmN1cnJlbnQgb3BlcmF0aW9ucywKKwkgKiBuaWxmc19pb2N0bF9tb3ZlX2Jsb2NrcyBzaG91bGQgYmUgYXRvbWljIG9wZXJhdGlvbi4KKwkgKi8KKwlpZiAodGVzdF9hbmRfc2V0X2JpdChUSEVfTklMRlNfR0NfUlVOTklORywgJm5pbGZzLT5uc19mbGFncykpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldCA9IG5pbGZzX2lvY3RsX21vdmVfYmxvY2tzKG5pbGZzLCAmYXJndlswXSwga2J1ZnNbMF0pOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBHQyBmYWlsZWQgZHVyaW5nIHByZXBhcmF0aW9uOiAiCisJCQkiY2Fubm90IHJlYWQgc291cmNlIGJsb2NrczogZXJyPSVkXG4iLCByZXQpOworCWVsc2UKKwkJcmV0ID0gbmlsZnNfY2xlYW5fc2VnbWVudHMoaW5vZGUtPmlfc2IsIGFyZ3YsIGtidWZzKTsKKworCWNsZWFyX25pbGZzX2djX3J1bm5pbmcobmlsZnMpOwogCiAgb3V0X2ZyZWU6CiAJd2hpbGUgKC0tbiA+PSAwKQpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL21kdC5jIGIvZnMvbmlsZnMyL21kdC5jCmluZGV4IDJkZmQ0NzcuLjE1NmJmNjAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9tZHQuYworKysgYi9mcy9uaWxmczIvbWR0LmMKQEAgLTEwMywxNSArMTAzLDEyIEBACiAJCWdvdG8gZmFpbGVkX3VubG9jazsKIAogCWVyciA9IC1FRVhJU1Q7Ci0JaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkgfHwgYnVmZmVyX21hcHBlZChiaCkpCisJaWYgKGJ1ZmZlcl91cHRvZGF0ZShiaCkpCiAJCWdvdG8gZmFpbGVkX2JoOwotI2lmIDAKLQkvKiBUaGUgdXB0b2RhdGUgZmxhZyBpcyBub3QgcHJvdGVjdGVkIGJ5IHRoZSBwYWdlIGxvY2ssIGJ1dAotCSAgIHRoZSBtYXBwZWQgZmxhZyBpcy4gIFRodXMsIHdlIGRvbid0IGhhdmUgdG8gd2FpdCB0aGUgYnVmZmVyLiAqLworCiAJd2FpdF9vbl9idWZmZXIoYmgpOwogCWlmIChidWZmZXJfdXB0b2RhdGUoYmgpKQogCQlnb3RvIGZhaWxlZF9iaDsKLSNlbmRpZgogCiAJYmgtPmJfYmRldiA9IG5pbGZzLT5uc19iZGV2OwogCWVyciA9IG5pbGZzX21kdF9pbnNlcnRfbmV3X2Jsb2NrKGlub2RlLCBibG9jaywgYmgsIGluaXRfYmxvY2spOwpAQCAtMTM5LDcgKzEzNiw3IEBACiAJCSAgICAgICBpbnQgbW9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqb3V0X2JoKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0JdW5zaWduZWQgbG9uZyBibGtudW0gPSAwOworCV9fdTY0IGJsa251bSA9IDA7CiAJaW50IHJldCA9IC1FTk9NRU07CiAKIAliaCA9IG5pbGZzX2dyYWJfYnVmZmVyKGlub2RlLCBpbm9kZS0+aV9tYXBwaW5nLCBibGtvZmYsIDApOwpAQCAtMTYyLDE3ICsxNTksMTUgQEAKIAkJdW5sb2NrX2J1ZmZlcihiaCk7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoIWJ1ZmZlcl9tYXBwZWQoYmgpKSB7IC8qIHVudXNlZCBidWZmZXIgKi8KLQkJcmV0ID0gbmlsZnNfYm1hcF9sb29rdXAoTklMRlNfSShpbm9kZSktPmlfYm1hcCwgYmxrb2ZmLAotCQkJCQkmYmxrbnVtKTsKLQkJaWYgKHVubGlrZWx5KHJldCkpIHsKLQkJCXVubG9ja19idWZmZXIoYmgpOwotCQkJZ290byBmYWlsZWRfYmg7Ci0JCX0KLQkJYmgtPmJfYmRldiA9IE5JTEZTX01EVChpbm9kZSktPm1pX25pbGZzLT5uc19iZGV2OwotCQliaC0+Yl9ibG9ja25yID0gYmxrbnVtOwotCQlzZXRfYnVmZmVyX21hcHBlZChiaCk7CisKKwlyZXQgPSBuaWxmc19ibWFwX2xvb2t1cChOSUxGU19JKGlub2RlKS0+aV9ibWFwLCBibGtvZmYsICZibGtudW0pOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCXVubG9ja19idWZmZXIoYmgpOworCQlnb3RvIGZhaWxlZF9iaDsKIAl9CisJYmgtPmJfYmRldiA9IE5JTEZTX01EVChpbm9kZSktPm1pX25pbGZzLT5uc19iZGV2OworCWJoLT5iX2Jsb2NrbnIgPSAoc2VjdG9yX3QpYmxrbnVtOworCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKIAogCWJoLT5iX2VuZF9pbyA9IGVuZF9idWZmZXJfcmVhZF9zeW5jOwogCWdldF9iaChiaCk7CkBAIC00MDIsNiArMzk3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY29udGFpbmVyX29mKHBhZ2UtPm1hcHBpbmcsCiAJCQkJCSAgIHN0cnVjdCBpbm9kZSwgaV9kYXRhKTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBOSUxGU19NRFQoaW5vZGUpLT5taV9uaWxmczsKIAlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqd3JpdGVyID0gTlVMTDsKIAlpbnQgZXJyID0gMDsKIApAQCAtNDExLDkgKzQwNywxMCBAQAogCWlmIChwYWdlLT5tYXBwaW5nLT5hc3NvY19tYXBwaW5nKQogCQlyZXR1cm4gMDsgLyogRG8gbm90IHJlcXVlc3QgZmx1c2ggZm9yIHNoYWRvdyBwYWdlIGNhY2hlICovCiAJaWYgKCFzYikgewotCQl3cml0ZXIgPSBuaWxmc19nZXRfd3JpdGVyKE5JTEZTX01EVChpbm9kZSktPm1pX25pbGZzKTsKKwkJZG93bl9yZWFkKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CisJCXdyaXRlciA9IG5pbGZzLT5uc193cml0ZXI7CiAJCWlmICghd3JpdGVyKSB7Ci0JCQluaWxmc19wdXRfd3JpdGVyKE5JTEZTX01EVChpbm9kZSktPm1pX25pbGZzKTsKKwkJCXVwX3JlYWQoJm5pbGZzLT5uc193cml0ZXJfc2VtKTsKIAkJCXJldHVybiAtRVJPRlM7CiAJCX0KIAkJc2IgPSB3cml0ZXItPnNfc3VwZXI7CkBAIC00MjUsNyArNDIyLDcgQEAKIAkJbmlsZnNfZmx1c2hfc2VnbWVudChzYiwgaW5vZGUtPmlfaW5vKTsKIAogCWlmICh3cml0ZXIpCi0JCW5pbGZzX3B1dF93cml0ZXIoTklMRlNfTURUKGlub2RlKS0+bWlfbmlsZnMpOworCQl1cF9yZWFkKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTE2LDkgKzUxMywxMCBAQAogfQogCiBzdHJ1Y3QgaW5vZGUgKm5pbGZzX21kdF9uZXcoc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkgICAgaW5vX3QgaW5vLCBnZnBfdCBnZnBfbWFzaykKKwkJCSAgICBpbm9fdCBpbm8pCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IG5pbGZzX21kdF9uZXdfY29tbW9uKG5pbGZzLCBzYiwgaW5vLCBnZnBfbWFzayk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG5pbGZzX21kdF9uZXdfY29tbW9uKG5pbGZzLCBzYiwgaW5vLAorCQkJCQkJICAgTklMRlNfTURUX0dGUCk7CiAKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuaCBiL2ZzL25pbGZzMi9tZHQuaAppbmRleCBkZjY4M2UwLi40MzE1OTk3IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmgKKysrIGIvZnMvbmlsZnMyL21kdC5oCkBAIC03NCw4ICs3NCw3IEBACiBpbnQgbmlsZnNfbWR0X21hcmtfYmxvY2tfZGlydHkoc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOwogaW50IG5pbGZzX21kdF9mZXRjaF9kaXJ0eShzdHJ1Y3QgaW5vZGUgKik7CiAKLXN0cnVjdCBpbm9kZSAqbmlsZnNfbWR0X25ldyhzdHJ1Y3QgdGhlX25pbGZzICosIHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCwKLQkJCSAgICBnZnBfdCk7CitzdHJ1Y3QgaW5vZGUgKm5pbGZzX21kdF9uZXcoc3RydWN0IHRoZV9uaWxmcyAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpOwogc3RydWN0IGlub2RlICpuaWxmc19tZHRfbmV3X2NvbW1vbihzdHJ1Y3QgdGhlX25pbGZzICosIHN0cnVjdCBzdXBlcl9ibG9jayAqLAogCQkJCSAgIGlub190LCBnZnBfdCk7CiB2b2lkIG5pbGZzX21kdF9kZXN0cm95KHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jIGIvZnMvbmlsZnMyL3JlY292ZXJ5LmMKaW5kZXggZDgwY2M3MS4uNmRjODM1OSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3JlY292ZXJ5LmMKKysrIGIvZnMvbmlsZnMyL3JlY292ZXJ5LmMKQEAgLTU1Miw3ICs1NTIsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiTklMRlMgd2FybmluZzogZXJyb3IgcmVjb3ZlcmluZyBkYXRhIGJsb2NrICIKIAkJICAgICAgICIoZXJyPSVkLCBpbm89JWx1LCBibG9jay1vZmZzZXQ9JWxsdSlcbiIsCi0JCSAgICAgICBlcnIsIHJiLT5pbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpcmItPmJsa29mZik7CisJCSAgICAgICBlcnIsICh1bnNpZ25lZCBsb25nKXJiLT5pbm8sCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJiLT5ibGtvZmYpOwogCQlpZiAoIWVycjIpCiAJCQllcnIyID0gZXJyOwogIG5leHQ6CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnYnVmLmMgYi9mcy9uaWxmczIvc2VnYnVmLmMKaW5kZXggOWUzZmUxNy4uZTZkOWUzNyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ2J1Zi5jCisrKyBiL2ZzL25pbGZzMi9zZWdidWYuYwpAQCAtMzE2LDEwICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgYmlvICpiaW87CiAKLQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PV0FJVCwgbnJfdmVjcyk7CisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCBucl92ZWNzKTsKIAlpZiAoYmlvID09IE5VTEwpIHsKIAkJd2hpbGUgKCFiaW8gJiYgKG5yX3ZlY3MgPj49IDEpKQotCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9OT1dBSVQsIG5yX3ZlY3MpOworCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0lPLCBucl92ZWNzKTsKIAl9CiAJaWYgKGxpa2VseShiaW8pKSB7CiAJCWJpby0+YmlfYmRldiA9IHNiLT5zX2JkZXY7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCA1MWZmM2QwLi42ODNkZjg5IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTI1MDEsNyArMjUwMSw4IEBACiAJCWlmICh0ZXN0X2JpdChOSUxGU19TQ19TVVBFUl9ST09ULCAmc2NpLT5zY19mbGFncykgJiYKIAkJICAgIG5pbGZzX2Rpc2NvbnRpbnVlZChuaWxmcykpIHsKIAkJCWRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pOwotCQkJcmVxLT5zYl9lcnIgPSBuaWxmc19jb21taXRfc3VwZXIoc2JpLCAwKTsKKwkJCXJlcS0+c2JfZXJyID0gbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwKKwkJCQkJbmlsZnNfYWx0c2JfbmVlZF91cGRhdGUobmlsZnMpKTsKIAkJCXVwX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAkJfQogCX0KQEAgLTI2ODksNiArMjY5MCw3IEBACiAJfSBlbHNlIHsKIAkJREVGSU5FX1dBSVQod2FpdCk7CiAJCWludCBzaG91bGRfc2xlZXAgPSAxOworCQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmczsKIAogCQlwcmVwYXJlX3RvX3dhaXQoJnNjaS0+c2Nfd2FpdF9kYWVtb24sICZ3YWl0LAogCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC0yNzA5LDYgKzI3MTEsOSBAQAogCQlmaW5pc2hfd2FpdCgmc2NpLT5zY193YWl0X2RhZW1vbiwgJndhaXQpOwogCQl0aW1lb3V0ID0gKChzY2ktPnNjX3N0YXRlICYgTklMRlNfU0VHQ1RPUl9DT01NSVQpICYmCiAJCQkgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNjaS0+c2NfdGltZXItPmV4cGlyZXMpKTsKKwkJbmlsZnMgPSBzY2ktPnNjX3NiaS0+c19uaWxmczsKKwkJaWYgKHNjaS0+c2Nfc3VwZXItPnNfZGlydCAmJiBuaWxmc19zYl9uZWVkX3VwZGF0ZShuaWxmcykpCisJCQlzZXRfbmlsZnNfZGlzY29udGludWVkKG5pbGZzKTsKIAl9CiAJZ290byBsb29wOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VmaWxlLmggYi9mcy9uaWxmczIvc3VmaWxlLmgKaW5kZXggYTJjNGQ3Ni4uMGU5OWU1YyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3N1ZmlsZS5oCisrKyBiL2ZzL25pbGZzMi9zdWZpbGUuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25pbGZzMl9mcy5oPgogI2luY2x1ZGUgIm1kdC5oIgogCi0jZGVmaW5lIE5JTEZTX1NVRklMRV9HRlAJTklMRlNfTURUX0dGUAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbmlsZnNfc3VmaWxlX2dldF9uc2VnbWVudHMoc3RydWN0IGlub2RlICpzdWZpbGUpCiB7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDE1MTk2NGYuLjU1ZjNkNmIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zdXBlci5jCisrKyBiL2ZzL25pbGZzMi9zdXBlci5jCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydGZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgIm5pbGZzLmgiCiAjaW5jbHVkZSAibWR0LmgiCiAjaW5jbHVkZSAiYWxsb2MuaCIKQEAgLTY1LDcgKzY3LDYgQEAKIAkJICAgIihOSUxGUykiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHZvaWQgbmlsZnNfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBzdGF0aWMgaW50IG5pbGZzX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSk7CiAKIC8qKgpAQCAtMzExLDkgKzMxMiw2IEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCi0JaWYgKHNiLT5zX2RpcnQpCi0JCW5pbGZzX3dyaXRlX3N1cGVyKHNiKTsKLQogCW5pbGZzX2RldGFjaF9zZWdtZW50X2NvbnN0cnVjdG9yKHNiaSk7CiAKIAlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKQEAgLTMzNiw2MyArMzM0LDIxIEBACiAJdW5sb2NrX2tlcm5lbCgpOwogfQogCi0vKioKLSAqIG5pbGZzX3dyaXRlX3N1cGVyIC0gd3JpdGUgc3VwZXIgYmxvY2socykgb2YgTklMRlMKLSAqIEBzYjogc3VwZXJfYmxvY2sKLSAqCi0gKiBuaWxmc193cml0ZV9zdXBlcigpIGdldHMgYSBmcy1kZXBlbmRlbnQgbG9jaywgd3JpdGVzIHN1cGVyIGJsb2NrKHMpLCBhbmQKLSAqIGNsZWFycyBzX2RpcnQuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgc2VjdGlvbiBwcm90ZWN0ZWQgYnkKLSAqIGxvY2tfc3VwZXIoKS4KLSAqCi0gKiBUaGUgc19kaXJ0IGZsYWcgaXMgbWFuYWdlZCBieSBlYWNoIGZpbGVzeXN0ZW0gYW5kIHdlIHByb3RlY3QgaXQgYnkgbnNfc2VtCi0gKiBvZiB0aGUgc3RydWN0IHRoZV9uaWxmcy4gIExvY2sgb3JkZXIgbXVzdCBiZSBhcyBmb2xsb3dzOgotICoKLSAqICAgMS4gbG9ja19zdXBlcigpCi0gKiAgIDIuICAgIGRvd25fd3JpdGUoJm5pbGZzLT5uc19zZW0pCi0gKgotICogSW5zaWRlIE5JTEZTLCBsb2NraW5nIG5zX3NlbSBpcyBlbm91Z2ggdG8gcHJvdGVjdCBzX2RpcnQgYW5kIHRoZSBidWZmZXIKLSAqIG9mIHRoZSBzdXBlciBibG9jayAobmlsZnMtPm5zX3NicFtdKS4KLSAqCi0gKiBJbiBtb3N0IGNhc2VzLCBWRlMgZnVuY3Rpb25zIGNhbGwgbG9ja19zdXBlcigpIGJlZm9yZSBjYWxsaW5nIHRoZXNlCi0gKiBtZXRob2RzLiAgU28gd2UgbXVzdCBiZSBjYXJlZnVsIG5vdCB0byBicmluZyBvbiBkZWFkbG9ja3Mgd2hlbiB1c2luZwotICogbG9ja19zdXBlcigpOyAgc2VlIGdlbmVyaWNfc2h1dGRvd25fc3VwZXIoKSwgd3JpdGVfc3VwZXIoKSwgYW5kIHNvIG9uLgotICoKLSAqIE5vdGUgdGhhdCBvcmRlciBvZiBsb2NrX2tlcm5lbCgpIGFuZCBsb2NrX3N1cGVyKCkgZGVwZW5kcyBvbiBjb250ZXh0cwotICogb2YgVkZTLiAgV2Ugc2hvdWxkIGFsc28gbm90ZSB0aGF0IGxvY2tfa2VybmVsKCkgY2FuIGJlIHVzZWQgaW4gaXRzCi0gKiBwcm90ZWN0aXZlIHNlY3Rpb24gYW5kIG9ubHkgdGhlIG91dGVybW9zdCBvbmUgaGFzIGFuIGVmZmVjdC4KLSAqLwotc3RhdGljIHZvaWQgbmlsZnNfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3N0YXRpYyBpbnQgbmlsZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gTklMRlNfU0Ioc2IpOwogCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2JpLT5zX25pbGZzOwotCi0JZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCXN0cnVjdCBuaWxmc19zdXBlcl9ibG9jayAqKnNicCA9IG5pbGZzLT5uc19zYnA7Ci0JCXU2NCB0ID0gZ2V0X3NlY29uZHMoKTsKLQkJaW50IGR1cHNiOwotCi0JCWlmICghbmlsZnNfZGlzY29udGludWVkKG5pbGZzKSAmJiB0ID49IG5pbGZzLT5uc19zYnd0aW1lWzBdICYmCi0JCSAgICB0IDwgbmlsZnMtPm5zX3Nid3RpbWVbMF0gKyBOSUxGU19TQl9GUkVRKSB7Ci0JCQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZHVwc2IgPSBzYnBbMV0gJiYgdCA+IG5pbGZzLT5uc19zYnd0aW1lWzFdICsgTklMRlNfQUxUU0JfRlJFUTsKLQkJbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgZHVwc2IpOwotCX0KLQlzYi0+c19kaXJ0ID0gMDsKLQl1cF93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgbmlsZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKLXsKIAlpbnQgZXJyID0gMDsKIAotCW5pbGZzX3dyaXRlX3N1cGVyKHNiKTsKLQogCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gc3VwZXIgYmxvY2sgc2hvdWxkIGJlIHdyaXR0ZW4gYmFjayAqLwogCWlmICh3YWl0KQogCQllcnIgPSBuaWxmc19jb25zdHJ1Y3Rfc2VnbWVudChzYik7CisKKwlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKKwlpZiAoc2ItPnNfZGlydCkKKwkJbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgMSk7CisJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDA3LDggKzM2Myw3IEBACiAJbGlzdF9hZGQoJnNiaS0+c19saXN0LCAmbmlsZnMtPm5zX3N1cGVycyk7CiAJdXBfd3JpdGUoJm5pbGZzLT5uc19zdXBlcl9zZW0pOwogCi0Jc2JpLT5zX2lmaWxlID0gbmlsZnNfbWR0X25ldygKLQkJbmlsZnMsIHNiaS0+c19zdXBlciwgTklMRlNfSUZJTEVfSU5PLCBOSUxGU19JRklMRV9HRlApOworCXNiaS0+c19pZmlsZSA9IG5pbGZzX21kdF9uZXcobmlsZnMsIHNiaS0+c19zdXBlciwgTklMRlNfSUZJTEVfSU5PKTsKIAlpZiAoIXNiaS0+c19pZmlsZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTUyOSw2ICs0ODQsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBuaWxmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCB2ZnNtb3VudCAqdmZzKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB2ZnMtPm1udF9zYjsKKwlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gTklMRlNfU0Ioc2IpOworCisJaWYgKCFuaWxmc190ZXN0X29wdChzYmksIEJBUlJJRVIpKQorCQlzZXFfcHJpbnRmKHNlcSwgIixiYXJyaWVyPW9mZiIpOworCWlmIChuaWxmc190ZXN0X29wdChzYmksIFNOQVBTSE9UKSkKKwkJc2VxX3ByaW50ZihzZXEsICIsY3A9JWxsdSIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nIGludClzYmktPnNfc25hcHNob3RfY25vKTsKKwlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBFUlJPUlNfUk8pKQorCQlzZXFfcHJpbnRmKHNlcSwgIixlcnJvcnM9cmVtb3VudC1ybyIpOworCWlmIChuaWxmc190ZXN0X29wdChzYmksIEVSUk9SU19QQU5JQykpCisJCXNlcV9wcmludGYoc2VxLCAiLGVycm9ycz1wYW5pYyIpOworCWlmIChuaWxmc190ZXN0X29wdChzYmksIFNUUklDVF9PUkRFUikpCisJCXNlcV9wcmludGYoc2VxLCAiLG9yZGVyPXN0cmljdCIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBuaWxmc19zb3BzID0gewogCS5hbGxvY19pbm9kZSAgICA9IG5pbGZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlICA9IG5pbGZzX2Rlc3Ryb3lfaW5vZGUsCkBAIC01MzgsNyArNTEzLDcgQEAKIAkvKiAuZHJvcF9pbm9kZQkgID0gbmlsZnNfZHJvcF9pbm9kZSwgKi8KIAkuZGVsZXRlX2lub2RlICAgPSBuaWxmc19kZWxldGVfaW5vZGUsCiAJLnB1dF9zdXBlciAgICAgID0gbmlsZnNfcHV0X3N1cGVyLAotCS53cml0ZV9zdXBlciAgICA9IG5pbGZzX3dyaXRlX3N1cGVyLAorCS8qIC53cml0ZV9zdXBlciAgICA9IG5pbGZzX3dyaXRlX3N1cGVyLCAqLwogCS5zeW5jX2ZzICAgICAgICA9IG5pbGZzX3N5bmNfZnMsCiAJLyogLndyaXRlX3N1cGVyX2xvY2tmcyAqLwogCS8qIC51bmxvY2tmcyAqLwpAQCAtNTQ2LDcgKzUyMSw3IEBACiAJLnJlbW91bnRfZnMgICAgID0gbmlsZnNfcmVtb3VudCwKIAkuY2xlYXJfaW5vZGUgICAgPSBuaWxmc19jbGVhcl9pbm9kZSwKIAkvKiAudW1vdW50X2JlZ2luICovCi0JLyogLnNob3dfb3B0aW9ucyAqLworCS5zaG93X29wdGlvbnMgPSBuaWxmc19zaG93X29wdGlvbnMKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKgpAQCAtODE2LDEwICs3OTEsMTUgQEAKIAogCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkgewogCQlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBTTkFQU0hPVCkpIHsKKwkJCWRvd25fcmVhZCgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAkJCWVyciA9IG5pbGZzX2NwZmlsZV9pc19zbmFwc2hvdChuaWxmcy0+bnNfY3BmaWxlLAogCQkJCQkJICAgICAgIHNiaS0+c19zbmFwc2hvdF9jbm8pOwotCQkJaWYgKGVyciA8IDApCisJCQl1cF9yZWFkKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlpZiAoZXJyID09IC1FTk9FTlQpCisJCQkJCWVyciA9IC1FSU5WQUw7CiAJCQkJZ290byBmYWlsZWRfc2JpOworCQkJfQogCQkJaWYgKCFlcnIpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkgICAgICAgIk5JTEZTOiBUaGUgc3BlY2lmaWVkIGNoZWNrcG9pbnQgaXMgIgpAQCAtMTEyNywxMCArMTEwNyw2IEBACiAJICovCiAJc2Quc2JpID0gbmlsZnNfZmluZF9zYmluZm8obmlsZnMsICEoZmxhZ3MgJiBNU19SRE9OTFkpLCBzZC5jbm8pOwogCi0JaWYgKCFzZC5jbm8pCi0JCS8qIHRyeWluZyB0byBnZXQgdGhlIGxhdGVzdCBjaGVja3BvaW50LiAgKi8KLQkJc2QuY25vID0gbmlsZnNfbGFzdF9jbm8obmlsZnMpOwotCiAJLyoKIAkgKiBHZXQgc3VwZXIgYmxvY2sgaW5zdGFuY2UgaG9sZGluZyB0aGUgbmlsZnNfc2JfaW5mbyBzdHJ1Y3QuCiAJICogQSBuZXcgaW5zdGFuY2UgaXMgYWxsb2NhdGVkIGlmIG5vIGV4aXN0aW5nIG1vdW50IGlzIHByZXNlbnQgb3IKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi90aGVfbmlsZnMuYyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuYwppbmRleCA4Yjg4ODk4Li5kNDE2OGUyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvdGhlX25pbGZzLmMKKysrIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCkBAIC02OCwxMiArNjgsMTEgQEAKIAogCW5pbGZzLT5uc19iZGV2ID0gYmRldjsKIAlhdG9taWNfc2V0KCZuaWxmcy0+bnNfY291bnQsIDEpOwotCWF0b21pY19zZXQoJm5pbGZzLT5uc193cml0ZXJfcmVmY291bnQsIC0xKTsKIAlhdG9taWNfc2V0KCZuaWxmcy0+bnNfbmRpcnR5YmxrcywgMCk7CiAJaW5pdF9yd3NlbSgmbmlsZnMtPm5zX3NlbSk7CiAJaW5pdF9yd3NlbSgmbmlsZnMtPm5zX3N1cGVyX3NlbSk7CiAJbXV0ZXhfaW5pdCgmbmlsZnMtPm5zX21vdW50X211dGV4KTsKLQltdXRleF9pbml0KCZuaWxmcy0+bnNfd3JpdGVyX211dGV4KTsKKwlpbml0X3J3c2VtKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5pbGZzLT5uc19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmbmlsZnMtPm5zX3N1cGVycyk7CiAJc3Bpbl9sb2NrX2luaXQoJm5pbGZzLT5uc19sYXN0X3NlZ21lbnRfbG9jayk7CkBAIC0xODgsMjMgKzE4NywxOSBAQAogCWlub2RlX3NpemUgPSBuaWxmcy0+bnNfaW5vZGVfc2l6ZTsKIAogCWVyciA9IC1FTk9NRU07Ci0JbmlsZnMtPm5zX2RhdCA9IG5pbGZzX21kdF9uZXcoCi0JCW5pbGZzLCBOVUxMLCBOSUxGU19EQVRfSU5PLCBOSUxGU19EQVRfR0ZQKTsKKwluaWxmcy0+bnNfZGF0ID0gbmlsZnNfbWR0X25ldyhuaWxmcywgTlVMTCwgTklMRlNfREFUX0lOTyk7CiAJaWYgKHVubGlrZWx5KCFuaWxmcy0+bnNfZGF0KSkKIAkJZ290byBmYWlsZWQ7CiAKLQluaWxmcy0+bnNfZ2NfZGF0ID0gbmlsZnNfbWR0X25ldygKLQkJbmlsZnMsIE5VTEwsIE5JTEZTX0RBVF9JTk8sIE5JTEZTX0RBVF9HRlApOworCW5pbGZzLT5uc19nY19kYXQgPSBuaWxmc19tZHRfbmV3KG5pbGZzLCBOVUxMLCBOSUxGU19EQVRfSU5PKTsKIAlpZiAodW5saWtlbHkoIW5pbGZzLT5uc19nY19kYXQpKQogCQlnb3RvIGZhaWxlZF9kYXQ7CiAKLQluaWxmcy0+bnNfY3BmaWxlID0gbmlsZnNfbWR0X25ldygKLQkJbmlsZnMsIE5VTEwsIE5JTEZTX0NQRklMRV9JTk8sIE5JTEZTX0NQRklMRV9HRlApOworCW5pbGZzLT5uc19jcGZpbGUgPSBuaWxmc19tZHRfbmV3KG5pbGZzLCBOVUxMLCBOSUxGU19DUEZJTEVfSU5PKTsKIAlpZiAodW5saWtlbHkoIW5pbGZzLT5uc19jcGZpbGUpKQogCQlnb3RvIGZhaWxlZF9nY19kYXQ7CiAKLQluaWxmcy0+bnNfc3VmaWxlID0gbmlsZnNfbWR0X25ldygKLQkJbmlsZnMsIE5VTEwsIE5JTEZTX1NVRklMRV9JTk8sIE5JTEZTX1NVRklMRV9HRlApOworCW5pbGZzLT5uc19zdWZpbGUgPSBuaWxmc19tZHRfbmV3KG5pbGZzLCBOVUxMLCBOSUxGU19TVUZJTEVfSU5PKTsKIAlpZiAodW5saWtlbHkoIW5pbGZzLT5uc19zdWZpbGUpKQogCQlnb3RvIGZhaWxlZF9jcGZpbGU7CiAKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi90aGVfbmlsZnMuaCBiL2ZzL25pbGZzMi90aGVfbmlsZnMuaAppbmRleCAxYjljYWFmLi4yMGFiZDU1IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvdGhlX25pbGZzLmgKKysrIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCkBAIC0zNyw2ICszNyw3IEBACiAJVEhFX05JTEZTX0xPQURFRCwgICAgICAgLyogUm9sbC1iYWNrL3JvbGwtZm9yd2FyZCBoYXMgZG9uZSBhbmQKIAkJCQkgICB0aGUgbGF0ZXN0IGNoZWNrcG9pbnQgd2FzIGxvYWRlZCAqLwogCVRIRV9OSUxGU19ESVNDT05USU5VRUQsCS8qICduZXh0JyBwb2ludGVyIGNoYWluIGhhcyBicm9rZW4gKi8KKwlUSEVfTklMRlNfR0NfUlVOTklORywJLyogZ2MgcHJvY2VzcyBpcyBydW5uaW5nICovCiB9OwogCiAvKioKQEAgLTUwLDggKzUxLDcgQEAKICAqIEBuc19zZW06IHNlbWFwaG9yZSBmb3Igc2hhcmVkIHN0YXRlcwogICogQG5zX3N1cGVyX3NlbTogc2VtYXBob3JlIGZvciBnbG9iYWwgb3BlcmF0aW9ucyBhY3Jvc3Mgc3VwZXIgYmxvY2sgaW5zdGFuY2VzCiAgKiBAbnNfbW91bnRfbXV0ZXg6IG11dGV4IHByb3RlY3RpbmcgbW91bnQgcHJvY2VzcyBvZiBuaWxmcwotICogQG5zX3dyaXRlcl9tdXRleDogbXV0ZXggcHJvdGVjdGluZyBuc193cml0ZXIgYXR0YWNoL2RldGFjaAotICogQG5zX3dyaXRlcl9yZWZjb3VudDogbnVtYmVyIG9mIHJlZmVycmVycyBvbiBuc193cml0ZXIKKyAqIEBuc193cml0ZXJfc2VtOiBzZW1hcGhvcmUgcHJvdGVjdGluZyBuc193cml0ZXIgYXR0YWNoL2RldGFjaAogICogQG5zX2N1cnJlbnQ6IGJhY2sgcG9pbnRlciB0byBjdXJyZW50IG1vdW50CiAgKiBAbnNfc2JoOiBidWZmZXIgaGVhZHMgb2Ygb24tZGlzayBzdXBlciBibG9ja3MKICAqIEBuc19zYnA6IHBvaW50ZXJzIHRvIHN1cGVyIGJsb2NrIGRhdGEKQEAgLTEwMCw4ICsxMDAsNyBAQAogCXN0cnVjdCByd19zZW1hcGhvcmUJbnNfc2VtOwogCXN0cnVjdCByd19zZW1hcGhvcmUJbnNfc3VwZXJfc2VtOwogCXN0cnVjdCBtdXRleAkJbnNfbW91bnRfbXV0ZXg7Ci0Jc3RydWN0IG11dGV4CQluc193cml0ZXJfbXV0ZXg7Ci0JYXRvbWljX3QJCW5zX3dyaXRlcl9yZWZjb3VudDsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlCW5zX3dyaXRlcl9zZW07CiAKIAkvKgogCSAqIGNvbXBvbmVudHMgcHJvdGVjdGVkIGJ5IG5zX3N1cGVyX3NlbQpAQCAtMTk3LDExICsxOTYsMjYgQEAKIFRIRV9OSUxGU19GTlMoSU5JVCwgaW5pdCkKIFRIRV9OSUxGU19GTlMoTE9BREVELCBsb2FkZWQpCiBUSEVfTklMRlNfRk5TKERJU0NPTlRJTlVFRCwgZGlzY29udGludWVkKQorVEhFX05JTEZTX0ZOUyhHQ19SVU5OSU5HLCBnY19ydW5uaW5nKQogCiAvKiBNaW5pbXVtIGludGVydmFsIG9mIHBlcmlvZGljYWwgdXBkYXRlIG9mIHN1cGVyYmxvY2tzIChpbiBzZWNvbmRzKSAqLwogI2RlZmluZSBOSUxGU19TQl9GUkVRCQkxMAogI2RlZmluZSBOSUxGU19BTFRTQl9GUkVRCTYwICAvKiBzcGFyZSBzdXBlcmJsb2NrICovCiAKK3N0YXRpYyBpbmxpbmUgaW50IG5pbGZzX3NiX25lZWRfdXBkYXRlKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQoreworCXU2NCB0ID0gZ2V0X3NlY29uZHMoKTsKKwlyZXR1cm4gdCA8IG5pbGZzLT5uc19zYnd0aW1lWzBdIHx8CisJCSB0ID4gbmlsZnMtPm5zX3Nid3RpbWVbMF0gKyBOSUxGU19TQl9GUkVROworfQorCitzdGF0aWMgaW5saW5lIGludCBuaWxmc19hbHRzYl9uZWVkX3VwZGF0ZShzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKK3sKKwl1NjQgdCA9IGdldF9zZWNvbmRzKCk7CisJc3RydWN0IG5pbGZzX3N1cGVyX2Jsb2NrICoqc2JwID0gbmlsZnMtPm5zX3NicDsKKwlyZXR1cm4gc2JwWzFdICYmIHQgPiBuaWxmcy0+bnNfc2J3dGltZVsxXSArIE5JTEZTX0FMVFNCX0ZSRVE7Cit9CisKIHZvaWQgbmlsZnNfc2V0X2xhc3Rfc2VnbWVudChzdHJ1Y3QgdGhlX25pbGZzICosIHNlY3Rvcl90LCB1NjQsIF9fdTY0KTsKIHN0cnVjdCB0aGVfbmlsZnMgKmZpbmRfb3JfY3JlYXRlX25pbGZzKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiB2b2lkIHB1dF9uaWxmcyhzdHJ1Y3QgdGhlX25pbGZzICopOwpAQCAtMjIxLDM0ICsyMzUsMjEgQEAKIAlhdG9taWNfaW5jKCZuaWxmcy0+bnNfY291bnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuaWxmc19zYl9pbmZvICpuaWxmc19nZXRfd3JpdGVyKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQotewotCWlmIChhdG9taWNfaW5jX2FuZF90ZXN0KCZuaWxmcy0+bnNfd3JpdGVyX3JlZmNvdW50KSkKLQkJbXV0ZXhfbG9jaygmbmlsZnMtPm5zX3dyaXRlcl9tdXRleCk7Ci0JcmV0dXJuIG5pbGZzLT5uc193cml0ZXI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBuaWxmc19wdXRfd3JpdGVyKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKQotewotCWlmIChhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCAmbmlsZnMtPm5zX3dyaXRlcl9yZWZjb3VudCkpCi0JCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX3dyaXRlcl9tdXRleCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZAogbmlsZnNfYXR0YWNoX3dyaXRlcihzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywgc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSkKIHsKLQltdXRleF9sb2NrKCZuaWxmcy0+bnNfd3JpdGVyX211dGV4KTsKKwlkb3duX3dyaXRlKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CiAJbmlsZnMtPm5zX3dyaXRlciA9IHNiaTsKLQltdXRleF91bmxvY2soJm5pbGZzLT5uc193cml0ZXJfbXV0ZXgpOworCXVwX3dyaXRlKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogbmlsZnNfZGV0YWNoX3dyaXRlcihzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcywgc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSkKIHsKLQltdXRleF9sb2NrKCZuaWxmcy0+bnNfd3JpdGVyX211dGV4KTsKKwlkb3duX3dyaXRlKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CiAJaWYgKHNiaSA9PSBuaWxmcy0+bnNfd3JpdGVyKQogCQluaWxmcy0+bnNfd3JpdGVyID0gTlVMTDsKLQltdXRleF91bmxvY2soJm5pbGZzLT5uc193cml0ZXJfbXV0ZXgpOworCXVwX3dyaXRlKCZuaWxmcy0+bnNfd3JpdGVyX3NlbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuaWxmc19wdXRfc2JpbmZvKHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmkpCmRpZmYgLS1naXQgYS9mcy9udGZzL2ZpbGUuYyBiL2ZzL250ZnMvZmlsZS5jCmluZGV4IDMxNDBhNDQuLjQzNTBkNDkgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZmlsZS5jCisrKyBiL2ZzL250ZnMvZmlsZS5jCkBAIC0yMDc2LDE0ICsyMDc2LDYgQEAKIAkqcHBvcyA9IHBvczsKIAlpZiAoY2FjaGVkX3BhZ2UpCiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShjYWNoZWRfcGFnZSk7Ci0JLyogRm9yIG5vdywgd2hlbiB0aGUgdXNlciBhc2tzIGZvciBPX1NZTkMsIHdlIGFjdHVhbGx5IGdpdmUgT19EU1lOQy4gKi8KLQlpZiAobGlrZWx5KCFzdGF0dXMpKSB7Ci0JCWlmICh1bmxpa2VseSgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyh2aSkpKSB7Ci0JCQlpZiAoIW1hcHBpbmctPmFfb3BzLT53cml0ZXBhZ2UgfHwgIWlzX3N5bmNfa2lvY2IoaW9jYikpCi0JCQkJc3RhdHVzID0gZ2VuZXJpY19vc3luY19pbm9kZSh2aSwgbWFwcGluZywKLQkJCQkJCU9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOwotCQl9Ci0gIAl9CiAJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKIAludGZzX2RlYnVnKCJEb25lLiAgUmV0dXJuaW5nICVzICh3cml0dGVuIDB4JWx4LCBzdGF0dXMgJWxpKS4iLAogCQkJd3JpdHRlbiA/ICJ3cml0dGVuIiA6ICJzdGF0dXMiLCAodW5zaWduZWQgbG9uZyl3cml0dGVuLApAQCAtMjE0NSw4ICsyMTM3LDggQEAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0ID0gbnRmc19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgaW92LCBucl9zZWdzLCAmaW9jYi0+a2lfcG9zKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewotCQlpbnQgZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7CisJaWYgKHJldCA+IDApIHsKKwkJaW50IGVyciA9IGdlbmVyaWNfd3JpdGVfc3luYyhmaWxlLCBwb3MsIHJldCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0ID0gZXJyOwogCX0KQEAgLTIxNzMsOCArMjE2NSw4IEBACiAJaWYgKHJldCA9PSAtRUlPQ0JRVUVVRUQpCiAJCXJldCA9IHdhaXRfb25fc3luY19raW9jYigma2lvY2IpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7Ci0JCWludCBlcnIgPSBzeW5jX3BhZ2VfcmFuZ2UoaW5vZGUsIG1hcHBpbmcsICpwcG9zIC0gcmV0LCByZXQpOworCWlmIChyZXQgPiAwKSB7CisJCWludCBlcnIgPSBnZW5lcmljX3dyaXRlX3N5bmMoZmlsZSwgKnBwb3MgLSByZXQsIHJldCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0ID0gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IDIzYmY2ODQuLjFjYWEwZWYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMzg0LDEzICszODQsMTIgQEAKICAqIGl0IGlzIGRpcnR5IGluIHRoZSBpbm9kZSBtZXRhIGRhdGEgcmF0aGVyIHRoYW4gdGhlIGRhdGEgcGFnZSBjYWNoZSBvZiB0aGUKICAqIGlub2RlLCBhbmQgdGh1cyB0aGVyZSBhcmUgbm8gZGF0YSBwYWdlcyB0aGF0IG5lZWQgd3JpdGluZyBvdXQuICBUaGVyZWZvcmUsIGEKICAqIGZ1bGwgbWFya19pbm9kZV9kaXJ0eSgpIGlzIG92ZXJraWxsLiAgQSBtYXJrX2lub2RlX2RpcnR5X3N5bmMoKSwgb24gdGhlCi0gKiBvdGhlciBoYW5kLCBpcyBub3Qgc3VmZmljaWVudCwgYmVjYXVzZSBJX0RJUlRZX0RBVEFTWU5DIG5lZWRzIHRvIGJlIHNldCB0bwotICogZW5zdXJlIC0+d3JpdGVfaW5vZGUgaXMgY2FsbGVkIGZyb20gZ2VuZXJpY19vc3luY19pbm9kZSgpIGFuZCB0aGlzIG5lZWRzIHRvCi0gKiBoYXBwZW4gb3IgdGhlIGZpbGUgZGF0YSB3b3VsZCBub3QgbmVjZXNzYXJpbHkgaGl0IHRoZSBkZXZpY2Ugc3luY2hyb25vdXNseSwKLSAqIGV2ZW4gdGhvdWdoIHRoZSB2ZnMgaW5vZGUgaGFzIHRoZSBPX1NZTkMgZmxhZyBzZXQuICBBbHNvLCBJX0RJUlRZX0RBVEFTWU5DCi0gKiBzaW1wbHkgImZlZWxzIiBiZXR0ZXIgdGhhbiBqdXN0IElfRElSVFlfU1lOQywgc2luY2UgdGhlIGZpbGUgZGF0YSBoYXMgbm90Ci0gKiBhY3R1YWxseSBoaXQgdGhlIGJsb2NrIGRldmljZSB5ZXQsIHdoaWNoIGlzIG5vdCB3aGF0IElfRElSVFlfU1lOQyBvbiBpdHMgb3duCi0gKiB3b3VsZCBzdWdnZXN0LgorICogb3RoZXIgaGFuZCwgaXMgbm90IHN1ZmZpY2llbnQsIGJlY2F1c2UgLT53cml0ZV9pbm9kZSBuZWVkcyB0byBiZSBjYWxsZWQgZXZlbgorICogaW4gY2FzZSBvZiBmZGF0YXN5bmMuIFRoaXMgbmVlZHMgdG8gaGFwcGVuIG9yIHRoZSBmaWxlIGRhdGEgd291bGQgbm90CisgKiBuZWNlc3NhcmlseSBoaXQgdGhlIGRldmljZSBzeW5jaHJvbm91c2x5LCBldmVuIHRob3VnaCB0aGUgdmZzIGlub2RlIGhhcyB0aGUKKyAqIE9fU1lOQyBmbGFnIHNldC4gIEFsc28sIElfRElSVFlfREFUQVNZTkMgc2ltcGx5ICJmZWVscyIgYmV0dGVyIHRoYW4ganVzdAorICogSV9ESVJUWV9TWU5DLCBzaW5jZSB0aGUgZmlsZSBkYXRhIGhhcyBub3QgYWN0dWFsbHkgaGl0IHRoZSBibG9jayBkZXZpY2UgeWV0LAorICogd2hpY2ggaXMgbm90IHdoYXQgSV9ESVJUWV9TWU5DIG9uIGl0cyBvd24gd291bGQgc3VnZ2VzdC4KICAqLwogdm9pZCBfX21hcmtfbWZ0X3JlY29yZF9kaXJ0eShudGZzX2lub2RlICpuaSkKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCBhYTUwMWQzLi4yMjFjNWU5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0xODcxLDggKzE4NzEsNyBAQAogCQkJZ290byBvdXRfZGlvOwogCQl9CiAJfSBlbHNlIHsKLQkJd3JpdHRlbiA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKGlvY2IsIGlvdiwgbnJfc2VncywKLQkJCQkJCQkqcHBvcyk7CisJCXdyaXR0ZW4gPSBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwcG9zKTsKIAl9CiAKIG91dF9kaW86CkBAIC0xODgwLDE4ICsxODc5LDIxIEBACiAJQlVHX09OKHJldCA9PSAtRUlPQ0JRVUVVRUQgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKTsKIAogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQyAmJiAhZGlyZWN0X2lvKSB8fCBJU19TWU5DKGlub2RlKSkgewotCQkvKgotCQkgKiBUaGUgZ2VuZXJpYyB3cml0ZSBwYXRocyBoYXZlIGhhbmRsZWQgZ2V0dGluZyBkYXRhCi0JCSAqIHRvIGRpc2ssIGJ1dCBzaW5jZSB3ZSBkb24ndCBtYWtlIHVzZSBvZiB0aGUgZGlydHkKLQkJICogaW5vZGUgbGlzdCwgYSBtYW51YWwgam91cm5hbCBjb21taXQgaXMgbmVjZXNzYXJ5Ci0JCSAqIGhlcmUuCi0JCSAqLwotCQlpZiAob2xkX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpIHx8Ci0JCSAgICBvbGRfY2x1c3RlcnMgIT0gT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKSB7CisJCXJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShmaWxlLT5mX21hcHBpbmcsIHBvcywKKwkJCQkJICAgICAgIHBvcyArIGNvdW50IC0gMSk7CisJCWlmIChyZXQgPCAwKQorCQkJd3JpdHRlbiA9IHJldDsKKworCQlpZiAoIXJldCAmJiAob2xkX3NpemUgIT0gaV9zaXplX3JlYWQoaW5vZGUpIHx8CisJCSAgICBvbGRfY2x1c3RlcnMgIT0gT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKSkgewogCQkJcmV0ID0gamJkMl9qb3VybmFsX2ZvcmNlX2NvbW1pdChvc2ItPmpvdXJuYWwtPmpfam91cm5hbCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQl3cml0dGVuID0gcmV0OwogCQl9CisKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd2FpdF9yYW5nZShmaWxlLT5mX21hcHBpbmcsIHBvcywKKwkJCQkJCSAgICAgIHBvcyArIGNvdW50IC0gMSk7CiAJfQogCiAJLyogCkBAIC0xOTkxLDMxICsxOTkzLDE2IEBACiAKIAlpZiAocmV0ID4gMCkgewogCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOworCQlpbnQgZXJyOwogCi0JCSpwcG9zICs9IHJldDsKIAkJbnJfcGFnZXMgPSAocmV0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAotCQkvKgotCQkgKiBJZiBmaWxlIG9yIGlub2RlIGlzIFNZTkMgYW5kIHdlIGFjdHVhbGx5IHdyb3RlIHNvbWUgZGF0YSwKLQkJICogc3luYyBpdC4KLQkJICovCi0JCWlmICh1bmxpa2VseSgob3V0LT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKLQkJCWludCBlcnI7CisJCWVyciA9IGdlbmVyaWNfd3JpdGVfc3luYyhvdXQsICpwcG9zLCByZXQpOworCQlpZiAoZXJyKQorCQkJcmV0ID0gZXJyOworCQllbHNlCisJCQkqcHBvcyArPSByZXQ7CiAKLQkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCWVyciA9IG9jZnMyX3J3X2xvY2soaW5vZGUsIDEpOwotCQkJaWYgKGVyciA8IDApIHsKLQkJCQltbG9nX2Vycm5vKGVycik7Ci0JCQl9IGVsc2UgewotCQkJCWVyciA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsCi0JCQkJCQkgIE9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOwotCQkJCW9jZnMyX3J3X3VubG9jayhpbm9kZSwgMSk7Ci0JCQl9Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCQkJaWYgKGVycikKLQkJCQlyZXQgPSBlcnI7Ci0JCX0KIAkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihtYXBwaW5nLCBucl9wYWdlcyk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKaW5kZXggZWE0ZTZjYi4uNjE5YmE5OSAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9jaGVjay5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwpAQCAtMjQ4LDExICsyNDgsMTkgQEAKIAkJcGFydF9zdGF0X3JlYWQocCwgbWVyZ2VzW1dSSVRFXSksCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGFydF9zdGF0X3JlYWQocCwgc2VjdG9yc1tXUklURV0pLAogCQlqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKHAsIHRpY2tzW1dSSVRFXSkpLAotCQlwLT5pbl9mbGlnaHQsCisJCXBhcnRfaW5fZmxpZ2h0KHApLAogCQlqaWZmaWVzX3RvX21zZWNzKHBhcnRfc3RhdF9yZWFkKHAsIGlvX3RpY2tzKSksCiAJCWppZmZpZXNfdG9fbXNlY3MocGFydF9zdGF0X3JlYWQocCwgdGltZV9pbl9xdWV1ZSkpKTsKIH0KIAorc3NpemVfdCBwYXJ0X2luZmxpZ2h0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGRfc3RydWN0ICpwID0gZGV2X3RvX3BhcnQoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiU4dSAlOHVcbiIsIHAtPmluX2ZsaWdodFswXSwgcC0+aW5fZmxpZ2h0WzFdKTsKK30KKwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogc3NpemVfdCBwYXJ0X2ZhaWxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMjgxLDYgKzI4OSw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgU19JUlVHTywgcGFydF9zaXplX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIFNfSVJVR08sIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGF0LCBTX0lSVUdPLCBwYXJ0X3N0YXRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIFNfSVJVR08sIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7CiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmFpbCA9CiAJX19BVFRSKG1ha2UtaXQtZmFpbCwgU19JUlVHT3xTX0lXVVNSLCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTsKQEAgLTI5Miw2ICszMDEsNyBAQAogCSZkZXZfYXR0cl9zaXplLmF0dHIsCiAJJmRldl9hdHRyX2FsaWdubWVudF9vZmZzZXQuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdC5hdHRyLAorCSZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLAogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogCSZkZXZfYXR0cl9mYWlsLmF0dHIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggNzM3NjZkMi4uNzM5NGU5ZSAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKKysrIGIvZnMvc3BsaWNlLmMKQEAgLTUwMiw4ICs1MDIsMTAgQEAKIAkJbGVuID0gbGVmdDsKIAogCXJldCA9IF9fZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzKTsKLQlpZiAocmV0ID4gMCkKKwlpZiAocmV0ID4gMCkgewogCQkqcHBvcyArPSByZXQ7CisJCWZpbGVfYWNjZXNzZWQoaW4pOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC05NjMsOCArOTY1LDEwIEBACiAKIAkJbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlLT5pX211dGV4LCBJX01VVEVYX0NISUxEKTsKIAkJcmV0ID0gZmlsZV9yZW1vdmVfc3VpZChvdXQpOwotCQlpZiAoIXJldCkKKwkJaWYgKCFyZXQpIHsKKwkJCWZpbGVfdXBkYXRlX3RpbWUob3V0KTsKIAkJCXJldCA9IHNwbGljZV9mcm9tX3BpcGVfZmVlZChwaXBlLCAmc2QsIHBpcGVfdG9fZmlsZSk7CisJCX0KIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJfSB3aGlsZSAocmV0ID4gMCk7CiAJc3BsaWNlX2Zyb21fcGlwZV9lbmQocGlwZSwgJnNkKTsKQEAgLTk3NiwyNSArOTgwLDE1IEBACiAKIAlpZiAocmV0ID4gMCkgewogCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOworCQlpbnQgZXJyOwogCi0JCSpwcG9zICs9IHJldDsKIAkJbnJfcGFnZXMgPSAocmV0ICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAotCQkvKgotCQkgKiBJZiBmaWxlIG9yIGlub2RlIGlzIFNZTkMgYW5kIHdlIGFjdHVhbGx5IHdyb3RlIHNvbWUgZGF0YSwKLQkJICogc3luYyBpdC4KLQkJICovCi0JCWlmICh1bmxpa2VseSgob3V0LT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKLQkJCWludCBlcnI7Ci0KLQkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCWVyciA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsCi0JCQkJCQkgIE9TWU5DX01FVEFEQVRBfE9TWU5DX0RBVEEpOwotCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0KLQkJCWlmIChlcnIpCi0JCQkJcmV0ID0gZXJyOwotCQl9CisJCWVyciA9IGdlbmVyaWNfd3JpdGVfc3luYyhvdXQsICpwcG9zLCByZXQpOworCQlpZiAoZXJyKQorCQkJcmV0ID0gZXJyOworCQllbHNlCisJCQkqcHBvcyArPSByZXQ7CiAJCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWRfbnIobWFwcGluZywgbnJfcGFnZXMpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IDEwM2NjN2YuLjE5MjM0MDkgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTE3OCwxOSArMTc4LDIzIEBACiB9CiAKIC8qKgotICogdmZzX2ZzeW5jIC0gcGVyZm9ybSBhIGZzeW5jIG9yIGZkYXRhc3luYyBvbiBhIGZpbGUKKyAqIHZmc19mc3luY19yYW5nZSAtIGhlbHBlciB0byBzeW5jIGEgcmFuZ2Ugb2YgZGF0YSAmIG1ldGFkYXRhIHRvIGRpc2sKICAqIEBmaWxlOgkJZmlsZSB0byBzeW5jCiAgKiBAZGVudHJ5OgkJZGVudHJ5IG9mIEBmaWxlCi0gKiBAZGF0YToJCW9ubHkgcGVyZm9ybSBhIGZkYXRhc3luYyBvcGVyYXRpb24KKyAqIEBzdGFydDoJCW9mZnNldCBpbiBieXRlcyBvZiB0aGUgYmVnaW5uaW5nIG9mIGRhdGEgcmFuZ2UgdG8gc3luYworICogQGVuZDoJCW9mZnNldCBpbiBieXRlcyBvZiB0aGUgZW5kIG9mIGRhdGEgcmFuZ2UgKGluY2x1c2l2ZSkKKyAqIEBkYXRhc3luYzoJCXBlcmZvcm0gb25seSBkYXRhc3luYwogICoKLSAqIFdyaXRlIGJhY2sgZGF0YSBhbmQgbWV0YWRhdGEgZm9yIEBmaWxlIHRvIGRpc2suICBJZiBAZGF0YXN5bmMgaXMKLSAqIHNldCBvbmx5IG1ldGFkYXRhIG5lZWRlZCB0byBhY2Nlc3MgbW9kaWZpZWQgZmlsZSBkYXRhIGlzIHdyaXR0ZW4uCisgKiBXcml0ZSBiYWNrIGRhdGEgaW4gcmFuZ2UgQHN0YXJ0Li5AZW5kIGFuZCBtZXRhZGF0YSBmb3IgQGZpbGUgdG8gZGlzay4gIElmCisgKiBAZGF0YXN5bmMgaXMgc2V0IG9ubHkgbWV0YWRhdGEgbmVlZGVkIHRvIGFjY2VzcyBtb2RpZmllZCBmaWxlIGRhdGEgaXMKKyAqIHdyaXR0ZW4uCiAgKgogICogSW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG5mc2QgQGZpbGUgbWF5IGJlICVOVUxMIGFuZAogICogb25seSBAZGVudHJ5IGlzIHNldC4gIFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdoZW4gdGhlIGZpbGVzeXN0ZW0KICAqIGltcGxlbWVudHMgdGhlIGV4cG9ydF9vcGVyYXRpb25zIEFQSS4KICAqLwotaW50IHZmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCitpbnQgdmZzX2ZzeW5jX3JhbmdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGxvZmZfdCBzdGFydCwKKwkJICAgIGxvZmZfdCBlbmQsIGludCBkYXRhc3luYykKIHsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3A7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CkBAIC0yMTQsNyArMjE4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOworCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7CiAKIAkvKgogCSAqIFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgd3JpdGVycywgd2hpY2ggY291bGQgY2F1c2UKQEAgLTIyNSwxMiArMjI5LDI5IEBACiAJaWYgKCFyZXQpCiAJCXJldCA9IGVycjsKIAltdXRleF91bmxvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOwotCWVyciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOwotCWlmICghcmV0KQotCQlyZXQgPSBlcnI7CisKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTCh2ZnNfZnN5bmNfcmFuZ2UpOworCisvKioKKyAqIHZmc19mc3luYyAtIHBlcmZvcm0gYSBmc3luYyBvciBmZGF0YXN5bmMgb24gYSBmaWxlCisgKiBAZmlsZToJCWZpbGUgdG8gc3luYworICogQGRlbnRyeToJCWRlbnRyeSBvZiBAZmlsZQorICogQGRhdGFzeW5jOgkJb25seSBwZXJmb3JtIGEgZmRhdGFzeW5jIG9wZXJhdGlvbgorICoKKyAqIFdyaXRlIGJhY2sgZGF0YSBhbmQgbWV0YWRhdGEgZm9yIEBmaWxlIHRvIGRpc2suICBJZiBAZGF0YXN5bmMgaXMKKyAqIHNldCBvbmx5IG1ldGFkYXRhIG5lZWRlZCB0byBhY2Nlc3MgbW9kaWZpZWQgZmlsZSBkYXRhIGlzIHdyaXR0ZW4uCisgKgorICogSW4gY2FzZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG5mc2QgQGZpbGUgbWF5IGJlICVOVUxMIGFuZAorICogb25seSBAZGVudHJ5IGlzIHNldC4gIFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdoZW4gdGhlIGZpbGVzeXN0ZW0KKyAqIGltcGxlbWVudHMgdGhlIGV4cG9ydF9vcGVyYXRpb25zIEFQSS4KKyAqLworaW50IHZmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCit7CisJcmV0dXJuIHZmc19mc3luY19yYW5nZShmaWxlLCBkZW50cnksIDAsIExMT05HX01BWCwgZGF0YXN5bmMpOworfQogRVhQT1JUX1NZTUJPTCh2ZnNfZnN5bmMpOwogCiBzdGF0aWMgaW50IGRvX2ZzeW5jKHVuc2lnbmVkIGludCBmZCwgaW50IGRhdGFzeW5jKQpAQCAtMjU2LDYgKzI3NywyMyBAQAogCXJldHVybiBkb19mc3luYyhmZCwgMSk7CiB9CiAKKy8qKgorICogZ2VuZXJpY193cml0ZV9zeW5jIC0gcGVyZm9ybSBzeW5jaW5nIGFmdGVyIGEgd3JpdGUgaWYgZmlsZSAvIGlub2RlIGlzIHN5bmMKKyAqIEBmaWxlOglmaWxlIHRvIHdoaWNoIHRoZSB3cml0ZSBoYXBwZW5lZAorICogQHBvczoJb2Zmc2V0IHdoZXJlIHRoZSB3cml0ZSBzdGFydGVkCisgKiBAY291bnQ6CWxlbmd0aCBvZiB0aGUgd3JpdGUKKyAqCisgKiBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgd3JhcHBlciBhYm91dCBvdXIgZ2VuZXJhbCBzeW5jaW5nIGZ1bmN0aW9uLgorICovCitpbnQgZ2VuZXJpY193cml0ZV9zeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpCit7CisJaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgJiYgIUlTX1NZTkMoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHZmc19mc3luY19yYW5nZShmaWxlLCBmaWxlLT5mX3BhdGguZGVudHJ5LCBwb3MsCisJCQkgICAgICAgcG9zICsgY291bnQgLSAxLCAxKTsKK30KK0VYUE9SVF9TWU1CT0woZ2VuZXJpY193cml0ZV9zeW5jKTsKKwogLyoKICAqIHN5c19zeW5jX2ZpbGVfcmFuZ2UoKSBwZXJtaXRzIGZpbmVseSBjb250cm9sbGVkIHN5bmNpbmcgb3ZlciBhIHNlZ21lbnQgb2YKICAqIGEgZmlsZSBpbiB0aGUgcmFuZ2Ugb2Zmc2V0IC4uIChvZmZzZXQrbmJ5dGVzLTEpIGluY2x1c2l2ZS4gIElmIG5ieXRlcyBpcwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2RpcmVjdG9yeS5jIGIvZnMvdWRmL2RpcmVjdG9yeS5jCmluZGV4IDFkMmM1NzAuLjJmZmRiNjcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXJlY3RvcnkuYworKysgYi9mcy91ZGYvZGlyZWN0b3J5LmMKQEAgLTE4LDU5ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KIAotI2lmIDAKLXN0YXRpYyB1aW50OF90ICp1ZGZfZmlsZWFkX3JlYWQoc3RydWN0IGlub2RlICpkaXIsIHVpbnQ4X3QgKnRtcGFkLAotCQkJCXVpbnQ4X3QgYWRfc2l6ZSwgc3RydWN0IGtlcm5lbF9sYl9hZGRyIGZlX2xvYywKLQkJCQlpbnQgKnBvcywgaW50ICpvZmZzZXQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAotCQkJCWludCAqZXJyb3IpCi17Ci0JaW50IGxvZmZzZXQgPSAqb2Zmc2V0OwotCWludCBibG9jazsKLQl1aW50OF90ICphZDsKLQlpbnQgcmVtYWluZGVyOwotCi0JKmVycm9yID0gMDsKLQotCWFkID0gKHVpbnQ4X3QgKikoKmJoKS0+Yl9kYXRhICsgKm9mZnNldDsKLQkqb2Zmc2V0ICs9IGFkX3NpemU7Ci0KLQlpZiAoIWFkKSB7Ci0JCWJyZWxzZSgqYmgpOwotCQkqZXJyb3IgPSAxOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoKm9mZnNldCA9PSBkaXItPmlfc2ItPnNfYmxvY2tzaXplKSB7Ci0JCWJyZWxzZSgqYmgpOwotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZmVfbG9jLCArKypwb3MpOwotCQlpZiAoIWJsb2NrKQotCQkJcmV0dXJuIE5VTEw7Ci0JCSpiaCA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKTsKLQkJaWYgKCEqYmgpCi0JCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgaWYgKCpvZmZzZXQgPiBkaXItPmlfc2ItPnNfYmxvY2tzaXplKSB7Ci0JCWFkID0gdG1wYWQ7Ci0KLQkJcmVtYWluZGVyID0gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIGxvZmZzZXQ7Ci0JCW1lbWNweSgodWludDhfdCAqKWFkLCAoKmJoKS0+Yl9kYXRhICsgbG9mZnNldCwgcmVtYWluZGVyKTsKLQotCQlicmVsc2UoKmJoKTsKLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGZlX2xvYywgKysqcG9zKTsKLQkJaWYgKCFibG9jaykKLQkJCXJldHVybiBOVUxMOwotCQkoKmJoKSA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKTsKLQkJaWYgKCEqYmgpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQltZW1jcHkoKHVpbnQ4X3QgKilhZCArIHJlbWFpbmRlciwgKCpiaCktPmJfZGF0YSwKLQkJCWFkX3NpemUgLSByZW1haW5kZXIpOwotCQkqb2Zmc2V0ID0gYWRfc2l6ZSAtIHJlbWFpbmRlcjsKLQl9Ci0KLQlyZXR1cm4gYWQ7Ci19Ci0jZW5kaWYKLQogc3RydWN0IGZpbGVJZGVudERlc2MgKnVkZl9maWxlaWRlbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90ICpuZl9wb3MsCiAJCQkJCSBzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAqZmliaCwKIAkJCQkJIHN0cnVjdCBmaWxlSWRlbnREZXNjICpjZmksCkBAIC0yNDgsMzkgKzE5NSw2IEBACiAJcmV0dXJuIGZpOwogfQogCi0jaWYgMAotc3RhdGljIHN0cnVjdCBleHRlbnRfYWQgKnVkZl9nZXRfZmlsZWV4dGVudCh2b2lkICpidWZmZXIsIGludCBidWZzaXplLCBpbnQgKm9mZnNldCkKLXsKLQlzdHJ1Y3QgZXh0ZW50X2FkICpleHQ7Ci0Jc3RydWN0IGZpbGVFbnRyeSAqZmU7Ci0JdWludDhfdCAqcHRyOwotCi0JaWYgKCghYnVmZmVyKSB8fCAoIW9mZnNldCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IHVkZl9nZXRfZmlsZWV4dGVudCgpIGludmFsaWRwYXJtc1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWZlID0gKHN0cnVjdCBmaWxlRW50cnkgKilidWZmZXI7Ci0KLQlpZiAoZmUtPmRlc2NUYWcudGFnSWRlbnQgIT0gY3B1X3RvX2xlMTYoVEFHX0lERU5UX0ZFKSkgewotCQl1ZGZfZGVidWcoIjB4JXggIT0gVEFHX0lERU5UX0ZFXG4iLAotCQkJICBsZTE2X3RvX2NwdShmZS0+ZGVzY1RhZy50YWdJZGVudCkpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwdHIgPSAodWludDhfdCAqKShmZS0+ZXh0ZW5kZWRBdHRyKSArCi0JCWxlMzJfdG9fY3B1KGZlLT5sZW5ndGhFeHRlbmRlZEF0dHIpOwotCi0JaWYgKCgqb2Zmc2V0ID4gMCkgJiYgKCpvZmZzZXQgPCBsZTMyX3RvX2NwdShmZS0+bGVuZ3RoQWxsb2NEZXNjcykpKQotCQlwdHIgKz0gKm9mZnNldDsKLQotCWV4dCA9IChzdHJ1Y3QgZXh0ZW50X2FkICopcHRyOwotCi0JKm9mZnNldCA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGV4dGVudF9hZCk7Ci0JcmV0dXJuIGV4dDsKLX0KLSNlbmRpZgotCiBzdHJ1Y3Qgc2hvcnRfYWQgKnVkZl9nZXRfZmlsZXNob3J0YWQodWludDhfdCAqcHRyLCBpbnQgbWF4b2Zmc2V0LCB1aW50MzJfdCAqb2Zmc2V0LAogCQkJICAgICAgaW50IGluYykKIHsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jCmluZGV4IDc0NjQzMDUuLmI4MGNiZDcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTkzLDkgKzE5MywxMSBAQAogc3RhdGljIGludCB1ZGZfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCWxvY2tfa2VybmVsKCk7CiAJCXVkZl9kaXNjYXJkX3ByZWFsbG9jKGlub2RlKTsKIAkJdW5sb2NrX2tlcm5lbCgpOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy91ZGYvaW5vZGUuYyBiL2ZzL3VkZi9pbm9kZS5jCmluZGV4IGU3NTMzZjcuLjZkMjRjMmMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pbm9kZS5jCisrKyBiL2ZzL3VkZi9pbm9kZS5jCkBAIC05MCwxOSArOTAsMTYgQEAKIH0KIAogLyoKLSAqIElmIHdlIGFyZSBnb2luZyB0byByZWxlYXNlIGlub2RlIGZyb20gbWVtb3J5LCB3ZSBkaXNjYXJkIHByZWFsbG9jYXRpb24gYW5kCi0gKiB0cnVuY2F0ZSBsYXN0IGlub2RlIGV4dGVudCB0byBwcm9wZXIgbGVuZ3RoLiBXZSBjb3VsZCB1c2UgZHJvcF9pbm9kZSgpIGJ1dAotICogaXQncyBjYWxsZWQgdW5kZXIgaW5vZGVfbG9jayBhbmQgdGh1cyB3ZSBjYW5ub3QgbWFyayBpbm9kZSBkaXJ0eSB0aGVyZS4gIFdlCi0gKiB1c2UgY2xlYXJfaW5vZGUoKSBidXQgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8gd3JpdGUgaW5vZGUgYXMgaXQncyBub3Qgd3JpdHRlbgotICogYXV0b21hdGljYWxseS4KKyAqIElmIHdlIGFyZSBnb2luZyB0byByZWxlYXNlIGlub2RlIGZyb20gbWVtb3J5LCB3ZSB0cnVuY2F0ZSBsYXN0IGlub2RlIGV4dGVudAorICogdG8gcHJvcGVyIGxlbmd0aC4gV2UgY291bGQgdXNlIGRyb3BfaW5vZGUoKSBidXQgaXQncyBjYWxsZWQgdW5kZXIgaW5vZGVfbG9jaworICogYW5kIHRodXMgd2UgY2Fubm90IG1hcmsgaW5vZGUgZGlydHkgdGhlcmUuICBXZSB1c2UgY2xlYXJfaW5vZGUoKSBidXQgd2UgaGF2ZQorICogdG8gbWFrZSBzdXJlIHRvIHdyaXRlIGlub2RlIGFzIGl0J3Mgbm90IHdyaXR0ZW4gYXV0b21hdGljYWxseS4KICAqLwogdm9pZCB1ZGZfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCWlmICghKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlsb2NrX2tlcm5lbCgpOwotCQkvKiBEaXNjYXJkIHByZWFsbG9jYXRpb24gZm9yIGRpcmVjdG9yaWVzLCBzeW1saW5rcywgZXRjLiAqLwotCQl1ZGZfZGlzY2FyZF9wcmVhbGxvYyhpbm9kZSk7CiAJCXVkZl90cnVuY2F0ZV90YWlsX2V4dGVudChpbm9kZSk7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJd3JpdGVfaW5vZGVfbm93KGlub2RlLCAwKTsKQEAgLTY2NCw4ICs2NjEsMTIgQEAKIAl1ZGZfc3BsaXRfZXh0ZW50cyhpbm9kZSwgJmMsIG9mZnNldCwgbmV3YmxvY2tudW0sIGxhYXJyLCAmZW5kbnVtKTsKIAogI2lmZGVmIFVERl9QUkVBTExPQ0FURQotCS8qIHByZWFsbG9jYXRlIGJsb2NrcyAqLwotCXVkZl9wcmVhbGxvY19leHRlbnRzKGlub2RlLCBjLCBsYXN0YmxvY2ssIGxhYXJyLCAmZW5kbnVtKTsKKwkvKiBXZSBwcmVhbGxvY2F0ZSBibG9ja3Mgb25seSBmb3IgcmVndWxhciBmaWxlcy4gSXQgYWxzbyBtYWtlcyBzZW5zZQorCSAqIGZvciBkaXJlY3RvcmllcyBidXQgdGhlcmUncyBhIHByb2JsZW0gd2hlbiB0byBkcm9wIHRoZQorCSAqIHByZWFsbG9jYXRpb24uIFdlIG1pZ2h0IHVzZSBzb21lIGRlbGF5ZWQgd29yayBmb3IgdGhhdCBidXQgSSBmZWVsCisJICogaXQncyBvdmVyZW5naW5lZXJpbmcgZm9yIGEgZmlsZXN5c3RlbSBsaWtlIFVERi4gKi8KKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJdWRmX3ByZWFsbG9jX2V4dGVudHMoaW5vZGUsIGMsIGxhc3RibG9jaywgbGFhcnIsICZlbmRudW0pOwogI2VuZGlmCiAKIAkvKiBtZXJnZSBhbnkgY29udGludW91cyBibG9ja3MgaW4gbGFhcnIgKi8KZGlmZiAtLWdpdCBhL2ZzL3VkZi9sb3dsZXZlbC5jIGIvZnMvdWRmL2xvd2xldmVsLmMKaW5kZXggMWI4OGZkNS4uNDNlMjRhMyAxMDA2NDQKLS0tIGEvZnMvdWRmL2xvd2xldmVsLmMKKysrIGIvZnMvdWRmL2xvd2xldmVsLmMKQEAgLTM2LDE0ICszNiwxMCBAQAogCW1zX2luZm8uYWRkcl9mb3JtYXQgPSBDRFJPTV9MQkE7CiAJaSA9IGlvY3RsX2J5X2JkZXYoYmRldiwgQ0RST01NVUxUSVNFU1NJT04sICh1bnNpZ25lZCBsb25nKSZtc19pbmZvKTsKIAotI2RlZmluZSBXRV9PQkVZX1RIRV9XUklUVEVOX1NUQU5EQVJEUyAxCi0KIAlpZiAoaSA9PSAwKSB7CiAJCXVkZl9kZWJ1ZygiWEEgZGlzazogJXMsIHZvbF9kZXNjX3N0YXJ0PSVkXG4iLAogCQkJICAobXNfaW5mby54YV9mbGFnID8gInllcyIgOiAibm8iKSwgbXNfaW5mby5hZGRyLmxiYSk7Ci0jaWYgV0VfT0JFWV9USEVfV1JJVFRFTl9TVEFOREFSRFMKIAkJaWYgKG1zX2luZm8ueGFfZmxhZykgLyogbmVjZXNzYXJ5IGZvciBhIHZhbGlkIG1zX2luZm8uYWRkciAqLwotI2VuZGlmCiAJCQl2b2xfZGVzY19zdGFydCA9IG1zX2luZm8uYWRkci5sYmE7CiAJfSBlbHNlIHsKIAkJdWRmX2RlYnVnKCJDRFJPTU1VTFRJU0VTU0lPTiBub3Qgc3VwcG9ydGVkOiByYz0lZFxuIiwgaSk7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IDZhMjlmYTMuLjIxZGFkOGMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC05NDMsNyArOTQzLDYgQEAKIAkJcGMtPmNvbXBvbmVudFR5cGUgPSAxOwogCQlwYy0+bGVuZ3RoQ29tcG9uZW50SWRlbnQgPSAwOwogCQlwYy0+Y29tcG9uZW50RmlsZVZlcnNpb25OdW0gPSAwOwotCQlwYyArPSBzaXplb2Yoc3RydWN0IHBhdGhDb21wb25lbnQpOwogCQllbGVuICs9IHNpemVvZihzdHJ1Y3QgcGF0aENvbXBvbmVudCk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDcwNzg5NzQuLmZkZTYzYTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC04MTcsNyArODE3LDggQEAKIAkJeGZzX2l1bmxvY2soeGlwLCBpb2xvY2spOwogCQlpZiAobmVlZF9pX211dGV4KQogCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCWVycm9yMiA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgcG9zLCByZXQpOworCQllcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHBvcywKKwkJCQkJCSAgICAgIHBvcyArIHJldCAtIDEpOwogCQlpZiAoIWVycm9yKQogCQkJZXJyb3IgPSBlcnJvcjI7CiAJCWlmIChuZWVkX2lfbXV0ZXgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20gYi9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KaW5kZXggMjkwOTEwZS4uOTZkN2M5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQpAQCAtMyw2ICszLDExIEBACiBoZWFkZXIteSAgKz0ga3ZtLmgKIGVuZGlmCiAKK2lmbmVxICgkKHdpbGRjYXJkICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL2luY2x1ZGUvYXNtL2t2bV9wYXJhLmggXAorCQkgICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tJChTUkNBUkNIKS9rdm1fcGFyYS5oKSwpCitoZWFkZXIteSAgKz0ga3ZtX3BhcmEuaAorZW5kaWYKKwogaWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvaW5jbHVkZS9hc20vYS5vdXQuaCBcCiAgICAgICAJCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2Eub3V0LmgpLCkKIHVuaWZkZWYteSArPSBhLm91dC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2RldmljZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kZXZpY2UuaAppbmRleCBjMTdjOTYwLi5kN2M3NmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2RldmljZS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZGV2aWNlLmgKQEAgLTksNCArOSw3IEBACiBzdHJ1Y3QgZGV2X2FyY2hkYXRhIHsKIH07CiAKK3N0cnVjdCBwZGV2X2FyY2hkYXRhIHsKK307CisKICNlbmRpZiAvKiBfQVNNX0dFTkVSSUNfREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCmluZGV4IGFhMDA4MDAuLjkwMDc5YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaApAQCAtODEsMTQgKzgxLDE3IEBACiAKICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgUEVSX0NQVV9TSEFSRURfQUxJR05FRF9TRUNUSU9OICIiCisjZGVmaW5lIFBFUl9DUFVfQUxJR05FRF9TRUNUSU9OICIiCiAjZWxzZQogI2RlZmluZSBQRVJfQ1BVX1NIQVJFRF9BTElHTkVEX1NFQ1RJT04gIi5zaGFyZWRfYWxpZ25lZCIKKyNkZWZpbmUgUEVSX0NQVV9BTElHTkVEX1NFQ1RJT04gIi5zaGFyZWRfYWxpZ25lZCIKICNlbmRpZgogI2RlZmluZSBQRVJfQ1BVX0ZJUlNUX1NFQ1RJT04gIi5maXJzdCIKIAogI2Vsc2UKIAogI2RlZmluZSBQRVJfQ1BVX1NIQVJFRF9BTElHTkVEX1NFQ1RJT04gIiIKKyNkZWZpbmUgUEVSX0NQVV9BTElHTkVEX1NFQ1RJT04gIi5zaGFyZWRfYWxpZ25lZCIKICNkZWZpbmUgUEVSX0NQVV9GSVJTVF9TRUNUSU9OICIiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zb2NrZXQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc29ja2V0LmgKaW5kZXggNWQ3OWU0MC4uNTM4OTkxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NvY2tldC5oCkBAIC02MCw0ICs2MCw3IEBACiAjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKICNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKIAorI2RlZmluZSBTT19QUk9UT0NPTAkJMzgKKyNkZWZpbmUgU09fRE9NQUlOCQkzOQorCiAjZW5kaWYgLyogX19BU01fR0VORVJJQ19TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCAzMzRhMzU5Li5jZmY0YTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMjY4LDYgKzI2OCwxMCBAQAogICAgICAgCQkgICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tJChTUkNBUkNIKS9rdm0uaCksKQogdW5pZmRlZi15ICs9IGt2bS5oCiBlbmRpZgoraWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvaW5jbHVkZS9hc20va3ZtX3BhcmEuaCBcCisJCSAgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS0kKFNSQ0FSQ0gpL2t2bV9wYXJhLmgpLCkKK3VuaWZkZWYteSArPSBrdm1fcGFyYS5oCitlbmRpZgogdW5pZmRlZi15ICs9IGxsYy5oCiB1bmlmZGVmLXkgKz0gbG9vcC5oCiB1bmlmZGVmLXkgKz0gbHAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oIGIvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oCmluZGV4IDliOTNjYWYuLmFiOTQzMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmgKQEAgLTM2LDYgKzM2LDExIEBACiAJc3RydWN0IGFtYmFfaWQJCSppZF90YWJsZTsKIH07CiAKK2VudW0gYW1iYV92ZW5kb3IgeworCUFNQkFfVkVORE9SX0FSTSA9IDB4NDEsCisJQU1CQV9WRU5ET1JfU1QgPSAweDgwLAorfTsKKwogI2RlZmluZSBhbWJhX2dldF9kcnZkYXRhKGQpCWRldl9nZXRfZHJ2ZGF0YSgmZC0+ZGV2KQogI2RlZmluZSBhbWJhX3NldF9kcnZkYXRhKGQscCkJZGV2X3NldF9kcnZkYXRhKCZkLT5kZXYsIHApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYW1iYS9wbDA5My5oIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDkzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4M2UzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9wbDA5My5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIGxpbnV4L2FtYmEvcGwwOTMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQU1CQSBQTDA5MyBTU01DIChzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIpCisgKiAgU2VlIERESTAyMzYucGRmIChyMHA0KSBmb3IgbW9yZSBkZXRhaWxzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgU01CX0JBTksoeCkJKCh4KSAqIDB4MjApIC8qIGVhY2ggYmFuayBjb250cm9sIHNldCBpcyAweDIwIGFwYXJ0ICovCisKKy8qIE9mZnNldHMgZm9yIFNNQnh4eHhSeSByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTTUJJRENZUgkoMHgwMCkKKyNkZWZpbmUgU01CV1NUUkRSCSgweDA0KQorI2RlZmluZSBTTUJXU1RXUlIJKDB4MDgpCisjZGVmaW5lIFNNQldTVE9FTlIJKDB4MEMpCisjZGVmaW5lIFNNQldTVFdFTlIJKDB4MTApCisjZGVmaW5lIFNNQkNSCQkoMHgxNCkKKyNkZWZpbmUgU01CU1IJCSgweDE4KQorI2RlZmluZSBTTUJXU1RCUkRSCSgweDFDKQorCisvKiBNYXNrcyBmb3IgU01CIHJlZ2lzdGVycyAqLworI2RlZmluZSBJRENZX01BU0sJKDB4ZikKKyNkZWZpbmUgV1NUUkRfTUFTSwkoMHhmKQorI2RlZmluZSBXU1RXUl9NQVNLCSgweGYpCisjZGVmaW5lIFdTVE9FTl9NQVNLCSgweGYpCisjZGVmaW5lIFdTVFdFTl9NQVNLCSgweGYpCisKKy8qIE5vdGVzIGZyb20gZGF0YXNoZWV0OgorICoJV1NUT0VOIDw9IFdTVFJECisgKglXU1RXRU4gPD0gV1NUV1IKKyAqCisgKiBXU1RPRU4gaXMgbm90IHVzZWQgd2l0aCBuV0FJVAorICovCisKKy8qIFNNQkNSIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBTTUJDUl9CSVdSSVRFRU4JCSgxIDw8IDIxKQorI2RlZmluZSBTTUJDUl9BRERSVkFMSURXUklURUVOCSgxIDw8IDIwKQorI2RlZmluZSBTTUJDUl9TWU5DV1JJVEUJCSgxIDw8IDE3KQorI2RlZmluZSBTTUJDUl9CTVdSSVRFCQkoMSA8PCAxNikKKyNkZWZpbmUgU01CQ1JfV1JBUFJFQUQJCSgxIDw8IDE0KQorI2RlZmluZSBTTUJDUl9CSVJFQURFTgkJKDEgPDwgMTMpCisjZGVmaW5lIFNNQkNSX0FERFJWQUxJRFJFQURFTgkoMSA8PCAxMikKKyNkZWZpbmUgU01CQ1JfU1lOQ1JFQUQJCSgxIDw8IDkpCisjZGVmaW5lIFNNQkNSX0JNUkVBRAkJKDEgPDwgOCkKKyNkZWZpbmUgU01CQ1JfU01CTFNQT0wJCSgxIDw8IDYpCisjZGVmaW5lIFNNQkNSX1dQCQkoMSA8PCAzKQorI2RlZmluZSBTTUJDUl9XQUlURU4JCSgxIDw8IDIpCisjZGVmaW5lIFNNQkNSX1dBSVRQT0wJCSgxIDw8IDEpCisjZGVmaW5lIFNNQkNSX1JCTEUJCSgxIDw8IDApCisKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5XUklURV9NQVNLCSgzIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFXzQJCSgwIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFXzgJCSgxIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFX1JFU0VSVkVECSgyIDw8IDE4KQorI2RlZmluZSBTTUJDUl9CVVJTVExFTldSSVRFX0NPTlRJTlVPVVMJKDMgPDwgMTgpCisKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5SRUFEX01BU0sJCSgzIDw8IDEwKQorI2RlZmluZSBTTUJDUl9CVVJTVExFTlJFQURfNAkJKDAgPDwgMTApCisjZGVmaW5lIFNNQkNSX0JVUlNUTEVOUkVBRF84CQkoMSA8PCAxMCkKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5SRUFEXzE2CQkoMiA8PCAxMCkKKyNkZWZpbmUgU01CQ1JfQlVSU1RMRU5SRUFEX0NPTlRJTlVPVVMJKDMgPDwgMTApCisKKyNkZWZpbmUgU01CQ1JfTVdfTUFTSwkJCSgzIDw8IDQpCisjZGVmaW5lIFNNQkNSX01XXzhCSVQJCQkoMCA8PCA0KQorI2RlZmluZSBTTUJDUl9NV18xNkJJVAkJCSgxIDw8IDQpCisjZGVmaW5lIFNNQkNSX01XX00zMkJJVAkJCSgyIDw8IDQpCisKKy8qIFNTTUMgc3RhdHVzIHJlZ2lzdGVycyAqLworI2RlZmluZSBTU01DQ1NSCQkoMHgyMDApCisjZGVmaW5lIFNTTUNDUgkJKDB4MjA0KQorI2RlZmluZSBTU01DSVRDUgkoMHgyMDgpCisjZGVmaW5lIFNTTUNJVElQCSgweDIwQykKKyNkZWZpbmUgU1NNQ0lUSU9QCSgweDIxMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCmluZGV4IGNkNGJjYjYuLjdkNjUwYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaApAQCAtMzM3LDcgKzMzNyw4IEBACiAKIGludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCAyODkyYjcxLi41YmU5M2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTE0Miw1NiArMTQyLDUxIEBACiAgKgogICogYml0IDAgLS0gZGF0YSBkaXJlY3Rpb24KICAqCUlmIG5vdCBzZXQsIGJpbyBpcyBhIHJlYWQgZnJvbSBkZXZpY2UuIElmIHNldCwgaXQncyBhIHdyaXRlIHRvIGRldmljZS4KLSAqIGJpdCAxIC0tIHJ3LWFoZWFkIHdoZW4gc2V0Ci0gKiBiaXQgMiAtLSBiYXJyaWVyCisgKiBiaXQgMSAtLSBmYWlsIGZhc3QgZGV2aWNlIGVycm9ycworICogYml0IDIgLS0gZmFpbCBmYXN0IHRyYW5zcG9ydCBlcnJvcnMKKyAqIGJpdCAzIC0tIGZhaWwgZmFzdCBkcml2ZXIgZXJyb3JzCisgKiBiaXQgNCAtLSBydy1haGVhZCB3aGVuIHNldAorICogYml0IDUgLS0gYmFycmllcgogICoJSW5zZXJ0IGEgc2VyaWFsaXphdGlvbiBwb2ludCBpbiB0aGUgSU8gcXVldWUsIGZvcmNpbmcgcHJldmlvdXNseQogICoJc3VibWl0dGVkIElPIHRvIGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhpcyBvbmUgaXMgaXNzdWVkLgotICogYml0IDMgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQuCi0gKiBiaXQgNCAtLSBVbnBsdWcgdGhlIGRldmljZSBpbW1lZGlhdGVseSBhZnRlciBzdWJtaXR0aW5nIHRoaXMgYmlvLgotICogYml0IDUgLS0gbWV0YWRhdGEgcmVxdWVzdAorICogYml0IDYgLS0gc3luY2hyb25vdXMgSS9PIGhpbnQuCisgKiBiaXQgNyAtLSBVbnBsdWcgdGhlIGRldmljZSBpbW1lZGlhdGVseSBhZnRlciBzdWJtaXR0aW5nIHRoaXMgYmlvLgorICogYml0IDggLS0gbWV0YWRhdGEgcmVxdWVzdAogICoJVXNlZCBmb3IgdHJhY2luZyB0byBkaWZmZXJlbnRpYXRlIG1ldGFkYXRhIGFuZCBkYXRhIElPLiBNYXkgYWxzbwogICoJZ2V0IHNvbWUgcHJlZmVyZW50aWFsIHRyZWF0bWVudCBpbiB0aGUgSU8gc2NoZWR1bGVyCi0gKiBiaXQgNiAtLSBkaXNjYXJkIHNlY3RvcnMKKyAqIGJpdCA5IC0tIGRpc2NhcmQgc2VjdG9ycwogICoJSW5mb3JtcyB0aGUgbG93ZXIgbGV2ZWwgZGV2aWNlIHRoYXQgdGhpcyByYW5nZSBvZiBzZWN0b3JzIGlzIG5vIGxvbmdlcgogICoJdXNlZCBieSB0aGUgZmlsZSBzeXN0ZW0gYW5kIG1heSB0aHVzIGJlIGZyZWVkIGJ5IHRoZSBkZXZpY2UuIFVzZWQKICAqCWZvciBmbGFzaCBiYXNlZCBzdG9yYWdlLgotICogYml0IDcgLS0gZmFpbCBmYXN0IGRldmljZSBlcnJvcnMKLSAqIGJpdCA4IC0tIGZhaWwgZmFzdCB0cmFuc3BvcnQgZXJyb3JzCi0gKiBiaXQgOSAtLSBmYWlsIGZhc3QgZHJpdmVyIGVycm9ycwogICoJRG9uJ3Qgd2FudCBkcml2ZXIgcmV0cmllcyBmb3IgYW55IGZhc3QgZmFpbCB3aGF0ZXZlciB0aGUgcmVhc29uLgogICogYml0IDEwIC0tIFRlbGwgdGhlIElPIHNjaGVkdWxlciBub3QgdG8gd2FpdCBmb3IgbW9yZSByZXF1ZXN0cyBhZnRlciB0aGlzCiAJb25lIGhhcyBiZWVuIHN1Ym1pdHRlZCwgZXZlbiBpZiBpdCBpcyBhIFNZTkMgcmVxdWVzdC4KICAqLwotI2RlZmluZSBCSU9fUlcJCTAJLyogTXVzdCBtYXRjaCBSVyBpbiByZXEgZmxhZ3MgKGJsa2Rldi5oKSAqLwotI2RlZmluZSBCSU9fUldfQUhFQUQJMQkvKiBNdXN0IG1hdGNoIEZBSUxGQVNUIGluIHJlcSBmbGFncyAqLwotI2RlZmluZSBCSU9fUldfQkFSUklFUgkyCi0jZGVmaW5lIEJJT19SV19TWU5DSU8JMwotI2RlZmluZSBCSU9fUldfVU5QTFVHCTQKLSNkZWZpbmUgQklPX1JXX01FVEEJNQotI2RlZmluZSBCSU9fUldfRElTQ0FSRAk2Ci0jZGVmaW5lIEJJT19SV19GQUlMRkFTVF9ERVYJCTcKLSNkZWZpbmUgQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVAk4Ci0jZGVmaW5lIEJJT19SV19GQUlMRkFTVF9EUklWRVIJCTkKLSNkZWZpbmUgQklPX1JXX05PSURMRQkxMAotCi0jZGVmaW5lIGJpb19yd19mbGFnZ2VkKGJpbywgZmxhZykJKChiaW8pLT5iaV9ydyAmICgxIDw8IChmbGFnKSkpCitlbnVtIGJpb19yd19mbGFncyB7CisJQklPX1JXLAorCUJJT19SV19GQUlMRkFTVF9ERVYsCisJQklPX1JXX0ZBSUxGQVNUX1RSQU5TUE9SVCwKKwlCSU9fUldfRkFJTEZBU1RfRFJJVkVSLAorCS8qIGFib3ZlIGZsYWdzIG11c3QgbWF0Y2ggUkVRXyogKi8KKwlCSU9fUldfQUhFQUQsCisJQklPX1JXX0JBUlJJRVIsCisJQklPX1JXX1NZTkNJTywKKwlCSU9fUldfVU5QTFVHLAorCUJJT19SV19NRVRBLAorCUJJT19SV19ESVNDQVJELAorCUJJT19SV19OT0lETEUsCit9OwogCiAvKgotICogT2xkIGRlZmluZXMsIHRoZXNlIHNob3VsZCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIGJ5IGRpcmVjdCB1c2FnZSBvZgotICogYmlvX3J3X2ZsYWdnZWQoKQorICogRmlyc3QgZm91ciBiaXRzIG11c3QgbWF0Y2ggYmV0d2VlbiBiaW8tPmJpX3J3IGFuZCBycS0+Y21kX2ZsYWdzLCBtYWtlCisgKiB0aGF0IGV4cGxpY2l0IGhlcmUuCiAgKi8KLSNkZWZpbmUgYmlvX2JhcnJpZXIoYmlvKQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKQotI2RlZmluZSBiaW9fc3luYyhiaW8pCQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pCi0jZGVmaW5lIGJpb191bnBsdWcoYmlvKQkJYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfVU5QTFVHKQotI2RlZmluZSBiaW9fZmFpbGZhc3RfZGV2KGJpbykJYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRkFJTEZBU1RfREVWKQotI2RlZmluZSBiaW9fZmFpbGZhc3RfdHJhbnNwb3J0KGJpbykJXAotCQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19GQUlMRkFTVF9UUkFOU1BPUlQpCi0jZGVmaW5lIGJpb19mYWlsZmFzdF9kcml2ZXIoYmlvKSAJXAotCQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19GQUlMRkFTVF9EUklWRVIpCi0jZGVmaW5lIGJpb19yd19haGVhZChiaW8pCWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0FIRUFEKQotI2RlZmluZSBiaW9fcndfbWV0YShiaW8pCWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX01FVEEpCi0jZGVmaW5lIGJpb19kaXNjYXJkKGJpbykJYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkKLSNkZWZpbmUgYmlvX25vaWRsZShiaW8pCQliaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19OT0lETEUpCisjZGVmaW5lIEJJT19SV19SUV9NQVNLCQkweGYKKworc3RhdGljIGlubGluZSBib29sIGJpb19yd19mbGFnZ2VkKHN0cnVjdCBiaW8gKmJpbywgZW51bSBiaW9fcndfZmxhZ3MgZmxhZykKK3sKKwlyZXR1cm4gKGJpby0+YmlfcncgJiAoMSA8PCBmbGFnKSkgIT0gMDsKK30KIAogLyoKICAqIHVwcGVyIDE2IGJpdHMgb2YgYmlfcncgZGVmaW5lIHRoZSBpbyBwcmlvcml0eSBvZiB0aGlzIGJpbwpAQCAtMjE2LDcgKzIxMSw3IEBACiAjZGVmaW5lIGJpb19vZmZzZXQoYmlvKQkJYmlvX2lvdmVjKChiaW8pKS0+YnZfb2Zmc2V0CiAjZGVmaW5lIGJpb19zZWdtZW50cyhiaW8pCSgoYmlvKS0+YmlfdmNudCAtIChiaW8pLT5iaV9pZHgpCiAjZGVmaW5lIGJpb19zZWN0b3JzKGJpbykJKChiaW8pLT5iaV9zaXplID4+IDkpCi0jZGVmaW5lIGJpb19lbXB0eV9iYXJyaWVyKGJpbykJKGJpb19iYXJyaWVyKGJpbykgJiYgIWJpb19oYXNfZGF0YShiaW8pICYmICFiaW9fZGlzY2FyZChiaW8pKQorI2RlZmluZSBiaW9fZW1wdHlfYmFycmllcihiaW8pCShiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJiAhYmlvX2hhc19kYXRhKGJpbykgJiYgIWJpb19yd19mbGFnZ2VkKGJpbywgQklPX1JXX0RJU0NBUkQpKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiaW9fY3VyX2J5dGVzKHN0cnVjdCBiaW8gKmJpbykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrLWlvcG9sbC5oIGIvaW5jbHVkZS9saW51eC9ibGstaW9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4NzM0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYmxrLWlvcG9sbC5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgQkxLX0lPUE9MTF9ICisjZGVmaW5lIEJMS19JT1BPTExfSAorCitzdHJ1Y3QgYmxrX2lvcG9sbDsKK3R5cGVkZWYgaW50IChibGtfaW9wb2xsX2ZuKShzdHJ1Y3QgYmxrX2lvcG9sbCAqLCBpbnQpOworCitzdHJ1Y3QgYmxrX2lvcG9sbCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCWludCB3ZWlnaHQ7CisJaW50IG1heDsKKwlibGtfaW9wb2xsX2ZuICpwb2xsOworfTsKKworZW51bSB7CisJSU9QT0xMX0ZfU0NIRUQJCT0gMCwKKwlJT1BPTExfRl9ESVNBQkxFCT0gMSwKK307CisKKy8qCisgKiBSZXR1cm5zIDAgaWYgd2Ugc3VjY2Vzc2Z1bGx5IHNldCB0aGUgSU9QT0xMX0ZfU0NIRUQgYml0LCBpbmRpY2F0aW5nCisgKiB0aGF0IHdlIHdlcmUgdGhlIGZpcnN0IHRvIGFjcXVpcmUgdGhpcyBpb3AgZm9yIHNjaGVkdWxpbmcuIElmIHRoaXMgaW9wCisgKiBpcyBjdXJyZW50bHkgZGlzYWJsZWQsIHJldHVybiAiZmFpbHVyZSIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJsa19pb3BvbGxfc2NoZWRfcHJlcChzdHJ1Y3QgYmxrX2lvcG9sbCAqaW9wKQoreworCWlmICghdGVzdF9iaXQoSU9QT0xMX0ZfRElTQUJMRSwgJmlvcC0+c3RhdGUpKQorCQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChJT1BPTExfRl9TQ0hFRCwgJmlvcC0+c3RhdGUpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJsa19pb3BvbGxfZGlzYWJsZV9wZW5kaW5nKHN0cnVjdCBibGtfaW9wb2xsICppb3ApCit7CisJcmV0dXJuIHRlc3RfYml0KElPUE9MTF9GX0RJU0FCTEUsICZpb3AtPnN0YXRlKTsKK30KKworZXh0ZXJuIHZvaWQgYmxrX2lvcG9sbF9zY2hlZChzdHJ1Y3QgYmxrX2lvcG9sbCAqKTsKK2V4dGVybiB2b2lkIGJsa19pb3BvbGxfaW5pdChzdHJ1Y3QgYmxrX2lvcG9sbCAqLCBpbnQsIGJsa19pb3BvbGxfZm4gKik7CitleHRlcm4gdm9pZCBibGtfaW9wb2xsX2NvbXBsZXRlKHN0cnVjdCBibGtfaW9wb2xsICopOworZXh0ZXJuIHZvaWQgX19ibGtfaW9wb2xsX2NvbXBsZXRlKHN0cnVjdCBibGtfaW9wb2xsICopOworZXh0ZXJuIHZvaWQgYmxrX2lvcG9sbF9lbmFibGUoc3RydWN0IGJsa19pb3BvbGwgKik7CitleHRlcm4gdm9pZCBibGtfaW9wb2xsX2Rpc2FibGUoc3RydWN0IGJsa19pb3BvbGwgKik7CisKK2V4dGVybiBpbnQgYmxrX2lvcG9sbF9lbmFibGVkOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IDY5MTAzZTAuLmUyM2E4NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtODYsMTMgKzg2LDE0IEBACiB9OwogCiAvKgotICogcmVxdWVzdCB0eXBlIG1vZGlmaWVkIGJpdHMuIGZpcnN0IHR3byBiaXRzIG1hdGNoIEJJT19SVyogYml0cywgaW1wb3J0YW50CisgKiByZXF1ZXN0IHR5cGUgbW9kaWZpZWQgYml0cy4gZmlyc3QgZm91ciBiaXRzIG1hdGNoIEJJT19SVyogYml0cywgaW1wb3J0YW50CiAgKi8KIGVudW0gcnFfZmxhZ19iaXRzIHsKIAlfX1JFUV9SVywJCS8qIG5vdCBzZXQsIHJlYWQuIHNldCwgd3JpdGUgKi8KIAlfX1JFUV9GQUlMRkFTVF9ERVYsCS8qIG5vIGRyaXZlciByZXRyaWVzIG9mIGRldmljZSBlcnJvcnMgKi8KIAlfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQsIC8qIG5vIGRyaXZlciByZXRyaWVzIG9mIHRyYW5zcG9ydCBlcnJvcnMgKi8KIAlfX1JFUV9GQUlMRkFTVF9EUklWRVIsCS8qIG5vIGRyaXZlciByZXRyaWVzIG9mIGRyaXZlciBlcnJvcnMgKi8KKwkvKiBhYm92ZSBmbGFncyBtdXN0IG1hdGNoIEJJT19SV18qICovCiAJX19SRVFfRElTQ0FSRCwJCS8qIHJlcXVlc3QgdG8gZGlzY2FyZCBzZWN0b3JzICovCiAJX19SRVFfU09SVEVELAkJLyogZWxldmF0b3Iga25vd3MgYWJvdXQgdGhpcyByZXF1ZXN0ICovCiAJX19SRVFfU09GVEJBUlJJRVIsCS8qIG1heSBub3QgYmUgcGFzc2VkIGJ5IGlvc2NoZWR1bGVyICovCkBAIC0xMTQsNiArMTE1LDcgQEAKIAlfX1JFUV9JTlRFR1JJVFksCS8qIGludGVncml0eSBtZXRhZGF0YSBoYXMgYmVlbiByZW1hcHBlZCAqLwogCV9fUkVRX05PSURMRSwJCS8qIERvbid0IGFudGljaXBhdGUgbW9yZSBJTyBhZnRlciB0aGlzIG9uZSAqLwogCV9fUkVRX0lPX1NUQVQsCQkvKiBhY2NvdW50IEkvTyBzdGF0ICovCisJX19SRVFfTUlYRURfTUVSR0UsCS8qIG1lcmdlIG9mIGRpZmZlcmVudCB0eXBlcywgZmFpbCBzZXBhcmF0ZWx5ICovCiAJX19SRVFfTlJfQklUUywJCS8qIHN0b3BzIGhlcmUgKi8KIH07CiAKQEAgLTE0Miw2ICsxNDQsMTAgQEAKICNkZWZpbmUgUkVRX0lOVEVHUklUWQkoMSA8PCBfX1JFUV9JTlRFR1JJVFkpCiAjZGVmaW5lIFJFUV9OT0lETEUJKDEgPDwgX19SRVFfTk9JRExFKQogI2RlZmluZSBSRVFfSU9fU1RBVAkoMSA8PCBfX1JFUV9JT19TVEFUKQorI2RlZmluZSBSRVFfTUlYRURfTUVSR0UJKDEgPDwgX19SRVFfTUlYRURfTUVSR0UpCisKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX01BU0sJKFJFUV9GQUlMRkFTVF9ERVYgfCBSRVFfRkFJTEZBU1RfVFJBTlNQT1JUIHwgXAorCQkJCSBSRVFfRkFJTEZBU1RfRFJJVkVSKQogCiAjZGVmaW5lIEJMS19NQVhfQ0RCCTE2CiAKQEAgLTQ1MywxMCArNDU5LDEyIEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfTk9OUk9UICAgICAgMTQJLyogbm9uLXJvdGF0aW9uYWwgZGV2aWNlIChTU0QpICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19DUQkgICAgICAgMTYJLyogaGFyZHdhcmUgZG9lcyBxdWV1aW5nICovCiAKICNkZWZpbmUgUVVFVUVfRkxBR19ERUZBVUxUCSgoMSA8PCBRVUVVRV9GTEFHX0lPX1NUQVQpIHwJCVwKIAkJCQkgKDEgPDwgUVVFVUVfRkxBR19DTFVTVEVSKSB8CQlcCi0JCQkJICgxIDw8IFFVRVVFX0ZMQUdfU1RBQ0tBQkxFKSkKKwkJCQkgKDEgPDwgUVVFVUVfRkxBR19TVEFDS0FCTEUpCXwJXAorCQkJCSAoMSA8PCBRVUVVRV9GTEFHX1NBTUVfQ09NUCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX2lzX2xvY2tlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKQEAgLTU3NSw2ICs1ODMsNyBAQAogCiAjZGVmaW5lIGJsa19xdWV1ZV9wbHVnZ2VkKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfUExVR0dFRCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV90YWdnZWQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19RVUVVRUQsICYocSktPnF1ZXVlX2ZsYWdzKQorI2RlZmluZSBibGtfcXVldWVfcXVldWluZyhxKQl0ZXN0X2JpdChRVUVVRV9GTEFHX0NRLCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX3N0b3BwZWQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19TVE9QUEVELCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX25vbWVyZ2VzKHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfTk9NRVJHRVMsICYocSktPnF1ZXVlX2ZsYWdzKQogI2RlZmluZSBibGtfcXVldWVfbm9ucm90KHEpCXRlc3RfYml0KFFVRVVFX0ZMQUdfTk9OUk9ULCAmKHEpLT5xdWV1ZV9mbGFncykKQEAgLTgyOCwxMSArODM3LDEzIEBACiB9CiAKIC8qCi0gKiBibGtfcnFfcG9zKCkJCTogdGhlIGN1cnJlbnQgc2VjdG9yCi0gKiBibGtfcnFfYnl0ZXMoKQk6IGJ5dGVzIGxlZnQgaW4gdGhlIGVudGlyZSByZXF1ZXN0Ci0gKiBibGtfcnFfY3VyX2J5dGVzKCkJOiBieXRlcyBsZWZ0IGluIHRoZSBjdXJyZW50IHNlZ21lbnQKLSAqIGJsa19ycV9zZWN0b3JzKCkJOiBzZWN0b3JzIGxlZnQgaW4gdGhlIGVudGlyZSByZXF1ZXN0Ci0gKiBibGtfcnFfY3VyX3NlY3RvcnMoKQk6IHNlY3RvcnMgbGVmdCBpbiB0aGUgY3VycmVudCBzZWdtZW50CisgKiBibGtfcnFfcG9zKCkJCQk6IHRoZSBjdXJyZW50IHNlY3RvcgorICogYmxrX3JxX2J5dGVzKCkJCTogYnl0ZXMgbGVmdCBpbiB0aGUgZW50aXJlIHJlcXVlc3QKKyAqIGJsa19ycV9jdXJfYnl0ZXMoKQkJOiBieXRlcyBsZWZ0IGluIHRoZSBjdXJyZW50IHNlZ21lbnQKKyAqIGJsa19ycV9lcnJfYnl0ZXMoKQkJOiBieXRlcyBsZWZ0IHRpbGwgdGhlIG5leHQgZXJyb3IgYm91bmRhcnkKKyAqIGJsa19ycV9zZWN0b3JzKCkJCTogc2VjdG9ycyBsZWZ0IGluIHRoZSBlbnRpcmUgcmVxdWVzdAorICogYmxrX3JxX2N1cl9zZWN0b3JzKCkJCTogc2VjdG9ycyBsZWZ0IGluIHRoZSBjdXJyZW50IHNlZ21lbnQKKyAqIGJsa19ycV9lcnJfc2VjdG9ycygpCQk6IHNlY3RvcnMgbGVmdCB0aWxsIHRoZSBuZXh0IGVycm9yIGJvdW5kYXJ5CiAgKi8KIHN0YXRpYyBpbmxpbmUgc2VjdG9yX3QgYmxrX3JxX3Bvcyhjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CkBAIC04NDksNiArODYwLDggQEAKIAlyZXR1cm4gcnEtPmJpbyA/IGJpb19jdXJfYnl0ZXMocnEtPmJpbykgOiAwOwogfQogCitleHRlcm4gdW5zaWduZWQgaW50IGJsa19ycV9lcnJfYnl0ZXMoY29uc3Qgc3RydWN0IHJlcXVlc3QgKnJxKTsKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmxrX3JxX3NlY3RvcnMoY29uc3Qgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXJldHVybiBibGtfcnFfYnl0ZXMocnEpID4+IDk7CkBAIC04NTksNiArODcyLDExIEBACiAJcmV0dXJuIGJsa19ycV9jdXJfYnl0ZXMocnEpID4+IDk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa19ycV9lcnJfc2VjdG9ycyhjb25zdCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJcmV0dXJuIGJsa19ycV9lcnJfYnl0ZXMocnEpID4+IDk7Cit9CisKIC8qCiAgKiBSZXF1ZXN0IGlzc3VlIHJlbGF0ZWQgZnVuY3Rpb25zLgogICovCkBAIC04ODUsMTAgKzkwMywxMiBAQAogCQkJICAgIHVuc2lnbmVkIGludCBucl9ieXRlcyk7CiBleHRlcm4gdm9pZCBibGtfZW5kX3JlcXVlc3RfYWxsKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKTsKIGV4dGVybiBib29sIGJsa19lbmRfcmVxdWVzdF9jdXIoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpOworZXh0ZXJuIGJvb2wgYmxrX2VuZF9yZXF1ZXN0X2VycihzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CiBleHRlcm4gYm9vbCBfX2Jsa19lbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvciwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBucl9ieXRlcyk7CiBleHRlcm4gdm9pZCBfX2Jsa19lbmRfcmVxdWVzdF9hbGwoc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGJvb2wgX19ibGtfZW5kX3JlcXVlc3RfY3VyKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKTsKK2V4dGVybiBib29sIF9fYmxrX2VuZF9yZXF1ZXN0X2VycihzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcik7CiAKIGV4dGVybiB2b2lkIGJsa19jb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIHZvaWQgX19ibGtfY29tcGxldGVfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqKTsKQEAgLTkxNSw2ICs5MzUsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ25tZW50KTsKIGV4dGVybiB2b2lkIGJsa19saW1pdHNfaW9fbWluKHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cywgdW5zaWduZWQgaW50IG1pbik7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfaW9fbWluKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbWluKTsKK2V4dGVybiB2b2lkIGJsa19saW1pdHNfaW9fb3B0KHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbWl0cywgdW5zaWduZWQgaW50IG9wdCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfaW9fb3B0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgb3B0KTsKIGV4dGVybiB2b2lkIGJsa19zZXRfZGVmYXVsdF9saW1pdHMoc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTsKIGV4dGVybiBpbnQgYmxrX3N0YWNrX2xpbWl0cyhzdHJ1Y3QgcXVldWVfbGltaXRzICp0LCBzdHJ1Y3QgcXVldWVfbGltaXRzICpiLApAQCAtOTc3LDE1ICs5OTgsMTggQEAKIH0KIAogZXh0ZXJuIGludCBibGtkZXZfaXNzdWVfZmx1c2goc3RydWN0IGJsb2NrX2RldmljZSAqLCBzZWN0b3JfdCAqKTsKLWV4dGVybiBpbnQgYmxrZGV2X2lzc3VlX2Rpc2NhcmQoc3RydWN0IGJsb2NrX2RldmljZSAqLAotCQkJCXNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdHMsIGdmcF90KTsKKyNkZWZpbmUgRElTQ0FSRF9GTF9XQUlUCQkweDAxCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gKi8KKyNkZWZpbmUgRElTQ0FSRF9GTF9CQVJSSUVSCTB4MDIJLyogaXNzdWUgRElTQ0FSRF9CQVJSSUVSIHJlcXVlc3QgKi8KK2V4dGVybiBpbnQgYmxrZGV2X2lzc3VlX2Rpc2NhcmQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBzZWN0b3JfdCBzZWN0b3IsCisJCXNlY3Rvcl90IG5yX3NlY3RzLCBnZnBfdCwgaW50IGZsYWdzKTsKIAogc3RhdGljIGlubGluZSBpbnQgc2JfaXNzdWVfZGlzY2FyZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgIHNlY3Rvcl90IGJsb2NrLCBzZWN0b3JfdCBucl9ibG9ja3MpCiB7CiAJYmxvY2sgPDw9IChzYi0+c19ibG9ja3NpemVfYml0cyAtIDkpOwogCW5yX2Jsb2NrcyA8PD0gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7Ci0JcmV0dXJuIGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHNiLT5zX2JkZXYsIGJsb2NrLCBucl9ibG9ja3MsIEdGUF9LRVJORUwpOworCXJldHVybiBibGtkZXZfaXNzdWVfZGlzY2FyZChzYi0+c19iZGV2LCBibG9jaywgbnJfYmxvY2tzLCBHRlBfS0VSTkVMLAorCQkJCSAgICBESVNDQVJEX0ZMX0JBUlJJRVIpOwogfQogCiBleHRlcm4gaW50IGJsa192ZXJpZnlfY29tbWFuZCh1bnNpZ25lZCBjaGFyICpjbWQsIGZtb2RlX3QgaGFzX3dyaXRlX3Blcm0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaAppbmRleCA0YTM3YTU2Li41ODI0YjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaApAQCAtNjYsNSArNjYsNiBAQAogCiB2b2lkIGNhbl9wdXRfZWNob19za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlkeCk7CiB2b2lkIGNhbl9nZXRfZWNob19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlkeCk7Cit2b2lkIGNhbl9mcmVlX2VjaG9fc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpZHgpOwogCiAjZW5kaWYgLyogQ0FOX0RFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAppbmRleCBiNjhkMjc4Li40N2ViZjQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXZvaWQgKmRkYXRhOwogCQogCXZvaWQgKmNhbGxiYWNrX3ByaXY7Ci0Jdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqKTsKKwl2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgY25fbXNnICopOwogCiAJdm9pZCAqZnJlZTsKIH07CkBAIC0xNjcsMTEgKzE2NywxMSBAQAogCXN0cnVjdCBjbl9xdWV1ZV9kZXYgKmNiZGV2OwogfTsKIAotaW50IGNuX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKiwgY2hhciAqLCB2b2lkICgqY2FsbGJhY2spICh2b2lkICopKTsKK2ludCBjbl9hZGRfY2FsbGJhY2soc3RydWN0IGNiX2lkICosIGNoYXIgKiwgdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IGNuX21zZyAqKSk7CiB2b2lkIGNuX2RlbF9jYWxsYmFjayhzdHJ1Y3QgY2JfaWQgKik7CiBpbnQgY25fbmV0bGlua19zZW5kKHN0cnVjdCBjbl9tc2cgKiwgdTMyLCBnZnBfdCk7CiAKLWludCBjbl9xdWV1ZV9hZGRfY2FsbGJhY2soc3RydWN0IGNuX3F1ZXVlX2RldiAqZGV2LCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2JfaWQgKmlkLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKikpOworaW50IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNuX21zZyAqKSk7CiB2b2lkIGNuX3F1ZXVlX2RlbF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIHN0cnVjdCBjYl9pZCAqaWQpOwogCiBpbnQgcXVldWVfY25fd29yayhzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNibmwuaCBiL2luY2x1ZGUvbGludXgvZGNibmwuaAppbmRleCA3ZDJlMTAwLi5iN2NkYmI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2JubC5oCkBAIC01MCw2ICs1MCw4IEBACiAgKiBARENCX0NNRF9TTlVNVENTOiBzZXQgdGhlIG51bWJlciBvZiB0cmFmZmljIGNsYXNzZXMKICAqIEBEQ0JfQ01EX0dCQ046IHNldCBiYWNrd2FyZCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uCiAgKiBARENCX0NNRF9TQkNOOiBnZXQgYmFja3dhcmQgY29uZ2VzdGlvbiBub3RpZmljYXRpb24gY29uZmlncmF0aW9uLgorICogQERDQl9DTURfR0FQUDogZ2V0IGFwcGxpY2F0aW9uIHByb3RvY29sIGNvbmZpZ3VyYXRpb24KKyAqIEBEQ0JfQ01EX1NBUFA6IHNldCBhcHBsaWNhdGlvbiBwcm90b2NvbCBjb25maWd1cmF0aW9uCiAgKi8KIGVudW0gZGNibmxfY29tbWFuZHMgewogCURDQl9DTURfVU5ERUZJTkVELApAQCAtODAsNiArODIsOSBAQAogCURDQl9DTURfQkNOX0dDRkcsCiAJRENCX0NNRF9CQ05fU0NGRywKIAorCURDQl9DTURfR0FQUCwKKwlEQ0JfQ01EX1NBUFAsCisKIAlfX0RDQl9DTURfRU5VTV9NQVgsCiAJRENCX0NNRF9NQVggPSBfX0RDQl9DTURfRU5VTV9NQVggLSAxLAogfTsKQEAgLTExNCw2ICsxMTksNyBAQAogCURDQl9BVFRSX0NBUCwKIAlEQ0JfQVRUUl9OVU1UQ1MsCiAJRENCX0FUVFJfQkNOLAorCURDQl9BVFRSX0FQUCwKIAogCV9fRENCX0FUVFJfRU5VTV9NQVgsCiAJRENCX0FUVFJfTUFYID0gX19EQ0JfQVRUUl9FTlVNX01BWCAtIDEsCkBAIC0zMzgsNSArMzQ0LDE3IEBACiAJRENCX0FUVFJfVkFMVUVfVU5ERUZJTkVEID0gMHhmZgogfTsKIAorI2RlZmluZSBEQ0JfQVBQX0lEVFlQRV9FVEhUWVBFCTB4MDAKKyNkZWZpbmUgRENCX0FQUF9JRFRZUEVfUE9SVE5VTQkweDAxCitlbnVtIGRjYm5sX2FwcF9hdHRycyB7CisJRENCX0FQUF9BVFRSX1VOREVGSU5FRCwKKworCURDQl9BUFBfQVRUUl9JRFRZUEUsCisJRENCX0FQUF9BVFRSX0lELAorCURDQl9BUFBfQVRUUl9QUklPUklUWSwKKworCV9fRENCX0FQUF9BVFRSX0VOVU1fTUFYLAorCURDQl9BUFBfQVRUUl9NQVggPSBfX0RDQl9BUFBfQVRUUl9FTlVNX01BWCAtIDEsCit9OwogCiAjZW5kaWYgLyogX19MSU5VWF9EQ0JOTF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFlYmI4MTAuLmEyODY0MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtNjIsNyArNjIsNyBAQAogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLQlzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtOwogCiAJc3RydWN0IGJ1c190eXBlX3ByaXZhdGUgKnA7CiB9OwpAQCAtMTMyLDcgKzEzMiw3IEBACiAJaW50ICgqcmVzdW1lKSAoc3RydWN0IGRldmljZSAqZGV2KTsKIAlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzOwogCi0Jc3RydWN0IGRldl9wbV9vcHMgKnBtOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKIAogCXN0cnVjdCBkcml2ZXJfcHJpdmF0ZSAqcDsKIH07CkBAIC0yMDAsNyArMjAwLDggQEAKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi0Jc3RydWN0IGRldl9wbV9vcHMgKnBtOworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKKwogCXN0cnVjdCBjbGFzc19wcml2YXRlICpwOwogfTsKIApAQCAtMjkxLDcgKzI5Miw3IEBACiAJY2hhciAqKCpub2RlbmFtZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIAotCXN0cnVjdCBkZXZfcG1fb3BzICpwbTsKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07CiB9OwogCiAvKiBpbnRlcmZhY2UgZm9yIGV4cG9ydGluZyBkZXZpY2UgYXR0cmlidXRlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdGxrLmggYi9pbmNsdWRlL2xpbnV4L2R0bGsuaAppbmRleCAyODk2ZDkwLi4yMmE3YjlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2R0bGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2R0bGsuaApAQCAtMSwyMiArMSwzIEBACi0jaWYgMAotCi0jZGVmaW5lIFRSQUNFX1RYVCh0ZXh0KSBcCi0JeyBcCi0JICBpZihkdGxrX3RyYWNlKSBcCi0JICB7IFwKLQkgICAgY29uc29sZV9wcmludCh0ZXh0KTsgXAotCSAgICBjb25zb2xlX3ByaW50KCJcbiIpOyBcCi0JICB9IFwKLQl9Ci0KLSNkZWZpbmUgVFJBQ0VfQ0hSKGNocikgXAotCXsgXAotCSAgaWYoZHRsa190cmFjZSkgXAotCSAgICBjb25zb2xlX3ByaW50KGNocik7IFwKLQl9IFwKLQotI2VuZGlmCi0KICNkZWZpbmUgRFRMS19NSU5PUgkwCiAjZGVmaW5lIERUTEtfSU9fRVhURU5UCTB4MDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaCBiL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmgKaW5kZXggNDMzMjQ0Mi4uOTBkMWMyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oCkBAIC0xMjIsOCArMTIyLDkgQEAKIAkJCQkgZW51bSBlbmNsb3N1cmVfY29tcG9uZW50X3R5cGUsIGNvbnN0IGNoYXIgKik7CiBpbnQgZW5jbG9zdXJlX2FkZF9kZXZpY2Uoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVuY2xvc3VyZSwgaW50IGNvbXBvbmVudCwKIAkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpOwotaW50IGVuY2xvc3VyZV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplbmNsb3N1cmUsIGludCBjb21wb25lbnQpOwotc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVuY2xvc3VyZV9maW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgZW5jbG9zdXJlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKiwgc3RydWN0IGRldmljZSAqKTsKK3N0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplbmNsb3N1cmVfZmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICpzdGFydCk7CiBpbnQgZW5jbG9zdXJlX2Zvcl9lYWNoX2RldmljZShpbnQgKCpmbikoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKiwgdm9pZCAqKSwKIAkJCSAgICAgIHZvaWQgKmRhdGEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IDliNjYwYmQuLjE1ZTRlYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0zNjIsMTIgKzM2MiwyNSBAQAogCV9fdTMyCQkJCXJ1bGVfbG9jc1swXTsKIH07CiAKKyNkZWZpbmUgRVRIVE9PTF9GTEFTSF9NQVhfRklMRU5BTUUJMTI4CitlbnVtIGV0aHRvb2xfZmxhc2hfb3BfdHlwZSB7CisJRVRIVE9PTF9GTEFTSF9BTExfUkVHSU9OUwk9IDAsCit9OworCisvKiBmb3IgcGFzc2luZyBmaXJtd2FyZSBmbGFzaGluZyByZWxhdGVkIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBldGh0b29sX2ZsYXNoIHsKKwlfX3UzMgljbWQ7CisJX191MzIJcmVnaW9uOworCWNoYXIJZGF0YVtFVEhUT09MX0ZMQVNIX01BWF9GSUxFTkFNRV07Cit9OworCiAjaWZkZWYgX19LRVJORUxfXwogCiBzdHJ1Y3QgbmV0X2RldmljZTsKIAogLyogU29tZSBnZW5lcmljIG1ldGhvZHMgZHJpdmVycyBtYXkgdXNlIGluIHRoZWlyIGV0aHRvb2xfb3BzICovCiB1MzIgZXRodG9vbF9vcF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3UzMiBldGh0b29sX29wX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdTMyIGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CiBpbnQgZXRodG9vbF9vcF9zZXRfdHhfaHdfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CkBAIC00ODgsNiArNTAxLDcgQEAKIAlpbnQJKCpnZXRfc3RhdHNfY291bnQpKHN0cnVjdCBuZXRfZGV2aWNlICopOy8qIHVzZSBnZXRfc3NldF9jb3VudCAqLwogCWludAkoKmdldF9yeG5mYykoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKiwgdm9pZCAqKTsKIAlpbnQJKCpzZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOworCWludCAgICAgKCpmbGFzaF9kZXZpY2UpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2ZsYXNoICopOwogfTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKQEAgLTU0NCw2ICs1NTgsNyBAQAogI2RlZmluZQlFVEhUT09MX0dSWENMU1JMQUxMCTB4MDAwMDAwMzAgLyogR2V0IGFsbCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCiAjZGVmaW5lCUVUSFRPT0xfU1JYQ0xTUkxERUwJMHgwMDAwMDAzMSAvKiBEZWxldGUgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLwogI2RlZmluZQlFVEhUT09MX1NSWENMU1JMSU5TCTB4MDAwMDAwMzIgLyogSW5zZXJ0IFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9GTEFTSERFVgkweDAwMDAwMDMzIC8qIEZsYXNoIGZpcm13YXJlIHRvIGRldmljZSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggYTc5ZjQ4My4uYjIxY2Y2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTYxLDggKzE2MSw4IEBACiAgKiBUaGVzZSBhcmVuJ3QgcmVhbGx5IHJlYWRzIG9yIHdyaXRlcywgdGhleSBwYXNzIGRvd24gaW5mb3JtYXRpb24gYWJvdXQKICAqIHBhcnRzIG9mIGRldmljZSB0aGF0IGFyZSBub3cgdW51c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KICAqLwotI2RlZmluZSBESVNDQVJEX05PQkFSUklFUiAoMSA8PCBCSU9fUldfRElTQ0FSRCkKLSNkZWZpbmUgRElTQ0FSRF9CQVJSSUVSICgoMSA8PCBCSU9fUldfRElTQ0FSRCkgfCAoMSA8PCBCSU9fUldfQkFSUklFUikpCisjZGVmaW5lIERJU0NBUkRfTk9CQVJSSUVSIChXUklURSB8ICgxIDw8IEJJT19SV19ESVNDQVJEKSkKKyNkZWZpbmUgRElTQ0FSRF9CQVJSSUVSIChESVNDQVJEX05PQkFSUklFUiB8ICgxIDw8IEJJT19SV19CQVJSSUVSKSkKIAogI2RlZmluZSBTRUxfSU4JCTEKICNkZWZpbmUgU0VMX09VVAkJMgpAQCAtMTQ1NSwxMSArMTQ1NSw2IEBACiAjZGVmaW5lIERUX1NPQ0sJCTEyCiAjZGVmaW5lIERUX1dIVAkJMTQKIAotI2RlZmluZSBPU1lOQ19NRVRBREFUQQkoMTw8MCkKLSNkZWZpbmUgT1NZTkNfREFUQQkoMTw8MSkKLSNkZWZpbmUgT1NZTkNfSU5PREUJKDE8PDIpCi1pbnQgZ2VuZXJpY19vc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgaW50KTsKLQogLyoKICAqIFRoaXMgaXMgdGhlICJmaWxsZGlyIiBmdW5jdGlvbiB0eXBlLCB1c2VkIGJ5IHJlYWRkaXIoKSB0byBsZXQKICAqIHRoZSBrZXJuZWwgc3BlY2lmeSB3aGF0IGtpbmQgb2YgZGlyZW50IGxheW91dCBpdCB3YW50cyB0byBoYXZlLgpAQCAtMjA4Niw2ICsyMDgxLDggQEAKIGV4dGVybiBpbnQgZmlsZW1hcF9mZGF0YXdyaXRlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwogZXh0ZXJuIGludCBmaWxlbWFwX2ZsdXNoKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwogZXh0ZXJuIGludCBmaWxlbWFwX2ZkYXRhd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKK2V4dGVybiBpbnQgZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90IGxzdGFydCwKKwkJCQkgICBsb2ZmX3QgbGVuZCk7CiBleHRlcm4gaW50IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogZXh0ZXJuIGludCBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCSAgICAgICAgbG9mZl90IGxzdGFydCwgbG9mZl90IGxlbmQpOwpAQCAtMjA5Niw3ICsyMDkzLDEwIEBACiBleHRlcm4gaW50IGZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQlsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQpOwogCitleHRlcm4gaW50IHZmc19mc3luY19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLCBpbnQgZGF0YXN5bmMpOwogZXh0ZXJuIGludCB2ZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKTsKK2V4dGVybiBpbnQgZ2VuZXJpY193cml0ZV9zeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpOwogZXh0ZXJuIHZvaWQgc3luY19zdXBlcnModm9pZCk7CiBleHRlcm4gdm9pZCBlbWVyZ2VuY3lfc3luYyh2b2lkKTsKIGV4dGVybiB2b2lkIGVtZXJnZW5jeV9yZW1vdW50KHZvaWQpOwpAQCAtMjIwMiw5ICsyMjAyLDkgQEAKIGV4dGVybiBpbnQgZmlsZV9yZWFkX2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICogZGVzYywgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwogaW50IGdlbmVyaWNfd3JpdGVfY2hlY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgKnBvcywgc2l6ZV90ICpjb3VudCwgaW50IGlzYmxrKTsKIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCk7CitleHRlcm4gc3NpemVfdCBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCB1bnNpZ25lZCBsb25nLAorCQlsb2ZmX3QgKik7CiBleHRlcm4gc3NpemVfdCBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90KTsKLWV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKLQkJdW5zaWduZWQgbG9uZywgbG9mZl90KTsKIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLAogCQl1bnNpZ25lZCBsb25nICosIGxvZmZfdCwgbG9mZl90ICosIHNpemVfdCwgc2l6ZV90KTsKIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosCkBAIC0yMjE0LDYgKzIyMTQsMTAgQEAKIGV4dGVybiBpbnQgZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJdW5zaWduZWQgbG9uZyAqbnJfc2Vncywgc2l6ZV90ICpjb3VudCwgaW50IGFjY2Vzc19mbGFncyk7CiAKKy8qIGZzL2Jsb2NrX2Rldi5jICovCitleHRlcm4gc3NpemVfdCBibGtkZXZfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKKwogLyogZnMvc3BsaWNlLmMgKi8KIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwKIAkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggNDVmYzMyMC4uNDQyNjNjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtOTgsNyArOTgsNyBAQAogCWludCBtYWtlX2l0X2ZhaWw7CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIHN0YW1wOwotCWludCBpbl9mbGlnaHQ7CisJaW50IGluX2ZsaWdodFsyXTsKICNpZmRlZglDT05GSUdfU01QCiAJc3RydWN0IGRpc2tfc3RhdHMgKmRrc3RhdHM7CiAjZWxzZQpAQCAtMzIyLDE4ICszMjIsMjMgQEAKICNkZWZpbmUgcGFydF9zdGF0X3N1YihjcHUsIGdlbmRpc2twLCBmaWVsZCwgc3VibmQpCQkJXAogCXBhcnRfc3RhdF9hZGQoY3B1LCBnZW5kaXNrcCwgZmllbGQsIC1zdWJuZCkKIAotc3RhdGljIGlubGluZSB2b2lkIHBhcnRfaW5jX2luX2ZsaWdodChzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0KQorc3RhdGljIGlubGluZSB2b2lkIHBhcnRfaW5jX2luX2ZsaWdodChzdHJ1Y3QgaGRfc3RydWN0ICpwYXJ0LCBpbnQgcncpCiB7Ci0JcGFydC0+aW5fZmxpZ2h0Kys7CisJcGFydC0+aW5fZmxpZ2h0W3J3XSsrOwogCWlmIChwYXJ0LT5wYXJ0bm8pCi0JCXBhcnRfdG9fZGlzayhwYXJ0KS0+cGFydDAuaW5fZmxpZ2h0Kys7CisJCXBhcnRfdG9fZGlzayhwYXJ0KS0+cGFydDAuaW5fZmxpZ2h0W3J3XSsrOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFydF9kZWNfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgcGFydF9kZWNfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQsIGludCBydykKIHsKLQlwYXJ0LT5pbl9mbGlnaHQtLTsKKwlwYXJ0LT5pbl9mbGlnaHRbcnddLS07CiAJaWYgKHBhcnQtPnBhcnRubykKLQkJcGFydF90b19kaXNrKHBhcnQpLT5wYXJ0MC5pbl9mbGlnaHQtLTsKKwkJcGFydF90b19kaXNrKHBhcnQpLT5wYXJ0MC5pbl9mbGlnaHRbcnddLS07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnRfaW5fZmxpZ2h0KHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpCit7CisJcmV0dXJuIHBhcnQtPmluX2ZsaWdodFswXSArIHBhcnQtPmluX2ZsaWdodFsxXTsKIH0KIAogLyogYmxvY2svYmxrLWNvcmUuYyAqLwpAQCAtNTQ2LDYgKzU1MSw4IEBACiAJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIGV4dGVybiBzc2l6ZV90IHBhcnRfc3RhdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworZXh0ZXJuIHNzaXplX3QgcGFydF9pbmZsaWdodF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogZXh0ZXJuIHNzaXplX3QgcGFydF9mYWlsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmggYi9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmgKaW5kZXggYzU2YjRiYy4uYjgwYzg4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnMyX29uZGlzay5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZzMl9vbmRpc2suaApAQCAtMzMzLDYgKzMzMywyOCBAQAogCiAvKgogICogRXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlciBmb3JtYXQKKyAqCisgKiBUaGlzIHdvcmtzIGluIGEgc2ltaWxhciB3YXkgdG8gZGlyZW50cy4gVGhlcmUgaXMgYSBmaXhlZCBzaXplIGhlYWRlcgorICogZm9sbG93ZWQgYnkgYSB2YXJpYWJsZSBsZW5ndGggc2VjdGlvbiBtYWRlIHVwIG9mIHRoZSBuYW1lIGFuZCB0aGUKKyAqIGFzc29jaWF0ZWQgZGF0YS4gSW4gdGhlIGNhc2Ugb2YgYSAic3R1ZmZlZCIgZW50cnksIHRoZSB2YWx1ZSBpcworICogaW5saW5lIGRpcmVjdGx5IGFmdGVyIHRoZSBuYW1lLCB0aGUgZWFfbnVtX3B0cnMgZW50cnkgd2lsbCBiZQorICogemVybyBpbiB0aGF0IGNhc2UuIEZvciBub24tInN0dWZmZWQiIGVudHJpZXMsIHRoZXJlIHdpbGwgYmUKKyAqIGEgc2V0IG9mIHBvaW50ZXJzIChhbGlnbmVkIHRvIDggYnl0ZSBib3VuZGFyeSkgdG8gdGhlIGJsb2NrKHMpCisgKiBjb250YWluaW5nIHRoZSB2YWx1ZS4KKyAqCisgKiBUaGUgYmxvY2tzIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBhbmQgdGhlIGJsb2NrcyBjb250YWluaW5nIHRoZQorICogZXh0ZW5kZWQgYXR0cmlidXRlIGhlYWRlcnMgdGhlbXNlbHZlcyBhbGwgc3RhcnQgd2l0aCB0aGUgY29tbW9uCisgKiBtZXRhZGF0YSBoZWFkZXIuIEVhY2ggaW5vZGUsIGlmIGl0IGhhcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCB3aWxsCisgKiBoYXZlIGVpdGhlciBhIHNpbmdsZSBibG9jayBjb250YWluaW5nIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUgaGVhZGVycworICogb3IgYSBzaW5nbGUgaW5kaXJlY3QgYmxvY2sgcG9pbnRpbmcgdG8gYmxvY2tzIGNvbnRhaW5pbmcgdGhlCisgKiBleHRlbmRlZCBhdHRyaWJ1cmUgaGVhZGVycy4KKyAqCisgKiBUaGUgbWF4aW1pbSBzaXplIG9mIHRoZSBkYXRhIHBhcnQgb2YgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGlzIDY0aworICogc28gdGhlIG51bWJlciBvZiBibG9ja3MgcmVxdWlyZWQgZGVwZW5kcyB1cG9uIGJsb2NrIHNpemUuIFNpbmNlIHRoZQorICogYmxvY2sgc2l6ZSBhbHNvIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBwb2ludGVycyBpbiBhbiBpbmRpcmVjdAorICogYmxvY2ssIGl0cyBhIGZhaXJseSBjb21wbGljYXRlZCBjYWxjdWxhdGlvbiB0byB3b3JrIG91dCB0aGUgbWF4aW11bQorICogbnVtYmVyIG9mIGJsb2NrcyB0aGF0IGFuIGlub2RlIG1heSBoYXZlIHJlbGF0aW5nIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuCisgKgogICovCiAKICNkZWZpbmUgR0ZTMl9FQV9NQVhfTkFNRV9MRU4JMjU1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGMuaCBiL2luY2x1ZGUvbGludXgvaGRsYy5oCmluZGV4IDZhNmU3MDEuLmVlMjc1YzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsYy5oCkBAIC0zOCw3ICszOCw3IEBACiAJaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKIAlfX2JlMTYgKCp0eXBlX3RyYW5zKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQgKCpuZXRpZl9yeCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJbmV0ZGV2X3R4X3QgKCp4bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAJc3RydWN0IGhkbGNfcHJvdG8gKm5leHQ7IC8qIG5leHQgcHJvdG9jb2wgaW4gdGhlIGxpc3QgKi8KIH07CkBAIC01MSw3ICs1MSw3IEBACiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGVuY29kaW5nLCB1bnNpZ25lZCBzaG9ydCBwYXJpdHkpOwogCiAJLyogaGFyZHdhcmUgZHJpdmVyIG11c3QgaGFuZGxlIHRoaXMgaW5zdGVhZCBvZiBkZXYtPmhhcmRfc3RhcnRfeG1pdCAqLwotCWludCAoKnhtaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCW5ldGRldl90eF90ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIAkvKiBUaGluZ3MgYmVsb3cgYXJlIGZvciBIRExDIGxheWVyIGludGVybmFsIHVzZSBvbmx5ICovCiAJY29uc3Qgc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvOwpAQCAtNjAsNyArNjAsNyBAQAogCXNwaW5sb2NrX3Qgc3RhdGVfbG9jazsKIAl2b2lkICpzdGF0ZTsKIAl2b2lkICpwcml2OwotfWhkbGNfZGV2aWNlOworfSBoZGxjX2RldmljZTsKIAogCiAKQEAgLTEwNiw3ICsxMDYsNyBAQAogLyogTWF5IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyICovCiBpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKIC8qIE11c3QgYmUgcG9pbnRlZCB0byBieSBodyBkcml2ZXIncyBkZXYtPm5ldGRldl9vcHMtPm5kb19zdGFydF94bWl0ICovCi1pbnQgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBpbnQgYXR0YWNoX2hkbGNfcHJvdG9jb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvLAogCQkJIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLWRlYnVnLmggYi9pbmNsdWRlL2xpbnV4L2hpZC1kZWJ1Zy5oCmluZGV4IDUwZDU2OGUuLjUzNzQ0ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLWRlYnVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQtZGVidWcuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19ISURfREVCVUdfSAogCiAvKgotICogIENvcHlyaWdodCAoYykgMjAwNwlKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwNy0yMDA5CUppcmkgS29zaW5hCiAgKi8KIAogLyoKQEAgLTIyLDI0ICsyMiw0NCBAQAogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0hJRF9ERUJVRworI2RlZmluZSBISURfREVCVUdfQlVGU0laRSA1MTIKIAotdm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKLXZvaWQgaGlkX2R1bXBfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOwotdm9pZCBoaWRfZHVtcF9maWVsZChzdHJ1Y3QgaGlkX2ZpZWxkICosIGludCk7Ci12b2lkIGhpZF9yZXNvbHZfdXNhZ2UodW5zaWduZWQpOwotdm9pZCBoaWRfcmVzb2x2X2V2ZW50KF9fdTgsIF9fdTE2KTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwordm9pZCBoaWRfZHVtcF9pbnB1dChzdHJ1Y3QgaGlkX2RldmljZSAqLCBzdHJ1Y3QgaGlkX3VzYWdlICosIF9fczMyKTsKK3ZvaWQgaGlkX2R1bXBfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICosIHN0cnVjdCBzZXFfZmlsZSAqKTsKK3ZvaWQgaGlkX2R1bXBfZmllbGQoc3RydWN0IGhpZF9maWVsZCAqLCBpbnQsIHN0cnVjdCBzZXFfZmlsZSAqKTsKK2NoYXIgKmhpZF9yZXNvbHZfdXNhZ2UodW5zaWduZWQsIHN0cnVjdCBzZXFfZmlsZSAqKTsKK3ZvaWQgaGlkX2RlYnVnX3JlZ2lzdGVyKHN0cnVjdCBoaWRfZGV2aWNlICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIGhpZF9kZWJ1Z191bnJlZ2lzdGVyKHN0cnVjdCBoaWRfZGV2aWNlICopOwordm9pZCBoaWRfZGVidWdfaW5pdCh2b2lkKTsKK3ZvaWQgaGlkX2RlYnVnX2V4aXQodm9pZCk7Cit2b2lkIGhpZF9kZWJ1Z19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqLCBjaGFyICopOworCisKK3N0cnVjdCBoaWRfZGVidWdfbGlzdCB7CisJY2hhciAqaGlkX2RlYnVnX2J1ZjsKKwlpbnQgaGVhZDsKKwlpbnQgdGFpbDsKKwlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgbXV0ZXggcmVhZF9tdXRleDsKK307CiAKICNlbHNlCiAKLSNkZWZpbmUgaGlkX2R1bXBfaW5wdXQoYSxiKSAgICAgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBoaWRfZHVtcF9kZXZpY2UoYykgICAgICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGhpZF9kdW1wX2ZpZWxkKGEsYikgICAgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgaGlkX3Jlc29sdl91c2FnZShhKSAgICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgaGlkX3Jlc29sdl9ldmVudChhLGIpICAgICAgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2R1bXBfaW5wdXQoYSxiLGMpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGhpZF9kdW1wX2RldmljZShhLGIpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGhpZF9kdW1wX2ZpZWxkKGEsYixjKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBoaWRfcmVzb2x2X3VzYWdlKGEsYikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2RlYnVnX3JlZ2lzdGVyKGEsIGIpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2RlYnVnX3VucmVnaXN0ZXIoYSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgaGlkX2RlYnVnX2luaXQoKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBoaWRfZGVidWdfZXhpdCgpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGhpZF9kZWJ1Z19ldmVudChhLGIpCQlkbyB7IH0gd2hpbGUgKDApCiAKLSNlbmRpZiAvKiBDT05GSUdfSElEX0RFQlVHICovCi0KKyNlbmRpZgogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggNTM0ODlmZC4uYTBlYmRhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC01MDAsNiArNTAwLDE0IEBACiAKIAkvKiBoYW5kbGVyIGZvciByYXcgb3V0cHV0IGRhdGEsIHVzZWQgYnkgaGlkcmF3ICovCiAJaW50ICgqaGlkX291dHB1dF9yYXdfcmVwb3J0KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgX191OCAqLCBzaXplX3QpOworCisJLyogZGVidWdnaW5nIHN1cHBvcnQgdmlhIGRlYnVnZnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBkZWJ1ZzsKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z19kaXI7CisJc3RydWN0IGRlbnRyeSAqZGVidWdfcmRlc2M7CisJc3RydWN0IGRlbnRyeSAqZGVidWdfZXZlbnRzOworCXN0cnVjdCBsaXN0X2hlYWQgZGVidWdfbGlzdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZWJ1Z193YWl0OwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkICpoaWRfZ2V0X2RydmRhdGEoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCkBAIC02NTcsOSArNjY1LDcgQEAKIAogLyogSElEIGNvcmUgQVBJICovCiAKLSNpZmRlZiBDT05GSUdfSElEX0RFQlVHCiBleHRlcm4gaW50IGhpZF9kZWJ1ZzsKLSNlbmRpZgogCiBleHRlcm4gaW50IGhpZF9hZGRfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgaGlkX2Rlc3Ryb3lfZGV2aWNlKHN0cnVjdCBoaWRfZGV2aWNlICopOwpAQCAtODE1LDIxICs4MjEsOSBAQAogI2RlZmluZSBoaWRfcGlkZmZfaW5pdCBOVUxMCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19ISURfREVCVUcKICNkZWZpbmUgZGJnX2hpZChmb3JtYXQsIGFyZy4uLikgaWYgKGhpZF9kZWJ1ZykgXAogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgLFwKIAkJCQlfX0ZJTEVfXyAsICMjIGFyZykKLSNkZWZpbmUgZGJnX2hpZF9saW5lKGZvcm1hdCwgYXJnLi4uKSBpZiAoaGlkX2RlYnVnKSBcCi0JCQkJcHJpbnRrKGZvcm1hdCwgIyMgYXJnKQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDEsIDIpKSkKLWRiZ19oaWQoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZGVmaW5lIGRiZ19oaWRfbGluZSBkYmdfaGlkCi0jZW5kaWYgLyogSElEX0RFQlVHICovCi0KICNkZWZpbmUgZXJyX2hpZChmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmb3JtYXQgIlxuIiAsIFwKIAkJX19GSUxFX18gLCAjIyBhcmcpCiAjZW5kaWYgLyogSElEX0ZGICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKaW5kZXggMGRjODBlZi4uM2ZkMjFkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaApAQCAtMjUsNiArMjUsOSBAQAogI2lmbmRlZiBfX1RXTDQwMzBfSF8KICNkZWZpbmUgX19UV0w0MDMwX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKwogLyoKICAqIFVzaW5nIHRoZSB0d2w0MDMwIGNvcmUgd2UgYWRkcmVzcyByZWdpc3RlcnMgdXNpbmcgYSBwYWlyCiAgKgl7IG1vZHVsZSBpZCwgcmVsYXRpdmUgcmVnaXN0ZXIgb2Zmc2V0IH0KQEAgLTMwMiwxMyArMzA1LDE3IEBACiAJaW50CQlpcnFfbGluZTsKIH07CiAKKy8qIEJvYXJkcyBoYXZlIHVuaXFlIG1hcHBpbmdzIG9mIHtjb2wsIHJvd30gLS0+IGtleWNvZGUuCisgKiBDb2x1bW4gYW5kIHJvdyBhcmUgNCBiaXRzLCBidXQgcmFuZ2Ugb25seSBmcm9tIDAuLjcuCisgKiBhIFBFUlNJU1RFTlRfS0VZIGlzICJhbHdheXMgb24iIGFuZCBuZXZlciByZXBvcnRlZC4KKyAqLworI2RlZmluZSBQRVJTSVNURU5UX0tFWShjLCByKQlLRVkoKGMpLCAociksIEtFWV9SRVNFUlZFRCkKKwogc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgewotCWludCByb3dzOwotCWludCBjb2xzOwotCWludCAqa2V5bWFwOwotCWludCBpcnE7Ci0JdW5zaWduZWQgaW50IGtleW1hcHNpemU7Ci0JdW5zaWduZWQgaW50IHJlcDoxOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOworCXVuc2lnbmVkIHJvd3M7CisJdW5zaWduZWQgY29sczsKKwlib29sIHJlcDsKIH07CiAKIGVudW0gdHdsNDAzMF91c2JfbW9kZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaAppbmRleCBiNmE4NTE4Li5jMGQ4MzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTE3MSw4ICsxNzEsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCiAKIGV4dGVybiB2b2lkCQkJCWljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgdTggdHlwZSwgdTggY29kZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IGE5MTczZDUuLjUyZTE1ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtMTE1LDcgKzExNSw3IEBACiAjZGVmaW5lIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4JCTMyCiAKICNkZWZpbmUgSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTgkzMgotI2RlZmluZSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOCTE5CisjZGVmaW5lIElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4JMjQKIAogI2RlZmluZSBJRUVFODAyMTFfUU9TX0NUTF9MRU4JCTIKICNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0sJMHgwMDBGCkBAIC04MDIsNiArODAyLDMxIEBACiAjZGVmaW5lIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0ZBQ1RPUgkJMHgwMwogI2RlZmluZSBJRUVFODAyMTFfSFRfQU1QRFVfUEFSTV9ERU5TSVRZCQkweDFDCiAKKy8qCisgKiBNYXhpbXVtIGxlbmd0aCBvZiBBTVBEVSB0aGF0IHRoZSBTVEEgY2FuIHJlY2VpdmUuCisgKiBMZW5ndGggPSAyIF4gKDEzICsgbWF4X2FtcGR1X2xlbmd0aF9leHApIC0gMSAob2N0ZXRzKQorICovCitlbnVtIGllZWU4MDIxMV9tYXhfYW1wZHVfbGVuZ3RoX2V4cCB7CisJSUVFRTgwMjExX0hUX01BWF9BTVBEVV84SyA9IDAsCisJSUVFRTgwMjExX0hUX01BWF9BTVBEVV8xNksgPSAxLAorCUlFRUU4MDIxMV9IVF9NQVhfQU1QRFVfMzJLID0gMiwKKwlJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SyA9IDMKK307CisKKyNkZWZpbmUgSUVFRTgwMjExX0hUX01BWF9BTVBEVV9GQUNUT1IgMTMKKworLyogTWluaW11bSBNUERVIHN0YXJ0IHNwYWNpbmcgKi8KK2VudW0gaWVlZTgwMjExX21pbl9tcGR1X3NwYWNpbmcgeworCUlFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfTk9ORSA9IDAsCS8qIE5vIHJlc3RyaWN0aW9uICovCisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV8wXzI1ID0gMSwJLyogMS80IHVzZWMgKi8KKwlJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzBfNSA9IDIsCS8qIDEvMiB1c2VjICovCisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV8xID0gMywJLyogMSB1c2VjICovCisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV8yID0gNCwJLyogMiB1c2VjICovCisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV80ID0gNSwJLyogNCB1c2VjICovCisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV84ID0gNiwJLyogOCB1c2VjICovCisJSUVFRTgwMjExX0hUX01QRFVfREVOU0lUWV8xNiA9IDcJLyogMTYgdXNlYyAqLworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gLSBIVCBpbmZvcm1hdGlvbgogICoKQEAgLTExOTYsNiArMTIyMSwxMCBAQAogI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQJMHgwMDBGQUMwNQogI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQwkweDAwMEZBQzA2CiAKKy8qIEFLTSBzdWl0ZSBzZWxlY3RvcnMgKi8KKyNkZWZpbmUgV0xBTl9BS01fU1VJVEVfODAyMVgJCTB4MDAwRkFDMDEKKyNkZWZpbmUgV0xBTl9BS01fU1VJVEVfUFNLCQkweDAwMEZBQzAyCisKICNkZWZpbmUgV0xBTl9NQVhfS0VZX0xFTgkJMzIKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvbGludXgvaWZfYWRkci5oCmluZGV4IGE2MGM4MjEuLmZkOTc0MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfYWRkci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYWRkci5oCkBAIC00MSw2ICs0MSw3IEBACiAKICNkZWZpbmUJSUZBX0ZfTk9EQUQJCTB4MDIKICNkZWZpbmUgSUZBX0ZfT1BUSU1JU1RJQwkweDA0CisjZGVmaW5lIElGQV9GX0RBREZBSUxFRAkJMHgwOAogI2RlZmluZQlJRkFfRl9IT01FQUREUkVTUwkweDEwCiAjZGVmaW5lIElGQV9GX0RFUFJFQ0FURUQJMHgyMAogI2RlZmluZSBJRkFfRl9URU5UQVRJVkUJCTB4NDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfYXJwLmggYi9pbmNsdWRlL2xpbnV4L2lmX2FycC5oCmluZGV4IGI1NTQzMDAuLjI4MmViMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9hcnAuaApAQCAtODcsNyArODcsNiBAQAogI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNIDgwMgkvKiBJRUVFIDgwMi4xMSArIFByaXNtMiBoZWFkZXIgICovCiAjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVAgODAzCS8qIElFRUUgODAyLjExICsgcmFkaW90YXAgaGVhZGVyICovCiAjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTU0CSAgODA0Ci0jZGVmaW5lIEFSUEhSRF9JRUVFODAyMTU0X1BIWQkgIDgwNQogCiAjZGVmaW5lIEFSUEhSRF9QSE9ORVQJODIwCQkvKiBQaG9OZXQgbWVkaWEgdHlwZQkJKi8KICNkZWZpbmUgQVJQSFJEX1BIT05FVF9QSVBFIDgyMQkJLyogUGhvTmV0IHBpcGUgaGVhZGVyCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IDcwZmRiYTIuLjU4MGI2MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTEzOSwxMCArMTM5LDEwIEBACiAvKgogICoJRGlzcGxheSBhIDYgYnl0ZSBkZXZpY2UgYWRkcmVzcyAoTUFDKSBpbiBhIHJlYWRhYmxlIGZvcm1hdC4KICAqLwotZXh0ZXJuIGNoYXIgKnByaW50X21hYyhjaGFyICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpOworZXh0ZXJuIGNoYXIgKnByaW50X21hYyhjaGFyICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpIF9fZGVwcmVjYXRlZDsKICNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCiAjZGVmaW5lIE1BQ19CVUZfU0laRQkxOAotI2RlZmluZSBERUNMQVJFX01BQ19CVUYodmFyKSBjaGFyIHZhcltNQUNfQlVGX1NJWkVdIF9fbWF5YmVfdW51c2VkCisjZGVmaW5lIERFQ0xBUkVfTUFDX0JVRih2YXIpIGNoYXIgdmFyW01BQ19CVUZfU0laRV0KIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oIGIvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKaW5kZXggNjczZjIyMC4uODBiM2ExMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKQEAgLTY5LDExICs2OSw2IEBACiAKICNkZWZpbmUgRExDSV9WQUxJRF9GTEFHUwkweDAwMEIKIAotLyogRlJBRCBkcml2ZXIgdXNlcyB0aGVzZSB0byBpbmRpY2F0ZSB3aGF0IGl0IGRpZCB3aXRoIHBhY2tldCAqLwotI2RlZmluZSBETENJX1JFVF9PSwkJMHgwMAotI2RlZmluZSBETENJX1JFVF9FUlIJCTB4MDEKLSNkZWZpbmUgRExDSV9SRVRfRFJPUAkJMHgwMgotCiAvKiBkZWZpbmVzIGZvciB0aGUgYWN0dWFsIEZyYW1lIFJlbGF5IGhhcmR3YXJlICovCiAjZGVmaW5lIEZSQURfR0VUX0NPTkYJKFNJT0NERVZQUklWQVRFKQogI2RlZmluZSBGUkFEX1NFVF9DT05GCShTSU9DREVWUFJJVkFURSArIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaAppbmRleCA5MTViYTU3Li4zZjVmZDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKQEAgLTYyLDYgKzYyLDcgQEAKICNkZWZpbmUgVFVOX0ZfVFNPNAkweDAyCS8qIEkgY2FuIGhhbmRsZSBUU08gZm9yIElQdjQgcGFja2V0cyAqLwogI2RlZmluZSBUVU5fRl9UU082CTB4MDQJLyogSSBjYW4gaGFuZGxlIFRTTyBmb3IgSVB2NiBwYWNrZXRzICovCiAjZGVmaW5lIFRVTl9GX1RTT19FQ04JMHgwOAkvKiBJIGNhbiBoYW5kbGUgVFNPIHdpdGggRUNOIGJpdHMuICovCisjZGVmaW5lIFRVTl9GX1VGTwkweDEwCS8qIEkgY2FuIGhhbmRsZSBVRk8gcGFja2V0cyAqLwogCiAvKiBQcm90b2NvbCBpbmZvIHByZXBlbmRlZCB0byB0aGUgcGFja2V0cyAod2hlbiBJRkZfTk9fUEkgaXMgbm90IHNldCkgKi8KICNkZWZpbmUgVFVOX1BLVF9TVFJJUAkweDAwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdC5oIGIvaW5jbHVkZS9saW51eC9pbml0LmgKaW5kZXggMTNiNjMzZS4uNDAwYWRiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbml0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0LmgKQEAgLTEwMyw4ICsxMDMsOCBAQAogI2RlZmluZSBfX0lOSVQJCS5zZWN0aW9uCSIuaW5pdC50ZXh0IiwiYXgiCiAjZGVmaW5lIF9fRklOSVQJCS5wcmV2aW91cwogCi0jZGVmaW5lIF9fSU5JVERBVEEJLnNlY3Rpb24JIi5pbml0LmRhdGEiLCJhdyIKLSNkZWZpbmUgX19JTklUUk9EQVRBCS5zZWN0aW9uCSIuaW5pdC5yb2RhdGEiLCJhIgorI2RlZmluZSBfX0lOSVREQVRBCS5zZWN0aW9uCSIuaW5pdC5kYXRhIiwiYXciLCVwcm9nYml0cworI2RlZmluZSBfX0lOSVRST0RBVEEJLnNlY3Rpb24JIi5pbml0LnJvZGF0YSIsImEiLCVwcm9nYml0cwogI2RlZmluZSBfX0ZJTklUREFUQQkucHJldmlvdXMKIAogI2RlZmluZSBfX0RFVklOSVQgICAgICAgIC5zZWN0aW9uCSIuZGV2aW5pdC50ZXh0IiwgImF4IgpAQCAtMzA1LDkgKzMwNSwxNyBAQAogI2lmZGVmIENPTkZJR19NT0RVTEVTCiAjZGVmaW5lIF9faW5pdF9vcl9tb2R1bGUKICNkZWZpbmUgX19pbml0ZGF0YV9vcl9tb2R1bGUKKyNkZWZpbmUgX19pbml0Y29uc3Rfb3JfbW9kdWxlCisjZGVmaW5lIF9fSU5JVF9PUl9NT0RVTEUJLnRleHQKKyNkZWZpbmUgX19JTklUREFUQV9PUl9NT0RVTEUJLmRhdGEKKyNkZWZpbmUgX19JTklUUk9EQVRBX09SX01PRFVMRQkuc2VjdGlvbiAiLnJvZGF0YSIsImEiLCVwcm9nYml0cwogI2Vsc2UKICNkZWZpbmUgX19pbml0X29yX21vZHVsZSBfX2luaXQKICNkZWZpbmUgX19pbml0ZGF0YV9vcl9tb2R1bGUgX19pbml0ZGF0YQorI2RlZmluZSBfX2luaXRjb25zdF9vcl9tb2R1bGUgX19pbml0Y29uc3QKKyNkZWZpbmUgX19JTklUX09SX01PRFVMRSBfX0lOSVQKKyNkZWZpbmUgX19JTklUREFUQV9PUl9NT0RVTEUgX19JTklUREFUQQorI2RlZmluZSBfX0lOSVRST0RBVEFfT1JfTU9EVUxFIF9fSU5JVFJPREFUQQogI2VuZGlmIC8qQ09ORklHX01PRFVMRVMqLwogCiAvKiBGdW5jdGlvbnMgbWFya2VkIGFzIF9fZGV2ZXhpdCBtYXkgYmUgZGlzY2FyZGVkIGF0IGtlcm5lbCBsaW5rIHRpbWUsIGRlcGVuZGluZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9lZXRpX3RzLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L2VldGlfdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODc1YjMxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9lZXRpX3RzLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIExJTlVYX0lOUFVUX0VFVElfVFNfSAorI2RlZmluZSBMSU5VWF9JTlBVVF9FRVRJX1RTX0gKKworc3RydWN0IGVldGlfdHNfcGxhdGZvcm1fZGF0YSB7CisJdW5zaWduZWQgaW50IGlycV9hY3RpdmVfaGlnaDsKK307CisKKyNlbmRpZiAvKiBMSU5VWF9JTlBVVF9FRVRJX1RTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaAppbmRleCAxNWQ1OTAzLi5iM2NkNDJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKQEAgLTYzLDQgKzYzLDM2IEBACiAJYm9vbAkJd2FrZXVwOwogfTsKIAorLyoqCisgKiBtYXRyaXhfa2V5cGFkX2J1aWxkX2tleW1hcCAtIGNvbnZlcnQgcGxhdGZvcm0ga2V5bWFwIGludG8gbWF0cml4IGtleW1hcAorICogQGtleW1hcF9kYXRhOiBrZXltYXAgc3VwcGxpZWQgYnkgdGhlIHBsYXRmb3JtIGNvZGUKKyAqIEByb3dfc2hpZnQ6IG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0IHJvdyB2YWx1ZSBieSB0byBhZHZhbmNlIHRvIHRoZSBuZXh0CisgKiBsaW5lIGluIHRoZSBrZXltYXAKKyAqIEBrZXltYXA6IGV4cGFuZGVkIHZlcnNpb24gb2Yga2V5bWFwIHRoYXQgaXMgc3VpdGFibGUgZm9yIHVzZSBieQorICogbWF0cml4IGtleWJvYWQgZHJpdmVyCisgKiBAa2V5Yml0OiBwb2ludGVyIHRvIGJpdG1hcCBvZiBrZXlzIHN1cHBvcnRlZCBieSBpbnB1dCBkZXZpY2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnZlcnRzIHBsYXRmb3JtIGtleW1hcCAoZW5jb2RlZCB3aXRoIEtFWSgpIG1hY3JvKSBpbnRvCisgKiBhbiBhcnJheSBvZiBrZXljb2RlcyB0aGF0IGlzIHN1aXRhYmxlIGZvciB1c2luZyBpbiBhIHN0YW5kYXJkIG1hdHJpeAorICoga2V5Ym9hcmQgZHJpdmVyIHRoYXQgdXNlcyByb3cgYW5kIGNvbCBhcyBpbmRpY2VzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK21hdHJpeF9rZXlwYWRfYnVpbGRfa2V5bWFwKGNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhLAorCQkJICAgdW5zaWduZWQgaW50IHJvd19zaGlmdCwKKwkJCSAgIHVuc2lnbmVkIHNob3J0ICprZXltYXAsIHVuc2lnbmVkIGxvbmcgKmtleWJpdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBrZXltYXBfZGF0YS0+a2V5bWFwX3NpemU7IGkrKykgeworCQl1bnNpZ25lZCBpbnQga2V5ID0ga2V5bWFwX2RhdGEtPmtleW1hcFtpXTsKKwkJdW5zaWduZWQgaW50IHJvdyA9IEtFWV9ST1coa2V5KTsKKwkJdW5zaWduZWQgaW50IGNvbCA9IEtFWV9DT0woa2V5KTsKKwkJdW5zaWduZWQgc2hvcnQgY29kZSA9IEtFWV9WQUwoa2V5KTsKKworCQlrZXltYXBbTUFUUklYX1NDQU5fQ09ERShyb3csIGNvbCwgcm93X3NoaWZ0KV0gPSBjb2RlOworCQlfX3NldF9iaXQoY29kZSwga2V5Yml0KTsKKwl9CisJX19jbGVhcl9iaXQoS0VZX1JFU0VSVkVELCBrZXliaXQpOworfQorCiAjZW5kaWYgLyogX01BVFJJWF9LRVlQQURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggMWFjNTdlNS4uOGU5ZTE1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0zNDgsNiArMzQ4LDcgQEAKIAlORVRfVFhfU09GVElSUSwKIAlORVRfUlhfU09GVElSUSwKIAlCTE9DS19TT0ZUSVJRLAorCUJMT0NLX0lPUE9MTF9TT0ZUSVJRLAogCVRBU0tMRVRfU09GVElSUSwKIAlTQ0hFRF9TT0ZUSVJRLAogCUhSVElNRVJfU09GVElSUSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi9oZGxjLmggYi9pbmNsdWRlL2xpbnV4L2lzZG4vaGRsYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2VjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2lzZG4vaGRsYy5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBoZGxjLmggIC0tICBHZW5lcmFsIHB1cnBvc2UgSVNETiBIRExDIGRlY29kZXIuCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgYSBIRExDIGRlY29kZXIvZW5jb2RlciBpbiBzb2Z0d2FyZS4KKyAqIE5lY2Nlc3NhcnkgYmVjYXVzZSBzb21lIElTRE4gZGV2aWNlcyBkb24ndCBoYXZlIEhETEMKKyAqIGNvbnRyb2xsZXJzLgorICoKKyAqIENvcHlyaWdodCAoQykKKyAqCTIwMDkJS2Fyc3RlbiBLZWlsCQk8a2VpbEBiMS1zeXN0ZW1zLmRlPgorICoJMjAwMglXb2xmZ2FuZyBNw7xlcwkJPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+CisgKgkyMDAxCUZyb2RlIElzYWtzZW4JCTxmaXNha3NlbkBiZXdhbi5jb20+CisgKgkyMDAxCUthaSBHZXJtYXNjaGV3c2tpCTxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0lTRE5IRExDX0hfXworI2RlZmluZSBfX0lTRE5IRExDX0hfXworCitzdHJ1Y3QgaXNkbmhkbGNfdmFycyB7CisJaW50IGJpdF9zaGlmdDsKKwlpbnQgaGRsY19iaXRzMTsKKwlpbnQgZGF0YV9iaXRzOworCWludCBmZmJpdF9zaGlmdDsJLyogZW5jb2Rpbmcgb25seSAqLworCWludCBzdGF0ZTsKKwlpbnQgZHN0cG9zOworCisJdTE2IGNyYzsKKworCXU4IGNiaW47CisJdTggc2hpZnRfcmVnOworCXU4IGZmdmFsdWU7CisKKwkvKiBzZXQgaWYgdHJhbnNmZXJyaW5nIGRhdGEgKi8KKwl1MzIgZGF0YV9yZWNlaXZlZDoxOworCS8qIHNldCBpZiBEIGNoYW5uZWwgKHNlbmQgaWRsZSBpbnN0ZWFkIG9mIGZsYWdzKSAqLworCXUzMiBkY2hhbm5lbDoxOworCS8qIHNldCBpZiA1NksgYWRhcHRhdGlvbiAqLworCXUzMiBkb19hZGFwdDU2OjE7CisJLyogc2V0IGlmIGluIGNsb3NpbmcgcGhhc2UgKG5lZWQgdG8gc2VuZCBDUkMgKyBmbGFnKSAqLworCXUzMiBkb19jbG9zaW5nOjE7CisJLyogc2V0IGlmIGRhdGEgaXMgYml0cmV2ZXJzZSAqLworCXUzMiBkb19iaXRyZXZlcnNlOjE7Cit9OworCisvKiBGZWF0dXJlIEZsYWdzICovCisjZGVmaW5lIEhETENfNTZLQklUCTB4MDEKKyNkZWZpbmUgSERMQ19EQ0hBTk5FTAkweDAyCisjZGVmaW5lIEhETENfQklUUkVWRVJTRQkweDA0CisKKy8qCisgIFRoZSByZXR1cm4gdmFsdWUgZnJvbSBpc2RuaGRsY19kZWNvZGUgaXMKKyAgdGhlIGZyYW1lIGxlbmd0aCwgMCBpZiBubyBjb21wbGV0ZSBmcmFtZSB3YXMgZGVjb2RlZCwKKyAgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIKKyovCisjZGVmaW5lIEhETENfRlJBTUlOR19FUlJPUiAgICAgMQorI2RlZmluZSBIRExDX0NSQ19FUlJPUiAgICAgICAgIDIKKyNkZWZpbmUgSERMQ19MRU5HVEhfRVJST1IgICAgICAzCisKK2V4dGVybiB2b2lkCWlzZG5oZGxjX3Jjdl9pbml0KHN0cnVjdCBpc2RuaGRsY192YXJzICpoZGxjLCB1MzIgZmVhdHVyZXMpOworCitleHRlcm4gaW50CWlzZG5oZGxjX2RlY29kZShzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgY29uc3QgdTggKnNyYywKKwkJCWludCBzbGVuLCBpbnQgKmNvdW50LCB1OCAqZHN0LCBpbnQgZHNpemUpOworCitleHRlcm4gdm9pZAlpc2RuaGRsY19vdXRfaW5pdChzdHJ1Y3QgaXNkbmhkbGNfdmFycyAqaGRsYywgdTMyIGZlYXR1cmVzKTsKKworZXh0ZXJuIGludAlpc2RuaGRsY19lbmNvZGUoc3RydWN0IGlzZG5oZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHU4ICpzcmMsCisJCQl1MTYgc2xlbiwgaW50ICpjb3VudCwgdTggKmRzdCwgaW50IGRzaXplKTsKKworI2VuZGlmIC8qIF9fSVNETkhETENfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCAzZGI1ZDhkLi5mOGY4OTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2RlZmluZSBLVk1fQVBJX1ZFUlNJT04gMTIKIAotLyogZm9yIEtWTV9UUkFDRV9FTkFCTEUgKi8KKy8qIGZvciBLVk1fVFJBQ0VfRU5BQkxFLCBkZXByZWNhdGVkICovCiBzdHJ1Y3Qga3ZtX3VzZXJfdHJhY2Vfc2V0dXAgewogCV9fdTMyIGJ1Zl9zaXplOyAvKiBzdWJfYnVmZmVyIHNpemUgb2YgZWFjaCBwZXItY3B1ICovCiAJX191MzIgYnVmX25yOyAvKiB0aGUgbnVtYmVyIG9mIHN1Yl9idWZmZXJzIG9mIGVhY2ggcGVyLWNwdSAqLwpAQCAtNzAsNiArNzAsMTQgQEAKIAl9IGNoaXA7CiB9OwogCisvKiBmb3IgS1ZNX0NSRUFURV9QSVQyICovCitzdHJ1Y3Qga3ZtX3BpdF9jb25maWcgeworCV9fdTMyIGZsYWdzOworCV9fdTMyIHBhZFsxNV07Cit9OworCisjZGVmaW5lIEtWTV9QSVRfU1BFQUtFUl9EVU1NWSAgICAgMQorCiAjZGVmaW5lIEtWTV9FWElUX1VOS05PV04gICAgICAgICAgMAogI2RlZmluZSBLVk1fRVhJVF9FWENFUFRJT04gICAgICAgIDEKICNkZWZpbmUgS1ZNX0VYSVRfSU8gICAgICAgICAgICAgICAyCkBAIC04Nyw2ICs5NSwxMCBAQAogI2RlZmluZSBLVk1fRVhJVF9TMzkwX1JFU0VUICAgICAgIDE0CiAjZGVmaW5lIEtWTV9FWElUX0RDUiAgICAgICAgICAgICAgMTUKICNkZWZpbmUgS1ZNX0VYSVRfTk1JICAgICAgICAgICAgICAxNgorI2RlZmluZSBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUiAgIDE3CisKKy8qIEZvciBLVk1fRVhJVF9JTlRFUk5BTF9FUlJPUiAqLworI2RlZmluZSBLVk1fSU5URVJOQUxfRVJST1JfRU1VTEFUSU9OIDEKIAogLyogZm9yIEtWTV9SVU4sIHJldHVybmVkIGJ5IG1tYXAodmNwdV9mZCwgb2Zmc2V0PTApICovCiBzdHJ1Y3Qga3ZtX3J1biB7CkBAIC0xNzMsNiArMTg1LDkgQEAKIAkJCV9fdTMyIGRhdGE7CiAJCQlfX3U4ICBpc193cml0ZTsKIAkJfSBkY3I7CisJCXN0cnVjdCB7CisJCQlfX3UzMiBzdWJlcnJvcjsKKwkJfSBpbnRlcm5hbDsKIAkJLyogRml4IHRoZSBzaXplIG9mIHRoZSB1bmlvbi4gKi8KIAkJY2hhciBwYWRkaW5nWzI1Nl07CiAJfTsKQEAgLTI5Miw2ICszMDcsMjggQEAKIAlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggYXJjaDsKIH07CiAKK2VudW0geworCWt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9kYXRhbWF0Y2gsCisJa3ZtX2lvZXZlbnRmZF9mbGFnX25yX3BpbywKKwlrdm1faW9ldmVudGZkX2ZsYWdfbnJfZGVhc3NpZ24sCisJa3ZtX2lvZXZlbnRmZF9mbGFnX25yX21heCwKK307CisKKyNkZWZpbmUgS1ZNX0lPRVZFTlRGRF9GTEFHX0RBVEFNQVRDSCAoMSA8PCBrdm1faW9ldmVudGZkX2ZsYWdfbnJfZGF0YW1hdGNoKQorI2RlZmluZSBLVk1fSU9FVkVOVEZEX0ZMQUdfUElPICAgICAgICgxIDw8IGt2bV9pb2V2ZW50ZmRfZmxhZ19ucl9waW8pCisjZGVmaW5lIEtWTV9JT0VWRU5URkRfRkxBR19ERUFTU0lHTiAgKDEgPDwga3ZtX2lvZXZlbnRmZF9mbGFnX25yX2RlYXNzaWduKQorCisjZGVmaW5lIEtWTV9JT0VWRU5URkRfVkFMSURfRkxBR19NQVNLICAoKDEgPDwga3ZtX2lvZXZlbnRmZF9mbGFnX25yX21heCkgLSAxKQorCitzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCB7CisJX191NjQgZGF0YW1hdGNoOworCV9fdTY0IGFkZHI7ICAgICAgICAvKiBsZWdhbCBwaW8vbW1pbyBhZGRyZXNzICovCisJX191MzIgbGVuOyAgICAgICAgIC8qIDEsIDIsIDQsIG9yIDggYnl0ZXMgICAgKi8KKwlfX3MzMiBmZDsKKwlfX3UzMiBmbGFnczsKKwlfX3U4ICBwYWRbMzZdOworfTsKKwogI2RlZmluZSBLVk1fVFJDX1NISUZUICAgICAgICAgICAxNgogLyoKICAqIGt2bSB0cmFjZSBjYXRlZ29yaWVzCkBAIC0zMTAsMzUgKzM0Nyw2IEBACiAjZGVmaW5lIEtWTV9UUkNfQ1lDTEVfU0laRSAgICAgIDgKICNkZWZpbmUgS1ZNX1RSQ19FWFRSQV9NQVggICAgICAgNwogCi0vKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgc2luZ2xlIHRyYWNlIGJ1ZmZlciByZWNvcmQuICovCi1zdHJ1Y3Qga3ZtX3RyYWNlX3JlYyB7Ci0JLyogdmFyaWFibGUgcmVjX3ZhbAotCSAqIGlzIHNwbGl0IGludG86Ci0JICogYml0cyAwIC0gMjcgIC0+IGV2ZW50IGlkCi0JICogYml0cyAyOCAtMzAgIC0+IG51bWJlciBvZiBleHRyYSBkYXRhIGFyZ3Mgb2Ygc2l6ZSB1MzIKLQkgKiBiaXRzIDMxICAgICAgLT4gYmluYXJ5IGluZGljYXRvciBmb3IgaWYgdHNjIGlzIGluIHJlY29yZAotCSAqLwotCV9fdTMyIHJlY192YWw7Ci0JX191MzIgcGlkOwotCV9fdTMyIHZjcHVfaWQ7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX191NjQgdGltZXN0YW1wOwotCQkJX191MzIgZXh0cmFfdTMyW0tWTV9UUkNfRVhUUkFfTUFYXTsKLQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0aW1lc3RhbXA7Ci0JCXN0cnVjdCB7Ci0JCQlfX3UzMiBleHRyYV91MzJbS1ZNX1RSQ19FWFRSQV9NQVhdOwotCQl9IG5vdGltZXN0YW1wOwotCX0gdTsKLX07Ci0KLSNkZWZpbmUgVFJBQ0VfUkVDX0VWRU5UX0lEKHZhbCkgXAotCQkoMHgwZmZmZmZmZiAmICh2YWwpKQotI2RlZmluZSBUUkFDRV9SRUNfTlVNX0RBVEFfQVJHUyh2YWwpIFwKLQkJKDB4NzAwMDAwMDAgJiAoKHZhbCkgPDwgMjgpKQotI2RlZmluZSBUUkFDRV9SRUNfVENTKHZhbCkgXAotCQkoMHg4MDAwMDAwMCAmICgodmFsKSA8PCAzMSkpCi0KICNkZWZpbmUgS1ZNSU8gMHhBRQogCiAvKgpAQCAtNDE1LDYgKzQyMywxOSBAQAogI2RlZmluZSBLVk1fQ0FQX0FTU0lHTl9ERVZfSVJRIDI5CiAvKiBBbm90aGVyIGJ1ZyBpbiBLVk1fU0VUX1VTRVJfTUVNT1JZX1JFR0lPTiBmaXhlZDogKi8KICNkZWZpbmUgS1ZNX0NBUF9KT0lOX01FTU9SWV9SRUdJT05TX1dPUktTIDMwCisjaWZkZWYgX19LVk1fSEFWRV9NQ0UKKyNkZWZpbmUgS1ZNX0NBUF9NQ0UgMzEKKyNlbmRpZgorI2RlZmluZSBLVk1fQ0FQX0lSUUZEIDMyCisjaWZkZWYgX19LVk1fSEFWRV9QSVQKKyNkZWZpbmUgS1ZNX0NBUF9QSVQyIDMzCisjZW5kaWYKKyNkZWZpbmUgS1ZNX0NBUF9TRVRfQk9PVF9DUFVfSUQgMzQKKyNpZmRlZiBfX0tWTV9IQVZFX1BJVF9TVEFURTIKKyNkZWZpbmUgS1ZNX0NBUF9QSVRfU1RBVEUyIDM1CisjZW5kaWYKKyNkZWZpbmUgS1ZNX0NBUF9JT0VWRU5URkQgMzYKKyNkZWZpbmUgS1ZNX0NBUF9TRVRfSURFTlRJVFlfTUFQX0FERFIgMzcKIAogI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKIApAQCAtNDU0LDE1ICs0NzUsMzIgQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBLVk1fQ0FQX01DRQorLyogeDg2IE1DRSAqLworc3RydWN0IGt2bV94ODZfbWNlIHsKKwlfX3U2NCBzdGF0dXM7CisJX191NjQgYWRkcjsKKwlfX3U2NCBtaXNjOworCV9fdTY0IG1jZ19zdGF0dXM7CisJX191OCBiYW5rOworCV9fdTggcGFkMVs3XTsKKwlfX3U2NCBwYWQyWzNdOworfTsKKyNlbmRpZgorCisjZGVmaW5lIEtWTV9JUlFGRF9GTEFHX0RFQVNTSUdOICgxIDw8IDApCisKK3N0cnVjdCBrdm1faXJxZmQgeworCV9fdTMyIGZkOworCV9fdTMyIGdzaTsKKwlfX3UzMiBmbGFnczsKKwlfX3U4ICBwYWRbMjBdOworfTsKKwogLyoKICAqIGlvY3RscyBmb3IgVk0gZmRzCiAgKi8KICNkZWZpbmUgS1ZNX1NFVF9NRU1PUllfUkVHSU9OICAgICBfSU9XKEtWTUlPLCAweDQwLCBzdHJ1Y3Qga3ZtX21lbW9yeV9yZWdpb24pCi0jZGVmaW5lIEtWTV9TRVRfTlJfTU1VX1BBR0VTICAgICAgX0lPKEtWTUlPLCAweDQ0KQotI2RlZmluZSBLVk1fR0VUX05SX01NVV9QQUdFUyAgICAgIF9JTyhLVk1JTywgMHg0NSkKLSNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gX0lPVyhLVk1JTywgMHg0NixcCi0JCQkJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24pCi0jZGVmaW5lIEtWTV9TRVRfVFNTX0FERFIgICAgICAgICAgX0lPKEtWTUlPLCAweDQ3KQogLyoKICAqIEtWTV9DUkVBVEVfVkNQVSByZWNlaXZlcyBhcyBhIHBhcmFtZXRlciB0aGUgdmNwdSBzbG90LCBhbmQgcmV0dXJucwogICogYSB2Y3B1IGZkLgpAQCAtNDcwLDYgKzUwOCwxMiBAQAogI2RlZmluZSBLVk1fQ1JFQVRFX1ZDUFUgICAgICAgICAgIF9JTyhLVk1JTywgIDB4NDEpCiAjZGVmaW5lIEtWTV9HRVRfRElSVFlfTE9HICAgICAgICAgX0lPVyhLVk1JTywgMHg0Miwgc3RydWN0IGt2bV9kaXJ0eV9sb2cpCiAjZGVmaW5lIEtWTV9TRVRfTUVNT1JZX0FMSUFTICAgICAgX0lPVyhLVk1JTywgMHg0Mywgc3RydWN0IGt2bV9tZW1vcnlfYWxpYXMpCisjZGVmaW5lIEtWTV9TRVRfTlJfTU1VX1BBR0VTICAgICAgX0lPKEtWTUlPLCAweDQ0KQorI2RlZmluZSBLVk1fR0VUX05SX01NVV9QQUdFUyAgICAgIF9JTyhLVk1JTywgMHg0NSkKKyNkZWZpbmUgS1ZNX1NFVF9VU0VSX01FTU9SWV9SRUdJT04gX0lPVyhLVk1JTywgMHg0NixcCisJCQkJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24pCisjZGVmaW5lIEtWTV9TRVRfVFNTX0FERFIgICAgICAgICAgX0lPKEtWTUlPLCAweDQ3KQorI2RlZmluZSBLVk1fU0VUX0lERU5USVRZX01BUF9BRERSIF9JT1coS1ZNSU8sIDB4NDgsIF9fdTY0KQogLyogRGV2aWNlIG1vZGVsIElPQyAqLwogI2RlZmluZSBLVk1fQ1JFQVRFX0lSUUNISVAJICBfSU8oS1ZNSU8sICAweDYwKQogI2RlZmluZSBLVk1fSVJRX0xJTkUJCSAgX0lPVyhLVk1JTywgMHg2MSwgc3RydWN0IGt2bV9pcnFfbGV2ZWwpCkBAIC00OTgsNiArNTQyLDEwIEBACiAjZGVmaW5lIEtWTV9BU1NJR05fU0VUX01TSVhfRU5UUlkgXAogCQkJX0lPVyhLVk1JTywgMHg3NCwgc3RydWN0IGt2bV9hc3NpZ25lZF9tc2l4X2VudHJ5KQogI2RlZmluZSBLVk1fREVBU1NJR05fREVWX0lSUSAgICAgICBfSU9XKEtWTUlPLCAweDc1LCBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2lycSkKKyNkZWZpbmUgS1ZNX0lSUUZEICAgICAgICAgICAgICAgICAgX0lPVyhLVk1JTywgMHg3Niwgc3RydWN0IGt2bV9pcnFmZCkKKyNkZWZpbmUgS1ZNX0NSRUFURV9QSVQyCQkgICBfSU9XKEtWTUlPLCAweDc3LCBzdHJ1Y3Qga3ZtX3BpdF9jb25maWcpCisjZGVmaW5lIEtWTV9TRVRfQk9PVF9DUFVfSUQgICAgICAgIF9JTyhLVk1JTywgMHg3OCkKKyNkZWZpbmUgS1ZNX0lPRVZFTlRGRCAgICAgICAgICAgICBfSU9XKEtWTUlPLCAweDc5LCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCkKIAogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKQEAgLTU0MSw2ICs1ODksMTAgQEAKICNkZWZpbmUgS1ZNX05NSSAgICAgICAgICAgICAgICAgICBfSU8oS1ZNSU8sICAweDlhKQogLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9TRVRfR1VFU1RfREVCVUcgKi8KICNkZWZpbmUgS1ZNX1NFVF9HVUVTVF9ERUJVRyAgICAgICBfSU9XKEtWTUlPLCAgMHg5Yiwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZykKKy8qIE1DRSBmb3IgeDg2ICovCisjZGVmaW5lIEtWTV9YODZfU0VUVVBfTUNFICAgICAgICAgX0lPVyhLVk1JTywgIDB4OWMsIF9fdTY0KQorI2RlZmluZSBLVk1fWDg2X0dFVF9NQ0VfQ0FQX1NVUFBPUlRFRCBfSU9SKEtWTUlPLCAgMHg5ZCwgX191NjQpCisjZGVmaW5lIEtWTV9YODZfU0VUX01DRSAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4OWUsIHN0cnVjdCBrdm1feDg2X21jZSkKIAogLyoKICAqIERlcHJlY2F0ZWQgaW50ZXJmYWNlcwpAQCAtNTYzLDYgKzYxNSw5IEBACiAjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfR0VUX1NUQUNLICAgX0lPUihLVk1JTywgIDB4OWEsIHZvaWQgKikKICNkZWZpbmUgS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0sgICBfSU9XKEtWTUlPLCAgMHg5Yiwgdm9pZCAqKQogCisjZGVmaW5lIEtWTV9HRVRfUElUMiAgIF9JT1IoS1ZNSU8sICAgMHg5Ziwgc3RydWN0IGt2bV9waXRfc3RhdGUyKQorI2RlZmluZSBLVk1fU0VUX1BJVDIgICBfSU9XKEtWTUlPLCAgIDB4YTAsIHN0cnVjdCBrdm1fcGl0X3N0YXRlMikKKwogI2RlZmluZSBLVk1fVFJDX0lOSl9WSVJRICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDIpCiAjZGVmaW5lIEtWTV9UUkNfUkVERUxJVkVSX0VWVCAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMykKICNkZWZpbmUgS1ZNX1RSQ19QRU5EX0lOVFIgICAgICAgIChLVk1fVFJDX0hBTkRMRVIgKyAweDA0KQpAQCAtNjMzLDcgKzY4OCw3IEBACiAJX191MTYgcGFkZGluZzsKIH07CiAKLSNkZWZpbmUgS1ZNX01BWF9NU0lYX1BFUl9ERVYJCTUxMgorI2RlZmluZSBLVk1fTUFYX01TSVhfUEVSX0RFVgkJMjU2CiBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfZW50cnkgewogCV9fdTMyIGFzc2lnbmVkX2Rldl9pZDsKIAlfX3UzMiBnc2k7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKaW5kZXggMzA2MGJkYy4uNGFmNTYwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaApAQCAtNDIsNiArNDIsNyBAQAogCiAjZGVmaW5lIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRAkwCiAKK3N0cnVjdCBrdm07CiBzdHJ1Y3Qga3ZtX3ZjcHU7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmt2bV92Y3B1X2NhY2hlOwogCkBAIC01OSwxMCArNjAsMTggQEAKIAogdm9pZCBrdm1faW9fYnVzX2luaXQoc3RydWN0IGt2bV9pb19idXMgKmJ1cyk7CiB2b2lkIGt2bV9pb19idXNfZGVzdHJveShzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzKTsKLXN0cnVjdCBrdm1faW9fZGV2aWNlICprdm1faW9fYnVzX2ZpbmRfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCi0JCQkJCSAgZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKTsKLXZvaWQga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKLQkJCSAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7CitpbnQga3ZtX2lvX2J1c193cml0ZShzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLCBncGFfdCBhZGRyLCBpbnQgbGVuLAorCQkgICAgIGNvbnN0IHZvaWQgKnZhbCk7CitpbnQga3ZtX2lvX2J1c19yZWFkKHN0cnVjdCBrdm1faW9fYnVzICpidXMsIGdwYV90IGFkZHIsIGludCBsZW4sCisJCSAgICB2b2lkICp2YWwpOworaW50IF9fa3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KTsKK2ludCBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7Cit2b2lkIF9fa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLAorCQkJCSBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KTsKK3ZvaWQga3ZtX2lvX2J1c191bnJlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkgICAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7CiAKIHN0cnVjdCBrdm1fdmNwdSB7CiAJc3RydWN0IGt2bSAqa3ZtOwpAQCAtMTAzLDcgKzExMiw3IEBACiAJc3RydWN0IHsKIAkJdW5zaWduZWQgbG9uZyBybWFwX3BkZTsKIAkJaW50IHdyaXRlX2NvdW50OwotCX0gKmxwYWdlX2luZm87CisJfSAqbHBhZ2VfaW5mb1tLVk1fTlJfUEFHRV9TSVpFUyAtIDFdOwogCXVuc2lnbmVkIGxvbmcgdXNlcnNwYWNlX2FkZHI7CiAJaW50IHVzZXJfYWxsb2M7CiB9OwpAQCAtMTI0LDcgKzEzMyw2IEBACiB9OwogCiBzdHJ1Y3Qga3ZtIHsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdHMgdGhlIHZjcHVzIGFycmF5IGFuZCBBUElDIGFjY2Vzc2VzICovCiAJc3BpbmxvY2tfdCBtbXVfbG9jazsKIAlzcGlubG9ja190IHJlcXVlc3RzX2xvY2s7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBzbG90c19sb2NrOwpAQCAtMTMyLDEwICsxNDAsMjMgQEAKIAlpbnQgbm1lbXNsb3RzOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgbWVtc2xvdHNbS1ZNX01FTU9SWV9TTE9UUyArCiAJCQkJCUtWTV9QUklWQVRFX01FTV9TTE9UU107CisjaWZkZWYgQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRQorCXUzMiBic3BfdmNwdV9pZDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKmJzcF92Y3B1OworI2VuZGlmCiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1c1tLVk1fTUFYX1ZDUFVTXTsKKwlhdG9taWNfdCBvbmxpbmVfdmNwdXM7CiAJc3RydWN0IGxpc3RfaGVhZCB2bV9saXN0OworCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBrdm1faW9fYnVzIG1taW9fYnVzOwogCXN0cnVjdCBrdm1faW9fYnVzIHBpb19idXM7CisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0VWRU5URkQKKwlzdHJ1Y3QgeworCQlzcGlubG9ja190ICAgICAgICBsb2NrOworCQlzdHJ1Y3QgbGlzdF9oZWFkICBpdGVtczsKKwl9IGlycWZkczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlvZXZlbnRmZHM7CisjZW5kaWYKIAlzdHJ1Y3Qga3ZtX3ZtX3N0YXQgc3RhdDsKIAlzdHJ1Y3Qga3ZtX2FyY2ggYXJjaDsKIAlhdG9taWNfdCB1c2Vyc19jb3VudDsKQEAgLTE0NCw2ICsxNjUsNyBAQAogCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fcmluZyAqY29hbGVzY2VkX21taW9fcmluZzsKICNlbmRpZgogCisJc3RydWN0IG11dGV4IGlycV9sb2NrOwogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCiAJc3RydWN0IGxpc3RfaGVhZCBpcnFfcm91dGluZzsgLyogb2Yga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqLwogCXN0cnVjdCBobGlzdF9oZWFkIG1hc2tfbm90aWZpZXJfbGlzdDsKQEAgLTE2Nyw2ICsxODksMTcgQEAKICNkZWZpbmUga3ZtX3ByaW50Zihrdm0sIGZtdCAuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKICNkZWZpbmUgdmNwdV9wcmludGYodmNwdSwgZm10Li4uKSBrdm1fcHJpbnRmKHZjcHUtPmt2bSwgZm10KQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1fdmNwdSAqa3ZtX2dldF92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgaW50IGkpCit7CisJc21wX3JtYigpOworCXJldHVybiBrdm0tPnZjcHVzW2ldOworfQorCisjZGVmaW5lIGt2bV9mb3JfZWFjaF92Y3B1KGlkeCwgdmNwdXAsIGt2bSkgXAorCWZvciAoaWR4ID0gMCwgdmNwdXAgPSBrdm1fZ2V0X3ZjcHUoa3ZtLCBpZHgpOyBcCisJICAgICBpZHggPCBhdG9taWNfcmVhZCgma3ZtLT5vbmxpbmVfdmNwdXMpICYmIHZjcHVwOyBcCisJICAgICB2Y3B1cCA9IGt2bV9nZXRfdmNwdShrdm0sICsraWR4KSkKKwogaW50IGt2bV92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlkKTsKIHZvaWQga3ZtX3ZjcHVfdW5pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKQEAgLTIwMSw2ICsyMzQsNyBAQAogCQkJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKIAkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG9sZCwKIAkJCQlpbnQgdXNlcl9hbGxvYyk7Cit2b2lkIGt2bV9kaXNhYmxlX2xhcmdlcGFnZXModm9pZCk7CiB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvdyhzdHJ1Y3Qga3ZtICprdm0pOwogZ2ZuX3QgdW5hbGlhc19nZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwogc3RydWN0IHBhZ2UgKmdmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKQEAgLTI0Myw4ICsyNzcsNiBAQAogCQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci12b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpOwotdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiBpbnQga3ZtX2Rldl9pb2N0bF9jaGVja19leHRlbnNpb24obG9uZyBleHQpOwogCkBAIC0zMDAsNyArMzMyLDYgQEAKIHZvaWQga3ZtX2FyY2hfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKTsKIHZvaWQga3ZtX2FyY2hfY2hlY2tfcHJvY2Vzc29yX2NvbXBhdCh2b2lkICpydG4pOwogaW50IGt2bV9hcmNoX3ZjcHVfcnVubmFibGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLWludCBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiB2b2lkIGt2bV9mcmVlX3BoeXNtZW0oc3RydWN0IGt2bSAqa3ZtKTsKIApAQCAtMzA5LDggKzM0MCw2IEBACiB2b2lkIGt2bV9mcmVlX2FsbF9hc3NpZ25lZF9kZXZpY2VzKHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9hcmNoX3N5bmNfZXZlbnRzKHN0cnVjdCBrdm0gKmt2bSk7CiAKLWludCBrdm1fY3B1X2dldF9pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KTsKLWludCBrdm1fY3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2KTsKIGludCBrdm1fY3B1X2hhc19wZW5kaW5nX3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiB2b2lkIGt2bV92Y3B1X2tpY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIApAQCAtMzY2LDcgKzM5NSw4IEBACiB2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKTsKIHZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbik7Ci12b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKK3ZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCisJCQkJICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKIGludCBrdm1fcmVxdWVzdF9pcnFfc291cmNlX2lkKHN0cnVjdCBrdm0gKmt2bSk7CiB2b2lkIGt2bV9mcmVlX2lycV9zb3VyY2VfaWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCk7CiAKQEAgLTQ1OSwzNyArNDg5LDYgQEAKIGV4dGVybiBzdHJ1Y3Qga3ZtX3N0YXRzX2RlYnVnZnNfaXRlbSBkZWJ1Z2ZzX2VudHJpZXNbXTsKIGV4dGVybiBzdHJ1Y3QgZGVudHJ5ICprdm1fZGVidWdmc19kaXI7CiAKLSNkZWZpbmUgS1ZNVFJBQ0VfNUQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgZDUsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDUsIGQxLCBkMiwgZDMsIGQ0LCBkNSkKLSNkZWZpbmUgS1ZNVFJBQ0VfNEQoZXZ0LCB2Y3B1LCBkMSwgZDIsIGQzLCBkNCwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgNCwgZDEsIGQyLCBkMywgZDQsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzNEKGV2dCwgdmNwdSwgZDEsIGQyLCBkMywgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMywgZDEsIGQyLCBkMywgMCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfMkQoZXZ0LCB2Y3B1LCBkMSwgZDIsIG5hbWUpIFwKLQl0cmFjZV9tYXJrKGt2bV90cmFjZV8jI25hbWUsICIldSAlcCAldSAldSAldSAldSAldSAldSIsIEtWTV9UUkNfIyNldnQsIFwKLQkJCQkJCXZjcHUsIDIsIGQxLCBkMiwgMCwgMCwgMCkKLSNkZWZpbmUgS1ZNVFJBQ0VfMUQoZXZ0LCB2Y3B1LCBkMSwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMSwgZDEsIDAsIDAsIDAsIDApCi0jZGVmaW5lIEtWTVRSQUNFXzBEKGV2dCwgdmNwdSwgbmFtZSkgXAotCXRyYWNlX21hcmsoa3ZtX3RyYWNlXyMjbmFtZSwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgS1ZNX1RSQ18jI2V2dCwgXAotCQkJCQkJdmNwdSwgMCwgMCwgMCwgMCwgMCwgMCkKLQotI2lmZGVmIENPTkZJR19LVk1fVFJBQ0UKLWludCBrdm1fdHJhY2VfaW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7Ci12b2lkIGt2bV90cmFjZV9jbGVhbnVwKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUKLWludCBrdm1fdHJhY2VfaW9jdGwodW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLSNkZWZpbmUga3ZtX3RyYWNlX2NsZWFudXAoKSAoKHZvaWQpMCkKLSNlbmRpZgotCiAjaWZkZWYgS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIKIHN0YXRpYyBpbmxpbmUgaW50IG1tdV9ub3RpZmllcl9yZXRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgbW11X3NlcSkKIHsKQEAgLTUyNSw0ICs1MjQsMzMgQEAKIAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fRVZFTlRGRAorCit2b2lkIGt2bV9ldmVudGZkX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKK2ludCBrdm1faXJxZmQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgZmQsIGludCBnc2ksIGludCBmbGFncyk7Cit2b2lkIGt2bV9pcnFmZF9yZWxlYXNlKHN0cnVjdCBrdm0gKmt2bSk7CitpbnQga3ZtX2lvZXZlbnRmZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9ldmVudGZkICphcmdzKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9ldmVudGZkX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7fQorc3RhdGljIGlubGluZSBpbnQga3ZtX2lycWZkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGZkLCBpbnQgZ3NpLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1faXJxZmRfcmVsZWFzZShzdHJ1Y3Qga3ZtICprdm0pIHt9CitzdGF0aWMgaW5saW5lIGludCBrdm1faW9ldmVudGZkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2V2ZW50ZmQgKmFyZ3MpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9LVk1fRVZFTlRGRCAqLworCisjaWZkZWYgQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRQorc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2lzX2JzcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmt2bS0+YnNwX3ZjcHVfaWQgPT0gdmNwdS0+dmNwdV9pZDsKK30KKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV9wYXJhLmggYi9pbmNsdWRlL2xpbnV4L2t2bV9wYXJhLmgKaW5kZXggM2RkY2UwMy4uZDczMTA5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm1fcGFyYS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX3BhcmEuaApAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBLVk1fRU5PU1lTCQkxMDAwCiAjZGVmaW5lIEtWTV9FRkFVTFQJCUVGQVVMVAogI2RlZmluZSBLVk1fRTJCSUcJCUUyQklHCisjZGVmaW5lIEtWTV9FUEVSTQkJRVBFUk0KIAogI2RlZmluZSBLVk1fSENfVkFQSUNfUE9MTF9JUlEJCTEKICNkZWZpbmUgS1ZNX0hDX01NVV9PUAkJCTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlicHMyLmggYi9pbmNsdWRlL2xpbnV4L2xpYnBzMi5oCmluZGV4IGI5NDUzNGIuLmZjZjVmYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlicHMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJwczIuaApAQCAtNDQsNiArNDQsNyBAQAogdm9pZCBwczJfaW5pdChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHN0cnVjdCBzZXJpbyAqc2VyaW8pOwogaW50IHBzMl9zZW5kYnl0ZShzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgYnl0ZSwgaW50IHRpbWVvdXQpOwogdm9pZCBwczJfZHJhaW4oc3RydWN0IHBzMmRldiAqcHMyZGV2LCBpbnQgbWF4Ynl0ZXMsIGludCB0aW1lb3V0KTsKK2ludCBfX3BzMl9jb21tYW5kKHN0cnVjdCBwczJkZXYgKnBzMmRldiwgdW5zaWduZWQgY2hhciAqcGFyYW0sIGludCBjb21tYW5kKTsKIGludCBwczJfY29tbWFuZChzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIHVuc2lnbmVkIGNoYXIgKnBhcmFtLCBpbnQgY29tbWFuZCk7CiBpbnQgcHMyX2hhbmRsZV9hY2soc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyIGRhdGEpOwogaW50IHBzMl9oYW5kbGVfcmVzcG9uc2Uoc3RydWN0IHBzMmRldiAqcHMyZGV2LCB1bnNpZ25lZCBjaGFyIGRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tSVNETmh3LmggYi9pbmNsdWRlL2xpbnV4L21JU0ROaHcuaAppbmRleCA3Zjk4MzFkLi40YWY4NDE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21JU0ROaHcuaAorKysgYi9pbmNsdWRlL2xpbnV4L21JU0ROaHcuaApAQCAtMTY4LDYgKzE2OCw3IEBACiBleHRlcm4gaW50CW1JU0ROX2luaXRkY2hhbm5lbChzdHJ1Y3QgZGNoYW5uZWwgKiwgaW50LCB2b2lkICopOwogZXh0ZXJuIGludAltSVNETl9pbml0YmNoYW5uZWwoc3RydWN0IGJjaGFubmVsICosIGludCk7CiBleHRlcm4gaW50CW1JU0ROX2ZyZWVkY2hhbm5lbChzdHJ1Y3QgZGNoYW5uZWwgKik7CitleHRlcm4gdm9pZAltSVNETl9jbGVhcl9iY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKik7CiBleHRlcm4gaW50CW1JU0ROX2ZyZWViY2hhbm5lbChzdHJ1Y3QgYmNoYW5uZWwgKik7CiBleHRlcm4gdm9pZAlxdWV1ZV9jaF9mcmFtZShzdHJ1Y3QgbUlTRE5jaGFubmVsICosIHVfaW50LAogCQkJaW50LCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbUlTRE5pZi5oIGIvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKaW5kZXggNDUxMDBiMy4uNTM2Y2ExMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKKysrIGIvaW5jbHVkZS9saW51eC9tSVNETmlmLmgKQEAgLTM3LDcgKzM3LDcgQEAKICAqLwogI2RlZmluZQlNSVNETl9NQUpPUl9WRVJTSU9OCTEKICNkZWZpbmUJTUlTRE5fTUlOT1JfVkVSU0lPTgkxCi0jZGVmaW5lIE1JU0ROX1JFTEVBU0UJCTIwCisjZGVmaW5lIE1JU0ROX1JFTEVBU0UJCTIxCiAKIC8qIHByaW1pdGl2ZXMgZm9yIGluZm9ybWF0aW9uIGV4Y2hhbmdlCiAgKiBnZW5lcmVsbCBmb3JtYXQKQEAgLTE1Myw2ICsxNTMsMTggQEAKICNkZWZpbmUgSEZDX1ZPTF9DSEFOR0VfUlgJMHgyNjAyCiAjZGVmaW5lIEhGQ19TUExfTE9PUF9PTgkJMHgyNjAzCiAjZGVmaW5lIEhGQ19TUExfTE9PUF9PRkYJMHgyNjA0CisvKiBmb3IgVDMwIEZBWCBhbmQgYW5hbG9nIG1vZGVtICovCisjZGVmaW5lIEhXX01PRF9GUk0JCTB4NDAwMAorI2RlZmluZSBIV19NT0RfRlJICQkweDQwMDEKKyNkZWZpbmUgSFdfTU9EX0ZUTQkJMHg0MDAyCisjZGVmaW5lIEhXX01PRF9GVEgJCTB4NDAwMworI2RlZmluZSBIV19NT0RfRlRTCQkweDQwMDQKKyNkZWZpbmUgSFdfTU9EX0NPTk5FQ1QJCTB4NDAxMAorI2RlZmluZSBIV19NT0RfT0sJCTB4NDAxMQorI2RlZmluZSBIV19NT0RfTk9DQVJSCQkweDQwMTIKKyNkZWZpbmUgSFdfTU9EX0ZDRVJST1IJCTB4NDAxMworI2RlZmluZSBIV19NT0RfUkVBRFkJCTB4NDAxNAorI2RlZmluZSBIV19NT0RfTEFTVERBVEEJCTB4NDAxNQogCiAvKiBEU1BfVE9ORV9QQVRUX09OIHBhcmFtZXRlciAqLwogI2RlZmluZSBUT05FX09GRgkJCTB4MDAwMApAQCAtMjI0LDYgKzIzNiw4IEBACiAjZGVmaW5lIElTRE5fUF9CX0wyRFRNRgkJMHgyNAogI2RlZmluZSBJU0ROX1BfQl9MMkRTUAkJMHgyNQogI2RlZmluZSBJU0ROX1BfQl9MMkRTUEhETEMJMHgyNgorI2RlZmluZSBJU0ROX1BfQl9UMzBfRkFYCTB4MjcKKyNkZWZpbmUgSVNETl9QX0JfTU9ERU1fQVNZTkMJMHgyOAogCiAjZGVmaW5lIE9QVElPTl9MMl9QTVgJCTEKICNkZWZpbmUgT1BUSU9OX0wyX1BUUAkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZGlvLmggYi9pbmNsdWRlL2xpbnV4L21kaW8uaAppbmRleCBjZmRmMWRmLi5jNzc5YjQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21kaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21kaW8uaApAQCAtMzA0LDcgKzMwNCw3IEBACiAgKi8KIHN0cnVjdCBtZGlvX2lmX2luZm8gewogCWludCBwcnRhZDsKLQl1MzIgX19iaXR3aXNlIG1tZHM7CisJdTMyIG1tZHM7CiAJdW5zaWduZWQgbW9kZV9zdXBwb3J0OwogCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9faWRzLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2lkcy5oCmluZGV4IDM5NzUxYzguLjJkYmZiNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9faWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19pZHMuaApAQCAtMjIsNiArMjIsMTIgQEAKIC8qCiAgKiBWZW5kb3JzIGFuZCBkZXZpY2VzLiAgU29ydCBrZXk6IHZlbmRvciBmaXJzdCwgZGV2aWNlIG5leHQuCiAgKi8KKyNkZWZpbmUgU0RJT19WRU5ET1JfSURfSU5URUwJCQkweDAwODkKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfSU5URUxfSVdNQzMyMDBXSU1BWAkweDE0MDIKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfSU5URUxfSVdNQzMyMDBXSUZJCTB4MTQwMworI2RlZmluZSBTRElPX0RFVklDRV9JRF9JTlRFTF9JV01DMzIwMFRPUAkweDE0MDQKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfSU5URUxfSVdNQzMyMDBHUFMJMHgxNDA1CisjZGVmaW5lIFNESU9fREVWSUNFX0lEX0lOVEVMX0lXTUMzMjAwQlQJCTB4MTQwNgogCiAjZGVmaW5lIFNESU9fVkVORE9SX0lEX01BUlZFTEwJCQkweDAyZGYKICNkZWZpbmUgU0RJT19ERVZJQ0VfSURfTUFSVkVMTF9MSUJFUlRBUwkJMHg5MTAzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmggYi9pbmNsdWRlL2xpbnV4L25ldF9kcm9wbW9uLmgKaW5kZXggM2NlYjBjYy4uMmE3Mzk0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHN0cnVjdCBuZXRfZG1fZHJvcF9wb2ludCB7CiAJX191OCBwY1s4XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGQ0YTRkOTguLjY1ZWUxOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtNzIsMTAgKzcyLDYgQEAKIC8qIEJhY2tsb2cgY29uZ2VzdGlvbiBsZXZlbHMgKi8KICNkZWZpbmUgTkVUX1JYX1NVQ0NFU1MJCTAgICAvKiBrZWVwICdlbSBjb21pbmcsIGJhYnkgKi8KICNkZWZpbmUgTkVUX1JYX0RST1AJCTEgIC8qIHBhY2tldCBkcm9wcGVkICovCi0jZGVmaW5lIE5FVF9SWF9DTl9MT1cJCTIgICAvKiBzdG9ybSBhbGVydCwganVzdCBpbiBjYXNlICovCi0jZGVmaW5lIE5FVF9SWF9DTl9NT0QJCTMgICAvKiBTdG9ybSBvbiBpdHMgd2F5ISAqLwotI2RlZmluZSBORVRfUlhfQ05fSElHSAkJNCAgIC8qIFRoZSBzdG9ybSBpcyBoZXJlICovCi0jZGVmaW5lIE5FVF9SWF9CQUQJCTUgIC8qIHBhY2tldCBkcm9wcGVkIGR1ZSB0byBrZXJuZWwgZXJyb3IgKi8KIAogLyogTkVUX1hNSVRfQ04gaXMgc3BlY2lhbC4gSXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhpcyBwYWNrZXQgaXMgbG9zdC4gSXQKICAqIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2Ugd2lsbCBzb29uIGJlIGRyb3BwaW5nIHBhY2tldHMsIG9yIGFscmVhZHkgZHJvcHMKQEAgLTgzLDE3ICs3OSwxOSBAQAogI2RlZmluZSBuZXRfeG1pdF9ldmFsKGUpCSgoZSkgPT0gTkVUX1hNSVRfQ04/IDAgOiAoZSkpCiAjZGVmaW5lIG5ldF94bWl0X2Vycm5vKGUpCSgoZSkgIT0gTkVUX1hNSVRfQ04gPyAtRU5PQlVGUyA6IDApCiAKKy8qIERyaXZlciB0cmFuc21pdCByZXR1cm4gY29kZXMgKi8KK2VudW0gbmV0ZGV2X3R4IHsKKwlORVRERVZfVFhfT0sgPSAwLAkvKiBkcml2ZXIgdG9vayBjYXJlIG9mIHBhY2tldCAqLworCU5FVERFVl9UWF9CVVNZLAkJLyogZHJpdmVyIHR4IHBhdGggd2FzIGJ1c3kqLworCU5FVERFVl9UWF9MT0NLRUQgPSAtMSwJLyogZHJpdmVyIHR4IGxvY2sgd2FzIGFscmVhZHkgdGFrZW4gKi8KK307Cit0eXBlZGVmIGVudW0gbmV0ZGV2X3R4IG5ldGRldl90eF90OworCiAjZW5kaWYKIAogI2RlZmluZSBNQVhfQUREUl9MRU4JMzIJCS8qIExhcmdlc3QgaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KIAotLyogRHJpdmVyIHRyYW5zbWl0IHJldHVybiBjb2RlcyAqLwotI2RlZmluZSBORVRERVZfVFhfT0sgMAkJLyogZHJpdmVyIHRvb2sgY2FyZSBvZiBwYWNrZXQgKi8KLSNkZWZpbmUgTkVUREVWX1RYX0JVU1kgMQkvKiBkcml2ZXIgdHggcGF0aCB3YXMgYnVzeSovCi0jZGVmaW5lIE5FVERFVl9UWF9MT0NLRUQgLTEJLyogZHJpdmVyIHR4IGxvY2sgd2FzIGFscmVhZHkgdGFrZW4gKi8KLQogI2lmZGVmICBfX0tFUk5FTF9fCi0KIC8qCiAgKglDb21wdXRlIHRoZSB3b3JzdCBjYXNlIGhlYWRlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBwcm90b2NvbHMKICAqCXVzZWQuCkBAIC01MTEsOSArNTA5LDExIEBACiAgKiAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBuZXR3b3JrIGRldmljZSB0cmFuc2lzdGlvbnMgdG8gdGhlIGRvd24KICAqICAgICBzdGF0ZS4KICAqCi0gKiBpbnQgKCpuZG9fc3RhcnRfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisgKiBuZXRkZXZfdHhfdCAoKm5kb19zdGFydF94bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAgKglDYWxsZWQgd2hlbiBhIHBhY2tldCBuZWVkcyB0byBiZSB0cmFuc21pdHRlZC4KLSAqCU11c3QgcmV0dXJuIE5FVERFVl9UWF9PSyAsIE5FVERFVl9UWF9CVVNZLCBvciBORVRERVZfVFhfTE9DS0VELAorICoJTXVzdCByZXR1cm4gTkVUREVWX1RYX09LICwgTkVUREVWX1RYX0JVU1kuCisgKiAgICAgICAgKGNhbiBhbHNvIHJldHVybiBORVRERVZfVFhfTE9DS0VEIGlmZiBORVRJRl9GX0xMVFgpCiAgKglSZXF1aXJlZCBjYW4gbm90IGJlIE5VTEwuCiAgKgogICogdTE2ICgqbmRvX3NlbGVjdF9xdWV1ZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC01ODQsNyArNTg0LDcgQEAKIAl2b2lkCQkJKCpuZG9fdW5pbml0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQJCQkoKm5kb19vcGVuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQJCQkoKm5kb19zdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQlpbnQJCQkoKm5kb19zdGFydF94bWl0KSAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwluZXRkZXZfdHhfdAkJKCpuZG9fc3RhcnRfeG1pdCkgKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAl1MTYJCQkoKm5kb19zZWxlY3RfcXVldWUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC02MjcsNiArNjI3LDggQEAKIAl2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCisJaW50CQkJKCpuZG9fZmNvZV9lbmFibGUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCWludAkJCSgqbmRvX2Zjb2VfZGlzYWJsZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJaW50CQkJKCpuZG9fZmNvZV9kZHBfc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICB1MTYgeGlkLAogCQkJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCkBAIC03MDUsNiArNzA3LDcgQEAKIC8qIHRoZSBHU09fTUFTSyByZXNlcnZlcyBiaXRzIDE2IHRocm91Z2ggMjMgKi8KICNkZWZpbmUgTkVUSUZfRl9GQ09FX0NSQwkoMSA8PCAyNCkgLyogRkNvRSBDUkMzMiAqLwogI2RlZmluZSBORVRJRl9GX1NDVFBfQ1NVTQkoMSA8PCAyNSkgLyogU0NUUCBjaGVja3N1bSBvZmZsb2FkICovCisjZGVmaW5lIE5FVElGX0ZfRkNPRV9NVFUJKDEgPDwgMjYpIC8qIFN1cHBvcnRzIG1heCBGQ29FIE1UVSwgMjE1OCBieXRlcyovCiAKIAkvKiBTZWdtZW50YXRpb24gb2ZmbG9hZCBmZWF0dXJlcyAqLwogI2RlZmluZSBORVRJRl9GX0dTT19TSElGVAkxNgpAQCAtODI5LDYgKzgzMiw5IEBACiAJLyogTnVtYmVyIG9mIFRYIHF1ZXVlcyBjdXJyZW50bHkgYWN0aXZlIGluIGRldmljZSAgKi8KIAl1bnNpZ25lZCBpbnQJCXJlYWxfbnVtX3R4X3F1ZXVlczsKIAorCS8qIHJvb3QgcWRpc2MgZnJvbSB1c2Vyc3BhY2UgcG9pbnQgb2YgdmlldyAqLworCXN0cnVjdCBRZGlzYwkJKnFkaXNjOworCiAJdW5zaWduZWQgbG9uZwkJdHhfcXVldWVfbGVuOwkvKiBNYXggZnJhbWVzIHBlciBxdWV1ZSBhbGxvd2VkICovCiAJc3BpbmxvY2tfdAkJdHhfZ2xvYmFsX2xvY2s7CiAvKgpAQCAtOTkyLDYgKzk5OCwxMiBAQAogICovCiAjZGVmaW5lIFNFVF9ORVRERVZfREVWKG5ldCwgcGRldikJKChuZXQpLT5kZXYucGFyZW50ID0gKHBkZXYpKQogCisvKiBTZXQgdGhlIHN5c2ZzIGRldmljZSB0eXBlIGZvciB0aGUgbmV0d29yayBsb2dpY2FsIGRldmljZSB0byBhbGxvdworICogZmluIGdyYWluZWQgaW5kZW50aWZpY2F0aW9uIG9mIGRpZmZlcmVudCBuZXR3b3JrIGRldmljZSB0eXBlcy4gRm9yCisgKiBleGFtcGxlIEV0aGVybmV0LCBXaXJlbHNzIExBTiwgQmx1ZXRvb3RoLCBXaU1BWCBldGMuCisgKi8KKyNkZWZpbmUgU0VUX05FVERFVl9ERVZUWVBFKG5ldCwgZGV2dHlwZSkJKChuZXQpLT5kZXYudHlwZSA9IChkZXZ0eXBlKSkKKwogLyoqCiAgKgluZXRpZl9uYXBpX2FkZCAtIGluaXRpYWxpemUgYSBuYXBpIGNvbnRleHQKICAqCUBkZXY6ICBuZXR3b3JrIGRldmljZQpAQCAtMTI2MCw3ICsxMjcyLDcgQEAKIHsKICNpZmRlZiBDT05GSUdfTkVUUE9MTF9UUkFQCiAJaWYgKG5ldHBvbGxfdHJhcCgpKSB7Ci0JCWNsZWFyX2JpdChfX1FVRVVFX1NUQVRFX1hPRkYsICZkZXZfcXVldWUtPnN0YXRlKTsKKwkJbmV0aWZfdHhfc3RhcnRfcXVldWUoZGV2X3F1ZXVlKTsKIAkJcmV0dXJuOwogCX0KICNlbmRpZgpAQCAtMTM2Niw3ICsxMzc4LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zdGFydF9zdWJxdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaW5kZXgpCiB7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKLQljbGVhcl9iaXQoX19RVUVVRV9TVEFURV9YT0ZGLCAmdHhxLT5zdGF0ZSk7CisKKwluZXRpZl90eF9zdGFydF9xdWV1ZSh0eHEpOwogfQogCiAvKioKQEAgLTEzODMsNyArMTM5Niw3IEBACiAJaWYgKG5ldHBvbGxfdHJhcCgpKQogCQlyZXR1cm47CiAjZW5kaWYKLQlzZXRfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJnR4cS0+c3RhdGUpOworCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIH0KIAogLyoqCkBAIC0xMzk3LDcgKzE0MTAsOCBAQAogCQkJCQkgdTE2IHF1ZXVlX2luZGV4KQogewogCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxdWV1ZV9pbmRleCk7Ci0JcmV0dXJuIHRlc3RfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJnR4cS0+c3RhdGUpOworCisJcmV0dXJuIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbmV0aWZfc3VicXVldWVfc3RvcHBlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTc0OSw4ICsxNzYzLDcgQEAKIAkJICogZm9yY2UgYSBzY2hlZHVsZS4KIAkJICovCiAJCWNsZWFyX2JpdChfX1FVRVVFX1NUQVRFX0ZST1pFTiwgJnR4cS0+c3RhdGUpOwotCQlpZiAoIXRlc3RfYml0KF9fUVVFVUVfU1RBVEVfWE9GRiwgJnR4cS0+c3RhdGUpKQotCQkJX19uZXRpZl9zY2hlZHVsZSh0eHEtPnFkaXNjKTsKKwkJbmV0aWZfc2NoZWR1bGVfcXVldWUodHhxKTsKIAl9CiAJc3Bpbl91bmxvY2soJmRldi0+dHhfZ2xvYmFsX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCBiZmY0ZDU3Li45ZjAwZGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtNTgsNyArNTgsOCBAQAogc3RydWN0IG5mbmxfY2FsbGJhY2sKIHsKIAlpbnQgKCpjYWxsKShzdHJ1Y3Qgc29jayAqbmwsIHN0cnVjdCBza19idWZmICpza2IsIAotCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqY2RhW10pOworCQkgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCSAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pOwogCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3k7CS8qIG5ldGxpbmsgYXR0cmlidXRlIHBvbGljeSAqLwogCWNvbnN0IHVfaW50MTZfdCBhdHRyX2NvdW50OwkJLyogbnVtYmVyIG9mIG5sYXR0cidzICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggMTAzMGI3NS4uODEyY2IxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0yMzgsOSArMjM4LDkgQEAKICAqLwogc3RydWN0IHh0X3RhcmdldF9wYXJhbSB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCAqb3V0OwotCXVuc2lnbmVkIGludCBob29rbnVtOwogCWNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAljb25zdCB2b2lkICp0YXJnaW5mbzsKKwl1bnNpZ25lZCBpbnQgaG9va251bTsKIAl1X2ludDhfdCBmYW1pbHk7CiB9OwogCkBAIC00MDcsNyArNDA3LDcgQEAKIAkJCSAgIHVuc2lnbmVkIGludCBzaXplLCB1X2ludDhfdCBwcm90bywgYm9vbCBpbnZfcHJvdG8pOwogCiBleHRlcm4gc3RydWN0IHh0X3RhYmxlICp4dF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJCSAgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCQkgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpib290c3RyYXAsCiAJCQkJCSAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pOwogZXh0ZXJuIHZvaWQgKnh0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaAppbmRleCA3NjM1YzhmLi4wYTg1NDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKQEAgLTE4LDEyICsxOCw2IEBACiAJWFRfQ09OTk1BUktfUkVTVE9SRQogfTsKIAotc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIG1hcms7Ci0JdW5zaWduZWQgbG9uZyBtYXNrOwotCV9fdTggbW9kZTsKLX07Ci0KIHN0cnVjdCB4dF9jb25ubWFya190Z2luZm8xIHsKIAlfX3UzMiBjdG1hcmssIGN0bWFzaywgbmZtYXNrOwogCV9fdTggbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaAppbmRleCAwMjgzMDRiLi5iYzk1NjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCkBAIC0zLDIzICszLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLS8qIFZlcnNpb24gMCAqLwotc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8gewotCXVuc2lnbmVkIGxvbmcgbWFyazsKLX07Ci0KLS8qIFZlcnNpb24gMSAqLwotZW51bSB7Ci0JWFRfTUFSS19TRVQ9MCwKLQlYVF9NQVJLX0FORCwKLQlYVF9NQVJLX09SLAotfTsKLQotc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgewotCXVuc2lnbmVkIGxvbmcgbWFyazsKLQlfX3U4IG1vZGU7Ci19OwotCiBzdHJ1Y3QgeHRfbWFya190Z2luZm8yIHsKIAlfX3UzMiBtYXJrLCBtYXNrOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCmluZGV4IDU3MWUyNjYuLjYxOWU0N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApAQCAtMTIsMTEgKzEyLDYgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8gewotCXVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKLQlfX3U4IGludmVydDsKLX07Ci0KIHN0cnVjdCB4dF9jb25ubWFya19tdGluZm8xIHsKIAlfX3UzMiBtYXJrLCBtYXNrOwogCV9fdTggaW52ZXJ0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaAppbmRleCA3YWUwNTMzLi41NGY0N2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaApAQCAtMzIsNDIgKzMyLDYgQEAKIAlYVF9DT05OVFJBQ0tfRElSRUNUSU9OICAgID0gMSA8PCAxMiwKIH07CiAKLS8qIFRoaXMgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHNvIHJlbWFpbnMgZnJvemVuIGluIHRpbWUuICovCi1zdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZQotewotCXN0cnVjdCB7Ci0JCV9fYmUzMiBpcDsKLQkJdW5pb24gewotCQkJX191MTYgYWxsOwotCQl9IHU7Ci0JfSBzcmM7Ci0KLQlzdHJ1Y3QgewotCQlfX2JlMzIgaXA7Ci0JCXVuaW9uIHsKLQkJCV9fdTE2IGFsbDsKLQkJfSB1OwotCi0JCS8qIFRoZSBwcm90b2NvbC4gKi8KLQkJX191MTYgcHJvdG9udW07Ci0JfSBkc3Q7Ci19OwotCi1zdHJ1Y3QgeHRfY29ubnRyYWNrX2luZm8KLXsKLQl1bnNpZ25lZCBpbnQgc3RhdGVtYXNrLCBzdGF0dXNtYXNrOwotCi0Jc3RydWN0IGlwX2Nvbm50cmFja19vbGRfdHVwbGUgdHVwbGVbSVBfQ1RfRElSX01BWF07Ci0Jc3RydWN0IGluX2FkZHIgc2lwbXNrW0lQX0NUX0RJUl9NQVhdLCBkaXBtc2tbSVBfQ1RfRElSX01BWF07Ci0KLQl1bnNpZ25lZCBsb25nIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKLQotCS8qIEZsYWdzIHdvcmQgKi8KLQlfX3U4IGZsYWdzOwotCS8qIEludmVyc2UgZmxhZ3MgKi8KLQlfX3U4IGludmZsYWdzOwotfTsKLQogc3RydWN0IHh0X2Nvbm50cmFja19tdGluZm8xIHsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgb3JpZ3NyY19hZGRyLCBvcmlnc3JjX21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIG9yaWdkc3RfYWRkciwgb3JpZ2RzdF9tYXNrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCmluZGV4IDZmYTQ2MGEuLjY2MDdjOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKQEAgLTMsMTEgKzMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotc3RydWN0IHh0X21hcmtfaW5mbyB7Ci0gICAgdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotICAgIF9fdTggaW52ZXJ0OwotfTsKLQogc3RydWN0IHh0X21hcmtfbXRpbmZvMSB7CiAJX191MzIgbWFyaywgbWFzazsKIAlfX3U4IGludmVydDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCmluZGV4IDU5MGFjM2QuLjZmZTNlNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApAQCAtMjY1LDcgKzI2NSw3IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgeHRfdGFibGUgKmFycHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICAgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXJwdF9yZXBsYWNlICpyZXBsKTsKIGV4dGVybiB2b2lkIGFycHRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgYXJwdF9kb190YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaAppbmRleCBlNDBkZGI5Li5lYTI4MWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaApAQCAtMzAxLDcgKzMwMSw3IEBACiAjZGVmaW5lIEVCVF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgZWJ0X3JlcGxhY2UpLTEpKSAmIFwKIAkJICAgICB+KF9fYWxpZ25vZl9fKHN0cnVjdCBlYnRfcmVwbGFjZSktMSkpCiBleHRlcm4gc3RydWN0IGVidF90YWJsZSAqZWJ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgIHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKTsKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKTsKIGV4dGVybiB2b2lkIGVidF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZWJ0X2RvX3RhYmxlKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L0tidWlsZAppbmRleCAzYTcxMDViLi40MzFiNDA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L0tidWlsZApAQCAtMSw0NiArMSwxNCBAQAotaGVhZGVyLXkgKz0gaXB0X0NMQVNTSUZZLmgKIGhlYWRlci15ICs9IGlwdF9DTFVTVEVSSVAuaAotaGVhZGVyLXkgKz0gaXB0X0NPTk5NQVJLLmgKLWhlYWRlci15ICs9IGlwdF9EU0NQLmgKIGhlYWRlci15ICs9IGlwdF9FQ04uaAogaGVhZGVyLXkgKz0gaXB0X0xPRy5oCi1oZWFkZXIteSArPSBpcHRfTUFSSy5oCi1oZWFkZXIteSArPSBpcHRfTkZRVUVVRS5oCiBoZWFkZXIteSArPSBpcHRfUkVKRUNULmgKIGhlYWRlci15ICs9IGlwdF9TQU1FLmgKLWhlYWRlci15ICs9IGlwdF9UQ1BNU1MuaAotaGVhZGVyLXkgKz0gaXB0X1RPUy5oCiBoZWFkZXIteSArPSBpcHRfVFRMLmgKIGhlYWRlci15ICs9IGlwdF9VTE9HLmgKIGhlYWRlci15ICs9IGlwdF9hZGRydHlwZS5oCiBoZWFkZXIteSArPSBpcHRfYWguaAotaGVhZGVyLXkgKz0gaXB0X2NvbW1lbnQuaAotaGVhZGVyLXkgKz0gaXB0X2Nvbm5ieXRlcy5oCi1oZWFkZXIteSArPSBpcHRfY29ubm1hcmsuaAotaGVhZGVyLXkgKz0gaXB0X2Nvbm50cmFjay5oCi1oZWFkZXIteSArPSBpcHRfZGNjcC5oCi1oZWFkZXIteSArPSBpcHRfZHNjcC5oCiBoZWFkZXIteSArPSBpcHRfZWNuLmgKLWhlYWRlci15ICs9IGlwdF9lc3AuaAotaGVhZGVyLXkgKz0gaXB0X2hhc2hsaW1pdC5oCi1oZWFkZXIteSArPSBpcHRfaGVscGVyLmgKLWhlYWRlci15ICs9IGlwdF9pcHJhbmdlLmgKLWhlYWRlci15ICs9IGlwdF9sZW5ndGguaAotaGVhZGVyLXkgKz0gaXB0X2xpbWl0LmgKLWhlYWRlci15ICs9IGlwdF9tYWMuaAotaGVhZGVyLXkgKz0gaXB0X21hcmsuaAotaGVhZGVyLXkgKz0gaXB0X211bHRpcG9ydC5oCi1oZWFkZXIteSArPSBpcHRfb3duZXIuaAotaGVhZGVyLXkgKz0gaXB0X3BoeXNkZXYuaAotaGVhZGVyLXkgKz0gaXB0X3BrdHR5cGUuaAotaGVhZGVyLXkgKz0gaXB0X3BvbGljeS5oCiBoZWFkZXIteSArPSBpcHRfcmVhbG0uaAotaGVhZGVyLXkgKz0gaXB0X3JlY2VudC5oCi1oZWFkZXIteSArPSBpcHRfc2N0cC5oCi1oZWFkZXIteSArPSBpcHRfc3RhdGUuaAotaGVhZGVyLXkgKz0gaXB0X3N0cmluZy5oCi1oZWFkZXIteSArPSBpcHRfdGNwbXNzLmgKLWhlYWRlci15ICs9IGlwdF90b3MuaAogaGVhZGVyLXkgKz0gaXB0X3R0bC5oCiAKIHVuaWZkZWYteSArPSBpcF9xdWV1ZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAppbmRleCAwOTJiZDUwLi42MWZhZmM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKQEAgLTI0NSw3ICsyNDUsNyBAQAogZXh0ZXJuIHZvaWQgaXB0X2luaXQodm9pZCkgX19pbml0OwogCiBleHRlcm4gc3RydWN0IHh0X3RhYmxlICppcHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaXB0X3JlcGxhY2UgKnJlcGwpOwogZXh0ZXJuIHZvaWQgaXB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTEFTU0lGWS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDZkNTExLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9DTEFTU0lGWV9ICi0jZGVmaW5lIF9JUFRfQ0xBU1NJRllfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmg+Ci0jZGVmaW5lIGlwdF9jbGFzc2lmeV90YXJnZXRfaW5mbyB4dF9jbGFzc2lmeV90YXJnZXRfaW5mbwotCi0jZW5kaWYgLypfSVBUX0NMQVNTSUZZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NPTk5NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DT05OTUFSSy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWNmZWUwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NPTk5NQVJLLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jaWZuZGVmIF9JUFRfQ09OTk1BUktfSF90YXJnZXQKLSNkZWZpbmUgX0lQVF9DT05OTUFSS19IX3RhcmdldAotCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDIsMjAwNCBNQVJBIFN5c3RlbXMgQUIgPGh0dHA6Ly93d3cubWFyYXN5c3RlbXMuY29tPgotICogYnkgSGVucmlrIE5vcmRzdHJvbSA8aG5vQG1hcmFzeXN0ZW1zLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmg+Ci0jZGVmaW5lIElQVF9DT05OTUFSS19TRVQJWFRfQ09OTk1BUktfU0VUCi0jZGVmaW5lIElQVF9DT05OTUFSS19TQVZFCVhUX0NPTk5NQVJLX1NBVkUKLSNkZWZpbmUJSVBUX0NPTk5NQVJLX1JFU1RPUkUJWFRfQ09OTk1BUktfUkVTVE9SRQotCi0jZGVmaW5lIGlwdF9jb25ubWFya190YXJnZXRfaW5mbyB4dF9jb25ubWFya190YXJnZXRfaW5mbwotCi0jZW5kaWYgLypfSVBUX0NPTk5NQVJLX0hfdGFyZ2V0Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ5MWU1Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9EU0NQLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKiBpcHRhYmxlcyBtb2R1bGUgZm9yIHNldHRpbmcgdGhlIElQdjQgRFNDUCBmaWVsZAotICoKLSAqIChDKSAyMDAyIEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+Ci0gKiBiYXNlZCBvbiBpcHRfRlRPUy5jIChDKSAyMDAwIGJ5IE1hdHRoZXcgRy4gTWFyc2ggPG1nbUBwYWt0cm9uaXguY29tPgotICogVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHTlUgR1BMIHYyLCAxOTkxCi0gKiAKLSAqIFNlZSBSRkMyNDc0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBEU0NQIGZpZWxkIHdpdGhpbiB0aGUgSVAgSGVhZGVyLgotICoKLSAqIGlwdF9EU0NQLmgsdiAxLjcgMjAwMi8wMy8xNCAxMjowMzoxMyBsYWZvcmdlIEV4cAotKi8KLSNpZm5kZWYgX0lQVF9EU0NQX1RBUkdFVF9ICi0jZGVmaW5lIF9JUFRfRFNDUF9UQVJHRVRfSAotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaD4KLQotI2RlZmluZSBpcHRfRFNDUF9pbmZvIHh0X0RTQ1BfaW5mbwotCi0jZW5kaWYgLyogX0lQVF9EU0NQX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9FQ04uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oCmluZGV4IDk0ZTBkOTguLjdjYTQ1OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oCkBAIC04LDkgKzgsOSBAQAogKi8KICNpZm5kZWYgX0lQVF9FQ05fVEFSR0VUX0gKICNkZWZpbmUgX0lQVF9FQ05fVEFSR0VUX0gKLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRFNDUC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9EU0NQLmg+CiAKLSNkZWZpbmUgSVBUX0VDTl9JUF9NQVNLCSh+SVBUX0RTQ1BfTUFTSykKKyNkZWZpbmUgSVBUX0VDTl9JUF9NQVNLCSh+WFRfRFNDUF9NQVNLKQogCiAjZGVmaW5lIElQVF9FQ05fT1BfU0VUX0lQCTB4MDEJLyogc2V0IEVDTiBiaXRzIG9mIElQdjQgaGVhZGVyICovCiAjZGVmaW5lIElQVF9FQ05fT1BfU0VUX0VDRQkweDEwCS8qIHNldCBFQ0UgYml0IG9mIFRDUCBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X01BUksuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3YTQ4Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9NQVJLLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jaWZuZGVmIF9JUFRfTUFSS19IX3RhcmdldAotI2RlZmluZSBfSVBUX01BUktfSF90YXJnZXQKLQotLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCB1c2Vyc3BhY2UgKi8KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9NQVJLLmg+Ci0KLS8qIFZlcnNpb24gMCAqLwotI2RlZmluZSBpcHRfbWFya190YXJnZXRfaW5mbyB4dF9tYXJrX3RhcmdldF9pbmZvCi0KLS8qIFZlcnNpb24gMSAqLwotI2RlZmluZSBJUFRfTUFSS19TRVQJWFRfTUFSS19TRVQKLSNkZWZpbmUgSVBUX01BUktfQU5ECVhUX01BUktfQU5ECi0jZGVmaW5lCUlQVF9NQVJLX09SCVhUX01BUktfT1IKLQotI2RlZmluZSBpcHRfbWFya190YXJnZXRfaW5mb192MSB4dF9tYXJrX3RhcmdldF9pbmZvX3YxCi0KLSNlbmRpZiAvKl9JUFRfTUFSS19IX3RhcmdldCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YTJhNzUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTkZRVUVVRS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogaXB0YWJsZXMgbW9kdWxlIGZvciB1c2luZyBORlFVRVVFIG1lY2hhbmlzbQotICoKLSAqIChDKSAyMDA1IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgR05VIEdQTCB2MiwgMTk5MQotICogCi0qLwotI2lmbmRlZiBfSVBUX05GUV9UQVJHRVRfSAotI2RlZmluZSBfSVBUX05GUV9UQVJHRVRfSAotCi0vKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igb2xkIHVzZXJzcGFjZSAqLwotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmg+Ci0KLSNkZWZpbmUgaXB0X05GUV9pbmZvIHh0X05GUV9pbmZvCi0KLSNlbmRpZiAvKiBfSVBUX0RTQ1BfVEFSR0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RDUE1TUy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVENQTVNTLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhODUwZjkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVENQTVNTLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9UQ1BNU1NfSAotI2RlZmluZSBfSVBUX1RDUE1TU19ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmg+Ci0KLSNkZWZpbmUgaXB0X3RjcG1zc19pbmZvCQl4dF90Y3Btc3NfaW5mbwotI2RlZmluZSBJUFRfVENQTVNTX0NMQU1QX1BNVFUJWFRfVENQTVNTX0NMQU1QX1BNVFUKLQotI2VuZGlmIC8qX0lQVF9UQ1BNU1NfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmY5ZTFmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1RPU19IX3RhcmdldAotI2RlZmluZSBfSVBUX1RPU19IX3RhcmdldAotCi0jaWZuZGVmIElQVE9TX05PUk1BTFNWQwotI2RlZmluZSBJUFRPU19OT1JNQUxTVkMgMAotI2VuZGlmCi0KLXN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCB0b3M7Ci19OwotCi0jZW5kaWYgLypfSVBUX1RPU19IX3RhcmdldCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMmFmYzIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29tbWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfSVBUX0NPTU1FTlRfSAotI2RlZmluZSBfSVBUX0NPTU1FTlRfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaD4KLQotI2RlZmluZSBJUFRfTUFYX0NPTU1FTlRfTEVOIFhUX01BWF9DT01NRU5UX0xFTgotCi0jZGVmaW5lIGlwdF9jb21tZW50X2luZm8geHRfY29tbWVudF9pbmZvCi0KLSNlbmRpZiAvKiBfSVBUX0NPTU1FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubmJ5dGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25uYnl0ZXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYzZTZlZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25uYnl0ZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSNpZm5kZWYgX0lQVF9DT05OQllURVNfSAotI2RlZmluZSBfSVBUX0NPTk5CWVRFU19ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmg+Ci0jZGVmaW5lIGlwdF9jb25uYnl0ZXNfd2hhdCB4dF9jb25uYnl0ZXNfd2hhdAotCi0jZGVmaW5lIElQVF9DT05OQllURVNfUEtUUwlYVF9DT05OQllURVNfUEtUUwotI2RlZmluZSBJUFRfQ09OTkJZVEVTX0JZVEVTCVhUX0NPTk5CWVRFU19CWVRFUwotI2RlZmluZSBJUFRfQ09OTkJZVEVTX0FWR1BLVAlYVF9DT05OQllURVNfQVZHUEtUCi0KLSNkZWZpbmUgaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gCXh0X2Nvbm5ieXRlc19kaXJlY3Rpb24KLSNkZWZpbmUgSVBUX0NPTk5CWVRFU19ESVJfT1JJR0lOQUwgCVhUX0NPTk5CWVRFU19ESVJfT1JJR0lOQUwKLSNkZWZpbmUgSVBUX0NPTk5CWVRFU19ESVJfUkVQTFkgCVhUX0NPTk5CWVRFU19ESVJfUkVQTFkKLSNkZWZpbmUgSVBUX0NPTk5CWVRFU19ESVJfQk9USAkJWFRfQ09OTkJZVEVTX0RJUl9CT1RICi0KLSNkZWZpbmUgaXB0X2Nvbm5ieXRlc19pbmZvIHh0X2Nvbm5ieXRlc19pbmZvCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubm1hcmsuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5tYXJrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YmE2NTYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubm1hcmsuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX0NPTk5NQVJLX0gKLSNkZWZpbmUgX0lQVF9DT05OTUFSS19ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaD4KLSNkZWZpbmUgaXB0X2Nvbm5tYXJrX2luZm8geHRfY29ubm1hcmtfaW5mbwotCi0jZW5kaWYgLypfSVBUX0NPTk5NQVJLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25udHJhY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RlNjc2Mi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25udHJhY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qIEhlYWRlciBmaWxlIGZvciBrZXJuZWwgbW9kdWxlIHRvIG1hdGNoIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mb3JtYXRpb24uCi0gKiBHUEwgKEMpIDIwMDEgIE1hcmMgQm91Y2hlciAobWFyY0BtYnNpLmNhKS4KLSAqLwotCi0jaWZuZGVmIF9JUFRfQ09OTlRSQUNLX0gKLSNkZWZpbmUgX0lQVF9DT05OVFJBQ0tfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oPgotCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfU1RBVEVfQklUKGN0aW5mbykgWFRfQ09OTlRSQUNLX1NUQVRFX0JJVChjdGluZm8pCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfU1RBVEVfSU5WQUxJRCAJWFRfQ09OTlRSQUNLX1NUQVRFX0lOVkFMSUQKLQotI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRFX1NOQVQgCVhUX0NPTk5UUkFDS19TVEFURV9TTkFUCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfU1RBVEVfRE5BVAlYVF9DT05OVFJBQ0tfU1RBVEVfRE5BVAotI2RlZmluZSBJUFRfQ09OTlRSQUNLX1NUQVRFX1VOVFJBQ0tFRAlYVF9DT05OVFJBQ0tfU1RBVEVfVU5UUkFDS0VECi0KLS8qIGZsYWdzLCBpbnZmbGFnczogKi8KLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19TVEFURQkJWFRfQ09OTlRSQUNLX1NUQVRFCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfUFJPVE8JCVhUX0NPTk5UUkFDS19QUk9UTwotI2RlZmluZSBJUFRfQ09OTlRSQUNLX09SSUdTUkMJCVhUX0NPTk5UUkFDS19PUklHU1JDCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfT1JJR0RTVAkJWFRfQ09OTlRSQUNLX09SSUdEU1QKLSNkZWZpbmUgSVBUX0NPTk5UUkFDS19SRVBMU1JDCQlYVF9DT05OVFJBQ0tfUkVQTFNSQwotI2RlZmluZSBJUFRfQ09OTlRSQUNLX1JFUExEU1QJCVhUX0NPTk5UUkFDS19SRVBMRFNUCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfU1RBVFVTCQlYVF9DT05OVFJBQ0tfU1RBVFVTCi0jZGVmaW5lIElQVF9DT05OVFJBQ0tfRVhQSVJFUwkJWFRfQ09OTlRSQUNLX0VYUElSRVMKLQotI2RlZmluZSBpcHRfY29ubnRyYWNrX2luZm8JCXh0X2Nvbm50cmFja19pbmZvCi0jZW5kaWYgLypfSVBUX0NPTk5UUkFDS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RjY3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RjY3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTcwZDExZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kY2NwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIF9JUFRfRENDUF9IXwotI2RlZmluZSBfSVBUX0RDQ1BfSF8KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9kY2NwLmg+Ci0jZGVmaW5lIElQVF9EQ0NQX1NSQ19QT1JUUwlYVF9EQ0NQX1NSQ19QT1JUUwotI2RlZmluZSBJUFRfRENDUF9ERVNUX1BPUlRTCVhUX0RDQ1BfREVTVF9QT1JUUwotI2RlZmluZSBJUFRfRENDUF9UWVBFCQlYVF9EQ0NQX1RZUEUKLSNkZWZpbmUgSVBUX0RDQ1BfT1BUSU9OCQlYVF9EQ0NQX09QVElPTgotCi0jZGVmaW5lIElQVF9EQ0NQX1ZBTElEX0ZMQUdTIAlYVF9EQ0NQX1ZBTElEX0ZMQUdTCi0KLSNkZWZpbmUgaXB0X2RjY3BfaW5mbyB4dF9kY2NwX2luZm8KLQotI2VuZGlmIC8qIF9JUFRfRENDUF9IXyAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiODJjYTkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogaXB0YWJsZXMgbW9kdWxlIGZvciBtYXRjaGluZyB0aGUgSVB2NCBEU0NQIGZpZWxkCi0gKgotICogKEMpIDIwMDIgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgR05VIEdQTCB2MiwgMTk5MQotICogCi0gKiBTZWUgUkZDMjQ3NCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgRFNDUCBmaWVsZCB3aXRoaW4gdGhlIElQIEhlYWRlci4KLSAqCi0gKiBpcHRfZHNjcC5oLHYgMS4zIDIwMDIvMDgvMDUgMTk6MDA6MjEgbGFmb3JnZSBFeHAKLSovCi0jaWZuZGVmIF9JUFRfRFNDUF9ICi0jZGVmaW5lIF9JUFRfRFNDUF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oPgotCi0jZGVmaW5lIElQVF9EU0NQX01BU0sJWFRfRFNDUF9NQVNLCi0jZGVmaW5lIElQVF9EU0NQX1NISUZUCVhUX0RTQ1BfU0hJRlQKLSNkZWZpbmUgSVBUX0RTQ1BfTUFYCVhUX0RTQ1BfTUFYCi0KLSNkZWZpbmUgaXB0X2RzY3BfaW5mbwl4dF9kc2NwX2luZm8KLQotI2VuZGlmIC8qIF9JUFRfRFNDUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lY24uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Vjbi5oCmluZGV4IDFmMGQ5YTQuLjk5NDViYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Vjbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Vjbi5oCkBAIC04LDkgKzgsOSBAQAogKi8KICNpZm5kZWYgX0lQVF9FQ05fSAogI2RlZmluZSBfSVBUX0VDTl9ICi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3AuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oPgogCi0jZGVmaW5lIElQVF9FQ05fSVBfTUFTSwkofklQVF9EU0NQX01BU0spCisjZGVmaW5lIElQVF9FQ05fSVBfTUFTSwkoflhUX0RTQ1BfTUFTSykKIAogI2RlZmluZSBJUFRfRUNOX09QX01BVENIX0lQCTB4MDEKICNkZWZpbmUgSVBUX0VDTl9PUF9NQVRDSF9FQ0UJMHgxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyOTZlNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgX0lQVF9FU1BfSAotI2RlZmluZSBfSVBUX0VTUF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZXNwLmg+Ci0KLSNkZWZpbmUgaXB0X2VzcCB4dF9lc3AKLSNkZWZpbmUgSVBUX0VTUF9JTlZfU1BJCQlYVF9FU1BfSU5WX1NQSQotI2RlZmluZSBJUFRfRVNQX0lOVl9NQVNLCVhUX0VTUF9JTlZfTUFTSwotCi0jZW5kaWYgLypfSVBUX0VTUF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hhc2hsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NjIxMjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jaWZuZGVmIF9JUFRfSEFTSExJTUlUX0gKLSNkZWZpbmUgX0lQVF9IQVNITElNSVRfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oPgotCi0jZGVmaW5lIElQVF9IQVNITElNSVRfU0NBTEUJWFRfSEFTSExJTUlUX1NDQUxFCi0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9ESVAJWFRfSEFTSExJTUlUX0hBU0hfRElQCi0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9EUFQJWFRfSEFTSExJTUlUX0hBU0hfRFBUCi0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9TSVAJWFRfSEFTSExJTUlUX0hBU0hfU0lQCi0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9TUFQJWFRfSEFTSExJTUlUX0hBU0hfU1BUCi0KLSNkZWZpbmUgaXB0X2hhc2hsaW1pdF9pbmZvIHh0X2hhc2hsaW1pdF9pbmZvCi0KLSNlbmRpZiAvKiBfSVBUX0hBU0hMSU1JVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oZWxwZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hlbHBlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQ1MmMyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hlbHBlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9JUFRfSEVMUEVSX0gKLSNkZWZpbmUgX0lQVF9IRUxQRVJfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2hlbHBlci5oPgotI2RlZmluZSBpcHRfaGVscGVyX2luZm8geHRfaGVscGVyX2luZm8KLQotI2VuZGlmIC8qIF9JUFRfSEVMUEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxYWViZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jaWZuZGVmIF9JUFRfSVBSQU5HRV9ICi0jZGVmaW5lIF9JUFRfSVBSQU5HRV9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmg+Ci0KLXN0cnVjdCBpcHRfaXByYW5nZSB7Ci0JLyogSW5jbHVzaXZlOiBuZXR3b3JrIG9yZGVyLiAqLwotCV9fYmUzMiBtaW5faXAsIG1heF9pcDsKLX07Ci0KLXN0cnVjdCBpcHRfaXByYW5nZV9pbmZvCi17Ci0Jc3RydWN0IGlwdF9pcHJhbmdlIHNyYzsKLQlzdHJ1Y3QgaXB0X2lwcmFuZ2UgZHN0OwotCi0JLyogRmxhZ3MgZnJvbSBhYm92ZSAqLwotCXVfaW50OF90IGZsYWdzOwotfTsKLQotI2VuZGlmIC8qIF9JUFRfSVBSQU5HRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9sZW5ndGguaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjQ1MjA2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9JUFRfTEVOR1RIX0gKLSNkZWZpbmUgX0lQVF9MRU5HVEhfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oPgotI2RlZmluZSBpcHRfbGVuZ3RoX2luZm8geHRfbGVuZ3RoX2luZm8KLQotI2VuZGlmIC8qX0lQVF9MRU5HVEhfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9saW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbGltaXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmNWNkMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9saW1pdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaWZuZGVmIF9JUFRfUkFURV9ICi0jZGVmaW5lIF9JUFRfUkFURV9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaD4KLSNkZWZpbmUgSVBUX0xJTUlUX1NDQUxFIFhUX0xJTUlUX1NDQUxFCi0jZGVmaW5lIGlwdF9yYXRlaW5mbyB4dF9yYXRlaW5mbwotCi0jZW5kaWYgLypfSVBUX1JBVEVfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYWMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTg2MDA4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jaWZuZGVmIF9JUFRfTUFDX0gKLSNkZWZpbmUgX0lQVF9NQUNfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X21hYy5oPgotI2RlZmluZSBpcHRfbWFjX2luZm8geHRfbWFjX2luZm8KLQotI2VuZGlmIC8qX0lQVF9NQUNfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYXJrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYXJrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmZGU2N2MuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFyay5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIF9JUFRfTUFSS19ICi0jZGVmaW5lIF9JUFRfTUFSS19ICi0KLS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGQgdXNlcnNwYWNlICovCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaD4KLQotI2RlZmluZSBpcHRfbWFya19pbmZvIHh0X21hcmtfaW5mbwotCi0jZW5kaWYgLypfSVBUX01BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tdWx0aXBvcnQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWZlODVlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X211bHRpcG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI2lmbmRlZiBfSVBUX01VTFRJUE9SVF9ICi0jZGVmaW5lIF9JUFRfTVVMVElQT1JUX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaD4KLQotI2RlZmluZSBJUFRfTVVMVElQT1JUX1NPVVJDRQkJWFRfTVVMVElQT1JUX1NPVVJDRQotI2RlZmluZSBJUFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OCVhUX01VTFRJUE9SVF9ERVNUSU5BVElPTgotI2RlZmluZSBJUFRfTVVMVElQT1JUX0VJVEhFUgkJWFRfTVVMVElQT1JUX0VJVEhFUgotCi0jZGVmaW5lIElQVF9NVUxUSV9QT1JUUwkJCVhUX01VTFRJX1BPUlRTCi0KLSNkZWZpbmUgaXB0X211bHRpcG9ydAkJCXh0X211bHRpcG9ydAotI2RlZmluZSBpcHRfbXVsdGlwb3J0X3YxCQl4dF9tdWx0aXBvcnRfdjEKLQotI2VuZGlmIC8qX0lQVF9NVUxUSVBPUlRfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4NDQ1Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotI2lmbmRlZiBfSVBUX09XTkVSX0gKLSNkZWZpbmUgX0lQVF9PV05FUl9ICi0KLS8qIG1hdGNoIGFuZCBpbnZlcnQgZmxhZ3MgKi8KLSNkZWZpbmUgSVBUX09XTkVSX1VJRAkweDAxCi0jZGVmaW5lIElQVF9PV05FUl9HSUQJMHgwMgotI2RlZmluZSBJUFRfT1dORVJfUElECTB4MDQKLSNkZWZpbmUgSVBUX09XTkVSX1NJRAkweDA4Ci0jZGVmaW5lIElQVF9PV05FUl9DT01NCTB4MTAKLQotc3RydWN0IGlwdF9vd25lcl9pbmZvIHsKLSAgICBfX2tlcm5lbF91aWQzMl90IHVpZDsKLSAgICBfX2tlcm5lbF9naWQzMl90IGdpZDsKLSAgICBfX2tlcm5lbF9waWRfdCBwaWQ7Ci0gICAgX19rZXJuZWxfcGlkX3Qgc2lkOwotICAgIGNoYXIgY29tbVsxNl07Ci0gICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KLX07Ci0KLSNlbmRpZiAvKl9JUFRfT1dORVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MDBlNzEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGh5c2Rldi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1BIWVNERVZfSAotI2RlZmluZSBfSVBUX1BIWVNERVZfSAotCi0vKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3Igb2xkIHVzZXJzcGFjZSAqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaD4KLQotI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JTgkJWFRfUEhZU0RFVl9PUF9JTgotI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9PVVQJCVhUX1BIWVNERVZfT1BfT1VUCi0jZGVmaW5lIElQVF9QSFlTREVWX09QX0JSSURHRUQJCVhUX1BIWVNERVZfT1BfQlJJREdFRAotI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JU0lOCQlYVF9QSFlTREVWX09QX0lTSU4KLSNkZWZpbmUgSVBUX1BIWVNERVZfT1BfSVNPVVQJCVhUX1BIWVNERVZfT1BfSVNPVVQKLSNkZWZpbmUgSVBUX1BIWVNERVZfT1BfTUFTSwkJWFRfUEhZU0RFVl9PUF9NQVNLCi0KLSNkZWZpbmUgaXB0X3BoeXNkZXZfaW5mbyB4dF9waHlzZGV2X2luZm8KLQotI2VuZGlmIC8qX0lQVF9QSFlTREVWX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGt0dHlwZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGt0dHlwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjFmYmM5Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1BLVFRZUEVfSAotI2RlZmluZSBfSVBUX1BLVFRZUEVfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3BrdHR5cGUuaD4KLSNkZWZpbmUgaXB0X3BrdHR5cGVfaW5mbyB4dF9wa3R0eXBlX2luZm8KLQotI2VuZGlmIC8qX0lQVF9QS1RUWVBFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wb2xpY3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTAzN2ZiMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wb2xpY3kuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNpZm5kZWYgX0lQVF9QT0xJQ1lfSAotI2RlZmluZSBfSVBUX1BPTElDWV9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg+Ci0KLSNkZWZpbmUgSVBUX1BPTElDWV9NQVhfRUxFTQkJWFRfUE9MSUNZX01BWF9FTEVNCi0KLS8qIGlwdF9wb2xpY3lfZmxhZ3MgKi8KLSNkZWZpbmUgSVBUX1BPTElDWV9NQVRDSF9JTgkJWFRfUE9MSUNZX01BVENIX0lOCi0jZGVmaW5lIElQVF9QT0xJQ1lfTUFUQ0hfT1VUCQlYVF9QT0xJQ1lfTUFUQ0hfT1VUCi0jZGVmaW5lIElQVF9QT0xJQ1lfTUFUQ0hfTk9ORQkJWFRfUE9MSUNZX01BVENIX05PTkUKLSNkZWZpbmUgSVBUX1BPTElDWV9NQVRDSF9TVFJJQ1QJCVhUX1BPTElDWV9NQVRDSF9TVFJJQ1QKLQotLyogaXB0X3BvbGljeV9tb2RlcyAqLwotI2RlZmluZSBJUFRfUE9MSUNZX01PREVfVFJBTlNQT1JUCVhUX1BPTElDWV9NT0RFX1RSQU5TUE9SVAotI2RlZmluZSBJUFRfUE9MSUNZX01PREVfVFVOTkVMCQlYVF9QT0xJQ1lfTU9ERV9UVU5ORUwKLQotI2RlZmluZSBpcHRfcG9saWN5X3NwZWMJCQl4dF9wb2xpY3lfc3BlYwotI2RlZmluZSBpcHRfcG9saWN5X2FkZHIJCQl4dF9wb2xpY3lfYWRkcgotI2RlZmluZSBpcHRfcG9saWN5X2VsZW0JCQl4dF9wb2xpY3lfZWxlbQotI2RlZmluZSBpcHRfcG9saWN5X2luZm8JCQl4dF9wb2xpY3lfaW5mbwotCi0jZW5kaWYgLyogX0lQVF9QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzNmNjYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgX0lQVF9SRUNFTlRfSAotI2RlZmluZSBfSVBUX1JFQ0VOVF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcmVjZW50Lmg+Ci0KLSNkZWZpbmUgaXB0X3JlY2VudF9pbmZvIHh0X3JlY2VudF9tdGluZm8KLQotZW51bSB7Ci0JSVBUX1JFQ0VOVF9DSEVDSyAgICA9IFhUX1JFQ0VOVF9DSEVDSywKLQlJUFRfUkVDRU5UX1NFVCAgICAgID0gWFRfUkVDRU5UX1NFVCwKLQlJUFRfUkVDRU5UX1VQREFURSAgID0gWFRfUkVDRU5UX1VQREFURSwKLQlJUFRfUkVDRU5UX1JFTU9WRSAgID0gWFRfUkVDRU5UX1JFTU9WRSwKLQlJUFRfUkVDRU5UX1RUTCAgICAgID0gWFRfUkVDRU5UX1RUTCwKLQotCUlQVF9SRUNFTlRfU09VUkNFICAgPSBYVF9SRUNFTlRfU09VUkNFLAotCUlQVF9SRUNFTlRfREVTVCAgICAgPSBYVF9SRUNFTlRfREVTVCwKLQotCUlQVF9SRUNFTlRfTkFNRV9MRU4gPSBYVF9SRUNFTlRfTkFNRV9MRU4sCi19OwotCi0jZW5kaWYgLypfSVBUX1JFQ0VOVF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3NjdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3NjdHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiM2RiYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zY3RwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1NDVFBfSF8KLSNkZWZpbmUgX0lQVF9TQ1RQX0hfCi0KLSNkZWZpbmUgSVBUX1NDVFBfU1JDX1BPUlRTCSAgICAgICAgMHgwMQotI2RlZmluZSBJUFRfU0NUUF9ERVNUX1BPUlRTCSAgICAgICAgMHgwMgotI2RlZmluZSBJUFRfU0NUUF9DSFVOS19UWVBFUwkJMHgwNAotCi0jZGVmaW5lIElQVF9TQ1RQX1ZBTElEX0ZMQUdTCQkweDA3Ci0KLQotc3RydWN0IGlwdF9zY3RwX2ZsYWdfaW5mbyB7Ci0JdV9pbnQ4X3QgY2h1bmt0eXBlOwotCXVfaW50OF90IGZsYWc7Ci0JdV9pbnQ4X3QgZmxhZ19tYXNrOwotfTsKLQotI2RlZmluZSBJUFRfTlVNX1NDVFBfRkxBR1MJNAotCi1zdHJ1Y3QgaXB0X3NjdHBfaW5mbyB7Ci0JdV9pbnQxNl90IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLwotCXVfaW50MTZfdCBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQotCXVfaW50MzJfdCBjaHVua21hcFsyNTYgLyBzaXplb2YgKHVfaW50MzJfdCldOyAgLyogQml0IG1hc2sgb2YgY2h1bmtzIHRvIGJlIG1hdGNoZWQgYWNjb3JkaW5nIHRvIFJGQyAyOTYwICovCi0KLSNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTlkgICAweDAxICAvKiBNYXRjaCBpZiBhbnkgb2YgdGhlIGNodW5rIHR5cGVzIGFyZSBwcmVzZW50ICovCi0jZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQUxMICAgMHgwMiAgLyogTWF0Y2ggaWYgYWxsIG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLwotI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX09OTFkgIDB4MDQgIC8qIE1hdGNoIGlmIHRoZXNlIGFyZSB0aGUgb25seSBjaHVuayB0eXBlcyBwcmVzZW50ICovCi0KLQl1X2ludDMyX3QgY2h1bmtfbWF0Y2hfdHlwZTsKLQlzdHJ1Y3QgaXB0X3NjdHBfZmxhZ19pbmZvIGZsYWdfaW5mb1tJUFRfTlVNX1NDVFBfRkxBR1NdOwotCWludCBmbGFnX2NvdW50OwotCi0JdV9pbnQzMl90IGZsYWdzOwotCXVfaW50MzJfdCBpbnZmbGFnczsKLX07Ci0KLSNkZWZpbmUgYnl0ZXModHlwZSkgKHNpemVvZih0eXBlKSAqIDgpCi0KLSNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVQoY2h1bmttYXAsIHR5cGUpIAkJXAotCWRvIHsgCQkJCQkJXAotCQljaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKLQkJCTEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkJCSAJXAotCWRvIHsJCQkJCQkJXAotCQljaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gJj0gCQlcCi0JCQl+KDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKSk7CVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAJCQlcCi0oewkJCQkJCQkJXAotCShjaHVua21hcFt0eXBlIC8gYnl0ZXMgKHVfaW50MzJfdCldICYgCQkJXAotCQkoMSA8PCAodHlwZSAlIGJ5dGVzICh1X2ludDMyX3QpKSkpID8gMTogMDsJXAotfSkKLQotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSAJCQkJXAotCWRvIHsJCQkJCQkJXAotCQlpbnQgaTsgCQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykJXAotCQkJY2h1bmttYXBbaV0gPSAwOwkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUX0FMTChjaHVua21hcCkgCQkJXAotCWRvIHsJCQkJCQkJXAotCQlpbnQgaTsgCQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykJXAotCQkJY2h1bmttYXBbaV0gPSB+MDsJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NPUFkoZGVzdG1hcCwgc3JjbWFwKSAJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWludCBpOyAJCQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKQlcCi0JCQlkZXN0bWFwW2ldID0gc3JjbWFwW2ldOwkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIAkJXAotKHsJCQkJCQkJXAotCWludCBpOyAJCQkJCQlcCi0JaW50IGZsYWcgPSAxOwkJCQkJXAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSB7CVwKLQkJaWYgKGNodW5rbWFwW2ldKSB7CQkJXAotCQkJZmxhZyA9IDA7CQkJXAotCQkJYnJlYWs7CQkJCVwKLQkJfQkJCQkJXAotCX0JCQkJCQlcCi0gICAgICAgIGZsYWc7CQkJCQkJXAotfSkKLQotI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0FMTF9TRVQoY2h1bmttYXApIAkJXAotKHsJCQkJCQkJXAotCWludCBpOyAJCQkJCQlcCi0JaW50IGZsYWcgPSAxOwkJCQkJXAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSB7CVwKLQkJaWYgKGNodW5rbWFwW2ldICE9IH4wKSB7CQlcCi0JCQlmbGFnID0gMDsJCQlcCi0JCQkJYnJlYWs7CQkJXAotCQl9CQkJCQlcCi0JfQkJCQkJCVwKLSAgICAgICAgZmxhZzsJCQkJCQlcCi19KQotCi0jZW5kaWYgLyogX0lQVF9TQ1RQX0hfICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDRhOTljLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jaWZuZGVmIF9JUFRfU1RBVEVfSAotI2RlZmluZSBfSVBUX1NUQVRFX0gKLQotLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCB1c2Vyc3BhY2UgKi8KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9zdGF0ZS5oPgotCi0jZGVmaW5lIElQVF9TVEFURV9CSVQJCVhUX1NUQVRFX0JJVAotI2RlZmluZSBJUFRfU1RBVEVfSU5WQUxJRAlYVF9TVEFURV9JTlZBTElECi0KLSNkZWZpbmUgSVBUX1NUQVRFX1VOVFJBQ0tFRAlYVF9TVEFURV9VTlRSQUNLRUQKLQotI2RlZmluZSBpcHRfc3RhdGVfaW5mbwkJeHRfc3RhdGVfaW5mbwotCi0jZW5kaWYgLypfSVBUX1NUQVRFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RyaW5nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdHJpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI2ZGUzMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdHJpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSNpZm5kZWYgX0lQVF9TVFJJTkdfSAotI2RlZmluZSBfSVBUX1NUUklOR19ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmg+Ci0KLSNkZWZpbmUgSVBUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFCi0jZGVmaW5lIElQVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIFhUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkUKLSNkZWZpbmUgaXB0X3N0cmluZ19pbmZvIHh0X3N0cmluZ19pbmZvCi0KLSNlbmRpZiAvKl9JUFRfU1RSSU5HX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdGNwbXNzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90Y3Btc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiYmM4ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90Y3Btc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfSVBUX1RDUE1TU19NQVRDSF9ICi0jZGVmaW5lIF9JUFRfVENQTVNTX01BVENIX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaD4KLSNkZWZpbmUgaXB0X3RjcG1zc19tYXRjaF9pbmZvIHh0X3RjcG1zc19tYXRjaF9pbmZvCi0KLSNlbmRpZiAvKl9JUFRfVENQTVNTX01BVENIX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxZjVkZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSNpZm5kZWYgX0lQVF9UT1NfSAotI2RlZmluZSBfSVBUX1RPU19ICi0KLXN0cnVjdCBpcHRfdG9zX2luZm8gewotICAgIHVfaW50OF90IHRvczsKLSAgICB1X2ludDhfdCBpbnZlcnQ7Ci19OwotCi0jaWZuZGVmIElQVE9TX05PUk1BTFNWQwotI2RlZmluZSBJUFRPU19OT1JNQUxTVkMgMAotI2VuZGlmCi0KLSNlbmRpZiAvKl9JUFRfVE9TX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAppbmRleCBhY2E0YmQxLi5lODY0ZWFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZApAQCAtMSwyMiArMSwxMiBAQAogaGVhZGVyLXkgKz0gaXA2dF9ITC5oCiBoZWFkZXIteSArPSBpcDZ0X0xPRy5oCi1oZWFkZXIteSArPSBpcDZ0X01BUksuaAogaGVhZGVyLXkgKz0gaXA2dF9SRUpFQ1QuaAogaGVhZGVyLXkgKz0gaXA2dF9haC5oCi1oZWFkZXIteSArPSBpcDZ0X2VzcC5oCiBoZWFkZXIteSArPSBpcDZ0X2ZyYWcuaAotaGVhZGVyLXkgKz0gaXA2dF9obC5oCiBoZWFkZXIteSArPSBpcDZ0X2lwdjZoZWFkZXIuaAotaGVhZGVyLXkgKz0gaXA2dF9sZW5ndGguaAotaGVhZGVyLXkgKz0gaXA2dF9saW1pdC5oCi1oZWFkZXIteSArPSBpcDZ0X21hYy5oCi1oZWFkZXIteSArPSBpcDZ0X21hcmsuaAoraGVhZGVyLXkgKz0gaXA2dF9obC5oCiBoZWFkZXIteSArPSBpcDZ0X21oLmgKLWhlYWRlci15ICs9IGlwNnRfbXVsdGlwb3J0LmgKIGhlYWRlci15ICs9IGlwNnRfb3B0cy5oCi1oZWFkZXIteSArPSBpcDZ0X293bmVyLmgKLWhlYWRlci15ICs9IGlwNnRfcGh5c2Rldi5oCi1oZWFkZXIteSArPSBpcDZ0X3BvbGljeS5oCiBoZWFkZXIteSArPSBpcDZ0X3J0LmgKIAogdW5pZmRlZi15ICs9IGlwNl90YWJsZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAppbmRleCAxMDg5ZTMzLi5hNjRlMTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaApAQCAtMzA2LDcgKzMwNiw3IEBACiBleHRlcm4gdm9pZCBpcDZ0X2luaXQodm9pZCkgX19pbml0OwogCiBleHRlcm4gc3RydWN0IHh0X3RhYmxlICppcDZ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICAgIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCisJCQkJCSAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGlwNnRfcmVwbGFjZSAqcmVwbCk7CiBleHRlcm4gdm9pZCBpcDZ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGlwNnRfZG9fdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9NQVJLLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTUFSSy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2Y2MjlhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9NQVJLLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpZm5kZWYgX0lQNlRfTUFSS19IX3RhcmdldAotI2RlZmluZSBfSVA2VF9NQVJLX0hfdGFyZ2V0Ci0KLS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGQgdXNlcnNwYWNlICovCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X01BUksuaD4KLQotI2RlZmluZSBpcDZ0X21hcmtfdGFyZ2V0X2luZm8geHRfbWFya190YXJnZXRfaW5mbwotCi0jZW5kaWYgLypfSVA2VF9NQVJLX0hfdGFyZ2V0Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyZWFmNS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9JUDZUX0VTUF9ICi0jZGVmaW5lIF9JUDZUX0VTUF9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZXNwLmg+Ci0KLSNkZWZpbmUgaXA2dF9lc3AgeHRfZXNwCi0jZGVmaW5lIElQNlRfRVNQX0lOVl9TUEkJWFRfRVNQX0lOVl9TUEkKLSNkZWZpbmUgSVA2VF9FU1BfSU5WX01BU0sJWFRfRVNQX0lOVl9NQVNLCi0KLSNlbmRpZiAvKl9JUDZUX0VTUF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU5Njg5ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGVuZ3RoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSNpZm5kZWYgX0lQNlRfTEVOR1RIX0gKLSNkZWZpbmUgX0lQNlRfTEVOR1RIX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaD4KLSNkZWZpbmUgaXA2dF9sZW5ndGhfaW5mbyB4dF9sZW5ndGhfaW5mbwotCi0jZW5kaWYgLypfSVA2VF9MRU5HVEhfSCovCi0JCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGltaXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9saW1pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODdlNWVhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9saW1pdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaWZuZGVmIF9JUDZUX1JBVEVfSAotI2RlZmluZSBfSVA2VF9SQVRFX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9saW1pdC5oPgotI2RlZmluZSBJUDZUX0xJTUlUX1NDQUxFIFhUX0xJTUlUX1NDQUxFCi0jZGVmaW5lIGlwNnRfcmF0ZWluZm8geHRfcmF0ZWluZm8KLQotI2VuZGlmIC8qX0lQNlRfUkFURV9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM1OGU4My4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNpZm5kZWYgX0lQNlRfTUFDX0gKLSNkZWZpbmUgX0lQNlRfTUFDX0gKLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9tYWMuaD4KLSNkZWZpbmUgaXA2dF9tYWNfaW5mbyB4dF9tYWNfaW5mbwotCi0jZW5kaWYgLypfSVA2VF9NQUNfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hcmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYyMDQ5NS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFyay5oCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jaWZuZGVmIF9JUDZUX01BUktfSAotI2RlZmluZSBfSVA2VF9NQVJLX0gKLQotLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZCB1c2Vyc3BhY2UgKi8KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbWFyay5oPgotCi0jZGVmaW5lIGlwNnRfbWFya19pbmZvIHh0X21hcmtfaW5mbwotCi0jZW5kaWYgLypfSVBUX01BUktfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbXVsdGlwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MmM5MjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X211bHRpcG9ydC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2lmbmRlZiBfSVA2VF9NVUxUSVBPUlRfSAotI2RlZmluZSBfSVA2VF9NVUxUSVBPUlRfSAotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oPgotCi0jZGVmaW5lIElQNlRfTVVMVElQT1JUX1NPVVJDRQkJWFRfTVVMVElQT1JUX1NPVVJDRQotI2RlZmluZSBJUDZUX01VTFRJUE9SVF9ERVNUSU5BVElPTglYVF9NVUxUSVBPUlRfREVTVElOQVRJT04KLSNkZWZpbmUgSVA2VF9NVUxUSVBPUlRfRUlUSEVSCQlYVF9NVUxUSVBPUlRfRUlUSEVSCi0KLSNkZWZpbmUgSVA2VF9NVUxUSV9QT1JUUwkJWFRfTVVMVElfUE9SVFMKLQotI2RlZmluZSBpcDZ0X211bHRpcG9ydAkJCXh0X211bHRpcG9ydAotCi0jZW5kaWYgLypfSVA2VF9NVUxUSVBPUlRfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzVjYzdhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotI2lmbmRlZiBfSVA2VF9PV05FUl9ICi0jZGVmaW5lIF9JUDZUX09XTkVSX0gKLQotLyogbWF0Y2ggYW5kIGludmVydCBmbGFncyAqLwotI2RlZmluZSBJUDZUX09XTkVSX1VJRAkweDAxCi0jZGVmaW5lIElQNlRfT1dORVJfR0lECTB4MDIKLSNkZWZpbmUgSVA2VF9PV05FUl9QSUQJMHgwNAotI2RlZmluZSBJUDZUX09XTkVSX1NJRAkweDA4Ci0KLXN0cnVjdCBpcDZ0X293bmVyX2luZm8gewotICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOwotICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOwotICAgIF9fa2VybmVsX3BpZF90IHBpZDsKLSAgICBfX2tlcm5lbF9waWRfdCBzaWQ7Ci0gICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KLX07Ci0KLSNlbmRpZiAvKl9JUFRfT1dORVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3BoeXNkZXYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2MWMwYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotI2lmbmRlZiBfSVA2VF9QSFlTREVWX0gKLSNkZWZpbmUgX0lQNlRfUEhZU0RFVl9ICi0KLS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBvbGQgdXNlcnNwYWNlICovCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oPgotCi0jZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9JTgkJWFRfUEhZU0RFVl9PUF9JTgotI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfT1VUCQlYVF9QSFlTREVWX09QX09VVAotI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfQlJJREdFRAkJWFRfUEhZU0RFVl9PUF9CUklER0VECi0jZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9JU0lOCQlYVF9QSFlTREVWX09QX0lTSU4KLSNkZWZpbmUgSVA2VF9QSFlTREVWX09QX0lTT1VUCQlYVF9QSFlTREVWX09QX0lTT1VUCi0jZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9NQVNLCQlYVF9QSFlTREVWX09QX01BU0sKLQotI2RlZmluZSBpcDZ0X3BoeXNkZXZfaW5mbyB4dF9waHlzZGV2X2luZm8KLQotI2VuZGlmIC8qX0lQNlRfUEhZU0RFVl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9wb2xpY3kuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9wb2xpY3kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjNDQ5ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcG9saWN5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaWZuZGVmIF9JUDZUX1BPTElDWV9ICi0jZGVmaW5lIF9JUDZUX1BPTElDWV9ICi0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcG9saWN5Lmg+Ci0KLSNkZWZpbmUgSVA2VF9QT0xJQ1lfTUFYX0VMRU0JCVhUX1BPTElDWV9NQVhfRUxFTQotCi0vKiBpcDZ0X3BvbGljeV9mbGFncyAqLwotI2RlZmluZSBJUDZUX1BPTElDWV9NQVRDSF9JTgkJWFRfUE9MSUNZX01BVENIX0lOCi0jZGVmaW5lIElQNlRfUE9MSUNZX01BVENIX09VVAkJWFRfUE9MSUNZX01BVENIX09VVAotI2RlZmluZSBJUDZUX1BPTElDWV9NQVRDSF9OT05FCQlYVF9QT0xJQ1lfTUFUQ0hfTk9ORQotI2RlZmluZSBJUDZUX1BPTElDWV9NQVRDSF9TVFJJQ1QJWFRfUE9MSUNZX01BVENIX1NUUklDVAotCi0vKiBpcDZ0X3BvbGljeV9tb2RlcyAqLwotI2RlZmluZSBJUDZUX1BPTElDWV9NT0RFX1RSQU5TUE9SVAlYVF9QT0xJQ1lfTU9ERV9UUkFOU1BPUlQKLSNkZWZpbmUgSVA2VF9QT0xJQ1lfTU9ERV9UVU5ORUwJCVhUX1BPTElDWV9NT0RFX1RVTk5FTAotCi0jZGVmaW5lIGlwNnRfcG9saWN5X3NwZWMJCXh0X3BvbGljeV9zcGVjCi0jZGVmaW5lIGlwNnRfcG9saWN5X2FkZHIJCXh0X3BvbGljeV9hZGRyCi0jZGVmaW5lIGlwNnRfcG9saWN5X2VsZW0JCXh0X3BvbGljeV9lbGVtCi0jZGVmaW5lIGlwNnRfcG9saWN5X2luZm8JCXh0X3BvbGljeV9pbmZvCi0KLSNlbmRpZiAvKiBfSVA2VF9QT0xJQ1lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAppbmRleCA1YmEzOThlLi4wZmJlY2JiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGxpbmsuaApAQCAtMjE3LDEyICsyMTcsMTMgQEAKIAogc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sKIHsKLQlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwotCXN0cnVjdCBubG1zZ2hkcgkqbmxoOwotCWludAkJKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKLQlpbnQJCSgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKLQlpbnQJCWZhbWlseTsKLQlsb25nCQlhcmdzWzZdOworCXN0cnVjdCBza19idWZmCQkqc2tiOworCWNvbnN0IHN0cnVjdCBubG1zZ2hkcgkqbmxoOworCWludAkJCSgqZHVtcCkoc3RydWN0IHNrX2J1ZmYgKiBza2IsCisJCQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CisJaW50CQkJKCpkb25lKShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOworCWludAkJCWZhbWlseTsKKwlsb25nCQkJYXJnc1s2XTsKIH07CiAKIHN0cnVjdCBuZXRsaW5rX25vdGlmeQpAQCAtMjU4LDcgKzI1OSw3IEBACiAJTkxNU0dfTkVXKHNrYiwgcGlkLCBzZXEsIHR5cGUsIGxlbiwgMCkKIAogZXh0ZXJuIGludCBuZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQkgICAgICBpbnQgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayopLAogCQkJICAgICAgaW50ICgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sqKSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKaW5kZXggZGJlYTkzYi4uYThkNzFlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjExLmgKQEAgLTI0Miw2ICsyNDIsMjkgQEAKICAqIEBOTDgwMjExX0NNRF9MRUFWRV9JQlNTOiBMZWF2ZSB0aGUgSUJTUyAtLSBubyBzcGVjaWFsIGFyZ3VtZW50cywgdGhlIElCU1MgaXMKICAqCWRldGVybWluZWQgYnkgdGhlIG5ldHdvcmsgaW50ZXJmYWNlLgogICoKKyAqIEBOTDgwMjExX0NNRF9URVNUTU9ERTogdGVzdG1vZGUgY29tbWFuZCwgdGFrZXMgYSB3aXBoeSAob3IgaWZpbmRleCkgYXR0cmlidXRlCisgKgl0byBpZGVudGlmeSB0aGUgZGV2aWNlLCBhbmQgdGhlIFRFU1REQVRBIGJsb2IgYXR0cmlidXRlIHRvIHBhc3MgdGhyb3VnaAorICoJdG8gdGhlIGRyaXZlci4KKyAqCisgKiBATkw4MDIxMV9DTURfQ09OTkVDVDogY29ubmVjdGlvbiByZXF1ZXN0IGFuZCBub3RpZmljYXRpb247IHRoaXMgY29tbWFuZAorICoJcmVxdWVzdHMgdG8gY29ubmVjdCB0byBhIHNwZWNpZmllZCBuZXR3b3JrIGJ1dCB3aXRob3V0IHNlcGFyYXRpbmcKKyAqCWF1dGggYW5kIGFzc29jIHN0ZXBzLiBGb3IgdGhpcywgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgU1NJRCBpbiBhCisgKgklTkw4MDIxMV9BVFRSX1NTSUQgYXR0cmlidXRlLCBhbmQgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgYXNzb2NpYXRpb24KKyAqCUlFcyBpbiAlTkw4MDIxMV9BVFRSX0lFLCAlTkw4MDIxMV9BVFRSX0FVVEhfVFlQRSwgJU5MODAyMTFfQVRUUl9NQUMsCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgYW5kICVOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JULgorICoJSXQgaXMgYWxzbyBzZW50IGFzIGFuIGV2ZW50LCB3aXRoIHRoZSBCU1NJRCBhbmQgcmVzcG9uc2UgSUVzIHdoZW4gdGhlCisgKgljb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIG9yIGZhaWxlZCB0byBiZSBlc3RhYmxpc2hlZC4gVGhpcyBjYW4gYmUKKyAqCWRldGVybWluZWQgYnkgdGhlIFNUQVRVU19DT0RFIGF0dHJpYnV0ZS4KKyAqIEBOTDgwMjExX0NNRF9ST0FNOiByZXF1ZXN0IHRoYXQgdGhlIGNhcmQgcm9hbSAoY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCksCisgKglzZW50IGFzIGFuIGV2ZW50IHdoZW4gdGhlIGNhcmQvZHJpdmVyIHJvYW1lZCBieSBpdHNlbGYuCisgKiBATkw4MDIxMV9DTURfRElTQ09OTkVDVDogZHJvcCBhIGdpdmVuIGNvbm5lY3Rpb247IGFsc28gdXNlZCB0byBub3RpZnkKKyAqCXVzZXJzcGFjZSB0aGF0IGEgY29ubmVjdGlvbiB3YXMgZHJvcHBlZCBieSB0aGUgQVAgb3IgZHVlIHRvIG90aGVyCisgKglyZWFzb25zLCBmb3IgdGhpcyB0aGUgJU5MODAyMTFfQVRUUl9ESVNDT05ORUNURURfQllfQVAgYW5kCisgKgklTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFIGF0dHJpYnV0ZXMgYXJlIHVzZWQuCisgKgorICogQE5MODAyMTFfQ01EX1NFVF9XSVBIWV9ORVROUzogU2V0IGEgd2lwaHkncyBuZXRucy4gTm90ZSB0aGF0IGFsbCBkZXZpY2VzCisgKglhc3NvY2lhdGVkIHdpdGggdGhpcyB3aXBoeSBtdXN0IGJlIGRvd24gYW5kIHdpbGwgZm9sbG93LgorICoKICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTMxMCw2ICszMzMsMTQgQEAKIAlOTDgwMjExX0NNRF9KT0lOX0lCU1MsCiAJTkw4MDIxMV9DTURfTEVBVkVfSUJTUywKIAorCU5MODAyMTFfQ01EX1RFU1RNT0RFLAorCisJTkw4MDIxMV9DTURfQ09OTkVDVCwKKwlOTDgwMjExX0NNRF9ST0FNLAorCU5MODAyMTFfQ01EX0RJU0NPTk5FQ1QsCisKKwlOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlMsCisKIAkvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi8KIAogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwpAQCAtNDQ5LDEwICs0ODAsNiBAQAogICogQE5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTOiBuZXN0ZWQgYXR0cmlidXRlIHdpdGggZnJlcXVlbmNpZXMgKGluIE1IeikKICAqIEBOTDgwMjExX0FUVFJfU0NBTl9TU0lEUzogbmVzdGVkIGF0dHJpYnV0ZSB3aXRoIFNTSURzLCBsZWF2ZSBvdXQgZm9yIHBhc3NpdmUKICAqCXNjYW5uaW5nIGFuZCBpbmNsdWRlIGEgemVyby1sZW5ndGggU1NJRCAod2lsZGNhcmQpIGZvciB3aWxkY2FyZCBzY2FuCi0gKiBATkw4MDIxMV9BVFRSX1NDQU5fR0VORVJBVElPTjogdGhlIHNjYW4gZ2VuZXJhdGlvbiBpbmNyZWFzZXMgd2hlbmV2ZXIgdGhlCi0gKglzY2FuIHJlc3VsdCBsaXN0IGNoYW5nZXMgKEJTUyBleHBpcmVkIG9yIGFkZGVkKSBzbyB0aGF0IGFwcGxpY2F0aW9ucwotICoJY2FuIHZlcmlmeSB0aGF0IHRoZXkgZ290IGEgc2luZ2xlLCBjb25zaXN0ZW50IHNuYXBzaG90ICh3aGVuIGFsbCBkdW1wCi0gKgltZXNzYWdlcyBjYXJyaWVkIHRoZSBzYW1lIGdlbmVyYXRpb24gbnVtYmVyKQogICogQE5MODAyMTFfQVRUUl9CU1M6IHNjYW4gcmVzdWx0IEJTUwogICoKICAqIEBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUjogaW5kaWNhdGVzIHdobyByZXF1ZXN0ZWQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCkBAIC01MTEsNiArNTM4LDUyIEBACiAgKglhdXRob3JpemVkIGJ5IHVzZXIgc3BhY2UuIE90aGVyd2lzZSwgcG9ydCBpcyBtYXJrZWQgYXV0aG9yaXplZCBieQogICoJZGVmYXVsdCBpbiBzdGF0aW9uIG1vZGUuCiAgKgorICogQE5MODAyMTFfQVRUUl9URVNUREFUQTogVGVzdG1vZGUgZGF0YSBibG9iLCBwYXNzZWQgdGhyb3VnaCB0byB0aGUgZHJpdmVyLgorICoJV2UgcmVjb21tZW5kIHVzaW5nIG5lc3RlZCwgZHJpdmVyLXNwZWNpZmljIGF0dHJpYnV0ZXMgd2l0aGluIHRoaXMuCisgKgorICogQE5MODAyMTFfQVRUUl9ESVNDT05ORUNURURfQllfQVA6IEEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIERJU0NPTk5FQ1QKKyAqCWV2ZW50IHdhcyBkdWUgdG8gdGhlIEFQIGRpc2Nvbm5lY3RpbmcgdGhlIHN0YXRpb24sIGFuZCBub3QgZHVlIHRvCisgKglhIGxvY2FsIGRpc2Nvbm5lY3QgcmVxdWVzdC4KKyAqIEBOTDgwMjExX0FUVFJfU1RBVFVTX0NPREU6IFN0YXR1c0NvZGUgZm9yIHRoZSAlTkw4MDIxMV9DTURfQ09OTkVDVAorICoJZXZlbnQgKHUxNikKKyAqIEBOTDgwMjExX0FUVFJfUFJJVkFDWTogRmxhZyBhdHRyaWJ1dGUsIHVzZWQgd2l0aCBjb25uZWN0KCksIGluZGljYXRpbmcKKyAqCXRoYXQgcHJvdGVjdGVkIEFQcyBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0NJUEhFUlNfUEFJUldJU0U6IFVzZWQgd2l0aCBDT05ORUNUIGFuZCBBU1NPQ0lBVEUgdG8KKyAqCWluZGljYXRlIHdoaWNoIHVuaWNhc3Qga2V5IGNpcGhlcnMgd2lsbCBiZSB1c2VkIHdpdGggdGhlIGNvbm5lY3Rpb24KKyAqCShhbiBhcnJheSBvZiB1MzIpLgorICogQE5MODAyMTFfQVRUUl9DSVBIRVJfR1JPVVA6IFVzZWQgd2l0aCBDT05ORUNUIGFuZCBBU1NPQ0lBVEUgdG8gaW5kaWNhdGUKKyAqCXdoaWNoIGdyb3VwIGtleSBjaXBoZXIgd2lsbCBiZSB1c2VkIHdpdGggdGhlIGNvbm5lY3Rpb24gKGEgdTMyKS4KKyAqIEBOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TOiBVc2VkIHdpdGggQ09OTkVDVCBhbmQgQVNTT0NJQVRFIHRvIGluZGljYXRlCisgKgl3aGljaCBXUEEgdmVyc2lvbihzKSB0aGUgQVAgd2Ugd2FudCB0byBhc3NvY2lhdGUgd2l0aCBpcyB1c2luZworICoJKGEgdTMyIHdpdGggZmxhZ3MgZnJvbSAmZW51bSBubDgwMjExX3dwYV92ZXJzaW9ucykuCisgKiBATkw4MDIxMV9BVFRSX0FLTV9TVUlURVM6IFVzZWQgd2l0aCBDT05ORUNUIGFuZCBBU1NPQ0lBVEUgdG8gaW5kaWNhdGUKKyAqCXdoaWNoIGtleSBtYW5hZ2VtZW50IGFsZ29yaXRobShzKSB0byB1c2UgKGFuIGFycmF5IG9mIHUzMikuCisgKgorICogQE5MODAyMTFfQVRUUl9SRVFfSUU6IChSZSlhc3NvY2lhdGlvbiByZXF1ZXN0IGluZm9ybWF0aW9uIGVsZW1lbnRzIGFzCisgKglzZW50IG91dCBieSB0aGUgY2FyZCwgZm9yIFJPQU0gYW5kIHN1Y2Nlc3NmdWwgQ09OTkVDVCBldmVudHMuCisgKiBATkw4MDIxMV9BVFRSX1JFU1BfSUU6IChSZSlhc3NvY2lhdGlvbiByZXNwb25zZSBpbmZvcm1hdGlvbiBlbGVtZW50cyBhcworICoJc2VudCBieSBwZWVyLCBmb3IgUk9BTSBhbmQgc3VjY2Vzc2Z1bCBDT05ORUNUIGV2ZW50cy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1BSRVZfQlNTSUQ6IHByZXZpb3VzIEJTU0lELCB0byBiZSB1c2VkIGJ5IGluIEFTU09DSUFURQorICoJY29tbWFuZHMgdG8gc3BlY2lmeSB1c2luZyBhIHJlYXNzb2NpYXRlIGZyYW1lCisgKgorICogQE5MODAyMTFfQVRUUl9LRVk6IGtleSBpbmZvcm1hdGlvbiBpbiBhIG5lc3RlZCBhdHRyaWJ1dGUgd2l0aAorICoJJU5MODAyMTFfS0VZXyogc3ViLWF0dHJpYnV0ZXMKKyAqIEBOTDgwMjExX0FUVFJfS0VZUzogYXJyYXkgb2Yga2V5cyBmb3Igc3RhdGljIFdFUCBrZXlzIGZvciBjb25uZWN0KCkKKyAqCWFuZCBqb2luX2lic3MoKSwga2V5IGluZm9ybWF0aW9uIGlzIGluIGEgbmVzdGVkIGF0dHJpYnV0ZSBlYWNoCisgKgl3aXRoICVOTDgwMjExX0tFWV8qIHN1Yi1hdHRyaWJ1dGVzCisgKgorICogQE5MODAyMTFfQVRUUl9QSUQ6IFByb2Nlc3MgSUQgb2YgYSBuZXR3b3JrIG5hbWVzcGFjZS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0dFTkVSQVRJT046IFVzZWQgdG8gaW5kaWNhdGUgY29uc2lzdGVudCBzbmFwc2hvdHMgZm9yCisgKglkdW1wcy4gVGhpcyBudW1iZXIgaW5jcmVhc2VzIHdoZW5ldmVyIHRoZSBvYmplY3QgbGlzdCBiZWluZworICoJZHVtcGVkIGNoYW5nZXMsIGFuZCBhcyBzdWNoIHVzZXJzcGFjZSBjYW4gdmVyaWZ5IHRoYXQgaXQgaGFzCisgKglvYnRhaW5lZCBhIGNvbXBsZXRlIGFuZCBjb25zaXN0ZW50IHNuYXBzaG90IGJ5IHZlcmlmeWluZyB0aGF0CisgKglhbGwgZHVtcCBtZXNzYWdlcyBjb250YWluIHRoZSBzYW1lIGdlbmVyYXRpb24gbnVtYmVyLiBJZiBpdAorICoJY2hhbmdlZCB0aGVuIHRoZSBsaXN0IGNoYW5nZWQgYW5kIHRoZSBkdW1wIHNob3VsZCBiZSByZXBlYXRlZAorICoJY29tcGxldGVseSBmcm9tIHNjcmF0Y2guCisgKgogICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC01ODIsNyArNjU1LDcgQEAKIAogCU5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTLAogCU5MODAyMTFfQVRUUl9TQ0FOX1NTSURTLAotCU5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04sCisJTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04sIC8qIHJlcGxhY2VzIG9sZCBTQ0FOX0dFTkVSQVRJT04gKi8KIAlOTDgwMjExX0FUVFJfQlNTLAogCiAJTkw4MDIxMV9BVFRSX1JFR19JTklUSUFUT1IsCkBAIC02MTksMTYgKzY5Miw0MiBAQAogCiAJTkw4MDIxMV9BVFRSX0NPTlRST0xfUE9SVCwKIAorCU5MODAyMTFfQVRUUl9URVNUREFUQSwKKworCU5MODAyMTFfQVRUUl9QUklWQUNZLAorCisJTkw4MDIxMV9BVFRSX0RJU0NPTk5FQ1RFRF9CWV9BUCwKKwlOTDgwMjExX0FUVFJfU1RBVFVTX0NPREUsCisKKwlOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFU19QQUlSV0lTRSwKKwlOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFX0dST1VQLAorCU5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMsCisJTkw4MDIxMV9BVFRSX0FLTV9TVUlURVMsCisKKwlOTDgwMjExX0FUVFJfUkVRX0lFLAorCU5MODAyMTFfQVRUUl9SRVNQX0lFLAorCisJTkw4MDIxMV9BVFRSX1BSRVZfQlNTSUQsCisKKwlOTDgwMjExX0FUVFJfS0VZLAorCU5MODAyMTFfQVRUUl9LRVlTLAorCisJTkw4MDIxMV9BVFRSX1BJRCwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKIAlOTDgwMjExX0FUVFJfTUFYID0gX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCAtIDEKIH07CiAKKy8qIHNvdXJjZS1sZXZlbCBBUEkgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OCisKIC8qCiAgKiBBbGxvdyB1c2VyIHNwYWNlIHByb2dyYW1zIHRvIHVzZSAjaWZkZWYgb24gbmV3IGF0dHJpYnV0ZXMgYnkgZGVmaW5pbmcgdGhlbQogICogaGVyZQogICovCisjZGVmaW5lIE5MODAyMTFfQ01EX0NPTk5FQ1QgTkw4MDIxMV9DTURfQ09OTkVDVAogI2RlZmluZSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWSBOTDgwMjExX0FUVFJfSFRfQ0FQQUJJTElUWQogI2RlZmluZSBOTDgwMjExX0FUVFJfQlNTX0JBU0lDX1JBVEVTIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMgTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVMKQEAgLTY0Miw2ICs3NDEsMTIgQEAKICNkZWZpbmUgTkw4MDIxMV9BVFRSX1NTSUQgTkw4MDIxMV9BVFRSX1NTSUQKICNkZWZpbmUgTkw4MDIxMV9BVFRSX0FVVEhfVFlQRSBOTDgwMjExX0FUVFJfQVVUSF9UWVBFCiAjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERSBOTDgwMjExX0FUVFJfUkVBU09OX0NPREUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0UgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0UKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUCBOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFX0dST1VQCisjZGVmaW5lIE5MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlMgTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OUworI2RlZmluZSBOTDgwMjExX0FUVFJfQUtNX1NVSVRFUyBOTDgwMjExX0FUVFJfQUtNX1NVSVRFUworI2RlZmluZSBOTDgwMjExX0FUVFJfS0VZIE5MODAyMTFfQVRUUl9LRVkKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0tFWVMgTkw4MDIxMV9BVFRSX0tFWVMKIAogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JBVEVTCQkJMzIKICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SRUdfUlVMRVMJCTMyCkBAIC02NTAsNiArNzU1LDkgQEAKICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkJMjQKICNkZWZpbmUgTkw4MDIxMV9IVF9DQVBBQklMSVRZX0xFTgkJMjYKIAorI2RlZmluZSBOTDgwMjExX01BWF9OUl9DSVBIRVJfU1VJVEVTCQk1CisjZGVmaW5lIE5MODAyMTFfTUFYX05SX0FLTV9TVUlURVMJCTIKKwogLyoqCiAgKiBlbnVtIG5sODAyMTFfaWZ0eXBlIC0gKHZpcnR1YWwpIGludGVyZmFjZSB0eXBlcwogICoKQEAgLTExNjgsNiArMTI3Niw3IEBACiAgKglpbiBtQm0gKDEwMCAqIGRCbSkgKHMzMikKICAqIEBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDOiBzaWduYWwgc3RyZW5ndGggb2YgdGhlIHByb2JlIHJlc3BvbnNlL2JlYWNvbgogICoJaW4gdW5zcGVjaWZpZWQgdW5pdHMsIHNjYWxlZCB0byAwLi4xMDAgKHU4KQorICogQE5MODAyMTFfQlNTX1NUQVRVUzogc3RhdHVzLCBpZiB0aGlzIEJTUyBpcyAidXNlZCIKICAqIEBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1Q6IGludGVybmFsCiAgKiBATkw4MDIxMV9CU1NfTUFYOiBoaWdoZXN0IEJTUyBhdHRyaWJ1dGUKICAqLwpAQCAtMTE4MSw2ICsxMjkwLDcgQEAKIAlOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUywKIAlOTDgwMjExX0JTU19TSUdOQUxfTUJNLAogCU5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsCisJTkw4MDIxMV9CU1NfU1RBVFVTLAogCiAJLyoga2VlcCBsYXN0ICovCiAJX19OTDgwMjExX0JTU19BRlRFUl9MQVNULApAQCAtMTE4OCwxOCArMTI5OCwzNyBAQAogfTsKIAogLyoqCisgKiBlbnVtIG5sODAyMTFfYnNzX3N0YXR1cyAtIEJTUyAic3RhdHVzIgorICovCitlbnVtIG5sODAyMTFfYnNzX3N0YXR1cyB7CisJTkw4MDIxMV9CU1NfU1RBVFVTX0FVVEhFTlRJQ0FURUQsCisJTkw4MDIxMV9CU1NfU1RBVFVTX0FTU09DSUFURUQsCisJTkw4MDIxMV9CU1NfU1RBVFVTX0lCU1NfSk9JTkVELAorfTsKKworLyoqCiAgKiBlbnVtIG5sODAyMTFfYXV0aF90eXBlIC0gQXV0aGVudGljYXRpb25UeXBlCiAgKgogICogQE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06IE9wZW4gU3lzdGVtIGF1dGhlbnRpY2F0aW9uCiAgKiBATkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOiBTaGFyZWQgS2V5IGF1dGhlbnRpY2F0aW9uIChXRVAgb25seSkKICAqIEBOTDgwMjExX0FVVEhUWVBFX0ZUOiBGYXN0IEJTUyBUcmFuc2l0aW9uIChJRUVFIDgwMi4xMXIpCiAgKiBATkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDogTmV0d29yayBFQVAgKHNvbWUgQ2lzY28gQVBzIGFuZCBtYWlubHkgTEVBUCkKKyAqIEBfX05MODAyMTFfQVVUSFRZUEVfTlVNOiBpbnRlcm5hbAorICogQE5MODAyMTFfQVVUSFRZUEVfTUFYOiBtYXhpbXVtIHZhbGlkIGF1dGggYWxnb3JpdGhtCisgKiBATkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUM6IGRldGVybWluZSBhdXRvbWF0aWNhbGx5IChpZiBuZWNlc3NhcnkgYnkKKyAqCXRyeWluZyBtdWx0aXBsZSB0aW1lcyk7IHRoaXMgaXMgaW52YWxpZCBpbiBuZXRsaW5rIC0tIGxlYXZlIG91dAorICoJdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBvbiBDT05ORUNUIGNvbW1hbmRzLgogICovCiBlbnVtIG5sODAyMTFfYXV0aF90eXBlIHsKIAlOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNLAogCU5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWSwKIAlOTDgwMjExX0FVVEhUWVBFX0ZULAogCU5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVAsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlfX05MODAyMTFfQVVUSFRZUEVfTlVNLAorCU5MODAyMTFfQVVUSFRZUEVfTUFYID0gX19OTDgwMjExX0FVVEhUWVBFX05VTSAtIDEsCisJTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUMKIH07CiAKIC8qKgpAQCAtMTIyNCw0ICsxMzUzLDM5IEBACiAJTkw4MDIxMV9NRlBfUkVRVUlSRUQsCiB9OwogCitlbnVtIG5sODAyMTFfd3BhX3ZlcnNpb25zIHsKKwlOTDgwMjExX1dQQV9WRVJTSU9OXzEgPSAxIDw8IDAsCisJTkw4MDIxMV9XUEFfVkVSU0lPTl8yID0gMSA8PCAxLAorfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfa2V5X2F0dHJpYnV0ZXMgLSBrZXkgYXR0cmlidXRlcworICogQF9fTkw4MDIxMV9LRVlfSU5WQUxJRDogaW52YWxpZAorICogQE5MODAyMTFfS0VZX0RBVEE6ICh0ZW1wb3JhbCkga2V5IGRhdGE7IGZvciBUS0lQIHRoaXMgY29uc2lzdHMgb2YKKyAqCTE2IGJ5dGVzIGVuY3J5cHRpb24ga2V5IGZvbGxvd2VkIGJ5IDggYnl0ZXMgZWFjaCBmb3IgVFggYW5kIFJYIE1JQworICoJa2V5cworICogQE5MODAyMTFfS0VZX0lEWDoga2V5IElEICh1OCwgMC0zKQorICogQE5MODAyMTFfS0VZX0NJUEhFUjoga2V5IGNpcGhlciBzdWl0ZSAodTMyLCBhcyBkZWZpbmVkIGJ5IElFRUUgODAyLjExCisgKglzZWN0aW9uIDcuMy4yLjI1LjEsIGUuZy4gMHgwMDBGQUMwNCkKKyAqIEBOTDgwMjExX0tFWV9TRVE6IHRyYW5zbWl0IGtleSBzZXF1ZW5jZSBudW1iZXIgKElWL1BOKSBmb3IgVEtJUCBhbmQKKyAqCUNDTVAga2V5cywgZWFjaCBzaXggYnl0ZXMgaW4gbGl0dGxlIGVuZGlhbgorICogQE5MODAyMTFfS0VZX0RFRkFVTFQ6IGZsYWcgaW5kaWNhdGluZyBkZWZhdWx0IGtleQorICogQE5MODAyMTFfS0VZX0RFRkFVTFRfTUdNVDogZmxhZyBpbmRpY2F0aW5nIGRlZmF1bHQgbWFuYWdlbWVudCBrZXkKKyAqIEBfX05MODAyMTFfS0VZX0FGVEVSX0xBU1Q6IGludGVybmFsCisgKiBATkw4MDIxMV9LRVlfTUFYOiBoaWdoZXN0IGtleSBhdHRyaWJ1dGUKKyAqLworZW51bSBubDgwMjExX2tleV9hdHRyaWJ1dGVzIHsKKwlfX05MODAyMTFfS0VZX0lOVkFMSUQsCisJTkw4MDIxMV9LRVlfREFUQSwKKwlOTDgwMjExX0tFWV9JRFgsCisJTkw4MDIxMV9LRVlfQ0lQSEVSLAorCU5MODAyMTFfS0VZX1NFUSwKKwlOTDgwMjExX0tFWV9ERUZBVUxULAorCU5MODAyMTFfS0VZX0RFRkFVTFRfTUdNVCwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9LRVlfQUZURVJfTEFTVCwKKwlOTDgwMjExX0tFWV9NQVggPSBfX05MODAyMTFfS0VZX0FGVEVSX0xBU1QgLSAxCit9OworCiAjZW5kaWYgLyogX19MSU5VWF9OTDgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmw4MDIxNTQuaCBiL2luY2x1ZGUvbGludXgvbmw4MDIxNTQuaAppbmRleCAyY2RhMDBjLi5iN2Q5NDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25sODAyMTU0LmgKKysrIGIvaW5jbHVkZS9saW51eC9ubDgwMjE1NC5oCkBAIC02NCwxMiArNjQsMTQgQEAKIAlJRUVFODAyMTU0X0FUVFJfQ09PUkRfUkVBTElHTiwKIAlJRUVFODAyMTU0X0FUVFJfU0VDLAogCisJSUVFRTgwMjE1NF9BVFRSX1BBR0UsCisKIAlfX0lFRUU4MDIxNTRfQVRUUl9NQVgsCiB9OwogCiAjZGVmaW5lIElFRUU4MDIxNTRfQVRUUl9NQVggKF9fSUVFRTgwMjE1NF9BVFRSX01BWCAtIDEpCiAKLWV4dGVybiBzdHJ1Y3QgbmxhX3BvbGljeSBpZWVlODAyMTU0X3BvbGljeVtdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGllZWU4MDIxNTRfcG9saWN5W107CiAKIC8qIGNvbW1hbmRzICovCiAvKiBSRVEgc2hvdWxkIGJlIHJlc3BvbmRlZCB3aXRoIENPTkYKQEAgLTExMSw2ICsxMTMsOCBAQAogCUlFRUU4MDIxNTRfUlhfRU5BQkxFX1JFUSwgLyogTm90IHN1cHBvcnRlZCB5ZXQgKi8KIAlJRUVFODAyMTU0X1JYX0VOQUJMRV9DT05GLCAvKiBOb3Qgc3VwcG9ydGVkIHlldCAqLwogCisJSUVFRTgwMjE1NF9MSVNUX0lGQUNFLAorCiAJX19JRUVFODAyMTU0X0NNRF9NQVgsCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGM4ZmRjYWQuLjU1NWE4MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC0xOTg4LDYgKzE5ODgsOCBAQAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0FNU1VORwkJMHgxNDRkCiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9HSUdBQllURQkJMHgxNDU4CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUJJVAkJMHgxNDY4CiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NWVJJQ09NCQkweDE0YzEKQEAgLTIwNjYsNyArMjA2OCw2IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODdNCTB4MTY5MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgyCTB4MTY5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg0CTB4MTY5OAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg1CTB4MTY5OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg2CTB4MTY5YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3CTB4MTY5YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg4CTB4MTY5YwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHUtZGVmcy5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUtZGVmcy5oCmluZGV4IDY4NDM4ZTEuLjA3NjE0OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LWRlZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmgKQEAgLTY2LDE0ICs2NiwyNCBAQAogCURFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgUEVSX0NQVV9TSEFSRURfQUxJR05FRF9TRUNUSU9OKSBcCiAJX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAogCisjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9BTElHTkVEKHR5cGUsIG5hbWUpCQkJCVwKKwlERUNMQVJFX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCBQRVJfQ1BVX0FMSUdORURfU0VDVElPTikJXAorCV9fX19jYWNoZWxpbmVfYWxpZ25lZAorCisjZGVmaW5lIERFRklORV9QRVJfQ1BVX0FMSUdORUQodHlwZSwgbmFtZSkJCQkJXAorCURFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgUEVSX0NQVV9BTElHTkVEX1NFQ1RJT04pCVwKKwlfX19fY2FjaGVsaW5lX2FsaWduZWQKKwogLyoKICAqIERlY2xhcmF0aW9uL2RlZmluaXRpb24gdXNlZCBmb3IgcGVyLUNQVSB2YXJpYWJsZXMgdGhhdCBtdXN0IGJlIHBhZ2UgYWxpZ25lZC4KICAqLwotI2RlZmluZSBERUNMQVJFX1BFUl9DUFVfUEFHRV9BTElHTkVEKHR5cGUsIG5hbWUpCQkJCVwKLQlERUNMQVJFX1BFUl9DUFVfU0VDVElPTih0eXBlLCBuYW1lLCAiLnBhZ2VfYWxpZ25lZCIpCisjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9QQUdFX0FMSUdORUQodHlwZSwgbmFtZSkJCQlcCisJREVDTEFSRV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgIi5wYWdlX2FsaWduZWQiKQkJXAorCV9fYWxpZ25lZChQQUdFX1NJWkUpCiAKICNkZWZpbmUgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKHR5cGUsIG5hbWUpCQkJCVwKLQlERUZJTkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsICIucGFnZV9hbGlnbmVkIikKKwlERUZJTkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsICIucGFnZV9hbGlnbmVkIikJCVwKKwlfX2FsaWduZWQoUEFHRV9TSVpFKQogCiAvKgogICogSW50ZXJtb2R1bGUgZXhwb3J0cyBmb3IgcGVyLUNQVSB2YXJpYWJsZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bob25ldC5oIGIvaW5jbHVkZS9saW51eC9waG9uZXQuaAppbmRleCBlZTVlM2M5Li4xZWY1YTA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bob25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGhvbmV0LmgKQEAgLTk5LDYgKzk5LDkgQEAKIAlfX3U4IHNwbl96ZXJvW3NpemVvZihzdHJ1Y3Qgc29ja2FkZHIpIC0gc2l6ZW9mKHNhX2ZhbWlseV90KSAtIDNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKy8qIFdlbGwga25vd24gYWRkcmVzcyAqLworI2RlZmluZSBQTl9ERVZfUEMJMHgxMAorCiBzdGF0aWMgaW5saW5lIF9fdTE2IHBuX29iamVjdChfX3U4IGFkZHIsIF9fdTE2IHBvcnQpCiB7CiAJcmV0dXJuIChhZGRyIDw8IDgpIHwgKHBvcnQgJiAweDNmZik7CkBAIC0xNzAsNCArMTczLDIxIEBACiAJcmV0dXJuIHNwbi0+c3BuX3Jlc291cmNlOwogfQogCisvKiBQaG9uZXQgZGV2aWNlIGlvY3RsIHJlcXVlc3RzICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBTSU9DUE5HQVVUT0NPTkYJCShTSU9DREVWUFJJVkFURSArIDApCisKK3N0cnVjdCBpZl9waG9uZXRfYXV0b2NvbmYgeworCXVpbnQ4X3QgZGV2aWNlOworfTsKKworc3RydWN0IGlmX3Bob25ldF9yZXEgeworCWNoYXIgaWZyX3Bob25ldF9uYW1lWzE2XTsKKwl1bmlvbiB7CisJCXN0cnVjdCBpZl9waG9uZXRfYXV0b2NvbmYgaWZydV9waG9uZXRfYXV0b2NvbmY7CisJfSBpZnJfaWZydTsKK307CisjZGVmaW5lIGlmcl9waG9uZXRfYXV0b2NvbmYgaWZyX2lmcnUuaWZydV9waG9uZXRfYXV0b2NvbmYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggOGRjNTEyMy4uM2M2Njc1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC0yMiw2ICsyMiw5IEBACiAJc3RydWN0IHJlc291cmNlCSogcmVzb3VyY2U7CiAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkCSppZF9lbnRyeTsKKworCS8qIGFyY2ggc3BlY2lmaWMgYWRkaXRpb25zICovCisJc3RydWN0IHBkZXZfYXJjaGRhdGEJYXJjaGRhdGE7CiB9OwogCiAjZGVmaW5lIHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldikJKChwZGV2KS0+aWRfZW50cnkpCkBAIC01Nyw4ICs2MCw2IEBACiAJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIAlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0JaW50ICgqc3VzcGVuZF9sYXRlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0JaW50ICgqcmVzdW1lX2Vhcmx5KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCWludCAoKnJlc3VtZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWRfdGFibGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggYjNmNzQ3Ni4uM2I3ZTA0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMjIsNiArMjIsMTAgQEAKICNkZWZpbmUgX0xJTlVYX1BNX0gKIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAvKgogICogQ2FsbGJhY2tzIGZvciBwbGF0Zm9ybSBkcml2ZXJzIHRvIGltcGxlbWVudC4KQEAgLTE2NSw2ICsxNjksMjggQEAKICAqIEl0IGlzIGFsbG93ZWQgdG8gdW5yZWdpc3RlciBkZXZpY2VzIHdoaWxlIHRoZSBhYm92ZSBjYWxsYmFja3MgYXJlIGJlaW5nCiAgKiBleGVjdXRlZC4gIEhvd2V2ZXIsIGl0IGlzIG5vdCBhbGxvd2VkIHRvIHVucmVnaXN0ZXIgYSBkZXZpY2UgZnJvbSB3aXRoaW4gYW55CiAgKiBvZiBpdHMgb3duIGNhbGxiYWNrcy4KKyAqCisgKiBUaGVyZSBhbHNvIGFyZSB0aGUgZm9sbG93aW5nIGNhbGxiYWNrcyByZWxhdGVkIHRvIHJ1bi10aW1lIHBvd2VyIG1hbmFnZW1lbnQKKyAqIG9mIGRldmljZXM6CisgKgorICogQHJ1bnRpbWVfc3VzcGVuZDogUHJlcGFyZSB0aGUgZGV2aWNlIGZvciBhIGNvbmRpdGlvbiBpbiB3aGljaCBpdCB3b24ndCBiZQorICoJYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBDUFUocykgYW5kIFJBTSBkdWUgdG8gcG93ZXIgbWFuYWdlbWVudC4KKyAqCVRoaXMgbmVlZCBub3QgbWVhbiB0aGF0IHRoZSBkZXZpY2Ugc2hvdWxkIGJlIHB1dCBpbnRvIGEgbG93IHBvd2VyIHN0YXRlLgorICoJRm9yIGV4YW1wbGUsIGlmIHRoZSBkZXZpY2UgaXMgYmVoaW5kIGEgbGluayB3aGljaCBpcyBhYm91dCB0byBiZSB0dXJuZWQKKyAqCW9mZiwgdGhlIGRldmljZSBtYXkgcmVtYWluIGF0IGZ1bGwgcG93ZXIuICBJZiB0aGUgZGV2aWNlIGRvZXMgZ28gdG8gbG93CisgKglwb3dlciBhbmQgaWYgZGV2aWNlX21heV93YWtldXAoZGV2KSBpcyB0cnVlLCByZW1vdGUgd2FrZS11cCAoaS5lLiwgYQorICoJaGFyZHdhcmUgbWVjaGFuaXNtIGFsbG93aW5nIHRoZSBkZXZpY2UgdG8gcmVxdWVzdCBhIGNoYW5nZSBvZiBpdHMgcG93ZXIKKyAqCXN0YXRlLCBzdWNoIGFzIFBDSSBQTUUpIHNob3VsZCBiZSBlbmFibGVkIGZvciBpdC4KKyAqCisgKiBAcnVudGltZV9yZXN1bWU6IFB1dCB0aGUgZGV2aWNlIGludG8gdGhlIGZ1bGx5IGFjdGl2ZSBzdGF0ZSBpbiByZXNwb25zZSB0byBhCisgKgl3YWtlLXVwIGV2ZW50IGdlbmVyYXRlZCBieSBoYXJkd2FyZSBvciBhdCB0aGUgcmVxdWVzdCBvZiBzb2Z0d2FyZS4gIElmCisgKgluZWNlc3NhcnksIHB1dCB0aGUgZGV2aWNlIGludG8gdGhlIGZ1bGwgcG93ZXIgc3RhdGUgYW5kIHJlc3RvcmUgaXRzCisgKglyZWdpc3RlcnMsIHNvIHRoYXQgaXQgaXMgZnVsbHkgb3BlcmF0aW9uYWwuCisgKgorICogQHJ1bnRpbWVfaWRsZTogRGV2aWNlIGFwcGVhcnMgdG8gYmUgaW5hY3RpdmUgYW5kIGl0IG1pZ2h0IGJlIHB1dCBpbnRvIGEgbG93CisgKglwb3dlciBzdGF0ZSBpZiBhbGwgb2YgdGhlIG5lY2Vzc2FyeSBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuICBDaGVjaworICoJdGhlc2UgY29uZGl0aW9ucyBhbmQgaGFuZGxlIHRoZSBkZXZpY2UgYXMgYXBwcm9wcmlhdGUsIHBvc3NpYmx5IHF1ZXVlaW5nCisgKglhIHN1c3BlbmQgcmVxdWVzdCBmb3IgaXQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQgYnkgdGhlIFBNIGNvcmUuCiAgKi8KIAogc3RydWN0IGRldl9wbV9vcHMgewpAQCAtMTgyLDggKzIwOCwyNSBAQAogCWludCAoKnRoYXdfbm9pcnEpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqcG93ZXJvZmZfbm9pcnEpKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqcmVzdG9yZV9ub2lycSkoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCpydW50aW1lX3N1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqcnVudGltZV9yZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldik7CisJaW50ICgqcnVudGltZV9pZGxlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogfTsKIAorLyoKKyAqIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgc2FtZSBzdXNwZW5kIGFuZCByZXN1bWUgY2FsbGJhY2tzIGZvciBzdXNwZW5kCisgKiB0byBSQU0gYW5kIGhpYmVybmF0aW9uLgorICovCisjZGVmaW5lIFNJTVBMRV9ERVZfUE1fT1BTKG5hbWUsIHN1c3BlbmRfZm4sIHJlc3VtZV9mbikgXAorc3RydWN0IGRldl9wbV9vcHMgbmFtZSA9IHsgXAorCS5zdXNwZW5kID0gc3VzcGVuZF9mbiwgXAorCS5yZXN1bWUgPSByZXN1bWVfZm4sIFwKKwkuZnJlZXplID0gc3VzcGVuZF9mbiwgXAorCS50aGF3ID0gcmVzdW1lX2ZuLCBcCisJLnBvd2Vyb2ZmID0gc3VzcGVuZF9mbiwgXAorCS5yZXN0b3JlID0gcmVzdW1lX2ZuLCBcCit9CisKIC8qKgogICogUE1fRVZFTlRfIG1lc3NhZ2VzCiAgKgpAQCAtMzE1LDE0ICszNTgsODAgQEAKIAlEUE1fT0ZGX0lSUSwKIH07CiAKKy8qKgorICogRGV2aWNlIHJ1bi10aW1lIHBvd2VyIG1hbmFnZW1lbnQgc3RhdHVzLgorICoKKyAqIFRoZXNlIHN0YXR1cyBsYWJlbHMgYXJlIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgUE0gY29yZSB0byBpbmRpY2F0ZSB0aGUKKyAqIGN1cnJlbnQgc3RhdHVzIG9mIGEgZGV2aWNlIHdpdGggcmVzcGVjdCB0byB0aGUgUE0gY29yZSBvcGVyYXRpb25zLiAgVGhleSBkbworICogbm90IHJlZmxlY3QgdGhlIGFjdHVhbCBwb3dlciBzdGF0ZSBvZiB0aGUgZGV2aWNlIG9yIGl0cyBzdGF0dXMgYXMgc2VlbiBieSB0aGUKKyAqIGRyaXZlci4KKyAqCisgKiBSUE1fQUNUSVZFCQlEZXZpY2UgaXMgZnVsbHkgb3BlcmF0aW9uYWwuICBJbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlCisgKgkJCWJ1cyB0eXBlJ3MgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIGhhcyBjb21wbGV0ZWQKKyAqCQkJc3VjY2Vzc2Z1bGx5LgorICoKKyAqIFJQTV9TVVNQRU5ERUQJRGV2aWNlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3N1c3BlbmQoKSBjYWxsYmFjayBoYXMKKyAqCQkJY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gIFRoZSBkZXZpY2UgaXMgcmVnYXJkZWQgYXMKKyAqCQkJc3VzcGVuZGVkLgorICoKKyAqIFJQTV9SRVNVTUlORwkJRGV2aWNlIGJ1cyB0eXBlJ3MgLT5ydW50aW1lX3Jlc3VtZSgpIGNhbGxiYWNrIGlzIGJlaW5nCisgKgkJCWV4ZWN1dGVkLgorICoKKyAqIFJQTV9TVVNQRU5ESU5HCURldmljZSBidXMgdHlwZSdzIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgaXMgYmVpbmcKKyAqCQkJZXhlY3V0ZWQuCisgKi8KKworZW51bSBycG1fc3RhdHVzIHsKKwlSUE1fQUNUSVZFID0gMCwKKwlSUE1fUkVTVU1JTkcsCisJUlBNX1NVU1BFTkRFRCwKKwlSUE1fU1VTUEVORElORywKK307CisKKy8qKgorICogRGV2aWNlIHJ1bi10aW1lIHBvd2VyIG1hbmFnZW1lbnQgcmVxdWVzdCB0eXBlcy4KKyAqCisgKiBSUE1fUkVRX05PTkUJCURvIG5vdGhpbmcuCisgKgorICogUlBNX1JFUV9JRExFCQlSdW4gdGhlIGRldmljZSBidXMgdHlwZSdzIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2sKKyAqCisgKiBSUE1fUkVRX1NVU1BFTkQJUnVuIHRoZSBkZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrCisgKgorICogUlBNX1JFUV9SRVNVTUUJUnVuIHRoZSBkZXZpY2UgYnVzIHR5cGUncyAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sKKyAqLworCitlbnVtIHJwbV9yZXF1ZXN0IHsKKwlSUE1fUkVRX05PTkUgPSAwLAorCVJQTV9SRVFfSURMRSwKKwlSUE1fUkVRX1NVU1BFTkQsCisJUlBNX1JFUV9SRVNVTUUsCit9OworCiBzdHJ1Y3QgZGV2X3BtX2luZm8gewogCXBtX21lc3NhZ2VfdAkJcG93ZXJfc3RhdGU7Ci0JdW5zaWduZWQJCWNhbl93YWtldXA6MTsKLQl1bnNpZ25lZAkJc2hvdWxkX3dha2V1cDoxOworCXVuc2lnbmVkIGludAkJY2FuX3dha2V1cDoxOworCXVuc2lnbmVkIGludAkJc2hvdWxkX3dha2V1cDoxOwogCWVudW0gZHBtX3N0YXRlCQlzdGF0dXM7CQkvKiBPd25lZCBieSB0aGUgUE0gY29yZSAqLwotI2lmZGVmCUNPTkZJR19QTV9TTEVFUAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAogCXN0cnVjdCBsaXN0X2hlYWQJZW50cnk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCXN0cnVjdCB0aW1lcl9saXN0CXN1c3BlbmRfdGltZXI7CisJdW5zaWduZWQgbG9uZwkJdGltZXJfZXhwaXJlczsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X3F1ZXVlOworCXNwaW5sb2NrX3QJCWxvY2s7CisJYXRvbWljX3QJCXVzYWdlX2NvdW50OworCWF0b21pY190CQljaGlsZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQJCWRpc2FibGVfZGVwdGg6MzsKKwl1bnNpZ25lZCBpbnQJCWlnbm9yZV9jaGlsZHJlbjoxOworCXVuc2lnbmVkIGludAkJaWRsZV9ub3RpZmljYXRpb246MTsKKwl1bnNpZ25lZCBpbnQJCXJlcXVlc3RfcGVuZGluZzoxOworCXVuc2lnbmVkIGludAkJZGVmZXJyZWRfcmVzdW1lOjE7CisJZW51bSBycG1fcmVxdWVzdAlyZXF1ZXN0OworCWVudW0gcnBtX3N0YXR1cwkJcnVudGltZV9zdGF0dXM7CisJaW50CQkJcnVudGltZV9lcnJvcjsKKyNlbmRpZgogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwODcwNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogcG1fcnVudGltZS5oIC0gRGV2aWNlIHJ1bi10aW1lIHBvd2VyIG1hbmFnZW1lbnQgaGVscGVyIGZ1bmN0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKi8KKworI2lmbmRlZiBfTElOVVhfUE1fUlVOVElNRV9ICisjZGVmaW5lIF9MSU5VWF9QTV9SVU5USU1FX0gKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnBtX3dxOworCitleHRlcm4gaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fcmVxdWVzdF9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX3NjaGVkdWxlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpOworZXh0ZXJuIGludCBwbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBfX3BtX3J1bnRpbWVfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBzeW5jKTsKK2V4dGVybiBpbnQgX19wbV9ydW50aW1lX3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgc3luYyk7CitleHRlcm4gaW50IF9fcG1fcnVudGltZV9zZXRfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHN0YXR1cyk7CitleHRlcm4gaW50IHBtX3J1bnRpbWVfYmFycmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcG1fcnVudGltZV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIF9fcG1fcnVudGltZV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBjaGVja19yZXN1bWUpOworCitzdGF0aWMgaW5saW5lIGJvb2wgcG1fY2hpbGRyZW5fc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5wb3dlci5pZ25vcmVfY2hpbGRyZW4KKwkJfHwgIWF0b21pY19yZWFkKCZkZXYtPnBvd2VyLmNoaWxkX2NvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCit7CisJZGV2LT5wb3dlci5pZ25vcmVfY2hpbGRyZW4gPSBlbmFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJYXRvbWljX2luYygmZGV2LT5wb3dlci51c2FnZV9jb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX3B1dF9ub2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWF0b21pY19hZGRfdW5sZXNzKCZkZXYtPnBvd2VyLnVzYWdlX2NvdW50LCAtMSwgMCk7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworCitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAtRU5PU1lTOyB9CitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAtRU5PU1lTOyB9CitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtX3JlcXVlc3RfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIC1FTk9TWVM7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtX3NjaGVkdWxlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZGVsYXkpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CitzdGF0aWMgaW5saW5lIGludCBwbV9yZXF1ZXN0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IF9fcG1fcnVudGltZV9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHN5bmMpIHsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IF9fcG1fcnVudGltZV9wdXQoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHN5bmMpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IF9fcG1fcnVudGltZV9zZXRfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBzdGF0dXMpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfYmFycmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgX19wbV9ydW50aW1lX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGMpIHt9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbV9jaGlsZHJlbl9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiBmYWxzZTsgfQorc3RhdGljIGlubGluZSB2b2lkIHBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9wdXRfbm9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikge30KKworI2VuZGlmIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLworCitzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fcnVudGltZV9nZXQoZGV2LCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfZ2V0X3N5bmMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX3J1bnRpbWVfZ2V0KGRldiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfcHV0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gX19wbV9ydW50aW1lX3B1dChkZXYsIGZhbHNlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9wdXRfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fcnVudGltZV9wdXQoZGV2LCB0cnVlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9zZXRfYWN0aXZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gX19wbV9ydW50aW1lX3NldF9zdGF0dXMoZGV2LCBSUE1fQUNUSVZFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJX19wbV9ydW50aW1lX3NldF9zdGF0dXMoZGV2LCBSUE1fU1VTUEVOREVEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJX19wbV9ydW50aW1lX2Rpc2FibGUoZGV2LCB0cnVlKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jkcy5oIGIvaW5jbHVkZS9saW51eC9yZHMuaAppbmRleCBkOTFkYzkxLi44OWQ0NmUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcmRzLmgKQEAgLTE0Nyw2ICsxNDcsMTggQEAKIAl1X2ludDY0X3QJaW51bTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCByZHNfaW5mb190Y3Bfc29ja2V0IHsKKwlfX2JlMzIgICAgICAgICAgbG9jYWxfYWRkcjsKKwlfX2JlMTYgICAgICAgICAgbG9jYWxfcG9ydDsKKwlfX2JlMzIgICAgICAgICAgcGVlcl9hZGRyOworCV9fYmUxNiAgICAgICAgICBwZWVyX3BvcnQ7CisJdV9pbnQ2NF90ICAgICAgIGhkcl9yZW07CisJdV9pbnQ2NF90ICAgICAgIGRhdGFfcmVtOworCXVfaW50MzJfdCAgICAgICBsYXN0X3NlbnRfbnh0OworCXVfaW50MzJfdCAgICAgICBsYXN0X2V4cGVjdGVkX3VuYTsKKwl1X2ludDMyX3QgICAgICAgbGFzdF9zZWVuX3VuYTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKICNkZWZpbmUgUkRTX0lCX0dJRF9MRU4JMTYKIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gewogCV9fYmUzMgkJc3JjX2FkZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jma2lsbC5oIGIvaW5jbHVkZS9saW51eC9yZmtpbGwuaAppbmRleCAyNzg3NzdmYS4uMzM5MmM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZmtpbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jma2lsbC5oCkBAIC02LDIwICs2LDE3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgRG1pdHJ5IFRvcm9raG92CiAgKiBDb3B5cmlnaHQgMjAwOSBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNDcsNiArNDQsNyBAQAogCVJGS0lMTF9UWVBFX1VXQiwKIAlSRktJTExfVFlQRV9XSU1BWCwKIAlSRktJTExfVFlQRV9XV0FOLAorCVJGS0lMTF9UWVBFX0dQUywKIAlOVU1fUkZLSUxMX1RZUEVTLAogfTsKIApAQCAtODIsNiArODAsMjAgQEAKIAlfX3U4ICBzb2Z0LCBoYXJkOwogfSBfX3BhY2tlZDsKIAorLyoKKyAqIFdlIGFyZSBwbGFubmluZyB0byBiZSBiYWNrd2FyZCBhbmQgZm9yd2FyZCBjb21wYXRpYmxlIHdpdGggY2hhbmdlcworICogdG8gdGhlIGV2ZW50IHN0cnVjdCwgYnkgYWRkaW5nIG5ldywgb3B0aW9uYWwsIG1lbWJlcnMgYXQgdGhlIGVuZC4KKyAqIFdoZW4gcmVhZGluZyBhbiBldmVudCAod2hldGhlciB0aGUga2VybmVsIGZyb20gdXNlcnNwYWNlIG9yIHZpY2UKKyAqIHZlcnNhKSB3ZSBuZWVkIHRvIGFjY2VwdCBhbnl0aGluZyB0aGF0J3MgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlCisgKiB2ZXJzaW9uIDEgZXZlbnQgc2l6ZSwgYnV0IG1pZ2h0IGJlIGFibGUgdG8gYWNjZXB0IG90aGVyIHNpemVzIGluCisgKiB0aGUgZnV0dXJlLgorICoKKyAqIE9uZSBleGNlcHRpb24gaXMgdGhlIGtlcm5lbCAtLSB3ZSBhbHJlYWR5IGhhdmUgdHdvIGV2ZW50IHNpemVzIGluCisgKiB0aGF0IHdlJ3ZlIG1hZGUgdGhlICdoYXJkJyBtZW1iZXIgb3B0aW9uYWwgc2luY2Ugb3VyIG9ubHkgb3B0aW9uCisgKiBpcyB0byBpZ25vcmUgaXQgYW55d2F5LgorICovCisjZGVmaW5lIFJGS0lMTF9FVkVOVF9TSVpFX1YxCTgKKwogLyogaW9jdGwgZm9yIHR1cm5pbmcgb2ZmIHJma2lsbC1pbnB1dCAoaWYgcHJlc2VudCkgKi8KICNkZWZpbmUgUkZLSUxMX0lPQ19NQUdJQwknUicKICNkZWZpbmUgUkZLSUxMX0lPQ19OT0lOUFVUCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IGJhMzI1NGUuLmFkZjIwNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMTA0LDcgKzEwNCw3IEBACiAJUlRNX05FV0FERFJMQUJFTCA9IDcyLAogI2RlZmluZSBSVE1fTkVXQUREUkxBQkVMIFJUTV9ORVdBRERSTEFCRUwKIAlSVE1fREVMQUREUkxBQkVMLAotI2RlZmluZSBSVE1fTkVXQUREUkxBQkVMIFJUTV9ORVdBRERSTEFCRUwKKyNkZWZpbmUgUlRNX0RFTEFERFJMQUJFTCBSVE1fREVMQUREUkxBQkVMCiAJUlRNX0dFVEFERFJMQUJFTCwKICNkZWZpbmUgUlRNX0dFVEFERFJMQUJFTCBSVE1fR0VUQUREUkxBQkVMCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaW8uaCBiL2luY2x1ZGUvbGludXgvc2VyaW8uaAppbmRleCAxMjZkMjRjLi5hNjQwYmMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpby5oCkBAIC0zMSw4ICszMSw2IEBACiAKIAlib29sIG1hbnVhbF9iaW5kOwogCWJvb2wgcmVnaXN0ZXJlZDsJLyogcG9ydCBoYXMgYmVlbiBmdWxseSByZWdpc3RlcmVkIHdpdGggZHJpdmVyIGNvcmUgKi8KLQlib29sIHN1c3BlbmRlZDsJCS8qIHBvcnQgaXMgc3VzcGVuZGVkICovCi0KIAogCXN0cnVjdCBzZXJpb19kZXZpY2VfaWQgaWQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGYyYzY5YTIuLmRmN2IyM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMzA0LDcgKzMwNCw2IEBACiAgKglAdGNfaW5kZXg6IFRyYWZmaWMgY29udHJvbCBpbmRleAogICoJQHRjX3ZlcmQ6IHRyYWZmaWMgY29udHJvbCB2ZXJkaWN0CiAgKglAbmRpc2Nfbm9kZXR5cGU6IHJvdXRlciB0eXBlIChmcm9tIGxpbmsgbGF5ZXIpCi0gKglAZG9fbm90X2VuY3J5cHQ6IHNldCB0byBwcmV2ZW50IGVuY3J5cHRpb24gb2YgdGhpcyBmcmFtZQogICoJQGRtYV9jb29raWU6IGEgY29va2llIHRvIG9uZSBvZiBzZXZlcmFsIHBvc3NpYmxlIERNQSBvcGVyYXRpb25zCiAgKgkJZG9uZSBieSBza2IgRE1BIGZ1bmN0aW9ucwogICoJQHNlY21hcms6IHNlY3VyaXR5IG1hcmtpbmcKQEAgLTM4MCwxMiArMzc5LDkgQEAKICNpZmRlZiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRQogCV9fdTgJCQluZGlzY19ub2RldHlwZToyOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTEpIHx8IGRlZmluZWQoQ09ORklHX01BQzgwMjExX01PRFVMRSkKLQlfX3U4CQkJZG9fbm90X2VuY3J5cHQ6MTsKLSNlbmRpZgogCWttZW1jaGVja19iaXRmaWVsZF9lbmQoZmxhZ3MyKTsKIAotCS8qIDAvMTMvMTQgYml0IGhvbGUgKi8KKwkvKiAwLzE0IGJpdCBob2xlICovCiAKICNpZmRlZiBDT05GSUdfTkVUX0RNQQogCWRtYV9jb29raWVfdAkJZG1hX2Nvb2tpZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaAppbmRleCBiYjUzNjhkLi4wZWMwMGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Nsb2JfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oCkBAIC0zNCw5ICszNCw0IEBACiAJcmV0dXJuIGttYWxsb2Moc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQga21lbV9jYWNoZV9pbml0X2xhdGUodm9pZCkKLXsKLQkvKiBOb3RoaW5nIHRvIGRvICovCi19Ci0KICNlbmRpZiAvKiBfX0xJTlVYX1NMT0JfREVGX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCBjMWM4NjJiLi41YWQ3MGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC0xNTMsMTIgKzE1MywxMCBAQAogCWlmIChzaXplIDw9IEtNQUxMT0NfTUlOX1NJWkUpCiAJCXJldHVybiBLTUFMTE9DX1NISUZUX0xPVzsKIAotI2lmIEtNQUxMT0NfTUlOX1NJWkUgPD0gNjQKLQlpZiAoc2l6ZSA+IDY0ICYmIHNpemUgPD0gOTYpCisJaWYgKEtNQUxMT0NfTUlOX1NJWkUgPD0gMzIgJiYgc2l6ZSA+IDY0ICYmIHNpemUgPD0gOTYpCiAJCXJldHVybiAxOwotCWlmIChzaXplID4gMTI4ICYmIHNpemUgPD0gMTkyKQorCWlmIChLTUFMTE9DX01JTl9TSVpFIDw9IDY0ICYmIHNpemUgPiAxMjggJiYgc2l6ZSA8PSAxOTIpCiAJCXJldHVybiAyOwotI2VuZGlmCiAJaWYgKHNpemUgPD0gICAgICAgICAgOCkgcmV0dXJuIDM7CiAJaWYgKHNpemUgPD0gICAgICAgICAxNikgcmV0dXJuIDQ7CiAJaWYgKHNpemUgPD0gICAgICAgICAzMikgcmV0dXJuIDU7CkBAIC0zMDQsNiArMzAyLDQgQEAKIH0KICNlbmRpZgogCi12b2lkIF9faW5pdCBrbWVtX2NhY2hlX2luaXRfbGF0ZSh2b2lkKTsKLQogI2VuZGlmIC8qIF9MSU5VWF9TTFVCX0RFRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IDVhZThmYTIuLjNkMGE5ZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC0yNywyNCArMjcsNTQgQEAKIAl1OCBldDFtZGNwb3J0OwkJLyogTURJTyBmb3IgZW5ldDEgKi8KIAl1OCBib2FyZF9yZXY7CQkvKiBCb2FyZCByZXZpc2lvbiBudW1iZXIgZnJvbSBTUFJPTS4gKi8KIAl1OCBjb3VudHJ5X2NvZGU7CS8qIENvdW50cnkgQ29kZSAqLwotCXU4IGFudF9hdmFpbGFibGVfYTsJLyogQS1QSFkgYW50ZW5uYSBhdmFpbGFibGUgYml0cyAodXAgdG8gNCkgKi8KLQl1OCBhbnRfYXZhaWxhYmxlX2JnOwkvKiBCL0ctUEhZIGFudGVubmEgYXZhaWxhYmxlIGJpdHMgKHVwIHRvIDQpICovCisJdTggYW50X2F2YWlsYWJsZV9hOwkvKiAyR0h6IGFudGVubmEgYXZhaWxhYmxlIGJpdHMgKHVwIHRvIDQpICovCisJdTggYW50X2F2YWlsYWJsZV9iZzsJLyogNUdIeiBhbnRlbm5hIGF2YWlsYWJsZSBiaXRzICh1cCB0byA0KSAqLwogCXUxNiBwYTBiMDsKIAl1MTYgcGEwYjE7CiAJdTE2IHBhMGIyOwogCXUxNiBwYTFiMDsKIAl1MTYgcGExYjE7CiAJdTE2IHBhMWIyOworCXUxNiBwYTFsb2IwOworCXUxNiBwYTFsb2IxOworCXUxNiBwYTFsb2IyOworCXUxNiBwYTFoaWIwOworCXUxNiBwYTFoaWIxOworCXUxNiBwYTFoaWIyOwogCXU4IGdwaW8wOwkJLyogR1BJTyBwaW4gMCAqLwogCXU4IGdwaW8xOwkJLyogR1BJTyBwaW4gMSAqLwogCXU4IGdwaW8yOwkJLyogR1BJTyBwaW4gMiAqLwogCXU4IGdwaW8zOwkJLyogR1BJTyBwaW4gMyAqLwotCXUxNiBtYXhwd3JfYTsJCS8qIEEtUEhZIEFtcGxpZmllciBNYXggUG93ZXIgKGluIGRCbSBRNS4yKSAqLwotCXUxNiBtYXhwd3JfYmc7CQkvKiBCL0ctUEhZIEFtcGxpZmllciBNYXggUG93ZXIgKGluIGRCbSBRNS4yKSAqLworCXUxNiBtYXhwd3JfYmc7CQkvKiAyLjRHSHogQW1wbGlmaWVyIE1heCBQb3dlciAoaW4gZEJtIFE1LjIpICovCisJdTE2IG1heHB3cl9hbDsJCS8qIDUuMkdIeiBBbXBsaWZpZXIgTWF4IFBvd2VyIChpbiBkQm0gUTUuMikgKi8KKwl1MTYgbWF4cHdyX2E7CQkvKiA1LjNHSHogQW1wbGlmaWVyIE1heCBQb3dlciAoaW4gZEJtIFE1LjIpICovCisJdTE2IG1heHB3cl9haDsJCS8qIDUuOEdIeiBBbXBsaWZpZXIgTWF4IFBvd2VyIChpbiBkQm0gUTUuMikgKi8KIAl1OCBpdHNzaV9hOwkJLyogSWRsZSBUU1NJIFRhcmdldCBmb3IgQS1QSFkgKi8KIAl1OCBpdHNzaV9iZzsJCS8qIElkbGUgVFNTSSBUYXJnZXQgZm9yIEIvRy1QSFkgKi8KLQl1MTYgYm9hcmRmbGFnc19sbzsJLyogQm9hcmRmbGFncyAobG93IDE2IGJpdHMpICovCi0JdTE2IGJvYXJkZmxhZ3NfaGk7CS8qIEJvYXJkZmxhZ3MgKGhpZ2ggMTYgYml0cykgKi8KKwl1OCB0cmkyZzsJCS8qIDIuNEdIeiBUWCBpc29sYXRpb24gKi8KKwl1OCB0cmk1Z2w7CQkvKiA1LjJHSHogVFggaXNvbGF0aW9uICovCisJdTggdHJpNWc7CQkvKiA1LjNHSHogVFggaXNvbGF0aW9uICovCisJdTggdHJpNWdoOwkJLyogNS44R0h6IFRYIGlzb2xhdGlvbiAqLworCXU4IHJ4cG8yZzsJCS8qIDJHSHogUlggcG93ZXIgb2Zmc2V0ICovCisJdTggcnhwbzVnOwkJLyogNUdIeiBSWCBwb3dlciBvZmZzZXQgKi8KKwl1OCByc3Npc2F2Mmc7CQkvKiAyR0h6IFJTU0kgcGFyYW1zICovCisJdTggcnNzaXNtYzJnOworCXU4IHJzc2lzbWYyZzsKKwl1OCBieGEyZzsJCS8qIDJHSHogQlggYXJjaCAqLworCXU4IHJzc2lzYXY1ZzsJCS8qIDVHSHogUlNTSSBwYXJhbXMgKi8KKwl1OCByc3Npc21jNWc7CisJdTggcnNzaXNtZjVnOworCXU4IGJ4YTVnOwkJLyogNUdIeiBCWCBhcmNoICovCisJdTE2IGNjazJncG87CQkvKiBDQ0sgcG93ZXIgb2Zmc2V0ICovCisJdTMyIG9mZG0yZ3BvOwkJLyogMi40R0h6IE9GRE0gcG93ZXIgb2Zmc2V0ICovCisJdTMyIG9mZG01Z2xwbzsJCS8qIDUuMkdIeiBPRkRNIHBvd2VyIG9mZnNldCAqLworCXUzMiBvZmRtNWdwbzsJCS8qIDUuM0dIeiBPRkRNIHBvd2VyIG9mZnNldCAqLworCXUzMiBvZmRtNWdocG87CQkvKiA1LjhHSHogT0ZETSBwb3dlciBvZmZzZXQgKi8KKwl1MTYgYm9hcmRmbGFnc19sbzsJLyogQm9hcmQgZmxhZ3MgKGJpdHMgMC0xNSkgKi8KKwl1MTYgYm9hcmRmbGFnc19oaTsJLyogQm9hcmQgZmxhZ3MgKGJpdHMgMTYtMzEpICovCisJdTE2IGJvYXJkZmxhZ3MyX2xvOwkvKiBCb2FyZCBmbGFncyAoYml0cyAzMi00NykgKi8KKwl1MTYgYm9hcmRmbGFnczJfaGk7CS8qIEJvYXJkIGZsYWdzIChiaXRzIDQ4LTYzKSAqLworCS8qIFRPRE8gc3RvcmUgYm9hcmQgZmxhZ3MgaW4gYSBzaW5nbGUgdTY0ICovCiAKIAkvKiBBbnRlbm5hIGdhaW4gdmFsdWVzIGZvciB1cCB0byA0IGFudGVubmFzCiAJICogb24gZWFjaCBiYW5kLiBWYWx1ZXMgaW4gZEJtLzQgKFE1LjIpLiBOZWdhdGl2ZSBnYWluIG1lYW5zIHRoZQpAQCAtNTgsNyArODgsNyBAQAogCQl9IGdoejU7CQkvKiA1R0h6IGJhbmQgKi8KIAl9IGFudGVubmFfZ2FpbjsKIAotCS8qIFRPRE8gLSBhZGQgYW55IHBhcmFtZXRlcnMgbmVlZGVkIGZyb20gcmV2IDIsIDMsIG9yIDQgU1BST01zICovCisJLyogVE9ETyAtIGFkZCBhbnkgcGFyYW1ldGVycyBuZWVkZWQgZnJvbSByZXYgMiwgMywgNCwgNSBvciA4IFNQUk9NcyAqLwogfTsKIAogLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIFBDQiB0aGUgY2lyY3VpdHJ5IGlzIHNvbGRlcmVkIG9uLiAqLwpAQCAtMjA4LDYgKzIzOCw3IEBACiAJU1NCX0JVU1RZUEVfU1NCLAkvKiBUaGlzIFNTQiBidXMgaXMgdGhlIHN5c3RlbSBidXMgKi8KIAlTU0JfQlVTVFlQRV9QQ0ksCS8qIFNTQiBpcyBjb25uZWN0ZWQgdG8gUENJIGJ1cyAqLwogCVNTQl9CVVNUWVBFX1BDTUNJQSwJLyogU1NCIGlzIGNvbm5lY3RlZCB0byBQQ01DSUEgYnVzICovCisJU1NCX0JVU1RZUEVfU0RJTywJLyogU1NCIGlzIGNvbm5lY3RlZCB0byBTRElPIGJ1cyAqLwogfTsKIAogLyogYm9hcmRfdmVuZG9yICovCkBAIC0yNDAsOCArMjcxLDEyIEBACiAKIAkvKiBUaGUgY29yZSBpbiB0aGUgYmFzaWMgYWRkcmVzcyByZWdpc3RlciB3aW5kb3cuIChQQ0kgYnVzIG9ubHkpICovCiAJc3RydWN0IHNzYl9kZXZpY2UgKm1hcHBlZF9kZXZpY2U7Ci0JLyogQ3VycmVudGx5IG1hcHBlZCBQQ01DSUEgc2VnbWVudC4gKGJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfUENNQ0lBIG9ubHkpICovCi0JdTggbWFwcGVkX3BjbWNpYV9zZWc7CisJdW5pb24geworCQkvKiBDdXJyZW50bHkgbWFwcGVkIFBDTUNJQSBzZWdtZW50LiAoYnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ01DSUEgb25seSkgKi8KKwkJdTggbWFwcGVkX3BjbWNpYV9zZWc7CisJCS8qIEN1cnJlbnQgU1NCIGJhc2UgYWRkcmVzcyB3aW5kb3cgZm9yIFNESU8uICovCisJCXUzMiBzZGlvX3NiYWRkcjsKKwl9OwogCS8qIExvY2sgZm9yIGNvcmUgYW5kIHNlZ21lbnQgc3dpdGNoaW5nLgogCSAqIE9uIFBDTUNJQS1ob3N0IGJ1c3NlcyB0aGlzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgd2hvbGUgTU1JTyBhY2Nlc3MuICovCiAJc3BpbmxvY2tfdCBiYXJfbG9jazsKQEAgLTI1Miw2ICsyODcsMTEgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqaG9zdF9wY2k7CiAJLyogUG9pbnRlciB0byB0aGUgUENNQ0lBIGRldmljZSAob25seSBpZiBidXN0eXBlID09IFNTQl9CVVNUWVBFX1BDTUNJQSkuICovCiAJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmhvc3RfcGNtY2lhOworCS8qIFBvaW50ZXIgdG8gdGhlIFNESU8gZGV2aWNlIChvbmx5IGlmIGJ1c3R5cGUgPT0gU1NCX0JVU1RZUEVfU0RJTykuICovCisJc3RydWN0IHNkaW9fZnVuYyAqaG9zdF9zZGlvOworCisJLyogU2VlIGVudW0gc3NiX3F1aXJrcyAqLworCXVuc2lnbmVkIGludCBxdWlya3M7CiAKICNpZmRlZiBDT05GSUdfU1NCX1NQUk9NCiAJLyogTXV0ZXggdG8gcHJvdGVjdCB0aGUgU1BST00gd3JpdGluZy4gKi8KQEAgLTMwNiw2ICszNDYsMTEgQEAKICNlbmRpZiAvKiBERUJVRyAqLwogfTsKIAorZW51bSBzc2JfcXVpcmtzIHsKKwkvKiBTRElPIGNvbm5lY3RlZCBjYXJkIHJlcXVpcmVzIHBlcmZvcm1pbmcgYSByZWFkIGFmdGVyIHdyaXRpbmcgYSAzMi1iaXQgdmFsdWUgKi8KKwlTU0JfUVVJUktfU0RJT19SRUFEX0FGVEVSX1dSSVRFMzIJPSAoMSA8PCAwKSwKK307CisKIC8qIFRoZSBpbml0aWFsaXphdGlvbi1pbnZhcmlhbnRzLiAqLwogc3RydWN0IHNzYl9pbml0X2ludmFyaWFudHMgewogCS8qIFZlcnNpb25pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFBDQi4gKi8KQEAgLTMzNiw2ICszODEsMTIgQEAKIAkJCQkgICAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2RldiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGJhc2VhZGRyKTsKICNlbmRpZiAvKiBDT05GSUdfU1NCX1BDTUNJQUhPU1QgKi8KKyNpZmRlZiBDT05GSUdfU1NCX1NESU9IT1NUCitleHRlcm4gaW50IHNzYl9idXNfc2Rpb2J1c19yZWdpc3RlcihzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAorCQkJCSAgICBzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMsCisJCQkJICAgIHVuc2lnbmVkIGludCBxdWlya3MpOworI2VuZGlmIC8qIENPTkZJR19TU0JfU0RJT0hPU1QgKi8KKwogCiBleHRlcm4gdm9pZCBzc2JfYnVzX3VucmVnaXN0ZXIoc3RydWN0IHNzYl9idXMgKmJ1cyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9kcml2ZXJfY2hpcGNvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKaW5kZXggZDNiMWQxOC4uNGUyN2FjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmgKQEAgLTYyOSw1ICs2MjksMTUgQEAKIC8qIFBNVSBzdXBwb3J0ICovCiBleHRlcm4gdm9pZCBzc2JfcG11X2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYyk7CiAKK2VudW0gc3NiX3BtdV9sZG9fdm9sdF9pZCB7CisJTERPX1BBUkVGID0gMCwKKwlMRE9fVk9MVDEsCisJTERPX1ZPTFQyLAorCUxET19WT0xUMywKK307CisKK3ZvaWQgc3NiX3BtdV9zZXRfbGRvX3ZvbHRhZ2Uoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywKKwkJCSAgICAgZW51bSBzc2JfcG11X2xkb192b2x0X2lkIGlkLCB1MzIgdm9sdGFnZSk7Cit2b2lkIHNzYl9wbXVfc2V0X2xkb19wYXJlZihzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLCBib29sIG9uKTsKIAogI2VuZGlmIC8qIExJTlVYX1NTQl9DSElQQ09fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCmluZGV4IGEwMWI5ODIuLjlhZTkwODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaApAQCAtMTYyLDcgKzE2Miw3IEBACiAKIC8qIFNQUk9NIHNoYWRvdyBhcmVhLiBJZiBub3Qgb3RoZXJ3aXNlIG5vdGVkLCBmaWVsZHMgYXJlCiAgKiB0d28gYnl0ZXMgd2lkZS4gTm90ZSB0aGF0IHRoZSBTUFJPTSBjYW4gX29ubHlfIGJlIHJlYWQKLSAqIGluIHR3by1ieXRlIHF1YW50aW5pZXMuCisgKiBpbiB0d28tYnl0ZSBxdWFudGl0aWVzLgogICovCiAjZGVmaW5lIFNTQl9TUFJPTVNJWkVfV09SRFMJCTY0CiAjZGVmaW5lIFNTQl9TUFJPTVNJWkVfQllURVMJCShTU0JfU1BST01TSVpFX1dPUkRTICogc2l6ZW9mKHUxNikpCkBAIC0zMjcsOCArMzI3LDExIEBACiAjZGVmaW5lICBTU0JfU1BST001X0dQSU9CX1AzX1NISUZUCTgKIAogLyogU1BST00gUmV2aXNpb24gOCAqLwotI2RlZmluZSBTU0JfU1BST004X0JGTExPCQkweDEwODQJLyogQm9hcmRmbGFncyAobG93IDE2IGJpdHMpICovCi0jZGVmaW5lIFNTQl9TUFJPTThfQkZMSEkJCTB4MTA4NgkvKiBCb2FyZGZsYWdzIEhpICovCisjZGVmaW5lIFNTQl9TUFJPTThfQk9BUkRSRVYJCTB4MTA4MgkvKiBCb2FyZCByZXZpc2lvbiAqLworI2RlZmluZSBTU0JfU1BST004X0JGTExPCQkweDEwODQJLyogQm9hcmQgZmxhZ3MgKGJpdHMgMC0xNSkgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9CRkxISQkJMHgxMDg2CS8qIEJvYXJkIGZsYWdzIChiaXRzIDE2LTMxKSAqLworI2RlZmluZSBTU0JfU1BST004X0JGTDJMTwkJMHgxMDg4CS8qIEJvYXJkIGZsYWdzIChiaXRzIDMyLTQ3KSAqLworI2RlZmluZSBTU0JfU1BST004X0JGTDJISQkJMHgxMDhBCS8qIEJvYXJkIGZsYWdzIChiaXRzIDQ4LTYzKSAqLwogI2RlZmluZSBTU0JfU1BST004X0lMME1BQwkJMHgxMDhDCS8qIDYgYnl0ZSBNQUMgYWRkcmVzcyAqLwogI2RlZmluZSBTU0JfU1BST004X0NDT0RFCQkweDEwOTIJLyogMiBieXRlIGNvdW50cnkgY29kZSAqLwogI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMCQkweDEwOUMgIC8qIEFudGVubmEgYXZhaWxhYmxlIGJpdGZpZWxkcyovCkBAIC0zNTQsMTQgKzM1Nyw2MyBAQAogI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQl9QMgkJMHgwMEZGCS8qIFBpbiAyICovCiAjZGVmaW5lICBTU0JfU1BST004X0dQSU9CX1AzCQkweEZGMDAJLyogUGluIDMgKi8KICNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0JfUDNfU0hJRlQJOAotI2RlZmluZSBTU0JfU1BST004X01BWFBfQkcJCTB4MTBDMCAgLyogTWF4IFBvd2VyIEJHIGluIHBhdGggMSAqLwotI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0JHX01BU0sJMHgwMEZGICAvKiBNYXNrIGZvciBNYXggUG93ZXIgQkcgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9SU1NJUEFSTTJHCQkweDEwQTQJLyogUlNTSSBwYXJhbXMgZm9yIDJHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNNRjJHCQkweDAwMEYKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNNQzJHCQkweDAwRjAKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNNQzJHX1NISUZUCTQKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNBVjJHCQkweDA3MDAKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNBVjJHX1NISUZUCTgKKyNkZWZpbmUgIFNTQl9TUFJPTThfQlhBMkcJCTB4MTgwMAorI2RlZmluZSAgU1NCX1NQUk9NOF9CWEEyR19TSElGVAkJMTEKKyNkZWZpbmUgU1NCX1NQUk9NOF9SU1NJUEFSTTVHCQkweDEwQTYJLyogUlNTSSBwYXJhbXMgZm9yIDVHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNNRjVHCQkweDAwMEYKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNNQzVHCQkweDAwRjAKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNNQzVHX1NISUZUCTQKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNBVjVHCQkweDA3MDAKKyNkZWZpbmUgIFNTQl9TUFJPTThfUlNTSVNBVjVHX1NISUZUCTgKKyNkZWZpbmUgIFNTQl9TUFJPTThfQlhBNUcJCTB4MTgwMAorI2RlZmluZSAgU1NCX1NQUk9NOF9CWEE1R19TSElGVAkJMTEKKyNkZWZpbmUgU1NCX1NQUk9NOF9UUkkyNUcJCTB4MTBBOAkvKiBUWCBpc29sYXRpb24gMi40JjUuM0dIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9UUkkyRwkJMHgwMEZGCS8qIFRYIGlzb2xhdGlvbiAyLjRHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfVFJJNUcJCTB4RkYwMAkvKiBUWCBpc29sYXRpb24gNS4zR0h6ICovCisjZGVmaW5lICBTU0JfU1BST004X1RSSTVHX1NISUZUCQk4CisjZGVmaW5lIFNTQl9TUFJPTThfVFJJNUdITAkJMHgxMEFBCS8qIFRYIGlzb2xhdGlvbiA1LjIvNS44R0h6ICovCisjZGVmaW5lICBTU0JfU1BST004X1RSSTVHTAkJMHgwMEZGCS8qIFRYIGlzb2xhdGlvbiA1LjJHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfVFJJNUdICQkweEZGMDAJLyogVFggaXNvbGF0aW9uIDUuOEdIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9UUkk1R0hfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X1JYUE8JCQkweDEwQUMgIC8qIFJYIHBvd2VyIG9mZnNldHMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfUlhQTzJHCQkweDAwRkYJLyogMkdIeiBSWCBwb3dlciBvZmZzZXQgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfUlhQTzVHCQkweEZGMDAJLyogNUdIeiBSWCBwb3dlciBvZmZzZXQgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfUlhQTzVHX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9NQVhQX0JHCQkweDEwQzAgIC8qIE1heCBQb3dlciAyR0h6IGluIHBhdGggMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0JHX01BU0sJMHgwMEZGICAvKiBNYXNrIGZvciBNYXggUG93ZXIgMkdIeiAqLwogI2RlZmluZSAgU1NCX1NQUk9NOF9JVFNTSV9CRwkJMHhGRjAwCS8qIE1hc2sgZm9yIHBhdGggMSBpdHNzaV9iZyAqLwogI2RlZmluZSAgU1NCX1NQUk9NOF9JVFNTSV9CR19TSElGVAk4Ci0jZGVmaW5lIFNTQl9TUFJPTThfTUFYUF9BCQkweDEwQzggIC8qIE1heCBQb3dlciBBIGluIHBhdGggMSAqLwotI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0FfTUFTSwkJMHgwMEZGICAvKiBNYXNrIGZvciBNYXggUG93ZXIgQSAqLworI2RlZmluZSBTU0JfU1BST004X1BBMEIwCQkweDEwQzIJLyogMkdIeiBwb3dlciBhbXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTBCMQkJMHgxMEM0CisjZGVmaW5lIFNTQl9TUFJPTThfUEEwQjIJCTB4MTBDNgorI2RlZmluZSBTU0JfU1BST004X01BWFBfQQkJMHgxMEM4ICAvKiBNYXggUG93ZXIgNS4zR0h6ICovCisjZGVmaW5lICBTU0JfU1BST004X01BWFBfQV9NQVNLCQkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciA1LjNHSHogKi8KICNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQQkJMHhGRjAwCS8qIE1hc2sgZm9yIHBhdGggMSBpdHNzaV9hICovCiAjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0FfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQUhMCQkweDEwQ0EgIC8qIE1heCBQb3dlciA1LjIvNS44R0h6ICovCisjZGVmaW5lICBTU0JfU1BST004X01BWFBfQUhfTUFTSwkweDAwRkYgIC8qIE1hc2sgZm9yIE1heCBQb3dlciA1LjhHSHogKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9BTF9NQVNLCTB4RkYwMCAgLyogTWFzayBmb3IgTWF4IFBvd2VyIDUuMkdIeiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0FMX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFCMAkJMHgxMENDCS8qIDUuM0dIeiBwb3dlciBhbXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFCMQkJMHgxMENFCisjZGVmaW5lIFNTQl9TUFJPTThfUEExQjIJCTB4MTBEMAorI2RlZmluZSBTU0JfU1BST004X1BBMUxPQjAJCTB4MTBEMgkvKiA1LjJHSHogcG93ZXIgYW1wIHNldHRpbmdzICovCisjZGVmaW5lIFNTQl9TUFJPTThfUEExTE9CMQkJMHgxMEQ0CisjZGVmaW5lIFNTQl9TUFJPTThfUEExTE9CMgkJMHgxMEQ2CisjZGVmaW5lIFNTQl9TUFJPTThfUEExSElCMAkJMHgxMEQ4CS8qIDUuOEdIeiBwb3dlciBhbXAgc2V0dGluZ3MgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFISUIxCQkweDEwREEKKyNkZWZpbmUgU1NCX1NQUk9NOF9QQTFISUIyCQkweDEwREMKKyNkZWZpbmUgU1NCX1NQUk9NOF9DQ0syR1BPCQkweDExNDAJLyogQ0NLIHBvd2VyIG9mZnNldCAqLworI2RlZmluZSBTU0JfU1BST004X09GRE0yR1BPCQkweDExNDIJLyogMi40R0h6IE9GRE0gcG93ZXIgb2Zmc2V0ICovCisjZGVmaW5lIFNTQl9TUFJPTThfT0ZETTVHUE8JCTB4MTE0NgkvKiA1LjNHSHogT0ZETSBwb3dlciBvZmZzZXQgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9PRkRNNUdMUE8JCTB4MTE0QQkvKiA1LjJHSHogT0ZETSBwb3dlciBvZmZzZXQgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9PRkRNNUdIUE8JCTB4MTE0RQkvKiA1LjhHSHogT0ZETSBwb3dlciBvZmZzZXQgKi8KIAogLyogVmFsdWVzIGZvciBTU0JfU1BST00xX0JJTkZfQ0NPREUgKi8KIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggOGFmYWM3Ni4uNjE3MjNhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0yMzMsNyArMjMzLDcgQEAKIAlzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgCXJlcTsKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwogCS8qIE9ubHkgdXNlZCBieSBUQ1AgTUQ1IFNpZ25hdHVyZSBzbyBmYXIuICovCi0Jc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzCSphZl9zcGVjaWZpYzsKKwljb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgKmFmX3NwZWNpZmljOwogI2VuZGlmCiAJdTMyCQkJIAlyY3ZfaXNuOwogCXUzMgkJCSAJc250X2lzbjsKQEAgLTQwMSw5ICs0MDEsOSBAQAogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKIC8qIFRDUCBBRi1TcGVjaWZpYyBwYXJ0czsgb25seSB1c2VkIGJ5IE1ENSBTaWduYXR1cmUgc3VwcG9ydCBzbyBmYXIgKi8KLQlzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzCSphZl9zcGVjaWZpYzsKKwljb25zdCBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzCSphZl9zcGVjaWZpYzsKIAotLyogVENQIE1ENSBTaWduYWd1cmUgT3B0aW9uIGluZm9ybWF0aW9uICovCisvKiBUQ1AgTUQ1IFNpZ25hdHVyZSBPcHRpb24gaW5mb3JtYXRpb24gKi8KIAlzdHJ1Y3QgdGNwX21kNXNpZ19pbmZvCSptZDVzaWdfaW5mbzsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlwYy5oIGIvaW5jbHVkZS9saW51eC90aXBjLmgKaW5kZXggYmVhNDY5NC4uM2Q5MjM5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC90aXBjLmgKQEAgLTIwOSw1ICsyMDksNyBAQAogI2RlZmluZSBUSVBDX1NSQ19EUk9QUEFCTEUJMTI4CS8qIERlZmF1bHQ6IDAgKHJlc2VuZCBjb25nZXN0ZWQgbXNnKSAqLwogI2RlZmluZSBUSVBDX0RFU1RfRFJPUFBBQkxFCTEyOQkvKiBEZWZhdWx0OiBiYXNlZCBvbiBzb2NrZXQgdHlwZSAqLwogI2RlZmluZSBUSVBDX0NPTk5fVElNRU9VVAkxMzAJLyogRGVmYXVsdDogODAwMCAobXMpICAqLworI2RlZmluZSBUSVBDX05PREVfUkVDVlFfREVQVEgJMTMxCS8qIERlZmF1bHQ6IG5vbmUgKHJlYWQgb25seSkgKi8KKyNkZWZpbmUgVElQQ19TT0NLX1JFQ1ZRX0RFUFRICTEzMgkvKiBEZWZhdWx0OiBub25lIChyZWFkIG9ubHkpICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHkuaCBiL2luY2x1ZGUvbGludXgvdHR5LmgKaW5kZXggMGQzOTc0Zi4uYTkxNmEzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eS5oCkBAIC01MTksMTAgKzUxOSw2IEBACiAKIGV4dGVybiBpbnQgcGN4ZV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotLyogcHJpbnRrLmMgKi8KLQotZXh0ZXJuIHZvaWQgY29uc29sZV9wcmludChjb25zdCBjaGFyICopOwotCiAvKiB2dC5jICovCiAKIGV4dGVybiBpbnQgdnRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKaW5kZXggMzc4MzZiOS4uMWVmMWViYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaApAQCAtNzAsMTIgKzcwLDEzIEBACiAjZGVmaW5lIFJORElTX01TR19LRUVQQUxJVkVfQwkoUk5ESVNfTVNHX0tFRVBBTElWRXxSTkRJU19NU0dfQ09NUExFVElPTikKIAogLyogY29kZXMgZm9yICJzdGF0dXMiIGZpZWxkIG9mIGNvbXBsZXRpb24gbWVzc2FnZXMgKi8KLSNkZWZpbmUJUk5ESVNfU1RBVFVTX1NVQ0NFU1MJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lCVJORElTX1NUQVRVU19GQUlMVVJFCQljcHVfdG9fbGUzMigweGMwMDAwMDAxKQotI2RlZmluZQlSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCWNwdV90b19sZTMyKDB4YzAwMTAwMTUpCi0jZGVmaW5lCVJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVECWNwdV90b19sZTMyKDB4YzAwMDAwYmIpCi0jZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9DT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGIpCi0jZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCWNwdV90b19sZTMyKDB4NDAwMTAwMGMpCisjZGVmaW5lCVJORElTX1NUQVRVU19TVUNDRVNTCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX0ZBSUxVUkUJCQljcHVfdG9fbGUzMigweGMwMDAwMDAxKQorI2RlZmluZQlSTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBCQljcHVfdG9fbGUzMigweGMwMDEwMDE1KQorI2RlZmluZQlSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRAkJY3B1X3RvX2xlMzIoMHhjMDAwMDBiYikKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QJCWNwdV90b19sZTMyKDB4NDAwMTAwMGIpCisjZGVmaW5lCVJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUCQljcHVfdG9fbGUzMigweDQwMDEwMDBjKQorI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfU1BFQ0lGSUNfSU5ESUNBVElPTgljcHVfdG9fbGUzMigweDQwMDEwMDEyKQogCiAvKiBjb2RlcyBmb3IgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0gKi8KICNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1VOU1BFQ0lGSUVECWNwdV90b19sZTMyKDB4MDAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCmluZGV4IDMxMGUxOGEuLmJiNjllMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCkBAIC01Myw2ICs1Myw3IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlyeHE7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAl0eHE7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlkb25lOworCXN0cnVjdCBza19idWZmX2hlYWQJcnhxX3BhdXNlOwogCXN0cnVjdCB1cmIJCSppbnRlcnJ1cHQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CWJoOwogCkBAIC02Myw2ICs2NCw3IEBACiAjCQlkZWZpbmUgRVZFTlRfUlhfTUVNT1JZCTIKICMJCWRlZmluZSBFVkVOVF9TVFNfU1BMSVQJMwogIwkJZGVmaW5lIEVWRU5UX0xJTktfUkVTRVQJNAorIwkJZGVmaW5lIEVWRU5UX1JYX1BBVVNFRAk1CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXJfb2Yoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC04Niw2ICs4OCw3IEBACiAKICNkZWZpbmUgRkxBR19GUkFNSU5HX0FYIDB4MDA0MAkJLyogQVg4ODc3Mi8xNzggcGFja2V0cyAqLwogI2RlZmluZSBGTEFHX1dMQU4JMHgwMDgwCQkvKiB1c2UgIndsYW4lZCIgbmFtZXMgKi8KKyNkZWZpbmUgRkxBR19BVk9JRF9VTkxJTktfVVJCUyAweDAxMDAJLyogZG9uJ3QgdW5saW5rIHVyYnMgYXQgdXNibmV0X3N0b3AoKSAqLwogCiAKIAkvKiBpbml0IGRldmljZSAuLi4gY2FuIHNsZWVwLCBvciBjYXVzZSBwcm9iZSgpIGZhaWx1cmUgKi8KQEAgLTk3LDYgKzEwMCw5IEBACiAJLyogcmVzZXQgZGV2aWNlIC4uLiBjYW4gc2xlZXAgKi8KIAlpbnQJKCpyZXNldCkoc3RydWN0IHVzYm5ldCAqKTsKIAorCS8qIHN0b3AgZGV2aWNlIC4uLiBjYW4gc2xlZXAgKi8KKwlpbnQJKCpzdG9wKShzdHJ1Y3QgdXNibmV0ICopOworCiAJLyogc2VlIGlmIHBlZXIgaXMgY29ubmVjdGVkIC4uLiBjYW4gc2xlZXAgKi8KIAlpbnQJKCpjaGVja19jb25uZWN0KShzdHJ1Y3QgdXNibmV0ICopOwogCkBAIC0xMTgsOSArMTI0LDggQEAKIAkgKiByaWdodCBhZnRlciBtaW5pZHJpdmVyIGhhdmUgaW5pdGlhbGl6ZWQgaGFyZHdhcmUuICovCiAJaW50CSgqZWFybHlfaW5pdCkoc3RydWN0IHVzYm5ldCAqZGV2KTsKIAotCS8qIGNhbGxlZCBieSBtaW5pZHJpdmVyIHdoZW4gbGluayBzdGF0ZSBjaGFuZ2VzLCBzdGF0ZTogMD1kaXNjb25uZWN0LAotCSAqIDE9Y29ubmVjdCAqLwotCXZvaWQJKCpsaW5rX2NoYW5nZSkoc3RydWN0IHVzYm5ldCAqZGV2LCBpbnQgc3RhdGUpOworCS8qIGNhbGxlZCBieSBtaW5pZHJpdmVyIHdoZW4gcmVjZWl2aW5nIGluZGljYXRpb24gKi8KKwl2b2lkCSgqaW5kaWNhdGlvbikoc3RydWN0IHVzYm5ldCAqZGV2LCB2b2lkICppbmQsIGludCBpbmRsZW4pOwogCiAJLyogZm9yIG5ldyBkZXZpY2VzLCB1c2UgdGhlIGRlc2NyaXB0b3ItcmVhZGluZyBjb2RlIGluc3RlYWQgKi8KIAlpbnQJCWluOwkJLyogcnggZW5kcG9pbnQgKi8KQEAgLTE3Nyw3ICsxODIsOCBAQAogCiBleHRlcm4gaW50IHVzYm5ldF9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKIGV4dGVybiBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOwotZXh0ZXJuIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gbmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CiBleHRlcm4gdm9pZCB1c2JuZXRfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CiBleHRlcm4gaW50IHVzYm5ldF9jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSk7CiAKQEAgLTE4Nyw2ICsxOTMsMTAgQEAKIGV4dGVybiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuIChzdHJ1Y3QgdXNibmV0ICosIHN0cnVjdCBza19idWZmICopOwogZXh0ZXJuIHZvaWQgdXNibmV0X3VubGlua19yeF91cmJzKHN0cnVjdCB1c2JuZXQgKik7CiAKK2V4dGVybiB2b2lkIHVzYm5ldF9wYXVzZV9yeChzdHJ1Y3QgdXNibmV0ICopOworZXh0ZXJuIHZvaWQgdXNibmV0X3Jlc3VtZV9yeChzdHJ1Y3QgdXNibmV0ICopOworZXh0ZXJuIHZvaWQgdXNibmV0X3B1cmdlX3BhdXNlZF9yeHEoc3RydWN0IHVzYm5ldCAqKTsKKwogZXh0ZXJuIGludCB1c2JuZXRfZ2V0X3NldHRpbmdzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCk7CiBleHRlcm4gaW50IHVzYm5ldF9zZXRfc2V0dGluZ3MgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKTsKIGV4dGVybiB1MzIgdXNibmV0X2dldF9saW5rIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaCBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaAppbmRleCBjYjI0MjA0Li41YjRjNmM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCkBAIC0xMTMyLDYgKzExMzIsMTQgQEAKIH07CiAjZGVmaW5lIElXX0VWX0NPTVBBVF9MQ1BfTEVOIG9mZnNldG9mKHN0cnVjdCBfX2NvbXBhdF9pd19ldmVudCwgcG9pbnRlcikKICNkZWZpbmUgSVdfRVZfQ09NUEFUX1BPSU5UX09GRiBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2l3X3BvaW50LCBsZW5ndGgpCisKKy8qIFNpemUgb2YgdGhlIHZhcmlvdXMgZXZlbnRzIGZvciBjb21wYXQgKi8KKyNkZWZpbmUgSVdfRVZfQ09NUEFUX0NIQVJfTEVOCShJV19FVl9DT01QQVRfTENQX0xFTiArIElGTkFNU0laKQorI2RlZmluZSBJV19FVl9DT01QQVRfVUlOVF9MRU4JKElXX0VWX0NPTVBBVF9MQ1BfTEVOICsgc2l6ZW9mKF9fdTMyKSkKKyNkZWZpbmUgSVdfRVZfQ09NUEFUX0ZSRVFfTEVOCShJV19FVl9DT01QQVRfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfZnJlcSkpCisjZGVmaW5lIElXX0VWX0NPTVBBVF9QQVJBTV9MRU4JKElXX0VWX0NPTVBBVF9MQ1BfTEVOICsgc2l6ZW9mKHN0cnVjdCBpd19wYXJhbSkpCisjZGVmaW5lIElXX0VWX0NPTVBBVF9BRERSX0xFTgkoSVdfRVZfQ09NUEFUX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkKKyNkZWZpbmUgSVdfRVZfQ09NUEFUX1FVQUxfTEVOCShJV19FVl9DT01QQVRfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcXVhbGl0eSkpCiAjZGVmaW5lIElXX0VWX0NPTVBBVF9QT0lOVF9MRU4JXAogCShJV19FVl9DT01QQVRfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgY29tcGF0X2l3X3BvaW50KSAtIFwKIAkgSVdfRVZfQ09NUEFUX1BPSU5UX09GRikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd205N3h4LmggYi9pbmNsdWRlL2xpbnV4L3dtOTd4eC5oCmluZGV4IDZmNjk5NjguLjBjOTg3ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd205N3h4LmgKKysrIGIvaW5jbHVkZS9saW51eC93bTk3eHguaApAQCAtMTYsNiArMTYsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogLyoKKyAqIFdNOTd4eCB2YXJpYW50cworICovCisjZGVmaW5lCVdNOTd4eF9HRU5FUklDCQkJMHgwMDAwCisjZGVmaW5lCVdNOTd4eF9XTTE2MTMJCQkweDE2MTMKKworLyoKICAqIFdNOTd4eCBBQzk3IFRvdWNoc2NyZWVuIHJlZ2lzdGVycwogICovCiAjZGVmaW5lIEFDOTdfV005N1hYX0RJR0lUSVNFUjEJCTB4NzYKQEAgLTI4Myw2ICsyODksNyBAQAogCXVuc2lnbmVkIHBlbl9pc19kb3duOjE7CQkvKiBQZW4gaXMgZG93biAqLwogCXVuc2lnbmVkIGF1eF93YWl0aW5nOjE7CQkvKiBhdXggbWVhc3VyZW1lbnQgd2FpdGluZyAqLwogCXVuc2lnbmVkIHBlbl9wcm9iYWJseV9kb3duOjE7CS8qIHVzZWQgaW4gcG9sbGluZyBtb2RlICovCisJdTE2IHZhcmlhbnQ7CQkJLyogV005N3h4IGNoaXAgdmFyaWFudCAqLwogCXUxNiBzdXNwZW5kX21vZGU7ICAgICAgICAgICAgICAgLyogUFJQIGluIHN1c3BlbmQgbW9kZSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggNzhiMWU0Ni4uZDM0NzYzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC0xNTAsMTAgKzE1MCw2IEBACiAJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCB3cml0ZXBhZ2VfdCB3cml0ZXBhZ2UsCiAJCSAgICAgIHZvaWQgKmRhdGEpOwogaW50IGRvX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKLWludCBzeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQlsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpOwotaW50IHN5bmNfcGFnZV9yYW5nZV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpOwogdm9pZCBzZXRfcGFnZV9kaXJ0eV9iYWxhbmNlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcGFnZV9ta3dyaXRlKTsKIHZvaWQgd3JpdGViYWNrX3NldF9yYXRlbGltaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oIGIvaW5jbHVkZS9uZXQvYWZfaWVlZTgwMjE1NC5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGluY2x1ZGUvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oCnJlbmFtZSB0byBpbmNsdWRlL25ldC9hZl9pZWVlODAyMTU0LmgKaW5kZXggMGQ3ODYwNS4uNzVlNjRjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9hZl9pZWVlODAyMTU0LmgKKysrIGIvaW5jbHVkZS9uZXQvYWZfaWVlZTgwMjE1NC5oCkBAIC01NCw3ICs1NCw5IEBACiAJc3RydWN0IGllZWU4MDIxNTRfYWRkciBhZGRyOwogfTsKIAotLyogbWFzdGVyIGRldmljZSAqLwotI2RlZmluZSBJRUVFODAyMTU0X1NJT0NfQUREX1NMQVZFCQkoU0lPQ0RFVlBSSVZBVEUgKyAwKQorLyogZ2V0L3NldHNvY2tvcHQgKi8KKyNkZWZpbmUgU09MX0lFRUU4MDIxNTQJMAorCisjZGVmaW5lIFdQQU5fV0FOVEFDSwkwCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYXJwLmggYi9pbmNsdWRlL25ldC9hcnAuaAppbmRleCBjMjM2MjcwLi43MTZmNDNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hcnAuaAorKysgYi9pbmNsdWRlL25ldC9hcnAuaApAQCAtMjYsNiArMjYsNiBAQAogCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFyZ2V0X2h3KTsKIGV4dGVybiB2b2lkIGFycF94bWl0KHN0cnVjdCBza19idWZmICpza2IpOwogCi1leHRlcm4gc3RydWN0IG5laWdoX29wcyBhcnBfYnJva2VuX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9icm9rZW5fb3BzOwogCiAjZW5kaWYJLyogX0FSUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggOTY4MTY2YS4uNzE4Mzk0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtMTM4LDggKzEzOCwxMSBAQAogc3RydWN0IGJ0X3NrYl9jYiB7CiAJX191OCBwa3RfdHlwZTsKIAlfX3U4IGluY29taW5nOworCV9fdTggdHhfc2VxOworCV9fdTggcmV0cmllczsKKwlfX3U4IHNhcjsKIH07Ci0jZGVmaW5lIGJ0X2NiKHNrYikgKChzdHJ1Y3QgYnRfc2tiX2NiICopKHNrYi0+Y2IpKSAKKyNkZWZpbmUgYnRfY2Ioc2tiKSAoKHN0cnVjdCBidF9za2JfY2IgKikoKHNrYiktPmNiKSkKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqYnRfc2tiX2FsbG9jKHVuc2lnbmVkIGludCBsZW4sIGdmcF90IGhvdykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggYzRjYTQyMi4uN2I2NDBhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogCXN0cnVjdCBza19idWZmCQkqc2VudF9jbWQ7CiAJc3RydWN0IHNrX2J1ZmYJCSpyZWFzc2VtYmx5WzNdOwogCi0Jc3RydWN0IHNlbWFwaG9yZQlyZXFfbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCXJlcV9sb2NrOwogCXdhaXRfcXVldWVfaGVhZF90CXJlcV93YWl0X3E7CiAJX191MzIJCQlyZXFfc3RhdHVzOwogCV9fdTMyCQkJcmVxX3Jlc3VsdDsKQEAgLTE4Nyw2ICsxODcsNyBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX2RlbDsKIAogCXN0cnVjdCBkZXZpY2UJZGV2OworCWF0b21pY190CWRldnJlZjsKIAogCXN0cnVjdCBoY2lfZGV2CSpoZGV2OwogCXZvaWQJCSpsMmNhcF9kYXRhOwpAQCAtMzM5LDYgKzM0MCw5IEBACiB2b2lkIGhjaV9jb25uX2VudGVyX2FjdGl2ZV9tb2RlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CiB2b2lkIGhjaV9jb25uX2VudGVyX3NuaWZmX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIAordm9pZCBoY2lfY29ubl9ob2xkX2RldmljZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwordm9pZCBoY2lfY29ubl9wdXRfZGV2aWNlKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfY29ubl9ob2xkKHN0cnVjdCBoY2lfY29ubiAqY29ubikKIHsKIAlhdG9taWNfaW5jKCZjb25uLT5yZWZjbnQpOwpAQCAtNzAwLDggKzcwNCw4IEBACiAjZGVmaW5lIEhDSV9SRVFfUEVORAkgIDEKICNkZWZpbmUgSENJX1JFUV9DQU5DRUxFRCAgMgogCi0jZGVmaW5lIGhjaV9yZXFfbG9jayhkKQkJZG93bigmZC0+cmVxX2xvY2spCi0jZGVmaW5lIGhjaV9yZXFfdW5sb2NrKGQpCXVwKCZkLT5yZXFfbG9jaykKKyNkZWZpbmUgaGNpX3JlcV9sb2NrKGQpCQltdXRleF9sb2NrKCZkLT5yZXFfbG9jaykKKyNkZWZpbmUgaGNpX3JlcV91bmxvY2soZCkJbXV0ZXhfdW5sb2NrKCZkLT5yZXFfbG9jaykKIAogdm9pZCBoY2lfcmVxX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBpbnQgcmVzdWx0KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaAppbmRleCBlOTE5ZmNhLi45NTE2ZjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaApAQCAtMjcsMTIgKzI3LDE0IEBACiAKIC8qIEwyQ0FQIGRlZmF1bHRzICovCiAjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfTVRVCQk2NzIKKyNkZWZpbmUgTDJDQVBfREVGQVVMVF9NSU5fTVRVCQk0OAogI2RlZmluZSBMMkNBUF9ERUZBVUxUX0ZMVVNIX1RPCQkweGZmZmYKLSNkZWZpbmUgTDJDQVBfREVGQVVMVF9SWF9XSU5ET1cJCTEKLSNkZWZpbmUgTDJDQVBfREVGQVVMVF9NQVhfUkVDRUlWRQkxCi0jZGVmaW5lIEwyQ0FQX0RFRkFVTFRfUkVUUkFOU19UTwkzMDAgICAgLyogMzAwIG1pbGxpc2Vjb25kcyAqLwotI2RlZmluZSBMMkNBUF9ERUZBVUxUX01PTklUT1JfVE8JMTAwMCAgIC8qIDEgc2Vjb25kICovCi0jZGVmaW5lIEwyQ0FQX0RFRkFVTFRfTUFYX1JYX0FQRFUJMHhmZmY3CisjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfVFhfV0lORE9XCQk2MworI2RlZmluZSBMMkNBUF9ERUZBVUxUX05VTV9UT19BQ0sgICAgICAgIChMMkNBUF9ERUZBVUxUX1RYX1dJTkRPVy81KQorI2RlZmluZSBMMkNBUF9ERUZBVUxUX01BWF9UWAkJMworI2RlZmluZSBMMkNBUF9ERUZBVUxUX1JFVFJBTlNfVE8JMTAwMCAgICAvKiAxIHNlY29uZCAqLworI2RlZmluZSBMMkNBUF9ERUZBVUxUX01PTklUT1JfVE8JMTIwMDAgICAvKiAxMiBzZWNvbmRzICovCisjZGVmaW5lIEwyQ0FQX0RFRkFVTFRfTUFYX1BEVV9TSVpFCTY3MgogCiAjZGVmaW5lIEwyQ0FQX0NPTk5fVElNRU9VVAkoNDAwMDApIC8qIDQwIHNlY29uZHMgKi8KICNkZWZpbmUgTDJDQVBfSU5GT19USU1FT1VUCSg0MDAwKSAgLyogIDQgc2Vjb25kcyAqLwpAQCAtNTIsNiArNTQsNyBAQAogCV9fdTE2IGltdHU7CiAJX191MTYgZmx1c2hfdG87CiAJX191OCAgbW9kZTsKKwlfX3U4ICBmY3M7CiB9OwogCiAjZGVmaW5lIEwyQ0FQX0NPTk5JTkZPCTB4MDIKQEAgLTkzLDYgKzk2LDMyIEBACiAjZGVmaW5lIEwyQ0FQX0ZDU19OT05FCQkweDAwCiAjZGVmaW5lIEwyQ0FQX0ZDU19DUkMxNgkJMHgwMQogCisvKiBMMkNBUCBDb250cm9sIEZpZWxkIGJpdCBtYXNrcyAqLworI2RlZmluZSBMMkNBUF9DVFJMX1NBUiAgICAgICAgICAgICAgIDB4QzAwMAorI2RlZmluZSBMMkNBUF9DVFJMX1JFUVNFUSAgICAgICAgICAgIDB4M0YwMAorI2RlZmluZSBMMkNBUF9DVFJMX1RYU0VRICAgICAgICAgICAgIDB4MDA3RQorI2RlZmluZSBMMkNBUF9DVFJMX1JFVFJBTlMgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBMMkNBUF9DVFJMX0ZJTkFMICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBMMkNBUF9DVFJMX1BPTEwgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBMMkNBUF9DVFJMX1NVUEVSVklTRSAgICAgICAgIDB4MDAwQworI2RlZmluZSBMMkNBUF9DVFJMX0ZSQU1FX1RZUEUgICAgICAgIDB4MDAwMSAvKiBJLSBvciBTLUZyYW1lICovCisKKyNkZWZpbmUgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVCAgICAgIDEKKyNkZWZpbmUgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQgICAgIDgKKyNkZWZpbmUgTDJDQVBfQ1RSTF9TQVJfU0hJRlQgICAgICAgMTQKKworLyogTDJDQVAgU3VwZXJ2aXNvcnkgRnVuY3Rpb24gKi8KKyNkZWZpbmUgTDJDQVBfU1VQRVJfUkNWX1JFQURZICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgTDJDQVBfU1VQRVJfUkVKRUNUICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgTDJDQVBfU1VQRVJfUkNWX05PVF9SRUFEWSAgICAgICAweDAwMDgKKyNkZWZpbmUgTDJDQVBfU1VQRVJfU0VMRUNUX1JFSkVDVCAgICAgICAweDAwMEMKKworLyogTDJDQVAgU2VnbWVudGF0aW9uIGFuZCBSZWFzc2VtYmx5ICovCisjZGVmaW5lIEwyQ0FQX1NEVV9VTlNFR01FTlRFRCAgICAgICAweDAwMDAKKyNkZWZpbmUgTDJDQVBfU0RVX1NUQVJUICAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBMMkNBUF9TRFVfRU5EICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIEwyQ0FQX1NEVV9DT05USU5VRSAgICAgICAgICAweEMwMDAKKwogLyogTDJDQVAgc3RydWN0dXJlcyAqLwogc3RydWN0IGwyY2FwX2hkciB7CiAJX19sZTE2ICAgICBsZW47CkBAIC0xOTAsNyArMjE5LDcgQEAKICNkZWZpbmUgTDJDQVBfTU9ERV9SRVRSQU5TCTB4MDEKICNkZWZpbmUgTDJDQVBfTU9ERV9GTE9XQ1RMCTB4MDIKICNkZWZpbmUgTDJDQVBfTU9ERV9FUlRNCQkweDAzCi0jZGVmaW5lIEwyQ0FQX01PREVfU1RSRUFNCTB4MDQKKyNkZWZpbmUgTDJDQVBfTU9ERV9TVFJFQU1JTkcJMHgwNAogCiBzdHJ1Y3QgbDJjYXBfZGlzY29ubl9yZXEgewogCV9fbGUxNiAgICAgZGNpZDsKQEAgLTI2MSw2ICsyOTAsMTQgQEAKIAogLyogLS0tLS0gTDJDQVAgY2hhbm5lbCBhbmQgc29ja2V0IGluZm8gLS0tLS0gKi8KICNkZWZpbmUgbDJjYXBfcGkoc2spICgoc3RydWN0IGwyY2FwX3BpbmZvICopIHNrKQorI2RlZmluZSBUWF9RVUVVRShzaykgKCZsMmNhcF9waShzayktPnR4X3F1ZXVlKQorI2RlZmluZSBTUkVKX1FVRVVFKHNrKSAoJmwyY2FwX3BpKHNrKS0+c3Jlal9xdWV1ZSkKKyNkZWZpbmUgU1JFSl9MSVNUKHNrKSAoJmwyY2FwX3BpKHNrKS0+c3Jlal9sLmxpc3QpCisKK3N0cnVjdCBzcmVqX2xpc3QgeworCV9fdTgJdHhfc2VxOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CiAKIHN0cnVjdCBsMmNhcF9waW5mbyB7CiAJc3RydWN0IGJ0X3NvY2sJYnQ7CkBAIC0yNzEsMzAgKzMwOCw5NyBAQAogCV9fdTE2CQlpbXR1OwogCV9fdTE2CQlvbXR1OwogCV9fdTE2CQlmbHVzaF90bzsKLQlfX3U4ICAgICAgICAgICAgc2VjX2xldmVsOworCV9fdTgJCW1vZGU7CisJX191OAkJbnVtX2NvbmZfcmVxOworCV9fdTgJCW51bV9jb25mX3JzcDsKKworCV9fdTgJCWZjczsKKwlfX3U4CQlzZWNfbGV2ZWw7CiAJX191OAkJcm9sZV9zd2l0Y2g7Ci0JX191OCAgICAgICAgICAgIGZvcmNlX3JlbGlhYmxlOworCV9fdTgJCWZvcmNlX3JlbGlhYmxlOwogCiAJX191OAkJY29uZl9yZXFbNjRdOwogCV9fdTgJCWNvbmZfbGVuOwogCV9fdTgJCWNvbmZfc3RhdGU7Ci0JX191OAkJY29uZl9yZXRyeTsKKwlfX3U4CQljb25uX3N0YXRlOworCisJX191OAkJbmV4dF90eF9zZXE7CisJX191OAkJZXhwZWN0ZWRfYWNrX3NlcTsKKwlfX3U4CQlyZXFfc2VxOworCV9fdTgJCWV4cGVjdGVkX3R4X3NlcTsKKwlfX3U4CQlidWZmZXJfc2VxOworCV9fdTgJCWJ1ZmZlcl9zZXFfc3JlajsKKwlfX3U4CQlzcmVqX3NhdmVfcmVxc2VxOworCV9fdTgJCXVuYWNrZWRfZnJhbWVzOworCV9fdTgJCXJldHJ5X2NvdW50OworCV9fdTgJCW51bV90b19hY2s7CisJX191MTYJCXNkdV9sZW47CisJX191MTYJCXBhcnRpYWxfc2R1X2xlbjsKKwlzdHJ1Y3Qgc2tfYnVmZgkqc2R1OwogCiAJX191OAkJaWRlbnQ7CiAKKwlfX3U4CQlyZW1vdGVfdHhfd2luOworCV9fdTgJCXJlbW90ZV9tYXhfdHg7CisJX191MTYJCXJldHJhbnNfdGltZW91dDsKKwlfX3UxNgkJbW9uaXRvcl90aW1lb3V0OworCV9fdTE2CQltYXhfcGR1X3NpemU7CisKIAlfX2xlMTYJCXNwb3J0OwogCisJc3RydWN0IHRpbWVyX2xpc3QJcmV0cmFuc190aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAltb25pdG9yX3RpbWVyOworCXN0cnVjdCBza19idWZmX2hlYWQJdHhfcXVldWU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlzcmVqX3F1ZXVlOworCXN0cnVjdCBzcmVqX2xpc3QJc3Jlal9sOwogCXN0cnVjdCBsMmNhcF9jb25uCSpjb25uOwogCXN0cnVjdCBzb2NrCQkqbmV4dF9jOwogCXN0cnVjdCBzb2NrCQkqcHJldl9jOwogfTsKIAotI2RlZmluZSBMMkNBUF9DT05GX1JFUV9TRU5UCTB4MDEKLSNkZWZpbmUgTDJDQVBfQ09ORl9JTlBVVF9ET05FCTB4MDIKLSNkZWZpbmUgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORQkweDA0Ci0jZGVmaW5lIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5ECTB4ODAKKyNkZWZpbmUgTDJDQVBfQ09ORl9SRVFfU0VOVCAgICAgICAweDAxCisjZGVmaW5lIEwyQ0FQX0NPTkZfSU5QVVRfRE9ORSAgICAgMHgwMgorI2RlZmluZSBMMkNBUF9DT05GX09VVFBVVF9ET05FICAgIDB4MDQKKyNkZWZpbmUgTDJDQVBfQ09ORl9NVFVfRE9ORSAgICAgICAweDA4CisjZGVmaW5lIEwyQ0FQX0NPTkZfTU9ERV9ET05FICAgICAgMHgxMAorI2RlZmluZSBMMkNBUF9DT05GX0NPTk5FQ1RfUEVORCAgIDB4MjAKKyNkZWZpbmUgTDJDQVBfQ09ORl9OT19GQ1NfUkVDViAgICAweDQwCisjZGVmaW5lIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSAgMHg4MAogCi0jZGVmaW5lIEwyQ0FQX0NPTkZfTUFYX1JFVFJJRVMJMgorI2RlZmluZSBMMkNBUF9DT05GX01BWF9DT05GX1JFUSAyCisjZGVmaW5lIEwyQ0FQX0NPTkZfTUFYX0NPTkZfUlNQIDIKKworI2RlZmluZSBMMkNBUF9DT05OX1NBUl9TRFUgICAgICAgICAweDAxCisjZGVmaW5lIEwyQ0FQX0NPTk5fU1JFSl9TRU5UICAgICAgIDB4MDIKKyNkZWZpbmUgTDJDQVBfQ09OTl9XQUlUX0YgICAgICAgICAgMHgwNAorI2RlZmluZSBMMkNBUF9DT05OX1NSRUpfQUNUICAgICAgICAweDA4CisjZGVmaW5lIEwyQ0FQX0NPTk5fU0VORF9QQklUICAgICAgIDB4MTAKKyNkZWZpbmUgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSAgICAgMHgyMAorI2RlZmluZSBMMkNBUF9DT05OX0xPQ0FMX0JVU1kgICAgICAweDQwCisKKyNkZWZpbmUgX19tb2RfcmV0cmFuc190aW1lcigpIG1vZF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyLCBcCisJCWppZmZpZXMgKyAgbXNlY3NfdG9famlmZmllcyhMMkNBUF9ERUZBVUxUX1JFVFJBTlNfVE8pKTsKKyNkZWZpbmUgX19tb2RfbW9uaXRvcl90aW1lcigpIG1vZF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyLCBcCisJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEwyQ0FQX0RFRkFVTFRfTU9OSVRPUl9UTykpOworCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF90eF93aW5kb3dfZnVsbChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlpbnQgc3ViOworCisJc3ViID0gKHBpLT5uZXh0X3R4X3NlcSAtIHBpLT5leHBlY3RlZF9hY2tfc2VxKSAlIDY0OworCisJaWYgKHN1YiA8IDApCisJCXN1YiArPSA2NDsKKworCXJldHVybiAoc3ViID09IHBpLT5yZW1vdGVfdHhfd2luKTsKK30KKworI2RlZmluZSBfX2dldF90eHNlcShjdHJsKSAoKGN0cmwpICYgTDJDQVBfQ1RSTF9UWFNFUSkgPj4gMQorI2RlZmluZSBfX2dldF9yZXFzZXEoY3RybCkgKChjdHJsKSAmIEwyQ0FQX0NUUkxfUkVRU0VRKSA+PiA4CisjZGVmaW5lIF9faXNfaWZyYW1lKGN0cmwpICEoKGN0cmwpICYgTDJDQVBfQ1RSTF9GUkFNRV9UWVBFKQorI2RlZmluZSBfX2lzX3NmcmFtZShjdHJsKSAoY3RybCkgJiBMMkNBUF9DVFJMX0ZSQU1FX1RZUEUKKyNkZWZpbmUgX19pc19zYXJfc3RhcnQoY3RybCkgKChjdHJsKSAmIEwyQ0FQX0NUUkxfU0FSKSA9PSBMMkNBUF9TRFVfU1RBUlQKIAogdm9pZCBsMmNhcF9sb2FkKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKaW5kZXggYzI3NDk5My4uOTIxZDdiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBSRkNPTU1fQ09OTl9USU1FT1VUIChIWiAqIDMwKQogI2RlZmluZSBSRkNPTU1fRElTQ19USU1FT1VUIChIWiAqIDIwKQogI2RlZmluZSBSRkNPTU1fQVVUSF9USU1FT1VUIChIWiAqIDI1KQorI2RlZmluZSBSRkNPTU1fSURMRV9USU1FT1VUIChIWiAqIDIpCiAKICNkZWZpbmUgUkZDT01NX0RFRkFVTFRfTVRVCTEyNwogI2RlZmluZSBSRkNPTU1fREVGQVVMVF9DUkVESVRTCTcKQEAgLTE1NCw2ICsxNTUsNyBAQAogc3RydWN0IHJmY29tbV9zZXNzaW9uIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHNvY2tldCAgICpzb2NrOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwogCXVuc2lnbmVkIGxvbmcgICAgc3RhdGU7CiAJdW5zaWduZWQgbG9uZyAgICBmbGFnczsKIAlhdG9taWNfdCAgICAgICAgIHJlZmNudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCmluZGV4IGQxODkyZDYuLjNkODc0YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaApAQCAtODAsNyArODAsNiBAQAogICogd2l0aCBjZmc4MDIxMS4KICAqCiAgKiBAY2VudGVyX2ZyZXE6IGNlbnRlciBmcmVxdWVuY3kgaW4gTUh6Ci0gKiBAbWF4X2JhbmR3aWR0aDogbWF4aW11bSBhbGxvd2VkIGJhbmR3aWR0aCBmb3IgdGhpcyBjaGFubmVsLCBpbiBNSHoKICAqIEBod192YWx1ZTogaGFyZHdhcmUtc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBjaGFubmVsCiAgKiBAZmxhZ3M6IGNoYW5uZWwgZmxhZ3MgZnJvbSAmZW51bSBpZWVlODAyMTFfY2hhbm5lbF9mbGFncy4KICAqIEBvcmlnX2ZsYWdzOiBjaGFubmVsIGZsYWdzIGF0IHJlZ2lzdHJhdGlvbiB0aW1lLCB1c2VkIGJ5IHJlZ3VsYXRvcnkKQEAgLTk3LDcgKzk2LDYgQEAKIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCB7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXUxNiBjZW50ZXJfZnJlcTsKLQl1OCBtYXhfYmFuZHdpZHRoOwogCXUxNiBod192YWx1ZTsKIAl1MzIgZmxhZ3M7CiAJaW50IG1heF9hbnRlbm5hX2dhaW47CkBAIC0zNzIsNiArMzcwLDEwIEBACiAgKiBAdHhyYXRlOiBjdXJyZW50IHVuaWNhc3QgYml0cmF0ZSB0byB0aGlzIHN0YXRpb24KICAqIEByeF9wYWNrZXRzOiBwYWNrZXRzIHJlY2VpdmVkIGZyb20gdGhpcyBzdGF0aW9uCiAgKiBAdHhfcGFja2V0czogcGFja2V0cyB0cmFuc21pdHRlZCB0byB0aGlzIHN0YXRpb24KKyAqIEBnZW5lcmF0aW9uOiBnZW5lcmF0aW9uIG51bWJlciBmb3Igbmw4MDIxMSBkdW1wcy4KKyAqCVRoaXMgbnVtYmVyIHNob3VsZCBpbmNyZWFzZSBldmVyeSB0aW1lIHRoZSBsaXN0IG9mIHN0YXRpb25zCisgKgljaGFuZ2VzLCBpLmUuIHdoZW4gYSBzdGF0aW9uIGlzIGFkZGVkIG9yIHJlbW92ZWQsIHNvIHRoYXQKKyAqCXVzZXJzcGFjZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGdvdCBhIGNvbnNpc3RlbnQgc25hcHNob3QuCiAgKi8KIHN0cnVjdCBzdGF0aW9uX2luZm8gewogCXUzMiBmaWxsZWQ7CkBAIC0zODUsNiArMzg3LDggQEAKIAlzdHJ1Y3QgcmF0ZV9pbmZvIHR4cmF0ZTsKIAl1MzIgcnhfcGFja2V0czsKIAl1MzIgdHhfcGFja2V0czsKKworCWludCBnZW5lcmF0aW9uOwogfTsKIAogLyoqCkBAIC00NDQsNiArNDQ4LDEwIEBACiAgKiBAZmxhZ3M6IG1lc2ggcGF0aCBmbGFncwogICogQGRpc2NvdmVyeV90aW1lb3V0OiB0b3RhbCBtZXNoIHBhdGggZGlzY292ZXJ5IHRpbWVvdXQsIGluIG1zZWNzCiAgKiBAZGlzY292ZXJ5X3JldHJpZXM6IG1lc2ggcGF0aCBkaXNjb3ZlcnkgcmV0cmllcworICogQGdlbmVyYXRpb246IGdlbmVyYXRpb24gbnVtYmVyIGZvciBubDgwMjExIGR1bXBzLgorICoJVGhpcyBudW1iZXIgc2hvdWxkIGluY3JlYXNlIGV2ZXJ5IHRpbWUgdGhlIGxpc3Qgb2YgbWVzaCBwYXRocworICoJY2hhbmdlcywgaS5lLiB3aGVuIGEgc3RhdGlvbiBpcyBhZGRlZCBvciByZW1vdmVkLCBzbyB0aGF0CisgKgl1c2Vyc3BhY2UgY2FuIHRlbGwgd2hldGhlciBpdCBnb3QgYSBjb25zaXN0ZW50IHNuYXBzaG90LgogICovCiBzdHJ1Y3QgbXBhdGhfaW5mbyB7CiAJdTMyIGZpbGxlZDsKQEAgLTQ1NCw2ICs0NjIsOCBAQAogCXUzMiBkaXNjb3ZlcnlfdGltZW91dDsKIAl1OCBkaXNjb3ZlcnlfcmV0cmllczsKIAl1OCBmbGFnczsKKworCWludCBnZW5lcmF0aW9uOwogfTsKIAogLyoqCkBAIC01MzgsMjMgKzU0OCwyNiBAQAogICogQHNzaWRzOiBTU0lEcyB0byBzY2FuIGZvciAoYWN0aXZlIHNjYW4gb25seSkKICAqIEBuX3NzaWRzOiBudW1iZXIgb2YgU1NJRHMKICAqIEBjaGFubmVsczogY2hhbm5lbHMgdG8gc2NhbiBvbi4KLSAqIEBuX2NoYW5uZWxzOiBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIGVhY2ggYmFuZAorICogQG5fY2hhbm5lbHM6IHRvdGFsIG51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCiAgKiBAaWU6IG9wdGlvbmFsIGluZm9ybWF0aW9uIGVsZW1lbnQocykgdG8gYWRkIGludG8gUHJvYmUgUmVxdWVzdCBvciAlTlVMTAogICogQGllX2xlbjogbGVuZ3RoIG9mIGllIGluIG9jdGV0cwogICogQHdpcGh5OiB0aGUgd2lwaHkgdGhpcyB3YXMgZm9yCi0gKiBAaWZpZHg6IHRoZSBpbnRlcmZhY2UgaW5kZXgKKyAqIEBkZXY6IHRoZSBpbnRlcmZhY2UKICAqLwogc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCB7CiAJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWRzOwogCWludCBuX3NzaWRzOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqKmNoYW5uZWxzOwogCXUzMiBuX2NoYW5uZWxzOwogCWNvbnN0IHU4ICppZTsKIAlzaXplX3QgaWVfbGVuOwogCiAJLyogaW50ZXJuYWwgKi8KIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwotCWludCBpZmlkeDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWJvb2wgYWJvcnRlZDsKKworCS8qIGtlZXAgbGFzdCAqLworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHNbMF07CiB9OwogCiAvKioKQEAgLTU4NCw3ICs1OTcsNiBAQAogICoJaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlc2UgYXJlIHdlbGwtZm9ybWVkISkKICAqIEBsZW5faW5mb3JtYXRpb25fZWxlbWVudHM6IHRvdGFsIGxlbmd0aCBvZiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMKICAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCB2YWx1ZSAodHlwZSBkZXBlbmRzIG9uIHRoZSB3aXBoeSdzIHNpZ25hbF90eXBlKQotICogQGhvbGQ6IEJTUyBzaG91bGQgbm90IGV4cGlyZQogICogQGZyZWVfcHJpdjogZnVuY3Rpb24gcG9pbnRlciB0byBmcmVlIHByaXZhdGUgZGF0YQogICogQHByaXY6IHByaXZhdGUgYXJlYSBmb3IgZHJpdmVyIHVzZSwgaGFzIGF0IGxlYXN0IHdpcGh5LT5ic3NfcHJpdl9zaXplIGJ5dGVzCiAgKi8KQEAgLTYwNSwzNyArNjE3LDU5IEBACiB9OwogCiAvKioKKyAqIGllZWU4MDIxMV9ic3NfZ2V0X2llIC0gZmluZCBJRSB3aXRoIGdpdmVuIElECisgKiBAYnNzOiB0aGUgYnNzIHRvIHNlYXJjaAorICogQGllOiB0aGUgSUUgSUQKKyAqIFJldHVybnMgJU5VTEwgaWYgbm90IGZvdW5kLgorICovCitjb25zdCB1OCAqaWVlZTgwMjExX2Jzc19nZXRfaWUoc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzLCB1OCBpZSk7CisKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzIC0gQ3J5cHRvIHNldHRpbmdzCisgKiBAd3BhX3ZlcnNpb25zOiBpbmRpY2F0ZXMgd2hpY2gsIGlmIGFueSwgV1BBIHZlcnNpb25zIGFyZSBlbmFibGVkCisgKgkoZnJvbSBlbnVtIG5sODAyMTFfd3BhX3ZlcnNpb25zKQorICogQGNpcGhlcl9ncm91cDogZ3JvdXAga2V5IGNpcGhlciBzdWl0ZSAob3IgMCBpZiB1bnNldCkKKyAqIEBuX2NpcGhlcnNfcGFpcndpc2U6IG51bWJlciBvZiBBUCBzdXBwb3J0ZWQgdW5pY2FzdCBjaXBoZXJzCisgKiBAY2lwaGVyc19wYWlyd2lzZTogdW5pY2FzdCBrZXkgY2lwaGVyIHN1aXRlcworICogQG5fYWttX3N1aXRlczogbnVtYmVyIG9mIEFLTSBzdWl0ZXMKKyAqIEBha21fc3VpdGVzOiBBS00gc3VpdGVzCisgKiBAY29udHJvbF9wb3J0OiBXaGV0aGVyIHVzZXIgc3BhY2UgY29udHJvbHMgSUVFRSA4MDIuMVggcG9ydCwgaS5lLiwKKyAqCXNldHMvY2xlYXJzICVOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQuIElmIHRydWUsIHRoZSBkcml2ZXIgaXMKKyAqCXJlcXVpcmVkIHRvIGFzc3VtZSB0aGF0IHRoZSBwb3J0IGlzIHVuYXV0aG9yaXplZCB1bnRpbCBhdXRob3JpemVkIGJ5CisgKgl1c2VyIHNwYWNlLiBPdGhlcndpc2UsIHBvcnQgaXMgbWFya2VkIGF1dGhvcml6ZWQgYnkgZGVmYXVsdC4KKyAqLworc3RydWN0IGNmZzgwMjExX2NyeXB0b19zZXR0aW5ncyB7CisJdTMyIHdwYV92ZXJzaW9uczsKKwl1MzIgY2lwaGVyX2dyb3VwOworCWludCBuX2NpcGhlcnNfcGFpcndpc2U7CisJdTMyIGNpcGhlcnNfcGFpcndpc2VbTkw4MDIxMV9NQVhfTlJfQ0lQSEVSX1NVSVRFU107CisJaW50IG5fYWttX3N1aXRlczsKKwl1MzIgYWttX3N1aXRlc1tOTDgwMjExX01BWF9OUl9BS01fU1VJVEVTXTsKKwlib29sIGNvbnRyb2xfcG9ydDsKK307CisKKy8qKgogICogc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAtIEF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZGF0YQogICoKICAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQogICogYXV0aGVudGljYXRpb24uCi0gKiBOT1RFOiBUaGlzIHN0cnVjdHVyZSB3aWxsIGxpa2VseSBjaGFuZ2Ugd2hlbiBtb3JlIGNvZGUgZnJvbSBtYWM4MDIxMSBpcwotICogbW92ZWQgaW50byBjZmc4MDIxMSBzbyB0aGF0IG5vbi1tYWM4MDIxMSBkcml2ZXJzIGNhbiBiZW5lZml0IGZyb20gaXQsIHRvby4KLSAqIEJlZm9yZSB1c2luZyB0aGlzIGluIGEgZHJpdmVyIHRoYXQgZG9lcyBub3QgdXNlIG1hYzgwMjExLCBpdCB3b3VsZCBiZSBiZXR0ZXIKLSAqIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhhdCB3b3JrIGFuZCBiZXR0ZXIgeWV0LCB2b2x1bnRlZXIgdG8gd29yayBvbiBpdC4KICAqCi0gKiBAY2hhbjogVGhlIGNoYW5uZWwgdG8gdXNlIG9yICVOVUxMIGlmIG5vdCBzcGVjaWZpZWQgKGF1dG8tc2VsZWN0IGJhc2VkIG9uCi0gKglzY2FuIHJlc3VsdHMpCi0gKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEIGluIGluZnJhc3RydWN0dXJlIGNhc2UpOwotICoJdGhpcyBmaWVsZCBpcyByZXF1aXJlZCB0byBiZSBwcmVzZW50OyBpZiB0aGUgZHJpdmVyIHdhbnRzIHRvIGhlbHAgd2l0aAotICoJQlNTIHNlbGVjdGlvbiwgaXQgc2hvdWxkIHVzZSAoeWV0IHRvIGJlIGFkZGVkKSBNTE1FIGV2ZW50IHRvIGFsbG93IHVzZXIKLSAqCXNwYWNlIFNNRSB0byBiZSBub3RpZmllZCBvZiByb2FtaW5nIGNhbmRpZGF0ZSwgc28gdGhhdCB0aGUgU01FIGNhbiB0aGVuCi0gKgl1c2UgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qgd2l0aCB0aGUgcmVjb21tZW5kZWQgQlNTSUQgYW5kIHdoYXRldmVyCi0gKglvdGhlciBkYXRhIG1heSBiZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uL2Fzc29jaWF0aW9uCi0gKiBAc3NpZDogU1NJRCBvciAlTlVMTCBpZiBub3QgeWV0IGF2YWlsYWJsZQotICogQHNzaWRfbGVuOiBMZW5ndGggb2Ygc3NpZCBpbiBvY3RldHMKKyAqIEBic3M6IFRoZSBCU1MgdG8gYXV0aGVudGljYXRlIHdpdGguCiAgKiBAYXV0aF90eXBlOiBBdXRoZW50aWNhdGlvbiB0eXBlIChhbGdvcml0aG0pCiAgKiBAaWU6IEV4dHJhIElFcyB0byBhZGQgdG8gQXV0aGVudGljYXRpb24gZnJhbWUgb3IgJU5VTEwKICAqIEBpZV9sZW46IExlbmd0aCBvZiBpZSBidWZmZXIgaW4gb2N0ZXRzCisgKiBAa2V5X2xlbjogbGVuZ3RoIG9mIFdFUCBrZXkgZm9yIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24KKyAqIEBrZXlfaWR4OiBpbmRleCBvZiBXRVAga2V5IGZvciBzaGFyZWQga2V5IGF1dGhlbnRpY2F0aW9uCisgKiBAa2V5OiBXRVAga2V5IGZvciBzaGFyZWQga2V5IGF1dGhlbnRpY2F0aW9uCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKLQl1OCAqcGVlcl9hZGRyOwotCWNvbnN0IHU4ICpzc2lkOwotCXNpemVfdCBzc2lkX2xlbjsKLQllbnVtIG5sODAyMTFfYXV0aF90eXBlIGF1dGhfdHlwZTsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CiAJY29uc3QgdTggKmllOwogCXNpemVfdCBpZV9sZW47CisJZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGU7CisJY29uc3QgdTggKmtleTsKKwl1OCBrZXlfbGVuLCBrZXlfaWR4OwogfTsKIAogLyoqCkBAIC02NDMsMzUgKzY3NywxOSBAQAogICoKICAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQogICogKHJlKWFzc29jaWF0aW9uLgotICogTk9URTogVGhpcyBzdHJ1Y3R1cmUgd2lsbCBsaWtlbHkgY2hhbmdlIHdoZW4gbW9yZSBjb2RlIGZyb20gbWFjODAyMTEgaXMKLSAqIG1vdmVkIGludG8gY2ZnODAyMTEgc28gdGhhdCBub24tbWFjODAyMTEgZHJpdmVycyBjYW4gYmVuZWZpdCBmcm9tIGl0LCB0b28uCi0gKiBCZWZvcmUgdXNpbmcgdGhpcyBpbiBhIGRyaXZlciB0aGF0IGRvZXMgbm90IHVzZSBtYWM4MDIxMSwgaXQgd291bGQgYmUgYmV0dGVyCi0gKiB0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoYXQgd29yayBhbmQgYmV0dGVyIHlldCwgdm9sdW50ZWVyIHRvIHdvcmsgb24gaXQuCi0gKgotICogQGNoYW46IFRoZSBjaGFubmVsIHRvIHVzZSBvciAlTlVMTCBpZiBub3Qgc3BlY2lmaWVkIChhdXRvLXNlbGVjdCBiYXNlZCBvbgotICoJc2NhbiByZXN1bHRzKQotICogQHBlZXJfYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgU1RBIChBUCBCU1NJRCk7IHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKLSAqCXRvIGJlIHByZXNlbnQgYW5kIHRoZSBTVEEgbXVzdCBiZSBpbiBTdGF0ZSAyIChhdXRoZW50aWNhdGVkKSB3aXRoIHRoZQotICoJcGVlciBTVEEKLSAqIEBzc2lkOiBTU0lECi0gKiBAc3NpZF9sZW46IExlbmd0aCBvZiBzc2lkIGluIG9jdGV0cworICogQGJzczogVGhlIEJTUyB0byBhc3NvY2lhdGUgd2l0aC4KICAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byAoUmUpQXNzb2NpYXRpb24gUmVxdWVzdCBmcmFtZSBvciAlTlVMTAogICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKICAqIEB1c2VfbWZwOiBVc2UgbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIChJRUVFIDgwMi4xMXcpIGluIHRoaXMgYXNzb2NpYXRpb24KLSAqIEBjb250cm9sX3BvcnQ6IFdoZXRoZXIgdXNlciBzcGFjZSBjb250cm9scyBJRUVFIDgwMi4xWCBwb3J0LCBpLmUuLAotICoJc2V0cy9jbGVhcnMgJU5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRC4gSWYgdHJ1ZSwgdGhlIGRyaXZlciBpcwotICoJcmVxdWlyZWQgdG8gYXNzdW1lIHRoYXQgdGhlIHBvcnQgaXMgdW5hdXRob3JpemVkIHVudGlsIGF1dGhvcml6ZWQgYnkKLSAqCXVzZXIgc3BhY2UuIE90aGVyd2lzZSwgcG9ydCBpcyBtYXJrZWQgYXV0aG9yaXplZCBieSBkZWZhdWx0LgorICogQGNyeXB0bzogY3J5cHRvIHNldHRpbmdzCisgKiBAcHJldl9ic3NpZDogcHJldmlvdXMgQlNTSUQsIGlmIG5vdCAlTlVMTCB1c2UgcmVhc3NvY2lhdGUgZnJhbWUKICAqLwogc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKLQl1OCAqcGVlcl9hZGRyOwotCWNvbnN0IHU4ICpzc2lkOwotCXNpemVfdCBzc2lkX2xlbjsKLQljb25zdCB1OCAqaWU7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOworCWNvbnN0IHU4ICppZSwgKnByZXZfYnNzaWQ7CiAJc2l6ZV90IGllX2xlbjsKKwlzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzIGNyeXB0bzsKIAlib29sIHVzZV9tZnA7Ci0JYm9vbCBjb250cm9sX3BvcnQ7CiB9OwogCiAvKioKQEAgLTY4MCwxNiArNjk4LDE2IEBACiAgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29tcGxldGUgSUVFRSA4MDIuMTEKICAqIGRlYXV0aGVudGljYXRpb24uCiAgKgotICogQHBlZXJfYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgU1RBIChBUCBCU1NJRCk7IHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKLSAqCXRvIGJlIHByZXNlbnQgYW5kIHRoZSBTVEEgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHBlZXIgU1RBCisgKiBAYnNzOiB0aGUgQlNTIHRvIGRlYXV0aGVudGljYXRlIGZyb20KICAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byBEZWF1dGhlbnRpY2F0aW9uIGZyYW1lIG9yICVOVUxMCiAgKiBAaWVfbGVuOiBMZW5ndGggb2YgaWUgYnVmZmVyIGluIG9jdGV0cworICogQHJlYXNvbl9jb2RlOiBUaGUgcmVhc29uIGNvZGUgZm9yIHRoZSBkZWF1dGhlbnRpY2F0aW9uCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCB7Ci0JdTggKnBlZXJfYWRkcjsKLQl1MTYgcmVhc29uX2NvZGU7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOwogCWNvbnN0IHU4ICppZTsKIAlzaXplX3QgaWVfbGVuOworCXUxNiByZWFzb25fY29kZTsKIH07CiAKIC8qKgpAQCAtNjk4LDE2ICs3MTYsMTYgQEAKICAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQogICogZGlzYXNzb2NhdGlvbi4KICAqCi0gKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEKTsgdGhpcyBmaWVsZCBpcyByZXF1aXJlZAotICoJdG8gYmUgcHJlc2VudCBhbmQgdGhlIFNUQSBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVlciBTVEEKKyAqIEBic3M6IHRoZSBCU1MgdG8gZGlzYXNzb2NpYXRlIGZyb20KICAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byBEaXNhc3NvY2lhdGlvbiBmcmFtZSBvciAlTlVMTAogICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqIEByZWFzb25fY29kZTogVGhlIHJlYXNvbiBjb2RlIGZvciB0aGUgZGlzYXNzb2NpYXRpb24KICAqLwogc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgewotCXU4ICpwZWVyX2FkZHI7Ci0JdTE2IHJlYXNvbl9jb2RlOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKIAljb25zdCB1OCAqaWU7CiAJc2l6ZV90IGllX2xlbjsKKwl1MTYgcmVhc29uX2NvZGU7CiB9OwogCiAvKioKQEAgLTcyNiw2ICs3NDQsOCBAQAogICogQGllOiBpbmZvcm1hdGlvbiBlbGVtZW50KHMpIHRvIGluY2x1ZGUgaW4gdGhlIGJlYWNvbgogICogQGllX2xlbjogbGVuZ3RoIG9mIHRoYXQKICAqIEBiZWFjb25faW50ZXJ2YWw6IGJlYWNvbiBpbnRlcnZhbCB0byB1c2UKKyAqIEBwcml2YWN5OiB0aGlzIGlzIGEgcHJvdGVjdGVkIG5ldHdvcmssIGtleXMgd2lsbCBiZSBjb25maWd1cmVkCisgKglhZnRlciBqb2luaW5nCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyB7CiAJdTggKnNzaWQ7CkBAIC03MzUsNiArNzU1LDQyIEBACiAJdTggc3NpZF9sZW4sIGllX2xlbjsKIAl1MTYgYmVhY29uX2ludGVydmFsOwogCWJvb2wgY2hhbm5lbF9maXhlZDsKKwlib29sIHByaXZhY3k7Cit9OworCisvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAtIENvbm5lY3Rpb24gcGFyYW1ldGVycworICoKKyAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQorICogYXV0aGVudGljYXRpb24gYW5kIGFzc29jaWF0aW9uLgorICoKKyAqIEBjaGFubmVsOiBUaGUgY2hhbm5lbCB0byB1c2Ugb3IgJU5VTEwgaWYgbm90IHNwZWNpZmllZCAoYXV0by1zZWxlY3QgYmFzZWQKKyAqCW9uIHNjYW4gcmVzdWx0cykKKyAqIEBic3NpZDogVGhlIEFQIEJTU0lEIG9yICVOVUxMIGlmIG5vdCBzcGVjaWZpZWQgKGF1dG8tc2VsZWN0IGJhc2VkIG9uIHNjYW4KKyAqCXJlc3VsdHMpCisgKiBAc3NpZDogU1NJRAorICogQHNzaWRfbGVuOiBMZW5ndGggb2Ygc3NpZCBpbiBvY3RldHMKKyAqIEBhdXRoX3R5cGU6IEF1dGhlbnRpY2F0aW9uIHR5cGUgKGFsZ29yaXRobSkKKyAqIEBhc3NvY19pZTogSUVzIGZvciBhc3NvY2lhdGlvbiByZXF1ZXN0CisgKiBAYXNzb2NfaWVfbGVuOiBMZW5ndGggb2YgYXNzb2NfaWUgaW4gb2N0ZXRzCisgKiBAcHJpdmFjeTogaW5kaWNhdGVzIHdoZXRoZXIgcHJpdmFjeS1lbmFibGVkIEFQcyBzaG91bGQgYmUgdXNlZAorICogQGNyeXB0bzogY3J5cHRvIHNldHRpbmdzCisgKiBAa2V5X2xlbjogbGVuZ3RoIG9mIFdFUCBrZXkgZm9yIHNoYXJlZCBrZXkgYXV0aGVudGljYXRpb24KKyAqIEBrZXlfaWR4OiBpbmRleCBvZiBXRVAga2V5IGZvciBzaGFyZWQga2V5IGF1dGhlbnRpY2F0aW9uCisgKiBAa2V5OiBXRVAga2V5IGZvciBzaGFyZWQga2V5IGF1dGhlbnRpY2F0aW9uCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXU4ICpic3NpZDsKKwl1OCAqc3NpZDsKKwlzaXplX3Qgc3NpZF9sZW47CisJZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGU7CisJdTggKmllOworCXNpemVfdCBpZV9sZW47CisJYm9vbCBwcml2YWN5OworCXN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgY3J5cHRvOworCWNvbnN0IHU4ICprZXk7CisJdTgga2V5X2xlbiwga2V5X2lkeDsKIH07CiAKIC8qKgpAQCAtNzY0LDYgKzgyMCwyNiBAQAogCVRYX1BPV0VSX0ZJWEVELAogfTsKIAorLyoKKyAqIGNmZzgwMjExX2JpdHJhdGVfbWFzayAtIG1hc2tzIGZvciBiaXRyYXRlIGNvbnRyb2wKKyAqLworc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayB7CisvKgorICogQXMgZGlzY3Vzc2VkIGluIEJlcmxpbiwgdGhpcyBzdHJ1Y3QgcmVhbGx5CisgKiBzaG91bGQgbG9vayBsaWtlIHRoaXM6CisKKwlzdHJ1Y3QgeworCQl1MzIgbGVnYWN5OworCQl1OCBtY3NbSUVFRTgwMjExX0hUX01DU19NQVNLX0xFTl07CisJfSBjb250cm9sW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCisgKiBTaW5jZSB3ZSBjYW4gYWx3YXlzIGZpeCBpbi1rZXJuZWwgdXNlcnMsIGxldCdzIGtlZXAKKyAqIGl0IHNpbXBsZXIgZm9yIG5vdzoKKyAqLworCXUzMiBmaXhlZDsgICAvKiBmaXhlZCBiaXRyYXRlLCAwID09IG5vdCBmaXhlZCAqLworCXUzMiBtYXhyYXRlOyAvKiBpbiBrYnBzLCAwID09IG5vIGxpbWl0ICovCit9OworCiAvKioKICAqIHN0cnVjdCBjZmc4MDIxMV9vcHMgLSBiYWNrZW5kIGRlc2NyaXB0aW9uIGZvciB3aXJlbGVzcyBjb25maWd1cmF0aW9uCiAgKgpAQCAtNzgxLDcgKzg1Nyw4IEBACiAgKiBAcmVzdW1lOiB3aXBoeSBkZXZpY2UgbmVlZHMgdG8gYmUgcmVzdW1lZAogICoKICAqIEBhZGRfdmlydHVhbF9pbnRmOiBjcmVhdGUgYSBuZXcgdmlydHVhbCBpbnRlcmZhY2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSwKLSAqCW11c3Qgc2V0IHRoZSBzdHJ1Y3Qgd2lyZWxlc3NfZGV2J3MgaWZ0eXBlLgorICoJbXVzdCBzZXQgdGhlIHN0cnVjdCB3aXJlbGVzc19kZXYncyBpZnR5cGUuIEJld2FyZTogWW91IG11c3QgY3JlYXRlCisgKgl0aGUgbmV3IG5ldGRldiBpbiB0aGUgd2lwaHkncyBuZXR3b3JrIG5hbWVzcGFjZSEKICAqCiAgKiBAZGVsX3ZpcnR1YWxfaW50ZjogcmVtb3ZlIHRoZSB2aXJ0dWFsIGludGVyZmFjZSBkZXRlcm1pbmVkIGJ5IGlmaW5kZXguCiAgKgpAQCAtODQxLDYgKzkxOCwxMiBAQAogICogQGRlYXV0aDogUmVxdWVzdCB0byBkZWF1dGhlbnRpY2F0ZSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVlcgogICogQGRpc2Fzc29jOiBSZXF1ZXN0IHRvIGRpc2Fzc29jaWF0ZSBmcm9tIHRoZSBzcGVjaWZpZWQgcGVlcgogICoKKyAqIEBjb25uZWN0OiBDb25uZWN0IHRvIHRoZSBFU1Mgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuIFdoZW4gY29ubmVjdGVkLAorICoJY2FsbCBjZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCgpIHdpdGggc3RhdHVzIGNvZGUgJVdMQU5fU1RBVFVTX1NVQ0NFU1MuCisgKglJZiB0aGUgY29ubmVjdGlvbiBmYWlscyBmb3Igc29tZSByZWFzb24sIGNhbGwgY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoKQorICoJd2l0aCB0aGUgc3RhdHVzIGZyb20gdGhlIEFQLgorICogQGRpc2Nvbm5lY3Q6IERpc2Nvbm5lY3QgZnJvbSB0aGUgQlNTL0VTUy4KKyAqCiAgKiBAam9pbl9pYnNzOiBKb2luIHRoZSBzcGVjaWZpZWQgSUJTUyAob3IgY3JlYXRlIGlmIG5lY2Vzc2FyeSkuIE9uY2UgZG9uZSwgY2FsbAogICoJY2ZnODAyMTFfaWJzc19qb2luZWQoKSwgYWxzbyBjYWxsIHRoYXQgZnVuY3Rpb24gd2hlbiBjaGFuZ2luZyBCU1NJRCBkdWUKICAqCXRvIGEgbWVyZ2UuCkBAIC04NTcsNiArOTQwLDggQEAKICAqCiAgKiBAcmZraWxsX3BvbGw6IHBvbGxzIHRoZSBodyByZmtpbGwgbGluZSwgdXNlIGNmZzgwMjExIHJlcG9ydGluZwogICoJZnVuY3Rpb25zIHRvIGFkanVzdCByZmtpbGwgaHcgc3RhdGUKKyAqCisgKiBAdGVzdG1vZGVfY21kOiBydW4gYSB0ZXN0IG1vZGUgY29tbWFuZAogICovCiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHsKIAlpbnQJKCpzdXNwZW5kKShzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKQEAgLTg2NSw4ICs5NTAsOSBAQAogCWludAkoKmFkZF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGNoYXIgKm5hbWUsCiAJCQkJICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKIAkJCQkgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7Ci0JaW50CSgqZGVsX3ZpcnR1YWxfaW50Zikoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50IGlmaW5kZXgpOwotCWludAkoKmNoYW5nZV92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4LAorCWludAkoKmRlbF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCWludAkoKmNoYW5nZV92aXJ0dWFsX2ludGYpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKIAkJCQkgICAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcyk7CiAKQEAgLTkzOSw5ICsxMDI1LDE2IEBACiAJaW50CSgqYXNzb2MpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgKnJlcSk7CiAJaW50CSgqZGVhdXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgKnJlcSk7CisJCQkgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxLAorCQkJICB2b2lkICpjb29raWUpOwogCWludAkoKmRpc2Fzc29jKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0ICpyZXEpOworCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0ICpyZXEsCisJCQkgICAgdm9pZCAqY29va2llKTsKKworCWludAkoKmNvbm5lY3QpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKnNtZSk7CisJaW50CSgqZGlzY29ubmVjdCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHUxNiByZWFzb25fY29kZSk7CiAKIAlpbnQJKCpqb2luX2lic3MpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zKTsKQEAgLTk1Myw3ICsxMDQ2LDIzIEBACiAJCQkJZW51bSB0eF9wb3dlcl9zZXR0aW5nIHR5cGUsIGludCBkYm0pOwogCWludAkoKmdldF90eF9wb3dlcikoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50ICpkYm0pOwogCisJaW50CSgqc2V0X3dkc19wZWVyKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXU4ICphZGRyKTsKKwogCXZvaWQJKCpyZmtpbGxfcG9sbCkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKKyNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQorCWludAkoKnRlc3Rtb2RlX2NtZCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgdm9pZCAqZGF0YSwgaW50IGxlbik7CisjZW5kaWYKKworCWludAkoKnNldF9iaXRyYXRlX21hc2spKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIGNvbnN0IHU4ICpwZWVyLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0ZV9tYXNrICptYXNrKTsKKworCS8qIHNvbWUgdGVtcG9yYXJ5IHN0dWZmIHRvIGZpbmlzaCB3ZXh0ICovCisJaW50CSgqc2V0X3Bvd2VyX21nbXQpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBib29sIGVuYWJsZWQsIGludCB0aW1lb3V0KTsKIH07CiAKIC8qCkBAIC05OTYsNiArMTEwNSwxMiBAQAogICogQGZyYWdfdGhyZXNob2xkOiBGcmFnbWVudGF0aW9uIHRocmVzaG9sZCAoZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkKTsKICAqCS0xID0gZnJhZ21lbnRhdGlvbiBkaXNhYmxlZCwgb25seSBvZGQgdmFsdWVzID49IDI1NiB1c2VkCiAgKiBAcnRzX3RocmVzaG9sZDogUlRTIHRocmVzaG9sZCAoZG90MTFSVFNUaHJlc2hvbGQpOyAtMSA9IFJUUy9DVFMgZGlzYWJsZWQKKyAqIEBuZXQ6IHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB0aGlzIHdpcGh5IGN1cnJlbnRseSBsaXZlcyBpbgorICogQG5ldG5zb2s6IGlmIHNldCB0byBmYWxzZSwgZG8gbm90IGFsbG93IGNoYW5naW5nIHRoZSBuZXRucyBvZiB0aGlzCisgKgl3aXBoeSBhdCBhbGwKKyAqIEBwc19kZWZhdWx0OiBkZWZhdWx0IGZvciBwb3dlcnNhdmUsIHdpbGwgYmUgc2V0IGRlcGVuZGluZyBvbiB0aGUKKyAqCWtlcm5lbCdzIGRlZmF1bHQgb24gd2lwaHlfbmV3KCksIGJ1dCBjYW4gYmUgY2hhbmdlZCBieSB0aGUKKyAqCWRyaXZlciBpZiBpdCBoYXMgYSBnb29kIHJlYXNvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdAogICovCiBzdHJ1Y3Qgd2lwaHkgewogCS8qIGFzc2lnbiB0aGVzZSBmaWVsZHMgYmVmb3JlIHlvdSByZWdpc3RlciB0aGUgd2lwaHkgKi8KQEAgLTEwMTAsNiArMTEyNSw5IEBACiAJYm9vbCBzdHJpY3RfcmVndWxhdG9yeTsKIAlib29sIGRpc2FibGVfYmVhY29uX2hpbnRzOwogCisJYm9vbCBuZXRuc29rOworCWJvb2wgcHNfZGVmYXVsdDsKKwogCWVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGU7CiAKIAlpbnQgYnNzX3ByaXZfc2l6ZTsKQEAgLTEwNDgsOSArMTE2NiwzNSBAQAogCS8qIGRpciBpbiBkZWJ1Z2ZzOiBpZWVlODAyMTEvPHdpcGh5bmFtZT4gKi8KIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyOwogCisjaWZkZWYgQ09ORklHX05FVF9OUworCS8qIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSB0aGlzIHBoeSBsaXZlcyBpbiBjdXJyZW50bHkgKi8KKwlzdHJ1Y3QgbmV0ICpfbmV0OworI2VuZGlmCisKIAljaGFyIHByaXZbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTkVUREVWX0FMSUdOKSkpOwogfTsKIAorI2lmZGVmIENPTkZJR19ORVRfTlMKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqd2lwaHlfbmV0KHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJcmV0dXJuIHdpcGh5LT5fbmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2lwaHlfbmV0X3NldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0ICpuZXQpCit7CisJd2lwaHktPl9uZXQgPSBuZXQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICp3aXBoeV9uZXQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gJmluaXRfbmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2lwaHlfbmV0X3NldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0ICpuZXQpCit7Cit9CisjZW5kaWYKKwogLyoqCiAgKiB3aXBoeV9wcml2IC0gcmV0dXJuIHByaXYgZnJvbSB3aXBoeQogICoKQEAgLTEwNjMsNiArMTIwNywxNyBAQAogfQogCiAvKioKKyAqIHByaXZfdG9fd2lwaHkgLSByZXR1cm4gdGhlIHdpcGh5IGNvbnRhaW5pbmcgdGhlIHByaXYKKyAqCisgKiBAcHJpdjogYSBwb2ludGVyIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgd2lwaHlfcHJpdgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3aXBoeSAqcHJpdl90b193aXBoeSh2b2lkICpwcml2KQoreworCUJVR19PTighcHJpdik7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3Qgd2lwaHksIHByaXYpOworfQorCisvKioKICAqIHNldF93aXBoeV9kZXYgLSBzZXQgZGV2aWNlIHBvaW50ZXIgZm9yIHdpcGh5CiAgKgogICogQHdpcGh5OiBUaGUgd2lwaHkgd2hvc2UgZGV2aWNlIHRvIGJpbmQKQEAgLTExMzQsNiArMTI4OSwxMyBAQAogICovCiBleHRlcm4gdm9pZCB3aXBoeV9mcmVlKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCisvKiBpbnRlcm5hbCBzdHJ1Y3RzICovCitzdHJ1Y3QgY2ZnODAyMTFfY29ubjsKK3N0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3M7CitzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXM7CisKKyNkZWZpbmUgTUFYX0FVVEhfQlNTRVMJCTQKKwogLyoqCiAgKiBzdHJ1Y3Qgd2lyZWxlc3NfZGV2IC0gd2lyZWxlc3MgcGVyLW5ldGRldiBzdGF0ZQogICoKQEAgLTExNTcsMjIgKzEzMTksNDUgQEAKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwogCWVudW0gbmw4MDIxMV9pZnR5cGUgaWZ0eXBlOwogCi0JLyogcHJpdmF0ZSB0byB0aGUgZ2VuZXJpYyB3aXJlbGVzcyBjb2RlICovCisJLyogdGhlIHJlbWFpbmRlciBvZiB0aGlzIHN0cnVjdCBzaG91bGQgYmUgcHJpdmF0ZSB0byBjZmc4MDIxMSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCi0JLyogY3VycmVudGx5IHVzZWQgZm9yIElCU1MgLSBtaWdodCBiZSByZWFycmFuZ2VkIGluIHRoZSBmdXR1cmUgKi8KLQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjdXJyZW50X2JzczsKLQl1OCBic3NpZFtFVEhfQUxFTl07CisJc3RydWN0IG11dGV4IG10eDsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBjbGVhbnVwX3dvcms7CisKKwkvKiBjdXJyZW50bHkgdXNlZCBmb3IgSUJTUyBhbmQgU01FIC0gbWlnaHQgYmUgcmVhcnJhbmdlZCBsYXRlciAqLwogCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CiAJdTggc3NpZF9sZW47CisJZW51bSB7CisJCUNGRzgwMjExX1NNRV9JRExFLAorCQlDRkc4MDIxMV9TTUVfQ09OTkVDVElORywKKwkJQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCwKKwl9IHNtZV9zdGF0ZTsKKwlzdHJ1Y3QgY2ZnODAyMTFfY29ubiAqY29ubjsKKwlzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5lY3Rfa2V5czsKKworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKKwlzcGlubG9ja190IGV2ZW50X2xvY2s7CisKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICphdXRodHJ5X2Jzc2VzW01BWF9BVVRIX0JTU0VTXTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICphdXRoX2Jzc2VzW01BWF9BVVRIX0JTU0VTXTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzczsgLyogYXNzb2NpYXRlZCAvIGpvaW5lZCAqLwogCiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAogCS8qIHdleHQgZGF0YSAqLwogCXN0cnVjdCB7CiAJCXN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyBpYnNzOwotCQl1OCBic3NpZFtFVEhfQUxFTl07CisJCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyBjb25uZWN0OworCQlzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmtleXM7CisJCXU4ICppZTsKKwkJc2l6ZV90IGllX2xlbjsKKwkJdTggYnNzaWRbRVRIX0FMRU5dLCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwkJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKIAkJczggZGVmYXVsdF9rZXksIGRlZmF1bHRfbWdtdF9rZXk7CisJCWJvb2wgcHMsIHByZXZfYnNzaWRfdmFsaWQ7CisJCWludCBwc190aW1lb3V0OwogCX0gd2V4dDsKICNlbmRpZgogfTsKQEAgLTEzNTIsMjAgKzE1MzcsNiBAQAogZXh0ZXJuIGludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKTsKIAogLyoqCi0gKiByZWd1bGF0b3J5X2hpbnRfMTFkIC0gaGludHMgYSBjb3VudHJ5IElFIGFzIGEgcmVndWxhdG9yeSBkb21haW4KLSAqIEB3aXBoeTogdGhlIHdpcmVsZXNzIGRldmljZSBnaXZpbmcgdGhlIGhpbnQgKHVzZWQgb25seSBmb3IgcmVwb3J0aW5nCi0gKgljb25mbGljdHMpCi0gKiBAY291bnRyeV9pZTogcG9pbnRlciB0byB0aGUgY291bnRyeSBJRQotICogQGNvdW50cnlfaWVfbGVuOiBsZW5ndGggb2YgdGhlIGNvdW50cnkgSUUKLSAqCi0gKiBXZSB3aWxsIGludGVyc2VjdCB0aGUgcmQgd2l0aCB0aGUgd2hhdCBDUkRBIHRlbGxzIHVzIHNob3VsZCBhcHBseQotICogZm9yIHRoZSBhbHBoYTIgdGhpcyBjb3VudHJ5IElFIGJlbG9uZ3MgdG8sIHRoaXMgcHJldmVudHMgQVBzIGZyb20KLSAqIHNlbmRpbmcgdXMgaW5jb3JyZWN0IG9yIG91dGRhdGVkIGluZm9ybWF0aW9uIGFnYWluc3QgYSBjb3VudHJ5LgotICovCi1leHRlcm4gdm9pZCByZWd1bGF0b3J5X2hpbnRfMTFkKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQkJdTggKmNvdW50cnlfaWUsCi0JCQkJdTggY291bnRyeV9pZV9sZW4pOwotLyoqCiAgKiB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSAtIGFwcGx5IGEgY3VzdG9tIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgogICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUgcmVndWxhdG9yeSBkb21haW4gb24KICAqIEByZWdkOiB0aGUgY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluIHRvIHVzZSBmb3IgdGhpcyB3aXBoeQpAQCAtMTQzMywyNyArMTYwNCwzNCBAQAogaW50IGNmZzgwMjExX3dleHRfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKTsKLWludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKTsKLWludCBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKTsKLWludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCk7Ci1pbnQgY2ZnODAyMTFfaWJzc193ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpOwotaW50IGNmZzgwMjExX2lic3Nfd2V4dF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKTsKLWludCBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgICAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfc2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X2dpd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BhcmFtICpkYXRhLCBjaGFyICpleHRyYSk7CiAKLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ZnODAyMTFfd2V4dF9mcmVxKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQkJCSAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEpOworaW50IGNmZzgwMjExX3dleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpOworaW50IGNmZzgwMjExX3dleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpOworaW50IGNmZzgwMjExX3dleHRfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BhcmFtICpyYXRlLCBjaGFyICpleHRyYSk7CiAKIGludCBjZmc4MDIxMV93ZXh0X3Npd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC0xNDg4LDYgKzE2NjYsMjEgQEAKIGludCBjZmc4MDIxMV93ZXh0X2dpd3R4cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwgY2hhciAqa2V5YnVmKTsKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpjZmc4MDIxMV93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworaW50IGNmZzgwMjExX3dleHRfc2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKndycSwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfZ2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKndycSwgY2hhciAqZXh0cmEpOworCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKTsKIAogLyoKICAqIGNhbGxiYWNrcyBmb3IgYXN5bmNocm9ub3VzIGNmZzgwMjExIG1ldGhvZHMsIG5vdGlmaWNhdGlvbgpAQCAtMTU2OSw3ICsxNzYyLDcgQEAKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIGFuIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHByb2Nlc3NlZCBpbgogICogc3RhdGlvbiBtb2RlLiBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGNhbGwgZWl0aGVyIHRoaXMgZnVuY3Rpb24gb3IKICAqIGNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KCkgdG8gaW5kaWNhdGUgdGhlIHJlc3VsdCBvZiBjZmc4MDIxMV9vcHM6OmF1dGgoKQotICogY2FsbC4KKyAqIGNhbGwuIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgogICovCiB2b2lkIGNmZzgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKIApAQCAtMTU3Nyw2ICsxNzcwLDggQEAKICAqIGNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0IC0gbm90aWZpY2F0aW9uIG9mIHRpbWVkIG91dCBhdXRoZW50aWNhdGlvbgogICogQGRldjogbmV0d29yayBkZXZpY2UKICAqIEBhZGRyOiBUaGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGRldmljZSB3aXRoIHdoaWNoIHRoZSBhdXRoZW50aWNhdGlvbiB0aW1lZCBvdXQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KICAqLwogdm9pZCBjZmc4MDIxMV9zZW5kX2F1dGhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcik7CiAKQEAgLTE1ODksNyArMTc4NCw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhIChyZSlhc3NvY2lhdGlvbiByZXNwb25zZSBoYXMgYmVlbgogICogcHJvY2Vzc2VkIGluIHN0YXRpb24gbW9kZS4gVGhlIGRyaXZlciBpcyByZXF1aXJlZCB0byBjYWxsIGVpdGhlciB0aGlzCiAgKiBmdW5jdGlvbiBvciBjZmc4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoKSB0byBpbmRpY2F0ZSB0aGUgcmVzdWx0IG9mCi0gKiBjZmc4MDIxMV9vcHM6OmFzc29jKCkgY2FsbC4KKyAqIGNmZzgwMjExX29wczo6YXNzb2MoKSBjYWxsLiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KICAqLwogdm9pZCBjZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwogCkBAIC0xNTk3LDYgKzE3OTIsOCBAQAogICogY2ZnODAyMTFfc2VuZF9hc3NvY190aW1lb3V0IC0gbm90aWZpY2F0aW9uIG9mIHRpbWVkIG91dCBhc3NvY2lhdGlvbgogICogQGRldjogbmV0d29yayBkZXZpY2UKICAqIEBhZGRyOiBUaGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGRldmljZSB3aXRoIHdoaWNoIHRoZSBhc3NvY2lhdGlvbiB0aW1lZCBvdXQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcC4KICAqLwogdm9pZCBjZmc4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpOwogCkBAIC0xNjA1LDQxICsxODAyLDMwIEBACiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZQogICogQGJ1ZjogZGVhdXRoZW50aWNhdGlvbiBmcmFtZSAoaGVhZGVyICsgYm9keSkKICAqIEBsZW46IGxlbmd0aCBvZiB0aGUgZnJhbWUgZGF0YQorICogQGNvb2tpZTogY29va2llIGZyb20gLT5kZWF1dGggaWYgY2FsbGVkIHdpdGhpbiB0aGF0IGNhbGxiYWNrLAorICoJJU5VTEwgb3RoZXJ3aXNlCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgZGVhdXRoZW50aWNhdGlvbiBoYXMgYmVlbiBwcm9jZXNzZWQgaW4KICAqIHN0YXRpb24gbW9kZS4gVGhpcyBpbmNsdWRlcyBib3RoIHJlY2VpdmVkIGRlYXV0aGVudGljYXRpb24gZnJhbWVzIGFuZAotICogbG9jYWxseSBnZW5lcmF0ZWQgb25lcy4KKyAqIGxvY2FsbHkgZ2VuZXJhdGVkIG9uZXMuIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgogICovCi12b2lkIGNmZzgwMjExX3NlbmRfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwordm9pZCBjZmc4MDIxMV9zZW5kX2RlYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLAorCQkJICB2b2lkICpjb29raWUpOwogCiAvKioKICAqIGNmZzgwMjExX3NlbmRfZGlzYXNzb2MgLSBub3RpZmljYXRpb24gb2YgcHJvY2Vzc2VkIGRpc2Fzc29jaWF0aW9uCiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZQogICogQGJ1ZjogZGlzYXNzb2NpYXRpb24gcmVzcG9uc2UgZnJhbWUgKGhlYWRlciArIGJvZHkpCiAgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqIEBjb29raWU6IGNvb2tpZSBmcm9tIC0+ZGlzYXNzb2MgaWYgY2FsbGVkIHdpdGhpbiB0aGF0IGNhbGxiYWNrLAorICoJJU5VTEwgb3RoZXJ3aXNlCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgZGlzYXNzb2NpYXRpb24gaGFzIGJlZW4gcHJvY2Vzc2VkIGluCiAgKiBzdGF0aW9uIG1vZGUuIFRoaXMgaW5jbHVkZXMgYm90aCByZWNlaXZlZCBkaXNhc3NvY2lhdGlvbiBmcmFtZXMgYW5kIGxvY2FsbHkKLSAqIGdlbmVyYXRlZCBvbmVzLgorICogZ2VuZXJhdGVkIG9uZXMuIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwLgogICovCi12b2lkIGNmZzgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7Ci0KLS8qKgotICogY2ZnODAyMTFfaG9sZF9ic3MgLSBleGNsdWRlIGJzcyBmcm9tIGV4cGlyYXRpb24KLSAqIEBic3M6IGJzcyB3aGljaCBzaG91bGQgbm90IGV4cGlyZQotICoKLSAqIEluIGEgY2FzZSB3aGVuIHRoZSBCU1MgaXMgbm90IHVwZGF0ZWQgYnV0IGl0IHNob3VsZG4ndCBleHBpcmUgdGhpcwotICogZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gbWFyayB0aGUgQlNTIHRvIGJlIGV4Y2x1ZGVkIGZyb20gZXhwaXJhdGlvbi4KLSAqLwotdm9pZCBjZmc4MDIxMV9ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOwotCi0vKioKLSAqIGNmZzgwMjExX3VuaG9sZF9ic3MgLSByZW1vdmUgZXhwaXJhdGlvbiBleGNlcHRpb24gZnJvbSB0aGUgQlNTCi0gKiBAYnNzOiBic3Mgd2hpY2ggY2FuIGV4cGlyZSBhZ2FpbgotICoKLSAqIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIEJTUyB0byBiZSBleHBpcmFibGUgYWdhaW4uCi0gKi8KLXZvaWQgY2ZnODAyMTFfdW5ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOwordm9pZCBjZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sCisJCQkgICAgdm9pZCAqY29va2llKTsKIAogLyoqCiAgKiBjZmc4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlIC0gbm90aWZpY2F0aW9uIG9mIE1pY2hhZWwgTUlDIGZhaWx1cmUgKFRLSVApCkBAIC0xNjQ4LDYgKzE4MzQsNyBAQAogICogQGtleV90eXBlOiBUaGUga2V5IHR5cGUgdGhhdCB0aGUgcmVjZWl2ZWQgZnJhbWUgdXNlZAogICogQGtleV9pZDogS2V5IGlkZW50aWZpZXIgKDAuLjMpCiAgKiBAdHNjOiBUaGUgVFNDIHZhbHVlIG9mIHRoZSBmcmFtZSB0aGF0IGdlbmVyYXRlZCB0aGUgTUlDIGZhaWx1cmUgKDYgb2N0ZXRzKQorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncwogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBsb2NhbCBNQUMgZGV0ZWN0cyBhIE1JQyBmYWlsdXJlIGluIGEKICAqIHJlY2VpdmVkIGZyYW1lLiBUaGlzIG1hdGNoZXMgd2l0aCBNTE1FLU1JQ0hBRUxNSUNGQUlMVVJFLmluZGljYXRpb24oKQpAQCAtMTY1NSw3ICsxODQyLDcgQEAKICAqLwogdm9pZCBjZmc4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLAogCQkJCSAgZW51bSBubDgwMjExX2tleV90eXBlIGtleV90eXBlLCBpbnQga2V5X2lkLAotCQkJCSAgY29uc3QgdTggKnRzYyk7CisJCQkJICBjb25zdCB1OCAqdHNjLCBnZnBfdCBnZnApOwogCiAvKioKICAqIGNmZzgwMjExX2lic3Nfam9pbmVkIC0gbm90aWZ5IGNmZzgwMjExIHRoYXQgZGV2aWNlIGpvaW5lZCBhbiBJQlNTCkBAIC0xNjkyLDQgKzE4NzksMTM3IEBACiAgKi8KIHZvaWQgd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKIAorI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisvKioKKyAqIGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYiAtIGFsbG9jYXRlIHRlc3Rtb2RlIHJlcGx5CisgKiBAd2lwaHk6IHRoZSB3aXBoeQorICogQGFwcHJveGxlbjogYW4gdXBwZXIgYm91bmQgb2YgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0aGF0IHdpbGwKKyAqCWJlIHB1dCBpbnRvIHRoZSBza2IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbmQgcHJlLWZpbGxzIGFuIHNrYiBmb3IgYSByZXBseSB0bworICogdGhlIHRlc3Rtb2RlIGNvbW1hbmQuIFNpbmNlIGl0IGlzIGludGVuZGVkIGZvciBhIHJlcGx5LCBjYWxsaW5nCisgKiBpdCBvdXRzaWRlIG9mIHRoZSBAdGVzdG1vZGVfY21kIG9wZXJhdGlvbiBpcyBpbnZhbGlkLgorICoKKyAqIFRoZSByZXR1cm5lZCBza2IgKG9yICVOVUxMIGlmIGFueSBlcnJvcnMgaGFwcGVuKSBpcyBwcmUtZmlsbGVkCisgKiB3aXRoIHRoZSB3aXBoeSBpbmRleCBhbmQgc2V0IHVwIGluIGEgd2F5IHRoYXQgYW55IGRhdGEgdGhhdCBpcworICogcHV0IGludG8gdGhlIHNrYiAod2l0aCBza2JfcHV0KCksIG5sYV9wdXQoKSBvciBzaW1pbGFyKSB3aWxsIGVuZAorICogdXAgYmVpbmcgd2l0aGluIHRoZSAlTkw4MDIxMV9BVFRSX1RFU1REQVRBIGF0dHJpYnV0ZSwgc28gYWxsIHRoYXQKKyAqIG5lZWRzIHRvIGJlIGRvbmUgd2l0aCB0aGUgc2tiIGlzIGFkZGluZyBkYXRhIGZvciB0aGUgY29ycmVzcG9uZGluZworICogdXNlcnNwYWNlIHRvb2wgd2hpY2ggY2FuIHRoZW4gcmVhZCB0aGF0IGRhdGEgb3V0IG9mIHRoZSB0ZXN0ZGF0YQorICogYXR0cmlidXRlLiBZb3UgbXVzdCBub3QgbW9kaWZ5IHRoZSBza2IgaW4gYW55IG90aGVyIHdheS4KKyAqCisgKiBXaGVuIGRvbmUsIGNhbGwgY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoKSB3aXRoIHRoZSBza2IgYW5kIHJldHVybgorICogaXRzIGVycm9yIGNvZGUgYXMgdGhlIHJlc3VsdCBvZiB0aGUgQHRlc3Rtb2RlX2NtZCBvcGVyYXRpb24uCisgKi8KK3N0cnVjdCBza19idWZmICpjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2Ioc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJCSAgaW50IGFwcHJveGxlbik7CisKKy8qKgorICogY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkgLSBzZW5kIHRoZSByZXBseSBza2IKKyAqIEBza2I6IFRoZSBza2IsIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCB3aXRoCisgKgljZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2IoKQorICoKKyAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBvciAwIG9uIHN1Y2Nlc3MsIHNpbmNlIGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24gd2lsbCB1c3VhbGx5IGJlIHRoZSBsYXN0IHRoaW5nIGJlZm9yZSByZXR1cm5pbmcKKyAqIGZyb20gdGhlIEB0ZXN0bW9kZV9jbWQgeW91IHNob3VsZCByZXR1cm4gdGhlIGVycm9yIGNvZGUuCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjb25zdW1lcyB0aGUgc2tiIHJlZ2FyZGxlc3Mgb2YgdGhlCisgKiByZXR1cm4gdmFsdWUuCisgKi8KK2ludCBjZmc4MDIxMV90ZXN0bW9kZV9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoqCisgKiBjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19ldmVudF9za2IgLSBhbGxvY2F0ZSB0ZXN0bW9kZSBldmVudAorICogQHdpcGh5OiB0aGUgd2lwaHkKKyAqIEBhcHByb3hsZW46IGFuIHVwcGVyIGJvdW5kIG9mIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdGhhdCB3aWxsCisgKgliZSBwdXQgaW50byB0aGUgc2tiCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYW5kIHByZS1maWxscyBhbiBza2IgZm9yIGFuIGV2ZW50IG9uIHRoZQorICogdGVzdG1vZGUgbXVsdGljYXN0IGdyb3VwLgorICoKKyAqIFRoZSByZXR1cm5lZCBza2IgKG9yICVOVUxMIGlmIGFueSBlcnJvcnMgaGFwcGVuKSBpcyBzZXQgdXAgaW4gdGhlCisgKiBzYW1lIHdheSBhcyB3aXRoIGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYigpIGJ1dCBwcmVwYXJlZAorICogZm9yIGFuIGV2ZW50LiBBcyB0aGVyZSwgeW91IHNob3VsZCBzaW1wbHkgYWRkIGRhdGEgdG8gaXQgdGhhdCB3aWxsCisgKiB0aGVuIGVuZCB1cCBpbiB0aGUgJU5MODAyMTFfQVRUUl9URVNUREFUQSBhdHRyaWJ1dGUuIEFnYWluLCB5b3UgbXVzdAorICogbm90IG1vZGlmeSB0aGUgc2tiIGluIGFueSBvdGhlciB3YXkuCisgKgorICogV2hlbiBkb25lIGZpbGxpbmcgdGhlIHNrYiwgY2FsbCBjZmc4MDIxMV90ZXN0bW9kZV9ldmVudCgpIHdpdGggdGhlCisgKiBza2IgdG8gc2VuZCB0aGUgZXZlbnQuCisgKi8KK3N0cnVjdCBza19idWZmICpjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19ldmVudF9za2Ioc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJCSAgaW50IGFwcHJveGxlbiwgZ2ZwX3QgZ2ZwKTsKKworLyoqCisgKiBjZmc4MDIxMV90ZXN0bW9kZV9ldmVudCAtIHNlbmQgdGhlIGV2ZW50CisgKiBAc2tiOiBUaGUgc2tiLCBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgd2l0aAorICoJY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfZXZlbnRfc2tiKCkKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBnaXZlbiBAc2tiLCB3aGljaCBtdXN0IGhhdmUgYmVlbiBhbGxvY2F0ZWQKKyAqIGJ5IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX2V2ZW50X3NrYigpLCBhcyBhbiBldmVudC4gSXQgYWx3YXlzCisgKiBjb25zdW1lcyBpdC4KKyAqLwordm9pZCBjZmc4MDIxMV90ZXN0bW9kZV9ldmVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnApOworCisjZGVmaW5lIENGRzgwMjExX1RFU1RNT0RFX0NNRChjbWQpCS50ZXN0bW9kZV9jbWQgPSAoY21kKSwKKyNlbHNlCisjZGVmaW5lIENGRzgwMjExX1RFU1RNT0RFX0NNRChjbWQpCisjZW5kaWYKKworLyoqCisgKiBjZmc4MDIxMV9jb25uZWN0X3Jlc3VsdCAtIG5vdGlmeSBjZmc4MDIxMSBvZiBjb25uZWN0aW9uIHJlc3VsdAorICoKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAYnNzaWQ6IHRoZSBCU1NJRCBvZiB0aGUgQVAKKyAqIEByZXFfaWU6IGFzc29jaWF0aW9uIHJlcXVlc3QgSUVzIChtYXliZSBiZSAlTlVMTCkKKyAqIEByZXFfaWVfbGVuOiBhc3NvY2lhdGlvbiByZXF1ZXN0IElFcyBsZW5ndGgKKyAqIEByZXNwX2llOiBhc3NvY2lhdGlvbiByZXNwb25zZSBJRXMgKG1heSBiZSAlTlVMTCkKKyAqIEByZXNwX2llX2xlbjogYXNzb2MgcmVzcG9uc2UgSUVzIGxlbmd0aAorICogQHN0YXR1czogc3RhdHVzIGNvZGUsIDAgZm9yIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbiwgdXNlCisgKgklV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSBpZiB5b3VyIGRldmljZSBjYW5ub3QgZ2l2ZSB5b3UKKyAqCXRoZSByZWFsIHN0YXR1cyBjb2RlIGZvciBmYWlsdXJlcy4KKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBJdCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGRyaXZlciB3aGVuZXZlciBjb25uZWN0KCkgaGFzCisgKiBzdWNjZWVkZWQuCisgKi8KK3ZvaWQgY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgICBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJCSAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwKKwkJCSAgICAgdTE2IHN0YXR1cywgZ2ZwX3QgZ2ZwKTsKKworLyoqCisgKiBjZmc4MDIxMV9yb2FtZWQgLSBub3RpZnkgY2ZnODAyMTEgb2Ygcm9hbWluZworICoKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAYnNzaWQ6IHRoZSBCU1NJRCBvZiB0aGUgbmV3IEFQCisgKiBAcmVxX2llOiBhc3NvY2lhdGlvbiByZXF1ZXN0IElFcyAobWF5YmUgYmUgJU5VTEwpCisgKiBAcmVxX2llX2xlbjogYXNzb2NpYXRpb24gcmVxdWVzdCBJRXMgbGVuZ3RoCisgKiBAcmVzcF9pZTogYXNzb2NpYXRpb24gcmVzcG9uc2UgSUVzIChtYXkgYmUgJU5VTEwpCisgKiBAcmVzcF9pZV9sZW46IGFzc29jIHJlc3BvbnNlIElFcyBsZW5ndGgKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBJdCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGRyaXZlciB3aGVuZXZlciBpdCByb2FtZWQKKyAqIGZyb20gb25lIEFQIHRvIGFub3RoZXIgd2hpbGUgY29ubmVjdGVkLgorICovCit2b2lkIGNmZzgwMjExX3JvYW1lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCSAgICAgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCisJCSAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwgZ2ZwX3QgZ2ZwKTsKKworLyoqCisgKiBjZmc4MDIxMV9kaXNjb25uZWN0ZWQgLSBub3RpZnkgY2ZnODAyMTEgdGhhdCBjb25uZWN0aW9uIHdhcyBkcm9wcGVkCisgKgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBpZTogaW5mb3JtYXRpb24gZWxlbWVudHMgb2YgdGhlIGRlYXV0aC9kaXNhc3NvYyBmcmFtZSAobWF5IGJlICVOVUxMKQorICogQGllX2xlbjogbGVuZ3RoIG9mIElFcworICogQHJlYXNvbjogcmVhc29uIGNvZGUgZm9yIHRoZSBkaXNjb25uZWN0aW9uLCBzZXQgaXQgdG8gMCBpZiB1bmtub3duCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzCisgKgorICogQWZ0ZXIgaXQgY2FsbHMgdGhpcyBmdW5jdGlvbiwgdGhlIGRyaXZlciBzaG91bGQgZW50ZXIgYW4gaWRsZSBzdGF0ZQorICogYW5kIG5vdCB0cnkgdG8gY29ubmVjdCB0byBhbnkgQVAgYW55IG1vcmUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfZGlzY29ubmVjdGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByZWFzb24sCisJCQkgICB1OCAqaWUsIHNpemVfdCBpZV9sZW4sIGdmcF90IGdmcCk7CisKKwogI2VuZGlmIC8qIF9fTkVUX0NGRzgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RjYm5sLmggYi9pbmNsdWRlL25ldC9kY2JubC5oCmluZGV4IDc3NWNmYzguLmIzNmFjN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RjYm5sLmgKKysrIGIvaW5jbHVkZS9uZXQvZGNibmwuaApAQCAtNDgsNiArNDgsOCBAQAogCXZvaWQgKCpzZXRiY25jZmcpKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgdTMyKTsKIAl2b2lkICgqZ2V0YmNucnApKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCwgdTggKik7CiAJdm9pZCAoKnNldGJjbnJwKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIHU4KTsKKwl1OCAgICgqc2V0YXBwKShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1OCwgdTE2LCB1OCk7CisJdTggICAoKmdldGFwcCkoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTgsIHUxNik7CiB9OwogCiAjZW5kaWYgLyogX19ORVRfRENCTkxfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc3QuaCBiL2luY2x1ZGUvbmV0L2RzdC5oCmluZGV4IDdmYzQwOWMuLjVhOTAwZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzdC5oCisrKyBiL2luY2x1ZGUvbmV0L2RzdC5oCkBAIC04LDYgKzgsNyBAQAogI2lmbmRlZiBfTkVUX0RTVF9ICiAjZGVmaW5lIF9ORVRfRFNUX0gKIAorI2luY2x1ZGUgPG5ldC9kc3Rfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KQEAgLTEwMiwyOCArMTAzLDYgQEAKIAl9OwogfTsKIAotCi1zdHJ1Y3QgZHN0X29wcwotewotCXVuc2lnbmVkIHNob3J0CQlmYW1pbHk7Ci0JX19iZTE2CQkJcHJvdG9jb2w7Ci0JdW5zaWduZWQJCWdjX3RocmVzaDsKLQotCWludAkJCSgqZ2MpKHN0cnVjdCBkc3Rfb3BzICpvcHMpOwotCXN0cnVjdCBkc3RfZW50cnkgKgkoKmNoZWNrKShzdHJ1Y3QgZHN0X2VudHJ5ICosIF9fdTMyIGNvb2tpZSk7Ci0Jdm9pZAkJCSgqZGVzdHJveSkoc3RydWN0IGRzdF9lbnRyeSAqKTsKLQl2b2lkCQkJKCppZmRvd24pKHN0cnVjdCBkc3RfZW50cnkgKiwKLQkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaG93KTsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICoJKCpuZWdhdGl2ZV9hZHZpY2UpKHN0cnVjdCBkc3RfZW50cnkgKik7Ci0Jdm9pZAkJCSgqbGlua19mYWlsdXJlKShzdHJ1Y3Qgc2tfYnVmZiAqKTsKLQl2b2lkCQkJKCp1cGRhdGVfcG10dSkoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KTsKLQlpbnQJCQkoKmxvY2FsX291dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLQlhdG9taWNfdAkJZW50cmllczsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAJCSprbWVtX2NhY2hlcDsKLQlzdHJ1Y3QgbmV0ICAgICAgICAgICAgICAqZHN0X25ldDsKLX07Ci0KICNpZmRlZiBfX0tFUk5FTF9fCiAKIHN0YXRpYyBpbmxpbmUgdTMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc3Rfb3BzLmggYi9pbmNsdWRlL25ldC9kc3Rfb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmZjliNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2RzdF9vcHMuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9ORVRfRFNUX09QU19ICisjZGVmaW5lIF9ORVRfRFNUX09QU19ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRzdF9lbnRyeTsKK3N0cnVjdCBrbWVtX2NhY2hlcDsKK3N0cnVjdCBuZXRfZGV2aWNlOworc3RydWN0IHNrX2J1ZmY7CisKK3N0cnVjdCBkc3Rfb3BzIHsKKwl1bnNpZ25lZCBzaG9ydAkJZmFtaWx5OworCV9fYmUxNgkJCXByb3RvY29sOworCXVuc2lnbmVkCQlnY190aHJlc2g7CisKKwlpbnQJCQkoKmdjKShzdHJ1Y3QgZHN0X29wcyAqb3BzKTsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICoJKCpjaGVjaykoc3RydWN0IGRzdF9lbnRyeSAqLCBfX3UzMiBjb29raWUpOworCXZvaWQJCQkoKmRlc3Ryb3kpKHN0cnVjdCBkc3RfZW50cnkgKik7CisJdm9pZAkJCSgqaWZkb3duKShzdHJ1Y3QgZHN0X2VudHJ5ICosCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGhvdyk7CisJc3RydWN0IGRzdF9lbnRyeSAqCSgqbmVnYXRpdmVfYWR2aWNlKShzdHJ1Y3QgZHN0X2VudHJ5ICopOworCXZvaWQJCQkoKmxpbmtfZmFpbHVyZSkoc3RydWN0IHNrX2J1ZmYgKik7CisJdm9pZAkJCSgqdXBkYXRlX3BtdHUpKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIG10dSk7CisJaW50CQkJKCpsb2NhbF9vdXQpKHN0cnVjdCBza19idWZmICpza2IpOworCisJYXRvbWljX3QJCWVudHJpZXM7CisJc3RydWN0IGttZW1fY2FjaGUJKmttZW1fY2FjaGVwOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmggYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAppbmRleCAxYjBlM2VlLi4yYTFjMDY4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAKIC8qKgogICogc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIC0gZ2VuZXJpYyBuZXRsaW5rIG11bHRpY2FzdCBncm91cApAQCAtMjcsNiArMjgsOCBAQAogICogQG5hbWU6IG5hbWUgb2YgZmFtaWx5CiAgKiBAdmVyc2lvbjogcHJvdG9jb2wgdmVyc2lvbgogICogQG1heGF0dHI6IG1heGltdW0gbnVtYmVyIG9mIGF0dHJpYnV0ZXMgc3VwcG9ydGVkCisgKiBAbmV0bnNvazogc2V0IHRvIHRydWUgaWYgdGhlIGZhbWlseSBjYW4gaGFuZGxlIG5ldHdvcmsKKyAqCW5hbWVzcGFjZXMgYW5kIHNob3VsZCBiZSBwcmVzZW50ZWQgaW4gYWxsIG9mIHRoZW0KICAqIEBhdHRyYnVmOiBidWZmZXIgdG8gc3RvcmUgcGFyc2VkIGF0dHJpYnV0ZXMKICAqIEBvcHNfbGlzdDogbGlzdCBvZiBhbGwgYXNzaWduZWQgb3BlcmF0aW9ucwogICogQGZhbWlseV9saXN0OiBmYW1pbHkgbGlzdApAQCAtMzksNiArNDIsNyBAQAogCWNoYXIJCQluYW1lW0dFTkxfTkFNU0laXTsKIAl1bnNpZ25lZCBpbnQJCXZlcnNpb247CiAJdW5zaWduZWQgaW50CQltYXhhdHRyOworCWJvb2wJCQluZXRuc29rOwogCXN0cnVjdCBubGF0dHIgKioJYXR0cmJ1ZjsJLyogcHJpdmF0ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJb3BzX2xpc3Q7CS8qIHByaXZhdGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWZhbWlseV9saXN0OwkvKiBwcml2YXRlICovCkBAIC02Miw4ICs2NiwzMiBAQAogCXN0cnVjdCBnZW5sbXNnaGRyICoJZ2VubGhkcjsKIAl2b2lkICoJCQl1c2VyaGRyOwogCXN0cnVjdCBubGF0dHIgKioJYXR0cnM7CisjaWZkZWYgQ09ORklHX05FVF9OUworCXN0cnVjdCBuZXQgKgkJX25ldDsKKyNlbmRpZgogfTsKIAorI2lmZGVmIENPTkZJR19ORVRfTlMKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqZ2VubF9pbmZvX25ldChzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXJldHVybiBpbmZvLT5fbmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VubF9pbmZvX25ldF9zZXQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldCAqbmV0KQoreworCWluZm8tPl9uZXQgPSBuZXQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0ICpnZW5sX2luZm9fbmV0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJcmV0dXJuICZpbml0X25ldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbmxfaW5mb19uZXRfc2V0KHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXQgKm5ldCkKK3sKK30KKyNlbmRpZgorCiAvKioKICAqIHN0cnVjdCBnZW5sX29wcyAtIGdlbmVyaWMgbmV0bGluayBvcGVyYXRpb25zCiAgKiBAY21kOiBjb21tYW5kIGlkZW50aWZpZXIKQEAgLTk4LDggKzEyNiw2IEBACiBleHRlcm4gdm9pZCBnZW5sX3VucmVnaXN0ZXJfbWNfZ3JvdXAoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCiAJCQkJICAgICBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgKmdycCk7CiAKLWV4dGVybiBzdHJ1Y3Qgc29jayAqZ2VubF9zb2NrOwotCiAvKioKICAqIGdlbmxtc2dfcHV0IC0gQWRkIGdlbmVyaWMgbmV0bGluayBoZWFkZXIgdG8gbmV0bGluayBtZXNzYWdlCiAgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIGhvbGRpbmcgdGhlIG1lc3NhZ2UKQEAgLTE3MCw3ICsxOTYsMjEgQEAKIH0KIAogLyoqCi0gKiBnZW5sbXNnX211bHRpY2FzdCAtIG11bHRpY2FzdCBhIG5ldGxpbmsgbWVzc2FnZQorICogZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMgLSBtdWx0aWNhc3QgYSBuZXRsaW5rIG1lc3NhZ2UgdG8gYSBzcGVjaWZpYyBuZXRucworICogQG5ldDogdGhlIG5ldCBuYW1lc3BhY2UKKyAqIEBza2I6IG5ldGxpbmsgbWVzc2FnZSBhcyBzb2NrZXQgYnVmZmVyCisgKiBAcGlkOiBvd24gbmV0bGluayBwaWQgdG8gYXZvaWQgc2VuZGluZyB0byB5b3Vyc2VsZgorICogQGdyb3VwOiBtdWx0aWNhc3QgZ3JvdXAgaWQKKyAqIEBmbGFnczogYWxsb2NhdGlvbiBmbGFncworICovCitzdGF0aWMgaW5saW5lIGludCBnZW5sbXNnX211bHRpY2FzdF9uZXRucyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgdTMyIHBpZCwgdW5zaWduZWQgaW50IGdyb3VwLCBnZnBfdCBmbGFncykKK3sKKwlyZXR1cm4gbmxtc2dfbXVsdGljYXN0KG5ldC0+Z2VubF9zb2NrLCBza2IsIHBpZCwgZ3JvdXAsIGZsYWdzKTsKK30KKworLyoqCisgKiBnZW5sbXNnX211bHRpY2FzdCAtIG11bHRpY2FzdCBhIG5ldGxpbmsgbWVzc2FnZSB0byB0aGUgZGVmYXVsdCBuZXRucwogICogQHNrYjogbmV0bGluayBtZXNzYWdlIGFzIHNvY2tldCBidWZmZXIKICAqIEBwaWQ6IG93biBuZXRsaW5rIHBpZCB0byBhdm9pZCBzZW5kaW5nIHRvIHlvdXJzZWxmCiAgKiBAZ3JvdXA6IG11bHRpY2FzdCBncm91cCBpZApAQCAtMTc5LDE3ICsyMTksMjkgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfbXVsdGljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsCiAJCQkJICAgIHVuc2lnbmVkIGludCBncm91cCwgZ2ZwX3QgZmxhZ3MpCiB7Ci0JcmV0dXJuIG5sbXNnX211bHRpY2FzdChnZW5sX3NvY2ssIHNrYiwgcGlkLCBncm91cCwgZmxhZ3MpOworCXJldHVybiBnZW5sbXNnX211bHRpY2FzdF9uZXRucygmaW5pdF9uZXQsIHNrYiwgcGlkLCBncm91cCwgZmxhZ3MpOwogfQogCiAvKioKKyAqIGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zIC0gbXVsdGljYXN0IGEgbmV0bGluayBtZXNzYWdlIHRvIGFsbCBuZXQgbmFtZXNwYWNlcworICogQHNrYjogbmV0bGluayBtZXNzYWdlIGFzIHNvY2tldCBidWZmZXIKKyAqIEBwaWQ6IG93biBuZXRsaW5rIHBpZCB0byBhdm9pZCBzZW5kaW5nIHRvIHlvdXJzZWxmCisgKiBAZ3JvdXA6IG11bHRpY2FzdCBncm91cCBpZAorICogQGZsYWdzOiBhbGxvY2F0aW9uIGZsYWdzCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGhvbGQgdGhlIFJUTkwgb3IgcmN1X3JlYWRfbG9jaygpLgorICovCitpbnQgZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZ3JvdXAsIGdmcF90IGZsYWdzKTsKKworLyoqCiAgKiBnZW5sbXNnX3VuaWNhc3QgLSB1bmljYXN0IGEgbmV0bGluayBtZXNzYWdlCiAgKiBAc2tiOiBuZXRsaW5rIG1lc3NhZ2UgYXMgc29ja2V0IGJ1ZmZlcgogICogQHBpZDogbmV0bGluayBwaWQgb2YgdGhlIGRlc3RpbmF0aW9uIHNvY2tldAogICovCi1zdGF0aWMgaW5saW5lIGludCBnZW5sbXNnX3VuaWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCkKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfdW5pY2FzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQpCiB7Ci0JcmV0dXJuIG5sbXNnX3VuaWNhc3QoZ2VubF9zb2NrLCBza2IsIHBpZCk7CisJcmV0dXJuIG5sbXNnX3VuaWNhc3QobmV0LT5nZW5sX3NvY2ssIHNrYiwgcGlkKTsKIH0KIAogLyoqCkBAIC0xOTksNyArMjUxLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgZ2VubG1zZ19yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXJldHVybiBnZW5sbXNnX3VuaWNhc3Qoc2tiLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXR1cm4gZ2VubG1zZ191bmljYXN0KGdlbmxfaW5mb19uZXQoaW5mbyksIHNrYiwgaW5mby0+c25kX3BpZCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9tYWNfZGVmLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0LmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9tYWNfZGVmLmgKcmVuYW1lIHRvIGluY2x1ZGUvbmV0L2llZWU4MDIxNTQuaAppbmRleCA4Y2I2ODQ2Li5kNTI2ODVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTU0L21hY19kZWYuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0LmgKQEAgLTIzLDggKzIzLDggQEAKICAqIERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KICAqLwogCi0jaWZuZGVmIElFRUU4MDIxNTRfTUFDX0RFRl9ICi0jZGVmaW5lIElFRUU4MDIxNTRfTUFDX0RFRl9ICisjaWZuZGVmIE5FVF9JRUVFODAyMTU0X0gKKyNkZWZpbmUgTkVUX0lFRUU4MDIxNTRfSAogCiAjZGVmaW5lIElFRUU4MDIxNTRfRkNfVFlQRV9CRUFDT04JMHgwCS8qIEZyYW1lIGlzIGJlYWNvbiAqLwogI2RlZmluZQlJRUVFODAyMTU0X0ZDX1RZUEVfREFUQQkJMHgxCS8qIEZyYW1lIGlzIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlZmNkZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTU0L25sODAyMTU0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogbmw4MDIxNTQuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBTaWVtZW5zIEFHCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBJRUVFODAyMTU0X05MX0gKLSNkZWZpbmUgSUVFRTgwMjE1NF9OTF9ICi0KLXN0cnVjdCBuZXRfZGV2aWNlOwotc3RydWN0IGllZWU4MDIxNTRfYWRkcjsKLQotaW50IGllZWU4MDIxNTRfbmxfYXNzb2NfaW5kaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwgdTggY2FwKTsKLWludCBpZWVlODAyMTU0X25sX2Fzc29jX2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJdTE2IHNob3J0X2FkZHIsIHU4IHN0YXR1cyk7Ci1pbnQgaWVlZTgwMjE1NF9ubF9kaXNhc3NvY19pbmRpYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLCB1OCByZWFzb24pOwotaW50IGllZWU4MDIxNTRfbmxfZGlzYXNzb2NfY29uZmlybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQl1OCBzdGF0dXMpOwotaW50IGllZWU4MDIxNTRfbmxfc2Nhbl9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCXU4IHN0YXR1cywgdTggc2Nhbl90eXBlLCB1MzIgdW5zY2FubmVkLAotCQl1OCAqZWRsLyosIHN0cnVjdCBsaXN0X2hlYWQgKnBhbl9kZXNjX2xpc3QgKi8pOwotaW50IGllZWU4MDIxNTRfbmxfYmVhY29uX2luZGljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBwYW5pZCwKLQkJdTE2IGNvb3JkX2FkZHIpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0X25ldGRldi5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGluY2x1ZGUvbmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmgKcmVuYW1lIHRvIGluY2x1ZGUvbmV0L2llZWU4MDIxNTRfbmV0ZGV2LmgKaW5kZXggZTI1MDZhZi4uNWRjNmE2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjE1NC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTU0X25ldGRldi5oCkBAIC04MCw3ICs4MCw3IEBACiBzdHJ1Y3QgaWVlZTgwMjE1NF9tbG1lX29wcyB7CiAJaW50ICgqYXNzb2NfcmVxKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwKLQkJCXU4IGNoYW5uZWwsIHU4IGNhcCk7CisJCQl1OCBjaGFubmVsLCB1OCBwYWdlLCB1OCBjYXApOwogCWludCAoKmFzc29jX3Jlc3ApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLAogCQkJdTE2IHNob3J0X2FkZHIsIHU4IHN0YXR1cyk7CkBAIC04OSwxMCArODksMTAgQEAKIAkJCXU4IHJlYXNvbik7CiAJaW50ICgqc3RhcnRfcmVxKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwKLQkJCXU4IGNoYW5uZWwsIHU4IGJjbl9vcmQsIHU4IHNmX29yZCwKKwkJCXU4IGNoYW5uZWwsIHU4IHBhZ2UsIHU4IGJjbl9vcmQsIHU4IHNmX29yZCwKIAkJCXU4IHBhbl9jb29yZCwgdTggYmx4LCB1OCBjb29yZF9yZWFsaWduKTsKIAlpbnQgKCpzY2FuX3JlcSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXU4IHR5cGUsIHUzMiBjaGFubmVscywgdTggZHVyYXRpb24pOworCQkJdTggdHlwZSwgdTMyIGNoYW5uZWxzLCB1OCBwYWdlLCB1OCBkdXJhdGlvbik7CiAKIAkvKgogCSAqIEZJWE1FOiB0aGVzZSBzaG91bGQgYmVjb21lIHRoZSBwYXJ0IG9mIFBJQi9NSUIgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IDdjNWMwZjcuLjE1YjQ5MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTIyLDYgKzIyLDEyIEBACiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogCisjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisjZGVmaW5lIEZJQjZfVEFCTEVfSEFTSFNaIDI1NgorI2Vsc2UKKyNkZWZpbmUgRklCNl9UQUJMRV9IQVNIU1ogMQorI2VuZGlmCisKIHN0cnVjdCBydDZfaW5mbzsKIAogc3RydWN0IGZpYjZfY29uZmlnCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBiYmFlMWU4Li45ODk3OGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTk5LDQ3ICs5OSw0NyBAQAogCXJldHVybiAmYnVmWyppZHggLSBsZW5dOwogfQogCi0jZGVmaW5lIElQX1ZTX0RCR19CVUYobGV2ZWwsIG1zZy4uLikJCQlcCi0gICAgZG8gewkJCQkJCVwKLQkgICAgY2hhciBpcF92c19kYmdfYnVmWzE2MF07CQkJXAotCSAgICBpbnQgaXBfdnNfZGJnX2lkeCA9IDA7CQkJXAotCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpCVwKLQkJICAgIHByaW50ayhLRVJOX0RFQlVHICJJUFZTOiAiIG1zZyk7CVwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBJUF9WU19FUlJfQlVGKG1zZy4uLikJCQkJXAotICAgIGRvIHsJCQkJCQlcCi0JICAgIGNoYXIgaXBfdnNfZGJnX2J1ZlsxNjBdOwkJCVwKLQkgICAgaW50IGlwX3ZzX2RiZ19pZHggPSAwOwkJCVwKLQkgICAgcHJpbnRrKEtFUk5fRVJSICJJUFZTOiAiIG1zZyk7CQlcCi0gICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVBfVlNfREJHX0JVRihsZXZlbCwgbXNnLCAuLi4pCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQljaGFyIGlwX3ZzX2RiZ19idWZbMTYwXTsJCQkJXAorCQlpbnQgaXBfdnNfZGJnX2lkeCA9IDA7CQkJCQlcCisJCWlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQobXNnKSwgIyNfX1ZBX0FSR1NfXyk7CVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19FUlJfQlVGKG1zZy4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQljaGFyIGlwX3ZzX2RiZ19idWZbMTYwXTsJCQkJXAorCQlpbnQgaXBfdnNfZGJnX2lkeCA9IDA7CQkJCQlcCisJCXByX2Vycihtc2cpOwkJCQkJCVwKKwl9IHdoaWxlICgwKQogCiAvKiBPbmx5IHVzZSBmcm9tIHdpdGhpbiBJUF9WU19EQkdfQlVGKCkgb3IgSVBfVlNfRVJSX0JVRiBtYWNyb3MgKi8KLSNkZWZpbmUgSVBfVlNfREJHX0FERFIoYWYsIGFkZHIpCQkJXAotICAgIGlwX3ZzX2RiZ19hZGRyKGFmLCBpcF92c19kYmdfYnVmLAkJCVwKLQkJICAgc2l6ZW9mKGlwX3ZzX2RiZ19idWYpLCBhZGRyLAkJXAotCQkgICAmaXBfdnNfZGJnX2lkeCkKKyNkZWZpbmUgSVBfVlNfREJHX0FERFIoYWYsIGFkZHIpCQkJCQlcCisJaXBfdnNfZGJnX2FkZHIoYWYsIGlwX3ZzX2RiZ19idWYsCQkJCVwKKwkJICAgICAgIHNpemVvZihpcF92c19kYmdfYnVmKSwgYWRkciwJCQlcCisJCSAgICAgICAmaXBfdnNfZGJnX2lkeCkKIAotI2RlZmluZSBJUF9WU19EQkcobGV2ZWwsIG1zZy4uLikJCQlcCi0gICAgZG8gewkJCQkJCVwKLQkgICAgaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKQlcCi0JCSAgICBwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogIiBtc2cpOwlcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgSVBfVlNfREJHX1JMKG1zZy4uLikJCQkJXAotICAgIGRvIHsJCQkJCQlcCi0JICAgIGlmIChuZXRfcmF0ZWxpbWl0KCkpCQkJXAotCQkgICAgcHJpbnRrKEtFUk5fREVCVUcgIklQVlM6ICIgbXNnKTsJXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIElQX1ZTX0RCR19QS1QobGV2ZWwsIHBwLCBza2IsIG9mcywgbXNnKQkJXAotICAgIGRvIHsJCQkJCQlcCi0JICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJXAotCQlwcC0+ZGVidWdfcGFja2V0KHBwLCBza2IsIG9mcywgbXNnKTsJXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIElQX1ZTX0RCR19STF9QS1QobGV2ZWwsIHBwLCBza2IsIG9mcywgbXNnKQlcCi0gICAgZG8gewkJCQkJCVwKLQkgICAgaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpICYmCVwKLQkJbmV0X3JhdGVsaW1pdCgpKQkJCVwKLQkJcHAtPmRlYnVnX3BhY2tldChwcCwgc2tiLCBvZnMsIG1zZyk7CVwKLSAgICB9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkcobGV2ZWwsIG1zZywgLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHIHByX2ZtdChtc2cpLCAjI19fVkFfQVJHU19fKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIElQX1ZTX0RCR19STChtc2csIC4uLikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAobmV0X3JhdGVsaW1pdCgpKQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KG1zZyksICMjX19WQV9BUkdTX18pOwlcCisJfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVBfVlNfREJHX1BLVChsZXZlbCwgcHAsIHNrYiwgb2ZzLCBtc2cpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCisJCQlwcC0+ZGVidWdfcGFja2V0KHBwLCBza2IsIG9mcywgbXNnKTsJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBJUF9WU19EQkdfUkxfUEtUKGxldmVsLCBwcCwgc2tiLCBvZnMsIG1zZykJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkgJiYJCQlcCisJCSAgICBuZXRfcmF0ZWxpbWl0KCkpCQkJCQlcCisJCQlwcC0+ZGVidWdfcGFja2V0KHBwLCBza2IsIG9mcywgbXNnKTsJCVwKKwl9IHdoaWxlICgwKQogI2Vsc2UJLyogTk8gREVCVUdHSU5HIGF0IEFMTCAqLwogI2RlZmluZSBJUF9WU19EQkdfQlVGKGxldmVsLCBtc2cuLi4pICBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgSVBfVlNfRVJSX0JVRihtc2cuLi4pICBkbyB7fSB3aGlsZSAoMCkKQEAgLTE1MCwyOSArMTUwLDI3IEBACiAjZW5kaWYKIAogI2RlZmluZSBJUF9WU19CVUcoKSBCVUcoKQotI2RlZmluZSBJUF9WU19FUlIobXNnLi4uKSBwcmludGsoS0VSTl9FUlIgIklQVlM6ICIgbXNnKQotI2RlZmluZSBJUF9WU19JTkZPKG1zZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiSVBWUzogIiBtc2cpCi0jZGVmaW5lIElQX1ZTX1dBUk5JTkcobXNnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiSVBWUzogIiBtc2cpCi0jZGVmaW5lIElQX1ZTX0VSUl9STChtc2cuLi4pCQkJCVwKLSAgICBkbyB7CQkJCQkJXAotCSAgICBpZiAobmV0X3JhdGVsaW1pdCgpKQkJCVwKLQkJICAgIHByaW50ayhLRVJOX0VSUiAiSVBWUzogIiBtc2cpOwlcCi0gICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSVBfVlNfRVJSX1JMKG1zZywgLi4uKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCQkJCQlcCisJCQlwcl9lcnIobXNnLCAjI19fVkFfQVJHU19fKTsJCQlcCisJfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19JUF9WU19ERUJVRwogI2RlZmluZSBFbnRlckZ1bmN0aW9uKGxldmVsKQkJCQkJCVwKLSAgICBkbyB7CQkJCQkJCQlcCi0JICAgIGlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCi0JCSAgICBwcmludGsoS0VSTl9ERUJVRyAiRW50ZXI6ICVzLCAlcyBsaW5lICVpXG4iLAlcCi0JCQkgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBMZWF2ZUZ1bmN0aW9uKGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgICBpZiAobGV2ZWwgPD0gaXBfdnNfZ2V0X2RlYnVnX2xldmVsKCkpICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTGVhdmU6ICVzLCAlcyBsaW5lICVpXG4iLCAgICBcCi0JCQkgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7ICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKGxldmVsIDw9IGlwX3ZzX2dldF9kZWJ1Z19sZXZlbCgpKQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHCQkJCVwKKwkJCSAgICAgICBwcl9mbXQoIkVudGVyOiAlcywgJXMgbGluZSAlaVxuIiksCVwKKwkJCSAgICAgICBfX2Z1bmNfXywgX19GSUxFX18sIF9fTElORV9fKTsJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBMZWF2ZUZ1bmN0aW9uKGxldmVsKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChsZXZlbCA8PSBpcF92c19nZXRfZGVidWdfbGV2ZWwoKSkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRwkJCQlcCisJCQkgICAgICAgcHJfZm10KCJMZWF2ZTogJXMsICVzIGxpbmUgJWlcbiIpLAlcCisJCQkgICAgICAgX19mdW5jX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CQlcCisJfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIEVudGVyRnVuY3Rpb24obGV2ZWwpICAgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIExlYXZlRnVuY3Rpb24obGV2ZWwpICAgZG8ge30gd2hpbGUgKDApCkBAIC03NDAsNyArNzM4LDggQEAKIGV4dGVybiB2b2lkIGlwX3ZzX3Byb3RvY29sX3RpbWVvdXRfY2hhbmdlKGludCBmbGFncyk7CiBleHRlcm4gaW50ICppcF92c19jcmVhdGVfdGltZW91dF90YWJsZShpbnQgKnRhYmxlLCBpbnQgc2l6ZSk7CiBleHRlcm4gaW50Ci1pcF92c19zZXRfc3RhdGVfdGltZW91dChpbnQgKnRhYmxlLCBpbnQgbnVtLCBjaGFyICoqbmFtZXMsIGNoYXIgKm5hbWUsIGludCB0byk7CitpcF92c19zZXRfc3RhdGVfdGltZW91dChpbnQgKnRhYmxlLCBpbnQgbnVtLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsCisJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgdG8pOwogZXh0ZXJuIHZvaWQKIGlwX3ZzX3RjcHVkcF9kZWJ1Z19wYWNrZXQoc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgaW50IG9mZnNldCwgY29uc3QgY2hhciAqbXNnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCBmMjdmZDgzLi5hZDlhNTExIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC00NDEsNiArNDQxLDE4IEBACiAJcmV0dXJuIF9faXB2Nl9hZGRyX2RpZmYoYTEsIGEyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgaXB2Nl9zZWxlY3RfaWRlbnQoc3RydWN0IGZyYWdfaGRyICpmaGRyKQoreworCXN0YXRpYyB1MzIgaXB2Nl9mcmFnbWVudGF0aW9uX2lkID0gMTsKKwlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlwNl9pZF9sb2NrKTsKKworCXNwaW5fbG9ja19iaCgmaXA2X2lkX2xvY2spOworCWZoZHItPmlkZW50aWZpY2F0aW9uID0gaHRvbmwoaXB2Nl9mcmFnbWVudGF0aW9uX2lkKTsKKwlpZiAoKytpcHY2X2ZyYWdtZW50YXRpb25faWQgPT0gMCkKKwkJaXB2Nl9mcmFnbWVudGF0aW9uX2lkID0gMTsKKwlzcGluX3VubG9ja19iaCgmaXA2X2lkX2xvY2spOworfQorCiAvKgogICoJUHJvdG90eXBlcyBleHBvcnRlZCBieSBpcHY2CiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX2V2ZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV9ldmVudC5oCmluZGV4IGMyOTA0NDcuLmJjMGM2ZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJjb21tX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fZXZlbnQuaApAQCAtNzQsNyArNzQsNyBAQAogCXN0cnVjdCBxb3NfaW5mbyAqcW9zOwogfTsKIAotZXh0ZXJuIGNoYXIgKmlyY29tbV9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV9zdGF0ZVtdOwogCiBzdHJ1Y3QgaXJjb21tX2NiOyAgIC8qIEZvcndhcmQgZGVjbC4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5X2F0dGFjaC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5X2F0dGFjaC5oCmluZGV4IGY5MWE1Njk1Li4wYTYzYmJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lyY29tbV90dHlfYXR0YWNoLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmNvbW1fdHR5X2F0dGFjaC5oCkBAIC02Niw4ICs2Niw4IEBACiAgICAgICAgIF9fdTggICAgICBkbHNhcF9zZWw7CiB9OwogCi1leHRlcm4gY2hhciAqaXJjb21tX3N0YXRlW107Ci1leHRlcm4gY2hhciAqaXJjb21tX3R0eV9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV90dHlfc3RhdGVbXTsKIAogaW50IGlyY29tbV90dHlfZG9fZXZlbnQoc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIElSQ09NTV9UVFlfRVZFTlQgZXZlbnQsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJjb21tX3R0eV9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaCBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaAppbmRleCAyYWUyZTExOS4uNGM5MDgyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9ldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZXZlbnQuaApAQCAtMTIwLDcgKzEyMCw3IEBACiAJTEFQX1BSSU1BUllfQ09ORkxJQ1QsCiB9IExBUF9SRUFTT047CiAKLWV4dGVybiBjb25zdCBjaGFyICppcmxhcF9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlybGFwX3N0YXRlW107CiAKIHZvaWQgaXJsYXBfZG9fZXZlbnQoc3RydWN0IGlybGFwX2NiICpzZWxmLCBJUkxBUF9FVkVOVCBldmVudCwgCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXJsYXBfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2V2ZW50LmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2V2ZW50LmgKaW5kZXggZTAzYWU0YS4uOWU0ZWMxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9ldmVudC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZXZlbnQuaApAQCAtNzksOCArNzksOCBAQAogCUxNX0xBUF9JRExFX1RJTUVPVVQsCiB9IElSTE1QX0VWRU5UOwogCi1leHRlcm4gY29uc3QgY2hhciAqaXJsbXBfc3RhdGVbXTsKLWV4dGVybiBjb25zdCBjaGFyICppcmxzYXBfc3RhdGVbXTsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBpcmxtcF9zdGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IGlybHNhcF9zdGF0ZVtdOwogCiB2b2lkIGlybG1wX3dhdGNoZG9nX3RpbWVyX2V4cGlyZWQodm9pZCAqZGF0YSk7CiB2b2lkIGlybG1wX2Rpc2NvdmVyeV90aW1lcl9leHBpcmVkKHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oIGIvaW5jbHVkZS9uZXQvaXdfaGFuZGxlci5oCmluZGV4IDUxYjlhMzcuLmU5MDU0YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2l3X2hhbmRsZXIuaAorKysgYi9pbmNsdWRlL25ldC9pd19oYW5kbGVyLmgKQEAgLTQxNiwxMyArNDE2LDEzIEBACiAgKiBkYXRhIChpLmUuIHZhbGlkIGFzIGxvbmcgYXMgc3RydWN0IG5ldF9kZXZpY2UgZXhpc3QsIHNhbWUgbG9ja2luZyBydWxlcykuCiAgKi8KIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KLXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlOworc3RydWN0IGxpYmlwd19kZXZpY2U7CiAvKiBUaGUgc3RydWN0ICovCiBzdHJ1Y3QgaXdfcHVibGljX2RhdGEgewogCS8qIERyaXZlciBlbmhhbmNlZCBzcHkgc3VwcG9ydCAqLwogCXN0cnVjdCBpd19zcHlfZGF0YSAqCQlzcHlfZGF0YTsKLQkvKiBTdHJ1Y3R1cmUgbWFuYWdlZCBieSB0aGUgaW4ta2VybmVsIElFRUUgODAyLjExIGxheWVyICovCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKglpZWVlODAyMTE7CisJLyogTGVnYWN5IHN0cnVjdHVyZSBtYW5hZ2VkIGJ5IHRoZSBpcHcyeDAwLXNwZWNpZmljIElFRUUgODAyLjExIGxheWVyICovCisJc3RydWN0IGxpYmlwd19kZXZpY2UgKgkJbGliaXB3OwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiogUFJPVE9UWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDQzLDcgKzQ0Myw3IEBACiBleHRlcm4gdm9pZCB3aXJlbGVzc19zZW5kX2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2LAogCQkJCXVuc2lnbmVkIGludAkJY21kLAogCQkJCXVuaW9uIGl3cmVxX2RhdGEgKgl3cnF1LAotCQkJCWNoYXIgKgkJCWV4dHJhKTsKKwkJCQljb25zdCBjaGFyICoJCWV4dHJhKTsKIAogLyogV2UgbWF5IG5lZWQgYSBmdW5jdGlvbiB0byBzZW5kIGEgc3RyZWFtIG9mIGV2ZW50cyB0byB1c2VyIHNwYWNlLgogICogTW9yZSBvbiB0aGF0IGxhdGVyLi4uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAppbmRleCBjMDYxMDQ0Li40NjY4NTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKQEAgLTczLDYgKzczLDIxIEBACiAgKi8KIAogLyoqCisgKiBET0M6IG1hYzgwMjExIHdvcmtxdWV1ZQorICoKKyAqIG1hYzgwMjExIHByb3ZpZGVzIGl0cyBvd24gd29ya3F1ZXVlIGZvciBkcml2ZXJzIGFuZCBpbnRlcm5hbCBtYWM4MDIxMSB1c2UuCisgKiBUaGUgd29ya3F1ZXVlIGlzIGEgc2luZ2xlIHRocmVhZGVkIHdvcmtxdWV1ZSBhbmQgY2FuIG9ubHkgYmUgYWNjZXNzZWQgYnkKKyAqIGhlbHBlcnMgZm9yIHNhbml0eSBjaGVja2luZy4gRHJpdmVycyBtdXN0IGVuc3VyZSBhbGwgd29yayBhZGRlZCBvbnRvIHRoZQorICogbWFjODAyMTEgd29ya3F1ZXVlIHNob3VsZCBiZSBjYW5jZWxsZWQgb24gdGhlIGRyaXZlciBzdG9wKCkgY2FsbGJhY2suCisgKgorICogbWFjODAyMTEgd2lsbCBmbHVzaGVkIHRoZSB3b3JrcXVldWUgdXBvbiBpbnRlcmZhY2UgcmVtb3ZhbCBhbmQgZHVyaW5nCisgKiBzdXNwZW5kLgorICoKKyAqIEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGUgbWFjODAyMTEgd29ya3F1ZXVlIG11c3Qgbm90IGFjcXVpcmUgdGhlIFJUTkwgbG9jay4KKyAqCisgKi8KKworLyoqCiAgKiBlbnVtIGllZWU4MDIxMV9tYXhfcXVldWVzIC0gbWF4aW11bSBudW1iZXIgb2YgcXVldWVzCiAgKgogICogQElFRUU4MDIxMV9NQVhfUVVFVUVTOiBNYXhpbXVtIG51bWJlciBvZiByZWd1bGFyIGRldmljZSBxdWV1ZXMuCkBAIC0yMjQsNyArMjM5LDE0IEBACiAgKiBASUVFRTgwMjExX1RYX0NUTF9BTVBEVTogdGhpcyBmcmFtZSBzaG91bGQgYmUgc2VudCBhcyBwYXJ0IG9mIGFuIEEtTVBEVQogICogQElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQ6IEZyYW1lIHdhcyBpbmplY3RlZCwgaW50ZXJuYWwgdG8gbWFjODAyMTEuCiAgKiBASUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ6IFRoZSBmcmFtZSB3YXMgbm90IHRyYW5zbWl0dGVkCi0gKgliZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBTVEEgd2FzIGluIHBvd2Vyc2F2ZSBtb2RlLgorICoJYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gU1RBIHdhcyBpbiBwb3dlcnNhdmUgbW9kZS4gTm90ZSB0aGF0IHRvCisgKglhdm9pZCByYWNlIGNvbmRpdGlvbnMsIHRoZSBmaWx0ZXIgbXVzdCBiZSBzZXQgYnkgdGhlIGhhcmR3YXJlIG9yCisgKglmaXJtd2FyZSB1cG9uIHJlY2VpdmluZyBhIGZyYW1lIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHN0YXRpb24KKyAqCXdlbnQgdG8gc2xlZXAgKG11c3QgYmUgZG9uZSBvbiBkZXZpY2UgdG8gZmlsdGVyIGZyYW1lcyBhbHJlYWR5IG9uCisgKgl0aGUgcXVldWUpIGFuZCBtYXkgb25seSBiZSB1bnNldCBhZnRlciBtYWM4MDIxMSBnaXZlcyB0aGUgT0sgZm9yCisgKgl0aGF0IGJ5IHNldHRpbmcgdGhlIElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCAoc2VlIGFib3ZlKSwKKyAqCXNpbmNlIG9ubHkgdGhlbiBpcyBpdCBndWFyYW50ZWVkIHRoYXQgbm8gbW9yZSBmcmFtZXMgYXJlIGluIHRoZQorICoJaGFyZHdhcmUgcXVldWUuCiAgKiBASUVFRTgwMjExX1RYX1NUQVRfQUNLOiBGcmFtZSB3YXMgYWNrbm93bGVkZ2VkCiAgKiBASUVFRTgwMjExX1RYX1NUQVRfQU1QRFU6IFRoZSBmcmFtZSB3YXMgYWdncmVnYXRlZCwgc28gc3RhdHVzCiAgKiAJaXMgZm9yIHRoZSB3aG9sZSBhZ2dyZWdhdGlvbi4KQEAgLTI0MSw2ICsyNjMsMTUgQEAKICAqCWl0IGNhbiBiZSBzZW50IG91dC4KICAqIEBJRUVFODAyMTFfVFhfSU5URkxfUkVUUklFRDogY29tcGxldGVseSBpbnRlcm5hbCB0byBtYWM4MDIxMSwKICAqCXVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGZyYW1lIHdhcyBhbHJlYWR5IHJldHJpZWQgZHVlIHRvIFBTCisgKiBASUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDogY29tcGxldGVseSBpbnRlcm5hbCB0byBtYWM4MDIxMSwKKyAqCXVzZWQgdG8gaW5kaWNhdGUgZnJhbWUgc2hvdWxkIG5vdCBiZSBlbmNyeXB0ZWQKKyAqIEBJRUVFODAyMTFfVFhfQ1RMX1BTUE9MTF9SRVNQT05TRTogKGludGVybmFsPykKKyAqCVRoaXMgZnJhbWUgaXMgYSByZXNwb25zZSB0byBhIFBTLXBvbGwgZnJhbWUgYW5kIHNob3VsZCBiZSBzZW50CisgKglhbHRob3VnaCB0aGUgc3RhdGlvbiBpcyBpbiBwb3dlcnNhdmUgbW9kZS4KKyAqIEBJRUVFODAyMTFfVFhfQ1RMX01PUkVfRlJBTUVTOiBNb3JlIGZyYW1lcyB3aWxsIGJlIHBhc3NlZCB0byB0aGUKKyAqCXRyYW5zbWl0IGZ1bmN0aW9uIGFmdGVyIHRoZSBjdXJyZW50IGZyYW1lLCB0aGlzIGNhbiBiZSB1c2VkCisgKglieSBkcml2ZXJzIHRvIGtpY2sgdGhlIERNQSBxdWV1ZSBvbmx5IGlmIHVuc2V0IG9yIHdoZW4gdGhlCisgKglxdWV1ZSBnZXRzIGZ1bGwuCiAgKi8KIGVudW0gbWFjODAyMTFfdHhfY29udHJvbF9mbGFncyB7CiAJSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTCQk9IEJJVCgwKSwKQEAgLTI1OSw2ICsyOTAsOSBAQAogCUlFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR08JCT0gQklUKDEzKSwKIAlJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkcJPSBCSVQoMTQpLAogCUlFRUU4MDIxMV9UWF9JTlRGTF9SRVRSSUVECQk9IEJJVCgxNSksCisJSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVAkJPSBCSVQoMTYpLAorCUlFRUU4MDIxMV9UWF9DVExfUFNQT0xMX1JFU1BPTlNFCT0gQklUKDE3KSwKKwlJRUVFODAyMTFfVFhfQ1RMX01PUkVfRlJBTUVTCQk9IEJJVCgxOCksCiB9OwogCiAvKioKQEAgLTMxNiw2ICszNTAsMjEgQEAKICAqCiAgKiBXaGVuIHVzZWQgZm9yIHRyYW5zbWl0IHN0YXR1cyByZXBvcnRpbmcsIHRoZSBkcml2ZXIgc2hvdWxkCiAgKiBhbHdheXMgcmVwb3J0IHRoZSByYXRlIGFsb25nIHdpdGggdGhlIGZsYWdzIGl0IHVzZWQuCisgKgorICogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBjb250YWlucyBhbiBhcnJheSBvZiB0aGVzZSBzdHJ1Y3RzCisgKiBpbiB0aGUgY29udHJvbCBpbmZvcm1hdGlvbiwgYW5kIGl0IHdpbGwgYmUgZmlsbGVkIGJ5IHRoZSByYXRlCisgKiBjb250cm9sIGFsZ29yaXRobSBhY2NvcmRpbmcgdG8gd2hhdCBzaG91bGQgYmUgc2VudC4gRm9yIGV4YW1wbGUsCisgKiBpZiB0aGlzIGFycmF5IGNvbnRhaW5zLCBpbiB0aGUgZm9ybWF0IHsgPGlkeD4sIDxjb3VudD4gfSB0aGUKKyAqIGluZm9ybWF0aW9uCisgKiAgICB7IDMsIDIgfSwgeyAyLCAyIH0sIHsgMSwgNCB9LCB7IC0xLCAwIH0sIHsgLTEsIDAgfQorICogdGhlbiB0aGlzIG1lYW5zIHRoYXQgdGhlIGZyYW1lIHNob3VsZCBiZSB0cmFuc21pdHRlZAorICogdXAgdG8gdHdpY2UgYXQgcmF0ZSAzLCB1cCB0byB0d2ljZSBhdCByYXRlIDIsIGFuZCB1cCB0byBmb3VyCisgKiB0aW1lcyBhdCByYXRlIDEgaWYgaXQgZG9lc24ndCBnZXQgYWNrbm93bGVkZ2VkLiBTYXkgaXQgZ2V0cworICogYWNrbm93bGVkZ2VkIGJ5IHRoZSBwZWVyIGFmdGVyIHRoZSBmaWZ0aCBhdHRlbXB0LCB0aGUgc3RhdHVzCisgKiBpbmZvcm1hdGlvbiBzaG91bGQgdGhlbiBjb250YWluCisgKiAgIHsgMywgMiB9LCB7IDIsIDIgfSwgeyAxLCAxIH0sIHsgLTEsIDAgfSAuLi4KKyAqIHNpbmNlIGl0IHdhcyB0cmFuc21pdHRlZCB0d2ljZSBhdCByYXRlIDMsIHR3aWNlIGF0IHJhdGUgMgorICogYW5kIG9uY2UgYXQgcmF0ZSAxIGFmdGVyIHdoaWNoIHdlIHJlY2VpdmVkIGFuIGFja25vd2xlZGdlbWVudC4KICAqLwogc3RydWN0IGllZWU4MDIxMV90eF9yYXRlIHsKIAlzOCBpZHg7CkBAIC0zOTcsNiArNDQ2LDExIEBACiAJcmV0dXJuIChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKilza2ItPmNiOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpJRUVFODAyMTFfU0tCX1JYQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopc2tiLT5jYjsKK30KKwogLyoqCiAgKiBpZWVlODAyMTFfdHhfaW5mb19jbGVhcl9zdGF0dXMgLSBjbGVhciBUWCBzdGF0dXMKICAqCkBAIC00NzgsNyArNTMyLDcgQEAKICAqCiAgKiBUaGUgbG93LWxldmVsIGRyaXZlciBzaG91bGQgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uICh0aGUgc3Vic2V0CiAgKiBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUpIHRvIHRoZSA4MDIuMTEgY29kZSB3aXRoIGVhY2ggcmVjZWl2ZWQKLSAqIGZyYW1lLgorICogZnJhbWUsIGluIHRoZSBza2IncyBjb250cm9sIGJ1ZmZlciAoY2IpLgogICoKICAqIEBtYWN0aW1lOiB2YWx1ZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlIDY0LWJpdCBUaW1lIFN5bmNocm9uaXphdGlvbiBGdW5jdGlvbgogICogCShUU0YpIHRpbWVyIHdoZW4gdGhlIGZpcnN0IGRhdGEgc3ltYm9sIChNUERVKSBhcnJpdmVkIGF0IHRoZSBoYXJkd2FyZS4KQEAgLTUyOSw3ICs1ODMsNiBAQAogLyoqCiAgKiBlbnVtIGllZWU4MDIxMV9jb25mX2NoYW5nZWQgLSBkZW5vdGVzIHdoaWNoIGNvbmZpZ3VyYXRpb24gY2hhbmdlZAogICoKLSAqIEBfSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQ6IERFUFJFQ0FURUQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTElTVEVOX0lOVEVSVkFMOiB0aGUgbGlzdGVuIGludGVydmFsIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9UQVA6IHRoZSByYWRpb3RhcCBmbGFnIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFM6IHRoZSBQUyBmbGFnIG9yIGR5bmFtaWMgUFMgdGltZW91dCBjaGFuZ2VkCkBAIC01MzksNyArNTkyLDYgQEAKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRTogSWRsZSBmbGFnIGNoYW5nZWQKICAqLwogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIHsKLQlfSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQJPSBCSVQoMCksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTAk9IEJJVCgyKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9UQVAJCT0gQklUKDMpLAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QUwkJPSBCSVQoNCksCkBAIC01NDksMTQgKzYwMSw2IEBACiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEUJCT0gQklUKDgpLAogfTsKIAotc3RhdGljIGlubGluZSBfX2RlcHJlY2F0ZWQgZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkCi1fX0lFRUU4MDIxMV9DT05GX0NIQU5HRV9SQURJT19FTkFCTEVEKHZvaWQpCi17Ci0JcmV0dXJuIF9JRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9fRU5BQkxFRDsKLX0KLSNkZWZpbmUgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQgXAotCV9fSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQoKQotCiAvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfY29uZiAtIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZQogICoKQEAgLTU2NCw5ICs2MDgsNiBAQAogICoKICAqIEBmbGFnczogY29uZmlndXJhdGlvbiBmbGFncyBkZWZpbmVkIGFib3ZlCiAgKgotICogQHJhZGlvX2VuYWJsZWQ6IHdoZW4gemVybywgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHN3aXRjaCBvZmYgdGhlIHJhZGlvLgotICogQGJlYWNvbl9pbnQ6IERFUFJFQ0FURUQsIERPIE5PVCBVU0UKLSAqCiAgKiBAbGlzdGVuX2ludGVydmFsOiBsaXN0ZW4gaW50ZXJ2YWwgaW4gdW5pdHMgb2YgYmVhY29uIGludGVydmFsCiAgKiBAbWF4X3NsZWVwX3BlcmlvZDogdGhlIG1heGltdW0gbnVtYmVyIG9mIGJlYWNvbiBpbnRlcnZhbHMgdG8gc2xlZXAgZm9yCiAgKgliZWZvcmUgY2hlY2tpbmcgdGhlIGJlYWNvbiBmb3IgYSBUSU0gYml0IChtYW5hZ2VkIG1vZGUgb25seSk7IHRoaXMKQEAgLTU5MCwxMyArNjMxLDExIEBACiAgKiAgICBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBub3QgdGhlIG51bWJlciBvZiByZXRyaWVzCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfY29uZiB7Ci0JaW50IF9fZGVwcmVjYXRlZCBiZWFjb25faW50OwogCXUzMiBmbGFnczsKIAlpbnQgcG93ZXJfbGV2ZWwsIGR5bmFtaWNfcHNfdGltZW91dDsKIAlpbnQgbWF4X3NsZWVwX3BlcmlvZDsKIAogCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JYm9vbCBfX2RlcHJlY2F0ZWQgcmFkaW9fZW5hYmxlZDsKIAogCXU4IGxvbmdfZnJhbWVfbWF4X3R4X2NvdW50LCBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ7CiAKQEAgLTkwMSwxMiArOTQwLDYgQEAKICAqCiAgKiBAY29uZjogJnN0cnVjdCBpZWVlODAyMTFfY29uZiwgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGRvbid0IHVzZS4KICAqCi0gKiBAd29ya3F1ZXVlOiBzaW5nbGUgdGhyZWFkZWQgd29ya3F1ZXVlIGF2YWlsYWJsZSBmb3IgZHJpdmVyIHVzZSwKLSAqCWFsbG9jYXRlZCBieSBtYWM4MDIxMSBvbiByZWdpc3RyYXRpb24gYW5kIGZsdXNoZWQgd2hlbiBhbgotICoJaW50ZXJmYWNlIGlzIHJlbW92ZWQuCi0gKglOT1RJQ0U6IEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGlzIHdvcmtxdWV1ZSBtdXN0IG5vdAotICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrLgotICoKICAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgYXJlYSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIGRyaXZlciB1c2UKICAqCWFsb25nIHdpdGggdGhpcyBzdHJ1Y3R1cmUuCiAgKgpAQCAtOTQyLDcgKzk3NSw2IEBACiBzdHJ1Y3QgaWVlZTgwMjExX2h3IHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgY29uZjsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwotCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CiAJY29uc3QgY2hhciAqcmF0ZV9jb250cm9sX2FsZ29yaXRobTsKIAl2b2lkICpwcml2OwogCXUzMiBmbGFnczsKQEAgLTExNzIsMTAgKzEyMDQsMTMgQEAKICAqIHRoZSBkcml2ZXIncyBjb25maWd1cmVfZmlsdGVyKCkgZnVuY3Rpb24gd2hpY2ggZnJhbWVzIHNob3VsZCBiZQogICogcGFzc2VkIHRvIG1hYzgwMjExIGFuZCB3aGljaCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0LgogICoKLSAqIFRoZSBjb25maWd1cmVfZmlsdGVyKCkgY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoIHRoZSBwYXJhbWV0ZXJzCi0gKiBAbWNfY291bnQgYW5kIEBtY19saXN0IGZvciB0aGUgY29tYmluZWQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdAotICogb2YgYWxsIHZpcnR1YWwgaW50ZXJmYWNlcywgQGNoYW5nZWRfZmxhZ3MgdGVsbGluZyB3aGljaCBmbGFncwotICogd2VyZSBjaGFuZ2VkIGFuZCBAdG90YWxfZmxhZ3Mgd2l0aCB0aGUgbmV3IGZsYWcgc3RhdGVzLgorICogQmVmb3JlIGNvbmZpZ3VyZV9maWx0ZXIoKSBpcyBpbnZva2VkLCB0aGUgcHJlcGFyZV9tdWx0aWNhc3QoKQorICogY2FsbGJhY2sgaXMgaW52b2tlZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIEBtY19jb3VudCBhbmQgQG1jX2xpc3QKKyAqIGZvciB0aGUgY29tYmluZWQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdCBvZiBhbGwgdmlydHVhbCBpbnRlcmZhY2VzLgorICogSXQncyB1c2UgaXMgb3B0aW9uYWwsIGFuZCBpdCByZXR1cm5zIGEgdTY0IHRoYXQgaXMgcGFzc2VkIHRvCisgKiBjb25maWd1cmVfZmlsdGVyKCkuIEFkZGl0aW9uYWxseSwgY29uZmlndXJlX2ZpbHRlcigpIGhhcyB0aGUKKyAqIGFyZ3VtZW50cyBAY2hhbmdlZF9mbGFncyB0ZWxsaW5nIHdoaWNoIGZsYWdzIHdlcmUgY2hhbmdlZCBhbmQKKyAqIEB0b3RhbF9mbGFncyB3aXRoIHRoZSBuZXcgZmxhZyBzdGF0ZXMuCiAgKgogICogSWYgeW91ciBkZXZpY2UgaGFzIG5vIG11bHRpY2FzdCBhZGRyZXNzIGZpbHRlcnMgeW91ciBkcml2ZXIgd2lsbAogICogbmVlZCB0byBjaGVjayBib3RoIHRoZSAlRklGX0FMTE1VTFRJIGZsYWcgYW5kIHRoZSBAbWNfY291bnQKQEAgLTEyMjQsMTAgKzEyNTksMTMgQEAKICAqCW1hYzgwMjExIG5lZWRzIHRvIGRvIGFuZCB0aGUgYW1vdW50IG9mIENQVSB3YWtldXBzLCBzbyB5b3Ugc2hvdWxkCiAgKglob25vdXIgdGhpcyBmbGFnIGlmIHBvc3NpYmxlLgogICoKLSAqIEBGSUZfQ09OVFJPTDogcGFzcyBjb250cm9sIGZyYW1lcywgaWYgUFJPTUlTQ19JTl9CU1MgaXMgbm90IHNldCB0aGVuCi0gKglvbmx5IHRob3NlIGFkZHJlc3NlZCB0byB0aGlzIHN0YXRpb24KKyAqIEBGSUZfQ09OVFJPTDogcGFzcyBjb250cm9sIGZyYW1lcyAoZXhjZXB0IGZvciBQUyBQb2xsKSwgaWYgUFJPTUlTQ19JTl9CU1MKKyAqICBpcyBub3Qgc2V0IHRoZW4gb25seSB0aG9zZSBhZGRyZXNzZWQgdG8gdGhpcyBzdGF0aW9uLgogICoKICAqIEBGSUZfT1RIRVJfQlNTOiBwYXNzIGZyYW1lcyBkZXN0aW5lZCB0byBvdGhlciBCU1NlcworICoKKyAqIEBGSUZfUFNQT0xMOiBwYXNzIFBTIFBvbGwgZnJhbWVzLCBpZiBQUk9NSVNDX0lOX0JTUyAgaXMgbm90IHNldCB0aGVuIG9ubHkKKyAqICB0aG9zZSBhZGRyZXNzZWQgdG8gdGhpcyBzdGF0aW9uLgogICovCiBlbnVtIGllZWU4MDIxMV9maWx0ZXJfZmxhZ3MgewogCUZJRl9QUk9NSVNDX0lOX0JTUwk9IDE8PDAsCkBAIC0xMjM3LDYgKzEyNzUsNyBAQAogCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDCT0gMTw8NCwKIAlGSUZfQ09OVFJPTAkJPSAxPDw1LAogCUZJRl9PVEhFUl9CU1MJCT0gMTw8NiwKKwlGSUZfUFNQT0xMCQk9IDE8PDcsCiB9OwogCiAvKioKQEAgLTEyODksNyArMTMyOCw4IEBACiAgKglpcyBkaXNhYmxlZC4gVGhpcyBzaG91bGQgdHVybiBvZmYgdGhlIGhhcmR3YXJlIChhdCBsZWFzdAogICoJaXQgbXVzdCB0dXJuIG9mZiBmcmFtZSByZWNlcHRpb24uKQogICoJTWF5IGJlIGNhbGxlZCByaWdodCBhZnRlciBhZGRfaW50ZXJmYWNlIGlmIHRoYXQgcmVqZWN0cwotICoJYW4gaW50ZXJmYWNlLgorICoJYW4gaW50ZXJmYWNlLiBJZiB5b3UgYWRkZWQgYW55IHdvcmsgb250byB0aGUgbWFjODAyMTEgd29ya3F1ZXVlCisgKgl5b3Ugc2hvdWxkIGVuc3VyZSB0byBjYW5jZWwgaXQgb24gdGhpcyBjYWxsYmFjay4KICAqCU11c3QgYmUgaW1wbGVtZW50ZWQuCiAgKgogICogQGFkZF9pbnRlcmZhY2U6IENhbGxlZCB3aGVuIGEgbmV0ZGV2aWNlIGF0dGFjaGVkIHRvIHRoZSBoYXJkd2FyZSBpcwpAQCAtMTMyMyw5ICsxMzYzLDEzIEBACiAgKglmb3IgYXNzb2NpYXRpb24gaW5kaWNhdGlvbi4gVGhlIEBjaGFuZ2VkIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hpY2gKICAqCW9mIHRoZSBic3MgcGFyYW1ldGVycyBoYXMgY2hhbmdlZCB3aGVuIGEgY2FsbCBpcyBtYWRlLgogICoKKyAqIEBwcmVwYXJlX211bHRpY2FzdDogUHJlcGFyZSBmb3IgbXVsdGljYXN0IGZpbHRlciBjb25maWd1cmF0aW9uLgorICoJVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCwgYW5kIGl0cyByZXR1cm4gdmFsdWUgaXMgcGFzc2VkCisgKgl0byBjb25maWd1cmVfZmlsdGVyKCkuIFRoaXMgY2FsbGJhY2sgbXVzdCBiZSBhdG9taWMuCisgKgogICogQGNvbmZpZ3VyZV9maWx0ZXI6IENvbmZpZ3VyZSB0aGUgZGV2aWNlJ3MgUlggZmlsdGVyLgogICoJU2VlIHRoZSBzZWN0aW9uICJGcmFtZSBmaWx0ZXJpbmciIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoJVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkIGFuZCBhdG9taWMuCisgKglUaGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQuCiAgKgogICogQHNldF90aW06IFNldCBUSU0gYml0LiBtYWM4MDIxMSBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gYSBUSU0gYml0CiAgKiAJbXVzdCBiZSBzZXQgb3IgY2xlYXJlZCBmb3IgYSBnaXZlbiBTVEEuIE11c3QgYmUgYXRvbWljLgpAQCAtMTQxMSw2ICsxNDU1LDggQEAKICAqIEByZmtpbGxfcG9sbDogUG9sbCByZmtpbGwgaGFyZHdhcmUgc3RhdGUuIElmIHlvdSBuZWVkIHRoaXMsIHlvdSBhbHNvCiAgKgluZWVkIHRvIHNldCB3aXBoeS0+cmZraWxsX3BvbGwgdG8gJXRydWUgYmVmb3JlIHJlZ2lzdHJhdGlvbiwKICAqCWFuZCBuZWVkIHRvIGNhbGwgd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZSgpIGluIHRoZSBjYWxsYmFjay4KKyAqCisgKiBAdGVzdG1vZGVfY21kOiBJbXBsZW1lbnQgYSBjZmc4MDIxMSB0ZXN0IG1vZGUgY29tbWFuZC4KICAqLwogc3RydWN0IGllZWU4MDIxMV9vcHMgewogCWludCAoKnR4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xNDI1LDEwICsxNDcxLDEyIEBACiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCiAJCQkJIHUzMiBjaGFuZ2VkKTsKKwl1NjQgKCpwcmVwYXJlX211bHRpY2FzdCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOwogCXZvaWQgKCpjb25maWd1cmVfZmlsdGVyKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJIGludCBtY19jb3VudCwgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpOworCQkJCSB1NjQgbXVsdGljYXN0KTsKIAlpbnQgKCpzZXRfdGltKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIGJvb2wgc2V0KTsKIAlpbnQgKCpzZXRfa2V5KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCkBAIC0xNDYxLDYgKzE1MDksOSBAQAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKTsKIAogCXZvaWQgKCpyZmtpbGxfcG9sbCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworI2lmZGVmIENPTkZJR19OTDgwMjExX1RFU1RNT0RFCisJaW50ICgqdGVzdG1vZGVfY21kKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbik7CisjZW5kaWYKIH07CiAKIC8qKgpAQCAtMTYwNiwxMCArMTY1Nyw2IEBACiAgKi8KIHZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCi0vKiB0cmljayB0byBhdm9pZCBzeW1ib2wgY2xhc2hlcyB3aXRoIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtICovCi12b2lkIF9faWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7Ci0KIC8qKgogICogaWVlZTgwMjExX3J4IC0gcmVjZWl2ZSBmcmFtZQogICoKQEAgLTE2MjQsMTQgKzE2NzEsOCBAQAogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKLSAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGlzIGZyYW1lOyB0aGUgc3RhdHVzIHBvaW50ZXIgbmVlZCBub3QgYmUgdmFsaWQKLSAqCWFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucwogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCi17Ci0JX19pZWVlODAyMTFfcngoaHcsIHNrYiwgc3RhdHVzKTsKLX0KK3ZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfcnhfaXJxc2FmZSAtIHJlY2VpdmUgZnJhbWUKQEAgLTE2NDQsMTMgKzE2ODUsOCBAQAogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgogICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGwKLSAqIEBzdGF0dXM6IHN0YXR1cyBvZiB0aGlzIGZyYW1lOyB0aGUgc3RhdHVzIHBvaW50ZXIgbmVlZCBub3QgYmUgdmFsaWQKLSAqCWFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbmQgaXMgbm90IGZyZWVkIGJ5IG1hYzgwMjExLAotICoJaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpdCBwb2ludHMgdG8gYSBzdGFjayBhcmVhCiAgKi8KLXZvaWQgaWVlZTgwMjExX3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwordm9pZCBpZWVlODAyMTFfcnhfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIC8qKgogICogaWVlZTgwMjExX3R4X3N0YXR1cyAtIHRyYW5zbWl0IHN0YXR1cyBjYWxsYmFjawpAQCAtMTkxNyw2ICsxOTUzLDMxIEBACiAJCQkJCQl2b2lkICpkYXRhKTsKIAogLyoqCisgKiBpZWVlODAyMTFfcXVldWVfd29yayAtIGFkZCB3b3JrIG9udG8gdGhlIG1hYzgwMjExIHdvcmtxdWV1ZQorICoKKyAqIERyaXZlcnMgYW5kIG1hYzgwMjExIHVzZSB0aGlzIHRvIGFkZCB3b3JrIG9udG8gdGhlIG1hYzgwMjExIHdvcmtxdWV1ZS4KKyAqIFRoaXMgaGVscGVyIGVuc3VyZXMgZHJpdmVycyBhcmUgbm90IHF1ZXVlaW5nIHdvcmsgd2hlbiB0aGV5IHNob3VsZCBub3QgYmUuCisgKgorICogQGh3OiB0aGUgaGFyZHdhcmUgc3RydWN0IGZvciB0aGUgaW50ZXJmYWNlIHdlIGFyZSBhZGRpbmcgd29yayBmb3IKKyAqIEB3b3JrOiB0aGUgd29yayB3ZSB3YW50IHRvIGFkZCBvbnRvIHRoZSBtYWM4MDIxMSB3b3JrcXVldWUKKyAqLwordm9pZCBpZWVlODAyMTFfcXVldWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworLyoqCisgKiBpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrIC0gYWRkIHdvcmsgb250byB0aGUgbWFjODAyMTEgd29ya3F1ZXVlCisgKgorICogRHJpdmVycyBhbmQgbWFjODAyMTEgdXNlIHRoaXMgdG8gcXVldWUgZGVsYXllZCB3b3JrIG9udG8gdGhlIG1hYzgwMjExCisgKiB3b3JrcXVldWUuCisgKgorICogQGh3OiB0aGUgaGFyZHdhcmUgc3RydWN0IGZvciB0aGUgaW50ZXJmYWNlIHdlIGFyZSBhZGRpbmcgd29yayBmb3IKKyAqIEBkd29yazogZGVsYXlhYmxlIHdvcmsgdG8gcXVldWUgb250byB0aGUgbWFjODAyMTEgd29ya3F1ZXVlCisgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQgYmVmb3JlIHF1ZXVlaW5nCisgKi8KK3ZvaWQgaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrLAorCQkJCSAgdW5zaWduZWQgbG9uZyBkZWxheSk7CisKKy8qKgogICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24gLSBTdGFydCBhIHR4IEJsb2NrIEFjayBzZXNzaW9uLgogICogQGh3OiBwb2ludGVyIGFzIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50CkBAIC0yMDkwLDYgKzIxNTEsMjkgQEAKIAlyZXR1cm4gKHN0YSA9PSBOVUxMIHx8IHN0YS0+c3VwcF9yYXRlc1tiYW5kXSAmIEJJVChpbmRleCkpOwogfQogCisvKioKKyAqIHJhdGVfY29udHJvbF9zZW5kX2xvdyAtIGhlbHBlciBmb3IgZHJpdmVycyBmb3IgbWFuYWdlbWVudC9uby1hY2sgZnJhbWVzCisgKgorICogUmF0ZSBjb250cm9sIGFsZ29yaXRobXMgdGhhdCBhZ3JlZSB0byB1c2UgdGhlIGxvd2VzdCByYXRlIHRvCisgKiBzZW5kIG1hbmFnZW1lbnQgZnJhbWVzIGFuZCBOT19BQ0sgZGF0YSB3aXRoIHRoZSByZXNwZWN0aXZlIGh3CisgKiByZXRyaWVzIHNob3VsZCB1c2UgdGhpcyBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoZWlyIG1hYzgwMjExIGdldF9yYXRlCisgKiBjYWxsYmFjay4gSWYgdHJ1ZSBpcyByZXR1cm5lZCB0aGUgcmF0ZSBjb250cm9sIGNhbiBzaW1wbHkgcmV0dXJuLgorICogSWYgZmFsc2UgaXMgcmV0dXJuZWQgd2UgZ3VhcmFudGVlIHRoYXQgc3RhIGFuZCBzdGEgYW5kIHByaXZfc3RhIGlzCisgKiBub3QgbnVsbC4KKyAqCisgKiBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtcyB3aXNoaW5nIHRvIGRvIG1vcmUgaW50ZWxsaWdlbnQgc2VsZWN0aW9uIG9mCisgKiByYXRlIGZvciBtdWx0aWNhc3QvYnJvYWRjYXN0IGZyYW1lcyBtYXkgY2hvb3NlIHRvIG5vdCB1c2UgdGhpcy4KKyAqCisgKiBAc3RhOiAmc3RydWN0IGllZWU4MDIxMV9zdGEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IGRlc3RpbmF0aW9uLiBOb3RlCisgKiAJdGhhdCB0aGlzIG1heSBiZSBudWxsLgorICogQHByaXZfc3RhOiBwcml2YXRlIHJhdGUgY29udHJvbCBzdHJ1Y3R1cmUuIFRoaXMgbWF5IGJlIG51bGwuCisgKiBAdHhyYzogcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIHdlIHNob2x1ZCBwb3B1bGF0ZSBmb3IgbWFjODAyMTEuCisgKi8KK2Jvb2wgcmF0ZV9jb250cm9sX3NlbmRfbG93KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICB2b2lkICpwcml2X3N0YSwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKTsKKworCiBzdGF0aWMgaW5saW5lIHM4CiByYXRlX2xvd2VzdF9pbmRleChzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQpAQCAtMjEwNiw2ICsyMTkwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUKK2Jvb2wgcmF0ZV91c2FibGVfaW5kZXhfZXhpc3RzKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKQorCQlpZiAocmF0ZV9zdXBwb3J0ZWQoc3RhLCBzYmFuZC0+YmFuZCwgaSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CiAKIGludCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwogdm9pZCBpZWVlODAyMTFfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoc3RydWN0IHJhdGVfY29udHJvbF9vcHMgKm9wcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZWlnaGJvdXIuaCBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCmluZGV4IGQ4ZDc5MGUuLjM4MTdmZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbmV0L25laWdoYm91ci5oCkBAIC0yNCw2ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CiAKIC8qCkBAIC0xMTcsNyArMTE4LDcgQEAKIAlpbnQJCQkoKm91dHB1dCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlhcnBfcXVldWU7CiAJc3RydWN0IHRpbWVyX2xpc3QJdGltZXI7Ci0Jc3RydWN0IG5laWdoX29wcwkqb3BzOworCWNvbnN0IHN0cnVjdCBuZWlnaF9vcHMJKm9wczsKIAl1OAkJCXByaW1hcnlfa2V5WzBdOwogfTsKIApAQCAtMTY3LDcgKzE2OCw3IEBACiAJaW50CQkJZ2NfdGhyZXNoMjsKIAlpbnQJCQlnY190aHJlc2gzOwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfZmx1c2g7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgCWdjX3RpbWVyOworCXN0cnVjdCBkZWxheWVkX3dvcmsJZ2Nfd29yazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAJcHJveHlfdGltZXI7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlwcm94eV9xdWV1ZTsKIAlhdG9taWNfdAkJZW50cmllczsKQEAgLTE3OCw3ICsxNzksNiBAQAogCXN0cnVjdCBuZWlnaGJvdXIJKipoYXNoX2J1Y2tldHM7CiAJdW5zaWduZWQgaW50CQloYXNoX21hc2s7CiAJX191MzIJCQloYXNoX3JuZDsKLQl1bnNpZ25lZCBpbnQJCWhhc2hfY2hhaW5fZ2M7CiAJc3RydWN0IHBuZWlnaF9lbnRyeQkqKnBoYXNoX2J1Y2tldHM7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggZGVkNDM0Yi4uYTEyMDI4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtMjYsNiArMjYsNyBAQAogc3RydWN0IHNvY2s7CiBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjsKIHN0cnVjdCBuZXRfZ2VuZXJpYzsKK3N0cnVjdCBzb2NrOwogCiBzdHJ1Y3QgbmV0IHsKIAlhdG9taWNfdAkJY291bnQ7CQkvKiBUbyBkZWNpZGVkIHdoZW4gdGhlIG5ldHdvcmsKQEAgLTU3LDYgKzU4LDcgQEAKIAlzcGlubG9ja190CQlydWxlc19tb2RfbG9jazsKIAogCXN0cnVjdCBzb2NrIAkJKnJ0bmw7CQkJLyogcnRuZXRsaW5rIHNvY2tldCAqLworCXN0cnVjdCBzb2NrCQkqZ2VubF9zb2NrOwogCiAJc3RydWN0IG5ldG5zX2NvcmUJY29yZTsKIAlzdHJ1Y3QgbmV0bnNfbWliCW1pYjsKQEAgLTc4LDYgKzgwLDkgQEAKICNpZmRlZiBDT05GSUdfWEZSTQogCXN0cnVjdCBuZXRuc194ZnJtCXhmcm07CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJc3RydWN0IHNrX2J1ZmZfaGVhZAl3ZXh0X25sZXZlbnRzOworI2VuZGlmCiAJc3RydWN0IG5ldF9nZW5lcmljCSpnZW47CiB9OwogCkBAIC0xMDYsNiArMTExLDggQEAKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbmV0X25hbWVzcGFjZV9saXN0OwogCitleHRlcm4gc3RydWN0IG5ldCAqZ2V0X25ldF9uc19ieV9waWQocGlkX3QgcGlkKTsKKwogI2lmZGVmIENPTkZJR19ORVRfTlMKIGV4dGVybiB2b2lkIF9fcHV0X25ldChzdHJ1Y3QgbmV0ICpuZXQpOwogCkBAIC0yMDgsNiArMjE1LDkgQEAKICNkZWZpbmUgZm9yX2VhY2hfbmV0KFZBUikJCQkJXAogCWxpc3RfZm9yX2VhY2hfZW50cnkoVkFSLCAmbmV0X25hbWVzcGFjZV9saXN0LCBsaXN0KQogCisjZGVmaW5lIGZvcl9lYWNoX25ldF9yY3UoVkFSKQkJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoVkFSLCAmbmV0X25hbWVzcGFjZV9saXN0LCBsaXN0KQorCiAjaWZkZWYgQ09ORklHX05FVF9OUwogI2RlZmluZSBfX25ldF9pbml0CiAjZGVmaW5lIF9fbmV0X2V4aXQKQEAgLTIyOSwxMyArMjM5LDE1IEBACiAgKiBuZWVkcyBwZXIgbmV0d29yayBuYW1lc3BhY2Ugb3BlcmF0aW9ucyB1c2UgZGV2aWNlIHBlcm5ldCBvcGVyYXRpb25zLAogICogb3RoZXJ3aXNlIHVzZSBwZXJuZXQgc3Vic3lzIG9wZXJhdGlvbnMuCiAgKgotICogVGhpcyBpcyBjcml0aWNhbGx5IGltcG9ydGFudC4gIE1vc3Qgb2YgdGhlIG5ldHdvcmsgY29kZSBjbGVhbnVwCi0gKiBydW5zIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCBkZXZfcmVtb3ZlX3BhY2sgaGFzIGJlZW4gY2FsbGVkIHNvIG5vCi0gKiBuZXcgcGFja2V0cyB3aWxsIGFycml2ZSBkdXJpbmcgYW5kIGFmdGVyIHRoZSBjbGVhbnVwIGZ1bmN0aW9ucyBoYXZlCi0gKiBiZWVuIGNhbGxlZC4gIGRldl9yZW1vdmVfcGFjayBpcyBub3QgcGVyIG5hbWVzcGFjZSBzbyBpbnN0ZWFkIHRoZQotICogZ3VhcmFudGVlIG9mIG5vIG1vcmUgcGFja2V0cyBhcnJpdmluZyBpbiBhIG5ldHdvcmsgbmFtZXNwYWNlIGlzCi0gKiBwcm92aWRlZCBieSBlbnN1cmluZyB0aGF0IGFsbCBuZXR3b3JrIGRldmljZXMgYW5kIGFsbCBzb2NrZXRzIGhhdmUKLSAqIGxlZnQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGJlZm9yZSB0aGUgY2xlYW51cCBtZXRob2RzIGFyZSBjYWxsZWQuCisgKiBOZXR3b3JrIGludGVyZmFjZXMgbmVlZCB0byBiZSByZW1vdmVkIGZyb20gYSBkeWluZyBuZXRucyBfYmVmb3JlXworICogc3Vic3lzIG5vdGlmaWVycyBjYW4gYmUgY2FsbGVkLCBhcyBtb3N0IG9mIHRoZSBuZXR3b3JrIGNvZGUgY2xlYW51cAorICogKHdoaWNoIGlzIGRvbmUgZnJvbSBzdWJzeXMgbm90aWZpZXJzKSBydW5zIHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdAorICogZGV2X3JlbW92ZV9wYWNrIGhhcyBiZWVuIGNhbGxlZCBzbyBubyBuZXcgcGFja2V0cyB3aWxsIGFycml2ZSBkdXJpbmcKKyAqIGFuZCBhZnRlciB0aGUgY2xlYW51cCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGNhbGxlZC4gIGRldl9yZW1vdmVfcGFjaworICogaXMgbm90IHBlciBuYW1lc3BhY2Ugc28gaW5zdGVhZCB0aGUgZ3VhcmFudGVlIG9mIG5vIG1vcmUgcGFja2V0cworICogYXJyaXZpbmcgaW4gYSBuZXR3b3JrIG5hbWVzcGFjZSBpcyBwcm92aWRlZCBieSBlbnN1cmluZyB0aGF0IGFsbAorICogbmV0d29yayBkZXZpY2VzIGFuZCBhbGwgc29ja2V0cyBoYXZlIGxlZnQgdGhlIG5ldHdvcmsgbmFtZXNwYWNlCisgKiBiZWZvcmUgdGhlIGNsZWFudXAgbWV0aG9kcyBhcmUgY2FsbGVkLgogICoKICAqIEZvciB0aGUgbG9uZ2VzdCB0aW1lIHRoZSBpcHY0IGljbXAgY29kZSB3YXMgcmVnaXN0ZXJlZCBhcyBhIHBlcm5ldAogICogZGV2aWNlIHdoaWNoIGNhdXNlZCBrZXJuZWwgb29wcywgYW5kIHBhbmljcyBkdXJpbmcgbmV0d29yawpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAppbmRleCA1ODY4NDA2Li4zMzYwMmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaApAQCAtMzEsNiArMzEsNiBAQAogZXh0ZXJuIGludAogKCpuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXAsCi0JCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKTsKKwkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpOwogCiAjZW5kaWYgLyogX05GX05BVF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaAppbmRleCAwMDdiZGIwLi5hNjNiMjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCkBAIC0zNjUsNyArMzY1LDcgQEAKICAqCiAgKiBTZWUgbmxhX3BhcnNlKCkKICAqLwotc3RhdGljIGlubGluZSBpbnQgbmxtc2dfcGFyc2Uoc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBoZHJsZW4sCitzdGF0aWMgaW5saW5lIGludCBubG1zZ19wYXJzZShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgaW50IGhkcmxlbiwKIAkJCSAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLAogCQkJICAgICAgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKIHsKQEAgLTQxNCw3ICs0MTQsNyBAQAogICoKICAqIFJldHVybnMgMSBpZiBhIHJlcG9ydCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBpcyByZXF1ZXN0ZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5sbXNnX3JlcG9ydChzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3N0YXRpYyBpbmxpbmUgaW50IG5sbXNnX3JlcG9ydChjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKIHsKIAlyZXR1cm4gISEobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0VDSE8pOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oCmluZGV4IGFmYWI0ZTQuLmRmZWIyZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgKQEAgLTYsNiArNiw3IEBACiAKICNpZm5kZWYgX19ORVROU19JUFY2X0hfXwogI2RlZmluZSBfX05FVE5TX0lQVjZfSF9fCisjaW5jbHVkZSA8bmV0L2RzdF9vcHMuaD4KIAogc3RydWN0IGN0bF90YWJsZV9oZWFkZXI7CiAKQEAgLTQyLDcgKzQzLDcgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgICBpcDZfZmliX3RpbWVyOwogCXN0cnVjdCBobGlzdF9oZWFkICAgICAgICpmaWJfdGFibGVfaGFzaDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAgICAgICAqZmliNl9tYWluX3RibDsKLQlzdHJ1Y3QgZHN0X29wcwkJKmlwNl9kc3Rfb3BzOworCXN0cnVjdCBkc3Rfb3BzCQlpcDZfZHN0X29wczsKIAl1bnNpZ25lZCBpbnQJCSBpcDZfcnRfZ2NfZXhwaXJlOwogCXVuc2lnbmVkIGxvbmcJCSBpcDZfcnRfbGFzdF9nYzsKICNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRucy94X3RhYmxlcy5oCmluZGV4IDk1NTRhNjQuLjU5MWRiN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL3hfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMveF90YWJsZXMuaApAQCAtOCw4ICs4LDExIEBACiAKIHN0cnVjdCBuZXRuc194dCB7CiAJc3RydWN0IGxpc3RfaGVhZCB0YWJsZXNbTkZQUk9UT19OVU1QUk9UT107CisjaWYgZGVmaW5lZChDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTX01PRFVMRSkKIAlzdHJ1Y3QgZWJ0X3RhYmxlICpicm91dGVfdGFibGU7CiAJc3RydWN0IGVidF90YWJsZSAqZnJhbWVfZmlsdGVyOwogCXN0cnVjdCBlYnRfdGFibGUgKmZyYW1lX25hdDsKKyNlbmRpZgogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmw4MDIxNTQuaCBiL2luY2x1ZGUvbmV0L25sODAyMTU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkMmJhMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25sODAyMTU0LmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBubDgwMjE1NC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IFNpZW1lbnMgQUcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIElFRUU4MDIxNTRfTkxfSAorI2RlZmluZSBJRUVFODAyMTU0X05MX0gKKworc3RydWN0IG5ldF9kZXZpY2U7CitzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfYXNzb2NfaW5kaWMgLSBOb3RpZnkgdXNlcmxhbmQgb2YgYW4gYXNzb2NpYXRpb24gcmVxdWVzdC4KKyAqIEBkZXY6IFRoZSBuZXR3b3JrIGRldmljZSBvbiB3aGljaCB0aGlzIGFzc29jaWF0aW9uIHJlcXVlc3Qgd2FzCisgKiAgICAgICByZWNlaXZlZC4KKyAqIEBhZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHJlcXVlc3RpbmcgYXNzb2NpYXRpb24uCisgKiBAY2FwOiBUaGUgY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiBmaWVsZCBmcm9tIHRoZSBkZXZpY2UuCisgKgorICogVGhpcyBpbmZvcm1zIGEgdXNlcmxhbmQgY29vcmRpbmF0b3Igb2YgYSBkZXZpY2UgcmVxdWVzdGluZyB0bworICogYXNzb2NpYXRlIHdpdGggdGhlIFBBTiBjb250cm9sbGVkIGJ5IHRoZSBjb29yZGluYXRvci4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4zLjEgb2YgdGhlIElFRUUgODAyLjE1LjQtMjAwNiBkb2N1bWVudC4KKyAqLworaW50IGllZWU4MDIxNTRfbmxfYXNzb2NfaW5kaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkciwgdTggY2FwKTsKKworLyoqCisgKiBpZWVlODAyMTU0X25sX2Fzc29jX2NvbmZpcm0gLSBOb3RpZnkgdXNlcmxhbmQgb2YgYXNzb2NpYXRpb24uCisgKiBAZGV2OiBUaGUgZGV2aWNlIHdoaWNoIGhhcyBjb21wbGV0ZWQgYXNzb2NpYXRpb24uCisgKiBAc2hvcnRfYWRkcjogVGhlIHNob3J0IGFkZHJlc3MgYXNzaWduZWQgdG8gdGhlIGRldmljZS4KKyAqIEBzdGF0dXM6IFRoZSBzdGF0dXMgb2YgdGhlIGFzc29jaWF0aW9uLgorICoKKyAqIEluZm9ybSB1c2VybGFuZCBvZiB0aGUgcmVzdWx0IG9mIGFuIGFzc29jaWF0aW9uIHJlcXVlc3QuIElmIHRoZQorICogYXNzb2NpYXRpb24gcmVxdWVzdCBpbmNsdWRlZCBhc2tpbmcgdGhlIGNvb3JkaW5hdG9yIHRvIGFsbG9jYXRlCisgKiBhIHNob3J0IGFkZHJlc3MgdGhlbiBpdCBpcyByZXR1cm5lZCBpbiBAc2hvcnRfYWRkci4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4zLjIgb2YgdGhlIElFRUUgODAyLjE1LjQgZG9jdW1lbnQuCisgKi8KK2ludCBpZWVlODAyMTU0X25sX2Fzc29jX2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJdTE2IHNob3J0X2FkZHIsIHU4IHN0YXR1cyk7CisKKy8qKgorICogaWVlZTgwMjE1NF9ubF9kaXNhc3NvY19pbmRpYyAtIE5vdGlmeSB1c2VybGFuZCBvZiBkaXNhc3NvY2lhdGlvbi4KKyAqIEBkZXY6IFRoZSBkZXZpY2Ugb24gd2hpY2ggZGlzYXNzb2NpYXRpb24gd2FzIGluZGljYXRlZC4KKyAqIEBhZGRyOiBUaGUgZGV2aWNlIHdoaWNoIGlzIGRpc2Fzc29jaWF0aW5nLgorICogQHJlYXNvbjogVGhlIHJlYXNvbiBmb3IgdGhlIGRpc2Fzc29jaWF0aW9uLgorICoKKyAqIEluZm9ybSB1c2VybGFuZCB0aGF0IGEgZGV2aWNlIGhhcyBkaXNhc3NvY2lhdGVkIGZyb20gdGhlIG5ldHdvcmsuCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuMy4zIG9mIHRoZSBJRUVFIDgwMi4xNS40IGRvY3VtZW50LgorICovCitpbnQgaWVlZTgwMjE1NF9ubF9kaXNhc3NvY19pbmRpYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICphZGRyLCB1OCByZWFzb24pOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfZGlzYXNzb2NfY29uZmlybSAtIE5vdGlmeSB1c2VybGFuZCBvZiBkaXNhc3NvY2lhdGlvbgorICogY29tcGxldGlvbi4KKyAqIEBkZXY6IFRoZSBkZXZpY2Ugb24gd2hpY2ggZGlzYXNzb2NpYXRpb24gd2FzIG9yZGVyZWQuCisgKiBAc3RhdHVzOiBUaGUgcmVzdWx0IG9mIHRoZSBkaXNhc3NvY2lhdGlvbi4KKyAqCisgKiBJbmZvcm0gdXNlcmxhbmQgb2YgdGhlIHJlc3VsdCBvZiByZXF1ZXN0aW5nIHRoYXQgYSBkZXZpY2UKKyAqIGRpc2Fzc29jaWF0ZSwgb3IgdGhlIHJlc3VsdCBvZiByZXF1ZXN0aW5nIHRoYXQgd2UgZGlzYXNzb2NpYXRlIGZyb20KKyAqIGEgUEFOIG1hbmFnZWQgYnkgYW5vdGhlciBjb29yZGluYXRvci4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4xLjQuMyBvZiB0aGUgSUVFRSA4MDIuMTUuNCBkb2N1bWVudC4KKyAqLworaW50IGllZWU4MDIxNTRfbmxfZGlzYXNzb2NfY29uZmlybShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQl1OCBzdGF0dXMpOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfc2Nhbl9jb25maXJtIC0gTm90aWZ5IHVzZXJsYW5kIG9mIGNvbXBsZXRpb24gb2Ygc2Nhbi4KKyAqIEBkZXY6IFRoZSBkZXZpY2Ugd2hpY2ggd2FzIGluc3RydWN0ZWQgdG8gc2Nhbi4KKyAqIEBzdGF0dXM6IFRoZSBzdGF0dXMgb2YgdGhlIHNjYW4gb3BlcmF0aW9uLgorICogQHNjYW5fdHlwZTogV2hhdCB0eXBlIG9mIHNjYW4gd2FzIHBlcmZvcm1lZC4KKyAqIEB1bnNjYW5uZWQ6IEFueSBjaGFubmVscyB0aGF0IHRoZSBkZXZpY2Ugd2FzIHVuYWJsZSB0byBzY2FuLgorICogQGVkbDogVGhlIGVuZXJneSBsZXZlbHMgKGlmIGEgcGFzc2l2ZSBzY2FuKS4KKyAqCisgKgorICogTm90ZTogVGhpcyBpcyBpbiBzZWN0aW9uIDcuMS4xMSBvZiB0aGUgSUVFRSA4MDIuMTUuNCBkb2N1bWVudC4KKyAqIE5vdGU6IFRoaXMgQVBJIGRvZXMgbm90IHBlcm1pdCB0aGUgcmV0dXJuIG9mIGFuIGFjdGl2ZSBzY2FuIHJlc3VsdC4KKyAqLworaW50IGllZWU4MDIxNTRfbmxfc2Nhbl9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXU4IHN0YXR1cywgdTggc2Nhbl90eXBlLCB1MzIgdW5zY2FubmVkLCB1OCBwYWdlLAorCQl1OCAqZWRsLyosIHN0cnVjdCBsaXN0X2hlYWQgKnBhbl9kZXNjX2xpc3QgKi8pOworCisvKioKKyAqIGllZWU4MDIxNTRfbmxfYmVhY29uX2luZGljIC0gTm90aWZ5IHVzZXJsYW5kIG9mIGEgcmVjZWl2ZWQgYmVhY29uLgorICogQGRldjogVGhlIGRldmljZSBvbiB3aGljaCBhIGJlYWNvbiB3YXMgcmVjZWl2ZWQuCisgKiBAcGFuaWQ6IFRoZSBQQU4gb2YgdGhlIGNvb3JkaW5hdG9yLgorICogQGNvb3JkX2FkZHI6IFRoZSBzaG9ydCBhZGRyZXNzIG9mIHRoZSBjb29yZGluYXRvciBvbiB0aGF0IFBBTi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4xLjUgb2YgdGhlIElFRUUgODAyLjE1LjQgZG9jdW1lbnQuCisgKiBOb3RlOiBUaGlzIEFQSSBkb2VzIG5vdCBwcm92aWRlIGV4dGVuZGVkIGluZm9ybWF0aW9uIHN1Y2ggYXMgd2hhdAorICogY2hhbm5lbCB0aGUgUEFOIGlzIG9uIG9yIHdoYXQgdGhlIExRSSBvZiB0aGUgYmVhY29uIGZyYW1lIHdhcyBvbgorICogcmVjZWlwdC4KKyAqIE5vdGU6IFRoaXMgQVBJIGNhbm5vdCBpbmRpY2F0ZSBhIGJlYWNvbiBmcmFtZSBmb3IgYSBjb29yZGluYXRvcgorICogICAgICAgb3BlcmF0aW5nIGluIGxvbmcgYWRkcmVzc2luZyBtb2RlLgorICovCitpbnQgaWVlZTgwMjE1NF9ubF9iZWFjb25faW5kaWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHBhbmlkLAorCQl1MTYgY29vcmRfYWRkcik7CisKKy8qKgorICogaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtIC0gTm90aWZ5IHVzZXJsYW5kIG9mIGNvbXBsZXRpb24gb2Ygc3RhcnQuCisgKiBAZGV2OiBUaGUgZGV2aWNlIHdoaWNoIHdhcyBpbnN0cnVjdGVkIHRvIHNjYW4uCisgKiBAc3RhdHVzOiBUaGUgc3RhdHVzIG9mIHRoZSBzY2FuIG9wZXJhdGlvbi4KKyAqCisgKiBOb3RlOiBUaGlzIGlzIGluIHNlY3Rpb24gNy4xLjE0IG9mIHRoZSBJRUVFIDgwMi4xNS40IGRvY3VtZW50LgorICovCitpbnQgaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHN0YXR1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCmluZGV4IDI5ZDEyNjcuLjQ0YzkyM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKQEAgLTQ5LDQgKzQ5LDYgQEAKIAogI2RlZmluZSBQTl9OT19BRERSCTB4ZmYKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG5fc29ja19zZXFfZm9wczsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDgyYTMxOTEuLmY5MTFlYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC04Nyw2ICs4Nyw5IEBACiBleHRlcm4gdm9pZCBxZGlzY19wdXRfcnRhYihzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqdGFiKTsKIGV4dGVybiB2b2lkIHFkaXNjX3B1dF9zdGFiKHN0cnVjdCBxZGlzY19zaXplX3RhYmxlICp0YWIpOwogZXh0ZXJuIHZvaWQgcWRpc2Nfd2Fybl9ub253YyhjaGFyICp0eHQsIHN0cnVjdCBRZGlzYyAqcWRpc2MpOworZXh0ZXJuIGludCBzY2hfZGlyZWN0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLAorCQkJICAgc3BpbmxvY2tfdCAqcm9vdF9sb2NrKTsKIAogZXh0ZXJuIHZvaWQgX19xZGlzY19ydW4oc3RydWN0IFFkaXNjICpxKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmggYi9pbmNsdWRlL25ldC9ydG5ldGxpbmsuaAppbmRleCAzYzE4OTVlLi5jM2FhMDQ0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmgKQEAgLTE0LDcgKzE0LDcgQEAKIGV4dGVybiBpbnQJcnRubF91bnJlZ2lzdGVyKGludCBwcm90b2NvbCwgaW50IG1zZ3R5cGUpOwogZXh0ZXJuIHZvaWQJcnRubF91bnJlZ2lzdGVyX2FsbChpbnQgcHJvdG9jb2wpOwogCi1zdGF0aWMgaW5saW5lIGludCBydG5sX21zZ19mYW1pbHkoc3RydWN0IG5sbXNnaGRyICpubGgpCitzdGF0aWMgaW5saW5lIGludCBydG5sX21zZ19mYW1pbHkoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgpCiB7CiAJaWYgKG5sbXNnX2xlbihubGgpID49IHNpemVvZihzdHJ1Y3QgcnRnZW5tc2cpKQogCQlyZXR1cm4gKChzdHJ1Y3QgcnRnZW5tc2cgKikgbmxtc2dfZGF0YShubGgpKS0+cnRnZW5fZmFtaWx5OwpAQCAtNzAsNiArNzAsOSBAQAogCXNpemVfdAkJCSgqZ2V0X3hzdGF0c19zaXplKShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAlpbnQJCQkoKmZpbGxfeHN0YXRzKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJaW50CQkJKCpnZXRfdHhfcXVldWVzKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sCisJCQkJCQkgdW5zaWduZWQgaW50ICp0eF9xdWV1ZXMsCisJCQkJCQkgdW5zaWduZWQgaW50ICpyZWFsX3R4X3F1ZXVlcyk7CiB9OwogCiBleHRlcm4gaW50CV9fcnRubF9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggNTQ4MmU5NS4uODhlYjlkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC00NSw2ICs0NSw4IEBACiAjZGVmaW5lIFRDUV9GX0JVSUxUSU4JCTEKICNkZWZpbmUgVENRX0ZfVEhST1RUTEVECQkyCiAjZGVmaW5lIFRDUV9GX0lOR1JFU1MJCTQKKyNkZWZpbmUgVENRX0ZfQ0FOX0JZUEFTUwk4CisjZGVmaW5lIFRDUV9GX01RUk9PVAkJMTYKICNkZWZpbmUgVENRX0ZfV0FSTl9OT05XQwkoMSA8PCAxNikKIAlpbnQJCQlwYWRkZWQ7CiAJc3RydWN0IFFkaXNjX29wcwkqb3BzOwpAQCAtNzksNiArODEsNyBAQAogc3RydWN0IFFkaXNjX2NsYXNzX29wcwogewogCS8qIENoaWxkIHFkaXNjIG1hbmlwdWxhdGlvbiAqLworCXVuc2lnbmVkIGludAkJKCpzZWxlY3RfcXVldWUpKHN0cnVjdCBRZGlzYyAqLCBzdHJ1Y3QgdGNtc2cgKik7CiAJaW50CQkJKCpncmFmdCkoc3RydWN0IFFkaXNjICosIHVuc2lnbmVkIGxvbmcgY2wsCiAJCQkJCXN0cnVjdCBRZGlzYyAqLCBzdHJ1Y3QgUWRpc2MgKiopOwogCXN0cnVjdCBRZGlzYyAqCQkoKmxlYWYpKHN0cnVjdCBRZGlzYyAqLCB1bnNpZ25lZCBsb25nIGNsKTsKQEAgLTEyMSw2ICsxMjQsNyBAQAogCXZvaWQJCQkoKnJlc2V0KShzdHJ1Y3QgUWRpc2MgKik7CiAJdm9pZAkJCSgqZGVzdHJveSkoc3RydWN0IFFkaXNjICopOwogCWludAkJCSgqY2hhbmdlKShzdHJ1Y3QgUWRpc2MgKiwgc3RydWN0IG5sYXR0ciAqYXJnKTsKKwl2b2lkCQkJKCphdHRhY2gpKHN0cnVjdCBRZGlzYyAqKTsKIAogCWludAkJCSgqZHVtcCkoc3RydWN0IFFkaXNjICosIHN0cnVjdCBza19idWZmICopOwogCWludAkJCSgqZHVtcF9zdGF0cykoc3RydWN0IFFkaXNjICosIHN0cnVjdCBnbmV0X2R1bXAgKik7CkBAIC0xODIsNiArMTg2LDExIEBACiAJY2hhcgkJCWRhdGFbXTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3FsZW4oc3RydWN0IFFkaXNjICpxKQoreworCXJldHVybiBxLT5xLnFsZW47Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHFkaXNjX3NrYl9jYiAqcWRpc2Nfc2tiX2NiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgcWRpc2Nfc2tiX2NiICopc2tiLT5jYjsKQEAgLTI0OSw2ICsyNTgsOCBAQAogCiBleHRlcm4gc3RydWN0IFFkaXNjIG5vb3BfcWRpc2M7CiBleHRlcm4gc3RydWN0IFFkaXNjX29wcyBub29wX3FkaXNjX29wczsKK2V4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzOworZXh0ZXJuIHN0cnVjdCBRZGlzY19vcHMgbXFfcWRpc2Nfb3BzOwogCiBzdHJ1Y3QgUWRpc2NfY2xhc3NfY29tbW9uCiB7CkBAIC0yOTYsNiArMzA3LDggQEAKIGV4dGVybiB2b2lkIGRldl9zaHV0ZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRldl9hY3RpdmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGRldl9kZWFjdGl2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBRZGlzYyAqZGV2X2dyYWZ0X3FkaXNjKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKKwkJCQkgICAgIHN0cnVjdCBRZGlzYyAqcWRpc2MpOwogZXh0ZXJuIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYyk7CiBleHRlcm4gdm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpOwogZXh0ZXJuIHZvaWQgcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHN0cnVjdCBRZGlzYyAqcWRpc2MsIHVuc2lnbmVkIGludCBuKTsKQEAgLTM4NywxMyArNDAwLDE4IEBACiAJcmV0dXJuIHFkaXNjX2VucXVldWUoc2tiLCBzY2gpICYgTkVUX1hNSVRfTUFTSzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIF9fcWRpc2NfdXBkYXRlX2JzdGF0cyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzY2gtPmJzdGF0cy5ieXRlcyArPSBsZW47CisJc2NoLT5ic3RhdHMucGFja2V0cysrOworfQorCiBzdGF0aWMgaW5saW5lIGludCBfX3FkaXNjX2VucXVldWVfdGFpbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnNjaCwKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKIHsKIAlfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIHNrYik7CiAJc2NoLT5xc3RhdHMuYmFja2xvZyArPSBxZGlzY19wa3RfbGVuKHNrYik7Ci0Jc2NoLT5ic3RhdHMuYnl0ZXMgKz0gcWRpc2NfcGt0X2xlbihza2IpOwotCXNjaC0+YnN0YXRzLnBhY2tldHMrKzsKKwlfX3FkaXNjX3VwZGF0ZV9ic3RhdHMoc2NoLCBxZGlzY19wa3RfbGVuKHNrYikpOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY20uaCBiL2luY2x1ZGUvbmV0L3NjbS5oCmluZGV4IGY0NWJiNmUuLmNmNDhjODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjbS5oCisrKyBiL2luY2x1ZGUvbmV0L3NjbS5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksKIAl1MzIJCQlzZWNpZDsJCS8qIFBhc3NlZCBzZWN1cml0eSBJRCAJKi8KICNlbmRpZgotCXVuc2lnbmVkIGxvbmcJCXNlcTsJCS8qIENvbm5lY3Rpb24gc2Vxbm8JKi8KIH07CiAKIGV4dGVybiB2b2lkIHNjbV9kZXRhY2hfZmRzKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSk7CkBAIC01OSw3ICs1OCw2IEBACiAJc2NtLT5jcmVkcy5naWQgPSBjdXJyZW50X2dpZCgpOwogCXNjbS0+Y3JlZHMucGlkID0gdGFza190Z2lkX3ZucihwKTsKIAlzY20tPmZwID0gTlVMTDsKLQlzY20tPnNlcSA9IDA7CiAJdW5peF9nZXRfcGVlcnNlY19kZ3JhbShzb2NrLCBzY20pOwogCWlmIChtc2ctPm1zZ19jb250cm9sbGVuIDw9IDApCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb21tYW5kLmggYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAppbmRleCAzYjk2NjgwLi44YmU1MTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaApAQCAtMTA2LDYgKzEwNiw3IEBACiAJU0NUUF9DTURfQVNTT0NfU0hLRVksICAgIC8qIGdlbmVyYXRlIHRoZSBhc3NvY2lhdGlvbiBzaGFyZWQga2V5cyAqLwogCVNDVFBfQ01EX1QxX1JFVFJBTiwJIC8qIE1hcmsgZm9yIHJldHJhbnNtaXNzaW9uIGFmdGVyIFQxIHRpbWVvdXQgICovCiAJU0NUUF9DTURfVVBEQVRFX0lOSVRUQUcsIC8qIFVwZGF0ZSBwZWVyIGluaXR0YWcgKi8KKwlTQ1RQX0NNRF9TRU5EX01TRywJIC8qIFNlbmQgdGhlIHdob2xlIHVzZSBtZXNzYWdlICovCiAJU0NUUF9DTURfTEFTVAogfSBzY3RwX3ZlcmJfdDsKIApAQCAtMTM5LDYgKzE0MCw3IEBACiAJc3RydWN0IHNjdHBfdWxwZXZlbnQgKnVscGV2ZW50OwogCXN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0OwogCXNjdHBfc2Fja2hkcl90ICpzYWNraDsKKwlzdHJ1Y3Qgc2N0cF9kYXRhbXNnICptc2c7CiB9IHNjdHBfYXJnX3Q7CiAKIC8qIFdlIGFyZSBzaW11bGF0aW5nIE1MIHR5cGUgY29uc3RydWN0b3JzIGhlcmUuCkBAIC0xODgsNiArMTkwLDcgQEAKIFNDVFBfQVJHX0NPTlNUUlVDVE9SKFVMUEVWRU5ULCAgc3RydWN0IHNjdHBfdWxwZXZlbnQgKiwgdWxwZXZlbnQpCiBTQ1RQX0FSR19DT05TVFJVQ1RPUihQQUNLRVQsCXN0cnVjdCBzY3RwX3BhY2tldCAqLCBwYWNrZXQpCiBTQ1RQX0FSR19DT05TVFJVQ1RPUihTQUNLSCwJc2N0cF9zYWNraGRyX3QgKiwgc2Fja2gpCitTQ1RQX0FSR19DT05TVFJVQ1RPUihEQVRBTVNHLAlzdHJ1Y3Qgc2N0cF9kYXRhbXNnICosIG1zZykKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXNjdHBfYXJnX3Qgb2JqOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKaW5kZXggYjA1YjA1NS4uNThmNzE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oCkBAIC0yMzEsNyArMjMxLDcgQEAKIAlTQ1RQX1NTX0xJU1RFTklORyAgICAgID0gVENQX0xJU1RFTiwKIAlTQ1RQX1NTX0VTVEFCTElTSElORyAgID0gVENQX1NZTl9TRU5ULAogCVNDVFBfU1NfRVNUQUJMSVNIRUQgICAgPSBUQ1BfRVNUQUJMSVNIRUQsCi0JU0NUUF9TU19ESVNDT05ORUNUSU5HICA9IFRDUF9DTE9TSU5HLAorCVNDVFBfU1NfQ0xPU0lORyAgICAgICAgPSBUQ1BfQ0xPU0lORywKIH0gc2N0cF9zb2NrX3N0YXRlX3Q7CiAKIC8qIFRoZXNlIGZ1bmN0aW9ucyBtYXAgdmFyaW91cyB0eXBlIHRvIHByaW50YWJsZSBuYW1lcy4gICovCkBAIC0yNDEsNyArMjQxLDkgQEAKIGNvbnN0IGNoYXIgKnNjdHBfcG5hbWUoY29uc3Qgc2N0cF9zdWJ0eXBlX3QpOwkvKiBwcmltaXRpdmVzICovCiAKIC8qIFRoaXMgaXMgYSB0YWJsZSBvZiBwcmludGFibGUgbmFtZXMgb2Ygc2N0cF9zdGF0ZV90J3MuICAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgKnNjdHBfc3RhdGVfdGJsW10sICpzY3RwX2V2dHR5cGVfdGJsW10sICpzY3RwX3N0YXR1c190YmxbXTsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBzY3RwX3N0YXRlX3RibFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHNjdHBfZXZ0dHlwZV90YmxbXTsKK2V4dGVybiBjb25zdCBjaGFyICpjb25zdCBzY3RwX3N0YXR1c190YmxbXTsKIAogLyogTWF4aW11bSBjaHVuayBsZW5ndGggY29uc2lkZXJpbmcgcGFkZGluZyByZXF1aXJlbWVudHMuICovCiBlbnVtIHsgU0NUUF9NQVhfQ0hVTktfTEVOID0gKCgxPDwxNikgLSBzaXplb2YoX191MzIpKSB9OwpAQCAtMzYxLDYgKzM2MywxMyBAQAogCVNDVFBfU0NPUEVfVU5VU0FCTEUsCQkvKiBJUHY0IHVudXNhYmxlIGFkZHJlc3NlcyAqLwogfSBzY3RwX3Njb3BlX3Q7CiAKK3R5cGVkZWYgZW51bSB7CisJU0NUUF9TQ09QRV9QT0xJQ1lfRElTQUJMRSwJLyogRGlzYWJsZSBJUHY0IGFkZHJlc3Mgc2NvcGluZyAqLworCVNDVFBfU0NPUEVfUE9MSUNZX0VOQUJMRSwJLyogRW5hYmxlIElQdjQgYWRkcmVzcyBzY29waW5nICovCisJU0NUUF9TQ09QRV9QT0xJQ1lfUFJJVkFURSwJLyogRm9sbG93IGRyYWZ0IGJ1dCBhbGxvdyBJUHY0IHByaXZhdGUgYWRkcmVzc2VzICovCisJU0NUUF9TQ09QRV9QT0xJQ1lfTElOSywJCS8qIEZvbGxvdyBkcmFmdCBidXQgYWxsb3cgSVB2NCBsaW5rIGxvY2FsIGFkZHJlc3NlcyAqLworfSBzY3RwX3Njb3BlX3BvbGljeV90OworCiAvKiBCYXNlZCBvbiBJUHY0IHNjb3BpbmcgPGRyYWZ0LXN0ZXdhcnQtdHN2d2ctc2N0cC1pcHY0LTAwLnR4dD4sCiAgKiBTQ1RQIElQdjQgdW51c2FibGUgYWRkcmVzc2VzOiAwLjAuMC4wLzgsIDIyNC4wLjAuMC80LCAxOTguMTguMC4wLzI0LAogICogMTkyLjg4Ljk5LjAvMjQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IGQxNmEzMDQuLjhhNmQ1MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC00ODYsMTUgKzQ4NiwxNiBAQAogfQogCiAvKiBCcmVhayBkb3duIGRhdGEgY2h1bmtzIGF0IHRoaXMgcG9pbnQuICAqLwotc3RhdGljIGlubGluZSBpbnQgc2N0cF9mcmFnX3BvaW50KGNvbnN0IHN0cnVjdCBzY3RwX3NvY2sgKnNwLCBpbnQgcG10dSkKK3N0YXRpYyBpbmxpbmUgaW50IHNjdHBfZnJhZ19wb2ludChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgaW50IHBtdHUpCiB7CisJc3RydWN0IHNjdHBfc29jayAqc3AgPSBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spOwogCWludCBmcmFnID0gcG10dTsKIAogCWZyYWcgLT0gc3AtPnBmLT5hZi0+bmV0X2hlYWRlcl9sZW47CiAJZnJhZyAtPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspOwogCi0JaWYgKHNwLT51c2VyX2ZyYWcpCi0JCWZyYWcgPSBtaW5fdChpbnQsIGZyYWcsIHNwLT51c2VyX2ZyYWcpOworCWlmIChhc29jLT51c2VyX2ZyYWcpCisJCWZyYWcgPSBtaW5fdChpbnQsIGZyYWcsIGFzb2MtPnVzZXJfZnJhZyk7CiAKIAlmcmFnID0gbWluX3QoaW50LCBmcmFnLCBTQ1RQX01BWF9DSFVOS19MRU4pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IGVkZmNhY2YuLjQyZDAwY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0yMTksNiArMjE5LDE1IEBACiAJLyogRmxhZyB0byBpZGljYXRlIGlmIFNDVFAtQVVUSCBpcyBlbmFibGVkICovCiAJaW50IGF1dGhfZW5hYmxlOwogCisJLyoKKwkgKiBQb2xpY3kgdG8gY29udHJvbCBTQ1RQIElQdjQgYWRkcmVzcyBzY29waW5nCisJICogMCAgIC0gRGlzYWJsZSBJUHY0IGFkZHJlc3Mgc2NvcGluZworCSAqIDEgICAtIEVuYWJsZSBJUHY0IGFkZHJlc3Mgc2NvcGluZworCSAqIDIgICAtIFNlbGVjdGl2ZWx5IGFsbG93IG9ubHkgSVB2NCBwcml2YXRlIGFkZHJlc3NlcworCSAqIDMgICAtIFNlbGVjdGl2ZWx5IGFsbG93IG9ubHkgSVB2NCBsaW5rIGxvY2FsIGFkZHJlc3MKKwkgKi8KKwlpbnQgaXB2NF9zY29wZV9wb2xpY3k7CisKIAkvKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgY29tcHV0aW5nIGFuZCB2ZXJpZnlpbmcgY2hlY2tzdW0KIAkgKiBpcyBkaXNhYmxlZC4gKi8KICAgICAgICAgaW50IGNoZWNrc3VtX2Rpc2FibGU7CkBAIC0yNTIsNiArMjYxLDcgQEAKICNkZWZpbmUgc2N0cF9wb3J0X2hhc2h0YWJsZQkJKHNjdHBfZ2xvYmFscy5wb3J0X2hhc2h0YWJsZSkKICNkZWZpbmUgc2N0cF9sb2NhbF9hZGRyX2xpc3QJCShzY3RwX2dsb2JhbHMubG9jYWxfYWRkcl9saXN0KQogI2RlZmluZSBzY3RwX2xvY2FsX2FkZHJfbG9jawkJKHNjdHBfZ2xvYmFscy5hZGRyX2xpc3RfbG9jaykKKyNkZWZpbmUgc2N0cF9zY29wZV9wb2xpY3kJCShzY3RwX2dsb2JhbHMuaXB2NF9zY29wZV9wb2xpY3kpCiAjZGVmaW5lIHNjdHBfYWRkaXBfZW5hYmxlCQkoc2N0cF9nbG9iYWxzLmFkZGlwX2VuYWJsZSkKICNkZWZpbmUgc2N0cF9hZGRpcF9ub2F1dGgJCShzY3RwX2dsb2JhbHMuYWRkaXBfbm9hdXRoX2VuYWJsZSkKICNkZWZpbmUgc2N0cF9wcnNjdHBfZW5hYmxlCQkoc2N0cF9nbG9iYWxzLnByc2N0cF9lbmFibGUpCkBAIC02MjgsNyArNjM4LDcgQEAKIAkvKiBDaHVua3Mgd2FpdGluZyB0byBiZSBzdWJtaXR0ZWQgdG8gbG93ZXIgbGF5ZXIuICovCiAJc3RydWN0IGxpc3RfaGVhZCBjaHVua3M7CiAJLyogQ2h1bmtzIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLiAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdHJhY2s7CisJc2l6ZV90IG1zZ19zaXplOwogCS8qIFJlZmVyZW5jZSBjb3VudGluZy4gKi8KIAlhdG9taWNfdCByZWZjbnQ7CiAJLyogV2hlbiBpcyB0aGlzIG1lc3NhZ2Ugbm8gbG9uZ2VyIGludGVyZXN0aW5nIHRvIHRoZSBwZWVyPyAqLwpAQCAtNjQzLDYgKzY1Myw3IEBACiBzdHJ1Y3Qgc2N0cF9kYXRhbXNnICpzY3RwX2RhdGFtc2dfZnJvbV91c2VyKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCiAJCQkJCSAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosCiAJCQkJCSAgICBzdHJ1Y3QgbXNnaGRyICosIGludCBsZW4pOwordm9pZCBzY3RwX2RhdGFtc2dfZnJlZShzdHJ1Y3Qgc2N0cF9kYXRhbXNnICopOwogdm9pZCBzY3RwX2RhdGFtc2dfcHV0KHN0cnVjdCBzY3RwX2RhdGFtc2cgKik7CiB2b2lkIHNjdHBfY2h1bmtfZmFpbChzdHJ1Y3Qgc2N0cF9jaHVuayAqLCBpbnQgZXJyb3IpOwogaW50IHNjdHBfY2h1bmtfYWJhbmRvbmVkKHN0cnVjdCBzY3RwX2NodW5rICopOwpAQCAtODExLDIyICs4MjIsMTIgQEAKIAkvKiBwb2ludGVyIHRvIHRoZSBhdXRoIGNodW5rIGZvciB0aGlzIHBhY2tldCAqLwogCXN0cnVjdCBzY3RwX2NodW5rICphdXRoOwogCi0JLyogVGhpcyBwYWNrZXQgY29udGFpbnMgYSBDT09LSUUtRUNITyBjaHVuay4gKi8KLQlfX3U4IGhhc19jb29raWVfZWNobzsKLQotCS8qIFRoaXMgcGFja2V0IGNvbnRhaW5zIGEgU0FDSyBjaHVuay4gKi8KLQlfX3U4IGhhc19zYWNrOwotCi0JLyogVGhpcyBwYWNrZXQgY29udGFpbnMgYW4gQVVUSCBjaHVuayAqLwotCV9fdTggaGFzX2F1dGg7Ci0KLQkvKiBUaGlzIHBhY2tldCBjb250YWlucyBhdCBsZWFzdCAxIERBVEEgY2h1bmsgKi8KLQlfX3U4IGhhc19kYXRhOwotCi0JLyogU0NUUCBjYW5ub3QgZnJhZ21lbnQgdGhpcyBwYWNrZXQuIFNvIGxldCBpcCBmcmFnbWVudCBpdC4gKi8KLQlfX3U4IGlwZnJhZ29rOwotCi0JX191OCBtYWxsb2NlZDsKKwl1OCAgaGFzX2Nvb2tpZV9lY2hvOjEsCS8qIFRoaXMgcGFja2V0IGNvbnRhaW5zIGEgQ09PS0lFLUVDSE8gY2h1bmsuICovCisJICAgIGhhc19zYWNrOjEsCQkvKiBUaGlzIHBhY2tldCBjb250YWlucyBhIFNBQ0sgY2h1bmsuICovCisJICAgIGhhc19hdXRoOjEsCQkvKiBUaGlzIHBhY2tldCBjb250YWlucyBhbiBBVVRIIGNodW5rICovCisJICAgIGhhc19kYXRhOjEsCQkvKiBUaGlzIHBhY2tldCBjb250YWlucyBhdCBsZWFzdCAxIERBVEEgY2h1bmsgKi8KKwkgICAgaXBmcmFnb2s6MSwJCS8qIFNvIGxldCBpcCBmcmFnbWVudCB0aGlzIHBhY2tldCAqLworCSAgICBtYWxsb2NlZDoxOwkJLyogSXMgaXQgbWFsbG9jZWQ/ICovCiB9OwogCiBzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnNjdHBfcGFja2V0X2luaXQoc3RydWN0IHNjdHBfcGFja2V0ICosCkBAIC0xNTY3LDEzICsxNTY4LDEzIEBACiAJCV9fdTMyCXNhY2tfY250OwogCiAJCS8qIFRoZXNlIGFyZSBjYXBhYmlsaXRpZXMgd2hpY2ggb3VyIHBlZXIgYWR2ZXJ0aXNlZC4gICovCi0JCV9fdTgJZWNuX2NhcGFibGU7CSAvKiBDYW4gcGVlciBkbyBFQ04/ICovCi0JCV9fdTgJaXB2NF9hZGRyZXNzOwkgLyogUGVlciB1bmRlcnN0YW5kcyBJUHY0IGFkZHJlc3Nlcz8gKi8KLQkJX191OAlpcHY2X2FkZHJlc3M7CSAvKiBQZWVyIHVuZGVyc3RhbmRzIElQdjYgYWRkcmVzc2VzPyAqLwotCQlfX3U4CWhvc3RuYW1lX2FkZHJlc3M7LyogUGVlciB1bmRlcnN0YW5kcyBETlMgYWRkcmVzc2VzPyAqLwotCQlfX3U4ICAgIGFzY29uZl9jYXBhYmxlOyAgLyogRG9lcyBwZWVyIHN1cHBvcnQgQURESVA/ICovCi0JCV9fdTggICAgcHJzY3RwX2NhcGFibGU7ICAvKiBDYW4gcGVlciBkbyBQUi1TQ1RQPyAqLwotCQlfX3U4CWF1dGhfY2FwYWJsZTsJIC8qIElzIHBlZXIgZG9pbmcgU0NUUC1BVVRIPyAqLworCQlfX3U4CWVjbl9jYXBhYmxlOjEsCSAgICAvKiBDYW4gcGVlciBkbyBFQ04/ICovCisJCQlpcHY0X2FkZHJlc3M6MSwJICAgIC8qIFBlZXIgdW5kZXJzdGFuZHMgSVB2NCBhZGRyZXNzZXM/ICovCisJCQlpcHY2X2FkZHJlc3M6MSwJICAgIC8qIFBlZXIgdW5kZXJzdGFuZHMgSVB2NiBhZGRyZXNzZXM/ICovCisJCQlob3N0bmFtZV9hZGRyZXNzOjEsIC8qIFBlZXIgdW5kZXJzdGFuZHMgRE5TIGFkZHJlc3Nlcz8gKi8KKwkJCWFzY29uZl9jYXBhYmxlOjEsICAgLyogRG9lcyBwZWVyIHN1cHBvcnQgQURESVA/ICovCisJCQlwcnNjdHBfY2FwYWJsZToxLCAgIC8qIENhbiBwZWVyIGRvIFBSLVNDVFA/ICovCisJCQlhdXRoX2NhcGFibGU6MTsJICAgIC8qIElzIHBlZXIgZG9pbmcgU0NUUC1BVVRIPyAqLwogCiAJCV9fdTMyICAgYWRhcHRhdGlvbl9pbmQ7CSAvKiBBZGFwdGF0aW9uIENvZGUgcG9pbnQuICovCiAKQEAgLTE3MzgsNiArMTczOSwxMiBAQAogCSAqLwogCV9fdTMyIHJ3bmRfb3ZlcjsKIAorCS8qIEtlZXBzIHRyZWFjayBvZiByd25kIHByZXNzdXJlLiAgVGhpcyBoYXBwZW5zIHdoZW4gd2UgaGF2ZQorCSAqIGEgd2luZG93LCBidXQgbm90IHJlY2V2aWUgYnVmZmVyIChpLmUgc21hbGwgcGFja2V0cykuICBUaGlzIG9uZQorCSAqIGlzIHJlbGVhc2VzIHNsb3dseSAoMSBQTVRVIGF0IGEgdGltZSApLgorCSAqLworCV9fdTMyIHJ3bmRfcHJlc3M7CisKIAkvKiBUaGlzIGlzIHRoZSBzbmRidWYgc2l6ZSBpbiB1c2UgZm9yIHRoZSBhc3NvY2lhdGlvbi4KIAkgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBzbmRidWYgc2l6ZSBmb3IgdGhlIGFzc29jaWF0aW9uLAogCSAqIGFzIHNwZWNpZmllZCBpbiB0aGUgc2stPnNuZGJ1Zi4KQEAgLTE3NTYsNiArMTc2Myw3IEBACiAKIAkvKiBUaGUgbWVzc2FnZSBzaXplIGF0IHdoaWNoIFNDVFAgZnJhZ21lbnRhdGlvbiB3aWxsIG9jY3VyLiAqLwogCV9fdTMyIGZyYWdfcG9pbnQ7CisJX191MzIgdXNlcl9mcmFnOwogCiAJLyogQ291bnRlciB1c2VkIHRvIGNvdW50IElOSVQgZXJyb3JzLiAqLwogCWludCBpbml0X2Vycl9jb3VudGVyOwpAQCAtMTkwNSwxMSArMTkxMyw4IEBACiAKIAlfX3UxNiBhY3RpdmVfa2V5X2lkOwogCi0JLyogTmVlZCB0byBzZW5kIGFuIEVDTkUgQ2h1bms/ICovCi0JY2hhciBuZWVkX2VjbmU7Ci0KLQkvKiBJcyBpdCBhIHRlbXBvcmFyeSBhc3NvY2lhdGlvbj8gKi8KLQljaGFyIHRlbXA7CisJX191OCBuZWVkX2VjbmU6MSwJLyogTmVlZCB0byBzZW5kIGFuIEVDTkUgQ2h1bms/ICovCisJICAgICB0ZW1wOjE7CQkvKiBJcyBpdCBhIHRlbXBvcmFyeSBhc3NvY2lhdGlvbj8gKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC91c2VyLmggYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAppbmRleCAxNTgwYzA0Li5iZTIzMzRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3VzZXIuaApAQCAtMjEwLDEyICsyMTAsNiBAQAogfTsKIAogCi10eXBlZGVmIHVuaW9uIHsKLQlfX3U4ICAgCQkJcmF3OwotCXN0cnVjdCBzY3RwX2luaXRtc2cJaW5pdDsKLQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvCXNuZHJjdjsKLX0gc2N0cF9jbXNnX2RhdGFfdDsKLQogLyogVGhlc2UgYXJlIGNtc2dfdHlwZXMuICAqLwogdHlwZWRlZiBlbnVtIHNjdHBfY21zZ190eXBlIHsKIAlTQ1RQX0lOSVQsICAgICAgICAgICAgICAvKiA1LjIuMSBTQ1RQIEluaXRpYXRpb24gU3RydWN0dXJlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDg4YWY4NDMuLmI3MWE0NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC00NjksNiArNDY5LDcgQEAKIAkJCQkgICAgICBpbnQgbm9uYWdsZSk7CiBleHRlcm4gaW50IHRjcF9tYXlfc2VuZF9ub3coc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiBpbnQgdGNwX3JldHJhbnNtaXRfc2tiKHN0cnVjdCBzb2NrICosIHN0cnVjdCBza19idWZmICopOworZXh0ZXJuIHZvaWQgdGNwX3JldHJhbnNtaXRfdGltZXIoc3RydWN0IHNvY2sgKnNrKTsKIGV4dGVybiB2b2lkIHRjcF94bWl0X3JldHJhbnNtaXRfcXVldWUoc3RydWN0IHNvY2sgKik7CiBleHRlcm4gdm9pZCB0Y3Bfc2ltcGxlX3JldHJhbnNtaXQoc3RydWN0IHNvY2sgKik7CiBleHRlcm4gaW50IHRjcF90cmltX2hlYWQoc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKiwgdTMyKTsKQEAgLTUyMSw2ICs1MjIsMTcgQEAKIGV4dGVybiBpbnQgdGNwX21zc190b19tdHUoc3RydWN0IHNvY2sgKnNrLCBpbnQgbXNzKTsKIGV4dGVybiB2b2lkIHRjcF9tdHVwX2luaXQoc3RydWN0IHNvY2sgKnNrKTsKIAorc3RhdGljIGlubGluZSB2b2lkIHRjcF9ib3VuZF9ydG8oY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChpbmV0X2NzayhzayktPmljc2tfcnRvID4gVENQX1JUT19NQVgpCisJCWluZXRfY3NrKHNrKS0+aWNza19ydG8gPSBUQ1BfUlRPX01BWDsKK30KKworc3RhdGljIGlubGluZSB1MzIgX190Y3Bfc2V0X3J0byhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXJldHVybiAodHAtPnNydHQgPj4gMykgKyB0cC0+cnR0dmFyOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX190Y3BfZmFzdF9wYXRoX29uKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzbmRfd25kKQogewogCXRwLT5wcmVkX2ZsYWdzID0gaHRvbmwoKHRwLT50Y3BfaGVhZGVyX2xlbiA8PCAyNikgfApAQCAtMTAwNyw2ICsxMDE5LDExIEBACiAJcmV0dXJuIHRwLT5rZWVwYWxpdmVfdGltZSA/IDogc3lzY3RsX3RjcF9rZWVwYWxpdmVfdGltZTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQga2VlcGFsaXZlX3Byb2Jlcyhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCXJldHVybiB0cC0+a2VlcGFsaXZlX3Byb2JlcyA/IDogc3lzY3RsX3RjcF9rZWVwYWxpdmVfcHJvYmVzOworfQorCiBzdGF0aWMgaW5saW5lIGludCB0Y3BfZmluX3RpbWUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCWludCBmaW5fdGltZW91dCA9IHRjcF9zayhzayktPmxpbmdlcjIgPyA6IHN5c2N0bF90Y3BfZmluX3RpbWVvdXQ7CkBAIC0xMTY5LDcgKzExODYsNyBAQAogI2RlZmluZSB0Y3BfdHdza19tZDVfa2V5KHR3c2spCU5VTEwKICNlbmRpZgogCi1leHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfcG9vbAkqKnRjcF9hbGxvY19tZDVzaWdfcG9vbCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sCSoqdGNwX2FsbG9jX21kNXNpZ19wb29sKHN0cnVjdCBzb2NrICopOwogZXh0ZXJuIHZvaWQJCQl0Y3BfZnJlZV9tZDVzaWdfcG9vbCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wJKl9fdGNwX2dldF9tZDVzaWdfcG9vbChpbnQgY3B1KTsKQEAgLTEyMzUsNiArMTI1MiwyOSBAQAogI2RlZmluZSB0Y3BfZm9yX3dyaXRlX3F1ZXVlX2Zyb21fc2FmZShza2IsIHRtcCwgc2spCQkJXAogCXNrYl9xdWV1ZV93YWxrX2Zyb21fc2FmZSgmKHNrKS0+c2tfd3JpdGVfcXVldWUsIHNrYiwgdG1wKQogCisvKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSAidGltZW91dCIgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgdGltZW91dCBvZiBhCisgKiBUQ1AgY29ubmVjdGlvbiBhZnRlciAiYm91bmRhcnkiIHVuc3VjZXNzZnVsLCBleHBvbmVudGlhbGx5IGJhY2tlZC1vZmYKKyAqIHJldHJhbnNtaXNzaW9ucyB3aXRoIGFuIGluaXRpYWwgUlRPIG9mIFRDUF9SVE9fTUlOLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcmV0cmFuc21pdHNfdGltZWRfb3V0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJIHVuc2lnbmVkIGludCBib3VuZGFyeSkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dCwgbGluZWFyX2JhY2tvZmZfdGhyZXNoOworCisJaWYgKCFpbmV0X2NzayhzayktPmljc2tfcmV0cmFuc21pdHMpCisJCXJldHVybiBmYWxzZTsKKworCWxpbmVhcl9iYWNrb2ZmX3RocmVzaCA9IGlsb2cyKFRDUF9SVE9fTUFYL1RDUF9SVE9fTUlOKTsKKworCWlmIChib3VuZGFyeSA8PSBsaW5lYXJfYmFja29mZl90aHJlc2gpCisJCXRpbWVvdXQgPSAoKDIgPDwgYm91bmRhcnkpIC0gMSkgKiBUQ1BfUlRPX01JTjsKKwllbHNlCisJCXRpbWVvdXQgPSAoKDIgPDwgbGluZWFyX2JhY2tvZmZfdGhyZXNoKSAtIDEpICogVENQX1JUT19NSU4gKworCQkJICAoYm91bmRhcnkgLSBsaW5lYXJfYmFja29mZl90aHJlc2gpICogVENQX1JUT19NQVg7CisKKwlyZXR1cm4gKHRjcF90aW1lX3N0YW1wIC0gdGNwX3NrKHNrKS0+cmV0cmFuc19zdGFtcCkgPj0gdGltZW91dDsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGNwX3NlbmRfaGVhZChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIHNrLT5za19zZW5kX2hlYWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaCBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCmluZGV4IGJmYjI0MGMuLmQ2NTM4MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCisrKyBiL2luY2x1ZGUvbmV0L3RyYW5zcF92Ni5oCkBAIC01MSw3ICs1MSw3IEBACiAvKgogICoJYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWMgZnVuY3Rpb25zCiAgKi8KLWV4dGVybiBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWM7CitleHRlcm4gY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY0X3NwZWNpZmljOwogCiBleHRlcm4gdm9pZCBpbmV0Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwLmggYi9pbmNsdWRlL25ldC91ZHAuaAppbmRleCA5MGU2Y2U1Li41ZmIwMjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC91ZHAuaAorKysgYi9pbmNsdWRlL25ldC91ZHAuaApAQCAtMjA3LDQgKzIwNyw3IEBACiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQgdWRwX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgdWRwNF91Zm9fc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqdWRwNF91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZlYXR1cmVzKTsKICNlbmRpZgkvKiBfVURQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3dwYW4tcGh5LmggYi9pbmNsdWRlL25ldC93cGFuLXBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0N2IxZTIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC93cGFuLXBoeS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgU2llbWVucyBBRworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogV3JpdHRlbiBieToKKyAqIERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KKyAqLworCisjaWZuZGVmIFdQQU5fUEhZX0gKKyNkZWZpbmUgV1BBTl9QSFlfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworc3RydWN0IHdwYW5fcGh5IHsKKwlzdHJ1Y3QgbXV0ZXggcGliX2xvY2s7CisKKwkvKgorCSAqIFRoaXMgaXMgYSBQSUIgYWNvcmRpbmcgdG8gODAyLjE1LjQtMjAwNi4KKwkgKiBXZSBkbyBub3QgcHJvdmlkZSB0aW1pbmctcmVsYXRlZCB2YXJpYWJsZXMsIGFzIHRoZXkKKwkgKiBhcmVuJ3QgdXNlZCBvdXRzaWRlIG9mIGRyaXZlcgorCSAqLworCXU4IGN1cnJlbnRfY2hhbm5lbDsKKwl1OCBjdXJyZW50X3BhZ2U7CisJdTMyIGNoYW5uZWxzX3N1cHBvcnRlZDsKKwl1OCB0cmFuc21pdF9wb3dlcjsKKwl1OCBjY2FfbW9kZTsKKworCXN0cnVjdCBkZXZpY2UgZGV2OworCWludCBpZHg7CisKKwljaGFyIHByaXZbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oTkVUREVWX0FMSUdOKSkpOworfTsKKworc3RydWN0IHdwYW5fcGh5ICp3cGFuX3BoeV9hbGxvYyhzaXplX3QgcHJpdl9zaXplKTsKK2ludCB3cGFuX3BoeV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCB3cGFuX3BoeSAqcGh5KTsKK3ZvaWQgd3Bhbl9waHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSk7Cit2b2lkIHdwYW5fcGh5X2ZyZWUoc3RydWN0IHdwYW5fcGh5ICpwaHkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKndwYW5fcGh5X3ByaXYoc3RydWN0IHdwYW5fcGh5ICpwaHkpCit7CisJQlVHX09OKCFwaHkpOworCXJldHVybiAmcGh5LT5wcml2OworfQorCitzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2ZpbmQoY29uc3QgY2hhciAqc3RyKTsKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqd3Bhbl9waHlfbmFtZShzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSkKK3sKKwlyZXR1cm4gZGV2X25hbWUoJnBoeS0+ZGV2KTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDllM2EzZjQuLjIyM2U5MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTEyODAsNyArMTI4MCw3IEBACiB9OwogCiBleHRlcm4gdm9pZCB4ZnJtX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCB4ZnJtNF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgeGZybTRfaW5pdChpbnQgcnRfaGFzaF9zaXplKTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CiBleHRlcm4gdm9pZCB4ZnJtX3N0YXRlX2Zpbmkoc3RydWN0IG5ldCAqbmV0KTsKIGV4dGVybiB2b2lkIHhmcm00X3N0YXRlX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvZmMvZmNfZ3MuaCBiL2luY2x1ZGUvc2NzaS9mYy9mY19ncy5oCmluZGV4IGZmYWIwMjcuLjMyNGRkMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mYy9mY19ncy5oCisrKyBiL2luY2x1ZGUvc2NzaS9mYy9mY19ncy5oCkBAIC04Nyw2ICs4Nyw3IEBACiAJRkNfRlNfRVhQX1BOQU0gPQkweDAyLAkvKiBwb3J0IG5hbWUgbm90IHJlZ2lzdGVyZWQgKi8KIAlGQ19GU19FWFBfTk5BTSA9CTB4MDMsCS8qIG5vZGUgbmFtZSBub3QgcmVnaXN0ZXJlZCAqLwogCUZDX0ZTX0VYUF9DT1MgPQkJMHgwNCwJLyogY2xhc3Mgb2Ygc2VydmljZSBub3QgcmVnaXN0ZXJlZCAqLworCUZDX0ZTX0VYUF9GVE5SID0JMHgwNywJLyogRkMtNCB0eXBlcyBub3QgcmVnaXN0ZXJlZCAqLwogCS8qIGRlZmluaXRpb25zIG5vdCBjb21wbGV0ZSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjX2VuY29kZS5oIGIvaW5jbHVkZS9zY3NpL2ZjX2VuY29kZS5oCmluZGV4IGEwZmY2MWMuLjI3ZGFkNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9mY19lbmNvZGUuaAorKysgYi9pbmNsdWRlL3Njc2kvZmNfZW5jb2RlLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAkJc3RydWN0IGZjX25zX2dpZF9mdCBnaWQ7CiAJCXN0cnVjdCBmY19uc19ybl9pZCAgcm47CiAJCXN0cnVjdCBmY19uc19yZnQgcmZ0OworCQlzdHJ1Y3QgZmNfbnNfZmlkIGZpZDsKIAl9IHBheWxvYWQ7CiB9OwogCkBAIC01Nyw2ICs1OCwyMyBAQAogfQogCiAvKioKKyAqIGZjX2FkaXNjX2ZpbGwoKSAtIEZpbGwgaW4gYWRpc2MgcmVxdWVzdCBmcmFtZQorICogQGxwb3J0OiBsb2NhbCBwb3J0LgorICogQGZwOiBmYyBmcmFtZSB3aGVyZSBwYXlsb2FkIHdpbGwgYmUgcGxhY2VkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmNfYWRpc2NfZmlsbChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKQoreworCXN0cnVjdCBmY19lbHNfYWRpc2MgKmFkaXNjOworCisJYWRpc2MgPSBmY19mcmFtZV9wYXlsb2FkX2dldChmcCwgc2l6ZW9mKCphZGlzYykpOworCW1lbXNldChhZGlzYywgMCwgc2l6ZW9mKCphZGlzYykpOworCWFkaXNjLT5hZGlzY19jbWQgPSBFTFNfQURJU0M7CisJcHV0X3VuYWxpZ25lZF9iZTY0KGxwb3J0LT53d3BuLCAmYWRpc2MtPmFkaXNjX3d3cG4pOworCXB1dF91bmFsaWduZWRfYmU2NChscG9ydC0+d3dubiwgJmFkaXNjLT5hZGlzY193d25uKTsKKwlodG9uMjQoYWRpc2MtPmFkaXNjX3BvcnRfaWQsIGZjX2hvc3RfcG9ydF9pZChscG9ydC0+aG9zdCkpOworfQorCisvKioKICAqIGZjX2N0X2hkcl9maWxsLSBmaWxscyBjdCBoZWFkZXIgYW5kIHJlc2V0IGN0IHBheWxvYWQKICAqIHJldHVybnMgcG9pbnRlciB0byBjdCByZXF1ZXN0LgogICovCkBAIC03NywxMCArOTUsMTcgQEAKIH0KIAogLyoqCi0gKiBmY19jdF9maWxsIC0gRmlsbCBpbiBhIG5hbWUgc2VydmljZSByZXF1ZXN0IGZyYW1lCisgKiBmY19jdF9maWxsKCkgLSBGaWxsIGluIGEgbmFtZSBzZXJ2aWNlIHJlcXVlc3QgZnJhbWUKKyAqIEBscG9ydDogbG9jYWwgcG9ydC4KKyAqIEBmY19pZDogRkNfSUQgb2Ygbm9uLWRlc3RpbmF0aW9uIHJwb3J0IGZvciBHUE5fSUQgYW5kIHNpbWlsYXIgaW5xdWlyaWVzLgorICogQGZwOiBmcmFtZSB0byBjb250YWluIHBheWxvYWQuCisgKiBAb3A6IENUIG9wY29kZS4KKyAqIEByX2N0bDogcG9pbnRlciB0byBGQyBoZWFkZXIgUl9DVEwuCisgKiBAZmhfdHlwZTogcG9pbnRlciB0byBGQy00IHR5cGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGZjX2N0X2ZpbGwoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwgc3RydWN0IGZjX2ZyYW1lICpmcCwKLQkJICAgICAgdW5zaWduZWQgaW50IG9wLCBlbnVtIGZjX3JjdGwgKnJfY3RsLCB1MzIgKmRpZCwKK3N0YXRpYyBpbmxpbmUgaW50IGZjX2N0X2ZpbGwoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJICAgICAgdTMyIGZjX2lkLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwLAorCQkgICAgICB1bnNpZ25lZCBpbnQgb3AsIGVudW0gZmNfcmN0bCAqcl9jdGwsCiAJCSAgICAgIGVudW0gZmNfZmhfdHlwZSAqZmhfdHlwZSkKIHsKIAlzdHJ1Y3QgZmNfY3RfcmVxICpjdDsKQEAgLTkxLDYgKzExNiwxMSBAQAogCQljdC0+cGF5bG9hZC5naWQuZm5fZmM0X3R5cGUgPSBGQ19UWVBFX0ZDUDsKIAkJYnJlYWs7CiAKKwljYXNlIEZDX05TX0dQTl9JRDoKKwkJY3QgPSBmY19jdF9oZHJfZmlsbChmcCwgb3AsIHNpemVvZihzdHJ1Y3QgZmNfbnNfZmlkKSk7CisJCWh0b24yNChjdC0+cGF5bG9hZC5maWQuZnBfZmlkLCBmY19pZCk7CisJCWJyZWFrOworCiAJY2FzZSBGQ19OU19SRlRfSUQ6CiAJCWN0ID0gZmNfY3RfaGRyX2ZpbGwoZnAsIG9wLCBzaXplb2Yoc3RydWN0IGZjX25zX3JmdCkpOwogCQlodG9uMjQoY3QtPnBheWxvYWQucmZ0LmZpZC5mcF9maWQsCkBAIC0xMTAsNyArMTQwLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCSpyX2N0bCA9IEZDX1JDVExfRERfVU5TT0xfQ1RMOwotCSpkaWQgPSBGQ19GSURfRElSX1NFUlY7CiAJKmZoX3R5cGUgPSBGQ19UWVBFX0NUOwogCXJldHVybiAwOwogfQpAQCAtMjQ5LDUxICsyNzgsNDIgQEAKIC8qKgogICogZmNfZWxzX2ZpbGwgLSBGaWxsIGluIGFuIEVMUyAgcmVxdWVzdCBmcmFtZQogICovCi1zdGF0aWMgaW5saW5lIGludCBmY19lbHNfZmlsbChzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0LAorc3RhdGljIGlubGluZSBpbnQgZmNfZWxzX2ZpbGwoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJICAgICAgIHUzMiBkaWQsCiAJCSAgICAgICBzdHJ1Y3QgZmNfZnJhbWUgKmZwLCB1bnNpZ25lZCBpbnQgb3AsCi0JCSAgICAgICBlbnVtIGZjX3JjdGwgKnJfY3RsLCB1MzIgKmRpZCwgZW51bSBmY19maF90eXBlICpmaF90eXBlKQorCQkgICAgICAgZW51bSBmY19yY3RsICpyX2N0bCwgZW51bSBmY19maF90eXBlICpmaF90eXBlKQogewogCXN3aXRjaCAob3ApIHsKKwljYXNlIEVMU19BRElTQzoKKwkJZmNfYWRpc2NfZmlsbChscG9ydCwgZnApOworCQlicmVhazsKKwogCWNhc2UgRUxTX1BMT0dJOgogCQlmY19wbG9naV9maWxsKGxwb3J0LCBmcCwgRUxTX1BMT0dJKTsKLQkJKmRpZCA9IHJwb3J0LT5wb3J0X2lkOwogCQlicmVhazsKIAogCWNhc2UgRUxTX0ZMT0dJOgogCQlmY19mbG9naV9maWxsKGxwb3J0LCBmcCk7Ci0JCSpkaWQgPSBGQ19GSURfRkxPR0k7CiAJCWJyZWFrOwogCiAJY2FzZSBFTFNfTE9HTzoKIAkJZmNfbG9nb19maWxsKGxwb3J0LCBmcCk7Ci0JCSpkaWQgPSBGQ19GSURfRkxPR0k7Ci0JCS8qCi0JCSAqIGlmIHJwb3J0IGlzIHZhbGlkIHRoZW4gaXQKLQkJICogaXMgcG9ydCBsb2dvLCB0aGVyZWZvcmUKLQkJICogc2V0IGRpZCB0byBycG9ydCBpZC4KLQkJICovCi0JCWlmIChycG9ydCkKLQkJCSpkaWQgPSBycG9ydC0+cG9ydF9pZDsKIAkJYnJlYWs7CiAKIAljYXNlIEVMU19SVFY6CiAJCWZjX3J0dl9maWxsKGxwb3J0LCBmcCk7Ci0JCSpkaWQgPSBycG9ydC0+cG9ydF9pZDsKIAkJYnJlYWs7CiAKIAljYXNlIEVMU19SRUM6CiAJCWZjX3JlY19maWxsKGxwb3J0LCBmcCk7Ci0JCSpkaWQgPSBycG9ydC0+cG9ydF9pZDsKIAkJYnJlYWs7CiAKIAljYXNlIEVMU19QUkxJOgogCQlmY19wcmxpX2ZpbGwobHBvcnQsIGZwKTsKLQkJKmRpZCA9IHJwb3J0LT5wb3J0X2lkOwogCQlicmVhazsKIAogCWNhc2UgRUxTX1NDUjoKIAkJZmNfc2NyX2ZpbGwobHBvcnQsIGZwKTsKLQkJKmRpZCA9IEZDX0ZJRF9GQ1RSTDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2ZjX2ZyYW1lLmggYi9pbmNsdWRlL3Njc2kvZmNfZnJhbWUuaAppbmRleCA1OTUxMTA1Li5jMzVkMjM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvZmNfZnJhbWUuaAorKysgYi9pbmNsdWRlL3Njc2kvZmNfZnJhbWUuaApAQCAtMzcsMTMgKzM3LDYgQEAKICNkZWZpbmUJRkNfRlJBTUVfSEVBRFJPT00JMzIJLyogaGVhZHJvb20gZm9yIFZMQU4gKyBGQ29FIGhlYWRlcnMgKi8KICNkZWZpbmUJRkNfRlJBTUVfVEFJTFJPT00JOAkvKiB0cmFpbGVyIHNwYWNlIGZvciBGQ29FICovCiAKLS8qCi0gKiBJbmZvcm1hdGlvbiBhYm91dCBhbiBpbmRpdmlkdWFsIGZpYnJlIGNoYW5uZWwgZnJhbWUgcmVjZWl2ZWQgb3IgdG8gYmUgc2VudC4KLSAqIFRoZSBidWZmZXIgbWF5IGJlIGluIHVwIHRvIDQgYWRkaXRpb25hbCBub24tY29udGlndW91cyBzZWN0aW9ucywKLSAqIGJ1dCB0aGUgbGluZWFyIHNlY3Rpb24gbXVzdCBob2xkIHRoZSBmcmFtZSBoZWFkZXIuCi0gKi8KLSNkZWZpbmUgRkNfRlJBTUVfU0dfTEVOCQk0CS8qIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgbWF4aW11bSBsZW5ndGggKi8KLQogI2RlZmluZSBmcF9za2IoZnApCSgmKChmcCktPnNrYikpCiAjZGVmaW5lIGZyX2hkcihmcCkJKChmcCktPnNrYi5kYXRhKQogI2RlZmluZSBmcl9sZW4oZnApCSgoZnApLT5za2IubGVuKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2lzY3NpX2lmLmggYi9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaAppbmRleCA0NDI2ZjAwLi5kNjdkZGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaAorKysgYi9pbmNsdWRlL3Njc2kvaXNjc2lfaWYuaApAQCAtMjYyLDYgKzI2Miw3IEBACiAJSVNDU0lfRVJSX05PX1NDU0lfQ01ECQk9IElTQ1NJX0VSUl9CQVNFICsgMTcsCiAJSVNDU0lfRVJSX0lOVkFMSURfSE9TVAkJPSBJU0NTSV9FUlJfQkFTRSArIDE4LAogCUlTQ1NJX0VSUl9YTUlUX0ZBSUxFRAkJPSBJU0NTSV9FUlJfQkFTRSArIDE5LAorCUlTQ1NJX0VSUl9UQ1BfQ09OTl9DTE9TRQk9IElTQ1NJX0VSUl9CQVNFICsgMjAsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmZjLmggYi9pbmNsdWRlL3Njc2kvbGliZmMuaAppbmRleCBiOTI1ODRhLi42NWRjOWFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliZmMuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliZmMuaApAQCAtNTEsNTUgKzUxLDQ5IEBACiAJCWRvIHsJCQkJCQlcCiAJCQlDTUQ7CQkJCQlcCiAJCX0gd2hpbGUgKDApOwkJCQkJXAotfSB3aGlsZSAoMCk7Cit9IHdoaWxlICgwKQogCiAjZGVmaW5lIEZDX0xJQkZDX0RCRyhmbXQsIGFyZ3MuLi4pCQkJCQlcCiAJRkNfQ0hFQ0tfTE9HR0lORyhGQ19MSUJGQ19MT0dHSU5HLAkJCQlcCi0JCQkgcHJpbnRrKEtFUk5fSU5GTyAibGliZmM6ICIgZm10LCAjI2FyZ3MpOykKKwkJCSBwcmludGsoS0VSTl9JTkZPICJsaWJmYzogIiBmbXQsICMjYXJncykpCiAKICNkZWZpbmUgRkNfTFBPUlRfREJHKGxwb3J0LCBmbXQsIGFyZ3MuLi4pCQkJCVwKIAlGQ19DSEVDS19MT0dHSU5HKEZDX0xQT1JUX0xPR0dJTkcsCQkJCVwKLQkJCSBwcmludGsoS0VSTl9JTkZPICJscG9ydDogJTZ4OiAiIGZtdCwJCVwKLQkJCQlmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpLCAjI2FyZ3MpOykKKwkJCSBwcmludGsoS0VSTl9JTkZPICJob3N0JXU6IGxwb3J0ICU2eDogIiBmbXQsCVwKKwkJCQkobHBvcnQpLT5ob3N0LT5ob3N0X25vLAkJCVwKKwkJCQlmY19ob3N0X3BvcnRfaWQoKGxwb3J0KS0+aG9zdCksICMjYXJncykpCiAKICNkZWZpbmUgRkNfRElTQ19EQkcoZGlzYywgZm10LCBhcmdzLi4uKQkJCQkJXAogCUZDX0NIRUNLX0xPR0dJTkcoRkNfRElTQ19MT0dHSU5HLAkJCQlcCi0JCQkgcHJpbnRrKEtFUk5fSU5GTyAiZGlzYzogJTZ4OiAiIGZtdCwJCVwKLQkJCQlmY19ob3N0X3BvcnRfaWQoZGlzYy0+bHBvcnQtPmhvc3QpLAlcCi0JCQkJIyNhcmdzKTspCisJCQkgcHJpbnRrKEtFUk5fSU5GTyAiaG9zdCV1OiBkaXNjOiAiIGZtdCwJCVwKKwkJCQkoZGlzYyktPmxwb3J0LT5ob3N0LT5ob3N0X25vLAkJXAorCQkJCSMjYXJncykpCiAKLSNkZWZpbmUgRkNfUlBPUlRfREJHKHJwb3J0LCBmbXQsIGFyZ3MuLi4pCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0Jc3RydWN0IGZjX3Jwb3J0X2xpYmZjX3ByaXYgKnJkYXRhID0gcnBvcnQtPmRkX2RhdGE7CQlcCi0Jc3RydWN0IGZjX2xwb3J0ICpscG9ydCA9IHJkYXRhLT5sb2NhbF9wb3J0OwkJCVwKKyNkZWZpbmUgRkNfUlBPUlRfSURfREJHKGxwb3J0LCBwb3J0X2lkLCBmbXQsIGFyZ3MuLi4pCQkJXAogCUZDX0NIRUNLX0xPR0dJTkcoRkNfUlBPUlRfTE9HR0lORywJCQkJXAotCQkJIHByaW50ayhLRVJOX0lORk8gInJwb3J0OiAlNng6ICU2eDogIiBmbXQsCVwKLQkJCQlmY19ob3N0X3BvcnRfaWQobHBvcnQtPmhvc3QpLAkJXAotCQkJCXJwb3J0LT5wb3J0X2lkLCAjI2FyZ3MpOykJCVwKLX0gd2hpbGUgKDApOworCQkJIHByaW50ayhLRVJOX0lORk8gImhvc3QldTogcnBvcnQgJTZ4OiAiIGZtdCwJXAorCQkJCShscG9ydCktPmhvc3QtPmhvc3Rfbm8sCQkJXAorCQkJCShwb3J0X2lkKSwgIyNhcmdzKSkKKworI2RlZmluZSBGQ19SUE9SVF9EQkcocmRhdGEsIGZtdCwgYXJncy4uLikJCQkJXAorCUZDX1JQT1JUX0lEX0RCRygocmRhdGEpLT5sb2NhbF9wb3J0LCAocmRhdGEpLT5pZHMucG9ydF9pZCwgZm10LCAjI2FyZ3MpCiAKICNkZWZpbmUgRkNfRkNQX0RCRyhwa3QsIGZtdCwgYXJncy4uLikJCQkJCVwKIAlGQ19DSEVDS19MT0dHSU5HKEZDX0ZDUF9MT0dHSU5HLAkJCQlcCi0JCQkgcHJpbnRrKEtFUk5fSU5GTyAiZmNwOiAlNng6ICU2eDogIiBmbXQsCVwKLQkJCQlmY19ob3N0X3BvcnRfaWQocGt0LT5scC0+aG9zdCksCQlcCi0JCQkJcGt0LT5ycG9ydC0+cG9ydF9pZCwgIyNhcmdzKTspCi0KLSNkZWZpbmUgRkNfRU1fREJHKGVtLCBmbXQsIGFyZ3MuLi4pCQkJCQlcCi0JRkNfQ0hFQ0tfTE9HR0lORyhGQ19FTV9MT0dHSU5HLAkJCQkJXAotCQkJIHByaW50ayhLRVJOX0lORk8gImVtOiAlNng6ICIgZm10LAkJXAotCQkJCWZjX2hvc3RfcG9ydF9pZChlbS0+bHAtPmhvc3QpLAkJXAotCQkJCSMjYXJncyk7KQorCQkJIHByaW50ayhLRVJOX0lORk8gImhvc3QldTogZmNwOiAlNng6ICIgZm10LAlcCisJCQkJKHBrdCktPmxwLT5ob3N0LT5ob3N0X25vLAkJXAorCQkJCXBrdC0+cnBvcnQtPnBvcnRfaWQsICMjYXJncykpCiAKICNkZWZpbmUgRkNfRVhDSF9EQkcoZXhjaCwgZm10LCBhcmdzLi4uKQkJCQkJXAogCUZDX0NIRUNLX0xPR0dJTkcoRkNfRVhDSF9MT0dHSU5HLAkJCQlcCi0JCQkgcHJpbnRrKEtFUk5fSU5GTyAiZXhjaDogJTZ4OiAlNHg6ICIgZm10LAlcCi0JCQkJZmNfaG9zdF9wb3J0X2lkKGV4Y2gtPmxwLT5ob3N0KSwJXAotCQkJCWV4Y2gtPnhpZCwgIyNhcmdzKTspCisJCQkgcHJpbnRrKEtFUk5fSU5GTyAiaG9zdCV1OiB4aWQgJTR4OiAiIGZtdCwJXAorCQkJCShleGNoKS0+bHAtPmhvc3QtPmhvc3Rfbm8sCQlcCisJCQkJZXhjaC0+eGlkLCAjI2FyZ3MpKQogCiAjZGVmaW5lIEZDX1NDU0lfREJHKGxwb3J0LCBmbXQsIGFyZ3MuLi4pCQkJCVwKIAlGQ19DSEVDS19MT0dHSU5HKEZDX1NDU0lfTE9HR0lORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJIHByaW50ayhLRVJOX0lORk8gInNjc2k6ICU2eDogIiBmbXQsCQlcCi0JCQkJZmNfaG9zdF9wb3J0X2lkKGxwb3J0LT5ob3N0KSwgIyNhcmdzKTspCisJCQkgcHJpbnRrKEtFUk5fSU5GTyAiaG9zdCV1OiBzY3NpOiAiIGZtdCwJCVwKKwkJCQkobHBvcnQpLT5ob3N0LT5ob3N0X25vLAkjI2FyZ3MpKQogCiAvKgogICogbGliZmMgZXJyb3IgY29kZXMKQEAgLTEyNSw3ICsxMTksNyBAQAogICogRkMgSEJBIHN0YXR1cwogICovCiBlbnVtIGZjX2xwb3J0X3N0YXRlIHsKLQlMUE9SVF9TVF9OT05FID0gMCwKKwlMUE9SVF9TVF9ESVNBQkxFRCA9IDAsCiAJTFBPUlRfU1RfRkxPR0ksCiAJTFBPUlRfU1RfRE5TLAogCUxQT1JUX1NUX1JQTl9JRCwKQEAgLTE0Myw1OSArMTM3LDUyIEBACiB9OwogCiBlbnVtIGZjX3Jwb3J0X3N0YXRlIHsKLQlSUE9SVF9TVF9OT05FID0gMCwKIAlSUE9SVF9TVF9JTklULAkJLyogaW5pdGlhbGl6ZWQgKi8KIAlSUE9SVF9TVF9QTE9HSSwJCS8qIHdhaXRpbmcgZm9yIFBMT0dJIGNvbXBsZXRpb24gKi8KIAlSUE9SVF9TVF9QUkxJLAkJLyogd2FpdGluZyBmb3IgUFJMSSBjb21wbGV0aW9uICovCiAJUlBPUlRfU1RfUlRWLAkJLyogd2FpdGluZyBmb3IgUlRWIGNvbXBsZXRpb24gKi8KIAlSUE9SVF9TVF9SRUFEWSwJCS8qIHJlYWR5IGZvciB1c2UgKi8KIAlSUE9SVF9TVF9MT0dPLAkJLyogcG9ydCBsb2dvdXQgc2VudCAqLwotfTsKLQotZW51bSBmY19ycG9ydF90cmFuc19zdGF0ZSB7Ci0JRkNfUE9SVFNUQVRFX1JPR1VFLAotCUZDX1BPUlRTVEFURV9SRUFMLAorCVJQT1JUX1NUX0FESVNDLAkJLyogRGlzY292ZXIgQWRkcmVzcyBzZW50ICovCisJUlBPUlRfU1RfREVMRVRFLAkvKiBwb3J0IGJlaW5nIGRlbGV0ZWQgKi8KIH07CiAKIC8qKgogICogc3RydWN0IGZjX2Rpc2NfcG9ydCAtIHRlbXBvcmFyeSBkaXNjb3ZlcnkgcG9ydCB0byBob2xkIHJwb3J0IGlkZW50aWZpZXJzCi0gKiBAbHA6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCi0gKiBAcGVlcnM6IG5vZGUgZm9yIGxpc3QgbWFuYWdlbWVudCBkdXJpbmcgZGlzY292ZXJ5IGFuZCBSU0NOIHByb2Nlc3NpbmcKLSAqIEBpZHM6IGlkZW50aWZpZXJzIHN0cnVjdHVyZSB0byBwYXNzIHRvIGZjX3JlbW90ZV9wb3J0X2FkZCgpCi0gKiBAcnBvcnRfd29yazogd29yayBzdHJ1Y3QgZm9yIHN0YXJ0aW5nIHRoZSBycG9ydCBzdGF0ZSBtYWNoaW5lCisgKiBAbHA6ICAgICAgICAgRmlicmUgQ2hhbm5lbCBob3N0IHBvcnQgaW5zdGFuY2UKKyAqIEBwZWVyczogICAgICBOb2RlIGZvciBsaXN0IG1hbmFnZW1lbnQgZHVyaW5nIGRpc2NvdmVyeSBhbmQgUlNDTiBwcm9jZXNzaW5nCisgKiBAcnBvcnRfd29yazogV29yayBzdHJ1Y3QgZm9yIHN0YXJ0aW5nIHRoZSBycG9ydCBzdGF0ZSBtYWNoaW5lCisgKiBAcG9ydF9pZDogICAgUG9ydCBJRCBvZiB0aGUgZGlzY292ZXJlZCBwb3J0CiAgKi8KIHN0cnVjdCBmY19kaXNjX3BvcnQgewogCXN0cnVjdCBmY19scG9ydCAgICAgICAgICAgICAqbHA7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgICAgIHBlZXJzOwotCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBpZHM7CiAJc3RydWN0IHdvcmtfc3RydWN0CSAgICBycG9ydF93b3JrOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0X2lkOwogfTsKIAogZW51bSBmY19ycG9ydF9ldmVudCB7CiAJUlBPUlRfRVZfTk9ORSA9IDAsCi0JUlBPUlRfRVZfQ1JFQVRFRCwKKwlSUE9SVF9FVl9SRUFEWSwKIAlSUE9SVF9FVl9GQUlMRUQsCiAJUlBPUlRfRVZfU1RPUCwKIAlSUE9SVF9FVl9MT0dPCiB9OwogCitzdHJ1Y3QgZmNfcnBvcnRfcHJpdjsKKwogc3RydWN0IGZjX3Jwb3J0X29wZXJhdGlvbnMgewotCXZvaWQgKCpldmVudF9jYWxsYmFjaykoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBmY19ycG9ydCAqLAorCXZvaWQgKCpldmVudF9jYWxsYmFjaykoc3RydWN0IGZjX2xwb3J0ICosIHN0cnVjdCBmY19ycG9ydF9wcml2ICosCiAJCQkgICAgICAgZW51bSBmY19ycG9ydF9ldmVudCk7CiB9OwogCiAvKioKICAqIHN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2IC0gbGliZmMgaW50ZXJuYWwgaW5mb3JtYXRpb24gYWJvdXQgYSByZW1vdGUgcG9ydAogICogQGxvY2FsX3BvcnQ6IEZpYnJlIENoYW5uZWwgaG9zdCBwb3J0IGluc3RhbmNlCi0gKiBAcnBfc3RhdGU6IHN0YXRlIHRyYWNrcyBwcm9ncmVzcyBvZiBQTE9HSSwgUFJMSSwgYW5kIFJUViBleGNoYW5nZXMKKyAqIEBycF9zdGF0ZTogaW5kaWNhdGVzIFJFQURZIGZvciBJL08gb3IgREVMRVRFIHdoZW4gYmxvY2tlZC4KICAqIEBmbGFnczogUkVDIGFuZCBSRVRSWSBzdXBwb3J0ZWQgZmxhZ3MKLSAqIEBtYXhfc2VxOiBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHNlcXVlbmNlcwotICogQHJldHJpZXM6IHJldHJ5IGNvdW50IGluIGN1cnJlbnQgc3RhdGUKICAqIEBlX2RfdG92OiBlcnJvciBkZXRlY3QgdGltZW91dCB2YWx1ZSAoaW4gbXNlYykKICAqIEByX2FfdG92OiByZXNvdXJjZSBhbGxvY2F0aW9uIHRpbWVvdXQgdmFsdWUgKGluIG1zZWMpCi0gKiBAcnBfbXV0ZXg6IG11dGV4IHByb3RlY3RzIHJwb3J0Ci0gKiBAcmV0cnlfd29yazoKLSAqIEBldmVudF9jYWxsYmFjazogQ2FsbGJhY2sgZm9yIHJwb3J0IFJFQURZLCBGQUlMRUQgb3IgTE9HTwogICovCiBzdHJ1Y3QgZmNfcnBvcnRfbGliZmNfcHJpdiB7CiAJc3RydWN0IGZjX2xwb3J0CQkgICAqbG9jYWxfcG9ydDsKQEAgLTIwMywzMiArMTkwLDUwIEBACiAJdTE2CQkJICAgZmxhZ3M7CiAJI2RlZmluZSBGQ19SUF9GTEFHU19SRUNfU1VQUE9SVEVECSgxIDw8IDApCiAJI2RlZmluZSBGQ19SUF9GTEFHU19SRVRSWQkJKDEgPDwgMSkKKwl1bnNpZ25lZCBpbnQJICAgICAgICAgICBlX2RfdG92OworCXVuc2lnbmVkIGludAkgICAgICAgICAgIHJfYV90b3Y7Cit9OworCisvKioKKyAqIHN0cnVjdCBmY19ycG9ydF9wcml2IC0gbGliZmMgcnBvcnQgYW5kIGRpc2NvdmVyeSBpbmZvIGFib3V0IGEgcmVtb3RlIHBvcnQKKyAqIEBsb2NhbF9wb3J0OiBGaWJyZSBDaGFubmVsIGhvc3QgcG9ydCBpbnN0YW5jZQorICogQHJwb3J0OiB0cmFuc3BvcnQgcmVtb3RlIHBvcnQKKyAqIEBrcmVmOiByZWZlcmVuY2UgY291bnRlcgorICogQHJwX3N0YXRlOiBzdGF0ZSB0cmFja3MgcHJvZ3Jlc3Mgb2YgUExPR0ksIFBSTEksIGFuZCBSVFYgZXhjaGFuZ2VzCisgKiBAaWRzOiByZW1vdGUgcG9ydCBpZGVudGlmaWVycyBhbmQgcm9sZXMKKyAqIEBmbGFnczogUkVDIGFuZCBSRVRSWSBzdXBwb3J0ZWQgZmxhZ3MKKyAqIEBtYXhfc2VxOiBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHNlcXVlbmNlcworICogQGRpc2NfaWQ6IGRpc2NvdmVyeSBpZGVudGlmaWVyCisgKiBAbWF4ZnJhbWVfc2l6ZTogbWF4aW11bSBmcmFtZSBzaXplCisgKiBAcmV0cmllczogcmV0cnkgY291bnQgaW4gY3VycmVudCBzdGF0ZQorICogQGVfZF90b3Y6IGVycm9yIGRldGVjdCB0aW1lb3V0IHZhbHVlIChpbiBtc2VjKQorICogQHJfYV90b3Y6IHJlc291cmNlIGFsbG9jYXRpb24gdGltZW91dCB2YWx1ZSAoaW4gbXNlYykKKyAqIEBycF9tdXRleDogbXV0ZXggcHJvdGVjdHMgcnBvcnQKKyAqIEByZXRyeV93b3JrOgorICogQGV2ZW50X2NhbGxiYWNrOiBDYWxsYmFjayBmb3IgcnBvcnQgUkVBRFksIEZBSUxFRCBvciBMT0dPCisgKi8KK3N0cnVjdCBmY19ycG9ydF9wcml2IHsKKwlzdHJ1Y3QgZmNfbHBvcnQJCSAgICpsb2NhbF9wb3J0OworCXN0cnVjdCBmY19ycG9ydAkJICAgKnJwb3J0OworCXN0cnVjdCBrcmVmCQkgICBrcmVmOworCWVudW0gZmNfcnBvcnRfc3RhdGUgICAgICAgIHJwX3N0YXRlOworCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBpZHM7CisJdTE2CQkJICAgZmxhZ3M7CiAJdTE2CQkgICAgICAgICAgIG1heF9zZXE7CisJdTE2CQkJICAgZGlzY19pZDsKKwl1MTYJCQkgICBtYXhmcmFtZV9zaXplOwogCXVuc2lnbmVkIGludAkgICAgICAgICAgIHJldHJpZXM7CiAJdW5zaWduZWQgaW50CSAgICAgICAgICAgZV9kX3RvdjsKIAl1bnNpZ25lZCBpbnQJICAgICAgICAgICByX2FfdG92OwotCWVudW0gZmNfcnBvcnRfdHJhbnNfc3RhdGUgIHRyYW5zX3N0YXRlOwogCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgIHJwX211dGV4OwogCXN0cnVjdCBkZWxheWVkX3dvcmsJICAgcmV0cnlfd29yazsKIAllbnVtIGZjX3Jwb3J0X2V2ZW50ICAgICAgICBldmVudDsKIAlzdHJ1Y3QgZmNfcnBvcnRfb3BlcmF0aW9ucyAqb3BzOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIHBlZXJzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgIGV2ZW50X3dvcms7CisJdTMyCQkJICAgc3VwcG9ydGVkX2NsYXNzZXM7CiB9OwogCi0jZGVmaW5lIFBSSVZfVE9fUlBPUlQoeCkJCQkJCQlcCi0JKHN0cnVjdCBmY19ycG9ydCAqKSgodm9pZCAqKXggLSBzaXplb2Yoc3RydWN0IGZjX3Jwb3J0KSk7Ci0jZGVmaW5lIFJQT1JUX1RPX1BSSVYoeCkJCQkJCQlcCi0JKHN0cnVjdCBmY19ycG9ydF9saWJmY19wcml2ICopKCh2b2lkICopeCArIHNpemVvZihzdHJ1Y3QgZmNfcnBvcnQpKTsKLQotc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydF9yb2d1ZV9jcmVhdGUoc3RydWN0IGZjX2Rpc2NfcG9ydCAqKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGZjX3Jwb3J0X3NldF9uYW1lKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsIHU2NCB3d3BuLCB1NjQgd3dubikKLXsKLQlycG9ydC0+bm9kZV9uYW1lID0gd3dubjsKLQlycG9ydC0+cG9ydF9uYW1lID0gd3dwbjsKLX0KLQogLyoKICAqIGZjb2Ugc3RhdHMgc3RydWN0dXJlCiAgKi8KQEAgLTM0NCw2ICszNDksOCBAQAogICovCiAKIHN0cnVjdCBmY19leGNoX21ncjsKK3N0cnVjdCBmY19leGNoX21ncl9hbmNob3I7CitleHRlcm4gdTE2CWZjX2NwdV9tYXNrOwkvKiBjcHUgbWFzayBmb3IgcG9zc2libGUgY3B1cyAqLwogCiAvKgogICogU2VxdWVuY2UuCkBAIC0zNjgsNiArMzc1LDcgQEAKICAqLwogc3RydWN0IGZjX2V4Y2ggewogCXN0cnVjdCBmY19leGNoX21nciAqZW07CQkvKiBleGNoYW5nZSBtYW5hZ2VyICovCisJc3RydWN0IGZjX2V4Y2hfcG9vbCAqcG9vbDsJLyogcGVyIGNwdSBleGNoZXMgcG9vbCAqLwogCXUzMgkJc3RhdGU7CQkvKiBpbnRlcm5hbCBkcml2ZXIgc3RhdGUgKi8KIAl1MTYJCXhpZDsJCS8qIG91ciBleGNoYW5nZSBJRCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZXhfbGlzdDsJLyogZnJlZSBvciBidXN5IGxpc3QgbGlua2FnZSAqLwpAQCAtNDE1LDcgKzQyMyw3IEBACiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXN0cnVjdCBmY19zZXEgKigqZWxzY3Rfc2VuZCkoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKLQkJCQkgICAgIHN0cnVjdCBmY19ycG9ydCAqcnBvcnQsCisJCQkJICAgICB1MzIgZGlkLAogCQkJCSAgICAgc3RydWN0IGZjX2ZyYW1lICpmcCwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBvcCwKIAkJCQkgICAgIHZvaWQgKCpyZXNwKShzdHJ1Y3QgZmNfc2VxICosCkBAIC01MTksMjUgKzUyNyw2IEBACiAJdm9pZCAoKmV4Y2hfZG9uZSkoc3RydWN0IGZjX3NlcSAqc3ApOwogCiAJLyoKLQkgKiBBc3NpZ25zIGEgRU0gYW5kIGEgZnJlZSBYSUQgZm9yIGFuIG5ldyBleGNoYW5nZSBhbmQgdGhlbgotCSAqIGFsbG9jYXRlcyBhIG5ldyBleGNoYW5nZSBhbmQgc2VxdWVuY2UgcGFpci4KLQkgKiBUaGUgZnAgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGZyZWUgWElELgotCSAqCi0JICogU1RBVFVTOiBPUFRJT05BTAotCSAqLwotCXN0cnVjdCBmY19leGNoICooKmV4Y2hfZ2V0KShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKTsKLQotCS8qCi0JICogUmVsZWFzZSBwcmV2aW91c2x5IGFzc2lnbmVkIFhJRCBieSBleGNoX2dldCBBUEkuCi0JICogVGhlIExMRCBtYXkgaW1wbGVtZW50IHRoaXMgaWYgWElEIGlzIGFzc2lnbmVkIGJ5IExMRAotCSAqIGluIGV4Y2hfZ2V0KCkuCi0JICoKLQkgKiBTVEFUVVM6IE9QVElPTkFMCi0JICovCi0Jdm9pZCAoKmV4Y2hfcHV0KShzdHJ1Y3QgZmNfbHBvcnQgKmxwLCBzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wLAotCQkJIHUxNiBleF9pZCk7Ci0KLQkvKgogCSAqIFN0YXJ0IGEgbmV3IHNlcXVlbmNlIG9uIHRoZSBzYW1lIGV4Y2hhbmdlL3NlcXVlbmNlIHR1cGxlLgogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTApAQCAtNTc3LDkgKzU2NiwxMSBAQAogCWludCAoKmxwb3J0X3Jlc2V0KShzdHJ1Y3QgZmNfbHBvcnQgKik7CiAKIAkvKgotCSAqIENyZWF0ZSBhIHJlbW90ZSBwb3J0CisJICogQ3JlYXRlIGEgcmVtb3RlIHBvcnQgd2l0aCBhIGdpdmVuIHBvcnQgSUQKKwkgKgorCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KLQlzdHJ1Y3QgZmNfcnBvcnQgKigqcnBvcnRfY3JlYXRlKShzdHJ1Y3QgZmNfZGlzY19wb3J0ICopOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICooKnJwb3J0X2NyZWF0ZSkoc3RydWN0IGZjX2xwb3J0ICosIHUzMik7CiAKIAkvKgogCSAqIEluaXRpYXRlcyB0aGUgUlAgc3RhdGUgbWFjaGluZS4gSXQgaXMgY2FsbGVkIGZyb20gdGhlIExQIG1vZHVsZS4KQEAgLTU5Miw3ICs1ODMsNyBAQAogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwotCWludCAoKnJwb3J0X2xvZ2luKShzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0KTsKKwlpbnQgKCpycG9ydF9sb2dpbikoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKik7CiAKIAkvKgogCSAqIExvZ29mZiwgYW5kIHJlbW92ZSB0aGUgcnBvcnQgZnJvbSB0aGUgdHJhbnNwb3J0IGlmCkBAIC02MDAsNyArNTkxLDcgQEAKIAkgKgogCSAqIFNUQVRVUzogT1BUSU9OQUwKIAkgKi8KLQlpbnQgKCpycG9ydF9sb2dvZmYpKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpOworCWludCAoKnJwb3J0X2xvZ29mZikoc3RydWN0IGZjX3Jwb3J0X3ByaXYgKik7CiAKIAkvKgogCSAqIFJlY2lldmUgYSByZXF1ZXN0IGZyb20gYSByZW1vdGUgcG9ydC4KQEAgLTYwOCwxNCArNTk5LDIwIEBACiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwogCXZvaWQgKCpycG9ydF9yZWN2X3JlcSkoc3RydWN0IGZjX3NlcSAqLCBzdHJ1Y3QgZmNfZnJhbWUgKiwKLQkJCSAgICAgICBzdHJ1Y3QgZmNfcnBvcnQgKik7CisJCQkgICAgICAgc3RydWN0IGZjX2xwb3J0ICopOwogCiAJLyoKIAkgKiBsb29rdXAgYW4gcnBvcnQgYnkgaXQncyBwb3J0IElELgogCSAqCiAJICogU1RBVFVTOiBPUFRJT05BTAogCSAqLwotCXN0cnVjdCBmY19ycG9ydCAqKCpycG9ydF9sb29rdXApKGNvbnN0IHN0cnVjdCBmY19scG9ydCAqLCB1MzIpOworCXN0cnVjdCBmY19ycG9ydF9wcml2ICooKnJwb3J0X2xvb2t1cCkoY29uc3Qgc3RydWN0IGZjX2xwb3J0ICosIHUzMik7CisKKwkvKgorCSAqIERlc3Ryb3kgYW4gcnBvcnQgYWZ0ZXIgZmluYWwga3JlZl9wdXQoKS4KKwkgKiBUaGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBrcmVmIGluc2lkZSB0aGUgZmNfcnBvcnRfcHJpdi4KKwkgKi8KKwl2b2lkICgqcnBvcnRfZGVzdHJveSkoc3RydWN0IGtyZWYgKik7CiAKIAkvKgogCSAqIFNlbmQgYSBmY3AgY21kIGZyb20gZnNwIHBrdC4KQEAgLTY4MSwxOCArNjc4LDE2IEBACiAvKiBpbmZvcm1hdGlvbiB1c2VkIGJ5IHRoZSBkaXNjb3ZlcnkgbGF5ZXIgKi8KIHN0cnVjdCBmY19kaXNjIHsKIAl1bnNpZ25lZCBjaGFyCQlyZXRyeV9jb3VudDsKLQl1bnNpZ25lZCBjaGFyCQlkZWxheTsKIAl1bnNpZ25lZCBjaGFyCQlwZW5kaW5nOwogCXVuc2lnbmVkIGNoYXIJCXJlcXVlc3RlZDsKIAl1bnNpZ25lZCBzaG9ydAkJc2VxX2NvdW50OwogCXVuc2lnbmVkIGNoYXIJCWJ1Zl9sZW47Ci0JZW51bSBmY19kaXNjX2V2ZW50CWV2ZW50OworCXUxNgkJCWRpc2NfaWQ7CiAKIAl2b2lkICgqZGlzY19jYWxsYmFjaykoc3RydWN0IGZjX2xwb3J0ICosCiAJCQkgICAgICBlbnVtIGZjX2Rpc2NfZXZlbnQpOwogCiAJc3RydWN0IGxpc3RfaGVhZAkgcnBvcnRzOwotCXN0cnVjdCBsaXN0X2hlYWQJIHJvZ3VlX3Jwb3J0czsKIAlzdHJ1Y3QgZmNfbHBvcnQJCSpscG9ydDsKIAlzdHJ1Y3QgbXV0ZXgJCWRpc2NfbXV0ZXg7CiAJc3RydWN0IGZjX2dwbl9mdF9yZXNwCXBhcnRpYWxfYnVmOwkvKiBwYXJ0aWFsIG5hbWUgYnVmZmVyICovCkBAIC03MDQsOSArNjk5LDkgQEAKIAogCS8qIEFzc29jaWF0aW9ucyAqLwogCXN0cnVjdCBTY3NpX0hvc3QJKmhvc3Q7Ci0Jc3RydWN0IGZjX2V4Y2hfbWdyCSplbXA7Ci0Jc3RydWN0IGZjX3Jwb3J0CQkqZG5zX3JwOwotCXN0cnVjdCBmY19ycG9ydAkJKnB0cF9ycDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWVtYV9saXN0OworCXN0cnVjdCBmY19ycG9ydF9wcml2CSpkbnNfcnA7CisJc3RydWN0IGZjX3Jwb3J0X3ByaXYJKnB0cF9ycDsKIAl2b2lkCQkJKnNjc2lfcHJpdjsKIAlzdHJ1Y3QgZmNfZGlzYyAgICAgICAgICBkaXNjOwogCkBAIC05NjAsNiArOTU1LDI4IEBACiBpbnQgZmNfZXhjaF9pbml0KHN0cnVjdCBmY19scG9ydCAqbHApOwogCiAvKgorICogQWRkcyBFeGNoYW5nZSBNYW5hZ2VyIChFTSkgbXAgdG8gbHBvcnQuCisgKgorICogQWRkcyBzcGVjaWZpZWQgbXAgdG8gbHBvcnQgdXNpbmcgc3RydWN0IGZjX2V4Y2hfbWdyX2FuY2hvciwKKyAqIHRoZSBzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yIGFsbG93cyBzYW1lIEVNIHNoYXJpbmcgYnkKKyAqIG1vcmUgdGhhbiBvbmUgbHBvcnQgd2l0aCB0aGVpciBzcGVjaWZpZWQgbWF0Y2ggZnVuY3Rpb24sCisgKiB0aGUgbWF0Y2ggZnVuY3Rpb24gaXMgdXNlZCBpbiBhbGxvY2F0aW5nIGV4Y2hhbmdlIGZyb20KKyAqIGFkZGVkIG1wLgorICovCitzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yICpmY19leGNoX21ncl9hZGQoc3RydWN0IGZjX2xwb3J0ICpscG9ydCwKKwkJCQkJICAgc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKKwkJCQkJICAgYm9vbCAoKm1hdGNoKShzdHJ1Y3QgZmNfZnJhbWUgKikpOworCisvKgorICogRGVsZXRlcyBFeGNoYW5nZSBNYW5hZ2VyIChFTSkgZnJvbSBscG9ydCBieSByZW1vdmluZworICogaXRzIGFuY2hvciBlbWEgZnJvbSBscG9ydC4KKyAqCisgKiBJZiByZW1vdmVkIGFuY2hvciBlbWEgd2FzIHRoZSBsYXN0IHVzZXIgb2YgaXRzIGFzc29jaWF0ZWQgRU0KKyAqIHRoZW4gYWxzbyBkZXN0cm95cyBhc3NvY2lhdGVkIEVNLgorICovCit2b2lkIGZjX2V4Y2hfbWdyX2RlbChzdHJ1Y3QgZmNfZXhjaF9tZ3JfYW5jaG9yICplbWEpOworCisvKgogICogQWxsb2NhdGVzIGFuIEV4Y2hhbmdlIE1hbmFnZXIgKEVNKS4KICAqCiAgKiBUaGUgRU0gbWFuYWdlcyBleGNoYW5nZXMgZm9yIHRoZWlyIGFsbG9jYXRpb24gYW5kCkBAIC05NzQsMjcgKzk5MSwyNSBAQAogICogYSBuZXcgZXhjaGFuZ2UuCiAgKiBUaGUgTExEIG1heSBjaG9vc2UgdG8gaGF2ZSBtdWx0aXBsZSBFTXMsCiAgKiBlLmcuIG9uZSBFTSBpbnN0YW5jZSBwZXIgQ1BVIHJlY2VpdmUgdGhyZWFkIGluIExMRC4KLSAqIFRoZSBMTEQgY2FuIHVzZSBleGNoX2dldCgpIG9mIHN0cnVjdCBsaWJmY19mdW5jdGlvbl90ZW1wbGF0ZQotICogdG8gc3BlY2lmeSBYSUQgZm9yIGEgbmV3IGV4Y2hhbmdlIHdpdGhpbgotICogYSBzcGVjaWZpZWQgRU0gaW5zdGFuY2UuCiAgKgotICogVGhlIGVtX2lkeCB0byB1bmlxdWVseSBpZGVudGlmeSBhbiBFTSBpbnN0YW5jZS4KKyAqIFNwZWNpZmllZCBtYXRjaCBmdW5jdGlvbiBpcyB1c2VkIGluIGFsbG9jYXRpbmcgZXhjaGFuZ2VzCisgKiBmcm9tIG5ld2x5IGFsbG9jYXRlZCBFTS4KICAqLwogc3RydWN0IGZjX2V4Y2hfbWdyICpmY19leGNoX21ncl9hbGxvYyhzdHJ1Y3QgZmNfbHBvcnQgKmxwLAogCQkJCSAgICAgIGVudW0gZmNfY2xhc3MgY2xhc3MsCiAJCQkJICAgICAgdTE2IG1pbl94aWQsCi0JCQkJICAgICAgdTE2IG1heF94aWQpOworCQkJCSAgICAgIHUxNiBtYXhfeGlkLAorCQkJCSAgICAgIGJvb2wgKCptYXRjaCkoc3RydWN0IGZjX2ZyYW1lICopKTsKIAogLyoKLSAqIEZyZWUgYW4gZXhjaGFuZ2UgbWFuYWdlci4KKyAqIEZyZWUgYWxsIGV4Y2hhbmdlIG1hbmFnZXJzIG9mIGEgbHBvcnQuCiAgKi8KLXZvaWQgZmNfZXhjaF9tZ3JfZnJlZShzdHJ1Y3QgZmNfZXhjaF9tZ3IgKm1wKTsKK3ZvaWQgZmNfZXhjaF9tZ3JfZnJlZShzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0KTsKIAogLyoKICAqIFJlY2VpdmUgYSBmcmFtZSBvbiBzcGVjaWZpZWQgbG9jYWwgcG9ydCBhbmQgZXhjaGFuZ2UgbWFuYWdlci4KICAqLwotdm9pZCBmY19leGNoX3JlY3Yoc3RydWN0IGZjX2xwb3J0ICpscCwgc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKLQkJICBzdHJ1Y3QgZmNfZnJhbWUgKmZwKTsKK3ZvaWQgZmNfZXhjaF9yZWN2KHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19mcmFtZSAqZnApOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgZXhjaF9zZXFfc2VuZCBmdW5jdGlvbiBwb2ludGVyIGluCkBAIC0xMDM2LDI4ICsxMDUxLDIwIEBACiB2b2lkIGZjX2V4Y2hfZG9uZShzdHJ1Y3QgZmNfc2VxICpzcCk7CiAKIC8qCi0gKiBBc3NpZ25zIGEgRU0gYW5kIFhJRCBmb3IgYSBmcmFtZSBhbmQgdGhlbiBhbGxvY2F0ZXMKLSAqIGEgbmV3IGV4Y2hhbmdlIGFuZCBzZXF1ZW5jZSBwYWlyLgotICogVGhlIGZwIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBmcmVlIFhJRC4KLSAqLwotc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfZ2V0KHN0cnVjdCBmY19scG9ydCAqbHAsIHN0cnVjdCBmY19mcmFtZSAqZnApOwotCi0vKgogICogQWxsb2NhdGUgYSBuZXcgZXhjaGFuZ2UgYW5kIHNlcXVlbmNlIHBhaXIuCi0gKiBpZiBleF9pZCBpcyB6ZXJvIHRoZW4gbmV4dCBmcmVlIGV4Y2hhbmdlIGlkCi0gKiBmcm9tIHNwZWNpZmllZCBleGNoYW5nZSBtYW5nZXIgbXAgd2lsbCBiZSBhc3NpZ25lZC4KICAqLwotc3RydWN0IGZjX2V4Y2ggKmZjX2V4Y2hfYWxsb2Moc3RydWN0IGZjX2V4Y2hfbWdyICptcCwKLQkJCSAgICAgIHN0cnVjdCBmY19mcmFtZSAqZnAsIHUxNiBleF9pZCk7CitzdHJ1Y3QgZmNfZXhjaCAqZmNfZXhjaF9hbGxvYyhzdHJ1Y3QgZmNfbHBvcnQgKmxwb3J0LCBzdHJ1Y3QgZmNfZnJhbWUgKmZwKTsKIC8qCiAgKiBTdGFydCBhIG5ldyBzZXF1ZW5jZSBvbiB0aGUgc2FtZSBleGNoYW5nZSBhcyB0aGUgc3VwcGxpZWQgc2VxdWVuY2UuCiAgKi8KIHN0cnVjdCBmY19zZXEgKmZjX3NlcV9zdGFydF9uZXh0KHN0cnVjdCBmY19zZXEgKnNwKTsKIAorCiAvKgotICogUmVzZXQgYW4gZXhjaGFuZ2UgbWFuYWdlciwgY29tcGxldGluZyBhbGwgc2VxdWVuY2VzIGFuZCBleGNoYW5nZXMuCi0gKiBJZiBzX2lkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5IGV4Y2hhbmdlcyBvcmlnaW5hdGluZyBmcm9tIHRoYXQgRklELgotICogSWYgZF9pZCBpcyBub24temVybywgcmVzZXQgb25seSBleGNoYW5nZXMgc2VuZGluZyB0byB0aGF0IEZJRC4KKyAqIFJlc2V0IGFsbCBFTXMgb2YgYSBscG9ydCwgcmVsZWFzaW5nIGl0cyBhbGwgc2VxdWVuY2VzIGFuZAorICogZXhjaGFuZ2VzLiBJZiBzaWQgaXMgbm9uLXplcm8sIHRoZW4gcmVzZXQgb25seSBleGNoYW5nZXMKKyAqIHdlIHNvdXJjZWQgZnJvbSB0aGF0IEZJRC4gSWYgZGlkIGlzIG5vbi16ZXJvLCByZXNldCBvbmx5CisgKiBleGNoYW5nZXMgZGVzdGluZWQgdG8gdGhhdCBGSUQuCiAgKi8KIHZvaWQgZmNfZXhjaF9tZ3JfcmVzZXQoc3RydWN0IGZjX2xwb3J0ICosIHUzMiBzX2lkLCB1MzIgZF9pZCk7CiAKQEAgLTEwNzgsNCArMTA4NSw5IEBACiBpbnQgZmNfc2V0dXBfcnBvcnQodm9pZCk7CiB2b2lkIGZjX2Rlc3Ryb3lfcnBvcnQodm9pZCk7CiAKKy8qCisgKiBJbnRlcm5hbCBsaWJmYyBmdW5jdGlvbnMuCisgKi8KK2NvbnN0IGNoYXIgKmZjX2Vsc19yZXNwX3R5cGUoc3RydWN0IGZjX2ZyYW1lICopOworCiAjZW5kaWYgLyogX0xJQkZDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDYxYWZlYjUuLjg4N2U1N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0zOTAsNiArMzkwLDcgQEAKIGV4dGVybiBpbnQgaXNjc2lfY29ubl9nZXRfcGFyYW0oc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKIAkJCQllbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpOwogZXh0ZXJuIHZvaWQgaXNjc2lfc3VzcGVuZF90eChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubik7CitleHRlcm4gdm9pZCBpc2NzaV9zdXNwZW5kX3F1ZXVlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKTsKIGV4dGVybiB2b2lkIGlzY3NpX2Nvbm5fcXVldWVfd29yayhzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubik7CiAKICNkZWZpbmUgaXNjc2lfY29ubl9wcmludGsocHJlZml4LCBfYywgZm10LCBhLi4uKSBcCkBAIC00MTUsNiArNDE2LDggQEAKIGV4dGVybiB2b2lkIGlzY3NpX3JlcXVldWVfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayk7CiBleHRlcm4gdm9pZCBpc2NzaV9wdXRfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzayk7CiBleHRlcm4gdm9pZCBfX2lzY3NpX2dldF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKTsKK2V4dGVybiB2b2lkIGlzY3NpX2NvbXBsZXRlX3Njc2lfdGFzayhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywKKwkJCQkgICAgIHVpbnQzMl90IGV4cF9jbWRzbiwgdWludDMyX3QgbWF4X2NtZHNuKTsKIAogLyoKICAqIGdlbmVyaWMgaGVscGVycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAzZjU2NmFmLi45YWY0OGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMTg3LDEwICsxODcsMTMgQEAKIAl2b2lkICgqZGV0YWNoKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CiAJaW50ICgqYWN0aXZhdGUpKHN0cnVjdCBzY3NpX2RldmljZSAqKTsKIAlpbnQgKCpwcmVwX2ZuKShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgc3RydWN0IHJlcXVlc3QgKik7CisJaW50ICgqc2V0X3BhcmFtcykoc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKik7CiB9OwogCiBzdHJ1Y3Qgc2NzaV9kaF9kYXRhIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2VfaGFuZGxlciAqc2NzaV9kaDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IGtyZWYga3JlZjsKIAljaGFyIGJ1ZlswXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2RoLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kaC5oCmluZGV4IDMzZWZjZTIuLmZmMjQwNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RoLmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfZGguaApAQCAtNjAsNiArNjAsNyBAQAogZXh0ZXJuIGludCBzY3NpX2RoX2hhbmRsZXJfZXhpc3QoY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgc2NzaV9kaF9hdHRhY2goc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiB2b2lkIHNjc2lfZGhfZGV0YWNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOworZXh0ZXJuIGludCBzY3NpX2RoX3NldF9wYXJhbXMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgY29uc3QgY2hhciAqKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBzY3NpX2RoX2FjdGl2YXRlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyZXEpCiB7CkBAIC03Nyw0ICs3OCw4IEBACiB7CiAJcmV0dXJuOwogfQorc3RhdGljIGlubGluZSBpbnQgc2NzaV9kaF9zZXRfcGFyYW1zKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyZXEsIGNvbnN0IGNoYXIgKnBhcmFtcykKK3sKKwlyZXR1cm4gLVNDU0lfREhfTk9TWVM7Cit9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlMTA4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2t2bS5oCkBAIC0wLDAgKzEsMTUxIEBACisjaWYgIWRlZmluZWQoX1RSQUNFX0tWTV9NQUlOX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9LVk1fTUFJTl9ICisKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGt2bQorI2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUga3ZtCisKKyNpZiBkZWZpbmVkKF9fS1ZNX0hBVkVfSU9BUElDKQorVFJBQ0VfRVZFTlQoa3ZtX3NldF9pcnEsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IGdzaSwgaW50IGxldmVsLCBpbnQgaXJxX3NvdXJjZV9pZCksCisJVFBfQVJHUyhnc2ksIGxldmVsLCBpcnFfc291cmNlX2lkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJZ3NpCQkpCisJCV9fZmllbGQoCWludCwJCWxldmVsCQkpCisJCV9fZmllbGQoCWludCwJCWlycV9zb3VyY2VfaWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Z3NpCQk9IGdzaTsKKwkJX19lbnRyeS0+bGV2ZWwJCT0gbGV2ZWw7CisJCV9fZW50cnktPmlycV9zb3VyY2VfaWQJPSBpcnFfc291cmNlX2lkOworCSksCisKKwlUUF9wcmludGsoImdzaSAldSBsZXZlbCAlZCBzb3VyY2UgJWQiLAorCQkgIF9fZW50cnktPmdzaSwgX19lbnRyeS0+bGV2ZWwsIF9fZW50cnktPmlycV9zb3VyY2VfaWQpCispOworCisjZGVmaW5lIGt2bV9kZWxpdmVyX21vZGUJCVwKKwl7MHgwLCAiRml4ZWQifSwJCQlcCisJezB4MSwgIkxvd1ByaW8ifSwJCVwKKwl7MHgyLCAiU01JIn0sCQkJXAorCXsweDMsICJSZXMzIn0sCQkJXAorCXsweDQsICJOTUkifSwJCQlcCisJezB4NSwgIklOSVQifSwJCQlcCisJezB4NiwgIlNJUEkifSwJCQlcCisJezB4NywgIkV4dElOVCJ9CisKK1RSQUNFX0VWRU5UKGt2bV9pb2FwaWNfc2V0X2lycSwKKwkgICAgVFBfUFJPVE8oX191NjQgZSwgaW50IHBpbiwgYm9vbCBjb2FsZXNjZWQpLAorCSAgICBUUF9BUkdTKGUsIHBpbiwgY29hbGVzY2VkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCV9fdTY0LAkJZQkJKQorCQlfX2ZpZWxkKAlpbnQsCQlwaW4JCSkKKwkJX19maWVsZCgJYm9vbCwJCWNvYWxlc2NlZAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5lCQk9IGU7CisJCV9fZW50cnktPnBpbgkJPSBwaW47CisJCV9fZW50cnktPmNvYWxlc2NlZAk9IGNvYWxlc2NlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJwaW4gJXUgZHN0ICV4IHZlYz0ldSAoJXN8JXN8JXMlcyklcyIsCisJCSAgX19lbnRyeS0+cGluLCAodTgpKF9fZW50cnktPmUgPj4gNTYpLCAodTgpX19lbnRyeS0+ZSwKKwkJICBfX3ByaW50X3N5bWJvbGljKChfX2VudHJ5LT5lID4+IDggJiAweDcpLCBrdm1fZGVsaXZlcl9tb2RlKSwKKwkJICAoX19lbnRyeS0+ZSAmICgxPDwxMSkpID8gImxvZ2ljYWwiIDogInBoeXNpY2FsIiwKKwkJICAoX19lbnRyeS0+ZSAmICgxPDwxNSkpID8gImxldmVsIiA6ICJlZGdlIiwKKwkJICAoX19lbnRyeS0+ZSAmICgxPDwxNikpID8gInxtYXNrZWQiIDogIiIsCisJCSAgX19lbnRyeS0+Y29hbGVzY2VkID8gIiAoY29hbGVzY2VkKSIgOiAiIikKKyk7CisKK1RSQUNFX0VWRU5UKGt2bV9tc2lfc2V0X2lycSwKKwkgICAgVFBfUFJPVE8oX191NjQgYWRkcmVzcywgX191NjQgZGF0YSksCisJICAgIFRQX0FSR1MoYWRkcmVzcywgZGF0YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlfX3U2NCwJCWFkZHJlc3MJCSkKKwkJX19maWVsZCgJX191NjQsCQlkYXRhCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5hZGRyZXNzCT0gYWRkcmVzczsKKwkJX19lbnRyeS0+ZGF0YQkJPSBkYXRhOworCSksCisKKwlUUF9wcmludGsoImRzdCAldSB2ZWMgJXggKCVzfCVzfCVzJXMpIiwKKwkJICAodTgpKF9fZW50cnktPmFkZHJlc3MgPj4gMTIpLCAodTgpX19lbnRyeS0+ZGF0YSwKKwkJICBfX3ByaW50X3N5bWJvbGljKChfX2VudHJ5LT5kYXRhID4+IDggJiAweDcpLCBrdm1fZGVsaXZlcl9tb2RlKSwKKwkJICAoX19lbnRyeS0+YWRkcmVzcyAmICgxPDwyKSkgPyAibG9naWNhbCIgOiAicGh5c2ljYWwiLAorCQkgIChfX2VudHJ5LT5kYXRhICYgKDE8PDE1KSkgPyAibGV2ZWwiIDogImVkZ2UiLAorCQkgIChfX2VudHJ5LT5hZGRyZXNzICYgKDE8PDMpKSA/ICJ8cmgiIDogIiIpCispOworCisjZGVmaW5lIGt2bV9pcnFjaGlwcwkJCQkJCVwKKwl7S1ZNX0lSUUNISVBfUElDX01BU1RFUiwJIlBJQyBtYXN0ZXIifSwJCVwKKwl7S1ZNX0lSUUNISVBfUElDX1NMQVZFLAkJIlBJQyBzbGF2ZSJ9LAkJXAorCXtLVk1fSVJRQ0hJUF9JT0FQSUMsCQkiSU9BUElDIn0KKworVFJBQ0VfRVZFTlQoa3ZtX2Fja19pcnEsCisJVFBfUFJPVE8odW5zaWduZWQgaW50IGlycWNoaXAsIHVuc2lnbmVkIGludCBwaW4pLAorCVRQX0FSR1MoaXJxY2hpcCwgcGluKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXVuc2lnbmVkIGludCwJaXJxY2hpcAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCXBpbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+aXJxY2hpcAk9IGlycWNoaXA7CisJCV9fZW50cnktPnBpbgkJPSBwaW47CisJKSwKKworCVRQX3ByaW50aygiaXJxY2hpcCAlcyBwaW4gJXUiLAorCQkgIF9fcHJpbnRfc3ltYm9saWMoX19lbnRyeS0+aXJxY2hpcCwga3ZtX2lycWNoaXBzKSwKKwkJIF9fZW50cnktPnBpbikKKyk7CisKKworCisjZW5kaWYgLyogZGVmaW5lZChfX0tWTV9IQVZFX0lPQVBJQykgKi8KKworI2RlZmluZSBLVk1fVFJBQ0VfTU1JT19SRUFEX1VOU0FUSVNGSUVEIDAKKyNkZWZpbmUgS1ZNX1RSQUNFX01NSU9fUkVBRCAxCisjZGVmaW5lIEtWTV9UUkFDRV9NTUlPX1dSSVRFIDIKKworI2RlZmluZSBrdm1fdHJhY2Vfc3ltYm9sX21taW8gXAorCXsgS1ZNX1RSQUNFX01NSU9fUkVBRF9VTlNBVElTRklFRCwgInVuc2F0aXNmaWVkLXJlYWQiIH0sIFwKKwl7IEtWTV9UUkFDRV9NTUlPX1JFQUQsICJyZWFkIiB9LCBcCisJeyBLVk1fVFJBQ0VfTU1JT19XUklURSwgIndyaXRlIiB9CisKK1RSQUNFX0VWRU5UKGt2bV9tbWlvLAorCVRQX1BST1RPKGludCB0eXBlLCBpbnQgbGVuLCB1NjQgZ3BhLCB1NjQgdmFsKSwKKwlUUF9BUkdTKHR5cGUsIGxlbiwgZ3BhLCB2YWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJdTMyLAl0eXBlCQkpCisJCV9fZmllbGQoCXUzMiwJbGVuCQkpCisJCV9fZmllbGQoCXU2NCwJZ3BhCQkpCisJCV9fZmllbGQoCXU2NCwJdmFsCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT50eXBlCQk9IHR5cGU7CisJCV9fZW50cnktPmxlbgkJPSBsZW47CisJCV9fZW50cnktPmdwYQkJPSBncGE7CisJCV9fZW50cnktPnZhbAkJPSB2YWw7CisJKSwKKworCVRQX3ByaW50aygibW1pbyAlcyBsZW4gJXUgZ3BhIDB4JWxseCB2YWwgMHglbGx4IiwKKwkJICBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPnR5cGUsIGt2bV90cmFjZV9zeW1ib2xfbW1pbyksCisJCSAgX19lbnRyeS0+bGVuLCBfX2VudHJ5LT5ncGEsIF9fZW50cnktPnZhbCkKKyk7CisKKyNlbmRpZiAvKiBfVFJBQ0VfS1ZNX01BSU5fSCAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NrYi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvc2tiLmgKaW5kZXggZTQ5OTg2M2IuLjRiMmJlNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NrYi5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3NrYi5oCkBAIC01LDYgKzUsNyBAQAogI2RlZmluZSBfVFJBQ0VfU0tCX0gKIAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAogLyoKQEAgLTM0LDYgKzM1LDI1IEBACiAJCV9fZW50cnktPnNrYmFkZHIsIF9fZW50cnktPnByb3RvY29sLCBfX2VudHJ5LT5sb2NhdGlvbikKICk7CiAKK1RSQUNFX0VWRU5UKHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjLAorCisJVFBfUFJPVE8oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiksCisKKwlUUF9BUkdTKHNrYiwgbGVuKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWNvbnN0IHZvaWQgKiwJCXNrYmFkZHIJCSkKKwkJX19maWVsZCgJaW50LAkJCWxlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c2tiYWRkciA9IHNrYjsKKwkJX19lbnRyeS0+bGVuID0gbGVuOworCSksCisKKwlUUF9wcmludGsoInNrYmFkZHI9JXAgbGVuPSVkIiwgX19lbnRyeS0+c2tiYWRkciwgX19lbnRyeS0+bGVuKQorKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9TS0JfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCAxYmM0NzAxLi4zMDE2MmE1IDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC00MTAsNyArNDEwLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiAKIG5vX2lkOgotCWlmIChzaHAtPm1sb2NrX3VzZXIpCS8qIHNobWZsZyAmIFNITV9IVUdFVExCIGNhc2UgKi8KKwlpZiAoaXNfZmlsZV9odWdlcGFnZXMoZmlsZSkgJiYgc2hwLT5tbG9ja191c2VyKQogCQl1c2VyX3NobV91bmxvY2soc2l6ZSwgc2hwLT5tbG9ja191c2VyKTsKIAlmcHV0KGZpbGUpOwogbm9fZmlsZToKZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCBiODMzYmQ1Li45NjEzNzljIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQogCiBxdWlldF9jbWRfaWtjb25maWdneiA9IElLQ0ZHICAgJEAKLSAgICAgIGNtZF9pa2NvbmZpZ2d6ID0gKGVjaG8gInN0YXRpYyBjb25zdCBjaGFyIGtlcm5lbF9jb25maWdfZGF0YVtdID0gTUFHSUNfU1RBUlQiOyBjYXQgJDwgfCBzY3JpcHRzL2JpbjJjOyBlY2hvICJNQUdJQ19FTkQ7IikgPiAkQAorICAgICAgY21kX2lrY29uZmlnZ3ogPSAoZWNobyAic3RhdGljIGNvbnN0IGNoYXIga2VybmVsX2NvbmZpZ19kYXRhW10gX191c2VkID0gTUFHSUNfU1RBUlQiOyBjYXQgJDwgfCBzY3JpcHRzL2JpbjJjOyBlY2hvICJNQUdJQ19FTkQ7IikgPiAkQAogdGFyZ2V0cyArPSBjb25maWdfZGF0YS5oCiAkKG9iaikvY29uZmlnX2RhdGEuaDogJChvYmopL2NvbmZpZ19kYXRhLmd6IEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsaWtjb25maWdneikKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IDQ5ZGE3OWEuLjA1MDcxYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNDg1LDYgKzQ4NSw3IEBACiAJZGVidWdfb2JqZWN0X2luaXRfb25fc3RhY2sodGltZXIsICZocnRpbWVyX2RlYnVnX2Rlc2NyKTsKIAlfX2hydGltZXJfaW5pdCh0aW1lciwgY2xvY2tfaWQsIG1vZGUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9pbml0X29uX3N0YWNrKTsKIAogdm9pZCBkZXN0cm95X2hydGltZXJfb25fc3RhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKQogewpAQCAtMTQ3Nyw2ICsxNDc4LDcgQEAKIAlzbC0+dGltZXIuZnVuY3Rpb24gPSBocnRpbWVyX3dha2V1cDsKIAlzbC0+dGFzayA9IHRhc2s7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChocnRpbWVyX2luaXRfc2xlZXBlcik7CiAKIHN0YXRpYyBpbnQgX19zY2hlZCBkb19uYW5vc2xlZXAoc3RydWN0IGhydGltZXJfc2xlZXBlciAqdCwgZW51bSBocnRpbWVyX21vZGUgbW9kZSkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggNzIwNjdjYi4uOTFlMDlkMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTIwOCwzICsyMDgsMTcgQEAKIAkgIHJhbmRvbSBrZXJuZWwgT09QU2VzIG9yIHJlYm9vdHMgdGhhdCBkb24ndCBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8KIAkgIGFueXRoaW5nLCB0cnkgZGlzYWJsaW5nL2VuYWJsaW5nIHRoaXMgb3B0aW9uIChvciBkaXNhYmxpbmcvZW5hYmxpbmcKIAkgIEFQTSBpbiB5b3VyIEJJT1MpLgorCitjb25maWcgUE1fUlVOVElNRQorCWJvb2wgIlJ1bi10aW1lIFBNIGNvcmUgZnVuY3Rpb25hbGl0eSIKKwlkZXBlbmRzIG9uIFBNCisJLS0taGVscC0tLQorCSAgRW5hYmxlIGZ1bmN0aW9uYWxpdHkgYWxsb3dpbmcgSS9PIGRldmljZXMgdG8gYmUgcHV0IGludG8gZW5lcmd5LXNhdmluZworCSAgKGxvdyBwb3dlcikgc3RhdGVzIGF0IHJ1biB0aW1lIChvciBhdXRvc3VzcGVuZGVkKSBhZnRlciBhIHNwZWNpZmllZAorCSAgcGVyaW9kIG9mIGluYWN0aXZpdHkgYW5kIHdva2VuIHVwIGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUtZ2VuZXJhdGVkCisJICB3YWtlLXVwIGV2ZW50IG9yIGEgZHJpdmVyJ3MgcmVxdWVzdC4KKworCSAgSGFyZHdhcmUgc3VwcG9ydCBpcyBnZW5lcmFsbHkgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB3b3JrCisJICBhbmQgdGhlIGJ1cyB0eXBlIGRyaXZlcnMgb2YgdGhlIGJ1c2VzIHRoZSBkZXZpY2VzIGFyZSBvbiBhcmUKKwkgIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGhhbmRsaW5nIG9mIHRoZSBhdXRvc3VzcGVuZCByZXF1ZXN0cyBhbmQKKwkgIHdha2UtdXAgZXZlbnRzLgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IDgxZDJlNzQuLjA0YjNhODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTI5OCw4ICsyOTgsOCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JLyogRnJlZSBtZW1vcnkgYmVmb3JlIHNodXR0aW5nIGRvd24gZGV2aWNlcy4gKi8KLQllcnJvciA9IHN3c3VzcF9zaHJpbmtfbWVtb3J5KCk7CisJLyogUHJlYWxsb2NhdGUgaW1hZ2UgbWVtb3J5IGJlZm9yZSBzaHV0dGluZyBkb3duIGRldmljZXMuICovCisJZXJyb3IgPSBoaWJlcm5hdGVfcHJlYWxsb2NhdGVfbWVtb3J5KCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIENsb3NlOwogCkBAIC0zMTUsNiArMzE1LDEwIEBACiAJLyogQ29udHJvbCByZXR1cm5zIGhlcmUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXN0b3JlICovCiAKICBSZXN1bWVfZGV2aWNlczoKKwkvKiBXZSBtYXkgbmVlZCB0byByZWxlYXNlIHRoZSBwcmVhbGxvY2F0ZWQgaW1hZ2UgcGFnZXMgaGVyZS4gKi8KKwlpZiAoZXJyb3IgfHwgIWluX3N1c3BlbmQpCisJCXN3c3VzcF9mcmVlKCk7CisKIAlkcG1fcmVzdW1lX2VuZChpbl9zdXNwZW5kID8KIAkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKQEAgLTQ2MCwxMSArNDY0LDExIEBACiAKIAllcnJvciA9IGhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSgpOwogCWlmIChlcnJvcikKLQkJZ290byBQbGF0b2ZybV9maW5pc2g7CisJCWdvdG8gUGxhdGZvcm1fZmluaXNoOwogCiAJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwogCWlmIChlcnJvcikKLQkJZ290byBQbGF0b2ZybV9maW5pc2g7CisJCWdvdG8gUGxhdGZvcm1fZmluaXNoOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7CkBAIC00NzYsNyArNDgwLDcgQEAKIAkgKiBXZSBkb24ndCBuZWVkIHRvIHJlZW5hYmxlIHRoZSBub25ib290IENQVXMgb3IgcmVzdW1lIGNvbnNvbGVzLCBzaW5jZQogCSAqIHRoZSBzeXN0ZW0gaXMgZ29pbmcgdG8gYmUgaGFsdGVkIGFueXdheS4KIAkgKi8KLSBQbGF0b2ZybV9maW5pc2g6CisgUGxhdGZvcm1fZmluaXNoOgogCWhpYmVybmF0aW9uX29wcy0+ZmluaXNoKCk7CiAKIAlkcG1fc3VzcGVuZF9ub2lycShQTVNHX1JFU1RPUkUpOwpAQCAtNTc4LDcgKzU4MiwxMCBAQAogCQlnb3RvIFRoYXc7CiAKIAllcnJvciA9IGhpYmVybmF0aW9uX3NuYXBzaG90KGhpYmVybmF0aW9uX21vZGUgPT0gSElCRVJOQVRJT05fUExBVEZPUk0pOwotCWlmIChpbl9zdXNwZW5kICYmICFlcnJvcikgeworCWlmIChlcnJvcikKKwkJZ290byBUaGF3OworCisJaWYgKGluX3N1c3BlbmQpIHsKIAkJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAogCQlpZiAoaGliZXJuYXRpb25fbW9kZSA9PSBISUJFUk5BVElPTl9QTEFURk9STSkKQEAgLTU5MCw4ICs1OTcsOCBAQAogCQkJcG93ZXJfZG93bigpOwogCX0gZWxzZSB7CiAJCXByX2RlYnVnKCJQTTogSW1hZ2UgcmVzdG9yZWQgc3VjY2Vzc2Z1bGx5LlxuIik7Ci0JCXN3c3VzcF9mcmVlKCk7CiAJfQorCiAgVGhhdzoKIAl0aGF3X3Byb2Nlc3NlcygpOwogIEZpbmlzaDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGY3MTBlMzYuLjM0N2QyY2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9yZXN1bWUtdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgInBvd2VyLmgiCiAKQEAgLTIxNyw4ICsyMTgsMjQgQEAKIAkuYXR0cnMgPSBnLAogfTsKIAorI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcG1fd3E7CisKK3N0YXRpYyBpbnQgX19pbml0IHBtX3N0YXJ0X3dvcmtxdWV1ZSh2b2lkKQoreworCXBtX3dxID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJwbSIpOworCisJcmV0dXJuIHBtX3dxID8gMCA6IC1FTk9NRU07Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcG1fc3RhcnRfd29ya3F1ZXVlKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCiBzdGF0aWMgaW50IF9faW5pdCBwbV9pbml0KHZvaWQpCiB7CisJaW50IGVycm9yID0gcG1fc3RhcnRfd29ya3F1ZXVlKCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAJcG93ZXJfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInBvd2VyIiwgTlVMTCk7CiAJaWYgKCFwb3dlcl9rb2JqKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wb3dlci5oIGIva2VybmVsL3Bvd2VyL3Bvd2VyLmgKaW5kZXggMjZkNWEyNi4uNDZjNWEyNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Bvd2VyLmgKKysrIGIva2VybmVsL3Bvd2VyL3Bvd2VyLmgKQEAgLTc0LDcgKzc0LDcgQEAKIAogZXh0ZXJuIGludCBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHModm9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX2Jhc2ljX21lbW9yeV9iaXRtYXBzKHZvaWQpOwotZXh0ZXJuIGludCBzd3N1c3Bfc2hyaW5rX21lbW9yeSh2b2lkKTsKK2V4dGVybiBpbnQgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSh2b2lkKTsKIAogLyoqCiAgKglBdXhpbGlhcnkgc3RydWN0dXJlIHVzZWQgZm9yIHJlYWRpbmcgdGhlIHNuYXBzaG90IGltYWdlIGRhdGEgYW5kCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IDUyM2E0NTEuLjk3OTU1YjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogI2RlZmluZSBCTV9FTkRfT0ZfTUFQCSh+MFVMKQogCi0jZGVmaW5lIEJNX0JJVFNfUEVSX0JMT0NLCShQQUdFX1NJWkUgPDwgMykKKyNkZWZpbmUgQk1fQklUU19QRVJfQkxPQ0sJKFBBR0VfU0laRSAqIEJJVFNfUEVSX0JZVEUpCiAKIHN0cnVjdCBibV9ibG9jayB7CiAJc3RydWN0IGxpc3RfaGVhZCBob29rOwkvKiBob29rIGludG8gYSBsaXN0IG9mIGJpdG1hcCBibG9ja3MgKi8KQEAgLTI3NSw3ICsyNzUsNyBAQAogCiAvKioKICAqCWNyZWF0ZV9ibV9ibG9ja19saXN0IC0gY3JlYXRlIGEgbGlzdCBvZiBibG9jayBiaXRtYXAgb2JqZWN0cwotICoJQG5yX2Jsb2NrcyAtIG51bWJlciBvZiBibG9ja3MgdG8gYWxsb2NhdGUKKyAqCUBwYWdlcyAtIG51bWJlciBvZiBwYWdlcyB0byB0cmFjawogICoJQGxpc3QgLSBsaXN0IHRvIHB1dCB0aGUgYWxsb2NhdGVkIGJsb2NrcyBpbnRvCiAgKglAY2EgLSBjaGFpbiBhbGxvY2F0b3IgdG8gYmUgdXNlZCBmb3IgYWxsb2NhdGluZyBtZW1vcnkKICAqLwpAQCAtODUzLDcgKzg1Myw3IEBACiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJdW5zaWduZWQgaW50IG4gPSAwOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQl1bnNpZ25lZCBsb25nIHBmbiwgbWF4X3pvbmVfcGZuOwogCiAJCWlmICghaXNfaGlnaG1lbSh6b25lKSkKQEAgLTkxNiw3ICs5MTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGZuLCBtYXhfem9uZV9wZm47CiAJdW5zaWduZWQgaW50IG4gPSAwOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgcGZuOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbjsKIAogCQltYXJrX2ZyZWVfcGFnZXMoem9uZSk7CkBAIC0xMDMzLDYgKzEwMzMsMjUgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfY29weV9wYWdlczsKIC8qIE51bWJlciBvZiBwYWdlcyBuZWVkZWQgZm9yIHNhdmluZyB0aGUgb3JpZ2luYWwgcGZucyBvZiB0aGUgaW1hZ2UgcGFnZXMgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnJfbWV0YV9wYWdlczsKKy8qCisgKiBOdW1iZXJzIG9mIG5vcm1hbCBhbmQgaGlnaG1lbSBwYWdlIGZyYW1lcyBhbGxvY2F0ZWQgZm9yIGhpYmVybmF0aW9uIGltYWdlCisgKiBiZWZvcmUgc3VzcGVuZGluZyBkZXZpY2VzLgorICovCit1bnNpZ25lZCBpbnQgYWxsb2Nfbm9ybWFsLCBhbGxvY19oaWdobWVtOworLyoKKyAqIE1lbW9yeSBiaXRtYXAgdXNlZCBmb3IgbWFya2luZyBzYXZlYWJsZSBwYWdlcyAoZHVyaW5nIGhpYmVybmF0aW9uKSBvcgorICogaGliZXJuYXRpb24gaW1hZ2UgcGFnZXMgKGR1cmluZyByZXN0b3JlKQorICovCitzdGF0aWMgc3RydWN0IG1lbW9yeV9iaXRtYXAgb3JpZ19ibTsKKy8qCisgKiBNZW1vcnkgYml0bWFwIHVzZWQgZHVyaW5nIGhpYmVybmF0aW9uIGZvciBtYXJraW5nIGFsbG9jYXRlZCBwYWdlIGZyYW1lcyB0aGF0CisgKiB3aWxsIGNvbnRhaW4gY29waWVzIG9mIHNhdmVhYmxlIHBhZ2VzLiAgRHVyaW5nIHJlc3RvcmUgaXQgaXMgaW5pdGlhbGx5IHVzZWQKKyAqIGZvciBtYXJraW5nIGhpYmVybmF0aW9uIGltYWdlIHBhZ2VzLCBidXQgdGhlbiB0aGUgc2V0IGJpdHMgZnJvbSBpdCBhcmUKKyAqIGR1cGxpY2F0ZWQgaW4gQG9yaWdfYm0gYW5kIGl0IGlzIHJlbGVhc2VkLiAgT24gaGlnaG1lbSBzeXN0ZW1zIGl0IGlzIG5leHQKKyAqIHVzZWQgZm9yIG1hcmtpbmcgInNhZmUiIGhpZ2htZW0gcGFnZXMsIGJ1dCBpdCBoYXMgdG8gYmUgcmVpbml0aWFsaXplZCBmb3IKKyAqIHRoaXMgcHVycG9zZS4KKyAqLworc3RhdGljIHN0cnVjdCBtZW1vcnlfYml0bWFwIGNvcHlfYm07CiAKIC8qKgogICoJc3dzdXNwX2ZyZWUgLSBmcmVlIHBhZ2VzIGFsbG9jYXRlZCBmb3IgdGhlIHN1c3BlbmQuCkBAIC0xMDQ2LDcgKzEwNjUsNyBAQAogCXN0cnVjdCB6b25lICp6b25lOwogCXVuc2lnbmVkIGxvbmcgcGZuLCBtYXhfem9uZV9wZm47CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCW1heF96b25lX3BmbiA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuICsgem9uZS0+c3Bhbm5lZF9wYWdlczsKIAkJZm9yIChwZm4gPSB6b25lLT56b25lX3N0YXJ0X3BmbjsgcGZuIDwgbWF4X3pvbmVfcGZuOyBwZm4rKykKIAkJCWlmIChwZm5fdmFsaWQocGZuKSkgewpAQCAtMTA2NCw3NCArMTA4MywyODYgQEAKIAlucl9tZXRhX3BhZ2VzID0gMDsKIAlyZXN0b3JlX3BibGlzdCA9IE5VTEw7CiAJYnVmZmVyID0gTlVMTDsKKwlhbGxvY19ub3JtYWwgPSAwOworCWFsbG9jX2hpZ2htZW0gPSAwOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgZm9yIHRoZSBzaHJpbmtpbmcgb2YgbWVtb3J5LiAqLworCisjZGVmaW5lIEdGUF9JTUFHRQkoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTikKKworLyoqCisgKiBwcmVhbGxvY2F0ZV9pbWFnZV9wYWdlcyAtIEFsbG9jYXRlIGEgbnVtYmVyIG9mIHBhZ2VzIGZvciBoaWJlcm5hdGlvbiBpbWFnZQorICogQG5yX3BhZ2VzOiBOdW1iZXIgb2YgcGFnZSBmcmFtZXMgdG8gYWxsb2NhdGUuCisgKiBAbWFzazogR0ZQIGZsYWdzIHRvIHVzZSBmb3IgdGhlIGFsbG9jYXRpb24uCisgKgorICogUmV0dXJuIHZhbHVlOiBOdW1iZXIgb2YgcGFnZSBmcmFtZXMgYWN0dWFsbHkgYWxsb2NhdGVkCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByZWFsbG9jYXRlX2ltYWdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGdmcF90IG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBucl9hbGxvYyA9IDA7CisKKwl3aGlsZSAobnJfcGFnZXMgPiAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCisJCXBhZ2UgPSBhbGxvY19pbWFnZV9wYWdlKG1hc2spOworCQlpZiAoIXBhZ2UpCisJCQlicmVhazsKKwkJbWVtb3J5X2JtX3NldF9iaXQoJmNvcHlfYm0sIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKKwkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQorCQkJYWxsb2NfaGlnaG1lbSsrOworCQllbHNlCisJCQlhbGxvY19ub3JtYWwrKzsKKwkJbnJfcGFnZXMtLTsKKwkJbnJfYWxsb2MrKzsKKwl9CisKKwlyZXR1cm4gbnJfYWxsb2M7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHByZWFsbG9jYXRlX2ltYWdlX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCXJldHVybiBwcmVhbGxvY2F0ZV9pbWFnZV9wYWdlcyhucl9wYWdlcywgR0ZQX0lNQUdFKTsKK30KKworI2lmZGVmIENPTkZJR19ISUdITUVNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmVhbGxvY2F0ZV9pbWFnZV9oaWdobWVtKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCit7CisJcmV0dXJuIHByZWFsbG9jYXRlX2ltYWdlX3BhZ2VzKG5yX3BhZ2VzLCBHRlBfSU1BR0UgfCBfX0dGUF9ISUdITUVNKTsKIH0KIAogLyoqCi0gKglzd3N1c3Bfc2hyaW5rX21lbW9yeSAtICBUcnkgdG8gZnJlZSBhcyBtdWNoIG1lbW9yeSBhcyBuZWVkZWQKLSAqCi0gKgkuLi4gYnV0IGRvIG5vdCBPT00ta2lsbCBhbnlvbmUKLSAqCi0gKglOb3RpY2U6IGFsbCB1c2VybGFuZCBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgaXQgaXMgY2FsbGVkLCBvcgotICoJbGl2ZWxvY2sgaXMgcG9zc2libGUuCisgKiAgX19mcmFjdGlvbiAtIENvbXB1dGUgKGFuIGFwcHJveGltYXRpb24gb2YpIHggKiAobXVsdGlwbGllciAvIGJhc2UpCiAgKi8KLQotI2RlZmluZSBTSFJJTktfQklURQkxMDAwMAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fc2hyaW5rX21lbW9yeShsb25nIHRtcCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fZnJhY3Rpb24odTY0IHgsIHU2NCBtdWx0aXBsaWVyLCB1NjQgYmFzZSkKIHsKLQlpZiAodG1wID4gU0hSSU5LX0JJVEUpCi0JCXRtcCA9IFNIUklOS19CSVRFOwotCXJldHVybiBzaHJpbmtfYWxsX21lbW9yeSh0bXApOworCXggKj0gbXVsdGlwbGllcjsKKwlkb19kaXYoeCwgYmFzZSk7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXg7CiB9CiAKLWludCBzd3N1c3Bfc2hyaW5rX21lbW9yeSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2NhdGVfaGlnaG1lbV9mcmFjdGlvbih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJCQkJdW5zaWduZWQgbG9uZyBoaWdobWVtLAorCQkJCQkJdW5zaWduZWQgbG9uZyB0b3RhbCkKIHsKLQlsb25nIHRtcDsKKwl1bnNpZ25lZCBsb25nIGFsbG9jID0gX19mcmFjdGlvbihucl9wYWdlcywgaGlnaG1lbSwgdG90YWwpOworCisJcmV0dXJuIHByZWFsbG9jYXRlX2ltYWdlX3BhZ2VzKGFsbG9jLCBHRlBfSU1BR0UgfCBfX0dGUF9ISUdITUVNKTsKK30KKyNlbHNlIC8qIENPTkZJR19ISUdITUVNICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2NhdGVfaW1hZ2VfaGlnaG1lbSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2NhdGVfaGlnaG1lbV9mcmFjdGlvbih1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJCQkJdW5zaWduZWQgbG9uZyBoaWdobWVtLAorCQkJCQkJdW5zaWduZWQgbG9uZyB0b3RhbCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLworCisvKioKKyAqIGZyZWVfdW5uZWNlc3NhcnlfcGFnZXMgLSBSZWxlYXNlIHByZWFsbG9jYXRlZCBwYWdlcyBub3QgbmVlZGVkIGZvciB0aGUgaW1hZ2UKKyAqLworc3RhdGljIHZvaWQgZnJlZV91bm5lY2Vzc2FyeV9wYWdlcyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2F2ZV9oaWdobWVtLCB0b19mcmVlX25vcm1hbCwgdG9fZnJlZV9oaWdobWVtOworCisJdG9fZnJlZV9ub3JtYWwgPSBhbGxvY19ub3JtYWwgLSBjb3VudF9kYXRhX3BhZ2VzKCk7CisJc2F2ZV9oaWdobWVtID0gY291bnRfaGlnaG1lbV9wYWdlcygpOworCWlmIChhbGxvY19oaWdobWVtID4gc2F2ZV9oaWdobWVtKSB7CisJCXRvX2ZyZWVfaGlnaG1lbSA9IGFsbG9jX2hpZ2htZW0gLSBzYXZlX2hpZ2htZW07CisJfSBlbHNlIHsKKwkJdG9fZnJlZV9oaWdobWVtID0gMDsKKwkJdG9fZnJlZV9ub3JtYWwgLT0gc2F2ZV9oaWdobWVtIC0gYWxsb2NfaGlnaG1lbTsKKwl9CisKKwltZW1vcnlfYm1fcG9zaXRpb25fcmVzZXQoJmNvcHlfYm0pOworCisJd2hpbGUgKHRvX2ZyZWVfbm9ybWFsID4gMCAmJiB0b19mcmVlX2hpZ2htZW0gPiAwKSB7CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gbWVtb3J5X2JtX25leHRfcGZuKCZjb3B5X2JtKTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCisJCWlmIChQYWdlSGlnaE1lbShwYWdlKSkgeworCQkJaWYgKCF0b19mcmVlX2hpZ2htZW0pCisJCQkJY29udGludWU7CisJCQl0b19mcmVlX2hpZ2htZW0tLTsKKwkJCWFsbG9jX2hpZ2htZW0tLTsKKwkJfSBlbHNlIHsKKwkJCWlmICghdG9fZnJlZV9ub3JtYWwpCisJCQkJY29udGludWU7CisJCQl0b19mcmVlX25vcm1hbC0tOworCQkJYWxsb2Nfbm9ybWFsLS07CisJCX0KKwkJbWVtb3J5X2JtX2NsZWFyX2JpdCgmY29weV9ibSwgcGZuKTsKKwkJc3dzdXNwX3Vuc2V0X3BhZ2VfZm9yYmlkZGVuKHBhZ2UpOworCQlzd3N1c3BfdW5zZXRfcGFnZV9mcmVlKHBhZ2UpOworCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwl9Cit9CisKKy8qKgorICogbWluaW11bV9pbWFnZV9zaXplIC0gRXN0aW1hdGUgdGhlIG1pbmltdW0gYWNjZXB0YWJsZSBzaXplIG9mIGFuIGltYWdlCisgKiBAc2F2ZWFibGU6IE51bWJlciBvZiBzYXZlYWJsZSBwYWdlcyBpbiB0aGUgc3lzdGVtLgorICoKKyAqIFdlIHdhbnQgdG8gYXZvaWQgYXR0ZW1wdGluZyB0byBmcmVlIHRvbyBtdWNoIG1lbW9yeSB0b28gaGFyZCwgc28gZXN0aW1hdGUgdGhlCisgKiBtaW5pbXVtIGFjY2VwdGFibGUgc2l6ZSBvZiBhIGhpYmVybmF0aW9uIGltYWdlIHRvIHVzZSBhcyB0aGUgbG93ZXIgbGltaXQgZm9yCisgKiBwcmVhbGxvY2F0aW5nIG1lbW9yeS4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCB0aGUgbWluaW11bSBpbWFnZSBzaXplIHNob3VsZCBiZSBwcm9wb3J0aW9uYWwgdG8KKyAqCisgKiBbbnVtYmVyIG9mIHNhdmVhYmxlIHBhZ2VzXSAtIFtudW1iZXIgb2YgcGFnZXMgdGhhdCBjYW4gYmUgZnJlZWQgaW4gdGhlb3J5XQorICoKKyAqIHdoZXJlIHRoZSBzZWNvbmQgdGVybSBpcyB0aGUgc3VtIG9mICgxKSByZWNsYWltYWJsZSBzbGFiIHBhZ2VzLCAoMikgYWN0aXZlCisgKiBhbmQgKDMpIGluYWN0aXZlIGFub255bW91bnMgcGFnZXMsICg0KSBhY3RpdmUgYW5kICg1KSBpbmFjdGl2ZSBmaWxlIHBhZ2VzLAorICogbWludXMgbWFwcGVkIGZpbGUgcGFnZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1pbmltdW1faW1hZ2Vfc2l6ZSh1bnNpZ25lZCBsb25nIHNhdmVhYmxlKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXNpemUgPSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0FDVElWRV9BTk9OKQorCQkrIGdsb2JhbF9wYWdlX3N0YXRlKE5SX0lOQUNUSVZFX0FOT04pCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0ZJTEUpCisJCSsgZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfSU5BQ1RJVkVfRklMRSkKKwkJLSBnbG9iYWxfcGFnZV9zdGF0ZShOUl9GSUxFX01BUFBFRCk7CisKKwlyZXR1cm4gc2F2ZWFibGUgPD0gc2l6ZSA/IDAgOiBzYXZlYWJsZSAtIHNpemU7Cit9CisKKy8qKgorICogaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSAtIFByZWFsbG9jYXRlIG1lbW9yeSBmb3IgaGliZXJuYXRpb24gaW1hZ2UKKyAqCisgKiBUbyBjcmVhdGUgYSBoaWJlcm5hdGlvbiBpbWFnZSBpdCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIGNvcHkgb2YgZXZlcnkgcGFnZQorICogZnJhbWUgaW4gdXNlLiAgV2UgYWxzbyBuZWVkIGEgbnVtYmVyIG9mIHBhZ2UgZnJhbWVzIHRvIGJlIGZyZWUgZHVyaW5nCisgKiBoaWJlcm5hdGlvbiBmb3IgYWxsb2NhdGlvbnMgbWFkZSB3aGlsZSBzYXZpbmcgdGhlIGltYWdlIGFuZCBmb3IgZGV2aWNlCisgKiBkcml2ZXJzLCBpbiBjYXNlIHRoZXkgbmVlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZnJvbSB0aGVpciBoaWJlcm5hdGlvbgorICogY2FsbGJhY2tzICh0aGVzZSB0d28gbnVtYmVycyBhcmUgZ2l2ZW4gYnkgUEFHRVNfRk9SX0lPIGFuZCBTUEFSRV9QQUdFUywKKyAqIHJlc3BlY3RpdmVseSwgYm90aCBvZiB3aGljaCBhcmUgcm91Z2ggZXN0aW1hdGVzKS4gIFRvIG1ha2UgdGhpcyBoYXBwZW4sIHdlCisgKiBjb21wdXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIHBhZ2UgZnJhbWVzIGFuZCBhbGxvY2F0ZSBhdCBsZWFzdAorICoKKyAqIChbcGFnZSBmcmFtZXMgdG90YWxdICsgUEFHRVNfRk9SX0lPICsgW21ldGFkYXRhIHBhZ2VzXSkgLyAyICsgMiAqIFNQQVJFX1BBR0VTCisgKgorICogb2YgdGhlbSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIG1heGltdW0gc2l6ZSBvZiBhIGhpYmVybmF0aW9uIGltYWdlLgorICoKKyAqIElmIGltYWdlX3NpemUgaXMgc2V0IGJlbG93IHRoZSBudW1iZXIgZm9sbG93aW5nIGZyb20gdGhlIGFib3ZlIGZvcm11bGEsCisgKiB0aGUgcHJlYWxsb2NhdGlvbiBvZiBtZW1vcnkgaXMgY29udGludWVkIHVudGlsIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2F2ZWFibGUKKyAqIHBhZ2VzIGluIHRoZSBzeXN0ZW0gaXMgYmVsb3cgdGhlIHJlcXVlc3RlZCBpbWFnZSBzaXplIG9yIHRoZSBtaW5pbXVtCisgKiBhY2NlcHRhYmxlIGltYWdlIHNpemUgcmV0dXJuZWQgYnkgbWluaW11bV9pbWFnZV9zaXplKCksIHdoaWNoZXZlciBpcyBncmVhdGVyLgorICovCitpbnQgaGliZXJuYXRlX3ByZWFsbG9jYXRlX21lbW9yeSh2b2lkKQorewogCXN0cnVjdCB6b25lICp6b25lOwotCXVuc2lnbmVkIGxvbmcgcGFnZXMgPSAwOwotCXVuc2lnbmVkIGludCBpID0gMDsKLQljaGFyICpwID0gIi1cXHwvIjsKKwl1bnNpZ25lZCBsb25nIHNhdmVhYmxlLCBzaXplLCBtYXhfc2l6ZSwgY291bnQsIGhpZ2htZW0sIHBhZ2VzID0gMDsKKwl1bnNpZ25lZCBsb25nIGFsbG9jLCBzYXZlX2hpZ2htZW0sIHBhZ2VzX2hpZ2htZW07CiAJc3RydWN0IHRpbWV2YWwgc3RhcnQsIHN0b3A7CisJaW50IGVycm9yOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUE06IFNocmlua2luZyBtZW1vcnkuLi4gICIpOworCXByaW50ayhLRVJOX0lORk8gIlBNOiBQcmVhbGxvY2F0aW5nIGltYWdlIG1lbW9yeS4uLiAiKTsKIAlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0KTsKLQlkbyB7Ci0JCWxvbmcgc2l6ZSwgaGlnaG1lbV9zaXplOwogCi0JCWhpZ2htZW1fc2l6ZSA9IGNvdW50X2hpZ2htZW1fcGFnZXMoKTsKLQkJc2l6ZSA9IGNvdW50X2RhdGFfcGFnZXMoKSArIFBBR0VTX0ZPUl9JTyArIFNQQVJFX1BBR0VTOwotCQl0bXAgPSBzaXplOwotCQlzaXplICs9IGhpZ2htZW1fc2l6ZTsKLQkJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewotCQkJdG1wICs9IHNuYXBzaG90X2FkZGl0aW9uYWxfcGFnZXMoem9uZSk7Ci0JCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgewotCQkJCWhpZ2htZW1fc2l6ZSAtPQotCQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7Ci0JCQl9IGVsc2UgewotCQkJCXRtcCAtPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7Ci0JCQkJdG1wICs9IHpvbmUtPmxvd21lbV9yZXNlcnZlW1pPTkVfTk9STUFMXTsKLQkJCX0KLQkJfQorCWVycm9yID0gbWVtb3J5X2JtX2NyZWF0ZSgmb3JpZ19ibSwgR0ZQX0lNQUdFLCBQR19BTlkpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfb3V0OwogCi0JCWlmIChoaWdobWVtX3NpemUgPCAwKQotCQkJaGlnaG1lbV9zaXplID0gMDsKKwllcnJvciA9IG1lbW9yeV9ibV9jcmVhdGUoJmNvcHlfYm0sIEdGUF9JTUFHRSwgUEdfQU5ZKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX291dDsKIAotCQl0bXAgKz0gaGlnaG1lbV9zaXplOwotCQlpZiAodG1wID4gMCkgewotCQkJdG1wID0gX19zaHJpbmtfbWVtb3J5KHRtcCk7Ci0JCQlpZiAoIXRtcCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCXBhZ2VzICs9IHRtcDsKLQkJfSBlbHNlIGlmIChzaXplID4gaW1hZ2Vfc2l6ZSAvIFBBR0VfU0laRSkgewotCQkJdG1wID0gX19zaHJpbmtfbWVtb3J5KHNpemUgLSAoaW1hZ2Vfc2l6ZSAvIFBBR0VfU0laRSkpOwotCQkJcGFnZXMgKz0gdG1wOwotCQl9Ci0JCXByaW50aygiXGIlYyIsIHBbaSsrJTRdKTsKLQl9IHdoaWxlICh0bXAgPiAwKTsKKwlhbGxvY19ub3JtYWwgPSAwOworCWFsbG9jX2hpZ2htZW0gPSAwOworCisJLyogQ291bnQgdGhlIG51bWJlciBvZiBzYXZlYWJsZSBkYXRhIHBhZ2VzLiAqLworCXNhdmVfaGlnaG1lbSA9IGNvdW50X2hpZ2htZW1fcGFnZXMoKTsKKwlzYXZlYWJsZSA9IGNvdW50X2RhdGFfcGFnZXMoKTsKKworCS8qCisJICogQ29tcHV0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2UgZnJhbWVzIHdlIGNhbiB1c2UgKGNvdW50KSBhbmQgdGhlCisJICogbnVtYmVyIG9mIHBhZ2VzIG5lZWRlZCBmb3IgaW1hZ2UgbWV0YWRhdGEgKHNpemUpLgorCSAqLworCWNvdW50ID0gc2F2ZWFibGU7CisJc2F2ZWFibGUgKz0gc2F2ZV9oaWdobWVtOworCWhpZ2htZW0gPSBzYXZlX2hpZ2htZW07CisJc2l6ZSA9IDA7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgeworCQlzaXplICs9IHNuYXBzaG90X2FkZGl0aW9uYWxfcGFnZXMoem9uZSk7CisJCWlmIChpc19oaWdobWVtKHpvbmUpKQorCQkJaGlnaG1lbSArPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CisJCWVsc2UKKwkJCWNvdW50ICs9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKKwl9CisJY291bnQgKz0gaGlnaG1lbTsKKwljb3VudCAtPSB0b3RhbHJlc2VydmVfcGFnZXM7CisKKwkvKiBDb21wdXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzYXZlYWJsZSBwYWdlcyB0byBsZWF2ZSBpbiBtZW1vcnkuICovCisJbWF4X3NpemUgPSAoY291bnQgLSAoc2l6ZSArIFBBR0VTX0ZPUl9JTykpIC8gMiAtIDIgKiBTUEFSRV9QQUdFUzsKKwlzaXplID0gRElWX1JPVU5EX1VQKGltYWdlX3NpemUsIFBBR0VfU0laRSk7CisJaWYgKHNpemUgPiBtYXhfc2l6ZSkKKwkJc2l6ZSA9IG1heF9zaXplOworCS8qCisJICogSWYgdGhlIG1heGltdW0gaXMgbm90IGxlc3MgdGhhbiB0aGUgY3VycmVudCBudW1iZXIgb2Ygc2F2ZWFibGUgcGFnZXMKKwkgKiBpbiBtZW1vcnksIGFsbG9jYXRlIHBhZ2UgZnJhbWVzIGZvciB0aGUgaW1hZ2UgYW5kIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKHNpemUgPj0gc2F2ZWFibGUpIHsKKwkJcGFnZXMgPSBwcmVhbGxvY2F0ZV9pbWFnZV9oaWdobWVtKHNhdmVfaGlnaG1lbSk7CisJCXBhZ2VzICs9IHByZWFsbG9jYXRlX2ltYWdlX21lbW9yeShzYXZlYWJsZSAtIHBhZ2VzKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRXN0aW1hdGUgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgaW1hZ2UuICovCisJcGFnZXMgPSBtaW5pbXVtX2ltYWdlX3NpemUoc2F2ZWFibGUpOworCWlmIChzaXplIDwgcGFnZXMpCisJCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBwYWdlcywgbWF4X3NpemUpOworCisJLyoKKwkgKiBMZXQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBrbm93IHRoYXQgd2UncmUgZ29pbmcgdG8gbmVlZCBhCisJICogbGFyZ2UgbnVtYmVyIG9mIHBhZ2UgZnJhbWVzIHRvIGFsbG9jYXRlIGFuZCBtYWtlIGl0IGZyZWUgc29tZSBtZW1vcnkuCisJICogTk9URTogSWYgdGhpcyBpcyBub3QgZG9uZSwgcGVyZm9ybWFuY2Ugd2lsbCBiZSBodXJ0IGJhZGx5IGluIHNvbWUKKwkgKiB0ZXN0IGNhc2VzLgorCSAqLworCXNocmlua19hbGxfbWVtb3J5KHNhdmVhYmxlIC0gc2l6ZSk7CisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2Ygc2F2ZWFibGUgcGFnZXMgaW4gbWVtb3J5IHdhcyB0b28gaGlnaCwgc28gYXBwbHkgc29tZQorCSAqIHByZXNzdXJlIHRvIGRlY3JlYXNlIGl0LiAgRmlyc3QsIG1ha2Ugcm9vbSBmb3IgdGhlIGxhcmdlc3QgcG9zc2libGUKKwkgKiBpbWFnZSBhbmQgZmFpbCBpZiB0aGF0IGRvZXNuJ3Qgd29yay4gIE5leHQsIHRyeSB0byBkZWNyZWFzZSB0aGUgc2l6ZQorCSAqIG9mIHRoZSBpbWFnZSBhcyBtdWNoIGFzIGluZGljYXRlZCBieSAnc2l6ZScgdXNpbmcgYWxsb2NhdGlvbnMgZnJvbQorCSAqIGhpZ2htZW0gYW5kIG5vbi1oaWdobWVtIHpvbmVzIHNlcGFyYXRlbHkuCisJICovCisJcGFnZXNfaGlnaG1lbSA9IHByZWFsbG9jYXRlX2ltYWdlX2hpZ2htZW0oaGlnaG1lbSAvIDIpOworCWFsbG9jID0gKGNvdW50IC0gbWF4X3NpemUpIC0gcGFnZXNfaGlnaG1lbTsKKwlwYWdlcyA9IHByZWFsbG9jYXRlX2ltYWdlX21lbW9yeShhbGxvYyk7CisJaWYgKHBhZ2VzIDwgYWxsb2MpCisJCWdvdG8gZXJyX291dDsKKwlzaXplID0gbWF4X3NpemUgLSBzaXplOworCWFsbG9jID0gc2l6ZTsKKwlzaXplID0gcHJlYWxsb2NhdGVfaGlnaG1lbV9mcmFjdGlvbihzaXplLCBoaWdobWVtLCBjb3VudCk7CisJcGFnZXNfaGlnaG1lbSArPSBzaXplOworCWFsbG9jIC09IHNpemU7CisJcGFnZXMgKz0gcHJlYWxsb2NhdGVfaW1hZ2VfbWVtb3J5KGFsbG9jKTsKKwlwYWdlcyArPSBwYWdlc19oaWdobWVtOworCisJLyoKKwkgKiBXZSBvbmx5IG5lZWQgYXMgbWFueSBwYWdlIGZyYW1lcyBmb3IgdGhlIGltYWdlIGFzIHRoZXJlIGFyZSBzYXZlYWJsZQorCSAqIHBhZ2VzIGluIG1lbW9yeSwgYnV0IHdlIGhhdmUgYWxsb2NhdGVkIG1vcmUuICBSZWxlYXNlIHRoZSBleGNlc3NpdmUKKwkgKiBvbmVzIG5vdy4KKwkgKi8KKwlmcmVlX3VubmVjZXNzYXJ5X3BhZ2VzKCk7CisKKyBvdXQ6CiAJZG9fZ2V0dGltZW9mZGF5KCZzdG9wKTsKLQlwcmludGsoIlxiZG9uZSAoJWx1IHBhZ2VzIGZyZWVkKVxuIiwgcGFnZXMpOwotCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIHBhZ2VzLCAiRnJlZWQiKTsKKwlwcmludGsoS0VSTl9DT05UICJkb25lIChhbGxvY2F0ZWQgJWx1IHBhZ2VzKVxuIiwgcGFnZXMpOworCXN3c3VzcF9zaG93X3NwZWVkKCZzdGFydCwgJnN0b3AsIHBhZ2VzLCAiQWxsb2NhdGVkIik7CiAKIAlyZXR1cm4gMDsKKworIGVycl9vdXQ6CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwlzd3N1c3BfZnJlZSgpOworCXJldHVybiAtRU5PTUVNOwogfQogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KQEAgLTExNDIsNyArMTM3Myw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfcGFnZXNfZm9yX2hpZ2htZW0odW5zaWduZWQgaW50IG5yX2hpZ2htZW0pCiB7Ci0JdW5zaWduZWQgaW50IGZyZWVfaGlnaG1lbSA9IGNvdW50X2ZyZWVfaGlnaG1lbV9wYWdlcygpOworCXVuc2lnbmVkIGludCBmcmVlX2hpZ2htZW0gPSBjb3VudF9mcmVlX2hpZ2htZW1fcGFnZXMoKSArIGFsbG9jX2hpZ2htZW07CiAKIAlpZiAoZnJlZV9oaWdobWVtID49IG5yX2hpZ2htZW0pCiAJCW5yX2hpZ2htZW0gPSAwOwpAQCAtMTE2NCwxOSArMTM5NSwxNyBAQAogc3RhdGljIGludCBlbm91Z2hfZnJlZV9tZW0odW5zaWduZWQgaW50IG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgbnJfaGlnaG1lbSkKIHsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKLQl1bnNpZ25lZCBpbnQgZnJlZSA9IDAsIG1ldGEgPSAwOworCXVuc2lnbmVkIGludCBmcmVlID0gYWxsb2Nfbm9ybWFsOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7Ci0JCW1ldGEgKz0gc25hcHNob3RfYWRkaXRpb25hbF9wYWdlcyh6b25lKTsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKQogCQlpZiAoIWlzX2hpZ2htZW0oem9uZSkpCiAJCQlmcmVlICs9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKLQl9CiAKIAlucl9wYWdlcyArPSBjb3VudF9wYWdlc19mb3JfaGlnaG1lbShucl9oaWdobWVtKTsKLQlwcl9kZWJ1ZygiUE06IE5vcm1hbCBwYWdlcyBuZWVkZWQ6ICV1ICsgJXUgKyAldSwgYXZhaWxhYmxlIHBhZ2VzOiAldVxuIiwKLQkJbnJfcGFnZXMsIFBBR0VTX0ZPUl9JTywgbWV0YSwgZnJlZSk7CisJcHJfZGVidWcoIlBNOiBOb3JtYWwgcGFnZXMgbmVlZGVkOiAldSArICV1LCBhdmFpbGFibGUgcGFnZXM6ICV1XG4iLAorCQlucl9wYWdlcywgUEFHRVNfRk9SX0lPLCBmcmVlKTsKIAotCXJldHVybiBmcmVlID4gbnJfcGFnZXMgKyBQQUdFU19GT1JfSU8gKyBtZXRhOworCXJldHVybiBmcmVlID4gbnJfcGFnZXMgKyBQQUdFU19GT1JfSU87CiB9CiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQpAQCAtMTE5OCw3ICsxNDI3LDcgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotYWxsb2NfaGlnaG1lbV9pbWFnZV9wYWdlcyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqYm0sIHVuc2lnbmVkIGludCBucl9oaWdobWVtKQorYWxsb2NfaGlnaG1lbV9wYWdlcyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqYm0sIHVuc2lnbmVkIGludCBucl9oaWdobWVtKQogewogCXVuc2lnbmVkIGludCB0b19hbGxvYyA9IGNvdW50X2ZyZWVfaGlnaG1lbV9wYWdlcygpOwogCkBAIC0xMjE4LDcgKzE0NDcsNyBAQAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2hpZ2htZW1fYnVmZmVyKGludCBzYWZlX25lZWRlZCkgeyByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotYWxsb2NfaGlnaG1lbV9pbWFnZV9wYWdlcyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqYm0sIHVuc2lnbmVkIGludCBuKSB7IHJldHVybiAwOyB9CithbGxvY19oaWdobWVtX3BhZ2VzKHN0cnVjdCBtZW1vcnlfYml0bWFwICpibSwgdW5zaWduZWQgaW50IG4pIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwogCiAvKioKQEAgLTEyMzcsNTEgKzE0NjYsMzYgQEAKIHN3c3VzcF9hbGxvYyhzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqb3JpZ19ibSwgc3RydWN0IG1lbW9yeV9iaXRtYXAgKmNvcHlfYm0sCiAJCXVuc2lnbmVkIGludCBucl9wYWdlcywgdW5zaWduZWQgaW50IG5yX2hpZ2htZW0pCiB7Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBtZW1vcnlfYm1fY3JlYXRlKG9yaWdfYm0sIEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xELCBQR19BTlkpOwotCWlmIChlcnJvcikKLQkJZ290byBGcmVlOwotCi0JZXJyb3IgPSBtZW1vcnlfYm1fY3JlYXRlKGNvcHlfYm0sIEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xELCBQR19BTlkpOwotCWlmIChlcnJvcikKLQkJZ290byBGcmVlOworCWludCBlcnJvciA9IDA7CiAKIAlpZiAobnJfaGlnaG1lbSA+IDApIHsKIAkJZXJyb3IgPSBnZXRfaGlnaG1lbV9idWZmZXIoUEdfQU5ZKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBGcmVlOwotCi0JCW5yX3BhZ2VzICs9IGFsbG9jX2hpZ2htZW1faW1hZ2VfcGFnZXMoY29weV9ibSwgbnJfaGlnaG1lbSk7CisJCQlnb3RvIGVycl9vdXQ7CisJCWlmIChucl9oaWdobWVtID4gYWxsb2NfaGlnaG1lbSkgeworCQkJbnJfaGlnaG1lbSAtPSBhbGxvY19oaWdobWVtOworCQkJbnJfcGFnZXMgKz0gYWxsb2NfaGlnaG1lbV9wYWdlcyhjb3B5X2JtLCBucl9oaWdobWVtKTsKKwkJfQogCX0KLQl3aGlsZSAobnJfcGFnZXMtLSA+IDApIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19pbWFnZV9wYWdlKEdGUF9BVE9NSUMgfCBfX0dGUF9DT0xEKTsKKwlpZiAobnJfcGFnZXMgPiBhbGxvY19ub3JtYWwpIHsKKwkJbnJfcGFnZXMgLT0gYWxsb2Nfbm9ybWFsOworCQl3aGlsZSAobnJfcGFnZXMtLSA+IDApIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JCWlmICghcGFnZSkKLQkJCWdvdG8gRnJlZTsKLQotCQltZW1vcnlfYm1fc2V0X2JpdChjb3B5X2JtLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJCQlwYWdlID0gYWxsb2NfaW1hZ2VfcGFnZShHRlBfQVRPTUlDIHwgX19HRlBfQ09MRCk7CisJCQlpZiAoIXBhZ2UpCisJCQkJZ290byBlcnJfb3V0OworCQkJbWVtb3J5X2JtX3NldF9iaXQoY29weV9ibSwgcGFnZV90b19wZm4ocGFnZSkpOworCQl9CiAJfQorCiAJcmV0dXJuIDA7CiAKLSBGcmVlOgorIGVycl9vdXQ6CiAJc3dzdXNwX2ZyZWUoKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKLS8qIE1lbW9yeSBiaXRtYXAgdXNlZCBmb3IgbWFya2luZyBzYXZlYWJsZSBwYWdlcyAoZHVyaW5nIHN1c3BlbmQpIG9yIHRoZQotICogc3VzcGVuZCBpbWFnZSBwYWdlcyAoZHVyaW5nIHJlc3VtZSkKLSAqLwotc3RhdGljIHN0cnVjdCBtZW1vcnlfYml0bWFwIG9yaWdfYm07Ci0vKiBNZW1vcnkgYml0bWFwIHVzZWQgb24gc3VzcGVuZCBmb3IgbWFya2luZyBhbGxvY2F0ZWQgcGFnZXMgdGhhdCB3aWxsIGNvbnRhaW4KLSAqIHRoZSBjb3BpZXMgb2Ygc2F2ZWFibGUgcGFnZXMuICBEdXJpbmcgcmVzdW1lIGl0IGlzIGluaXRpYWxseSB1c2VkIGZvcgotICogbWFya2luZyB0aGUgc3VzcGVuZCBpbWFnZSBwYWdlcywgYnV0IHRoZW4gaXRzIHNldCBiaXRzIGFyZSBkdXBsaWNhdGVkIGluCi0gKiBAb3JpZ19ibSBhbmQgaXQgaXMgcmVsZWFzZWQuICBOZXh0LCBvbiBzeXN0ZW1zIHdpdGggaGlnaCBtZW1vcnksIGl0IG1heSBiZQotICogdXNlZCBmb3IgbWFya2luZyAic2FmZSIgaGlnaG1lbSBwYWdlcywgYnV0IGl0IGhhcyB0byBiZSByZWluaXRpYWxpemVkIGZvcgotICogdGhpcyBwdXJwb3NlLgotICovCi1zdGF0aWMgc3RydWN0IG1lbW9yeV9iaXRtYXAgY29weV9ibTsKLQogYXNtbGlua2FnZSBpbnQgc3dzdXNwX3NhdmUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgbnJfcGFnZXMsIG5yX2hpZ2htZW07CkBAIC0xNDc0LDcgKzE2ODgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGZuLCBtYXhfem9uZV9wZm47CiAKIAkvKiBDbGVhciBwYWdlIGZsYWdzICovCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQltYXhfem9uZV9wZm4gPSB6b25lLT56b25lX3N0YXJ0X3BmbiArIHpvbmUtPnNwYW5uZWRfcGFnZXM7CiAJCWZvciAocGZuID0gem9uZS0+em9uZV9zdGFydF9wZm47IHBmbiA8IG1heF96b25lX3BmbjsgcGZuKyspCiAJCQlpZiAocGZuX3ZhbGlkKHBmbikpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggZTEwZDE5My4uNjAyMDMzYSAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMTA3NSwxMiArMTA3NSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNvbnNvbGVfY29uZGl0aW9uYWxfc2NoZWR1bGUpOwogCi12b2lkIGNvbnNvbGVfcHJpbnQoY29uc3QgY2hhciAqcykKLXsKLQlwcmludGsoS0VSTl9FTUVSRyAiJXMiLCBzKTsKLX0KLUVYUE9SVF9TWU1CT0woY29uc29sZV9wcmludCk7Ci0KIHZvaWQgY29uc29sZV91bmJsYW5rKHZvaWQpCiB7CiAJc3RydWN0IGNvbnNvbGUgKmM7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggMzEyNWNmZi4uNmJiNTlmNyAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtOTEsNiArOTEsNyBAQAogI2lmZGVmIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUCiBleHRlcm4gaW50IHJjdXRvcnR1cmVfcnVubmFibGU7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUICovCitleHRlcm4gaW50IGJsa19pb3BvbGxfZW5hYmxlZDsKIAogLyogQ29uc3RhbnRzIHVzZWQgZm9yIG1pbmltdW0gYW5kICBtYXhpbXVtICovCiAjaWZkZWYgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQCkBAIC05OTcsNyArOTk4LDE0IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogI2VuZGlmCi0KKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAiYmxrX2lvcG9sbCIsCisJCS5kYXRhCQk9ICZibGtfaW9wb2xsX2VuYWJsZWQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAogLyoKICAqIE5PVEU6IGRvIG5vdCBhZGQgbmV3IGVudHJpZXMgdG8gdGhpcyB0YWJsZSB1bmxlc3MgeW91IGhhdmUgcmVhZAogICogRG9jdW1lbnRhdGlvbi9zeXNjdGwvY3RsX3VubnVtYmVyZWQudHh0CmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggODg4YWRiYy4uZWE4Mzg0ZCAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAvKgogICogU2VuZCB0YXNrc3RhdHMgZGF0YSBpbiBAc2tiIHRvIGxpc3RlbmVyIHdpdGggbmxfcGlkIEBwaWQKICAqLwotc3RhdGljIGludCBzZW5kX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsIHBpZF90IHBpZCkKK3N0YXRpYyBpbnQgc2VuZF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBnZW5sbXNnaGRyICpnZW5saGRyID0gbmxtc2dfZGF0YShubG1zZ19oZHIoc2tiKSk7CiAJdm9pZCAqcmVwbHkgPSBnZW5sbXNnX2RhdGEoZ2VubGhkcik7CkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXJldHVybiBnZW5sbXNnX3VuaWNhc3Qoc2tiLCBwaWQpOworCXJldHVybiBnZW5sbXNnX3JlcGx5KHNrYiwgaW5mbyk7CiB9CiAKIC8qCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJCWlmICghc2tiX25leHQpCiAJCQkJYnJlYWs7CiAJCX0KLQkJcmMgPSBnZW5sbXNnX3VuaWNhc3Qoc2tiX2N1ciwgcy0+cGlkKTsKKwkJcmMgPSBnZW5sbXNnX3VuaWNhc3QoJmluaXRfbmV0LCBza2JfY3VyLCBzLT5waWQpOwogCQlpZiAocmMgPT0gLUVDT05OUkVGVVNFRCkgewogCQkJcy0+dmFsaWQgPSAwOwogCQkJZGVsY291bnQrKzsKQEAgLTQxOCw3ICs0MTgsNyBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlyYyA9IHNlbmRfcmVwbHkocmVwX3NrYiwgaW5mby0+c25kX3BpZCk7CisJcmMgPSBzZW5kX3JlcGx5KHJlcF9za2IsIGluZm8pOwogCiBlcnI6CiAJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CkBAIC00ODcsNyArNDg3LDcgQEAKIAl9IGVsc2UKIAkJZ290byBlcnI7CiAKLQlyZXR1cm4gc2VuZF9yZXBseShyZXBfc2tiLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXR1cm4gc2VuZF9yZXBseShyZXBfc2tiLCBpbmZvKTsKIGVycjoKIAlubG1zZ19mcmVlKHJlcF9za2IpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggNzU2Y2NhZi4uY2I4YTExMiAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CQkvKiBmb3IgUEFHRV9TSVpFICovCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC02MzAsNjAgKzYzMSwxNTYgQEAKIH0KIAogc3RhdGljIGNoYXIgKm1hY19hZGRyZXNzX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdTggKmFkZHIsCi0JCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCisJCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMsIGNvbnN0IGNoYXIgKmZtdCkKIHsKLQljaGFyIG1hY19hZGRyWzYgKiAzXTsgLyogKDYgKiAyIGhleCBkaWdpdHMpLCA1IGNvbG9ucyBhbmQgdHJhaWxpbmcgemVybyAqLworCWNoYXIgbWFjX2FkZHJbc2l6ZW9mKCJ4eDp4eDp4eDp4eDp4eDp4eCIpXTsKIAljaGFyICpwID0gbWFjX2FkZHI7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbaV0pOwotCQlpZiAoIShzcGVjLmZsYWdzICYgU1BFQ0lBTCkgJiYgaSAhPSA1KQorCQlpZiAoZm10WzBdID09ICdNJyAmJiBpICE9IDUpCiAJCQkqcCsrID0gJzonOwogCX0KIAkqcCA9ICdcMCc7Ci0Jc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKIAogCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIG1hY19hZGRyLCBzcGVjKTsKIH0KIAotc3RhdGljIGNoYXIgKmlwNl9hZGRyX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdTggKmFkZHIsCi0JCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCitzdGF0aWMgY2hhciAqaXA0X3N0cmluZyhjaGFyICpwLCBjb25zdCB1OCAqYWRkciwgYm9vbCBsZWFkaW5nX3plcm9zKQogewotCWNoYXIgaXA2X2FkZHJbOCAqIDVdOyAvKiAoOCAqIDQgaGV4IGRpZ2l0cyksIDcgY29sb25zIGFuZCB0cmFpbGluZyB6ZXJvICovCi0JY2hhciAqcCA9IGlwNl9hZGRyOwogCWludCBpOwogCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQljaGFyIHRlbXBbM107CS8qIGhvbGQgZWFjaCBJUCBxdWFkIGluIHJldmVyc2Ugb3JkZXIgKi8KKwkJaW50IGRpZ2l0cyA9IHB1dF9kZWNfdHJ1bmModGVtcCwgYWRkcltpXSkgLSB0ZW1wOworCQlpZiAobGVhZGluZ196ZXJvcykgeworCQkJaWYgKGRpZ2l0cyA8IDMpCisJCQkJKnArKyA9ICcwJzsKKwkJCWlmIChkaWdpdHMgPCAyKQorCQkJCSpwKysgPSAnMCc7CisJCX0KKwkJLyogcmV2ZXJzZSB0aGUgZGlnaXRzIGluIHRoZSBxdWFkICovCisJCXdoaWxlIChkaWdpdHMtLSkKKwkJCSpwKysgPSB0ZW1wW2RpZ2l0c107CisJCWlmIChpIDwgMykKKwkJCSpwKysgPSAnLic7CisJfQorCisJKnAgPSAnXDAnOworCXJldHVybiBwOworfQorCitzdGF0aWMgY2hhciAqaXA2X2NvbXByZXNzZWRfc3RyaW5nKGNoYXIgKnAsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3sKKwlpbnQgaTsKKwlpbnQgajsKKwlpbnQgcmFuZ2U7CisJdW5zaWduZWQgY2hhciB6ZXJvbGVuZ3RoWzhdOworCWludCBsb25nZXN0ID0gMTsKKwlpbnQgY29sb25wb3MgPSAtMTsKKwl1MTYgd29yZDsKKwl1OCBoaTsKKwl1OCBsbzsKKwlib29sIG5lZWRjb2xvbiA9IGZhbHNlOworCWJvb2wgdXNlSVB2NCA9IGlwdjZfYWRkcl92NG1hcHBlZChhZGRyKSB8fCBpcHY2X2FkZHJfaXNfaXNhdGFwKGFkZHIpOworCisJbWVtc2V0KHplcm9sZW5ndGgsIDAsIHNpemVvZih6ZXJvbGVuZ3RoKSk7CisKKwlpZiAodXNlSVB2NCkKKwkJcmFuZ2UgPSA2OworCWVsc2UKKwkJcmFuZ2UgPSA4OworCisJLyogZmluZCBwb3NpdGlvbiBvZiBsb25nZXN0IDAgcnVuICovCisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJZm9yIChqID0gaTsgaiA8IHJhbmdlOyBqKyspIHsKKwkJCWlmIChhZGRyLT5zNl9hZGRyMTZbal0gIT0gMCkKKwkJCQlicmVhazsKKwkJCXplcm9sZW5ndGhbaV0rKzsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmFuZ2U7IGkrKykgeworCQlpZiAoemVyb2xlbmd0aFtpXSA+IGxvbmdlc3QpIHsKKwkJCWxvbmdlc3QgPSB6ZXJvbGVuZ3RoW2ldOworCQkJY29sb25wb3MgPSBpOworCQl9CisJfQorCisJLyogZW1pdCBhZGRyZXNzICovCisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJaWYgKGkgPT0gY29sb25wb3MpIHsKKwkJCWlmIChuZWVkY29sb24gfHwgaSA9PSAwKQorCQkJCSpwKysgPSAnOic7CisJCQkqcCsrID0gJzonOworCQkJbmVlZGNvbG9uID0gZmFsc2U7CisJCQlpICs9IGxvbmdlc3QgLSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG5lZWRjb2xvbikgeworCQkJKnArKyA9ICc6JzsKKwkJCW5lZWRjb2xvbiA9IGZhbHNlOworCQl9CisJCS8qIGhleCB1MTYgd2l0aG91dCBsZWFkaW5nIDBzICovCisJCXdvcmQgPSBudG9ocyhhZGRyLT5zNl9hZGRyMTZbaV0pOworCQloaSA9IHdvcmQgPj4gODsKKwkJbG8gPSB3b3JkICYgMHhmZjsKKwkJaWYgKGhpKSB7CisJCQlpZiAoaGkgPiAweDBmKQorCQkJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGhpKTsKKwkJCWVsc2UKKwkJCQkqcCsrID0gaGV4X2FzY19sbyhoaSk7CisJCX0KKwkJaWYgKGhpIHx8IGxvID4gMHgwZikKKwkJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGxvKTsKKwkJZWxzZQorCQkJKnArKyA9IGhleF9hc2NfbG8obG8pOworCQluZWVkY29sb24gPSB0cnVlOworCX0KKworCWlmICh1c2VJUHY0KSB7CisJCWlmIChuZWVkY29sb24pCisJCQkqcCsrID0gJzonOworCQlwID0gaXA0X3N0cmluZyhwLCAmYWRkci0+czZfYWRkclsxMl0sIGZhbHNlKTsKKwl9CisKKwkqcCA9ICdcMCc7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBjaGFyICppcDZfc3RyaW5nKGNoYXIgKnAsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwgY29uc3QgY2hhciAqZm10KQoreworCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkclsyICogaV0pOwotCQlwID0gcGFja19oZXhfYnl0ZShwLCBhZGRyWzIgKiBpICsgMV0pOwotCQlpZiAoIShzcGVjLmZsYWdzICYgU1BFQ0lBTCkgJiYgaSAhPSA3KQorCQlwID0gcGFja19oZXhfYnl0ZShwLCBhZGRyLT5zNl9hZGRyWzIgKiBpXSk7CisJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHItPnM2X2FkZHJbMiAqIGkgKyAxXSk7CisJCWlmIChmbXRbMF0gPT0gJ0knICYmIGkgIT0gNykKIAkJCSpwKysgPSAnOic7CiAJfQorCiAJKnAgPSAnXDAnOwotCXNwZWMuZmxhZ3MgJj0gflNQRUNJQUw7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBjaGFyICppcDZfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIGNvbnN0IHU4ICphZGRyLAorCQkJICAgICBzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYywgY29uc3QgY2hhciAqZm10KQoreworCWNoYXIgaXA2X2FkZHJbc2l6ZW9mKCJ4eHh4Onh4eHg6eHh4eDp4eHh4Onh4eHg6eHh4eDoyNTUuMjU1LjI1NS4yNTUiKV07CisKKwlpZiAoZm10WzBdID09ICdJJyAmJiBmbXRbMl0gPT0gJ2MnKQorCQlpcDZfY29tcHJlc3NlZF9zdHJpbmcoaXA2X2FkZHIsIChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilhZGRyKTsKKwllbHNlCisJCWlwNl9zdHJpbmcoaXA2X2FkZHIsIChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKilhZGRyLCBmbXQpOwogCiAJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgaXA2X2FkZHIsIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqaXA0X2FkZHJfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwKLQkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKK3N0YXRpYyBjaGFyICppcDRfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIGNvbnN0IHU4ICphZGRyLAorCQkJICAgICBzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYywgY29uc3QgY2hhciAqZm10KQogewotCWNoYXIgaXA0X2FkZHJbNCAqIDRdOyAvKiAoNCAqIDMgZGVjaW1hbCBkaWdpdHMpLCAzIGRvdHMgYW5kIHRyYWlsaW5nIHplcm8gKi8KLQljaGFyIHRlbXBbM107CS8qIGhvbGQgZWFjaCBJUCBxdWFkIGluIHJldmVyc2Ugb3JkZXIgKi8KLQljaGFyICpwID0gaXA0X2FkZHI7Ci0JaW50IGksIGRpZ2l0czsKKwljaGFyIGlwNF9hZGRyW3NpemVvZigiMjU1LjI1NS4yNTUuMjU1IildOwogCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlkaWdpdHMgPSBwdXRfZGVjX3RydW5jKHRlbXAsIGFkZHJbaV0pIC0gdGVtcDsKLQkJLyogcmV2ZXJzZSB0aGUgZGlnaXRzIGluIHRoZSBxdWFkICovCi0JCXdoaWxlIChkaWdpdHMtLSkKLQkJCSpwKysgPSB0ZW1wW2RpZ2l0c107Ci0JCWlmIChpICE9IDMpCi0JCQkqcCsrID0gJy4nOwotCX0KLQkqcCA9ICdcMCc7Ci0Jc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKKwlpcDRfc3RyaW5nKGlwNF9hZGRyLCBhZGRyLCBmbXRbMF0gPT0gJ2knKTsKIAogCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIGlwNF9hZGRyLCBzcGVjKTsKIH0KQEAgLTcwMiwxMSArNzk5LDE1IEBACiAgKiAgICAgICBhZGRyZXNzZXMgKG5vdCB0aGUgbmFtZSBub3IgdGhlIGZsYWdzKQogICogLSAnTScgRm9yIGEgNi1ieXRlIE1BQyBhZGRyZXNzLCBpdCBwcmludHMgdGhlIGFkZHJlc3MgaW4gdGhlCiAgKiAgICAgICB1c3VhbCBjb2xvbi1zZXBhcmF0ZWQgaGV4IG5vdGF0aW9uCi0gKiAtICdJJyBbNDZdIGZvciBJUHY0L0lQdjYgYWRkcmVzc2VzIHByaW50ZWQgaW4gdGhlIHVzdWFsIHdheSAoZG90LXNlcGFyYXRlZAotICogICAgICAgZGVjaW1hbCBmb3IgdjQgYW5kIGNvbG9uIHNlcGFyYXRlZCBuZXR3b3JrLW9yZGVyIDE2IGJpdCBoZXggZm9yIHY2KQotICogLSAnaScgWzQ2XSBmb3IgJ3JhdycgSVB2NC9JUHY2IGFkZHJlc3NlcywgSVB2NiBvbWl0cyB0aGUgY29sb25zLCBJUHY0IGlzCi0gKiAgICAgICBjdXJyZW50bHkgdGhlIHNhbWUKLSAqCisgKiAtICdtJyBGb3IgYSA2LWJ5dGUgTUFDIGFkZHJlc3MsIGl0IHByaW50cyB0aGUgaGV4IGFkZHJlc3Mgd2l0aG91dCBjb2xvbnMKKyAqIC0gJ0knIFs0Nl0gZm9yIElQdjQvSVB2NiBhZGRyZXNzZXMgcHJpbnRlZCBpbiB0aGUgdXN1YWwgd2F5CisgKiAgICAgICBJUHY0IHVzZXMgZG90LXNlcGFyYXRlZCBkZWNpbWFsIHdpdGhvdXQgbGVhZGluZyAwJ3MgKDEuMi4zLjQpCisgKiAgICAgICBJUHY2IHVzZXMgY29sb24gc2VwYXJhdGVkIG5ldHdvcmstb3JkZXIgMTYgYml0IGhleCB3aXRoIGxlYWRpbmcgMCdzCisgKiAtICdpJyBbNDZdIGZvciAncmF3JyBJUHY0L0lQdjYgYWRkcmVzc2VzCisgKiAgICAgICBJUHY2IG9taXRzIHRoZSBjb2xvbnMgKDAxMDIwMzA0Li4uMGYpCisgKiAgICAgICBJUHY0IHVzZXMgZG90LXNlcGFyYXRlZCBkZWNpbWFsIHdpdGggbGVhZGluZyAwJ3MgKDAxMC4xMjMuMDQ1LjAwNikKKyAqIC0gJ0k2YycgZm9yIElQdjYgYWRkcmVzc2VzIHByaW50ZWQgYXMgc3BlY2lmaWVkIGJ5CisgKiAgICAgICBodHRwOi8vd3d3LmlldGYub3JnL2lkL2RyYWZ0LWthd2FtdXJhLWlwdjYtdGV4dC1yZXByZXNlbnRhdGlvbi0wMy50eHQKICAqIE5vdGU6IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ1MnIGFuZCAnRicgaXMgdGhhdCBvbiBpYTY0IGFuZCBwcGM2NAogICogZnVuY3Rpb24gcG9pbnRlcnMgYXJlIHJlYWxseSBmdW5jdGlvbiBkZXNjcmlwdG9ycywgd2hpY2ggY29udGFpbiBhCiAgKiBwb2ludGVyIHRvIHRoZSByZWFsIGFkZHJlc3MuCkBAIC03MjYsMjAgKzgyNywyNCBAQAogCQlyZXR1cm4gc3ltYm9sX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjLCAqZm10KTsKIAljYXNlICdSJzoKIAkJcmV0dXJuIHJlc291cmNlX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjKTsKLQljYXNlICdtJzoKLQkJc3BlYy5mbGFncyB8PSBTUEVDSUFMOwotCQkvKiBGYWxsdGhyb3VnaCAqLwotCWNhc2UgJ00nOgotCQlyZXR1cm4gbWFjX2FkZHJlc3Nfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwotCWNhc2UgJ2knOgotCQlzcGVjLmZsYWdzIHw9IFNQRUNJQUw7Ci0JCS8qIEZhbGx0aHJvdWdoICovCi0JY2FzZSAnSSc6Ci0JCWlmIChmbXRbMV0gPT0gJzYnKQotCQkJcmV0dXJuIGlwNl9hZGRyX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjKTsKLQkJaWYgKGZtdFsxXSA9PSAnNCcpCi0JCQlyZXR1cm4gaXA0X2FkZHJfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwotCQlzcGVjLmZsYWdzICY9IH5TUEVDSUFMOworCWNhc2UgJ00nOgkJCS8qIENvbG9uIHNlcGFyYXRlZDogMDA6MDE6MDI6MDM6MDQ6MDUgKi8KKwljYXNlICdtJzoJCQkvKiBDb250aWd1b3VzOiAwMDAxMDIwMzA0MDUgKi8KKwkJcmV0dXJuIG1hY19hZGRyZXNzX3N0cmluZyhidWYsIGVuZCwgcHRyLCBzcGVjLCBmbXQpOworCWNhc2UgJ0knOgkJCS8qIEZvcm1hdHRlZCBJUCBzdXBwb3J0ZWQKKwkJCQkJICogNDoJMS4yLjMuNAorCQkJCQkgKiA2OgkwMDAxOjAyMDM6Li4uOjA3MDgKKwkJCQkJICogNmM6CTE6OjcwOCBvciAxOjoxLjIuMy40CisJCQkJCSAqLworCWNhc2UgJ2knOgkJCS8qIENvbnRpZ3VvdXM6CisJCQkJCSAqIDQ6CTAwMS4wMDIuMDAzLjAwNAorCQkJCQkgKiA2OiAgIDAwMDEwMi4uLjBmCisJCQkJCSAqLworCQlzd2l0Y2ggKGZtdFsxXSkgeworCQljYXNlICc2JzoKKwkJCXJldHVybiBpcDZfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYywgZm10KTsKKwkJY2FzZSAnNCc6CisJCQlyZXR1cm4gaXA0X2FkZHJfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMsIGZtdCk7CisJCX0KIAkJYnJlYWs7CiAJfQogCXNwZWMuZmxhZ3MgfD0gU01BTEw7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggY2NlYTNiNi4uZGQ1MWM2OGUgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTM5LDExICszOSwxMCBAQAogLyoKICAqIEZJWE1FOiByZW1vdmUgYWxsIGtub3dsZWRnZSBvZiB0aGUgYnVmZmVyIGxheWVyIGZyb20gdGhlIGNvcmUgVk0KICAqLwotI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+IC8qIGZvciBnZW5lcmljX29zeW5jX2lub2RlICovCisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4gLyogZm9yIHRyeV90b19mcmVlX2J1ZmZlcnMgKi8KIAogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAKLQogLyoKICAqIFNoYXJlZCBtYXBwaW5ncyBpbXBsZW1lbnRlZCAzMC4xMS4xOTk0LiBJdCdzIG5vdCBmdWxseSB3b3JraW5nIHlldCwKICAqIHRob3VnaC4KQEAgLTMwNyw2OCArMzA2LDI0IEBACiB9CiAKIC8qKgotICogc3luY19wYWdlX3JhbmdlIC0gd3JpdGUgYW5kIHdhaXQgb24gYWxsIHBhZ2VzIGluIHRoZSBwYXNzZWQgcmFuZ2UKLSAqIEBpbm9kZToJdGFyZ2V0IGlub2RlCi0gKiBAbWFwcGluZzoJdGFyZ2V0IGFkZHJlc3Nfc3BhY2UKLSAqIEBwb3M6CWJlZ2lubmluZyBvZmZzZXQgaW4gcGFnZXMgdG8gd3JpdGUKLSAqIEBjb3VudDoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKiBmaWxlbWFwX2ZkYXRhd2FpdF9yYW5nZSAtIHdhaXQgZm9yIGFsbCB1bmRlci13cml0ZWJhY2sgcGFnZXMgdG8gY29tcGxldGUgaW4gYSBnaXZlbiByYW5nZQorICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdhaXQgZm9yCisgKiBAc3RhcnQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2Ugc3RhcnRzCisgKiBAZW5kOglvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIHJhbmdlIGVuZHMgKGluY2x1c2l2ZSkKICAqCi0gKiBXcml0ZSBhbmQgd2FpdCB1cG9uIGFsbCB0aGUgcGFnZXMgaW4gdGhlIHBhc3NlZCByYW5nZS4gIFRoaXMgaXMgYSAiZGF0YQotICogaW50ZWdyaXR5IiBvcGVyYXRpb24uICBJdCB3YWl0cyB1cG9uIGluLWZsaWdodCB3cml0ZW91dCBiZWZvcmUgc3RhcnRpbmcgYW5kCi0gKiB3YWl0aW5nIHVwb24gbmV3IHdyaXRlb3V0LiAgSWYgdGhlcmUgd2FzIGFuIElPIGVycm9yLCByZXR1cm4gaXQuCisgKiBXYWxrIHRoZSBsaXN0IG9mIHVuZGVyLXdyaXRlYmFjayBwYWdlcyBvZiB0aGUgZ2l2ZW4gYWRkcmVzcyBzcGFjZQorICogaW4gdGhlIGdpdmVuIHJhbmdlIGFuZCB3YWl0IGZvciBhbGwgb2YgdGhlbS4KICAqCi0gKiBXZSBuZWVkIHRvIHJlLXRha2UgaV9tdXRleCBkdXJpbmcgdGhlIGdlbmVyaWNfb3N5bmNfaW5vZGUgbGlzdCB3YWxrIGJlY2F1c2UKLSAqIGl0IGlzIG90aGVyd2lzZSBsaXZlbG9ja2FibGUuCisgKiBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgd3JhcHBlciBzbyB0aGF0IGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byBjb252ZXJ0IG9mZnNldHMKKyAqIHRvIHBhZ2UgaW5kZXhlcyB0aGVtc2VsdmVzCiAgKi8KLWludCBzeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQlsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpCitpbnQgZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKKwkJCSAgICBsb2ZmX3QgZW5kKQogewotCXBnb2ZmX3Qgc3RhcnQgPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQlwZ29mZl90IGVuZCA9IChwb3MgKyBjb3VudCAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0JaW50IHJldDsKLQotCWlmICghbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KG1hcHBpbmcpIHx8ICFjb3VudCkKLQkJcmV0dXJuIDA7Ci0JcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKG1hcHBpbmcsIHBvcywgcG9zICsgY291bnQgLSAxKTsKLQlpZiAocmV0ID09IDApIHsKLQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQlyZXQgPSBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBtYXBwaW5nLCBPU1lOQ19NRVRBREFUQSk7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCX0KLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShtYXBwaW5nLCBzdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZULAorCQkJCQkgICAgZW5kID4+IFBBR0VfQ0FDSEVfU0hJRlQpOwogfQotRVhQT1JUX1NZTUJPTChzeW5jX3BhZ2VfcmFuZ2UpOwotCi0vKioKLSAqIHN5bmNfcGFnZV9yYW5nZV9ub2xvY2sgLSB3cml0ZSAmIHdhaXQgb24gYWxsIHBhZ2VzIGluIHRoZSBwYXNzZWQgcmFuZ2Ugd2l0aG91dCBsb2NraW5nCi0gKiBAaW5vZGU6CXRhcmdldCBpbm9kZQotICogQG1hcHBpbmc6CXRhcmdldCBhZGRyZXNzX3NwYWNlCi0gKiBAcG9zOgliZWdpbm5pbmcgb2Zmc2V0IGluIHBhZ2VzIHRvIHdyaXRlCi0gKiBAY291bnQ6CW51bWJlciBvZiBieXRlcyB0byB3cml0ZQotICoKLSAqIE5vdGU6IEhvbGRpbmcgaV9tdXRleCBhY3Jvc3Mgc3luY19wYWdlX3JhbmdlX25vbG9jaygpIGlzIG5vdCBhIGdvb2QgaWRlYQotICogYXMgaXQgZm9yY2VzIE9fU1lOQyB3cml0ZXJzIHRvIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc2FtZSBmaWxlCi0gKiB0byBiZSBzZXJpYWxpc2VkIHJpZ2h0IHVudGlsIGlvIGNvbXBsZXRpb24uCi0gKi8KLWludCBzeW5jX3BhZ2VfcmFuZ2Vfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAotCQkJICAgbG9mZl90IHBvcywgbG9mZl90IGNvdW50KQotewotCXBnb2ZmX3Qgc3RhcnQgPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQlwZ29mZl90IGVuZCA9IChwb3MgKyBjb3VudCAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0JaW50IHJldDsKLQotCWlmICghbWFwcGluZ19jYXBfd3JpdGViYWNrX2RpcnR5KG1hcHBpbmcpIHx8ICFjb3VudCkKLQkJcmV0dXJuIDA7Ci0JcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKG1hcHBpbmcsIHBvcywgcG9zICsgY291bnQgLSAxKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsIE9TWU5DX01FVEFEQVRBKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHdhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UobWFwcGluZywgc3RhcnQsIGVuZCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19wYWdlX3JhbmdlX25vbG9jayk7CitFWFBPUlRfU1lNQk9MKGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKTsKIAogLyoqCiAgKiBmaWxlbWFwX2ZkYXRhd2FpdCAtIHdhaXQgZm9yIGFsbCB1bmRlci13cml0ZWJhY2sgcGFnZXMgdG8gY29tcGxldGUKQEAgLTIxNjcsMjAgKzIxMjIsNyBAQAogCQl9CiAJCSpwcG9zID0gZW5kOwogCX0KLQotCS8qCi0JICogU3luYyB0aGUgZnMgbWV0YWRhdGEgYnV0IG5vdCB0aGUgbWlub3IgaW5vZGUgY2hhbmdlcyBhbmQKLQkgKiBvZiBjb3Vyc2Ugbm90IHRoZSBkYXRhIGFzIHdlIGRpZCBkaXJlY3QgRE1BIGZvciB0aGUgSU8uCi0JICogaV9tdXRleCBpcyBoZWxkLCB3aGljaCBwcm90ZWN0cyBnZW5lcmljX29zeW5jX2lub2RlKCkgZnJvbQotCSAqIGxpdmVsb2NraW5nLiAgQUlPIE9fRElSRUNUIG9wcyBhdHRlbXB0IHRvIHN5bmMgbWV0YWRhdGEgaGVyZS4KLQkgKi8KIG91dDoKLQlpZiAoKHdyaXR0ZW4gPj0gMCB8fCB3cml0dGVuID09IC1FSU9DQlFVRVVFRCkgJiYKLQkgICAgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKLQkJaW50IGVyciA9IGdlbmVyaWNfb3N5bmNfaW5vZGUoaW5vZGUsIG1hcHBpbmcsIE9TWU5DX01FVEFEQVRBKTsKLQkJaWYgKGVyciA8IDApCi0JCQl3cml0dGVuID0gZXJyOwotCX0KIAlyZXR1cm4gd3JpdHRlbjsKIH0KIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZSk7CkBAIC0yMzEyLDggKzIyNTQsNiBAQAogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQljb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphX29wcyA9IG1hcHBpbmctPmFfb3BzOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXNzaXplX3Qgc3RhdHVzOwogCXN0cnVjdCBpb3ZfaXRlciBpOwogCkBAIC0yMzIzLDE2ICsyMjYzLDYgQEAKIAlpZiAobGlrZWx5KHN0YXR1cyA+PSAwKSkgewogCQl3cml0dGVuICs9IHN0YXR1czsKIAkJKnBwb3MgPSBwb3MgKyBzdGF0dXM7Ci0KLQkJLyoKLQkJICogRm9yIG5vdywgd2hlbiB0aGUgdXNlciBhc2tzIGZvciBPX1NZTkMsIHdlJ2xsIGFjdHVhbGx5IGdpdmUKLQkJICogT19EU1lOQwotCQkgKi8KLQkJaWYgKHVubGlrZWx5KChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKLQkJCWlmICghYV9vcHMtPndyaXRlcGFnZSB8fCAhaXNfc3luY19raW9jYihpb2NiKSkKLQkJCQlzdGF0dXMgPSBnZW5lcmljX29zeW5jX2lub2RlKGlub2RlLCBtYXBwaW5nLAotCQkJCQkJT1NZTkNfTUVUQURBVEF8T1NZTkNfREFUQSk7Ci0JCX0KICAgCX0KIAkKIAkvKgpAQCAtMjM0OCw5ICsyMjc4LDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9idWZmZXJlZF93cml0ZSk7CiAKLXN0YXRpYyBzc2l6ZV90Ci1fX2dlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCisvKioKKyAqIF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZSAtIHdyaXRlIGRhdGEgdG8gYSBmaWxlCisgKiBAaW9jYjoJSU8gc3RhdGUgc3RydWN0dXJlIChmaWxlLCBvZmZzZXQsIGV0Yy4pCisgKiBAaW92Ogl2ZWN0b3Igd2l0aCBkYXRhIHRvIHdyaXRlCisgKiBAbnJfc2VnczoJbnVtYmVyIG9mIHNlZ21lbnRzIGluIHRoZSB2ZWN0b3IKKyAqIEBwcG9zOglwb3NpdGlvbiB3aGVyZSB0byB3cml0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgdGhlIHdvcmsgbmVlZGVkIGZvciBhY3R1YWxseSB3cml0aW5nIGRhdGEgdG8gYQorICogZmlsZS4gSXQgZG9lcyBhbGwgYmFzaWMgY2hlY2tzLCByZW1vdmVzIFNVSUQgZnJvbSB0aGUgZmlsZSwgdXBkYXRlcworICogbW9kaWZpY2F0aW9uIHRpbWVzIGFuZCBjYWxscyBwcm9wZXIgc3Vicm91dGluZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UKKyAqIGRvIGRpcmVjdCBJTyBvciBhIHN0YW5kYXJkIGJ1ZmZlcmVkIHdyaXRlLgorICoKKyAqIEl0IGV4cGVjdHMgaV9tdXRleCB0byBiZSBncmFiYmVkIHVubGVzcyB3ZSB3b3JrIG9uIGEgYmxvY2sgZGV2aWNlIG9yIHNpbWlsYXIKKyAqIG9iamVjdCB3aGljaCBkb2VzIG5vdCBuZWVkIGxvY2tpbmcgYXQgYWxsLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyAqbm90KiB0YWtlIGNhcmUgb2Ygc3luY2luZyBkYXRhIGluIGNhc2Ugb2YgT19TWU5DIHdyaXRlLgorICogQSBjYWxsZXIgaGFzIHRvIGhhbmRsZSBpdC4gVGhpcyBpcyBtYWlubHkgZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2Ugd2FudCB0bworICogYXZvaWQgc3luY2luZyB1bmRlciBpX211dGV4LgorICovCitzc2l6ZV90IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBtYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwpAQCAtMjQ0Nyw1MSArMjM5NSwzNyBAQAogCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBOVUxMOwogCXJldHVybiB3cml0dGVuID8gd3JpdHRlbiA6IGVycjsKIH0KK0VYUE9SVF9TWU1CT0woX19nZW5lcmljX2ZpbGVfYWlvX3dyaXRlKTsKIAotc3NpemVfdCBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jayhzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCXNzaXplX3QgcmV0OwotCi0JQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwotCi0JcmV0ID0gX19nZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jayhpb2NiLCBpb3YsIG5yX3NlZ3MsCi0JCQkmaW9jYi0+a2lfcG9zKTsKLQotCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7Ci0JCXNzaXplX3QgZXJyOwotCi0JCWVyciA9IHN5bmNfcGFnZV9yYW5nZV9ub2xvY2soaW5vZGUsIG1hcHBpbmcsIHBvcywgcmV0KTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXQgPSBlcnI7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKTsKLQorLyoqCisgKiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlIC0gd3JpdGUgZGF0YSB0byBhIGZpbGUKKyAqIEBpb2NiOglJTyBzdGF0ZSBzdHJ1Y3R1cmUKKyAqIEBpb3Y6CXZlY3RvciB3aXRoIGRhdGEgdG8gd3JpdGUKKyAqIEBucl9zZWdzOgludW1iZXIgb2Ygc2VnbWVudHMgaW4gdGhlIHZlY3RvcgorICogQHBvczoJcG9zaXRpb24gaW4gZmlsZSB3aGVyZSB0byB3cml0ZQorICoKKyAqIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBfX2dlbmVyaWNfZmlsZV9haW9fd3JpdGUoKSB0byBiZSB1c2VkIGJ5IG1vc3QKKyAqIGZpbGVzeXN0ZW1zLiBJdCB0YWtlcyBjYXJlIG9mIHN5bmNpbmcgdGhlIGZpbGUgaW4gY2FzZSBvZiBPX1NZTkMgZmlsZQorICogYW5kIGFjcXVpcmVzIGlfbXV0ZXggYXMgbmVlZGVkLgorICovCiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKIAkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwogCXNzaXplX3QgcmV0OwogCiAJQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgaW92LCBucl9zZWdzLAotCQkJJmlvY2ItPmtpX3Bvcyk7CisJcmV0ID0gX19nZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgJmlvY2ItPmtpX3Bvcyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgeworCWlmIChyZXQgPiAwIHx8IHJldCA9PSAtRUlPQ0JRVUVVRUQpIHsKIAkJc3NpemVfdCBlcnI7CiAKLQkJZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7Ci0JCWlmIChlcnIgPCAwKQorCQllcnIgPSBnZW5lcmljX3dyaXRlX3N5bmMoZmlsZSwgcG9zLCByZXQpOworCQlpZiAoZXJyIDwgMCAmJiByZXQgPiAwKQogCQkJcmV0ID0gZXJyOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGNhZmRjZWUuLmIxNmQ2MzYgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTIzNCw2ICsyMzQsNyBAQAogCiAJcmV0dXJuIDFVTCA8PCAoaHN0YXRlLT5vcmRlciArIFBBR0VfU0hJRlQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodm1hX2tlcm5lbF9wYWdlc2l6ZSk7CiAKIC8qCiAgKiBSZXR1cm4gdGhlIHBhZ2Ugc2l6ZSBiZWluZyB1c2VkIGJ5IHRoZSBNTVUgdG8gYmFjayBhIFZNQS4gSW4gdGhlIG1ham9yaXR5CmRpZmYgLS1naXQgYS9tbS9zbG9iLmMgYi9tbS9zbG9iLmMKaW5kZXggOTY0MWRhMy4uODM3ZWJkNiAxMDA2NDQKLS0tIGEvbW0vc2xvYi5jCisrKyBiL21tL3Nsb2IuYwpAQCAtNjkyLDMgKzY5Miw4IEBACiB7CiAJc2xvYl9yZWFkeSA9IDE7CiB9CisKK3ZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IGI2Mjc2NzUuLjQxN2VkODQgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTE0MSw2ICsxNDEsMTMgQEAKIAkJCQlTTEFCX1BPSVNPTiB8IFNMQUJfU1RPUkVfVVNFUikKIAogLyoKKyAqIERlYnVnZ2luZyBmbGFncyB0aGF0IHJlcXVpcmUgbWV0YWRhdGEgdG8gYmUgc3RvcmVkIGluIHRoZSBzbGFiLiAgVGhlc2UgZ2V0CisgKiBkaXNhYmxlZCB3aGVuIHNsdWJfZGVidWc9TyBpcyB1c2VkIGFuZCBhIGNhY2hlJ3MgbWluIG9yZGVyIGluY3JlYXNlcyB3aXRoCisgKiBtZXRhZGF0YS4KKyAqLworI2RlZmluZSBERUJVR19NRVRBREFUQV9GTEFHUyAoU0xBQl9SRURfWk9ORSB8IFNMQUJfUE9JU09OIHwgU0xBQl9TVE9SRV9VU0VSKQorCisvKgogICogU2V0IG9mIGZsYWdzIHRoYXQgd2lsbCBwcmV2ZW50IHNsYWIgbWVyZ2luZwogICovCiAjZGVmaW5lIFNMVUJfTkVWRVJfTUVSR0UgKFNMQUJfUkVEX1pPTkUgfCBTTEFCX1BPSVNPTiB8IFNMQUJfU1RPUkVfVVNFUiB8IFwKQEAgLTMyNSw2ICszMzIsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBjaGFyICpzbHViX2RlYnVnX3NsYWJzOworc3RhdGljIGludCBkaXNhYmxlX2hpZ2hlcl9vcmRlcl9kZWJ1ZzsKIAogLyoKICAqIE9iamVjdCBkZWJ1Z2dpbmcKQEAgLTY0Niw3ICs2NTQsNyBAQAogCXNsYWJfZXJyKHMsIHBhZ2UsICJQYWRkaW5nIG92ZXJ3cml0dGVuLiAweCVwLTB4JXAiLCBmYXVsdCwgZW5kIC0gMSk7CiAJcHJpbnRfc2VjdGlvbigiUGFkZGluZyIsIGVuZCAtIHJlbWFpbmRlciwgcmVtYWluZGVyKTsKIAotCXJlc3RvcmVfYnl0ZXMocywgInNsYWIgcGFkZGluZyIsIFBPSVNPTl9JTlVTRSwgc3RhcnQsIGVuZCk7CisJcmVzdG9yZV9ieXRlcyhzLCAic2xhYiBwYWRkaW5nIiwgUE9JU09OX0lOVVNFLCBlbmQgLSByZW1haW5kZXIsIGVuZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3Niw2ICs5ODQsMTUgQEAKIAkJICovCiAJCWdvdG8gY2hlY2tfc2xhYnM7CiAKKwlpZiAodG9sb3dlcigqc3RyKSA9PSAnbycpIHsKKwkJLyoKKwkJICogQXZvaWQgZW5hYmxpbmcgZGVidWdnaW5nIG9uIGNhY2hlcyBpZiBpdHMgbWluaW11bSBvcmRlcgorCQkgKiB3b3VsZCBpbmNyZWFzZSBhcyBhIHJlc3VsdC4KKwkJICovCisJCWRpc2FibGVfaGlnaGVyX29yZGVyX2RlYnVnID0gMTsKKwkJZ290byBvdXQ7CisJfQorCiAJc2x1Yl9kZWJ1ZyA9IDA7CiAJaWYgKCpzdHIgPT0gJy0nKQogCQkvKgpAQCAtMTAyNiw4ICsxMDQzLDggQEAKIAkgKiBFbmFibGUgZGVidWdnaW5nIGlmIHNlbGVjdGVkIG9uIHRoZSBrZXJuZWwgY29tbWFuZGxpbmUuCiAJICovCiAJaWYgKHNsdWJfZGVidWcgJiYgKCFzbHViX2RlYnVnX3NsYWJzIHx8Ci0JICAgIHN0cm5jbXAoc2x1Yl9kZWJ1Z19zbGFicywgbmFtZSwgc3RybGVuKHNsdWJfZGVidWdfc2xhYnMpKSA9PSAwKSkKLQkJCWZsYWdzIHw9IHNsdWJfZGVidWc7CisJCSFzdHJuY21wKHNsdWJfZGVidWdfc2xhYnMsIG5hbWUsIHN0cmxlbihzbHViX2RlYnVnX3NsYWJzKSkpKQorCQlmbGFncyB8PSBzbHViX2RlYnVnOwogCiAJcmV0dXJuIGZsYWdzOwogfQpAQCAtMTEwOSw4ICsxMTI2LDcgQEAKIAl9CiAKIAlpZiAoa21lbWNoZWNrX2VuYWJsZWQKLQkJJiYgIShzLT5mbGFncyAmIChTTEFCX05PVFJBQ0sgfCBERUJVR19ERUZBVUxUX0ZMQUdTKSkpCi0JeworCQkmJiAhKHMtPmZsYWdzICYgKFNMQUJfTk9UUkFDSyB8IERFQlVHX0RFRkFVTFRfRkxBR1MpKSkgewogCQlpbnQgcGFnZXMgPSAxIDw8IG9vX29yZGVyKG9vKTsKIAogCQlrbWVtY2hlY2tfYWxsb2Nfc2hhZG93KHBhZ2UsIG9vX29yZGVyKG9vKSwgZmxhZ3MsIG5vZGUpOwpAQCAtMTU2MCw2ICsxNTc2LDEwIEBACiAJCSJkZWZhdWx0IG9yZGVyOiAlZCwgbWluIG9yZGVyOiAlZFxuIiwgcy0+bmFtZSwgcy0+b2Jqc2l6ZSwKIAkJcy0+c2l6ZSwgb29fb3JkZXIocy0+b28pLCBvb19vcmRlcihzLT5taW4pKTsKIAorCWlmIChvb19vcmRlcihzLT5taW4pID4gZ2V0X29yZGVyKHMtPm9ianNpemUpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIgICVzIGRlYnVnZ2luZyBpbmNyZWFzZWQgbWluIG9yZGVyLCB1c2UgIgorCQkgICAgICAgInNsdWJfZGVidWc9TyB0byBkaXNhYmxlLlxuIiwgcy0+bmFtZSk7CisKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CiAJCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBnZXRfbm9kZShzLCBub2RlKTsKIAkJdW5zaWduZWQgbG9uZyBucl9zbGFiczsKQEAgLTIwMDEsNyArMjAyMSw3IEBACiAJCQkJcmV0dXJuIG9yZGVyOwogCQkJZnJhY3Rpb24gLz0gMjsKIAkJfQotCQltaW5fb2JqZWN0cyAtLTsKKwkJbWluX29iamVjdHMtLTsKIAl9CiAKIAkvKgpAQCAtMjQwMCw2ICsyNDIwLDcgQEAKIAkgKiBvbiBib290dXAuCiAJICovCiAJYWxpZ24gPSBjYWxjdWxhdGVfYWxpZ25tZW50KGZsYWdzLCBhbGlnbiwgcy0+b2Jqc2l6ZSk7CisJcy0+YWxpZ24gPSBhbGlnbjsKIAogCS8qCiAJICogU0xVQiBzdG9yZXMgb25lIG9iamVjdCBpbW1lZGlhdGVseSBhZnRlciBhbm90aGVyIGJlZ2lubmluZyBmcm9tCkBAIC0yNDUyLDYgKzI0NzMsMTggQEAKIAogCWlmICghY2FsY3VsYXRlX3NpemVzKHMsIC0xKSkKIAkJZ290byBlcnJvcjsKKwlpZiAoZGlzYWJsZV9oaWdoZXJfb3JkZXJfZGVidWcpIHsKKwkJLyoKKwkJICogRGlzYWJsZSBkZWJ1Z2dpbmcgZmxhZ3MgdGhhdCBzdG9yZSBtZXRhZGF0YSBpZiB0aGUgbWluIHNsYWIKKwkJICogb3JkZXIgaW5jcmVhc2VkLgorCQkgKi8KKwkJaWYgKGdldF9vcmRlcihzLT5zaXplKSA+IGdldF9vcmRlcihzLT5vYmpzaXplKSkgeworCQkJcy0+ZmxhZ3MgJj0gfkRFQlVHX01FVEFEQVRBX0ZMQUdTOworCQkJcy0+b2Zmc2V0ID0gMDsKKwkJCWlmICghY2FsY3VsYXRlX3NpemVzKHMsIC0xKSkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJfQogCiAJLyoKIAkgKiBUaGUgbGFyZ2VyIHRoZSBvYmplY3Qgc2l6ZSBpcywgdGhlIG1vcmUgcGFnZXMgd2Ugd2FudCBvbiB0aGUgcGFydGlhbApAQCAtMjc5MCw2ICsyODIzLDExIEBACiAJMgkvKiAxOTIgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNpemVfaW5kZXhfZWxlbShzaXplX3QgYnl0ZXMpCit7CisJcmV0dXJuIChieXRlcyAtIDEpIC8gODsKK30KKwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpnZXRfc2xhYihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJaW50IGluZGV4OwpAQCAtMjc5OCw3ICsyODM2LDcgQEAKIAkJaWYgKCFzaXplKQogCQkJcmV0dXJuIFpFUk9fU0laRV9QVFI7CiAKLQkJaW5kZXggPSBzaXplX2luZGV4WyhzaXplIC0gMSkgLyA4XTsKKwkJaW5kZXggPSBzaXplX2luZGV4W3NpemVfaW5kZXhfZWxlbShzaXplKV07CiAJfSBlbHNlCiAJCWluZGV4ID0gZmxzKHNpemUgLSAxKTsKIApAQCAtMzE1NiwxMCArMzE5NCwxMiBAQAogCXNsYWJfc3RhdGUgPSBQQVJUSUFMOwogCiAJLyogQ2FjaGVzIHRoYXQgYXJlIG5vdCBvZiB0aGUgdHdvLXRvLXRoZS1wb3dlci1vZiBzaXplICovCi0JaWYgKEtNQUxMT0NfTUlOX1NJWkUgPD0gNjQpIHsKKwlpZiAoS01BTExPQ19NSU5fU0laRSA8PSAzMikgewogCQljcmVhdGVfa21hbGxvY19jYWNoZSgma21hbGxvY19jYWNoZXNbMV0sCiAJCQkJImttYWxsb2MtOTYiLCA5NiwgR0ZQX05PV0FJVCk7CiAJCWNhY2hlcysrOworCX0KKwlpZiAoS01BTExPQ19NSU5fU0laRSA8PSA2NCkgewogCQljcmVhdGVfa21hbGxvY19jYWNoZSgma21hbGxvY19jYWNoZXNbMl0sCiAJCQkJImttYWxsb2MtMTkyIiwgMTkyLCBHRlBfTk9XQUlUKTsKIAkJY2FjaGVzKys7CkBAIC0zMTg2LDE3ICszMjI2LDI4IEBACiAJQlVJTERfQlVHX09OKEtNQUxMT0NfTUlOX1NJWkUgPiAyNTYgfHwKIAkJKEtNQUxMT0NfTUlOX1NJWkUgJiAoS01BTExPQ19NSU5fU0laRSAtIDEpKSk7CiAKLQlmb3IgKGkgPSA4OyBpIDwgS01BTExPQ19NSU5fU0laRTsgaSArPSA4KQotCQlzaXplX2luZGV4WyhpIC0gMSkgLyA4XSA9IEtNQUxMT0NfU0hJRlRfTE9XOworCWZvciAoaSA9IDg7IGkgPCBLTUFMTE9DX01JTl9TSVpFOyBpICs9IDgpIHsKKwkJaW50IGVsZW0gPSBzaXplX2luZGV4X2VsZW0oaSk7CisJCWlmIChlbGVtID49IEFSUkFZX1NJWkUoc2l6ZV9pbmRleCkpCisJCQlicmVhazsKKwkJc2l6ZV9pbmRleFtlbGVtXSA9IEtNQUxMT0NfU0hJRlRfTE9XOworCX0KIAotCWlmIChLTUFMTE9DX01JTl9TSVpFID09IDEyOCkgeworCWlmIChLTUFMTE9DX01JTl9TSVpFID09IDY0KSB7CisJCS8qCisJCSAqIFRoZSA5NiBieXRlIHNpemUgY2FjaGUgaXMgbm90IHVzZWQgaWYgdGhlIGFsaWdubWVudAorCQkgKiBpcyA2NCBieXRlLgorCQkgKi8KKwkJZm9yIChpID0gNjQgKyA4OyBpIDw9IDk2OyBpICs9IDgpCisJCQlzaXplX2luZGV4W3NpemVfaW5kZXhfZWxlbShpKV0gPSA3OworCX0gZWxzZSBpZiAoS01BTExPQ19NSU5fU0laRSA9PSAxMjgpIHsKIAkJLyoKIAkJICogVGhlIDE5MiBieXRlIHNpemVkIGNhY2hlIGlzIG5vdCB1c2VkIGlmIHRoZSBhbGlnbm1lbnQKIAkJICogaXMgMTI4IGJ5dGUuIFJlZGlyZWN0IGttYWxsb2MgdG8gdXNlIHRoZSAyNTYgYnl0ZSBjYWNoZQogCQkgKiBpbnN0ZWFkLgogCQkgKi8KIAkJZm9yIChpID0gMTI4ICsgODsgaSA8PSAxOTI7IGkgKz0gOCkKLQkJCXNpemVfaW5kZXhbKGkgLSAxKSAvIDhdID0gODsKKwkJCXNpemVfaW5kZXhbc2l6ZV9pbmRleF9lbGVtKGkpXSA9IDg7CiAJfQogCiAJc2xhYl9zdGF0ZSA9IFVQOwpAQCAtNDU0Myw4ICs0NTk0LDExIEBACiAJfQogCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzLT5rb2JqLCAmc2xhYl9hdHRyX2dyb3VwKTsKLQlpZiAoZXJyKQorCWlmIChlcnIpIHsKKwkJa29iamVjdF9kZWwoJnMtPmtvYmopOworCQlrb2JqZWN0X3B1dCgmcy0+a29iaik7CiAJCXJldHVybiBlcnI7CisJfQogCWtvYmplY3RfdWV2ZW50KCZzLT5rb2JqLCBLT0JKX0FERCk7CiAJaWYgKCF1bm1lcmdlYWJsZSkgewogCQkvKiBTZXR1cCBmaXJzdCBhbGlhcyAqLwpAQCAtNDcyNiw3ICs0NzgwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2xhYl9wcm9jX2luaXQodm9pZCkKIHsKLQlwcm9jX2NyZWF0ZSgic2xhYmluZm8iLFNfSVdVU1J8U19JUlVHTyxOVUxMLCZwcm9jX3NsYWJpbmZvX29wZXJhdGlvbnMpOworCXByb2NfY3JlYXRlKCJzbGFiaW5mbyIsIFNfSVJVR08sIE5VTEwsICZwcm9jX3NsYWJpbmZvX29wZXJhdGlvbnMpOwogCXJldHVybiAwOwogfQogbW9kdWxlX2luaXQoc2xhYl9wcm9jX2luaXQpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggOGZmZGMwZC4uNzRmMTEwMiAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNjEsNyArMTYxLDggQEAKIAkJfQogCiAJCWVyciA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKHNpLT5iZGV2LCBzdGFydF9ibG9jaywKLQkJCQkJCW5yX2Jsb2NrcywgR0ZQX0tFUk5FTCk7CisJCQkJCQlucl9ibG9ja3MsIEdGUF9LRVJORUwsCisJCQkJCQlESVNDQVJEX0ZMX0JBUlJJRVIpOwogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKQEAgLTIwMCw3ICsyMDEsOCBAQAogCQkJc3RhcnRfYmxvY2sgPDw9IFBBR0VfU0hJRlQgLSA5OwogCQkJbnJfYmxvY2tzIDw8PSBQQUdFX1NISUZUIC0gOTsKIAkJCWlmIChibGtkZXZfaXNzdWVfZGlzY2FyZChzaS0+YmRldiwgc3RhcnRfYmxvY2ssCi0JCQkJCQkJbnJfYmxvY2tzLCBHRlBfTk9JTykpCisJCQkJCQkJbnJfYmxvY2tzLCBHRlBfTk9JTywKKwkJCQkJCQlESVNDQVJEX0ZMX0JBUlJJRVIpKQogCQkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IGZlNjQ5MDguLjg4MzY1NzUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtMjI1LDEyICsyMjUsNiBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JLyogVGhlIHJlYWwgZGV2aWNlIG11c3QgYmUgdXAgYW5kIG9wZXJhdGluZyBpbiBvcmRlciB0bwotCSAqIGFzc29zY2lhdGUgYSBWTEFOIGRldmljZSB3aXRoIGl0LgotCSAqLwotCWlmICghKHJlYWxfZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCXJldHVybiAtRU5FVERPV047Ci0KIAlpZiAoX19maW5kX3ZsYW5fZGV2KHJlYWxfZGV2LCB2bGFuX2lkKSAhPSBOVUxMKQogCQlyZXR1cm4gLUVFWElTVDsKIApAQCAtMzM2LDEyICszMzAsMTMgQEAKIAkJc25wcmludGYobmFtZSwgSUZOQU1TSVosICJ2bGFuJS40aSIsIHZsYW5faWQpOwogCX0KIAotCW5ld19kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCB2bGFuX2Rldl9pbmZvKSwgbmFtZSwKLQkJCSAgICAgICB2bGFuX3NldHVwKTsKKwluZXdfZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyksIG5hbWUsCisJCQkJICB2bGFuX3NldHVwLCByZWFsX2Rldi0+bnVtX3R4X3F1ZXVlcyk7CiAKIAlpZiAobmV3X2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKKwluZXdfZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSByZWFsX2Rldi0+cmVhbF9udW1fdHhfcXVldWVzOwogCWRldl9uZXRfc2V0KG5ld19kZXYsIG5ldCk7CiAJLyogbmVlZCA0IGJ5dGVzIGZvciBleHRyYSBWTEFOIGhlYWRlciBpbmZvLAogCSAqIGhvcGUgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGNhbiBoYW5kbGUgaXQuCkBAIC0zOTcsNiArMzkyLDkgQEAKIAl2bGFuZGV2LT5mZWF0dXJlcyAmPSB+ZGV2LT52bGFuX2ZlYXR1cmVzOwogCXZsYW5kZXYtPmZlYXR1cmVzIHw9IGRldi0+ZmVhdHVyZXMgJiBkZXYtPnZsYW5fZmVhdHVyZXM7CiAJdmxhbmRldi0+Z3NvX21heF9zaXplID0gZGV2LT5nc29fbWF4X3NpemU7CisjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCisJdmxhbmRldi0+ZmNvZV9kZHBfeGlkID0gZGV2LT5mY29lX2RkcF94aWQ7CisjZW5kaWYKIAogCWlmIChvbGRfZmVhdHVyZXMgIT0gdmxhbmRldi0+ZmVhdHVyZXMpCiAJCW5ldGRldl9mZWF0dXJlc19jaGFuZ2UodmxhbmRldik7CkBAIC00NjgsNiArNDY2LDE5IEBACiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIE5FVERFVl9DSEFOR0VNVFU6CisJCWZvciAoaSA9IDA7IGkgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgaSsrKSB7CisJCQl2bGFuZGV2ID0gdmxhbl9ncm91cF9nZXRfZGV2aWNlKGdycCwgaSk7CisJCQlpZiAoIXZsYW5kZXYpCisJCQkJY29udGludWU7CisKKwkJCWlmICh2bGFuZGV2LT5tdHUgPD0gZGV2LT5tdHUpCisJCQkJY29udGludWU7CisKKwkJCWRldl9zZXRfbXR1KHZsYW5kZXYsIGRldi0+bXR1KTsKKwkJfQorCQlicmVhazsKKwogCWNhc2UgTkVUREVWX0ZFQVRfQ0hBTkdFOgogCQkvKiBQcm9wYWdhdGUgZGV2aWNlIGZlYXR1cmVzIHRvIHVuZGVybHlpbmcgZGV2aWNlICovCiAJCWZvciAoaSA9IDA7IGkgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgaSsrKSB7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IDk2YmFkOGYuLjQxOThlYzUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC0yODgsMTAgKzI4OCwxNCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCB2bGFuX2Rldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCWludCBpID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGkpOwogCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKikoc2tiLT5kYXRhKTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCByZXQ7CiAKIAkvKiBIYW5kbGUgbm9uLVZMQU4gZnJhbWVzIGlmIHRoZXkgYXJlIHNlbnQgdG8gdXMsIGZvciBleGFtcGxlIGJ5IERIQ1AuCiAJICoKQEAgLTMxNywyOSArMzIxLDQzIEBACiAJCQl2bGFuX2Rldl9pbmZvKGRldiktPmNudF9pbmNfaGVhZHJvb21fb25fdHgrKzsKIAl9CiAKLQl0eHEtPnR4X3BhY2tldHMrKzsKLQl0eHEtPnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJc2tiLT5kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJbGVuID0gc2tiLT5sZW47CisJcmV0ID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKKworCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CisJCXR4cS0+dHhfcGFja2V0cysrOworCQl0eHEtPnR4X2J5dGVzICs9IGxlbjsKKwl9IGVsc2UKKwkJdHhxLT50eF9kcm9wcGVkKys7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgaW50IHZsYW5fZGV2X2h3YWNjZWxfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHZsYW5fZGV2X2h3YWNjZWxfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7CisJaW50IGkgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CiAJdTE2IHZsYW5fdGNpOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHJldDsKIAogCXZsYW5fdGNpID0gdmxhbl9kZXZfaW5mbyhkZXYpLT52bGFuX2lkOwogCXZsYW5fdGNpIHw9IHZsYW5fZGV2X2dldF9lZ3Jlc3NfcW9zX21hc2soZGV2LCBza2IpOwogCXNrYiA9IF9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAKLQl0eHEtPnR4X3BhY2tldHMrKzsKLQl0eHEtPnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCiAJc2tiLT5kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJbGVuID0gc2tiLT5sZW47CisJcmV0ID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKKworCWlmIChsaWtlbHkocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpKSB7CisJCXR4cS0+dHhfcGFja2V0cysrOworCQl0eHEtPnR4X2J5dGVzICs9IGxlbjsKKwl9IGVsc2UKKwkJdHhxLT50eF9kcm9wcGVkKys7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC01NjEsNiArNTc5LDU1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQorc3RhdGljIGludCB2bGFuX2Rldl9mY29lX2RkcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgeGlkLAorCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCB1bnNpZ25lZCBpbnQgc2djKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXY7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSByZWFsX2Rldi0+bmV0ZGV2X29wczsKKwlpbnQgcmMgPSAwOworCisJaWYgKG9wcy0+bmRvX2Zjb2VfZGRwX3NldHVwKQorCQlyYyA9IG9wcy0+bmRvX2Zjb2VfZGRwX3NldHVwKHJlYWxfZGV2LCB4aWQsIHNnbCwgc2djKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2bGFuX2Rldl9mY29lX2RkcF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB4aWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IHJlYWxfZGV2LT5uZXRkZXZfb3BzOworCWludCBsZW4gPSAwOworCisJaWYgKG9wcy0+bmRvX2Zjb2VfZGRwX2RvbmUpCisJCWxlbiA9IG9wcy0+bmRvX2Zjb2VfZGRwX2RvbmUocmVhbF9kZXYsIHhpZCk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHZsYW5fZGV2X2Zjb2VfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IHJlYWxfZGV2LT5uZXRkZXZfb3BzOworCWludCByYyA9IC1FSU5WQUw7CisKKwlpZiAob3BzLT5uZG9fZmNvZV9lbmFibGUpCisJCXJjID0gb3BzLT5uZG9fZmNvZV9lbmFibGUocmVhbF9kZXYpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB2bGFuX2Rldl9mY29lX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gcmVhbF9kZXYtPm5ldGRldl9vcHM7CisJaW50IHJjID0gLUVJTlZBTDsKKworCWlmIChvcHMtPm5kb19mY29lX2Rpc2FibGUpCisJCXJjID0gb3BzLT5uZG9fZmNvZV9kaXNhYmxlKHJlYWxfZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgdmxhbl9kZXZfY2hhbmdlX3J4X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGFuZ2UpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKQEAgLTYzNSw2ICs3MDIsMTAgQEAKIAlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGRldi0+YnJvYWRjYXN0KSkKIAkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCByZWFsX2Rldi0+YnJvYWRjYXN0LCBkZXYtPmFkZHJfbGVuKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0ZDT0UpIHx8IGRlZmluZWQoQ09ORklHX0ZDT0VfTU9EVUxFKQorCWRldi0+ZmNvZV9kZHBfeGlkID0gcmVhbF9kZXYtPmZjb2VfZGRwX3hpZDsKKyNlbmRpZgorCiAJaWYgKHJlYWxfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9UWCkgewogCQlkZXYtPmhlYWRlcl9vcHMgICAgICA9IHJlYWxfZGV2LT5oZWFkZXJfb3BzOwogCQlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHJlYWxfZGV2LT5oYXJkX2hlYWRlcl9sZW47CkBAIC03MTUsNiArNzg2LDEyIEBACiAJLm5kb19jaGFuZ2VfcnhfZmxhZ3MJPSB2bGFuX2Rldl9jaGFuZ2VfcnhfZmxhZ3MsCiAJLm5kb19kb19pb2N0bAkJPSB2bGFuX2Rldl9pb2N0bCwKIAkubmRvX25laWdoX3NldHVwCT0gdmxhbl9kZXZfbmVpZ2hfc2V0dXAsCisjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCisJLm5kb19mY29lX2RkcF9zZXR1cAk9IHZsYW5fZGV2X2Zjb2VfZGRwX3NldHVwLAorCS5uZG9fZmNvZV9kZHBfZG9uZQk9IHZsYW5fZGV2X2Zjb2VfZGRwX2RvbmUsCisJLm5kb19mY29lX2VuYWJsZQk9IHZsYW5fZGV2X2Zjb2VfZW5hYmxlLAorCS5uZG9fZmNvZV9kaXNhYmxlCT0gdmxhbl9kZXZfZmNvZV9kaXNhYmxlLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZsYW5fbmV0ZGV2X2FjY2VsX29wcyA9IHsKQEAgLTczMSw2ICs4MDgsMTIgQEAKIAkubmRvX2NoYW5nZV9yeF9mbGFncwk9IHZsYW5fZGV2X2NoYW5nZV9yeF9mbGFncywKIAkubmRvX2RvX2lvY3RsCQk9IHZsYW5fZGV2X2lvY3RsLAogCS5uZG9fbmVpZ2hfc2V0dXAJPSB2bGFuX2Rldl9uZWlnaF9zZXR1cCwKKyNpZiBkZWZpbmVkKENPTkZJR19GQ09FKSB8fCBkZWZpbmVkKENPTkZJR19GQ09FX01PRFVMRSkKKwkubmRvX2Zjb2VfZGRwX3NldHVwCT0gdmxhbl9kZXZfZmNvZV9kZHBfc2V0dXAsCisJLm5kb19mY29lX2RkcF9kb25lCT0gdmxhbl9kZXZfZmNvZV9kZHBfZG9uZSwKKwkubmRvX2Zjb2VfZW5hYmxlCT0gdmxhbl9kZXZfZmNvZV9lbmFibGUsCisJLm5kb19mY29lX2Rpc2FibGUJPSB2bGFuX2Rldl9mY29lX2Rpc2FibGUsCisjZW5kaWYKIH07CiAKIHZvaWQgdmxhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jIGIvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jCmluZGV4IGU5YzkxZGMuLjM0MzE0NmUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX25ldGxpbmsuYworKysgYi9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMKQEAgLTEwMCw2ICsxMDAsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2bGFuX2dldF90eF9xdWV1ZXMoc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqbnVtX3R4X3F1ZXVlcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqcmVhbF9udW1fdHhfcXVldWVzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjsKKworCWlmICghdGJbSUZMQV9MSU5LXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWFsX2RldiA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTsKKwlpZiAoIXJlYWxfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCSpudW1fdHhfcXVldWVzICAgICAgPSByZWFsX2Rldi0+bnVtX3R4X3F1ZXVlczsKKwkqcmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2bGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKQEAgLTIxNiw2ICsyMzUsNyBAQAogCS5tYXh0eXBlCT0gSUZMQV9WTEFOX01BWCwKIAkucG9saWN5CQk9IHZsYW5fcG9saWN5LAogCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHZsYW5fZGV2X2luZm8pLAorCS5nZXRfdHhfcXVldWVzICA9IHZsYW5fZ2V0X3R4X3F1ZXVlcywKIAkuc2V0dXAJCT0gdmxhbl9zZXR1cCwKIAkudmFsaWRhdGUJPSB2bGFuX3ZhbGlkYXRlLAogCS5uZXdsaW5rCT0gdmxhbl9uZXdsaW5rLApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCBiNTVhMDkxLi42MjYyYzMzIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgKi8KIAogLyogU3RyaW5ncyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnZsYW5fbmFtZV90eXBlX3N0cltWTEFOX05BTUVfVFlQRV9ISUdIRVNUXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB2bGFuX25hbWVfdHlwZV9zdHJbVkxBTl9OQU1FX1RZUEVfSElHSEVTVF0gPSB7CiAgICAgW1ZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF0gICAgICAgID0gIlZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRCIsCiAgICAgW1ZMQU5fTkFNRV9UWVBFX1BMVVNfVklEX05PX1BBRF0JID0gIlZMQU5fTkFNRV9UWVBFX1BMVVNfVklEX05PX1BBRCIsCiAgICAgW1ZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF9OT19QQURdID0gIlZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRF9OT19QQUQiLApkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCA3MDUxYjk3Li4wNDFjMzVlIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMjMsNiArMjMsMjYgQEAKIAogaWYgTkVUCiAKK2NvbmZpZyBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTCisJYm9vbAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhbiBiZSBzZWxlY3RlZCBieSBvdGhlciBvcHRpb25zIHRoYXQgbmVlZCBjb21wYXQKKwkgIG5ldGxpbmsgbWVzc2FnZXMuCisKK2NvbmZpZyBDT01QQVRfTkVUTElOS19NRVNTQUdFUworCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENPTVBBVAorCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUIHx8IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZW5kIGRpZmZlcmVudCBuZXRsaW5rIG1lc3NhZ2VzCisJICB0byB0YXNrcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgdGFzayBpcyBhIGNvbXBhdCB0YXNrIG9yIG5vdC4gVG8KKwkgIGFjaGlldmUgdGhpcywgeW91IG5lZWQgdG8gc2V0IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0IHRvIHRoZQorCSAgY29tcGF0IHNrYiBiZWZvcmUgc2VuZGluZyB0aGUgc2tiLCB0aGUgbmV0bGluayBjb2RlIHdpbGwgc29ydCBvdXQKKwkgIHdoaWNoIG1lc3NhZ2UgdG8gYWN0dWFsbHkgcGFzcyB0byB0aGUgdGFzay4KKworCSAgTmV3bHkgd3JpdHRlbiBjb2RlIHNob3VsZCBORVZFUiBuZWVkIHRoaXMgb3B0aW9uIGJ1dCBkbworCSAgY29tcGF0LWluZGVwZW5kZW50IG1lc3NhZ2VzIGluc3RlYWQhCisKIG1lbnUgIk5ldHdvcmtpbmcgb3B0aW9ucyIKIAogc291cmNlICJuZXQvcGFja2V0L0tjb25maWciCmRpZmYgLS1naXQgYS9uZXQvTWFrZWZpbGUgYi9uZXQvTWFrZWZpbGUKaW5kZXggYmEzMjRhZS4uMTU0MmU3MiAxMDA2NDQKLS0tIGEvbmV0L01ha2VmaWxlCisrKyBiL25ldC9NYWtlZmlsZQpAQCAtMjQsNyArMjQsNiBAQAogZW5kaWYKIG9iai0kKENPTkZJR19QQUNLRVQpCQkrPSBwYWNrZXQvCiBvYmotJChDT05GSUdfTkVUX0tFWSkJCSs9IGtleS8KLW9iai0kKENPTkZJR19ORVRfU0NIRUQpCQkrPSBzY2hlZC8KIG9iai0kKENPTkZJR19CUklER0UpCQkrPSBicmlkZ2UvCiBvYmotJChDT05GSUdfTkVUX0RTQSkJCSs9IGRzYS8KIG9iai0kKENPTkZJR19JUFgpCQkrPSBpcHgvCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2FhcnAuYyBiL25ldC9hcHBsZXRhbGsvYWFycC5jCmluZGV4IDg5Zjk5ZDMuLjlkNGFkZmQgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvYWFycC5jCisrKyBiL25ldC9hcHBsZXRhbGsvYWFycC5jCkBAIC01OTksNyArNTk5LDcgQEAKIAogCS8qIE5vbiBFTEFQIHdlIGNhbm5vdCBkby4gKi8KIAlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikKLQkJcmV0dXJuIC0xOworCQlnb3RvIGZyZWVfaXQ7CiAKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfQVRBTEspOwpAQCAtNjM0LDcgKzYzNCw3IEBACiAJaWYgKCFhKSB7CiAJCS8qIFdob29wcyBzbGlwcGVkLi4uIGdvb2Qgam9iIGl0J3MgYW4gdW5yZWxpYWJsZSBwcm90b2NvbCA4KSAqLwogCQl3cml0ZV91bmxvY2tfYmgoJmFhcnBfbG9jayk7Ci0JCXJldHVybiAtMTsKKwkJZ290byBmcmVlX2l0OwogCX0KIAogCS8qIFNldCB1cCB0aGUgcXVldWUgKi8KQEAgLTY2MywxNSArNjYzLDIxIEBACiAJd3JpdGVfdW5sb2NrX2JoKCZhYXJwX2xvY2spOwogCiAJLyogVGVsbCB0aGUgZGRwIGxheWVyIHdlIGhhdmUgdGFrZW4gb3ZlciBmb3IgdGhpcyBmcmFtZS4gKi8KLQlyZXR1cm4gMDsKKwlnb3RvIHNlbnQ7CiAKIHNlbmRpdDoKIAlpZiAoc2tiLT5zaykKIAkJc2tiLT5wcmlvcml0eSA9IHNrYi0+c2stPnNrX3ByaW9yaXR5OwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJaWYgKGRldl9xdWV1ZV94bWl0KHNrYikpCisJCWdvdG8gZHJvcDsKIHNlbnQ6Ci0JcmV0dXJuIDE7CisJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CitmcmVlX2l0OgorCWtmcmVlX3NrYihza2IpOworZHJvcDoKKwlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKIH0KK0VYUE9SVF9TWU1CT0woYWFycF9zZW5kX2RkcCk7CiAKIC8qCiAgKglBbiBlbnRyeSBpbiB0aGUgYWFycCB1bnJlc29sdmVkIHF1ZXVlIGhhcyBiZWNvbWUgcmVzb2x2ZWQuIFNlbmQKZGlmZiAtLWdpdCBhL25ldC9hcHBsZXRhbGsvZGRwLmMgYi9uZXQvYXBwbGV0YWxrL2RkcC5jCmluZGV4IDg3NWVkYTUuLjRhNmZmMmIgMTAwNjQ0Ci0tLSBhL25ldC9hcHBsZXRhbGsvZGRwLmMKKysrIGIvbmV0L2FwcGxldGFsay9kZHAuYwpAQCAtMTI3MCw4ICsxMjcwLDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCiAJLyogVGhpcyBuZWVkcyB0byBiZSBhYmxlIHRvIGhhbmRsZSBpcGRkcCJOIiBkZXZpY2VzICovCi0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOworCWlmICghZGV2KSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJfQogCiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAlza2JfcHVsbChza2IsIDEzKTsKQEAgLTEyODEsOCArMTI4Myw3IEBACiAJc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0YXRzLT5yeF9wYWNrZXRzKys7CiAJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuICsgMTM7Ci0JbmV0aWZfcngoc2tiKTsgIC8qIFNlbmQgdGhlIFNLQiB1cCB0byBhIGhpZ2hlciBwbGFjZS4gKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmV0aWZfcngoc2tiKTsgIC8qIFNlbmQgdGhlIFNLQiB1cCB0byBhIGhpZ2hlciBwbGFjZS4gKi8KIH0KICNlbHNlCiAvKiBtYWtlIGl0IGVhc3kgZm9yIGdjYyB0byBvcHRpbWl6ZSB0aGlzIHRlc3Qgb3V0LCBpLmUuIGtpbGwgdGhlIGNvZGUgKi8KQEAgLTEyOTAsOSArMTI5MSw4IEBACiAjZGVmaW5lIGhhbmRsZV9pcF9vdmVyX2RkcChza2IpIDAKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBhdGFsa19yb3V0ZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZGRwZWhkciAqZGRwLCBfX3UxNiBsZW5faG9wcywKLQkJCSAgICAgICBpbnQgb3JpZ2xlbikKK3N0YXRpYyBpbnQgYXRhbGtfcm91dGVfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGRwZWhkciAqZGRwLCBfX3UxNiBsZW5faG9wcywgaW50IG9yaWdsZW4pCiB7CiAJc3RydWN0IGF0YWxrX3JvdXRlICpydDsKIAlzdHJ1Y3QgYXRhbGtfYWRkciB0YTsKQEAgLTEzNTksOCArMTM1OSw2IEBACiAJCS8qIDIyIGJ5dGVzIC0gMTIgZXRoZXIsIDIgbGVuLCAzIDgwMi4yIDUgc25hcCAqLwogCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgMzIpOwogCQlrZnJlZV9za2Ioc2tiKTsKLQkJaWYgKCFuc2tiKQotCQkJZ290byBvdXQ7CiAJCXNrYiA9IG5za2I7CiAJfSBlbHNlCiAJCXNrYiA9IHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7CkBAIC0xMzY5LDEyICsxMzY3LDE2IEBACiAJICogSWYgdGhlIGJ1ZmZlciBkaWRuJ3QgdmFuaXNoIGludG8gdGhlIGxhY2sgb2Ygc3BhY2UgYml0YnVja2V0IHdlIGNhbgogCSAqIHNlbmQgaXQuCiAJICovCi0JaWYgKHNrYiAmJiBhYXJwX3NlbmRfZGRwKHJ0LT5kZXYsIHNrYiwgJnRhLCBOVUxMKSA9PSAtMSkKLQkJZ290byBmcmVlX2l0Owotb3V0OgotCXJldHVybjsKKwlpZiAoc2tiID09IE5VTEwpCisJCWdvdG8gZHJvcDsKKworCWlmIChhYXJwX3NlbmRfZGRwKHJ0LT5kZXYsIHNrYiwgJnRhLCBOVUxMKSA9PSBORVRfWE1JVF9EUk9QKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiBmcmVlX2l0OgogCWtmcmVlX3NrYihza2IpOworZHJvcDoKKwlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKIC8qKgpAQCAtMTQwMCw3ICsxNDAyLDcgQEAKIAlfX3UxNiBsZW5faG9wczsKIAogCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKLQkJZ290byBmcmVlaXQ7CisJCWdvdG8gZHJvcDsKIAogCS8qIERvbid0IG1hbmdsZSBidWZmZXIgaWYgc2hhcmVkICovCiAJaWYgKCEoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpKQpAQCAtMTQwOCw3ICsxNDEwLDcgQEAKIAogCS8qIFNpemUgY2hlY2sgYW5kIG1ha2Ugc3VyZSBoZWFkZXIgaXMgY29udGlndW91cyAqLwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqZGRwKSkpCi0JCWdvdG8gZnJlZWl0OworCQlnb3RvIGRyb3A7CiAKIAlkZHAgPSBkZHBfaGRyKHNrYik7CiAKQEAgLTE0MjYsNyArMTQyOCw3IEBACiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCpkZHApIHx8IHNrYi0+bGVuIDwgKGxlbl9ob3BzICYgMTAyMykpIHsKIAkJcHJfZGVidWcoIkFwcGxlVGFsazogZHJvcHBpbmcgY29ycnVwdGVkIGZyYW1lIChkZWhfbGVuPSV1LCAiCiAJCQkgInNrYi0+bGVuPSV1KVxuIiwgbGVuX2hvcHMgJiAxMDIzLCBza2ItPmxlbik7Ci0JCWdvdG8gZnJlZWl0OworCQlnb3RvIGRyb3A7CiAJfQogCiAJLyoKQEAgLTE0MzYsNyArMTQzOCw3IEBACiAJaWYgKGRkcC0+ZGVoX3N1bSAmJgogCSAgICBhdGFsa19jaGVja3N1bShza2IsIGxlbl9ob3BzICYgMTAyMykgIT0gZGRwLT5kZWhfc3VtKQogCQkvKiBOb3QgYSB2YWxpZCBBcHBsZVRhbGsgZnJhbWUgLSBkdXN0YmluIHRpbWUgKi8KLQkJZ290byBmcmVlaXQ7CisJCWdvdG8gZHJvcDsKIAogCS8qIENoZWNrIHRoZSBwYWNrZXQgaXMgYWltZWQgYXQgdXMgKi8KIAlpZiAoIWRkcC0+ZGVoX2RuZXQpCS8qIE5ldCAwIGlzICd0aGlzIG5ldHdvcmsnICovCkBAIC0xNDQ4LDggKzE0NTAsNyBAQAogCQkvKiBOb3Qgb3Vycywgc28gd2Ugcm91dGUgdGhlIHBhY2tldCB2aWEgdGhlIGNvcnJlY3QKIAkJICogQXBwbGVUYWxrIGlmYWNlCiAJCSAqLwotCQlhdGFsa19yb3V0ZV9wYWNrZXQoc2tiLCBkZXYsIGRkcCwgbGVuX2hvcHMsIG9yaWdsZW4pOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIGF0YWxrX3JvdXRlX3BhY2tldChza2IsIGRldiwgZGRwLCBsZW5faG9wcywgb3JpZ2xlbik7CiAJfQogCiAJLyogaWYgSVAgb3ZlciBERFAgaXMgbm90IHNlbGVjdGVkIHRoaXMgY29kZSB3aWxsIGJlIG9wdGltaXplZCBvdXQgKi8KQEAgLTE0NjUsMTggKzE0NjYsMjEgQEAKIAogCXNvY2sgPSBhdGFsa19zZWFyY2hfc29ja2V0KCZ0b3NhdCwgYXRpZik7CiAJaWYgKCFzb2NrKSAvKiBCdXQgbm90IG9uZSBvZiBvdXIgc29ja2V0cyAqLwotCQlnb3RvIGZyZWVpdDsKKwkJZ290byBkcm9wOwogCiAJLyogUXVldWUgcGFja2V0IChzdGFuZGFyZCkgKi8KIAlza2ItPnNrID0gc29jazsKIAogCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc29jaywgc2tiKSA8IDApCi0JCWdvdG8gZnJlZWl0Owotb3V0OgotCXJldHVybiAwOwotZnJlZWl0OgorCQlnb3RvIGRyb3A7CisKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKK2Ryb3A6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JZ290byBvdXQ7CitvdXQ6CisJcmV0dXJuIE5FVF9SWF9EUk9QOworCiB9CiAKIC8qCkBAIC0xNjUyLDEwICsxNjU2LDEwIEBACiAJCWlmIChza2IyKSB7CiAJCQlsb29wYmFjayA9IDE7CiAJCQlTT0NLX0RFQlVHKHNrLCAiU0sgJXA6IHNlbmQgb3V0KGNvcHkpLlxuIiwgc2spOwotCQkJaWYgKGFhcnBfc2VuZF9kZHAoZGV2LCBza2IyLAotCQkJCQkgICZ1c2F0LT5zYXRfYWRkciwgTlVMTCkgPT0gLTEpCi0JCQkJa2ZyZWVfc2tiKHNrYjIpOwotCQkJCS8qIGVsc2UgcXVldWVkL3NlbnQgYWJvdmUgaW4gdGhlIGFhcnAgcXVldWUgKi8KKwkJCS8qCisJCQkgKiBJZiBpdCBmYWlscyBpdCBpcyBxdWV1ZWQvc2VudCBhYm92ZSBpbiB0aGUgYWFycCBxdWV1ZQorCQkJICovCisJCQlhYXJwX3NlbmRfZGRwKGRldiwgc2tiMiwgJnVzYXQtPnNhdF9hZGRyLCBOVUxMKTsKIAkJfQogCX0KIApAQCAtMTY4NSw5ICsxNjg5LDEwIEBACiAJCSAgICB1c2F0ID0gJmdzYXQ7CiAJCX0KIAotCQlpZiAoYWFycF9zZW5kX2RkcChkZXYsIHNrYiwgJnVzYXQtPnNhdF9hZGRyLCBOVUxMKSA9PSAtMSkKLQkJCWtmcmVlX3NrYihza2IpOwotCQkvKiBlbHNlIHF1ZXVlZC9zZW50IGFib3ZlIGluIHRoZSBhYXJwIHF1ZXVlICovCisJCS8qCisJCSAqIElmIGl0IGZhaWxzIGl0IGlzIHF1ZXVlZC9zZW50IGFib3ZlIGluIHRoZSBhYXJwIHF1ZXVlCisJCSAqLworCQlhYXJwX3NlbmRfZGRwKGRldiwgc2tiLCAmdXNhdC0+c2F0X2FkZHIsIE5VTEwpOwogCX0KIAlTT0NLX0RFQlVHKHNrLCAiU0sgJXA6IERvbmUgd3JpdGUgKCVaZCkuXG4iLCBzaywgbGVuKTsKIApAQCAtMTg2NSw3ICsxODcwLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGRkcF9zbmFwX2lkW10gPSB7IDB4MDgsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OUIgfTsKIAogLyogRXhwb3J0IHN5bWJvbHMgZm9yIHVzZSBieSBkcml2ZXJzIHdoZW4gQXBwbGVUYWxrIGlzIGEgbW9kdWxlICovCi1FWFBPUlRfU1lNQk9MKGFhcnBfc2VuZF9kZHApOwogRVhQT1JUX1NZTUJPTChhdHJ0cl9nZXRfZGV2KTsKIEVYUE9SVF9TWU1CT0woYXRhbGtfZmluZF9kZXZfYWRkcik7CiAKZGlmZiAtLWdpdCBhL25ldC9hdG0vYnIyNjg0LmMgYi9uZXQvYXRtL2JyMjY4NC5jCmluZGV4IDI5MTI2NjVmLi4yNmE2NDZkIDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTY5LDcgKzY5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlOwogCS8qIGtlZXAgb2xkIHB1c2gsIHBvcCBmdW5jdGlvbnMgZm9yIGNoYWluaW5nICovCiAJdm9pZCAoKm9sZF9wdXNoKSAoc3RydWN0IGF0bV92Y2MgKiB2Y2MsIHN0cnVjdCBza19idWZmICogc2tiKTsKLQkvKiB2b2lkICgqb2xkX3BvcCkoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7ICovCisJdm9pZCAoKm9sZF9wb3ApKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwogCWVudW0gYnIyNjg0X2VuY2FwcyBlbmNhcHM7CiAJc3RydWN0IGxpc3RfaGVhZCBicnZjY3M7CiAjaWZkZWYgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIKQEAgLTE0Miw2ICsxNDIsMjIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyogY2hhaW5lZCB2Y2MtPnBvcCBmdW5jdGlvbi4gIENoZWNrIGlmIHdlIHNob3VsZCB3YWtlIHRoZSBuZXRpZl9xdWV1ZSAqLworc3RhdGljIHZvaWQgYnIyNjg0X3BvcChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBicjI2ODRfdmNjICpicnZjYyA9IEJSMjY4NF9WQ0ModmNjKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHNrYi0+ZGV2OworCisJcHJfZGVidWcoImJyMjY4NF9wb3AodmNjICVwIDsgbmV0X2RldiAlcCApXG4iLCB2Y2MsIG5ldF9kZXYpOworCWJydmNjLT5vbGRfcG9wKHZjYywgc2tiKTsKKworCWlmICghbmV0X2RldikKKwkJcmV0dXJuOworCisJaWYgKGF0bV9tYXlfc2VuZCh2Y2MsIDApKQorCQluZXRpZl93YWtlX3F1ZXVlKG5ldF9kZXYpOworCit9CiAvKgogICogU2VuZCBhIHBhY2tldCBvdXQgYSBwYXJ0aWN1bGFyIHZjYy4gIE5vdCB0byB1c2VmdWwgcmlnaHQgbm93LCBidXQgcGF2ZXMKICAqIHRoZSB3YXkgZm9yIG11bHRpcGxlIHZjYydzIHBlciBpdGYuICBSZXR1cm5zIHRydWUgaWYgd2UgY2FuIHNlbmQsCkBAIC0yMDAsMjAgKzIxNiwxOSBAQAogCiAJQVRNX1NLQihza2IpLT52Y2MgPSBhdG12Y2MgPSBicnZjYy0+YXRtdmNjOwogCXByX2RlYnVnKCJhdG1fc2tiKCVwKS0+dmNjKCVwKS0+ZGV2KCVwKVxuIiwgc2tiLCBhdG12Y2MsIGF0bXZjYy0+ZGV2KTsKLQlpZiAoIWF0bV9tYXlfc2VuZChhdG12Y2MsIHNrYi0+dHJ1ZXNpemUpKSB7Ci0JCS8qCi0JCSAqIFdlIGZyZWUgdGhpcyBoZXJlIGZvciBub3csIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgaW4gYSBoaWdoZXIKLQkJICogbGF5ZXIgd2hldGhlciB0aGUgc2tiIHBvaW50ZXIgaXQgc3VwcGxpZWQgd2Fzbid0IGZyZWVkIHlldC4KLQkJICogTm93LCBpdCBhbHdheXMgaXMuCi0JCSAqLwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOwotCX0KIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0oYXRtdmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJQVRNX1NLQihza2IpLT5hdG1fb3B0aW9ucyA9IGF0bXZjYy0+YXRtX29wdGlvbnM7CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlhdG12Y2MtPnNlbmQoYXRtdmNjLCBza2IpOworCisJaWYgKCFhdG1fbWF5X3NlbmQoYXRtdmNjLCAwKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGJydmNjLT5kZXZpY2UpOworCQkvKmNoZWNrIGZvciByYWNlIHdpdGggYnIyNjg0X3BvcCovCisJCWlmIChhdG1fbWF5X3NlbmQoYXRtdmNjLCAwKSkKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGJydmNjLT5kZXZpY2UpOworCX0KKwogCXJldHVybiAxOwogfQogCkBAIC0yMjMsNyArMjM4LDggQEAKIAlyZXR1cm4gbGlzdF9lbXB0eSgmYnJkZXYtPmJydmNjcykgPyBOVUxMIDogbGlzdF9lbnRyeV9icnZjYyhicmRldi0+YnJ2Y2NzLm5leHQpOwkvKiAxIHZjYy9kZXYgcmlnaHQgbm93ICovCiB9CiAKLXN0YXRpYyBpbnQgYnIyNjg0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBicjI2ODRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYgPSBCUlBSSVYoZGV2KTsKIAlzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2M7CkBAIC0yMzgsNyArMjU0LDcgQEAKIAkJLyogbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqLwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJlYWRfdW5sb2NrKCZkZXZzX2xvY2spOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJaWYgKCFicjI2ODRfeG1pdF92Y2Moc2tiLCBkZXYsIGJydmNjKSkgewogCQkvKgpAQCAtMjUyLDcgKzI2OCw3IEBACiAJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAl9CiAJcmVhZF91bmxvY2soJmRldnNfbG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTUwMyw4ICs1MTksMTAgQEAKIAlhdG12Y2MtPnVzZXJfYmFjayA9IGJydmNjOwogCWJydmNjLT5lbmNhcHMgPSAoZW51bSBicjI2ODRfZW5jYXBzKWJlLmVuY2FwczsKIAlicnZjYy0+b2xkX3B1c2ggPSBhdG12Y2MtPnB1c2g7CisJYnJ2Y2MtPm9sZF9wb3AgPSBhdG12Y2MtPnBvcDsKIAliYXJyaWVyKCk7CiAJYXRtdmNjLT5wdXNoID0gYnIyNjg0X3B1c2g7CisJYXRtdmNjLT5wb3AgPSBicjI2ODRfcG9wOwogCiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZxdWV1ZSk7CiAJcnEgPSAmc2tfYXRtKGF0bXZjYyktPnNrX3JlY2VpdmVfcXVldWU7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IGU2NWEzYjEuLjY0NjI5YzMgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgY2xpcF9uZWlnaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBjbGlwX25laWdoX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCiAJLnNvbGljaXQgPQkJY2xpcF9uZWlnaF9zb2xpY2l0LAogCS5lcnJvcl9yZXBvcnQgPQkJY2xpcF9uZWlnaF9lcnJvciwKQEAgLTM2MCw3ICszNjAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNsaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGNsaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNsaXBfcHJpdiAqY2xpcF9wcml2ID0gUFJJVihkZXYpOwogCXN0cnVjdCBhdG1hcnBfZW50cnkgKmVudHJ5OwpAQCAtMzczLDcgKzM3NCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBza2JfZHN0KHNrYikgPT0gTlVMTFxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlpZiAoIXNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyKSB7CiAjaWYgMApAQCAtMzg3LDcgKzM4OCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBOTyBORUlHSEJPVVIgIVxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAllbnRyeSA9IE5FSUdIMkVOVFJZKHNrYl9kc3Qoc2tiKS0+bmVpZ2hib3VyKTsKIAlpZiAoIWVudHJ5LT52Y2NzKSB7CkBAIC00MDIsNyArNDAzLDcgQEAKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl9Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlwcl9kZWJ1ZygibmVpZ2ggJXAsIHZjY3MgJXBcbiIsIGVudHJ5LCBlbnRyeS0+dmNjcyk7CiAJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2MgPSBlbnRyeS0+dmNjcy0+dmNjOwpAQCAtNDIxLDE0ICs0MjIsMTQgQEAKIAlvbGQgPSB4Y2hnKCZlbnRyeS0+dmNjcy0+eG9mZiwgMSk7CS8qIGFzc3VtZSBYT0ZGIC4uLiAqLwogCWlmIChvbGQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xpcF9zdGFydF94bWl0OiBYT0ZGLT5YT0ZGIHRyYW5zaXRpb25cbiIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAl2Y2MtPnNlbmQodmNjLCBza2IpOwogCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQllbnRyeS0+dmNjcy0+eG9mZiA9IDA7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xpcF9wcml2LT54b2ZmX2xvY2ssIGZsYWdzKTsKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CS8qIFhPRkYgLT4gdGhyb3R0bGUgaW1tZWRpYXRlbHkgKi8KQEAgLTQ0MCw3ICs0NDEsNyBAQAogCSAgIG9mIHRoZSBicmllZiBuZXRpZl9zdG9wX3F1ZXVlLiBJZiB0aGlzIGlzbid0IHRydWUgb3IgaWYgaXQKIAkgICBjaGFuZ2VzLCB1c2UgbmV0aWZfd2FrZV9xdWV1ZSBpbnN0ZWFkLiAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaXBfcHJpdi0+eG9mZl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBjbGlwX21raXAoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHRpbWVvdXQpCmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCBmZjJlNTk0Li5iMmQ2NDQ1IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTU5LDcgKzU5LDggQEAKIAkJCQkgKi8KIAogc3RhdGljIGludCBsZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbGVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbGVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsZWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBsZWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqbGVjX2FycF9maW5kKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKQEAgLTI0Nyw3ICsyNDgsOCBAQAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAotc3RhdGljIGludCBsZWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGxlY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza19idWZmICpza2IyOwogCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yODksNyArMjkxLDcgQEAKIAkJc2tiMiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTEVDX0hFQURFUl9MRU4pOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJaWYgKHNrYjIgPT0gTlVMTCkKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJc2tiID0gc2tiMjsKIAl9CiAJc2tiX3B1c2goc2tiLCAyKTsKQEAgLTMwNyw3ICszMDksNyBAQAogCQlza2IyID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMRUNfSEVBREVSX0xFTik7CiAJCWtmcmVlX3NrYihza2IpOwogCQlpZiAoc2tiMiA9PSBOVUxMKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQlza2IgPSBza2IyOwogCX0KICNlbmRpZgpAQCAtMzQ1LDcgKzM0Nyw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlpZiAoc2tiMiA9PSBOVUxMKSB7CiAJCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KIAkJCXNrYiA9IHNrYjI7CiAJCX0KQEAgLTQxNiw3ICs0MTgsNyBAQAogCWlmIChlbnRyeSkKIAkJbGVjX2FycF9wdXQoZW50cnkpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIC8qIFRoZSBpbnZlcnNlIHJvdXRpbmUgdG8gbmV0X29wZW4oKS4gKi8KQEAgLTkzNSw5ICs5MzcsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBjaGFyICpsZWNfYXJwX2dldF9zdGF0dXNfc3RyaW5nKHVuc2lnbmVkIGNoYXIgc3RhdHVzKQorc3RhdGljIGNvbnN0IGNoYXIgKmxlY19hcnBfZ2V0X3N0YXR1c19zdHJpbmcodW5zaWduZWQgY2hhciBzdGF0dXMpCiB7Ci0Jc3RhdGljIGNoYXIgKmxlY19hcnBfc3RhdHVzX3N0cmluZ1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBsZWNfYXJwX3N0YXR1c19zdHJpbmdbXSA9IHsKIAkJIkVTSV9VTktOT1dOICAgICAgICIsCiAJCSJFU0lfQVJQX1BFTkRJTkcgICAiLAogCQkiRVNJX1ZDX1BFTkRJTkcgICAgIiwKQEAgLTExMjEsNyArMTEyMyw4IEBACiAKIHN0YXRpYyBpbnQgbGVjX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0YXRpYyBjaGFyIGxlY19iYW5uZXJbXSA9ICJJdGYgIE1BQyAgICAgICAgICBBVE0gZGVzdGluYXRpb24iCisJc3RhdGljIGNvbnN0IGNoYXIgbGVjX2Jhbm5lcltdID0KKwkgICAgIkl0ZiAgTUFDICAgICAgICAgIEFUTSBkZXN0aW5hdGlvbiIKIAkgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgRmxhZ3MgIgogCSAgICAiVlBJL1ZDSSBSZWN2IFZQSS9WQ0lcbiI7CiAKQEAgLTE1MDUsNyArMTUwOCw3IEBACiB9CiAKICNpZiBERUJVR19BUlBfVEFCTEUKLXN0YXRpYyBjaGFyICpnZXRfc3RhdHVzX3N0cmluZyh1bnNpZ25lZCBjaGFyIHN0KQorc3RhdGljIGNvbnN0IGNoYXIgKmdldF9zdGF0dXNfc3RyaW5nKHVuc2lnbmVkIGNoYXIgc3QpCiB7CiAJc3dpdGNoIChzdCkgewogCWNhc2UgRVNJX1VOS05PV046CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCBlNWJmMTE0Li4zOGE2Y2IwIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTczLDcgKzczLDggQEAKIHN0YXRpYyBpbnQgbXNnX2Zyb21fbXBvYWQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyB2b2lkIG1wY19wdXNoKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGludCBtcGNfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbXBvYV9ldmVudF9saXN0ZW5lcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1wb2Ffbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRldik7CiBzdGF0aWMgdm9pZCBtcGNfdGltZXJfcmVmcmVzaCh2b2lkKTsKIHN0YXRpYyB2b2lkIG1wY19jYWNoZV9jaGVjayggdW5zaWduZWQgbG9uZyBjaGVja2luZ190aW1lICApOwpAQCAtNTI4LDcgKzUyOSw4IEBACiAvKgogICogUHJvYmFibHkgbmVlZHMgc29tZSBlcnJvciBjaGVja3MgYW5kIGxvY2tpbmcsIG5vdCBzdXJlLi4uCiAgKi8KLXN0YXRpYyBpbnQgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwogCXN0cnVjdCBldGhoZHIgKmV0aDsKQEAgLTU1NCw3ICs1NTYsNyBAQAogCXdoaWxlIChpIDwgbXBjLT5udW1iZXJfb2ZfbXBzX21hY3MpIHsKIAkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QsIChtcGMtPm1wc19tYWNzICsgaSpFVEhfQUxFTikpKQogCQkJaWYgKCBzZW5kX3ZpYV9zaG9ydGN1dChza2IsIG1wYykgPT0gMCApICAgICAgICAgICAvKiB0cnkgc2hvcnRjdXQgKi8KLQkJCQlyZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdWNjZXNzISAgICAgKi8KKwkJCQlyZXR1cm4gTkVUREVWX1RYX09LOyAgICAgICAgICAgICAgICAgICAgICAvKiBzdWNjZXNzISAgICAgKi8KIAkJaSsrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcm9jLmMgYi9uZXQvYXRtL3Byb2MuYwppbmRleCAzOGRlNWZmLi5hYjg0MTlhIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Byb2MuYworKysgYi9uZXQvYXRtL3Byb2MuYwpAQCAtMTUxLDggKzE1MSw5IEBACiAKIHN0YXRpYyB2b2lkIHB2Y19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewotCXN0YXRpYyBjb25zdCBjaGFyICpjbGFzc19uYW1lW10gPSB7ICJvZmYiLCJVQlIiLCJDQlIiLCJWQlIiLCJBQlIiIH07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmFhbF9uYW1lW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNsYXNzX25hbWVbXSA9CisJCXsib2ZmIiwiVUJSIiwiQ0JSIiwiVkJSIiwiQUJSIn07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFhbF9uYW1lW10gPSB7CiAJCSItLS0iLAkiMSIsCSIyIiwJIjMvNCIsCS8qICAwLSAzICovCiAJCSI/Pz8iLAkiNSIsCSI/Pz8iLAkiPz8/IiwJLyogIDQtIDcgKi8KIAkJIj8/PyIsCSI/Pz8iLAkiPz8/IiwJIj8/PyIsCS8qICA4LTExICovCkBAIC0xNzgsNyArMTc5LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnZjY19zdGF0ZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewotCXN0YXRpYyBjb25zdCBjaGFyICptYXBbXSA9IHsgQVRNX1ZTMlRYVF9NQVAgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWFwW10gPSB7IEFUTV9WUzJUWFRfTUFQIH07CiAKIAlyZXR1cm4gbWFwW0FUTV9WRjJWUyh2Y2MtPmZsYWdzKV07CiB9CkBAIC0zMzUsNyArMzM2LDcgQEAKIAogc3RhdGljIGludCBzdmNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNoYXIgYXRtX3N2Y19iYW5uZXJbXSA9CisJc3RhdGljIGNvbnN0IGNoYXIgYXRtX3N2Y19iYW5uZXJbXSA9CiAJCSJJdGYgVlBJIFZDSSAgICAgICAgICAgU3RhdGUgICAgICBSZW1vdGVcbiI7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL0tjb25maWcgYi9uZXQvYmx1ZXRvb3RoL0tjb25maWcKaW5kZXggNTlmZGIxZC4uZWQzNzE2OCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9LY29uZmlnCisrKyBiL25ldC9ibHVldG9vdGgvS2NvbmZpZwpAQCAtMzQsNiArMzQsNyBAQAogY29uZmlnIEJUX0wyQ0FQCiAJdHJpc3RhdGUgIkwyQ0FQIHByb3RvY29sIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCVAorCXNlbGVjdCBDUkMxNgogCWhlbHAKIAkgIEwyQ0FQIChMb2dpY2FsIExpbmsgQ29udHJvbCBhbmQgQWRhcHRhdGlvbiBQcm90b2NvbCkgcHJvdmlkZXMKIAkgIGNvbm5lY3Rpb24gb3JpZW50ZWQgYW5kIGNvbm5lY3Rpb24tbGVzcyBkYXRhIHRyYW5zcG9ydC4gIEwyQ0FQCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCAwMjUwZTA2Li44Y2ZiNWE4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyBERUZJTkVfUldMT0NLKGJ0X3Byb3RvX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X2xvY2tfa2V5W0JUX01BWF9QUk9UT107Ci1zdGF0aWMgY29uc3QgY2hhciAqYnRfa2V5X3N0cmluZ3NbQlRfTUFYX1BST1RPXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBidF9rZXlfc3RyaW5nc1tCVF9NQVhfUFJPVE9dID0gewogCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX0wyQ0FQIiwKIAkic2tfbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19IQ0kiLAogCSJza19sb2NrLUFGX0JMVUVUT09USC1CVFBST1RPX1NDTyIsCkBAIC02MSw3ICs2MSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X3Nsb2NrX2tleVtCVF9NQVhfUFJPVE9dOwotc3RhdGljIGNvbnN0IGNoYXIgKmJ0X3Nsb2NrX2tleV9zdHJpbmdzW0JUX01BWF9QUk9UT10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnRfc2xvY2tfa2V5X3N0cmluZ3NbQlRfTUFYX1BST1RPXSA9IHsKIAkic2xvY2stQUZfQkxVRVRPT1RILUJUUFJPVE9fTDJDQVAiLAogCSJzbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19IQ0kiLAogCSJzbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19TQ08iLApkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKaW5kZXggNTJhNmNlMC4uY2FmZTlmNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC01MzMsNiArNTMzLDEwIEBACiAJcmV0dXJuIGNvbm4gPyAmY29ubi0+ZGV2IDogTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBibmVwX3R5cGUgPSB7CisJLm5hbWUJPSAiYmx1ZXRvb3RoIiwKK307CisKIGludCBibmVwX2FkZF9jb25uZWN0aW9uKHN0cnVjdCBibmVwX2Nvbm5hZGRfcmVxICpyZXEsIHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTU4Niw2ICs1OTAsNyBAQAogI2VuZGlmCiAKIAlTRVRfTkVUREVWX0RFVihkZXYsIGJuZXBfZ2V0X2RldmljZShzKSk7CisJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmJuZXBfdHlwZSk7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKaW5kZXggZDdhMGU5Ny4uMjZmYjgzMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCisrKyBiL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYwpAQCAtMTY1LDcgKzE2NSw4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBibmVwX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgbmV0ZGV2X3R4X3QgYm5lcF9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibmVwX3Nlc3Npb24gKnMgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzb2NrICpzayA9IHMtPnNvY2stPnNrOwpAQCAtMTc1LDE0ICsxNzYsMTQgQEAKICNpZmRlZiBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVIKIAlpZiAoYm5lcF9uZXRfbWNfZmlsdGVyKHNrYiwgcykpIHsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSCiAJaWYgKGJuZXBfbmV0X3Byb3RvX2ZpbHRlcihza2IsIHMpKSB7CiAJCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAjZW5kaWYKIApAQCAtMjAzLDcgKzIwNCw3IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJuZXBfbmV0ZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBmYTQ3ZDVkLi5hOTc1MDk4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0yNDYsNiArMjQ2LDggQEAKIAlpZiAoaGRldi0+bm90aWZ5KQogCQloZGV2LT5ub3RpZnkoaGRldiwgSENJX05PVElGWV9DT05OX0FERCk7CiAKKwlhdG9taWNfc2V0KCZjb25uLT5kZXZyZWYsIDApOworCiAJaGNpX2Nvbm5faW5pdF9zeXNmcyhjb25uKTsKIAogCXRhc2tsZXRfZW5hYmxlKCZoZGV2LT50eF90YXNrKTsKQEAgLTI4OCw3ICsyOTAsNyBAQAogCiAJc2tiX3F1ZXVlX3B1cmdlKCZjb25uLT5kYXRhX3EpOwogCi0JaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOworCWhjaV9jb25uX3B1dF9kZXZpY2UoY29ubik7CiAKIAloY2lfZGV2X3B1dChoZGV2KTsKIApAQCAtNTgzLDYgKzU4NSwxOSBAQAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCit2b2lkIGhjaV9jb25uX2hvbGRfZGV2aWNlKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlhdG9taWNfaW5jKCZjb25uLT5kZXZyZWYpOworfQorRVhQT1JUX1NZTUJPTChoY2lfY29ubl9ob2xkX2RldmljZSk7CisKK3ZvaWQgaGNpX2Nvbm5fcHV0X2RldmljZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvbm4tPmRldnJlZikpCisJCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKK30KK0VYUE9SVF9TWU1CT0woaGNpX2Nvbm5fcHV0X2RldmljZSk7CisKIGludCBoY2lfZ2V0X2Nvbm5fbGlzdCh2b2lkIF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBoY2lfY29ubl9saXN0X3JlcSByZXEsICpjbDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA0MDZhZDA3Li5lMWRhOGY2IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC05MTEsNyArOTExLDcgQEAKIAkJaGRldi0+cmVhc3NlbWJseVtpXSA9IE5VTEw7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZoZGV2LT5yZXFfd2FpdF9xKTsKLQlpbml0X01VVEVYKCZoZGV2LT5yZXFfbG9jayk7CisJbXV0ZXhfaW5pdCgmaGRldi0+cmVxX2xvY2spOwogCiAJaW5xdWlyeV9jYWNoZV9pbml0KGhkZXYpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCAxODRiYTBhLi5lOTlmZTM4IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTg4Nyw2ICs4ODcsNyBAQAogCQl9IGVsc2UKIAkJCWNvbm4tPnN0YXRlID0gQlRfQ09OTkVDVEVEOwogCisJCWhjaV9jb25uX2hvbGRfZGV2aWNlKGNvbm4pOwogCQloY2lfY29ubl9hZGRfc3lzZnMoY29ubik7CiAKIAkJaWYgKHRlc3RfYml0KEhDSV9BVVRILCAmaGRldi0+ZmxhZ3MpKQpAQCAtMTY5Myw2ICsxNjk0LDcgQEAKIAkJY29ubi0+aGFuZGxlID0gX19sZTE2X3RvX2NwdShldi0+aGFuZGxlKTsKIAkJY29ubi0+c3RhdGUgID0gQlRfQ09OTkVDVEVEOwogCisJCWhjaV9jb25uX2hvbGRfZGV2aWNlKGNvbm4pOwogCQloY2lfY29ubl9hZGRfc3lzZnMoY29ubik7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCBiMTg2NzY4Li4wOWJlZGViIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CisjaW5jbHVkZSA8bGludXgvaGlkcmF3Lmg+CiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KQEAgLTkyLDEwICs5MywxNCBAQAogewogCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CiAJbGlzdF9hZGQoJnNlc3Npb24tPmxpc3QsICZoaWRwX3Nlc3Npb25fbGlzdCk7CisKKwloY2lfY29ubl9ob2xkX2RldmljZShzZXNzaW9uLT5jb25uKTsKIH0KIAogc3RhdGljIHZvaWQgX19oaWRwX3VubGlua19zZXNzaW9uKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24pCiB7CisJaGNpX2Nvbm5fcHV0X2RldmljZShzZXNzaW9uLT5jb25uKTsKKwogCWxpc3RfZGVsKCZzZXNzaW9uLT5saXN0KTsKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KQEAgLTM3NCw2ICszNzksNyBAQAogCiAJCS8qIEtpbGwgc2Vzc2lvbiB0aHJlYWQgKi8KIAkJYXRvbWljX2luYygmc2Vzc2lvbi0+dGVybWluYXRlKTsKKwkJaGlkcF9zY2hlZHVsZShzZXNzaW9uKTsKIAl9CiB9CiAKQEAgLTU3Myw3ICs1NzksMTEgQEAKIAlpZiAoc2Vzc2lvbi0+aGlkKSB7CiAJCWlmIChzZXNzaW9uLT5oaWQtPmNsYWltZWQgJiBISURfQ0xBSU1FRF9JTlBVVCkKIAkJCWhpZGlucHV0X2Rpc2Nvbm5lY3Qoc2Vzc2lvbi0+aGlkKTsKKwkJaWYgKHNlc3Npb24tPmhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0hJRFJBVykKKwkJCWhpZHJhd19kaXNjb25uZWN0KHNlc3Npb24tPmhpZCk7CisKIAkJaGlkX2Rlc3Ryb3lfZGV2aWNlKHNlc3Npb24tPmhpZCk7CisJCXNlc3Npb24tPmhpZCA9IE5VTEw7CiAJfQogCiAJLyogV2FrZXVwIHVzZXItc3BhY2UgcG9sbGluZyBmb3Igc29ja2V0IGVycm9ycyAqLwpAQCAtNjAxLDI1ICs2MTEsMjcgQEAKIHsKIAliZGFkZHJfdCAqc3JjID0gJmJ0X3NrKHNlc3Npb24tPmN0cmxfc29jay0+c2spLT5zcmM7CiAJYmRhZGRyX3QgKmRzdCA9ICZidF9zayhzZXNzaW9uLT5jdHJsX3NvY2stPnNrKS0+ZHN0OworCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9IE5VTEw7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7Ci0Jc3RydWN0IGhjaV9jb25uICpjb25uOwogCiAJaGRldiA9IGhjaV9nZXRfcm91dGUoZHN0LCBzcmMpOwogCWlmICghaGRldikKIAkJcmV0dXJuIE5VTEw7CiAKLQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssIGRzdCk7CisJc2Vzc2lvbi0+Y29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIEFDTF9MSU5LLCBkc3QpOworCWlmIChzZXNzaW9uLT5jb25uKQorCQlkZXZpY2UgPSAmc2Vzc2lvbi0+Y29ubi0+ZGV2OwogCiAJaGNpX2Rldl9wdXQoaGRldik7CiAKLQlyZXR1cm4gY29ubiA/ICZjb25uLT5kZXYgOiBOVUxMOworCXJldHVybiBkZXZpY2U7CiB9CiAKIHN0YXRpYyBpbnQgaGlkcF9zZXR1cF9pbnB1dChzdHJ1Y3QgaGlkcF9zZXNzaW9uICpzZXNzaW9uLAogCQkJCXN0cnVjdCBoaWRwX2Nvbm5hZGRfcmVxICpyZXEpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Ci0JaW50IGk7CisJaW50IGVyciwgaTsKIAogCWlucHV0ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFpbnB1dCkKQEAgLTY2Niw3ICs2NzgsMTMgQEAKIAogCWlucHV0LT5ldmVudCA9IGhpZHBfaW5wdXRfZXZlbnQ7CiAKLQlyZXR1cm4gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOworCWlmIChlcnIgPCAwKSB7CisJCWhjaV9jb25uX3B1dF9kZXZpY2Uoc2Vzc2lvbi0+Y29ubik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaGlkcF9vcGVuKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCkBAIC03NDgsMTMgKzc2NiwxMSBAQAogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7CiAJYmRhZGRyX3Qgc3JjLCBkc3Q7Ci0JaW50IHJldDsKKwlpbnQgZXJyOwogCiAJaGlkID0gaGlkX2FsbG9jYXRlX2RldmljZSgpOwotCWlmIChJU19FUlIoaGlkKSkgewotCQlyZXQgPSBQVFJfRVJSKHNlc3Npb24tPmhpZCk7Ci0JCWdvdG8gZXJyOwotCX0KKwlpZiAoSVNfRVJSKGhpZCkpCisJCXJldHVybiBQVFJfRVJSKHNlc3Npb24tPmhpZCk7CiAKIAlzZXNzaW9uLT5oaWQgPSBoaWQ7CiAJc2Vzc2lvbi0+cmVxID0gcmVxOwpAQCAtNzc2LDE2ICs3OTIsMTcgQEAKIAloaWQtPmRldi5wYXJlbnQgPSBoaWRwX2dldF9kZXZpY2Uoc2Vzc2lvbik7CiAJaGlkLT5sbF9kcml2ZXIgPSAmaGlkcF9oaWRfZHJpdmVyOwogCi0JcmV0ID0gaGlkX2FkZF9kZXZpY2UoaGlkKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9oaWQ7CisJZXJyID0gaGlkX2FkZF9kZXZpY2UoaGlkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsZWQ7CiAKIAlyZXR1cm4gMDsKLWVycl9oaWQ6CisKK2ZhaWxlZDoKIAloaWRfZGVzdHJveV9kZXZpY2UoaGlkKTsKIAlzZXNzaW9uLT5oaWQgPSBOVUxMOwotZXJyOgotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgaGlkcF9hZGRfY29ubmVjdGlvbihzdHJ1Y3QgaGlkcF9jb25uYWRkX3JlcSAqcmVxLCBzdHJ1Y3Qgc29ja2V0ICpjdHJsX3NvY2ssIHN0cnVjdCBzb2NrZXQgKmludHJfc29jaykKQEAgLTgzNSwxMyArODUyLDEzIEBACiAJaWYgKHJlcS0+cmRfc2l6ZSA+IDApIHsKIAkJZXJyID0gaGlkcF9zZXR1cF9oaWQoc2Vzc2lvbiwgcmVxKTsKIAkJaWYgKGVyciAmJiBlcnIgIT0gLUVOT0RFVikKLQkJCWdvdG8gZXJyX3NrYjsKKwkJCWdvdG8gcHVyZ2U7CiAJfQogCiAJaWYgKCFzZXNzaW9uLT5oaWQpIHsKIAkJZXJyID0gaGlkcF9zZXR1cF9pbnB1dChzZXNzaW9uLCByZXEpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyX3NrYjsKKwkJCWdvdG8gcHVyZ2U7CiAJfQogCiAJX19oaWRwX2xpbmtfc2Vzc2lvbihzZXNzaW9uKTsKQEAgLTg2OSwxMyArODg2LDIwIEBACiAKIAlfX2hpZHBfdW5saW5rX3Nlc3Npb24oc2Vzc2lvbik7CiAKLQlpZiAoc2Vzc2lvbi0+aW5wdXQpCisJaWYgKHNlc3Npb24tPmlucHV0KSB7CiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHNlc3Npb24tPmlucHV0KTsKLQlpZiAoc2Vzc2lvbi0+aGlkKQorCQlzZXNzaW9uLT5pbnB1dCA9IE5VTEw7CisJfQorCisJaWYgKHNlc3Npb24tPmhpZCkgewogCQloaWRfZGVzdHJveV9kZXZpY2Uoc2Vzc2lvbi0+aGlkKTsKLWVycl9za2I6CisJCXNlc3Npb24tPmhpZCA9IE5VTEw7CisJfQorCitwdXJnZToKIAlza2JfcXVldWVfcHVyZ2UoJnNlc3Npb24tPmN0cmxfdHJhbnNtaXQpOwogCXNrYl9xdWV1ZV9wdXJnZSgmc2Vzc2lvbi0+aW50cl90cmFuc21pdCk7CisKIGZhaWxlZDoKIAl1cF93cml0ZSgmaGlkcF9zZXNzaW9uX3NlbSk7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmggYi9uZXQvYmx1ZXRvb3RoL2hpZHAvaGlkcC5oCmluZGV4IGU1MDNjODkuLmZhZjNkNzQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9oaWRwLmgKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2hpZHAuaApAQCAtMTI2LDYgKzEyNiw4IEBACiBzdHJ1Y3QgaGlkcF9zZXNzaW9uIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKIAlzdHJ1Y3Qgc29ja2V0ICpjdHJsX3NvY2s7CiAJc3RydWN0IHNvY2tldCAqaW50cl9zb2NrOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKaW5kZXggYmQwYTRjMS4uYjAzMDEyNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcC5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMTYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTAsNyArNTEsOSBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMi4xMyIKKyNkZWZpbmUgVkVSU0lPTiAiMi4xNCIKKworc3RhdGljIGludCBlbmFibGVfZXJ0bSA9IDA7CiAKIHN0YXRpYyB1MzIgbDJjYXBfZmVhdF9tYXNrID0gTDJDQVBfRkVBVF9GSVhFRF9DSEFOOwogc3RhdGljIHU4IGwyY2FwX2ZpeGVkX2NoYW5bOF0gPSB7IDB4MDIsIH07CkBAIC0zMzEsNiArMzM0LDQ4IEBACiAJcmV0dXJuIGhjaV9zZW5kX2FjbChjb25uLT5oY29uLCBza2IsIDApOwogfQogCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9zZW5kX3NmcmFtZShzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpLCB1MTYgY29udHJvbCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBsMmNhcF9oZHIgKmxoOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gcGktPmNvbm47CisJaW50IGNvdW50LCBobGVuID0gTDJDQVBfSERSX1NJWkUgKyAyOworCisJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQorCQlobGVuICs9IDI7CisKKwlCVF9EQkcoInBpICVwLCBjb250cm9sIDB4JTIuMngiLCBwaSwgY29udHJvbCk7CisKKwljb3VudCA9IG1pbl90KHVuc2lnbmVkIGludCwgY29ubi0+bXR1LCBobGVuKTsKKwljb250cm9sIHw9IEwyQ0FQX0NUUkxfRlJBTUVfVFlQRTsKKworCXNrYiA9IGJ0X3NrYl9hbGxvYyhjb3VudCwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOworCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihobGVuIC0gTDJDQVBfSERSX1NJWkUpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihwaS0+ZGNpZCk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHNrYl9wdXQoc2tiLCAyKSk7CisKKwlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJdTE2IGZjcyA9IGNyYzE2KDAsICh1OCAqKWxoLCBjb3VudCAtIDIpOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoZmNzLCBza2JfcHV0KHNrYiwgMikpOworCX0KKworCXJldHVybiBoY2lfc2VuZF9hY2wocGktPmNvbm4tPmhjb24sIHNrYiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX3NlbmRfcnJfb3Jfcm5yKHN0cnVjdCBsMmNhcF9waW5mbyAqcGksIHUxNiBjb250cm9sKQoreworCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fTE9DQUxfQlVTWSkKKwkJY29udHJvbCB8PSBMMkNBUF9TVVBFUl9SQ1ZfTk9UX1JFQURZOworCWVsc2UKKwkJY29udHJvbCB8PSBMMkNBUF9TVVBFUl9SQ1ZfUkVBRFk7CisKKwlyZXR1cm4gbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworfQorCiBzdGF0aWMgdm9pZCBsMmNhcF9kb19zdGFydChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CkBAIC0zNjQsNiArNDA5LDE2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKHN0cnVjdCBsMmNhcF9jb25uICpjb25uLCBzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IGwyY2FwX2Rpc2Nvbm5fcmVxIHJlcTsKKworCXJlcS5kY2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKKwlyZXEuc2NpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CisJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAorCQkJTDJDQVBfRElTQ09OTl9SRVEsIHNpemVvZihyZXEpLCAmcmVxKTsKK30KKwogLyogLS0tLSBMMkNBUCBjb25uZWN0aW9ucyAtLS0tICovCiBzdGF0aWMgdm9pZCBsMmNhcF9jb25uX3N0YXJ0KHN0cnVjdCBsMmNhcF9jb25uICpjb25uKQogewpAQCAtNjQ4LDE1ICs3MDMsMTAgQEAKIAljYXNlIEJUX0NPTkZJRzoKIAkJaWYgKHNrLT5za190eXBlID09IFNPQ0tfU0VRUEFDS0VUKSB7CiAJCQlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQkJCXN0cnVjdCBsMmNhcF9kaXNjb25uX3JlcSByZXE7CiAKIAkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CiAJCQlsMmNhcF9zb2NrX3NldF90aW1lcihzaywgc2stPnNrX3NuZHRpbWVvKTsKLQotCQkJcmVxLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAotCQkJCQlMMkNBUF9ESVNDT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShjb25uLCBzayk7CiAJCX0gZWxzZQogCQkJbDJjYXBfY2hhbl9kZWwoc2ssIHJlYXNvbik7CiAJCWJyZWFrOwpAQCAtNzE1LDEyICs3NjUsMTYgQEAKIAogCQlwaS0+aW10dSA9IGwyY2FwX3BpKHBhcmVudCktPmltdHU7CiAJCXBpLT5vbXR1ID0gbDJjYXBfcGkocGFyZW50KS0+b210dTsKKwkJcGktPm1vZGUgPSBsMmNhcF9waShwYXJlbnQpLT5tb2RlOworCQlwaS0+ZmNzICA9IGwyY2FwX3BpKHBhcmVudCktPmZjczsKIAkJcGktPnNlY19sZXZlbCA9IGwyY2FwX3BpKHBhcmVudCktPnNlY19sZXZlbDsKIAkJcGktPnJvbGVfc3dpdGNoID0gbDJjYXBfcGkocGFyZW50KS0+cm9sZV9zd2l0Y2g7CiAJCXBpLT5mb3JjZV9yZWxpYWJsZSA9IGwyY2FwX3BpKHBhcmVudCktPmZvcmNlX3JlbGlhYmxlOwogCX0gZWxzZSB7CiAJCXBpLT5pbXR1ID0gTDJDQVBfREVGQVVMVF9NVFU7CiAJCXBpLT5vbXR1ID0gMDsKKwkJcGktPm1vZGUgPSBMMkNBUF9NT0RFX0JBU0lDOworCQlwaS0+ZmNzICA9IEwyQ0FQX0ZDU19DUkMxNjsKIAkJcGktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX0xPVzsKIAkJcGktPnJvbGVfc3dpdGNoID0gMDsKIAkJcGktPmZvcmNlX3JlbGlhYmxlID0gMDsKQEAgLTk1Niw2ICsxMDEwLDE5IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKKwlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+bW9kZSkgeworCWNhc2UgTDJDQVBfTU9ERV9CQVNJQzoKKwkJYnJlYWs7CisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJaWYgKGVuYWJsZV9lcnRtKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9UU1VQUDsKKwkJZ290byBkb25lOworCX0KKwogCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJY2FzZSBCVF9DT05ORUNUOgogCWNhc2UgQlRfQ09OTkVDVDI6CkBAIC0xMDA3LDYgKzEwNzQsMTkgQEAKIAkJZ290byBkb25lOwogCX0KIAorCXN3aXRjaCAobDJjYXBfcGkoc2spLT5tb2RlKSB7CisJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgorCQlicmVhazsKKwljYXNlIEwyQ0FQX01PREVfRVJUTToKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQlpZiAoZW5hYmxlX2VydG0pCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT1RTVVBQOworCQlnb3RvIGRvbmU7CisJfQorCiAJaWYgKCFsMmNhcF9waShzayktPnBzbSkgewogCQliZGFkZHJfdCAqc3JjID0gJmJ0X3NrKHNrKS0+c3JjOwogCQl1MTYgcHNtOwpAQCAtMTExNywzOSArMTE5NywyMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZG9fc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbikKK3N0YXRpYyB2b2lkIGwyY2FwX21vbml0b3JfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKSBhcmc7CisJdTE2IGNvbnRyb2w7CisKKwliaF9sb2NrX3NvY2soc2spOworCWlmIChsMmNhcF9waShzayktPnJldHJ5X2NvdW50ID49IGwyY2FwX3BpKHNrKS0+cmVtb3RlX21heF90eCkgeworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGwyY2FwX3BpKHNrKS0+Y29ubiwgc2spOworCQlyZXR1cm47CisJfQorCisJbDJjYXBfcGkoc2spLT5yZXRyeV9jb3VudCsrOworCV9fbW9kX21vbml0b3JfdGltZXIoKTsKKworCWNvbnRyb2wgPSBMMkNBUF9DVFJMX1BPTEw7CisJbDJjYXBfc2VuZF9ycl9vcl9ybnIobDJjYXBfcGkoc2spLCBjb250cm9sKTsKKwliaF91bmxvY2tfc29jayhzayk7Cit9CisKK3N0YXRpYyB2b2lkIGwyY2FwX3JldHJhbnNfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKSBhcmc7CisJdTE2IGNvbnRyb2w7CisKKwliaF9sb2NrX3NvY2soc2spOworCWwyY2FwX3BpKHNrKS0+cmV0cnlfY291bnQgPSAxOworCV9fbW9kX21vbml0b3JfdGltZXIoKTsKKworCWwyY2FwX3BpKHNrKS0+Y29ubl9zdGF0ZSB8PSBMMkNBUF9DT05OX1dBSVRfRjsKKworCWNvbnRyb2wgPSBMMkNBUF9DVFJMX1BPTEw7CisJbDJjYXBfc2VuZF9ycl9vcl9ybnIobDJjYXBfcGkoc2spLCBjb250cm9sKTsKKwliaF91bmxvY2tfc29jayhzayk7Cit9CisKK3N0YXRpYyB2b2lkIGwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJd2hpbGUgKChza2IgPSBza2JfcGVlayhUWF9RVUVVRShzaykpKSkgeworCQlpZiAoYnRfY2Ioc2tiKS0+dHhfc2VxID09IGwyY2FwX3BpKHNrKS0+ZXhwZWN0ZWRfYWNrX3NlcSkKKwkJCWJyZWFrOworCisJCXNrYiA9IHNrYl9kZXF1ZXVlKFRYX1FVRVVFKHNrKSk7CisJCWtmcmVlX3NrYihza2IpOworCisJCWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMtLTsKKwl9CisKKwlpZiAoIWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMpCisJCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZG9fc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlpbnQgZXJyOworCisJQlRfREJHKCJzayAlcCwgc2tiICVwIGxlbiAlZCIsIHNrLCBza2IsIHNrYi0+bGVuKTsKKworCWVyciA9IGhjaV9zZW5kX2FjbChwaS0+Y29ubi0+aGNvbiwgc2tiLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGwyY2FwX3N0cmVhbWluZ19zZW5kKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJdTE2IGNvbnRyb2wsIGZjczsKKwlpbnQgZXJyOworCisJd2hpbGUgKChza2IgPSBzay0+c2tfc2VuZF9oZWFkKSkgeworCQl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKworCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKwkJY29udHJvbCB8PSBwaS0+bmV4dF90eF9zZXEgPDwgTDJDQVBfQ1RSTF9UWFNFUV9TSElGVDsKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKworCQlpZiAobDJjYXBfcGkoc2spLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KSB7CisJCQlmY3MgPSBjcmMxNigwLCAodTggKil0eF9za2ItPmRhdGEsIHR4X3NrYi0+bGVuIC0gMik7CisJCQlwdXRfdW5hbGlnbmVkX2xlMTYoZmNzLCB0eF9za2ItPmRhdGEgKyB0eF9za2ItPmxlbiAtIDIpOworCQl9CisKKwkJZXJyID0gbDJjYXBfZG9fc2VuZChzaywgdHhfc2tiKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEocGktPmNvbm4sIHNrKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlwaS0+bmV4dF90eF9zZXEgPSAocGktPm5leHRfdHhfc2VxICsgMSkgJSA2NDsKKworCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQorCQkJc2stPnNrX3NlbmRfaGVhZCA9IE5VTEw7CisJCWVsc2UKKwkJCXNrLT5za19zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dChUWF9RVUVVRShzayksIHNrYik7CisKKwkJc2tiID0gc2tiX2RlcXVldWUoVFhfUVVFVUUoc2spKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGwyY2FwX3JldHJhbnNtaXRfZnJhbWUoc3RydWN0IHNvY2sgKnNrLCB1OCB0eF9zZXEpCit7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdHhfc2tiOworCXUxNiBjb250cm9sLCBmY3M7CisJaW50IGVycjsKKworCXNrYiA9IHNrYl9wZWVrKFRYX1FVRVVFKHNrKSk7CisJZG8geworCQlpZiAoYnRfY2Ioc2tiKS0+dHhfc2VxICE9IHR4X3NlcSkgeworCQkJaWYgKHNrYl9xdWV1ZV9pc19sYXN0KFRYX1FVRVVFKHNrKSwgc2tiKSkKKwkJCQlicmVhazsKKwkJCXNrYiA9IHNrYl9xdWV1ZV9uZXh0KFRYX1FVRVVFKHNrKSwgc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCisJCQkJYnRfY2Ioc2tiKS0+cmV0cmllcyA9PSBwaS0+cmVtb3RlX21heF90eCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJYnJlYWs7CisJCX0KKworCQl0eF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJYnRfY2Ioc2tiKS0+cmV0cmllcysrOworCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKwkJY29udHJvbCB8PSAocGktPnJlcV9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpCisJCQkJfCAodHhfc2VxIDw8IEwyQ0FQX0NUUkxfVFhTRVFfU0hJRlQpOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoY29udHJvbCwgdHhfc2tiLT5kYXRhICsgTDJDQVBfSERSX1NJWkUpOworCisJCWlmIChsMmNhcF9waShzayktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJCWZjcyA9IGNyYzE2KDAsICh1OCAqKXR4X3NrYi0+ZGF0YSwgdHhfc2tiLT5sZW4gLSAyKTsKKwkJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHR4X3NrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CisJCX0KKworCQllcnIgPSBsMmNhcF9kb19zZW5kKHNrLCB0eF9za2IpOworCQlpZiAoZXJyIDwgMCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlicmVhazsKKwl9IHdoaWxlKDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGwyY2FwX2VydG1fc2VuZChzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnR4X3NrYjsKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCXUxNiBjb250cm9sLCBmY3M7CisJaW50IGVycjsKKworCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgoc2tiID0gc2stPnNrX3NlbmRfaGVhZCkgJiYgKCFsMmNhcF90eF93aW5kb3dfZnVsbChzaykpCisJCQkmJiAhKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkpIHsKKwkJdHhfc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHBpLT5yZW1vdGVfbWF4X3R4ICYmCisJCQkJYnRfY2Ioc2tiKS0+cmV0cmllcyA9PSBwaS0+cmVtb3RlX21heF90eCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJYnJlYWs7CisJCX0KKworCQlidF9jYihza2IpLT5yZXRyaWVzKys7CisKKwkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNih0eF9za2ItPmRhdGEgKyBMMkNBUF9IRFJfU0laRSk7CisJCWNvbnRyb2wgfD0gKHBpLT5yZXFfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUKQorCQkJCXwgKHBpLT5uZXh0X3R4X3NlcSA8PCBMMkNBUF9DVFJMX1RYU0VRX1NISUZUKTsKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KGNvbnRyb2wsIHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKworCisJCWlmIChsMmNhcF9waShzayktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpIHsKKwkJCWZjcyA9IGNyYzE2KDAsICh1OCAqKXNrYi0+ZGF0YSwgdHhfc2tiLT5sZW4gLSAyKTsKKwkJCXB1dF91bmFsaWduZWRfbGUxNihmY3MsIHNrYi0+ZGF0YSArIHR4X3NrYi0+bGVuIC0gMik7CisJCX0KKworCQllcnIgPSBsMmNhcF9kb19zZW5kKHNrLCB0eF9za2IpOworCQlpZiAoZXJyIDwgMCkgeworCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlfX21vZF9yZXRyYW5zX3RpbWVyKCk7CisKKwkJYnRfY2Ioc2tiKS0+dHhfc2VxID0gcGktPm5leHRfdHhfc2VxOworCQlwaS0+bmV4dF90eF9zZXEgPSAocGktPm5leHRfdHhfc2VxICsgMSkgJSA2NDsKKworCQlwaS0+dW5hY2tlZF9mcmFtZXMrKzsKKworCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoVFhfUVVFVUUoc2spLCBza2IpKQorCQkJc2stPnNrX3NlbmRfaGVhZCA9IE5VTEw7CisJCWVsc2UKKwkJCXNrLT5za19zZW5kX2hlYWQgPSBza2JfcXVldWVfbmV4dChUWF9RVUVVRShzayksIHNrYik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX3NrYnVmZl9mcm9taW92ZWMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBjb3VudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqKmZyYWc7Ci0JaW50IGVyciwgaGxlbiwgY291bnQsIHNlbnQgPSAwOwotCXN0cnVjdCBsMmNhcF9oZHIgKmxoOwotCi0JQlRfREJHKCJzayAlcCBsZW4gJWQiLCBzaywgbGVuKTsKLQotCS8qIEZpcnN0IGZyYWdtZW50ICh3aXRoIEwyQ0FQIGhlYWRlcikgKi8KLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19ER1JBTSkKLQkJaGxlbiA9IEwyQ0FQX0hEUl9TSVpFICsgMjsKLQllbHNlCi0JCWhsZW4gPSBMMkNBUF9IRFJfU0laRTsKLQotCWNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCAoY29ubi0+bXR1IC0gaGxlbiksIGxlbik7Ci0KLQlza2IgPSBidF9za2Jfc2VuZF9hbGxvYyhzaywgaGxlbiArIGNvdW50LAotCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwotCWlmICghc2tiKQotCQlyZXR1cm4gZXJyOwotCi0JLyogQ3JlYXRlIEwyQ0FQIGhlYWRlciAqLwotCWxoID0gKHN0cnVjdCBsMmNhcF9oZHIgKikgc2tiX3B1dChza2IsIEwyQ0FQX0hEUl9TSVpFKTsKLQlsaC0+Y2lkID0gY3B1X3RvX2xlMTYobDJjYXBfcGkoc2spLT5kY2lkKTsKLQlsaC0+bGVuID0gY3B1X3RvX2xlMTYobGVuICsgKGhsZW4gLSBMMkNBUF9IRFJfU0laRSkpOwotCi0JaWYgKHNrLT5za190eXBlID09IFNPQ0tfREdSQU0pCi0JCXB1dF91bmFsaWduZWQobDJjYXBfcGkoc2spLT5wc20sIChfX2xlMTYgKikgc2tiX3B1dChza2IsIDIpKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKmZyYWc7CisJaW50IGVyciwgc2VudCA9IDA7CiAKIAlpZiAobWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgY291bnQpLCBtc2ctPm1zZ19pb3YsIGNvdW50KSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGZhaWw7CisJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCXNlbnQgKz0gY291bnQ7CkBAIC0xMTYyLDMzICsxNDIyLDE3MyBAQAogCiAJCSpmcmFnID0gYnRfc2tiX3NlbmRfYWxsb2Moc2ssIGNvdW50LCBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7CiAJCWlmICghKmZyYWcpCi0JCQlnb3RvIGZhaWw7Ci0KLQkJaWYgKG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dCgqZnJhZywgY291bnQpLCBtc2ctPm1zZ19pb3YsIGNvdW50KSkgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZmFpbDsKLQkJfQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoKmZyYWcsIGNvdW50KSwgbXNnLT5tc2dfaW92LCBjb3VudCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlzZW50ICs9IGNvdW50OwogCQlsZW4gIC09IGNvdW50OwogCiAJCWZyYWcgPSAmKCpmcmFnKS0+bmV4dDsKIAl9Ci0JZXJyID0gaGNpX3NlbmRfYWNsKGNvbm4tPmhjb24sIHNrYiwgMCk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZmFpbDsKIAogCXJldHVybiBzZW50OworfQogCi1mYWlsOgotCWtmcmVlX3NrYihza2IpOwotCXJldHVybiBlcnI7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgZXJyLCBjb3VudCwgaGxlbiA9IEwyQ0FQX0hEUl9TSVpFICsgMjsKKwlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKKworCUJUX0RCRygic2sgJXAgbGVuICVkIiwgc2ssIChpbnQpbGVuKTsKKworCWNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCAoY29ubi0+bXR1IC0gaGxlbiksIGxlbik7CisJc2tiID0gYnRfc2tiX3NlbmRfYWxsb2Moc2ssIGNvdW50ICsgaGxlbiwKKwkJCW1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCisJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gKyAoaGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSk7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGwyY2FwX3BpKHNrKS0+cHNtLCBza2JfcHV0KHNrYiwgMikpOworCisJZXJyID0gbDJjYXBfc2tidWZmX2Zyb21pb3ZlYyhzaywgbXNnLCBsZW4sIGNvdW50LCBza2IpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpsMmNhcF9jcmVhdGVfYmFzaWNfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2spLT5jb25uOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVyciwgY291bnQsIGhsZW4gPSBMMkNBUF9IRFJfU0laRTsKKwlzdHJ1Y3QgbDJjYXBfaGRyICpsaDsKKworCUJUX0RCRygic2sgJXAgbGVuICVkIiwgc2ssIChpbnQpbGVuKTsKKworCWNvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCAoY29ubi0+bXR1IC0gaGxlbiksIGxlbik7CisJc2tiID0gYnRfc2tiX3NlbmRfYWxsb2Moc2ssIGNvdW50ICsgaGxlbiwKKwkJCW1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkvKiBDcmVhdGUgTDJDQVAgaGVhZGVyICovCisJbGggPSAoc3RydWN0IGwyY2FwX2hkciAqKSBza2JfcHV0KHNrYiwgTDJDQVBfSERSX1NJWkUpOworCWxoLT5jaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOworCWxoLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gKyAoaGxlbiAtIEwyQ0FQX0hEUl9TSVpFKSk7CisKKwllcnIgPSBsMmNhcF9za2J1ZmZfZnJvbWlvdmVjKHNrLCBtc2csIGxlbiwgY291bnQsIHNrYik7CisJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmwyY2FwX2NyZWF0ZV9pZnJhbWVfcGR1KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCB1MTYgY29udHJvbCwgdTE2IHNkdWxlbikKK3sKKwlzdHJ1Y3QgbDJjYXBfY29ubiAqY29ubiA9IGwyY2FwX3BpKHNrKS0+Y29ubjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBlcnIsIGNvdW50LCBobGVuID0gTDJDQVBfSERSX1NJWkUgKyAyOworCXN0cnVjdCBsMmNhcF9oZHIgKmxoOworCisJQlRfREJHKCJzayAlcCBsZW4gJWQiLCBzaywgKGludClsZW4pOworCisJaWYgKHNkdWxlbikKKwkJaGxlbiArPSAyOworCisJaWYgKGwyY2FwX3BpKHNrKS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwkJaGxlbiArPSAyOworCisJY291bnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIChjb25uLT5tdHUgLSBobGVuKSwgbGVuKTsKKwlza2IgPSBidF9za2Jfc2VuZF9hbGxvYyhzaywgY291bnQgKyBobGVuLAorCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCS8qIENyZWF0ZSBMMkNBUCBoZWFkZXIgKi8KKwlsaCA9IChzdHJ1Y3QgbDJjYXBfaGRyICopIHNrYl9wdXQoc2tiLCBMMkNBUF9IRFJfU0laRSk7CisJbGgtPmNpZCA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+ZGNpZCk7CisJbGgtPmxlbiA9IGNwdV90b19sZTE2KGxlbiArIChobGVuIC0gTDJDQVBfSERSX1NJWkUpKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoY29udHJvbCwgc2tiX3B1dChza2IsIDIpKTsKKwlpZiAoc2R1bGVuKQorCQlwdXRfdW5hbGlnbmVkX2xlMTYoc2R1bGVuLCBza2JfcHV0KHNrYiwgMikpOworCisJZXJyID0gbDJjYXBfc2tidWZmX2Zyb21pb3ZlYyhzaywgbXNnLCBsZW4sIGNvdW50LCBza2IpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlpZiAobDJjYXBfcGkoc2spLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KQorCQlwdXRfdW5hbGlnbmVkX2xlMTYoMCwgc2tiX3B1dChza2IsIDIpKTsKKworCWJ0X2NiKHNrYiktPnJldHJpZXMgPSAwOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGwyY2FwX3Nhcl9zZWdtZW50X3NkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBzYXJfcXVldWU7CisJdTE2IGNvbnRyb2w7CisJc2l6ZV90IHNpemUgPSAwOworCisJX19za2JfcXVldWVfaGVhZF9pbml0KCZzYXJfcXVldWUpOworCWNvbnRyb2wgPSBMMkNBUF9TRFVfU1RBUlQ7CisJc2tiID0gbDJjYXBfY3JlYXRlX2lmcmFtZV9wZHUoc2ssIG1zZywgcGktPm1heF9wZHVfc2l6ZSwgY29udHJvbCwgbGVuKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlfX3NrYl9xdWV1ZV90YWlsKCZzYXJfcXVldWUsIHNrYik7CisJbGVuIC09IHBpLT5tYXhfcGR1X3NpemU7CisJc2l6ZSArPXBpLT5tYXhfcGR1X3NpemU7CisJY29udHJvbCA9IDA7CisKKwl3aGlsZSAobGVuID4gMCkgeworCQlzaXplX3QgYnVmbGVuOworCisJCWlmIChsZW4gPiBwaS0+bWF4X3BkdV9zaXplKSB7CisJCQljb250cm9sIHw9IEwyQ0FQX1NEVV9DT05USU5VRTsKKwkJCWJ1ZmxlbiA9IHBpLT5tYXhfcGR1X3NpemU7CisJCX0gZWxzZSB7CisJCQljb250cm9sIHw9IEwyQ0FQX1NEVV9FTkQ7CisJCQlidWZsZW4gPSBsZW47CisJCX0KKworCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBidWZsZW4sIGNvbnRyb2wsIDApOworCQlpZiAoSVNfRVJSKHNrYikpIHsKKwkJCXNrYl9xdWV1ZV9wdXJnZSgmc2FyX3F1ZXVlKTsKKwkJCXJldHVybiBQVFJfRVJSKHNrYik7CisJCX0KKworCQlfX3NrYl9xdWV1ZV90YWlsKCZzYXJfcXVldWUsIHNrYik7CisJCWxlbiAtPSBidWZsZW47CisJCXNpemUgKz0gYnVmbGVuOworCQljb250cm9sID0gMDsKKwl9CisJc2tiX3F1ZXVlX3NwbGljZV90YWlsKCZzYXJfcXVldWUsIFRYX1FVRVVFKHNrKSk7CisJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkKKwkJc2stPnNrX3NlbmRfaGVhZCA9IHNhcl9xdWV1ZS5uZXh0OworCisJcmV0dXJuIHNpemU7CiB9CiAKIHN0YXRpYyBpbnQgbDJjYXBfc29ja19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCWludCBlcnIgPSAwOworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgY29udHJvbDsKKwlpbnQgZXJyOwogCiAJQlRfREJHKCJzb2NrICVwLCBzayAlcCIsIHNvY2ssIHNrKTsKIApAQCAtMTIwMCwxNiArMTYwMCw3MyBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAkvKiBDaGVjayBvdXRnb2luZyBNVFUgKi8KLQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19SQVcgJiYgbGVuID4gbDJjYXBfcGkoc2spLT5vbXR1KQorCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCAmJiBwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX0JBU0lDCisJCQkmJiBsZW4gPiBwaS0+b210dSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlsb2NrX3NvY2soc2spOwogCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBCVF9DT05ORUNURUQpCi0JCWVyciA9IGwyY2FwX2RvX3NlbmQoc2ssIG1zZywgbGVuKTsKLQllbHNlCisJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9DT05ORUNURUQpIHsKIAkJZXJyID0gLUVOT1RDT05OOworCQlnb3RvIGRvbmU7CisJfQogCisJLyogQ29ubmVjdGlvbmxlc3MgY2hhbm5lbCAqLworCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKSB7CisJCXNrYiA9IGwyY2FwX2NyZWF0ZV9jb25ubGVzc19wZHUoc2ssIG1zZywgbGVuKTsKKwkJZXJyID0gbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJZ290byBkb25lOworCX0KKworCXN3aXRjaCAocGktPm1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfQkFTSUM6CisJCS8qIENyZWF0ZSBhIGJhc2ljIFBEVSAqLworCQlza2IgPSBsMmNhcF9jcmVhdGVfYmFzaWNfcGR1KHNrLCBtc2csIGxlbik7CisJCWlmIChJU19FUlIoc2tiKSkgeworCQkJZXJyID0gUFRSX0VSUihza2IpOworCQkJZ290byBkb25lOworCQl9CisKKwkJZXJyID0gbDJjYXBfZG9fc2VuZChzaywgc2tiKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBsZW47CisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJLyogRW50aXJlIFNEVSBmaXRzIGludG8gb25lIFBEVSAqLworCQlpZiAobGVuIDw9IHBpLT5tYXhfcGR1X3NpemUpIHsKKwkJCWNvbnRyb2wgPSBMMkNBUF9TRFVfVU5TRUdNRU5URUQ7CisJCQlza2IgPSBsMmNhcF9jcmVhdGVfaWZyYW1lX3BkdShzaywgbXNnLCBsZW4sIGNvbnRyb2wsIDApOworCQkJaWYgKElTX0VSUihza2IpKSB7CisJCQkJZXJyID0gUFRSX0VSUihza2IpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCV9fc2tiX3F1ZXVlX3RhaWwoVFhfUVVFVUUoc2spLCBza2IpOworCQkJaWYgKHNrLT5za19zZW5kX2hlYWQgPT0gTlVMTCkKKwkJCQlzay0+c2tfc2VuZF9oZWFkID0gc2tiOworCQl9IGVsc2UgeworCQkvKiBTZWdtZW50IFNEVSBpbnRvIG11bHRpcGxlcyBQRFVzICovCisJCQllcnIgPSBsMmNhcF9zYXJfc2VnbWVudF9zZHUoc2ssIG1zZywgbGVuKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmIChwaS0+bW9kZSA9PSBMMkNBUF9NT0RFX1NUUkVBTUlORykKKwkJCWVyciA9IGwyY2FwX3N0cmVhbWluZ19zZW5kKHNrKTsKKwkJZWxzZQorCQkJZXJyID0gbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKworCQlpZiAoIWVycikKKwkJCWVyciA9IGxlbjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlCVF9EQkcoImJhZCBzdGF0ZSAlMS4xeCIsIHBpLT5tb2RlKTsKKwkJZXJyID0gLUVJTlZBTDsKKwl9CisKK2RvbmU6CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTI1Nyw3ICsxNzE0LDggQEAKIAkJb3B0cy5pbXR1ICAgICA9IGwyY2FwX3BpKHNrKS0+aW10dTsKIAkJb3B0cy5vbXR1ICAgICA9IGwyY2FwX3BpKHNrKS0+b210dTsKIAkJb3B0cy5mbHVzaF90byA9IGwyY2FwX3BpKHNrKS0+Zmx1c2hfdG87Ci0JCW9wdHMubW9kZSAgICAgPSBMMkNBUF9NT0RFX0JBU0lDOworCQlvcHRzLm1vZGUgICAgID0gbDJjYXBfcGkoc2spLT5tb2RlOworCQlvcHRzLmZjcyAgICAgID0gbDJjYXBfcGkoc2spLT5mY3M7CiAKIAkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2Yob3B0cyksIG9wdGxlbik7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigoY2hhciAqKSAmb3B0cywgb3B0dmFsLCBsZW4pKSB7CkBAIC0xMjY1LDggKzE3MjMsMTAgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJbDJjYXBfcGkoc2spLT5pbXR1ICA9IG9wdHMuaW10dTsKLQkJbDJjYXBfcGkoc2spLT5vbXR1ICA9IG9wdHMub210dTsKKwkJbDJjYXBfcGkoc2spLT5pbXR1ID0gb3B0cy5pbXR1OworCQlsMmNhcF9waShzayktPm9tdHUgPSBvcHRzLm9tdHU7CisJCWwyY2FwX3BpKHNrKS0+bW9kZSA9IG9wdHMubW9kZTsKKwkJbDJjYXBfcGkoc2spLT5mY3MgID0gb3B0cy5mY3M7CiAJCWJyZWFrOwogCiAJY2FzZSBMMkNBUF9MTToKQEAgLTEzNzksNyArMTgzOSw4IEBACiAJCW9wdHMuaW10dSAgICAgPSBsMmNhcF9waShzayktPmltdHU7CiAJCW9wdHMub210dSAgICAgPSBsMmNhcF9waShzayktPm9tdHU7CiAJCW9wdHMuZmx1c2hfdG8gPSBsMmNhcF9waShzayktPmZsdXNoX3RvOwotCQlvcHRzLm1vZGUgICAgID0gTDJDQVBfTU9ERV9CQVNJQzsKKwkJb3B0cy5tb2RlICAgICA9IGwyY2FwX3BpKHNrKS0+bW9kZTsKKwkJb3B0cy5mY3MgICAgICA9IGwyY2FwX3BpKHNrKS0+ZmNzOwogCiAJCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2Yob3B0cykpOwogCQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgKGNoYXIgKikgJm9wdHMsIGxlbikpCkBAIC0xNzA4LDE2ICsyMTY5LDEwOCBAQAogCSpwdHIgKz0gTDJDQVBfQ09ORl9PUFRfU0laRSArIGxlbjsKIH0KIAorc3RhdGljIGludCBsMmNhcF9tb2RlX3N1cHBvcnRlZChfX3U4IG1vZGUsIF9fdTMyIGZlYXRfbWFzaykKK3sKKwl1MzIgbG9jYWxfZmVhdF9tYXNrID0gbDJjYXBfZmVhdF9tYXNrOworCWlmIChlbmFibGVfZXJ0bSkKKwkJbG9jYWxfZmVhdF9tYXNrIHw9IEwyQ0FQX0ZFQVRfRVJUTSB8IEwyQ0FQX0ZFQVRfU1RSRUFNSU5HOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJCXJldHVybiBMMkNBUF9GRUFUX0VSVE0gJiBmZWF0X21hc2sgJiBsb2NhbF9mZWF0X21hc2s7CisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJcmV0dXJuIEwyQ0FQX0ZFQVRfU1RSRUFNSU5HICYgZmVhdF9tYXNrICYgbG9jYWxfZmVhdF9tYXNrOworCWRlZmF1bHQ6CisJCXJldHVybiAweDAwOworCX0KK30KKworc3RhdGljIGlubGluZSBfX3U4IGwyY2FwX3NlbGVjdF9tb2RlKF9fdTggbW9kZSwgX191MTYgcmVtb3RlX2ZlYXRfbWFzaykKK3sKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQlpZiAobDJjYXBfbW9kZV9zdXBwb3J0ZWQobW9kZSwgcmVtb3RlX2ZlYXRfbWFzaykpCisJCQlyZXR1cm4gbW9kZTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJcmV0dXJuIEwyQ0FQX01PREVfQkFTSUM7CisJfQorfQorCiBzdGF0aWMgaW50IGwyY2FwX2J1aWxkX2NvbmZfcmVxKHN0cnVjdCBzb2NrICpzaywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOwogCXN0cnVjdCBsMmNhcF9jb25mX3JlcSAqcmVxID0gZGF0YTsKKwlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjID0geyAubW9kZSA9IEwyQ0FQX01PREVfRVJUTSB9OwogCXZvaWQgKnB0ciA9IHJlcS0+ZGF0YTsKIAogCUJUX0RCRygic2sgJXAiLCBzayk7CiAKLQlpZiAocGktPmltdHUgIT0gTDJDQVBfREVGQVVMVF9NVFUpCi0JCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPmltdHUpOworCWlmIChwaS0+bnVtX2NvbmZfcmVxIHx8IHBpLT5udW1fY29uZl9yc3ApCisJCWdvdG8gZG9uZTsKKworCXN3aXRjaCAocGktPm1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX1NUQVRFMl9ERVZJQ0U7CisJCWlmICghbDJjYXBfbW9kZV9zdXBwb3J0ZWQocGktPm1vZGUsIHBpLT5jb25uLT5mZWF0X21hc2spKQorCQkJbDJjYXBfc2VuZF9kaXNjb25uX3JlcShwaS0+Y29ubiwgc2spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaS0+bW9kZSA9IGwyY2FwX3NlbGVjdF9tb2RlKHJmYy5tb2RlLCBwaS0+Y29ubi0+ZmVhdF9tYXNrKTsKKwkJYnJlYWs7CisJfQorCitkb25lOgorCXN3aXRjaCAocGktPm1vZGUpIHsKKwljYXNlIEwyQ0FQX01PREVfQkFTSUM6CisJCWlmIChwaS0+aW10dSAhPSBMMkNBUF9ERUZBVUxUX01UVSkKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPmltdHUpOworCQlicmVhazsKKworCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9FUlRNOworCQlyZmMudHh3aW5fc2l6ZSAgICAgID0gTDJDQVBfREVGQVVMVF9UWF9XSU5ET1c7CisJCXJmYy5tYXhfdHJhbnNtaXQgICAgPSBMMkNBUF9ERUZBVUxUX01BWF9UWDsKKwkJcmZjLnJldHJhbnNfdGltZW91dCA9IDA7CisJCXJmYy5tb25pdG9yX3RpbWVvdXQgPSAwOworCQlyZmMubWF4X3BkdV9zaXplICAgID0gY3B1X3RvX2xlMTYoTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUpOworCisJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKKwkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKKworCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQorCQkJYnJlYWs7CisKKwkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKKwkJCQlwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfTk9fRkNTX1JFQ1YpIHsKKwkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgcGktPmZjcyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQlyZmMubW9kZSAgICAgICAgICAgID0gTDJDQVBfTU9ERV9TVFJFQU1JTkc7CisJCXJmYy50eHdpbl9zaXplICAgICAgPSAwOworCQlyZmMubWF4X3RyYW5zbWl0ICAgID0gMDsKKwkJcmZjLnJldHJhbnNfdGltZW91dCA9IDA7CisJCXJmYy5tb25pdG9yX3RpbWVvdXQgPSAwOworCQlyZmMubWF4X3BkdV9zaXplICAgID0gY3B1X3RvX2xlMTYoTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUpOworCisJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX1JGQywKKwkJCQkJc2l6ZW9mKHJmYyksICh1bnNpZ25lZCBsb25nKSAmcmZjKTsKKworCQlpZiAoIShwaS0+Y29ubi0+ZmVhdF9tYXNrICYgTDJDQVBfRkVBVF9GQ1MpKQorCQkJYnJlYWs7CisKKwkJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX05PTkUgfHwKKwkJCQlwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfTk9fRkNTX1JFQ1YpIHsKKwkJCXBpLT5mY3MgPSBMMkNBUF9GQ1NfTk9ORTsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZDUywgMSwgcGktPmZjcyk7CisJCX0KKwkJYnJlYWs7CisJfQogCiAJLyogRklYTUU6IE5lZWQgYWN0dWFsIHZhbHVlIG9mIHRoZSBmbHVzaCB0aW1lb3V0ICovCiAJLy9pZiAoZmx1c2hfdG8gIT0gTDJDQVBfREVGQVVMVF9GTFVTSF9UTykKQEAgLTE3NjcsNiArMjMyMCwxMiBAQAogCQkJCW1lbWNweSgmcmZjLCAodm9pZCAqKSB2YWwsIG9sZW4pOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBMMkNBUF9DT05GX0ZDUzoKKwkJCWlmICh2YWwgPT0gTDJDQVBfRkNTX05PTkUpCisJCQkJcGktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9OT19GQ1NfUkVDVjsKKworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKIAkJCWlmIChoaW50KQogCQkJCWJyZWFrOwpAQCAtMTc3NywzMCArMjMzNiw4MyBAQAogCQl9CiAJfQogCisJaWYgKHBpLT5udW1fY29uZl9yc3AgfHwgcGktPm51bV9jb25mX3JlcSkKKwkJZ290byBkb25lOworCisJc3dpdGNoIChwaS0+bW9kZSkgeworCWNhc2UgTDJDQVBfTU9ERV9TVFJFQU1JTkc6CisJY2FzZSBMMkNBUF9NT0RFX0VSVE06CisJCXBpLT5jb25mX3N0YXRlIHw9IEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRTsKKwkJaWYgKCFsMmNhcF9tb2RlX3N1cHBvcnRlZChwaS0+bW9kZSwgcGktPmNvbm4tPmZlYXRfbWFzaykpCisJCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcGktPm1vZGUgPSBsMmNhcF9zZWxlY3RfbW9kZShyZmMubW9kZSwgcGktPmNvbm4tPmZlYXRfbWFzayk7CisJCWJyZWFrOworCX0KKworZG9uZToKKwlpZiAocGktPm1vZGUgIT0gcmZjLm1vZGUpIHsKKwkJcmVzdWx0ID0gTDJDQVBfQ09ORl9VTkFDQ0VQVDsKKwkJcmZjLm1vZGUgPSBwaS0+bW9kZTsKKworCQlpZiAocGktPm51bV9jb25mX3JzcCA9PSAxKQorCQkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7CisKKwkJbDJjYXBfYWRkX2NvbmZfb3B0KCZwdHIsIEwyQ0FQX0NPTkZfUkZDLAorCQkJCQlzaXplb2YocmZjKSwgKHVuc2lnbmVkIGxvbmcpICZyZmMpOworCX0KKworCiAJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpIHsKIAkJLyogQ29uZmlndXJlIG91dHB1dCBvcHRpb25zIGFuZCBsZXQgdGhlIG90aGVyIHNpZGUga25vdwogCQkgKiB3aGljaCBvbmVzIHdlIGRvbid0IGxpa2UuICovCiAKLQkJaWYgKHJmYy5tb2RlID09IEwyQ0FQX01PREVfQkFTSUMpIHsKLQkJCWlmIChtdHUgPCBwaS0+b210dSkKLQkJCQlyZXN1bHQgPSBMMkNBUF9DT05GX1VOQUNDRVBUOwotCQkJZWxzZSB7Ci0JCQkJcGktPm9tdHUgPSBtdHU7Ci0JCQkJcGktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9PVVRQVVRfRE9ORTsKLQkJCX0KKwkJaWYgKG10dSA8IEwyQ0FQX0RFRkFVTFRfTUlOX01UVSkKKwkJCXJlc3VsdCA9IEwyQ0FQX0NPTkZfVU5BQ0NFUFQ7CisJCWVsc2UgeworCQkJcGktPm9tdHUgPSBtdHU7CisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01UVV9ET05FOworCQl9CisJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX01UVSwgMiwgcGktPm9tdHUpOwogCi0JCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5vbXR1KTsKLQkJfSBlbHNlIHsKKwkJc3dpdGNoIChyZmMubW9kZSkgeworCQljYXNlIEwyQ0FQX01PREVfQkFTSUM6CisJCQlwaS0+ZmNzID0gTDJDQVBfRkNTX05PTkU7CisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWJyZWFrOworCisJCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQkJcGktPnJlbW90ZV90eF93aW4gPSByZmMudHh3aW5fc2l6ZTsKKwkJCXBpLT5yZW1vdGVfbWF4X3R4ID0gcmZjLm1heF90cmFuc21pdDsKKwkJCXBpLT5tYXhfcGR1X3NpemUgPSByZmMubWF4X3BkdV9zaXplOworCisJCQlyZmMucmV0cmFuc190aW1lb3V0ID0gTDJDQVBfREVGQVVMVF9SRVRSQU5TX1RPOworCQkJcmZjLm1vbml0b3JfdGltZW91dCA9IEwyQ0FQX0RFRkFVTFRfTU9OSVRPUl9UTzsKKworCQkJcGktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9NT0RFX0RPTkU7CisJCQlicmVhazsKKworCQljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQkJcGktPnJlbW90ZV90eF93aW4gPSByZmMudHh3aW5fc2l6ZTsKKwkJCXBpLT5tYXhfcGR1X3NpemUgPSByZmMubWF4X3BkdV9zaXplOworCisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX01PREVfRE9ORTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CiAJCQlyZXN1bHQgPSBMMkNBUF9DT05GX1VOQUNDRVBUOwogCiAJCQltZW1zZXQoJnJmYywgMCwgc2l6ZW9mKHJmYykpOwotCQkJcmZjLm1vZGUgPSBMMkNBUF9NT0RFX0JBU0lDOwotCi0JCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCi0JCQkJCQlzaXplb2YocmZjKSwgKHVuc2lnbmVkIGxvbmcpICZyZmMpOworCQkJcmZjLm1vZGUgPSBwaS0+bW9kZTsKIAkJfQotCX0KIAorCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCisJCQkJCXNpemVvZihyZmMpLCAodW5zaWduZWQgbG9uZykgJnJmYyk7CisKKwkJaWYgKHJlc3VsdCA9PSBMMkNBUF9DT05GX1NVQ0NFU1MpCisJCQlwaS0+Y29uZl9zdGF0ZSB8PSBMMkNBUF9DT05GX09VVFBVVF9ET05FOworCX0KIAlyc3AtPnNjaWQgICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKIAlyc3AtPnJlc3VsdCA9IGNwdV90b19sZTE2KHJlc3VsdCk7CiAJcnNwLT5mbGFncyAgPSBjcHVfdG9fbGUxNigweDAwMDApOwpAQCAtMTgwOCw2ICsyNDIwLDczIEBACiAJcmV0dXJuIHB0ciAtIGRhdGE7CiB9CiAKK3N0YXRpYyBpbnQgbDJjYXBfcGFyc2VfY29uZl9yc3Aoc3RydWN0IHNvY2sgKnNrLCB2b2lkICpyc3AsIGludCBsZW4sIHZvaWQgKmRhdGEsIHUxNiAqcmVzdWx0KQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IGwyY2FwX2NvbmZfcmVxICpyZXEgPSBkYXRhOworCXZvaWQgKnB0ciA9IHJlcS0+ZGF0YTsKKwlpbnQgdHlwZSwgb2xlbjsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlzdHJ1Y3QgbDJjYXBfY29uZl9yZmMgcmZjOworCisJQlRfREJHKCJzayAlcCwgcnNwICVwLCBsZW4gJWQsIHJlcSAlcCIsIHNrLCByc3AsIGxlbiwgZGF0YSk7CisKKwl3aGlsZSAobGVuID49IEwyQ0FQX0NPTkZfT1BUX1NJWkUpIHsKKwkJbGVuIC09IGwyY2FwX2dldF9jb25mX29wdCgmcnNwLCAmdHlwZSwgJm9sZW4sICZ2YWwpOworCisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEwyQ0FQX0NPTkZfTVRVOgorCQkJaWYgKHZhbCA8IEwyQ0FQX0RFRkFVTFRfTUlOX01UVSkgeworCQkJCSpyZXN1bHQgPSBMMkNBUF9DT05GX1VOQUNDRVBUOworCQkJCXBpLT5vbXR1ID0gTDJDQVBfREVGQVVMVF9NSU5fTVRVOworCQkJfSBlbHNlCisJCQkJcGktPm9tdHUgPSB2YWw7CisJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9NVFUsIDIsIHBpLT5vbXR1KTsKKwkJCWJyZWFrOworCisJCWNhc2UgTDJDQVBfQ09ORl9GTFVTSF9UTzoKKwkJCXBpLT5mbHVzaF90byA9IHZhbDsKKwkJCWwyY2FwX2FkZF9jb25mX29wdCgmcHRyLCBMMkNBUF9DT05GX0ZMVVNIX1RPLAorCQkJCQkJCTIsIHBpLT5mbHVzaF90byk7CisJCQlicmVhazsKKworCQljYXNlIEwyQ0FQX0NPTkZfUkZDOgorCQkJaWYgKG9sZW4gPT0gc2l6ZW9mKHJmYykpCisJCQkJbWVtY3B5KCZyZmMsICh2b2lkICopdmFsLCBvbGVuKTsKKworCQkJaWYgKChwaS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfU1RBVEUyX0RFVklDRSkgJiYKKwkJCQkJCQlyZmMubW9kZSAhPSBwaS0+bW9kZSkKKwkJCQlyZXR1cm4gLUVDT05OUkVGVVNFRDsKKworCQkJcGktPm1vZGUgPSByZmMubW9kZTsKKwkJCXBpLT5mY3MgPSAwOworCisJCQlsMmNhcF9hZGRfY29uZl9vcHQoJnB0ciwgTDJDQVBfQ09ORl9SRkMsCisJCQkJCXNpemVvZihyZmMpLCAodW5zaWduZWQgbG9uZykgJnJmYyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICgqcmVzdWx0ID09IEwyQ0FQX0NPTkZfU1VDQ0VTUykgeworCQlzd2l0Y2ggKHJmYy5tb2RlKSB7CisJCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQkJcGktPnJlbW90ZV90eF93aW4gICA9IHJmYy50eHdpbl9zaXplOworCQkJcGktPnJldHJhbnNfdGltZW91dCA9IHJmYy5yZXRyYW5zX3RpbWVvdXQ7CisJCQlwaS0+bW9uaXRvcl90aW1lb3V0ID0gcmZjLm1vbml0b3JfdGltZW91dDsKKwkJCXBpLT5tYXhfcGR1X3NpemUgICAgPSBsZTE2X3RvX2NwdShyZmMubWF4X3BkdV9zaXplKTsKKwkJCWJyZWFrOworCQljYXNlIEwyQ0FQX01PREVfU1RSRUFNSU5HOgorCQkJcGktPm1heF9wZHVfc2l6ZSAgICA9IGxlMTZfdG9fY3B1KHJmYy5tYXhfcGR1X3NpemUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXEtPmRjaWQgICA9IGNwdV90b19sZTE2KHBpLT5kY2lkKTsKKwlyZXEtPmZsYWdzICA9IGNwdV90b19sZTE2KDB4MDAwMCk7CisKKwlyZXR1cm4gcHRyIC0gZGF0YTsKK30KKwogc3RhdGljIGludCBsMmNhcF9idWlsZF9jb25mX3JzcChzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmRhdGEsIHUxNiByZXN1bHQsIHUxNiBmbGFncykKIHsKIAlzdHJ1Y3QgbDJjYXBfY29uZl9yc3AgKnJzcCA9IGRhdGE7CkBAIC0xOTk0LDYgKzI2NzMsNyBAQAogCiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCiAJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCByZXEpLCByZXEpOworCQlsMmNhcF9waShzayktPm51bV9jb25mX3JlcSsrOwogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ1JfUEVORDoKQEAgLTIwNTIsMTAgKzI3MzIsMTMgQEAKIAogCS8qIENvbXBsZXRlIGNvbmZpZy4gKi8KIAlsZW4gPSBsMmNhcF9wYXJzZV9jb25mX3JlcShzaywgcnNwKTsKLQlpZiAobGVuIDwgMCkKKwlpZiAobGVuIDwgMCkgeworCQlsMmNhcF9zZW5kX2Rpc2Nvbm5fcmVxKGNvbm4sIHNrKTsKIAkJZ290byB1bmxvY2s7CisJfQogCiAJbDJjYXBfc2VuZF9jbWQoY29ubiwgY21kLT5pZGVudCwgTDJDQVBfQ09ORl9SU1AsIGxlbiwgcnNwKTsKKwlsMmNhcF9waShzayktPm51bV9jb25mX3JzcCsrOwogCiAJLyogUmVzZXQgY29uZmlnIGJ1ZmZlci4gKi8KIAlsMmNhcF9waShzayktPmNvbmZfbGVuID0gMDsKQEAgLTIwNjQsNyArMjc0NywyMiBAQAogCQlnb3RvIHVubG9jazsKIAogCWlmIChsMmNhcF9waShzayktPmNvbmZfc3RhdGUgJiBMMkNBUF9DT05GX0lOUFVUX0RPTkUpIHsKKwkJaWYgKCEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikKKwkJCQl8fCBsMmNhcF9waShzayktPmZjcyAhPSBMMkNBUF9GQ1NfTk9ORSkKKwkJCWwyY2FwX3BpKHNrKS0+ZmNzID0gTDJDQVBfRkNTX0NSQzE2OworCiAJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJbDJjYXBfcGkoc2spLT5uZXh0X3R4X3NlcSA9IDA7CisJCWwyY2FwX3BpKHNrKS0+ZXhwZWN0ZWRfYWNrX3NlcSA9IDA7CisJCWwyY2FwX3BpKHNrKS0+dW5hY2tlZF9mcmFtZXMgPSAwOworCisJCXNldHVwX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIsCisJCQkJbDJjYXBfcmV0cmFuc190aW1lb3V0LCAodW5zaWduZWQgbG9uZykgc2spOworCQlzZXR1cF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyLAorCQkJCWwyY2FwX21vbml0b3JfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIHNrKTsKKworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoVFhfUVVFVUUoc2spKTsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKIAkJbDJjYXBfY2hhbl9yZWFkeShzayk7CiAJCWdvdG8gdW5sb2NrOwogCX0KQEAgLTIwNzMsNiArMjc3MSw3IEBACiAJCXU4IGJ1Zls2NF07CiAJCWwyY2FwX3NlbmRfY21kKGNvbm4sIGwyY2FwX2dldF9pZGVudChjb25uKSwgTDJDQVBfQ09ORl9SRVEsCiAJCQkJCWwyY2FwX2J1aWxkX2NvbmZfcmVxKHNrLCBidWYpLCBidWYpOworCQlsMmNhcF9waShzayktPm51bV9jb25mX3JlcSsrOwogCX0KIAogdW5sb2NrOgpAQCAtMjEwMiwyOSArMjgwMSwzMiBAQAogCQlicmVhazsKIAogCWNhc2UgTDJDQVBfQ09ORl9VTkFDQ0VQVDoKLQkJaWYgKCsrbDJjYXBfcGkoc2spLT5jb25mX3JldHJ5IDwgTDJDQVBfQ09ORl9NQVhfUkVUUklFUykgewotCQkJY2hhciByZXFbMTI4XTsKLQkJCS8qIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gYWRqdXN0IEwyQ0FQIHBhcmFtZXRlcnMKLQkJCSAqIHRoYXQgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHRoZSBzcGVjLiBXZSBzaW1wbHkKLQkJCSAqIHJlc2VuZCBjb25maWcgcmVxdWVzdCB0aGF0IHdlIHNlbnQgZWFybGllci4gSXQgaXMKLQkJCSAqIHN0dXBpZCwgYnV0IGl0IGhlbHBzIHF1YWxpZmljYXRpb24gdGVzdGluZyB3aGljaAotCQkJICogZXhwZWN0cyBhdCBsZWFzdCBzb21lIHJlc3BvbnNlIGZyb20gdXMuICovCi0JCQlsMmNhcF9zZW5kX2NtZChjb25uLCBsMmNhcF9nZXRfaWRlbnQoY29ubiksIEwyQ0FQX0NPTkZfUkVRLAotCQkJCQkJbDJjYXBfYnVpbGRfY29uZl9yZXEoc2ssIHJlcSksIHJlcSk7Ci0JCQlnb3RvIGRvbmU7CisJCWlmIChsMmNhcF9waShzayktPm51bV9jb25mX3JzcCA8PSBMMkNBUF9DT05GX01BWF9DT05GX1JTUCkgeworCQkJaW50IGxlbiA9IGNtZC0+bGVuIC0gc2l6ZW9mKCpyc3ApOworCQkJY2hhciByZXFbNjRdOworCisJCQkvKiB0aHJvdyBvdXQgYW55IG9sZCBzdG9yZWQgY29uZiByZXF1ZXN0cyAqLworCQkJcmVzdWx0ID0gTDJDQVBfQ09ORl9TVUNDRVNTOworCQkJbGVuID0gbDJjYXBfcGFyc2VfY29uZl9yc3Aoc2ssIHJzcC0+ZGF0YSwKKwkJCQkJCQlsZW4sIHJlcSwgJnJlc3VsdCk7CisJCQlpZiAobGVuIDwgMCkgeworCQkJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2spOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAorCQkJCQkJTDJDQVBfQ09ORl9SRVEsIGxlbiwgcmVxKTsKKwkJCWwyY2FwX3BpKHNrKS0+bnVtX2NvbmZfcmVxKys7CisJCQlpZiAocmVzdWx0ICE9IEwyQ0FQX0NPTkZfU1VDQ0VTUykKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKIAkJfQogCiAJZGVmYXVsdDoKIAkJc2stPnNrX3N0YXRlID0gQlRfRElTQ09OTjsKIAkJc2stPnNrX2VyciA9IEVDT05OUkVTRVQ7CiAJCWwyY2FwX3NvY2tfc2V0X3RpbWVyKHNrLCBIWiAqIDUpOwotCQl7Ci0JCQlzdHJ1Y3QgbDJjYXBfZGlzY29ubl9yZXEgcmVxOwotCQkJcmVxLmRjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwotCQkJcmVxLnNjaWQgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPnNjaWQpOwotCQkJbDJjYXBfc2VuZF9jbWQoY29ubiwgbDJjYXBfZ2V0X2lkZW50KGNvbm4pLAotCQkJCQlMMkNBUF9ESVNDT05OX1JFUSwgc2l6ZW9mKHJlcSksICZyZXEpOwotCQl9CisJCWwyY2FwX3NlbmRfZGlzY29ubl9yZXEoY29ubiwgc2spOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0yMTM0LDcgKzI4MzYsMTYgQEAKIAlsMmNhcF9waShzayktPmNvbmZfc3RhdGUgfD0gTDJDQVBfQ09ORl9JTlBVVF9ET05FOwogCiAJaWYgKGwyY2FwX3BpKHNrKS0+Y29uZl9zdGF0ZSAmIEwyQ0FQX0NPTkZfT1VUUFVUX0RPTkUpIHsKKwkJaWYgKCEobDJjYXBfcGkoc2spLT5jb25mX3N0YXRlICYgTDJDQVBfQ09ORl9OT19GQ1NfUkVDVikKKwkJCQl8fCBsMmNhcF9waShzayktPmZjcyAhPSBMMkNBUF9GQ1NfTk9ORSkKKwkJCWwyY2FwX3BpKHNrKS0+ZmNzID0gTDJDQVBfRkNTX0NSQzE2OworCiAJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKKwkJbDJjYXBfcGkoc2spLT5leHBlY3RlZF90eF9zZXEgPSAwOworCQlsMmNhcF9waShzayktPmJ1ZmZlcl9zZXEgPSAwOworCQlsMmNhcF9waShzayktPm51bV90b19hY2sgPSAwOworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoVFhfUVVFVUUoc2spKTsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KFNSRUpfUVVFVUUoc2spKTsKIAkJbDJjYXBfY2hhbl9yZWFkeShzayk7CiAJfQogCkBAIC0yMTY1LDYgKzI4NzYsMTEgQEAKIAogCXNrLT5za19zaHV0ZG93biA9IFNIVVRET1dOX01BU0s7CiAKKwlza2JfcXVldWVfcHVyZ2UoVFhfUVVFVUUoc2spKTsKKwlza2JfcXVldWVfcHVyZ2UoU1JFSl9RVUVVRShzaykpOworCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5yZXRyYW5zX3RpbWVyKTsKKwlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+bW9uaXRvcl90aW1lcik7CisKIAlsMmNhcF9jaGFuX2RlbChzaywgRUNPTk5SRVNFVCk7CiAJYmhfdW5sb2NrX3NvY2soc2spOwogCkBAIC0yMTg3LDYgKzI5MDMsMTEgQEAKIAlpZiAoIXNrKQogCQlyZXR1cm4gMDsKIAorCXNrYl9xdWV1ZV9wdXJnZShUWF9RVUVVRShzaykpOworCXNrYl9xdWV1ZV9wdXJnZShTUkVKX1FVRVVFKHNrKSk7CisJZGVsX3RpbWVyKCZsMmNhcF9waShzayktPnJldHJhbnNfdGltZXIpOworCWRlbF90aW1lcigmbDJjYXBfcGkoc2spLT5tb25pdG9yX3RpbWVyKTsKKwogCWwyY2FwX2NoYW5fZGVsKHNrLCAwKTsKIAliaF91bmxvY2tfc29jayhzayk7CiAKQEAgLTIyMDUsMTAgKzI5MjYsMTQgQEAKIAogCWlmICh0eXBlID09IEwyQ0FQX0lUX0ZFQVRfTUFTSykgewogCQl1OCBidWZbOF07CisJCXUzMiBmZWF0X21hc2sgPSBsMmNhcF9mZWF0X21hc2s7CiAJCXN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqcnNwID0gKHN0cnVjdCBsMmNhcF9pbmZvX3JzcCAqKSBidWY7CiAJCXJzcC0+dHlwZSAgID0gY3B1X3RvX2xlMTYoTDJDQVBfSVRfRkVBVF9NQVNLKTsKIAkJcnNwLT5yZXN1bHQgPSBjcHVfdG9fbGUxNihMMkNBUF9JUl9TVUNDRVNTKTsKLQkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihsMmNhcF9mZWF0X21hc2spLCAoX19sZTMyICopIHJzcC0+ZGF0YSk7CisJCWlmIChlbmFibGVfZXJ0bSkKKwkJCWZlYXRfbWFzayB8PSBMMkNBUF9GRUFUX0VSVE0gfCBMMkNBUF9GRUFUX1NUUkVBTUlORworCQkJCQkJCSB8IEwyQ0FQX0ZFQVRfRkNTOworCQlwdXRfdW5hbGlnbmVkX2xlMzIoZmVhdF9tYXNrLCByc3AtPmRhdGEpOwogCQlsMmNhcF9zZW5kX2NtZChjb25uLCBjbWQtPmlkZW50LAogCQkJCQlMMkNBUF9JTkZPX1JTUCwgc2l6ZW9mKGJ1ZiksIGJ1Zik7CiAJfSBlbHNlIGlmICh0eXBlID09IEwyQ0FQX0lUX0ZJWEVEX0NIQU4pIHsKQEAgLTIzNTksOSArMzA4NCwzNzQgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAorc3RhdGljIGludCBsMmNhcF9jaGVja19mY3Moc3RydWN0IGwyY2FwX3BpbmZvICpwaSwgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTE2IG91cl9mY3MsIHJjdl9mY3M7CisJaW50IGhkcl9zaXplID0gTDJDQVBfSERSX1NJWkUgKyAyOworCisJaWYgKHBpLT5mY3MgPT0gTDJDQVBfRkNTX0NSQzE2KSB7CisJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSAyKTsKKwkJcmN2X2ZjcyA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEgKyBza2ItPmxlbik7CisJCW91cl9mY3MgPSBjcmMxNigwLCBza2ItPmRhdGEgLSBoZHJfc2l6ZSwgc2tiLT5sZW4gKyBoZHJfc2l6ZSk7CisKKwkJaWYgKG91cl9mY3MgIT0gcmN2X2ZjcykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eF9zZXEsIHU4IHNhcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV4dF9za2I7CisKKwlidF9jYihza2IpLT50eF9zZXEgPSB0eF9zZXE7CisJYnRfY2Ioc2tiKS0+c2FyID0gc2FyOworCisJbmV4dF9za2IgPSBza2JfcGVlayhTUkVKX1FVRVVFKHNrKSk7CisJaWYgKCFuZXh0X3NrYikgeworCQlfX3NrYl9xdWV1ZV90YWlsKFNSRUpfUVVFVUUoc2spLCBza2IpOworCQlyZXR1cm47CisJfQorCisJZG8geworCQlpZiAoYnRfY2IobmV4dF9za2IpLT50eF9zZXEgPiB0eF9zZXEpIHsKKwkJCV9fc2tiX3F1ZXVlX2JlZm9yZShTUkVKX1FVRVVFKHNrKSwgbmV4dF9za2IsIHNrYik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoc2tiX3F1ZXVlX2lzX2xhc3QoU1JFSl9RVUVVRShzayksIG5leHRfc2tiKSkKKwkJCWJyZWFrOworCisJfSB3aGlsZSgobmV4dF9za2IgPSBza2JfcXVldWVfbmV4dChTUkVKX1FVRVVFKHNrKSwgbmV4dF9za2IpKSk7CisKKwlfX3NrYl9xdWV1ZV90YWlsKFNSRUpfUVVFVUUoc2spLCBza2IpOworfQorCitzdGF0aWMgaW50IGwyY2FwX3Nhcl9yZWFzc2VtYmx5X3NkdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIHUxNiBjb250cm9sKQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNrX2J1ZmYgKl9za2I7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNvbnRyb2wgJiBMMkNBUF9DVFJMX1NBUikgeworCWNhc2UgTDJDQVBfU0RVX1VOU0VHTUVOVEVEOgorCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpIHsKKwkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpOworCQlpZiAoIWVycikKKwkJCXJldHVybiAwOworCisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9TRFVfU1RBUlQ6CisJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU0FSX1NEVSkgeworCQkJa2ZyZWVfc2tiKHBpLT5zZHUpOworCQkJYnJlYWs7CisJCX0KKworCQlwaS0+c2R1X2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOworCQlza2JfcHVsbChza2IsIDIpOworCisJCXBpLT5zZHUgPSBidF9za2JfYWxsb2MocGktPnNkdV9sZW4sIEdGUF9BVE9NSUMpOworCQlpZiAoIXBpLT5zZHUpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCisJCW1lbWNweShza2JfcHV0KHBpLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TQVJfU0RVOworCQlwaS0+cGFydGlhbF9zZHVfbGVuID0gc2tiLT5sZW47CisJCWVyciA9IDA7CisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9TRFVfQ09OVElOVUU6CisJCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TQVJfU0RVKSkKKwkJCWJyZWFrOworCisJCW1lbWNweShza2JfcHV0KHBpLT5zZHUsIHNrYi0+bGVuKSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwkJcGktPnBhcnRpYWxfc2R1X2xlbiArPSBza2ItPmxlbjsKKwkJaWYgKHBpLT5wYXJ0aWFsX3NkdV9sZW4gPiBwaS0+c2R1X2xlbikKKwkJCWtmcmVlX3NrYihwaS0+c2R1KTsKKwkJZWxzZQorCQkJZXJyID0gMDsKKworCQlicmVhazsKKworCWNhc2UgTDJDQVBfU0RVX0VORDoKKwkJaWYgKCEocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NBUl9TRFUpKQorCQkJYnJlYWs7CisKKwkJbWVtY3B5KHNrYl9wdXQocGktPnNkdSwgc2tiLT5sZW4pLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TQVJfU0RVOworCQlwaS0+cGFydGlhbF9zZHVfbGVuICs9IHNrYi0+bGVuOworCisJCWlmIChwaS0+cGFydGlhbF9zZHVfbGVuID09IHBpLT5zZHVfbGVuKSB7CisJCQlfc2tiID0gc2tiX2Nsb25lKHBpLT5zZHUsIEdGUF9BVE9NSUMpOworCQkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBfc2tiKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWtmcmVlX3NrYihfc2tiKTsKKwkJfQorCQlrZnJlZV9za2IocGktPnNkdSk7CisJCWVyciA9IDA7CisKKwkJYnJlYWs7CisJfQorCisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbDJjYXBfY2hlY2tfc3Jlal9nYXAoc3RydWN0IHNvY2sgKnNrLCB1OCB0eF9zZXEpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgY29udHJvbCA9IDA7CisKKwl3aGlsZSgoc2tiID0gc2tiX3BlZWsoU1JFSl9RVUVVRShzaykpKSkgeworCQlpZiAoYnRfY2Ioc2tiKS0+dHhfc2VxICE9IHR4X3NlcSkKKwkJCWJyZWFrOworCisJCXNrYiA9IHNrYl9kZXF1ZXVlKFNSRUpfUVVFVUUoc2spKTsKKwkJY29udHJvbCB8PSBidF9jYihza2IpLT5zYXIgPDwgTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7CisJCWwyY2FwX3Nhcl9yZWFzc2VtYmx5X3NkdShzaywgc2tiLCBjb250cm9sKTsKKwkJbDJjYXBfcGkoc2spLT5idWZmZXJfc2VxX3NyZWogPQorCQkJKGwyY2FwX3BpKHNrKS0+YnVmZmVyX3NlcV9zcmVqICsgMSkgJSA2NDsKKwkJdHhfc2VxKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBsMmNhcF9yZXNlbmRfc3JlamZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTggdHhfc2VxKQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJc3RydWN0IHNyZWpfbGlzdCAqbCwgKnRtcDsKKwl1MTYgY29udHJvbDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsLHRtcCwgU1JFSl9MSVNUKHNrKSwgbGlzdCkgeworCQlpZiAobC0+dHhfc2VxID09IHR4X3NlcSkgeworCQkJbGlzdF9kZWwoJmwtPmxpc3QpOworCQkJa2ZyZWUobCk7CisJCQlyZXR1cm47CisJCX0KKwkJY29udHJvbCA9IEwyQ0FQX1NVUEVSX1NFTEVDVF9SRUpFQ1Q7CisJCWNvbnRyb2wgfD0gbC0+dHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgY29udHJvbCk7CisJCWxpc3RfZGVsKCZsLT5saXN0KTsKKwkJbGlzdF9hZGRfdGFpbCgmbC0+bGlzdCwgU1JFSl9MSVNUKHNrKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsMmNhcF9zZW5kX3NyZWpmcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHU4IHR4X3NlcSkKK3sKKwlzdHJ1Y3QgbDJjYXBfcGluZm8gKnBpID0gbDJjYXBfcGkoc2spOworCXN0cnVjdCBzcmVqX2xpc3QgKm5ldzsKKwl1MTYgY29udHJvbDsKKworCXdoaWxlICh0eF9zZXEgIT0gcGktPmV4cGVjdGVkX3R4X3NlcSkgeworCQljb250cm9sID0gTDJDQVBfU1VQRVJfU0VMRUNUX1JFSkVDVDsKKwkJY29udHJvbCB8PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1NFTkRfUEJJVCkgeworCQkJY29udHJvbCB8PSBMMkNBUF9DVFJMX1BPTEw7CisJCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9TRU5EX1BCSVQ7CisJCX0KKwkJbDJjYXBfc2VuZF9zZnJhbWUocGksIGNvbnRyb2wpOworCisJCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzcmVqX2xpc3QpLCBHRlBfQVRPTUlDKTsKKwkJbmV3LT50eF9zZXEgPSBwaS0+ZXhwZWN0ZWRfdHhfc2VxKys7CisJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bGlzdCwgU1JFSl9MSVNUKHNrKSk7CisJfQorCXBpLT5leHBlY3RlZF90eF9zZXErKzsKK30KKworc3RhdGljIGlubGluZSBpbnQgbDJjYXBfZGF0YV9jaGFubmVsX2lmcmFtZShzdHJ1Y3Qgc29jayAqc2ssIHUxNiByeF9jb250cm9sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGkgPSBsMmNhcF9waShzayk7CisJdTggdHhfc2VxID0gX19nZXRfdHhzZXEocnhfY29udHJvbCk7CisJdTE2IHR4X2NvbnRyb2wgPSAwOworCXU4IHNhciA9IHJ4X2NvbnRyb2wgPj4gTDJDQVBfQ1RSTF9TQVJfU0hJRlQ7CisJaW50IGVyciA9IDA7CisKKwlCVF9EQkcoInNrICVwIHJ4X2NvbnRyb2wgMHglNC40eCBsZW4gJWQiLCBzaywgcnhfY29udHJvbCwgc2tiLT5sZW4pOworCisJaWYgKHR4X3NlcSA9PSBwaS0+ZXhwZWN0ZWRfdHhfc2VxKQorCQlnb3RvIGV4cGVjdGVkOworCisJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKKwkJc3RydWN0IHNyZWpfbGlzdCAqZmlyc3Q7CisKKwkJZmlyc3QgPSBsaXN0X2ZpcnN0X2VudHJ5KFNSRUpfTElTVChzayksCisJCQkJc3RydWN0IHNyZWpfbGlzdCwgbGlzdCk7CisJCWlmICh0eF9zZXEgPT0gZmlyc3QtPnR4X3NlcSkgeworCQkJbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc2ssIHNrYiwgdHhfc2VxLCBzYXIpOworCQkJbDJjYXBfY2hlY2tfc3Jlal9nYXAoc2ssIHR4X3NlcSk7CisKKwkJCWxpc3RfZGVsKCZmaXJzdC0+bGlzdCk7CisJCQlrZnJlZShmaXJzdCk7CisKKwkJCWlmIChsaXN0X2VtcHR5KFNSRUpfTElTVChzaykpKSB7CisJCQkJcGktPmJ1ZmZlcl9zZXEgPSBwaS0+YnVmZmVyX3NlcV9zcmVqOworCQkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1NSRUpfU0VOVDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzcmVqX2xpc3QgKmw7CisJCQlsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzaywgc2tiLCB0eF9zZXEsIHNhcik7CisKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobCwgU1JFSl9MSVNUKHNrKSwgbGlzdCkgeworCQkJCWlmIChsLT50eF9zZXEgPT0gdHhfc2VxKSB7CisJCQkJCWwyY2FwX3Jlc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJCWwyY2FwX3NlbmRfc3JlamZyYW1lKHNrLCB0eF9zZXEpOworCQl9CisJfSBlbHNlIHsKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX1NFTlQ7CisKKwkJSU5JVF9MSVNUX0hFQUQoU1JFSl9MSVNUKHNrKSk7CisJCXBpLT5idWZmZXJfc2VxX3NyZWogPSBwaS0+YnVmZmVyX3NlcTsKKworCQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoU1JFSl9RVUVVRShzaykpOworCQlsMmNhcF9hZGRfdG9fc3Jlal9xdWV1ZShzaywgc2tiLCB0eF9zZXEsIHNhcik7CisKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TRU5EX1BCSVQ7CisKKwkJbDJjYXBfc2VuZF9zcmVqZnJhbWUoc2ssIHR4X3NlcSk7CisJfQorCXJldHVybiAwOworCitleHBlY3RlZDoKKwlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gKHBpLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCisJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TUkVKX1NFTlQpIHsKKwkJbDJjYXBfYWRkX3RvX3NyZWpfcXVldWUoc2ssIHNrYiwgdHhfc2VxLCBzYXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlwaS0+YnVmZmVyX3NlcSA9IChwaS0+YnVmZmVyX3NlcSArIDEpICUgNjQ7CisKKwllcnIgPSBsMmNhcF9zYXJfcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgcnhfY29udHJvbCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlwaS0+bnVtX3RvX2FjayA9IChwaS0+bnVtX3RvX2FjayArIDEpICUgTDJDQVBfREVGQVVMVF9OVU1fVE9fQUNLOworCWlmIChwaS0+bnVtX3RvX2FjayA9PSBMMkNBUF9ERUZBVUxUX05VTV9UT19BQ0sgLSAxKSB7CisJCXR4X2NvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZOworCQl0eF9jb250cm9sIHw9IHBpLT5idWZmZXJfc2VxIDw8IEwyQ0FQX0NUUkxfUkVRU0VRX1NISUZUOworCQlsMmNhcF9zZW5kX3NmcmFtZShwaSwgdHhfY29udHJvbCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWxfc2ZyYW1lKHN0cnVjdCBzb2NrICpzaywgdTE2IHJ4X2NvbnRyb2wsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGwyY2FwX3BpbmZvICpwaSA9IGwyY2FwX3BpKHNrKTsKKwl1OCB0eF9zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CisKKwlCVF9EQkcoInNrICVwIHJ4X2NvbnRyb2wgMHglNC40eCBsZW4gJWQiLCBzaywgcnhfY29udHJvbCwgc2tiLT5sZW4pOworCisJc3dpdGNoIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9TVVBFUlZJU0UpIHsKKwljYXNlIEwyQ0FQX1NVUEVSX1JDVl9SRUFEWToKKwkJaWYgKHJ4X2NvbnRyb2wgJiBMMkNBUF9DVFJMX1BPTEwpIHsKKwkJCXUxNiBjb250cm9sID0gTDJDQVBfQ1RSTF9GSU5BTDsKKwkJCWNvbnRyb2wgfD0gTDJDQVBfU1VQRVJfUkNWX1JFQURZIHwKKwkJCQkocGktPmJ1ZmZlcl9zZXEgPDwgTDJDQVBfQ1RSTF9SRVFTRVFfU0hJRlQpOworCQkJbDJjYXBfc2VuZF9zZnJhbWUobDJjYXBfcGkoc2spLCBjb250cm9sKTsKKwkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCisJCX0gZWxzZSBpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfRklOQUwpIHsKKwkJCXBpLT5jb25uX3N0YXRlICY9IH5MMkNBUF9DT05OX1JFTU9URV9CVVNZOworCQkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisKKwkJCWlmICghKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpKQorCQkJCWJyZWFrOworCisJCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9XQUlUX0Y7CisJCQlkZWxfdGltZXIoJnBpLT5tb25pdG9yX3RpbWVyKTsKKworCQkJaWYgKHBpLT51bmFja2VkX2ZyYW1lcyA+IDApCisJCQkJX19tb2RfcmV0cmFuc190aW1lcigpOworCQl9IGVsc2UgeworCQkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCQlsMmNhcF9kcm9wX2Fja2VkX2ZyYW1lcyhzayk7CisKKwkJCWlmICgocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZKQorCQkJCQkmJiAocGktPnVuYWNrZWRfZnJhbWVzID4gMCkpCisJCQkJX19tb2RfcmV0cmFuc190aW1lcigpOworCisJCQlsMmNhcF9lcnRtX3NlbmQoc2spOworCQkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEwyQ0FQX1NVUEVSX1JFSkVDVDoKKwkJcGktPmNvbm5fc3RhdGUgJj0gfkwyQ0FQX0NPTk5fUkVNT1RFX0JVU1k7CisKKwkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSBfX2dldF9yZXFzZXEocnhfY29udHJvbCk7CisJCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHNrKTsKKworCQlzay0+c2tfc2VuZF9oZWFkID0gVFhfUVVFVUUoc2spLT5uZXh0OworCQlwaS0+bmV4dF90eF9zZXEgPSBwaS0+ZXhwZWN0ZWRfYWNrX3NlcTsKKworCQlsMmNhcF9lcnRtX3NlbmQoc2spOworCisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9TVVBFUl9TRUxFQ1RfUkVKRUNUOgorCQlwaS0+Y29ubl9zdGF0ZSAmPSB+TDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKKworCQlpZiAocnhfY29udHJvbCAmIEwyQ0FQX0NUUkxfUE9MTCkgeworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKKwkJCXBpLT5leHBlY3RlZF9hY2tfc2VxID0gdHhfc2VxOworCQkJbDJjYXBfZHJvcF9hY2tlZF9mcmFtZXMoc2spOworCQkJbDJjYXBfZXJ0bV9zZW5kKHNrKTsKKwkJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQkJcGktPnNyZWpfc2F2ZV9yZXFzZXEgPSB0eF9zZXE7CisJCQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJCX0KKwkJfSBlbHNlIGlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9GSU5BTCkgeworCQkJaWYgKChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fU1JFSl9BQ1QpICYmCisJCQkJCXBpLT5zcmVqX3NhdmVfcmVxc2VxID09IHR4X3NlcSkKKwkJCQlwaS0+c3Jlal9zYXZlX3JlcXNlcSAmPSB+TDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJCWVsc2UKKwkJCQlsMmNhcF9yZXRyYW5zbWl0X2ZyYW1lKHNrLCB0eF9zZXEpOworCQl9CisJCWVsc2UgeworCQkJbDJjYXBfcmV0cmFuc21pdF9mcmFtZShzaywgdHhfc2VxKTsKKwkJCWlmIChwaS0+Y29ubl9zdGF0ZSAmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQkJcGktPnNyZWpfc2F2ZV9yZXFzZXEgPSB0eF9zZXE7CisJCQkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9TUkVKX0FDVDsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCWNhc2UgTDJDQVBfU1VQRVJfUkNWX05PVF9SRUFEWToKKwkJcGktPmNvbm5fc3RhdGUgfD0gTDJDQVBfQ09OTl9SRU1PVEVfQlVTWTsKKwkJcGktPmV4cGVjdGVkX2Fja19zZXEgPSB0eF9zZXE7CisJCWwyY2FwX2Ryb3BfYWNrZWRfZnJhbWVzKHNrKTsKKworCQlkZWxfdGltZXIoJmwyY2FwX3BpKHNrKS0+cmV0cmFuc190aW1lcik7CisJCWlmIChyeF9jb250cm9sICYgTDJDQVBfQ1RSTF9QT0xMKSB7CisJCQl1MTYgY29udHJvbCA9IEwyQ0FQX0NUUkxfRklOQUw7CisJCQlsMmNhcF9zZW5kX3JyX29yX3JucihsMmNhcF9waShzayksIGNvbnRyb2wpOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9kYXRhX2NoYW5uZWwoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sIHUxNiBjaWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBsMmNhcF9waW5mbyAqcGk7CisJdTE2IGNvbnRyb2wsIGxlbjsKKwl1OCB0eF9zZXE7CisJaW50IGVycjsKIAogCXNrID0gbDJjYXBfZ2V0X2NoYW5fYnlfc2NpZCgmY29ubi0+Y2hhbl9saXN0LCBjaWQpOwogCWlmICghc2spIHsKQEAgLTIzNjksMjIgKzM0NTksOTEgQEAKIAkJZ290byBkcm9wOwogCX0KIAorCXBpID0gbDJjYXBfcGkoc2spOworCiAJQlRfREJHKCJzayAlcCwgbGVuICVkIiwgc2ssIHNrYi0+bGVuKTsKIAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQ09OTkVDVEVEKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5pbXR1IDwgc2tiLT5sZW4pCi0JCWdvdG8gZHJvcDsKKwlzd2l0Y2ggKHBpLT5tb2RlKSB7CisJY2FzZSBMMkNBUF9NT0RFX0JBU0lDOgorCQkvKiBJZiBzb2NrZXQgcmVjdiBidWZmZXJzIG92ZXJmbG93cyB3ZSBkcm9wIGRhdGEgaGVyZQorCQkgKiB3aGljaCBpcyAqYmFkKiBiZWNhdXNlIEwyQ0FQIGhhcyB0byBiZSByZWxpYWJsZS4KKwkJICogQnV0IHdlIGRvbid0IGhhdmUgYW55IG90aGVyIGNob2ljZS4gTDJDQVAgZG9lc24ndAorCQkgKiBwcm92aWRlIGZsb3cgY29udHJvbCBtZWNoYW5pc20uICovCiAKLQkvKiBJZiBzb2NrZXQgcmVjdiBidWZmZXJzIG92ZXJmbG93cyB3ZSBkcm9wIGRhdGEgaGVyZQotCSAqIHdoaWNoIGlzICpiYWQqIGJlY2F1c2UgTDJDQVAgaGFzIHRvIGJlIHJlbGlhYmxlLgotCSAqIEJ1dCB3ZSBkb24ndCBoYXZlIGFueSBvdGhlciBjaG9pY2UuIEwyQ0FQIGRvZXNuJ3QKLQkgKiBwcm92aWRlIGZsb3cgY29udHJvbCBtZWNoYW5pc20uICovCisJCWlmIChwaS0+aW10dSA8IHNrYi0+bGVuKQorCQkJZ290byBkcm9wOwogCi0JaWYgKCFzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikpCisJCWlmICghc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpKQorCQkJZ290byBkb25lOworCQlicmVhazsKKworCWNhc2UgTDJDQVBfTU9ERV9FUlRNOgorCQljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSk7CisJCXNrYl9wdWxsKHNrYiwgMik7CisJCWxlbiA9IHNrYi0+bGVuOworCisJCWlmIChfX2lzX3Nhcl9zdGFydChjb250cm9sKSkKKwkJCWxlbiAtPSAyOworCisJCWlmIChwaS0+ZmNzID09IEwyQ0FQX0ZDU19DUkMxNikKKwkJCWxlbiAtPSAyOworCisJCS8qCisJCSAqIFdlIGNhbiBqdXN0IGRyb3AgdGhlIGNvcnJ1cHRlZCBJLWZyYW1lIGhlcmUuCisJCSAqIFJlY2VpdmVyIHdpbGwgbWlzcyBpdCBhbmQgc3RhcnQgcHJvcGVyIHJlY292ZXJ5CisJCSAqIHByb2NlZHVyZXMgYW5kIGFzayByZXRyYW5zbWlzc2lvbi4KKwkJICovCisJCWlmIChsZW4gPiBMMkNBUF9ERUZBVUxUX01BWF9QRFVfU0laRSkKKwkJCWdvdG8gZHJvcDsKKworCQlpZiAobDJjYXBfY2hlY2tfZmNzKHBpLCBza2IpKQorCQkJZ290byBkcm9wOworCisJCWlmIChfX2lzX2lmcmFtZShjb250cm9sKSkKKwkJCWVyciA9IGwyY2FwX2RhdGFfY2hhbm5lbF9pZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisJCWVsc2UKKwkJCWVyciA9IGwyY2FwX2RhdGFfY2hhbm5lbF9zZnJhbWUoc2ssIGNvbnRyb2wsIHNrYik7CisKKwkJaWYgKCFlcnIpCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCisJY2FzZSBMMkNBUF9NT0RFX1NUUkVBTUlORzoKKwkJY29udHJvbCA9IGdldF91bmFsaWduZWRfbGUxNihza2ItPmRhdGEpOworCQlza2JfcHVsbChza2IsIDIpOworCQlsZW4gPSBza2ItPmxlbjsKKworCQlpZiAoX19pc19zYXJfc3RhcnQoY29udHJvbCkpCisJCQlsZW4gLT0gMjsKKworCQlpZiAocGktPmZjcyA9PSBMMkNBUF9GQ1NfQ1JDMTYpCisJCQlsZW4gLT0gMjsKKworCQlpZiAobGVuID4gTDJDQVBfREVGQVVMVF9NQVhfUERVX1NJWkUgfHwgX19pc19zZnJhbWUoY29udHJvbCkpCisJCQlnb3RvIGRyb3A7CisKKwkJaWYgKGwyY2FwX2NoZWNrX2ZjcyhwaSwgc2tiKSkKKwkJCWdvdG8gZHJvcDsKKworCQl0eF9zZXEgPSBfX2dldF90eHNlcShjb250cm9sKTsKKworCQlpZiAocGktPmV4cGVjdGVkX3R4X3NlcSA9PSB0eF9zZXEpCisJCQlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gKHBpLT5leHBlY3RlZF90eF9zZXEgKyAxKSAlIDY0OworCQllbHNlCisJCQlwaS0+ZXhwZWN0ZWRfdHhfc2VxID0gdHhfc2VxICsgMTsKKworCQllcnIgPSBsMmNhcF9zYXJfcmVhc3NlbWJseV9zZHUoc2ssIHNrYiwgY29udHJvbCk7CisKIAkJZ290byBkb25lOwogCisJZGVmYXVsdDoKKwkJQlRfREJHKCJzayAlcDogYmFkIG1vZGUgMHglMi4yeCIsIHNrLCBsMmNhcF9waShzayktPm1vZGUpOworCQlicmVhazsKKwl9CisKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CiAKQEAgLTI0MzMsNiArMzU5MiwxMSBAQAogCWNpZCA9IF9fbGUxNl90b19jcHUobGgtPmNpZCk7CiAJbGVuID0gX19sZTE2X3RvX2NwdShsaC0+bGVuKTsKIAorCWlmIChsZW4gIT0gc2tiLT5sZW4pIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKIAlCVF9EQkcoImxlbiAlZCwgY2lkIDB4JTQuNHgiLCBsZW4sIGNpZCk7CiAKIAlzd2l0Y2ggKGNpZCkgewpAQCAtMjQ0MSw3ICszNjA1LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEwyQ0FQX0NJRF9DT05OX0xFU1M6Ci0JCXBzbSA9IGdldF91bmFsaWduZWQoKF9fbGUxNiAqKSBza2ItPmRhdGEpOworCQlwc20gPSBnZXRfdW5hbGlnbmVkX2xlMTYoc2tiLT5kYXRhKTsKIAkJc2tiX3B1bGwoc2tiLCAyKTsKIAkJbDJjYXBfY29ubGVzc19jaGFubmVsKGNvbm4sIHBzbSwgc2tiKTsKIAkJYnJlYWs7CkBAIC0yODI4LDYgKzM5OTIsOSBAQAogbW9kdWxlX2luaXQobDJjYXBfaW5pdCk7CiBtb2R1bGVfZXhpdChsMmNhcF9leGl0KTsKIAorbW9kdWxlX3BhcmFtKGVuYWJsZV9lcnRtLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX2VydG0sICJFbmFibGUgZW5oYW5jZWQgcmV0cmFuc21pc3Npb24gbW9kZSIpOworCiBNT0RVTEVfQVVUSE9SKCJNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkJsdWV0b290aCBMMkNBUCB2ZXIgIiBWRVJTSU9OKTsKIE1PRFVMRV9WRVJTSU9OKFZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IDk0YjMzODguLjI1NjkyYmMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTI0NCw2ICsyNDQsMzMgQEAKIAkJCQkJCQkJYXV0aF90eXBlKTsKIH0KIAorc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnMgPSAodm9pZCAqKSBhcmc7CisKKwlCVF9EQkcoInNlc3Npb24gJXAgc3RhdGUgJWxkIiwgcywgcy0+c3RhdGUpOworCisJc2V0X2JpdChSRkNPTU1fVElNRURfT1VULCAmcy0+ZmxhZ3MpOworCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKKwlyZmNvbW1fc2NoZWR1bGUoUkZDT01NX1NDSEVEX1RJTUVPKTsKK30KKworc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fc2V0X3RpbWVyKHN0cnVjdCByZmNvbW1fc2Vzc2lvbiAqcywgbG9uZyB0aW1lb3V0KQoreworCUJUX0RCRygic2Vzc2lvbiAlcCBzdGF0ZSAlbGQgdGltZW91dCAlbGQiLCBzLCBzLT5zdGF0ZSwgdGltZW91dCk7CisKKwlpZiAoIW1vZF90aW1lcigmcy0+dGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KSkKKwkJcmZjb21tX3Nlc3Npb25faG9sZChzKTsKK30KKworc3RhdGljIHZvaWQgcmZjb21tX3Nlc3Npb25fY2xlYXJfdGltZXIoc3RydWN0IHJmY29tbV9zZXNzaW9uICpzKQoreworCUJUX0RCRygic2Vzc2lvbiAlcCBzdGF0ZSAlbGQiLCBzLCBzLT5zdGF0ZSk7CisKKwlpZiAodGltZXJfcGVuZGluZygmcy0+dGltZXIpICYmIGRlbF90aW1lcigmcy0+dGltZXIpKQorCQlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7Cit9CisKIC8qIC0tLS0gUkZDT01NIERMQ3MgLS0tLSAqLwogc3RhdGljIHZvaWQgcmZjb21tX2RsY190aW1lb3V0KHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMzIwLDYgKzM0Nyw3IEBACiAKIAlyZmNvbW1fc2Vzc2lvbl9ob2xkKHMpOwogCisJcmZjb21tX3Nlc3Npb25fY2xlYXJfdGltZXIocyk7CiAJcmZjb21tX2RsY19ob2xkKGQpOwogCWxpc3RfYWRkKCZkLT5saXN0LCAmcy0+ZGxjcyk7CiAJZC0+c2Vzc2lvbiA9IHM7CkBAIC0zMzUsNiArMzYzLDkgQEAKIAlkLT5zZXNzaW9uID0gTlVMTDsKIAlyZmNvbW1fZGxjX3B1dChkKTsKIAorCWlmIChsaXN0X2VtcHR5KCZzLT5kbGNzKSkKKwkJcmZjb21tX3Nlc3Npb25fc2V0X3RpbWVyKHMsIFJGQ09NTV9JRExFX1RJTUVPVVQpOworCiAJcmZjb21tX3Nlc3Npb25fcHV0KHMpOwogfQogCkBAIC01NjcsNiArNTk4LDggQEAKIAogCUJUX0RCRygic2Vzc2lvbiAlcCBzb2NrICVwIiwgcywgc29jayk7CiAKKwlzZXR1cF90aW1lcigmcy0+dGltZXIsIHJmY29tbV9zZXNzaW9uX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKSBzKTsKKwogCUlOSVRfTElTVF9IRUFEKCZzLT5kbGNzKTsKIAlzLT5zdGF0ZSA9IHN0YXRlOwogCXMtPnNvY2sgID0gc29jazsKQEAgLTU5OCw2ICs2MzEsNyBAQAogCWlmIChzdGF0ZSA9PSBCVF9DT05ORUNURUQpCiAJCXJmY29tbV9zZW5kX2Rpc2MocywgMCk7CiAKKwlyZmNvbW1fc2Vzc2lvbl9jbGVhcl90aW1lcihzKTsKIAlzb2NrX3JlbGVhc2Uocy0+c29jayk7CiAJa2ZyZWUocyk7CiAKQEAgLTYzOSw2ICs2NzMsNyBAQAogCQlfX3JmY29tbV9kbGNfY2xvc2UoZCwgZXJyKTsKIAl9CiAKKwlyZmNvbW1fc2Vzc2lvbl9jbGVhcl90aW1lcihzKTsKIAlyZmNvbW1fc2Vzc2lvbl9wdXQocyk7CiB9CiAKQEAgLTE4NzksNiArMTkxNCwxMiBAQAogCQlzdHJ1Y3QgcmZjb21tX3Nlc3Npb24gKnM7CiAJCXMgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZmNvbW1fc2Vzc2lvbiwgbGlzdCk7CiAKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRkNPTU1fVElNRURfT1VULCAmcy0+ZmxhZ3MpKSB7CisJCQlzLT5zdGF0ZSA9IEJUX0RJU0NPTk47CisJCQlyZmNvbW1fc2VuZF9kaXNjKHMsIDApOworCQkJY29udGludWU7CisJCX0KKwogCQlpZiAocy0+c3RhdGUgPT0gQlRfTElTVEVOKSB7CiAJCQlyZmNvbW1fYWNjZXB0X2Nvbm5lY3Rpb24ocyk7CiAJCQljb250aW51ZTsKQEAgLTIwODAsNyArMjEyMSw3IEBACiAvKiAtLS0tIEluaXRpYWxpemF0aW9uIC0tLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHJmY29tbV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKKwlpbnQgZXJyOwogCiAJbDJjYXBfbG9hZCgpOwogCkBAIC0yMDg4LDMzICsyMTI5LDM1IEBACiAKIAlyZmNvbW1fdGhyZWFkID0ga3RocmVhZF9ydW4ocmZjb21tX3J1biwgTlVMTCwgImtyZmNvbW1kIik7CiAJaWYgKElTX0VSUihyZmNvbW1fdGhyZWFkKSkgewotCQlyZXQgPSBQVFJfRVJSKHJmY29tbV90aHJlYWQpOwotCQlnb3RvIG91dF90aHJlYWQ7CisJCWVyciA9IFBUUl9FUlIocmZjb21tX3RocmVhZCk7CisJCWdvdG8gdW5yZWdpc3RlcjsKIAl9CiAKIAlpZiAoY2xhc3NfY3JlYXRlX2ZpbGUoYnRfY2xhc3MsICZjbGFzc19hdHRyX3JmY29tbV9kbGMpIDwgMCkKIAkJQlRfRVJSKCJGYWlsZWQgdG8gY3JlYXRlIFJGQ09NTSBpbmZvIGZpbGUiKTsKIAotCXJldCA9IHJmY29tbV9pbml0X3R0eXMoKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF90dHk7CisJZXJyID0gcmZjb21tX2luaXRfdHR5cygpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHN0b3A7CiAKLQlyZXQgPSByZmNvbW1faW5pdF9zb2NrZXRzKCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfc29jazsKKwllcnIgPSByZmNvbW1faW5pdF9zb2NrZXRzKCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gY2xlYW51cDsKIAogCUJUX0lORk8oIlJGQ09NTSB2ZXIgJXMiLCBWRVJTSU9OKTsKIAogCXJldHVybiAwOwogCi1vdXRfc29jazoKK2NsZWFudXA6CiAJcmZjb21tX2NsZWFudXBfdHR5cygpOwotb3V0X3R0eToKKworc3RvcDoKIAlrdGhyZWFkX3N0b3AocmZjb21tX3RocmVhZCk7Ci1vdXRfdGhyZWFkOgorCit1bnJlZ2lzdGVyOgogCWhjaV91bnJlZ2lzdGVyX2NiKCZyZmNvbW1fY2IpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmZjb21tX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDUxYWUwYzMuLjEzYzI3ZjEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtMzU5LDIwICszNTksOSBAQAogCXNvY2tfcHV0KHNrKTsKIH0KIAotLyogQ2xvc2Ugc29ja2V0LgotICogTXVzdCBiZSBjYWxsZWQgb24gdW5sb2NrZWQgc29ja2V0LgotICovCi1zdGF0aWMgdm9pZCBzY29fc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBfX3Njb19zb2NrX2Nsb3NlKHN0cnVjdCBzb2NrICpzaykKIHsKLQlzdHJ1Y3Qgc2NvX2Nvbm4gKmNvbm47Ci0KLQlzY29fc29ja19jbGVhcl90aW1lcihzayk7Ci0KLQlsb2NrX3NvY2soc2spOwotCi0JY29ubiA9IHNjb19waShzayktPmNvbm47Ci0KLQlCVF9EQkcoInNrICVwIHN0YXRlICVkIGNvbm4gJXAgc29ja2V0ICVwIiwgc2ssIHNrLT5za19zdGF0ZSwgY29ubiwgc2stPnNrX3NvY2tldCk7CisJQlRfREJHKCJzayAlcCBzdGF0ZSAlZCBzb2NrZXQgJXAiLCBzaywgc2stPnNrX3N0YXRlLCBzay0+c2tfc29ja2V0KTsKIAogCXN3aXRjaCAoc2stPnNrX3N0YXRlKSB7CiAJY2FzZSBCVF9MSVNURU46CkBAIC0zOTAsOSArMzc5LDE1IEBACiAJCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAkJYnJlYWs7CiAJfQorfQogCisvKiBNdXN0IGJlIGNhbGxlZCBvbiB1bmxvY2tlZCBzb2NrZXQuICovCitzdGF0aWMgdm9pZCBzY29fc29ja19jbG9zZShzdHJ1Y3Qgc29jayAqc2spCit7CisJc2NvX3NvY2tfY2xlYXJfdGltZXIoc2spOworCWxvY2tfc29jayhzayk7CisJX19zY29fc29ja19jbG9zZShzayk7CiAJcmVsZWFzZV9zb2NrKHNrKTsKLQogCXNjb19zb2NrX2tpbGwoc2spOwogfQogCkBAIC03NDgsNiArNzQzLDMwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBzY29fc29ja19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCWludCBlcnIgPSAwOworCisJQlRfREJHKCJzb2NrICVwLCBzayAlcCIsIHNvY2ssIHNrKTsKKworCWlmICghc2spCisJCXJldHVybiAwOworCisJbG9ja19zb2NrKHNrKTsKKwlpZiAoIXNrLT5za19zaHV0ZG93bikgeworCQlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOworCQlzY29fc29ja19jbGVhcl90aW1lcihzayk7CisJCV9fc2NvX3NvY2tfY2xvc2Uoc2spOworCisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfTElOR0VSKSAmJiBzay0+c2tfbGluZ2VydGltZSkKKwkJCWVyciA9IGJ0X3NvY2tfd2FpdF9zdGF0ZShzaywgQlRfQ0xPU0VELAorCQkJCQkJCXNrLT5za19saW5nZXJ0aW1lKTsKKwl9CisJcmVsZWFzZV9zb2NrKHNrKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IHNjb19zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTk2OSw3ICs5ODgsNyBAQAogCS5pb2N0bAkJPSBidF9zb2NrX2lvY3RsLAogCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKIAkuc29ja2V0cGFpcgk9IHNvY2tfbm9fc29ja2V0cGFpciwKLQkuc2h1dGRvd24JPSBzb2NrX25vX3NodXRkb3duLAorCS5zaHV0ZG93bgk9IHNjb19zb2NrX3NodXRkb3duLAogCS5zZXRzb2Nrb3B0CT0gc2NvX3NvY2tfc2V0c29ja29wdCwKIAkuZ2V0c29ja29wdAk9IHNjb19zb2NrX2dldHNvY2tvcHQKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jIGIvbmV0L2JyaWRnZS9icl9kZXZpY2UuYwppbmRleCAxODUzOGQ3Li4wN2EwNzc3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAKIC8qIG5ldCBkZXZpY2UgdHJhbnNtaXQgYWx3YXlzIGNhbGxlZCB3aXRoIG5vIEJIIChwcmVlbXB0X2Rpc2FibGVkKSAqLwotaW50IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCituZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqZGVzdCA9IHNrYi0+ZGF0YTsKQEAgLTM5LDcgKzM5LDcgQEAKIAllbHNlCiAJCWJyX2Zsb29kX2RlbGl2ZXIoYnIsIHNrYik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IGJyX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCmluZGV4IGQyYzI3YzguLmJjMTcwNGEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCisrKyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCkBAIC0yMiw3ICsyMiw4IEBACiBzdGF0aWMgaW5saW5lIGludCBzaG91bGRfZGVsaXZlcihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXJldHVybiAoc2tiLT5kZXYgIT0gcC0+ZGV2ICYmIHAtPnN0YXRlID09IEJSX1NUQVRFX0ZPUldBUkRJTkcpOworCXJldHVybiAoKChwLT5mbGFncyAmIEJSX0hBSVJQSU5fTU9ERSkgfHwgc2tiLT5kZXYgIT0gcC0+ZGV2KSAmJgorCQlwLT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBwYWNrZXRfbGVuZ3RoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggZWI0MDRkYy4uMTQyZWJhYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtMjU2LDYgKzI1Niw3IEBACiAJcC0+cGF0aF9jb3N0ID0gcG9ydF9jb3N0KGRldik7CiAJcC0+cHJpb3JpdHkgPSAweDgwMDAgPj4gQlJfUE9SVF9CSVRTOwogCXAtPnBvcnRfbm8gPSBpbmRleDsKKwlwLT5mbGFncyA9IDA7CiAJYnJfaW5pdF9wb3J0KHApOwogCXAtPnN0YXRlID0gQlJfU1RBVEVfRElTQUJMRUQ7CiAJYnJfc3RwX3BvcnRfdGltZXJfaW5pdChwKTsKQEAgLTI2Myw2ICsyNjQsMTAgQEAKIAlyZXR1cm4gcDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBicl90eXBlID0geworCS5uYW1lCT0gImJyaWRnZSIsCit9OworCiBpbnQgYnJfYWRkX2JyaWRnZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTI3OSw2ICsyODQsOCBAQAogCQkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwlTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCAmYnJfdHlwZSk7CisKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggZDIyZjYxMS4uOTA3YTgyZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC0zNTksNyArMzU5LDcgQEAKIAkJCQl9LAogCQkJCS5wcm90byA9IDAsCiAJCQl9OwotCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOworCQkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShkZXYpOwogCiAJCQkvKiBJZiBlcnIgZXF1YWxzIC1FSE9TVFVOUkVBQ0ggdGhlIGVycm9yIGlzIGR1ZSB0byBhCiAJCQkgKiBtYXJ0aWFuIGRlc3RpbmF0aW9uIG9yIGR1ZSB0byB0aGUgZmFjdCB0aGF0CkBAIC05MDUsNDYgKzkwNSw2MiBAQAogICogRm9yIGJyX25mX3Bvc3Rfcm91dGluZywgd2UgbmVlZCAocHJpbyA9IE5GX0JSX1BSSV9MQVNUKSwgYmVjYXVzZQogICogaXBfcmVmcmFnKCkgY2FuIHJldHVybiBORl9TVE9MRU4uICovCiBzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGJyX25mX29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JeyAuaG9vayA9IGJyX25mX3ByZV9yb3V0aW5nLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JICAucGYgPSBQRl9CUklER0UsCi0JICAuaG9va251bSA9IE5GX0JSX1BSRV9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYsIH0sCi0JeyAuaG9vayA9IGJyX25mX2xvY2FsX2luLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JICAucGYgPSBQRl9CUklER0UsCi0JICAuaG9va251bSA9IE5GX0JSX0xPQ0FMX0lOLAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYsIH0sCi0JeyAuaG9vayA9IGJyX25mX2ZvcndhcmRfaXAsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfRk9SV0FSRCwKLQkgIC5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GIC0gMSwgfSwKLQl7IC5ob29rID0gYnJfbmZfZm9yd2FyZF9hcnAsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfRk9SV0FSRCwKLQkgIC5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GLCB9LAotCXsgLmhvb2sgPSBicl9uZl9sb2NhbF9vdXQsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfTE9DQUxfT1VULAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0ZJUlNULCB9LAotCXsgLmhvb2sgPSBicl9uZl9wb3N0X3JvdXRpbmcsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkgIC5wZiA9IFBGX0JSSURHRSwKLQkgIC5ob29rbnVtID0gTkZfQlJfUE9TVF9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfQlJfUFJJX0xBU1QsIH0sCi0JeyAuaG9vayA9IGlwX3NhYm90YWdlX2luLAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JICAucGYgPSBQRl9JTkVULAotCSAgLmhvb2tudW0gPSBORl9JTkVUX1BSRV9ST1VUSU5HLAotCSAgLnByaW9yaXR5ID0gTkZfSVBfUFJJX0ZJUlNULCB9LAotCXsgLmhvb2sgPSBpcF9zYWJvdGFnZV9pbiwKLQkgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCSAgLnBmID0gUEZfSU5FVDYsCi0JICAuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsCi0JICAucHJpb3JpdHkgPSBORl9JUDZfUFJJX0ZJUlNULCB9LAorCXsKKwkJLmhvb2sgPSBicl9uZl9wcmVfcm91dGluZywKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wZiA9IFBGX0JSSURHRSwKKwkJLmhvb2tudW0gPSBORl9CUl9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYsCisJfSwKKwl7CisJCS5ob29rID0gYnJfbmZfbG9jYWxfaW4sCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucGYgPSBQRl9CUklER0UsCisJCS5ob29rbnVtID0gTkZfQlJfTE9DQUxfSU4sCisJCS5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GLAorCX0sCisJeworCQkuaG9vayA9IGJyX25mX2ZvcndhcmRfaXAsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucGYgPSBQRl9CUklER0UsCisJCS5ob29rbnVtID0gTkZfQlJfRk9SV0FSRCwKKwkJLnByaW9yaXR5ID0gTkZfQlJfUFJJX0JSTkYgLSAxLAorCX0sCisJeworCQkuaG9vayA9IGJyX25mX2ZvcndhcmRfYXJwLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBmID0gUEZfQlJJREdFLAorCQkuaG9va251bSA9IE5GX0JSX0ZPUldBUkQsCisJCS5wcmlvcml0eSA9IE5GX0JSX1BSSV9CUk5GLAorCX0sCisJeworCQkuaG9vayA9IGJyX25mX2xvY2FsX291dCwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wZiA9IFBGX0JSSURHRSwKKwkJLmhvb2tudW0gPSBORl9CUl9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSA9IE5GX0JSX1BSSV9GSVJTVCwKKwl9LAorCXsKKwkJLmhvb2sgPSBicl9uZl9wb3N0X3JvdXRpbmcsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucGYgPSBQRl9CUklER0UsCisJCS5ob29rbnVtID0gTkZfQlJfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkgPSBORl9CUl9QUklfTEFTVCwKKwl9LAorCXsKKwkJLmhvb2sgPSBpcF9zYWJvdGFnZV9pbiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wZiA9IFBGX0lORVQsCisJCS5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX0ZJUlNULAorCX0sCisJeworCQkuaG9vayA9IGlwX3NhYm90YWdlX2luLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBmID0gUEZfSU5FVDYsCisJCS5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggZDViNTUzNy4uMjExNGU0NSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTgxLDYgKzgxLDkgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJbWVzc2FnZV9hZ2VfdGltZXI7CiAJc3RydWN0IGtvYmplY3QJCQlrb2JqOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKKworCXVuc2lnbmVkIGxvbmcgCQkJZmxhZ3M7CisjZGVmaW5lIEJSX0hBSVJQSU5fTU9ERQkJMHgwMDAwMDAwMQogfTsKIAogc3RydWN0IG5ldF9icmlkZ2UKQEAgLTE0MCw3ICsxNDMsOCBAQAogCiAvKiBicl9kZXZpY2UuYyAqLwogZXh0ZXJuIHZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBuZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBicl9mZGIuYyAqLwogZXh0ZXJuIGludCBicl9mZGJfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfc3RwLmMgYi9uZXQvYnJpZGdlL2JyX3N0cC5jCmluZGV4IDA2NjA1MTUuLmZkM2Y4ZDYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwLmMKKysrIGIvbmV0L2JyaWRnZS9icl9zdHAuYwpAQCAtMjEsNyArMjEsNyBAQAogICovCiAjZGVmaW5lIE1FU1NBR0VfQUdFX0lOQ1IJKChIWiA8IDI1NikgPyAxIDogKEhaLzI1NikpCiAKLXN0YXRpYyBjb25zdCBjaGFyICpicl9wb3J0X3N0YXRlX25hbWVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnJfcG9ydF9zdGF0ZV9uYW1lc1tdID0gewogCVtCUl9TVEFURV9ESVNBQkxFRF0gPSAiZGlzYWJsZWQiLAogCVtCUl9TVEFURV9MSVNURU5JTkddID0gImxpc3RlbmluZyIsCiAJW0JSX1NUQVRFX0xFQVJOSU5HXSA9ICJsZWFybmluZyIsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMKaW5kZXggNGEzY2RmOC4uODIwNjQzYSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zeXNmc19pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfaWYuYwpAQCAtMTQzLDYgKzE0MywyMiBAQAogfQogc3RhdGljIEJSUE9SVF9BVFRSKGZsdXNoLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9mbHVzaCk7CiAKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGFpcnBpbl9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaGFpcnBpbl9tb2RlID0gKHAtPmZsYWdzICYgQlJfSEFJUlBJTl9NT0RFKSA/IDEgOiAwOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBoYWlycGluX21vZGUpOworfQorc3RhdGljIHNzaXplX3Qgc3RvcmVfaGFpcnBpbl9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHVuc2lnbmVkIGxvbmcgdikKK3sKKwlpZiAodikKKwkJcC0+ZmxhZ3MgfD0gQlJfSEFJUlBJTl9NT0RFOworCWVsc2UKKwkJcC0+ZmxhZ3MgJj0gfkJSX0hBSVJQSU5fTU9ERTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBCUlBPUlRfQVRUUihoYWlycGluX21vZGUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X2hhaXJwaW5fbW9kZSwgc3RvcmVfaGFpcnBpbl9tb2RlKTsKKwogc3RhdGljIHN0cnVjdCBicnBvcnRfYXR0cmlidXRlICpicnBvcnRfYXR0cnNbXSA9IHsKIAkmYnJwb3J0X2F0dHJfcGF0aF9jb3N0LAogCSZicnBvcnRfYXR0cl9wcmlvcml0eSwKQEAgLTE1OSw2ICsxNzUsNyBAQAogCSZicnBvcnRfYXR0cl9mb3J3YXJkX2RlbGF5X3RpbWVyLAogCSZicnBvcnRfYXR0cl9ob2xkX3RpbWVyLAogCSZicnBvcnRfYXR0cl9mbHVzaCwKKwkmYnJwb3J0X2F0dHJfaGFpcnBpbl9tb2RlLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCBhOTRmM2NjLi5lNGVhM2ZkIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCkBAIC01MCwxNCArNTAsNiBAQAogCXVuc2lnbmVkIGNoYXIgaXBfZHN0WzRdOwogfTsKIAotc3RhdGljIHZvaWQgcHJpbnRfTUFDKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKywgcCsrKQotCQlwcmludGsoIiUwMnglYyIsICpwLCBpID09IEVUSF9BTEVOIC0gMSA/ICcgJzonOicpOwotfQotCiBzdGF0aWMgdm9pZAogcHJpbnRfcG9ydHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdWludDhfdCBwcm90b2NvbCwgaW50IG9mZnNldCkKIHsKQEAgLTg4LDE0ICs4MCwxMSBAQAogCXVuc2lnbmVkIGludCBiaXRtYXNrOwogCiAJc3Bpbl9sb2NrX2JoKCZlYnRfbG9nX2xvY2spOwotCXByaW50aygiPCVjPiVzIElOPSVzIE9VVD0lcyBNQUMgc291cmNlID0gIiwgJzAnICsgbG9naW5mby0+dS5sb2cubGV2ZWwsCi0JICAgICAgIHByZWZpeCwgaW4gPyBpbi0+bmFtZSA6ICIiLCBvdXQgPyBvdXQtPm5hbWUgOiAiIik7Ci0KLQlwcmludF9NQUMoZXRoX2hkcihza2IpLT5oX3NvdXJjZSk7Ci0JcHJpbnRrKCJNQUMgZGVzdCA9ICIpOwotCXByaW50X01BQyhldGhfaGRyKHNrYiktPmhfZGVzdCk7Ci0KLQlwcmludGsoInByb3RvID0gMHglMDR4IiwgbnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSk7CisJcHJpbnRrKCI8JWM+JXMgSU49JXMgT1VUPSVzIE1BQyBzb3VyY2UgPSAlcE0gTUFDIGRlc3QgPSAlcE0gcHJvdG8gPSAweCUwNHgiLAorCSAgICAgICAnMCcgKyBsb2dpbmZvLT51LmxvZy5sZXZlbCwgcHJlZml4LAorCSAgICAgICBpbiA/IGluLT5uYW1lIDogIiIsIG91dCA/IG91dC0+bmFtZSA6ICIiLAorCSAgICAgICBldGhfaGRyKHNrYiktPmhfc291cmNlLCBldGhfaGRyKHNrYiktPmhfZGVzdCwKKwkgICAgICAgbnRvaHMoZXRoX2hkcihza2IpLT5oX3Byb3RvKSk7CiAKIAlpZiAobG9naW5mby0+dHlwZSA9PSBORl9MT0dfVFlQRV9MT0cpCiAJCWJpdG1hc2sgPSBsb2dpbmZvLT51LmxvZy5sb2dmbGFnczsKQEAgLTE3MSwxMiArMTYwLDggQEAKIAkJCQlwcmludGsoIiBJTkNPTVBMRVRFIEFSUCBwYXlsb2FkIik7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlwcmludGsoIiBBUlAgTUFDIFNSQz0iKTsKLQkJCXByaW50X01BQyhhcC0+bWFjX3NyYyk7Ci0JCQlwcmludGsoIiBBUlAgSVAgU1JDPSVwSTQiLCBhcC0+aXBfc3JjKTsKLQkJCXByaW50aygiIEFSUCBNQUMgRFNUPSIpOwotCQkJcHJpbnRfTUFDKGFwLT5tYWNfZHN0KTsKLQkJCXByaW50aygiIEFSUCBJUCBEU1Q9JXBJNCIsIGFwLT5pcF9kc3QpOworCQkJcHJpbnRrKCIgQVJQIE1BQyBTUkM9JXBNIEFSUCBJUCBTUkM9JXBJNCBBUlAgTUFDIERTVD0lcE0gQVJQIElQIERTVD0lcEk0IiwKKwkJCQkJYXAtPm1hY19zcmMsIGFwLT5pcF9zcmMsIGFwLT5tYWNfZHN0LCBhcC0+aXBfZHN0KTsKIAkJfQogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IDEzM2VlYWUuLmNlNTA2ODggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJaWYgKHVsb2dpbmZvLT5xdGhyZXNob2xkID4gRUJUX1VMT0dfTUFYX1FMRU4pCiAJCXVsb2dpbmZvLT5xdGhyZXNob2xkID0gRUJUX1VMT0dfTUFYX1FMRU47CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgZWJ0X3Vsb2dfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwppbmRleCBjNzUxMTExLi5kMzJhYjEzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBlYnRfdGFibGUgYnJvdXRlX3RhYmxlID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlIGJyb3V0ZV90YWJsZSA9CiB7CiAJLm5hbWUJCT0gImJyb3V0ZSIsCiAJLnRhYmxlCQk9ICZpbml0aWFsX3RhYmxlLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKaW5kZXggYTVlZWE3Mi4uNjBiMWE2YyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCkBAIC01MCw3ICs1MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZWJ0X3RhYmxlIGZyYW1lX2ZpbHRlciA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGVidF90YWJsZSBmcmFtZV9maWx0ZXIgPQogewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKQEAgLTc3LDIxICs3NywyMSBAQAogCXsKIAkJLmhvb2sJCT0gZWJ0X2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0JSSURHRSwKKwkJLnBmCQk9IE5GUFJPVE9fQlJJREdFLAogCQkuaG9va251bQk9IE5GX0JSX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9CUl9QUklfRklMVEVSX0JSSURHRUQsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGVidF9pbl9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9CUklER0UsCisJCS5wZgkJPSBORlBST1RPX0JSSURHRSwKIAkJLmhvb2tudW0JPSBORl9CUl9GT1JXQVJELAogCQkucHJpb3JpdHkJPSBORl9CUl9QUklfRklMVEVSX0JSSURHRUQsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGVidF9vdXRfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfQlJJREdFLAorCQkucGYJCT0gTkZQUk9UT19CUklER0UsCiAJCS5ob29rbnVtCT0gTkZfQlJfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9CUl9QUklfRklMVEVSX09USEVSLAogCX0sCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCA2MDI0YzU1Li40YTk4ODA0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTc3LDIxICs3NywyMSBAQAogCXsKIAkJLmhvb2sJCT0gZWJ0X25hdF9vdXQsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0JSSURHRSwKKwkJLnBmCQk9IE5GUFJPVE9fQlJJREdFLAogCQkuaG9va251bQk9IE5GX0JSX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5CT0gTkZfQlJfUFJJX05BVF9EU1RfT1RIRVIsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGVidF9uYXRfb3V0LAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9CUklER0UsCisJCS5wZgkJPSBORlBST1RPX0JSSURHRSwKIAkJLmhvb2tudW0JPSBORl9CUl9QT1NUX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0JSX1BSSV9OQVRfU1JDLAogCX0sCiAJewogCQkuaG9vawkJPSBlYnRfbmF0X2luLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9CUklER0UsCisJCS5wZgkJPSBORlBST1RPX0JSSURHRSwKIAkJLmhvb2tudW0JPSBORl9CUl9QUkVfUk9VVElORywKIAkJLnByaW9yaXR5CT0gTkZfQlJfUFJJX05BVF9EU1RfQlJJREdFRCwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggMzc5MjhkNS4uYmQxYzY1NCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC0xMTAzLDIzICsxMTAzLDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IGVidF90YWJsZSAqZWJ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF90YWJsZSAqdGFibGUpCitzdHJ1Y3QgZWJ0X3RhYmxlICoKK2VidF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBlYnRfdGFibGUgKmlucHV0X3RhYmxlKQogewogCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbzsKLQlzdHJ1Y3QgZWJ0X3RhYmxlICp0OworCXN0cnVjdCBlYnRfdGFibGUgKnQsICp0YWJsZTsKIAlzdHJ1Y3QgZWJ0X3JlcGxhY2Vfa2VybmVsICpyZXBsOwogCWludCByZXQsIGksIGNvdW50ZXJzaXplOwogCXZvaWQgKnA7CiAKLQlpZiAoIXRhYmxlIHx8ICEocmVwbCA9IHRhYmxlLT50YWJsZSkgfHwgIXJlcGwtPmVudHJpZXMgfHwKLQkgICAgcmVwbC0+ZW50cmllc19zaXplID09IDAgfHwKLQkgICAgcmVwbC0+Y291bnRlcnMgfHwgdGFibGUtPnByaXZhdGUpIHsKKwlpZiAoaW5wdXRfdGFibGUgPT0gTlVMTCB8fCAocmVwbCA9IGlucHV0X3RhYmxlLT50YWJsZSkgPT0gTlVMTCB8fAorCSAgICByZXBsLT5lbnRyaWVzID09IDAgfHwgcmVwbC0+ZW50cmllc19zaXplID09IDAgfHwKKwkgICAgcmVwbC0+Y291bnRlcnMgIT0gTlVMTCB8fCBpbnB1dF90YWJsZS0+cHJpdmF0ZSAhPSBOVUxMKSB7CiAJCUJVR1BSSU5UKCJCYWQgdGFibGUgZGF0YSBmb3IgZWJ0X3JlZ2lzdGVyX3RhYmxlISEhXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCiAJLyogRG9uJ3QgYWRkIG9uZSB0YWJsZSB0byBtdWx0aXBsZSBsaXN0cy4gKi8KLQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlKSwgR0ZQX0tFUk5FTCk7CisJdGFibGUgPSBrbWVtZHVwKGlucHV0X3RhYmxlLCBzaXplb2Yoc3RydWN0IGVidF90YWJsZSksIEdGUF9LRVJORUwpOwogCWlmICghdGFibGUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCBlNzMzNzI1Li5lZjFjNDNhIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTY1MSwxMiArNjUxLDE2IEBACiAJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKIAlpbnQgbWF0Y2hlczsKIAotCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0NBTiB8fCAhbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKKwkJZ290byBkcm9wOwogCi0JQlVHX09OKHNrYi0+bGVuICE9IHNpemVvZihzdHJ1Y3QgY2FuX2ZyYW1lKSB8fCBjZi0+Y2FuX2RsYyA+IDgpOworCWlmIChXQVJOX09OQ0UoZGV2LT50eXBlICE9IEFSUEhSRF9DQU4gfHwKKwkJICAgICAgc2tiLT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBjYW5fZnJhbWUpIHx8CisJCSAgICAgIGNmLT5jYW5fZGxjID4gOCwKKwkJICAgICAgIlBGX0NBTjogZHJvcHBlZCBub24gY29uZm9ybSBza2J1ZjogIgorCQkgICAgICAiZGV2IHR5cGUgJWQsIGxlbiAlZCwgY2FuX2RsYyAlZFxuIiwKKwkJICAgICAgZGV2LT50eXBlLCBza2ItPmxlbiwgY2YtPmNhbl9kbGMpKQorCQlnb3RvIGRyb3A7CiAKIAkvKiB1cGRhdGUgc3RhdGlzdGljcyAqLwogCWNhbl9zdGF0cy5yeF9mcmFtZXMrKzsKQEAgLTY4Miw3ICs2ODYsMTEgQEAKIAkJY2FuX3N0YXRzLm1hdGNoZXNfZGVsdGErKzsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKK2Ryb3A6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggNzI3MjBjNy4uNTk3ZGE0ZiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYworKysgYi9uZXQvY2FuL2JjbS5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTE0NiwyMyArMTQ3LDE4IEBACiAJcmV0dXJuICI/Pz8iOwogfQogCi1zdGF0aWMgaW50IGJjbV9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgYmNtX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopZGF0YTsKKwlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltLT5wcml2YXRlOwogCXN0cnVjdCBiY21fc29jayAqYm8gPSBiY21fc2soc2spOwogCXN0cnVjdCBiY21fb3AgKm9wOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIj4+PiBzb2NrZXQgJXAiLAotCQkJc2stPnNrX3NvY2tldCk7Ci0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiAvIHNrICVwIiwgc2spOwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIgLyBibyAlcCIsIGJvKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiIC8gZHJvcHBlZCAlbHUiLAotCQkJYm8tPmRyb3BwZWRfdXNyX21zZ3MpOwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIgLyBib3VuZCAlcyIsCi0JCQliY21fcHJvY19nZXRpZm5hbWUoYm8tPmlmaW5kZXgpKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiIDw8PFxuIik7CisJc2VxX3ByaW50ZihtLCAiPj4+IHNvY2tldCAlcCIsIHNrLT5za19zb2NrZXQpOworCXNlcV9wcmludGYobSwgIiAvIHNrICVwIiwgc2spOworCXNlcV9wcmludGYobSwgIiAvIGJvICVwIiwgYm8pOworCXNlcV9wcmludGYobSwgIiAvIGRyb3BwZWQgJWx1IiwgYm8tPmRyb3BwZWRfdXNyX21zZ3MpOworCXNlcV9wcmludGYobSwgIiAvIGJvdW5kICVzIiwgYmNtX3Byb2NfZ2V0aWZuYW1lKGJvLT5pZmluZGV4KSk7CisJc2VxX3ByaW50ZihtLCAiIDw8PFxuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnJ4X29wcywgbGlzdCkgewogCkBAIC0xNzIsNzEgKzE2OCw2MiBAQAogCQlpZiAoIW9wLT5mcmFtZXNfYWJzKQogCQkJY29udGludWU7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkicnhfb3A6ICUwM1ggJS01cyAiLAorCQlzZXFfcHJpbnRmKG0sICJyeF9vcDogJTAzWCAlLTVzICIsCiAJCQkJb3AtPmNhbl9pZCwgYmNtX3Byb2NfZ2V0aWZuYW1lKG9wLT5pZmluZGV4KSk7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJbJWRdJWMgIiwKLQkJCQlvcC0+bmZyYW1lcywKKwkJc2VxX3ByaW50ZihtLCAiWyVkXSVjICIsIG9wLT5uZnJhbWVzLAogCQkJCShvcC0+ZmxhZ3MgJiBSWF9DSEVDS19ETEMpPydkJzonICcpOwogCQlpZiAob3AtPmt0X2l2YWwxLnR2NjQpCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCQkidGltZW89JWxsZCAiLAorCQkJc2VxX3ByaW50ZihtLCAidGltZW89JWxsZCAiLAogCQkJCQkobG9uZyBsb25nKQogCQkJCQlrdGltZV90b191cyhvcC0+a3RfaXZhbDEpKTsKIAogCQlpZiAob3AtPmt0X2l2YWwyLnR2NjQpCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCQkidGhyPSVsbGQgIiwKKwkJCXNlcV9wcmludGYobSwgInRocj0lbGxkICIsCiAJCQkJCShsb25nIGxvbmcpCiAJCQkJCWt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMikpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiMgcmVjdiAlbGQgKCVsZCkgPT4gcmVkdWN0aW9uOiAiLAorCQlzZXFfcHJpbnRmKG0sICIjIHJlY3YgJWxkICglbGQpID0+IHJlZHVjdGlvbjogIiwKIAkJCQlvcC0+ZnJhbWVzX2ZpbHRlcmVkLCBvcC0+ZnJhbWVzX2Ficyk7CiAKIAkJcmVkdWN0aW9uID0gMTAwIC0gKG9wLT5mcmFtZXNfZmlsdGVyZWQgKiAxMDApIC8gb3AtPmZyYW1lc19hYnM7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiVzJWxkJSVcbiIsCisJCXNlcV9wcmludGYobSwgIiVzJWxkJSVcbiIsCiAJCQkJKHJlZHVjdGlvbiA9PSAxMDApPyJuZWFyICI6IiIsIHJlZHVjdGlvbik7Ci0KLQkJaWYgKGxlbiA+IFBBR0VfU0laRSAtIDIwMCkgewotCQkJLyogbWFyayBvdXRwdXQgY3V0IG9mZiAqLwotCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiguLilcbiIpOwotCQkJYnJlYWs7Ci0JCX0KIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wLCAmYm8tPnR4X29wcywgbGlzdCkgewogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJInR4X29wOiAlMDNYICVzIFslZF0gIiwKKwkJc2VxX3ByaW50ZihtLCAidHhfb3A6ICUwM1ggJXMgWyVkXSAiLAogCQkJCW9wLT5jYW5faWQsIGJjbV9wcm9jX2dldGlmbmFtZShvcC0+aWZpbmRleCksCiAJCQkJb3AtPm5mcmFtZXMpOwogCiAJCWlmIChvcC0+a3RfaXZhbDEudHY2NCkKLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJ0MT0lbGxkICIsCisJCQlzZXFfcHJpbnRmKG0sICJ0MT0lbGxkICIsCiAJCQkJCShsb25nIGxvbmcpIGt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMSkpOwogCiAJCWlmIChvcC0+a3RfaXZhbDIudHY2NCkKLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJ0Mj0lbGxkICIsCisJCQlzZXFfcHJpbnRmKG0sICJ0Mj0lbGxkICIsCiAJCQkJCShsb25nIGxvbmcpIGt0aW1lX3RvX3VzKG9wLT5rdF9pdmFsMikpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIjIHNlbnQgJWxkXG4iLAotCQkJCW9wLT5mcmFtZXNfYWJzKTsKLQotCQlpZiAobGVuID4gUEFHRV9TSVpFIC0gMTAwKSB7Ci0JCQkvKiBtYXJrIG91dHB1dCBjdXQgb2ZmICovCi0JCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiKC4uKVxuIik7Ci0JCQlicmVhazsKLQkJfQorCQlzZXFfcHJpbnRmKG0sICIjIHNlbnQgJWxkXG4iLCBvcC0+ZnJhbWVzX2Ficyk7CiAJfQotCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0KLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJjbV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGJjbV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiY21fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBiY21fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKgogICogYmNtX2Nhbl90eCAtIHNlbmQgdGhlIChuZXh0KSBDQU4gZnJhbWUgdG8gdGhlIGFwcHJvcHJpYXRlIENBTiBpbnRlcmZhY2UKICAqICAgICAgICAgICAgICBvZiB0aGUgZ2l2ZW4gYmNtIHR4IG9wCkBAIC0xNTE1LDkgKzE1MDIsOSBAQAogCWlmIChwcm9jX2RpcikgewogCQkvKiB1bmlxdWUgc29ja2V0IGFkZHJlc3MgYXMgZmlsZW5hbWUgKi8KIAkJc3ByaW50Zihiby0+cHJvY25hbWUsICIlcCIsIHNvY2spOwotCQliby0+YmNtX3Byb2NfcmVhZCA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoYm8tPnByb2NuYW1lLCAwNjQ0LAotCQkJCQkJCSAgIHByb2NfZGlyLAotCQkJCQkJCSAgIGJjbV9yZWFkX3Byb2MsIHNrKTsKKwkJYm8tPmJjbV9wcm9jX3JlYWQgPSBwcm9jX2NyZWF0ZV9kYXRhKGJvLT5wcm9jbmFtZSwgMDY0NCwKKwkJCQkJCSAgICAgcHJvY19kaXIsCisJCQkJCQkgICAgICZiY21fcHJvY19mb3BzLCBzayk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvY2FuL3Byb2MuYyBiL25ldC9jYW4vcHJvYy5jCmluZGV4IDE0NjM2NTMuLjliOWFkMjkgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vcHJvYy5jCisrKyBiL25ldC9jYW4vcHJvYy5jCkBAIC0xOTYsOCArMTk2LDggQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBjYW5fcHJpbnRfcmN2bGlzdChjaGFyICpwYWdlLCBpbnQgbGVuLCBzdHJ1Y3QgaGxpc3RfaGVhZCAqcnhfbGlzdCwKLQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGNhbl9wcmludF9yY3ZsaXN0KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGhsaXN0X2hlYWQgKnJ4X2xpc3QsCisJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByZWNlaXZlciAqcjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKQEAgLTIwOCwxOTkgKzIwOCwxODggQEAKIAkJCSIgICAlLTVzICAlMDhYICAlMDh4ICAlMDh4ICAlMDh4ICAlOGxkICAlc1xuIiA6CiAJCQkiICAgJS01cyAgICAgJTAzWCAgICAlMDh4ICAlMDhseCAgJTA4bHggICU4bGQgICVzXG4iOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sIGZtdCwKLQkJCQlETkFNRShkZXYpLCByLT5jYW5faWQsIHItPm1hc2ssCisJCXNlcV9wcmludGYobSwgZm10LCBETkFNRShkZXYpLCByLT5jYW5faWQsIHItPm1hc2ssCiAJCQkJKHVuc2lnbmVkIGxvbmcpci0+ZnVuYywgKHVuc2lnbmVkIGxvbmcpci0+ZGF0YSwKIAkJCQlyLT5tYXRjaGVzLCByLT5pZGVudCk7Ci0KLQkJLyogZG9lcyBhIHR5cGljYWwgbGluZSBmaXQgaW50byB0aGUgY3VycmVudCBidWZmZXI/ICovCi0KLQkJLyogMTAwIEJ5dGVzIGJlZm9yZSBlbmQgb2YgYnVmZmVyICovCi0JCWlmIChsZW4gPiBQQUdFX1NJWkUgLSAxMDApIHsKLQkJCS8qIG1hcmsgb3V0cHV0IGN1dCBvZmYgKi8KLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJCSIgICAoLi4pXG4iKTsKLQkJCWJyZWFrOwotCQl9CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIGludCBjYW5fcHJpbnRfcmVjdl9iYW5uZXIoY2hhciAqcGFnZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGNhbl9wcmludF9yZWN2X2Jhbm5lcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJLyoKIAkgKiAgICAgICAgICAgICAgICAgIGNhbjEuICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCiAJICogICAgICAgICAgICAgICAgIC4uLi4uLi4gICAgICAgICAgMCAgdHAyMAogCSAqLwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiICBkZXZpY2UgICBjYW5faWQgICBjYW5fbWFzayAgZnVuY3Rpb24iCisJc2VxX3B1dHMobSwgIiAgZGV2aWNlICAgY2FuX2lkICAgY2FuX21hc2sgIGZ1bmN0aW9uIgogCQkJIiAgdXNlcmRhdGEgICBtYXRjaGVzICBpZGVudFxuIik7Ci0KLQlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW50IGNhbl9wcm9jX3JlYWRfc3RhdHMoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY2FuX3N0YXRzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CisJc2VxX3B1dGMobSwgJ1xuJyk7CisJc2VxX3ByaW50ZihtLCAiICU4bGQgdHJhbnNtaXR0ZWQgZnJhbWVzIChUWEYpXG4iLCBjYW5fc3RhdHMudHhfZnJhbWVzKTsKKwlzZXFfcHJpbnRmKG0sICIgJThsZCByZWNlaXZlZCBmcmFtZXMgKFJYRilcbiIsIGNhbl9zdGF0cy5yeF9mcmFtZXMpOworCXNlcV9wcmludGYobSwgIiAlOGxkIG1hdGNoZWQgZnJhbWVzIChSWE1GKVxuIiwgY2FuX3N0YXRzLm1hdGNoZXMpOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCSIgJThsZCB0cmFuc21pdHRlZCBmcmFtZXMgKFRYRilcbiIsCi0JCQljYW5fc3RhdHMudHhfZnJhbWVzKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJIiAlOGxkIHJlY2VpdmVkIGZyYW1lcyAoUlhGKVxuIiwgY2FuX3N0YXRzLnJ4X2ZyYW1lcyk7Ci0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCSIgJThsZCBtYXRjaGVkIGZyYW1lcyAoUlhNRilcbiIsIGNhbl9zdGF0cy5tYXRjaGVzKTsKLQotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJaWYgKGNhbl9zdGF0dGltZXIuZnVuY3Rpb24gPT0gY2FuX3N0YXRfdXBkYXRlKSB7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkICUlIHRvdGFsIG1hdGNoIHJhdGlvIChSWE1SKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgJSUgdG90YWwgbWF0Y2ggcmF0aW8gKFJYTVIpXG4iLAogCQkJCWNhbl9zdGF0cy50b3RhbF9yeF9tYXRjaF9yYXRpbyk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgZnJhbWVzL3MgdG90YWwgdHggcmF0ZSAoVFhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgdG90YWwgdHggcmF0ZSAoVFhSKVxuIiwKIAkJCQljYW5fc3RhdHMudG90YWxfdHhfcmF0ZSk7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkIGZyYW1lcy9zIHRvdGFsIHJ4IHJhdGUgKFJYUilcbiIsCisJCXNlcV9wcmludGYobSwgIiAlOGxkIGZyYW1lcy9zIHRvdGFsIHJ4IHJhdGUgKFJYUilcbiIsCiAJCQkJY2FuX3N0YXRzLnRvdGFsX3J4X3JhdGUpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCSIgJThsZCAlJSBjdXJyZW50IG1hdGNoIHJhdGlvIChDUlhNUilcbiIsCisJCXNlcV9wcmludGYobSwgIiAlOGxkICUlIGN1cnJlbnQgbWF0Y2ggcmF0aW8gKENSWE1SKVxuIiwKIAkJCQljYW5fc3RhdHMuY3VycmVudF9yeF9tYXRjaF9yYXRpbyk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgZnJhbWVzL3MgY3VycmVudCB0eCByYXRlIChDVFhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgY3VycmVudCB0eCByYXRlIChDVFhSKVxuIiwKIAkJCQljYW5fc3RhdHMuY3VycmVudF90eF9yYXRlKTsKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgZnJhbWVzL3MgY3VycmVudCByeCByYXRlIChDUlhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgY3VycmVudCByeCByYXRlIChDUlhSKVxuIiwKIAkJCQljYW5fc3RhdHMuY3VycmVudF9yeF9yYXRlKTsKIAotCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiXG4iKTsKKwkJc2VxX3B1dGMobSwgJ1xuJyk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgJSUgbWF4IG1hdGNoIHJhdGlvIChNUlhNUilcbiIsCisJCXNlcV9wcmludGYobSwgIiAlOGxkICUlIG1heCBtYXRjaCByYXRpbyAoTVJYTVIpXG4iLAogCQkJCWNhbl9zdGF0cy5tYXhfcnhfbWF0Y2hfcmF0aW8pOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkIGZyYW1lcy9zIG1heCB0eCByYXRlIChNVFhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgbWF4IHR4IHJhdGUgKE1UWFIpXG4iLAogCQkJCWNhbl9zdGF0cy5tYXhfdHhfcmF0ZSk7Ci0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIiAlOGxkIGZyYW1lcy9zIG1heCByeCByYXRlIChNUlhSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgZnJhbWVzL3MgbWF4IHJ4IHJhdGUgKE1SWFIpXG4iLAogCQkJCWNhbl9zdGF0cy5tYXhfcnhfcmF0ZSk7CiAKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7CisJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KIAotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiICU4bGQgY3VycmVudCByZWNlaXZlIGxpc3QgZW50cmllcyAoQ1JDVilcbiIsCisJc2VxX3ByaW50ZihtLCAiICU4bGQgY3VycmVudCByZWNlaXZlIGxpc3QgZW50cmllcyAoQ1JDVilcbiIsCiAJCQljYW5fcHN0YXRzLnJjdl9lbnRyaWVzKTsKLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJIiAlOGxkIG1heGltdW0gcmVjZWl2ZSBsaXN0IGVudHJpZXMgKE1SQ1YpXG4iLAorCXNlcV9wcmludGYobSwgIiAlOGxkIG1heGltdW0gcmVjZWl2ZSBsaXN0IGVudHJpZXMgKE1SQ1YpXG4iLAogCQkJY2FuX3BzdGF0cy5yY3ZfZW50cmllc19tYXgpOwogCiAJaWYgKGNhbl9wc3RhdHMuc3RhdHNfcmVzZXQpCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIlxuICU4bGQgc3RhdGlzdGljIHJlc2V0cyAoU1RSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiXG4gJThsZCBzdGF0aXN0aWMgcmVzZXRzIChTVFIpXG4iLAogCQkJCWNhbl9wc3RhdHMuc3RhdHNfcmVzZXQpOwogCiAJaWYgKGNhbl9wc3RhdHMudXNlcl9yZXNldCkKLQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkiICU4bGQgdXNlciBzdGF0aXN0aWMgcmVzZXRzIChVU1RSKVxuIiwKKwkJc2VxX3ByaW50ZihtLCAiICU4bGQgdXNlciBzdGF0aXN0aWMgcmVzZXRzIChVU1RSKVxuIiwKIAkJCQljYW5fcHN0YXRzLnVzZXJfcmVzZXQpOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0KLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhbl9wcm9jX3JlYWRfcmVzZXRfc3RhdHMoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBjYW5fc3RhdHNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBsZW4gPSAwOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjYW5fc3RhdHNfcHJvY19zaG93LCBOVUxMKTsKK30KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FuX3N0YXRzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FuX3N0YXRzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBjYW5fcmVzZXRfc3RhdHNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKIAl1c2VyX3Jlc2V0ID0gMTsKIAogCWlmIChjYW5fc3RhdHRpbWVyLmZ1bmN0aW9uID09IGNhbl9zdGF0X3VwZGF0ZSkgewotCQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLAotCQkJCSJTY2hlZHVsZWQgc3RhdGlzdGljIHJlc2V0ICMlbGQuXG4iLAorCQlzZXFfcHJpbnRmKG0sICJTY2hlZHVsZWQgc3RhdGlzdGljIHJlc2V0ICMlbGQuXG4iLAogCQkJCWNhbl9wc3RhdHMuc3RhdHNfcmVzZXQgKyAxKTsKIAogCX0gZWxzZSB7CiAJCWlmIChjYW5fc3RhdHMuamlmZmllc19pbml0ICE9IGppZmZpZXMpCiAJCQljYW5faW5pdF9zdGF0cygpOwogCi0JCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJIlBlcmZvcm1lZCBzdGF0aXN0aWMgcmVzZXQgIyVsZC5cbiIsCisJCXNlcV9wcmludGYobSwgIlBlcmZvcm1lZCBzdGF0aXN0aWMgcmVzZXQgIyVsZC5cbiIsCiAJCQkJY2FuX3BzdGF0cy5zdGF0c19yZXNldCk7CiAJfQotCi0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYW5fcHJvY19yZWFkX3ZlcnNpb24oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkJIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNhbl9yZXNldF9zdGF0c19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGxlbiA9IDA7Ci0KLQlsZW4gKz0gc25wcmludGYocGFnZSArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiJXNcbiIsCi0JCQlDQU5fVkVSU0lPTl9TVFJJTkcpOwotCSplb2YgPSAxOwotCXJldHVybiBsZW47CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhbl9yZXNldF9zdGF0c19wcm9jX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGNhbl9wcm9jX3JlYWRfcmN2bGlzdChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQkgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhbl9yZXNldF9zdGF0c19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNhbl9yZXNldF9zdGF0c19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgY2FuX3ZlcnNpb25fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgQ0FOX1ZFUlNJT05fU1RSSU5HKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYW5fdmVyc2lvbl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhbl92ZXJzaW9uX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhbl92ZXJzaW9uX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FuX3ZlcnNpb25fcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGNhbl9yY3ZsaXN0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJLyogZG91YmxlIGNhc3QgdG8gcHJldmVudCBHQ0Mgd2FybmluZyAqLwotCWludCBpZHggPSAoaW50KShsb25nKWRhdGE7Ci0JaW50IGxlbiA9IDA7CisJaW50IGlkeCA9IChpbnQpKGxvbmcpbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZGV2X3Jjdl9saXN0cyAqZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiXG5yZWNlaXZlIGxpc3QgJyVzJzpcbiIsIHJ4X2xpc3RfbmFtZVtpZHhdKTsKKwlzZXFfcHJpbnRmKG0sICJcbnJlY2VpdmUgbGlzdCAnJXMnOlxuIiwgcnhfbGlzdF9uYW1lW2lkeF0pOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkLCBuLCAmY2FuX3J4X2Rldl9saXN0LCBsaXN0KSB7CiAKIAkJaWYgKCFobGlzdF9lbXB0eSgmZC0+cnhbaWR4XSkpIHsKLQkJCWxlbiA9IGNhbl9wcmludF9yZWN2X2Jhbm5lcihwYWdlLCBsZW4pOwotCQkJbGVuID0gY2FuX3ByaW50X3Jjdmxpc3QocGFnZSwgbGVuLCAmZC0+cnhbaWR4XSwgZC0+ZGV2KTsKKwkJCWNhbl9wcmludF9yZWN2X2Jhbm5lcihtKTsKKwkJCWNhbl9wcmludF9yY3ZsaXN0KG0sICZkLT5yeFtpZHhdLCBkLT5kZXYpOwogCQl9IGVsc2UKLQkJCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkJCSIgICglczogbm8gZW50cnkpXG4iLCBETkFNRShkLT5kZXYpKTsKLQotCQkvKiBleGl0IG9uIGVuZCBvZiBidWZmZXI/ICovCi0JCWlmIChsZW4gPiBQQUdFX1NJWkUgLSAxMDApCi0JCQlicmVhazsKKwkJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGQtPmRldikpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOwotCi0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbjsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYW5fcHJvY19yZWFkX3Jjdmxpc3Rfc2ZmKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY2FuX3Jjdmxpc3RfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBsZW4gPSAwOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjYW5fcmN2bGlzdF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYW5fcmN2bGlzdF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNhbl9yY3ZsaXN0X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBjYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKIAlzdHJ1Y3QgZGV2X3Jjdl9saXN0cyAqZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAogCS8qIFJYX1NGRiAqLwotCWxlbiArPSBzbnByaW50ZihwYWdlICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCi0JCQkiXG5yZWNlaXZlIGxpc3QgJ3J4X3NmZic6XG4iKTsKKwlzZXFfcHV0cyhtLCAiXG5yZWNlaXZlIGxpc3QgJ3J4X3NmZic6XG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewpAQCAtNDEzLDQ2ICs0MDIsMzggQEAKIAkJCX0KIAogCQlpZiAoIWFsbF9lbXB0eSkgewotCQkJbGVuID0gY2FuX3ByaW50X3JlY3ZfYmFubmVyKHBhZ2UsIGxlbik7CisJCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgewotCQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkgJiYKLQkJCQkgICAgbGVuIDwgUEFHRV9TSVpFIC0gMTAwKQotCQkJCQlsZW4gPSBjYW5fcHJpbnRfcmN2bGlzdChwYWdlLCBsZW4sCi0JCQkJCQkJCSZkLT5yeF9zZmZbaV0sCi0JCQkJCQkJCWQtPmRldik7CisJCQkJaWYgKCFobGlzdF9lbXB0eSgmZC0+cnhfc2ZmW2ldKSkKKwkJCQkJY2FuX3ByaW50X3Jjdmxpc3QobSwgJmQtPnJ4X3NmZltpXSwKKwkJCQkJCQkgIGQtPmRldik7CiAJCQl9CiAJCX0gZWxzZQotCQkJbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKLQkJCQkJIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGQtPmRldikpOwotCi0JCS8qIGV4aXQgb24gZW5kIG9mIGJ1ZmZlcj8gKi8KLQkJaWYgKGxlbiA+IFBBR0VfU0laRSAtIDEwMCkKLQkJCWJyZWFrOworCQkJc2VxX3ByaW50ZihtLCAiICAoJXM6IG5vIGVudHJ5KVxuIiwgRE5BTUUoZC0+ZGV2KSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JbGVuICs9IHNucHJpbnRmKHBhZ2UgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIlxuIik7Ci0KLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuOworCXNlcV9wdXRjKG0sICdcbicpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNhbl9yY3ZsaXN0X3NmZl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhbl9yY3ZsaXN0X3NmZl9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYW5fcmN2bGlzdF9zZmZfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjYW5fcmN2bGlzdF9zZmZfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKgogICogcHJvYyB1dGlsaXR5IGZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNhbl9jcmVhdGVfcHJvY19yZWFkZW50cnkoY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJCQltb2RlX3QgbW9kZSwKLQkJCQkJCQlyZWFkX3Byb2NfdCAqcmVhZF9wcm9jLAotCQkJCQkJCXZvaWQgKmRhdGEpCi17Ci0JaWYgKGNhbl9kaXIpCi0JCXJldHVybiBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KG5hbWUsIG1vZGUsIGNhbl9kaXIsIHJlYWRfcHJvYywKLQkJCQkJICAgICAgZGF0YSk7Ci0JZWxzZQotCQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgY2FuX3JlbW92ZV9wcm9jX3JlYWRlbnRyeShjb25zdCBjaGFyICpuYW1lKQogewogCWlmIChjYW5fZGlyKQpAQCAtNDc0LDI0ICs0NTUsMjQgQEAKIAl9CiAKIAkvKiBvd24gcHJvY2ZzIGVudHJpZXMgZnJvbSB0aGUgQUZfQ0FOIGNvcmUgKi8KLQlwZGVfdmVyc2lvbiAgICAgPSBjYW5fY3JlYXRlX3Byb2NfcmVhZGVudHJ5KENBTl9QUk9DX1ZFUlNJT04sIDA2NDQsCi0JCQkJCWNhbl9wcm9jX3JlYWRfdmVyc2lvbiwgTlVMTCk7Ci0JcGRlX3N0YXRzICAgICAgID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19TVEFUUywgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9zdGF0cywgTlVMTCk7Ci0JcGRlX3Jlc2V0X3N0YXRzID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SRVNFVF9TVEFUUywgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yZXNldF9zdGF0cywgTlVMTCk7Ci0JcGRlX3Jjdmxpc3RfZXJyID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0VSUiwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0VSUik7Ci0JcGRlX3Jjdmxpc3RfYWxsID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0FMTCwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0FMTCk7Ci0JcGRlX3Jjdmxpc3RfZmlsID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0ZJTCwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0ZJTCk7Ci0JcGRlX3Jjdmxpc3RfaW52ID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0lOViwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0lOVik7Ci0JcGRlX3Jjdmxpc3RfZWZmID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX0VGRiwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0LCAodm9pZCAqKVJYX0VGRik7Ci0JcGRlX3Jjdmxpc3Rfc2ZmID0gY2FuX2NyZWF0ZV9wcm9jX3JlYWRlbnRyeShDQU5fUFJPQ19SQ1ZMSVNUX1NGRiwgMDY0NCwKLQkJCQkJY2FuX3Byb2NfcmVhZF9yY3ZsaXN0X3NmZiwgTlVMTCk7CisJcGRlX3ZlcnNpb24gICAgID0gcHJvY19jcmVhdGUoQ0FOX1BST0NfVkVSU0lPTiwgMDY0NCwgY2FuX2RpciwKKwkJCQkgICAgICAmY2FuX3ZlcnNpb25fcHJvY19mb3BzKTsKKwlwZGVfc3RhdHMgICAgICAgPSBwcm9jX2NyZWF0ZShDQU5fUFJPQ19TVEFUUywgMDY0NCwgY2FuX2RpciwKKwkJCQkgICAgICAmY2FuX3N0YXRzX3Byb2NfZm9wcyk7CisJcGRlX3Jlc2V0X3N0YXRzID0gcHJvY19jcmVhdGUoQ0FOX1BST0NfUkVTRVRfU1RBVFMsIDA2NDQsIGNhbl9kaXIsCisJCQkJICAgICAgJmNhbl9yZXNldF9zdGF0c19wcm9jX2ZvcHMpOworCXBkZV9yY3ZsaXN0X2VyciA9IHByb2NfY3JlYXRlX2RhdGEoQ0FOX1BST0NfUkNWTElTVF9FUlIsIDA2NDQsIGNhbl9kaXIsCisJCQkJCSAgICZjYW5fcmN2bGlzdF9wcm9jX2ZvcHMsICh2b2lkICopUlhfRVJSKTsKKwlwZGVfcmN2bGlzdF9hbGwgPSBwcm9jX2NyZWF0ZV9kYXRhKENBTl9QUk9DX1JDVkxJU1RfQUxMLCAwNjQ0LCBjYW5fZGlyLAorCQkJCQkgICAmY2FuX3Jjdmxpc3RfcHJvY19mb3BzLCAodm9pZCAqKVJYX0FMTCk7CisJcGRlX3Jjdmxpc3RfZmlsID0gcHJvY19jcmVhdGVfZGF0YShDQU5fUFJPQ19SQ1ZMSVNUX0ZJTCwgMDY0NCwgY2FuX2RpciwKKwkJCQkJICAgJmNhbl9yY3ZsaXN0X3Byb2NfZm9wcywgKHZvaWQgKilSWF9GSUwpOworCXBkZV9yY3ZsaXN0X2ludiA9IHByb2NfY3JlYXRlX2RhdGEoQ0FOX1BST0NfUkNWTElTVF9JTlYsIDA2NDQsIGNhbl9kaXIsCisJCQkJCSAgICZjYW5fcmN2bGlzdF9wcm9jX2ZvcHMsICh2b2lkICopUlhfSU5WKTsKKwlwZGVfcmN2bGlzdF9lZmYgPSBwcm9jX2NyZWF0ZV9kYXRhKENBTl9QUk9DX1JDVkxJU1RfRUZGLCAwNjQ0LCBjYW5fZGlyLAorCQkJCQkgICAmY2FuX3Jjdmxpc3RfcHJvY19mb3BzLCAodm9pZCAqKVJYX0VGRik7CisJcGRlX3Jjdmxpc3Rfc2ZmID0gcHJvY19jcmVhdGUoQ0FOX1BST0NfUkNWTElTVF9TRkYsIDA2NDQsIGNhbl9kaXIsCisJCQkJICAgICAgJmNhbl9yY3ZsaXN0X3NmZl9wcm9jX2ZvcHMpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2NvbXBhdC5jIGIvbmV0L2NvbXBhdC5jCmluZGV4IDhkNzM5MDUuLjEyNzI4YjEgMTAwNjQ0Ci0tLSBhL25ldC9jb21wYXQuYworKysgYi9uZXQvY29tcGF0LmMKQEAgLTc0Myw2ICs3NDMsMTggQEAKIAlyZXR1cm4gc3lzX3JlY3Ztc2coZmQsIChzdHJ1Y3QgbXNnaGRyIF9fdXNlciAqKW1zZywgZmxhZ3MgfCBNU0dfQ01TR19DT01QQVQpOwogfQogCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19yZWN2KGludCBmZCwgdm9pZCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0dXJuIHN5c19yZWN2KGZkLCBidWYsIGxlbiwgZmxhZ3MgfCBNU0dfQ01TR19DT01QQVQpOworfQorCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19yZWN2ZnJvbShpbnQgZmQsIHZvaWQgX191c2VyICpidWYsIHNpemVfdCBsZW4sCisJCQkJICAgIHVuc2lnbmVkIGZsYWdzLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICphZGRyLAorCQkJCSAgICBpbnQgX191c2VyICphZGRybGVuKQoreworCXJldHVybiBzeXNfcmVjdmZyb20oZmQsIGJ1ZiwgbGVuLCBmbGFncyB8IE1TR19DTVNHX0NPTVBBVCwgYWRkciwgYWRkcmxlbik7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NvY2tldGNhbGwoaW50IGNhbGwsIHUzMiBfX3VzZXIgKmFyZ3MpCiB7CiAJaW50IHJldDsKQEAgLTc4OCwxMCArODAwLDExIEBACiAJCXJldCA9IHN5c19zZW5kdG8oYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdLCBhWzNdLCBjb21wYXRfcHRyKGFbNF0pLCBhWzVdKTsKIAkJYnJlYWs7CiAJY2FzZSBTWVNfUkVDVjoKLQkJcmV0ID0gc3lzX3JlY3YoYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdLCBhWzNdKTsKKwkJcmV0ID0gY29tcGF0X3N5c19yZWN2KGEwLCBjb21wYXRfcHRyKGExKSwgYVsyXSwgYVszXSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1JFQ1ZGUk9NOgotCQlyZXQgPSBzeXNfcmVjdmZyb20oYTAsIGNvbXBhdF9wdHIoYTEpLCBhWzJdLCBhWzNdLCBjb21wYXRfcHRyKGFbNF0pLCBjb21wYXRfcHRyKGFbNV0pKTsKKwkJcmV0ID0gY29tcGF0X3N5c19yZWN2ZnJvbShhMCwgY29tcGF0X3B0cihhMSksIGFbMl0sIGFbM10sCisJCQkJCSAgY29tcGF0X3B0cihhWzRdKSwgY29tcGF0X3B0cihhWzVdKSk7CiAJCWJyZWFrOwogCWNhc2UgU1lTX1NIVVRET1dOOgogCQlyZXQgPSBzeXNfc2h1dGRvd24oYTAsYTEpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggYjBmZTY5Mi4uMWM2Y2YzYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgorI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9za2IuaD4KIAogLyoKICAqCUlzIGEgc29ja2V0ICdjb25uZWN0aW9uIG9yaWVudGVkJyA/CkBAIC0yODQsNiArMjg1LDggQEAKIAlpbnQgaSwgY29weSA9IHN0YXJ0IC0gb2Zmc2V0OwogCXN0cnVjdCBza19idWZmICpmcmFnX2l0ZXI7CiAKKwl0cmFjZV9za2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIGxlbik7CisKIAkvKiBDb3B5IGhlYWRlci4gKi8KIAlpZiAoY29weSA+IDApIHsKIAkJaWYgKGNvcHkgPiBsZW4pCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDI3OGQ0ODkuLjg0OTQ1NDcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xOTEsNyArMTkxLDYgQEAKICAqIHNlbWFwaG9yZSBoZWxkLgogICovCiBERUZJTkVfUldMT0NLKGRldl9iYXNlX2xvY2spOwotCiBFWFBPUlRfU1lNQk9MKGRldl9iYXNlX2xvY2spOwogCiAjZGVmaW5lIE5FVERFVl9IQVNIQklUUwk4CkBAIC0yNDgsNiArMjQ3LDcgQEAKICAqLwogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc29mdG5ldF9kYXRhLCBzb2Z0bmV0X2RhdGEpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHNvZnRuZXRfZGF0YSk7CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogLyoKQEAgLTI2OSwxMCArMjY5LDEwIEBACiAJIEFSUEhSRF9JUkRBLCBBUlBIUkRfRkNQUCwgQVJQSFJEX0ZDQUwsIEFSUEhSRF9GQ1BMLAogCSBBUlBIUkRfRkNGQUJSSUMsIEFSUEhSRF9JRUVFODAyX1RSLCBBUlBIUkRfSUVFRTgwMjExLAogCSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNLCBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQLCBBUlBIUkRfUEhPTkVULAotCSBBUlBIUkRfUEhPTkVUX1BJUEUsIEFSUEhSRF9JRUVFODAyMTU0LCBBUlBIUkRfSUVFRTgwMjE1NF9QSFksCisJIEFSUEhSRF9QSE9ORVRfUElQRSwgQVJQSFJEX0lFRUU4MDIxNTQsCiAJIEFSUEhSRF9WT0lELCBBUlBIUkRfTk9ORX07CiAKLXN0YXRpYyBjb25zdCBjaGFyICpuZXRkZXZfbG9ja19uYW1lW10gPQorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5ldGRldl9sb2NrX25hbWVbXSA9CiAJeyJfeG1pdF9ORVRST00iLCAiX3htaXRfRVRIRVIiLCAiX3htaXRfRUVUSEVSIiwgIl94bWl0X0FYMjUiLAogCSAiX3htaXRfUFJPTkVUIiwgIl94bWl0X0NIQU9TIiwgIl94bWl0X0lFRUU4MDIiLCAiX3htaXRfQVJDTkVUIiwKIAkgIl94bWl0X0FQUExFVExLIiwgIl94bWl0X0RMQ0kiLCAiX3htaXRfQVRNIiwgIl94bWl0X01FVFJJQ09NIiwKQEAgLTI4Nyw3ICsyODcsNyBAQAogCSAiX3htaXRfSVJEQSIsICJfeG1pdF9GQ1BQIiwgIl94bWl0X0ZDQUwiLCAiX3htaXRfRkNQTCIsCiAJICJfeG1pdF9GQ0ZBQlJJQyIsICJfeG1pdF9JRUVFODAyX1RSIiwgIl94bWl0X0lFRUU4MDIxMSIsCiAJICJfeG1pdF9JRUVFODAyMTFfUFJJU00iLCAiX3htaXRfSUVFRTgwMjExX1JBRElPVEFQIiwgIl94bWl0X1BIT05FVCIsCi0JICJfeG1pdF9QSE9ORVRfUElQRSIsICJfeG1pdF9JRUVFODAyMTU0IiwgIl94bWl0X0lFRUU4MDIxNTRfUEhZIiwKKwkgIl94bWl0X1BIT05FVF9QSVBFIiwgIl94bWl0X0lFRUU4MDIxNTQiLAogCSAiX3htaXRfVk9JRCIsICJfeG1pdF9OT05FIn07CiAKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmV0ZGV2X3htaXRfbG9ja19rZXlbQVJSQVlfU0laRShuZXRkZXZfbG9ja190eXBlKV07CkBAIC0zODEsNiArMzgxLDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnB0eXBlX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChkZXZfYWRkX3BhY2spOwogCiAvKioKICAqCV9fZGV2X3JlbW92ZV9wYWNrCSAtIHJlbW92ZSBwYWNrZXQgaGFuZGxlcgpAQCAtNDE4LDYgKzQxOSw4IEBACiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnB0eXBlX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChfX2Rldl9yZW1vdmVfcGFjayk7CisKIC8qKgogICoJZGV2X3JlbW92ZV9wYWNrCSAtIHJlbW92ZSBwYWNrZXQgaGFuZGxlcgogICoJQHB0OiBwYWNrZXQgdHlwZSBkZWNsYXJhdGlvbgpAQCAtNDM2LDYgKzQzOSw3IEBACiAKIAlzeW5jaHJvbml6ZV9uZXQoKTsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3JlbW92ZV9wYWNrKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCkBAIC00OTksNiArNTAzLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9ib290X3NldHVwX2NoZWNrKTsKIAogCiAvKioKQEAgLTU5MSw2ICs1OTYsNyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woX19kZXZfZ2V0X2J5X25hbWUpOwogCiAvKioKICAqCWRldl9nZXRfYnlfbmFtZQkJLSBmaW5kIGEgZGV2aWNlIGJ5IGl0cyBuYW1lCkBAIC02MTUsNiArNjIxLDcgQEAKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmV0dXJuIGRldjsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X2dldF9ieV9uYW1lKTsKIAogLyoqCiAgKglfX2Rldl9nZXRfYnlfaW5kZXggLSBmaW5kIGEgZGV2aWNlIGJ5IGl0cyBpZmluZGV4CkBAIC02NDAsNiArNjQ3LDcgQEAKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9pbmRleCk7CiAKIAogLyoqCkBAIC02NjQsNiArNjcyLDcgQEAKIAlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJcmV0dXJuIGRldjsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X2dldF9ieV9pbmRleCk7CiAKIC8qKgogICoJZGV2X2dldGJ5aHdhZGRyIC0gZmluZCBhIGRldmljZSBieSBpdHMgaGFyZHdhcmUgYWRkcmVzcwpAQCAtNjkzLDcgKzcwMiw2IEBACiAKIAlyZXR1cm4gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTChkZXZfZ2V0Ynlod2FkZHIpOwogCiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0Zmlyc3RieWh3dHlwZShzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUpCkBAIC03MDcsNyArNzE1LDYgQEAKIAogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MKF9fZGV2X2dldGZpcnN0Ynlod3R5cGUpOwogCiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGZpcnN0Ynlod3R5cGUoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCB0eXBlKQpAQCAtNzIxLDcgKzcyOCw2IEBACiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZGV2OwogfQotCiBFWFBPUlRfU1lNQk9MKGRldl9nZXRmaXJzdGJ5aHd0eXBlKTsKIAogLyoqCkBAIC03MzYsNyArNzQyLDggQEAKICAqCWRldl9wdXQgdG8gaW5kaWNhdGUgdGhleSBoYXZlIGZpbmlzaGVkIHdpdGggaXQuCiAgKi8KIAotc3RydWN0IG5ldF9kZXZpY2UgKiBkZXZfZ2V0X2J5X2ZsYWdzKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgaWZfZmxhZ3MsIHVuc2lnbmVkIHNob3J0IG1hc2spCitzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9mbGFncyhzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IGlmX2ZsYWdzLAorCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBtYXNrKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICpyZXQ7CiAKQEAgLTc1Miw2ICs3NTksNyBAQAogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2J5X2ZsYWdzKTsKIAogLyoqCiAgKglkZXZfdmFsaWRfbmFtZSAtIGNoZWNrIGlmIG5hbWUgaXMgb2theSBmb3IgbmV0d29yayBkZXZpY2UKQEAgLTc3Nyw2ICs3ODUsNyBAQAogCX0KIAlyZXR1cm4gMTsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3ZhbGlkX25hbWUpOwogCiAvKioKICAqCV9fZGV2X2FsbG9jX25hbWUgLSBhbGxvY2F0ZSBhIG5hbWUgZm9yIGEgZGV2aWNlCkBAIC04NzAsNiArODc5LDcgQEAKIAkJc3RybGNweShkZXYtPm5hbWUsIGJ1ZiwgSUZOQU1TSVopOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9hbGxvY19uYW1lKTsKIAogCiAvKioKQEAgLTkwNiw4ICs5MTYsNyBAQAogCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIG5ld25hbWUpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JfQotCWVsc2UgaWYgKF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbmV3bmFtZSkpCisJfSBlbHNlIGlmIChfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5ld25hbWUpKQogCQlyZXR1cm4gLUVFWElTVDsKIAllbHNlCiAJCXN0cmxjcHkoZGV2LT5uYW1lLCBuZXduYW1lLCBJRk5BTVNJWik7CkBAIC05NzAsNyArOTc5LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2LT5pZmFsaWFzID0ga3JlYWxsb2MoZGV2LT5pZmFsaWFzLCBsZW4rMSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5pZmFsaWFzID0ga3JlYWxsb2MoZGV2LT5pZmFsaWFzLCBsZW4gKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+aWZhbGlhcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEwMDYsNiArMTAxNSw3IEBACiAJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCAwKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9zdGF0ZV9jaGFuZ2UpOwogCiB2b2lkIG5ldGRldl9ib25kaW5nX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTAzNCw2ICsxMDQ0LDcgQEAKIAlpZiAoIWRldiAmJiBjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXF1ZXN0X21vZHVsZSgiJXMiLCBuYW1lKTsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X2xvYWQpOwogCiAvKioKICAqCWRldl9vcGVuCS0gcHJlcGFyZSBhbiBpbnRlcmZhY2UgZm9yIHVzZS4KQEAgLTExMTgsNiArMTEyOSw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChkZXZfb3Blbik7CiAKIC8qKgogICoJZGV2X2Nsb3NlIC0gc2h1dGRvd24gYW4gaW50ZXJmYWNlLgpAQCAtMTE4NCw2ICsxMTk2LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChkZXZfY2xvc2UpOwogCiAKIC8qKgpAQCAtMTI3OSw2ICsxMjkyLDcgQEAKIAlyYXdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmV0ZGV2X2NoYWluLCBuYik7CiAJZ290byB1bmxvY2s7CiB9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcik7CiAKIC8qKgogICoJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgbmV0d29yayBub3RpZmllciBibG9jawpAQCAtMTI5OSw2ICsxMzEzLDcgQEAKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKTsKIAogLyoqCiAgKgljYWxsX25ldGRldmljZV9ub3RpZmllcnMgLSBjYWxsIGFsbCBuZXR3b3JrIG5vdGlmaWVyIGJsb2NrcwpAQCAtMTMyMSwxMSArMTMzNiwxMyBAQAogewogCWF0b21pY19pbmMoJm5ldHN0YW1wX25lZWRlZCk7CiB9CitFWFBPUlRfU1lNQk9MKG5ldF9lbmFibGVfdGltZXN0YW1wKTsKIAogdm9pZCBuZXRfZGlzYWJsZV90aW1lc3RhbXAodm9pZCkKIHsKIAlhdG9taWNfZGVjKCZuZXRzdGFtcF9uZWVkZWQpOwogfQorRVhQT1JUX1NZTUJPTChuZXRfZGlzYWJsZV90aW1lc3RhbXApOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtMTM1OSw3ICsxMzc2LDcgQEAKIAkJaWYgKChwdHlwZS0+ZGV2ID09IGRldiB8fCAhcHR5cGUtPmRldikgJiYKIAkJICAgIChwdHlwZS0+YWZfcGFja2V0X3ByaXYgPT0gTlVMTCB8fAogCQkgICAgIChzdHJ1Y3Qgc29jayAqKXB0eXBlLT5hZl9wYWNrZXRfcHJpdiAhPSBza2ItPnNrKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjI9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmICghc2tiMikKIAkJCQlicmVhazsKIApAQCAtMTUyNyw2ICsxNTQ0LDcgQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChza2JfY2hlY2tzdW1faGVscCk7CiAKIC8qKgogICoJc2tiX2dzb19zZWdtZW50IC0gUGVyZm9ybSBzZWdtZW50YXRpb24gb24gc2tiLgpAQCAtMTU4OSw3ICsxNjA3LDYgQEAKIAogCXJldHVybiBzZWdzOwogfQotCiBFWFBPUlRfU1lNQk9MKHNrYl9nc29fc2VnbWVudCk7CiAKIC8qIFRha2UgYWN0aW9uIHdoZW4gaGFyZHdhcmUgcmVjZXB0aW9uIGNoZWNrc3VtIGVycm9ycyBhcmUgZGV0ZWN0ZWQuICovCkBAIC0xNzA0LDcgKzE3MjEsNyBAQAogCQkJc2tiX2RzdF9kcm9wKHNrYik7CiAKIAkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKLQkJaWYgKHJjID09IDApCisJCWlmIChyYyA9PSBORVRERVZfVFhfT0spCiAJCQl0eHFfdHJhbnNfdXBkYXRlKHR4cSk7CiAJCS8qCiAJCSAqIFRPRE86IGlmIHNrYl9vcnBoYW4oKSB3YXMgY2FsbGVkIGJ5CkBAIC0xNzMwLDcgKzE3NDcsNyBAQAogCQlza2ItPm5leHQgPSBuc2tiLT5uZXh0OwogCQluc2tiLT5uZXh0ID0gTlVMTDsKIAkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KG5za2IsIGRldik7Ci0JCWlmICh1bmxpa2VseShyYykpIHsKKwkJaWYgKHVubGlrZWx5KHJjICE9IE5FVERFVl9UWF9PSykpIHsKIAkJCW5za2ItPm5leHQgPSBza2ItPm5leHQ7CiAJCQlza2ItPm5leHQgPSBuc2tiOwogCQkJcmV0dXJuIHJjOwpAQCAtMTc0NCw3ICsxNzYxLDcgQEAKIAogb3V0X2tmcmVlX3NrYjoKIAlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgdTMyIHNrYl90eF9oYXNocm5kOwpAQCAtMTc1NSw3ICsxNzcyLDcgQEAKIAogCWlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkgewogCQloYXNoID0gc2tiX2dldF9yeF9xdWV1ZShza2IpOwotCQl3aGlsZSAodW5saWtlbHkgKGhhc2ggPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpKQorCQl3aGlsZSAodW5saWtlbHkoaGFzaCA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcykpCiAJCQloYXNoIC09IGRldi0+cmVhbF9udW1fdHhfcXVldWVzOwogCQlyZXR1cm4gaGFzaDsKIAl9CkBAIC0xNzg2LDYgKzE4MDMsNDAgQEAKIAlyZXR1cm4gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHF1ZXVlX2luZGV4KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgX19kZXZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEpCit7CisJc3BpbmxvY2tfdCAqcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKKwlpbnQgcmM7CisKKwlzcGluX2xvY2socm9vdF9sb2NrKTsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoX19RRElTQ19TVEFURV9ERUFDVElWQVRFRCwgJnEtPnN0YXRlKSkpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJjID0gTkVUX1hNSVRfRFJPUDsKKwl9IGVsc2UgaWYgKChxLT5mbGFncyAmIFRDUV9GX0NBTl9CWVBBU1MpICYmICFxZGlzY19xbGVuKHEpICYmCisJCSAgICF0ZXN0X2FuZF9zZXRfYml0KF9fUURJU0NfU1RBVEVfUlVOTklORywgJnEtPnN0YXRlKSkgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgd29yay1jb25zZXJ2aW5nIHF1ZXVlOyB0aGVyZSBhcmUgbm8gb2xkIHNrYnMKKwkJICogd2FpdGluZyB0byBiZSBzZW50IG91dDsgYW5kIHRoZSBxZGlzYyBpcyBub3QgcnVubmluZyAtCisJCSAqIHhtaXQgdGhlIHNrYiBkaXJlY3RseS4KKwkJICovCisJCV9fcWRpc2NfdXBkYXRlX2JzdGF0cyhxLCBza2ItPmxlbik7CisJCWlmIChzY2hfZGlyZWN0X3htaXQoc2tiLCBxLCBkZXYsIHR4cSwgcm9vdF9sb2NrKSkKKwkJCV9fcWRpc2NfcnVuKHEpOworCQllbHNlCisJCQljbGVhcl9iaXQoX19RRElTQ19TVEFURV9SVU5OSU5HLCAmcS0+c3RhdGUpOworCisJCXJjID0gTkVUX1hNSVRfU1VDQ0VTUzsKKwl9IGVsc2UgeworCQlyYyA9IHFkaXNjX2VucXVldWVfcm9vdChza2IsIHEpOworCQlxZGlzY19ydW4ocSk7CisJfQorCXNwaW5fdW5sb2NrKHJvb3RfbG9jayk7CisKKwlyZXR1cm4gcmM7Cit9CisKIC8qKgogICoJZGV2X3F1ZXVlX3htaXQgLSB0cmFuc21pdCBhIGJ1ZmZlcgogICoJQHNrYjogYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0xODU2LDIyICsxOTA3LDEwIEBACiAJcSA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAotCXNrYi0+dGNfdmVyZCA9IFNFVF9UQ19BVChza2ItPnRjX3ZlcmQsQVRfRUdSRVNTKTsKKwlza2ItPnRjX3ZlcmQgPSBTRVRfVENfQVQoc2tiLT50Y192ZXJkLCBBVF9FR1JFU1MpOwogI2VuZGlmCiAJaWYgKHEtPmVucXVldWUpIHsKLQkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKLQotCQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQotCQlpZiAodW5saWtlbHkodGVzdF9iaXQoX19RRElTQ19TVEFURV9ERUFDVElWQVRFRCwgJnEtPnN0YXRlKSkpIHsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmMgPSBORVRfWE1JVF9EUk9QOwotCQl9IGVsc2UgewotCQkJcmMgPSBxZGlzY19lbnF1ZXVlX3Jvb3Qoc2tiLCBxKTsKLQkJCXFkaXNjX3J1bihxKTsKLQkJfQotCQlzcGluX3VubG9jayhyb290X2xvY2spOwotCisJCXJjID0gX19kZXZfeG1pdF9za2Ioc2tiLCBxLCBkZXYsIHR4cSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTg5NSw3ICsxOTM0LDcgQEAKIAkJCUhBUkRfVFhfTE9DSyhkZXYsIHR4cSwgY3B1KTsKIAogCQkJaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpIHsKLQkJCQlyYyA9IDA7CisJCQkJcmMgPSBORVRfWE1JVF9TVUNDRVNTOwogCQkJCWlmICghZGV2X2hhcmRfc3RhcnRfeG1pdChza2IsIGRldiwgdHhxKSkgewogCQkJCQlIQVJEX1RYX1VOTE9DSyhkZXYsIHR4cSk7CiAJCQkJCWdvdG8gb3V0OwpAQCAtMTkyNCw2ICsxOTYzLDcgQEAKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9xdWV1ZV94bWl0KTsKIAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xOTkwLDYgKzIwMzAsNyBAQAogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBORVRfUlhfRFJPUDsKIH0KK0VYUE9SVF9TWU1CT0wobmV0aWZfcngpOwogCiBpbnQgbmV0aWZfcnhfbmkoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTIwMDMsNyArMjA0NCw2IEBACiAKIAlyZXR1cm4gZXJyOwogfQotCiBFWFBPUlRfU1lNQk9MKG5ldGlmX3J4X25pKTsKIAogc3RhdGljIHZvaWQgbmV0X3R4X2FjdGlvbihzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgpCkBAIC0yMDc2LDcgKzIxMTYsNyBAQAogLyogVGhpcyBob29rIGlzIGRlZmluZWQgaGVyZSBmb3IgQVRNIExBTkUgKi8KIGludCAoKmJyX2ZkYl90ZXN0X2FkZHJfaG9vaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgdW5zaWduZWQgY2hhciAqYWRkcikgX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0woYnJfZmRiX3Rlc3RfYWRkcl9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGJyX2ZkYl90ZXN0X2FkZHJfaG9vayk7CiAjZW5kaWYKIAogLyoKQEAgLTIwODUsNyArMjEyNSw3IEBACiAgKi8KIHN0cnVjdCBza19idWZmICooKmJyX2hhbmRsZV9mcmFtZV9ob29rKShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChicl9oYW5kbGVfZnJhbWVfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChicl9oYW5kbGVfZnJhbWVfaG9vayk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmhhbmRsZV9icmlkZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqKnB0X3ByZXYsIGludCAqcmV0LApAQCAtMjMzNiw2ICsyMzc2LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChuZXRpZl9yZWNlaXZlX3NrYik7CiAKIC8qIE5ldHdvcmsgZGV2aWNlIGlzIGdvaW5nIGF3YXksIGZsdXNoIGFueSBwYWNrZXRzIHN0aWxsIHBlbmRpbmcgICovCiBzdGF0aWMgdm9pZCBmbHVzaF9iYWNrbG9nKHZvaWQgKmFyZykKQEAgLTI4NTIsNyArMjg5Myw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBnaWZjb25mX2Z1bmNfdCAqIGdpZmNvbmZfbGlzdCBbTlBST1RPXTsKK3N0YXRpYyBnaWZjb25mX2Z1bmNfdCAqZ2lmY29uZl9saXN0W05QUk9UT107CiAKIC8qKgogICoJcmVnaXN0ZXJfZ2lmY29uZgktCXJlZ2lzdGVyIGEgU0lPQ0dJRiBoYW5kbGVyCkBAIC0yODYzLDEzICsyOTA0LDE0IEBACiAgKgl0aGF0IGlzIHBhc3NlZCBtdXN0IG5vdCBiZSBmcmVlZCBvciByZXVzZWQgdW50aWwgaXQgaGFzIGJlZW4gcmVwbGFjZWQKICAqCWJ5IGFub3RoZXIgaGFuZGxlci4KICAqLwotaW50IHJlZ2lzdGVyX2dpZmNvbmYodW5zaWduZWQgaW50IGZhbWlseSwgZ2lmY29uZl9mdW5jX3QgKiBnaWZjb25mKQoraW50IHJlZ2lzdGVyX2dpZmNvbmYodW5zaWduZWQgaW50IGZhbWlseSwgZ2lmY29uZl9mdW5jX3QgKmdpZmNvbmYpCiB7CiAJaWYgKGZhbWlseSA+PSBOUFJPVE8pCiAJCXJldHVybiAtRUlOVkFMOwogCWdpZmNvbmZfbGlzdFtmYW1pbHldID0gZ2lmY29uZjsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZ2lmY29uZik7CiAKIAogLyoKQEAgLTMwODAsNyArMzEyMiw3IEBACiAJc2VxX3ByaW50ZihzZXEsICIlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKIAkJICAgcy0+dG90YWwsIHMtPmRyb3BwZWQsIHMtPnRpbWVfc3F1ZWV6ZSwgMCwKIAkJICAgMCwgMCwgMCwgMCwgLyogd2FzIGZhc3Ryb3V0ZSAqLwotCQkgICBzLT5jcHVfY29sbGlzaW9uICk7CisJCSAgIHMtPmNwdV9jb2xsaXNpb24pOwogCXJldHVybiAwOwogfQogCkBAIC0zMzE2LDYgKzMzNTgsNyBAQAogCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgc2xhdmUsIElGRl9TTEFWRSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9zZXRfbWFzdGVyKTsKIAogc3RhdGljIHZvaWQgZGV2X2NoYW5nZV9yeF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZmxhZ3MpCiB7CkBAIC0zMzk0LDYgKzM0MzcsNyBAQAogCQlkZXZfc2V0X3J4X21vZGUoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChkZXZfc2V0X3Byb21pc2N1aXR5KTsKIAogLyoqCiAgKglkZXZfc2V0X2FsbG11bHRpCS0gdXBkYXRlIGFsbG11bHRpIGNvdW50IG9uIGEgZGV2aWNlCkBAIC0zNDM3LDYgKzM0ODEsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3NldF9hbGxtdWx0aSk7CiAKIC8qCiAgKglVcGxvYWQgdW5pY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3MgbGlzdHMgdG8gZGV2aWNlIGFuZApAQCAtMzkyNyw2ICszOTcyLDcgQEAKIAl9CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2FkZHJfc3luYyk7CiAKIHZvaWQgX19kZXZfYWRkcl91bnN5bmMoc3RydWN0IGRldl9hZGRyX2xpc3QgKip0bywgaW50ICp0b19jb3VudCwKIAkJICAgICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICoqZnJvbSwgaW50ICpmcm9tX2NvdW50KQpAQCAtMzk0Niw2ICszOTkyLDcgQEAKIAkJZGEgPSBuZXh0OwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2FkZHJfdW5zeW5jKTsKIAogLyoqCiAgKglkZXZfdW5pY2FzdF9zeW5jIC0gU3luY2hyb25pemUgZGV2aWNlJ3MgdW5pY2FzdCBsaXN0IHRvIGFub3RoZXIgZGV2aWNlCkBAIC00MDY0LDYgKzQxMTEsNyBAQAogCiAJcmV0dXJuIGZsYWdzOwogfQorRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2ZsYWdzKTsKIAogLyoqCiAgKglkZXZfY2hhbmdlX2ZsYWdzIC0gY2hhbmdlIGRldmljZSBzZXR0aW5ncwpAQCAtNDExNCwxMiArNDE2MiwxMyBAQAogCX0KIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQICYmCi0JICAgICgob2xkX2ZsYWdzIF4gZGV2LT5mbGFncykgJn4gKElGRl9VUCB8IElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJIHwKKwkgICAgKChvbGRfZmxhZ3MgXiBkZXYtPmZsYWdzKSAmIH4oSUZGX1VQIHwgSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkgfAogCQkJCQkgIElGRl9WT0xBVElMRSkpKQogCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRSwgZGV2KTsKIAogCWlmICgoZmxhZ3MgXiBkZXYtPmdmbGFncykgJiBJRkZfUFJPTUlTQykgewotCQlpbnQgaW5jID0gKGZsYWdzICYgSUZGX1BST01JU0MpID8gKzEgOiAtMTsKKwkJaW50IGluYyA9IChmbGFncyAmIElGRl9QUk9NSVNDKSA/IDEgOiAtMTsKKwogCQlkZXYtPmdmbGFncyBePSBJRkZfUFJPTUlTQzsKIAkJZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIGluYyk7CiAJfQpAQCAtNDEyOSw3ICs0MTc4LDggQEAKIAkgICBJRkZfQUxMTVVMVEkgaXMgcmVxdWVzdGVkIG5vdCBhc2tpbmcgdXMgYW5kIG5vdCByZXBvcnRpbmcuCiAJICovCiAJaWYgKChmbGFncyBeIGRldi0+Z2ZsYWdzKSAmIElGRl9BTExNVUxUSSkgewotCQlpbnQgaW5jID0gKGZsYWdzICYgSUZGX0FMTE1VTFRJKSA/ICsxIDogLTE7CisJCWludCBpbmMgPSAoZmxhZ3MgJiBJRkZfQUxMTVVMVEkpID8gMSA6IC0xOworCiAJCWRldi0+Z2ZsYWdzIF49IElGRl9BTExNVUxUSTsKIAkJZGV2X3NldF9hbGxtdWx0aShkZXYsIGluYyk7CiAJfQpAQCAtNDE0MSw2ICs0MTkxLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9jaGFuZ2VfZmxhZ3MpOwogCiAvKioKICAqCWRldl9zZXRfbXR1IC0gQ2hhbmdlIG1heGltdW0gdHJhbnNmZXIgdW5pdApAQCAtNDE3NCw2ICs0MjI1LDcgQEAKIAkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VNVFUsIGRldik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woZGV2X3NldF9tdHUpOwogCiAvKioKICAqCWRldl9zZXRfbWFjX2FkZHJlc3MgLSBDaGFuZ2UgTWVkaWEgQWNjZXNzIENvbnRyb2wgQWRkcmVzcwpAQCAtNDE5OCw2ICs0MjUwLDcgQEAKIAkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9DSEFOR0VBRERSLCBkZXYpOwogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKGRldl9zZXRfbWFjX2FkZHJlc3MpOwogCiAvKgogICoJUGVyZm9ybSB0aGUgU0lPQ3hJRnh4eCBjYWxscywgaW5zaWRlIHJlYWRfbG9jayhkZXZfYmFzZV9sb2NrKQpAQCAtNDIxMSw1NiArNDI2NCw1NiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ0dJRkZMQUdTOgkvKiBHZXQgaW50ZXJmYWNlIGZsYWdzICovCi0JCQlpZnItPmlmcl9mbGFncyA9IChzaG9ydCkgZGV2X2dldF9mbGFncyhkZXYpOwotCQkJcmV0dXJuIDA7CisJY2FzZSBTSU9DR0lGRkxBR1M6CS8qIEdldCBpbnRlcmZhY2UgZmxhZ3MgKi8KKwkJaWZyLT5pZnJfZmxhZ3MgPSAoc2hvcnQpIGRldl9nZXRfZmxhZ3MoZGV2KTsKKwkJcmV0dXJuIDA7CiAKLQkJY2FzZSBTSU9DR0lGTUVUUklDOgkvKiBHZXQgdGhlIG1ldHJpYyBvbiB0aGUgaW50ZXJmYWNlCi0JCQkJCSAgIChjdXJyZW50bHkgdW51c2VkKSAqLwotCQkJaWZyLT5pZnJfbWV0cmljID0gMDsKLQkJCXJldHVybiAwOworCWNhc2UgU0lPQ0dJRk1FVFJJQzoJLyogR2V0IHRoZSBtZXRyaWMgb24gdGhlIGludGVyZmFjZQorCQkJCSAgIChjdXJyZW50bHkgdW51c2VkKSAqLworCQlpZnItPmlmcl9tZXRyaWMgPSAwOworCQlyZXR1cm4gMDsKIAotCQljYXNlIFNJT0NHSUZNVFU6CS8qIEdldCB0aGUgTVRVIG9mIGEgZGV2aWNlICovCi0JCQlpZnItPmlmcl9tdHUgPSBkZXYtPm10dTsKLQkJCXJldHVybiAwOworCWNhc2UgU0lPQ0dJRk1UVToJLyogR2V0IHRoZSBNVFUgb2YgYSBkZXZpY2UgKi8KKwkJaWZyLT5pZnJfbXR1ID0gZGV2LT5tdHU7CisJCXJldHVybiAwOwogCi0JCWNhc2UgU0lPQ0dJRkhXQUREUjoKLQkJCWlmICghZGV2LT5hZGRyX2xlbikKLQkJCQltZW1zZXQoaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsIDAsIHNpemVvZiBpZnItPmlmcl9od2FkZHIuc2FfZGF0YSk7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCBkZXYtPmRldl9hZGRyLAotCQkJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7Ci0JCQlpZnItPmlmcl9od2FkZHIuc2FfZmFtaWx5ID0gZGV2LT50eXBlOwotCQkJcmV0dXJuIDA7CisJY2FzZSBTSU9DR0lGSFdBRERSOgorCQlpZiAoIWRldi0+YWRkcl9sZW4pCisJCQltZW1zZXQoaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsIDAsIHNpemVvZiBpZnItPmlmcl9od2FkZHIuc2FfZGF0YSk7CisJCWVsc2UKKwkJCW1lbWNweShpZnItPmlmcl9od2FkZHIuc2FfZGF0YSwgZGV2LT5kZXZfYWRkciwKKwkJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7CisJCWlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgPSBkZXYtPnR5cGU7CisJCXJldHVybiAwOwogCi0JCWNhc2UgU0lPQ0dJRlNMQVZFOgotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCWNhc2UgU0lPQ0dJRlNMQVZFOgorCQllcnIgPSAtRUlOVkFMOworCQlicmVhazsKIAotCQljYXNlIFNJT0NHSUZNQVA6Ci0JCQlpZnItPmlmcl9tYXAubWVtX3N0YXJ0ID0gZGV2LT5tZW1fc3RhcnQ7Ci0JCQlpZnItPmlmcl9tYXAubWVtX2VuZCAgID0gZGV2LT5tZW1fZW5kOwotCQkJaWZyLT5pZnJfbWFwLmJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCQkJaWZyLT5pZnJfbWFwLmlycSAgICAgICA9IGRldi0+aXJxOwotCQkJaWZyLT5pZnJfbWFwLmRtYSAgICAgICA9IGRldi0+ZG1hOwotCQkJaWZyLT5pZnJfbWFwLnBvcnQgICAgICA9IGRldi0+aWZfcG9ydDsKLQkJCXJldHVybiAwOworCWNhc2UgU0lPQ0dJRk1BUDoKKwkJaWZyLT5pZnJfbWFwLm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0OworCQlpZnItPmlmcl9tYXAubWVtX2VuZCAgID0gZGV2LT5tZW1fZW5kOworCQlpZnItPmlmcl9tYXAuYmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJCWlmci0+aWZyX21hcC5pcnEgICAgICAgPSBkZXYtPmlycTsKKwkJaWZyLT5pZnJfbWFwLmRtYSAgICAgICA9IGRldi0+ZG1hOworCQlpZnItPmlmcl9tYXAucG9ydCAgICAgID0gZGV2LT5pZl9wb3J0OworCQlyZXR1cm4gMDsKIAotCQljYXNlIFNJT0NHSUZJTkRFWDoKLQkJCWlmci0+aWZyX2lmaW5kZXggPSBkZXYtPmlmaW5kZXg7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIFNJT0NHSUZJTkRFWDoKKwkJaWZyLT5pZnJfaWZpbmRleCA9IGRldi0+aWZpbmRleDsKKwkJcmV0dXJuIDA7CiAKLQkJY2FzZSBTSU9DR0lGVFhRTEVOOgotCQkJaWZyLT5pZnJfcWxlbiA9IGRldi0+dHhfcXVldWVfbGVuOwotCQkJcmV0dXJuIDA7CisJY2FzZSBTSU9DR0lGVFhRTEVOOgorCQlpZnItPmlmcl9xbGVuID0gZGV2LT50eF9xdWV1ZV9sZW47CisJCXJldHVybiAwOwogCi0JCWRlZmF1bHQ6Ci0JCQkvKiBkZXZfaW9jdGwoKSBzaG91bGQgZW5zdXJlIHRoaXMgY2FzZQotCQkJICogaXMgbmV2ZXIgcmVhY2hlZAotCQkJICovCi0JCQlXQVJOX09OKDEpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGRldl9pb2N0bCgpIHNob3VsZCBlbnN1cmUgdGhpcyBjYXNlCisJCSAqIGlzIG5ldmVyIHJlYWNoZWQKKwkJICovCisJCVdBUk5fT04oMSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOwogCiAJfQogCXJldHVybiBlcnI7CkBAIC00MjgxLDkyICs0MzM0LDkxIEBACiAJb3BzID0gZGV2LT5uZXRkZXZfb3BzOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBTSU9DU0lGRkxBR1M6CS8qIFNldCBpbnRlcmZhY2UgZmxhZ3MgKi8KLQkJCXJldHVybiBkZXZfY2hhbmdlX2ZsYWdzKGRldiwgaWZyLT5pZnJfZmxhZ3MpOworCWNhc2UgU0lPQ1NJRkZMQUdTOgkvKiBTZXQgaW50ZXJmYWNlIGZsYWdzICovCisJCXJldHVybiBkZXZfY2hhbmdlX2ZsYWdzKGRldiwgaWZyLT5pZnJfZmxhZ3MpOwogCi0JCWNhc2UgU0lPQ1NJRk1FVFJJQzoJLyogU2V0IHRoZSBtZXRyaWMgb24gdGhlIGludGVyZmFjZQotCQkJCQkgICAoY3VycmVudGx5IHVudXNlZCkgKi8KLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwljYXNlIFNJT0NTSUZNRVRSSUM6CS8qIFNldCB0aGUgbWV0cmljIG9uIHRoZSBpbnRlcmZhY2UKKwkJCQkgICAoY3VycmVudGx5IHVudXNlZCkgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JCWNhc2UgU0lPQ1NJRk1UVToJLyogU2V0IHRoZSBNVFUgb2YgYSBkZXZpY2UgKi8KLQkJCXJldHVybiBkZXZfc2V0X210dShkZXYsIGlmci0+aWZyX210dSk7CisJY2FzZSBTSU9DU0lGTVRVOgkvKiBTZXQgdGhlIE1UVSBvZiBhIGRldmljZSAqLworCQlyZXR1cm4gZGV2X3NldF9tdHUoZGV2LCBpZnItPmlmcl9tdHUpOwogCi0JCWNhc2UgU0lPQ1NJRkhXQUREUjoKLQkJCXJldHVybiBkZXZfc2V0X21hY19hZGRyZXNzKGRldiwgJmlmci0+aWZyX2h3YWRkcik7CisJY2FzZSBTSU9DU0lGSFdBRERSOgorCQlyZXR1cm4gZGV2X3NldF9tYWNfYWRkcmVzcyhkZXYsICZpZnItPmlmcl9od2FkZHIpOwogCi0JCWNhc2UgU0lPQ1NJRkhXQlJPQURDQVNUOgotCQkJaWYgKGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gZGV2LT50eXBlKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCBpZnItPmlmcl9od2FkZHIuc2FfZGF0YSwKLQkJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7Ci0JCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7Ci0JCQlyZXR1cm4gMDsKKwljYXNlIFNJT0NTSUZIV0JST0FEQ0FTVDoKKwkJaWYgKGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gZGV2LT50eXBlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsCisJCSAgICAgICBtaW4oc2l6ZW9mIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLCAoc2l6ZV90KSBkZXYtPmFkZHJfbGVuKSk7CisJCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfQ0hBTkdFQUREUiwgZGV2KTsKKwkJcmV0dXJuIDA7CiAKLQkJY2FzZSBTSU9DU0lGTUFQOgotCQkJaWYgKG9wcy0+bmRvX3NldF9jb25maWcpIHsKLQkJCQlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCi0JCQkJCXJldHVybiAtRU5PREVWOwotCQkJCXJldHVybiBvcHMtPm5kb19zZXRfY29uZmlnKGRldiwgJmlmci0+aWZyX21hcCk7CisJY2FzZSBTSU9DU0lGTUFQOgorCQlpZiAob3BzLT5uZG9fc2V0X2NvbmZpZykgeworCQkJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQorCQkJCXJldHVybiAtRU5PREVWOworCQkJcmV0dXJuIG9wcy0+bmRvX3NldF9jb25maWcoZGV2LCAmaWZyLT5pZnJfbWFwKTsKKwkJfQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwljYXNlIFNJT0NBRERNVUxUSToKKwkJaWYgKCghb3BzLT5uZG9fc2V0X211bHRpY2FzdF9saXN0ICYmICFvcHMtPm5kb19zZXRfcnhfbW9kZSkgfHwKKwkJICAgIGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKKwkJCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZGV2X21jX2FkZChkZXYsIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLAorCQkJCSAgZGV2LT5hZGRyX2xlbiwgMSk7CisKKwljYXNlIFNJT0NERUxNVUxUSToKKwkJaWYgKCghb3BzLT5uZG9fc2V0X211bHRpY2FzdF9saXN0ICYmICFvcHMtPm5kb19zZXRfcnhfbW9kZSkgfHwKKwkJICAgIGlmci0+aWZyX2h3YWRkci5zYV9mYW1pbHkgIT0gQUZfVU5TUEVDKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKKwkJCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZGV2X21jX2RlbGV0ZShkZXYsIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLAorCQkJCSAgICAgZGV2LT5hZGRyX2xlbiwgMSk7CisKKwljYXNlIFNJT0NTSUZUWFFMRU46CisJCWlmIChpZnItPmlmcl9xbGVuIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IGlmci0+aWZyX3FsZW47CisJCXJldHVybiAwOworCisJY2FzZSBTSU9DU0lGTkFNRToKKwkJaWZyLT5pZnJfbmV3bmFtZVtJRk5BTVNJWi0xXSA9ICdcMCc7CisJCXJldHVybiBkZXZfY2hhbmdlX25hbWUoZGV2LCBpZnItPmlmcl9uZXduYW1lKTsKKworCS8qCisJICoJVW5rbm93biBvciBwcml2YXRlIGlvY3RsCisJICovCisJZGVmYXVsdDoKKwkJaWYgKChjbWQgPj0gU0lPQ0RFVlBSSVZBVEUgJiYKKwkJICAgIGNtZCA8PSBTSU9DREVWUFJJVkFURSArIDE1KSB8fAorCQkgICAgY21kID09IFNJT0NCT05ERU5TTEFWRSB8fAorCQkgICAgY21kID09IFNJT0NCT05EUkVMRUFTRSB8fAorCQkgICAgY21kID09IFNJT0NCT05EU0VUSFdBRERSIHx8CisJCSAgICBjbWQgPT0gU0lPQ0JPTkRTTEFWRUlORk9RVUVSWSB8fAorCQkgICAgY21kID09IFNJT0NCT05ESU5GT1FVRVJZIHx8CisJCSAgICBjbWQgPT0gU0lPQ0JPTkRDSEFOR0VBQ1RJVkUgfHwKKwkJICAgIGNtZCA9PSBTSU9DR01JSVBIWSB8fAorCQkgICAgY21kID09IFNJT0NHTUlJUkVHIHx8CisJCSAgICBjbWQgPT0gU0lPQ1NNSUlSRUcgfHwKKwkJICAgIGNtZCA9PSBTSU9DQlJBRERJRiB8fAorCQkgICAgY21kID09IFNJT0NCUkRFTElGIHx8CisJCSAgICBjbWQgPT0gU0lPQ1NIV1RTVEFNUCB8fAorCQkgICAgY21kID09IFNJT0NXQU5ERVYpIHsKKwkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJaWYgKG9wcy0+bmRvX2RvX2lvY3RsKSB7CisJCQkJaWYgKG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCisJCQkJCWVyciA9IG9wcy0+bmRvX2RvX2lvY3RsKGRldiwgaWZyLCBjbWQpOworCQkJCWVsc2UKKwkJCQkJZXJyID0gLUVOT0RFVjsKIAkJCX0KLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCQljYXNlIFNJT0NBRERNVUxUSToKLQkJCWlmICgoIW9wcy0+bmRvX3NldF9tdWx0aWNhc3RfbGlzdCAmJiAhb3BzLT5uZG9fc2V0X3J4X21vZGUpIHx8Ci0JCQkgICAgaWZyLT5pZnJfaHdhZGRyLnNhX2ZhbWlseSAhPSBBRl9VTlNQRUMpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlyZXR1cm4gZGV2X21jX2FkZChkZXYsIGlmci0+aWZyX2h3YWRkci5zYV9kYXRhLAotCQkJCQkgIGRldi0+YWRkcl9sZW4sIDEpOwotCi0JCWNhc2UgU0lPQ0RFTE1VTFRJOgotCQkJaWYgKCghb3BzLT5uZG9fc2V0X211bHRpY2FzdF9saXN0ICYmICFvcHMtPm5kb19zZXRfcnhfbW9kZSkgfHwKLQkJCSAgICBpZnItPmlmcl9od2FkZHIuc2FfZmFtaWx5ICE9IEFGX1VOU1BFQykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXJldHVybiBkZXZfbWNfZGVsZXRlKGRldiwgaWZyLT5pZnJfaHdhZGRyLnNhX2RhdGEsCi0JCQkJCSAgICAgZGV2LT5hZGRyX2xlbiwgMSk7Ci0KLQkJY2FzZSBTSU9DU0lGVFhRTEVOOgotCQkJaWYgKGlmci0+aWZyX3FsZW4gPCAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZGV2LT50eF9xdWV1ZV9sZW4gPSBpZnItPmlmcl9xbGVuOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBTSU9DU0lGTkFNRToKLQkJCWlmci0+aWZyX25ld25hbWVbSUZOQU1TSVotMV0gPSAnXDAnOwotCQkJcmV0dXJuIGRldl9jaGFuZ2VfbmFtZShkZXYsIGlmci0+aWZyX25ld25hbWUpOwotCi0JCS8qCi0JCSAqCVVua25vd24gb3IgcHJpdmF0ZSBpb2N0bAotCQkgKi8KLQotCQlkZWZhdWx0OgotCQkJaWYgKChjbWQgPj0gU0lPQ0RFVlBSSVZBVEUgJiYKLQkJCSAgICBjbWQgPD0gU0lPQ0RFVlBSSVZBVEUgKyAxNSkgfHwKLQkJCSAgICBjbWQgPT0gU0lPQ0JPTkRFTlNMQVZFIHx8Ci0JCQkgICAgY21kID09IFNJT0NCT05EUkVMRUFTRSB8fAotCQkJICAgIGNtZCA9PSBTSU9DQk9ORFNFVEhXQUREUiB8fAotCQkJICAgIGNtZCA9PSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZIHx8Ci0JCQkgICAgY21kID09IFNJT0NCT05ESU5GT1FVRVJZIHx8Ci0JCQkgICAgY21kID09IFNJT0NCT05EQ0hBTkdFQUNUSVZFIHx8Ci0JCQkgICAgY21kID09IFNJT0NHTUlJUEhZIHx8Ci0JCQkgICAgY21kID09IFNJT0NHTUlJUkVHIHx8Ci0JCQkgICAgY21kID09IFNJT0NTTUlJUkVHIHx8Ci0JCQkgICAgY21kID09IFNJT0NCUkFERElGIHx8Ci0JCQkgICAgY21kID09IFNJT0NCUkRFTElGIHx8Ci0JCQkgICAgY21kID09IFNJT0NTSFdUU1RBTVAgfHwKLQkJCSAgICBjbWQgPT0gU0lPQ1dBTkRFVikgewotCQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJCWlmIChvcHMtPm5kb19kb19pb2N0bCkgewotCQkJCQlpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKLQkJCQkJCWVyciA9IG9wcy0+bmRvX2RvX2lvY3RsKGRldiwgaWZyLCBjbWQpOwotCQkJCQllbHNlCi0JCQkJCQllcnIgPSAtRU5PREVWOwotCQkJCX0KLQkJCX0gZWxzZQotCQkJCWVyciA9IC1FSU5WQUw7CisJCX0gZWxzZQorCQkJZXJyID0gLUVJTlZBTDsKIAogCX0KIAlyZXR1cm4gZXJyOwpAQCAtNDQyMywxMzUgKzQ0NzUsMTM1IEBACiAJICovCiAKIAlzd2l0Y2ggKGNtZCkgewotCQkvKgotCQkgKglUaGVzZSBpb2N0bCBjYWxsczoKLQkJICoJLSBjYW4gYmUgZG9uZSBieSBhbGwuCi0JCSAqCS0gYXRvbWljIGFuZCBkbyBub3QgcmVxdWlyZSBsb2NraW5nLgotCQkgKgktIHJldHVybiBhIHZhbHVlCi0JCSAqLwotCQljYXNlIFNJT0NHSUZGTEFHUzoKLQkJY2FzZSBTSU9DR0lGTUVUUklDOgotCQljYXNlIFNJT0NHSUZNVFU6Ci0JCWNhc2UgU0lPQ0dJRkhXQUREUjoKLQkJY2FzZSBTSU9DR0lGU0xBVkU6Ci0JCWNhc2UgU0lPQ0dJRk1BUDoKLQkJY2FzZSBTSU9DR0lGSU5ERVg6Ci0JCWNhc2UgU0lPQ0dJRlRYUUxFTjoKLQkJCWRldl9sb2FkKG5ldCwgaWZyLmlmcl9uYW1lKTsKLQkJCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JCQlyZXQgPSBkZXZfaWZzaW9jX2xvY2tlZChuZXQsICZpZnIsIGNtZCk7Ci0JCQlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWlmIChjb2xvbikKLQkJCQkJKmNvbG9uID0gJzonOwotCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAotCQkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKLQkJCQkJcmV0ID0gLUVGQVVMVDsKLQkJCX0KLQkJCXJldHVybiByZXQ7CisJLyoKKwkgKglUaGVzZSBpb2N0bCBjYWxsczoKKwkgKgktIGNhbiBiZSBkb25lIGJ5IGFsbC4KKwkgKgktIGF0b21pYyBhbmQgZG8gbm90IHJlcXVpcmUgbG9ja2luZy4KKwkgKgktIHJldHVybiBhIHZhbHVlCisJICovCisJY2FzZSBTSU9DR0lGRkxBR1M6CisJY2FzZSBTSU9DR0lGTUVUUklDOgorCWNhc2UgU0lPQ0dJRk1UVToKKwljYXNlIFNJT0NHSUZIV0FERFI6CisJY2FzZSBTSU9DR0lGU0xBVkU6CisJY2FzZSBTSU9DR0lGTUFQOgorCWNhc2UgU0lPQ0dJRklOREVYOgorCWNhc2UgU0lPQ0dJRlRYUUxFTjoKKwkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOworCQlyZWFkX2xvY2soJmRldl9iYXNlX2xvY2spOworCQlyZXQgPSBkZXZfaWZzaW9jX2xvY2tlZChuZXQsICZpZnIsIGNtZCk7CisJCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjb2xvbikKKwkJCQkqY29sb24gPSAnOic7CisJCQlpZiAoY29weV90b191c2VyKGFyZywgJmlmciwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJCXJldHVybiByZXQ7CiAKLQkJY2FzZSBTSU9DRVRIVE9PTDoKLQkJCWRldl9sb2FkKG5ldCwgaWZyLmlmcl9uYW1lKTsKLQkJCXJ0bmxfbG9jaygpOwotCQkJcmV0ID0gZGV2X2V0aHRvb2wobmV0LCAmaWZyKTsKLQkJCXJ0bmxfdW5sb2NrKCk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWlmIChjb2xvbikKLQkJCQkJKmNvbG9uID0gJzonOwotCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAotCQkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKLQkJCQkJcmV0ID0gLUVGQVVMVDsKLQkJCX0KLQkJCXJldHVybiByZXQ7CisJY2FzZSBTSU9DRVRIVE9PTDoKKwkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gZGV2X2V0aHRvb2wobmV0LCAmaWZyKTsKKwkJcnRubF91bmxvY2soKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjb2xvbikKKwkJCQkqY29sb24gPSAnOic7CisJCQlpZiAoY29weV90b191c2VyKGFyZywgJmlmciwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJCXJldHVybiByZXQ7CiAKLQkJLyoKLQkJICoJVGhlc2UgaW9jdGwgY2FsbHM6Ci0JCSAqCS0gcmVxdWlyZSBzdXBlcnVzZXIgcG93ZXIuCi0JCSAqCS0gcmVxdWlyZSBzdHJpY3Qgc2VyaWFsaXphdGlvbi4KLQkJICoJLSByZXR1cm4gYSB2YWx1ZQotCQkgKi8KLQkJY2FzZSBTSU9DR01JSVBIWToKLQkJY2FzZSBTSU9DR01JSVJFRzoKLQkJY2FzZSBTSU9DU0lGTkFNRToKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCQlyZXR1cm4gLUVQRVJNOworCS8qCisJICoJVGhlc2UgaW9jdGwgY2FsbHM6CisJICoJLSByZXF1aXJlIHN1cGVydXNlciBwb3dlci4KKwkgKgktIHJlcXVpcmUgc3RyaWN0IHNlcmlhbGl6YXRpb24uCisJICoJLSByZXR1cm4gYSB2YWx1ZQorCSAqLworCWNhc2UgU0lPQ0dNSUlQSFk6CisJY2FzZSBTSU9DR01JSVJFRzoKKwljYXNlIFNJT0NTSUZOQU1FOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlkZXZfbG9hZChuZXQsIGlmci5pZnJfbmFtZSk7CisJCXJ0bmxfbG9jaygpOworCQlyZXQgPSBkZXZfaWZzaW9jKG5ldCwgJmlmciwgY21kKTsKKwkJcnRubF91bmxvY2soKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmIChjb2xvbikKKwkJCQkqY29sb24gPSAnOic7CisJCQlpZiAoY29weV90b191c2VyKGFyZywgJmlmciwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaWZyZXEpKSkKKwkJCQlyZXQgPSAtRUZBVUxUOworCQl9CisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqCVRoZXNlIGlvY3RsIGNhbGxzOgorCSAqCS0gcmVxdWlyZSBzdXBlcnVzZXIgcG93ZXIuCisJICoJLSByZXF1aXJlIHN0cmljdCBzZXJpYWxpemF0aW9uLgorCSAqCS0gZG8gbm90IHJldHVybiBhIHZhbHVlCisJICovCisJY2FzZSBTSU9DU0lGRkxBR1M6CisJY2FzZSBTSU9DU0lGTUVUUklDOgorCWNhc2UgU0lPQ1NJRk1UVToKKwljYXNlIFNJT0NTSUZNQVA6CisJY2FzZSBTSU9DU0lGSFdBRERSOgorCWNhc2UgU0lPQ1NJRlNMQVZFOgorCWNhc2UgU0lPQ0FERE1VTFRJOgorCWNhc2UgU0lPQ0RFTE1VTFRJOgorCWNhc2UgU0lPQ1NJRkhXQlJPQURDQVNUOgorCWNhc2UgU0lPQ1NJRlRYUUxFTjoKKwljYXNlIFNJT0NTTUlJUkVHOgorCWNhc2UgU0lPQ0JPTkRFTlNMQVZFOgorCWNhc2UgU0lPQ0JPTkRSRUxFQVNFOgorCWNhc2UgU0lPQ0JPTkRTRVRIV0FERFI6CisJY2FzZSBTSU9DQk9ORENIQU5HRUFDVElWRToKKwljYXNlIFNJT0NCUkFERElGOgorCWNhc2UgU0lPQ0JSREVMSUY6CisJY2FzZSBTSU9DU0hXVFNUQU1QOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNJT0NCT05EU0xBVkVJTkZPUVVFUlk6CisJY2FzZSBTSU9DQk9ORElORk9RVUVSWToKKwkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOworCQlydG5sX2xvY2soKTsKKwkJcmV0ID0gZGV2X2lmc2lvYyhuZXQsICZpZnIsIGNtZCk7CisJCXJ0bmxfdW5sb2NrKCk7CisJCXJldHVybiByZXQ7CisKKwljYXNlIFNJT0NHSUZNRU06CisJCS8qIEdldCB0aGUgcGVyIGRldmljZSBtZW1vcnkgc3BhY2UuIFdlIGNhbiBhZGQgdGhpcyBidXQKKwkJICogY3VycmVudGx5IGRvIG5vdCBzdXBwb3J0IGl0ICovCisJY2FzZSBTSU9DU0lGTUVNOgorCQkvKiBTZXQgdGhlIHBlciBkZXZpY2UgbWVtb3J5IGJ1ZmZlciBzcGFjZS4KKwkJICogTm90IGFwcGxpY2FibGUgaW4gb3VyIGNhc2UgKi8KKwljYXNlIFNJT0NTSUZMSU5LOgorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICoJVW5rbm93biBvciBwcml2YXRlIGlvY3RsLgorCSAqLworCWRlZmF1bHQ6CisJCWlmIChjbWQgPT0gU0lPQ1dBTkRFViB8fAorCQkgICAgKGNtZCA+PSBTSU9DREVWUFJJVkFURSAmJgorCQkgICAgIGNtZCA8PSBTSU9DREVWUFJJVkFURSArIDE1KSkgewogCQkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOwogCQkJcnRubF9sb2NrKCk7CiAJCQlyZXQgPSBkZXZfaWZzaW9jKG5ldCwgJmlmciwgY21kKTsKIAkJCXJ0bmxfdW5sb2NrKCk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWlmIChjb2xvbikKLQkJCQkJKmNvbG9uID0gJzonOwotCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAorCQkJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZywgJmlmciwKIAkJCQkJCSBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCi0JCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQl9CisJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCXJldHVybiByZXQ7Ci0KLQkJLyoKLQkJICoJVGhlc2UgaW9jdGwgY2FsbHM6Ci0JCSAqCS0gcmVxdWlyZSBzdXBlcnVzZXIgcG93ZXIuCi0JCSAqCS0gcmVxdWlyZSBzdHJpY3Qgc2VyaWFsaXphdGlvbi4KLQkJICoJLSBkbyBub3QgcmV0dXJuIGEgdmFsdWUKLQkJICovCi0JCWNhc2UgU0lPQ1NJRkZMQUdTOgotCQljYXNlIFNJT0NTSUZNRVRSSUM6Ci0JCWNhc2UgU0lPQ1NJRk1UVToKLQkJY2FzZSBTSU9DU0lGTUFQOgotCQljYXNlIFNJT0NTSUZIV0FERFI6Ci0JCWNhc2UgU0lPQ1NJRlNMQVZFOgotCQljYXNlIFNJT0NBRERNVUxUSToKLQkJY2FzZSBTSU9DREVMTVVMVEk6Ci0JCWNhc2UgU0lPQ1NJRkhXQlJPQURDQVNUOgotCQljYXNlIFNJT0NTSUZUWFFMRU46Ci0JCWNhc2UgU0lPQ1NNSUlSRUc6Ci0JCWNhc2UgU0lPQ0JPTkRFTlNMQVZFOgotCQljYXNlIFNJT0NCT05EUkVMRUFTRToKLQkJY2FzZSBTSU9DQk9ORFNFVEhXQUREUjoKLQkJY2FzZSBTSU9DQk9ORENIQU5HRUFDVElWRToKLQkJY2FzZSBTSU9DQlJBRERJRjoKLQkJY2FzZSBTSU9DQlJERUxJRjoKLQkJY2FzZSBTSU9DU0hXVFNUQU1QOgotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCXJldHVybiAtRVBFUk07Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBTSU9DQk9ORFNMQVZFSU5GT1FVRVJZOgotCQljYXNlIFNJT0NCT05ESU5GT1FVRVJZOgotCQkJZGV2X2xvYWQobmV0LCBpZnIuaWZyX25hbWUpOwotCQkJcnRubF9sb2NrKCk7Ci0JCQlyZXQgPSBkZXZfaWZzaW9jKG5ldCwgJmlmciwgY21kKTsKLQkJCXJ0bmxfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gcmV0OwotCi0JCWNhc2UgU0lPQ0dJRk1FTToKLQkJCS8qIEdldCB0aGUgcGVyIGRldmljZSBtZW1vcnkgc3BhY2UuIFdlIGNhbiBhZGQgdGhpcyBidXQKLQkJCSAqIGN1cnJlbnRseSBkbyBub3Qgc3VwcG9ydCBpdCAqLwotCQljYXNlIFNJT0NTSUZNRU06Ci0JCQkvKiBTZXQgdGhlIHBlciBkZXZpY2UgbWVtb3J5IGJ1ZmZlciBzcGFjZS4KLQkJCSAqIE5vdCBhcHBsaWNhYmxlIGluIG91ciBjYXNlICovCi0JCWNhc2UgU0lPQ1NJRkxJTks6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKgotCQkgKglVbmtub3duIG9yIHByaXZhdGUgaW9jdGwuCi0JCSAqLwotCQlkZWZhdWx0OgotCQkJaWYgKGNtZCA9PSBTSU9DV0FOREVWIHx8Ci0JCQkgICAgKGNtZCA+PSBTSU9DREVWUFJJVkFURSAmJgotCQkJICAgICBjbWQgPD0gU0lPQ0RFVlBSSVZBVEUgKyAxNSkpIHsKLQkJCQlkZXZfbG9hZChuZXQsIGlmci5pZnJfbmFtZSk7Ci0JCQkJcnRubF9sb2NrKCk7Ci0JCQkJcmV0ID0gZGV2X2lmc2lvYyhuZXQsICZpZnIsIGNtZCk7Ci0JCQkJcnRubF91bmxvY2soKTsKLQkJCQlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYXJnLCAmaWZyLAotCQkJCQkJCSBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCi0JCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCS8qIFRha2UgY2FyZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zICovCi0JCQlpZiAoY21kID49IFNJT0NJV0ZJUlNUICYmIGNtZCA8PSBTSU9DSVdMQVNUKQotCQkJCXJldHVybiB3ZXh0X2hhbmRsZV9pb2N0bChuZXQsICZpZnIsIGNtZCwgYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIFRha2UgY2FyZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zICovCisJCWlmIChjbWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpCisJCQlyZXR1cm4gd2V4dF9oYW5kbGVfaW9jdGwobmV0LCAmaWZyLCBjbWQsIGFyZyk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KIApAQCAtNDgxNiw2ICs0ODY4LDcgQEAKIAkJZGV2LT5uZXRkZXZfb3BzLT5uZG9fdW5pbml0KGRldik7CiAJZ290byBvdXQ7CiB9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX25ldGRldmljZSk7CiAKIC8qKgogICoJaW5pdF9kdW1teV9uZXRkZXYJLSBpbml0IGEgZHVtbXkgbmV0d29yayBkZXZpY2UgZm9yIE5BUEkKQEAgLTUxNjgsNiArNTIyMSw3IEBACiAJLyogd2lsbCBmcmVlIHZpYSBkZXZpY2UgcmVsZWFzZSAqLwogCXB1dF9kZXZpY2UoJmRldi0+ZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0woZnJlZV9uZXRkZXYpOwogCiAvKioKICAqCXN5bmNocm9uaXplX25ldCAtICBTeW5jaHJvbml6ZSB3aXRoIHBhY2tldCByZWNlaXZlIHByb2Nlc3NpbmcKQEAgLTUxODAsNiArNTIzNCw3IEBACiAJbWlnaHRfc2xlZXAoKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KK0VYUE9SVF9TWU1CT0woc3luY2hyb25pemVfbmV0KTsKIAogLyoqCiAgKgl1bnJlZ2lzdGVyX25ldGRldmljZSAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsCkBAIC01MjAwLDYgKzUyNTUsNyBAQAogCS8qIEZpbmlzaCBwcm9jZXNzaW5nIHVucmVnaXN0ZXIgYWZ0ZXIgdW5sb2NrICovCiAJbmV0X3NldF90b2RvKGRldik7CiB9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlKTsKIAogLyoqCiAgKgl1bnJlZ2lzdGVyX25ldGRldiAtIHJlbW92ZSBkZXZpY2UgZnJvbSB0aGUga2VybmVsCkBAIC01MjE4LDcgKzUyNzQsNiBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJcnRubF91bmxvY2soKTsKIH0KLQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldik7CiAKIC8qKgpAQCAtNTM0Nyw2ICs1NDAyLDcgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2NoYW5nZV9uZXRfbmFtZXNwYWNlKTsKIAogc3RhdGljIGludCBkZXZfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLApAQCAtNTQwNyw3ICs1NDYzLDcgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBtYXNrKQogewogCS8qIElmIGRldmljZSBuZWVkcyBjaGVja3N1bW1pbmcsIGRvd25ncmFkZSB0byBpdC4gKi8KLSAgICAgICAgaWYgKGFsbCAmIE5FVElGX0ZfTk9fQ1NVTSAmJiAhKG9uZSAmIE5FVElGX0ZfTk9fQ1NVTSkpCisJaWYgKGFsbCAmIE5FVElGX0ZfTk9fQ1NVTSAmJiAhKG9uZSAmIE5FVElGX0ZfTk9fQ1NVTSkpCiAJCWFsbCBePSBORVRJRl9GX05PX0NTVU0gfCAob25lICYgTkVUSUZfRl9BTExfQ1NVTSk7CiAJZWxzZSBpZiAobWFzayAmIE5FVElGX0ZfQUxMX0NTVU0pIHsKIAkJLyogSWYgb25lIGRldmljZSBzdXBwb3J0cyB2NC92NiBjaGVja3N1bW1pbmcsIHNldCBmb3IgYWxsLiAqLwpAQCAtNTYzMyw0MSArNTY4OSwzIEBACiAKIGxhdGVfaW5pdGNhbGxfc3luYyhpbml0aWFsaXplX2hhc2hybmQpOwogCi1FWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9pbmRleCk7Ci1FWFBPUlRfU1lNQk9MKF9fZGV2X2dldF9ieV9uYW1lKTsKLUVYUE9SVF9TWU1CT0woX19kZXZfcmVtb3ZlX3BhY2spOwotRVhQT1JUX1NZTUJPTChkZXZfdmFsaWRfbmFtZSk7Ci1FWFBPUlRfU1lNQk9MKGRldl9hZGRfcGFjayk7Ci1FWFBPUlRfU1lNQk9MKGRldl9hbGxvY19uYW1lKTsKLUVYUE9SVF9TWU1CT0woZGV2X2Nsb3NlKTsKLUVYUE9SVF9TWU1CT0woZGV2X2dldF9ieV9mbGFncyk7Ci1FWFBPUlRfU1lNQk9MKGRldl9nZXRfYnlfaW5kZXgpOwotRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2J5X25hbWUpOwotRVhQT1JUX1NZTUJPTChkZXZfb3Blbik7Ci1FWFBPUlRfU1lNQk9MKGRldl9xdWV1ZV94bWl0KTsKLUVYUE9SVF9TWU1CT0woZGV2X3JlbW92ZV9wYWNrKTsKLUVYUE9SVF9TWU1CT0woZGV2X3NldF9hbGxtdWx0aSk7Ci1FWFBPUlRfU1lNQk9MKGRldl9zZXRfcHJvbWlzY3VpdHkpOwotRVhQT1JUX1NZTUJPTChkZXZfY2hhbmdlX2ZsYWdzKTsKLUVYUE9SVF9TWU1CT0woZGV2X3NldF9tdHUpOwotRVhQT1JUX1NZTUJPTChkZXZfc2V0X21hY19hZGRyZXNzKTsKLUVYUE9SVF9TWU1CT0woZnJlZV9uZXRkZXYpOwotRVhQT1JUX1NZTUJPTChuZXRkZXZfYm9vdF9zZXR1cF9jaGVjayk7Ci1FWFBPUlRfU1lNQk9MKG5ldGRldl9zZXRfbWFzdGVyKTsKLUVYUE9SVF9TWU1CT0wobmV0ZGV2X3N0YXRlX2NoYW5nZSk7Ci1FWFBPUlRfU1lNQk9MKG5ldGlmX3JlY2VpdmVfc2tiKTsKLUVYUE9SVF9TWU1CT0wobmV0aWZfcngpOwotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9naWZjb25mKTsKLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbmV0ZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKTsKLUVYUE9SVF9TWU1CT0woc2tiX2NoZWNrc3VtX2hlbHApOwotRVhQT1JUX1NZTUJPTChzeW5jaHJvbml6ZV9uZXQpOwotRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX25ldGRldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKTsKLUVYUE9SVF9TWU1CT0wobmV0X2VuYWJsZV90aW1lc3RhbXApOwotRVhQT1JUX1NZTUJPTChuZXRfZGlzYWJsZV90aW1lc3RhbXApOwotRVhQT1JUX1NZTUJPTChkZXZfZ2V0X2ZsYWdzKTsKLQotRVhQT1JUX1NZTUJPTChkZXZfbG9hZCk7Ci0KLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTChzb2Z0bmV0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwppbmRleCA5ZDY2ZmE5Li4wYTExM2YyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kcm9wX21vbml0b3IuYworKysgYi9uZXQvY29yZS9kcm9wX21vbml0b3IuYwpAQCAtNTIsNiArNTIsNyBAQAogCiBzdHJ1Y3QgZG1faHdfc3RhdF9kZWx0YSB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfcng7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJdW5zaWduZWQgbG9uZyBsYXN0X2Ryb3BfdmFsOwpAQCAtMTgwLDE3ICsxODEsMjUgQEAKIAlzdHJ1Y3QgZG1faHdfc3RhdF9kZWx0YSAqbmV3X3N0YXQ7CiAKIAkvKgotCSAqIFJhdGVsaW1pdCBvdXIgY2hlY2sgdGltZSB0byBkbV9od19jaGVja19kZWx0YSBqaWZmaWVzCisJICogRG9uJ3QgY2hlY2sgbmFwaSBzdHJ1Y3R1cmVzIHdpdGggbm8gYXNzb2NpYXRlZCBkZXZpY2UKIAkgKi8KLQlpZiAoIXRpbWVfYWZ0ZXIoamlmZmllcywgbmFwaS0+ZGV2LT5sYXN0X3J4ICsgZG1faHdfY2hlY2tfZGVsdGEpKQorCWlmICghbmFwaS0+ZGV2KQogCQlyZXR1cm47CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobmV3X3N0YXQsICZod19zdGF0c19saXN0LCBsaXN0KSB7CisJCS8qCisJCSAqIG9ubHkgYWRkIGEgbm90ZSB0byBvdXIgbW9uaXRvciBidWZmZXIgaWY6CisJCSAqIDEpIHRoaXMgaXMgdGhlIGRldiB3ZSByZWNlaXZlZCBvbgorCQkgKiAyKSBpdHMgYWZ0ZXIgdGhlIGxhc3RfcnggZGVsdGEKKwkJICogMykgb3VyIHJ4X2Ryb3BwZWQgY291bnQgaGFzIGdvbmUgdXAKKwkJICovCiAJCWlmICgobmV3X3N0YXQtPmRldiA9PSBuYXBpLT5kZXYpICAmJgorCQkgICAgKHRpbWVfYWZ0ZXIoamlmZmllcywgbmV3X3N0YXQtPmxhc3RfcnggKyBkbV9od19jaGVja19kZWx0YSkpICYmCiAJCSAgICAobmFwaS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkICE9IG5ld19zdGF0LT5sYXN0X2Ryb3BfdmFsKSkgewogCQkJdHJhY2VfZHJvcF9jb21tb24oTlVMTCwgTlVMTCk7CiAJCQluZXdfc3RhdC0+bGFzdF9kcm9wX3ZhbCA9IG5hcGktPmRldi0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCW5ld19zdGF0LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMjg2LDYgKzI5NSw3IEBACiAJCQlnb3RvIG91dDsKIAogCQluZXdfc3RhdC0+ZGV2ID0gZGV2OworCQluZXdfc3RhdC0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCUlOSVRfUkNVX0hFQUQoJm5ld19zdGF0LT5yY3UpOwogCQlzcGluX2xvY2soJnRyYWNlX3N0YXRlX2xvY2spOwogCQlsaXN0X2FkZF9yY3UoJm5ld19zdGF0LT5saXN0LCAmaHdfc3RhdHNfbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggZDlkNTE2MC4uNGMxMmRkYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMzAsMTAgKzMwLDE3IEBACiAJcmV0dXJuIG5ldGlmX2NhcnJpZXJfb2soZGV2KSA/IDEgOiAwOwogfQogCit1MzIgZXRodG9vbF9vcF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pICE9IDA7Cit9CitFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3J4X2NzdW0pOworCiB1MzIgZXRodG9vbF9vcF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pICE9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0pOwogCiBpbnQgZXRodG9vbF9vcF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKIHsKQEAgLTg5MSw2ICs4OTgsMTkgQEAKIAlyZXR1cm4gYWN0b3IoZGV2LCBlZGF0YS5kYXRhKTsKIH0KIAorc3RhdGljIGludCBldGh0b29sX2ZsYXNoX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCit7CisJc3RydWN0IGV0aHRvb2xfZmxhc2ggZWZsOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZlZmwsIHVzZXJhZGRyLCBzaXplb2YoZWZsKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5mbGFzaF9kZXZpY2UpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBkZXYtPmV0aHRvb2xfb3BzLT5mbGFzaF9kZXZpY2UoZGV2LCAmZWZsKTsKK30KKwogLyogVGhlIG1haW4gZW50cnkgcG9pbnQgaW4gdGhpcyBmaWxlLiAgQ2FsbGVkIGZyb20gbmV0L2NvcmUvZGV2LmMgKi8KIAogaW50IGRldl9ldGh0b29sKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlmcmVxICppZnIpCkBAIC0xMDA0LDcgKzEwMjQsOSBAQAogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfR1JYQ1NVTToKIAkJcmMgPSBldGh0b29sX2dldF92YWx1ZShkZXYsIHVzZXJhZGRyLCBldGhjbWQsCi0JCQkJICAgICAgIGRldi0+ZXRodG9vbF9vcHMtPmdldF9yeF9jc3VtKTsKKwkJCQkgICAgICAgKGRldi0+ZXRodG9vbF9vcHMtPmdldF9yeF9jc3VtID8KKwkJCQkJZGV2LT5ldGh0b29sX29wcy0+Z2V0X3J4X2NzdW0gOgorCQkJCQlldGh0b29sX29wX2dldF9yeF9jc3VtKSk7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9TUlhDU1VNOgogCQlyYyA9IGV0aHRvb2xfc2V0X3J4X2NzdW0oZGV2LCB1c2VyYWRkcik7CkBAIC0xMDY4LDcgKzEwOTAsOSBAQAogCQlicmVhazsKIAljYXNlIEVUSFRPT0xfR0ZMQUdTOgogCQlyYyA9IGV0aHRvb2xfZ2V0X3ZhbHVlKGRldiwgdXNlcmFkZHIsIGV0aGNtZCwKLQkJCQkgICAgICAgZGV2LT5ldGh0b29sX29wcy0+Z2V0X2ZsYWdzKTsKKwkJCQkgICAgICAgKGRldi0+ZXRodG9vbF9vcHMtPmdldF9mbGFncyA/CisJCQkJCWRldi0+ZXRodG9vbF9vcHMtPmdldF9mbGFncyA6CisJCQkJCWV0aHRvb2xfb3BfZ2V0X2ZsYWdzKSk7CiAJCWJyZWFrOwogCWNhc2UgRVRIVE9PTF9TRkxBR1M6CiAJCXJjID0gZXRodG9vbF9zZXRfdmFsdWUoZGV2LCB1c2VyYWRkciwKQEAgLTExMDAsNiArMTEyNCw5IEBACiAJY2FzZSBFVEhUT09MX1NHUk86CiAJCXJjID0gZXRodG9vbF9zZXRfZ3JvKGRldiwgdXNlcmFkZHIpOwogCQlicmVhazsKKwljYXNlIEVUSFRPT0xfRkxBU0hERVY6CisJCXJjID0gZXRodG9vbF9mbGFzaF9kZXZpY2UoZGV2LCB1c2VyYWRkcik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTExNiw3ICsxMTQzLDYgQEAKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfbGluayk7CiBFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3BfZ2V0X3NnKTsKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHNvKTsKLUVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9nZXRfdHhfY3N1bSk7CiBFWFBPUlRfU1lNQk9MKGV0aHRvb2xfb3Bfc2V0X3NnKTsKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9zZXRfdHNvKTsKIEVYUE9SVF9TWU1CT0woZXRodG9vbF9vcF9zZXRfdHhfY3N1bSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDE2M2I0ZjUuLmU1ODdlNjggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC02OTIsNzUgKzY5Miw3NCBAQAogCQloaC0+aGhfb3V0cHV0ID0gbmVpZ2gtPm9wcy0+aGhfb3V0cHV0OwogfQogCi1zdGF0aWMgdm9pZCBuZWlnaF9wZXJpb2RpY190aW1lcih1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyB2b2lkIG5laWdoX3BlcmlvZGljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gKHN0cnVjdCBuZWlnaF90YWJsZSAqKWFyZzsKKwlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmVpZ2hfdGFibGUsIGdjX3dvcmsud29yayk7CiAJc3RydWN0IG5laWdoYm91ciAqbiwgKipucDsKLQl1bnNpZ25lZCBsb25nIGV4cGlyZSwgbm93ID0gamlmZmllczsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCU5FSUdIX0NBQ0hFX1NUQVRfSU5DKHRibCwgcGVyaW9kaWNfZ2NfcnVucyk7CiAKLQl3cml0ZV9sb2NrKCZ0YmwtPmxvY2spOworCXdyaXRlX2xvY2tfYmgoJnRibC0+bG9jayk7CiAKIAkvKgogCSAqCXBlcmlvZGljYWxseSByZWNvbXB1dGUgUmVhY2hhYmxlVGltZSBmcm9tIHJhbmRvbSBmdW5jdGlvbgogCSAqLwogCi0JaWYgKHRpbWVfYWZ0ZXIobm93LCB0YmwtPmxhc3RfcmFuZCArIDMwMCAqIEhaKSkgeworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRibC0+bGFzdF9yYW5kICsgMzAwICogSFopKSB7CiAJCXN0cnVjdCBuZWlnaF9wYXJtcyAqcDsKLQkJdGJsLT5sYXN0X3JhbmQgPSBub3c7CisJCXRibC0+bGFzdF9yYW5kID0gamlmZmllczsKIAkJZm9yIChwID0gJnRibC0+cGFybXM7IHA7IHAgPSBwLT5uZXh0KQogCQkJcC0+cmVhY2hhYmxlX3RpbWUgPQogCQkJCW5laWdoX3JhbmRfcmVhY2hfdGltZShwLT5iYXNlX3JlYWNoYWJsZV90aW1lKTsKIAl9CiAKLQlucCA9ICZ0YmwtPmhhc2hfYnVja2V0c1t0YmwtPmhhc2hfY2hhaW5fZ2NdOwotCXRibC0+aGFzaF9jaGFpbl9nYyA9ICgodGJsLT5oYXNoX2NoYWluX2djICsgMSkgJiB0YmwtPmhhc2hfbWFzayk7CisJZm9yIChpID0gMCA7IGkgPD0gdGJsLT5oYXNoX21hc2s7IGkrKykgeworCQlucCA9ICZ0YmwtPmhhc2hfYnVja2V0c1tpXTsKIAotCXdoaWxlICgobiA9ICpucCkgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgc3RhdGU7CisJCXdoaWxlICgobiA9ICpucCkgIT0gTlVMTCkgeworCQkJdW5zaWduZWQgaW50IHN0YXRlOwogCi0JCXdyaXRlX2xvY2soJm4tPmxvY2spOworCQkJd3JpdGVfbG9jaygmbi0+bG9jayk7CiAKLQkJc3RhdGUgPSBuLT5udWRfc3RhdGU7Ci0JCWlmIChzdGF0ZSAmIChOVURfUEVSTUFORU5UIHwgTlVEX0lOX1RJTUVSKSkgeworCQkJc3RhdGUgPSBuLT5udWRfc3RhdGU7CisJCQlpZiAoc3RhdGUgJiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9JTl9USU1FUikpIHsKKwkJCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOworCQkJCWdvdG8gbmV4dF9lbHQ7CisJCQl9CisKKwkJCWlmICh0aW1lX2JlZm9yZShuLT51c2VkLCBuLT5jb25maXJtZWQpKQorCQkJCW4tPnVzZWQgPSBuLT5jb25maXJtZWQ7CisKKwkJCWlmIChhdG9taWNfcmVhZCgmbi0+cmVmY250KSA9PSAxICYmCisJCQkgICAgKHN0YXRlID09IE5VRF9GQUlMRUQgfHwKKwkJCSAgICAgdGltZV9hZnRlcihqaWZmaWVzLCBuLT51c2VkICsgbi0+cGFybXMtPmdjX3N0YWxldGltZSkpKSB7CisJCQkJKm5wID0gbi0+bmV4dDsKKwkJCQluLT5kZWFkID0gMTsKKwkJCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOworCQkJCW5laWdoX2NsZWFudXBfYW5kX3JlbGVhc2Uobik7CisJCQkJY29udGludWU7CisJCQl9CiAJCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOwotCQkJZ290byBuZXh0X2VsdDsKLQkJfQotCi0JCWlmICh0aW1lX2JlZm9yZShuLT51c2VkLCBuLT5jb25maXJtZWQpKQotCQkJbi0+dXNlZCA9IG4tPmNvbmZpcm1lZDsKLQotCQlpZiAoYXRvbWljX3JlYWQoJm4tPnJlZmNudCkgPT0gMSAmJgotCQkgICAgKHN0YXRlID09IE5VRF9GQUlMRUQgfHwKLQkJICAgICB0aW1lX2FmdGVyKG5vdywgbi0+dXNlZCArIG4tPnBhcm1zLT5nY19zdGFsZXRpbWUpKSkgewotCQkJKm5wID0gbi0+bmV4dDsKLQkJCW4tPmRlYWQgPSAxOwotCQkJd3JpdGVfdW5sb2NrKCZuLT5sb2NrKTsKLQkJCW5laWdoX2NsZWFudXBfYW5kX3JlbGVhc2Uobik7Ci0JCQljb250aW51ZTsKLQkJfQotCQl3cml0ZV91bmxvY2soJm4tPmxvY2spOwogCiBuZXh0X2VsdDoKLQkJbnAgPSAmbi0+bmV4dDsKKwkJCW5wID0gJm4tPm5leHQ7CisJCX0KKwkJLyoKKwkJICogSXQncyBmaW5lIHRvIHJlbGVhc2UgbG9jayBoZXJlLCBldmVuIGlmIGhhc2ggdGFibGUKKwkJICogZ3Jvd3Mgd2hpbGUgd2UgYXJlIHByZWVtcHRlZC4KKwkJICovCisJCXdyaXRlX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJCXdyaXRlX2xvY2tfYmgoJnRibC0+bG9jayk7CiAJfQotCiAJLyogQ3ljbGUgdGhyb3VnaCBhbGwgaGFzaCBidWNrZXRzIGV2ZXJ5IGJhc2VfcmVhY2hhYmxlX3RpbWUvMiB0aWNrcy4KIAkgKiBBUlAgZW50cnkgdGltZW91dHMgcmFuZ2UgZnJvbSAxLzIgYmFzZV9yZWFjaGFibGVfdGltZSB0byAzLzIKIAkgKiBiYXNlX3JlYWNoYWJsZV90aW1lLgogCSAqLwotCWV4cGlyZSA9IHRibC0+cGFybXMuYmFzZV9yZWFjaGFibGVfdGltZSA+PiAxOwotCWV4cGlyZSAvPSAodGJsLT5oYXNoX21hc2sgKyAxKTsKLQlpZiAoIWV4cGlyZSkKLQkJZXhwaXJlID0gMTsKLQotCWlmIChleHBpcmU+SFopCi0JCW1vZF90aW1lcigmdGJsLT5nY190aW1lciwgcm91bmRfamlmZmllcyhub3cgKyBleHBpcmUpKTsKLQllbHNlCi0JCW1vZF90aW1lcigmdGJsLT5nY190aW1lciwgbm93ICsgZXhwaXJlKTsKLQotCXdyaXRlX3VubG9jaygmdGJsLT5sb2NrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRibC0+Z2Nfd29yaywKKwkJCSAgICAgIHRibC0+cGFybXMuYmFzZV9yZWFjaGFibGVfdGltZSA+PiAxKTsKKwl3cml0ZV91bmxvY2tfYmgoJnRibC0+bG9jayk7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBuZWlnaF9tYXhfcHJvYmVzKHN0cnVjdCBuZWlnaGJvdXIgKm4pCkBAIC0xMzE2LDcgKzEzMTUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChwbmVpZ2hfZW5xdWV1ZSk7CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5laWdoX3Bhcm1zICpsb29rdXBfbmVpZ2hfcGFyYW1zKHN0cnVjdCBuZWlnaF90YWJsZSAqdGJsLAorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmVpZ2hfcGFybXMgKmxvb2t1cF9uZWlnaF9wYXJtcyhzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCwKIAkJCQkJCSAgICAgIHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IG5laWdoX3Bhcm1zICpwOwpAQCAtMTMzNyw3ICsxMzM2LDcgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CiAKLQlyZWYgPSBsb29rdXBfbmVpZ2hfcGFyYW1zKHRibCwgbmV0LCAwKTsKKwlyZWYgPSBsb29rdXBfbmVpZ2hfcGFybXModGJsLCBuZXQsIDApOwogCWlmICghcmVmKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMTQ0MiwxMCArMTQ0MSw4IEBACiAJZ2V0X3JhbmRvbV9ieXRlcygmdGJsLT5oYXNoX3JuZCwgc2l6ZW9mKHRibC0+aGFzaF9ybmQpKTsKIAogCXJ3bG9ja19pbml0KCZ0YmwtPmxvY2spOwotCXNldHVwX3RpbWVyKCZ0YmwtPmdjX3RpbWVyLCBuZWlnaF9wZXJpb2RpY190aW1lciwgKHVuc2lnbmVkIGxvbmcpdGJsKTsKLQl0YmwtPmdjX3RpbWVyLmV4cGlyZXMgID0gbm93ICsgMTsKLQlhZGRfdGltZXIoJnRibC0+Z2NfdGltZXIpOwotCisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmdGJsLT5nY193b3JrLCBuZWlnaF9wZXJpb2RpY193b3JrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRibC0+Z2Nfd29yaywgdGJsLT5wYXJtcy5yZWFjaGFibGVfdGltZSk7CiAJc2V0dXBfdGltZXIoJnRibC0+cHJveHlfdGltZXIsIG5laWdoX3Byb3h5X3Byb2Nlc3MsICh1bnNpZ25lZCBsb25nKXRibCk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdF9jbGFzcygmdGJsLT5wcm94eV9xdWV1ZSwKIAkJCSZuZWlnaF90YWJsZV9wcm94eV9xdWV1ZV9jbGFzcyk7CkBAIC0xNDgyLDcgKzE0NzksOCBAQAogCXN0cnVjdCBuZWlnaF90YWJsZSAqKnRwOwogCiAJLyogSXQgaXMgbm90IGNsZWFuLi4uIEZpeCBpdCB0byB1bmxvYWQgSVB2NiBtb2R1bGUgc2FmZWx5ICovCi0JZGVsX3RpbWVyX3N5bmMoJnRibC0+Z2NfdGltZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnRibC0+Z2Nfd29yayk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlkZWxfdGltZXJfc3luYygmdGJsLT5wcm94eV90aW1lcik7CiAJcG5laWdoX3F1ZXVlX3B1cmdlKCZ0YmwtPnByb3h5X3F1ZXVlKTsKIAluZWlnaF9pZmRvd24odGJsLCBOVUxMKTsKQEAgLTE3NTIsNyArMTc1MCw2IEBACiAJCQkubmR0Y19sYXN0X3JhbmQJCT0gamlmZmllc190b19tc2VjcyhyYW5kX2RlbHRhKSwKIAkJCS5uZHRjX2hhc2hfcm5kCQk9IHRibC0+aGFzaF9ybmQsCiAJCQkubmR0Y19oYXNoX21hc2sJCT0gdGJsLT5oYXNoX21hc2ssCi0JCQkubmR0Y19oYXNoX2NoYWluX2djCT0gdGJsLT5oYXNoX2NoYWluX2djLAogCQkJLm5kdGNfcHJveHlfcWxlbgk9IHRibC0+cHJveHlfcXVldWUucWxlbiwKIAkJfTsKIApAQCAtMTkwNiw3ICsxOTAzLDcgQEAKIAkJaWYgKHRicFtORFRQQV9JRklOREVYXSkKIAkJCWlmaW5kZXggPSBubGFfZ2V0X3UzMih0YnBbTkRUUEFfSUZJTkRFWF0pOwogCi0JCXAgPSBsb29rdXBfbmVpZ2hfcGFyYW1zKHRibCwgbmV0LCBpZmluZGV4KTsKKwkJcCA9IGxvb2t1cF9uZWlnaF9wYXJtcyh0YmwsIG5ldCwgaWZpbmRleCk7CiAJCWlmIChwID09IE5VTEwpIHsKIAkJCWVyciA9IC1FTk9FTlQ7CiAJCQlnb3RvIGVycm91dF90YmxfbG9jazsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggMzk5NDY4MC4uYWQ5MWU5ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqb3BlcnN0YXRlc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG9wZXJzdGF0ZXNbXSA9IHsKIAkidW5rbm93biIsCiAJIm5vdHByZXNlbnQiLCAvKiBjdXJyZW50bHkgdW51c2VkICovCiAJImRvd24iLApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jIGIvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCmluZGV4IDE5NzI4MzAuLjFjMWFmMjcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYworKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTYsNiArNiw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogCkBAIC0xMjcsNyArMTI5LDcgQEAKIAlydiA9IHNldHVwX25ldChuZXQpOwogCWlmIChydiA9PSAwKSB7CiAJCXJ0bmxfbG9jaygpOwotCQlsaXN0X2FkZF90YWlsKCZuZXQtPmxpc3QsICZuZXRfbmFtZXNwYWNlX2xpc3QpOworCQlsaXN0X2FkZF90YWlsX3JjdSgmbmV0LT5saXN0LCAmbmV0X25hbWVzcGFjZV9saXN0KTsKIAkJcnRubF91bmxvY2soKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZuZXRfbXV0ZXgpOwpAQCAtMTU2LDkgKzE1OCwxNiBAQAogCiAJLyogRG9uJ3QgbGV0IGFueW9uZSBlbHNlIGZpbmQgdXMuICovCiAJcnRubF9sb2NrKCk7Ci0JbGlzdF9kZWwoJm5ldC0+bGlzdCk7CisJbGlzdF9kZWxfcmN1KCZuZXQtPmxpc3QpOwogCXJ0bmxfdW5sb2NrKCk7CiAKKwkvKgorCSAqIEFub3RoZXIgQ1BVIG1pZ2h0IGJlIHJjdS1pdGVyYXRpbmcgdGhlIGxpc3QsIHdhaXQgZm9yIGl0LgorCSAqIFRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIGNhbGxpbmcgdGhlIGV4aXQoKSBub3RpZmllcnMsIHNvCisJICogdGhlIHJjdV9iYXJyaWVyKCkgYmVsb3cgaXNuJ3Qgc3VmZmljaWVudCBhbG9uZS4KKwkgKi8KKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwogCS8qIFJ1biBhbGwgb2YgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIGV4aXQgbWV0aG9kcyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShvcHMsICZwZXJuZXRfbGlzdCwgbGlzdCkgewogCQlpZiAob3BzLT5leGl0KQpAQCAtMTkzLDYgKzIwMiwyNiBAQAogfQogI2VuZGlmCiAKK3N0cnVjdCBuZXQgKmdldF9uZXRfbnNfYnlfcGlkKHBpZF90IHBpZCkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisKKwkvKiBMb29rdXAgdGhlIG5ldHdvcmsgbmFtZXNwYWNlICovCisJbmV0ID0gRVJSX1BUUigtRVNSQ0gpOworCXJjdV9yZWFkX2xvY2soKTsKKwl0c2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOworCWlmICh0c2spIHsKKwkJc3RydWN0IG5zcHJveHkgKm5zcHJveHk7CisJCW5zcHJveHkgPSB0YXNrX25zcHJveHkodHNrKTsKKwkJaWYgKG5zcHJveHkpCisJCQluZXQgPSBnZXRfbmV0KG5zcHJveHktPm5ldF9ucyk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBuZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZXRfbmV0X25zX2J5X3BpZCk7CisKIHN0YXRpYyBpbnQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5ldF9nZW5lcmljICpuZzsKQEAgLTIxOSw3ICsyNDgsNyBAQAogCQlwYW5pYygiQ291bGQgbm90IHNldHVwIHRoZSBpbml0aWFsIG5ldHdvcmsgbmFtZXNwYWNlIik7CiAKIAlydG5sX2xvY2soKTsKLQlsaXN0X2FkZF90YWlsKCZpbml0X25ldC5saXN0LCAmbmV0X25hbWVzcGFjZV9saXN0KTsKKwlsaXN0X2FkZF90YWlsX3JjdSgmaW5pdF9uZXQubGlzdCwgJm5ldF9uYW1lc3BhY2VfbGlzdCk7CiAJcnRubF91bmxvY2soKTsKIAogCW11dGV4X3VubG9jaygmbmV0X211dGV4KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCAxYjc2ZWIxLi4wYjRkMGQzIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC05LDYgKzksNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyICBSZWQgSGF0LCBJbmMuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTUwLDYgKzUxLDkgQEAKIHN0YXRpYyB2b2lkIHphcF9jb21wbGV0aW9uX3F1ZXVlKHZvaWQpOwogc3RhdGljIHZvaWQgYXJwX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGNhcnJpZXJfdGltZW91dCA9IDQ7Cittb2R1bGVfcGFyYW0oY2Fycmllcl90aW1lb3V0LCB1aW50LCAwNjQ0KTsKKwogc3RhdGljIHZvaWQgcXVldWVfcHJvY2VzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0KQEAgLTczNyw3ICs3NDEsNyBAQAogCQl9CiAKIAkJYXRsZWFzdCA9IGppZmZpZXMgKyBIWi8xMDsKLQkJYXRtb3N0ID0gamlmZmllcyArIDQqSFo7CisJCWF0bW9zdCA9IGppZmZpZXMgKyBjYXJyaWVyX3RpbWVvdXQgKiBIWjsKIAkJd2hpbGUgKCFuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7CiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBhdG1vc3QpKSB7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDE5YjhjMjAuLjBiY2VjYmYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0xMzEsNiArMTMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0xNjIsMTQgKzE2MywxMyBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CQkvKiBkb19kaXYgKi8KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KIAotI2RlZmluZSBWRVJTSU9OICAicGt0Z2VuIHYyLjcwOiBQYWNrZXQgR2VuZXJhdG9yIGZvciBwYWNrZXQgcGVyZm9ybWFuY2UgdGVzdGluZy5cbiIKLQorI2RlZmluZSBWRVJTSU9OIAkiMi43MiIKICNkZWZpbmUgSVBfTkFNRV9TWiAzMgogI2RlZmluZSBNQVhfTVBMU19MQUJFTFMgMTYgLyogVGhpcyBpcyB0aGUgbWF4IGxhYmVsIHN0YWNrIGRlcHRoICovCiAjZGVmaW5lIE1QTFNfU1RBQ0tfQk9UVE9NIGh0b25sKDB4MDAwMDAxMDApCkBAIC0yMDYsNyArMjA2LDcgQEAKICNkZWZpbmUgUEtUR0VOX01BR0lDIDB4YmU5YmU5NTUKICNkZWZpbmUgUEdfUFJPQ19ESVIgInBrdGdlbiIKICNkZWZpbmUgUEdDVFJMCSAgICAicGdjdHJsIgotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGdfcHJvY19kaXIgPSBOVUxMOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGdfcHJvY19kaXI7CiAKICNkZWZpbmUgTUFYX0NGTE9XUyAgNjU1MzYKIApAQCAtMjMxLDkgKzIzMSw5IEBACiAJICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsJLyogcHJvYyBmaWxlICovCiAJc3RydWN0IHBrdGdlbl90aHJlYWQgKnBnX3RocmVhZDsvKiB0aGUgb3duZXIgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBVc2VkIGZvciBjaGFpbmluZyBpbiB0aGUgdGhyZWFkJ3MgcnVuLXF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogY2hhaW5pbmcgaW4gdGhlIHRocmVhZCdzIHJ1bi1xdWV1ZSAqLwogCi0JaW50IHJ1bm5pbmc7CQkvKiBpZiB0aGlzIGNoYW5nZXMgdG8gZmFsc2UsIHRoZSB0ZXN0IHdpbGwgc3RvcCAqLworCWludCBydW5uaW5nOwkJLyogaWYgZmFsc2UsIHRoZSB0ZXN0IHdpbGwgc3RvcCAqLwogCiAJLyogSWYgbWluICE9IG1heCwgdGhlbiB3ZSB3aWxsIGVpdGhlciBkbyBhIGxpbmVhciBpdGVyYXRpb24sIG9yCiAJICogd2Ugd2lsbCBkbyBhIHJhbmRvbSBzZWxlY3Rpb24gZnJvbSB3aXRoaW4gdGhlIHJhbmdlLgpAQCAtMjQ2LDMzICsyNDYsMzcgQEAKIAlpbnQgbWF4X3BrdF9zaXplOwkvKiA9IEVUSF9aTEVOOyAqLwogCWludCBwa3Rfb3ZlcmhlYWQ7CS8qIG92ZXJoZWFkIGZvciBNUExTLCBWTEFOcywgSVBTRUMgZXRjICovCiAJaW50IG5mcmFnczsKLQlfX3UzMiBkZWxheV91czsJCS8qIERlZmF1bHQgZGVsYXkgKi8KLQlfX3UzMiBkZWxheV9uczsKKwl1NjQgZGVsYXk7CQkvKiBuYW5vLXNlY29uZHMgKi8KKwogCV9fdTY0IGNvdW50OwkJLyogRGVmYXVsdCBObyBwYWNrZXRzIHRvIHNlbmQgKi8KIAlfX3U2NCBzb2ZhcjsJCS8qIEhvdyBtYW55IHBrdHMgd2UndmUgc2VudCBzbyBmYXIgKi8KIAlfX3U2NCB0eF9ieXRlczsJCS8qIEhvdyBtYW55IGJ5dGVzIHdlJ3ZlIHRyYW5zbWl0dGVkICovCi0JX191NjQgZXJyb3JzOwkJLyogRXJyb3JzIHdoZW4gdHJ5aW5nIHRvIHRyYW5zbWl0LCBwa3RzIHdpbGwgYmUgcmUtc2VudCAqLworCV9fdTY0IGVycm9yczsJCS8qIEVycm9ycyB3aGVuIHRyeWluZyB0byB0cmFuc21pdCwKKwkJCQkgICBwa3RzIHdpbGwgYmUgcmUtc2VudCAqLwogCiAJLyogcnVudGltZSBjb3VudGVycyByZWxhdGluZyB0byBjbG9uZV9za2IgKi8KLQlfX3U2NCBuZXh0X3R4X3VzOwkvKiB0aW1lc3RhbXAgb2Ygd2hlbiB0byB0eCBuZXh0ICovCi0JX191MzIgbmV4dF90eF9uczsKIAogCV9fdTY0IGFsbG9jYXRlZF9za2JzOwogCV9fdTMyIGNsb25lX2NvdW50OwogCWludCBsYXN0X29rOwkJLyogV2FzIGxhc3Qgc2tiIHNlbnQ/Ci0JCQkJICogT3IgYSBmYWlsZWQgdHJhbnNtaXQgb2Ygc29tZSBzb3J0PyAgVGhpcyB3aWxsIGtlZXAKLQkJCQkgKiBzZXF1ZW5jZSBudW1iZXJzIGluIG9yZGVyLCBmb3IgZXhhbXBsZS4KKwkJCQkgKiBPciBhIGZhaWxlZCB0cmFuc21pdCBvZiBzb21lIHNvcnQ/CisJCQkJICogVGhpcyB3aWxsIGtlZXAgc2VxdWVuY2UgbnVtYmVycyBpbiBvcmRlcgogCQkJCSAqLwotCV9fdTY0IHN0YXJ0ZWRfYXQ7CS8qIG1pY3JvLXNlY29uZHMgKi8KLQlfX3U2NCBzdG9wcGVkX2F0OwkvKiBtaWNyby1zZWNvbmRzICovCi0JX191NjQgaWRsZV9hY2M7CQkvKiBtaWNyby1zZWNvbmRzICovCisJa3RpbWVfdCBuZXh0X3R4OworCWt0aW1lX3Qgc3RhcnRlZF9hdDsKKwlrdGltZV90IHN0b3BwZWRfYXQ7CisJdTY0CWlkbGVfYWNjOwkvKiBuYW5vLXNlY29uZHMgKi8KKwogCV9fdTMyIHNlcV9udW07CiAKLQlpbnQgY2xvbmVfc2tiOwkJLyogVXNlIG11bHRpcGxlIFNLQnMgZHVyaW5nIHBhY2tldCBnZW4uICBJZiB0aGlzIG51bWJlcgotCQkJCSAqIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHRoYXQgbWFueSBjb3BpZXMgb2YgdGhlIHNhbWUKLQkJCQkgKiBwYWNrZXQgd2lsbCBiZSBzZW50IGJlZm9yZSBhIG5ldyBwYWNrZXQgaXMgYWxsb2NhdGVkLgotCQkJCSAqIEZvciBpbnN0YW5jZSwgaWYgeW91IHdhbnQgdG8gc2VuZCAxMDI0IGlkZW50aWNhbCBwYWNrZXRzCi0JCQkJICogYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHBhY2tldCwgc2V0IGNsb25lX3NrYiB0byAxMDI0LgorCWludCBjbG9uZV9za2I7CQkvKgorCQkJCSAqIFVzZSBtdWx0aXBsZSBTS0JzIGR1cmluZyBwYWNrZXQgZ2VuLgorCQkJCSAqIElmIHRoaXMgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuCisJCQkJICogdGhhdCBtYW55IGNvcGllcyBvZiB0aGUgc2FtZSBwYWNrZXQgd2lsbCBiZQorCQkJCSAqIHNlbnQgYmVmb3JlIGEgbmV3IHBhY2tldCBpcyBhbGxvY2F0ZWQuCisJCQkJICogSWYgeW91IHdhbnQgdG8gc2VuZCAxMDI0IGlkZW50aWNhbCBwYWNrZXRzCisJCQkJICogYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHBhY2tldCwKKwkJCQkgKiBzZXQgY2xvbmVfc2tiIHRvIDEwMjQuCiAJCQkJICovCiAKIAljaGFyIGRzdF9taW5bSVBfTkFNRV9TWl07CS8qIElQLCBpZSAxLjIuMy40ICovCkBAIC0zMDQsOCArMzA4LDEwIEBACiAJX191MTYgdWRwX2RzdF9tYXg7CS8qIGV4Y2x1c2l2ZSwgZGVzdCBVRFAgcG9ydCAqLwogCiAJLyogRFNDUCArIEVDTiAqLwotCV9fdTggdG9zOyAgICAgICAgICAgIC8qIHNpeCBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgKGZvcm1lcikgSVB2NCBUT1MgYXJlIGZvciBkc2NwIGNvZGVwb2ludCAqLwotCV9fdTggdHJhZmZpY19jbGFzczsgIC8qIGRpdHRvIGZvciB0aGUgKGZvcm1lcikgVHJhZmZpYyBDbGFzcyBpbiBJUHY2IChzZWUgUkZDIDMyNjAsIHNlYy4gNCkgKi8KKwlfX3U4IHRvczsgICAgICAgICAgICAvKiBzaXggTVNCIG9mIChmb3JtZXIpIElQdjQgVE9TCisJCQkJYXJlIGZvciBkc2NwIGNvZGVwb2ludCAqLworCV9fdTggdHJhZmZpY19jbGFzczsgIC8qIGRpdHRvIGZvciB0aGUgKGZvcm1lcikgVHJhZmZpYyBDbGFzcyBpbiBJUHY2CisJCQkJKHNlZSBSRkMgMzI2MCwgc2VjLiA0KSAqLwogCiAJLyogTVBMUyAqLwogCXVuc2lnbmVkIG5yX2xhYmVsczsJLyogRGVwdGggb2Ygc3RhY2ssIDAgPSBubyBNUExTICovCkBAIC0zNDYsMTUgKzM1MiwxNyBAQAogCSAqLwogCV9fdTE2IHBhZDsJCS8qIHBhZCBvdXQgdGhlIGhoIHN0cnVjdCB0byBhbiBldmVuIDE2IGJ5dGVzICovCiAKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwkvKiBza2Igd2UgYXJlIHRvIHRyYW5zbWl0IG5leHQsIG1haW5seSB1c2VkIGZvciB3aGVuIHdlCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsJLyogc2tiIHdlIGFyZSB0byB0cmFuc21pdCBuZXh0LCB1c2VkIGZvciB3aGVuIHdlCiAJCQkJICogYXJlIHRyYW5zbWl0dGluZyB0aGUgc2FtZSBvbmUgbXVsdGlwbGUgdGltZXMKIAkJCQkgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldjsJLyogVGhlIG91dC1nb2luZyBkZXZpY2UuICBOb3RlIHRoYXQgdGhlIGRldmljZSBzaG91bGQKLQkJCQkJICogaGF2ZSBpdCdzIHBnX2luZm8gcG9pbnRlciBwb2ludGluZyBiYWNrIHRvIHRoaXMKLQkJCQkJICogZGV2aWNlLiAgVGhpcyB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcwotCQkJCQkgKiB0aGUgb3V0LWdvaW5nIGRldmljZSBuYW1lIChub3Qgd2hlbiB0aGUgaW5qZWN0IGlzCi0JCQkJCSAqIHN0YXJ0ZWQgYXMgaXQgdXNlZCB0byBkby4pCi0JCQkJCSAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpvZGV2OyAvKiBUaGUgb3V0LWdvaW5nIGRldmljZS4KKwkJCQkgICogTm90ZSB0aGF0IHRoZSBkZXZpY2Ugc2hvdWxkIGhhdmUgaXQncworCQkJCSAgKiBwZ19pbmZvIHBvaW50ZXIgcG9pbnRpbmcgYmFjayB0byB0aGlzCisJCQkJICAqIGRldmljZS4KKwkJCQkgICogU2V0IHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIHRoZSBvdXQtZ29pbmcKKwkJCQkgICogZGV2aWNlIG5hbWUgKG5vdCB3aGVuIHRoZSBpbmplY3QgaXMKKwkJCQkgICogc3RhcnRlZCBhcyBpdCB1c2VkIHRvIGRvLikKKwkJCQkgICovCiAJc3RydWN0IGZsb3dfc3RhdGUgKmZsb3dzOwogCXVuc2lnbmVkIGNmbG93czsJLyogQ29uY3VycmVudCBmbG93cyAoY29uZmlnKSAqLwogCXVuc2lnbmVkIGxmbG93OwkJLyogRmxvdyBsZW5ndGggIChjb25maWcpICovCkBAIC0zNzksMTMgKzM4NywxNCBAQAogfTsKIAogc3RydWN0IHBrdGdlbl90aHJlYWQgewotCXNwaW5sb2NrX3QgaWZfbG9jazsKKwlzcGlubG9ja190IGlmX2xvY2s7CQkvKiBmb3IgbGlzdCBvZiBkZXZpY2VzICovCiAJc3RydWN0IGxpc3RfaGVhZCBpZl9saXN0OwkvKiBBbGwgZGV2aWNlIGhlcmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHRoX2xpc3Q7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJY2hhciByZXN1bHRbNTEyXTsKIAotCS8qIEZpZWxkIGZvciB0aHJlYWQgdG8gcmVjZWl2ZSAicG9zdGVkIiBldmVudHMgdGVybWluYXRlLCBzdG9wIGlmcyBldGMuICovCisJLyogRmllbGQgZm9yIHRocmVhZCB0byByZWNlaXZlICJwb3N0ZWQiIGV2ZW50cyB0ZXJtaW5hdGUsCisJICAgc3RvcCBpZnMgZXRjLiAqLwogCiAJdTMyIGNvbnRyb2w7CiAJaW50IGNwdTsKQEAgLTM5NywyNCArNDA2LDIyIEBACiAjZGVmaW5lIFJFTU9WRSAxCiAjZGVmaW5lIEZJTkQgICAwCiAKLS8qKiBDb252ZXJ0IHRvIG1pY3JvLXNlY29uZHMgKi8KLXN0YXRpYyBpbmxpbmUgX191NjQgdHZfdG9fdXMoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KQorc3RhdGljIGlubGluZSBrdGltZV90IGt0aW1lX25vdyh2b2lkKQogewotCV9fdTY0IHVzID0gdHYtPnR2X3VzZWM7Ci0JdXMgKz0gKF9fdTY0KSB0di0+dHZfc2VjICogKF9fdTY0KSAxMDAwMDAwOwotCXJldHVybiB1czsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJa3RpbWVfZ2V0X3RzKCZ0cyk7CisKKwlyZXR1cm4gdGltZXNwZWNfdG9fa3RpbWUodHMpOwogfQogCi1zdGF0aWMgX191NjQgZ2V0Q3VyVXModm9pZCkKKy8qIFRoaXMgd29ya3MgZXZlbiBpZiAzMiBiaXQgYmVjYXVzZSBvZiBjYXJlZnVsIGJ5dGUgb3JkZXIgY2hvaWNlICovCitzdGF0aWMgaW5saW5lIGludCBrdGltZV9sdChjb25zdCBrdGltZV90IGNtcDEsIGNvbnN0IGt0aW1lX3QgY21wMikKIHsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKLQlyZXR1cm4gdHZfdG9fdXMoJnR2KTsKKwlyZXR1cm4gY21wMS50djY0IDwgY21wMi50djY0OwogfQogCi0vKiBvbGQgaW5jbHVkZSBlbmQgKi8KLQotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBWRVJTSU9OOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0KKwkicGt0Z2VuICIgVkVSU0lPTiAiOiBQYWNrZXQgR2VuZXJhdG9yIGZvciBwYWNrZXQgcGVyZm9ybWFuY2UgdGVzdGluZy5cbiI7CiAKIHN0YXRpYyBpbnQgcGt0Z2VuX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIHN0cnVjdCBwa3RnZW5fZGV2ICppKTsKIHN0YXRpYyBpbnQgcGt0Z2VuX2FkZF9kZXZpY2Uoc3RydWN0IHBrdGdlbl90aHJlYWQgKnQsIGNvbnN0IGNoYXIgKmlmbmFtZSk7CkBAIC00MjQsNyArNDMxLDcgQEAKIHN0YXRpYyB2b2lkIHBrdGdlbl9ydW5fYWxsX3RocmVhZHModm9pZCk7CiBzdGF0aWMgdm9pZCBwa3RnZW5fcmVzZXRfYWxsX3RocmVhZHModm9pZCk7CiBzdGF0aWMgdm9pZCBwa3RnZW5fc3RvcF9hbGxfdGhyZWFkc19pZnModm9pZCk7Ci1zdGF0aWMgaW50IHBrdGdlbl9zdG9wX2RldmljZShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7CisKIHN0YXRpYyB2b2lkIHBrdGdlbl9zdG9wKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KTsKIHN0YXRpYyB2b2lkIHBrdGdlbl9jbGVhcl9jb3VudGVycyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2Rldik7CiAKQEAgLTQzMiwxMCArNDM5LDEwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZtdF9pcDYoY2hhciAqcywgY29uc3QgY2hhciBpcFsxNl0pOwogCiAvKiBNb2R1bGUgcGFyYW1ldGVycywgZGVmYXVsdHMuICovCi1zdGF0aWMgaW50IHBnX2NvdW50X2QgPSAxMDAwOwkvKiAxMDAwIHBrdHMgYnkgZGVmYXVsdCAqLwotc3RhdGljIGludCBwZ19kZWxheV9kOwotc3RhdGljIGludCBwZ19jbG9uZV9za2JfZDsKLXN0YXRpYyBpbnQgZGVidWc7CitzdGF0aWMgaW50IHBnX2NvdW50X2QgX19yZWFkX21vc3RseSA9IDEwMDA7CitzdGF0aWMgaW50IHBnX2RlbGF5X2QgX19yZWFkX21vc3RseTsKK3N0YXRpYyBpbnQgcGdfY2xvbmVfc2tiX2QgIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW50IGRlYnVnICBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHBrdGdlbl90aHJlYWRfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKHBrdGdlbl90aHJlYWRzKTsKQEAgLTQ1MSwxMiArNDU4LDEyIEBACiAKIHN0YXRpYyBpbnQgcGdjdHJsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc2VxX3B1dHMoc2VxLCBWRVJTSU9OKTsKKwlzZXFfcHV0cyhzZXEsIHZlcnNpb24pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBwZ2N0cmxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3N0YXRpYyBzc2l6ZV90IHBnY3RybF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgZXJyID0gMDsKIAljaGFyIGRhdGFbMTI4XTsKQEAgLTUwOSwxMCArNTE2LDkgQEAKIAogc3RhdGljIGludCBwa3RnZW5faWZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiA9IHNlcS0+cHJpdmF0ZTsKLQlfX3U2NCBzYTsKLQlfX3U2NCBzdG9wcGVkOwotCV9fdTY0IG5vdyA9IGdldEN1clVzKCk7CisJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYgPSBzZXEtPnByaXZhdGU7CisJa3RpbWVfdCBzdG9wcGVkOworCXU2NCBpZGxlOwogCiAJc2VxX3ByaW50ZihzZXEsCiAJCSAgICJQYXJhbXM6IGNvdW50ICVsbHUgIG1pbl9wa3Rfc2l6ZTogJXUgIG1heF9wa3Rfc2l6ZTogJXVcbiIsCkBAIC01MjAsOSArNTI2LDggQEAKIAkJICAgcGt0X2Rldi0+bWF4X3BrdF9zaXplKTsKIAogCXNlcV9wcmludGYoc2VxLAotCQkgICAiICAgICBmcmFnczogJWQgIGRlbGF5OiAldSAgY2xvbmVfc2tiOiAlZCAgaWZuYW1lOiAlc1xuIiwKLQkJICAgcGt0X2Rldi0+bmZyYWdzLAotCQkgICAxMDAwICogcGt0X2Rldi0+ZGVsYXlfdXMgKyBwa3RfZGV2LT5kZWxheV9ucywKKwkJICAgIiAgICAgZnJhZ3M6ICVkICBkZWxheTogJWxsdSAgY2xvbmVfc2tiOiAlZCAgaWZuYW1lOiAlc1xuIiwKKwkJICAgcGt0X2Rldi0+bmZyYWdzLCAodW5zaWduZWQgbG9uZyBsb25nKSBwa3RfZGV2LT5kZWxheSwKIAkJICAgcGt0X2Rldi0+Y2xvbmVfc2tiLCBwa3RfZGV2LT5vZGV2LT5uYW1lKTsKIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiIsIHBrdF9kZXYtPmNmbG93cywKQEAgLTU0OSwxMSArNTU0LDE0IEBACiAJCQkgICAiICAgICBkYWRkcjogJXMgIG1pbl9kYWRkcjogJXMgIG1heF9kYWRkcjogJXNcbiIsIGIxLAogCQkJICAgYjIsIGIzKTsKIAotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXNlcV9wcmludGYoc2VxLAotCQkJICAgIiAgICAgZHN0X21pbjogJXMgIGRzdF9tYXg6ICVzXG4gICAgIHNyY19taW46ICVzICBzcmNfbWF4OiAlc1xuIiwKLQkJCSAgIHBrdF9kZXYtPmRzdF9taW4sIHBrdF9kZXYtPmRzdF9tYXgsIHBrdF9kZXYtPnNyY19taW4sCi0JCQkgICBwa3RfZGV2LT5zcmNfbWF4KTsKKwkJCSAgICIgICAgIGRzdF9taW46ICVzICBkc3RfbWF4OiAlc1xuIiwKKwkJCSAgIHBrdF9kZXYtPmRzdF9taW4sIHBrdF9kZXYtPmRzdF9tYXgpOworCQlzZXFfcHJpbnRmKHNlcSwKKwkJCSAgICIgICAgICAgIHNyY19taW46ICVzICBzcmNfbWF4OiAlc1xuIiwKKwkJCSAgIHBrdF9kZXYtPnNyY19taW4sIHBrdF9kZXYtPnNyY19tYXgpOworCX0KIAogCXNlcV9wdXRzKHNlcSwgIiAgICAgc3JjX21hYzogIik7CiAKQEAgLTU2NSw3ICs1NzMsOCBAQAogCXNlcV9wcmludGYoc2VxLCAiJXBNXG4iLCBwa3RfZGV2LT5kc3RfbWFjKTsKIAogCXNlcV9wcmludGYoc2VxLAotCQkgICAiICAgICB1ZHBfc3JjX21pbjogJWQgIHVkcF9zcmNfbWF4OiAlZCAgdWRwX2RzdF9taW46ICVkICB1ZHBfZHN0X21heDogJWRcbiIsCisJCSAgICIgICAgIHVkcF9zcmNfbWluOiAlZCAgdWRwX3NyY19tYXg6ICVkIgorCQkgICAiICB1ZHBfZHN0X21pbjogJWQgIHVkcF9kc3RfbWF4OiAlZFxuIiwKIAkJICAgcGt0X2Rldi0+dWRwX3NyY19taW4sIHBrdF9kZXYtPnVkcF9zcmNfbWF4LAogCQkgICBwa3RfZGV2LT51ZHBfZHN0X21pbiwgcGt0X2Rldi0+dWRwX2RzdF9tYXgpOwogCkBAIC01ODEsMjMgKzU5MCwyMSBAQAogCQkJCSAgIGkgPT0gcGt0X2Rldi0+bnJfbGFiZWxzLTEgPyAiXG4iIDogIiwgIik7CiAJfQogCi0JaWYgKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKSB7CisJaWYgKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgdmxhbl9pZDogJXUgIHZsYW5fcDogJXUgIHZsYW5fY2ZpOiAldVxuIiwKLQkJCSAgIHBrdF9kZXYtPnZsYW5faWQsIHBrdF9kZXYtPnZsYW5fcCwgcGt0X2Rldi0+dmxhbl9jZmkpOwotCX0KKwkJCSAgIHBrdF9kZXYtPnZsYW5faWQsIHBrdF9kZXYtPnZsYW5fcCwKKwkJCSAgIHBrdF9kZXYtPnZsYW5fY2ZpKTsKIAotCWlmIChwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpIHsKKwlpZiAocGt0X2Rldi0+c3ZsYW5faWQgIT0gMHhmZmZmKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgc3ZsYW5faWQ6ICV1ICB2bGFuX3A6ICV1ICB2bGFuX2NmaTogJXVcbiIsCi0JCQkgICBwa3RfZGV2LT5zdmxhbl9pZCwgcGt0X2Rldi0+c3ZsYW5fcCwgcGt0X2Rldi0+c3ZsYW5fY2ZpKTsKLQl9CisJCQkgICBwa3RfZGV2LT5zdmxhbl9pZCwgcGt0X2Rldi0+c3ZsYW5fcCwKKwkJCSAgIHBrdF9kZXYtPnN2bGFuX2NmaSk7CiAKLQlpZiAocGt0X2Rldi0+dG9zKSB7CisJaWYgKHBrdF9kZXYtPnRvcykKIAkJc2VxX3ByaW50ZihzZXEsICIgICAgIHRvczogMHglMDJ4XG4iLCBwa3RfZGV2LT50b3MpOwotCX0KIAotCWlmIChwa3RfZGV2LT50cmFmZmljX2NsYXNzKSB7CisJaWYgKHBrdF9kZXYtPnRyYWZmaWNfY2xhc3MpCiAJCXNlcV9wcmludGYoc2VxLCAiICAgICB0cmFmZmljX2NsYXNzOiAweCUwMnhcbiIsIHBrdF9kZXYtPnRyYWZmaWNfY2xhc3MpOwotCX0KIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBGbGFnczogIik7CiAKQEAgLTY1NCwxNyArNjYxLDIxIEBACiAKIAlzZXFfcHV0cyhzZXEsICJcbiIpOwogCi0Jc2EgPSBwa3RfZGV2LT5zdGFydGVkX2F0OwotCXN0b3BwZWQgPSBwa3RfZGV2LT5zdG9wcGVkX2F0OwotCWlmIChwa3RfZGV2LT5ydW5uaW5nKQotCQlzdG9wcGVkID0gbm93OwkvKiBub3QgcmVhbGx5IHN0b3BwZWQsIG1vcmUgbGlrZSBsYXN0LXJ1bm5pbmctYXQgKi8KKwkvKiBub3QgcmVhbGx5IHN0b3BwZWQsIG1vcmUgbGlrZSBsYXN0LXJ1bm5pbmctYXQgKi8KKwlzdG9wcGVkID0gcGt0X2Rldi0+cnVubmluZyA/IGt0aW1lX25vdygpIDogcGt0X2Rldi0+c3RvcHBlZF9hdDsKKwlpZGxlID0gcGt0X2Rldi0+aWRsZV9hY2M7CisJZG9fZGl2KGlkbGUsIE5TRUNfUEVSX1VTRUMpOwogCiAJc2VxX3ByaW50ZihzZXEsCi0JCSAgICJDdXJyZW50OlxuICAgICBwa3RzLXNvZmFyOiAlbGx1ICBlcnJvcnM6ICVsbHVcbiAgICAgc3RhcnRlZDogJWxsdXVzICBzdG9wcGVkOiAlbGx1dXMgaWRsZTogJWxsdXVzXG4iLAorCQkgICAiQ3VycmVudDpcbiAgICAgcGt0cy1zb2ZhcjogJWxsdSAgZXJyb3JzOiAlbGx1XG4iLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPnNvZmFyLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPmVycm9ycywgKHVuc2lnbmVkIGxvbmcgbG9uZylzYSwKLQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdG9wcGVkLAotCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBrdF9kZXYtPmlkbGVfYWNjKTsKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwa3RfZGV2LT5lcnJvcnMpOworCisJc2VxX3ByaW50ZihzZXEsCisJCSAgICIgICAgIHN0YXJ0ZWQ6ICVsbHV1cyAgc3RvcHBlZDogJWxsdXVzIGlkbGU6ICVsbHV1c1xuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykga3RpbWVfdG9fdXMocGt0X2Rldi0+c3RhcnRlZF9hdCksCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGt0aW1lX3RvX3VzKHN0b3BwZWQpLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBpZGxlKTsKIAogCXNlcV9wcmludGYoc2VxLAogCQkgICAiICAgICBzZXFfbnVtOiAlZCAgY3VyX2RzdF9tYWNfb2Zmc2V0OiAlZCAgY3VyX3NyY19tYWNfb2Zmc2V0OiAlZFxuIiwKQEAgLTY5Niw3ICs3MDcsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgaGV4MzJfYXJnKGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgdW5zaWduZWQgbG9uZyBtYXhsZW4sIF9fdTMyICpudW0pCitzdGF0aWMgaW50IGhleDMyX2FyZyhjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsIHVuc2lnbmVkIGxvbmcgbWF4bGVuLAorCQkgICAgIF9fdTMyICpudW0pCiB7CiAJaW50IGkgPSAwOwogCSpudW0gPSAwOwpAQCAtODQ2LDkgKzg1OCw5IEBACiAJLyogUmVhZCB2YXJpYWJsZSBuYW1lICovCiAKIAlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihuYW1lKSAtIDEpOwotCWlmIChsZW4gPCAwKSB7CisJaWYgKGxlbiA8IDApCiAJCXJldHVybiBsZW47Ci0JfQorCiAJbWVtc2V0KG5hbWUsIDAsIHNpemVvZihuYW1lKSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKG5hbWUsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04NzIsOSArODg0LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJtaW5fcGt0X3NpemUiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgPCAxNCArIDIwICsgOCkKIAkJCXZhbHVlID0gMTQgKyAyMCArIDg7CkBAIC04ODksOSArOTAxLDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJtYXhfcGt0X3NpemUiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgPCAxNCArIDIwICsgOCkKIAkJCXZhbHVlID0gMTQgKyAyMCArIDg7CkBAIC05MDgsOSArOTIwLDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJwa3Rfc2l6ZSIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSA8IDE0ICsgMjAgKyA4KQogCQkJdmFsdWUgPSAxNCArIDIwICsgODsKQEAgLTkyNSw5ICs5MzcsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgImRlYnVnIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJZGVidWcgPSB2YWx1ZTsKIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZGVidWc9JXUiLCBkZWJ1Zyk7CkBAIC05MzYsOSArOTQ4LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJmcmFncyIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCXBrdF9kZXYtPm5mcmFncyA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBmcmFncz0ldSIsIHBrdF9kZXYtPm5mcmFncyk7CkBAIC05NDYsMjYgKzk1OCwyNCBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZGVsYXkiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwotCQlpZiAodmFsdWUgPT0gMHg3RkZGRkZGRikgewotCQkJcGt0X2Rldi0+ZGVsYXlfdXMgPSAweDdGRkZGRkZGOwotCQkJcGt0X2Rldi0+ZGVsYXlfbnMgPSAwOwotCQl9IGVsc2UgewotCQkJcGt0X2Rldi0+ZGVsYXlfdXMgPSB2YWx1ZSAvIDEwMDA7Ci0JCQlwa3RfZGV2LT5kZWxheV9ucyA9IHZhbHVlICUgMTAwMDsKLQkJfQotCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBkZWxheT0ldSIsCi0JCQkxMDAwICogcGt0X2Rldi0+ZGVsYXlfdXMgKyBwa3RfZGV2LT5kZWxheV9ucyk7CisJCWlmICh2YWx1ZSA9PSAweDdGRkZGRkZGKQorCQkJcGt0X2Rldi0+ZGVsYXkgPSBVTExPTkdfTUFYOworCQllbHNlCisJCQlwa3RfZGV2LT5kZWxheSA9ICh1NjQpdmFsdWUgKiBOU0VDX1BFUl9VU0VDOworCisJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IGRlbGF5PSVsbHUiLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGt0X2Rldi0+ZGVsYXkpOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCWlmICghc3RyY21wKG5hbWUsICJ1ZHBfc3JjX21pbiIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSAhPSBwa3RfZGV2LT51ZHBfc3JjX21pbikgewogCQkJcGt0X2Rldi0+dWRwX3NyY19taW4gPSB2YWx1ZTsKQEAgLTk3Niw5ICs5ODYsOSBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAidWRwX2RzdF9taW4iKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAodmFsdWUgIT0gcGt0X2Rldi0+dWRwX2RzdF9taW4pIHsKIAkJCXBrdF9kZXYtPnVkcF9kc3RfbWluID0gdmFsdWU7CkBAIC05ODksOSArOTk5LDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInVkcF9zcmNfbWF4IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHZhbHVlICE9IHBrdF9kZXYtPnVkcF9zcmNfbWF4KSB7CiAJCQlwa3RfZGV2LT51ZHBfc3JjX21heCA9IHZhbHVlOwpAQCAtMTAwMiw5ICsxMDEyLDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInVkcF9kc3RfbWF4IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHZhbHVlICE9IHBrdF9kZXYtPnVkcF9kc3RfbWF4KSB7CiAJCQlwa3RfZGV2LT51ZHBfZHN0X21heCA9IHZhbHVlOwpAQCAtMTAxNSw5ICsxMDI1LDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgImNsb25lX3NrYiIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCXBrdF9kZXYtPmNsb25lX3NrYiA9IHZhbHVlOwogCkBAIC0xMDI2LDkgKzEwMzYsOSBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiY291bnQiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlwa3RfZGV2LT5jb3VudCA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBjb3VudD0lbGx1IiwKQEAgLTEwMzcsOSArMTA0Nyw5IEBACiAJfQogCWlmICghc3RyY21wKG5hbWUsICJzcmNfbWFjX2NvdW50IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHBrdF9kZXYtPnNyY19tYWNfY291bnQgIT0gdmFsdWUpIHsKIAkJCXBrdF9kZXYtPnNyY19tYWNfY291bnQgPSB2YWx1ZTsKQEAgLTEwNTEsOSArMTA2MSw5IEBACiAJfQogCWlmICghc3RyY21wKG5hbWUsICJkc3RfbWFjX2NvdW50IikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEwLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKHBrdF9kZXYtPmRzdF9tYWNfY291bnQgIT0gdmFsdWUpIHsKIAkJCXBrdF9kZXYtPmRzdF9tYWNfY291bnQgPSB2YWx1ZTsKQEAgLTEwNjcsOSArMTA3Nyw5IEBACiAJCWNoYXIgZlszMl07CiAJCW1lbXNldChmLCAwLCAzMik7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKGYpIC0gMSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWlmIChjb3B5X2Zyb21fdXNlcihmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaSArPSBsZW47CkBAIC0xMTY4LDkgKzExNzgsOCBAQAogCX0KIAlpZiAoIXN0cmNtcChuYW1lLCAiZHN0X21pbiIpIHx8ICFzdHJjbXAobmFtZSwgImRzdCIpKSB7CiAJCWxlbiA9IHN0cm5fbGVuKCZ1c2VyX2J1ZmZlcltpXSwgc2l6ZW9mKHBrdF9kZXYtPmRzdF9taW4pIC0gMSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTE5MCw5ICsxMTk5LDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgImRzdF9tYXgiKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5kc3RfbWF4KSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcihidWYsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTMwMyw5ICsxMzEyLDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInNyY19taW4iKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5zcmNfbWluKSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnVmW2xlbl0gPSAwOwpAQCAtMTMyNCw5ICsxMzMzLDkgQEAKIAl9CiAJaWYgKCFzdHJjbXAobmFtZSwgInNyY19tYXgiKSkgewogCQlsZW4gPSBzdHJuX2xlbigmdXNlcl9idWZmZXJbaV0sIHNpemVvZihwa3RfZGV2LT5zcmNfbWF4KSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCAmdXNlcl9idWZmZXJbaV0sIGxlbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnVmW2xlbl0gPSAwOwpAQCAtMTM1MCw5ICsxMzU5LDkgQEAKIAkJbWVtY3B5KG9sZF9kbWFjLCBwa3RfZGV2LT5kc3RfbWFjLCBFVEhfQUxFTik7CiAKIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YodmFsc3RyKSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQltZW1zZXQodmFsc3RyLCAwLCBzaXplb2YodmFsc3RyKSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTM5Miw5ICsxNDAxLDkgQEAKIAkJbWVtY3B5KG9sZF9zbWFjLCBwa3RfZGV2LT5zcmNfbWFjLCBFVEhfQUxFTik7CiAKIAkJbGVuID0gc3Rybl9sZW4oJnVzZXJfYnVmZmVyW2ldLCBzaXplb2YodmFsc3RyKSAtIDEpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQltZW1zZXQodmFsc3RyLCAwLCBzaXplb2YodmFsc3RyKSk7CiAJCWlmIChjb3B5X2Zyb21fdXNlcih2YWxzdHIsICZ1c2VyX2J1ZmZlcltpXSwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTQzNSw5ICsxNDQ0LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJmbG93cyIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxMCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSA+IE1BWF9DRkxPV1MpCiAJCQl2YWx1ZSA9IE1BWF9DRkxPV1M7CkBAIC0xNDQ5LDkgKzE0NTgsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgImZsb3dsZW4iKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMTAsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlwa3RfZGV2LT5sZmxvdyA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBmbG93bGVuPSV1IiwgcGt0X2Rldi0+bGZsb3cpOwpAQCAtMTQ2MCw5ICsxNDY5LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJxdWV1ZV9tYXBfbWluIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDUsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWluID0gdmFsdWU7CiAJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHF1ZXVlX21hcF9taW49JXUiLCBwa3RfZGV2LT5xdWV1ZV9tYXBfbWluKTsKQEAgLTE0NzEsOSArMTQ4MCw5IEBACiAKIAlpZiAoIXN0cmNtcChuYW1lLCAicXVldWVfbWFwX21heCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCA1LCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJcGt0X2Rldi0+cXVldWVfbWFwX21heCA9IHZhbHVlOwogCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBxdWV1ZV9tYXBfbWF4PSV1IiwgcGt0X2Rldi0+cXVldWVfbWFwX21heCk7CkBAIC0xNTA1LDkgKzE1MTQsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgInZsYW5faWQiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgNCwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICh2YWx1ZSA8PSA0MDk1KSB7CiAJCQlwa3RfZGV2LT52bGFuX2lkID0gdmFsdWU7ICAvKiB0dXJuIG9uIFZMQU4gKi8KQEAgLTE1MzIsOSArMTU0MSw5IEBACiAKIAlpZiAoIXN0cmNtcChuYW1lLCAidmxhbl9wIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAoKHZhbHVlIDw9IDcpICYmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikpIHsKIAkJCXBrdF9kZXYtPnZsYW5fcCA9IHZhbHVlOwpAQCAtMTU0Nyw5ICsxNTU2LDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJ2bGFuX2NmaSIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxLCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKCh2YWx1ZSA8PSAxKSAmJiAocGt0X2Rldi0+dmxhbl9pZCAhPSAweGZmZmYpKSB7CiAJCQlwa3RfZGV2LT52bGFuX2NmaSA9IHZhbHVlOwpAQCAtMTU2Miw5ICsxNTcxLDkgQEAKIAogCWlmICghc3RyY21wKG5hbWUsICJzdmxhbl9pZCIpKSB7CiAJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCA0LCAmdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKCh2YWx1ZSA8PSA0MDk1KSAmJiAoKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKSkpIHsKIAkJCXBrdF9kZXYtPnN2bGFuX2lkID0gdmFsdWU7ICAvKiB0dXJuIG9uIFNWTEFOICovCkBAIC0xNTg5LDkgKzE1OTgsOSBAQAogCiAJaWYgKCFzdHJjbXAobmFtZSwgInN2bGFuX3AiKSkgewogCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMSwgJnZhbHVlKTsKLQkJaWYgKGxlbiA8IDApIHsKKwkJaWYgKGxlbiA8IDApCiAJCQlyZXR1cm4gbGVuOwotCQl9CisKIAkJaSArPSBsZW47CiAJCWlmICgodmFsdWUgPD0gNykgJiYgKHBrdF9kZXYtPnN2bGFuX2lkICE9IDB4ZmZmZikpIHsKIAkJCXBrdF9kZXYtPnN2bGFuX3AgPSB2YWx1ZTsKQEAgLTE2MDQsOSArMTYxMyw5IEBACiAKIAlpZiAoIXN0cmNtcChuYW1lLCAic3ZsYW5fY2ZpIikpIHsKIAkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEsICZ2YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAoKHZhbHVlIDw9IDEpICYmIChwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpKSB7CiAJCQlwa3RfZGV2LT5zdmxhbl9jZmkgPSB2YWx1ZTsKQEAgLTE2MjAsOSArMTYyOSw5IEBACiAJaWYgKCFzdHJjbXAobmFtZSwgInRvcyIpKSB7CiAJCV9fdTMyIHRtcF92YWx1ZSA9IDA7CiAJCWxlbiA9IGhleDMyX2FyZygmdXNlcl9idWZmZXJbaV0sIDIsICZ0bXBfdmFsdWUpOwotCQlpZiAobGVuIDwgMCkgeworCQlpZiAobGVuIDwgMCkKIAkJCXJldHVybiBsZW47Ci0JCX0KKwogCQlpICs9IGxlbjsKIAkJaWYgKGxlbiA9PSAyKSB7CiAJCQlwa3RfZGV2LT50b3MgPSB0bXBfdmFsdWU7CkBAIC0xNjM2LDkgKzE2NDUsOSBAQAogCWlmICghc3RyY21wKG5hbWUsICJ0cmFmZmljX2NsYXNzIikpIHsKIAkJX191MzIgdG1wX3ZhbHVlID0gMDsKIAkJbGVuID0gaGV4MzJfYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMiwgJnRtcF92YWx1ZSk7Ci0JCWlmIChsZW4gPCAwKSB7CisJCWlmIChsZW4gPCAwKQogCQkJcmV0dXJuIGxlbjsKLQkJfQorCiAJCWkgKz0gbGVuOwogCQlpZiAobGVuID09IDIpIHsKIAkJCXBrdF9kZXYtPnRyYWZmaWNfY2xhc3MgPSB0bXBfdmFsdWU7CkBAIC0xNjcwLDcgKzE2NzksNyBAQAogc3RhdGljIGludCBwa3RnZW5fdGhyZWFkX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJc3RydWN0IHBrdGdlbl90aHJlYWQgKnQgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CisJY29uc3Qgc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXY7CiAKIAlCVUdfT04oIXQpOwogCkBAIC0xODczLDggKzE4ODIsMTAgQEAKIAogCQkJcmVtb3ZlX3Byb2NfZW50cnkocGt0X2Rldi0+ZW50cnktPm5hbWUsIHBnX3Byb2NfZGlyKTsKIAotCQkJcGt0X2Rldi0+ZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShkZXYtPm5hbWUsIDA2MDAsCi0JCQkJCQkJICAgcGdfcHJvY19kaXIpOworCQkJcGt0X2Rldi0+ZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKGRldi0+bmFtZSwgMDYwMCwKKwkJCQkJCQkgIHBnX3Byb2NfZGlyLAorCQkJCQkJCSAgJnBrdGdlbl9pZl9mb3BzLAorCQkJCQkJCSAgcGt0X2Rldik7CiAJCQlpZiAoIXBrdF9kZXYtPmVudHJ5KQogCQkJCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBjYW4ndCBtb3ZlIHByb2MgIgogCQkJCSAgICAgICAiIGVudHJ5IGZvciAnJXMnXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTkwOCwxMyArMTkxOSwxNCBAQAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpwa3RnZW5fZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBjb25zdCBjaGFyICppZm5hbWUpCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnBrdGdlbl9kZXZfZ2V0X2J5X25hbWUoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsCisJCQkJCQkgY29uc3QgY2hhciAqaWZuYW1lKQogewogCWNoYXIgYltJRk5BTVNJWis1XTsKIAlpbnQgaSA9IDA7CiAKLQlmb3IoaT0wOyBpZm5hbWVbaV0gIT0gJ0AnOyBpKyspIHsKLQkJaWYoaSA9PSBJRk5BTVNJWikKKwlmb3IgKGkgPSAwOyBpZm5hbWVbaV0gIT0gJ0AnOyBpKyspIHsKKwkJaWYgKGkgPT0gSUZOQU1TSVopCiAJCQlicmVhazsKIAogCQliW2ldID0gaWZuYW1lW2ldOwpAQCAtMTk4MSw3ICsxOTkzLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGt0Z2VuOiBXQVJOSU5HOiBSZXF1ZXN0ZWQgIgogCQkgICAgICAgInF1ZXVlX21hcF9taW4gKHplcm8tYmFzZWQpICglZCkgZXhjZWVkcyB2YWxpZCByYW5nZSAiCiAJCSAgICAgICAiWzAgLSAlZF0gZm9yICglZCkgcXVldWVzIG9uICVzLCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBwa3RfZGV2LT5xdWV1ZV9tYXBfbWluLCAobnR4cSA/OiAxKS0gMSwgbnR4cSwKKwkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4sIChudHhxID86IDEpIC0gMSwgbnR4cSwKIAkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWluID0gbnR4cSAtIDE7CiAJfQpAQCAtMTk4OSw3ICsyMDAxLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGt0Z2VuOiBXQVJOSU5HOiBSZXF1ZXN0ZWQgIgogCQkgICAgICAgInF1ZXVlX21hcF9tYXggKHplcm8tYmFzZWQpICglZCkgZXhjZWVkcyB2YWxpZCByYW5nZSAiCiAJCSAgICAgICAiWzAgLSAlZF0gZm9yICglZCkgcXVldWVzIG9uICVzLCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4LCAobnR4cSA/OiAxKS0gMSwgbnR4cSwKKwkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9tYXgsIChudHhxID86IDEpIC0gMSwgbnR4cSwKIAkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID0gbnR4cSAtIDE7CiAJfQpAQCAtMjAzMCw3ICsyMDQyLDggQEAKIAkJCSAqLwogCiAJCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQlpZiAoKGlkZXYgPSBfX2luNl9kZXZfZ2V0KHBrdF9kZXYtPm9kZXYpKSAhPSBOVUxMKSB7CisJCQlpZGV2ID0gX19pbjZfZGV2X2dldChwa3RfZGV2LT5vZGV2KTsKKwkJCWlmIChpZGV2KSB7CiAJCQkJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwOwogCiAJCQkJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKQEAgLTIwODksMjcgKzIxMDIsNDAgQEAKIAlwa3RfZGV2LT5uZmxvd3MgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBfX3U2NCBzcGluX3VudGlsX3VzKQorCitzdGF0aWMgdm9pZCBzcGluKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBrdGltZV90IHNwaW5fdW50aWwpCiB7Ci0JX191NjQgc3RhcnQ7Ci0JX191NjQgbm93OworCWt0aW1lX3Qgc3RhcnQ7CisJczMyIHJlbWFpbmluZzsKKwlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHQ7CiAKLQlzdGFydCA9IG5vdyA9IGdldEN1clVzKCk7Ci0Jd2hpbGUgKG5vdyA8IHNwaW5fdW50aWxfdXMpIHsKLQkJLyogVE9ETzogb3B0aW1pemUgc2xlZXBpbmcgYmVoYXZpb3IgKi8KLQkJaWYgKHNwaW5fdW50aWxfdXMgLSBub3cgPiBqaWZmaWVzX3RvX3VzZWNzKDEpICsgMSkKLQkJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKLQkJZWxzZSBpZiAoc3Bpbl91bnRpbF91cyAtIG5vdyA+IDEwMCkgewotCQkJaWYgKCFwa3RfZGV2LT5ydW5uaW5nKQotCQkJCXJldHVybjsKLQkJCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwlocnRpbWVyX2luaXRfb25fc3RhY2soJnQudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX0FCUyk7CisJaHJ0aW1lcl9zZXRfZXhwaXJlcygmdC50aW1lciwgc3Bpbl91bnRpbCk7CisKKwlyZW1haW5pbmcgPSBrdGltZV90b191cyhocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZ0LnRpbWVyKSk7CisJaWYgKHJlbWFpbmluZyA8PSAwKQorCQlyZXR1cm47CisKKwlzdGFydCA9IGt0aW1lX25vdygpOworCWlmIChyZW1haW5pbmcgPCAxMDApCisJCXVkZWxheShyZW1haW5pbmcpOyAJLyogcmVhbGx5IHNtYWxsIGp1c3Qgc3BpbiAqLworCWVsc2UgeworCQkvKiBzZWUgZG9fbmFub3NsZWVwICovCisJCWhydGltZXJfaW5pdF9zbGVlcGVyKCZ0LCBjdXJyZW50KTsKKwkJZG8geworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWhydGltZXJfc3RhcnRfZXhwaXJlcygmdC50aW1lciwgSFJUSU1FUl9NT0RFX0FCUyk7CisJCQlpZiAoIWhydGltZXJfYWN0aXZlKCZ0LnRpbWVyKSkKKwkJCQl0LnRhc2sgPSBOVUxMOworCisJCQlpZiAobGlrZWx5KHQudGFzaykpCiAJCQkJc2NoZWR1bGUoKTsKLQkJfQogCi0JCW5vdyA9IGdldEN1clVzKCk7CisJCQlocnRpbWVyX2NhbmNlbCgmdC50aW1lcik7CisJCX0gd2hpbGUgKHQudGFzayAmJiBwa3RfZGV2LT5ydW5uaW5nICYmICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSk7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAl9Ci0KLQlwa3RfZGV2LT5pZGxlX2FjYyArPSBub3cgLSBzdGFydDsKKwlwa3RfZGV2LT5pZGxlX2FjYyArPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfbm93KCksIHN0YXJ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGt0X292ZXJoZWFkKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQpAQCAtMjEyMCwxMyArMjE0Niw5IEBACiAJcGt0X2Rldi0+cGt0X292ZXJoZWFkICs9IFNWTEFOX1RBR19TSVpFKHBrdF9kZXYpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmX3NlZW4oc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBmbG93KQorc3RhdGljIGlubGluZSBpbnQgZl9zZWVuKGNvbnN0IHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2LCBpbnQgZmxvdykKIHsKLQotCWlmIChwa3RfZGV2LT5mbG93c1tmbG93XS5mbGFncyAmIEZfSU5JVCkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKwlyZXR1cm4gISEocGt0X2Rldi0+Zmxvd3NbZmxvd10uZmxhZ3MgJiBGX0lOSVQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBmX3BpY2soc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCkBAIC0yMTc0LDcgKzIxOTYsNyBAQAogCQlpZiAoeCkgewogCQkJcGt0X2Rldi0+Zmxvd3NbZmxvd10ueCA9IHg7CiAJCQlzZXRfcGt0X292ZXJoZWFkKHBrdF9kZXYpOwotCQkJcGt0X2Rldi0+cGt0X292ZXJoZWFkKz14LT5wcm9wcy5oZWFkZXJfbGVuOworCQkJcGt0X2Rldi0+cGt0X292ZXJoZWFkICs9IHgtPnByb3BzLmhlYWRlcl9sZW47CiAJCX0KIAogCX0KQEAgLTIzMTMsMTggKzIzMzUsMTggQEAKIAogCWlmICghKHBrdF9kZXYtPmZsYWdzICYgRl9JUFY2KSkgewogCi0JCWlmICgoaW1uID0gbnRvaGwocGt0X2Rldi0+c2FkZHJfbWluKSkgPCAoaW14ID0KLQkJCQkJCQkgbnRvaGwocGt0X2Rldi0+Ci0JCQkJCQkJICAgICAgIHNhZGRyX21heCkpKSB7CisJCWltbiA9IG50b2hsKHBrdF9kZXYtPnNhZGRyX21pbik7CisJCWlteCA9IG50b2hsKHBrdF9kZXYtPnNhZGRyX21heCk7CisJCWlmIChpbW4gPCBpbXgpIHsKIAkJCV9fdTMyIHQ7CiAJCQlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQU1JDX1JORCkKIAkJCQl0ID0gcmFuZG9tMzIoKSAlIChpbXggLSBpbW4pICsgaW1uOwogCQkJZWxzZSB7CiAJCQkJdCA9IG50b2hsKHBrdF9kZXYtPmN1cl9zYWRkcik7CiAJCQkJdCsrOwotCQkJCWlmICh0ID4gaW14KSB7CisJCQkJaWYgKHQgPiBpbXgpCiAJCQkJCXQgPSBpbW47Ci0JCQkJfQorCiAJCQl9CiAJCQlwa3RfZGV2LT5jdXJfc2FkZHIgPSBodG9ubCh0KTsKIAkJfQpAQCAtMjQzNSwxNCArMjQ1NywxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKLQl4LT5jdXJsZnQuYnl0ZXMgKz1za2ItPmxlbjsKKwl4LT5jdXJsZnQuYnl0ZXMgKz0gc2tiLT5sZW47CiAJeC0+Y3VybGZ0LnBhY2tldHMrKzsKIGVycm9yOgogCXNwaW5fdW5sb2NrKCZ4LT5sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9TQXMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCitzdGF0aWMgdm9pZCBmcmVlX1NBcyhzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAlpZiAocGt0X2Rldi0+Y2Zsb3dzKSB7CiAJCS8qIGxldCBnbyBvZiB0aGUgU0FzIGlmIHdlIGhhdmUgdGhlbSAqLwpAQCAtMjQ1Nyw3ICsyNDc5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHByb2Nlc3NfaXBzZWMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsCitzdGF0aWMgaW50IHByb2Nlc3NfaXBzZWMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgcHJvdG9jb2wpCiB7CiAJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9JUFNFQ19PTikgewpAQCAtMjQ2NywxMSArMjQ4OSwxMSBAQAogCQkJaW50IHJldDsKIAkJCV9fdTggKmV0aDsKIAkJCW5oZWFkID0geC0+cHJvcHMuaGVhZGVyX2xlbiAtIHNrYl9oZWFkcm9vbShza2IpOwotCQkJaWYgKG5oZWFkID4wKSB7CisJCQlpZiAobmhlYWQgPiAwKSB7CiAJCQkJcmV0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIG5oZWFkLCAwLCBHRlBfQVRPTUlDKTsKIAkJCQlpZiAocmV0IDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGV4cGFuZGluZyAiCi0JCQkJCSAgICAgICAiaXBzZWMgcGFja2V0ICVkXG4iLHJldCk7CisJCQkJCSAgICAgICAiaXBzZWMgcGFja2V0ICVkXG4iLCByZXQpOwogCQkJCQlnb3RvIGVycjsKIAkJCQl9CiAJCQl9CkBAIC0yNDgxLDEzICsyNTAzLDEzIEBACiAJCQlyZXQgPSBwa3RnZW5fb3V0cHV0X2lwc2VjKHNrYiwgcGt0X2Rldik7CiAJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjcmVhdGluZyBpcHNlYyAiCi0JCQkJICAgICAgICJwYWNrZXQgJWRcbiIscmV0KTsKKwkJCQkgICAgICAgInBhY2tldCAlZFxuIiwgcmV0KTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCS8qIHJlc3RvcmUgbGwgKi8KIAkJCWV0aCA9IChfX3U4ICopIHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCQkJbWVtY3B5KGV0aCwgcGt0X2Rldi0+aGgsIDEyKTsKLQkJCSoodTE2ICopICYgZXRoWzEyXSA9IHByb3RvY29sOworCQkJKih1MTYgKikgJmV0aFsxMl0gPSBwcm90b2NvbDsKIAkJfQogCX0KIAlyZXR1cm4gMTsKQEAgLTI1MDAsOSArMjUyMiw5IEBACiBzdGF0aWMgdm9pZCBtcGxzX3B1c2goX19iZTMyICptcGxzLCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAl1bnNpZ25lZCBpOwotCWZvciAoaSA9IDA7IGkgPCBwa3RfZGV2LT5ucl9sYWJlbHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwa3RfZGV2LT5ucl9sYWJlbHM7IGkrKykKIAkJKm1wbHMrKyA9IHBrdF9kZXYtPmxhYmVsc1tpXSAmIH5NUExTX1NUQUNLX0JPVFRPTTsKLQl9CisKIAltcGxzLS07CiAJKm1wbHMgfD0gTVBMU19TVEFDS19CT1RUT007CiB9CkBAIC0yNTQzLDggKzI1NjUsOSBAQAogCW1vZF9jdXJfaGVhZGVycyhwa3RfZGV2KTsKIAogCWRhdGFsZW4gPSAob2Rldi0+aGFyZF9oZWFkZXJfbGVuICsgMTYpICYgfjB4ZjsKLQlza2IgPSBhbGxvY19za2IocGt0X2Rldi0+Y3VyX3BrdF9zaXplICsgNjQgKyBkYXRhbGVuICsKLQkJCXBrdF9kZXYtPnBrdF9vdmVyaGVhZCwgR0ZQX0FUT01JQyk7CisJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG9kZXYsCisJCQkJIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSArIDY0CisJCQkJICsgZGF0YWxlbiArIHBrdF9kZXYtPnBrdF9vdmVyaGVhZCwgR0ZQX05PV0FJVCk7CiAJaWYgKCFza2IpIHsKIAkJc3ByaW50Zihwa3RfZGV2LT5yZXN1bHQsICJObyBtZW1vcnkiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNjY4LDggKzI2OTEsOSBAQAogCQl9CiAJfQogCi0JLyogU3RhbXAgdGhlIHRpbWUsIGFuZCBzZXF1ZW5jZSBudW1iZXIsIGNvbnZlcnQgdGhlbSB0byBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLQorCS8qIFN0YW1wIHRoZSB0aW1lLCBhbmQgc2VxdWVuY2UgbnVtYmVyLAorCSAqIGNvbnZlcnQgdGhlbSB0byBuZXR3b3JrIGJ5dGUgb3JkZXIKKwkgKi8KIAlpZiAocGdoKSB7CiAJCXN0cnVjdCB0aW1ldmFsIHRpbWVzdGFtcDsKIApAQCAtMjg4Miw4ICsyOTA2LDkgQEAKIAlxdWV1ZV9tYXAgPSBwa3RfZGV2LT5jdXJfcXVldWVfbWFwOwogCW1vZF9jdXJfaGVhZGVycyhwa3RfZGV2KTsKIAotCXNrYiA9IGFsbG9jX3NrYihwa3RfZGV2LT5jdXJfcGt0X3NpemUgKyA2NCArIDE2ICsKLQkJCXBrdF9kZXYtPnBrdF9vdmVyaGVhZCwgR0ZQX0FUT01JQyk7CisJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKG9kZXYsCisJCQkJIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSArIDY0CisJCQkJICsgMTYgKyBwa3RfZGV2LT5wa3Rfb3ZlcmhlYWQsIEdGUF9OT1dBSVQpOwogCWlmICghc2tiKSB7CiAJCXNwcmludGYocGt0X2Rldi0+cmVzdWx0LCAiTm8gbWVtb3J5Iik7CiAJCXJldHVybiBOVUxMOwpAQCAtMjkyMiw3ICsyOTQ3LDcgQEAKIAl1ZHBoID0gdWRwX2hkcihza2IpOwogCiAJbWVtY3B5KGV0aCwgcGt0X2Rldi0+aGgsIDEyKTsKLQkqKF9fYmUxNiAqKSAmIGV0aFsxMl0gPSBwcm90b2NvbDsKKwkqKF9fYmUxNiAqKSAmZXRoWzEyXSA9IHByb3RvY29sOwogCiAJLyogRXRoICsgSVBoICsgVURQaCArIG1wbHMgKi8KIAlkYXRhbGVuID0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplIC0gMTQgLQpAQCAtMzAxNiw4ICszMDQxLDEwIEBACiAJCX0KIAl9CiAKLQkvKiBTdGFtcCB0aGUgdGltZSwgYW5kIHNlcXVlbmNlIG51bWJlciwgY29udmVydCB0aGVtIHRvIG5ldHdvcmsgYnl0ZSBvcmRlciAqLwotCS8qIHNob3VsZCB3ZSB1cGRhdGUgY2xvbmVkIHBhY2tldHMgdG9vID8gKi8KKwkvKiBTdGFtcCB0aGUgdGltZSwgYW5kIHNlcXVlbmNlIG51bWJlciwKKwkgKiBjb252ZXJ0IHRoZW0gdG8gbmV0d29yayBieXRlIG9yZGVyCisJICogc2hvdWxkIHdlIHVwZGF0ZSBjbG9uZWQgcGFja2V0cyB0b28gPworCSAqLwogCWlmIChwZ2gpIHsKIAkJc3RydWN0IHRpbWV2YWwgdGltZXN0YW1wOwogCkBAIC0zMDMzLDggKzMwNjAsOCBAQAogCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmZpbGxfcGFja2V0KHN0cnVjdCBuZXRfZGV2aWNlICpvZGV2LAotCQkJCQkgIHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQorc3RhdGljIHN0cnVjdCBza19idWZmICpmaWxsX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiwKKwkJCQkgICBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQVjYpCiAJCXJldHVybiBmaWxsX3BhY2tldF9pcHY2KG9kZXYsIHBrdF9kZXYpOwpAQCAtMzA3Miw5ICszMDk5LDkgQEAKIAkJCXBrdGdlbl9jbGVhcl9jb3VudGVycyhwa3RfZGV2KTsKIAkJCXBrdF9kZXYtPnJ1bm5pbmcgPSAxOwkvKiBDcmFua2UgeWVzZWxmISAqLwogCQkJcGt0X2Rldi0+c2tiID0gTlVMTDsKLQkJCXBrdF9kZXYtPnN0YXJ0ZWRfYXQgPSBnZXRDdXJVcygpOwotCQkJcGt0X2Rldi0+bmV4dF90eF91cyA9IGdldEN1clVzKCk7CS8qIFRyYW5zbWl0IGltbWVkaWF0ZWx5ICovCi0JCQlwa3RfZGV2LT5uZXh0X3R4X25zID0gMDsKKwkJCXBrdF9kZXYtPnN0YXJ0ZWRfYXQgPQorCQkJCXBrdF9kZXYtPm5leHRfdHggPSBrdGltZV9ub3coKTsKKwogCQkJc2V0X3BrdF9vdmVyaGVhZChwa3RfZGV2KTsKIAogCQkJc3RyY3B5KHBrdF9kZXYtPnJlc3VsdCwgIlN0YXJ0aW5nIik7CkBAIC0zMTAxLDE3ICszMTI4LDE0IEBACiAJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogfQogCi1zdGF0aWMgaW50IHRocmVhZF9pc19ydW5uaW5nKHN0cnVjdCBwa3RnZW5fdGhyZWFkICp0KQorc3RhdGljIGludCB0aHJlYWRfaXNfcnVubmluZyhjb25zdCBzdHJ1Y3QgcGt0Z2VuX3RocmVhZCAqdCkKIHsKLQlzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldjsKLQlpbnQgcmVzID0gMDsKKwljb25zdCBzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpCi0JCWlmIChwa3RfZGV2LT5ydW5uaW5nKSB7Ci0JCQlyZXMgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQlyZXR1cm4gcmVzOworCQlpZiAocGt0X2Rldi0+cnVubmluZykKKwkJCXJldHVybiAxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBrdGdlbl93YWl0X3RocmVhZF9ydW4oc3RydWN0IHBrdGdlbl90aHJlYWQgKnQpCkBAIC0zMTY4LDcgKzMxOTIsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogCi0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7CS8qIFByb3BhZ2F0ZSB0aHJlYWQtPmNvbnRyb2wgICovCisJLyogUHJvcGFnYXRlIHRocmVhZC0+Y29udHJvbCAgKi8KKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxMjUpKTsKIAogCXBrdGdlbl93YWl0X2FsbF90aHJlYWRzX3J1bigpOwogfQpAQCAtMzE4NiwzNSArMzIxMSwyOSBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwa3RnZW5fdGhyZWFkX2xvY2spOwogCi0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7CS8qIFByb3BhZ2F0ZSB0aHJlYWQtPmNvbnRyb2wgICovCisJLyogUHJvcGFnYXRlIHRocmVhZC0+Y29udHJvbCAgKi8KKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxMjUpKTsKIAogCXBrdGdlbl93YWl0X2FsbF90aHJlYWRzX3J1bigpOwogfQogCiBzdGF0aWMgdm9pZCBzaG93X3Jlc3VsdHMoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYsIGludCBucl9mcmFncykKIHsKLQlfX3U2NCB0b3RhbF91cywgYnBzLCBtYnBzLCBwcHMsIGlkbGU7CisJX191NjQgYnBzLCBtYnBzLCBwcHM7CiAJY2hhciAqcCA9IHBrdF9kZXYtPnJlc3VsdDsKKwlrdGltZV90IGVsYXBzZWQgPSBrdGltZV9zdWIocGt0X2Rldi0+c3RvcHBlZF9hdCwKKwkJCQkgICAgcGt0X2Rldi0+c3RhcnRlZF9hdCk7CisJa3RpbWVfdCBpZGxlID0gbnNfdG9fa3RpbWUocGt0X2Rldi0+aWRsZV9hY2MpOwogCi0JdG90YWxfdXMgPSBwa3RfZGV2LT5zdG9wcGVkX2F0IC0gcGt0X2Rldi0+c3RhcnRlZF9hdDsKLQotCWlkbGUgPSBwa3RfZGV2LT5pZGxlX2FjYzsKLQotCXAgKz0gc3ByaW50ZihwLCAiT0s6ICVsbHUoYyVsbHUrZCVsbHUpIHVzZWMsICVsbHUgKCVkYnl0ZSwlZGZyYWdzKVxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsX3VzLAotCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHRvdGFsX3VzIC0gaWRsZSksCi0JCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpZGxlLAorCXAgKz0gc3ByaW50ZihwLCAiT0s6ICVsbHUoYyVsbHUrZCVsbHUpIG5zZWMsICVsbHUgKCVkYnl0ZSwlZGZyYWdzKVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX3VzKGVsYXBzZWQpLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpa3RpbWVfdG9fdXMoa3RpbWVfc3ViKGVsYXBzZWQsIGlkbGUpKSwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWt0aW1lX3RvX3VzKGlkbGUpLAogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGt0X2Rldi0+c29mYXIsCiAJCSAgICAgcGt0X2Rldi0+Y3VyX3BrdF9zaXplLCBucl9mcmFncyk7CiAKLQlwcHMgPSBwa3RfZGV2LT5zb2ZhciAqIFVTRUNfUEVSX1NFQzsKLQotCXdoaWxlICgodG90YWxfdXMgPj4gMzIpICE9IDApIHsKLQkJcHBzID4+PSAxOwotCQl0b3RhbF91cyA+Pj0gMTsKLQl9Ci0KLQlkb19kaXYocHBzLCB0b3RhbF91cyk7CisJcHBzID0gZGl2NjRfdTY0KHBrdF9kZXYtPnNvZmFyICogTlNFQ19QRVJfU0VDLAorCQkJa3RpbWVfdG9fbnMoZWxhcHNlZCkpOwogCiAJYnBzID0gcHBzICogOCAqIHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZTsKIApAQCAtMzIyOCw3ICszMjQ3LDYgQEAKIH0KIAogLyogU2V0IHN0b3BwZWQtYXQgdGltZXIsIHJlbW92ZSBmcm9tIHJ1bm5pbmcgbGlzdCwgZG8gY291bnRlcnMgJiBzdGF0aXN0aWNzICovCi0KIHN0YXRpYyBpbnQgcGt0Z2VuX3N0b3BfZGV2aWNlKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQogewogCWludCBucl9mcmFncyA9IHBrdF9kZXYtPnNrYiA/IHNrYl9zaGluZm8ocGt0X2Rldi0+c2tiKS0+bnJfZnJhZ3MgOiAtMTsKQEAgLTMyMzksNyArMzI1Nyw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXBrdF9kZXYtPnN0b3BwZWRfYXQgPSBnZXRDdXJVcygpOworCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCXBrdF9kZXYtPnNrYiA9IE5VTEw7CisJcGt0X2Rldi0+c3RvcHBlZF9hdCA9IGt0aW1lX25vdygpOwogCXBrdF9kZXYtPnJ1bm5pbmcgPSAwOwogCiAJc2hvd19yZXN1bHRzKHBrdF9kZXYsIG5yX2ZyYWdzKTsKQEAgLTMyNTgsNyArMzI3OCw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKGJlc3QgPT0gTlVMTCkKIAkJCWJlc3QgPSBwa3RfZGV2OwotCQllbHNlIGlmIChwa3RfZGV2LT5uZXh0X3R4X3VzIDwgYmVzdC0+bmV4dF90eF91cykKKwkJZWxzZSBpZiAoa3RpbWVfbHQocGt0X2Rldi0+bmV4dF90eCwgYmVzdC0+bmV4dF90eCkpCiAJCQliZXN0ID0gcGt0X2RldjsKIAl9CiAJaWZfdW5sb2NrKHQpOwpAQCAtMzI3NSw5ICszMjk1LDYgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGt0X2RldiwgJnQtPmlmX2xpc3QsIGxpc3QpIHsKIAkJcGt0Z2VuX3N0b3BfZGV2aWNlKHBrdF9kZXYpOwotCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKLQotCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCX0KIAogCWlmX3VubG9jayh0KTsKQEAgLTMzNDgsMzAgKzMzNjUsMzcgQEAKIAltdXRleF91bmxvY2soJnBrdGdlbl90aHJlYWRfbG9jayk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcGt0Z2VuX3htaXQoc3RydWN0IHBrdGdlbl9kZXYgKnBrdF9kZXYpCitzdGF0aWMgdm9pZCBpZGxlKHN0cnVjdCBwa3RnZW5fZGV2ICpwa3RfZGV2KQoreworCWt0aW1lX3QgaWRsZV9zdGFydCA9IGt0aW1lX25vdygpOworCisJaWYgKG5lZWRfcmVzY2hlZCgpKQorCQlzY2hlZHVsZSgpOworCWVsc2UKKwkJY3B1X3JlbGF4KCk7CisKKwlwa3RfZGV2LT5pZGxlX2FjYyArPSBrdGltZV90b19ucyhrdGltZV9zdWIoa3RpbWVfbm93KCksIGlkbGVfc3RhcnQpKTsKK30KKworCitzdGF0aWMgdm9pZCBwa3RnZW5feG1pdChzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IHBrdF9kZXYtPm9kZXY7Ci0JaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKikKKwluZXRkZXZfdHhfdCAoKnhtaXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopCiAJCT0gb2Rldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQ7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCV9fdTY0IGlkbGVfc3RhcnQgPSAwOwogCXUxNiBxdWV1ZV9tYXA7CiAJaW50IHJldDsKIAotCWlmIChwa3RfZGV2LT5kZWxheV91cyB8fCBwa3RfZGV2LT5kZWxheV9ucykgewotCQl1NjQgbm93OwotCi0JCW5vdyA9IGdldEN1clVzKCk7Ci0JCWlmIChub3cgPCBwa3RfZGV2LT5uZXh0X3R4X3VzKQotCQkJc3Bpbihwa3RfZGV2LCBwa3RfZGV2LT5uZXh0X3R4X3VzKTsKKwlpZiAocGt0X2Rldi0+ZGVsYXkpIHsKKwkJc3Bpbihwa3RfZGV2LCBwa3RfZGV2LT5uZXh0X3R4KTsKIAogCQkvKiBUaGlzIGlzIG1heCBERUxBWSwgdGhpcyBoYXMgc3BlY2lhbCBtZWFuaW5nIG9mCiAJCSAqICJuZXZlciB0cmFuc21pdCIKIAkJICovCi0JCWlmIChwa3RfZGV2LT5kZWxheV91cyA9PSAweDdGRkZGRkZGKSB7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKSArIHBrdF9kZXYtPmRlbGF5X3VzOwotCQkJcGt0X2Rldi0+bmV4dF90eF9ucyA9IHBrdF9kZXYtPmRlbGF5X25zOwotCQkJZ290byBvdXQ7CisJCWlmIChwa3RfZGV2LT5kZWxheSA9PSBVTExPTkdfTUFYKSB7CisJCQlwa3RfZGV2LT5uZXh0X3R4ID0ga3RpbWVfYWRkX25zKGt0aW1lX25vdygpLCBVTE9OR19NQVgpOworCQkJcmV0dXJuOwogCQl9CiAJfQogCkBAIC0zMzgzLDQ3ICszNDA3LDMyIEBACiAJfQogCiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShvZGV2LCBxdWV1ZV9tYXApOwotCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwKLQkgICAgbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkgfHwKLQkgICAgbmVlZF9yZXNjaGVkKCkpIHsKLQkJaWRsZV9zdGFydCA9IGdldEN1clVzKCk7Ci0KLQkJaWYgKCFuZXRpZl9ydW5uaW5nKG9kZXYpKSB7CisJLyogRGlkIHdlIHNhdHVyYXRlIHRoZSBxdWV1ZSBhbHJlYWR5PyAqLworCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwgbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkpIHsKKwkJLyogSWYgZGV2aWNlIGlzIGRvd24sIHRoZW4gYWxsIHF1ZXVlcyBhcmUgcGVybW5hbnRseSBmcm96ZW4gKi8KKwkJaWYgKG5ldGlmX3J1bm5pbmcob2RldikpCisJCQlpZGxlKHBrdF9kZXYpOworCQllbHNlCiAJCQlwa3RnZW5fc3RvcF9kZXZpY2UocGt0X2Rldik7Ci0JCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKLQkJCXBrdF9kZXYtPnNrYiA9IE5VTEw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAobmVlZF9yZXNjaGVkKCkpCi0JCQlzY2hlZHVsZSgpOwotCi0JCXBrdF9kZXYtPmlkbGVfYWNjICs9IGdldEN1clVzKCkgLSBpZGxlX3N0YXJ0OwotCi0JCWlmIChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgfHwKLQkJICAgIG5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKSB7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKTsJLyogVE9ETyAqLwotCQkJcGt0X2Rldi0+bmV4dF90eF9ucyA9IDA7Ci0JCQlnb3RvIG91dDsJLyogVHJ5IHRoZSBuZXh0IGludGVyZmFjZSAqLwotCQl9CisJCXJldHVybjsKIAl9CiAKLQlpZiAocGt0X2Rldi0+bGFzdF9vayB8fCAhcGt0X2Rldi0+c2tiKSB7Ci0JCWlmICgoKytwa3RfZGV2LT5jbG9uZV9jb3VudCA+PSBwa3RfZGV2LT5jbG9uZV9za2IpCi0JCSAgICB8fCAoIXBrdF9kZXYtPnNrYikpIHsKLQkJCS8qIGJ1aWxkIGEgbmV3IHBrdCAqLwotCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJaWYgKCFwa3RfZGV2LT5za2IgfHwgKHBrdF9kZXYtPmxhc3Rfb2sgJiYKKwkJCSAgICAgICsrcGt0X2Rldi0+Y2xvbmVfY291bnQgPj0gcGt0X2Rldi0+Y2xvbmVfc2tiKSkgeworCQkvKiBidWlsZCBhIG5ldyBwa3QgKi8KKwkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAKLQkJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOwotCQkJaWYgKHBrdF9kZXYtPnNrYiA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJwa3RnZW46IEVSUk9SOiBjb3VsZG4ndCAiCi0JCQkJICAgICAgICJhbGxvY2F0ZSBza2IgaW4gZmlsbF9wYWNrZXQuXG4iKTsKLQkJCQlzY2hlZHVsZSgpOwotCQkJCXBrdF9kZXYtPmNsb25lX2NvdW50LS07CS8qIGJhY2sgb3V0IGluY3JlbWVudCwgT09NICovCi0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlwa3RfZGV2LT5hbGxvY2F0ZWRfc2ticysrOwotCQkJcGt0X2Rldi0+Y2xvbmVfY291bnQgPSAwOwkvKiByZXNldCBjb3VudGVyICovCisJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOworCQlpZiAocGt0X2Rldi0+c2tiID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicGt0Z2VuOiBFUlJPUjogY291bGRuJ3QgIgorCQkJICAgICAgICJhbGxvY2F0ZSBza2IgaW4gZmlsbF9wYWNrZXQuXG4iKTsKKwkJCXNjaGVkdWxlKCk7CisJCQlwa3RfZGV2LT5jbG9uZV9jb3VudC0tOwkvKiBiYWNrIG91dCBpbmNyZW1lbnQsIE9PTSAqLworCQkJcmV0dXJuOwogCQl9CisKKwkJcGt0X2Rldi0+YWxsb2NhdGVkX3NrYnMrKzsKKwkJcGt0X2Rldi0+Y2xvbmVfY291bnQgPSAwOwkvKiByZXNldCBjb3VudGVyICovCiAJfQogCiAJLyogZmlsbF9wYWNrZXQoKSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHF1ZXVlICovCkBAIC0zNDMxLDczICszNDQwLDUzIEBACiAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShvZGV2LCBxdWV1ZV9tYXApOwogCiAJX19uZXRpZl90eF9sb2NrX2JoKHR4cSk7Ci0JaWYgKCFuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkgJiYKLQkgICAgIW5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKSB7Ci0KKwlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpIHx8IG5ldGlmX3R4X3F1ZXVlX2Zyb3plbih0eHEpKSkKKwkJcGt0X2Rldi0+bGFzdF9vayA9IDA7CisJZWxzZSB7CiAJCWF0b21pY19pbmMoJihwa3RfZGV2LT5za2ItPnVzZXJzKSk7Ci0JICAgICAgcmV0cnlfbm93OgorCisJcmV0cnlfbm93OgogCQlyZXQgPSAoKnhtaXQpKHBrdF9kZXYtPnNrYiwgb2Rldik7Ci0JCWlmIChsaWtlbHkocmV0ID09IE5FVERFVl9UWF9PSykpIHsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSBORVRERVZfVFhfT0s6CiAJCQl0eHFfdHJhbnNfdXBkYXRlKHR4cSk7CiAJCQlwa3RfZGV2LT5sYXN0X29rID0gMTsKIAkJCXBrdF9kZXYtPnNvZmFyKys7CiAJCQlwa3RfZGV2LT5zZXFfbnVtKys7CiAJCQlwa3RfZGV2LT50eF9ieXRlcyArPSBwa3RfZGV2LT5jdXJfcGt0X3NpemU7Ci0KLQkJfSBlbHNlIGlmIChyZXQgPT0gTkVUREVWX1RYX0xPQ0tFRAotCQkJICAgJiYgKG9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MTFRYKSkgeworCQkJYnJlYWs7CisJCWNhc2UgTkVUREVWX1RYX0xPQ0tFRDoKIAkJCWNwdV9yZWxheCgpOwogCQkJZ290byByZXRyeV9ub3c7Ci0JCX0gZWxzZSB7CS8qIFJldHJ5IGl0IG5leHQgdGltZSAqLwotCi0JCQlhdG9taWNfZGVjKCYocGt0X2Rldi0+c2tiLT51c2VycykpOwotCi0JCQlpZiAoZGVidWcgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0lORk8gInBrdGdlbjogSGFyZCB4bWl0IGVycm9yXG4iKTsKLQorCQlkZWZhdWx0OiAvKiBEcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gcmV0dXJuIG90aGVyIHZhbHVlcyEgKi8KKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJfaW5mbygicGt0Z2VuOiAlcyB4bWl0IGVycm9yOiAlZFxuIiwKKwkJCQkJb2Rldi0+bmFtZSwgcmV0KTsKIAkJCXBrdF9kZXYtPmVycm9ycysrOworCQkJLyogZmFsbHRocnUgKi8KKwkJY2FzZSBORVRERVZfVFhfQlVTWToKKwkJCS8qIFJldHJ5IGl0IG5leHQgdGltZSAqLworCQkJYXRvbWljX2RlYygmKHBrdF9kZXYtPnNrYi0+dXNlcnMpKTsKIAkJCXBrdF9kZXYtPmxhc3Rfb2sgPSAwOwogCQl9CiAKLQkJcGt0X2Rldi0+bmV4dF90eF91cyA9IGdldEN1clVzKCk7Ci0JCXBrdF9kZXYtPm5leHRfdHhfbnMgPSAwOwotCi0JCXBrdF9kZXYtPm5leHRfdHhfdXMgKz0gcGt0X2Rldi0+ZGVsYXlfdXM7Ci0JCXBrdF9kZXYtPm5leHRfdHhfbnMgKz0gcGt0X2Rldi0+ZGVsYXlfbnM7Ci0KLQkJaWYgKHBrdF9kZXYtPm5leHRfdHhfbnMgPiAxMDAwKSB7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X3VzKys7Ci0JCQlwa3RfZGV2LT5uZXh0X3R4X25zIC09IDEwMDA7Ci0JCX0KKwkJaWYgKHBrdF9kZXYtPmRlbGF5KQorCQkJcGt0X2Rldi0+bmV4dF90eCA9IGt0aW1lX2FkZF9ucyhrdGltZV9ub3coKSwKKwkJCQkJCQlwa3RfZGV2LT5kZWxheSk7CiAJfQotCi0JZWxzZSB7CQkJLyogUmV0cnkgaXQgbmV4dCB0aW1lICovCi0JCXBrdF9kZXYtPmxhc3Rfb2sgPSAwOwotCQlwa3RfZGV2LT5uZXh0X3R4X3VzID0gZ2V0Q3VyVXMoKTsJLyogVE9ETyAqLwotCQlwa3RfZGV2LT5uZXh0X3R4X25zID0gMDsKLQl9Ci0KIAlfX25ldGlmX3R4X3VubG9ja19iaCh0eHEpOwogCiAJLyogSWYgcGt0X2Rldi0+Y291bnQgaXMgemVybywgdGhlbiBydW4gZm9yZXZlciAqLwogCWlmICgocGt0X2Rldi0+Y291bnQgIT0gMCkgJiYgKHBrdF9kZXYtPnNvZmFyID49IHBrdF9kZXYtPmNvdW50KSkgewotCQlpZiAoYXRvbWljX3JlYWQoJihwa3RfZGV2LT5za2ItPnVzZXJzKSkgIT0gMSkgewotCQkJaWRsZV9zdGFydCA9IGdldEN1clVzKCk7Ci0JCQl3aGlsZSAoYXRvbWljX3JlYWQoJihwa3RfZGV2LT5za2ItPnVzZXJzKSkgIT0gMSkgewotCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJc2NoZWR1bGUoKTsKLQkJCX0KLQkJCXBrdF9kZXYtPmlkbGVfYWNjICs9IGdldEN1clVzKCkgLSBpZGxlX3N0YXJ0OworCQl3aGlsZSAoYXRvbWljX3JlYWQoJihwa3RfZGV2LT5za2ItPnVzZXJzKSkgIT0gMSkgeworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCWJyZWFrOworCQkJaWRsZShwa3RfZGV2KTsKIAkJfQogCiAJCS8qIERvbmUgd2l0aCB0aGlzICovCiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7Ci0JCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJfQotb3V0OjsKIH0KIAogLyoKQEAgLTM1MTYsNyArMzUwNSw4IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdC0+cXVldWUpOwogCWNvbXBsZXRlKCZ0LT5zdGFydF9kb25lKTsKIAotCXByX2RlYnVnKCJwa3RnZW46IHN0YXJ0aW5nIHBrdGdlbi8lZDogIHBpZD0lZFxuIiwgY3B1LCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CisJcHJfZGVidWcoInBrdGdlbjogc3RhcnRpbmcgcGt0Z2VuLyVkOiAgcGlkPSVkXG4iLAorCQkgY3B1LCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCkBAIC0zNjUxLDggKzM2NDEsNyBAQAogCXBrdF9kZXYtPm1heF9wa3Rfc2l6ZSA9IEVUSF9aTEVOOwogCXBrdF9kZXYtPm5mcmFncyA9IDA7CiAJcGt0X2Rldi0+Y2xvbmVfc2tiID0gcGdfY2xvbmVfc2tiX2Q7Ci0JcGt0X2Rldi0+ZGVsYXlfdXMgPSBwZ19kZWxheV9kIC8gMTAwMDsKLQlwa3RfZGV2LT5kZWxheV9ucyA9IHBnX2RlbGF5X2QgJSAxMDAwOworCXBrdF9kZXYtPmRlbGF5ID0gcGdfZGVsYXlfZDsKIAlwa3RfZGV2LT5jb3VudCA9IHBnX2NvdW50X2Q7CiAJcGt0X2Rldi0+c29mYXIgPSAwOwogCXBrdF9kZXYtPnVkcF9zcmNfbWluID0gOTsJLyogc2luayBwb3J0ICovCkBAIC0zODY0LDEwICszODUzLDE1IEBACiBtb2R1bGVfaW5pdChwZ19pbml0KTsKIG1vZHVsZV9leGl0KHBnX2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJSb2JlcnQgT2xzc29uIDxyb2JlcnQub2xzc29uQGl0cy51dS5zZSIpOworTU9EVUxFX0FVVEhPUigiUm9iZXJ0IE9sc3NvbiA8cm9iZXJ0Lm9sc3NvbkBpdHMudXUuc2U+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBhY2tldCBHZW5lcmF0b3IgdG9vbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oVkVSU0lPTik7CiBtb2R1bGVfcGFyYW0ocGdfY291bnRfZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGdfY291bnRfZCwgIkRlZmF1bHQgbnVtYmVyIG9mIHBhY2tldHMgdG8gaW5qZWN0Iik7CiBtb2R1bGVfcGFyYW0ocGdfZGVsYXlfZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGdfZGVsYXlfZCwgIkRlZmF1bHQgZGVsYXkgYmV0d2VlbiBwYWNrZXRzIChuYW5vc2Vjb25kcykiKTsKIG1vZHVsZV9wYXJhbShwZ19jbG9uZV9za2JfZCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocGdfY2xvbmVfc2tiX2QsICJEZWZhdWx0IG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHNhbWUgcGFja2V0Iik7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIGRlYnVnZ2luZyBvZiBwa3RnZW4gbW9kdWxlIik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IGQ3ODAzMGYuLmViNDI4NzMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FkZHIuaD4KLSNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTUyLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2ZpYl9ydWxlcy5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCiBzdHJ1Y3QgcnRubF9saW5rCiB7CkBAIC02MDYsNyArNjA2LDYgQEAKIAkJCSAgICBpbnQgdHlwZSwgdTMyIHBpZCwgdTMyIHNlcSwgdTMyIGNoYW5nZSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CkBAIC02MzcsOSArNjM2LDggQEAKIAlpZiAoZGV2LT5tYXN0ZXIpCiAJCU5MQV9QVVRfVTMyKHNrYiwgSUZMQV9NQVNURVIsIGRldi0+bWFzdGVyLT5pZmluZGV4KTsKIAotCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQlpZiAodHhxLT5xZGlzY19zbGVlcGluZykKLQkJTkxBX1BVVF9TVFJJTkcoc2tiLCBJRkxBX1FESVNDLCB0eHEtPnFkaXNjX3NsZWVwaW5nLT5vcHMtPmlkKTsKKwlpZiAoZGV2LT5xZGlzYykKKwkJTkxBX1BVVF9TVFJJTkcoc2tiLCBJRkxBX1FESVNDLCBkZXYtPnFkaXNjLT5vcHMtPmlkKTsKIAogCWlmIChkZXYtPmlmYWxpYXMpCiAJCU5MQV9QVVRfU1RSSU5HKHNrYiwgSUZMQV9JRkFMSUFTLCBkZXYtPmlmYWxpYXMpOwpAQCAtNzI1LDI1ICs3MjMsNiBAQAogCVtJRkxBX0lORk9fREFUQV0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBuZXQgKmdldF9uZXRfbnNfYnlfcGlkKHBpZF90IHBpZCkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlzdHJ1Y3QgbmV0ICpuZXQ7Ci0KLQkvKiBMb29rdXAgdGhlIG5ldHdvcmsgbmFtZXNwYWNlICovCi0JbmV0ID0gRVJSX1BUUigtRVNSQ0gpOwotCXJjdV9yZWFkX2xvY2soKTsKLQl0c2sgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwotCWlmICh0c2spIHsKLQkJc3RydWN0IG5zcHJveHkgKm5zcHJveHk7Ci0JCW5zcHJveHkgPSB0YXNrX25zcHJveHkodHNrKTsKLQkJaWYgKG5zcHJveHkpCi0JCQluZXQgPSBnZXRfbmV0KG5zcHJveHktPm5ldF9ucyk7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBuZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgdmFsaWRhdGVfbGlua21zZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdKQogewogCWlmIChkZXYpIHsKQEAgLTk5MywxMiArOTcyLDIwIEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXVuc2lnbmVkIGludCBudW1fcXVldWVzID0gMTsKKwl1bnNpZ25lZCBpbnQgcmVhbF9udW1fcXVldWVzID0gMTsKIAorCWlmIChvcHMtPmdldF90eF9xdWV1ZXMpIHsKKwkJZXJyID0gb3BzLT5nZXRfdHhfcXVldWVzKG5ldCwgdGIsICZudW1fcXVldWVzLCAmcmVhbF9udW1fcXVldWVzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyOworCX0KIAllcnIgPSAtRU5PTUVNOwotCWRldiA9IGFsbG9jX25ldGRldihvcHMtPnByaXZfc2l6ZSwgaWZuYW1lLCBvcHMtPnNldHVwKTsKKwlkZXYgPSBhbGxvY19uZXRkZXZfbXEob3BzLT5wcml2X3NpemUsIGlmbmFtZSwgb3BzLT5zZXR1cCwgbnVtX3F1ZXVlcyk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gZXJyOwogCisJZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSByZWFsX251bV9xdWV1ZXM7CiAJaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKIAkJZXJyID0gZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpOwogCQlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggOWUwNTk3ZC4uODBhOTYxNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTU1OSw5ICs1NTksNiBAQAogI2VuZGlmCiAjZW5kaWYKIAluZXctPnZsYW5fdGNpCQk9IG9sZC0+dmxhbl90Y2k7Ci0jaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTEpIHx8IGRlZmluZWQoQ09ORklHX01BQzgwMjExX01PRFVMRSkKLQluZXctPmRvX25vdF9lbmNyeXB0CT0gb2xkLT5kb19ub3RfZW5jcnlwdDsKLSNlbmRpZgogCiAJc2tiX2NvcHlfc2VjbWFyayhuZXcsIG9sZCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggNzYzMzQyMi4uMzBkNTQ0NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAgKiBzdHJpbmdzIGJ1aWxkLXRpbWUsIHNvIHRoYXQgcnVudGltZSBpbml0aWFsaXphdGlvbiBvZiBzb2NrZXQKICAqIGxvY2tzIGlzIGZhc3QpOgogICovCi1zdGF0aWMgY29uc3QgY2hhciAqYWZfZmFtaWx5X2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBhZl9mYW1pbHlfa2V5X3N0cmluZ3NbQUZfTUFYKzFdID0gewogICAic2tfbG9jay1BRl9VTlNQRUMiLCAic2tfbG9jay1BRl9VTklYIiAgICAgLCAic2tfbG9jay1BRl9JTkVUIiAgICAgLAogICAic2tfbG9jay1BRl9BWDI1IiAgLCAic2tfbG9jay1BRl9JUFgiICAgICAgLCAic2tfbG9jay1BRl9BUFBMRVRBTEsiLAogICAic2tfbG9jay1BRl9ORVRST00iLCAic2tfbG9jay1BRl9CUklER0UiICAgLCAic2tfbG9jay1BRl9BVE1QVkMiICAgLApAQCAtMTU4LDcgKzE1OCw3IEBACiAgICJza19sb2NrLUFGX0lFRUU4MDIxNTQiLAogICAic2tfbG9jay1BRl9NQVgiCiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKmFmX2ZhbWlseV9zbG9ja19rZXlfc3RyaW5nc1tBRl9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYWZfZmFtaWx5X3Nsb2NrX2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKICAgInNsb2NrLUFGX1VOU1BFQyIsICJzbG9jay1BRl9VTklYIiAgICAgLCAic2xvY2stQUZfSU5FVCIgICAgICwKICAgInNsb2NrLUFGX0FYMjUiICAsICJzbG9jay1BRl9JUFgiICAgICAgLCAic2xvY2stQUZfQVBQTEVUQUxLIiwKICAgInNsb2NrLUFGX05FVFJPTSIsICJzbG9jay1BRl9CUklER0UiICAgLCAic2xvY2stQUZfQVRNUFZDIiAgICwKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAic2xvY2stQUZfSUVFRTgwMjE1NCIsCiAgICJzbG9jay1BRl9NQVgiCiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKmFmX2ZhbWlseV9jbG9ja19rZXlfc3RyaW5nc1tBRl9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYWZfZmFtaWx5X2Nsb2NrX2tleV9zdHJpbmdzW0FGX01BWCsxXSA9IHsKICAgImNsb2NrLUFGX1VOU1BFQyIsICJjbG9jay1BRl9VTklYIiAgICAgLCAiY2xvY2stQUZfSU5FVCIgICAgICwKICAgImNsb2NrLUFGX0FYMjUiICAsICJjbG9jay1BRl9JUFgiICAgICAgLCAiY2xvY2stQUZfQVBQTEVUQUxLIiwKICAgImNsb2NrLUFGX05FVFJPTSIsICJjbG9jay1BRl9CUklER0UiICAgLCAiY2xvY2stQUZfQVRNUFZDIiAgICwKQEAgLTQ4Miw2ICs0ODIsOCBAQAogCQlzay0+c2tfcmV1c2UgPSB2YWxib29sOwogCQlicmVhazsKIAljYXNlIFNPX1RZUEU6CisJY2FzZSBTT19QUk9UT0NPTDoKKwljYXNlIFNPX0RPTUFJTjoKIAljYXNlIFNPX0VSUk9SOgogCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CiAJCWJyZWFrOwpAQCAtNzY0LDYgKzc2NiwxNCBAQAogCQl2LnZhbCA9IHNrLT5za190eXBlOwogCQlicmVhazsKIAorCWNhc2UgU09fUFJPVE9DT0w6CisJCXYudmFsID0gc2stPnNrX3Byb3RvY29sOworCQlicmVhazsKKworCWNhc2UgU09fRE9NQUlOOgorCQl2LnZhbCA9IHNrLT5za19mYW1pbHk7CisJCWJyZWFrOworCiAJY2FzZSBTT19FUlJPUjoKIAkJdi52YWwgPSAtc29ja19lcnJvcihzayk7CiAJCWlmICh2LnZhbCA9PSAwKQpkaWZmIC0tZ2l0IGEvbmV0L2RjYi9kY2JubC5jIGIvbmV0L2RjYi9kY2JubC5jCmluZGV4IDgzNzk0OTYuLmUwODc5YmYgMTAwNjQ0Ci0tLSBhL25ldC9kY2IvZGNibmwuYworKysgYi9uZXQvZGNiL2RjYm5sLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAlbRENCX0FUVFJfQ0FQXSAgICAgICAgID0gey50eXBlID0gTkxBX05FU1RFRH0sCiAJW0RDQl9BVFRSX1BGQ19TVEFURV0gICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9BVFRSX0JDTl0gICAgICAgICA9IHsudHlwZSA9IE5MQV9ORVNURUR9LAorCVtEQ0JfQVRUUl9BUFBdICAgICAgICAgPSB7LnR5cGUgPSBOTEFfTkVTVEVEfSwKIH07CiAKIC8qIERDQiBwcmlvcml0eSBmbG93IGNvbnRyb2wgdG8gVXNlciBQcmlvcml0eSBuZXN0ZWQgYXR0cmlidXRlcyAqLwpAQCAtMTU4LDYgKzE1OSwxMyBAQAogCVtEQ0JfQkNOX0FUVFJfQUxMXSAgICAgICAgICA9IHsudHlwZSA9IE5MQV9GTEFHfSwKIH07CiAKKy8qIERDQiBBUFAgbmVzdGVkIGF0dHJpYnV0ZXMuICovCitzdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfYXBwX25lc3RbRENCX0FQUF9BVFRSX01BWCArIDFdID0geworCVtEQ0JfQVBQX0FUVFJfSURUWVBFXSAgICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCisJW0RDQl9BUFBfQVRUUl9JRF0gICAgICAgICAgID0gey50eXBlID0gTkxBX1UxNn0sCisJW0RDQl9BUFBfQVRUUl9QUklPUklUWV0gICAgID0gey50eXBlID0gTkxBX1U4fSwKK307CisKIC8qIHN0YW5kYXJkIG5ldGxpbmsgcmVwbHkgY2FsbCAqLwogc3RhdGljIGludCBkY2JubF9yZXBseSh1OCB2YWx1ZSwgdTggZXZlbnQsIHU4IGNtZCwgdTggYXR0ciwgdTMyIHBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHNlcSwgdTE2IGZsYWdzKQpAQCAtNTM2LDYgKzU0NCwxMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGRjYm5sX2dldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmxhdHRyICoqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgZmxhZ3MpCit7CisJc3RydWN0IHNrX2J1ZmYgKmRjYm5sX3NrYjsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgZGNibXNnICpkY2I7CisJc3RydWN0IG5sYXR0ciAqYXBwX25lc3Q7CisJc3RydWN0IG5sYXR0ciAqYXBwX3RiW0RDQl9BUFBfQVRUUl9NQVggKyAxXTsKKwl1MTYgaWQ7CisJdTggdXAsIGlkdHlwZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghdGJbRENCX0FUVFJfQVBQXSB8fCAhbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGFwcF90YiwgRENCX0FQUF9BVFRSX01BWCwgdGJbRENCX0FUVFJfQVBQXSwKKwkgICAgICAgICAgICAgICAgICAgICAgIGRjYm5sX2FwcF9uZXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FSU5WQUw7CisJLyogYWxsIG11c3QgYmUgbm9uLW51bGwgKi8KKwlpZiAoKCFhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pIHx8CisJICAgICghYXBwX3RiW0RDQl9BUFBfQVRUUl9JRF0pKQorCQlnb3RvIG91dDsKKworCS8qIGVpdGhlciBieSBldGggdHlwZSBvciBieSBzb2NrZXQgbnVtYmVyICovCisJaWR0eXBlID0gbmxhX2dldF91OChhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pOworCWlmICgoaWR0eXBlICE9IERDQl9BUFBfSURUWVBFX0VUSFRZUEUpICYmCisJICAgIChpZHR5cGUgIT0gRENCX0FQUF9JRFRZUEVfUE9SVE5VTSkpCisJCWdvdG8gb3V0OworCisJaWQgPSBubGFfZ2V0X3UxNihhcHBfdGJbRENCX0FQUF9BVFRSX0lEXSk7CisJdXAgPSBuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKG5ldGRldiwgaWR0eXBlLCBpZCk7CisKKwkvKiBzZW5kIHRoaXMgYmFjayAqLworCWRjYm5sX3NrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGNibmxfc2tiKQorCQlnb3RvIG91dDsKKworCW5saCA9IE5MTVNHX05FVyhkY2JubF9za2IsIHBpZCwgc2VxLCBSVE1fR0VURENCLCBzaXplb2YoKmRjYiksIGZsYWdzKTsKKwlkY2IgPSBOTE1TR19EQVRBKG5saCk7CisJZGNiLT5kY2JfZmFtaWx5ID0gQUZfVU5TUEVDOworCWRjYi0+Y21kID0gRENCX0NNRF9HQVBQOworCisJYXBwX25lc3QgPSBubGFfbmVzdF9zdGFydChkY2JubF9za2IsIERDQl9BVFRSX0FQUCk7CisJcmV0ID0gbmxhX3B1dF91OChkY2JubF9za2IsIERDQl9BUFBfQVRUUl9JRFRZUEUsIGlkdHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY2FuY2VsOworCisJcmV0ID0gbmxhX3B1dF91MTYoZGNibmxfc2tiLCBEQ0JfQVBQX0FUVFJfSUQsIGlkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9jYW5jZWw7CisKKwlyZXQgPSBubGFfcHV0X3U4KGRjYm5sX3NrYiwgRENCX0FQUF9BVFRSX1BSSU9SSVRZLCB1cCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY2FuY2VsOworCisJbmxhX25lc3RfZW5kKGRjYm5sX3NrYiwgYXBwX25lc3QpOworCW5sbXNnX2VuZChkY2JubF9za2IsIG5saCk7CisKKwlyZXQgPSBydG5sX3VuaWNhc3QoZGNibmxfc2tiLCAmaW5pdF9uZXQsIHBpZCk7CisJaWYgKHJldCkKKwkJZ290byBubG1zZ19mYWlsdXJlOworCisJZ290byBvdXQ7CisKK291dF9jYW5jZWw6CisJbmxhX25lc3RfY2FuY2VsKGRjYm5sX3NrYiwgYXBwX25lc3QpOworbmxtc2dfZmFpbHVyZToKKwlrZnJlZV9za2IoZGNibmxfc2tiKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRjYm5sX3NldGFwcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgbmxhdHRyICoqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcGlkLCB1MzIgc2VxLCB1MTYgZmxhZ3MpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJdTE2IGlkOworCXU4IHVwLCBpZHR5cGU7CisJc3RydWN0IG5sYXR0ciAqYXBwX3RiW0RDQl9BUFBfQVRUUl9NQVggKyAxXTsKKworCWlmICghdGJbRENCX0FUVFJfQVBQXSB8fCAhbmV0ZGV2LT5kY2JubF9vcHMtPnNldGFwcCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKGFwcF90YiwgRENCX0FQUF9BVFRSX01BWCwgdGJbRENCX0FUVFJfQVBQXSwKKwkgICAgICAgICAgICAgICAgICAgICAgIGRjYm5sX2FwcF9uZXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IC1FSU5WQUw7CisJLyogYWxsIG11c3QgYmUgbm9uLW51bGwgKi8KKwlpZiAoKCFhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pIHx8CisJICAgICghYXBwX3RiW0RDQl9BUFBfQVRUUl9JRF0pIHx8CisJICAgICghYXBwX3RiW0RDQl9BUFBfQVRUUl9QUklPUklUWV0pKQorCQlnb3RvIG91dDsKKworCS8qIGVpdGhlciBieSBldGggdHlwZSBvciBieSBzb2NrZXQgbnVtYmVyICovCisJaWR0eXBlID0gbmxhX2dldF91OChhcHBfdGJbRENCX0FQUF9BVFRSX0lEVFlQRV0pOworCWlmICgoaWR0eXBlICE9IERDQl9BUFBfSURUWVBFX0VUSFRZUEUpICYmCisJICAgIChpZHR5cGUgIT0gRENCX0FQUF9JRFRZUEVfUE9SVE5VTSkpCisJCWdvdG8gb3V0OworCisJaWQgPSBubGFfZ2V0X3UxNihhcHBfdGJbRENCX0FQUF9BVFRSX0lEXSk7CisJdXAgPSBubGFfZ2V0X3U4KGFwcF90YltEQ0JfQVBQX0FUVFJfUFJJT1JJVFldKTsKKworCXJldCA9IGRjYm5sX3JlcGx5KG5ldGRldi0+ZGNibmxfb3BzLT5zZXRhcHAobmV0ZGV2LCBpZHR5cGUsIGlkLCB1cCksCisJICAgICAgICAgICAgICAgICAgUlRNX1NFVERDQiwgRENCX0NNRF9TQVBQLCBEQ0JfQVRUUl9BUFAsCisJICAgICAgICAgICAgICAgICAgcGlkLCBzZXEsIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IF9fZGNibmxfcGdfZ2V0Y2ZnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBubGF0dHIgKip0YiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBpZCwgdTMyIHNlcSwgdTE2IGZsYWdzLCBpbnQgZGlyKQogewpAQCAtMTA5Myw2ICsxMjE1LDE0IEBACiAJCXJldCA9IGRjYm5sX2Jjbl9zZXRjZmcobmV0ZGV2LCB0YiwgcGlkLCBubGgtPm5sbXNnX3NlcSwKIAkJICAgICAgICAgICAgICAgICAgICAgICBubGgtPm5sbXNnX2ZsYWdzKTsKIAkJZ290byBvdXQ7CisJY2FzZSBEQ0JfQ01EX0dBUFA6CisJCXJldCA9IGRjYm5sX2dldGFwcChuZXRkZXYsIHRiLCBwaWQsIG5saC0+bmxtc2dfc2VxLAorCQkgICAgICAgICAgICAgICAgICAgbmxoLT5ubG1zZ19mbGFncyk7CisJCWdvdG8gb3V0OworCWNhc2UgRENCX0NNRF9TQVBQOgorCQlyZXQgPSBkY2JubF9zZXRhcHAobmV0ZGV2LCB0YiwgcGlkLCBubGgtPm5sbXNnX3NlcSwKKwkJICAgICAgICAgICAgICAgICAgIG5saC0+bmxtc2dfZmxhZ3MpOworCQlnb3RvIG91dDsKIAlkZWZhdWx0OgogCQlnb3RvIGVycm91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwppbmRleCBhMjdiN2Y0Li5mNTk2Y2UxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKmNjaWQzX3R4X3N0YXRlX25hbWUoZW51bSBjY2lkM19oY190eF9zdGF0ZXMgc3RhdGUpCiB7Ci0Jc3RhdGljIGNoYXIgKmNjaWQzX3N0YXRlX25hbWVzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNjaWQzX3N0YXRlX25hbWVzW10gPSB7CiAJW1RGUkNfU1NUQVRFX05PX1NFTlRdICA9ICJOT19TRU5UIiwKIAlbVEZSQ19TU1RBVEVfTk9fRkJBQ0tdID0gIk5PX0ZCQUNLIiwKIAlbVEZSQ19TU1RBVEVfRkJBQ0tdICAgID0gIkZCQUNLIiwKQEAgLTY0Niw3ICs2NDYsNyBAQAogI2lmZGVmIENPTkZJR19JUF9EQ0NQX0NDSUQzX0RFQlVHCiBzdGF0aWMgY29uc3QgY2hhciAqY2NpZDNfcnhfc3RhdGVfbmFtZShlbnVtIGNjaWQzX2hjX3J4X3N0YXRlcyBzdGF0ZSkKIHsKLQlzdGF0aWMgY2hhciAqY2NpZDNfcnhfc3RhdGVfbmFtZXNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgY2NpZDNfcnhfc3RhdGVfbmFtZXNbXSA9IHsKIAlbVEZSQ19SU1RBVEVfTk9fREFUQV0gPSAiTk9fREFUQSIsCiAJW1RGUkNfUlNUQVRFX0RBVEFdICAgID0gIkRBVEEiLAogCVtURlJDX1JTVEFURV9URVJNXSAgICA9ICJURVJNIiwKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuYyBiL25ldC9kY2NwL2ZlYXQuYwppbmRleCBiMDQxNjBhLi45NzJiOGRjIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9mZWF0LmMKKysrIGIvbmV0L2RjY3AvZmVhdC5jCkBAIC0yMTMsNyArMjEzLDcgQEAKICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9mbmFtZShjb25zdCB1OCBmZWF0KQogewotCXN0YXRpYyBjb25zdCBjaGFyICpmZWF0dXJlX25hbWVzW10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZlYXR1cmVfbmFtZXNbXSA9IHsKIAkJW0RDQ1BGX1JFU0VSVkVEXQk9ICJSZXNlcnZlZCIsCiAJCVtEQ0NQRl9DQ0lEXQkJPSAiQ0NJRCIsCiAJCVtEQ0NQRl9TSE9SVF9TRVFOT1NdCT0gIkFsbG93IFNob3J0IFNlcW5vcyIsCkBAIC0yMzYsOCArMjM2LDkgQEAKIAlyZXR1cm4gZmVhdHVyZV9uYW1lc1tmZWF0XTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9zbmFtZVtdID0geyAiREVGQVVMVCIsICJJTklUSUFMSVNJTkciLCAiQ0hBTkdJTkciLAotCQkJCQkgIlVOU1RBQkxFIiwgIlNUQUJMRSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY2NwX2ZlYXRfc25hbWVbXSA9IHsKKwkiREVGQVVMVCIsICJJTklUSUFMSVNJTkciLCAiQ0hBTkdJTkciLCAiVU5TVEFCTEUiLCAiU1RBQkxFIiwKK307CiAKICNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF9vbmFtZShjb25zdCB1OCBvcHQpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pcHY0LmMgYi9uZXQvZGNjcC9pcHY0LmMKaW5kZXggYTBhMzZjOS4uZDAxYzAwZCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaXB2NC5jCisrKyBiL25ldC9kY2NwL2lwdjQuYwpAQCAtODgwLDcgKzg4MCw3IEBACiAJZ290byBkaXNjYXJkX2l0OwogfQogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjRfYWZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY0X2FmX29wcyA9IHsKIAkucXVldWVfeG1pdAkgICA9IGlwX3F1ZXVlX3htaXQsCiAJLnNlbmRfY2hlY2sJICAgPSBkY2NwX3Y0X3NlbmRfY2hlY2ssCiAJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCAzZTcwZmFhLi42NGYwMTFjIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0zNSw4ICszNSw4IEBACiAKIC8qIFRoZSBwZXItbmV0IGRjY3AudjZfY3RsX3NrIGlzIHVzZWQgZm9yIHNlbmRpbmcgUlNUcyBhbmQgQUNLcyAqLwogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfbWFwcGVkOwotc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X2FmX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2Nl9tYXBwZWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfYWZfb3BzOwogCiBzdGF0aWMgdm9pZCBkY2NwX3Y2X2hhc2goc3RydWN0IHNvY2sgKnNrKQogewpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfYWZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X2FmX29wcyA9IHsKIAkucXVldWVfeG1pdAkgICA9IGluZXQ2X2Nza194bWl0LAogCS5zZW5kX2NoZWNrCSAgID0gZGNjcF92Nl9zZW5kX2NoZWNrLAogCS5yZWJ1aWxkX2hlYWRlcgkgICA9IGluZXQ2X3NrX3JlYnVpbGRfaGVhZGVyLApAQCAtMTA3Niw3ICsxMDc2LDcgQEAKIC8qCiAgKglEQ0NQIG92ZXIgSVB2NCB2aWEgSU5FVDYgQVBJCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2Nl9tYXBwZWQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfbWFwcGVkID0gewogCS5xdWV1ZV94bWl0CSAgID0gaXBfcXVldWVfeG1pdCwKIAkuc2VuZF9jaGVjawkgICA9IGRjY3BfdjRfc2VuZF9jaGVjaywKIAkucmVidWlsZF9oZWFkZXIJICAgPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggMWJjYTkyMC4uOTIzZGIwNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogY29uc3QgY2hhciAqZGNjcF9wYWNrZXRfbmFtZShjb25zdCBpbnQgdHlwZSkKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9wYWNrZXRfbmFtZXNbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZGNjcF9wYWNrZXRfbmFtZXNbXSA9IHsKIAkJW0RDQ1BfUEtUX1JFUVVFU1RdICA9ICJSRVFVRVNUIiwKIAkJW0RDQ1BfUEtUX1JFU1BPTlNFXSA9ICJSRVNQT05TRSIsCiAJCVtEQ0NQX1BLVF9EQVRBXQkgICAgPSAiREFUQSIsCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogY29uc3QgY2hhciAqZGNjcF9zdGF0ZV9uYW1lKGNvbnN0IGludCBzdGF0ZSkKIHsKLQlzdGF0aWMgY2hhciAqZGNjcF9zdGF0ZV9uYW1lc1tdID0geworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBkY2NwX3N0YXRlX25hbWVzW10gPSB7CiAJW0RDQ1BfT1BFTl0JCT0gIk9QRU4iLAogCVtEQ0NQX1JFUVVFU1RJTkddCT0gIlJFUVVFU1RJTkciLAogCVtEQ0NQX1BBUlRPUEVOXQkJPSAiUEFSVE9QRU4iLApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jIGIvbmV0L2RlY25ldC9kbl9uZWlnaC5jCmluZGV4IDkyMzc4NmIuLjc5NGI1YmYgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbmVpZ2guYworKysgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKQEAgLTU5LDcgKzU5LDcgQEAKIC8qCiAgKiBGb3IgdGFsa2luZyB0byBicm9hZGNhc3QgZGV2aWNlczogRXRoZXJuZXQgJiBQUFAKICAqLwotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgZG5fbG9uZ19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBkbl9sb25nX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0RFQ25ldCwKIAkuZXJyb3JfcmVwb3J0ID0JCWRuX2xvbmdfZXJyb3JfcmVwb3J0LAogCS5vdXRwdXQgPQkJZG5fbG9uZ19vdXRwdXQsCkBAIC03MSw3ICs3MSw3IEBACiAvKgogICogRm9yIHRhbGtpbmcgdG8gcG9pbnRvcG9pbnQgYW5kIG11bHRpZHJvcCBkZXZpY2VzOiBERENNUCBhbmQgWC4yNQogICovCi1zdGF0aWMgc3RydWN0IG5laWdoX29wcyBkbl9zaG9ydF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBkbl9zaG9ydF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9ERUNuZXQsCiAJLmVycm9yX3JlcG9ydCA9CQlkbl9zaG9ydF9lcnJvcl9yZXBvcnQsCiAJLm91dHB1dCA9CQlkbl9zaG9ydF9vdXRwdXQsCkBAIC04Myw3ICs4Myw3IEBACiAvKgogICogRm9yIHRhbGtpbmcgdG8gREVDbmV0IHBoYXNlIElJSSBub2RlcwogICovCi1zdGF0aWMgc3RydWN0IG5laWdoX29wcyBkbl9waGFzZTNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgZG5fcGhhc2UzX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0RFQ25ldCwKIAkuZXJyb3JfcmVwb3J0ID0JCWRuX3Nob3J0X2Vycm9yX3JlcG9ydCwgLyogQ2FuIHVzZSBzaG9ydCB2ZXJzaW9uIGhlcmUgKi8KIAkub3V0cHV0ID0JCWRuX3BoYXNlM19vdXRwdXQsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggMWQ2Y2E4YS4uOTM4M2QzZSAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtNzc0LDcgKzc3NCw3IEBACiAKIAlrZnJlZV9za2Ioc2tiKTsKIAotCXJldHVybiBORVRfUlhfQkFEOworCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAogc3RhdGljIGludCBkbl9ydF9zZXRfbmV4dF9ob3Aoc3RydWN0IGRuX3JvdXRlICpydCwgc3RydWN0IGRuX2ZpYl9yZXMgKnJlcykKZGlmZiAtLWdpdCBhL25ldC9kc2EvZHNhX3ByaXYuaCBiL25ldC9kc2EvZHNhX3ByaXYuaAppbmRleCA0MTA1NWYzLi40YjBlYTA1IDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYV9wcml2LmgKKysrIGIvbmV0L2RzYS9kc2FfcHJpdi5oCkBAIC0xNjksMTMgKzE2OSwxMyBAQAogCQkJCSAgICBpbnQgcG9ydCwgY2hhciAqbmFtZSk7CiAKIC8qIHRhZ19kc2EuYyAqLwotaW50IGRzYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworbmV0ZGV2X3R4X3QgZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIHRhZ19lZHNhLmMgKi8KLWludCBlZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCBlZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qIHRhZ190cmFpbGVyLmMgKi8KLWludCB0cmFpbGVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCB0cmFpbGVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19kc2EuYyBiL25ldC9kc2EvdGFnX2RzYS5jCmluZGV4IDhmYTI1YmEuLmNkZjJkMjggMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX2RzYS5jCisrKyBiL25ldC9kc2EvdGFnX2RzYS5jCkBAIC0xNSw3ICsxNSw3IEBACiAKICNkZWZpbmUgRFNBX0hMRU4JNAogCi1pbnQgZHNhX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGRzYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCAqZHNhX2hlYWRlcjsKZGlmZiAtLWdpdCBhL25ldC9kc2EvdGFnX2Vkc2EuYyBiL25ldC9kc2EvdGFnX2Vkc2EuYwppbmRleCA4MTU2MDdiLi44ZjUzOTQ4IDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19lZHNhLmMKKysrIGIvbmV0L2RzYS90YWdfZWRzYS5jCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIERTQV9ITEVOCTQKICNkZWZpbmUgRURTQV9ITEVOCTgKIAotaW50IGVkc2FfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgZWRzYV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCAqZWRzYV9oZWFkZXI7CmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ190cmFpbGVyLmMgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKaW5kZXggMWMzZTMwYy4uYTg1YzgyOSAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfdHJhaWxlci5jCisrKyBiL25ldC9kc2EvdGFnX3RyYWlsZXIuYwpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgImRzYV9wcml2LmgiCiAKLWludCB0cmFpbGVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IHRyYWlsZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CmRpZmYgLS1naXQgYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwppbmRleCBmMGJiYzU3Li4wZTAyNTRmIDEwMDY0NAotLS0gYS9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCisrKyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBlY19mcmFtZWhkcikpOwogCQluZXRpZl9yeChza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCX0KIAogCXNrID0gZWNfbGlzdGVuaW5nX3NvY2tldChoZHItPnBvcnQsIGhkci0+c3JjX3N0biwgaGRyLT5zcmNfbmV0KTsKQEAgLTEwODQsNyArMTA4NCw3IEBACiAJCQkgICAgaGRyLT5wb3J0KSkKIAkJZ290byBkcm9wOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQppbmRleCBmOTkzMzhhLi40MDY4YTlmIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQorKysgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLW9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPQlubDgwMjE1NC5vIGFmXzgwMjE1NC5vCitvYmotJChDT05GSUdfSUVFRTgwMjE1NCkgKz0Jbmw4MDIxNTQubyBhZl84MDIxNTQubyB3cGFuLWNsYXNzLm8KIG5sODAyMTU0LXkJCTo9IG5ldGxpbmsubyBubF9wb2xpY3kubwogYWZfODAyMTU0LXkJCTo9IGFmX2llZWU4MDIxNTQubyByYXcubyBkZ3JhbS5vCiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuYyBiL25ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuYwppbmRleCBhZjY2MTgwLi5jZDk0OWQ1IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9hZl9pZWVlODAyMTU0LmMKKysrIGIvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5jCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSA8bmV0L3RjcF9zdGF0ZXMuaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0X25ldGRldi5oPgogCiAjaW5jbHVkZSAiYWY4MDIxNTQuaCIKIApAQCAtMTQ3LDkgKzE0Nyw3IEBACiAJZGV2X2xvYWQoc29ja19uZXQoc2spLCBpZnIuaWZyX25hbWUpOwogCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIGlmci5pZnJfbmFtZSk7CiAKLQlpZiAoKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCB8fAotCSAgICAgZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTU0X1BIWSkgJiYKLQkgICAgZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpCisJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCAmJiBkZXYtPm5ldGRldl9vcHMtPm5kb19kb19pb2N0bCkKIAkJcmV0ID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwoZGV2LCAmaWZyLCBjbWQpOwogCiAJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZywgJmlmciwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpKQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvZGdyYW0uYyBiL25ldC9pZWVlODAyMTU0L2RncmFtLmMKaW5kZXggYmE4YjIxNC4uNzdhZTY4NSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxNTQvZGdyYW0uYworKysgYi9uZXQvaWVlZTgwMjE1NC9kZ3JhbS5jCkBAIC0yNiw5ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L21hY19kZWYuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0Lmg+CisjaW5jbHVkZSA8bmV0L2llZWU4MDIxNTRfbmV0ZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKQEAgLTQwLDkgKzQwLDExIEBACiBzdHJ1Y3QgZGdyYW1fc29jayB7CiAJc3RydWN0IHNvY2sgc2s7CiAKLQlpbnQgYm91bmQ7CiAJc3RydWN0IGllZWU4MDIxNTRfYWRkciBzcmNfYWRkcjsKIAlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGRzdF9hZGRyOworCisJdW5zaWduZWQgYm91bmQ6MTsKKwl1bnNpZ25lZCB3YW50X2FjazoxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZGdyYW1fc29jayAqZGdyYW1fc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpAQCAtNTAsNyArNTIsNiBAQAogCXJldHVybiBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCBkZ3JhbV9zb2NrLCBzayk7CiB9CiAKLQogc3RhdGljIHZvaWQgZGdyYW1faGFzaChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJd3JpdGVfbG9ja19iaCgmZGdyYW1fbG9jayk7CkBAIC03Myw2ICs3NCw3IEBACiAKIAlyby0+ZHN0X2FkZHIuYWRkcl90eXBlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7CiAJcm8tPmRzdF9hZGRyLnBhbl9pZCA9IDB4ZmZmZjsKKwlyby0+d2FudF9hY2sgPSAxOwogCW1lbXNldCgmcm8tPmRzdF9hZGRyLmh3YWRkciwgMHhmZiwgc2l6ZW9mKHJvLT5kc3RfYWRkci5od2FkZHIpKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg2LDE4ICs4OCwxOCBAQAogewogCXN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICopdWFkZHI7CiAJc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOwotCWludCBlcnIgPSAwOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKKwlsb2NrX3NvY2soc2spOworCiAJcm8tPmJvdW5kID0gMDsKIAogCWlmIChsZW4gPCBzaXplb2YoKmFkZHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CiAKIAlpZiAoYWRkci0+ZmFtaWx5ICE9IEFGX0lFRUU4MDIxNTQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbG9ja19zb2NrKHNrKTsKKwkJZ290byBvdXQ7CiAKIAlkZXYgPSBpZWVlODAyMTU0X2dldF9kZXYoc29ja19uZXQoc2spLCAmYWRkci0+YWRkcik7CiAJaWYgKCFkZXYpIHsKQEAgLTExMyw2ICsxMTUsNyBAQAogCW1lbWNweSgmcm8tPnNyY19hZGRyLCAmYWRkci0+YWRkciwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTU0X2FkZHIpKTsKIAogCXJvLT5ib3VuZCA9IDE7CisJZXJyID0gMDsKIG91dF9wdXQ6CiAJZGV2X3B1dChkZXYpOwogb3V0OgpAQCAtMjM1LDcgKzIzOCwxMCBAQAogCiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAKLQltYWNfY2Ioc2tiKS0+ZmxhZ3MgPSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQSB8IE1BQ19DQl9GTEFHX0FDS1JFUTsKKwltYWNfY2Ioc2tiKS0+ZmxhZ3MgPSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQTsKKwlpZiAocm8tPndhbnRfYWNrKQorCQltYWNfY2Ioc2tiKS0+ZmxhZ3MgfD0gTUFDX0NCX0ZMQUdfQUNLUkVROworCiAJbWFjX2NiKHNrYiktPnNlcSA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+Z2V0X2RzbihkZXYpOwogCWVyciA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfSUVFRTgwMjE1NCwgJnJvLT5kc3RfYWRkciwKIAkJCXJvLT5ib3VuZCA/ICZyby0+c3JjX2FkZHIgOiBOVUxMLCBzaXplKTsKQEAgLTM4MCwxMyArMzg2LDU5IEBACiBzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewotCXJldHVybiAtRU9QTk9UU1VQUDsKKwlzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7CisKKwlpbnQgdmFsLCBsZW47CisKKwlpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgV1BBTl9XQU5UQUNLOgorCQl2YWwgPSByby0+d2FudF9hY2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJfQorCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZ2YWwsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRncmFtX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciBvcHRsZW4pCiB7Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOworCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKKwlpbnQgdmFsOworCWludCBlcnIgPSAwOworCisJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopb3B0dmFsKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBXUEFOX1dBTlRBQ0s6CisJCXJvLT53YW50X2FjayA9ICEhdmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RydWN0IHByb3RvIGllZWU4MDIxNTRfZGdyYW1fcHJvdCA9IHsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L25ldGxpbmsuYyBiL25ldC9pZWVlODAyMTU0L25ldGxpbmsuYwppbmRleCAyN2VkYTlmLi4yMTA2ZWNiIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMKKysrIGIvbmV0L2llZWU4MDIxNTQvbmV0bGluay5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBXcml0dGVuIGJ5OgogICogU2VyZ2V5IExhcGluIDxzbGFwaW5Ab3NzZmFucy5vcmc+CiAgKiBEbWl0cnkgRXJlbWluLVNvbGVuaWtvdiA8ZGJhcnlzaGtvdkBnbWFpbC5jb20+CisgKiBNYXhpbSBPc2lwb3YgPG1heGltLm9zaXBvdkBzaWVtZW5zLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0yNiwxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L25sODAyMTU0Lmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L25sODAyMTU0Lmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTQvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2FmX2llZWU4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvbmw4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0X25ldGRldi5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGllZWU4MDIxNTRfc2VxX251bTsKIApAQCAtNzMsNyArNzYsNyBAQAogCS8qIFhYWDogbmxoIGlzIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiBtc2cgKi8KIAl2b2lkICpoZHIgPSBnZW5sbXNnX2RhdGEoTkxNU0dfREFUQShtc2ctPmRhdGEpKTsKIAotCWlmICghZ2VubG1zZ19lbmQobXNnLCBoZHIpKQorCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKQogCQlnb3RvIG91dDsKIAogCXJldHVybiBnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIGllZWU4MDIxNTRfY29vcmRfbWNncnAuaWQsCkBAIC0yMjksNyArMjMyLDcgQEAKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9ubF9iZWFjb25faW5kaWMpOwogCiBpbnQgaWVlZTgwMjE1NF9ubF9zY2FuX2NvbmZpcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJdTggc3RhdHVzLCB1OCBzY2FuX3R5cGUsIHUzMiB1bnNjYW5uZWQsCisJCXU4IHN0YXR1cywgdTggc2Nhbl90eXBlLCB1MzIgdW5zY2FubmVkLCB1OCBwYWdlLAogCQl1OCAqZWRsLyogLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYW5fZGVzY19saXN0ICovKQogewogCXN0cnVjdCBza19idWZmICptc2c7CkBAIC0yNDgsNiArMjUxLDcgQEAKIAlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NUQVRVUywgc3RhdHVzKTsKIAlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRSwgc2Nhbl90eXBlKTsKIAlOTEFfUFVUX1UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9DSEFOTkVMUywgdW5zY2FubmVkKTsKKwlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1BBR0UsIHBhZ2UpOwogCiAJaWYgKGVkbCkKIAkJTkxBX1BVVChtc2csIElFRUU4MDIxNTRfQVRUUl9FRF9MSVNULCAyNywgZWRsKTsKQEAgLTI2MCw2ICsyNjQsNjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9ubF9zY2FuX2NvbmZpcm0pOwogCitpbnQgaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwltc2cgPSBpZWVlODAyMTU0X25sX2NyZWF0ZSgwLCBJRUVFODAyMTU0X1NUQVJUX0NPTkYpOworCWlmICghbXNnKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlOTEFfUFVUX1NUUklORyhtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRSwgZGV2LT5uYW1lKTsKKwlOTEFfUFVUX1UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi0+aWZpbmRleCk7CisJTkxBX1BVVChtc2csIElFRUU4MDIxNTRfQVRUUl9IV19BRERSLCBJRUVFODAyMTU0X0FERFJfTEVOLAorCQkJZGV2LT5kZXZfYWRkcik7CisKKwlOTEFfUFVUX1U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NUQVRVUywgc3RhdHVzKTsKKworCXJldHVybiBpZWVlODAyMTU0X25sX2ZpbmlzaChtc2cpOworCitubGFfcHV0X2ZhaWx1cmU6CisJbmxtc2dfZnJlZShtc2cpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjE1NF9ubF9zdGFydF9jb25maXJtKTsKKworc3RhdGljIGludCBpZWVlODAyMTU0X25sX2ZpbGxfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwKKwl1MzIgc2VxLCBpbnQgZmxhZ3MsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdm9pZCAqaGRyOworCisJcHJfZGVidWcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwloZHIgPSBnZW5sbXNnX3B1dChtc2csIDAsIHNlcSwgJmllZWU4MDIxNTRfY29vcmRpbmF0b3JfZmFtaWx5LCBmbGFncywKKwkJSUVFRTgwMjE1NF9MSVNUX0lGQUNFKTsKKwlpZiAoIWhkcikKKwkJZ290byBvdXQ7CisKKwlOTEFfUFVUX1NUUklORyhtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRSwgZGV2LT5uYW1lKTsKKwlOTEFfUFVUX1UzMihtc2csIElFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVgsIGRldi0+aWZpbmRleCk7CisKKwlOTEFfUFVUKG1zZywgSUVFRTgwMjE1NF9BVFRSX0hXX0FERFIsIElFRUU4MDIxNTRfQUREUl9MRU4sCisJCWRldi0+ZGV2X2FkZHIpOworCU5MQV9QVVRfVTE2KG1zZywgSUVFRTgwMjE1NF9BVFRSX1NIT1JUX0FERFIsCisJCWllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+Z2V0X3Nob3J0X2FkZHIoZGV2KSk7CisJTkxBX1BVVF9VMTYobXNnLCBJRUVFODAyMTU0X0FUVFJfUEFOX0lELAorCQlpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPmdldF9wYW5faWQoZGV2KSk7CisJcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKworbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKK291dDoKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCiAvKiBSZXF1ZXN0cyBmcm9tIHVzZXJzcGFjZSAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICppZWVlODAyMTU0X25sX2dldF9kZXYoc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKQEAgLTI3Miw3ICszMzAsNyBAQAogCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoJmluaXRfbmV0LCBuYW1lKTsKIAl9IGVsc2UgaWYgKGluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9ERVZfSU5ERVhdKQogCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwKLQkJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfREVWX0lOREVYXSkpOworCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0pKTsKIAllbHNlCiAJCXJldHVybiBOVUxMOwogCkBAIC0yOTIsNiArMzUwLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgYWRkcjsKKwl1OCBwYWdlOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0gfHwKQEAgLTMxNyw4ICszNzYsMTQgQEAKIAl9CiAJYWRkci5wYW5faWQgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUEFOX0lEXSk7CiAKKwlpZiAoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdKQorCQlwYWdlID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfUEFHRV0pOworCWVsc2UKKwkJcGFnZSA9IDA7CisKIAlyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPmFzc29jX3JlcShkZXYsICZhZGRyLAogCQkJbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTF0pLAorCQkJcGFnZSwKIAkJCW5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NBUEFCSUxJVFldKSk7CiAKIAlkZXZfcHV0KGRldik7CkBAIC00MDEsNiArNDY2LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGFkZHI7CiAKIAl1OCBjaGFubmVsLCBiY25fb3JkLCBzZl9vcmQ7CisJdTggcGFnZTsKIAlpbnQgcGFuX2Nvb3JkLCBibHgsIGNvb3JkX3JlYWxpZ247CiAJaW50IHJldDsKIApAQCAtNDMxLDcgKzQ5NywxOSBAQAogCWJseCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0JBVF9FWFRdKTsKIAljb29yZF9yZWFsaWduID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ09PUkRfUkVBTElHTl0pOwogCi0JcmV0ID0gaWVlZTgwMjE1NF9tbG1lX29wcyhkZXYpLT5zdGFydF9yZXEoZGV2LCAmYWRkciwgY2hhbm5lbCwKKwlpZiAoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdKQorCQlwYWdlID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfUEFHRV0pOworCWVsc2UKKwkJcGFnZSA9IDA7CisKKworCWlmIChhZGRyLnNob3J0X2FkZHIgPT0gSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVCkgeworCQlpZWVlODAyMTU0X25sX3N0YXJ0X2NvbmZpcm0oZGV2LCBJRUVFODAyMTU0X05PX1NIT1JUX0FERFJFU1MpOworCQlkZXZfcHV0KGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+c3RhcnRfcmVxKGRldiwgJmFkZHIsIGNoYW5uZWwsIHBhZ2UsCiAJCWJjbl9vcmQsIHNmX29yZCwgcGFuX2Nvb3JkLCBibHgsIGNvb3JkX3JlYWxpZ24pOwogCiAJZGV2X3B1dChkZXYpOwpAQCAtNDQ1LDYgKzUyMyw3IEBACiAJdTggdHlwZTsKIAl1MzIgY2hhbm5lbHM7CiAJdTggZHVyYXRpb247CisJdTggcGFnZTsKIAogCWlmICghaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1NDQU5fVFlQRV0gfHwKIAkgICAgIWluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMU10gfHwKQEAgLTQ1OSwxMyArNTM4LDgwIEBACiAJY2hhbm5lbHMgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0hBTk5FTFNdKTsKIAlkdXJhdGlvbiA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0RVUkFUSU9OXSk7CiAKLQlyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPnNjYW5fcmVxKGRldiwgdHlwZSwgY2hhbm5lbHMsCisJaWYgKGluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9QQUdFXSkKKwkJcGFnZSA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX1BBR0VdKTsKKwllbHNlCisJCXBhZ2UgPSAwOworCisKKwlyZXQgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPnNjYW5fcmVxKGRldiwgdHlwZSwgY2hhbm5lbHMsIHBhZ2UsCiAJCQlkdXJhdGlvbik7CiAKIAlkZXZfcHV0KGRldik7CiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTU0X2xpc3RfaWZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCS8qIFJlcXVlc3QgZm9yIGludGVyZmFjZSBuYW1lLCBpbmRleCwgdHlwZSwgSUVFRSBhZGRyZXNzLAorCSAgIFBBTiBJZCwgc2hvcnQgYWRkcmVzcyAqLworCXN0cnVjdCBza19idWZmICptc2c7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJaW50IHJjID0gLUVOT0JVRlM7CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWRldiA9IGllZWU4MDIxNTRfbmxfZ2V0X2RldihpbmZvKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlnb3RvIG91dF9kZXY7CisKKwlyYyA9IGllZWU4MDIxNTRfbmxfZmlsbF9pZmFjZShtc2csIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsCisJCQkwLCBkZXYpOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlkZXZfcHV0KGRldik7CisKKwlyZXR1cm4gZ2VubG1zZ191bmljYXN0KCZpbml0X25ldCwgbXNnLCBpbmZvLT5zbmRfcGlkKTsKK291dF9mcmVlOgorCW5sbXNnX2ZyZWUobXNnKTsKK291dF9kZXY6CisJZGV2X3B1dChkZXYpOworCXJldHVybiByYzsKKworfQorCitzdGF0aWMgaW50IGllZWU4MDIxNTRfZHVtcF9pZmFjZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpZHg7CisJaW50IHNfaWR4ID0gY2ItPmFyZ3NbMF07CisKKwlwcl9kZWJ1ZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWlkeCA9IDA7CisJZm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KSB7CisJCWlmIChpZHggPCBzX2lkeCB8fCAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSkKKwkJCWdvdG8gY29udDsKKworCQlpZiAoaWVlZTgwMjE1NF9ubF9maWxsX2lmYWNlKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQljYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLCBkZXYpIDwgMCkKKwkJCWJyZWFrOworY29udDoKKwkJaWR4Kys7CisJfQorCWNiLT5hcmdzWzBdID0gaWR4OworCisJcmV0dXJuIHNrYi0+bGVuOworfQorCiAjZGVmaW5lIElFRUU4MDIxNTRfT1AoX2NtZCwgX2Z1bmMpCQkJXAogCXsJCQkJCQlcCiAJCS5jbWQJPSBfY21kLAkJCQlcCkBAIC00NzUsMTIgKzYyMSwyMiBAQAogCQkuZmxhZ3MJPSBHRU5MX0FETUlOX1BFUk0sCQlcCiAJfQogCisjZGVmaW5lIElFRUU4MDIxNTRfRFVNUChfY21kLCBfZnVuYywgX2R1bXApCQlcCisJewkJCQkJCVwKKwkJLmNtZAk9IF9jbWQsCQkJCVwKKwkJLnBvbGljeQk9IGllZWU4MDIxNTRfcG9saWN5LAkJXAorCQkuZG9pdAk9IF9mdW5jLAkJCVwKKwkJLmR1bXBpdAk9IF9kdW1wLAkJCVwKKwl9CisKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgaWVlZTgwMjE1NF9jb29yZGluYXRvcl9vcHNbXSA9IHsKIAlJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFUSwgaWVlZTgwMjE1NF9hc3NvY2lhdGVfcmVxKSwKIAlJRUVFODAyMTU0X09QKElFRUU4MDIxNTRfQVNTT0NJQVRFX1JFU1AsIGllZWU4MDIxNTRfYXNzb2NpYXRlX3Jlc3ApLAogCUlFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9ESVNBU1NPQ0lBVEVfUkVRLCBpZWVlODAyMTU0X2Rpc2Fzc29jaWF0ZV9yZXEpLAogCUlFRUU4MDIxNTRfT1AoSUVFRTgwMjE1NF9TQ0FOX1JFUSwgaWVlZTgwMjE1NF9zY2FuX3JlcSksCiAJSUVFRTgwMjE1NF9PUChJRUVFODAyMTU0X1NUQVJUX1JFUSwgaWVlZTgwMjE1NF9zdGFydF9yZXEpLAorCUlFRUU4MDIxNTRfRFVNUChJRUVFODAyMTU0X0xJU1RfSUZBQ0UsIGllZWU4MDIxNTRfbGlzdF9pZmFjZSwKKwkJCQkJCQlpZWVlODAyMTU0X2R1bXBfaWZhY2UpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaWVlZTgwMjE1NF9ubF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9ubF9wb2xpY3kuYyBiL25ldC9pZWVlODAyMTU0L25sX3BvbGljeS5jCmluZGV4IGM3ZDcxZDEuLjIzNjNlYmUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L25sX3BvbGljeS5jCisrKyBiL25ldC9pZWVlODAyMTU0L25sX3BvbGljeS5jCkBAIC0yNCw3ICsyNCw3IEBACiAKICNkZWZpbmUgTkxBX0hXX0FERFIgTkxBX1U2NAogCi1zdHJ1Y3QgbmxhX3BvbGljeSBpZWVlODAyMTU0X3BvbGljeVtJRUVFODAyMTU0X0FUVFJfTUFYICsgMV0gPSB7Citjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZWVlODAyMTU0X3BvbGljeVtJRUVFODAyMTU0X0FUVFJfTUFYICsgMV0gPSB7CiAJW0lFRUU4MDIxNTRfQVRUUl9ERVZfTkFNRV0gPSB7IC50eXBlID0gTkxBX1NUUklORywgfSwKIAlbSUVFRTgwMjE1NF9BVFRSX0RFVl9JTkRFWF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSwKIApAQCAtMzMsNiArMzMsNyBAQAogCVtJRUVFODAyMTU0X0FUVFJfSFdfQUREUl0gPSB7IC50eXBlID0gTkxBX0hXX0FERFIsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9QQU5fSURdID0geyAudHlwZSA9IE5MQV9VMTYsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9DSEFOTkVMXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCisJW0lFRUU4MDIxNTRfQVRUUl9QQUdFXSA9IHsgLnR5cGUgPSBOTEFfVTgsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9TSE9SVF9BRERSXSA9IHsgLnR5cGUgPSBOTEFfVTE2LCB9LAogCVtJRUVFODAyMTU0X0FUVFJfQ09PUkRfSFdfQUREUl0gPSB7IC50eXBlID0gTkxBX0hXX0FERFIsIH0sCiAJW0lFRUU4MDIxNTRfQVRUUl9DT09SRF9QQU5fSURdID0geyAudHlwZSA9IE5MQV9VMTYsIH0sCkBAIC01MCwzICs1MSw0IEBACiAJW0lFRUU4MDIxNTRfQVRUUl9EVVJBVElPTl0gPSB7IC50eXBlID0gTkxBX1U4LCB9LAogCVtJRUVFODAyMTU0X0FUVFJfRURfTElTVF0gPSB7IC5sZW4gPSAyNyB9LAogfTsKKwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvcmF3LmMgYi9uZXQvaWVlZTgwMjE1NC9yYXcuYwppbmRleCA5MzE1OTc3Li40NjgxNTAxIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9yYXcuYworKysgYi9uZXQvaWVlZTgwMjE1NC9yYXcuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuaD4KKyNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgogCiAjaW5jbHVkZSAiYWY4MDIxNTQuaCIKIApAQCAtNzQsOCArNzQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0X1BIWSAmJgotCSAgICBkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpIHsKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSB7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3B1dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC93cGFuLWNsYXNzLmMgYi9uZXQvaWVlZTgwMjE1NC93cGFuLWNsYXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwNjYwNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pZWVlODAyMTU0L3dwYW4tY2xhc3MuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBTaWVtZW5zIEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L3dwYW4tcGh5Lmg+CisKKyNkZWZpbmUgTUFTVEVSX1NIT1dfQ09NUExFWChuYW1lLCBmb3JtYXRfc3RyaW5nLCBhcmdzLi4uKQkJXAorc3RhdGljIHNzaXplX3QgbmFtZSAjIyBfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHdwYW5fcGh5ICpwaHkgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgd3Bhbl9waHksIGRldik7CVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJbXV0ZXhfbG9jaygmcGh5LT5waWJfbG9jayk7CQkJCQlcCisJcmV0ID0gc3ByaW50ZihidWYsIGZvcm1hdF9zdHJpbmcgIlxuIiwgYXJncyk7CQkJXAorCW11dGV4X3VubG9jaygmcGh5LT5waWJfbG9jayk7CQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQorCisjZGVmaW5lIE1BU1RFUl9TSE9XKGZpZWxkLCBmb3JtYXRfc3RyaW5nKQkJCQlcCisJTUFTVEVSX1NIT1dfQ09NUExFWChmaWVsZCwgZm9ybWF0X3N0cmluZywgcGh5LT5maWVsZCkKKworTUFTVEVSX1NIT1coY3VycmVudF9jaGFubmVsLCAiJWQiKTsKK01BU1RFUl9TSE9XKGN1cnJlbnRfcGFnZSwgIiVkIik7CitNQVNURVJfU0hPVyhjaGFubmVsc19zdXBwb3J0ZWQsICIlI3giKTsKK01BU1RFUl9TSE9XX0NPTVBMRVgodHJhbnNtaXRfcG93ZXIsICIlZCArLSAlZCBkQiIsCisJKChzaWduZWQgY2hhcikgKHBoeS0+dHJhbnNtaXRfcG93ZXIgPDwgMikpID4+IDIsCisJKHBoeS0+dHJhbnNtaXRfcG93ZXIgPj4gNikgPyAocGh5LT50cmFuc21pdF9wb3dlciA+PiA2KSAqIDMgOiAxICk7CitNQVNURVJfU0hPVyhjY2FfbW9kZSwgIiVkIik7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBwbWliX2F0dHJzW10gPSB7CisJX19BVFRSX1JPKGN1cnJlbnRfY2hhbm5lbCksCisJX19BVFRSX1JPKGN1cnJlbnRfcGFnZSksCisJX19BVFRSX1JPKGNoYW5uZWxzX3N1cHBvcnRlZCksCisJX19BVFRSX1JPKHRyYW5zbWl0X3Bvd2VyKSwKKwlfX0FUVFJfUk8oY2NhX21vZGUpLAorCXt9LAorfTsKKworc3RhdGljIHZvaWQgd3Bhbl9waHlfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkKQoreworCXN0cnVjdCB3cGFuX3BoeSAqcGh5ID0gY29udGFpbmVyX29mKGQsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTsKKwlrZnJlZShwaHkpOworfQorCitzdGF0aWMgc3RydWN0IGNsYXNzIHdwYW5fcGh5X2NsYXNzID0geworCS5uYW1lID0gImllZWU4MDIxNTQiLAorCS5kZXZfcmVsZWFzZSA9IHdwYW5fcGh5X3JlbGVhc2UsCisJLmRldl9hdHRycyA9IHBtaWJfYXR0cnMsCit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKHdwYW5fcGh5X211dGV4KTsKK3N0YXRpYyBpbnQgd3Bhbl9waHlfaWR4OworCitzdGF0aWMgaW50IHdwYW5fcGh5X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gIXN0cmNtcChkZXZfbmFtZShkZXYpLCAoY29uc3QgY2hhciAqKWRhdGEpOworfQorCitzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2ZpbmQoY29uc3QgY2hhciAqc3RyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWlmIChXQVJOX09OKCFzdHIpKQorCQlyZXR1cm4gTlVMTDsKKworCWRldiA9IGNsYXNzX2ZpbmRfZGV2aWNlKCZ3cGFuX3BoeV9jbGFzcywgTlVMTCwKKwkJCSh2b2lkICopc3RyLCB3cGFuX3BoeV9tYXRjaCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB3cGFuX3BoeSwgZGV2KTsKK30KK0VYUE9SVF9TWU1CT0wod3Bhbl9waHlfZmluZCk7CisKK3N0YXRpYyBpbnQgd3Bhbl9waHlfaWR4X3ZhbGlkKGludCBpZHgpCit7CisJcmV0dXJuIGlkeCA+PSAwOworfQorCitzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5X2FsbG9jKHNpemVfdCBwcml2X3NpemUpCit7CisJc3RydWN0IHdwYW5fcGh5ICpwaHkgPSBremFsbG9jKHNpemVvZigqcGh5KSArIHByaXZfc2l6ZSwKKwkJCUdGUF9LRVJORUwpOworCisJbXV0ZXhfbG9jaygmd3Bhbl9waHlfbXV0ZXgpOworCXBoeS0+aWR4ID0gd3Bhbl9waHlfaWR4Kys7CisJaWYgKHVubGlrZWx5KCF3cGFuX3BoeV9pZHhfdmFsaWQocGh5LT5pZHgpKSkgeworCQl3cGFuX3BoeV9pZHgtLTsKKwkJbXV0ZXhfdW5sb2NrKCZ3cGFuX3BoeV9tdXRleCk7CisJCWtmcmVlKHBoeSk7CisJCXJldHVybiBOVUxMOworCX0KKwltdXRleF91bmxvY2soJndwYW5fcGh5X211dGV4KTsKKworCW11dGV4X2luaXQoJnBoeS0+cGliX2xvY2spOworCisJZGV2aWNlX2luaXRpYWxpemUoJnBoeS0+ZGV2KTsKKwlkZXZfc2V0X25hbWUoJnBoeS0+ZGV2LCAid3Bhbi1waHklZCIsIHBoeS0+aWR4KTsKKworCXBoeS0+ZGV2LmNsYXNzID0gJndwYW5fcGh5X2NsYXNzOworCisJcmV0dXJuIHBoeTsKK30KK0VYUE9SVF9TWU1CT0wod3Bhbl9waHlfYWxsb2MpOworCitpbnQgd3Bhbl9waHlfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSkKK3sKKwlwaHktPmRldi5wYXJlbnQgPSBwYXJlbnQ7CisKKwlyZXR1cm4gZGV2aWNlX2FkZCgmcGh5LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTCh3cGFuX3BoeV9yZWdpc3Rlcik7CisKK3ZvaWQgd3Bhbl9waHlfdW5yZWdpc3RlcihzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSkKK3sKKwlkZXZpY2VfZGVsKCZwaHktPmRldik7Cit9CitFWFBPUlRfU1lNQk9MKHdwYW5fcGh5X3VucmVnaXN0ZXIpOworCit2b2lkIHdwYW5fcGh5X2ZyZWUoc3RydWN0IHdwYW5fcGh5ICpwaHkpCit7CisJcHV0X2RldmljZSgmcGh5LT5kZXYpOworfQorRVhQT1JUX1NZTUJPTCh3cGFuX3BoeV9mcmVlKTsKKworc3RhdGljIGludCBfX2luaXQgd3Bhbl9waHlfY2xhc3NfaW5pdCh2b2lkKQoreworCXJldHVybiBjbGFzc19yZWdpc3Rlcigmd3Bhbl9waHlfY2xhc3MpOworfQorc3Vic3lzX2luaXRjYWxsKHdwYW5fcGh5X2NsYXNzX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd3Bhbl9waHlfY2xhc3NfZXhpdCh2b2lkKQoreworCWNsYXNzX3VucmVnaXN0ZXIoJndwYW5fcGh5X2NsYXNzKTsKK30KK21vZHVsZV9leGl0KHdwYW5fcGh5X2NsYXNzX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIklFRUUgODAyLjE1LjQgZGV2aWNlIGNsYXNzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCA1NjZlYTZjLi42YzMwYTczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0xMjQsNyArMTI0LDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW5ldHN3X2xvY2spOwogCiBzdHJ1Y3QgaXB2NF9jb25maWcgaXB2NF9jb25maWc7Ci0KIEVYUE9SVF9TWU1CT0woaXB2NF9jb25maWcpOwogCiAvKiBOZXcgZGVzdHJ1Y3Rpb24gcm91dGluZSAqLwpAQCAtMTM5LDEyICsxMzgsMTIgQEAKIAlza19tZW1fcmVjbGFpbShzayk7CiAKIAlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19TVFJFQU0gJiYgc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSkgewotCQlwcmludGsoIkF0dGVtcHQgdG8gcmVsZWFzZSBUQ1Agc29ja2V0IGluIHN0YXRlICVkICVwXG4iLAorCQlwcl9lcnIoIkF0dGVtcHQgdG8gcmVsZWFzZSBUQ1Agc29ja2V0IGluIHN0YXRlICVkICVwXG4iLAogCQkgICAgICAgc2stPnNrX3N0YXRlLCBzayk7CiAJCXJldHVybjsKIAl9CiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpIHsKLQkJcHJpbnRrKCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaW5ldCBzb2NrZXQgJXBcbiIsIHNrKTsKKwkJcHJfZXJyKCJBdHRlbXB0IHRvIHJlbGVhc2UgYWxpdmUgaW5ldCBzb2NrZXQgJXBcbiIsIHNrKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTU3LDYgKzE1Niw3IEBACiAJZHN0X3JlbGVhc2Uoc2stPnNrX2RzdF9jYWNoZSk7CiAJc2tfcmVmY250X2RlYnVnX2RlYyhzayk7CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfc29ja19kZXN0cnVjdCk7CiAKIC8qCiAgKglUaGUgcm91dGluZXMgYmV5b25kIHRoaXMgcG9pbnQgaGFuZGxlIHRoZSBiZWhhdmlvdXIgb2YgYW4gQUZfSU5FVApAQCAtMjE5LDYgKzIxOSw3IEBACiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2xpc3Rlbik7CiAKIHUzMiBpbmV0X2VoYXNoX3NlY3JldCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChpbmV0X2VoYXNoX3NlY3JldCk7CkBAIC00MzUsOSArNDM2LDExIEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X3JlbGVhc2UpOwogCiAvKiBJdCBpcyBvZmYgYnkgZGVmYXVsdCwgc2VlIGJlbG93LiAqLwogaW50IHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF9pcF9ub25sb2NhbF9iaW5kKTsKIAogaW50IGluZXRfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgYWRkcl9sZW4pCiB7CkBAIC01MTksNiArNTIyLDcgQEAKIG91dDoKIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2JpbmQpOwogCiBpbnQgaW5ldF9kZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqIHVhZGRyLAogCQkgICAgICAgaW50IGFkZHJfbGVuLCBpbnQgZmxhZ3MpCkBAIC01MzIsNiArNTM2LDcgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJcmV0dXJuIHNrLT5za19wcm90LT5jb25uZWN0KHNrLCAoc3RydWN0IHNvY2thZGRyICopdWFkZHIsIGFkZHJfbGVuKTsKIH0KK0VYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9jb25uZWN0KTsKIAogc3RhdGljIGxvbmcgaW5ldF93YWl0X2Zvcl9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lbykKIHsKQEAgLTY0MSw2ICs2NDYsNyBAQAogCQlzb2NrLT5zdGF0ZSA9IFNTX0RJU0NPTk5FQ1RJTkc7CiAJZ290byBvdXQ7CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX2Nvbm5lY3QpOwogCiAvKgogICoJQWNjZXB0IGEgcGVuZGluZyBjb25uZWN0aW9uLiBUaGUgVENQIGxheWVyIG5vdyBnaXZlcyBCU0Qgc2VtYW50aWNzLgpAQCAtNjY4LDYgKzY3NCw3IEBACiBkb19lcnI6CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woaW5ldF9hY2NlcHQpOwogCiAKIC8qCkBAIC02OTksNiArNzA2LDcgQEAKIAkqdWFkZHJfbGVuID0gc2l6ZW9mKCpzaW4pOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2dldG5hbWUpOwogCiBpbnQgaW5ldF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkgc2l6ZV90IHNpemUpCkBAIC03MTEsOSArNzE5LDExIEBACiAKIAlyZXR1cm4gc2stPnNrX3Byb3QtPnNlbmRtc2coaW9jYiwgc2ssIG1zZywgc2l6ZSk7CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfc2VuZG1zZyk7CiAKIAotc3RhdGljIHNzaXplX3QgaW5ldF9zZW5kcGFnZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3N0YXRpYyBzc2l6ZV90IGluZXRfc2VuZHBhZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsCisJCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKQEAgLTc4MCw2ICs3OTAsNyBAQAogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woaW5ldF9zaHV0ZG93bik7CiAKIC8qCiAgKglpb2N0bCgpIGNhbGxzIHlvdSBjYW4gaXNzdWUgb24gYW4gSU5FVCBzb2NrZXQuIE1vc3Qgb2YgdGhlc2UgYXJlCkBAIC03OTgsNDQgKzgwOSw0NSBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgU0lPQ0dTVEFNUDoKLQkJCWVyciA9IHNvY2tfZ2V0X3RpbWVzdGFtcChzaywgKHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKWFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBTSU9DR1NUQU1QTlM6Ci0JCQllcnIgPSBzb2NrX2dldF90aW1lc3RhbXBucyhzaywgKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKilhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0lPQ0FERFJUOgotCQljYXNlIFNJT0NERUxSVDoKLQkJY2FzZSBTSU9DUlRNU0c6Ci0JCQllcnIgPSBpcF9ydF9pb2N0bChuZXQsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIFNJT0NEQVJQOgotCQljYXNlIFNJT0NHQVJQOgotCQljYXNlIFNJT0NTQVJQOgotCQkJZXJyID0gYXJwX2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0lPQ0dJRkFERFI6Ci0JCWNhc2UgU0lPQ1NJRkFERFI6Ci0JCWNhc2UgU0lPQ0dJRkJSREFERFI6Ci0JCWNhc2UgU0lPQ1NJRkJSREFERFI6Ci0JCWNhc2UgU0lPQ0dJRk5FVE1BU0s6Ci0JCWNhc2UgU0lPQ1NJRk5FVE1BU0s6Ci0JCWNhc2UgU0lPQ0dJRkRTVEFERFI6Ci0JCWNhc2UgU0lPQ1NJRkRTVEFERFI6Ci0JCWNhc2UgU0lPQ1NJRlBGTEFHUzoKLQkJY2FzZSBTSU9DR0lGUEZMQUdTOgotCQljYXNlIFNJT0NTSUZGTEFHUzoKLQkJCWVyciA9IGRldmluZXRfaW9jdGwobmV0LCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChzay0+c2tfcHJvdC0+aW9jdGwpCi0JCQkJZXJyID0gc2stPnNrX3Byb3QtPmlvY3RsKHNrLCBjbWQsIGFyZyk7Ci0JCQllbHNlCi0JCQkJZXJyID0gLUVOT0lPQ1RMQ01EOwotCQkJYnJlYWs7CisJY2FzZSBTSU9DR1NUQU1QOgorCQllcnIgPSBzb2NrX2dldF90aW1lc3RhbXAoc2ssIChzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNJT0NHU1RBTVBOUzoKKwkJZXJyID0gc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DQUREUlQ6CisJY2FzZSBTSU9DREVMUlQ6CisJY2FzZSBTSU9DUlRNU0c6CisJCWVyciA9IGlwX3J0X2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNJT0NEQVJQOgorCWNhc2UgU0lPQ0dBUlA6CisJY2FzZSBTSU9DU0FSUDoKKwkJZXJyID0gYXJwX2lvY3RsKG5ldCwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKwljYXNlIFNJT0NHSUZBRERSOgorCWNhc2UgU0lPQ1NJRkFERFI6CisJY2FzZSBTSU9DR0lGQlJEQUREUjoKKwljYXNlIFNJT0NTSUZCUkRBRERSOgorCWNhc2UgU0lPQ0dJRk5FVE1BU0s6CisJY2FzZSBTSU9DU0lGTkVUTUFTSzoKKwljYXNlIFNJT0NHSUZEU1RBRERSOgorCWNhc2UgU0lPQ1NJRkRTVEFERFI6CisJY2FzZSBTSU9DU0lGUEZMQUdTOgorCWNhc2UgU0lPQ0dJRlBGTEFHUzoKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJZXJyID0gZGV2aW5ldF9pb2N0bChuZXQsIGNtZCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKHNrLT5za19wcm90LT5pb2N0bCkKKwkJCWVyciA9IHNrLT5za19wcm90LT5pb2N0bChzaywgY21kLCBhcmcpOworCQllbHNlCisJCQllcnIgPSAtRU5PSU9DVExDTUQ7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gZXJyOwogfQorRVhQT1JUX1NZTUJPTChpbmV0X2lvY3RsKTsKIAogY29uc3Qgc3RydWN0IHByb3RvX29wcyBpbmV0X3N0cmVhbV9vcHMgPSB7CiAJLmZhbWlseQkJICAgPSBQRl9JTkVULApAQCAtODYyLDYgKzg3NCw3IEBACiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCiAjZW5kaWYKIH07CitFWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX29wcyk7CiAKIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaW5ldF9kZ3JhbV9vcHMgPSB7CiAJLmZhbWlseQkJICAgPSBQRl9JTkVULApAQCAtODg3LDYgKzkwMCw3IEBACiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCiAjZW5kaWYKIH07CitFWFBPUlRfU1lNQk9MKGluZXRfZGdyYW1fb3BzKTsKIAogLyoKICAqIEZvciBTT0NLX1JBVyBzb2NrZXRzOyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgaW5ldF9kZ3JhbV9vcHMgYnV0IHdpdGhvdXQKQEAgLTEwMTYsNiArMTAzMCw3IEBACiAJICAgICAgIHAtPnR5cGUpOwogCWdvdG8gb3V0OwogfQorRVhQT1JUX1NZTUJPTChpbmV0X3JlZ2lzdGVyX3Byb3Rvc3cpOwogCiB2b2lkIGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KHN0cnVjdCBpbmV0X3Byb3Rvc3cgKnApCiB7CkBAIC0xMDMxLDYgKzEwNDYsNyBAQAogCQlzeW5jaHJvbml6ZV9uZXQoKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KTsKIAogLyoKICAqICAgICAgU2hhbGwgd2UgdHJ5IHRvIGRhbWFnZSBvdXRwdXQgcGFja2V0cyBpZiByb3V0aW5nIGRldiBjaGFuZ2VzPwpAQCAtMTE0MSw3ICsxMTU3LDYgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaW5ldF9za19yZWJ1aWxkX2hlYWRlcik7CiAKIHN0YXRpYyBpbnQgaW5ldF9nc29fc2VuZF9jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTE4Nyw2ICsxMjAyLDcgQEAKIAlpbnQgcHJvdG87CiAJaW50IGlobDsKIAlpbnQgaWQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CiAKIAlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkpCiAJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOwpAQCAtMTIyOSw3ICsxMjQ1LDE0IEBACiAJc2tiID0gc2VnczsKIAlkbyB7CiAJCWlwaCA9IGlwX2hkcihza2IpOwotCQlpcGgtPmlkID0gaHRvbnMoaWQrKyk7CisJCWlmIChwcm90byA9PSBJUFBST1RPX1VEUCkgeworCQkJaXBoLT5pZCA9IGh0b25zKGlkKTsKKwkJCWlwaC0+ZnJhZ19vZmYgPSBodG9ucyhvZmZzZXQgPj4gMyk7CisJCQlpZiAoc2tiLT5uZXh0ICE9IE5VTEwpCisJCQkJaXBoLT5mcmFnX29mZiB8PSBodG9ucyhJUF9NRik7CisJCQlvZmZzZXQgKz0gKHNrYi0+bGVuIC0gc2tiLT5tYWNfbGVuIC0gaXBoLT5paGwgKiA0KTsKKwkJfSBlbHNlCisJCQlpcGgtPmlkID0gaHRvbnMoaWQrKyk7CiAJCWlwaC0+dG90X2xlbiA9IGh0b25zKHNrYi0+bGVuIC0gc2tiLT5tYWNfbGVuKTsKIAkJaXBoLT5jaGVjayA9IDA7CiAJCWlwaC0+Y2hlY2sgPSBpcF9mYXN0X2NzdW0oc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIGlwaC0+aWhsKTsKQEAgLTEzNjEsNyArMTM4NCw2IEBACiAJfQogCXJldHVybiByYzsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldF9jdGxfc29ja19jcmVhdGUpOwogCiB1bnNpZ25lZCBsb25nIHNubXBfZm9sZF9maWVsZCh2b2lkICptaWJbXSwgaW50IG9mZnQpCkBAIC0xNDI1LDYgKzE0NDcsOCBAQAogc3RhdGljIHN0cnVjdCBuZXRfcHJvdG9jb2wgdWRwX3Byb3RvY29sID0gewogCS5oYW5kbGVyID0JdWRwX3JjdiwKIAkuZXJyX2hhbmRsZXIgPQl1ZHBfZXJyLAorCS5nc29fc2VuZF9jaGVjayA9IHVkcDRfdWZvX3NlbmRfY2hlY2ssCisJLmdzb19zZWdtZW50ID0gdWRwNF91Zm9fZnJhZ21lbnQsCiAJLm5vX3BvbGljeSA9CTEsCiAJLm5ldG5zX29rID0JMSwKIH07CkBAIC0xNjY2LDE5ICsxNjkwLDMgQEAKIAogTU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX0lORVQpOwogCi1FWFBPUlRfU1lNQk9MKGluZXRfYWNjZXB0KTsKLUVYUE9SVF9TWU1CT0woaW5ldF9iaW5kKTsKLUVYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9jb25uZWN0KTsKLUVYUE9SVF9TWU1CT0woaW5ldF9kZ3JhbV9vcHMpOwotRVhQT1JUX1NZTUJPTChpbmV0X2dldG5hbWUpOwotRVhQT1JUX1NZTUJPTChpbmV0X2lvY3RsKTsKLUVYUE9SVF9TWU1CT0woaW5ldF9saXN0ZW4pOwotRVhQT1JUX1NZTUJPTChpbmV0X3JlZ2lzdGVyX3Byb3Rvc3cpOwotRVhQT1JUX1NZTUJPTChpbmV0X3JlbGVhc2UpOwotRVhQT1JUX1NZTUJPTChpbmV0X3NlbmRtc2cpOwotRVhQT1JUX1NZTUJPTChpbmV0X3NodXRkb3duKTsKLUVYUE9SVF9TWU1CT0woaW5ldF9zb2NrX2Rlc3RydWN0KTsKLUVYUE9SVF9TWU1CT0woaW5ldF9zdHJlYW1fY29ubmVjdCk7Ci1FWFBPUlRfU1lNQk9MKGluZXRfc3RyZWFtX29wcyk7Ci1FWFBPUlRfU1lNQk9MKGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KTsKLUVYUE9SVF9TWU1CT0woc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAwOTBlOTk5Li40ZTgwZjMzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiBzdGF0aWMgdm9pZCBhcnBfZXJyb3JfcmVwb3J0KHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIHBhcnBfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgYXJwX2dlbmVyaWNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgYXJwX2dlbmVyaWNfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKIAkuc29saWNpdCA9CQlhcnBfc29saWNpdCwKIAkuZXJyb3JfcmVwb3J0ID0JCWFycF9lcnJvcl9yZXBvcnQsCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkucXVldWVfeG1pdCA9CQlkZXZfcXVldWVfeG1pdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9oaF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBhcnBfaGhfb3BzID0gewogCS5mYW1pbHkgPQkJQUZfSU5FVCwKIAkuc29saWNpdCA9CQlhcnBfc29saWNpdCwKIAkuZXJyb3JfcmVwb3J0ID0JCWFycF9lcnJvcl9yZXBvcnQsCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkucXVldWVfeG1pdCA9CQlkZXZfcXVldWVfeG1pdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIGFycF9kaXJlY3Rfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZWlnaF9vcHMgYXJwX2RpcmVjdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAogCS5vdXRwdXQgPQkJZGV2X3F1ZXVlX3htaXQsCiAJLmNvbm5lY3RlZF9vdXRwdXQgPQlkZXZfcXVldWVfeG1pdCwKQEAgLTE1OCw3ICsxNTgsNyBAQAogCS5xdWV1ZV94bWl0ID0JCWRldl9xdWV1ZV94bWl0LAogfTsKIAotc3RydWN0IG5laWdoX29wcyBhcnBfYnJva2VuX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBuZWlnaF9vcHMgYXJwX2Jyb2tlbl9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAogCS5zb2xpY2l0ID0JCWFycF9zb2xpY2l0LAogCS5lcnJvcl9yZXBvcnQgPQkJYXJwX2Vycm9yX3JlcG9ydCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl90cmllLmMgYi9uZXQvaXB2NC9maWJfdHJpZS5jCmluZGV4IDYzYzJmYTcuLjI5MWJkZjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl90cmllLmMKKysrIGIvbmV0L2lwdjQvZmliX3RyaWUuYwpAQCAtNDgsNyArNDgsNyBAQAogICoJCVBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgogICovCiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40MDgiCisjZGVmaW5lIFZFUlNJT04gIjAuNDA5IgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xNjQsNiArMTY0LDE0IEBACiBzdGF0aWMgc3RydWN0IHRub2RlICpoYWx2ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bik7CiAvKiB0bm9kZXMgdG8gZnJlZSBhZnRlciByZXNpemUoKTsgcHJvdGVjdGVkIGJ5IFJUTkwgKi8KIHN0YXRpYyBzdHJ1Y3QgdG5vZGUgKnRub2RlX2ZyZWVfaGVhZDsKK3N0YXRpYyBzaXplX3QgdG5vZGVfZnJlZV9zaXplOworCisvKgorICogc3luY2hyb25pemVfcmN1IGFmdGVyIGNhbGxfcmN1IGZvciB0aGF0IG1hbnkgcGFnZXM7IGl0IHNob3VsZCBiZSBlc3BlY2lhbGx5CisgKiB1c2VmdWwgYmVmb3JlIHJlc2l6aW5nIHRoZSByb290IG5vZGUgd2l0aCBQUkVFTVBUX05PTkUgY29uZmlnczsgdGhlIHZhbHVlIHdhcworICogb2J0YWluZWQgZXhwZXJpbWVudGFsbHksIGFpbWluZyB0byBhdm9pZCB2aXNpYmxlIHNsb3dkb3duLgorICovCitzdGF0aWMgY29uc3QgaW50IHN5bmNfcGFnZXMgPSAxMjg7CiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZm5fYWxpYXNfa21lbSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0cmllX2xlYWZfa21lbSBfX3JlYWRfbW9zdGx5OwpAQCAtMzE3LDggKzMyNSw3IEBACiBzdGF0aWMgY29uc3QgaW50IGhhbHZlX3RocmVzaG9sZCA9IDI1Owogc3RhdGljIGNvbnN0IGludCBpbmZsYXRlX3RocmVzaG9sZCA9IDUwOwogc3RhdGljIGNvbnN0IGludCBoYWx2ZV90aHJlc2hvbGRfcm9vdCA9IDE1Owotc3RhdGljIGNvbnN0IGludCBpbmZsYXRlX3RocmVzaG9sZF9yb290ID0gMjU7Ci0KK3N0YXRpYyBjb25zdCBpbnQgaW5mbGF0ZV90aHJlc2hvbGRfcm9vdCA9IDMwOwogCiBzdGF0aWMgdm9pZCBfX2FsaWFzX2ZyZWVfbWVtKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKQEAgLTM5Myw2ICs0MDAsOCBAQAogCUJVR19PTihJU19MRUFGKHRuKSk7CiAJdG4tPnRub2RlX2ZyZWUgPSB0bm9kZV9mcmVlX2hlYWQ7CiAJdG5vZGVfZnJlZV9oZWFkID0gdG47CisJdG5vZGVfZnJlZV9zaXplICs9IHNpemVvZihzdHJ1Y3QgdG5vZGUpICsKKwkJCSAgIChzaXplb2Yoc3RydWN0IG5vZGUgKikgPDwgdG4tPmJpdHMpOwogfQogCiBzdGF0aWMgdm9pZCB0bm9kZV9mcmVlX2ZsdXNoKHZvaWQpCkBAIC00MDQsNiArNDEzLDExIEBACiAJCXRuLT50bm9kZV9mcmVlID0gTlVMTDsKIAkJdG5vZGVfZnJlZSh0bik7CiAJfQorCisJaWYgKHRub2RlX2ZyZWVfc2l6ZSA+PSBQQUdFX1NJWkUgKiBzeW5jX3BhZ2VzKSB7CisJCXRub2RlX2ZyZWVfc2l6ZSA9IDA7CisJCXN5bmNocm9uaXplX3JjdSgpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCBsZWFmICpsZWFmX25ldyh2b2lkKQpAQCAtNDk5LDE0ICs1MTMsMTQgQEAKIAlyY3VfYXNzaWduX3BvaW50ZXIodG4tPmNoaWxkW2ldLCBuKTsKIH0KIAorI2RlZmluZSBNQVhfV09SSyAxMAogc3RhdGljIHN0cnVjdCBub2RlICpyZXNpemUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pCiB7CiAJaW50IGk7Ci0JaW50IGVyciA9IDA7CiAJc3RydWN0IHRub2RlICpvbGRfdG47CiAJaW50IGluZmxhdGVfdGhyZXNob2xkX3VzZTsKIAlpbnQgaGFsdmVfdGhyZXNob2xkX3VzZTsKLQlpbnQgbWF4X3Jlc2l6ZTsKKwlpbnQgbWF4X3dvcms7CiAKIAlpZiAoIXRuKQogCQlyZXR1cm4gTlVMTDsKQEAgLTUyMSwxOCArNTM1LDcgQEAKIAl9CiAJLyogT25lIGNoaWxkICovCiAJaWYgKHRuLT5lbXB0eV9jaGlsZHJlbiA9PSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pIC0gMSkKLQkJZm9yIChpID0gMDsgaSA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGkrKykgewotCQkJc3RydWN0IG5vZGUgKm47Ci0KLQkJCW4gPSB0bi0+Y2hpbGRbaV07Ci0JCQlpZiAoIW4pCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGNvbXByZXNzIG9uZSBsZXZlbCAqLwotCQkJbm9kZV9zZXRfcGFyZW50KG4sIE5VTEwpOwotCQkJdG5vZGVfZnJlZV9zYWZlKHRuKTsKLQkJCXJldHVybiBuOwotCQl9CisJCWdvdG8gb25lX2NoaWxkOwogCS8qCiAJICogRG91YmxlIGFzIGxvbmcgYXMgdGhlIHJlc3VsdGluZyBub2RlIGhhcyBhIG51bWJlciBvZgogCSAqIG5vbmVtcHR5IG5vZGVzIHRoYXQgYXJlIGFib3ZlIHRoZSB0aHJlc2hvbGQuCkBAIC02MDEsMTQgKzYwNCwxNyBAQAogCiAJLyogS2VlcCByb290IG5vZGUgbGFyZ2VyICAqLwogCi0JaWYgKCF0bi0+cGFyZW50KQorCWlmICghbm9kZV9wYXJlbnQoKHN0cnVjdCBub2RlKikgdG4pKSB7CiAJCWluZmxhdGVfdGhyZXNob2xkX3VzZSA9IGluZmxhdGVfdGhyZXNob2xkX3Jvb3Q7Ci0JZWxzZQorCQloYWx2ZV90aHJlc2hvbGRfdXNlID0gaGFsdmVfdGhyZXNob2xkX3Jvb3Q7CisJfQorCWVsc2UgewogCQlpbmZsYXRlX3RocmVzaG9sZF91c2UgPSBpbmZsYXRlX3RocmVzaG9sZDsKKwkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZDsKKwl9CiAKLQllcnIgPSAwOwotCW1heF9yZXNpemUgPSAxMDsKLQl3aGlsZSAoKHRuLT5mdWxsX2NoaWxkcmVuID4gMCAmJiAgbWF4X3Jlc2l6ZS0tICYmCisJbWF4X3dvcmsgPSBNQVhfV09SSzsKKwl3aGlsZSAoKHRuLT5mdWxsX2NoaWxkcmVuID4gMCAmJiAgbWF4X3dvcmstLSAmJgogCQk1MCAqICh0bi0+ZnVsbF9jaGlsZHJlbiArIHRub2RlX2NoaWxkX2xlbmd0aCh0bikKIAkJICAgICAgLSB0bi0+ZW1wdHlfY2hpbGRyZW4pCiAJCT49IGluZmxhdGVfdGhyZXNob2xkX3VzZSAqIHRub2RlX2NoaWxkX2xlbmd0aCh0bikpKSB7CkBAIC02MjUsMzUgKzYzMSwxOSBAQAogCQl9CiAJfQogCi0JaWYgKG1heF9yZXNpemUgPCAwKSB7Ci0JCWlmICghdG4tPnBhcmVudCkKLQkJCXByX3dhcm5pbmcoIkZpeCBpbmZsYXRlX3RocmVzaG9sZF9yb290LiIKLQkJCQkgICAiIE5vdz0lZCBzaXplPSVkIGJpdHNcbiIsCi0JCQkJICAgaW5mbGF0ZV90aHJlc2hvbGRfcm9vdCwgdG4tPmJpdHMpOwotCQllbHNlCi0JCQlwcl93YXJuaW5nKCJGaXggaW5mbGF0ZV90aHJlc2hvbGQuIgotCQkJCSAgICIgTm93PSVkIHNpemU9JWQgYml0c1xuIiwKLQkJCQkgICBpbmZsYXRlX3RocmVzaG9sZCwgdG4tPmJpdHMpOwotCX0KLQogCWNoZWNrX3Rub2RlKHRuKTsKIAorCS8qIFJldHVybiBpZiBhdCBsZWFzdCBvbmUgaW5mbGF0ZSBpcyBydW4gKi8KKwlpZiggbWF4X3dvcmsgIT0gTUFYX1dPUkspCisJCXJldHVybiAoc3RydWN0IG5vZGUgKikgdG47CisKIAkvKgogCSAqIEhhbHZlIGFzIGxvbmcgYXMgdGhlIG51bWJlciBvZiBlbXB0eSBjaGlsZHJlbiBpbiB0aGlzCiAJICogbm9kZSBpcyBhYm92ZSB0aHJlc2hvbGQuCiAJICovCiAKLQotCS8qIEtlZXAgcm9vdCBub2RlIGxhcmdlciAgKi8KLQotCWlmICghdG4tPnBhcmVudCkKLQkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZF9yb290OwotCWVsc2UKLQkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZDsKLQotCWVyciA9IDA7Ci0JbWF4X3Jlc2l6ZSA9IDEwOwotCXdoaWxlICh0bi0+Yml0cyA+IDEgJiYgIG1heF9yZXNpemUtLSAmJgorCW1heF93b3JrID0gTUFYX1dPUks7CisJd2hpbGUgKHRuLT5iaXRzID4gMSAmJiAgbWF4X3dvcmstLSAmJgogCSAgICAgICAxMDAgKiAodG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbikgPAogCSAgICAgICBoYWx2ZV90aHJlc2hvbGRfdXNlICogdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSkgewogCkBAIC02NjgsMTkgKzY1OCwxMCBAQAogCQl9CiAJfQogCi0JaWYgKG1heF9yZXNpemUgPCAwKSB7Ci0JCWlmICghdG4tPnBhcmVudCkKLQkJCXByX3dhcm5pbmcoIkZpeCBoYWx2ZV90aHJlc2hvbGRfcm9vdC4iCi0JCQkJICAgIiBOb3c9JWQgc2l6ZT0lZCBiaXRzXG4iLAotCQkJCSAgIGhhbHZlX3RocmVzaG9sZF9yb290LCB0bi0+Yml0cyk7Ci0JCWVsc2UKLQkJCXByX3dhcm5pbmcoIkZpeCBoYWx2ZV90aHJlc2hvbGQuIgotCQkJCSAgICIgTm93PSVkIHNpemU9JWQgYml0c1xuIiwKLQkJCQkgICBoYWx2ZV90aHJlc2hvbGQsIHRuLT5iaXRzKTsKLQl9CiAKIAkvKiBPbmx5IG9uZSBjaGlsZCByZW1haW5zICovCi0JaWYgKHRuLT5lbXB0eV9jaGlsZHJlbiA9PSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pIC0gMSkKKwlpZiAodG4tPmVtcHR5X2NoaWxkcmVuID09IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSAxKSB7CitvbmVfY2hpbGQ6CiAJCWZvciAoaSA9IDA7IGkgPCB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOyBpKyspIHsKIAkJCXN0cnVjdCBub2RlICpuOwogCkBAIC02OTQsNyArNjc1LDcgQEAKIAkJCXRub2RlX2ZyZWVfc2FmZSh0bik7CiAJCQlyZXR1cm4gbjsKIAkJfQotCisJfQogCXJldHVybiAoc3RydWN0IG5vZGUgKikgdG47CiB9CiAKQEAgLTE0MzUsNyArMTQxNiw3IEBACiAJCQljaW5kZXggPSB0a2V5X2V4dHJhY3RfYml0cyhtYXNrX3BmeChrZXksIGN1cnJlbnRfcHJlZml4X2xlbmd0aCksCiAJCQkJCQkgICBwb3MsIGJpdHMpOwogCi0JCW4gPSB0bm9kZV9nZXRfY2hpbGQocG4sIGNpbmRleCk7CisJCW4gPSB0bm9kZV9nZXRfY2hpbGRfcmN1KHBuLCBjaW5kZXgpOwogCiAJCWlmIChuID09IE5VTEwpIHsKICNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKQEAgLTE1NzAsNyArMTU1MSw3IEBACiAJCWlmIChjaG9wcGVkX29mZiA8PSBwbi0+Yml0cykgewogCQkJY2luZGV4ICY9IH4oMSA8PCAoY2hvcHBlZF9vZmYtMSkpOwogCQl9IGVsc2UgewotCQkJc3RydWN0IHRub2RlICpwYXJlbnQgPSBub2RlX3BhcmVudCgoc3RydWN0IG5vZGUgKikgcG4pOworCQkJc3RydWN0IHRub2RlICpwYXJlbnQgPSBub2RlX3BhcmVudF9yY3UoKHN0cnVjdCBub2RlICopIHBuKTsKIAkJCWlmICghcGFyZW50KQogCQkJCWdvdG8gZmFpbGVkOwogCkBAIC0xNzgzLDcgKzE3NjQsNyBAQAogc3RhdGljIHN0cnVjdCBsZWFmICp0cmllX25leHRsZWFmKHN0cnVjdCBsZWFmICpsKQogewogCXN0cnVjdCBub2RlICpjID0gKHN0cnVjdCBub2RlICopIGw7Ci0Jc3RydWN0IHRub2RlICpwID0gbm9kZV9wYXJlbnQoYyk7CisJc3RydWN0IHRub2RlICpwID0gbm9kZV9wYXJlbnRfcmN1KGMpOwogCiAJaWYgKCFwKQogCQlyZXR1cm4gTlVMTDsJLyogdHJpZSB3aXRoIGp1c3Qgb25lIGxlYWYgKi8KQEAgLTIzOTEsNyArMjM3Miw3IEBACiAJfQogfQogCi1zdGF0aWMgY29uc3QgY2hhciAqcnRuX3R5cGVfbmFtZXNbX19SVE5fTUFYXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBydG5fdHlwZV9uYW1lc1tfX1JUTl9NQVhdID0gewogCVtSVE5fVU5TUEVDXSA9ICJVTlNQRUMiLAogCVtSVE5fVU5JQ0FTVF0gPSAiVU5JQ0FTVCIsCiAJW1JUTl9MT0NBTF0gPSAiTE9DQUwiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwppbmRleCA2MTI4M2Y5Li4xM2YwNzgxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwpAQCAtMjE4LDggKzIxOCw4IEBACiAJCS8qIFdlIHB1cmdlZCB0aGUgZW50aXJlIHNsb3QsIGFueXRoaW5nIGxlZnQ/ICAqLwogCQlpZiAodHdkci0+dHdfY291bnQpCiAJCQluZWVkX3RpbWVyID0gMTsKKwkJdHdkci0+c2xvdCA9ICgodHdkci0+c2xvdCArIDEpICYgKElORVRfVFdEUl9UV0tJTExfU0xPVFMgLSAxKSk7CiAJfQotCXR3ZHItPnNsb3QgPSAoKHR3ZHItPnNsb3QgKyAxKSAmIChJTkVUX1RXRFJfVFdLSUxMX1NMT1RTIC0gMSkpOwogCWlmIChuZWVkX3RpbWVyKQogCQltb2RfdGltZXIoJnR3ZHItPnR3X3RpbWVyLCBqaWZmaWVzICsgdHdkci0+cGVyaW9kKTsKIG91dDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggODJjMTFkZC4uNTMzYWZhYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTY2Miw3ICs2NjIsNyBAQAogCXJldHVybigwKTsKIH0KIAotc3RhdGljIGludCBpcGdyZV90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5kZXYtPnN0YXRzOwpAQCAtODIxLDcgKzgyMSw3IEBACiAJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJdHVubmVsLT5yZWN1cnNpb24tLTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCQlpZiAoc2tiLT5zaykKIAkJCXNrYl9zZXRfb3duZXJfdyhuZXdfc2tiLCBza2ItPnNrKTsKQEAgLTg4OSw3ICs4ODksNyBAQAogCiAJSVBUVU5ORUxfWE1JVCgpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZXJyb3JfaWNtcDoKIAlkc3RfbGlua19mYWlsdXJlKHNrYik7CkBAIC04OTgsNyArODk4LDcgQEAKIAlzdGF0cy0+dHhfZXJyb3JzKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBpcGdyZV90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggN2ZmY2Q5Ni4uOWZlNWQ3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTEzMDQsNyArMTMwNCw3IEBACiAJZXJyID0gaXBfbG9jYWxfb3V0KHNrYik7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID4gMCkKLQkJCWVyciA9IGluZXQtPnJlY3ZlcnIgPyBuZXRfeG1pdF9lcnJubyhlcnIpIDogMDsKKwkJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCA5M2UyYjc4Li42MjU0OGNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0zODcsNyArMzg3LDcgQEAKICAqCWFuZCB0aGF0IHNrYiBpcyBmaWxsZWQgcHJvcGVybHkgYnkgdGhhdCBmdW5jdGlvbi4KICAqLwogCi1zdGF0aWMgaW50IGlwaXBfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcGlwX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5kZXYtPnN0YXRzOwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCQlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJdHVubmVsLT5yZWN1cnNpb24tLTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJfQogCQlpZiAoc2tiLT5zaykKIAkJCXNrYl9zZXRfb3duZXJfdyhuZXdfc2tiLCBza2ItPnNrKTsKQEAgLTUyNCw3ICs1MjQsNyBAQAogCiAJSVBUVU5ORUxfWE1JVCgpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZXJyb3JfaWNtcDoKIAlkc3RfbGlua19mYWlsdXJlKHNrYik7CkBAIC01MzIsNyArNTMyLDcgQEAKIAlzdGF0cy0+dHhfZXJyb3JzKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgaXBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCA5YThkYTVlLi42NWQ0MjFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAogI2lmZGVmIENPTkZJR19JUF9QSU1TTQogCi1zdGF0aWMgaW50IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJCQkgIElHTVBNU0dfV0hPTEVQS1QpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByZWdfdmlmX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCA3NTA1ZGZmLi4yNzc3NGM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICoKICAqLwotCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0zNDEsMTUgKzM0MSwxMSBAQAogfQogCiAvKiBBbGwgemVyb2VzID09IHVuY29uZGl0aW9uYWwgcnVsZS4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVuY29uZGl0aW9uYWwoY29uc3Qgc3RydWN0IGFycHRfYXJwICphcnApCitzdGF0aWMgaW5saW5lIGJvb2wgdW5jb25kaXRpb25hbChjb25zdCBzdHJ1Y3QgYXJwdF9hcnAgKmFycCkKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGFycHRfYXJwIHVuY29uZDsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmFycCkvc2l6ZW9mKF9fdTMyKTsgaSsrKQotCQlpZiAoKChfX3UzMiAqKWFycClbaV0pCi0JCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOworCXJldHVybiBtZW1jbXAoYXJwLCAmdW5jb25kLCBzaXplb2YodW5jb25kKSkgPT0gMDsKIH0KIAogLyogRmlndXJlcyBvdXQgZnJvbSB3aGF0IGhvb2sgZWFjaCBydWxlIGNhbiBiZSBjYWxsZWQ6IHJldHVybnMgMCBpZgpAQCAtNTM3LDEyICs1MzMsMjggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCBjaGVja191bmRlcmZsb3coc3RydWN0IGFycHRfZW50cnkgKmUpCit7CisJY29uc3Qgc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OworCXVuc2lnbmVkIGludCB2ZXJkaWN0OworCisJaWYgKCF1bmNvbmRpdGlvbmFsKCZlLT5hcnApKQorCQlyZXR1cm4gZmFsc2U7CisJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKKwlpZiAoc3RyY21wKHQtPnUudXNlci5uYW1lLCBYVF9TVEFOREFSRF9UQVJHRVQpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwl2ZXJkaWN0ID0gKChzdHJ1Y3QgYXJwdF9zdGFuZGFyZF90YXJnZXQgKil0KS0+dmVyZGljdDsKKwl2ZXJkaWN0ID0gLXZlcmRpY3QgLSAxOworCXJldHVybiB2ZXJkaWN0ID09IE5GX0RST1AgfHwgdmVyZGljdCA9PSBORl9BQ0NFUFQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKHN0cnVjdCBhcnB0X2VudHJ5ICplLAogCQkJCQkgICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLAogCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJhc2UsCiAJCQkJCSAgICAgdW5zaWduZWQgY2hhciAqbGltaXQsCiAJCQkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCiAJCQkJCSAgICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJdW5zaWduZWQgaW50IGg7CkBAIC01NjIsMTUgKzU3NCwyMSBAQAogCiAJLyogQ2hlY2sgaG9va3MgJiB1bmRlcmZsb3dzICovCiAJZm9yIChoID0gMDsgaCA8IE5GX0FSUF9OVU1IT09LUzsgaCsrKSB7CisJCWlmICghKHZhbGlkX2hvb2tzICYgKDEgPDwgaCkpKQorCQkJY29udGludWU7CiAJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IGhvb2tfZW50cmllc1toXSkKIAkJCW5ld2luZm8tPmhvb2tfZW50cnlbaF0gPSBob29rX2VudHJpZXNbaF07Ci0JCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pCisJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pIHsKKwkJCWlmICghY2hlY2tfdW5kZXJmbG93KGUpKSB7CisJCQkJcHJfZXJyKCJVbmRlcmZsb3dzIG11c3QgYmUgdW5jb25kaXRpb25hbCBhbmQgIgorCQkJCSAgICAgICAidXNlIHRoZSBTVEFOREFSRCB0YXJnZXQgd2l0aCAiCisJCQkJICAgICAgICJBQ0NFUFQvRFJPUFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQluZXdpbmZvLT51bmRlcmZsb3dbaF0gPSB1bmRlcmZsb3dzW2hdOworCQl9CiAJfQogCi0JLyogRklYTUU6IHVuZGVyZmxvd3MgbXVzdCBiZSB1bmNvbmRpdGlvbmFsLCBzdGFuZGFyZCB2ZXJkaWN0cwotCSAgIDwgMCAobm90IEFSUFRfUkVUVVJOKS4gLS1SUiAqLwotCiAJLyogQ2xlYXIgY291bnRlcnMgYW5kIGNvbWVmcm9tICovCiAJZS0+Y291bnRlcnMgPSAoKHN0cnVjdCB4dF9jb3VudGVycykgeyAwLCAwIH0pOwogCWUtPmNvbWVmcm9tID0gMDsKQEAgLTYzMCw3ICs2NDgsNyBAQAogCQkJCSBuZXdpbmZvLAogCQkJCSBlbnRyeTAsCiAJCQkJIGVudHJ5MCArIHNpemUsCi0JCQkJIGhvb2tfZW50cmllcywgdW5kZXJmbG93cywgJmkpOworCQkJCSBob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsIHZhbGlkX2hvb2tzLCAmaSk7CiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogQVJQVF9FTlRSWV9JVEVSQVRFIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTE3NjAsNyArMTc3OCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IHh0X3RhYmxlICphcnB0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKK3N0cnVjdCB4dF90YWJsZSAqYXJwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGFycHRfcmVwbGFjZSAqcmVwbCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCmluZGV4IDZlY2ZkYWUuLjk3MzM3NjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgRklMVEVSX1ZBTElEX0hPT0tTICgoMSA8PCBORl9BUlBfSU4pIHwgKDEgPDwgTkZfQVJQX09VVCkgfCBcCiAJCQkgICAoMSA8PCBORl9BUlBfRk9SV0FSRCkpCiAKLXN0YXRpYyBzdHJ1Y3QKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKIHsKIAlzdHJ1Y3QgYXJwdF9yZXBsYWNlIHJlcGw7CiAJc3RydWN0IGFycHRfc3RhbmRhcmQgZW50cmllc1szXTsKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkudGVybSA9IEFSUFRfRVJST1JfSU5JVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IGZkZWZhZTYuLmNkZTc1NWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTE5MCwxNiArMTkxLDExIEBACiAKIC8qIEFsbCB6ZXJvZXMgPT0gdW5jb25kaXRpb25hbCBydWxlLiAqLwogLyogTWlsZGx5IHBlcmYgY3JpdGljYWwgKG9ubHkgaWYgcGFja2V0IHRyYWNpbmcgaXMgb24pICovCi1zdGF0aWMgaW5saW5lIGludAotdW5jb25kaXRpb25hbChjb25zdCBzdHJ1Y3QgaXB0X2lwICppcCkKK3N0YXRpYyBpbmxpbmUgYm9vbCB1bmNvbmRpdGlvbmFsKGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwKQogewotCXVuc2lnbmVkIGludCBpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXB0X2lwIHVuY29uZDsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmlwKS9zaXplb2YoX191MzIpOyBpKyspCi0JCWlmICgoKF9fdTMyICopaXApW2ldKQotCQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKKwlyZXR1cm4gbWVtY21wKGlwLCAmdW5jb25kLCBzaXplb2YodW5jb25kKSkgPT0gMDsKICN1bmRlZiBGV0lOVgogfQogCkBAIC0zMTUsNyArMzExLDYgQEAKIAogCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwOwotCXVfaW50MTZfdCBkYXRhbGVuOwogCWJvb2wgaG90ZHJvcCA9IGZhbHNlOwogCS8qIEluaXRpYWxpemluZyB2ZXJkaWN0IHRvIE5GX0RST1Aga2VlcHMgZ2NjIGhhcHB5LiAqLwogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKQEAgLTMyOCw3ICszMjMsNiBAQAogCiAJLyogSW5pdGlhbGl6YXRpb24gKi8KIAlpcCA9IGlwX2hkcihza2IpOwotCWRhdGFsZW4gPSBza2ItPmxlbiAtIGlwLT5paGwgKiA0OwogCWluZGV2ID0gaW4gPyBpbi0+bmFtZSA6IG51bGxkZXZuYW1lOwogCW91dGRldiA9IG91dCA/IG91dC0+bmFtZSA6IG51bGxkZXZuYW1lOwogCS8qIFdlIGhhbmRsZSBmcmFnbWVudHMgYnkgZGVhbGluZyB3aXRoIHRoZSBmaXJzdCBmcmFnbWVudCBhcwpAQCAtNDI3LDggKzQyMSw2IEBACiAjZW5kaWYKIAkJLyogVGFyZ2V0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzdHVmZi4gKi8KIAkJaXAgPSBpcF9oZHIoc2tiKTsKLQkJZGF0YWxlbiA9IHNrYi0+bGVuIC0gaXAtPmlobCAqIDQ7Ci0KIAkJaWYgKHZlcmRpY3QgPT0gSVBUX0NPTlRJTlVFKQogCQkJZSA9IGlwdF9uZXh0X2VudHJ5KGUpOwogCQllbHNlCkBAIC03MTYsNiArNzA4LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KHN0cnVjdCBpcHRfZW50cnkgKmUpCit7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJdW5zaWduZWQgaW50IHZlcmRpY3Q7CisKKwlpZiAoIXVuY29uZGl0aW9uYWwoJmUtPmlwKSkKKwkJcmV0dXJuIGZhbHNlOworCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKwlpZiAoc3RyY21wKHQtPnUudXNlci5uYW1lLCBYVF9TVEFOREFSRF9UQVJHRVQpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwl2ZXJkaWN0ID0gKChzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCAqKXQpLT52ZXJkaWN0OworCXZlcmRpY3QgPSAtdmVyZGljdCAtIDE7CisJcmV0dXJuIHZlcmRpY3QgPT0gTkZfRFJPUCB8fCB2ZXJkaWN0ID09IE5GX0FDQ0VQVDsKK30KKwogc3RhdGljIGludAogY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGlwdF9lbnRyeSAqZSwKIAkJCSAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLApAQCAtNzIzLDYgKzczMCw3IEBACiAJCQkgICB1bnNpZ25lZCBjaGFyICpsaW1pdCwKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAorCQkJICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAogCQkJICAgdW5zaWduZWQgaW50ICppKQogewogCXVuc2lnbmVkIGludCBoOwpAQCAtNzQyLDE1ICs3NTAsMjEgQEAKIAogCS8qIENoZWNrIGhvb2tzICYgdW5kZXJmbG93cyAqLwogCWZvciAoaCA9IDA7IGggPCBORl9JTkVUX05VTUhPT0tTOyBoKyspIHsKKwkJaWYgKCEodmFsaWRfaG9va3MgJiAoMSA8PCBoKSkpCisJCQljb250aW51ZTsKIAkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gaG9va19lbnRyaWVzW2hdKQogCQkJbmV3aW5mby0+aG9va19lbnRyeVtoXSA9IGhvb2tfZW50cmllc1toXTsKLQkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gdW5kZXJmbG93c1toXSkKKwkJaWYgKCh1bnNpZ25lZCBjaGFyICopZSAtIGJhc2UgPT0gdW5kZXJmbG93c1toXSkgeworCQkJaWYgKCFjaGVja191bmRlcmZsb3coZSkpIHsKKwkJCQlwcl9lcnIoIlVuZGVyZmxvd3MgbXVzdCBiZSB1bmNvbmRpdGlvbmFsIGFuZCAiCisJCQkJICAgICAgICJ1c2UgdGhlIFNUQU5EQVJEIHRhcmdldCB3aXRoICIKKwkJCQkgICAgICAgIkFDQ0VQVC9EUk9QXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KIAkJCW5ld2luZm8tPnVuZGVyZmxvd1toXSA9IHVuZGVyZmxvd3NbaF07CisJCX0KIAl9CiAKLQkvKiBGSVhNRTogdW5kZXJmbG93cyBtdXN0IGJlIHVuY29uZGl0aW9uYWwsIHN0YW5kYXJkIHZlcmRpY3RzCi0JICAgPCAwIChub3QgSVBUX1JFVFVSTikuIC0tUlIgKi8KLQogCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLwogCWUtPmNvdW50ZXJzID0gKChzdHJ1Y3QgeHRfY291bnRlcnMpIHsgMCwgMCB9KTsKIAllLT5jb21lZnJvbSA9IDA7CkBAIC04MTMsNyArODI3LDcgQEAKIAkJCQluZXdpbmZvLAogCQkJCWVudHJ5MCwKIAkJCQllbnRyeTAgKyBzaXplLAotCQkJCWhvb2tfZW50cmllcywgdW5kZXJmbG93cywgJmkpOworCQkJCWhvb2tfZW50cmllcywgdW5kZXJmbG93cywgdmFsaWRfaG9va3MsICZpKTsKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTIwNTEsNyArMjA2NSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RydWN0IHh0X3RhYmxlICppcHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorc3RydWN0IHh0X3RhYmxlICppcHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgaXB0X3JlcGxhY2UgKnJlcGwpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKaW5kZXggYzMwYTk2OS4uZGY1NjZjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMKQEAgLTUzLDExICs1MywxMSBAQAogCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC0xMDIsMjEgKzEwMiwyMSBAQAogCXsKIAkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfRklMVEVSLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfbG9jYWxfb3V0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9GSUxURVIsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKaW5kZXggNDA4NzYxNC4uMDM2MDQ3ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJCSAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORykpCiAKIC8qIE91Y2ggLSBmaXZlIGRpZmZlcmVudCBob29rcz8gTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBjb25maWcgb3B0aW9uLi4uLi4gLS0gQkMgKi8KLXN0YXRpYyBzdHJ1Y3QKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKIHsKIAlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKIAlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbNV07CkBAIC02NCwxMSArNjQsMTEgQEAKIAkudGVybSA9IElQVF9FUlJPUl9JTklULAkJCS8qIEVSUk9SICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKIAkubmFtZQkJPSAibWFuZ2xlIiwKIAkudmFsaWRfaG9va3MJPSBNQU5HTEVfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC0xNjIsMzUgKzE2MiwzNSBAQAogCXsKIAkJLmhvb2sJCT0gaXB0X3ByZV9yb3V0aW5nX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QUkVfUk9VVElORywKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB0X2ZvcndhcmRfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9NQU5HTEUsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwdF9sb2NhbF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTUFOR0xFLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfcG9zdF9yb3V0aW5nX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9NQU5HTEUsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKaW5kZXggZTUzNTZkYS4uOTkzZWRjMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfcmF3LmMKQEAgLTksNyArOSw3IEBACiAKICNkZWZpbmUgUkFXX1ZBTElEX0hPT0tTICgoMSA8PCBORl9JTkVUX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSkKIAotc3RhdGljIHN0cnVjdAorc3RhdGljIGNvbnN0IHN0cnVjdAogewogCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1syXTsKQEAgLTM2LDExICszNiwxMSBAQAogCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKIAkubmFtZSA9ICJyYXciLAogCS52YWxpZF9ob29rcyA9ICBSQVdfVkFMSURfSE9PS1MsCiAJLm1lID0gVEhJU19NT0RVTEUsCi0JLmFmID0gQUZfSU5FVCwKKwkuYWYgPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC03NCwxNCArNzQsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkuaG9vayA9IGlwdF9ob29rLAotCQkucGYgPSBQRl9JTkVULAorCQkucGYgPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKIAkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CiAJCS5ob29rID0gaXB0X2xvY2FsX2hvb2ssCi0JCS5wZiA9IFBGX0lORVQsCisJCS5wZiA9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0gPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX1JBVywKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwppbmRleCAyOWFiNjMwLi45OWViNzZjNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCkBAIC0yNyw3ICsyNyw3IEBACiAJCQkJKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8IFwKIAkJCQkoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkKIAotc3RhdGljIHN0cnVjdAorc3RhdGljIGNvbnN0IHN0cnVjdAogewogCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1szXTsKQEAgLTU3LDExICs1NywxMSBAQAogCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50CkBAIC0xMDUsMjEgKzEwNSwyMSBAQAogCXsKIAkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX1NFQ1VSSVRZLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfZm9yd2FyZF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX1NFQ1VSSVRZLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHRfbG9jYWxfb3V0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9TRUNVUklUWSwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggN2QyZWFkNy4uYWE5NWJiOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2RlZnJhZ19pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KIAogaW50ICgqbmZfbmF0X3NlcV9hZGp1c3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKQEAgLTExMyw4ICsxMTQsMTEgQEAKIAogCXJldCA9IGhlbHBlci0+aGVscChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICsgaXBfaGRybGVuKHNrYiksCiAJCQkgICBjdCwgY3RpbmZvKTsKLQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKKwlpZiAocmV0ICE9IE5GX0FDQ0VQVCkgeworCQluZl9sb2dfcGFja2V0KE5GUFJPVE9fSVBWNCwgaG9va251bSwgc2tiLCBpbiwgb3V0LCBOVUxMLAorCQkJICAgICAgIm5mX2N0XyVzOiBkcm9wcGluZyBwYWNrZXQiLCBoZWxwZXItPm5hbWUpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCWlmICh0ZXN0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKSkgewogCQl0eXBlb2YobmZfbmF0X3NlcV9hZGp1c3RfaG9vaykgc2VxX2FkanVzdDsKQEAgLTE1OCwyOCArMTYyLDI4IEBACiAJewogCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19pbiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLLAogCX0sCiAJewogCQkuaG9vawkJPSBpcHY0X2Nvbm50cmFja19sb2NhbCwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0NPTk5UUkFDSywKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB2NF9jb25maXJtLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfUE9TVF9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwdjRfY29uZmlybSwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfQ09OTlRSQUNLX0NPTkZJUk0sCiAJfSwKQEAgLTI1NiwxMSArMjYwLDExIEBACiAJdHVwbGUuZHN0LnUzLmlwID0gaW5ldC0+ZGFkZHI7CiAJdHVwbGUuZHN0LnUudGNwLnBvcnQgPSBpbmV0LT5kcG9ydDsKIAl0dXBsZS5zcmMubDNudW0gPSBQRl9JTkVUOwotCXR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOworCXR1cGxlLmRzdC5wcm90b251bSA9IHNrLT5za19wcm90b2NvbDsKIAotCS8qIFdlIG9ubHkgZG8gVENQIGF0IHRoZSBtb21lbnQ6IGlzIHRoZXJlIGEgYmV0dGVyIHdheT8gKi8KLQlpZiAoc3RyY21wKHNrLT5za19wcm90LT5uYW1lLCAiVENQIikpIHsKLQkJcHJfZGVidWcoIlNPX09SSUdJTkFMX0RTVDogTm90IGEgVENQIHNvY2tldFxuIik7CisJLyogV2Ugb25seSBkbyBUQ1AgYW5kIFNDVFAgYXQgdGhlIG1vbWVudDogaXMgdGhlcmUgYSBiZXR0ZXIgd2F5PyAqLworCWlmIChzay0+c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJiYgc2stPnNrX3Byb3RvY29sICE9IElQUFJPVE9fU0NUUCkgeworCQlwcl9kZWJ1ZygiU09fT1JJR0lOQUxfRFNUOiBOb3QgYSBUQ1AvU0NUUCBzb2NrZXRcbiIpOwogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCAzMjI5ZTBhLi42OGFmYzZlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJbWF4aXAgPSBudG9obChyYW5nZS0+bWF4X2lwKTsKIAlqID0gamhhc2hfMndvcmRzKChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLnUzLmlwLAogCQkJIHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QRVJTSVNURU5UID8KLQkJCQkoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC51My5pcCA6IDAsIDApOworCQkJCTAgOiAoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC51My5pcCwgMCk7CiAJaiA9ICgodTY0KWogKiAobWF4aXAgLSBtaW5pcCArIDEpKSA+PiAzMjsKIAkqdmFyX2lwcCA9IGh0b25sKG1pbmlwICsgaik7CiB9CkBAIC02MjAsNyArNjIwLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQKLW5mbmV0bGlua19wYXJzZV9uYXQoc3RydWN0IG5sYXR0ciAqbmF0LAorbmZuZXRsaW5rX3BhcnNlX25hdChjb25zdCBzdHJ1Y3QgbmxhdHRyICpuYXQsCiAJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQogewogCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9OQVRfTUFYKzFdOwpAQCAtNjU2LDcgKzY1Niw3IEBACiBzdGF0aWMgaW50CiBuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKLQkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikKKwkJCSAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cikKIHsKIAlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOwogCkBAIC02NzEsNyArNjcxLDcgQEAKIHN0YXRpYyBpbnQKIG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXAoc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAotCQkJICBzdHJ1Y3QgbmxhdHRyICphdHRyKQorCQkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKaW5kZXggNjM0OGE3OS4uOWU4MWUwZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAkJCSAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORykgfCBcCiAJCQkgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKQogCi1zdGF0aWMgc3RydWN0CitzdGF0aWMgY29uc3Qgc3RydWN0CiB7CiAJc3RydWN0IGlwdF9yZXBsYWNlIHJlcGw7CiAJc3RydWN0IGlwdF9zdGFuZGFyZCBlbnRyaWVzWzNdOwpAQCAtNTgsMTEgKzU4LDExIEBACiAJLnRlcm0gPSBJUFRfRVJST1JfSU5JVCwJCQkvKiBFUlJPUiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB4dF90YWJsZSBuYXRfdGFibGUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIG5hdF90YWJsZSA9IHsKIAkubmFtZQkJPSAibmF0IiwKIAkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAotCS5hZgkJPSBBRl9JTkVULAorCS5hZgkJPSBORlBST1RPX0lQVjQsCiB9OwogCiAvKiBTb3VyY2UgTkFUICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IDU1NjdiZDAuLjVmNDFkMDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAl7CiAJCS5ob29rCQk9IG5mX25hdF9pbiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKIAl9LApAQCAtMjU5LDcgKzI1OSw3IEBACiAJewogCQkuaG9vawkJPSBuZl9uYXRfb3V0LAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVULAorCQkucGYJCT0gTkZQUk9UT19JUFY0LAogCQkuaG9va251bQk9IE5GX0lORVRfUE9TVF9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKIAl9LApAQCAtMjY3LDcgKzI2Nyw3IEBACiAJewogCQkuaG9vawkJPSBuZl9uYXRfbG9jYWxfZm4sCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQsCisJCS5wZgkJPSBORlBST1RPX0lQVjQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAogCX0sCkBAIC0yNzUsNyArMjc1LDcgQEAKIAl7CiAJCS5ob29rCQk9IG5mX25hdF9mbiwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVCwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvdG9jb2wuYyBiL25ldC9pcHY0L3Byb3RvY29sLmMKaW5kZXggZWE1MGRhMC4uYTJlNWZjMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvdG9jb2wuYworKysgYi9uZXQvaXB2NC9wcm90b2NvbC5jCkBAIC0yMiwyNiArMjIsMTEgQEAKICAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L2ljbXAuaD4KLSNpbmNsdWRlIDxuZXQvdWRwLmg+Ci0jaW5jbHVkZSA8bmV0L2lwaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAKIHN0cnVjdCBuZXRfcHJvdG9jb2wgKmluZXRfcHJvdG9zW01BWF9JTkVUX1BST1RPU10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW5ldF9wcm90b19sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggMjk3OWYxNC4uZWJiMWU1OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTM3NSw3ICszNzUsNyBAQAogCWVyciA9IE5GX0hPT0soUEZfSU5FVCwgTkZfSU5FVF9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgcnQtPnUuZHN0LmRldiwKIAkJICAgICAgZHN0X291dHB1dCk7CiAJaWYgKGVyciA+IDApCi0JCWVyciA9IGluZXQtPnJlY3ZlcnIgPyBuZXRfeG1pdF9lcnJubyhlcnIpIDogMDsKKwkJZXJyID0gbmV0X3htaXRfZXJybm8oZXJyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogb3V0OgpAQCAtMzg2LDYgKzM4Niw4IEBACiAJa2ZyZWVfc2tiKHNrYik7CiBlcnJvcjoKIAlJUF9JTkNfU1RBVFMobmV0LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CisJaWYgKGVyciA9PSAtRU5PQlVGUyAmJiAhaW5ldC0+cmVjdmVycikKKwkJZXJyID0gMDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01NzYsOCArNTc4LDExIEBACiAJCQkJCSZpcGMsICZydCwgbXNnLT5tc2dfZmxhZ3MpOwogCQlpZiAoZXJyKQogCQkJaXBfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2spOwotCQllbHNlIGlmICghKG1zZy0+bXNnX2ZsYWdzICYgTVNHX01PUkUpKQorCQllbHNlIGlmICghKG1zZy0+bXNnX2ZsYWdzICYgTVNHX01PUkUpKSB7CiAJCQllcnIgPSBpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKwkJCWlmIChlcnIgPT0gLUVOT0JVRlMgJiYgIWluZXQtPnJlY3ZlcnIpCisJCQkJZXJyID0gMDsKKwkJfQogCQlyZWxlYXNlX3NvY2soc2spOwogCX0KIGRvbmU6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCAyNzhmNDZmLi45MTg2N2QzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTE1MTQsMTMgKzE1MTQsMTcgQEAKIHZvaWQgaXBfcnRfc2VuZF9yZWRpcmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwotCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGluX2Rldl9nZXQocnQtPnUuZHN0LmRldik7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCWludCBsb2dfbWFydGlhbnM7CiAKLQlpZiAoIWluX2RldikKKwlyY3VfcmVhZF9sb2NrKCk7CisJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC0+dS5kc3QuZGV2KTsKKwlpZiAoIWluX2RldiB8fCAhSU5fREVWX1RYX1JFRElSRUNUUyhpbl9kZXYpKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47Ci0KLQlpZiAoIUlOX0RFVl9UWF9SRURJUkVDVFMoaW5fZGV2KSkKLQkJZ290byBvdXQ7CisJfQorCWxvZ19tYXJ0aWFucyA9IElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qIE5vIHJlZGlyZWN0ZWQgcGFja2V0cyBkdXJpbmcgaXBfcnRfcmVkaXJlY3Rfc2lsZW5jZTsKIAkgKiByZXNldCB0aGUgYWxnb3JpdGhtLgpAQCAtMTUzMyw3ICsxNTM3LDcgQEAKIAkgKi8KIAlpZiAocnQtPnUuZHN0LnJhdGVfdG9rZW5zID49IGlwX3J0X3JlZGlyZWN0X251bWJlcikgewogCQlydC0+dS5kc3QucmF0ZV9sYXN0ID0gamlmZmllczsKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAl9CiAKIAkvKiBDaGVjayBmb3IgbG9hZCBsaW1pdDsgc2V0IHJhdGVfbGFzdCB0byB0aGUgbGF0ZXN0IHNlbnQKQEAgLTE1NDcsNyArMTU1MSw3IEBACiAJCXJ0LT51LmRzdC5yYXRlX2xhc3QgPSBqaWZmaWVzOwogCQkrK3J0LT51LmRzdC5yYXRlX3Rva2VuczsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRQotCQlpZiAoSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpICYmCisJCWlmIChsb2dfbWFydGlhbnMgJiYKIAkJICAgIHJ0LT51LmRzdC5yYXRlX3Rva2VucyA9PSBpcF9ydF9yZWRpcmVjdF9udW1iZXIgJiYKIAkJICAgIG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhvc3QgJXBJNC9pZiVkIGlnbm9yZXMgcmVkaXJlY3RzIGZvciAlcEk0IHRvICVwSTQuXG4iLApAQCAtMTU1NSw4ICsxNTU5LDYgQEAKIAkJCQkmcnQtPnJ0X2RzdCwgJnJ0LT5ydF9nYXRld2F5KTsKICNlbmRpZgogCX0KLW91dDoKLQlpbl9kZXZfcHV0KGluX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgaXBfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTM0NDIsNyArMzQ0NCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSByb3V0ZSBwcm9jIGZpbGVzXG4iKTsKICNpZmRlZiBDT05GSUdfWEZSTQogCXhmcm1faW5pdCgpOwotCXhmcm00X2luaXQoKTsKKwl4ZnJtNF9pbml0KGlwX3J0X21heF9zaXplKTsKICNlbmRpZgogCXJ0bmxfcmVnaXN0ZXIoUEZfSU5FVCwgUlRNX0dFVFJPVVRFLCBpbmV0X3J0bV9nZXRyb3V0ZSwgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggOTExNDUyNC4uZWRlZWEwNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTE4MzksNyArMTgzOSw3IEBACiAJCS8qIFVucmVhZCBkYXRhIHdhcyB0b3NzZWQsIHphcCB0aGUgY29ubmVjdGlvbi4gKi8KIAkJTkVUX0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEFCT1JUT05DTE9TRSk7CiAJCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7Ci0JCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0tFUk5FTCk7CisJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgc2stPnNrX2FsbG9jYXRpb24pOwogCX0gZWxzZSBpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgJiYgIXNrLT5za19saW5nZXJ0aW1lKSB7CiAJCS8qIENoZWNrIHplcm8gbGluZ2VyIF9hZnRlcl8gY2hlY2tpbmcgZm9yIHVucmVhZCBkYXRhLiAqLwogCQlzay0+c2tfcHJvdC0+ZGlzY29ubmVjdChzaywgMCk7CkBAIC0yMzM2LDEzICsyMzM2LDEzIEBACiAJCXZhbCA9ICEhKHRwLT5ub25hZ2xlJlRDUF9OQUdMRV9DT1JLKTsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfS0VFUElETEU6Ci0JCXZhbCA9ICh0cC0+a2VlcGFsaXZlX3RpbWUgPyA6IHN5c2N0bF90Y3Bfa2VlcGFsaXZlX3RpbWUpIC8gSFo7CisJCXZhbCA9IGtlZXBhbGl2ZV90aW1lX3doZW4odHApIC8gSFo7CiAJCWJyZWFrOwogCWNhc2UgVENQX0tFRVBJTlRWTDoKLQkJdmFsID0gKHRwLT5rZWVwYWxpdmVfaW50dmwgPyA6IHN5c2N0bF90Y3Bfa2VlcGFsaXZlX2ludHZsKSAvIEhaOworCQl2YWwgPSBrZWVwYWxpdmVfaW50dmxfd2hlbih0cCkgLyBIWjsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfS0VFUENOVDoKLQkJdmFsID0gdHAtPmtlZXBhbGl2ZV9wcm9iZXMgPyA6IHN5c2N0bF90Y3Bfa2VlcGFsaXZlX3Byb2JlczsKKwkJdmFsID0ga2VlcGFsaXZlX3Byb2Jlcyh0cCk7CiAJCWJyZWFrOwogCWNhc2UgVENQX1NZTkNOVDoKIAkJdmFsID0gaWNzay0+aWNza19zeW5fcmV0cmllcyA/IDogc3lzY3RsX3RjcF9zeW5fcmV0cmllczsKQEAgLTI2NTgsNyArMjY1OCw3IEBACiAKIEVYUE9SVF9TWU1CT0wodGNwX2ZyZWVfbWQ1c2lnX3Bvb2wpOwogCi1zdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKl9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHZvaWQpCitzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKl9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHN0cnVjdCBzb2NrICpzaykKIHsKIAlpbnQgY3B1OwogCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwb29sOwpAQCAtMjY3MSw3ICsyNjcxLDcgQEAKIAkJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqcDsKIAkJc3RydWN0IGNyeXB0b19oYXNoICpoYXNoOwogCi0JCXAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCQlwID0ga3phbGxvYyhzaXplb2YoKnApLCBzay0+c2tfYWxsb2NhdGlvbik7CiAJCWlmICghcCkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCSpwZXJfY3B1X3B0cihwb29sLCBjcHUpID0gcDsKQEAgLTI2ODgsNyArMjY4OCw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2wodm9pZCkKK3N0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwb29sOwogCWludCBhbGxvYyA9IDA7CkBAIC0yNzA5LDcgKzI3MDksNyBAQAogCiAJaWYgKGFsbG9jKSB7CiAJCS8qIHdlIGNhbm5vdCBob2xkIHNwaW5sb2NrIGhlcmUgYmVjYXVzZSB0aGlzIG1heSBzbGVlcC4gKi8KLQkJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKnAgPSBfX3RjcF9hbGxvY19tZDVzaWdfcG9vbCgpOworCQlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcCA9IF9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHNrKTsKIAkJc3Bpbl9sb2NrX2JoKCZ0Y3BfbWQ1c2lnX3Bvb2xfbG9jayk7CiAJCWlmICghcCkgewogCQkJdGNwX21kNXNpZ191c2Vycy0tOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAyYmRiMGRhLi5hZjZkNmZhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNjg1LDcgKzY4NSw3IEBACiAJICogICAgaXMgaW52aXNpYmxlLiBBY3R1YWxseSwgTGludXgtMi40IGFsc28gZ2VuZXJhdGVzIGVycmF0aWMKIAkgKiAgICBBQ0tzIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KIAkgKi8KLQlpbmV0X2NzayhzayktPmljc2tfcnRvID0gKHRwLT5zcnR0ID4+IDMpICsgdHAtPnJ0dHZhcjsKKwlpbmV0X2NzayhzayktPmljc2tfcnRvID0gX190Y3Bfc2V0X3J0byh0cCk7CiAKIAkvKiAyLiBGaXh1cHMgbWFkZSBlYXJsaWVyIGNhbm5vdCBiZSByaWdodC4KIAkgKiAgICBJZiB3ZSBkbyBub3QgZXN0aW1hdGUgUlRPIGNvcnJlY3RseSB3aXRob3V0IHRoZW0sCkBAIC02OTYsOCArNjk2LDcgQEAKIAkvKiBOT1RFOiBjbGFtcGluZyBhdCBUQ1BfUlRPX01JTiBpcyBub3QgcmVxdWlyZWQsIGN1cnJlbnQgYWxnbwogCSAqIGd1YXJhbnRlZXMgdGhhdCBydG8gaXMgaGlnaGVyLgogCSAqLwotCWlmIChpbmV0X2NzayhzayktPmljc2tfcnRvID4gVENQX1JUT19NQVgpCi0JCWluZXRfY3NrKHNrKS0+aWNza19ydG8gPSBUQ1BfUlRPX01BWDsKKwl0Y3BfYm91bmRfcnRvKHNrKTsKIH0KIAogLyogU2F2ZSBtZXRyaWNzIGxlYXJuZWQgYnkgdGhpcyBUQ1Agc2Vzc2lvbi4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDZkODgyMTkuLjA1NDM1NjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMzI4LDI2ICszMjgsMjkgQEAKICAqCiAgKi8KIAotdm9pZCB0Y3BfdjRfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQordm9pZCB0Y3BfdjRfZXJyKHN0cnVjdCBza19idWZmICppY21wX3NrYiwgdTMyIGluZm8pCiB7Ci0Jc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCB0Y3BoZHIgKnRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhICsgKGlwaC0+aWhsIDw8IDIpKTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilpY21wX3NrYi0+ZGF0YTsKKwlzdHJ1Y3QgdGNwaGRyICp0aCA9IChzdHJ1Y3QgdGNwaGRyICopKGljbXBfc2tiLT5kYXRhICsgKGlwaC0+aWhsIDw8IDIpKTsKKwlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2s7CiAJc3RydWN0IHRjcF9zb2NrICp0cDsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OwotCWNvbnN0IGludCB0eXBlID0gaWNtcF9oZHIoc2tiKS0+dHlwZTsKLQljb25zdCBpbnQgY29kZSA9IGljbXBfaGRyKHNrYiktPmNvZGU7CisJY29uc3QgaW50IHR5cGUgPSBpY21wX2hkcihpY21wX3NrYiktPnR5cGU7CisJY29uc3QgaW50IGNvZGUgPSBpY21wX2hkcihpY21wX3NrYiktPmNvZGU7CiAJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCBza19idWZmICpza2I7CiAJX191MzIgc2VxOworCV9fdTMyIHJlbWFpbmluZzsKIAlpbnQgZXJyOwotCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWNtcF9za2ItPmRldik7CiAKLQlpZiAoc2tiLT5sZW4gPCAoaXBoLT5paGwgPDwgMikgKyA4KSB7CisJaWYgKGljbXBfc2tiLT5sZW4gPCAoaXBoLT5paGwgPDwgMikgKyA4KSB7CiAJCUlDTVBfSU5DX1NUQVRTX0JIKG5ldCwgSUNNUF9NSUJfSU5FUlJPUlMpOwogCQlyZXR1cm47CiAJfQogCiAJc2sgPSBpbmV0X2xvb2t1cChuZXQsICZ0Y3BfaGFzaGluZm8sIGlwaC0+ZGFkZHIsIHRoLT5kZXN0LAotCQkJaXBoLT5zYWRkciwgdGgtPnNvdXJjZSwgaW5ldF9paWYoc2tiKSk7CisJCQlpcGgtPnNhZGRyLCB0aC0+c291cmNlLCBpbmV0X2lpZihpY21wX3NrYikpOwogCWlmICghc2spIHsKIAkJSUNNUF9JTkNfU1RBVFNfQkgobmV0LCBJQ01QX01JQl9JTkVSUk9SUyk7CiAJCXJldHVybjsKQEAgLTM2Nyw2ICszNzAsNyBAQAogCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0NMT1NFKQogCQlnb3RvIG91dDsKIAorCWljc2sgPSBpbmV0X2Nzayhzayk7CiAJdHAgPSB0Y3Bfc2soc2spOwogCXNlcSA9IG50b2hsKHRoLT5zZXEpOwogCWlmIChzay0+c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmJgpAQCAtMzkzLDYgKzM5NywzOSBAQAogCQl9CiAKIAkJZXJyID0gaWNtcF9lcnJfY29udmVydFtjb2RlXS5lcnJubzsKKwkJLyogY2hlY2sgaWYgaWNtcF9za2IgYWxsb3dzIHJldmVydCBvZiBiYWNrb2ZmCisJCSAqIChzZWUgZHJhZnQtemltbWVybWFubi10Y3AtbGNkKSAqLworCQlpZiAoY29kZSAhPSBJQ01QX05FVF9VTlJFQUNIICYmIGNvZGUgIT0gSUNNUF9IT1NUX1VOUkVBQ0gpCisJCQlicmVhazsKKwkJaWYgKHNlcSAhPSB0cC0+c25kX3VuYSAgfHwgIWljc2stPmljc2tfcmV0cmFuc21pdHMgfHwKKwkJICAgICFpY3NrLT5pY3NrX2JhY2tvZmYpCisJCQlicmVhazsKKworCQlpY3NrLT5pY3NrX2JhY2tvZmYtLTsKKwkJaW5ldF9jc2soc2spLT5pY3NrX3J0byA9IF9fdGNwX3NldF9ydG8odHApIDw8CisJCQkJCSBpY3NrLT5pY3NrX2JhY2tvZmY7CisJCXRjcF9ib3VuZF9ydG8oc2spOworCisJCXNrYiA9IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKTsKKwkJQlVHX09OKCFza2IpOworCisJCXJlbWFpbmluZyA9IGljc2stPmljc2tfcnRvIC0gbWluKGljc2stPmljc2tfcnRvLAorCQkJCXRjcF90aW1lX3N0YW1wIC0gVENQX1NLQl9DQihza2IpLT53aGVuKTsKKworCQlpZiAocmVtYWluaW5nKSB7CisJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUywKKwkJCQkJCSAgcmVtYWluaW5nLCBUQ1BfUlRPX01BWCk7CisJCX0gZWxzZSBpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkgeworCQkJLyogUlRPIHJldmVydCBjbG9ja2VkIG91dCByZXRyYW5zbWlzc2lvbiwKKwkJCSAqIGJ1dCBzb2NrZXQgaXMgbG9ja2VkLiBXaWxsIGRlZmVyLiAqLworCQkJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsCisJCQkJCQkgIEhaLzIwLCBUQ1BfUlRPX01BWCk7CisJCX0gZWxzZSB7CisJCQkvKiBSVE8gcmV2ZXJ0IGNsb2NrZWQgb3V0IHJldHJhbnNtaXNzaW9uLgorCQkJICogV2lsbCByZXRyYW5zbWl0IG5vdyAqLworCQkJdGNwX3JldHJhbnNtaXRfdGltZXIoc2spOworCQl9CisKIAkJYnJlYWs7CiAJY2FzZSBJQ01QX1RJTUVfRVhDRUVERUQ6CiAJCWVyciA9IEVIT1NUVU5SRUFDSDsKQEAgLTg0OSw3ICs4ODYsNyBAQAogCQkJfQogCQkJc2stPnNrX3JvdXRlX2NhcHMgJj0gfk5FVElGX0ZfR1NPX01BU0s7CiAJCX0KLQkJaWYgKHRjcF9hbGxvY19tZDVzaWdfcG9vbCgpID09IE5VTEwpIHsKKwkJaWYgKHRjcF9hbGxvY19tZDVzaWdfcG9vbChzaykgPT0gTlVMTCkgewogCQkJa2ZyZWUobmV3a2V5KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC05NzAsOCArMTAwNyw5IEBACiAKIAlpZiAoIXRjcF9zayhzayktPm1kNXNpZ19pbmZvKSB7CiAJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCQlzdHJ1Y3QgdGNwX21kNXNpZ19pbmZvICpwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwkJc3RydWN0IHRjcF9tZDVzaWdfaW5mbyAqcDsKIAorCQlwID0ga3phbGxvYyhzaXplb2YoKnApLCBzay0+c2tfYWxsb2NhdGlvbik7CiAJCWlmICghcCkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC05NzksNyArMTAxNyw3IEBACiAJCXNrLT5za19yb3V0ZV9jYXBzICY9IH5ORVRJRl9GX0dTT19NQVNLOwogCX0KIAotCW5ld2tleSA9IGttZW1kdXAoY21kLnRjcG1fa2V5LCBjbWQudGNwbV9rZXlsZW4sIEdGUF9LRVJORUwpOworCW5ld2tleSA9IGttZW1kdXAoY21kLnRjcG1fa2V5LCBjbWQudGNwbV9rZXlsZW4sIHNrLT5za19hbGxvY2F0aW9uKTsKIAlpZiAoIW5ld2tleSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIHRjcF92NF9tZDVfZG9fYWRkKHNrLCBzaW4tPnNpbl9hZGRyLnNfYWRkciwKQEAgLTExNTgsNyArMTE5Niw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLXN0YXRpYyBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19pcHY0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19pcHY0X29wcyA9IHsKIAkubWQ1X2xvb2t1cAk9CXRjcF92NF9yZXFza19tZDVfbG9va3VwLAogCS5jYWxjX21kNV9oYXNoCT0JdGNwX3Y0X21kNV9oYXNoX3NrYiwKIH07CkBAIC0xNzE3LDcgKzE3NTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7Citjb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGlwdjRfc3BlY2lmaWMgPSB7CiAJLnF1ZXVlX3htaXQJICAgPSBpcF9xdWV1ZV94bWl0LAogCS5zZW5kX2NoZWNrCSAgID0gdGNwX3Y0X3NlbmRfY2hlY2ssCiAJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldF9za19yZWJ1aWxkX2hlYWRlciwKQEAgLTE3MzcsNyArMTc3NSw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKLXN0YXRpYyBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjRfc3BlY2lmaWMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY0X3NwZWNpZmljID0gewogCS5tZDVfbG9va3VwCQk9IHRjcF92NF9tZDVfbG9va3VwLAogCS5jYWxjX21kNV9oYXNoCQk9IHRjcF92NF9tZDVfaGFzaF9za2IsCiAJLm1kNV9hZGQJCT0gdGNwX3Y0X21kNV9hZGRfZnVuYywKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCBmOGQ2N2NjLi5lNDhjMzdkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAkJCWlmIChrZXkgIT0gTlVMTCkgewogCQkJCW1lbWNweSgmdGNwdHctPnR3X21kNV9rZXksIGtleS0+a2V5LCBrZXktPmtleWxlbik7CiAJCQkJdGNwdHctPnR3X21kNV9rZXlsZW4gPSBrZXktPmtleWxlbjsKLQkJCQlpZiAodGNwX2FsbG9jX21kNXNpZ19wb29sKCkgPT0gTlVMTCkKKwkJCQlpZiAodGNwX2FsbG9jX21kNXNpZ19wb29sKHNrKSA9PSBOVUxMKQogCQkJCQlCVUcoKTsKIAkJCX0KIAkJfSB3aGlsZSAoMCk7CkBAIC02NTcsMjkgKzY1Nyw2IEBACiAJY2hpbGQgPSBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5zeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgTlVMTCk7CiAJaWYgKGNoaWxkID09IE5VTEwpCiAJCWdvdG8gbGlzdGVuX292ZXJmbG93OwotI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi0JZWxzZSB7Ci0JCS8qIENvcHkgb3ZlciB0aGUgTUQ1IGtleSBmcm9tIHRoZSBvcmlnaW5hbCBzb2NrZXQgKi8KLQkJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7Ci0JCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCQlrZXkgPSB0cC0+YWZfc3BlY2lmaWMtPm1kNV9sb29rdXAoc2ssIGNoaWxkKTsKLQkJaWYgKGtleSAhPSBOVUxMKSB7Ci0JCQkvKgotCQkJICogV2UncmUgdXNpbmcgb25lLCBzbyBjcmVhdGUgYSBtYXRjaGluZyBrZXkgb24gdGhlCi0JCQkgKiBuZXdzayBzdHJ1Y3R1cmUuIElmIHdlIGZhaWwgdG8gZ2V0IG1lbW9yeSB0aGVuIHdlCi0JCQkgKiBlbmQgdXAgbm90IGNvcHlpbmcgdGhlIGtleSBhY3Jvc3MuIFNodWNrcy4KLQkJCSAqLwotCQkJY2hhciAqbmV3a2V5ID0ga21lbWR1cChrZXktPmtleSwga2V5LT5rZXlsZW4sCi0JCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKLQkJCWlmIChuZXdrZXkpIHsKLQkJCQlpZiAoIXRjcF9hbGxvY19tZDVzaWdfcG9vbCgpKQotCQkJCQlCVUcoKTsKLQkJCQl0cC0+YWZfc3BlY2lmaWMtPm1kNV9hZGQoY2hpbGQsIGNoaWxkLCBuZXdrZXksCi0JCQkJCQkJIGtleS0+a2V5bGVuKTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgogCiAJaW5ldF9jc2tfcmVxc2tfcXVldWVfdW5saW5rKHNrLCByZXEsIHByZXYpOwogCWluZXRfY3NrX3JlcXNrX3F1ZXVlX3JlbW92ZWQoc2ssIHJlcSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggYmQ2MjcxMi4uNTIwMGFhYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtNTksNiArNTksNyBAQAogLyogQnkgZGVmYXVsdCwgUkZDMjg2MSBiZWhhdmlvci4gICovCiBpbnQgc3lzY3RsX3RjcF9zbG93X3N0YXJ0X2FmdGVyX2lkbGUgX19yZWFkX21vc3RseSA9IDE7CiAKKy8qIEFjY291bnQgZm9yIG5ldyBkYXRhIHRoYXQgaGFzIGJlZW4gc2VudCB0byB0aGUgbmV0d29yay4gKi8KIHN0YXRpYyB2b2lkIHRjcF9ldmVudF9uZXdfZGF0YV9zZW50KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTE0Miw2ICsxNDMsNyBAQAogCXRwLT5zbmRfY3duZF91c2VkID0gMDsKIH0KIAorLyogQ29uZ2VzdGlvbiBzdGF0ZSBhY2NvdW50aW5nIGFmdGVyIGEgcGFja2V0IGhhcyBiZWVuIHNlbnQuICovCiBzdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9zZW50KHN0cnVjdCB0Y3Bfc29jayAqdHAsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKQogewpAQCAtMTYxLDYgKzE2Myw3IEBACiAJCWljc2stPmljc2tfYWNrLnBpbmdwb25nID0gMTsKIH0KIAorLyogQWNjb3VudCBmb3IgYW4gQUNLIHdlIHNlbnQuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2V2ZW50X2Fja19zZW50KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IHBrdHMpCiB7CiAJdGNwX2RlY19xdWlja2Fja19tb2RlKHNrLCBwa3RzKTsKQEAgLTI3Niw2ICsyNzksNyBAQAogCXJldHVybiBuZXdfd2luOwogfQogCisvKiBQYWNrZXQgRUNOIHN0YXRlIGZvciBhIFNZTi1BQ0sgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBUQ1BfRUNOX3NlbmRfc3luYWNrKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJVENQX1NLQl9DQihza2IpLT5mbGFncyAmPSB+VENQQ0JfRkxBR19DV1I7CkBAIC0yODMsNiArMjg3LDcgQEAKIAkJVENQX1NLQl9DQihza2IpLT5mbGFncyAmPSB+VENQQ0JfRkxBR19FQ0U7CiB9CiAKKy8qIFBhY2tldCBFQ04gc3RhdGUgZm9yIGEgU1lOLiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBUQ1BfRUNOX3NlbmRfc3luKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTMwMSw2ICszMDYsOSBAQAogCQl0aC0+ZWNlID0gMTsKIH0KIAorLyogU2V0IHVwIEVDTiBzdGF0ZSBmb3IgYSBwYWNrZXQgb24gYSBFU1RBQkxJU0hFRCBzb2NrZXQgdGhhdCBpcyBhYm91dCB0bworICogYmUgc2VudC4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIFRDUF9FQ05fc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJaW50IHRjcF9oZWFkZXJfbGVuKQogewpAQCAtMzYyLDcgKzM3MCw5IEBACiAJX191MzIgdHN2YWwsIHRzZWNyOwkvKiBuZWVkIHRvIGluY2x1ZGUgT1BUSU9OX1RTICovCiB9OwogCi0vKiBCZXdhcmU6IFNvbWV0aGluZyBpbiB0aGUgSW50ZXJuZXQgaXMgdmVyeSBzZW5zaXRpdmUgdG8gdGhlIG9yZGVyaW5nIG9mCisvKiBXcml0ZSBwcmV2aW91c2x5IGNvbXB1dGVkIFRDUCBvcHRpb25zIHRvIHRoZSBwYWNrZXQuCisgKgorICogQmV3YXJlOiBTb21ldGhpbmcgaW4gdGhlIEludGVybmV0IGlzIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBvcmRlcmluZyBvZgogICogVENQIG9wdGlvbnMsIHdlIGxlYXJuZWQgdGhpcyB0aHJvdWdoIHRoZSBoYXJkIHdheSwgc28gYmUgY2FyZWZ1bCBoZXJlLgogICogTHVja2lseSB3ZSBjYW4gYXQgbGVhc3QgYmxhbWUgb3RoZXJzIGZvciB0aGVpciBub24tY29tcGxpYW5jZSBidXQgZnJvbQogICogaW50ZXItb3BlcmF0aWJpbGl0eSBwZXJzcGVjdGl2ZSBpdCBzZWVtcyB0aGF0IHdlJ3JlIHNvbWV3aGF0IHN0dWNrIHdpdGgKQEAgLTQ0NSw2ICs0NTUsOSBAQAogCX0KIH0KIAorLyogQ29tcHV0ZSBUQ1Agb3B0aW9ucyBmb3IgU1lOIHBhY2tldHMuIFRoaXMgaXMgbm90IHRoZSBmaW5hbAorICogbmV0d29yayB3aXJlIGZvcm1hdCB5ZXQuCisgKi8KIHN0YXRpYyB1bnNpZ25lZCB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsCiAJCQkJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICoqbWQ1KSB7CkBAIC00OTMsNiArNTA2LDcgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAorLyogU2V0IHVwIFRDUCBvcHRpb25zIGZvciBTWU4tQUNLcy4gKi8KIHN0YXRpYyB1bnNpZ25lZCB0Y3Bfc3luYWNrX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCQkgICB1bnNpZ25lZCBtc3MsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC01NDEsNiArNTU1LDkgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAorLyogQ29tcHV0ZSBUQ1Agb3B0aW9ucyBmb3IgRVNUQUJMSVNIRUQgc29ja2V0cy4gVGhpcyBpcyBub3QgdGhlCisgKiBmaW5hbCB3aXJlIGZvcm1hdCB5ZXQuCisgKi8KIHN0YXRpYyB1bnNpZ25lZCB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCXN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMsCiAJCQkJCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqKm1kNSkgewpAQCAtNzA1LDcgKzcyMiw3IEBACiAJcmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTsKIH0KIAotLyogVGhpcyByb3V0aW5lIGp1c3QgcXVldWUncyB0aGUgYnVmZmVyCisvKiBUaGlzIHJvdXRpbmUganVzdCBxdWV1ZXMgdGhlIGJ1ZmZlciBmb3Igc2VuZGluZy4KICAqCiAgKiBOT1RFOiBwcm9iZTAgdGltZXIgaXMgbm90IGNoZWNrZWQsIGRvIG5vdCBmb3JnZXQgdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMsCiAgKiBvdGhlcndpc2Ugc29ja2V0IGNhbiBzdGFsbC4KQEAgLTcyMiw2ICs3MzksNyBAQAogCXNrX21lbV9jaGFyZ2Uoc2ssIHNrYi0+dHJ1ZXNpemUpOwogfQogCisvKiBJbml0aWFsaXplIFRTTyBzZWdtZW50cyBmb3IgYSBwYWNrZXQuICovCiBzdGF0aWMgdm9pZCB0Y3Bfc2V0X3NrYl90c29fc2VncyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHVuc2lnbmVkIGludCBtc3Nfbm93KQogewpAQCAtOTA5LDYgKzkyNyw3IEBACiAJc2tiLT5sZW4gPSBza2ItPmRhdGFfbGVuOwogfQogCisvKiBSZW1vdmUgYWNrZWQgZGF0YSBmcm9tIGEgcGFja2V0IGluIHRoZSB0cmFuc21pdCBxdWV1ZS4gKi8KIGludCB0Y3BfdHJpbV9oZWFkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGxlbikKIHsKIAlpZiAoc2tiX2Nsb25lZChza2IpICYmIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkKQEAgLTkzNyw3ICs5NTYsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBOb3QgYWNjb3VudGluZyBmb3IgU0FDS3MgaGVyZS4gKi8KKy8qIENhbGN1bGF0ZSBNU1MuIE5vdCBhY2NvdW50aW5nIGZvciBTQUNLcyBoZXJlLiAgKi8KIGludCB0Y3BfbXR1X3RvX21zcyhzdHJ1Y3Qgc29jayAqc2ssIGludCBwbXR1KQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtOTgxLDYgKzEwMDAsNyBAQAogCXJldHVybiBtdHU7CiB9CiAKKy8qIE1UVSBwcm9iaW5nIGluaXQgcGVyIHNvY2tldCAqLwogdm9pZCB0Y3BfbXR1cF9pbml0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTExNDMsNyArMTE2Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFRoaXMgbXVzdCBiZSBpbnZva2VkIHRoZSBmaXJzdCB0aW1lIHdlIGNvbnNpZGVyIHRyYW5zbWl0dGluZworLyogSW50aWFsaXplIFRTTyBzdGF0ZSBvZiBhIHNrYi4KKyAqIFRoaXMgbXVzdCBiZSBpbnZva2VkIHRoZSBmaXJzdCB0aW1lIHdlIGNvbnNpZGVyIHRyYW5zbWl0dGluZwogICogU0tCIG9udG8gdGhlIHdpcmUuCiAgKi8KIHN0YXRpYyBpbnQgdGNwX2luaXRfdHNvX3NlZ3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTE1OCw2ICsxMTc5LDcgQEAKIAlyZXR1cm4gdHNvX3NlZ3M7CiB9CiAKKy8qIE1pbnNoYWxsJ3MgdmFyaWFudCBvZiB0aGUgTmFnbGUgc2VuZCBjaGVjay4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRjcF9taW5zaGFsbF9jaGVjayhjb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQogewogCXJldHVybiBhZnRlcih0cC0+c25kX3NtbCwgdHAtPnNuZF91bmEpICYmCkBAIC0xMjQyLDYgKzEyNjQsNyBAQAogCXJldHVybiBjd25kX3F1b3RhOwogfQogCisvKiBUZXN0IGlmIHNlbmRpbmcgaXMgYWxsb3dlZCByaWdodCBub3cuICovCiBpbnQgdGNwX21heV9zZW5kX25vdyhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CkBAIC0xMzc4LDYgKzE0MDEsMTAgQEAKIH0KIAogLyogQ3JlYXRlIGEgbmV3IE1UVSBwcm9iZSBpZiB3ZSBhcmUgcmVhZHkuCisgKiBNVFUgcHJvYmUgaXMgcmVndWxhcmx5IGF0dGVtcHRpbmcgdG8gaW5jcmVhc2UgdGhlIHBhdGggTVRVIGJ5CisgKiBkZWxpYmVyYXRlbHkgc2VuZGluZyBsYXJnZXIgcGFja2V0cy4gIFRoaXMgZGlzY292ZXJzIHJvdXRpbmcKKyAqIGNoYW5nZXMgcmVzdWx0aW5nIGluIGxhcmdlciBwYXRoIE1UVXMuCisgKgogICogUmV0dXJucyAwIGlmIHdlIHNob3VsZCB3YWl0IHRvIHByb2JlIChubyBjd25kIGF2YWlsYWJsZSksCiAgKiAgICAgICAgIDEgaWYgYSBwcm9iZSB3YXMgc2VudCwKICAqICAgICAgICAgLTEgb3RoZXJ3aXNlCkBAIC0xNzkwLDYgKzE4MTcsNyBAQAogCXNrX3dtZW1fZnJlZV9za2Ioc2ssIG5leHRfc2tiKTsKIH0KIAorLyogQ2hlY2sgaWYgY29hbGVzY2luZyBTS0JzIGlzIGxlZ2FsLiAqLwogc3RhdGljIGludCB0Y3BfY2FuX2NvbGxhcHNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAodGNwX3NrYl9wY291bnQoc2tiKSA+IDEpCkBAIC0xODA4LDYgKzE4MzYsOSBAQAogCXJldHVybiAxOwogfQogCisvKiBDb2xsYXBzZSBwYWNrZXRzIGluIHRoZSByZXRyYW5zbWl0IHF1ZXVlIHRvIG1ha2UgdG8gY3JlYXRlCisgKiBsZXNzIHBhY2tldHMgb24gdGhlIHdpcmUuIFRoaXMgaXMgb25seSBkb25lIG9uIHJldHJhbnNtaXNzaW9uLgorICovCiBzdGF0aWMgdm9pZCB0Y3BfcmV0cmFuc190cnlfY29sbGFwc2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqdG8sCiAJCQkJICAgICBpbnQgc3BhY2UpCiB7CkBAIC0xOTU3LDYgKzE5ODgsOSBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qIENoZWNrIGlmIHdlIGZvcndhcmQgcmV0cmFuc21pdHMgYXJlIHBvc3NpYmxlIGluIHRoZSBjdXJyZW50CisgKiB3aW5kb3cvY29uZ2VzdGlvbiBzdGF0ZS4KKyAqLwogc3RhdGljIGludCB0Y3BfY2FuX2ZvcndhcmRfcmV0cmFuc21pdChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwpAQCAtMjEwMSw3ICsyMTM1LDggQEAKIAl9IGVsc2UgewogCQkvKiBTb2NrZXQgaXMgbG9ja2VkLCBrZWVwIHRyeWluZyB1bnRpbCBtZW1vcnkgaXMgYXZhaWxhYmxlLiAqLwogCQlmb3IgKDs7KSB7Ci0JCQlza2IgPSBhbGxvY19za2JfZmNsb25lKE1BWF9UQ1BfSEVBREVSLCBHRlBfS0VSTkVMKTsKKwkJCXNrYiA9IGFsbG9jX3NrYl9mY2xvbmUoTUFYX1RDUF9IRUFERVIsCisJCQkJCSAgICAgICBzay0+c2tfYWxsb2NhdGlvbik7CiAJCQlpZiAoc2tiKQogCQkJCWJyZWFrOwogCQkJeWllbGQoKTsKQEAgLTIxNDUsNyArMjE4MCw4IEBACiAJVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfT1VUUlNUUyk7CiB9CiAKLS8qIFdBUk5JTkc6IFRoaXMgcm91dGluZSBtdXN0IG9ubHkgYmUgY2FsbGVkIHdoZW4gd2UgaGF2ZSBhbHJlYWR5IHNlbnQKKy8qIFNlbmQgYSBjcm9zc2VkIFNZTi1BQ0sgZHVyaW5nIHNvY2tldCBlc3RhYmxpc2htZW50LgorICogV0FSTklORzogVGhpcyByb3V0aW5lIG11c3Qgb25seSBiZSBjYWxsZWQgd2hlbiB3ZSBoYXZlIGFscmVhZHkgc2VudAogICogYSBTWU4gcGFja2V0IHRoYXQgY3Jvc3NlZCB0aGUgaW5jb21pbmcgU1lOIHRoYXQgY2F1c2VkIHRoaXMgcm91dGluZQogICogdG8gZ2V0IGNhbGxlZC4gSWYgdGhpcyBhc3N1bXB0aW9uIGZhaWxzIHRoZW4gdGhlIGluaXRpYWwgcmN2X3duZAogICogYW5kIHJjdl93c2NhbGUgdmFsdWVzIHdpbGwgbm90IGJlIGNvcnJlY3QuCkBAIC0yMTgwLDkgKzIyMTYsNyBAQAogCXJldHVybiB0Y3BfdHJhbnNtaXRfc2tiKHNrLCBza2IsIDEsIEdGUF9BVE9NSUMpOwogfQogCi0vKgotICogUHJlcGFyZSBhIFNZTi1BQ0suCi0gKi8KKy8qIFByZXBhcmUgYSBTWU4tQUNLLiAqLwogc3RydWN0IHNrX2J1ZmYgKnRjcF9tYWtlX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKIAkJCQlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7CkBAIC0yMjY5LDkgKzIzMDMsNyBAQAogCXJldHVybiBza2I7CiB9CiAKLS8qCi0gKiBEbyBhbGwgY29ubmVjdCBzb2NrZXQgc2V0dXBzIHRoYXQgY2FuIGJlIGRvbmUgQUYgaW5kZXBlbmRlbnQuCi0gKi8KKy8qIERvIGFsbCBjb25uZWN0IHNvY2tldCBzZXR1cHMgdGhhdCBjYW4gYmUgZG9uZSBBRiBpbmRlcGVuZGVudC4gKi8KIHN0YXRpYyB2b2lkIHRjcF9jb25uZWN0X2luaXQoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7CkBAIC0yMzMwLDkgKzIzNjIsNyBAQAogCXRjcF9jbGVhcl9yZXRyYW5zKHRwKTsKIH0KIAotLyoKLSAqIEJ1aWxkIGEgU1lOIGFuZCBzZW5kIGl0IG9mZi4KLSAqLworLyogQnVpbGQgYSBTWU4gYW5kIHNlbmQgaXQgb2ZmLiAqLwogaW50IHRjcF9jb25uZWN0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKQEAgLTIzNTksNyArMjM4OSw3IEBACiAJc2stPnNrX3dtZW1fcXVldWVkICs9IGJ1ZmYtPnRydWVzaXplOwogCXNrX21lbV9jaGFyZ2Uoc2ssIGJ1ZmYtPnRydWVzaXplKTsKIAl0cC0+cGFja2V0c19vdXQgKz0gdGNwX3NrYl9wY291bnQoYnVmZik7Ci0JdGNwX3RyYW5zbWl0X3NrYihzaywgYnVmZiwgMSwgR0ZQX0tFUk5FTCk7CisJdGNwX3RyYW5zbWl0X3NrYihzaywgYnVmZiwgMSwgc2stPnNrX2FsbG9jYXRpb24pOwogCiAJLyogV2UgY2hhbmdlIHRwLT5zbmRfbnh0IGFmdGVyIHRoZSB0Y3BfdHJhbnNtaXRfc2tiKCkgY2FsbAogCSAqIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBwYWNrZXQgZ2V0IGNvdW50ZWQgaW4gdGNwT3V0U2Vncy4KQEAgLTI0OTMsNiArMjUyMyw3IEBACiAJcmV0dXJuIHRjcF90cmFuc21pdF9za2Ioc2ssIHNrYiwgMCwgR0ZQX0FUT01JQyk7CiB9CiAKKy8qIEluaXRpYXRlIGtlZXBhbGl2ZSBvciB3aW5kb3cgcHJvYmUgZnJvbSB0aW1lci4gKi8KIGludCB0Y3Bfd3JpdGVfd2FrZXVwKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKaW5kZXggYjE0NGEyNi4uY2RiMmNhNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMKKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKQEAgLTEzNywxMyArMTM3LDE0IEBACiB7CiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCWludCByZXRyeV91bnRpbDsKKwlib29sIGRvX3Jlc2V0OwogCiAJaWYgKCgxIDw8IHNrLT5za19zdGF0ZSkgJiAoVENQRl9TWU5fU0VOVCB8IFRDUEZfU1lOX1JFQ1YpKSB7CiAJCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzKQogCQkJZHN0X25lZ2F0aXZlX2FkdmljZSgmc2stPnNrX2RzdF9jYWNoZSk7CiAJCXJldHJ5X3VudGlsID0gaWNzay0+aWNza19zeW5fcmV0cmllcyA/IDogc3lzY3RsX3RjcF9zeW5fcmV0cmllczsKIAl9IGVsc2UgewotCQlpZiAoaWNzay0+aWNza19yZXRyYW5zbWl0cyA+PSBzeXNjdGxfdGNwX3JldHJpZXMxKSB7CisJCWlmIChyZXRyYW5zbWl0c190aW1lZF9vdXQoc2ssIHN5c2N0bF90Y3BfcmV0cmllczEpKSB7CiAJCQkvKiBCbGFjayBob2xlIGRldGVjdGlvbiAqLwogCQkJdGNwX210dV9wcm9iaW5nKGljc2ssIHNrKTsKIApAQCAtMTU1LDEzICsxNTYsMTUgQEAKIAkJCWNvbnN0IGludCBhbGl2ZSA9IChpY3NrLT5pY3NrX3J0byA8IFRDUF9SVE9fTUFYKTsKIAogCQkJcmV0cnlfdW50aWwgPSB0Y3Bfb3JwaGFuX3JldHJpZXMoc2ssIGFsaXZlKTsKKwkJCWRvX3Jlc2V0ID0gYWxpdmUgfHwKKwkJCQkgICAhcmV0cmFuc21pdHNfdGltZWRfb3V0KHNrLCByZXRyeV91bnRpbCk7CiAKLQkJCWlmICh0Y3Bfb3V0X29mX3Jlc291cmNlcyhzaywgYWxpdmUgfHwgaWNzay0+aWNza19yZXRyYW5zbWl0cyA8IHJldHJ5X3VudGlsKSkKKwkJCWlmICh0Y3Bfb3V0X29mX3Jlc291cmNlcyhzaywgZG9fcmVzZXQpKQogCQkJCXJldHVybiAxOwogCQl9CiAJfQogCi0JaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPj0gcmV0cnlfdW50aWwpIHsKKwlpZiAocmV0cmFuc21pdHNfdGltZWRfb3V0KHNrLCByZXRyeV91bnRpbCkpIHsKIAkJLyogSGFzIGl0IGdvbmUganVzdCB0b28gZmFyPyAqLwogCQl0Y3Bfd3JpdGVfZXJyKHNrKTsKIAkJcmV0dXJuIDE7CkBAIC0yNzksNyArMjgyLDcgQEAKICAqCVRoZSBUQ1AgcmV0cmFuc21pdCB0aW1lci4KICAqLwogCi1zdGF0aWMgdm9pZCB0Y3BfcmV0cmFuc21pdF90aW1lcihzdHJ1Y3Qgc29jayAqc2spCit2b2lkIHRjcF9yZXRyYW5zbWl0X3RpbWVyKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CkBAIC0zODUsNyArMzg4LDcgQEAKIG91dF9yZXNldF90aW1lcjoKIAlpY3NrLT5pY3NrX3J0byA9IG1pbihpY3NrLT5pY3NrX3J0byA8PCAxLCBUQ1BfUlRPX01BWCk7CiAJaW5ldF9jc2tfcmVzZXRfeG1pdF90aW1lcihzaywgSUNTS19USU1FX1JFVFJBTlMsIGljc2stPmljc2tfcnRvLCBUQ1BfUlRPX01BWCk7Ci0JaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPiBzeXNjdGxfdGNwX3JldHJpZXMxKQorCWlmIChyZXRyYW5zbWl0c190aW1lZF9vdXQoc2ssIHN5c2N0bF90Y3BfcmV0cmllczEgKyAxKSkKIAkJX19za19kc3RfcmVzZXQoc2spOwogCiBvdXQ6OwpAQCAtNDk5LDggKzUwMiw3IEBACiAJZWxhcHNlZCA9IHRjcF90aW1lX3N0YW1wIC0gdHAtPnJjdl90c3RhbXA7CiAKIAlpZiAoZWxhcHNlZCA+PSBrZWVwYWxpdmVfdGltZV93aGVuKHRwKSkgewotCQlpZiAoKCF0cC0+a2VlcGFsaXZlX3Byb2JlcyAmJiBpY3NrLT5pY3NrX3Byb2Jlc19vdXQgPj0gc3lzY3RsX3RjcF9rZWVwYWxpdmVfcHJvYmVzKSB8fAotCQkgICAgICh0cC0+a2VlcGFsaXZlX3Byb2JlcyAmJiBpY3NrLT5pY3NrX3Byb2Jlc19vdXQgPj0gdHAtPmtlZXBhbGl2ZV9wcm9iZXMpKSB7CisJCWlmIChpY3NrLT5pY3NrX3Byb2Jlc19vdXQgPj0ga2VlcGFsaXZlX3Byb2Jlcyh0cCkpIHsKIAkJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgR0ZQX0FUT01JQyk7CiAJCQl0Y3Bfd3JpdGVfZXJyKHNrKTsKIAkJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCA4MGUzODEyLi5lYmFhYTdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMTEwLDExICsxMTAsMTIgQEAKIEVYUE9SVF9TWU1CT0wodWRwX3RhYmxlKTsKIAogaW50IHN5c2N0bF91ZHBfbWVtWzNdIF9fcmVhZF9tb3N0bHk7Ci1pbnQgc3lzY3RsX3VkcF9ybWVtX21pbiBfX3JlYWRfbW9zdGx5OwotaW50IHN5c2N0bF91ZHBfd21lbV9taW4gX19yZWFkX21vc3RseTsKLQogRVhQT1JUX1NZTUJPTChzeXNjdGxfdWRwX21lbSk7CisKK2ludCBzeXNjdGxfdWRwX3JtZW1fbWluIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF91ZHBfcm1lbV9taW4pOworCitpbnQgc3lzY3RsX3VkcF93bWVtX21pbiBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChzeXNjdGxfdWRwX3dtZW1fbWluKTsKIAogYXRvbWljX3QgdWRwX21lbW9yeV9hbGxvY2F0ZWQ7CkBAIC0xNTgsNyArMTU5LDcgQEAKICAqLwogaW50IHVkcF9saWJfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAogCQkgICAgICAgaW50ICgqc2FkZHJfY29tcCkoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwKLQkJCQkJIGNvbnN0IHN0cnVjdCBzb2NrICpzazIgKSAgICApCisJCQkJCSBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKSkKIHsKIAlzdHJ1Y3QgdWRwX2hzbG90ICpoc2xvdDsKIAlzdHJ1Y3QgdWRwX3RhYmxlICp1ZHB0YWJsZSA9IHNrLT5za19wcm90LT5oLnVkcF90YWJsZTsKQEAgLTIyMSwxNCArMjIyLDE1IEBACiBmYWlsOgogCXJldHVybiBlcnJvcjsKIH0KK0VYUE9SVF9TWU1CT0wodWRwX2xpYl9nZXRfcG9ydCk7CiAKIHN0YXRpYyBpbnQgaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0MSA9IGluZXRfc2soc2sxKSwgKmluZXQyID0gaW5ldF9zayhzazIpOwogCi0JcmV0dXJuIAkoICFpcHY2X29ubHlfc29jayhzazIpICAmJgotCQkgICghaW5ldDEtPnJjdl9zYWRkciB8fCAhaW5ldDItPnJjdl9zYWRkciB8fAotCQkgICBpbmV0MS0+cmN2X3NhZGRyID09IGluZXQyLT5yY3Zfc2FkZHIgICAgICApKTsKKwlyZXR1cm4gCSghaXB2Nl9vbmx5X3NvY2soc2syKSAgJiYKKwkJICghaW5ldDEtPnJjdl9zYWRkciB8fCAhaW5ldDItPnJjdl9zYWRkciB8fAorCQkgICBpbmV0MS0+cmN2X3NhZGRyID09IGluZXQyLT5yY3Zfc2FkZHIpKTsKIH0KIAogaW50IHVkcF92NF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCkBAIC0zODMsOCArMzg1LDggQEAKIHZvaWQgX191ZHA0X2xpYl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8sIHN0cnVjdCB1ZHBfdGFibGUgKnVkcHRhYmxlKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7Ci0Jc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyKilza2ItPmRhdGE7Ci0Jc3RydWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciopKHNrYi0+ZGF0YSsoaXBoLT5paGw8PDIpKTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2ItPmRhdGE7CisJc3RydWN0IHVkcGhkciAqdWggPSAoc3RydWN0IHVkcGhkciAqKShza2ItPmRhdGErKGlwaC0+aWhsPDwyKSk7CiAJY29uc3QgaW50IHR5cGUgPSBpY21wX2hkcihza2IpLT50eXBlOwogCWNvbnN0IGludCBjb2RlID0gaWNtcF9oZHIoc2tiKS0+Y29kZTsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC00MzksNyArNDQxLDcgQEAKIAkJaWYgKCFoYXJkZXJyIHx8IHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCiAJCQlnb3RvIG91dDsKIAl9IGVsc2UgewotCQlpcF9pY21wX2Vycm9yKHNrLCBza2IsIGVyciwgdWgtPmRlc3QsIGluZm8sICh1OCopKHVoKzEpKTsKKwkJaXBfaWNtcF9lcnJvcihzaywgc2tiLCBlcnIsIHVoLT5kZXN0LCBpbmZvLCAodTggKikodWgrMSkpOwogCX0KIAlzay0+c2tfZXJyID0gZXJyOwogCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOwpAQCAtNDc0LDcgKzQ3Niw3IEBACiAgKiAJICAgICAgICAoY2hlY2tzdW0gZmllbGQgbXVzdCBiZSB6ZXJvZWQgb3V0KQogICovCiBzdGF0aWMgdm9pZCB1ZHA0X2h3Y3N1bV9vdXRnb2luZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIGludCBsZW4gICAgICApCisJCQkJIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAlzdHJ1Y3QgdWRwaGRyICp1aCA9IHVkcF9oZHIoc2tiKTsKQEAgLTU0NSw3ICs1NDcsNyBAQAogCiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7IC8qIFVEUCBoYXJkd2FyZSBjc3VtICovCiAKLQkJdWRwNF9od2NzdW1fb3V0Z29pbmcoc2ssIHNrYiwgZmwtPmZsNF9zcmMsZmwtPmZsNF9kc3QsIHVwLT5sZW4pOworCQl1ZHA0X2h3Y3N1bV9vdXRnb2luZyhzaywgc2tiLCBmbC0+Zmw0X3NyYywgZmwtPmZsNF9kc3QsIHVwLT5sZW4pOwogCQlnb3RvIHNlbmQ7CiAKIAl9IGVsc2UJCQkJCQkgLyogICBgbm9ybWFsJyBVRFAgICAgKi8KQEAgLTU1MywxOCArNTU1LDI0IEBACiAKIAkvKiBhZGQgcHJvdG9jb2wtZGVwZW5kZW50IHBzZXVkby1oZWFkZXIgKi8KIAl1aC0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhmbC0+Zmw0X3NyYywgZmwtPmZsNF9kc3QsIHVwLT5sZW4sCi0JCQkJICAgICAgc2stPnNrX3Byb3RvY29sLCBjc3VtICAgICAgICAgICAgICk7CisJCQkJICAgICAgc2stPnNrX3Byb3RvY29sLCBjc3VtKTsKIAlpZiAodWgtPmNoZWNrID09IDApCiAJCXVoLT5jaGVjayA9IENTVU1fTUFOR0xFRF8wOwogCiBzZW5kOgogCWVyciA9IGlwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2spOworCWlmIChlcnIpIHsKKwkJaWYgKGVyciA9PSAtRU5PQlVGUyAmJiAhaW5ldC0+cmVjdmVycikgeworCQkJVURQX0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwKKwkJCQkJICAgVURQX01JQl9TTkRCVUZFUlJPUlMsIGlzX3VkcGxpdGUpOworCQkJZXJyID0gMDsKKwkJfQorCX0gZWxzZQorCQlVRFBfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLAorCQkJCSAgIFVEUF9NSUJfT1VUREFUQUdSQU1TLCBpc191ZHBsaXRlKTsKIG91dDoKIAl1cC0+bGVuID0gMDsKIAl1cC0+cGVuZGluZyA9IDA7Ci0JaWYgKCFlcnIpCi0JCVVEUF9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksCi0JCQkJVURQX01JQl9PVVREQVRBR1JBTVMsIGlzX3VkcGxpdGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTU5Miw3ICs2MDAsNyBAQAogCSAqCUNoZWNrIHRoZSBmbGFncy4KIAkgKi8KIAotCWlmIChtc2ctPm1zZ19mbGFncyZNU0dfT09CKQkvKiBNaXJyb3IgQlNEIGVycm9yIG1lc3NhZ2UgY29tcGF0aWJpbGl0eSAqLworCWlmIChtc2ctPm1zZ19mbGFncyAmIE1TR19PT0IpIC8qIE1pcnJvciBCU0QgZXJyb3IgbWVzc2FnZSBjb21wYXRpYmlsaXR5ICovCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlwYy5vcHQgPSBOVUxMOwpAQCAtNjE5LDcgKzYyNyw3IEBACiAJICoJR2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuCiAJICovCiAJaWYgKG1zZy0+bXNnX25hbWUpIHsKLQkJc3RydWN0IHNvY2thZGRyX2luICogdXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKW1zZy0+bXNnX25hbWU7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqIHVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKIAkJaWYgKG1zZy0+bXNnX25hbWVsZW4gPCBzaXplb2YoKnVzaW4pKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICh1c2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKQEAgLTY4NCw3ICs2OTIsNyBAQAogCX0KIAogCWlmIChjb25uZWN0ZWQpCi0JCXJ0ID0gKHN0cnVjdCBydGFibGUqKXNrX2RzdF9jaGVjayhzaywgMCk7CisJCXJ0ID0gKHN0cnVjdCBydGFibGUgKilza19kc3RfY2hlY2soc2ssIDApOwogCiAJaWYgKHJ0ID09IE5VTEwpIHsKIAkJc3RydWN0IGZsb3dpIGZsID0geyAub2lmID0gaXBjLm9pZiwKQEAgLTc4Miw2ICs3OTAsNyBAQAogCWVyciA9IDA7CiAJZ290byBvdXQ7CiB9CitFWFBPUlRfU1lNQk9MKHVkcF9zZW5kbXNnKTsKIAogaW50IHVkcF9zZW5kcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0LAogCQkgc2l6ZV90IHNpemUsIGludCBmbGFncykKQEAgLTg3MSw2ICs4ODAsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHVkcF9pb2N0bCk7CiAKIC8qCiAgKiAJVGhpcyBzaG91bGQgYmUgZWFzeSwgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoZXJlIHdlCkBAIC04OTIsNyArOTAyLDcgQEAKIAkgKglDaGVjayBhbnkgcGFzc2VkIGFkZHJlc3NlcwogCSAqLwogCWlmIChhZGRyX2xlbikKLQkJKmFkZHJfbGVuPXNpemVvZigqc2luKTsKKwkJKmFkZHJfbGVuID0gc2l6ZW9mKCpzaW4pOwogCiAJaWYgKGZsYWdzICYgTVNHX0VSUlFVRVVFKQogCQlyZXR1cm4gaXBfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pOwpAQCAtOTIzLDkgKzkzMywxMSBAQAogCiAJaWYgKHNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikpCiAJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLAotCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsIGNvcGllZCAgICAgICApOworCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CiAJZWxzZSB7Ci0JCWVyciA9IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBtc2ctPm1zZ19pb3YpOworCQllcnIgPSBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhza2IsCisJCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLAorCQkJCQkJICAgICAgIG1zZy0+bXNnX2lvdik7CiAKIAkJaWYgKGVyciA9PSAtRUlOVkFMKQogCQkJZ290byBjc3VtX2NvcHlfZXJyOwpAQCAtOTQxLDggKzk1Myw3IEBACiAJc29ja19yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBza2IpOwogCiAJLyogQ29weSB0aGUgYWRkcmVzcy4gKi8KLQlpZiAoc2luKQotCXsKKwlpZiAoc2luKSB7CiAJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJCXNpbi0+c2luX3BvcnQgPSB1ZHBfaGRyKHNrYiktPnNvdXJjZTsKIAkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpcF9oZHIoc2tiKS0+c2FkZHI7CkBAIC05OTUsNiArMTAwNiw3IEBACiAJc2tfZHN0X3Jlc2V0KHNrKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodWRwX2Rpc2Nvbm5lY3QpOwogCiB2b2lkIHVkcF9saWJfdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTEwNDQsNyArMTA1Niw3IEBACiAgKiBOb3RlIHRoYXQgaW4gdGhlIHN1Y2Nlc3MgYW5kIGVycm9yIGNhc2VzLCB0aGUgc2tiIGlzIGFzc3VtZWQgdG8KICAqIGhhdmUgZWl0aGVyIGJlZW4gcmVxdWV1ZWQgb3IgZnJlZWQuCiAgKi8KLWludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraW50IHVkcF9xdWV1ZV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKIAlpbnQgcmM7CkBAIC0xMjE0LDcgKzEyMjYsNyBAQAogCWlmICh1aC0+Y2hlY2sgPT0gMCkgewogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpIHsKLQkgICAgICAgaWYgKCFjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCBza2ItPmxlbiwKKwkJaWYgKCFjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLCBza2ItPmxlbiwKIAkJCQkgICAgICBwcm90bywgc2tiLT5jc3VtKSkKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfQpAQCAtMTM1NSw3ICsxMzY3LDcgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgaXNfdWRwbGl0ZSA9IElTX1VEUExJVEUoc2spOwogCi0JaWYgKG9wdGxlbjxzaXplb2YoaW50KSkKKwlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilvcHR2YWwpKQpAQCAtMTQyNiw2ICsxNDM4LDcgQEAKIAogCXJldHVybiBlcnI7CiB9CitFWFBPUlRfU1lNQk9MKHVkcF9saWJfc2V0c29ja29wdCk7CiAKIGludCB1ZHBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCkBAIC0xNDUzLDcgKzE0NjYsNyBAQAogCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOwogCWludCB2YWwsIGxlbjsKIAotCWlmIChnZXRfdXNlcihsZW4sb3B0bGVuKSkKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLCBzaXplb2YoaW50KSk7CkBAIC0xNDg2LDEwICsxNDk5LDExIEBACiAKIAlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnZhbCxsZW4pKQorCWlmIChjb3B5X3RvX3VzZXIob3B0dmFsLCAmdmFsLCBsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wodWRwX2xpYl9nZXRzb2Nrb3B0KTsKIAogaW50IHVkcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQpAQCAtMTUyOCw5ICsxNTQyLDkgQEAKIAlpbnQgCWlzX2xpdGUgPSBJU19VRFBMSVRFKHNrKTsKIAogCS8qIENoZWNrIGZvciBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIGNoZWNrc3VtIGVycm9ycyAqLwotCWlmICggKG1hc2sgJiBQT0xMUkROT1JNKSAmJgotCSAgICAgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYKLQkgICAgICEoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSl7CisJaWYgKChtYXNrICYgUE9MTFJETk9STSkgJiYKKwkgICAgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYKKwkgICAgIShzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pKSB7CiAJCXN0cnVjdCBza19idWZmX2hlYWQgKnJjdnEgPSAmc2stPnNrX3JlY2VpdmVfcXVldWU7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTE1NTIsNiArMTU2Niw3IEBACiAJcmV0dXJuIG1hc2s7CiAKIH0KK0VYUE9SVF9TWU1CT0wodWRwX3BvbGwpOwogCiBzdHJ1Y3QgcHJvdG8gdWRwX3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIlVEUCIsCkBAIC0xNTgyLDYgKzE1OTcsNyBAQAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF91ZHBfZ2V0c29ja29wdCwKICNlbmRpZgogfTsKK0VYUE9SVF9TWU1CT0wodWRwX3Byb3QpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwpAQCAtMTcwMywxMSArMTcxOSwxMyBAQAogCQlyYyA9IC1FTk9NRU07CiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTCh1ZHBfcHJvY19yZWdpc3Rlcik7CiAKIHZvaWQgdWRwX3Byb2NfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1ZHBfc2VxX2FmaW5mbyAqYWZpbmZvKQogewogCXByb2NfbmV0X3JlbW92ZShuZXQsIGFmaW5mby0+bmFtZSk7CiB9CitFWFBPUlRfU1lNQk9MKHVkcF9wcm9jX3VucmVnaXN0ZXIpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyB2b2lkIHVkcDRfZm9ybWF0X3NvY2soc3RydWN0IHNvY2sgKnNwLCBzdHJ1Y3Qgc2VxX2ZpbGUgKmYsCkBAIC0xNzQxLDcgKzE3NTksNyBAQAogCQlpbnQgbGVuOwogCiAJCXVkcDRfZm9ybWF0X3NvY2sodiwgc2VxLCBzdGF0ZS0+YnVja2V0LCAmbGVuKTsKLQkJc2VxX3ByaW50ZihzZXEsICIlKnNcbiIsIDEyNyAtIGxlbiAsIiIpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUqc1xuIiwgMTI3IC0gbGVuLCAiIik7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTgxNiwxNiArMTgzNCw2NCBAQAogCXN5c2N0bF91ZHBfd21lbV9taW4gPSBTS19NRU1fUVVBTlRVTTsKIH0KIAotRVhQT1JUX1NZTUJPTCh1ZHBfZGlzY29ubmVjdCk7Ci1FWFBPUlRfU1lNQk9MKHVkcF9pb2N0bCk7Ci1FWFBPUlRfU1lNQk9MKHVkcF9wcm90KTsKLUVYUE9SVF9TWU1CT0wodWRwX3NlbmRtc2cpOwotRVhQT1JUX1NZTUJPTCh1ZHBfbGliX2dldHNvY2tvcHQpOwotRVhQT1JUX1NZTUJPTCh1ZHBfbGliX3NldHNvY2tvcHQpOwotRVhQT1JUX1NZTUJPTCh1ZHBfcG9sbCk7Ci1FWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0X3BvcnQpOworaW50IHVkcDRfdWZvX3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlzdHJ1Y3QgdWRwaGRyICp1aDsKIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1FWFBPUlRfU1lNQk9MKHVkcF9wcm9jX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wodWRwX3Byb2NfdW5yZWdpc3Rlcik7Ci0jZW5kaWYKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKnVoKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaXBoID0gaXBfaGRyKHNrYik7CisJdWggPSB1ZHBfaGRyKHNrYik7CisKKwl1aC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwgc2tiLT5sZW4sCisJCQkJICAgICAgIElQUFJPVE9fVURQLCAwKTsKKwlza2ItPmNzdW1fc3RhcnQgPSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5oZWFkOworCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2tfYnVmZiAqdWRwNF91Zm9fZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGZlYXR1cmVzKQoreworCXN0cnVjdCBza19idWZmICpzZWdzID0gRVJSX1BUUigtRUlOVkFMKTsKKwl1bnNpZ25lZCBpbnQgbXNzOworCWludCBvZmZzZXQ7CisJX193c3VtIGNzdW07CisKKwltc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCWlmICh1bmxpa2VseShza2ItPmxlbiA8PSBtc3MpKQorCQlnb3RvIG91dDsKKworCWlmIChza2JfZ3NvX29rKHNrYiwgZmVhdHVyZXMgfCBORVRJRl9GX0dTT19ST0JVU1QpKSB7CisJCS8qIFBhY2tldCBpcyBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UsIHJlc2V0IGdzb19zZWdzLiAqLworCQlpbnQgdHlwZSA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGU7CisKKwkJaWYgKHVubGlrZWx5KHR5cGUgJiB+KFNLQl9HU09fVURQIHwgU0tCX0dTT19ET0RHWSkgfHwKKwkJCSAgICAgISh0eXBlICYgKFNLQl9HU09fVURQKSkpKQorCQkJZ290byBvdXQ7CisKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA9IERJVl9ST1VORF9VUChza2ItPmxlbiwgbXNzKTsKKworCQlzZWdzID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRG8gc29mdHdhcmUgVUZPLiBDb21wbGV0ZSBhbmQgZmlsbCBpbiB0aGUgVURQIGNoZWNrc3VtIGFzIEhXIGNhbm5vdAorCSAqIGRvIGNoZWNrc3VtIG9mIFVEUCBwYWNrZXRzIHNlbnQgYXMgbXVsdGlwbGUgSVAgZnJhZ21lbnRzLgorCSAqLworCW9mZnNldCA9IHNrYi0+Y3N1bV9zdGFydCAtIHNrYl9oZWFkcm9vbShza2IpOworCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKTsKKwlvZmZzZXQgKz0gc2tiLT5jc3VtX29mZnNldDsKKwkqKF9fc3VtMTYgKikoc2tiLT5kYXRhICsgb2Zmc2V0KSA9IGNzdW1fZm9sZChjc3VtKTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwkvKiBGcmFnbWVudCB0aGUgc2tiLiBJUCBoZWFkZXJzIG9mIHRoZSBmcmFnbWVudHMgYXJlIHVwZGF0ZWQgaW4KKwkgKiBpbmV0X2dzb19zZWdtZW50KCkKKwkgKi8KKwlzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CitvdXQ6CisJcmV0dXJuIHNlZ3M7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggMDA3MWVlNi4uNzRmYjJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTI2NCw2ICsyNjQsMjIgQEAKIAkuZmlsbF9kc3QgPQkJeGZybTRfZmlsbF9kc3QsCiB9OwogCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTRfcG9saWN5X3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gInhmcm00X2djX3RocmVzaCIsCisJCS5kYXRhICAgICAgICAgICA9ICZ4ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaCwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKGludCksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hkcjsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgeGZybTRfcG9saWN5X2luaXQodm9pZCkKIHsKIAl4ZnJtX3BvbGljeV9yZWdpc3Rlcl9hZmluZm8oJnhmcm00X3BvbGljeV9hZmluZm8pOwpAQCAtMjcxLDEyICsyODcsMzEgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHhmcm00X3BvbGljeV9maW5pKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCWlmIChzeXNjdGxfaGRyKQorCQl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoc3lzY3RsX2hkcik7CisjZW5kaWYKIAl4ZnJtX3BvbGljeV91bnJlZ2lzdGVyX2FmaW5mbygmeGZybTRfcG9saWN5X2FmaW5mbyk7CiB9CiAKLXZvaWQgX19pbml0IHhmcm00X2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHhmcm00X2luaXQoaW50IHJ0X21heF9zaXplKQogewogCXhmcm00X3N0YXRlX2luaXQoKTsKIAl4ZnJtNF9wb2xpY3lfaW5pdCgpOworCS8qCisJICogU2VsZWN0IGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGdjX3RocmVzaCBiYXNlZCBvbiB0aGUgbWFpbiByb3V0ZQorCSAqIHRhYmxlIGhhc2ggc2l6ZS4gIEl0IHNlZW1zIHRvIG1lIHRoZSB3b3JzdCBjYXNlIHNjZW5hcmlvIGlzIHdoZW4KKwkgKiB3ZSBoYXZlIGlwc2VjIG9wZXJhdGluZyBpbiB0cmFuc3BvcnQgbW9kZSwgaW4gd2hpY2ggd2UgY3JlYXRlIGEKKwkgKiBkc3RfZW50cnkgcGVyIHNvY2tldC4gIFRoZSB4ZnJtIGdjIGFsZ29yaXRobSBzdGFydHMgdHJ5aW5nIHRvIHJlbW92ZQorCSAqIGVudHJpZXMgYXQgZ2NfdGhyZXNoLCBhbmQgcHJldmVudHMgbmV3IGFsbG9jYXRpb25zIGFzIDIqZ2NfdGhyZXNoCisJICogc28gbGV0cyBzZXQgYW4gaW5pdGlhbCB4ZnJtIGdjX3RocmVzaCB2YWx1ZSBhdCB0aGUgcnRfbWF4X3NpemUvMi4KKwkgKiBUaGF0IHdpbGwgbGV0IHVzIHN0b3JlIGFuIGlwc2VjIGNvbm5lY3Rpb24gcGVyIHJvdXRlIHRhYmxlIGVudHJ5LAorCSAqIGFuZCBzdGFydCBjbGVhbmluZyB3aGVuIHdlcmUgMS8yIGZ1bGwKKwkgKi8KKwl4ZnJtNF9kc3Rfb3BzLmdjX3RocmVzaCA9IHJ0X21heF9zaXplLzI7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCXN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKCZpbml0X25ldCwgbmV0X2lwdjRfY3RsX3BhdGgsCisJCQkJCQl4ZnJtNF9wb2xpY3lfdGFibGUpOworI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDQzYjNjOWYuLmM5YjM2OTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMTM3MSwxMiArMTM3MSwxNCBAQAogCiAvKiBHZXRzIHJlZmVyZW5jZWQgYWRkcmVzcywgZGVzdHJveXMgaWZhZGRyICovCiAKLXN0YXRpYyB2b2lkIGFkZHJjb25mX2RhZF9zdG9wKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKK3N0YXRpYyB2b2lkIGFkZHJjb25mX2RhZF9zdG9wKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCwgaW50IGRhZF9mYWlsZWQpCiB7CiAJaWYgKGlmcC0+ZmxhZ3MmSUZBX0ZfUEVSTUFORU5UKSB7CiAJCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKIAkJYWRkcmNvbmZfZGVsX3RpbWVyKGlmcCk7CiAJCWlmcC0+ZmxhZ3MgfD0gSUZBX0ZfVEVOVEFUSVZFOworCQlpZiAoZGFkX2ZhaWxlZCkKKwkJCWlmcC0+ZmxhZ3MgfD0gSUZBX0ZfREFERkFJTEVEOwogCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKIAkJaW42X2lmYV9wdXQoaWZwKTsKICNpZmRlZiBDT05GSUdfSVBWNl9QUklWQUNZCkBAIC0xNDIyLDcgKzE0MjQsNyBAQAogCQl9CiAJfQogCi0JYWRkcmNvbmZfZGFkX3N0b3AoaWZwKTsKKwlhZGRyY29uZl9kYWRfc3RvcChpZnAsIDEpOwogfQogCiAvKiBKb2luIHRvIHNvbGljaXRlZCBhZGRyIG11bHRpY2FzdCBncm91cC4gKi8KQEAgLTI3NzgsNyArMjc4MCw3IEBACiAJICAgIGlkZXYtPmNuZi5hY2NlcHRfZGFkIDwgMSB8fAogCSAgICAhKGlmcC0+ZmxhZ3MmSUZBX0ZfVEVOVEFUSVZFKSB8fAogCSAgICBpZnAtPmZsYWdzICYgSUZBX0ZfTk9EQUQpIHsKLQkJaWZwLT5mbGFncyAmPSB+KElGQV9GX1RFTlRBVElWRXxJRkFfRl9PUFRJTUlTVElDKTsKKwkJaWZwLT5mbGFncyAmPSB+KElGQV9GX1RFTlRBVElWRXxJRkFfRl9PUFRJTUlTVElDfElGQV9GX0RBREZBSUxFRCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKQEAgLTI3OTUsNyArMjc5Nyw3IEBACiAJCSAqIC0gb3RoZXJ3aXNlLCBraWxsIGl0LgogCQkgKi8KIAkJaW42X2lmYV9ob2xkKGlmcCk7Ci0JCWFkZHJjb25mX2RhZF9zdG9wKGlmcCk7CisJCWFkZHJjb25mX2RhZF9zdG9wKGlmcCwgMCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI4MjksNyArMjgzMSw3IEBACiAJCSAqIERBRCB3YXMgc3VjY2Vzc2Z1bAogCQkgKi8KIAotCQlpZnAtPmZsYWdzICY9IH4oSUZBX0ZfVEVOVEFUSVZFfElGQV9GX09QVElNSVNUSUMpOworCQlpZnAtPmZsYWdzICY9IH4oSUZBX0ZfVEVOVEFUSVZFfElGQV9GX09QVElNSVNUSUN8SUZBX0ZfREFERkFJTEVEKTsKIAkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CiAJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggNDVmOWEyYS4uYTEyM2EzMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC03NzQsNiArNzc0LDExIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOwogCXN0cnVjdCBpcHY2aGRyICppcHY2aDsKIAlzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKm9wczsKKwlpbnQgcHJvdG87CisJc3RydWN0IGZyYWdfaGRyICpmcHRyOworCXVuc2lnbmVkIGludCB1bmZyYWdfaXA2aGxlbjsKKwl1OCAqcHJldmhkcjsKKwlpbnQgb2Zmc2V0ID0gMDsKIAogCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9WNl9DU1VNKSkKIAkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfU0c7CkBAIC03OTMsMTAgKzc5OCw5IEBACiAJX19za2JfcHVsbChza2IsIHNpemVvZigqaXB2NmgpKTsKIAlzZWdzID0gRVJSX1BUUigtRVBST1RPTk9TVVBQT1JUKTsKIAorCXByb3RvID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgaXB2NmgtPm5leHRoZHIpOwogCXJjdV9yZWFkX2xvY2soKTsKLQlvcHMgPSByY3VfZGVyZWZlcmVuY2UoaW5ldDZfcHJvdG9zWwotCQlpcHY2X2dzb19wdWxsX2V4dGhkcnMoc2tiLCBpcHY2aC0+bmV4dGhkcildKTsKLQorCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbcHJvdG9dKTsKIAlpZiAobGlrZWx5KG9wcyAmJiBvcHMtPmdzb19zZWdtZW50KSkgewogCQlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCQlzZWdzID0gb3BzLT5nc29fc2VnbWVudChza2IsIGZlYXR1cmVzKTsKQEAgLTgxMCw2ICs4MTQsMTYgQEAKIAkJaXB2NmggPSBpcHY2X2hkcihza2IpOwogCQlpcHY2aC0+cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItPmxlbiAtIHNrYi0+bWFjX2xlbiAtCiAJCQkJCSAgIHNpemVvZigqaXB2NmgpKTsKKwkJaWYgKHByb3RvID09IElQUFJPVE9fVURQKSB7CisJCQl1bmZyYWdfaXA2aGxlbiA9IGlwNl9maW5kXzFzdGZyYWdvcHQoc2tiLCAmcHJldmhkcik7CisJCQlmcHRyID0gKHN0cnVjdCBmcmFnX2hkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArCisJCQkJdW5mcmFnX2lwNmhsZW4pOworCQkJZnB0ci0+ZnJhZ19vZmYgPSBodG9ucyhvZmZzZXQpOworCQkJaWYgKHNrYi0+bmV4dCAhPSBOVUxMKQorCQkJCWZwdHItPmZyYWdfb2ZmIHw9IGh0b25zKElQNl9NRik7CisJCQlvZmZzZXQgKz0gKG50b2hzKGlwdjZoLT5wYXlsb2FkX2xlbikgLQorCQkJCSAgIHNpemVvZihzdHJ1Y3QgZnJhZ19oZHIpKTsKKwkJfQogCX0KIAogb3V0OgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jCmluZGV4IGVhYjYyYTcuLmUyMzI1ZjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2ljbXAuYworKysgYi9uZXQvaXB2Ni9pY21wLmMKQEAgLTMyMyw3ICszMjMsNyBAQAogCWludCBpaWYgPSAwOwogCWludCBhZGRyX3R5cGUgPSAwOwogCWludCBsZW47Ci0JaW50IGhsaW1pdCwgdGNsYXNzOworCWludCBobGltaXQ7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoKHU4ICopaGRyIDwgc2tiLT5oZWFkIHx8CkBAIC00NjksMTAgKzQ2OSw2IEBACiAJaWYgKGhsaW1pdCA8IDApCiAJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAotCXRjbGFzcyA9IG5wLT50Y2xhc3M7Ci0JaWYgKHRjbGFzcyA8IDApCi0JCXRjbGFzcyA9IDA7Ci0KIAltc2cuc2tiID0gc2tiOwogCW1zZy5vZmZzZXQgPSBza2JfbmV0d29ya19vZmZzZXQoc2tiKTsKIAltc2cudHlwZSA9IHR5cGU7CkBAIC00ODgsOCArNDg0LDggQEAKIAogCWVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgaWNtcHY2X2dldGZyYWcsICZtc2csCiAJCQkgICAgICBsZW4gKyBzaXplb2Yoc3RydWN0IGljbXA2aGRyKSwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaWNtcDZoZHIpLAotCQkJICAgICAgaGxpbWl0LCB0Y2xhc3MsIE5VTEwsICZmbCwgKHN0cnVjdCBydDZfaW5mbyopZHN0LAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpY21wNmhkciksIGhsaW1pdCwKKwkJCSAgICAgIG5wLT50Y2xhc3MsIE5VTEwsICZmbCwgKHN0cnVjdCBydDZfaW5mbyopZHN0LAogCQkJICAgICAgTVNHX0RPTlRXQUlUKTsKIAlpZiAoZXJyKSB7CiAJCWlwNl9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CkBAIC01MjIsNyArNTE4LDYgQEAKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJaW50IGVyciA9IDA7CiAJaW50IGhsaW1pdDsKLQlpbnQgdGNsYXNzOwogCiAJc2FkZHIgPSAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHI7CiAKQEAgLTU2MiwxMCArNTU3LDYgQEAKIAlpZiAoaGxpbWl0IDwgMCkKIAkJaGxpbWl0ID0gaXA2X2RzdF9ob3BsaW1pdChkc3QpOwogCi0JdGNsYXNzID0gbnAtPnRjbGFzczsKLQlpZiAodGNsYXNzIDwgMCkKLQkJdGNsYXNzID0gMDsKLQogCWlkZXYgPSBpbjZfZGV2X2dldChza2ItPmRldik7CiAKIAltc2cuc2tiID0gc2tiOwpAQCAtNTczLDcgKzU2NCw3IEBACiAJbXNnLnR5cGUgPSBJQ01QVjZfRUNIT19SRVBMWTsKIAogCWVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgaWNtcHY2X2dldGZyYWcsICZtc2csIHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBpY21wNmhkciksCi0JCQkJc2l6ZW9mKHN0cnVjdCBpY21wNmhkciksIGhsaW1pdCwgdGNsYXNzLCBOVUxMLCAmZmwsCisJCQkJc2l6ZW9mKHN0cnVjdCBpY21wNmhkciksIGhsaW1pdCwgbnAtPnRjbGFzcywgTlVMTCwgJmZsLAogCQkJCShzdHJ1Y3QgcnQ2X2luZm8qKWRzdCwgTVNHX0RPTlRXQUlUKTsKIAogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCA1MmVlMWRjLi4wZTkzY2E1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC0xNjQsMTIgKzE2NCw2IEBACiAJCWRzdF9mcmVlKCZydC0+dS5kc3QpOwogfQogCi0jaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCi0jZGVmaW5lIEZJQl9UQUJMRV9IQVNIU1ogMjU2Ci0jZWxzZQotI2RlZmluZSBGSUJfVEFCTEVfSEFTSFNaIDEKLSNlbmRpZgotCiBzdGF0aWMgdm9pZCBmaWI2X2xpbmtfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl90YWJsZSAqdGIpCiB7CiAJdW5zaWduZWQgaW50IGg7CkBAIC0xODAsNyArMTc0LDcgQEAKIAkgKi8KIAlyd2xvY2tfaW5pdCgmdGItPnRiNl9sb2NrKTsKIAotCWggPSB0Yi0+dGI2X2lkICYgKEZJQl9UQUJMRV9IQVNIU1ogLSAxKTsKKwloID0gdGItPnRiNl9pZCAmIChGSUI2X1RBQkxFX0hBU0hTWiAtIDEpOwogCiAJLyoKIAkgKiBObyBwcm90ZWN0aW9uIG5lY2Vzc2FyeSwgdGhpcyBpcyB0aGUgb25seSBsaXN0IG11dGF0YXRpb24KQEAgLTIzMSw3ICsyMjUsNyBAQAogCiAJaWYgKGlkID09IDApCiAJCWlkID0gUlQ2X1RBQkxFX01BSU47Ci0JaCA9IGlkICYgKEZJQl9UQUJMRV9IQVNIU1ogLSAxKTsKKwloID0gaWQgJiAoRklCNl9UQUJMRV9IQVNIU1ogLSAxKTsKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaGVhZCA9ICZuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2hbaF07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRiLCBub2RlLCBoZWFkLCB0YjZfaGxpc3QpIHsKQEAgLTM4Miw3ICszNzYsNyBAQAogCWFyZy5uZXQgPSBuZXQ7CiAJdy0+YXJncyA9ICZhcmc7CiAKLQlmb3IgKGggPSBzX2g7IGggPCBGSUJfVEFCTEVfSEFTSFNaOyBoKyssIHNfZSA9IDApIHsKKwlmb3IgKGggPSBzX2g7IGggPCBGSUI2X1RBQkxFX0hBU0hTWjsgaCsrLCBzX2UgPSAwKSB7CiAJCWUgPSAwOwogCQloZWFkID0gJm5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaFtoXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkodGIsIG5vZGUsIGhlYWQsIHRiNl9obGlzdCkgewpAQCAtMTM2OCw3ICsxMzYyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3IgKGggPSAwOyBoIDwgRklCX1RBQkxFX0hBU0hTWjsgaCsrKSB7CisJZm9yIChoID0gMDsgaCA8IEZJQjZfVEFCTEVfSEFTSFNaOyBoKyspIHsKIAkJaGVhZCA9ICZuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2hbaF07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YWJsZSwgbm9kZSwgaGVhZCwgdGI2X2hsaXN0KSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwpAQCAtMTQ4Myw3ICsxNDc3LDcgQEAKIAlpZiAoIW5ldC0+aXB2Ni5ydDZfc3RhdHMpCiAJCWdvdG8gb3V0X3RpbWVyOwogCi0JbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoID0ga2NhbGxvYyhGSUJfVEFCTEVfSEFTSFNaLAorCW5ldC0+aXB2Ni5maWJfdGFibGVfaGFzaCA9IGtjYWxsb2MoRklCNl9UQUJMRV9IQVNIU1osCiAJCQkJCSAgIHNpemVvZigqbmV0LT5pcHY2LmZpYl90YWJsZV9oYXNoKSwKIAkJCQkJICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXQtPmlwdjYuZmliX3RhYmxlX2hhc2gpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IDZkNmE0MjcuLjJkOWNiYWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC02Myw3ICs2Myw3IEBACiAKIAlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSB7CiAJCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCX0KIAogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQlpZiAoaXB2Nl9wYXJzZV9ob3BvcHRzKHNrYikgPCAwKSB7CiAJCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBORVRfUlhfRFJPUDsKIAkJfQogCX0KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiBkcm9wOgogCXJjdV9yZWFkX3VubG9jaygpOwogCWtmcmVlX3NrYihza2IpOwotCXJldHVybiAwOworCXJldHVybiBORVRfUlhfRFJPUDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCA4N2Y4NDE5Li5jZDQ4ODAxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC01NywxOCArNTcsNiBAQAogCiBzdGF0aWMgaW50IGlwNl9mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKCpvdXRwdXQpKHN0cnVjdCBza19idWZmICopKTsKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBpcHY2X3NlbGVjdF9pZGVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZnJhZ19oZHIgKmZoZHIpCi17Ci0Jc3RhdGljIHUzMiBpcHY2X2ZyYWdtZW50YXRpb25faWQgPSAxOwotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXA2X2lkX2xvY2spOwotCi0Jc3Bpbl9sb2NrX2JoKCZpcDZfaWRfbG9jayk7Ci0JZmhkci0+aWRlbnRpZmljYXRpb24gPSBodG9ubChpcHY2X2ZyYWdtZW50YXRpb25faWQpOwotCWlmICgrK2lwdjZfZnJhZ21lbnRhdGlvbl9pZCA9PSAwKQotCQlpcHY2X2ZyYWdtZW50YXRpb25faWQgPSAxOwotCXNwaW5fdW5sb2NrX2JoKCZpcDZfaWRfbG9jayk7Ci19Ci0KIGludCBfX2lwNl9sb2NhbF9vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgbGVuOwpAQCAtMjA2LDcgKzE5NCw4IEBACiAJc3RydWN0IGlwdjZoZHIgKmhkcjsKIAl1OCAgcHJvdG8gPSBmbC0+cHJvdG87CiAJaW50IHNlZ19sZW4gPSBza2ItPmxlbjsKLQlpbnQgaGxpbWl0LCB0Y2xhc3M7CisJaW50IGhsaW1pdCA9IC0xOworCWludCB0Y2xhc3MgPSAwOwogCXUzMiBtdHU7CiAKIAlpZiAob3B0KSB7CkBAIC0yNDksMTkgKzIzOCwxMyBAQAogCS8qCiAJICoJRmlsbCBpbiB0aGUgSVB2NiBoZWFkZXIKIAkgKi8KLQotCWhsaW1pdCA9IC0xOwotCWlmIChucCkKKwlpZiAobnApIHsKKwkJdGNsYXNzID0gbnAtPnRjbGFzczsKIAkJaGxpbWl0ID0gbnAtPmhvcF9saW1pdDsKKwl9CiAJaWYgKGhsaW1pdCA8IDApCiAJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAotCXRjbGFzcyA9IC0xOwotCWlmIChucCkKLQkJdGNsYXNzID0gbnAtPnRjbGFzczsKLQlpZiAodGNsYXNzIDwgMCkKLQkJdGNsYXNzID0gMDsKLQogCSooX19iZTMyICopaGRyID0gaHRvbmwoMHg2MDAwMDAwMCB8ICh0Y2xhc3MgPDwgMjApKSB8IGZsLT5mbDZfZmxvd2xhYmVsOwogCiAJaGRyLT5wYXlsb2FkX2xlbiA9IGh0b25zKHNlZ19sZW4pOwpAQCAtNzA2LDcgKzY4OSw3IEBACiAJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCQltZW1jcHkoc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksIHRtcF9oZHIsIGhsZW4pOwogCi0JCWlwdjZfc2VsZWN0X2lkZW50KHNrYiwgZmgpOworCQlpcHY2X3NlbGVjdF9pZGVudChmaCk7CiAJCWZoLT5uZXh0aGRyID0gbmV4dGhkcjsKIAkJZmgtPnJlc2VydmVkID0gMDsKIAkJZmgtPmZyYWdfb2ZmID0gaHRvbnMoSVA2X01GKTsKQEAgLTg0NCw3ICs4MjcsNyBAQAogCQlmaC0+bmV4dGhkciA9IG5leHRoZHI7CiAJCWZoLT5yZXNlcnZlZCA9IDA7CiAJCWlmICghZnJhZ19pZCkgewotCQkJaXB2Nl9zZWxlY3RfaWRlbnQoc2tiLCBmaCk7CisJCQlpcHY2X3NlbGVjdF9pZGVudChmaCk7CiAJCQlmcmFnX2lkID0gZmgtPmlkZW50aWZpY2F0aW9uOwogCQl9IGVsc2UKIAkJCWZoLT5pZGVudGlmaWNhdGlvbiA9IGZyYWdfaWQ7CkBAIC0xMDg3LDExICsxMDcwLDEzIEBACiAJaWYgKCFlcnIpIHsKIAkJc3RydWN0IGZyYWdfaGRyIGZoZHI7CiAKLQkJLyogc3BlY2lmeSB0aGUgbGVuZ3RoIG9mIGVhY2ggSVAgZGF0YWdyYW0gZnJhZ21lbnQqLwotCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gbXR1IC0gZnJhZ2hlYWRlcmxlbiAtCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKTsKKwkJLyogU3BlY2lmeSB0aGUgbGVuZ3RoIG9mIGVhY2ggSVB2NiBkYXRhZ3JhbSBmcmFnbWVudC4KKwkJICogSXQgaGFzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOC4KKwkJICovCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSAobXR1IC0gZnJhZ2hlYWRlcmxlbiAtCisJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcikpICYgfjc7CiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBTS0JfR1NPX1VEUDsKLQkJaXB2Nl9zZWxlY3RfaWRlbnQoc2tiLCAmZmhkcik7CisJCWlwdjZfc2VsZWN0X2lkZW50KCZmaGRyKTsKIAkJc2tiX3NoaW5mbyhza2IpLT5pcDZfZnJhZ19pZCA9IGZoZHIuaWRlbnRpZmljYXRpb247CiAJCV9fc2tiX3F1ZXVlX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKTsKIApAQCAtMTUyNiw3ICsxNTExLDcgQEAKIAllcnIgPSBpcDZfbG9jYWxfb3V0KHNrYik7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID4gMCkKLQkJCWVyciA9IG5wLT5yZWN2ZXJyID8gbmV0X3htaXRfZXJybm8oZXJyKSA6IDA7CisJCQllcnIgPSBuZXRfeG1pdF9lcnJubyhlcnIpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJvcjsKIAl9CkBAIC0xNTM1LDYgKzE1MjAsNyBAQAogCWlwNl9jb3JrX3JlbGVhc2UoaW5ldCwgbnApOwogCXJldHVybiBlcnI7CiBlcnJvcjoKKwlJUDZfSU5DX1NUQVRTKG5ldCwgcnQtPnJ0NmlfaWRldiwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCWdvdG8gb3V0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggNTFmNDEwZS4uN2QyNWJiZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTAzNiw3ICsxMDM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAorc3RhdGljIG5ldGRldl90eF90CiBpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMDYzLDE0ICsxMDYzLDE0IEBACiAJCWdvdG8gdHhfZXJyOwogCiAJdC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZXJyOgogCXN0YXRzLT50eF9lcnJvcnMrKzsKIAlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCWtmcmVlX3NrYihza2IpOwogCXQtPnJlY3Vyc2lvbi0tOwotCXJldHVybiAwOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyB2b2lkIGlwNl90bmxfc2V0X2NhcChzdHJ1Y3QgaXA2X3RubCAqdCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IGM3NjlmMTUuLjVjOGQ3MzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKKysrIGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXA2bXJfdmlmX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwNm1yX3ZpZl9zZXFfb3BzID0gewogCS5zdGFydCA9IGlwNm1yX3ZpZl9zZXFfc3RhcnQsCiAJLm5leHQgID0gaXA2bXJfdmlmX3NlcV9uZXh0LAogCS5zdG9wICA9IGlwNm1yX3ZpZl9zZXFfc3RvcCwKQEAgLTIxNyw3ICsyMTcsNyBAQAogCQkJICAgIHNpemVvZihzdHJ1Y3QgaXBtcl92aWZfaXRlcikpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcDZtcl92aWZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwNm1yX3ZpZl9mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IGlwNm1yX3ZpZl9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJCSAgICBzaXplb2Yoc3RydWN0IGlwbXJfbWZjX2l0ZXIpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXA2bXJfbWZjX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcDZtcl9tZmNfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgPSBpcG1yX21mY19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCkBAIC00MTYsNyArNDE2LDggQEAKIAogLyogU2VydmljZSByb3V0aW5lcyBjcmVhdGluZyB2aXJ0dWFsIGludGVyZmFjZXM6IFBJTVJFRyAqLwogCi1zdGF0aWMgaW50IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCkBAIC00MjcsNyArNDI4LDcgQEAKIAkJCSAgIE1SVDZNU0dfV0hPTEVQS1QpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyByZWdfdmlmX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggYTdmZGY5YS4uZjVlMDY4MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMzE1LDYgKzMxNSw5IEBACiAJCQlnb3RvIGVfaW52YWw7CiAJCWlmICh2YWwgPCAtMSB8fCB2YWwgPiAweGZmKQogCQkJZ290byBlX2ludmFsOworCQkvKiBSRkMgMzU0MiwgNi41OiBkZWZhdWx0IHRyYWZmaWMgY2xhc3Mgb2YgMHgwICovCisJCWlmICh2YWwgPT0gLTEpCisJCQl2YWwgPSAwOwogCQlucC0+dGNsYXNzID0gdmFsOwogCQlyZXR2ID0gMDsKIAkJYnJlYWs7CkBAIC0xMDM3LDggKzEwNDAsNiBAQAogCiAJY2FzZSBJUFY2X1RDTEFTUzoKIAkJdmFsID0gbnAtPnRjbGFzczsKLQkJaWYgKHZhbCA8IDApCi0JCQl2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgSVBWNl9SRUNWVENMQVNTOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggNGIyNjRlZC4uNzFjM2RhYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC0yMTA3LDcgKzIxMDcsNiBAQAogCQlmb3IgKGo9MDsgajxpOyBqKyspCiAJCQkodm9pZCkgaXA2X21jX2RlbDFfc3JjKHBtYywgc2Ztb2RlLCAmcHNmc3JjW2ldKTsKIAl9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLT5tY2Ffc2Zjb3VudFtNQ0FTVF9FWENMVURFXSAhPSAwKSkgewotCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gcG1jLT5pZGV2OwogCQlzdHJ1Y3QgaXA2X3NmX2xpc3QgKnBzZjsKIAogCQkvKiBmaWx0ZXIgbW9kZSBjaGFuZ2UgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IDllYjY4ZTkuLjcwMTU0NzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtOTgsNyArOTgsNyBAQAogc3RhdGljIHZvaWQgcG5kaXNjX2Rlc3RydWN0b3Ioc3RydWN0IHBuZWlnaF9lbnRyeSAqbik7CiBzdGF0aWMgdm9pZCBwbmRpc2NfcmVkbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgbmRpc2NfZ2VuZXJpY19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5laWdoX29wcyBuZGlzY19nZW5lcmljX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAogCS5zb2xpY2l0ID0JCW5kaXNjX3NvbGljaXQsCiAJLmVycm9yX3JlcG9ydCA9CQluZGlzY19lcnJvcl9yZXBvcnQsCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkucXVldWVfeG1pdCA9CQlkZXZfcXVldWVfeG1pdCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfb3BzIG5kaXNjX2hoX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmVpZ2hfb3BzIG5kaXNjX2hoX29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAogCS5zb2xpY2l0ID0JCW5kaXNjX3NvbGljaXQsCiAJLmVycm9yX3JlcG9ydCA9CQluZGlzY19lcnJvcl9yZXBvcnQsCkBAIC0xMTksNyArMTE5LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBuZWlnaF9vcHMgbmRpc2NfZGlyZWN0X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmVpZ2hfb3BzIG5kaXNjX2RpcmVjdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVUNiwKIAkub3V0cHV0ID0JCWRldl9xdWV1ZV94bWl0LAogCS5jb25uZWN0ZWRfb3V0cHV0ID0JZGV2X3F1ZXVlX3htaXQsCkBAIC05NTUsOCArOTU1LDggQEAKIAkJICovCiAJCWlmIChza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9MT09QQkFDSykKIAkJCU5EX1BSSU5USzEoS0VSTl9XQVJOSU5HCi0JCQkgICAiSUNNUHY2IE5BOiBzb21lb25lIGFkdmVydGlzZXMgb3VyIGFkZHJlc3Mgb24gJXMhXG4iLAotCQkJICAgaWZwLT5pZGV2LT5kZXYtPm5hbWUpOworCQkJICAgIklDTVB2NiBOQTogc29tZW9uZSBhZHZlcnRpc2VzIG91ciBhZGRyZXNzICVwSTYgb24gJXMhXG4iLAorCQkJICAgJmlmcC0+YWRkciwgaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCQlpbjZfaWZhX3B1dChpZnApOwogCQlyZXR1cm47CiAJfQpAQCAtMTE1MSwxMCArMTE1MSw2IEBACiAJCQkgICBza2ItPmRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGluNl9kZXYtPmNuZi5mb3J3YXJkaW5nIHx8ICFpbjZfZGV2LT5jbmYuYWNjZXB0X3JhKSB7Ci0JCWluNl9kZXZfcHV0KGluNl9kZXYpOwotCQlyZXR1cm47Ci0JfQogCiAJaWYgKCFuZGlzY19wYXJzZV9vcHRpb25zKG9wdCwgb3B0bGVuLCAmbmRvcHRzKSkgewogCQlpbjZfZGV2X3B1dChpbjZfZGV2KTsKQEAgLTExNjMsNiArMTE1OSwxMCBAQAogCQlyZXR1cm47CiAJfQogCisJLyogc2tpcCByb3V0ZSBhbmQgbGluayBjb25maWd1cmF0aW9uIG9uIHJvdXRlcnMgKi8KKwlpZiAoaW42X2Rldi0+Y25mLmZvcndhcmRpbmcgfHwgIWluNl9kZXYtPmNuZi5hY2NlcHRfcmEpCisJCWdvdG8gc2tpcF9saW5rcGFybXM7CisKICNpZmRlZiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRQogCS8qIHNraXAgbGluay1zcGVjaWZpYyBwYXJhbWV0ZXJzIGZyb20gaW50ZXJpb3Igcm91dGVycyAqLwogCWlmIChza2ItPm5kaXNjX25vZGV0eXBlID09IE5ESVNDX05PREVUWVBFX05PREVGQVVMVCkKQEAgLTEyODMsOSArMTI4Myw3IEBACiAJCX0KIAl9CiAKLSNpZmRlZiBDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRQogc2tpcF9saW5rcGFybXM6Ci0jZW5kaWYKIAogCS8qCiAJICoJUHJvY2VzcyBvcHRpb25zLgpAQCAtMTMxMiw2ICsxMzEwLDEwIEBACiAJCQkgICAgIE5FSUdIX1VQREFURV9GX0lTUk9VVEVSKTsKIAl9CiAKKwkvKiBza2lwIHJvdXRlIGFuZCBsaW5rIGNvbmZpZ3VyYXRpb24gb24gcm91dGVycyAqLworCWlmIChpbjZfZGV2LT5jbmYuZm9yd2FyZGluZyB8fCAhaW42X2Rldi0+Y25mLmFjY2VwdF9yYSkKKwkJZ290byBvdXQ7CisKICNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPCiAJaWYgKGluNl9kZXYtPmNuZi5hY2NlcHRfcmFfcnRyX3ByZWYgJiYgbmRvcHRzLm5kX29wdHNfcmkpIHsKIAkJc3RydWN0IG5kX29wdF9oZHIgKnA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwppbmRleCBjZWQxZjJjLi5jYzlmOGVmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKQEAgLTgsNyArOCw3IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KLQorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtMjIyLDE2ICsyMjIsMTEgQEAKIAogLyogQWxsIHplcm9lcyA9PSB1bmNvbmRpdGlvbmFsIHJ1bGUuICovCiAvKiBNaWxkbHkgcGVyZiBjcml0aWNhbCAob25seSBpZiBwYWNrZXQgdHJhY2luZyBpcyBvbikgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci11bmNvbmRpdGlvbmFsKGNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXB2NikKK3N0YXRpYyBpbmxpbmUgYm9vbCB1bmNvbmRpdGlvbmFsKGNvbnN0IHN0cnVjdCBpcDZ0X2lwNiAqaXB2NikKIHsKLQl1bnNpZ25lZCBpbnQgaTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGlwNnRfaXA2IHVuY29uZDsKIAotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmlwdjYpOyBpKyspCi0JCWlmICgoKGNoYXIgKilpcHY2KVtpXSkKLQkJCWJyZWFrOwotCi0JcmV0dXJuIChpID09IHNpemVvZigqaXB2NikpOworCXJldHVybiBtZW1jbXAoaXB2NiwgJnVuY29uZCwgc2l6ZW9mKHVuY29uZCkpID09IDA7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFKSB8fCBcCkBAIC03NDUsNiArNzQwLDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KHN0cnVjdCBpcDZ0X2VudHJ5ICplKQoreworCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKKwl1bnNpZ25lZCBpbnQgdmVyZGljdDsKKworCWlmICghdW5jb25kaXRpb25hbCgmZS0+aXB2NikpCisJCXJldHVybiBmYWxzZTsKKwl0ID0gaXA2dF9nZXRfdGFyZ2V0KGUpOworCWlmIChzdHJjbXAodC0+dS51c2VyLm5hbWUsIFhUX1NUQU5EQVJEX1RBUkdFVCkgIT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCXZlcmRpY3QgPSAoKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCAqKXQpLT52ZXJkaWN0OworCXZlcmRpY3QgPSAtdmVyZGljdCAtIDE7CisJcmV0dXJuIHZlcmRpY3QgPT0gTkZfRFJPUCB8fCB2ZXJkaWN0ID09IE5GX0FDQ0VQVDsKK30KKwogc3RhdGljIGludAogY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGlwNnRfZW50cnkgKmUsCiAJCQkgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKQEAgLTc1Miw2ICs3NjIsNyBAQAogCQkJICAgdW5zaWduZWQgY2hhciAqbGltaXQsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKKwkJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJCSAgIHVuc2lnbmVkIGludCAqaSkKIHsKIAl1bnNpZ25lZCBpbnQgaDsKQEAgLTc3MSwxNSArNzgyLDIxIEBACiAKIAkvKiBDaGVjayBob29rcyAmIHVuZGVyZmxvd3MgKi8KIAlmb3IgKGggPSAwOyBoIDwgTkZfSU5FVF9OVU1IT09LUzsgaCsrKSB7CisJCWlmICghKHZhbGlkX2hvb2tzICYgKDEgPDwgaCkpKQorCQkJY29udGludWU7CiAJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IGhvb2tfZW50cmllc1toXSkKIAkJCW5ld2luZm8tPmhvb2tfZW50cnlbaF0gPSBob29rX2VudHJpZXNbaF07Ci0JCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pCisJCWlmICgodW5zaWduZWQgY2hhciAqKWUgLSBiYXNlID09IHVuZGVyZmxvd3NbaF0pIHsKKwkJCWlmICghY2hlY2tfdW5kZXJmbG93KGUpKSB7CisJCQkJcHJfZXJyKCJVbmRlcmZsb3dzIG11c3QgYmUgdW5jb25kaXRpb25hbCBhbmQgIgorCQkJCSAgICAgICAidXNlIHRoZSBTVEFOREFSRCB0YXJnZXQgd2l0aCAiCisJCQkJICAgICAgICJBQ0NFUFQvRFJPUFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CiAJCQluZXdpbmZvLT51bmRlcmZsb3dbaF0gPSB1bmRlcmZsb3dzW2hdOworCQl9CiAJfQogCi0JLyogRklYTUU6IHVuZGVyZmxvd3MgbXVzdCBiZSB1bmNvbmRpdGlvbmFsLCBzdGFuZGFyZCB2ZXJkaWN0cwotCSAgIDwgMCAobm90IElQNlRfUkVUVVJOKS4gLS1SUiAqLwotCiAJLyogQ2xlYXIgY291bnRlcnMgYW5kIGNvbWVmcm9tICovCiAJZS0+Y291bnRlcnMgPSAoKHN0cnVjdCB4dF9jb3VudGVycykgeyAwLCAwIH0pOwogCWUtPmNvbWVmcm9tID0gMDsKQEAgLTg0Miw3ICs4NTksNyBAQAogCQkJCW5ld2luZm8sCiAJCQkJZW50cnkwLAogCQkJCWVudHJ5MCArIHNpemUsCi0JCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCAmaSk7CisJCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCB2YWxpZF9ob29rcywgJmkpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMjA4Myw3ICsyMTAwLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3QgeHRfdGFibGUgKmlwNnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorc3RydWN0IHh0X3RhYmxlICppcDZ0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsKQogewogCWludCByZXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ldWk2NC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfZXVpNjQuYwppbmRleCBkYjYxMGJhLi5jYTI4N2Y2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ldWk2NC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2V1aTY0LmMKQEAgLTIzLDcgKzIzLDYgQEAKIGV1aTY0X210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKIAl1bnNpZ25lZCBjaGFyIGV1aTY0WzhdOwotCWludCBpID0gMDsKIAogCWlmICghKHNrYl9tYWNfaGVhZGVyKHNrYikgPj0gc2tiLT5oZWFkICYmCiAJICAgICAgc2tiX21hY19oZWFkZXIoc2tiKSArIEVUSF9ITEVOIDw9IHNrYi0+ZGF0YSkgJiYKQEAgLTQyLDEyICs0MSw4IEBACiAJCQlldWk2NFs0XSA9IDB4ZmU7CiAJCQlldWk2NFswXSBePSAweDAyOwogCi0JCQlpID0gMDsKLQkJCXdoaWxlIChpcHY2X2hkcihza2IpLT5zYWRkci5zNl9hZGRyWzggKyBpXSA9PSBldWk2NFtpXQotCQkJICAgICAgICYmIGkgPCA4KQotCQkJCWkrKzsKLQotCQkJaWYgKGkgPT0gOCkKKwkJCWlmICghbWVtY21wKGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHIgKyA4LCBldWk2NCwKKwkJCQkgICAgc2l6ZW9mKGV1aTY0KSkpCiAJCQkJcmV0dXJuIHRydWU7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKaW5kZXggZWY1YTBhMy4uNmY0MzgzYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwpAQCAtNTEsMTEgKzUxLDExIEBACiAJLnRlcm0gPSBJUDZUX0VSUk9SX0lOSVQsCQkvKiBFUlJPUiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCi0JLmFmCQk9IEFGX0lORVQ2LAorCS5hZgkJPSBORlBST1RPX0lQVjYsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC05NSwyMSArOTUsMjEgQEAKIAl7CiAJCS5ob29rCQk9IGlwNnRfaW5faG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9GSUxURVIsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwNnRfaW5faG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0ZJTFRFUiwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXA2dF9sb2NhbF9vdXRfaG9vaywKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfRklMVEVSLAogCX0sCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKaW5kZXggYWIwZDM5OC4uMGFkOTE0MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwpAQCAtMjEsNyArMjEsNyBAQAogCQkJICAgICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSB8IFwKIAkJCSAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORykpCiAKLXN0YXRpYyBzdHJ1Y3QKK3N0YXRpYyBjb25zdCBzdHJ1Y3QKIHsKIAlzdHJ1Y3QgaXA2dF9yZXBsYWNlIHJlcGw7CiAJc3RydWN0IGlwNnRfc3RhbmRhcmQgZW50cmllc1s1XTsKQEAgLTU3LDExICs1NywxMSBAQAogCS50ZXJtID0gSVA2VF9FUlJPUl9JTklULAkJLyogRVJST1IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X21hbmdsZXIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCi0JLmFmCQk9IEFGX0lORVQ2LAorCS5hZgkJPSBORlBST1RPX0lQVjYsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCkBAIC0xMzYsMzUgKzEzNiwzNSBAQAogCXsKIAkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX01BTkdMRSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX01BTkdMRSwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAogCX0sCiAJewogCQkuaG9vawkJPSBpcDZ0X2xvY2FsX291dF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9NQU5HTEUsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwNnRfcG9zdF9yb3V0aW5nX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfUE9TVF9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX01BTkdMRSwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCmluZGV4IDRiNzkyYjYuLmVkMWExMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKQEAgLTgsNyArOCw3IEBACiAKICNkZWZpbmUgUkFXX1ZBTElEX0hPT0tTICgoMSA8PCBORl9JTkVUX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSkKIAotc3RhdGljIHN0cnVjdAorc3RhdGljIGNvbnN0IHN0cnVjdAogewogCXN0cnVjdCBpcDZ0X3JlcGxhY2UgcmVwbDsKIAlzdHJ1Y3QgaXA2dF9zdGFuZGFyZCBlbnRyaWVzWzJdOwpAQCAtMzUsMTEgKzM1LDExIEBACiAJLnRlcm0gPSBJUDZUX0VSUk9SX0lOSVQsCQkvKiBFUlJPUiAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfcmF3ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfcmF3ID0gewogCS5uYW1lID0gInJhdyIsCiAJLnZhbGlkX2hvb2tzID0gUkFXX1ZBTElEX0hPT0tTLAogCS5tZSA9IFRISVNfTU9EVUxFLAotCS5hZiA9IEFGX0lORVQ2LAorCS5hZiA9IE5GUFJPVE9fSVBWNiwKIH07CiAKIC8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KQEAgLTY4LDE0ICs2OCwxNCBAQAogc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcDZ0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCSAgLmhvb2sgPSBpcDZ0X3ByZV9yb3V0aW5nX2hvb2ssCi0JICAucGYgPSBQRl9JTkVUNiwKKwkgIC5wZiA9IE5GUFJPVE9fSVBWNiwKIAkgIC5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKIAkgIC5wcmlvcml0eSA9IE5GX0lQNl9QUklfRklSU1QsCiAJICAub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCXsKIAkgIC5ob29rID0gaXA2dF9sb2NhbF9vdXRfaG9vaywKLQkgIC5wZiA9IFBGX0lORVQ2LAorCSAgLnBmID0gTkZQUk9UT19JUFY2LAogCSAgLmhvb2tudW0gPSBORl9JTkVUX0xPQ0FMX09VVCwKIAkgIC5wcmlvcml0eSA9IE5GX0lQNl9QUklfRklSU1QsCiAJICAub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3NlY3VyaXR5LmMKaW5kZXggMGVhMzdmZi4uNDFiNDQ0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3NlY3VyaXR5LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3NlY3VyaXR5LmMKQEAgLTI2LDcgKzI2LDcgQEAKIAkJCQkoMSA8PCBORl9JTkVUX0ZPUldBUkQpIHwgXAogCQkJCSgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKQogCi1zdGF0aWMgc3RydWN0CitzdGF0aWMgY29uc3Qgc3RydWN0CiB7CiAJc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwogCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbM107CkBAIC01NiwxMSArNTYsMTEgQEAKIAkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHkiLAogCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAogCS5tZQkJPSBUSElTX01PRFVMRSwKLQkuYWYJCT0gQUZfSU5FVDYsCisJLmFmCQk9IE5GUFJPVE9fSVBWNiwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKQEAgLTEwMSwyMSArMTAxLDIxIEBACiAJewogCQkuaG9vawkJPSBpcDZ0X2xvY2FsX2luX2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfU0VDVVJJVFksCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwNnRfZm9yd2FyZF9ob29rLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfU0VDVVJJVFksCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwNnRfbG9jYWxfb3V0X2hvb2ssCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX1NFQ1VSSVRZLAogCX0sCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwppbmRleCAyYTE1YzJkLi41ZjJlYzIwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbG9nLmg+CiAKIHN0YXRpYyBib29sIGlwdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQpAQCAtMTc2LDggKzE3NywxMSBAQAogCX0KIAogCXJldCA9IGhlbHBlci0+aGVscChza2IsIHByb3RvZmYsIGN0LCBjdGluZm8pOwotCWlmIChyZXQgIT0gTkZfQUNDRVBUKQorCWlmIChyZXQgIT0gTkZfQUNDRVBUKSB7CisJCW5mX2xvZ19wYWNrZXQoTkZQUk9UT19JUFY2LCBob29rbnVtLCBza2IsIGluLCBvdXQsIE5VTEwsCisJCQkgICAgICAibmZfY3RfJXM6IGRyb3BwaW5nIHBhY2tldCIsIGhlbHBlci0+bmFtZSk7CiAJCXJldHVybiByZXQ7CisJfQogb3V0OgogCS8qIFdlJ3ZlIHNlZW4gaXQgY29taW5nIG91dCB0aGUgb3RoZXIgc2lkZTogY29uZmlybSBpdCAqLwogCXJldHVybiBuZl9jb25udHJhY2tfY29uZmlybShza2IpOwpAQCAtMjY1LDQyICsyNjksNDIgQEAKIAl7CiAJCS5ob29rCQk9IGlwdjZfZGVmcmFnLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDS19ERUZSQUcsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwdjZfY29ubnRyYWNrX2luLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX1BSRV9ST1VUSU5HLAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB2Nl9jb25udHJhY2tfbG9jYWwsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDSywKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB2Nl9kZWZyYWcsCiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IFBGX0lORVQ2LAorCQkucGYJCT0gTkZQUk9UT19JUFY2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0NPTk5UUkFDS19ERUZSQUcsCiAJfSwKIAl7CiAJCS5ob29rCQk9IGlwdjZfY29uZmlybSwKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gUEZfSU5FVDYsCisJCS5wZgkJPSBORlBST1RPX0lQVjYsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCiAJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTEFTVCwKIAl9LAogCXsKIAkJLmhvb2sJCT0gaXB2Nl9jb25maXJtLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBQRl9JTkVUNiwKKwkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAogCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0xBU1QtMSwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcHJvYy5jIGIvbmV0L2lwdjYvcHJvYy5jCmluZGV4IDU5MGRkZWYuLmM5NjA1YzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Byb2MuYworKysgYi9uZXQvaXB2Ni9wcm9jLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogfTsKIAogLyogUkZDIDQyOTMgdjYgSUNNUE1zZ1N0YXRzVGFibGU7IG5hbWVkIGl0ZW1zIGZvciBSRkMgMjQ2NiBjb21wYXRpYmlsaXR5ICovCi1zdGF0aWMgY2hhciAqaWNtcDZ0eXBlMm5hbWVbMjU2XSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpY21wNnR5cGUybmFtZVsyNTZdID0gewogCVtJQ01QVjZfREVTVF9VTlJFQUNIXSA9ICJEZXN0VW5yZWFjaHMiLAogCVtJQ01QVjZfUEtUX1RPT0JJR10gPSAiUGt0VG9vQmlncyIsCiAJW0lDTVBWNl9USU1FX0VYQ0VFRF0gPSAiVGltZUV4Y2RzIiwKQEAgLTE0NCw3ICsxNDQsNyBAQAogCS8qIHByaW50IGJ5IG5hbWUgLS0gZGVwcmVjYXRlZCBpdGVtcyAqLwogCWZvciAoaSA9IDA7IGkgPCBJQ01QNk1TR19NSUJfTUFYOyBpKyspIHsKIAkJaW50IGljbXB0eXBlOwotCQljaGFyICpwOworCQljb25zdCBjaGFyICpwOwogCiAJCWljbXB0eXBlID0gaSAmIDB4ZmY7CiAJCXAgPSBpY21wNnR5cGUybmFtZVtpY21wdHlwZV07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm90b2NvbC5jIGIvbmV0L2lwdjYvcHJvdG9jb2wuYwppbmRleCA5YWI3ODkxLi41Njg4NjRmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9wcm90b2NvbC5jCisrKyBiL25ldC9pcHY2L3Byb3RvY29sLmMKQEAgLTIwLDIwICsyMCw5IEBACiAgKiAgICAgIC0gUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUgJ2luZXQ2X3Byb3RvY29sX2Jhc2UnCiAgKiAgICAgIC0gTW9kaWZpZWQgaW5ldDZfZGVsX3Byb3RvY29sKCkgdG8gY29ycmVjdGx5IG1haW50YWluIGNvcHkgYml0LgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotCi0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLSNpbmNsdWRlIDxuZXQvc25tcC5oPgotCi0jaW5jbHVkZSA8bmV0L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogCiBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmluZXQ2X3Byb3Rvc1tNQVhfSU5FVF9QUk9UT1NdOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCBkNmMzYzFjLi43ZDY3NWI4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiAJZXJyID0gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSU5FVF9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgcnQtPnUuZHN0LmRldiwKIAkJICAgICAgZHN0X291dHB1dCk7CiAJaWYgKGVyciA+IDApCi0JCWVyciA9IG5wLT5yZWN2ZXJyID8gbmV0X3htaXRfZXJybm8oZXJyKSA6IDA7CisJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIG91dDoKQEAgLTY1Myw2ICs2NTMsOCBAQAogCWtmcmVlX3NrYihza2IpOwogZXJyb3I6CiAJSVA2X0lOQ19TVEFUUyhzb2NrX25ldChzayksIHJ0LT5ydDZpX2lkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwlpZiAoZXJyID09IC1FTk9CVUZTICYmICFucC0+cmVjdmVycikKKwkJZXJyID0gMDsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04NzcsMTEgKzg3OSw4IEBACiAJCQlobGltaXQgPSBpcDZfZHN0X2hvcGxpbWl0KGRzdCk7CiAJfQogCi0JaWYgKHRjbGFzcyA8IDApIHsKKwlpZiAodGNsYXNzIDwgMCkKIAkJdGNsYXNzID0gbnAtPnRjbGFzczsKLQkJaWYgKHRjbGFzcyA8IDApCi0JCQl0Y2xhc3MgPSAwOwotCX0KIAogCWlmIChtc2ctPm1zZ19mbGFncyZNU0dfQ09ORklSTSkKIAkJZ290byBkb19jb25maXJtOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMTQ3M2VlMC4uOWNjZmVmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC02NjUsNyArNjY1LDcgQEAKIAkJCQluZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19lbGFzdGljaXR5ID0gMTsKIAkJCQluZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19taW5faW50ZXJ2YWwgPSAwOwogCi0JCQkJaXA2X2RzdF9nYyhuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCQkJCWlwNl9kc3RfZ2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CiAKIAkJCQluZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9nY19lbGFzdGljaXR5ID0KIAkJCQkJc2F2ZWRfcnRfZWxhc3RpY2l0eTsKQEAgLTk3MCw3ICs5NzAsNyBAQAogCWlmICh1bmxpa2VseShpZGV2ID09IE5VTEwpKQogCQlyZXR1cm4gTlVMTDsKIAotCXJ0ID0gaXA2X2RzdF9hbGxvYyhuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCXJ0ID0gaXA2X2RzdF9hbGxvYygmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKIAlpZiAodW5saWtlbHkocnQgPT0gTlVMTCkpIHsKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJCWdvdG8gb3V0OwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAKIHN0YXRpYyBpbnQgaXA2X2RzdF9nYyhzdHJ1Y3QgZHN0X29wcyAqb3BzKQogewogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBvcHMtPmRzdF9uZXQ7CisJc3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKG9wcywgc3RydWN0IG5ldCwgaXB2Ni5pcDZfZHN0X29wcyk7CiAJaW50IHJ0X21pbl9pbnRlcnZhbCA9IG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX21pbl9pbnRlcnZhbDsKIAlpbnQgcnRfbWF4X3NpemUgPSBuZXQtPmlwdjYuc3lzY3RsLmlwNl9ydF9tYXhfc2l6ZTsKIAlpbnQgcnRfZWxhc3RpY2l0eSA9IG5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX2VsYXN0aWNpdHk7CkBAIC0xMTU0LDcgKzExNTQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydCA9IGlwNl9kc3RfYWxsb2MobmV0LT5pcHY2LmlwNl9kc3Rfb3BzKTsKKwlydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CiAKIAlpZiAocnQgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PTUVNOwpAQCAtMTY0Myw3ICsxNjQzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKiBpcDZfcnRfY29weShzdHJ1Y3QgcnQ2X2luZm8gKm9ydCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KG9ydC0+cnQ2aV9kZXYpOwotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKG5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IGlwNl9kc3RfYWxsb2MoJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CiAKIAlpZiAocnQpIHsKIAkJcnQtPnUuZHN0LmlucHV0ID0gb3J0LT51LmRzdC5pbnB1dDsKQEAgLTE5MjMsNyArMTkyMyw3IEBACiAJCQkJICAgIGludCBhbnljYXN0KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKLQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gaXA2X2RzdF9hbGxvYyhuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSBpcDZfZHN0X2FsbG9jKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCiAJaWYgKHJ0ID09IE5VTEwpCkBAIC0yNTAxLDcgKzI1MDEsNyBAQAogCQkgICBuZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfcnRfYWxsb2MsCiAJCSAgIG5ldC0+aXB2Ni5ydDZfc3RhdHMtPmZpYl9ydF9lbnRyaWVzLAogCQkgICBuZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfcnRfY2FjaGUsCi0JCSAgIGF0b21pY19yZWFkKCZuZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmVudHJpZXMpLAorCQkgICBhdG9taWNfcmVhZCgmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLmVudHJpZXMpLAogCQkgICBuZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfZGlzY2FyZGVkX3JvdXRlcyk7CiAKIAlyZXR1cm4gMDsKQEAgLTI2MzcsNyArMjYzNyw3IEBACiAKIAlpZiAodGFibGUpIHsKIAkJdGFibGVbMF0uZGF0YSA9ICZuZXQtPmlwdjYuc3lzY3RsLmZsdXNoX2RlbGF5OwotCQl0YWJsZVsxXS5kYXRhID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wcy0+Z2NfdGhyZXNoOworCQl0YWJsZVsxXS5kYXRhID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wcy5nY190aHJlc2g7CiAJCXRhYmxlWzJdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemU7CiAJCXRhYmxlWzNdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfbWluX2ludGVydmFsOwogCQl0YWJsZVs0XS5kYXRhID0gJm5ldC0+aXB2Ni5zeXNjdGwuaXA2X3J0X2djX3RpbWVvdXQ7CkBAIC0yNjU1LDEyICsyNjU1LDggQEAKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCW5ldC0+aXB2Ni5pcDZfZHN0X29wcyA9IGttZW1kdXAoJmlwNl9kc3Rfb3BzX3RlbXBsYXRlLAotCQkJCQlzaXplb2YoKm5ldC0+aXB2Ni5pcDZfZHN0X29wcyksCi0JCQkJCUdGUF9LRVJORUwpOwotCWlmICghbmV0LT5pcHY2LmlwNl9kc3Rfb3BzKQotCQlnb3RvIG91dDsKLQluZXQtPmlwdjYuaXA2X2RzdF9vcHMtPmRzdF9uZXQgPSBob2xkX25ldChuZXQpOworCW1lbWNweSgmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzLCAmaXA2X2RzdF9vcHNfdGVtcGxhdGUsCisJICAgICAgIHNpemVvZihuZXQtPmlwdjYuaXA2X2RzdF9vcHMpKTsKIAogCW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSA9IGttZW1kdXAoJmlwNl9udWxsX2VudHJ5X3RlbXBsYXRlLAogCQkJCQkgICBzaXplb2YoKm5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSksCkBAIC0yNjY5LDcgKzI2NjUsNyBAQAogCQlnb3RvIG91dF9pcDZfZHN0X29wczsKIAluZXQtPmlwdjYuaXA2X251bGxfZW50cnktPnUuZHN0LnBhdGggPQogCQkoc3RydWN0IGRzdF9lbnRyeSAqKW5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKLQluZXQtPmlwdjYuaXA2X251bGxfZW50cnktPnUuZHN0Lm9wcyA9IG5ldC0+aXB2Ni5pcDZfZHN0X29wczsKKwluZXQtPmlwdjYuaXA2X251bGxfZW50cnktPnUuZHN0Lm9wcyA9ICZuZXQtPmlwdjYuaXA2X2RzdF9vcHM7CiAKICNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKIAluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5ID0ga21lbWR1cCgmaXA2X3Byb2hpYml0X2VudHJ5X3RlbXBsYXRlLApAQCAtMjY3OSw3ICsyNjc1LDcgQEAKIAkJZ290byBvdXRfaXA2X251bGxfZW50cnk7CiAJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+dS5kc3QucGF0aCA9CiAJCShzdHJ1Y3QgZHN0X2VudHJ5ICopbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeTsKLQluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT51LmRzdC5vcHMgPSBuZXQtPmlwdjYuaXA2X2RzdF9vcHM7CisJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+dS5kc3Qub3BzID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wczsKIAogCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkgPSBrbWVtZHVwKCZpcDZfYmxrX2hvbGVfZW50cnlfdGVtcGxhdGUsCiAJCQkJCSAgICAgICBzaXplb2YoKm5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkpLApAQCAtMjY4OCw3ICsyNjg0LDcgQEAKIAkJZ290byBvdXRfaXA2X3Byb2hpYml0X2VudHJ5OwogCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPnUuZHN0LnBhdGggPQogCQkoc3RydWN0IGRzdF9lbnRyeSAqKW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnk7Ci0JbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+dS5kc3Qub3BzID0gbmV0LT5pcHY2LmlwNl9kc3Rfb3BzOworCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPnUuZHN0Lm9wcyA9ICZuZXQtPmlwdjYuaXA2X2RzdF9vcHM7CiAjZW5kaWYKIAogCW5ldC0+aXB2Ni5zeXNjdGwuZmx1c2hfZGVsYXkgPSAwOwpAQCAtMjcxNyw4ICsyNzEzLDYgQEAKIAlrZnJlZShuZXQtPmlwdjYuaXA2X251bGxfZW50cnkpOwogI2VuZGlmCiBvdXRfaXA2X2RzdF9vcHM6Ci0JcmVsZWFzZV9uZXQobmV0LT5pcHY2LmlwNl9kc3Rfb3BzLT5kc3RfbmV0KTsKLQlrZnJlZShuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOwogCWdvdG8gb3V0OwogfQogCkBAIC0yNzMzLDggKzI3MjcsNiBAQAogCWtmcmVlKG5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnkpOwogCWtmcmVlKG5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkpOwogI2VuZGlmCi0JcmVsZWFzZV9uZXQobmV0LT5pcHY2LmlwNl9kc3Rfb3BzLT5kc3RfbmV0KTsKLQlrZnJlZShuZXQtPmlwdjYuaXA2X2RzdF9vcHMpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwNl9yb3V0ZV9uZXRfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCA5OGI3MzI3ZC4uMGFlNGY2NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTYwOSw3ICs2MDksOCBAQAogICoJYW5kIHRoYXQgc2tiIGlzIGZpbGxlZCBwcm9wZXJseSBieSB0aGF0IGZ1bmN0aW9uLgogICovCiAKLXN0YXRpYyBpbnQgaXBpcDZfdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcGlwNl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPmRldi0+c3RhdHM7CkBAIC03NTMsNyArNzU0LDcgQEAKIAkJCXN0YXRzLT50eF9kcm9wcGVkKys7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQl0dW5uZWwtPnJlY3Vyc2lvbi0tOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CiAJCWlmIChza2ItPnNrKQogCQkJc2tiX3NldF9vd25lcl93KG5ld19za2IsIHNrYi0+c2spOwpAQCAtNzc4LDcgKzc3OSw3IEBACiAJaXBoLT52ZXJzaW9uCQk9CTQ7CiAJaXBoLT5paGwJCT0Jc2l6ZW9mKHN0cnVjdCBpcGhkcik+PjI7CiAJaWYgKG10dSA+IElQVjZfTUlOX01UVSkKLQkJaXBoLT5mcmFnX29mZgk9CWh0b25zKElQX0RGKTsKKwkJaXBoLT5mcmFnX29mZgk9CXRpcGgtPmZyYWdfb2ZmOwogCWVsc2UKIAkJaXBoLT5mcmFnX29mZgk9CTA7CiAKQEAgLTc5NCw3ICs3OTUsNyBAQAogCiAJSVBUVU5ORUxfWE1JVCgpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogdHhfZXJyb3JfaWNtcDoKIAlkc3RfbGlua19mYWlsdXJlKHNrYik7CkBAIC04MDIsNyArODAzLDcgQEAKIAlzdGF0cy0+dHhfZXJyb3JzKys7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXR1bm5lbC0+cmVjdXJzaW9uLS07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIHZvaWQgaXBpcDZfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCmluZGV4IGEwMzEwMzQuLjBkYzZhNGUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jCkBAIC00MCw3ICs0MCw3IEBACiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CiAKLXN0YXRpYyBjdGxfdGFibGUgaXB2Nl90YWJsZVtdID0geworc3RhdGljIGN0bF90YWJsZSBpcHY2X3JvdGFibGVbXSA9IHsKIAl7CiAJCS5jdGxfbmFtZQk9IE5FVF9JUFY2X01MRF9NQVhfTVNGLAogCQkucHJvY25hbWUJPSAibWxkX21heF9tc2YiLApAQCAtMTMwLDcgKzEzMCw3IEBACiB7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlpcDZfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9yb3RhYmxlKG5ldF9pcHY2X2N0bF9wYXRoLCBpcHY2X3RhYmxlKTsKKwlpcDZfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9yb3RhYmxlKG5ldF9pcHY2X2N0bF9wYXRoLCBpcHY2X3JvdGFibGUpOwogCWlmIChpcDZfaGVhZGVyID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCBkODQ5ZGQ1Li4zYWFlMGYyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTc1LDExICs3NSwxMSBAQAogCiBzdGF0aWMgaW50CXRjcF92Nl9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9tYXBwZWQ7Ci1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9tYXBwZWQ7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljOwogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi1zdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X3NwZWNpZmljOwotc3RhdGljIHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2Nl9tYXBwZWRfc3BlY2lmaWM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X3NwZWNpZmljOworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2Nl9tYXBwZWRfc3BlY2lmaWM7CiAjZWxzZQogc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqdGNwX3Y2X21kNV9kb19sb29rdXAoc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJICAgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTkxLDcgKzU5MSw3IEBACiAJCQl9CiAJCQlzay0+c2tfcm91dGVfY2FwcyAmPSB+TkVUSUZfRl9HU09fTUFTSzsKIAkJfQotCQlpZiAodGNwX2FsbG9jX21kNXNpZ19wb29sKCkgPT0gTlVMTCkgeworCQlpZiAodGNwX2FsbG9jX21kNXNpZ19wb29sKHNrKSA9PSBOVUxMKSB7CiAJCQlrZnJlZShuZXdrZXkpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTg5NCw3ICs4OTQsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi1zdGF0aWMgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzIHRjcF9yZXF1ZXN0X3NvY2tfaXB2Nl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzIHRjcF9yZXF1ZXN0X3NvY2tfaXB2Nl9vcHMgPSB7CiAJLm1kNV9sb29rdXAJPQl0Y3BfdjZfcmVxc2tfbWQ1X2xvb2t1cCwKIAkuY2FsY19tZDVfaGFzaAk9CXRjcF92Nl9tZDVfaGFzaF9za2IsCiB9OwpAQCAtMTAwMyw2ICsxMDAzLDcgQEAKIAlza2JfcmVzZXJ2ZShidWZmLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHRvdF9sZW4pOwogCiAJdDEgPSAoc3RydWN0IHRjcGhkciAqKSBza2JfcHVzaChidWZmLCB0b3RfbGVuKTsKKwlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCiAJLyogU3dhcCB0aGUgc2VuZCBhbmQgdGhlIHJlY2VpdmUuICovCiAJbWVtc2V0KHQxLCAwLCBzaXplb2YoKnQxKSk7CkBAIC0xNzYwLDcgKzE3NjEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9zcGVjaWZpYyA9IHsKIAkucXVldWVfeG1pdAkgICA9IGluZXQ2X2Nza194bWl0LAogCS5zZW5kX2NoZWNrCSAgID0gdGNwX3Y2X3NlbmRfY2hlY2ssCiAJLnJlYnVpbGRfaGVhZGVyCSAgID0gaW5ldDZfc2tfcmVidWlsZF9oZWFkZXIsCkBAIC0xNzgwLDcgKzE3ODEsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCi1zdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X3NwZWNpZmljID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2Nl9zcGVjaWZpYyA9IHsKIAkubWQ1X2xvb2t1cAk9CXRjcF92Nl9tZDVfbG9va3VwLAogCS5jYWxjX21kNV9oYXNoCT0JdGNwX3Y2X21kNV9oYXNoX3NrYiwKIAkubWQ1X2FkZAk9CXRjcF92Nl9tZDVfYWRkX2Z1bmMsCkBAIC0xNzkyLDcgKzE3OTMsNyBAQAogICoJVENQIG92ZXIgSVB2NCB2aWEgSU5FVDYgQVBJCiAgKi8KIAotc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9tYXBwZWQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X21hcHBlZCA9IHsKIAkucXVldWVfeG1pdAkgICA9IGlwX3F1ZXVlX3htaXQsCiAJLnNlbmRfY2hlY2sJICAgPSB0Y3BfdjRfc2VuZF9jaGVjaywKIAkucmVidWlsZF9oZWFkZXIJICAgPSBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyLApAQCAtMTgxMiw3ICsxODEzLDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwotc3RhdGljIHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2Nl9tYXBwZWRfc3BlY2lmaWMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X21hcHBlZF9zcGVjaWZpYyA9IHsKIAkubWQ1X2xvb2t1cAk9CXRjcF92NF9tZDVfbG9va3VwLAogCS5jYWxjX21kNV9oYXNoCT0JdGNwX3Y0X21kNV9oYXNoX3NrYiwKIAkubWQ1X2FkZAk9CXRjcF92Nl9tZDVfYWRkX2Z1bmMsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDMzYjU5YmQuLjE2NDA0MDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC02MzgsNiArNjM4LDQ3IEBACiAJfQogfQogCisvKioKKyAqIAl1ZHA2X2h3Y3N1bV9vdXRnb2luZyAgLSAgaGFuZGxlIG91dGdvaW5nIEhXIGNoZWNrc3VtbWluZworICogCUBzazogCXNvY2tldCB3ZSBhcmUgc2VuZGluZyBvbgorICogCUBza2I6IAlza19idWZmIGNvbnRhaW5pbmcgdGhlIGZpbGxlZC1pbiBVRFAgaGVhZGVyCisgKiAJICAgICAgICAoY2hlY2tzdW0gZmllbGQgbXVzdCBiZSB6ZXJvZWQgb3V0KQorICovCitzdGF0aWMgdm9pZCB1ZHA2X2h3Y3N1bV9vdXRnb2luZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGludCBsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwlzdHJ1Y3QgdWRwaGRyICp1aCA9IHVkcF9oZHIoc2tiKTsKKwlfX3dzdW0gY3N1bSA9IDA7CisKKwlpZiAoc2tiX3F1ZXVlX2xlbigmc2stPnNrX3dyaXRlX3F1ZXVlKSA9PSAxKSB7CisJCS8qIE9ubHkgb25lIGZyYWdtZW50IG9uIHRoZSBzb2NrZXQuICAqLworCQlza2ItPmNzdW1fc3RhcnQgPSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5oZWFkOworCQlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOworCQl1aC0+Y2hlY2sgPSB+Y3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX1VEUCwgMCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogSFctY2hlY2tzdW0gd29uJ3Qgd29yayBhcyB0aGVyZSBhcmUgdHdvIG9yIG1vcmUKKwkJICogZnJhZ21lbnRzIG9uIHRoZSBzb2NrZXQgc28gdGhhdCBhbGwgY3N1bXMgb2Ygc2tfYnVmZnMKKwkJICogc2hvdWxkIGJlIHRvZ2V0aGVyCisJCSAqLworCQlvZmZzZXQgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCQlza2ItPmNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKTsKKworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisKKwkJc2tiX3F1ZXVlX3dhbGsoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKSB7CisJCQljc3VtID0gY3N1bV9hZGQoY3N1bSwgc2tiLT5jc3VtKTsKKwkJfQorCisJCXVoLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIGxlbiwgSVBQUk9UT19VRFAsCisJCQkJCSAgICBjc3VtKTsKKwkJaWYgKHVoLT5jaGVjayA9PSAwKQorCQkJdWgtPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CisJfQorfQorCiAvKgogICoJU2VuZGluZwogICovCkBAIC02NjgsNyArNzA5LDExIEBACiAKIAlpZiAoaXNfdWRwbGl0ZSkKIAkJY3N1bSA9IHVkcGxpdGVfY3N1bV9vdXRnb2luZyhzaywgc2tiKTsKLQkgZWxzZQorCWVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsgLyogVURQIGhhcmR3YXJlIGNzdW0gKi8KKwkJdWRwNl9od2NzdW1fb3V0Z29pbmcoc2ssIHNrYiwgJmZsLT5mbDZfc3JjLCAmZmwtPmZsNl9kc3QsCisJCQkJICAgICB1cC0+bGVuKTsKKwkJZ290byBzZW5kOworCX0gZWxzZQogCQljc3VtID0gdWRwX2NzdW1fb3V0Z29pbmcoc2ssIHNrYik7CiAKIAkvKiBhZGQgcHJvdG9jb2wtZGVwZW5kZW50IHBzZXVkby1oZWFkZXIgKi8KQEAgLTY3NywxMyArNzIyLDIwIEBACiAJaWYgKHVoLT5jaGVjayA9PSAwKQogCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKIAorc2VuZDoKIAllcnIgPSBpcDZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CisJaWYgKGVycikgeworCQlpZiAoZXJyID09IC1FTk9CVUZTICYmICFpbmV0Nl9zayhzayktPnJlY3ZlcnIpIHsKKwkJCVVEUDZfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLAorCQkJCQkgICAgVURQX01JQl9TTkRCVUZFUlJPUlMsIGlzX3VkcGxpdGUpOworCQkJZXJyID0gMDsKKwkJfQorCX0gZWxzZQorCQlVRFA2X0lOQ19TVEFUU19VU0VSKHNvY2tfbmV0KHNrKSwKKwkJCQkgICAgVURQX01JQl9PVVREQVRBR1JBTVMsIGlzX3VkcGxpdGUpOwogb3V0OgogCXVwLT5sZW4gPSAwOwogCXVwLT5wZW5kaW5nID0gMDsKLQlpZiAoIWVycikKLQkJVURQNl9JTkNfU1RBVFNfVVNFUihzb2NrX25ldChzayksCi0JCQkJVURQX01JQl9PVVREQVRBR1JBTVMsIGlzX3VkcGxpdGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTkwMCwxMSArOTUyLDggQEAKIAkJCWhsaW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAl9CiAKLQlpZiAodGNsYXNzIDwgMCkgeworCWlmICh0Y2xhc3MgPCAwKQogCQl0Y2xhc3MgPSBucC0+dGNsYXNzOwotCQlpZiAodGNsYXNzIDwgMCkKLQkJCXRjbGFzcyA9IDA7Ci0JfQogCiAJaWYgKG1zZy0+bXNnX2ZsYWdzJk1TR19DT05GSVJNKQogCQlnb3RvIGRvX2NvbmZpcm07CkBAIC0xMDMyLDkgKzEwODEsMTAyIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCB1ZHA2X3Vmb19zZW5kX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwdjZoOworCXN0cnVjdCB1ZHBoZHIgKnVoOworCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp1aCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlwdjZoID0gaXB2Nl9oZHIoc2tiKTsKKwl1aCA9IHVkcF9oZHIoc2tiKTsKKworCXVoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwdjZoLT5zYWRkciwgJmlwdjZoLT5kYWRkciwgc2tiLT5sZW4sCisJCQkJICAgICBJUFBST1RPX1VEUCwgMCk7CisJc2tiLT5jc3VtX3N0YXJ0ID0gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtIHNrYi0+aGVhZDsKKwlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICp1ZHA2X3Vmb19mcmFnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOworCXVuc2lnbmVkIGludCBtc3M7CisJdW5zaWduZWQgaW50IHVuZnJhZ19pcDZobGVuLCB1bmZyYWdfbGVuOworCXN0cnVjdCBmcmFnX2hkciAqZnB0cjsKKwl1OCAqbWFjX3N0YXJ0LCAqcHJldmhkcjsKKwl1OCBuZXh0aGRyOworCXU4IGZyYWdfaGRyX3N6ID0gc2l6ZW9mKHN0cnVjdCBmcmFnX2hkcik7CisJaW50IG9mZnNldDsKKwlfX3dzdW0gY3N1bTsKKworCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDw9IG1zcykpCisJCWdvdG8gb3V0OworCisJaWYgKHNrYl9nc29fb2soc2tiLCBmZWF0dXJlcyB8IE5FVElGX0ZfR1NPX1JPQlVTVCkpIHsKKwkJLyogUGFja2V0IGlzIGZyb20gYW4gdW50cnVzdGVkIHNvdXJjZSwgcmVzZXQgZ3NvX3NlZ3MuICovCisJCWludCB0eXBlID0gc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZTsKKworCQlpZiAodW5saWtlbHkodHlwZSAmIH4oU0tCX0dTT19VRFAgfCBTS0JfR1NPX0RPREdZKSB8fAorCQkJICAgICAhKHR5cGUgJiAoU0tCX0dTT19VRFApKSkpCisJCQlnb3RvIG91dDsKKworCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID0gRElWX1JPVU5EX1VQKHNrYi0+bGVuLCBtc3MpOworCisJCXNlZ3MgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBEbyBzb2Z0d2FyZSBVRk8uIENvbXBsZXRlIGFuZCBmaWxsIGluIHRoZSBVRFAgY2hlY2tzdW0gYXMgSFcgY2Fubm90CisJICogZG8gY2hlY2tzdW0gb2YgVURQIHBhY2tldHMgc2VudCBhcyBtdWx0aXBsZSBJUCBmcmFnbWVudHMuCisJICovCisJb2Zmc2V0ID0gc2tiLT5jc3VtX3N0YXJ0IC0gc2tiX2hlYWRyb29tKHNrYik7CisJY3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLT5sZW4tIG9mZnNldCwgMCk7CisJb2Zmc2V0ICs9IHNrYi0+Y3N1bV9vZmZzZXQ7CisJKihfX3N1bTE2ICopKHNrYi0+ZGF0YSArIG9mZnNldCkgPSBjc3VtX2ZvbGQoY3N1bSk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJLyogQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIGhlYWRyb29tIHRvIGluc2VydCBmcmFnbWVudCBoZWFkZXIuICovCisJaWYgKChza2JfaGVhZHJvb20oc2tiKSA8IGZyYWdfaGRyX3N6KSAmJgorCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZnJhZ19oZHJfc3osIDAsIEdGUF9BVE9NSUMpKQorCQlnb3RvIG91dDsKKworCS8qIEZpbmQgdGhlIHVuZnJhZ21lbnRhYmxlIGhlYWRlciBhbmQgc2hpZnQgaXQgbGVmdCBieSBmcmFnX2hkcl9zegorCSAqIGJ5dGVzIHRvIGluc2VydCBmcmFnbWVudCBoZWFkZXIuCisJICovCisJdW5mcmFnX2lwNmhsZW4gPSBpcDZfZmluZF8xc3RmcmFnb3B0KHNrYiwgJnByZXZoZHIpOworCW5leHRoZHIgPSAqcHJldmhkcjsKKwkqcHJldmhkciA9IE5FWFRIRFJfRlJBR01FTlQ7CisJdW5mcmFnX2xlbiA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiX21hY19oZWFkZXIoc2tiKSArCisJCSAgICAgdW5mcmFnX2lwNmhsZW47CisJbWFjX3N0YXJ0ID0gc2tiX21hY19oZWFkZXIoc2tiKTsKKwltZW1tb3ZlKG1hY19zdGFydC1mcmFnX2hkcl9zeiwgbWFjX3N0YXJ0LCB1bmZyYWdfbGVuKTsKKworCXNrYi0+bWFjX2hlYWRlciAtPSBmcmFnX2hkcl9zejsKKwlza2ItPm5ldHdvcmtfaGVhZGVyIC09IGZyYWdfaGRyX3N6OworCisJZnB0ciA9IChzdHJ1Y3QgZnJhZ19oZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB1bmZyYWdfaXA2aGxlbik7CisJZnB0ci0+bmV4dGhkciA9IG5leHRoZHI7CisJZnB0ci0+cmVzZXJ2ZWQgPSAwOworCWlwdjZfc2VsZWN0X2lkZW50KGZwdHIpOworCisJLyogRnJhZ21lbnQgdGhlIHNrYi4gaXB2NiBoZWFkZXIgYW5kIHRoZSByZW1haW5pbmcgZmllbGRzIG9mIHRoZQorCSAqIGZyYWdtZW50IGhlYWRlciBhcmUgdXBkYXRlZCBpbiBpcHY2X2dzb19zZWdtZW50KCkKKwkgKi8KKwlzZWdzID0gc2tiX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7CisKK291dDoKKwlyZXR1cm4gc2VnczsKK30KKwogc3RhdGljIHN0cnVjdCBpbmV0Nl9wcm90b2NvbCB1ZHB2Nl9wcm90b2NvbCA9IHsKIAkuaGFuZGxlcgk9CXVkcHY2X3JjdiwKIAkuZXJyX2hhbmRsZXIJPQl1ZHB2Nl9lcnIsCisJLmdzb19zZW5kX2NoZWNrID0JdWRwNl91Zm9fc2VuZF9jaGVjaywKKwkuZ3NvX3NlZ21lbnQJPQl1ZHA2X3Vmb19mcmFnbWVudCwKIAkuZmxhZ3MJCT0JSU5FVDZfUFJPVE9fTk9QT0xJQ1l8SU5FVDZfUFJPVE9fRklOQUwsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDNhM2M2NzcuLjhlYzNkNDUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0zMDYsOSArMzA2LDI2IEBACiAJeGZybV9wb2xpY3lfdW5yZWdpc3Rlcl9hZmluZm8oJnhmcm02X3BvbGljeV9hZmluZm8pOwogfQogCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgeGZybTZfcG9saWN5X3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gInhmcm02X2djX3RocmVzaCIsCisJCS5kYXRhCSAgIAk9ICZ4ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCwKKwkJLm1heGxlbgkgCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCSAgIAk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hkcjsKKyNlbmRpZgorCiBpbnQgX19pbml0IHhmcm02X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OworCXVuc2lnbmVkIGludCBnY190aHJlc2g7CiAKIAlyZXQgPSB4ZnJtNl9wb2xpY3lfaW5pdCgpOwogCWlmIChyZXQpCkBAIC0zMTcsNiArMzM0LDIzIEBACiAJcmV0ID0geGZybTZfc3RhdGVfaW5pdCgpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3BvbGljeTsKKwkvKgorCSAqIFdlIG5lZWQgYSBnb29kIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSB4ZnJtNiBnYyB0aHJlc2hvbGQuCisJICogSW4gaXB2NCB3ZSBzZXQgaXQgdG8gdGhlIHJvdXRlIGhhc2ggdGFibGUgc2l6ZSAqIDgsIHdoaWNoCisJICogaXMgaGFsZiB0aGUgc2l6ZSBvZiB0aGUgbWF4aW1hdW0gcm91dGUgY2FjaGUgZm9yIGlwdjQuICBJdAorCSAqIHdvdWxkIGJlIGdvb2QgdG8gZG8gdGhlIHNhbWUgdGhpbmcgZm9yIHY2LCBleGNlcHQgdGhlIHRhYmxlIGlzCisJICogY29uc3RydWN0ZWQgZGlmZmVyZW50bHkgaGVyZS4gIEhlcmUgZWFjaCB0YWJsZSBmb3IgYSBuZXQgbmFtZXNwYWNlCisJICogY2FuIGhhdmUgRklCX1RBQkxFX0hBU0hTWiBlbnRyaWVzLCBzbyBsZXRzIGdvIHdpdGggdGhlIHNhbWUKKwkgKiBjb21wdXRhdGlvbiB0aGF0IHdlIHVzZWQgZm9yIGlwdjQgaGVyZS4gIEFsc28sIGxldHMga2VlcCB0aGUgaW5pdGlhbAorCSAqIGdjX3RocmVzaCB0byBhIG1pbmltdW0gb2YgMTAyNCwgc2luY2UsIHRoZSBpcHY2IHJvdXRlIGNhY2hlIGRlZmF1bHRzCisJICogdG8gdGhhdCBhcyBhIG1pbmltdW0gYXMgd2VsbAorCSAqLworCWdjX3RocmVzaCA9IEZJQjZfVEFCTEVfSEFTSFNaICogODsKKwl4ZnJtNl9kc3Rfb3BzLmdjX3RocmVzaCA9IChnY190aHJlc2ggPCAxMDI0KSA/IDEwMjQgOiBnY190aHJlc2g7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCXN5c2N0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKCZpbml0X25ldCwgbmV0X2lwdjZfY3RsX3BhdGgsCisJCQkJCQl4ZnJtNl9wb2xpY3lfdGFibGUpOworI2VuZGlmCiBvdXQ6CiAJcmV0dXJuIHJldDsKIG91dF9wb2xpY3k6CkBAIC0zMjYsNiArMzYwLDEwIEBACiAKIHZvaWQgeGZybTZfZmluaSh2b2lkKQogeworI2lmZGVmIENPTkZJR19TWVNDVEwKKwlpZiAoc3lzY3RsX2hkcikKKwkJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKHN5c2N0bF9oZHIpOworI2VuZGlmCiAJLy94ZnJtNl9pbnB1dF9maW5pKCk7CiAJeGZybTZfcG9saWN5X2ZpbmkoKTsKIAl4ZnJtNl9zdGF0ZV9maW5pKCk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2V2ZW50LmMKaW5kZXggYzM1YjNlZi4uZDc4NTU0ZiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fZXZlbnQuYwpAQCAtNDksNyArNDksNyBAQAogc3RhdGljIGludCBpcmNvbW1fc3RhdGVfY29ubihzdHJ1Y3QgaXJjb21tX2NiICpzZWxmLCBJUkNPTU1fRVZFTlQgZXZlbnQsCiAJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcmNvbW1faW5mbyAqaW5mbyk7CiAKLWNoYXIgKmlyY29tbV9zdGF0ZVtdID0geworY29uc3QgY2hhciAqY29uc3QgaXJjb21tX3N0YXRlW10gPSB7CiAJIklSQ09NTV9JRExFIiwKIAkiSVJDT01NX1dBSVRJIiwKIAkiSVJDT01NX1dBSVRSIiwKQEAgLTU3LDcgKzU3LDcgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfSVJEQV9ERUJVRwotc3RhdGljIGNoYXIgKmlyY29tbV9ldmVudFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV9ldmVudFtdID0gewogCSJJUkNPTU1fQ09OTkVDVF9SRVFVRVNUIiwKIAkiSVJDT01NX0NPTk5FQ1RfUkVTUE9OU0UiLAogCSJJUkNPTU1fVFRQX0NPTk5FQ1RfSU5ESUNBVElPTiIsCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCmluZGV4IDkwMzJhMWQuLmVhZmMwMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCkBAIC04MCw3ICs4MCw3IEBACiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgc3RydWN0IGlyY29tbV90dHlfaW5mbyAqaW5mbyk7CiAKLWNoYXIgKmlyY29tbV90dHlfc3RhdGVbXSA9IHsKK2NvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV90dHlfc3RhdGVbXSA9IHsKIAkiSVJDT01NX1RUWV9JRExFIiwKIAkiSVJDT01NX1RUWV9TRUFSQ0giLAogCSJJUkNPTU1fVFRZX1FVRVJZX1BBUkFNRVRFUlMiLApAQCAtOTEsNyArOTEsNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCi1zdGF0aWMgY2hhciAqaXJjb21tX3R0eV9ldmVudFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlyY29tbV90dHlfZXZlbnRbXSA9IHsKIAkiSVJDT01NX1RUWV9BVFRBQ0hfQ0FCTEUiLAogCSJJUkNPTU1fVFRZX0RFVEFDSF9DQUJMRSIsCiAJIklSQ09NTV9UVFlfREFUQV9SRVFVRVNUIiwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lyaWFwLmMgYi9uZXQvaXJkYS9pcmlhcC5jCmluZGV4IDRhMTA1ZGMuLjI5NGUzNGQgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFwLmMKKysrIGIvbmV0L2lyZGEvaXJpYXAuYwpAQCAtNDQsNyArNDQsNyBAQAogCiAjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKIC8qIEZJWE1FOiBUaGlzIG9uZSBzaG91bGQgZ28gaW4gaXJsbXAuYyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmlhc19jaGFyc2V0X3R5cGVzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgaWFzX2NoYXJzZXRfdHlwZXNbXSA9IHsKIAkiQ1NfQVNDSUkiLAogCSJDU19JU09fODg1OV8xIiwKIAkiQ1NfSVNPXzg4NTlfMiIsCkBAIC05NjYsNyArOTY2LDcgQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKLXN0YXRpYyBjb25zdCBjaGFyICppYXNfdmFsdWVfdHlwZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpYXNfdmFsdWVfdHlwZXNbXSA9IHsKIAkiSUFTX01JU1NJTkciLAogCSJJQVNfSU5URUdFUiIsCiAJIklBU19PQ1RfU0VRIiwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKaW5kZXggNzc0ZDczYS4uNjIxMTY4MiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKQEAgLTY5LDE0ICs2OSwxNCBAQAogc3RhdGljIGludCBhY2Nlc3MgPSBBQ0NFU1NfUEVFUjsgLyogUEVFUiwgRElSRUNUIG9yIEhPU1RFRCAqLwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBjb25zdCBjaGFyICppcmxhbl9hY2Nlc3NbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpcmxhbl9hY2Nlc3NbXSA9IHsKIAkiVU5LTk9XTiIsCiAJIkRJUkVDVCIsCiAJIlBFRVIiLAogCSJIT1NURUQiCiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqaXJsYW5fbWVkaWFbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpcmxhbl9tZWRpYVtdID0gewogCSJVTktOT1dOIiwKIAkiODAyLjMiLAogCSI4MDIuNSIKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggNzI0YmNmOS4uN2I2YjYzMSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTQxLDcgKzQxLDggQEAKIAogc3RhdGljIGludCAgaXJsYW5fZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50ICBpcmxhbl9ldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50ICBpcmxhbl9ldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCAgaXJsYW5fZXRoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXJsYW5fZXRoX3NldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlybGFuX2V0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTE2Miw3ICsxNjMsOCBAQAogICogICAgVHJhbnNtaXRzIGV0aGVybmV0IGZyYW1lcyBvdmVyIElyREEgbGluay4KICAqCiAgKi8KLXN0YXRpYyBpbnQgaXJsYW5fZXRoX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBpcmxhbl9ldGhfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKQEAgLTE3Nyw3ICsxNzksNyBAQAogCiAJCS8qIERpZCB0aGUgcmVhbGxvYyBzdWNjZWVkPyAqLwogCQlpZiAobmV3X3NrYiA9PSBOVUxMKQotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJCS8qIFVzZSB0aGUgbmV3IHNrYiBpbnN0ZWFkICovCiAJCXNrYiA9IG5ld19za2I7CkBAIC0yMDksNyArMjExLDcgQEAKIAkJc2VsZi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwLmMgYi9uZXQvaXJkYS9pcmxhcC5jCmluZGV4IGU0OTY1YjcuLjM1NmU2NWIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwLmMKKysrIGIvbmV0L2lyZGEvaXJsYXAuYwpAQCAtNjMsNyArNjMsNyBAQAogCQkJCQlzdHJ1Y3QgcW9zX2luZm8gKnFvc191c2VyKTsKIAogI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCi1zdGF0aWMgY2hhciAqbGFwX3JlYXNvbnNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBsYXBfcmVhc29uc1tdID0gewogCSJFUlJPUiwgTk9UIFVTRUQiLAogCSJMQVBfRElTQ19JTkRJQ0FUSU9OIiwKIAkiTEFQX05PX1JFU1BPTlNFIiwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCmluZGV4IDE2YzRlZjAuLmM1YzUxOTUgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwpAQCAtNzgsNyArNzgsNyBAQAogCQkJCSAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBpcmxhcF9pbmZvICopOwogCiAjaWZkZWYgQ09ORklHX0lSREFfREVCVUcKLXN0YXRpYyBjb25zdCBjaGFyICppcmxhcF9ldmVudFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGlybGFwX2V2ZW50W10gPSB7CiAJIkRJU0NPVkVSWV9SRVFVRVNUIiwKIAkiQ09OTkVDVF9SRVFVRVNUIiwKIAkiQ09OTkVDVF9SRVNQT05TRSIsCkBAIC0xMjAsNyArMTIwLDcgQEAKIH07CiAjZW5kaWYJLyogQ09ORklHX0lSREFfREVCVUcgKi8KIAotY29uc3QgY2hhciAqaXJsYXBfc3RhdGVbXSA9IHsKK2NvbnN0IGNoYXIgKmNvbnN0IGlybGFwX3N0YXRlW10gPSB7CiAJIkxBUF9ORE0iLAogCSJMQVBfUVVFUlkiLAogCSJMQVBfUkVQTFkiLApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYyBiL25ldC9pcmRhL2lybG1wX2V2ZW50LmMKaW5kZXggNzhjY2UwYy4uYzFmYjVkYiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCkBAIC0zMywxMyArMzMsMTMgQEAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcF9mcmFtZS5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wX2V2ZW50Lmg+CiAKLWNvbnN0IGNoYXIgKmlybG1wX3N0YXRlW10gPSB7Citjb25zdCBjaGFyICpjb25zdCBpcmxtcF9zdGF0ZVtdID0gewogCSJMQVBfU1RBTkRCWSIsCiAJIkxBUF9VX0NPTk5FQ1QiLAogCSJMQVBfQUNUSVZFIiwKIH07CiAKLWNvbnN0IGNoYXIgKmlybHNhcF9zdGF0ZVtdID0geworY29uc3QgY2hhciAqY29uc3QgaXJsc2FwX3N0YXRlW10gPSB7CiAJIkxTQVBfRElTQ09OTkVDVEVEIiwKIAkiTFNBUF9DT05ORUNUIiwKIAkiTFNBUF9DT05ORUNUX1BFTkQiLApAQCAtNDksNyArNDksNyBAQAogfTsKIAogI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCi1zdGF0aWMgY29uc3QgY2hhciAqaXJsbXBfZXZlbnRbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBpcmxtcF9ldmVudFtdID0gewogCSJMTV9DT05ORUNUX1JFUVVFU1QiLAogCSJMTV9DT05ORUNUX0NPTkZJUk0iLAogCSJMTV9DT05ORUNUX1JFU1BPTlNFIiwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybmV0L2lybmV0X3BwcC5oIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmgKaW5kZXggZDlmOGJkNC4uYjVkZjI0MSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmgKKysrIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmgKQEAgLTk1LDcgKzk1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIFZBUklBQkxFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBGaWxlc3lzdGVtIGNhbGxiYWNrcyAodG8gY2FsbCB1cykgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlybmV0X2RldmljZV9mb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlybmV0X2RldmljZV9mb3BzID0KIHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gZGV2X2lybmV0X3JlYWQsCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldGxpbmsuYyBiL25ldC9pcmRhL2lybmV0bGluay5jCmluZGV4IDhkZDdlZDcuLjQ3NmIzMDcgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0bGluay5jCisrKyBiL25ldC9pcmRhL2lybmV0bGluay5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKIAotCXJldHVybiBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogCiAgZXJyX291dDoKIAlubG1zZ19mcmVlKG1zZyk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnByb2MuYyBiL25ldC9pcmRhL2lycHJvYy5jCmluZGV4IDhmZjE4NjEuLjMxODc2NmUgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lycHJvYy5jCisrKyBiL25ldC9pcmRhL2lycHJvYy5jCkBAIC0zNCwyMSArMzQsMjEgQEAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxhcC5oPgogI2luY2x1ZGUgPG5ldC9pcmRhL2lybG1wLmg+CiAKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRpc2NvdmVyeV9zZXFfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlybGFwX3NlcV9mb3BzOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJsbXBfc2VxX2ZvcHM7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcnR0cF9zZXFfZm9wczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlyaWFzX3NlcV9mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGlzY292ZXJ5X3NlcV9mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJsYXBfc2VxX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcmxtcF9zZXFfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlydHRwX3NlcV9mb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXJpYXNfc2VxX2ZvcHM7CiAKIHN0cnVjdCBpcmRhX2VudHJ5IHsKIAljb25zdCBjaGFyICpuYW1lOwotCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKIH07CiAKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19pcmRhOwogRVhQT1JUX1NZTUJPTChwcm9jX2lyZGEpOwogCi1zdGF0aWMgc3RydWN0IGlyZGFfZW50cnkgaXJkYV9kaXJzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlyZGFfZW50cnkgaXJkYV9kaXJzW10gPSB7CiAJeyJkaXNjb3ZlcnkiLAkmZGlzY292ZXJ5X3NlcV9mb3BzfSwKIAl7ImlydHRwIiwJJmlydHRwX3NlcV9mb3BzfSwKIAl7ImlybG1wIiwJJmlybG1wX3NlcV9mb3BzfSwKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IGRiYTlhYmQuLjRlOTgxOTMgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMzcwNSw3ICszNzA1LDcgQEAKIAlyZWFkX3VubG9jaygmcGZrZXlfdGFibGVfbG9jayk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGZrZXlfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGZrZXlfc2VxX29wcyA9IHsKIAkuc3RhcnQJPSBwZmtleV9zZXFfc3RhcnQsCiAJLm5leHQJPSBwZmtleV9zZXFfbmV4dCwKIAkuc3RvcAk9IHBma2V5X3NlcV9zdG9wLApAQCAtMzcxOCw3ICszNzE4LDcgQEAKIAkJCSAgICBzaXplb2Yoc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSkpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwZmtleV9wcm9jX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBma2V5X3Byb2Nfb3BzID0gewogCS5vcGVuCSA9IHBma2V5X3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLAogCS5sbHNlZWsJID0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvbmV0L2xhcGIvbGFwYl9pZmFjZS5jIGIvbmV0L2xhcGIvbGFwYl9pZmFjZS5jCmluZGV4IDJiYTFiYzQuLmJkYTk2ZDEgMTAwNjQ0Ci0tLSBhL25ldC9sYXBiL2xhcGJfaWZhY2UuYworKysgYi9uZXQvbGFwYi9sYXBiX2lmYWNlLmMKQEAgLTQwNyw3ICs0MDcsNyBAQAogCQlyZXR1cm4gbGFwYi0+Y2FsbGJhY2tzLmRhdGFfaW5kaWNhdGlvbihsYXBiLT5kZXYsIHNrYik7CiAKIAlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gTkVUX1JYX0NOX0hJR0g7IC8qIEZvciBub3c7IG11c3QgYmUgIT0gTkVUX1JYX0RST1AgKi8KKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7IC8qIEZvciBub3c7IG11c3QgYmUgIT0gTkVUX1JYX0RST1AgKi8KIH0KIAogaW50IGxhcGJfZGF0YV90cmFuc21pdChzdHJ1Y3QgbGFwYl9jYiAqbGFwYiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX3Byb2MuYyBiL25ldC9sbGMvbGxjX3Byb2MuYwppbmRleCBmOTdiZTQ3Li5iZTQ3YWM0MjcgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX3Byb2MuYworKysgYi9uZXQvbGxjL2xsY19wcm9jLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY2hhciAqbGxjX2Nvbm5fc3RhdGVfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBsbGNfY29ubl9zdGF0ZV9uYW1lc1tdID0gewogCVtMTENfQ09OTl9TVEFURV9BRE1dID0gICAgICAgICJhZG0iLAogCVtMTENfQ09OTl9TVEFURV9TRVRVUF0gPSAgICAgICJzZXR1cCIsCiAJW0xMQ19DT05OX1NUQVRFX05PUk1BTF0gPSAgICAgIm5vcm1hbCIsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvS2NvbmZpZyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCmluZGV4IDc4MzZlZTkuLjRkNTU0M2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9LY29uZmlnCisrKyBiL25ldC9tYWM4MDIxMS9LY29uZmlnCkBAIC02LDcgKzYsNiBAQAogCXNlbGVjdCBDUllQVE9fQVJDNAogCXNlbGVjdCBDUllQVE9fQUVTCiAJc2VsZWN0IENSQzMyCi0Jc2VsZWN0IFdJUkVMRVNTX0VYVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExCiAJICBuZXR3b3JraW5nIHN0YWNrLgpAQCAtMTQsMjQgKzEzLDcgQEAKIGNvbW1lbnQgIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExIgogCWRlcGVuZHMgb24gQ0ZHODAyMTE9bgogCi1jb25maWcgTUFDODAyMTFfREVGQVVMVF9QUwotCWJvb2wgImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdCIKLQlkZXBlbmRzIG9uIE1BQzgwMjExCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBwb3dlcnNhdmUgbW9kZSBieSBkZWZhdWx0LgotCi0JICBJZiB0aGlzIGNhdXNlcyB5b3VyIGFwcGxpY2F0aW9ucyB0byBtaXNiZWhhdmUgeW91IHNob3VsZCBmaXggeW91cgotCSAgYXBwbGljYXRpb25zIGluc3RlYWQgLS0gdGhleSBuZWVkIHRvIHJlZ2lzdGVyIHRoZWlyIG5ldHdvcmsKLQkgIGxhdGVuY3kgcmVxdWlyZW1lbnQsIHNlZSBEb2N1bWVudGF0aW9uL3Bvd2VyL3BtX3Fvc19pbnRlcmZhY2UudHh0LgotCi1jb25maWcgTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRQotCWludAotCWRlZmF1bHQgMSBpZiBNQUM4MDIxMV9ERUZBVUxUX1BTCi0JZGVmYXVsdCAwCi0KLW1lbnUgIlJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uIgotCWRlcGVuZHMgb24gTUFDODAyMTEgIT0gbgoraWYgTUFDODAyMTEgIT0gbgogCiBjb25maWcgTUFDODAyMTFfUkNfUElECiAJYm9vbCAiUElEIGNvbnRyb2xsZXIgYmFzZWQgcmF0ZSBjb250cm9sIGFsZ29yaXRobSIgaWYgRU1CRURERUQKQEAgLTc4LDE3ICs2MCwxNyBAQAogCWRlZmF1bHQgInBpZCIgaWYgTUFDODAyMTFfUkNfREVGQVVMVF9QSUQKIAlkZWZhdWx0ICIiCiAKLWVuZG1lbnUKK2VuZGlmCiAKIGNvbmZpZyBNQUM4MDIxMV9NRVNICiAJYm9vbCAiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyAocHJlLTgwMi4xMXMpIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBFWFBFUklNRU5UQUwKLQlkZXBlbmRzIG9uIEJST0tFTgogCS0tLWhlbHAtLS0KIAkgVGhpcyBvcHRpb25zIGVuYWJsZXMgc3VwcG9ydCBvZiBEcmFmdCA4MDIuMTFzIG1lc2ggbmV0d29ya2luZy4KLQkgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIERyYWZ0IDEuMDggb2YgdGhlIE1lc2ggTmV0d29ya2luZwotCSBhbWVuZG1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0IGh0dHA6Ly9vMTFzLm9yZy8uCi0KKwkgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIERyYWZ0IDIuMDggb2YgdGhlIE1lc2ggTmV0d29ya2luZworCSBhbWVuZG1lbnQuICBIb3dldmVyLCBubyBjb21wbGlhbmNlIHdpdGggdGhhdCBkcmFmdCBpcyBjbGFpbWVkIG9yIGV2ZW4KKwkgcG9zc2libGUsIGFzIGRyYWZ0cyBsZWF2ZSBhIG51bWJlciBvZiBpZGVudGlmaWVycyB0byBiZSBkZWZpbmVkIGFmdGVyCisJIHJhdGlmaWNhdGlvbi4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0IGh0dHA6Ly9vMTFzLm9yZy8uCiAKIGNvbmZpZyBNQUM4MDIxMV9MRURTCiAJYm9vbCAiRW5hYmxlIExFRCB0cmlnZ2VycyIKQEAgLTIyMiwzICsyMDQsMTUgQEAKIAkgIGFuZCBzaG93IHRoZW0gaW4gZGVidWdmcy4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE1BQzgwMjExX0RSSVZFUl9BUElfVFJBQ0VSCisJYm9vbCAiRHJpdmVyIEFQSSB0cmFjZXIiCisJZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCisJZGVwZW5kcyBvbiBFVkVOVF9UUkFDSU5HCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBtYWtlIG1hYzgwMjExIHJlZ2lzdGVyIHdpdGggdGhlIGZ0cmFjZQorCSAgZnJhbWV3b3JrIGZvciB0aGUgZHJpdmVyIEFQSSAtLSB5b3UgY2FuIHNlZSB3aGljaAorCSAgZHJpdmVyIG1ldGhvZHMgaXQgaXMgY2FsbGluZyB0aGVuIGJ5IGxvb2tpbmcgYXQgdGhlCisJICB0cmFjZS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCAwZTNhYjg4Li45ZjNjZjcxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC0zLDcgKzMsNiBAQAogIyBtYWM4MDIxMSBvYmplY3RzCiBtYWM4MDIxMS15IDo9IFwKIAltYWluLm8gXAotCXdleHQubyBcCiAJc3RhX2luZm8ubyBcCiAJd2VwLm8gXAogCXdwYS5vIFwKQEAgLTQxLDYgKzQwLDkgQEAKIAogbWFjODAyMTEtJChDT05GSUdfUE0pICs9IHBtLm8KIAorbWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfRFJJVkVSX0FQSV9UUkFDRVIpICs9IGRyaXZlci10cmFjZS5vCitDRkxBR1NfZHJpdmVyLXRyYWNlLm8gOj0gLUkkKHNyYykKKwogIyBvYmplY3RzIGZvciBQSUQgYWxnb3JpdGhtCiByYzgwMjExX3BpZC15IDo9IHJjODAyMTFfcGlkX2FsZ28ubwogcmM4MDIxMV9waWQtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgKz0gcmM4MDIxMV9waWRfZGVidWdmcy5vCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKaW5kZXggYTI0ZTU5OC4uYmQ3NjVmMyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jCisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwpAQCAtMzkxLDkgKzM5MSw2IEBACiAKIAlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5wZW5kaW5nKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKLQkJLyogbWFyayBxdWV1ZSBhcyBwZW5kaW5nLCBpdCBpcyBzdG9wcGVkIGFscmVhZHkgKi8KLQkJX19zZXRfYml0KElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HLAotCQkJICAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOwogCQkvKiBjb3B5IG92ZXIgcmVtYWluaW5nIHBhY2tldHMgKi8KIAkJc2tiX3F1ZXVlX3NwbGljZV90YWlsX2luaXQoCiAJCQkmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5wZW5kaW5nLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDNmNDcyNzYuLjU2MDhmNmMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTU3LDM2ICs1NywyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgaW50IGlmaW5kZXgpCitzdGF0aWMgaW50IGllZWU4MDIxMV9kZWxfaWZhY2Uoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0JLyogd2UncmUgdW5kZXIgUlROTCAqLwotCWRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWllZWU4MDIxMV9pZl9yZW1vdmUoc2RhdGEpOworCWllZWU4MDIxMV9pZl9yZW1vdmUoSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksIGludCBpZmluZGV4LAorc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX2lmYWNlKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAogCQkJCSAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCWludCByZXQ7CiAKLQkvKiB3ZSdyZSB1bmRlciBSVE5MICovCi0JZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7Ci0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKCFubDgwMjExX3R5cGVfY2hlY2sodHlwZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMzgsNiArMzIzLDggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CiAKKwlzaW5mby0+Z2VuZXJhdGlvbiA9IHNkYXRhLT5sb2NhbC0+c3RhX2dlbmVyYXRpb247CisKIAlzaW5mby0+ZmlsbGVkID0gU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUgfAogCQkJU1RBVElPTl9JTkZPX1JYX0JZVEVTIHwKIAkJCVNUQVRJT05fSU5GT19UWF9CWVRFUyB8CkBAIC05MjQsNiArOTExLDggQEAKIAllbHNlCiAJCW1lbXNldChuZXh0X2hvcCwgMCwgRVRIX0FMRU4pOwogCisJcGluZm8tPmdlbmVyYXRpb24gPSBtZXNoX3BhdGhzX2dlbmVyYXRpb247CisKIAlwaW5mby0+ZmlsbGVkID0gTVBBVEhfSU5GT19GUkFNRV9RTEVOIHwKIAkJCU1QQVRIX0lORk9fRFNOIHwKIAkJCU1QQVRIX0lORk9fTUVUUklDIHwKQEAgLTExNzcsMTIzICsxMTY2LDI5IEBACiBzdGF0aWMgaW50IGllZWU4MDIxMV9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgKnJlcSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCXN3aXRjaCAocmVxLT5hdXRoX3R5cGUpIHsKLQljYXNlIE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06Ci0JCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTjsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVk6Ci0JCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWTsKLQkJYnJlYWs7Ci0JY2FzZSBOTDgwMjExX0FVVEhUWVBFX0ZUOgotCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX0ZUOwotCQlicmVhazsKLQljYXNlIE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA6Ci0JCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCW1lbWNweShzZGF0YS0+dS5tZ2QuYnNzaWQsIHJlcS0+cGVlcl9hZGRyLCBFVEhfQUxFTik7Ci0Jc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwotCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKLQotCS8qIFRPRE86IHJlcS0+Y2hhbiAqLwotCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0KLQlpZiAocmVxLT5zc2lkKSB7Ci0JCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOwotCQltZW1jcHkoc2RhdGEtPnUubWdkLnNzaWQsIHJlcS0+c3NpZCwgcmVxLT5zc2lkX2xlbik7Ci0JCXNkYXRhLT51Lm1nZC5zc2lkX2xlbiA9IHJlcS0+c3NpZF9sZW47Ci0JCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwotCX0KLQotCWtmcmVlKHNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSk7Ci0Jc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llID0gTlVMTDsKLQlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWVfbGVuID0gMDsKLQlpZiAocmVxLT5pZSkgewotCQlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUgPSBrbWFsbG9jKHJlcS0+aWVfbGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbWNweShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKLQkJc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llX2xlbiA9IHJlcS0+aWVfbGVuOwotCX0KLQotCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0VYVF9TTUU7Ci0Jc2RhdGEtPnUubWdkLnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKLQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaWVlZTgwMjExX21nZF9hdXRoKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldiksIHJlcSk7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2Fzc29jKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCWludCByZXQ7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAobWVtY21wKHNkYXRhLT51Lm1nZC5ic3NpZCwgcmVxLT5wZWVyX2FkZHIsIEVUSF9BTEVOKSAhPSAwIHx8Ci0JICAgICEoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEKSkKLQkJcmV0dXJuIC1FTk9MSU5LOyAvKiBub3QgYXV0aGVudGljYXRlZCAqLwotCi0Jc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwotCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKLQotCS8qIFRPRE86IHJlcS0+Y2hhbiAqLwotCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0KLQlpZiAocmVxLT5zc2lkKSB7Ci0JCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOwotCQltZW1jcHkoc2RhdGEtPnUubWdkLnNzaWQsIHJlcS0+c3NpZCwgcmVxLT5zc2lkX2xlbik7Ci0JCXNkYXRhLT51Lm1nZC5zc2lkX2xlbiA9IHJlcS0+c3NpZF9sZW47Ci0JCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwotCX0gZWxzZQotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwotCi0JcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc2RhdGEsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKLQlpZiAocmV0ICYmIHJldCAhPSAtRUFMUkVBRFkpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAocmVxLT51c2VfbWZwKSB7Ci0JCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEOwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKLQl9IGVsc2UgewotCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9ESVNBQkxFRDsKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEOwotCX0KLQotCWlmIChyZXEtPmNvbnRyb2xfcG9ydCkKLQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOwotCWVsc2UKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NPTlRST0xfUE9SVDsKLQotCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0VYVF9TTUU7Ci0Jc2RhdGEtPnUubWdkLnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKLQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaWVlZTgwMjExX21nZF9hc3NvYyhJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpLCByZXEpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV9kZWF1dGgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgKnJlcSkKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgKnJlcSwKKwkJCSAgICB2b2lkICpjb29raWUpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JLyogVE9ETzogcmVxLT5pZSwgcmVxLT5wZWVyX2FkZHIgKi8KLQlyZXR1cm4gaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwgcmVxLT5yZWFzb25fY29kZSk7CisJcmV0dXJuIGllZWU4MDIxMV9tZ2RfZGVhdXRoKElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldiksCisJCQkJICAgIHJlcSwgY29va2llKTsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfZGlzYXNzb2Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0ICpyZXEpCisJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCAqcmVxLAorCQkJICAgICAgdm9pZCAqY29va2llKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCS8qIFRPRE86IHJlcS0+aWUsIHJlcS0+cGVlcl9hZGRyICovCi0JcmV0dXJuIGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHNkYXRhLCByZXEtPnJlYXNvbl9jb2RlKTsKKwlyZXR1cm4gaWVlZTgwMjExX21nZF9kaXNhc3NvYyhJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpLAorCQkJCSAgICAgIHJlcSwgY29va2llKTsKIH0KIAogc3RhdGljIGludCBpZWVlODAyMTFfam9pbl9pYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0xMzc0LDYgKzEyNjksMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3dkc19wZWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwltZW1jcHkoJnNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwgYWRkciwgRVRIX0FMRU4pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yZmtpbGxfcG9sbChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CkBAIC0xMzgxLDYgKzEyODYsODUgQEAKIAlkcnZfcmZraWxsX3BvbGwobG9jYWwpOwogfQogCisjaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREUKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3Rlc3Rtb2RlX2NtZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CisKKwlpZiAoIWxvY2FsLT5vcHMtPnRlc3Rtb2RlX2NtZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGxvY2FsLT5vcHMtPnRlc3Rtb2RlX2NtZCgmbG9jYWwtPmh3LCBkYXRhLCBsZW4pOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9wb3dlcl9tZ210KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIGJvb2wgZW5hYmxlZCwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsLT5ody5jb25mOworCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGVuYWJsZWQgPT0gc2RhdGEtPnUubWdkLnBvd2Vyc2F2ZSAmJgorCSAgICB0aW1lb3V0ID09IGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCkKKwkJcmV0dXJuIDA7CisKKwlzZGF0YS0+dS5tZ2QucG93ZXJzYXZlID0gZW5hYmxlZDsKKwljb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPSB0aW1lb3V0OworCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKQorCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCisJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9iaXRyYXRlX21hc2soc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHU4ICphZGRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9iaXRyYXRlX21hc2sgKm1hc2spCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJaW50IGksIGVyciA9IC1FSU5WQUw7CisJdTMyIHRhcmdldF9yYXRlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCisJLyogdGFyZ2V0X3JhdGUgPSAtMSwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGF1dG8gb25seSwgc28gdXNlIGFsbCByYXRlcworCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAxIG1lYW5zIG9ubHkgcmF0ZSBYCisJICogdGFyZ2V0X3JhdGUgPSBYLCByYXRlLT5maXhlZCA9IDAgbWVhbnMgYWxsIHJhdGVzIDw9IFggKi8KKwlzZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSAtMTsKKwlzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gLTE7CisKKwlpZiAobWFzay0+Zml4ZWQpCisJCXRhcmdldF9yYXRlID0gbWFzay0+Zml4ZWQgLyAxMDA7CisJZWxzZSBpZiAobWFzay0+bWF4cmF0ZSkKKwkJdGFyZ2V0X3JhdGUgPSBtYXNrLT5tYXhyYXRlIC8gMTAwOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGk9MDsgaTwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tpXTsKKwkJaW50IHRoaXNfcmF0ZSA9IGJyYXRlLT5iaXRyYXRlOworCisJCWlmICh0YXJnZXRfcmF0ZSA9PSB0aGlzX3JhdGUpIHsKKwkJCXNkYXRhLT5tYXhfcmF0ZWN0cmxfcmF0ZWlkeCA9IGk7CisJCQlpZiAobWFzay0+Zml4ZWQpCisJCQkJc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IGk7CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CiAJLmFkZF92aXJ0dWFsX2ludGYgPSBpZWVlODAyMTFfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2RlbF9pZmFjZSwKQEAgLTE0MjIsNSArMTQwNiw5IEBACiAJLnNldF93aXBoeV9wYXJhbXMgPSBpZWVlODAyMTFfc2V0X3dpcGh5X3BhcmFtcywKIAkuc2V0X3R4X3Bvd2VyID0gaWVlZTgwMjExX3NldF90eF9wb3dlciwKIAkuZ2V0X3R4X3Bvd2VyID0gaWVlZTgwMjExX2dldF90eF9wb3dlciwKKwkuc2V0X3dkc19wZWVyID0gaWVlZTgwMjExX3NldF93ZHNfcGVlciwKIAkucmZraWxsX3BvbGwgPSBpZWVlODAyMTFfcmZraWxsX3BvbGwsCisJQ0ZHODAyMTFfVEVTVE1PREVfQ01EKGllZWU4MDIxMV90ZXN0bW9kZV9jbWQpCisJLnNldF9wb3dlcl9tZ210ID0gaWVlZTgwMjExX3NldF9wb3dlcl9tZ210LAorCS5zZXRfYml0cmF0ZV9tYXNrID0gaWVlZTgwMjExX3NldF9iaXRyYXRlX21hc2ssCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKaW5kZXggNmM0MzljZC4uOTY5OTFiNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIAlmb3IgKHEgPSAwOyBxIDwgbG9jYWwtPmh3LnF1ZXVlczsgcSsrKQogCQlyZXMgKz0gc3ByaW50ZihidWYgKyByZXMsICIlMDJkOiAlIy44bHgvJWRcbiIsIHEsCiAJCQkJbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txXSwKLQkJCQlfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsIHEpKTsKKwkJCQlza2JfcXVldWVfbGVuKCZsb2NhbC0+cGVuZGluZ1txXSkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHJlcyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCmluZGV4IGUzNDIwMzIuLjYxMjM0ZTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCkBAIC05NSwzMyArOTUsOSBAQAogSUVFRTgwMjExX0lGX0ZJTEUobWF4X3JhdGVjdHJsX3JhdGVpZHgsIG1heF9yYXRlY3RybF9yYXRlaWR4LCBERUMpOwogCiAvKiBTVEEgYXR0cmlidXRlcyAqLwotSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUubWdkLnN0YXRlLCBERUMpOwogSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUubWdkLmJzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5tZ2QucHJldl9ic3NpZCwgTUFDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1Lm1nZC5zc2lkX2xlbiwgU0laRSk7CiBJRUVFODAyMTFfSUZfRklMRShhaWQsIHUubWdkLmFpZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1Lm1nZC5hcF9jYXBhYiwgSEVYKTsKIElFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1Lm1nZC5jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5tZ2QuZXh0cmFfaWVfbGVuLCBTSVpFKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUubWdkLmF1dGhfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5tZ2QuYXNzb2NfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUubWdkLmF1dGhfYWxncywgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1Lm1nZC5hdXRoX2FsZywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUubWdkLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7Ci0KLXN0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9mbXRfZmxhZ3MoCi0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKLXsKLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMlcyVzJXMlcyVzJXNcbiIsCi0JCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKLQkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCi0JCSBzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCA/ICJDVFMgcHJvdFxuIiA6ICIiKTsKLX0KLV9fSUVFRTgwMjExX0lGX0ZJTEUoZmxhZ3MpOwogCiAvKiBBUCBhdHRyaWJ1dGVzICovCiBJRUVFODAyMTFfSUZfRklMRShudW1fc3RhX3BzLCB1LmFwLm51bV9zdGFfcHMsIEFUT01JQyk7CkBAIC0xNDAsNiArMTE2LDggQEAKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAvKiBNZXNoIHN0YXRzIGF0dHJpYnV0ZXMgKi8KK0lFRUU4MDIxMV9JRl9GSUxFKGZ3ZGVkX21jYXN0LCB1Lm1lc2gubXNoc3RhdHMuZndkZWRfbWNhc3QsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShmd2RlZF91bmljYXN0LCB1Lm1lc2gubXNoc3RhdHMuZndkZWRfdW5pY2FzdCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGZ3ZGVkX2ZyYW1lcywgdS5tZXNoLm1zaHN0YXRzLmZ3ZGVkX2ZyYW1lcywgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGRyb3BwZWRfZnJhbWVzX3R0bCwgdS5tZXNoLm1zaHN0YXRzLmRyb3BwZWRfZnJhbWVzX3R0bCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKGRyb3BwZWRfZnJhbWVzX25vX3JvdXRlLApAQCAtMTg0LDIwICsxNjIsOSBAQAogCURFQlVHRlNfQUREKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgc3RhKTsKIAlERUJVR0ZTX0FERChtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgc3RhKTsKIAotCURFQlVHRlNfQUREKHN0YXRlLCBzdGEpOwogCURFQlVHRlNfQUREKGJzc2lkLCBzdGEpOwotCURFQlVHRlNfQUREKHByZXZfYnNzaWQsIHN0YSk7Ci0JREVCVUdGU19BREQoc3NpZF9sZW4sIHN0YSk7CiAJREVCVUdGU19BREQoYWlkLCBzdGEpOwotCURFQlVHRlNfQUREKGFwX2NhcGFiLCBzdGEpOwogCURFQlVHRlNfQUREKGNhcGFiLCBzdGEpOwotCURFQlVHRlNfQUREKGV4dHJhX2llX2xlbiwgc3RhKTsKLQlERUJVR0ZTX0FERChhdXRoX3RyaWVzLCBzdGEpOwotCURFQlVHRlNfQUREKGFzc29jX3RyaWVzLCBzdGEpOwotCURFQlVHRlNfQUREKGF1dGhfYWxncywgc3RhKTsKLQlERUJVR0ZTX0FERChhdXRoX2FsZywgc3RhKTsKLQlERUJVR0ZTX0FERChhdXRoX3RyYW5zYWN0aW9uLCBzdGEpOwotCURFQlVHRlNfQUREKGZsYWdzLCBzdGEpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfYXBfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCkBAIC0yNDAsNiArMjA3LDggQEAKIHsKIAlzZGF0YS0+bWVzaF9zdGF0c19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm1lc2hfc3RhdHMiLAogCQkJCXNkYXRhLT5kZWJ1Z2ZzZGlyKTsKKwlNRVNIU1RBVFNfQUREKGZ3ZGVkX21jYXN0KTsKKwlNRVNIU1RBVFNfQUREKGZ3ZGVkX3VuaWNhc3QpOwogCU1FU0hTVEFUU19BREQoZndkZWRfZnJhbWVzKTsKIAlNRVNIU1RBVFNfQUREKGRyb3BwZWRfZnJhbWVzX3R0bCk7CiAJTUVTSFNUQVRTX0FERChkcm9wcGVkX2ZyYW1lc19ub19yb3V0ZSk7CkBAIC0zMTcsMjAgKzI4Niw5IEBACiAJREVCVUdGU19ERUwoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBzdGEpOwogCURFQlVHRlNfREVMKG1heF9yYXRlY3RybF9yYXRlaWR4LCBzdGEpOwogCi0JREVCVUdGU19ERUwoc3RhdGUsIHN0YSk7CiAJREVCVUdGU19ERUwoYnNzaWQsIHN0YSk7Ci0JREVCVUdGU19ERUwocHJldl9ic3NpZCwgc3RhKTsKLQlERUJVR0ZTX0RFTChzc2lkX2xlbiwgc3RhKTsKIAlERUJVR0ZTX0RFTChhaWQsIHN0YSk7Ci0JREVCVUdGU19ERUwoYXBfY2FwYWIsIHN0YSk7CiAJREVCVUdGU19ERUwoY2FwYWIsIHN0YSk7Ci0JREVCVUdGU19ERUwoZXh0cmFfaWVfbGVuLCBzdGEpOwotCURFQlVHRlNfREVMKGF1dGhfdHJpZXMsIHN0YSk7Ci0JREVCVUdGU19ERUwoYXNzb2NfdHJpZXMsIHN0YSk7Ci0JREVCVUdGU19ERUwoYXV0aF9hbGdzLCBzdGEpOwotCURFQlVHRlNfREVMKGF1dGhfYWxnLCBzdGEpOwotCURFQlVHRlNfREVMKGF1dGhfdHJhbnNhY3Rpb24sIHN0YSk7Ci0JREVCVUdGU19ERUwoZmxhZ3MsIHN0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlbF9hcF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTM3Myw2ICszMzEsOCBAQAogCiBzdGF0aWMgdm9pZCBkZWxfbWVzaF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlNRVNIU1RBVFNfREVMKGZ3ZGVkX21jYXN0KTsKKwlNRVNIU1RBVFNfREVMKGZ3ZGVkX3VuaWNhc3QpOwogCU1FU0hTVEFUU19ERUwoZndkZWRfZnJhbWVzKTsKIAlNRVNIU1RBVFNfREVMKGRyb3BwZWRfZnJhbWVzX3R0bCk7CiAJTUVTSFNUQVRTX0RFTChkcm9wcGVkX2ZyYW1lc19ub19yb3V0ZSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCmluZGV4IDkwMjMwYzcuLjMzYTJlODkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX3N0YS5jCkBAIC0xMjAsNDUgKzEyMCwzOCBAQAogc3RhdGljIHNzaXplX3Qgc3RhX2FnZ19zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmWzc2OF0sICpwID0gYnVmOworCWNoYXIgYnVmWzMwICsgU1RBX1RJRF9OVU0gKiA3MF0sICpwID0gYnVmOwogCWludCBpOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiQWdnIHN0YXRlIGZvciBTVEEgaXM6XG4iKTsKLQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiBTVEEgbmV4dCBkaWFsb2dfdG9rZW4gaXMgJWQgXG4gIgotCQkJIlRJRHMgaW5mbyBpczogXG4gVElEIDoiLAotCQkJKHN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yICsgMSkpOwotCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsIGkpOwogCi0JcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiBSWCAgOiIpOwotCWZvciAoaSA9IDA7IGkgPCBTVEFfVElEX05VTTsgaSsrKQotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiU1ZCIsCi0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldKTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJuZXh0IGRpYWxvZ190b2tlbiBpcyAlIzAyeFxuIiwKKwkJCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yICsgMSk7CisJZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspIHsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJUSUQgJTAyZDoiLCBpKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIgUlg9JXgiLAorCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0pOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIi9EVEtOPSUjLjJ4IiwKKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID8KKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5kaWFsb2dfdG9rZW4gOiAwKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvU1NOPSUjLjN4IiwKKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID8KKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zc24gOiAwKTsKIAotCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiXG4gRFRLTjoiKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIlNWQiLAotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFtpXSA/Ci0JCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5kaWFsb2dfdG9rZW4gOiAwKTsKLQotCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiXG4gVFggIDoiKTsKLQlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIlNWQiLAotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSk7Ci0KLQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuIERUS046Iik7Ci0JZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspCi0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiJTVkIiwKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0gPwotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+ZGlhbG9nX3Rva2VuIDogMCk7Ci0KLQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuIFNTTiA6Iik7Ci0JZm9yIChpID0gMDsgaSA8IFNUQV9USURfTlVNOyBpKyspCi0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiJTVkIiwKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbaV0gPwotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+c3NuIDogMCk7Ci0KLQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuIik7CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiIFRYPSV4IiwKKwkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvRFRLTj0lIy4yeCIsCisJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/CisJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+ZGlhbG9nX3Rva2VuIDogMCk7CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiL1NTTj0lIy4zeCIsCisJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/CisJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+c3NuIDogMCk7CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiL3BlbmRpbmc9JTAzZCIsCisJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/CisJCQkJc2tiX3F1ZXVlX2xlbigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+cGVuZGluZykgOiAwKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiIpOworCX0KKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwIC0gYnVmKTsKIH0KQEAgLTIwMyw2ICsxOTYsMjIgQEAKIAlERUJVR0ZTX0FERChpbmFjdGl2ZV9tcyk7CiAJREVCVUdGU19BREQobGFzdF9zZXFfY3RybCk7CiAJREVCVUdGU19BREQoYWdnX3N0YXR1cyk7CisJREVCVUdGU19BREQoZGV2KTsKKwlERUJVR0ZTX0FERChyeF9wYWNrZXRzKTsKKwlERUJVR0ZTX0FERCh0eF9wYWNrZXRzKTsKKwlERUJVR0ZTX0FERChyeF9ieXRlcyk7CisJREVCVUdGU19BREQodHhfYnl0ZXMpOworCURFQlVHRlNfQUREKHJ4X2R1cGxpY2F0ZXMpOworCURFQlVHRlNfQUREKHJ4X2ZyYWdtZW50cyk7CisJREVCVUdGU19BREQocnhfZHJvcHBlZCk7CisJREVCVUdGU19BREQodHhfZnJhZ21lbnRzKTsKKwlERUJVR0ZTX0FERCh0eF9maWx0ZXJlZCk7CisJREVCVUdGU19BREQodHhfcmV0cnlfZmFpbGVkKTsKKwlERUJVR0ZTX0FERCh0eF9yZXRyeV9jb3VudCk7CisJREVCVUdGU19BREQobGFzdF9zaWduYWwpOworCURFQlVHRlNfQUREKGxhc3RfcXVhbCk7CisJREVCVUdGU19BREQobGFzdF9ub2lzZSk7CisJREVCVUdGU19BREQod2VwX3dlYWtfaXZfY291bnQpOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdGFfZGVidWdmc19yZW1vdmUoc3RydWN0IHN0YV9pbmZvICpzdGEpCkBAIC0yMTIsNiArMjIxLDIzIEBACiAJREVCVUdGU19ERUwoaW5hY3RpdmVfbXMpOwogCURFQlVHRlNfREVMKGxhc3Rfc2VxX2N0cmwpOwogCURFQlVHRlNfREVMKGFnZ19zdGF0dXMpOworCURFQlVHRlNfREVMKGFpZCk7CisJREVCVUdGU19ERUwoZGV2KTsKKwlERUJVR0ZTX0RFTChyeF9wYWNrZXRzKTsKKwlERUJVR0ZTX0RFTCh0eF9wYWNrZXRzKTsKKwlERUJVR0ZTX0RFTChyeF9ieXRlcyk7CisJREVCVUdGU19ERUwodHhfYnl0ZXMpOworCURFQlVHRlNfREVMKHJ4X2R1cGxpY2F0ZXMpOworCURFQlVHRlNfREVMKHJ4X2ZyYWdtZW50cyk7CisJREVCVUdGU19ERUwocnhfZHJvcHBlZCk7CisJREVCVUdGU19ERUwodHhfZnJhZ21lbnRzKTsKKwlERUJVR0ZTX0RFTCh0eF9maWx0ZXJlZCk7CisJREVCVUdGU19ERUwodHhfcmV0cnlfZmFpbGVkKTsKKwlERUJVR0ZTX0RFTCh0eF9yZXRyeV9jb3VudCk7CisJREVCVUdGU19ERUwobGFzdF9zaWduYWwpOworCURFQlVHRlNfREVMKGxhc3RfcXVhbCk7CisJREVCVUdGU19ERUwobGFzdF9ub2lzZSk7CisJREVCVUdGU19ERUwod2VwX3dlYWtfaXZfY291bnQpOwogCiAJZGVidWdmc19yZW1vdmUoc3RhLT5kZWJ1Z2ZzLmRpcik7CiAJc3RhLT5kZWJ1Z2ZzLmRpciA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaAppbmRleCBiMTM0NDZhLi4wMjBhOTRhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgImRyaXZlci10cmFjZS5oIgogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMSwyOSArMTIsNDkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCXJldHVybiBsb2NhbC0+b3BzLT5zdGFydCgmbG9jYWwtPmh3KTsKKwlpbnQgcmV0OworCisJbG9jYWwtPnN0YXJ0ZWQgPSB0cnVlOworCXNtcF9tYigpOworCXJldCA9IGxvY2FsLT5vcHMtPnN0YXJ0KCZsb2NhbC0+aHcpOworCXRyYWNlX2Rydl9zdGFydChsb2NhbCwgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJbG9jYWwtPm9wcy0+c3RvcCgmbG9jYWwtPmh3KTsKKwl0cmFjZV9kcnZfc3RvcChsb2NhbCk7CisKKwkvKiBzeW5jIGF3YXkgYWxsIHdvcmsgb24gdGhlIHRhc2tsZXQgYmVmb3JlIGNsZWFyaW5nIHN0YXJ0ZWQgKi8KKwl0YXNrbGV0X2Rpc2FibGUoJmxvY2FsLT50YXNrbGV0KTsKKwl0YXNrbGV0X2VuYWJsZSgmbG9jYWwtPnRhc2tsZXQpOworCisJYmFycmllcigpOworCisJbG9jYWwtPnN0YXJ0ZWQgPSBmYWxzZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewotCXJldHVybiBsb2NhbC0+b3BzLT5hZGRfaW50ZXJmYWNlKCZsb2NhbC0+aHcsIGNvbmYpOworCWludCByZXQgPSBsb2NhbC0+b3BzLT5hZGRfaW50ZXJmYWNlKCZsb2NhbC0+aHcsIGNvbmYpOworCXRyYWNlX2Rydl9hZGRfaW50ZXJmYWNlKGxvY2FsLCBjb25mLT5tYWNfYWRkciwgY29uZi0+dmlmLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7CiAJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZSgmbG9jYWwtPmh3LCBjb25mKTsKKwl0cmFjZV9kcnZfcmVtb3ZlX2ludGVyZmFjZShsb2NhbCwgY29uZi0+bWFjX2FkZHIsIGNvbmYtPnZpZik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiBjaGFuZ2VkKQogewotCXJldHVybiBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7CisJaW50IHJldCA9IGxvY2FsLT5vcHMtPmNvbmZpZygmbG9jYWwtPmh3LCBjaGFuZ2VkKTsKKwl0cmFjZV9kcnZfY29uZmlnKGxvY2FsLCBjaGFuZ2VkLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTQzLDI0ICs2NCw0NSBAQAogewogCWlmIChsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKQogCQlsb2NhbC0+b3BzLT5ic3NfaW5mb19jaGFuZ2VkKCZsb2NhbC0+aHcsIHZpZiwgaW5mbywgY2hhbmdlZCk7CisJdHJhY2VfZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsIHZpZiwgaW5mbywgY2hhbmdlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGRydl9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJaW50IG1jX2NvdW50LAorCQkJCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwl1NjQgcmV0ID0gMDsKKworCWlmIChsb2NhbC0+b3BzLT5wcmVwYXJlX211bHRpY2FzdCkKKwkJcmV0ID0gbG9jYWwtPm9wcy0+cHJlcGFyZV9tdWx0aWNhc3QoJmxvY2FsLT5odywgbWNfY291bnQsCisJCQkJCQkgICAgbWNfbGlzdCk7CisKKwl0cmFjZV9kcnZfcHJlcGFyZV9tdWx0aWNhc3QobG9jYWwsIG1jX2NvdW50LCByZXQpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCQl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKIAkJCQkJdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkJaW50IG1jX2NvdW50LAotCQkJCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKKwkJCQkJdTY0IG11bHRpY2FzdCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJbG9jYWwtPm9wcy0+Y29uZmlndXJlX2ZpbHRlcigmbG9jYWwtPmh3LCBjaGFuZ2VkX2ZsYWdzLCB0b3RhbF9mbGFncywKLQkJCQkgICAgIG1jX2NvdW50LCBtY19saXN0KTsKKwkJCQkgICAgIG11bHRpY2FzdCk7CisJdHJhY2VfZHJ2X2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwsIGNoYW5nZWRfZmxhZ3MsIHRvdGFsX2ZsYWdzLAorCQkJCSAgIG11bHRpY2FzdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBzZXQpCiB7CisJaW50IHJldCA9IDA7CiAJaWYgKGxvY2FsLT5vcHMtPnNldF90aW0pCi0JCXJldHVybiBsb2NhbC0+b3BzLT5zZXRfdGltKCZsb2NhbC0+aHcsIHN0YSwgc2V0KTsKLQlyZXR1cm4gMDsKKwkJcmV0ID0gbG9jYWwtPm9wcy0+c2V0X3RpbSgmbG9jYWwtPmh3LCBzdGEsIHNldCk7CisJdHJhY2VfZHJ2X3NldF90aW0obG9jYWwsIHN0YSwgc2V0LCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtNjgsNyArMTEwLDkgQEAKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7Ci0JcmV0dXJuIGxvY2FsLT5vcHMtPnNldF9rZXkoJmxvY2FsLT5odywgY21kLCB2aWYsIHN0YSwga2V5KTsKKwlpbnQgcmV0ID0gbG9jYWwtPm9wcy0+c2V0X2tleSgmbG9jYWwtPmh3LCBjbWQsIHZpZiwgc3RhLCBrZXkpOworCXRyYWNlX2Rydl9zZXRfa2V5KGxvY2FsLCBjbWQsIHZpZiwgc3RhLCBrZXksIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl91cGRhdGVfdGtpcF9rZXkoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC03OSwzMiArMTIzLDQxIEBACiAJaWYgKGxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSkKIAkJbG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5KCZsb2NhbC0+aHcsIGNvbmYsIGFkZHJlc3MsCiAJCQkJCSAgICBpdjMyLCBwaGFzZTFrZXkpOworCXRyYWNlX2Rydl91cGRhdGVfdGtpcF9rZXkobG9jYWwsIGNvbmYsIGFkZHJlc3MsIGl2MzIpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKLQlyZXR1cm4gbG9jYWwtPm9wcy0+aHdfc2NhbigmbG9jYWwtPmh3LCByZXEpOworCWludCByZXQgPSBsb2NhbC0+b3BzLT5od19zY2FuKCZsb2NhbC0+aHcsIHJlcSk7CisJdHJhY2VfZHJ2X2h3X3NjYW4obG9jYWwsIHJlcSwgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N3X3NjYW5fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQpCiAJCWxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQoJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X3N3X3NjYW5fc3RhcnQobG9jYWwpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUpCiAJCWxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUoJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKLQlpZiAoIWxvY2FsLT5vcHMtPmdldF9zdGF0cykKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBsb2NhbC0+b3BzLT5nZXRfc3RhdHMoJmxvY2FsLT5odywgc3RhdHMpOworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmIChsb2NhbC0+b3BzLT5nZXRfc3RhdHMpCisJCXJldCA9IGxvY2FsLT5vcHMtPmdldF9zdGF0cygmbG9jYWwtPmh3LCBzdGF0cyk7CisJdHJhY2VfZHJ2X2dldF9zdGF0cyhsb2NhbCwgc3RhdHMsIHJldCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X2dldF90a2lwX3NlcShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTExMiwxNCArMTY1LDE3IEBACiB7CiAJaWYgKGxvY2FsLT5vcHMtPmdldF90a2lwX3NlcSkKIAkJbG9jYWwtPm9wcy0+Z2V0X3RraXBfc2VxKCZsb2NhbC0+aHcsIGh3X2tleV9pZHgsIGl2MzIsIGl2MTYpOworCXRyYWNlX2Rydl9nZXRfdGtpcF9zZXEobG9jYWwsIGh3X2tleV9pZHgsIGl2MzIsIGl2MTYpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJCXUzMiB2YWx1ZSkKIHsKKwlpbnQgcmV0ID0gMDsKIAlpZiAobG9jYWwtPm9wcy0+c2V0X3J0c190aHJlc2hvbGQpCi0JCXJldHVybiBsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZCgmbG9jYWwtPmh3LCB2YWx1ZSk7Ci0JcmV0dXJuIDA7CisJCXJldCA9IGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKCZsb2NhbC0+aHcsIHZhbHVlKTsKKwl0cmFjZV9kcnZfc2V0X3J0c190aHJlc2hvbGQobG9jYWwsIHZhbHVlLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKQEAgLTEyOSw0NiArMTg1LDU3IEBACiB7CiAJaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpCiAJCWxvY2FsLT5vcHMtPnN0YV9ub3RpZnkoJmxvY2FsLT5odywgdmlmLCBjbWQsIHN0YSk7CisJdHJhY2VfZHJ2X3N0YV9ub3RpZnkobG9jYWwsIHZpZiwgY21kLCBzdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IHF1ZXVlLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKIHsKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CiAJaWYgKGxvY2FsLT5vcHMtPmNvbmZfdHgpCi0JCXJldHVybiBsb2NhbC0+b3BzLT5jb25mX3R4KCZsb2NhbC0+aHcsIHF1ZXVlLCBwYXJhbXMpOwotCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0ID0gbG9jYWwtPm9wcy0+Y29uZl90eCgmbG9jYWwtPmh3LCBxdWV1ZSwgcGFyYW1zKTsKKwl0cmFjZV9kcnZfY29uZl90eChsb2NhbCwgcXVldWUsIHBhcmFtcywgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQogewotCXJldHVybiBsb2NhbC0+b3BzLT5nZXRfdHhfc3RhdHMoJmxvY2FsLT5odywgc3RhdHMpOworCWludCByZXQgPSBsb2NhbC0+b3BzLT5nZXRfdHhfc3RhdHMoJmxvY2FsLT5odywgc3RhdHMpOworCXRyYWNlX2Rydl9nZXRfdHhfc3RhdHMobG9jYWwsIHN0YXRzLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGRydl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogeworCXU2NCByZXQgPSAtMVVMTDsKIAlpZiAobG9jYWwtPm9wcy0+Z2V0X3RzZikKLQkJcmV0dXJuIGxvY2FsLT5vcHMtPmdldF90c2YoJmxvY2FsLT5odyk7Ci0JcmV0dXJuIC0xVUxMOworCQlyZXQgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKCZsb2NhbC0+aHcpOworCXRyYWNlX2Rydl9nZXRfdHNmKGxvY2FsLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTY0IHRzZikKIHsKIAlpZiAobG9jYWwtPm9wcy0+c2V0X3RzZikKIAkJbG9jYWwtPm9wcy0+c2V0X3RzZigmbG9jYWwtPmh3LCB0c2YpOworCXRyYWNlX2Rydl9zZXRfdHNmKGxvY2FsLCB0c2YpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKQogCQlsb2NhbC0+b3BzLT5yZXNldF90c2YoJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X3Jlc2V0X3RzZihsb2NhbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl90eF9sYXN0X2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKKwlpbnQgcmV0ID0gMTsKIAlpZiAobG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24pCi0JCXJldHVybiBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbigmbG9jYWwtPmh3KTsKLQlyZXR1cm4gMTsKKwkJcmV0ID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24oJmxvY2FsLT5odyk7CisJdHJhY2VfZHJ2X3R4X2xhc3RfYmVhY29uKGxvY2FsLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC0xNzYsMTAgKzI0MywxMiBAQAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsCiAJCQkJICAgdTE2ICpzc24pCiB7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldHVybiBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgYWN0aW9uLAotCQkJCQkJc3RhLCB0aWQsIHNzbik7Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOworCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgYWN0aW9uLAorCQkJCQkgICAgICAgc3RhLCB0aWQsIHNzbik7CisJdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgYWN0aW9uLCBzdGEsIHRpZCwgc3NuLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5jIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDg3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmMKQEAgLTAsMCArMSw5IEBACisvKiBidWcgaW4gdHJhY2Vwb2ludC5oLCBpdCBzaG91bGQgaW5jbHVkZSB0aGlzICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKy8qIHNwYXJzZSBpc24ndCB0b28gaGFwcHkgd2l0aCBhbGwgbWFjcm9zLi4uICovCisjaWZuZGVmIF9fQ0hFQ0tFUl9fCisjaW5jbHVkZSAiZHJpdmVyLW9wcy5oIgorI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSAiZHJpdmVyLXRyYWNlLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaCBiL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2I5MDUxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCkBAIC0wLDAgKzEsNjcyIEBACisjaWYgIWRlZmluZWQoX19NQUM4MDIxMV9EUklWRVJfVFJBQ0UpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9fTUFDODAyMTFfRFJJVkVSX1RSQUNFCisKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKworI2lmICFkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9EUklWRVJfQVBJX1RSQUNFUikgfHwgZGVmaW5lZChfX0NIRUNLRVJfXykKKyN1bmRlZiBUUkFDRV9FVkVOVAorI2RlZmluZSBUUkFDRV9FVkVOVChuYW1lLCBwcm90bywgLi4uKSBcCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfICMjIG5hbWUocHJvdG8pIHt9CisjZW5kaWYKKworI3VuZGVmIFRSQUNFX1NZU1RFTQorI2RlZmluZSBUUkFDRV9TWVNURU0gbWFjODAyMTEKKworI2RlZmluZSBNQVhOQU1FCQkzMgorI2RlZmluZSBMT0NBTF9FTlRSWQlfX2FycmF5KGNoYXIsIHdpcGh5X25hbWUsIDMyKQorI2RlZmluZSBMT0NBTF9BU1NJR04Jc3RybGNweShfX2VudHJ5LT53aXBoeV9uYW1lLCB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIE1BWE5BTUUpCisjZGVmaW5lIExPQ0FMX1BSX0ZNVAkiJXMiCisjZGVmaW5lIExPQ0FMX1BSX0FSRwlfX2VudHJ5LT53aXBoeV9uYW1lCisKKyNkZWZpbmUgU1RBX0VOVFJZCV9fYXJyYXkoY2hhciwgc3RhX2FkZHIsIEVUSF9BTEVOKQorI2RlZmluZSBTVEFfQVNTSUdOCShzdGEgPyBtZW1jcHkoX19lbnRyeS0+c3RhX2FkZHIsIHN0YS0+YWRkciwgRVRIX0FMRU4pIDogbWVtc2V0KF9fZW50cnktPnN0YV9hZGRyLCAwLCBFVEhfQUxFTikpCisjZGVmaW5lIFNUQV9QUl9GTVQJIiBzdGE6JXBNIgorI2RlZmluZSBTVEFfUFJfQVJHCV9fZW50cnktPnN0YV9hZGRyCisKKyNkZWZpbmUgVklGX0VOVFJZCV9fZmllbGQoZW51bSBubDgwMjExX2lmdHlwZSwgdmlmX3R5cGUpIF9fZmllbGQodm9pZCAqLCB2aWYpCisjZGVmaW5lIFZJRl9BU1NJR04JX19lbnRyeS0+dmlmX3R5cGUgPSB2aWYgPyB2aWYtPnR5cGUgOiAwOyBfX2VudHJ5LT52aWYgPSB2aWYKKyNkZWZpbmUgVklGX1BSX0ZNVAkiIHZpZjolcCglZCkiCisjZGVmaW5lIFZJRl9QUl9BUkcJX19lbnRyeS0+dmlmLCBfX2VudHJ5LT52aWZfdHlwZQorCitUUkFDRV9FVkVOVChkcnZfc3RhcnQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQsIExPQ0FMX1BSX0FSRworCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9zdG9wLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKSwKKworCVRQX0FSR1MobG9jYWwpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQsIExPQ0FMX1BSX0FSRworCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9hZGRfaW50ZXJmYWNlLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgY29uc3QgdTggKmFkZHIsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBhZGRyLCB2aWYsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJX19hcnJheShjaGFyLCBhZGRyLCA2KQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlWSUZfQVNTSUdOOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgYWRkciwgNik7CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIF9fZW50cnktPmFkZHIsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9yZW1vdmVfaW50ZXJmYWNlLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpLAorCisJVFBfQVJHUyhsb2NhbCwgYWRkciwgdmlmKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCVZJRl9FTlRSWQorCQlfX2FycmF5KGNoYXIsIGFkZHIsIDYpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJCW1lbWNweShfX2VudHJ5LT5hZGRyLCBhZGRyLCA2KTsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIFZJRl9QUl9GTVQgIiBhZGRyOiVwTSIsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgX19lbnRyeS0+YWRkcgorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9jb25maWcsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSB1MzIgY2hhbmdlZCwKKwkJIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgY2hhbmdlZCwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodTMyLCBjaGFuZ2VkKQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5jaGFuZ2VkID0gY2hhbmdlZDsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIGNoOiUjeCByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPmNoYW5nZWQsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9ic3NfaW5mb19jaGFuZ2VkLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCisJCSB1MzIgY2hhbmdlZCksCisKKwlUUF9BUkdTKGxvY2FsLCB2aWYsIGluZm8sIGNoYW5nZWQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJVklGX0VOVFJZCisJCV9fZmllbGQoYm9vbCwgYXNzb2MpCisJCV9fZmllbGQodTE2LCBhaWQpCisJCV9fZmllbGQoYm9vbCwgY3RzKQorCQlfX2ZpZWxkKGJvb2wsIHNob3J0cHJlKQorCQlfX2ZpZWxkKGJvb2wsIHNob3J0c2xvdCkKKwkJX19maWVsZCh1OCwgZHRpbXBlcikKKwkJX19maWVsZCh1MTYsIGJjbmludCkKKwkJX19maWVsZCh1MTYsIGFzc29jX2NhcCkKKwkJX19maWVsZCh1NjQsIHRpbWVzdGFtcCkKKwkJX19maWVsZCh1MzIsIGJhc2ljX3JhdGVzKQorCQlfX2ZpZWxkKHUzMiwgY2hhbmdlZCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJVklGX0FTU0lHTjsKKwkJX19lbnRyeS0+Y2hhbmdlZCA9IGNoYW5nZWQ7CisJCV9fZW50cnktPmFpZCA9IGluZm8tPmFpZDsKKwkJX19lbnRyeS0+YXNzb2MgPSBpbmZvLT5hc3NvYzsKKwkJX19lbnRyeS0+c2hvcnRwcmUgPSBpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGU7CisJCV9fZW50cnktPmN0cyA9IGluZm8tPnVzZV9jdHNfcHJvdDsKKwkJX19lbnRyeS0+c2hvcnRzbG90ID0gaW5mby0+dXNlX3Nob3J0X3Nsb3Q7CisJCV9fZW50cnktPmR0aW1wZXIgPSBpbmZvLT5kdGltX3BlcmlvZDsKKwkJX19lbnRyeS0+YmNuaW50ID0gaW5mby0+YmVhY29uX2ludDsKKwkJX19lbnRyeS0+YXNzb2NfY2FwID0gaW5mby0+YXNzb2NfY2FwYWJpbGl0eTsKKwkJX19lbnRyeS0+dGltZXN0YW1wID0gaW5mby0+dGltZXN0YW1wOworCQlfX2VudHJ5LT5iYXNpY19yYXRlcyA9IGluZm8tPmJhc2ljX3JhdGVzOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAiIGNoYW5nZWQ6JSN4IiwKKwkJTE9DQUxfUFJfQVJHLCBWSUZfUFJfQVJHLCBfX2VudHJ5LT5jaGFuZ2VkCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3ByZXBhcmVfbXVsdGljYXN0LAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBpbnQgbWNfY291bnQsIHU2NCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgbWNfY291bnQsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKGludCwgbWNfY291bnQpCisJCV9fZmllbGQodTY0LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPm1jX2NvdW50ID0gbWNfY291bnQ7CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiBwcmVwYXJlIG1jICglZCk6ICVsbHgiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPm1jX2NvdW50LAorCQkodW5zaWduZWQgbG9uZyBsb25nKSBfX2VudHJ5LT5yZXQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfY29uZmlndXJlX2ZpbHRlciwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJIHU2NCBtdWx0aWNhc3QpLAorCisJVFBfQVJHUyhsb2NhbCwgY2hhbmdlZF9mbGFncywgdG90YWxfZmxhZ3MsIG11bHRpY2FzdCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgY2hhbmdlZCkKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIHRvdGFsKQorCQlfX2ZpZWxkKHU2NCwgbXVsdGljYXN0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5jaGFuZ2VkID0gY2hhbmdlZF9mbGFnczsKKwkJX19lbnRyeS0+dG90YWwgPSAqdG90YWxfZmxhZ3M7CisJCV9fZW50cnktPm11bHRpY2FzdCA9IG11bHRpY2FzdDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiBjaGFuZ2VkOiUjeCB0b3RhbDolI3giLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPmNoYW5nZWQsIF9fZW50cnktPnRvdGFsCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3NldF90aW0sCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNldCwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCBzdGEsIHNldCwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCVNUQV9FTlRSWQorCQlfX2ZpZWxkKGJvb2wsIHNldCkKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJU1RBX0FTU0lHTjsKKwkJX19lbnRyeS0+c2V0ID0gc2V0OworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UIFNUQV9QUl9GTVQgIiBzZXQ6JWQgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBTVEFfUFJfRk1ULCBfX2VudHJ5LT5zZXQsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9zZXRfa2V5LAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgZW51bSBzZXRfa2V5X2NtZCBjbWQsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCBpbnQgcmV0KSwKKworCVRQX0FSR1MobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCVZJRl9FTlRSWQorCQlTVEFfRU5UUlkKKwkJX19maWVsZChlbnVtIGllZWU4MDIxMV9rZXlfYWxnLCBhbGcpCisJCV9fZmllbGQodTgsIGh3X2tleV9pZHgpCisJCV9fZmllbGQodTgsIGZsYWdzKQorCQlfX2ZpZWxkKHM4LCBrZXlpZHgpCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJCVNUQV9BU1NJR047CisJCV9fZW50cnktPmFsZyA9IGtleS0+YWxnOworCQlfX2VudHJ5LT5mbGFncyA9IGtleS0+ZmxhZ3M7CisJCV9fZW50cnktPmtleWlkeCA9IGtleS0+a2V5aWR4OworCQlfX2VudHJ5LT5od19rZXlfaWR4ID0ga2V5LT5od19rZXlfaWR4OworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICBWSUZfUFJfRk1UICBTVEFfUFJfRk1UICIgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBWSUZfUFJfQVJHLCBTVEFfUFJfQVJHLCBfX2VudHJ5LT5yZXQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfdXBkYXRlX3RraXBfa2V5LAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqY29uZiwKKwkJIGNvbnN0IHU4ICphZGRyZXNzLCB1MzIgaXYzMiksCisKKwlUUF9BUkdTKGxvY2FsLCBjb25mLCBhZGRyZXNzLCBpdjMyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fYXJyYXkodTgsIGFkZHIsIDYpCisJCV9fZmllbGQodTMyLCBpdjMyKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgYWRkcmVzcywgNik7CisJCV9fZW50cnktPml2MzIgPSBpdjMyOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIGFkZHI6JXBNIGl2MzI6JSN4IiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5hZGRyLCBfX2VudHJ5LT5pdjMyCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2h3X3NjYW4sCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEsIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgcmVxLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3N3X3NjYW5fc3RhcnQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAorCisJVFBfQVJHUyhsb2NhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3N3X3NjYW5fY29tcGxldGUsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpLAorCisJVFBfQVJHUyhsb2NhbCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCwgTE9DQUxfUFJfQVJHCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X2dldF9zdGF0cywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cywKKwkJIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgc3RhdHMsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKGludCwgcmV0KQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgYWNrZmFpbCkKKwkJX19maWVsZCh1bnNpZ25lZCBpbnQsIHJ0c2ZhaWwpCisJCV9fZmllbGQodW5zaWduZWQgaW50LCBmY3NlcnIpCisJCV9fZmllbGQodW5zaWduZWQgaW50LCBydHNzdWNjKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJCV9fZW50cnktPmFja2ZhaWwgPSBzdGF0cy0+ZG90MTFBQ0tGYWlsdXJlQ291bnQ7CisJCV9fZW50cnktPnJ0c2ZhaWwgPSBzdGF0cy0+ZG90MTFSVFNGYWlsdXJlQ291bnQ7CisJCV9fZW50cnktPmZjc2VyciA9IHN0YXRzLT5kb3QxMUZDU0Vycm9yQ291bnQ7CisJCV9fZW50cnktPnJ0c3N1Y2MgPSBzdGF0cy0+ZG90MTFSVFNTdWNjZXNzQ291bnQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5yZXQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfZ2V0X3RraXBfc2VxLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgdTggaHdfa2V5X2lkeCwgdTMyICppdjMyLCB1MTYgKml2MTYpLAorCisJVFBfQVJHUyhsb2NhbCwgaHdfa2V5X2lkeCwgaXYzMiwgaXYxNiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHU4LCBod19rZXlfaWR4KQorCQlfX2ZpZWxkKHUzMiwgaXYzMikKKwkJX19maWVsZCh1MTYsIGl2MTYpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPmh3X2tleV9pZHggPSBod19rZXlfaWR4OworCQlfX2VudHJ5LT5pdjMyID0gKml2MzI7CisJCV9fZW50cnktPml2MTYgPSAqaXYxNjsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQsIExPQ0FMX1BSX0FSRworCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9zZXRfcnRzX3RocmVzaG9sZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTMyIHZhbHVlLCBpbnQgcmV0KSwKKworCVRQX0FSR1MobG9jYWwsIHZhbHVlLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZCh1MzIsIHZhbHVlKQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT52YWx1ZSwgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3N0YV9ub3RpZnksCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKSwKKworCVRQX0FSR1MobG9jYWwsIHZpZiwgY21kLCBzdGEpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJVklGX0VOVFJZCisJCVNUQV9FTlRSWQorCQlfX2ZpZWxkKHUzMiwgY21kKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlWSUZfQVNTSUdOOworCQlTVEFfQVNTSUdOOworCQlfX2VudHJ5LT5jbWQgPSBjbWQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICBWSUZfUFJfRk1UICBTVEFfUFJfRk1UICIgY21kOiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBWSUZfUFJfQVJHLCBTVEFfUFJfQVJHLCBfX2VudHJ5LT5jbWQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfY29uZl90eCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IHF1ZXVlLAorCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcywKKwkJIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgcXVldWUsIHBhcmFtcywgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodTE2LCBxdWV1ZSkKKwkJX19maWVsZCh1MTYsIHR4b3ApCisJCV9fZmllbGQodTE2LCBjd19taW4pCisJCV9fZmllbGQodTE2LCBjd19tYXgpCisJCV9fZmllbGQodTgsIGFpZnMpCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnF1ZXVlID0gcXVldWU7CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkJX19lbnRyeS0+dHhvcCA9IHBhcmFtcy0+dHhvcDsKKwkJX19lbnRyeS0+Y3dfbWF4ID0gcGFyYW1zLT5jd19tYXg7CisJCV9fZW50cnktPmN3X21pbiA9IHBhcmFtcy0+Y3dfbWluOworCQlfX2VudHJ5LT5haWZzID0gcGFyYW1zLT5haWZzOworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIHF1ZXVlOiVkIHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+cXVldWUsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9nZXRfdHhfc3RhdHMsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cywKKwkJIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgc3RhdHMsIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT5yZXQKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfZ2V0X3RzZiwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTY0IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJX19maWVsZCh1NjQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAiIHJldDolbGx1IiwKKwkJTE9DQUxfUFJfQVJHLCAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9zZXRfdHNmLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1NjQgdHNmKSwKKworCVRQX0FSR1MobG9jYWwsIHRzZiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlfX2ZpZWxkKHU2NCwgdHNmKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT50c2YgPSB0c2Y7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdHNmOiVsbHUiLAorCQlMT0NBTF9QUl9BUkcsICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+dHNmCisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3Jlc2V0X3RzZiwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCksCisKKwlUUF9BUkdTKGxvY2FsKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1ULCBMT0NBTF9QUl9BUkcKKwkpCispOworCitUUkFDRV9FVkVOVChkcnZfdHhfbGFzdF9iZWFjb24sCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKAorCQlMT0NBTF9QUl9GTVQgIiByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIF9fZW50cnktPnJldAorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGRydl9hbXBkdV9hY3Rpb24sCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLAorCQkgdTE2ICpzc24sIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgYWN0aW9uLCBzdGEsIHRpZCwgc3NuLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJTE9DQUxfRU5UUlkKKwkJU1RBX0VOVFJZCisJCV9fZmllbGQodTMyLCBhY3Rpb24pCisJCV9fZmllbGQodTE2LCB0aWQpCisJCV9fZmllbGQodTE2LCBzc24pCisJCV9fZmllbGQoaW50LCByZXQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVNUQV9BU1NJR047CisJCV9fZW50cnktPnJldCA9IHJldDsKKwkJX19lbnRyeS0+YWN0aW9uID0gYWN0aW9uOworCQlfX2VudHJ5LT50aWQgPSB0aWQ7CisJCV9fZW50cnktPnNzbiA9ICpzc247CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICBTVEFfUFJfRk1UICIgYWN0aW9uOiVkIHRpZDolZCByZXQ6JWQiLAorCQlMT0NBTF9QUl9BUkcsIFNUQV9QUl9BUkcsIF9fZW50cnktPmFjdGlvbiwgX19lbnRyeS0+dGlkLCBfX2VudHJ5LT5yZXQKKwkpCispOworI2VuZGlmIC8qICFfX01BQzgwMjExX0RSSVZFUl9UUkFDRSB8fCBUUkFDRV9IRUFERVJfTVVMVElfUkVBRCAqLworCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9GSUxFCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSBkcml2ZXItdHJhY2UKKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9ldmVudC5jIGIvbmV0L21hYzgwMjExL2V2ZW50LmMKaW5kZXggZjI4OGQwMS4uMDFhZTc1OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2V2ZW50LmMKKysrIGIvbmV0L21hYzgwMjExL2V2ZW50LmMKQEAgLTcsOCArNyw3IEBACiAgKgogICogbWFjODAyMTEgLSBldmVudHMKICAqLwotCi0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogCiAvKgpAQCAtMTcsMjYgKzE2LDEyIEBACiAgKiBkcml2ZXIgb3IgaXMgc3RpbGwgaW4gdGhlIGZyYW1lKSwgaXQgc2hvdWxkIHByb3ZpZGUgdGhhdCBpbmZvcm1hdGlvbi4KICAqLwogdm9pZCBtYWM4MDIxMV9ldl9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQga2V5aWR4LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY29uc3QgdTggKnRzYykKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIGNvbnN0IHU4ICp0c2MsCisJCQkJICAgICBnZnBfdCBnZnApCiB7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWNoYXIgKmJ1ZiA9IGttYWxsb2MoMTI4LCBHRlBfQVRPTUlDKTsKLQotCWlmIChidWYpIHsKLQkJLyogVE9ETzogbmVlZGVkIHBhcmFtZXRlcnM6IGNvdW50LCBrZXkgdHlwZSwgVFNDICovCi0JCXNwcmludGYoYnVmLCAiTUxNRS1NSUNIQUVMTUlDRkFJTFVSRS5pbmRpY2F0aW9uKCIKLQkJCSJrZXlpZD0lZCAlc2Nhc3QgYWRkcj0lcE0pIiwKLQkJCWtleWlkeCwgaGRyLT5hZGRyMVswXSAmIDB4MDEgPyAiYnJvYWQiIDogInVuaSIsCi0JCQloZHItPmFkZHIyKTsKLQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCQl3cnF1LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgSVdFVkNVU1RPTSwgJndycXUsIGJ1Zik7Ci0JCWtmcmVlKGJ1Zik7Ci0JfQotCiAJY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShzZGF0YS0+ZGV2LCBoZHItPmFkZHIyLAogCQkJCSAgICAgKGhkci0+YWRkcjFbMF0gJiAweDAxKSA/CiAJCQkJICAgICBOTDgwMjExX0tFWVRZUEVfR1JPVVAgOgogCQkJCSAgICAgTkw4MDIxMV9LRVlUWVBFX1BBSVJXSVNFLAotCQkJCSAgICAga2V5aWR4LCB0c2MpOworCQkJCSAgICAga2V5aWR4LCB0c2MsIGdmcCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCAwYjMwMjc3Li45MjBlYzg3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkgKi8KIAlpZiAoYXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4gJiYgYXV0aF90cmFuc2FjdGlvbiA9PSAxKQogCQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAyLCBXTEFOX0FVVEhfT1BFTiwgTlVMTCwgMCwKLQkJCQkgICAgc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCk7CisJCQkJICAgIHNkYXRhLT51Lmlic3MuYnNzaWQsIE5VTEwsIDAsIDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtNDk0LDcgKzQ5NCw3IEBACiAKIAljYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CiAKLQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQorCWlmIChpZmlic3MtPnByaXZhY3kpCiAJCWNhcGFiaWxpdHkgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CiAJZWxzZQogCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9IDA7CkBAIC01MjQsOSArNTI0LDggQEAKIAkJcmV0dXJuOwogCiAJY2FwYWJpbGl0eSA9IFdMQU5fQ0FQQUJJTElUWV9JQlNTOwotCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCisJaWYgKGlmaWJzcy0+cHJpdmFjeSkKIAkJY2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQogCWlmIChpZmlic3MtPmZpeGVkX2Jzc2lkKQogCQlic3NpZCA9IGlmaWJzcy0+YnNzaWQ7CiAJaWYgKGlmaWJzcy0+Zml4ZWRfY2hhbm5lbCkKQEAgLTcwNSw3ICs3MDQsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKLQlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKKwlyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIApAQCAtNzQzLDcgKzc0Miw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQogCQlyZXR1cm47CiAKLQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKKwlpZiAobG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm47CiAKIAlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQpAQCAtNzgyLDcgKzc4MSw3IEBACiAJfQogCiAJc2V0X2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmaWZpYnNzLT5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZmlic3MtPndvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZmlic3MtPndvcmspOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC04MzYsOCArODM1LDcgQEAKIH0KIAogaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCitpZWVlODAyMTFfaWJzc19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKQEAgLTg1MiwxMSArODUwLDEwIEBACiAJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCW1lbWNweShza2ItPmNiLCByeF9zdGF0dXMsIHNpemVvZigqcnhfc3RhdHVzKSk7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVROgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6CiAJCXNrYl9xdWV1ZV90YWlsKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSwgc2tiKTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJnNkYXRhLT51Lmlic3Mud29yayk7CiAJCXJldHVybiBSWF9RVUVVRUQ7CiAJfQogCkBAIC04NzQsNiArODcxLDggQEAKIAl9IGVsc2UKIAkJc2RhdGEtPnUuaWJzcy5maXhlZF9ic3NpZCA9IGZhbHNlOwogCisJc2RhdGEtPnUuaWJzcy5wcml2YWN5ID0gcGFyYW1zLT5wcml2YWN5OworCiAJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gcGFyYW1zLT5iZWFjb25faW50ZXJ2YWw7CiAKIAlzZGF0YS0+dS5pYnNzLmNoYW5uZWwgPSBwYXJhbXMtPmNoYW5uZWw7CkBAIC05MTMsNyArOTEyLDcgQEAKIAlpZWVlODAyMTFfcmVjYWxjX2lkbGUoc2RhdGEtPmxvY2FsKTsKIAogCXNldF9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJnNkYXRhLT51Lmlic3MucmVxdWVzdCk7Ci0JcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lmlic3Mud29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5pYnNzLndvcmspOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDY4ZWI1MDUuLjU4ODAwNWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgotI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAia2V5LmgiCiAjaW5jbHVkZSAic3RhX2luZm8uaCIKQEAgLTIxMyw3ICsyMTIsOSBAQAogfTsKIAogc3RydWN0IG1lc2hfc3RhdHMgewotCV9fdTMyIGZ3ZGVkX2ZyYW1lczsJCS8qIE1lc2ggZm9yd2FyZGVkIGZyYW1lcyAqLworCV9fdTMyIGZ3ZGVkX21jYXN0OwkJLyogTWVzaCBmb3J3YXJkZWQgbXVsdGljYXN0IGZyYW1lcyAqLworCV9fdTMyIGZ3ZGVkX3VuaWNhc3Q7CQkvKiBNZXNoIGZvcndhcmRlZCB1bmljYXN0IGZyYW1lcyAqLworCV9fdTMyIGZ3ZGVkX2ZyYW1lczsJCS8qIE1lc2ggdG90YWwgZm9yd2FyZGVkIGZyYW1lcyAqLwogCV9fdTMyIGRyb3BwZWRfZnJhbWVzX3R0bDsJLyogTm90IHRyYW5zbWl0dGVkIHNpbmNlIG1lc2hfdHRsID09IDAqLwogCV9fdTMyIGRyb3BwZWRfZnJhbWVzX25vX3JvdXRlOwkvKiBOb3QgdHJhbnNtaXR0ZWQsIG5vIHJvdXRlIGZvdW5kICovCiAJYXRvbWljX3QgZXN0YWJfcGxpbmtzOwpAQCAtMjI3LDg2ICsyMjgsODEgQEAKIAl1OCBmbGFnczsKIH07CiAKLS8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQJCUJJVCgwKQotI2RlZmluZSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVAkJQklUKDEpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQJQklUKDIpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRAlCSVQoMykKLSNkZWZpbmUgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVECUJJVCg0KQotI2RlZmluZSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwJQklUKDUpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQ1JFQVRFX0lCU1MJQklUKDYpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUCUJJVCg3KQotI2RlZmluZSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVECUJJVCg4KQotLyogaG9sZSBhdCA5LCBwbGVhc2UgcmUtdXNlICovCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTAlCSVQoMTApCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwJQklUKDExKQotI2RlZmluZSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwJQklUKDEyKQotI2RlZmluZSBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRAlCSVQoMTMpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRAlCSVQoMTQpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECUJJVCgxNSkKLSNkZWZpbmUgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRAlCSVQoMTYpCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfRVhUX1NNRQkJQklUKDE3KQotLyogZmxhZ3MgZm9yIE1MTUUgcmVxdWVzdCAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9TQ0FOIDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfQVVUSCAxCi0jZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX1JVTiAgMgorZW51bSBpZWVlODAyMTFfbWdkX3N0YXRlIHsKKwlJRUVFODAyMTFfTUdEX1NUQVRFX0lETEUsCisJSUVFRTgwMjExX01HRF9TVEFURV9QUk9CRSwKKwlJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEgsCisJSUVFRTgwMjExX01HRF9TVEFURV9BU1NPQywKK307CiAKLS8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCi0jZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIEJJVCgwKQotI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSBCSVQoMSkKLSNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVAgQklUKDIpCi0jZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19GVCBCSVQoMykKK3N0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCWludCBpZV9sZW47CisJdTggcHJldl9ic3NpZFtFVEhfQUxFTl07CisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJZW51bSBpZWVlODAyMTFfbWdkX3N0YXRlIHN0YXRlOworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbjsKKworCWludCB0cmllczsKKworCXU4IGtleVtXTEFOX0tFWV9MRU5fV0VQMTA0XTsKKwl1OCBrZXlfbGVuLCBrZXlfaWR4OworCisJLyogbXVzdCBiZSBsYXN0ICovCisJdTggaWVbMF07IC8qIGZvciBhdXRoIG9yIGFzc29jIGZyYW1lLCBub3QgcHJvYmUgKi8KK307CisKKy8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCitlbnVtIGllZWU4MDIxMV9zdGFfZmxhZ3MgeworCUlFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwJPSBCSVQoMCksCisJSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwJPSBCSVQoMSksCisJSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQJPSBCSVQoMiksCisJSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRAk9IEJJVCgzKSwKKwlJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOCT0gQklUKDQpLAorCUlFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECT0gQklUKDUpLAorCUlFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQJPSBCSVQoNiksCit9OworCisvKiBmbGFncyBmb3IgTUxNRSByZXF1ZXN0ICovCitlbnVtIGllZWU4MDIxMV9zdGFfcmVxdWVzdCB7CisJSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwKK307CiAKIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgY29ubl9tb25fdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgYmNuX21vbl90aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBjaHN3aXRjaF90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbW9uaXRvcl93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBjaHN3aXRjaF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBiZWFjb25fbG9zc193b3JrOwogCi0JdTggYnNzaWRbRVRIX0FMRU5dLCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBsb25nIHByb2JlX3RpbWVvdXQ7CisJaW50IHByb2JlX3NlbmRfY291bnQ7CiAKLQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzc2lkX2xlbjsKKwlzdHJ1Y3QgbXV0ZXggbXR4OworCXN0cnVjdCBpZWVlODAyMTFfYnNzICphc3NvY2lhdGVkOworCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKm9sZF9hc3NvY2lhdGVfd29yazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdvcmtfbGlzdDsKIAotCWVudW0gewotCQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCi0JCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVELAotCX0gc3RhdGU7CisJdTggYnNzaWRbRVRIX0FMRU5dOwogCiAJdTE2IGFpZDsKLQl1MTYgYXBfY2FwYWIsIGNhcGFiOwotCXU4ICpleHRyYV9pZTsgLyogdG8gYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiBBc3NvY1JlcSAqLwotCXNpemVfdCBleHRyYV9pZV9sZW47Ci0KLQkvKiBUaGUgbGFzdCBBc3NvY1JlcS9SZXNwIElFcyAqLwotCXU4ICphc3NvY3JlcV9pZXMsICphc3NvY3Jlc3BfaWVzOwotCXNpemVfdCBhc3NvY3JlcV9pZXNfbGVuLCBhc3NvY3Jlc3BfaWVzX2xlbjsKKwl1MTYgY2FwYWI7CiAKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9xdWV1ZTsKIAotCWludCBhc3NvY19zY2FuX3RyaWVzOyAvKiBudW1iZXIgb2Ygc2NhbnMgZG9uZSBwcmUtYXNzb2NpYXRpb24gKi8KLQlpbnQgZGlyZWN0X3Byb2JlX3RyaWVzOyAvKiByZXRyaWVzIGZvciBkaXJlY3QgcHJvYmVzICovCi0JaW50IGF1dGhfdHJpZXM7IC8qIHJldHJpZXMgZm9yIGF1dGggcmVxICovCi0JaW50IGFzc29jX3RyaWVzOyAvKiByZXRyaWVzIGZvciBhc3NvYyByZXEgKi8KLQogCXVuc2lnbmVkIGxvbmcgdGltZXJzX3J1bm5pbmc7IC8qIHVzZWQgZm9yIHF1aWVzY2UvcmVzdGFydCAqLwogCWJvb2wgcG93ZXJzYXZlOyAvKiBwb3dlcnNhdmUgcmVxdWVzdGVkIGZvciB0aGlzIGlmYWNlICovCiAKIAl1bnNpZ25lZCBsb25nIHJlcXVlc3Q7CiAKLQl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmU7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X2JlYWNvbjsKLQogCXVuc2lnbmVkIGludCBmbGFnczsKIAotCXVuc2lnbmVkIGludCBhdXRoX2FsZ3M7IC8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCi0JaW50IGF1dGhfYWxnOyAvKiBjdXJyZW50bHkgdXNlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gKi8KLQlpbnQgYXV0aF90cmFuc2FjdGlvbjsKLQogCXUzMiBiZWFjb25fY3JjOwogCiAJZW51bSB7CkBAIC0zMTYsMTAgKzMxMiw2IEBACiAJfSBtZnA7IC8qIG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbiAqLwogCiAJaW50IHdtbV9sYXN0X3BhcmFtX3NldDsKLQotCS8qIEV4dHJhIElFIGRhdGEgZm9yIG1hbmFnZW1lbnQgZnJhbWVzICovCi0JdTggKnNtZV9hdXRoX2llOwotCXNpemVfdCBzbWVfYXV0aF9pZV9sZW47CiB9OwogCiBlbnVtIGllZWU4MDIxMV9pYnNzX3JlcXVlc3QgewpAQCAtMzM5LDYgKzMzMSw3IEBACiAKIAlib29sIGZpeGVkX2Jzc2lkOwogCWJvb2wgZml4ZWRfY2hhbm5lbDsKKwlib29sIHByaXZhY3k7CiAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKQEAgLTM2NCw3ICszNTcsNyBAQAogCiAJdW5zaWduZWQgbG9uZyB0aW1lcnNfcnVubmluZzsKIAotCWJvb2wgaG91c2VrZWVwaW5nOworCXVuc2lnbmVkIGxvbmcgd3JrcV9mbGFnczsKIAogCXU4IG1lc2hfaWRbSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTl07CiAJc2l6ZV90IG1lc2hfaWRfbGVuOwpAQCAtMzc0LDYgKzM2NywxMCBAQAogCXU4IG1lc2hfcG1faWRbNF07CiAJLyogQ29uZ2VzdGlvbiBDb250cm9sIE1vZGUgSWRlbnRpZmllciAqLwogCXU4IG1lc2hfY2NfaWRbNF07CisJLyogU3luY2hyb25pemF0aW9uIFByb3RvY29sIElkZW50aWZpZXIgKi8KKwl1OCBtZXNoX3NwX2lkWzRdOworCS8qIEF1dGhlbnRpY2F0aW9uIFByb3RvY29sIElkZW50aWZpZXIgKi8KKwl1OCBtZXNoX2F1dGhfaWRbNF07CiAJLyogTG9jYWwgbWVzaCBEZXN0aW5hdGlvbiBTZXF1ZW5jZSBOdW1iZXIgKi8KIAl1MzIgZHNuOwogCS8qIExhc3QgdXNlZCBQUkVRIElEICovCkBAIC00NzgsMjAgKzQ3NSw5IEBACiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJc3RydWN0IGRlbnRyeSAqZHJvcF91bmVuY3J5cHRlZDsKLQkJCXN0cnVjdCBkZW50cnkgKnN0YXRlOwogCQkJc3RydWN0IGRlbnRyeSAqYnNzaWQ7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICpwcmV2X2Jzc2lkOwotCQkJc3RydWN0IGRlbnRyeSAqc3NpZF9sZW47CiAJCQlzdHJ1Y3QgZGVudHJ5ICphaWQ7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICphcF9jYXBhYjsKIAkJCXN0cnVjdCBkZW50cnkgKmNhcGFiOwotCQkJc3RydWN0IGRlbnRyeSAqZXh0cmFfaWVfbGVuOwotCQkJc3RydWN0IGRlbnRyeSAqYXV0aF90cmllczsKLQkJCXN0cnVjdCBkZW50cnkgKmFzc29jX3RyaWVzOwotCQkJc3RydWN0IGRlbnRyeSAqYXV0aF9hbGdzOwotCQkJc3RydWN0IGRlbnRyeSAqYXV0aF9hbGc7Ci0JCQlzdHJ1Y3QgZGVudHJ5ICphdXRoX3RyYW5zYWN0aW9uOwotCQkJc3RydWN0IGRlbnRyeSAqZmxhZ3M7CiAJCQlzdHJ1Y3QgZGVudHJ5ICpmb3JjZV91bmljYXN0X3JhdGVpZHg7CiAJCQlzdHJ1Y3QgZGVudHJ5ICptYXhfcmF0ZWN0cmxfcmF0ZWlkeDsKIAkJfSBzdGE7CkBAIC01MjYsNiArNTEyLDggQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCXN0cnVjdCBkZW50cnkgKm1lc2hfc3RhdHNfZGlyOwogCXN0cnVjdCB7CisJCXN0cnVjdCBkZW50cnkgKmZ3ZGVkX21jYXN0OworCQlzdHJ1Y3QgZGVudHJ5ICpmd2RlZF91bmljYXN0OwogCQlzdHJ1Y3QgZGVudHJ5ICpmd2RlZF9mcmFtZXM7CiAJCXN0cnVjdCBkZW50cnkgKmRyb3BwZWRfZnJhbWVzX3R0bDsKIAkJc3RydWN0IGRlbnRyeSAqZHJvcHBlZF9mcmFtZXNfbm9fcm91dGU7CkBAIC01ODgsMTIgKzU3Niw0NCBAQAogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EsCiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OLAogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TVVNQRU5ELAotCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HLAogCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TS0JfQURELAogfTsKIAotc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisvKioKKyAqIG1hYzgwMjExIHNjYW4gZmxhZ3MgLSBjdXJyZW50bHkgYWN0aXZlIHNjYW4gbW9kZQorICoKKyAqIEBTQ0FOX1NXX1NDQU5OSU5HOiBXZSdyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2Ygc2Nhbm5pbmcgYnV0IG1heSBhcworICoJd2VsbCBiZSBvbiB0aGUgb3BlcmF0aW5nIGNoYW5uZWwKKyAqIEBTQ0FOX0hXX1NDQU5OSU5HOiBUaGUgaGFyZHdhcmUgaXMgc2Nhbm5pbmcgZm9yIHVzLCB3ZSBoYXZlIG5vIHdheSB0bworICoJZGV0ZXJtaW5lIGlmIHdlIGFyZSBvbiB0aGUgb3BlcmF0aW5nIGNoYW5uZWwgb3Igbm90CisgKiBAU0NBTl9PRkZfQ0hBTk5FTDogV2UncmUgb2ZmIG91ciBvcGVyYXRpbmcgY2hhbm5lbCBmb3Igc2Nhbm5pbmcsCisgKglnZXRzIG9ubHkgc2V0IGluIGNvbmp1bmN0aW9uIHdpdGggU0NBTl9TV19TQ0FOTklORworICovCitlbnVtIHsKKwlTQ0FOX1NXX1NDQU5OSU5HLAorCVNDQU5fSFdfU0NBTk5JTkcsCisJU0NBTl9PRkZfQ0hBTk5FTCwKK307CisKKy8qKgorICogZW51bSBtYWM4MDIxMV9zY2FuX3N0YXRlIC0gc2NhbiBzdGF0ZSBtYWNoaW5lIHN0YXRlcworICoKKyAqIEBTQ0FOX0RFQ0lTSU9OOiBNYWluIGVudHJ5IHBvaW50IHRvIHRoZSBzY2FuIHN0YXRlIG1hY2hpbmUsIHRoaXMgc3RhdGUKKyAqCWRldGVybWluZXMgaWYgd2Ugc2hvdWxkIGtlZXAgb24gc2Nhbm5pbmcgb3Igc3dpdGNoIGJhY2sgdG8gdGhlCisgKglvcGVyYXRpbmcgY2hhbm5lbAorICogQFNDQU5fU0VUX0NIQU5ORUw6IFNldCB0aGUgbmV4dCBjaGFubmVsIHRvIGJlIHNjYW5uZWQKKyAqIEBTQ0FOX1NFTkRfUFJPQkU6IFNlbmQgcHJvYmUgcmVxdWVzdHMgYW5kIHdhaXQgZm9yIHByb2JlIHJlc3BvbnNlcworICogQFNDQU5fTEVBVkVfT1BFUl9DSEFOTkVMOiBMZWF2ZSB0aGUgb3BlcmF0aW5nIGNoYW5uZWwsIG5vdGlmeSB0aGUgQVAKKyAqCWFib3V0IHVzIGxlYXZpbmcgdGhlIGNoYW5uZWwgYW5kIHN0b3AgYWxsIGFzc29jaWF0ZWQgU1RBIGludGVyZmFjZXMKKyAqIEBTQ0FOX0VOVEVSX09QRVJfQ0hBTk5FTDogRW50ZXIgdGhlIG9wZXJhdGluZyBjaGFubmVsIGFnYWluLCBub3RpZnkgdGhlCisgKglBUCBhYm91dCB1cyBiZWluZyBiYWNrIGFuZCByZXN0YXJ0IGFsbCBhc3NvY2lhdGVkIFNUQSBpbnRlcmZhY2VzCisgKi8KK2VudW0gbWFjODAyMTFfc2Nhbl9zdGF0ZSB7CisJU0NBTl9ERUNJU0lPTiwKKwlTQ0FOX1NFVF9DSEFOTkVMLAorCVNDQU5fU0VORF9QUk9CRSwKKwlTQ0FOX0xFQVZFX09QRVJfQ0hBTk5FTCwKKwlTQ0FOX0VOVEVSX09QRVJfQ0hBTk5FTCwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgewpAQCAtNjA0LDE3ICs2MjQsMzMgQEAKIAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7CiAKKwkvKgorCSAqIHByaXZhdGUgd29ya3F1ZXVlIHRvIG1hYzgwMjExLiBtYWM4MDIxMSBtYWtlcyB0aGlzIGFjY2Vzc2libGUKKwkgKiB2aWEgaWVlZTgwMjExX3F1ZXVlX3dvcmsoKQorCSAqLworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CisKIAl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFU107CiAJLyogYWxzbyB1c2VkIHRvIHByb3RlY3QgYW1wZHVfYWNfcXVldWUgYW5kIGFtZHB1X2FjX3N0b3BfcmVmY250ICovCiAJc3BpbmxvY2tfdCBxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrOwogCi0Jc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7IC8qIHdtYXN0ZXIjIC0gIm1hc3RlciIgODAyLjExIGRldmljZSAqLwogCWludCBvcGVuX2NvdW50OwogCWludCBtb25pdG9ycywgY29va2VkX21udHJzOwogCS8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdpdGggY29ycmVzcG9uZGluZyBGSUZfIGZsYWdzICovCi0JaW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzOworCWludCBmaWZfZmNzZmFpbCwgZmlmX3BsY3BmYWlsLCBmaWZfY29udHJvbCwgZmlmX290aGVyX2JzcywgZmlmX3BzcG9sbDsKIAl1bnNpZ25lZCBpbnQgZmlsdGVyX2ZsYWdzOyAvKiBGSUZfKiAqLwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKKworCS8qIHByb3RlY3RzIHRoZSBhZ2dyZWdhdGVkIG11bHRpY2FzdCBsaXN0IGFuZCBmaWx0ZXIgY2FsbHMgKi8KKwlzcGlubG9ja190IGZpbHRlcl9sb2NrOworCisJLyogdXNlZCBmb3IgdXBsb2FkaW5nIGNoYW5nZWQgbWMgbGlzdCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCByZWNvbmZpZ19maWx0ZXI7CisKKwkvKiBhZ2dyZWdhdGVkIG11bHRpY2FzdCBsaXN0ICovCisJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3Q7CisJaW50IG1jX2NvdW50OworCiAJYm9vbCB0aW1faW5fbG9ja2VkX3NlY3Rpb247IC8qIHNlZSBpZWVlODAyMTFfYmVhY29uX2dldCgpICovCiAKIAkvKgpAQCAtNjMxLDYgKzY2Nyw5IEBACiAJICovCiAJYm9vbCBxdWllc2Npbmc7CiAKKwkvKiBkZXZpY2UgaXMgc3RhcnRlZCAqLworCWJvb2wgc3RhcnRlZDsKKwogCWludCB0eF9oZWFkcm9vbTsgLyogcmVxdWlyZWQgaGVhZHJvb20gZm9yIGhhcmR3YXJlL3JhZGlvdGFwICovCiAKIAkvKiBUYXNrbGV0IGFuZCBza2IgcXVldWUgdG8gcHJvY2VzcyBjYWxscyBmcm9tIElSUSBtb2RlLiBBbGwgZnJhbWVzCkBAIC02NTMsNiArNjkyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9saXN0OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhX2hhc2hbU1RBX0hBU0hfU0laRV07CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhX2NsZWFudXA7CisJaW50IHN0YV9nZW5lcmF0aW9uOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBwZW5kaW5nW0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcGVuZGluZ190YXNrbGV0OwpAQCAtNjg3LDkgKzcyNyw5IEBACiAKIAkvKiBTY2FubmluZyBhbmQgQlNTIGxpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggc2Nhbl9tdHg7Ci0JYm9vbCBzd19zY2FubmluZywgaHdfc2Nhbm5pbmc7CisJdW5zaWduZWQgbG9uZyBzY2FubmluZzsKIAlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCBzY2FuX3NzaWQ7Ci0Jc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCBpbnRfc2Nhbl9yZXE7CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqaW50X3NjYW5fcmVxOwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqc2Nhbl9jaGFubmVsOwogCWNvbnN0IHU4ICpvcmlnX2llczsKQEAgLTY5Nyw3ICs3MzcsNyBAQAogCWludCBzY2FuX2NoYW5uZWxfaWR4OwogCWludCBzY2FuX2llc19sZW47CiAKLQllbnVtIHsgU0NBTl9TRVRfQ0hBTk5FTCwgU0NBTl9TRU5EX1BST0JFIH0gc2Nhbl9zdGF0ZTsKKwllbnVtIG1hYzgwMjExX3NjYW5fc3RhdGUgbmV4dF9zY2FuX3N0YXRlOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl93b3JrOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNjYW5fc2RhdGE7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBvcGVyX2NoYW5uZWxfdHlwZTsKQEAgLTgzNCwxMCArODc0LDYgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqCiBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0KLQlCVUdfT04oIWxvY2FsIHx8IGxvY2FsLT5tZGV2ID09IGRldik7Ci0KIAlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KTsKIH0KIApAQCAtOTM3LDIxICs5NzMsMjAgQEAKIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiAKLS8qIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOwotCiAvKiBTVEEgY29kZSAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK2ludCBpZWVlODAyMTFfbWdkX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0ICpyZXEpOworaW50IGllZWU4MDIxMV9tZ2RfYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxKTsKK2ludCBpZWVlODAyMTFfbWdkX2RlYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgKnJlcSwKKwkJCSB2b2lkICpjb29raWUpOworaW50IGllZWU4MDIxMV9tZ2RfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCAqcmVxLAorCQkJICAgdm9pZCAqY29va2llKTsKIGllZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7Ci1pbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotaW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pOwotaW50IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKLWludCBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7Ci1pbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbik7Ci1pbnQgaWVlZTgwMjExX3N0YV9kaXNhc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pOworCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9yZWNhbGNfcHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHMzMiBsYXRlbmN5KTsKQEAgLTk2Nyw4ICsxMDAyLDcgQEAKIHZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX2lic3Nfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworaWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdHJ1Y3Qgc3RhX2luZm8gKmllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCXU4ICpic3NpZCwgdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKTsKIGludCBpZWVlODAyMTFfaWJzc19qb2luKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLApAQCAtOTgzLDE2ICsxMDE3LDkgQEAKIAkJCQkgICAgY29uc3QgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKTsKLWludCBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiB2b2lkIGllZWU4MDIxMV9zY2FuX2NhbmNlbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiBpZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOwotaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgICAgIGNvbnN0IGNoYXIgKmllLCBzaXplX3QgbGVuKTsKK2llZWU4MDIxMV9zY2FuX3J4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogdm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgpAQCAtMTAwOCw4ICsxMDM1LDYgQEAKIAkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOwogdm9pZCBpZWVlODAyMTFfcnhfYnNzX3B1dChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyk7Ci12b2lkIGllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQsCi0JCQkgICAgIGludCBmcmVxLCB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOwogCiAvKiBpbnRlcmZhY2UgaGFuZGxpbmcgKi8KIGludCBpZWVlODAyMTFfaWZfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBjb25zdCBjaGFyICpuYW1lLApAQCAtMTAyNSw5ICsxMDUwLDEwIEBACiAvKiB0eCBoYW5kbGluZyAqLwogdm9pZCBpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB2b2lkIGllZWU4MDIxMV90eF9wZW5kaW5nKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1pbnQgaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CituZXRkZXZfdHhfdCBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK25ldGRldl90eF90IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBIVCAqLwogdm9pZCBpZWVlODAyMTFfaHRfY2FwX2llX3RvX3N0YV9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCkBAIC0xMDY1LDYgKzEwOTEsNyBAQAogCiAvKiBTdXNwZW5kL3Jlc3VtZSBhbmQgaHcgcmVjb25maWd1cmF0aW9uICovCiBpbnQgaWVlZTgwMjExX3JlY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX3N0b3BfZGV2aWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIAogI2lmZGVmIENPTkZJR19QTQogaW50IF9faWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMTA5Miw3ICsxMTE5LDggQEAKIGludCBpZWVlODAyMTFfZnJhbWVfZHVyYXRpb24oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHNpemVfdCBsZW4sCiAJCQkgICAgIGludCByYXRlLCBpbnQgZXJwLCBpbnQgc2hvcnRfcHJlYW1ibGUpOwogdm9pZCBtYWM4MDIxMV9ldl9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQga2V5aWR4LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY29uc3QgdTggKnRzYyk7CisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBjb25zdCB1OCAqdHNjLAorCQkJCSAgICAgZ2ZwX3QgZ2ZwKTsKIHZvaWQgaWVlZTgwMjExX3NldF93bW1fZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgIGludCBlbmNyeXB0KTsKQEAgLTExMjksOCArMTE1Nyw4IEBACiAKIHZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKLQkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCi0JCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCk7CisJCQkgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLCBjb25zdCB1OCAqYnNzaWQsCisJCQkgY29uc3QgdTggKmtleSwgdTgga2V5X2xlbiwgdTgga2V5X2lkeCk7CiBpbnQgaWVlZTgwMjExX2J1aWxkX3ByZXFfaWVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnVmZmVyLAogCQkJICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4pOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IGI3YzhhNDQuLmI4Mjk1Y2IgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xOTAsMTAgKzE5MCw2IEBACiAJCQkgICAgICAgRVRIX0FMRU4pOwogCX0KIAotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobnVsbF9hZGRyLCBsb2NhbC0+bWRldi0+ZGV2X2FkZHIpID09IDApCi0JCW1lbWNweShsb2NhbC0+bWRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLAotCQkgICAgICAgRVRIX0FMRU4pOwotCiAJLyoKIAkgKiBWYWxpZGF0ZSB0aGUgTUFDIGFkZHJlc3MgZm9yIHRoaXMgZGV2aWNlLgogCSAqLwpAQCAtMjI0LDE4ICsyMjAsMTUgQEAKIAkJCWxvY2FsLT5maWZfZmNzZmFpbCsrOwogCQlpZiAoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19QTENQRkFJTCkKIAkJCWxvY2FsLT5maWZfcGxjcGZhaWwrKzsKLQkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09OVFJPTCkKKwkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfQ09OVFJPTCkgewogCQkJbG9jYWwtPmZpZl9jb250cm9sKys7CisJCQlsb2NhbC0+ZmlmX3BzcG9sbCsrOworCQl9CiAJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX09USEVSX0JTUykKIAkJCWxvY2FsLT5maWZfb3RoZXJfYnNzKys7CiAKLQkJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwotCQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAJCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwogCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CkBAIC0yNDYsMTIgKzIzOSwxNSBAQAogCiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CiAJCQlsb2NhbC0+ZmlmX290aGVyX2JzcysrOwotCQkJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAogCQkJaWVlZTgwMjExX3N0YXJ0X21lc2goc2RhdGEpOworCQl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJbG9jYWwtPmZpZl9wc3BvbGwrKzsKKworCQkJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCQl9CisKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc2RhdGEpOwogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7CiAJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CkBAIC0yODEsMTUgKzI3Nyw2IEBACiAJCX0KIAl9CiAKLQlpZiAobG9jYWwtPm9wZW5fY291bnQgPT0gMCkgewotCQlyZXMgPSBkZXZfb3Blbihsb2NhbC0+bWRldik7Ci0JCVdBUk5fT04ocmVzKTsKLQkJaWYgKHJlcykKLQkJCWdvdG8gZXJyX2RlbF9pbnRlcmZhY2U7Ci0JCXRhc2tsZXRfZW5hYmxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKLQkJdGFza2xldF9lbmFibGUoJmxvY2FsLT50YXNrbGV0KTsKLQl9Ci0KIAkvKgogCSAqIHNldF9tdWx0aWNhc3RfbGlzdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIG5ldHdvcmtpbmcgY29yZQogCSAqIHdoaWNoIHdpbGwgY2hlY2sgd2hldGhlciBhbnkgaW5jcmVtZW50cyBoZXJlIHdlcmUgZG9uZSBpbgpAQCAtMzIzLDcgKzMxMCw3IEBACiAJICogdG8gZml4IHRoaXMuCiAJICovCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGRldik7CiAKQEAgLTM0Niw3ICszMzMsMTAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKIAl1MzIgaHdfcmVjb25mX2ZsYWdzID0gMDsKKwlpbnQgaTsKIAogCS8qCiAJICogU3RvcCBUWCBvbiB0aGlzIGludGVyZmFjZSBmaXJzdC4KQEAgLTM2NiwxOCArMzU2LDYgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qCi0JICogQW5ub3VuY2UgdGhhdCB3ZSBhcmUgbGVhdmluZyB0aGUgbmV0d29yaywgaW4gY2FzZSB3ZSBhcmUgYQotCSAqIHN0YXRpb24gaW50ZXJmYWNlIHR5cGUuIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSByZW1vdmluZwotCSAqIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhX2luZm9fZmx1c2gsIG90aGVyd2lzZSBTVEEKLQkgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIGdvbmUgYW5kIG5vIGFubm91bmNlIGJlaW5nIGRvbmUuCi0JICovCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEKQotCQkJaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwKLQkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0JfQotCi0JLyoKIAkgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS4KIAkgKgogCSAqIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIG9wcy0+cmVtb3ZlX2ludGVyZmFjZSgpCkBAIC00MDgsMTMgKzM4NiwyNCBAQAogCWlmIChzZGF0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU0RBVEFfUFJPTUlTQykKIAkJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9wcm9taXNjcyk7CiAKLQlkZXZfbWNfdW5zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCWxvY2FsLT5maWZfcHNwb2xsLS07CisKKwluZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTsKKwlzcGluX2xvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CisJX19kZXZfYWRkcl91bnN5bmMoJmxvY2FsLT5tY19saXN0LCAmbG9jYWwtPm1jX2NvdW50LAorCQkJICAmZGV2LT5tY19saXN0LCAmZGV2LT5tY19jb3VudCk7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CisJbmV0aWZfYWRkcl91bmxvY2tfYmgoZGV2KTsKKworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKwogCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCiAJLyogQVBzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgKi8KIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW4sICp0bXA7CisJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnZsYW4sICp0bXBzZGF0YTsKIAkJc3RydWN0IGJlYWNvbl9kYXRhICpvbGRfYmVhY29uID0gc2RhdGEtPnUuYXAuYmVhY29uOwogCiAJCS8qIHJlbW92ZSBiZWFjb24gKi8KQEAgLTQyMyw3ICs0MTIsNyBAQAogCQlrZnJlZShvbGRfYmVhY29uKTsKIAogCQkvKiBkb3duIGFsbCBkZXBlbmRlbnQgZGV2aWNlcywgdGhhdCBpcyBWTEFOcyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdG1wLCAmc2RhdGEtPnUuYXAudmxhbnMsCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bGFuLCB0bXBzZGF0YSwgJnNkYXRhLT51LmFwLnZsYW5zLAogCQkJCQkgdS52bGFuLmxpc3QpCiAJCQlkZXZfY2xvc2Uodmxhbi0+ZGV2KTsKIAkJV0FSTl9PTighbGlzdF9lbXB0eSgmc2RhdGEtPnUuYXAudmxhbnMpKTsKQEAgLTQ1MiwyOSArNDQxLDMwIEBACiAJCQlsb2NhbC0+ZmlmX2Zjc2ZhaWwtLTsKIAkJaWYgKHNkYXRhLT51Lm1udHJfZmxhZ3MgJiBNT05JVE9SX0ZMQUdfUExDUEZBSUwpCiAJCQlsb2NhbC0+ZmlmX3BsY3BmYWlsLS07Ci0JCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0NPTlRST0wpCisJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0NPTlRST0wpIHsKKwkJCWxvY2FsLT5maWZfcHNwb2xsLS07CiAJCQlsb2NhbC0+ZmlmX2NvbnRyb2wtLTsKKwkJfQogCQlpZiAoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19PVEhFUl9CU1MpCiAJCQlsb2NhbC0+ZmlmX290aGVyX2Jzcy0tOwogCi0JCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7CiAJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJbmV0aWZfYWRkcl91bmxvY2tfYmgobG9jYWwtPm1kZXYpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCW1lbXNldChzZGF0YS0+dS5tZ2QuYnNzaWQsIDAsIEVUSF9BTEVOKTsKIAkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC5jaHN3aXRjaF90aW1lcik7CiAJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5tZ2QudGltZXIpOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLmNvbm5fbW9uX3RpbWVyKTsKKwkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lm1nZC5iY25fbW9uX3RpbWVyKTsKIAkJLyoKLQkJICogSWYgdGhlIHRpbWVyIGZpcmVkIHdoaWxlIHdlIHdhaXRlZCBmb3IgaXQsIGl0IHdpbGwgaGF2ZQotCQkgKiByZXF1ZXVlZCB0aGUgd29yay4gTm93IHRoZSB3b3JrIHdpbGwgYmUgcnVubmluZyBhZ2FpbgorCQkgKiBJZiBhbnkgb2YgdGhlIHRpbWVycyBmaXJlZCB3aGlsZSB3ZSB3YWl0ZWQgZm9yIGl0LCBpdCB3aWxsCisJCSAqIGhhdmUgcXVldWVkIGl0cyB3b3JrLiBOb3cgdGhlIHdvcmsgd2lsbCBiZSBydW5uaW5nIGFnYWluCiAJCSAqIGJ1dCB3aWxsIG5vdCByZWFybSB0aGUgdGltZXIgYWdhaW4gYmVjYXVzZSBpdCBjaGVja3MKIAkJICogd2hldGhlciB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcsIHdoaWNoLCBhdCB0aGlzIHBvaW50LAogCQkgKiBpdCBubyBsb25nZXIgaXMuCiAJCSAqLwogCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2Qud29yayk7CiAJCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51Lm1nZC5jaHN3aXRjaF93b3JrKTsKLQorCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2QubW9uaXRvcl93b3JrKTsKIAkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOwogCiAJCS8qCkBAIC00ODUsMTIgKzQ3NSw2IEBACiAJCSAqLwogCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5tZ2Quc2tiX3F1ZXVlKTsKLQotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCB8Ci0JCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCk7Ci0JCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7Ci0JCXNkYXRhLT51Lm1nZC5leHRyYV9pZSA9IE5VTEw7Ci0JCXNkYXRhLT51Lm1nZC5leHRyYV9pZV9sZW4gPSAwOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CkBAIC01MDcsMzcgKzQ5MSwyMyBAQAogCQkJbG9jYWwtPmZpZl9vdGhlcl9ic3MtLTsKIAkJCWF0b21pY19kZWMoJmxvY2FsLT5pZmZfYWxsbXVsdGlzKTsKIAotCQkJbmV0aWZfYWRkcl9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQkJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAogCQkJaWVlZTgwMjExX3N0b3BfbWVzaChzZGF0YSk7CiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKLQkJaWYgKGxvY2FsLT5zY2FuX3NkYXRhID09IHNkYXRhKSB7Ci0JCQlpZiAoIWxvY2FsLT5vcHMtPmh3X3NjYW4pCi0JCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZsb2NhbC0+c2Nhbl93b3JrKTsKLQkJCS8qCi0JCQkgKiBUaGUgc29mdHdhcmUgc2NhbiBjYW4gbm8gbG9uZ2VyIHJ1biBub3csIHNvIHdlIGNhbgotCQkJICogY2xlYXIgb3V0IHRoZSBzY2FuX3NkYXRhIHJlZmVyZW5jZS4gSG93ZXZlciwgdGhlCi0JCQkgKiBoYXJkd2FyZSBzY2FuIG1heSBzdGlsbCBiZSBydW5uaW5nLiBUaGUgY29tcGxldGUKLQkJCSAqIGZ1bmN0aW9uIG11c3QgYmUgcHJlcGFyZWQgdG8gaGFuZGxlIGEgTlVMTCB2YWx1ZS4KLQkJCSAqLwotCQkJbG9jYWwtPnNjYW5fc2RhdGEgPSBOVUxMOwotCQkJLyoKLQkJCSAqIFRoZSBtZW1vcnkgYmFycmllciBndWFyYW50ZWVzIHRoYXQgYW5vdGhlciBDUFUKLQkJCSAqIHRoYXQgaXMgaGFyZHdhcmUtc2Nhbm5pbmcgd2lsbCBub3cgc2VlIHRoZSBmYWN0Ci0JCQkgKiB0aGF0IHRoaXMgaW50ZXJmYWNlIGlzIGdvbmUuCi0JCQkgKi8KLQkJCXNtcF9tYigpOwotCQkJLyoKLQkJCSAqIElmIHNvZnR3YXJlIHNjYW5uaW5nLCBjb21wbGV0ZSB0aGUgc2NhbiBidXQgc2luY2UKLQkJCSAqIHRoZSBzY2FuX3NkYXRhIGlzIE5VTEwgYWxyZWFkeSBkb24ndCBzZW5kIG91dCBhCi0JCQkgKiBzY2FuIGV2ZW50IHRvIHVzZXJzcGFjZSAtLSB0aGUgc2NhbiBpcyBpbmNvbXBsZXRlLgotCQkJICovCi0JCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKQotCQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3LCB0cnVlKTsKKwkJaWYgKGxvY2FsLT5zY2FuX3NkYXRhID09IHNkYXRhKQorCQkJaWVlZTgwMjExX3NjYW5fY2FuY2VsKGxvY2FsKTsKKworCQkvKgorCQkgKiBEaXNhYmxlIGJlYWNvbmluZyBmb3IgQVAgYW5kIG1lc2gsIElCU1MgY2FuJ3QKKwkJICogc3RpbGwgYmUgam9pbmVkIHRvIGEgbmV0d29yayBhdCB0aGlzIHBvaW50LgorCQkgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLAorCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAkJfQogCiAJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CkBAIC01NTUsMTcgKzUyNSw4IEBACiAJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOwogCiAJaWYgKGxvY2FsLT5vcGVuX2NvdW50ID09IDApIHsKLQkJaWYgKG5ldGlmX3J1bm5pbmcobG9jYWwtPm1kZXYpKQotCQkJZGV2X2Nsb3NlKGxvY2FsLT5tZGV2KTsKLQotCQlkcnZfc3RvcChsb2NhbCk7Ci0KLQkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgZmFsc2UpOwotCi0JCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKLQotCQl0YXNrbGV0X2Rpc2FibGUoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwotCQl0YXNrbGV0X2Rpc2FibGUoJmxvY2FsLT50YXNrbGV0KTsKKwkJaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOworCQlpZWVlODAyMTFfc3RvcF9kZXZpY2UobG9jYWwpOwogCiAJCS8qIG5vIHJlY29uZmlndXJpbmcgYWZ0ZXIgc3RvcCEgKi8KIAkJaHdfcmVjb25mX2ZsYWdzID0gMDsKQEAgLTU3NSw2ICs1MzYsMTggQEAKIAlpZiAoaHdfcmVjb25mX2ZsYWdzKQogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBod19yZWNvbmZfZmxhZ3MpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9NQVhfUVVFVUVTOyBpKyspIHsKKwkJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmbG9jYWwtPnBlbmRpbmdbaV0sIHNrYiwgdG1wKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCQlpZiAoaW5mby0+Y29udHJvbC52aWYgPT0gJnNkYXRhLT52aWYpIHsKKwkJCQlfX3NrYl91bmxpbmsoc2tiLCAmbG9jYWwtPnBlbmRpbmdbaV0pOworCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQl9CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02MDQsOCArNTc3LDExIEBACiAJCQlhdG9taWNfZGVjKCZsb2NhbC0+aWZmX3Byb21pc2NzKTsKIAkJc2RhdGEtPmZsYWdzIF49IElFRUU4MDIxMV9TREFUQV9QUk9NSVNDOwogCX0KLQotCWRldl9tY19zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOworCXNwaW5fbG9ja19iaCgmbG9jYWwtPmZpbHRlcl9sb2NrKTsKKwlfX2Rldl9hZGRyX3N5bmMoJmxvY2FsLT5tY19saXN0LCAmbG9jYWwtPm1jX2NvdW50LAorCQkJJmRldi0+bWNfbGlzdCwgJmRldi0+bWNfY291bnQpOworCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+ZmlsdGVyX2xvY2spOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+cmVjb25maWdfZmlsdGVyKTsKIH0KIAogLyoKQEAgLTY1MiwxMSArNjI4LDYgQEAKIAkJCWtmcmVlX3NrYihzZGF0YS0+dS5pYnNzLnByZXNwKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOwotCQlrZnJlZShzZGF0YS0+dS5tZ2QuYXNzb2NyZXFfaWVzKTsKLQkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVzcF9pZXMpOwotCQlrZnJlZShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUpOwotCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgpAQCAtNjk1LDcgKzY2Niw2IEBACiB7CiAJZXRoZXJfc2V0dXAoZGV2KTsKIAlkZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7CiAJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7CiB9CiAKQEAgLTc4NCw2ICs3NTQsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSB3aXBoeV90eXBlID0geworCS5uYW1lCT0gIndsYW4iLAorfTsKKwogaW50IGllZWU4MDIxMV9pZl9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZXdfZGV2LCBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCiAJCSAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKQEAgLTc5OCw2ICs3NzIsNyBAQAogCQkJICAgIG5hbWUsIGllZWU4MDIxMV9pZl9zZXR1cCk7CiAJaWYgKCFuZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKKwlkZXZfbmV0X3NldChuZGV2LCB3aXBoeV9uZXQobG9jYWwtPmh3LndpcGh5KSk7CiAKIAluZGV2LT5uZWVkZWRfaGVhZHJvb20gPSBsb2NhbC0+dHhfaGVhZHJvb20gKwogCQkJCTQqNiAvKiBmb3VyIE1BQyBhZGRyZXNzZXMgKi8KQEAgLTgxNCw3ICs3ODksNyBAQAogCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKG5kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKLQluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOworCVNFVF9ORVRERVZfREVWVFlQRShuZGV2LCAmd2lwaHlfdHlwZSk7CiAKIAkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KIAlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtOTMxLDcgKzkwNiw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IGNvdW50ID0gMDsKIAotCWlmIChsb2NhbC0+aHdfc2Nhbm5pbmcgfHwgbG9jYWwtPnN3X3NjYW5uaW5nKQorCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybiBpZWVlODAyMTFfaWRsZV9vZmYobG9jYWwsICJzY2FubmluZyIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CkBAIC05MzksNyArOTE0LDggQEAKIAkJCWNvbnRpbnVlOwogCQkvKiBkbyBub3QgY291bnQgZGlzYWJsZWQgbWFuYWdlZCBpbnRlcmZhY2VzICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCQkgICAgc2RhdGEtPnUubWdkLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRCkKKwkJICAgICFzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCAmJgorCQkgICAgbGlzdF9lbXB0eSgmc2RhdGEtPnUubWdkLndvcmtfbGlzdCkpCiAJCQljb250aW51ZTsKIAkJLyogZG8gbm90IGNvdW50IHVudXNlZCBJQlNTIGludGVyZmFjZXMgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21haW4uYyBiL25ldC9tYWM4MDIxMS9tYWluLmMKaW5kZXggMDkyYTAxNy4uNzk3ZjUzOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21haW4uYworKysgYi9uZXQvbWFjODAyMTEvbWFpbi5jCkBAIC01MCw5ICs1MCw5IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCi0vKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBtZGV2IHR4IGxvY2sgKi8KIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJdTY0IG1jOwogCXVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzOwogCXVuc2lnbmVkIGludCBuZXdfZmxhZ3MgPSAwOwogCkBAIC02Miw3ICs2Miw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZsb2NhbC0+aWZmX2FsbG11bHRpcykpCiAJCW5ld19mbGFncyB8PSBGSUZfQUxMTVVMVEk7CiAKLQlpZiAobG9jYWwtPm1vbml0b3JzKQorCWlmIChsb2NhbC0+bW9uaXRvcnMgfHwgbG9jYWwtPnNjYW5uaW5nKQogCQluZXdfZmxhZ3MgfD0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CiAKIAlpZiAobG9jYWwtPmZpZl9mY3NmYWlsKQpAQCAtNzcsNzcgKzc3LDI5IEBACiAJaWYgKGxvY2FsLT5maWZfb3RoZXJfYnNzKQogCQluZXdfZmxhZ3MgfD0gRklGX09USEVSX0JTUzsKIAorCWlmIChsb2NhbC0+ZmlmX3BzcG9sbCkKKwkJbmV3X2ZsYWdzIHw9IEZJRl9QU1BPTEw7CisKKwlzcGluX2xvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CiAJY2hhbmdlZF9mbGFncyA9IGxvY2FsLT5maWx0ZXJfZmxhZ3MgXiBuZXdfZmxhZ3M7CiAKKwltYyA9IGRydl9wcmVwYXJlX211bHRpY2FzdChsb2NhbCwgbG9jYWwtPm1jX2NvdW50LCBsb2NhbC0+bWNfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5maWx0ZXJfbG9jayk7CisKIAkvKiBiZSBhIGJpdCBuYXN0eSAqLwogCW5ld19mbGFncyB8PSAoMTw8MzEpOwogCi0JZHJ2X2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwsIGNoYW5nZWRfZmxhZ3MsICZuZXdfZmxhZ3MsCi0JCQkgICAgIGxvY2FsLT5tZGV2LT5tY19jb3VudCwKLQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOworCWRydl9jb25maWd1cmVfZmlsdGVyKGxvY2FsLCBjaGFuZ2VkX2ZsYWdzLCAmbmV3X2ZsYWdzLCBtYyk7CiAKIAlXQVJOX09OKG5ld19mbGFncyAmICgxPDwzMSkpOwogCiAJbG9jYWwtPmZpbHRlcl9mbGFncyA9IG5ld19mbGFncyAmIH4oMTw8MzEpOwogfQogCi0vKiBtYXN0ZXIgaW50ZXJmYWNlICovCi0KLXN0YXRpYyBpbnQgaGVhZGVyX3BhcnNlXzgwMjExKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKmhhZGRyKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlY29uZmlnX2ZpbHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JbWVtY3B5KGhhZGRyLCBza2JfbWFjX2hlYWRlcihza2IpICsgMTAsIEVUSF9BTEVOKTsgLyogYWRkcjIgKi8KLQlyZXR1cm4gRVRIX0FMRU47Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBpZWVlODAyMTFfaGVhZGVyX29wcyA9IHsKLQkuY3JlYXRlCQk9IGV0aF9oZWFkZXIsCi0JLnBhcnNlCQk9IGhlYWRlcl9wYXJzZV84MDIxMSwKLQkucmVidWlsZAk9IGV0aF9yZWJ1aWxkX2hlYWRlciwKLQkuY2FjaGUJCT0gZXRoX2hlYWRlcl9jYWNoZSwKLQkuY2FjaGVfdXBkYXRlCT0gZXRoX2hlYWRlcl9jYWNoZV91cGRhdGUsCi19OwotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9tYXN0ZXJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IG1wcml2LT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlpbnQgcmVzID0gLUVPUE5PVFNVUFA7Ci0KLQkvKiB3ZSBob2xkIHRoZSBSVE5MIGhlcmUgc28gY2FuIHNhZmVseSB3YWxrIHRoZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7Ci0JCQlyZXMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhsb2NhbC0+bWRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfbWFzdGVyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2ICptcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBtcHJpdi0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KLQkvKiB3ZSBob2xkIHRoZSBSVE5MIGhlcmUgc28gY2FuIHNhZmVseSB3YWxrIHRoZSBsaXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQotCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCWRldl9jbG9zZShzZGF0YS0+ZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfbWFzdGVyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IG1wcml2LT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCByZWNvbmZpZ19maWx0ZXIpOwogCiAJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogfQpAQCAtMjU5LDcgKzIxMSw4IEBACiAJfQogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkgewotCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKSB7CisJCWlmIChsb2NhbC0+cXVpZXNjaW5nIHx8ICFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpIHx8CisJCSAgICB0ZXN0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKSkgewogCQkJc2RhdGEtPnZpZi5ic3NfY29uZi5lbmFibGVfYmVhY29uID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQkvKgpAQCAtMjg4LDkgKzI0MSw2IEBACiAKIAlkcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgJnNkYXRhLT52aWYsCiAJCQkgICAgICZzZGF0YS0+dmlmLmJzc19jb25mLCBjaGFuZ2VkKTsKLQotCS8qIERFUFJFQ0FURUQgKi8KLQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50OwogfQogCiB1MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMzEwLDcgKzI2MCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCB0bXA7CiAKLQlza2ItPmRldiA9IGxvY2FsLT5tZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfVFhfU1RBVFVTX01TRzsKIAlza2JfcXVldWVfdGFpbChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUyA/CiAJCSAgICAgICAmbG9jYWwtPnNrYl9xdWV1ZSA6ICZsb2NhbC0+c2tiX3F1ZXVlX3VucmVsaWFibGUsIHNrYik7CkBAIC0zMzAsMTkgKzI3OSwxNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKikgZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZSkpIHx8CiAJICAgICAgIChza2IgPSBza2JfZGVxdWV1ZSgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKSkpIHsKIAkJc3dpdGNoIChza2ItPnBrdF90eXBlKSB7CiAJCWNhc2UgSUVFRTgwMjExX1JYX01TRzoKLQkJCS8qIHN0YXR1cyBpcyBpbiBza2ItPmNiICovCi0JCQltZW1jcHkoJnJ4X3N0YXR1cywgc2tiLT5jYiwgc2l6ZW9mKHJ4X3N0YXR1cykpOwogCQkJLyogQ2xlYXIgc2tiLT5wa3RfdHlwZSBpbiBvcmRlciB0byBub3QgY29uZnVzZSBrZXJuZWwKIAkJCSAqIG5ldHN0YWNrLiAqLwogCQkJc2tiLT5wa3RfdHlwZSA9IDA7Ci0JCQlfX2llZWU4MDIxMV9yeChsb2NhbF90b19odyhsb2NhbCksIHNrYiwgJnJ4X3N0YXR1cyk7CisJCQlpZWVlODAyMTFfcngobG9jYWxfdG9faHcobG9jYWwpLCBza2IpOwogCQkJYnJlYWs7CiAJCWNhc2UgSUVFRTgwMjExX1RYX1NUQVRVU19NU0c6CiAJCQlza2ItPnBrdF90eXBlID0gMDsKQEAgLTM3NSw2ICszMjEsMzEgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKKwkvKgorCSAqIFhYWDogVGhpcyBpcyB0ZW1wb3JhcnkhCisJICoKKwkgKglUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSwgdGhlIGRyaXZlciB3aWxsCisJICoJcXVpdGUgbGlrZWx5IGhhdmUgcHJldHR5IG11Y2ggb3ZlcndyaXR0ZW4gaW5mby0+Y29udHJvbCBieQorCSAqCXVzaW5nIGluZm8tPmRyaXZlcl9kYXRhIG9yIGluZm8tPnJhdGVfZHJpdmVyX2RhdGEuIFRodXMsCisJICoJd2hlbiBwYXNzaW5nIG91dCB0aGUgZnJhbWUgdG8gdGhlIGRyaXZlciBhZ2Fpbiwgd2Ugd291bGQgYmUKKwkgKglwYXNzaW5nIGNvbXBsZXRlbHkgYm9ndXMgZGF0YSBzaW5jZSB0aGUgZHJpdmVyIHdvdWxkIHRoZW4KKwkgKglleHBlY3QgYSBwcm9wZXJseSBmaWxsZWQgaW5mby0+Y29udHJvbC4gSW4gbWFjODAyMTEgaXRzZWxmCisJICoJdGhlIHNhbWUgcHJvYmxlbSBvY2N1cnMsIHNpbmNlIHdlIG5lZWQgaW5mby0+Y29udHJvbC52aWYKKwkgKglpbnRlcm5hbGx5LgorCSAqCisJICoJVG8gZml4IHRoaXMsIHdlIHNob3VsZCBzZW5kIHRoZSBmcmFtZSB0aHJvdWdoIFRYIHByb2Nlc3NpbmcKKwkgKglhZ2Fpbi4gSG93ZXZlciwgaXQncyBub3QgdGhhdCBzaW1wbGUsIHNpbmNlIHRoZSBmcmFtZSB3aWxsCisJICoJaGF2ZSBiZWVuIHNvZnR3YXJlLWVuY3J5cHRlZCAoaWYgYXBwbGljYWJsZSkgYWxyZWFkeSwgYW5kCisJICoJZW5jcnlwdGluZyBpdCBhZ2FpbiBkb2Vzbid0IGRvIG11Y2ggZ29vZC4gU28gdG8gcHJvcGVybHkgZG8KKwkgKgl0aGF0LCB3ZSBub3Qgb25seSBoYXZlIHRvIHNraXAgdGhlIGFjdHVhbCAncmF3JyBlbmNyeXB0aW9uCisJICoJKGtleSBzZWxlY3Rpb24gZXRjLiBzdGlsbCBoYXMgdG8gYmUgZG9uZSEpIGJ1dCBhbHNvIHRoZQorCSAqCXNlcXVlbmNlIG51bWJlciBhc3NpZ25tZW50IHNpbmNlIHRoYXQgaW1wYWN0cyB0aGUgY3J5cHRvCisJICoJZW5jYXBzdWxhdGlvbiwgb2YgY291cnNlLgorCSAqCisJICoJSGVuY2UsIGZvciBub3csIGZpeCB0aGUgYnVnIGJ5IGp1c3QgZHJvcHBpbmcgdGhlIGZyYW1lLgorCSAqLworCWdvdG8gZHJvcDsKKwogCXN0YS0+dHhfZmlsdGVyZWRfY291bnQrKzsKIAogCS8qCkBAIC00MjgsNiArMzk5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAorIGRyb3A6CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgVFggZmlsdGVyZWQgZnJhbWUsICIKQEAgLTUxMCw2ICs0ODIsOCBAQAogCQl9CiAKIAkJcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhsb2NhbCwgc2JhbmQsIHN0YSwgc2tiKTsKKwkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc3RhLT5zZGF0YS0+dmlmKSkKKwkJCWllZWU4MDIxMXNfdXBkYXRlX21ldHJpYyhsb2NhbCwgc3RhLCBza2IpOwogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtNjg1LDYgKzY1OSw3IEBACiAJaWYgKCF3aXBoeSkKIAkJcmV0dXJuIE5VTEw7CiAKKwl3aXBoeS0+bmV0bnNvayA9IHRydWU7CiAJd2lwaHktPnByaXZpZCA9IG1hYzgwMjExX3dpcGh5X3ByaXZpZDsKIAogCS8qIFllcywgcHV0dGluZyBjZmc4MDIxMV9ic3MgaW50byBpZWVlODAyMTFfYnNzIGlzIGEgaGFjayAqLwpAQCAtNzExLDcgKzY4Niw2IEBACiAJbG9jYWwtPmh3Lm1heF9yYXRlcyA9IDE7CiAJbG9jYWwtPmh3LmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfbG9uZzsKIAlsb2NhbC0+aHcuY29uZi5zaG9ydF9mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfc2hvcnQ7Ci0JbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCA9IHRydWU7CiAJbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwgPSAtMTsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+aW50ZXJmYWNlcyk7CkBAIC03MTksMTMgKzY5MywxNSBAQAogCW11dGV4X2luaXQoJmxvY2FsLT5zY2FuX210eCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmtleV9sb2NrKTsKLQorCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+ZmlsdGVyX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jayk7CiAKIAlJTklUX0RFTEFZRURfV09SSygmbG9jYWwtPnNjYW5fd29yaywgaWVlZTgwMjExX3NjYW5fd29yayk7CiAKIAlJTklUX1dPUksoJmxvY2FsLT5yZXN0YXJ0X3dvcmssIGllZWU4MDIxMV9yZXN0YXJ0X3dvcmspOwogCisJSU5JVF9XT1JLKCZsb2NhbC0+cmVjb25maWdfZmlsdGVyLCBpZWVlODAyMTFfcmVjb25maWdfZmlsdGVyKTsKKwogCUlOSVRfV09SSygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmssCiAJCSAgaWVlZTgwMjExX2R5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCUlOSVRfV09SSygmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrLApAQCAtNzM5LDEyICs3MTUsMTAgQEAKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnBlbmRpbmdbaV0pOwogCXRhc2tsZXRfaW5pdCgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCwgaWVlZTgwMjExX3R4X3BlbmRpbmcsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpbG9jYWwpOwotCXRhc2tsZXRfZGlzYWJsZSgmbG9jYWwtPnR4X3BlbmRpbmdfdGFza2xldCk7CiAKIAl0YXNrbGV0X2luaXQoJmxvY2FsLT50YXNrbGV0LAogCQkgICAgIGllZWU4MDIxMV90YXNrbGV0X2hhbmRsZXIsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGxvY2FsKTsKLQl0YXNrbGV0X2Rpc2FibGUoJmxvY2FsLT50YXNrbGV0KTsKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5za2JfcXVldWUpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSk7CkBAIC03NTUsMzAgKzcyOSwxMSBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHcpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tYXN0ZXJfb3BzID0gewotCS5uZG9fc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdCwKLQkubmRvX29wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW4sCi0JLm5kb19zdG9wID0gaWVlZTgwMjExX21hc3Rlcl9zdG9wLAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3QsCi0JLm5kb19zZWxlY3RfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlLAotfTsKLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX21hc3Rlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbWRldikKLXsKLQltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQltZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tYXN0ZXJfb3BzOwotCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7Ci0JbWRldi0+dHhfcXVldWVfbGVuID0gMTAwMDsKLQltZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwotfQotCiBpbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCWludCByZXN1bHQ7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCXN0cnVjdCBuZXRfZGV2aWNlICptZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfbWFzdGVyX3ByaXYgKm1wcml2OwogCWludCBjaGFubmVscywgaSwgaiwgbWF4X2JpdHJhdGVzOwogCWJvb2wgc3VwcF9odDsKIAlzdGF0aWMgY29uc3QgdTMyIGNpcGhlcl9zdWl0ZXNbXSA9IHsKQEAgLTgxOCw5ICs3NzMsOSBAQAogCQlzdXBwX2h0ID0gc3VwcF9odCB8fCBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZDsKIAl9CiAKLQlsb2NhbC0+aW50X3NjYW5fcmVxLm5fY2hhbm5lbHMgPSBjaGFubmVsczsKLQlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIGNoYW5uZWxzLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpCisJbG9jYWwtPmludF9zY2FuX3JlcSA9IGt6YWxsb2Moc2l6ZW9mKCpsb2NhbC0+aW50X3NjYW5fcmVxKSArCisJCQkJICAgICAgc2l6ZW9mKHZvaWQgKikgKiBjaGFubmVscywgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbC0+aW50X3NjYW5fcmVxKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGlmIGxvdy1sZXZlbCBkcml2ZXIgc3VwcG9ydHMgQVAsIHdlIGFsc28gc3VwcG9ydCBWTEFOICovCkBAIC04NzcsMTkgKzgzMiw5IEBACiAJaWYgKGh3LT5xdWV1ZXMgPiBJRUVFODAyMTFfTUFYX1FVRVVFUykKIAkJaHctPnF1ZXVlcyA9IElFRUU4MDIxMV9NQVhfUVVFVUVTOwogCi0JbWRldiA9IGFsbG9jX25ldGRldl9tcShzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiksCi0JCQkgICAgICAgIndtYXN0ZXIlZCIsIGllZWU4MDIxMV9tYXN0ZXJfc2V0dXAsCi0JCQkgICAgICAgaHctPnF1ZXVlcyk7Ci0JaWYgKCFtZGV2KQotCQlnb3RvIGZhaWxfbWRldl9hbGxvYzsKLQotCW1wcml2ID0gbmV0ZGV2X3ByaXYobWRldik7Ci0JbXByaXYtPmxvY2FsID0gbG9jYWw7Ci0JbG9jYWwtPm1kZXYgPSBtZGV2OwotCi0JbG9jYWwtPmh3LndvcmtxdWV1ZSA9CisJbG9jYWwtPndvcmtxdWV1ZSA9CiAJCWNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSk7Ci0JaWYgKCFsb2NhbC0+aHcud29ya3F1ZXVlKSB7CisJaWYgKCFsb2NhbC0+d29ya3F1ZXVlKSB7CiAJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF93b3JrcXVldWU7CiAJfQpAQCAtOTIxLDE3ICs4NjYsNiBAQAogCX0KIAogCXJ0bmxfbG9jaygpOwotCXJlc3VsdCA9IGRldl9hbGxvY19uYW1lKGxvY2FsLT5tZGV2LCBsb2NhbC0+bWRldi0+bmFtZSk7Ci0JaWYgKHJlc3VsdCA8IDApCi0JCWdvdG8gZmFpbF9kZXY7Ci0KLQltZW1jcHkobG9jYWwtPm1kZXYtPmRldl9hZGRyLCBsb2NhbC0+aHcud2lwaHktPnBlcm1fYWRkciwgRVRIX0FMRU4pOwotCVNFVF9ORVRERVZfREVWKGxvY2FsLT5tZGV2LCB3aXBoeV9kZXYobG9jYWwtPmh3LndpcGh5KSk7Ci0JbG9jYWwtPm1kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7Ci0KLQlyZXN1bHQgPSByZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwotCWlmIChyZXN1bHQgPCAwKQotCQlnb3RvIGZhaWxfZGV2OwogCiAJcmVzdWx0ID0gaWVlZTgwMjExX2luaXRfcmF0ZV9jdHJsX2FsZyhsb2NhbCwKIAkJCQkJICAgICAgaHctPnJhdGVfY29udHJvbF9hbGdvcml0aG0pOwpAQCAtOTU2LDEzICs4OTAsMTMgQEAKIAogCS8qIGFsbG9jIGludGVybmFsIHNjYW4gcmVxdWVzdCAqLwogCWkgPSAwOwotCWxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHMgPSAmbG9jYWwtPnNjYW5fc3NpZDsKLQlsb2NhbC0+aW50X3NjYW5fcmVxLm5fc3NpZHMgPSAxOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEtPnNzaWRzID0gJmxvY2FsLT5zY2FuX3NzaWQ7CisJbG9jYWwtPmludF9zY2FuX3JlcS0+bl9zc2lkcyA9IDE7CiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlpZiAoIWh3LT53aXBoeS0+YmFuZHNbYmFuZF0pCiAJCQljb250aW51ZTsKIAkJZm9yIChqID0gMDsgaiA8IGh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgewotCQkJbG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVsc1tpXSA9CisJCQlsb2NhbC0+aW50X3NjYW5fcmVxLT5jaGFubmVsc1tpXSA9CiAJCQkJJmh3LT53aXBoeS0+YmFuZHNbYmFuZF0tPmNoYW5uZWxzW2pdOwogCQkJaSsrOwogCQl9CkBAIC05ODQsMjMgKzkxOCwxNyBAQAogCWllZWU4MDIxMV9sZWRfZXhpdChsb2NhbCk7CiAJaWVlZTgwMjExX3JlbW92ZV9pbnRlcmZhY2VzKGxvY2FsKTsKICBmYWlsX3JhdGU6Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwotCWxvY2FsLT5tZGV2ID0gTlVMTDsKLSBmYWlsX2RldjoKIAlydG5sX3VubG9jaygpOwogCWllZWU4MDIxMV93ZXBfZnJlZShsb2NhbCk7CiAgZmFpbF93ZXA6CiAJc3RhX2luZm9fc3RvcChsb2NhbCk7CiAgZmFpbF9zdGFfaW5mbzoKIAlkZWJ1Z2ZzX2h3X2RlbChsb2NhbCk7Ci0JZGVzdHJveV93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUobG9jYWwtPndvcmtxdWV1ZSk7CiAgZmFpbF93b3JrcXVldWU6Ci0JaWYgKGxvY2FsLT5tZGV2KQotCQlmcmVlX25ldGRldihsb2NhbC0+bWRldik7Ci0gZmFpbF9tZGV2X2FsbG9jOgogCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKICBmYWlsX3dpcGh5X3JlZ2lzdGVyOgotCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpOworCWtmcmVlKGxvY2FsLT5pbnRfc2Nhbl9yZXEpOwogCXJldHVybiByZXN1bHQ7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZWdpc3Rlcl9odyk7CkBAIC0xMDIyLDE1ICs5NTAsMTIgQEAKIAkgKiBiZWNhdXNlIHRoZSBkcml2ZXIgY2Fubm90IGJlIGhhbmRpbmcgdXMgZnJhbWVzIGFueQogCSAqIG1vcmUgYW5kIHRoZSB0YXNrbGV0IGlzIGtpbGxlZC4KIAkgKi8KLQotCS8qIEZpcnN0LCB3ZSByZW1vdmUgYWxsIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KIAlpZWVlODAyMTFfcmVtb3ZlX2ludGVyZmFjZXMobG9jYWwpOwogCi0JLyogdGhlbiwgZmluYWxseSwgcmVtb3ZlIHRoZSBtYXN0ZXIgaW50ZXJmYWNlICovCi0JdW5yZWdpc3Rlcl9uZXRkZXZpY2UobG9jYWwtPm1kZXYpOwotCiAJcnRubF91bmxvY2soKTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5yZWNvbmZpZ19maWx0ZXIpOworCiAJaWVlZTgwMjExX2NsZWFyX3R4X3BlbmRpbmcobG9jYWwpOwogCXN0YV9pbmZvX3N0b3AobG9jYWwpOwogCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwpAQCAtMTA0MywxMiArOTY4LDExIEBACiAJc2tiX3F1ZXVlX3B1cmdlKCZsb2NhbC0+c2tiX3F1ZXVlKTsKIAlza2JfcXVldWVfcHVyZ2UoJmxvY2FsLT5za2JfcXVldWVfdW5yZWxpYWJsZSk7CiAKLQlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShsb2NhbC0+d29ya3F1ZXVlKTsKIAl3aXBoeV91bnJlZ2lzdGVyKGxvY2FsLT5ody53aXBoeSk7CiAJaWVlZTgwMjExX3dlcF9mcmVlKGxvY2FsKTsKIAlpZWVlODAyMTFfbGVkX2V4aXQobG9jYWwpOwotCWZyZWVfbmV0ZGV2KGxvY2FsLT5tZGV2KTsKLQlrZnJlZShsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzKTsKKwlrZnJlZShsb2NhbC0+aW50X3NjYW5fcmVxKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcpOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaC5jIGIvbmV0L21hYzgwMjExL21lc2guYwppbmRleCAxMWNmNDViLi5mNzM2NGU1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoLmMKQEAgLTE4LDggKzE4LDExIEBACiAjZGVmaW5lIFBQX09GRlNFVCAJMQkJLyogUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgKi8KICNkZWZpbmUgUE1fT0ZGU0VUCTUJCS8qIFBhdGggU2VsZWN0aW9uIE1ldHJpYyAgICovCiAjZGVmaW5lIENDX09GRlNFVAk5CQkvKiBDb25nZXN0aW9uIENvbnRyb2wgTW9kZSAqLwotI2RlZmluZSBDQVBBQl9PRkZTRVQgMTcKLSNkZWZpbmUgQUNDRVBUX1BMSU5LUyAweDgwCisjZGVmaW5lIFNQX09GRlNFVAkxMwkJLyogU3luY2hyb25pemF0aW9uIFByb3RvY29sICovCisjZGVmaW5lIEFVVEhfT0ZGU0VUCTE3CQkvKiBBdXRoZW50aWNhdGlvbiBQcm90b2NvbCAqLworI2RlZmluZSBDQVBBQl9PRkZTRVQgCTIyCisjZGVmaW5lIENBUEFCX0FDQ0VQVF9QTElOS1MgMHg4MAorI2RlZmluZSBDQVBBQl9GT1JXQVJESU5HICAgIDB4MTAKIAogI2RlZmluZSBUTVJfUlVOTklOR19ISwkwCiAjZGVmaW5lIFRNUl9SVU5OSU5HX01QCTEKQEAgLTQ3LDE0ICs1MCwxNCBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAotCWlmbXNoLT5ob3VzZWtlZXBpbmcgPSB0cnVlOworCWlmbXNoLT53cmtxX2ZsYWdzIHw9IE1FU0hfV09SS19IT1VTRUtFRVBJTkc7CiAKIAlpZiAobG9jYWwtPnF1aWVzY2luZykgewogCQlzZXRfYml0KFRNUl9SVU5OSU5HX0hLLCAmaWZtc2gtPnRpbWVyc19ydW5uaW5nKTsKIAkJcmV0dXJuOwogCX0KIAotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtc2gtPndvcmspOwogfQogCiAvKioKQEAgLTg0LDcgKzg3LDkgQEAKIAkJbWVtY21wKGlmbXNoLT5tZXNoX2lkLCBpZS0+bWVzaF9pZCwgaWUtPm1lc2hfaWRfbGVuKSA9PSAwICYmCiAJCW1lbWNtcChpZm1zaC0+bWVzaF9wcF9pZCwgaWUtPm1lc2hfY29uZmlnICsgUFBfT0ZGU0VULCA0KSA9PSAwICYmCiAJCW1lbWNtcChpZm1zaC0+bWVzaF9wbV9pZCwgaWUtPm1lc2hfY29uZmlnICsgUE1fT0ZGU0VULCA0KSA9PSAwICYmCi0JCW1lbWNtcChpZm1zaC0+bWVzaF9jY19pZCwgaWUtPm1lc2hfY29uZmlnICsgQ0NfT0ZGU0VULCA0KSA9PSAwKQorCQltZW1jbXAoaWZtc2gtPm1lc2hfY2NfaWQsIGllLT5tZXNoX2NvbmZpZyArIENDX09GRlNFVCwgNCkgPT0gMCAmJgorCQltZW1jbXAoaWZtc2gtPm1lc2hfc3BfaWQsIGllLT5tZXNoX2NvbmZpZyArIFNQX09GRlNFVCwgNCkgPT0gMCAmJgorCQltZW1jbXAoaWZtc2gtPm1lc2hfYXV0aF9pZCwgaWUtPm1lc2hfY29uZmlnICsgQVVUSF9PRkZTRVQsIDQpID09IDApCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtOTcsNyArMTAyLDcgQEAKICAqLwogYm9vbCBtZXNoX3BlZXJfYWNjZXB0c19wbGlua3Moc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmllKQogewotCXJldHVybiAoKihpZS0+bWVzaF9jb25maWcgKyBDQVBBQl9PRkZTRVQpICYgQUNDRVBUX1BMSU5LUykgIT0gMDsKKwlyZXR1cm4gKCooaWUtPm1lc2hfY29uZmlnICsgQ0FQQUJfT0ZGU0VUKSAmIENBUEFCX0FDQ0VQVF9QTElOS1MpICE9IDA7CiB9CiAKIC8qKgpAQCAtMTIzLDExICsxMjgsMTggQEAKIAogdm9pZCBtZXNoX2lkc19zZXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKnN0YSkKIHsKLQl1OCBkZWZfaWRbNF0gPSB7MHgwMCwgMHgwRiwgMHhBQywgMHhmZn07CisJdTggb3VpWzNdID0gezB4MDAsIDB4MEYsIDB4QUN9OwogCi0JbWVtY3B5KHN0YS0+bWVzaF9wcF9pZCwgZGVmX2lkLCA0KTsKLQltZW1jcHkoc3RhLT5tZXNoX3BtX2lkLCBkZWZfaWQsIDQpOwotCW1lbWNweShzdGEtPm1lc2hfY2NfaWQsIGRlZl9pZCwgNCk7CisJbWVtY3B5KHN0YS0+bWVzaF9wcF9pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9wbV9pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9jY19pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9zcF9pZCwgb3VpLCBzaXplb2Yob3VpKSk7CisJbWVtY3B5KHN0YS0+bWVzaF9hdXRoX2lkLCBvdWksIHNpemVvZihvdWkpKTsKKwlzdGEtPm1lc2hfcHBfaWRbc2l6ZW9mKG91aSldID0gMDsKKwlzdGEtPm1lc2hfcG1faWRbc2l6ZW9mKG91aSldID0gMDsKKwlzdGEtPm1lc2hfY2NfaWRbc2l6ZW9mKG91aSldID0gMHhmZjsKKwlzdGEtPm1lc2hfc3BfaWRbc2l6ZW9mKG91aSldID0gMHhmZjsKKwlzdGEtPm1lc2hfYXV0aF9pZFtzaXplb2Yob3VpKV0gPSAweDA7CiB9CiAKIGludCBtZXNoX3JtY19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMjQ1LDcgKzI1Nyw3IEBACiAJaWYgKHNkYXRhLT51Lm1lc2gubWVzaF9pZF9sZW4pCiAJCW1lbWNweShwb3MsIHNkYXRhLT51Lm1lc2gubWVzaF9pZCwgc2RhdGEtPnUubWVzaC5tZXNoX2lkX2xlbik7CiAKLQlwb3MgPSBza2JfcHV0KHNrYiwgMjEpOworCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTik7CiAJKnBvcysrID0gV0xBTl9FSURfTUVTSF9DT05GSUc7CiAJKnBvcysrID0gSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTjsKIAkvKiBWZXJzaW9uICovCkBAIC0yNjMsMTUgKzI3NSwyMiBAQAogCW1lbWNweShwb3MsIHNkYXRhLT51Lm1lc2gubWVzaF9jY19pZCwgNCk7CiAJcG9zICs9IDQ7CiAKLQkvKiBDaGFubmVsIHByZWNlZGVuY2U6Ci0JICogTm90IHJ1bm5pbmcgc2ltcGxlIGNoYW5uZWwgdW5pZmljYXRpb24gcHJvdG9jb2wKLQkgKi8KLQltZW1zZXQocG9zLCAweDAwLCA0KTsKKwkvKiBTeW5jaHJvbml6YXRpb24gcHJvdG9jb2wgaWRlbnRpZmllciAqLworCW1lbWNweShwb3MsIHNkYXRhLT51Lm1lc2gubWVzaF9zcF9pZCwgNCk7CiAJcG9zICs9IDQ7CiAKKwkvKiBBdXRoZW50aWNhdGlvbiBQcm90b2NvbCBpZGVudGlmaWVyICovCisJbWVtY3B5KHBvcywgc2RhdGEtPnUubWVzaC5tZXNoX2F1dGhfaWQsIDQpOworCXBvcyArPSA0OworCisJLyogTWVzaCBGb3JtYXRpb24gSW5mbyAqLworCW1lbXNldChwb3MsIDB4MDAsIDEpOworCXBvcyArPSAxOworCiAJLyogTWVzaCBjYXBhYmlsaXR5ICovCiAJc2RhdGEtPnUubWVzaC5hY2NlcHRpbmdfcGxpbmtzID0gbWVzaF9wbGlua19hdmFpbGFibGVzKHNkYXRhKTsKLQkqcG9zKysgPSBzZGF0YS0+dS5tZXNoLmFjY2VwdGluZ19wbGlua3MgPyBBQ0NFUFRfUExJTktTIDogMHgwMDsKKwkqcG9zID0gQ0FQQUJfRk9SV0FSRElORzsKKwkqcG9zKysgfD0gc2RhdGEtPnUubWVzaC5hY2NlcHRpbmdfcGxpbmtzID8gQ0FQQUJfQUNDRVBUX1BMSU5LUyA6IDB4MDA7CiAJKnBvcysrID0gMHgwMDsKIAogCXJldHVybjsKQEAgLTMyMCwzMCArMzM5LDYgQEAKIAlyZXR1cm4gbmV3dGJsOwogfQogCi1zdGF0aWMgdm9pZCBfX21lc2hfdGFibGVfZnJlZShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKQotewotCWtmcmVlKHRibC0+aGFzaF9idWNrZXRzKTsKLQlrZnJlZSh0YmwtPmhhc2h3bG9jayk7Ci0Ja2ZyZWUodGJsKTsKLX0KLQotdm9pZCBtZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgYm9vbCBmcmVlX2xlYWZzKQotewotCXN0cnVjdCBobGlzdF9oZWFkICptZXNoX2hhc2g7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnAsICpxOwotCWludCBpOwotCi0JbWVzaF9oYXNoID0gdGJsLT5oYXNoX2J1Y2tldHM7Ci0JZm9yIChpID0gMDsgaSA8PSB0YmwtPmhhc2hfbWFzazsgaSsrKSB7Ci0JCXNwaW5fbG9jaygmdGJsLT5oYXNod2xvY2tbaV0pOwotCQlobGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZtZXNoX2hhc2hbaV0pIHsKLQkJCXRibC0+ZnJlZV9ub2RlKHAsIGZyZWVfbGVhZnMpOwotCQkJYXRvbWljX2RlYygmdGJsLT5lbnRyaWVzKTsKLQkJfQotCQlzcGluX3VubG9jaygmdGJsLT5oYXNod2xvY2tbaV0pOwotCX0KLQlfX21lc2hfdGFibGVfZnJlZSh0YmwpOwotfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTM1Nyw2MyArMzUyLDc5IEBACiAJCXJldHVybjsKIAl9CiAKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1zaC0+d29yayk7CisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKIH0KIAotc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfdGFibGVfZ3JvdyhzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKQotewotCXN0cnVjdCBtZXNoX3RhYmxlICpuZXd0Ymw7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKm9sZGhhc2g7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnAsICpxOwotCWludCBpOwotCi0JaWYgKGF0b21pY19yZWFkKCZ0YmwtPmVudHJpZXMpCi0JCQk8IHRibC0+bWVhbl9jaGFpbl9sZW4gKiAodGJsLT5oYXNoX21hc2sgKyAxKSkKLQkJZ290byBlbmRncm93OwotCi0JbmV3dGJsID0gbWVzaF90YWJsZV9hbGxvYyh0YmwtPnNpemVfb3JkZXIgKyAxKTsKLQlpZiAoIW5ld3RibCkKLQkJZ290byBlbmRncm93OwotCi0JbmV3dGJsLT5mcmVlX25vZGUgPSB0YmwtPmZyZWVfbm9kZTsKLQluZXd0YmwtPm1lYW5fY2hhaW5fbGVuID0gdGJsLT5tZWFuX2NoYWluX2xlbjsKLQluZXd0YmwtPmNvcHlfbm9kZSA9IHRibC0+Y29weV9ub2RlOwotCWF0b21pY19zZXQoJm5ld3RibC0+ZW50cmllcywgYXRvbWljX3JlYWQoJnRibC0+ZW50cmllcykpOwotCi0Jb2xkaGFzaCA9IHRibC0+aGFzaF9idWNrZXRzOwotCWZvciAoaSA9IDA7IGkgPD0gdGJsLT5oYXNoX21hc2s7IGkrKykKLQkJaGxpc3RfZm9yX2VhY2gocCwgJm9sZGhhc2hbaV0pCi0JCQlpZiAodGJsLT5jb3B5X25vZGUocCwgbmV3dGJsKSA8IDApCi0JCQkJZ290byBlcnJjb3B5OwotCi0JcmV0dXJuIG5ld3RibDsKLQotZXJyY29weToKLQlmb3IgKGkgPSAwOyBpIDw9IG5ld3RibC0+aGFzaF9tYXNrOyBpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfc2FmZShwLCBxLCAmbmV3dGJsLT5oYXNoX2J1Y2tldHNbaV0pCi0JCQl0YmwtPmZyZWVfbm9kZShwLCAwKTsKKy8qKgorICogaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMgLSBmaWxsIGFkZHJlc3NlcyBvZiBhIGxvY2FsbHkgb3JpZ2luYXRlZCBtZXNoIGZyYW1lCisgKiBAaGRyOiAgICAJODAyLjExIGZyYW1lIGhlYWRlcgorICogQGZjOgkJZnJhbWUgY29udHJvbCBmaWVsZAorICogQG1lc2hkYToJZGVzdGluYXRpb24gYWRkcmVzcyBpbiB0aGUgbWVzaAorICogQG1lc2hzYToJc291cmNlIGFkZHJlc3MgYWRkcmVzcyBpbiB0aGUgbWVzaC4gIFNhbWUgYXMgVEEsIGFzIGZyYW1lIGlzCisgKiAgICAgICAgICAgICAgbG9jYWxseSBvcmlnaW5hdGVkLgorICoKKyAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSA4MDIuMTEgKGRvZXMgbm90IGluY2x1ZGUgYSBtZXNoIGNvbnRyb2wgaGVhZGVyKQorICovCitpbnQgaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgX19sZTE2ICpmYywgY2hhcgorCQkqbWVzaGRhLCBjaGFyICptZXNoc2EpIHsKKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWVzaGRhKSkgeworCQkqZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKTsKKwkJLyogREEgVEEgU0EgKi8KKwkJbWVtY3B5KGhkci0+YWRkcjEsIG1lc2hkYSwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLT5hZGRyMiwgbWVzaHNhLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHItPmFkZHIzLCBtZXNoc2EsIEVUSF9BTEVOKTsKKwkJcmV0dXJuIDI0OworCX0gZWxzZSB7CisJCSpmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfAorCQkJCUlFRUU4MDIxMV9GQ1RMX1RPRFMpOworCQkvKiBSQSBUQSBEQSBTQSAqLworCQltZW1zZXQoaGRyLT5hZGRyMSwgMCwgRVRIX0FMRU4pOyAgIC8qIFJBIGlzIHJlc29sdmVkIGxhdGVyICovCisJCW1lbWNweShoZHItPmFkZHIyLCBtZXNoc2EsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGhkci0+YWRkcjMsIG1lc2hkYSwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLT5hZGRyNCwgbWVzaHNhLCBFVEhfQUxFTik7CisJCXJldHVybiAzMDsKIAl9Ci0JX19tZXNoX3RhYmxlX2ZyZWUobmV3dGJsKTsKLWVuZGdyb3c6Ci0JcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgogICogaWVlZTgwMjExX25ld19tZXNoX2hlYWRlciAtIGNyZWF0ZSBhIG5ldyBtZXNoIGhlYWRlcgogICogQG1lc2hoZHI6ICAgIHVuaW5pdGlhbGl6ZWQgbWVzaCBoZWFkZXIKICAqIEBzZGF0YToJbWVzaCBpbnRlcmZhY2UgdG8gYmUgdXNlZAorICogQGFkZHI0OglhZGRyNCBvZiB0aGUgbWVzaCBmcmFtZSAoMXN0IGluIGFlIGhlYWRlcikKKyAqICAgICAgICAgICAgICBtYXkgYmUgTlVMTAorICogQGFkZHI1OglhZGRyNSBvZiB0aGUgbWVzaCBmcmFtZSAoMXN0IG9yIDJuZCBpbiBhZSBoZWFkZXIpCisgKiAgICAgICAgICAgICAgbWF5IGJlIE5VTEwgdW5sZXNzIGFkZHI2IGlzIHByZXNlbnQKKyAqIEBhZGRyNjoJYWRkcjYgb2YgdGhlIG1lc2ggZnJhbWUgKDJuZCBvciAzcmQgaW4gYWUgaGVhZGVyKQorICogCQltYXkgYmUgTlVMTCB1bmxlc3MgYWRkcjUgaXMgcHJlc2VudAogICoKICAqIFJldHVybiB0aGUgaGVhZGVyIGxlbmd0aC4KICAqLwogaW50IGllZWU4MDIxMV9uZXdfbWVzaF9oZWFkZXIoc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyLAotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmFkZHI0LAorCQljaGFyICphZGRyNSwgY2hhciAqYWRkcjYpCiB7Ci0JbWVzaGhkci0+ZmxhZ3MgPSAwOworCWludCBhZWxlbiA9IDA7CisJbWVtc2V0KG1lc2hoZHIsIDAsIHNpemVvZihtZXNoaGRyKSk7CiAJbWVzaGhkci0+dHRsID0gc2RhdGEtPnUubWVzaC5tc2hjZmcuZG90MTFNZXNoVFRMOwogCXB1dF91bmFsaWduZWQoY3B1X3RvX2xlMzIoc2RhdGEtPnUubWVzaC5tZXNoX3NlcW51bSksICZtZXNoaGRyLT5zZXFudW0pOwogCXNkYXRhLT51Lm1lc2gubWVzaF9zZXFudW0rKzsKLQotCXJldHVybiA2OworCWlmIChhZGRyNCkgeworCQltZXNoaGRyLT5mbGFncyB8PSBNRVNIX0ZMQUdTX0FFX0E0OworCQlhZWxlbiArPSBFVEhfQUxFTjsKKwkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMSwgYWRkcjQsIEVUSF9BTEVOKTsKKwl9CisJaWYgKGFkZHI1ICYmIGFkZHI2KSB7CisJCW1lc2hoZHItPmZsYWdzIHw9IE1FU0hfRkxBR1NfQUVfQTVfQTY7CisJCWFlbGVuICs9IDIgKiBFVEhfQUxFTjsKKwkJaWYgKCFhZGRyNCkgeworCQkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMSwgYWRkcjUsIEVUSF9BTEVOKTsKKwkJCW1lbWNweShtZXNoaGRyLT5lYWRkcjIsIGFkZHI2LCBFVEhfQUxFTik7CisJCX0gZWxzZSB7CisJCQltZW1jcHkobWVzaGhkci0+ZWFkZHIyLCBhZGRyNSwgRVRIX0FMRU4pOworCQkJbWVtY3B5KG1lc2hoZHItPmVhZGRyMywgYWRkcjYsIEVUSF9BTEVOKTsKKwkJfQorCX0KKwlyZXR1cm4gNiArIGFlbGVuOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9ob3VzZWtlZXBpbmcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC00MzMsNyArNDQ0LDYgQEAKIAlpZiAoZnJlZV9wbGlua3MgIT0gc2RhdGEtPnUubWVzaC5hY2NlcHRpbmdfcGxpbmtzKQogCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OKTsKIAotCWlmbXNoLT5ob3VzZWtlZXBpbmcgPSBmYWxzZTsKIAltb2RfdGltZXIoJmlmbXNoLT5ob3VzZWtlZXBpbmdfdGltZXIsCiAJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSUVFRTgwMjExX01FU0hfSE9VU0VLRUVQSU5HX0lOVEVSVkFMKSk7CiB9CkBAIC00NzAsMTAgKzQ4MCwxMiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAotCWlmbXNoLT5ob3VzZWtlZXBpbmcgPSB0cnVlOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwlpZm1zaC0+d3JrcV9mbGFncyB8PSBNRVNIX1dPUktfSE9VU0VLRUVQSU5HOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CisJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gTUVTSF9ERUZBVUxUX0JFQUNPTl9JTlRFUlZBTDsKIAlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OIHwKLQkJCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKKwkJCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEIHwKKwkJCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9JTlQpOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdG9wX21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCkBAIC01NjgsNyArNTgwLDcgQEAKIAogCWlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CiAKLQlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKKwlyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJc3R5cGUgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOwogCkBAIC01OTcsNyArNjA5LDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCiAJCXJldHVybjsKIAotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQorCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybjsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmlmbXNoLT5za2JfcXVldWUpKSkKQEAgLTYwOCw3ICs2MjAsMTMgQEAKIAkJICAgICAgIGlmbXNoLT5sYXN0X3ByZXEgKyBtc2Vjc190b19qaWZmaWVzKGlmbXNoLT5tc2hjZmcuZG90MTFNZXNoSFdNUHByZXFNaW5JbnRlcnZhbCkpKQogCQltZXNoX3BhdGhfc3RhcnRfZGlzY292ZXJ5KHNkYXRhKTsKIAotCWlmIChpZm1zaC0+aG91c2VrZWVwaW5nKQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTUVTSF9XT1JLX0dST1dfTVBBVEhfVEFCTEUsICZpZm1zaC0+d3JrcV9mbGFncykpCisJCW1lc2hfbXBhdGhfdGFibGVfZ3JvdygpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNRVNIX1dPUktfR1JPV19NUEFUSF9UQUJMRSwgJmlmbXNoLT53cmtxX2ZsYWdzKSkKKwkJbWVzaF9tcHBfdGFibGVfZ3JvdygpOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChNRVNIX1dPUktfSE9VU0VLRUVQSU5HLCAmaWZtc2gtPndya3FfZmxhZ3MpKQogCQlpZWVlODAyMTFfbWVzaF9ob3VzZWtlZXBpbmcoc2RhdGEsIGlmbXNoKTsKIH0KIApAQCAtNjE5LDcgKzYzNyw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQotCQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWVzaC53b3JrKTsKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZzZGF0YS0+dS5tZXNoLndvcmspOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC02NzEsOCArNjg5LDcgQEAKIH0KIAogaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX21lc2hfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCitpZWVlODAyMTFfbWVzaF9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKQEAgLTY4NiwxMiArNzAzLDE0IEBACiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIAogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKKwkJaWYgKHNrYi0+bGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSkKKwkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKLQkJbWVtY3B5KHNrYi0+Y2IsIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJmlmbXNoLT5za2JfcXVldWUsIHNrYik7Ci0JCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKIAkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmggYi9uZXQvbWFjODAyMTEvbWVzaC5oCmluZGV4IGM3ZDcyODEuLmRkMWMxOTMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmgKKysrIGIvbmV0L21hYzgwMjExL21lc2guaApAQCAtNDQsNiArNDQsMjMgQEAKIH07CiAKIC8qKgorICogZW51bSBtZXNoX2RlZmVycmVkX3Rhc2tfZmxhZ3MgLSBtYWM4MDIxMSBtZXNoIGRlZmVycmVkIHRhc2tzCisgKgorICoKKyAqCisgKiBATUVTSF9XT1JLX0hPVVNFS0VFUElORzogcnVuIHRoZSBwZXJpb2RpYyBtZXNoIGhvdXNla2VlcGluZyB0YXNrcworICogQE1FU0hfV09SS19HUk9XX01QQVRIX1RBQkxFOiB0aGUgbWVzaCBwYXRoIHRhYmxlIGlzIGZ1bGwgYW5kIG5lZWRzCisgKiB0byBncm93LgorICogQE1FU0hfV09SS19HUk9XX01QUF9UQUJMRTogdGhlIG1lc2ggcG9ydGFscyB0YWJsZSBpcyBmdWxsIGFuZCBuZWVkcyB0bworICogZ3JvdworICovCitlbnVtIG1lc2hfZGVmZXJyZWRfdGFza19mbGFncyB7CisJTUVTSF9XT1JLX0hPVVNFS0VFUElORywKKwlNRVNIX1dPUktfR1JPV19NUEFUSF9UQUJMRSwKKwlNRVNIX1dPUktfR1JPV19NUFBfVEFCTEUsCit9OworCisvKioKICAqIHN0cnVjdCBtZXNoX3BhdGggLSBtYWM4MDIxMSBtZXNoIHBhdGggc3RydWN0dXJlCiAgKgogICogQGRzdDogbWVzaCBwYXRoIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzCkBAIC02MSw3ICs3OCw3IEBACiAgKiAJcmV0cnkKICAqIEBkaXNjb3ZlcnlfcmV0cmllczogbnVtYmVyIG9mIGRpc2NvdmVyeSByZXRyaWVzCiAgKiBAZmxhZ3M6IG1lc2ggcGF0aCBmbGFncywgYXMgc3BlY2lmaWVkIG9uICZlbnVtIG1lc2hfcGF0aF9mbGFncwotICogQHN0YXRlX2xvY2s6IG1lc2ggcGF0IHN0YXRlIGxvY2sKKyAqIEBzdGF0ZV9sb2NrOiBtZXNoIHBhdGggc3RhdGUgbG9jawogICoKICAqCiAgKiBUaGUgY29tYmluYXRpb24gb2YgZHN0IGFuZCBzZGF0YSBpcyB1bmlxdWUgaW4gdGhlIG1lc2ggcGF0aCB0YWJsZS4gU2luY2UgdGhlCkBAIC0xNzQsNiArMTkxLDcgQEAKICAqLwogI2RlZmluZSBNRVNIX1BBVEhfUkVGUkVTSF9USU1FCQkJMTAwMAogI2RlZmluZSBNRVNIX01JTl9ESVNDT1ZFUllfVElNRU9VVCAoMiAqIE1FU0hfRElBTV9UUkFWRVJTQUxfVElNRSkKKyNkZWZpbmUgTUVTSF9ERUZBVUxUX0JFQUNPTl9JTlRFUlZBTAkJMTAwMCAJLyogaW4gMTAyNCB1cyB1bml0cyAqLwogCiAjZGVmaW5lIE1FU0hfTUFYX1BSRVFfUkVUUklFUyA0CiAjZGVmaW5lIE1FU0hfUEFUSF9FWFBJUkUgKDYwMCAqIEhaKQpAQCAtMTkzLDggKzIxMSwxMSBAQAogCiAvKiBQdWJsaWMgaW50ZXJmYWNlcyAqLwogLyogVmFyaW91cyAqLworaW50IGllZWU4MDIxMV9maWxsX21lc2hfYWRkcmVzc2VzKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIF9fbGUxNiAqZmMsCisJCWNoYXIgKmRhLCBjaGFyICpzYSk7CiBpbnQgaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcihzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hoZHIsCi0JCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmFkZHI0LAorCQljaGFyICphZGRyNSwgY2hhciAqYWRkcjYpOwogaW50IG1lc2hfcm1jX2NoZWNrKHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hfaGRyLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBib29sIG1lc2hfbWF0Y2hlc19sb2NhbChzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqaWUsCkBAIC0yMDUsMTEgKzIyNiwxMiBAQAogdm9pZCBtZXNoX3JtY19mcmVlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIGludCBtZXNoX3JtY19pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExc19pbml0KHZvaWQpOwordm9pZCBpZWVlODAyMTFzX3VwZGF0ZV9tZXRyaWMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCXN0cnVjdCBzdGFfaW5mbyAqc3RhaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGllZWU4MDIxMXNfc3RvcCh2b2lkKTsKIHZvaWQgaWVlZTgwMjExX21lc2hfaW5pdF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiBpZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfbWVzaF9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpZWVlODAyMTFfbWVzaF9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogdm9pZCBpZWVlODAyMTFfc3RvcF9tZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIApAQCAtMjQ3LDcgKzI2OSw4IEBACiAvKiBNZXNoIHRhYmxlcyAqLwogc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfdGFibGVfYWxsb2MoaW50IHNpemVfb3JkZXIpOwogdm9pZCBtZXNoX3RhYmxlX2ZyZWUoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgYm9vbCBmcmVlX2xlYWZzKTsKLXN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2dyb3coc3RydWN0IG1lc2hfdGFibGUgKnRibCk7Cit2b2lkIG1lc2hfbXBhdGhfdGFibGVfZ3Jvdyh2b2lkKTsKK3ZvaWQgbWVzaF9tcHBfdGFibGVfZ3Jvdyh2b2lkKTsKIHUzMiBtZXNoX3RhYmxlX2hhc2godTggKmFkZHIsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKTsKIC8qIE1lc2ggcGF0aHMgKi8KQEAgLTI2Niw2ICsyODksOCBAQAogdm9pZCBtZXNoX3BhdGhfcXVpZXNjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIG1lc2hfcGF0aF9yZXN0YXJ0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAorZXh0ZXJuIGludCBtZXNoX3BhdGhzX2dlbmVyYXRpb247CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogZXh0ZXJuIGludCBtZXNoX2FsbG9jYXRlZDsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCmluZGV4IGY0OWVmMjguLmUxMmE3ODYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKQEAgLTIwMSw2ICsyMDEsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBpZWVlODAyMTFzX3VwZGF0ZV9tZXRyaWMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCXN0cnVjdCBzdGFfaW5mbyAqc3RhaW5mbywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlpbnQgZmFpbGVkOworCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm47CisKKwlmYWlsZWQgPSAhKHR4aW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spOworCisJLyogbW92aW5nIGF2ZXJhZ2UsIHNjYWxlZCB0byAxMDAgKi8KKwlzdGFpbmZvLT5mYWlsX2F2ZyA9ICgoODAgKiBzdGFpbmZvLT5mYWlsX2F2ZyArIDUpIC8gMTAwICsgMjAgKiBmYWlsZWQpOworCWlmIChzdGFpbmZvLT5mYWlsX2F2ZyA+IDk1KQorCQltZXNoX3BsaW5rX2Jyb2tlbihzdGFpbmZvKTsKK30KKwogc3RhdGljIHUzMiBhaXJ0aW1lX2xpbmtfbWV0cmljX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKQEAgLTM5Nyw3ICs0MTUsOCBAQAogCiBzdGF0aWMgdm9pZCBod21wX3ByZXFfZnJhbWVfcHJvY2VzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgICB1OCAqcHJlcV9lbGVtLCB1MzIgbWV0cmljKSB7CisJCQkJICAgIHU4ICpwcmVxX2VsZW0sIHUzMiBtZXRyaWMpCit7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tZXNoICppZm1zaCA9ICZzZGF0YS0+dS5tZXNoOwogCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOwogCXU4ICpkc3RfYWRkciwgKm9yaWdfYWRkcjsKQEAgLTQzMCw3ICs0NDksNyBAQAogCQkJaWYgKCghKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9EU05fVkFMSUQpKSB8fAogCQkJCQlEU05fTFQobXBhdGgtPmRzbiwgZHN0X2RzbikpIHsKIAkJCQltcGF0aC0+ZHNuID0gZHN0X2RzbjsKLQkJCQltcGF0aC0+ZmxhZ3MgJj0gTUVTSF9QQVRIX0RTTl9WQUxJRDsKKwkJCQltcGF0aC0+ZmxhZ3MgfD0gTUVTSF9QQVRIX0RTTl9WQUxJRDsKIAkJCX0gZWxzZSBpZiAoKCEoZHN0X2ZsYWdzICYgTVBfRl9ETykpICYmCiAJCQkJCShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfQUNUSVZFKSkgewogCQkJCXJlcGx5ID0gdHJ1ZTsKQEAgLTQ3OCw2ICs0OTcsNyBAQAogCQkJCWhvcGNvdW50LCB0dGwsIGNwdV90b19sZTMyKGxpZmV0aW1lKSwKIAkJCQljcHVfdG9fbGUzMihtZXRyaWMpLCBjcHVfdG9fbGUzMihwcmVxX2lkKSwKIAkJCQlzZGF0YSk7CisJCWlmbXNoLT5tc2hzdGF0cy5md2RlZF9tY2FzdCsrOwogCQlpZm1zaC0+bXNoc3RhdHMuZndkZWRfZnJhbWVzKys7CiAJfQogfQpAQCAtNTM2LDYgKzU1Niw4IEBACiAJCWNwdV90b19sZTMyKGxpZmV0aW1lKSwgY3B1X3RvX2xlMzIobWV0cmljKSwKIAkJMCwgc2RhdGEpOwogCXJjdV9yZWFkX3VubG9jaygpOworCisJc2RhdGEtPnUubWVzaC5tc2hzdGF0cy5md2RlZF91bmljYXN0Kys7CiAJc2RhdGEtPnUubWVzaC5tc2hzdGF0cy5md2RlZF9mcmFtZXMrKzsKIAlyZXR1cm47CiAKQEAgLTY2MCwxNCArNjgyLDE0IEBACiAJc3Bpbl91bmxvY2soJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZm1zaC0+bGFzdF9wcmVxICsgbWluX3ByZXFfaW50X2ppZmYoc2RhdGEpKSkKLQkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbXNoLT53b3JrKTsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CiAKIAllbHNlIGlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBpZm1zaC0+bGFzdF9wcmVxKSkgewogCQkvKiBhdm9pZCBsb25nIHdhaXQgaWYgZGlkIG5vdCBzZW5kIHByZXFzIGZvciBhIGxvbmcgdGltZQogCQkgKiBhbmQgamlmZmllcyB3cmFwcGVkIGFyb3VuZAogCQkgKi8KIAkJaWZtc2gtPmxhc3RfcHJlcSA9IGppZmZpZXMgLSBtaW5fcHJlcV9pbnRfamlmZihzZGF0YSkgLSAxOwotCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtc2gtPndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJmlmbXNoLT53b3JrKTsKIAl9IGVsc2UKIAkJbW9kX3RpbWVyKCZpZm1zaC0+bWVzaF9wYXRoX3RpbWVyLCBpZm1zaC0+bGFzdF9wcmVxICsKIAkJCQkJCW1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSk7CkBAIC02ODYsMTEgKzcwOCwxMSBAQAogCXU4IHR0bCwgZHN0X2ZsYWdzOwogCXUzMiBsaWZldGltZTsKIAotCXNwaW5fbG9jaygmaWZtc2gtPm1lc2hfcHJlcV9xdWV1ZV9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAJaWYgKCFpZm1zaC0+cHJlcV9xdWV1ZV9sZW4gfHwKIAkJdGltZV9iZWZvcmUoamlmZmllcywgaWZtc2gtPmxhc3RfcHJlcSArCiAJCQkJbWluX3ByZXFfaW50X2ppZmYoc2RhdGEpKSkgewotCQlzcGluX3VubG9jaygmaWZtc2gtPm1lc2hfcHJlcV9xdWV1ZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY5OCw3ICs3MjAsNyBAQAogCQkJc3RydWN0IG1lc2hfcHJlcV9xdWV1ZSwgbGlzdCk7CiAJbGlzdF9kZWwoJnByZXFfbm9kZS0+bGlzdCk7CiAJLS1pZm1zaC0+cHJlcV9xdWV1ZV9sZW47Ci0Jc3Bpbl91bmxvY2soJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlmbXNoLT5tZXNoX3ByZXFfcXVldWVfbG9jayk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbXBhdGggPSBtZXNoX3BhdGhfbG9va3VwKHByZXFfbm9kZS0+ZHN0LCBzZGF0YSk7CkBAIC03ODQsNyArODA2LDYgQEAKIAkJbWVzaF9wYXRoX2FkZChkc3RfYWRkciwgc2RhdGEpOwogCQltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXAoZHN0X2FkZHIsIHNkYXRhKTsKIAkJaWYgKCFtcGF0aCkgewotCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJc2RhdGEtPnUubWVzaC5tc2hzdGF0cy5kcm9wcGVkX2ZyYW1lc19ub19yb3V0ZSsrOwogCQkJZXJyID0gLUVOT1NQQzsKIAkJCWdvdG8gZW5kbG9va3VwOwpAQCAtNzkyLDcgKzgxMyw3IEBACiAJfQogCiAJaWYgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9BQ1RJVkUpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbXBhdGgtPmV4cF90aW1lIC0KKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbXBhdGgtPmV4cF90aW1lICsKIAkJCW1zZWNzX3RvX2ppZmZpZXMoc2RhdGEtPnUubWVzaC5tc2hjZmcucGF0aF9yZWZyZXNoX3RpbWUpKQogCQkJCSYmICFtZW1jbXAoc2RhdGEtPmRldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjQsCiAJCQkJCSAgIEVUSF9BTEVOKQpAQCAtODA0LDE3ICs4MjUsMTcgQEAKIAkJbWVtY3B5KGhkci0+YWRkcjEsIG1wYXRoLT5uZXh0X2hvcC0+c3RhLmFkZHIsCiAJCQkJRVRIX0FMRU4pOwogCX0gZWxzZSB7CisJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAkJaWYgKCEobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX1JFU09MVklORykpIHsKIAkJCS8qIFN0YXJ0IGRpc2NvdmVyeSBvbmx5IGlmIGl0IGlzIG5vdCBydW5uaW5nIHlldCAqLwogCQkJbWVzaF9xdWV1ZV9wcmVxKG1wYXRoLCBQUkVRX1FfRl9TVEFSVCk7CiAJCX0KIAogCQlpZiAoc2tiX3F1ZXVlX2xlbigmbXBhdGgtPmZyYW1lX3F1ZXVlKSA+PQotCQkJCU1FU0hfRlJBTUVfUVVFVUVfTEVOKSB7Ci0JCQlza2JfdG9fZnJlZSA9IG1wYXRoLT5mcmFtZV9xdWV1ZS5uZXh0OwotCQkJc2tiX3VubGluayhza2JfdG9fZnJlZSwgJm1wYXRoLT5mcmFtZV9xdWV1ZSk7Ci0JCX0KKwkJCQlNRVNIX0ZSQU1FX1FVRVVFX0xFTikKKwkJCXNrYl90b19mcmVlID0gc2tiX2RlcXVldWUoJm1wYXRoLT5mcmFtZV9xdWV1ZSk7CiAKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOwogCQlza2JfcXVldWVfdGFpbCgmbXBhdGgtPmZyYW1lX3F1ZXVlLCBza2IpOwogCQlpZiAoc2tiX3RvX2ZyZWUpCiAJCQltZXNoX3BhdGhfZGlzY2FyZF9mcmFtZShza2JfdG9fZnJlZSwgc2RhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDQ3OTU5N2UuLjc1MWM0ZDAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTM4LDYgKzM4LDcxIEBACiBzdGF0aWMgc3RydWN0IG1lc2hfdGFibGUgKm1lc2hfcGF0aHM7CiBzdGF0aWMgc3RydWN0IG1lc2hfdGFibGUgKm1wcF9wYXRoczsgLyogU3RvcmUgcGF0aHMgZm9yIE1QUCZNQVAgKi8KIAoraW50IG1lc2hfcGF0aHNfZ2VuZXJhdGlvbjsKK3N0YXRpYyB2b2lkIF9fbWVzaF90YWJsZV9mcmVlKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwpCit7CisJa2ZyZWUodGJsLT5oYXNoX2J1Y2tldHMpOworCWtmcmVlKHRibC0+aGFzaHdsb2NrKTsKKwlrZnJlZSh0YmwpOworfQorCit2b2lkIG1lc2hfdGFibGVfZnJlZShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBib29sIGZyZWVfbGVhZnMpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKm1lc2hfaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgKnE7CisJaW50IGk7CisKKwltZXNoX2hhc2ggPSB0YmwtPmhhc2hfYnVja2V0czsKKwlmb3IgKGkgPSAwOyBpIDw9IHRibC0+aGFzaF9tYXNrOyBpKyspIHsKKwkJc3Bpbl9sb2NrKCZ0YmwtPmhhc2h3bG9ja1tpXSk7CisJCWhsaXN0X2Zvcl9lYWNoX3NhZmUocCwgcSwgJm1lc2hfaGFzaFtpXSkgeworCQkJdGJsLT5mcmVlX25vZGUocCwgZnJlZV9sZWFmcyk7CisJCQlhdG9taWNfZGVjKCZ0YmwtPmVudHJpZXMpOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0YmwtPmhhc2h3bG9ja1tpXSk7CisJfQorCV9fbWVzaF90YWJsZV9mcmVlKHRibCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVzaF90YWJsZSAqbWVzaF90YWJsZV9ncm93KHN0cnVjdCBtZXNoX3RhYmxlICp0YmwpCit7CisJc3RydWN0IG1lc2hfdGFibGUgKm5ld3RibDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqb2xkaGFzaDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcCwgKnE7CisJaW50IGk7CisKKwlpZiAoYXRvbWljX3JlYWQoJnRibC0+ZW50cmllcykKKwkJCTwgdGJsLT5tZWFuX2NoYWluX2xlbiAqICh0YmwtPmhhc2hfbWFzayArIDEpKQorCQlnb3RvIGVuZGdyb3c7CisKKwluZXd0YmwgPSBtZXNoX3RhYmxlX2FsbG9jKHRibC0+c2l6ZV9vcmRlciArIDEpOworCWlmICghbmV3dGJsKQorCQlnb3RvIGVuZGdyb3c7CisKKwluZXd0YmwtPmZyZWVfbm9kZSA9IHRibC0+ZnJlZV9ub2RlOworCW5ld3RibC0+bWVhbl9jaGFpbl9sZW4gPSB0YmwtPm1lYW5fY2hhaW5fbGVuOworCW5ld3RibC0+Y29weV9ub2RlID0gdGJsLT5jb3B5X25vZGU7CisJYXRvbWljX3NldCgmbmV3dGJsLT5lbnRyaWVzLCBhdG9taWNfcmVhZCgmdGJsLT5lbnRyaWVzKSk7CisKKwlvbGRoYXNoID0gdGJsLT5oYXNoX2J1Y2tldHM7CisJZm9yIChpID0gMDsgaSA8PSB0YmwtPmhhc2hfbWFzazsgaSsrKQorCQlobGlzdF9mb3JfZWFjaChwLCAmb2xkaGFzaFtpXSkKKwkJCWlmICh0YmwtPmNvcHlfbm9kZShwLCBuZXd0YmwpIDwgMCkKKwkJCQlnb3RvIGVycmNvcHk7CisKKwlyZXR1cm4gbmV3dGJsOworCitlcnJjb3B5OgorCWZvciAoaSA9IDA7IGkgPD0gbmV3dGJsLT5oYXNoX21hc2s7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9zYWZlKHAsIHEsICZuZXd0YmwtPmhhc2hfYnVja2V0c1tpXSkKKwkJCXRibC0+ZnJlZV9ub2RlKHAsIDApOworCX0KKwlfX21lc2hfdGFibGVfZnJlZShuZXd0YmwpOworZW5kZ3JvdzoKKwlyZXR1cm4gTlVMTDsKK30KKworCiAvKiBUaGlzIGxvY2sgd2lsbCBoYXZlIHRoZSBncm93IHRhYmxlIGZ1bmN0aW9uIGFzIHdyaXRlciBhbmQgYWRkIC8gZGVsZXRlIG5vZGVzCiAgKiBhcyByZWFkZXJzLiBXaGVuIHJlYWRpbmcgdGhlIHRhYmxlIChpLmUuIGRvaW5nIGxvb2t1cHMpIHdlIGFyZSB3ZWxsIHByb3RlY3RlZAogICogYnkgUkNVCkBAIC01NSw3ICsxMjAsMjUgQEAKICAqLwogdm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogeworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRtcHE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCXJjdV9hc3NpZ25fcG9pbnRlcihtcGF0aC0+bmV4dF9ob3AsIHN0YSk7CisKKwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnRtcHEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wYXRoLT5mcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJm1wYXRoLT5mcmFtZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwkJbWVtY3B5KGhkci0+YWRkcjEsIHN0YS0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKKwkJX19za2JfcXVldWVfdGFpbCgmdG1wcSwgc2tiKTsKKwl9CisKKwlza2JfcXVldWVfc3BsaWNlKCZ0bXBxLCAmbXBhdGgtPmZyYW1lX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcGF0aC0+ZnJhbWVfcXVldWUubG9jaywgZmxhZ3MpOwogfQogCiAKQEAgLTE2Nyw2ICsyNTAsOCBAQAogICovCiBpbnQgbWVzaF9wYXRoX2FkZCh1OCAqZHN0LCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsICpuZXdfbXBhdGg7CiAJc3RydWN0IG1wYXRoX25vZGUgKm5vZGUsICpuZXdfbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OwpAQCAtMTc1LDggKzI2MCw2IEBACiAJaW50IGVyciA9IDA7CiAJdTMyIGhhc2hfaWR4OwogCi0JbWlnaHRfc2xlZXAoKTsKLQogCWlmIChtZW1jbXAoZHN0LCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCiAJCS8qIG5ldmVyIGFkZCBvdXJzZWx2ZXMgYXMgbmVpZ2hib3VycyAqLwogCQlyZXR1cm4gLUVOT1RTVVBQOwpAQCAtMTg4LDExICsyNzEsMTEgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAllcnIgPSAtRU5PTUVNOwotCW5ld19tcGF0aCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZXNoX3BhdGgpLCBHRlBfS0VSTkVMKTsKKwluZXdfbXBhdGggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF9wYXRoKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfbXBhdGgpCiAJCWdvdG8gZXJyX3BhdGhfYWxsb2M7CiAKLQluZXdfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtcGF0aF9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXBhdGhfbm9kZSksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X25vZGUpCiAJCWdvdG8gZXJyX25vZGVfYWxsb2M7CiAKQEAgLTIyNSwyMyArMzA4LDEzIEBACiAJCW1lc2hfcGF0aHMtPm1lYW5fY2hhaW5fbGVuICogKG1lc2hfcGF0aHMtPmhhc2hfbWFzayArIDEpKQogCQlncm93ID0gMTsKIAorCW1lc2hfcGF0aHNfZ2VuZXJhdGlvbisrOworCiAJc3Bpbl91bmxvY2soJm1lc2hfcGF0aHMtPmhhc2h3bG9ja1toYXNoX2lkeF0pOwogCXJlYWRfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoZ3JvdykgewotCQlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOwotCi0JCXdyaXRlX2xvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwotCQlvbGR0YmwgPSBtZXNoX3BhdGhzOwotCQluZXd0YmwgPSBtZXNoX3RhYmxlX2dyb3cobWVzaF9wYXRocyk7Ci0JCWlmICghbmV3dGJsKSB7Ci0JCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG1lc2hfcGF0aHMsIG5ld3RibCk7Ci0JCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7Ci0KLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCW1lc2hfdGFibGVfZnJlZShvbGR0YmwsIGZhbHNlKTsKKwkJc2V0X2JpdChNRVNIX1dPUktfR1JPV19NUEFUSF9UQUJMRSwgICZpZm1zaC0+d3JrcV9mbGFncyk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CiAJfQogCXJldHVybiAwOwogCkBAIC0yNTYsOSArMzI5LDQ2IEBACiAJcmV0dXJuIGVycjsKIH0KIAordm9pZCBtZXNoX21wYXRoX3RhYmxlX2dyb3codm9pZCkKK3sKKwlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOworCisJd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJb2xkdGJsID0gbWVzaF9wYXRoczsKKwluZXd0YmwgPSBtZXNoX3RhYmxlX2dyb3cobWVzaF9wYXRocyk7CisJaWYgKCFuZXd0YmwpIHsKKwkJd3JpdGVfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlyY3VfYXNzaWduX3BvaW50ZXIobWVzaF9wYXRocywgbmV3dGJsKTsKKwl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCisJc3luY2hyb25pemVfcmN1KCk7CisJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOworfQorCit2b2lkIG1lc2hfbXBwX3RhYmxlX2dyb3codm9pZCkKK3sKKwlzdHJ1Y3QgbWVzaF90YWJsZSAqb2xkdGJsLCAqbmV3dGJsOworCisJd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJb2xkdGJsID0gbXBwX3BhdGhzOworCW5ld3RibCA9IG1lc2hfdGFibGVfZ3JvdyhtcHBfcGF0aHMpOworCWlmICghbmV3dGJsKSB7CisJCXdyaXRlX3VubG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7CisJCXJldHVybjsKKwl9CisJcmN1X2Fzc2lnbl9wb2ludGVyKG1wcF9wYXRocywgbmV3dGJsKTsKKwl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOworCisJc3luY2hyb25pemVfcmN1KCk7CisJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOworfQogCiBpbnQgbXBwX3BhdGhfYWRkKHU4ICpkc3QsIHU4ICptcHAsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgKm5ld19tcGF0aDsKIAlzdHJ1Y3QgbXBhdGhfbm9kZSAqbm9kZSwgKm5ld19ub2RlOwogCXN0cnVjdCBobGlzdF9oZWFkICpidWNrZXQ7CkBAIC0yNjcsOCArMzc3LDYgQEAKIAlpbnQgZXJyID0gMDsKIAl1MzIgaGFzaF9pZHg7CiAKLQltaWdodF9zbGVlcCgpOwotCiAJaWYgKG1lbWNtcChkc3QsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKIAkJLyogbmV2ZXIgYWRkIG91cnNlbHZlcyBhcyBuZWlnaGJvdXJzICovCiAJCXJldHVybiAtRU5PVFNVUFA7CkBAIC0yNzcsMTEgKzM4NSwxMSBAQAogCQlyZXR1cm4gLUVOT1RTVVBQOwogCiAJZXJyID0gLUVOT01FTTsKLQluZXdfbXBhdGggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzaF9wYXRoKSwgR0ZQX0tFUk5FTCk7CisJbmV3X21wYXRoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1lc2hfcGF0aCksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X21wYXRoKQogCQlnb3RvIGVycl9wYXRoX2FsbG9jOwogCi0JbmV3X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXBhdGhfbm9kZSksIEdGUF9LRVJORUwpOworCW5ld19ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1wYXRoX25vZGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19ub2RlKQogCQlnb3RvIGVycl9ub2RlX2FsbG9jOwogCkBAIC0zMTUsMjAgKzQyMyw4IEBACiAJc3Bpbl91bmxvY2soJm1wcF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAJcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCWlmIChncm93KSB7Ci0JCXN0cnVjdCBtZXNoX3RhYmxlICpvbGR0YmwsICpuZXd0Ymw7Ci0KLQkJd3JpdGVfbG9jaygmcGF0aHRibF9yZXNpemVfbG9jayk7Ci0JCW9sZHRibCA9IG1wcF9wYXRoczsKLQkJbmV3dGJsID0gbWVzaF90YWJsZV9ncm93KG1wcF9wYXRocyk7Ci0JCWlmICghbmV3dGJsKSB7Ci0JCQl3cml0ZV91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG1wcF9wYXRocywgbmV3dGJsKTsKLQkJd3JpdGVfdW5sb2NrKCZwYXRodGJsX3Jlc2l6ZV9sb2NrKTsKLQotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQkJbWVzaF90YWJsZV9mcmVlKG9sZHRibCwgZmFsc2UpOworCQlzZXRfYml0KE1FU0hfV09SS19HUk9XX01QUF9UQUJMRSwgICZpZm1zaC0+d3JrcV9mbGFncyk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1zaC0+d29yayk7CiAJfQogCXJldHVybiAwOwogCkBAIC00NjYsNiArNTYyLDcgQEAKIAogCWVyciA9IC1FTlhJTzsKIGVuZGRlbDoKKwltZXNoX3BhdGhzX2dlbmVyYXRpb24rKzsKIAlzcGluX3VubG9jaygmbWVzaF9wYXRocy0+aGFzaHdsb2NrW2hhc2hfaWR4XSk7CiAJcmVhZF91bmxvY2soJnBhdGh0YmxfcmVzaXplX2xvY2spOwogCXJldHVybiBlcnI7CkBAIC00ODEsMTEgKzU3OCw5IEBACiAgKi8KIHZvaWQgbWVzaF9wYXRoX3R4X3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJm1wYXRoLT5mcmFtZV9xdWV1ZSkpICYmCi0JCQkobXBhdGgtPmZsYWdzICYgTUVTSF9QQVRIX0FDVElWRSkpCi0JCWRldl9xdWV1ZV94bWl0KHNrYik7CisJaWYgKG1wYXRoLT5mbGFncyAmIE1FU0hfUEFUSF9BQ1RJVkUpCisJCWllZWU4MDIxMV9hZGRfcGVuZGluZ19za2JzKG1wYXRoLT5zZGF0YS0+bG9jYWwsCisJCQkJJm1wYXRoLT5mcmFtZV9xdWV1ZSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggY2IxNDI1My4uZmZjYmFkNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC00MDksNyArNDA5LDcgQEAKIAliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CiAJaWYgKG1nbXQtPnUuYWN0aW9uLnUucGxpbmtfYWN0aW9uLmFjdGlvbl9jb2RlID09IFBMSU5LX0NPTkZJUk0pIHsKIAkJYmFzZWFkZHIgKz0gNDsKLQkJYmFzZWxlbiAtPSA0OworCQliYXNlbGVuICs9IDQ7CiAJfQogCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMoYmFzZWFkZHIsIGxlbiAtIGJhc2VsZW4sICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5wZWVyX2xpbmspIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDA3ZTdlNDEuLjk3YTI3OGEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMjcsNDUgKzI3LDEwMSBAQAogI2luY2x1ZGUgInJhdGUuaCIKICNpbmNsdWRlICJsZWQuaCIKIAotI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTIDIKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfVElNRU9VVCAoSFogLyA1KQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMgMwogI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCAoSFogLyA1KQogI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTIDMKLSNkZWZpbmUgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1BST0JFX1dBSVQgKEhaIC8gNSkKLSNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0lETEVfVElNRSAoNjAgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwgKDEgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9QUk9CRV9UUklFUyA1CisKKy8qCisgKiBiZWFjb24gbG9zcyBkZXRlY3Rpb24gdGltZW91dAorICogWFhYOiBzaG91bGQgZGVwZW5kIG9uIGJlYWNvbiBpbnRlcnZhbAorICovCisjZGVmaW5lIElFRUU4MDIxMV9CRUFDT05fTE9TU19USU1FCSgyICogSFopCisvKgorICogVGltZSB0aGUgY29ubmVjdGlvbiBjYW4gYmUgaWRsZSBiZWZvcmUgd2UgcHJvYmUKKyAqIGl0IHRvIHNlZSBpZiB3ZSBjYW4gc3RpbGwgdGFsayB0byB0aGUgQVAuCisgKi8KKyNkZWZpbmUgSUVFRTgwMjExX0NPTk5FQ1RJT05fSURMRV9USU1FCSgzMCAqIEhaKQorLyoKKyAqIFRpbWUgd2Ugd2FpdCBmb3IgYSBwcm9iZSByZXNwb25zZSBhZnRlciBzZW5kaW5nCisgKiBhIHByb2JlIHJlcXVlc3QgYmVjYXVzZSBvZiBiZWFjb24gbG9zcyBvciBmb3IKKyAqIGNoZWNraW5nIHRoZSBjb25uZWN0aW9uIHN0aWxsIHdvcmtzLgorICovCisjZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9XQUlUCQkoSFogLyAyKQogCiAjZGVmaW5lIFRNUl9SVU5OSU5HX1RJTUVSCTAKICNkZWZpbmUgVE1SX1JVTk5JTkdfQ0hBTlNXCTEKIAorLyoKKyAqIEFsbCBjZmc4MDIxMSBmdW5jdGlvbnMgaGF2ZSB0byBiZSBjYWxsZWQgb3V0c2lkZSBhIGxvY2tlZAorICogc2VjdGlvbiBzbyB0aGF0IHRoZXkgY2FuIGFjcXVpcmUgYSBsb2NrIHRoZW1zZWx2ZXMuLi4gVGhpcworICogaXMgbXVjaCBzaW1wbGVyIHRoYW4gcXVldWluZyB1cCB0aGluZ3MgaW4gY2ZnODAyMTEsIGJ1dCB3ZQorICogZG8gbmVlZCBzb21lIGluZGlyZWN0aW9uIGZvciB0aGF0IGhlcmUuCisgKi8KK2VudW0gcnhfbWdtdF9hY3Rpb24geworCS8qIG5vIGFjdGlvbiByZXF1aXJlZCAqLworCVJYX01HTVRfTk9ORSwKKworCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9yeF9hdXRoKCkgKi8KKwlSWF9NR01UX0NGRzgwMjExX0FVVEgsCisKKwkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX3NlbmRfcnhfYXNzb2MoKSAqLworCVJYX01HTVRfQ0ZHODAyMTFfQVNTT0MsCisKKwkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX3NlbmRfZGVhdXRoKCkgKi8KKwlSWF9NR01UX0NGRzgwMjExX0RFQVVUSCwKKworCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfc2VuZF9kaXNhc3NvYygpICovCisJUlhfTUdNVF9DRkc4MDIxMV9ESVNBU1NPQywKKworCS8qIGNhbGxlciBtdXN0IGNhbGwgY2ZnODAyMTFfYXV0aF90aW1lb3V0KCkgJiBmcmVlIHdvcmsgKi8KKwlSWF9NR01UX0NGRzgwMjExX0FVVEhfVE8sCisKKwkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX2Fzc29jX3RpbWVvdXQoKSAmIGZyZWUgd29yayAqLworCVJYX01HTVRfQ0ZHODAyMTFfQVNTT0NfVE8sCit9OworCiAvKiB1dGlscyAqLworc3RhdGljIGlubGluZSB2b2lkIEFTU0VSVF9NR0RfTVRYKHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QpCit7CisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZpZm1nZC0+bXR4KSk7Cit9CisKKy8qCisgKiBXZSBjYW4gaGF2ZSBtdWx0aXBsZSB3b3JrIGl0ZW1zIChhbmQgY29ubmVjdGlvbiBwcm9iaW5nKQorICogc2NoZWR1bGluZyB0aGlzIHRpbWVyLCBidXQgd2UgbmVlZCB0byB0YWtlIGNhcmUgdG8gb25seQorICogcmVzY2hlZHVsZSBpdCB3aGVuIGl0IHNob3VsZCBmaXJlIF9lYXJsaWVyXyB0aGFuIGl0IHdhcworICogYXNrZWQgZm9yIGJlZm9yZSwgb3IgaWYgaXQncyBub3QgcGVuZGluZyByaWdodCBub3cuIFRoaXMKKyAqIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdC4gTm90ZSB0aGF0IGl0IHRoZW4gaXMgcmVxdWlyZWQgdG8KKyAqIHJ1biB0aGlzIGZ1bmN0aW9uIGZvciBhbGwgdGltZW91dHMgYWZ0ZXIgdGhlIGZpcnN0IG9uZQorICogaGFzIGhhcHBlbmVkIC0tIHRoZSB3b3JrIHRoYXQgcnVucyBmcm9tIHRoaXMgdGltZXIgd2lsbAorICogZG8gdGhhdC4KKyAqLworc3RhdGljIHZvaWQgcnVuX2FnYWluKHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmlmbWdkLT50aW1lcikgfHwKKwkgICAgdGltZV9iZWZvcmUodGltZW91dCwgaWZtZ2QtPnRpbWVyLmV4cGlyZXMpKQorCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIG1vZF9iZWFjb25fdGltZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJaWYgKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUikKKwkJcmV0dXJuOworCisJbW9kX3RpbWVyKCZzZGF0YS0+dS5tZ2QuYmNuX21vbl90aW1lciwKKwkJICByb3VuZF9qaWZmaWVzX3VwKGppZmZpZXMgKyBJRUVFODAyMTFfQkVBQ09OX0xPU1NfVElNRSkpOworfQorCiBzdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQogewogCXJldHVybiAoMSA8PCBlY3cpIC0gMTsKIH0KIAotc3RhdGljIHU4ICppZWVlODAyMTFfYnNzX2dldF9pZShzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLCB1OCBpZSkKLXsKLQl1OCAqZW5kLCAqcG9zOwotCi0JcG9zID0gYnNzLT5jYnNzLmluZm9ybWF0aW9uX2VsZW1lbnRzOwotCWlmIChwb3MgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0JZW5kID0gcG9zICsgYnNzLT5jYnNzLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czsKLQotCXdoaWxlIChwb3MgKyAxIDwgZW5kKSB7Ci0JCWlmIChwb3MgKyAyICsgcG9zWzFdID4gZW5kKQotCQkJYnJlYWs7Ci0JCWlmIChwb3NbMF0gPT0gaWUpCi0JCQlyZXR1cm4gcG9zOwotCQlwb3MgKz0gMiArIHBvc1sxXTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGludCBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJCSAgICAgIHUzMiAqcmF0ZXMpCkBAIC05NCwxMSArMTUwLDEwIEBACiAgKi8KIHN0YXRpYyB1MzIgaWVlZTgwMjExX2VuYWJsZV9odChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0aSwKLQkJCSAgICAgICB1MTYgYXBfaHRfY2FwX2ZsYWdzKQorCQkJICAgICAgIGNvbnN0IHU4ICpic3NpZCwgdTE2IGFwX2h0X2NhcF9mbGFncykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MzIgY2hhbmdlZCA9IDA7CiAJdTE2IGh0X29wbW9kZTsKQEAgLTE0NywxMiArMjAyLDEwIEBACiAJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOwogCQlpZiAoc3RhKQogCQkJcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKGxvY2FsLCBzYmFuZCwgc3RhLAogCQkJCQkJIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKTsKLQogCQlyY3VfcmVhZF91bmxvY2soKTsKICAgICAgICAgfQogCkBAIC0xNzUsMjMgKzIyOCwyNCBAQAogCiAvKiBmcmFtZSBzZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zLCAqaWVzLCAqaHRfaWU7CisJdTggKnBvczsKKwljb25zdCB1OCAqaWVzLCAqaHRfaWU7CiAJaW50IGksIGxlbiwgY291bnQsIHJhdGVzX2xlbiwgc3VwcF9yYXRlc19sZW47CiAJdTE2IGNhcGFiOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IHdtbSA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdTMyIHJhdGVzID0gMDsKIAogCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKLQkJCSAgICBzaXplb2YoKm1nbXQpICsgMjAwICsgaWZtZ2QtPmV4dHJhX2llX2xlbiArCi0JCQkgICAgaWZtZ2QtPnNzaWRfbGVuKTsKKwkJCSAgICBzaXplb2YoKm1nbXQpICsgMjAwICsgd2stPmllX2xlbiArCisJCQkgICAgd2stPnNzaWRfbGVuKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGFzc29jICIKIAkJICAgICAgICJmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0yMTAsNDUgKzI2NCwzNSBAQAogCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwogCX0KIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQsCi0JCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7Ci0JaWYgKGJzcykgewotCQlpZiAoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCQlpZiAoYnNzLT53bW1fdXNlZCkKLQkJCXdtbSA9IDE7CisJaWYgKHdrLT5ic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKKwlpZiAod2stPmJzcy0+d21tX3VzZWQpCisJCXdtbSA9IDE7CiAKLQkJLyogZ2V0IGFsbCByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgdGhlIEFQIGFzCi0JCSAqIHNvbWUgQVBzIGRvbid0IGxpa2UgZ2V0dGluZyBhIHN1cGVyc2V0IG9mIHRoZWlyIHJhdGVzCi0JCSAqIGluIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IChlLmcuIEQtTGluayBEQVAgMTM1MyBpbgotCQkgKiBiLW9ubHkgbW9kZSkgKi8KLQkJcmF0ZXNfbGVuID0gaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoYnNzLCBzYmFuZCwgJnJhdGVzKTsKKwkvKiBnZXQgYWxsIHJhdGVzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGFuZCB0aGUgQVAgYXMKKwkgKiBzb21lIEFQcyBkb24ndCBsaWtlIGdldHRpbmcgYSBzdXBlcnNldCBvZiB0aGVpciByYXRlcworCSAqIGluIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IChlLmcuIEQtTGluayBEQVAgMTM1MyBpbgorCSAqIGItb25seSBtb2RlKSAqLworCXJhdGVzX2xlbiA9IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKHdrLT5ic3MsIHNiYW5kLCAmcmF0ZXMpOwogCi0JCWlmICgoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKLQkJICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCkpCi0JCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVDsKLQotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQl9IGVsc2UgewotCQlyYXRlcyA9IH4wOwotCQlyYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKLQl9CisJaWYgKCh3ay0+YnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UKSkKKwkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQ7CiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIHdrLT5ic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIHdrLT5ic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKIAotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUKSB7CisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIod2stPnByZXZfYnNzaWQpKSB7CiAJCXNrYl9wdXQoc2tiLCAxMCk7CiAJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUSk7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKIAkJbWdtdC0+dS5yZWFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPQogCQkJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7Ci0JCW1lbWNweShtZ210LT51LnJlYXNzb2NfcmVxLmN1cnJlbnRfYXAsIGlmbWdkLT5wcmV2X2Jzc2lkLAorCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCB3ay0+cHJldl9ic3NpZCwKIAkJICAgICAgIEVUSF9BTEVOKTsKIAl9IGVsc2UgewogCQlza2JfcHV0KHNrYiwgNCk7CkBAIC0yNjAsMTAgKzMwNCwxMCBAQAogCX0KIAogCS8qIFNTSUQgKi8KLQlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmbWdkLT5zc2lkX2xlbik7CisJaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyB3ay0+c3NpZF9sZW4pOwogCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gaWZtZ2QtPnNzaWRfbGVuOwotCW1lbWNweShwb3MsIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCSpwb3MrKyA9IHdrLT5zc2lkX2xlbjsKKwltZW1jcHkocG9zLCB3ay0+c3NpZCwgd2stPnNzaWRfbGVuKTsKIAogCS8qIGFkZCBhbGwgcmF0ZXMgd2hpY2ggd2VyZSBtYXJrZWQgdG8gYmUgdXNlZCBhYm92ZSAqLwogCXN1cHBfcmF0ZXNfbGVuID0gcmF0ZXNfbGVuOwpAQCAtMzE4LDkgKzM2Miw5IEBACiAJCX0KIAl9CiAKLQlpZiAoaWZtZ2QtPmV4dHJhX2llKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgaWZtZ2QtPmV4dHJhX2llLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKKwlpZiAod2stPmllX2xlbiAmJiB3ay0+aWUpIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIHdrLT5pZV9sZW4pOworCQltZW1jcHkocG9zLCB3ay0+aWUsIHdrLT5pZV9sZW4pOwogCX0KIAogCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CkBAIC0zNDUsOSArMzg5LDkgQEAKIAkgKi8KIAlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgogCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgotCSAgICAoaHRfaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKKwkgICAgKGh0X2llID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoJndrLT5ic3MtPmNic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKIAkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykgJiYKLQkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkpIHsKKwkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqaHRfaW5mbyA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICopKGh0X2llICsgMik7CiAJCXUxNiBjYXAgPSBzYmFuZC0+aHRfY2FwLmNhcDsKQEAgLTM4MiwxOCArNDI2LDEzIEBACiAJCW1lbWNweShwb3MsICZzYmFuZC0+aHRfY2FwLm1jcywgc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7CiAJfQogCi0Ja2ZyZWUoaWZtZ2QtPmFzc29jcmVxX2llcyk7Ci0JaWZtZ2QtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOwotCWlmbWdkLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykKLQkJbWVtY3B5KGlmbWdkLT5hc3NvY3JlcV9pZXMsIGllcywgaWZtZ2QtPmFzc29jcmVxX2llc19sZW4pOwotCiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSAgIHUxNiBzdHlwZSwgdTE2IHJlYXNvbikKKwkJCQkJICAgY29uc3QgdTggKmJzc2lkLCB1MTYgc3R5cGUsIHUxNiByZWFzb24sCisJCQkJCSAgIHZvaWQgKmNvb2tpZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKQEAgLTQxMCwxOCArNDQ5LDE4IEBACiAKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwogCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IHN0eXBlKTsKIAlza2JfcHV0KHNrYiwgMik7CiAJLyogdS5kZWF1dGgucmVhc29uX2NvZGUgPT0gdS5kaXNhc3NvYy5yZWFzb25fY29kZSAqLwogCW1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYocmVhc29uKTsKIAogCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfREVBVVRIKQotCQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgc2tiLT5sZW4pOworCQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwgY29va2llKTsKIAllbHNlCi0JCWNmZzgwMjExX3NlbmRfZGlzYXNzb2Moc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIHNrYi0+bGVuKTsKKwkJY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwgY29va2llKTsKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpOwogfQogCkBAIC00OTQsMjggKzUzMywyNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUubWdkLmNoc3dpdGNoX3dvcmspOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCiAJCXJldHVybjsKIAotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KHNkYXRhLT5sb2NhbCwgaWZtZ2QtPmJzc2lkLAotCQkJCSAgIHNkYXRhLT5sb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJZ290byBleGl0OworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCisJCWdvdG8gb3V0OwogCiAJc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPmNzYV9jaGFubmVsOwotCS8qIFhYWDogc2hvdWxkbid0IHJlYWxseSBtb2RpZnkgY2ZnODAyMTEtb3duZWQgZGF0YSEgKi8KLQlpZiAoIWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpCi0JCWJzcy0+Y2Jzcy5jaGFubmVsID0gc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWw7CisJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKTsKIAotCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKLWV4aXQ6Ci0JaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwkvKiBYWFg6IHNob3VsZG4ndCByZWFsbHkgbW9kaWZ5IGNmZzgwMjExLW93bmVkIGRhdGEhICovCisJaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsOworCiAJaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbigmc2RhdGEtPmxvY2FsLT5odywKIAkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7Cisgb3V0OgorCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQ7CisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTUyOSw3ICs1NjYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmc2RhdGEtPmxvY2FsLT5odywgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc3RhX3Byb2Nlc3NfY2hhbnN3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTU0MCwxMCArNTc3LDEyIEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJaW50IG5ld19mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHN3X2VsZW0tPm5ld19jaF9udW0pOwogCi0JaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPmxvY2FsLT5zd19zY2FubmluZyB8fCBzZGF0YS0+bG9jYWwtPmh3X3NjYW5uaW5nKQorCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm47CiAKIAkvKiBEaXNyZWdhcmQgc3Vic2VxdWVudCBiZWFjb25zIGlmIHdlIGFyZSBhbHJlYWR5IHJ1bm5pbmcgYSB0aW1lcgpAQCAtNTU5LDcgKzU5OCw3IEBACiAJc2RhdGEtPmxvY2FsLT5jc2FfY2hhbm5lbCA9IG5ld19jaDsKIAogCWlmIChzd19lbGVtLT5jb3VudCA8PSAxKSB7Ci0JCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+Y2hzd2l0Y2hfd29yayk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmaWZtZ2QtPmNoc3dpdGNoX3dvcmspOwogCX0gZWxzZSB7CiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJnNkYXRhLT5sb2NhbC0+aHcsCiAJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9DU0EpOwpAQCAtNjAxLDcgKzY0MCw3IEBACiAJICogSWYgd2UgYXJlIHNjYW5uaW5nIHJpZ2h0IG5vdyB0aGVuIHRoZSBwYXJhbWV0ZXJzIHdpbGwKIAkgKiB0YWtlIGVmZmVjdCB3aGVuIHNjYW4gZmluaXNoZXMuCiAJICovCi0JaWYgKGxvY2FsLT5od19zY2FubmluZyB8fCBsb2NhbC0+c3dfc2Nhbm5pbmcpCisJaWYgKGxvY2FsLT5zY2FubmluZykKIAkJcmV0dXJuOwogCiAJaWYgKGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA+IDAgJiYKQEAgLTY1MSw4ICs2OTAsOSBAQAogCX0KIAogCWlmIChjb3VudCA9PSAxICYmIGZvdW5kLT51Lm1nZC5wb3dlcnNhdmUgJiYKLQkgICAgKGZvdW5kLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgJiYKLQkgICAgIShmb3VuZC0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpKSB7CisJICAgIGZvdW5kLT51Lm1nZC5hc3NvY2lhdGVkICYmIGxpc3RfZW1wdHkoJmZvdW5kLT51Lm1nZC53b3JrX2xpc3QpICYmCisJICAgICEoZm91bmQtPnUubWdkLmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAorCQkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkpKSB7CiAJCXMzMiBiZWFjb25pbnRfdXM7CiAKIAkJaWYgKGxhdGVuY3kgPCAwKQpAQCAtNzI0LDcgKzc2NCw3IEBACiAJaWYgKGxvY2FsLT5xdWllc2NpbmcgfHwgbG9jYWwtPnN1c3BlbmRlZCkKIAkJcmV0dXJuOwogCi0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CiB9CiAKIC8qIE1MTUUgKi8KQEAgLTgwNiw5ICs4NDYsNiBAQAogCQkJCQkgICB1MTYgY2FwYWIsIGJvb2wgZXJwX3ZhbGlkLCB1OCBlcnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotI2VuZGlmCiAJdTMyIGNoYW5nZWQgPSAwOwogCWJvb2wgdXNlX3Byb3RlY3Rpb247CiAJYm9vbCB1c2Vfc2hvcnRfcHJlYW1ibGU7CkBAIC04MjUsNDIgKzg2MiwxNiBAQAogCXVzZV9zaG9ydF9zbG90ID0gISEoY2FwYWIgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKTsKIAogCWlmICh1c2VfcHJvdGVjdGlvbiAhPSBic3NfY29uZi0+dXNlX2N0c19wcm90KSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9JXBNKVxuIiwKLQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAotCQkJICAgICAgIHVzZV9wcm90ZWN0aW9uID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJCSAgICAgICBpZm1nZC0+YnNzaWQpOwotCQl9Ci0jZW5kaWYKIAkJYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCA9IHVzZV9wcm90ZWN0aW9uOwogCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVDsKIAl9CiAKIAlpZiAodXNlX3Nob3J0X3ByZWFtYmxlICE9IGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN3aXRjaGVkIHRvICVzIGJhcmtlciBwcmVhbWJsZSIKLQkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZm1nZC0+YnNzaWQpOwotCQl9Ci0jZW5kaWYKIAkJYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSA9IHVzZV9zaG9ydF9wcmVhbWJsZTsKIAkJY2hhbmdlZCB8PSBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEU7CiAJfQogCiAJaWYgKHVzZV9zaG9ydF9zbG90ICE9IGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogc3dpdGNoZWQgdG8gJXMgc2xvdCB0aW1lIgotCQkJICAgICAgICIgKEJTU0lEPSVwTSlcbiIsCi0JCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwKLQkJCSAgICAgICB1c2Vfc2hvcnRfc2xvdCA/ICJzaG9ydCIgOiAibG9uZyIsCi0JCQkgICAgICAgaWZtZ2QtPmJzc2lkKTsKLQkJfQotI2VuZGlmCiAJCWJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCA9IHVzZV9zaG9ydF9zbG90OwogCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9TTE9UOwogCX0KQEAgLTg2OCwxMDUgKzg3OSwzMSBAQAogCXJldHVybiBjaGFuZ2VkOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQotCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwotCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0Jd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQljaGFyICpidWY7Ci0Jc2l6ZV90IGxlbjsKLQlpbnQgaTsKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0KLQlpZiAoIWlmbWdkLT5hc3NvY3JlcV9pZXMgJiYgIWlmbWdkLT5hc3NvY3Jlc3BfaWVzKQotCQlyZXR1cm47Ci0KLQlidWYgPSBrbWFsbG9jKDUwICsgMiAqIChpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbiArCi0JCQkJaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCXJldHVybjsKLQotCWxlbiA9IHNwcmludGYoYnVmLCAiQVNTT0NJTkZPKCIpOwotCWlmIChpZm1nZC0+YXNzb2NyZXFfaWVzKSB7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlcUlFcz0iKTsKLQkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuOyBpKyspIHsKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXFfaWVzW2ldKTsKLQkJfQotCX0KLQlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpIHsKLQkJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCi0JCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgIik7Ci0JCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlc3BJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgewotCQkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJTAyeCIsCi0JCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKLQkJfQotCX0KLQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIpIik7Ci0KLQlpZiAobGVuID4gSVdfQ1VTVE9NX01BWCkgewotCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DUkVTUElFPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKLQkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7Ci0JCX0KLQl9Ci0KLQlpZiAobGVuIDw9IElXX0NVU1RPTV9NQVgpIHsKLQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCQl3cnF1LmRhdGEubGVuZ3RoID0gbGVuOwotCQl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBidWYpOwotCX0KLQotCWtmcmVlKGJ1Zik7Ci19Ci0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCiAJCQkJICAgICB1MzIgYnNzX2luZm9fY2hhbmdlZCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWxfdG9faHcobG9jYWwpLT5jb25mOwotCi0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gd2stPmJzczsKIAogCWJzc19pbmZvX2NoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7Ci0JaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKKwkvKiBzZXQgdGltaW5nIGluZm9ybWF0aW9uICovCisJc2RhdGEtPnZpZi5ic3NfY29uZi5iZWFjb25faW50ID0gYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbDsKKwlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7CisJc2RhdGEtPnZpZi5ic3NfY29uZi5kdGltX3BlcmlvZCA9IGJzcy0+ZHRpbV9wZXJpb2Q7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAotCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwotCWlmIChic3MpIHsKLQkJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmNic3MuYmVhY29uX2ludGVydmFsOwotCQlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGJzcy0+Y2Jzcy50c2Y7Ci0JCXNkYXRhLT52aWYuYnNzX2NvbmYuZHRpbV9wZXJpb2QgPSBic3MtPmR0aW1fcGVyaW9kOworCWJzc19pbmZvX2NoYW5nZWQgfD0gQlNTX0NIQU5HRURfQkVBQ09OX0lOVDsKKwlic3NfaW5mb19jaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfYnNzX2NhcGFiaWxpdHkoc2RhdGEsCisJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKIAotCQlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0JFQUNPTl9JTlQ7Ci0JCWJzc19pbmZvX2NoYW5nZWQgfD0gaWVlZTgwMjExX2hhbmRsZV9ic3NfY2FwYWJpbGl0eShzZGF0YSwKLQkJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKwlzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCA9IGJzczsKKwlzZGF0YS0+dS5tZ2Qub2xkX2Fzc29jaWF0ZV93b3JrID0gd2s7CisJbWVtY3B5KHNkYXRhLT51Lm1nZC5ic3NpZCwgYnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTik7CiAKLQkJY2ZnODAyMTFfaG9sZF9ic3MoJmJzcy0+Y2Jzcyk7CisJLyoganVzdCB0byBiZSBzdXJlICovCisJc2RhdGEtPnUubWdkLmZsYWdzICY9IH4oSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwgfAorCQkJCUlFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwpOwogCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCX0KLQotCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOwotCW1lbWNweShpZm1nZC0+cHJldl9ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7Ci0JaWVlZTgwMjExX3N0YV9zZW5kX2Fzc29jaW5mbyhzZGF0YSk7Ci0KLQlpZm1nZC0+bGFzdF9wcm9iZSA9IGppZmZpZXM7CiAJaWVlZTgwMjExX2xlZF9hc3NvYyhsb2NhbCwgMSk7CiAKIAlzZGF0YS0+dmlmLmJzc19jb25mLmFzc29jID0gMTsKQEAgLTk4MiwxNzYgKzkxOSwxNTcgQEAKIAogCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBic3NfaW5mb19jaGFuZ2VkKTsKIAotCS8qIHdpbGwgYmUgc2FtZSBhcyBzZGF0YSAqLwotCWlmIChsb2NhbC0+cHNfc2RhdGEpIHsKLQkJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCQlpZWVlODAyMTFfcmVjYWxjX3BzKGxvY2FsLCAtMSk7Ci0JCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCX0KKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29uKHNkYXRhLT5kZXYpOwotCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCitzdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9kaXJlY3RfcHJvYmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAotCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMrKzsKLQlpZiAoaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCXdrLT50cmllcysrOworCWlmICh3ay0+dHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc2RhdGEtPmRldiwgaWZtZ2QtPmJzc2lkKTsKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHdrLT5ic3MtPmNic3MuYnNzaWQpOwogCiAJCS8qCiAJCSAqIE1vc3QgbGlrZWx5IEFQIGlzIG5vdCBpbiB0aGUgcmFuZ2Ugc28gcmVtb3ZlIHRoZQotCQkgKiBic3MgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB0byB0aGUgQVAKKwkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KIAkJICovCi0JCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCi0JCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOwogCiAJCS8qCiAJCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byBzdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFLgotCQkgKiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yayBhZ2FpbgorCQkgKiBkdWUgdG8gd29yayBuZWVkaW5nIHRvIGJlIGRvbmUuIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrCisJCSAqIGFnYWluIGZvciB0aGF0LgogCQkgKi8KLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm47CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1nZC0+d29yayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEhfVE87CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNIHRyeSAlZFxuIiwKLQkJCXNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCwKLQkJCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSAodHJ5ICVkKVxuIiwKKwkJCXNkYXRhLT5kZXYtPm5hbWUsIHdrLT5ic3MtPmNic3MuYnNzaWQsCisJCQl3ay0+dHJpZXMpOwogCi0JaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKLQotCS8qIERpcmVjdCBwcm9iZSBpcyBzZW50IHRvIGJyb2FkY2FzdCBhZGRyZXNzIGFzIHNvbWUgQVBzCisJLyoKKwkgKiBEaXJlY3QgcHJvYmUgaXMgc2VudCB0byBicm9hZGNhc3QgYWRkcmVzcyBhcyBzb21lIEFQcwogCSAqIHdpbGwgbm90IGFuc3dlciB0byBkaXJlY3QgcGFja2V0IGluIHVuYXNzb2NpYXRlZCBzdGF0ZS4KIAkgKi8KLQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIE5VTEwsCi0JCQkJIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4sIE5VTEwsIDApOworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgd2stPnNzaWQsIHdrLT5zc2lkX2xlbiwgTlVMTCwgMCk7CiAKLQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQ7CisJcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7CisKKwlyZXR1cm4gUlhfTUdNVF9OT05FOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCitzdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQl1OCAqaWVzOwotCXNpemVfdCBpZXNfbGVuOwogCi0JaWZtZ2QtPmF1dGhfdHJpZXMrKzsKLQlpZiAoaWZtZ2QtPmF1dGhfdHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKKwl3ay0+dHJpZXMrKzsKKwlpZiAod2stPnRyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc2RhdGEtPmRldiwgaWZtZ2QtPmJzc2lkKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKLQkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKKworCQkvKgorCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKKwkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KKwkJICovCisJCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCAmd2stPmJzcy0+Y2Jzcyk7CiAKIAkJLyoKIAkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKLQkJICogZHVlIHRvIHN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUuCi0JCSAqIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrIGFnYWluCisJCSAqIGR1ZSB0byB3b3JrIG5lZWRpbmcgdG8gYmUgZG9uZS4gSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsKKwkJICogYWdhaW4gZm9yIHRoYXQuCiAJCSAqLwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7Ci0JCXJldHVybjsKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmlmbWdkLT53b3JrKTsKKwkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzsKIAl9CiAKLQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNICh0cnkgJWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCB3ay0+dHJpZXMpOwogCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgewotCQlpZXMgPSBpZm1nZC0+c21lX2F1dGhfaWU7Ci0JCWllc19sZW4gPSBpZm1nZC0+c21lX2F1dGhfaWVfbGVuOwotCX0gZWxzZSB7Ci0JCWllcyA9IE5VTEw7Ci0JCWllc19sZW4gPSAwOwotCX0KLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCBpZm1nZC0+YXV0aF9hbGcsIGllcywgaWVzX2xlbiwKLQkJCSAgICBpZm1nZC0+YnNzaWQsIDApOwotCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gMjsKKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCB3ay0+YXV0aF9hbGcsIHdrLT5pZSwgd2stPmllX2xlbiwKKwkJCSAgICB3ay0+YnNzLT5jYnNzLmJzc2lkLCBOVUxMLCAwLCAwKTsKKwl3ay0+YXV0aF90cmFuc2FjdGlvbiA9IDI7CiAKLQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQ7CisJcnVuX2FnYWluKGlmbWdkLCB3ay0+dGltZW91dCk7CisKKwlyZXR1cm4gUlhfTUdNVF9OT05FOwogfQogCi0vKgotICogVGhlIGRpc2Fzc29jICdyZWFzb24nIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgb3VyIG93biByZWFzb24KLSAqIGlmIHNlbGYgZGlzY29ubmVjdGVkIG9yIGEgcmVhc29uIGNvZGUgZnJvbSB0aGUgQVAuCi0gKi8KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgYm9vbCBkZWF1dGgsIGJvb2wgc2VsZl9kaXNjb25uZWN0ZWQsCi0JCQkJICAgdTE2IHJlYXNvbikKKwkJCQkgICBib29sIGRlYXV0aCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmbG9jYWxfdG9faHcobG9jYWwpLT5jb25mOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTMyIGNoYW5nZWQgPSAwLCBjb25maWdfY2hhbmdlZCA9IDA7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJQVNTRVJUX01HRF9NVFgoaWZtZ2QpOworCisJaWYgKFdBUk5fT04oIWlmbWdkLT5hc3NvY2lhdGVkKSkKKwkJcmV0dXJuOworCisJbWVtY3B5KGJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOworCisJaWZtZ2QtPmFzc29jaWF0ZWQgPSBOVUxMOworCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAogCWlmIChkZWF1dGgpIHsKLQkJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKKwkJa2ZyZWUoaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yayk7CisJCWlmbWdkLT5vbGRfYXNzb2NpYXRlX3dvcmsgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrID0gaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yazsKKworCQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7CisJCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmlmbWdkLT53b3JrX2xpc3QpOwogCX0KLQlpZm1nZC0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZtZ2QtPmFzc29jX3RyaWVzID0gMDsKKworCS8qCisJICogd2UgbmVlZCB0byBjb21taXQgdGhlIGFzc29jaWF0ZWQgPSBOVUxMIGNoYW5nZSBiZWNhdXNlIHRoZQorCSAqIHNjYW4gY29kZSB1c2VzIHRoYXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpZmFjZSBzaG91bGQKKwkgKiBnbyB0by93YWtlIHVwIGZyb20gcG93ZXJzYXZlIG9yIG5vdCAtLSBhbmQgY291bGQgb3RoZXJ3aXNlCisJICogd2FrZSB0aGUgcXVldWVzIGVycm9uZW91c2x5LgorCSAqLworCXNtcF9tYigpOworCisJLyoKKwkgKiBUaHVzLCB3ZSBjYW4gb25seSBhZnRlcndhcmRzIHN0b3AgdGhlIHF1ZXVlcyAtLSB0byBhY2NvdW50CisJICogZm9yIHRoZSBjYXNlIHdoZXJlIGFub3RoZXIgQ1BVIGlzIGZpbmlzaGluZyBhIHNjYW4gYXQgdGhpcworCSAqIHRpbWUgLS0gd2UgZG9uJ3Qgd2FudCB0aGUgc2NhbiBjb2RlIHRvIGVuYWJsZSBxdWV1ZXMuCisJICovCiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOwogCWlmIChzdGEpCiAJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAotCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwotCi0JaWYgKGJzcykgewotCQljZmc4MDIxMV91bmhvbGRfYnNzKCZic3MtPmNic3MpOwotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQl9Ci0KLQlpZiAoc2VsZl9kaXNjb25uZWN0ZWQpIHsKLQkJaWYgKGRlYXV0aCkKLQkJCWllZWU4MDIxMV9zZW5kX2RlYXV0aF9kaXNhc3NvYyhzZGF0YSwKLQkJCQlJRUVFODAyMTFfU1RZUEVfREVBVVRILCByZWFzb24pOwotCQllbHNlCi0JCQlpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc2RhdGEsCi0JCQkJSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DLCByZWFzb24pOwotCX0KLQotCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwogCWNoYW5nZWQgfD0gaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHNkYXRhKTsKIAogCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIDApOwogCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7CiAJc2RhdGEtPnZpZi5ic3NfY29uZi5hc3NvYyA9IGZhbHNlOwogCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7Ci0KLQlpZiAoc2VsZl9kaXNjb25uZWN0ZWQgfHwgcmVhc29uID09IFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCkgewotCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCi0JCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwotCX0KLQogCWllZWU4MDIxMV9zZXRfd21tX2RlZmF1bHQoc2RhdGEpOwogCiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKQEAgLTExODAsNyArMTA5OCw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKQEAgLTExOTMsODMgKzExMTEsNDIgQEAKIAlzdGFfaW5mb19kZXN0cm95KHN0YSk7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV93ZXBfY29uZmlndXJlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlpZiAoIXNkYXRhIHx8ICFzZGF0YS0+ZGVmYXVsdF9rZXkgfHwKLQkgICAgc2RhdGEtPmRlZmF1bHRfa2V5LT5jb25mLmFsZyAhPSBBTEdfV0VQKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCWludCBic3NfcHJpdmFjeTsKLQlpbnQgd2VwX3ByaXZhY3k7Ci0JaW50IHByaXZhY3lfaW52b2tlZDsKLQotCWlmICghaWZtZ2QgfHwgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkpCi0JCXJldHVybiAwOwotCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCwKLQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkgICBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKLQlpZiAoIWJzcykKLQkJcmV0dXJuIDA7Ci0KLQlic3NfcHJpdmFjeSA9ICEhKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpOwotCXdlcF9wcml2YWN5ID0gISFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHNkYXRhKTsKLQlwcml2YWN5X2ludm9rZWQgPSAhIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCk7Ci0KLQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQotCWlmICgoYnNzX3ByaXZhY3kgPT0gd2VwX3ByaXZhY3kpIHx8IChic3NfcHJpdmFjeSA9PSBwcml2YWN5X2ludm9rZWQpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQorc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlpZm1nZC0+YXNzb2NfdHJpZXMrKzsKLQlpZiAoaWZtZ2QtPmFzc29jX3RyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgeworCXdrLT50cmllcysrOworCWlmICh3ay0+dHJpZXMgPiBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJY2ZnODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHNkYXRhLT5kZXYsIGlmbWdkLT5ic3NpZCk7Ci0JCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCi0JCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCisJCSAqLworCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOworCiAJCS8qCiAJCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byBzdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLgotCQkgKiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yayBhZ2FpbgorCQkgKiBkdWUgdG8gd29yayBuZWVkaW5nIHRvIGJlIGRvbmUuIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrCisJCSAqIGFnYWluIGZvciB0aGF0LgogCQkgKi8KLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm47CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1nZC0+d29yayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPOwogCX0KIAotCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1pc21hdGNoIGluIHByaXZhY3kgY29uZmlndXJhdGlvbiBhbmQgIgotCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBhYm9ydCBhc3NvY2lhdGlvblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQkJcmV0dXJuOwotCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0ZSB3aXRoIEFQICVwTSAodHJ5ICVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgd2stPnRyaWVzKTsKKwlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSwgd2spOwogCi0JaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEpOworCXdrLT50aW1lb3V0ID0gamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUOworCXJ1bl9hZ2FpbihpZm1nZCwgd2stPnRpbWVvdXQpOwogCi0JbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCk7CisJcmV0dXJuIFJYX01HTVRfTk9ORTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc3RhX3J4X25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTEyODAsMTIgKzExNTcsODQgQEAKIAkgKiBmcm9tIEFQIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIHdvcmtpbmcgYm90aCB3YXlzCiAJICogYXQgdGhhdCB0aW1lLiBCdXQgbXVsdGljYXN0IGZyYW1lcyAoYW5kIGhlbmNlIGFsc28gYmVhY29ucykgbXVzdAogCSAqIGJlIGlnbm9yZWQgaGVyZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIHRyaWdnZXIgdGhlIHRpbWVyIGR1cmluZwotCSAqIGRhdGEgaWRsZSBwZXJpb2RzIGZvciBzZW5kaW5nIHRoZSBwZXJpb2RpY2FsIHByb2JlIHJlcXVlc3QgdG8KLQkgKiB0aGUgQVAuCisJICogZGF0YSBpZGxlIHBlcmlvZHMgZm9yIHNlbmRpbmcgdGhlIHBlcmlvZGljIHByb2JlIHJlcXVlc3QgdG8gdGhlCisJICogQVAgd2UncmUgY29ubmVjdGVkIHRvLgogCSAqLwotCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpCi0JCW1vZF90aW1lcigmc2RhdGEtPnUubWdkLnRpbWVyLAotCQkJICBqaWZmaWVzICsgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOworCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJcmV0dXJuOworCisJbW9kX3RpbWVyKCZzZGF0YS0+dS5tZ2QuY29ubl9tb25fdGltZXIsCisJCSAgcm91bmRfamlmZmllc191cChqaWZmaWVzICsgSUVFRTgwMjExX0NPTk5FQ1RJT05fSURMRV9USU1FKSk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9tZ2RfcHJvYmVfYXBfc2VuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwljb25zdCB1OCAqc3NpZDsKKworCXNzaWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZSgmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MsIFdMQU5fRUlEX1NTSUQpOworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsCisJCQkJIHNzaWQgKyAyLCBzc2lkWzFdLCBOVUxMLCAwKTsKKworCWlmbWdkLT5wcm9iZV9zZW5kX2NvdW50Kys7CisJaWZtZ2QtPnByb2JlX3RpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX1BST0JFX1dBSVQ7CisJcnVuX2FnYWluKGlmbWdkLCBpZm1nZC0+cHJvYmVfdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9tZ2RfcHJvYmVfYXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgYm9vbCBiZWFjb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJYm9vbCBhbHJlYWR5ID0gZmFsc2U7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCXJldHVybjsKKworCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5uaW5nKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKKworCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCisJCWdvdG8gb3V0OworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlpZiAoYmVhY29uICYmIG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZXRlY3RlZCBiZWFjb24gbG9zcyBmcm9tIEFQICIKKwkJICAgICAgICItIHNlbmRpbmcgcHJvYmUgcmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisjZW5kaWYKKworCS8qCisJICogVGhlIGRyaXZlci9vdXIgd29yayBoYXMgYWxyZWFkeSByZXBvcnRlZCB0aGlzIGV2ZW50IG9yIHRoZQorCSAqIGNvbm5lY3Rpb24gbW9uaXRvcmluZyBoYXMga2lja2VkIGluIGFuZCB3ZSBoYXZlIGFscmVhZHkgc2VudAorCSAqIGEgcHJvYmUgcmVxdWVzdC4gT3IgbWF5YmUgdGhlIEFQIGRpZWQgYW5kIHRoZSBkcml2ZXIga2VlcHMKKwkgKiByZXBvcnRpbmcgdW50aWwgd2UgZGlzYXNzb2NpYXRlLi4uCisJICoKKwkgKiBJbiBlaXRoZXIgY2FzZSB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgY3VycmVudCBjYWxsIHRvIHRoaXMKKwkgKiBmdW5jdGlvbiAoZXhjZXB0IGZvciBzZXR0aW5nIHRoZSBjb3JyZWN0IHByb2JlIHJlYXNvbiBiaXQpCisJICogYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgcmVzZXQgdGhlIHRpbWVyIGV2ZXJ5IHRpbWUgYW5kCisJICogbmV2ZXIgY2hlY2sgd2hldGhlciB3ZSByZWNlaXZlZCBhIHByb2JlIHJlc3BvbnNlIQorCSAqLworCWlmIChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTCB8CisJCQkgICAgSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwpKQorCQlhbHJlYWR5ID0gdHJ1ZTsKKworCWlmIChiZWFjb24pCisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMOworCWVsc2UKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMOworCisJaWYgKGFscmVhZHkpCisJCWdvdG8gb3V0OworCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfcmVjYWxjX3BzKHNkYXRhLT5sb2NhbCwgLTEpOworCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCWlmbWdkLT5wcm9iZV9zZW5kX2NvdW50ID0gMDsKKwlpZWVlODAyMTFfbWdkX3Byb2JlX2FwX3NlbmQoc2RhdGEpOworIG91dDoKKwltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwogfQogCiB2b2lkIGllZWU4MDIxMV9iZWFjb25fbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTEyOTMsMTQ3ICsxMjQyLDI4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKIAkJCSAgICAgdS5tZ2QuYmVhY29uX2xvc3Nfd29yayk7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQkvKgotCSAqIFRoZSBkcml2ZXIgaGFzIGFscmVhZHkgcmVwb3J0ZWQgdGhpcyBldmVudCBhbmQgd2UgaGF2ZQotCSAqIGFscmVhZHkgc2VudCBhIHByb2JlIHJlcXVlc3QuIE1heWJlIHRoZSBBUCBkaWVkIGFuZCB0aGUKLQkgKiBkcml2ZXIga2VlcHMgcmVwb3J0aW5nIHVudGlsIHdlIGRpc2Fzc29jaWF0ZS4uLiBXZSBoYXZlCi0JICogdG8gaWdub3JlIHRoYXQgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgY29udGludWFsbHkKLQkgKiByZXNldCB0aGUgdGltZXIgYW5kIG5ldmVyIGNoZWNrIHdoZXRoZXIgd2UgcmVjZWl2ZWQgYQotCSAqIHByb2JlIHJlc3BvbnNlIQotCSAqLwotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpCi0JCXJldHVybjsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyaXZlciByZXBvcnRzIGJlYWNvbiBsb3NzIGZyb20gQVAgJXBNICIKLQkJICAgICAgICItIHNlbmRpbmcgcHJvYmUgcmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSwKLQkJICAgICAgIHNkYXRhLT51Lm1nZC5ic3NpZCk7Ci0JfQotI2VuZGlmCi0KLQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOwotCi0JbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKLQlpZWVlODAyMTFfcmVjYWxjX3BzKHNkYXRhLT5sb2NhbCwgLTEpOwotCW11dGV4X3VubG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKLQotCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgaWZtZ2QtPmJzc2lkLCBpZm1nZC0+c3NpZCwKLQkJCQkgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKLQotCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX1BST0JFX1dBSVQpOworCWllZWU4MDIxMV9tZ2RfcHJvYmVfYXAoc2RhdGEsIHRydWUpOwogfQogCiB2b2lkIGllZWU4MDIxMV9iZWFjb25fbG9zcyhzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CiAKLQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAotCQkgICAmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYmVhY29uX2xvc3MpOwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9yeDsKLQlib29sIGRpc2Fzc29jID0gZmFsc2U7Ci0KLQkvKiBUT0RPOiBzdGFydCBtb25pdG9yaW5nIGN1cnJlbnQgQVAgc2lnbmFsIHF1YWxpdHkgYW5kIG51bWJlciBvZgotCSAqIG1pc3NlZCBiZWFjb25zLiBTY2FuIG90aGVyIGNoYW5uZWxzIGV2ZXJ5IG5vdyBhbmQgdGhlbiBhbmQgc2VhcmNoCi0JICogZm9yIGJldHRlciBBUHMuICovCi0JLyogVE9ETzogcmVtb3ZlIGV4cGlyZWQgQlNTZXMgKi8KLQotCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwotCWlmICghc3RhKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gU1RBIGVudHJ5IGZvciBvd24gQVAgJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKLQkJZGlzYXNzb2MgPSB0cnVlOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGFzdF9yeCA9IHN0YS0+bGFzdF9yeDsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWlmICgoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMKSAmJgotCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3RfcnggKyBJRUVFODAyMTFfUFJPQkVfV0FJVCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBwcm9iZSByZXNwb25zZSBmcm9tIEFQICVwTSAiCi0JCSAgICAgICAiLSBkaXNhc3NvY2lhdGluZ1xuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7Ci0JCWRpc2Fzc29jID0gdHJ1ZTsKLQkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogQmVhY29uIGZpbHRlcmluZyBpcyBvbmx5IGVuYWJsZWQgd2l0aCBwb3dlciBzYXZlIGFuZCB0aGVuIHRoZQotCSAqIHN0YWNrIHNob3VsZCBub3QgY2hlY2sgZm9yIGJlYWNvbiBsb3NzLgotCSAqLwotCWlmICghKChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUikgJiYKLQkgICAgICAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpICYmCi0JICAgIHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIGlmbWdkLT5sYXN0X2JlYWNvbiArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIGxvc3MgZnJvbSBBUCAlcE0gIgotCQkJICAgICAgICItIHNlbmRpbmcgcHJvYmUgcmVxdWVzdFxuIiwKLQkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOwotCQl9Ci0jZW5kaWYKLQkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKLQkJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCQlpZWVlODAyMTFfcmVjYWxjX3BzKGxvY2FsLCAtMSk7Ci0JCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwgaWZtZ2QtPnNzaWQsCi0JCQkJCSBpZm1nZC0+c3NpZF9sZW4sIE5VTEwsIDApOwotCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9QUk9CRV9XQUlUKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF9yeCArIElFRUU4MDIxMV9QUk9CRV9JRExFX1RJTUUpKSB7Ci0JCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKLQkJaWVlZTgwMjExX3JlY2FsY19wcyhsb2NhbCwgLTEpOwotCQltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKLQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsIGlmbWdkLT5zc2lkLAotCQkJCQkgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKLQl9Ci0KLSBvdXQ6Ci0JaWYgKCFkaXNhc3NvYykKLQkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsCi0JCQkgIGppZmZpZXMgKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCk7Ci0JZWxzZQotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAotCQkJCQlXTEFOX1JFQVNPTl9QUkVWX0FVVEhfTk9UX1ZBTElEKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KKwl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOwotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpIHsKLQkJLyogV2FpdCBmb3IgU01FIHRvIHJlcXVlc3QgYXNzb2NpYXRpb24gKi8KLQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwotCQlpZWVlODAyMTFfcmVjYWxjX2lkbGUoc2RhdGEtPmxvY2FsKTsKLQl9IGVsc2UKLQkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSk7CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuKQogewpAQCAtMTQ0NCwxNjEgKzEyNzQsMTMzIEBACiAJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5jaGFsbGVuZ2UpCiAJCXJldHVybjsKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAzLCBzZGF0YS0+dS5tZ2QuYXV0aF9hbGcsCisJaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMywgd2stPmF1dGhfYWxnLAogCQkJICAgIGVsZW1zLmNoYWxsZW5nZSAtIDIsIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLAotCQkJICAgIHNkYXRhLT51Lm1nZC5ic3NpZCwgMSk7Ci0Jc2RhdGEtPnUubWdkLmF1dGhfdHJhbnNhY3Rpb24gPSA0OworCQkJICAgIHdrLT5ic3MtPmNic3MuYnNzaWQsCisJCQkgICAgd2stPmtleSwgd2stPmtleV9sZW4sIHdrLT5rZXlfaWR4KTsKKwl3ay0+YXV0aF90cmFuc2FjdGlvbiA9IDQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgIHNpemVfdCBsZW4pCitzdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOwogCi0JaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFKQotCQlyZXR1cm47CisJaWYgKHdrLT5zdGF0ZSAhPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEgpCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKIAlpZiAobGVuIDwgMjQgKyA2KQotCQlyZXR1cm47CisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKLQlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm47CisJaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKLQlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm47CisJaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKIAlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CiAJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKIAlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CiAKLQlpZiAoYXV0aF9hbGcgIT0gaWZtZ2QtPmF1dGhfYWxnIHx8Ci0JICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gaWZtZ2QtPmF1dGhfdHJhbnNhY3Rpb24pCi0JCXJldHVybjsKKwlpZiAoYXV0aF9hbGcgIT0gd2stPmF1dGhfYWxnIHx8CisJICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gd2stPmF1dGhfdHJhbnNhY3Rpb24pCisJCXJldHVybiBSWF9NR01UX05PTkU7CiAKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewotCQlpZiAoc3RhdHVzX2NvZGUgPT0gV0xBTl9TVEFUVVNfTk9UX1NVUFBPUlRFRF9BVVRIX0FMRykgewotCQkJdTggYWxnc1szXTsKLQkJCWNvbnN0IGludCBudW1fYWxncyA9IEFSUkFZX1NJWkUoYWxncyk7Ci0JCQlpbnQgaSwgcG9zOwotCQkJYWxnc1swXSA9IGFsZ3NbMV0gPSBhbGdzWzJdID0gMHhmZjsKLQkJCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCQkJYWxnc1swXSA9IFdMQU5fQVVUSF9PUEVOOwotCQkJaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJCQlhbGdzWzFdID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQkJCWFsZ3NbMl0gPSBXTEFOX0FVVEhfTEVBUDsKLQkJCWlmIChpZm1nZC0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4pCi0JCQkJcG9zID0gMDsKLQkJCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSkKLQkJCQlwb3MgPSAxOwotCQkJZWxzZQotCQkJCXBvcyA9IDI7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FsZ3M7IGkrKykgewotCQkJCXBvcysrOwotCQkJCWlmIChwb3MgPj0gbnVtX2FsZ3MpCi0JCQkJCXBvcyA9IDA7Ci0JCQkJaWYgKGFsZ3NbcG9zXSA9PSBpZm1nZC0+YXV0aF9hbGcgfHwKLQkJCQkgICAgYWxnc1twb3NdID09IDB4ZmYpCi0JCQkJCWNvbnRpbnVlOwotCQkJCWlmIChhbGdzW3Bvc10gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkgJiYKLQkJCQkgICAgIWllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoc2RhdGEpKQotCQkJCQljb250aW51ZTsKLQkJCQlpZm1nZC0+YXV0aF9hbGcgPSBhbGdzW3Bvc107Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuOworCQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQlrZnJlZSh3ayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7CiAJfQogCi0Jc3dpdGNoIChpZm1nZC0+YXV0aF9hbGcpIHsKKwlzd2l0Y2ggKHdrLT5hdXRoX2FsZykgewogCWNhc2UgV0xBTl9BVVRIX09QRU46CiAJY2FzZSBXTEFOX0FVVEhfTEVBUDoKIAljYXNlIFdMQU5fQVVUSF9GVDoKLQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhKTsKLQkJY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOwotCQlicmVhazsKKwkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCB3ayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7CiAJY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKGlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpIHsKLQkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7Ci0JCQljZmc4MDIxMV9zZW5kX3J4X2F1dGgoc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIGxlbik7CisJCWlmICh3ay0+YXV0aF90cmFuc2FjdGlvbiA9PSA0KSB7CisJCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIHdrKTsKKwkJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEg7CiAJCX0gZWxzZQotCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBtZ210LCBsZW4pOworCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCB3aywgbWdtdCwgbGVuKTsKIAkJYnJlYWs7CiAJfQorCisJcmV0dXJuIFJYX01HTVRfTk9ORTsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCi0JCQkJICAgICBzaXplX3QgbGVuKQorc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCisJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKLQkJcmV0dXJuOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCi0JaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCi0JCXJldHVybjsKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAod2spCisJCWJzc2lkID0gd2stPmJzcy0+Y2Jzcy5ic3NpZDsKKwllbHNlCisJCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQ7CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKIAotCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGVkIChSZWFzb246ICV1KVxuIiwKLQkJCQlzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb25fY29kZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0ZWQgZnJvbSAlcE0gKFJlYXNvbjogJXUpXG4iLAorCQkJc2RhdGEtPmRldi0+bmFtZSwgYnNzaWQsIHJlYXNvbl9jb2RlKTsKIAotCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgJiYKLQkgICAgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFIHx8Ci0JICAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSB8fAotCSAgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSkgewotCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwotCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCi0JCQkJICAgICAgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwpOworCWlmICghd2spIHsKKwkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJbGlzdF9kZWwoJndrLT5saXN0KTsKKwkJa2ZyZWUod2spOwogCX0KIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIGZhbHNlLCAwKTsKLQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKKwlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9ERUFVVEg7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgICAgc2l6ZV90IGxlbikKK3N0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKLQkJcmV0dXJuOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCi0JaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCi0JCXJldHVybjsKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CisKKwlpZiAoV0FSTl9PTighaWZtZ2QtPmFzc29jaWF0ZWQpKQorCQlyZXR1cm4gUlhfTUdNVF9OT05FOworCisJaWYgKFdBUk5fT04obWVtY21wKGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pKSkKKwkJcmV0dXJuIFJYX01HTVRfTk9ORTsKIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0ZWQgKFJlYXNvbjogJXUpXG4iLAotCQkJCXNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbl9jb2RlKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0ZWQgKFJlYXNvbjogJXUpXG4iLAorCQkJc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uX2NvZGUpOwogCi0JaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSAmJgotCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKLQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKLQkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwotCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKLQl9Ci0KLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgZmFsc2UsIHJlYXNvbl9jb2RlKTsKLQljZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlKTsKKwlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9ESVNBU1NPQzsKIH0KIAogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQkgc2l6ZV90IGxlbiwKLQkJCQkJIGludCByZWFzc29jKQorc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICAgICBib29sIHJlYXNzb2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CkBAIC0xNjE0LDE3ICsxNDE2LDE2IEBACiAJYm9vbCBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IGZhbHNlLCBuZXdzdGEgPSBmYWxzZTsKIAl1MTYgYXBfaHRfY2FwX2ZsYWdzOwogCi0JLyogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAotCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4gKi8KLQotCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkKLQkJcmV0dXJuOworCS8qCisJICogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAorCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4KKwkgKi8KIAogCWlmIChsZW4gPCAyNCArIDYpCi0JCXJldHVybjsKKwkJcmV0dXJuIFJYX01HTVRfTk9ORTsKIAotCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCi0JCXJldHVybjsKKwlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuIFJYX01HTVRfTk9ORTsKIAogCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CiAJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOwpAQCAtMTY0NywyNiArMTQ0OCwxOCBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIHJlamVjdGVkIGFzc29jaWF0aW9uIHRlbXBvcmFyaWx5OyAiCiAJCSAgICAgICAiY29tZWJhY2sgZHVyYXRpb24gJXUgVFUgKCV1IG1zKVxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHR1LCBtcyk7CisJCXdrLT50aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXMpOwogCQlpZiAobXMgPiBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCkKLQkJCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLAotCQkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXMpKTsKLQkJcmV0dXJuOworCQkJcnVuX2FnYWluKGlmbWdkLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtcykpOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCX0KIAogCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YXR1c19jb2RlKTsKLQkJLyogaWYgdGhpcyB3YXMgYSByZWFzc29jaWF0aW9uLCBlbnN1cmUgd2UgdHJ5IGEgImZ1bGwiCi0JCSAqIGFzc29jaWF0aW9uIG5leHQgdGltZS4gVGhpcyB3b3JrcyBhcm91bmQgc29tZSBicm9rZW4gQVBzCi0JCSAqIHdoaWNoIGRvIG5vdCBjb3JyZWN0bHkgcmVqZWN0IHJlYXNzb2NpYXRpb24gcmVxdWVzdHMuICovCi0JCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQkJY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKLQkJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgewotCQkJLyogV2FpdCBmb3IgU01FIHRvIGRlY2lkZSB3aGF0IHRvIGRvIG5leHQgKi8KLQkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0JCX0KLQkJcmV0dXJuOworCQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQlrZnJlZSh3ayk7CisJCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DOwogCX0KIAogCWlmICgoYWlkICYgKEJJVCgxNSkgfCBCSVQoMTQpKSkgIT0gKEJJVCgxNSkgfCBCSVQoMTQpKSkKQEAgLTE2NzcsNTIgKzE0NzAsMzYgQEAKIAlpZiAoIWVsZW1zLnN1cHBfcmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBTdXBwUmF0ZXMgZWxlbWVudCBpbiBBc3NvY1Jlc3BcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJaWZtZ2QtPmFpZCA9IGFpZDsKLQlpZm1nZC0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOwotCi0Ja2ZyZWUoaWZtZ2QtPmFzc29jcmVzcF9pZXMpOwotCWlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7Ci0JaWZtZ2QtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGlmbWdkLT5hc3NvY3Jlc3BfaWVzKQotCQltZW1jcHkoaWZtZ2QtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAogCS8qIEFkZCBTVEEgZW50cnkgZm9yIHRoZSBBUCAqLwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHdrLT5ic3MtPmNic3MuYnNzaWQpOwogCWlmICghc3RhKSB7CiAJCW5ld3N0YSA9IHRydWU7CiAKLQkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmbWdkLT5ic3NpZCwgR0ZQX0FUT01JQyk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCisJCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzdGEpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jIFNUQSBlbnRyeSBmb3IiCiAJCQkgICAgICAgIiB0aGUgQVBcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlyZXR1cm47CisJCQlyZXR1cm4gUlhfTUdNVF9OT05FOwogCQl9CiAKLQkJLyogdXBkYXRlIG5ldyBzdGEgd2l0aCBpdHMgbGFzdCByeCBhY3Rpdml0eSAqLwotCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOworCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSCB8IFdMQU5fU1RBX0FTU09DIHwKKwkJCQkgICBXTEFOX1NUQV9BU1NPQ19BUCk7CisJCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUKSkKKwkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CiAJfQogCi0JLyoKLQkgKiBGSVhNRTogRG8gd2UgcmVhbGx5IG5lZWQgdG8gdXBkYXRlIHRoZSBzdGFfaW5mbydzIGluZm9ybWF0aW9uIGhlcmU/Ci0JICoJICBXZSBhbHJlYWR5IGtub3cgYWJvdXQgdGhlIEFQICh3ZSBmb3VuZCBpdCBpbiBvdXIgbGlzdCkgc28gaXQKLQkgKgkgIHNob3VsZCBhbHJlYWR5IGJlIGZpbGxlZCB3aXRoIHRoZSByaWdodCBpbmZvLCBubz8KLQkgKgkgIEFzIGlzIHN0YW5kcywgYWxsIHRoaXMgaXMgcmFjeSBiZWNhdXNlIHR5cGljYWxseSB3ZSBhc3N1bWUKLQkgKgkgIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIGZpbGxlZCBpbiBoZXJlIChleGNlcHQgZmxhZ3MpIGRvZXNuJ3QKLQkgKgkgIGNoYW5nZSB3aGlsZSBhIFNUQSBzdHJ1Y3R1cmUgaXMgYWxpdmUuIEFzIHN1Y2gsIGl0IHNob3VsZCBtb3ZlCi0JICoJICB0byBiZXR3ZWVuIHRoZSBzdGFfaW5mb19hbGxvYygpIGFuZCBzdGFfaW5mb19pbnNlcnQoKSBhYm92ZS4KLQkgKi8KLQotCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIIHwgV0xBTl9TVEFfQVNTT0MgfCBXTEFOX1NUQV9BU1NPQ19BUCk7Ci0JaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKQotCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSE9SSVpFRCk7Ci0KIAlyYXRlcyA9IDA7CiAJYmFzaWNfcmF0ZXMgPSAwOwogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKQEAgLTE3NzEsOCArMTU0OCw3IEBACiAJZWxzZQogCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7CiAKLQkvKiBJZiBUS0lQL1dFUCBpcyB1c2VkLCBubyBuZWVkIHRvIHBhcnNlIEFQJ3MgSFQgY2FwYWJpbGl0aWVzICovCi0JaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkKKwlpZiAoZWxlbXMuaHRfY2FwX2VsZW0gJiYgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKSkKIAkJaWVlZTgwMjExX2h0X2NhcF9pZV90b19zdGFfaHRfY2FwKHNiYW5kLAogCQkJCWVsZW1zLmh0X2NhcF9lbGVtLCAmc3RhLT5zdGEuaHRfY2FwKTsKIApAQCAtMTc5Miw3ICsxNTY4LDcgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGluc2VydCBTVEEgZW50cnkgZm9yIgogCQkJICAgICAgICIgdGhlIEFQIChlcnJvciAlZClcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGVycik7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiBSWF9NR01UX05PTkU7CiAJCX0KIAl9CiAKQEAgLTE4MDYsMjQgKzE1ODIsMjkgQEAKIAogCWlmIChlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCiAJICAgIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgotCSAgICAhKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCkpCisJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpCiAJCWNoYW5nZWQgfD0gaWVlZTgwMjExX2VuYWJsZV9odChzZGF0YSwgZWxlbXMuaHRfaW5mb19lbGVtLAorCQkJCQkgICAgICAgd2stPmJzcy0+Y2Jzcy5ic3NpZCwKIAkJCQkJICAgICAgIGFwX2h0X2NhcF9mbGFncyk7CiAKKyAgICAgICAgLyogZGVsZXRlIHdvcmsgaXRlbSAtLSBtdXN0IGJlIGJlZm9yZSBzZXRfYXNzb2NpYXRlZCBmb3IgUFMgKi8KKwlsaXN0X2RlbCgmd2stPmxpc3QpOworCiAJLyogc2V0IEFJRCBhbmQgYXNzb2MgY2FwYWJpbGl0eSwKIAkgKiBpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoKSB3aWxsIHRlbGwgdGhlIGRyaXZlciAqLwogCWJzc19jb25mLT5haWQgPSBhaWQ7CiAJYnNzX2NvbmYtPmFzc29jX2NhcGFiaWxpdHkgPSBjYXBhYl9pbmZvOwotCWllZWU4MDIxMV9zZXRfYXNzb2NpYXRlZChzZGF0YSwgY2hhbmdlZCk7CisJLyogdGhpcyB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHdrICovCisJaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHNkYXRhLCB3aywgY2hhbmdlZCk7CiAKIAkvKgotCSAqIGluaXRpYWxpc2UgdGhlIHRpbWUgb2YgbGFzdCBiZWFjb24gdG8gYmUgdGhlIGFzc29jaWF0aW9uIHRpbWUsCi0JICogb3RoZXJ3aXNlIGJlYWNvbiBsb3NzIGNoZWNrIHdpbGwgdHJpZ2dlciBpbW1lZGlhdGVseQorCSAqIFN0YXJ0IHRpbWVyIHRvIHByb2JlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBBUCBub3cuCisJICogQWxzbyBzdGFydCB0aGUgdGltZXIgdGhhdCB3aWxsIGRldGVjdCBiZWFjb24gbG9zcy4KIAkgKi8KLQlpZm1nZC0+bGFzdF9iZWFjb24gPSBqaWZmaWVzOworCWllZWU4MDIxMV9zdGFfcnhfbm90aWZ5KHNkYXRhLCAoc3RydWN0IGllZWU4MDIxMV9oZHIgKiltZ210KTsKKwltb2RfYmVhY29uX3RpbWVyKHNkYXRhKTsKIAotCWllZWU4MDIxMV9hc3NvY2lhdGVkKHNkYXRhKTsKLQljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBsZW4pOworCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DOwogfQogCiAKQEAgLTE4NTEsMjMgKzE2MzIsMjUgQEAKIAogCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUobG9jYWwsIHJ4X3N0YXR1cywgbWdtdCwgbGVuLCBlbGVtcywKIAkJCQkJY2hhbm5lbCwgYmVhY29uKTsKLQlpZiAoIWJzcykKKwlpZiAoYnNzKQorCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKworCWlmICghc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCiAJCXJldHVybjsKIAogCWlmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW0gJiYgKGVsZW1zLT5jaF9zd2l0Y2hfZWxlbV9sZW4gPT0gMykgJiYKLQkgICAgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkpIHsKKwkgICAgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsCisJCQkJCQkJRVRIX0FMRU4pID09IDApKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSA9CiAJCQkoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICopZWxlbXMtPmNoX3N3aXRjaF9lbGVtOwogCQlpZWVlODAyMTFfc3RhX3Byb2Nlc3NfY2hhbnN3aXRjaChzZGF0YSwgc3dfZWxlbSwgYnNzKTsKIAl9Ci0KLQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQkgc2l6ZV90IGxlbiwKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwpAQCAtMTg3Niw2ICsxNjU5LDggQEAKIAogCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAorCUFTU0VSVF9NR0RfTVRYKGlmbWdkKTsKKwogCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCiAJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KIApAQCAtMTg4OSwxNyArMTY3NCwzMiBAQAogCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgZmFsc2UpOwogCiAJLyogZGlyZWN0IHByb2JlIG1heSBiZSBwYXJ0IG9mIHRoZSBhc3NvY2lhdGlvbiBmbG93ICovCi0JaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFKSB7CisJaWYgKHdrICYmIHdrLT5zdGF0ZSA9PSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlcyBkaXJlY3QgcHJvYmUgcmVzcG9uZGVkXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOworCQl3ay0+dHJpZXMgPSAwOworCQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FVVEg7CisJCVdBUk5fT04oaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgd2spICE9IFJYX01HTVRfTk9ORSk7CiAJfQogCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCkgewotCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKKwkgICAgaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAorCQkJICAgIElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMKSkgeworCQlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CisJCQkJICBJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMKTsKIAkJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKIAkJaWVlZTgwMjExX3JlY2FsY19wcyhzZGF0YS0+bG9jYWwsIC0xKTsKIAkJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOworCQkvKgorCQkgKiBXZSd2ZSByZWNlaXZlZCBhIHByb2JlIHJlc3BvbnNlLCBidXQgYXJlIG5vdCBzdXJlIHdoZXRoZXIKKwkJICogd2UgaGF2ZSBvciB3aWxsIGJlIHJlY2VpdmluZyBhbnkgYmVhY29ucyBvciBkYXRhLCBzbyBsZXQncworCQkgKiBzY2hlZHVsZSB0aGUgdGltZXJzIGFnYWluLCBqdXN0IGluIGNhc2UuCisJCSAqLworCQltb2RfYmVhY29uX3RpbWVyKHNkYXRhKTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+Y29ubl9tb25fdGltZXIsCisJCQkgIHJvdW5kX2ppZmZpZXNfdXAoamlmZmllcyArCisJCQkJCSAgIElFRUU4MDIxMV9DT05ORUNUSU9OX0lETEVfVElNRSkpOwogCX0KIH0KIApAQCAtMTkzNyw2ICsxNzM3LDkgQEAKIAlib29sIGVycF92YWxpZCwgZGlyZWN0ZWRfdGltID0gZmFsc2U7CiAJdTggZXJwX3ZhbHVlID0gMDsKIAl1MzIgbmNyYzsKKwl1OCAqYnNzaWQ7CisKKwlBU1NFUlRfTUdEX01UWChpZm1nZCk7CiAKIAkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLwogCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKQEAgLTE5NDYsMjMgKzE3NDksNDEgQEAKIAlpZiAocnhfc3RhdHVzLT5mcmVxICE9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKQogCQlyZXR1cm47CiAKLQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHx8Ci0JICAgIG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkvKgorCSAqIFdlIG1pZ2h0IGhhdmUgcmVjZWl2ZWQgYSBudW1iZXIgb2YgZnJhbWVzLCBhbW9uZyB0aGVtIGEKKwkgKiBkaXNhc3NvYyBmcmFtZSBhbmQgYSBiZWFjb24uLi4KKwkgKi8KKwlpZiAoIWlmbWdkLT5hc3NvY2lhdGVkKQogCQlyZXR1cm47CiAKLQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMKSB7CisJYnNzaWQgPSBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZDsKKworCS8qCisJICogQW5kIGluIHRoZW9yeSBldmVuIGZyYW1lcyBmcm9tIGEgZGlmZmVyZW50IEFQIHdlIHdlcmUganVzdAorCSAqIGFzc29jaWF0ZWQgdG8gYSBzcGxpdC1zZWNvbmQgYWdvIQorCSAqLworCWlmIChtZW1jbXAoYnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNhbmNlbGxpbmcgcHJvYmVyZXEgcG9sbCBkdWUgIgogCQkJICAgICAgICJ0byBhIHJlY2VpdmVkIGJlYWNvblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJCX0KICNlbmRpZgotCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMOwogCQltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJCWllZWU4MDIxMV9yZWNhbGNfcHMobG9jYWwsIC0xKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJfQogCisJLyoKKwkgKiBQdXNoIHRoZSBiZWFjb24gbG9zcyBkZXRlY3Rpb24gaW50byB0aGUgZnV0dXJlIHNpbmNlCisJICogd2UgYXJlIHByb2Nlc3NpbmcgYSBiZWFjb24gZnJvbSB0aGUgQVAganVzdCBub3cuCisJICovCisJbW9kX2JlYWNvbl90aW1lcihzZGF0YSk7CisKIAluY3JjID0gY3JjMzJfYmUoMCwgKHZvaWQgKikmbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCwgNCk7CiAJbmNyYyA9IGllZWU4MDJfMTFfcGFyc2VfZWxlbXNfY3JjKG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlLAogCQkJCQkgIGxlbiAtIGJhc2VsZW4sICZlbGVtcywKQEAgLTIwMTksMTUgKzE4NDAsMTUgQEAKIAogCiAJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKLQkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSB7CisJICAgICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFXzExTikpIHsKIAkJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCQl1MTYgYXBfaHRfY2FwX2ZsYWdzOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7Ci0JCWlmICghc3RhKSB7CisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOworCQlpZiAoV0FSTl9PTighc3RhKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTIwNDIsMTUgKzE4NjMsMTEgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfZW5hYmxlX2h0KHNkYXRhLCBlbGVtcy5odF9pbmZvX2VsZW0sCi0JCQkJCSAgICAgICBhcF9odF9jYXBfZmxhZ3MpOworCQkJCQkgICAgICAgYnNzaWQsIGFwX2h0X2NhcF9mbGFncyk7CiAJfQogCisJLyogTm90ZTogY291bnRyeSBJRSBwYXJzaW5nIGlzIGRvbmUgZm9yIHVzIGJ5IGNmZzgwMjExICovCiAJaWYgKGVsZW1zLmNvdW50cnlfZWxlbSkgewotCQkvKiBOb3RlIHdlIGFyZSBvbmx5IHJldmlld2luZyB0aGlzIG9uIGJlYWNvbnMKLQkJICogZm9yIHRoZSBCU1NJRCB3ZSBhcmUgYXNzb2NpYXRlZCB0byAqLwotCQlyZWd1bGF0b3J5X2hpbnRfMTFkKGxvY2FsLT5ody53aXBoeSwKLQkJCWVsZW1zLmNvdW50cnlfZWxlbSwgZWxlbXMuY291bnRyeV9lbGVtX2xlbik7Ci0KIAkJLyogVE9ETzogSUJTUyBhbHNvIG5lZWRzIHRoaXMgKi8KIAkJaWYgKGVsZW1zLnB3cl9jb25zdHJfZWxlbSkKIAkJCWllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzZGF0YSwKQEAgLTIwNjMsOCArMTg4MCw3IEBACiB9CiAKIGllZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKQEAgLTIwODAsMTQgKzE4OTYsMTQgQEAKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046Ci0JCW1lbWNweShza2ItPmNiLCByeF9zdGF0dXMsIHNpemVvZigqcnhfc3RhdHVzKSk7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgogCQlza2JfcXVldWVfdGFpbCgmc2RhdGEtPnUubWdkLnNrYl9xdWV1ZSwgc2tiKTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmc2RhdGEtPnUubWdkLndvcmspOworCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLndvcmspOwogCQlyZXR1cm4gUlhfUVVFVUVEOwogCX0KIApAQCAtMjA5Nyw0MCArMTkxMywxMTkgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrOworCWVudW0gcnhfbWdtdF9hY3Rpb24gcm1hID0gUlhfTUdNVF9OT05FOwogCXUxNiBmYzsKIAogCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOwogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOwogCi0Jc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCSAgICAgcnhfc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAotCQkJCQkgcnhfc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKLQkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKKworCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAmJgorCSAgICBtZW1jbXAoaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIG1nbXQtPmJzc2lkLAorCQkJCQkJCUVUSF9BTEVOKSA9PSAwKSB7CisJCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkJIHJ4X3N0YXR1cyk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIE5VTEwsIG1nbXQsCisJCQkJCQkgICAgIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKKwkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgTlVMTCwKKwkJCQkJCSAgICAgICBtZ210LCBza2ItPmxlbik7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKKwkJCS8qIFhYWDogZGlmZmVyZW50aWF0ZSwgY2FuIG9ubHkgaGFwcGVuIGZvciBDU0Egbm93ISAqLworCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCisJCQkJCSZtZ210LT51LmFjdGlvbi51LmNoYW5fc3dpdGNoLnN3X2VsZW0sCisJCQkJCWlmbWdkLT5hc3NvY2lhdGVkKTsKKwkJCWJyZWFrOworCQl9CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisKKwkJc3dpdGNoIChybWEpIHsKKwkJY2FzZSBSWF9NR01UX05PTkU6CisJCQkvKiBubyBhY3Rpb24gKi8KKwkJCWJyZWFrOworCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfREVBVVRIOgorCQkJY2ZnODAyMTFfc2VuZF9kZWF1dGgoc2RhdGEtPmRldiwgKHU4ICopbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBSWF9NR01UX0NGRzgwMjExX0RJU0FTU09DOgorCQkJY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwKKwkJCQkJICAgICAgIE5VTEwpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmlmbWdkLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG1lbWNtcCh3ay0+YnNzLT5jYnNzLmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUDoKKwkJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc2RhdGEsIHdrLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJCSAgICAgcnhfc3RhdHVzKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgd2ssIG1nbXQsIHNrYi0+bGVuKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgd2ssIG1nbXQsCisJCQkJCQkJICAgc2tiLT5sZW4sIGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCB3aywgbWdtdCwKKwkJCQkJCQkgICBza2ItPmxlbiwgdHJ1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCB3aywgbWdtdCwKKwkJCQkJCSAgICAgICBza2ItPmxlbik7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBXZSd2ZSBwcm9jZXNzZWQgdGhpcyBmcmFtZSBmb3IgdGhhdCB3b3JrLCBzbyBpdCBjYW4ndAorCQkgKiBiZWxvbmcgdG8gYW5vdGhlciB3b3JrIHN0cnVjdC4KKwkJICogTkI6IHRoaXMgaXMgYWxzbyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgYmVjYXVzZSB0aGUKKwkJICogY2FsbGVkIGZ1bmN0aW9ucyBjYW4gZnJlZSAnd2snLCBhbmQgZm9yICdybWEnIQorCQkgKi8KIAkJYnJlYWs7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKworCXN3aXRjaCAocm1hKSB7CisJY2FzZSBSWF9NR01UX05PTkU6CisJCS8qIG5vIGFjdGlvbiAqLworCQlicmVhazsKKwljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVVUSDoKKwkJY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHNkYXRhLT5kZXYsICh1OCAqKSBtZ210LCBza2ItPmxlbik7CisJCWJyZWFrOworCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzoKKwkJY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIFJYX01HTVRfQ0ZHODAyMTFfREVBVVRIOgorCQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbiwgTlVMTCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKKwl9CisKKyBvdXQ6CiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKQEAgLTIxNDYsMTI1ICsyMDQxLDkgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOwotCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQkvKiBSZXNldCBvd24gVFNGIHRvIGFsbG93IHRpbWUgc3luY2hyb25pemF0aW9uIHdvcmsuICovCi0JZHJ2X3Jlc2V0X3RzZihsb2NhbCk7Ci0KLQlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCi0KLQotCWlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOwotCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKLQllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0ZUKQotCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfRlQ7Ci0JZWxzZQotCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKLQlpZm1nZC0+YXV0aF90cmFuc2FjdGlvbiA9IC0xOwotCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwotCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID0gMDsKLQlpZm1nZC0+YXV0aF90cmllcyA9IDA7Ci0JaWZtZ2QtPmFzc29jX3RyaWVzID0gMDsKLQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JbmV0aWZfY2Fycmllcl9vZmYoc2RhdGEtPmRldik7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCXU4ICpic3NpZCA9IGlmbWdkLT5ic3NpZCwgKnNzaWQgPSBpZm1nZC0+c3NpZDsKLQl1OCBzc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKLQl1MTYgY2FwYV9tYXNrID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKLQl1MTYgY2FwYV92YWwgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7Ci0KLQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpICYmCi0JICAgIGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwgfAotCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAotCQkJICAgIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkpIHsKLQkJY2FwYV9tYXNrIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwotCQlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQotCQkJY2FwYV92YWwgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JfQotCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkKLQkJY2hhbiA9IE5VTEw7Ci0KLQlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkKLQkJYnNzaWQgPSBOVUxMOwotCi0JaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkgewotCQlzc2lkID0gTlVMTDsKLQkJc3NpZF9sZW4gPSAwOwotCX0KLQotCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIGNoYW4sCi0JCQkJICAgICAgIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKLQkJCQkgICAgICAgY2FwYV9tYXNrLCBjYXBhX3ZhbCk7Ci0KLQlpZiAoYnNzKSB7Ci0JCWxvY2FsLT5vcGVyX2NoYW5uZWwgPSBic3MtPmNic3MuY2hhbm5lbDsKLQkJbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKLQotCQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUKSkKLQkJCWllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIGJzcy0+c3NpZCwKLQkJCQkJICAgICAgIGJzcy0+c3NpZF9sZW4pOwotCQlpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgYnNzLT5jYnNzLmJzc2lkKTsKLQkJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgYnNzLT5zdXBwX3JhdGVzX2xlbiwKLQkJCQkJCSAgICBic3MtPnN1cHBfcmF0ZXMpOwotCQlpZiAoc2RhdGEtPnUubWdkLm1mcCA9PSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEKQotCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7Ci0JCWVsc2UKLQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKLQotCQkvKiBTZW5kIG91dCBkaXJlY3QgcHJvYmUgaWYgbm8gcHJvYmUgcmVzcCB3YXMgcmVjZWl2ZWQgb3IKLQkJICogdGhlIG9uZSB3ZSBoYXZlIGlzIG91dGRhdGVkCi0JCSAqLwotCQlpZiAoIWJzcy0+bGFzdF9wcm9iZV9yZXNwIHx8Ci0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+bGFzdF9wcm9iZV9yZXNwCi0JCQkJCSsgSUVFRTgwMjExX1NDQU5fUkVTVUxUX0VYUElSRSkpCi0JCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwotCQllbHNlCi0JCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOwotCi0JCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc2RhdGEpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlpZiAoaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPCBJRUVFODAyMTFfQVNTT0NfU0NBTlNfTUFYX1RSSUVTKSB7Ci0KLQkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzKys7Ci0KLQkJCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmbWdkLT5zc2lkLAotCQkJCQkJCXNzaWRfbGVuKTsKLQotCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKLQkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KTsKLQkJfSBlbHNlIHsKLQkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIC0xOwotfQotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQpAQCAtMjI3Miw4OSArMjA1MSwyMDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssICp0bXA7CisJTElTVF9IRUFEKGZyZWVfd29yayk7CisJZW51bSByeF9tZ210X2FjdGlvbiBybWE7CisJYm9vbCBhbnlidXN5ID0gZmFsc2U7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCiAJCXJldHVybjsKIAotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQorCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybjsKIAogCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBOb3RoaW5nIHNob3VsZCBoYXZlIGJlZW4gc3R1ZmZlZCBpbnRvIHRoZSB3b3JrcXVldWUgZHVyaW5nCi0JICogdGhlIHN1c3BlbmQtPnJlc3VtZSBjeWNsZS4gSWYgdGhpcyBXQVJOIGlzIHNlZW4gdGhlbiB0aGVyZQotCSAqIGlzIGEgYnVnIHdpdGggZWl0aGVyIHRoZSBkcml2ZXIgc3VzcGVuZCBvciBzb21ldGhpbmcgaW4KLQkgKiBtYWM4MDIxMSBzdHVmZmluZyBpbnRvIHRoZSB3b3JrcXVldWUgd2hpY2ggd2UgaGF2ZW4ndCB5ZXQKLQkgKiBjbGVhcmVkIGR1cmluZyBtYWM4MDIxMSdzIHN1c3BlbmQgY3ljbGUuCisJICogaWVlZTgwMjExX3F1ZXVlX3dvcmsoKSBzaG91bGQgaGF2ZSBwaWNrZWQgdXAgbW9zdCBjYXNlcywKKwkgKiBoZXJlIHdlJ2xsIHBpY2sgdGhlIHRoZSByZXN0LgogCSAqLwotCWlmIChXQVJOX09OKGxvY2FsLT5zdXNwZW5kZWQpKQorCWlmIChXQVJOKGxvY2FsLT5zdXNwZW5kZWQsICJTVEEgTUxNRSB3b3JrIHNjaGVkdWxlZCB3aGlsZSAiCisJCSAiZ29pbmcgdG8gc3VzcGVuZFxuIikpCiAJCXJldHVybjsKIAogCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAorCS8qIGZpcnN0IHByb2Nlc3MgZnJhbWVzIHRvIGF2b2lkIHRpbWluZyBvdXQgd2hpbGUgYSBmcmFtZSBpcyBwZW5kaW5nICovCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZtZ2QtPnNrYl9xdWV1ZSkpKQogCQlpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KHNkYXRhLCBza2IpOwogCi0JaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFICYmCi0JICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCi0JICAgIGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFICYmCi0JICAgIHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpKSB7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPnNjYW5fd29yaywKLQkJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDApKTsKLQkJcmV0dXJuOworCS8qIHRoZW4gcHJvY2VzcyB0aGUgcmVzdCBvZiB0aGUgd29yayAqLworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCisJaWYgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMIHwKKwkJCSAgICBJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCkgJiYKKwkgICAgaWZtZ2QtPmFzc29jaWF0ZWQpIHsKKwkJdTggYnNzaWRbRVRIX0FMRU5dOworCisJCW1lbWNweShic3NpZCwgaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWYgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyhpZm1nZC0+cHJvYmVfdGltZW91dCkpCisJCQlydW5fYWdhaW4oaWZtZ2QsIGlmbWdkLT5wcm9iZV90aW1lb3V0KTsKKworCQllbHNlIGlmIChpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCA8IElFRUU4MDIxMV9NQVhfUFJPQkVfVFJJRVMpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCQkJcHJpbnRrKEtFUk5fREVCVUcgIk5vIHByb2JlIHJlc3BvbnNlIGZyb20gQVAgJXBNIgorCQkJCSIgYWZ0ZXIgJWRtcywgdHJ5ICVkXG4iLCBic3NpZCwKKwkJCQkoMTAwMCAqIElFRUU4MDIxMV9QUk9CRV9XQUlUKS9IWiwKKwkJCQlpZm1nZC0+cHJvYmVfc2VuZF9jb3VudCk7CisjZW5kaWYKKwkJCWllZWU4MDIxMV9tZ2RfcHJvYmVfYXBfc2VuZChzZGF0YSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgYWN0dWFsbHkgbG9zdCB0aGUgY29ubmVjdGlvbiAuLi4gb3IgZGlkIHdlPworCQkJICogTGV0J3MgbWFrZSBzdXJlIQorCQkJICovCisJCQlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CisJCQkJCSAgSUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTm8gcHJvYmUgcmVzcG9uc2UgZnJvbSBBUCAlcE0iCisJCQkJIiBhZnRlciAlZG1zLCBkaXNjb25uZWN0aW5nLlxuIiwKKwkJCQlic3NpZCwgKDEwMDAgKiBJRUVFODAyMTFfUFJPQkVfV0FJVCkvSFopOworCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSk7CisJCQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCQkJLyoKKwkJCSAqIG11c3QgYmUgb3V0c2lkZSBsb2NrIGR1ZSB0byBjZmc4MDIxMSwKKwkJCSAqIGJ1dCB0aGF0J3Mgbm90IGEgcHJvYmxlbS4KKwkJCSAqLworCQkJaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHNkYXRhLCBic3NpZCwKKwkJCQkJSUVFRTgwMjExX1NUWVBFX0RFQVVUSCwKKwkJCQkJV0xBTl9SRUFTT05fRElTQVNTT0NfRFVFX1RPX0lOQUNUSVZJVFksCisJCQkJCU5VTEwpOworCQkJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CisJCX0KIAl9CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCkpIHsKLQkJaWYgKGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc2RhdGEpKQotCQkJcmV0dXJuOwotCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOwotCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCkpCi0JCXJldHVybjsKIAogCWllZWU4MDIxMV9yZWNhbGNfaWRsZShsb2NhbCk7CiAKLQlzd2l0Y2ggKGlmbWdkLT5zdGF0ZSkgewotCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOgotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU6Ci0JCWllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU6Ci0JCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU6Ci0JCWllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk5fT04oMSk7Ci0JCWJyZWFrOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKHdrLT50aW1lb3V0KSkgeworCQkJLyoKKwkJCSAqIFRoaXMgd29yayBpdGVtIGlzbid0IHN1cHBvc2VkIHRvIGJlIHdvcmtlZCBvbgorCQkJICogcmlnaHQgbm93LCBidXQgdGFrZSBjYXJlIHRvIGFkanVzdCB0aGUgdGltZXIKKwkJCSAqIHByb3Blcmx5LgorCQkJICovCisJCQlydW5fYWdhaW4oaWZtZ2QsIHdrLT50aW1lb3V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoICh3ay0+c3RhdGUpIHsKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT04oMSk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU6CisJCQkvKiBub3RoaW5nICovCisJCQlybWEgPSBSWF9NR01UX05PTkU7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFOgorCQkJcm1hID0gaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzZGF0YSwgd2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9BVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgd2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9BU1NPQzoKKwkJCXJtYSA9IGllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEsIHdrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc3dpdGNoIChybWEpIHsKKwkJY2FzZSBSWF9NR01UX05PTkU6CisJCQkvKiBubyBhY3Rpb24gcmVxdWlyZWQgKi8KKwkJCWJyZWFrOworCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzoKKwkJY2FzZSBSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPOgorCQkJbGlzdF9kZWwoJndrLT5saXN0KTsKKwkJCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmZyZWVfd29yayk7CisJCQl3ay0+dHJpZXMgPSBybWE7IC8qIHNtYWxsIGFidXNlIGJ1dCBvbmx5IGxvY2FsICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKKwkJfQogCX0KIAotCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcml2YWN5IGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2ggYW5kICIKLQkJICAgICAgICJtaXhlZC1jZWxsIGRpc2FibGVkIC0gZGlzYXNzb2NpYXRlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwKLQkJCQkJV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZpZm1nZC0+d29ya19saXN0LCBsaXN0KSB7CisJCWlmICh3ay0+c3RhdGUgIT0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFKSB7CisJCQlhbnlidXN5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CiAJfQorCWlmICghYW55YnVzeSAmJgorCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KSkKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LAorCQkJCQkgICAgICZsb2NhbC0+c2Nhbl93b3JrLAorCQkJCQkgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMCkpOworCisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmZnJlZV93b3JrLCBsaXN0KSB7CisJCXN3aXRjaCAod2stPnRyaWVzKSB7CisJCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPOgorCQkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc2RhdGEtPmRldiwKKwkJCQkJCSAgIHdrLT5ic3MtPmNic3MuYnNzaWQpOworCQkJYnJlYWs7CisJCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTzoKKwkJCWNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dChzZGF0YS0+ZGV2LAorCQkJCQkJICAgIHdrLT5ic3MtPmNic3MuYnNzaWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHdrLT50cmllcyk7CisJCX0KKworCQlsaXN0X2RlbCgmd2stPmxpc3QpOworCQlrZnJlZSh3ayk7CisJfQorCisJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9iY25fbW9uX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlpZiAobG9jYWwtPnF1aWVzY2luZykKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2QuYmVhY29uX2xvc3Nfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfY29ubl9tb25fdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCWlmIChsb2NhbC0+cXVpZXNjaW5nKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPm1vbml0b3Jfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbW9uaXRvcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJICAgICB1Lm1nZC5tb25pdG9yX3dvcmspOworCisJaWVlZTgwMjExX21nZF9wcm9iZV9hcChzZGF0YSwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcmVzdGFydF9zdGFfdGltZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCS8qCi0JCSAqIE5lZWQgdG8gdXBkYXRlIGxhc3RfYmVhY29uIHRvIGF2b2lkIGJlYWNvbiBsb3NzCi0JCSAqIHRlc3QgdG8gdHJpZ2dlci4KLQkJICovCi0JCXNkYXRhLT51Lm1nZC5sYXN0X2JlYWNvbiA9IGppZmZpZXM7CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+KElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAorCQkJCQlJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCk7CiAKLQotCQlxdWV1ZV93b3JrKHNkYXRhLT5sb2NhbC0+aHcud29ya3F1ZXVlLAorCQkvKiBsZXQncyBwcm9iZSB0aGUgY29ubmVjdGlvbiBvbmNlICovCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJICAgJnNkYXRhLT51Lm1nZC5tb25pdG9yX3dvcmspOworCQkvKiBhbmQgZG8gYWxsIHRoZSBvdGhlciByZWd1bGFyIHdvcmsgdG9vICovCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LAogCQkJICAgJnNkYXRhLT51Lm1nZC53b3JrKTsKIAl9CiB9CkBAIC0yMzc4LDYgKzIyNzQsMTEgQEAKIAljYW5jZWxfd29ya19zeW5jKCZpZm1nZC0+Y2hzd2l0Y2hfd29yayk7CiAJaWYgKGRlbF90aW1lcl9zeW5jKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIpKQogCQlzZXRfYml0KFRNUl9SVU5OSU5HX0NIQU5TVywgJmlmbWdkLT50aW1lcnNfcnVubmluZyk7CisKKwljYW5jZWxfd29ya19zeW5jKCZpZm1nZC0+bW9uaXRvcl93b3JrKTsKKwkvKiB0aGVzZSB3aWxsIGp1c3QgYmUgcmUtZXN0YWJsaXNoZWQgb24gY29ubmVjdGlvbiAqLworCWRlbF90aW1lcl9zeW5jKCZpZm1nZC0+Y29ubl9tb25fdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZpZm1nZC0+YmNuX21vbl90aW1lcik7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9yZXN0YXJ0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMjM5NSwxODUgKzIyOTYsMzAgQEAKIHZvaWQgaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwotCXUzMiBod19mbGFnczsKIAogCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlJTklUX1dPUksoJmlmbWdkLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOworCUlOSVRfV09SSygmaWZtZ2QtPm1vbml0b3Jfd29yaywgaWVlZTgwMjExX3N0YV9tb25pdG9yX3dvcmspOwogCUlOSVRfV09SSygmaWZtZ2QtPmNoc3dpdGNoX3dvcmssIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKTsKIAlJTklUX1dPUksoJmlmbWdkLT5iZWFjb25fbG9zc193b3JrLCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayk7CiAJc2V0dXBfdGltZXIoJmlmbWdkLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT5iY25fbW9uX3RpbWVyLCBpZWVlODAyMTFfc3RhX2Jjbl9tb25fdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOworCXNldHVwX3RpbWVyKCZpZm1nZC0+Y29ubl9tb25fdGltZXIsIGllZWU4MDIxMV9zdGFfY29ubl9tb25fdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZykgc2RhdGEpOwogCXNldHVwX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsIGllZWU4MDIxMV9jaHN3aXRjaF90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZtZ2QtPnNrYl9xdWV1ZSk7CiAKKwlJTklUX0xJU1RfSEVBRCgmaWZtZ2QtPndvcmtfbGlzdCk7CisKIAlpZm1nZC0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwotCWlmbWdkLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8Ci0JCUlFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKLQkJSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8Ci0JCUlFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKwlpZm1nZC0+ZmxhZ3MgPSAwOwogCWlmIChzZGF0YS0+bG9jYWwtPmh3LnF1ZXVlcyA+PSA0KQogCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRDsKIAotCWh3X2ZsYWdzID0gc2RhdGEtPmxvY2FsLT5ody5mbGFnczsKLQotCWlmIChod19mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUykgewotCQlpZm1nZC0+cG93ZXJzYXZlID0gQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU7Ci0JCXNkYXRhLT5sb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPSA1MDA7Ci0JfQotfQotCi0vKiBjb25maWd1cmF0aW9uIGhvb2tzICovCi12b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCi0JCXJldHVybjsKLQotCWlmICgoaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQlNTSURfU0VUIHwKLQkJCSAgICAgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkpICYmCi0JICAgIChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9TU0lEX1NFVCB8Ci0JCQkgICAgIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkpKSB7Ci0KLQkJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKLQkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCi0JCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQkJaWYgKGlmbWdkLT5zc2lkX2xlbiA9PSAwKSB7Ci0JCQkvKgotCQkJICogT25seSBhbGxvdyBhc3NvY2lhdGlvbiB0byBiZSBzdGFydGVkIGlmIGEgdmFsaWQgU1NJRAotCQkJICogaXMgY29uZmlndXJlZC4KLQkJCSAqLwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSB8fAotCQkgICAgaWZtZ2QtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCi0JCQlzZXRfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCk7Ci0JCWVsc2UgaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkKLQkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7Ci0JfQotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KLQlpZiAoaWZtZ2QtPnNzaWRfbGVuKQotCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKLQllbHNlCi0JCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKLQotCXJldHVybiAwOwotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwotCi0JaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCi0JaWYgKGlmbWdkLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmbWdkLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKLQkJaWYgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKLQkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCi0JCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQkJLyoKLQkJICogRG8gbm90IHVzZSByZWFzc29jaWF0aW9uIGlmIFNTSUQgaXMgY2hhbmdlZCAoZGlmZmVyZW50IEVTUykuCi0JCSAqLwotCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7Ci0JCW1lbXNldChpZm1nZC0+c3NpZCwgMCwgc2l6ZW9mKGlmbWdkLT5zc2lkKSk7Ci0JCW1lbWNweShpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKTsKLQkJaWZtZ2QtPnNzaWRfbGVuID0gbGVuOwotCX0KLQotCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7Ci19Ci0KLWludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQltZW1jcHkoc3NpZCwgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7Ci0JKmxlbiA9IGlmbWdkLT5zc2lkX2xlbjsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGllZWU4MDIxMV9zdGFfc2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KLQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCBpZm1nZC0+YnNzaWQpICE9IDAgJiYKLQkgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQotCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAotCQkJCSAgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7Ci0KLQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKLQkJbWVtY3B5KGlmbWdkLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKLQkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCX0gZWxzZSB7Ci0JCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKLQkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKLQl9Ci0KLQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jb21taXQoc2RhdGEpOwotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgICAgY29uc3QgY2hhciAqaWUsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0KLQlpZiAobGVuID09IDAgJiYgaWZtZ2QtPmV4dHJhX2llX2xlbiA9PSAwKQotCQlyZXR1cm4gLUVBTFJFQURZOwotCi0JaWYgKGxlbiA9PSBpZm1nZC0+ZXh0cmFfaWVfbGVuICYmIGlmbWdkLT5leHRyYV9pZSAmJgotCSAgICBtZW1jbXAoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKSA9PSAwKQotCQlyZXR1cm4gLUVBTFJFQURZOwotCi0Ja2ZyZWUoaWZtZ2QtPmV4dHJhX2llKTsKLQlpZiAobGVuID09IDApIHsKLQkJaWZtZ2QtPmV4dHJhX2llID0gTlVMTDsKLQkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQlpZm1nZC0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpZm1nZC0+ZXh0cmFfaWUpIHsKLQkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQltZW1jcHkoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKTsKLQlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gbGVuOwotCXJldHVybiAwOwotfQotCi1pbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRlYXV0aGVudGljYXRpbmcgYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb24pOwotCi0JaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSwgdHJ1ZSwgcmVhc29uKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKQotewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbik7Ci0KLQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQotCQlyZXR1cm4gLUVOT0xJTks7Ci0KLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSwgdHJ1ZSwgcmVhc29uKTsKLQlyZXR1cm4gMDsKKwltdXRleF9pbml0KCZpZm1nZC0+bXR4KTsKIH0KIAogLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi8KQEAgLTI2MDIsMyArMjM0OCwyMjUgQEAKIAogCXJldHVybiAwOwogfQorCisvKiBjb25maWcgaG9va3MgKi8KK2ludCBpZWVlODAyMTFfbWdkX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYXV0aF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJY29uc3QgdTggKnNzaWQ7CisJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2s7CisJdTE2IGF1dGhfYWxnOworCisJc3dpdGNoIChyZXEtPmF1dGhfdHlwZSkgeworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTToKKwkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVk6CisJCWF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9GVDoKKwkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfRlQ7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDoKKwkJYXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCXdrID0ga3phbGxvYyhzaXplb2YoKndrKSArIHJlcS0+aWVfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdrLT5ic3MgPSAodm9pZCAqKXJlcS0+YnNzOworCisJaWYgKHJlcS0+aWUgJiYgcmVxLT5pZV9sZW4pIHsKKwkJbWVtY3B5KHdrLT5pZSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOworCQl3ay0+aWVfbGVuID0gcmVxLT5pZV9sZW47CisJfQorCisJaWYgKHJlcS0+a2V5ICYmIHJlcS0+a2V5X2xlbikgeworCQl3ay0+a2V5X2xlbiA9IHJlcS0+a2V5X2xlbjsKKwkJd2stPmtleV9pZHggPSByZXEtPmtleV9pZHg7CisJCW1lbWNweSh3ay0+a2V5LCByZXEtPmtleSwgcmVxLT5rZXlfbGVuKTsKKwl9CisKKwlzc2lkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUocmVxLT5ic3MsIFdMQU5fRUlEX1NTSUQpOworCW1lbWNweSh3ay0+c3NpZCwgc3NpZCArIDIsIHNzaWRbMV0pOworCXdrLT5zc2lkX2xlbiA9IHNzaWRbMV07CisKKwl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFOworCXdrLT5hdXRoX2FsZyA9IGF1dGhfYWxnOworCXdrLT50aW1lb3V0ID0gamlmZmllczsgLyogcnVuIHJpZ2h0IGF3YXkgKi8KKworCS8qCisJICogWFhYOiBpZiBzdGlsbCBhc3NvY2lhdGVkIG5lZWQgdG8gdGVsbCBBUCB0aGF0IHdlJ3JlIGdvaW5nCisJICoJdG8gc2xlZXAgYW5kIHRoZW4gY2hhbmdlIGNoYW5uZWwgZXRjLgorCSAqLworCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gcmVxLT5ic3MtPmNoYW5uZWw7CisJaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOworCisJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CisJbGlzdF9hZGQoJndrLT5saXN0LCAmc2RhdGEtPnUubWdkLndvcmtfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLndvcmspOworCXJldHVybiAwOworfQorCitpbnQgaWVlZTgwMjExX21nZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCXN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssICpmb3VuZCA9IE5VTEw7CisJaW50IGksIGVycjsKKworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmlmbWdkLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCZ3ay0+YnNzLT5jYnNzID09IHJlcS0+YnNzICYmCisJCSAgICB3ay0+c3RhdGUgPT0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFKSB7CisJCQlmb3VuZCA9IHdrOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCWVyciA9IC1FTk9MSU5LOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2RlbCgmZm91bmQtPmxpc3QpOworCisJd2sgPSBrcmVhbGxvYyhmb3VuZCwgc2l6ZW9mKCp3aykgKyByZXEtPmllX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3aykgeworCQlsaXN0X2FkZCgmZm91bmQtPmxpc3QsICZpZm1nZC0+d29ya19saXN0KTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbGlzdF9hZGQoJndrLT5saXN0LCAmaWZtZ2QtPndvcmtfbGlzdCk7CisKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfRElTQUJMRV8xMU47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlOyBpKyspCisJCWlmIChyZXEtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlW2ldID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8CisJCSAgICByZXEtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlW2ldID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVAgfHwKKwkJICAgIHJlcS0+Y3J5cHRvLmNpcGhlcnNfcGFpcndpc2VbaV0gPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KQorCQkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfRElTQUJMRV8xMU47CisKKwlzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbCA9IHJlcS0+YnNzLT5jaGFubmVsOworCWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCAwKTsKKworCWlmIChyZXEtPmllICYmIHJlcS0+aWVfbGVuKSB7CisJCW1lbWNweSh3ay0+aWUsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKKwkJd2stPmllX2xlbiA9IHJlcS0+aWVfbGVuOworCX0gZWxzZQorCQl3ay0+aWVfbGVuID0gMDsKKworCWlmIChyZXEtPnByZXZfYnNzaWQpCisJCW1lbWNweSh3ay0+cHJldl9ic3NpZCwgcmVxLT5wcmV2X2Jzc2lkLCBFVEhfQUxFTik7CisKKwl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FTU09DOworCXdrLT50cmllcyA9IDA7CisJd2stPnRpbWVvdXQgPSBqaWZmaWVzOyAvKiBydW4gcmlnaHQgYXdheSAqLworCisJaWYgKHJlcS0+dXNlX21mcCkgeworCQlpZm1nZC0+bWZwID0gSUVFRTgwMjExX01GUF9SRVFVSVJFRDsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJaWZtZ2QtPm1mcCA9IElFRUU4MDIxMV9NRlBfRElTQUJMRUQ7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRDsKKwl9CisKKwlpZiAocmVxLT5jcnlwdG8uY29udHJvbF9wb3J0KQorCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQ7CisJZWxzZQorCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOworCisJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7CisKKwllcnIgPSAwOworCisgb3V0OgorCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGllZWU4MDIxMV9tZ2RfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxLAorCQkJIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3azsKKwljb25zdCB1OCAqYnNzaWQgPSBOVUxMOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVxLT5yZWFzb25fY29kZSk7CisKKwltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKKworCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAmJiAmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MgPT0gcmVxLT5ic3MpIHsKKwkJYnNzaWQgPSByZXEtPmJzcy0+YnNzaWQ7CisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUpOworCX0gZWxzZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAoJndrLT5ic3MtPmNic3MgPT0gcmVxLT5ic3MpIHsKKwkJCWJzc2lkID0gcmVxLT5ic3MtPmJzc2lkOworCQkJbGlzdF9kZWwoJndrLT5saXN0KTsKKwkJCWtmcmVlKHdrKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBjZmc4MDIxMSBzaG91bGQgY2F0Y2ggdGhpcyAuLi4gYnV0IGl0J3MgcmFjeSBzaW5jZQorCSAqIHdlIGNhbiByZWNlaXZlIGEgZGVhdXRoIGZyYW1lLCBwcm9jZXNzIGl0LCBoYW5kIGl0CisJICogdG8gY2ZnODAyMTEgd2hpbGUgdGhhdCdzIGluIGEgbG9ja2VkIHNlY3Rpb24gYWxyZWFkeQorCSAqIHRyeWluZyB0byB0ZWxsIHVzIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gZGlzY29ubmVjdC4KKwkgKi8KKwlpZiAoIWJzc2lkKSB7CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJCXJldHVybiAtRU5PTElOSzsKKwl9CisKKwltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOworCisJaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHNkYXRhLCBic3NpZCwKKwkJCUlFRUU4MDIxMV9TVFlQRV9ERUFVVEgsIHJlcS0+cmVhc29uX2NvZGUsCisJCQljb29raWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfbWdkX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSwKKwkJCSAgIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRpbmcgYnkgbG9jYWwgY2hvaWNlIChyZWFzb249JWQpXG4iLAorCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXEtPnJlYXNvbl9jb2RlKTsKKworCW11dGV4X2xvY2soJmlmbWdkLT5tdHgpOworCisJLyoKKwkgKiBjZmc4MDIxMSBzaG91bGQgY2F0Y2ggdGhpcyAuLi4gYnV0IGl0J3MgcmFjeSBzaW5jZQorCSAqIHdlIGNhbiByZWNlaXZlIGEgZGlzYXNzb2MgZnJhbWUsIHByb2Nlc3MgaXQsIGhhbmQgaXQKKwkgKiB0byBjZmc4MDIxMSB3aGlsZSB0aGF0J3MgaW4gYSBsb2NrZWQgc2VjdGlvbiBhbHJlYWR5CisJICogdHJ5aW5nIHRvIHRlbGwgdXMgdGhhdCB0aGUgdXNlciB3YW50cyB0byBkaXNjb25uZWN0LgorCSAqLworCWlmICgmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MgIT0gcmVxLT5ic3MpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKwkJcmV0dXJuIC1FTk9MSU5LOworCX0KKworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlKTsKKworCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisKKwlpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc2RhdGEsIHJlcS0+YnNzLT5ic3NpZCwKKwkJCUlFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQywgcmVxLT5yZWFzb25fY29kZSwKKwkJCWNvb2tpZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCmluZGV4IDVlM2Q0NzYuLmU1MzVmMWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9wbS5jCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC0yNiw3ICsyNiw3IEBACiAJLyogbWFrZSBxdWllc2NpbmcgdmlzaWJsZSB0byB0aW1lcnMgZXZlcnl3aGVyZSAqLwogCW1iKCk7CiAKLQlmbHVzaF93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT53b3JrcXVldWUpOwogCiAJLyogRG9uJ3QgdHJ5IHRvIHJ1biB0aW1lcnMgd2hpbGUgc3VzcGVuZGVkLiAqLwogCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+c3RhX2NsZWFudXApOwpAQCAtOTYsNiArOTYsMTAgQEAKIAkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQogCQkJY29udGludWU7CiAKKwkJLyogZGlzYWJsZSBiZWFjb25pbmcgKi8KKwkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsCisJCQlCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCk7CisKIAkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKIAkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwogCQljb25mLm1hY19hZGRyID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7CkBAIC0xMDMsMTcgKzEwNyw4IEBACiAJfQogCiAJLyogc3RvcCBoYXJkd2FyZSAtIHRoaXMgbXVzdCBzdG9wIFJYICovCi0JaWYgKGxvY2FsLT5vcGVuX2NvdW50KSB7Ci0JCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIGZhbHNlKTsKLQkJZHJ2X3N0b3AobG9jYWwpOwotCX0KLQotCS8qCi0JICogZmx1c2ggYWdhaW4sIGluIGNhc2UgZHJpdmVyIHF1ZXVlZCB3b3JrIC0tIGl0Ci0JICogc2hvdWxkbid0IGJlIGRvaW5nIChvciBjYW5jZWwgZXZlcnl0aGluZyBpbiB0aGUKLQkgKiBzdG9wIGNhbGxiYWNrKSB0aGF0IGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LgotCSAqLwotCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+aHcud29ya3F1ZXVlKTsKKwlpZiAobG9jYWwtPm9wZW5fY291bnQpCisJCWllZWU4MDIxMV9zdG9wX2RldmljZShsb2NhbCk7CiAKIAlsb2NhbC0+c3VzcGVuZGVkID0gdHJ1ZTsKIAkvKiBuZWVkIHN1c3BlbmRlZCB0byBiZSB2aXNpYmxlIGJlZm9yZSBxdWllc2NpbmcgaXMgZmFsc2UgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmMgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCmluZGV4IDQ2NDFmMDAuLmIzM2VmYzQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmMKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuYwpAQCAtMTk4LDYgKzE5OCwzNSBAQAogCWtmcmVlKGN0cmxfcmVmKTsKIH0KIAorc3RhdGljIGJvb2wgcmNfbm9fZGF0YV9vcl9ub19hY2soc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJX19sZTE2IGZjOworCisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlyZXR1cm4gKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSB8fCAhaWVlZTgwMjExX2lzX2RhdGEoZmMpKTsKK30KKworYm9vbCByYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgIHZvaWQgKnByaXZfc3RhLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eHJjLT5za2IpOworCisJaWYgKCFzdGEgfHwgIXByaXZfc3RhIHx8IHJjX25vX2RhdGFfb3Jfbm9fYWNrKHR4cmMpKSB7CisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4ID0gcmF0ZV9sb3dlc3RfaW5kZXgodHhyYy0+c2JhbmQsIHN0YSk7CisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQorCQkJKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8KKwkJCTEgOiB0eHJjLT5ody0+bWF4X3JhdGVfdHJpZXM7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MKHJhdGVfY29udHJvbF9zZW5kX2xvdyk7CisKIHZvaWQgcmF0ZV9jb250cm9sX2dldF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYykKQEAgLTI1OCw3ICsyODcsNyBAQAogCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYsICpvbGQ7CiAKIAlBU1NFUlRfUlROTCgpOwotCWlmIChsb2NhbC0+b3Blbl9jb3VudCB8fCBuZXRpZl9ydW5uaW5nKGxvY2FsLT5tZGV2KSkKKwlpZiAobG9jYWwtPm9wZW5fY291bnQpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlyZWYgPSByYXRlX2NvbnRyb2xfYWxsb2MobmFtZSwgbG9jYWwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMKaW5kZXggMzc3NzFhYi4uN2M1MTQyOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5jCkBAIC03MCwyMCArNzAsNiBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wKLXVzZV9sb3dfcmF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQl1MTYgZmM7Ci0KLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7Ci0KLQlyZXR1cm4gKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSB8fAotCQkoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpOwotfQotCi0KIHN0YXRpYyB2b2lkCiBtaW5zdHJlbF91cGRhdGVfc3RhdHMoc3RydWN0IG1pbnN0cmVsX3ByaXYgKm1wLCBzdHJ1Y3QgbWluc3RyZWxfc3RhX2luZm8gKm1pKQogewpAQCAtMjMyLDcgKzIxOCw2IEBACiAJCSAgdm9pZCAqcHJpdl9zdGEsIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSB0eHJjLT5za2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPSB0eHJjLT5zYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IG1pbnN0cmVsX3N0YV9pbmZvICptaSA9IHByaXZfc3RhOwogCXN0cnVjdCBtaW5zdHJlbF9wcml2ICptcCA9IHByaXY7CkBAIC0yNDUsMTQgKzIzMCw4IEBACiAJaW50IG1ycl9uZHhbM107CiAJaW50IHNhbXBsZV9yYXRlOwogCi0JaWYgKCFzdGEgfHwgIW1pIHx8IHVzZV9sb3dfcmF0ZShza2IpKSB7Ci0JCWFyWzBdLmlkeCA9IHJhdGVfbG93ZXN0X2luZGV4KHNiYW5kLCBzdGEpOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJCWFyWzBdLmNvdW50ID0gMTsKLQkJZWxzZQotCQkJYXJbMF0uY291bnQgPSBtcC0+bWF4X3JldHJ5OworCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCiAJCXJldHVybjsKLQl9CiAKIAltcnIgPSBtcC0+aGFzX21yciAmJiAhdHhyYy0+cnRzICYmICF0eHJjLT5ic3NfY29uZi0+dXNlX2N0c19wcm90OwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5oIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuaAppbmRleCA4NjlmZTBlLi4zOGJmNDE2OCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuaAorKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5oCkBAIC0zMyw3ICszMyw2IEBACiAKIAkvKiBwZXItcmF0ZSB0aHJvdWdocHV0ICovCiAJdTMyIGN1cl90cDsKLQl1MzIgdGhyb3VnaHB1dDsKIAogCXU2NCBzdWNjX2hpc3Q7CiAJdTY0IGF0dF9oaXN0OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWxfZGVidWdmcy5jCmluZGV4IDk4ZjQ4MDcuLmE3MTVkOTQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbF9kZWJ1Z2ZzLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJcCArPSBzcHJpbnRmKHAsICIlM3UlcyIsIG1yLT5iaXRyYXRlIC8gMiwKIAkJCQkobXItPmJpdHJhdGUgJiAxID8gIi41IiA6ICIgICIpKTsKIAotCQl0cCA9ICgobXItPmN1cl90cCAqIDk2KSAvIDE4MDAwKSA+PiAxMDsKKwkJdHAgPSBtci0+Y3VyX3RwIC8gKCgxODAwMCA8PCAxMCkgLyA5Nik7CiAJCXByb2IgPSBtci0+Y3VyX3Byb2IgLyAxODsKIAkJZXByb2IgPSBtci0+cHJvYmFiaWxpdHkgLyAxODsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbnN0cmVsX3N0YXRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1pbnN0cmVsX3N0YXRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IG1pbnN0cmVsX3N0YXRzX29wZW4sCiAJLnJlYWQgPSBtaW5zdHJlbF9zdGF0c19yZWFkLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9hbGdvLmMKaW5kZXggYTBiZWY3Ni4uNjk5ZDNlZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jCkBAIC0xNjksMTkgKzE2OSw5IEBACiAJICogc3RpbGwgYSBnb29kIG1lYXN1cmVtZW50IGFuZCBjb3B5IGl0LiAqLwogCWlmICh1bmxpa2VseShzcGluZm8tPnR4X251bV94bWl0ID09IDApKQogCQlwZiA9IHNwaW5mby0+bGFzdF9wZjsKLQllbHNlIHsKLQkJLyogWFhYOiBCQUQgSEFDSyEhISAqLwotCQlzdHJ1Y3Qgc3RhX2luZm8gKnNpID0gY29udGFpbmVyX29mKHN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwotCisJZWxzZQogCQlwZiA9IHNwaW5mby0+dHhfbnVtX2ZhaWxlZCAqIDEwMCAvIHNwaW5mby0+dHhfbnVtX3htaXQ7CiAKLQkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2ktPnNkYXRhLT52aWYpICYmIHBmID09IDEwMCkKLQkJCW1lc2hfcGxpbmtfYnJva2VuKHNpKTsKLQkJcGYgPDw9IFJDX1BJRF9BUklUSF9TSElGVDsKLQkJc2ktPmZhaWxfYXZnID0gKChwZiArIChzcGluZm8tPmxhc3RfcGYgPDwgMykpIC8gOSkKLQkJCQkJPj4gUkNfUElEX0FSSVRIX1NISUZUOwotCX0KLQogCXNwaW5mby0+dHhfbnVtX3htaXQgPSAwOwogCXNwaW5mby0+dHhfbnVtX2ZhaWxlZCA9IDA7CiAKQEAgLTI3NiwxMSArMjY2LDkgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHhyYy0+c2tiOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gdHhyYy0+c2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCByY19waWRfc3RhX2luZm8gKnNwaW5mbyA9IHByaXZfc3RhOwogCWludCByYXRlaWR4OwotCXUxNiBmYzsKIAogCWlmICh0eHJjLT5ydHMpCiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQpAQCAtMjkwLDE2ICsyNzgsOCBAQAogCQkJdHhyYy0+aHctPmNvbmYuc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OwogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgTk9fQUNLIGRhdGEgdXNpbmcgbG93ZXN0IHJhdGUuICovCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICghc3RhIHx8ICFzcGluZm8gfHwKLQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHx8Ci0JICAgIGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spIHsKLQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSByYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgc3RhKTsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCi0JCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmNvdW50ID0gMTsKLQorCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCiAJCXJldHVybjsKLQl9CiAKIAlyYXRlaWR4ID0gc3BpbmZvLT50eHJhdGVfaWR4OwogCkBAIC0zMjEsNyArMzAxLDYgQEAKIAlzdHJ1Y3QgcmNfcGlkX3N0YV9pbmZvICpzcGluZm8gPSBwcml2X3N0YTsKIAlzdHJ1Y3QgcmNfcGlkX2luZm8gKnBpbmZvID0gcHJpdjsKIAlzdHJ1Y3QgcmNfcGlkX3JhdGVpbmZvICpyaW5mbyA9IHBpbmZvLT5yaW5mbzsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnNpOwogCWludCBpLCBqLCB0bXA7CiAJYm9vbCBzOwogCkBAIC0zNTgsOSArMzM3LDYgQEAKIAl9CiAKIAlzcGluZm8tPnR4cmF0ZV9pZHggPSByYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgc3RhKTsKLQkvKiBIQUNLICovCi0Jc2kgPSBjb250YWluZXJfb2Yoc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7Ci0Jc2ktPmZhaWxfYXZnID0gMDsKIH0KIAogc3RhdGljIHZvaWQgKnJhdGVfY29udHJvbF9waWRfYWxsb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYwppbmRleCBhMDhhOWI1Li5hNTkwNDNmYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAogI3VuZGVmIFJDX1BJRF9QUklOVF9CVUZfU0laRQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY19waWRfZm9wX2V2ZW50cyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjX3BpZF9mb3BfZXZlbnRzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gcmF0ZV9jb250cm9sX3BpZF9ldmVudHNfcmVhZCwKIAkucG9sbCA9IHJhdGVfY29udHJvbF9waWRfZXZlbnRzX3BvbGwsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDA5MzZmYzIuLmMwMTU4OGYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC0zMCw3ICszMCw2IEBACiBzdGF0aWMgdTggaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSAgIHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcngsCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCiAJCQkJCSAgIHUxNiBtcGR1X3NlcV9udW0sCiAJCQkJCSAgIGludCBiYXJfcmVxKTsKIC8qCkBAIC01OSwxMSArNTgsMTEgQEAKIAlyZXR1cm4gc2tiOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaG91bGRfZHJvcF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGlubGluZSBpbnQgc2hvdWxkX2Ryb3BfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgaW50IHByZXNlbnRfZmNzX2xlbiwKIAkJCQkgICAgaW50IHJhZGlvdGFwX2xlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAogCWlmIChzdGF0dXMtPmZsYWcgJiAoUlhfRkxBR19GQUlMRURfRkNTX0NSQyB8IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDKSkKQEAgLTExMSwxMCArMTEwLDEwIEBACiBzdGF0aWMgdm9pZAogaWVlZTgwMjExX2FkZF9yeF9yYWRpb3RhcF9oZWFkZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSwKIAkJCQkgaW50IHJ0YXBfbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZHI7CiAJdW5zaWduZWQgY2hhciAqcG9zOwogCkBAIC0yMjAsOSArMjE5LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmICoKIGllZWU4MDIxMV9yeF9tb25pdG9yKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ3NrYiwKLQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAogCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKG9yaWdza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCWludCBuZWVkZWRfaGVhZHJvb20gPSAwOwogCXN0cnVjdCBza19idWZmICpza2IsICpza2IyOwpAQCAtMjQ4LDggKzI0Nyw3IEBACiAJCXByZXNlbnRfZmNzX2xlbiA9IEZDU19MRU47CiAKIAlpZiAoIWxvY2FsLT5tb25pdG9ycykgewotCQlpZiAoc2hvdWxkX2Ryb3BfZnJhbWUoc3RhdHVzLCBvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sCi0JCQkJICAgICAgcnRhcF9sZW4pKSB7CisJCWlmIChzaG91bGRfZHJvcF9mcmFtZShvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sIHJ0YXBfbGVuKSkgewogCQkJZGV2X2tmcmVlX3NrYihvcmlnc2tiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yNTcsNyArMjU1LDcgQEAKIAkJcmV0dXJuIHJlbW92ZV9tb25pdG9yX2luZm8obG9jYWwsIG9yaWdza2IsIHJ0YXBfbGVuKTsKIAl9CiAKLQlpZiAoc2hvdWxkX2Ryb3BfZnJhbWUoc3RhdHVzLCBvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sIHJ0YXBfbGVuKSkgeworCWlmIChzaG91bGRfZHJvcF9mcmFtZShvcmlnc2tiLCBwcmVzZW50X2Zjc19sZW4sIHJ0YXBfbGVuKSkgewogCQkvKiBvbmx5IG5lZWQgdG8gZXhwYW5kIGhlYWRyb29tIGlmIG5lY2Vzc2FyeSAqLwogCQlza2IgPSBvcmlnc2tiOwogCQlvcmlnc2tiID0gTlVMTDsKQEAgLTI4OSw3ICsyODcsNyBAQAogCiAJLyogaWYgbmVjZXNzYXJ5LCBwcmVwZW5kIHJhZGlvdGFwIGluZm9ybWF0aW9uICovCiAJaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19SQURJT1RBUCkpCi0JCWllZWU4MDIxMV9hZGRfcnhfcmFkaW90YXBfaGVhZGVyKGxvY2FsLCBza2IsIHN0YXR1cywgcmF0ZSwKKwkJaWVlZTgwMjExX2FkZF9yeF9yYWRpb3RhcF9oZWFkZXIobG9jYWwsIHNrYiwgcmF0ZSwKIAkJCQkJCSBuZWVkZWRfaGVhZHJvb20pOwogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKQEAgLTQyMCwxMyArNDE4LDEzIEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2I7CiAKLQlpZiAodW5saWtlbHkobG9jYWwtPmh3X3NjYW5uaW5nKSkKLQkJcmV0dXJuIGllZWU4MDIxMV9zY2FuX3J4KHJ4LT5zZGF0YSwgc2tiLCByeC0+c3RhdHVzKTsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykpKQorCQlyZXR1cm4gaWVlZTgwMjExX3NjYW5fcngocngtPnNkYXRhLCBza2IpOwogCi0JaWYgKHVubGlrZWx5KGxvY2FsLT5zd19zY2FubmluZykpIHsKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgJiYKKwkJICAgICAocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKSkgewogCQkvKiBkcm9wIGFsbCB0aGUgb3RoZXIgcGFja2V0cyBkdXJpbmcgYSBzb2Z0d2FyZSBzY2FuIGFueXdheSAqLwotCQlpZiAoaWVlZTgwMjExX3NjYW5fcngocngtPnNkYXRhLCBza2IsIHJ4LT5zdGF0dXMpCi0JCSAgICAhPSBSWF9RVUVVRUQpCisJCWlmIChpZWVlODAyMTFfc2Nhbl9yeChyeC0+c2RhdGEsIHNrYikgIT0gUlhfUVVFVUVEKQogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gUlhfUVVFVUVEOwogCX0KQEAgLTQ5MSwxMiArNDg5LDIxIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CiAJdW5zaWduZWQgaW50IGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKKwljaGFyICpkZXZfYWRkciA9IHJ4LT5kZXYtPmRldl9hZGRyOwogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWYgKCFpZWVlODAyMTFfaGFzX2E0KGhkci0+ZnJhbWVfY29udHJvbCkpCi0JCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwotCQlpZiAobWVtY21wKGhkci0+YWRkcjQsIHJ4LT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKLQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgeworCQkJaWYgKGllZWU4MDIxMV9oYXNfdG9kcyhoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJCQkJIWllZWU4MDIxMV9oYXNfZnJvbWRzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWlmIChtZW1jbXAoaGRyLT5hZGRyMywgZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCX0gZWxzZSB7CisJCQlpZiAoIWllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJaWYgKG1lbWNtcChoZHItPmFkZHI0LCBkZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJfQogCX0KIAogCS8qIElmIHRoZXJlIGlzIG5vdCBhbiBlc3RhYmxpc2hlZCBwZWVyIGxpbmsgYW5kIHRoaXMgaXMgbm90IGEgcGVlciBsaW5rCkBAIC01MjksNyArNTM2LDcgQEAKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCi0JICAgIG1lc2hfcm1jX2NoZWNrKGhkci0+YWRkcjQsIG1zaF9oX2dldChoZHIsIGhkcmxlbiksIHJ4LT5zZGF0YSkpCisJICAgIG1lc2hfcm1jX2NoZWNrKGhkci0+YWRkcjMsIG1zaF9oX2dldChoZHIsIGhkcmxlbiksIHJ4LT5zZGF0YSkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAjdW5kZWYgbXNoX2hfZ2V0CiAKQEAgLTc4NSw3ICs3OTIsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCiAJYXRvbWljX2luYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7Ci0Jc2V0X2FuZF9jbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUywgV0xBTl9TVEFfUFNQT0xMKTsKKwlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFMpOwogCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9TTEVFUCwgJnN0YS0+c3RhKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogU1RBICVwTSBhaWQgJWQgZW50ZXJzIHBvd2VyIHNhdmUgbW9kZVxuIiwKQEAgLTgwMSw3ICs4MDgsNyBAQAogCiAJYXRvbWljX2RlYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7CiAKLQljbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QUyB8IFdMQU5fU1RBX1BTUE9MTCk7CisJY2xlYXJfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFMpOwogCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9BV0FLRSwgJnN0YS0+c3RhKTsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZzdGEtPnBzX3R4X2J1ZikpCkBAIC04MzYsMjggKzg0MywyMiBAQAogCWlmICghc3RhKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKLQkvKiBVcGRhdGUgbGFzdF9yeCBvbmx5IGZvciBJQlNTIHBhY2tldHMgd2hpY2ggYXJlIGZvciB0aGUgY3VycmVudAotCSAqIEJTU0lEIHRvIGF2b2lkIGtlZXBpbmcgdGhlIGN1cnJlbnQgSUJTUyBuZXR3b3JrIGFsaXZlIGluIGNhc2VzIHdoZXJlCi0JICogb3RoZXIgU1RBcyBhcmUgdXNpbmcgZGlmZmVyZW50IEJTU0lELiAqLworCS8qCisJICogVXBkYXRlIGxhc3Rfcnggb25seSBmb3IgSUJTUyBwYWNrZXRzIHdoaWNoIGFyZSBmb3IgdGhlIGN1cnJlbnQKKwkgKiBCU1NJRCB0byBhdm9pZCBrZWVwaW5nIHRoZSBjdXJyZW50IElCU1MgbmV0d29yayBhbGl2ZSBpbiBjYXNlcworCSAqIHdoZXJlIG90aGVyIFNUQXMgc3RhcnQgdXNpbmcgZGlmZmVyZW50IEJTU0lELgorCSAqLwogCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CiAJCXU4ICpic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCByeC0+c2tiLT5sZW4sCiAJCQkJCQlOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHJ4LT5zZGF0YS0+dS5pYnNzLmJzc2lkKSA9PSAwKQogCQkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKLQl9IGVsc2UKLQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8Ci0JICAgIHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkvKiBVcGRhdGUgbGFzdF9yeCBvbmx5IGZvciB1bmljYXN0IGZyYW1lcyBpbiBvcmRlciB0byBwcmV2ZW50Ci0JCSAqIHRoZSBQcm9iZSBSZXF1ZXN0IGZyYW1lcyAodGhlIG9ubHkgYnJvYWRjYXN0IGZyYW1lcyBmcm9tIGEKLQkJICogU1RBIGluIGluZnJhc3RydWN0dXJlIG1vZGUpIGZyb20ga2VlcGluZyBhIGNvbm5lY3Rpb24gYWxpdmUuCisJfSBlbHNlIGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKKwkJLyoKIAkJICogTWVzaCBiZWFjb25zIHdpbGwgdXBkYXRlIGxhc3Rfcnggd2hlbiBpZiB0aGV5IGFyZSBmb3VuZCB0bwogCQkgKiBtYXRjaCB0aGUgY3VycmVudCBsb2NhbCBjb25maWd1cmF0aW9uIHdoZW4gcHJvY2Vzc2VkLgogCQkgKi8KLQkJaWYgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCQkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQlyeC0+c2RhdGEtPnUubWdkLmxhc3RfYmVhY29uID0gamlmZmllczsKLQkJfSBlbHNlCi0JCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOworCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwogCX0KIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCkBAIC0xMTI1LDE0ICsxMTI2LDE1IEBACiAJCXNrYl9xdWV1ZV9lbXB0eSgmcngtPnN0YS0+cHNfdHhfYnVmKTsKIAogCWlmIChza2IpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAkJLyoKLQkJICogVGVsbCBUWCBwYXRoIHRvIHNlbmQgb25lIGZyYW1lIGV2ZW4gdGhvdWdoIHRoZSBTVEEgbWF5CisJCSAqIFRlbGwgVFggcGF0aCB0byBzZW5kIHRoaXMgZnJhbWUgZXZlbiB0aG91Z2ggdGhlIFNUQSBtYXkKIAkJICogc3RpbGwgcmVtYWluIGlzIFBTIG1vZGUgYWZ0ZXIgdGhpcyBmcmFtZSBleGNoYW5nZS4KIAkJICovCi0JCXNldF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfUFNQT0xMKTsKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9QU1BPTExfUkVTUE9OU0U7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiU1RBICVwTSBhaWQgJWQ6IFBTIFBvbGwgKGVudHJpZXMgYWZ0ZXIgJWQpXG4iLApAQCAtMTE0Nyw3ICsxMTQ5LDcgQEAKIAkJZWxzZQogCQkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKIAotCQlkZXZfcXVldWVfeG1pdChza2IpOworCQlpZWVlODAyMTFfYWRkX3BlbmRpbmdfc2tiKHJ4LT5sb2NhbCwgc2tiKTsKIAogCQlpZiAobm9fcGVuZGluZ19wa3RzKQogCQkJc3RhX2luZm9fY2xlYXJfdGltX2JpdChyeC0+c3RhKTsKQEAgLTE0ODcsMTAgKzE0ODksMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hfaGRyOwogCXVuc2lnbmVkIGludCBoZHJsZW47CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2IsICpmd2Rfc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJbWVzaF9oZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItPmRhdGEgKyBoZHJsZW4pOworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAKIAlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybiBSWF9DT05USU5VRTsKQEAgLTE0OTksMTEgKzE1MDQsMTAgQEAKIAkJLyogaWxsZWdhbCBmcmFtZSAqLwogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCi0JaWYgKG1lc2hfaGRyLT5mbGFncyAmIE1FU0hfRkxBR1NfQUVfQTVfQTYpewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCisJCQkobWVzaF9oZHItPmZsYWdzICYgTUVTSF9GTEFHU19BRV9BNV9BNikpIHsKIAkJc3RydWN0IG1lc2hfcGF0aCAqbXBwYXRoOwogCi0JCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbXBwYXRoID0gbXBwX3BhdGhfbG9va3VwKG1lc2hfaGRyLT5lYWRkcjIsIHNkYXRhKTsKIAkJaWYgKCFtcHBhdGgpIHsKQEAgLTE1MTgsNyArMTUyMiw5IEBACiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIocngtPmRldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjMpID09IDApCisJLyogRnJhbWUgaGFzIHJlYWNoZWQgZGVzdGluYXRpb24uICBEb24ndCBmb3J3YXJkICovCisJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgorCQkJY29tcGFyZV9ldGhlcl9hZGRyKHJ4LT5kZXYtPmRldl9hZGRyLCBoZHItPmFkZHIzKSA9PSAwKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKIAltZXNoX2hkci0+dHRsLS07CkBAIC0xNTI5LDYgKzE1MzUsOCBAQAogCQkJCQkJICAgICBkcm9wcGVkX2ZyYW1lc190dGwpOwogCQllbHNlIHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmd2RfaGRyOworCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCiAJCQlmd2Rfc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAogCQkJaWYgKCFmd2Rfc2tiICYmIG5ldF9yYXRlbGltaXQoKSkKQEAgLTE1MzYsMTkgKzE1NDQsNDAgQEAKIAkJCQkJCSAgIHJ4LT5kZXYtPm5hbWUpOwogCiAJCQlmd2RfaGRyID0gIChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBmd2Rfc2tiLT5kYXRhOwotCQkJLyoKLQkJCSAqIFNhdmUgVEEgdG8gYWRkcjEgdG8gc2VuZCBUQSBhIHBhdGggZXJyb3IgaWYgYQotCQkJICogc3VpdGFibGUgbmV4dCBob3AgaXMgbm90IGZvdW5kCi0JCQkgKi8KLQkJCW1lbWNweShmd2RfaGRyLT5hZGRyMSwgZndkX2hkci0+YWRkcjIsIEVUSF9BTEVOKTsKIAkJCW1lbWNweShmd2RfaGRyLT5hZGRyMiwgcngtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJCWZ3ZF9za2ItPmRldiA9IHJ4LT5sb2NhbC0+bWRldjsKLQkJCWZ3ZF9za2ItPmlpZiA9IHJ4LT5kZXYtPmlmaW5kZXg7Ci0JCQlkZXZfcXVldWVfeG1pdChmd2Rfc2tiKTsKKwkJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGZ3ZF9za2IpOworCQkJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOworCQkJaW5mby0+Y29udHJvbC52aWYgPSAmcngtPnNkYXRhLT52aWY7CisJCQlpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKGxvY2FsLCBmd2Rfc2tiKTsKKwkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihmd2RfaGRyLT5hZGRyMSkpCisJCQkJSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQygmc2RhdGEtPnUubWVzaCwKKwkJCQkJCQkJZndkZWRfbWNhc3QpOworCQkJZWxzZSB7CisJCQkJaW50IGVycjsKKwkJCQkvKgorCQkJCSAqIFNhdmUgVEEgdG8gYWRkcjEgdG8gc2VuZCBUQSBhIHBhdGggZXJyb3IgaWYgYQorCQkJCSAqIHN1aXRhYmxlIG5leHQgaG9wIGlzIG5vdCBmb3VuZAorCQkJCSAqLworCQkJCW1lbWNweShmd2RfaGRyLT5hZGRyMSwgZndkX2hkci0+YWRkcjIsCisJCQkJCQlFVEhfQUxFTik7CisJCQkJZXJyID0gbWVzaF9uZXh0aG9wX2xvb2t1cChmd2Rfc2tiLCBzZGF0YSk7CisJCQkJLyogRmFpbGVkIHRvIGltbWVkaWF0ZWx5IHJlc29sdmUgbmV4dCBob3A6CisJCQkJICogZndkZWQgZnJhbWUgd2FzIGRyb3BwZWQgb3Igd2lsbCBiZSBhZGRlZAorCQkJCSAqIGxhdGVyIHRvIHRoZSBwZW5kaW5nIHNrYiBxdWV1ZS4gICovCisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQkJCUlFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMoJnNkYXRhLT51Lm1lc2gsCisJCQkJCQkJCWZ3ZGVkX3VuaWNhc3QpOworCQkJfQorCQkJSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQygmc2RhdGEtPnUubWVzaCwKKwkJCQkJCSAgICAgZndkZWRfZnJhbWVzKTsKKwkJCWllZWU4MDIxMV9hZGRfcGVuZGluZ19za2IobG9jYWwsIGZ3ZF9za2IpOwogCQl9CiAJfQogCi0JaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpIHx8CisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpIHx8CiAJICAgIHJ4LT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCXJldHVybiBSWF9DT05USU5VRTsKIAllbHNlCkBAIC0xNjIwLDcgKzE2NDksNyBAQAogCQkvKiBtYW5hZ2UgcmVvcmRlcmluZyBidWZmZXIgYWNjb3JkaW5nIHRvIHJlcXVlc3RlZCAqLwogCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KIAkJcmN1X3JlYWRfbG9jaygpOwotCQlpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihodywgdGlkX2FnZ19yeCwgTlVMTCwgTlVMTCwKKwkJaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoaHcsIHRpZF9hZ2dfcngsIE5VTEwsCiAJCQkJCQkgc3RhcnRfc2VxX251bSwgMSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKQEAgLTE2NDQsMTIgKzE2NzMsNyBAQAogCiAJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwIHx8CiAJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwKSB7Ci0JCS8qIE5vdCBmcm9tIHRoZSBjdXJyZW50IEFQLiAqLwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7Ci0JCS8qIEFzc29jaWF0aW9uIGluIHByb2dyZXNzOyBpZ25vcmUgU0EgUXVlcnkgKi8KKwkJLyogTm90IGZyb20gdGhlIGN1cnJlbnQgQVAgb3Igbm90IGFzc29jaWF0ZWQgeWV0LiAqLwogCQlyZXR1cm47CiAJfQogCkBAIC0xNjg2LDcgKzE3MTAsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGxlbiA9IHJ4LT5za2ItPmxlbjsKIAogCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKQEAgLTE3NjQsMTcgKzE3ODcsNyBAQAogCQkJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikpCiAJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCwKLQkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJCSAgIHNkYXRhLT51Lm1nZC5zc2lkLAotCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZF9sZW4pOwotCQkJaWYgKCFic3MpCi0JCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKLQotCQkJaWVlZTgwMjExX3N0YV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCi0JCQkJICAgICAmbWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaC5zd19lbGVtLCBic3MpOwotCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JCQlicmVhazsKKwkJCXJldHVybiBpZWVlODAyMTFfc3RhX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DQVRFR09SWV9TQV9RVUVSWToKQEAgLTE4MTcsMTkgKzE4MzAsMTggQEAKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQotCQlyZXR1cm4gaWVlZTgwMjExX21lc2hfcnhfbWdtdChzZGF0YSwgcngtPnNrYiwgcngtPnN0YXR1cyk7CisJCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiKTsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXJldHVybiBpZWVlODAyMTFfaWJzc19yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IpOwogCiAJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKKwkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7CiAKIAlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlpbnQga2V5aWR4OwpAQCAtMTg2Niw3ICsxODc4LDggQEAKIAkgICAgIWllZWU4MDIxMV9pc19hdXRoKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCWdvdG8gaWdub3JlOwogCi0JbWFjODAyMTFfZXZfbWljaGFlbF9taWNfZmFpbHVyZShyeC0+c2RhdGEsIGtleWlkeCwgaGRyLCBOVUxMKTsKKwltYWM4MDIxMV9ldl9taWNoYWVsX21pY19mYWlsdXJlKHJ4LT5zZGF0YSwga2V5aWR4LCBoZHIsIE5VTEwsCisJCQkJCUdGUF9BVE9NSUMpOwogIGlnbm9yZToKIAlkZXZfa2ZyZWVfc2tiKHJ4LT5za2IpOwogCXJ4LT5za2IgPSBOVUxMOwpAQCAtMjAyOCwxMyArMjA0MSw4IEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlpZiAoIWJzc2lkKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQpKSB7Ci0JCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCi0JCQkJcmV0dXJuIDA7Ci0JCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKLQkJfSBlbHNlIGlmICghbXVsdGljYXN0ICYmCi0JCQkgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCi0JCQkJCSAgICAgIGhkci0+YWRkcjEpICE9IDApIHsKKwkJaWYgKCFtdWx0aWNhc3QgJiYKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwgaGRyLT5hZGRyMSkgIT0gMCkgewogCQkJaWYgKCEoc2RhdGEtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTIxMTQsOSArMjEyMiw5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKIAkJCQkJIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKQEAgLTIxNDMsMTEgKzIxNTEsMTIgQEAKIAl9CiAKIAlpZiAoKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikpIHsKLQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChsb2NhbC0+bWRldiwgaGRyLCAmcngpOworCQlpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KGhkciwgJnJ4KTsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseShsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKSkKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgfHwKKwkJICAgICB0ZXN0X2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmbG9jYWwtPnNjYW5uaW5nKSkpCiAJCXJ4LmZsYWdzIHw9IElFRUU4MDIxMV9SWF9JTl9TQ0FOOwogCiAJaWVlZTgwMjExX3BhcnNlX3FvcygmcngpOwpAQCAtMjIyNywyMCArMjIzNiwyMSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzOwogCi0JaWYgKCF0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0pCisJaWYgKCFza2IpCiAJCWdvdG8gbm9fZnJhbWU7CiAKKwlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKKwogCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgdG8gc3RhY2sgKi8KLQltZW1jcHkoJnN0YXR1cywgdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLT5jYiwgc2l6ZW9mKHN0YXR1cykpOwotCXNiYW5kID0gaHctPndpcGh5LT5iYW5kc1tzdGF0dXMuYmFuZF07Ci0JaWYgKHN0YXR1cy5mbGFnICYgUlhfRkxBR19IVCkKKwlzYmFuZCA9IGh3LT53aXBoeS0+YmFuZHNbc3RhdHVzLT5iYW5kXTsKKwlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkKIAkJcmF0ZSA9IHNiYW5kLT5iaXRyYXRlczsgLyogVE9ETzogSFQgcmF0ZXMgKi8KIAllbHNlCi0JCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW3N0YXR1cy5yYXRlX2lkeF07Ci0JX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdLAotCQkJCSAgICAgJnN0YXR1cywgcmF0ZSk7CisJCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW3N0YXR1cy0+cmF0ZV9pZHhdOworCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHNrYiwgcmF0ZSk7CiAJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtLS07CiAJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWZbaW5kZXhdID0gTlVMTDsKIApAQCAtMjI2NSw3ICsyMjc1LDYgQEAKIHN0YXRpYyB1OCBpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeCwKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4c3RhdHVzLAogCQkJCQkgICB1MTYgbXBkdV9zZXFfbnVtLAogCQkJCQkgICBpbnQgYmFyX3JlcSkKIHsKQEAgLTIzMjQsOCArMjMzMyw2IEBACiAJLyogcHV0IHRoZSBmcmFtZSBpbiB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KIAl0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZltpbmRleF0gPSBza2I7CiAJdGlkX2FnZ19yeC0+cmVvcmRlcl90aW1lW2luZGV4XSA9IGppZmZpZXM7Ci0JbWVtY3B5KHRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmW2luZGV4XS0+Y2IsIHJ4c3RhdHVzLAotCSAgICAgICBzaXplb2YoKnJ4c3RhdHVzKSk7CiAJdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtKys7CiAJLyogcmVsZWFzZSB0aGUgYnVmZmVyIHVudGlsIG5leHQgbWlzc2luZyBmcmFtZSAqLwogCWluZGV4ID0gc2VxX3N1Yih0aWRfYWdnX3J4LT5oZWFkX3NlcV9udW0sIHRpZF9hZ2dfcngtPnNzbikKQEAgLTIzNzQsOCArMjM4MSw3IEBACiB9CiAKIHN0YXRpYyB1OCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQorCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CkBAIC0yNDI0LDcgKzI0MzAsNyBAQAogCiAJLyogYWNjb3JkaW5nIHRvIG1wZHUgc2VxdWVuY2UgbnVtYmVyIGRlYWwgd2l0aCByZW9yZGVyaW5nIGJ1ZmZlciAqLwogCW1wZHVfc2VxX251bSA9IChzYyAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNDsKLQlyZXQgPSBpZWVlODAyMTFfc3RhX21hbmFnZV9yZW9yZGVyX2J1ZihodywgdGlkX2FnZ19yeCwgc2tiLCBzdGF0dXMsCisJcmV0ID0gaWVlZTgwMjExX3N0YV9tYW5hZ2VfcmVvcmRlcl9idWYoaHcsIHRpZF9hZ2dfcngsIHNrYiwKIAkJCQkJCW1wZHVfc2VxX251bSwgMCk7CiAgZW5kX3Jlb3JkZXI6CiAJcmV0dXJuIHJldDsKQEAgLTI0MzQsMjQgKzI0NDAsMjAgQEAKICAqIFRoaXMgaXMgdGhlIHJlY2VpdmUgcGF0aCBoYW5kbGVyLiBJdCBpcyBjYWxsZWQgYnkgYSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gYW4KICAqIDgwMi4xMSBNUERVIGlzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLgogICovCi12b2lkIF9faWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKK3ZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCi0JaWYgKHN0YXR1cy0+YmFuZCA8IDAgfHwKLQkgICAgc3RhdHVzLT5iYW5kID49IElFRUU4MDIxMV9OVU1fQkFORFMpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoV0FSTl9PTihzdGF0dXMtPmJhbmQgPCAwIHx8CisJCSAgICBzdGF0dXMtPmJhbmQgPj0gSUVFRTgwMjExX05VTV9CQU5EUykpCisJCWdvdG8gZHJvcDsKIAogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tzdGF0dXMtPmJhbmRdOwotCWlmICghc2JhbmQpIHsKLQkJV0FSTl9PTigxKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoV0FSTl9PTighc2JhbmQpKQorCQlnb3RvIGRyb3A7CiAKIAkvKgogCSAqIElmIHdlJ3JlIHN1c3BlbmRpbmcsIGl0IGlzIHBvc3NpYmxlIGFsdGhvdWdoIG5vdCB0b28gbGlrZWx5CkBAIC0yNDYwLDE2ICsyNDYyLDIxIEBACiAJICogdGhhdCBtaWdodCwgZm9yIGV4YW1wbGUsIGNhdXNlIHN0YXRpb25zIHRvIGJlIGFkZGVkIG9yIG90aGVyCiAJICogZHJpdmVyIGNhbGxiYWNrcyBiZSBpbnZva2VkLgogCSAqLwotCWlmICh1bmxpa2VseShsb2NhbC0+cXVpZXNjaW5nIHx8IGxvY2FsLT5zdXNwZW5kZWQpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQorCWlmICh1bmxpa2VseShsb2NhbC0+cXVpZXNjaW5nIHx8IGxvY2FsLT5zdXNwZW5kZWQpKQorCQlnb3RvIGRyb3A7CisKKwkvKgorCSAqIFRoZSBzYW1lIGhhcHBlbnMgd2hlbiB3ZSdyZSBub3QgZXZlbiBzdGFydGVkLAorCSAqIGJ1dCB0aGF0J3Mgd29ydGggYSB3YXJuaW5nLgorCSAqLworCWlmIChXQVJOX09OKCFsb2NhbC0+c3RhcnRlZCkpCisJCWdvdG8gZHJvcDsKIAogCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSB7CiAJCS8qIHJhdGVfaWR4IGlzIE1DUyBpbmRleCAqLwogCQlpZiAoV0FSTl9PTihzdGF0dXMtPnJhdGVfaWR4IDwgMCB8fAogCQkJICAgIHN0YXR1cy0+cmF0ZV9pZHggPj0gNzYpKQotCQkJcmV0dXJuOworCQkJZ290byBkcm9wOwogCQkvKiBIVCByYXRlcyBhcmUgbm90IGluIHRoZSB0YWJsZSAtIHVzZSB0aGUgaGlnaGVzdCBsZWdhY3kgcmF0ZQogCQkgKiBmb3Igbm93IHNpbmNlIG90aGVyIHBhcnRzIG9mIG1hYzgwMjExIG1heSBub3QgeWV0IGJlIGZ1bGx5CiAJCSAqIE1DUyBhd2FyZS4gKi8KQEAgLTI0NzcsNyArMjQ4NCw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKFdBUk5fT04oc3RhdHVzLT5yYXRlX2lkeCA8IDAgfHwKIAkJCSAgICBzdGF0dXMtPnJhdGVfaWR4ID49IHNiYW5kLT5uX2JpdHJhdGVzKSkKLQkJCXJldHVybjsKKwkJCWdvdG8gZHJvcDsKIAkJcmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbc3RhdHVzLT5yYXRlX2lkeF07CiAJfQogCkBAIC0yNDk0LDcgKzI1MDEsNyBAQAogCSAqIGlmIGl0IHdhcyBwcmV2aW91c2x5IHByZXNlbnQuCiAJICogQWxzbywgZnJhbWVzIHdpdGggbGVzcyB0aGFuIDE2IGJ5dGVzIGFyZSBkcm9wcGVkLgogCSAqLwotCXNrYiA9IGllZWU4MDIxMV9yeF9tb25pdG9yKGxvY2FsLCBza2IsIHN0YXR1cywgcmF0ZSk7CisJc2tiID0gaWVlZTgwMjExX3J4X21vbml0b3IobG9jYWwsIHNrYiwgcmF0ZSk7CiAJaWYgKCFza2IpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKQEAgLTI1MTIsMjUgKzI1MTksMjUgQEAKIAkgKiBmcmFtZXMgZnJvbSBvdGhlciB0aGFuIG9wZXJhdGlvbmFsIGNoYW5uZWwpLCBidXQgdGhhdCBzaG91bGQgbm90CiAJICogaGFwcGVuIGluIG5vcm1hbCBuZXR3b3Jrcy4KIAkgKi8KLQlpZiAoIWllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KGxvY2FsLCBza2IsIHN0YXR1cykpCi0JCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHNrYiwgc3RhdHVzLCByYXRlKTsKKwlpZiAoIWllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KGxvY2FsLCBza2IpKQorCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBza2IsIHJhdGUpOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm47CisgZHJvcDoKKwlrZnJlZV9za2Ioc2tiKTsKIH0KLUVYUE9SVF9TWU1CT0woX19pZWVlODAyMTFfcngpOworRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcngpOwogCiAvKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgcnggaGFuZGxlciB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSBoYXJkIGlycQogICogY29udGV4dC4gUG9zdCB0aGUgc2tiIG9uIHRoZSBxdWV1ZSBhbmQgc2NoZWR1bGUgdGhlIHRhc2tsZXQgKi8KLXZvaWQgaWVlZTgwMjExX3J4X2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpCit2b2lkIGllZWU4MDIxMV9yeF9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCiAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykgPiBzaXplb2Yoc2tiLT5jYikpOwogCi0Jc2tiLT5kZXYgPSBsb2NhbC0+bWRldjsKLQkvKiBjb3B5IHN0YXR1cyBpbnRvIHNrYi0+Y2IgZm9yIHVzZSBieSB0YXNrbGV0ICovCi0JbWVtY3B5KHNrYi0+Y2IsIHN0YXR1cywgc2l6ZW9mKCpzdGF0dXMpKTsKIAlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX1JYX01TRzsKIAlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKIAl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uYwppbmRleCAyYThkMDlhLi4wMzk5MDExIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc2Nhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKICNpbmNsdWRlICJkcml2ZXItb3BzLmgiCkBAIC0yNiw3ICsyNSw3IEBACiAKICNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0RFTEFZIChIWiAvIDMzKQogI2RlZmluZSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FIChIWiAvIDMzKQotI2RlZmluZSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUUgKEhaIC8gNSkKKyNkZWZpbmUgSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FIChIWiAvIDgpCiAKIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKIGllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLApAQCAtMTIxLDIzICsxMjAsMTAgQEAKIAlyZXR1cm4gYnNzOwogfQogCi12b2lkIGllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqYnNzaWQsCi0JCQkgICAgIGludCBmcmVxLCB1OCAqc3NpZCwgdTggc3NpZF9sZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQotCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBic3NpZCwgZnJlcSwgc3NpZCwgc3NpZF9sZW4pOwotCWlmIChic3MpIHsKLQkJY2ZnODAyMTFfdW5saW5rX2Jzcyhsb2NhbC0+aHcud2lwaHksICh2b2lkICopYnNzKTsKLQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JfQotfQotCiBpZWVlODAyMTFfcnhfcmVzdWx0Ci1pZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoraWVlZTgwMjExX3NjYW5fcngoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCXU4ICplbGVtZW50czsKQEAgLTI3OCw3ICsyNjQsNyBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPnNjYW5fbXR4KTsKIAotCWlmIChXQVJOX09OKCFsb2NhbC0+aHdfc2Nhbm5pbmcgJiYgIWxvY2FsLT5zd19zY2FubmluZykpIHsKKwlpZiAoV0FSTl9PTighbG9jYWwtPnNjYW5uaW5nKSkgewogCQltdXRleF91bmxvY2soJmxvY2FsLT5zY2FuX210eCk7CiAJCXJldHVybjsKIAl9CkBAIC0yODgsMTYgKzI3NCwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGxvY2FsLT5od19zY2FubmluZykKKwlpZiAodGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykpCiAJCWllZWU4MDIxMV9yZXN0b3JlX3NjYW5faWVzKGxvY2FsKTsKIAotCWlmIChsb2NhbC0+c2Nhbl9yZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEpCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAhPSBsb2NhbC0+aW50X3NjYW5fcmVxKQogCQljZmc4MDIxMV9zY2FuX2RvbmUobG9jYWwtPnNjYW5fcmVxLCBhYm9ydGVkKTsKIAlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOworCWxvY2FsLT5zY2FuX3NkYXRhID0gTlVMTDsKIAotCXdhc19od19zY2FuID0gbG9jYWwtPmh3X3NjYW5uaW5nOwotCWxvY2FsLT5od19zY2FubmluZyA9IGZhbHNlOwotCWxvY2FsLT5zd19zY2FubmluZyA9IGZhbHNlOworCXdhc19od19zY2FuID0gdGVzdF9iaXQoU0NBTl9IV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZyk7CisJbG9jYWwtPnNjYW5uaW5nID0gMDsKIAlsb2NhbC0+c2Nhbl9jaGFubmVsID0gTlVMTDsKIAogCS8qIHdlIG9ubHkgaGF2ZSB0byBwcm90ZWN0IHNjYW5fcmVxIGFuZCBody9zdyBzY2FuICovCkBAIC0zMDcsMTYgKzI5Myw3IEBACiAJaWYgKHdhc19od19zY2FuKQogCQlnb3RvIGRvbmU7CiAKLQluZXRpZl90eF9sb2NrX2JoKGxvY2FsLT5tZGV2KTsKLQluZXRpZl9hZGRyX2xvY2sobG9jYWwtPm1kZXYpOwotCWxvY2FsLT5maWx0ZXJfZmxhZ3MgJj0gfkZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDOwotCWRydl9jb25maWd1cmVfZmlsdGVyKGxvY2FsLCBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQywKLQkJCSAgICAgJmxvY2FsLT5maWx0ZXJfZmxhZ3MsCi0JCQkgICAgIGxvY2FsLT5tZGV2LT5tY19jb3VudCwKLQkJCSAgICAgbG9jYWwtPm1kZXYtPm1jX2xpc3QpOwotCi0JbmV0aWZfYWRkcl91bmxvY2sobG9jYWwtPm1kZXYpOwotCW5ldGlmX3R4X3VubG9ja19iaChsb2NhbC0+bWRldik7CisJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCiAJZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwogCkBAIC0zMjcsNyArMzA0LDcgQEAKIAogCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpIHsKIAkJCQlpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHNkYXRhKTsKIAkJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJCQl9CkBAIC0zODIsMzAgKzM1OSwyNCBAQAogCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCiAJCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCWlmIChzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpIHsKLQkJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JCQkJaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHNkYXRhKTsKLQkJCX0KLQkJfSBlbHNlCisJCS8qCisJCSAqIG9ubHkgaGFuZGxlIG5vbi1TVEEgaW50ZXJmYWNlcyBoZXJlLCBTVEEgaW50ZXJmYWNlcworCQkgKiBhcmUgaGFuZGxlZCBpbiB0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lCisJCSAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJfQogCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCi0JbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOworCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0RFQ0lTSU9OOwogCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID0gMDsKIAotCW5ldGlmX2FkZHJfbG9ja19iaChsb2NhbC0+bWRldik7Ci0JbG9jYWwtPmZpbHRlcl9mbGFncyB8PSBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQzsKLQlkcnZfY29uZmlndXJlX2ZpbHRlcihsb2NhbCwgRklGX0JDTl9QUkJSRVNQX1BST01JU0MsCi0JCQkgICAgICZsb2NhbC0+ZmlsdGVyX2ZsYWdzLAotCQkJICAgICBsb2NhbC0+bWRldi0+bWNfY291bnQsCi0JCQkgICAgIGxvY2FsLT5tZGV2LT5tY19saXN0KTsKLQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CisJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCiAJLyogVE9ETzogc3RhcnQgc2NhbiBhcyBzb29uIGFzIGFsbCBudWxsZnVuYyBmcmFtZXMgYXJlIEFDS2VkICovCi0JcXVldWVfZGVsYXllZF93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZsb2NhbC0+c2Nhbl93b3JrLAotCQkJICAgSUVFRTgwMjExX0NIQU5ORUxfVElNRSk7CisJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LAorCQkJCSAgICAgJmxvY2FsLT5zY2FuX3dvcmssCisJCQkJICAgICBJRUVFODAyMTFfQ0hBTk5FTF9USU1FKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQxLDIwICs0MTIsMTggQEAKIAlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAJbG9jYWwtPnNjYW5fc2RhdGEgPSBzZGF0YTsKIAotCWlmIChyZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEgJiYKKwlpZiAocmVxICE9IGxvY2FsLT5pbnRfc2Nhbl9yZXEgJiYKIAkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgKGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFIHx8Ci0JICAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAotCSAgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpKSB7Ci0JCS8qIGFjdHVhbGx5IHdhaXQgZm9yIHRoZSBhc3NvYyB0byBmaW5pc2gvdGltZSBvdXQgKi8KKwkgICAgIWxpc3RfZW1wdHkoJmlmbWdkLT53b3JrX2xpc3QpKSB7CisJCS8qIGFjdHVhbGx5IHdhaXQgZm9yIHRoZSB3b3JrIGl0J3MgZG9pbmcgdG8gZmluaXNoL3RpbWUgb3V0ICovCiAJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKGxvY2FsLT5vcHMtPmh3X3NjYW4pCi0JCWxvY2FsLT5od19zY2FubmluZyA9IHRydWU7CisJCV9fc2V0X2JpdChTQ0FOX0hXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKTsKIAllbHNlCi0JCWxvY2FsLT5zd19zY2FubmluZyA9IHRydWU7CisJCV9fc2V0X2JpdChTQ0FOX1NXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKTsKIAkvKgogCSAqIEtpY2tpbmcgb2ZmIHRoZSBzY2FuIG5lZWQgbm90IGJlIHByb3RlY3RlZCwKIAkgKiBvbmx5IHRoZSBzY2FuIHZhcmlhYmxlIHN0dWZmLCBzaW5jZSBub3cKQEAgLTQ3NywxMSArNDQ2LDkgQEAKIAltdXRleF9sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwogCiAJaWYgKHJjKSB7Ci0JCWlmIChsb2NhbC0+b3BzLT5od19zY2FuKSB7Ci0JCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSBmYWxzZTsKKwkJaWYgKGxvY2FsLT5vcHMtPmh3X3NjYW4pCiAJCQlpZWVlODAyMTFfcmVzdG9yZV9zY2FuX2llcyhsb2NhbCk7Ci0JCX0gZWxzZQotCQkJbG9jYWwtPnN3X3NjYW5uaW5nID0gZmFsc2U7CisJCWxvY2FsLT5zY2FubmluZyA9IDA7CiAKIAkJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKIApAQCAtNDkyLDEzICs0NTksMTk1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9zY2FuX3N0YXRlX2RlY2lzaW9uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKK3sKKwlib29sIGFzc29jaWF0ZWQgPSBmYWxzZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCS8qIGlmIG5vIG1vcmUgYmFuZHMvY2hhbm5lbHMgbGVmdCwgY29tcGxldGUgc2NhbiBhbmQgYWR2YW5jZSB0byB0aGUgaWRsZSBzdGF0ZSAqLworCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBsb2NhbC0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpIHsKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKCZsb2NhbC0+aHcsIGZhbHNlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogY2hlY2sgaWYgYXQgbGVhc3Qgb25lIFNUQSBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCAqLworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpIHsKKwkJCQlhc3NvY2lhdGVkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsKSB7CisJCS8qCisJCSAqIHdlJ3JlIGN1cnJlbnRseSBzY2FubmluZyBhIGRpZmZlcmVudCBjaGFubmVsLCBsZXQncworCQkgKiBzd2l0Y2ggYmFjayB0byB0aGUgb3BlcmF0aW5nIGNoYW5uZWwgbm93IGlmIGF0IGxlYXN0CisJCSAqIG9uZSBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZC4gT3RoZXJ3aXNlIGp1c3Qgc2NhbiB0aGUKKwkJICogbmV4dCBjaGFubmVsCisJCSAqLworCQlpZiAoYXNzb2NpYXRlZCkKKwkJCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0VOVEVSX09QRVJfQ0hBTk5FTDsKKwkJZWxzZQorCQkJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogd2UncmUgb24gdGhlIG9wZXJhdGluZyBjaGFubmVsIGN1cnJlbnRseSwgbGV0J3MKKwkJICogbGVhdmUgdGhhdCBjaGFubmVsIG5vdyB0byBzY2FuIGFub3RoZXIgb25lCisJCSAqLworCQlsb2NhbC0+bmV4dF9zY2FuX3N0YXRlID0gU0NBTl9MRUFWRV9PUEVSX0NIQU5ORUw7CisJfQorCisJKm5leHRfZGVsYXkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9sZWF2ZV9vcGVyX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCS8qCisJICogbm90aWZ5IHRoZSBBUCBhYm91dCB1cyBsZWF2aW5nIHRoZSBjaGFubmVsIGFuZCBzdG9wIGFsbCBTVEEgaW50ZXJmYWNlcworCSAqLworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCisJCQkJaWVlZTgwMjExX3NjYW5fcHNfZW5hYmxlKHNkYXRhKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCV9fc2V0X2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmbG9jYWwtPnNjYW5uaW5nKTsKKworCS8qIGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhbm5lbCB0byBiZSBzY2FubmVkICovCisJKm5leHRfZGVsYXkgPSBIWiAvIDEwOworCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9lbnRlcl9vcGVyX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqbmV4dF9kZWxheSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOworCisJLyogc3dpdGNoIGJhY2sgdG8gdGhlIG9wZXJhdGluZyBjaGFubmVsICovCisJbG9jYWwtPnNjYW5fY2hhbm5lbCA9IE5VTEw7CisJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpOworCisJLyoKKwkgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGJlaW5nIGJhY2sgYW5kIHJlc3RhcnQgYWxsIFNUQSBpbnRlcmZhY2VzCisJICovCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCQljb250aW51ZTsKKworCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCisJCQkJaWVlZTgwMjExX3NjYW5fcHNfZGlzYWJsZShzZGF0YSk7CisJCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisKKwlfX2NsZWFyX2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmbG9jYWwtPnNjYW5uaW5nKTsKKworCSpuZXh0X2RlbGF5ID0gSFogLyA1OworCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0RFQ0lTSU9OOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9zdGF0ZV9zZXRfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nICpuZXh0X2RlbGF5KQoreworCWludCBza2lwOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOworCisJc2tpcCA9IDA7CisJY2hhbiA9IGxvY2FsLT5zY2FuX3JlcS0+Y2hhbm5lbHNbbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHhdOworCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgfHwKKwkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCSAgICAgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkKKwkJc2tpcCA9IDE7CisKKwlpZiAoIXNraXApIHsKKwkJbG9jYWwtPnNjYW5fY2hhbm5lbCA9IGNoYW47CisJCWlmIChpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpCisJCQlza2lwID0gMTsKKwl9CisKKwkvKiBhZHZhbmNlIHN0YXRlIG1hY2hpbmUgdG8gbmV4dCBjaGFubmVsL2JhbmQgKi8KKwlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCsrOworCisJaWYgKHNraXApIHsKKwkJLyogaWYgd2Ugc2tpcCB0aGlzIGNoYW5uZWwgcmV0dXJuIHRvIHRoZSBkZWNpc2lvbiBzdGF0ZSAqLworCQlsb2NhbC0+bmV4dF9zY2FuX3N0YXRlID0gU0NBTl9ERUNJU0lPTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUHJvYmUgZGVsYXkgaXMgdXNlZCB0byB1cGRhdGUgdGhlIE5BViwgY2YuIDExLjEuMy4yLjIKKwkgKiAod2hpY2ggdW5mb3J0dW5hdGVseSBkb2Vzbid0IHNheSBfd2h5XyBzdGVwIGEpIGlzIGRvbmUsCisJICogYnV0IGl0IHdhaXRzIGZvciB0aGUgcHJvYmUgZGVsYXkgb3IgdW50aWwgYSBmcmFtZSBpcworCSAqIHJlY2VpdmVkIC0gYW5kIHRoZSByZWNlaXZlZCBmcmFtZSB3b3VsZCB1cGRhdGUgdGhlIE5BVikuCisJICogRm9yIG5vdywgd2UgZG8gbm90IHN1cHBvcnQgd2FpdGluZyB1bnRpbCBhIGZyYW1lIGlzCisJICogcmVjZWl2ZWQuCisJICoKKwkgKiBJbiBhbnkgY2FzZSwgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgYSBwYXNzaXZlIHNjYW4uCisJICovCisJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOIHx8CisJICAgICFsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHMpIHsKKwkJKm5leHRfZGVsYXkgPSBJRUVFODAyMTFfUEFTU0lWRV9DSEFOTkVMX1RJTUU7CisJCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0RFQ0lTSU9OOworCQlyZXR1cm47CisJfQorCisJLyogYWN0aXZlIHNjYW4sIHNlbmQgcHJvYmVzICovCisJKm5leHRfZGVsYXkgPSBJRUVFODAyMTFfUFJPQkVfREVMQVk7CisJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fU0VORF9QUk9CRTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3NjYW5fc3RhdGVfc2VuZF9wcm9iZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKm5leHRfZGVsYXkpCit7CisJaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBsb2NhbC0+c2Nhbl9yZXEtPm5fc3NpZHM7IGkrKykKKwkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKAorCQkJc2RhdGEsIE5VTEwsCisJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWQsCisJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWRfbGVuLAorCQkJbG9jYWwtPnNjYW5fcmVxLT5pZSwgbG9jYWwtPnNjYW5fcmVxLT5pZV9sZW4pOworCisJLyoKKwkgKiBBZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3RzLCB3YWl0IGZvciBwcm9iZSByZXNwb25zZXMKKwkgKiBvbiB0aGUgY2hhbm5lbC4KKwkgKi8KKwkqbmV4dF9kZWxheSA9IElFRUU4MDIxMV9DSEFOTkVMX1RJTUU7CisJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fREVDSVNJT047Cit9CisKIHZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgc2Nhbl93b3JrLndvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCWludCBza2lwLCBpOwogCXVuc2lnbmVkIGxvbmcgbmV4dF9kZWxheSA9IDA7CiAKIAltdXRleF9sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwpAQCAtNTA3LDExICs2NTYsMTIgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgIShsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKSkgeworCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgIWxvY2FsLT5zY2FubmluZykgewogCQlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEgPSBsb2NhbC0+c2Nhbl9yZXE7CiAJCWludCByYzsKIAogCQlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOworCQlsb2NhbC0+c2Nhbl9zZGF0YSA9IE5VTEw7CiAKIAkJcmMgPSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCByZXEpOwogCQltdXRleF91bmxvY2soJmxvY2FsLT5zY2FuX210eCk7CkBAIC01MzEsNzIgKzY4MSwzMiBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChsb2NhbC0+c2Nhbl9zdGF0ZSkgewotCWNhc2UgU0NBTl9TRVRfQ0hBTk5FTDoKLQkJLyogaWYgbm8gbW9yZSBiYW5kcy9jaGFubmVscyBsZWZ0LCBjb21wbGV0ZSBzY2FuICovCi0JCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBsb2NhbC0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpIHsKLQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3LCBmYWxzZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc2tpcCA9IDA7Ci0JCWNoYW4gPSBsb2NhbC0+c2Nhbl9yZXEtPmNoYW5uZWxzW2xvY2FsLT5zY2FuX2NoYW5uZWxfaWR4XTsKLQotCQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCB8fAotCQkgICAgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCQkgICAgIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSUJTUykpCi0JCQlza2lwID0gMTsKLQotCQlpZiAoIXNraXApIHsKLQkJCWxvY2FsLT5zY2FuX2NoYW5uZWwgPSBjaGFuOwotCQkJaWYgKGllZWU4MDIxMV9od19jb25maWcobG9jYWwsCi0JCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpCi0JCQkJc2tpcCA9IDE7Ci0JCX0KLQotCQkvKiBhZHZhbmNlIHN0YXRlIG1hY2hpbmUgdG8gbmV4dCBjaGFubmVsL2JhbmQgKi8KLQkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHgrKzsKLQotCQlpZiAoc2tpcCkKKwkvKgorCSAqIGFzIGxvbmcgYXMgbm8gZGVsYXkgaXMgcmVxdWlyZWQgYWR2YW5jZSBpbW1lZGlhdGVseQorCSAqIHdpdGhvdXQgc2NoZWR1bGluZyBhIG5ldyB3b3JrCisJICovCisJZG8geworCQlzd2l0Y2ggKGxvY2FsLT5uZXh0X3NjYW5fc3RhdGUpIHsKKwkJY2FzZSBTQ0FOX0RFQ0lTSU9OOgorCQkJaWYgKGllZWU4MDIxMV9zY2FuX3N0YXRlX2RlY2lzaW9uKGxvY2FsLCAmbmV4dF9kZWxheSkpCisJCQkJcmV0dXJuOwogCQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogUHJvYmUgZGVsYXkgaXMgdXNlZCB0byB1cGRhdGUgdGhlIE5BViwgY2YuIDExLjEuMy4yLjIKLQkJICogKHdoaWNoIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzYXkgX3doeV8gc3RlcCBhKSBpcyBkb25lLAotCQkgKiBidXQgaXQgd2FpdHMgZm9yIHRoZSBwcm9iZSBkZWxheSBvciB1bnRpbCBhIGZyYW1lIGlzCi0JCSAqIHJlY2VpdmVkIC0gYW5kIHRoZSByZWNlaXZlZCBmcmFtZSB3b3VsZCB1cGRhdGUgdGhlIE5BVikuCi0JCSAqIEZvciBub3csIHdlIGRvIG5vdCBzdXBwb3J0IHdhaXRpbmcgdW50aWwgYSBmcmFtZSBpcwotCQkgKiByZWNlaXZlZC4KLQkJICoKLQkJICogSW4gYW55IGNhc2UsIGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIGEgcGFzc2l2ZSBzY2FuLgotCQkgKi8KLQkJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOIHx8Ci0JCSAgICAhbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzKSB7Ci0JCQluZXh0X2RlbGF5ID0gSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FOworCQljYXNlIFNDQU5fU0VUX0NIQU5ORUw6CisJCQlpZWVlODAyMTFfc2Nhbl9zdGF0ZV9zZXRfY2hhbm5lbChsb2NhbCwgJm5leHRfZGVsYXkpOworCQkJYnJlYWs7CisJCWNhc2UgU0NBTl9TRU5EX1BST0JFOgorCQkJaWVlZTgwMjExX3NjYW5fc3RhdGVfc2VuZF9wcm9iZShsb2NhbCwgJm5leHRfZGVsYXkpOworCQkJYnJlYWs7CisJCWNhc2UgU0NBTl9MRUFWRV9PUEVSX0NIQU5ORUw6CisJCQlpZWVlODAyMTFfc2Nhbl9zdGF0ZV9sZWF2ZV9vcGVyX2NoYW5uZWwobG9jYWwsICZuZXh0X2RlbGF5KTsKKwkJCWJyZWFrOworCQljYXNlIFNDQU5fRU5URVJfT1BFUl9DSEFOTkVMOgorCQkJaWVlZTgwMjExX3NjYW5fc3RhdGVfZW50ZXJfb3Blcl9jaGFubmVsKGxvY2FsLCAmbmV4dF9kZWxheSk7CiAJCQlicmVhazsKIAkJfQorCX0gd2hpbGUgKG5leHRfZGVsYXkgPT0gMCk7CiAKLQkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9QUk9CRV9ERUxBWTsKLQkJbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFTkRfUFJPQkU7Ci0JCWJyZWFrOwotCWNhc2UgU0NBTl9TRU5EX1BST0JFOgotCQlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzOyBpKyspCi0JCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoCi0JCQkJc2RhdGEsIE5VTEwsCi0JCQkJbG9jYWwtPnNjYW5fcmVxLT5zc2lkc1tpXS5zc2lkLAotCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZF9sZW4sCi0JCQkJbG9jYWwtPnNjYW5fcmVxLT5pZSwgbG9jYWwtPnNjYW5fcmVxLT5pZV9sZW4pOwotCi0JCS8qCi0JCSAqIEFmdGVyIHNlbmRpbmcgcHJvYmUgcmVxdWVzdHMsIHdhaXQgZm9yIHByb2JlIHJlc3BvbnNlcwotCQkgKiBvbiB0aGUgY2hhbm5lbC4KLQkJICovCi0JCW5leHRfZGVsYXkgPSBJRUVFODAyMTFfQ0hBTk5FTF9USU1FOwotCQlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7Ci0JCWJyZWFrOwotCX0KLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPnNjYW5fd29yaywKLQkJCSAgIG5leHRfZGVsYXkpOworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT5zY2FuX3dvcmssIG5leHRfZGVsYXkpOwogfQogCiBpbnQgaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTYyMywxMCArNzMzLDEwIEBACiAJaWYgKGxvY2FsLT5zY2FuX3JlcSkKIAkJZ290byB1bmxvY2s7CiAKLQltZW1jcHkobG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLCBzc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKLQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gc3NpZF9sZW47CisJbWVtY3B5KGxvY2FsLT5pbnRfc2Nhbl9yZXEtPnNzaWRzWzBdLnNzaWQsIHNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCWxvY2FsLT5pbnRfc2Nhbl9yZXEtPnNzaWRzWzBdLnNzaWRfbGVuID0gc3NpZF9sZW47CiAKLQlyZXQgPSBfX2llZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCAmc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEpOworCXJldCA9IF9faWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIHNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxKTsKICB1bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwogCXJldHVybiByZXQ7CkBAIC02MzQsNyArNzQ0LDcgQEAKIAogdm9pZCBpZWVlODAyMTFfc2Nhbl9jYW5jZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0JYm9vbCBzd3NjYW47CisJYm9vbCBhYm9ydHNjYW47CiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmxvY2FsLT5zY2FuX3dvcmspOwogCkBAIC02NDMsOSArNzUzLDEwIEBACiAJICogcXVldWVkIC0tIG1vc3RseSBhdCBzdXNwZW5kIHVuZGVyIFJUTkwuCiAJICovCiAJbXV0ZXhfbG9jaygmbG9jYWwtPnNjYW5fbXR4KTsKLQlzd3NjYW4gPSBsb2NhbC0+c3dfc2Nhbm5pbmc7CisJYWJvcnRzY2FuID0gdGVzdF9iaXQoU0NBTl9TV19TQ0FOTklORywgJmxvY2FsLT5zY2FubmluZykgfHwKKwkJICAgICghbG9jYWwtPnNjYW5uaW5nICYmIGxvY2FsLT5zY2FuX3JlcSk7CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c2Nhbl9tdHgpOwogCi0JaWYgKHN3c2NhbikKKwlpZiAoYWJvcnRzY2FuKQogCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odywgdHJ1ZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uYyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCmluZGV4IGEzNjBiY2UuLmVlYzAwMTQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jCkBAIC0zNDksNiArMzQ5LDcgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAJbGlzdF9hZGQoJnN0YS0+bGlzdCwgJmxvY2FsLT5zdGFfbGlzdCk7CisJbG9jYWwtPnN0YV9nZW5lcmF0aW9uKys7CiAJbG9jYWwtPm51bV9zdGErKzsKIAlzdGFfaW5mb19oYXNoX2FkZChsb2NhbCwgc3RhKTsKIApAQCAtNDg1LDYgKzQ4Niw3IEBACiAJfQogCiAJbG9jYWwtPm51bV9zdGEtLTsKKwlsb2NhbC0+c3RhX2dlbmVyYXRpb24rKzsKIAogCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKaW5kZXggNDlhMWExZi4uY2NjM2FkZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmgKQEAgLTMwLDcgKzMwLDYgQEAKICAqIEBXTEFOX1NUQV9BU1NPQ19BUDogV2UncmUgYXNzb2NpYXRlZCB0byB0aGF0IHN0YXRpb24sIGl0IGlzIGFuIEFQLgogICogQFdMQU5fU1RBX1dNRTogU3RhdGlvbiBpcyBhIFFvUy1TVEEuCiAgKiBAV0xBTl9TVEFfV0RTOiBTdGF0aW9uIGlzIG9uZSBvZiBvdXIgV0RTIHBlZXJzLgotICogQFdMQU5fU1RBX1BTUE9MTDogU3RhdGlvbiBoYXMganVzdCBQUy1wb2xsZWQgdXMuCiAgKiBAV0xBTl9TVEFfQ0xFQVJfUFNfRklMVDogQ2xlYXIgUFMgZmlsdGVyIGluIGhhcmR3YXJlICh1c2luZyB0aGUKICAqCUlFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCBjb250cm9sIGZsYWcpIHdoZW4gdGhlIG5leHQKICAqCWZyYW1lIHRvIHRoaXMgc3RhdGlvbiBpcyB0cmFuc21pdHRlZC4KQEAgLTQ3LDcgKzQ2LDYgQEAKIAlXTEFOX1NUQV9BU1NPQ19BUAk9IDE8PDUsCiAJV0xBTl9TVEFfV01FCQk9IDE8PDYsCiAJV0xBTl9TVEFfV0RTCQk9IDE8PDcsCi0JV0xBTl9TVEFfUFNQT0xMCQk9IDE8PDgsCiAJV0xBTl9TVEFfQ0xFQVJfUFNfRklMVAk9IDE8PDksCiAJV0xBTl9TVEFfTUZQCQk9IDE8PDEwLAogCVdMQU5fU1RBX1NVU1BFTkQJPSAxPDwxMQpAQCAtMzA4LDYgKzMwNiwyMyBAQAogCQlzdHJ1Y3QgZGVudHJ5ICppbmFjdGl2ZV9tczsKIAkJc3RydWN0IGRlbnRyeSAqbGFzdF9zZXFfY3RybDsKIAkJc3RydWN0IGRlbnRyeSAqYWdnX3N0YXR1czsKKwkJc3RydWN0IGRlbnRyeSAqYWlkOworCQlzdHJ1Y3QgZGVudHJ5ICpkZXY7CisJCXN0cnVjdCBkZW50cnkgKnJ4X3BhY2tldHM7CisJCXN0cnVjdCBkZW50cnkgKnR4X3BhY2tldHM7CisJCXN0cnVjdCBkZW50cnkgKnJ4X2J5dGVzOworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9ieXRlczsKKwkJc3RydWN0IGRlbnRyeSAqcnhfZHVwbGljYXRlczsKKwkJc3RydWN0IGRlbnRyeSAqcnhfZnJhZ21lbnRzOworCQlzdHJ1Y3QgZGVudHJ5ICpyeF9kcm9wcGVkOworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9mcmFnbWVudHM7CisJCXN0cnVjdCBkZW50cnkgKnR4X2ZpbHRlcmVkOworCQlzdHJ1Y3QgZGVudHJ5ICp0eF9yZXRyeV9mYWlsZWQ7CisJCXN0cnVjdCBkZW50cnkgKnR4X3JldHJ5X2NvdW50OworCQlzdHJ1Y3QgZGVudHJ5ICpsYXN0X3NpZ25hbDsKKwkJc3RydWN0IGRlbnRyeSAqbGFzdF9xdWFsOworCQlzdHJ1Y3QgZGVudHJ5ICpsYXN0X25vaXNlOworCQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfd2Vha19pdl9jb3VudDsKIAkJYm9vbCBhZGRfaGFzX3J1bjsKIAl9IGRlYnVnZnM7CiAjZW5kaWYKQEAgLTM0MiwxNyArMzU3LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmZsYWdsb2NrLCBpcnFmbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYW5kX2NsZWFyX3N0YV9mbGFncyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKLQkJCQkJICAgY29uc3QgdTMyIHNldCwgY29uc3QgdTMyIGNsZWFyKQotewotCXVuc2lnbmVkIGxvbmcgaXJxZmw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT5mbGFnbG9jaywgaXJxZmwpOwotCXN0YS0+ZmxhZ3MgfD0gc2V0OwotCXN0YS0+ZmxhZ3MgJj0gfmNsZWFyOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YS0+ZmxhZ2xvY2ssIGlycWZsKTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgdGVzdF9zdGFfZmxhZ3Moc3RydWN0IHN0YV9pbmZvICpzdGEsIGNvbnN0IHUzMiBmbGFncykKIHsKIAl1MzIgcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCAzYTg5MjJjLi41MTQzZDIwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJaWYgKHVubGlrZWx5KGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCWlmICh1bmxpa2VseSh0eC0+bG9jYWwtPnN3X3NjYW5uaW5nKSAmJgorCWlmICh1bmxpa2VseSh0ZXN0X2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmdHgtPmxvY2FsLT5zY2FubmluZykpICYmCiAJICAgICFpZWVlODAyMTFfaXNfcHJvYmVfcmVxKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKIAkgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpKQogCQkvKgpAQCAtMzE3LDMwICszMTcsMzAgQEAKIAlpZiAoIWF0b21pY19yZWFkKCZ0eC0+c2RhdGEtPmJzcy0+bnVtX3N0YV9wcykpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAotCS8qIGJ1ZmZlcmVkIGluIG1hYzgwMjExICovCi0JaWYgKHR4LT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HKSB7Ci0JCWlmICh0eC0+bG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkID49IFRPVEFMX01BWF9UWF9CVUZGRVIpCi0JCQlwdXJnZV9vbGRfcHNfYnVmZmVycyh0eC0+bG9jYWwpOwotCQlpZiAoc2tiX3F1ZXVlX2xlbigmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikgPj0KLQkJICAgIEFQX01BWF9CQ19CVUZGRVIpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQkMgVFggYnVmZmVyIGZ1bGwgLSAiCi0JCQkJICAgICAgICJkcm9wcGluZyB0aGUgb2xkZXN0IGZyYW1lXG4iLAotCQkJCSAgICAgICB0eC0+ZGV2LT5uYW1lKTsKLQkJCX0KLSNlbmRpZgotCQkJZGV2X2tmcmVlX3NrYihza2JfZGVxdWV1ZSgmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikpOwotCQl9IGVsc2UKLQkJCXR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQrKzsKLQkJc2tiX3F1ZXVlX3RhaWwoJnR4LT5zZGF0YS0+YnNzLT5wc19iY19idWYsIHR4LT5za2IpOwotCQlyZXR1cm4gVFhfUVVFVUVEOworCS8qIGJ1ZmZlcmVkIGluIGhhcmR3YXJlICovCisJaWYgKCEodHgtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcpKSB7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNOworCisJCXJldHVybiBUWF9DT05USU5VRTsKIAl9CiAKLQkvKiBidWZmZXJlZCBpbiBoYXJkd2FyZSAqLwotCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNOworCS8qIGJ1ZmZlcmVkIGluIG1hYzgwMjExICovCisJaWYgKHR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQgPj0gVE9UQUxfTUFYX1RYX0JVRkZFUikKKwkJcHVyZ2Vfb2xkX3BzX2J1ZmZlcnModHgtPmxvY2FsKTsKIAotCXJldHVybiBUWF9DT05USU5VRTsKKwlpZiAoc2tiX3F1ZXVlX2xlbigmdHgtPnNkYXRhLT5ic3MtPnBzX2JjX2J1ZikgPj0gQVBfTUFYX0JDX0JVRkZFUikgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEJDIFRYIGJ1ZmZlciBmdWxsIC0gZHJvcHBpbmcgdGhlIG9sZGVzdCBmcmFtZVxuIiwKKwkJCSAgICAgICB0eC0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlkZXZfa2ZyZWVfc2tiKHNrYl9kZXF1ZXVlKCZ0eC0+c2RhdGEtPmJzcy0+cHNfYmNfYnVmKSk7CisJfSBlbHNlCisJCXR4LT5sb2NhbC0+dG90YWxfcHNfYnVmZmVyZWQrKzsKKworCXNrYl9xdWV1ZV90YWlsKCZ0eC0+c2RhdGEtPmJzcy0+cHNfYmNfYnVmLCB0eC0+c2tiKTsKKworCXJldHVybiBUWF9RVUVVRUQ7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX3VzZV9tZnAoX19sZTE2IGZjLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKQEAgLTM3Myw3ICszNzMsNyBAQAogCXN0YWZsYWdzID0gZ2V0X3N0YV9mbGFncyhzdGEpOwogCiAJaWYgKHVubGlrZWx5KChzdGFmbGFncyAmIFdMQU5fU1RBX1BTKSAmJgotCQkgICAgICEoc3RhZmxhZ3MgJiBXTEFOX1NUQV9QU1BPTEwpKSkgeworCQkgICAgICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1BTUE9MTF9SRVNQT05TRSkpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlNUQSAlcE0gYWlkICVkOiBQUyBidWZmZXIgKGVudHJpZXMgIgogCQkgICAgICAgImJlZm9yZSAlZClcbiIsCkBAIC00MDAsNiArNDAwLDcgQEAKIAkJCXN0YV9pbmZvX3NldF90aW1fYml0KHN0YSk7CiAKIAkJaW5mby0+Y29udHJvbC5qaWZmaWVzID0gamlmZmllczsKKwkJaW5mby0+Y29udHJvbC52aWYgPSAmdHgtPnNkYXRhLT52aWY7CiAJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzsKIAkJc2tiX3F1ZXVlX3RhaWwoJnN0YS0+cHNfdHhfYnVmLCB0eC0+c2tiKTsKIAkJcmV0dXJuIFRYX1FVRVVFRDsKQEAgLTQxMSwyNCArNDEyLDcgQEAKIAkJICAgICAgIHN0YS0+c3RhLmFkZHIpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwotCWlmICh0ZXN0X2FuZF9jbGVhcl9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9QU1BPTEwpKSB7Ci0JCS8qCi0JCSAqIFRoZSBzbGVlcGluZyBzdGF0aW9uIHdpdGggcGVuZGluZyBkYXRhIGlzIG5vdyBzbm9vemluZy4KLQkJICogSXQgcXVlcmllZCB1cyBmb3IgaXRzIGJ1ZmZlcmVkIGZyYW1lcyBhbmQgd2lsbCBnbyBiYWNrCi0JCSAqIHRvIGRlZXAgc2xlZXAgb25jZSBpdCBnb3QgZXZlcnl0aGluZy4KLQkJICoKLQkJICogaW5mb3JtIHRoZSBkcml2ZXIsIGluIGNhc2UgdGhlIGhhcmR3YXJlIGRvZXMgcG93ZXJzYXZlCi0JCSAqIGZyYW1lIGZpbHRlcmluZyBhbmQga2VlcHMgYSBzdGF0aW9uICBibGFja2xpc3Qgb24gaXRzIG93bgotCQkgKiAoZS5nOiBwNTQpLCBzbyB0aGF0IGZyYW1lcyBjYW4gYmUgZGVsaXZlcmVkIHVuaW1wZWRlZC4KLQkJICoKLQkJICogTm90ZTogSXQgc2hvdWxkIGJlIHNhZmUgdG8gZGlzYWJsZSB0aGUgZmlsdGVyIG5vdy4KLQkJICogQXMsIGl0IGlzIHJlYWxseSB1bmxpa2VseSB0aGF0IHdlIHN0aWxsIGhhdmUgYW55IHBlbmRpbmcKLQkJICogZnJhbWUgZm9yIHRoaXMgc3RhdGlvbiBpbiB0aGUgaHcncyBidWZmZXJzL2ZpZm9zIGxlZnQsCi0JCSAqIHRoYXQgaXMgbm90IHJlamVjdGVkIHdpdGggYSB1bnN1Y2Nlc3NmdWwgdHhfc3RhdHVzIHlldC4KLQkJICovCiAKLQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9DTEVBUl9QU19GSUxUOwotCX0KIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKQEAgLTQ1MSw3ICs0MzUsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7CiAKLQlpZiAodW5saWtlbHkodHgtPnNrYi0+ZG9fbm90X2VuY3J5cHQpKQorCWlmICh1bmxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQpKQogCQl0eC0+a2V5ID0gTlVMTDsKIAllbHNlIGlmICh0eC0+c3RhICYmIChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnN0YS0+a2V5KSkpCiAJCXR4LT5rZXkgPSBrZXk7CkBAIC00OTcsNyArNDgxLDcgQEAKIAl9CiAKIAlpZiAoIXR4LT5rZXkgfHwgISh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSkKLQkJdHgtPnNrYi0+ZG9fbm90X2VuY3J5cHQgPSAxOworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtNTEyLDYgKzQ5Niw3IEBACiAJaW50IGksIGxlbjsKIAlib29sIGludmFsID0gZmFsc2UsIHJ0cyA9IGZhbHNlLCBzaG9ydF9wcmVhbWJsZSA9IGZhbHNlOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sIHR4cmM7CisJdTMyIHN0YV9mbGFnczsKIAogCW1lbXNldCgmdHhyYywgMCwgc2l6ZW9mKHR4cmMpKTsKIApAQCAtNTQ0LDcgKzUyOSwyNiBAQAogCSAgICAgKHR4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3ModHgtPnN0YSwgV0xBTl9TVEFfU0hPUlRfUFJFQU1CTEUpKSkpCiAJCXR4cmMuc2hvcnRfcHJlYW1ibGUgPSBzaG9ydF9wcmVhbWJsZSA9IHRydWU7CiAKKwlzdGFfZmxhZ3MgPSB0eC0+c3RhID8gZ2V0X3N0YV9mbGFncyh0eC0+c3RhKSA6IDA7CiAKKwkvKgorCSAqIExldHMgbm90IGJvdGhlciByYXRlIGNvbnRyb2wgaWYgd2UncmUgYXNzb2NpYXRlZCBhbmQgY2Fubm90CisJICogdGFsayB0byB0aGUgc3RhLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLgorCSAqLworCWlmIChXQVJOKHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZ0eC0+bG9jYWwtPnNjYW5uaW5nKSAmJgorCQkgKHN0YV9mbGFncyAmIFdMQU5fU1RBX0FTU09DKSAmJgorCQkgIXJhdGVfdXNhYmxlX2luZGV4X2V4aXN0cyhzYmFuZCwgJnR4LT5zdGEtPnN0YSksCisJCSAiJXM6IERyb3BwZWQgZGF0YSBmcmFtZSBhcyBubyB1c2FibGUgYml0cmF0ZSBmb3VuZCB3aGlsZSAiCisJCSAic2Nhbm5pbmcgYW5kIGFzc29jaWF0ZWQuIFRhcmdldCBzdGF0aW9uOiAiCisJCSAiJXBNIG9uICVkIEdIeiBiYW5kXG4iLAorCQkgdHgtPmRldi0+bmFtZSwgaGRyLT5hZGRyMSwKKwkJIHR4LT5jaGFubmVsLT5iYW5kID8gNSA6IDIpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCS8qCisJICogSWYgd2UncmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGEgYXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGNhbiBhdAorCSAqIGxlYXN0IHNlbmQgdGhlIGZyYW1lIGF0IHRoZSBsb3dlc3QgYml0IHJhdGUuCisJICovCiAJcmF0ZV9jb250cm9sX2dldF9yYXRlKHR4LT5zZGF0YSwgdHgtPnN0YSwgJnR4cmMpOwogCiAJaWYgKHVubGlrZWx5KGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4IDwgMCkpCkBAIC02NzYsNyArNjgwLDcgQEAKIAkgKiBudW1iZXIsIGlmIHdlIGhhdmUgbm8gbWF0Y2hpbmcgaW50ZXJmYWNlIHRoZW4gd2UKIAkgKiBuZWl0aGVyIGFzc2lnbiBvbmUgb3Vyc2VsdmVzIG5vciBhc2sgdGhlIGRyaXZlciB0by4KIAkgKi8KLQlpZiAodW5saWtlbHkoIWluZm8tPmNvbnRyb2wudmlmKSkKKwlpZiAodW5saWtlbHkoaW5mby0+Y29udHJvbC52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAogCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfY3RsKGhkci0+ZnJhbWVfY29udHJvbCkpKQpAQCAtNjk2LDcgKzcwMCw2IEBACiAJCS8qIGZvciBwdXJlIFNUQSBtb2RlIHdpdGhvdXQgYmVhY29ucywgd2UgY2FuIGRvIGl0ICovCiAJCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0eC0+c2RhdGEtPnNlcXVlbmNlX251bWJlcik7CiAJCXR4LT5zZGF0YS0+c2VxdWVuY2VfbnVtYmVyICs9IDB4MTA7Ci0JCXR4LT5zZGF0YS0+c2VxdWVuY2VfbnVtYmVyICY9IElFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJcmV0dXJuIFRYX0NPTlRJTlVFOwogCX0KIApAQCAtNzU0LDkgKzc1Nyw3IEBACiAJCW1lbWNweSh0bXAtPmNiLCBza2ItPmNiLCBzaXplb2YodG1wLT5jYikpOwogCQlza2JfY29weV9xdWV1ZV9tYXBwaW5nKHRtcCwgc2tiKTsKIAkJdG1wLT5wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7Ci0JCXRtcC0+ZG9fbm90X2VuY3J5cHQgPSBza2ItPmRvX25vdF9lbmNyeXB0OwogCQl0bXAtPmRldiA9IHNrYi0+ZGV2OwotCQl0bXAtPmlpZiA9IHNrYi0+aWlmOwogCiAJCS8qIGNvcHkgaGVhZGVyIGFuZCBkYXRhICovCiAJCW1lbWNweShza2JfcHV0KHRtcCwgaGRybGVuKSwgc2tiLT5kYXRhLCBoZHJsZW4pOwpAQCAtNzg0LDcgKzc4NSw3IEBACiAKIAkvKgogCSAqIFdhcm4gd2hlbiBzdWJtaXR0aW5nIGEgZnJhZ21lbnRlZCBBLU1QRFUgZnJhbWUgYW5kIGRyb3AgaXQuCi0JICogVGhpcyBzY2VuYXJpbyBpcyBoYW5kbGVkIGluIF9faWVlZTgwMjExX3R4X3ByZXBhcmUgYnV0IGV4dHJhCisJICogVGhpcyBzY2VuYXJpbyBpcyBoYW5kbGVkIGluIGllZWU4MDIxMV90eF9wcmVwYXJlIGJ1dCBleHRyYQogCSAqIGNhdXRpb24gdGFrZW4gaGVyZSBhcyBmcmFnbWVudGVkIGFtcGR1IG1heSBjYXVzZSBUeCBzdG9wLgogCSAqLwogCWlmIChXQVJOX09OKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpCkBAIC04NDIsNiArODQzLDIzIEBACiB9CiAKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCitpZWVlODAyMTFfdHhfaF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCisJaWYgKCF0eC0+c3RhKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwl0eC0+c3RhLT50eF9wYWNrZXRzKys7CisJZG8geworCQl0eC0+c3RhLT50eF9mcmFnbWVudHMrKzsKKwkJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOworCisJcmV0dXJuIFRYX0NPTlRJTlVFOworfQorCitzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewogCWlmICghdHgtPmtleSkKQEAgLTg4NSwyMyArOTAzLDYgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLXN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCi1pZWVlODAyMTFfdHhfaF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQotewotCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwotCi0JaWYgKCF0eC0+c3RhKQotCQlyZXR1cm4gVFhfQ09OVElOVUU7Ci0KLQl0eC0+c3RhLT50eF9wYWNrZXRzKys7Ci0JZG8gewotCQl0eC0+c3RhLT50eF9mcmFnbWVudHMrKzsKLQkJdHgtPnN0YS0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwotCi0JcmV0dXJuIFRYX0NPTlRJTlVFOwotfQotCiAvKiBhY3R1YWwgdHJhbnNtaXQgcGF0aCAqLwogCiAvKgpAQCAtOTIzLDExICs5MjQsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpbnQgcmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQoJml0ZXJhdG9yLCBydGhkciwgc2tiLT5sZW4pOwogCiAJc2JhbmQgPSB0eC0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1t0eC0+Y2hhbm5lbC0+YmFuZF07CiAKLQlza2ItPmRvX25vdF9lbmNyeXB0ID0gMTsKKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCXR4LT5mbGFncyAmPSB+SUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAKIAkvKgpAQCAtOTY1LDcgKzk2Nyw3IEBACiAJCQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIEZDU19MRU4pOwogCQkJfQogCQkJaWYgKCppdGVyYXRvci50aGlzX2FyZyAmIElFRUU4MDIxMV9SQURJT1RBUF9GX1dFUCkKLQkJCQl0eC0+c2tiLT5kb19ub3RfZW5jcnlwdCA9IDA7CisJCQkJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CiAJCQlpZiAoKml0ZXJhdG9yLnRoaXNfYXJnICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRykKIAkJCQl0eC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQ7CiAJCQlicmVhazsKQEAgLTk5OCwxMyArMTAwMCwxMiBAQAogICogaW5pdGlhbGlzZXMgQHR4CiAgKi8KIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0Ci1fX2llZWU4MDIxMV90eF9wcmVwYXJlKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCi0JCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2llZWU4MDIxMV90eF9wcmVwYXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCisJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCBoZHJsZW4sIHRpZDsKIAl1OCAqcWMsICpzdGF0ZTsKQEAgLTEwMTIsOSArMTAxMyw5IEBACiAKIAltZW1zZXQodHgsIDAsIHNpemVvZigqdHgpKTsKIAl0eC0+c2tiID0gc2tiOwotCXR4LT5kZXYgPSBkZXY7IC8qIHVzZSBvcmlnaW5hbCBpbnRlcmZhY2UgKi8KKwl0eC0+ZGV2ID0gc2RhdGEtPmRldjsgLyogdXNlIG9yaWdpbmFsIGludGVyZmFjZSAqLwogCXR4LT5sb2NhbCA9IGxvY2FsOwotCXR4LT5zZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJdHgtPnNkYXRhID0gc2RhdGE7CiAJdHgtPmNoYW5uZWwgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCS8qCiAJICogU2V0IHRoaXMgZmxhZyAodXNlZCBiZWxvdyB0byBpbmRpY2F0ZSAiYXV0b21hdGljIGZyYWdtZW50YXRpb24iKSwKQEAgLTEwMjMsNyArMTAyNCw2IEBACiAJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEOwogCiAJLyogcHJvY2VzcyBhbmQgcmVtb3ZlIHRoZSBpbmplY3Rpb24gcmFkaW90YXAgaGVhZGVyICovCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCWlmICh1bmxpa2VseShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpKSB7CiAJCWlmICghX19pZWVlODAyMTFfcGFyc2VfdHhfcmFkaW90YXAodHgsIHNrYikpCiAJCQlyZXR1cm4gVFhfRFJPUDsKQEAgLTEwNzUsNiArMTA3NSw3IEBACiAJCX0gZWxzZSBpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7CiAJCQkvKiBpbiBwcm9ncmVzcyAqLwogCQkJcXVldWVkID0gdHJ1ZTsKKwkJCWluZm8tPmNvbnRyb2wudmlmID0gJnNkYXRhLT52aWY7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkc7CiAJCQlfX3NrYl9xdWV1ZV90YWlsKCZ0aWRfdHgtPnBlbmRpbmcsIHNrYik7CiAJCX0KQEAgLTExMTksNTAgKzExMjAsMjkgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKLS8qCi0gKiBOQjogQHR4IGlzIHVuaW5pdGlhbGlzZWQgd2hlbiBwYXNzZWQgaW4gaGVyZQotICovCi1zdGF0aWMgaW50IGllZWU4MDIxMV90eF9wcmVwYXJlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsCi0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHNrYi0+aWlmKTsKLQlpZiAodW5saWtlbHkoZGV2ICYmICFpc19pZWVlODAyMTFfZGV2aWNlKGxvY2FsLCBkZXYpKSkgewotCQlkZXZfcHV0KGRldik7Ci0JCWRldiA9IE5VTEw7Ci0JfQotCWlmICh1bmxpa2VseSghZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JLyoKLQkgKiBpbml0aWFsaXNlcyB0eCB3aXRoIGNvbnRyb2wKLQkgKgotCSAqIHJldHVybiB2YWx1ZSBpcyBzYWZlIHRvIGlnbm9yZSBoZXJlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbgotCSAqIGNhbiBvbmx5IGJlIGludm9rZWQgZm9yIG11bHRpY2FzdCBmcmFtZXMKLQkgKgotCSAqIFhYWDogY2xlYW4gdXAKLQkgKi8KLQlfX2llZWU4MDIxMV90eF9wcmVwYXJlKHR4LCBza2IsIGRldik7Ci0JZGV2X3B1dChkZXYpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IF9faWVlZTgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnAsCi0JCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQorCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCSAgYm9vbCB0eHBlbmRpbmcpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwLCAqbmV4dDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0LCBsZW47CiAJYm9vbCBmcmFnbSA9IGZhbHNlOwogCi0JbG9jYWwtPm1kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQogCXdoaWxlIChza2IpIHsKLQkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKCZsb2NhbC0+aHcsCi0JCQkJCSAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSkpCi0JCQlyZXR1cm4gSUVFRTgwMjExX1RYX1BFTkRJTkc7CisJCWludCBxID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCXJldCA9IElFRUU4MDIxMV9UWF9PSzsKKwkJaWYgKGxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcV0gfHwKKwkJICAgICghdHhwZW5kaW5nICYmICFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3FdKSkpCisJCQlyZXQgPSBJRUVFODAyMTFfVFhfUEVORElORzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHJldCAhPSBJRUVFODAyMTFfVFhfT0spCisJCQlyZXR1cm4gcmV0OwogCiAJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKQEAgLTExNzIsMTMgKzExNTIsMzUgQEAKIAogCQluZXh0ID0gc2tiLT5uZXh0OwogCQlsZW4gPSBza2ItPmxlbjsKKworCQlpZiAobmV4dCkKKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfTU9SRV9GUkFNRVM7CisKKwkJc2RhdGEgPSB2aWZfdG9fc2RhdGEoaW5mby0+Y29udHJvbC52aWYpOworCisJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJCWluZm8tPmNvbnRyb2wudmlmID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CisJCQlpbmZvLT5jb250cm9sLnZpZiA9ICZjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LmFwKS0+dmlmOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBrZWVwICovCisJCQlicmVhazsKKwkJfQorCiAJCXJldCA9IGRydl90eChsb2NhbCwgc2tiKTsKIAkJaWYgKFdBUk5fT04ocmV0ICE9IE5FVERFVl9UWF9PSyAmJiBza2ItPmxlbiAhPSBsZW4pKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXQgPSBORVRERVZfVFhfT0s7CiAJCX0KLQkJaWYgKHJldCAhPSBORVRERVZfVFhfT0spCisJCWlmIChyZXQgIT0gTkVUREVWX1RYX09LKSB7CisJCQlpbmZvLT5jb250cm9sLnZpZiA9ICZzZGF0YS0+dmlmOwogCQkJcmV0dXJuIElFRUU4MDIxMV9UWF9BR0FJTjsKKwkJfQorCiAJCSpza2JwID0gc2tiID0gbmV4dDsKIAkJaWVlZTgwMjExX2xlZF90eChsb2NhbCwgMSk7CiAJCWZyYWdtID0gdHJ1ZTsKQEAgLTEyMTAsOSArMTIxMiw5IEBACiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc2VxdWVuY2UpCiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQpCiAJLyogaGFuZGxlcnMgYWZ0ZXIgZnJhZ21lbnQgbXVzdCBiZSBhd2FyZSBvZiB0eCBpbmZvIGZyYWdtZW50YXRpb24hICovCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhdHMpCiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZW5jcnlwdCkKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9jYWxjdWxhdGVfZHVyYXRpb24pCi0JQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc3RhdHMpCiAjdW5kZWYgQ0FMTF9UWEgKIAogIHR4aF9kb25lOgpAQCAtMTIzNCwxMCArMTIzNiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSBib29sIHR4cGVuZGluZykKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV90eChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHR4cGVuZGluZykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDsKIAlpZWVlODAyMTFfdHhfcmVzdWx0IHJlc19wcmVwYXJlOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKQEAgLTEyNDgsOCArMTI1MCw2IEBACiAKIAlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCi0JV0FSTl9PTighdHhwZW5kaW5nICYmICFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSkpOwotCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMTApKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTI1OCw3ICsxMjU4LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAkvKiBpbml0aWFsaXNlcyB0eCAqLwotCXJlc19wcmVwYXJlID0gX19pZWVlODAyMTFfdHhfcHJlcGFyZSgmdHgsIHNrYiwgZGV2KTsKKwlyZXNfcHJlcGFyZSA9IGllZWU4MDIxMV90eF9wcmVwYXJlKHNkYXRhLCAmdHgsIHNrYik7CiAKIAlpZiAodW5saWtlbHkocmVzX3ByZXBhcmUgPT0gVFhfRFJPUCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAKIAogCXJldHJpZXMgPSAwOwogIHJldHJ5OgotCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmdHguc2tiLCB0eC5zdGEpOworCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmdHguc2tiLCB0eC5zdGEsIHR4cGVuZGluZyk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIElFRUU4MDIxMV9UWF9PSzoKIAkJYnJlYWs7CkBAIC0xMjk1LDM0ICsxMjk1LDM1IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiAKLQkJaWYgKF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpKSB7CisJCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSB8fAorCQkgICAgIXNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwtPnBlbmRpbmdbcXVldWVdKSkgeworCQkJLyoKKwkJCSAqIGlmIHF1ZXVlIGlzIHN0b3BwZWQsIHF1ZXVlIHVwIGZyYW1lcyBmb3IgbGF0ZXIKKwkJCSAqIHRyYW5zbWlzc2lvbiBmcm9tIHRoZSB0YXNrbGV0CisJCQkgKi8KIAkJCWRvIHsKIAkJCQluZXh0ID0gc2tiLT5uZXh0OwogCQkJCXNrYi0+bmV4dCA9IE5VTEw7CiAJCQkJaWYgKHVubGlrZWx5KHR4cGVuZGluZykpCi0JCQkJCXNrYl9xdWV1ZV9oZWFkKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sCi0JCQkJCQkgICAgICAgc2tiKTsKKwkJCQkJX19za2JfcXVldWVfaGVhZCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLAorCQkJCQkJCSBza2IpOwogCQkJCWVsc2UKLQkJCQkJc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwKLQkJCQkJCSAgICAgICBza2IpOworCQkJCQlfX3NrYl9xdWV1ZV90YWlsKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sCisJCQkJCQkJIHNrYik7CiAJCQl9IHdoaWxlICgoc2tiID0gbmV4dCkpOwogCi0JCQkvKgotCQkJICogTWFrZSBzdXJlIG5vYm9keSB3aWxsIGVuYWJsZSB0aGUgcXVldWUgb24gdXMKLQkJCSAqICh3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHRhc2tsZXQpIG5vciBkaXNhYmxlIHRoZQotCQkJICogbmV0ZGV2IHF1ZXVlIHVuZGVybmVhdGggdGhlIHBlbmRpbmcgaGFuZGxpbmcgY29kZS4KLQkJCSAqLwotCQkJX19zZXRfYml0KElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HLAotCQkJCSAgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKLQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssCiAJCQkJCSAgICAgICBmbGFncyk7CiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogb3RoZXJ3aXNlIHJldHJ5LCBidXQgdGhpcyBpcyBhIHJhY2UgY29uZGl0aW9uIG9yCisJCQkgKiBhIGRyaXZlciBidWcgKHdoaWNoIHdlIHdhcm4gYWJvdXQgaWYgaXQgcGVyc2lzdHMpCisJCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLAogCQkJCQkgICAgICAgZmxhZ3MpOwogCiAJCQlyZXRyaWVzKys7Ci0JCQlpZiAoV0FSTihyZXRyaWVzID4gMTAsICJ0eCByZWZ1c2VkIGJ1dCBxdWV1ZSBhY3RpdmUiKSkKKwkJCWlmIChXQVJOKHJldHJpZXMgPiAxMCwgInR4IHJlZnVzZWQgYnV0IHF1ZXVlIGFjdGl2ZVxuIikpCiAJCQkJZ290byBkcm9wOwogCQkJZ290byByZXRyeTsKIAkJfQpAQCAtMTM4Myw0NCArMTM4NCwyNSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gbXByaXYtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqb2RldiA9IE5VTEw7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqb3NkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnRtcF9zZGF0YTsKIAlpbnQgaGVhZHJvb207CiAJYm9vbCBtYXlfZW5jcnlwdDsKLQllbnVtIHsKLQkJTk9UX01PTklUT1IsCi0JCUZPVU5EX1NEQVRBLAotCQlVTktOT1dOX0FERFJFU1MsCi0JfSBtb25pdG9yX2lmYWNlID0gTk9UX01PTklUT1I7CiAKLQlpZiAoc2tiLT5paWYpCi0JCW9kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2tiLT5paWYpOwotCWlmICh1bmxpa2VseShvZGV2ICYmICFpc19pZWVlODAyMTFfZGV2aWNlKGxvY2FsLCBvZGV2KSkpIHsKLQkJZGV2X3B1dChvZGV2KTsKLQkJb2RldiA9IE5VTEw7Ci0JfQotCWlmICh1bmxpa2VseSghb2RldikpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERpc2NhcmRlZCBwYWNrZXQgd2l0aCBub25leGlzdGVudCAiCi0JCSAgICAgICAib3JpZ2luYXRpbmcgZGV2aWNlXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQl9CisJZGV2X2hvbGQoc2RhdGEtPmRldik7CiAKIAlpZiAoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykgJiYKIAkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCAmJgotCSAgICAhbG9jYWwtPnN3X3NjYW5uaW5nICYmICFsb2NhbC0+aHdfc2Nhbm5pbmcgJiYgbG9jYWwtPnBzX3NkYXRhKSB7CisJICAgICEobG9jYWwtPnNjYW5uaW5nKSAmJiBsb2NhbC0+cHNfc2RhdGEpIHsKIAkJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywKIAkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BTKTsKLQkJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwKKwkJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsCiAJCQkJCSZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOwogCQl9CiAKQEAgLTE0MjgsMzEgKzE0MTAsMTMgQEAKIAkJICAgICAgICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOwogCX0KIAotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKIAotCW9zZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKG9kZXYpOwotCi0JaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmb3NkYXRhLT52aWYpICYmCi0JICAgIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjMpKQotCQkJbWVtY3B5KGhkci0+YWRkcjEsIGhkci0+YWRkcjMsIEVUSF9BTEVOKTsKLQkJZWxzZQotCQkJaWYgKG1lc2hfbmV4dGhvcF9sb29rdXAoc2tiLCBvc2RhdGEpKSB7Ci0JCQkJZGV2X3B1dChvZGV2KTsKLQkJCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCQkJfQotCQlpZiAobWVtY21wKG9kZXYtPmRldl9hZGRyLCBoZHItPmFkZHI0LCBFVEhfQUxFTikgIT0gMCkKLQkJCUlFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMoJm9zZGF0YS0+dS5tZXNoLAotCQkJCQkJCSAgICBmd2RlZF9mcmFtZXMpOwotCX0gZWxzZSBpZiAodW5saWtlbHkob3NkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlpZiAodW5saWtlbHkoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpKSB7CiAJCWludCBoZHJsZW47CiAJCXUxNiBsZW5fcnRoZHI7CiAKIAkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRDsKLQkJbW9uaXRvcl9pZmFjZSA9IFVOS05PV05fQUREUkVTUzsKIAogCQlsZW5fcnRoZHIgPSBpZWVlODAyMTFfZ2V0X3JhZGlvdGFwX2xlbihza2ItPmRhdGEpOwogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikoc2tiLT5kYXRhICsgbGVuX3J0aGRyKTsKQEAgLTE0NzEsMjAgKzE0MzUsMTcgQEAKIAkJCSAqLwogCiAJCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLAorCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodG1wX3NkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsCiAJCQkJCQlsaXN0KSB7Ci0JCQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJCWlmICghbmV0aWZfcnVubmluZyh0bXBfc2RhdGEtPmRldikpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCQkJaWYgKHRtcF9zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcih0bXBfc2RhdGEtPmRldi0+ZGV2X2FkZHIsCiAJCQkJCQkgICAgICAgaGRyLT5hZGRyMikpIHsKLQkJCQkJZGV2X2hvbGQoc2RhdGEtPmRldik7Ci0JCQkJCWRldl9wdXQob2Rldik7Ci0JCQkJCW9zZGF0YSA9IHNkYXRhOwotCQkJCQlvZGV2ID0gb3NkYXRhLT5kZXY7Ci0JCQkJCXNrYi0+aWlmID0gc2RhdGEtPmRldi0+aWZpbmRleDsKLQkJCQkJbW9uaXRvcl9pZmFjZSA9IEZPVU5EX1NEQVRBOworCQkJCQlkZXZfaG9sZCh0bXBfc2RhdGEtPmRldik7CisJCQkJCWRldl9wdXQoc2RhdGEtPmRldik7CisJCQkJCXNkYXRhID0gdG1wX3NkYXRhOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC0xNDkyLDQwICsxNDUzLDQ0IEBACiAJCX0KIAl9CiAKLQltYXlfZW5jcnlwdCA9ICFza2ItPmRvX25vdF9lbmNyeXB0OworCW1heV9lbmNyeXB0ID0gIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQpOwogCi0JaGVhZHJvb20gPSBvc2RhdGEtPmxvY2FsLT50eF9oZWFkcm9vbTsKKwloZWFkcm9vbSA9IGxvY2FsLT50eF9oZWFkcm9vbTsKIAlpZiAobWF5X2VuY3J5cHQpCiAJCWhlYWRyb29tICs9IElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NOwogCWhlYWRyb29tIC09IHNrYl9oZWFkcm9vbShza2IpOwogCWhlYWRyb29tID0gbWF4X3QoaW50LCAwLCBoZWFkcm9vbSk7CiAKLQlpZiAoaWVlZTgwMjExX3NrYl9yZXNpemUob3NkYXRhLT5sb2NhbCwgc2tiLCBoZWFkcm9vbSwgbWF5X2VuY3J5cHQpKSB7CisJaWYgKGllZWU4MDIxMV9za2JfcmVzaXplKGxvY2FsLCBza2IsIGhlYWRyb29tLCBtYXlfZW5jcnlwdCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlkZXZfcHV0KG9kZXYpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQlkZXZfcHV0KHNkYXRhLT5kZXYpOworCQlyZXR1cm47CiAJfQogCi0JaWYgKG9zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJb3NkYXRhID0gY29udGFpbmVyX29mKG9zZGF0YS0+YnNzLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCi0JCQkJICAgICAgdS5hcCk7Ci0JaWYgKGxpa2VseShtb25pdG9yX2lmYWNlICE9IFVOS05PV05fQUREUkVTUykpCi0JCWluZm8tPmNvbnRyb2wudmlmID0gJm9zZGF0YS0+dmlmOworCWluZm8tPmNvbnRyb2wudmlmID0gJnNkYXRhLT52aWY7CiAKLQlpZWVlODAyMTFfdHgob2Rldiwgc2tiLCBmYWxzZSk7Ci0JZGV2X3B1dChvZGV2KTsKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJgorCSAgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJCWlmIChtZXNoX25leHRob3BfbG9va3VwKHNrYiwgc2RhdGEpKSB7CisJCQkJLyogc2tiIHF1ZXVlZDogZG9uJ3QgZnJlZSAqLworCQkJCWRldl9wdXQoc2RhdGEtPmRldik7CisJCQkJcmV0dXJuOworCQkJfQogCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKKwlpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKGxvY2FsLCBza2IpOworCWllZWU4MDIxMV90eChzZGF0YSwgc2tiLCBmYWxzZSk7CisJZGV2X3B1dChzZGF0YS0+ZGV2KTsKIH0KIAotaW50IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IGllZWU4MDIxMV9tb25pdG9yX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpwcnRoZHIgPQogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXUxNiBsZW5fcnRoZHI7CiAKIAkvKgpAQCAtMTU2MywxNSArMTUyOCw2IEBACiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgbGVuX3J0aGRyKSkKIAkJZ290byBmYWlsOyAvKiBza2IgdG9vIHNob3J0IGZvciBjbGFpbWVkIHJ0IGhlYWRlciBleHRlbnQgKi8KIAotCXNrYi0+ZGV2ID0gbG9jYWwtPm1kZXY7Ci0KLQkvKiBuZWVkZWQgYmVjYXVzZSB3ZSBzZXQgc2tiIGRldmljZSB0byBtYXN0ZXIgKi8KLQlza2ItPmlpZiA9IGRldi0+aWZpbmRleDsKLQotCS8qIHNvbWV0aW1lcyB3ZSBkbyBlbmNyeXB0IGluamVjdGVkIGZyYW1lcywgd2lsbCBiZSBmaXhlZAotCSAqIHVwIGluIHJhZGlvdGFwIHBhcnNlciBpZiBub3Qgd2FudGVkICovCi0Jc2tiLT5kb19ub3RfZW5jcnlwdCA9IDA7Ci0KIAkvKgogCSAqIGZpeCB1cCB0aGUgcG9pbnRlcnMgYWNjb3VudGluZyBmb3IgdGhlIHJhZGlvdGFwCiAJICogaGVhZGVyIHN0aWxsIGJlaW5nIGluIHRoZXJlLiAgV2UgYXJlIGJlaW5nIGdpdmVuCkBAIC0xNTg2LDggKzE1NDIsMTAgQEAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbGVuX3J0aGRyKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBsZW5fcnRoZHIpOwogCi0JLyogcGFzcyB0aGUgcmFkaW90YXAgaGVhZGVyIHVwIHRvIHRoZSBuZXh0IHN0YWdlIGludGFjdCAqLwotCWRldl9xdWV1ZV94bWl0KHNrYik7CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCisJLyogcGFzcyB0aGUgcmFkaW90YXAgaGVhZGVyIHVwIHRvIHhtaXQgKi8KKwlpZWVlODAyMTFfeG1pdChJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpLCBza2IpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGZhaWw6CkBAIC0xNjEwLDExICsxNTY4LDEyIEBACiAgKiBlbmNhcHN1bGF0ZWQgcGFja2V0IHdpbGwgdGhlbiBiZSBwYXNzZWQgdG8gbWFzdGVyIGludGVyZmFjZSwgd2xhbiMuMTEsIGZvcgogICogdHJhbnNtaXNzaW9uICh0aHJvdWdoIGxvdy1sZXZlbCBkcml2ZXIpLgogICovCi1pbnQgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorbmV0ZGV2X3R4X3QgaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWludCByZXQgPSBORVRERVZfVFhfQlVTWSwgaGVhZF9uZWVkOwogCXUxNiBldGhlcnR5cGUsIGhkcmxlbiwgIG1lc2hoZHJsZW4gPSAwOwogCV9fbGUxNiBmYzsKQEAgLTE2MjcsNyArMTU4Niw3IEBACiAJdTMyIHN0YV9mbGFncyA9IDA7CiAKIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBFVEhfSExFTikpIHsKLQkJcmV0ID0gMDsKKwkJcmV0ID0gTkVUREVWX1RYX09LOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xNjYwLDUyICsxNjE5LDU4IEBACiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAkJaWYgKCFzZGF0YS0+dS5tZXNoLm1zaGNmZy5kb3QxMU1lc2hUVEwpIHsKIAkJCS8qIERvIG5vdCBzZW5kIGZyYW1lcyB3aXRoIG1lc2hfdHRsID09IDAgKi8KIAkJCXNkYXRhLT51Lm1lc2gubXNoc3RhdHMuZHJvcHBlZF9mcmFtZXNfdHRsKys7Ci0JCQlyZXQgPSAwOworCQkJcmV0ID0gTkVUREVWX1RYX09LOwogCQkJZ290byBmYWlsOwogCQl9Ci0JCW1lbXNldCgmbWVzaF9oZHIsIDAsIHNpemVvZihtZXNoX2hkcikpOwogCiAJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkciwKIAkJCQkJICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCkgewotCQkJLyogUkEgVEEgREEgU0EgKi8KLQkJCW1lbXNldChoZHIuYWRkcjEsIDAsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShoZHIuYWRkcjIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwotCQkJbWVtY3B5KGhkci5hZGRyNCwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKLQkJCW1lc2hoZHJsZW4gPSBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwgc2RhdGEpOworCQkJaGRybGVuID0gaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMoJmhkciwgJmZjLAorCQkJCQlza2ItPmRhdGEsIHNrYi0+ZGF0YSArIEVUSF9BTEVOKTsKKwkJCW1lc2hoZHJsZW4gPSBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwKKwkJCQkJc2RhdGEsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQl9IGVsc2UgewogCQkJLyogcGFja2V0IGZyb20gb3RoZXIgaW50ZXJmYWNlICovCiAJCQlzdHJ1Y3QgbWVzaF9wYXRoICptcHBhdGg7CisJCQlpbnQgaXNfbWVzaF9tY2FzdCA9IDE7CisJCQljaGFyICptZXNoX2RhOwogCi0JCQltZW1zZXQoaGRyLmFkZHIxLCAwLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JCQltZW1jcHkoaGRyLmFkZHI0LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0KKwkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihza2ItPmRhdGEpKQotCQkJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOworCQkJCS8qIERBIFRBIG1TQSBBRTpTQSAqLworCQkJCW1lc2hfZGEgPSBza2ItPmRhdGE7CiAJCQllbHNlIHsKLQkJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQkJbXBwYXRoID0gbXBwX3BhdGhfbG9va3VwKHNrYi0+ZGF0YSwgc2RhdGEpOwotCQkJCWlmIChtcHBhdGgpCi0JCQkJCW1lbWNweShoZHIuYWRkcjMsIG1wcGF0aC0+bXBwLCBFVEhfQUxFTik7Ci0JCQkJZWxzZQotCQkJCQltZW1zZXQoaGRyLmFkZHIzLCAweGZmLCBFVEhfQUxFTik7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQkJaWYgKG1wcGF0aCkgeworCQkJCQkvKiBSQSBUQSBtREEgbVNBIEFFOkRBIFNBICovCisJCQkJCW1lc2hfZGEgPSBtcHBhdGgtPm1wcDsKKwkJCQkJaXNfbWVzaF9tY2FzdCA9IDA7CisJCQkJfSBlbHNlCisJCQkJCS8qIERBIFRBIG1TQSBBRTpTQSAqLworCQkJCQltZXNoX2RhID0gZGV2LT5icm9hZGNhc3Q7CiAJCQl9CisJCQloZHJsZW4gPSBpZWVlODAyMTFfZmlsbF9tZXNoX2FkZHJlc3NlcygmaGRyLCAmZmMsCisJCQkJCW1lc2hfZGEsIGRldi0+ZGV2X2FkZHIpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlpZiAoaXNfbWVzaF9tY2FzdCkKKwkJCQltZXNoaGRybGVuID0KKwkJCQkJaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcigmbWVzaF9oZHIsCisJCQkJCQkJc2RhdGEsCisJCQkJCQkJc2tiLT5kYXRhICsgRVRIX0FMRU4sCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMKTsKKwkJCWVsc2UKKwkJCQltZXNoaGRybGVuID0KKwkJCQkJaWVlZTgwMjExX25ld19tZXNoX2hlYWRlcigmbWVzaF9oZHIsCisJCQkJCQkJc2RhdGEsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlza2ItPmRhdGEsCisJCQkJCQkJc2tiLT5kYXRhICsgRVRIX0FMRU4pOwogCi0JCQltZXNoX2hkci5mbGFncyB8PSBNRVNIX0ZMQUdTX0FFX0E1X0E2OwotCQkJbWVzaF9oZHIudHRsID0gc2RhdGEtPnUubWVzaC5tc2hjZmcuZG90MTFNZXNoVFRMOwotCQkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMihzZGF0YS0+dS5tZXNoLm1lc2hfc2VxbnVtKSwgJm1lc2hfaGRyLnNlcW51bSk7Ci0JCQltZW1jcHkobWVzaF9oZHIuZWFkZHIxLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShtZXNoX2hkci5lYWRkcjIsIHNrYi0+ZGF0YSArIEVUSF9BTEVOLCBFVEhfQUxFTik7Ci0JCQlzZGF0YS0+dS5tZXNoLm1lc2hfc2VxbnVtKys7Ci0JCQltZXNoaGRybGVuID0gMTg7CiAJCX0KLQkJaGRybGVuID0gMzA7CiAJCWJyZWFrOwogI2VuZGlmCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgpAQCAtMTcyNCw3ICsxNjg5LDcgQEAKIAkJaGRybGVuID0gMjQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldCA9IDA7CisJCXJldCA9IE5FVERFVl9UWF9PSzsKIAkJZ290byBmYWlsOwogCX0KIApAQCAtMTc2Niw3ICsxNzMxLDcgQEAKIAogCQlJODAyX0RFQlVHX0lOQyhsb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF91bmF1dGhfcG9ydCk7CiAKLQkJcmV0ID0gMDsKKwkJcmV0ID0gTkVUREVWX1RYX09LOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xODQyLDkgKzE4MDcsNiBAQAogCW5oX3BvcyArPSBoZHJsZW47CiAJaF9wb3MgKz0gaGRybGVuOwogCi0Jc2tiLT5paWYgPSBkZXYtPmlmaW5kZXg7Ci0KLQlza2ItPmRldiA9IGxvY2FsLT5tZGV2OwogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKQEAgLTE4NTUsMTMgKzE4MTcsMTUgQEAKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgbmhfcG9zKTsKIAlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBoX3Bvcyk7CiAKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQlkZXZfcXVldWVfeG1pdChza2IpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAotCXJldHVybiAwOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWllZWU4MDIxMV94bWl0KHNkYXRhLCBza2IpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogIGZhaWw6Ci0JaWYgKCFyZXQpCisJaWYgKHJldCA9PSBORVRERVZfVFhfT0spCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiByZXQ7CkBAIC0xODg3LDEwMSArMTg1MSw3NCBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgcmV0OwogCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKIAotCS8qIGRvZXMgaW50ZXJmYWNlIHN0aWxsIGV4aXN0PyAqLwotCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBza2ItPmlpZik7Ci0JaWYgKCFkZXYpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKiB2YWxpZGF0ZSBpbmZvLT5jb250cm9sLnZpZiBhZ2FpbnN0IHNrYi0+aWlmICovCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCi0JCQkJICAgICB1LmFwKTsKLQotCWlmICh1bmxpa2VseShpbmZvLT5jb250cm9sLnZpZiAmJiBpbmZvLT5jb250cm9sLnZpZiAhPSAmc2RhdGEtPnZpZikpIHsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXN1bHQgPSB0cnVlOwotCQlnb3RvIG91dDsKLQl9CisJc2RhdGEgPSB2aWZfdG9fc2RhdGEoaW5mby0+Y29udHJvbC52aWYpOwogCiAJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HKSB7Ci0JCWllZWU4MDIxMV90eChkZXYsIHNrYiwgdHJ1ZSk7CisJCWllZWU4MDIxMV90eChzZGF0YSwgc2tiLCB0cnVlKTsKIAl9IGVsc2UgewogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CiAKLQkJcmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsICZza2IsIHN0YSk7CisJCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmc2tiLCBzdGEsIHRydWUpOwogCQlpZiAocmV0ICE9IElFRUU4MDIxMV9UWF9PSykKIAkJCXJlc3VsdCA9IGZhbHNlOwogCX0KIAotIG91dDoKLQlkZXZfcHV0KGRldik7Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCiAvKgotICogVHJhbnNtaXQgYWxsIHBlbmRpbmcgcGFja2V0cy4gQ2FsbGVkIGZyb20gdGFza2xldCwgbG9ja3MgbWFzdGVyIGRldmljZQotICogVFggbG9jayBzbyB0aGF0IG5vIG5ldyBwYWNrZXRzIGNhbiBjb21lIGluLgorICogVHJhbnNtaXQgYWxsIHBlbmRpbmcgcGFja2V0cy4gQ2FsbGVkIGZyb20gdGFza2xldC4KICAqLwogdm9pZCBpZWVlODAyMTFfdHhfcGVuZGluZyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqKWRhdGE7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5tZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7Ci0JYm9vbCBuZXh0OworCWJvb2wgdHhvazsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPmh3LnF1ZXVlczsgaSsrKSB7CiAJCS8qCiAJCSAqIElmIHF1ZXVlIGlzIHN0b3BwZWQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gZHVlIHRvIHBlbmRpbmcKIAkJICogZnJhbWVzLCBvciB3ZSBoYXZlIG5vIHBlbmRpbmcgZnJhbWVzLCBwcm9jZWVkIHRvIG5leHQgcXVldWUuCiAJCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKLQkJbmV4dCA9IGZhbHNlOwotCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1tpXSAhPQotCQkJQklUKElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HKSB8fAorCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1tpXSB8fAogCQkgICAgc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1tpXSkpCi0JCQluZXh0ID0gdHJ1ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKLQotCQlpZiAobmV4dCkKIAkJCWNvbnRpbnVlOwogCi0JCS8qCi0JCSAqIHN0YXJ0IHRoZSBxdWV1ZSBub3cgdG8gYWxsb3cgcHJvY2Vzc2luZyBvdXIgcGFja2V0cywKLQkJICogd2UncmUgdW5kZXIgdGhlIHR4IGxvY2sgaGVyZSBhbnl3YXkgc28gbm90aGluZyB3aWxsCi0JCSAqIGhhcHBlbiBhcyBhIHJlc3VsdCBvZiB0aGlzCi0JCSAqLwotCQluZXRpZl9zdGFydF9zdWJxdWV1ZShsb2NhbC0+bWRldiwgaSk7Ci0KIAkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW2ldKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kZXF1ZXVlKCZsb2NhbC0+cGVuZGluZ1tpXSk7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmbG9jYWwtPnBlbmRpbmdbaV0pOworCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCQkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKLQkJCWlmICghaWVlZTgwMjExX3R4X3BlbmRpbmdfc2tiKGxvY2FsLCBza2IpKSB7Ci0JCQkJc2tiX3F1ZXVlX2hlYWQoJmxvY2FsLT5wZW5kaW5nW2ldLCBza2IpOwotCQkJCWJyZWFrOworCQkJaWYgKFdBUk5fT04oIWluZm8tPmNvbnRyb2wudmlmKSkgeworCQkJCWtmcmVlX3NrYihza2IpOworCQkJCWNvbnRpbnVlOwogCQkJfQorCisJCQlzZGF0YSA9IHZpZl90b19zZGF0YShpbmZvLT5jb250cm9sLnZpZik7CisJCQlkZXZfaG9sZChzZGF0YS0+ZGV2KTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLAorCQkJCQkJZmxhZ3MpOworCisJCQl0eG9rID0gaWVlZTgwMjExX3R4X3BlbmRpbmdfc2tiKGxvY2FsLCBza2IpOworCQkJZGV2X3B1dChzZGF0YS0+ZGV2KTsKKwkJCWlmICghdHhvaykKKwkJCQlfX3NrYl9xdWV1ZV9oZWFkKCZsb2NhbC0+cGVuZGluZ1tpXSwgc2tiKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywKKwkJCQkJICBmbGFncyk7CisJCQlpZiAoIXR4b2spCisJCQkJYnJlYWs7CiAJCX0KLQotCQkvKiBTdGFydCByZWd1bGFyIHBhY2tldCBwcm9jZXNzaW5nIGFnYWluLiAqLwotCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1tpXSkpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oJmxvY2FsLT5odywgaSwKLQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCi0JbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTIxNTYsOCArMjA5Myw3IEBACiAKIAlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0Jc2tiLT5kb19ub3RfZW5jcnlwdCA9IDE7Ci0KKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCWluZm8tPmJhbmQgPSBiYW5kOwogCS8qCiAJICogWFhYOiBGb3Igbm93LCBhbHdheXMgdXNlIHRoZSBsb3dlc3QgcmF0ZQpAQCAtMjIyOCw5ICsyMTY0LDYgQEAKIAlzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOwogCWJzcyA9ICZzZGF0YS0+dS5hcDsKIAotCWlmICghYnNzKQotCQlyZXR1cm4gTlVMTDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAliZWFjb24gPSByY3VfZGVyZWZlcmVuY2UoYnNzLT5iZWFjb24pOwogCkBAIC0yMjU2LDcgKzIxODksNyBAQAogCQkJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKIAkJfQogCi0JCWlmICghaWVlZTgwMjExX3R4X3ByZXBhcmUobG9jYWwsICZ0eCwgc2tiKSkKKwkJaWYgKCFpZWVlODAyMTFfdHhfcHJlcGFyZShzZGF0YSwgJnR4LCBza2IpKQogCQkJYnJlYWs7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJfQpAQCAtMjI3NiwzICsyMjA5LDI0IEBACiAJcmV0dXJuIHNrYjsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyk7CisKK3ZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgaW50IGVuY3J5cHQpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApOworCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKKworCWlmICghZW5jcnlwdCkKKwkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKKworCS8qCisJICogVGhlIG90aGVyIHBhdGggY2FsbGluZyBpZWVlODAyMTFfeG1pdCBpcyBmcm9tIHRoZSB0YXNrbGV0LAorCSAqIGFuZCB3aGlsZSB3ZSBjYW4gaGFuZGxlIGNvbmN1cnJlbnQgdHJhbnNtaXNzaW9ucyBsb2NraW5nCisJICogcmVxdWlyZW1lbnRzIGFyZSB0aGF0IHdlIGRvIG5vdCBjb21lIGludG8gdHggd2l0aCBiaHMgb24uCisJICovCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWllZWU4MDIxMV94bWl0KHNkYXRhLCBza2IpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggOTE1ZTc3Ny4uZGQ2NTY0MyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAibWVzaC5oIgogI2luY2x1ZGUgIndtZS5oIgogI2luY2x1ZGUgImxlZC5oIgorI2luY2x1ZGUgIndlcC5oIgogCiAvKiBwcml2aWQgZm9yIHdpcGh5cyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGV5IGJlbG9uZyB0byB1cyBvciBub3QgKi8KIHZvaWQgKm1hYzgwMjExX3dpcGh5X3ByaXZpZCA9ICZtYWM4MDIxMV93aXBoeV9wcml2aWQ7CkBAIC0yNzQsMTYgKzI3NSwxMiBAQAogCiAJX19jbGVhcl9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOwogCi0JaWYgKCFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSkgJiYKLQkgICAgbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gPT0KLQkJCQlCSVQoSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKLQogCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSAhPSAwKQogCQkvKiBzb21lb25lIHN0aWxsIGhhcyB0aGlzIHF1ZXVlIHN0b3BwZWQgKi8KIAkJcmV0dXJuOwogCi0JbmV0aWZfd2FrZV9zdWJxdWV1ZShsb2NhbC0+bWRldiwgcXVldWUpOworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0pKQorCQl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKIH0KIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKQEAgLTMxMiwxNCArMzA5LDYgQEAKIAlpZiAoV0FSTl9PTihxdWV1ZSA+PSBody0+cXVldWVzKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBPbmx5IHN0b3AgaWYgaXQgd2FzIHByZXZpb3VzbHkgcnVubmluZywgdGhpcyBpcyBuZWNlc3NhcnkKLQkgKiBmb3IgY29ycmVjdCBwZW5kaW5nIHBhY2tldHMgaGFuZGxpbmcgYmVjYXVzZSB0aGVyZSB3ZSBtYXkKLQkgKiBzdGFydCAoYnV0IG5vdCB3YWtlKSB0aGUgcXVldWUgYW5kIHJlbHkgb24gdGhhdC4KLQkgKi8KLQlpZiAoIWxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKQotCQluZXRpZl9zdG9wX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7Ci0KIAlfX3NldF9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOwogfQogCkBAIC0zNDcsMTEgKzMzNiwxNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCWlmIChXQVJOX09OKCFpbmZvLT5jb250cm9sLnZpZikpIHsKKwkJa2ZyZWUoc2tiKTsKKwkJcmV0dXJuOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCV9faWVlZTgwMjExX3N0b3BfcXVldWUoaHcsIHF1ZXVlLCBJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU0tCX0FERCk7Ci0JX19pZWVlODAyMTFfc3RvcF9xdWV1ZShodywgcXVldWUsIElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HKTsKLQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLCBza2IpOworCV9fc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSwgc2tiKTsKIAlfX2llZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBxdWV1ZSwgSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NLQl9BREQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CiB9CkBAIC0zNzAsMTggKzM2NCwyMSBAQAogCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NLQl9BREQpOwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShza2JzKSkpIHsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJCWlmIChXQVJOX09OKCFpbmZvLT5jb250cm9sLnZpZikpIHsKKwkJCWtmcmVlKHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCiAJCXJldCsrOwogCQlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwotCQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnBlbmRpbmdbcXVldWVdLCBza2IpOworCQlfX3NrYl9xdWV1ZV90YWlsKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sIHNrYik7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykgewotCQlpZiAocmV0KQotCQkJX19pZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaSwKLQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORyk7CisJZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKIAkJX19pZWVlODAyMTFfd2FrZV9xdWV1ZShodywgaSwKIAkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9TS0JfQUREKTsKLQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CkBAIC00MTIsMTEgKzQwOSwxNiBAQAogaW50IGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgcXVldWUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OwogCiAJaWYgKFdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcykpCiAJCXJldHVybiB0cnVlOwogCi0JcmV0dXJuIF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpOworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCXJldCA9ICEhbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCk7CiAKQEAgLTUwOSw2ICs1MTEsNDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyk7CiAKKy8qCisgKiBOb3RoaW5nIHNob3VsZCBoYXZlIGJlZW4gc3R1ZmZlZCBpbnRvIHRoZSB3b3JrcXVldWUgZHVyaW5nCisgKiB0aGUgc3VzcGVuZC0+cmVzdW1lIGN5Y2xlLiBJZiB0aGlzIFdBUk4gaXMgc2VlbiB0aGVuIHRoZXJlCisgKiBpcyBhIGJ1ZyB3aXRoIGVpdGhlciB0aGUgZHJpdmVyIHN1c3BlbmQgb3Igc29tZXRoaW5nIGluCisgKiBtYWM4MDIxMSBzdHVmZmluZyBpbnRvIHRoZSB3b3JrcXVldWUgd2hpY2ggd2UgaGF2ZW4ndCB5ZXQKKyAqIGNsZWFyZWQgZHVyaW5nIG1hYzgwMjExJ3Mgc3VzcGVuZCBjeWNsZS4KKyAqLworc3RhdGljIGJvb2wgaWVlZTgwMjExX2Nhbl9xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworICAgICAgICBpZiAoV0FSTihsb2NhbC0+c3VzcGVuZGVkLCAicXVldWVpbmcgaWVlZTgwMjExIHdvcmsgd2hpbGUgIgorCQkgImdvaW5nIHRvIHN1c3BlbmRcbiIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCit2b2lkIGllZWU4MDIxMV9xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisKKwlpZiAoIWllZWU4MDIxMV9jYW5fcXVldWVfd29yayhsb2NhbCkpCisJCXJldHVybjsKKworCXF1ZXVlX3dvcmsobG9jYWwtPndvcmtxdWV1ZSwgd29yayk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9xdWV1ZV93b3JrKTsKKwordm9pZCBpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssCisJCQkJICB1bnNpZ25lZCBsb25nIGRlbGF5KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCisJaWYgKCFpZWVlODAyMTFfY2FuX3F1ZXVlX3dvcmsobG9jYWwpKQorCQlyZXR1cm47CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsobG9jYWwtPndvcmtxdWV1ZSwgZHdvcmssIGRlbGF5KTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayk7CisKIHZvaWQgaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyh1OCAqc3RhcnQsIHNpemVfdCBsZW4sCiAJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zKQogewpAQCAtNzYwLDIwICs4MDIsNiBAQAogCWllZWU4MDIxMV9zZXRfd21tX2RlZmF1bHQoc2RhdGEpOwogfQogCi12b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIGludCBlbmNyeXB0KQotewotCXNrYi0+ZGV2ID0gc2RhdGEtPmxvY2FsLT5tZGV2OwotCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApOwotCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKLQlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCAwKTsKLQotCXNrYi0+aWlmID0gc2RhdGEtPmRldi0+aWZpbmRleDsKLQlza2ItPmRvX25vdF9lbmNyeXB0ID0gIWVuY3J5cHQ7Ci0KLQlkZXZfcXVldWVfeG1pdChza2IpOwotfQotCiB1MzIgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKQEAgLTgwNCwxMiArODMyLDEzIEBACiAKIHZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKLQkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCi0JCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCkKKwkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sIGNvbnN0IHU4ICpic3NpZCwKKwkJCSBjb25zdCB1OCAqa2V5LCB1OCBrZXlfbGVuLCB1OCBrZXlfaWR4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCWludCBlcnI7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCiAJCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4pOwpAQCAtODI0LDggKzg1Myw2IEBACiAJbWVtc2V0KG1nbXQsIDAsIDI0ICsgNik7CiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVVUSCk7Ci0JaWYgKGVuY3J5cHQpCi0JCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKQEAgLTgzNSw3ICs4NjIsMTMgQEAKIAlpZiAoZXh0cmEpCiAJCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOworCWlmIChhdXRoX2FsZyA9PSBXTEFOX0FVVEhfU0hBUkVEX0tFWSAmJiB0cmFuc2FjdGlvbiA9PSAzKSB7CisJCW1nbXQtPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkJZXJyID0gaWVlZTgwMjExX3dlcF9lbmNyeXB0KGxvY2FsLCBza2IsIGtleSwga2V5X2xlbiwga2V5X2lkeCk7CisJCVdBUk5fT04oZXJyKTsKKwl9CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCiBpbnQgaWVlZTgwMjExX2J1aWxkX3ByZXFfaWVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnVmZmVyLApAQCAtOTc0LDYgKzEwMDcsMTYgQEAKIAlyZXR1cm4gc3VwcF9yYXRlczsKIH0KIAordm9pZCBpZWVlODAyMTFfc3RvcF9kZXZpY2Uoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgZmFsc2UpOworCisJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPnJlY29uZmlnX2ZpbHRlcik7CisJZHJ2X3N0b3AobG9jYWwpOworCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT53b3JrcXVldWUpOworfQorCiBpbnQgaWVlZTgwMjExX3JlY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKQEAgLTEwNDMsOSArMTA4Niw3IEBACiAJLyogcmVjb25maWd1cmUgaGFyZHdhcmUgKi8KIAlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCB+MCk7CiAKLQluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOwogCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKLQluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CiAKIAkvKiBGaW5hbGx5IGFsc28gcmVjb25maWd1cmUgYWxsIHRoZSBCU1MgaW5mb3JtYXRpb24gKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKQEAgLTExMjEsMyArMTE2Miw0IEBACiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KKwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dlcC5jIGIvbmV0L21hYzgwMjExL3dlcC5jCmluZGV4IGVmNzMxMDUuLjhhOTgwZjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXAuYworKysgYi9uZXQvbWFjODAyMTEvd2VwLmMKQEAgLTY3LDEwICs2NywxMCBAQAogCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV93ZXBfZ2V0X2l2KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5LCB1OCAqaXYpCisJCQkJIGludCBrZXlsZW4sIGludCBrZXlpZHgsIHU4ICppdikKIHsKIAlsb2NhbC0+d2VwX2l2Kys7Ci0JaWYgKGllZWU4MDIxMV93ZXBfd2Vha19pdihsb2NhbC0+d2VwX2l2LCBrZXktPmNvbmYua2V5bGVuKSkKKwlpZiAoaWVlZTgwMjExX3dlcF93ZWFrX2l2KGxvY2FsLT53ZXBfaXYsIGtleWxlbikpCiAJCWxvY2FsLT53ZXBfaXYgKz0gMHgwMTAwOwogCiAJaWYgKCFpdikKQEAgLTc5LDEzICs3OSwxMyBAQAogCSppdisrID0gKGxvY2FsLT53ZXBfaXYgPj4gMTYpICYgMHhmZjsKIAkqaXYrKyA9IChsb2NhbC0+d2VwX2l2ID4+IDgpICYgMHhmZjsKIAkqaXYrKyA9IGxvY2FsLT53ZXBfaXYgJiAweGZmOwotCSppdisrID0ga2V5LT5jb25mLmtleWlkeCA8PCA2OworCSppdisrID0ga2V5aWR4IDw8IDY7CiB9CiAKIAogc3RhdGljIHU4ICppZWVlODAyMTFfd2VwX2FkZF9pdihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCisJCQkJaW50IGtleWxlbiwgaW50IGtleWlkeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXVuc2lnbmVkIGludCBoZHJsZW47CkBAIC0xMDAsNyArMTAwLDcgQEAKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJbmV3aGRyID0gc2tiX3B1c2goc2tiLCBXRVBfSVZfTEVOKTsKIAltZW1tb3ZlKG5ld2hkciwgbmV3aGRyICsgV0VQX0lWX0xFTiwgaGRybGVuKTsKLQlpZWVlODAyMTFfd2VwX2dldF9pdihsb2NhbCwga2V5LCBuZXdoZHIgKyBoZHJsZW4pOworCWllZWU4MDIxMV93ZXBfZ2V0X2l2KGxvY2FsLCBrZXlsZW4sIGtleWlkeCwgbmV3aGRyICsgaGRybGVuKTsKIAlyZXR1cm4gbmV3aGRyICsgaGRybGVuOwogfQogCkBAIC0xNDQsNDMgKzE0NCwzMiBAQAogICoKICAqIFdFUCBmcmFtZSBwYXlsb2FkOiBJViArIFRYIGtleSBpZHgsIFJDNChkYXRhKSwgSUNWID0gUkM0KENSQzMyKGRhdGEpKQogICovCi1pbnQgaWVlZTgwMjExX3dlcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQoraW50IGllZWU4MDIxMV93ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgY29uc3QgdTggKmtleSwgaW50IGtleWxlbiwgaW50IGtleWlkeCkKIHsKLQl1MzIga2xlbjsKLQl1OCAqcmM0a2V5LCAqaXY7CisJdTggKml2OwogCXNpemVfdCBsZW47CisJdTggcmM0a2V5WzMgKyBXTEFOX0tFWV9MRU5fV0VQMTA0XTsKIAotCWlmICgha2V5IHx8IGtleS0+Y29uZi5hbGcgIT0gQUxHX1dFUCkKKwlpdiA9IGllZWU4MDIxMV93ZXBfYWRkX2l2KGxvY2FsLCBza2IsIGtleWxlbiwga2V5aWR4KTsKKwlpZiAoIWl2KQogCQlyZXR1cm4gLTE7CiAKLQlrbGVuID0gMyArIGtleS0+Y29uZi5rZXlsZW47Ci0JcmM0a2V5ID0ga21hbGxvYyhrbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXJjNGtleSkKLQkJcmV0dXJuIC0xOwotCi0JaXYgPSBpZWVlODAyMTFfd2VwX2FkZF9pdihsb2NhbCwgc2tiLCBrZXkpOwotCWlmICghaXYpIHsKLQkJa2ZyZWUocmM0a2V5KTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWxlbiA9IHNrYi0+bGVuIC0gKGl2ICsgV0VQX0lWX0xFTiAtIHNrYi0+ZGF0YSk7CiAKIAkvKiBQcmVwZW5kIDI0LWJpdCBJViB0byBSQzQga2V5ICovCiAJbWVtY3B5KHJjNGtleSwgaXYsIDMpOwogCiAJLyogQ29weSByZXN0IG9mIHRoZSBXRVAga2V5ICh0aGUgc2VjcmV0IHBhcnQpICovCi0JbWVtY3B5KHJjNGtleSArIDMsIGtleS0+Y29uZi5rZXksIGtleS0+Y29uZi5rZXlsZW4pOworCW1lbWNweShyYzRrZXkgKyAzLCBrZXksIGtleWxlbik7CiAKIAkvKiBBZGQgcm9vbSBmb3IgSUNWICovCiAJc2tiX3B1dChza2IsIFdFUF9JQ1ZfTEVOKTsKIAotCWllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKGxvY2FsLT53ZXBfdHhfdGZtLCByYzRrZXksIGtsZW4sCisJaWVlZTgwMjExX3dlcF9lbmNyeXB0X2RhdGEobG9jYWwtPndlcF90eF90Zm0sIHJjNGtleSwga2V5bGVuICsgMywKIAkJCQkgICBpdiArIFdFUF9JVl9MRU4sIGxlbik7CiAKLQlrZnJlZShyYzRrZXkpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNiw4ICsyMDUsOSBAQAogICogZmFpbHVyZS4gSWYgZnJhbWUgaXMgT0ssIElWIGFuZCBJQ1Ygd2lsbCBiZSByZW1vdmVkLCBpLmUuLCBkZWNyeXB0ZWQgcGF5bG9hZAogICogaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2tiIGFuZCBza2IgbGVuZ3RoIHdpbGwgYmUgcmVkdWNlZC4KICAqLwotaW50IGllZWU4MDIxMV93ZXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3dlcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQogewogCXUzMiBrbGVuOwogCXU4ICpyYzRrZXk7CkBAIC0zMTQsMTIgKzMwNCwxNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCWlmICghKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKSB7Ci0JCWlmIChpZWVlODAyMTFfd2VwX2VuY3J5cHQodHgtPmxvY2FsLCBza2IsIHR4LT5rZXkpKQorCQlpZiAoaWVlZTgwMjExX3dlcF9lbmNyeXB0KHR4LT5sb2NhbCwgc2tiLCB0eC0+a2V5LT5jb25mLmtleSwKKwkJCQkJICB0eC0+a2V5LT5jb25mLmtleWxlbiwKKwkJCQkJICB0eC0+a2V5LT5jb25mLmtleWlkeCkpCiAJCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKIAkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKIAkJaWYgKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHsKLQkJCWlmICghaWVlZTgwMjExX3dlcF9hZGRfaXYodHgtPmxvY2FsLCBza2IsIHR4LT5rZXkpKQorCQkJaWYgKCFpZWVlODAyMTFfd2VwX2FkZF9pdih0eC0+bG9jYWwsIHNrYiwKKwkJCQkJCSAgdHgtPmtleS0+Y29uZi5rZXlsZW4sCisJCQkJCQkgIHR4LT5rZXktPmNvbmYua2V5aWR4KSkKIAkJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd2VwLmggYi9uZXQvbWFjODAyMTEvd2VwLmgKaW5kZXggZDNmMGRiNC4uZmUyOWQ3ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dlcC5oCisrKyBiL25ldC9tYWM4MDIxMS93ZXAuaApAQCAtMjAsMTIgKzIwLDExIEBACiB2b2lkIGllZWU4MDIxMV93ZXBfZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB2b2lkIGllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sIHU4ICpyYzRrZXksCiAJCQkJc2l6ZV90IGtsZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pOworaW50IGllZWU4MDIxMV93ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgY29uc3QgdTggKmtleSwgaW50IGtleWxlbiwgaW50IGtleWlkeCk7CiBpbnQgaWVlZTgwMjExX3dlcF9kZWNyeXB0X2RhdGEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgdTggKnJjNGtleSwKIAkJCSAgICAgICBzaXplX3Qga2xlbiwgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbik7Ci1pbnQgaWVlZTgwMjExX3dlcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKLWludCBpZWVlODAyMTFfd2VwX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpOwogYm9vbCBpZWVlODAyMTFfd2VwX2lzX3dlYWtfaXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiAKIGllZWU4MDIxMV9yeF9yZXN1bHQKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXh0LmMgYi9uZXQvbWFjODAyMTEvd2V4dC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGE4MWY0Li4wMDAwMDAwCi0tLSBhL25ldC9tYWM4MDIxMS93ZXh0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KLSAqIENvcHlyaWdodCAyMDA1LTIwMDYsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgotI2luY2x1ZGUgImxlZC5oIgotI2luY2x1ZGUgInJhdGUuaCIKLSNpbmNsdWRlICJ3cGEuaCIKLSNpbmNsdWRlICJhZXNfY2NtLmgiCi0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlpbnQgcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc2RhdGEsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwotCQlpZiAocmV0ICYmIHJldCAhPSAtRUFMUkVBRFkpCi0JCQlyZXR1cm4gcmV0OwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0JCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9FWFRfU01FOwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOwotCQlpZiAocmV0ICE9IC1FQUxSRUFEWSkKLQkJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9zaXdmcmVxKGRldiwgaW5mbywgZnJlcSwgZXh0cmEpOwotCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKLQotCS8qIGZyZXEtPmUgPT0gMDogZnJlcS0+bSA9IGNoYW5uZWw7IG90aGVyd2lzZSBmcmVxID0gbSAqIDEwXmUgKi8KLQlpZiAoZnJlcS0+ZSA9PSAwKSB7Ci0JCWlmIChmcmVxLT5tIDwgMCkgewotCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PQotCQkJCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlCi0JCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwKLQkJCQlpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZnJlcS0+bSkpOwotCX0gZWxzZSB7Ci0JCWludCBpLCBkaXYgPSAxMDAwMDAwOwotCQlmb3IgKGkgPSAwOyBpIDwgZnJlcS0+ZTsgaSsrKQotCQkJZGl2IC89IDEwOwotCQlpZiAoZGl2IDw9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksIGZyZXEtPm0gLyBkaXYpOwotCX0KLQotCWlmICghY2hhbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIG5vIGNoYW5nZSBleGNlcHQgbWF5YmUgYXV0byAtPiBmaXhlZCwgaWdub3JlIHRoZSBIVAotCSAqIHNldHRpbmcgc28geW91IGNhbiBmaXggYSBjaGFubmVsIHlvdSdyZSBvbiBhbHJlYWR5Ci0JICovCi0JaWYgKGxvY2FsLT5vcGVyX2NoYW5uZWwgPT0gY2hhbikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwotCi0JbG9jYWwtPm9wZXJfY2hhbm5lbCA9IGNoYW47Ci0JbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwotCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9naXdmcmVxKGRldiwgaW5mbywgZnJlcSwgZXh0cmEpOwotCi0JZnJlcS0+bSA9IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxOwotCWZyZXEtPmUgPSA2OwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzaXplX3QgbGVuID0gZGF0YS0+bGVuZ3RoOwotCWludCByZXQ7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X3Npd2Vzc2lkKGRldiwgaW5mbywgZGF0YSwgc3NpZCk7Ci0KLQkvKiBpd2NvbmZpZyB1c2VzIG51bCB0ZXJtaW5hdGlvbiBpbiBTU0lELi4gKi8KLQlpZiAobGVuID4gMCAmJiBzc2lkW2xlbiAtIDFdID09ICdcMCcpCi0JCWxlbi0tOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCWlmIChkYXRhLT5mbGFncykKLQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwotCQllbHNlCi0JCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwotCi0JCXJldCA9IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc2RhdGEsIHNzaWQsIGxlbik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9FWFRfU01FOwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQ09OVFJPTF9QT1JUOwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKLXsKLQlzaXplX3QgbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9naXdlc3NpZChkZXYsIGluZm8sIGRhdGEsIHNzaWQpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCWludCByZXMgPSBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHNkYXRhLCBzc2lkLCAmbGVuKTsKLQkJaWYgKHJlcyA9PSAwKSB7Ci0JCQlkYXRhLT5sZW5ndGggPSBsZW47Ci0JCQlkYXRhLT5mbGFncyA9IDE7Ci0JCX0gZWxzZQotCQkJZGF0YS0+ZmxhZ3MgPSAwOwotCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJaW50IHJldDsKLQotCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCi0JCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8Ci0JCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwotCQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7Ci0JCWVsc2UKLQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKLQkJcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfRVhUX1NNRTsKLQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NPTlRST0xfUE9SVDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1dEUykgewotCQkvKgotCQkgKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHRoZSBXRFMgcGVlciBhZGRyZXNzCi0JCSAqIHdoaWxlIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgdGhlbiB3ZSBuZWVkIHRvIGRvCi0JCSAqIG1vcmUgd29yayBoZXJlLCBuYW1lbHkgaWYgaXQgaXMgcnVubmluZyB3ZSBuZWVkIHRvCi0JCSAqIGFkZCBhIG5ldyBhbmQgcmVtb3ZlIHRoZSBvbGQgU1RBIGVudHJ5LCB0aGlzIGlzCi0JCSAqIG5vcm1hbGx5IGhhbmRsZWQgYnkgX29wZW4oKSBhbmQgX3N0b3AoKS4KLQkJICovCi0JCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCQlyZXR1cm4gLUVCVVNZOwotCi0JCW1lbWNweSgmc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCi0JCSAgICAgICBFVEhfQUxFTik7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9naXdhcChkZXYsIGluZm8sIGFwX2FkZHIsIGV4dHJhKTsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlpZiAoc2RhdGEtPnUubWdkLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7Ci0JCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwotCQl9IGVsc2UKLQkJCW1lbXNldCgmYXBfYWRkci0+c2FfZGF0YSwgMCwgRVRIX0FMRU4pOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9XRFMpIHsKLQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQltZW1jcHkoJmFwX2FkZHItPnNhX2RhdGEsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwgRVRIX0FMRU4pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLQotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcmF0ZSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlpbnQgaSwgZXJyID0gLUVJTlZBTDsKLQl1MzIgdGFyZ2V0X3JhdGUgPSByYXRlLT52YWx1ZSAvIDEwMDAwMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCS8qIHRhcmdldF9yYXRlID0gLTEsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhdXRvIG9ubHksIHNvIHVzZSBhbGwgcmF0ZXMKLQkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMSBtZWFucyBvbmx5IHJhdGUgWAotCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyA8PSBYICovCi0Jc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7Ci0Jc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IC0xOwotCWlmIChyYXRlLT52YWx1ZSA8IDApCi0JCXJldHVybiAwOwotCi0JZm9yIChpPTA7IGk8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpicmF0ZSA9ICZzYmFuZC0+Yml0cmF0ZXNbaV07Ci0JCWludCB0aGlzX3JhdGUgPSBicmF0ZS0+Yml0cmF0ZTsKLQotCQlpZiAodGFyZ2V0X3JhdGUgPT0gdGhpc19yYXRlKSB7Ci0JCQlzZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPSBpOwotCQkJaWYgKHJhdGUtPmZpeGVkKQotCQkJCXNkYXRhLT5mb3JjZV91bmljYXN0X3JhdGVpZHggPSBpOwotCQkJZXJyID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKLQotCWlmIChzdGEgJiYgIShzdGEtPmxhc3RfdHhfcmF0ZS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQotCQlyYXRlLT52YWx1ZSA9IHNiYW5kLT5iaXRyYXRlc1tzdGEtPmxhc3RfdHhfcmF0ZS5pZHhdLmJpdHJhdGU7Ci0JZWxzZQotCQlyYXRlLT52YWx1ZSA9IDA7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWlmICghc3RhKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJhdGUtPnZhbHVlICo9IDEwMDAwMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKndycSwKLQkJCQkgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsLT5ody5jb25mOwotCWludCB0aW1lb3V0ID0gMDsKLQlib29sIHBzOwotCi0JaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh3cnEtPmRpc2FibGVkKSB7Ci0JCXBzID0gZmFsc2U7Ci0JCXRpbWVvdXQgPSAwOwotCQlnb3RvIHNldDsKLQl9Ci0KLQlzd2l0Y2ggKHdycS0+ZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7Ci0JY2FzZSBJV19QT1dFUl9PTjogICAgICAgLyogSWYgbm90IHNwZWNpZmllZCAqLwotCWNhc2UgSVdfUE9XRVJfTU9ERTogICAgIC8qIElmIHNldCBhbGwgbWFzayAqLwotCWNhc2UgSVdfUE9XRVJfQUxMX1I6ICAgIC8qIElmIGV4cGxpY2l0ZWx5IHN0YXRlIGFsbCAqLwotCQlwcyA9IHRydWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6ICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSB3ZSBpZ25vcmUgKi8KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHdycS0+ZmxhZ3MgJiB+KElXX1BPV0VSX01PREUgfCBJV19QT1dFUl9USU1FT1VUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAod3JxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpCi0JCXRpbWVvdXQgPSB3cnEtPnZhbHVlIC8gMTAwMDsKLQotIHNldDoKLQlpZiAocHMgPT0gc2RhdGEtPnUubWdkLnBvd2Vyc2F2ZSAmJiB0aW1lb3V0ID09IGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCkKLQkJcmV0dXJuIDA7Ci0KLQlzZGF0YS0+dS5tZ2QucG93ZXJzYXZlID0gcHM7Ci0JY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKLQotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykKLQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKLQotCWllZWU4MDIxMV9yZWNhbGNfcHMobG9jYWwsIC0xKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KLQl3cnF1LT5wb3dlci5kaXNhYmxlZCA9ICFzZGF0YS0+dS5tZ2QucG93ZXJzYXZlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX2lvY3RsX3Npd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKLQljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046Ci0JY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKLQljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQ6Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKGRhdGEtPnZhbHVlICYgKElXX0FVVEhfQ0lQSEVSX1dFUDQwIHwKLQkJCSAgICBJV19BVVRIX0NJUEhFUl9XRVAxMDQgfCBJV19BVVRIX0NJUEhFUl9US0lQKSkKLQkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KLQkJCQkJSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOwotCQkJZWxzZQotCQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPQotCQkJCQl+SUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9ICEhZGF0YS0+dmFsdWU7Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRDsKLQkJCS8qCi0JCQkgKiBQcml2YWN5IGludm9rZWQgYnkgd3BhX3N1cHBsaWNhbnQsIHN0b3JlIHRoZQotCQkJICogdmFsdWUgYW5kIGFsbG93IGFzc29jaWF0aW5nIHRvIGEgcHJvdGVjdGVkCi0JCQkgKiBuZXR3b3JrIHdpdGhvdXQgaGF2aW5nIGEga2V5IHVwIGZyb250LgotCQkJICovCi0JCQlpZiAoZGF0YS0+dmFsdWUpCi0JCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9Ci0JCQkJCUlFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOwotCQllbHNlCi0JCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19BVVRIX01GUDoKLQkJaWYgKCEoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSkpIHsKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlzd2l0Y2ggKGRhdGEtPnZhbHVlKSB7Ci0JCQljYXNlIElXX0FVVEhfTUZQX0RJU0FCTEVEOgotCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJV19BVVRIX01GUF9PUFRJT05BTDoKLQkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9PUFRJT05BTDsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVdfQVVUSF9NRlBfUkVRVUlSRUQ6Ci0JCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQ7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogR2V0IHdpcmVsZXNzIHN0YXRpc3RpY3MuICBDYWxsZWQgYnkgL3Byb2MvbmV0L3dpcmVsZXNzIGFuZCBieSBTSU9DR0lXU1RBVFMgKi8KLXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqaWVlZTgwMjExX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZsb2NhbC0+d3N0YXRzOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IE5VTEw7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUubWdkLmJzc2lkKTsKLQotCWlmICghc3RhKSB7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKLQkJd3N0YXRzLT5xdWFsLnF1YWwgPSAwOwotCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAwOwotCQl3c3RhdHMtPnF1YWwubm9pc2UgPSAwOwotCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX0lOVkFMSUQ7Ci0JfSBlbHNlIHsKLQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSAwOwotCQkvKgotCQkgKiBtaXJyb3Igd2hhdCBjZmc4MDIxMSBkb2VzIGZvciBpd3JhbmdlL3NjYW4gcmVzdWx0cywKLQkJICogb3RoZXJ3aXNlIHVzZXJzcGFjZSBnZXRzIGNvbmZ1c2VkLgotCQkgKi8KLQkJaWYgKGxvY2FsLT5ody5mbGFncyAmIChJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8Ci0JCQkJICAgICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSkgewotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7Ci0JCX0gZWxzZSB7Ci0JCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7Ci0JCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQkJfQotCi0JCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykgewotCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc3RhLT5sYXN0X3NpZ25hbDsKLQkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3NpZ25hbDsKLQkJfSBlbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgewotCQkJaW50IHNpZyA9IHN0YS0+bGFzdF9zaWduYWw7Ci0KLQkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOwotCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gc2lnOwotCQkJaWYgKHNpZyA8IC0xMTApCi0JCQkJc2lnID0gLTExMDsKLQkJCWVsc2UgaWYgKHNpZyA+IC00MCkKLQkJCQlzaWcgPSAtNDA7Ci0JCQl3c3RhdHMtPnF1YWwucXVhbCA9IHNpZyArIDExMDsKLQkJfQotCi0JCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKSB7Ci0JCQkvKgotCQkJICogVGhpcyBhc3N1bWVzIHRoYXQgaWYgZHJpdmVyIHJlcG9ydHMgbm9pc2UsIGl0IGFsc28KLQkJCSAqIHJlcG9ydHMgc2lnbmFsIGluIGRCbS4KLQkJCSAqLwotCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gc3RhLT5sYXN0X25vaXNlOwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9VUERBVEVEOwotCQl9IGVsc2UgewotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOwotCQl9Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gd3N0YXRzOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpbnQgcmV0ID0gMDsKLQotCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51Lm1nZC5hdXRoX2FsZ3M7Ci0JCWVsc2UKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLQotLyogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzICovCi0KLXN0YXRpYyBjb25zdCBpd19oYW5kbGVyIGllZWU4MDIxMV9oYW5kbGVyW10gPQotewotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXQ09NTUlUICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bmFtZSwJCS8qIFNJT0NHSVdOQU1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdOV0lEICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdmcmVxLAkJLyogU0lPQ1NJV0ZSRVEgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2ZyZXEsCQkvKiBTSU9DR0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd21vZGUsCQkvKiBTSU9DU0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd21vZGUsCQkvKiBTSU9DR0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1JBTkdFICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1NQWSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdUSFJTUFkgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV1RIUlNQWSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3YXAsCQkvKiBTSU9DU0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2FwLAkJLyogU0lPQ0dJV0FQICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3bWxtZSwJCS8qIFNJT0NTSVdNTE1FICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdBUExJU1QgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdzY2FuLAkJLyogU0lPQ0dJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2Vzc2lkLAkJLyogU0lPQ1NJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdlc3NpZCwJCS8qIFNJT0NHSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DU0lXTklDS04gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZSwJCS8qIFNJT0NTSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9naXdyYXRlLAkJLyogU0lPQ0dJV1JBVEUgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdydHMsCQkvKiBTSU9DU0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cnRzLAkJLyogU0lPQ0dJV1JUUyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2ZyYWcsCQkvKiBTSU9DU0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd2ZyYWcsCQkvKiBTSU9DR0lXRlJBRyAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3R4cG93ZXIsCQkvKiBTSU9DU0lXVFhQT1cgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXd0eHBvd2VyLAkJLyogU0lPQ0dJV1RYUE9XICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3cmV0cnksCQkvKiBTSU9DU0lXUkVUUlkgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdyZXRyeSwJCS8qIFNJT0NHSVdSRVRSWSAqLwotCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2VuY29kZSwJCS8qIFNJT0NTSVdFTkNPREUgKi8KLQkoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdlbmNvZGUsCQkvKiBTSU9DR0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdwb3dlciwJCS8qIFNJT0NTSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3cG93ZXIsCQkvKiBTSU9DR0lXUE9XRVIgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdnZW5pZSwJCS8qIFNJT0NTSVdHRU5JRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXR0VOSUUgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd2F1dGgsCQkvKiBTSU9DU0lXQVVUSCAqLwotCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3YXV0aCwJCS8qIFNJT0NHSVdBVVRIICovCi0JKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3ZW5jb2RlZXh0LAkvKiBTSU9DU0lXRU5DT0RFRVhUICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdFTkNPREVFWFQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV1BNS1NBICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLX07Ci0KLWNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWYgPQotewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGllZWU4MDIxMV9oYW5kbGVyKSwKLQkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBpZWVlODAyMTFfaGFuZGxlciwKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gaWVlZTgwMjExX2dldF93aXJlbGVzc19zdGF0cywKLX07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd21lLmMgYi9uZXQvbWFjODAyMTEvd21lLmMKaW5kZXggMTE2YTkyMy4uYjE5Yjc2OSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dtZS5jCisrKyBiL25ldC9tYWM4MDIxMS93bWUuYwpAQCAtODUsMTAgKzg1LDggQEAKIAlyZXR1cm4gaWVlZTgwMl8xZF90b19hY1tza2ItPnByaW9yaXR5XTsKIH0KIAotdTE2IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2ICptcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBtcHJpdi0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJdTE2IHF1ZXVlOwogCXU4IHRpZDsKQEAgLTExMyw1ICsxMTEsNSBAQAogCQkqcCA9IDA7CiAJfQogCi0JcmV0dXJuIHF1ZXVlOworCXNrYl9zZXRfcXVldWVfbWFwcGluZyhza2IsIHF1ZXVlKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuaCBiL25ldC9tYWM4MDIxMS93bWUuaAppbmRleCA3NTIwZDJlLi5kNGZkODdjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmgKKysrIGIvbmV0L21hYzgwMjExL3dtZS5oCkBAIC0yMCw2ICsyMCw3IEBACiAKIGV4dGVybiBjb25zdCBpbnQgaWVlZTgwMl8xZF90b19hY1s4XTsKIAotdTE2IGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGllZWU4MDIxMV9zZWxlY3RfcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKICNlbmRpZiAvKiBfV01FX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCBkY2ZhZTg4Li43MDc3ODY5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC0xMjIsNyArMTIyLDggQEAKIAkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJCW1hYzgwMjExX2V2X21pY2hhZWxfbWljX2ZhaWx1cmUocngtPnNkYXRhLCByeC0+a2V5LT5jb25mLmtleWlkeCwKLQkJCQkJCSh2b2lkICopIHNrYi0+ZGF0YSwgTlVMTCk7CisJCQkJCQkodm9pZCAqKSBza2ItPmRhdGEsIE5VTEwsCisJCQkJCQlHRlBfQVRPTUlDKTsKIAkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggMjAxYjhlYS4uM2M3ZTQyNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwpAQCAtMTgsNiArMTgsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC0yNjIsMTIgKzI2NSwxMiBAQAogCWlmICh2c2VxLT5kZWx0YSB8fCB2c2VxLT5wcmV2aW91c19kZWx0YSkgewogCQlpZihhZnRlcihzZXEsIHZzZXEtPmluaXRfc2VxKSkgewogCQkJdGgtPnNlcSA9IGh0b25sKHNlcSArIHZzZXEtPmRlbHRhKTsKLQkJCUlQX1ZTX0RCRyg5LCAidnNfZml4X3NlcSgpOiBhZGRlZCBkZWx0YSAoJWQpIHRvIHNlcVxuIiwKLQkJCQkgIHZzZXEtPmRlbHRhKTsKKwkJCUlQX1ZTX0RCRyg5LCAiJXMoKTogYWRkZWQgZGVsdGEgKCVkKSB0byBzZXFcbiIsCisJCQkJICBfX2Z1bmNfXywgdnNlcS0+ZGVsdGEpOwogCQl9IGVsc2UgewogCQkJdGgtPnNlcSA9IGh0b25sKHNlcSArIHZzZXEtPnByZXZpb3VzX2RlbHRhKTsKLQkJCUlQX1ZTX0RCRyg5LCAidnNfZml4X3NlcSgpOiBhZGRlZCBwcmV2aW91c19kZWx0YSAiCi0JCQkJICAiKCVkKSB0byBzZXFcbiIsIHZzZXEtPnByZXZpb3VzX2RlbHRhKTsKKwkJCUlQX1ZTX0RCRyg5LCAiJXMoKTogYWRkZWQgcHJldmlvdXNfZGVsdGEgKCVkKSB0byBzZXFcbiIsCisJCQkJICBfX2Z1bmNfXywgdnNlcS0+cHJldmlvdXNfZGVsdGEpOwogCQl9CiAJfQogfQpAQCAtMjkxLDE0ICsyOTQsMTQgQEAKIAkJICAgdG8gcmVjZWl2ZSBuZXh0LCBzbyBjb21wYXJlIGl0IHdpdGggaW5pdF9zZXErZGVsdGEgKi8KIAkJaWYoYWZ0ZXIoYWNrX3NlcSwgdnNlcS0+aW5pdF9zZXErdnNlcS0+ZGVsdGEpKSB7CiAJCQl0aC0+YWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLT5kZWx0YSk7Ci0JCQlJUF9WU19EQkcoOSwgInZzX2ZpeF9hY2tfc2VxKCk6IHN1YnRyYWN0ZWQgZGVsdGEgIgotCQkJCSAgIiglZCkgZnJvbSBhY2tfc2VxXG4iLCB2c2VxLT5kZWx0YSk7CisJCQlJUF9WU19EQkcoOSwgIiVzKCk6IHN1YnRyYWN0ZWQgZGVsdGEgIgorCQkJCSAgIiglZCkgZnJvbSBhY2tfc2VxXG4iLCBfX2Z1bmNfXywgdnNlcS0+ZGVsdGEpOwogCiAJCX0gZWxzZSB7CiAJCQl0aC0+YWNrX3NlcSA9IGh0b25sKGFja19zZXEgLSB2c2VxLT5wcmV2aW91c19kZWx0YSk7Ci0JCQlJUF9WU19EQkcoOSwgInZzX2ZpeF9hY2tfc2VxKCk6IHN1YnRyYWN0ZWQgIgorCQkJSVBfVlNfREJHKDksICIlcygpOiBzdWJ0cmFjdGVkICIKIAkJCQkgICJwcmV2aW91c19kZWx0YSAoJWQpIGZyb20gYWNrX3NlcVxuIiwKLQkJCQkgIHZzZXEtPnByZXZpb3VzX2RlbHRhKTsKKwkJCQkgIF9fZnVuY19fLCB2c2VxLT5wcmV2aW91c19kZWx0YSk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCA3N2JmZGZlLi4yN2MzMGNmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKQEAgLTIyLDYgKzIyLDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CkBAIC0xNTAsOCArMTUzLDggQEAKIAkJYXRvbWljX2luYygmY3AtPnJlZmNudCk7CiAJCXJldCA9IDE7CiAJfSBlbHNlIHsKLQkJSVBfVlNfRVJSKCJpcF92c19jb25uX2hhc2goKTogcmVxdWVzdCBmb3IgYWxyZWFkeSBoYXNoZWQsICIKLQkJCSAgImNhbGxlZCBmcm9tICVwXG4iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQlwcl9lcnIoIiVzKCk6IHJlcXVlc3QgZm9yIGFscmVhZHkgaGFzaGVkLCBjYWxsZWQgZnJvbSAlcEZcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJcmV0ID0gMDsKIAl9CiAKQEAgLTY4OSw3ICs2OTIsNyBAQAogCiAJY3AgPSBrbWVtX2NhY2hlX3phbGxvYyhpcF92c19jb25uX2NhY2hlcCwgR0ZQX0FUT01JQyk7CiAJaWYgKGNwID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSX1JMKCJpcF92c19jb25uX25ldzogbm8gbWVtb3J5IGF2YWlsYWJsZS5cbiIpOworCQlJUF9WU19FUlJfUkwoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTEwNzMsMTAgKzEwNzYsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JSVBfVlNfSU5GTygiQ29ubmVjdGlvbiBoYXNoIHRhYmxlIGNvbmZpZ3VyZWQgIgotCQkgICAiKHNpemU9JWQsIG1lbW9yeT0lbGRLYnl0ZXMpXG4iLAotCQkgICBJUF9WU19DT05OX1RBQl9TSVpFLAotCQkgICAobG9uZykoSVBfVlNfQ09OTl9UQUJfU0laRSpzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkpLzEwMjQpOworCXByX2luZm8oIkNvbm5lY3Rpb24gaGFzaCB0YWJsZSBjb25maWd1cmVkICIKKwkJIihzaXplPSVkLCBtZW1vcnk9JWxkS2J5dGVzKVxuIiwKKwkJSVBfVlNfQ09OTl9UQUJfU0laRSwKKwkJKGxvbmcpKElQX1ZTX0NPTk5fVEFCX1NJWkUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKS8xMDI0KTsKIAlJUF9WU19EQkcoMCwgIkVhY2ggY29ubmVjdGlvbiBlbnRyeSBuZWVkcyAlWmQgYnl0ZXMgYXQgbGVhc3RcbiIsCiAJCSAgc2l6ZW9mKHN0cnVjdCBpcF92c19jb25uKSk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDhkZGRiMTcuLmI5NTY5OWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMjQsNiArMjQsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KQEAgLTM4OCw5ICszOTEsOSBAQAogCSAqLwogCWlmICghc3ZjLT5md21hcmsgJiYgcHB0clsxXSAhPSBzdmMtPnBvcnQpIHsKIAkJaWYgKCFzdmMtPnBvcnQpCi0JCQlJUF9WU19FUlIoIlNjaGVkdWxlOiBwb3J0IHplcm8gb25seSBzdXBwb3J0ZWQgIgotCQkJCSAgImluIHBlcnNpc3RlbnQgc2VydmljZXMsICIKLQkJCQkgICJjaGVjayB5b3VyIGlwdnMgY29uZmlndXJhdGlvblxuIik7CisJCQlwcl9lcnIoIlNjaGVkdWxlOiBwb3J0IHplcm8gb25seSBzdXBwb3J0ZWQgIgorCQkJICAgICAgICJpbiBwZXJzaXN0ZW50IHNlcnZpY2VzLCAiCisJCQkgICAgICAgImNoZWNrIHlvdXIgaXB2cyBjb25maWd1cmF0aW9uXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00NjIsNyArNDY1LDcgQEAKIAkJaXBfdnNfc2VydmljZV9wdXQoc3ZjKTsKIAogCQkvKiBjcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBlbnRyeSAqLwotCQlJUF9WU19EQkcoNiwgImlwX3ZzX2xlYXZlOiBjcmVhdGUgYSBjYWNoZV9ieXBhc3MgZW50cnlcbiIpOworCQlJUF9WU19EQkcoNiwgIiVzKCk6IGNyZWF0ZSBhIGNhY2hlX2J5cGFzcyBlbnRyeVxuIiwgX19mdW5jX18pOwogCQljcCA9IGlwX3ZzX2Nvbm5fbmV3KHN2Yy0+YWYsIGlwaC5wcm90b2NvbCwKIAkJCQkgICAgJmlwaC5zYWRkciwgcHB0clswXSwKIAkJCQkgICAgJmlwaC5kYWRkciwgcHB0clsxXSwKQEAgLTY2NCw4ICs2NjcsOCBAQAogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIAogCWlmIChJUF9WU19GV0RfTUVUSE9EKGNwKSAhPSAwKSB7Ci0JCUlQX1ZTX0VSUigic2hvdWxkbid0IHJlYWNoIGhlcmUsIGJlY2F1c2UgdGhlIGJveCBpcyBvbiB0aGUgIgotCQkJICAiaGFsZiBjb25uZWN0aW9uIGluIHRoZSB0dW4vZHIgbW9kdWxlLlxuIik7CisJCXByX2Vycigic2hvdWxkbid0IHJlYWNoIGhlcmUsIGJlY2F1c2UgdGhlIGJveCBpcyBvbiB0aGUgIgorCQkgICAgICAgImhhbGYgY29ubmVjdGlvbiBpbiB0aGUgdHVuL2RyIG1vZHVsZS5cbiIpOwogCX0KIAogCS8qIEVuc3VyZSB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCAqLwpAQCAtMTI1Niw3ICsxMjU5LDcgQEAKIAlzdHJ1Y3QgaXBfdnNfaXBoZHIgaXBoOwogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwotCWludCByZXQsIHJlc3RhcnQsIGFmOworCWludCByZXQsIHJlc3RhcnQsIGFmLCBwa3RzOwogCiAJYWYgPSAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpID8gQUZfSU5FVCA6IEFGX0lORVQ2OwogCkBAIC0xMjc0LDEzICsxMjc3LDI0IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KGlwaC5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApKSB7Ci0JCWludCByZWxhdGVkLCB2ZXJkaWN0ID0gaXBfdnNfaW5faWNtcChza2IsICZyZWxhdGVkLCBob29rbnVtKTsKKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgorCWlmIChhZiA9PSBBRl9JTkVUNikgeworCQlpZiAodW5saWtlbHkoaXBoLnByb3RvY29sID09IElQUFJPVE9fSUNNUFY2KSkgeworCQkJaW50IHJlbGF0ZWQsIHZlcmRpY3QgPSBpcF92c19pbl9pY21wX3Y2KHNrYiwgJnJlbGF0ZWQsIGhvb2tudW0pOwogCi0JCWlmIChyZWxhdGVkKQotCQkJcmV0dXJuIHZlcmRpY3Q7Ci0JCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKLQl9CisJCQlpZiAocmVsYXRlZCkKKwkJCQlyZXR1cm4gdmVyZGljdDsKKwkJCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKKwkJfQorCX0gZWxzZQorI2VuZGlmCisJCWlmICh1bmxpa2VseShpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSkgeworCQkJaW50IHJlbGF0ZWQsIHZlcmRpY3QgPSBpcF92c19pbl9pY21wKHNrYiwgJnJlbGF0ZWQsIGhvb2tudW0pOworCisJCQlpZiAocmVsYXRlZCkKKwkJCQlyZXR1cm4gdmVyZGljdDsKKwkJCWlwX3ZzX2ZpbGxfaXBoZHIoYWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKKwkJfQogCiAJLyogUHJvdG9jb2wgc3VwcG9ydGVkPyAqLwogCXBwID0gaXBfdnNfcHJvdG9fZ2V0KGlwaC5wcm90b2NvbCk7CkBAIC0xMzQzLDEyICsxMzU3LDEyIEBACiAJICogU3luYyBjb25uZWN0aW9uIGlmIGl0IGlzIGFib3V0IHRvIGNsb3NlIHRvCiAJICogZW5jb3JhZ2UgdGhlIHN0YW5kYnkgc2VydmVycyB0byB1cGRhdGUgdGhlIGNvbm5lY3Rpb25zIHRpbWVvdXQKIAkgKi8KLQlhdG9taWNfaW5jKCZjcC0+aW5fcGt0cyk7CisJcGt0cyA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjcC0+aW5fcGt0cyk7CiAJaWYgKGFmID09IEFGX0lORVQgJiYKIAkgICAgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIpICYmCiAJICAgICgoKGNwLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fAogCSAgICAgICBjcC0+c3RhdGUgPT0gSVBfVlNfVENQX1NfRVNUQUJMSVNIRUQpICYmCi0JICAgICAgKGF0b21pY19yZWFkKCZjcC0+aW5fcGt0cykgJSBzeXNjdGxfaXBfdnNfc3luY190aHJlc2hvbGRbMV0KKwkgICAgICAocGt0cyAlIHN5c2N0bF9pcF92c19zeW5jX3RocmVzaG9sZFsxXQogCSAgICAgICA9PSBzeXNjdGxfaXBfdnNfc3luY190aHJlc2hvbGRbMF0pKSB8fAogCSAgICAgKChjcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApICYmIChjcC0+b2xkX3N0YXRlICE9IGNwLT5zdGF0ZSkgJiYKIAkgICAgICAoKGNwLT5zdGF0ZSA9PSBJUF9WU19UQ1BfU19GSU5fV0FJVCkgfHwKQEAgLTE0ODcsNyArMTUwMSw3IEBACiAKIAlyZXQgPSBpcF92c19jb250cm9sX2luaXQoKTsKIAlpZiAocmV0IDwgMCkgewotCQlJUF9WU19FUlIoImNhbid0IHNldHVwIGNvbnRyb2wuXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCBzZXR1cCBjb250cm9sLlxuIik7CiAJCWdvdG8gY2xlYW51cF9lc3RpbWF0b3I7CiAJfQogCkBAIC0xNDk1LDIzICsxNTA5LDIzIEBACiAKIAlyZXQgPSBpcF92c19hcHBfaW5pdCgpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiY2FuJ3Qgc2V0dXAgYXBwbGljYXRpb24gaGVscGVyLlxuIik7CisJCXByX2VycigiY2FuJ3Qgc2V0dXAgYXBwbGljYXRpb24gaGVscGVyLlxuIik7CiAJCWdvdG8gY2xlYW51cF9wcm90b2NvbDsKIAl9CiAKIAlyZXQgPSBpcF92c19jb25uX2luaXQoKTsKIAlpZiAocmV0IDwgMCkgewotCQlJUF9WU19FUlIoImNhbid0IHNldHVwIGNvbm5lY3Rpb24gdGFibGUuXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCBzZXR1cCBjb25uZWN0aW9uIHRhYmxlLlxuIik7CiAJCWdvdG8gY2xlYW51cF9hcHA7CiAJfQogCiAJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXBfdnNfb3BzLCBBUlJBWV9TSVpFKGlwX3ZzX29wcykpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiY2FuJ3QgcmVnaXN0ZXIgaG9va3MuXG4iKTsKKwkJcHJfZXJyKCJjYW4ndCByZWdpc3RlciBob29rcy5cbiIpOwogCQlnb3RvIGNsZWFudXBfY29ubjsKIAl9CiAKLQlJUF9WU19JTkZPKCJpcHZzIGxvYWRlZC5cbiIpOworCXByX2luZm8oImlwdnMgbG9hZGVkLlxuIik7CiAJcmV0dXJuIHJldDsKIAogICBjbGVhbnVwX2Nvbm46CkBAIC0xNTM0LDcgKzE1NDgsNyBAQAogCWlwX3ZzX3Byb3RvY29sX2NsZWFudXAoKTsKIAlpcF92c19jb250cm9sX2NsZWFudXAoKTsKIAlpcF92c19lc3RpbWF0b3JfY2xlYW51cCgpOwotCUlQX1ZTX0lORk8oImlwdnMgdW5sb2FkZWQuXG4iKTsKKwlwcl9pbmZvKCJpcHZzIHVubG9hZGVkLlxuIik7CiB9CiAKIG1vZHVsZV9pbml0KGlwX3ZzX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IDdjMTMzM2MuLmZiYTI4OTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKQEAgLTE4LDYgKzE4LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMzQwLDggKzM0Myw4IEBACiAJdW5zaWduZWQgaGFzaDsKIAogCWlmIChzdmMtPmZsYWdzICYgSVBfVlNfU1ZDX0ZfSEFTSEVEKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfc3ZjX2hhc2goKTogcmVxdWVzdCBmb3IgYWxyZWFkeSBoYXNoZWQsICIKLQkJCSAgImNhbGxlZCBmcm9tICVwXG4iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCQlwcl9lcnIoIiVzKCk6IHJlcXVlc3QgZm9yIGFscmVhZHkgaGFzaGVkLCBjYWxsZWQgZnJvbSAlcEZcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNzQsOCArMzc3LDggQEAKIHN0YXRpYyBpbnQgaXBfdnNfc3ZjX3VuaGFzaChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogewogCWlmICghKHN2Yy0+ZmxhZ3MgJiBJUF9WU19TVkNfRl9IQVNIRUQpKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfc3ZjX3VuaGFzaCgpOiByZXF1ZXN0IGZvciB1bmhhc2ggZmxhZ2dlZCwgIgotCQkJICAiY2FsbGVkIGZyb20gJXBcbiIsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisJCXByX2VycigiJXMoKTogcmVxdWVzdCBmb3IgdW5oYXNoIGZsYWdnZWQsIGNhbGxlZCBmcm9tICVwRlxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTg0MSw3ICs4NDQsNyBAQAogCiAJZGVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF92c19kZXN0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGRlc3QgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX25ld19kZXN0OiBrbWFsbG9jIGZhaWxlZC5cbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC04ODUsMTMgKzg4OCwxMyBAQAogCUVudGVyRnVuY3Rpb24oMik7CiAKIAlpZiAodWRlc3QtPndlaWdodCA8IDApIHsKLQkJSVBfVlNfRVJSKCJpcF92c19hZGRfZGVzdCgpOiBzZXJ2ZXIgd2VpZ2h0IGxlc3MgdGhhbiB6ZXJvXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBzZXJ2ZXIgd2VpZ2h0IGxlc3MgdGhhbiB6ZXJvXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KIAogCWlmICh1ZGVzdC0+bF90aHJlc2hvbGQgPiB1ZGVzdC0+dV90aHJlc2hvbGQpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19hZGRfZGVzdCgpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gIgotCQkJICAidXBwZXIgdGhyZXNob2xkXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gdXBwZXIgdGhyZXNob2xkXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTkwMyw3ICs5MDYsNyBAQAogCWRlc3QgPSBpcF92c19sb29rdXBfZGVzdChzdmMsICZkYWRkciwgZHBvcnQpOwogCiAJaWYgKGRlc3QgIT0gTlVMTCkgewotCQlJUF9WU19EQkcoMSwgImlwX3ZzX2FkZF9kZXN0KCk6IGRlc3QgYWxyZWFkeSBleGlzdHNcbiIpOworCQlJUF9WU19EQkcoMSwgIiVzKCk6IGRlc3QgYWxyZWFkeSBleGlzdHNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FRVhJU1Q7CiAJfQogCkBAIC05OTcsMTMgKzEwMDAsMTMgQEAKIAlFbnRlckZ1bmN0aW9uKDIpOwogCiAJaWYgKHVkZXN0LT53ZWlnaHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfZWRpdF9kZXN0KCk6IHNlcnZlciB3ZWlnaHQgbGVzcyB0aGFuIHplcm9cbiIpOworCQlwcl9lcnIoIiVzKCk6IHNlcnZlciB3ZWlnaHQgbGVzcyB0aGFuIHplcm9cbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUkFOR0U7CiAJfQogCiAJaWYgKHVkZXN0LT5sX3RocmVzaG9sZCA+IHVkZXN0LT51X3RocmVzaG9sZCkgewotCQlJUF9WU19FUlIoImlwX3ZzX2VkaXRfZGVzdCgpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gIgotCQkJICAidXBwZXIgdGhyZXNob2xkXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBsb3dlciB0aHJlc2hvbGQgaXMgaGlnaGVyIHRoYW4gdXBwZXIgdGhyZXNob2xkXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTEwMTUsNyArMTAxOCw3IEBACiAJZGVzdCA9IGlwX3ZzX2xvb2t1cF9kZXN0KHN2YywgJmRhZGRyLCBkcG9ydCk7CiAKIAlpZiAoZGVzdCA9PSBOVUxMKSB7Ci0JCUlQX1ZTX0RCRygxLCAiaXBfdnNfZWRpdF9kZXN0KCk6IGRlc3QgZG9lc24ndCBleGlzdFxuIik7CisJCUlQX1ZTX0RCRygxLCAiJXMoKTogZGVzdCBkb2Vzbid0IGV4aXN0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtMTExNSw3ICsxMTE4LDcgQEAKIAlkZXN0ID0gaXBfdnNfbG9va3VwX2Rlc3Qoc3ZjLCAmdWRlc3QtPmFkZHIsIGRwb3J0KTsKIAogCWlmIChkZXN0ID09IE5VTEwpIHsKLQkJSVBfVlNfREJHKDEsICJpcF92c19kZWxfZGVzdCgpOiBkZXN0aW5hdGlvbiBub3QgZm91bmQhXG4iKTsKKwkJSVBfVlNfREJHKDEsICIlcygpOiBkZXN0aW5hdGlvbiBub3QgZm91bmQhXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtMTE2MSw4ICsxMTY0LDcgQEAKIAkvKiBMb29rdXAgdGhlIHNjaGVkdWxlciBieSAndS0+c2NoZWRfbmFtZScgKi8KIAlzY2hlZCA9IGlwX3ZzX3NjaGVkdWxlcl9nZXQodS0+c2NoZWRfbmFtZSk7CiAJaWYgKHNjaGVkID09IE5VTEwpIHsKLQkJSVBfVlNfSU5GTygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsCi0JCQkgICB1LT5zY2hlZF9uYW1lKTsKKwkJcHJfaW5mbygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsIHUtPnNjaGVkX25hbWUpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dF9tb2RfZGVjOwogCX0KQEAgLTExNzYsNyArMTE3OCw3IEBACiAKIAlzdmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VydmljZSksIEdGUF9BVE9NSUMpOwogCWlmIChzdmMgPT0gTlVMTCkgewotCQlJUF9WU19EQkcoMSwgImlwX3ZzX2FkZF9zZXJ2aWNlOiBrbWFsbG9jIGZhaWxlZC5cbiIpOworCQlJUF9WU19EQkcoMSwgIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMTI1OSw4ICsxMjYxLDcgQEAKIAkgKi8KIAlzY2hlZCA9IGlwX3ZzX3NjaGVkdWxlcl9nZXQodS0+c2NoZWRfbmFtZSk7CiAJaWYgKHNjaGVkID09IE5VTEwpIHsKLQkJSVBfVlNfSU5GTygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsCi0JCQkgICB1LT5zY2hlZF9uYW1lKTsKKwkJcHJfaW5mbygiU2NoZWR1bGVyIG1vZHVsZSBpcF92c18lcyBub3QgZm91bmRcbiIsIHUtPnNjaGVkX25hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAJb2xkX3NjaGVkID0gc2NoZWQ7CkBAIC0yMDc3LDggKzIwNzgsOCBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKGxlbiAhPSBzZXRfYXJnbGVuW1NFVF9DTURJRChjbWQpXSkgewotCQlJUF9WU19FUlIoInNldF9jdGw6IGxlbiAldSAhPSAldVxuIiwKLQkJCSAgbGVuLCBzZXRfYXJnbGVuW1NFVF9DTURJRChjbWQpXSk7CisJCXByX2Vycigic2V0X2N0bDogbGVuICV1ICE9ICV1XG4iLAorCQkgICAgICAgbGVuLCBzZXRfYXJnbGVuW1NFVF9DTURJRChjbWQpXSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjEyOSw5ICsyMTMwLDkgQEAKIAogCS8qIENoZWNrIGZvciB2YWxpZCBwcm90b2NvbDogVENQIG9yIFVEUCwgZXZlbiBmb3IgZndtYXJrIT0wICovCiAJaWYgKHVzdmMucHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgJiYgdXN2Yy5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCkgewotCQlJUF9WU19FUlIoInNldF9jdGw6IGludmFsaWQgcHJvdG9jb2w6ICVkICVwSTQ6JWQgJXNcbiIsCi0JCQkgIHVzdmMucHJvdG9jb2wsICZ1c3ZjLmFkZHIuaXAsCi0JCQkgIG50b2hzKHVzdmMucG9ydCksIHVzdmMuc2NoZWRfbmFtZSk7CisJCXByX2Vycigic2V0X2N0bDogaW52YWxpZCBwcm90b2NvbDogJWQgJXBJNDolZCAlc1xuIiwKKwkJICAgICAgIHVzdmMucHJvdG9jb2wsICZ1c3ZjLmFkZHIuaXAsCisJCSAgICAgICBudG9ocyh1c3ZjLnBvcnQpLCB1c3ZjLnNjaGVkX25hbWUpOwogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpAQCAtMjM1Niw4ICsyMzU3LDggQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICgqbGVuIDwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pIHsKLQkJSVBfVlNfRVJSKCJnZXRfY3RsOiBsZW4gJXUgPCAldVxuIiwKLQkJCSAgKmxlbiwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pOworCQlwcl9lcnIoImdldF9jdGw6IGxlbiAldSA8ICV1XG4iLAorCQkgICAgICAgKmxlbiwgZ2V0X2FyZ2xlbltHRVRfQ01ESUQoY21kKV0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MDIsNyArMjQwMyw3IEBACiAJCXNpemUgPSBzaXplb2YoKmdldCkgKwogCQkJc2l6ZW9mKHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5KSAqIGdldC0+bnVtX3NlcnZpY2VzOwogCQlpZiAoKmxlbiAhPSBzaXplKSB7Ci0JCQlJUF9WU19FUlIoImxlbmd0aDogJXUgIT0gJXVcbiIsICpsZW4sIHNpemUpOworCQkJcHJfZXJyKCJsZW5ndGg6ICV1ICE9ICV1XG4iLCAqbGVuLCBzaXplKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjQ0Miw3ICsyNDQzLDcgQEAKIAkJc2l6ZSA9IHNpemVvZigqZ2V0KSArCiAJCQlzaXplb2Yoc3RydWN0IGlwX3ZzX2Rlc3RfZW50cnkpICogZ2V0LT5udW1fZGVzdHM7CiAJCWlmICgqbGVuICE9IHNpemUpIHsKLQkJCUlQX1ZTX0VSUigibGVuZ3RoOiAldSAhPSAldVxuIiwgKmxlbiwgc2l6ZSk7CisJCQlwcl9lcnIoImxlbmd0aDogJXUgIT0gJXVcbiIsICpsZW4sIHNpemUpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zMTcwLDcgKzMxNzEsNyBAQAogCWVsc2UgaWYgKGNtZCA9PSBJUFZTX0NNRF9HRVRfQ09ORklHKQogCQlyZXBseV9jbWQgPSBJUFZTX0NNRF9TRVRfQ09ORklHOwogCWVsc2UgewotCQlJUF9WU19FUlIoInVua25vd24gR2VuZXJpYyBOZXRsaW5rIGNvbW1hbmRcbiIpOworCQlwcl9lcnIoInVua25vd24gR2VuZXJpYyBOZXRsaW5rIGNvbW1hbmRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMyMzEsMTEgKzMyMzIsMTEgQEAKIAl9CiAKIAlnZW5sbXNnX2VuZChtc2csIHJlcGx5KTsKLQlyZXQgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXQgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAJZ290byBvdXQ7CiAKIG5sYV9wdXRfZmFpbHVyZToKLQlJUF9WU19FUlIoIm5vdCBlbm91Z2ggc3BhY2UgaW4gTmV0bGluayBtZXNzYWdlXG4iKTsKKwlwcl9lcnIoIm5vdCBlbm91Z2ggc3BhY2UgaW4gTmV0bGluayBtZXNzYWdlXG4iKTsKIAlyZXQgPSAtRU1TR1NJWkU7CiAKIG91dF9lcnI6CkBAIC0zMzY2LDEzICszMzY3LDEzIEBACiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJaWYgKHJldCkgewotCQlJUF9WU19FUlIoImNhbm5vdCByZWdpc3RlciBzb2Nrb3B0LlxuIik7CisJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIHNvY2tvcHQuXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBpcF92c19nZW5sX3JlZ2lzdGVyKCk7CiAJaWYgKHJldCkgewotCQlJUF9WU19FUlIoImNhbm5vdCByZWdpc3RlciBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlLlxuIik7CisJCXByX2VycigiY2Fubm90IHJlZ2lzdGVyIEdlbmVyaWMgTmV0bGluayBpbnRlcmZhY2UuXG4iKTsKIAkJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2RoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwppbmRleCBhOWRhYzc0Li5mZTNlMTg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZGguYwpAQCAtMzUsNiArMzUsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0Nyw3ICsxNTAsNyBAQAogCXRibCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF92c19kaF9idWNrZXQpKklQX1ZTX0RIX1RBQl9TSVpFLAogCQkgICAgICBHRlBfQVRPTUlDKTsKIAlpZiAodGJsID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19kaF9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3ZjLT5zY2hlZF9kYXRhID0gdGJsOwpAQCAtMjE0LDcgKzIxNyw3IEBACiAKIAlpcF92c19maWxsX2lwaGRyKHN2Yy0+YWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfZGhfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAl0YmwgPSAoc3RydWN0IGlwX3ZzX2RoX2J1Y2tldCAqKXN2Yy0+c2NoZWRfZGF0YTsKIAlkZXN0ID0gaXBfdnNfZGhfZ2V0KHN2Yy0+YWYsIHRibCwgJmlwaC5kYWRkcik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKaW5kZXggMmViMjg2MC4uNzAyYjUzYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwpAQCAtMTEsNiArMTEsMTAgQEAKICAqIENoYW5nZXM6CiAgKgogICovCisKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCmluZGV4IDQyOGVkYmYuLjMzZTJjNzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKQEAgLTIyLDYgKzIyLDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zODIsOCArMzg1LDggQEAKIAkJcmV0ID0gcmVnaXN0ZXJfaXBfdnNfYXBwX2luYyhhcHAsIGFwcC0+cHJvdG9jb2wsIHBvcnRzW2ldKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwotCQlJUF9WU19JTkZPKCIlczogbG9hZGVkIHN1cHBvcnQgb24gcG9ydFslZF0gPSAlZFxuIiwKLQkJCSAgIGFwcC0+bmFtZSwgaSwgcG9ydHNbaV0pOworCQlwcl9pbmZvKCIlczogbG9hZGVkIHN1cHBvcnQgb24gcG9ydFslZF0gPSAlZFxuIiwKKwkJCWFwcC0+bmFtZSwgaSwgcG9ydHNbaV0pOwogCX0KIAogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGMuYwppbmRleCAzZWI1ZTI2Li5jMTc1N2YzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjLmMKQEAgLTM5LDYgKzM5LDkgQEAKICAqIG1lIHRvIHdyaXRlIHRoaXMgbW9kdWxlLgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTk5LDcgKzIwMiw3IEBACiAJaWYgKCFlbikgewogCQllbiA9IGttYWxsb2Moc2l6ZW9mKCplbiksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVuKSB7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX2xibGNfbmV3KCk6IG5vIG1lbW9yeVxuIik7CisJCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIApAQCAtMzMyLDcgKzMzNSw3IEBACiAJICovCiAJdGJsID0ga21hbGxvYyhzaXplb2YoKnRibCksIEdGUF9BVE9NSUMpOwogCWlmICh0YmwgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX2xibGNfaW5pdF9zdmMoKTogbm8gbWVtb3J5XG4iKTsKKwkJcHJfZXJyKCIlcygpOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXN2Yy0+c2NoZWRfZGF0YSA9IHRibDsKQEAgLTQ3Nyw3ICs0ODAsNyBAQAogCiAJaXBfdnNfZmlsbF9pcGhkcihzdmMtPmFmLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgJmlwaCk7CiAKLQlJUF9WU19EQkcoNiwgImlwX3ZzX2xibGNfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBGaXJzdCBsb29rIGluIG91ciBjYWNoZSAqLwogCXJlYWRfbG9jaygmc3ZjLT5zY2hlZF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggYzA0Y2U1Ni4uNzE1YjU3ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xibGNyLmMKQEAgLTM3LDYgKzM3LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDgsNyArMTExLDcgQEAKIAogCWUgPSBrbWFsbG9jKHNpemVvZigqZSksIEdGUF9BVE9NSUMpOwogCWlmIChlID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19kZXN0X3NldF9pbnNlcnQoKTogbm8gbWVtb3J5XG4iKTsKKwkJcHJfZXJyKCIlcygpOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMDIsOCArMjA1LDkgQEAKIAkJfQogCX0KIAotCUlQX1ZTX0RCR19CVUYoNiwgImlwX3ZzX2Rlc3Rfc2V0X21pbjogc2VydmVyICVzOiVkICIKKwlJUF9WU19EQkdfQlVGKDYsICIlcygpOiBzZXJ2ZXIgJXM6JWQgIgogCQkgICAgICAiYWN0aXZlY29ubnMgJWQgcmVmY250ICVkIHdlaWdodCAlZCBvdmVyaGVhZCAlZFxuIiwKKwkJICAgICAgX19mdW5jX18sCiAJCSAgICAgIElQX1ZTX0RCR19BRERSKGxlYXN0LT5hZiwgJmxlYXN0LT5hZGRyKSwKIAkJICAgICAgbnRvaHMobGVhc3QtPnBvcnQpLAogCQkgICAgICBhdG9taWNfcmVhZCgmbGVhc3QtPmFjdGl2ZWNvbm5zKSwKQEAgLTI0OSw4ICsyNTMsOSBAQAogCQl9CiAJfQogCi0JSVBfVlNfREJHX0JVRig2LCAiaXBfdnNfZGVzdF9zZXRfbWF4OiBzZXJ2ZXIgJXM6JWQgIgorCUlQX1ZTX0RCR19CVUYoNiwgIiVzKCk6IHNlcnZlciAlczolZCAiCiAJCSAgICAgICJhY3RpdmVjb25ucyAlZCByZWZjbnQgJWQgd2VpZ2h0ICVkIG92ZXJoZWFkICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywKIAkJICAgICAgSVBfVlNfREJHX0FERFIobW9zdC0+YWYsICZtb3N0LT5hZGRyKSwgbnRvaHMobW9zdC0+cG9ydCksCiAJCSAgICAgIGF0b21pY19yZWFkKCZtb3N0LT5hY3RpdmVjb25ucyksCiAJCSAgICAgIGF0b21pY19yZWFkKCZtb3N0LT5yZWZjbnQpLApAQCAtMzc0LDcgKzM3OSw3IEBACiAJaWYgKCFlbikgewogCQllbiA9IGttYWxsb2Moc2l6ZW9mKCplbiksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWVuKSB7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX2xibGNyX25ldygpOiBubyBtZW1vcnlcbiIpOworCQkJcHJfZXJyKCIlcygpOiBubyBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTUwOCw3ICs1MTMsNyBAQAogCSAqLwogCXRibCA9IGttYWxsb2Moc2l6ZW9mKCp0YmwpLCBHRlBfQVRPTUlDKTsKIAlpZiAodGJsID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19sYmxjcl9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3ZjLT5zY2hlZF9kYXRhID0gdGJsOwpAQCAtNjU0LDcgKzY1OSw3IEBACiAKIAlpcF92c19maWxsX2lwaGRyKHN2Yy0+YWYsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpLCAmaXBoKTsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfbGJsY3Jfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBGaXJzdCBsb29rIGluIG91ciBjYWNoZSAqLwogCXJlYWRfbG9jaygmc3ZjLT5zY2hlZF9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKaW5kZXggZDBkYWRjOC4uNGY2OWRiMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2xjLmMKQEAgLTE0LDYgKzE0LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCkBAIC00NCw3ICs0Nyw3IEBACiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsICpsZWFzdCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGxvaCA9IDAsIGRvaDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfbGNfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKgogCSAqIFNpbXBseSBzZWxlY3QgdGhlIHNlcnZlciB3aXRoIHRoZSBsZWFzdCBudW1iZXIgb2YKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19ucS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKaW5kZXggNjk0OTUyZC4uYzQxM2UxOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX25xLmMKQEAgLTMxLDYgKzMxLDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCkBAIC01Nyw3ICs2MCw3IEBACiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QsICpsZWFzdCA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGxvaCA9IDAsIGRvaDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfbnFfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKgogCSAqIFdlIGNhbGN1bGF0ZSB0aGUgbG9hZCBvZiBlYWNoIGRlc3Qgc2VydmVyIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG8uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jCmluZGV4IGEwMTUyMGUuLjNlNzY3MTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jCkBAIC0xMyw2ICsxMyw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTEyNCw3ICsxMjcsOCBAQAogICoJU2V0IHRpbWVvdXQgdmFsdWUgZm9yIHN0YXRlIHNwZWNpZmllZCBieSBuYW1lCiAgKi8KIGludAotaXBfdnNfc2V0X3N0YXRlX3RpbWVvdXQoaW50ICp0YWJsZSwgaW50IG51bSwgY2hhciAqKm5hbWVzLCBjaGFyICpuYW1lLCBpbnQgdG8pCitpcF92c19zZXRfc3RhdGVfdGltZW91dChpbnQgKnRhYmxlLCBpbnQgbnVtLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsCisJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgdG8pCiB7CiAJaW50IGk7CiAKQEAgLTE4MSw3ICsxODUsNyBAQAogCQkJCSZpaC0+ZGFkZHIsIG50b2hzKHBwdHJbMV0pKTsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogJXM6ICVzXG4iLCBtc2csIGJ1Zik7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgbXNnLCBidWYpOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTIxNSw3ICsyMTksNyBAQAogCQkJCSZpaC0+ZGFkZHIsIG50b2hzKHBwdHJbMV0pKTsKIAl9CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogJXM6ICVzXG4iLCBtc2csIGJ1Zik7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgbXNnLCBidWYpOwogfQogI2VuZGlmCiAKQEAgLTI1OSw3ICsyNjMsNyBAQAogI2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19FU1AKIAlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfZXNwKTsKICNlbmRpZgotCUlQX1ZTX0lORk8oIlJlZ2lzdGVyZWQgcHJvdG9jb2xzICglcylcbiIsICZwcm90b2NvbHNbMl0pOworCXByX2luZm8oIlJlZ2lzdGVyZWQgcHJvdG9jb2xzICglcylcbiIsICZwcm90b2NvbHNbMl0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fYWhfZXNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fYWhfZXNwLmMKaW5kZXggNzlmNTZjMS4uYzMwYjQzYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX2FoX2VzcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19haF9lc3AuYwpAQCAtMTAsNiArMTAsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTM4LDcgKzE0MSw3IEBACiAJCXNwcmludGYoYnVmLCAiJXMgJXBJNC0+JXBJNCIsCiAJCQlwcC0+bmFtZSwgJmloLT5zYWRkciwgJmloLT5kYWRkcik7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiSVBWUzogJXM6ICVzXG4iLCBtc2csIGJ1Zik7CisJcHJfZGVidWcoIiVzOiAlc1xuIiwgbXNnLCBidWYpOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTE1Niw3ICsxNTksNyBAQAogCQlzcHJpbnRmKGJ1ZiwgIiVzICVwSTYtPiVwSTYiLAogCQkJcHAtPm5hbWUsICZpaC0+c2FkZHIsICZpaC0+ZGFkZHIpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIklQVlM6ICVzOiAlc1xuIiwgbXNnLCBidWYpOworCXByX2RlYnVnKCIlczogJXNcbiIsIG1zZywgYnVmKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKaW5kZXggOGNiYTQxOC4uOTFkMjhlMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b190Y3AuYwpAQCAtMTMsNiArMTMsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4gICAgICAgICAgICAgICAgICAvKiBmb3IgdGNwaGRyICovCkBAIC0zNzQsNyArMzc3LDcgQEAKIAlbSVBfVlNfVENQX1NfTEFTVF0JCT0JMipIWiwKIH07CiAKLXN0YXRpYyBjaGFyICogdGNwX3N0YXRlX25hbWVfdGFibGVbSVBfVlNfVENQX1NfTEFTVCsxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0Y3Bfc3RhdGVfbmFtZV90YWJsZVtJUF9WU19UQ1BfU19MQVNUKzFdID0gewogCVtJUF9WU19UQ1BfU19OT05FXQkJPQkiTk9ORSIsCiAJW0lQX1ZTX1RDUF9TX0VTVEFCTElTSEVEXQk9CSJFU1RBQkxJU0hFRCIsCiAJW0lQX1ZTX1RDUF9TX1NZTl9TRU5UXQkJPQkiU1lOX1NFTlQiLApAQCAtNjYxLDcgKzY2NCw3IEBACiAJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9jaygmdGNwX2FwcF9sb2NrKTsKIAotCQkJSVBfVlNfREJHX0JVRig5LCAiJXM6IEJpbmRpbmcgY29ubiAlczoldS0+IgorCQkJSVBfVlNfREJHX0JVRig5LCAiJXMoKTogQmluZGluZyBjb25uICVzOiV1LT4iCiAJCQkJICAgICAgIiVzOiV1IHRvIGFwcCAlcyBvbiBwb3J0ICV1XG4iLAogCQkJCSAgICAgIF9fZnVuY19fLAogCQkJCSAgICAgIElQX1ZTX0RCR19BRERSKGNwLT5hZiwgJmNwLT5jYWRkciksCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggZDI5MzBhNy4uZTdhNjg4NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b191ZHAuYwpAQCAtMTMsNiArMTMsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDQyLDcgKzQ0NSw3IEBACiAJCQkJYnJlYWs7CiAJCQlzcGluX3VubG9jaygmdWRwX2FwcF9sb2NrKTsKIAotCQkJSVBfVlNfREJHX0JVRig5LCAiJXM6IEJpbmRpbmcgY29ubiAlczoldS0+IgorCQkJSVBfVlNfREJHX0JVRig5LCAiJXMoKTogQmluZGluZyBjb25uICVzOiV1LT4iCiAJCQkJICAgICAgIiVzOiV1IHRvIGFwcCAlcyBvbiBwb3J0ICV1XG4iLAogCQkJCSAgICAgIF9fZnVuY19fLAogCQkJCSAgICAgIElQX1ZTX0RCR19BRERSKGNwLT5hZiwgJmNwLT5jYWRkciksCkBAIC00NjksNyArNDcyLDcgQEAKIAlbSVBfVlNfVURQX1NfTEFTVF0JCT0JMipIWiwKIH07CiAKLXN0YXRpYyBjaGFyICogdWRwX3N0YXRlX25hbWVfdGFibGVbSVBfVlNfVURQX1NfTEFTVCsxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1ZHBfc3RhdGVfbmFtZV90YWJsZVtJUF9WU19VRFBfU19MQVNUKzFdID0gewogCVtJUF9WU19VRFBfU19OT1JNQUxdCQk9CSJVRFAiLAogCVtJUF9WU19VRFBfU19MQVNUXQkJPQkiQlVHISIsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3JyLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYwppbmRleCAyZDE2YWI3Li5lMjEwZjM3IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfcnIuYwpAQCAtMTksNiArMTksOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKQEAgLTQ4LDcgKzUxLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcTsKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfcnJfc2NoZWR1bGUoKTogU2NoZWR1bGluZy4uLlxuIik7CisJSVBfVlNfREJHKDYsICIlcygpOiBTY2hlZHVsaW5nLi4uXG4iLCBfX2Z1bmNfXyk7CiAKIAl3cml0ZV9sb2NrKCZzdmMtPnNjaGVkX2xvY2spOwogCXAgPSAoc3RydWN0IGxpc3RfaGVhZCAqKXN2Yy0+c2NoZWRfZGF0YTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zY2hlZC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMKaW5kZXggYTQ2YWQ5ZS4uYmJjMWFjNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NjaGVkLmMKQEAgLTE3LDYgKzE3LDkgQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiSVBWUyIKKyNkZWZpbmUgcHJfZm10KGZtdCkgS01TR19DT01QT05FTlQgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC00NCwxMSArNDcsMTEgQEAKIAlpbnQgcmV0OwogCiAJaWYgKHN2YyA9PSBOVUxMKSB7Ci0JCUlQX1ZTX0VSUigiaXBfdnNfYmluZF9zY2hlZHVsZXIoKTogc3ZjIGFyZyBOVUxMXG4iKTsKKwkJcHJfZXJyKCIlcygpOiBzdmMgYXJnIE5VTExcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChzY2hlZHVsZXIgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX2JpbmRfc2NoZWR1bGVyKCk6IHNjaGVkdWxlciBhcmcgTlVMTFxuIik7CisJCXByX2VycigiJXMoKTogc2NoZWR1bGVyIGFyZyBOVUxMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTcsNyArNjAsNyBAQAogCWlmIChzY2hlZHVsZXItPmluaXRfc2VydmljZSkgewogCQlyZXQgPSBzY2hlZHVsZXItPmluaXRfc2VydmljZShzdmMpOwogCQlpZiAocmV0KSB7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX2JpbmRfc2NoZWR1bGVyKCk6IGluaXQgZXJyb3JcbiIpOworCQkJcHJfZXJyKCIlcygpOiBpbml0IGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtNzQsMTkgKzc3LDE5IEBACiAJc3RydWN0IGlwX3ZzX3NjaGVkdWxlciAqc2NoZWQ7CiAKIAlpZiAoc3ZjID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c191bmJpbmRfc2NoZWR1bGVyKCk6IHN2YyBhcmcgTlVMTFxuIik7CisJCXByX2VycigiJXMoKTogc3ZjIGFyZyBOVUxMXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXNjaGVkID0gc3ZjLT5zY2hlZHVsZXI7CiAJaWYgKHNjaGVkID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c191bmJpbmRfc2NoZWR1bGVyKCk6IHN2YyBpc24ndCBib3VuZFxuIik7CisJCXByX2VycigiJXMoKTogc3ZjIGlzbid0IGJvdW5kXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChzY2hlZC0+ZG9uZV9zZXJ2aWNlKSB7CiAJCWlmIChzY2hlZC0+ZG9uZV9zZXJ2aWNlKHN2YykgIT0gMCkgewotCQkJSVBfVlNfRVJSKCJpcF92c191bmJpbmRfc2NoZWR1bGVyKCk6IGRvbmUgZXJyb3JcbiIpOworCQkJcHJfZXJyKCIlcygpOiBkb25lIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTEwMyw4ICsxMDYsNyBAQAogewogCXN0cnVjdCBpcF92c19zY2hlZHVsZXIgKnNjaGVkOwogCi0JSVBfVlNfREJHKDIsICJpcF92c19zY2hlZF9nZXRieW5hbWUoKTogc2NoZWRfbmFtZSBcIiVzXCJcbiIsCi0JCSAgc2NoZWRfbmFtZSk7CisJSVBfVlNfREJHKDIsICIlcygpOiBzY2hlZF9uYW1lIFwiJXNcIlxuIiwgX19mdW5jX18sIHNjaGVkX25hbWUpOwogCiAJcmVhZF9sb2NrX2JoKCZfX2lwX3ZzX3NjaGVkX2xvY2spOwogCkBAIC0xNzAsMTIgKzE3MiwxMiBAQAogCXN0cnVjdCBpcF92c19zY2hlZHVsZXIgKnNjaGVkOwogCiAJaWYgKCFzY2hlZHVsZXIpIHsKLQkJSVBfVlNfRVJSKCJyZWdpc3Rlcl9pcF92c19zY2hlZHVsZXIoKTogTlVMTCBhcmdcbiIpOworCQlwcl9lcnIoIiVzKCk6IE5VTEwgYXJnXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICghc2NoZWR1bGVyLT5uYW1lKSB7Ci0JCUlQX1ZTX0VSUigicmVnaXN0ZXJfaXBfdnNfc2NoZWR1bGVyKCk6IE5VTEwgc2NoZWR1bGVyX25hbWVcbiIpOworCQlwcl9lcnIoIiVzKCk6IE5VTEwgc2NoZWR1bGVyX25hbWVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xODcsOCArMTg5LDggQEAKIAlpZiAoIWxpc3RfZW1wdHkoJnNjaGVkdWxlci0+bl9saXN0KSkgewogCQl3cml0ZV91bmxvY2tfYmgoJl9faXBfdnNfc2NoZWRfbG9jayk7CiAJCWlwX3ZzX3VzZV9jb3VudF9kZWMoKTsKLQkJSVBfVlNfRVJSKCJyZWdpc3Rlcl9pcF92c19zY2hlZHVsZXIoKTogWyVzXSBzY2hlZHVsZXIgIgotCQkJICAiYWxyZWFkeSBsaW5rZWRcbiIsIHNjaGVkdWxlci0+bmFtZSk7CisJCXByX2VycigiJXMoKTogWyVzXSBzY2hlZHVsZXIgYWxyZWFkeSBsaW5rZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc2NoZWR1bGVyLT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMDAsOSArMjAyLDggQEAKIAkJaWYgKHN0cmNtcChzY2hlZHVsZXItPm5hbWUsIHNjaGVkLT5uYW1lKSA9PSAwKSB7CiAJCQl3cml0ZV91bmxvY2tfYmgoJl9faXBfdnNfc2NoZWRfbG9jayk7CiAJCQlpcF92c191c2VfY291bnRfZGVjKCk7Ci0JCQlJUF9WU19FUlIoInJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcigpOiBbJXNdIHNjaGVkdWxlciAiCi0JCQkJCSJhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlIHN5c3RlbVxuIiwKLQkJCQkJc2NoZWR1bGVyLT5uYW1lKTsKKwkJCXByX2VycigiJXMoKTogWyVzXSBzY2hlZHVsZXIgYWxyZWFkeSBleGlzdGVkICIKKwkJCSAgICAgICAiaW4gdGhlIHN5c3RlbVxuIiwgX19mdW5jX18sIHNjaGVkdWxlci0+bmFtZSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTIxMiw3ICsyMTMsNyBAQAogCWxpc3RfYWRkKCZzY2hlZHVsZXItPm5fbGlzdCwgJmlwX3ZzX3NjaGVkdWxlcnMpOwogCXdyaXRlX3VubG9ja19iaCgmX19pcF92c19zY2hlZF9sb2NrKTsKIAotCUlQX1ZTX0lORk8oIlslc10gc2NoZWR1bGVyIHJlZ2lzdGVyZWQuXG4iLCBzY2hlZHVsZXItPm5hbWUpOworCXByX2luZm8oIlslc10gc2NoZWR1bGVyIHJlZ2lzdGVyZWQuXG4iLCBzY2hlZHVsZXItPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjQsMTUgKzIyNSwxNSBAQAogaW50IHVucmVnaXN0ZXJfaXBfdnNfc2NoZWR1bGVyKHN0cnVjdCBpcF92c19zY2hlZHVsZXIgKnNjaGVkdWxlcikKIHsKIAlpZiAoIXNjaGVkdWxlcikgewotCQlJUF9WU19FUlIoICJ1bnJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcigpOiBOVUxMIGFyZ1xuIik7CisJCXByX2VycigiJXMoKTogTlVMTCBhcmdcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJd3JpdGVfbG9ja19iaCgmX19pcF92c19zY2hlZF9sb2NrKTsKIAlpZiAobGlzdF9lbXB0eSgmc2NoZWR1bGVyLT5uX2xpc3QpKSB7CiAJCXdyaXRlX3VubG9ja19iaCgmX19pcF92c19zY2hlZF9sb2NrKTsKLQkJSVBfVlNfRVJSKCJ1bnJlZ2lzdGVyX2lwX3ZzX3NjaGVkdWxlcigpOiBbJXNdIHNjaGVkdWxlciAiCi0JCQkgICJpcyBub3QgaW4gdGhlIGxpc3QuIGZhaWxlZFxuIiwgc2NoZWR1bGVyLT5uYW1lKTsKKwkJcHJfZXJyKCIlcygpOiBbJXNdIHNjaGVkdWxlciBpcyBub3QgaW4gdGhlIGxpc3QuIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBzY2hlZHVsZXItPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0NSw3ICsyNDYsNyBAQAogCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2RlYygpOwogCi0JSVBfVlNfSU5GTygiWyVzXSBzY2hlZHVsZXIgdW5yZWdpc3RlcmVkLlxuIiwgc2NoZWR1bGVyLT5uYW1lKTsKKwlwcl9pbmZvKCJbJXNdIHNjaGVkdWxlciB1bnJlZ2lzdGVyZWQuXG4iLCBzY2hlZHVsZXItPm5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2VkLmMKaW5kZXggMjBlNDY1Ny4uMWFiNzVhOSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NlZC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zZWQuYwpAQCAtMzUsNiArMzUsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKQEAgLTYxLDcgKzY0LDcgQEAKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgKmxlYXN0OwogCXVuc2lnbmVkIGludCBsb2gsIGRvaDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfc2VkX3NjaGVkdWxlKCk6IFNjaGVkdWxpbmcuLi5cbiIpOworCUlQX1ZTX0RCRyg2LCAiJXMoKTogU2NoZWR1bGluZy4uLlxuIiwgX19mdW5jX18pOwogCiAJLyoKIAkgKiBXZSBjYWxjdWxhdGUgdGhlIGxvYWQgb2YgZWFjaCBkZXN0IHNlcnZlciBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3NoLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYwppbmRleCA3NTcwOWViLi44ZTZjZmQzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc2guYwpAQCAtMzIsNiArMzIsOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE0NCw3ICsxNDcsNyBAQAogCXRibCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcF92c19zaF9idWNrZXQpKklQX1ZTX1NIX1RBQl9TSVpFLAogCQkgICAgICBHRlBfQVRPTUlDKTsKIAlpZiAodGJsID09IE5VTEwpIHsKLQkJSVBfVlNfRVJSKCJpcF92c19zaF9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJc3ZjLT5zY2hlZF9kYXRhID0gdGJsOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggNWM0ODM3OC4uZTE3N2YwZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC0xNyw2ICsxNyw5IEBACiAgKglKdXN0aW4gT3NzZXZvb3J0CToJRml4IGVuZGlhbiBwcm9ibGVtIG9uIHN5bmMgbWVzc2FnZSBzaXplLgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgpAQCAtMjQzLDcgKzI0Niw3IEBACiAJaWYgKCFjdXJyX3NiKSB7CiAJCWlmICghKGN1cnJfc2I9aXBfdnNfc3luY19idWZmX2NyZWF0ZSgpKSkgewogCQkJc3Bpbl91bmxvY2soJmN1cnJfc2JfbG9jayk7Ci0JCQlJUF9WU19FUlIoImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxuIik7CisJCQlwcl9lcnIoImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC00MDksNyArNDEyLDcgQEAKIAkJCWlmIChkZXN0KQogCQkJCWF0b21pY19kZWMoJmRlc3QtPnJlZmNudCk7CiAJCQlpZiAoIWNwKSB7Ci0JCQkJSVBfVlNfRVJSKCJpcF92c19jb25uX25ldyBmYWlsZWRcbiIpOworCQkJCXByX2VycigiaXBfdnNfY29ubl9uZXcgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCX0gZWxzZSBpZiAoIWNwLT5kZXN0KSB7CkBAIC01NzcsOCArNTgwLDggQEAKIAogCWFkZHIgPSBpbmV0X3NlbGVjdF9hZGRyKGRldiwgMCwgUlRfU0NPUEVfVU5JVkVSU0UpOwogCWlmICghYWRkcikKLQkJSVBfVlNfRVJSKCJZb3UgcHJvYmFibHkgbmVlZCB0byBzcGVjaWZ5IElQIGFkZHJlc3Mgb24gIgotCQkJICAibXVsdGljYXN0IGludGVyZmFjZS5cbiIpOworCQlwcl9lcnIoIllvdSBwcm9iYWJseSBuZWVkIHRvIHNwZWNpZnkgSVAgYWRkcmVzcyBvbiAiCisJCSAgICAgICAibXVsdGljYXN0IGludGVyZmFjZS5cbiIpOwogCiAJSVBfVlNfREJHKDcsICJiaW5kaW5nIHNvY2tldCB3aXRoICglcykgJXBJNFxuIiwKIAkJICBpZm5hbWUsICZhZGRyKTsKQEAgLTYwMiwxMyArNjA1LDEzIEBACiAJLyogRmlyc3QgY3JlYXRlIGEgc29ja2V0ICovCiAJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOworCQlwcl9lcnIoIkVycm9yIGR1cmluZyBjcmVhdGlvbiBvZiBzb2NrZXQ7IHRlcm1pbmF0aW5nXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKIAlyZXN1bHQgPSBzZXRfbWNhc3RfaWYoc29jay0+c2ssIGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4pOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3Igc2V0dGluZyBvdXRib3VuZCBtY2FzdCBpbnRlcmZhY2VcbiIpOworCQlwcl9lcnIoIkVycm9yIHNldHRpbmcgb3V0Ym91bmQgbWNhc3QgaW50ZXJmYWNlXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTYxNywxNCArNjIwLDE0IEBACiAKIAlyZXN1bHQgPSBiaW5kX21jYXN0aWZfYWRkcihzb2NrLCBpcF92c19tYXN0ZXJfbWNhc3RfaWZuKTsKIAlpZiAocmVzdWx0IDwgMCkgewotCQlJUF9WU19FUlIoIkVycm9yIGJpbmRpbmcgYWRkcmVzcyBvZiB0aGUgbWNhc3QgaW50ZXJmYWNlXG4iKTsKKwkJcHJfZXJyKCJFcnJvciBiaW5kaW5nIGFkZHJlc3Mgb2YgdGhlIG1jYXN0IGludGVyZmFjZVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJcmVzdWx0ID0gc29jay0+b3BzLT5jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJm1jYXN0X2FkZHIsCiAJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyKSwgMCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJSVBfVlNfRVJSKCJFcnJvciBjb25uZWN0aW5nIHRvIHRoZSBtdWx0aWNhc3QgYWRkclxuIik7CisJCXByX2VycigiRXJyb3IgY29ubmVjdGluZyB0byB0aGUgbXVsdGljYXN0IGFkZHJcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtNjQ3LDcgKzY1MCw3IEBACiAJLyogRmlyc3QgY3JlYXRlIGEgc29ja2V0ICovCiAJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOworCQlwcl9lcnIoIkVycm9yIGR1cmluZyBjcmVhdGlvbiBvZiBzb2NrZXQ7IHRlcm1pbmF0aW5nXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIAl9CiAKQEAgLTY1Nyw3ICs2NjAsNyBAQAogCXJlc3VsdCA9IHNvY2stPm9wcy0+YmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZtY2FzdF9hZGRyLAogCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUlQX1ZTX0VSUigiRXJyb3IgYmluZGluZyB0byB0aGUgbXVsdGljYXN0IGFkZHJcbiIpOworCQlwcl9lcnIoIkVycm9yIGJpbmRpbmcgdG8gdGhlIG11bHRpY2FzdCBhZGRyXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTY2Niw3ICs2NjksNyBAQAogCQkJKHN0cnVjdCBpbl9hZGRyICopICZtY2FzdF9hZGRyLnNpbl9hZGRyLAogCQkJaXBfdnNfYmFja3VwX21jYXN0X2lmbik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJSVBfVlNfRVJSKCJFcnJvciBqb2luaW5nIHRvIHRoZSBtdWx0aWNhc3QgZ3JvdXBcbiIpOworCQlwcl9lcnIoIkVycm9yIGpvaW5pbmcgdG8gdGhlIG11bHRpY2FzdCBncm91cFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC03MDYsNyArNzA5LDcgQEAKIAltc2ctPnNpemUgPSBodG9ucyhtc2ctPnNpemUpOwogCiAJaWYgKGlwX3ZzX3NlbmRfYXN5bmMoc29jaywgKGNoYXIgKiltc2csIG1zaXplKSAhPSBtc2l6ZSkKLQkJSVBfVlNfRVJSKCJpcF92c19zZW5kX2FzeW5jIGVycm9yXG4iKTsKKwkJcHJfZXJyKCJpcF92c19zZW5kX2FzeW5jIGVycm9yXG4iKTsKIH0KIAogc3RhdGljIGludApAQCAtNzM3LDkgKzc0MCw5IEBACiAJc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTsKIAlzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYjsKIAotCUlQX1ZTX0lORk8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gTUFTVEVSLCBtY2FzdF9pZm4gPSAlcywgIgotCQkgICAic3luY2lkID0gJWRcbiIsCi0JCSAgIGlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4sIGlwX3ZzX21hc3Rlcl9zeW5jaWQpOworCXByX2luZm8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gTUFTVEVSLCBtY2FzdF9pZm4gPSAlcywgIgorCQkic3luY2lkID0gJWRcbiIsCisJCWlwX3ZzX21hc3Rlcl9tY2FzdF9pZm4sIGlwX3ZzX21hc3Rlcl9zeW5jaWQpOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJd2hpbGUgKChzYiA9IHNiX2RlcXVldWUoKSkpIHsKQEAgLTc4MCw5ICs3ODMsOSBAQAogCXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aW5mbyA9IGRhdGE7CiAJaW50IGxlbjsKIAotCUlQX1ZTX0lORk8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gQkFDS1VQLCBtY2FzdF9pZm4gPSAlcywgIgotCQkgICAic3luY2lkID0gJWRcbiIsCi0JCSAgIGlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4sIGlwX3ZzX2JhY2t1cF9zeW5jaWQpOworCXByX2luZm8oInN5bmMgdGhyZWFkIHN0YXJ0ZWQ6IHN0YXRlID0gQkFDS1VQLCBtY2FzdF9pZm4gPSAlcywgIgorCQkic3luY2lkID0gJWRcbiIsCisJCWlwX3ZzX2JhY2t1cF9tY2FzdF9pZm4sIGlwX3ZzX2JhY2t1cF9zeW5jaWQpOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCp0aW5mby0+c29jay0+c2stPnNrX3NsZWVwLApAQCAtNzk0LDcgKzc5Nyw3IEBACiAJCQlsZW4gPSBpcF92c19yZWNlaXZlKHRpbmZvLT5zb2NrLCB0aW5mby0+YnVmLAogCQkJCQlzeW5jX3JlY3ZfbWVzZ19tYXhsZW4pOwogCQkJaWYgKGxlbiA8PSAwKSB7Ci0JCQkJSVBfVlNfRVJSKCJyZWNlaXZpbmcgbWVzc2FnZSBlcnJvclxuIik7CisJCQkJcHJfZXJyKCJyZWNlaXZpbmcgbWVzc2FnZSBlcnJvclxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTgyNCw3ICs4MjcsNyBAQAogCWludCAoKnRocmVhZGZuKSh2b2lkICpkYXRhKTsKIAlpbnQgcmVzdWx0ID0gLUVOT01FTTsKIAotCUlQX1ZTX0RCRyg3LCAiJXM6IHBpZCAlZFxuIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKKwlJUF9WU19EQkcoNywgIiVzKCk6IHBpZCAlZFxuIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAlJUF9WU19EQkcoNywgIkVhY2ggaXBfdnNfc3luY19jb25uIGVudHJ5IG5lZWRzICVaZCBieXRlc1xuIiwKIAkJICBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubikpOwogCkBAIC05MDEsMTQgKzkwNCwxNCBAQAogCiBpbnQgc3RvcF9zeW5jX3RocmVhZChpbnQgc3RhdGUpCiB7Ci0JSVBfVlNfREJHKDcsICIlczogcGlkICVkXG4iLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkpOworCUlQX1ZTX0RCRyg3LCAiJXMoKTogcGlkICVkXG4iLCBfX2Z1bmNfXywgdGFza19waWRfbnIoY3VycmVudCkpOwogCiAJaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikgewogCQlpZiAoIXN5bmNfbWFzdGVyX3RocmVhZCkKIAkJCXJldHVybiAtRVNSQ0g7CiAKLQkJSVBfVlNfSU5GTygic3RvcHBpbmcgbWFzdGVyIHN5bmMgdGhyZWFkICVkIC4uLlxuIiwKLQkJCSAgIHRhc2tfcGlkX25yKHN5bmNfbWFzdGVyX3RocmVhZCkpOworCQlwcl9pbmZvKCJzdG9wcGluZyBtYXN0ZXIgc3luYyB0aHJlYWQgJWQgLi4uXG4iLAorCQkJdGFza19waWRfbnIoc3luY19tYXN0ZXJfdGhyZWFkKSk7CiAKIAkJLyoKIAkJICogVGhlIGxvY2sgc3luY2hyb25pemVzIHdpdGggc2JfcXVldWVfdGFpbCgpLCBzbyB0aGF0IHdlIGRvbid0CkBAIC05MjUsOCArOTI4LDggQEAKIAkJaWYgKCFzeW5jX2JhY2t1cF90aHJlYWQpCiAJCQlyZXR1cm4gLUVTUkNIOwogCi0JCUlQX1ZTX0lORk8oInN0b3BwaW5nIGJhY2t1cCBzeW5jIHRocmVhZCAlZCAuLi5cbiIsCi0JCQkgICB0YXNrX3BpZF9ucihzeW5jX2JhY2t1cF90aHJlYWQpKTsKKwkJcHJfaW5mbygic3RvcHBpbmcgYmFja3VwIHN5bmMgdGhyZWFkICVkIC4uLlxuIiwKKwkJCXRhc2tfcGlkX25yKHN5bmNfYmFja3VwX3RocmVhZCkpOwogCiAJCWlwX3ZzX3N5bmNfc3RhdGUgJj0gfklQX1ZTX1NUQVRFX0JBQ0tVUDsKIAkJa3RocmVhZF9zdG9wKHN5bmNfYmFja3VwX3RocmVhZCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd2xjLmMKaW5kZXggOGU5NDI1Ni4uYmJkZGZkYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dsYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193bGMuYwpAQCAtMTksNiArMTksOSBAQAogICoKICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJJUFZTIgorI2RlZmluZSBwcl9mbXQoZm10KSBLTVNHX0NPTVBPTkVOVCAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c193cnIuYwppbmRleCBmN2Q3NGVmLi42MTgyZThlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfd3JyLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3dyci5jCkBAIC0xOCw2ICsxOCw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KQEAgLTc0LDExICs3NywxMiBAQAogc3RhdGljIGludCBpcF92c193cnJfbWF4X3dlaWdodChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogewogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OwotCWludCB3ZWlnaHQgPSAwOworCWludCBuZXdfd2VpZ2h0LCB3ZWlnaHQgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXN0LCAmc3ZjLT5kZXN0aW5hdGlvbnMsIG5fbGlzdCkgewotCQlpZiAoYXRvbWljX3JlYWQoJmRlc3QtPndlaWdodCkgPiB3ZWlnaHQpCi0JCQl3ZWlnaHQgPSBhdG9taWNfcmVhZCgmZGVzdC0+d2VpZ2h0KTsKKwkJbmV3X3dlaWdodCA9IGF0b21pY19yZWFkKCZkZXN0LT53ZWlnaHQpOworCQlpZiAobmV3X3dlaWdodCA+IHdlaWdodCkKKwkJCXdlaWdodCA9IG5ld193ZWlnaHQ7CiAJfQogCiAJcmV0dXJuIHdlaWdodDsKQEAgLTk0LDcgKzk4LDcgQEAKIAkgKi8KIAltYXJrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwX3ZzX3dycl9tYXJrKSwgR0ZQX0FUT01JQyk7CiAJaWYgKG1hcmsgPT0gTlVMTCkgewotCQlJUF9WU19FUlIoImlwX3ZzX3dycl9pbml0X3N2YygpOiBubyBtZW1vcnlcbiIpOworCQlwcl9lcnIoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWFyay0+Y2wgPSAmc3ZjLT5kZXN0aW5hdGlvbnM7CkBAIC0xNDEsNyArMTQ1LDcgQEAKIAlzdHJ1Y3QgaXBfdnNfd3JyX21hcmsgKm1hcmsgPSBzdmMtPnNjaGVkX2RhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAotCUlQX1ZTX0RCRyg2LCAiaXBfdnNfd3JyX3NjaGVkdWxlKCk6IFNjaGVkdWxpbmcuLi5cbiIpOworCUlQX1ZTX0RCRyg2LCAiJXMoKTogU2NoZWR1bGluZy4uLlxuIiwgX19mdW5jX18pOwogCiAJLyoKIAkgKiBUaGlzIGxvb3Agd2lsbCBhbHdheXMgdGVybWluYXRlLCBiZWNhdXNlIG1hcmstPmN3IGluICgwLCBtYXhfd2VpZ2h0XQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKaW5kZXggNTg3NDY1Ny4uMzBiMzE4OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCkBAIC0xMyw2ICsxMyw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgIklQVlMiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4gICAgICAgICAgICAgICAgICAvKiBmb3IgdGNwaGRyICovCiAjaW5jbHVkZSA8bmV0L2lwLmg+CkBAIC0yMzUsOCArMjM4LDggQEAKIAlFbnRlckZ1bmN0aW9uKDEwKTsKIAogCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfYnlwYXNzX3htaXQoKTogaXBfcm91dGVfb3V0cHV0IGVycm9yLCBkZXN0OiAlcEk0XG4iLAotCQkJICAgICAmaXBoLT5kYWRkcik7CisJCUlQX1ZTX0RCR19STCgiJXMoKTogaXBfcm91dGVfb3V0cHV0IGVycm9yLCBkZXN0OiAlcEk0XG4iLAorCQkJICAgICBfX2Z1bmNfXywgJmlwaC0+ZGFkZHIpOwogCQlnb3RvIHR4X2Vycm9yX2ljbXA7CiAJfQogCkBAIC0yNDUsNyArMjQ4LDcgQEAKIAlpZiAoKHNrYi0+bGVuID4gbXR1KSAmJiAoaXBoLT5mcmFnX29mZiAmIGh0b25zKElQX0RGKSkpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfYnlwYXNzX3htaXQoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC0yOTksOCArMzAyLDggQEAKIAogCXJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWlwNl9yb3V0ZV9vdXRwdXQoJmluaXRfbmV0LCBOVUxMLCAmZmwpOwogCWlmICghcnQpIHsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19ieXBhc3NfeG1pdF92NigpOiBpcDZfcm91dGVfb3V0cHV0IGVycm9yLCBkZXN0OiAlcEk2XG4iLAotCQkJICAgICAmaXBoLT5kYWRkcik7CisJCUlQX1ZTX0RCR19STCgiJXMoKTogaXA2X3JvdXRlX291dHB1dCBlcnJvciwgZGVzdDogJXBJNlxuIiwKKwkJCSAgICAgX19mdW5jX18sICZpcGgtPmRhZGRyKTsKIAkJZ290byB0eF9lcnJvcl9pY21wOwogCX0KIApAQCAtMzA5LDcgKzMxMiw3IEBACiAJaWYgKHNrYi0+bGVuID4gbXR1KSB7CiAJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHNrYi0+ZGV2KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19ieXBhc3NfeG1pdF92NigpOiBmcmFnIG5lZWRlZFxuIik7CisJCUlQX1ZTX0RCR19STCgiJXMoKTogZnJhZyBuZWVkZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byB0eF9lcnJvcjsKIAl9CiAKQEAgLTUzNiw5ICs1MzksOSBAQAogCUVudGVyRnVuY3Rpb24oMTApOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSB7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfdHVubmVsX3htaXQoKTogcHJvdG9jb2wgZXJyb3IsICIKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBwcm90b2NvbCBlcnJvciwgIgogCQkJICAgICAiRVRIX1BfSVA6ICVkLCBza2IgcHJvdG9jb2w6ICVkXG4iLAotCQkJICAgICBodG9ucyhFVEhfUF9JUCksIHNrYi0+cHJvdG9jb2wpOworCQkJICAgICBfX2Z1bmNfXywgaHRvbnMoRVRIX1BfSVApLCBza2ItPnByb3RvY29sKTsKIAkJZ290byB0eF9lcnJvcjsKIAl9CiAKQEAgLTU1MCw3ICs1NTMsNyBAQAogCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCkgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAlpZiAobXR1IDwgNjgpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c190dW5uZWxfeG1pdCgpOiBtdHUgbGVzcyB0aGFuIDY4XG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBtdHUgbGVzcyB0aGFuIDY4XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCWlmIChza2JfZHN0KHNrYikpCkBAIC01NjIsNyArNTY1LDcgQEAKIAkgICAgJiYgbXR1IDwgbnRvaHMob2xkX2lwaC0+dG90X2xlbikpIHsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7CiAJCWlwX3J0X3B1dChydCk7Ci0JCUlQX1ZTX0RCR19STCgiaXBfdnNfdHVubmVsX3htaXQoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC01NzgsNyArNTgxLDcgQEAKIAkJaWYgKCFuZXdfc2tiKSB7CiAJCQlpcF9ydF9wdXQocnQpOwogCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlJUF9WU19FUlJfUkwoImlwX3ZzX3R1bm5lbF94bWl0KCk6IG5vIG1lbW9yeVxuIik7CisJCQlJUF9WU19FUlJfUkwoIiVzKCk6IG5vIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIE5GX1NUT0xFTjsKIAkJfQogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTY0Niw5ICs2NDksOSBAQAogCUVudGVyRnVuY3Rpb24oMTApOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKLQkJSVBfVlNfREJHX1JMKCJpcF92c190dW5uZWxfeG1pdF92NigpOiBwcm90b2NvbCBlcnJvciwgIgorCQlJUF9WU19EQkdfUkwoIiVzKCk6IHByb3RvY29sIGVycm9yLCAiCiAJCQkgICAgICJFVEhfUF9JUFY2OiAlZCwgc2tiIHByb3RvY29sOiAlZFxuIiwKLQkJCSAgICAgaHRvbnMoRVRIX1BfSVBWNiksIHNrYi0+cHJvdG9jb2wpOworCQkJICAgICBfX2Z1bmNfXywgaHRvbnMoRVRIX1BfSVBWNiksIHNrYi0+cHJvdG9jb2wpOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtNjYyLDcgKzY2NSw3IEBACiAJLyogVE9ETyBJUHY2OiBkbyB3ZSBuZWVkIHRoaXMgY2hlY2sgaW4gSVB2Nj8gKi8KIAlpZiAobXR1IDwgMTI4MCkgewogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c190dW5uZWxfeG1pdF92NigpOiBtdHUgbGVzcyB0aGFuIDEyODBcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IG10dSBsZXNzIHRoYW4gMTI4MFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIAlpZiAoc2tiX2RzdChza2IpKQpAQCAtNjcxLDcgKzY3NCw3IEBACiAJaWYgKG10dSA8IG50b2hzKG9sZF9pcGgtPnBheWxvYWRfbGVuKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpIHsKIAkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CiAJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwotCQlJUF9WU19EQkdfUkwoImlwX3ZzX3R1bm5lbF94bWl0X3Y2KCk6IGZyYWcgbmVlZGVkXG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtNjg3LDcgKzY5MCw3IEBACiAJCWlmICghbmV3X3NrYikgewogCQkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCUlQX1ZTX0VSUl9STCgiaXBfdnNfdHVubmVsX3htaXRfdjYoKTogbm8gbWVtb3J5XG4iKTsKKwkJCUlQX1ZTX0VSUl9STCgiJXMoKTogbm8gbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gTkZfU1RPTEVOOwogCQl9CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNzYwLDcgKzc2Myw3IEBACiAJaWYgKChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKSAmJiBza2ItPmxlbiA+IG10dSkgewogCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCxJQ01QX0ZSQUdfTkVFREVELCBodG9ubChtdHUpKTsKIAkJaXBfcnRfcHV0KHJ0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19kcl94bWl0KCk6IGZyYWcgbmVlZGVkXG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtODEzLDcgKzgxNiw3IEBACiAJaWYgKHNrYi0+bGVuID4gbXR1KSB7CiAJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOwogCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKLQkJSVBfVlNfREJHX1JMKCJpcF92c19kcl94bWl0X3Y2KCk6IGZyYWcgbmVlZGVkXG4iKTsKKwkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KIApAQCAtODg4LDcgKzg5MSw3IEBACiAJaWYgKChza2ItPmxlbiA+IG10dSkgJiYgKGlwX2hkcihza2IpLT5mcmFnX29mZiAmIGh0b25zKElQX0RGKSkpIHsKIAkJaXBfcnRfcHV0KHJ0KTsKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfRlJBR19ORUVERUQsIGh0b25sKG10dSkpOwotCQlJUF9WU19EQkdfUkwoImlwX3ZzX2luX2ljbXAoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCkBAIC05NjMsNyArOTY2LDcgQEAKIAlpZiAoc2tiLT5sZW4gPiBtdHUpIHsKIAkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CiAJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOwotCQlJUF9WU19EQkdfUkwoImlwX3ZzX2luX2ljbXAoKTogZnJhZyBuZWVkZWRcbiIpOworCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggYjU4NjliOS4uYjM3MTA5OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtNDcsNyArNDcsNyBAQAogCiBpbnQgKCpuZm5ldGxpbmtfcGFyc2VfbmF0X3NldHVwX2hvb2spKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwLAotCQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKmF0dHIpIF9fcmVhZF9tb3N0bHk7CisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cikgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19wYXJzZV9uYXRfc2V0dXBfaG9vayk7CiAKIERFRklORV9TUElOTE9DSyhuZl9jb25udHJhY2tfbG9jayk7CkBAIC0xMDg5LDE0ICsxMDg5LDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfZmx1c2hfcmVwb3J0KTsKIAotc3RhdGljIHZvaWQgbmZfY3RfcmVsZWFzZV9keWluZ19saXN0KHZvaWQpCitzdGF0aWMgdm9pZCBuZl9jdF9yZWxlYXNlX2R5aW5nX2xpc3Qoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmaW5pdF9uZXQuY3QuZHlpbmcsIGhubm9kZSkgeworCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0LmR5aW5nLCBobm5vZGUpIHsKIAkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQkvKiBuZXZlciBmYWlscyB0byByZW1vdmUgdGhlbSwgbm8gbGlzdGVuZXJzIGF0IHRoaXMgcG9pbnQgKi8KIAkJbmZfY3Rfa2lsbChjdCk7CkBAIC0xMTE1LDcgKzExMTUsNyBAQAogewogIGlfc2VlX2RlYWRfcGVvcGxlOgogCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChuZXQsIGtpbGxfYWxsLCBOVUxMKTsKLQluZl9jdF9yZWxlYXNlX2R5aW5nX2xpc3QoKTsKKwluZl9jdF9yZWxlYXNlX2R5aW5nX2xpc3QobmV0KTsKIAlpZiAoYXRvbWljX3JlYWQoJm5ldC0+Y3QuY291bnQpICE9IDApIHsKIAkJc2NoZWR1bGUoKTsKIAkJZ290byBpX3NlZV9kZWFkX3Blb3BsZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA0OTQ3OWQxLi41OWQ4MDY0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC03MDQsNyArNzA0LDggQEAKIH0KIAogc3RhdGljIGludAotY3RuZXRsaW5rX3BhcnNlX3R1cGxlKHN0cnVjdCBubGF0dHIgKmNkYVtdLCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKK2N0bmV0bGlua19wYXJzZV90dXBsZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCisJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkgICAgICBlbnVtIGN0YXR0cl90dXBsZSB0eXBlLCB1X2ludDhfdCBsM251bSkKIHsKIAlzdHJ1Y3QgbmxhdHRyICp0YltDVEFfVFVQTEVfTUFYKzFdOwpAQCAtNzQwLDcgKzc0MSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1jdG5ldGxpbmtfcGFyc2VfaGVscChzdHJ1Y3QgbmxhdHRyICphdHRyLCBjaGFyICoqaGVscGVyX25hbWUpCitjdG5ldGxpbmtfcGFyc2VfaGVscChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBjaGFyICoqaGVscGVyX25hbWUpCiB7CiAJc3RydWN0IG5sYXR0ciAqdGJbQ1RBX0hFTFBfTUFYKzFdOwogCkBAIC03NjQsNyArNzY1LDggQEAKIAogc3RhdGljIGludAogY3RuZXRsaW5rX2RlbF9jb25udHJhY2soc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCisJCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJCWNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKQEAgLTgyMyw3ICs4MjUsOCBAQAogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZ2V0X2Nvbm50cmFjayhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKKwkJCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwpAQCAtODg0LDcgKzg4Nyw3IEBACiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfcGFyc2VfbmF0X3NldHVwKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCwKLQkJCSAgc3RydWN0IG5sYXR0ciAqYXR0cikKKwkJCSAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cikKIHsKIAl0eXBlb2YobmZuZXRsaW5rX3BhcnNlX25hdF9zZXR1cF9ob29rKSBwYXJzZV9uYXRfc2V0dXA7CiAKQEAgLTkxNCw3ICs5MTcsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQKLWN0bmV0bGlua19jaGFuZ2Vfc3RhdHVzKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCitjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAl1bnNpZ25lZCBsb25nIGQ7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1NUQVRVU10pKTsKQEAgLTk0MCw3ICs5NDMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1jdG5ldGxpbmtfY2hhbmdlX25hdChzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorY3RuZXRsaW5rX2NoYW5nZV9uYXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAlpbnQgcmV0OwpAQCAtOTY2LDcgKzk2OSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1jdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorY3RuZXRsaW5rX2NoYW5nZV9oZWxwZXIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKQEAgLTEwMjgsNyArMTAzMSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1jdG5ldGxpbmtfY2hhbmdlX3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAl1X2ludDMyX3QgdGltZW91dCA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1RJTUVPVVRdKSk7CiAKQEAgLTEwNDIsOSArMTA0NSwxMCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfcHJvdG9pbmZvKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewotCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9QUk9UT0lORk9fTUFYKzFdLCAqYXR0ciA9IGNkYVtDVEFfUFJPVE9JTkZPXTsKKwljb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyID0gY2RhW0NUQV9QUk9UT0lORk9dOworCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9QUk9UT0lORk9fTUFYKzFdOwogCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKIAlpbnQgZXJyID0gMDsKIApAQCAtMTA2MSw3ICsxMDY1LDcgQEAKIAogI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECiBzdGF0aWMgaW5saW5lIGludAotY2hhbmdlX25hdF9zZXFfYWRqKHN0cnVjdCBuZl9uYXRfc2VxICpuYXRzZXEsIHN0cnVjdCBubGF0dHIgKmF0dHIpCitjaGFuZ2VfbmF0X3NlcV9hZGooc3RydWN0IG5mX25hdF9zZXEgKm5hdHNlcSwgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGF0dHIpCiB7CiAJc3RydWN0IG5sYXR0ciAqY2RhW0NUQV9OQVRfU0VRX01BWCsxXTsKIApAQCAtMTA4OSw3ICsxMDkzLDggQEAKIH0KIAogc3RhdGljIGludAotY3RuZXRsaW5rX2NoYW5nZV9uYXRfc2VxX2FkaihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorY3RuZXRsaW5rX2NoYW5nZV9uYXRfc2VxX2FkaihzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgbmZfY29ubl9uYXQgKm5hdCA9IG5mY3RfbmF0KGN0KTsKQEAgLTExMjAsNyArMTEyNSw4IEBACiAjZW5kaWYKIAogc3RhdGljIGludAotY3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfY29ubnRyYWNrKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlpbnQgZXJyOwogCkBAIC0xMTY5LDcgKzExNzUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKgotY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IG5sYXR0ciAqY2RhW10sCitjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvdHVwbGUsCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpydHVwbGUsCiAJCQkgICB1OCB1MykKQEAgLTEzMDQsNyArMTMxMCw4IEBACiAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19uZXdfY29ubnRyYWNrKHN0cnVjdCBzb2NrICpjdG5sLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCQljb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBvdHVwbGUsIHJ0dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmggPSBOVUxMOwpAQCAtMTYyOSw3ICsxNjM2LDggQEAKIAogc3RhdGljIGludAogY3RuZXRsaW5rX2dldF9leHBlY3Qoc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKmNkYVtdKQorCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CkBAIC0xNjg5LDcgKzE2OTcsOCBAQAogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCisJCSAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCSAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKQEAgLTE3NjcsMTMgKzE3NzYsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBpbnQKLWN0bmV0bGlua19jaGFuZ2VfZXhwZWN0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp4LCBzdHJ1Y3QgbmxhdHRyICpjZGFbXSkKK2N0bmV0bGlua19jaGFuZ2VfZXhwZWN0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp4LAorCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAogc3RhdGljIGludAotY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3Qoc3RydWN0IG5sYXR0ciAqY2RhW10sIHVfaW50OF90IHUzLCB1MzIgcGlkLCBpbnQgcmVwb3J0KQorY3RuZXRsaW5rX2NyZWF0ZV9leHBlY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLCB1X2ludDhfdCB1MywKKwkJCXUzMiBwaWQsIGludCByZXBvcnQpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZSwgbWFzaywgbWFzdGVyX3R1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaCA9IE5VTEw7CkBAIC0xODMxLDcgKzE4NDIsOCBAQAogCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfbmV3X2V4cGVjdChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqY2RhW10pCisJCSAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCSAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IDkyNzYxYTkuLmVlZGMwYzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAotCQllcnIgPSBuYy0+Y2FsbChuZm5sLCBza2IsIG5saCwgY2RhKTsKKwkJZXJyID0gbmMtPmNhbGwobmZubCwgc2tiLCBubGgsIChjb25zdCBzdHJ1Y3QgbmxhdHRyICoqKWNkYSk7CiAJCWlmIChlcnIgPT0gLUVBR0FJTikKIAkJCWdvdG8gcmVwbGF5OwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCA2NmE2ZGQ1Li5mOTAwZGMzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtNjk0LDcgKzY5NCw4IEBACiAKIHN0YXRpYyBpbnQKIG5mdWxubF9yZWN2X3Vuc3VwcChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqbmZxYVtdKQorCQkgICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5mcWFbXSkKIHsKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQpAQCAtNzE2LDcgKzcxNyw4IEBACiAKIHN0YXRpYyBpbnQKIG5mdWxubF9yZWN2X2NvbmZpZyhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mdWxhW10pCisJCSAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZ1bGFbXSkKIHsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gTkxNU0dfREFUQShubGgpOwogCXVfaW50MTZfdCBncm91cF9udW0gPSBudG9ocyhuZm1zZy0+cmVzX2lkKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCmluZGV4IDcxZGFhMDkuLjdhOWRlYzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYwpAQCAtNjA4LDcgKzYwOCw4IEBACiAKIHN0YXRpYyBpbnQKIG5mcW5sX3JlY3ZfdmVyZGljdChzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mcWFbXSkKKwkJICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCSAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBuZnFhW10pCiB7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IE5MTVNHX0RBVEEobmxoKTsKIAl1X2ludDE2X3QgcXVldWVfbnVtID0gbnRvaHMobmZtc2ctPnJlc19pZCk7CkBAIC02NzAsNyArNjcxLDggQEAKIAogc3RhdGljIGludAogbmZxbmxfcmVjdl91bnN1cHAoc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mcWFbXSkKKwkJICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKQogewogCXJldHVybiAtRU5PVFNVUFA7CiB9CkBAIC02ODcsNyArNjg5LDggQEAKIAogc3RhdGljIGludAogbmZxbmxfcmVjdl9jb25maWcoc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKm5mcWFbXSkKKwkJICBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmZxYVtdKQogewogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBOTE1TR19EQVRBKG5saCk7CiAJdV9pbnQxNl90IHF1ZXVlX251bSA9IG50b2hzKG5mbXNnLT5yZXNfaWQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IDAyNWQxYTAuLmE2YWM4M2EgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTczNiwxNiArNzM2LDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9yZXBsYWNlX3RhYmxlKTsKIAotc3RydWN0IHh0X3RhYmxlICp4dF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCitzdHJ1Y3QgeHRfdGFibGUgKnh0X3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKmlucHV0X3RhYmxlLAogCQkJCSAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpib290c3RyYXAsCiAJCQkJICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKLQlzdHJ1Y3QgeHRfdGFibGUgKnQ7CisJc3RydWN0IHh0X3RhYmxlICp0LCAqdGFibGU7CiAKIAkvKiBEb24ndCBhZGQgb25lIG9iamVjdCB0byBtdWx0aXBsZSBsaXN0cy4gKi8KLQl0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihzdHJ1Y3QgeHRfdGFibGUpLCBHRlBfS0VSTkVMKTsKKwl0YWJsZSA9IGttZW1kdXAoaW5wdXRfdGFibGUsIHNpemVvZihzdHJ1Y3QgeHRfdGFibGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRhYmxlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jCmluZGV4IGQ2ZTVhYjQuLjU5MzQ1NzAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmMKQEAgLTM2LDQ1ICszNiw2IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWNvbm5tYXJrX3RnX3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQlzdHJ1Y3QgbmZfY29ubiAqY3Q7Ci0JZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87Ci0JdV9pbnQzMl90IGRpZmY7Ci0JdV9pbnQzMl90IG1hcms7Ci0JdV9pbnQzMl90IG5ld21hcms7Ci0KLQljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwotCWlmIChjdCkgewotCQlzd2l0Y2gobWFya2luZm8tPm1vZGUpIHsKLQkJY2FzZSBYVF9DT05OTUFSS19TRVQ6Ci0JCQluZXdtYXJrID0gKGN0LT5tYXJrICYgfm1hcmtpbmZvLT5tYXNrKSB8IG1hcmtpbmZvLT5tYXJrOwotCQkJaWYgKG5ld21hcmsgIT0gY3QtPm1hcmspIHsKLQkJCQljdC0+bWFyayA9IG5ld21hcms7Ci0JCQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfTUFSSywgY3QpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgWFRfQ09OTk1BUktfU0FWRToKLQkJCW5ld21hcmsgPSAoY3QtPm1hcmsgJiB+bWFya2luZm8tPm1hc2spIHwKLQkJCQkgIChza2ItPm1hcmsgJiBtYXJraW5mby0+bWFzayk7Ci0JCQlpZiAoY3QtPm1hcmsgIT0gbmV3bWFyaykgewotCQkJCWN0LT5tYXJrID0gbmV3bWFyazsKLQkJCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9NQVJLLCBjdCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBYVF9DT05OTUFSS19SRVNUT1JFOgotCQkJbWFyayA9IHNrYi0+bWFyazsKLQkJCWRpZmYgPSAoY3QtPm1hcmsgXiBtYXJrKSAmIG1hcmtpbmZvLT5tYXNrOwotCQkJc2tiLT5tYXJrID0gbWFyayBeIGRpZmY7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAogY29ubm1hcmtfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF9jb25ubWFya190Z2luZm8xICppbmZvID0gcGFyLT50YXJnaW5mbzsKQEAgLTExMiwzMCArNzMsNiBAQAogCXJldHVybiBYVF9DT05USU5VRTsKIH0KIAotc3RhdGljIGJvb2wgY29ubm1hcmtfdGdfY2hlY2tfdjAoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvICptYXRjaGluZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKG1hdGNoaW5mby0+bW9kZSA9PSBYVF9DT05OTUFSS19SRVNUT1JFKSB7Ci0JCWlmIChzdHJjbXAocGFyLT50YWJsZSwgIm1hbmdsZSIpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTk5NQVJLOiByZXN0b3JlIGNhbiBvbmx5IGJlICIKLQkJCSAgICAgICAiY2FsbGVkIGZyb20gXCJtYW5nbGVcIiB0YWJsZSwgbm90IFwiJXNcIlxuIiwKLQkJCSAgICAgICBwYXItPnRhYmxlKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQlpZiAobWF0Y2hpbmZvLT5tYXJrID4gMHhmZmZmZmZmZiB8fCBtYXRjaGluZm8tPm1hc2sgPiAweGZmZmZmZmZmKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNPTk5NQVJLOiBPbmx5IHN1cHBvcnRzIDMyYml0IG1hcmtcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHBhci0+ZmFtaWx5KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2FuJ3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgIgotCQkJCSAgICAicHJvdG89JXVcbiIsIHBhci0+ZmFtaWx5KTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGJvb2wgY29ubm1hcmtfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCiB7CiAJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQocGFyLT5mYW1pbHkpIDwgMCkgewpAQCAtMTUxLDc0ICs4OCwyNSBAQAogCW5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dChwYXItPmZhbWlseSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKLQljb21wYXRfdWxvbmdfdAltYXJrLCBtYXNrOwotCXVfaW50OF90CW1vZGU7Ci0JdV9pbnQ4X3QJX19wYWQxOwotCXVfaW50MTZfdAlfX3BhZDI7Ci19OwotCi1zdGF0aWMgdm9pZCBjb25ubWFya190Z19jb21wYXRfZnJvbV91c2VyX3YwKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCBjb21wYXRfeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8gKmNtID0gc3JjOwotCXN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyBtID0gewotCQkubWFyawk9IGNtLT5tYXJrLAotCQkubWFzawk9IGNtLT5tYXNrLAotCQkubW9kZQk9IGNtLT5tb2RlLAotCX07Ci0JbWVtY3B5KGRzdCwgJm0sIHNpemVvZihtKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29ubm1hcmtfdGdfY29tcGF0X3RvX3VzZXJfdjAodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIGNtID0gewotCQkubWFyawk9IG0tPm1hcmssCi0JCS5tYXNrCT0gbS0+bWFzaywKLQkJLm1vZGUJPSBtLT5tb2RlLAotCX07Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsICZjbSwgc2l6ZW9mKGNtKSkgPyAtRUZBVUxUIDogMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCi0KLXN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGNvbm5tYXJrX3RnX3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkubmFtZQkJPSAiQ09OTk1BUksiLAotCQkucmV2aXNpb24JPSAwLAotCQkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAotCQkuY2hlY2tlbnRyeQk9IGNvbm5tYXJrX3RnX2NoZWNrX3YwLAotCQkuZGVzdHJveQk9IGNvbm5tYXJrX3RnX2Rlc3Ryb3ksCi0JCS50YXJnZXQJCT0gY29ubm1hcmtfdGdfdjAsCi0JCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyksCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkuY29tcGF0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX3RhcmdldF9pbmZvKSwKLQkJLmNvbXBhdF9mcm9tX3VzZXIgPSBjb25ubWFya190Z19jb21wYXRfZnJvbV91c2VyX3YwLAotCQkuY29tcGF0X3RvX3VzZXIJPSBjb25ubWFya190Z19jb21wYXRfdG9fdXNlcl92MCwKLSNlbmRpZgotCQkubWUJCT0gVEhJU19NT0RVTEUKLQl9LAotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIkNPTk5NQVJLIiwKLQkJLnJldmlzaW9uICAgICAgID0gMSwKLQkJLmZhbWlseSAgICAgICAgID0gTkZQUk9UT19VTlNQRUMsCi0JCS5jaGVja2VudHJ5ICAgICA9IGNvbm5tYXJrX3RnX2NoZWNrLAotCQkudGFyZ2V0ICAgICAgICAgPSBjb25ubWFya190ZywKLQkJLnRhcmdldHNpemUgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya190Z2luZm8xKSwKLQkJLmRlc3Ryb3kgICAgICAgID0gY29ubm1hcmtfdGdfZGVzdHJveSwKLQkJLm1lICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGNvbm5tYXJrX3RnX3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJDT05OTUFSSyIsCisJLnJldmlzaW9uICAgICAgID0gMSwKKwkuZmFtaWx5ICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKKwkuY2hlY2tlbnRyeSAgICAgPSBjb25ubWFya190Z19jaGVjaywKKwkudGFyZ2V0ICAgICAgICAgPSBjb25ubWFya190ZywKKwkudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEpLAorCS5kZXN0cm95ICAgICAgICA9IGNvbm5tYXJrX3RnX2Rlc3Ryb3ksCisJLm1lICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjb25ubWFya190Z19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMoY29ubm1hcmtfdGdfcmVnLAotCSAgICAgICBBUlJBWV9TSVpFKGNvbm5tYXJrX3RnX3JlZykpOworCXJldHVybiB4dF9yZWdpc3Rlcl90YXJnZXQoJmNvbm5tYXJrX3RnX3JlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjb25ubWFya190Z19leGl0KHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXRzKGNvbm5tYXJrX3RnX3JlZywgQVJSQVlfU0laRShjb25ubWFya190Z19yZWcpKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmY29ubm1hcmtfdGdfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQoY29ubm1hcmtfdGdfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0RTQ1AuYyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCmluZGV4IDZhMzQ3ZTcuLjc0Y2U4OTIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCkBAIC0xOCw3ICsxOCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaD4KIAogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IERTQ1AvVE9TIGZpZWxkIG1vZGlmaWNhdGlvbiIpOwpAQCAtNzMsNDEgKzcyLDYgQEAKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludAotdG9zX3RnX3YwKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3Rvc190YXJnZXRfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0Jc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKLQl1X2ludDhfdCBvbGR0b3M7Ci0KLQlpZiAoKGlwaC0+dG9zICYgSVBUT1NfVE9TX01BU0spICE9IGluZm8tPnRvcykgewotCQlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQotCQkJcmV0dXJuIE5GX0RST1A7Ci0KLQkJaXBoICAgICAgPSBpcF9oZHIoc2tiKTsKLQkJb2xkdG9zICAgPSBpcGgtPnRvczsKLQkJaXBoLT50b3MgPSAoaXBoLT50b3MgJiBJUFRPU19QUkVDX01BU0spIHwgaW5mby0+dG9zOwotCQljc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhvbGR0b3MpLCBodG9ucyhpcGgtPnRvcykpOwotCX0KLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIGJvb2wgdG9zX3RnX2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQljb25zdCB1aW50OF90IHRvcyA9IGluZm8tPnRvczsKLQotCWlmICh0b3MgIT0gSVBUT1NfTE9XREVMQVkgJiYgdG9zICE9IElQVE9TX1RIUk9VR0hQVVQgJiYKLQkgICAgdG9zICE9IElQVE9TX1JFTElBQklMSVRZICYmIHRvcyAhPSBJUFRPU19NSU5DT1NUICYmCi0JICAgIHRvcyAhPSBJUFRPU19OT1JNQUxTVkMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9TOiBiYWQgdG9zIHZhbHVlICUjeFxuIiwgdG9zKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50CiB0b3NfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF90b3NfdGFyZ2V0X2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwpAQCAtMTY4LDE2ICsxMzIsNiBAQAogCX0sCiAJewogCQkubmFtZQkJPSAiVE9TIiwKLQkJLnJldmlzaW9uCT0gMCwKLQkJLmZhbWlseQkJPSBORlBST1RPX0lQVjQsCi0JCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkJLnRhcmdldAkJPSB0b3NfdGdfdjAsCi0JCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvKSwKLQkJLmNoZWNrZW50cnkJPSB0b3NfdGdfY2hlY2tfdjAsCi0JCS5tZQkJPSBUSElTX01PRFVMRSwKLQl9LAotCXsKLQkJLm5hbWUJCT0gIlRPUyIsCiAJCS5yZXZpc2lvbgk9IDEsCiAJCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAogCQkudGFibGUJCT0gIm1hbmdsZSIsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCmluZGV4IDY3NTc0YmMuLjIyNWY4ZDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCkBAIC0yNSwzOSArMjUsNiBAQAogTU9EVUxFX0FMSUFTKCJpcDZ0X01BUksiKTsKIAogc3RhdGljIHVuc2lnbmVkIGludAotbWFya190Z192MChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8gKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQotCXNrYi0+bWFyayA9IG1hcmtpbmZvLT5tYXJrOwotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotbWFya190Z192MShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbWFyayA9IDA7Ci0KLQlzd2l0Y2ggKG1hcmtpbmZvLT5tb2RlKSB7Ci0JY2FzZSBYVF9NQVJLX1NFVDoKLQkJbWFyayA9IG1hcmtpbmZvLT5tYXJrOwotCQlicmVhazsKLQotCWNhc2UgWFRfTUFSS19BTkQ6Ci0JCW1hcmsgPSBza2ItPm1hcmsgJiBtYXJraW5mby0+bWFyazsKLQkJYnJlYWs7Ci0KLQljYXNlIFhUX01BUktfT1I6Ci0JCW1hcmsgPSBza2ItPm1hcmsgfCBtYXJraW5mby0+bWFyazsKLQkJYnJlYWs7Ci0JfQotCi0Jc2tiLT5tYXJrID0gbWFyazsKLQlyZXR1cm4gWFRfQ09OVElOVUU7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKIG1hcmtfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF9tYXJrX3RnaW5mbzIgKmluZm8gPSBwYXItPnRhcmdpbmZvOwpAQCAtNjYsMTM1ICszMywyMyBAQAogCXJldHVybiBYVF9DT05USU5VRTsKIH0KIAotc3RhdGljIGJvb2wgbWFya190Z19jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyAqbWFya2luZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKG1hcmtpbmZvLT5tYXJrID4gMHhmZmZmZmZmZikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJNQVJLOiBPbmx5IHN1cHBvcnRzIDMyYml0IHdpZGUgbWFya1xuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBib29sIG1hcmtfdGdfY2hlY2tfdjEoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgKm1hcmtpbmZvID0gcGFyLT50YXJnaW5mbzsKLQotCWlmIChtYXJraW5mby0+bW9kZSAhPSBYVF9NQVJLX1NFVAotCSAgICAmJiBtYXJraW5mby0+bW9kZSAhPSBYVF9NQVJLX0FORAotCSAgICAmJiBtYXJraW5mby0+bW9kZSAhPSBYVF9NQVJLX09SKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk1BUks6IHVua25vd24gbW9kZSAldVxuIiwKLQkJICAgICAgIG1hcmtpbmZvLT5tb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAobWFya2luZm8tPm1hcmsgPiAweGZmZmZmZmZmKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk1BUks6IE9ubHkgc3VwcG9ydHMgMzJiaXQgd2lkZSBtYXJrXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotI2lmZGVmIENPTkZJR19DT01QQVQKLXN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mbyB7Ci0JY29tcGF0X3Vsb25nX3QJbWFyazsKLX07Ci0KLXN0YXRpYyB2b2lkIG1hcmtfdGdfY29tcGF0X2Zyb21fdXNlcl92MCh2b2lkICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgY29tcGF0X3h0X21hcmtfdGFyZ2V0X2luZm8gKmNtID0gc3JjOwotCXN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvIG0gPSB7Ci0JCS5tYXJrCT0gY20tPm1hcmssCi0JfTsKLQltZW1jcHkoZHN0LCAmbSwgc2l6ZW9mKG0pKTsKLX0KLQotc3RhdGljIGludCBtYXJrX3RnX2NvbXBhdF90b191c2VyX3YwKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X21hcmtfdGFyZ2V0X2luZm8gY20gPSB7Ci0JCS5tYXJrCT0gbS0+bWFyaywKLQl9OwotCXJldHVybiBjb3B5X3RvX3VzZXIoZHN0LCAmY20sIHNpemVvZihjbSkpID8gLUVGQVVMVCA6IDA7Ci19Ci0KLXN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSB7Ci0JY29tcGF0X3Vsb25nX3QJbWFyazsKLQl1X2ludDhfdAltb2RlOwotCXVfaW50OF90CV9fcGFkMTsKLQl1X2ludDE2X3QJX19wYWQyOwotfTsKLQotc3RhdGljIHZvaWQgbWFya190Z19jb21wYXRfZnJvbV91c2VyX3YxKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSAqY20gPSBzcmM7Ci0Jc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgbSA9IHsKLQkJLm1hcmsJPSBjbS0+bWFyaywKLQkJLm1vZGUJPSBjbS0+bW9kZSwKLQl9OwotCW1lbWNweShkc3QsICZtLCBzaXplb2YobSkpOwotfQotCi1zdGF0aWMgaW50IG1hcmtfdGdfY29tcGF0X3RvX3VzZXJfdjEodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxICptID0gc3JjOwotCXN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSBjbSA9IHsKLQkJLm1hcmsJPSBtLT5tYXJrLAotCQkubW9kZQk9IG0tPm1vZGUsCi0JfTsKLQlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmNtLCBzaXplb2YoY20pKSA/IC1FRkFVTFQgOiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KLQotc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgbWFya190Z19yZWdbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLm5hbWUJCT0gIk1BUksiLAotCQkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAotCQkucmV2aXNpb24JPSAwLAotCQkuY2hlY2tlbnRyeQk9IG1hcmtfdGdfY2hlY2tfdjAsCi0JCS50YXJnZXQJCT0gbWFya190Z192MCwKLQkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8pLAotI2lmZGVmIENPTkZJR19DT01QQVQKLQkJLmNvbXBhdHNpemUJPSBzaXplb2Yoc3RydWN0IGNvbXBhdF94dF9tYXJrX3RhcmdldF9pbmZvKSwKLQkJLmNvbXBhdF9mcm9tX3VzZXIgPSBtYXJrX3RnX2NvbXBhdF9mcm9tX3VzZXJfdjAsCi0JCS5jb21wYXRfdG9fdXNlcgk9IG1hcmtfdGdfY29tcGF0X3RvX3VzZXJfdjAsCi0jZW5kaWYKLQkJLnRhYmxlCQk9ICJtYW5nbGUiLAotCQkubWUJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJNQVJLIiwKLQkJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKLQkJLnJldmlzaW9uCT0gMSwKLQkJLmNoZWNrZW50cnkJPSBtYXJrX3RnX2NoZWNrX3YxLAotCQkudGFyZ2V0CQk9IG1hcmtfdGdfdjEsCi0JCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxKSwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCS5jb21wYXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfbWFya190YXJnZXRfaW5mb192MSksCi0JCS5jb21wYXRfZnJvbV91c2VyID0gbWFya190Z19jb21wYXRfZnJvbV91c2VyX3YxLAotCQkuY29tcGF0X3RvX3VzZXIJPSBtYXJrX3RnX2NvbXBhdF90b191c2VyX3YxLAotI2VuZGlmCi0JCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkJLm1lCQk9IFRISVNfTU9EVUxFLAotCX0sCi0JewotCQkubmFtZSAgICAgICAgICAgPSAiTUFSSyIsCi0JCS5yZXZpc2lvbiAgICAgICA9IDIsCi0JCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAotCQkudGFyZ2V0ICAgICAgICAgPSBtYXJrX3RnLAotCQkudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfdGdpbmZvMiksCi0JCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCX0sCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBtYXJrX3RnX3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJNQVJLIiwKKwkucmV2aXNpb24gICAgICAgPSAyLAorCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAorCS50YXJnZXQgICAgICAgICA9IG1hcmtfdGcsCisJLnRhcmdldHNpemUgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX3RnaW5mbzIpLAorCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFya190Z19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMobWFya190Z19yZWcsIEFSUkFZX1NJWkUobWFya190Z19yZWcpKTsKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZtYXJrX3RnX3JlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYXJrX3RnX2V4aXQodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX3RhcmdldHMobWFya190Z19yZWcsIEFSUkFZX1NJWkUobWFya190Z19yZWcpKTsKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmbWFya190Z19yZWcpOwogfQogCiBtb2R1bGVfaW5pdChtYXJrX3RnX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCmluZGV4IDg2Y2FjYWIuLjEyMmFhOGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKQEAgLTQ3LDM2ICs0Nyw2IEBACiAJcmV0dXJuICgoY3QtPm1hcmsgJiBpbmZvLT5tYXNrKSA9PSBpbmZvLT5tYXJrKSBeIGluZm8tPmludmVydDsKIH0KIAotc3RhdGljIGJvb2wKLWNvbm5tYXJrX210X3YwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCB4dF9jb25ubWFya19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0JY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OwotCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwotCi0JY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKLQlpZiAoIWN0KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gKChjdC0+bWFyayAmIGluZm8tPm1hc2spID09IGluZm8tPm1hcmspIF4gaW5mby0+aW52ZXJ0OwotfQotCi1zdGF0aWMgYm9vbCBjb25ubWFya19tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqY20gPSBwYXItPm1hdGNoaW5mbzsKLQotCWlmIChjbS0+bWFyayA+IDB4ZmZmZmZmZmYgfHwgY20tPm1hc2sgPiAweGZmZmZmZmZmKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbm5tYXJrOiBvbmx5IHN1cHBvcnQgMzJiaXQgbWFya1xuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0JaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQocGFyLT5mYW1pbHkpIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYW4ndCBsb2FkIGNvbm50cmFjayBzdXBwb3J0IGZvciAiCi0JCQkJICAgICJwcm90bz0ldVxuIiwgcGFyLT5mYW1pbHkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgYm9vbCBjb25ubWFya19tdF9jaGVjayhjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIHsKIAlpZiAobmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldChwYXItPmZhbWlseSkgPCAwKSB7CkBAIC05Miw3NCArNjIsMjUgQEAKIAluZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQocGFyLT5mYW1pbHkpOwogfQogCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotc3RydWN0IGNvbXBhdF94dF9jb25ubWFya19pbmZvIHsKLQljb21wYXRfdWxvbmdfdAltYXJrLCBtYXNrOwotCXVfaW50OF90CWludmVydDsKLQl1X2ludDhfdAlfX3BhZDE7Ci0JdV9pbnQxNl90CV9fcGFkMjsKLX07Ci0KLXN0YXRpYyB2b2lkIGNvbm5tYXJrX210X2NvbXBhdF9mcm9tX3VzZXJfdjAodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JY29uc3Qgc3RydWN0IGNvbXBhdF94dF9jb25ubWFya19pbmZvICpjbSA9IHNyYzsKLQlzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyBtID0gewotCQkubWFyawk9IGNtLT5tYXJrLAotCQkubWFzawk9IGNtLT5tYXNrLAotCQkuaW52ZXJ0CT0gY20tPmludmVydCwKLQl9OwotCW1lbWNweShkc3QsICZtLCBzaXplb2YobSkpOwotfQotCi1zdGF0aWMgaW50IGNvbm5tYXJrX210X2NvbXBhdF90b191c2VyX3YwKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X2Nvbm5tYXJrX2luZm8gY20gPSB7Ci0JCS5tYXJrCT0gbS0+bWFyaywKLQkJLm1hc2sJPSBtLT5tYXNrLAotCQkuaW52ZXJ0CT0gbS0+aW52ZXJ0LAotCX07Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsICZjbSwgc2l6ZW9mKGNtKSkgPyAtRUZBVUxUIDogMDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfQ09NUEFUICovCi0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggY29ubm1hcmtfbXRfcmVnW10gX19yZWFkX21vc3RseSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJjb25ubWFyayIsCi0JCS5yZXZpc2lvbgk9IDAsCi0JCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCi0JCS5jaGVja2VudHJ5CT0gY29ubm1hcmtfbXRfY2hlY2tfdjAsCi0JCS5tYXRjaAkJPSBjb25ubWFya19tdF92MCwKLQkJLmRlc3Ryb3kJPSBjb25ubWFya19tdF9kZXN0cm95LAotCQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9jb25ubWFya19pbmZvKSwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCS5jb21wYXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfY29ubm1hcmtfaW5mbyksCi0JCS5jb21wYXRfZnJvbV91c2VyID0gY29ubm1hcmtfbXRfY29tcGF0X2Zyb21fdXNlcl92MCwKLQkJLmNvbXBhdF90b191c2VyCT0gY29ubm1hcmtfbXRfY29tcGF0X3RvX3VzZXJfdjAsCi0jZW5kaWYKLQkJLm1lCQk9IFRISVNfTU9EVUxFCi0JfSwKLQl7Ci0JCS5uYW1lICAgICAgICAgICA9ICJjb25ubWFyayIsCi0JCS5yZXZpc2lvbiAgICAgICA9IDEsCi0JCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAotCQkuY2hlY2tlbnRyeSAgICAgPSBjb25ubWFya19tdF9jaGVjaywKLQkJLm1hdGNoICAgICAgICAgID0gY29ubm1hcmtfbXQsCi0JCS5tYXRjaHNpemUgICAgICA9IHNpemVvZihzdHJ1Y3QgeHRfY29ubm1hcmtfbXRpbmZvMSksCi0JCS5kZXN0cm95ICAgICAgICA9IGNvbm5tYXJrX210X2Rlc3Ryb3ksCi0JCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCX0sCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIGNvbm5tYXJrX210X3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJjb25ubWFyayIsCisJLnJldmlzaW9uICAgICAgID0gMSwKKwkuZmFtaWx5ICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKKwkuY2hlY2tlbnRyeSAgICAgPSBjb25ubWFya19tdF9jaGVjaywKKwkubWF0Y2ggICAgICAgICAgPSBjb25ubWFya19tdCwKKwkubWF0Y2hzaXplICAgICAgPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5tYXJrX210aW5mbzEpLAorCS5kZXN0cm95ICAgICAgICA9IGNvbm5tYXJrX210X2Rlc3Ryb3ksCisJLm1lICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjb25ubWFya19tdF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMoY29ubm1hcmtfbXRfcmVnLAotCSAgICAgICBBUlJBWV9TSVpFKGNvbm5tYXJrX210X3JlZykpOworCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaCgmY29ubm1hcmtfbXRfcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvbm5tYXJrX210X2V4aXQodm9pZCkKIHsKLQl4dF91bnJlZ2lzdGVyX21hdGNoZXMoY29ubm1hcmtfbXRfcmVnLCBBUlJBWV9TSVpFKGNvbm5tYXJrX210X3JlZykpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmNvbm5tYXJrX210X3JlZyk7CiB9CiAKIG1vZHVsZV9pbml0KGNvbm5tYXJrX210X2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKaW5kZXggZmM1ODE4MC4uNmRjNDY1MiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCkBAIC0xOSwxMDEgKzE5LDEyIEBACiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIk1hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPiIpOwotTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAY29tcHV0ZXJnbWJoLmRlPiIpOworTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAbWVkb3phcy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogY29ubmVjdGlvbiB0cmFja2luZyBzdGF0ZSBtYXRjaCIpOwogTU9EVUxFX0FMSUFTKCJpcHRfY29ubnRyYWNrIik7CiBNT0RVTEVfQUxJQVMoImlwNnRfY29ubnRyYWNrIik7CiAKIHN0YXRpYyBib29sCi1jb25udHJhY2tfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X2Nvbm50cmFja19pbmZvICpzaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKLQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKLQl1bnNpZ25lZCBpbnQgc3RhdGViaXQ7Ci0KLQljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwotCi0jZGVmaW5lIEZXSU5WKGJvb2wsIGludmZsZykgKChib29sKSBeICEhKHNpbmZvLT5pbnZmbGFncyAmIChpbnZmbGcpKSkKLQotCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKLQkJc3RhdGViaXQgPSBYVF9DT05OVFJBQ0tfU1RBVEVfVU5UUkFDS0VEOwotCWVsc2UgaWYgKGN0KQotCQlzdGF0ZWJpdCA9IFhUX0NPTk5UUkFDS19TVEFURV9CSVQoY3RpbmZvKTsKLQllbHNlCi0JCXN0YXRlYml0ID0gWFRfQ09OTlRSQUNLX1NUQVRFX0lOVkFMSUQ7Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX1NUQVRFKSB7Ci0JCWlmIChjdCkgewotCQkJaWYgKHRlc3RfYml0KElQU19TUkNfTkFUX0JJVCwgJmN0LT5zdGF0dXMpKQotCQkJCXN0YXRlYml0IHw9IFhUX0NPTk5UUkFDS19TVEFURV9TTkFUOwotCQkJaWYgKHRlc3RfYml0KElQU19EU1RfTkFUX0JJVCwgJmN0LT5zdGF0dXMpKQotCQkJCXN0YXRlYml0IHw9IFhUX0NPTk5UUkFDS19TVEFURV9ETkFUOwotCQl9Ci0JCWlmIChGV0lOVigoc3RhdGViaXQgJiBzaW5mby0+c3RhdGVtYXNrKSA9PSAwLAotCQkJICBYVF9DT05OVFJBQ0tfU1RBVEUpKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChjdCA9PSBOVUxMKSB7Ci0JCWlmIChzaW5mby0+ZmxhZ3MgJiB+WFRfQ09OTlRSQUNLX1NUQVRFKQotCQkJcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX1BST1RPICYmCi0JICAgIEZXSU5WKG5mX2N0X3Byb3RvbnVtKGN0KSAhPQotCQkgIHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfT1JJR0lOQUxdLmRzdC5wcm90b251bSwKLQkJICBYVF9DT05OVFJBQ0tfUFJPVE8pKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX09SSUdTUkMgJiYKLQkgICAgRldJTlYoKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXAgJgotCQkgICBzaW5mby0+c2lwbXNrW0lQX0NUX0RJUl9PUklHSU5BTF0uc19hZGRyKSAhPQotCQkgIHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfT1JJR0lOQUxdLnNyYy5pcCwKLQkJICBYVF9DT05OVFJBQ0tfT1JJR1NSQykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChzaW5mby0+ZmxhZ3MgJiBYVF9DT05OVFJBQ0tfT1JJR0RTVCAmJgotCSAgICBGV0lOVigoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC51My5pcCAmCi0JCSAgIHNpbmZvLT5kaXBtc2tbSVBfQ1RfRElSX09SSUdJTkFMXS5zX2FkZHIpICE9Ci0JCSAgc2luZm8tPnR1cGxlW0lQX0NUX0RJUl9PUklHSU5BTF0uZHN0LmlwLAotCQkgIFhUX0NPTk5UUkFDS19PUklHRFNUKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKHNpbmZvLT5mbGFncyAmIFhUX0NPTk5UUkFDS19SRVBMU1JDICYmCi0JICAgIEZXSU5WKChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLnUzLmlwICYKLQkJICAgc2luZm8tPnNpcG1za1tJUF9DVF9ESVJfUkVQTFldLnNfYWRkcikgIT0KLQkJICBzaW5mby0+dHVwbGVbSVBfQ1RfRElSX1JFUExZXS5zcmMuaXAsCi0JCSAgWFRfQ09OTlRSQUNLX1JFUExTUkMpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoc2luZm8tPmZsYWdzICYgWFRfQ09OTlRSQUNLX1JFUExEU1QgJiYKLQkgICAgRldJTlYoKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5kc3QudTMuaXAgJgotCQkgICBzaW5mby0+ZGlwbXNrW0lQX0NUX0RJUl9SRVBMWV0uc19hZGRyKSAhPQotCQkgIHNpbmZvLT50dXBsZVtJUF9DVF9ESVJfUkVQTFldLmRzdC5pcCwKLQkJICBYVF9DT05OVFJBQ0tfUkVQTERTVCkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChzaW5mby0+ZmxhZ3MgJiBYVF9DT05OVFJBQ0tfU1RBVFVTICYmCi0JICAgIEZXSU5WKChjdC0+c3RhdHVzICYgc2luZm8tPnN0YXR1c21hc2spID09IDAsCi0JCSAgWFRfQ09OTlRSQUNLX1NUQVRVUykpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmKHNpbmZvLT5mbGFncyAmIFhUX0NPTk5UUkFDS19FWFBJUkVTKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IHRpbWVyX3BlbmRpbmcoJmN0LT50aW1lb3V0KSA/Ci0JCQkJCShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwOwotCi0JCWlmIChGV0lOVighKGV4cGlyZXMgPj0gc2luZm8tPmV4cGlyZXNfbWluICYmCi0JCQkgICAgZXhwaXJlcyA8PSBzaW5mby0+ZXhwaXJlc19tYXgpLAotCQkJICBYVF9DT05OVFJBQ0tfRVhQSVJFUykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotI3VuZGVmIEZXSU5WCi19Ci0KLXN0YXRpYyBib29sCiBjb25udHJhY2tfYWRkcmNtcChjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmthZGRyLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICp1YWRkciwKICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqdW1hc2ssIHVuc2lnbmVkIGludCBsM3Byb3RvKQpAQCAtMzM3LDczICsyNDgsOSBAQAogCWNvbm50cmFja19tdF9kZXN0cm95KHBhcik7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdHJ1Y3QgY29tcGF0X3h0X2Nvbm50cmFja19pbmZvCi17Ci0JY29tcGF0X3VpbnRfdAkJCXN0YXRlbWFzazsKLQljb21wYXRfdWludF90CQkJc3RhdHVzbWFzazsKLQlzdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZQl0dXBsZVtJUF9DVF9ESVJfTUFYXTsKLQlzdHJ1Y3QgaW5fYWRkcgkJCXNpcG1za1tJUF9DVF9ESVJfTUFYXTsKLQlzdHJ1Y3QgaW5fYWRkcgkJCWRpcG1za1tJUF9DVF9ESVJfTUFYXTsKLQljb21wYXRfdWxvbmdfdAkJCWV4cGlyZXNfbWluOwotCWNvbXBhdF91bG9uZ190CQkJZXhwaXJlc19tYXg7Ci0JdV9pbnQ4X3QJCQlmbGFnczsKLQl1X2ludDhfdAkJCWludmZsYWdzOwotfTsKLQotc3RhdGljIHZvaWQgY29ubnRyYWNrX210X2NvbXBhdF9mcm9tX3VzZXJfdjAodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JY29uc3Qgc3RydWN0IGNvbXBhdF94dF9jb25udHJhY2tfaW5mbyAqY20gPSBzcmM7Ci0Jc3RydWN0IHh0X2Nvbm50cmFja19pbmZvIG0gPSB7Ci0JCS5zdGF0ZW1hc2sJPSBjbS0+c3RhdGVtYXNrLAotCQkuc3RhdHVzbWFzawk9IGNtLT5zdGF0dXNtYXNrLAotCQkuZXhwaXJlc19taW4JPSBjbS0+ZXhwaXJlc19taW4sCi0JCS5leHBpcmVzX21heAk9IGNtLT5leHBpcmVzX21heCwKLQkJLmZsYWdzCQk9IGNtLT5mbGFncywKLQkJLmludmZsYWdzCT0gY20tPmludmZsYWdzLAotCX07Ci0JbWVtY3B5KG0udHVwbGUsIGNtLT50dXBsZSwgc2l6ZW9mKG0udHVwbGUpKTsKLQltZW1jcHkobS5zaXBtc2ssIGNtLT5zaXBtc2ssIHNpemVvZihtLnNpcG1zaykpOwotCW1lbWNweShtLmRpcG1zaywgY20tPmRpcG1zaywgc2l6ZW9mKG0uZGlwbXNrKSk7Ci0JbWVtY3B5KGRzdCwgJm0sIHNpemVvZihtKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29ubnRyYWNrX210X2NvbXBhdF90b191c2VyX3YwKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKLXsKLQljb25zdCBzdHJ1Y3QgeHRfY29ubnRyYWNrX2luZm8gKm0gPSBzcmM7Ci0Jc3RydWN0IGNvbXBhdF94dF9jb25udHJhY2tfaW5mbyBjbSA9IHsKLQkJLnN0YXRlbWFzawk9IG0tPnN0YXRlbWFzaywKLQkJLnN0YXR1c21hc2sJPSBtLT5zdGF0dXNtYXNrLAotCQkuZXhwaXJlc19taW4JPSBtLT5leHBpcmVzX21pbiwKLQkJLmV4cGlyZXNfbWF4CT0gbS0+ZXhwaXJlc19tYXgsCi0JCS5mbGFncwkJPSBtLT5mbGFncywKLQkJLmludmZsYWdzCT0gbS0+aW52ZmxhZ3MsCi0JfTsKLQltZW1jcHkoY20udHVwbGUsIG0tPnR1cGxlLCBzaXplb2YoY20udHVwbGUpKTsKLQltZW1jcHkoY20uc2lwbXNrLCBtLT5zaXBtc2ssIHNpemVvZihjbS5zaXBtc2spKTsKLQltZW1jcHkoY20uZGlwbXNrLCBtLT5kaXBtc2ssIHNpemVvZihjbS5kaXBtc2spKTsKLQlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmNtLCBzaXplb2YoY20pKSA/IC1FRkFVTFQgOiAwOwotfQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggY29ubnRyYWNrX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZSAgICAgICA9ICJjb25udHJhY2siLAotCQkucmV2aXNpb24gICA9IDAsCi0JCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY0LAotCQkubWF0Y2ggICAgICA9IGNvbm50cmFja19tdF92MCwKLQkJLmNoZWNrZW50cnkgPSBjb25udHJhY2tfbXRfY2hlY2ssCi0JCS5kZXN0cm95ICAgID0gY29ubnRyYWNrX210X2Rlc3Ryb3ksCi0JCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCB4dF9jb25udHJhY2tfaW5mbyksCi0JCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkuY29tcGF0c2l6ZSAgICAgICA9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2Nvbm50cmFja19pbmZvKSwKLQkJLmNvbXBhdF9mcm9tX3VzZXIgPSBjb25udHJhY2tfbXRfY29tcGF0X2Zyb21fdXNlcl92MCwKLQkJLmNvbXBhdF90b191c2VyICAgPSBjb25udHJhY2tfbXRfY29tcGF0X3RvX3VzZXJfdjAsCi0jZW5kaWYKLQl9LAotCXsKLQkJLm5hbWUgICAgICAgPSAiY29ubnRyYWNrIiwKIAkJLnJldmlzaW9uICAgPSAxLAogCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAogCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfY29ubnRyYWNrX210aW5mbzEpLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9kc2NwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYwppbmRleCBjM2Y4MDg1Li4wMjgwZDNhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2RzY3AuYwpAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zLmg+CiAKIE1PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBEU0NQL1RPUyBmaWVsZCBtYXRjaCIpOwpAQCAtNTUsMTQgKzU0LDYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wKLXRvc19tdF92MChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3Rvc19pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0KLQlyZXR1cm4gKGlwX2hkcihza2IpLT50b3MgPT0gaW5mby0+dG9zKSBeIGluZm8tPmludmVydDsKLX0KLQogc3RhdGljIGJvb2wgdG9zX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF90b3NfbWF0Y2hfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwpAQCAtOTQsMTQgKzg1LDYgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gInRvcyIsCi0JCS5yZXZpc2lvbgk9IDAsCi0JCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCQkubWF0Y2gJCT0gdG9zX210X3YwLAotCQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfdG9zX2luZm8pLAotCQkubWUJCT0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lCQk9ICJ0b3MiLAogCQkucmV2aXNpb24JPSAxLAogCQkuZmFtaWx5CQk9IE5GUFJPVE9fSVBWNCwKIAkJLm1hdGNoCQk9IHRvc19tdCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKaW5kZXggNTAxZjliNi4uZmZjOTYzOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKQEAgLTE0LDQwICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaD4KLQotc3RhdGljIGJvb2wKLWlwcmFuZ2VfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwdF9pcHJhbmdlX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCi0JaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkMpIHsKLQkJaWYgKChudG9obChpcGgtPnNhZGRyKSA8IG50b2hsKGluZm8tPnNyYy5taW5faXApCi0JCQkgIHx8IG50b2hsKGlwaC0+c2FkZHIpID4gbnRvaGwoaW5mby0+c3JjLm1heF9pcCkpCi0JCQkgXiAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOVikpIHsKLQkJCXByX2RlYnVnKCJzcmMgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcbiIsCi0JCQkJICZpcGgtPnNhZGRyLAotCQkJCSBpbmZvLT5mbGFncyAmIElQUkFOR0VfU1JDX0lOViA/ICIoSU5WKSAiIDogIiIsCi0JCQkJICZpbmZvLT5zcmMubWluX2lwLAotCQkJCSAmaW5mby0+c3JjLm1heF9pcCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9EU1QpIHsKLQkJaWYgKChudG9obChpcGgtPmRhZGRyKSA8IG50b2hsKGluZm8tPmRzdC5taW5faXApCi0JCQkgIHx8IG50b2hsKGlwaC0+ZGFkZHIpID4gbnRvaGwoaW5mby0+ZHN0Lm1heF9pcCkpCi0JCQkgXiAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVikpIHsKLQkJCXByX2RlYnVnKCJkc3QgSVAgJXBJNCBOT1QgaW4gcmFuZ2UgJXMlcEk0LSVwSTRcbiIsCi0JCQkJICZpcGgtPmRhZGRyLAotCQkJCSBpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOViA/ICIoSU5WKSAiIDogIiIsCi0JCQkJICZpbmZvLT5kc3QubWluX2lwLAotCQkJCSAmaW5mby0+ZHN0Lm1heF9pcCk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRydWU7Ci19CiAKIHN0YXRpYyBib29sCiBpcHJhbmdlX210NChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKQEAgLTEyNywxNCArOTMsNiBAQAogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBpcHJhbmdlX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZSAgICAgID0gImlwcmFuZ2UiLAotCQkucmV2aXNpb24gID0gMCwKLQkJLmZhbWlseSAgICA9IE5GUFJPVE9fSVBWNCwKLQkJLm1hdGNoICAgICA9IGlwcmFuZ2VfbXRfdjAsCi0JCS5tYXRjaHNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9pcHJhbmdlX2luZm8pLAotCQkubWUgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lICAgICAgPSAiaXByYW5nZSIsCiAJCS5yZXZpc2lvbiAgPSAxLAogCQkuZmFtaWx5ICAgID0gTkZQUk9UT19JUFY0LAogCQkubWF0Y2ggICAgID0gaXByYW5nZV9tdDQsCkBAIC0xNjQsNyArMTIyLDggQEAKIG1vZHVsZV9pbml0KGlwcmFuZ2VfbXRfaW5pdCk7CiBtb2R1bGVfZXhpdChpcHJhbmdlX210X2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PiwgSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAY29tcHV0ZXJnbWJoLmRlPiIpOworTU9EVUxFX0FVVEhPUigiSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PiIpOworTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAbWVkb3phcy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogYXJiaXRyYXJ5IElQdjQgcmFuZ2UgbWF0Y2hpbmciKTsKIE1PRFVMRV9BTElBUygiaXB0X2lwcmFuZ2UiKTsKIE1PRFVMRV9BTElBUygiaXA2dF9pcHJhbmdlIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X21hcmsuYyBiL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCmluZGV4IDEwYjllMzQuLjFkYjA3ZDggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqCShDKSAxOTk5LTIwMDEgTWFyYyBCb3VjaGVyIDxtYXJjQG1ic2kuY2E+CiAgKglDb3B5cmlnaHQgwqkgQ0MgQ29tcHV0ZXIgQ29uc3VsdGFudHMgR21iSCwgMjAwNyAtIDIwMDgKLSAqCUphbiBFbmdlbGhhcmR0IDxqZW5nZWxoQGNvbXB1dGVyZ21iaC5kZT4KKyAqCUphbiBFbmdlbGhhcmR0IDxqZW5nZWxoQG1lZG96YXMuZGU+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMywxNCArMjMsNiBAQAogTU9EVUxFX0FMSUFTKCJpcDZ0X21hcmsiKTsKIAogc3RhdGljIGJvb2wKLW1hcmtfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCi0JcmV0dXJuICgoc2tiLT5tYXJrICYgaW5mby0+bWFzaykgPT0gaW5mby0+bWFyaykgXiBpbmZvLT5pbnZlcnQ7Ci19Ci0KLXN0YXRpYyBib29sCiBtYXJrX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCB4dF9tYXJrX210aW5mbzEgKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKQEAgLTM4LDgxICszMCwyMyBAQAogCXJldHVybiAoKHNrYi0+bWFyayAmIGluZm8tPm1hc2spID09IGluZm8tPm1hcmspIF4gaW5mby0+aW52ZXJ0OwogfQogCi1zdGF0aWMgYm9vbCBtYXJrX210X2NoZWNrX3YwKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCB4dF9tYXJrX2luZm8gKm1pbmZvID0gcGFyLT5tYXRjaGluZm87Ci0KLQlpZiAobWluZm8tPm1hcmsgPiAweGZmZmZmZmZmIHx8IG1pbmZvLT5tYXNrID4gMHhmZmZmZmZmZikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtYXJrOiBvbmx5IHN1cHBvcnRzIDMyYml0IG1hcmtcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotc3RydWN0IGNvbXBhdF94dF9tYXJrX2luZm8gewotCWNvbXBhdF91bG9uZ190CW1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QJaW52ZXJ0OwotCXVfaW50OF90CV9fcGFkMTsKLQl1X2ludDE2X3QJX19wYWQyOwotfTsKLQotc3RhdGljIHZvaWQgbWFya19tdF9jb21wYXRfZnJvbV91c2VyX3YwKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQotewotCWNvbnN0IHN0cnVjdCBjb21wYXRfeHRfbWFya19pbmZvICpjbSA9IHNyYzsKLQlzdHJ1Y3QgeHRfbWFya19pbmZvIG0gPSB7Ci0JCS5tYXJrCT0gY20tPm1hcmssCi0JCS5tYXNrCT0gY20tPm1hc2ssCi0JCS5pbnZlcnQJPSBjbS0+aW52ZXJ0LAotCX07Ci0JbWVtY3B5KGRzdCwgJm0sIHNpemVvZihtKSk7Ci19Ci0KLXN0YXRpYyBpbnQgbWFya19tdF9jb21wYXRfdG9fdXNlcl92MCh2b2lkIF9fdXNlciAqZHN0LCB2b2lkICpzcmMpCi17Ci0JY29uc3Qgc3RydWN0IHh0X21hcmtfaW5mbyAqbSA9IHNyYzsKLQlzdHJ1Y3QgY29tcGF0X3h0X21hcmtfaW5mbyBjbSA9IHsKLQkJLm1hcmsJPSBtLT5tYXJrLAotCQkubWFzawk9IG0tPm1hc2ssCi0JCS5pbnZlcnQJPSBtLT5pbnZlcnQsCi0JfTsKLQlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmNtLCBzaXplb2YoY20pKSA/IC1FRkFVTFQgOiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KLQotc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtYXJrX210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkubmFtZQkJPSAibWFyayIsCi0JCS5yZXZpc2lvbgk9IDAsCi0JCS5mYW1pbHkJCT0gTkZQUk9UT19VTlNQRUMsCi0JCS5jaGVja2VudHJ5CT0gbWFya19tdF9jaGVja192MCwKLQkJLm1hdGNoCQk9IG1hcmtfbXRfdjAsCi0JCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X21hcmtfaW5mbyksCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkuY29tcGF0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X21hcmtfaW5mbyksCi0JCS5jb21wYXRfZnJvbV91c2VyID0gbWFya19tdF9jb21wYXRfZnJvbV91c2VyX3YwLAotCQkuY29tcGF0X3RvX3VzZXIJPSBtYXJrX210X2NvbXBhdF90b191c2VyX3YwLAotI2VuZGlmCi0JCS5tZQkJPSBUSElTX01PRFVMRSwKLQl9LAotCXsKLQkJLm5hbWUgICAgICAgICAgID0gIm1hcmsiLAotCQkucmV2aXNpb24gICAgICAgPSAxLAotCQkuZmFtaWx5ICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKLQkJLm1hdGNoICAgICAgICAgID0gbWFya19tdCwKLQkJLm1hdGNoc2l6ZSAgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX210aW5mbzEpLAotCQkubWUgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKLQl9LAorc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBtYXJrX210X3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lICAgICAgICAgICA9ICJtYXJrIiwKKwkucmV2aXNpb24gICAgICAgPSAxLAorCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAorCS5tYXRjaCAgICAgICAgICA9IG1hcmtfbXQsCisJLm1hdGNoc2l6ZSAgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9tYXJrX210aW5mbzEpLAorCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFya19tdF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoZXMobWFya19tdF9yZWcsIEFSUkFZX1NJWkUobWFya19tdF9yZWcpKTsKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJm1hcmtfbXRfcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1hcmtfbXRfZXhpdCh2b2lkKQogewotCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhtYXJrX210X3JlZywgQVJSQVlfU0laRShtYXJrX210X3JlZykpOworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJm1hcmtfbXRfcmVnKTsKIH0KIAogbW9kdWxlX2luaXQobWFya19tdF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCmluZGV4IDBmNDgyZTIuLjYzZTE5MDUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwpAQCAtNzAsNyArNzAsOCBAQAogfQogCiBzdGF0aWMgaW50IHh0X29zZl9hZGRfY2FsbGJhY2soc3RydWN0IHNvY2sgKmN0bmwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqb3NmX2F0dHJzW10pCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG9zZl9hdHRyc1tdKQogewogCXN0cnVjdCB4dF9vc2ZfdXNlcl9maW5nZXIgKmY7CiAJc3RydWN0IHh0X29zZl9maW5nZXIgKmtmID0gTlVMTCwgKnNmOwpAQCAtMTEyLDcgKzExMyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgeHRfb3NmX3JlbW92ZV9jYWxsYmFjayhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBzdHJ1Y3QgbmxhdHRyICpvc2ZfYXR0cnNbXSkKKwkJCQkgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCSAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG9zZl9hdHRyc1tdKQogewogCXN0cnVjdCB4dF9vc2ZfdXNlcl9maW5nZXIgKmY7CiAJc3RydWN0IHh0X29zZl9maW5nZXIgKnNmOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9vd25lci5jIGIvbmV0L25ldGZpbHRlci94dF9vd25lci5jCmluZGV4IDIyYjJhNWUuLmQyNGM3NmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfb3duZXIuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X293bmVyLmMKQEAgLTUsNyArNSw2IEBACiAgKiAoQykgMjAwMCBNYXJjIEJvdWNoZXIgPG1hcmNAbWJzaS5jYT4KICAqCiAgKiBDb3B5cmlnaHQgwqkgQ0MgQ29tcHV0ZXIgQ29uc3VsdGFudHMgR21iSCwgMjAwNyAtIDIwMDgKLSAqIDxqZW5nZWxoQGNvbXB1dGVyZ21iaC5kZT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE3LDYwICsxNiw2IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmg+Ci0KLXN0YXRpYyBib29sCi1vd25lcl9tdF92MChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X293bmVyX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgZmlsZSAqZmlscDsKLQotCWlmIChza2ItPnNrID09IE5VTEwgfHwgc2tiLT5zay0+c2tfc29ja2V0ID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWZpbHAgPSBza2ItPnNrLT5za19zb2NrZXQtPmZpbGU7Ci0JaWYgKGZpbHAgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGluZm8tPm1hdGNoICYgSVBUX09XTkVSX1VJRCkKLQkJaWYgKChmaWxwLT5mX2NyZWQtPmZzdWlkICE9IGluZm8tPnVpZCkgXgotCQkgICAgISEoaW5mby0+aW52ZXJ0ICYgSVBUX09XTkVSX1VJRCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoaW5mby0+bWF0Y2ggJiBJUFRfT1dORVJfR0lEKQotCQlpZiAoKGZpbHAtPmZfY3JlZC0+ZnNnaWQgIT0gaW5mby0+Z2lkKSBeCi0JCSAgICAhIShpbmZvLT5pbnZlcnQgJiBJUFRfT1dORVJfR0lEKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbAotb3duZXJfbXQ2X3YwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcDZ0X293bmVyX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQljb25zdCBzdHJ1Y3QgZmlsZSAqZmlscDsKLQotCWlmIChza2ItPnNrID09IE5VTEwgfHwgc2tiLT5zay0+c2tfc29ja2V0ID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQotCWZpbHAgPSBza2ItPnNrLT5za19zb2NrZXQtPmZpbGU7Ci0JaWYgKGZpbHAgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGluZm8tPm1hdGNoICYgSVA2VF9PV05FUl9VSUQpCi0JCWlmICgoZmlscC0+Zl9jcmVkLT5mc3VpZCAhPSBpbmZvLT51aWQpIF4KLQkJICAgICEhKGluZm8tPmludmVydCAmIElQNlRfT1dORVJfVUlEKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCWlmIChpbmZvLT5tYXRjaCAmIElQNlRfT1dORVJfR0lEKQotCQlpZiAoKGZpbHAtPmZfY3JlZC0+ZnNnaWQgIT0gaW5mby0+Z2lkKSBeCi0JCSAgICAhIShpbmZvLT5pbnZlcnQgJiBJUDZUX09XTkVSX0dJRCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KIAogc3RhdGljIGJvb2wKIG93bmVyX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQpAQCAtMTA3LDgxICs1MiwzMCBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBvd25lcl9tdF9jaGVja192MChjb25zdCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X293bmVyX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKLQotCWlmIChpbmZvLT5tYXRjaCAmIChJUFRfT1dORVJfUElEIHwgSVBUX09XTkVSX1NJRCB8IElQVF9PV05FUl9DT01NKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiBQSUQsIFNJRCBhbmQgY29tbWFuZCBtYXRjaGluZyBpcyBub3QgIgotCQkgICAgICAgInN1cHBvcnRlZCBhbnltb3JlXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBvd25lcl9tdDZfY2hlY2tfdjAoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfb3duZXJfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCi0JaWYgKGluZm8tPm1hdGNoICYgKElQNlRfT1dORVJfUElEIHwgSVA2VF9PV05FUl9TSUQpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgS0JVSUxEX01PRE5BTUUKLQkJICAgICAgICI6IFBJRCBhbmQgU0lEIG1hdGNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBvd25lcl9tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLm5hbWUgICAgICAgPSAib3duZXIiLAotCQkucmV2aXNpb24gICA9IDAsCi0JCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY0LAotCQkubWF0Y2ggICAgICA9IG93bmVyX210X3YwLAotCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXB0X293bmVyX2luZm8pLAotCQkuY2hlY2tlbnRyeSA9IG93bmVyX210X2NoZWNrX3YwLAotCQkuaG9va3MgICAgICA9ICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSB8Ci0JCSAgICAgICAgICAgICAgKDEgPDwgTkZfSU5FVF9QT1NUX1JPVVRJTkcpLAotCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAotCX0sCi0JewotCQkubmFtZSAgICAgICA9ICJvd25lciIsCi0JCS5yZXZpc2lvbiAgID0gMCwKLQkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjYsCi0JCS5tYXRjaCAgICAgID0gb3duZXJfbXQ2X3YwLAotCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXA2dF9vd25lcl9pbmZvKSwKLQkJLmNoZWNrZW50cnkgPSBvd25lcl9tdDZfY2hlY2tfdjAsCi0JCS5ob29rcyAgICAgID0gKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwKLQkJICAgICAgICAgICAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORyksCi0JCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKLQl7Ci0JCS5uYW1lICAgICAgID0gIm93bmVyIiwKLQkJLnJldmlzaW9uICAgPSAxLAotCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAotCQkubWF0Y2ggICAgICA9IG93bmVyX210LAotCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfb3duZXJfbWF0Y2hfaW5mbyksCi0JCS5ob29rcyAgICAgID0gKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwKLQkJICAgICAgICAgICAgICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORyksCi0JCS5tZSAgICAgICAgID0gVEhJU19NT0RVTEUsCi0JfSwKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggb3duZXJfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUgICAgICAgPSAib3duZXIiLAorCS5yZXZpc2lvbiAgID0gMSwKKwkuZmFtaWx5ICAgICA9IE5GUFJPVE9fVU5TUEVDLAorCS5tYXRjaCAgICAgID0gb3duZXJfbXQsCisJLm1hdGNoc2l6ZSAgPSBzaXplb2Yoc3RydWN0IHh0X293bmVyX21hdGNoX2luZm8pLAorCS5ob29rcyAgICAgID0gKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwKKwkgICAgICAgICAgICAgICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSwKKwkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb3duZXJfbXRfaW5pdCh2b2lkKQogewotCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaGVzKG93bmVyX210X3JlZywgQVJSQVlfU0laRShvd25lcl9tdF9yZWcpKTsKKwlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJm93bmVyX210X3JlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvd25lcl9tdF9leGl0KHZvaWQpCiB7Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKG93bmVyX210X3JlZywgQVJSQVlfU0laRShvd25lcl9tdF9yZWcpKTsKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZvd25lcl9tdF9yZWcpOwogfQogCiBtb2R1bGVfaW5pdChvd25lcl9tdF9pbml0KTsKIG1vZHVsZV9leGl0KG93bmVyX210X2V4aXQpOwotTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAY29tcHV0ZXJnbWJoLmRlPiIpOworTU9EVUxFX0FVVEhPUigiSmFuIEVuZ2VsaGFyZHQgPGplbmdlbGhAbWVkb3phcy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogc29ja2V0IG93bmVyIG1hdGNoaW5nIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoImlwdF9vd25lciIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKaW5kZXggMTZlNmM0My4uNmNlMDAyMCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCkBAIC0xODUsOCArMTg1LDcgQEAKIAlyZXR1cm4gMDsKIAogY2ZnX3VubGJsX21hcF9hZGRfZmFpbHVyZToKLQlpZiAoZW50cnkgIT0gTlVMTCkKLQkJa2ZyZWUoZW50cnktPmRvbWFpbik7CisJa2ZyZWUoZW50cnktPmRvbWFpbik7CiAJa2ZyZWUoZW50cnkpOwogCWtmcmVlKGFkZHJtYXApOwogCWtmcmVlKG1hcDQpOwpAQCAtMzg1LDggKzM4NCw3IEBACiAKIGNmZ19jaXBzb3Y0X21hcF9hZGRfZmFpbHVyZToKIAljaXBzb192NF9kb2lfcHV0ZGVmKGRvaV9kZWYpOwotCWlmIChlbnRyeSAhPSBOVUxMKQotCQlrZnJlZShlbnRyeS0+ZG9tYWluKTsKKwlrZnJlZShlbnRyeS0+ZG9tYWluKTsKIAlrZnJlZShlbnRyeSk7CiAJa2ZyZWUoYWRkcm1hcCk7CiAJa2ZyZWUoYWRkcmluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDI5MzZmYTMuLmQwZmYzODIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTgzLDYgKzgzLDExIEBACiAJc3RydWN0IG1vZHVsZQkJKm1vZHVsZTsKIH07CiAKK3N0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgeworCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKKwl2b2lkICpwdHI7Cit9OworCiAjZGVmaW5lIE5FVExJTktfS0VSTkVMX1NPQ0tFVAkweDEKICNkZWZpbmUgTkVUTElOS19SRUNWX1BLVElORk8JMHgyCiAjZGVmaW5lIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IJMHg0CkBAIC0xMzU2LDcgKzEzNjEsNyBAQAogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IG5sa19zayhzayk7CiAJaW50IG5vYmxvY2sgPSBmbGFncyZNU0dfRE9OVFdBSVQ7CiAJc2l6ZV90IGNvcGllZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBza19idWZmICpza2IsICpmcmFnIF9fbWF5YmVfdW51c2VkID0gTlVMTDsKIAlpbnQgZXJyOwogCiAJaWYgKGZsYWdzJk1TR19PT0IpCkBAIC0xMzY4LDYgKzEzNzMsMzUgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTCisJaWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0KSkgeworCQlib29sIG5lZWRfY29tcGF0ID0gISEoZmxhZ3MgJiBNU0dfQ01TR19DT01QQVQpOworCisJCS8qCisJCSAqIElmIHRoaXMgc2tiIGhhcyBhIGZyYWdfbGlzdCwgdGhlbiBoZXJlIHRoYXQgbWVhbnMgdGhhdAorCQkgKiB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoZSBmcmFnX2xpc3Qgc2tiIGZvciBjb21wYXQgdGFza3MKKwkJICogYW5kIHRoZSByZWd1bGFyIHNrYiBmb3Igbm9uLWNvbXBhdCB0YXNrcy4KKwkJICoKKwkJICogVGhlIHNrYiBtaWdodCAoYW5kIGxpa2VseSB3aWxsKSBiZSBjbG9uZWQsIHNvIHdlIGNhbid0CisJCSAqIGp1c3QgcmVzZXQgZnJhZ19saXN0IGFuZCBnbyBvbiB3aXRoIHRoaW5ncyAtLSB3ZSBuZWVkIHRvCisJCSAqIGtlZXAgdGhhdC4gRm9yIHRoZSBjb21wYXQgY2FzZSB0aGF0J3MgZWFzeSAtLSBzaW1wbHkgZ2V0CisJCSAqIGEgcmVmZXJlbmNlIHRvIHRoZSBjb21wYXQgc2tiIGFuZCBmcmVlIHRoZSByZWd1bGFyIG9uZQorCQkgKiBpbmNsdWRpbmcgdGhlIGZyYWcuIEZvciB0aGUgbm9uLWNvbXBhdCBjYXNlLCB3ZSBuZWVkIHRvCisJCSAqIGF2b2lkIHNlbmRpbmcgdGhlIGZyYWcgdG8gdGhlIHVzZXIgLS0gc28gYXNzaWduIE5VTEwgYnV0CisJCSAqIHJlc3RvcmUgaXQgYmVsb3cgYmVmb3JlIGZyZWVpbmcgdGhlIHNrYi4KKwkJICovCisJCWlmIChuZWVkX2NvbXBhdCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKmNvbXBza2IgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKKwkJCXNrYl9nZXQoY29tcHNrYik7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXNrYiA9IGNvbXBza2I7CisJCX0gZWxzZSB7CisJCQlmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CisJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdCA9IE5VTEw7CisJCX0KKwl9CisjZW5kaWYKKwogCW1zZy0+bXNnX25hbWVsZW4gPSAwOwogCiAJY29waWVkID0gc2tiLT5sZW47CkBAIC0xMzk4LDYgKzE0MzIsMTEgQEAKIAlzaW9jYi0+c2NtLT5jcmVkcyA9ICpORVRMSU5LX0NSRURTKHNrYik7CiAJaWYgKGZsYWdzICYgTVNHX1RSVU5DKQogCQljb3BpZWQgPSBza2ItPmxlbjsKKworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUTElOS19NRVNTQUdFUworCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0ID0gZnJhZzsKKyNlbmRpZgorCiAJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CiAKIAlpZiAobmxrLT5jYiAmJiBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDw9IHNrLT5za19yY3ZidWYgLyAyKQpAQCAtMTQ1Myw3ICsxNDkyLDggQEAKIAlpZiAoZ3JvdXBzIDwgMzIpCiAJCWdyb3VwcyA9IDMyOwogCi0JbGlzdGVuZXJzID0ga3phbGxvYyhOTEdSUFNaKGdyb3VwcyksIEdGUF9LRVJORUwpOworCWxpc3RlbmVycyA9IGt6YWxsb2MoTkxHUlBTWihncm91cHMpICsgc2l6ZW9mKHN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQpLAorCQkJICAgIEdGUF9LRVJORUwpOwogCWlmICghbGlzdGVuZXJzKQogCQlnb3RvIG91dF9zb2NrX3JlbGVhc2U7CiAKQEAgLTE1MDEsNiArMTU0MSwxNCBAQAogRVhQT1JUX1NZTUJPTChuZXRsaW5rX2tlcm5lbF9yZWxlYXNlKTsKIAogCitzdGF0aWMgdm9pZCBuZXRsaW5rX2ZyZWVfb2xkX2xpc3RlbmVycyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQoreworCXN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgKmxyaDsKKworCWxyaCA9IGNvbnRhaW5lcl9vZihyY3VfaGVhZCwgc3RydWN0IGxpc3RlbmVyc19yY3VfaGVhZCwgcmN1X2hlYWQpOworCWtmcmVlKGxyaC0+cHRyKTsKK30KKwogLyoqCiAgKiBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzIC0gY2hhbmdlIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzCiAgKgpAQCAtMTUxNiw2ICsxNTY0LDcgQEAKIGludCBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGdyb3VwcykKIHsKIAl1bnNpZ25lZCBsb25nICpsaXN0ZW5lcnMsICpvbGQgPSBOVUxMOworCXN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgKm9sZF9yY3VfaGVhZDsKIAlzdHJ1Y3QgbmV0bGlua190YWJsZSAqdGJsID0gJm5sX3RhYmxlW3NrLT5za19wcm90b2NvbF07CiAJaW50IGVyciA9IDA7CiAKQEAgLTE1MjQsNyArMTU3Myw5IEBACiAKIAluZXRsaW5rX3RhYmxlX2dyYWIoKTsKIAlpZiAoTkxHUlBTWih0YmwtPmdyb3VwcykgPCBOTEdSUFNaKGdyb3VwcykpIHsKLQkJbGlzdGVuZXJzID0ga3phbGxvYyhOTEdSUFNaKGdyb3VwcyksIEdGUF9BVE9NSUMpOworCQlsaXN0ZW5lcnMgPSBremFsbG9jKE5MR1JQU1ooZ3JvdXBzKSArCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgbGlzdGVuZXJzX3JjdV9oZWFkKSwKKwkJCQkgICAgR0ZQX0FUT01JQyk7CiAJCWlmICghbGlzdGVuZXJzKSB7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfdW5ncmFiOwpAQCAtMTUzMiwxNiArMTU4MywyNCBAQAogCQlvbGQgPSB0YmwtPmxpc3RlbmVyczsKIAkJbWVtY3B5KGxpc3RlbmVycywgb2xkLCBOTEdSUFNaKHRibC0+Z3JvdXBzKSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0YmwtPmxpc3RlbmVycywgbGlzdGVuZXJzKTsKKwkJLyoKKwkJICogRnJlZSB0aGUgb2xkIG1lbW9yeSBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kIHNvIHdlCisJCSAqIGRvbid0IGxlYWsgaXQuIFdlIHVzZSBjYWxsX3JjdSgpIGhlcmUgaW4gb3JkZXIgdG8gYmUKKwkJICogYWJsZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhdG9taWMgY29udGV4dHMuIFRoZQorCQkgKiBhbGxvY2F0aW9uIG9mIHRoaXMgbWVtb3J5IHdpbGwgaGF2ZSByZXNlcnZlZCBlbm91Z2gKKwkJICogc3BhY2UgZm9yIHN0cnVjdCBsaXN0ZW5lcnNfcmN1X2hlYWQgYXQgdGhlIGVuZC4KKwkJICovCisJCW9sZF9yY3VfaGVhZCA9ICh2b2lkICopKHRibC0+bGlzdGVuZXJzICsKKwkJCQkJTkxHUlBMT05HUyh0YmwtPmdyb3VwcykpOworCQlvbGRfcmN1X2hlYWQtPnB0ciA9IG9sZDsKKwkJY2FsbF9yY3UoJm9sZF9yY3VfaGVhZC0+cmN1X2hlYWQsIG5ldGxpbmtfZnJlZV9vbGRfbGlzdGVuZXJzKTsKIAl9CiAJdGJsLT5ncm91cHMgPSBncm91cHM7CiAKICBvdXRfdW5ncmFiOgogCW5ldGxpbmtfdGFibGVfdW5ncmFiKCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0Ja2ZyZWUob2xkKTsKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKTsKIAogLyoqCiAgKiBuZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2VycyAtIGtpY2sgb2ZmIG11bHRpY2FzdCBsaXN0ZW5lcnMKQEAgLTE1NjQsNyArMTYyMyw2IEBACiAKIAluZXRsaW5rX3RhYmxlX3VuZ3JhYigpOwogfQotRVhQT1JUX1NZTUJPTChuZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2Vycyk7CiAKIHZvaWQgbmV0bGlua19zZXRfbm9ucm9vdChpbnQgcHJvdG9jb2wsIHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTE2NDcsNyArMTcwNSw3IEBACiB9CiAKIGludCBuZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCSAgICAgICBpbnQgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICopLAogCQkgICAgICAgaW50ICgqZG9uZSkoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKikpCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCmluZGV4IGVlZDRjNmEuLjY2ZjZiYTAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCkBAIC0xOCw4ICsxOCw2IEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAKLXN0cnVjdCBzb2NrICpnZW5sX3NvY2sgPSBOVUxMOwotCiBzdGF0aWMgREVGSU5FX01VVEVYKGdlbmxfbXV0ZXgpOyAvKiBzZXJpYWxpemF0aW9uIG9mIG1lc3NhZ2UgcHJvY2Vzc2luZyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VubF9sb2NrKHZvaWQpCkBAIC0xMzgsNyArMTM2LDcgQEAKIHsKIAlpbnQgaWQ7CiAJdW5zaWduZWQgbG9uZyAqbmV3X2dyb3VwczsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJQlVHX09OKGdycC0+bmFtZVswXSA9PSAnXDAnKTsKIApAQCAtMTc1LDEwICsxNzMsMzEgQEAKIAkJbWNfZ3JvdXBzX2xvbmdzKys7CiAJfQogCi0JZXJyID0gbmV0bGlua19jaGFuZ2Vfbmdyb3VwcyhnZW5sX3NvY2ssCi0JCQkJICAgICBtY19ncm91cHNfbG9uZ3MgKiBCSVRTX1BFUl9MT05HKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwlpZiAoZmFtaWx5LT5uZXRuc29rKSB7CisJCXN0cnVjdCBuZXQgKm5ldDsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWZvcl9lYWNoX25ldF9yY3UobmV0KSB7CisJCQllcnIgPSBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKG5ldC0+Z2VubF9zb2NrLAorCQkJCQltY19ncm91cHNfbG9uZ3MgKiBCSVRTX1BFUl9MT05HKTsKKwkJCWlmIChlcnIpIHsKKwkJCQkvKgorCQkJCSAqIE5vIG5lZWQgdG8gcm9sbCBiYWNrLCBjYW4gb25seSBmYWlsIGlmCisJCQkJICogbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMgYW5kIHRoZW4gdGhlCisJCQkJICogbnVtYmVyIG9mIF9wb3NzaWJsZV8gZ3JvdXBzIGhhcyBiZWVuCisJCQkJICogaW5jcmVhc2VkIG9uIHNvbWUgc29ja2V0cyB3aGljaCBpcyBvay4KKwkJCQkgKi8KKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9IGVsc2UgeworCQllcnIgPSBuZXRsaW5rX2NoYW5nZV9uZ3JvdXBzKGluaXRfbmV0Lmdlbmxfc29jaywKKwkJCQkJICAgICBtY19ncm91cHNfbG9uZ3MgKiBCSVRTX1BFUl9MT05HKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KIAogCWdycC0+aWQgPSBpZDsKIAlzZXRfYml0KGlkLCBtY19ncm91cHMpOwpAQCAtMTk1LDggKzIxNCwxNCBAQAogc3RhdGljIHZvaWQgX19nZW5sX3VucmVnaXN0ZXJfbWNfZ3JvdXAoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCiAJCQkJICAgICAgIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCAqZ3JwKQogeworCXN0cnVjdCBuZXQgKm5ldDsKIAlCVUdfT04oZ3JwLT5mYW1pbHkgIT0gZmFtaWx5KTsKLQluZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2VycyhnZW5sX3NvY2ssIGdycC0+aWQpOworCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldF9yY3UobmV0KQorCQluZXRsaW5rX2NsZWFyX211bHRpY2FzdF91c2VycyhuZXQtPmdlbmxfc29jaywgZ3JwLT5pZCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAljbGVhcl9iaXQoZ3JwLT5pZCwgbWNfZ3JvdXBzKTsKIAlsaXN0X2RlbCgmZ3JwLT5saXN0KTsKIAlnZW5sX2N0cmxfZXZlbnQoQ1RSTF9DTURfREVMTUNBU1RfR1JQLCBncnApOwpAQCAtNDY3LDYgKzQ5Miw3IEBACiB7CiAJc3RydWN0IGdlbmxfb3BzICpvcHM7CiAJc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHk7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJc3RydWN0IGdlbmxfaW5mbyBpbmZvOwogCXN0cnVjdCBnZW5sbXNnaGRyICpoZHIgPSBubG1zZ19kYXRhKG5saCk7CiAJaW50IGhkcmxlbiwgZXJyOwpAQCAtNDc1LDYgKzUwMSwxMCBAQAogCWlmIChmYW1pbHkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwkvKiB0aGlzIGZhbWlseSBkb2Vzbid0IGV4aXN0IGluIHRoaXMgbmV0bnMgKi8KKwlpZiAoIWZhbWlseS0+bmV0bnNvayAmJiAhbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKIAloZHJsZW4gPSBHRU5MX0hEUkxFTiArIGZhbWlseS0+aGRyc2l6ZTsKIAlpZiAobmxoLT5ubG1zZ19sZW4gPCBubG1zZ19tc2dfc2l6ZShoZHJsZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQ5Miw3ICs1MjIsNyBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJCWdlbmxfdW5sb2NrKCk7Ci0JCWVyciA9IG5ldGxpbmtfZHVtcF9zdGFydChnZW5sX3NvY2ssIHNrYiwgbmxoLAorCQllcnIgPSBuZXRsaW5rX2R1bXBfc3RhcnQobmV0LT5nZW5sX3NvY2ssIHNrYiwgbmxoLAogCQkJCQkgb3BzLT5kdW1waXQsIG9wcy0+ZG9uZSk7CiAJCWdlbmxfbG9jaygpOwogCQlyZXR1cm4gZXJyOwpAQCAtNTE0LDYgKzU0NCw3IEBACiAJaW5mby5nZW5saGRyID0gbmxtc2dfZGF0YShubGgpOwogCWluZm8udXNlcmhkciA9IG5sbXNnX2RhdGEobmxoKSArIEdFTkxfSERSTEVOOwogCWluZm8uYXR0cnMgPSBmYW1pbHktPmF0dHJidWY7CisJZ2VubF9pbmZvX25ldF9zZXQoJmluZm8sIG5ldCk7CiAKIAlyZXR1cm4gb3BzLT5kb2l0KHNrYiwgJmluZm8pOwogfQpAQCAtNTM0LDYgKzU2NSw3IEBACiAJLm5hbWUgPSAibmxjdHJsIiwKIAkudmVyc2lvbiA9IDB4MiwKIAkubWF4YXR0ciA9IENUUkxfQVRUUl9NQVgsCisJLm5ldG5zb2sgPSB0cnVlLAogfTsKIAogc3RhdGljIGludCBjdHJsX2ZpbGxfaW5mbyhzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwgdTMyIHBpZCwgdTMyIHNlcSwKQEAgLTY1MCw2ICs2ODIsNyBAQAogCiAJaW50IGksIG4gPSAwOwogCXN0cnVjdCBnZW5sX2ZhbWlseSAqcnQ7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IGNoYWluc190b19za2lwID0gY2ItPmFyZ3NbMF07CiAJaW50IGZhbXNfdG9fc2tpcCA9IGNiLT5hcmdzWzFdOwogCkBAIC02NTgsNiArNjkxLDggQEAKIAkJCWNvbnRpbnVlOwogCQluID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShydCwgZ2VubF9mYW1pbHlfY2hhaW4oaSksIGZhbWlseV9saXN0KSB7CisJCQlpZiAoIXJ0LT5uZXRuc29rICYmICFuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQorCQkJCWNvbnRpbnVlOwogCQkJaWYgKCsrbiA8IGZhbXNfdG9fc2tpcCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChjdHJsX2ZpbGxfaW5mbyhydCwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCkBAIC03MjksNiArNzY0LDcgQEAKIAlpZiAoaW5mby0+YXR0cnNbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pIHsKIAkJdTE2IGlkID0gbmxhX2dldF91MTYoaW5mby0+YXR0cnNbQ1RSTF9BVFRSX0ZBTUlMWV9JRF0pOwogCQlyZXMgPSBnZW5sX2ZhbWlseV9maW5kX2J5aWQoaWQpOworCQllcnIgPSAtRU5PRU5UOwogCX0KIAogCWlmIChpbmZvLT5hdHRyc1tDVFJMX0FUVFJfRkFNSUxZX05BTUVdKSB7CkBAIC03MzYsNDkgKzc3Miw2MSBAQAogCiAJCW5hbWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tDVFJMX0FUVFJfRkFNSUxZX05BTUVdKTsKIAkJcmVzID0gZ2VubF9mYW1pbHlfZmluZF9ieW5hbWUobmFtZSk7CisJCWVyciA9IC1FTk9FTlQ7CiAJfQogCi0JaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyb3V0OworCWlmIChyZXMgPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKKworCWlmICghcmVzLT5uZXRuc29rICYmICFuZXRfZXEoZ2VubF9pbmZvX25ldChpbmZvKSwgJmluaXRfbmV0KSkgeworCQkvKiBmYW1pbHkgZG9lc24ndCBleGlzdCBoZXJlICovCisJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCW1zZyA9IGN0cmxfYnVpbGRfZmFtaWx5X21zZyhyZXMsIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsCiAJCQkJICAgIENUUkxfQ01EX05FV0ZBTUlMWSk7Ci0JaWYgKElTX0VSUihtc2cpKSB7Ci0JCWVyciA9IFBUUl9FUlIobXNnKTsKLQkJZ290byBlcnJvdXQ7Ci0JfQorCWlmIChJU19FUlIobXNnKSkKKwkJcmV0dXJuIFBUUl9FUlIobXNnKTsKIAotCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKLWVycm91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2VubF9jdHJsX2V2ZW50KGludCBldmVudCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5OworCXN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCAqZ3JwOwogCi0JaWYgKGdlbmxfc29jayA9PSBOVUxMKQorCS8qIGdlbmwgaXMgc3RpbGwgaW5pdGlhbGlzaW5nICovCisJaWYgKCFpbml0X25ldC5nZW5sX3NvY2spCiAJCXJldHVybiAwOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1RSTF9DTURfTkVXRkFNSUxZOgogCWNhc2UgQ1RSTF9DTURfREVMRkFNSUxZOgotCQltc2cgPSBjdHJsX2J1aWxkX2ZhbWlseV9tc2coZGF0YSwgMCwgMCwgZXZlbnQpOwotCQlpZiAoSVNfRVJSKG1zZykpCi0JCQlyZXR1cm4gUFRSX0VSUihtc2cpOwotCi0JCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgR0VOTF9JRF9DVFJMLCBHRlBfS0VSTkVMKTsKKwkJZmFtaWx5ID0gZGF0YTsKKwkJbXNnID0gY3RybF9idWlsZF9mYW1pbHlfbXNnKGZhbWlseSwgMCwgMCwgZXZlbnQpOwogCQlicmVhazsKIAljYXNlIENUUkxfQ01EX05FV01DQVNUX0dSUDoKIAljYXNlIENUUkxfQ01EX0RFTE1DQVNUX0dSUDoKKwkJZ3JwID0gZGF0YTsKKwkJZmFtaWx5ID0gZ3JwLT5mYW1pbHk7CiAJCW1zZyA9IGN0cmxfYnVpbGRfbWNncnBfbXNnKGRhdGEsIDAsIDAsIGV2ZW50KTsKLQkJaWYgKElTX0VSUihtc2cpKQotCQkJcmV0dXJuIFBUUl9FUlIobXNnKTsKLQotCQlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIEdFTkxfSURfQ1RSTCwgR0ZQX0tFUk5FTCk7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChJU19FUlIobXNnKSkKKwkJcmV0dXJuIFBUUl9FUlIobXNnKTsKKworCWlmICghZmFtaWx5LT5uZXRuc29rKSB7CisJCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKCZpbml0X25ldCwgbXNnLCAwLAorCQkJCQlHRU5MX0lEX0NUUkwsIEdGUF9LRVJORUwpOworCX0gZWxzZSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJZ2VubG1zZ19tdWx0aWNhc3RfYWxsbnMobXNnLCAwLCBHRU5MX0lEX0NUUkwsIEdGUF9BVE9NSUMpOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTc5NSw2ICs4NDMsMzMgQEAKIAkubmFtZQkJPSAibm90aWZ5IiwKIH07CiAKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBnZW5sX3Blcm5ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwkvKiB3ZSdsbCBidW1wIHRoZSBncm91cCBudW1iZXIgcmlnaHQgYWZ0ZXJ3YXJkcyAqLworCW5ldC0+Z2VubF9zb2NrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKG5ldCwgTkVUTElOS19HRU5FUklDLCAwLAorCQkJCQkgICAgICAgZ2VubF9yY3YsICZnZW5sX211dGV4LAorCQkJCQkgICAgICAgVEhJU19NT0RVTEUpOworCisJaWYgKCFuZXQtPmdlbmxfc29jayAmJiBuZXRfZXEobmV0LCAmaW5pdF9uZXQpKQorCQlwYW5pYygiR0VOTDogQ2Fubm90IGluaXRpYWxpemUgZ2VuZXJpYyBuZXRsaW5rXG4iKTsKKworCWlmICghbmV0LT5nZW5sX3NvY2spCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZ2VubF9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJbmV0bGlua19rZXJuZWxfcmVsZWFzZShuZXQtPmdlbmxfc29jayk7CisJbmV0LT5nZW5sX3NvY2sgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdlbmxfcGVybmV0X29wcyA9IHsKKwkuaW5pdCA9IGdlbmxfcGVybmV0X2luaXQsCisJLmV4aXQgPSBnZW5sX3Blcm5ldF9leGl0LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZ2VubF9pbml0KHZvaWQpCiB7CiAJaW50IGksIGVycjsKQEAgLTgwNCwzNiArODc5LDY3IEBACiAKIAllcnIgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmZ2VubF9jdHJsKTsKIAlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJvdXQ7CisJCWdvdG8gcHJvYmxlbTsKIAogCWVyciA9IGdlbmxfcmVnaXN0ZXJfb3BzKCZnZW5sX2N0cmwsICZnZW5sX2N0cmxfb3BzKTsKIAlpZiAoZXJyIDwgMCkKLQkJZ290byBlcnJvdXRfcmVnaXN0ZXI7CisJCWdvdG8gcHJvYmxlbTsKIAogCW5ldGxpbmtfc2V0X25vbnJvb3QoTkVUTElOS19HRU5FUklDLCBOTF9OT05ST09UX1JFQ1YpOwogCi0JLyogd2UnbGwgYnVtcCB0aGUgZ3JvdXAgbnVtYmVyIHJpZ2h0IGFmdGVyd2FyZHMgKi8KLQlnZW5sX3NvY2sgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoJmluaXRfbmV0LCBORVRMSU5LX0dFTkVSSUMsIDAsCi0JCQkJCSAgZ2VubF9yY3YsICZnZW5sX211dGV4LCBUSElTX01PRFVMRSk7Ci0JaWYgKGdlbmxfc29jayA9PSBOVUxMKQotCQlwYW5pYygiR0VOTDogQ2Fubm90IGluaXRpYWxpemUgZ2VuZXJpYyBuZXRsaW5rXG4iKTsKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZnZW5sX3Blcm5ldF9vcHMpOworCWlmIChlcnIpCisJCWdvdG8gcHJvYmxlbTsKIAogCWVyciA9IGdlbmxfcmVnaXN0ZXJfbWNfZ3JvdXAoJmdlbmxfY3RybCwgJm5vdGlmeV9ncnApOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dF9yZWdpc3RlcjsKKwkJZ290byBwcm9ibGVtOwogCiAJcmV0dXJuIDA7CiAKLWVycm91dF9yZWdpc3RlcjoKLQlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZnZW5sX2N0cmwpOwotZXJyb3V0OgorcHJvYmxlbToKIAlwYW5pYygiR0VOTDogQ2Fubm90IHJlZ2lzdGVyIGNvbnRyb2xsZXI6ICVkXG4iLCBlcnIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoZ2VubF9pbml0KTsKIAotRVhQT1JUX1NZTUJPTChnZW5sX3NvY2spOwogRVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX29wcyk7CiBFWFBPUlRfU1lNQk9MKGdlbmxfdW5yZWdpc3Rlcl9vcHMpOwogRVhQT1JUX1NZTUJPTChnZW5sX3JlZ2lzdGVyX2ZhbWlseSk7CiBFWFBPUlRfU1lNQk9MKGdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkpOworCitzdGF0aWMgaW50IGdlbmxtc2dfbWNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdW5zaWduZWQgbG9uZyBncm91cCwKKwkJCSBnZnBfdCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqdG1wOworCXN0cnVjdCBuZXQgKm5ldCwgKnByZXYgPSBOVUxMOworCWludCBlcnI7CisKKwlmb3JfZWFjaF9uZXRfcmN1KG5ldCkgeworCQlpZiAocHJldikgeworCQkJdG1wID0gc2tiX2Nsb25lKHNrYiwgZmxhZ3MpOworCQkJaWYgKCF0bXApIHsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCWdvdG8gZXJyb3I7CisJCQl9CisJCQllcnIgPSBubG1zZ19tdWx0aWNhc3QocHJldi0+Z2VubF9zb2NrLCB0bXAsCisJCQkJCSAgICAgIHBpZCwgZ3JvdXAsIGZsYWdzKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJvcjsKKwkJfQorCisJCXByZXYgPSBuZXQ7CisJfQorCisJcmV0dXJuIG5sbXNnX211bHRpY2FzdChwcmV2LT5nZW5sX3NvY2ssIHNrYiwgcGlkLCBncm91cCwgZmxhZ3MpOworIGVycm9yOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBnZW5sbXNnX211bHRpY2FzdF9hbGxucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1bnNpZ25lZCBpbnQgZ3JvdXAsCisJCQkgICAgZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIGdlbmxtc2dfbWNhc3Qoc2tiLCBwaWQsIGdyb3VwLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vbnJfZGV2LmMgYi9uZXQvbmV0cm9tL25yX2Rldi5jCmluZGV4IDM1MTM3MjQuLjdhYTExYjAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRyb20vbnJfZGV2LmMKKysrIGIvbmV0L25ldHJvbS9ucl9kZXYuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbnJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IG5yX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CkBAIC0xNzcsMTMgKzE3NywxMyBAQAogCWlmICghbnJfcm91dGVfZnJhbWUoc2tiLCBOVUxMKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJc3RhdHMtPnR4X2Vycm9ycysrOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlzdGF0cy0+dHhfcGFja2V0cysrOwogCXN0YXRzLT50eF9ieXRlcyArPSBsZW47CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgbnJfaGVhZGVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCmluZGV4IGViZTU3MTguLmQzZDUyYzYgMTAwNjQ0Ci0tLSBhL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwpAQCAtMTM3LDggKzEzNyw3IEBACiAKIC8qIFByaXZhdGUgcGFja2V0IHNvY2tldCBzdHJ1Y3R1cmVzLiAqLwogCi1zdHJ1Y3QgcGFja2V0X21jbGlzdAoteworc3RydWN0IHBhY2tldF9tY2xpc3QgewogCXN0cnVjdCBwYWNrZXRfbWNsaXN0CSpuZXh0OwogCWludAkJCWlmaW5kZXg7CiAJaW50CQkJY291bnQ7CkBAIC0xNDksOCArMTQ4LDcgQEAKIC8qIGlkZW50aWNhbCB0byBzdHJ1Y3QgcGFja2V0X21yZXEgZXhjZXB0IGl0IGhhcwogICogYSBsb25nZXIgYWRkcmVzcyBmaWVsZC4KICAqLwotc3RydWN0IHBhY2tldF9tcmVxX21heAoteworc3RydWN0IHBhY2tldF9tcmVxX21heCB7CiAJaW50CQltcl9pZmluZGV4OwogCXVuc2lnbmVkIHNob3J0CW1yX3R5cGU7CiAJdW5zaWduZWQgc2hvcnQJbXJfYWxlbjsKQEAgLTE2Miw3ICsxNjAsNyBAQAogCQlpbnQgY2xvc2luZywgaW50IHR4X3JpbmcpOwogCiBzdHJ1Y3QgcGFja2V0X3JpbmdfYnVmZmVyIHsKLQljaGFyICoJCQkqcGdfdmVjOworCWNoYXIJCQkqKnBnX3ZlYzsKIAl1bnNpZ25lZCBpbnQJCWhlYWQ7CiAJdW5zaWduZWQgaW50CQlmcmFtZXNfcGVyX2Jsb2NrOwogCXVuc2lnbmVkIGludAkJZnJhbWVfc2l6ZTsKQEAgLTIzOSw3ICsyMzcsNyBAQAogCQlmbHVzaF9kY2FjaGVfcGFnZSh2aXJ0X3RvX3BhZ2UoJmguaDItPnRwX3N0YXR1cykpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgIlRQQUNLRVQgdmVyc2lvbiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJfZXJyKCJUUEFDS0VUIHZlcnNpb24gbm90IHN1cHBvcnRlZFxuIik7CiAJCUJVRygpOwogCX0KIApAQCAtMjY1LDcgKzI2Myw3IEBACiAJCWZsdXNoX2RjYWNoZV9wYWdlKHZpcnRfdG9fcGFnZSgmaC5oMi0+dHBfc3RhdHVzKSk7CiAJCXJldHVybiBoLmgyLT50cF9zdGF0dXM7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJUUEFDS0VUIHZlcnNpb24gbm90IHN1cHBvcnRlZFxuIik7CisJCXByX2VycigiVFBBQ0tFVCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzI3LDcgKzMyNSw3IEBACiAJV0FSTl9PTihhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpKTsKIAogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7Ci0JCXByaW50aygiQXR0ZW1wdCB0byByZWxlYXNlIGFsaXZlIHBhY2tldCBzb2NrZXQ6ICVwXG4iLCBzayk7CisJCXByX2VycigiQXR0ZW1wdCB0byByZWxlYXNlIGFsaXZlIHBhY2tldCBzb2NrZXQ6ICVwXG4iLCBzayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMzOSw3ICszMzcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3Q7CiAKLXN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCitzdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3Qgc29ja2FkZHJfcGt0ICpzcGt0OwpAQCAtMzY4LDcgKzM2Nyw4IEBACiAJaWYgKGRldl9uZXQoZGV2KSAhPSBzb2NrX25ldChzaykpCiAJCWdvdG8gb3V0OwogCi0JaWYgKChza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gb29tOwogCiAJLyogZHJvcCBhbnkgcm91dGluZyBpbmZvICovCkBAIC0zOTQsNyArMzk0LDcgQEAKIAkgKgl0byBwcmV2ZW50IHNvY2tldHMgdXNpbmcgYWxsIHRoZSBtZW1vcnkgdXAuCiAJICovCiAKLQlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLHNrYikgPT0gMCkKKwlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpID09IDApCiAJCXJldHVybiAwOwogCiBvdXQ6CkBAIC00MTMsMjUgKzQxMywyMyBAQAogCQkJICAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQlzdHJ1Y3Qgc29ja2FkZHJfcGt0ICpzYWRkcj0oc3RydWN0IHNvY2thZGRyX3BrdCAqKW1zZy0+bXNnX25hbWU7CisJc3RydWN0IHNvY2thZGRyX3BrdCAqc2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX3BrdCAqKW1zZy0+bXNnX25hbWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCV9fYmUxNiBwcm90bz0wOworCV9fYmUxNiBwcm90byA9IDA7CiAJaW50IGVycjsKIAogCS8qCiAJICoJR2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuCiAJICovCiAKLQlpZiAoc2FkZHIpCi0JeworCWlmIChzYWRkcikgewogCQlpZiAobXNnLT5tc2dfbmFtZWxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKQotCQkJcmV0dXJuKC1FSU5WQUwpOwotCQlpZiAobXNnLT5tc2dfbmFtZWxlbj09c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9wa3QpKQotCQkJcHJvdG89c2FkZHItPnNwa3RfcHJvdG9jb2w7Ci0JfQotCWVsc2UKLQkJcmV0dXJuKC1FTk9UQ09OTik7CS8qIFNPQ0tfUEFDS0VUIG11c3QgYmUgc2VudCBnaXZpbmcgYW4gYWRkcmVzcyAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChtc2ctPm1zZ19uYW1lbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfcGt0KSkKKwkJCXByb3RvID0gc2FkZHItPnNwa3RfcHJvdG9jb2w7CisJfSBlbHNlCisJCXJldHVybiAtRU5PVENPTk47CS8qIFNPQ0tfUEFDS0VUIG11c3QgYmUgc2VudCBnaXZpbmcgYW4gYWRkcmVzcyAqLwogCiAJLyoKIAkgKglGaW5kIHRoZSBkZXZpY2UgZmlyc3QgdG8gc2l6ZSBjaGVjayBpdApAQCAtNDQ4LDggKzQ0Niw4IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qCi0JICoJWW91IG1heSBub3QgcXVldWUgYSBmcmFtZSBiaWdnZXIgdGhhbiB0aGUgbXR1LiBUaGlzIGlzIHRoZSBsb3dlc3QgbGV2ZWwKLQkgKglyYXcgcHJvdG9jb2wgYW5kIHlvdSBtdXN0IGRvIHlvdXIgb3duIGZyYWdtZW50YXRpb24gYXQgdGhpcyBsZXZlbC4KKwkgKiBZb3UgbWF5IG5vdCBxdWV1ZSBhIGZyYW1lIGJpZ2dlciB0aGFuIHRoZSBtdHUuIFRoaXMgaXMgdGhlIGxvd2VzdCBsZXZlbAorCSAqIHJhdyBwcm90b2NvbCBhbmQgeW91IG11c3QgZG8geW91ciBvd24gZnJhZ21lbnRhdGlvbiBhdCB0aGlzIGxldmVsLgogCSAqLwogCiAJZXJyID0gLUVNU0dTSVpFOwpAQCAtNDYwLDkgKzQ1OCw5IEBACiAJc2tiID0gc29ja193bWFsbG9jKHNrLCBsZW4gKyBMTF9SRVNFUlZFRF9TUEFDRShkZXYpLCAwLCBHRlBfS0VSTkVMKTsKIAogCS8qCi0JICoJSWYgdGhlIHdyaXRlIGJ1ZmZlciBpcyBmdWxsLCB0aGVuIHRvdWdoLiBBdCB0aGlzIGxldmVsIHRoZSB1c2VyIGdldHMgdG8KLQkgKglkZWFsIHdpdGggdGhlIHByb2JsZW0gLSBkbyB5b3VyIG93biBhbGdvcml0aG1pYyBiYWNrb2Zmcy4gVGhhdCdzIGZhcgotCSAqCW1vcmUgZmxleGlibGUuCisJICogSWYgdGhlIHdyaXRlIGJ1ZmZlciBpcyBmdWxsLCB0aGVuIHRvdWdoLiBBdCB0aGlzIGxldmVsIHRoZSB1c2VyCisJICogZ2V0cyB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0gLSBkbyB5b3VyIG93biBhbGdvcml0aG1pYyBiYWNrb2Zmcy4KKwkgKiBUaGF0J3MgZmFyIG1vcmUgZmxleGlibGUuCiAJICovCiAKIAlpZiAoc2tiID09IE5VTEwpCkBAIC00ODgsNyArNDg2LDcgQEAKIAl9CiAKIAkvKiBSZXR1cm5zIC1FRkFVTFQgb24gZXJyb3IgKi8KLQllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLGxlbiksIG1zZy0+bXNnX2lvdiwgbGVuKTsKKwllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBsZW4pLCBtc2ctPm1zZ19pb3YsIGxlbik7CiAJc2tiLT5wcm90b2NvbCA9IHByb3RvOwogCXNrYi0+ZGV2ID0gZGV2OwogCXNrYi0+cHJpb3JpdHkgPSBzay0+c2tfcHJpb3JpdHk7CkBAIC01MDEsNyArNDk5LDcgQEAKIAogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAJZGV2X3B1dChkZXYpOwotCXJldHVybihsZW4pOworCXJldHVybiBsZW47CiAKIG91dF9mcmVlOgogCWtmcmVlX3NrYihza2IpOwpAQCAtNTM3LDEyICs1MzUsMTMgQEAKICAgIHdlIHdpbGwgbm90IGhhcm0gYW55b25lLgogICovCiAKLXN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCitzdGF0aWMgaW50IHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDsKIAlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvOwotCXU4ICogc2tiX2hlYWQgPSBza2ItPmRhdGE7CisJdTggKnNrYl9oZWFkID0gc2tiLT5kYXRhOwogCWludCBza2JfbGVuID0gc2tiLT5sZW47CiAJdW5zaWduZWQgaW50IHNuYXBsZW4sIHJlczsKIApAQCAtNjQ4LDcgKzY0Nyw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKLXN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvOwpAQCAtNjU4LDcgKzY1OCw3IEBACiAJCXN0cnVjdCB0cGFja2V0Ml9oZHIgKmgyOwogCQl2b2lkICpyYXc7CiAJfSBoOwotCXU4ICogc2tiX2hlYWQgPSBza2ItPmRhdGE7CisJdTggKnNrYl9oZWFkID0gc2tiLT5kYXRhOwogCWludCBza2JfbGVuID0gc2tiLT5sZW47CiAJdW5zaWduZWQgaW50IHNuYXBsZW4sIHJlczsKIAl1bnNpZ25lZCBsb25nIHN0YXR1cyA9IFRQX1NUQVRVU19MT1NJTkd8VFBfU1RBVFVTX1VTRVI7CkBAIC04MjEsNyArODIxLDcgQEAKIHN0YXRpYyB2b2lkIHRwYWNrZXRfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhza2ItPnNrKTsKLQl2b2lkICogcGg7CisJdm9pZCAqcGg7CiAKIAlCVUdfT04oc2tiID09IE5VTEwpOwogCkBAIC04MzYsOSArODM2LDkgQEAKIAlzb2NrX3dmcmVlKHNrYik7CiB9CiAKLXN0YXRpYyBpbnQgdHBhY2tldF9maWxsX3NrYihzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvLCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwKLQkJdm9pZCAqIGZyYW1lLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2l6ZV9tYXgsCi0JCV9fYmUxNiBwcm90bywgdW5zaWduZWQgY2hhciAqIGFkZHIpCitzdGF0aWMgaW50IHRwYWNrZXRfZmlsbF9za2Ioc3RydWN0IHBhY2tldF9zb2NrICpwbywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJdm9pZCAqZnJhbWUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzaXplX21heCwKKwkJX19iZTE2IHByb3RvLCB1bnNpZ25lZCBjaGFyICphZGRyKQogewogCXVuaW9uIHsKIAkJc3RydWN0IHRwYWNrZXRfaGRyICpoMTsKQEAgLTg2Nyw4ICs4NjcsNyBAQAogCQlicmVhazsKIAl9CiAJaWYgKHVubGlrZWx5KHRwX2xlbiA+IHNpemVfbWF4KSkgewotCQlwcmludGsoS0VSTl9FUlIgInBhY2tldCBzaXplIGlzIHRvbyBsb25nICglZCA+ICVkKVxuIiwKLQkJCQl0cF9sZW4sIHNpemVfbWF4KTsKKwkJcHJfZXJyKCJwYWNrZXQgc2l6ZSBpcyB0b28gbG9uZyAoJWQgPiAlZClcbiIsIHRwX2xlbiwgc2l6ZV9tYXgpOwogCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KIApAQCAtODgzLDEyICs4ODIsMTEgQEAKIAkJCQlOVUxMLCB0cF9sZW4pOwogCQlpZiAodW5saWtlbHkoZXJyIDwgMCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgaWYgKGRldi0+aGFyZF9oZWFkZXJfbGVuICkgeworCX0gZWxzZSBpZiAoZGV2LT5oYXJkX2hlYWRlcl9sZW4pIHsKIAkJLyogbmV0IGRldmljZSBkb2Vzbid0IGxpa2UgZW1wdHkgaGVhZCAqLwogCQlpZiAodW5saWtlbHkodHBfbGVuIDw9IGRldi0+aGFyZF9oZWFkZXJfbGVuKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJwYWNrZXQgc2l6ZSBpcyB0b28gc2hvcnQgIgotCQkJCQkiKCVkIDwgJWQpXG4iLCB0cF9sZW4sCi0JCQkJCWRldi0+aGFyZF9oZWFkZXJfbGVuKTsKKwkJCXByX2VycigicGFja2V0IHNpemUgaXMgdG9vIHNob3J0ICglZCA8ICVkKVxuIiwKKwkJCSAgICAgICB0cF9sZW4sIGRldi0+aGFyZF9oZWFkZXJfbGVuKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTkxNyw5ICs5MTUsOCBAQAogCQlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAKIAkJaWYgKHVubGlrZWx5KG5yX2ZyYWdzID49IE1BWF9TS0JfRlJBR1MpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlBhY2tldCBleGNlZWQgdGhlIG51bWJlciAiCi0JCQkJCSJvZiBza2IgZnJhZ3MoJWx1KVxuIiwKLQkJCQkJTUFYX1NLQl9GUkFHUyk7CisJCQlwcl9lcnIoIlBhY2tldCBleGNlZWQgdGhlIG51bWJlciBvZiBza2IgZnJhZ3MoJWx1KVxuIiwKKwkJCSAgICAgICBNQVhfU0tCX0ZSQUdTKTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKQEAgLTk0NCw4ICs5NDEsOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJX19iZTE2IHByb3RvOwogCWludCBpZmluZGV4LCBlcnIsIHJlc2VydmUgPSAwOwotCXZvaWQgKiBwaDsKLQlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNhZGRyPShzdHJ1Y3Qgc29ja2FkZHJfbGwgKiltc2ctPm1zZ19uYW1lOworCXZvaWQgKnBoOworCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2xsICopbXNnLT5tc2dfbmFtZTsKIAlpbnQgdHBfbGVuLCBzaXplX21heDsKIAl1bnNpZ25lZCBjaGFyICphZGRyOwogCWludCBsZW5fc3VtID0gMDsKQEAgLTEwMzgsOCArMTAzNSw3IEBACiAJCQlnb3RvIG91dF94bWl0OwogCQlwYWNrZXRfaW5jcmVtZW50X2hlYWQoJnBvLT50eF9yaW5nKTsKIAkJbGVuX3N1bSArPSB0cF9sZW47Ci0JfQotCXdoaWxlIChsaWtlbHkoKHBoICE9IE5VTEwpIHx8ICgoIShtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCkpCisJfSB3aGlsZSAobGlrZWx5KChwaCAhPSBOVUxMKSB8fCAoKCEobXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpKQogCQkJCQkmJiAoYXRvbWljX3JlYWQoJnBvLT50eF9yaW5nLnBlbmRpbmcpKSkpCiAJICAgICAgKTsKIApAQCAtMTA2NCw3ICsxMDYwLDcgQEAKIAkJCSAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2FkZHI9KHN0cnVjdCBzb2NrYWRkcl9sbCAqKW1zZy0+bXNnX25hbWU7CisJc3RydWN0IHNvY2thZGRyX2xsICpzYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfbGwgKiltc2ctPm1zZ19uYW1lOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlfX2JlMTYgcHJvdG87CkBAIC0xMTEwLDcgKzExMDYsNyBAQAogCiAJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgbGVuICsgTExfQUxMT0NBVEVEX1NQQUNFKGRldiksCiAJCQkJbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwotCWlmIChza2I9PU5VTEwpCisJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlza2JfcmVzZXJ2ZShza2IsIExMX1JFU0VSVkVEX1NQQUNFKGRldikpOwpAQCAtMTEyMiw3ICsxMTE4LDcgQEAKIAkJZ290byBvdXRfZnJlZTsKIAogCS8qIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvciAqLwotCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsbGVuKSwgbXNnLT5tc2dfaW92LCBsZW4pOworCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIGxlbiksIG1zZy0+bXNnX2lvdiwgbGVuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwogCkBAIC0xMTQwLDcgKzExMzYsNyBAQAogCiAJZGV2X3B1dChkZXYpOwogCi0JcmV0dXJuKGxlbik7CisJcmV0dXJuIGxlbjsKIAogb3V0X2ZyZWU6CiAJa2ZyZWVfc2tiKHNrYik7CkBAIC0xMjgzLDkgKzEyNzksMTAgQEAKICAqCUJpbmQgYSBwYWNrZXQgc29ja2V0IHRvIGEgZGV2aWNlCiAgKi8KIAotc3RhdGljIGludCBwYWNrZXRfYmluZF9zcGt0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBhZGRyX2xlbikKK3N0YXRpYyBpbnQgcGFja2V0X2JpbmRfc3BrdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkJICAgIGludCBhZGRyX2xlbikKIHsKLQlzdHJ1Y3Qgc29jayAqc2s9c29jay0+c2s7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJY2hhciBuYW1lWzE1XTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnIgPSAtRU5PREVWOwpAQCAtMTI5Niw3ICsxMjkzLDcgQEAKIAogCWlmIChhZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RybGNweShuYW1lLHVhZGRyLT5zYV9kYXRhLHNpemVvZihuYW1lKSk7CisJc3RybGNweShuYW1lLCB1YWRkci0+c2FfZGF0YSwgc2l6ZW9mKG5hbWUpKTsKIAogCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChzayksIG5hbWUpOwogCWlmIChkZXYpIHsKQEAgLTEzMDgsOCArMTMwNSw4IEBACiAKIHN0YXRpYyBpbnQgcGFja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQogewotCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2xsID0gKHN0cnVjdCBzb2NrYWRkcl9sbCopdWFkZHI7Ci0Jc3RydWN0IHNvY2sgKnNrPXNvY2stPnNrOworCXN0cnVjdCBzb2NrYWRkcl9sbCAqc2xsID0gKHN0cnVjdCBzb2NrYWRkcl9sbCAqKXVhZGRyOworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCWludCBlcnI7CiAKQEAgLTE0MDQsNyArMTQwMSw3IEBACiAJc2tfYWRkX25vZGUoc2ssICZuZXQtPnBhY2tldC5za2xpc3QpOwogCXNvY2tfcHJvdF9pbnVzZV9hZGQobmV0LCAmcGFja2V0X3Byb3RvLCAxKTsKIAl3cml0ZV91bmxvY2tfYmgoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIDA7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTE0NDEsNyArMTQzOCw3IEBACiAJICoJYnV0IHRoZW4gaXQgd2lsbCBibG9jay4KIAkgKi8KIAotCXNrYj1za2JfcmVjdl9kYXRhZ3JhbShzayxmbGFncyxmbGFncyZNU0dfRE9OVFdBSVQsJmVycik7CisJc2tiID0gc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzLCBmbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7CiAKIAkvKgogCSAqCUFuIGVycm9yIG9jY3VycmVkIHNvIHJldHVybiBpdC4gQmVjYXVzZSBza2JfcmVjdl9kYXRhZ3JhbSgpCkBAIC0xNDY5LDEwICsxNDY2LDkgQEAKIAkgKi8KIAogCWNvcGllZCA9IHNrYi0+bGVuOwotCWlmIChjb3BpZWQgPiBsZW4pCi0JewotCQljb3BpZWQ9bGVuOwotCQltc2ctPm1zZ19mbGFnc3w9TVNHX1RSVU5DOworCWlmIChjb3BpZWQgPiBsZW4pIHsKKwkJY29waWVkID0gbGVuOworCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CiAJfQogCiAJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCAwLCBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CkBAIC0xNTM5LDcgKzE1MzUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7Ci0Jc3RydWN0IHNvY2thZGRyX2xsICpzbGwgPSAoc3RydWN0IHNvY2thZGRyX2xsKil1YWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbCA9IChzdHJ1Y3Qgc29ja2FkZHJfbGwgKil1YWRkcjsKIAogCWlmIChwZWVyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xNTg0LDE0ICsxNTgwLDE1IEBACiAJCWVsc2UKIAkJCXJldHVybiBkZXZfdW5pY2FzdF9kZWxldGUoZGV2LCBpLT5hZGRyKTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDo7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwYWNrZXRfZGV2X21jbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X21jbGlzdCAqaSwgaW50IHdoYXQpCiB7Ci0JZm9yICggOyBpOyBpPWktPm5leHQpIHsKKwlmb3IgKCA7IGk7IGkgPSBpLT5uZXh0KSB7CiAJCWlmIChpLT5pZmluZGV4ID09IGRldi0+aWZpbmRleCkKIAkJCXBhY2tldF9kZXZfbWMoZGV2LCBpLCB3aGF0KTsKIAl9CkBAIC0xNjkzLDcgKzE2OTAsOCBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJCXBvLT5tY2xpc3QgPSBtbC0+bmV4dDsKLQkJaWYgKChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgbWwtPmlmaW5kZXgpKSAhPSBOVUxMKSB7CisJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBtbC0+aWZpbmRleCk7CisJCWlmIChkZXYgIT0gTlVMTCkgewogCQkJcGFja2V0X2Rldl9tYyhkZXYsIG1sLCAtMSk7CiAJCQlkZXZfcHV0KGRldik7CiAJCX0KQEAgLTE3MjMsNyArMTcyMSw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGxlbiA+IHNpemVvZihtcmVxKSkKIAkJCWxlbiA9IHNpemVvZihtcmVxKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZtcmVxLG9wdHZhbCxsZW4pKQorCQlpZiAoY29weV9mcm9tX3VzZXIoJm1yZXEsIG9wdHZhbCwgbGVuKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlpZiAobGVuIDwgKG1yZXEubXJfYWxlbiArIG9mZnNldG9mKHN0cnVjdCBwYWNrZXRfbXJlcSwgbXJfYWRkcmVzcykpKQogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzQwLDkgKzE3MzgsOSBAQAogCXsKIAkJc3RydWN0IHRwYWNrZXRfcmVxIHJlcTsKIAotCQlpZiAob3B0bGVuPHNpemVvZihyZXEpKQorCQlpZiAob3B0bGVuIDwgc2l6ZW9mKHJlcSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsb3B0dmFsLHNpemVvZihyZXEpKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZXEsIG9wdHZhbCwgc2l6ZW9mKHJlcSkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiBwYWNrZXRfc2V0X3Jpbmcoc2ssICZyZXEsIDAsIG9wdG5hbWUgPT0gUEFDS0VUX1RYX1JJTkcpOwogCX0KQEAgLTE3NTAsOSArMTc0OCw5IEBACiAJewogCQlpbnQgdmFsOwogCi0JCWlmIChvcHRsZW4hPXNpemVvZih2YWwpKQorCQlpZiAob3B0bGVuICE9IHNpemVvZih2YWwpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsLG9wdHZhbCxzaXplb2YodmFsKSkpCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsLCBvcHR2YWwsIHNpemVvZih2YWwpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCXBrdF9zayhzayktPmNvcHlfdGhyZXNoID0gdmFsOwpAQCAtMTk4NSw1MSArMTk4Myw1MSBAQAogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBTSU9DT1VUUToKLQkJewotCQkJaW50IGFtb3VudCA9IHNrX3dtZW1fYWxsb2NfZ2V0KHNrKTsKKwljYXNlIFNJT0NPVVRROgorCXsKKwkJaW50IGFtb3VudCA9IHNrX3dtZW1fYWxsb2NfZ2V0KHNrKTsKIAotCQkJcmV0dXJuIHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmcpOwotCQl9Ci0JCWNhc2UgU0lPQ0lOUToKLQkJewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJCWludCBhbW91bnQgPSAwOworCQlyZXR1cm4gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZyk7CisJfQorCWNhc2UgU0lPQ0lOUToKKwl7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCWludCBhbW91bnQgPSAwOwogCi0JCQlzcGluX2xvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwotCQkJc2tiID0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKLQkJCWlmIChza2IpCi0JCQkJYW1vdW50ID0gc2tiLT5sZW47Ci0JCQlzcGluX3VubG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7Ci0JCQlyZXR1cm4gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZyk7Ci0JCX0KLQkJY2FzZSBTSU9DR1NUQU1QOgotCQkJcmV0dXJuIHNvY2tfZ2V0X3RpbWVzdGFtcChzaywgKHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKWFyZyk7Ci0JCWNhc2UgU0lPQ0dTVEFNUE5TOgotCQkJcmV0dXJuIHNvY2tfZ2V0X3RpbWVzdGFtcG5zKHNrLCAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKWFyZyk7CisJCXNwaW5fbG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CisJCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJCWlmIChza2IpCisJCQlhbW91bnQgPSBza2ItPmxlbjsKKwkJc3Bpbl91bmxvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOworCQlyZXR1cm4gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZyk7CisJfQorCWNhc2UgU0lPQ0dTVEFNUDoKKwkJcmV0dXJuIHNvY2tfZ2V0X3RpbWVzdGFtcChzaywgKHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKWFyZyk7CisJY2FzZSBTSU9DR1NUQU1QTlM6CisJCXJldHVybiBzb2NrX2dldF90aW1lc3RhbXBucyhzaywgKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKilhcmcpOwogCiAjaWZkZWYgQ09ORklHX0lORVQKLQkJY2FzZSBTSU9DQUREUlQ6Ci0JCWNhc2UgU0lPQ0RFTFJUOgotCQljYXNlIFNJT0NEQVJQOgotCQljYXNlIFNJT0NHQVJQOgotCQljYXNlIFNJT0NTQVJQOgotCQljYXNlIFNJT0NHSUZBRERSOgotCQljYXNlIFNJT0NTSUZBRERSOgotCQljYXNlIFNJT0NHSUZCUkRBRERSOgotCQljYXNlIFNJT0NTSUZCUkRBRERSOgotCQljYXNlIFNJT0NHSUZORVRNQVNLOgotCQljYXNlIFNJT0NTSUZORVRNQVNLOgotCQljYXNlIFNJT0NHSUZEU1RBRERSOgotCQljYXNlIFNJT0NTSUZEU1RBRERSOgotCQljYXNlIFNJT0NTSUZGTEFHUzoKLQkJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgJmluaXRfbmV0KSkKLQkJCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCQkJcmV0dXJuIGluZXRfZGdyYW1fb3BzLmlvY3RsKHNvY2ssIGNtZCwgYXJnKTsKKwljYXNlIFNJT0NBRERSVDoKKwljYXNlIFNJT0NERUxSVDoKKwljYXNlIFNJT0NEQVJQOgorCWNhc2UgU0lPQ0dBUlA6CisJY2FzZSBTSU9DU0FSUDoKKwljYXNlIFNJT0NHSUZBRERSOgorCWNhc2UgU0lPQ1NJRkFERFI6CisJY2FzZSBTSU9DR0lGQlJEQUREUjoKKwljYXNlIFNJT0NTSUZCUkRBRERSOgorCWNhc2UgU0lPQ0dJRk5FVE1BU0s6CisJY2FzZSBTSU9DU0lGTkVUTUFTSzoKKwljYXNlIFNJT0NHSUZEU1RBRERSOgorCWNhc2UgU0lPQ1NJRkRTVEFERFI6CisJY2FzZSBTSU9DU0lGRkxBR1M6CisJCWlmICghbmV0X2VxKHNvY2tfbmV0KHNrKSwgJmluaXRfbmV0KSkKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCXJldHVybiBpbmV0X2RncmFtX29wcy5pb2N0bChzb2NrLCBjbWQsIGFyZyk7CiAjZW5kaWYKIAotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIwMzksNyArMjAzNyw3IEBACiAjZGVmaW5lIHBhY2tldF9wb2xsIGRhdGFncmFtX3BvbGwKICNlbHNlCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3BvbGwoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorc3RhdGljIHVuc2lnbmVkIGludCBwYWNrZXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQlwb2xsX3RhYmxlICp3YWl0KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMjA2OSw3ICsyMDY3LDcgQEAKIHN0YXRpYyB2b2lkIHBhY2tldF9tbV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOwotCXN0cnVjdCBzb2NrZXQgKiBzb2NrID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKIAlpZiAoc2spCkBAIC0yMDc5LDcgKzIwNzcsNyBAQAogc3RhdGljIHZvaWQgcGFja2V0X21tX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOwotCXN0cnVjdCBzb2NrZXQgKiBzb2NrID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKIAlpZiAoc2spCkBAIC0yMDg3LDggKzIwODUsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBhY2tldF9tbWFwX29wcyA9IHsKLQkub3BlbiA9CXBhY2tldF9tbV9vcGVuLAotCS5jbG9zZSA9cGFja2V0X21tX2Nsb3NlLAorCS5vcGVuCT0JcGFja2V0X21tX29wZW4sCisJLmNsb3NlCT0JcGFja2V0X21tX2Nsb3NlLAogfTsKIAogc3RhdGljIHZvaWQgZnJlZV9wZ192ZWMoY2hhciAqKnBnX3ZlYywgdW5zaWduZWQgaW50IG9yZGVyLCB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtMjIzOSw4ICsyMjM3LDggQEAKIAkJc2tiX3F1ZXVlX3B1cmdlKHJiX3F1ZXVlKTsKICN1bmRlZiBYQwogCQlpZiAoYXRvbWljX3JlYWQoJnBvLT5tYXBwZWQpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInBhY2tldF9tbWFwOiB2bWEgaXMgYnVzeTogJWRcbiIsCi0JCQkJCQlhdG9taWNfcmVhZCgmcG8tPm1hcHBlZCkpOworCQkJcHJfZXJyKCJwYWNrZXRfbW1hcDogdm1hIGlzIGJ1c3k6ICVkXG4iLAorCQkJICAgICAgIGF0b21pY19yZWFkKCZwby0+bWFwcGVkKSk7CiAJfQogCW11dGV4X3VubG9jaygmcG8tPnBnX3ZlY19sb2NrKTsKIApAQCAtMjMwMyw3ICsyMzAxLDcgQEAKIAkJCWludCBwZ19udW07CiAKIAkJCWZvciAocGdfbnVtID0gMDsgcGdfbnVtIDwgcmItPnBnX3ZlY19wYWdlczsKLQkJCQkJcGdfbnVtKysscGFnZSsrKSB7CisJCQkJCXBnX251bSsrLCBwYWdlKyspIHsKIAkJCQllcnIgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHN0YXJ0LCBwYWdlKTsKIAkJCQlpZiAodW5saWtlbHkoZXJyKSkKIAkJCQkJZ290byBvdXQ7CkBAIC0yMzcyLDcgKzIzNzAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwYWNrZXRfbmV0ZGV2X25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID1wYWNrZXRfbm90aWZpZXIsCisJLm5vdGlmaWVyX2NhbGwgPQlwYWNrZXRfbm90aWZpZXIsCiB9OwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTI0MDIsNyArMjQwMCw3IEBACiAJKysqcG9zOwogCXJldHVybiAgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQk/IHNrX2hlYWQoJm5ldC0+cGFja2V0LnNrbGlzdCkKLQkJOiBza19uZXh0KChzdHJ1Y3Qgc29jayopdikgOworCQk6IHNrX25leHQoKHN0cnVjdCBzb2NrICopdikgOwogfQogCiBzdGF0aWMgdm9pZCBwYWNrZXRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0yNDMwLDcgKzI0MjgsNyBAQAogCQkJICAgcG8tPnJ1bm5pbmcsCiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcm1lbV9hbGxvYyksCiAJCQkgICBzb2NrX2lfdWlkKHMpLAotCQkJICAgc29ja19pX2lubyhzKSApOworCQkJICAgc29ja19pX2lubyhzKSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L2RhdGFncmFtLmMgYi9uZXQvcGhvbmV0L2RhdGFncmFtLmMKaW5kZXggZTA4Nzg2Mi4uZWY1Yzc1YyAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9kYXRhZ3JhbS5jCisrKyBiL25ldC9waG9uZXQvZGF0YWdyYW0uYwpAQCAtMTU5LDggKzE1OSwxMSBAQAogc3RhdGljIGludCBwbl9iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGVyciA9IHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKTsKLQlpZiAoZXJyIDwgMCkKKwlpZiAoZXJyIDwgMCkgewogCQlrZnJlZV9za2Ioc2tiKTsKKwkJaWYgKGVyciA9PSAtRU5PTUVNKQorCQkJYXRvbWljX2luYygmc2stPnNrX2Ryb3BzKTsKKwl9CiAJcmV0dXJuIGVyciA/IE5FVF9SWF9EUk9QIDogTkVUX1JYX1NVQ0NFU1M7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvcGVwLWdwcnMuYyBiL25ldC9waG9uZXQvcGVwLWdwcnMuYwppbmRleCA0ODA4MzlkLi5kMTgzNTA5IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BlcC1ncHJzLmMKKysrIGIvbmV0L3Bob25ldC9wZXAtZ3Bycy5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBncHJzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBuZXRkZXZfdHhfdCBncHJzX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZ3Byc19kZXYgKmdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBncC0+c2s7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlza2Jfb3JwaGFuKHNrYik7CkBAIC0yMTUsNyArMjE1LDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJaWYgKHBlcF93cml0ZWFibGUoc2spKQogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBncHJzX3NldF9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuYwppbmRleCBlZWY4MzNlLi5iODI1MmQyIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BlcC5jCisrKyBiL25ldC9waG9uZXQvcGVwLmMKQEAgLTM0Niw4ICszNDYsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFBOU19QRVBfQ1RSTF9SRVE6Ci0JCWlmIChza2JfcXVldWVfbGVuKCZwbi0+Y3RybHJlcV9xdWV1ZSkgPj0gUE5QSVBFX0NUUkxSRVFfTUFYKQorCQlpZiAoc2tiX3F1ZXVlX2xlbigmcG4tPmN0cmxyZXFfcXVldWUpID49IFBOUElQRV9DVFJMUkVRX01BWCkgeworCQkJYXRvbWljX2luYygmc2stPnNrX2Ryb3BzKTsKIAkJCWJyZWFrOworCQl9CiAJCV9fc2tiX3B1bGwoc2tiLCA0KTsKIAkJcXVldWUgPSAmcG4tPmN0cmxyZXFfcXVldWU7CiAJCWdvdG8gcXVldWU7CkBAIC0zNTgsMTAgKzM2MCwxMyBAQAogCQkJZXJyID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpOwogCQkJaWYgKCFlcnIpCiAJCQkJcmV0dXJuIDA7CisJCQlpZiAoZXJyID09IC1FTk9NRU0pCisJCQkJYXRvbWljX2luYygmc2stPnNrX2Ryb3BzKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJaWYgKHBuLT5yeF9jcmVkaXRzID09IDApIHsKKwkJCWF0b21pY19pbmMoJnNrLT5za19kcm9wcyk7CiAJCQllcnIgPSAtRU5PQlVGUzsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX2Rldi5jIGIvbmV0L3Bob25ldC9wbl9kZXYuYwppbmRleCBjMmI3N2E2Li4yZjY1ZGNhIDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX2Rldi5jCisrKyBiL25ldC9waG9uZXQvcG5fZGV2LmMKQEAgLTI3LDYgKzI3LDggQEAKICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9waG9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPG5ldC9waG9uZXQvcG5fZGV2Lmg+CkBAIC0xOTQsMTQgKzE5NiwzNyBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIGEgUGhvbmV0IGRldmljZSwgaWYgc3VwcG9ydGVkICovCitzdGF0aWMgaW50IHBob25ldF9kZXZpY2VfYXV0b2NvbmYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWZfcGhvbmV0X3JlcSByZXE7CisJaW50IHJldDsKKworCWlmICghZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldCA9IGRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKGRldiwgKHN0cnVjdCBpZnJlcSAqKSZyZXEsCisJCQkJCQlTSU9DUE5HQVVUT0NPTkYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBwaG9uZXRfYWRkcmVzc19hZGQoZGV2LCByZXEuaWZyX3Bob25ldF9hdXRvY29uZi5kZXZpY2UpOworfQorCiAvKiBub3RpZnkgUGhvbmV0IG9mIGRldmljZSBldmVudHMgKi8KIHN0YXRpYyBpbnQgcGhvbmV0X2RldmljZV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICptZSwgdW5zaWduZWQgbG9uZyB3aGF0LAogCQkJCXZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYXJnOwogCi0JaWYgKHdoYXQgPT0gTkVUREVWX1VOUkVHSVNURVIpCisJc3dpdGNoICh3aGF0KSB7CisJY2FzZSBORVRERVZfUkVHSVNURVI6CisJCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX1BIT05FVCkKKwkJCXBob25ldF9kZXZpY2VfYXV0b2NvbmYoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKIAkJcGhvbmV0X2RldmljZV9kZXN0cm95KGRldik7CisJCWJyZWFrOworCX0KIAlyZXR1cm4gMDsKIAogfQpAQCAtMjE4LDYgKzI0MywxMSBAQAogCWlmICghcG5uKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAicGhvbmV0IiwgMCwgJnBuX3NvY2tfc2VxX2ZvcHMpKSB7CisJCWtmcmVlKHBubik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCUlOSVRfTElTVF9IRUFEKCZwbm4tPnBuZGV2cy5saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmcG5uLT5wbmRldnMubG9jayk7CiAJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCwgcG5uKTsKQEAgLTIzMyw2ICsyNjMsOCBAQAogCWZvcl9lYWNoX25ldGRldihuZXQsIGRldikKIAkJcGhvbmV0X2RldmljZV9kZXN0cm95KGRldik7CiAJcnRubF91bmxvY2soKTsKKworCXByb2NfbmV0X3JlbW92ZShuZXQsICJwaG9uZXQiKTsKIAlrZnJlZShwbm4pOwogfQogCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCmluZGV4IGY4YjRjZWUuLmQyMWZkMzUgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcG5fbmV0bGluay5jCisrKyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAogCQkJaWYgKGZpbGxfYWRkcihza2IsIHBuZC0+bmV0ZGV2LCBhZGRyIDw8IDIsCiAJCQkJCSBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKLQkJCQkJY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXQUREUikpCisJCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV0FERFIpIDwgMCkKIAkJCQlnb3RvIG91dDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvc29ja2V0LmMgYi9uZXQvcGhvbmV0L3NvY2tldC5jCmluZGV4IGFkYTJhMzUuLjdhNGVlMzkgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3Bob25ldC9zb2NrZXQuYwpAQCAtNDEyLDMgKzQxMiwxMDIgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocG5fc29ja19nZXRfcG9ydCk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIHN0cnVjdCBzb2NrICpwbl9zb2NrX2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IHNvY2sgKnNrbm9kZTsKKworCXNrX2Zvcl9lYWNoKHNrbm9kZSwgbm9kZSwgJnBuc29ja3MuaGxpc3QpIHsKKwkJaWYgKCFuZXRfZXEobmV0LCBzb2NrX25ldChza25vZGUpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXBvcykKKwkJCXJldHVybiBza25vZGU7CisJCXBvcy0tOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzb2NrICpwbl9zb2NrX2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisKKwlkbworCQlzayA9IHNrX25leHQoc2spOworCXdoaWxlIChzayAmJiAhbmV0X2VxKG5ldCwgc29ja19uZXQoc2spKSk7CisKKwlyZXR1cm4gc2s7Cit9CisKK3N0YXRpYyB2b2lkICpwbl9zb2NrX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhwbnNvY2tzLmxvY2spCit7CisJc3Bpbl9sb2NrX2JoKCZwbnNvY2tzLmxvY2spOworCXJldHVybiAqcG9zID8gcG5fc29ja19nZXRfaWR4KHNlcSwgKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOworfQorCitzdGF0aWMgdm9pZCAqcG5fc29ja19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHNvY2sgKnNrOworCisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlzayA9IHBuX3NvY2tfZ2V0X2lkeChzZXEsIDApOworCWVsc2UKKwkJc2sgPSBwbl9zb2NrX2dldF9uZXh0KHNlcSwgdik7CisJKCpwb3MpKys7CisJcmV0dXJuIHNrOworfQorCitzdGF0aWMgdm9pZCBwbl9zb2NrX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMocG5zb2Nrcy5sb2NrKQoreworCXNwaW5fdW5sb2NrX2JoKCZwbnNvY2tzLmxvY2spOworfQorCitzdGF0aWMgaW50IHBuX3NvY2tfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJaW50IGxlbjsKKworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJc2VxX3ByaW50ZihzZXEsICIlcyVuIiwgInB0ICBsb2MgIHJlbSBycyBzdCB0eF9xdWV1ZSByeF9xdWV1ZSAiCisJCQkiICB1aWQgaW5vZGUgcmVmIHBvaW50ZXIgZHJvcHMiLCAmbGVuKTsKKwllbHNlIHsKKwkJc3RydWN0IHNvY2sgKnNrID0gdjsKKwkJc3RydWN0IHBuX3NvY2sgKnBuID0gcG5fc2soc2spOworCisJCXNlcV9wcmludGYoc2VxLCAiJTJkICUwNFg6JTA0WDolMDJYICUwMlggJTA4WDolMDhYICU1ZCAlbHUgIgorCQkJIiVkICVwICVkJW4iLAorCQkJc2stPnNrX3Byb3RvY29sLCBwbi0+c29iamVjdCwgMCwgcG4tPnJlc291cmNlLAorCQkJc2stPnNrX3N0YXRlLAorCQkJc2tfd21lbV9hbGxvY19nZXQoc2spLCBza19ybWVtX2FsbG9jX2dldChzayksCisJCQlzb2NrX2lfdWlkKHNrKSwgc29ja19pX2lubyhzayksCisJCQlhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCksIHNrLAorCQkJYXRvbWljX3JlYWQoJnNrLT5za19kcm9wcyksICZsZW4pOworCX0KKwlzZXFfcHJpbnRmKHNlcSwgIiUqc1xuIiwgMTI3IC0gbGVuLCAiIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcG5fc29ja19zZXFfb3BzID0geworCS5zdGFydCA9IHBuX3NvY2tfc2VxX3N0YXJ0LAorCS5uZXh0ID0gcG5fc29ja19zZXFfbmV4dCwKKwkuc3RvcCA9IHBuX3NvY2tfc2VxX3N0b3AsCisJLnNob3cgPSBwbl9zb2NrX3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBwbl9zb2NrX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuX25ldChpbm9kZSwgZmlsZSwgJnBuX3NvY2tfc2VxX29wcywKKwkJCQlzaXplb2Yoc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSkpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBuX3NvY2tfc2VxX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBwbl9zb2NrX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9LY29uZmlnIGIvbmV0L3Jkcy9LY29uZmlnCmluZGV4IDc5Njc3M2IuLmVjNzUzYjMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvS2NvbmZpZworKysgYi9uZXQvcmRzL0tjb25maWcKQEAgLTEsMTQgKzEsMjggQEAKIAogY29uZmlnIFJEUwotCXRyaXN0YXRlICJSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gSU5FVCAmJiBJTkZJTklCQU5EX0lQT0lCICYmIEVYUEVSSU1FTlRBTAotCWRlcGVuZHMgb24gSU5GSU5JQkFORCAmJiBJTkZJTklCQU5EX0FERFJfVFJBTlMKKwl0cmlzdGF0ZSAiVGhlIFJEUyBQcm90b2NvbCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElORVQgJiYgRVhQRVJJTUVOVEFMCiAJLS0taGVscC0tLQotCSAgUkRTIHByb3ZpZGVzIHJlbGlhYmxlLCBzZXF1ZW5jZWQgZGVsaXZlcnkgb2YgZGF0YWdyYW1zCi0JICBvdmVyIEluZmluaWJhbmQuCisJICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSwKKwkgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kLCBpV0FSUCwKKwkgIG9yIFRDUC4KKworY29uZmlnIFJEU19SRE1BCisJdHJpc3RhdGUgIlJEUyBvdmVyIEluZmluaWJhbmQgYW5kIGlXQVJQIgorCWRlcGVuZHMgb24gUkRTICYmIElORklOSUJBTkQgJiYgSU5GSU5JQkFORF9BRERSX1RSQU5TCisJLS0taGVscC0tLQorCSAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFuZCBpV0FSUCBhcyBhIHRyYW5zcG9ydC4KKwkgIFRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIFJETUEgb3BlcmF0aW9ucy4KKworY29uZmlnIFJEU19UQ1AKKwl0cmlzdGF0ZSAiUkRTIG92ZXIgVENQIgorCWRlcGVuZHMgb24gUkRTCisJLS0taGVscC0tLQorCSAgQWxsb3cgUkRTIHRvIHVzZSBUQ1AgYXMgYSB0cmFuc3BvcnQuCisJICBUaGlzIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0IFJETUEgb3BlcmF0aW9ucy4KIAogY29uZmlnIFJEU19ERUJVRwotICAgICAgICBib29sICJEZWJ1Z2dpbmcgbWVzc2FnZXMiCisgICAgICAgIGJvb2wgIlJEUyBkZWJ1Z2dpbmcgbWVzc2FnZXMiCiAJZGVwZW5kcyBvbiBSRFMKICAgICAgICAgZGVmYXVsdCBuCiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvTWFrZWZpbGUgYi9uZXQvcmRzL01ha2VmaWxlCmluZGV4IDUxZjI3NTguLmI0NmVjYTEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvTWFrZWZpbGUKKysrIGIvbmV0L3Jkcy9NYWtlZmlsZQpAQCAtMSwxMyArMSwyMCBAQAogb2JqLSQoQ09ORklHX1JEUykgKz0gcmRzLm8KIHJkcy15IDo9CWFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcCiAJCQlyZWN2Lm8gc2VuZC5vIHN0YXRzLm8gc3lzY3RsLm8gdGhyZWFkcy5vIHRyYW5zcG9ydC5vIFwKLQkJCWxvb3AubyBwYWdlLm8gcmRtYS5vIFwKLQkJCXJkbWFfdHJhbnNwb3J0Lm8gXAorCQkJbG9vcC5vIHBhZ2UubyByZG1hLm8KKworb2JqLSQoQ09ORklHX1JEU19SRE1BKSArPSByZHNfcmRtYS5vCityZHNfcmRtYS1vYmpzIDo9CXJkbWFfdHJhbnNwb3J0Lm8gXAogCQkJaWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXAogCQkJaWJfc3lzY3RsLm8gaWJfcmRtYS5vIFwKIAkJCWl3Lm8gaXdfY20ubyBpd19yZWN2Lm8gaXdfcmluZy5vIGl3X3NlbmQubyBpd19zdGF0cy5vIFwKIAkJCWl3X3N5c2N0bC5vIGl3X3JkbWEubwogCisKK29iai0kKENPTkZJR19SRFNfVENQKSArPSByZHNfdGNwLm8KK3Jkc190Y3Atb2JqcyA6PQkJdGNwLm8gdGNwX2Nvbm5lY3QubyB0Y3BfbGlzdGVuLm8gdGNwX3JlY3YubyBcCisJCQl0Y3Bfc2VuZC5vIHRjcF9zdGF0cy5vCisKIGlmZXEgKCQoQ09ORklHX1JEU19ERUJVRyksIHkpCiBFWFRSQV9DRkxBR1MgKz0gLURERUJVRwogZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvYWZfcmRzLmMgYi9uZXQvcmRzL2FmX3Jkcy5jCmluZGV4IGIxMWU3ZTUuLjEwOGVkMmUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvYWZfcmRzLmMKKysrIGIvbmV0L3Jkcy9hZl9yZHMuYwpAQCAtMzksNyArMzksNiBAQAogCiAjaW5jbHVkZSAicmRzLmgiCiAjaW5jbHVkZSAicmRtYS5oIgotI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCiAKIC8qIHRoaXMgaXMganVzdCB1c2VkIGZvciBzdGF0cyBnYXRoZXJpbmcgOi8gKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX3NvY2tfbG9jayk7CkBAIC01MDksNyArNTA4LDYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHJkc19leGl0KHZvaWQpCiB7Ci0JcmRzX3JkbWFfZXhpdCgpOwogCXNvY2tfdW5yZWdpc3RlcihyZHNfZmFtaWx5X29wcy5mYW1pbHkpOwogCXByb3RvX3VucmVnaXN0ZXIoJnJkc19wcm90byk7CiAJcmRzX2Nvbm5fZXhpdCgpOwpAQCAtNTQ5LDE0ICs1NDcsOCBAQAogCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU09DS0VUUywgcmRzX3NvY2tfaW5mbyk7CiAJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRUNWX01FU1NBR0VTLCByZHNfc29ja19pbmNfaW5mbyk7CiAKLQkvKiBpYi9pd2FycCB0cmFuc3BvcnRzIGN1cnJlbnRseSBjb21waWxlZC1pbiAqLwotCXJldCA9IHJkc19yZG1hX2luaXQoKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9zb2NrOwogCWdvdG8gb3V0OwogCi1vdXRfc29jazoKLQlzb2NrX3VucmVnaXN0ZXIocmRzX2ZhbWlseV9vcHMuZmFtaWx5KTsKIG91dF9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZyZHNfcHJvdG8pOwogb3V0X3N0YXRzOgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9iaW5kLmMgYi9uZXQvcmRzL2JpbmQuYwppbmRleCBjMTdjYzM5Li41ZDk1ZmMwIDEwMDY0NAotLS0gYS9uZXQvcmRzL2JpbmQuYworKysgYi9uZXQvcmRzL2JpbmQuYwpAQCAtMTg3LDYgKzE4Nyw5IEBACiAJaWYgKHRyYW5zID09IE5VTEwpIHsKIAkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CiAJCXJkc19yZW1vdmVfYm91bmQocnMpOworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUkRTOiByZHNfYmluZCgpIGNvdWxkIG5vdCBmaW5kIGEgdHJhbnNwb3J0LCAiCisJCQkJImxvYWQgcmRzX3RjcCBvciByZHNfcmRtYT9cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvY29uZy5jIGIvbmV0L3Jkcy9jb25nLmMKaW5kZXggNzEwZTQ1OS4uZGQyNzExZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9jb25nLmMKKysrIGIvbmV0L3Jkcy9jb25nLmMKQEAgLTI1NCw2ICsyNTQsNyBAQAogCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29uZ19tYXBfdXBkYXRlZCk7CiAKIGludCByZHNfY29uZ191cGRhdGVkX3NpbmNlKHVuc2lnbmVkIGxvbmcgKnJlY2VudCkKIHsKZGlmZiAtLWdpdCBhL25ldC9yZHMvY29ubmVjdGlvbi5jIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmMKaW5kZXggZDE0NDQ1Yy4uY2M4YjU2OCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMKKysrIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCwKIAkJCQkgICAgICAgaW50IGlzX291dGdvaW5nKQogewotCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgKnRtcCwgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCAqcGFyZW50ID0gTlVMTDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9IHJkc19jb25uX2J1Y2tldChsYWRkciwgZmFkZHIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKQEAgLTE1NSw3ICsxNTUsNiBAQAogCX0KIAogCUlOSVRfSExJU1RfTk9ERSgmY29ubi0+Y19oYXNoX25vZGUpOwotCWNvbm4tPmNfdmVyc2lvbiA9IFJEU19QUk9UT0NPTF8zXzA7CiAJY29ubi0+Y19sYWRkciA9IGxhZGRyOwogCWNvbm4tPmNfZmFkZHIgPSBmYWRkcjsKIAlzcGluX2xvY2tfaW5pdCgmY29ubi0+Y19sb2NrKTsKQEAgLTIxMSwyNiArMjEwLDQwIEBACiAJICB0cmFucy0+dF9uYW1lID8gdHJhbnMtPnRfbmFtZSA6ICJbdW5rbm93bl0iLAogCSAgaXNfb3V0Z29pbmcgPyAiKG91dGdvaW5nKSIgOiAiIik7CiAKKwkvKgorCSAqIFNpbmNlIHdlIHJhbiB3aXRob3V0IGhvbGRpbmcgdGhlIGNvbm4gbG9jaywgc29tZW9uZSBjb3VsZAorCSAqIGhhdmUgY3JlYXRlZCB0aGUgc2FtZSBjb25uIChlaXRoZXIgbm9ybWFsIG9yIHBhc3NpdmUpIGluIHRoZQorCSAqIGludGVyaW0uIFdlIGNoZWNrIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suIElmIHdlIHdvbiwgd2UgY29tcGxldGUKKwkgKiBpbml0IGFuZCByZXR1cm4gb3VyIGNvbm4uIElmIHdlIGxvc3QsIHdlIHJvbGxiYWNrIGFuZCByZXR1cm4gdGhlCisJICogb3RoZXIgb25lLgorCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7Ci0JaWYgKHBhcmVudCA9PSBOVUxMKSB7Ci0JCXRtcCA9IHJkc19jb25uX2xvb2t1cChoZWFkLCBsYWRkciwgZmFkZHIsIHRyYW5zKTsKLQkJaWYgKHRtcCA9PSBOVUxMKQotCQkJaGxpc3RfYWRkX2hlYWQoJmNvbm4tPmNfaGFzaF9ub2RlLCBoZWFkKTsKLQl9IGVsc2UgewotCQl0bXAgPSBwYXJlbnQtPmNfcGFzc2l2ZTsKLQkJaWYgKCF0bXApCisJaWYgKHBhcmVudCkgeworCQkvKiBDcmVhdGluZyBwYXNzaXZlIGNvbm4gKi8KKwkJaWYgKHBhcmVudC0+Y19wYXNzaXZlKSB7CisJCQl0cmFucy0+Y29ubl9mcmVlKGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOworCQkJY29ubiA9IHBhcmVudC0+Y19wYXNzaXZlOworCQl9IGVsc2UgewogCQkJcGFyZW50LT5jX3Bhc3NpdmUgPSBjb25uOwotCX0KLQotCWlmICh0bXApIHsKLQkJdHJhbnMtPmNvbm5fZnJlZShjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKLQkJa21lbV9jYWNoZV9mcmVlKHJkc19jb25uX3NsYWIsIGNvbm4pOwotCQljb25uID0gdG1wOworCQkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7CisJCQlyZHNfY29ubl9jb3VudCsrOworCQl9CiAJfSBlbHNlIHsKLQkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7Ci0JCXJkc19jb25uX2NvdW50Kys7Ci0JfQorCQkvKiBDcmVhdGluZyBub3JtYWwgY29ubiAqLworCQlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmZvdW5kOwogCisJCWZvdW5kID0gcmRzX2Nvbm5fbG9va3VwKGhlYWQsIGxhZGRyLCBmYWRkciwgdHJhbnMpOworCQlpZiAoZm91bmQpIHsKKwkJCXRyYW5zLT5jb25uX2ZyZWUoY29ubi0+Y190cmFuc3BvcnRfZGF0YSk7CisJCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisJCQljb25uID0gZm91bmQ7CisJCX0gZWxzZSB7CisJCQlobGlzdF9hZGRfaGVhZCgmY29ubi0+Y19oYXNoX25vZGUsIGhlYWQpOworCQkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7CisJCQlyZHNfY29ubl9jb3VudCsrOworCQl9CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKIAogb3V0OgpAQCAtMjQyLDEyICsyNTUsMTQgQEAKIHsKIAlyZXR1cm4gX19yZHNfY29ubl9jcmVhdGUobGFkZHIsIGZhZGRyLCB0cmFucywgZ2ZwLCAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZSk7CiAKIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAogCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCkKIHsKIAlyZXR1cm4gX19yZHNfY29ubl9jcmVhdGUobGFkZHIsIGZhZGRyLCB0cmFucywgZ2ZwLCAxKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyk7CiAKIHZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CkBAIC0yOTAsNiArMzA1LDcgQEAKIAogCXJkc19jb25uX2NvdW50LS07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9kZXN0cm95KTsKIAogc3RhdGljIHZvaWQgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCiAJCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCkBAIC0zOTMsNiArNDA5LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19mb3JfZWFjaF9jb25uX2luZm8pOwogCiBzdGF0aWMgaW50IHJkc19jb25uX2luZm9fdmlzaXRvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCQkJICB2b2lkICpidWZmZXIpCkBAIC00NjgsNiArNDg1LDcgQEAKIAlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9FUlJPUik7CiAJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9kcm9wKTsKIAogLyoKICAqIEFuIGVycm9yIG9jY3VycmVkIG9uIHRoZSBjb25uZWN0aW9uCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmMKaW5kZXggYjliY2QzMi4uNTM2ZWJlNSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYi5jCisrKyBiL25ldC9yZHMvaWIuYwpAQCAtNDMsMTEgKzQzLDE0IEBACiAKIHVuc2lnbmVkIGludCBmbXJfcG9vbF9zaXplID0gUkRTX0ZNUl9QT09MX1NJWkU7CiB1bnNpZ25lZCBpbnQgZm1yX21lc3NhZ2Vfc2l6ZSA9IFJEU19GTVJfU0laRSArIDE7IC8qICsxIGFsbG93cyBmb3IgdW5hbGlnbmVkIE1ScyAqLwordW5zaWduZWQgaW50IHJkc19pYl9yZXRyeV9jb3VudCA9IFJEU19JQl9ERUZBVUxUX1JFVFJZX0NPVU5UOwogCiBtb2R1bGVfcGFyYW0oZm1yX3Bvb2xfc2l6ZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZm1yX3Bvb2xfc2l6ZSwgIiBNYXggbnVtYmVyIG9mIGZtciBwZXIgSENBIik7CiBtb2R1bGVfcGFyYW0oZm1yX21lc3NhZ2Vfc2l6ZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZm1yX21lc3NhZ2Vfc2l6ZSwgIiBNYXggc2l6ZSBvZiBhIFJETUEgdHJhbnNmZXIiKTsKK21vZHVsZV9wYXJhbShyZHNfaWJfcmV0cnlfY291bnQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJkc19pYl9yZXRyeV9jb3VudCwgIiBOdW1iZXIgb2YgaHcgcmV0cmllcyBiZWZvcmUgcmVwb3J0aW5nIGFuIGVycm9yIik7CiAKIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2liX2RldmljZXM7CiAKQEAgLTgyLDkgKzg1LDYgQEAKIAlyZHNfaWJkZXYtPm1heF93cnMgPSBkZXZfYXR0ci0+bWF4X3FwX3dyOwogCXJkc19pYmRldi0+bWF4X3NnZSA9IG1pbihkZXZfYXR0ci0+bWF4X3NnZSwgUkRTX0lCX01BWF9TR0UpOwogCi0JcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdCA9IG1heCg5LCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7Ci0JcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplICA9IDEgPDwgcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKLQlyZHNfaWJkZXYtPmZtcl9wYWdlX21hc2sgID0gfigodTY0KSByZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUgLSAxKTsKIAlyZHNfaWJkZXYtPmZtcl9tYXhfcmVtYXBzID0gZGV2X2F0dHItPm1heF9tYXBfcGVyX2Ztcj86IDMyOwogCXJkc19pYmRldi0+bWF4X2ZtcnMgPSBkZXZfYXR0ci0+bWF4X2ZtciA/CiAJCQltaW5fdCh1bnNpZ25lZCBpbnQsIGRldl9hdHRyLT5tYXhfZm1yLCBmbXJfcG9vbF9zaXplKSA6CkBAIC0yODIsNiArMjgyLDcgQEAKIAkuZmx1c2hfbXJzCQk9IHJkc19pYl9mbHVzaF9tcnMsCiAJLnRfb3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnRfbmFtZQkJCT0gImluZmluaWJhbmQiLAorCS50X3R5cGUJCQk9IFJEU19UUkFOU19JQgogfTsKIAogaW50IF9faW5pdCByZHNfaWJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5oIGIvbmV0L3Jkcy9pYi5oCmluZGV4IDQ1NWFlNzMuLjEzNzhiODUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWIuaAorKysgYi9uZXQvcmRzL2liLmgKQEAgLTE1LDYgKzE1LDggQEAKICNkZWZpbmUgUkRTX0lCX0RFRkFVTFRfUkVDVl9XUgkJMTAyNAogI2RlZmluZSBSRFNfSUJfREVGQVVMVF9TRU5EX1dSCQkyNTYKIAorI2RlZmluZSBSRFNfSUJfREVGQVVMVF9SRVRSWV9DT1VOVAkyCisKICNkZWZpbmUgUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFMJMHgwMDAwMDAwMwkvKiBtaW5vciB2ZXJzaW9ucyBzdXBwb3J0ZWQgKi8KIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2liX2RldmljZXM7CkBAIC0xNTcsOSArMTU5LDYgQEAKIAlzdHJ1Y3QgaWJfcGQJCSpwZDsKIAlzdHJ1Y3QgaWJfbXIJCSptcjsKIAlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wJKm1yX3Bvb2w7Ci0JaW50CQkJZm1yX3BhZ2Vfc2hpZnQ7Ci0JaW50CQkJZm1yX3BhZ2Vfc2l6ZTsKLQl1NjQJCQlmbXJfcGFnZV9tYXNrOwogCXVuc2lnbmVkIGludAkJZm1yX21heF9yZW1hcHM7CiAJdW5zaWduZWQgaW50CQltYXhfZm1yczsKIAlpbnQJCQltYXhfc2dlOwpAQCAtMjQ3LDYgKzI0Niw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgZm1yX3Bvb2xfc2l6ZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZm1yX21lc3NhZ2Vfc2l6ZTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcmRzX2liX3JldHJ5X2NvdW50OwogCiBleHRlcm4gc3BpbmxvY2tfdCBpYl9ub2Rldl9jb25uc19sb2NrOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaWJfbm9kZXZfY29ubnM7CkBAIC0zNTUsMTcgKzM1NSwyNSBAQAogLyoKICAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldHRpbmcvc2V0dGluZyB0aGUgaGVhZGVyIGFuZCBkYXRhIFNHRXMgaW4KICAqIFJEUyBwYWNrZXRzIChub3QgUkRNQSkKKyAqCisgKiBGcm9tIHZlcnNpb24gMy4xIG9ud2FyZHMsIGhlYWRlciBpcyBpbiBmcm9udCBvZiBkYXRhIGluIHRoZSBzZ2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCiByZHNfaWJfaGVhZGVyX3NnZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCiB7Ci0JcmV0dXJuICZzZ2VbMF07CisJaWYgKGljLT5jb25uLT5jX3ZlcnNpb24gPiBSRFNfUFJPVE9DT0xfM18wKQorCQlyZXR1cm4gJnNnZVswXTsKKwllbHNlCisJCXJldHVybiAmc2dlWzFdOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpYl9zZ2UgKgogcmRzX2liX2RhdGFfc2dlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHN0cnVjdCBpYl9zZ2UgKnNnZSkKIHsKLQlyZXR1cm4gJnNnZVsxXTsKKwlpZiAoaWMtPmNvbm4tPmNfdmVyc2lvbiA+IFJEU19QUk9UT0NPTF8zXzApCisJCXJldHVybiAmc2dlWzFdOworCWVsc2UKKwkJcmV0dXJuICZzZ2VbMF07CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9jbS5jIGIvbmV0L3Jkcy9pYl9jbS5jCmluZGV4IGY4ZTQwZTEuLmMyZDM3MmYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfY20uYworKysgYi9uZXQvcmRzL2liX2NtLmMKQEAgLTk4LDIxICs5OCwzNCBAQAogCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CiAJaW50IGVycjsKIAotCWlmIChldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuKSB7CisJaWYgKGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gPj0gc2l6ZW9mKCpkcCkpIHsKIAkJZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CiAKLQkJcmRzX2liX3NldF9wcm90b2NvbChjb25uLAorCQkvKiBtYWtlIHN1cmUgaXQgaXNuJ3QgZW1wdHkgZGF0YSAqLworCQlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yKSB7CisJCQlyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sCiAJCQkJUkRTX1BST1RPQ09MKGRwLT5kcF9wcm90b2NvbF9tYWpvciwKLQkJCQkJZHAtPmRwX3Byb3RvY29sX21pbm9yKSk7Ci0JCXJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKwkJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpKTsKKwkJCXJkc19pYl9zZXRfZmxvd19jb250cm9sKGNvbm4sIGJlMzJfdG9fY3B1KGRwLT5kcF9jcmVkaXQpKTsKKwkJfQogCX0KIAogCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lCOiBjb25uZWN0ZWQgdG8gJXBJNCB2ZXJzaW9uICV1LiV1JXNcbiIsCi0JCQkmY29ubi0+Y19sYWRkciwKKwkJCSZjb25uLT5jX2ZhZGRyLAogCQkJUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tPmNfdmVyc2lvbiksCiAJCQlSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi0+Y192ZXJzaW9uKSwKIAkJCWljLT5pX2Zsb3djdGwgPyAiLCBmbG93IGNvbnRyb2wiIDogIiIpOwogCisJLyoKKwkgKiBJbml0IHJpbmdzIGFuZCBmaWxsIHJlY3YuIHRoaXMgbmVlZHMgdG8gd2FpdCB1bnRpbCBwcm90b2NvbCBuZWdvdGlhdGlvbgorCSAqIGlzIGNvbXBsZXRlLCBzaW5jZSByaW5nIGxheW91dCBpcyBkaWZmZXJlbnQgZnJvbSAzLjAgdG8gMy4xLgorCSAqLworCXJkc19pYl9zZW5kX2luaXRfcmluZyhpYyk7CisJcmRzX2liX3JlY3ZfaW5pdF9yaW5nKGljKTsKKwkvKiBQb3N0IHJlY2VpdmUgYnVmZmVycyAtIGFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgd2lsbCB1cGRhdGUKKwkgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi8KKwlyZHNfaWJfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAxKTsKKwogCS8qIFR1bmUgUk5SIGJlaGF2aW9yICovCiAJcmRzX2liX3R1bmVfcm5yKGljLCAmcXBfYXR0cik7CiAKQEAgLTE0NSw3ICsxNTgsNyBAQAogCS8qIFhYWCB0dW5lIHRoZXNlPyAqLwogCWNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXMgPSAxOwogCWNvbm5fcGFyYW0tPmluaXRpYXRvcl9kZXB0aCA9IDE7Ci0JY29ubl9wYXJhbS0+cmV0cnlfY291bnQgPSA3OworCWNvbm5fcGFyYW0tPnJldHJ5X2NvdW50ID0gbWluX3QodW5zaWduZWQgaW50LCByZHNfaWJfcmV0cnlfY291bnQsIDcpOwogCWNvbm5fcGFyYW0tPnJucl9yZXRyeV9jb3VudCA9IDc7CiAKIAlpZiAoZHApIHsKQEAgLTE5MCw5ICsyMDMsOSBAQAogCQlyZG1hX25vdGlmeShpYy0+aV9jbV9pZCwgSUJfRVZFTlRfQ09NTV9FU1QpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvaWI6IHVuaGFuZGxlZCBRUCBldmVudCAldSAiCi0JCSAgICAgICAib24gY29ubmVjdGlvbiB0byAlcEk0XG4iLCBldmVudC0+ZXZlbnQsCi0JCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJSRFMvSUI6IEZhdGFsIFFQIEV2ZW50ICV1ICIKKwkJCSItIGNvbm5lY3Rpb24gJXBJNC0+JXBJNCwgcmVjb25uZWN0aW5nXG4iLAorCQkJZXZlbnQtPmV2ZW50LCAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zMjEsNyArMzM0LDcgQEAKIAkJcmRzZGVidWcoInNlbmQgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmRzX2liX3NlbmRfaW5pdF9yaW5nKGljKTsKKwltZW1zZXQoaWMtPmlfc2VuZHMsIDAsIGljLT5pX3NlbmRfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaWJfc2VuZF93b3JrKSk7CiAKIAlpYy0+aV9yZWN2cyA9IHZtYWxsb2MoaWMtPmlfcmVjdl9yaW5nLndfbnIgKiBzaXplb2Yoc3RydWN0IHJkc19pYl9yZWN2X3dvcmspKTsKIAlpZiAoaWMtPmlfcmVjdnMgPT0gTlVMTCkgewpAQCAtMzI5LDE0ICszNDIsMTAgQEAKIAkJcmRzZGVidWcoInJlY3YgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CisJbWVtc2V0KGljLT5pX3JlY3ZzLCAwLCBpYy0+aV9yZWN2X3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yaykpOwogCi0JcmRzX2liX3JlY3ZfaW5pdF9yaW5nKGljKTsKIAlyZHNfaWJfcmVjdl9pbml0X2FjayhpYyk7CiAKLQkvKiBQb3N0IHJlY2VpdmUgYnVmZmVycyAtIGFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgd2lsbCB1cGRhdGUKLQkgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi8KLQlyZHNfaWJfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAxKTsKLQogCXJkc2RlYnVnKCJjb25uICVwIHBkICVwIG1yICVwIGNxICVwICVwXG4iLCBjb25uLCBpYy0+aV9wZCwgaWMtPmlfbXIsCiAJCSBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxKTsKIApAQCAtMzQ0LDE5ICszNTMsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdTMyIHJkc19pYl9wcm90b2NvbF9jb21wYXRpYmxlKGNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCkKK3N0YXRpYyB1MzIgcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQogeworCWNvbnN0IHN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCA9IGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YTsKIAl1MTYgY29tbW9uOwogCXUzMiB2ZXJzaW9uID0gMDsKIAotCS8qIHJkbWFfY20gcHJpdmF0ZSBkYXRhIGlzIG9kZCAtIHdoZW4gdGhlcmUgaXMgYW55IHByaXZhdGUgZGF0YSBpbiB0aGUKKwkvKgorCSAqIHJkbWFfY20gcHJpdmF0ZSBkYXRhIGlzIG9kZCAtIHdoZW4gdGhlcmUgaXMgYW55IHByaXZhdGUgZGF0YSBpbiB0aGUKIAkgKiByZXF1ZXN0LCB3ZSB3aWxsIGJlIGdpdmVuIGEgcHJldHR5IGxhcmdlIGJ1ZmZlciB3aXRob3V0IHRlbGxpbmcgdXMgdGhlCiAJICogb3JpZ2luYWwgc2l6ZS4gVGhlIG9ubHkgd2F5IHRvIHRlbGwgdGhlIGRpZmZlcmVuY2UgaXMgYnkgbG9va2luZyBhdAogCSAqIHRoZSBjb250ZW50cywgd2hpY2ggYXJlIGluaXRpYWxpemVkIHRvIHplcm8uCiAJICogSWYgdGhlIHByb3RvY29sIHZlcnNpb24gZmllbGRzIGFyZW4ndCBzZXQsIHRoaXMgaXMgYSBjb25uZWN0aW9uIGF0dGVtcHQKIAkgKiBmcm9tIGFuIG9sZGVyIHZlcnNpb24uIFRoaXMgY291bGQgY291bGQgYmUgMy4wIG9yIDIuMCAtIHdlIGNhbid0IHRlbGwuCi0JICogV2UgcmVhbGx5IHNob3VsZCBoYXZlIGNoYW5nZWQgdGhpcyBmb3IgT0ZFRCAxLjMgOi0oICovCi0JaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAwKQorCSAqIFdlIHJlYWxseSBzaG91bGQgaGF2ZSBjaGFuZ2VkIHRoaXMgZm9yIE9GRUQgMS4zIDotKAorCSAqLworCisJLyogQmUgcGFyYW5vaWQuIFJEUyBhbHdheXMgaGFzIHByaXZkYXRhICovCisJaWYgKCFldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiUkRTIGluY29taW5nIGNvbm5lY3Rpb24gaGFzIG5vIHByaXZhdGUgZGF0YSwgIgorCQkJInJlamVjdGluZ1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEV2ZW4gaWYgbGVuIGlzIGNyYXAgKm5vdyogSSBzdGlsbCB3YW50IHRvIGNoZWNrIGl0LiAtQVNHICovCisJaWYgKGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4gPCBzaXplb2YgKCpkcCkKKwkgICAgfHwgZHAtPmRwX3Byb3RvY29sX21ham9yID09IDApCiAJCXJldHVybiBSRFNfUFJPVE9DT0xfM18wOwogCiAJY29tbW9uID0gYmUxNl90b19jcHUoZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2spICYgUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFM7CkBAIC0zODgsNyArNDEwLDcgQEAKIAlpbnQgZXJyLCBkZXN0cm95ID0gMTsKIAogCS8qIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBwcm90b2NvbCB2ZXJzaW9uIG1hdGNoZXMgb3Vycy4gKi8KLQl2ZXJzaW9uID0gcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoZHApOworCXZlcnNpb24gPSByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShldmVudCk7CiAJaWYgKCF2ZXJzaW9uKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZG1hLmMgYi9uZXQvcmRzL2liX3JkbWEuYwppbmRleCA4MTAzM2FmLi5lZjNhYjViIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JkbWEuYworKysgYi9uZXQvcmRzL2liX3JkbWEuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAKIAlwb29sLT5mbXJfYXR0ci5tYXhfcGFnZXMgPSBmbXJfbWVzc2FnZV9zaXplOwogCXBvb2wtPmZtcl9hdHRyLm1heF9tYXBzID0gcmRzX2liZGV2LT5mbXJfbWF4X3JlbWFwczsKLQlwb29sLT5mbXJfYXR0ci5wYWdlX3NoaWZ0ID0gcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlwb29sLT5mbXJfYXR0ci5wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDsKIAlwb29sLT5tYXhfZnJlZV9waW5uZWQgPSByZHNfaWJkZXYtPm1heF9mbXJzICogZm1yX21lc3NhZ2Vfc2l6ZSAvIDQ7CiAKIAkvKiBXZSBuZXZlciBhbGxvdyBtb3JlIHRoYW4gbWF4X2l0ZW1zIE1ScyB0byBiZSBhbGxvY2F0ZWQuCkBAIC0zNDksMTMgKzM0OSwxMyBAQAogCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2NhdFtpXSk7CiAJCXU2NCBkbWFfYWRkciA9IGliX3NnX2RtYV9hZGRyZXNzKGRldiwgJnNjYXRbaV0pOwogCi0JCWlmIChkbWFfYWRkciAmIH5yZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spIHsKKwkJaWYgKGRtYV9hZGRyICYgflBBR0VfTUFTSykgewogCQkJaWYgKGkgPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJZWxzZQogCQkJCSsrcGFnZV9jbnQ7CiAJCX0KLQkJaWYgKChkbWFfYWRkciArIGRtYV9sZW4pICYgfnJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgeworCQlpZiAoKGRtYV9hZGRyICsgZG1hX2xlbikgJiB+UEFHRV9NQVNLKSB7CiAJCQlpZiAoaSA8IHNnX2RtYV9sZW4gLSAxKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJZWxzZQpAQCAtMzY1LDcgKzM2NSw3IEBACiAJCWxlbiArPSBkbWFfbGVuOwogCX0KIAotCXBhZ2VfY250ICs9IGxlbiA+PiByZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0OworCXBhZ2VfY250ICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCWlmIChwYWdlX2NudCA+IGZtcl9tZXNzYWdlX3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zNzgsOSArMzc4LDkgQEAKIAkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNjYXRbaV0pOwogCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzY2F0W2ldKTsKIAotCQlmb3IgKGogPSAwOyBqIDwgZG1hX2xlbjsgaiArPSByZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUpCisJCWZvciAoaiA9IDA7IGogPCBkbWFfbGVuOyBqICs9IFBBR0VfU0laRSkKIAkJCWRtYV9wYWdlc1twYWdlX2NudCsrXSA9Ci0JCQkJKGRtYV9hZGRyICYgcmRzX2liZGV2LT5mbXJfcGFnZV9tYXNrKSArIGo7CisJCQkJKGRtYV9hZGRyICYgUEFHRV9NQVNLKSArIGo7CiAJfQogCiAJcmV0ID0gaWJfbWFwX3BoeXNfZm1yKGlibXItPmZtciwKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmVjdi5jIGIvbmV0L3Jkcy9pYl9yZWN2LmMKaW5kZXggNTcwOWJhZC4uY2Q3YTZjZiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9yZWN2LmMKKysrIGIvbmV0L3Jkcy9pYl9yZWN2LmMKQEAgLTU1NSw2ICs1NTUsNDcgQEAKIAlyZXR1cm4gcmRzX2liX2dldF9hY2soaWMpOwogfQogCitzdGF0aWMgc3RydWN0IHJkc19oZWFkZXIgKnJkc19pYl9nZXRfaGVhZGVyKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkJICAgIHN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2LAorCQkJCQkgICAgdTMyIGRhdGFfbGVuKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXZvaWQgKmhkcl9idWZmID0gJmljLT5pX3JlY3ZfaGRyc1tyZWN2IC0gaWMtPmlfcmVjdnNdOworCXZvaWQgKmFkZHI7CisJdTMyIG1pc3BsYWNlZF9oZHJfYnl0ZXM7CisKKwkvKgorCSAqIFN1cHBvcnQgaGVhZGVyIGF0IHRoZSBmcm9udCAoUkRTIDMuMSspIGFzIHdlbGwgYXMgaGVhZGVyLWF0LWVuZC4KKwkgKgorCSAqIENhc2VzOgorCSAqIDEpIGhlYWRlciBhbGwgaW4gaGVhZGVyIGJ1ZmYgKGdyZWF0ISkKKwkgKiAyKSBoZWFkZXIgYWxsIGluIGRhdGEgcGFnZSAoY29weSBhbGwgdG8gaGVhZGVyIGJ1ZmYpCisJICogMykgaGVhZGVyIHNwbGl0IGFjcm9zcyBoZHIgYnVmICsgZGF0YSBwYWdlCisJICogICAgKG1vdmUgYml0IGluIGhkciBidWZmIHRvIGVuZCBiZWZvcmUgY29weWluZyBvdGhlciBiaXQgZnJvbSBkYXRhIHBhZ2UpCisJICovCisJaWYgKGNvbm4tPmNfdmVyc2lvbiA+IFJEU19QUk9UT0NPTF8zXzAgfHwgZGF0YV9sZW4gPT0gUkRTX0ZSQUdfU0laRSkKKwkgICAgICAgIHJldHVybiBoZHJfYnVmZjsKKworCWlmIChkYXRhX2xlbiA8PSAoUkRTX0ZSQUdfU0laRSAtIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpKSB7CisJCWFkZHIgPSBrbWFwX2F0b21pYyhyZWN2LT5yX2ZyYWctPmZfcGFnZSwgS01fU09GVElSUTApOworCQltZW1jcHkoaGRyX2J1ZmYsCisJCSAgICAgICBhZGRyICsgcmVjdi0+cl9mcmFnLT5mX29mZnNldCArIGRhdGFfbGVuLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCWt1bm1hcF9hdG9taWMoYWRkciwgS01fU09GVElSUTApOworCQlyZXR1cm4gaGRyX2J1ZmY7CisJfQorCisJbWlzcGxhY2VkX2hkcl9ieXRlcyA9IChzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpIC0gKFJEU19GUkFHX1NJWkUgLSBkYXRhX2xlbikpOworCisJbWVtbW92ZShoZHJfYnVmZiArIG1pc3BsYWNlZF9oZHJfYnl0ZXMsIGhkcl9idWZmLCBtaXNwbGFjZWRfaGRyX2J5dGVzKTsKKworCWFkZHIgPSBrbWFwX2F0b21pYyhyZWN2LT5yX2ZyYWctPmZfcGFnZSwgS01fU09GVElSUTApOworCW1lbWNweShoZHJfYnVmZiwgYWRkciArIHJlY3YtPnJfZnJhZy0+Zl9vZmZzZXQgKyBkYXRhX2xlbiwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSAtIG1pc3BsYWNlZF9oZHJfYnl0ZXMpOworCWt1bm1hcF9hdG9taWMoYWRkciwgS01fU09GVElSUTApOworCXJldHVybiBoZHJfYnVmZjsKK30KKwogLyoKICAqIEl0J3Mga2luZCBvZiBsYW1lIHRoYXQgd2UncmUgY29weWluZyBmcm9tIHRoZSBwb3N0ZWQgcmVjZWl2ZSBwYWdlcyBpbnRvCiAgKiBsb25nLWxpdmVkIGJpdG1hcHMuICBXZSBjb3VsZCBoYXZlIHBvc3RlZCB0aGUgYml0bWFwcyBhbmQgcmRtYSB3cml0dGVuIGludG8KQEAgLTY0NSw3ICs2ODYsNyBAQAogfTsKIAogc3RhdGljIHZvaWQgcmRzX2liX3Byb2Nlc3NfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCQkJc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YsIHUzMiBieXRlX2xlbiwKKwkJCQlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdiwgdTMyIGRhdGFfbGVuLAogCQkJCXN0cnVjdCByZHNfaWJfYWNrX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKQEAgLTY1NSw5ICs2OTYsOSBAQAogCS8qIFhYWCBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24gaWYgcG9ydCAwLDAgYXJlIHNlZW4/ICovCiAKIAlyZHNkZWJ1ZygiaWMgJXAgaWJpbmMgJXAgcmVjdiAlcCBieXRlIGxlbiAldVxuIiwgaWMsIGliaW5jLCByZWN2LAotCQkgYnl0ZV9sZW4pOworCQkgZGF0YV9sZW4pOwogCi0JaWYgKGJ5dGVfbGVuIDwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkgeworCWlmIChkYXRhX2xlbiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKIAkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgogCQkgICAgICAgImZyb20gJXBJNCBkaWRuJ3QgaW5jbHVlIGEgIgogCQkgICAgICAgImhlYWRlciwgZGlzY29ubmVjdGluZyBhbmQgIgpAQCAtNjY1LDkgKzcwNiw5IEBACiAJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CiAJCXJldHVybjsKIAl9Ci0JYnl0ZV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlkYXRhX2xlbiAtPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOwogCi0JaWhkciA9ICZpYy0+aV9yZWN2X2hkcnNbcmVjdiAtIGljLT5pX3JlY3ZzXTsKKwlpaGRyID0gcmRzX2liX2dldF9oZWFkZXIoY29ubiwgcmVjdiwgZGF0YV9sZW4pOwogCiAJLyogVmFsaWRhdGUgdGhlIGNoZWNrc3VtLiAqLwogCWlmICghcmRzX21lc3NhZ2VfdmVyaWZ5X2NoZWNrc3VtKGloZHIpKSB7CkBAIC02ODcsNyArNzI4LDcgQEAKIAlpZiAoaWhkci0+aF9jcmVkaXQpCiAJCXJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGloZHItPmhfY3JlZGl0KTsKIAotCWlmIChpaGRyLT5oX3Nwb3J0ID09IDAgJiYgaWhkci0+aF9kcG9ydCA9PSAwICYmIGJ5dGVfbGVuID09IDApIHsKKwlpZiAoaWhkci0+aF9zcG9ydCA9PSAwICYmIGloZHItPmhfZHBvcnQgPT0gMCAmJiBkYXRhX2xlbiA9PSAwKSB7CiAJCS8qIFRoaXMgaXMgYW4gQUNLLW9ubHkgcGFja2V0LiBUaGUgZmFjdCB0aGF0IGl0IGdldHMKIAkJICogc3BlY2lhbCB0cmVhdG1lbnQgaGVyZSBpcyB0aGF0IGhpc3RvcmljYWxseSwgQUNLcwogCQkgKiB3ZXJlIHJhdGhlciBzcGVjaWFsIGJlYXN0cy4KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc3RhdHMuYyBiL25ldC9yZHMvaWJfc3RhdHMuYwppbmRleCAwMmUzZTNkLi44ZDg0ODgzIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3N0YXRzLmMKKysrIGIvbmV0L3Jkcy9pYl9zdGF0cy5jCkBAIC0zOSw3ICszOSw3IEBACiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfaWJfc3RhdGlzdGljcywgcmRzX2liX3N0YXRzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKLXN0YXRpYyBjaGFyICpyZHNfaWJfc3RhdF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJkc19pYl9zdGF0X25hbWVzW10gPSB7CiAJImliX2Nvbm5lY3RfcmFjZWQiLAogCSJpYl9saXN0ZW5fY2xvc2VkX3N0YWxlIiwKIAkiaWJfdHhfY3FfY2FsbCIsCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3N5c2N0bC5jIGIvbmV0L3Jkcy9pYl9zeXNjdGwuYwppbmRleCBkODc4MzBkLi44NGI1ZmZjYiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9zeXNjdGwuYworKysgYi9uZXQvcmRzL2liX3N5c2N0bC5jCkBAIC01Myw3ICs1MywxNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXNfbWluID0gMTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCA9IH4wVUw7CiAKLXVuc2lnbmVkIGludCByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbCA9IDE7CisvKgorICogVGhpcyBzeXNjdGwgZG9lcyBub3RoaW5nLgorICoKKyAqIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggUkRTIDMuMCB3aXJlIHByb3RvY29sCisgKiBkaXNhYmxlcyBpbml0aWFsIEZDIGNyZWRpdCBleGNoYW5nZS4KKyAqIElmIGl0J3MgZXZlciBwb3NzaWJsZSB0byBkcm9wIDMuMCBzdXBwb3J0LAorICogc2V0dGluZyB0aGlzIHRvIDEgYW5kIG1vdmluZyBpbml0L3JlZmlsbCBvZiBzZW5kL3JlY3YKKyAqIHJpbmdzIGZyb20gaWJfY21fY29ubmVjdF9jb21wbGV0ZSgpIGJhY2sgaW50byBpYl9zZXR1cF9xcCgpCisgKiB3aWxsIGNhdXNlIGNyZWRpdHMgdG8gYmUgYWRkZWQgYmVmb3JlIHByb3RvY29sIG5lZ290aWF0aW9uLgorICovCit1bnNpZ25lZCBpbnQgcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgPSAwOwogCiBjdGxfdGFibGUgcmRzX2liX3N5c2N0bF90YWJsZVtdID0gewogCXsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaW5mby5jIGIvbmV0L3Jkcy9pbmZvLmMKaW5kZXggNjJhZWVmMy4uODE0YTkxYSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pbmZvLmMKKysrIGIvbmV0L3Jkcy9pbmZvLmMKQEAgLTc5LDYgKzc5LDcgQEAKIAlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gZnVuYzsKIAlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKTsKIAogdm9pZCByZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoaW50IG9wdG5hbWUsIHJkc19pbmZvX2Z1bmMgZnVuYykKIHsKQEAgLTkxLDYgKzkyLDcgQEAKIAlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gTlVMTDsKIAlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMpOwogCiAvKgogICogVHlwaWNhbGx5IHdlIGhvbGQgYW4gYXRvbWljIGttYXAgYWNyb3NzIG11bHRpcGxlIHJkc19pbmZvX2NvcHkoKSBjYWxscwpAQCAtMTM3LDYgKzEzOSw3IEBACiAJCX0KIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfaW5mb19jb3B5KTsKIAogLyoKICAqIEBvcHR2YWwgcG9pbnRzIHRvIHRoZSB1c2Vyc3BhY2UgYnVmZmVyIHRoYXQgdGhlIGluZm9ybWF0aW9uIHNuYXBzaG90CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmMgYi9uZXQvcmRzL2l3LmMKaW5kZXggZDE2ZTFjYi4uZGIyMjRmNyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pdy5jCisrKyBiL25ldC9yZHMvaXcuYwpAQCAtODMsMjMgKzgzLDE2IEBACiAJcmRzX2l3ZGV2LT5tYXhfd3JzID0gZGV2X2F0dHItPm1heF9xcF93cjsKIAlyZHNfaXdkZXYtPm1heF9zZ2UgPSBtaW4oZGV2X2F0dHItPm1heF9zZ2UsIFJEU19JV19NQVhfU0dFKTsKIAotCXJkc19pd2Rldi0+cGFnZV9zaGlmdCA9IG1heChQQUdFX1NISUZULCBmZnMoZGV2X2F0dHItPnBhZ2Vfc2l6ZV9jYXApIC0gMSk7Ci0KIAlyZHNfaXdkZXYtPmRldiA9IGRldmljZTsKIAlyZHNfaXdkZXYtPnBkID0gaWJfYWxsb2NfcGQoZGV2aWNlKTsKIAlpZiAoSVNfRVJSKHJkc19pd2Rldi0+cGQpKQogCQlnb3RvIGZyZWVfZGV2OwogCiAJaWYgKCFyZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5KSB7Ci0JCWlmIChkZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfUk5JQykgewotCQkJcmRzX2l3ZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2l3ZGV2LT5wZCwKLQkJCQkJCUlCX0FDQ0VTU19MT0NBTF9XUklURSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZHNfaXdkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaXdkZXYtPnBkLAotCQkJCQkJSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKLQkJCQkJCUlCX0FDQ0VTU19SRU1PVEVfV1JJVEUgfAotCQkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKLQkJfQorCQlyZHNfaXdkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaXdkZXYtPnBkLAorCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIHwKKwkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKIAkJaWYgKElTX0VSUihyZHNfaXdkZXYtPm1yKSkKIAkJCWdvdG8gZXJyX3BkOwogCX0gZWxzZQpAQCAtMjkxLDYgKzI4NCw3IEBACiAJLmZsdXNoX21ycwkJPSByZHNfaXdfZmx1c2hfbXJzLAogCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAogCS50X25hbWUJCQk9ICJpd2FycCIsCisJLnRfdHlwZQkJCT0gUkRTX1RSQU5TX0lXQVJQLAogCS50X3ByZWZlcl9sb29wYmFjawk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3LmggYi9uZXQvcmRzL2l3LmgKaW5kZXggMDcxNWRkZS4uZGQ3MmI2MiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pdy5oCisrKyBiL25ldC9yZHMvaXcuaApAQCAtMTgxLDcgKzE4MSw2IEBACiAJc3RydWN0IGliX3BkCQkqcGQ7CiAJc3RydWN0IGliX21yCQkqbXI7CiAJc3RydWN0IHJkc19pd19tcl9wb29sCSptcl9wb29sOwotCWludAkJCXBhZ2Vfc2hpZnQ7CiAJaW50CQkJbWF4X3NnZTsKIAl1bnNpZ25lZCBpbnQJCW1heF93cnM7CiAJdW5zaWduZWQgaW50CQlkbWFfbG9jYWxfbGtleToxOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yZG1hLmMgYi9uZXQvcmRzL2l3X3JkbWEuYwppbmRleCBkY2RiMzdkLi5kZTRhMWIxIDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3X3JkbWEuYworKysgYi9uZXQvcmRzL2l3X3JkbWEuYwpAQCAtMjYzLDE4ICsyNjMsMTIgQEAKIH0KIAogc3RhdGljIHU2NCAqcmRzX2l3X21hcF9zY2F0dGVybGlzdChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LAotCQkJc3RydWN0IHJkc19pd19zY2F0dGVybGlzdCAqc2csCi0JCQl1bnNpZ25lZCBpbnQgZG1hX3BhZ2Vfc2hpZnQpCisJCQlzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0ICpzZykKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaXdkZXYtPmRldjsKIAl1NjQgKmRtYV9wYWdlcyA9IE5VTEw7Ci0JdTY0IGRtYV9tYXNrOwotCXVuc2lnbmVkIGludCBkbWFfcGFnZV9zaXplOwogCWludCBpLCBqLCByZXQ7CiAKLQlkbWFfcGFnZV9zaXplID0gMSA8PCBkbWFfcGFnZV9zaGlmdDsKLQlkbWFfbWFzayA9IGRtYV9wYWdlX3NpemUgLSAxOwotCiAJV0FSTl9PTihzZy0+ZG1hX2xlbik7CiAKIAlzZy0+ZG1hX2xlbiA9IGliX2RtYV9tYXBfc2coZGV2LCBzZy0+bGlzdCwgc2ctPmxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtMjk1LDE4ICsyODksMTggQEAKIAkJc2ctPmJ5dGVzICs9IGRtYV9sZW47CiAKIAkJZW5kX2FkZHIgPSBkbWFfYWRkciArIGRtYV9sZW47Ci0JCWlmIChkbWFfYWRkciAmIGRtYV9tYXNrKSB7CisJCWlmIChkbWFfYWRkciAmIFBBR0VfTUFTSykgewogCQkJaWYgKGkgPiAwKQogCQkJCWdvdG8gb3V0X3VubWFwOwotCQkJZG1hX2FkZHIgJj0gfmRtYV9tYXNrOworCQkJZG1hX2FkZHIgJj0gflBBR0VfTUFTSzsKIAkJfQotCQlpZiAoZW5kX2FkZHIgJiBkbWFfbWFzaykgeworCQlpZiAoZW5kX2FkZHIgJiBQQUdFX01BU0spIHsKIAkJCWlmIChpIDwgc2ctPmRtYV9sZW4gLSAxKQogCQkJCWdvdG8gb3V0X3VubWFwOwotCQkJZW5kX2FkZHIgPSAoZW5kX2FkZHIgKyBkbWFfbWFzaykgJiB+ZG1hX21hc2s7CisJCQllbmRfYWRkciA9IChlbmRfYWRkciArIFBBR0VfTUFTSykgJiB+UEFHRV9NQVNLOwogCQl9CiAKLQkJc2ctPmRtYV9ucGFnZXMgKz0gKGVuZF9hZGRyIC0gZG1hX2FkZHIpID4+IGRtYV9wYWdlX3NoaWZ0OworCQlzZy0+ZG1hX25wYWdlcyArPSAoZW5kX2FkZHIgLSBkbWFfYWRkcikgPj4gUEFHRV9TSElGVDsKIAl9CiAKIAkvKiBOb3cgZ2F0aGVyIHRoZSBkbWEgYWRkcnMgaW50byBvbmUgbGlzdCAqLwpAQCAtMzI1LDggKzMxOSw4IEBACiAJCXU2NCBlbmRfYWRkcjsKIAogCQllbmRfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKLQkJZG1hX2FkZHIgJj0gfmRtYV9tYXNrOwotCQlmb3IgKDsgZG1hX2FkZHIgPCBlbmRfYWRkcjsgZG1hX2FkZHIgKz0gZG1hX3BhZ2Vfc2l6ZSkKKwkJZG1hX2FkZHIgJj0gflBBR0VfTUFTSzsKKwkJZm9yICg7IGRtYV9hZGRyIDwgZW5kX2FkZHI7IGRtYV9hZGRyICs9IFBBR0VfU0laRSkKIAkJCWRtYV9wYWdlc1tqKytdID0gZG1hX2FkZHI7CiAJCUJVR19PTihqID4gc2ctPmRtYV9ucGFnZXMpOwogCX0KQEAgLTcyNyw3ICs3MjEsNyBAQAogCWZfd3Iud3IuZmFzdF9yZWcucmtleSA9IG1hcHBpbmctPm1fcmtleTsKIAlmX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdCA9IGlibXItPnBhZ2VfbGlzdDsKIAlmX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBtYXBwaW5nLT5tX3NnLmRtYV9sZW47Ci0JZl93ci53ci5mYXN0X3JlZy5wYWdlX3NoaWZ0ID0gaWJtci0+ZGV2aWNlLT5wYWdlX3NoaWZ0OworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CiAJZl93ci53ci5mYXN0X3JlZy5hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAogCQkJCUlCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CiAJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURTsKQEAgLTc4MCw5ICs3NzQsNyBAQAogCiAJcmRzX2l3X3NldF9zY2F0dGVybGlzdCgmbWFwcGluZy0+bV9zZywgc2csIHNnX2xlbik7CiAKLQlkbWFfcGFnZXMgPSByZHNfaXdfbWFwX3NjYXR0ZXJsaXN0KHJkc19pd2RldiwKLQkJCQkmbWFwcGluZy0+bV9zZywKLQkJCQlyZHNfaXdkZXYtPnBhZ2Vfc2hpZnQpOworCWRtYV9wYWdlcyA9IHJkc19pd19tYXBfc2NhdHRlcmxpc3QocmRzX2l3ZGV2LCAmbWFwcGluZy0+bV9zZyk7CiAJaWYgKElTX0VSUihkbWFfcGFnZXMpKSB7CiAJCXJldCA9IFBUUl9FUlIoZG1hX3BhZ2VzKTsKIAkJZG1hX3BhZ2VzID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc2VuZC5jIGIvbmV0L3Jkcy9pd19zZW5kLmMKaW5kZXggNDRhNmEwNS4uMWY1YWJlMyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19zZW5kLmMKKysrIGIvbmV0L3Jkcy9pd19zZW5kLmMKQEAgLTc3OSw3ICs3NzksNyBAQAogCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucmtleSA9IHNlbmQtPnNfbXItPnJrZXk7CiAJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX2xpc3QgPSBzZW5kLT5zX3BhZ2VfbGlzdDsKIAlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2VfbGlzdF9sZW4gPSBuZW50OwotCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9zaGlmdCA9IHJkc19pd2Rldi0+cGFnZV9zaGlmdDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOwogCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcuYWNjZXNzX2ZsYWdzID0gSUJfQUNDRVNTX1JFTU9URV9XUklURTsKIAlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmlvdmFfc3RhcnQgPSBzZ19hZGRyOwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3N0YXRzLmMgYi9uZXQvcmRzL2l3X3N0YXRzLmMKaW5kZXggY2NjN2U4Zi4uZDMzZWE3OSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19zdGF0cy5jCisrKyBiL25ldC9yZHMvaXdfc3RhdHMuYwpAQCAtMzksNyArMzksNyBAQAogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MsIHJkc19pd19zdGF0cykgX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCi1zdGF0aWMgY2hhciAqcmRzX2l3X3N0YXRfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCByZHNfaXdfc3RhdF9uYW1lc1tdID0gewogCSJpd19jb25uZWN0X3JhY2VkIiwKIAkiaXdfbGlzdGVuX2Nsb3NlZF9zdGFsZSIsCiAJIml3X3R4X2NxX2NhbGwiLApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9tZXNzYWdlLmMgYi9uZXQvcmRzL21lc3NhZ2UuYwppbmRleCA1YTE1ZGM4Li5jYTUwYThlIDEwMDY0NAotLS0gYS9uZXQvcmRzL21lc3NhZ2UuYworKysgYi9uZXQvcmRzL21lc3NhZ2UuYwpAQCAtNTAsNiArNTAsNyBAQAogCXJkc2RlYnVnKCJhZGRyZWYgcm0gJXAgcmVmICVkXG4iLCBybSwgYXRvbWljX3JlYWQoJnJtLT5tX3JlZmNvdW50KSk7CiAJYXRvbWljX2luYygmcm0tPm1fcmVmY291bnQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfYWRkcmVmKTsKIAogLyoKICAqIFRoaXMgcmVsaWVzIG9uIGRtYV9tYXBfc2coKSBub3QgdG91Y2hpbmcgc2dbXS5wYWdlIGR1cmluZyBtZXJnaW5nLgpAQCAtOTIsNiArOTMsNyBAQAogCQlrZnJlZShybSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfcHV0KTsKIAogdm9pZCByZHNfbWVzc2FnZV9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCiB7CkBAIC0xMDgsNiArMTEwLDcgQEAKIAloZHItPmhfc2VxdWVuY2UgPSBjcHVfdG9fYmU2NChzZXEpOwogCWhkci0+aF9leHRoZHJbMF0gPSBSRFNfRVhUSERSX05PTkU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIpOwogCiBpbnQgcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAogCQl1bnNpZ25lZCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKQEAgLTEzMyw2ICsxMzYsNyBAQAogCWRzdFtsZW5dID0gUkRTX0VYVEhEUl9OT05FOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbik7CiAKIC8qCiAgKiBJZiBhIG1lc3NhZ2UgaGFzIGV4dGVuc2lvbiBoZWFkZXJzLCByZXRyaWV2ZSB0aGVtIGhlcmUuCkBAIC0yMDgsNiArMjEyLDcgQEAKIAlleHRfaGRyLmhfcmRtYV9vZmZzZXQgPSBjcHVfdG9fYmUzMihvZmZzZXQpOwogCXJldHVybiByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKGhkciwgUkRTX0VYVEhEUl9SRE1BX0RFU1QsICZleHRfaGRyLCBzaXplb2YoZXh0X2hkcikpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24pOwogCiBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2FsbG9jKHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3QgZ2ZwKQogewpAQCAtMzk5LDQgKzQwNCw1IEBACiAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxKSkKIAkJd2FrZV91cCgmcmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX21lc3NhZ2VfdW5tYXBwZWQpOwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL3BhZ2UuYyBiL25ldC9yZHMvcGFnZS5jCmluZGV4IGM0NjA3NDMuLjU1YzIxZWYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcGFnZS5jCisrKyBiL25ldC9yZHMvcGFnZS5jCkBAIC04MSw2ICs4MSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19wYWdlX2NvcHlfdXNlcik7CiAKIC8qCiAgKiBNZXNzYWdlIGFsbG9jYXRpb24gdXNlcyB0aGlzIHRvIGJ1aWxkIHVwIHJlZ2lvbnMgb2YgYSBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jCmluZGV4IDdkMGY5MDEuLjllY2U5MTAgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuYworKysgYi9uZXQvcmRzL3JkbWFfdHJhbnNwb3J0LmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUkRNQV9DTV9FVkVOVF9ESVNDT05ORUNURUQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogRElTQ09OTkVDVCBldmVudCAtIGRyb3BwaW5nIGNvbm5lY3Rpb24gIgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvUkRNQTogRElTQ09OTkVDVCBldmVudCAtIGRyb3BwaW5nIGNvbm5lY3Rpb24gIgogCQkJIiVwSTQtPiVwSTRcbiIsICZjb25uLT5jX2xhZGRyLAogCQkJICZjb25uLT5jX2ZhZGRyKTsKIAkJcmRzX2Nvbm5fZHJvcChjb25uKTsKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAJY21faWQgPSByZG1hX2NyZWF0ZV9pZChyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyLCBOVUxMLCBSRE1BX1BTX1RDUCk7CiAJaWYgKElTX0VSUihjbV9pZCkpIHsKIAkJcmV0ID0gUFRSX0VSUihjbV9pZCk7Ci0JCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvUkRNQTogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCiAJCSAgICAgICAicmRtYV9jcmVhdGVfaWQoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jc2luLnNpbl9mYW1pbHkgPSBQRl9JTkVULAorCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKIAlzaW4uc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWh0b25sKElOQUREUl9BTlkpOwogCXNpbi5zaW5fcG9ydCA9IChfX2ZvcmNlIHUxNilodG9ucyhSRFNfUE9SVCk7CiAKQEAgLTE0NywxNCArMTQ3LDE0IEBACiAJICovCiAJcmV0ID0gcmRtYV9iaW5kX2FkZHIoY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJcHJpbnRrKEtFUk5fRVJSICJSRFMvUkRNQTogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCiAJCSAgICAgICAicmRtYV9iaW5kX2FkZHIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJcmV0ID0gcmRtYV9saXN0ZW4oY21faWQsIDEyOCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgIlJEUy9JVzogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCisJCXByaW50ayhLRVJOX0VSUiAiUkRTL1JETUE6IGZhaWxlZCB0byBzZXR1cCBsaXN0ZW5lciwgIgogCQkgICAgICAgInJkbWFfbGlzdGVuKCkgcmV0dXJuZWQgJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIwMyw2ICsyMDMsNyBAQAogb3V0OgogCXJldHVybiByZXQ7CiB9Cittb2R1bGVfaW5pdChyZHNfcmRtYV9pbml0KTsKIAogdm9pZCByZHNfcmRtYV9leGl0KHZvaWQpCiB7CkBAIC0yMTEsNCArMjEyLDkgQEAKIAlyZHNfaWJfZXhpdCgpOwogCXJkc19pd19leGl0KCk7CiB9Cittb2R1bGVfZXhpdChyZHNfcmRtYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiT3JhY2xlIENvcnBvcmF0aW9uIDxyZHMtZGV2ZWxAb3NzLm9yYWNsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJEUzogSUIvaVdBUlAgdHJhbnNwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiAKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oCmluZGV4IGRiZTExMTIuLjg1ZDZmODkgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvcmRzLmgKKysrIGIvbmV0L3Jkcy9yZHMuaApAQCAtMzExLDExICszMTEsMTcgQEAKICAqIAkJICAgZmxhZyBhbmQgaGVhZGVyLgogICovCiAKKyNkZWZpbmUgUkRTX1RSQU5TX0lCCTAKKyNkZWZpbmUgUkRTX1RSQU5TX0lXQVJQCTEKKyNkZWZpbmUgUkRTX1RSQU5TX1RDUAkyCisjZGVmaW5lIFJEU19UUkFOU19DT1VOVAkzCisKIHN0cnVjdCByZHNfdHJhbnNwb3J0IHsKIAljaGFyCQkJdF9uYW1lW1RSQU5TTkFNU0laXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXRfaXRlbTsKIAlzdHJ1Y3QgbW9kdWxlCQkqdF9vd25lcjsKIAl1bnNpZ25lZCBpbnQJCXRfcHJlZmVyX2xvb3BiYWNrOjE7CisJdW5zaWduZWQgaW50CQl0X3R5cGU7CiAKIAlpbnQgKCpsYWRkcl9jaGVjaykoX19iZTMyIGFkZHIpOwogCWludCAoKmNvbm5fYWxsb2MpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKTsKQEAgLTY1Miw3ICs2NTgsOCBAQAogaW50IF9faW5pdCByZHNfc3RhdHNfaW5pdCh2b2lkKTsKIHZvaWQgcmRzX3N0YXRzX2V4aXQodm9pZCk7CiB2b2lkIHJkc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAotCQkJIHVpbnQ2NF90ICp2YWx1ZXMsIGNoYXIgKipuYW1lcywgc2l6ZV90IG5yKTsKKwkJCSB1aW50NjRfdCAqdmFsdWVzLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsCisJCQkgc2l6ZV90IG5yKTsKIAogLyogc3lzY3RsLmMgKi8KIGludCBfX2luaXQgcmRzX3N5c2N0bF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9yZWN2LmMgYi9uZXQvcmRzL3JlY3YuYwppbmRleCBmMjExOGM1Li5mZGZmMzNjIDEwMDY0NAotLS0gYS9uZXQvcmRzL3JlY3YuYworKysgYi9uZXQvcmRzL3JlY3YuYwpAQCAtNDYsMTIgKzQ2LDE0IEBACiAJaW5jLT5pX3NhZGRyID0gc2FkZHI7CiAJaW5jLT5pX3JkbWFfY29va2llID0gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19pbmNfaW5pdCk7CiAKIHZvaWQgcmRzX2luY19hZGRyZWYoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQogewogCXJkc2RlYnVnKCJhZGRyZWYgaW5jICVwIHJlZiAlZFxuIiwgaW5jLCBhdG9taWNfcmVhZCgmaW5jLT5pX3JlZmNvdW50KSk7CiAJYXRvbWljX2luYygmaW5jLT5pX3JlZmNvdW50KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19pbmNfYWRkcmVmKTsKIAogdm9pZCByZHNfaW5jX3B1dChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCiB7CkBAIC02Miw2ICs2NCw3IEBACiAJCWluYy0+aV9jb25uLT5jX3RyYW5zLT5pbmNfZnJlZShpbmMpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19pbmNfcHV0KTsKIAogc3RhdGljIHZvaWQgcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrICpzaywKIAkJCQkgIHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwKQEAgLTIzNyw2ICsyNDAsNyBAQAogCWlmIChycykKIAkJcmRzX3NvY2tfcHV0KHJzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19yZWN2X2luY29taW5nKTsKIAogLyoKICAqIGJlIHZlcnkgY2FyZWZ1bCBoZXJlLiAgVGhpcyBpcyBiZWluZyBjYWxsZWQgYXMgdGhlIGNvbmRpdGlvbiBpbgpAQCAtNDA5LDE4ICs0MTMsMTggQEAKIAlpZiAobXNnX2ZsYWdzICYgTVNHX09PQikKIAkJZ290byBvdXQ7CiAKLQkvKiBJZiB0aGVyZSBhcmUgcGVuZGluZyBub3RpZmljYXRpb25zLCBkbyB0aG9zZSAtIGFuZCBub3RoaW5nIGVsc2UgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpKSB7Ci0JCXJldCA9IHJkc19ub3RpZnlfcXVldWVfZ2V0KHJzLCBtc2cpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KSB7Ci0JCXJldCA9IHJkc19ub3RpZnlfY29uZyhycywgbXNnKTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJd2hpbGUgKDEpIHsKKwkJLyogSWYgdGhlcmUgYXJlIHBlbmRpbmcgbm90aWZpY2F0aW9ucywgZG8gdGhvc2UgLSBhbmQgbm90aGluZyBlbHNlICovCisJCWlmICghbGlzdF9lbXB0eSgmcnMtPnJzX25vdGlmeV9xdWV1ZSkpIHsKKwkJCXJldCA9IHJkc19ub3RpZnlfcXVldWVfZ2V0KHJzLCBtc2cpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocnMtPnJzX2Nvbmdfbm90aWZ5KSB7CisJCQlyZXQgPSByZHNfbm90aWZ5X2NvbmcocnMsIG1zZyk7CisJCQlicmVhazsKKwkJfQorCiAJCWlmICghcmRzX25leHRfaW5jb21pbmcocnMsICZpbmMpKSB7CiAJCQlpZiAobm9uYmxvY2spIHsKIAkJCQlyZXQgPSAtRUFHQUlOOwpAQCAtNDI4LDcgKzQzMiw5IEBACiAJCQl9CiAKIAkJCXRpbWVvID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKnNrLT5za19zbGVlcCwKLQkJCQkJCXJkc19uZXh0X2luY29taW5nKHJzLCAmaW5jKSwKKwkJCQkJCSghbGlzdF9lbXB0eSgmcnMtPnJzX25vdGlmeV9xdWV1ZSkKKwkJCQkJCXx8IHJzLT5yc19jb25nX25vdGlmeQorCQkJCQkJfHwgcmRzX25leHRfaW5jb21pbmcocnMsICZpbmMpKSwKIAkJCQkJCXRpbWVvKTsKIAkJCXJkc2RlYnVnKCJyZWN2bXNnIHdva2UgaW5jICVwIHRpbWVvICVsZFxuIiwgaW5jLAogCQkJCSB0aW1lbyk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCmluZGV4IGE0YTdmNDIuLjI4Yzg4ZmYgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCisrKyBiL25ldC9yZHMvc2VuZC5jCkBAIC00MzksNiArNDM5LDcgQEAKIAkJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX3JkbWFfc2VuZF9jb21wbGV0ZSk7CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHJkc19yZG1hX3NlbmRfY29tcGxldGUgZXhjZXB0IHdlCkBAIC00OTQsNiArNDk1LDcgQEAKIAogCXJldHVybiBmb3VuZDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX2dldF9tZXNzYWdlKTsKIAogLyoKICAqIFRoaXMgcmVtb3ZlcyBtZXNzYWdlcyBmcm9tIHRoZSBzb2NrZXQncyBsaXN0IGlmIHRoZXkncmUgb24gaXQuICBUaGUgbGlzdApAQCAtNjEwLDYgKzYxMiw3IEBACiAJLyogbm93IHJlbW92ZSB0aGUgbWVzc2FnZXMgZnJvbSB0aGUgc29jayBsaXN0IGFzIG5lZWRlZCAqLwogCXJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soJmxpc3QsIFJEU19SRE1BX1NVQ0NFU1MpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX3NlbmRfZHJvcF9hY2tlZCk7CiAKIHZvaWQgcmRzX3NlbmRfZHJvcF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRlc3QpCiB7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3N0YXRzLmMgYi9uZXQvcmRzL3N0YXRzLmMKaW5kZXggNjM3MTQ2OC4uNzU5OGViMCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zdGF0cy5jCisrKyBiL25ldC9yZHMvc3RhdHMuYwpAQCAtMzcsMTAgKzM3LDExIEBACiAjaW5jbHVkZSAicmRzLmgiCiAKIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCByZHNfc3RhdGlzdGljcywgcmRzX3N0YXRzKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwocmRzX3N0YXRzKTsKIAogLyogOi4sJHMvdW5zaWduZWQgbG9uZ1w+LipcPHNfXCguKlwpOy8iXDEiLC9nICovCiAKLXN0YXRpYyBjaGFyICpyZHNfc3RhdF9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHJkc19zdGF0X25hbWVzW10gPSB7CiAJImNvbm5fcmVzZXQiLAogCSJyZWN2X2Ryb3BfYmFkX2NoZWNrc3VtIiwKIAkicmVjdl9kcm9wX29sZF9zZXEiLApAQCAtNzcsNyArNzgsNyBAQAogfTsKIAogdm9pZCByZHNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKLQkJCSB1aW50NjRfdCAqdmFsdWVzLCBjaGFyICoqbmFtZXMsIHNpemVfdCBucikKKwkJCSB1aW50NjRfdCAqdmFsdWVzLCBjb25zdCBjaGFyICpjb25zdCAqbmFtZXMsIHNpemVfdCBucikKIHsKIAlzdHJ1Y3QgcmRzX2luZm9fY291bnRlciBjdHI7CiAJc2l6ZV90IGk7CkBAIC05MCw2ICs5MSw3IEBACiAJCXJkc19pbmZvX2NvcHkoaXRlciwgJmN0ciwgc2l6ZW9mKGN0cikpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJkc19zdGF0c19pbmZvX2NvcHkpOwogCiAvKgogICogVGhpcyBnaXZlcyBnbG9iYWwgY291bnRlcnMgYWNyb3NzIGFsbCB0aGUgdHJhbnNwb3J0cy4gIFRoZSBzdHJpbmdzCmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTE5OGFlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90Y3AuYwpAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJ0Y3AuaCIKKworLyogb25seSBmb3IgaW5mbyBleHBvcnRpbmcgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX3RjcF90Y19saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRChyZHNfdGNwX3RjX2xpc3QpOwordW5zaWduZWQgaW50IHJkc190Y3BfdGNfY291bnQ7CisKKy8qIFRyYWNrIHJkc190Y3BfY29ubmVjdGlvbiBzdHJ1Y3RzIHNvIHRoZXkgY2FuIGJlIGNsZWFuZWQgdXAgKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX3RjcF9jb25uX2xvY2spOworc3RhdGljIExJU1RfSEVBRChyZHNfdGNwX2Nvbm5fbGlzdCk7CisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX3RjcF9jb25uX3NsYWI7CisKKyNkZWZpbmUgUkRTX1RDUF9ERUZBVUxUX0JVRlNJWkUgKDEyOCAqIDEwMjQpCisKKy8qIGRvaW5nIGl0IHRoaXMgd2F5IGF2b2lkcyBjYWxsaW5nIHRjcF9zaygpICovCit2b2lkIHJkc190Y3Bfbm9uYWdsZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCW1tX3NlZ21lbnRfdCBvbGRmcyA9IGdldF9mcygpOworCWludCB2YWwgPSAxOworCisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJc29jay0+b3BzLT5zZXRzb2Nrb3B0KHNvY2ssIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLCAoY2hhciBfX3VzZXIgKikmdmFsLAorCQkJICAgICAgc2l6ZW9mKHZhbCkpOworCXNldF9mcyhvbGRmcyk7Cit9CisKK3ZvaWQgcmRzX3RjcF90dW5lKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisKKwlyZHNfdGNwX25vbmFnbGUoc29jayk7CisKKwkvKgorCSAqIFdlJ3JlIHRyeWluZyB0byBzYXR1cmF0ZSBnaWdhYml0IHdpdGggdGhlIGRlZmF1bHQsCisJICogc2VlIHN2Y19zb2NrX3NldGJ1ZnNpemUoKS4KKwkgKi8KKwlsb2NrX3NvY2soc2spOworCXNrLT5za19zbmRidWYgPSBSRFNfVENQX0RFRkFVTFRfQlVGU0laRTsKKwlzay0+c2tfcmN2YnVmID0gUkRTX1RDUF9ERUZBVUxUX0JVRlNJWkU7CisJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX1NOREJVRl9MT0NLfFNPQ0tfUkNWQlVGX0xPQ0s7CisJcmVsZWFzZV9zb2NrKHNrKTsKK30KKwordTMyIHJkc190Y3Bfc25kX254dChzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YykKK3sKKwlyZXR1cm4gdGNwX3NrKHRjLT50X3NvY2stPnNrKS0+c25kX254dDsKK30KKwordTMyIHJkc190Y3Bfc25kX3VuYShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YykKK3sKKwlyZXR1cm4gdGNwX3NrKHRjLT50X3NvY2stPnNrKS0+c25kX3VuYTsKK30KKwordm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgICAgc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMpCit7CisJcmRzZGVidWcoInJlc3RvcmluZyBzb2NrICVwIGNhbGxiYWNrcyBmcm9tIHRjICVwXG4iLCBzb2NrLCB0Yyk7CisJd3JpdGVfbG9ja19iaCgmc29jay0+c2stPnNrX2NhbGxiYWNrX2xvY2spOworCisJLyogZG9uZSB1bmRlciB0aGUgY2FsbGJhY2tfbG9jayB0byBzZXJpYWxpemUgd2l0aCB3cml0ZV9zcGFjZSAqLworCXNwaW5fbG9jaygmcmRzX3RjcF90Y19saXN0X2xvY2spOworCWxpc3RfZGVsX2luaXQoJnRjLT50X2xpc3RfaXRlbSk7CisJcmRzX3RjcF90Y19jb3VudC0tOworCXNwaW5fdW5sb2NrKCZyZHNfdGNwX3RjX2xpc3RfbG9jayk7CisKKwl0Yy0+dF9zb2NrID0gTlVMTDsKKworCXNvY2stPnNrLT5za193cml0ZV9zcGFjZSA9IHRjLT50X29yaWdfd3JpdGVfc3BhY2U7CisJc29jay0+c2stPnNrX2RhdGFfcmVhZHkgPSB0Yy0+dF9vcmlnX2RhdGFfcmVhZHk7CisJc29jay0+c2stPnNrX3N0YXRlX2NoYW5nZSA9IHRjLT50X29yaWdfc3RhdGVfY2hhbmdlOworCXNvY2stPnNrLT5za191c2VyX2RhdGEgPSBOVUxMOworCisJd3JpdGVfdW5sb2NrX2JoKCZzb2NrLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBvbmx5IHBhdGggdGhhdCBzZXRzIHRjLT50X3NvY2suICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQKKyAqIGl0IGlzIHNldC4gIFRoZSBSRFNfQ09OTl9DT05ORUNURUQgYml0IHByb3RlY3RzIHRob3NlIHBhdGhzIGZyb20gYmVpbmcKKyAqIGNhbGxlZCB3aGlsZSBpdCBpc24ndCBzZXQuCisgKi8KK3ZvaWQgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNkZWJ1Zygic2V0dGluZyBzb2NrICVwIGNhbGxiYWNrcyB0byB0YyAlcFxuIiwgc29jaywgdGMpOworCXdyaXRlX2xvY2tfYmgoJnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKKworCS8qIGRvbmUgdW5kZXIgdGhlIGNhbGxiYWNrX2xvY2sgdG8gc2VyaWFsaXplIHdpdGggd3JpdGVfc3BhY2UgKi8KKwlzcGluX2xvY2soJnJkc190Y3BfdGNfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ0Yy0+dF9saXN0X2l0ZW0sICZyZHNfdGNwX3RjX2xpc3QpOworCXJkc190Y3BfdGNfY291bnQrKzsKKwlzcGluX3VubG9jaygmcmRzX3RjcF90Y19saXN0X2xvY2spOworCisJLyogYWNjZXB0ZWQgc29ja2V0cyBuZWVkIG91ciBsaXN0ZW4gZGF0YSByZWFkeSB1bmRvbmUgKi8KKwlpZiAoc29jay0+c2stPnNrX2RhdGFfcmVhZHkgPT0gcmRzX3RjcF9saXN0ZW5fZGF0YV9yZWFkeSkKKwkJc29jay0+c2stPnNrX2RhdGFfcmVhZHkgPSBzb2NrLT5zay0+c2tfdXNlcl9kYXRhOworCisJdGMtPnRfc29jayA9IHNvY2s7CisJdGMtPmNvbm4gPSBjb25uOworCXRjLT50X29yaWdfZGF0YV9yZWFkeSA9IHNvY2stPnNrLT5za19kYXRhX3JlYWR5OworCXRjLT50X29yaWdfd3JpdGVfc3BhY2UgPSBzb2NrLT5zay0+c2tfd3JpdGVfc3BhY2U7CisJdGMtPnRfb3JpZ19zdGF0ZV9jaGFuZ2UgPSBzb2NrLT5zay0+c2tfc3RhdGVfY2hhbmdlOworCisJc29jay0+c2stPnNrX3VzZXJfZGF0YSA9IGNvbm47CisJc29jay0+c2stPnNrX2RhdGFfcmVhZHkgPSByZHNfdGNwX2RhdGFfcmVhZHk7CisJc29jay0+c2stPnNrX3dyaXRlX3NwYWNlID0gcmRzX3RjcF93cml0ZV9zcGFjZTsKKwlzb2NrLT5zay0+c2tfc3RhdGVfY2hhbmdlID0gcmRzX3RjcF9zdGF0ZV9jaGFuZ2U7CisKKwl3cml0ZV91bmxvY2tfYmgoJnNvY2stPnNrLT5za19jYWxsYmFja19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcmRzX3RjcF90Y19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXN0cnVjdCByZHNfaW5mb190Y3Bfc29ja2V0IHRzaW5mbzsKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJaW50IHNpbmxlbjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfdGNwX3RjX2xpc3RfbG9jaywgZmxhZ3MpOworCisJaWYgKGxlbiAvIHNpemVvZih0c2luZm8pIDwgcmRzX3RjcF90Y19jb3VudCkKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRjLCAmcmRzX3RjcF90Y19saXN0LCB0X2xpc3RfaXRlbSkgeworCisJCXNvY2stPm9wcy0+Z2V0bmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgJnNpbmxlbiwgMCk7CisJCXRzaW5mby5sb2NhbF9hZGRyID0gc2luLnNpbl9hZGRyLnNfYWRkcjsKKwkJdHNpbmZvLmxvY2FsX3BvcnQgPSBzaW4uc2luX3BvcnQ7CisJCXNvY2stPm9wcy0+Z2V0bmFtZShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgJnNpbmxlbiwgMSk7CisJCXRzaW5mby5wZWVyX2FkZHIgPSBzaW4uc2luX2FkZHIuc19hZGRyOworCQl0c2luZm8ucGVlcl9wb3J0ID0gc2luLnNpbl9wb3J0OworCisJCXRzaW5mby5oZHJfcmVtID0gdGMtPnRfdGluY19oZHJfcmVtOworCQl0c2luZm8uZGF0YV9yZW0gPSB0Yy0+dF90aW5jX2RhdGFfcmVtOworCQl0c2luZm8ubGFzdF9zZW50X254dCA9IHRjLT50X2xhc3Rfc2VudF9ueHQ7CisJCXRzaW5mby5sYXN0X2V4cGVjdGVkX3VuYSA9IHRjLT50X2xhc3RfZXhwZWN0ZWRfdW5hOworCQl0c2luZm8ubGFzdF9zZWVuX3VuYSA9IHRjLT50X2xhc3Rfc2Vlbl91bmE7CisKKwkJcmRzX2luZm9fY29weShpdGVyLCAmdHNpbmZvLCBzaXplb2YodHNpbmZvKSk7CisJfQorCitvdXQ6CisJbGVucy0+bnIgPSByZHNfdGNwX3RjX2NvdW50OworCWxlbnMtPmVhY2ggPSBzaXplb2YodHNpbmZvKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc190Y3BfdGNfbGlzdF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3RjcF9sYWRkcl9jaGVjayhfX2JlMzIgYWRkcikKK3sKKwlpZiAoaW5ldF9hZGRyX3R5cGUoJmluaXRfbmV0LCBhZGRyKSA9PSBSVE5fTE9DQUwpCisJCXJldHVybiAwOworCXJldHVybiAtRUFERFJOT1RBVkFJTDsKK30KKworc3RhdGljIGludCByZHNfdGNwX2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7CisKKwl0YyA9IGttZW1fY2FjaGVfYWxsb2MocmRzX3RjcF9jb25uX3NsYWIsIGdmcCk7CisJaWYgKHRjID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJdGMtPnRfc29jayA9IE5VTEw7CisJdGMtPnRfdGluYyA9IE5VTEw7CisJdGMtPnRfdGluY19oZHJfcmVtID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwl0Yy0+dF90aW5jX2RhdGFfcmVtID0gMDsKKworCWNvbm4tPmNfdHJhbnNwb3J0X2RhdGEgPSB0YzsKKworCXNwaW5fbG9ja19pcnEoJnJkc190Y3BfY29ubl9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZ0Yy0+dF90Y3Bfbm9kZSwgJnJkc190Y3BfY29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc190Y3BfY29ubl9sb2NrKTsKKworCXJkc2RlYnVnKCJhbGxvY2VkIHRjICVwXG4iLCBjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmRzX3RjcF9jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gYXJnOworCXJkc2RlYnVnKCJmcmVlaW5nIHRjICVwXG4iLCB0Yyk7CisJa21lbV9jYWNoZV9mcmVlKHJkc190Y3BfY29ubl9zbGFiLCB0Yyk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc190Y3BfZGVzdHJveV9jb25ucyh2b2lkKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjLCAqX3RjOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmcmRzX3RjcF9jb25uX2xvY2spOworCWxpc3Rfc3BsaWNlKCZyZHNfdGNwX2Nvbm5fbGlzdCwgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX3RjcF9jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX3RjcF9jb25uX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRjLCBfdGMsICZ0bXBfbGlzdCwgdF90Y3Bfbm9kZSkgeworCQlpZiAodGMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3kodGMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3kodGMtPmNvbm4pOworCX0KK30KKwordm9pZCByZHNfdGNwX2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fVENQX1NPQ0tFVFMsIHJkc190Y3BfdGNfaW5mbyk7CisJcmRzX3RjcF9saXN0ZW5fc3RvcCgpOworCXJkc190Y3BfZGVzdHJveV9jb25ucygpOworCXJkc190cmFuc191bnJlZ2lzdGVyKCZyZHNfdGNwX3RyYW5zcG9ydCk7CisJcmRzX3RjcF9yZWN2X2V4aXQoKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9jb25uX3NsYWIpOworfQorbW9kdWxlX2V4aXQocmRzX3RjcF9leGl0KTsKKworc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX3RjcF90cmFuc3BvcnQgPSB7CisJLmxhZGRyX2NoZWNrCQk9IHJkc190Y3BfbGFkZHJfY2hlY2ssCisJLnhtaXRfcHJlcGFyZQkJPSByZHNfdGNwX3htaXRfcHJlcGFyZSwKKwkueG1pdF9jb21wbGV0ZQkJPSByZHNfdGNwX3htaXRfY29tcGxldGUsCisJLnhtaXRfY29uZ19tYXAJCT0gcmRzX3RjcF94bWl0X2NvbmdfbWFwLAorCS54bWl0CQkJPSByZHNfdGNwX3htaXQsCisJLnJlY3YJCQk9IHJkc190Y3BfcmVjdiwKKwkuY29ubl9hbGxvYwkJPSByZHNfdGNwX2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfdGNwX2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc190Y3BfY29ubl9jb25uZWN0LAorCS5jb25uX3NodXRkb3duCQk9IHJkc190Y3BfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc190Y3BfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc190Y3BfaW5jX3B1cmdlLAorCS5pbmNfZnJlZQkJPSByZHNfdGNwX2luY19mcmVlLAorCS5zdGF0c19pbmZvX2NvcHkJPSByZHNfdGNwX3N0YXRzX2luZm9fY29weSwKKwkuZXhpdAkJCT0gcmRzX3RjcF9leGl0LAorCS50X293bmVyCQk9IFRISVNfTU9EVUxFLAorCS50X25hbWUJCQk9ICJ0Y3AiLAorCS50X3R5cGUJCQk9IFJEU19UUkFOU19UQ1AsCisJLnRfcHJlZmVyX2xvb3BiYWNrCT0gMSwKK307CisKK2ludCBfX2luaXQgcmRzX3RjcF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJkc190Y3BfY29ubl9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc190Y3BfY29ubmVjdGlvbiIsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uKSwKKwkJCQkJICAgICAgMCwgMCwgTlVMTCk7CisJaWYgKHJkc190Y3BfY29ubl9zbGFiID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcmRzX3RjcF9yZWN2X2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zbGFiOworCisJcmV0ID0gcmRzX3RyYW5zX3JlZ2lzdGVyKCZyZHNfdGNwX3RyYW5zcG9ydCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVjdjsKKworCXJldCA9IHJkc190Y3BfbGlzdGVuX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWdpc3RlcjsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fVENQX1NPQ0tFVFMsIHJkc190Y3BfdGNfaW5mbyk7CisKKwlnb3RvIG91dDsKKworb3V0X3JlZ2lzdGVyOgorCXJkc190cmFuc191bnJlZ2lzdGVyKCZyZHNfdGNwX3RyYW5zcG9ydCk7CitvdXRfcmVjdjoKKwlyZHNfdGNwX3JlY3ZfZXhpdCgpOworb3V0X3NsYWI6CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc190Y3BfY29ubl9zbGFiKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQocmRzX3RjcF9pbml0KTsKKworTU9EVUxFX0FVVEhPUigiT3JhY2xlIENvcnBvcmF0aW9uIDxyZHMtZGV2ZWxAb3NzLm9yYWNsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJEUzogVENQIHRyYW5zcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5oIGIvbmV0L3Jkcy90Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRmYTZiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90Y3AuaApAQCAtMCwwICsxLDkzIEBACisjaWZuZGVmIF9SRFNfVENQX0gKKyNkZWZpbmUgX1JEU19UQ1BfSAorCisjZGVmaW5lIFJEU19UQ1BfUE9SVAkxNjM4NQorCitzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZyB7CisJc3RydWN0IHJkc19pbmNvbWluZwl0aV9pbmM7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAl0aV9za2JfbGlzdDsKK307CisKK3N0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24geworCisJc3RydWN0IGxpc3RfaGVhZAl0X3RjcF9ub2RlOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAgICpjb25uOworCXN0cnVjdCBzb2NrZXQJCSp0X3NvY2s7CisJdm9pZAkJCSp0X29yaWdfd3JpdGVfc3BhY2U7CisJdm9pZAkJCSp0X29yaWdfZGF0YV9yZWFkeTsKKwl2b2lkCQkJKnRfb3JpZ19zdGF0ZV9jaGFuZ2U7CisKKwlzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZwkqdF90aW5jOworCXNpemVfdAkJCXRfdGluY19oZHJfcmVtOworCXNpemVfdAkJCXRfdGluY19kYXRhX3JlbTsKKworCS8qIFhYWCBlcnJvciByZXBvcnQ/ICovCisJc3RydWN0IHdvcmtfc3RydWN0CXRfY29ubl93OworCXN0cnVjdCB3b3JrX3N0cnVjdAl0X3NlbmRfdzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJdF9kb3duX3c7CisJc3RydWN0IHdvcmtfc3RydWN0CXRfcmVjdl93OworCisJLyogZm9yIGluZm8gZXhwb3J0aW5nIG9ubHkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRfbGlzdF9pdGVtOworCXUzMgkJCXRfbGFzdF9zZW50X254dDsKKwl1MzIJCQl0X2xhc3RfZXhwZWN0ZWRfdW5hOworCXUzMgkJCXRfbGFzdF9zZWVuX3VuYTsKK307CisKK3N0cnVjdCByZHNfdGNwX3N0YXRpc3RpY3MgeworCXVpbnQ2NF90CXNfdGNwX2RhdGFfcmVhZHlfY2FsbHM7CisJdWludDY0X3QJc190Y3Bfd3JpdGVfc3BhY2VfY2FsbHM7CisJdWludDY0X3QJc190Y3Bfc25kYnVmX2Z1bGw7CisJdWludDY0X3QJc190Y3BfY29ubmVjdF9yYWNlZDsKKwl1aW50NjRfdAlzX3RjcF9saXN0ZW5fY2xvc2VkX3N0YWxlOworfTsKKworLyogdGNwLmMgKi8KK2ludCBfX2luaXQgcmRzX3RjcF9pbml0KHZvaWQpOwordm9pZCByZHNfdGNwX2V4aXQodm9pZCk7Cit2b2lkIHJkc190Y3BfdHVuZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKK3ZvaWQgcmRzX3RjcF9ub25hZ2xlKHN0cnVjdCBzb2NrZXQgKnNvY2spOwordm9pZCByZHNfdGNwX3NldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgICAgIHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjKTsKK3UzMiByZHNfdGNwX3NuZF9ueHQoc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMpOwordTMyIHJkc190Y3Bfc25kX3VuYShzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0Yyk7Cit1NjQgcmRzX3RjcF9tYXBfc2VxKHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjLCB1MzIgc2VxKTsKK2V4dGVybiBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCByZHNfdGNwX3RyYW5zcG9ydDsKKworLyogdGNwX2Nvbm5lY3QuYyAqLworaW50IHJkc190Y3BfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc190Y3BfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spOworCisvKiB0Y3BfbGlzdGVuLmMgKi8KK2ludCBfX2luaXQgcmRzX3RjcF9saXN0ZW5faW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3RjcF9saXN0ZW5fc3RvcCh2b2lkKTsKK3ZvaWQgcmRzX3RjcF9saXN0ZW5fZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcyk7CisKKy8qIHRjcF9yZWN2LmMgKi8KK2ludCBfX2luaXQgcmRzX3RjcF9yZWN2X2luaXQodm9pZCk7Cit2b2lkIHJkc190Y3BfcmVjdl9leGl0KHZvaWQpOwordm9pZCByZHNfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpOworaW50IHJkc190Y3BfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfdGNwX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfdGNwX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7CitpbnQgcmRzX3RjcF9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIHNpemVfdCBzaXplKTsKKworLyogdGNwX3NlbmQuYyAqLwordm9pZCByZHNfdGNwX3htaXRfcHJlcGFyZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfdGNwX3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfdGNwX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCSAgICAgICAgIHVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpOwordm9pZCByZHNfdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzayk7CitpbnQgcmRzX3RjcF94bWl0X2NvbmdfbWFwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKy8qIHRjcF9zdGF0cy5jICovCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHJkc190Y3Bfc3RhdGlzdGljcywgcmRzX3RjcF9zdGF0cyk7CisjZGVmaW5lIHJkc190Y3Bfc3RhdHNfaW5jKG1lbWJlcikgcmRzX3N0YXRzX2luY193aGljaChyZHNfdGNwX3N0YXRzLCBtZW1iZXIpCit1bnNpZ25lZCBpbnQgcmRzX3RjcF9zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGF2YWlsKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9jb25uZWN0LmMgYi9uZXQvcmRzL3RjcF9jb25uZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjExNTIyZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvdGNwX2Nvbm5lY3QuYwpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxuZXQvdGNwLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJ0Y3AuaCIKKwordm9pZCByZHNfdGNwX3N0YXRlX2NoYW5nZShzdHJ1Y3Qgc29jayAqc2spCit7CisJdm9pZCAoKnN0YXRlX2NoYW5nZSkoc3RydWN0IHNvY2sgKnNrKTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGM7CisKKwlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKKwljb25uID0gc2stPnNrX3VzZXJfZGF0YTsKKwlpZiAoY29ubiA9PSBOVUxMKSB7CisJCXN0YXRlX2NoYW5nZSA9IHNrLT5za19zdGF0ZV9jaGFuZ2U7CisJCWdvdG8gb3V0OworCX0KKwl0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RhdGVfY2hhbmdlID0gdGMtPnRfb3JpZ19zdGF0ZV9jaGFuZ2U7CisKKwlyZHNkZWJ1Zygic29jayAlcCBzdGF0ZV9jaGFuZ2UgdG8gJWRcbiIsIHRjLT50X3NvY2ssIHNrLT5za19zdGF0ZSk7CisKKwlzd2l0Y2goc2stPnNrX3N0YXRlKSB7CisJCS8qIGlnbm9yZSBjb25uZWN0aW5nIHNvY2tldHMgYXMgdGhleSBtYWtlIHByb2dyZXNzICovCisJCWNhc2UgVENQX1NZTl9TRU5UOgorCQljYXNlIFRDUF9TWU5fUkVDVjoKKwkJCWJyZWFrOworCQljYXNlIFRDUF9FU1RBQkxJU0hFRDoKKwkJCXJkc19jb25uZWN0X2NvbXBsZXRlKGNvbm4pOworCQkJYnJlYWs7CisJCWNhc2UgVENQX0NMT1NFOgorCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KK291dDoKKwlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCXN0YXRlX2NoYW5nZShzayk7Cit9CisKK2ludCByZHNfdGNwX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHNvY2tldCAqc29jayA9IE5VTEw7CisJc3RydWN0IHNvY2thZGRyX2luIHNyYywgZGVzdDsKKwlpbnQgcmV0OworCisJcmV0ID0gc29ja19jcmVhdGUoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAmc29jayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmRzX3RjcF90dW5lKHNvY2spOworCisJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNyYy5zaW5fYWRkci5zX2FkZHIgPSAoX19mb3JjZSB1MzIpY29ubi0+Y19sYWRkcjsKKwlzcmMuc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoMCk7CisKKwlyZXQgPSBzb2NrLT5vcHMtPmJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsIHNpemVvZihzcmMpKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJiaW5kIGZhaWxlZCB3aXRoICVkIGF0IGFkZHJlc3MgJXUuJXUuJXUuJXVcbiIsCisJCSAgICAgcmV0LCBOSVBRVUFEKGNvbm4tPmNfbGFkZHIpKTsKKwkJZ290byBvdXQ7CisJfQorCisJZGVzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlkZXN0LnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2ZhZGRyOworCWRlc3Quc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1RDUF9QT1JUKTsKKworCS8qCisJICogb25jZSB3ZSBjYWxsIGNvbm5lY3QoKSB3ZSBjYW4gc3RhcnQgZ2V0dGluZyBjYWxsYmFja3MgYW5kIHRoZXkKKwkgKiBvd24gdGhlIHNvY2tldAorCSAqLworCXJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjb25uKTsKKwlyZXQgPSBzb2NrLT5vcHMtPmNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZkZXN0LCBzaXplb2YoZGVzdCksCisJCQkJIE9fTk9OQkxPQ0spOworCXNvY2sgPSBOVUxMOworCisJcmRzZGVidWcoImNvbm5lY3QgdG8gYWRkcmVzcyAldS4ldS4ldS4ldSByZXR1cm5lZCAlZFxuIiwKKwkJIE5JUFFVQUQoY29ubi0+Y19mYWRkciksIHJldCk7CisJaWYgKHJldCA9PSAtRUlOUFJPR1JFU1MpCisJCXJldCA9IDA7CisKK291dDoKKwlpZiAoc29jaykKKwkJc29ja19yZWxlYXNlKHNvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBCZWZvcmUga2lsbGluZyB0aGUgdGNwIHNvY2tldCB0aGlzIG5lZWRzIHRvIHNlcmlhbGl6ZSB3aXRoIGNhbGxiYWNrcy4gIFRoZQorICogY2FsbGVyIGhhcyBhbHJlYWR5IGdyYWJiZWQgdGhlIHNlbmRpbmcgc2VtIHNvIHdlJ3JlIHNlcmlhbGl6ZWQgd2l0aCBvdGhlcgorICogc2VuZGVycy4KKyAqCisgKiBUQ1AgY2FsbHMgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBzb2NrIGxvY2sgc28gd2UgaG9sZCBpdCB3aGlsZSB3ZSByZXNldCB0aGUKKyAqIGNhbGxiYWNrcyB0byB0aG9zZSBzZXQgYnkgVENQLiAgT3VyIGNhbGxiYWNrcyB3b24ndCBleGVjdXRlIGFnYWluIG9uY2Ugd2UKKyAqIGhvbGQgdGhlIHNvY2sgbG9jay4KKyAqLwordm9pZCByZHNfdGNwX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGMtPnRfc29jazsKKworCXJkc2RlYnVnKCJzaHV0dGluZyBkb3duIGNvbm4gJXAgdGMgJXAgc29jayAlcFxuIiwgY29ubiwgdGMsIHNvY2spOworCisJaWYgKHNvY2spIHsKKwkJc29jay0+b3BzLT5zaHV0ZG93bihzb2NrLCBSQ1ZfU0hVVERPV04gfCBTRU5EX1NIVVRET1dOKTsKKwkJbG9ja19zb2NrKHNvY2stPnNrKTsKKwkJcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzb2NrLCB0Yyk7IC8qIHRjLT50Y19zb2NrID0gTlVMTCAqLworCisJCXJlbGVhc2Vfc29jayhzb2NrLT5zayk7CisJCXNvY2tfcmVsZWFzZShzb2NrKTsKKwl9OworCisJaWYgKHRjLT50X3RpbmMpIHsKKwkJcmRzX2luY19wdXQoJnRjLT50X3RpbmMtPnRpX2luYyk7CisJCXRjLT50X3RpbmMgPSBOVUxMOworCX0KKwl0Yy0+dF90aW5jX2hkcl9yZW0gPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXRjLT50X3RpbmNfZGF0YV9yZW0gPSAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGI3NDNlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90Y3BfbGlzdGVuLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAidGNwLmgiCisKKy8qCisgKiBjaGVlc3ksIGJ1dCBzaW1wbGUuLgorICovCitzdGF0aWMgdm9pZCByZHNfdGNwX2FjY2VwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBERUNMQVJFX1dPUksocmRzX3RjcF9saXN0ZW5fd29yaywgcmRzX3RjcF9hY2NlcHRfd29ya2VyKTsKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpyZHNfdGNwX2xpc3Rlbl9zb2NrOworCitzdGF0aWMgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCXN0cnVjdCBzb2NrZXQgKm5ld19zb2NrID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJaW50IHJldDsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0OworCisJcmV0ID0gc29ja19jcmVhdGVfbGl0ZShzb2NrLT5zay0+c2tfZmFtaWx5LCBzb2NrLT5zay0+c2tfdHlwZSwKKwkJCSAgICAgICBzb2NrLT5zay0+c2tfcHJvdG9jb2wsICZuZXdfc29jayk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwluZXdfc29jay0+dHlwZSA9IHNvY2stPnR5cGU7CisJbmV3X3NvY2stPm9wcyA9IHNvY2stPm9wczsKKwlyZXQgPSBzb2NrLT5vcHMtPmFjY2VwdChzb2NrLCBuZXdfc29jaywgT19OT05CTE9DSyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmRzX3RjcF90dW5lKG5ld19zb2NrKTsKKworCWluZXQgPSBpbmV0X3NrKG5ld19zb2NrLT5zayk7CisKKwlyZHNkZWJ1ZygiYWNjZXB0ZWQgdGNwICV1LiV1LiV1LiV1OiV1IC0+ICV1LiV1LiV1LiV1OiV1XG4iLAorCQkgIE5JUFFVQUQoaW5ldC0+c2FkZHIpLCBudG9ocyhpbmV0LT5zcG9ydCksCisJCSAgTklQUVVBRChpbmV0LT5kYWRkciksIG50b2hzKGluZXQtPmRwb3J0KSk7CisKKwljb25uID0gcmRzX2Nvbm5fY3JlYXRlKGluZXQtPnNhZGRyLCBpbmV0LT5kYWRkciwgJnJkc190Y3BfdHJhbnNwb3J0LAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChJU19FUlIoY29ubikpIHsKKwkJcmV0ID0gUFRSX0VSUihjb25uKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBzZWUgdGhlIGNvbW1lbnQgYWJvdmUgcmRzX3F1ZXVlX2RlbGF5ZWRfcmVjb25uZWN0KCkKKwkgKi8KKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fQ09OTkVDVElORykpIHsKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKQorCQkJcmRzX3RjcF9zdGF0c19pbmMoc190Y3BfbGlzdGVuX2Nsb3NlZF9zdGFsZSk7CisJCWVsc2UKKwkJCXJkc190Y3Bfc3RhdHNfaW5jKHNfdGNwX2Nvbm5lY3RfcmFjZWQpOworCQlyZHNfY29ubl9kcm9wKGNvbm4pOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfdGNwX3NldF9jYWxsYmFja3MobmV3X3NvY2ssIGNvbm4pOworCXJkc19jb25uZWN0X2NvbXBsZXRlKGNvbm4pOworCW5ld19zb2NrID0gTlVMTDsKKwlyZXQgPSAwOworCitvdXQ6CisJaWYgKG5ld19zb2NrKQorCQlzb2NrX3JlbGVhc2UobmV3X3NvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc190Y3BfYWNjZXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJd2hpbGUgKHJkc190Y3BfYWNjZXB0X29uZShyZHNfdGNwX2xpc3Rlbl9zb2NrKSA9PSAwKQorCQljb25kX3Jlc2NoZWQoKTsKK30KKwordm9pZCByZHNfdGNwX2xpc3Rlbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgaW50IGJ5dGVzKQoreworCXZvaWQgKCpyZWFkeSkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpOworCisJcmRzZGVidWcoImxpc3RlbiBkYXRhIHJlYWR5IHNrICVwXG4iLCBzayk7CisKKwlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKKwlyZWFkeSA9IHNrLT5za191c2VyX2RhdGE7CisJaWYgKHJlYWR5ID09IE5VTEwpIHsgLyogY2hlY2sgZm9yIHRlYXJkb3duIHJhY2UgKi8KKwkJcmVhZHkgPSBzay0+c2tfZGF0YV9yZWFkeTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAtPnNrX2RhdGFfcmVhZHkgaXMgYWxzbyBjYWxsZWQgZm9yIGEgbmV3bHkgZXN0YWJsaXNoZWQgY2hpbGQgc29ja2V0CisJICogYmVmb3JlIGl0IGhhcyBiZWVuIGFjY2VwdGVkIGFuZCB0aGUgYWNjZXB0ZXIgaGFzIHNldCB1cCB0aGVpcgorCSAqIGRhdGFfcmVhZHkuLiB3ZSBvbmx5IHdhbnQgdG8gcXVldWUgbGlzdGVuIHdvcmsgZm9yIG91ciBsaXN0ZW5pbmcKKwkgKiBzb2NrZXQKKwkgKi8KKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9MSVNURU4pCisJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcmRzX3RjcF9saXN0ZW5fd29yayk7CisKK291dDoKKwlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCXJlYWR5KHNrLCBieXRlcyk7Cit9CisKK2ludCBfX2luaXQgcmRzX3RjcF9saXN0ZW5faW5pdCh2b2lkKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHNvY2tldCAqc29jayA9IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IHNvY2tfY3JlYXRlKFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgJnNvY2spOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXNvY2stPnNrLT5za19yZXVzZSA9IDE7CisJcmRzX3RjcF9ub25hZ2xlKHNvY2spOworCisJd3JpdGVfbG9ja19iaCgmc29jay0+c2stPnNrX2NhbGxiYWNrX2xvY2spOworCXNvY2stPnNrLT5za191c2VyX2RhdGEgPSBzb2NrLT5zay0+c2tfZGF0YV9yZWFkeTsKKwlzb2NrLT5zay0+c2tfZGF0YV9yZWFkeSA9IHJkc190Y3BfbGlzdGVuX2RhdGFfcmVhZHk7CisJd3JpdGVfdW5sb2NrX2JoKCZzb2NrLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7CisKKwlzaW4uc2luX2ZhbWlseSA9IFBGX0lORVQsCisJc2luLnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMilodG9ubChJTkFERFJfQU5ZKTsKKwlzaW4uc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1RDUF9QT1JUKTsKKworCXJldCA9IHNvY2stPm9wcy0+YmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNpbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHNvY2stPm9wcy0+bGlzdGVuKHNvY2ssIDY0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZHNfdGNwX2xpc3Rlbl9zb2NrID0gc29jazsKKwlzb2NrID0gTlVMTDsKK291dDoKKwlpZiAoc29jaykKKwkJc29ja19yZWxlYXNlKHNvY2spOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX3RjcF9saXN0ZW5fc3RvcCh2b2lkKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByZHNfdGNwX2xpc3Rlbl9zb2NrOworCXN0cnVjdCBzb2NrICpzazsKKworCWlmIChzb2NrID09IE5VTEwpCisJCXJldHVybjsKKworCXNrID0gc29jay0+c2s7CisKKwkvKiBzZXJpYWxpemUgd2l0aCBhbmQgcHJldmVudCBmdXJ0aGVyIGNhbGxiYWNrcyAqLworCWxvY2tfc29jayhzayk7CisJd3JpdGVfbG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCWlmIChzay0+c2tfdXNlcl9kYXRhKSB7CisJCXNrLT5za19kYXRhX3JlYWR5ID0gc2stPnNrX3VzZXJfZGF0YTsKKwkJc2stPnNrX3VzZXJfZGF0YSA9IE5VTEw7CisJfQorCXdyaXRlX3VubG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCXJlbGVhc2Vfc29jayhzayk7CisKKwkvKiB3YWl0IGZvciBhY2NlcHRzIHRvIHN0b3AgYW5kIGNsb3NlIHRoZSBzb2NrZXQgKi8KKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKwlzb2NrX3JlbGVhc2Uoc29jayk7CisJcmRzX3RjcF9saXN0ZW5fc29jayA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9yZWN2LmMgYi9uZXQvcmRzL3RjcF9yZWN2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwZGFmZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvdGNwX3JlY3YuYwpAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAidGNwLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX3RjcF9pbmNvbWluZ19zbGFiOworCit2b2lkIHJkc190Y3BfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZyAqdGluYzsKKwl0aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc190Y3BfaW5jb21pbmcsIHRpX2luYyk7CisJcmRzZGVidWcoInB1cmdpbmcgdGluYyAlcCBpbmMgJXBcbiIsIHRpbmMsIGluYyk7CisJc2tiX3F1ZXVlX3B1cmdlKCZ0aW5jLT50aV9za2JfbGlzdCk7Cit9CisKK3ZvaWQgcmRzX3RjcF9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc190Y3BfaW5jb21pbmcgKnRpbmM7CisJdGluYyA9IGNvbnRhaW5lcl9vZihpbmMsIHN0cnVjdCByZHNfdGNwX2luY29taW5nLCB0aV9pbmMpOworCXJkc190Y3BfaW5jX3B1cmdlKGluYyk7CisJcmRzZGVidWcoImZyZWVpbmcgdGluYyAlcCBpbmMgJXBcbiIsIHRpbmMsIGluYyk7CisJa21lbV9jYWNoZV9mcmVlKHJkc190Y3BfaW5jb21pbmdfc2xhYiwgdGluYyk7Cit9CisKKy8qCisgKiB0aGlzIGlzIHByZXR0eSBsYW1lLCBidXQsIHdoYXRldmVyLgorICovCitpbnQgcmRzX3RjcF9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkgICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCByZHNfdGNwX2luY29taW5nICp0aW5jOworCXN0cnVjdCBpb3ZlYyAqaW92LCB0bXA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHksIHNrYl9vZmY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlnb3RvIG91dDsKKworCXRpbmMgPSBjb250YWluZXJfb2YoaW5jLCBzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZywgdGlfaW5jKTsKKwlpb3YgPSBmaXJzdF9pb3Y7CisJdG1wID0gKmlvdjsKKworCXNrYl9xdWV1ZV93YWxrKCZ0aW5jLT50aV9za2JfbGlzdCwgc2tiKSB7CisJCXNrYl9vZmYgPSAwOworCQl3aGlsZSAoc2tiX29mZiA8IHNrYi0+bGVuKSB7CisJCQl3aGlsZSAodG1wLmlvdl9sZW4gPT0gMCkgeworCQkJCWlvdisrOworCQkJCXRtcCA9ICppb3Y7CisJCQl9CisKKwkJCXRvX2NvcHkgPSBtaW4odG1wLmlvdl9sZW4sIHNpemUpOworCQkJdG9fY29weSA9IG1pbih0b19jb3B5LCBza2ItPmxlbiAtIHNrYl9vZmYpOworCisJCQlyZHNkZWJ1ZygicmV0ICVkIHNpemUgJXp1IHNrYiAlcCBza2Jfb2ZmICVsdSAiCisJCQkJICJza2JsZW4gJWQgaW92X2Jhc2UgJXAgaW92X2xlbiAlenUgY3B5ICVsdVxuIiwKKwkJCQkgcmV0LCBzaXplLCBza2IsIHNrYl9vZmYsIHNrYi0+bGVuLAorCQkJCSB0bXAuaW92X2Jhc2UsIHRtcC5pb3ZfbGVuLCB0b19jb3B5KTsKKworCQkJLyogbW9kaWZpZXMgdG1wIGFzIGl0IGNvcGllcyAqLworCQkJaWYgKHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2tiX29mZiwgJnRtcCwKKwkJCQkJCSAgICB0b19jb3B5KSkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXNpemUgLT0gdG9fY29weTsKKwkJCXJldCArPSB0b19jb3B5OworCQkJc2tiX29mZiArPSB0b19jb3B5OworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV2UgaGF2ZSBhIHNlcmllcyBvZiBza2JzIHRoYXQgaGF2ZSBmcmFnbWVudGVkIHBpZWNlcyBvZiB0aGUgY29uZ2VzdGlvbgorICogYml0bWFwLiAgVGhleSBtdXN0IGFkZCB1cCB0byB0aGUgZXhhY3Qgc2l6ZSBvZiB0aGUgY29uZ2VzdGlvbiBiaXRtYXAuICBXZQorICogdXNlIHRoZSBza2IgaGVscGVycyB0byBjb3B5IHRob3NlIGludG8gdGhlIHBhZ2VzIHRoYXQgbWFrZSB1cCB0aGUgaW4tbWVtb3J5CisgKiBjb25nZXN0aW9uIGJpdG1hcCBmb3IgdGhlIHJlbW90ZSBhZGRyZXNzIG9mIHRoaXMgY29ubmVjdGlvbi4gIFdlIHRoZW4gdGVsbAorICogdGhlIGNvbmdlc3Rpb24gY29yZSB0aGF0IHRoZSBiaXRtYXAgaGFzIGJlZW4gY2hhbmdlZCBzbyB0aGF0IGl0IGNhbiB3YWtlIHVwCisgKiBzbGVlcGVycy4KKyAqCisgKiBUaGlzIGlzIHJhY2luZyB3aXRoIHNlbmRpbmcgcGF0aHMgd2hpY2ggYXJlIHVzaW5nIHRlc3RfYml0IHRvIHNlZSBpZiB0aGUKKyAqIGJpdG1hcCBpbmRpY2F0ZXMgdGhhdCB0aGVpciByZWNpcGllbnQgaXMgY29uZ2VzdGVkLgorICovCisKK3N0YXRpYyB2b2lkIHJkc190Y3BfY29uZ19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgIHN0cnVjdCByZHNfdGNwX2luY29taW5nICp0aW5jKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IHRvX2NvcHksIHNrYl9vZmY7CisJdW5zaWduZWQgaW50IG1hcF9vZmY7CisJdW5zaWduZWQgaW50IG1hcF9wYWdlOworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwlpbnQgcmV0OworCisJLyogY2F0Y2ggY29tcGxldGVseSBjb3JydXB0IHBhY2tldHMgKi8KKwlpZiAoYmUzMl90b19jcHUodGluYy0+dGlfaW5jLmlfaGRyLmhfbGVuKSAhPSBSRFNfQ09OR19NQVBfQllURVMpCisJCXJldHVybjsKKworCW1hcF9wYWdlID0gMDsKKwltYXBfb2ZmID0gMDsKKwltYXAgPSBjb25uLT5jX2Zjb25nOworCisJc2tiX3F1ZXVlX3dhbGsoJnRpbmMtPnRpX3NrYl9saXN0LCBza2IpIHsKKwkJc2tiX29mZiA9IDA7CisJCXdoaWxlIChza2Jfb2ZmIDwgc2tiLT5sZW4pIHsKKwkJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSAtIG1hcF9vZmYsCisJCQkJCXNrYi0+bGVuIC0gc2tiX29mZik7CisKKwkJCUJVR19PTihtYXBfcGFnZSA+PSBSRFNfQ09OR19NQVBfUEFHRVMpOworCisJCQkvKiBvbmx5IHJldHVybnMgMCBvciAtZXJyb3IgKi8KKwkJCXJldCA9IHNrYl9jb3B5X2JpdHMoc2tiLCBza2Jfb2ZmLAorCQkJCSh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbbWFwX3BhZ2VdICsgbWFwX29mZiwKKwkJCQl0b19jb3B5KTsKKwkJCUJVR19PTihyZXQgIT0gMCk7CisKKwkJCXNrYl9vZmYgKz0gdG9fY29weTsKKwkJCW1hcF9vZmYgKz0gdG9fY29weTsKKwkJCWlmIChtYXBfb2ZmID09IFBBR0VfU0laRSkgeworCQkJCW1hcF9vZmYgPSAwOworCQkJCW1hcF9wYWdlKys7CisJCQl9CisJCX0KKwl9CisKKwlyZHNfY29uZ19tYXBfdXBkYXRlZChtYXAsIH4odTY0KSAwKTsKK30KKworc3RydWN0IHJkc190Y3BfZGVzY19hcmcgeworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKKwlnZnBfdCBnZnA7CisJZW51bSBrbV90eXBlIGttOworfTsKKworc3RhdGljIGludCByZHNfdGNwX2RhdGFfcmVjdihyZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9kZXNjX2FyZyAqYXJnID0gZGVzYy0+YXJnLmRhdGE7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gYXJnLT5jb25uOworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZyAqdGluYyA9IHRjLT50X3RpbmM7CisJc3RydWN0IHNrX2J1ZmYgKmNsb25lOworCXNpemVfdCBsZWZ0ID0gbGVuLCB0b19jb3B5OworCisJcmRzZGVidWcoInRjcCBkYXRhIHRjICVwIHNrYiAlcCBvZmZzZXQgJXUgbGVuICV6dVxuIiwgdGMsIHNrYiwgb2Zmc2V0LAorCQkgbGVuKTsKKworCS8qCisJICogdGNwX3JlYWRfc29jaygpIGludGVycHJldHMgcGFydGlhbCBwcm9ncmVzcyBhcyBhbiBpbmRpY2F0aW9uIHRvIHN0b3AKKwkgKiBwcm9jZXNzaW5nLgorCSAqLworCXdoaWxlIChsZWZ0KSB7CisJCWlmICh0aW5jID09IE5VTEwpIHsKKwkJCXRpbmMgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc190Y3BfaW5jb21pbmdfc2xhYiwKKwkJCQkJICAgICAgICBhcmctPmdmcCk7CisJCQlpZiAodGluYyA9PSBOVUxMKSB7CisJCQkJZGVzYy0+ZXJyb3IgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJdGMtPnRfdGluYyA9IHRpbmM7CisJCQlyZHNkZWJ1ZygiYWxsb2NlZCB0aW5jICVwXG4iLCB0aW5jKTsKKwkJCXJkc19pbmNfaW5pdCgmdGluYy0+dGlfaW5jLCBjb25uLCBjb25uLT5jX2ZhZGRyKTsKKwkJCS8qCisJCQkgKiBYWFggKiB3ZSBtaWdodCBiZSBhYmxlIHRvIHVzZSB0aGUgX18gdmFyaWFudHMgd2hlbgorCQkJICogd2UndmUgYWxyZWFkeSBzZXJpYWxpemVkIGF0IGEgaGlnaGVyIGxldmVsLgorCQkJICovCisJCQlza2JfcXVldWVfaGVhZF9pbml0KCZ0aW5jLT50aV9za2JfbGlzdCk7CisJCX0KKworCQlpZiAobGVmdCAmJiB0Yy0+dF90aW5jX2hkcl9yZW0pIHsKKwkJCXRvX2NvcHkgPSBtaW4odGMtPnRfdGluY19oZHJfcmVtLCBsZWZ0KTsKKwkJCXJkc2RlYnVnKCJjb3B5aW5nICV6dSBoZWFkZXIgZnJvbSBza2IgJXBcbiIsIHRvX2NvcHksCisJCQkJIHNrYik7CisJCQlza2JfY29weV9iaXRzKHNrYiwgb2Zmc2V0LAorCQkJCSAgICAgIChjaGFyICopJnRpbmMtPnRpX2luYy5pX2hkciArCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpIC0KKwkJCQkJCXRjLT50X3RpbmNfaGRyX3JlbSwKKwkJCQkgICAgICB0b19jb3B5KTsKKwkJCXRjLT50X3RpbmNfaGRyX3JlbSAtPSB0b19jb3B5OworCQkJbGVmdCAtPSB0b19jb3B5OworCQkJb2Zmc2V0ICs9IHRvX2NvcHk7CisKKwkJCWlmICh0Yy0+dF90aW5jX2hkcl9yZW0gPT0gMCkgeworCQkJCS8qIGNvdWxkIGJlIDAgZm9yIGEgMCBsZW4gbWVzc2FnZSAqLworCQkJCXRjLT50X3RpbmNfZGF0YV9yZW0gPQorCQkJCQliZTMyX3RvX2NwdSh0aW5jLT50aV9pbmMuaV9oZHIuaF9sZW4pOworCQkJfQorCQl9CisKKwkJaWYgKGxlZnQgJiYgdGMtPnRfdGluY19kYXRhX3JlbSkgeworCQkJY2xvbmUgPSBza2JfY2xvbmUoc2tiLCBhcmctPmdmcCk7CisJCQlpZiAoY2xvbmUgPT0gTlVMTCkgeworCQkJCWRlc2MtPmVycm9yID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJdG9fY29weSA9IG1pbih0Yy0+dF90aW5jX2RhdGFfcmVtLCBsZWZ0KTsKKwkJCXBza2JfcHVsbChjbG9uZSwgb2Zmc2V0KTsKKwkJCXBza2JfdHJpbShjbG9uZSwgdG9fY29weSk7CisJCQlza2JfcXVldWVfdGFpbCgmdGluYy0+dGlfc2tiX2xpc3QsIGNsb25lKTsKKworCQkJcmRzZGVidWcoInNrYiAlcCBkYXRhICVwIGxlbiAlZCBvZmYgJXUgdG9fY29weSAlenUgLT4gIgorCQkJCSAiY2xvbmUgJXAgZGF0YSAlcCBsZW4gJWRcbiIsCisJCQkJIHNrYiwgc2tiLT5kYXRhLCBza2ItPmxlbiwgb2Zmc2V0LCB0b19jb3B5LAorCQkJCSBjbG9uZSwgY2xvbmUtPmRhdGEsIGNsb25lLT5sZW4pOworCisJCQl0Yy0+dF90aW5jX2RhdGFfcmVtIC09IHRvX2NvcHk7CisJCQlsZWZ0IC09IHRvX2NvcHk7CisJCQlvZmZzZXQgKz0gdG9fY29weTsKKwkJfQorCisJCWlmICh0Yy0+dF90aW5jX2hkcl9yZW0gPT0gMCAmJiB0Yy0+dF90aW5jX2RhdGFfcmVtID09IDApIHsKKwkJCWlmICh0aW5jLT50aV9pbmMuaV9oZHIuaF9mbGFncyA9PSBSRFNfRkxBR19DT05HX0JJVE1BUCkKKwkJCQlyZHNfdGNwX2NvbmdfcmVjdihjb25uLCB0aW5jKTsKKwkJCWVsc2UKKwkJCQlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2ZhZGRyLAorCQkJCQkJICBjb25uLT5jX2xhZGRyLCAmdGluYy0+dGlfaW5jLAorCQkJCQkJICBhcmctPmdmcCwgYXJnLT5rbSk7CisKKwkJCXRjLT50X3RpbmNfaGRyX3JlbSA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCQl0Yy0+dF90aW5jX2RhdGFfcmVtID0gMDsKKwkJCXRjLT50X3RpbmMgPSBOVUxMOworCQkJcmRzX2luY19wdXQoJnRpbmMtPnRpX2luYyk7CisJCQl0aW5jID0gTlVMTDsKKwkJfQorCX0KK291dDoKKwlyZHNkZWJ1ZygicmV0dXJuaW5nIGxlbiAlenUgbGVmdCAlenUgc2tiIGxlbiAlZCByeCBxdWV1ZSBkZXB0aCAlZFxuIiwKKwkJIGxlbiwgbGVmdCwgc2tiLT5sZW4sCisJCSBza2JfcXVldWVfbGVuKCZ0Yy0+dF9zb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpOworCXJldHVybiBsZW4gLSBsZWZ0OworfQorCisvKiB0aGUgY2FsbGVyIGhhcyB0byBob2xkIHRoZSBzb2NrIGxvY2sgKi8KK2ludCByZHNfdGNwX3JlYWRfc29jayhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCwgZW51bSBrbV90eXBlIGttKQoreworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdGMtPnRfc29jazsKKwlyZWFkX2Rlc2NyaXB0b3JfdCBkZXNjOworCXN0cnVjdCByZHNfdGNwX2Rlc2NfYXJnIGFyZzsKKworCS8qIEl0J3MgbGlrZSBnbGliIGluIHRoZSBrZXJuZWwhICovCisJYXJnLmNvbm4gPSBjb25uOworCWFyZy5nZnAgPSBnZnA7CisJYXJnLmttID0ga207CisJZGVzYy5hcmcuZGF0YSA9ICZhcmc7CisJZGVzYy5lcnJvciA9IDA7CisJZGVzYy5jb3VudCA9IDE7IC8qIGdpdmUgbW9yZSB0aGFuIG9uZSBza2IgcGVyIGNhbGwgKi8KKworCXRjcF9yZWFkX3NvY2soc29jay0+c2ssICZkZXNjLCByZHNfdGNwX2RhdGFfcmVjdik7CisJcmRzZGVidWcoInRjcF9yZWFkX3NvY2sgZm9yIHRjICVwIGdmcCAweCV4IHJldHVybmVkICVkXG4iLCB0YywgZ2ZwLAorCQkgZGVzYy5lcnJvcik7CisKKwlyZXR1cm4gZGVzYy5lcnJvcjsKK30KKworLyoKKyAqIFdlIGhvbGQgdGhlIHNvY2sgbG9jayB0byBzZXJpYWxpemUgb3VyIHJkc190Y3BfcmVjdi0+dGNwX3JlYWRfc29jayBmcm9tCisgKiBkYXRhX3JlYWR5LgorICoKKyAqIGlmIHdlIGZhaWwgdG8gYWxsb2NhdGUgd2UncmUgaW4gdHJvdWJsZS4uIGJsaW5kbHkgd2FpdCBzb21lIHRpbWUgYmVmb3JlCisgKiB0cnlpbmcgYWdhaW4gdG8gc2VlIGlmIHRoZSBWTSBjYW4gZnJlZSB1cCBzb21ldGhpbmcgZm9yIHVzLgorICovCitpbnQgcmRzX3RjcF9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHNvY2tldCAqc29jayA9IHRjLT50X3NvY2s7CisJaW50IHJldCA9IDA7CisKKwlyZHNkZWJ1ZygicmVjdiB3b3JrZXIgY29ubiAlcCB0YyAlcCBzb2NrICVwXG4iLCBjb25uLCB0Yywgc29jayk7CisKKwlsb2NrX3NvY2soc29jay0+c2spOworCXJldCA9IHJkc190Y3BfcmVhZF9zb2NrKGNvbm4sIEdGUF9LRVJORUwsIEtNX1VTRVIwKTsKKwlyZWxlYXNlX3NvY2soc29jay0+c2spOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfdGNwX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBpbnQgYnl0ZXMpCit7CisJdm9pZCAoKnJlYWR5KShzdHJ1Y3Qgc29jayAqc2ssIGludCBieXRlcyk7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjOworCisJcmRzZGVidWcoImRhdGEgcmVhZHkgc2sgJXAgYnl0ZXMgJWRcbiIsIHNrLCBieXRlcyk7CisKKwlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKKwljb25uID0gc2stPnNrX3VzZXJfZGF0YTsKKwlpZiAoY29ubiA9PSBOVUxMKSB7IC8qIGNoZWNrIGZvciB0ZWFyZG93biByYWNlICovCisJCXJlYWR5ID0gc2stPnNrX2RhdGFfcmVhZHk7CisJCWdvdG8gb3V0OworCX0KKworCXRjID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlyZWFkeSA9IHRjLT50X29yaWdfZGF0YV9yZWFkeTsKKwlyZHNfdGNwX3N0YXRzX2luYyhzX3RjcF9kYXRhX3JlYWR5X2NhbGxzKTsKKworCWlmIChyZHNfdGNwX3JlYWRfc29jayhjb25uLCBHRlBfQVRPTUlDLCBLTV9TT0ZUSVJRMCkgPT0gLUVOT01FTSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKK291dDoKKwlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCXJlYWR5KHNrLCBieXRlcyk7Cit9CisKK2ludCBfX2luaXQgcmRzX3RjcF9yZWN2X2luaXQodm9pZCkKK3sKKwlyZHNfdGNwX2luY29taW5nX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX3RjcF9pbmNvbWluZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX3RjcF9pbmNvbWluZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfdGNwX2luY29taW5nX3NsYWIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX3RjcF9yZWN2X2V4aXQodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX3RjcF9pbmNvbWluZ19zbGFiKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX3NlbmQuYyBiL25ldC9yZHMvdGNwX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjU0NWUwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90Y3Bfc2VuZC5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInRjcC5oIgorCitzdGF0aWMgdm9pZCByZHNfdGNwX2Nvcmsoc3RydWN0IHNvY2tldCAqc29jaywgaW50IHZhbCkKK3sKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCXNvY2stPm9wcy0+c2V0c29ja29wdChzb2NrLCBTT0xfVENQLCBUQ1BfQ09SSywgKGNoYXIgX191c2VyICopJnZhbCwKKwkJCSAgICAgIHNpemVvZih2YWwpKTsKKwlzZXRfZnMob2xkZnMpOworfQorCit2b2lkIHJkc190Y3BfeG1pdF9wcmVwYXJlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNfdGNwX2NvcmsodGMtPnRfc29jaywgMSk7Cit9CisKK3ZvaWQgcmRzX3RjcF94bWl0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNfdGNwX2NvcmsodGMtPnRfc29jaywgMCk7Cit9CisKKy8qIHRoZSBjb3JlIHNlbmRfc2VtIHNlcmlhbGl6ZXMgdGhpcyB3aXRoIG90aGVyIHhtaXQgYW5kIHNodXRkb3duICovCitpbnQgcmRzX3RjcF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IGt2ZWMgdmVjID0geworICAgICAgICAgICAgICAgIC5pb3ZfYmFzZSA9IGRhdGEsCisgICAgICAgICAgICAgICAgLmlvdl9sZW4gPSBsZW4sCisJfTsKKyAgICAgICAgc3RydWN0IG1zZ2hkciBtc2cgPSB7CisgICAgICAgICAgICAgICAgLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCB8IE1TR19OT1NJR05BTCwKKyAgICAgICAgfTsKKworCXJldHVybiBrZXJuZWxfc2VuZG1zZyhzb2NrLCAmbXNnLCAmdmVjLCAxLCB2ZWMuaW92X2xlbik7Cit9CisKKy8qIHRoZSBjb3JlIHNlbmRfc2VtIHNlcmlhbGl6ZXMgdGhpcyB3aXRoIG90aGVyIHhtaXQgYW5kIHNodXRkb3duICovCitpbnQgcmRzX3RjcF94bWl0X2NvbmdfbWFwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdGF0aWMgc3RydWN0IHJkc19oZWFkZXIgcmRzX3RjcF9tYXBfaGVhZGVyID0geworCQkuaF9mbGFncyA9IFJEU19GTEFHX0NPTkdfQklUTUFQLAorCX07CisJc3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXVuc2lnbmVkIGxvbmcgaTsKKwlpbnQgcmV0OworCWludCBjb3BpZWQgPSAwOworCisJLyogU29tZSBwcm9ibGVtIGNsYWltcyBjcHVfdG9fYmUzMihjb25zdGFudCkgaXNuJ3QgYSBjb25zdGFudC4gKi8KKwlyZHNfdGNwX21hcF9oZWFkZXIuaF9sZW4gPSBjcHVfdG9fYmUzMihSRFNfQ09OR19NQVBfQllURVMpOworCisJaWYgKG9mZnNldCA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJcmV0ID0gcmRzX3RjcF9zZW5kbXNnKHRjLT50X3NvY2ssCisJCQkJICAgICAgKHZvaWQgKikmcmRzX3RjcF9tYXBfaGVhZGVyICsgb2Zmc2V0LAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgLSBvZmZzZXQpOworCQlpZiAocmV0IDw9IDApCisJCQlyZXR1cm4gcmV0OworCQlvZmZzZXQgKz0gcmV0OworCQljb3BpZWQgPSByZXQ7CisJCWlmIChvZmZzZXQgPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlvZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlpID0gb2Zmc2V0IC8gUEFHRV9TSVpFOworCW9mZnNldCA9IG9mZnNldCAlIFBBR0VfU0laRTsKKwlCVUdfT04oaSA+PSBSRFNfQ09OR19NQVBfUEFHRVMpOworCisJZG8geworCQlyZXQgPSB0Yy0+dF9zb2NrLT5vcHMtPnNlbmRwYWdlKHRjLT50X3NvY2ssCisJCQkJCXZpcnRfdG9fcGFnZShtYXAtPm1fcGFnZV9hZGRyc1tpXSksCisJCQkJCW9mZnNldCwgUEFHRV9TSVpFIC0gb2Zmc2V0LAorCQkJCQlNU0dfRE9OVFdBSVQpOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKwkJY29waWVkICs9IHJldDsKKwkJb2Zmc2V0ICs9IHJldDsKKwkJaWYgKG9mZnNldCA9PSBQQUdFX1NJWkUpIHsKKwkJCW9mZnNldCA9IDA7CisJCQlpKys7CisJCX0KKwl9IHdoaWxlIChpIDwgUkRTX0NPTkdfTUFQX1BBR0VTKTsKKworICAgICAgICByZXR1cm4gY29waWVkID8gY29waWVkIDogcmV0OworfQorCisvKiB0aGUgY29yZSBzZW5kX3NlbSBzZXJpYWxpemVzIHRoaXMgd2l0aCBvdGhlciB4bWl0IGFuZCBzaHV0ZG93biAqLworaW50IHJkc190Y3BfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJICAgICAgICAgdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZikKK3sKKwlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJaW50IGRvbmUgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKGhkcl9vZmYgPT0gMCkgeworCQkvKgorCQkgKiBtX2Fja19zZXEgaXMgc2V0IHRvIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGxhc3QgYnl0ZSBvZgorCQkgKiBoZWFkZXIgYW5kIGRhdGEuICBzZWUgcmRzX3RjcF9pc19hY2tlZCgpLgorCQkgKi8KKwkJdGMtPnRfbGFzdF9zZW50X254dCA9IHJkc190Y3Bfc25kX254dCh0Yyk7CisJCXJtLT5tX2Fja19zZXEgPSB0Yy0+dF9sYXN0X3NlbnRfbnh0ICsKKwkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICsKKwkJCQliZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pIC0gMTsKKwkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCXNldF9iaXQoUkRTX01TR19IQVNfQUNLX1NFUSwgJnJtLT5tX2ZsYWdzKTsKKwkJdGMtPnRfbGFzdF9leHBlY3RlZF91bmEgPSBybS0+bV9hY2tfc2VxICsgMTsKKworCQlyZHNkZWJ1Zygicm0gJXAgdGNwIG54dCAldSBhY2tfc2VxICVsbHVcbiIsCisJCQkgcm0sIHJkc190Y3Bfc25kX254dCh0YyksCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylybS0+bV9hY2tfc2VxKTsKKwl9CisKKwlpZiAoaGRyX29mZiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJLyogc2VlIHJkc190Y3Bfd3JpdGVfc3BhY2UoKSAqLworCQlzZXRfYml0KFNPQ0tfTk9TUEFDRSwgJnRjLT50X3NvY2stPnNrLT5za19zb2NrZXQtPmZsYWdzKTsKKworCQlyZXQgPSByZHNfdGNwX3NlbmRtc2codGMtPnRfc29jaywKKwkJCQkgICAgICAodm9pZCAqKSZybS0+bV9pbmMuaV9oZHIgKyBoZHJfb2ZmLAorCQkJCSAgICAgIHNpemVvZihybS0+bV9pbmMuaV9oZHIpIC0gaGRyX29mZik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWRvbmUgKz0gcmV0OworCQlpZiAoaGRyX29mZiArIGRvbmUgIT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSkKKwkJCWdvdG8gb3V0OworCX0KKworCXdoaWxlIChzZyA8IHJtLT5tX25lbnRzKSB7CisJCXJldCA9IHRjLT50X3NvY2stPm9wcy0+c2VuZHBhZ2UodGMtPnRfc29jaywKKwkJCQkJCXNnX3BhZ2UoJnJtLT5tX3NnW3NnXSksCisJCQkJCQlybS0+bV9zZ1tzZ10ub2Zmc2V0ICsgb2ZmLAorCQkJCQkJcm0tPm1fc2dbc2ddLmxlbmd0aCAtIG9mZiwKKwkJCQkJCU1TR19ET05UV0FJVHxNU0dfTk9TSUdOQUwpOworCQlyZHNkZWJ1ZygidGNwIHNlbmRwYWdlICVwOiV1OiV1IHJldCAlZFxuIiwgKHZvaWQgKilzZ19wYWdlKCZybS0+bV9zZ1tzZ10pLAorCQkJIHJtLT5tX3NnW3NnXS5vZmZzZXQgKyBvZmYsIHJtLT5tX3NnW3NnXS5sZW5ndGggLSBvZmYsCisJCQkgcmV0KTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisKKwkJb2ZmICs9IHJldDsKKwkJZG9uZSArPSByZXQ7CisJCWlmIChvZmYgPT0gcm0tPm1fc2dbc2ddLmxlbmd0aCkgeworCQkJb2ZmID0gMDsKKwkJCXNnKys7CisJCX0KKwl9CisKK291dDoKKwlpZiAocmV0IDw9IDApIHsKKwkJLyogd3JpdGVfc3BhY2Ugd2lsbCBoaXQgYWZ0ZXIgRUFHQUlOLCBhbGwgZWxzZSBmYXRhbCAqLworCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJCXJkc190Y3Bfc3RhdHNfaW5jKHNfdGNwX3NuZGJ1Zl9mdWxsKTsKKwkJCXJldCA9IDA7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvdGNwOiBzZW5kIHRvICV1LiV1LiV1LiV1ICIKKwkJCSAgICAgICAicmV0dXJuZWQgJWQsIGRpc2Nvbm5lY3RpbmcgYW5kIHJlY29ubmVjdGluZ1xuIiwKKwkJCSAgICAgICBOSVBRVUFEKGNvbm4tPmNfZmFkZHIpLCByZXQpOworCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJfQorCX0KKwlpZiAoZG9uZSA9PSAwKQorCQlkb25lID0gcmV0OworCXJldHVybiBkb25lOworfQorCisvKgorICogcm0tPm1fYWNrX3NlcSBpcyBzZXQgdG8gdGhlIHRjcCBzZXF1ZW5jZSBudW1iZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUKKyAqIGxhc3QgYnl0ZSBvZiB0aGUgbWVzc2FnZSwgaW5jbHVkaW5nIHRoZSBoZWFkZXIuICBUaGlzIG1lYW5zIHRoYXQgdGhlCisgKiBlbnRpcmUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBpZiBybS0+bV9hY2tfc2VxIGlzICJiZWZvcmUiIHRoZSBuZXh0CisgKiB1bmFja2VkIGJ5dGUgb2YgdGhlIFRDUCBzZXF1ZW5jZSBzcGFjZS4gIFdlIGhhdmUgdG8gZG8gdmVyeSBjYXJlZnVsCisgKiB3cmFwcGluZyAzMmJpdCBjb21wYXJpc29ucyBoZXJlLgorICovCitzdGF0aWMgaW50IHJkc190Y3BfaXNfYWNrZWQoc3RydWN0IHJkc19tZXNzYWdlICpybSwgdWludDY0X3QgYWNrKQoreworCWlmICghdGVzdF9iaXQoUkRTX01TR19IQVNfQUNLX1NFUSwgJnJtLT5tX2ZsYWdzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChfX3MzMikoKHUzMilybS0+bV9hY2tfc2VxIC0gKHUzMilhY2spIDwgMDsKK30KKwordm9pZCByZHNfdGNwX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKK3sKKwl2b2lkICgqd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICpzayk7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjOworCisJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisJY29ubiA9IHNrLT5za191c2VyX2RhdGE7CisJaWYgKGNvbm4gPT0gTlVMTCkgeworCQl3cml0ZV9zcGFjZSA9IHNrLT5za193cml0ZV9zcGFjZTsKKwkJZ290byBvdXQ7CisJfQorCisJdGMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXJkc2RlYnVnKCJ3cml0ZV9zcGFjZSBmb3IgdGMgJXBcbiIsIHRjKTsKKwl3cml0ZV9zcGFjZSA9IHRjLT50X29yaWdfd3JpdGVfc3BhY2U7CisJcmRzX3RjcF9zdGF0c19pbmMoc190Y3Bfd3JpdGVfc3BhY2VfY2FsbHMpOworCisJcmRzZGVidWcoInRjcCB1bmEgJXVcbiIsIHJkc190Y3Bfc25kX3VuYSh0YykpOworCXRjLT50X2xhc3Rfc2Vlbl91bmEgPSByZHNfdGNwX3NuZF91bmEodGMpOworCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgcmRzX3RjcF9zbmRfdW5hKHRjKSwgcmRzX3RjcF9pc19hY2tlZCk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworb3V0OgorCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CisKKwkvKgorCSAqIHdyaXRlX3NwYWNlIGlzIG9ubHkgY2FsbGVkIHdoZW4gZGF0YSBsZWF2ZXMgdGNwJ3Mgc2VuZCBxdWV1ZSBpZgorCSAqIFNPQ0tfTk9TUEFDRSBpcyBzZXQuICBXZSBzZXQgU09DS19OT1NQQUNFIGV2ZXJ5IHRpbWUgd2UgcHV0CisJICogZGF0YSBpbiB0Y3AncyBzZW5kIHF1ZXVlIGJlY2F1c2Ugd2UgdXNlIHdyaXRlX3NwYWNlIHRvIHBhcnNlIHRoZQorCSAqIHNlcXVlbmNlIG51bWJlcnMgYW5kIG5vdGljZSB0aGF0IHJkcyBtZXNzYWdlcyBoYXZlIGJlZW4gZnVsbHkKKwkgKiByZWNlaXZlZC4KKwkgKgorCSAqIHRjcCdzIHdyaXRlX3NwYWNlIGNsZWFycyBTT0NLX05PU1BBQ0UgaWYgdGhlIHNlbmQgcXVldWUgaGFzIG1vcmUKKwkgKiB0aGFuIGEgY2VydGFpbiBhbW91bnQgb2Ygc3BhY2UuIFNvIHdlIG5lZWQgdG8gc2V0IGl0IGFnYWluICphZnRlcioKKwkgKiB3ZSBjYWxsIHRjcCdzIHdyaXRlX3NwYWNlIG9yIGVsc2Ugd2UgbWlnaHQgb25seSBnZXQgY2FsbGVkIG9uIHRoZQorCSAqIGZpcnN0IG9mIGEgc2VyaWVzIG9mIGluY29taW5nIHRjcCBhY2tzLgorCSAqLworCXdyaXRlX3NwYWNlKHNrKTsKKworCWlmIChzay0+c2tfc29ja2V0KQorCQlzZXRfYml0KFNPQ0tfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwX3N0YXRzLmMgYi9uZXQvcmRzL3RjcF9zdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODk4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RjcF9zdGF0cy5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAidGNwLmgiCisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfdGNwX3N0YXRpc3RpY3MsIHJkc190Y3Bfc3RhdHMpCisJX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdGF0aWMgY29uc3QgY2hhciBjb25zdCAqcmRzX3RjcF9zdGF0X25hbWVzW10gPSB7CisJInRjcF9kYXRhX3JlYWR5X2NhbGxzIiwKKwkidGNwX3dyaXRlX3NwYWNlX2NhbGxzIiwKKwkidGNwX3NuZGJ1Zl9mdWxsIiwKKwkidGNwX2Nvbm5lY3RfcmFjZWQiLAorCSJ0Y3BfbGlzdGVuX2Nsb3NlZF9zdGFsZSIsCit9OworCit1bnNpZ25lZCBpbnQgcmRzX3RjcF9zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGF2YWlsKQoreworCXN0cnVjdCByZHNfdGNwX3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKworCWlmIChhdmFpbCA8IEFSUkFZX1NJWkUocmRzX3RjcF9zdGF0X25hbWVzKSkKKwkJZ290byBvdXQ7CisKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlzcmMgPSAodWludDY0X3QgKikmKHBlcl9jcHUocmRzX3RjcF9zdGF0cywgY3B1KSk7CisJCXN1bSA9ICh1aW50NjRfdCAqKSZzdGF0czsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdGF0cykgLyBzaXplb2YodWludDY0X3QpOyBpKyspCisJCQkqKHN1bSsrKSArPSAqKHNyYysrKTsKKwl9CisKKwlyZHNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsICh1aW50NjRfdCAqKSZzdGF0cywgcmRzX3RjcF9zdGF0X25hbWVzLAorCQkJICAgIEFSUkFZX1NJWkUocmRzX3RjcF9zdGF0X25hbWVzKSk7CitvdXQ6CisJcmV0dXJuIEFSUkFZX1NJWkUocmRzX3RjcF9zdGF0X25hbWVzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvdGhyZWFkcy5jIGIvbmV0L3Jkcy90aHJlYWRzLmMKaW5kZXggODI4YTFiZi4uZGQ3ZTBjYSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90aHJlYWRzLmMKKysrIGIvbmV0L3Jkcy90aHJlYWRzLmMKQEAgLTY4LDYgKzY4LDcgQEAKICAqCShUQ1AsIElCL1JETUEpIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzeW5jaHJvbmlzYXRpb24uCiAgKi8KIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfd3E7CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfd3EpOwogCiB2b2lkIHJkc19jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKIHsKQEAgLTg5LDYgKzkwLDcgQEAKIAlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOwogCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubmVjdF9jb21wbGV0ZSk7CiAKIC8qCiAgKiBUaGlzIHJhbmRvbSBleHBvbmVudGlhbCBiYWNrb2ZmIGlzIHJlbGllZCBvbiB0byBldmVudHVhbGx5IHJlc29sdmUgcmFjaW5nCmRpZmYgLS1naXQgYS9uZXQvcmRzL3RyYW5zcG9ydC5jIGIvbmV0L3Jkcy90cmFuc3BvcnQuYwppbmRleCA3NjdkYTYxLi43ZTEwNjc5IDEwMDY0NAotLS0gYS9uZXQvcmRzL3RyYW5zcG9ydC5jCisrKyBiL25ldC9yZHMvdHJhbnNwb3J0LmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJyZHMuaCIKICNpbmNsdWRlICJsb29wLmgiCiAKLXN0YXRpYyBMSVNUX0hFQUQocmRzX3RyYW5zcG9ydHMpOworc3RhdGljIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuc3BvcnRzW1JEU19UUkFOU19DT1VOVF07CiBzdGF0aWMgREVDTEFSRV9SV1NFTShyZHNfdHJhbnNfc2VtKTsKIAogaW50IHJkc190cmFuc19yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCkBAIC00NiwzNiArNDYsNDQgQEAKIAogCWRvd25fd3JpdGUoJnJkc190cmFuc19zZW0pOwogCi0JbGlzdF9hZGRfdGFpbCgmdHJhbnMtPnRfaXRlbSwgJnJkc190cmFuc3BvcnRzKTsKLQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIFJEUy8lcyB0cmFuc3BvcnRcbiIsIHRyYW5zLT50X25hbWUpOworCWlmICh0cmFuc3BvcnRzW3RyYW5zLT50X3R5cGVdKQorCQlwcmludGsoS0VSTl9FUlIgIlJEUyBUcmFuc3BvcnQgdHlwZSAlZCBhbHJlYWR5IHJlZ2lzdGVyZWRcbiIsCisJCQl0cmFucy0+dF90eXBlKTsKKwllbHNlIHsKKwkJdHJhbnNwb3J0c1t0cmFucy0+dF90eXBlXSA9IHRyYW5zOworCQlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIFJEUy8lcyB0cmFuc3BvcnRcbiIsIHRyYW5zLT50X25hbWUpOworCX0KIAogCXVwX3dyaXRlKCZyZHNfdHJhbnNfc2VtKTsKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocmRzX3RyYW5zX3JlZ2lzdGVyKTsKIAogdm9pZCByZHNfdHJhbnNfdW5yZWdpc3RlcihzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMpCiB7CiAJZG93bl93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CiAKLQlsaXN0X2RlbF9pbml0KCZ0cmFucy0+dF9pdGVtKTsKKwl0cmFuc3BvcnRzW3RyYW5zLT50X3R5cGVdID0gTlVMTDsKIAlwcmludGsoS0VSTl9JTkZPICJVbnJlZ2lzdGVyZWQgUkRTLyVzIHRyYW5zcG9ydFxuIiwgdHJhbnMtPnRfbmFtZSk7CiAKIAl1cF93cml0ZSgmcmRzX3RyYW5zX3NlbSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZHNfdHJhbnNfdW5yZWdpc3Rlcik7CiAKIHN0cnVjdCByZHNfdHJhbnNwb3J0ICpyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChfX2JlMzIgYWRkcikKIHsKLQlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CiAJc3RydWN0IHJkc190cmFuc3BvcnQgKnJldCA9IE5VTEw7CisJaW50IGk7CiAKIAlpZiAoSU5fTE9PUEJBQ0sobnRvaGwoYWRkcikpKQogCQlyZXR1cm4gJnJkc19sb29wX3RyYW5zcG9ydDsKIAogCWRvd25fcmVhZCgmcmRzX3RyYW5zX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFucywgJnJkc190cmFuc3BvcnRzLCB0X2l0ZW0pIHsKLQkJaWYgKHRyYW5zLT5sYWRkcl9jaGVjayhhZGRyKSA9PSAwKSB7Ci0JCQlyZXQgPSB0cmFuczsKKwlmb3IgKGkgPSAwOyBpIDwgUkRTX1RSQU5TX0NPVU5UOyBpKyspCisJeworCQlpZiAodHJhbnNwb3J0c1tpXSAmJiAodHJhbnNwb3J0c1tpXS0+bGFkZHJfY2hlY2soYWRkcikgPT0gMCkpIHsKKwkJCXJldCA9IHRyYW5zcG9ydHNbaV07CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTk3LDEyICsxMDUsMTUgQEAKIAlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CiAJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKIAl1bnNpZ25lZCBpbnQgcGFydDsKKwlpbnQgaTsKIAogCXJkc19pbmZvX2l0ZXJfdW5tYXAoaXRlcik7CiAJZG93bl9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZyZHNfdHJhbnNwb3J0cywgdF9pdGVtKSB7Ci0JCWlmICh0cmFucy0+c3RhdHNfaW5mb19jb3B5ID09IE5VTEwpCisJZm9yIChpID0gMDsgaSA8IFJEU19UUkFOU19DT1VOVDsgaSsrKQorCXsKKwkJdHJhbnMgPSB0cmFuc3BvcnRzW2ldOworCQlpZiAoIXRyYW5zIHx8ICF0cmFucy0+c3RhdHNfaW5mb19jb3B5KQogCQkJY29udGludWU7CiAKIAkJcGFydCA9IHRyYW5zLT5zdGF0c19pbmZvX2NvcHkoaXRlciwgYXZhaWwpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jma2lsbC9jb3JlLmMgYi9uZXQvcmZraWxsL2NvcmUuYwppbmRleCAyZmM0YTE3Li5kYmVhZjI5IDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL2NvcmUuYworKysgYi9uZXQvcmZraWxsL2NvcmUuYwpAQCAtNTg5LDExICs1ODksMTMgQEAKIAkJcmV0dXJuICJ3aW1heCI7CiAJY2FzZSBSRktJTExfVFlQRV9XV0FOOgogCQlyZXR1cm4gInd3YW4iOworCWNhc2UgUkZLSUxMX1RZUEVfR1BTOgorCQlyZXR1cm4gImdwcyI7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQogCi0JQlVJTERfQlVHX09OKE5VTV9SRktJTExfVFlQRVMgIT0gUkZLSUxMX1RZUEVfV1dBTiArIDEpOworCUJVSUxEX0JVR19PTihOVU1fUkZLSUxMX1RZUEVTICE9IFJGS0lMTF9UWVBFX0dQUyArIDEpOwogfQogCiBzdGF0aWMgc3NpemVfdCByZmtpbGxfdHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTEwOTEsMTAgKzEwOTMsMTYgQEAKIAlzdHJ1Y3QgcmZraWxsX2V2ZW50IGV2OwogCiAJLyogd2UgZG9uJ3QgbmVlZCB0aGUgJ2hhcmQnIHZhcmlhYmxlIGJ1dCBhY2NlcHQgaXQgKi8KLQlpZiAoY291bnQgPCBzaXplb2YoZXYpIC0gMSkKKwlpZiAoY291bnQgPCBSRktJTExfRVZFTlRfU0laRV9WMSAtIDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZldiwgYnVmLCBzaXplb2YoZXYpIC0gMSkpCisJLyoKKwkgKiBDb3B5IGFzIG11Y2ggZGF0YSBhcyB3ZSBjYW4gYWNjZXB0IGludG8gb3VyICdldicgYnVmZmVyLAorCSAqIGJ1dCB0ZWxsIHVzZXJzcGFjZSBob3cgbXVjaCB3ZSd2ZSBjb3BpZWQgc28gaXQgY2FuIGRldGVybWluZQorCSAqIG91ciBBUEkgdmVyc2lvbiBldmVuIGluIGEgd3JpdGUoKSBjYWxsLCBpZiBpdCBjYXJlcy4KKwkgKi8KKwljb3VudCA9IG1pbihjb3VudCwgc2l6ZW9mKGV2KSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZldiwgYnVmLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGV2Lm9wICE9IFJGS0lMTF9PUF9DSEFOR0UgJiYgZXYub3AgIT0gUkZLSUxMX09QX0NIQU5HRV9BTEwpCmRpZmYgLS1naXQgYS9uZXQvcm9zZS9yb3NlX2Rldi5jIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwppbmRleCAzODlkNmUwLi40MjRiODkzIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX2Rldi5jCisrKyBiL25ldC9yb3NlL3Jvc2VfZGV2LmMKQEAgLTEzMSw3ICsxMzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJvc2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHJvc2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCkBAIC0xNDEsNyArMTQxLDcgQEAKIAl9CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXN0YXRzLT50eF9lcnJvcnMrKzsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgcm9zZV9oZWFkZXJfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWFjay5jIGIvbmV0L3J4cnBjL2FyLWFjay5jCmluZGV4IDNhYzE2NzIuLmM5ZjFmMGEgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1hY2suYworKysgYi9uZXQvcnhycGMvYXItYWNrLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIHJ4cnBjX2Fja19kZWZlciA9IDE7CiAKLXN0YXRpYyBjb25zdCBjaGFyICpyeHJwY19hY2tzW10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcnhycGNfYWNrc1tdID0gewogCSItLS0iLCAiUkVRIiwgIkRVUCIsICJPT1MiLCAiV0lOIiwgIk1FTSIsICJQTkciLCAiUE5SIiwgIkRMWSIsICJJREwiLAogCSItPy0iCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL01ha2VmaWxlIGIvbmV0L3NjaGVkL01ha2VmaWxlCmluZGV4IDU0ZDk1MGMuLmYxNGU3MWIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9NYWtlZmlsZQorKysgYi9uZXQvc2NoZWQvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVHJhZmZpYyBDb250cm9sIFVuaXQuCiAjCiAKLW9iai15CTo9IHNjaF9nZW5lcmljLm8KK29iai15CTo9IHNjaF9nZW5lcmljLm8gc2NoX21xLm8KIAogb2JqLSQoQ09ORklHX05FVF9TQ0hFRCkJCSs9IHNjaF9hcGkubyBzY2hfYmxhY2tob2xlLm8KIG9iai0kKENPTkZJR19ORVRfQ0xTKQkJKz0gY2xzX2FwaS5vCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2FwaS5jIGIvbmV0L3NjaGVkL2FjdF9hcGkuYwppbmRleCA5ZDAzY2MzLi4yZGZiM2U3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2FwaS5jCisrKyBiL25ldC9zY2hlZC9hY3RfYXBpLmMKQEAgLTEwMTEsNyArMTAxMSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmxhdHRyICoKLWZpbmRfZHVtcF9raW5kKHN0cnVjdCBubG1zZ2hkciAqbikKK2ZpbmRfZHVtcF9raW5kKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbikKIHsKIAlzdHJ1Y3QgbmxhdHRyICp0YjEsICp0YjJbVENBX0FDVF9NQVgrMV07CiAJc3RydWN0IG5sYXR0ciAqdGJbVENBX0FDVF9NQVhfUFJJTyArIDFdOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19hcGkuYyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKaW5kZXggMDljZGNkZi4uNmE1MzY5NCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc19hcGkuYworKysgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCkBAIC0xNjgsOCArMTY4LDcgQEAKIAogCS8qIEZpbmQgcWRpc2MgKi8KIAlpZiAoIXBhcmVudCkgewotCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7Ci0JCXEgPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nOworCQlxID0gZGV2LT5xZGlzYzsKIAkJcGFyZW50ID0gcS0+aGFuZGxlOwogCX0gZWxzZSB7CiAJCXEgPSBxZGlzY19sb29rdXAoZGV2LCBUQ19IX01BSih0LT50Y21fcGFyZW50KSk7CkBAIC0xODEsNiArMTgwLDkgQEAKIAlpZiAoKGNvcHMgPSBxLT5vcHMtPmNsX29wcykgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoY29wcy0+dGNmX2NoYWluID09IE5VTEwpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCS8qIERvIHdlIHNlYXJjaCBmb3IgZmlsdGVyLCBhdHRhY2hlZCB0byBjbGFzcz8gKi8KIAlpZiAoVENfSF9NSU4ocGFyZW50KSkgewogCQljbCA9IGNvcHMtPmdldChxLCBwYXJlbnQpOwpAQCAtNDA1LDcgKzQwNyw2IEBACiBzdGF0aWMgaW50IHRjX2R1bXBfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlOwogCWludCB0OwogCWludCBzX3Q7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTQyNCwxNSArNDI1LDE2IEBACiAJaWYgKChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgdGNtLT50Y21faWZpbmRleCkpID09IE5VTEwpCiAJCXJldHVybiBza2ItPmxlbjsKIAotCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKIAlpZiAoIXRjbS0+dGNtX3BhcmVudCkKLQkJcSA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7CisJCXEgPSBkZXYtPnFkaXNjOwogCWVsc2UKIAkJcSA9IHFkaXNjX2xvb2t1cChkZXYsIFRDX0hfTUFKKHRjbS0+dGNtX3BhcmVudCkpOwogCWlmICghcSkKIAkJZ290byBvdXQ7CiAJaWYgKChjb3BzID0gcS0+b3BzLT5jbF9vcHMpID09IE5VTEwpCiAJCWdvdG8gZXJyb3V0OworCWlmIChjb3BzLT50Y2ZfY2hhaW4gPT0gTlVMTCkKKwkJZ290byBlcnJvdXQ7CiAJaWYgKFRDX0hfTUlOKHRjbS0+dGNtX3BhcmVudCkpIHsKIAkJY2wgPSBjb3BzLT5nZXQocSwgdGNtLT50Y21fcGFyZW50KTsKIAkJaWYgKGNsID09IDApCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCBmZGI2OTRlLi42OTJkOWE0IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogc3RhdGljIHZvaWQgcWRpc2NfbGlzdF9hZGQoc3RydWN0IFFkaXNjICpxKQogewogCWlmICgocS0+cGFyZW50ICE9IFRDX0hfUk9PVCkgJiYgIShxLT5mbGFncyAmIFRDUV9GX0lOR1JFU1MpKQotCQlsaXN0X2FkZF90YWlsKCZxLT5saXN0LCAmcWRpc2Nfcm9vdF9zbGVlcGluZyhxKS0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJnEtPmxpc3QsICZxZGlzY19kZXYocSktPnFkaXNjLT5saXN0KTsKIH0KIAogdm9pZCBxZGlzY19saXN0X2RlbChzdHJ1Y3QgUWRpc2MgKnEpCkBAIC0yMTksMTcgKzIxOSwxMSBAQAogCiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaGFuZGxlKQogewotCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBRZGlzYyAqcTsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7Ci0JCXN0cnVjdCBRZGlzYyAqdHhxX3Jvb3QgPSB0eHEtPnFkaXNjX3NsZWVwaW5nOwotCi0JCXEgPSBxZGlzY19tYXRjaF9mcm9tX3Jvb3QodHhxX3Jvb3QsIGhhbmRsZSk7Ci0JCWlmIChxKQotCQkJZ290byBvdXQ7Ci0JfQorCXEgPSBxZGlzY19tYXRjaF9mcm9tX3Jvb3QoZGV2LT5xZGlzYywgaGFuZGxlKTsKKwlpZiAocSkKKwkJZ290byBvdXQ7CiAKIAlxID0gcWRpc2NfbWF0Y2hfZnJvbV9yb290KGRldi0+cnhfcXVldWUucWRpc2Nfc2xlZXBpbmcsIGhhbmRsZSk7CiBvdXQ6CkBAIC02MTYsMzIgKzYxMCw2IEBACiAJcmV0dXJuIGk+MCA/IGF1dG9oYW5kbGUgOiAwOwogfQogCi0vKiBBdHRhY2ggdG9wbGV2ZWwgcWRpc2MgdG8gZGV2aWNlIHF1ZXVlLiAqLwotCi1zdGF0aWMgc3RydWN0IFFkaXNjICpkZXZfZ3JhZnRfcWRpc2Moc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAotCQkJCSAgICAgc3RydWN0IFFkaXNjICpxZGlzYykKLXsKLQlzdHJ1Y3QgUWRpc2MgKm9xZGlzYyA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7Ci0Jc3BpbmxvY2tfdCAqcm9vdF9sb2NrOwotCi0Jcm9vdF9sb2NrID0gcWRpc2NfbG9jayhvcWRpc2MpOwotCXNwaW5fbG9ja19iaChyb290X2xvY2spOwotCi0JLyogUHJ1bmUgb2xkIHNjaGVkdWxlciAqLwotCWlmIChvcWRpc2MgJiYgYXRvbWljX3JlYWQoJm9xZGlzYy0+cmVmY250KSA8PSAxKQotCQlxZGlzY19yZXNldChvcWRpc2MpOwotCi0JLyogLi4uIGFuZCBncmFmdCBuZXcgb25lICovCi0JaWYgKHFkaXNjID09IE5VTEwpCi0JCXFkaXNjID0gJm5vb3BfcWRpc2M7Ci0JZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZyA9IHFkaXNjOwotCXJjdV9hc3NpZ25fcG9pbnRlcihkZXZfcXVldWUtPnFkaXNjLCAmbm9vcF9xZGlzYyk7Ci0KLQlzcGluX3VubG9ja19iaChyb290X2xvY2spOwotCi0JcmV0dXJuIG9xZGlzYzsKLX0KLQogdm9pZCBxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGludCBuKQogewogCWNvbnN0IHN0cnVjdCBRZGlzY19jbGFzc19vcHMgKmNvcHM7CkBAIC03MTAsNiArNjc4LDExIEBACiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQogCQkJZGV2X2RlYWN0aXZhdGUoZGV2KTsKIAorCQlpZiAobmV3ICYmIG5ldy0+b3BzLT5hdHRhY2gpIHsKKwkJCW5ldy0+b3BzLT5hdHRhY2gobmV3KTsKKwkJCW51bV9xID0gMDsKKwkJfQorCiAJCWZvciAoaSA9IDA7IGkgPCBudW1fcTsgaSsrKSB7CiAJCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSAmZGV2LT5yeF9xdWV1ZTsKIApAQCAtNzIwLDIyICs2OTMsMjcgQEAKIAkJCWlmIChuZXcgJiYgaSA+IDApCiAJCQkJYXRvbWljX2luYygmbmV3LT5yZWZjbnQpOwogCi0JCQlub3RpZnlfYW5kX2Rlc3Ryb3koc2tiLCBuLCBjbGFzc2lkLCBvbGQsIG5ldyk7CisJCQlxZGlzY19kZXN0cm95KG9sZCk7CiAJCX0KIAorCQlub3RpZnlfYW5kX2Rlc3Ryb3koc2tiLCBuLCBjbGFzc2lkLCBkZXYtPnFkaXNjLCBuZXcpOworCQlpZiAobmV3ICYmICFuZXctPm9wcy0+YXR0YWNoKQorCQkJYXRvbWljX2luYygmbmV3LT5yZWZjbnQpOworCQlkZXYtPnFkaXNjID0gbmV3ID8gOiAmbm9vcF9xZGlzYzsKKwogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkKIAkJCWRldl9hY3RpdmF0ZShkZXYpOwogCX0gZWxzZSB7CiAJCWNvbnN0IHN0cnVjdCBRZGlzY19jbGFzc19vcHMgKmNvcHMgPSBwYXJlbnQtPm9wcy0+Y2xfb3BzOwogCi0JCWVyciA9IC1FSU5WQUw7Ci0KLQkJaWYgKGNvcHMpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWlmIChjb3BzICYmIGNvcHMtPmdyYWZ0KSB7CiAJCQl1bnNpZ25lZCBsb25nIGNsID0gY29wcy0+Z2V0KHBhcmVudCwgY2xhc3NpZCk7CiAJCQlpZiAoY2wpIHsKIAkJCQllcnIgPSBjb3BzLT5ncmFmdChwYXJlbnQsIGNsLCBuZXcsICZvbGQpOwogCQkJCWNvcHMtPnB1dChwYXJlbnQsIGNsKTsKLQkJCX0KKwkJCX0gZWxzZQorCQkJCWVyciA9IC1FTk9FTlQ7CiAJCX0KIAkJaWYgKCFlcnIpCiAJCQlub3RpZnlfYW5kX2Rlc3Ryb3koc2tiLCBuLCBjbGFzc2lkLCBvbGQsIG5ldyk7CkBAIC03NTUsNyArNzMzLDggQEAKIAogc3RhdGljIHN0cnVjdCBRZGlzYyAqCiBxZGlzY19jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlLAotCSAgICAgdTMyIHBhcmVudCwgdTMyIGhhbmRsZSwgc3RydWN0IG5sYXR0ciAqKnRjYSwgaW50ICplcnJwKQorCSAgICAgc3RydWN0IFFkaXNjICpwLCB1MzIgcGFyZW50LCB1MzIgaGFuZGxlLAorCSAgICAgc3RydWN0IG5sYXR0ciAqKnRjYSwgaW50ICplcnJwKQogewogCWludCBlcnI7CiAJc3RydWN0IG5sYXR0ciAqa2luZCA9IHRjYVtUQ0FfS0lORF07CkBAIC04MzIsMjQgKzgxMSwyMSBAQAogCQlpZiAodGNhW1RDQV9SQVRFXSkgewogCQkJc3BpbmxvY2tfdCAqcm9vdF9sb2NrOwogCisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJCWlmIChzY2gtPmZsYWdzICYgVENRX0ZfTVFST09UKQorCQkJCWdvdG8gZXJyX291dDQ7CisKIAkJCWlmICgoc2NoLT5wYXJlbnQgIT0gVENfSF9ST09UKSAmJgotCQkJICAgICEoc2NoLT5mbGFncyAmIFRDUV9GX0lOR1JFU1MpKQorCQkJICAgICEoc2NoLT5mbGFncyAmIFRDUV9GX0lOR1JFU1MpICYmCisJCQkgICAgKCFwIHx8ICEocC0+ZmxhZ3MgJiBUQ1FfRl9NUVJPT1QpKSkKIAkJCQlyb290X2xvY2sgPSBxZGlzY19yb290X3NsZWVwaW5nX2xvY2soc2NoKTsKIAkJCWVsc2UKIAkJCQlyb290X2xvY2sgPSBxZGlzY19sb2NrKHNjaCk7CiAKIAkJCWVyciA9IGdlbl9uZXdfZXN0aW1hdG9yKCZzY2gtPmJzdGF0cywgJnNjaC0+cmF0ZV9lc3QsCiAJCQkJCQlyb290X2xvY2ssIHRjYVtUQ0FfUkFURV0pOwotCQkJaWYgKGVycikgewotCQkJCS8qCi0JCQkJICogQW55IGJyb2tlbiBxZGlzY3MgdGhhdCB3b3VsZCByZXF1aXJlCi0JCQkJICogYSBvcHMtPnJlc2V0KCkgaGVyZT8gVGhlIHFkaXNjIHdhcyBuZXZlcgotCQkJCSAqIGluIGFjdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgotCQkJCSAqLwotCQkJCWlmIChvcHMtPmRlc3Ryb3kpCi0JCQkJCW9wcy0+ZGVzdHJveShzY2gpOwotCQkJCWdvdG8gZXJyX291dDM7Ci0JCQl9CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyX291dDQ7CiAJCX0KIAogCQlxZGlzY19saXN0X2FkZChzY2gpOwpAQCAtODY1LDYgKzg0MSwxNSBAQAogZXJyX291dDoKIAkqZXJycCA9IGVycjsKIAlyZXR1cm4gTlVMTDsKKworZXJyX291dDQ6CisJLyoKKwkgKiBBbnkgYnJva2VuIHFkaXNjcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBvcHMtPnJlc2V0KCkgaGVyZT8KKwkgKiBUaGUgcWRpc2Mgd2FzIG5ldmVyIGluIGFjdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LgorCSAqLworCWlmIChvcHMtPmRlc3Ryb3kpCisJCW9wcy0+ZGVzdHJveShzY2gpOworCWdvdG8gZXJyX291dDM7CiB9CiAKIHN0YXRpYyBpbnQgcWRpc2NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICoqdGNhKQpAQCAtODg5LDEzICs4NzQsMTYgQEAKIAlxZGlzY19wdXRfc3RhYihzY2gtPnN0YWIpOwogCXNjaC0+c3RhYiA9IHN0YWI7CiAKLQlpZiAodGNhW1RDQV9SQVRFXSkKKwlpZiAodGNhW1RDQV9SQVRFXSkgewogCQkvKiBOQjogaWdub3JlcyBlcnJvcnMgZnJvbSByZXBsYWNlX2VzdGltYXRvcgogCQkgICBiZWNhdXNlIGNoYW5nZSBjYW4ndCBiZSB1bmRvbmUuICovCisJCWlmIChzY2gtPmZsYWdzICYgVENRX0ZfTVFST09UKQorCQkJZ290byBvdXQ7CiAJCWdlbl9yZXBsYWNlX2VzdGltYXRvcigmc2NoLT5ic3RhdHMsICZzY2gtPnJhdGVfZXN0LAogCQkJCQkgICAgcWRpc2Nfcm9vdF9zbGVlcGluZ19sb2NrKHNjaCksCiAJCQkJCSAgICB0Y2FbVENBX1JBVEVdKTsKLQorCX0KK291dDoKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTc0LDkgKzk2Miw3IEBACiAJCQkJcSA9IGRldi0+cnhfcXVldWUucWRpc2Nfc2xlZXBpbmc7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWU7Ci0JCQlkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7Ci0JCQlxID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZzsKKwkJCXEgPSBkZXYtPnFkaXNjOwogCQl9CiAJCWlmICghcSkKIAkJCXJldHVybiAtRU5PRU5UOwpAQCAtMTA0NCw5ICsxMDMwLDcgQEAKIAkJCQlxID0gZGV2LT5yeF9xdWV1ZS5xZGlzY19zbGVlcGluZzsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZTsKLQkJCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQkJCXEgPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nOworCQkJcSA9IGRldi0+cWRpc2M7CiAJCX0KIAogCQkvKiBJdCBtYXkgYmUgZGVmYXVsdCBxZGlzYywgaWdub3JlIGl0ICovCkBAIC0xMTIzLDEzICsxMTA3LDE5IEBACiAJaWYgKCEobi0+bmxtc2dfZmxhZ3MmTkxNX0ZfQ1JFQVRFKSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKGNsaWQgPT0gVENfSF9JTkdSRVNTKQotCQlxID0gcWRpc2NfY3JlYXRlKGRldiwgJmRldi0+cnhfcXVldWUsCisJCXEgPSBxZGlzY19jcmVhdGUoZGV2LCAmZGV2LT5yeF9xdWV1ZSwgcCwKIAkJCQkgdGNtLT50Y21fcGFyZW50LCB0Y20tPnRjbV9wYXJlbnQsCiAJCQkJIHRjYSwgJmVycik7Ci0JZWxzZQotCQlxID0gcWRpc2NfY3JlYXRlKGRldiwgbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApLAorCWVsc2UgeworCQl1bnNpZ25lZCBpbnQgbnR4ID0gMDsKKworCQlpZiAocCAmJiBwLT5vcHMtPmNsX29wcyAmJiBwLT5vcHMtPmNsX29wcy0+c2VsZWN0X3F1ZXVlKQorCQkJbnR4ID0gcC0+b3BzLT5jbF9vcHMtPnNlbGVjdF9xdWV1ZShwLCB0Y20pOworCisJCXEgPSBxZGlzY19jcmVhdGUoZGV2LCBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KSwgcCwKIAkJCQkgdGNtLT50Y21fcGFyZW50LCB0Y20tPnRjbV9oYW5kbGUsCiAJCQkJIHRjYSwgJmVycik7CisJfQogCWlmIChxID09IE5VTEwpIHsKIAkJaWYgKGVyciA9PSAtRUFHQUlOKQogCQkJZ290byByZXBsYXk7CkBAIC0xMjkxLDggKzEyODEsNyBAQAogCQkJc19xX2lkeCA9IDA7CiAJCXFfaWR4ID0gMDsKIAotCQlkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCk7Ci0JCWlmICh0Y19kdW1wX3FkaXNjX3Jvb3QoZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZywgc2tiLCBjYiwgJnFfaWR4LCBzX3FfaWR4KSA8IDApCisJCWlmICh0Y19kdW1wX3FkaXNjX3Jvb3QoZGV2LT5xZGlzYywgc2tiLCBjYiwgJnFfaWR4LCBzX3FfaWR4KSA8IDApCiAJCQlnb3RvIGRvbmU7CiAKIAkJZGV2X3F1ZXVlID0gJmRldi0+cnhfcXVldWU7CkBAIC0xMzIzLDcgKzEzMTIsNiBAQAogc3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbiwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwotCXN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZTsKIAlzdHJ1Y3QgdGNtc2cgKnRjbSA9IE5MTVNHX0RBVEEobik7CiAJc3RydWN0IG5sYXR0ciAqdGNhW1RDQV9NQVggKyAxXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTM2MSw3ICsxMzQ5LDYgQEAKIAogCS8qIFN0ZXAgMS4gRGV0ZXJtaW5lIHFkaXNjIGhhbmRsZSBYOjAgKi8KIAotCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKIAlpZiAocGlkICE9IFRDX0hfUk9PVCkgewogCQl1MzIgcWlkMSA9IFRDX0hfTUFKKHBpZCk7CiAKQEAgLTEzNzIsNyArMTM1OSw3IEBACiAJCX0gZWxzZSBpZiAocWlkMSkgewogCQkJcWlkID0gcWlkMTsKIAkJfSBlbHNlIGlmIChxaWQgPT0gMCkKLQkJCXFpZCA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmctPmhhbmRsZTsKKwkJCXFpZCA9IGRldi0+cWRpc2MtPmhhbmRsZTsKIAogCQkvKiBOb3cgcWlkIGlzIGdlbnVpbmUgcWRpc2MgaGFuZGxlIGNvbnNpc3RlbnQKIAkJICAgYm90aCB3aXRoIHBhcmVudCBhbmQgY2hpbGQuCkBAIC0xMzgzLDcgKzEzNzAsNyBAQAogCQkJcGlkID0gVENfSF9NQUtFKHFpZCwgcGlkKTsKIAl9IGVsc2UgewogCQlpZiAocWlkID09IDApCi0JCQlxaWQgPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nLT5oYW5kbGU7CisJCQlxaWQgPSBkZXYtPnFkaXNjLT5oYW5kbGU7CiAJfQogCiAJLyogT0suIExvY2F0ZSBxZGlzYyAqLwpAQCAtMTQxNyw3ICsxNDA0LDkgQEAKIAkJCQlnb3RvIG91dDsKIAkJCWJyZWFrOwogCQljYXNlIFJUTV9ERUxUQ0xBU1M6Ci0JCQllcnIgPSBjb3BzLT5kZWxldGUocSwgY2wpOworCQkJZXJyID0gLUVPUE5PVFNVUFA7CisJCQlpZiAoY29wcy0+ZGVsZXRlKQorCQkJCWVyciA9IGNvcHMtPmRlbGV0ZShxLCBjbCk7CiAJCQlpZiAoZXJyID09IDApCiAJCQkJdGNsYXNzX25vdGlmeShza2IsIG4sIHEsIGNsLCBSVE1fREVMVENMQVNTKTsKIAkJCWdvdG8gb3V0OwpAQCAtMTQzMSw3ICsxNDIwLDkgQEAKIAl9CiAKIAluZXdfY2wgPSBjbDsKLQllcnIgPSBjb3BzLT5jaGFuZ2UocSwgY2xpZCwgcGlkLCB0Y2EsICZuZXdfY2wpOworCWVyciA9IC1FT1BOT1RTVVBQOworCWlmIChjb3BzLT5jaGFuZ2UpCisJCWVyciA9IGNvcHMtPmNoYW5nZShxLCBjbGlkLCBwaWQsIHRjYSwgJm5ld19jbCk7CiAJaWYgKGVyciA9PSAwKQogCQl0Y2xhc3Nfbm90aWZ5KHNrYiwgbiwgcSwgbmV3X2NsLCBSVE1fTkVXVENMQVNTKTsKIApAQCAtMTU4Niw4ICsxNTc3LDcgQEAKIAlzX3QgPSBjYi0+YXJnc1swXTsKIAl0ID0gMDsKIAotCWRldl9xdWV1ZSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKLQlpZiAodGNfZHVtcF90Y2xhc3Nfcm9vdChkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nLCBza2IsIHRjbSwgY2IsICZ0LCBzX3QpIDwgMCkKKwlpZiAodGNfZHVtcF90Y2xhc3Nfcm9vdChkZXYtPnFkaXNjLCBza2IsIHRjbSwgY2IsICZ0LCBzX3QpIDwgMCkKIAkJZ290byBkb25lOwogCiAJZGV2X3F1ZXVlID0gJmRldi0+cnhfcXVldWU7CkBAIC0xNzA3LDYgKzE2OTcsNyBAQAogewogCXJlZ2lzdGVyX3FkaXNjKCZwZmlmb19xZGlzY19vcHMpOwogCXJlZ2lzdGVyX3FkaXNjKCZiZmlmb19xZGlzY19vcHMpOworCXJlZ2lzdGVyX3FkaXNjKCZtcV9xZGlzY19vcHMpOwogCXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgInBzY2hlZCIsIDAsICZwc2NoZWRfZm9wcyk7CiAKIAlydG5sX3JlZ2lzdGVyKFBGX1VOU1BFQywgUlRNX05FV1FESVNDLCB0Y19tb2RpZnlfcWRpc2MsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggZDU3OThlMS4uNWIxMzJjNCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0xNjIxLDI5ICsxNjIxLDI1IEBACiB7CiAJc3RydWN0IGNicV9jbGFzcyAqY2wgPSAoc3RydWN0IGNicV9jbGFzcyopYXJnOwogCi0JaWYgKGNsKSB7Ci0JCWlmIChuZXcgPT0gTlVMTCkgewotCQkJbmV3ID0gcWRpc2NfY3JlYXRlX2RmbHQocWRpc2NfZGV2KHNjaCksIHNjaC0+ZGV2X3F1ZXVlLAotCQkJCQkJJnBmaWZvX3FkaXNjX29wcywKLQkJCQkJCWNsLT5jb21tb24uY2xhc3NpZCk7Ci0JCQlpZiAobmV3ID09IE5VTEwpCi0JCQkJcmV0dXJuIC1FTk9CVUZTOwotCQl9IGVsc2UgeworCWlmIChuZXcgPT0gTlVMTCkgeworCQluZXcgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCisJCQkJCSZwZmlmb19xZGlzY19vcHMsIGNsLT5jb21tb24uY2xhc3NpZCk7CisJCWlmIChuZXcgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PQlVGUzsKKwl9IGVsc2UgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX0FDVAotCQkJaWYgKGNsLT5wb2xpY2UgPT0gVENfUE9MSUNFX1JFQ0xBU1NJRlkpCi0JCQkJbmV3LT5yZXNoYXBlX2ZhaWwgPSBjYnFfcmVzaGFwZV9mYWlsOworCQlpZiAoY2wtPnBvbGljZSA9PSBUQ19QT0xJQ0VfUkVDTEFTU0lGWSkKKwkJCW5ldy0+cmVzaGFwZV9mYWlsID0gY2JxX3Jlc2hhcGVfZmFpbDsKICNlbmRpZgotCQl9Ci0JCXNjaF90cmVlX2xvY2soc2NoKTsKLQkJKm9sZCA9IGNsLT5xOwotCQljbC0+cSA9IG5ldzsKLQkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKCpvbGQsICgqb2xkKS0+cS5xbGVuKTsKLQkJcWRpc2NfcmVzZXQoKm9sZCk7Ci0JCXNjaF90cmVlX3VubG9jayhzY2gpOwotCi0JCXJldHVybiAwOwogCX0KLQlyZXR1cm4gLUVOT0VOVDsKKwlzY2hfdHJlZV9sb2NrKHNjaCk7CisJKm9sZCA9IGNsLT5xOworCWNsLT5xID0gbmV3OworCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbigqb2xkLCAoKm9sZCktPnEucWxlbik7CisJcWRpc2NfcmVzZXQoKm9sZCk7CisJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBRZGlzYyAqCkBAIC0xNjUxLDcgKzE2NDcsNyBAQAogewogCXN0cnVjdCBjYnFfY2xhc3MgKmNsID0gKHN0cnVjdCBjYnFfY2xhc3MqKWFyZzsKIAotCXJldHVybiBjbCA/IGNsLT5xIDogTlVMTDsKKwlyZXR1cm4gY2wtPnE7CiB9CiAKIHN0YXRpYyB2b2lkIGNicV9xbGVuX25vdGlmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCmluZGV4IDI3ZDAzODEuLjRhZTZhYTUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCkBAIC0zNywxNSArMzcsMTEgQEAKICAqIC0gdXBkYXRlcyB0byB0cmVlIGFuZCB0cmVlIHdhbGtpbmcgYXJlIG9ubHkgZG9uZSB1bmRlciB0aGUgcnRubCBtdXRleC4KICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBxZGlzY19xbGVuKHN0cnVjdCBRZGlzYyAqcSkKLXsKLQlyZXR1cm4gcS0+cS5xbGVuOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBkZXZfcmVxdWV1ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxKQogewogCXEtPmdzb19za2IgPSBza2I7CiAJcS0+cXN0YXRzLnJlcXVldWVzKys7CisJcS0+cS5xbGVuKys7CS8qIGl0J3Mgc3RpbGwgcGFydCBvZiB0aGUgcXVldWUgKi8KIAlfX25ldGlmX3NjaGVkdWxlKHEpOwogCiAJcmV0dXJuIDA7CkBAIC02MSw5ICs1NywxMSBAQAogCiAJCS8qIGNoZWNrIHRoZSByZWFzb24gb2YgcmVxdWV1aW5nIHdpdGhvdXQgdHggbG9jayBmaXJzdCAqLwogCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCQlpZiAoIW5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSAmJiAhbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkpCisJCWlmICghbmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmCisJCSAgICAhbmV0aWZfdHhfcXVldWVfZnJvemVuKHR4cSkpIHsKIAkJCXEtPmdzb19za2IgPSBOVUxMOwotCQllbHNlCisJCQlxLT5xLnFsZW4tLTsKKwkJfSBlbHNlCiAJCQlza2IgPSBOVUxMOwogCX0gZWxzZSB7CiAJCXNrYiA9IHEtPmRlcXVldWUocSk7CkBAIC0xMDMsNDQgKzEwMSwyMyBAQAogfQogCiAvKgotICogTk9URTogQ2FsbGVkIHVuZGVyIHFkaXNjX2xvY2socSkgd2l0aCBsb2NhbGx5IGRpc2FibGVkIEJILgotICoKLSAqIF9fUURJU0NfU1RBVEVfUlVOTklORyBndWFyYW50ZWVzIG9ubHkgb25lIENQVSBjYW4gcHJvY2VzcwotICogdGhpcyBxZGlzYyBhdCBhIHRpbWUuIHFkaXNjX2xvY2socSkgc2VyaWFsaXplcyBxdWV1ZSBhY2Nlc3NlcyBmb3IKLSAqIHRoaXMgcXVldWUuCi0gKgotICogIG5ldGlmX3R4X2xvY2sgc2VyaWFsaXplcyBhY2Nlc3NlcyB0byBkZXZpY2UgZHJpdmVyLgotICoKLSAqICBxZGlzY19sb2NrKHEpIGFuZCBuZXRpZl90eF9sb2NrIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsCi0gKiAgaWYgb25lIGlzIGdyYWJiZWQsIGFub3RoZXIgbXVzdCBiZSBmcmVlLgotICoKLSAqIE5vdGUsIHRoYXQgdGhpcyBwcm9jZWR1cmUgY2FuIGJlIGNhbGxlZCBieSBhIHdhdGNoZG9nIHRpbWVyCisgKiBUcmFuc21pdCBvbmUgc2tiLCBhbmQgaGFuZGxlIHRoZSByZXR1cm4gc3RhdHVzIGFzIHJlcXVpcmVkLiBIb2xkaW5nIHRoZQorICogX19RRElTQ19TVEFURV9SVU5OSU5HIGJpdCBndWFyYW50ZWVzIHRoYXQgb25seSBvbmUgQ1BVIGNhbiBleGVjdXRlIHRoaXMKKyAqIGZ1bmN0aW9uLgogICoKICAqIFJldHVybnMgdG8gdGhlIGNhbGxlcjoKICAqCQkJCTAgIC0gcXVldWUgaXMgZW1wdHkgb3IgdGhyb3R0bGVkLgogICoJCQkJPjAgLSBxdWV1ZSBpcyBub3QgZW1wdHkuCi0gKgogICovCi1zdGF0aWMgaW5saW5lIGludCBxZGlzY19yZXN0YXJ0KHN0cnVjdCBRZGlzYyAqcSkKK2ludCBzY2hfZGlyZWN0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjICpxLAorCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLAorCQkgICAgc3BpbmxvY2tfdCAqcm9vdF9sb2NrKQogewotCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKIAlpbnQgcmV0ID0gTkVUREVWX1RYX0JVU1k7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCS8qIERlcXVldWUgcGFja2V0ICovCi0JaWYgKHVubGlrZWx5KChza2IgPSBkZXF1ZXVlX3NrYihxKSkgPT0gTlVMTCkpCi0JCXJldHVybiAwOwotCi0Jcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKIAogCS8qIEFuZCByZWxlYXNlIHFkaXNjICovCiAJc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKIAotCWRldiA9IHFkaXNjX2RldihxKTsKLQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCiAJSEFSRF9UWF9MT0NLKGRldiwgdHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWlmICghbmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpICYmCiAJICAgICFuZXRpZl90eF9xdWV1ZV9mcm96ZW4odHhxKSkKQEAgLTE3Nyw2ICsxNTQsNDQgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogTk9URTogQ2FsbGVkIHVuZGVyIHFkaXNjX2xvY2socSkgd2l0aCBsb2NhbGx5IGRpc2FibGVkIEJILgorICoKKyAqIF9fUURJU0NfU1RBVEVfUlVOTklORyBndWFyYW50ZWVzIG9ubHkgb25lIENQVSBjYW4gcHJvY2VzcworICogdGhpcyBxZGlzYyBhdCBhIHRpbWUuIHFkaXNjX2xvY2socSkgc2VyaWFsaXplcyBxdWV1ZSBhY2Nlc3NlcyBmb3IKKyAqIHRoaXMgcXVldWUuCisgKgorICogIG5ldGlmX3R4X2xvY2sgc2VyaWFsaXplcyBhY2Nlc3NlcyB0byBkZXZpY2UgZHJpdmVyLgorICoKKyAqICBxZGlzY19sb2NrKHEpIGFuZCBuZXRpZl90eF9sb2NrIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsCisgKiAgaWYgb25lIGlzIGdyYWJiZWQsIGFub3RoZXIgbXVzdCBiZSBmcmVlLgorICoKKyAqIE5vdGUsIHRoYXQgdGhpcyBwcm9jZWR1cmUgY2FuIGJlIGNhbGxlZCBieSBhIHdhdGNoZG9nIHRpbWVyCisgKgorICogUmV0dXJucyB0byB0aGUgY2FsbGVyOgorICoJCQkJMCAgLSBxdWV1ZSBpcyBlbXB0eSBvciB0aHJvdHRsZWQuCisgKgkJCQk+MCAtIHF1ZXVlIGlzIG5vdCBlbXB0eS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHFkaXNjX3Jlc3RhcnQoc3RydWN0IFFkaXNjICpxKQoreworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyogRGVxdWV1ZSBwYWNrZXQgKi8KKwlza2IgPSBkZXF1ZXVlX3NrYihxKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAwOworCisJcm9vdF9sb2NrID0gcWRpc2NfbG9jayhxKTsKKwlkZXYgPSBxZGlzY19kZXYocSk7CisJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKworCXJldHVybiBzY2hfZGlyZWN0X3htaXQoc2tiLCBxLCBkZXYsIHR4cSwgcm9vdF9sb2NrKTsKK30KKwogdm9pZCBfX3FkaXNjX3J1bihzdHJ1Y3QgUWRpc2MgKnEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lID0gamlmZmllczsKQEAgLTM5MSwxOCArNDA2LDM4IEBACiAKICNkZWZpbmUgUEZJRk9fRkFTVF9CQU5EUyAzCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcHJpbzJsaXN0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICAgc3RydWN0IFFkaXNjICpxZGlzYykKKy8qCisgKiBQcml2YXRlIGRhdGEgZm9yIGEgcGZpZm9fZmFzdCBzY2hlZHVsZXIgY29udGFpbmluZzoKKyAqIAktIHF1ZXVlcyBmb3IgdGhlIHRocmVlIGJhbmQKKyAqIAktIGJpdG1hcCBpbmRpY2F0aW5nIHdoaWNoIG9mIHRoZSBiYW5kcyBjb250YWluIHNrYnMKKyAqLworc3RydWN0IHBmaWZvX2Zhc3RfcHJpdiB7CisJdTMyIGJpdG1hcDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHFbUEZJRk9fRkFTVF9CQU5EU107Cit9OworCisvKgorICogQ29udmVydCBhIGJpdG1hcCB0byB0aGUgZmlyc3QgYmFuZCBudW1iZXIgd2hlcmUgYW4gc2tiIGlzIHF1ZXVlZCwgd2hlcmU6CisgKiAJYml0bWFwPTAgbWVhbnMgdGhlcmUgYXJlIG5vIHNrYnMgb24gYW55IGJhbmQuCisgKiAJYml0bWFwPTEgbWVhbnMgdGhlcmUgaXMgYW4gc2tiIG9uIGJhbmQgMC4KKyAqCWJpdG1hcD03IG1lYW5zIHRoZXJlIGFyZSBza2JzIG9uIGFsbCAzIGJhbmRzLCBldGMuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgYml0bWFwMmJhbmRbXSA9IHstMSwgMCwgMSwgMCwgMiwgMCwgMSwgMH07CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYmFuZDJsaXN0KHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYsCisJCQkJCSAgICAgaW50IGJhbmQpCiB7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IHFkaXNjX3ByaXYocWRpc2MpOwotCXJldHVybiBsaXN0ICsgcHJpbzJiYW5kW3NrYi0+cHJpb3JpdHkgJiBUQ19QUklPX01BWF07CisJcmV0dXJuIHByaXYtPnEgKyBiYW5kOwogfQogCiBzdGF0aWMgaW50IHBmaWZvX2Zhc3RfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHFkaXNjKQogewotCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBwcmlvMmxpc3Qoc2tiLCBxZGlzYyk7CisJaWYgKHNrYl9xdWV1ZV9sZW4oJnFkaXNjLT5xKSA8IHFkaXNjX2RldihxZGlzYyktPnR4X3F1ZXVlX2xlbikgeworCQlpbnQgYmFuZCA9IHByaW8yYmFuZFtza2ItPnByaW9yaXR5ICYgVENfUFJJT19NQVhdOworCQlzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7CisJCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBiYW5kMmxpc3QocHJpdiwgYmFuZCk7CiAKLQlpZiAoc2tiX3F1ZXVlX2xlbihsaXN0KSA8IHFkaXNjX2RldihxZGlzYyktPnR4X3F1ZXVlX2xlbikgeworCQlwcml2LT5iaXRtYXAgfD0gKDEgPDwgYmFuZCk7CiAJCXFkaXNjLT5xLnFsZW4rKzsKIAkJcmV0dXJuIF9fcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgcWRpc2MsIGxpc3QpOwogCX0KQEAgLTQxMiwxNCArNDQ3LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGZpZm9fZmFzdF9kZXF1ZXVlKHN0cnVjdCBRZGlzYyogcWRpc2MpCiB7Ci0JaW50IHByaW87Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IHFkaXNjX3ByaXYocWRpc2MpOworCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKKwlpbnQgYmFuZCA9IGJpdG1hcDJiYW5kW3ByaXYtPmJpdG1hcF07CiAKLQlmb3IgKHByaW8gPSAwOyBwcmlvIDwgUEZJRk9fRkFTVF9CQU5EUzsgcHJpbysrKSB7Ci0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KGxpc3QgKyBwcmlvKSkgewotCQkJcWRpc2MtPnEucWxlbi0tOwotCQkJcmV0dXJuIF9fcWRpc2NfZGVxdWV1ZV9oZWFkKHFkaXNjLCBsaXN0ICsgcHJpbyk7Ci0JCX0KKwlpZiAobGlrZWx5KGJhbmQgPj0gMCkpIHsKKwkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IGJhbmQybGlzdChwcml2LCBiYW5kKTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fcWRpc2NfZGVxdWV1ZV9oZWFkKHFkaXNjLCBsaXN0KTsKKworCQlxZGlzYy0+cS5xbGVuLS07CisJCWlmIChza2JfcXVldWVfZW1wdHkobGlzdCkpCisJCQlwcml2LT5iaXRtYXAgJj0gfigxIDw8IGJhbmQpOworCisJCXJldHVybiBza2I7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC00MjcsMTIgKzQ2NiwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBmaWZvX2Zhc3RfcGVlayhzdHJ1Y3QgUWRpc2MqIHFkaXNjKQogewotCWludCBwcmlvOwotCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBxZGlzY19wcml2KHFkaXNjKTsKKwlzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7CisJaW50IGJhbmQgPSBiaXRtYXAyYmFuZFtwcml2LT5iaXRtYXBdOwogCi0JZm9yIChwcmlvID0gMDsgcHJpbyA8IFBGSUZPX0ZBU1RfQkFORFM7IHByaW8rKykgewotCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eShsaXN0ICsgcHJpbykpCi0JCQlyZXR1cm4gc2tiX3BlZWsobGlzdCArIHByaW8pOworCWlmIChiYW5kID49IDApIHsKKwkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IGJhbmQybGlzdChwcml2LCBiYW5kKTsKKworCQlyZXR1cm4gc2tiX3BlZWsobGlzdCk7CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC00NDEsMTEgKzQ4MSwxMiBAQAogc3RhdGljIHZvaWQgcGZpZm9fZmFzdF9yZXNldChzdHJ1Y3QgUWRpc2MqIHFkaXNjKQogewogCWludCBwcmlvOwotCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBxZGlzY19wcml2KHFkaXNjKTsKKwlzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7CiAKIAlmb3IgKHByaW8gPSAwOyBwcmlvIDwgUEZJRk9fRkFTVF9CQU5EUzsgcHJpbysrKQotCQlfX3FkaXNjX3Jlc2V0X3F1ZXVlKHFkaXNjLCBsaXN0ICsgcHJpbyk7CisJCV9fcWRpc2NfcmVzZXRfcXVldWUocWRpc2MsIGJhbmQybGlzdChwcml2LCBwcmlvKSk7CiAKKwlwcml2LT5iaXRtYXAgPSAwOwogCXFkaXNjLT5xc3RhdHMuYmFja2xvZyA9IDA7CiAJcWRpc2MtPnEucWxlbiA9IDA7CiB9CkBAIC00NjUsMTcgKzUwNiwxNyBAQAogc3RhdGljIGludCBwZmlmb19mYXN0X2luaXQoc3RydWN0IFFkaXNjICpxZGlzYywgc3RydWN0IG5sYXR0ciAqb3B0KQogewogCWludCBwcmlvOwotCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBxZGlzY19wcml2KHFkaXNjKTsKKwlzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7CiAKIAlmb3IgKHByaW8gPSAwOyBwcmlvIDwgUEZJRk9fRkFTVF9CQU5EUzsgcHJpbysrKQotCQlza2JfcXVldWVfaGVhZF9pbml0KGxpc3QgKyBwcmlvKTsKKwkJc2tiX3F1ZXVlX2hlYWRfaW5pdChiYW5kMmxpc3QocHJpdiwgcHJpbykpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CitzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmlkCQk9CSJwZmlmb19mYXN0IiwKLQkucHJpdl9zaXplCT0JUEZJRk9fRkFTVF9CQU5EUyAqIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZl9oZWFkKSwKKwkucHJpdl9zaXplCT0Jc2l6ZW9mKHN0cnVjdCBwZmlmb19mYXN0X3ByaXYpLAogCS5lbnF1ZXVlCT0JcGZpZm9fZmFzdF9lbnF1ZXVlLAogCS5kZXF1ZXVlCT0JcGZpZm9fZmFzdF9kZXF1ZXVlLAogCS5wZWVrCQk9CXBmaWZvX2Zhc3RfcGVlaywKQEAgLTU0Nyw4ICs1ODgsMTEgQEAKIAlpZiAob3BzLT5yZXNldCkKIAkJb3BzLT5yZXNldChxZGlzYyk7CiAKLQlrZnJlZV9za2IocWRpc2MtPmdzb19za2IpOwotCXFkaXNjLT5nc29fc2tiID0gTlVMTDsKKwlpZiAocWRpc2MtPmdzb19za2IpIHsKKwkJa2ZyZWVfc2tiKHFkaXNjLT5nc29fc2tiKTsKKwkJcWRpc2MtPmdzb19za2IgPSBOVUxMOworCQlxZGlzYy0+cS5xbGVuID0gMDsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKHFkaXNjX3Jlc2V0KTsKIApAQCAtNTc5LDE3ICs2MjMsMjkgQEAKIH0KIEVYUE9SVF9TWU1CT0wocWRpc2NfZGVzdHJveSk7CiAKLXN0YXRpYyBib29sIGRldl9hbGxfcWRpc2Nfc2xlZXBpbmdfbm9vcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorLyogQXR0YWNoIHRvcGxldmVsIHFkaXNjIHRvIGRldmljZSBxdWV1ZS4gKi8KK3N0cnVjdCBRZGlzYyAqZGV2X2dyYWZ0X3FkaXNjKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKKwkJCSAgICAgIHN0cnVjdCBRZGlzYyAqcWRpc2MpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IFFkaXNjICpvcWRpc2MgPSBkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nOworCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CisJcm9vdF9sb2NrID0gcWRpc2NfbG9jayhvcWRpc2MpOworCXNwaW5fbG9ja19iaChyb290X2xvY2spOwogCi0JCWlmICh0eHEtPnFkaXNjX3NsZWVwaW5nICE9ICZub29wX3FkaXNjKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBQcnVuZSBvbGQgc2NoZWR1bGVyICovCisJaWYgKG9xZGlzYyAmJiBhdG9taWNfcmVhZCgmb3FkaXNjLT5yZWZjbnQpIDw9IDEpCisJCXFkaXNjX3Jlc2V0KG9xZGlzYyk7CisKKwkvKiAuLi4gYW5kIGdyYWZ0IG5ldyBvbmUgKi8KKwlpZiAocWRpc2MgPT0gTlVMTCkKKwkJcWRpc2MgPSAmbm9vcF9xZGlzYzsKKwlkZXZfcXVldWUtPnFkaXNjX3NsZWVwaW5nID0gcWRpc2M7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGRldl9xdWV1ZS0+cWRpc2MsICZub29wX3FkaXNjKTsKKworCXNwaW5fdW5sb2NrX2JoKHJvb3RfbG9jayk7CisKKwlyZXR1cm4gb3FkaXNjOwogfQogCiBzdGF0aWMgdm9pZCBhdHRhY2hfb25lX2RlZmF1bHRfcWRpc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTYwNSwxMiArNjYxLDM1IEBACiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogYWN0aXZhdGlvbiBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CiAJCQlyZXR1cm47CiAJCX0KKworCQkvKiBDYW4gYnktcGFzcyB0aGUgcXVldWUgZGlzY2lwbGluZSBmb3IgZGVmYXVsdCBxZGlzYyAqLworCQlxZGlzYy0+ZmxhZ3MgfD0gVENRX0ZfQ0FOX0JZUEFTUzsKIAl9IGVsc2UgewogCQlxZGlzYyA9ICAmbm9xdWV1ZV9xZGlzYzsKIAl9CiAJZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZyA9IHFkaXNjOwogfQogCitzdGF0aWMgdm9pZCBhdHRhY2hfZGVmYXVsdF9xZGlzY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CisJc3RydWN0IFFkaXNjICpxZGlzYzsKKworCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKKworCWlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShkZXYpIHx8IGRldi0+dHhfcXVldWVfbGVuID09IDApIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX3R4X3F1ZXVlKGRldiwgYXR0YWNoX29uZV9kZWZhdWx0X3FkaXNjLCBOVUxMKTsKKwkJZGV2LT5xZGlzYyA9IHR4cS0+cWRpc2Nfc2xlZXBpbmc7CisJCWF0b21pY19pbmMoJmRldi0+cWRpc2MtPnJlZmNudCk7CisJfSBlbHNlIHsKKwkJcWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChkZXYsIHR4cSwgJm1xX3FkaXNjX29wcywgVENfSF9ST09UKTsKKwkJaWYgKHFkaXNjKSB7CisJCQlxZGlzYy0+b3BzLT5hdHRhY2gocWRpc2MpOworCQkJZGV2LT5xZGlzYyA9IHFkaXNjOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCB0cmFuc2l0aW9uX29uZV9xZGlzYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUsCiAJCQkJIHZvaWQgKl9uZWVkX3dhdGNoZG9nKQpAQCAtNjM4LDggKzcxNyw4IEBACiAJICAgdmlydHVhbCBpbnRlcmZhY2VzCiAJICovCiAKLQlpZiAoZGV2X2FsbF9xZGlzY19zbGVlcGluZ19ub29wKGRldikpCi0JCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIGF0dGFjaF9vbmVfZGVmYXVsdF9xZGlzYywgTlVMTCk7CisJaWYgKGRldi0+cWRpc2MgPT0gJm5vb3BfcWRpc2MpCisJCWF0dGFjaF9kZWZhdWx0X3FkaXNjcyhkZXYpOwogCiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpCiAJCS8qIERlbGF5IGFjdGl2YXRpb24gdW50aWwgbmV4dCBjYXJyaWVyLW9uIGV2ZW50ICovCkBAIC03MzAsNiArODA5LDcgQEAKIAogdm9pZCBkZXZfaW5pdF9zY2hlZHVsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlkZXYtPnFkaXNjID0gJm5vb3BfcWRpc2M7CiAJbmV0ZGV2X2Zvcl9lYWNoX3R4X3F1ZXVlKGRldiwgZGV2X2luaXRfc2NoZWR1bGVyX3F1ZXVlLCAmbm9vcF9xZGlzYyk7CiAJZGV2X2luaXRfc2NoZWR1bGVyX3F1ZXVlKGRldiwgJmRldi0+cnhfcXVldWUsICZub29wX3FkaXNjKTsKIApAQCAtNzU1LDUgKzgzNSw4IEBACiB7CiAJbmV0ZGV2X2Zvcl9lYWNoX3R4X3F1ZXVlKGRldiwgc2h1dGRvd25fc2NoZWR1bGVyX3F1ZXVlLCAmbm9vcF9xZGlzYyk7CiAJc2h1dGRvd25fc2NoZWR1bGVyX3F1ZXVlKGRldiwgJmRldi0+cnhfcXVldWUsICZub29wX3FkaXNjKTsKKwlxZGlzY19kZXN0cm95KGRldi0+cWRpc2MpOworCWRldi0+cWRpc2MgPSAmbm9vcF9xZGlzYzsKKwogCVdBUk5fT04odGltZXJfcGVuZGluZygmZGV2LT53YXRjaGRvZ190aW1lcikpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwppbmRleCBkYWQwMTQ0Li4zNzVkNjRjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuYworKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwpAQCAtMTIwMyw4ICsxMjAzLDYgQEAKIHsKIAlzdHJ1Y3QgaGZzY19jbGFzcyAqY2wgPSAoc3RydWN0IGhmc2NfY2xhc3MgKilhcmc7CiAKLQlpZiAoY2wgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKGNsLT5sZXZlbCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChuZXcgPT0gTlVMTCkgewpAQCAtMTIyOCw3ICsxMjI2LDcgQEAKIHsKIAlzdHJ1Y3QgaGZzY19jbGFzcyAqY2wgPSAoc3RydWN0IGhmc2NfY2xhc3MgKilhcmc7CiAKLQlpZiAoY2wgIT0gTlVMTCAmJiBjbC0+bGV2ZWwgPT0gMCkKKwlpZiAoY2wtPmxldmVsID09IDApCiAJCXJldHVybiBjbC0+cWRpc2M7CiAKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IGVjNGQ0NjMuLjg1YWNhYjkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtMTExNywzMCArMTExNywyOSBAQAogewogCXN0cnVjdCBodGJfY2xhc3MgKmNsID0gKHN0cnVjdCBodGJfY2xhc3MgKilhcmc7CiAKLQlpZiAoY2wgJiYgIWNsLT5sZXZlbCkgewotCQlpZiAobmV3ID09IE5VTEwgJiYKLQkJICAgIChuZXcgPSBxZGlzY19jcmVhdGVfZGZsdChxZGlzY19kZXYoc2NoKSwgc2NoLT5kZXZfcXVldWUsCi0JCQkJCSAgICAgJnBmaWZvX3FkaXNjX29wcywKLQkJCQkJICAgICBjbC0+Y29tbW9uLmNsYXNzaWQpKQotCQkgICAgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PQlVGUzsKLQkJc2NoX3RyZWVfbG9jayhzY2gpOwotCQkqb2xkID0gY2wtPnVuLmxlYWYucTsKLQkJY2wtPnVuLmxlYWYucSA9IG5ldzsKLQkJaWYgKCpvbGQgIT0gTlVMTCkgewotCQkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKCpvbGQsICgqb2xkKS0+cS5xbGVuKTsKLQkJCXFkaXNjX3Jlc2V0KCpvbGQpOwotCQl9Ci0JCXNjaF90cmVlX3VubG9jayhzY2gpOwotCQlyZXR1cm4gMDsKKwlpZiAoY2wtPmxldmVsKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobmV3ID09IE5VTEwgJiYKKwkgICAgKG5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHFkaXNjX2RldihzY2gpLCBzY2gtPmRldl9xdWV1ZSwKKwkJCQkgICAgICZwZmlmb19xZGlzY19vcHMsCisJCQkJICAgICBjbC0+Y29tbW9uLmNsYXNzaWQpKSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlzY2hfdHJlZV9sb2NrKHNjaCk7CisJKm9sZCA9IGNsLT51bi5sZWFmLnE7CisJY2wtPnVuLmxlYWYucSA9IG5ldzsKKwlpZiAoKm9sZCAhPSBOVUxMKSB7CisJCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbigqb2xkLCAoKm9sZCktPnEucWxlbik7CisJCXFkaXNjX3Jlc2V0KCpvbGQpOwogCX0KLQlyZXR1cm4gLUVOT0VOVDsKKwlzY2hfdHJlZV91bmxvY2soc2NoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBRZGlzYyAqaHRiX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBodGJfY2xhc3MgKmNsID0gKHN0cnVjdCBodGJfY2xhc3MgKilhcmc7Ci0JcmV0dXJuIChjbCAmJiAhY2wtPmxldmVsKSA/IGNsLT51bi5sZWFmLnEgOiBOVUxMOworCXJldHVybiAhY2wtPmxldmVsID8gY2wtPnVuLmxlYWYucSA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGh0Yl9xbGVuX25vdGlmeShzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2luZ3Jlc3MuYyBiL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCmluZGV4IDRhMmI3NzMuLmE5ZTY0NmIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaW5ncmVzcy5jCkBAIC0yMiwxMiArMjIsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENsYXNzL2Zsb3cgb3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgaW5ncmVzc19ncmFmdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcsCi0JCQkgc3RydWN0IFFkaXNjICpuZXcsIHN0cnVjdCBRZGlzYyAqKm9sZCkKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgUWRpc2MgKmluZ3Jlc3NfbGVhZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJcmV0dXJuIE5VTEw7CkBAIC00OCwxMiArNDIsNiBAQAogewogfQogCi1zdGF0aWMgaW50IGluZ3Jlc3NfY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCwgdTMyIHBhcmVudCwKLQkJCSAgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBpbmdyZXNzX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKndhbGtlcikKIHsKIAlyZXR1cm47CkBAIC0xMjMsMTEgKzExMSw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIGluZ3Jlc3NfY2xhc3Nfb3BzID0gewotCS5ncmFmdAkJPQlpbmdyZXNzX2dyYWZ0LAogCS5sZWFmCQk9CWluZ3Jlc3NfbGVhZiwKIAkuZ2V0CQk9CWluZ3Jlc3NfZ2V0LAogCS5wdXQJCT0JaW5ncmVzc19wdXQsCi0JLmNoYW5nZQkJPQlpbmdyZXNzX2NoYW5nZSwKIAkud2FsawkJPQlpbmdyZXNzX3dhbGssCiAJLnRjZl9jaGFpbgk9CWluZ3Jlc3NfZmluZF90Y2YsCiAJLmJpbmRfdGNmCT0JaW5ncmVzc19iaW5kX2ZpbHRlciwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbXEuYyBiL25ldC9zY2hlZC9zY2hfbXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDVlZTAyCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3NjaGVkL3NjaF9tcS5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogbmV0L3NjaGVkL3NjaF9tcS5jCQlDbGFzc2Z1bCBtdWx0aXF1ZXVlIGR1bW15IHNjaGVkdWxlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CisKK3N0cnVjdCBtcV9zY2hlZCB7CisJc3RydWN0IFFkaXNjCQkqKnFkaXNjczsKK307CisKK3N0YXRpYyB2b2lkIG1xX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpOworCXN0cnVjdCBtcV9zY2hlZCAqcHJpdiA9IHFkaXNjX3ByaXYoc2NoKTsKKwl1bnNpZ25lZCBpbnQgbnR4OworCisJaWYgKCFwcml2LT5xZGlzY3MpCisJCXJldHVybjsKKwlmb3IgKG50eCA9IDA7IG50eCA8IGRldi0+bnVtX3R4X3F1ZXVlcyAmJiBwcml2LT5xZGlzY3NbbnR4XTsgbnR4KyspCisJCXFkaXNjX2Rlc3Ryb3kocHJpdi0+cWRpc2NzW250eF0pOworCWtmcmVlKHByaXYtPnFkaXNjcyk7Cit9CisKK3N0YXRpYyBpbnQgbXFfaW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTsKKwlzdHJ1Y3QgbXFfc2NoZWQgKnByaXYgPSBxZGlzY19wcml2KHNjaCk7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlOworCXN0cnVjdCBRZGlzYyAqcWRpc2M7CisJdW5zaWduZWQgaW50IG50eDsKKworCWlmIChzY2gtPnBhcmVudCAhPSBUQ19IX1JPT1QpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShkZXYpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkvKiBwcmUtYWxsb2NhdGUgcWRpc2NzLCBhdHRhY2htZW50IGNhbid0IGZhaWwgKi8KKwlwcml2LT5xZGlzY3MgPSBrY2FsbG9jKGRldi0+bnVtX3R4X3F1ZXVlcywgc2l6ZW9mKHByaXYtPnFkaXNjc1swXSksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYtPnFkaXNjcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAobnR4ID0gMDsgbnR4IDwgZGV2LT5udW1fdHhfcXVldWVzOyBudHgrKykgeworCQlkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTsKKwkJcWRpc2MgPSBxZGlzY19jcmVhdGVfZGZsdChkZXYsIGRldl9xdWV1ZSwgJnBmaWZvX2Zhc3Rfb3BzLAorCQkJCQkgIFRDX0hfTUFLRShUQ19IX01BSihzY2gtPmhhbmRsZSksCisJCQkJCQkgICAgVENfSF9NSU4obnR4ICsgMSkpKTsKKwkJaWYgKHFkaXNjID09IE5VTEwpCisJCQlnb3RvIGVycjsKKwkJcWRpc2MtPmZsYWdzIHw9IFRDUV9GX0NBTl9CWVBBU1M7CisJCXByaXYtPnFkaXNjc1tudHhdID0gcWRpc2M7CisJfQorCisJc2NoLT5mbGFncyB8PSBUQ1FfRl9NUVJPT1Q7CisJcmV0dXJuIDA7CisKK2VycjoKKwltcV9kZXN0cm95KHNjaCk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIG1xX2F0dGFjaChzdHJ1Y3QgUWRpc2MgKnNjaCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7CisJc3RydWN0IG1xX3NjaGVkICpwcml2ID0gcWRpc2NfcHJpdihzY2gpOworCXN0cnVjdCBRZGlzYyAqcWRpc2M7CisJdW5zaWduZWQgaW50IG50eDsKKworCWZvciAobnR4ID0gMDsgbnR4IDwgZGV2LT5udW1fdHhfcXVldWVzOyBudHgrKykgeworCQlxZGlzYyA9IHByaXYtPnFkaXNjc1tudHhdOworCQlxZGlzYyA9IGRldl9ncmFmdF9xZGlzYyhxZGlzYy0+ZGV2X3F1ZXVlLCBxZGlzYyk7CisJCWlmIChxZGlzYykKKwkJCXFkaXNjX2Rlc3Ryb3kocWRpc2MpOworCX0KKwlrZnJlZShwcml2LT5xZGlzY3MpOworCXByaXYtPnFkaXNjcyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXFfZHVtcChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7CisJc3RydWN0IFFkaXNjICpxZGlzYzsKKwl1bnNpZ25lZCBpbnQgbnR4OworCisJc2NoLT5xLnFsZW4gPSAwOworCW1lbXNldCgmc2NoLT5ic3RhdHMsIDAsIHNpemVvZihzY2gtPmJzdGF0cykpOworCW1lbXNldCgmc2NoLT5xc3RhdHMsIDAsIHNpemVvZihzY2gtPnFzdGF0cykpOworCisJZm9yIChudHggPSAwOyBudHggPCBkZXYtPm51bV90eF9xdWV1ZXM7IG50eCsrKSB7CisJCXFkaXNjID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIG50eCktPnFkaXNjX3NsZWVwaW5nOworCQlzcGluX2xvY2tfYmgocWRpc2NfbG9jayhxZGlzYykpOworCQlzY2gtPnEucWxlbgkJKz0gcWRpc2MtPnEucWxlbjsKKwkJc2NoLT5ic3RhdHMuYnl0ZXMJKz0gcWRpc2MtPmJzdGF0cy5ieXRlczsKKwkJc2NoLT5ic3RhdHMucGFja2V0cwkrPSBxZGlzYy0+YnN0YXRzLnBhY2tldHM7CisJCXNjaC0+cXN0YXRzLnFsZW4JKz0gcWRpc2MtPnFzdGF0cy5xbGVuOworCQlzY2gtPnFzdGF0cy5iYWNrbG9nCSs9IHFkaXNjLT5xc3RhdHMuYmFja2xvZzsKKwkJc2NoLT5xc3RhdHMuZHJvcHMJKz0gcWRpc2MtPnFzdGF0cy5kcm9wczsKKwkJc2NoLT5xc3RhdHMucmVxdWV1ZXMJKz0gcWRpc2MtPnFzdGF0cy5yZXF1ZXVlczsKKwkJc2NoLT5xc3RhdHMub3ZlcmxpbWl0cwkrPSBxZGlzYy0+cXN0YXRzLm92ZXJsaW1pdHM7CisJCXNwaW5fdW5sb2NrX2JoKHFkaXNjX2xvY2socWRpc2MpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICptcV9xdWV1ZV9nZXQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpOworCXVuc2lnbmVkIGxvbmcgbnR4ID0gY2wgLSAxOworCisJaWYgKG50eCA+PSBkZXYtPm51bV90eF9xdWV1ZXMpCisJCXJldHVybiBOVUxMOworCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtcV9zZWxlY3RfcXVldWUoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCB0Y21zZyAqdGNtKQoreworCXVuc2lnbmVkIGludCBudHggPSBUQ19IX01JTih0Y20tPnRjbV9wYXJlbnQpOworCisJaWYgKCFtcV9xdWV1ZV9nZXQoc2NoLCBudHgpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbnR4IC0gMTsKK30KKworc3RhdGljIGludCBtcV9ncmFmdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCwgc3RydWN0IFFkaXNjICpuZXcsCisJCSAgICBzdHJ1Y3QgUWRpc2MgKipvbGQpCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlID0gbXFfcXVldWVfZ2V0KHNjaCwgY2wpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBxZGlzY19kZXYoc2NoKTsKKworCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQorCQlkZXZfZGVhY3RpdmF0ZShkZXYpOworCisJKm9sZCA9IGRldl9ncmFmdF9xZGlzYyhkZXZfcXVldWUsIG5ldyk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkKKwkJZGV2X2FjdGl2YXRlKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUWRpc2MgKm1xX2xlYWYoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlID0gbXFfcXVldWVfZ2V0KHNjaCwgY2wpOworCisJcmV0dXJuIGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmc7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1xX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpCit7CisJdW5zaWduZWQgaW50IG50eCA9IFRDX0hfTUlOKGNsYXNzaWQpOworCisJaWYgKCFtcV9xdWV1ZV9nZXQoc2NoLCBudHgpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbnR4OworfQorCitzdGF0aWMgdm9pZCBtcV9wdXQoc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG1xX2R1bXBfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHVuc2lnbmVkIGxvbmcgY2wsCisJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjbXNnICp0Y20pCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlID0gbXFfcXVldWVfZ2V0KHNjaCwgY2wpOworCisJdGNtLT50Y21fcGFyZW50ID0gVENfSF9ST09UOworCXRjbS0+dGNtX2hhbmRsZSB8PSBUQ19IX01JTihjbCk7CisJdGNtLT50Y21faW5mbyA9IGRldl9xdWV1ZS0+cWRpc2Nfc2xlZXBpbmctPmhhbmRsZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcV9kdW1wX2NsYXNzX3N0YXRzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLAorCQkJICAgICAgIHN0cnVjdCBnbmV0X2R1bXAgKmQpCit7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlID0gbXFfcXVldWVfZ2V0KHNjaCwgY2wpOworCisJc2NoID0gZGV2X3F1ZXVlLT5xZGlzY19zbGVlcGluZzsKKwlpZiAoZ25ldF9zdGF0c19jb3B5X2Jhc2ljKGQsICZzY2gtPmJzdGF0cykgPCAwIHx8CisJICAgIGduZXRfc3RhdHNfY29weV9xdWV1ZShkLCAmc2NoLT5xc3RhdHMpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtcV93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICphcmcpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHFkaXNjX2RldihzY2gpOworCXVuc2lnbmVkIGludCBudHg7CisKKwlpZiAoYXJnLT5zdG9wKQorCQlyZXR1cm47CisKKwlhcmctPmNvdW50ID0gYXJnLT5za2lwOworCWZvciAobnR4ID0gYXJnLT5za2lwOyBudHggPCBkZXYtPm51bV90eF9xdWV1ZXM7IG50eCsrKSB7CisJCWlmIChhcmctPmZuKHNjaCwgbnR4ICsgMSwgYXJnKSA8IDApIHsKKwkJCWFyZy0+c3RvcCA9IDE7CisJCQlicmVhazsKKwkJfQorCQlhcmctPmNvdW50Kys7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBtcV9jbGFzc19vcHMgPSB7CisJLnNlbGVjdF9xdWV1ZQk9IG1xX3NlbGVjdF9xdWV1ZSwKKwkuZ3JhZnQJCT0gbXFfZ3JhZnQsCisJLmxlYWYJCT0gbXFfbGVhZiwKKwkuZ2V0CQk9IG1xX2dldCwKKwkucHV0CQk9IG1xX3B1dCwKKwkud2FsawkJPSBtcV93YWxrLAorCS5kdW1wCQk9IG1xX2R1bXBfY2xhc3MsCisJLmR1bXBfc3RhdHMJPSBtcV9kdW1wX2NsYXNzX3N0YXRzLAorfTsKKworc3RydWN0IFFkaXNjX29wcyBtcV9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHsKKwkuY2xfb3BzCQk9ICZtcV9jbGFzc19vcHMsCisJLmlkCQk9ICJtcSIsCisJLnByaXZfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbXFfc2NoZWQpLAorCS5pbml0CQk9IG1xX2luaXQsCisJLmRlc3Ryb3kJPSBtcV9kZXN0cm95LAorCS5hdHRhY2gJCT0gbXFfYXR0YWNoLAorCS5kdW1wCQk9IG1xX2R1bXAsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorfTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCmluZGV4IDkxMjczMTIuLjA2OWY4MWMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwpAQCAtMjk4LDkgKzI5OCw2IEBACiAJc3RydWN0IG11bHRpcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXVuc2lnbmVkIGxvbmcgYmFuZCA9IGFyZyAtIDE7CiAKLQlpZiAoYmFuZCA+PSBxLT5iYW5kcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAobmV3ID09IE5VTEwpCiAJCW5ldyA9ICZub29wX3FkaXNjOwogCkBAIC0zMjAsOSArMzE3LDYgQEAKIAlzdHJ1Y3QgbXVsdGlxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAJdW5zaWduZWQgbG9uZyBiYW5kID0gYXJnIC0gMTsKIAotCWlmIChiYW5kID49IHEtPmJhbmRzKQotCQlyZXR1cm4gTlVMTDsKLQogCXJldHVybiBxLT5xdWV1ZXNbYmFuZF07CiB9CiAKQEAgLTM0OCwzNiArMzQyLDEzIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50IG11bHRpcV9jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHUzMiBoYW5kbGUsIHUzMiBwYXJlbnQsCi0JCQkgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnKQotewotCXVuc2lnbmVkIGxvbmcgY2wgPSAqYXJnOwotCXN0cnVjdCBtdWx0aXFfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKLQotCWlmIChjbCAtIDEgPiBxLT5iYW5kcykKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXVsdGlxX2RlbGV0ZShzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCkKLXsKLQlzdHJ1Y3QgbXVsdGlxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0JaWYgKGNsIC0gMSA+IHEtPmJhbmRzKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IG11bHRpcV9kdW1wX2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsLAogCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNtc2cgKnRjbSkKIHsKIAlzdHJ1Y3QgbXVsdGlxX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKLQlpZiAoY2wgLSAxID4gcS0+YmFuZHMpCi0JCXJldHVybiAtRU5PRU5UOwogCXRjbS0+dGNtX2hhbmRsZSB8PSBUQ19IX01JTihjbCk7Ci0JaWYgKHEtPnF1ZXVlc1tjbC0xXSkKLQkJdGNtLT50Y21faW5mbyA9IHEtPnF1ZXVlc1tjbC0xXS0+aGFuZGxlOworCXRjbS0+dGNtX2luZm8gPSBxLT5xdWV1ZXNbY2wtMV0tPmhhbmRsZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDMwLDggKzQwMSw2IEBACiAJLmxlYWYJCT0JbXVsdGlxX2xlYWYsCiAJLmdldAkJPQltdWx0aXFfZ2V0LAogCS5wdXQJCT0JbXVsdGlxX3B1dCwKLQkuY2hhbmdlCQk9CW11bHRpcV9jaGFuZ2UsCi0JLmRlbGV0ZQkJPQltdWx0aXFfZGVsZXRlLAogCS53YWxrCQk9CW11bHRpcV93YWxrLAogCS50Y2ZfY2hhaW4JPQltdWx0aXFfZmluZF90Y2YsCiAJLmJpbmRfdGNmCT0JbXVsdGlxX2JpbmQsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCmluZGV4IDk0Y2VjZWYuLjBmNzNjNDEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jCisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCkBAIC0yNjIsOSArMjYyLDYgQEAKIAlzdHJ1Y3QgcHJpb19zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXVuc2lnbmVkIGxvbmcgYmFuZCA9IGFyZyAtIDE7CiAKLQlpZiAoYmFuZCA+PSBxLT5iYW5kcykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAobmV3ID09IE5VTEwpCiAJCW5ldyA9ICZub29wX3FkaXNjOwogCkBAIC0yODQsOSArMjgxLDYgQEAKIAlzdHJ1Y3QgcHJpb19zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXVuc2lnbmVkIGxvbmcgYmFuZCA9IGFyZyAtIDE7CiAKLQlpZiAoYmFuZCA+PSBxLT5iYW5kcykKLQkJcmV0dXJuIE5VTEw7Ci0KIAlyZXR1cm4gcS0+cXVldWVzW2JhbmRdOwogfQogCkBAIC0zMTEsMzUgKzMwNSwxMyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBwcmlvX2NoYW5nZShzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGhhbmRsZSwgdTMyIHBhcmVudCwgc3RydWN0IG5sYXR0ciAqKnRjYSwgdW5zaWduZWQgbG9uZyAqYXJnKQotewotCXVuc2lnbmVkIGxvbmcgY2wgPSAqYXJnOwotCXN0cnVjdCBwcmlvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0KLQlpZiAoY2wgLSAxID4gcS0+YmFuZHMpCi0JCXJldHVybiAtRU5PRU5UOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHByaW9fZGVsZXRlKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsKQotewotCXN0cnVjdCBwcmlvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7Ci0JaWYgKGNsIC0gMSA+IHEtPmJhbmRzKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IHByaW9fZHVtcF9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgIHN0cnVjdCB0Y21zZyAqdGNtKQogewogCXN0cnVjdCBwcmlvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKLQlpZiAoY2wgLSAxID4gcS0+YmFuZHMpCi0JCXJldHVybiAtRU5PRU5UOwogCXRjbS0+dGNtX2hhbmRsZSB8PSBUQ19IX01JTihjbCk7Ci0JaWYgKHEtPnF1ZXVlc1tjbC0xXSkKLQkJdGNtLT50Y21faW5mbyA9IHEtPnF1ZXVlc1tjbC0xXS0+aGFuZGxlOworCXRjbS0+dGNtX2luZm8gPSBxLT5xdWV1ZXNbY2wtMV0tPmhhbmRsZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzkyLDggKzM2NCw2IEBACiAJLmxlYWYJCT0JcHJpb19sZWFmLAogCS5nZXQJCT0JcHJpb19nZXQsCiAJLnB1dAkJPQlwcmlvX3B1dCwKLQkuY2hhbmdlCQk9CXByaW9fY2hhbmdlLAotCS5kZWxldGUJCT0JcHJpb19kZWxldGUsCiAJLndhbGsJCT0JcHJpb193YWxrLAogCS50Y2ZfY2hhaW4JPQlwcmlvX2ZpbmRfdGNmLAogCS5iaW5kX3RjZgk9CXByaW9fYmluZCwKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcmVkLmMgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCmluZGV4IDJiZGYyNDEuLjA3MmNkZjQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcmVkLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwpAQCAtMjY4LDggKzI2OCw2IEBACiB7CiAJc3RydWN0IHJlZF9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCi0JaWYgKGNsICE9IDEpCi0JCXJldHVybiAtRU5PRU5UOwogCXRjbS0+dGNtX2hhbmRsZSB8PSBUQ19IX01JTigxKTsKIAl0Y20tPnRjbV9pbmZvID0gcS0+cWRpc2MtPmhhbmRsZTsKIAlyZXR1cm4gMDsKQEAgLTMwOCwxNyArMzA2LDYgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgcmVkX2NoYW5nZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQsIHUzMiBwYXJlbnRpZCwKLQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB1bnNpZ25lZCBsb25nICphcmcpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbnQgcmVkX2RlbGV0ZShzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCkKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQogc3RhdGljIHZvaWQgcmVkX3dhbGsoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBxZGlzY193YWxrZXIgKndhbGtlcikKIHsKIAlpZiAoIXdhbGtlci0+c3RvcCkgewpAQCAtMzMxLDIwICszMTgsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvICoqcmVkX2ZpbmRfdGNmKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGNsKQotewotCXJldHVybiBOVUxMOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyByZWRfY2xhc3Nfb3BzID0gewogCS5ncmFmdAkJPQlyZWRfZ3JhZnQsCiAJLmxlYWYJCT0JcmVkX2xlYWYsCiAJLmdldAkJPQlyZWRfZ2V0LAogCS5wdXQJCT0JcmVkX3B1dCwKLQkuY2hhbmdlCQk9CXJlZF9jaGFuZ2VfY2xhc3MsCi0JLmRlbGV0ZQkJPQlyZWRfZGVsZXRlLAogCS53YWxrCQk9CXJlZF93YWxrLAotCS50Y2ZfY2hhaW4JPQlyZWRfZmluZF90Y2YsCiAJLmR1bXAJCT0JcmVkX2R1bXBfY2xhc3MsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3NmcS5jIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwppbmRleCA4NzA2OTIwLi5jYjIxMzgwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3NmcS5jCisrKyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKQEAgLTQ5NiwxMiArNDk2LDYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgc2ZxX2NoYW5nZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQsIHUzMiBwYXJlbnRpZCwKLQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB1bnNpZ25lZCBsb25nICphcmcpCi17Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzZnFfZ2V0KHN0cnVjdCBRZGlzYyAqc2NoLCB1MzIgY2xhc3NpZCkKIHsKIAlyZXR1cm4gMDsKQEAgLTU2MCw3ICs1NTQsNiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBzZnFfY2xhc3Nfb3BzID0gewogCS5nZXQJCT0Jc2ZxX2dldCwKLQkuY2hhbmdlCQk9CXNmcV9jaGFuZ2VfY2xhc3MsCiAJLnRjZl9jaGFpbgk9CXNmcV9maW5kX3RjZiwKIAkuZHVtcAkJPQlzZnFfZHVtcF9jbGFzcywKIAkuZHVtcF9zdGF0cwk9CXNmcV9kdW1wX2NsYXNzX3N0YXRzLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YmYuYyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKaW5kZXggZTIyZGZlOC4uOGZiODEwNyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90YmYuYworKysgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCkBAIC0zNjgsOSArMzY4LDYgQEAKIHsKIAlzdHJ1Y3QgdGJmX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKLQlpZiAoY2wgIT0gMSkgCS8qIG9ubHkgb25lIGNsYXNzICovCi0JCXJldHVybiAtRU5PRU5UOwotCiAJdGNtLT50Y21faGFuZGxlIHw9IFRDX0hfTUlOKDEpOwogCXRjbS0+dGNtX2luZm8gPSBxLT5xZGlzYy0+aGFuZGxlOwogCkBAIC00MTAsMTcgKzQwNyw2IEBACiB7CiB9CiAKLXN0YXRpYyBpbnQgdGJmX2NoYW5nZV9jbGFzcyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQsIHUzMiBwYXJlbnRpZCwKLQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB1bnNpZ25lZCBsb25nICphcmcpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbnQgdGJmX2RlbGV0ZShzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KIHN0YXRpYyB2b2lkIHRiZl93YWxrKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyICp3YWxrZXIpCiB7CiAJaWYgKCF3YWxrZXItPnN0b3ApIHsKQEAgLTQzMywyMSArNDE5LDEzIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHRjZl9wcm90byAqKnRiZl9maW5kX3RjZihzdHJ1Y3QgUWRpc2MgKnNjaCwgdW5zaWduZWQgbG9uZyBjbCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBRZGlzY19jbGFzc19vcHMgdGJmX2NsYXNzX29wcyA9CiB7CiAJLmdyYWZ0CQk9CXRiZl9ncmFmdCwKIAkubGVhZgkJPQl0YmZfbGVhZiwKIAkuZ2V0CQk9CXRiZl9nZXQsCiAJLnB1dAkJPQl0YmZfcHV0LAotCS5jaGFuZ2UJCT0JdGJmX2NoYW5nZV9jbGFzcywKLQkuZGVsZXRlCQk9CXRiZl9kZWxldGUsCiAJLndhbGsJCT0JdGJmX3dhbGssCi0JLnRjZl9jaGFpbgk9CXRiZl9maW5kX3RjZiwKIAkuZHVtcAkJPQl0YmZfZHVtcF9jbGFzcywKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGVxbC5jIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKaW5kZXggOWMwMDJiNi4uNWEwMDJjMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90ZXFsLmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCXJldHVybiBfX3RlcWxfcmVzb2x2ZShza2IsIHNrYl9yZXMsIGRldik7CiB9CiAKLXN0YXRpYyBpbnQgdGVxbF9tYXN0ZXJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHRlcWxfbWFzdGVyX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGVxbF9tYXN0ZXIgKm1hc3RlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOwpAQCAtMzA3LDE0ICszMDcsMTQgQEAKIAogCQkJCWlmICghbmV0aWZfdHhfcXVldWVfc3RvcHBlZChzbGF2ZV90eHEpICYmCiAJCQkJICAgICFuZXRpZl90eF9xdWV1ZV9mcm96ZW4oc2xhdmVfdHhxKSAmJgotCQkJCSAgICBzbGF2ZV9vcHMtPm5kb19zdGFydF94bWl0KHNrYiwgc2xhdmUpID09IDApIHsKKwkJCQkgICAgc2xhdmVfb3BzLT5uZG9fc3RhcnRfeG1pdChza2IsIHNsYXZlKSA9PSBORVRERVZfVFhfT0spIHsKIAkJCQkJdHhxX3RyYW5zX3VwZGF0ZShzbGF2ZV90eHEpOwogCQkJCQlfX25ldGlmX3R4X3VubG9jayhzbGF2ZV90eHEpOwogCQkJCQltYXN0ZXItPnNsYXZlcyA9IE5FWFRfU0xBVkUocSk7CiAJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJCQkJdHhxLT50eF9wYWNrZXRzKys7CiAJCQkJCXR4cS0+dHhfYnl0ZXMgKz0gbGVuZ3RoOwotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCQl9CiAJCQkJX19uZXRpZl90eF91bmxvY2soc2xhdmVfdHhxKTsKIAkJCX0KQEAgLTMyMyw3ICszMjMsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMToKIAkJCW1hc3Rlci0+c2xhdmVzID0gTkVYVF9TTEFWRShxKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJZGVmYXVsdDoKIAkJCW5vcmVzID0gMTsKIAkJCWJyZWFrOwpAQCAtMzQ1LDcgKzM0NSw3IEBACiBkcm9wOgogCXR4cS0+dHhfZHJvcHBlZCsrOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBzdGF0aWMgaW50IHRlcWxfbWFzdGVyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggNTI1ODY0Yi4uODQ1MDk2MCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTExMiw2ICsxMTIsNyBAQAogCWFzb2MtPmNvb2tpZV9saWZlLnR2X3VzZWMgPSAoc3AtPmFzc29jcGFyYW1zLnNhc29jX2Nvb2tpZV9saWZlICUgMTAwMCkKIAkJCQkJKiAxMDAwOwogCWFzb2MtPmZyYWdfcG9pbnQgPSAwOworCWFzb2MtPnVzZXJfZnJhZyA9IHNwLT51c2VyX2ZyYWc7CiAKIAkvKiBTZXQgdGhlIGFzc29jaWF0aW9uIG1heF9yZXRyYW5zIGFuZCBSVE8gdmFsdWVzIGZyb20gdGhlCiAJICogc29ja2V0IHZhbHVlcy4KQEAgLTIwMiw2ICsyMDMsNyBAQAogCWFzb2MtPmFfcnduZCA9IGFzb2MtPnJ3bmQ7CiAKIAlhc29jLT5yd25kX292ZXIgPSAwOworCWFzb2MtPnJ3bmRfcHJlc3MgPSAwOwogCiAJLyogVXNlIG15IG93biBtYXggd2luZG93IHVudGlsIEkgbGVhcm4gc29tZXRoaW5nIGJldHRlci4gICovCiAJYXNvYy0+cGVlci5yd25kID0gU0NUUF9ERUZBVUxUX01BWFdJTkRPVzsKQEAgLTU4Miw2ICs1ODQsMzMgQEAKIAkgICAgYXNvYy0+YWRkaXBfbGFzdF9hc2NvbmYtPnRyYW5zcG9ydCA9PSBwZWVyKQogCQlhc29jLT5hZGRpcF9sYXN0X2FzY29uZi0+dHJhbnNwb3J0ID0gTlVMTDsKIAorCS8qIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSB0cmFuc21pdHRlZCBsaXN0LCB3ZSBoYXZlIHRvCisJICogc2F2ZSBpdCBvZmYuICBUaGUgYmVzdCBwbGFjZSBpcyB0aGUgYWN0aXZlIHBhdGguCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZwZWVyLT50cmFuc21pdHRlZCkpIHsKKwkJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICphY3RpdmUgPSBhc29jLT5wZWVyLmFjdGl2ZV9wYXRoOworCQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2g7CisKKwkJLyogUmVzZXQgdGhlIHRyYW5zcG9ydCBvZiBlYWNoIGNodW5rIG9uIHRoaXMgbGlzdCAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoLCAmcGVlci0+dHJhbnNtaXR0ZWQsCisJCQkJCXRyYW5zbWl0dGVkX2xpc3QpIHsKKwkJCWNoLT50cmFuc3BvcnQgPSBOVUxMOworCQkJY2gtPnJ0dF9pbl9wcm9ncmVzcyA9IDA7CisJCX0KKworCQlsaXN0X3NwbGljZV90YWlsX2luaXQoJnBlZXItPnRyYW5zbWl0dGVkLAorCQkJCQkmYWN0aXZlLT50cmFuc21pdHRlZCk7CisKKwkJLyogU3RhcnQgYSBUMyB0aW1lciBoZXJlIGluIGNhc2UgaXQgd2Fzbid0IHJ1bm5pbmcgc28KKwkJICogdGhhdCB0aGVzZSBtaWdyYXRlZCBwYWNrZXRzIGhhdmUgYSBjaGFuY2UgdG8gZ2V0CisJCSAqIHJldHJuYXNtaXR0ZWQuCisJCSAqLworCQlpZiAoIXRpbWVyX3BlbmRpbmcoJmFjdGl2ZS0+VDNfcnR4X3RpbWVyKSkKKwkJCWlmICghbW9kX3RpbWVyKCZhY3RpdmUtPlQzX3J0eF90aW1lciwKKwkJCQkJamlmZmllcyArIGFjdGl2ZS0+cnRvKSkKKwkJCQlzY3RwX3RyYW5zcG9ydF9ob2xkKGFjdGl2ZSk7CisJfQorCiAJYXNvYy0+cGVlci50cmFuc3BvcnRfY291bnQtLTsKIAogCXNjdHBfdHJhbnNwb3J0X2ZyZWUocGVlcik7CkBAIC02NTEsMTMgKzY4MCwxNSBAQAogCSAqLwogCXBlZXItPnBhcmFtX2ZsYWdzID0gYXNvYy0+cGFyYW1fZmxhZ3M7CiAKKwlzY3RwX3RyYW5zcG9ydF9yb3V0ZShwZWVyLCBOVUxMLCBzcCk7CisKIAkvKiBJbml0aWFsaXplIHRoZSBwbXR1IG9mIHRoZSB0cmFuc3BvcnQuICovCi0JaWYgKHBlZXItPnBhcmFtX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkKLQkJc2N0cF90cmFuc3BvcnRfcG10dShwZWVyKTsKLQllbHNlIGlmIChhc29jLT5wYXRobXR1KQotCQlwZWVyLT5wYXRobXR1ID0gYXNvYy0+cGF0aG10dTsKLQllbHNlCi0JCXBlZXItPnBhdGhtdHUgPSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVDsKKwlpZiAocGVlci0+cGFyYW1fZmxhZ3MgJiBTUFBfUE1UVURfRElTQUJMRSkgeworCQlpZiAoYXNvYy0+cGF0aG10dSkKKwkJCXBlZXItPnBhdGhtdHUgPSBhc29jLT5wYXRobXR1OworCQllbHNlCisJCQlwZWVyLT5wYXRobXR1ID0gU0NUUF9ERUZBVUxUX01BWFNFR01FTlQ7CisJfQogCiAJLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdHJhbnNwb3J0IGFkZHIgb24gdGhpcyBhc3NvY2lhdGlvbiwKIAkgKiBpbml0aWFsaXplIHRoZSBhc3NvY2lhdGlvbiBQTVRVIHRvIHRoZSBwZWVyJ3MgUE1UVS4KQEAgLTY3Myw3ICs3MDQsNyBAQAogCQkJICAiJWRcbiIsIGFzb2MsIGFzb2MtPnBhdGhtdHUpOwogCXBlZXItPnBtdHVfcGVuZGluZyA9IDA7CiAKLQlhc29jLT5mcmFnX3BvaW50ID0gc2N0cF9mcmFnX3BvaW50KHNwLCBhc29jLT5wYXRobXR1KTsKKwlhc29jLT5mcmFnX3BvaW50ID0gc2N0cF9mcmFnX3BvaW50KGFzb2MsIGFzb2MtPnBhdGhtdHUpOwogCiAJLyogVGhlIGFzb2MtPnBlZXIucG9ydCBtaWdodCBub3QgYmUgbWVhbmluZ2Z1bCB5ZXQsIGJ1dAogCSAqIGluaXRpYWxpemUgdGhlIHBhY2tldCBzdHJ1Y3R1cmUgYW55d2F5LgpAQCAtODEwLDExICs4NDEsMTYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNDVFBfVFJBTlNQT1JUX0RPV046Ci0JCS8qIGlmIHRoZSB0cmFuc29ydCB3YXMgbmV2ZXIgY29uZmlybWVkLCBkbyBub3QgdHJhbnNpdGlvbiBpdAotCQkgKiB0byBpbmFjdGl2ZSBzdGF0ZS4KKwkJLyogSWYgdGhlIHRyYW5zcG9ydCB3YXMgbmV2ZXIgY29uZmlybWVkLCBkbyBub3QgdHJhbnNpdGlvbiBpdAorCQkgKiB0byBpbmFjdGl2ZSBzdGF0ZS4gIEFsc28sIHJlbGVhc2UgdGhlIGNhY2hlZCByb3V0ZSBzaW5jZQorCQkgKiB0aGVyZSBtYXkgYmUgYSBiZXR0ZXIgcm91dGUgbmV4dCB0aW1lLgogCQkgKi8KIAkJaWYgKHRyYW5zcG9ydC0+c3RhdGUgIT0gU0NUUF9VTkNPTkZJUk1FRCkKIAkJCXRyYW5zcG9ydC0+c3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQllbHNlIHsKKwkJCWRzdF9yZWxlYXNlKHRyYW5zcG9ydC0+ZHN0KTsKKwkJCXRyYW5zcG9ydC0+ZHN0ID0gTlVMTDsKKwkJfQogCiAJCXNwY19zdGF0ZSA9IFNDVFBfQUREUl9VTlJFQUNIQUJMRTsKIAkJYnJlYWs7CkBAIC0xMzI0LDkgKzEzNjAsOCBAQAogCX0KIAogCWlmIChwbXR1KSB7Ci0JCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhhc29jLT5iYXNlLnNrKTsKIAkJYXNvYy0+cGF0aG10dSA9IHBtdHU7Ci0JCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoc3AsIHBtdHUpOworCQlhc29jLT5mcmFnX3BvaW50ID0gc2N0cF9mcmFnX3BvaW50KGFzb2MsIHBtdHUpOwogCX0KIAogCVNDVFBfREVCVUdfUFJJTlRLKCIlczogYXNvYzolcCwgcG10dTolZCwgZnJhZ19wb2ludDolZFxuIiwKQEAgLTEzNjksNiArMTQwNCwxNyBAQAogCQlhc29jLT5yd25kICs9IGxlbjsKIAl9CiAKKwkvKiBJZiB3ZSBoYWQgd2luZG93IHByZXNzdXJlLCBzdGFydCByZWNvdmVyaW5nIGl0CisJICogb25jZSBvdXIgcnduZCBoYWQgcmVhY2hlZCB0aGUgYWNjdW11bGF0ZWQgcHJlc3N1cmUKKwkgKiB0aHJlc2hvbGQuICBUaGUgaWRlYSBpcyB0byByZWNvdmVyIHNsb3dseSwgYnV0IHVwCisJICogdG8gdGhlIGluaXRpYWwgYWR2ZXJ0aXNlZCB3aW5kb3cuCisJICovCisJaWYgKGFzb2MtPnJ3bmRfcHJlc3MgJiYgYXNvYy0+cnduZCA+PSBhc29jLT5yd25kX3ByZXNzKSB7CisJCWludCBjaGFuZ2UgPSBtaW4oYXNvYy0+cGF0aG10dSwgYXNvYy0+cnduZF9wcmVzcyk7CisJCWFzb2MtPnJ3bmQgKz0gY2hhbmdlOworCQlhc29jLT5yd25kX3ByZXNzIC09IGNoYW5nZTsKKwl9CisKIAlTQ1RQX0RFQlVHX1BSSU5USygiJXM6IGFzb2MgJXAgcnduZCBpbmNyZWFzZWQgYnkgJWQgdG8gKCV1LCAldSkgIgogCQkJICAiLSAldVxuIiwgX19mdW5jX18sIGFzb2MsIGxlbiwgYXNvYy0+cnduZCwKIAkJCSAgYXNvYy0+cnduZF9vdmVyLCBhc29jLT5hX3J3bmQpOwpAQCAtMTQwMSwxNyArMTQ0NywzOCBAQAogLyogRGVjcmVhc2UgYXNvYydzIHJ3bmQgYnkgbGVuLiAqLwogdm9pZCBzY3RwX2Fzc29jX3J3bmRfZGVjcmVhc2Uoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHVuc2lnbmVkIGxlbikKIHsKKwlpbnQgcnhfY291bnQ7CisJaW50IG92ZXIgPSAwOworCiAJU0NUUF9BU1NFUlQoYXNvYy0+cnduZCwgInJ3bmQgemVybyIsIHJldHVybik7CiAJU0NUUF9BU1NFUlQoIWFzb2MtPnJ3bmRfb3ZlciwgInJ3bmRfb3ZlciBub3QgemVybyIsIHJldHVybik7CisKKwlpZiAoYXNvYy0+ZXAtPnJjdmJ1Zl9wb2xpY3kpCisJCXJ4X2NvdW50ID0gYXRvbWljX3JlYWQoJmFzb2MtPnJtZW1fYWxsb2MpOworCWVsc2UKKwkJcnhfY291bnQgPSBhdG9taWNfcmVhZCgmYXNvYy0+YmFzZS5zay0+c2tfcm1lbV9hbGxvYyk7CisKKwkvKiBJZiB3ZSd2ZSByZWFjaGVkIG9yIG92ZXJmbG93ZWQgb3VyIHJlY2VpdmUgYnVmZmVyLCBhbm5vdW5jZQorCSAqIGEgMCByd25kIGlmIHJ3bmQgd291bGQgc3RpbGwgYmUgcG9zaXRpdmUuICBTdG9yZSB0aGUKKwkgKiB0aGUgcG90dGVudGlhbCBwcmVzc3VyZSBvdmVyZmxvdyBzbyB0aGF0IHRoZSB3aW5kb3cgY2FuIGJlIHJlc3RvcmVkCisJICogYmFjayB0byBvcmlnaW5hbCB2YWx1ZS4KKwkgKi8KKwlpZiAocnhfY291bnQgPj0gYXNvYy0+YmFzZS5zay0+c2tfcmN2YnVmKQorCQlvdmVyID0gMTsKKwogCWlmIChhc29jLT5yd25kID49IGxlbikgewogCQlhc29jLT5yd25kIC09IGxlbjsKKwkJaWYgKG92ZXIpIHsKKwkJCWFzb2MtPnJ3bmRfcHJlc3MgPSBhc29jLT5yd25kOworCQkJYXNvYy0+cnduZCA9IDA7CisJCX0KIAl9IGVsc2UgewogCQlhc29jLT5yd25kX292ZXIgPSBsZW4gLSBhc29jLT5yd25kOwogCQlhc29jLT5yd25kID0gMDsKIAl9Ci0JU0NUUF9ERUJVR19QUklOVEsoIiVzOiBhc29jICVwIHJ3bmQgZGVjcmVhc2VkIGJ5ICVkIHRvICgldSwgJXUpXG4iLAorCVNDVFBfREVCVUdfUFJJTlRLKCIlczogYXNvYyAlcCByd25kIGRlY3JlYXNlZCBieSAlZCB0byAoJXUsICV1LCAldSlcbiIsCiAJCQkgIF9fZnVuY19fLCBhc29jLCBsZW4sIGFzb2MtPnJ3bmQsCi0JCQkgIGFzb2MtPnJ3bmRfb3Zlcik7CisJCQkgIGFzb2MtPnJ3bmRfb3ZlciwgYXNvYy0+cnduZF9wcmVzcyk7CiB9CiAKIC8qIEJ1aWxkIHRoZSBiaW5kIGFkZHJlc3MgbGlzdCBmb3IgdGhlIGFzc29jaWF0aW9uIGJhc2VkIG9uIGluZm8gZnJvbSB0aGUKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2JpbmRfYWRkci5jIGIvbmV0L3NjdHAvYmluZF9hZGRyLmMKaW5kZXggNmQ1OTQ0YS4uMTNhNmZiYSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYmluZF9hZGRyLmMKKysrIGIvbmV0L3NjdHAvYmluZF9hZGRyLmMKQEAgLTUxMCw5ICs1MTAsMjggQEAKIAkgKiBvZiByZXF1ZXN0ZWQgZGVzdGluYXRpb24gYWRkcmVzcywgc2VuZGVyIGFuZCByZWNlaXZlcgogCSAqIFNIT1VMRCBpbmNsdWRlIGFsbCBvZiBpdHMgYWRkcmVzc2VzIHdpdGggbGV2ZWwgZ3JlYXRlcgogCSAqIHRoYW4gb3IgZXF1YWwgdG8gTC4KKwkgKgorCSAqIEFkZHJlc3Mgc2NvcGluZyBjYW4gYmUgc2VsZWN0aXZlbHkgY29udHJvbGxlZCB2aWEgc3lzY3RsCisJICogb3B0aW9uCiAJICovCi0JaWYgKGFkZHJfc2NvcGUgPD0gc2NvcGUpCisJc3dpdGNoIChzY3RwX3Njb3BlX3BvbGljeSkgeworCWNhc2UgU0NUUF9TQ09QRV9QT0xJQ1lfRElTQUJMRToKIAkJcmV0dXJuIDE7CisJY2FzZSBTQ1RQX1NDT1BFX1BPTElDWV9FTkFCTEU6CisJCWlmIChhZGRyX3Njb3BlIDw9IHNjb3BlKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TQ09QRV9QT0xJQ1lfUFJJVkFURToKKwkJaWYgKGFkZHJfc2NvcGUgPD0gc2NvcGUgfHwgU0NUUF9TQ09QRV9QUklWQVRFID09IGFkZHJfc2NvcGUpCisJCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NDT1BFX1BPTElDWV9MSU5LOgorCQlpZiAoYWRkcl9zY29wZSA8PSBzY29wZSB8fCBTQ1RQX1NDT1BFX0xJTksgPT0gYWRkcl9zY29wZSkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL2NodW5rLmMgYi9uZXQvc2N0cC9jaHVuay5jCmluZGV4IDE3NDhlZjkuLmFjZjdjNGQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2NodW5rLmMKKysrIGIvbmV0L3NjdHAvY2h1bmsuYwpAQCAtNTksNiArNTksNyBAQAogCW1zZy0+Y2FuX2FiYW5kb24gPSAwOwogCW1zZy0+ZXhwaXJlc19hdCA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJm1zZy0+Y2h1bmtzKTsKKwltc2ctPm1zZ19zaXplID0gMDsKIH0KIAogLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGF0YW1zZy4gKi8KQEAgLTczLDYgKzc0LDE5IEBACiAJcmV0dXJuIG1zZzsKIH0KIAordm9pZCBzY3RwX2RhdGFtc2dfZnJlZShzdHJ1Y3Qgc2N0cF9kYXRhbXNnICptc2cpCit7CisJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOworCisJLyogVGhpcyBkb2Vzbid0IGhhdmUgdG8gYmUgYSBfc2FmZSB2YWlyYW50IGJlY2F1c2UKKwkgKiBzY3RwX2NodW5rX2ZyZWUoKSBvbmx5IGRyb3BzIHRoZSByZWZzLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZtc2ctPmNodW5rcywgZnJhZ19saXN0KQorCQlzY3RwX2NodW5rX2ZyZWUoY2h1bmspOworCisJc2N0cF9kYXRhbXNnX3B1dChtc2cpOworfQorCiAvKiBGaW5hbCBkZXN0cnVjdHJ1Y3Rpb24gb2YgZGF0YW1zZyBtZW1vcnkuICovCiBzdGF0aWMgdm9pZCBzY3RwX2RhdGFtc2dfZGVzdHJveShzdHJ1Y3Qgc2N0cF9kYXRhbXNnICptc2cpCiB7CkBAIC0xNDIsNiArMTU2LDcgQEAKIHsKIAlzY3RwX2RhdGFtc2dfaG9sZChtc2cpOwogCWNodW5rLT5tc2cgPSBtc2c7CisJbXNnLT5tc2dfc2l6ZSArPSBjaHVuay0+c2tiLT5sZW47CiB9CiAKIApAQCAtMTU4LDYgKzE3Myw3IEBACiB7CiAJaW50IG1heCwgd2hvbGUsIGksIG9mZnNldCwgb3ZlciwgZXJyOwogCWludCBsZW4sIGZpcnN0X2xlbjsKKwlpbnQgbWF4X2RhdGE7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOwogCXN0cnVjdCBzY3RwX2RhdGFtc2cgKm1zZzsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOwpAQCAtMTc5LDggKzE5NSwxNCBAQAogCQkJCSAgX19mdW5jX18sIG1zZywgbXNnLT5leHBpcmVzX2F0LCBqaWZmaWVzKTsKIAl9CiAKLQltYXggPSBhc29jLT5mcmFnX3BvaW50OworCS8qIFRoaXMgaXMgdGhlIGJpZ2dlc3QgcG9zc2libGUgREFUQSBjaHVuayB0aGF0IGNhbiBmaXQgaW50bworCSAqIHRoZSBwYWNrZXQKKwkgKi8KKwltYXhfZGF0YSA9IGFzb2MtPnBhdGhtdHUgLQorCQlzY3RwX3NrKGFzb2MtPmJhc2Uuc2spLT5wZi0+YWYtPm5ldF9oZWFkZXJfbGVuIC0KKwkJc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKTsKIAorCW1heCA9IGFzb2MtPmZyYWdfcG9pbnQ7CiAJLyogSWYgdGhlIHRoZSBwZWVyIHJlcXVlc3RlZCB0aGF0IHdlIGF1dGhlbnRpY2F0ZSBEQVRBIGNodW5rcwogCSAqIHdlIG5lZWQgdG8gYWNjb3VuZCBmb3IgYnVuZGxpbmcgb2YgdGhlIEFVVEggY2h1bmtzIGFsb25nIHdpdGgKIAkgKiBEQVRBLgpAQCAtMTg5LDIzICsyMTEsNDEgQEAKIAkJc3RydWN0IHNjdHBfaG1hYyAqaG1hY19kZXNjID0gc2N0cF9hdXRoX2Fzb2NfZ2V0X2htYWMoYXNvYyk7CiAKIAkJaWYgKGhtYWNfZGVzYykKLQkJCW1heCAtPSBXT1JEX1JPVU5EKHNpemVvZihzY3RwX2F1dGhfY2h1bmtfdCkgKworCQkJbWF4X2RhdGEgLT0gV09SRF9ST1VORChzaXplb2Yoc2N0cF9hdXRoX2NodW5rX3QpICsKIAkJCQkJICAgIGhtYWNfZGVzYy0+aG1hY19sZW4pOwogCX0KIAorCS8qIE5vdywgY2hlY2sgaWYgd2UgbmVlZCB0byByZWR1Y2Ugb3VyIG1heCAqLworCWlmIChtYXggPiBtYXhfZGF0YSkKKwkJbWF4ID0gbWF4X2RhdGE7CisKIAl3aG9sZSA9IDA7CiAJZmlyc3RfbGVuID0gbWF4OwogCi0JLyogRW5jb3VyYWdlIENvb2tpZS1FQ0hPIGJ1bmRsaW5nLiAqLwotCWlmIChhc29jLT5zdGF0ZSA8IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgewotCQl3aG9sZSA9IG1zZ19sZW4gLyAobWF4IC0gU0NUUF9BUkJJVFJBUllfQ09PS0lFX0VDSE9fTEVOKTsKKwkvKiBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHBlbmRpbmcgU0FDSyBhbmQgdHJ5IHRvIGxldCBpdCBiZSBidW5kbGVkCisJICogd2l0aCB0aGlzIG1lc3NhZ2UuICBEbyB0aGlzIGlmIHdlIGRvbid0IGhhdmUgYW55IGRhdGEgcXVldWVkIGFscmVhZHkuCisJICogVG8gY2hlY2sgdGhhdCwgbG9vayBhdCBvdXRfcWxlbiBhbmQgcmV0cmFuc21pdCBsaXN0LgorCSAqIE5PVEU6IHdlIHdpbGwgbm90IHJlZHVjZSB0byBhY2NvdW50IGZvciBTQUNLLCBpZiB0aGUgbWVzc2FnZSB3b3VsZAorCSAqIG5vdCBoYXZlIGJlZW4gZnJhZ21lbnRlZC4KKwkgKi8KKwlpZiAodGltZXJfcGVuZGluZygmYXNvYy0+dGltZXJzW1NDVFBfRVZFTlRfVElNRU9VVF9TQUNLXSkgJiYKKwkgICAgYXNvYy0+b3V0cXVldWUub3V0X3FsZW4gPT0gMCAmJgorCSAgICBsaXN0X2VtcHR5KCZhc29jLT5vdXRxdWV1ZS5yZXRyYW5zbWl0KSAmJgorCSAgICBtc2dfbGVuID4gbWF4KQorCQltYXhfZGF0YSAtPSBXT1JEX1JPVU5EKHNpemVvZihzY3RwX3NhY2tfY2h1bmtfdCkpOwogCi0JCS8qIEFjY291bnQgZm9yIHRoZSBEQVRBIHRvIGJlIGJ1bmRsZWQgd2l0aCB0aGUgQ09PS0lFLUVDSE8uICovCi0JCWlmICh3aG9sZSkgewotCQkJZmlyc3RfbGVuID0gbWF4IC0gU0NUUF9BUkJJVFJBUllfQ09PS0lFX0VDSE9fTEVOOwotCQkJbXNnX2xlbiAtPSBmaXJzdF9sZW47Ci0JCQl3aG9sZSA9IDE7Ci0JCX0KKwkvKiBFbmNvdXJhZ2UgQ29va2llLUVDSE8gYnVuZGxpbmcuICovCisJaWYgKGFzb2MtPnN0YXRlIDwgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKQorCQltYXhfZGF0YSAtPSBTQ1RQX0FSQklUUkFSWV9DT09LSUVfRUNIT19MRU47CisKKwkvKiBOb3cgdGhhdCB3ZSBhZGp1c3RlZCBjb21wbGV0ZWx5LCByZXNldCBmaXJzdF9sZW4gKi8KKwlpZiAoZmlyc3RfbGVuID4gbWF4X2RhdGEpCisJCWZpcnN0X2xlbiA9IG1heF9kYXRhOworCisJLyogQWNjb3VudCBmb3IgYSBkaWZmZXJlbnQgc2l6ZWQgZmlyc3QgZnJhZ21lbnQgKi8KKwlpZiAobXNnX2xlbiA+PSBmaXJzdF9sZW4pIHsKKwkJbXNnX2xlbiAtPSBmaXJzdF9sZW47CisJCXdob2xlID0gMTsKIAl9CiAKIAkvKiBIb3cgbWFueSBmdWxsIHNpemVkPyAgSG93IG1hbnkgYnl0ZXMgbGVmdG92ZXI/ICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9kZWJ1Zy5jIGIvbmV0L3NjdHAvZGVidWcuYwppbmRleCA3ZmY1NDhhLi5iZjI0ZmE2IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9kZWJ1Zy5jCisrKyBiL25ldC9zY3RwL2RlYnVnLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNlbmRpZgkvKiBTQ1RQX0RFQlVHICovCiAKIC8qIFRoZXNlIGFyZSBwcmludGFibGUgZm9ybXMgb2YgQ2h1bmsgSUQncyBmcm9tIHNlY3Rpb24gMy4xLiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpzY3RwX2NpZF90YmxbU0NUUF9OVU1fQkFTRV9DSFVOS19UWVBFU10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2N0cF9jaWRfdGJsW1NDVFBfTlVNX0JBU0VfQ0hVTktfVFlQRVNdID0gewogCSJEQVRBIiwKIAkiSU5JVCIsCiAJIklOSVRfQUNLIiwKQEAgLTk3LDcgKzk3LDcgQEAKIH0KIAogLyogVGhlc2UgYXJlIHByaW50YWJsZSBmb3JtcyBvZiB0aGUgc3RhdGVzLiAgKi8KLWNvbnN0IGNoYXIgKnNjdHBfc3RhdGVfdGJsW1NDVFBfU1RBVEVfTlVNX1NUQVRFU10gPSB7Citjb25zdCBjaGFyICpjb25zdCBzY3RwX3N0YXRlX3RibFtTQ1RQX1NUQVRFX05VTV9TVEFURVNdID0gewogCSJTVEFURV9FTVBUWSIsCiAJIlNUQVRFX0NMT1NFRCIsCiAJIlNUQVRFX0NPT0tJRV9XQUlUIiwKQEAgLTExMCw3ICsxMTAsNyBAQAogfTsKIAogLyogRXZlbnRzIHRoYXQgY291bGQgY2hhbmdlIHRoZSBzdGF0ZSBvZiBhbiBhc3NvY2lhdGlvbi4gICovCi1jb25zdCBjaGFyICpzY3RwX2V2dHR5cGVfdGJsW10gPSB7Citjb25zdCBjaGFyICpjb25zdCBzY3RwX2V2dHR5cGVfdGJsW10gPSB7CiAJIkVWRU5UX1RfdW5rbm93biIsCiAJIkVWRU5UX1RfQ0hVTksiLAogCSJFVkVOVF9UX1RJTUVPVVQiLApAQCAtMTE5LDcgKzExOSw3IEBACiB9OwogCiAvKiBSZXR1cm4gdmFsdWUgb2YgYSBzdGF0ZSBmdW5jdGlvbiAqLwotY29uc3QgY2hhciAqc2N0cF9zdGF0dXNfdGJsW10gPSB7Citjb25zdCBjaGFyICpjb25zdCBzY3RwX3N0YXR1c190YmxbXSA9IHsKIAkiRElTUE9TSVRJT05fRElTQ0FSRCIsCiAJIkRJU1BPU0lUSU9OX0NPTlNVTUUiLAogCSJESVNQT1NJVElPTl9OT01FTSIsCkBAIC0xMzIsNyArMTMyLDcgQEAKIH07CiAKIC8qIFByaW50YWJsZSBmb3JtcyBvZiBwcmltaXRpdmVzICovCi1zdGF0aWMgY29uc3QgY2hhciAqc2N0cF9wcmltaXRpdmVfdGJsW1NDVFBfTlVNX1BSSU1JVElWRV9UWVBFU10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc2N0cF9wcmltaXRpdmVfdGJsW1NDVFBfTlVNX1BSSU1JVElWRV9UWVBFU10gPSB7CiAJIlBSSU1JVElWRV9BU1NPQ0lBVEUiLAogCSJQUklNSVRJVkVfU0hVVERPV04iLAogCSJQUklNSVRJVkVfQUJPUlQiLApAQCAtMTQ5LDcgKzE0OSw3IEBACiAJcmV0dXJuICJ1bmtub3duX3ByaW1pdGl2ZSI7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpzY3RwX290aGVyX3RibFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNjdHBfb3RoZXJfdGJsW10gPSB7CiAJIk5PX1BFTkRJTkdfVFNOIiwKIAkiSUNNUF9QUk9UT19VTlJFQUNIIiwKIH07CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlyZXR1cm4gInVua25vd24gJ290aGVyJyBldmVudCI7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpzY3RwX3RpbWVyX3RibFtdID0geworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNjdHBfdGltZXJfdGJsW10gPSB7CiAJIlRJTUVPVVRfTk9ORSIsCiAJIlRJTUVPVVRfVDFfQ09PS0lFIiwKIAkiVElNRU9VVF9UMV9JTklUIiwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggYjk0YzIxMS4uNWNiZGE4ZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKKysrIGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTYxLDggKzYxLDI0IEBACiAjaW5jbHVkZSA8bmV0L3NjdHAvY2hlY2tzdW0uaD4KIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHByaXZhdGUgaGVscGVycy4gKi8KLXN0YXRpYyBzY3RwX3htaXRfdCBzY3RwX3BhY2tldF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKK3N0YXRpYyBzY3RwX3htaXRfdCBzY3RwX3BhY2tldF9jYW5fYXBwZW5kX2RhdGEoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsCiAJCQkJCSAgIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayk7CitzdGF0aWMgdm9pZCBzY3RwX3BhY2tldF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKKwkJCQkJICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rKTsKK3N0YXRpYyBzY3RwX3htaXRfdCBzY3RwX3BhY2tldF93aWxsX2ZpdChzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKKwkJCQkJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAorCQkJCQl1MTYgY2h1bmtfbGVuKTsKKworc3RhdGljIHZvaWQgc2N0cF9wYWNrZXRfcmVzZXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQpCit7CisJcGFja2V0LT5zaXplID0gcGFja2V0LT5vdmVyaGVhZDsKKwlwYWNrZXQtPmhhc19jb29raWVfZWNobyA9IDA7CisJcGFja2V0LT5oYXNfc2FjayA9IDA7CisJcGFja2V0LT5oYXNfZGF0YSA9IDA7CisJcGFja2V0LT5oYXNfYXV0aCA9IDA7CisJcGFja2V0LT5pcGZyYWdvayA9IDA7CisJcGFja2V0LT5hdXRoID0gTlVMTDsKK30KIAogLyogQ29uZmlnIGEgcGFja2V0LgogICogVGhpcyBhcHBlYXJzIHRvIGJlIGEgZm9sbG93dXAgc2V0IG9mIGluaXRpYWxpemF0aW9ucy4KQEAgLTc1LDEzICs5MSw4IEBACiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXAgdnRhZzoweCV4XG4iLCBfX2Z1bmNfXywKIAkJCSAgcGFja2V0LCB2dGFnKTsKIAorCXNjdHBfcGFja2V0X3Jlc2V0KHBhY2tldCk7CiAJcGFja2V0LT52dGFnID0gdnRhZzsKLQlwYWNrZXQtPmhhc19jb29raWVfZWNobyA9IDA7Ci0JcGFja2V0LT5oYXNfc2FjayA9IDA7Ci0JcGFja2V0LT5oYXNfYXV0aCA9IDA7Ci0JcGFja2V0LT5oYXNfZGF0YSA9IDA7Ci0JcGFja2V0LT5pcGZyYWdvayA9IDA7Ci0JcGFja2V0LT5hdXRoID0gTlVMTDsKIAogCWlmIChlY25fY2FwYWJsZSAmJiBzY3RwX3BhY2tldF9lbXB0eShwYWNrZXQpKSB7CiAJCWNodW5rID0gc2N0cF9nZXRfZWNuZV9wcmVwZW5kKHBhY2tldC0+dHJhbnNwb3J0LT5hc29jKTsKQEAgLTExOSwxNSArMTMwLDkgQEAKIAl9CiAJb3ZlcmhlYWQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKIAlwYWNrZXQtPm92ZXJoZWFkID0gb3ZlcmhlYWQ7Ci0JcGFja2V0LT5zaXplID0gb3ZlcmhlYWQ7CisJc2N0cF9wYWNrZXRfcmVzZXQocGFja2V0KTsKIAlwYWNrZXQtPnZ0YWcgPSAwOwotCXBhY2tldC0+aGFzX2Nvb2tpZV9lY2hvID0gMDsKLQlwYWNrZXQtPmhhc19zYWNrID0gMDsKLQlwYWNrZXQtPmhhc19hdXRoID0gMDsKLQlwYWNrZXQtPmhhc19kYXRhID0gMDsKLQlwYWNrZXQtPmlwZnJhZ29rID0gMDsKIAlwYWNrZXQtPm1hbGxvY2VkID0gMDsKLQlwYWNrZXQtPmF1dGggPSBOVUxMOwogCXJldHVybiBwYWNrZXQ7CiB9CiAKQEAgLTIwNCw3ICsyMDksNyBAQAogCS8qIFNlZSBpZiB0aGlzIGlzIGFuIGF1dGggY2h1bmsgd2UgYXJlIGJ1bmRsaW5nIG9yIGlmCiAJICogYXV0aCBpcyBhbHJlYWR5IGJ1bmRsZWQuCiAJICovCi0JaWYgKGNodW5rLT5jaHVua19oZHItPnR5cGUgPT0gU0NUUF9DSURfQVVUSCB8fCBwa3QtPmF1dGgpCisJaWYgKGNodW5rLT5jaHVua19oZHItPnR5cGUgPT0gU0NUUF9DSURfQVVUSCB8fCBwa3QtPmhhc19hdXRoKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJLyogaWYgdGhlIHBlZXIgZGlkIG5vdCByZXF1ZXN0IHRoaXMgY2h1bmsgdG8gYmUgYXV0aGVudGljYXRlZCwKQEAgLTIzNCwxOCArMjM5LDE5IEBACiAJaWYgKHNjdHBfY2h1bmtfaXNfZGF0YShjaHVuaykgJiYgIXBrdC0+aGFzX3NhY2sgJiYKIAkgICAgIXBrdC0+aGFzX2Nvb2tpZV9lY2hvKSB7CiAJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXI7CiAJCWFzb2MgPSBwa3QtPnRyYW5zcG9ydC0+YXNvYzsKKwkJdGltZXIgPSAmYXNvYy0+dGltZXJzW1NDVFBfRVZFTlRfVElNRU9VVF9TQUNLXTsKIAotCQlpZiAoYXNvYy0+YV9yd25kID4gYXNvYy0+cnduZCkgeworCQkvKiBJZiB0aGUgU0FDSyB0aW1lciBpcyBydW5uaW5nLCB3ZSBoYXZlIGEgcGVuZGluZyBTQUNLICovCisJCWlmICh0aW1lcl9wZW5kaW5nKHRpbWVyKSkgewogCQkJc3RydWN0IHNjdHBfY2h1bmsgKnNhY2s7CiAJCQlhc29jLT5hX3J3bmQgPSBhc29jLT5yd25kOwogCQkJc2FjayA9IHNjdHBfbWFrZV9zYWNrKGFzb2MpOwogCQkJaWYgKHNhY2spIHsKLQkJCQlzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXI7CiAJCQkJcmV0dmFsID0gc2N0cF9wYWNrZXRfYXBwZW5kX2NodW5rKHBrdCwgc2Fjayk7CiAJCQkJYXNvYy0+cGVlci5zYWNrX25lZWRlZCA9IDA7Ci0JCQkJdGltZXIgPSAmYXNvYy0+dGltZXJzW1NDVFBfRVZFTlRfVElNRU9VVF9TQUNLXTsKLQkJCQlpZiAodGltZXJfcGVuZGluZyh0aW1lcikgJiYgZGVsX3RpbWVyKHRpbWVyKSkKKwkJCQlpZiAoZGVsX3RpbWVyKHRpbWVyKSkKIAkJCQkJc2N0cF9hc3NvY2lhdGlvbl9wdXQoYXNvYyk7CiAJCQl9CiAJCX0KQEAgLTI2MSwxMyArMjY3LDIwIEBACiB7CiAJc2N0cF94bWl0X3QgcmV0dmFsID0gU0NUUF9YTUlUX09LOwogCV9fdTE2IGNodW5rX2xlbiA9IFdPUkRfUk9VTkQobnRvaHMoY2h1bmstPmNodW5rX2hkci0+bGVuZ3RoKSk7Ci0Jc2l6ZV90IHBzaXplOwotCXNpemVfdCBwbXR1OwotCWludCB0b29fYmlnOwogCiAJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBwYWNrZXQ6JXAgY2h1bms6JXBcbiIsIF9fZnVuY19fLCBwYWNrZXQsCiAJCQkgIGNodW5rKTsKIAorCS8qIERhdGEgY2h1bmtzIGFyZSBzcGVjaWFsLiAgQmVmb3JlIHNlZWluZyB3aGF0IGVsc2Ugd2UgY2FuCisJICogYnVuZGxlIGludG8gdGhpcyBwYWNrZXQsIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgYWxsb3dlZCB0bworCSAqIHNlbmQgdGhpcyBEQVRBLgorCSAqLworCWlmIChzY3RwX2NodW5rX2lzX2RhdGEoY2h1bmspKSB7CisJCXJldHZhbCA9IHNjdHBfcGFja2V0X2Nhbl9hcHBlbmRfZGF0YShwYWNrZXQsIGNodW5rKTsKKwkJaWYgKHJldHZhbCAhPSBTQ1RQX1hNSVRfT0spCisJCQlnb3RvIGZpbmlzaDsKKwl9CisKIAkvKiBUcnkgdG8gYnVuZGxlIEFVVEggY2h1bmsgKi8KIAlyZXR2YWwgPSBzY3RwX3BhY2tldF9idW5kbGVfYXV0aChwYWNrZXQsIGNodW5rKTsKIAlpZiAocmV0dmFsICE9IFNDVFBfWE1JVF9PSykKQEAgLTI3OCw1MSArMjkxLDE2IEBACiAJaWYgKHJldHZhbCAhPSBTQ1RQX1hNSVRfT0spCiAJCWdvdG8gZmluaXNoOwogCi0JcHNpemUgPSBwYWNrZXQtPnNpemU7Ci0JcG10dSAgPSAoKHBhY2tldC0+dHJhbnNwb3J0LT5hc29jKSA/Ci0JCSAocGFja2V0LT50cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpIDoKLQkJIChwYWNrZXQtPnRyYW5zcG9ydC0+cGF0aG10dSkpOworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIGNodW5rIHdpbGwgZml0IGludG8gdGhlIHBhY2tldCAqLworCXJldHZhbCA9IHNjdHBfcGFja2V0X3dpbGxfZml0KHBhY2tldCwgY2h1bmssIGNodW5rX2xlbik7CisJaWYgKHJldHZhbCAhPSBTQ1RQX1hNSVRfT0spCisJCWdvdG8gZmluaXNoOwogCi0JdG9vX2JpZyA9IChwc2l6ZSArIGNodW5rX2xlbiA+IHBtdHUpOwotCi0JLyogRGVjaWRlIGlmIHdlIG5lZWQgdG8gZnJhZ21lbnQgb3IgcmVzdWJtaXQgbGF0ZXIuICovCi0JaWYgKHRvb19iaWcpIHsKLQkJLyogSXQncyBPSyB0byBmcmFnbWV0IGF0IElQIGxldmVsIGlmIGFueSBvbmUgb2YgdGhlIGZvbGxvd2luZwotCQkgKiBpcyB0cnVlOgotCQkgKiAJMS4gVGhlIHBhY2tldCBpcyBlbXB0eSAobWVhbmluZyB0aGlzIGNodW5rIGlzIGdyZWF0ZXIKLQkJICogCSAgIHRoZSBNVFUpCi0JCSAqIAkyLiBUaGUgY2h1bmsgd2UgYXJlIGFkZGluZyBpcyBhIGNvbnRyb2wgY2h1bmsKLQkJICogCTMuIFRoZSBwYWNrZXQgZG9lc24ndCBoYXZlIGFueSBkYXRhIGluIGl0IHlldCBhbmQgZGF0YQotCQkgKiAJcmVxdWlyZXMgYXV0aGVudGljYXRpb24uCi0JCSAqLwotCQlpZiAoc2N0cF9wYWNrZXRfZW1wdHkocGFja2V0KSB8fCAhc2N0cF9jaHVua19pc19kYXRhKGNodW5rKSB8fAotCQkgICAgKCFwYWNrZXQtPmhhc19kYXRhICYmIGNodW5rLT5hdXRoKSkgewotCQkJLyogV2Ugbm8gbG9uZ2VyIGRvIHJlLWZyYWdtZW50YXRpb24uCi0JCQkgKiBKdXN0IGZyYWdtZW50IGF0IHRoZSBJUCBsYXllciwgaWYgd2UKLQkJCSAqIGFjdHVhbGx5IGhpdCB0aGlzIGNvbmRpdGlvbgotCQkJICovCi0JCQlwYWNrZXQtPmlwZnJhZ29rID0gMTsKLQkJCWdvdG8gYXBwZW5kOwotCi0JCX0gZWxzZSB7Ci0JCQlyZXR2YWwgPSBTQ1RQX1hNSVRfUE1UVV9GVUxMOwotCQkJZ290byBmaW5pc2g7Ci0JCX0KLQl9Ci0KLWFwcGVuZDoKLQkvKiBXZSBiZWxpZXZlIHRoYXQgdGhpcyBjaHVuayBpcyBPSyB0byBhZGQgdG8gdGhlIHBhY2tldCAoYXMKLQkgKiBsb25nIGFzIHdlIGhhdmUgdGhlIGN3bmQgZm9yIGl0KS4KLQkgKi8KLQotCS8qIERBVEEgaXMgYSBzcGVjaWFsIGNhc2Ugc2luY2Ugd2UgbXVzdCBleGFtaW5lIGJvdGggcnduZCBhbmQgY3duZAotCSAqIGJlZm9yZSB3ZSBzZW5kIERBVEEuCi0JICovCisJLyogV2UgYmVsaWV2ZSB0aGF0IHRoaXMgY2h1bmsgaXMgT0sgdG8gYWRkIHRvIHRoZSBwYWNrZXQgKi8KIAlzd2l0Y2ggKGNodW5rLT5jaHVua19oZHItPnR5cGUpIHsKIAkgICAgY2FzZSBTQ1RQX0NJRF9EQVRBOgotCQlyZXR2YWwgPSBzY3RwX3BhY2tldF9hcHBlbmRfZGF0YShwYWNrZXQsIGNodW5rKTsKLQkJaWYgKFNDVFBfWE1JVF9PSyAhPSByZXR2YWwpCi0JCQlnb3RvIGZpbmlzaDsKKwkJLyogQWNjb3VudCBmb3IgdGhlIGRhdGEgYmVpbmcgaW4gdGhlIHBhY2tldCAqLworCQlzY3RwX3BhY2tldF9hcHBlbmRfZGF0YShwYWNrZXQsIGNodW5rKTsKIAkJLyogRGlzYWxsb3cgU0FDSyBidW5kbGluZyBhZnRlciBEQVRBLiAqLwogCQlwYWNrZXQtPmhhc19zYWNrID0gMTsKIAkJLyogRGlzYWxsb3cgQVVUSCBidW5kbGluZyBhZnRlciBEQVRBICovCkBAIC01OTgsNyArNTc2LDcgQEAKIAkoKnRwLT5hZl9zcGVjaWZpYy0+c2N0cF94bWl0KShuc2tiLCB0cCk7CiAKIG91dDoKLQlwYWNrZXQtPnNpemUgPSBwYWNrZXQtPm92ZXJoZWFkOworCXNjdHBfcGFja2V0X3Jlc2V0KHBhY2tldCk7CiAJcmV0dXJuIGVycjsKIG5vX3JvdXRlOgogCWtmcmVlX3NrYihuc2tiKTsKQEAgLTYzMiwxNiArNjEwLDE1IEBACiAgKiAybmQgTGV2ZWwgQWJzdHJhY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFRoaXMgcHJpdmF0ZSBmdW5jdGlvbiBoYW5kbGVzIHRoZSBzcGVjaWZpY3Mgb2YgYXBwZW5kaW5nIERBVEEgY2h1bmtzLiAgKi8KLXN0YXRpYyBzY3RwX3htaXRfdCBzY3RwX3BhY2tldF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKKy8qIFRoaXMgcHJpdmF0ZSBmdW5jdGlvbiBjaGVjayB0byBzZWUgaWYgYSBjaHVuayBjYW4gYmUgYWRkZWQgKi8KK3N0YXRpYyBzY3RwX3htaXRfdCBzY3RwX3BhY2tldF9jYW5fYXBwZW5kX2RhdGEoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsCiAJCQkJCSAgIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaykKIHsKIAlzY3RwX3htaXRfdCByZXR2YWwgPSBTQ1RQX1hNSVRfT0s7Ci0Jc2l6ZV90IGRhdGFzaXplLCByd25kLCBpbmZsaWdodDsKKwlzaXplX3QgZGF0YXNpemUsIHJ3bmQsIGluZmxpZ2h0LCBmbGlnaHRfc2l6ZTsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IHBhY2tldC0+dHJhbnNwb3J0OwogCV9fdTMyIG1heF9idXJzdF9ieXRlczsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9IHRyYW5zcG9ydC0+YXNvYzsKLQlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soYXNvYy0+YmFzZS5zayk7CiAJc3RydWN0IHNjdHBfb3V0cSAqcSA9ICZhc29jLT5vdXRxdWV1ZTsKIAogCS8qIFJGQyAyOTYwIDYuMSAgVHJhbnNtaXNzaW9uIG9mIERBVEEgQ2h1bmtzCkBAIC02NTgsNyArNjM1LDggQEAKIAkgKi8KIAogCXJ3bmQgPSBhc29jLT5wZWVyLnJ3bmQ7Ci0JaW5mbGlnaHQgPSBhc29jLT5vdXRxdWV1ZS5vdXRzdGFuZGluZ19ieXRlczsKKwlpbmZsaWdodCA9IHEtPm91dHN0YW5kaW5nX2J5dGVzOworCWZsaWdodF9zaXplID0gdHJhbnNwb3J0LT5mbGlnaHRfc2l6ZTsKIAogCWRhdGFzaXplID0gc2N0cF9kYXRhX3NpemUoY2h1bmspOwogCkBAIC02ODEsOCArNjU5LDggQEAKIAkgKgkJY3duZCA9IGZsaWdodHNpemUgKyBNYXguQnVyc3QgKiBNVFUKIAkgKi8KIAltYXhfYnVyc3RfYnl0ZXMgPSBhc29jLT5tYXhfYnVyc3QgKiBhc29jLT5wYXRobXR1OwotCWlmICgodHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSArIG1heF9idXJzdF9ieXRlcykgPCB0cmFuc3BvcnQtPmN3bmQpIHsKLQkJdHJhbnNwb3J0LT5jd25kID0gdHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSArIG1heF9idXJzdF9ieXRlczsKKwlpZiAoKGZsaWdodF9zaXplICsgbWF4X2J1cnN0X2J5dGVzKSA8IHRyYW5zcG9ydC0+Y3duZCkgeworCQl0cmFuc3BvcnQtPmN3bmQgPSBmbGlnaHRfc2l6ZSArIG1heF9idXJzdF9ieXRlczsKIAkJU0NUUF9ERUJVR19QUklOVEsoIiVzOiBjd25kIGxpbWl0ZWQgYnkgbWF4X2J1cnN0OiAiCiAJCQkJICAidHJhbnNwb3J0OiAlcCwgY3duZDogJWQsICIKIAkJCQkgICJzc3RocmVzaDogJWQsIGZsaWdodF9zaXplOiAlZCwgIgpAQCAtNzA3LDcgKzY4NSw3IEBACiAJICogICAgaWdub3JlIHRoZSB2YWx1ZSBvZiBjd25kIGFuZCBTSE9VTEQgTk9UIGRlbGF5IHJldHJhbnNtaXNzaW9uLgogCSAqLwogCWlmIChjaHVuay0+ZmFzdF9yZXRyYW5zbWl0ICE9IFNDVFBfTkVFRF9GUlRYKQotCQlpZiAodHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSA+PSB0cmFuc3BvcnQtPmN3bmQpIHsKKwkJaWYgKGZsaWdodF9zaXplID49IHRyYW5zcG9ydC0+Y3duZCkgewogCQkJcmV0dmFsID0gU0NUUF9YTUlUX1JXTkRfRlVMTDsKIAkJCWdvdG8gZmluaXNoOwogCQl9CkBAIC03MTcsMjAgKzY5NSwzNiBAQAogCSAqIGlmIGFueSBwcmV2aW91c2x5IHRyYW5zbWl0dGVkIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24gcmVtYWlucwogCSAqIHVuYWNrbm93bGVkZ2VkLgogCSAqLwotCWlmICghc3AtPm5vZGVsYXkgJiYgc2N0cF9wYWNrZXRfZW1wdHkocGFja2V0KSAmJgotCSAgICBxLT5vdXRzdGFuZGluZ19ieXRlcyAmJiBzY3RwX3N0YXRlKGFzb2MsIEVTVEFCTElTSEVEKSkgewotCQl1bnNpZ25lZCBsZW4gPSBkYXRhc2l6ZSArIHEtPm91dF9xbGVuOworCWlmICghc2N0cF9zayhhc29jLT5iYXNlLnNrKS0+bm9kZWxheSAmJiBzY3RwX3BhY2tldF9lbXB0eShwYWNrZXQpICYmCisJICAgIGluZmxpZ2h0ICYmIHNjdHBfc3RhdGUoYXNvYywgRVNUQUJMSVNIRUQpKSB7CisJCXVuc2lnbmVkIG1heCA9IHRyYW5zcG9ydC0+cGF0aG10dSAtIHBhY2tldC0+b3ZlcmhlYWQ7CisJCXVuc2lnbmVkIGxlbiA9IGNodW5rLT5za2ItPmxlbiArIHEtPm91dF9xbGVuOwogCiAJCS8qIENoZWNrIHdoZXRoZXIgdGhpcyBjaHVuayBhbmQgYWxsIHRoZSByZXN0IG9mIHBlbmRpbmcKIAkJICogZGF0YSB3aWxsIGZpdCBvciBkZWxheSBpbiBob3BlcyBvZiBidW5kbGluZyBhIGZ1bGwKIAkJICogc2l6ZWQgcGFja2V0LgorCQkgKiBEb24ndCBkZWxheSBsYXJnZSBtZXNzYWdlIHdyaXRlcyB0aGF0IG1heSBoYXZlIGJlZW4KKwkJICogZnJhZ21lbmV0ZWQgaW50byBzbWFsbCBwZWljZXMuCiAJCSAqLwotCQlpZiAobGVuIDwgYXNvYy0+ZnJhZ19wb2ludCkgeworCQlpZiAoKGxlbiA8IG1heCkgJiYgKGNodW5rLT5tc2ctPm1zZ19zaXplIDwgbWF4KSkgewogCQkJcmV0dmFsID0gU0NUUF9YTUlUX05BR0xFX0RFTEFZOwogCQkJZ290byBmaW5pc2g7CiAJCX0KIAl9CiAKK2ZpbmlzaDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBUaGlzIHByaXZhdGUgZnVuY3Rpb24gZG9lcyBtYW5hZ2VtZW50IHRoaW5ncyB3aGVuIGFkZGluZyBEQVRBIGNodW5rICovCitzdGF0aWMgdm9pZCBzY3RwX3BhY2tldF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKKwkJCQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmspCit7CisJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSBwYWNrZXQtPnRyYW5zcG9ydDsKKwlzaXplX3QgZGF0YXNpemUgPSBzY3RwX2RhdGFfc2l6ZShjaHVuayk7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSB0cmFuc3BvcnQtPmFzb2M7CisJdTMyIHJ3bmQgPSBhc29jLT5wZWVyLnJ3bmQ7CisKIAkvKiBLZWVwIHRyYWNrIG9mIGhvdyBtYW55IGJ5dGVzIGFyZSBpbiBmbGlnaHQgb3ZlciB0aGlzIHRyYW5zcG9ydC4gKi8KIAl0cmFuc3BvcnQtPmZsaWdodF9zaXplICs9IGRhdGFzaXplOwogCkBAIC03NTMsNyArNzQ3LDQ1IEBACiAJLyogSGFzIGJlZW4gYWNjZXB0ZWQgZm9yIHRyYW5zbWlzc2lvbi4gKi8KIAlpZiAoIWFzb2MtPnBlZXIucHJzY3RwX2NhcGFibGUpCiAJCWNodW5rLT5tc2ctPmNhbl9hYmFuZG9uID0gMDsKK30KIAotZmluaXNoOgorc3RhdGljIHNjdHBfeG1pdF90IHNjdHBfcGFja2V0X3dpbGxfZml0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LAorCQkJCQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCisJCQkJCXUxNiBjaHVua19sZW4pCit7CisJc2l6ZV90IHBzaXplOworCXNpemVfdCBwbXR1OworCWludCB0b29fYmlnOworCXNjdHBfeG1pdF90IHJldHZhbCA9IFNDVFBfWE1JVF9PSzsKKworCXBzaXplID0gcGFja2V0LT5zaXplOworCXBtdHUgID0gKChwYWNrZXQtPnRyYW5zcG9ydC0+YXNvYykgPworCQkocGFja2V0LT50cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpIDoKKwkJKHBhY2tldC0+dHJhbnNwb3J0LT5wYXRobXR1KSk7CisKKwl0b29fYmlnID0gKHBzaXplICsgY2h1bmtfbGVuID4gcG10dSk7CisKKwkvKiBEZWNpZGUgaWYgd2UgbmVlZCB0byBmcmFnbWVudCBvciByZXN1Ym1pdCBsYXRlci4gKi8KKwlpZiAodG9vX2JpZykgeworCQkvKiBJdCdzIE9LIHRvIGZyYWdtZXQgYXQgSVAgbGV2ZWwgaWYgYW55IG9uZSBvZiB0aGUgZm9sbG93aW5nCisJCSAqIGlzIHRydWU6CisJCSAqIAkxLiBUaGUgcGFja2V0IGlzIGVtcHR5IChtZWFuaW5nIHRoaXMgY2h1bmsgaXMgZ3JlYXRlcgorCQkgKiAJICAgdGhlIE1UVSkKKwkJICogCTIuIFRoZSBjaHVuayB3ZSBhcmUgYWRkaW5nIGlzIGEgY29udHJvbCBjaHVuaworCQkgKiAJMy4gVGhlIHBhY2tldCBkb2Vzbid0IGhhdmUgYW55IGRhdGEgaW4gaXQgeWV0IGFuZCBkYXRhCisJCSAqIAlyZXF1aXJlcyBhdXRoZW50aWNhdGlvbi4KKwkJICovCisJCWlmIChzY3RwX3BhY2tldF9lbXB0eShwYWNrZXQpIHx8ICFzY3RwX2NodW5rX2lzX2RhdGEoY2h1bmspIHx8CisJCSAgICAoIXBhY2tldC0+aGFzX2RhdGEgJiYgY2h1bmstPmF1dGgpKSB7CisJCQkvKiBXZSBubyBsb25nZXIgZG8gcmUtZnJhZ21lbnRhdGlvbi4KKwkJCSAqIEp1c3QgZnJhZ21lbnQgYXQgdGhlIElQIGxheWVyLCBpZiB3ZQorCQkJICogYWN0dWFsbHkgaGl0IHRoaXMgY29uZGl0aW9uCisJCQkgKi8KKwkJCXBhY2tldC0+aXBmcmFnb2sgPSAxOworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gU0NUUF9YTUlUX1BNVFVfRlVMTDsKKwkJfQorCX0KKwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRxdWV1ZS5jIGIvbmV0L3NjdHAvb3V0cXVldWUuYwppbmRleCBkNzY1ZmM1Li5jOWYyMGUyIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRxdWV1ZS5jCisrKyBiL25ldC9zY3RwL291dHF1ZXVlLmMKQEAgLTQwNiw4ICs0MDYsOSBAQAogCQkJICogbm90IGJlIHJldHJhbnNtaXR0ZWQKIAkJCSAqLwogCQkJaWYgKCFjaHVuay0+dHNuX2dhcF9hY2tlZCkgewotCQkJCWNodW5rLT50cmFuc3BvcnQtPmZsaWdodF9zaXplIC09Ci0JCQkJCQlzY3RwX2RhdGFfc2l6ZShjaHVuayk7CisJCQkJaWYgKGNodW5rLT50cmFuc3BvcnQpCisJCQkJCWNodW5rLT50cmFuc3BvcnQtPmZsaWdodF9zaXplIC09CisJCQkJCQkJc2N0cF9kYXRhX3NpemUoY2h1bmspOwogCQkJCXEtPm91dHN0YW5kaW5nX2J5dGVzIC09IHNjdHBfZGF0YV9zaXplKGNodW5rKTsKIAkJCQlxLT5hc29jLT5wZWVyLnJ3bmQgKz0gKHNjdHBfZGF0YV9zaXplKGNodW5rKSArCiAJCQkJCQkJc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7CkBAIC00NDMsNyArNDQ0LDggQEAKIAkJCXEtPmFzb2MtPnBlZXIucnduZCArPSAoc2N0cF9kYXRhX3NpemUoY2h1bmspICsKIAkJCQkJCXNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwogCQkJcS0+b3V0c3RhbmRpbmdfYnl0ZXMgLT0gc2N0cF9kYXRhX3NpemUoY2h1bmspOwotCQkJdHJhbnNwb3J0LT5mbGlnaHRfc2l6ZSAtPSBzY3RwX2RhdGFfc2l6ZShjaHVuayk7CisJCQlpZiAoY2h1bmstPnRyYW5zcG9ydCkKKwkJCQl0cmFuc3BvcnQtPmZsaWdodF9zaXplIC09IHNjdHBfZGF0YV9zaXplKGNodW5rKTsKIAogCQkJLyogc2N0cGltcGd1aWRlLTA1IFNlY3Rpb24gMi44LjIKIAkJCSAqIE01KSBJZiBhIFQzLXJ0eCB0aW1lciBleHBpcmVzLCB0aGUKQEAgLTEzMTAsNiArMTMxMiw3IEBACiAJX191MzIgcnR0OwogCV9fdTggcmVzdGFydF90aW1lciA9IDA7CiAJaW50IGJ5dGVzX2Fja2VkID0gMDsKKwlpbnQgbWlncmF0ZV9ieXRlcyA9IDA7CiAKIAkvKiBUaGVzZSBzdGF0ZSB2YXJpYWJsZXMgYXJlIGZvciBjb2hlcmVudCBkZWJ1ZyBvdXRwdXQuIC0teGd1byAqLwogCkBAIC0xMzQzLDggKzEzNDYsOSBAQAogCQkJICogY29uc2lkZXJpbmcgaXQgYXMgJ291dHN0YW5kaW5nJy4KIAkJCSAqLwogCQkJaWYgKCF0Y2h1bmstPnRzbl9nYXBfYWNrZWQpIHsKLQkJCQl0Y2h1bmstPnRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgLT0KLQkJCQkJCXNjdHBfZGF0YV9zaXplKHRjaHVuayk7CisJCQkJaWYgKHRjaHVuay0+dHJhbnNwb3J0KQorCQkJCQl0Y2h1bmstPnRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgLT0KKwkJCQkJCQlzY3RwX2RhdGFfc2l6ZSh0Y2h1bmspOwogCQkJCXEtPm91dHN0YW5kaW5nX2J5dGVzIC09IHNjdHBfZGF0YV9zaXplKHRjaHVuayk7CiAJCQl9CiAJCQljb250aW51ZTsKQEAgLTEzNzgsNiArMTM4MiwyMCBAQAogCQkJCQkJCQkgIHJ0dCk7CiAJCQkJfQogCQkJfQorCisJCQkvKiBJZiB0aGUgY2h1bmsgaGFzbid0IGJlZW4gbWFya2VkIGFzIEFDS0VELAorCQkJICogbWFyayBpdCBhbmQgYWNjb3VudCBieXRlc19hY2tlZCBpZiB0aGUKKwkJCSAqIGNodW5rIGhhZCBhIHZhbGlkIHRyYW5zcG9ydCAoaXQgd2lsbCBub3QKKwkJCSAqIGhhdmUgYSB0cmFuc3BvcnQgaWYgQVNDT05GIGhhZCBkZWxldGVkIGl0CisJCQkgKiB3aGlsZSBEQVRBIHdhcyBvdXRzdGFuZGluZykuCisJCQkgKi8KKwkJCWlmICghdGNodW5rLT50c25fZ2FwX2Fja2VkKSB7CisJCQkJdGNodW5rLT50c25fZ2FwX2Fja2VkID0gMTsKKwkJCQlieXRlc19hY2tlZCArPSBzY3RwX2RhdGFfc2l6ZSh0Y2h1bmspOworCQkJCWlmICghdGNodW5rLT50cmFuc3BvcnQpCisJCQkJCW1pZ3JhdGVfYnl0ZXMgKz0gc2N0cF9kYXRhX3NpemUodGNodW5rKTsKKwkJCX0KKwogCQkJaWYgKFRTTl9sdGUodHNuLCBzYWNrX2N0c24pKSB7CiAJCQkJLyogUkZDIDI5NjAgIDYuMy4yIFJldHJhbnNtaXNzaW9uIFRpbWVyIFJ1bGVzCiAJCQkJICoKQEAgLTEzOTEsOCArMTQwOSw2IEBACiAJCQkJcmVzdGFydF90aW1lciA9IDE7CiAKIAkJCQlpZiAoIXRjaHVuay0+dHNuX2dhcF9hY2tlZCkgewotCQkJCQl0Y2h1bmstPnRzbl9nYXBfYWNrZWQgPSAxOwotCQkJCQlieXRlc19hY2tlZCArPSBzY3RwX2RhdGFfc2l6ZSh0Y2h1bmspOwogCQkJCQkvKgogCQkJCQkgKiBTRlItQ0FDQyBhbGdvcml0aG06CiAJCQkJCSAqIDIpIElmIHRoZSBTQUNLIGNvbnRhaW5zIGdhcCBhY2tzCkBAIC0xNDMyLDEwICsxNDQ4LDYgQEAKIAkJCQkgKiBvbGRlciB0aGFuIHRoYXQgbmV3bHkgYWNrbm93bGVkZ2VkIERBVEEKIAkJCQkgKiBjaHVuaywgYXJlIHF1YWxpZmllZCBhcyAnU3RyYXkgREFUQSBjaHVua3MnLgogCQkJCSAqLwotCQkJCWlmICghdGNodW5rLT50c25fZ2FwX2Fja2VkKSB7Ci0JCQkJCXRjaHVuay0+dHNuX2dhcF9hY2tlZCA9IDE7Ci0JCQkJCWJ5dGVzX2Fja2VkICs9IHNjdHBfZGF0YV9zaXplKHRjaHVuayk7Ci0JCQkJfQogCQkJCWxpc3RfYWRkX3RhaWwobGNodW5rLCAmdGxpc3QpOwogCQkJfQogCkBAIC0xNDkxLDcgKzE1MDMsOCBAQAogCQkJCQkJICB0c24pOwogCQkJCXRjaHVuay0+dHNuX2dhcF9hY2tlZCA9IDA7CiAKLQkJCQlieXRlc19hY2tlZCAtPSBzY3RwX2RhdGFfc2l6ZSh0Y2h1bmspOworCQkJCWlmICh0Y2h1bmstPnRyYW5zcG9ydCkKKwkJCQkJYnl0ZXNfYWNrZWQgLT0gc2N0cF9kYXRhX3NpemUodGNodW5rKTsKIAogCQkJCS8qIFJGQyAyOTYwIDYuMy4yIFJldHJhbnNtaXNzaW9uIFRpbWVyIFJ1bGVzCiAJCQkJICoKQEAgLTE1NjEsNiArMTU3NCwxNCBAQAogI2VuZGlmIC8qIFNDVFBfREVCVUcgKi8KIAlpZiAodHJhbnNwb3J0KSB7CiAJCWlmIChieXRlc19hY2tlZCkgeworCQkJLyogV2UgbWF5IGhhdmUgY291bnRlZCBEQVRBIHRoYXQgd2FzIG1pZ3JhdGVkCisJCQkgKiB0byB0aGlzIHRyYW5zcG9ydCBkdWUgdG8gREVMLUlQIG9wZXJhdGlvbi4KKwkJCSAqIFN1YnRyYWN0IHRob3NlIGJ5dGVzLCBzaW5jZSB0aGUgd2VyZSBuZXZlcgorCQkJICogc2VuZCBvbiB0aGlzIHRyYW5zcG9ydCBhbmQgc2hvdWxkbid0IGJlCisJCQkgKiBjcmVkaXRlZCB0byB0aGlzIHRyYW5zcG9ydC4KKwkJCSAqLworCQkJYnl0ZXNfYWNrZWQgLT0gbWlncmF0ZV9ieXRlczsKKwogCQkJLyogOC4yLiBXaGVuIGFuIG91dHN0YW5kaW5nIFRTTiBpcyBhY2tub3dsZWRnZWQsCiAJCQkgKiB0aGUgZW5kcG9pbnQgc2hhbGwgY2xlYXIgdGhlIGVycm9yIGNvdW50ZXIgb2YKIAkJCSAqIHRoZSBkZXN0aW5hdGlvbiB0cmFuc3BvcnQgYWRkcmVzcyB0byB3aGljaCB0aGUKQEAgLTE1ODksNyArMTYxMCw3IEBACiAJCQl0cmFuc3BvcnQtPmZsaWdodF9zaXplIC09IGJ5dGVzX2Fja2VkOwogCQkJaWYgKHRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgPT0gMCkKIAkJCQl0cmFuc3BvcnQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOwotCQkJcS0+b3V0c3RhbmRpbmdfYnl0ZXMgLT0gYnl0ZXNfYWNrZWQ7CisJCQlxLT5vdXRzdGFuZGluZ19ieXRlcyAtPSBieXRlc19hY2tlZCArIG1pZ3JhdGVfYnl0ZXM7CiAJCX0gZWxzZSB7CiAJCQkvKiBSRkMgMjk2MCA2LjEsIHNjdHBpbXBndWlkZS0wNiAyLjE1LjIKIAkJCSAqIFdoZW4gYSBzZW5kZXIgaXMgZG9pbmcgemVybyB3aW5kb3cgcHJvYmluZywgaXQKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb2MuYyBiL25ldC9zY3RwL3Byb2MuYwppbmRleCBmMjY4OTEwLi5kMDkzY2JmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm9jLmMKKysrIGIvbmV0L3NjdHAvcHJvYy5jCkBAIC01MTIsMTAgKzUxMiw4IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwogCi0JcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJyZW1hZGRyIiwgU19JUlVHTywgcHJvY19uZXRfc2N0cCk7CisJcCA9IHByb2NfY3JlYXRlKCJyZW1hZGRyIiwgU19JUlVHTywgcHJvY19uZXRfc2N0cCwgJnNjdHBfcmVtYWRkcl9zZXFfZm9wcyk7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKLQlwLT5wcm9jX2ZvcHMgPSAmc2N0cF9yZW1hZGRyX3NlcV9mb3BzOwotCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCBhNzZkYTY1Li42MDA5M2JlIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTQzMSwxNiArNDMxLDE0IEBACiAgKiBvZiByZXF1ZXN0ZWQgZGVzdGluYXRpb24gYWRkcmVzcywgc2VuZGVyIGFuZCByZWNlaXZlcgogICogU0hPVUxEIGluY2x1ZGUgYWxsIG9mIGl0cyBhZGRyZXNzZXMgd2l0aCBsZXZlbCBncmVhdGVyCiAgKiB0aGFuIG9yIGVxdWFsIHRvIEwuCisgKgorICogSVB2NCBzY29waW5nIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggc3lzY3RsIG9wdGlvbgorICogbmV0LnNjdHAuYWRkcl9zY29wZV9wb2xpY3kKICAqLwogc3RhdGljIHNjdHBfc2NvcGVfdCBzY3RwX3Y0X3Njb3BlKHVuaW9uIHNjdHBfYWRkciAqYWRkcikKIHsKIAlzY3RwX3Njb3BlX3QgcmV0dmFsOwogCi0JLyogU2hvdWxkIElQdjQgc2NvcGluZyBiZSBhIHN5c2N0bCBjb25maWd1cmFibGUgb3B0aW9uCi0JICogc28gdXNlcnMgY2FuIHR1cm4gaXQgb2ZmIChkZWZhdWx0IG9uKSBmb3IgY2VydGFpbgotCSAqIHVuY29udmVudGlvbmFsIG5ldHdvcmtpbmcgZW52aXJvbm1lbnRzPwotCSAqLwotCiAJLyogQ2hlY2sgZm9yIHVudXNhYmxlIFNDVFAgYWRkcmVzc2VzLiAqLwogCWlmIChJU19JUFY0X1VOVVNBQkxFX0FERFJFU1MoYWRkci0+djQuc2luX2FkZHIuc19hZGRyKSkgewogCQlyZXR2YWwgPSAgU0NUUF9TQ09QRV9VTlVTQUJMRTsKQEAgLTEyNTksNiArMTI1Nyw5IEBACiAJLyogRGlzYWJsZSBBVVRIIGJ5IGRlZmF1bHQuICovCiAJc2N0cF9hdXRoX2VuYWJsZSA9IDA7CiAKKwkvKiBTZXQgU0NPUEUgcG9saWN5IHRvIGVuYWJsZWQgKi8KKwlzY3RwX3Njb3BlX3BvbGljeSA9IFNDVFBfU0NPUEVfUE9MSUNZX0VOQUJMRTsKKwogCXNjdHBfc3lzY3RsX3JlZ2lzdGVyKCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmc2N0cF9hZGRyZXNzX2ZhbWlsaWVzKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCA2MWNjNjA3Li45ZDg4MWE2IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC0yODYxLDYgKzI4NjEsMTEgQEAKIAlhZGRyX3BhcmFtID0gKHVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqKQogCQkJKCh2b2lkICopYXNjb25mX3BhcmFtICsgc2l6ZW9mKHNjdHBfYWRkaXBfcGFyYW1fdCkpOwogCisJaWYgKGFzY29uZl9wYXJhbS0+cGFyYW1faGRyLnR5cGUgIT0gU0NUUF9QQVJBTV9BRERfSVAgJiYKKwkgICAgYXNjb25mX3BhcmFtLT5wYXJhbV9oZHIudHlwZSAhPSBTQ1RQX1BBUkFNX0RFTF9JUCAmJgorCSAgICBhc2NvbmZfcGFyYW0tPnBhcmFtX2hkci50eXBlICE9IFNDVFBfUEFSQU1fU0VUX1BSSU1BUlkpCisJCXJldHVybiBTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU07CisKIAlzd2l0Y2ggKGFkZHJfcGFyYW0tPnY0LnBhcmFtX2hkci50eXBlKSB7CiAJY2FzZSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzoKIAkJaWYgKCFhc29jLT5wZWVyLmlwdjZfYWRkcmVzcykKQEAgLTI5NTgsOSArMjk2Myw2IEBACiAKIAkJc2N0cF9hc3NvY19zZXRfcHJpbWFyeShhc29jLCBwZWVyKTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIFNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTTsKLQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIFNDVFBfRVJST1JfTk9fRVJST1I7CkBAIC0zMTA0LDcgKzMxMDYsNyBAQAogfQogCiAvKiBQcm9jZXNzIGEgYXNjb25mIHBhcmFtZXRlciB0aGF0IGlzIHN1Y2Nlc3NmdWxseSBhY2tlZC4gKi8KLXN0YXRpYyBpbnQgc2N0cF9hc2NvbmZfcGFyYW1fc3VjY2VzcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKK3N0YXRpYyB2b2lkIHNjdHBfYXNjb25mX3BhcmFtX3N1Y2Nlc3Moc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJICAgICBzY3RwX2FkZGlwX3BhcmFtX3QgKmFzY29uZl9wYXJhbSkKIHsKIAlzdHJ1Y3Qgc2N0cF9hZiAqYWY7CkBAIC0zMTEzLDcgKzMxMTUsNiBAQAogCXVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqYWRkcl9wYXJhbTsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAlzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSAqc2FkZHI7Ci0JaW50IHJldHZhbCA9IDA7CiAKIAlhZGRyX3BhcmFtID0gKHVuaW9uIHNjdHBfYWRkcl9wYXJhbSAqKQogCQkJKCh2b2lkICopYXNjb25mX3BhcmFtICsgc2l6ZW9mKHNjdHBfYWRkaXBfcGFyYW1fdCkpOwpAQCAtMzEzMywxMCArMzEzNCwxOCBAQAogCQkJCXNhZGRyLT5zdGF0ZSA9IFNDVFBfQUREUl9TUkM7CiAJCX0KIAkJbG9jYWxfYmhfZW5hYmxlKCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnNwb3J0LCAmYXNvYy0+cGVlci50cmFuc3BvcnRfYWRkcl9saXN0LAorCQkJCXRyYW5zcG9ydHMpIHsKKwkJCWlmICh0cmFuc3BvcnQtPnN0YXRlID09IFNDVFBfQUNUSVZFKQorCQkJCWNvbnRpbnVlOworCQkJZHN0X3JlbGVhc2UodHJhbnNwb3J0LT5kc3QpOworCQkJc2N0cF90cmFuc3BvcnRfcm91dGUodHJhbnNwb3J0LCBOVUxMLAorCQkJCQkgICAgIHNjdHBfc2soYXNvYy0+YmFzZS5zaykpOworCQl9CiAJCWJyZWFrOwogCWNhc2UgU0NUUF9QQVJBTV9ERUxfSVA6CiAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJcmV0dmFsID0gc2N0cF9kZWxfYmluZF9hZGRyKGJwLCAmYWRkcik7CisJCXNjdHBfZGVsX2JpbmRfYWRkcihicCwgJmFkZHIpOwogCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc3BvcnQsICZhc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QsCiAJCQkJdHJhbnNwb3J0cykgewpAQCAtMzE0OCw4ICszMTU3LDYgQEAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0KLQlyZXR1cm4gcmV0dmFsOwogfQogCiAvKiBHZXQgdGhlIGNvcnJlc3BvbmRpbmcgQVNDT05GIHJlc3BvbnNlIGVycm9yIGNvZGUgZnJvbSB0aGUgQVNDT05GX0FDSyBjaHVuawpAQCAtMzI2Niw3ICszMjczLDcgQEAKIAogCQlzd2l0Y2ggKGVycl9jb2RlKSB7CiAJCWNhc2UgU0NUUF9FUlJPUl9OT19FUlJPUjoKLQkJCXJldHZhbCA9IHNjdHBfYXNjb25mX3BhcmFtX3N1Y2Nlc3MoYXNvYywgYXNjb25mX3BhcmFtKTsKKwkJCXNjdHBfYXNjb25mX3BhcmFtX3N1Y2Nlc3MoYXNvYywgYXNjb25mX3BhcmFtKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NUUF9FUlJPUl9SU1JDX0xPVzoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwppbmRleCA4NjQyNmFhLi44Njc0ZDQ5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKKysrIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCkBAIC00NDAsMTQgKzQ0MCwyNiBAQAogCS8qIFRoZSBjaGVjayBmb3IgYXNzb2NpYXRpb24ncyBvdmVyYWxsIGVycm9yIGNvdW50ZXIgZXhjZWVkaW5nIHRoZQogCSAqIHRocmVzaG9sZCBpcyBkb25lIGluIHRoZSBzdGF0ZSBmdW5jdGlvbi4KIAkgKi8KLQkvKiBXaGVuIHByb2JpbmcgVU5DT05GSVJNRUQgYWRkcmVzc2VzLCB0aGUgYXNzb2NpYXRpb24gb3ZlcmFsbAotCSAqIGVycm9yIGNvdW50IGlzIE5PVCBpbmNyZW1lbnRlZAorCS8qIFdlIGFyZSBoZXJlIGR1ZSB0byBhIHRpbWVyIGV4cGlyYXRpb24uICBJZiB0aGUgdGltZXIgd2FzCisJICogbm90IGEgSEVBUlRCRUFULCB0aGVuIG5vcm1hbCBlcnJvciB0cmFja2luZyBpcyBkb25lLgorCSAqIElmIHRoZSB0aW1lciB3YXMgYSBoZWFydGJlYXQsIHdlIG9ubHkgaW5jcmVtZW50IGVycm9yIGNvdW50cworCSAqIHdoZW4gd2UgYWxyZWFkeSBoYXZlIGFuIG91dHN0YW5kaW5nIEhFQVJUQkVBVCB0aGF0IGhhcyBub3QKKwkgKiBiZWVuIGFja25vd2xlZGdlZC4KKwkgKiBBZGRpdGlvbmFseSwgc29tZSB0cmFucG9ydCBzdGF0ZXMgaW5oaWJpdCBlcnJvciBpbmNyZW1lbnRzLgogCSAqLwotCWlmICh0cmFuc3BvcnQtPnN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpCisJaWYgKCFpc19oYikgewogCQlhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50Kys7CisJCWlmICh0cmFuc3BvcnQtPnN0YXRlICE9IFNDVFBfSU5BQ1RJVkUpCisJCQl0cmFuc3BvcnQtPmVycm9yX2NvdW50Kys7CisJIH0gZWxzZSBpZiAodHJhbnNwb3J0LT5oYl9zZW50KSB7CisJCWlmICh0cmFuc3BvcnQtPnN0YXRlICE9IFNDVFBfVU5DT05GSVJNRUQpCisJCQlhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50Kys7CisJCWlmICh0cmFuc3BvcnQtPnN0YXRlICE9IFNDVFBfSU5BQ1RJVkUpCisJCQl0cmFuc3BvcnQtPmVycm9yX2NvdW50Kys7CisJfQogCiAJaWYgKHRyYW5zcG9ydC0+c3RhdGUgIT0gU0NUUF9JTkFDVElWRSAmJgotCSAgICAodHJhbnNwb3J0LT5lcnJvcl9jb3VudCsrID49IHRyYW5zcG9ydC0+cGF0aG1heHJ4dCkpIHsKKwkgICAgKHRyYW5zcG9ydC0+ZXJyb3JfY291bnQgPiB0cmFuc3BvcnQtPnBhdGhtYXhyeHQpKSB7CiAJCVNDVFBfREVCVUdfUFJJTlRLX0lQQUREUigidHJhbnNwb3J0X3N0cmlrZTphc3NvY2lhdGlvbiAlcCIsCiAJCQkJCSAiIHRyYW5zcG9ydCBJUDogcG9ydDolZCBmYWlsZWQuXG4iLAogCQkJCQkgYXNvYywKQEAgLTkzMSw2ICs5NDMsMjcgQEAKIAogfQogCisvKiBTZW5kIHRoZSB3aG9sZSBtZXNzYWdlLCBjaHVuayBieSBjaHVuaywgdG8gdGhlIG91dHF1ZXVlLgorICogVGhpcyB3YXkgdGhlIHdob2xlIG1lc3NhZ2UgaXMgcXVldWVkIHVwIGFuZCBidW5kbGluZyBpZgorICogZW5jb3VyYWdlZCBmb3Igc21hbGwgZnJhZ21lbnRzLgorICovCitzdGF0aWMgaW50IHNjdHBfY21kX3NlbmRfbXNnKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJCXN0cnVjdCBzY3RwX2RhdGFtc2cgKm1zZykKK3sKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bms7CisJaW50IGVycm9yID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZtc2ctPmNodW5rcywgZnJhZ19saXN0KSB7CisJCWVycm9yID0gc2N0cF9vdXRxX3RhaWwoJmFzb2MtPm91dHF1ZXVlLCBjaHVuayk7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworCisKIC8qIFRoZXNlIHRocmVlIG1hY3JvcyBhbGxvdyB1cyB0byBwdWxsIHRoZSBkZWJ1Z2dpbmcgY29kZSBvdXQgb2YgdGhlCiAgKiBtYWluIGZsb3cgb2Ygc2N0cF9kb19zbSgpIHRvIGtlZXAgYXR0ZW50aW9uIGZvY3VzZWQgb24gdGhlIHJlYWwKICAqIGZ1bmN0aW9uYWxpdHkgdGhlcmUuCkBAIC0xNTAwLDcgKzE1MzMsOCBAQAogCQljYXNlIFNDVFBfQ01EX1BST0NFU1NfQ1RTTjoKIAkJCS8qIER1bW15IHVwIGEgU0FDSyBmb3IgcHJvY2Vzc2luZy4gKi8KIAkJCXNhY2toLmN1bV90c25fYWNrID0gY21kLT5vYmouYmUzMjsKLQkJCXNhY2toLmFfcnduZCA9IDA7CisJCQlzYWNraC5hX3J3bmQgPSBhc29jLT5wZWVyLnJ3bmQgKworCQkJCQlhc29jLT5vdXRxdWV1ZS5vdXRzdGFuZGluZ19ieXRlczsKIAkJCXNhY2toLm51bV9nYXBfYWNrX2Jsb2NrcyA9IDA7CiAJCQlzYWNraC5udW1fZHVwX3RzbnMgPSAwOwogCQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9QUk9DRVNTX1NBQ0ssCkBAIC0xNTc1LDcgKzE2MDksMTMgQEAKIAkJY2FzZSBTQ1RQX0NNRF9VUERBVEVfSU5JVFRBRzoKIAkJCWFzb2MtPnBlZXIuaS5pbml0X3RhZyA9IGNtZC0+b2JqLnUzMjsKIAkJCWJyZWFrOwotCisJCWNhc2UgU0NUUF9DTURfU0VORF9NU0c6CisJCQlpZiAoIWFzb2MtPm91dHF1ZXVlLmNvcmspIHsKKwkJCQlzY3RwX291dHFfY29yaygmYXNvYy0+b3V0cXVldWUpOworCQkJCWxvY2FsX2NvcmsgPSAxOworCQkJfQorCQkJZXJyb3IgPSBzY3RwX2NtZF9zZW5kX21zZyhhc29jLCBjbWQtPm9iai5tc2cpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbXBvc3NpYmxlIGNvbW1hbmQ6ICV1LCAlcFxuIiwKIAkJCSAgICAgICBjbWQtPnZlcmIsIGNtZC0+b2JqLnB0cik7CkBAIC0xNTkzLDkgKzE2MzMsOSBAQAogCSAqLwogCWlmIChhc29jICYmIFNDVFBfRVZFTlRfVF9DSFVOSyA9PSBldmVudF90eXBlICYmIGNodW5rKSB7CiAJCWlmIChjaHVuay0+ZW5kX29mX3BhY2tldCB8fCBjaHVuay0+c2luZ2xldG9uKQotCQkJc2N0cF9vdXRxX3VuY29yaygmYXNvYy0+b3V0cXVldWUpOworCQkJZXJyb3IgPSBzY3RwX291dHFfdW5jb3JrKCZhc29jLT5vdXRxdWV1ZSk7CiAJfSBlbHNlIGlmIChsb2NhbF9jb3JrKQotCQkJc2N0cF9vdXRxX3VuY29yaygmYXNvYy0+b3V0cXVldWUpOworCQllcnJvciA9IHNjdHBfb3V0cV91bmNvcmsoJmFzb2MtPm91dHF1ZXVlKTsKIAlyZXR1cm4gZXJyb3I7CiBub21lbToKIAllcnJvciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDcyODgxOTIuLmM4ZmFlMTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC0zMzQsNiArMzM0LDE1IEBACiAJaWYgKCFzY3RwX2NodW5rX2xlbmd0aF92YWxpZChjaHVuaywgc2l6ZW9mKHNjdHBfaW5pdF9jaHVua190KSkpCiAJCXJldHVybiBzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKIAorCS8qIElmIHRoZSBJTklUIGlzIGNvbWluZyB0b3dhcmQgYSBjbG9zaW5nIHNvY2tldCwgd2UnbGwgc2VuZCBiYWNrCisJICogYW5kIEFCT1JULiAgRXNzZW50aWFsbHksIHRoaXMgY2F0Y2hlcyB0aGUgcmFjZSBvZiBJTklUIGJlaW5nCisJICogYmFja2xvZ2VkIHRvIHRoZSBzb2NrZXQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgdXNlciBpc3NlcyBjbG9zZSgpLgorCSAqIFNpbmNlIHRoZSBzb2NrZXQgYW5kIGFsbCBpdHMgYXNzb2NpYXRpb25zIGFyZSBnb2luZyBhd2F5LCB3ZQorCSAqIGNhbiB0cmVhdCB0aGlzIE9PVEIKKwkgKi8KKwlpZiAoc2N0cF9zc3RhdGUoZXAtPmJhc2Uuc2ssIENMT1NJTkcpKQorCQlyZXR1cm4gc2N0cF9zZl90YWJvcnRfOF80XzgoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOworCiAJLyogVmVyaWZ5IHRoZSBJTklUIGNodW5rIGJlZm9yZSBwcm9jZXNzaW5nIGl0LiAqLwogCWVycl9jaHVuayA9IE5VTEw7CiAJaWYgKCFzY3RwX3ZlcmlmeV9pbml0KGFzb2MsIGNodW5rLT5jaHVua19oZHItPnR5cGUsCkBAIC05NjIsNyArOTcxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCA9IChzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKikgYXJnOwogCi0JaWYgKGFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPiBhc29jLT5tYXhfcmV0cmFucykgeworCWlmIChhc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50ID49IGFzb2MtPm1heF9yZXRyYW5zKSB7CiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKIAkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQkvKiBDTURfQVNTT0NfRkFJTEVEIGNhbGxzIENNRF9ERUxFVEVfVENCLiAqLwpAQCAtMTEwNiw3ICsxMTE1LDggQEAKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwogCiAJLyogTWFrZSBzdXJlIHRoYXQgdGhlIEhFQVJUQkVBVC1BQ0sgY2h1bmsgaGFzIGEgdmFsaWQgbGVuZ3RoLiAgKi8KLQlpZiAoIXNjdHBfY2h1bmtfbGVuZ3RoX3ZhbGlkKGNodW5rLCBzaXplb2Yoc2N0cF9oZWFydGJlYXRfY2h1bmtfdCkpKQorCWlmICghc2N0cF9jaHVua19sZW5ndGhfdmFsaWQoY2h1bmssIHNpemVvZihzY3RwX2NodW5raGRyX3QpICsKKwkJCQkJICAgIHNpemVvZihzY3RwX3NlbmRlcl9oYl9pbmZvX3QpKSkKIAkJcmV0dXJuIHNjdHBfc2ZfdmlvbGF0aW9uX2NodW5rbGVuKGVwLCBhc29jLCB0eXBlLCBhcmcsCiAJCQkJCQkgIGNvbW1hbmRzKTsKIApAQCAtMjU2MSw2ICsyNTcxLDEyIEBACiAJY2h1bmstPnN1Ymguc2h1dGRvd25faGRyID0gc2RoOwogCWN0c24gPSBudG9obChzZGgtPmN1bV90c25fYWNrKTsKIAorCWlmIChUU05fbHQoY3RzbiwgYXNvYy0+Y3Rzbl9hY2tfcG9pbnQpKSB7CisJCVNDVFBfREVCVUdfUFJJTlRLKCJjdHNuICV4XG4iLCBjdHNuKTsKKwkJU0NUUF9ERUJVR19QUklOVEsoImN0c25fYWNrX3BvaW50ICV4XG4iLCBhc29jLT5jdHNuX2Fja19wb2ludCk7CisJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CisJfQorCiAJLyogSWYgQ3VtdWxhdGl2ZSBUU04gQWNrIGJleW9uZCB0aGUgbWF4IHRzbiBjdXJyZW50bHkKIAkgKiBzZW5kLCB0ZXJtaW5hdGluZyB0aGUgYXNzb2NpYXRpb24gYW5kIHJlc3BvbmQgdG8gdGhlCiAJICogc2VuZGVyIHdpdGggYW4gQUJPUlQuCkBAIC0yNjI0LDYgKzI2NDAsNyBAQAogewogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IGFyZzsKIAlzY3RwX3NodXRkb3duaGRyX3QgKnNkaDsKKwlfX3UzMiBjdHNuOwogCiAJaWYgKCFzY3RwX3Z0YWdfdmVyaWZ5KGNodW5rLCBhc29jKSkKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQoZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpOwpAQCAtMjYzNSwxMiArMjY1MiwxOSBAQAogCQkJCQkJICBjb21tYW5kcyk7CiAKIAlzZGggPSAoc2N0cF9zaHV0ZG93bmhkcl90ICopY2h1bmstPnNrYi0+ZGF0YTsKKwljdHNuID0gbnRvaGwoc2RoLT5jdW1fdHNuX2Fjayk7CisKKwlpZiAoVFNOX2x0KGN0c24sIGFzb2MtPmN0c25fYWNrX3BvaW50KSkgeworCQlTQ1RQX0RFQlVHX1BSSU5USygiY3RzbiAleFxuIiwgY3Rzbik7CisJCVNDVFBfREVCVUdfUFJJTlRLKCJjdHNuX2Fja19wb2ludCAleFxuIiwgYXNvYy0+Y3Rzbl9hY2tfcG9pbnQpOworCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOworCX0KIAogCS8qIElmIEN1bXVsYXRpdmUgVFNOIEFjayBiZXlvbmQgdGhlIG1heCB0c24gY3VycmVudGx5CiAJICogc2VuZCwgdGVybWluYXRpbmcgdGhlIGFzc29jaWF0aW9uIGFuZCByZXNwb25kIHRvIHRoZQogCSAqIHNlbmRlciB3aXRoIGFuIEFCT1JULgogCSAqLwotCWlmICghVFNOX2x0KG50b2hsKHNkaC0+Y3VtX3Rzbl9hY2spLCBhc29jLT5uZXh0X3RzbikpCisJaWYgKCFUU05fbHQoY3RzbiwgYXNvYy0+bmV4dF90c24pKQogCQlyZXR1cm4gc2N0cF9zZl92aW9sYXRpb25fY3RzbihlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAKIAkvKiB2ZXJpZnksIGJ5IGNoZWNraW5nIHRoZSBDdW11bGF0aXZlIFRTTiBBY2sgZmllbGQgb2YgdGhlCkBAIC0yODY3LDYgKzI4OTEsOSBAQAogCQlnb3RvIGRpc2NhcmRfZm9yY2U7CiAJY2FzZSBTQ1RQX0lFUlJPUl9OT19EQVRBOgogCQlnb3RvIGNvbnN1bWU7CisJY2FzZSBTQ1RQX0lFUlJPUl9QUk9UT19WSU9MQVRJT046CisJCXJldHVybiBzY3RwX3NmX2Fib3J0X3Zpb2xhdGlvbihlcCwgYXNvYywgY2h1bmssIGNvbW1hbmRzLAorCQkJKHU4ICopY2h1bmstPnN1YmguZGF0YV9oZHIsIHNpemVvZihzY3RwX2RhdGFoZHJfdCkpOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTI5NzcsNiArMzAwNCw5IEBACiAJCWJyZWFrOwogCWNhc2UgU0NUUF9JRVJST1JfTk9fREFUQToKIAkJZ290byBjb25zdW1lOworCWNhc2UgU0NUUF9JRVJST1JfUFJPVE9fVklPTEFUSU9OOgorCQlyZXR1cm4gc2N0cF9zZl9hYm9ydF92aW9sYXRpb24oZXAsIGFzb2MsIGNodW5rLCBjb21tYW5kcywKKwkJCSh1OCAqKWNodW5rLT5zdWJoLmRhdGFfaGRyLCBzaXplb2Yoc2N0cF9kYXRhaGRyX3QpKTsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9CkBAIC0zNTE5LDYgKzM1NDksMTIgQEAKIAkJYXNjb25mX2FjayA9IHNjdHBfYXNzb2NfbG9va3VwX2FzY29uZl9hY2soYXNvYywgaGRyLT5zZXJpYWwpOwogCQlpZiAoIWFzY29uZl9hY2spCiAJCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOworCisJCS8qIFJlc2V0IHRoZSB0cmFuc3BvcnQgc28gdGhhdCB3ZSBzZWxlY3QgdGhlIGNvcnJlY3Qgb25lCisJCSAqIHRoaXMgdGltZSBhcm91bmQuICBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0CisJCSAqIGFjY2lkZW50YWxseSB1c2UgYSBzdGFsZSB0cmFuc3BvcnQgdGhhdCdzIGJlZW4gcmVtb3ZlZC4KKwkJICovCisJCWFzY29uZl9hY2stPnRyYW5zcG9ydCA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJLyogQURESVAgNS4yIEU1KSBPdGhlcndpc2UsIHRoZSBBU0NPTkYgQ2h1bmsgaXMgZGlzY2FyZGVkIHNpbmNlCiAJCSAqIGl0IG11c3QgYmUgZWl0aGVyIGEgc3RhbGUgcGFja2V0IG9yIGZyb20gYW4gYXR0YWNrZXIuCkBAIC00NTQ2LDkgKzQ1ODIsOSBAQAogCQkJCSAgICAgICB2b2lkICphcmcsCiAJCQkJICAgICAgIHNjdHBfY21kX3NlcV90ICpjb21tYW5kcykKIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhcmc7CisJc3RydWN0IHNjdHBfZGF0YW1zZyAqbXNnID0gYXJnOwogCi0Jc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBMWSwgU0NUUF9DSFVOSyhjaHVuaykpOworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VORF9NU0csIFNDVFBfREFUQU1TRyhtc2cpKTsKIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogfQogCkBAIC01ODQ3LDYgKzU4ODMsOSBAQAogCV9fdTMyIHRzbjsKIAlzdHJ1Y3Qgc2N0cF90c25tYXAgKm1hcCA9IChzdHJ1Y3Qgc2N0cF90c25tYXAgKikmYXNvYy0+cGVlci50c25fbWFwOwogCXN0cnVjdCBzb2NrICpzayA9IGFzb2MtPmJhc2Uuc2s7CisJdTE2IHNzbjsKKwl1MTYgc2lkOworCXU4IG9yZGVyZWQgPSAwOwogCiAJZGF0YV9oZHIgPSBjaHVuay0+c3ViaC5kYXRhX2hkciA9IChzY3RwX2RhdGFoZHJfdCAqKWNodW5rLT5za2ItPmRhdGE7CiAJc2tiX3B1bGwoY2h1bmstPnNrYiwgc2l6ZW9mKHNjdHBfZGF0YWhkcl90KSk7CkBAIC01OTg2LDggKzYwMjUsMTAgQEAKIAkgKi8KIAlpZiAoY2h1bmstPmNodW5rX2hkci0+ZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKQogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9JTlVOT1JERVJDSFVOS1MpOwotCWVsc2UKKwllbHNlIHsKIAkJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfSU5PUkRFUkNIVU5LUyk7CisJCW9yZGVyZWQgPSAxOworCX0KIAogCS8qIFJGQyAyOTYwIDYuNSBTdHJlYW0gSWRlbnRpZmllciBhbmQgU3RyZWFtIFNlcXVlbmNlIE51bWJlcgogCSAqCkBAIC01OTk3LDcgKzYwMzgsOCBAQAogCSAqIHdpdGggY2F1c2Ugc2V0IHRvICJJbnZhbGlkIFN0cmVhbSBJZGVudGlmaWVyIiAoU2VlIFNlY3Rpb24gMy4zLjEwKQogCSAqIGFuZCBkaXNjYXJkIHRoZSBEQVRBIGNodW5rLgogCSAqLwotCWlmIChudG9ocyhkYXRhX2hkci0+c3RyZWFtKSA+PSBhc29jLT5jLnNpbml0X21heF9pbnN0cmVhbXMpIHsKKwlzaWQgPSBudG9ocyhkYXRhX2hkci0+c3RyZWFtKTsKKwlpZiAoc2lkID49IGFzb2MtPmMuc2luaXRfbWF4X2luc3RyZWFtcykgewogCQkvKiBNYXJrIHRzbiBhcyByZWNlaXZlZCBldmVuIHRob3VnaCB3ZSBkcm9wIGl0ICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQT1JUX1RTTiwgU0NUUF9VMzIodHNuKSk7CiAKQEAgLTYwMTAsNiArNjA1MiwxOCBAQAogCQlyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NUUkVBTTsKIAl9CiAKKwkvKiBDaGVjayB0byBzZWUgaWYgdGhlIFNTTiBpcyBwb3NzaWJsZSBmb3IgdGhpcyBUU04uCisJICogVGhlIGJpZ2dlc3QgZ2FwIHdlIGNhbiByZWNvcmQgaXMgNEsgd2lkZS4gIFNpbmNlIFNTTnMgd3JhcAorCSAqIGF0IGFuIHVuc2lnbmVkIHNob3J0LCB0aGVyZSBpcyBubyB3YXkgdGhhdCBhbiBTU04gY2FuCisJICogd3JhcCBhbmQgZm9yIGEgdmFsaWQgVFNOLiAgV2UgY2FuIHNpbXBseSBjaGVjayBpZiB0aGUgY3VycmVudAorCSAqIFNTTiBpcyBzbWFsbGVyIHRoZW4gdGhlIG5leHQgZXhwZWN0ZWQgb25lLiAgSWYgaXQgaXMsIGl0IHdyYXBwZWQKKwkgKiBhbmQgaXMgaW52YWxpZC4KKwkgKi8KKwlzc24gPSBudG9ocyhkYXRhX2hkci0+c3NuKTsKKwlpZiAob3JkZXJlZCAmJiBTU05fbHQoc3NuLCBzY3RwX3Nzbl9wZWVrKCZhc29jLT5zc25tYXAtPmluLCBzaWQpKSkgeworCQlyZXR1cm4gU0NUUF9JRVJST1JfUFJPVE9fVklPTEFUSU9OOworCX0KKwogCS8qIFNlbmQgdGhlIGRhdGEgdXAgdG8gdGhlIHVzZXIuICBOb3RlOiAgU2NoZWR1bGUgIHRoZQogCSAqIFNDVFBfQ01EX0NIVU5LX1VMUCBjbWQgYmVmb3JlIHRoZSBTQ1RQX0NNRF9HRU5fU0FDSywgYXMgdGhlIFNBQ0sKIAkgKiBjaHVuayBuZWVkcyB0aGUgdXBkYXRlZCByd25kLgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCA5NzE4OTBkLi44OWFmMzdhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTM2MSw2ICsxMzYxLDcgQEAKIAogCXNjdHBfbG9ja19zb2NrKHNrKTsKIAlzay0+c2tfc2h1dGRvd24gPSBTSFVURE9XTl9NQVNLOworCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0lORzsKIAogCWVwID0gc2N0cF9zayhzayktPmVwOwogCkBAIC0xODEzLDIwICsxODE0LDIyIEBACiAJCXNjdHBfc2V0X293bmVyX3coY2h1bmspOwogCiAJCWNodW5rLT50cmFuc3BvcnQgPSBjaHVua190cDsKLQotCQkvKiBTZW5kIGl0IHRvIHRoZSBsb3dlciBsYXllcnMuICBOb3RlOiAgYWxsIGNodW5rcwotCQkgKiBtdXN0IGVpdGhlciBmYWlsIG9yIHN1Y2NlZWQuICAgVGhlIGxvd2VyIGxheWVyCi0JCSAqIHdvcmtzIHRoYXQgd2F5IHRvZGF5LiAgS2VlcCBpdCB0aGF0IHdheSBvciB0aGlzCi0JCSAqIGJyZWFrcy4KLQkJICovCi0JCWVyciA9IHNjdHBfcHJpbWl0aXZlX1NFTkQoYXNvYywgY2h1bmspOwotCQkvKiBEaWQgdGhlIGxvd2VyIGxheWVyIGFjY2VwdCB0aGUgY2h1bms/ICovCi0JCWlmIChlcnIpCi0JCQlzY3RwX2NodW5rX2ZyZWUoY2h1bmspOwotCQlTQ1RQX0RFQlVHX1BSSU5USygiV2Ugc2VudCBwcmltaXRpdmVseS5cbiIpOwogCX0KIAotCXNjdHBfZGF0YW1zZ19wdXQoZGF0YW1zZyk7CisJLyogU2VuZCBpdCB0byB0aGUgbG93ZXIgbGF5ZXJzLiAgTm90ZTogIGFsbCBjaHVua3MKKwkgKiBtdXN0IGVpdGhlciBmYWlsIG9yIHN1Y2NlZWQuICAgVGhlIGxvd2VyIGxheWVyCisJICogd29ya3MgdGhhdCB3YXkgdG9kYXkuICBLZWVwIGl0IHRoYXQgd2F5IG9yIHRoaXMKKwkgKiBicmVha3MuCisJICovCisJZXJyID0gc2N0cF9wcmltaXRpdmVfU0VORChhc29jLCBkYXRhbXNnKTsKKwkvKiBEaWQgdGhlIGxvd2VyIGxheWVyIGFjY2VwdCB0aGUgY2h1bms/ICovCisJaWYgKGVycikKKwkJc2N0cF9kYXRhbXNnX2ZyZWUoZGF0YW1zZyk7CisJZWxzZQorCQlzY3RwX2RhdGFtc2dfcHV0KGRhdGFtc2cpOworCisJU0NUUF9ERUJVR19QUklOVEsoIldlIHNlbnQgcHJpbWl0aXZlbHkuXG4iKTsKKwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CiAJZWxzZQpAQCAtMjI0MCw3ICsyMjQzLDcgQEAKIAkJCXNjdHBfYXNzb2Nfc3luY19wbXR1KGFzb2MpOwogCQl9IGVsc2UgaWYgKGFzb2MpIHsKIAkJCWFzb2MtPnBhdGhtdHUgPSBwYXJhbXMtPnNwcF9wYXRobXR1OwotCQkJc2N0cF9mcmFnX3BvaW50KHNwLCBwYXJhbXMtPnNwcF9wYXRobXR1KTsKKwkJCXNjdHBfZnJhZ19wb2ludChhc29jLCBwYXJhbXMtPnNwcF9wYXRobXR1KTsKIAkJfSBlbHNlIHsKIAkJCXNwLT5wYXRobXR1ID0gcGFyYW1zLT5zcHBfcGF0aG10dTsKIAkJfQpAQCAtMjg3NywxNSArMjg4MCwxMCBAQAogCQkJdmFsIC09IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKwogCQkJCQlzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuayk7CiAJCX0KLQotCQlhc29jLT5mcmFnX3BvaW50ID0gdmFsOworCQlhc29jLT51c2VyX2ZyYWcgPSB2YWw7CisJCWFzb2MtPmZyYWdfcG9pbnQgPSBzY3RwX2ZyYWdfcG9pbnQoYXNvYywgYXNvYy0+cGF0aG10dSk7CiAJfSBlbHNlIHsKIAkJc3AtPnVzZXJfZnJhZyA9IHZhbDsKLQotCQkvKiBVcGRhdGUgdGhlIGZyYWdfcG9pbnQgb2YgdGhlIGV4aXN0aW5nIGFzc29jaWF0aW9ucy4gKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShhc29jLCAmKHNwLT5lcC0+YXNvY3MpLCBhc29jcykgewotCQkJYXNvYy0+ZnJhZ19wb2ludCA9IHNjdHBfZnJhZ19wb2ludChzcCwgYXNvYy0+cGF0aG10dSk7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N5c2N0bC5jIGIvbmV0L3NjdHAvc3lzY3RsLmMKaW5kZXggNjNlYWJiYy4uYWI3MTUxZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc3lzY3RsLmMKKysrIGIvbmV0L3NjdHAvc3lzY3RsLmMKQEAgLTUxLDYgKzUxLDcgQEAKIHN0YXRpYyBpbnQgaW50X21heCA9IElOVF9NQVg7CiBzdGF0aWMgaW50IHNhY2tfdGltZXJfbWluID0gMTsKIHN0YXRpYyBpbnQgc2Fja190aW1lcl9tYXggPSA1MDA7CitzdGF0aWMgaW50IGFkZHJfc2NvcGVfbWF4ID0gMzsgLyogY2hlY2sgc2N0cF9zY29wZV9wb2xpY3lfdCBpbiBpbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oIGZvciBtYXggZW50cmllcyAqLwogCiBleHRlcm4gaW50IHN5c2N0bF9zY3RwX21lbVszXTsKIGV4dGVybiBpbnQgc3lzY3RsX3NjdHBfcm1lbVszXTsKQEAgLTI3Miw2ICsyNzMsMTcgQEAKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJCS5zdHJhdGVneQk9IHN5c2N0bF9pbnR2ZWMKIAl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJhZGRyX3Njb3BlX3BvbGljeSIsCisJCS5kYXRhCQk9ICZzY3RwX3Njb3BlX3BvbGljeSwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJmFkZHJfc2NvcGVfbWF4LAorCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3RyYW5zcG9ydC5jIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKaW5kZXggZTVkZGU0NS4uYzI1NmU0OCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKQEAgLTUwMyw2ICs1MDMsOSBAQAogCQl0cmFuc3BvcnQtPnNzdGhyZXNoID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAogCQkJCQkgIDQqdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1KTsKIAkJdHJhbnNwb3J0LT5jd25kID0gdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1OworCisJCS8qIFQzLXJ0eCBhbHNvIGNsZWFycyBmYXN0IHJlY292ZXJ5IG9uIHRoZSB0cmFuc3BvcnQgKi8KKwkJdHJhbnNwb3J0LT5mYXN0X3JlY292ZXJ5ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIFNDVFBfTE9XRVJfQ1dORF9GQVNUX1JUWDoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmMKaW5kZXggYTdhMzY3Ny4uMzI3MDExZiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmVhcmVyLmMKKysrIGIvbmV0L3RpcGMvYmVhcmVyLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCQl3YXJuKCJNZWRpYSA8JXM+IHJlamVjdGVkLCBubyBicm9hZGNhc3QgYWRkcmVzc1xuIiwgbmFtZSk7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JaWYgKChiZWFyZXJfcHJpb3JpdHkgPCBUSVBDX01JTl9MSU5LX1BSSSkgJiYKKwlpZiAoKGJlYXJlcl9wcmlvcml0eSA8IFRJUENfTUlOX0xJTktfUFJJKSB8fAogCSAgICAoYmVhcmVyX3ByaW9yaXR5ID4gVElQQ19NQVhfTElOS19QUkkpKSB7CiAJCXdhcm4oIk1lZGlhIDwlcz4gcmVqZWN0ZWQsIGlsbGVnYWwgcHJpb3JpdHkgKCV1KVxuIiwgbmFtZSwKIAkJICAgICBiZWFyZXJfcHJpb3JpdHkpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0bGluay5jIGIvbmV0L3RpcGMvbmV0bGluay5jCmluZGV4IDNjNTcwMDUuLjdiZGE4ZTMgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25ldGxpbmsuYworKysgYi9uZXQvdGlwYy9uZXRsaW5rLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAkJcmVwX25saCA9IG5sbXNnX2hkcihyZXBfYnVmKTsKIAkJbWVtY3B5KHJlcF9ubGgsIHJlcV9ubGgsIGhkcl9zcGFjZSk7CiAJCXJlcF9ubGgtPm5sbXNnX2xlbiA9IHJlcF9idWYtPmxlbjsKLQkJZ2VubG1zZ191bmljYXN0KHJlcF9idWYsIE5FVExJTktfQ0Ioc2tiKS5waWQpOworCQlnZW5sbXNnX3VuaWNhc3QoJmluaXRfbmV0LCByZXBfYnVmLCBORVRMSU5LX0NCKHNrYikucGlkKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC90aXBjL3NvY2tldC5jIGIvbmV0L3RpcGMvc29ja2V0LmMKaW5kZXggMTg0ODY5My4uZTgyNTRlOCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc29ja2V0LmMKKysrIGIvbmV0L3RpcGMvc29ja2V0LmMKQEAgLTE3NDgsNiArMTc0OCwxMiBAQAogCQl2YWx1ZSA9IGppZmZpZXNfdG9fbXNlY3Moc2stPnNrX3JjdnRpbWVvKTsKIAkJLyogbm8gbmVlZCB0byBzZXQgInJlcyIsIHNpbmNlIGFscmVhZHkgMCBhdCB0aGlzIHBvaW50ICovCiAJCWJyZWFrOworCSBjYXNlIFRJUENfTk9ERV9SRUNWUV9ERVBUSDoKKwkJdmFsdWUgPSAodTMyKWF0b21pY19yZWFkKCZ0aXBjX3F1ZXVlX3NpemUpOworCQlicmVhazsKKwkgY2FzZSBUSVBDX1NPQ0tfUkVDVlFfREVQVEg6CisJCXZhbHVlID0gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXMgPSAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBmYzNlYmI5Li41MWFiNDk3IDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xNTAxLDYgKzE1MDEsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHNlbnQgPSAwOwogCXN0cnVjdCBzY21fY29va2llIHRtcF9zY207CisJYm9vbCBmZHNfc2VudCA9IGZhbHNlOwogCiAJaWYgKE5VTEwgPT0gc2lvY2ItPnNjbSkKIAkJc2lvY2ItPnNjbSA9ICZ0bXBfc2NtOwpAQCAtMTU2MiwxMiArMTU2MywxNCBAQAogCQlzaXplID0gbWluX3QoaW50LCBzaXplLCBza2JfdGFpbHJvb20oc2tiKSk7CiAKIAkJbWVtY3B5KFVOSVhDUkVEUyhza2IpLCAmc2lvY2ItPnNjbS0+Y3JlZHMsIHNpemVvZihzdHJ1Y3QgdWNyZWQpKTsKLQkJaWYgKHNpb2NiLT5zY20tPmZwKSB7CisJCS8qIE9ubHkgc2VuZCB0aGUgZmRzIGluIHRoZSBmaXJzdCBidWZmZXIgKi8KKwkJaWYgKHNpb2NiLT5zY20tPmZwICYmICFmZHNfc2VudCkgewogCQkJZXJyID0gdW5peF9hdHRhY2hfZmRzKHNpb2NiLT5zY20sIHNrYik7CiAJCQlpZiAoZXJyKSB7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJZ290byBvdXRfZXJyOwogCQkJfQorCQkJZmRzX3NlbnQgPSB0cnVlOwogCQl9CiAKIAkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZy0+bXNnX2lvdiwgc2l6ZSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDQ0MjhkZDUuLmFiZjdjYTMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9LY29uZmlnCisrKyBiL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0xLDYgKzEsNDcgQEAKIGNvbmZpZyBDRkc4MDIxMQotCXRyaXN0YXRlICJJbXByb3ZlZCB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSSIKKwl0cmlzdGF0ZSAiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSSIKIAlkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMCisJLS0taGVscC0tLQorCSAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS4KKwkgIEVuYWJsZSB0aGlzIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MgZGV2aWNlLgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byBkb2N1bWVudGF0aW9uIG9uIHRoZSB3aXJlbGVzcyB3aWtpOgorCisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTEKKworCSAgV2hlbiBidWlsdCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBjZmc4MDIxMS4KKworY29uZmlnIE5MODAyMTFfVEVTVE1PREUKKwlib29sICJubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmQiCisJZGVwZW5kcyBvbiBDRkc4MDIxMQorCWhlbHAKKwkgIFRoZSBubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmQgaGVscHMgaW1wbGVtZW50aW5nIHRoaW5ncyBsaWtlCisJICBmYWN0b3J5IGNhbGlicmF0aW9uIG9yIHZhbGlkYXRpb24gdG9vbHMgZm9yIHdpcmVsZXNzIGNoaXBzLgorCisJICBTZWxlY3QgdGhpcyBvcHRpb24gT05MWSBmb3Iga2VybmVscyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkKKwkgIGJ1aWx0IGZvciBzdWNoIHB1cnBvc2VzLgorCisJICBEZWJ1Z2dpbmcgdG9vbHMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gZW5kIHVwIGluIHRoZSBoYW5kcyBvZgorCSAgdXNlcnMgc2hvdWxkIGJldHRlciBiZSBpbXBsZW1lbnRlZCB3aXRoIGRlYnVnZnMuCisKKwkgIFNheSBOLgorCitjb25maWcgQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTCisJYm9vbCAiZW5hYmxlIGRldmVsb3BlciB3YXJuaW5ncyIKKwlkZXBlbmRzIG9uIENGRzgwMjExCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzb21lIGFkZGl0aW9uYWwgd2FybmluZ3MgdGhhdCBoZWxwCisJICBjZmc4MDIxMSBkZXZlbG9wZXJzIGFuZCBkcml2ZXIgZGV2ZWxvcGVycywgYnV0IHRoYXQgY2FuCisJICB0cmlnZ2VyIGR1ZSB0byByYWNlcyB3aXRoIHVzZXJzcGFjZS4KKworCSAgRm9yIGV4YW1wbGUsIHdoZW4gYSBkcml2ZXIgcmVwb3J0cyB0aGF0IGl0IHdhcyBkaXNjb25uZWN0ZWQKKwkgIGZyb20gdGhlIEFQLCBidXQgdGhlIHVzZXIgZGlzY29ubmVjdHMgbWFudWFsbHkgYXQgdGhlIHNhbWUKKwkgIHRpbWUsIHRoZSB3YXJuaW5nIG1pZ2h0IHRyaWdnZXIgc3B1cmlvdXNseSBkdWUgdG8gcmFjZXMuCisKKwkgIFNheSBZIG9ubHkgaWYgeW91IGFyZSBkZXZlbG9waW5nIGNmZzgwMjExIG9yIGEgZHJpdmVyIGJhc2VkCisJICBvbiBpdCAob3IgbWFjODAyMTEpLgorCiAKIGNvbmZpZyBDRkc4MDIxMV9SRUdfREVCVUcKIAlib29sICJjZmc4MDIxMSByZWd1bGF0b3J5IGRlYnVnZ2luZyIKQEAgLTgsOSArNDksMjkgQEAKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBZb3UgY2FuIGVuYWJsZSB0aGlzIGlmIHlvdSB3YW50IHRvIGRlYnVnIHJlZ3VsYXRvcnkgY2hhbmdlcy4KKwkgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNmZzgwMjExIHJlZ3VsYXRvcnkgcmVmZXIgdG8gdGhlIHdpcmVsZXNzCisJICB3aWtpOgorCisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL1JlZ3VsYXRvcnkKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFMKKwlib29sICJlbmFibGUgcG93ZXJzYXZlIGJ5IGRlZmF1bHQiCisJZGVwZW5kcyBvbiBDRkc4MDIxMQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgcG93ZXJzYXZlIG1vZGUgYnkgZGVmYXVsdC4KKworCSAgSWYgdGhpcyBjYXVzZXMgeW91ciBhcHBsaWNhdGlvbnMgdG8gbWlzYmVoYXZlIHlvdSBzaG91bGQgZml4IHlvdXIKKwkgIGFwcGxpY2F0aW9ucyBpbnN0ZWFkIC0tIHRoZXkgbmVlZCB0byByZWdpc3RlciB0aGVpciBuZXR3b3JrCisJICBsYXRlbmN5IHJlcXVpcmVtZW50LCBzZWUgRG9jdW1lbnRhdGlvbi9wb3dlci9wbV9xb3NfaW50ZXJmYWNlLnR4dC4KKworY29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUUKKwlpbnQKKwlkZWZhdWx0IDEgaWYgQ0ZHODAyMTFfREVGQVVMVF9QUworCWRlZmF1bHQgMAorCiBjb25maWcgQ0ZHODAyMTFfREVCVUdGUwogCWJvb2wgImNmZzgwMjExIERlYnVnRlMgZW50cmllcyIKIAlkZXBlbmRzIG9uIENGRzgwMjExICYmIERFQlVHX0ZTCkBAIC0zNSwxOSArOTYsMTMgQEAKIAogY29uZmlnIFdJUkVMRVNTX0VYVAogCWJvb2wgIldpcmVsZXNzIGV4dGVuc2lvbnMiCi0JZGVmYXVsdCBuCisJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbGVnYWN5IHdpcmVsZXNzIGV4dGVuc2lvbnMKIAkgICh3aXJlbGVzcyBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uIHZpYSBpb2N0bHMuKQogCi0JICBXaXJlbGVzcyBleHRlbnNpb25zIHdpbGwgYmUgcmVwbGFjZWQgYnkgY2ZnODAyMTEgYW5kCi0JICB3aWxsIGJlIHJlcXVpcmVkIG9ubHkgYnkgbGVnYWN5IGRyaXZlcnMgdGhhdCBpbXBsZW1lbnQKLQkgIHdpcmVsZXNzIGV4dGVuc2lvbiBoYW5kbGVycy4gVGhpcyBvcHRpb24gZG9lcyBub3QKLQkgIGFmZmVjdCB0aGUgd2lyZWxlc3MtZXh0ZW5zaW9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKLQkgIGNvZGUgaW4gY2ZnODAyMTEuCi0KLQkgIFNheSBOIChpZiB5b3UgY2FuKSB1bmxlc3MgeW91IGtub3cgeW91IG5lZWQgd2lyZWxlc3MKLQkgIGV4dGVuc2lvbnMgZm9yIGV4dGVybmFsIG1vZHVsZXMuCisJICBTYXkgWSB1bmxlc3MgeW91J3ZlIHVwZ3JhZGVkIGFsbCB5b3VyIHVzZXJzcGFjZSB0byB1c2UKKwkgIG5sODAyMTEgaW5zdGVhZCBvZiB3aXJlbGVzcyBleHRlbnNpb25zLgogCiBjb25maWcgV0lSRUxFU1NfRVhUX1NZU0ZTCiAJYm9vbCAiV2lyZWxlc3MgZXh0ZW5zaW9ucyBzeXNmcyBmaWxlcyIKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCBmNzhjNDgzLi4zZWNhYTkxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC01LDggKzUsOSBAQAogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVApICs9IGxpYjgwMjExX2NyeXB0X2NjbXAubwogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVApICs9IGxpYjgwMjExX2NyeXB0X3RraXAubwogCi1jZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm8gbWxtZS5vIGlic3MubworY2ZnODAyMTEteSArPSBjb3JlLm8gc3lzZnMubyByYWRpb3RhcC5vIHV0aWwubyByZWcubyBzY2FuLm8gbmw4MDIxMS5vCitjZmc4MDIxMS15ICs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vCiBjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTKSArPSBkZWJ1Z2ZzLm8KLWNmZzgwMjExLSQoQ09ORklHX1dJUkVMRVNTX0VYVCkgKz0gd2V4dC1jb21wYXQubworY2ZnODAyMTEtJChDT05GSUdfV0lSRUxFU1NfRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm8KIAogY2NmbGFncy15ICs9IC1EX19DSEVDS19FTkRJQU5fXwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NoYW4uYyBiL25ldC93aXJlbGVzcy9jaGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2YWM2YwotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy9jaGFuLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBoZWxwZXIgY29kZSB0byBoYW5kbGUgY2hhbm5lbAorICogc2V0dGluZ3MgYW5kIGtlZXBpbmcgdHJhY2sgb2Ygd2hhdCBpcyBwb3NzaWJsZSBhdAorICogYW55IHBvaW50IGluIHRpbWUuCisgKgorICogQ29weXJpZ2h0IDIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqLworCisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSAiY29yZS5oIgorCitzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKgorcmRldl9maXhlZF9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICAgc3RydWN0IHdpcmVsZXNzX2RldiAqZm9yX3dkZXYpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKnJlc3VsdCA9IE5VTEw7CisKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnJkZXYtPmRldmxpc3RfbXR4KSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZyZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkgeworCQlpZiAod2RldiA9PSBmb3Jfd2RldikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIExvY2sgbWFudWFsbHkgdG8gdGVsbCBsb2NrZGVwIGFib3V0IGFsbG93ZWQKKwkJICogbmVzdGluZyBoZXJlIGlmIGZvcl93ZGV2LT5tdHggaXMgaGVsZCBhbHJlYWR5LgorCQkgKiBUaGlzIGlzIG9rIGFzIGl0J3MgYWxsIHVuZGVyIHRoZSByZGV2IGRldmxpc3QKKwkJICogbXV0ZXggYW5kIGFzIHN1Y2ggY2FuIG9ubHkgYmUgZG9uZSBvbmNlIGF0IGFueQorCQkgKiBnaXZlbiB0aW1lLgorCQkgKi8KKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJndkZXYtPm10eCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCQlpZiAod2Rldi0+Y3VycmVudF9ic3MpCisJCQlyZXN1bHQgPSB3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmNoYW5uZWw7CisJCXdkZXZfdW5sb2NrKHdkZXYpOworCisJCWlmIChyZXN1bHQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgcmRldl9zZXRfZnJlcShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgc3RydWN0IHdpcmVsZXNzX2RldiAqZm9yX3dkZXYsCisJCSAgaW50IGZyZXEsIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQoreworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcDsKKwlpbnQgcmVzdWx0OworCisJaWYgKHJkZXZfZml4ZWRfY2hhbm5lbChyZGV2LCBmb3Jfd2RldikpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIXJkZXYtPm9wcy0+c2V0X2NoYW5uZWwpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoJnJkZXYtPndpcGh5LCBmcmVxKTsKKworCS8qIFByaW1hcnkgY2hhbm5lbCBub3QgYWxsb3dlZCAqLworCWlmICghY2hhbiB8fCBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyAmJgorCSAgICBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBNSU5VUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUyAmJgorCQkgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlodF9jYXAgPSAmcmRldi0+d2lwaHkuYmFuZHNbY2hhbi0+YmFuZF0tPmh0X2NhcDsKKworCWlmIChjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUKSB7CisJCWlmICghaHRfY2FwLT5odF9zdXBwb3J0ZWQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoIShodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB8fAorCQkgICAgaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXN1bHQgPSByZGV2LT5vcHMtPnNldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgY2hhbiwgY2hhbm5lbF90eXBlKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJcmRldi0+Y2hhbm5lbCA9IGNoYW47CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmMgYi9uZXQvd2lyZWxlc3MvY29yZS5jCmluZGV4IGQ1ODUwMjkuLjQ1YjJiZTMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmMKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgpAQCAtMTksNiArMjAsNyBAQAogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJzeXNmcy5oIgogI2luY2x1ZGUgImRlYnVnZnMuaCIKKyNpbmNsdWRlICJ3ZXh0LWNvbXBhdC5oIgogCiAvKiBuYW1lIGZvciBzeXNmcywgJWQgaXMgYXBwZW5kZWQgKi8KICNkZWZpbmUgUEhZX05BTUUgInBoeSIKQEAgLTMwLDEyICszMiwxMSBAQAogLyogUkNVIG1pZ2h0IGJlIGFwcHJvcHJpYXRlIGhlcmUgc2luY2Ugd2UgdXN1YWxseQogICogb25seSByZWFkIHRoZSBsaXN0LCBhbmQgdGhhdCBjYW4gaGFwcGVuIHF1aXRlCiAgKiBvZnRlbiBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gaXQgZm9yIGVhY2ggY29tbWFuZCAqLwotTElTVF9IRUFEKGNmZzgwMjExX2Rydl9saXN0KTsKK0xJU1RfSEVBRChjZmc4MDIxMV9yZGV2X2xpc3QpOworaW50IGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uOwogCiAvKgotICogVGhpcyBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGNmZzgwMjExX2Rydl9saXN0LCBjZmc4MDIxMV9yZWdkb21haW4sCi0gKiBjb3VudHJ5X2llX3JlZ2RvbWFpbiwgdGhlIHJlZ19iZWFjb25fbGlzdCBhbmQgdGhlIHRoZSBsYXN0IHJlZ3VsYXRvcnkKLSAqIHJlcXVlc3QgcmVjZWlwdCAobGFzdF9yZXF1ZXN0KS4KKyAqIFRoaXMgaXMgdXNlZCB0byBwcm90ZWN0IHRoZSBjZmc4MDIxMV9yZGV2X2xpc3QKICAqLwogREVGSU5FX01VVEVYKGNmZzgwMjExX211dGV4KTsKIApAQCAtNDMsMTggKzQ0LDE4IEBACiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaWVlZTgwMjExX2RlYnVnZnNfZGlyOwogCiAvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkISAqLwotc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KGludCB3aXBoeV9pZHgpCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX3JkZXZfYnlfd2lwaHlfaWR4KGludCB3aXBoeV9pZHgpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZXN1bHQgPSBOVUxMLCAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKnJkZXY7CiAKIAlpZiAoIXdpcGh5X2lkeF92YWxpZCh3aXBoeV9pZHgpKQogCQlyZXR1cm4gTlVMTDsKIAogCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7Ci0JCWlmIChkcnYtPndpcGh5X2lkeCA9PSB3aXBoeV9pZHgpIHsKLQkJCXJlc3VsdCA9IGRydjsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJkZXYtPndpcGh5X2lkeCA9PSB3aXBoeV9pZHgpIHsKKwkJCXJlc3VsdCA9IHJkZXY7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTY0LDMyICs2NSwzMiBAQAogCiBpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpZiAoIXdpcGh5KQogCQlyZXR1cm4gV0lQSFlfSURYX1NUQUxFOwotCWRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7Ci0JcmV0dXJuIGRydi0+d2lwaHlfaWR4OworCXJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXJldHVybiByZGV2LT53aXBoeV9pZHg7CiB9CiAKLS8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLworLyogcmVxdWlyZXMgY2ZnODAyMTFfcmRldl9tdXRleCB0byBiZSBoZWxkISAqLwogc3RydWN0IHdpcGh5ICp3aXBoeV9pZHhfdG9fd2lwaHkoaW50IHdpcGh5X2lkeCkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAKIAlpZiAoIXdpcGh5X2lkeF92YWxpZCh3aXBoeV9pZHgpKQogCQlyZXR1cm4gTlVMTDsKIAogCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKLQlkcnYgPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCk7Ci0JaWYgKCFkcnYpCisJcmRldiA9IGNmZzgwMjExX3JkZXZfYnlfd2lwaHlfaWR4KHdpcGh5X2lkeCk7CisJaWYgKCFyZGV2KQogCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gJmRydi0+d2lwaHk7CisJcmV0dXJuICZyZGV2LT53aXBoeTsKIH0KIAogLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCi1fX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK19fY2ZnODAyMTFfcmRldl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAlpbnQgaWZpbmRleDsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmJ5d2lwaHlpZHggPSBOVUxMLCAqYnlpZmlkeCA9IE5VTEw7CkBAIC05OSwxNCArMTAwLDE0IEBACiAJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFldKSB7Ci0JCWJ5d2lwaHlpZHggPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KAorCQlieXdpcGh5aWR4ID0gY2ZnODAyMTFfcmRldl9ieV93aXBoeV9pZHgoCiAJCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZXSkpOwogCQllcnIgPSAtRU5PREVWOwogCX0KIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZJTkRFWF0pIHsKIAkJaWZpbmRleCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRklOREVYXSk7Ci0JCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmluZGV4KTsKKwkJZGV2ID0gZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KGluZm8pLCBpZmluZGV4KTsKIAkJaWYgKGRldikgewogCQkJaWYgKGRldi0+aWVlZTgwMjExX3B0cikKIAkJCQlieWlmaWR4ID0KQEAgLTEzNCw1NCArMTM1LDQ4IEBACiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7Ci0JZHJ2ID0gX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKGluZm8pOworCXJkZXYgPSBfX2NmZzgwMjExX3JkZXZfZnJvbV9pbmZvKGluZm8pOwogCiAJLyogaWYgaXQgaXMgbm90IGFuIGVycm9yIHdlIGdyYWIgdGhlIGxvY2sgb24KIAkgKiBpdCB0byBhc3N1cmUgaXQgd29uJ3QgYmUgZ29pbmcgYXdheSB3aGlsZQogCSAqIHdlIG9wZXJhdGUgb24gaXQgKi8KLQlpZiAoIUlTX0VSUihkcnYpKQotCQltdXRleF9sb2NrKCZkcnYtPm10eCk7CisJaWYgKCFJU19FUlIocmRldikpCisJCW11dGV4X2xvY2soJnJkZXYtPm10eCk7CiAKIAltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAotCXJldHVybiBkcnY7CisJcmV0dXJuIHJkZXY7CiB9CiAKIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCi1jZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpbnQgaWZpbmRleCkKK2NmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IEVSUl9QVFIoLUVOT0RFVik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKLQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CisJZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpOwogCWlmICghZGV2KQogCQlnb3RvIG91dDsKIAlpZiAoZGV2LT5pZWVlODAyMTFfcHRyKSB7Ci0JCWRydiA9IHdpcGh5X3RvX2RldihkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5KTsKLQkJbXV0ZXhfbG9jaygmZHJ2LT5tdHgpOworCQlyZGV2ID0gd2lwaHlfdG9fZGV2KGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHkpOworCQltdXRleF9sb2NrKCZyZGV2LT5tdHgpOwogCX0gZWxzZQotCQlkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOworCQlyZGV2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlkZXZfcHV0KGRldik7CiAgb3V0OgogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwotCXJldHVybiBkcnY7Ci19Ci0KLXZvaWQgY2ZnODAyMTFfcHV0X2RldihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydikKLXsKLQlCVUdfT04oSVNfRVJSKGRydikpOwotCW11dGV4X3VubG9jaygmZHJ2LT5tdHgpOworCXJldHVybiByZGV2OwogfQogCiAvKiByZXF1aXJlcyBjZmc4MDIxMV9tdXRleCB0byBiZSBoZWxkICovCiBpbnQgY2ZnODAyMTFfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQljaGFyICpuZXduYW1lKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjI7CiAJaW50IHdpcGh5X2lkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CiAKIAlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOwpAQCAtMjA3LDggKzIwMiw4IEBACiAJCXJldHVybiAwOwogCiAJLyogRW5zdXJlIGFub3RoZXIgZGV2aWNlIGRvZXMgbm90IGFscmVhZHkgaGF2ZSB0aGlzIG5hbWUuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkKLQkJaWYgKHN0cmNtcChuZXduYW1lLCBkZXZfbmFtZSgmZHJ2LT53aXBoeS5kZXYpKSA9PSAwKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldjIsICZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpCisJCWlmIChzdHJjbXAobmV3bmFtZSwgZGV2X25hbWUoJnJkZXYyLT53aXBoeS5kZXYpKSA9PSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXN1bHQgPSBkZXZpY2VfcmVuYW1lKCZyZGV2LT53aXBoeS5kZXYsIG5ld25hbWUpOwpAQCAtMjI4LDI4ICsyMjMsNjQgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGNmZzgwMjExX3N3aXRjaF9uZXRucyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgIHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OworCWludCBlcnIgPSAwOworCisJaWYgKCFyZGV2LT53aXBoeS5uZXRuc29rKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZyZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkgeworCQl3ZGV2LT5uZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX05FVE5TX0xPQ0FMOworCQllcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi0+bmV0ZGV2LCBuZXQsICJ3bGFuJWQiKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCQl3ZGV2LT5uZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CisJfQorCisJaWYgKGVycikgeworCQkvKiBmYWlsZWQgLS0gY2xlYW4gdXAgdG8gb2xkIG5ldG5zICovCisJCW5ldCA9IHdpcGh5X25ldCgmcmRldi0+d2lwaHkpOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsCisJCQkJCQkgICAgIGxpc3QpIHsKKwkJCXdkZXYtPm5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTkVUTlNfTE9DQUw7CisJCQllcnIgPSBkZXZfY2hhbmdlX25ldF9uYW1lc3BhY2Uod2Rldi0+bmV0ZGV2LCBuZXQsCisJCQkJCQkJIndsYW4lZCIpOworCQkJV0FSTl9PTihlcnIpOworCQkJd2Rldi0+bmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX05FVE5TX0xPQ0FMOworCQl9CisJfQorCisJd2lwaHlfbmV0X3NldCgmcmRldi0+d2lwaHksIG5ldCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgdm9pZCBjZmc4MDIxMV9yZmtpbGxfcG9sbChzdHJ1Y3QgcmZraWxsICpyZmtpbGwsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSBkYXRhOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGRhdGE7CiAKLQlkcnYtPm9wcy0+cmZraWxsX3BvbGwoJmRydi0+d2lwaHkpOworCXJkZXYtPm9wcy0+cmZraWxsX3BvbGwoJnJkZXYtPndpcGh5KTsKIH0KIAogc3RhdGljIGludCBjZmc4MDIxMV9yZmtpbGxfc2V0X2Jsb2NrKHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IGRhdGE7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gZGF0YTsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwogCiAJaWYgKCFibG9ja2VkKQogCQlyZXR1cm4gMDsKIAogCXJ0bmxfbG9jaygpOwotCW11dGV4X2xvY2soJmRydi0+ZGV2bGlzdF9tdHgpOworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJmRydi0+bmV0ZGV2X2xpc3QsIGxpc3QpCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpCiAJCWRldl9jbG9zZSh3ZGV2LT5uZXRkZXYpOwogCi0JbXV0ZXhfdW5sb2NrKCZkcnYtPmRldmxpc3RfbXR4KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKIAlydG5sX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CkBAIC0yNTcsMTAgKzI4OCwyNSBAQAogCiBzdGF0aWMgdm9pZCBjZmc4MDIxMV9yZmtpbGxfc3luY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAKLQlkcnYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLCByZmtpbGxfc3luYyk7Ci0JY2ZnODAyMTFfcmZraWxsX3NldF9ibG9jayhkcnYsIHJma2lsbF9ibG9ja2VkKGRydi0+cmZraWxsKSk7CisJcmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsIHJma2lsbF9zeW5jKTsKKwljZmc4MDIxMV9yZmtpbGxfc2V0X2Jsb2NrKHJkZXYsIHJma2lsbF9ibG9ja2VkKHJkZXYtPnJma2lsbCkpOworfQorCitzdGF0aWMgdm9pZCBjZmc4MDIxMV9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisKKwlyZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwKKwkJCSAgICBldmVudF93b3JrKTsKKworCXJ0bmxfbG9jaygpOworCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKworCWNmZzgwMjExX3Byb2Nlc3NfcmRldl9ldmVudHMocmRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJcnRubF91bmxvY2soKTsKIH0KIAogLyogZXhwb3J0ZWQgZnVuY3Rpb25zICovCkBAIC0yNjksNzYgKzMxNSw5MCBAQAogewogCXN0YXRpYyBpbnQgd2lwaHlfY291bnRlcjsKIAotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpbnQgYWxsb2Nfc2l6ZTsKIAotCVdBUk5fT04oIW9wcy0+YWRkX2tleSAmJiBvcHMtPmRlbF9rZXkpOwotCVdBUk5fT04ob3BzLT5hZGRfa2V5ICYmICFvcHMtPmRlbF9rZXkpOworCVdBUk5fT04ob3BzLT5hZGRfa2V5ICYmICghb3BzLT5kZWxfa2V5IHx8ICFvcHMtPnNldF9kZWZhdWx0X2tleSkpOworCVdBUk5fT04ob3BzLT5hdXRoICYmICghb3BzLT5hc3NvYyB8fCAhb3BzLT5kZWF1dGggfHwgIW9wcy0+ZGlzYXNzb2MpKTsKKwlXQVJOX09OKG9wcy0+Y29ubmVjdCAmJiAhb3BzLT5kaXNjb25uZWN0KTsKKwlXQVJOX09OKG9wcy0+am9pbl9pYnNzICYmICFvcHMtPmxlYXZlX2lic3MpOworCVdBUk5fT04ob3BzLT5hZGRfdmlydHVhbF9pbnRmICYmICFvcHMtPmRlbF92aXJ0dWFsX2ludGYpOworCVdBUk5fT04ob3BzLT5hZGRfc3RhdGlvbiAmJiAhb3BzLT5kZWxfc3RhdGlvbik7CisJV0FSTl9PTihvcHMtPmFkZF9tcGF0aCAmJiAhb3BzLT5kZWxfbXBhdGgpOwogCi0JYWxsb2Nfc2l6ZSA9IHNpemVvZigqZHJ2KSArIHNpemVvZl9wcml2OworCWFsbG9jX3NpemUgPSBzaXplb2YoKnJkZXYpICsgc2l6ZW9mX3ByaXY7CiAKLQlkcnYgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghZHJ2KQorCXJkZXYgPSBremFsbG9jKGFsbG9jX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcmRldikKIAkJcmV0dXJuIE5VTEw7CiAKLQlkcnYtPm9wcyA9IG9wczsKKwlyZGV2LT5vcHMgPSBvcHM7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKLQlkcnYtPndpcGh5X2lkeCA9IHdpcGh5X2NvdW50ZXIrKzsKKwlyZGV2LT53aXBoeV9pZHggPSB3aXBoeV9jb3VudGVyKys7CiAKLQlpZiAodW5saWtlbHkoIXdpcGh5X2lkeF92YWxpZChkcnYtPndpcGh5X2lkeCkpKSB7CisJaWYgKHVubGlrZWx5KCF3aXBoeV9pZHhfdmFsaWQocmRldi0+d2lwaHlfaWR4KSkpIHsKIAkJd2lwaHlfY291bnRlci0tOwogCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJLyogdWdoLCB3cmFwcGVkISAqLwotCQlrZnJlZShkcnYpOworCQlrZnJlZShyZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAkvKiBnaXZlIGl0IGEgcHJvcGVyIG5hbWUgKi8KLQlkZXZfc2V0X25hbWUoJmRydi0+d2lwaHkuZGV2LCBQSFlfTkFNRSAiJWQiLCBkcnYtPndpcGh5X2lkeCk7CisJZGV2X3NldF9uYW1lKCZyZGV2LT53aXBoeS5kZXYsIFBIWV9OQU1FICIlZCIsIHJkZXYtPndpcGh5X2lkeCk7CiAKLQltdXRleF9pbml0KCZkcnYtPm10eCk7Ci0JbXV0ZXhfaW5pdCgmZHJ2LT5kZXZsaXN0X210eCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRydi0+bmV0ZGV2X2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZkcnYtPmJzc19sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmZHJ2LT5ic3NfbGlzdCk7CisJbXV0ZXhfaW5pdCgmcmRldi0+bXR4KTsKKwltdXRleF9pbml0KCZyZGV2LT5kZXZsaXN0X210eCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPm5ldGRldl9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmcmRldi0+YnNzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5ic3NfbGlzdCk7CisJSU5JVF9XT1JLKCZyZGV2LT5zY2FuX2RvbmVfd2ssIF9fY2ZnODAyMTFfc2Nhbl9kb25lKTsKIAotCWRldmljZV9pbml0aWFsaXplKCZkcnYtPndpcGh5LmRldik7Ci0JZHJ2LT53aXBoeS5kZXYuY2xhc3MgPSAmaWVlZTgwMjExX2NsYXNzOwotCWRydi0+d2lwaHkuZGV2LnBsYXRmb3JtX2RhdGEgPSBkcnY7CisJZGV2aWNlX2luaXRpYWxpemUoJnJkZXYtPndpcGh5LmRldik7CisJcmRldi0+d2lwaHkuZGV2LmNsYXNzID0gJmllZWU4MDIxMV9jbGFzczsKKwlyZGV2LT53aXBoeS5kZXYucGxhdGZvcm1fZGF0YSA9IHJkZXY7CiAKLQlkcnYtPnJma2lsbF9vcHMuc2V0X2Jsb2NrID0gY2ZnODAyMTFfcmZraWxsX3NldF9ibG9jazsKLQlkcnYtPnJma2lsbCA9IHJma2lsbF9hbGxvYyhkZXZfbmFtZSgmZHJ2LT53aXBoeS5kZXYpLAotCQkJCSAgICZkcnYtPndpcGh5LmRldiwgUkZLSUxMX1RZUEVfV0xBTiwKLQkJCQkgICAmZHJ2LT5yZmtpbGxfb3BzLCBkcnYpOworCXJkZXYtPndpcGh5LnBzX2RlZmF1bHQgPSBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRTsKIAotCWlmICghZHJ2LT5yZmtpbGwpIHsKLQkJa2ZyZWUoZHJ2KTsKKwl3aXBoeV9uZXRfc2V0KCZyZGV2LT53aXBoeSwgJmluaXRfbmV0KTsKKworCXJkZXYtPnJma2lsbF9vcHMuc2V0X2Jsb2NrID0gY2ZnODAyMTFfcmZraWxsX3NldF9ibG9jazsKKwlyZGV2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2MoZGV2X25hbWUoJnJkZXYtPndpcGh5LmRldiksCisJCQkJICAgJnJkZXYtPndpcGh5LmRldiwgUkZLSUxMX1RZUEVfV0xBTiwKKwkJCQkgICAmcmRldi0+cmZraWxsX29wcywgcmRldik7CisKKwlpZiAoIXJkZXYtPnJma2lsbCkgeworCQlrZnJlZShyZGV2KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JSU5JVF9XT1JLKCZkcnYtPnJma2lsbF9zeW5jLCBjZmc4MDIxMV9yZmtpbGxfc3luY193b3JrKTsKKwlJTklUX1dPUksoJnJkZXYtPnJma2lsbF9zeW5jLCBjZmc4MDIxMV9yZmtpbGxfc3luY193b3JrKTsKKwlJTklUX1dPUksoJnJkZXYtPmNvbm5fd29yaywgY2ZnODAyMTFfY29ubl93b3JrKTsKKwlJTklUX1dPUksoJnJkZXYtPmV2ZW50X3dvcmssIGNmZzgwMjExX2V2ZW50X3dvcmspOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcmRldi0+ZGV2X3dhaXQpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHdpcGh5IHBhcmFtZXRlcnMgdG8gSUVFRSA4MDIuMTEgTUlCIGRlZmF1bHQgdmFsdWVzLgogCSAqIEZyYWdtZW50YXRpb24gYW5kIFJUUyB0aHJlc2hvbGQgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgd2l0aCB0aGUKIAkgKiBzcGVjaWFsIC0xIHZhbHVlLgogCSAqLwotCWRydi0+d2lwaHkucmV0cnlfc2hvcnQgPSA3OwotCWRydi0+d2lwaHkucmV0cnlfbG9uZyA9IDQ7Ci0JZHJ2LT53aXBoeS5mcmFnX3RocmVzaG9sZCA9ICh1MzIpIC0xOwotCWRydi0+d2lwaHkucnRzX3RocmVzaG9sZCA9ICh1MzIpIC0xOworCXJkZXYtPndpcGh5LnJldHJ5X3Nob3J0ID0gNzsKKwlyZGV2LT53aXBoeS5yZXRyeV9sb25nID0gNDsKKwlyZGV2LT53aXBoeS5mcmFnX3RocmVzaG9sZCA9ICh1MzIpIC0xOworCXJkZXYtPndpcGh5LnJ0c190aHJlc2hvbGQgPSAodTMyKSAtMTsKIAotCXJldHVybiAmZHJ2LT53aXBoeTsKKwlyZXR1cm4gJnJkZXYtPndpcGh5OwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV9uZXcpOwogCiBpbnQgd2lwaHlfcmVnaXN0ZXIoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAlpbnQgcmVzOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKQEAgLTM0Niw5ICs0MDYsNiBAQAogCWludCBpOwogCXUxNiBpZm1vZGVzID0gd2lwaHktPmludGVyZmFjZV9tb2RlczsKIAotCWlmIChXQVJOX09OKHdpcGh5LT5tYXhfc2Nhbl9zc2lkcyA8IDEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIHNhbml0eSBjaGVjayBpZm1vZGVzICovCiAJV0FSTl9PTighaWZtb2Rlcyk7CiAJaWZtb2RlcyAmPSAoKDEgPDwgX19OTDgwMjExX0lGVFlQRV9BRlRFUl9MQVNUKSAtIDEpICYgfjE7CkBAIC0zOTUsMTEgKzQ1MiwxMSBAQAogCS8qIGNoZWNrIGFuZCBzZXQgdXAgYml0cmF0ZXMgKi8KIAlpZWVlODAyMTFfc2V0X2JpdHJhdGVfZmxhZ3Mod2lwaHkpOwogCi0JcmVzID0gZGV2aWNlX2FkZCgmZHJ2LT53aXBoeS5kZXYpOworCXJlcyA9IGRldmljZV9hZGQoJnJkZXYtPndpcGh5LmRldik7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCXJlcyA9IHJma2lsbF9yZWdpc3RlcihkcnYtPnJma2lsbCk7CisJcmVzID0gcmZraWxsX3JlZ2lzdGVyKHJkZXYtPnJma2lsbCk7CiAJaWYgKHJlcykKIAkJZ290byBvdXRfcm1fZGV2OwogCkBAIC00MDgsMTYgKzQ2NSwxNyBAQAogCS8qIHNldCB1cCByZWd1bGF0b3J5IGluZm8gKi8KIAl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkUpOwogCi0JbGlzdF9hZGQoJmRydi0+bGlzdCwgJmNmZzgwMjExX2Rydl9saXN0KTsKKwlsaXN0X2FkZCgmcmRldi0+bGlzdCwgJmNmZzgwMjExX3JkZXZfbGlzdCk7CisJY2ZnODAyMTFfcmRldl9saXN0X2dlbmVyYXRpb24rKzsKIAogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogYWRkIHRvIGRlYnVnZnMgKi8KLQlkcnYtPndpcGh5LmRlYnVnZnNkaXIgPQotCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZSgmZHJ2LT53aXBoeSksCisJcmRldi0+d2lwaHkuZGVidWdmc2RpciA9CisJCWRlYnVnZnNfY3JlYXRlX2Rpcih3aXBoeV9uYW1lKCZyZGV2LT53aXBoeSksCiAJCQkJICAgaWVlZTgwMjExX2RlYnVnZnNfZGlyKTsKLQlpZiAoSVNfRVJSKGRydi0+d2lwaHkuZGVidWdmc2RpcikpCi0JCWRydi0+d2lwaHkuZGVidWdmc2RpciA9IE5VTEw7CisJaWYgKElTX0VSUihyZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyKSkKKwkJcmRldi0+d2lwaHkuZGVidWdmc2RpciA9IE5VTEw7CiAKIAlpZiAod2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5KSB7CiAJCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgcmVxdWVzdDsKQEAgLTQzMCw4MyArNDg4LDEwMSBAQAogCQlubDgwMjExX3NlbmRfcmVnX2NoYW5nZV9ldmVudCgmcmVxdWVzdCk7CiAJfQogCi0JY2ZnODAyMTFfZGVidWdmc19kcnZfYWRkKGRydik7CisJY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChyZGV2KTsKIAogCXJldHVybiAwOwogCiAgb3V0X3JtX2RldjoKLQlkZXZpY2VfZGVsKCZkcnYtPndpcGh5LmRldik7CisJZGV2aWNlX2RlbCgmcmRldi0+d2lwaHkuZGV2KTsKIAlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV9yZWdpc3Rlcik7CiAKIHZvaWQgd2lwaHlfcmZraWxsX3N0YXJ0X3BvbGxpbmcoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAotCWlmICghZHJ2LT5vcHMtPnJma2lsbF9wb2xsKQorCWlmICghcmRldi0+b3BzLT5yZmtpbGxfcG9sbCkKIAkJcmV0dXJuOwotCWRydi0+cmZraWxsX29wcy5wb2xsID0gY2ZnODAyMTFfcmZraWxsX3BvbGw7Ci0JcmZraWxsX3Jlc3VtZV9wb2xsaW5nKGRydi0+cmZraWxsKTsKKwlyZGV2LT5yZmtpbGxfb3BzLnBvbGwgPSBjZmc4MDIxMV9yZmtpbGxfcG9sbDsKKwlyZmtpbGxfcmVzdW1lX3BvbGxpbmcocmRldi0+cmZraWxsKTsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfcmZraWxsX3N0YXJ0X3BvbGxpbmcpOwogCiB2b2lkIHdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKIAotCXJma2lsbF9wYXVzZV9wb2xsaW5nKGRydi0+cmZraWxsKTsKKwlyZmtpbGxfcGF1c2VfcG9sbGluZyhyZGV2LT5yZmtpbGwpOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV9yZmtpbGxfc3RvcF9wb2xsaW5nKTsKIAogdm9pZCB3aXBoeV91bnJlZ2lzdGVyKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CiAKLQlyZmtpbGxfdW5yZWdpc3RlcihkcnYtPnJma2lsbCk7CisJcmZraWxsX3VucmVnaXN0ZXIocmRldi0+cmZraWxsKTsKIAogCS8qIHByb3RlY3QgdGhlIGRldmljZSBsaXN0ICovCiAJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCi0JQlVHX09OKCFsaXN0X2VtcHR5KCZkcnYtPm5ldGRldl9saXN0KSk7CisJd2FpdF9ldmVudChyZGV2LT5kZXZfd2FpdCwgKHsKKwkJaW50IF9fY291bnQ7CisJCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwkJX19jb3VudCA9IHJkZXYtPm9wZW5jb3VudDsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCV9fY291bnQgPT0gMDt9KSk7CisKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZyZGV2LT5uZXRkZXZfbGlzdCkpOworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCiAJLyoKLQkgKiBUcnkgdG8gZ3JhYiBkcnYtPm10eC4gSWYgYSBjb21tYW5kIGlzIHN0aWxsIGluIHByb2dyZXNzLAorCSAqIEZpcnN0IHJlbW92ZSB0aGUgaGFyZHdhcmUgZnJvbSBldmVyeXdoZXJlLCB0aGlzIG1ha2VzCisJICogaXQgaW1wb3NzaWJsZSB0byBmaW5kIGZyb20gdXNlcnNwYWNlLgorCSAqLworCWNmZzgwMjExX2RlYnVnZnNfcmRldl9kZWwocmRldik7CisJbGlzdF9kZWwoJnJkZXYtPmxpc3QpOworCisJLyoKKwkgKiBUcnkgdG8gZ3JhYiByZGV2LT5tdHguIElmIGEgY29tbWFuZCBpcyBzdGlsbCBpbiBwcm9ncmVzcywKIAkgKiBob3BlZnVsbHkgdGhlIGRyaXZlciB3aWxsIHJlZnVzZSBpdCBzaW5jZSBpdCdzIHRlYXJpbmcKIAkgKiBkb3duIHRoZSBkZXZpY2UgYWxyZWFkeS4gV2Ugd2FpdCBmb3IgdGhpcyBjb21tYW5kIHRvIGNvbXBsZXRlCiAJICogYmVmb3JlIHVubGlua2luZyB0aGUgaXRlbSBmcm9tIHRoZSBsaXN0LgogCSAqIE5vdGU6IGFzIGNvZGlmaWVkIGJ5IHRoZSBCVUdfT04gYWJvdmUgd2UgY2Fubm90IGdldCBoZXJlIGlmCi0JICogYSB2aXJ0dWFsIGludGVyZmFjZSBpcyBzdGlsbCBhc3NvY2lhdGVkLiBIZW5jZSwgd2UgY2FuIG9ubHkKLQkgKiBnZXQgdG8gbG9jayBjb250ZW50aW9uIGhlcmUgaWYgdXNlcnNwYWNlIGlzc3VlcyBhIGNvbW1hbmQKLQkgKiB0aGF0IGlkZW50aWZpZWQgdGhlIGhhcmR3YXJlIGJ5IHdpcGh5IGluZGV4LgorCSAqIGEgdmlydHVhbCBpbnRlcmZhY2UgaXMgc3RpbGwgcHJlc2VudC4gSGVuY2UsIHdlIGNhbiBvbmx5IGdldAorCSAqIHRvIGxvY2sgY29udGVudGlvbiBoZXJlIGlmIHVzZXJzcGFjZSBpc3N1ZXMgYSBjb21tYW5kIHRoYXQKKwkgKiBpZGVudGlmaWVkIHRoZSBoYXJkd2FyZSBieSB3aXBoeSBpbmRleC4KIAkgKi8KLQltdXRleF9sb2NrKCZkcnYtPm10eCk7Ci0JLyogdW5sb2NrIGFnYWluIGJlZm9yZSBmcmVlaW5nICovCi0JbXV0ZXhfdW5sb2NrKCZkcnYtPm10eCk7Ci0KLQljZmc4MDIxMV9kZWJ1Z2ZzX2Rydl9kZWwoZHJ2KTsKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisJLyogbm90aGluZyAqLworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCiAJLyogSWYgdGhpcyBkZXZpY2UgZ290IGEgcmVndWxhdG9yeSBoaW50IHRlbGwgY29yZSBpdHMKIAkgKiBmcmVlIHRvIGxpc3RlbiBub3cgdG8gYSBuZXcgc2hpbnkgZGV2aWNlIHJlZ3VsYXRvcnkgaGludCAqLwogCXJlZ19kZXZpY2VfcmVtb3ZlKHdpcGh5KTsKIAotCWxpc3RfZGVsKCZkcnYtPmxpc3QpOwotCWRldmljZV9kZWwoJmRydi0+d2lwaHkuZGV2KTsKLQlkZWJ1Z2ZzX3JlbW92ZShkcnYtPndpcGh5LmRlYnVnZnNkaXIpOworCWNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uKys7CisJZGV2aWNlX2RlbCgmcmRldi0+d2lwaHkuZGV2KTsKKwlkZWJ1Z2ZzX3JlbW92ZShyZGV2LT53aXBoeS5kZWJ1Z2ZzZGlyKTsKIAogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJZmx1c2hfd29yaygmcmRldi0+c2Nhbl9kb25lX3drKTsKKwljYW5jZWxfd29ya19zeW5jKCZyZGV2LT5jb25uX3dvcmspOworCWZsdXNoX3dvcmsoJnJkZXYtPmV2ZW50X3dvcmspOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV91bnJlZ2lzdGVyKTsKIAotdm9pZCBjZmc4MDIxMV9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydikKK3ZvaWQgY2ZnODAyMTFfZGV2X2ZyZWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnNjYW4sICp0bXA7Ci0JcmZraWxsX2Rlc3Ryb3koZHJ2LT5yZmtpbGwpOwotCW11dGV4X2Rlc3Ryb3koJmRydi0+bXR4KTsKLQltdXRleF9kZXN0cm95KCZkcnYtPmRldmxpc3RfbXR4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NhbiwgdG1wLCAmZHJ2LT5ic3NfbGlzdCwgbGlzdCkKKwlyZmtpbGxfZGVzdHJveShyZGV2LT5yZmtpbGwpOworCW11dGV4X2Rlc3Ryb3koJnJkZXYtPm10eCk7CisJbXV0ZXhfZGVzdHJveSgmcmRldi0+ZGV2bGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzY2FuLCB0bXAsICZyZGV2LT5ic3NfbGlzdCwgbGlzdCkKIAkJY2ZnODAyMTFfcHV0X2Jzcygmc2Nhbi0+cHViKTsKLQlrZnJlZShkcnYpOworCWtmcmVlKHJkZXYpOwogfQogCiB2b2lkIHdpcGh5X2ZyZWUoc3RydWN0IHdpcGh5ICp3aXBoeSkKQEAgLTUxNyw2OCArNTkzLDE4MSBAQAogCiB2b2lkIHdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgYm9vbCBibG9ja2VkKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwogCi0JaWYgKHJma2lsbF9zZXRfaHdfc3RhdGUoZHJ2LT5yZmtpbGwsIGJsb2NrZWQpKQotCQlzY2hlZHVsZV93b3JrKCZkcnYtPnJma2lsbF9zeW5jKTsKKwlpZiAocmZraWxsX3NldF9od19zdGF0ZShyZGV2LT5yZmtpbGwsIGJsb2NrZWQpKQorCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5yZmtpbGxfc3luYyk7CiB9CiBFWFBPUlRfU1lNQk9MKHdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUpOwogCitzdGF0aWMgdm9pZCB3ZGV2X2NsZWFudXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisKKwl3ZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3aXJlbGVzc19kZXYsIGNsZWFudXBfd29yayk7CisJcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisKKwlpZiAoV0FSTl9PTihyZGV2LT5zY2FuX3JlcSAmJiByZGV2LT5zY2FuX3JlcS0+ZGV2ID09IHdkZXYtPm5ldGRldikpIHsKKwkJcmRldi0+c2Nhbl9yZXEtPmFib3J0ZWQgPSB0cnVlOworCQlfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgdHJ1ZSk7CisJfQorCisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJcmRldi0+b3BlbmNvdW50LS07CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJd2FrZV91cCgmcmRldi0+ZGV2X3dhaXQpOworCisJZGV2X3B1dCh3ZGV2LT5uZXRkZXYpOworfQorCiBzdGF0aWMgaW50IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iLAogCQkJCQkgdW5zaWduZWQgbG9uZyBzdGF0ZSwKIAkJCQkJIHZvaWQgKm5kZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5kZXY7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAKLQlpZiAoIWRldi0+aWVlZTgwMjExX3B0cikKKwlpZiAoIXdkZXYpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAotCXJkZXYgPSB3aXBoeV90b19kZXYoZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeSk7CisJcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CiAKLQlXQVJOX09OKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKTsKKwlXQVJOX09OKHdkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBORVRERVZfUkVHSVNURVI6CisJCS8qCisJCSAqIE5COiBjYW5ub3QgdGFrZSByZGV2LT5tdHggaGVyZSBiZWNhdXNlIHRoaXMgbWF5IGJlCisJCSAqIGNhbGxlZCB3aXRoaW4gY29kZSBwcm90ZWN0ZWQgYnkgaXQgd2hlbiBpbnRlcmZhY2VzCisJCSAqIGFyZSBhZGRlZCB3aXRoIG5sODAyMTEuCisJCSAqLworCQltdXRleF9pbml0KCZ3ZGV2LT5tdHgpOworCQlJTklUX1dPUksoJndkZXYtPmNsZWFudXBfd29yaywgd2Rldl9jbGVhbnVwX3dvcmspOworCQlJTklUX0xJU1RfSEVBRCgmd2Rldi0+ZXZlbnRfbGlzdCk7CisJCXNwaW5fbG9ja19pbml0KCZ3ZGV2LT5ldmVudF9sb2NrKTsKIAkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwotCQlsaXN0X2FkZCgmZGV2LT5pZWVlODAyMTFfcHRyLT5saXN0LCAmcmRldi0+bmV0ZGV2X2xpc3QpOworCQlsaXN0X2FkZCgmd2Rldi0+bGlzdCwgJnJkZXYtPm5ldGRldl9saXN0KTsKKwkJcmRldi0+ZGV2bGlzdF9nZW5lcmF0aW9uKys7CisJCS8qIGNhbiBvbmx5IGNoYW5nZSBuZXRucyB3aXRoIHdpcGh5ICovCisJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKKwogCQlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+ZGV2LmtvYmosICZyZGV2LT53aXBoeS5kZXYua29iaiwKIAkJCQkgICAgICAicGh5ODAyMTEiKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJ3aXJlbGVzczogZmFpbGVkIHRvIGFkZCBwaHk4MDIxMSAiCiAJCQkJInN5bWxpbmsgdG8gbmV0ZGV2IVxuIik7CiAJCX0KLQkJZGV2LT5pZWVlODAyMTFfcHRyLT5uZXRkZXYgPSBkZXY7Ci0jaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAotCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9rZXkgPSAtMTsKLQkJZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSAtMTsKLSNlbmRpZgorCQl3ZGV2LT5uZXRkZXYgPSBkZXY7CisJCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9JRExFOwogCQltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJCWlmICghZGV2LT53aXJlbGVzc19oYW5kbGVycykKKwkJCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmY2ZnODAyMTFfd2V4dF9oYW5kbGVyOworCQl3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5ID0gLTE7CisJCXdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleSA9IC0xOworCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUM7CisJCXdkZXYtPndleHQucHMgPSB3ZGV2LT53aXBoeS0+cHNfZGVmYXVsdDsKKwkJd2Rldi0+d2V4dC5wc190aW1lb3V0ID0gMTAwOworCQlpZiAocmRldi0+b3BzLT5zZXRfcG93ZXJfbWdtdCkKKwkJCWlmIChyZGV2LT5vcHMtPnNldF9wb3dlcl9tZ210KHdkZXYtPndpcGh5LCBkZXYsCisJCQkJCQkgICAgICB3ZGV2LT53ZXh0LnBzLAorCQkJCQkJICAgICAgd2Rldi0+d2V4dC5wc190aW1lb3V0KSkgeworCQkJCS8qIGFzc3VtZSB0aGlzIG1lYW5zIGl0J3Mgb2ZmICovCisJCQkJd2Rldi0+d2V4dC5wcyA9IGZhbHNlOworCQkJfQorI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0dPSU5HX0RPV046Ci0JCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJc3dpdGNoICh3ZGV2LT5pZnR5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCWNmZzgwMjExX2xlYXZlX2lic3MocmRldiwgZGV2LCB0cnVlKTsKIAkJCWJyZWFrOwotCQlpZiAoIWRldi0+aWVlZTgwMjExX3B0ci0+c3NpZF9sZW4pCisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCXdkZXZfbG9jayh3ZGV2KTsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJCQlrZnJlZSh3ZGV2LT53ZXh0LmllKTsKKwkJCXdkZXYtPndleHQuaWUgPSBOVUxMOworCQkJd2Rldi0+d2V4dC5pZV9sZW4gPSAwOworCQkJd2Rldi0+d2V4dC5jb25uZWN0LmF1dGhfdHlwZSA9IE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDOworI2VuZGlmCisJCQlfX2NmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LAorCQkJCQkgICAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORywgdHJ1ZSk7CisJCQljZmc4MDIxMV9tbG1lX2Rvd24ocmRldiwgZGV2KTsKKwkJCXdkZXZfdW5sb2NrKHdkZXYpOwogCQkJYnJlYWs7Ci0JCWNmZzgwMjExX2xlYXZlX2lic3MocmRldiwgZGV2LCB0cnVlKTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgTkVUREVWX0RPV046CisJCWRldl9ob2xkKGRldik7CisJCXNjaGVkdWxlX3dvcmsoJndkZXYtPmNsZWFudXBfd29yayk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1VQOgorCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGEgcmVhbGx5IHF1aWNrIERPV04vVVAgc3VjY2Vzc2lvbiB3ZSBtYXkKKwkJICogaGF2ZSB0aGlzIHdvcmsgc3RpbGwgcGVuZGluZyAuLi4gY2FuY2VsIGl0IGFuZCBzZWUKKwkJICogaWYgaXQgd2FzIHBlbmRpbmcsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBhY2NvdW50CisJCSAqIGZvciBzb21lIG9mIHRoZSB3b3JrIGl0IHdvdWxkIGhhdmUgZG9uZS4KKwkJICovCisJCWlmIChjYW5jZWxfd29ya19zeW5jKCZ3ZGV2LT5jbGVhbnVwX3dvcmspKSB7CisJCQltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCQlyZGV2LT5vcGVuY291bnQtLTsKKwkJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQkJZGV2X3B1dChkZXYpOworCQl9CiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAotCQlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlicmVhazsKLQkJaWYgKCFkZXYtPmllZWU4MDIxMV9wdHItPndleHQuaWJzcy5zc2lkX2xlbikKLQkJCWJyZWFrOwotCQljZmc4MDIxMV9qb2luX2lic3MocmRldiwgZGV2LCAmZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0Lmlic3MpOwotCQlicmVhazsKLSNlbmRpZgotCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CisJCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKIAkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwotCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+aWVlZTgwMjExX3B0ci0+bGlzdCkpIHsKKwkJd2Rldl9sb2NrKHdkZXYpOworCQlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkJY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4ocmRldiwgd2Rldik7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQkJY2ZnODAyMTFfbWdkX3dleHRfY29ubmVjdChyZGV2LCB3ZGV2KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJd2Rldl91bmxvY2sod2Rldik7CisJCXJkZXYtPm9wZW5jb3VudCsrOworCQltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwkJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKKwkJLyoKKwkJICogTkI6IGNhbm5vdCB0YWtlIHJkZXYtPm10eCBoZXJlIGJlY2F1c2UgdGhpcyBtYXkgYmUKKwkJICogY2FsbGVkIHdpdGhpbiBjb2RlIHByb3RlY3RlZCBieSBpdCB3aGVuIGludGVyZmFjZXMKKwkJICogYXJlIHJlbW92ZWQgd2l0aCBubDgwMjExLgorCQkgKi8KKwkJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCQkvKgorCQkgKiBJdCBpcyBwb3NzaWJsZSB0byBnZXQgTkVUREVWX1VOUkVHSVNURVIKKwkJICogbXVsdGlwbGUgdGltZXMuIFRvIGRldGVjdCB0aGF0LCBjaGVjaworCQkgKiB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgc3RpbGwgb24gdGhlIGxpc3QKKwkJICogb2YgcmVnaXN0ZXJlZCBpbnRlcmZhY2VzLCBhbmQgb25seSB0aGVuCisJCSAqIHJlbW92ZSBhbmQgY2xlYW4gaXQgdXAuCisJCSAqLworCQlpZiAoIWxpc3RfZW1wdHkoJndkZXYtPmxpc3QpKSB7CiAJCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgInBoeTgwMjExIik7Ci0JCQlsaXN0X2RlbF9pbml0KCZkZXYtPmllZWU4MDIxMV9wdHItPmxpc3QpOworCQkJbGlzdF9kZWxfaW5pdCgmd2Rldi0+bGlzdCk7CisJCQlyZGV2LT5kZXZsaXN0X2dlbmVyYXRpb24rKzsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJCQlrZnJlZSh3ZGV2LT53ZXh0LmtleXMpOworI2VuZGlmCiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1BSRV9VUDoKKwkJaWYgKCEod2Rldi0+d2lwaHktPmludGVyZmFjZV9tb2RlcyAmIEJJVCh3ZGV2LT5pZnR5cGUpKSkKKwkJCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKC1FT1BOT1RTVVBQKTsKIAkJaWYgKHJma2lsbF9ibG9ja2VkKHJkZXYtPnJma2lsbCkpCiAJCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubygtRVJGS0lMTCk7CiAJCWJyZWFrOwpAQCAtNTkxLDEwICs3ODAsMzIgQEAKIAkubm90aWZpZXJfY2FsbCA9IGNmZzgwMjExX25ldGRldl9ub3RpZmllcl9jYWxsLAogfTsKIAotc3RhdGljIGludCBjZmc4MDIxMV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGNmZzgwMjExX3Blcm5ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisKKwlydG5sX2xvY2soKTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCWlmIChuZXRfZXEod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG5ldCkpCisJCQlXQVJOX09OKGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCAmaW5pdF9uZXQpKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJcnRubF91bmxvY2soKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBjZmc4MDIxMV9wZXJuZXRfb3BzID0geworCS5leGl0ID0gY2ZnODAyMTFfcGVybmV0X2V4aXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjZmc4MDIxMV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAorCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmNmZzgwMjExX3Blcm5ldF9vcHMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2ZhaWxfcGVybmV0OworCiAJZXJyID0gd2lwaHlfc3lzZnNfaW5pdCgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZhaWxfc3lzZnM7CkBAIC02MjIsOSArODMzLDEwIEBACiBvdXRfZmFpbF9ub3RpZmllcjoKIAl3aXBoeV9zeXNmc19leGl0KCk7CiBvdXRfZmFpbF9zeXNmczoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmNmZzgwMjExX3Blcm5ldF9vcHMpOworb3V0X2ZhaWxfcGVybmV0OgogCXJldHVybiBlcnI7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbChjZmc4MDIxMV9pbml0KTsKIAogc3RhdGljIHZvaWQgY2ZnODAyMTFfZXhpdCh2b2lkKQpAQCAtNjM0LDUgKzg0Niw2IEBACiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmNmZzgwMjExX25ldGRldl9ub3RpZmllcik7CiAJd2lwaHlfc3lzZnNfZXhpdCgpOwogCXJlZ3VsYXRvcnlfZXhpdCgpOworCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmY2ZnODAyMTFfcGVybmV0X29wcyk7CiB9CiBtb2R1bGVfZXhpdChjZmc4MDIxMV9leGl0KTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IGJmYTM0MGMuLjJhMzNkOGIgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtNDksNiArNDksOSBAQAogCS8qIGFzc29jaWF0ZSBuZXRkZXYgbGlzdCAqLwogCXN0cnVjdCBtdXRleCBkZXZsaXN0X210eDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5ldGRldl9saXN0OworCWludCBkZXZsaXN0X2dlbmVyYXRpb247CisJaW50IG9wZW5jb3VudDsgLyogYWxzbyBwcm90ZWN0ZWQgYnkgZGV2bGlzdF9tdHggKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkZXZfd2FpdDsKIAogCS8qIEJTU2VzL3NjYW5uaW5nICovCiAJc3BpbmxvY2tfdCBic3NfbG9jazsKQEAgLTU3LDYgKzYwLDE3IEBACiAJdTMyIGJzc19nZW5lcmF0aW9uOwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxOyAvKiBwcm90ZWN0ZWQgYnkgUlROTCAqLwogCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9hdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl9kb25lX3drOworCisjaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREUKKwlzdHJ1Y3QgZ2VubF9pbmZvICp0ZXN0bW9kZV9pbmZvOworI2VuZGlmCisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29ubl93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCBldmVudF93b3JrOworCisJLyogY3VycmVudCBjaGFubmVsICovCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwogCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMKIAkvKiBEZWJ1Z2ZzIGVudHJpZXMgKi8KQEAgLTg5LDEzICsxMDMsMTQgQEAKIH0KIAogZXh0ZXJuIHN0cnVjdCBtdXRleCBjZmc4MDIxMV9tdXRleDsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNmZzgwMjExX2Rydl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY2ZnODAyMTFfcmRldl9saXN0OworZXh0ZXJuIGludCBjZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbjsKIAogI2RlZmluZSBhc3NlcnRfY2ZnODAyMTFfbG9jaygpIFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmY2ZnODAyMTFfbXV0ZXgpKQogCiAvKgogICogWW91IGNhbiB1c2UgdGhpcyB0byBtYXJrIGEgd2lwaHlfaWR4IGFzIG5vdCBoYXZpbmcgYW4gYXNzb2NpYXRlZCB3aXBoeS4KLSAqIEl0IGd1YXJhbnRlZXMgY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCh3aXBoeV9pZHgpIHdpbGwgcmV0dXJuIE5VTEwKKyAqIEl0IGd1YXJhbnRlZXMgY2ZnODAyMTFfcmRldl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KSB3aWxsIHJldHVybiBOVUxMCiAgKi8KICNkZWZpbmUgV0lQSFlfSURYX1NUQUxFIC0xCiAKQEAgLTEwNCwxNyArMTE5LDQwIEBACiAJc3RydWN0IHJiX25vZGUgcmJuOwogCXVuc2lnbmVkIGxvbmcgdHM7CiAJc3RydWN0IGtyZWYgcmVmOwotCWJvb2wgaG9sZCwgaWVzX2FsbG9jYXRlZDsKKwlhdG9taWNfdCBob2xkOworCWJvb2wgaWVzX2FsbG9jYXRlZDsKIAogCS8qIG11c3QgYmUgbGFzdCBiZWNhdXNlIG9mIHByaXYgbWVtYmVyICovCiAJc3RydWN0IGNmZzgwMjExX2JzcyBwdWI7CiB9OwogCi1zdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoaW50IHdpcGh5X2lkeCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzc19mcm9tX3B1YihzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwdWIsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZmc4MDIxMV9yZWZfYnNzKHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcykKK3sKKwlrcmVmX2dldCgmYnNzLT5yZWYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZnODAyMTFfaG9sZF9ic3Moc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzKQoreworCWF0b21pY19pbmMoJmJzcy0+aG9sZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjZmc4MDIxMV91bmhvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcykKK3sKKwlpbnQgciA9IGF0b21pY19kZWNfcmV0dXJuKCZic3MtPmhvbGQpOworCVdBUk5fT04ociA8IDApOworfQorCisKK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfcmRldl9ieV93aXBoeV9pZHgoaW50IHdpcGh5X2lkeCk7CiBpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKIAogc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKLV9fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKK19fY2ZnODAyMTFfcmRldl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkcml2ZXIKQEAgLTEyMiwxMiArMTYwLDEyIEBACiAgKiBJZiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIG5vbi1OVUxMIGFuZCBhbHNvIGxvY2tzCiAgKiB0aGUgZHJpdmVyJ3MgbXV0ZXghCiAgKgotICogVGhpcyBtZWFucyB0aGF0IHlvdSBuZWVkIHRvIGNhbGwgY2ZnODAyMTFfcHV0X2RldigpCisgKiBUaGlzIG1lYW5zIHRoYXQgeW91IG5lZWQgdG8gY2FsbCBjZmc4MDIxMV91bmxvY2tfcmRldigpCiAgKiBiZWZvcmUgYmVpbmcgYWxsb3dlZCB0byBhY3F1aXJlICZjZmc4MDIxMV9tdXRleCEKICAqCiAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gbG9jayB0aGUgZ2xvYmFsCiAgKiBtdXRleCB0byBnZXQgYW4gaXRlbSBvZmYgdGhlIGxpc3Qgc2FmZWx5LCBhbmQgdGhlbgotICogd2UgbG9jayB0aGUgZHJ2IG11dGV4IHNvIGl0IGRvZXNuJ3QgZ28gYXdheSB1bmRlciB1cy4KKyAqIHdlIGxvY2sgdGhlIHJkZXYgbXV0ZXggc28gaXQgZG9lc24ndCBnbyBhd2F5IHVuZGVyIHVzLgogICoKICAqIFdlIGRvbid0IHdhbnQgdG8ga2VlcCBjZmc4MDIxMV9tdXRleCBsb2NrZWQKICAqIGZvciBhbGwgdGhlIHRpbWUgaW4gb3JkZXIgdG8gYWxsb3cgcmVxdWVzdHMgb24KQEAgLTEzOSwxOSArMTc3LDkzIEBACiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKIGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCi0vKiByZXF1aXJlcyBjZmc4MDIxMV9kcnZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KKy8qIHJlcXVpcmVzIGNmZzgwMjExX3JkZXZfbXV0ZXggdG8gYmUgaGVsZCEgKi8KIHN0cnVjdCB3aXBoeSAqd2lwaHlfaWR4X3RvX3dpcGh5KGludCB3aXBoeV9pZHgpOwogCiAvKiBpZGVudGljYWwgdG8gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8gYnV0IG9ubHkgb3BlcmF0ZSBvbiBpZmluZGV4ICovCiBleHRlcm4gc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoKLWNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGludCBpZmluZGV4KTsKK2NmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KHN0cnVjdCBuZXQgKm5ldCwgaW50IGlmaW5kZXgpOwogCi1leHRlcm4gdm9pZCBjZmc4MDIxMV9wdXRfZGV2KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KTsKK2ludCBjZmc4MDIxMV9zd2l0Y2hfbmV0bnMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0ICpuZXQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZnODAyMTFfbG9ja19yZGV2KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldikKK3sKKwltdXRleF9sb2NrKCZyZGV2LT5tdHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZnODAyMTFfdW5sb2NrX3JkZXYoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQoreworCUJVR19PTihJU19FUlIocmRldikgfHwgIXJkZXYpOworCW11dGV4X3VubG9jaygmcmRldi0+bXR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdkZXZfbG9jayhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQorCV9fYWNxdWlyZXMod2RldikKK3sKKwltdXRleF9sb2NrKCZ3ZGV2LT5tdHgpOworCV9fYWNxdWlyZSh3ZGV2LT5tdHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Rldl91bmxvY2soc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKKwlfX3JlbGVhc2VzKHdkZXYpCit7CisJX19yZWxlYXNlKHdkZXYtPm10eCk7CisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5tdHgpOworfQorCisjZGVmaW5lIEFTU0VSVF9SREVWX0xPQ0socmRldikgV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCYocmRldiktPm10eCkpOworI2RlZmluZSBBU1NFUlRfV0RFVl9MT0NLKHdkZXYpIFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmKHdkZXYpLT5tdHgpKTsKKworZW51bSBjZmc4MDIxMV9ldmVudF90eXBlIHsKKwlFVkVOVF9DT05ORUNUX1JFU1VMVCwKKwlFVkVOVF9ST0FNRUQsCisJRVZFTlRfRElTQ09OTkVDVEVELAorCUVWRU5UX0lCU1NfSk9JTkVELAorfTsKKworc3RydWN0IGNmZzgwMjExX2V2ZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJZW51bSBjZmc4MDIxMV9ldmVudF90eXBlIHR5cGU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCBic3NpZFtFVEhfQUxFTl07CisJCQljb25zdCB1OCAqcmVxX2llOworCQkJY29uc3QgdTggKnJlc3BfaWU7CisJCQlzaXplX3QgcmVxX2llX2xlbjsKKwkJCXNpemVfdCByZXNwX2llX2xlbjsKKwkJCXUxNiBzdGF0dXM7CisJCX0gY3I7CisJCXN0cnVjdCB7CisJCQl1OCBic3NpZFtFVEhfQUxFTl07CisJCQljb25zdCB1OCAqcmVxX2llOworCQkJY29uc3QgdTggKnJlc3BfaWU7CisJCQlzaXplX3QgcmVxX2llX2xlbjsKKwkJCXNpemVfdCByZXNwX2llX2xlbjsKKwkJfSBybTsKKwkJc3RydWN0IHsKKwkJCWNvbnN0IHU4ICppZTsKKwkJCXNpemVfdCBpZV9sZW47CisJCQl1MTYgcmVhc29uOworCQl9IGRjOworCQlzdHJ1Y3QgeworCQkJdTggYnNzaWRbRVRIX0FMRU5dOworCQl9IGlqOworCX07Cit9OworCitzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgeworCXN0cnVjdCBrZXlfcGFyYW1zIHBhcmFtc1s2XTsKKwl1OCBkYXRhWzZdW1dMQU5fTUFYX0tFWV9MRU5dOworCWludCBkZWYsIGRlZm1nbXQ7Cit9OworCiAKIC8qIGZyZWUgb2JqZWN0ICovCi1leHRlcm4gdm9pZCBjZmc4MDIxMV9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydik7CitleHRlcm4gdm9pZCBjZmc4MDIxMV9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOwogCi1leHRlcm4gaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYsCitleHRlcm4gaW50IGNmZzgwMjExX2Rldl9yZW5hbWUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgICAgIGNoYXIgKm5ld25hbWUpOwogCiB2b2lkIGllZWU4MDIxMV9zZXRfYml0cmF0ZV9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KTsKQEAgLTE2MywxNSArMjc1LDEyNCBAQAogICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpOwogCiAvKiBJQlNTICovCitpbnQgX19jZmc4MDIxMV9qb2luX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMsCisJCQkgc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjb25ua2V5cyk7CiBpbnQgY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcyk7CisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcywKKwkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMpOwogdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTsKIGludCBjZmc4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KTsKK3ZvaWQgX19jZmc4MDIxMV9pYnNzX2pvaW5lZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQpOworaW50IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KTsKKworLyogTUxNRSAqLworaW50IF9fY2ZnODAyMTFfbWxtZV9hdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSBlbnVtIG5sODAyMTFfYXV0aF90eXBlIGF1dGhfdHlwZSwKKwkJCSBjb25zdCB1OCAqYnNzaWQsCisJCQkgY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbiwKKwkJCSBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sCisJCQkgY29uc3QgdTggKmtleSwgaW50IGtleV9sZW4sIGludCBrZXlfaWR4KTsKK2ludCBjZmc4MDIxMV9tbG1lX2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkgICAgICAgZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUsIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCisJCSAgICAgICBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sCisJCSAgICAgICBjb25zdCB1OCAqa2V5LCBpbnQga2V5X2xlbiwgaW50IGtleV9pZHgpOworaW50IF9fY2ZnODAyMTFfbWxtZV9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgY29uc3QgdTggKmJzc2lkLCBjb25zdCB1OCAqcHJldl9ic3NpZCwKKwkJCSAgY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbiwKKwkJCSAgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCBib29sIHVzZV9tZnAsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgKmNyeXB0KTsKK2ludCBjZmc4MDIxMV9tbG1lX2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCWNvbnN0IHU4ICpic3NpZCwgY29uc3QgdTggKnByZXZfYnNzaWQsCisJCQljb25zdCB1OCAqc3NpZCwgaW50IHNzaWRfbGVuLAorCQkJY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCBib29sIHVzZV9tZnAsCisJCQlzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzICpjcnlwdCk7CitpbnQgX19jZmc4MDIxMV9tbG1lX2RlYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sIHUxNiByZWFzb24pOworaW50IGNmZzgwMjExX21sbWVfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCB1MTYgcmVhc29uKTsKK2ludCBjZmc4MDIxMV9tbG1lX2Rpc2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJCSAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgdTE2IHJlYXNvbik7Cit2b2lkIGNmZzgwMjExX21sbWVfZG93bihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICAgICAgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCisJCQkgICAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbiwKKwkJCSAgICAgICB1MTYgc3RhdHVzLCBib29sIHdleHRldiwKKwkJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOworCisvKiBTTUUgKi8KK2ludCBfX2NmZzgwMjExX2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqY29ubmVjdCwKKwkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMsCisJCSAgICAgICBjb25zdCB1OCAqcHJldl9ic3NpZCk7CitpbnQgY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKmNvbm5lY3QsCisJCSAgICAgc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjb25ua2V5cyk7CitpbnQgX19jZmc4MDIxMV9kaXNjb25uZWN0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbiwKKwkJCSAgYm9vbCB3ZXh0ZXYpOworaW50IGNmZzgwMjExX2Rpc2Nvbm5lY3Qoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbiwKKwkJCWJvb2wgd2V4dGV2KTsKK3ZvaWQgX19jZmc4MDIxMV9yb2FtZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgY29uc3QgdTggKmJzc2lkLAorCQkgICAgICAgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCisJCSAgICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuKTsKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9jb25uZWN0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOworCit2b2lkIGNmZzgwMjExX2Nvbm5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworYm9vbCBjZmc4MDIxMV9zbWVfZmFpbGVkX3JlYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldik7CiAKIC8qIGludGVybmFsIGhlbHBlcnMgKi8KLWludCBjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3Moc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsCitpbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zLCBpbnQga2V5X2lkeCwKIAkJCQkgICBjb25zdCB1OCAqbWFjX2FkZHIpOwordm9pZCBfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqaWUsCisJCQkgICAgIHNpemVfdCBpZV9sZW4sIHUxNiByZWFzb24sIGJvb2wgZnJvbV9hcCk7Cit2b2lkIGNmZzgwMjExX3NtZV9zY2FuX2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGNmZzgwMjExX3NtZV9yeF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwordm9pZCBjZmc4MDIxMV9zbWVfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlkeCk7Cit2b2lkIF9fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spOwordm9pZCBfX19jZmc4MDIxMV9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LCBib29sIGxlYWspOwordm9pZCBjZmc4MDIxMV91cGxvYWRfY29ubmVjdF9rZXlzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOworaW50IGNmZzgwMjExX2NoYW5nZV9pZmFjZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gbmw4MDIxMV9pZnR5cGUgbnR5cGUsCisJCQkgIHUzMiAqZmxhZ3MsIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwordm9pZCBjZmc4MDIxMV9wcm9jZXNzX3JkZXZfZXZlbnRzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7CisKK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqCityZGV2X2ZpeGVkX2NoYW5uZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpmb3Jfd2Rldik7CitpbnQgcmRldl9zZXRfZnJlcShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgc3RydWN0IHdpcmVsZXNzX2RldiAqZm9yX3dkZXYsCisJCSAgaW50IGZyZXEsIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKTsKKworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MKKyNkZWZpbmUgQ0ZHODAyMTFfREVWX1dBUk5fT04oY29uZCkJV0FSTl9PTihjb25kKQorI2Vsc2UKKy8qCisgKiBUcmljayB0byBlbmFibGUgdXNpbmcgaXQgYXMgYSBjb25kaXRpb24sCisgKiBhbmQgYWxzbyBub3QgZ2l2ZSBhIHdhcm5pbmcgd2hlbiBpdCdzCisgKiBub3QgdXNlZCB0aGF0IHdheS4KKyAqLworI2RlZmluZSBDRkc4MDIxMV9ERVZfV0FSTl9PTihjb25kKQkoe2Jvb2wgX19yID0gKGNvbmQpOyBfX3I7IH0pCisjZW5kaWYKIAogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2RlYnVnZnMuYyBiL25ldC93aXJlbGVzcy9kZWJ1Z2ZzLmMKaW5kZXggNjc5ZGRmYy4uMTNkOTNkOCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2RlYnVnZnMuYworKysgYi9uZXQvd2lyZWxlc3MvZGVidWdmcy5jCkBAIC0xMDQsMTUgKzEwNCwxNSBAQAogfTsKIAogI2RlZmluZSBERUJVR0ZTX0FERChuYW1lKQkJCQkJCVwKLQlkcnYtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIFNfSVJVR08sIHBoeWQsCVwKLQkJCQkJCSAgJmRydi0+d2lwaHksICZuYW1lIyMgX29wcyk7CisJcmRldi0+ZGVidWdmcy5uYW1lID0gZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgU19JUlVHTywgcGh5ZCwJXAorCQkJCQkJICAmcmRldi0+d2lwaHksICZuYW1lIyMgX29wcyk7CiAjZGVmaW5lIERFQlVHRlNfREVMKG5hbWUpCQkJCQkJXAotCWRlYnVnZnNfcmVtb3ZlKGRydi0+ZGVidWdmcy5uYW1lKTsJCQkJXAotCWRydi0+ZGVidWdmcy5uYW1lID0gTlVMTDsKKwlkZWJ1Z2ZzX3JlbW92ZShyZGV2LT5kZWJ1Z2ZzLm5hbWUpOwkJCQlcCisJcmRldi0+ZGVidWdmcy5uYW1lID0gTlVMTDsKIAotdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX2Rydl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpCit2b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQogewotCXN0cnVjdCBkZW50cnkgKnBoeWQgPSBkcnYtPndpcGh5LmRlYnVnZnNkaXI7CisJc3RydWN0IGRlbnRyeSAqcGh5ZCA9IHJkZXYtPndpcGh5LmRlYnVnZnNkaXI7CiAKIAlERUJVR0ZTX0FERChydHNfdGhyZXNob2xkKTsKIAlERUJVR0ZTX0FERChmcmFnbWVudGF0aW9uX3RocmVzaG9sZCk7CkBAIC0xMjEsNyArMTIxLDcgQEAKIAlERUJVR0ZTX0FERChodDQwYWxsb3dfbWFwKTsKIH0KIAotdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX2Rydl9kZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpCit2b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9kZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQogewogCURFQlVHRlNfREVMKHJ0c190aHJlc2hvbGQpOwogCURFQlVHRlNfREVMKGZyYWdtZW50YXRpb25fdGhyZXNob2xkKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9kZWJ1Z2ZzLmggYi9uZXQvd2lyZWxlc3MvZGVidWdmcy5oCmluZGV4IGMyMjY5ODMuLjY0MTliNmQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9kZWJ1Z2ZzLmgKKysrIGIvbmV0L3dpcmVsZXNzL2RlYnVnZnMuaApAQCAtMiwxMyArMiwxMyBAQAogI2RlZmluZSBfX0NGRzgwMjExX0RFQlVHRlNfSAogCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMKLXZvaWQgY2ZnODAyMTFfZGVidWdmc19kcnZfYWRkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KTsKLXZvaWQgY2ZnODAyMTFfZGVidWdmc19kcnZfZGVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2KTsKK3ZvaWQgY2ZnODAyMTFfZGVidWdmc19yZGV2X2FkZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOwordm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX3JkZXZfZGVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7CiAjZWxzZQogc3RhdGljIGlubGluZQotdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX2Rydl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpIHt9Cit2b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9hZGQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KSB7fQogc3RhdGljIGlubGluZQotdm9pZCBjZmc4MDIxMV9kZWJ1Z2ZzX2Rydl9kZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYpIHt9Cit2b2lkIGNmZzgwMjExX2RlYnVnZnNfcmRldl9kZWwoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KSB7fQogI2VuZGlmCiAKICNlbmRpZiAvKiBfX0NGRzgwMjExX0RFQlVHRlNfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2lic3MuYyBiL25ldC93aXJlbGVzcy9pYnNzLmMKaW5kZXggYTRhMWMzNC4uYzg4MzM4OSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2lic3MuYworKysgYi9uZXQvd2lyZWxlc3MvaWJzcy5jCkBAIC03LDEwICs3LDExIEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlICJ3ZXh0LWNvbXBhdC5oIgogI2luY2x1ZGUgIm5sODAyMTEuaCIKIAogCi12b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwgZ2ZwX3QgZ2ZwKQordm9pZCBfX2NmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCkKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwogCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzczsKQEAgLTIxLDEwICsyMiw3IEBACiAJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKIAkJcmV0dXJuOwogCi0JaWYgKFdBUk5fT04oIXdkZXYtPnNzaWRfbGVuKSkKLQkJcmV0dXJuOwotCi0JaWYgKG1lbWNtcChic3NpZCwgd2Rldi0+YnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCWlmICghd2Rldi0+c3NpZF9sZW4pCiAJCXJldHVybjsKIAogCWJzcyA9IGNmZzgwMjExX2dldF9ic3Mod2Rldi0+d2lwaHksIE5VTEwsIGJzc2lkLApAQCAtMzYsMzkgKzM0LDc2IEBACiAKIAlpZiAod2Rldi0+Y3VycmVudF9ic3MpIHsKIAkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5jdXJyZW50X2Jzcyk7Ci0JCWNmZzgwMjExX3B1dF9ic3Mod2Rldi0+Y3VycmVudF9ic3MpOworCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5jdXJyZW50X2Jzcy0+cHViKTsKIAl9CiAKLQljZmc4MDIxMV9ob2xkX2Jzcyhic3MpOwotCXdkZXYtPmN1cnJlbnRfYnNzID0gYnNzOwotCW1lbWNweSh3ZGV2LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwljZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7CisJd2Rldi0+Y3VycmVudF9ic3MgPSBic3NfZnJvbV9wdWIoYnNzKTsKIAotCW5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSksIGRldiwgYnNzaWQsIGdmcCk7CisJY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTsKKworCW5sODAyMTFfc2VuZF9pYnNzX2Jzc2lkKHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSksIGRldiwgYnNzaWQsCisJCQkJR0ZQX0tFUk5FTCk7CiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAogCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKIAltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CiAJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwogI2VuZGlmCiB9Ci1FWFBPUlRfU1lNQk9MKGNmZzgwMjExX2lic3Nfam9pbmVkKTsKIAotaW50IGNmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMpCit2b2lkIGNmZzgwMjExX2lic3Nfam9pbmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfZXZlbnQgKmV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlDRkc4MDIxMV9ERVZfV0FSTl9PTighd2Rldi0+c3NpZF9sZW4pOworCisJZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBnZnApOworCWlmICghZXYpCisJCXJldHVybjsKKworCWV2LT50eXBlID0gRVZFTlRfSUJTU19KT0lORUQ7CisJbWVtY3B5KGV2LT5jci5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmZXYtPmxpc3QsICZ3ZGV2LT5ldmVudF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJc2NoZWR1bGVfd29yaygmcmRldi0+ZXZlbnRfd29yayk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2lic3Nfam9pbmVkKTsKKworaW50IF9fY2ZnODAyMTFfam9pbl9pYnNzKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBjZmc4MDIxMV9pYnNzX3BhcmFtcyAqcGFyYW1zLAorCQkJIHN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAJaW50IGVycjsKIAorCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwljaGFuID0gcmRldl9maXhlZF9jaGFubmVsKHJkZXYsIHdkZXYpOworCWlmIChjaGFuICYmIGNoYW4gIT0gcGFyYW1zLT5jaGFubmVsKQorCQlyZXR1cm4gLUVCVVNZOworCiAJaWYgKHdkZXYtPnNzaWRfbGVuKQogCQlyZXR1cm4gLUVBTFJFQURZOwogCisJaWYgKFdBUk5fT04od2Rldi0+Y29ubmVjdF9rZXlzKSkKKwkJa2ZyZWUod2Rldi0+Y29ubmVjdF9rZXlzKTsKKwl3ZGV2LT5jb25uZWN0X2tleXMgPSBjb25ua2V5czsKKwogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIAl3ZGV2LT53ZXh0Lmlic3MuY2hhbm5lbCA9IHBhcmFtcy0+Y2hhbm5lbDsKICNlbmRpZgogCWVyciA9IHJkZXYtPm9wcy0+am9pbl9pYnNzKCZyZGV2LT53aXBoeSwgZGV2LCBwYXJhbXMpOwotCi0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCXdkZXYtPmNvbm5lY3Rfa2V5cyA9IE5VTEw7CiAJCXJldHVybiBlcnI7CisJfQogCiAJbWVtY3B5KHdkZXYtPnNzaWQsIHBhcmFtcy0+c3NpZCwgcGFyYW1zLT5zc2lkX2xlbik7CiAJd2Rldi0+c3NpZF9sZW4gPSBwYXJhbXMtPnNzaWRfbGVuOwpAQCAtNzYsNDUgKzExMSwxMDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjZmc4MDIxMV9jbGVhcl9pYnNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KQoraW50IGNmZzgwMjExX2pvaW5faWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2lic3NfcGFyYW1zICpwYXJhbXMsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5rZXlzKQogewogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gX19jZmc4MDIxMV9qb2luX2lic3MocmRldiwgZGV2LCBwYXJhbXMsIGNvbm5rZXlzKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fY2ZnODAyMTFfY2xlYXJfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJaW50IGk7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJa2ZyZWUod2Rldi0+Y29ubmVjdF9rZXlzKTsKKwl3ZGV2LT5jb25uZWN0X2tleXMgPSBOVUxMOworCisJLyoKKwkgKiBEZWxldGUgYWxsIHRoZSBrZXlzIC4uLiBwYWlyd2lzZSBrZXlzIGNhbid0IHJlYWxseQorCSAqIGV4aXN0IGFueSBtb3JlIGFueXdheSwgYnV0IGRlZmF1bHQga2V5cyBtaWdodC4KKwkgKi8KKwlpZiAocmRldi0+b3BzLT5kZWxfa2V5KQorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJcmRldi0+b3BzLT5kZWxfa2V5KHdkZXYtPndpcGh5LCBkZXYsIGksIE5VTEwpOwogCiAJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKSB7CiAJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+Y3VycmVudF9ic3MpOwotCQljZmc4MDIxMV9wdXRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKKwkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+Y3VycmVudF9ic3MtPnB1Yik7CiAJfQogCiAJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOwogCXdkZXYtPnNzaWRfbGVuID0gMDsKLQltZW1zZXQod2Rldi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAJaWYgKCFub3dleHQpCiAJCXdkZXYtPndleHQuaWJzcy5zc2lkX2xlbiA9IDA7CiAjZW5kaWYKIH0KIAotaW50IGNmZzgwMjExX2xlYXZlX2lic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpCit2b2lkIGNmZzgwMjExX2NsZWFyX2lic3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBub3dleHQpCiB7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwlfX2NmZzgwMjExX2NsZWFyX2lic3MoZGV2LCBub3dleHQpOworCXdkZXZfdW5sb2NrKHdkZXYpOworfQorCitzdGF0aWMgaW50IF9fY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbm93ZXh0KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAJaW50IGVycjsKIAorCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAoIXdkZXYtPnNzaWRfbGVuKQorCQlyZXR1cm4gLUVOT0xJTks7CisKIAllcnIgPSByZGV2LT5vcHMtPmxlYXZlX2lic3MoJnJkZXYtPndpcGh5LCBkZXYpOwogCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWNmZzgwMjExX2NsZWFyX2lic3MoZGV2LCBub3dleHQpOworCV9fY2ZnODAyMTFfY2xlYXJfaWJzcyhkZXYsIG5vd2V4dCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKLXN0YXRpYyBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCSAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCitpbnQgY2ZnODAyMTFfbGVhdmVfaWJzcyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIG5vd2V4dCkKIHsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCWludCBlcnI7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gX19jZmc4MDIxMV9sZWF2ZV9pYnNzKHJkZXYsIGRldiwgbm93ZXh0KTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCitpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjayA9IE5VTEw7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwotCWludCBpOworCWludCBpLCBlcnI7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOwogCiAJaWYgKCF3ZGV2LT53ZXh0Lmlic3MuYmVhY29uX2ludGVydmFsKQogCQl3ZGV2LT53ZXh0Lmlic3MuYmVhY29uX2ludGVydmFsID0gMTAwOwpAQCAtMTU0LDQzICsyNTEsNjYgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcod2Rldi0+bmV0ZGV2KSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gY2ZnODAyMTFfam9pbl9pYnNzKHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSksCi0JCQkJICB3ZGV2LT5uZXRkZXYsICZ3ZGV2LT53ZXh0Lmlic3MpOworCWlmICh3ZGV2LT53ZXh0LmtleXMpCisJCXdkZXYtPndleHQua2V5cy0+ZGVmID0gd2Rldi0+d2V4dC5kZWZhdWx0X2tleTsKKworCXdkZXYtPndleHQuaWJzcy5wcml2YWN5ID0gd2Rldi0+d2V4dC5kZWZhdWx0X2tleSAhPSAtMTsKKworCWlmICh3ZGV2LT53ZXh0LmtleXMpIHsKKwkJY2sgPSBrbWVtZHVwKHdkZXYtPndleHQua2V5cywgc2l6ZW9mKCpjayksIEdGUF9LRVJORUwpOworCQlpZiAoIWNrKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQljay0+cGFyYW1zW2ldLmtleSA9IGNrLT5kYXRhW2ldOworCX0KKwllcnIgPSBfX2NmZzgwMjExX2pvaW5faWJzcyhyZGV2LCB3ZGV2LT5uZXRkZXYsCisJCQkJICAgJndkZXYtPndleHQuaWJzcywgY2spOworCWlmIChlcnIpCisJCWtmcmVlKGNrKTsKKworCXJldHVybiBlcnI7CiB9CiAKIGludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQorCQkJICAgICAgIHN0cnVjdCBpd19mcmVxICp3ZXh0ZnJlcSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JaW50IGVycjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IE5VTEw7CisJaW50IGVyciwgZnJlcTsKIAogCS8qIGNhbGwgb25seSBmb3IgaWJzcyEgKi8KIAlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KS0+b3BzLT5qb2luX2lic3MpCisJaWYgKCFyZGV2LT5vcHMtPmpvaW5faWJzcykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JY2hhbiA9IGNmZzgwMjExX3dleHRfZnJlcSh3ZGV2LT53aXBoeSwgZnJlcSk7Ci0JaWYgKGNoYW4gJiYgSVNfRVJSKGNoYW4pKQotCQlyZXR1cm4gUFRSX0VSUihjaGFuKTsKKwlmcmVxID0gY2ZnODAyMTFfd2V4dF9mcmVxKHdkZXYtPndpcGh5LCB3ZXh0ZnJlcSk7CisJaWYgKGZyZXEgPCAwKQorCQlyZXR1cm4gZnJlcTsKIAotCWlmIChjaGFuICYmCi0JICAgIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfHwKLQkgICAgIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZnJlcSkgeworCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdkZXYtPndpcGh5LCBmcmVxKTsKKwkJaWYgKCFjaGFuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfHwKKwkJICAgIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlpZiAod2Rldi0+d2V4dC5pYnNzLmNoYW5uZWwgPT0gY2hhbikKIAkJcmV0dXJuIDA7CiAKLQlpZiAod2Rldi0+c3NpZF9sZW4pIHsKLQkJZXJyID0gY2ZnODAyMTFfbGVhdmVfaWJzcyh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLAotCQkJCQkgIGRldiwgdHJ1ZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gMDsKKwlpZiAod2Rldi0+c3NpZF9sZW4pCisJCWVyciA9IF9fY2ZnODAyMTFfbGVhdmVfaWJzcyhyZGV2LCBkZXYsIHRydWUpOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWlmIChjaGFuKSB7CiAJCXdkZXYtPndleHQuaWJzcy5jaGFubmVsID0gY2hhbjsKQEAgLTIwMCwxMCArMzIwLDE0IEBACiAJCXdkZXYtPndleHQuaWJzcy5jaGFubmVsX2ZpeGVkID0gZmFsc2U7CiAJfQogCi0JcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSksIHdkZXYpOworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4ocmRldiwgd2Rldik7CisJd2Rldl91bmxvY2sod2Rldik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlyZXR1cm4gZXJyOwogfQotLyogdGVtcG9yYXJ5IHN5bWJvbCAtIG1hcmsgR1BMIC0gaW4gdGhlIGZ1dHVyZSB0aGUgaGFuZGxlciB3b24ndCBiZSAqLwotRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfaWJzc193ZXh0X3Npd2ZyZXEpOwogCiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtMjE2LDEwICszNDAsMTIgQEAKIAlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXdkZXZfbG9jayh3ZGV2KTsKIAlpZiAod2Rldi0+Y3VycmVudF9ic3MpCi0JCWNoYW4gPSB3ZGV2LT5jdXJyZW50X2Jzcy0+Y2hhbm5lbDsKKwkJY2hhbiA9IHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuY2hhbm5lbDsKIAllbHNlIGlmICh3ZGV2LT53ZXh0Lmlic3MuY2hhbm5lbCkKIAkJY2hhbiA9IHdkZXYtPndleHQuaWJzcy5jaGFubmVsOworCXdkZXZfdW5sb2NrKHdkZXYpOwogCiAJaWYgKGNoYW4pIHsKIAkJZnJlcS0+bSA9IGNoYW4tPmNlbnRlcl9mcmVxOwpAQCAtMjMwLDE0ICszNTYsMTMgQEAKIAkvKiBubyBjaGFubmVsIGlmIG5vdCBqb2luaW5nICovCiAJcmV0dXJuIC1FSU5WQUw7CiB9Ci0vKiB0ZW1wb3Jhcnkgc3ltYm9sIC0gbWFyayBHUEwgLSBpbiB0aGUgZnV0dXJlIHRoZSBoYW5kbGVyIHdvbid0IGJlICovCi1FWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZnJlcSk7CiAKIGludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCkKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CiAJc2l6ZV90IGxlbiA9IGRhdGEtPmxlbmd0aDsKIAlpbnQgZXJyOwogCkBAIC0yNDUsMTUgKzM3MCwxNyBAQAogCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCF3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLT5vcHMtPmpvaW5faWJzcykKKwlpZiAoIXJkZXYtPm9wcy0+am9pbl9pYnNzKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAod2Rldi0+c3NpZF9sZW4pIHsKLQkJZXJyID0gY2ZnODAyMTFfbGVhdmVfaWJzcyh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLAotCQkJCQkgIGRldiwgdHJ1ZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gMDsKKwlpZiAod2Rldi0+c3NpZF9sZW4pCisJCWVyciA9IF9fY2ZnODAyMTFfbGVhdmVfaWJzcyhyZGV2LCBkZXYsIHRydWUpOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCS8qIGl3Y29uZmlnIHVzZXMgbnVsIHRlcm1pbmF0aW9uIGluIFNTSUQuLiAqLwogCWlmIChsZW4gPiAwICYmIHNzaWRbbGVuIC0gMV0gPT0gJ1wwJykKQEAgLTI2MywxMCArMzkwLDE0IEBACiAJbWVtY3B5KHdkZXYtPndleHQuaWJzcy5zc2lkLCBzc2lkLCBsZW4pOwogCXdkZXYtPndleHQuaWJzcy5zc2lkX2xlbiA9IGxlbjsKIAotCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfam9pbih3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLCB3ZGV2KTsKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IGNmZzgwMjExX2lic3Nfd2V4dF9qb2luKHJkZXYsIHdkZXYpOworCXdkZXZfdW5sb2NrKHdkZXYpOworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCisJcmV0dXJuIGVycjsKIH0KLS8qIHRlbXBvcmFyeSBzeW1ib2wgLSBtYXJrIEdQTCAtIGluIHRoZSBmdXR1cmUgdGhlIGhhbmRsZXIgd29uJ3QgYmUgKi8KLUVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX2lic3Nfd2V4dF9zaXdlc3NpZCk7CiAKIGludCBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtMjgwLDYgKzQxMSw3IEBACiAKIAlkYXRhLT5mbGFncyA9IDA7CiAKKwl3ZGV2X2xvY2sod2Rldik7CiAJaWYgKHdkZXYtPnNzaWRfbGVuKSB7CiAJCWRhdGEtPmZsYWdzID0gMTsKIAkJZGF0YS0+bGVuZ3RoID0gd2Rldi0+c3NpZF9sZW47CkBAIC0yODksMTcgKzQyMSwxNyBAQAogCQlkYXRhLT5sZW5ndGggPSB3ZGV2LT53ZXh0Lmlic3Muc3NpZF9sZW47CiAJCW1lbWNweShzc2lkLCB3ZGV2LT53ZXh0Lmlic3Muc3NpZCwgZGF0YS0+bGVuZ3RoKTsKIAl9CisJd2Rldl91bmxvY2sod2Rldik7CiAKIAlyZXR1cm4gMDsKIH0KLS8qIHRlbXBvcmFyeSBzeW1ib2wgLSBtYXJrIEdQTCAtIGluIHRoZSBmdXR1cmUgdGhlIGhhbmRsZXIgd29uJ3QgYmUgKi8KLUVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX2lic3Nfd2V4dF9naXdlc3NpZCk7CiAKIGludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CiAJdTggKmJzc2lkID0gYXBfYWRkci0+c2FfZGF0YTsKIAlpbnQgZXJyOwogCkBAIC0zMDcsNyArNDM5LDcgQEAKIAlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KS0+b3BzLT5qb2luX2lic3MpCisJaWYgKCFyZGV2LT5vcHMtPmpvaW5faWJzcykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGFwX2FkZHItPnNhX2ZhbWlseSAhPSBBUlBIUkRfRVRIRVIpCkBAIC0zMjYsMTIgKzQ1OCwxNCBAQAogCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIHdkZXYtPndleHQuaWJzcy5ic3NpZCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAod2Rldi0+c3NpZF9sZW4pIHsKLQkJZXJyID0gY2ZnODAyMTFfbGVhdmVfaWJzcyh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLAotCQkJCQkgIGRldiwgdHJ1ZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KKwl3ZGV2X2xvY2sod2Rldik7CisJZXJyID0gMDsKKwlpZiAod2Rldi0+c3NpZF9sZW4pCisJCWVyciA9IF9fY2ZnODAyMTFfbGVhdmVfaWJzcyhyZGV2LCBkZXYsIHRydWUpOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWlmIChic3NpZCkgewogCQltZW1jcHkod2Rldi0+d2V4dC5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKQEAgLTMzOSwxMCArNDczLDE0IEBACiAJfSBlbHNlCiAJCXdkZXYtPndleHQuaWJzcy5ic3NpZCA9IE5VTEw7CiAKLQlyZXR1cm4gY2ZnODAyMTFfaWJzc193ZXh0X2pvaW4od2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KSwgd2Rldik7CisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCXdkZXZfbG9jayh3ZGV2KTsKKwllcnIgPSBjZmc4MDIxMV9pYnNzX3dleHRfam9pbihyZGV2LCB3ZGV2KTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCXJldHVybiBlcnI7CiB9Ci0vKiB0ZW1wb3Jhcnkgc3ltYm9sIC0gbWFyayBHUEwgLSBpbiB0aGUgZnV0dXJlIHRoZSBoYW5kbGVyIHdvbid0IGJlICovCi1FWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXApOwogCiBpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC0zNTYsMTQgKzQ5NCwxNiBAQAogCiAJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCi0JaWYgKHdkZXYtPndleHQuaWJzcy5ic3NpZCkgeworCXdkZXZfbG9jayh3ZGV2KTsKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpCisJCW1lbWNweShhcF9hZGRyLT5zYV9kYXRhLCB3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZSBpZiAod2Rldi0+d2V4dC5pYnNzLmJzc2lkKQogCQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2Rldi0+d2V4dC5pYnNzLmJzc2lkLCBFVEhfQUxFTik7Ci0JCXJldHVybiAwOwotCX0KKwllbHNlCisJCW1lbXNldChhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CiAKLQltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2Rldi0+YnNzaWQsIEVUSF9BTEVOKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwogCXJldHVybiAwOwogfQotLyogdGVtcG9yYXJ5IHN5bWJvbCAtIG1hcmsgR1BMIC0gaW4gdGhlIGZ1dHVyZSB0aGUgaGFuZGxlciB3b24ndCBiZSAqLwotRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfaWJzc193ZXh0X2dpd2FwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21sbWUuYyBiL25ldC93aXJlbGVzcy9tbG1lLmMKaW5kZXggNDIxODQzNi4uNzlkMmVlYyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL21sbWUuYworKysgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCkBAIC04LDc1ICs4LDY1MiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgIm5sODAyMTEuaCIKIAogdm9pZCBjZmc4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCW5sODAyMTFfc2VuZF9yeF9hdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4pOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilidWY7CisJdTggKmJzc2lkID0gbWdtdC0+YnNzaWQ7CisJaW50IGk7CisJdTE2IHN0YXR1cyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CisJYm9vbCBkb25lID0gZmFsc2U7CisKKwl3ZGV2X2xvY2sod2Rldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1Yi5ic3NpZCwgYnNzaWQsCisJCQkJCQkJRVRIX0FMRU4pID09IDApIHsKKwkJCWlmIChzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQkJCXdkZXYtPmF1dGhfYnNzZXNbaV0gPSB3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldOworCQkJfSBlbHNlIHsKKwkJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0pOworCQkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1Yik7CisJCQl9CisJCQl3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldID0gTlVMTDsKKwkJCWRvbmUgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlXQVJOX09OKCFkb25lKTsKKworCW5sODAyMTFfc2VuZF9yeF9hdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4sIEdGUF9LRVJORUwpOworCWNmZzgwMjExX3NtZV9yeF9hdXRoKGRldiwgYnVmLCBsZW4pOworCisJd2Rldl91bmxvY2sod2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfcnhfYXV0aCk7CiAKIHZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXUxNiBzdGF0dXNfY29kZTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCW5sODAyMTFfc2VuZF9yeF9hc3NvYyhyZGV2LCBkZXYsIGJ1ZiwgbGVuKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopYnVmOworCXU4ICppZSA9IG1nbXQtPnUuYXNzb2NfcmVzcC52YXJpYWJsZTsKKwlpbnQgaSwgaWVvZmZzID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LCB1LmFzc29jX3Jlc3AudmFyaWFibGUpOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcyA9IE5VTEw7CisKKwl3ZGV2X2xvY2sod2Rldik7CisKKwlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5zdGF0dXNfY29kZSk7CisKKwkvKgorCSAqIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLCB3ZSBkb24ndCBub3RpZnkgdXNlcnNwYWNlIG9mCisJICogYSAocmUtKWFzc29jaWF0aW9uIHJlcGx5IGlmIHdlIHRyaWVkIHRvIHNlbmQgYSByZWFzc29jCisJICogYW5kIGdvdCBhIHJlamVjdCAtLSB3ZSBvbmx5IHRyeSBhZ2FpbiB3aXRoIGFuIGFzc29jCisJICogZnJhbWUgaW5zdGVhZCBvZiByZWFzc29jLgorCSAqLworCWlmIChzdGF0dXNfY29kZSAhPSBXTEFOX1NUQVRVU19TVUNDRVNTICYmIHdkZXYtPmNvbm4gJiYKKwkgICAgY2ZnODAyMTFfc21lX2ZhaWxlZF9yZWFzc29jKHdkZXYpKQorCQlnb3RvIG91dDsKKworCW5sODAyMTFfc2VuZF9yeF9hc3NvYyhyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmIChzdGF0dXNfY29kZSA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCQlpZiAoIXdkZXYtPmF1dGhfYnNzZXNbaV0pCisJCQkJY29udGludWU7CisJCQlpZiAobWVtY21wKHdkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yi5ic3NpZCwgbWdtdC0+YnNzaWQsCisJCQkJICAgRVRIX0FMRU4pID09IDApIHsKKwkJCQlic3MgPSB3ZGV2LT5hdXRoX2Jzc2VzW2ldOworCQkJCXdkZXYtPmF1dGhfYnNzZXNbaV0gPSBOVUxMOworCQkJCS8qIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIGRyb3AgaG9sZCAqLworCQkJCWNmZzgwMjExX3JlZl9ic3MoYnNzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCVdBUk5fT04oIWJzcyk7CisJfQorCisJaWYgKCF3ZGV2LT5jb25uICYmIHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfSURMRSkgeworCQkvKgorCQkgKiBUaGlzIGlzIGZvciB0aGUgdXNlcnNwYWNlIFNNRSwgdGhlIENPTk5FQ1RJTkcKKwkJICogc3RhdGUgd2lsbCBiZSBjaGFuZ2VkIHRvIENPTk5FQ1RFRCBieQorCQkgKiBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KCkgYmVsb3cuCisJCSAqLworCQl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORzsKKwl9CisKKwkvKiB0aGlzIGNvbnN1bWVzIG9uZSBic3MgcmVmZXJlbmNlICh1bmxlc3MgYnNzIGlzIE5VTEwpICovCisJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChkZXYsIG1nbXQtPmJzc2lkLCBOVUxMLCAwLCBpZSwgbGVuIC0gaWVvZmZzLAorCQkJCSAgc3RhdHVzX2NvZGUsCisJCQkJICBzdGF0dXNfY29kZSA9PSBXTEFOX1NUQVRVU19TVUNDRVNTLAorCQkJCSAgYnNzID8gJmJzcy0+cHViIDogTlVMTCk7CisJLyogZHJvcCBob2xkIG5vdywgYW5kIGFsc28gcmVmZXJlbmNlIGFjcXVpcmVkIGFib3ZlICovCisJaWYgKGJzcykgeworCQljZmc4MDIxMV91bmhvbGRfYnNzKGJzcyk7CisJCWNmZzgwMjExX3B1dF9ic3MoJmJzcy0+cHViKTsKKwl9CisKKyBvdXQ6CisJd2Rldl91bmxvY2sod2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfcnhfYXNzb2MpOwogCi12b2lkIGNmZzgwMjExX3NlbmRfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCitzdGF0aWMgdm9pZCBfX2NmZzgwMjExX3NlbmRfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCW5sODAyMTFfc2VuZF9kZWF1dGgocmRldiwgZGV2LCBidWYsIGxlbik7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKWJ1ZjsKKwljb25zdCB1OCAqYnNzaWQgPSBtZ210LT5ic3NpZDsKKwlpbnQgaTsKKwlib29sIGRvbmUgPSBmYWxzZTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlubDgwMjExX3NlbmRfZGVhdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4sIEdGUF9LRVJORUwpOworCisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzICYmCisJICAgIG1lbWNtcCh3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pID09IDApIHsKKwkJZG9uZSA9IHRydWU7CisJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+Y3VycmVudF9ic3MpOworCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5jdXJyZW50X2Jzcy0+cHViKTsKKwkJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOworCX0gZWxzZSBmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQlpZiAod2Rldi0+YXV0aF9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKHdkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGhfYnNzZXNbaV0pOworCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViKTsKKwkJCXdkZXYtPmF1dGhfYnNzZXNbaV0gPSBOVUxMOworCQkJZG9uZSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGh0cnlfYnNzZXNbaV0pOworCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViKTsKKwkJCXdkZXYtPmF1dGh0cnlfYnNzZXNbaV0gPSBOVUxMOworCQkJZG9uZSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCVdBUk5fT04oIWRvbmUpOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKSB7CisJCXUxNiByZWFzb25fY29kZTsKKwkJYm9vbCBmcm9tX2FwOworCisJCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kZWF1dGgucmVhc29uX2NvZGUpOworCisJCWZyb21fYXAgPSBtZW1jbXAobWdtdC0+c2EsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSAhPSAwOworCQlfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChkZXYsIE5VTEwsIDAsIHJlYXNvbl9jb2RlLCBmcm9tX2FwKTsKKwl9IGVsc2UgaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORykgeworCQlfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KGRldiwgbWdtdC0+YnNzaWQsIE5VTEwsIDAsIE5VTEwsIDAsCisJCQkJCSAgV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKKwkJCQkJICBmYWxzZSwgTlVMTCk7CisJfQorfQorCisKK3ZvaWQgY2ZnODAyMTFfc2VuZF9kZWF1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCSAgdm9pZCAqY29va2llKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlCVUdfT04oY29va2llICYmIHdkZXYgIT0gY29va2llKTsKKworCWlmIChjb29raWUpIHsKKwkJLyogY2FsbGVkIHdpdGhpbiBjYWxsYmFjayAqLworCQlfX2NmZzgwMjExX3NlbmRfZGVhdXRoKGRldiwgYnVmLCBsZW4pOworCX0gZWxzZSB7CisJCXdkZXZfbG9jayh3ZGV2KTsKKwkJX19jZmc4MDIxMV9zZW5kX2RlYXV0aChkZXYsIGJ1ZiwgbGVuKTsKKwkJd2Rldl91bmxvY2sod2Rldik7CisJfQogfQogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX2RlYXV0aCk7CiAKLXZvaWQgY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQorc3RhdGljIHZvaWQgX19jZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQogewotCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdkZXYtPndpcGh5OwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7Ci0Jbmw4MDIxMV9zZW5kX2Rpc2Fzc29jKHJkZXYsIGRldiwgYnVmLCBsZW4pOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilidWY7CisJY29uc3QgdTggKmJzc2lkID0gbWdtdC0+YnNzaWQ7CisJaW50IGk7CisJdTE2IHJlYXNvbl9jb2RlOworCWJvb2wgZnJvbV9hcDsKKwlib29sIGRvbmUgPSBmYWxzZTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlubDgwMjExX3NlbmRfZGlzYXNzb2MocmRldiwgZGV2LCBidWYsIGxlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNURUQpCisJCXJldHVybjsKKworCWlmICh3ZGV2LT5jdXJyZW50X2JzcyAmJgorCSAgICBtZW1jbXAod2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSB8fCB3ZGV2LT5hdXRoX2Jzc2VzW2ldKQorCQkJCWNvbnRpbnVlOworCQkJd2Rldi0+YXV0aF9ic3Nlc1tpXSA9IHdkZXYtPmN1cnJlbnRfYnNzOworCQkJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOworCQkJZG9uZSA9IHRydWU7CisJCQljZmc4MDIxMV9zbWVfZGlzYXNzb2MoZGV2LCBpKTsKKwkJCWJyZWFrOworCQl9CisJCVdBUk5fT04oIWRvbmUpOworCX0gZWxzZQorCQlXQVJOX09OKDEpOworCisKKwlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGlzYXNzb2MucmVhc29uX2NvZGUpOworCisJZnJvbV9hcCA9IG1lbWNtcChtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pICE9IDA7CisJX19jZmc4MDIxMV9kaXNjb25uZWN0ZWQoZGV2LCBOVUxMLCAwLCByZWFzb25fY29kZSwgZnJvbV9hcCk7Cit9CisKK3ZvaWQgY2ZnODAyMTFfc2VuZF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLAorCQkJICAgIHZvaWQgKmNvb2tpZSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJQlVHX09OKGNvb2tpZSAmJiB3ZGV2ICE9IGNvb2tpZSk7CisKKwlpZiAoY29va2llKSB7CisJCS8qIGNhbGxlZCB3aXRoaW4gY2FsbGJhY2sgKi8KKwkJX19jZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKGRldiwgYnVmLCBsZW4pOworCX0gZWxzZSB7CisJCXdkZXZfbG9jayh3ZGV2KTsKKwkJX19jZmc4MDIxMV9zZW5kX2Rpc2Fzc29jKGRldiwgYnVmLCBsZW4pOworCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfZGlzYXNzb2MpOwogCi1zdGF0aWMgdm9pZCBjZmc4MDIxMV93ZXh0X2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKLQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLSNlbmRpZgotfQotCiB2b2lkIGNmZzgwMjExX3NlbmRfYXV0aF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKQogewotCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdkZXYtPndpcGh5OwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7Ci0Jbmw4MDIxMV9zZW5kX2F1dGhfdGltZW91dChyZGV2LCBkZXYsIGFkZHIpOwotCWNmZzgwMjExX3dleHRfZGlzY29ubmVjdGVkKGRldik7CisJaW50IGk7CisJYm9vbCBkb25lID0gZmFsc2U7CisKKwl3ZGV2X2xvY2sod2Rldik7CisKKwlubDgwMjExX3NlbmRfYXV0aF90aW1lb3V0KHJkZXYsIGRldiwgYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORykKKwkJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChkZXYsIGFkZHIsIE5VTEwsIDAsIE5VTEwsIDAsCisJCQkJCSAgV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKKwkJCQkJICBmYWxzZSwgTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBhZGRyICYmIGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCWlmICh3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldICYmCisJCSAgICBtZW1jbXAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViLmJzc2lkLAorCQkJICAgYWRkciwgRVRIX0FMRU4pID09IDApIHsKKwkJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSk7CisJCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWIpOworCQkJd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSA9IE5VTEw7CisJCQlkb25lID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJV0FSTl9PTighZG9uZSk7CisKKwl3ZGV2X3VubG9jayh3ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQpOwogCiB2b2lkIGNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcikKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCW5sODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHJkZXYsIGRldiwgYWRkcik7Ci0JY2ZnODAyMTFfd2V4dF9kaXNjb25uZWN0ZWQoZGV2KTsKKwlpbnQgaTsKKwlib29sIGRvbmUgPSBmYWxzZTsKKworCXdkZXZfbG9jayh3ZGV2KTsKKworCW5sODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHJkZXYsIGRldiwgYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORykKKwkJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChkZXYsIGFkZHIsIE5VTEwsIDAsIE5VTEwsIDAsCisJCQkJCSAgV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKKwkJCQkJICBmYWxzZSwgTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBhZGRyICYmIGkgPCBNQVhfQVVUSF9CU1NFUzsgaSsrKSB7CisJCWlmICh3ZGV2LT5hdXRoX2Jzc2VzW2ldICYmCisJCSAgICBtZW1jbXAod2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViLmJzc2lkLAorCQkJICAgYWRkciwgRVRIX0FMRU4pID09IDApIHsKKwkJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+YXV0aF9ic3Nlc1tpXSk7CisJCQljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWIpOworCQkJd2Rldi0+YXV0aF9ic3Nlc1tpXSA9IE5VTEw7CisJCQlkb25lID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJV0FSTl9PTighZG9uZSk7CisKKwl3ZGV2X3VubG9jayh3ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KTsKIAogdm9pZCBjZmc4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLAogCQkJCSAgZW51bSBubDgwMjExX2tleV90eXBlIGtleV90eXBlLCBpbnQga2V5X2lkLAotCQkJCSAgY29uc3QgdTggKnRzYykKKwkJCQkgIGNvbnN0IHU4ICp0c2MsIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOwotCW5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShyZGV2LCBkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYyk7CisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwljaGFyICpidWYgPSBrbWFsbG9jKDEyOCwgZ2ZwKTsKKworCWlmIChidWYpIHsKKwkJc3ByaW50ZihidWYsICJNTE1FLU1JQ0hBRUxNSUNGQUlMVVJFLmluZGljYXRpb24oIgorCQkJImtleWlkPSVkICVzY2FzdCBhZGRyPSVwTSkiLCBrZXlfaWQsCisJCQlrZXlfdHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgPyAiYnJvYWQiIDogInVuaSIsCisJCQlhZGRyKTsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQl3cnF1LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgYnVmKTsKKwkJa2ZyZWUoYnVmKTsKKwl9CisjZW5kaWYKKworCW5sODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShyZGV2LCBkZXYsIGFkZHIsIGtleV90eXBlLCBrZXlfaWQsIHRzYywgZ2ZwKTsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZSk7CisKKy8qIHNvbWUgTUxNRSBoYW5kbGluZyBmb3IgdXNlcnNwYWNlIFNNRSAqLworaW50IF9fY2ZnODAyMTFfbWxtZV9hdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSBlbnVtIG5sODAyMTFfYXV0aF90eXBlIGF1dGhfdHlwZSwKKwkJCSBjb25zdCB1OCAqYnNzaWQsCisJCQkgY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbiwKKwkJCSBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sCisJCQkgY29uc3QgdTggKmtleSwgaW50IGtleV9sZW4sIGludCBrZXlfaWR4KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCByZXE7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCWludCBpLCBlcnIsIHNsb3QgPSAtMSwgbmZyZWUgPSAwOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmIChhdXRoX3R5cGUgPT0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZKQorCQlpZiAoIWtleSB8fCAha2V5X2xlbiB8fCBrZXlfaWR4IDwgMCB8fCBrZXlfaWR4ID4gNCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzICYmCisJICAgIG1lbWNtcChic3NpZCwgd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgRVRIX0FMRU4pID09IDApCisJCXJldHVybiAtRUFMUkVBRFk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKGJzc2lkLCB3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWIuYnNzaWQsCisJCQkJCQlFVEhfQUxFTikgPT0gMCkKKwkJCXJldHVybiAtRUFMUkVBRFk7CisJCWlmICh3ZGV2LT5hdXRoX2Jzc2VzW2ldICYmCisJCSAgICBtZW1jbXAoYnNzaWQsIHdkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yi5ic3NpZCwKKwkJCQkJCUVUSF9BTEVOKSA9PSAwKQorCQkJcmV0dXJuIC1FQUxSRUFEWTsKKwl9CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCisJcmVxLmllID0gaWU7CisJcmVxLmllX2xlbiA9IGllX2xlbjsKKwlyZXEuYXV0aF90eXBlID0gYXV0aF90eXBlOworCXJlcS5ic3MgPSBjZmc4MDIxMV9nZXRfYnNzKCZyZGV2LT53aXBoeSwgY2hhbiwgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAorCQkJCSAgIFdMQU5fQ0FQQUJJTElUWV9FU1MsIFdMQU5fQ0FQQUJJTElUWV9FU1MpOworCXJlcS5rZXkgPSBrZXk7CisJcmVxLmtleV9sZW4gPSBrZXlfbGVuOworCXJlcS5rZXlfaWR4ID0ga2V5X2lkeDsKKwlpZiAoIXJlcS5ic3MpCisJCXJldHVybiAtRU5PRU5UOworCisJYnNzID0gYnNzX2Zyb21fcHViKHJlcS5ic3MpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJaWYgKCF3ZGV2LT5hdXRoX2Jzc2VzW2ldICYmICF3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldKSB7CisJCQlzbG90ID0gaTsKKwkJCW5mcmVlKys7CisJCX0KKwl9CisKKwkvKiB3ZSBuZWVkIG9uZSBmcmVlIHNsb3QgZm9yIGRpc2Fzc29jIGFuZCBvbmUgZm9yIHRoaXMgYXV0aCAqLworCWlmIChuZnJlZSA8IDIpIHsKKwkJZXJyID0gLUVOT1NQQzsKKwkJZ290byBvdXQ7CisJfQorCisJd2Rldi0+YXV0aHRyeV9ic3Nlc1tzbG90XSA9IGJzczsKKwljZmc4MDIxMV9ob2xkX2Jzcyhic3MpOworCisJZXJyID0gcmRldi0+b3BzLT5hdXRoKCZyZGV2LT53aXBoeSwgZGV2LCAmcmVxKTsKKwlpZiAoZXJyKSB7CisJCXdkZXYtPmF1dGh0cnlfYnNzZXNbc2xvdF0gPSBOVUxMOworCQljZmc4MDIxMV91bmhvbGRfYnNzKGJzcyk7CisJfQorCisgb3V0OgorCWlmIChlcnIpCisJCWNmZzgwMjExX3B1dF9ic3MocmVxLmJzcyk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGNmZzgwMjExX21sbWVfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCSAgICAgICBlbnVtIG5sODAyMTFfYXV0aF90eXBlIGF1dGhfdHlwZSwgY29uc3QgdTggKmJzc2lkLAorCQkgICAgICAgY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbiwKKwkJICAgICAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwKKwkJICAgICAgIGNvbnN0IHU4ICprZXksIGludCBrZXlfbGVuLCBpbnQga2V5X2lkeCkKK3sKKwlpbnQgZXJyOworCisJd2Rldl9sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CisJZXJyID0gX19jZmc4MDIxMV9tbG1lX2F1dGgocmRldiwgZGV2LCBjaGFuLCBhdXRoX3R5cGUsIGJzc2lkLAorCQkJCSAgIHNzaWQsIHNzaWRfbGVuLCBpZSwgaWVfbGVuLAorCQkJCSAgIGtleSwga2V5X2xlbiwga2V5X2lkeCk7CisJd2Rldl91bmxvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX2NmZzgwMjExX21sbWVfYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgIGNvbnN0IHU4ICpic3NpZCwgY29uc3QgdTggKnByZXZfYnNzaWQsCisJCQkgIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZF9sZW4sCisJCQkgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgYm9vbCB1c2VfbWZwLAorCQkJICBzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzICpjcnlwdCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisJaW50IGksIGVyciwgc2xvdCA9IC0xOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpCisJCXJldHVybiAtRUFMUkVBRFk7CisKKwlyZXEuaWUgPSBpZTsKKwlyZXEuaWVfbGVuID0gaWVfbGVuOworCW1lbWNweSgmcmVxLmNyeXB0bywgY3J5cHQsIHNpemVvZihyZXEuY3J5cHRvKSk7CisJcmVxLnVzZV9tZnAgPSB1c2VfbWZwOworCXJlcS5wcmV2X2Jzc2lkID0gcHJldl9ic3NpZDsKKwlyZXEuYnNzID0gY2ZnODAyMTFfZ2V0X2JzcygmcmRldi0+d2lwaHksIGNoYW4sIGJzc2lkLCBzc2lkLCBzc2lkX2xlbiwKKwkJCQkgICBXTEFOX0NBUEFCSUxJVFlfRVNTLCBXTEFOX0NBUEFCSUxJVFlfRVNTKTsKKwlpZiAoIXJlcS5ic3MpCisJCXJldHVybiAtRU5PRU5UOworCisJYnNzID0gYnNzX2Zyb21fcHViKHJlcS5ic3MpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJaWYgKGJzcyA9PSB3ZGV2LT5hdXRoX2Jzc2VzW2ldKSB7CisJCQlzbG90ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHNsb3QgPCAwKSB7CisJCWVyciA9IC1FTk9UQ09OTjsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gcmRldi0+b3BzLT5hc3NvYygmcmRldi0+d2lwaHksIGRldiwgJnJlcSk7Cisgb3V0OgorCS8qIHN0aWxsIGEgcmVmZXJlbmNlIGluIHdkZXYtPmF1dGhfYnNzZXNbc2xvdF0gKi8KKwljZmc4MDIxMV9wdXRfYnNzKHJlcS5ic3MpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjZmc4MDIxMV9tbG1lX2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQljb25zdCB1OCAqYnNzaWQsIGNvbnN0IHU4ICpwcmV2X2Jzc2lkLAorCQkJY29uc3QgdTggKnNzaWQsIGludCBzc2lkX2xlbiwKKwkJCWNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgYm9vbCB1c2VfbWZwLAorCQkJc3RydWN0IGNmZzgwMjExX2NyeXB0b19zZXR0aW5ncyAqY3J5cHQpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlpbnQgZXJyOworCisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IF9fY2ZnODAyMTFfbWxtZV9hc3NvYyhyZGV2LCBkZXYsIGNoYW4sIGJzc2lkLCBwcmV2X2Jzc2lkLAorCQkJCSAgICBzc2lkLCBzc2lkX2xlbiwgaWUsIGllX2xlbiwgdXNlX21mcCwgY3J5cHQpOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IF9fY2ZnODAyMTFfbWxtZV9kZWF1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJICAgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0IHJlcTsKKwlpbnQgaTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCXJlcS5yZWFzb25fY29kZSA9IHJlYXNvbjsKKwlyZXEuaWUgPSBpZTsKKwlyZXEuaWVfbGVuID0gaWVfbGVuOworCWlmICh3ZGV2LT5jdXJyZW50X2JzcyAmJgorCSAgICBtZW1jbXAod2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCXJlcS5ic3MgPSAmd2Rldi0+Y3VycmVudF9ic3MtPnB1YjsKKwl9IGVsc2UgZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJaWYgKHdkZXYtPmF1dGhfYnNzZXNbaV0gJiYKKwkJICAgIG1lbWNtcChic3NpZCwgd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQkJcmVxLmJzcyA9ICZ3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWI7CisJCQlicmVhazsKKwkJfQorCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSAmJgorCQkgICAgbWVtY21wKGJzc2lkLCB3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWIuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQlyZXEuYnNzID0gJndkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1YjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFyZXEuYnNzKQorCQlyZXR1cm4gLUVOT1RDT05OOworCisJcmV0dXJuIHJkZXYtPm9wcy0+ZGVhdXRoKCZyZGV2LT53aXBoeSwgZGV2LCAmcmVxLCB3ZGV2KTsKK30KKworaW50IGNmZzgwMjExX21sbWVfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJaW50IGVycjsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwllcnIgPSBfX2NmZzgwMjExX21sbWVfZGVhdXRoKHJkZXYsIGRldiwgYnNzaWQsIGllLCBpZV9sZW4sIHJlYXNvbik7CisJd2Rldl91bmxvY2sod2Rldik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fY2ZnODAyMTFfbWxtZV9kaXNhc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJCQkgICAgY29uc3QgdTggKmllLCBpbnQgaWVfbGVuLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgcmVxOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FTk9UQ09OTjsKKworCWlmIChXQVJOX09OKCF3ZGV2LT5jdXJyZW50X2JzcykpCisJCXJldHVybiAtRU5PVENPTk47CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCXJlcS5yZWFzb25fY29kZSA9IHJlYXNvbjsKKwlyZXEuaWUgPSBpZTsKKwlyZXEuaWVfbGVuID0gaWVfbGVuOworCWlmIChtZW1jbXAod2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXEuYnNzID0gJndkZXYtPmN1cnJlbnRfYnNzLT5wdWI7CisJZWxzZQorCQlyZXR1cm4gLUVOT1RDT05OOworCisJcmV0dXJuIHJkZXYtPm9wcy0+ZGlzYXNzb2MoJnJkZXYtPndpcGh5LCBkZXYsICZyZXEsIHdkZXYpOworfQorCitpbnQgY2ZnODAyMTFfbWxtZV9kaXNhc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICBjb25zdCB1OCAqaWUsIGludCBpZV9sZW4sIHUxNiByZWFzb24pCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlpbnQgZXJyOworCisJd2Rldl9sb2NrKHdkZXYpOworCWVyciA9IF9fY2ZnODAyMTFfbWxtZV9kaXNhc3NvYyhyZGV2LCBkZXYsIGJzc2lkLCBpZSwgaWVfbGVuLCByZWFzb24pOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBjZmc4MDIxMV9tbG1lX2Rvd24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCByZXE7CisJaW50IGk7CisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKCFyZGV2LT5vcHMtPmRlYXV0aCkKKwkJcmV0dXJuOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKwlyZXEucmVhc29uX2NvZGUgPSBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORzsKKwlyZXEuaWUgPSBOVUxMOworCXJlcS5pZV9sZW4gPSAwOworCisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKSB7CisJCXJlcS5ic3MgPSAmd2Rldi0+Y3VycmVudF9ic3MtPnB1YjsKKwkJcmRldi0+b3BzLT5kZWF1dGgoJnJkZXYtPndpcGh5LCBkZXYsICZyZXEsIHdkZXYpOworCQlpZiAod2Rldi0+Y3VycmVudF9ic3MpIHsKKwkJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+Y3VycmVudF9ic3MpOworCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+Y3VycmVudF9ic3MtPnB1Yik7CisJCQl3ZGV2LT5jdXJyZW50X2JzcyA9IE5VTEw7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQlpZiAod2Rldi0+YXV0aF9ic3Nlc1tpXSkgeworCQkJcmVxLmJzcyA9ICZ3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWI7CisJCQlyZGV2LT5vcHMtPmRlYXV0aCgmcmRldi0+d2lwaHksIGRldiwgJnJlcSwgd2Rldik7CisJCQlpZiAod2Rldi0+YXV0aF9ic3Nlc1tpXSkgeworCQkJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+YXV0aF9ic3Nlc1tpXSk7CisJCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViKTsKKwkJCQl3ZGV2LT5hdXRoX2Jzc2VzW2ldID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSkgeworCQkJcmVxLmJzcyA9ICZ3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldLT5wdWI7CisJCQlyZGV2LT5vcHMtPmRlYXV0aCgmcmRldi0+d2lwaHksIGRldiwgJnJlcSwgd2Rldik7CisJCQlpZiAod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSkgeworCQkJCWNmZzgwMjExX3VuaG9sZF9ic3Mod2Rldi0+YXV0aHRyeV9ic3Nlc1tpXSk7CisJCQkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+YXV0aHRyeV9ic3Nlc1tpXS0+cHViKTsKKwkJCQl3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCmluZGV4IDYzNDQ5NmIuLmVkZGFiMDkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwpAQCAtMTQsOCArMTQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJubDgwMjExLmgiCiAjaW5jbHVkZSAicmVnLmgiCkBAIC0yNywyNyArMjksMjkgQEAKIAkuaGRyc2l6ZSA9IDAsCQkvKiBubyBwcml2YXRlIGhlYWRlciAqLwogCS52ZXJzaW9uID0gMSwJCS8qIG5vIHBhcnRpY3VsYXIgbWVhbmluZyBub3cgKi8KIAkubWF4YXR0ciA9IE5MODAyMTFfQVRUUl9NQVgsCisJLm5ldG5zb2sgPSB0cnVlLAogfTsKIAotLyogaW50ZXJuYWwgaGVscGVyOiBnZXQgZHJ2IGFuZCBkZXYgKi8KLXN0YXRpYyBpbnQgZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KHN0cnVjdCBubGF0dHIgKiphdHRycywKLQkJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoqZHJ2LAorLyogaW50ZXJuYWwgaGVscGVyOiBnZXQgcmRldiBhbmQgZGV2ICovCitzdGF0aWMgaW50IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICoqcmRldiwKIAkJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpCiB7CisJc3RydWN0IG5sYXR0ciAqKmF0dHJzID0gaW5mby0+YXR0cnM7CiAJaW50IGlmaW5kZXg7CiAKIAlpZiAoIWF0dHJzW05MODAyMTFfQVRUUl9JRklOREVYXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZmluZGV4ID0gbmxhX2dldF91MzIoYXR0cnNbTkw4MDIxMV9BVFRSX0lGSU5ERVhdKTsKLQkqZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOworCSpkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoaW5mbyksIGlmaW5kZXgpOwogCWlmICghKmRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkqZHJ2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaWZpbmRleCk7Ci0JaWYgKElTX0VSUigqZHJ2KSkgeworCSpyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoZ2VubF9pbmZvX25ldChpbmZvKSwgaWZpbmRleCk7CisJaWYgKElTX0VSUigqcmRldikpIHsKIAkJZGV2X3B1dCgqZGV2KTsKLQkJcmV0dXJuIFBUUl9FUlIoKmRydik7CisJCXJldHVybiBQVFJfRVJSKCpyZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTcxLDcgKzc1LDkgQEAKIAlbTkw4MDIxMV9BVFRSX0lGTkFNRV0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsIC5sZW4gPSBJRk5BTVNJWi0xIH0sCiAKIAlbTkw4MDIxMV9BVFRSX01BQ10gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwgLmxlbiA9IEVUSF9BTEVOIH0sCisJW05MODAyMTFfQVRUUl9QUkVWX0JTU0lEXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLCAubGVuID0gRVRIX0FMRU4gfSwKIAorCVtOTDgwMjExX0FUVFJfS0VZXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVELCB9LAogCVtOTDgwMjExX0FUVFJfS0VZX0RBVEFdID0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJICAgIC5sZW4gPSBXTEFOX01BWF9LRVlfTEVOIH0sCiAJW05MODAyMTFfQVRUUl9LRVlfSURYXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKQEAgLTEyOCw2ICsxMzQsMjEgQEAKIAkJLmxlbiA9IHNpemVvZihzdHJ1Y3Qgbmw4MDIxMV9zdGFfZmxhZ191cGRhdGUpLAogCX0sCiAJW05MODAyMTFfQVRUUl9DT05UUk9MX1BPUlRdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfQVRUUl9QUklWQUNZXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFX0dST1VQXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW05MODAyMTFfQVRUUl9XUEFfVkVSU0lPTlNdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbTkw4MDIxMV9BVFRSX1BJRF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKworLyogcG9saWN5IGZvciB0aGUgYXR0cmlidXRlcyAqLworc3RhdGljIHN0cnVjdCBubGFfcG9saWN5CitubDgwMjExX2tleV9wb2xpY3lbTkw4MDIxMV9LRVlfTUFYICsgMV0gX19yZWFkX21vc3RseSA9IHsKKwlbTkw4MDIxMV9LRVlfREFUQV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwgLmxlbiA9IFdMQU5fTUFYX0tFWV9MRU4gfSwKKwlbTkw4MDIxMV9LRVlfSURYXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbTkw4MDIxMV9LRVlfQ0lQSEVSXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW05MODAyMTFfS0VZX1NFUV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwgLmxlbiA9IDggfSwKKwlbTkw4MDIxMV9LRVlfREVGQVVMVF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKKwlbTkw4MDIxMV9LRVlfREVGQVVMVF9NR01UXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogLyogSUUgdmFsaWRhdGlvbiAqLwpAQCAtMTk0LDYgKzIxNSwxNzcgQEAKIAogLyogbmV0bGluayBjb21tYW5kIGltcGxlbWVudGF0aW9ucyAqLwogCitzdHJ1Y3Qga2V5X3BhcnNlIHsKKwlzdHJ1Y3Qga2V5X3BhcmFtcyBwOworCWludCBpZHg7CisJYm9vbCBkZWYsIGRlZm1nbXQ7Cit9OworCitzdGF0aWMgaW50IG5sODAyMTFfcGFyc2Vfa2V5X25ldyhzdHJ1Y3QgbmxhdHRyICprZXksIHN0cnVjdCBrZXlfcGFyc2UgKmspCit7CisJc3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9LRVlfTUFYICsgMV07CisJaW50IGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIE5MODAyMTFfS0VZX01BWCwga2V5LAorCQkJCSAgIG5sODAyMTFfa2V5X3BvbGljeSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWstPmRlZiA9ICEhdGJbTkw4MDIxMV9LRVlfREVGQVVMVF07CisJay0+ZGVmbWdtdCA9ICEhdGJbTkw4MDIxMV9LRVlfREVGQVVMVF9NR01UXTsKKworCWlmICh0YltOTDgwMjExX0tFWV9JRFhdKQorCQlrLT5pZHggPSBubGFfZ2V0X3U4KHRiW05MODAyMTFfS0VZX0lEWF0pOworCisJaWYgKHRiW05MODAyMTFfS0VZX0RBVEFdKSB7CisJCWstPnAua2V5ID0gbmxhX2RhdGEodGJbTkw4MDIxMV9LRVlfREFUQV0pOworCQlrLT5wLmtleV9sZW4gPSBubGFfbGVuKHRiW05MODAyMTFfS0VZX0RBVEFdKTsKKwl9CisKKwlpZiAodGJbTkw4MDIxMV9LRVlfU0VRXSkgeworCQlrLT5wLnNlcSA9IG5sYV9kYXRhKHRiW05MODAyMTFfS0VZX1NFUV0pOworCQlrLT5wLnNlcV9sZW4gPSBubGFfbGVuKHRiW05MODAyMTFfS0VZX1NFUV0pOworCX0KKworCWlmICh0YltOTDgwMjExX0tFWV9DSVBIRVJdKQorCQlrLT5wLmNpcGhlciA9IG5sYV9nZXRfdTMyKHRiW05MODAyMTFfS0VZX0NJUEhFUl0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9wYXJzZV9rZXlfb2xkKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBrZXlfcGFyc2UgKmspCit7CisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREFUQV0pIHsKKwkJay0+cC5rZXkgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RBVEFdKTsKKwkJay0+cC5rZXlfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RBVEFdKTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9TRVFdKSB7CisJCWstPnAuc2VxID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9TRVFdKTsKKwkJay0+cC5zZXFfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX1NFUV0pOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCisJCWstPmlkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0NJUEhFUl0pCisJCWstPnAuY2lwaGVyID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9DSVBIRVJdKTsKKworCWstPmRlZiA9ICEhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXTsKKwlrLT5kZWZtZ210ID0gISFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBubDgwMjExX3BhcnNlX2tleShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLCBzdHJ1Y3Qga2V5X3BhcnNlICprKQoreworCWludCBlcnI7CisKKwltZW1zZXQoaywgMCwgc2l6ZW9mKCprKSk7CisJay0+aWR4ID0gLTE7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV0pCisJCWVyciA9IG5sODAyMTFfcGFyc2Vfa2V5X25ldyhpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZXSwgayk7CisJZWxzZQorCQllcnIgPSBubDgwMjExX3BhcnNlX2tleV9vbGQoaW5mbywgayk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGstPmRlZiAmJiBrLT5kZWZtZ210KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChrLT5pZHggIT0gLTEpIHsKKwkJaWYgKGstPmRlZm1nbXQpIHsKKwkJCWlmIChrLT5pZHggPCA0IHx8IGstPmlkeCA+IDUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSBpZiAoay0+ZGVmKSB7CisJCQlpZiAoay0+aWR4IDwgMCB8fCBrLT5pZHggPiAzKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJaWYgKGstPmlkeCA8IDAgfHwgay0+aWR4ID4gNSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICoKK25sODAyMTFfcGFyc2VfY29ubmtleXMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkgICAgICAgc3RydWN0IG5sYXR0ciAqa2V5cykKK3sKKwlzdHJ1Y3Qga2V5X3BhcnNlIHBhcnNlOworCXN0cnVjdCBubGF0dHIgKmtleTsKKwlzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKnJlc3VsdDsKKwlpbnQgcmVtLCBlcnIsIGRlZiA9IDA7CisKKwlyZXN1bHQgPSBremFsbG9jKHNpemVvZigqcmVzdWx0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXN1bHQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmVzdWx0LT5kZWYgPSAtMTsKKwlyZXN1bHQtPmRlZm1nbXQgPSAtMTsKKworCW5sYV9mb3JfZWFjaF9uZXN0ZWQoa2V5LCBrZXlzLCByZW0pIHsKKwkJbWVtc2V0KCZwYXJzZSwgMCwgc2l6ZW9mKHBhcnNlKSk7CisJCXBhcnNlLmlkeCA9IC0xOworCisJCWVyciA9IG5sODAyMTFfcGFyc2Vfa2V5X25ldyhrZXksICZwYXJzZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yOworCQllcnIgPSAtRUlOVkFMOworCQlpZiAoIXBhcnNlLnAua2V5KQorCQkJZ290byBlcnJvcjsKKwkJaWYgKHBhcnNlLmlkeCA8IDAgfHwgcGFyc2UuaWR4ID4gNCkKKwkJCWdvdG8gZXJyb3I7CisJCWlmIChwYXJzZS5kZWYpIHsKKwkJCWlmIChkZWYpCisJCQkJZ290byBlcnJvcjsKKwkJCWRlZiA9IDE7CisJCQlyZXN1bHQtPmRlZiA9IHBhcnNlLmlkeDsKKwkJfSBlbHNlIGlmIChwYXJzZS5kZWZtZ210KQorCQkJZ290byBlcnJvcjsKKwkJZXJyID0gY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHJkZXYsICZwYXJzZS5wLAorCQkJCQkJICAgICBwYXJzZS5pZHgsIE5VTEwpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwkJcmVzdWx0LT5wYXJhbXNbcGFyc2UuaWR4XS5jaXBoZXIgPSBwYXJzZS5wLmNpcGhlcjsKKwkJcmVzdWx0LT5wYXJhbXNbcGFyc2UuaWR4XS5rZXlfbGVuID0gcGFyc2UucC5rZXlfbGVuOworCQlyZXN1bHQtPnBhcmFtc1twYXJzZS5pZHhdLmtleSA9IHJlc3VsdC0+ZGF0YVtwYXJzZS5pZHhdOworCQltZW1jcHkocmVzdWx0LT5kYXRhW3BhcnNlLmlkeF0sIHBhcnNlLnAua2V5LCBwYXJzZS5wLmtleV9sZW4pOworCX0KKworCXJldHVybiByZXN1bHQ7CisgZXJyb3I6CisJa2ZyZWUocmVzdWx0KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfa2V5X2FsbG93ZWQoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKK3sKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHdkZXYtPm5ldGRldikpCisJCXJldHVybiAtRU5FVERPV047CisKKwlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOOgorCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoIXdkZXYtPmN1cnJlbnRfYnNzKQorCQkJcmV0dXJuIC1FTk9MSU5LOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCkKKwkJCXJldHVybiAtRU5PTElOSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3dpcGh5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKIAkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2KQogewpAQCAtMjE2LDYgKzQwOCw5IEBACiAJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+d2lwaHlfaWR4KTsKIAlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLCB3aXBoeV9uYW1lKCZkZXYtPndpcGh5KSk7CiAKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OLAorCQkgICAgY2ZnODAyMTFfcmRldl9saXN0X2dlbmVyYXRpb24pOworCiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9TSE9SVCwKIAkJICAgZGV2LT53aXBoeS5yZXRyeV9zaG9ydCk7CiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9MT05HLApAQCAtMzQ1LDggKzU0MCwyMyBAQAogCUNNRChkZWF1dGgsIERFQVVUSEVOVElDQVRFKTsKIAlDTUQoZGlzYXNzb2MsIERJU0FTU09DSUFURSk7CiAJQ01EKGpvaW5faWJzcywgSk9JTl9JQlNTKTsKKwlpZiAoZGV2LT53aXBoeS5uZXRuc29rKSB7CisJCWkrKzsKKwkJTkxBX1BVVF9VMzIobXNnLCBpLCBOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlMpOworCX0KIAogI3VuZGVmIENNRAorCisJaWYgKGRldi0+b3BzLT5jb25uZWN0IHx8IGRldi0+b3BzLT5hdXRoKSB7CisJCWkrKzsKKwkJTkxBX1BVVF9VMzIobXNnLCBpLCBOTDgwMjExX0NNRF9DT05ORUNUKTsKKwl9CisKKwlpZiAoZGV2LT5vcHMtPmRpc2Nvbm5lY3QgfHwgZGV2LT5vcHMtPmRlYXV0aCkgeworCQlpKys7CisJCU5MQV9QVVRfVTMyKG1zZywgaSwgTkw4MDIxMV9DTURfRElTQ09OTkVDVCk7CisJfQorCiAJbmxhX25lc3RfZW5kKG1zZywgbmxfY21kcyk7CiAKIAlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOwpAQCAtMzYzLDcgKzU3Myw5IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CiAKIAltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCWlmICghbmV0X2VxKHdpcGh5X25ldCgmZGV2LT53aXBoeSksIHNvY2tfbmV0KHNrYi0+c2spKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAoKytpZHggPD0gc3RhcnQpCiAJCQljb250aW51ZTsKIAkJaWYgKG5sODAyMTFfc2VuZF93aXBoeShza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLApAQCAtMzk2LDE0ICs2MDgsMTQgQEAKIAlpZiAobmw4MDIxMV9zZW5kX3dpcGh5KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwgZGV2KSA8IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQljZmc4MDIxMV9wdXRfZGV2KGRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYoZGV2KTsKIAotCXJldHVybiBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogCiAgb3V0X2ZyZWU6CiAJbmxtc2dfZnJlZShtc2cpOwogIG91dF9lcnI6Ci0JY2ZnODAyMTFfcHV0X2RldihkZXYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KGRldik7CiAJcmV0dXJuIC1FTk9CVUZTOwogfQogCkBAIC00NDUsNyArNjU3LDcgQEAKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAotCXJkZXYgPSBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oaW5mbyk7CisJcmRldiA9IF9fY2ZnODAyMTFfcmRldl9mcm9tX2luZm8oaW5mbyk7CiAJaWYgKElTX0VSUihyZGV2KSkgewogCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJcmVzdWx0ID0gUFRSX0VSUihyZGV2KTsKQEAgLTQ5MiwxNSArNzA0LDggQEAKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pIHsKIAkJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7Ci0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKLQkJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXA7CiAJCXUzMiBmcmVxOwogCi0JCWlmICghcmRldi0+b3BzLT5zZXRfY2hhbm5lbCkgewotCQkJcmVzdWx0ID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIGJhZF9yZXM7Ci0JCX0KLQogCQlyZXN1bHQgPSAtRUlOVkFMOwogCiAJCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFXSkgewpAQCAtNTE0LDM4ICs3MTksMTAgQEAKIAkJfQogCiAJCWZyZXEgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pOwotCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgZnJlcSk7CiAKLQkJLyogUHJpbWFyeSBjaGFubmVsIG5vdCBhbGxvd2VkICovCi0JCWlmICghY2hhbiB8fCBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQotCQkJZ290byBiYWRfcmVzOwotCi0JCWlmIChjaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyAmJgotCQkgICAgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTKSkKLQkJCWdvdG8gYmFkX3JlczsKLQkJZWxzZSBpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUyAmJgotCQkJIChjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKSkKLQkJCWdvdG8gYmFkX3JlczsKLQotCQkvKgotCQkgKiBBdCB0aGlzIHBvaW50IHdlIGtub3cgaWYgdGhhdCBpZiBIVDQwIHdhcyByZXF1ZXN0ZWQKLQkJICogd2UgYXJlIGFsbG93ZWQgdG8gdXNlIGl0IGFuZCB0aGUgZXh0ZW5zaW9uIGNoYW5uZWwKLQkJICogZXhpc3RzLgotCQkgKi8KLQotCQlodF9jYXAgPSAmcmRldi0+d2lwaHkuYmFuZHNbY2hhbi0+YmFuZF0tPmh0X2NhcDsKLQotCQkvKiBubyBIVCBjYXBhYmlsaXRpZXMgb3IgaW50b2xlcmFudCAqLwotCQlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCkgewotCQkJaWYgKCFodF9jYXAtPmh0X3N1cHBvcnRlZCkKLQkJCQlnb3RvIGJhZF9yZXM7Ci0JCQlpZiAoIShodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB8fAotCQkJICAgIChodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfNDBNSFpfSU5UT0xFUkFOVCkpCi0JCQkJZ290byBiYWRfcmVzOwotCQl9Ci0KLQkJcmVzdWx0ID0gcmRldi0+b3BzLT5zZXRfY2hhbm5lbCgmcmRldi0+d2lwaHksIGNoYW4sCi0JCQkJCQljaGFubmVsX3R5cGUpOworCQltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCXJlc3VsdCA9IHJkZXZfc2V0X2ZyZXEocmRldiwgTlVMTCwgZnJlcSwgY2hhbm5lbF90eXBlKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJCWlmIChyZXN1bHQpCiAJCQlnb3RvIGJhZF9yZXM7CiAJfQpAQCAtNjUxLDYgKzgyOCwxMSBAQAogCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOwogCU5MQV9QVVRfU1RSSU5HKG1zZywgTkw4MDIxMV9BVFRSX0lGTkFNRSwgZGV2LT5uYW1lKTsKIAlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRlRZUEUsIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlKTsKKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04sCisJCSAgICByZGV2LT5kZXZsaXN0X2dlbmVyYXRpb24gXgorCQkJKGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uIDw8IDIpKTsKKwogCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CiAKICBubGFfcHV0X2ZhaWx1cmU6CkBAIC02NjQsMzIgKzg0NiwzNCBAQAogCWludCBpZl9pZHggPSAwOwogCWludCB3cF9zdGFydCA9IGNiLT5hcmdzWzBdOwogCWludCBpZl9zdGFydCA9IGNiLT5hcmdzWzFdOwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwogCiAJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFuZXRfZXEod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIHNvY2tfbmV0KHNrYi0+c2spKSkKKwkJCWNvbnRpbnVlOwogCQlpZiAod3BfaWR4IDwgd3Bfc3RhcnQpIHsKIAkJCXdwX2lkeCsrOwogCQkJY29udGludWU7CiAJCX0KIAkJaWZfaWR4ID0gMDsKIAotCQltdXRleF9sb2NrKCZkZXYtPmRldmxpc3RfbXR4KTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkgeworCQltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJnJkZXYtPm5ldGRldl9saXN0LCBsaXN0KSB7CiAJCQlpZiAoaWZfaWR4IDwgaWZfc3RhcnQpIHsKIAkJCQlpZl9pZHgrKzsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWlmIChubDgwMjExX3NlbmRfaWZhY2Uoc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJICAgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksCi0JCQkJCSAgICAgICBkZXYsIHdkZXYtPm5ldGRldikgPCAwKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmRldmxpc3RfbXR4KTsKKwkJCQkJICAgICAgIHJkZXYsIHdkZXYtPm5ldGRldikgPCAwKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQlpZl9pZHgrKzsKIAkJfQotCQltdXRleF91bmxvY2soJmRldi0+ZGV2bGlzdF9tdHgpOworCQltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKIAogCQl3cF9pZHgrKzsKIAl9CkBAIC03MDksNyArODkzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCWludCBlcnI7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkZXYsICZuZXRkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJmRldiwgJm5ldGRldik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNzIyLDE1ICs5MDYsMTUgQEAKIAkJZ290byBvdXRfZnJlZTsKIAogCWRldl9wdXQobmV0ZGV2KTsKLQljZmc4MDIxMV9wdXRfZGV2KGRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYoZGV2KTsKIAotCXJldHVybiBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogCiAgb3V0X2ZyZWU6CiAJbmxtc2dfZnJlZShtc2cpOwogIG91dF9lcnI6CiAJZGV2X3B1dChuZXRkZXYpOwotCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihkZXYpOwogCXJldHVybiAtRU5PQlVGUzsKIH0KIApAQCAtNzY1LDkgKzk0OSw5IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfaW50ZXJmYWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCB2aWZfcGFyYW1zIHBhcmFtczsKLQlpbnQgZXJyLCBpZmluZGV4OworCWludCBlcnI7CiAJZW51bSBubDgwMjExX2lmdHlwZSBvdHlwZSwgbnR5cGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1MzIgX2ZsYWdzLCAqZmxhZ3MgPSBOVUxMOwpAQCAtNzc3LDEzICs5NjEsMTEgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWZpbmRleCA9IGRldi0+aWZpbmRleDsKIAlvdHlwZSA9IG50eXBlID0gZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGU7Ci0JZGV2X3B1dChkZXYpOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRlRZUEVdKSB7CiAJCW50eXBlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGVFlQRV0pOwpAQCAtNzk1LDEyICs5NzcsNiBAQAogCQl9CiAJfQogCi0JaWYgKCFkcnYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZiB8fAotCSAgICAhKGRydi0+d2lwaHkuaW50ZXJmYWNlX21vZGVzICYgKDEgPDwgbnR5cGUpKSkgewotCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJZ290byB1bmxvY2s7Ci0JfQotCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSkgewogCQlpZiAobnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgewogCQkJZXJyID0gLUVJTlZBTDsKQEAgLTgyNiwyMSArMTAwMiwxMyBAQAogCX0KIAogCWlmIChjaGFuZ2UpCi0JCWVyciA9IGRydi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmKCZkcnYtPndpcGh5LCBpZmluZGV4LAotCQkJCQkJICAgIG50eXBlLCBmbGFncywgJnBhcmFtcyk7CisJCWVyciA9IGNmZzgwMjExX2NoYW5nZV9pZmFjZShyZGV2LCBkZXYsIG50eXBlLCBmbGFncywgJnBhcmFtcyk7CiAJZWxzZQogCQllcnIgPSAwOwogCi0JZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7Ci0JV0FSTl9PTighZGV2IHx8ICghZXJyICYmIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IG50eXBlKSk7Ci0KLQlpZiAoZGV2ICYmICFlcnIgJiYgKG50eXBlICE9IG90eXBlKSkgewotCQlpZiAob3R5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQljZmc4MDIxMV9jbGVhcl9pYnNzKGRldiwgZmFsc2UpOwotCX0KLQogIHVubG9jazoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKQEAgLTg0OCw3ICsxMDE2LDcgQEAKIAogc3RhdGljIGludCBubDgwMjExX25ld19pbnRlcmZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IHZpZl9wYXJhbXMgcGFyYW1zOwogCWludCBlcnI7CiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CkBAIC04NjcsMTQgKzEwMzUsMTQgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZHJ2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7Ci0JaWYgKElTX0VSUihkcnYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZHJ2KTsKKwlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKHJkZXYpOwogCQlnb3RvIHVubG9ja19ydG5sOwogCX0KIAotCWlmICghZHJ2LT5vcHMtPmFkZF92aXJ0dWFsX2ludGYgfHwKLQkgICAgIShkcnYtPndpcGh5LmludGVyZmFjZV9tb2RlcyAmICgxIDw8IHR5cGUpKSkgeworCWlmICghcmRldi0+b3BzLT5hZGRfdmlydHVhbF9pbnRmIHx8CisJICAgICEocmRldi0+d2lwaHkuaW50ZXJmYWNlX21vZGVzICYgKDEgPDwgdHlwZSkpKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIHVubG9jazsKIAl9CkBAIC04ODgsMTIgKzEwNTYsMTIgQEAKIAllcnIgPSBwYXJzZV9tb25pdG9yX2ZsYWdzKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiA/CiAJCQkJICBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTU5UUl9GTEFHU10gOiBOVUxMLAogCQkJCSAgJmZsYWdzKTsKLQllcnIgPSBkcnYtPm9wcy0+YWRkX3ZpcnR1YWxfaW50ZigmZHJ2LT53aXBoeSwKKwllcnIgPSByZGV2LT5vcHMtPmFkZF92aXJ0dWFsX2ludGYoJnJkZXYtPndpcGh5LAogCQlubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZOQU1FXSksCiAJCXR5cGUsIGVyciA/IE5VTEwgOiAmZmxhZ3MsICZwYXJhbXMpOwogCiAgdW5sb2NrOgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKICB1bmxvY2tfcnRubDoKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CkBAIC05MDEsMjcgKzEwNjksMjYgQEAKIAogc3RhdGljIGludCBubDgwMjExX2RlbF9pbnRlcmZhY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKLQlpbnQgaWZpbmRleCwgZXJyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKLQlpZmluZGV4ID0gZGV2LT5pZmluZGV4OwotCWRldl9wdXQoZGV2KTsKIAotCWlmICghZHJ2LT5vcHMtPmRlbF92aXJ0dWFsX2ludGYpIHsKKwlpZiAoIXJkZXYtPm9wcy0+ZGVsX3ZpcnR1YWxfaW50ZikgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmRlbF92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksIGlmaW5kZXgpOworCWVyciA9IHJkZXYtPm9wcy0+ZGVsX3ZpcnR1YWxfaW50ZigmcmRldi0+d2lwaHksIGRldik7CiAKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKICB1bmxvY2tfcnRubDoKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CkBAIC05MzAsMTAgKzEwOTcsMTIgQEAKIHN0cnVjdCBnZXRfa2V5X2Nvb2tpZSB7CiAJc3RydWN0IHNrX2J1ZmYgKm1zZzsKIAlpbnQgZXJyb3I7CisJaW50IGlkeDsKIH07CiAKIHN0YXRpYyB2b2lkIGdldF9rZXlfY2FsbGJhY2sodm9pZCAqYywgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKIHsKKwlzdHJ1Y3QgbmxhdHRyICprZXk7CiAJc3RydWN0IGdldF9rZXlfY29va2llICpjb29raWUgPSBjOwogCiAJaWYgKHBhcmFtcy0+a2V5KQpAQCAtOTQ4LDYgKzExMTcsMjYgQEAKIAkJTkxBX1BVVF9VMzIoY29va2llLT5tc2csIE5MODAyMTFfQVRUUl9LRVlfQ0lQSEVSLAogCQkJICAgIHBhcmFtcy0+Y2lwaGVyKTsKIAorCWtleSA9IG5sYV9uZXN0X3N0YXJ0KGNvb2tpZS0+bXNnLCBOTDgwMjExX0FUVFJfS0VZKTsKKwlpZiAoIWtleSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlpZiAocGFyYW1zLT5rZXkpCisJCU5MQV9QVVQoY29va2llLT5tc2csIE5MODAyMTFfS0VZX0RBVEEsCisJCQlwYXJhbXMtPmtleV9sZW4sIHBhcmFtcy0+a2V5KTsKKworCWlmIChwYXJhbXMtPnNlcSkKKwkJTkxBX1BVVChjb29raWUtPm1zZywgTkw4MDIxMV9LRVlfU0VRLAorCQkJcGFyYW1zLT5zZXFfbGVuLCBwYXJhbXMtPnNlcSk7CisKKwlpZiAocGFyYW1zLT5jaXBoZXIpCisJCU5MQV9QVVRfVTMyKGNvb2tpZS0+bXNnLCBOTDgwMjExX0tFWV9DSVBIRVIsCisJCQkgICAgcGFyYW1zLT5jaXBoZXIpOworCisJTkxBX1BVVF9VOChjb29raWUtPm1zZywgTkw4MDIxMV9BVFRSX0tFWV9JRFgsIGNvb2tpZS0+aWR4KTsKKworCW5sYV9uZXN0X2VuZChjb29raWUtPm1zZywga2V5KTsKKwogCXJldHVybjsKICBubGFfcHV0X2ZhaWx1cmU6CiAJY29va2llLT5lcnJvciA9IDE7CkBAIC05NTUsNyArMTE0NCw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1OCBrZXlfaWR4ID0gMDsKQEAgLTk3NywxMSArMTE2NiwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5nZXRfa2V5KSB7CisJaWYgKCFyZGV2LT5vcHMtPmdldF9rZXkpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwMDEsMTMgKzExOTAsMTQgQEAKIAl9CiAKIAljb29raWUubXNnID0gbXNnOworCWNvb2tpZS5pZHggPSBrZXlfaWR4OwogCiAJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgZGV2LT5pZmluZGV4KTsKIAlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX0tFWV9JRFgsIGtleV9pZHgpOwogCWlmIChtYWNfYWRkcikKIAkJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNfYWRkcik7CiAKLQllcnIgPSBkcnYtPm9wcy0+Z2V0X2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkciwKKwllcnIgPSByZGV2LT5vcHMtPmdldF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGtleV9pZHgsIG1hY19hZGRyLAogCQkJCSZjb29raWUsIGdldF9rZXlfY2FsbGJhY2spOwogCiAJaWYgKGVycikKQEAgLTEwMTcsNyArMTIwNyw3IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwotCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIAlnb3RvIG91dDsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTEwMjUsNyArMTIxNSw3IEBACiAgZnJlZV9tc2c6CiAJbmxtc2dfZnJlZShtc2cpOwogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xMDM1LDU3ICsxMjI1LDU3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCBrZXlfcGFyc2Uga2V5OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl1OCBrZXlfaWR4OwogCWludCAoKmZ1bmMpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCSAgICB1OCBrZXlfaW5kZXgpOwogCi0JaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCisJZXJyID0gbmw4MDIxMV9wYXJzZV9rZXkoaW5mbywgJmtleSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChrZXkuaWR4IDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlrZXlfaWR4ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pOwotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF9NR01UXSkgewotCQlpZiAoa2V5X2lkeCA8IDQgfHwga2V5X2lkeCA+IDUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9IGVsc2UgaWYgKGtleV9pZHggPiAzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgc2V0dGluZyBkZWZhdWx0IGtleSAqLwotCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSAmJgotCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVRdKQorCS8qIG9ubHkgc3VwcG9ydCBzZXR0aW5nIGRlZmF1bHQga2V5ICovCisJaWYgKCFrZXkuZGVmICYmICFrZXkuZGVmbWdtdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRdKQotCQlmdW5jID0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleTsKKwlpZiAoa2V5LmRlZikKKwkJZnVuYyA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5OwogCWVsc2UKLQkJZnVuYyA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9tZ210X2tleTsKKwkJZnVuYyA9IHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXk7CiAKIAlpZiAoIWZ1bmMpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGZ1bmMoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCk7CisJd2Rldl9sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CisJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZChkZXYtPmllZWU4MDIxMV9wdHIpOworCWlmICghZXJyKQorCQllcnIgPSBmdW5jKCZyZGV2LT53aXBoeSwgZGV2LCBrZXkuaWR4KTsKKwogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIAlpZiAoIWVycikgewotCQlpZiAoZnVuYyA9PSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KQotCQkJZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfa2V5ID0ga2V5X2lkeDsKKwkJaWYgKGZ1bmMgPT0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkpCisJCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9rZXkgPSBrZXkuaWR4OwogCQllbHNlCi0JCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9tZ210X2tleSA9IGtleV9pZHg7CisJCQlkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9tZ210X2tleSA9IGtleS5pZHg7CiAJfQogI2VuZGlmCisJd2Rldl91bmxvY2soZGV2LT5pZWVlODAyMTFfcHRyKTsKIAogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogCiAgdW5sb2NrX3J0bmw6CkBAIC0xMDk2LDYyICsxMjg2LDQ3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfa2V5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JaW50IGVyciwgaTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBrZXlfcGFyYW1zIHBhcmFtczsKLQl1OCBrZXlfaWR4ID0gMDsKKwlzdHJ1Y3Qga2V5X3BhcnNlIGtleTsKIAl1OCAqbWFjX2FkZHIgPSBOVUxMOwogCi0JbWVtc2V0KCZwYXJhbXMsIDAsIHNpemVvZihwYXJhbXMpKTsKKwllcnIgPSBubDgwMjExX3BhcnNlX2tleShpbmZvLCAma2V5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0NJUEhFUl0pCisJaWYgKCFrZXkucC5rZXkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREFUQV0pIHsKLQkJcGFyYW1zLmtleSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREFUQV0pOwotCQlwYXJhbXMua2V5X2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9EQVRBXSk7Ci0JfQotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfU0VRXSkgewotCQlwYXJhbXMuc2VxID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9TRVFdKTsKLQkJcGFyYW1zLnNlcV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfU0VRXSk7Ci0JfQotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSkKLQkJa2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKLQotCXBhcmFtcy5jaXBoZXIgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0NJUEhFUl0pOwotCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQltYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAotCWlmIChjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MoJnBhcmFtcywga2V5X2lkeCwgbWFjX2FkZHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JZm9yIChpID0gMDsgaSA8IGRydi0+d2lwaHkubl9jaXBoZXJfc3VpdGVzOyBpKyspCi0JCWlmIChwYXJhbXMuY2lwaGVyID09IGRydi0+d2lwaHkuY2lwaGVyX3N1aXRlc1tpXSkKLQkJCWJyZWFrOwotCWlmIChpID09IGRydi0+d2lwaHkubl9jaXBoZXJfc3VpdGVzKSB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghZHJ2LT5vcHMtPmFkZF9rZXkpIHsKKwlpZiAoIXJkZXYtPm9wcy0+YWRkX2tleSkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmFkZF9rZXkoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCwgbWFjX2FkZHIsICZwYXJhbXMpOworCWlmIChjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocmRldiwgJmtleS5wLCBrZXkuaWR4LCBtYWNfYWRkcikpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJd2Rldl9sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CisJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZChkZXYtPmllZWU4MDIxMV9wdHIpOworCWlmICghZXJyKQorCQllcnIgPSByZGV2LT5vcHMtPmFkZF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGtleS5pZHgsCisJCQkJCSBtYWNfYWRkciwgJmtleS5wKTsKKwl3ZGV2X3VubG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTExNjEsNDUgKzEzMzYsNDcgQEAKIAogc3RhdGljIGludCBubDgwMjExX2RlbF9rZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXU4IGtleV9pZHggPSAwOwogCXU4ICptYWNfYWRkciA9IE5VTEw7CisJc3RydWN0IGtleV9wYXJzZSBrZXk7CiAKLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKQotCQlrZXlfaWR4ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pOwotCi0JaWYgKGtleV9pZHggPiA1KQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSBubDgwMjExX3BhcnNlX2tleShpbmZvLCAma2V5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKQogCQltYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+ZGVsX2tleSkgeworCWlmICghcmRldi0+b3BzLT5kZWxfa2V5KSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+ZGVsX2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4LCBtYWNfYWRkcik7CisJd2Rldl9sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CisJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZChkZXYtPmllZWU4MDIxMV9wdHIpOworCWlmICghZXJyKQorCQllcnIgPSByZGV2LT5vcHMtPmRlbF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGtleS5pZHgsIG1hY19hZGRyKTsKIAogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIAlpZiAoIWVycikgewotCQlpZiAoa2V5X2lkeCA9PSBkZXYtPmllZWU4MDIxMV9wdHItPndleHQuZGVmYXVsdF9rZXkpCisJCWlmIChrZXkuaWR4ID09IGRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X2tleSkKIAkJCWRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X2tleSA9IC0xOwotCQllbHNlIGlmIChrZXlfaWR4ID09IGRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X21nbXRfa2V5KQorCQllbHNlIGlmIChrZXkuaWR4ID09IGRldi0+aWVlZTgwMjExX3B0ci0+d2V4dC5kZWZhdWx0X21nbXRfa2V5KQogCQkJZGV2LT5pZWVlODAyMTFfcHRyLT53ZXh0LmRlZmF1bHRfbWdtdF9rZXkgPSAtMTsKIAl9CiAjZW5kaWYKKwl3ZGV2X3VubG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAKICB1bmxvY2tfcnRubDoKQEAgLTEyMTIsNyArMTM4OSw3IEBACiB7CiAgICAgICAgIGludCAoKmNhbGwpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3QgYmVhY29uX3BhcmFtZXRlcnMgKmluZm8pOwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGJlYWNvbl9wYXJhbWV0ZXJzIHBhcmFtczsKQEAgLTEyMjMsNyArMTQwMCw3IEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIApAQCAtMTI0MiwxMCArMTQxOSwxMCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQljYWxsID0gZHJ2LT5vcHMtPmFkZF9iZWFjb247CisJCWNhbGwgPSByZGV2LT5vcHMtPmFkZF9iZWFjb247CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9DTURfU0VUX0JFQUNPTjoKLQkJY2FsbCA9IGRydi0+b3BzLT5zZXRfYmVhY29uOworCQljYWxsID0gcmRldi0+b3BzLT5zZXRfYmVhY29uOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwpAQCAtMTI5MSwxMCArMTQ2OCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBjYWxsKCZkcnYtPndpcGh5LCBkZXYsICZwYXJhbXMpOworCWVyciA9IGNhbGwoJnJkZXYtPndpcGh5LCBkZXYsICZwYXJhbXMpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTEzMDQsMTcgKzE0ODEsMTcgQEAKIAogc3RhdGljIGludCBubDgwMjExX2RlbF9iZWFjb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5kZWxfYmVhY29uKSB7CisJaWYgKCFyZGV2LT5vcHMtPmRlbF9iZWFjb24pIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEzMjMsMTAgKzE1MDAsMTAgQEAKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KLQllcnIgPSBkcnYtPm9wcy0+ZGVsX2JlYWNvbigmZHJ2LT53aXBoeSwgZGV2KTsKKwllcnIgPSByZGV2LT5vcHMtPmRlbF9iZWFjb24oJnJkZXYtPndpcGh5LCBkZXYpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTE0MzMsNiArMTYxMCw4IEBACiAJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgZGV2LT5pZmluZGV4KTsKIAlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX01BQywgRVRIX0FMRU4sIG1hY19hZGRyKTsKIAorCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0dFTkVSQVRJT04sIHNpbmZvLT5nZW5lcmF0aW9uKTsKKwogCXNpbmZvYXR0ciA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NUQV9JTkZPKTsKIAlpZiAoIXNpbmZvYXR0cikKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC0xNTIwLDEzICsxNjk5LDEzIEBACiAKIAlydG5sX2xvY2soKTsKIAotCW5ldGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKKwluZXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2tiLT5zayksIGlmaWR4KTsKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9ydG5sOwogCX0KIAotCWRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGlmaWR4KTsKKwlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChzb2NrX25ldChza2ItPnNrKSwgaWZpZHgpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCWdvdG8gb3V0X3J0bmw7CkBAIC0xNTYwLDcgKzE3MzksNyBAQAogCWNiLT5hcmdzWzFdID0gc3RhX2lkeDsKIAllcnIgPSBza2ItPmxlbjsKICBvdXRfZXJyOgotCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CiAKQEAgLTE1NjksNyArMTc0OCw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHN0YXRpb25faW5mbyBzaW5mbzsKQEAgLTE1ODUsMTYgKzE3NjQsMTYgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+Z2V0X3N0YXRpb24pIHsKKwlpZiAoIXJkZXYtPm9wcy0+Z2V0X3N0YXRpb24pIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5nZXRfc3RhdGlvbigmZHJ2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnNpbmZvKTsKKwllcnIgPSByZGV2LT5vcHMtPmdldF9zdGF0aW9uKCZyZGV2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnNpbmZvKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMTYwNiwxMyArMTc4NSwxMyBAQAogCQkJCSBkZXYsIG1hY19hZGRyLCAmc2luZm8pIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKIAotCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIAlnb3RvIG91dDsKIAogIG91dF9mcmVlOgogCW5sbXNnX2ZyZWUobXNnKTsKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMTYyMywxNCArMTgwMiwxNiBAQAogLyoKICAqIEdldCB2bGFuIGludGVyZmFjZSBtYWtpbmcgc3VyZSBpdCBpcyBvbiB0aGUgcmlnaHQgd2lwaHkuCiAgKi8KLXN0YXRpYyBpbnQgZ2V0X3ZsYW4oc3RydWN0IG5sYXR0ciAqdmxhbmF0dHIsCitzdGF0aWMgaW50IGdldF92bGFuKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCiAJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKnZsYW4pCiB7CisJc3RydWN0IG5sYXR0ciAqdmxhbmF0dHIgPSBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1ZMQU5dOwogCSp2bGFuID0gTlVMTDsKIAogCWlmICh2bGFuYXR0cikgewotCQkqdmxhbiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBubGFfZ2V0X3UzMih2bGFuYXR0cikpOworCQkqdmxhbiA9IGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChpbmZvKSwKKwkJCQkJIG5sYV9nZXRfdTMyKHZsYW5hdHRyKSk7CiAJCWlmICghKnZsYW4pCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJaWYgKCEoKnZsYW4pLT5pZWVlODAyMTFfcHRyKQpAQCAtMTY0Myw3ICsxODI0LDcgQEAKIAogc3RhdGljIGludCBubDgwMjExX3NldF9zdGF0aW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzIHBhcmFtczsKQEAgLTE2ODUsMTEgKzE4NjYsMTEgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0JZXJyID0gZ2V0X3ZsYW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXSwgZHJ2LCAmcGFyYW1zLnZsYW4pOworCWVyciA9IGdldF92bGFuKGluZm8sIHJkZXYsICZwYXJhbXMudmxhbik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTE3MzgsMTcgKzE5MTksMTcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWlmICghZHJ2LT5vcHMtPmNoYW5nZV9zdGF0aW9uKSB7CisJaWYgKCFyZGV2LT5vcHMtPmNoYW5nZV9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+Y2hhbmdlX3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZwYXJhbXMpOworCWVyciA9IHJkZXYtPm9wcy0+Y2hhbmdlX3N0YXRpb24oJnJkZXYtPndpcGh5LCBkZXYsIG1hY19hZGRyLCAmcGFyYW1zKTsKIAogIG91dDoKIAlpZiAocGFyYW1zLnZsYW4pCiAJCWRldl9wdXQocGFyYW1zLnZsYW4pOwotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTE3NTgsNyArMTkzOSw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyBwYXJhbXM7CkBAIC0xNzk4LDExICsxOTc5LDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAotCWVyciA9IGdldF92bGFuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl0sIGRydiwgJnBhcmFtcy52bGFuKTsKKwllcnIgPSBnZXRfdmxhbihpbmZvLCByZGV2LCAmcGFyYW1zLnZsYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xODM4LDcgKzIwMTksNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFkcnYtPm9wcy0+YWRkX3N0YXRpb24pIHsKKwlpZiAoIXJkZXYtPm9wcy0+YWRkX3N0YXRpb24pIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE4NDgsMTIgKzIwMjksMTIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmFkZF9zdGF0aW9uKCZkcnYtPndpcGh5LCBkZXYsIG1hY19hZGRyLCAmcGFyYW1zKTsKKwllcnIgPSByZGV2LT5vcHMtPmFkZF9zdGF0aW9uKCZyZGV2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnBhcmFtcyk7CiAKICBvdXQ6CiAJaWYgKHBhcmFtcy52bGFuKQogCQlkZXZfcHV0KHBhcmFtcy52bGFuKTsKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xODYzLDcgKzIwNDQsNyBAQAogCiBzdGF0aWMgaW50IG5sODAyMTFfZGVsX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXU4ICptYWNfYWRkciA9IE5VTEw7CkBAIC0xODczLDcgKzIwNTQsNyBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKQEAgLTE4ODQsMTUgKzIwNjUsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCFkcnYtPm9wcy0+ZGVsX3N0YXRpb24pIHsKKwlpZiAoIXJkZXYtPm9wcy0+ZGVsX3N0YXRpb24pIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5kZWxfc3RhdGlvbigmZHJ2LT53aXBoeSwgZGV2LCBtYWNfYWRkcik7CisJZXJyID0gcmRldi0+b3BzLT5kZWxfc3RhdGlvbigmcmRldi0+d2lwaHksIGRldiwgbWFjX2FkZHIpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTE5MTYsNiArMjA5Nyw4IEBACiAJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBkc3QpOwogCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTVBBVEhfTkVYVF9IT1AsIEVUSF9BTEVOLCBuZXh0X2hvcCk7CiAKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9HRU5FUkFUSU9OLCBwaW5mby0+Z2VuZXJhdGlvbik7CisKIAlwaW5mb2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9NUEFUSF9JTkZPKTsKIAlpZiAoIXBpbmZvYXR0cikKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC0xOTc5LDEzICsyMTYyLDEzIEBACiAKIAlydG5sX2xvY2soKTsKIAotCW5ldGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKKwluZXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2tiLT5zayksIGlmaWR4KTsKIAlpZiAoIW5ldGRldikgewogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9ydG5sOwogCX0KIAotCWRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGlmaWR4KTsKKwlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChzb2NrX25ldChza2ItPnNrKSwgaWZpZHgpOwogCWlmIChJU19FUlIoZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCWdvdG8gb3V0X3J0bmw7CkBAIC0xOTk4LDcgKzIxODEsNyBAQAogCiAJaWYgKG5ldGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9lcnI7CiAJfQogCiAJd2hpbGUgKDEpIHsKQEAgLTIwMjMsNyArMjIwNiw3IEBACiAJY2ItPmFyZ3NbMV0gPSBwYXRoX2lkeDsKIAllcnIgPSBza2ItPmxlbjsKICBvdXRfZXJyOgotCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CiAKQEAgLTIwMzIsNyArMjIxNSw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9nZXRfbXBhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtcGF0aF9pbmZvIHBpbmZvOwpAQCAtMjA0OSwxMSArMjIzMiwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5nZXRfbXBhdGgpIHsKKwlpZiAoIXJkZXYtPm9wcy0+Z2V0X21wYXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMDYzLDcgKzIyNDYsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+Z2V0X21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3AsICZwaW5mbyk7CisJZXJyID0gcmRldi0+b3BzLT5nZXRfbXBhdGgoJnJkZXYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3AsICZwaW5mbyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTIwNzUsMTMgKzIyNTgsMTMgQEAKIAkJCQkgZGV2LCBkc3QsIG5leHRfaG9wLCAmcGluZm8pIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKIAotCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIAlnb3RvIG91dDsKIAogIG91dF9mcmVlOgogCW5sbXNnX2ZyZWUobXNnKTsKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMjA5MSw3ICsyMjc0LDcgQEAKIAogc3RhdGljIGludCBubDgwMjExX3NldF9tcGF0aChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlpbnQgZXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTggKmRzdCA9IE5VTEw7CkBAIC0yMTA4LDExICsyMjkxLDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmNoYW5nZV9tcGF0aCkgeworCWlmICghcmRldi0+b3BzLT5jaGFuZ2VfbXBhdGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIxMjcsMTAgKzIzMTAsMTAgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wKTsKKwllcnIgPSByZGV2LT5vcHMtPmNoYW5nZV9tcGF0aCgmcmRldi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7CiAKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMjEzOSw3ICsyMzIyLDcgQEAKIH0KIHN0YXRpYyBpbnQgbmw4MDIxMV9uZXdfbXBhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXU4ICpkc3QgPSBOVUxMOwpAQCAtMjE1NiwxMSArMjMzOSwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5hZGRfbXBhdGgpIHsKKwlpZiAoIXJkZXYtPm9wcy0+YWRkX21wYXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTc1LDEwICsyMzU4LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IGRydi0+b3BzLT5hZGRfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCk7CisJZXJyID0gcmRldi0+b3BzLT5hZGRfbXBhdGgoJnJkZXYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3ApOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTIxODgsNyArMjM3MSw3IEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWxfbXBhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXU4ICpkc3QgPSBOVUxMOwpAQCAtMjE5OCwxOSArMjM4MSwxOSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5kZWxfbXBhdGgpIHsKKwlpZiAoIXJkZXYtPm9wcy0+ZGVsX21wYXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+ZGVsX21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCk7CisJZXJyID0gcmRldi0+b3BzLT5kZWxfbXBhdGgoJnJkZXYtPndpcGh5LCBkZXYsIGRzdCk7CiAKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMjIyMCw3ICsyNDAzLDcgQEAKIAogc3RhdGljIGludCBubDgwMjExX3NldF9ic3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBic3NfcGFyYW1ldGVycyBwYXJhbXM7CkBAIC0yMjQ5LDExICsyNDMyLDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmNoYW5nZV9ic3MpIHsKKwlpZiAoIXJkZXYtPm9wcy0+Y2hhbmdlX2JzcykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjI2MywxMCArMjQ0NiwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBkcnYtPm9wcy0+Y2hhbmdlX2JzcygmZHJ2LT53aXBoeSwgZGV2LCAmcGFyYW1zKTsKKwllcnIgPSByZGV2LT5vcHMtPmNoYW5nZV9ic3MoJnJkZXYtPndpcGh5LCBkZXYsICZwYXJhbXMpOwogCiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTIzNTcsNyArMjU0MCw3IEBACiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X21lc2hfcGFyYW1zKHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IG1lc2hfY29uZmlnIGN1cl9wYXJhbXM7CiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMjM2OCwxNyArMjU1MSwxNyBAQAogCXJ0bmxfbG9jaygpOwogCiAJLyogTG9vayB1cCBvdXIgZGV2aWNlICovCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+Z2V0X21lc2hfcGFyYW1zKSB7CisJaWYgKCFyZGV2LT5vcHMtPmdldF9tZXNoX3BhcmFtcykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogR2V0IHRoZSBtZXNoIHBhcmFtcyAqLwotCWVyciA9IGRydi0+b3BzLT5nZXRfbWVzaF9wYXJhbXMoJmRydi0+d2lwaHksIGRldiwgJmN1cl9wYXJhbXMpOworCWVyciA9IHJkZXYtPm9wcy0+Z2V0X21lc2hfcGFyYW1zKCZyZGV2LT53aXBoeSwgZGV2LCAmY3VyX3BhcmFtcyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTI0MjQsNyArMjYwNyw3IEBACiAJCQljdXJfcGFyYW1zLmRvdDExTWVzaEhXTVBuZXREaWFtZXRlclRyYXZlcnNhbFRpbWUpOwogCW5sYV9uZXN0X2VuZChtc2csIHBpbmZvYXR0cik7CiAJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwotCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOworCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKIAlnb3RvIG91dDsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTI0MzIsNyArMjYxNSw3IEBACiAJZXJyID0gLUVNU0dTSVpFOwogIG91dDoKIAkvKiBDbGVhbnVwICovCi0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKICBvdXRfcnRubDoKIAlydG5sX3VubG9jaygpOwpAQCAtMjQ3MCw3ICsyNjUzLDcgQEAKIHsKIAlpbnQgZXJyOwogCXUzMiBtYXNrOwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtZXNoX2NvbmZpZyBjZmc7CiAJc3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9NRVNIQ09ORl9BVFRSX01BWCArIDFdOwpAQCAtMjQ4NSwxMSArMjY2OCwxMSBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5zZXRfbWVzaF9wYXJhbXMpIHsKKwlpZiAoIXJkZXYtPm9wcy0+c2V0X21lc2hfcGFyYW1zKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yNTM0LDExICsyNzE3LDExIEBACiAJCQlubGFfZ2V0X3UxNik7CiAKIAkvKiBBcHBseSBjaGFuZ2VzICovCi0JZXJyID0gZHJ2LT5vcHMtPnNldF9tZXNoX3BhcmFtcygmZHJ2LT53aXBoeSwgZGV2LCAmY2ZnLCBtYXNrKTsKKwllcnIgPSByZGV2LT5vcHMtPnNldF9tZXNoX3BhcmFtcygmcmRldi0+d2lwaHksIGRldiwgJmNmZywgbWFzayk7CiAKICBvdXQ6CiAJLyogY2xlYW51cCAqLwotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiAgb3V0X3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTI2MTIsNyArMjc5NSw3IEBACiAJbmxhX25lc3RfZW5kKG1zZywgbmxfcmVnX3J1bGVzKTsKIAogCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKLQllcnIgPSBnZW5sbXNnX3VuaWNhc3QobXNnLCBpbmZvLT5zbmRfcGlkKTsKKwllcnIgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CiAJZ290byBvdXQ7CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTI2OTgsMTYgKzI4ODEsNDEgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGludCB2YWxpZGF0ZV9zY2FuX2ZyZXFzKHN0cnVjdCBubGF0dHIgKmZyZXFzKQoreworCXN0cnVjdCBubGF0dHIgKmF0dHIxLCAqYXR0cjI7CisJaW50IG5fY2hhbm5lbHMgPSAwLCB0bXAxLCB0bXAyOworCisJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyMSwgZnJlcXMsIHRtcDEpIHsKKwkJbl9jaGFubmVscysrOworCQkvKgorCQkgKiBTb21lIGhhcmR3YXJlIGhhcyBhIGxpbWl0ZWQgY2hhbm5lbCBsaXN0IGZvcgorCQkgKiBzY2FubmluZywgYW5kIGl0IGlzIHByZXR0eSBtdWNoIG5vbnNlbnNpY2FsCisJCSAqIHRvIHNjYW4gZm9yIGEgY2hhbm5lbCB0d2ljZSwgc28gZGlzYWxsb3cgdGhhdAorCQkgKiBhbmQgZG9uJ3QgcmVxdWlyZSBkcml2ZXJzIHRvIGNoZWNrIHRoYXQgdGhlCisJCSAqIGNoYW5uZWwgbGlzdCB0aGV5IGdldCBpc24ndCBsb25nZXIgdGhhbiB3aGF0CisJCSAqIHRoZXkgY2FuIHNjYW4sIGFzIGxvbmcgYXMgdGhleSBjYW4gc2NhbiBhbGwKKwkJICogdGhlIGNoYW5uZWxzIHRoZXkgcmVnaXN0ZXJlZCBhdCBvbmNlLgorCQkgKi8KKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyMiwgZnJlcXMsIHRtcDIpCisJCQlpZiAoYXR0cjEgIT0gYXR0cjIgJiYKKwkJCSAgICBubGFfZ2V0X3UzMihhdHRyMSkgPT0gbmxhX2dldF91MzIoYXR0cjIpKQorCQkJCXJldHVybiAwOworCX0KKworCXJldHVybiBuX2NoYW5uZWxzOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfdHJpZ2dlcl9zY2FuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdDsKIAlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CiAJc3RydWN0IG5sYXR0ciAqYXR0cjsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwotCWludCBlcnIsIHRtcCwgbl9zc2lkcyA9IDAsIG5fY2hhbm5lbHMgPSAwLCBpOworCWludCBlcnIsIHRtcCwgbl9zc2lkcyA9IDAsIG5fY2hhbm5lbHMsIGk7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCXNpemVfdCBpZV9sZW47CiAKQEAgLTI3MTYsMTMgKzI5MjQsMTMgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9ydG5sOwogCi0Jd2lwaHkgPSAmZHJ2LT53aXBoeTsKKwl3aXBoeSA9ICZyZGV2LT53aXBoeTsKIAotCWlmICghZHJ2LT5vcHMtPnNjYW4pIHsKKwlpZiAoIXJkZXYtPm9wcy0+c2NhbikgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjczMiwxOSArMjk0MCwyMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoZHJ2LT5zY2FuX3JlcSkgeworCWlmIChyZGV2LT5zY2FuX3JlcSkgewogCQllcnIgPSAtRUJVU1k7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10pIHsKLQkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9GUkVRVUVOQ0lFU10sIHRtcCkKLQkJCW5fY2hhbm5lbHMrKzsKKwkJbl9jaGFubmVscyA9IHZhbGlkYXRlX3NjYW5fZnJlcXMoCisJCQkJaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKTsKIAkJaWYgKCFuX2NoYW5uZWxzKSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgeworCQluX2NoYW5uZWxzID0gMDsKKwogCQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKQogCQkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKIAkJCQluX2NoYW5uZWxzICs9IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsKQEAgLTI3NzgsMTAgKzI5ODgsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXF1ZXN0LT5jaGFubmVscyA9ICh2b2lkICopKChjaGFyICopcmVxdWVzdCArIHNpemVvZigqcmVxdWVzdCkpOwogCXJlcXVlc3QtPm5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzOwogCWlmIChuX3NzaWRzKQotCQlyZXF1ZXN0LT5zc2lkcyA9ICh2b2lkICopKHJlcXVlc3QtPmNoYW5uZWxzICsgbl9jaGFubmVscyk7CisJCXJlcXVlc3QtPnNzaWRzID0gKHZvaWQgKikmcmVxdWVzdC0+Y2hhbm5lbHNbbl9jaGFubmVsc107CiAJcmVxdWVzdC0+bl9zc2lkcyA9IG5fc3NpZHM7CiAJaWYgKGllX2xlbikgewogCQlpZiAocmVxdWVzdC0+c3NpZHMpCkBAIC0yODM2LDE5ICszMDQ1LDI0IEBACiAJCSAgICAgICByZXF1ZXN0LT5pZV9sZW4pOwogCX0KIAotCXJlcXVlc3QtPmlmaWR4ID0gZGV2LT5pZmluZGV4OwotCXJlcXVlc3QtPndpcGh5ID0gJmRydi0+d2lwaHk7CisJcmVxdWVzdC0+ZGV2ID0gZGV2OworCXJlcXVlc3QtPndpcGh5ID0gJnJkZXYtPndpcGh5OwogCi0JZHJ2LT5zY2FuX3JlcSA9IHJlcXVlc3Q7Ci0JZXJyID0gZHJ2LT5vcHMtPnNjYW4oJmRydi0+d2lwaHksIGRldiwgcmVxdWVzdCk7CisJcmRldi0+c2Nhbl9yZXEgPSByZXF1ZXN0OworCWVyciA9IHJkZXYtPm9wcy0+c2NhbigmcmRldi0+d2lwaHksIGRldiwgcmVxdWVzdCk7CisKKwlpZiAoIWVycikgeworCQlubDgwMjExX3NlbmRfc2Nhbl9zdGFydChyZGV2LCBkZXYpOworCQlkZXZfaG9sZChkZXYpOworCX0KIAogIG91dF9mcmVlOgogCWlmIChlcnIpIHsKLQkJZHJ2LT5zY2FuX3JlcSA9IE5VTEw7CisJCXJkZXYtPnNjYW5fcmVxID0gTlVMTDsKIAkJa2ZyZWUocmVxdWVzdCk7CiAJfQogIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogIG91dF9ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0yODU4LDIwICszMDcyLDIzIEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX2JzcyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCiAJCQkgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqcmVzKQorCQkJICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCisJCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqaW50YnNzKQogeworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKnJlcyA9ICZpbnRic3MtPnB1YjsKIAl2b2lkICpoZHI7CiAJc3RydWN0IG5sYXR0ciAqYnNzOworCWludCBpOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKIAogCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcGlkLCBzZXEsIGZsYWdzLAogCQkJICAgICBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTKTsKIAlpZiAoIWhkcikKIAkJcmV0dXJuIC0xOwogCi0JTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OLAotCQkgICAgcmRldi0+YnNzX2dlbmVyYXRpb24pOwotCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfR0VORVJBVElPTiwgcmRldi0+YnNzX2dlbmVyYXRpb24pOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIHdkZXYtPm5ldGRldi0+aWZpbmRleCk7CiAKIAlic3MgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9CU1MpOwogCWlmICghYnNzKQpAQCAtMjkwMCw2ICszMTE3LDI4IEBACiAJCWJyZWFrOwogCX0KIAorCXN3aXRjaCAod2Rldi0+aWZ0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAoaW50YnNzID09IHdkZXYtPmN1cnJlbnRfYnNzKQorCQkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19TVEFUVVMsCisJCQkJICAgIE5MODAyMTFfQlNTX1NUQVRVU19BU1NPQ0lBVEVEKTsKKwkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgTUFYX0FVVEhfQlNTRVM7IGkrKykgeworCQkJaWYgKGludGJzcyAhPSB3ZGV2LT5hdXRoX2Jzc2VzW2ldKQorCQkJCWNvbnRpbnVlOworCQkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0JTU19TVEFUVVMsCisJCQkJICAgIE5MODAyMTFfQlNTX1NUQVRVU19BVVRIRU5USUNBVEVEKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWlmIChpbnRic3MgPT0gd2Rldi0+Y3VycmVudF9ic3MpCisJCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQlNTX1NUQVRVUywKKwkJCQkgICAgTkw4MDIxMV9CU1NfU1RBVFVTX0lCU1NfSk9JTkVEKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCiAJbmxhX25lc3RfZW5kKG1zZywgYnNzKTsKIAogCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CkBAIC0yOTEyLDkgKzMxNTEsMTAgQEAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kdW1wX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqc2NhbjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OwogCWludCBpZmlkeCA9IGNiLT5hcmdzWzBdOwogCWludCBzdGFydCA9IGNiLT5hcmdzWzFdLCBpZHggPSAwOwogCWludCBlcnI7CkBAIC0yOTM1LDU4ICszMTc1LDgzIEBACiAJCWNiLT5hcmdzWzBdID0gaWZpZHg7CiAJfQogCi0JbmV0ZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKLQlpZiAoIW5ldGRldikKKwlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrYi0+c2spLCBpZmlkeCk7CisJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCi0JZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaWZpZHgpOwotCWlmIChJU19FUlIoZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRldik7CisJcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KHNvY2tfbmV0KHNrYi0+c2spLCBpZmlkeCk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKHJkZXYpOwogCQlnb3RvIG91dF9wdXRfbmV0ZGV2OwogCX0KIAotCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7Ci0JY2ZnODAyMTFfYnNzX2V4cGlyZShkZXYpOworCXdkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYW4sICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJd2Rldl9sb2NrKHdkZXYpOworCXNwaW5fbG9ja19iaCgmcmRldi0+YnNzX2xvY2spOworCWNmZzgwMjExX2Jzc19leHBpcmUocmRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYW4sICZyZGV2LT5ic3NfbGlzdCwgbGlzdCkgewogCQlpZiAoKytpZHggPD0gc3RhcnQpCiAJCQljb250aW51ZTsKIAkJaWYgKG5sODAyMTFfc2VuZF9ic3Moc2tiLAogCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksCi0JCQkJZGV2LCBuZXRkZXYsICZzY2FuLT5wdWIpIDwgMCkgeworCQkJCXJkZXYsIHdkZXYsIHNjYW4pIDwgMCkgewogCQkJaWR4LS07CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAogIG91dDoKLQlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnJkZXYtPmJzc19sb2NrKTsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKIAogCWNiLT5hcmdzWzFdID0gaWR4OwogCWVyciA9IHNrYi0+bGVuOwotCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKICBvdXRfcHV0X25ldGRldjoKLQlkZXZfcHV0KG5ldGRldik7CisJZGV2X3B1dChkZXYpOwogCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGJvb2wgbmw4MDIxMV92YWxpZF9hdXRoX3R5cGUoZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUpCiB7Ci0JcmV0dXJuIGF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNIHx8Ci0JCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVkgfHwKLQkJYXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfRlQgfHwKLQkJYXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA7CisJcmV0dXJuIGF1dGhfdHlwZSA8PSBOTDgwMjExX0FVVEhUWVBFX01BWDsKIH0KIAorc3RhdGljIGJvb2wgbmw4MDIxMV92YWxpZF93cGFfdmVyc2lvbnModTMyIHdwYV92ZXJzaW9ucykKK3sKKwlyZXR1cm4gISh3cGFfdmVyc2lvbnMgJiB+KE5MODAyMTFfV1BBX1ZFUlNJT05fMSB8CisJCQkJICBOTDgwMjExX1dQQV9WRVJTSU9OXzIpKTsKK30KKworc3RhdGljIGJvb2wgbmw4MDIxMV92YWxpZF9ha21fc3VpdGUodTMyIGFrbSkKK3sKKwlyZXR1cm4gYWttID09IFdMQU5fQUtNX1NVSVRFXzgwMjFYIHx8CisJCWFrbSA9PSBXTEFOX0FLTV9TVUlURV9QU0s7Cit9CisKK3N0YXRpYyBib29sIG5sODAyMTFfdmFsaWRfY2lwaGVyX3N1aXRlKHUzMiBjaXBoZXIpCit7CisJcmV0dXJuIGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAorCQljaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0IHx8CisJCWNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQIHx8CisJCWNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QIHx8CisJCWNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzsKK30KKworCiBzdGF0aWMgaW50IG5sODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCByZXE7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQlpbnQgZXJyOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwljb25zdCB1OCAqYnNzaWQsICpzc2lkLCAqaWUgPSBOVUxMOworCWludCBlcnIsIHNzaWRfbGVuLCBpZV9sZW4gPSAwOworCWVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlOworCXN0cnVjdCBrZXlfcGFyc2Uga2V5OwogCiAJaWYgKCFpc192YWxpZF9pZV9hdHRyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5OTcsMTMgKzMyNjIsMzggQEAKIAlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BVVRIX1RZUEVdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IG5sODAyMTFfcGFyc2Vfa2V5KGluZm8sICZrZXkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoa2V5LmlkeCA+PSAwKSB7CisJCWlmICgha2V5LnAua2V5IHx8ICFrZXkucC5rZXlfbGVuKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICgoa2V5LnAuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwIHx8CisJCSAgICAga2V5LnAua2V5X2xlbiAhPSBXTEFOX0tFWV9MRU5fV0VQNDApICYmCisJCSAgICAoa2V5LnAuY2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCB8fAorCQkgICAgIGtleS5wLmtleV9sZW4gIT0gV0xBTl9LRVlfTEVOX1dFUDEwNCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGtleS5pZHggPiA0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJa2V5LnAua2V5X2xlbiA9IDA7CisJCWtleS5wLmtleSA9IE5VTEw7CisJfQorCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5hdXRoKSB7CisJaWYgKCFyZGV2LT5vcHMtPmF1dGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMwMTgsNjkgKzMzMDgsMTMwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXdpcGh5ID0gJmRydi0+d2lwaHk7Ci0JbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKLQotCXJlcS5wZWVyX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7Ci0KLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7Ci0JCXJlcS5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKAotCQkJd2lwaHksCi0JCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pKTsKLQkJaWYgKCFyZXEuY2hhbikgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSkgewotCQlyZXEuc3NpZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7Ci0JCXJlcS5zc2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKLQl9Ci0KLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgewotCQlyZXEuaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKLQkJcmVxLmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7Ci0JfQotCi0JcmVxLmF1dGhfdHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BVVRIX1RZUEVdKTsKLQlpZiAoIW5sODAyMTFfdmFsaWRfYXV0aF90eXBlKHJlcS5hdXRoX3R5cGUpKSB7CisJYnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CisJY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgmcmRldi0+d2lwaHksCisJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkpOworCWlmICghY2hhbiB8fCAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmF1dGgoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisJc3NpZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7CisJc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQlpZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlpZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCX0KKworCWF1dGhfdHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BVVRIX1RZUEVdKTsKKwlpZiAoIW5sODAyMTFfdmFsaWRfYXV0aF90eXBlKGF1dGhfdHlwZSkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gY2ZnODAyMTFfbWxtZV9hdXRoKHJkZXYsIGRldiwgY2hhbiwgYXV0aF90eXBlLCBic3NpZCwKKwkJCQkgc3NpZCwgc3NpZF9sZW4sIGllLCBpZV9sZW4sCisJCQkJIGtleS5wLmtleSwga2V5LnAua2V5X2xlbiwga2V5LmlkeCk7CiAKIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfY3J5cHRvX3NldHRpbmdzKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sCisJCQkJICAgc3RydWN0IGNmZzgwMjExX2NyeXB0b19zZXR0aW5ncyAqc2V0dGluZ3MsCisJCQkJICAgaW50IGNpcGhlcl9saW1pdCkKK3sKKwltZW1zZXQoc2V0dGluZ3MsIDAsIHNpemVvZigqc2V0dGluZ3MpKTsKKworCXNldHRpbmdzLT5jb250cm9sX3BvcnQgPSBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JUXTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFU19QQUlSV0lTRV0pIHsKKwkJdm9pZCAqZGF0YTsKKwkJaW50IGxlbiwgaTsKKworCQlkYXRhID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURVNfUEFJUldJU0VdKTsKKwkJbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFU19QQUlSV0lTRV0pOworCQlzZXR0aW5ncy0+bl9jaXBoZXJzX3BhaXJ3aXNlID0gbGVuIC8gc2l6ZW9mKHUzMik7CisKKwkJaWYgKGxlbiAlIHNpemVvZih1MzIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHNldHRpbmdzLT5uX2NpcGhlcnNfcGFpcndpc2UgPiBjaXBoZXJfbGltaXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltZW1jcHkoc2V0dGluZ3MtPmNpcGhlcnNfcGFpcndpc2UsIGRhdGEsIGxlbik7CisKKwkJZm9yIChpID0gMDsgaSA8IHNldHRpbmdzLT5uX2NpcGhlcnNfcGFpcndpc2U7IGkrKykKKwkJCWlmICghbmw4MDIxMV92YWxpZF9jaXBoZXJfc3VpdGUoCisJCQkJCXNldHRpbmdzLT5jaXBoZXJzX3BhaXJ3aXNlW2ldKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0NJUEhFUl9TVUlURV9HUk9VUF0pIHsKKwkJc2V0dGluZ3MtPmNpcGhlcl9ncm91cCA9CisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ0lQSEVSX1NVSVRFX0dST1VQXSk7CisJCWlmICghbmw4MDIxMV92YWxpZF9jaXBoZXJfc3VpdGUoc2V0dGluZ3MtPmNpcGhlcl9ncm91cCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dQQV9WRVJTSU9OU10pIHsKKwkJc2V0dGluZ3MtPndwYV92ZXJzaW9ucyA9CisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV1BBX1ZFUlNJT05TXSk7CisJCWlmICghbmw4MDIxMV92YWxpZF93cGFfdmVyc2lvbnMoc2V0dGluZ3MtPndwYV92ZXJzaW9ucykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0FLTV9TVUlURVNdKSB7CisJCXZvaWQgKmRhdGE7CisJCWludCBsZW4sIGk7CisKKwkJZGF0YSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BS01fU1VJVEVTXSk7CisJCWxlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0FLTV9TVUlURVNdKTsKKwkJc2V0dGluZ3MtPm5fYWttX3N1aXRlcyA9IGxlbiAvIHNpemVvZih1MzIpOworCisJCWlmIChsZW4gJSBzaXplb2YodTMyKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1lbWNweShzZXR0aW5ncy0+YWttX3N1aXRlcywgZGF0YSwgbGVuKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2V0dGluZ3MtPm5fY2lwaGVyc19wYWlyd2lzZTsgaSsrKQorCQkJaWYgKCFubDgwMjExX3ZhbGlkX2FrbV9zdWl0ZShzZXR0aW5ncy0+YWttX3N1aXRlc1tpXSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9hc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCByZXE7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQlpbnQgZXJyOworCXN0cnVjdCBjZmc4MDIxMV9jcnlwdG9fc2V0dGluZ3MgY3J5cHRvOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwgKmZpeGVkY2hhbjsKKwljb25zdCB1OCAqYnNzaWQsICpzc2lkLCAqaWUgPSBOVUxMLCAqcHJldl9ic3NpZCA9IE5VTEw7CisJaW50IGVyciwgc3NpZF9sZW4sIGllX2xlbiA9IDA7CisJYm9vbCB1c2VfbWZwID0gZmFsc2U7CiAKIAlpZiAoIWlzX3ZhbGlkX2llX2F0dHIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fAotCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKQorCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdIHx8CisJICAgICFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcnRubF9sb2NrKCk7CiAKLQllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gdW5sb2NrX3J0bmw7CiAKLQlpZiAoIWRydi0+b3BzLT5hc3NvYykgeworCWlmICghcmRldi0+b3BzLT5hc3NvYykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMzA5NSw0NiArMzQ0Niw1NCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3aXBoeSA9ICZkcnYtPndpcGh5OwotCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisJYnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKLQlyZXEucGVlcl9hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwotCi0JaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkgewotCQlyZXEuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgKLQkJCXdpcGh5LAotCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSk7Ci0JCWlmICghcmVxLmNoYW4pIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQorCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoJnJkZXYtPndpcGh5LAorCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pKTsKKwlpZiAoIWNoYW4gfHwgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCX0KIAotCXJlcS5zc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKLQlyZXEuc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7CisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCWZpeGVkY2hhbiA9IHJkZXZfZml4ZWRfY2hhbm5lbChyZGV2LCBOVUxMKTsKKwlpZiAoZml4ZWRjaGFuICYmIGNoYW4gIT0gZml4ZWRjaGFuKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCWdvdG8gb3V0OworCX0KKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCXNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCXNzaWRfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKLQkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7Ci0JCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlpZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlpZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOwogCX0KIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfVVNFX01GUF0pIHsKLQkJZW51bSBubDgwMjExX21mcCB1c2VfbWZwID0KKwkJZW51bSBubDgwMjExX21mcCBtZnAgPQogCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1VTRV9NRlBdKTsKLQkJaWYgKHVzZV9tZnAgPT0gTkw4MDIxMV9NRlBfUkVRVUlSRUQpCi0JCQlyZXEudXNlX21mcCA9IHRydWU7Ci0JCWVsc2UgaWYgKHVzZV9tZnAgIT0gTkw4MDIxMV9NRlBfTk8pIHsKKwkJaWYgKG1mcCA9PSBOTDgwMjExX01GUF9SRVFVSVJFRCkKKwkJCXVzZV9tZnAgPSB0cnVlOworCQllbHNlIGlmIChtZnAgIT0gTkw4MDIxMV9NRlBfTk8pIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCXJlcS5jb250cm9sX3BvcnQgPSBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ09OVFJPTF9QT1JUXTsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BSRVZfQlNTSURdKQorCQlwcmV2X2Jzc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BSRVZfQlNTSURdKTsKIAotCWVyciA9IGRydi0+b3BzLT5hc3NvYygmZHJ2LT53aXBoeSwgZGV2LCAmcmVxKTsKKwllcnIgPSBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhpbmZvLCAmY3J5cHRvLCAxKTsKKwlpZiAoIWVycikKKwkJZXJyID0gY2ZnODAyMTFfbWxtZV9hc3NvYyhyZGV2LCBkZXYsIGNoYW4sIGJzc2lkLCBwcmV2X2Jzc2lkLAorCQkJCQkgIHNzaWQsIHNzaWRfbGVuLCBpZSwgaWVfbGVuLCB1c2VfbWZwLAorCQkJCQkgICZjcnlwdG8pOwogCiBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0zMTQzLDExICszNTAyLDExIEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCByZXE7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQlpbnQgZXJyOworCWNvbnN0IHU4ICppZSA9IE5VTEwsICpic3NpZDsKKwlpbnQgZXJyLCBpZV9sZW4gPSAwOworCXUxNiByZWFzb25fY29kZTsKIAogCWlmICghaXNfdmFsaWRfaWVfYXR0cihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTYwLDExICszNTE5LDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmRlYXV0aCkgeworCWlmICghcmRldi0+b3BzLT5kZWF1dGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMxNzksMjcgKzM1MzgsMjQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2lwaHkgPSAmZHJ2LT53aXBoeTsKLQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCWJzc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCi0JcmVxLnBlZXJfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKLQotCXJlcS5yZWFzb25fY29kZSA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pOwotCWlmIChyZXEucmVhc29uX2NvZGUgPT0gMCkgeworCXJlYXNvbl9jb2RlID0gbmxhX2dldF91MTYoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSk7CisJaWYgKHJlYXNvbl9jb2RlID09IDApIHsKIAkJLyogUmVhc29uIENvZGUgMCBpcyByZXNlcnZlZCAqLwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgewotCQlyZXEuaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKLQkJcmVxLmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCWllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCWllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmRlYXV0aCgmZHJ2LT53aXBoeSwgZGV2LCAmcmVxKTsKKwllcnIgPSBjZmc4MDIxMV9tbG1lX2RlYXV0aChyZGV2LCBkZXYsIGJzc2lkLCBpZSwgaWVfbGVuLCByZWFzb25fY29kZSk7CiAKIG91dDoKLQljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJZGV2X3B1dChkZXYpOwogdW5sb2NrX3J0bmw6CiAJcnRubF91bmxvY2soKTsKQEAgLTMyMDgsMTEgKzM1NjQsMTEgQEAKIAogc3RhdGljIGludCBubDgwMjExX2Rpc2Fzc29jaWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0IHJlcTsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5OwotCWludCBlcnI7CisJY29uc3QgdTggKmllID0gTlVMTCwgKmJzc2lkOworCWludCBlcnIsIGllX2xlbiA9IDA7CisJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKCFpc192YWxpZF9pZV9hdHRyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMyMjUsMTEgKzM1ODEsMTEgQEAKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+ZGlzYXNzb2MpIHsKKwlpZiAoIXJkZXYtPm9wcy0+ZGlzYXNzb2MpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMyNDQsMjcgKzM2MDAsMjQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2lwaHkgPSAmZHJ2LT53aXBoeTsKLQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCWJzc2lkID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCi0JcmVxLnBlZXJfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKLQotCXJlcS5yZWFzb25fY29kZSA9IG5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pOwotCWlmIChyZXEucmVhc29uX2NvZGUgPT0gMCkgeworCXJlYXNvbl9jb2RlID0gbmxhX2dldF91MTYoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSk7CisJaWYgKHJlYXNvbl9jb2RlID09IDApIHsKIAkJLyogUmVhc29uIENvZGUgMCBpcyByZXNlcnZlZCAqLwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgewotCQlyZXEuaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKLQkJcmVxLmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCWllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCWllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CiAJfQogCi0JZXJyID0gZHJ2LT5vcHMtPmRpc2Fzc29jKCZkcnYtPndpcGh5LCBkZXYsICZyZXEpOworCWVyciA9IGNmZzgwMjExX21sbWVfZGlzYXNzb2MocmRldiwgZGV2LCBic3NpZCwgaWUsIGllX2xlbiwgcmVhc29uX2NvZGUpOwogCiBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKIHVubG9ja19ydG5sOgogCXJ0bmxfdW5sb2NrKCk7CkBAIC0zMjczLDEwICszNjI2LDExIEBACiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9qb2luX2lic3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgaWJzczsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY29ubmtleXMgPSBOVUxMOwogCWludCBlcnI7CiAKIAltZW1zZXQoJmlic3MsIDAsIHNpemVvZihpYnNzKSk7CkBAIC0zMzAwLDExICszNjU0LDExIEBACiAKIAlydG5sX2xvY2soKTsKIAotCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CiAJaWYgKGVycikKIAkJZ290byB1bmxvY2tfcnRubDsKIAotCWlmICghZHJ2LT5vcHMtPmpvaW5faWJzcykgeworCWlmICghcmRldi0+b3BzLT5qb2luX2lic3MpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMzMTksNyArMzY3Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXdpcGh5ID0gJmRydi0+d2lwaHk7CisJd2lwaHkgPSAmcmRldi0+d2lwaHk7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCWlic3MuYnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CkBAIC0zMzQxLDMwICszNjk1LDQzIEBACiAJfQogCiAJaWJzcy5jaGFubmVsX2ZpeGVkID0gISFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJFUV9GSVhFRF07CisJaWJzcy5wcml2YWN5ID0gISFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUFJJVkFDWV07CiAKLQllcnIgPSBjZmc4MDIxMV9qb2luX2lic3MoZHJ2LCBkZXYsICZpYnNzKTsKKwlpZiAoaWJzcy5wcml2YWN5ICYmIGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlTXSkgeworCQljb25ua2V5cyA9IG5sODAyMTFfcGFyc2VfY29ubmtleXMocmRldiwKKwkJCQkJaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWVNdKTsKKwkJaWYgKElTX0VSUihjb25ua2V5cykpIHsKKwkJCWVyciA9IFBUUl9FUlIoY29ubmtleXMpOworCQkJY29ubmtleXMgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwllcnIgPSBjZmc4MDIxMV9qb2luX2lic3MocmRldiwgZGV2LCAmaWJzcywgY29ubmtleXMpOwogCiBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihkcnYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOwogCWRldl9wdXQoZGV2KTsKIHVubG9ja19ydG5sOgorCWlmIChlcnIpCisJCWtmcmVlKGNvbm5rZXlzKTsKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9sZWF2ZV9pYnNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGVycjsKIAogCXJ0bmxfbG9jaygpOwogCi0JZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+bGVhdmVfaWJzcykgeworCWlmICghcmRldi0+b3BzLT5sZWF2ZV9pYnNzKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMzc5LDE2ICszNzQ2LDMxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBjZmc4MDIxMV9sZWF2ZV9pYnNzKGRydiwgZGV2LCBmYWxzZSk7CisJZXJyID0gY2ZnODAyMTFfbGVhdmVfaWJzcyhyZGV2LCBkZXYsIGZhbHNlKTsKIAogb3V0OgotCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlkZXZfcHV0KGRldik7CiB1bmxvY2tfcnRubDoKIAlydG5sX3VubG9jaygpOwogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQorc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX3Rlc3Rtb2RlX21jZ3JwID0geworCS5uYW1lID0gInRlc3Rtb2RlIiwKK307CisKK3N0YXRpYyBpbnQgbmw4MDIxMV90ZXN0bW9kZV9kbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlpbnQgZXJyOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfVEVTVERBVEFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bmxfbG9jaygpOworCisJcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pbmZvKGluZm8pOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZXJyID0gUFRSX0VSUihyZGV2KTsKKwkJZ290byB1bmxvY2tfcnRubDsKKwl9CisKKwllcnIgPSAtRU9QTk9UU1VQUDsKKwlpZiAocmRldi0+b3BzLT50ZXN0bW9kZV9jbWQpIHsKKwkJcmRldi0+dGVzdG1vZGVfaW5mbyA9IGluZm87CisJCWVyciA9IHJkZXYtPm9wcy0+dGVzdG1vZGVfY21kKCZyZGV2LT53aXBoeSwKKwkJCQlubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfVEVTVERBVEFdKSwKKwkJCQlubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9URVNUREFUQV0pKTsKKwkJcmRldi0+dGVzdG1vZGVfaW5mbyA9IE5VTEw7CisJfQorCisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCitfX2NmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3NrYihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICBpbnQgYXBwcm94bGVuLCB1MzIgcGlkLCB1MzIgc2VxLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICpoZHI7CisJc3RydWN0IG5sYXR0ciAqZGF0YTsKKworCXNrYiA9IG5sbXNnX25ldyhhcHByb3hsZW4gKyAxMDAsIGdmcCk7CisJaWYgKCFza2IpCisJCXJldHVybiBOVUxMOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQoc2tiLCBwaWQsIHNlcSwgMCwgTkw4MDIxMV9DTURfVEVTVE1PREUpOworCWlmICghaGRyKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlOTEFfUFVUX1UzMihza2IsIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlkYXRhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBOTDgwMjExX0FUVFJfVEVTVERBVEEpOworCisJKCh2b2lkICoqKXNrYi0+Y2IpWzBdID0gcmRldjsKKwkoKHZvaWQgKiopc2tiLT5jYilbMV0gPSBoZHI7CisJKCh2b2lkICoqKXNrYi0+Y2IpWzJdID0gZGF0YTsKKworCXJldHVybiBza2I7CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBza19idWZmICpjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2Ioc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJCSAgaW50IGFwcHJveGxlbikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJaWYgKFdBUk5fT04oIXJkZXYtPnRlc3Rtb2RlX2luZm8pKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBfX2NmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3NrYihyZGV2LCBhcHByb3hsZW4sCisJCQkJcmRldi0+dGVzdG1vZGVfaW5mby0+c25kX3BpZCwKKwkJCQlyZGV2LT50ZXN0bW9kZV9pbmZvLT5zbmRfc2VxLAorCQkJCUdGUF9LRVJORUwpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19yZXBseV9za2IpOworCitpbnQgY2ZnODAyMTFfdGVzdG1vZGVfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSAoKHZvaWQgKiopc2tiLT5jYilbMF07CisJdm9pZCAqaGRyID0gKCh2b2lkICoqKXNrYi0+Y2IpWzFdOworCXN0cnVjdCBubGF0dHIgKmRhdGEgPSAoKHZvaWQgKiopc2tiLT5jYilbMl07CisKKwlpZiAoV0FSTl9PTighcmRldi0+dGVzdG1vZGVfaW5mbykpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5sYV9uZXN0X2VuZChza2IsIGRhdGEpOworCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlyZXR1cm4gZ2VubG1zZ19yZXBseShza2IsIHJkZXYtPnRlc3Rtb2RlX2luZm8pOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV90ZXN0bW9kZV9yZXBseSk7CisKK3N0cnVjdCBza19idWZmICpjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19ldmVudF9za2Ioc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJCSAgaW50IGFwcHJveGxlbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwlyZXR1cm4gX19jZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19za2IocmRldiwgYXBwcm94bGVuLCAwLCAwLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV90ZXN0bW9kZV9hbGxvY19ldmVudF9za2IpOworCit2b2lkIGNmZzgwMjExX3Rlc3Rtb2RlX2V2ZW50KHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcCkKK3sKKwl2b2lkICpoZHIgPSAoKHZvaWQgKiopc2tiLT5jYilbMV07CisJc3RydWN0IG5sYXR0ciAqZGF0YSA9ICgodm9pZCAqKilza2ItPmNiKVsyXTsKKworCW5sYV9uZXN0X2VuZChza2IsIGRhdGEpOworCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIG5sODAyMTFfdGVzdG1vZGVfbWNncnAuaWQsIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3Rlc3Rtb2RlX2V2ZW50KTsKKyNlbmRpZgorCitzdGF0aWMgaW50IG5sODAyMTFfY29ubmVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyBjb25uZWN0OworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjb25ua2V5cyA9IE5VTEw7CisJaW50IGVycjsKKworCW1lbXNldCgmY29ubmVjdCwgMCwgc2l6ZW9mKGNvbm5lY3QpKTsKKworCWlmICghaXNfdmFsaWRfaWVfYXR0cihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSB8fAorCSAgICAhbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSkgeworCQljb25uZWN0LmF1dGhfdHlwZSA9CisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSk7CisJCWlmICghbmw4MDIxMV92YWxpZF9hdXRoX3R5cGUoY29ubmVjdC5hdXRoX3R5cGUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWNvbm5lY3QuYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUM7CisKKwljb25uZWN0LnByaXZhY3kgPSBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUFJJVkFDWV07CisKKwllcnIgPSBubDgwMjExX2NyeXB0b19zZXR0aW5ncyhpbmZvLCAmY29ubmVjdC5jcnlwdG8sCisJCQkJICAgICAgTkw4MDIxMV9NQVhfTlJfQ0lQSEVSX1NVSVRFUyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwl3aXBoeSA9ICZyZGV2LT53aXBoeTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKKwkJY29ubmVjdC5ic3NpZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKKwljb25uZWN0LnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCWNvbm5lY3Quc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQljb25uZWN0LmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCWNvbm5lY3QuaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7CisJCWNvbm5lY3QuY2hhbm5lbCA9CisJCQlpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksCisJCQkgICAgbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSk7CisJCWlmICghY29ubmVjdC5jaGFubmVsIHx8CisJCSAgICBjb25uZWN0LmNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChjb25uZWN0LnByaXZhY3kgJiYgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWVNdKSB7CisJCWNvbm5rZXlzID0gbmw4MDIxMV9wYXJzZV9jb25ua2V5cyhyZGV2LAorCQkJCQlpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZU10pOworCQlpZiAoSVNfRVJSKGNvbm5rZXlzKSkgeworCQkJZXJyID0gUFRSX0VSUihjb25ua2V5cyk7CisJCQljb25ua2V5cyA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWVyciA9IGNmZzgwMjExX2Nvbm5lY3QocmRldiwgZGV2LCAmY29ubmVjdCwgY29ubmtleXMpOworCitvdXQ6CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJaWYgKGVycikKKwkJa2ZyZWUoY29ubmtleXMpOworCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX2Rpc2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgZXJyOworCXUxNiByZWFzb247CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0pCisJCXJlYXNvbiA9IFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HOworCWVsc2UKKwkJcmVhc29uID0gbmxhX2dldF91MTYoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSk7CisKKwlpZiAocmVhc29uID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gY2ZnODAyMTFfZGlzY29ubmVjdChyZGV2LCBkZXYsIHJlYXNvbiwgdHJ1ZSk7CisKK291dDoKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlkZXZfcHV0KGRldik7Cit1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV93aXBoeV9uZXRucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisJaW50IGVycjsKKwl1MzIgcGlkOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUElEXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwaWQgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUElEXSk7CisKKwlydG5sX2xvY2soKTsKKworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyhpbmZvKTsKKwlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCWVyciA9IFBUUl9FUlIocmRldik7CisJCWdvdG8gb3V0OworCX0KKworCW5ldCA9IGdldF9uZXRfbnNfYnlfcGlkKHBpZCk7CisJaWYgKElTX0VSUihuZXQpKSB7CisJCWVyciA9IFBUUl9FUlIobmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gMDsKKworCS8qIGNoZWNrIGlmIGFueXRoaW5nIHRvIGRvICovCisJaWYgKG5ldF9lcSh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbmV0KSkKKwkJZ290byBvdXRfcHV0X25ldDsKKworCWVyciA9IGNmZzgwMjExX3N3aXRjaF9uZXRucyhyZGV2LCBuZXQpOworIG91dF9wdXRfbmV0OgorCXB1dF9uZXQobmV0KTsKKyBvdXQ6CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5sODAyMTFfb3BzW10gPSB7CiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1dJUEhZLApAQCAtMzYwMiw2ICs0MjY2LDMyIEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCisjaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREUKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9URVNUTU9ERSwKKwkJLmRvaXQgPSBubDgwMjExX3Rlc3Rtb2RlX2RvLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorI2VuZGlmCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfQ09OTkVDVCwKKwkJLmRvaXQgPSBubDgwMjExX2Nvbm5lY3QsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfRElTQ09OTkVDVCwKKwkJLmRvaXQgPSBubDgwMjExX2Rpc2Nvbm5lY3QsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1dJUEhZX05FVE5TLAorCQkuZG9pdCA9IG5sODAyMTFfd2lwaHlfbmV0bnMsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCiB9Owogc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX21sbWVfbWNncnAgPSB7CiAJLm5hbWUgPSAibWxtZSIsCkBAIC0zNjMzLDcgKzQzMjMsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX2NvbmZpZ19tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX2NvbmZpZ19tY2dycC5pZCwgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBpbnQgbmw4MDIxMV9hZGRfc2Nhbl9yZXEoc3RydWN0IHNrX2J1ZmYgKm1zZywKQEAgLTM2NDMsNiArNDMzNCw4IEBACiAJc3RydWN0IG5sYXR0ciAqbmVzdDsKIAlpbnQgaTsKIAorCUFTU0VSVF9SREVWX0xPQ0socmRldik7CisKIAlpZiAoV0FSTl9PTighcmVxKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTM2NjgsMTEgKzQzNjEsMTEgQEAKIAlyZXR1cm4gLUVOT0JVRlM7CiB9CiAKLXN0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZW1zZyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLAotCQkJCSAgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQkgICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKLQkJCQkgICAgIHUzMiBjbWQpCitzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9zY2FuX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLAorCQkJCSBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKKwkJCQkgdTMyIGNtZCkKIHsKIAl2b2lkICpoZHI7CiAKQEAgLTM2OTMsNiArNDM4NiwyNSBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fc3RhcnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBza19idWZmICptc2c7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwlpZiAobmw4MDIxMV9zZW5kX3NjYW5fbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworfQorCiB2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CkBAIC0zNzAyLDEzICs0NDE0LDE0IEBACiAJaWYgKCFtc2cpCiAJCXJldHVybjsKIAotCWlmIChubDgwMjExX3NlbmRfc2Nhbl9kb25lbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAotCQkJCSAgICAgIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMpIDwgMCkgeworCWlmIChubDgwMjExX3NlbmRfc2Nhbl9tc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCisJCQkJICBOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTKSA8IDApIHsKIAkJbmxtc2dfZnJlZShtc2cpOwogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAogdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKQEAgLTM3MjAsMTMgKzQ0MzMsMTQgQEAKIAlpZiAoIW1zZykKIAkJcmV0dXJuOwogCi0JaWYgKG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCi0JCQkJICAgICAgTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEKSA8IDApIHsKKwlpZiAobmw4MDIxMV9zZW5kX3NjYW5fbXNnKG1zZywgcmRldiwgbmV0ZGV2LCAwLCAwLCAwLAorCQkJCSAgTkw4MDIxMV9DTURfU0NBTl9BQk9SVEVEKSA8IDApIHsKIAkJbmxtc2dfZnJlZShtc2cpOwogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3NjYW5fbWNncnAuaWQsIEdGUF9LRVJORUwpOworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKIH0KIAogLyoKQEAgLTM3NzUsNyArNDQ4OSwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAuaWQsIEdGUF9LRVJORUwpOworCXJjdV9yZWFkX2xvY2soKTsKKwlnZW5sbXNnX211bHRpY2FzdF9hbGxucyhtc2csIDAsIG5sODAyMTFfcmVndWxhdG9yeV9tY2dycC5pZCwKKwkJCQlHRlBfQVRPTUlDKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybjsKIApAQCAtMzc4NywxMiArNDUwNCwxMiBAQAogc3RhdGljIHZvaWQgbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLAotCQkJCSAgICBlbnVtIG5sODAyMTFfY29tbWFuZHMgY21kKQorCQkJCSAgICBlbnVtIG5sODAyMTFfY29tbWFuZHMgY21kLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm1zZzsKIAl2b2lkICpoZHI7CiAKLQltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfQVRPTUlDKTsKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBnZnApOwogCWlmICghbXNnKQogCQlyZXR1cm47CiAKQEAgLTM4MTEsNyArNDUyOCw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfbWxtZV9tY2dycC5pZCwgR0ZQX0FUT01JQyk7CisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX21sbWVfbWNncnAuaWQsIGdmcCk7CiAJcmV0dXJuOwogCiAgbmxhX3B1dF9mYWlsdXJlOgpAQCAtMzgyMCw0MiArNDUzOCw0NSBAQAogfQogCiB2b2lkIG5sODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKKwkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKQogewogCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sCi0JCQkJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFKTsKKwkJCQlOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsIGdmcCk7CiB9CiAKIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsCi0JCQkgICBzaXplX3QgbGVuKQorCQkJICAgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKQogewotCW5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHJkZXYsIG5ldGRldiwgYnVmLCBsZW4sIE5MODAyMTFfQ01EX0FTU09DSUFURSk7CisJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwKKwkJCQlOTDgwMjExX0NNRF9BU1NPQ0lBVEUsIGdmcCk7CiB9CiAKIHZvaWQgbmw4MDIxMV9zZW5kX2RlYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnVmLAorCQkJIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKIHsKIAlubDgwMjExX3NlbmRfbWxtZV9ldmVudChyZGV2LCBuZXRkZXYsIGJ1ZiwgbGVuLAotCQkJCU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFKTsKKwkJCQlOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSwgZ2ZwKTsKIH0KIAogdm9pZCBubDgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1ZiwKLQkJCSAgIHNpemVfdCBsZW4pCisJCQkgICBzaXplX3QgbGVuLCBnZnBfdCBnZnApCiB7CiAJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwKLQkJCQlOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUpOworCQkJCU5MODAyMTFfQ01EX0RJU0FTU09DSUFURSwgZ2ZwKTsKIH0KIAogc3RhdGljIHZvaWQgbmw4MDIxMV9zZW5kX21sbWVfdGltZW91dChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNtZCwKLQkJCQkgICAgICBjb25zdCB1OCAqYWRkcikKKwkJCQkgICAgICBjb25zdCB1OCAqYWRkciwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBza19idWZmICptc2c7CiAJdm9pZCAqaGRyOwogCi0JbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0FUT01JQyk7CisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgZ2ZwKTsKIAlpZiAoIW1zZykKIAkJcmV0dXJuOwogCkBAIC0zODc1LDcgKzQ1OTYsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX21sbWVfbWNncnAuaWQsIEdGUF9BVE9NSUMpOworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOwogCXJldHVybjsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTM4ODQsMTYgKzQ2MDYsMTQ1IEBACiB9CiAKIHZvaWQgbmw4MDIxMV9zZW5kX2F1dGhfdGltZW91dChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmFkZHIpCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmFkZHIsCisJCQkgICAgICAgZ2ZwX3QgZ2ZwKQogewogCW5sODAyMTFfc2VuZF9tbG1lX3RpbWVvdXQocmRldiwgbmV0ZGV2LCBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsCi0JCQkJICBhZGRyKTsKKwkJCQkgIGFkZHIsIGdmcCk7CiB9CiAKIHZvaWQgbmw4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICphZGRyKQorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICphZGRyLAorCQkJCWdmcF90IGdmcCkKIHsKLQlubDgwMjExX3NlbmRfbWxtZV90aW1lb3V0KHJkZXYsIG5ldGRldiwgTkw4MDIxMV9DTURfQVNTT0NJQVRFLCBhZGRyKTsKKwlubDgwMjExX3NlbmRfbWxtZV90aW1lb3V0KHJkZXYsIG5ldGRldiwgTkw4MDIxMV9DTURfQVNTT0NJQVRFLAorCQkJCSAgYWRkciwgZ2ZwKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfY29ubmVjdF9yZXN1bHQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkJIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkJCSBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLAorCQkJCSB1MTYgc3RhdHVzLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIGdmcCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfQ09OTkVDVCk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlpZiAoYnNzaWQpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgYnNzaWQpOworCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9BVFRSX1NUQVRVU19DT0RFLCBzdGF0dXMpOworCWlmIChyZXFfaWUpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfUkVRX0lFLCByZXFfaWVfbGVuLCByZXFfaWUpOworCWlmIChyZXNwX2llKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX1JFU1BfSUUsIHJlc3BfaWVfbGVuLCByZXNwX2llKTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOworCXJldHVybjsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworCit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3JvYW1lZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJzc2lkLAorCQkJIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkJIGNvbnN0IHU4ICpyZXNwX2llLCBzaXplX3QgcmVzcF9pZV9sZW4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgZ2ZwKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCAwLCAwLCAwLCBOTDgwMjExX0NNRF9ST0FNKTsKKwlpZiAoIWhkcikgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgYnNzaWQpOworCWlmIChyZXFfaWUpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfUkVRX0lFLCByZXFfaWVfbGVuLCByZXFfaWUpOworCWlmIChyZXNwX2llKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX1JFU1BfSUUsIHJlc3BfaWVfbGVuLCByZXNwX2llKTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOworCXJldHVybjsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworCit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHJlYXNvbiwKKwkJCSAgICAgICBjb25zdCB1OCAqaWUsIHNpemVfdCBpZV9sZW4sIGJvb2wgZnJvbV9hcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfRElTQ09OTkVDVCk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJkZXYtPndpcGh5X2lkeCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KTsKKwlpZiAoZnJvbV9hcCAmJiByZWFzb24pCisJCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFLCByZWFzb24pOworCWlmIChmcm9tX2FwKQorCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX0FUVFJfRElTQ09OTkVDVEVEX0JZX0FQKTsKKwlpZiAoaWUpCisJCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfSUUsIGllX2xlbiwgaWUpOworCisJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX21sbWVfbWNncnAuaWQsIEdGUF9LRVJORUwpOworCXJldHVybjsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworCiB9CiAKIHZvaWQgbmw4MDIxMV9zZW5kX2lic3NfYnNzaWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LApAQCAtMzkyMiw3ICs0NzczLDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOwogCXJldHVybjsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTM5MzMsMTIgKzQ3ODUsMTIgQEAKIHZvaWQgbmw4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmFkZHIsCiAJCQkJIGVudW0gbmw4MDIxMV9rZXlfdHlwZSBrZXlfdHlwZSwgaW50IGtleV9pZCwKLQkJCQkgY29uc3QgdTggKnRzYykKKwkJCQkgY29uc3QgdTggKnRzYywgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBza19idWZmICptc2c7CiAJdm9pZCAqaGRyOwogCi0JbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0FUT01JQyk7CisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgZ2ZwKTsKIAlpZiAoIW1zZykKIAkJcmV0dXJuOwogCkBAIC0zOTYyLDcgKzQ4MTQsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX21sbWVfbWNncnAuaWQsIEdGUF9BVE9NSUMpOworCWdlbmxtc2dfbXVsdGljYXN0X25ldG5zKHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIDAsCisJCQkJbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOwogCXJldHVybjsKIAogIG5sYV9wdXRfZmFpbHVyZToKQEAgLTQwMTUsNyArNDg2OCwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JZ2VubG1zZ19tdWx0aWNhc3QobXNnLCAwLCBubDgwMjExX3JlZ3VsYXRvcnlfbWNncnAuaWQsIEdGUF9BVE9NSUMpOworCXJjdV9yZWFkX2xvY2soKTsKKwlnZW5sbXNnX211bHRpY2FzdF9hbGxucyhtc2csIDAsIG5sODAyMTFfcmVndWxhdG9yeV9tY2dycC5pZCwKKwkJCQlHRlBfQVRPTUlDKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybjsKIApAQCAtNDA1MSw2ICs0OTA3LDEyIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwogCisjaWZkZWYgQ09ORklHX05MODAyMTFfVEVTVE1PREUKKwllcnIgPSBnZW5sX3JlZ2lzdGVyX21jX2dyb3VwKCZubDgwMjExX2ZhbSwgJm5sODAyMTFfdGVzdG1vZGVfbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiAgZXJyX291dDoKIAlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZubDgwMjExX2ZhbSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaAppbmRleCA1YzEyYWQxLi40NGNjMmE3IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKQEAgLTMsMzkgKzMsNTQgQEAKIAogI2luY2x1ZGUgImNvcmUuaCIKIAotZXh0ZXJuIGludCBubDgwMjExX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBubDgwMjExX2V4aXQodm9pZCk7Ci1leHRlcm4gdm9pZCBubDgwMjExX25vdGlmeV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7Ci1leHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLWV4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7Ci1leHRlcm4gdm9pZCBubDgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKLWV4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9kZWF1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAoraW50IG5sODAyMTFfaW5pdCh2b2lkKTsKK3ZvaWQgbmw4MDIxMV9leGl0KHZvaWQpOwordm9pZCBubDgwMjExX25vdGlmeV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldik7Cit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX3N0YXJ0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Cit2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2RvbmUoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwordm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3ZvaWQgbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7Cit2b2lkIG5sODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX3J4X2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCBnZnBfdCBnZnApOwordm9pZCBubDgwMjExX3NlbmRfZGVhdXRoKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9kaXNhc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX2F1dGhfdGltZW91dChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgICBjb25zdCB1OCAqYWRkciwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX2Fzc29jX3RpbWVvdXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7Ci1leHRlcm4gdm9pZCBubDgwMjExX3NlbmRfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAotCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQkgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX2F1dGhfdGltZW91dChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKLQkJCQkgICAgICBjb25zdCB1OCAqYWRkcik7Ci1leHRlcm4gdm9pZCBubDgwMjExX3NlbmRfYXNzb2NfdGltZW91dChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCi0JCQkJICAgICAgIGNvbnN0IHU4ICphZGRyKTsKLWV4dGVybiB2b2lkCisJCQkJY29uc3QgdTggKmFkZHIsIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJCQkgY29uc3QgdTggKnJlcV9pZSwgc2l6ZV90IHJlcV9pZV9sZW4sCisJCQkJIGNvbnN0IHU4ICpyZXNwX2llLCBzaXplX3QgcmVzcF9pZV9sZW4sCisJCQkJIHUxNiBzdGF0dXMsIGdmcF90IGdmcCk7Cit2b2lkIG5sODAyMTFfc2VuZF9yb2FtZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJCSBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJCSBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLCBnZnBfdCBnZnApOwordm9pZCBubDgwMjExX3NlbmRfZGlzY29ubmVjdGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcmVhc29uLAorCQkJICAgICAgIGNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbiwgYm9vbCBmcm9tX2FwKTsKKwordm9pZAogbmw4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYWRkciwKIAkJCSAgICBlbnVtIG5sODAyMTFfa2V5X3R5cGUga2V5X3R5cGUsCi0JCQkgICAgaW50IGtleV9pZCwgY29uc3QgdTggKnRzYyk7CisJCQkgICAgaW50IGtleV9pZCwgY29uc3QgdTggKnRzYywgZ2ZwX3QgZ2ZwKTsKIAotZXh0ZXJuIHZvaWQKK3ZvaWQKIG5sODAyMTFfc2VuZF9iZWFjb25faGludF9ldmVudChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbF9iZWZvcmUsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsX2FmdGVyKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuYyBiL25ldC93aXJlbGVzcy9yZWcuYwppbmRleCA3NWE0MDZkLi5mMjU2ZGZmIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmMKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5jCkBAIC02Miw2ICs2MiwxNiBAQAogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfcmVnZG9tYWluOwogCisvKgorICogUHJvdGVjdHMgc3RhdGljIHJlZy5jIGNvbXBvbmVudHM6CisgKiAgICAgLSBjZmc4MDIxMV93b3JsZF9yZWdkb20KKyAqICAgICAtIGNmZzgwMjExX3JlZ2RvbQorICogICAgIC0gY291bnRyeV9pZV9yZWdkb21haW4KKyAqICAgICAtIGxhc3RfcmVxdWVzdAorICovCitERUZJTkVfTVVURVgocmVnX211dGV4KTsKKyNkZWZpbmUgYXNzZXJ0X3JlZ19sb2NrKCkgV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZyZWdfbXV0ZXgpKQorCiAvKiBVc2VkIHRvIHF1ZXVlIHVwIHJlZ3VsYXRvcnkgaGludHMgKi8KIHN0YXRpYyBMSVNUX0hFQUQocmVnX3JlcXVlc3RzX2xpc3QpOwogc3RhdGljIHNwaW5sb2NrX3QgcmVnX3JlcXVlc3RzX2xvY2s7CkBAIC0xMTMsMTEgKzEyMyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNmZzgwMjExX3dvcmxkX3JlZ2RvbSA9CiAJJndvcmxkX3JlZ2RvbTsKIAotI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQotc3RhdGljIGNoYXIgKmllZWU4MDIxMV9yZWdkb20gPSAiVVMiOwotI2Vsc2UKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfcmVnZG9tID0gIjAwIjsKLSNlbmRpZgogCiBtb2R1bGVfcGFyYW0oaWVlZTgwMjExX3JlZ2RvbSwgY2hhcnAsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfcmVnZG9tLCAiSUVFRSA4MDIuMTEgcmVndWxhdG9yeSBkb21haW4gY29kZSIpOwpAQCAtMTAxMiw3ICsxMDE4LDYgQEAKIAkJCW1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKSB8IGJ3X2ZsYWdzOwogCQljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gY2hhbi0+b3JpZ19tYWcgPQogCQkJKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKLQkJY2hhbi0+bWF4X2JhbmR3aWR0aCA9IEtIWl9UT19NSFooZGVzaXJlZF9id19raHopOwogCQljaGFuLT5tYXhfcG93ZXIgPSBjaGFuLT5vcmlnX21wd3IgPQogCQkJKGludCkgTUJNX1RPX0RCTShwb3dlcl9ydWxlLT5tYXhfZWlycCk7CiAJCXJldHVybjsKQEAgLTEwMjEsNyArMTAyNiw2IEBACiAJY2hhbi0+ZmxhZ3MgPSBmbGFncyB8IGJ3X2ZsYWdzIHwgbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpOwogCWNoYW4tPm1heF9hbnRlbm5hX2dhaW4gPSBtaW4oY2hhbi0+b3JpZ19tYWcsCiAJCShpbnQpIE1CSV9UT19EQkkocG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2FpbikpOwotCWNoYW4tPm1heF9iYW5kd2lkdGggPSBLSFpfVE9fTUhaKGRlc2lyZWRfYndfa2h6KTsKIAlpZiAoY2hhbi0+b3JpZ19tcHdyKQogCQljaGFuLT5tYXhfcG93ZXIgPSBtaW4oY2hhbi0+b3JpZ19tcHdyLAogCQkJKGludCkgTUJNX1RPX0RCTShwb3dlcl9ydWxlLT5tYXhfZWlycCkpOwpAQCAtMTA2MSwxMCArMTA2NSwxMCBAQAogCiBzdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQogewotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCi0JCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KCZkcnYtPndpcGh5LCBpbml0aWF0b3IpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkKKwkJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoJnJkZXYtPndpcGh5LCBpbml0aWF0b3IpOwogfQogCiBzdGF0aWMgdm9pZCBoYW5kbGVfcmVnX2JlYWNvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LApAQCAtMTI5OCw3ICsxMzAyLDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CiAKLQlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCWFzc2VydF9yZWdfbG9jaygpOwogCiAJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CiAJQlVHX09OKGNoYW5faWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKTsKQEAgLTEzMjMsNyArMTMyNyw2IEBACiAKIAljaGFuLT5mbGFncyB8PSBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncykgfCBid19mbGFnczsKIAljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gKGludCkgTUJJX1RPX0RCSShwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKTsKLQljaGFuLT5tYXhfYmFuZHdpZHRoID0gS0haX1RPX01IWihkZXNpcmVkX2J3X2toeik7CiAJY2hhbi0+bWF4X3Bvd2VyID0gKGludCkgTUJNX1RPX0RCTShwb3dlcl9ydWxlLT5tYXhfZWlycCk7CiB9CiAKQEAgLTEzNDcsMTQgKzEzNTAsMTQgQEAKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJdW5zaWduZWQgaW50IGJhbmRzX3NldCA9IDA7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQogCQkJY29udGludWU7CiAJCWhhbmRsZV9iYW5kX2N1c3RvbSh3aXBoeSwgYmFuZCwgcmVnZCk7CiAJCWJhbmRzX3NldCsrOwogCX0KLQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiAKIAkvKgogCSAqIG5vIHBvaW50IGluIGNhbGxpbmcgdGhpcyBpZiBpdCB3b24ndCBoYXZlIGFueSBlZmZlY3QKQEAgLTE0MjEsNyArMTQyNCw3IEBACiAJCQlpZiAobGFzdF93aXBoeSAhPSB3aXBoeSkgewogCQkJCS8qCiAJCQkJICogVHdvIGNhcmRzIHdpdGggdHdvIEFQcyBjbGFpbWluZyBkaWZmZXJlbnQKLQkJCQkgKiBkaWZmZXJlbnQgQ291bnRyeSBJRSBhbHBoYTJzLiBXZSBjb3VsZAorCQkJCSAqIENvdW50cnkgSUUgYWxwaGEycy4gV2UgY291bGQKIAkJCQkgKiBpbnRlcnNlY3QgdGhlbSwgYnV0IHRoYXQgc2VlbXMgdW5saWtlbHkKIAkJCQkgKiB0byBiZSBjb3JyZWN0LiBSZWplY3Qgc2Vjb25kIG9uZSBmb3Igbm93LgogCQkJCSAqLwpAQCAtMTUwMCw3ICsxNTAzLDcgQEAKICAqIFJldHVybnMgemVybyBpZiBhbGwgd2VudCBmaW5lLCAlLUVBTFJFQURZIGlmIGEgcmVndWxhdG9yeSBkb21haW4gaGFkCiAgKiBhbHJlYWR5IGJlZW4gc2V0IG9yIG90aGVyIHN0YW5kYXJkIGVycm9yIGNvZGVzLgogICoKLSAqIENhbGxlciBtdXN0IGhvbGQgJmNmZzgwMjExX211dGV4CisgKiBDYWxsZXIgbXVzdCBob2xkICZjZmc4MDIxMV9tdXRleCBhbmQgJnJlZ19tdXRleAogICovCiBzdGF0aWMgaW50IF9fcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQkgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnBlbmRpbmdfcmVxdWVzdCkKQEAgLTE1NzUsNiArMTU3OCw3IEBACiAJQlVHX09OKCFyZWdfcmVxdWVzdC0+YWxwaGEyKTsKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOwogCiAJaWYgKHdpcGh5X2lkeF92YWxpZChyZWdfcmVxdWVzdC0+d2lwaHlfaWR4KSkKIAkJd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkocmVnX3JlcXVlc3QtPndpcGh5X2lkeCk7CkBAIC0xNTkwLDYgKzE1OTQsNyBAQAogCWlmIChyID09IC1FQUxSRUFEWSAmJiB3aXBoeSAmJiB3aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkpCiAJCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCByZWdfcmVxdWVzdC0+aW5pdGlhdG9yKTsKIG91dDoKKwltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiB9CiAKQEAgLTE2MTUsOSArMTYyMCwxMyBAQAogLyogUHJvY2Vzc2VzIGJlYWNvbiBoaW50cyAtLSB0aGlzIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY291bnRyeSBJRXMgKi8KIHN0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3BlbmRpbmdfYmVhY29uX2hpbnRzKHZvaWQpCiB7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCByZWdfYmVhY29uICpwZW5kaW5nX2JlYWNvbiwgKnRtcDsKIAorCS8qCisJICogTm8gbmVlZCB0byBob2xkIHRoZSByZWdfbXV0ZXggaGVyZSBhcyB3ZSBqdXN0IHRvdWNoIHdpcGh5cworCSAqIGFuZCBkbyBub3QgcmVhZCBvciBhY2Nlc3MgcmVndWxhdG9yeSB2YXJpYWJsZXMuCisJICovCiAJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJLyogVGhpcyBnb2VzIHRocm91Z2ggdGhlIF9wZW5kaW5nXyBiZWFjb24gbGlzdCAqLwpAQCAtMTYzNCw4ICsxNjQzLDggQEAKIAkJbGlzdF9kZWxfaW5pdCgmcGVuZGluZ19iZWFjb24tPmxpc3QpOwogCiAJCS8qIEFwcGxpZXMgdGhlIGJlYWNvbiBoaW50IHRvIGN1cnJlbnQgd2lwaHlzICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCi0JCQl3aXBoeV91cGRhdGVfbmV3X2JlYWNvbigmZHJ2LT53aXBoeSwgcGVuZGluZ19iZWFjb24pOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpCisJCQl3aXBoeV91cGRhdGVfbmV3X2JlYWNvbigmcmRldi0+d2lwaHksIHBlbmRpbmdfYmVhY29uKTsKIAogCQkvKiBSZW1lbWJlcnMgdGhlIGJlYWNvbiBoaW50IGZvciBuZXcgd2lwaHlzIG9yIHJlZyBjaGFuZ2VzICovCiAJCWxpc3RfYWRkX3RhaWwoJnBlbmRpbmdfYmVhY29uLT5saXN0LCAmcmVnX2JlYWNvbl9saXN0KTsKQEAgLTE3MzksMTIgKzE3NDgsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50KTsKIAorLyogQ2FsbGVyIG11c3QgaG9sZCByZWdfbXV0ZXggKi8KIHN0YXRpYyBib29sIHJlZ19zYW1lX2NvdW50cnlfaWVfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJdTMyIGNvdW50cnlfaWVfY2hlY2tzdW0pCiB7CiAJc3RydWN0IHdpcGh5ICpyZXF1ZXN0X3dpcGh5OwogCi0JYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwlhc3NlcnRfcmVnX2xvY2soKTsKIAogCWlmICh1bmxpa2VseShsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPQogCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkpCkBAIC0xNzY3LDYgKzE3NzcsMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBXZSBob2xkIHdkZXZfbG9jaygpIGhlcmUgc28gd2UgY2Fubm90IGhvbGQgY2ZnODAyMTFfbXV0ZXgoKSBhbmQKKyAqIHRoZXJlZm9yZSBjYW5ub3QgaXRlcmF0ZSBvdmVyIHRoZSByZGV2IGxpc3QgaGVyZS4KKyAqLwogdm9pZCByZWd1bGF0b3J5X2hpbnRfMTFkKHN0cnVjdCB3aXBoeSAqd2lwaHksCiAJCQl1OCAqY291bnRyeV9pZSwKIAkJCXU4IGNvdW50cnlfaWVfbGVuKQpAQCAtMTc3NywxMiArMTc5MSwxMCBAQAogCWVudW0gZW52aXJvbm1lbnRfY2FwIGVudiA9IEVOVklST05fQU5ZOwogCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKIAotCWlmICh1bmxpa2VseSghbGFzdF9yZXF1ZXN0KSkgewotCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKLQkJcmV0dXJuOwotCX0KKwlpZiAodW5saWtlbHkoIWxhc3RfcmVxdWVzdCkpCisJCWdvdG8gb3V0OwogCiAJLyogSUUgbGVuIG11c3QgYmUgZXZlbmx5IGRpdmlzaWJsZSBieSAyICovCiAJaWYgKGNvdW50cnlfaWVfbGVuICYgMHgwMSkKQEAgLTE4MDgsNTQgKzE4MjAsMTQgQEAKIAkJZW52ID0gRU5WSVJPTl9PVVRET09SOwogCiAJLyoKLQkgKiBXZSB3aWxsIHJ1biB0aGlzIGZvciAqZXZlcnkqIGJlYWNvbiBwcm9jZXNzZWQgZm9yIHRoZSBCU1NJRCwgc28KLQkgKiB3ZSBvcHRpbWl6ZSBhbiBlYXJseSBjaGVjayB0byBleGl0IG91dCBlYXJseSBpZiB3ZSBkb24ndCBoYXZlIHRvCi0JICogZG8gYW55dGhpbmcKKwkgKiBXZSB3aWxsIHJ1biB0aGlzIG9ubHkgdXBvbiBhIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbiBvbiBjZmc4MDIxMS4KKwkgKiBXZSBsZWF2ZSBjb25mbGljdCByZXNvbHV0aW9uIHRvIHRoZSB3b3JrcXVldWUsIHdoZXJlIGNhbiBob2xkCisJICogY2ZnODAyMTFfbXV0ZXguCiAJICovCiAJaWYgKGxpa2VseShsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQogCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgotCSAgICB3aXBoeV9pZHhfdmFsaWQobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpKSkgewotCQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydl9sYXN0X2llOwotCi0JCWRydl9sYXN0X2llID0KLQkJCWNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOwotCi0JCS8qCi0JCSAqIExldHMga2VlcCB0aGlzIHNpbXBsZSAtLSB3ZSB0cnVzdCB0aGUgZmlyc3QgQVAKLQkJICogYWZ0ZXIgd2UgaW50ZXJzZWN0IHdpdGggQ1JEQQotCQkgKi8KLQkJaWYgKGxpa2VseSgmZHJ2X2xhc3RfaWUtPndpcGh5ID09IHdpcGh5KSkgewotCQkJLyoKLQkJCSAqIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHRoaXMgd2lwaHkgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAKLQkJCSAqLwotCQkJaWYgKGxpa2VseShhbHBoYTJfZXF1YWwoZHJ2X2xhc3RfaWUtPmNvdW50cnlfaWVfYWxwaGEyLAotCQkJCSAgYWxwaGEyKSAmJgotCQkJCSAgZW52ID09IGRydl9sYXN0X2llLT5lbnYpKSB7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQkvKgotCQkJICogdGhlIHdpcGh5IG1vdmVkIG9uIHRvIGFub3RoZXIgQlNTSUQgb3IgdGhlIEFQCi0JCQkgKiB3YXMgcmVjb25maWd1cmVkLiBYWFg6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZQotCQkJICogY2FzZSB3aGVyZSB0aGUgdXNlciBzdXNwZW5kcyBhbmQgZ29lcyB0byBnb2VzCi0JCQkgKiB0byBhbm90aGVyIGNvdW50cnksIGFuZCB0aGVuIGdldHMgSUVzIGZyb20gYW4KLQkJCSAqIEFQIHdpdGggZGlmZmVyZW50IHNldHRpbmdzCi0JCQkgKi8KLQkJCWdvdG8gb3V0OwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHR3byBzZXBhcmF0ZSB3aXBoeXMgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAKLQkJCSAqLwotCQkJaWYgKGxpa2VseShhbHBoYTJfZXF1YWwoZHJ2X2xhc3RfaWUtPmNvdW50cnlfaWVfYWxwaGEyLAotCQkJCSAgYWxwaGEyKSAmJgotCQkJCSAgZW52ID09IGRydl9sYXN0X2llLT5lbnYpKSB7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQkvKiBXZSBjb3VsZCBwb3RlbnRpYWxseSBpbnRlcnNlY3QgdGhvdWdoICovCi0JCQlnb3RvIG91dDsKLQkJfQotCX0KKwkgICAgd2lwaHlfaWR4X3ZhbGlkKGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KSkpCisJCWdvdG8gb3V0OwogCiAJcmQgPSBjb3VudHJ5X2llXzJfcmQoY291bnRyeV9pZSwgY291bnRyeV9pZV9sZW4sICZjaGVja3N1bSk7CiAJaWYgKCFyZCkKQEAgLTE4OTAsNyArMTg2Miw3IEBACiAJcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNoZWNrc3VtOwogCXJlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gZW52OwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwogCiAJcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHJlcXVlc3QpOwogCkBAIC0xODk5LDkgKzE4NzEsOCBAQAogZnJlZV9yZF9vdXQ6CiAJa2ZyZWUocmQpOwogb3V0OgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50XzExZCk7CiAKIHN0YXRpYyBib29sIGZyZXFfaXNfY2hhbl8xMl8xM18xNCh1MTYgZnJlcSkKIHsKQEAgLTE5OTYsMTQgKzE5NjcsMTQgQEAKIAogCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KIAkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7Ci0JCQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKLQkJCWRydiA9IGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgoCisJCQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJCQlyZGV2ID0gY2ZnODAyMTFfcmRldl9ieV93aXBoeV9pZHgoCiAJCQkJbGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOwotCQkJaWYgKGRydikgeworCQkJaWYgKHJkZXYpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogQ3VycmVudCByZWd1bGF0b3J5ICIKIAkJCQkJImRvbWFpbiB1cGRhdGVkIGJ5IEFQIHRvOiAlYyVjXG4iLAotCQkJCQlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzBdLAotCQkJCQlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzFdKTsKKwkJCQkJcmRldi0+Y291bnRyeV9pZV9hbHBoYTJbMF0sCisJCQkJCXJkZXYtPmNvdW50cnlfaWVfYWxwaGEyWzFdKTsKIAkJCX0gZWxzZQogCQkJCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBDdXJyZW50IHJlZ3VsYXRvcnkgIgogCQkJCQkiZG9tYWluIGludGVyc2VjdGVkOiBcbiIpOwpAQCAtMjA2NCw3ICsyMDM1LDcgQEAKIHN0YXRpYyBpbnQgX19zZXRfcmVnZG9tKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCkKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqaW50ZXJzZWN0ZWRfcmQgPSBOVUxMOwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBOVUxMOwogCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeTsKIAkvKiBTb21lIGJhc2ljIHNhbml0eSBjaGVja3MgZmlyc3QgKi8KIApAQCAtMjIwMywxMSArMjE3NCwxMSBAQAogCWlmICghaW50ZXJzZWN0ZWRfcmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZHJ2ID0gd2lwaHlfdG9fZGV2KHJlcXVlc3Rfd2lwaHkpOworCXJkZXYgPSB3aXBoeV90b19kZXYocmVxdWVzdF93aXBoeSk7CiAKLQlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzBdID0gcmQtPmFscGhhMlswXTsKLQlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzFdID0gcmQtPmFscGhhMlsxXTsKLQlkcnYtPmVudiA9IGxhc3RfcmVxdWVzdC0+Y291bnRyeV9pZV9lbnY7CisJcmRldi0+Y291bnRyeV9pZV9hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOworCXJkZXYtPmNvdW50cnlfaWVfYWxwaGEyWzFdID0gcmQtPmFscGhhMlsxXTsKKwlyZGV2LT5lbnYgPSBsYXN0X3JlcXVlc3QtPmNvdW50cnlfaWVfZW52OwogCiAJQlVHX09OKGludGVyc2VjdGVkX3JkID09IHJkKTsKIApAQCAtMjIzMiwxMCArMjIwMywxMyBAQAogCiAJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKIAorCW11dGV4X2xvY2soJnJlZ19tdXRleCk7CisKIAkvKiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHVwZGF0ZSB0aGUgd2lwaHlzLCB0aGlzIGlzIGRvbmUgYmVsb3cgKi8KIAlyID0gX19zZXRfcmVnZG9tKHJkKTsKIAlpZiAocikgewogCQlrZnJlZShyZCk7CisJCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKIAkJcmV0dXJuIHI7CiAJfQogCkBAIC0yMjUwLDYgKzIyMjQsOCBAQAogCiAJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQobGFzdF9yZXF1ZXN0KTsKIAorCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKKwogCXJldHVybiByOwogfQogCkBAIC0yMjYwLDE2ICsyMjM2LDIwIEBACiAKIAlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOwogCisJbXV0ZXhfbG9jaygmcmVnX211dGV4KTsKKwogCWtmcmVlKHdpcGh5LT5yZWdkKTsKIAogCWlmIChsYXN0X3JlcXVlc3QpCiAJCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOwogCiAJaWYgKCFyZXF1ZXN0X3dpcGh5IHx8IHJlcXVlc3Rfd2lwaHkgIT0gd2lwaHkpCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCA9IFdJUEhZX0lEWF9TVEFMRTsKIAlsYXN0X3JlcXVlc3QtPmNvdW50cnlfaWVfZW52ID0gRU5WSVJPTl9BTlk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwogfQogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpCkBAIC0yMjg4LDIyICsyMjY4LDEyIEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogVXNpbmcgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9cbiIpOwogCXByaW50X3JlZ2RvbWFpbl9pbmZvKGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0JLyoKLQkgKiBUaGUgb2xkIGNvZGUgc3RpbGwgcmVxdWVzdHMgZm9yIGEgbmV3IHJlZ2RvbWFpbiBhbmQgaWYKLQkgKiB5b3UgaGF2ZSBDUkRBIHlvdSBnZXQgaXQgdXBkYXRlZCwgb3RoZXJ3aXNlIHlvdSBnZXQKLQkgKiBzdHVjayB3aXRoIHRoZSBzdGF0aWMgdmFsdWVzLiBTaW5jZSAiRVUiIGlzIG5vdCBhIHZhbGlkCi0JICogSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvZGUgd2UgY2FuJ3QgZXhwZWN0IHVzZXJwYWNlIHRvCi0JICogZ2l2ZSB1cyBhIHJlZ3VsYXRvcnkgZG9tYWluIGZvciBpdC4gV2UgbmVlZCBsYXN0X3JlcXVlc3QKLQkgKiBpbmlpdGFsaXplZCB0aG91Z2ggc28gbGV0cyBqdXN0IHNlbmQgYSByZXF1ZXN0IHdoaWNoIHdlCi0JICoga25vdyB3aWxsIGJlIGlnbm9yZWQuLi4gdGhpcyBjcmFwIHdpbGwgYmUgcmVtb3ZlZCBvbmNlCi0JICogT0xEX1JFRyBkaWVzLgotCSAqLwotCWVyciA9IHJlZ3VsYXRvcnlfaGludF9jb3JlKGllZWU4MDIxMV9yZWdkb20pOwogI2Vsc2UKIAljZmc4MDIxMV9yZWdkb21haW4gPSBjZmc4MDIxMV93b3JsZF9yZWdkb207CiAKLQllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShpZWVlODAyMTFfcmVnZG9tKTsKICNlbmRpZgorCS8qIFdlIGFsd2F5cyB0cnkgdG8gZ2V0IGFuIHVwZGF0ZSBmb3IgdGhlIHN0YXRpYyByZWdkb21haW4gKi8KKwllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMik7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID09IC1FTk9NRU0pCiAJCQlyZXR1cm4gZXJyOwpAQCAtMjMyMiw2ICsyMjkyLDEzIEBACiAjZW5kaWYKIAl9CiAKKwkvKgorCSAqIEZpbmFsbHksIGlmIHRoZSB1c2VyIHNldCB0aGUgbW9kdWxlIHBhcmFtZXRlciB0cmVhdCBpdAorCSAqIGFzIGEgdXNlciBoaW50LgorCSAqLworCWlmICghaXNfd29ybGRfcmVnZG9tKGllZWU4MDIxMV9yZWdkb20pKQorCQlyZWd1bGF0b3J5X2hpbnRfdXNlcihpZWVlODAyMTFfcmVnZG9tKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMzMzLDYgKzIzMTAsNyBAQAogCWNhbmNlbF93b3JrX3N5bmMoJnJlZ193b3JrKTsKIAogCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOwogCiAJcmVzZXRfcmVnZG9tYWlucygpOwogCkBAIC0yMzcxLDUgKzIzNDksNiBAQAogCX0KIAlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOwogCisJbXV0ZXhfdW5sb2NrKCZyZWdfbXV0ZXgpOwogCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5oIGIvbmV0L3dpcmVsZXNzL3JlZy5oCmluZGV4IDRlMTY3YTguLjMzNjJjN2MgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuaAorKysgYi9uZXQvd2lyZWxlc3MvcmVnLmgKQEAgLTM3LDQgKzM3LDE5IEBACiAJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCiAJCQkJCWdmcF90IGdmcCk7CiAKKy8qKgorICogcmVndWxhdG9yeV9oaW50XzExZCAtIGhpbnRzIGEgY291bnRyeSBJRSBhcyBhIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2UgZ2l2aW5nIHRoZSBoaW50ICh1c2VkIG9ubHkgZm9yIHJlcG9ydGluZworICoJY29uZmxpY3RzKQorICogQGNvdW50cnlfaWU6IHBvaW50ZXIgdG8gdGhlIGNvdW50cnkgSUUKKyAqIEBjb3VudHJ5X2llX2xlbjogbGVuZ3RoIG9mIHRoZSBjb3VudHJ5IElFCisgKgorICogV2Ugd2lsbCBpbnRlcnNlY3QgdGhlIHJkIHdpdGggdGhlIHdoYXQgQ1JEQSB0ZWxscyB1cyBzaG91bGQgYXBwbHkKKyAqIGZvciB0aGUgYWxwaGEyIHRoaXMgY291bnRyeSBJRSBiZWxvbmdzIHRvLCB0aGlzIHByZXZlbnRzIEFQcyBmcm9tCisgKiBzZW5kaW5nIHVzIGluY29ycmVjdCBvciBvdXRkYXRlZCBpbmZvcm1hdGlvbiBhZ2FpbnN0IGEgY291bnRyeS4KKyAqLwordm9pZCByZWd1bGF0b3J5X2hpbnRfMTFkKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgdTggKmNvdW50cnlfaWUsCisJCQkgdTggY291bnRyeV9pZV9sZW4pOworCiAjZW5kaWYgIC8qIF9fTkVUX1dJUkVMRVNTX1JFR19IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwppbmRleCA3ZTU5NWNlLi40YzIxMGMyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jCisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmMKQEAgLTE0LDI5ICsxNCw0MSBAQAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgIm5sODAyMTEuaCIKKyNpbmNsdWRlICJ3ZXh0LWNvbXBhdC5oIgogCi0jZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUJKDEwICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUJKDE1ICogSFopCiAKLXZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCkKK3ZvaWQgX19fY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgYm9vbCBsZWFrKQogeworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3Q7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OwogI2VuZGlmCiAKLQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgcmVxdWVzdC0+aWZpZHgpOwotCWlmICghZGV2KQotCQlnb3RvIG91dDsKKwlBU1NFUlRfUkRFVl9MT0NLKHJkZXYpOwogCi0JV0FSTl9PTihyZXF1ZXN0ICE9IHdpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSktPnNjYW5fcmVxKTsKKwlyZXF1ZXN0ID0gcmRldi0+c2Nhbl9yZXE7CiAKLQlpZiAoYWJvcnRlZCkKLQkJbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZCh3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLCBkZXYpOworCWlmICghcmVxdWVzdCkKKwkJcmV0dXJuOworCisJZGV2ID0gcmVxdWVzdC0+ZGV2OworCisJLyoKKwkgKiBUaGlzIG11c3QgYmUgYmVmb3JlIHNlbmRpbmcgdGhlIG90aGVyIGV2ZW50cyEKKwkgKiBPdGhlcndpc2UsIHdwYV9zdXBwbGljYW50IGdldHMgY29tcGxldGVseSBjb25mdXNlZCB3aXRoCisJICogd2V4dCBldmVudHMuCisJICovCisJY2ZnODAyMTFfc21lX3NjYW5fZG9uZShkZXYpOworCisJaWYgKHJlcXVlc3QtPmFib3J0ZWQpCisJCW5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQocmRldiwgZGV2KTsKIAllbHNlCi0JCW5sODAyMTFfc2VuZF9zY2FuX2RvbmUod2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KSwgZGV2KTsKKwkJbmw4MDIxMV9zZW5kX3NjYW5fZG9uZShyZGV2LCBkZXYpOwogCiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAotCWlmICghYWJvcnRlZCkgeworCWlmICghcmVxdWVzdC0+YWJvcnRlZCkgewogCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CiAKIAkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CkBAIC00NSw5ICs1NywzOCBAQAogCiAJZGV2X3B1dChkZXYpOwogCi0gb3V0OgotCXdpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSktPnNjYW5fcmVxID0gTlVMTDsKLQlrZnJlZShyZXF1ZXN0KTsKKwlyZGV2LT5zY2FuX3JlcSA9IE5VTEw7CisKKwkvKgorCSAqIE9LLiBJZiB0aGlzIGlzIGludm9rZWQgd2l0aCAibGVhayIgdGhlbiB3ZSBjYW4ndAorCSAqIGZyZWUgdGhpcyAuLi4gYnV0IHdlJ3ZlIGNsZWFuZWQgaXQgdXAgYW55d2F5LiBUaGUKKwkgKiBkcml2ZXIgZmFpbGVkIHRvIGNhbGwgdGhlIHNjYW5fZG9uZSBjYWxsYmFjaywgc28KKwkgKiBhbGwgYmV0cyBhcmUgb2ZmLCBpdCBtaWdodCBzdGlsbCBiZSB0cnlpbmcgdG8gdXNlCisJICogdGhlIHNjYW4gcmVxdWVzdCBvciBub3QgLi4uIGlmIGl0IGFjY2Vzc2VzIHRoZSBkZXYKKwkgKiBpbiB0aGVyZSAoaXQgc2hvdWxkbid0IGFueXdheSkgdGhlbiBpdCBtYXkgY3Jhc2guCisJICovCisJaWYgKCFsZWFrKQorCQlrZnJlZShyZXF1ZXN0KTsKK30KKwordm9pZCBfX2NmZzgwMjExX3NjYW5fZG9uZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndrKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKworCXJkZXYgPSBjb250YWluZXJfb2Yod2ssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwKKwkJCSAgICBzY2FuX2RvbmVfd2spOworCisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCV9fX2NmZzgwMjExX3NjYW5fZG9uZShyZGV2LCBmYWxzZSk7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7Cit9CisKK3ZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCkKK3sKKwlXQVJOX09OKHJlcXVlc3QgIT0gd2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KS0+c2Nhbl9yZXEpOworCisJcmVxdWVzdC0+YWJvcnRlZCA9IGFib3J0ZWQ7CisJc2NoZWR1bGVfd29yaygmd2lwaHlfdG9fZGV2KHJlcXVlc3QtPndpcGh5KS0+c2Nhbl9kb25lX3drKTsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2Nhbl9kb25lKTsKIApAQCAtNjIsNiArMTAzLDggQEAKIAlpZiAoYnNzLT5pZXNfYWxsb2NhdGVkKQogCQlrZnJlZShic3MtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cyk7CiAKKwlCVUdfT04oYXRvbWljX3JlYWQoJmJzcy0+aG9sZCkpOworCiAJa2ZyZWUoYnNzKTsKIH0KIApAQCAtODQsOCArMTI3LDkgQEAKIAlib29sIGV4cGlyZWQgPSBmYWxzZTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcCwgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGJzcy0+aG9sZCB8fAotCQkgICAgIXRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT50cyArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpKQorCQlpZiAoYXRvbWljX3JlYWQoJmJzcy0+aG9sZCkpCisJCQljb250aW51ZTsKKwkJaWYgKCF0aW1lX2FmdGVyKGppZmZpZXMsIGJzcy0+dHMgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKIAkJCWNvbnRpbnVlOwogCQlsaXN0X2RlbCgmYnNzLT5saXN0KTsKIAkJcmJfZXJhc2UoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7CkBAIC05Nyw3ICsxNDEsNyBAQAogCQlkZXYtPmJzc19nZW5lcmF0aW9uKys7CiB9CiAKLXN0YXRpYyB1OCAqZmluZF9pZSh1OCBudW0sIHU4ICppZXMsIHNpemVfdCBsZW4pCitzdGF0aWMgdTggKmZpbmRfaWUodTggbnVtLCB1OCAqaWVzLCBpbnQgbGVuKQogewogCXdoaWxlIChsZW4gPiAyICYmIGllc1swXSAhPSBudW0pIHsKIAkJbGVuIC09IGllc1sxXSArIDI7CkBAIC01MzksNiArNTgzLDcgQEAKIAlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOwogCiAJbGlzdF9kZWwoJmJzcy0+bGlzdCk7CisJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOwogCXJiX2VyYXNlKCZic3MtPnJibiwgJmRldi0+YnNzX3RyZWUpOwogCiAJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOwpAQCAtNTQ3LDMwICs1OTIsNiBAQAogfQogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV91bmxpbmtfYnNzKTsKIAotdm9pZCBjZmc4MDIxMV9ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpwdWIpCi17Ci0Jc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOwotCi0JaWYgKCFwdWIpCi0JCXJldHVybjsKLQotCWJzcyA9IGNvbnRhaW5lcl9vZihwdWIsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7Ci0JYnNzLT5ob2xkID0gdHJ1ZTsKLX0KLUVYUE9SVF9TWU1CT0woY2ZnODAyMTFfaG9sZF9ic3MpOwotCi12b2lkIGNmZzgwMjExX3VuaG9sZF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqcHViKQotewotCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKLQotCWlmICghcHViKQotCQlyZXR1cm47Ci0KLQlic3MgPSBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOwotCWJzcy0+aG9sZCA9IGZhbHNlOwotfQotRVhQT1JUX1NZTUJPTChjZmc4MDIxMV91bmhvbGRfYnNzKTsKLQogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKIGludCBjZmc4MDIxMV93ZXh0X3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTU4Niw3ICs2MDcsMTAgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FTkVURE9XTjsKIAotCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXYtPmlmaW5kZXgpOworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSkKKwkJd3JlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKKworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXZfbmV0KGRldiksIGRldi0+aWZpbmRleCk7CiAKIAlpZiAoSVNfRVJSKHJkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKQEAgLTU5OCw5ICs2MjIsMTQgQEAKIAogCXdpcGh5ID0gJnJkZXYtPndpcGh5OwogCi0JZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKLQkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKLQkJCW5fY2hhbm5lbHMgKz0gd2lwaHktPmJhbmRzW2JhbmRdLT5uX2NoYW5uZWxzOworCS8qIERldGVybWluZSBudW1iZXIgb2YgY2hhbm5lbHMsIG5lZWRlZCB0byBhbGxvY2F0ZSBjcmVxICovCisJaWYgKHdyZXEgJiYgd3JlcS0+bnVtX2NoYW5uZWxzKQorCQluX2NoYW5uZWxzID0gd3JlcS0+bnVtX2NoYW5uZWxzOworCWVsc2UgeworCQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKQorCQkJaWYgKHdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCQluX2NoYW5uZWxzICs9IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsKKwl9CiAKIAljcmVxID0ga3phbGxvYyhzaXplb2YoKmNyZXEpICsgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9zc2lkKSArCiAJCSAgICAgICBuX2NoYW5uZWxzICogc2l6ZW9mKHZvaWQgKiksCkBAIC02MTEsMjggKzY0MCw0NyBAQAogCX0KIAogCWNyZXEtPndpcGh5ID0gd2lwaHk7Ci0JY3JlcS0+aWZpZHggPSBkZXYtPmlmaW5kZXg7Ci0JY3JlcS0+c3NpZHMgPSAodm9pZCAqKShjcmVxICsgMSk7Ci0JY3JlcS0+Y2hhbm5lbHMgPSAodm9pZCAqKShjcmVxLT5zc2lkcyArIDEpOworCWNyZXEtPmRldiA9IGRldjsKKwkvKiBTU0lEcyBjb21lIGFmdGVyIGNoYW5uZWxzICovCisJY3JlcS0+c3NpZHMgPSAodm9pZCAqKSZjcmVxLT5jaGFubmVsc1tuX2NoYW5uZWxzXTsKIAljcmVxLT5uX2NoYW5uZWxzID0gbl9jaGFubmVsczsKIAljcmVxLT5uX3NzaWRzID0gMTsKIAotCS8qIGFsbCBjaGFubmVscyAqLworCS8qIHRyYW5zbGF0ZSAiU2NhbiBvbiBmcmVxdWVuY2llcyIgcmVxdWVzdCAqLwogCWkgPSAwOwogCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKIAkJaW50IGo7CiAJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQogCQkJY29udGludWU7CiAJCWZvciAoaiA9IDA7IGogPCB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCisJCQkvKiBJZiB3ZSBoYXZlIGEgd2lyZWxlc3MgcmVxdWVzdCBzdHJ1Y3R1cmUgYW5kIHRoZQorCQkJICogd2lyZWxlc3MgcmVxdWVzdCBzcGVjaWZpZXMgZnJlcXVlbmNpZXMsIHRoZW4gc2VhcmNoCisJCQkgKiBmb3IgdGhlIG1hdGNoaW5nIGhhcmR3YXJlIGNoYW5uZWwuCisJCQkgKi8KKwkJCWlmICh3cmVxICYmIHdyZXEtPm51bV9jaGFubmVscykgeworCQkJCWludCBrOworCQkJCWludCB3aXBoeV9mcmVxID0gd2lwaHktPmJhbmRzW2JhbmRdLT5jaGFubmVsc1tqXS5jZW50ZXJfZnJlcTsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgd3JlcS0+bnVtX2NoYW5uZWxzOyBrKyspIHsKKwkJCQkJaW50IHdleHRfZnJlcSA9IHdyZXEtPmNoYW5uZWxfbGlzdFtrXS5tIC8gMTAwMDAwOworCQkJCQlpZiAod2V4dF9mcmVxID09IHdpcGh5X2ZyZXEpCisJCQkJCQlnb3RvIHdleHRfZnJlcV9mb3VuZDsKKwkJCQl9CisJCQkJZ290byB3ZXh0X2ZyZXFfbm90X2ZvdW5kOworCQkJfQorCisJCXdleHRfZnJlcV9mb3VuZDoKIAkJCWNyZXEtPmNoYW5uZWxzW2ldID0gJndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CiAJCQlpKys7CisJCXdleHRfZnJlcV9ub3RfZm91bmQ6IDsKIAkJfQogCX0KIAotCS8qIHRyYW5zbGF0ZSBzY2FuIHJlcXVlc3QgKi8KLQlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkpIHsKLQkJd3JlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKKwkvKiBTZXQgcmVhbCBudW1iZXIgb2YgY2hhbm5lbHMgc3BlY2lmaWVkIGluIGNyZXEtPmNoYW5uZWxzW10gKi8KKwljcmVxLT5uX2NoYW5uZWxzID0gaTsKIAorCS8qIHRyYW5zbGF0ZSAiU2NhbiBmb3IgU1NJRCIgcmVxdWVzdCAqLworCWlmICh3cmVxKSB7CiAJCWlmICh3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7CiAJCQlpZiAod3JlcS0+ZXNzaWRfbGVuID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0OCw5ICs2OTYsMTIgQEAKIAlpZiAoZXJyKSB7CiAJCXJkZXYtPnNjYW5fcmVxID0gTlVMTDsKIAkJa2ZyZWUoY3JlcSk7CisJfSBlbHNlIHsKKwkJbmw4MDIxMV9zZW5kX3NjYW5fc3RhcnQocmRldiwgZGV2KTsKKwkJZGV2X2hvbGQoZGV2KTsKIAl9CiAgb3V0OgotCWNmZzgwMjExX3B1dF9kZXYocmRldik7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3c2Nhbik7CkBAIC05NDEsNyArOTkyLDcgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FTkVURE9XTjsKIAotCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXYtPmlmaW5kZXgpOworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXZfbmV0KGRldiksIGRldi0+aWZpbmRleCk7CiAKIAlpZiAoSVNfRVJSKHJkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKQEAgLTk1OSw3ICsxMDEwLDcgQEAKIAl9CiAKICBvdXQ6Ci0JY2ZnODAyMTFfcHV0X2RldihyZGV2KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKIAlyZXR1cm4gcmVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXdzY2FuKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zbWUuYyBiL25ldC93aXJlbGVzcy9zbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMwNzg4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3NtZS5jCkBAIC0wLDAgKzEsOTMzIEBACisvKgorICogU01FIGNvZGUgZm9yIGNmZzgwMjExJ3MgY29ubmVjdCBlbXVsYXRpb24uCisgKgorICogQ29weXJpZ2h0IDIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSAibmw4MDIxMS5oIgorI2luY2x1ZGUgInJlZy5oIgorCitzdHJ1Y3QgY2ZnODAyMTFfY29ubiB7CisJc3RydWN0IGNmZzgwMjExX2Nvbm5lY3RfcGFyYW1zIHBhcmFtczsKKwkvKiB0aGVzZSBhcmUgc3ViLXN0YXRlcyBvZiB0aGUgX0NPTk5FQ1RJTkcgc21lX3N0YXRlICovCisJZW51bSB7CisJCUNGRzgwMjExX0NPTk5fSURMRSwKKwkJQ0ZHODAyMTFfQ09OTl9TQ0FOTklORywKKwkJQ0ZHODAyMTFfQ09OTl9TQ0FOX0FHQUlOLAorCQlDRkc4MDIxMV9DT05OX0FVVEhFTlRJQ0FURV9ORVhULAorCQlDRkc4MDIxMV9DT05OX0FVVEhFTlRJQ0FUSU5HLAorCQlDRkc4MDIxMV9DT05OX0FTU09DSUFURV9ORVhULAorCQlDRkc4MDIxMV9DT05OX0FTU09DSUFUSU5HLAorCX0gc3RhdGU7CisJdTggYnNzaWRbRVRIX0FMRU5dLCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwl1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKKwlib29sIGF1dG9fYXV0aCwgcHJldl9ic3NpZF92YWxpZDsKK307CisKKworc3RhdGljIGludCBjZmc4MDIxMV9jb25uX3NjYW4oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3Q7CisJaW50IG5fY2hhbm5lbHMsIGVycjsKKworCUFTU0VSVF9SVE5MKCk7CisJQVNTRVJUX1JERVZfTE9DSyhyZGV2KTsKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKHJkZXYtPnNjYW5fcmVxKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHdkZXYtPmNvbm4tPnBhcmFtcy5jaGFubmVsKSB7CisJCW5fY2hhbm5lbHMgPSAxOworCX0gZWxzZSB7CisJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKwkJbl9jaGFubmVscyA9IDA7CisKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgeworCQkJaWYgKCF3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJY29udGludWU7CisJCQluX2NoYW5uZWxzICs9IHdkZXYtPndpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsKKwkJfQorCX0KKwlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpICsgc2l6ZW9mKHJlcXVlc3QtPnNzaWRzWzBdKSArCisJCQkgIHNpemVvZihyZXF1ZXN0LT5jaGFubmVsc1swXSkgKiBuX2NoYW5uZWxzLAorCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHdkZXYtPmNvbm4tPnBhcmFtcy5jaGFubmVsKQorCQlyZXF1ZXN0LT5jaGFubmVsc1swXSA9IHdkZXYtPmNvbm4tPnBhcmFtcy5jaGFubmVsOworCWVsc2UgeworCQlpbnQgaSA9IDAsIGo7CisJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKKworCQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCQlpZiAoIXdkZXYtPndpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaiA9IDA7IGogPCB3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisJCQkgICAgIGkrKywgaisrKQorCQkJCXJlcXVlc3QtPmNoYW5uZWxzW2ldID0KKwkJCQkJJndkZXYtPndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCX0KKwl9CisJcmVxdWVzdC0+bl9jaGFubmVscyA9IG5fY2hhbm5lbHM7CisJcmVxdWVzdC0+c3NpZHMgPSAodm9pZCAqKSZyZXF1ZXN0LT5jaGFubmVsc1tuX2NoYW5uZWxzXTsKKwlyZXF1ZXN0LT5uX3NzaWRzID0gMTsKKworCW1lbWNweShyZXF1ZXN0LT5zc2lkc1swXS5zc2lkLCB3ZGV2LT5jb25uLT5wYXJhbXMuc3NpZCwKKwkJd2Rldi0+Y29ubi0+cGFyYW1zLnNzaWRfbGVuKTsKKwlyZXF1ZXN0LT5zc2lkc1swXS5zc2lkX2xlbiA9IHdkZXYtPmNvbm4tPnBhcmFtcy5zc2lkX2xlbjsKKworCXJlcXVlc3QtPmRldiA9IHdkZXYtPm5ldGRldjsKKwlyZXF1ZXN0LT53aXBoeSA9ICZyZGV2LT53aXBoeTsKKworCXJkZXYtPnNjYW5fcmVxID0gcmVxdWVzdDsKKworCWVyciA9IHJkZXYtPm9wcy0+c2Nhbih3ZGV2LT53aXBoeSwgd2Rldi0+bmV0ZGV2LCByZXF1ZXN0KTsKKwlpZiAoIWVycikgeworCQl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fU0NBTk5JTkc7CisJCW5sODAyMTFfc2VuZF9zY2FuX3N0YXJ0KHJkZXYsIHdkZXYtPm5ldGRldik7CisJCWRldl9ob2xkKHdkZXYtPm5ldGRldik7CisJfSBlbHNlIHsKKwkJcmRldi0+c2Nhbl9yZXEgPSBOVUxMOworCQlrZnJlZShyZXF1ZXN0KTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjZmc4MDIxMV9jb25uX2RvX3dvcmsoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqcGFyYW1zOworCWNvbnN0IHU4ICpwcmV2X2Jzc2lkID0gTlVMTDsKKwlpbnQgZXJyOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmICghd2Rldi0+Y29ubikKKwkJcmV0dXJuIDA7CisKKwlwYXJhbXMgPSAmd2Rldi0+Y29ubi0+cGFyYW1zOworCisJc3dpdGNoICh3ZGV2LT5jb25uLT5zdGF0ZSkgeworCWNhc2UgQ0ZHODAyMTFfQ09OTl9TQ0FOX0FHQUlOOgorCQlyZXR1cm4gY2ZnODAyMTFfY29ubl9zY2FuKHdkZXYpOworCWNhc2UgQ0ZHODAyMTFfQ09OTl9BVVRIRU5USUNBVEVfTkVYVDoKKwkJQlVHX09OKCFyZGV2LT5vcHMtPmF1dGgpOworCQl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fQVVUSEVOVElDQVRJTkc7CisJCXJldHVybiBfX2NmZzgwMjExX21sbWVfYXV0aChyZGV2LCB3ZGV2LT5uZXRkZXYsCisJCQkJCSAgICBwYXJhbXMtPmNoYW5uZWwsIHBhcmFtcy0+YXV0aF90eXBlLAorCQkJCQkgICAgcGFyYW1zLT5ic3NpZCwKKwkJCQkJICAgIHBhcmFtcy0+c3NpZCwgcGFyYW1zLT5zc2lkX2xlbiwKKwkJCQkJICAgIE5VTEwsIDAsCisJCQkJCSAgICBwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuLAorCQkJCQkgICAgcGFyYW1zLT5rZXlfaWR4KTsKKwljYXNlIENGRzgwMjExX0NPTk5fQVNTT0NJQVRFX05FWFQ6CisJCUJVR19PTighcmRldi0+b3BzLT5hc3NvYyk7CisJCXdkZXYtPmNvbm4tPnN0YXRlID0gQ0ZHODAyMTFfQ09OTl9BU1NPQ0lBVElORzsKKwkJaWYgKHdkZXYtPmNvbm4tPnByZXZfYnNzaWRfdmFsaWQpCisJCQlwcmV2X2Jzc2lkID0gd2Rldi0+Y29ubi0+cHJldl9ic3NpZDsKKwkJZXJyID0gX19jZmc4MDIxMV9tbG1lX2Fzc29jKHJkZXYsIHdkZXYtPm5ldGRldiwKKwkJCQkJICAgIHBhcmFtcy0+Y2hhbm5lbCwgcGFyYW1zLT5ic3NpZCwKKwkJCQkJICAgIHByZXZfYnNzaWQsCisJCQkJCSAgICBwYXJhbXMtPnNzaWQsIHBhcmFtcy0+c3NpZF9sZW4sCisJCQkJCSAgICBwYXJhbXMtPmllLCBwYXJhbXMtPmllX2xlbiwKKwkJCQkJICAgIGZhbHNlLCAmcGFyYW1zLT5jcnlwdG8pOworCQlpZiAoZXJyKQorCQkJX19jZmc4MDIxMV9tbG1lX2RlYXV0aChyZGV2LCB3ZGV2LT5uZXRkZXYsIHBhcmFtcy0+YnNzaWQsCisJCQkJCSAgICAgICBOVUxMLCAwLAorCQkJCQkgICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCQlyZXR1cm4gZXJyOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwordm9pZCBjZmc4MDIxMV9jb25uX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UsIGNvbm5fd29yayk7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKworCXJ0bmxfbG9jaygpOworCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKwltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdkZXYsICZyZGV2LT5uZXRkZXZfbGlzdCwgbGlzdCkgeworCQl3ZGV2X2xvY2sod2Rldik7CisJCWlmICghbmV0aWZfcnVubmluZyh3ZGV2LT5uZXRkZXYpKSB7CisJCQl3ZGV2X3VubG9jayh3ZGV2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcpIHsKKwkJCXdkZXZfdW5sb2NrKHdkZXYpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNmZzgwMjExX2Nvbm5fZG9fd29yayh3ZGV2KSkKKwkJCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoCisJCQkJCXdkZXYtPm5ldGRldiwKKwkJCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkLAorCQkJCQlOVUxMLCAwLCBOVUxMLCAwLAorCQkJCQlXTEFOX1NUQVRVU19VTlNQRUNJRklFRF9GQUlMVVJFLAorCQkJCQlmYWxzZSwgTlVMTCk7CisJCXdkZXZfdW5sb2NrKHdkZXYpOworCX0KKworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCXJ0bmxfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBib29sIGNmZzgwMjExX2dldF9jb25uX2JzcyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzOworCXUxNiBjYXBhID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAod2Rldi0+Y29ubi0+cGFyYW1zLnByaXZhY3kpCisJCWNhcGEgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisKKwlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtPndpcGh5LCBOVUxMLCB3ZGV2LT5jb25uLT5wYXJhbXMuYnNzaWQsCisJCQkgICAgICAgd2Rldi0+Y29ubi0+cGFyYW1zLnNzaWQsCisJCQkgICAgICAgd2Rldi0+Y29ubi0+cGFyYW1zLnNzaWRfbGVuLAorCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSwKKwkJCSAgICAgICBjYXBhKTsKKwlpZiAoIWJzcykKKwkJcmV0dXJuIGZhbHNlOworCisJbWVtY3B5KHdkZXYtPmNvbm4tPmJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkID0gd2Rldi0+Y29ubi0+YnNzaWQ7CisJd2Rldi0+Y29ubi0+cGFyYW1zLmNoYW5uZWwgPSBic3MtPmNoYW5uZWw7CisJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX0FVVEhFTlRJQ0FURV9ORVhUOworCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmNvbm5fd29yayk7CisKKwljZmc4MDIxMV9wdXRfYnNzKGJzcyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIF9fY2ZnODAyMTFfc21lX3NjYW5fZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNUSU5HKQorCQlyZXR1cm47CisKKwlpZiAoIXdkZXYtPmNvbm4pCisJCXJldHVybjsKKworCWlmICh3ZGV2LT5jb25uLT5zdGF0ZSAhPSBDRkc4MDIxMV9DT05OX1NDQU5OSU5HICYmCisJICAgIHdkZXYtPmNvbm4tPnN0YXRlICE9IENGRzgwMjExX0NPTk5fU0NBTl9BR0FJTikKKwkJcmV0dXJuOworCisJaWYgKCFjZmc4MDIxMV9nZXRfY29ubl9ic3Mod2RldikpIHsKKwkJLyogbm90IGZvdW5kICovCisJCWlmICh3ZGV2LT5jb25uLT5zdGF0ZSA9PSBDRkc4MDIxMV9DT05OX1NDQU5fQUdBSU4pCisJCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5jb25uX3dvcmspOworCQllbHNlCisJCQlfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KAorCQkJCQl3ZGV2LT5uZXRkZXYsCisJCQkJCXdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCwKKwkJCQkJTlVMTCwgMCwgTlVMTCwgMCwKKwkJCQkJV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKKwkJCQkJZmFsc2UsIE5VTEwpOworCX0KK30KKwordm9pZCBjZmc4MDIxMV9zbWVfc2Nhbl9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCW11dGV4X2xvY2soJndpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSktPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2sod2Rldik7CisJX19jZmc4MDIxMV9zbWVfc2Nhbl9kb25lKGRldik7CisJd2Rldl91bmxvY2sod2Rldik7CisJbXV0ZXhfdW5sb2NrKCZ3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLT5kZXZsaXN0X210eCk7Cit9CisKK3ZvaWQgY2ZnODAyMTFfc21lX3J4X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSB3ZGV2LT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilidWY7CisJdTE2IHN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hdXRoLnN0YXR1c19jb2RlKTsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwkvKiBzaG91bGQgb25seSBSWCBhdXRoIGZyYW1lcyB3aGVuIGNvbm5lY3RpbmcgKi8KKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNUSU5HKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTighd2Rldi0+Y29ubikpCisJCXJldHVybjsKKworCWlmIChzdGF0dXNfY29kZSA9PSBXTEFOX1NUQVRVU19OT1RfU1VQUE9SVEVEX0FVVEhfQUxHICYmCisJICAgIHdkZXYtPmNvbm4tPmF1dG9fYXV0aCAmJgorCSAgICB3ZGV2LT5jb25uLT5wYXJhbXMuYXV0aF90eXBlICE9IE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVApIHsKKwkJLyogc2VsZWN0IGF1dG9tYXRpY2FsbHkgYmV0d2VlbiBvbmx5IG9wZW4sIHNoYXJlZCwgbGVhcCAqLworCQlzd2l0Y2ggKHdkZXYtPmNvbm4tPnBhcmFtcy5hdXRoX3R5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOgorCQkJaWYgKHdkZXYtPmNvbm5lY3Rfa2V5cykKKwkJCQl3ZGV2LT5jb25uLT5wYXJhbXMuYXV0aF90eXBlID0KKwkJCQkJTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOworCQkJZWxzZQorCQkJCXdkZXYtPmNvbm4tPnBhcmFtcy5hdXRoX3R5cGUgPQorCQkJCQlOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOgorCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmF1dGhfdHlwZSA9CisJCQkJTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogaHVoPyAqLworCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmF1dGhfdHlwZSA9CisJCQkJTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKKwkJCWJyZWFrOworCQl9CisJCXdkZXYtPmNvbm4tPnN0YXRlID0gQ0ZHODAyMTFfQ09OTl9BVVRIRU5USUNBVEVfTkVYVDsKKwkJc2NoZWR1bGVfd29yaygmcmRldi0+Y29ubl93b3JrKTsKKwl9IGVsc2UgaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJX19jZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChkZXYsIG1nbXQtPmJzc2lkLCBOVUxMLCAwLCBOVUxMLCAwLAorCQkJCQkgIHN0YXR1c19jb2RlLCBmYWxzZSwgTlVMTCk7CisJfSBlbHNlIGlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcgJiYKKwkJIHdkZXYtPmNvbm4tPnN0YXRlID09IENGRzgwMjExX0NPTk5fQVVUSEVOVElDQVRJTkcpIHsKKwkJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX0FTU09DSUFURV9ORVhUOworCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5jb25uX3dvcmspOworCX0KK30KKworYm9vbCBjZmc4MDIxMV9zbWVfZmFpbGVkX3JlYXNzb2Moc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldikKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKworCWlmIChXQVJOX09OKCF3ZGV2LT5jb25uKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCF3ZGV2LT5jb25uLT5wcmV2X2Jzc2lkX3ZhbGlkKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIFNvbWUgc3R1cGlkIEFQcyBkb24ndCBhY2NlcHQgcmVhc3NvYywgc28gd2UKKwkgKiBuZWVkIHRvIGZhbGwgYmFjayB0byB0cnlpbmcgcmVndWxhciBhc3NvYy4KKwkgKi8KKwl3ZGV2LT5jb25uLT5wcmV2X2Jzc2lkX3ZhbGlkID0gZmFsc2U7CisJd2Rldi0+Y29ubi0+c3RhdGUgPSBDRkc4MDIxMV9DT05OX0FTU09DSUFURV9ORVhUOworCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmNvbm5fd29yayk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJCSAgICAgICBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJCSAgICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLAorCQkJICAgICAgIHUxNiBzdGF0dXMsIGJvb2wgd2V4dGV2LAorCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcykKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXU4ICpjb3VudHJ5X2llOworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisjZW5kaWYKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybjsKKworCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcpCisJCXJldHVybjsKKworCW5sODAyMTFfc2VuZF9jb25uZWN0X3Jlc3VsdCh3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpLCBkZXYsCisJCQkJICAgIGJzc2lkLCByZXFfaWUsIHJlcV9pZV9sZW4sCisJCQkJICAgIHJlc3BfaWUsIHJlc3BfaWVfbGVuLAorCQkJCSAgICBzdGF0dXMsIEdGUF9LRVJORUwpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCWlmICh3ZXh0ZXYpIHsKKwkJaWYgKHJlcV9pZSAmJiBzdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlcV9pZV9sZW47CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVRSUUsICZ3cnF1LCByZXFfaWUpOworCQl9CisKKwkJaWYgKHJlc3BfaWUgJiYgc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJCXdycXUuZGF0YS5sZW5ndGggPSByZXNwX2llX2xlbjsKKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVNQSUUsICZ3cnF1LCByZXNwX2llKTsKKwkJfQorCisJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJaWYgKGJzc2lkICYmIHN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CisJCQltZW1jcHkod2Rldi0+d2V4dC5wcmV2X2Jzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCQkJd2Rldi0+d2V4dC5wcmV2X2Jzc2lkX3ZhbGlkID0gdHJ1ZTsKKwkJfQorCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisJfQorI2VuZGlmCisKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpIHsKKwkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5jdXJyZW50X2Jzcyk7CisJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmN1cnJlbnRfYnNzLT5wdWIpOworCQl3ZGV2LT5jdXJyZW50X2JzcyA9IE5VTEw7CisJfQorCisJaWYgKHdkZXYtPmNvbm4pCisJCXdkZXYtPmNvbm4tPnN0YXRlID0gQ0ZHODAyMTFfQ09OTl9JRExFOworCisJaWYgKHN0YXR1cyAhPSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9JRExFOworCQlpZiAod2Rldi0+Y29ubikKKwkJCWtmcmVlKHdkZXYtPmNvbm4tPmllKTsKKwkJa2ZyZWUod2Rldi0+Y29ubik7CisJCXdkZXYtPmNvbm4gPSBOVUxMOworCQlrZnJlZSh3ZGV2LT5jb25uZWN0X2tleXMpOworCQl3ZGV2LT5jb25uZWN0X2tleXMgPSBOVUxMOworCQl3ZGV2LT5zc2lkX2xlbiA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWJzcykKKwkJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3ZGV2LT53aXBoeSwgTlVMTCwgYnNzaWQsCisJCQkJICAgICAgIHdkZXYtPnNzaWQsIHdkZXYtPnNzaWRfbGVuLAorCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfRVNTLAorCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfRVNTKTsKKworCWlmIChXQVJOX09OKCFic3MpKQorCQlyZXR1cm47CisKKwljZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7CisJd2Rldi0+Y3VycmVudF9ic3MgPSBic3NfZnJvbV9wdWIoYnNzKTsKKworCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9DT05ORUNURUQ7CisJY2ZnODAyMTFfdXBsb2FkX2Nvbm5lY3Rfa2V5cyh3ZGV2KTsKKworCWNvdW50cnlfaWUgPSAodTggKikgaWVlZTgwMjExX2Jzc19nZXRfaWUoYnNzLCBXTEFOX0VJRF9DT1VOVFJZKTsKKworCWlmICghY291bnRyeV9pZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBpZWVlODAyMTFfYnNzX2dldF9pZSgpIGVuc3VyZXMgd2UgY2FuIGFjY2VzczoKKwkgKiAtIGNvdW50cnlfaWUgKyAyLCB0aGUgc3RhcnQgb2YgdGhlIGNvdW50cnkgaWUgZGF0YSwgYW5kCisJICogLSBhbmQgY291bnRyeV9pZVsxXSB3aGljaCBpcyB0aGUgSUUgbGVuZ3RoCisJICovCisJcmVndWxhdG9yeV9oaW50XzExZCh3ZGV2LT53aXBoeSwKKwkJCSAgICBjb3VudHJ5X2llICsgMiwKKwkJCSAgICBjb3VudHJ5X2llWzFdKTsKK30KKwordm9pZCBjZmc4MDIxMV9jb25uZWN0X3Jlc3VsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICAgIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkJICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLAorCQkJICAgICB1MTYgc3RhdHVzLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9ldmVudCAqZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNGRzgwMjExX0RFVl9XQVJOX09OKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVElORyk7CisKKwlldiA9IGt6YWxsb2Moc2l6ZW9mKCpldikgKyByZXFfaWVfbGVuICsgcmVzcF9pZV9sZW4sIGdmcCk7CisJaWYgKCFldikKKwkJcmV0dXJuOworCisJZXYtPnR5cGUgPSBFVkVOVF9DT05ORUNUX1JFU1VMVDsKKwlpZiAoYnNzaWQpCisJCW1lbWNweShldi0+Y3IuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJZXYtPmNyLnJlcV9pZSA9ICgodTggKilldikgKyBzaXplb2YoKmV2KTsKKwlldi0+Y3IucmVxX2llX2xlbiA9IHJlcV9pZV9sZW47CisJbWVtY3B5KCh2b2lkICopZXYtPmNyLnJlcV9pZSwgcmVxX2llLCByZXFfaWVfbGVuKTsKKwlldi0+Y3IucmVzcF9pZSA9ICgodTggKilldikgKyBzaXplb2YoKmV2KSArIHJlcV9pZV9sZW47CisJZXYtPmNyLnJlc3BfaWVfbGVuID0gcmVzcF9pZV9sZW47CisJbWVtY3B5KCh2b2lkICopZXYtPmNyLnJlc3BfaWUsIHJlc3BfaWUsIHJlc3BfaWVfbGVuKTsKKwlldi0+Y3Iuc3RhdHVzID0gc3RhdHVzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZldi0+bGlzdCwgJndkZXYtPmV2ZW50X2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlzY2hlZHVsZV93b3JrKCZyZGV2LT5ldmVudF93b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQpOworCit2b2lkIF9fY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgICAgIGNvbnN0IHU4ICpyZXFfaWUsIHNpemVfdCByZXFfaWVfbGVuLAorCQkgICAgICAgY29uc3QgdTggKnJlc3BfaWUsIHNpemVfdCByZXNwX2llX2xlbikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKyNlbmRpZgorCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKQorCQlyZXR1cm47CisKKwkvKiBpbnRlcm5hbCBlcnJvciAtLSBob3cgZGlkIHdlIGdldCB0byBDT05ORUNURUQgdy9vIEJTUz8gKi8KKwlpZiAoV0FSTl9PTighd2Rldi0+Y3VycmVudF9ic3MpKSB7CisJCXJldHVybjsKKwl9CisKKwljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKKwljZmc4MDIxMV9wdXRfYnNzKCZ3ZGV2LT5jdXJyZW50X2Jzcy0+cHViKTsKKwl3ZGV2LT5jdXJyZW50X2JzcyA9IE5VTEw7CisKKwlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHdkZXYtPndpcGh5LCBOVUxMLCBic3NpZCwKKwkJCSAgICAgICB3ZGV2LT5zc2lkLCB3ZGV2LT5zc2lkX2xlbiwKKwkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfRVNTLCBXTEFOX0NBUEFCSUxJVFlfRVNTKTsKKworCWlmIChXQVJOX09OKCFic3MpKQorCQlyZXR1cm47CisKKwljZmc4MDIxMV9ob2xkX2Jzcyhic3NfZnJvbV9wdWIoYnNzKSk7CisJd2Rldi0+Y3VycmVudF9ic3MgPSBic3NfZnJvbV9wdWIoYnNzKTsKKworCW5sODAyMTFfc2VuZF9yb2FtZWQod2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KSwgd2Rldi0+bmV0ZGV2LCBic3NpZCwKKwkJCSAgICByZXFfaWUsIHJlcV9pZV9sZW4sIHJlc3BfaWUsIHJlc3BfaWVfbGVuLAorCQkJICAgIEdGUF9LRVJORUwpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCWlmIChyZXFfaWUpIHsKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVxX2llX2xlbjsKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudCh3ZGV2LT5uZXRkZXYsIElXRVZBU1NPQ1JFUUlFLAorCQkJCSAgICAmd3JxdSwgcmVxX2llKTsKKwl9CisKKwlpZiAocmVzcF9pZSkgeworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCXdycXUuZGF0YS5sZW5ndGggPSByZXNwX2llX2xlbjsKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudCh3ZGV2LT5uZXRkZXYsIElXRVZBU1NPQ1JFU1BJRSwKKwkJCQkgICAgJndycXUsIHJlc3BfaWUpOworCX0KKworCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkod2Rldi0+d2V4dC5wcmV2X2Jzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCXdkZXYtPndleHQucHJldl9ic3NpZF92YWxpZCA9IHRydWU7CisJd2lyZWxlc3Nfc2VuZF9ldmVudCh3ZGV2LT5uZXRkZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworI2VuZGlmCit9CisKK3ZvaWQgY2ZnODAyMTFfcm9hbWVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpic3NpZCwKKwkJICAgICBjb25zdCB1OCAqcmVxX2llLCBzaXplX3QgcmVxX2llX2xlbiwKKwkJICAgICBjb25zdCB1OCAqcmVzcF9pZSwgc2l6ZV90IHJlc3BfaWVfbGVuLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9ldmVudCAqZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNGRzgwMjExX0RFVl9XQVJOX09OKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKTsKKworCWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSArIHJlcV9pZV9sZW4gKyByZXNwX2llX2xlbiwgZ2ZwKTsKKwlpZiAoIWV2KQorCQlyZXR1cm47CisKKwlldi0+dHlwZSA9IEVWRU5UX1JPQU1FRDsKKwltZW1jcHkoZXYtPnJtLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCWV2LT5ybS5yZXFfaWUgPSAoKHU4ICopZXYpICsgc2l6ZW9mKCpldik7CisJZXYtPnJtLnJlcV9pZV9sZW4gPSByZXFfaWVfbGVuOworCW1lbWNweSgodm9pZCAqKWV2LT5ybS5yZXFfaWUsIHJlcV9pZSwgcmVxX2llX2xlbik7CisJZXYtPnJtLnJlc3BfaWUgPSAoKHU4ICopZXYpICsgc2l6ZW9mKCpldikgKyByZXFfaWVfbGVuOworCWV2LT5ybS5yZXNwX2llX2xlbiA9IHJlc3BfaWVfbGVuOworCW1lbWNweSgodm9pZCAqKWV2LT5ybS5yZXNwX2llLCByZXNwX2llLCByZXNwX2llX2xlbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmV2LT5saXN0LCAmd2Rldi0+ZXZlbnRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmV2ZW50X3dvcmspOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9yb2FtZWQpOworCit2b2lkIF9fY2ZnODAyMTFfZGlzY29ubmVjdGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICppZSwKKwkJCSAgICAgc2l6ZV90IGllX2xlbiwgdTE2IHJlYXNvbiwgYm9vbCBmcm9tX2FwKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlpbnQgaTsKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCisJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworI2VuZGlmCisKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm47CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9DT05ORUNURUQpCisJCXJldHVybjsKKworCWlmICh3ZGV2LT5jdXJyZW50X2JzcykgeworCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmN1cnJlbnRfYnNzKTsKKwkJY2ZnODAyMTFfcHV0X2Jzcygmd2Rldi0+Y3VycmVudF9ic3MtPnB1Yik7CisJfQorCisJd2Rldi0+Y3VycmVudF9ic3MgPSBOVUxMOworCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9JRExFOworCXdkZXYtPnNzaWRfbGVuID0gMDsKKworCWlmICh3ZGV2LT5jb25uKSB7CisJCWNvbnN0IHU4ICpic3NpZDsKKwkJaW50IHJldDsKKworCQlrZnJlZSh3ZGV2LT5jb25uLT5pZSk7CisJCXdkZXYtPmNvbm4tPmllID0gTlVMTDsKKwkJa2ZyZWUod2Rldi0+Y29ubik7CisJCXdkZXYtPmNvbm4gPSBOVUxMOworCisJCS8qCisJCSAqIElmIHRoaXMgZGlzY29ubmVjdCB3YXMgZHVlIHRvIGEgZGlzYXNzb2MsIHdlCisJCSAqIHdlIG1pZ2h0IHN0aWxsIGhhdmUgYW4gYXV0aCBCU1MgYXJvdW5kLiBGb3IKKwkJICogdGhlIHVzZXJzcGFjZSBTTUUgdGhhdCdzIGN1cnJlbnRseSBleHBlY3RlZCwKKwkJICogYnV0IGZvciB0aGUga2VybmVsIFNNRSAobmw4MDIxMSBDT05ORUNUIG9yCisJCSAqIHdpcmVsZXNzIGV4dGVuc2lvbnMpIHdlIHdhbnQgdG8gY2xlYXIgdXAgYWxsCisJCSAqIHN0YXRlLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKKwkJCWlmICghd2Rldi0+YXV0aF9ic3Nlc1tpXSkKKwkJCQljb250aW51ZTsKKwkJCWJzc2lkID0gd2Rldi0+YXV0aF9ic3Nlc1tpXS0+cHViLmJzc2lkOworCQkJcmV0ID0gX19jZmc4MDIxMV9tbG1lX2RlYXV0aChyZGV2LCBkZXYsIGJzc2lkLCBOVUxMLCAwLAorCQkJCQkJV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOworCQkJV0FSTihyZXQsICJkZWF1dGggZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJfQorCX0KKworCW5sODAyMTFfc2VuZF9kaXNjb25uZWN0ZWQocmRldiwgZGV2LCByZWFzb24sIGllLCBpZV9sZW4sIGZyb21fYXApOworCisJLyoKKwkgKiBEZWxldGUgYWxsIHRoZSBrZXlzIC4uLiBwYWlyd2lzZSBrZXlzIGNhbid0IHJlYWxseQorCSAqIGV4aXN0IGFueSBtb3JlIGFueXdheSwgYnV0IGRlZmF1bHQga2V5cyBtaWdodC4KKwkgKi8KKwlpZiAocmRldi0+b3BzLT5kZWxfa2V5KQorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJcmRldi0+b3BzLT5kZWxfa2V5KHdkZXYtPndpcGh5LCBkZXYsIGksIE5VTEwpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKyNlbmRpZgorfQorCit2b2lkIGNmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcmVhc29uLAorCQkJICAgdTggKmllLCBzaXplX3QgaWVfbGVuLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9ldmVudCAqZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUNGRzgwMjExX0RFVl9XQVJOX09OKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKTsKKworCWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSArIGllX2xlbiwgZ2ZwKTsKKwlpZiAoIWV2KQorCQlyZXR1cm47CisKKwlldi0+dHlwZSA9IEVWRU5UX0RJU0NPTk5FQ1RFRDsKKwlldi0+ZGMuaWUgPSAoKHU4ICopZXYpICsgc2l6ZW9mKCpldik7CisJZXYtPmRjLmllX2xlbiA9IGllX2xlbjsKKwltZW1jcHkoKHZvaWQgKilldi0+ZGMuaWUsIGllLCBpZV9sZW4pOworCWV2LT5kYy5yZWFzb24gPSByZWFzb247CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmV2LT5saXN0LCAmd2Rldi0+ZXZlbnRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCXNjaGVkdWxlX3dvcmsoJnJkZXYtPmV2ZW50X3dvcmspOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9kaXNjb25uZWN0ZWQpOworCitpbnQgX19jZmc4MDIxMV9jb25uZWN0KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKmNvbm5lY3QsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2FjaGVkX2tleXMgKmNvbm5rZXlzLAorCQkgICAgICAgY29uc3QgdTggKnByZXZfYnNzaWQpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJaW50IGVycjsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9JRExFKQorCQlyZXR1cm4gLUVBTFJFQURZOworCisJY2hhbiA9IHJkZXZfZml4ZWRfY2hhbm5lbChyZGV2LCB3ZGV2KTsKKwlpZiAoY2hhbiAmJiBjaGFuICE9IGNvbm5lY3QtPmNoYW5uZWwpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoV0FSTl9PTih3ZGV2LT5jb25uZWN0X2tleXMpKSB7CisJCWtmcmVlKHdkZXYtPmNvbm5lY3Rfa2V5cyk7CisJCXdkZXYtPmNvbm5lY3Rfa2V5cyA9IE5VTEw7CisJfQorCisJaWYgKGNvbm5rZXlzICYmIGNvbm5rZXlzLT5kZWYgPj0gMCkgeworCQlpbnQgaWR4OworCQl1MzIgY2lwaGVyOworCisJCWlkeCA9IGNvbm5rZXlzLT5kZWY7CisJCWNpcGhlciA9IGNvbm5rZXlzLT5wYXJhbXNbaWR4XS5jaXBoZXI7CisJCS8qIElmIGdpdmVuIGEgV0VQIGtleSB3ZSBtYXkgbmVlZCBpdCBmb3Igc2hhcmVkIGtleSBhdXRoICovCisJCWlmIChjaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKKwkJICAgIGNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQpIHsKKwkJCWNvbm5lY3QtPmtleV9pZHggPSBpZHg7CisJCQljb25uZWN0LT5rZXkgPSBjb25ua2V5cy0+cGFyYW1zW2lkeF0ua2V5OworCQkJY29ubmVjdC0+a2V5X2xlbiA9IGNvbm5rZXlzLT5wYXJhbXNbaWR4XS5rZXlfbGVuOworCisJCQkvKgorCQkJICogSWYgY2lwaGVycyBhcmUgbm90IHNldCAoZS5nLiB3aGVuIGdvaW5nIHRocm91Z2gKKwkJCSAqIGl3Y29uZmlnKSwgd2UgaGF2ZSB0byBzZXQgdGhlbSBhcHByb3ByaWF0ZWx5IGhlcmUuCisJCQkgKi8KKwkJCWlmIChjb25uZWN0LT5jcnlwdG8uY2lwaGVyX2dyb3VwID09IDApCisJCQkJY29ubmVjdC0+Y3J5cHRvLmNpcGhlcl9ncm91cCA9IGNpcGhlcjsKKworCQkJaWYgKGNvbm5lY3QtPmNyeXB0by5uX2NpcGhlcnNfcGFpcndpc2UgPT0gMCkgeworCQkJCWNvbm5lY3QtPmNyeXB0by5uX2NpcGhlcnNfcGFpcndpc2UgPSAxOworCQkJCWNvbm5lY3QtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlWzBdID0gY2lwaGVyOworCQkJfQorCQl9CisJfQorCisJaWYgKCFyZGV2LT5vcHMtPmNvbm5lY3QpIHsKKwkJaWYgKCFyZGV2LT5vcHMtPmF1dGggfHwgIXJkZXYtPm9wcy0+YXNzb2MpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkJaWYgKFdBUk5fT04od2Rldi0+Y29ubikpCisJCQlyZXR1cm4gLUVJTlBST0dSRVNTOworCisJCXdkZXYtPmNvbm4gPSBremFsbG9jKHNpemVvZigqd2Rldi0+Y29ubiksIEdGUF9LRVJORUwpOworCQlpZiAoIXdkZXYtPmNvbm4pCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQkvKgorCQkgKiBDb3B5IGFsbCBwYXJhbWV0ZXJzLCBhbmQgdHJlYXQgZXhwbGljaXRseSBJRXMsIEJTU0lELCBTU0lELgorCQkgKi8KKwkJbWVtY3B5KCZ3ZGV2LT5jb25uLT5wYXJhbXMsIGNvbm5lY3QsIHNpemVvZigqY29ubmVjdCkpOworCQlpZiAoY29ubmVjdC0+YnNzaWQpIHsKKwkJCXdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCA9IHdkZXYtPmNvbm4tPmJzc2lkOworCQkJbWVtY3B5KHdkZXYtPmNvbm4tPmJzc2lkLCBjb25uZWN0LT5ic3NpZCwgRVRIX0FMRU4pOworCQl9CisKKwkJaWYgKGNvbm5lY3QtPmllKSB7CisJCQl3ZGV2LT5jb25uLT5pZSA9IGttZW1kdXAoY29ubmVjdC0+aWUsIGNvbm5lY3QtPmllX2xlbiwKKwkJCQkJCUdGUF9LRVJORUwpOworCQkJd2Rldi0+Y29ubi0+cGFyYW1zLmllID0gd2Rldi0+Y29ubi0+aWU7CisJCQlpZiAoIXdkZXYtPmNvbm4tPmllKSB7CisJCQkJa2ZyZWUod2Rldi0+Y29ubik7CisJCQkJd2Rldi0+Y29ubiA9IE5VTEw7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKworCQlpZiAoY29ubmVjdC0+YXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfQVVUT01BVElDKSB7CisJCQl3ZGV2LT5jb25uLT5hdXRvX2F1dGggPSB0cnVlOworCQkJLyogc3RhcnQgd2l0aCBvcGVuIHN5c3RlbSAuLi4gc2hvdWxkIG1vc3RseSB3b3JrICovCisJCQl3ZGV2LT5jb25uLT5wYXJhbXMuYXV0aF90eXBlID0KKwkJCQlOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOworCQl9IGVsc2UgeworCQkJd2Rldi0+Y29ubi0+YXV0b19hdXRoID0gZmFsc2U7CisJCX0KKworCQltZW1jcHkod2Rldi0+c3NpZCwgY29ubmVjdC0+c3NpZCwgY29ubmVjdC0+c3NpZF9sZW4pOworCQl3ZGV2LT5zc2lkX2xlbiA9IGNvbm5lY3QtPnNzaWRfbGVuOworCQl3ZGV2LT5jb25uLT5wYXJhbXMuc3NpZCA9IHdkZXYtPnNzaWQ7CisJCXdkZXYtPmNvbm4tPnBhcmFtcy5zc2lkX2xlbiA9IGNvbm5lY3QtPnNzaWRfbGVuOworCisJCS8qIGRvbid0IGNhcmUgYWJvdXQgcmVzdWx0IC0tIGJ1dCBmaWxsIGJzc2lkICYgY2hhbm5lbCAqLworCQlpZiAoIXdkZXYtPmNvbm4tPnBhcmFtcy5ic3NpZCB8fCAhd2Rldi0+Y29ubi0+cGFyYW1zLmNoYW5uZWwpCisJCQljZmc4MDIxMV9nZXRfY29ubl9ic3Mod2Rldik7CisKKwkJd2Rldi0+c21lX3N0YXRlID0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkc7CisJCXdkZXYtPmNvbm5lY3Rfa2V5cyA9IGNvbm5rZXlzOworCisJCWlmIChwcmV2X2Jzc2lkKSB7CisJCQltZW1jcHkod2Rldi0+Y29ubi0+cHJldl9ic3NpZCwgcHJldl9ic3NpZCwgRVRIX0FMRU4pOworCQkJd2Rldi0+Y29ubi0+cHJldl9ic3NpZF92YWxpZCA9IHRydWU7CisJCX0KKworCQkvKiB3ZSdyZSBnb29kIGlmIHdlIGhhdmUgYm90aCBCU1NJRCBhbmQgY2hhbm5lbCAqLworCQlpZiAod2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkICYmIHdkZXYtPmNvbm4tPnBhcmFtcy5jaGFubmVsKSB7CisJCQl3ZGV2LT5jb25uLT5zdGF0ZSA9IENGRzgwMjExX0NPTk5fQVVUSEVOVElDQVRFX05FWFQ7CisJCQllcnIgPSBjZmc4MDIxMV9jb25uX2RvX3dvcmsod2Rldik7CisJCX0gZWxzZSB7CisJCQkvKiBvdGhlcndpc2Ugd2UnbGwgbmVlZCB0byBzY2FuIGZvciB0aGUgQVAgZmlyc3QgKi8KKwkJCWVyciA9IGNmZzgwMjExX2Nvbm5fc2Nhbih3ZGV2KTsKKwkJCS8qCisJCQkgKiBJZiB3ZSBjYW4ndCBzY2FuIHJpZ2h0IG5vdywgdGhlbiB3ZSBuZWVkIHRvIHNjYW4gYWdhaW4KKwkJCSAqIGFmdGVyIHRoZSBjdXJyZW50IHNjYW4gZmluaXNoZWQsIHNpbmNlIHRoZSBwYXJhbWV0ZXJzCisJCQkgKiBjaGFuZ2VkICh1bmxlc3Mgd2UgZmluZCBhIGdvb2QgQVAgYW55d2F5KS4KKwkJCSAqLworCQkJaWYgKGVyciA9PSAtRUJVU1kpIHsKKwkJCQllcnIgPSAwOworCQkJCXdkZXYtPmNvbm4tPnN0YXRlID0gQ0ZHODAyMTFfQ09OTl9TQ0FOX0FHQUlOOworCQkJfQorCQl9CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlKHdkZXYtPmNvbm4tPmllKTsKKwkJCWtmcmVlKHdkZXYtPmNvbm4pOworCQkJd2Rldi0+Y29ubiA9IE5VTEw7CisJCQl3ZGV2LT5zbWVfc3RhdGUgPSBDRkc4MDIxMV9TTUVfSURMRTsKKwkJCXdkZXYtPmNvbm5lY3Rfa2V5cyA9IE5VTEw7CisJCQl3ZGV2LT5zc2lkX2xlbiA9IDA7CisJCX0KKworCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9DT05ORUNUSU5HOworCQl3ZGV2LT5jb25uZWN0X2tleXMgPSBjb25ua2V5czsKKwkJZXJyID0gcmRldi0+b3BzLT5jb25uZWN0KCZyZGV2LT53aXBoeSwgZGV2LCBjb25uZWN0KTsKKwkJaWYgKGVycikgeworCQkJd2Rldi0+Y29ubmVjdF9rZXlzID0gTlVMTDsKKwkJCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9JRExFOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCW1lbWNweSh3ZGV2LT5zc2lkLCBjb25uZWN0LT5zc2lkLCBjb25uZWN0LT5zc2lkX2xlbik7CisJCXdkZXYtPnNzaWRfbGVuID0gY29ubmVjdC0+c3NpZF9sZW47CisKKwkJcmV0dXJuIDA7CisJfQorfQorCitpbnQgY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfY29ubmVjdF9wYXJhbXMgKmNvbm5lY3QsCisJCSAgICAgc3RydWN0IGNmZzgwMjExX2NhY2hlZF9rZXlzICpjb25ua2V5cykKK3sKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCWVyciA9IF9fY2ZnODAyMTFfY29ubmVjdChyZGV2LCBkZXYsIGNvbm5lY3QsIGNvbm5rZXlzLCBOVUxMKTsKKwl3ZGV2X3VubG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCisJcmV0dXJuIGVycjsKK30KKworaW50IF9fY2ZnODAyMTFfZGlzY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiByZWFzb24sIGJvb2wgd2V4dGV2KQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJaW50IGVycjsKKworCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CisKKwlpZiAod2Rldi0+c21lX3N0YXRlID09IENGRzgwMjExX1NNRV9JRExFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWtmcmVlKHdkZXYtPmNvbm5lY3Rfa2V5cyk7CisJd2Rldi0+Y29ubmVjdF9rZXlzID0gTlVMTDsKKworCWlmICghcmRldi0+b3BzLT5kaXNjb25uZWN0KSB7CisJCWlmICghcmRldi0+b3BzLT5kZWF1dGgpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwkJLyogd2FzIGl0IGNvbm5lY3RlZCBieSB1c2Vyc3BhY2UgU01FPyAqLworCQlpZiAoIXdkZXYtPmNvbm4pIHsKKwkJCWNmZzgwMjExX21sbWVfZG93bihyZGV2LCBkZXYpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAod2Rldi0+c21lX3N0YXRlID09IENGRzgwMjExX1NNRV9DT05ORUNUSU5HICYmCisJCSAgICAod2Rldi0+Y29ubi0+c3RhdGUgPT0gQ0ZHODAyMTFfQ09OTl9TQ0FOTklORyB8fAorCQkgICAgIHdkZXYtPmNvbm4tPnN0YXRlID09IENGRzgwMjExX0NPTk5fU0NBTl9BR0FJTikpIHsKKwkJCXdkZXYtPnNtZV9zdGF0ZSA9IENGRzgwMjExX1NNRV9JRExFOworCQkJa2ZyZWUod2Rldi0+Y29ubi0+aWUpOworCQkJa2ZyZWUod2Rldi0+Y29ubik7CisJCQl3ZGV2LT5jb25uID0gTlVMTDsKKwkJCXdkZXYtPnNzaWRfbGVuID0gMDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyogd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkIG11c3QgYmUgc2V0IGlmID4gU0NBTk5JTkcgKi8KKwkJZXJyID0gX19jZmc4MDIxMV9tbG1lX2RlYXV0aChyZGV2LCBkZXYsCisJCQkJCSAgICAgd2Rldi0+Y29ubi0+cGFyYW1zLmJzc2lkLAorCQkJCQkgICAgIE5VTEwsIDAsIHJlYXNvbik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHJkZXYtPm9wcy0+ZGlzY29ubmVjdCgmcmRldi0+d2lwaHksIGRldiwgcmVhc29uKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSA9PSBDRkc4MDIxMV9TTUVfQ09OTkVDVEVEKQorCQlfX2NmZzgwMjExX2Rpc2Nvbm5lY3RlZChkZXYsIE5VTEwsIDAsIDAsIGZhbHNlKTsKKwllbHNlIGlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RJTkcpCisJCV9fY2ZnODAyMTFfY29ubmVjdF9yZXN1bHQoZGV2LCBOVUxMLCBOVUxMLCAwLCBOVUxMLCAwLAorCQkJCQkgIFdMQU5fU1RBVFVTX1VOU1BFQ0lGSUVEX0ZBSUxVUkUsCisJCQkJCSAgd2V4dGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitpbnQgY2ZnODAyMTFfZGlzY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJdTE2IHJlYXNvbiwgYm9vbCB3ZXh0ZXYpCit7CisJaW50IGVycjsKKworCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCWVyciA9IF9fY2ZnODAyMTFfZGlzY29ubmVjdChyZGV2LCBkZXYsIHJlYXNvbiwgd2V4dGV2KTsKKwl3ZGV2X3VubG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBjZmc4MDIxMV9zbWVfZGlzYXNzb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKKworCWlmICghd2Rldi0+Y29ubikKKwkJcmV0dXJuOworCisJaWYgKHdkZXYtPmNvbm4tPnN0YXRlID09IENGRzgwMjExX0NPTk5fSURMRSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBPaywgc28gdGhlIGFzc29jaWF0aW9uIHdhcyBtYWRlIGJ5IHRoaXMgU01FIC0tIHdlIGRvbid0CisJICogd2FudCBpdCBhbnkgbW9yZSBzbyBkZWF1dGhlbnRpY2F0ZSB0b28uCisJICovCisKKwlpZiAoIXdkZXYtPmF1dGhfYnNzZXNbaWR4XSkKKwkJcmV0dXJuOworCisJbWVtY3B5KGJzc2lkLCB3ZGV2LT5hdXRoX2Jzc2VzW2lkeF0tPnB1Yi5ic3NpZCwgRVRIX0FMRU4pOworCWlmIChfX2NmZzgwMjExX21sbWVfZGVhdXRoKHJkZXYsIGRldiwgYnNzaWQsCisJCQkJICAgTlVMTCwgMCwgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpKSB7CisJCS8qIHdoYXRldmVyIC0tIGFzc3VtZSBnb25lIGFueXdheSAqLworCQljZmc4MDIxMV91bmhvbGRfYnNzKHdkZXYtPmF1dGhfYnNzZXNbaWR4XSk7CisJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGhfYnNzZXNbaWR4XS0+cHViKTsKKwkJd2Rldi0+YXV0aF9ic3Nlc1tpZHhdID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCAyNTU1MDY5Li4zZmMyZGY4IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCisrKyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTE0MSw5ICsxNDEsMTIgQEAKIAkJCXNldF9tYW5kYXRvcnlfZmxhZ3NfYmFuZCh3aXBoeS0+YmFuZHNbYmFuZF0sIGJhbmQpOwogfQogCi1pbnQgY2ZnODAyMTFfdmFsaWRhdGVfa2V5X3NldHRpbmdzKHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMsIGludCBrZXlfaWR4LAoraW50IGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcywgaW50IGtleV9pZHgsCiAJCQkJICAgY29uc3QgdTggKm1hY19hZGRyKQogeworCWludCBpOworCiAJaWYgKGtleV9pZHggPiA1KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTk3LDYgKzIwMCwxMiBAQAogCQl9CiAJfQogCisJZm9yIChpID0gMDsgaSA8IHJkZXYtPndpcGh5Lm5fY2lwaGVyX3N1aXRlczsgaSsrKQorCQlpZiAocGFyYW1zLT5jaXBoZXIgPT0gcmRldi0+d2lwaHkuY2lwaGVyX3N1aXRlc1tpXSkKKwkJCWJyZWFrOworCWlmIChpID09IHJkZXYtPndpcGh5Lm5fY2lwaGVyX3N1aXRlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY1LDExICsyNzQsMTEgQEAKIAlzd2l0Y2ggKGFlKSB7CiAJY2FzZSAwOgogCQlyZXR1cm4gNjsKLQljYXNlIDE6CisJY2FzZSBNRVNIX0ZMQUdTX0FFX0E0OgogCQlyZXR1cm4gMTI7Ci0JY2FzZSAyOgorCWNhc2UgTUVTSF9GTEFHU19BRV9BNV9BNjoKIAkJcmV0dXJuIDE4OwotCWNhc2UgMzoKKwljYXNlIChNRVNIX0ZMQUdTX0FFX0E0IHwgTUVTSF9GTEFHU19BRV9BNV9BNik6CiAJCXJldHVybiAyNDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gNjsKQEAgLTMyNCwxMCArMzMzLDE4IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgotCQlpZiAoaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKKwkJaWYgKChpZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCQkgICAgaWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHx8CiAJCSAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZHN0KSAmJgogCQkgICAgICFjb21wYXJlX2V0aGVyX2FkZHIoc3JjLCBhZGRyKSkpCiAJCQlyZXR1cm4gLTE7CisJCWlmIChpZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgeworCQkJc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoZHIgPQorCQkJCShzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKikgKHNrYi0+ZGF0YSArIGhkcmxlbik7CisJCQloZHJsZW4gKz0gaWVlZTgwMjExX2dldF9tZXNoX2hkcmxlbihtZXNoZHIpOworCQkJaWYgKG1lc2hkci0+ZmxhZ3MgJiBNRVNIX0ZMQUdTX0FFX0E0KQorCQkJCW1lbWNweShzcmMsIG1lc2hkci0+ZWFkZHIxLCBFVEhfQUxFTik7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBjcHVfdG9fbGUxNigwKToKIAkJaWYgKGlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKQEAgLTUwMiwzICs1MTksMTY2IEBACiAJcmV0dXJuIGRzY3AgPj4gNTsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCk7CisKK2NvbnN0IHU4ICppZWVlODAyMTFfYnNzX2dldF9pZShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsIHU4IGllKQoreworCXU4ICplbmQsICpwb3M7CisKKwlwb3MgPSBic3MtPmluZm9ybWF0aW9uX2VsZW1lbnRzOworCWlmIChwb3MgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJZW5kID0gcG9zICsgYnNzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHM7CisKKwl3aGlsZSAocG9zICsgMSA8IGVuZCkgeworCQlpZiAocG9zICsgMiArIHBvc1sxXSA+IGVuZCkKKwkJCWJyZWFrOworCQlpZiAocG9zWzBdID09IGllKQorCQkJcmV0dXJuIHBvczsKKwkJcG9zICs9IDIgKyBwb3NbMV07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9ic3NfZ2V0X2llKTsKKwordm9pZCBjZmc4MDIxMV91cGxvYWRfY29ubmVjdF9rZXlzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gd2Rldi0+bmV0ZGV2OworCWludCBpOworCisJaWYgKCF3ZGV2LT5jb25uZWN0X2tleXMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJaWYgKCF3ZGV2LT5jb25uZWN0X2tleXMtPnBhcmFtc1tpXS5jaXBoZXIpCisJCQljb250aW51ZTsKKwkJaWYgKHJkZXYtPm9wcy0+YWRkX2tleSh3ZGV2LT53aXBoeSwgZGV2LCBpLCBOVUxMLAorCQkJCQkmd2Rldi0+Y29ubmVjdF9rZXlzLT5wYXJhbXNbaV0pKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gc2V0IGtleSAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIGkpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHdkZXYtPmNvbm5lY3Rfa2V5cy0+ZGVmID09IGkpCisJCQlpZiAocmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkod2Rldi0+d2lwaHksIGRldiwgaSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gc2V0IGRlZmtleSAlZFxuIiwKKwkJCQkJZGV2LT5uYW1lLCBpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJaWYgKHdkZXYtPmNvbm5lY3Rfa2V5cy0+ZGVmbWdtdCA9PSBpKQorCQkJaWYgKHJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXkod2Rldi0+d2lwaHksIGRldiwgaSkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHNldCBtZ3RkZWYgJWRcbiIsCisJCQkJCWRldi0+bmFtZSwgaSk7CisJfQorCisJa2ZyZWUod2Rldi0+Y29ubmVjdF9rZXlzKTsKKwl3ZGV2LT5jb25uZWN0X2tleXMgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBjZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IGNmZzgwMjExX2V2ZW50ICpldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eSgmd2Rldi0+ZXZlbnRfbGlzdCkpIHsKKwkJZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ3ZGV2LT5ldmVudF9saXN0LAorCQkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9ldmVudCwgbGlzdCk7CisJCWxpc3RfZGVsKCZldi0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKworCQl3ZGV2X2xvY2sod2Rldik7CisJCXN3aXRjaCAoZXYtPnR5cGUpIHsKKwkJY2FzZSBFVkVOVF9DT05ORUNUX1JFU1VMVDoKKwkJCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGV2LT5jci5ic3NpZCkpCisJCQkJYnNzaWQgPSBldi0+Y3IuYnNzaWQ7CisJCQlfX2NmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KAorCQkJCXdkZXYtPm5ldGRldiwgYnNzaWQsCisJCQkJZXYtPmNyLnJlcV9pZSwgZXYtPmNyLnJlcV9pZV9sZW4sCisJCQkJZXYtPmNyLnJlc3BfaWUsIGV2LT5jci5yZXNwX2llX2xlbiwKKwkJCQlldi0+Y3Iuc3RhdHVzLAorCQkJCWV2LT5jci5zdGF0dXMgPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUywKKwkJCQlOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlIEVWRU5UX1JPQU1FRDoKKwkJCV9fY2ZnODAyMTFfcm9hbWVkKHdkZXYsIGV2LT5ybS5ic3NpZCwKKwkJCQkJICBldi0+cm0ucmVxX2llLCBldi0+cm0ucmVxX2llX2xlbiwKKwkJCQkJICBldi0+cm0ucmVzcF9pZSwgZXYtPnJtLnJlc3BfaWVfbGVuKTsKKwkJCWJyZWFrOworCQljYXNlIEVWRU5UX0RJU0NPTk5FQ1RFRDoKKwkJCV9fY2ZnODAyMTFfZGlzY29ubmVjdGVkKHdkZXYtPm5ldGRldiwKKwkJCQkJCWV2LT5kYy5pZSwgZXYtPmRjLmllX2xlbiwKKwkJCQkJCWV2LT5kYy5yZWFzb24sIHRydWUpOworCQkJYnJlYWs7CisJCWNhc2UgRVZFTlRfSUJTU19KT0lORUQ6CisJCQlfX2NmZzgwMjExX2lic3Nfam9pbmVkKHdkZXYtPm5ldGRldiwgZXYtPmlqLmJzc2lkKTsKKwkJCWJyZWFrOworCQl9CisJCXdkZXZfdW5sb2NrKHdkZXYpOworCisJCWtmcmVlKGV2KTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2Rldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgY2ZnODAyMTFfcHJvY2Vzc19yZGV2X2V2ZW50cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKworCUFTU0VSVF9SVE5MKCk7CisJQVNTRVJUX1JERVZfTE9DSyhyZGV2KTsKKworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkod2RldiwgJnJkZXYtPm5ldGRldl9saXN0LCBsaXN0KQorCQljZmc4MDIxMV9wcm9jZXNzX3dkZXZfZXZlbnRzKHdkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7Cit9CisKK2ludCBjZmc4MDIxMV9jaGFuZ2VfaWZhY2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIG5sODAyMTFfaWZ0eXBlIG50eXBlLAorCQkJICB1MzIgKmZsYWdzLCBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQoreworCWludCBlcnI7CisJZW51bSBubDgwMjExX2lmdHlwZSBvdHlwZSA9IGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlOworCisJQVNTRVJUX1JERVZfTE9DSyhyZGV2KTsKKworCS8qIGRvbid0IHN1cHBvcnQgY2hhbmdpbmcgVkxBTnMsIHlvdSBqdXN0IHJlLWNyZWF0ZSB0aGVtICovCisJaWYgKG90eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghcmRldi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmIHx8CisJICAgICEocmRldi0+d2lwaHkuaW50ZXJmYWNlX21vZGVzICYgKDEgPDwgbnR5cGUpKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKG50eXBlICE9IG90eXBlKSB7CisJCXN3aXRjaCAob3R5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCWNmZzgwMjExX2xlYXZlX2lic3MocmRldiwgZGV2LCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQkJY2ZnODAyMTFfZGlzY29ubmVjdChyZGV2LCBkZXYsCisJCQkJCSAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORywgdHJ1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQkJLyogbWVzaCBzaG91bGQgYmUgaGFuZGxlZD8gKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQljZmc4MDIxMV9wcm9jZXNzX3JkZXZfZXZlbnRzKHJkZXYpOworCX0KKworCWVyciA9IHJkZXYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZigmcmRldi0+d2lwaHksIGRldiwKKwkJCQkJICAgICBudHlwZSwgZmxhZ3MsIHBhcmFtcyk7CisKKwlXQVJOX09OKCFlcnIgJiYgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gbnR5cGUpOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKaW5kZXggZDAzMGM1My4uNDI5ZGQwNiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSAid2V4dC1jb21wYXQuaCIKICNpbmNsdWRlICJjb3JlLmgiCiAKIGludCBjZmc4MDIxMV93ZXh0X2dpd25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTY5LDE4ICs3MCw4IEBACiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOwogCWludCByZXQ7CiAKLQlpZiAoIXdkZXYpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQogCXJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOwogCi0JaWYgKCFyZGV2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCS8qIGRvbid0IHN1cHBvcnQgY2hhbmdpbmcgVkxBTnMsIHlvdSBqdXN0IHJlLWNyZWF0ZSB0aGVtICovCi0JaWYgKHdkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KIAlzd2l0Y2ggKCptb2RlKSB7CiAJY2FzZSBJV19NT0RFX0lORlJBOgogCQl0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKQEAgLTEwMyw5ICs5NCw5IEBACiAKIAltZW1zZXQoJnZpZnBhcmFtcywgMCwgc2l6ZW9mKHZpZnBhcmFtcykpOwogCi0JcmV0ID0gcmRldi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmKHdkZXYtPndpcGh5LCBkZXYtPmlmaW5kZXgsIHR5cGUsCi0JCQkJCSAgICAgTlVMTCwgJnZpZnBhcmFtcyk7Ci0JV0FSTl9PTighcmV0ICYmIHdkZXYtPmlmdHlwZSAhPSB0eXBlKTsKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisJcmV0ID0gY2ZnODAyMTFfY2hhbmdlX2lmYWNlKHJkZXYsIGRldiwgdHlwZSwgTlVMTCwgJnZpZnBhcmFtcyk7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU0LDcgKzE0NSw3IEBACiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JaW50IGMgPSAwOworCWludCBpLCBjID0gMDsKIAogCWlmICghd2RldikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTczLDkgKzE2NCw2IEBACiAJcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwogCXJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7CiAKLQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7Ci0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMV0gPSAxMzsKLQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKIAlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IDQ7CiAKIAlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKQEAgLTIwNCwxMSArMTkyLDMxIEBACiAJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gcmFuZ2UtPm1heF9xdWFsLm5vaXNlIC8gMjsKIAlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IHJhbmdlLT5tYXhfcXVhbC51cGRhdGVkOwogCi0JcmFuZ2UtPmVuY19jYXBhID0gSVdfRU5DX0NBUEFfV1BBIHwgSVdfRU5DX0NBUEFfV1BBMiB8Ci0JCQkgIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIHwgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVA7CisJZm9yIChpID0gMDsgaSA8IHdkZXYtPndpcGh5LT5uX2NpcGhlcl9zdWl0ZXM7IGkrKykgeworCQlzd2l0Y2ggKHdkZXYtPndpcGh5LT5jaXBoZXJfc3VpdGVzW2ldKSB7CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwkJCXJhbmdlLT5lbmNfY2FwYSB8PSAoSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfAorCQkJCQkgICAgSVdfRU5DX0NBUEFfV1BBKTsKKwkJCWJyZWFrOworCisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJCXJhbmdlLT5lbmNfY2FwYSB8PSAoSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVAgfAorCQkJCQkgICAgSVdfRU5DX0NBUEFfV1BBMik7CisJCQlicmVhazsKKworCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgorCQkJcmFuZ2UtPmVuY29kaW5nX3NpemVbcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcysrXSA9CisJCQkJV0xBTl9LRVlfTEVOX1dFUDQwOworCQkJYnJlYWs7CisKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6CisJCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVtyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzKytdID0KKwkJCQlXTEFOX0tFWV9MRU5fV0VQMTA0OworCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCArKykgewotCQlpbnQgaTsKIAkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAKIAkJc2JhbmQgPSB3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF07CkBAIC0yMzYsOTcgKzI0NCw0MCBAQAogCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOwogCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CiAKLQlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKwlpZiAod2Rldi0+d2lwaHktPm1heF9zY2FuX3NzaWRzID4gMCkKKwkJcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7CiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UpOwogCi1pbnQgY2ZnODAyMTFfd2V4dF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKLQlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOwotCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0IGRpc2Fzc29jOwotCQlzdHJ1Y3QgY2ZnODAyMTFfZGVhdXRoX3JlcXVlc3QgZGVhdXRoOwotCX0gY21kOwotCi0JaWYgKCF3ZGV2KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKLQotCWlmICh3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobWxtZS0+YWRkci5zYV9mYW1pbHkgIT0gQVJQSFJEX0VUSEVSKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0KLQlzd2l0Y2ggKG1sbWUtPmNtZCkgewotCWNhc2UgSVdfTUxNRV9ERUFVVEg6Ci0JCWlmICghcmRldi0+b3BzLT5kZWF1dGgpCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCWNtZC5kZWF1dGgucGVlcl9hZGRyID0gbWxtZS0+YWRkci5zYV9kYXRhOwotCQljbWQuZGVhdXRoLnJlYXNvbl9jb2RlID0gbWxtZS0+cmVhc29uX2NvZGU7Ci0JCXJldHVybiByZGV2LT5vcHMtPmRlYXV0aCh3ZGV2LT53aXBoeSwgZGV2LCAmY21kLmRlYXV0aCk7Ci0JY2FzZSBJV19NTE1FX0RJU0FTU09DOgotCQlpZiAoIXJkZXYtPm9wcy0+ZGlzYXNzb2MpCi0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCWNtZC5kaXNhc3NvYy5wZWVyX2FkZHIgPSBtbG1lLT5hZGRyLnNhX2RhdGE7Ci0JCWNtZC5kaXNhc3NvYy5yZWFzb25fY29kZSA9IG1sbWUtPnJlYXNvbl9jb2RlOwotCQlyZXR1cm4gcmRldi0+b3BzLT5kaXNhc3NvYyh3ZGV2LT53aXBoeSwgZGV2LCAmY21kLmRpc2Fzc29jKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdtbG1lKTsKLQogCiAvKioKICAqIGNmZzgwMjExX3dleHRfZnJlcSAtIGdldCB3ZXh0IGZyZXF1ZW5jeSBmb3Igbm9uLSJhdXRvIgogICogQHdpcGh5OiB0aGUgd2lwaHkKICAqIEBmcmVxOiB0aGUgd2V4dCBmcmVxIGVuY29kaW5nCiAgKgotICogUmV0dXJucyBhIGNoYW5uZWwsICVOVUxMIGZvciBhdXRvLCBvciBhbiBFUlJfUFRSIGZvciBlcnJvcnMhCisgKiBSZXR1cm5zIGEgZnJlcXVlbmN5LCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUsIG9yIDAgZm9yIGF1dG8uCiAgKi8KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2ZnODAyMTFfd2V4dF9mcmVxKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQkJCSAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEpCitpbnQgY2ZnODAyMTFfd2V4dF9mcmVxKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBpd19mcmVxICpmcmVxKQogewotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKLQlpbnQgZjsKLQogCS8qCi0JICogUGFyc2UgZnJlcXVlbmN5IC0gcmV0dXJuIE5VTEwgZm9yIGF1dG8gYW5kCisJICogUGFyc2UgZnJlcXVlbmN5IC0gcmV0dXJuIDAgZm9yIGF1dG8gYW5kCiAJICogLUVJTlZBTCBmb3IgaW1wb3NzaWJsZSB0aGluZ3MuCiAJICovCiAJaWYgKGZyZXEtPmUgPT0gMCkgewogCQlpZiAoZnJlcS0+bSA8IDApCi0JCQlyZXR1cm4gTlVMTDsKLQkJZiA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShmcmVxLT5tKTsKKwkJCXJldHVybiAwOworCQlyZXR1cm4gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGZyZXEtPm0pOwogCX0gZWxzZSB7CiAJCWludCBpLCBkaXYgPSAxMDAwMDAwOwogCQlmb3IgKGkgPSAwOyBpIDwgZnJlcS0+ZTsgaSsrKQogCQkJZGl2IC89IDEwOwogCQlpZiAoZGl2IDw9IDApCi0JCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQkJZiA9IGZyZXEtPm0gLyBkaXY7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGZyZXEtPm0gLyBkaXY7CiAJfQotCi0JLyoKLQkgKiBMb29rIHVwIGNoYW5uZWwgc3RydWN0IGFuZCByZXR1cm4gLUVJTlZBTCB3aGVuCi0JICogaXQgY2Fubm90IGJlIGZvdW5kLgotCSAqLwotCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksIGYpOwotCWlmICghY2hhbikKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0JcmV0dXJuIGNoYW47CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X2ZyZXEpOwogCiBpbnQgY2ZnODAyMTFfd2V4dF9zaXdydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLApAQCAtNDc5LDE1ICs0MzAsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3cmV0cnkpOwogCi1zdGF0aWMgaW50IGNmZzgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKLQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKLQkJCQkgICBib29sIHJlbW92ZSwgYm9vbCB0eF9rZXksIGludCBpZHgsCi0JCQkJICAgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyBpbnQgX19jZmc4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkciwKKwkJCQkgICAgIGJvb2wgcmVtb3ZlLCBib29sIHR4X2tleSwgaW50IGlkeCwKKwkJCQkgICAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CisKKwlpZiAoIXdkZXYtPndleHQua2V5cykgeworCQl3ZGV2LT53ZXh0LmtleXMgPSBremFsbG9jKHNpemVvZigqd2Rldi0+d2V4dC5rZXlzKSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghd2Rldi0+d2V4dC5rZXlzKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQl3ZGV2LT53ZXh0LmtleXMtPnBhcmFtc1tpXS5rZXkgPQorCQkJCXdkZXYtPndleHQua2V5cy0+ZGF0YVtpXTsKKwl9CisKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCisJICAgIHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAocGFyYW1zLT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMpIHsKKwkJaWYgKCF3ZGV2LT5jdXJyZW50X2JzcykKKwkJCXJldHVybiAtRU5PTElOSzsKKwogCQlpZiAoIXJkZXYtPm9wcy0+c2V0X2RlZmF1bHRfbWdtdF9rZXkpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTQ5Nyw4ICs0NjUsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocmVtb3ZlKSB7Ci0JCWVyciA9IHJkZXYtPm9wcy0+ZGVsX2tleSgmcmRldi0+d2lwaHksIGRldiwgaWR4LCBhZGRyKTsKKwkJZXJyID0gMDsKKwkJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQorCQkJZXJyID0gcmRldi0+b3BzLT5kZWxfa2V5KCZyZGV2LT53aXBoeSwgZGV2LCBpZHgsIGFkZHIpOwogCQlpZiAoIWVycikgeworCQkJaWYgKCFhZGRyKSB7CisJCQkJd2Rldi0+d2V4dC5rZXlzLT5wYXJhbXNbaWR4XS5rZXlfbGVuID0gMDsKKwkJCQl3ZGV2LT53ZXh0LmtleXMtPnBhcmFtc1tpZHhdLmNpcGhlciA9IDA7CisJCQl9CiAJCQlpZiAoaWR4ID09IHdkZXYtPndleHQuZGVmYXVsdF9rZXkpCiAJCQkJd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9IC0xOwogCQkJZWxzZSBpZiAoaWR4ID09IHdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleSkKQEAgLTUxMiwzNiArNDg2LDY1IEBACiAJCQlyZXR1cm4gMDsKIAogCQlyZXR1cm4gZXJyOwotCX0gZWxzZSB7Ci0JCWlmIChhZGRyKQotCQkJdHhfa2V5ID0gZmFsc2U7CisJfQogCi0JCWlmIChjZmc4MDIxMV92YWxpZGF0ZV9rZXlfc2V0dGluZ3MocGFyYW1zLCBpZHgsIGFkZHIpKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGFkZHIpCisJCXR4X2tleSA9IGZhbHNlOwogCisJaWYgKGNmZzgwMjExX3ZhbGlkYXRlX2tleV9zZXR0aW5ncyhyZGV2LCBwYXJhbXMsIGlkeCwgYWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gMDsKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpCiAJCWVyciA9IHJkZXYtPm9wcy0+YWRkX2tleSgmcmRldi0+d2lwaHksIGRldiwgaWR4LCBhZGRyLCBwYXJhbXMpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JCWlmICh0eF9rZXkgfHwgKCFhZGRyICYmIHdkZXYtPndleHQuZGVmYXVsdF9rZXkgPT0gLTEpKSB7CisJaWYgKCFhZGRyKSB7CisJCXdkZXYtPndleHQua2V5cy0+cGFyYW1zW2lkeF0gPSAqcGFyYW1zOworCQltZW1jcHkod2Rldi0+d2V4dC5rZXlzLT5kYXRhW2lkeF0sCisJCQlwYXJhbXMtPmtleSwgcGFyYW1zLT5rZXlfbGVuKTsKKwkJd2Rldi0+d2V4dC5rZXlzLT5wYXJhbXNbaWR4XS5rZXkgPQorCQkJd2Rldi0+d2V4dC5rZXlzLT5kYXRhW2lkeF07CisJfQorCisJaWYgKChwYXJhbXMtPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAorCSAgICAgcGFyYW1zLT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0KSAmJgorCSAgICAodHhfa2V5IHx8ICghYWRkciAmJiB3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5ID09IC0xKSkpIHsKKwkJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQogCQkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJnJkZXYtPndpcGh5LAogCQkJCQkJCSBkZXYsIGlkeCk7Ci0JCQlpZiAoIWVycikKLQkJCQl3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5ID0gaWR4OwotCQkJcmV0dXJuIGVycjsKLQkJfQorCQlpZiAoIWVycikKKwkJCXdkZXYtPndleHQuZGVmYXVsdF9rZXkgPSBpZHg7CisJCXJldHVybiBlcnI7CisJfQogCi0JCWlmIChwYXJhbXMtPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQyAmJgotCQkgICAgKHR4X2tleSB8fCAoIWFkZHIgJiYgd2Rldi0+d2V4dC5kZWZhdWx0X21nbXRfa2V5ID09IC0xKSkpIHsKKwlpZiAocGFyYW1zLT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMgJiYKKwkgICAgKHR4X2tleSB8fCAoIWFkZHIgJiYgd2Rldi0+d2V4dC5kZWZhdWx0X21nbXRfa2V5ID09IC0xKSkpIHsKKwkJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQogCQkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9tZ210X2tleSgmcmRldi0+d2lwaHksCiAJCQkJCQkJICAgICAgZGV2LCBpZHgpOwotCQkJaWYgKCFlcnIpCi0JCQkJd2Rldi0+d2V4dC5kZWZhdWx0X21nbXRfa2V5ID0gaWR4OwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCXJldHVybiAwOworCQlpZiAoIWVycikKKwkJCXdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleSA9IGlkeDsKKwkJcmV0dXJuIGVycjsKIAl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZmc4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsCisJCQkJICAgYm9vbCByZW1vdmUsIGJvb2wgdHhfa2V5LCBpbnQgaWR4LAorCQkJCSAgIHN0cnVjdCBrZXlfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IGVycjsKKworCXdkZXZfbG9jayhkZXYtPmllZWU4MDIxMV9wdHIpOworCWVyciA9IF9fY2ZnODAyMTFfc2V0X2VuY3J5cHRpb24ocmRldiwgZGV2LCBhZGRyLCByZW1vdmUsCisJCQkJCXR4X2tleSwgaWR4LCBwYXJhbXMpOworCXdkZXZfdW5sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CisKKwlyZXR1cm4gZXJyOwogfQogCiBpbnQgY2ZnODAyMTFfd2V4dF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU1NCw2ICs1NTcsMTAgQEAKIAlib29sIHJlbW92ZSA9IGZhbHNlOwogCXN0cnVjdCBrZXlfcGFyYW1zIHBhcmFtczsKIAorCWlmICh3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICB3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCS8qIG5vIHVzZSAtLSBvbmx5IE1GUCAoc2V0X2RlZmF1bHRfbWdtdF9rZXkpIGlzIG9wdGlvbmFsICovCiAJaWYgKCFyZGV2LT5vcHMtPmRlbF9rZXkgfHwKIAkgICAgIXJkZXYtPm9wcy0+YWRkX2tleSB8fApAQCAtNTc0LDkgKzU4MSwxNCBAQAogCQlyZW1vdmUgPSB0cnVlOwogCWVsc2UgaWYgKGVycS0+bGVuZ3RoID09IDApIHsKIAkJLyogTm8ga2V5IGRhdGEgLSBqdXN0IHNldCB0aGUgZGVmYXVsdCBUWCBrZXkgaW5kZXggKi8KLQkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJnJkZXYtPndpcGh5LCBkZXYsIGlkeCk7CisJCWVyciA9IDA7CisJCXdkZXZfbG9jayh3ZGV2KTsKKwkJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQorCQkJZXJyID0gcmRldi0+b3BzLT5zZXRfZGVmYXVsdF9rZXkoJnJkZXYtPndpcGh5LAorCQkJCQkJCSBkZXYsIGlkeCk7CiAJCWlmICghZXJyKQogCQkJd2Rldi0+d2V4dC5kZWZhdWx0X2tleSA9IGlkeDsKKwkJd2Rldl91bmxvY2sod2Rldik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC02MDksNiArNjIxLDEwIEBACiAJc3RydWN0IGtleV9wYXJhbXMgcGFyYW1zOwogCXUzMiBjaXBoZXI7CiAKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgd2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAkvKiBubyB1c2UgLS0gb25seSBNRlAgKHNldF9kZWZhdWx0X21nbXRfa2V5KSBpcyBvcHRpb25hbCAqLwogCWlmICghcmRldi0+b3BzLT5kZWxfa2V5IHx8CiAJICAgICFyZGV2LT5vcHMtPmFkZF9rZXkgfHwKQEAgLTY4MiwzNyArNjk4LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd2VuY29kZWV4dCk7CiAKLXN0cnVjdCBnaXdlbmNvZGVfY29va2llIHsKLQlzaXplX3QgYnVmbGVuOwotCWNoYXIgKmtleWJ1ZjsKLX07Ci0KLXN0YXRpYyB2b2lkIGdpd2VuY29kZV9nZXRfa2V5X2NiKHZvaWQgKmNvb2tpZSwgc3RydWN0IGtleV9wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3QgZ2l3ZW5jb2RlX2Nvb2tpZSAqZGF0YSA9IGNvb2tpZTsKLQotCWlmICghcGFyYW1zLT5rZXkpIHsKLQkJZGF0YS0+YnVmbGVuID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCWRhdGEtPmJ1ZmxlbiA9IG1pbl90KHNpemVfdCwgZGF0YS0+YnVmbGVuLCBwYXJhbXMtPmtleV9sZW4pOwotCW1lbWNweShkYXRhLT5rZXlidWYsIHBhcmFtcy0+a2V5LCBkYXRhLT5idWZsZW4pOwotfQotCiBpbnQgY2ZnODAyMTFfd2V4dF9naXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXlidWYpCiB7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKLQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOwotCWludCBpZHgsIGVycjsKLQlzdHJ1Y3QgZ2l3ZW5jb2RlX2Nvb2tpZSBkYXRhID0gewotCQkua2V5YnVmID0ga2V5YnVmLAotCQkuYnVmbGVuID0gZXJxLT5sZW5ndGgsCi0JfTsKKwlpbnQgaWR4OwogCi0JaWYgKCFyZGV2LT5vcHMtPmdldF9rZXkpCisJaWYgKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKQEAgLTcyNywyNCArNzIxLDcwIEBACiAKIAllcnEtPmZsYWdzID0gaWR4ICsgMTsKIAotCWVyciA9IHJkZXYtPm9wcy0+Z2V0X2tleSgmcmRldi0+d2lwaHksIGRldiwgaWR4LCBOVUxMLCAmZGF0YSwKLQkJCQkgZ2l3ZW5jb2RlX2dldF9rZXlfY2IpOwotCWlmICghZXJyKSB7Ci0JCWVycS0+bGVuZ3RoID0gZGF0YS5idWZsZW47Ci0JCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChlcnIgPT0gLUVOT0VOVCkgeworCWlmICghd2Rldi0+d2V4dC5rZXlzIHx8ICF3ZGV2LT53ZXh0LmtleXMtPnBhcmFtc1tpZHhdLmNpcGhlcikgewogCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAkJZXJxLT5sZW5ndGggPSAwOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gZXJyOworCWVycS0+bGVuZ3RoID0gbWluX3Qoc2l6ZV90LCBlcnEtPmxlbmd0aCwKKwkJCSAgICB3ZGV2LT53ZXh0LmtleXMtPnBhcmFtc1tpZHhdLmtleV9sZW4pOworCW1lbWNweShrZXlidWYsIHdkZXYtPndleHQua2V5cy0+cGFyYW1zW2lkeF0ua2V5LCBlcnEtPmxlbmd0aCk7CisJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXdlbmNvZGUpOwogCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19mcmVxICp3ZXh0ZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCWludCBmcmVxLCBlcnI7CisKKwlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcmV0dXJuIGNmZzgwMjExX21nZF93ZXh0X3Npd2ZyZXEoZGV2LCBpbmZvLCB3ZXh0ZnJlcSwgZXh0cmEpOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZnJlcShkZXYsIGluZm8sIHdleHRmcmVxLCBleHRyYSk7CisJZGVmYXVsdDoKKwkJZnJlcSA9IGNmZzgwMjExX3dleHRfZnJlcSh3ZGV2LT53aXBoeSwgd2V4dGZyZXEpOworCQlpZiAoZnJlcSA8IDApCisJCQlyZXR1cm4gZnJlcTsKKwkJaWYgKGZyZXEgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCWVyciA9IHJkZXZfc2V0X2ZyZXEocmRldiwgTlVMTCwgZnJlcSwgTkw4MDIxMV9DSEFOX05PX0hUKTsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCXJldHVybiBlcnI7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdmcmVxKTsKKworaW50IGNmZzgwMjExX3dleHRfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCisJc3dpdGNoICh3ZGV2LT5pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXJldHVybiBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdmcmVxKGRldiwgaW5mbywgZnJlcSwgZXh0cmEpOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZnJlcShkZXYsIGluZm8sIGZyZXEsIGV4dHJhKTsKKwlkZWZhdWx0OgorCQlpZiAoIXJkZXYtPmNoYW5uZWwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZnJlcS0+bSA9IHJkZXYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCQlmcmVxLT5lID0gNjsKKwkJcmV0dXJuIDA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXdmcmVxKTsKKwogaW50IGNmZzgwMjExX3dleHRfc2l3dHhwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICB1bmlvbiBpd3JlcV9kYXRhICpkYXRhLCBjaGFyICpleHRyYSkKQEAgLTgyNywzICs4NjcsNTQ3IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X2dpd3R4cG93ZXIpOworCitzdGF0aWMgaW50IGNmZzgwMjExX3NldF9hdXRoX2FsZyhzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LAorCQkJCSBzMzIgYXV0aF9hbGcpCit7CisJaW50IG5yX2FsZyA9IDA7CisKKwlpZiAoIWF1dGhfYWxnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdXRoX2FsZyAmIH4oSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0gfAorCQkJIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkgfAorCQkJIElXX0FVVEhfQUxHX0xFQVApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdXRoX2FsZyAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKSB7CisJCW5yX2FsZysrOworCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKKwl9CisKKwlpZiAoYXV0aF9hbGcgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7CisJCW5yX2FsZysrOworCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZOworCX0KKworCWlmIChhdXRoX2FsZyAmIElXX0FVVEhfQUxHX0xFQVApIHsKKwkJbnJfYWxnKys7CisJCXdkZXYtPndleHQuY29ubmVjdC5hdXRoX3R5cGUgPSBOTDgwMjExX0FVVEhUWVBFX05FVFdPUktfRUFQOworCX0KKworCWlmIChucl9hbGcgPiAxKQorCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZmc4MDIxMV9zZXRfd3BhX3ZlcnNpb24oc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTMyIHdwYV92ZXJzaW9ucykKK3sKKwl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLndwYV92ZXJzaW9ucyA9IDA7CisKKwlpZiAod3BhX3ZlcnNpb25zICYgfihJV19BVVRIX1dQQV9WRVJTSU9OX1dQQSB8CisJCQkgICAgIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMnwKKwkJICAgICAgICAgICAgIElXX0FVVEhfV1BBX1ZFUlNJT05fRElTQUJMRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgod3BhX3ZlcnNpb25zICYgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCkgJiYKKwkgICAgKHdwYV92ZXJzaW9ucyAmIChJV19BVVRIX1dQQV9WRVJTSU9OX1dQQXwKKwkJCSAgICAgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEyKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdwYV92ZXJzaW9ucyAmIElXX0FVVEhfV1BBX1ZFUlNJT05fRElTQUJMRUQpCisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8ud3BhX3ZlcnNpb25zICY9CisJCQl+KE5MODAyMTFfV1BBX1ZFUlNJT05fMXxOTDgwMjExX1dQQV9WRVJTSU9OXzIpOworCisJaWYgKHdwYV92ZXJzaW9ucyAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBKQorCQl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLndwYV92ZXJzaW9ucyB8PQorCQkJTkw4MDIxMV9XUEFfVkVSU0lPTl8xOworCisJaWYgKHdwYV92ZXJzaW9ucyAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by53cGFfdmVyc2lvbnMgfD0KKwkJCU5MODAyMTFfV1BBX1ZFUlNJT05fMjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNmZzgwMjExX3NldF9jaXBoZXJfZ3JvdXAoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTMyIGNpcGhlcikKK3sKKwl3ZGV2LT53ZXh0LmNvbm5lY3QuY3J5cHRvLmNpcGhlcl9ncm91cCA9IDA7CisKKwlpZiAoY2lwaGVyICYgSVdfQVVUSF9DSVBIRVJfV0VQNDApCisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uY2lwaGVyX2dyb3VwID0KKwkJCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOworCWVsc2UgaWYgKGNpcGhlciAmIElXX0FVVEhfQ0lQSEVSX1dFUDEwNCkKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by5jaXBoZXJfZ3JvdXAgPQorCQkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OworCWVsc2UgaWYgKGNpcGhlciAmIElXX0FVVEhfQ0lQSEVSX1RLSVApCisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uY2lwaGVyX2dyb3VwID0KKwkJCVdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA7CisJZWxzZSBpZiAoY2lwaGVyICYgSVdfQVVUSF9DSVBIRVJfQ0NNUCkKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by5jaXBoZXJfZ3JvdXAgPQorCQkJV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDsKKwllbHNlIGlmIChjaXBoZXIgJiBJV19BVVRIX0NJUEhFUl9BRVNfQ01BQykKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by5jaXBoZXJfZ3JvdXAgPQorCQkJV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNmZzgwMjExX3NldF9jaXBoZXJfcGFpcndpc2Uoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTMyIGNpcGhlcikKK3sKKwlpbnQgbnJfY2lwaGVycyA9IDA7CisJdTMyICpjaXBoZXJzX3BhaXJ3aXNlID0gd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlOworCisJaWYgKGNpcGhlciAmIElXX0FVVEhfQ0lQSEVSX1dFUDQwKSB7CisJCWNpcGhlcnNfcGFpcndpc2VbbnJfY2lwaGVyc10gPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDsKKwkJbnJfY2lwaGVycysrOworCX0KKworCWlmIChjaXBoZXIgJiBJV19BVVRIX0NJUEhFUl9XRVAxMDQpIHsKKwkJY2lwaGVyc19wYWlyd2lzZVtucl9jaXBoZXJzXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKKwkJbnJfY2lwaGVycysrOworCX0KKworCWlmIChjaXBoZXIgJiBJV19BVVRIX0NJUEhFUl9US0lQKSB7CisJCWNpcGhlcnNfcGFpcndpc2VbbnJfY2lwaGVyc10gPSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOworCQlucl9jaXBoZXJzKys7CisJfQorCisJaWYgKGNpcGhlciAmIElXX0FVVEhfQ0lQSEVSX0NDTVApIHsKKwkJY2lwaGVyc19wYWlyd2lzZVtucl9jaXBoZXJzXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA7CisJCW5yX2NpcGhlcnMrKzsKKwl9CisKKwlpZiAoY2lwaGVyICYgSVdfQVVUSF9DSVBIRVJfQUVTX0NNQUMpIHsKKwkJY2lwaGVyc19wYWlyd2lzZVtucl9jaXBoZXJzXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOworCQlucl9jaXBoZXJzKys7CisJfQorCisJQlVJTERfQlVHX09OKE5MODAyMTFfTUFYX05SX0NJUEhFUl9TVUlURVMgPCA1KTsKKworCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8ubl9jaXBoZXJzX3BhaXJ3aXNlID0gbnJfY2lwaGVyczsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgY2ZnODAyMTFfc2V0X2tleV9tZ3Qoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTMyIGtleV9tZ3QpCit7CisJaW50IG5yX2FrbV9zdWl0ZXMgPSAwOworCisJaWYgKGtleV9tZ3QgJiB+KElXX0FVVEhfS0VZX01HTVRfODAyXzFYIHwKKwkJCUlXX0FVVEhfS0VZX01HTVRfUFNLKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoa2V5X21ndCAmIElXX0FVVEhfS0VZX01HTVRfODAyXzFYKSB7CisJCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8uYWttX3N1aXRlc1tucl9ha21fc3VpdGVzXSA9CisJCQlXTEFOX0FLTV9TVUlURV84MDIxWDsKKwkJbnJfYWttX3N1aXRlcysrOworCX0KKworCWlmIChrZXlfbWd0ICYgSVdfQVVUSF9LRVlfTUdNVF9QU0spIHsKKwkJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by5ha21fc3VpdGVzW25yX2FrbV9zdWl0ZXNdID0KKwkJCVdMQU5fQUtNX1NVSVRFX1BTSzsKKwkJbnJfYWttX3N1aXRlcysrOworCX0KKworCXdkZXYtPndleHQuY29ubmVjdC5jcnlwdG8ubl9ha21fc3VpdGVzID0gbnJfYWttX3N1aXRlczsKKworCXJldHVybiAwOworfQorCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCWlmICh3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQl3ZGV2LT53ZXh0LmNvbm5lY3QucHJpdmFjeSA9IGRhdGEtPnZhbHVlOworCQlyZXR1cm4gMDsKKwljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046CisJCXJldHVybiBjZmc4MDIxMV9zZXRfd3BhX3ZlcnNpb24od2RldiwgZGF0YS0+dmFsdWUpOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJCXJldHVybiBjZmc4MDIxMV9zZXRfY2lwaGVyX2dyb3VwKHdkZXYsIGRhdGEtPnZhbHVlKTsKKwljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJCXJldHVybiBjZmc4MDIxMV9zZXRfa2V5X21ndCh3ZGV2LCBkYXRhLT52YWx1ZSk7CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwkJcmV0dXJuIGNmZzgwMjExX3NldF9jaXBoZXJfcGFpcndpc2Uod2RldiwgZGF0YS0+dmFsdWUpOworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJcmV0dXJuIGNmZzgwMjExX3NldF9hdXRoX2FsZyh3ZGV2LCBkYXRhLT52YWx1ZSk7CisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwljYXNlIElXX0FVVEhfTUZQOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdhdXRoKTsKKworaW50IGNmZzgwMjExX3dleHRfZ2l3YXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCS8qIFhYWDogd2hhdCBkbyB3ZSBuZWVkPyAqLworCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXdhdXRoKTsKKworaW50IGNmZzgwMjExX3dleHRfc2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKndycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCWJvb2wgcHMgPSB3ZGV2LT53ZXh0LnBzOworCWludCB0aW1lb3V0ID0gd2Rldi0+d2V4dC5wc190aW1lb3V0OworCWludCBlcnI7CisKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFyZGV2LT5vcHMtPnNldF9wb3dlcl9tZ210KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAod3JxLT5kaXNhYmxlZCkgeworCQlwcyA9IGZhbHNlOworCX0gZWxzZSB7CisJCXN3aXRjaCAod3JxLT5mbGFncyAmIElXX1BPV0VSX01PREUpIHsKKwkJY2FzZSBJV19QT1dFUl9PTjogICAgICAgLyogSWYgbm90IHNwZWNpZmllZCAqLworCQljYXNlIElXX1BPV0VSX01PREU6ICAgICAvKiBJZiBzZXQgYWxsIG1hc2sgKi8KKwkJY2FzZSBJV19QT1dFUl9BTExfUjogICAgLyogSWYgZXhwbGljaXRlbHkgc3RhdGUgYWxsICovCisJCQlwcyA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDogICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlIHdlIGlnbm9yZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAod3JxLT5mbGFncyAmIH4oSVdfUE9XRVJfTU9ERSB8IElXX1BPV0VSX1RJTUVPVVQpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHdycS0+ZmxhZ3MgJiBJV19QT1dFUl9USU1FT1VUKQorCQkJdGltZW91dCA9IHdycS0+dmFsdWUgLyAxMDAwOworCX0KKworCWVyciA9IHJkZXYtPm9wcy0+c2V0X3Bvd2VyX21nbXQod2Rldi0+d2lwaHksIGRldiwgcHMsIHRpbWVvdXQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl3ZGV2LT53ZXh0LnBzID0gcHM7CisJd2Rldi0+d2V4dC5wc190aW1lb3V0ID0gdGltZW91dDsKKworCXJldHVybiAwOworCit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd3Bvd2VyKTsKKworaW50IGNmZzgwMjExX3dleHRfZ2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcGFyYW0gKndycSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCXdycS0+ZGlzYWJsZWQgPSAhd2Rldi0+d2V4dC5wczsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXdwb3dlcik7CisKK3N0YXRpYyBpbnQgY2ZnODAyMTFfd2RzX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCWludCBlcnI7CisKKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFyZGV2LT5vcHMtPnNldF93ZHNfcGVlcikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZXJyID0gcmRldi0+b3BzLT5zZXRfd2RzX3BlZXIod2Rldi0+d2lwaHksIGRldiwgKHU4ICopICZhZGRyLT5zYV9kYXRhKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbWVtY3B5KCZ3ZGV2LT53ZXh0LmJzc2lkLCAodTggKikgJmFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNmZzgwMjExX3dkc193ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfV0RTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJbWVtY3B5KCZhZGRyLT5zYV9kYXRhLCB3ZGV2LT53ZXh0LmJzc2lkLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNmZzgwMjExX3dleHRfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0ZV9tYXNrIG1hc2s7CisKKwlpZiAoIXJkZXYtPm9wcy0+c2V0X2JpdHJhdGVfbWFzaykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbWFzay5maXhlZCA9IDA7CisJbWFzay5tYXhyYXRlID0gMDsKKworCWlmIChyYXRlLT52YWx1ZSA8IDApIHsKKwkJLyogbm90aGluZyAqLworCX0gZWxzZSBpZiAocmF0ZS0+Zml4ZWQpIHsKKwkJbWFzay5maXhlZCA9IHJhdGUtPnZhbHVlIC8gMTAwMDsgLyoga2JwcyAqLworCX0gZWxzZSB7CisJCW1hc2subWF4cmF0ZSA9IHJhdGUtPnZhbHVlIC8gMTAwMDsgLyoga2JwcyAqLworCX0KKworCXJldHVybiByZGV2LT5vcHMtPnNldF9iaXRyYXRlX21hc2sod2Rldi0+d2lwaHksIGRldiwgTlVMTCwgJm1hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdyYXRlKTsKKworaW50IGNmZzgwMjExX3dleHRfZ2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJhdGUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwkvKiB3ZSBhcmUgdW5kZXIgUlROTCAtIGdsb2JhbGx5IGxvY2tlZCAtIHNvIGNhbiB1c2UgYSBzdGF0aWMgc3RydWN0ICovCisJc3RhdGljIHN0cnVjdCBzdGF0aW9uX2luZm8gc2luZm87CisJdTggYWRkcltFVEhfQUxFTl07CisJaW50IGVycjsKKworCWlmICh3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCFyZGV2LT5vcHMtPmdldF9zdGF0aW9uKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwllcnIgPSAwOworCXdkZXZfbG9jayh3ZGV2KTsKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpCisJCW1lbWNweShhZGRyLCB3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZQorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcmRldi0+b3BzLT5nZXRfc3RhdGlvbigmcmRldi0+d2lwaHksIGRldiwgYWRkciwgJnNpbmZvKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCEoc2luZm8uZmlsbGVkICYgU1RBVElPTl9JTkZPX1RYX0JJVFJBVEUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyYXRlLT52YWx1ZSA9IDA7CisKKwlpZiAoIShzaW5mby50eHJhdGUuZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfTUNTKSkKKwkJcmF0ZS0+dmFsdWUgPSAxMDAwMDAgKiBzaW5mby50eHJhdGUubGVnYWN5OworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X2dpd3JhdGUpOworCisvKiBHZXQgd2lyZWxlc3Mgc3RhdGlzdGljcy4gIENhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgYW5kIGJ5IFNJT0NHSVdTVEFUUyAqLworc3RydWN0IGl3X3N0YXRpc3RpY3MgKmNmZzgwMjExX3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2Rldi0+d2lwaHkpOworCS8qIHdlIGFyZSB1bmRlciBSVE5MIC0gZ2xvYmFsbHkgbG9ja2VkIC0gc28gY2FuIHVzZSBzdGF0aWMgc3RydWN0cyAqLworCXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7CisJc3RhdGljIHN0cnVjdCBzdGF0aW9uX2luZm8gc2luZm87CisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiBOVUxMOworCisJaWYgKCFyZGV2LT5vcHMtPmdldF9zdGF0aW9uKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEdyYWIgQlNTSUQgb2YgY3VycmVudCBCU1MsIGlmIGFueSAqLworCXdkZXZfbG9jayh3ZGV2KTsKKwlpZiAoIXdkZXYtPmN1cnJlbnRfYnNzKSB7CisJCXdkZXZfdW5sb2NrKHdkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJbWVtY3B5KGJzc2lkLCB3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBFVEhfQUxFTik7CisJd2Rldl91bmxvY2sod2Rldik7CisKKwlpZiAocmRldi0+b3BzLT5nZXRfc3RhdGlvbigmcmRldi0+d2lwaHksIGRldiwgYnNzaWQsICZzaW5mbykpCisJCXJldHVybiBOVUxMOworCisJbWVtc2V0KCZ3c3RhdHMsIDAsIHNpemVvZih3c3RhdHMpKTsKKworCXN3aXRjaCAocmRldi0+d2lwaHkuc2lnbmFsX3R5cGUpIHsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKKwkJaWYgKHNpbmZvLmZpbGxlZCAmIFNUQVRJT05fSU5GT19TSUdOQUwpIHsKKwkJCWludCBzaWcgPSBzaW5mby5zaWduYWw7CisJCQl3c3RhdHMucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJCXdzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCQl3c3RhdHMucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQkJd3N0YXRzLnF1YWwubGV2ZWwgPSBzaWc7CisJCQlpZiAoc2lnIDwgLTExMCkKKwkJCQlzaWcgPSAtMTEwOworCQkJZWxzZSBpZiAoc2lnID4gLTQwKQorCQkJCXNpZyA9IC00MDsKKwkJCXdzdGF0cy5xdWFsLnF1YWwgPSBzaWcgKyAxMTA7CisJCQlicmVhazsKKwkJfQorCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOgorCQlpZiAoc2luZm8uZmlsbGVkICYgU1RBVElPTl9JTkZPX1NJR05BTCkgeworCQkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCQl3c3RhdHMucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOworCQkJd3N0YXRzLnF1YWwubGV2ZWwgPSBzaW5mby5zaWduYWw7CisJCQl3c3RhdHMucXVhbC5xdWFsID0gc2luZm8uc2lnbmFsOworCQkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQl3c3RhdHMucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKKwkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwl9CisKKwl3c3RhdHMucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKKworCXJldHVybiAmd3N0YXRzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2lyZWxlc3Nfc3RhdHMpOworCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCXN3aXRjaCAod2Rldi0+aWZ0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9zaXdhcChkZXYsIGluZm8sIGFwX2FkZHIsIGV4dHJhKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXJldHVybiBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdhcChkZXYsIGluZm8sIGFwX2FkZHIsIGV4dHJhKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKKwkJcmV0dXJuIGNmZzgwMjExX3dkc193ZXh0X3Npd2FwKGRldiwgaW5mbywgYXBfYWRkciwgZXh0cmEpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd2FwKTsKKworaW50IGNmZzgwMjExX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlyZXR1cm4gY2ZnODAyMTFfbWdkX3dleHRfZ2l3YXAoZGV2LCBpbmZvLCBhcF9hZGRyLCBleHRyYSk7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCXJldHVybiBjZmc4MDIxMV93ZHNfd2V4dF9naXdhcChkZXYsIGluZm8sIGFwX2FkZHIsIGV4dHJhKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9naXdhcCk7CisKK2ludCBjZmc4MDIxMV93ZXh0X3Npd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwlzd2l0Y2ggKHdkZXYtPmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXJldHVybiBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZXNzaWQoZGV2LCBpbmZvLCBkYXRhLCBzc2lkKTsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXJldHVybiBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdlc3NpZChkZXYsIGluZm8sIGRhdGEsIHNzaWQpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZmc4MDIxMV93ZXh0X3Npd2Vzc2lkKTsKKworaW50IGNmZzgwMjExX3dleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCXN3aXRjaCAod2Rldi0+aWZ0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcmV0dXJuIGNmZzgwMjExX2lic3Nfd2V4dF9naXdlc3NpZChkZXYsIGluZm8sIGRhdGEsIHNzaWQpOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcmV0dXJuIGNmZzgwMjExX21nZF93ZXh0X2dpd2Vzc2lkKGRldiwgaW5mbywgZGF0YSwgc3NpZCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfZ2l3ZXNzaWQpOworCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciBjZmc4MDIxMV9oYW5kbGVyc1tdID0geworCVtJV19JT0NUTF9JRFgoU0lPQ0dJV05BTUUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd25hbWUsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXRlJFUSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3ZnJlcSwKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdGUkVRKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdmcmVxLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV01PREUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd21vZGUsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXTU9ERSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3bW9kZSwKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdSQU5HRSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXQVApXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2FwLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV0FQKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdhcCwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdNTE1FKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdtbG1lLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV1NDQU4pXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3NjYW4sCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXU0NBTildCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3c2NhbiwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdFU1NJRCldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3ZXNzaWQsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXRVNTSUQpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd2Vzc2lkLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV1JBVEUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3JhdGUsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXUkFURSldCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmF0ZSwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdSVFMpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3J0cywKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdSVFMpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3J0cywKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdGUkFHKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdmcmFnLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV0ZSQUcpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd2ZyYWcsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXVFhQT1cpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3R4cG93ZXIsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXVFhQT1cpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3R4cG93ZXIsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXUkVUUlkpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3JldHJ5LAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV1JFVFJZKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9naXdyZXRyeSwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdFTkNPREUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2VuY29kZSwKKwlbSVdfSU9DVExfSURYKFNJT0NHSVdFTkNPREUpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd2VuY29kZSwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdQT1dFUildCT0gKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfc2l3cG93ZXIsCisJW0lXX0lPQ1RMX0lEWChTSU9DR0lXUE9XRVIpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3Bvd2VyLAorCVtJV19JT0NUTF9JRFgoU0lPQ1NJV0dFTklFKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdnZW5pZSwKKwlbSVdfSU9DVExfSURYKFNJT0NTSVdBVVRIKV0JPSAoaXdfaGFuZGxlcikgY2ZnODAyMTFfd2V4dF9zaXdhdXRoLAorCVtJV19JT0NUTF9JRFgoU0lPQ0dJV0FVVEgpXQk9IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd2F1dGgsCisJW0lXX0lPQ1RMX0lEWChTSU9DU0lXRU5DT0RFRVhUKV09IChpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd2VuY29kZWV4dCwKK307CisKK2NvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBjZmc4MDIxMV93ZXh0X2hhbmRsZXIgPSB7CisJLm51bV9zdGFuZGFyZAkJPSBBUlJBWV9TSVpFKGNmZzgwMjExX2hhbmRsZXJzKSwKKwkuc3RhbmRhcmQJCT0gY2ZnODAyMTFfaGFuZGxlcnMsCisJLmdldF93aXJlbGVzc19zdGF0cyA9IGNmZzgwMjExX3dpcmVsZXNzX3N0YXRzLAorfTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiM2RhZQotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpZm5kZWYgX19XRVhUX0NPTVBBVAorI2RlZmluZSBfX1dFWFRfQ09NUEFUCisKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKK2ludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV9pYnNzX3dleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfaWJzc193ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX2lic3Nfd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKTsKK2ludCBjZmc4MDIxMV9pYnNzX3dleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqc3NpZCk7CisKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpOworaW50IGNmZzgwMjExX21nZF93ZXh0X3Npd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpOworaW50IGNmZzgwMjExX21nZF93ZXh0X2dpd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKnNzaWQpOworCitpbnQgY2ZnODAyMTFfd2V4dF9mcmVxKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBpd19mcmVxICpmcmVxKTsKKworCitleHRlcm4gY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGNmZzgwMjExX3dleHRfaGFuZGxlcjsKKyNlbmRpZiAvKiBfX1dFWFRfQ09NUEFUICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYyBiL25ldC93aXJlbGVzcy93ZXh0LXNtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmNkOWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1zbWUuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIGNmZzgwMjExIHdleHQgY29tcGF0IGZvciBtYW5hZ2VkIG1vZGUuCisgKgorICogQ29weXJpZ2h0IDIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSAgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgIndleHQtY29tcGF0LmgiCisjaW5jbHVkZSAibmw4MDIxMS5oIgorCitpbnQgY2ZnODAyMTFfbWdkX3dleHRfY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9jYWNoZWRfa2V5cyAqY2sgPSBOVUxMOworCWNvbnN0IHU4ICpwcmV2X2Jzc2lkID0gTlVMTDsKKwlpbnQgZXJyLCBpOworCisJQVNTRVJUX1JERVZfTE9DSyhyZGV2KTsKKwlBU1NFUlRfV0RFVl9MT0NLKHdkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHdkZXYtPm5ldGRldikpCisJCXJldHVybiAwOworCisJd2Rldi0+d2V4dC5jb25uZWN0LmllID0gd2Rldi0+d2V4dC5pZTsKKwl3ZGV2LT53ZXh0LmNvbm5lY3QuaWVfbGVuID0gd2Rldi0+d2V4dC5pZV9sZW47CisJd2Rldi0+d2V4dC5jb25uZWN0LnByaXZhY3kgPSB3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5ICE9IC0xOworCisJaWYgKHdkZXYtPndleHQua2V5cykgeworCQl3ZGV2LT53ZXh0LmtleXMtPmRlZiA9IHdkZXYtPndleHQuZGVmYXVsdF9rZXk7CisJCXdkZXYtPndleHQua2V5cy0+ZGVmbWdtdCA9IHdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleTsKKwl9CisKKwlpZiAoIXdkZXYtPndleHQuY29ubmVjdC5zc2lkX2xlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAod2Rldi0+d2V4dC5rZXlzKSB7CisJCWNrID0ga21lbWR1cCh3ZGV2LT53ZXh0LmtleXMsIHNpemVvZigqY2spLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjaykKKwkJCXJldHVybiAtRU5PTUVNOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJY2stPnBhcmFtc1tpXS5rZXkgPSBjay0+ZGF0YVtpXTsKKwl9CisKKwlpZiAod2Rldi0+d2V4dC5wcmV2X2Jzc2lkX3ZhbGlkKQorCQlwcmV2X2Jzc2lkID0gd2Rldi0+d2V4dC5wcmV2X2Jzc2lkOworCisJZXJyID0gX19jZmc4MDIxMV9jb25uZWN0KHJkZXYsIHdkZXYtPm5ldGRldiwKKwkJCQkgJndkZXYtPndleHQuY29ubmVjdCwgY2ssIHByZXZfYnNzaWQpOworCWlmIChlcnIpCisJCWtmcmVlKGNrKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X2ZyZXEgKndleHRmcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gTlVMTDsKKwlpbnQgZXJyLCBmcmVxOworCisJLyogY2FsbCBvbmx5IGZvciBzdGF0aW9uISAqLworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmcmVxID0gY2ZnODAyMTFfd2V4dF9mcmVxKHdkZXYtPndpcGh5LCB3ZXh0ZnJlcSk7CisJaWYgKGZyZXEgPCAwKQorCQlyZXR1cm4gZnJlcTsKKworCWlmIChmcmVxKSB7CisJCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2Rldi0+d2lwaHksIGZyZXEpOworCQlpZiAoIWNoYW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZmc4MDIxMV9sb2NrX3JkZXYocmRldik7CisJbXV0ZXhfbG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCXdkZXZfbG9jayh3ZGV2KTsKKworCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0lETEUpIHsKKwkJYm9vbCBldmVudCA9IHRydWU7CisKKwkJaWYgKHdkZXYtPndleHQuY29ubmVjdC5jaGFubmVsID09IGNoYW4pIHsKKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIGlmIFNTSUQgc2V0LCB3ZSdsbCB0cnkgcmlnaHQgYWdhaW4sIGF2b2lkIGV2ZW50ICovCisJCWlmICh3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZF9sZW4pCisJCQlldmVudCA9IGZhbHNlOworCQllcnIgPSBfX2NmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LAorCQkJCQkgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIGV2ZW50KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCisJd2Rldi0+d2V4dC5jb25uZWN0LmNoYW5uZWwgPSBjaGFuOworCisJLyogU1NJRCBpcyBub3Qgc2V0LCB3ZSBqdXN0IHdhbnQgdG8gc3dpdGNoIGNoYW5uZWwgKi8KKwlpZiAoY2hhbiAmJiAhd2Rldi0+d2V4dC5jb25uZWN0LnNzaWRfbGVuKSB7CisJCWVyciA9IHJkZXZfc2V0X2ZyZXEocmRldiwgd2RldiwgZnJlcSwgTkw4MDIxMV9DSEFOX05PX0hUKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gY2ZnODAyMTFfbWdkX3dleHRfY29ubmVjdChyZGV2LCB3ZGV2KTsKKyBvdXQ6CisJd2Rldl91bmxvY2sod2Rldik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJY2ZnODAyMTFfdW5sb2NrX3JkZXYocmRldik7CisJcmV0dXJuIGVycjsKK30KKworaW50IGNmZzgwMjExX21nZF93ZXh0X2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBOVUxMOworCisJLyogY2FsbCBvbmx5IGZvciBzdGF0aW9uISAqLworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3ZGV2X2xvY2sod2Rldik7CisJaWYgKHdkZXYtPmN1cnJlbnRfYnNzKQorCQljaGFuID0gd2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5jaGFubmVsOworCWVsc2UgaWYgKHdkZXYtPndleHQuY29ubmVjdC5jaGFubmVsKQorCQljaGFuID0gd2Rldi0+d2V4dC5jb25uZWN0LmNoYW5uZWw7CisJd2Rldl91bmxvY2sod2Rldik7CisKKwlpZiAoY2hhbikgeworCQlmcmVxLT5tID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJCWZyZXEtPmUgPSA2OworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBubyBjaGFubmVsIGlmIG5vdCBqb2luaW5nICovCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwlzaXplX3QgbGVuID0gZGF0YS0+bGVuZ3RoOworCWludCBlcnI7CisKKwkvKiBjYWxsIG9ubHkgZm9yIHN0YXRpb24hICovCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZGF0YS0+ZmxhZ3MpCisJCWxlbiA9IDA7CisKKwkvKiBpd2NvbmZpZyB1c2VzIG51bCB0ZXJtaW5hdGlvbiBpbiBTU0lELi4gKi8KKwlpZiAobGVuID4gMCAmJiBzc2lkW2xlbiAtIDFdID09ICdcMCcpCisJCWxlbi0tOworCisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2sod2Rldik7CisKKwllcnIgPSAwOworCisJaWYgKHdkZXYtPnNtZV9zdGF0ZSAhPSBDRkc4MDIxMV9TTUVfSURMRSkgeworCQlib29sIGV2ZW50ID0gdHJ1ZTsKKworCQlpZiAod2Rldi0+d2V4dC5jb25uZWN0LnNzaWQgJiYgbGVuICYmCisJCSAgICBsZW4gPT0gd2Rldi0+d2V4dC5jb25uZWN0LnNzaWRfbGVuICYmCisJCSAgICBtZW1jbXAod2Rldi0+d2V4dC5jb25uZWN0LnNzaWQsIHNzaWQsIGxlbikgPT0gMCkKKwkJCWdvdG8gb3V0OworCisJCS8qIGlmIFNTSUQgc2V0IG5vdywgd2UnbGwgdHJ5IHRvIGNvbm5lY3QsIGF2b2lkIGV2ZW50ICovCisJCWlmIChsZW4pCisJCQlldmVudCA9IGZhbHNlOworCQllcnIgPSBfX2NmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LAorCQkJCQkgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIGV2ZW50KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCXdkZXYtPndleHQucHJldl9ic3NpZF92YWxpZCA9IGZhbHNlOworCXdkZXYtPndleHQuY29ubmVjdC5zc2lkID0gd2Rldi0+d2V4dC5zc2lkOworCW1lbWNweSh3ZGV2LT53ZXh0LnNzaWQsIHNzaWQsIGxlbik7CisJd2Rldi0+d2V4dC5jb25uZWN0LnNzaWRfbGVuID0gbGVuOworCisJd2Rldi0+d2V4dC5jb25uZWN0LmNyeXB0by5jb250cm9sX3BvcnQgPSBmYWxzZTsKKworCWVyciA9IGNmZzgwMjExX21nZF93ZXh0X2Nvbm5lY3QocmRldiwgd2Rldik7Cisgb3V0OgorCXdkZXZfdW5sb2NrKHdkZXYpOworCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9naXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpzc2lkKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisKKwkvKiBjYWxsIG9ubHkgZm9yIHN0YXRpb24hICovCisJaWYgKFdBUk5fT04od2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEtPmZsYWdzID0gMDsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwlpZiAod2Rldi0+Y3VycmVudF9ic3MpIHsKKwkJY29uc3QgdTggKmllID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoJndkZXYtPmN1cnJlbnRfYnNzLT5wdWIsCisJCQkJCQkgICAgV0xBTl9FSURfU1NJRCk7CisJCWlmIChpZSkgeworCQkJZGF0YS0+ZmxhZ3MgPSAxOworCQkJZGF0YS0+bGVuZ3RoID0gaWVbMV07CisJCQltZW1jcHkoc3NpZCwgaWUgKyAyLCBkYXRhLT5sZW5ndGgpOworCQl9CisJfSBlbHNlIGlmICh3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZCAmJiB3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZF9sZW4pIHsKKwkJZGF0YS0+ZmxhZ3MgPSAxOworCQlkYXRhLT5sZW5ndGggPSB3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZF9sZW47CisJCW1lbWNweShzc2lkLCB3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZCwgZGF0YS0+bGVuZ3RoKTsKKwl9IGVsc2UKKwkJZGF0YS0+ZmxhZ3MgPSAwOworCXdkZXZfdW5sb2NrKHdkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZmc4MDIxMV9tZ2Rfd2V4dF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgc3RydWN0IHNvY2thZGRyICphcF9hZGRyLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7CisJdTggKmJzc2lkID0gYXBfYWRkci0+c2FfZGF0YTsKKwlpbnQgZXJyOworCisJLyogY2FsbCBvbmx5IGZvciBzdGF0aW9uISAqLworCWlmIChXQVJOX09OKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXBfYWRkci0+c2FfZmFtaWx5ICE9IEFSUEhSRF9FVEhFUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBhdXRvbWF0aWMgbW9kZSAqLworCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYnNzaWQpIHx8IGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGJzc2lkKSkKKwkJYnNzaWQgPSBOVUxMOworCisJY2ZnODAyMTFfbG9ja19yZGV2KHJkZXYpOworCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwl3ZGV2X2xvY2sod2Rldik7CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9JRExFKSB7CisJCWVyciA9IDA7CisJCS8qIGJvdGggYXV0b21hdGljICovCisJCWlmICghYnNzaWQgJiYgIXdkZXYtPndleHQuY29ubmVjdC5ic3NpZCkKKwkJCWdvdG8gb3V0OworCisJCS8qIGZpeGVkIGFscmVhZHkgLSBhbmQgbm8gY2hhbmdlICovCisJCWlmICh3ZGV2LT53ZXh0LmNvbm5lY3QuYnNzaWQgJiYgYnNzaWQgJiYKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgd2Rldi0+d2V4dC5jb25uZWN0LmJzc2lkKSA9PSAwKQorCQkJZ290byBvdXQ7CisKKwkJZXJyID0gX19jZmc4MDIxMV9kaXNjb25uZWN0KHJkZXYsIGRldiwKKwkJCQkJICAgIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HLCBmYWxzZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYnNzaWQpIHsKKwkJbWVtY3B5KHdkZXYtPndleHQuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJCXdkZXYtPndleHQuY29ubmVjdC5ic3NpZCA9IHdkZXYtPndleHQuYnNzaWQ7CisJfSBlbHNlCisJCXdkZXYtPndleHQuY29ubmVjdC5ic3NpZCA9IE5VTEw7CisKKwllcnIgPSBjZmc4MDIxMV9tZ2Rfd2V4dF9jb25uZWN0KHJkZXYsIHdkZXYpOworIG91dDoKKwl3ZGV2X3VubG9jayh3ZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgY2ZnODAyMTFfbWdkX3dleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqYXBfYWRkciwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCS8qIGNhbGwgb25seSBmb3Igc3RhdGlvbiEgKi8KKwlpZiAoV0FSTl9PTih3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCisJd2Rldl9sb2NrKHdkZXYpOworCWlmICh3ZGV2LT5jdXJyZW50X2JzcykKKwkJbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsIHdkZXYtPmN1cnJlbnRfYnNzLT5wdWIuYnNzaWQsIEVUSF9BTEVOKTsKKwllbHNlIGlmICh3ZGV2LT53ZXh0LmNvbm5lY3QuYnNzaWQpCisJCW1lbWNweShhcF9hZGRyLT5zYV9kYXRhLCB3ZGV2LT53ZXh0LmNvbm5lY3QuYnNzaWQsIEVUSF9BTEVOKTsKKwllbHNlCisJCW1lbXNldChhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJd2Rldl91bmxvY2sod2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNmZzgwMjExX3dleHRfc2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKwl1OCAqaWUgPSBleHRyYTsKKwlpbnQgaWVfbGVuID0gZGF0YS0+bGVuZ3RoLCBlcnI7CisKKwlpZiAod2Rldi0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghaWVfbGVuKQorCQlpZSA9IE5VTEw7CisKKwl3ZGV2X2xvY2sod2Rldik7CisKKwkvKiBubyBjaGFuZ2UgKi8KKwllcnIgPSAwOworCWlmICh3ZGV2LT53ZXh0LmllX2xlbiA9PSBpZV9sZW4gJiYKKwkgICAgbWVtY21wKHdkZXYtPndleHQuaWUsIGllLCBpZV9sZW4pID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKGllX2xlbikgeworCQlpZSA9IGttZW1kdXAoZXh0cmEsIGllX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghaWUpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZQorCQlpZSA9IE5VTEw7CisKKwlrZnJlZSh3ZGV2LT53ZXh0LmllKTsKKwl3ZGV2LT53ZXh0LmllID0gaWU7CisJd2Rldi0+d2V4dC5pZV9sZW4gPSBpZV9sZW47CisKKwlpZiAod2Rldi0+c21lX3N0YXRlICE9IENGRzgwMjExX1NNRV9JRExFKSB7CisJCWVyciA9IF9fY2ZnODAyMTFfZGlzY29ubmVjdChyZGV2LCBkZXYsCisJCQkJCSAgICBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORywgZmFsc2UpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogdXNlcnNwYWNlIGJldHRlciBub3QgdGhpbmsgd2UnbGwgcmVjb25uZWN0ICovCisJZXJyID0gMDsKKyBvdXQ6CisJd2Rldl91bmxvY2sod2Rldik7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3Z2VuaWUpOworCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdtbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKWV4dHJhOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlpbnQgZXJyOworCisJaWYgKCF3ZGV2KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKKworCWlmICh3ZGV2LT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWxtZS0+YWRkci5zYV9mYW1pbHkgIT0gQVJQSFJEX0VUSEVSKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdkZXZfbG9jayh3ZGV2KTsKKwlzd2l0Y2ggKG1sbWUtPmNtZCkgeworCWNhc2UgSVdfTUxNRV9ERUFVVEg6CisJY2FzZSBJV19NTE1FX0RJU0FTU09DOgorCQllcnIgPSBfX2NmZzgwMjExX2Rpc2Nvbm5lY3QocmRldiwgZGV2LCBtbG1lLT5yZWFzb25fY29kZSwKKwkJCQkJICAgIHRydWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQorCXdkZXZfdW5sb2NrKHdkZXYpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNmZzgwMjExX3dleHRfc2l3bWxtZSk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC5jIGIvbmV0L3dpcmVsZXNzL3dleHQuYwppbmRleCAyNTJjMjAxLi41YjRhMGNlIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LmMKQEAgLTQxNyw2ICs0MTcsMjEgQEAKIAlJV19FVl9RVUFMX0xFTiwJCQkvKiBJV19IRUFERVJfVFlQRV9RVUFMICovCiB9OwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RhdGljIGNvbnN0IGludCBjb21wYXRfZXZlbnRfdHlwZV9zaXplW10gPSB7CisJSVdfRVZfQ09NUEFUX0xDUF9MRU4sCQkvKiBJV19IRUFERVJfVFlQRV9OVUxMICovCisJMCwKKwlJV19FVl9DT01QQVRfQ0hBUl9MRU4sCQkvKiBJV19IRUFERVJfVFlQRV9DSEFSICovCisJMCwKKwlJV19FVl9DT01QQVRfVUlOVF9MRU4sCQkvKiBJV19IRUFERVJfVFlQRV9VSU5UICovCisJSVdfRVZfQ09NUEFUX0ZSRVFfTEVOLAkJLyogSVdfSEVBREVSX1RZUEVfRlJFUSAqLworCUlXX0VWX0NPTVBBVF9BRERSX0xFTiwJCS8qIElXX0hFQURFUl9UWVBFX0FERFIgKi8KKwkwLAorCUlXX0VWX0NPTVBBVF9QT0lOVF9MRU4sCQkvKiBXaXRob3V0IHZhcmlhYmxlIHBheWxvYWQgKi8KKwlJV19FVl9DT01QQVRfUEFSQU1fTEVOLAkJLyogSVdfSEVBREVSX1RZUEVfUEFSQU0gKi8KKwlJV19FVl9DT01QQVRfUVVBTF9MRU4sCQkvKiBJV19IRUFERVJfVFlQRV9RVUFMICovCit9OworI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogQ09NTU9OIFNVQlJPVVRJTkVTICoqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCkBAIC02MTAsNiArNjI1LDExIEBACiB7CiAJLyogR2V0IHN0YXRzIGZyb20gdGhlIGRyaXZlciAqLwogCXN0cnVjdCBpd19zdGF0aXN0aWNzICpzdGF0cyA9IGdldF93aXJlbGVzc19zdGF0cyhkZXYpOworCXN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyBudWxsc3RhdHMgPSB7fTsKKworCS8qIHNob3cgZGV2aWNlIGlmIGl0J3Mgd2lyZWxlc3MgcmVnYXJkbGVzcyBvZiBjdXJyZW50IHN0YXRzICovCisJaWYgKCFzdGF0cyAmJiBkZXYtPndpcmVsZXNzX2hhbmRsZXJzKQorCQlzdGF0cyA9ICZudWxsc3RhdHM7CiAKIAlpZiAoc3RhdHMpIHsKIAkJc2VxX3ByaW50ZihzZXEsICIlNnM6ICUwNHggICUzZCVjICAlM2QlYyAgJTNkJWMgICU2ZCAlNmQgJTZkICIKQEAgLTYyOCw3ICs2NDgsOSBAQAogCQkJICAgc3RhdHMtPmRpc2NhcmQubndpZCwgc3RhdHMtPmRpc2NhcmQuY29kZSwKIAkJCSAgIHN0YXRzLT5kaXNjYXJkLmZyYWdtZW50LCBzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzLAogCQkJICAgc3RhdHMtPmRpc2NhcmQubWlzYywgc3RhdHMtPm1pc3MuYmVhY29uKTsKLQkJc3RhdHMtPnF1YWwudXBkYXRlZCAmPSB+SVdfUVVBTF9BTExfVVBEQVRFRDsKKworCQlpZiAoc3RhdHMgIT0gJm51bGxzdGF0cykKKwkJCXN0YXRzLT5xdWFsLnVwZGF0ZWQgJj0gfklXX1FVQUxfQUxMX1VQREFURUQ7CiAJfQogfQogCkBAIC0xMjUwLDY1ICsxMjcyLDU3IEBACiB9CiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKiogRVZFTlQgUFJPQ0VTU0lORyAqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAqIFByb2Nlc3MgZXZlbnRzIGdlbmVyYXRlZCBieSB0aGUgd2lyZWxlc3MgbGF5ZXIgb3IgdGhlIGRyaXZlci4KLSAqIE1vc3Qgb2Z0ZW4sIHRoZSBldmVudCB3aWxsIGJlIHByb3BhZ2F0ZWQgdGhyb3VnaCBydG5ldGxpbmsKLSAqLworc3RhdGljIGludCBfX25ldF9pbml0IHdleHRfcGVybmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJm5ldC0+d2V4dF9ubGV2ZW50cyk7CisJcmV0dXJuIDA7Cit9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBMb2NraW5nLi4uCi0gKiAtLS0tLS0tLS0tCi0gKgotICogVGhhbmtzIHRvIEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4gZm9yIGZpeGluZwotICogdGhlIGxvY2tpbmcgaXNzdWUgaW4gaGVyZSBhbmQgaW1wbGVtZW50aW5nIHRoaXMgY29kZSAhCi0gKgotICogVGhlIGlzc3VlIDogd2lyZWxlc3Nfc2VuZF9ldmVudCgpIGlzIG9mdGVuIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwKLSAqIHdoaWxlIHRoZSBOZXRsaW5rIGxheWVyIGNhbiBuZXZlciBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCi0gKiBUaGUgZnVsbHkgZm9ybWVkIFJ0TmV0bGluayBldmVudHMgYXJlIHF1ZXVlZCwgYW5kIHRoZW4gYSB0YXNrbGV0IGlzIHJ1bgotICogdG8gZmVlZCB0aG9zZSB0byBOZXRsaW5rLgotICogVGhlIHNrYl9xdWV1ZSBpcyBpbnRlcnJ1cHQgc2FmZSwgYW5kIGl0cyBsb2NrIGlzIG5vdCBoZWxkIHdoaWxlIGNhbGxpbmcKLSAqIE5ldGxpbmssIHNvIHRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIGRlYWxvY2suCi0gKiBKZWFuIElJCi0gKi8KK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgd2V4dF9wZXJuZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc2tiX3F1ZXVlX3B1cmdlKCZuZXQtPndleHRfbmxldmVudHMpOworfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmZfaGVhZCB3aXJlbGVzc19ubGV2ZW50X3F1ZXVlOworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB3ZXh0X3Blcm5ldF9vcHMgPSB7CisJLmluaXQgPSB3ZXh0X3Blcm5ldF9pbml0LAorCS5leGl0ID0gd2V4dF9wZXJuZXRfZXhpdCwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IHdpcmVsZXNzX25sZXZlbnRfaW5pdCh2b2lkKQogewotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndpcmVsZXNzX25sZXZlbnRfcXVldWUpOwotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ3ZXh0X3Blcm5ldF9vcHMpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwod2lyZWxlc3NfbmxldmVudF9pbml0KTsKIAotc3RhdGljIHZvaWQgd2lyZWxlc3NfbmxldmVudF9wcm9jZXNzKHVuc2lnbmVkIGxvbmcgZGF0YSkKKy8qIFByb2Nlc3MgZXZlbnRzIGdlbmVyYXRlZCBieSB0aGUgd2lyZWxlc3MgbGF5ZXIgb3IgdGhlIGRyaXZlci4gKi8KK3N0YXRpYyB2b2lkIHdpcmVsZXNzX25sZXZlbnRfcHJvY2VzcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3aXJlbGVzc19ubGV2ZW50X3F1ZXVlKSkpCi0JCXJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbG9jaygpOworCisJZm9yX2VhY2hfbmV0KG5ldCkgeworCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZuZXQtPndleHRfbmxldmVudHMpKSkKKwkJCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsCisJCQkJICAgIEdGUF9LRVJORUwpOworCX0KKworCXJ0bmxfdW5sb2NrKCk7CiB9CiAKLXN0YXRpYyBERUNMQVJFX1RBU0tMRVQod2lyZWxlc3NfbmxldmVudF90YXNrbGV0LCB3aXJlbGVzc19ubGV2ZW50X3Byb2Nlc3MsIDApOworc3RhdGljIERFQ0xBUkVfV09SSyh3aXJlbGVzc19ubGV2ZW50X3dvcmssIHdpcmVsZXNzX25sZXZlbnRfcHJvY2Vzcyk7CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qCi0gKiBGaWxsIGEgcnRuZXRsaW5rIG1lc3NhZ2Ugd2l0aCBvdXIgZXZlbnQgZGF0YS4KLSAqIE5vdGUgdGhhdCB3ZSBwcm9wYWdlIG9ubHkgdGhlIHNwZWNpZmllZCBldmVudCBhbmQgZG9uJ3QgZHVtcCB0aGUKLSAqIGN1cnJlbnQgd2lyZWxlc3MgY29uZmlnLiBEdW1waW5nIHRoZSB3aXJlbGVzcyBjb25maWcgaXMgZmFyIHRvbwotICogZXhwZW5zaXZlIChmb3IgZWFjaCBwYXJhbWV0ZXIsIHRoZSBkcml2ZXIgbmVlZCB0byBxdWVyeSB0aGUgaGFyZHdhcmUpLgotICovCi1zdGF0aWMgaW50IHJ0bmV0bGlua19maWxsX2l3aW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBpbnQgdHlwZSwgY2hhciAqZXZlbnQsIGludCBldmVudF9sZW4pCitzdGF0aWMgc3RydWN0IG5sbXNnaGRyICpydG5ldGxpbmtfaWZpbmZvX3ByZXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWZpbmZvbXNnICpyOwogCXN0cnVjdCBubG1zZ2hkciAgKm5saDsKIAotCW5saCA9IG5sbXNnX3B1dChza2IsIDAsIDAsIHR5cGUsIHNpemVvZigqciksIDApOwotCWlmIChubGggPT0gTlVMTCkKLQkJcmV0dXJuIC1FTVNHU0laRTsKKwlubGggPSBubG1zZ19wdXQoc2tiLCAwLCAwLCBSVE1fTkVXTElOSywgc2l6ZW9mKCpyKSwgMCk7CisJaWYgKCFubGgpCisJCXJldHVybiBOVUxMOwogCiAJciA9IG5sbXNnX2RhdGEobmxoKTsKIAlyLT5pZmlfZmFtaWx5ID0gQUZfVU5TUEVDOwpAQCAtMTMxOSw0OCArMTMzMywxNCBAQAogCXItPmlmaV9jaGFuZ2UgPSAwOwkvKiBXaXJlbGVzcyBjaGFuZ2VzIGRvbid0IGFmZmVjdCB0aG9zZSBmbGFncyAqLwogCiAJTkxBX1BVVF9TVFJJTkcoc2tiLCBJRkxBX0lGTkFNRSwgZGV2LT5uYW1lKTsKLQkvKiBBZGQgdGhlIHdpcmVsZXNzIGV2ZW50cyBpbiB0aGUgbmV0bGluayBwYWNrZXQgKi8KLQlOTEFfUFVUKHNrYiwgSUZMQV9XSVJFTEVTUywgZXZlbnRfbGVuLCBldmVudCk7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKLQotbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiBubGg7CisgbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7Ci0JcmV0dXJuIC1FTVNHU0laRTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIENyZWF0ZSBhbmQgYnJvYWRjYXN0IGFuZCBzZW5kIGl0IG9uIHRoZSBzdGFuZGFyZCBydG5ldGxpbmsgc29ja2V0Ci0gKiBUaGlzIGlzIGEgcHVyZSBjbG9uZSBydG1zZ19pZmluZm8oKSBpbiBuZXQvY29yZS9ydG5ldGxpbmsuYwotICogQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiBtYW5kYXRlZCB0aGF0IEkgdXNlZCBhIElGTEFfWFhYIGZpZWxkCi0gKiB3aXRoaW4gYSBSVE1fTkVXTElOSyBldmVudC4KLSAqLwotc3RhdGljIHZvaWQgcnRtc2dfaXdpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmV2ZW50LCBpbnQgZXZlbnRfbGVuKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGVycjsKIAotCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKLQkJcmV0dXJuOwotCi0Jc2tiID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybjsKLQotCWVyciA9IHJ0bmV0bGlua19maWxsX2l3aW5mbyhza2IsIGRldiwgUlRNX05FV0xJTkssIGV2ZW50LCBldmVudF9sZW4pOwotCWlmIChlcnIgPCAwKSB7Ci0JCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQotCi0JTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IFJUTkxHUlBfTElOSzsKLQlza2JfcXVldWVfdGFpbCgmd2lyZWxlc3NfbmxldmVudF9xdWV1ZSwgc2tiKTsKLQl0YXNrbGV0X3NjaGVkdWxlKCZ3aXJlbGVzc19ubGV2ZW50X3Rhc2tsZXQpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogTWFpbiBldmVudCBkaXNwYXRjaGVyLiBDYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBhbmQgZHJpdmVycy4KICAqIFNlbmQgdGhlIGV2ZW50IG9uIHRoZSBhcHByb3ByaWF0ZSBjaGFubmVscy4KQEAgLTEzNjksNyArMTM0OSw3IEBACiB2b2lkIHdpcmVsZXNzX3NlbmRfZXZlbnQoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYsCiAJCQkgdW5zaWduZWQgaW50CQljbWQsCiAJCQkgdW5pb24gaXdyZXFfZGF0YSAqCXdycXUsCi0JCQkgY2hhciAqCQkJZXh0cmEpCisJCQkgY29uc3QgY2hhciAqCQlleHRyYSkKIHsKIAljb25zdCBzdHJ1Y3QgaXdfaW9jdGxfZGVzY3JpcHRpb24gKglkZXNjciA9IE5VTEw7CiAJaW50IGV4dHJhX2xlbiA9IDA7CkBAIC0xMzc5LDYgKzEzNTksMjUgQEAKIAlpbnQgd3JxdV9vZmYgPSAwOwkJCS8qIE9mZnNldCBpbiB3cnF1ICovCiAJLyogRG9uJ3QgIm9wdGltaXNlIiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlLCBpdCB3aWxsIGNyYXNoICovCiAJdW5zaWduZWQJY21kX2luZGV4OwkJLyogKk1VU1QqIGJlIHVuc2lnbmVkICovCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCXN0cnVjdCBfX2NvbXBhdF9pd19ldmVudCAqY29tcGF0X2V2ZW50OworCXN0cnVjdCBjb21wYXRfaXdfcG9pbnQgY29tcGF0X3dycXU7CisJc3RydWN0IHNrX2J1ZmYgKmNvbXBza2I7CisjZW5kaWYKKworCS8qCisJICogTm90aGluZyBpbiB0aGUga2VybmVsIHNlbmRzIHNjYW4gZXZlbnRzIHdpdGggZGF0YSwgYmUgc2FmZS4KKwkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGNhbm5vdCBmaXggdXAgc2NhbiBldmVudCBkYXRhCisJICogZm9yIGNvbXBhdCwgZHVlIHRvIGJlaW5nIGNvbnRhaW5lZCBpbiAnZXh0cmEnLCBidXQgbm9ybWFsbHkKKwkgKiBhcHBsaWNhdGlvbnMgYXJlIHJlcXVpcmVkIHRvIHJldHJpZXZlIHRoZSBzY2FuIGRhdGEgYW55d2F5CisJICogYW5kIG5vIGRhdGEgaXMgaW5jbHVkZWQgaW4gdGhlIGV2ZW50LCB0aGlzIGNvZGlmaWVzIHRoYXQKKwkgKiBwcmFjdGljZS4KKwkgKi8KKwlpZiAoV0FSTl9PTihjbWQgPT0gU0lPQ0dJV1NDQU4gJiYgZXh0cmEpKQorCQlleHRyYSA9IE5VTEw7CiAKIAkvKiBHZXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBFdmVudCAqLwogCWlmIChjbWQgPD0gU0lPQ0lXTEFTVCkgewpAQCAtMTQyNiwyNSArMTQyNSwxMDcgQEAKIAloZHJfbGVuID0gZXZlbnRfdHlwZV9zaXplW2Rlc2NyLT5oZWFkZXJfdHlwZV07CiAJZXZlbnRfbGVuID0gaGRyX2xlbiArIGV4dHJhX2xlbjsKIAotCS8qIENyZWF0ZSB0ZW1wb3JhcnkgYnVmZmVyIHRvIGhvbGQgdGhlIGV2ZW50ICovCi0JZXZlbnQgPSBrbWFsbG9jKGV2ZW50X2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKGV2ZW50ID09IE5VTEwpCisJLyoKKwkgKiBUaGUgcHJvYmxlbSBmb3IgNjQvMzIgYml0LgorCSAqCisJICogT24gNjQtYml0LCBhIHJlZ3VsYXIgZXZlbnQgaXMgbGFpZCBvdXQgYXMgZm9sbG93czoKKwkgKiAgICAgIHwgIDAgIHwgIDEgIHwgIDIgIHwgIDMgIHwgIDQgIHwgIDUgIHwgIDYgIHwgIDcgIHwKKwkgKiAgICAgIHwgZXZlbnQubGVuIHwgZXZlbnQuY21kIHwgICAgIHAgYSBkIGQgaSBuIGcgICAgIHwKKwkgKiAgICAgIHwgd3JxdSBkYXRhIC4uLiAod2l0aCB0aGUgY29ycmVjdCBzaXplKSAgICAgICAgIHwKKwkgKgorCSAqIFRoaXMgcGFkZGluZyBleGlzdHMgYmVjYXVzZSB3ZSBtYW5pcHVsYXRlIGV2ZW50LT51LAorCSAqIGFuZCAnZXZlbnQnIGlzIG5vdCBwYWNrZWQuCisJICoKKwkgKiBBbiBpd19wb2ludCBldmVudCBpcyBsYWlkIG91dCBsaWtlIHRoaXMgaW5zdGVhZDoKKwkgKiAgICAgIHwgIDAgIHwgIDEgIHwgIDIgIHwgIDMgIHwgIDQgIHwgIDUgIHwgIDYgIHwgIDcgIHwKKwkgKiAgICAgIHwgZXZlbnQubGVuIHwgZXZlbnQuY21kIHwgICAgIHAgYSBkIGQgaSBuIGcgICAgIHwKKwkgKiAgICAgIHwgaXdwbnQubGVuIHwgaXdwbnQuZmxnIHwgICAgIHAgYSBkIGQgaSBuIGcgICAgIHwKKwkgKiAgICAgIHwgZXh0cmEgZGF0YSAgLi4uCisJICoKKwkgKiBUaGUgc2Vjb25kIHBhZGRpbmcgZXhpc3RzIGJlY2F1c2Ugc3RydWN0IGl3X3BvaW50IGlzIGV4dGVuZGVkLAorCSAqIGJ1dCB0aGlzIGRlcGVuZHMgb24gdGhlIHBsYXRmb3JtLi4uCisJICoKKwkgKiBPbiAzMi1iaXQsIGFsbCB0aGUgcGFkZGluZyBzaG91bGRuJ3QgYmUgdGhlcmUuCisJICovCisKKwlza2IgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKIAkJcmV0dXJuOwogCi0JLyogRmlsbCBldmVudCAqLworCS8qIFNlbmQgdmlhIHRoZSBSdE5ldGxpbmsgZXZlbnQgY2hhbm5lbCAqLworCW5saCA9IHJ0bmV0bGlua19pZmluZm9fcHJlcChkZXYsIHNrYik7CisJaWYgKFdBUk5fT04oIW5saCkpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKKwkvKiBBZGQgdGhlIHdpcmVsZXNzIGV2ZW50cyBpbiB0aGUgbmV0bGluayBwYWNrZXQgKi8KKwlubGEgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfV0lSRUxFU1MsIGV2ZW50X2xlbik7CisJaWYgKCFubGEpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisJZXZlbnQgPSBubGFfZGF0YShubGEpOworCisJLyogRmlsbCBldmVudCAtIGZpcnN0IGNsZWFyIHRvIGF2b2lkIGRhdGEgbGVha2luZyAqLworCW1lbXNldChldmVudCwgMCwgaGRyX2xlbik7CiAJZXZlbnQtPmxlbiA9IGV2ZW50X2xlbjsKIAlldmVudC0+Y21kID0gY21kOwogCW1lbWNweSgmZXZlbnQtPnUsICgoY2hhciAqKSB3cnF1KSArIHdycXVfb2ZmLCBoZHJfbGVuIC0gSVdfRVZfTENQX0xFTik7Ci0JaWYgKGV4dHJhKQorCWlmIChleHRyYV9sZW4pCiAJCW1lbWNweSgoKGNoYXIgKikgZXZlbnQpICsgaGRyX2xlbiwgZXh0cmEsIGV4dHJhX2xlbik7CiAKKwlubG1zZ19lbmQoc2tiLCBubGgpOworI2lmZGVmIENPTkZJR19DT01QQVQKKwloZHJfbGVuID0gY29tcGF0X2V2ZW50X3R5cGVfc2l6ZVtkZXNjci0+aGVhZGVyX3R5cGVdOworCWV2ZW50X2xlbiA9IGhkcl9sZW4gKyBleHRyYV9sZW47CisKKwljb21wc2tiID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0FUT01JQyk7CisJaWYgKCFjb21wc2tiKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm47CisJfQorCiAJLyogU2VuZCB2aWEgdGhlIFJ0TmV0bGluayBldmVudCBjaGFubmVsICovCi0JcnRtc2dfaXdpbmZvKGRldiwgKGNoYXIgKikgZXZlbnQsIGV2ZW50X2xlbik7CisJbmxoID0gcnRuZXRsaW5rX2lmaW5mb19wcmVwKGRldiwgY29tcHNrYik7CisJaWYgKFdBUk5fT04oIW5saCkpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWtmcmVlX3NrYihjb21wc2tiKTsKKwkJcmV0dXJuOworCX0KIAotCS8qIENsZWFudXAgKi8KLQlrZnJlZShldmVudCk7CisJLyogQWRkIHRoZSB3aXJlbGVzcyBldmVudHMgaW4gdGhlIG5ldGxpbmsgcGFja2V0ICovCisJbmxhID0gbmxhX3Jlc2VydmUoY29tcHNrYiwgSUZMQV9XSVJFTEVTUywgZXZlbnRfbGVuKTsKKwlpZiAoIW5sYSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKGNvbXBza2IpOworCQlyZXR1cm47CisJfQorCWNvbXBhdF9ldmVudCA9IG5sYV9kYXRhKG5sYSk7CiAKLQlyZXR1cm47CQkvKiBBbHdheXMgc3VjY2VzcywgSSBndWVzcyA7LSkgKi8KKwljb21wYXRfZXZlbnQtPmxlbiA9IGV2ZW50X2xlbjsKKwljb21wYXRfZXZlbnQtPmNtZCA9IGNtZDsKKwlpZiAoZGVzY3ItPmhlYWRlcl90eXBlID09IElXX0hFQURFUl9UWVBFX1BPSU5UKSB7CisJCWNvbXBhdF93cnF1Lmxlbmd0aCA9IHdycXUtPmRhdGEubGVuZ3RoOworCQljb21wYXRfd3JxdS5mbGFncyA9IHdycXUtPmRhdGEuZmxhZ3M7CisJCW1lbWNweSgmY29tcGF0X2V2ZW50LT5wb2ludGVyLAorCQkJKChjaGFyICopICZjb21wYXRfd3JxdSkgKyBJV19FVl9DT01QQVRfUE9JTlRfT0ZGLAorCQkJaGRyX2xlbiAtIElXX0VWX0NPTVBBVF9MQ1BfTEVOKTsKKwkJaWYgKGV4dHJhX2xlbikKKwkJCW1lbWNweSgoKGNoYXIgKikgY29tcGF0X2V2ZW50KSArIGhkcl9sZW4sCisJCQkJZXh0cmEsIGV4dHJhX2xlbik7CisJfSBlbHNlIHsKKwkJLyogZXh0cmFfbGVuIG11c3QgYmUgemVybywgc28gbm8gaWYgKGV4dHJhKSBuZWVkZWQgKi8KKwkJbWVtY3B5KCZjb21wYXRfZXZlbnQtPnBvaW50ZXIsIHdycXUsCisJCQloZHJfbGVuIC0gSVdfRVZfQ09NUEFUX0xDUF9MRU4pOworCX0KKworCW5sbXNnX2VuZChjb21wc2tiLCBubGgpOworCisJc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QgPSBjb21wc2tiOworI2VuZGlmCisJc2tiX3F1ZXVlX3RhaWwoJmRldl9uZXQoZGV2KS0+d2V4dF9ubGV2ZW50cywgc2tiKTsKKwlzY2hlZHVsZV93b3JrKCZ3aXJlbGVzc19ubGV2ZW50X3dvcmspOwogfQogRVhQT1JUX1NZTUJPTCh3aXJlbGVzc19zZW5kX2V2ZW50KTsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wcm9jLmMgYi9uZXQveGZybS94ZnJtX3Byb2MuYwppbmRleCBhMmFkYjUxLi5mZWY4ZGI1IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3Byb2MuYworKysgYi9uZXQveGZybS94ZnJtX3Byb2MuYwpAQCAtNjAsNyArNjAsNyBAQAogCXJldHVybiBzaW5nbGVfb3Blbl9uZXQoaW5vZGUsIGZpbGUsIHhmcm1fc3RhdGlzdGljc19zZXFfc2hvdyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmcm1fc3RhdGlzdGljc19zZXFfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHhmcm1fc3RhdGlzdGljc19zZXFfZm9wcyA9IHsKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JID0geGZybV9zdGF0aXN0aWNzX3NlcV9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9rcHJvYmVzL2tyZXRwcm9iZV9leGFtcGxlLmMgYi9zYW1wbGVzL2twcm9iZXMva3JldHByb2JlX2V4YW1wbGUuYwppbmRleCA0ZTc2NGIzLi4xMDQxYjY3IDEwMDY0NAotLS0gYS9zYW1wbGVzL2twcm9iZXMva3JldHByb2JlX2V4YW1wbGUuYworKysgYi9zYW1wbGVzL2twcm9iZXMva3JldHByb2JlX2V4YW1wbGUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIHN0YXRpYyBjaGFyIGZ1bmNfbmFtZVtOQU1FX01BWF0gPSAiZG9fZm9yayI7CiBtb2R1bGVfcGFyYW1fc3RyaW5nKGZ1bmMsIGZ1bmNfbmFtZSwgTkFNRV9NQVgsIFNfSVJVR08pOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIGIvc2NyaXB0cy9leHRyYWN0LWlrY29uZmlnCmluZGV4IDcyOTk3YzMuLmRlMjMzZmYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZworKysgYi9zY3JpcHRzL2V4dHJhY3QtaWtjb25maWcKQEAgLTE3LDYgKzE3LDEwIEBACiAJcmV0dXJuCiAgICAgZmkKICAgICBlbmQ9YCRiaW5vZmZzZXQgJGZpbGUgJElLQ0ZHX0VEIDI+L2Rldi9udWxsYAorICAgIFsgIiQ/IiAhPSAiMCIgXSAmJiBlbmQ9Ii0xIgorICAgIGlmIFsgIiRlbmQiIC1lcSAiLTEiIF07IHRoZW4KKwlyZXR1cm4KKyAgICBmaQogCiAgICAgc3RhcnQ9YGV4cHIgJHN0YXJ0ICsgOGAKICAgICBzaXplPWBleHByICRlbmQgLSAkc3RhcnRgCkBAIC01NSw2ICs1OSw4IEBACiBHWkhEUjE9IjB4MWYgMHg4YiAweDA4IDB4MDAiCiBHWkhEUjI9IjB4MWYgMHg4YiAweDA4IDB4MDgiCiAKK0VMRkhEUj0iMHg3ZiAweDQ1IDB4NGMgMHg0NiIKKwogIyB2bWxpbnV4Lmd6OiBDaGVjayBmb3IgYSBjb21wcmVzc2VkIGltYWdlcwogb2ZmPWAkYmlub2Zmc2V0ICIkaW1hZ2UiICRHWkhEUjEgMj4vZGV2L251bGxgCiBbICIkPyIgIT0gIjAiIF0gJiYgb2ZmPSItMSIKQEAgLTY5LDYgKzc1LDE0IEBACiAJKGRkIGlicz0iJG9mZiIgc2tpcD0xIGNvdW50PTAgJiYgZGQgYnM9NTEyaykgPCIkaW1hZ2UiIDI+L2Rldi9udWxsIHwgXAogCQl6Y2F0ID4iJFRNUEZJTEUiCiAJZHVtcF9jb25maWcgIiRUTVBGSUxFIgorCisjIGNoZWNrIGlmIHRoaXMgaXMgc2ltcGx5IGFuIEVMRiBmaWxlCitlbHNlCisJb2ZmPWAkYmlub2Zmc2V0ICIkaW1hZ2UiICRFTEZIRFIgMj4vZGV2L251bGxgCisJWyAiJD8iICE9ICIwIiBdICYmIG9mZj0iLTEiCisJaWYgWyAiJG9mZiIgLWVxICIwIiBdOyB0aGVuCisJCWR1bXBfY29uZmlnICIkaW1hZ2UiCisJZmkKIGZpCiAKIGVjaG8gIkVSUk9SOiBVbmFibGUgdG8gZXh0cmFjdCBrZXJuZWwgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKaW5kZXggNWRkZjhiZS4uNmQ2OWM3YyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCisrKyBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQpAQCAtMiw3ICsyLDggQEAKICMgS2VybmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cwogIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZyb20gdG9wLWxldmVsIG1ha2VmaWxlCiAKLVBIT05ZICs9IG9sZGNvbmZpZyB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgc2lsZW50b2xkY29uZmlnIHVwZGF0ZS1wby1jb25maWcKK1BIT05ZICs9IG9sZGNvbmZpZyB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgc2lsZW50b2xkY29uZmlnIHVwZGF0ZS1wby1jb25maWcgXAorCWxvY2FsbW9kY29uZmlnIGxvY2FseWVzY29uZmlnCiAKIGlmZGVmIEtCVUlMRF9LQ09ORklHCiBLY29uZmlnIDo9ICQoS0JVSUxEX0tDT05GSUcpCkBAIC0yOCw2ICsyOSwzNSBAQAogc2lsZW50b2xkY29uZmlnOiAkKG9iaikvY29uZgogCSQ8IC1zICQoS2NvbmZpZykKIAorbG9jYWxtb2Rjb25maWc6ICQob2JqKS9zdHJlYW1saW5lX2NvbmZpZy5wbCAkKG9iaikvY29uZgorCSQoUSlwZXJsICQ8ICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZworCSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJXAorCQkJY21wIC1zIC50bXAuY29uZmlnIC5jb25maWcgfHwJCVwKKwkJCShtdiAtZiAuY29uZmlnIC5jb25maWcub2xkLjE7CQlcCisJCQkgbXYgLWYgLnRtcC5jb25maWcgLmNvbmZpZzsJCVwKKwkJCSAkKG9iaikvY29uZiAtcyAkKEtjb25maWcpOwkJXAorCQkJIG12IC1mIC5jb25maWcub2xkLjEgLmNvbmZpZy5vbGQpCVwKKwllbHNlCQkJCQkJCVwKKwkJCW12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQlcCisJCQkkKG9iaikvY29uZiAtcyAkKEtjb25maWcpOwkJXAorCWZpCisJJChRKXJtIC1mIC50bXAuY29uZmlnCisKK2xvY2FseWVzY29uZmlnOiAkKG9iaikvc3RyZWFtbGluZV9jb25maWcucGwgJChvYmopL2NvbmYKKwkkKFEpcGVybCAkPCAkKEtjb25maWcpID4gLnRtcC5jb25maWcKKwkkKFEpc2VkIC1pIHMvPW0vPXkvIC50bXAuY29uZmlnCisJJChRKWlmIFsgLWYgLmNvbmZpZyBdOyB0aGVuIAkJCQlcCisJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJXAorCQkJKG12IC1mIC5jb25maWcgLmNvbmZpZy5vbGQuMTsJCVwKKwkJCSBtdiAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJXAorCQkJICQob2JqKS9jb25mIC1zICQoS2NvbmZpZyk7CQlcCisJCQkgbXYgLWYgLmNvbmZpZy5vbGQuMSAuY29uZmlnLm9sZCkJXAorCWVsc2UJCQkJCQkJXAorCQkJbXYgLWYgLnRtcC5jb25maWcgLmNvbmZpZzsJCVwKKwkJCSQob2JqKS9jb25mIC1zICQoS2NvbmZpZyk7CQlcCisJZmkKKwkkKFEpcm0gLWYgLnRtcC5jb25maWcKKwogIyBDcmVhdGUgbmV3IGxpbnV4LnBvdCBmaWxlCiAjIEFkanVzdCBjaGFyc2V0IHRvIFVURi04IGluIC5wbyBmaWxlIHRvIGFjY2VwdCBVVEYtOCBpbiBLY29uZmlnIGZpbGVzCiAjIFRoZSBzeW1saW5rIGlzIHVzZWQgdG8gcmVwYWlyIGEgZGVmaWNpZW5jeSBpbiBhcmNoL3VtCkBAIC04Myw2ICsxMTMsOCBAQAogCUBlY2hvICAnICB4Y29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgUVQgYmFzZWQgZnJvbnQtZW5kJwogCUBlY2hvICAnICBnY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgR1RLIGJhc2VkIGZyb250LWVuZCcKIAlAZWNobyAgJyAgb2xkY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlJworCUBlY2hvICAnICBsb2NhbG1vZGNvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgZGlzYWJsaW5nIG1vZHVsZXMgbm90IGxvYWRlZCcKKwlAZWNobyAgJyAgbG9jYWx5ZXNjb25maWcgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIGNvbnZlcnRpbmcgbG9jYWwgbW9kcyB0byBjb3JlJwogCUBlY2hvICAnICBzaWxlbnRvbGRjb25maWcgLSBTYW1lIGFzIG9sZGNvbmZpZywgYnV0IHF1aWV0bHksIGFkZGl0aW9uYWxseSB1cGRhdGUgZGVwcycKIAlAZWNobyAgJyAgcmFuZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIgdG8gYWxsIG9wdGlvbnMnCiAJQGVjaG8gICcgIGRlZmNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgYW5zd2VyIHRvIGFsbCBvcHRpb25zJwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsIGIvc2NyaXB0cy9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTg0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zY3JpcHRzL2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKQEAgLTAsMCArMSwzNjYgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIworIyBDb3B5d3JpdGUgMjAwNS0yMDA5IC0gU3RldmVuIFJvc3RlZHQKKyMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjICBJdCdzIHNpbXBsZSBlbm91Z2ggdG8gZmlndXJlIG91dCBob3cgdGhpcyB3b3Jrcy4KKyMgIElmIG5vdCwgdGhlbiB5b3UgY2FuIGFzayBtZSBhdCBzdHJpcGNvbmZpZ0Bnb29kbWlzLm9yZworIworIyBXaGF0IGl0IGRvZXM/CisjCisjICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIGEgTGludXgga2VybmVsIGZyb20gYSBkaXN0cmlidXRpb24KKyMgICB0aGF0IHR1cm5zIG9uIHdheSB0b28gbWFueSBtb2R1bGVzIHRoYW4geW91IG5lZWQsIGFuZAorIyAgIHlvdSBvbmx5IHdhbnQgdGhlIG1vZHVsZXMgeW91IHVzZSwgdGhlbiB0aGlzIHByb2dyYW0KKyMgICBpcyBwZXJmZWN0IGZvciB5b3UuCisjCisjICAgSXQgZ2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvIHR1cm4gb2ZmIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFyZQorIyAgIG5vdCBsb2FkZWQgb24geW91ciBzeXN0ZW0uCisjCisjIEhvd3RvOgorIworIyAgMS4gQm9vdCB1cCB0aGUga2VybmVsIHRoYXQgeW91IHdhbnQgdG8gc3RyZWFtIGxpbmUgdGhlIGNvbmZpZyBvbi4KKyMgIDIuIENoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBzb3VyY2Ugb2YgdGhlCisjICAgICAgIGtlcm5lbCB0aGF0IHlvdSBqdXN0IGJvb3RlZC4KKyMgIDMuIENvcHkgdGhlIGNvbmZpZ3VyYXRvbiBmaWxlIHRvIHRoaXMgZGlyZWN0b3J5IGFzIC5jb25maWcKKyMgIDQuIEhhdmUgYWxsIHlvdXIgZGV2aWNlcyB0aGF0IHlvdSBuZWVkIG1vZHVsZXMgZm9yIGNvbm5lY3RlZCBhbmQKKyMgICAgICBvcGVyYXRpb25hbCAobWFrZSBzdXJlIHRoYXQgdGhlaXIgY29ycmVzcG9uZGluZyBtb2R1bGVzIGFyZSBsb2FkZWQpCisjICA1LiBSdW4gdGhpcyBzY3JpcHQgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCB0byBzb21lIG90aGVyIGZpbGUKKyMgICAgICAgbGlrZSBjb25maWdfc3RyaXAuCisjICA2LiBCYWNrIHVwIHlvdXIgb2xkIGNvbmZpZyAoaWYgeW91IHdhbnQgdG9vKS4KKyMgIDcuIGNvcHkgdGhlIGNvbmZpZ19zdHJpcCBmaWxlIHRvIC5jb25maWcKKyMgIDguIFJ1biAibWFrZSBvbGRjb25maWciCisjCisjICBOb3cgeW91ciBrZXJuZWwgaXMgcmVhZHkgdG8gYmUgYnVpbHQgd2l0aCBvbmx5IHRoZSBtb2R1bGVzIHRoYXQKKyMgIGFyZSBsb2FkZWQuCisjCisjIEhlcmUncyB3aGF0IEkgZGlkIHdpdGggbXkgRGViaWFuIGRpc3RyaWJ1dGlvbi4KKyMKKyMgICAgY2QgL3Vzci9zcmMvbGludXgtMi42LjEwCisjICAgIGNwIC9ib290L2NvbmZpZy0yLjYuMTAtMS02ODYtc21wIC5jb25maWcKKyMgICAgfi9iaW4vc3RyZWFtbGluZV9jb25maWcgPiBjb25maWdfc3RyaXAKKyMgICAgbXYgLmNvbmZpZyBjb25maWdfc2F2CisjICAgIG12IGNvbmZpZ19zdHJpcCAuY29uZmlnCisjICAgIG1ha2Ugb2xkY29uZmlnCisjCitteSAkY29uZmlnID0gIi5jb25maWciOworbXkgJGxpbnV4cGF0aCA9ICIuIjsKKworbXkgJHVuYW1lID0gYHVuYW1lIC1yYDsKK2Nob21wICR1bmFtZTsKKworbXkgQHNlYXJjaGNvbmZpZ3MgPSAoCisJeworCSAgICAiZmlsZSIgPT4gIi5jb25maWciLAorCSAgICAiZXhlYyIgPT4gImNhdCIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAiL3Byb2MvY29uZmlnLmd6IiwKKwkgICAgImV4ZWMiID0+ICJ6Y2F0IiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+ICIvYm9vdC9jb25maWctJHVuYW1lIiwKKwkgICAgImV4ZWMiID0+ICJjYXQiLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gIi9ib290L3ZtbGludXotJHVuYW1lIiwKKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAidm1saW51eCIsCisJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gIi9saWIvbW9kdWxlcy8kdW5hbWUva2VybmVsL2tlcm5lbC9jb25maWdzLmtvIiwKKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAia2VybmVsL2NvbmZpZ3Mua28iLAorCSAgICAiZXhlYyIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJICAgICJ0ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+ICJrZXJuZWwvY29uZmlncy5vIiwKKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwKKyk7CisKK3N1YiBmaW5kX2NvbmZpZyB7CisgICAgZm9yZWFjaCBteSAkY29uZiAoQHNlYXJjaGNvbmZpZ3MpIHsKKwlteSAkZmlsZSA9ICRjb25mLT57ImZpbGUifTsKKworCW5leHQgaWYgKCAhIC1mICIkZmlsZSIpOworCisJaWYgKGRlZmluZWQoJGNvbmYtPnsidGVzdCJ9KSkgeworCSAgICBgJGNvbmYtPnsidGVzdCJ9ICRjb25mLT57ImZpbGUifSAyPi9kZXYvbnVsbGA7CisJICAgIG5leHQgaWYgKCQ/KTsKKwl9CisKKwlteSAkZXhlYyA9ICRjb25mLT57ImV4ZWMifTsKKworCXByaW50IFNUREVSUiAidXNpbmcgY29uZmlnOiAnJGZpbGUnXG4iOworCisJb3BlbihDSU4sICIkZXhlYyAkZmlsZSB8IikgfHwgZGllICJGYWlsZWQgdG8gcnVuICRleGVjICRmaWxlIjsKKwlyZXR1cm47CisgICAgfQorICAgIGRpZSAiTm8gY29uZmlnIGZpbGUgZm91bmQiOworfQorCitmaW5kX2NvbmZpZzsKKworbXkgQG1ha2VmaWxlcyA9IGBmaW5kICRsaW51eHBhdGggLW5hbWUgTWFrZWZpbGVgOworbXkgJWRlcGVuZHM7CitteSAlc2VsZWN0czsKK215ICVwcm9tcHRzOworbXkgJW9iamVjdHM7CitteSAkdmFyOworbXkgJGNvbnQgPSAwOworCisjIEdldCB0aGUgdG9wIGxldmVsIEtjb25maWcgZmlsZSAocGFzc2VkIGluKQorbXkgJGtjb25maWcgPSAkQVJHVlswXTsKKworIyBwcmV2ZW50IHJlY3Vyc2lvbgorbXkgJXJlYWRfa2NvbmZpZ3M7CisKK3N1YiByZWFkX2tjb25maWcgeworICAgIG15ICgka2NvbmZpZykgPSBAXzsKKworICAgIG15ICRzdGF0ZSA9ICJOT05FIjsKKyAgICBteSAkY29uZmlnOworICAgIG15IEBrY29uZmlnczsKKworICAgIG9wZW4oS0lOLCAka2NvbmZpZykgfHwgZGllICJDYW4ndCBvcGVuICRrY29uZmlnIjsKKyAgICB3aGlsZSAoPEtJTj4pIHsKKwljaG9tcDsKKworCSMgY29sbGVjdCBhbnkgS2NvbmZpZyBzb3VyY2VzCisJaWYgKC9ec291cmNlXHMqIiguKikiLykgeworCSAgICAka2NvbmZpZ3NbJCNrY29uZmlncysxXSA9ICQxOworCX0KKworCSMgY29uZmlncyBmb3VuZAorCWlmICgvXlxzKmNvbmZpZ1xzKyhcUyspXHMqJC8pIHsKKwkgICAgJHN0YXRlID0gIk5FVyI7CisJICAgICRjb25maWcgPSAkMTsKKworCSMgY29sbGVjdCB0aGUgZGVwZW5kcyBmb3IgdGhlIGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBlcSAiTkVXIiAmJiAvXlxzKmRlcGVuZHNccytvblxzKyguKikkLykgeworCSAgICAkc3RhdGUgPSAiREVQIjsKKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkMTsKKwl9IGVsc2lmICgkc3RhdGUgZXEgIkRFUCIgJiYgL15ccypkZXBlbmRzXHMrb25ccysoLiopJC8pIHsKKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJDE7CisKKwkjIEdldCB0aGUgY29uZmlncyB0aGF0IHNlbGVjdCB0aGlzIGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYgL15ccypzZWxlY3RccysoXFMrKS8pIHsKKwkgICAgaWYgKGRlZmluZWQoJHNlbGVjdHN7JDF9KSkgeworCQkkc2VsZWN0c3skMX0gLj0gIiAiIC4gJGNvbmZpZzsKKwkgICAgfSBlbHNlIHsKKwkJJHNlbGVjdHN7JDF9ID0gJGNvbmZpZzsKKwkgICAgfQorCisJIyBjb25maWdzIHdpdGhvdXQgcHJvbXB0cyBtdXN0IGJlIHNlbGVjdGVkCisJfSBlbHNpZiAoJHN0YXRlIG5lICJOT05FIiAmJiAvXlxzKnRyaXN0YXRlXHNcUy8pIHsKKwkgICAgIyBub3RlIGlmIHRoZSBjb25maWcgaGFzIGEgcHJvbXB0CisJICAgICRwcm9tcHR7JGNvbmZpZ30gPSAxOworCisJIyBzdG9wIG9uICJoZWxwIgorCX0gZWxzaWYgKC9eXHMqaGVscFxzKiQvKSB7CisJICAgICRzdGF0ZSA9ICJOT05FIjsKKwl9CisgICAgfQorICAgIGNsb3NlKEtJTik7CisKKyAgICAjIHJlYWQgaW4gYW55IGNvbmZpZ3MgdGhhdCB3ZXJlIGZvdW5kLgorICAgIGZvcmVhY2ggJGtjb25maWcgKEBrY29uZmlncykgeworCWlmICghZGVmaW5lZCgkcmVhZF9rY29uZmlnc3ska2NvbmZpZ30pKSB7CisJICAgICRyZWFkX2tjb25maWdzeyRrY29uZmlnfSA9IDE7CisJICAgIHJlYWRfa2NvbmZpZygka2NvbmZpZyk7CisJfQorICAgIH0KK30KKworaWYgKCRrY29uZmlnKSB7CisgICAgcmVhZF9rY29uZmlnKCRrY29uZmlnKTsKK30KKworIyBSZWFkIGFsbCBNYWtlZmlsZXMgdG8gbWFwIHRoZSBjb25maWdzIHRvIHRoZSBvYmplY3RzCitmb3JlYWNoIG15ICRtYWtlZmlsZSAoQG1ha2VmaWxlcykgeworICAgIGNob21wICRtYWtlZmlsZTsKKworICAgIG9wZW4oTUlOLCRtYWtlZmlsZSkgfHwgZGllICJDYW4ndCBvcGVuICRtYWtlZmlsZSI7CisgICAgd2hpbGUgKDxNSU4+KSB7CisJbXkgJG9ianM7CisKKwkjIGlzIHRoaXMgYSBsaW5lIGFmdGVyIGEgbGluZSB3aXRoIGEgYmFja3NsYXNoPworCWlmICgkY29udCAmJiAvKFxTLiopJC8pIHsKKwkgICAgJG9ianMgPSAkMTsKKwl9CisJJGNvbnQgPSAwOworCisJIyBjb2xsZWN0IG9iamVjdHMgYWZ0ZXIgb2JqLSQoQ09ORklHX0ZPT19CQVIpCisJaWYgKC9vYmotXCRcKChDT05GSUdfW15cKV0qKVwpXHMqWys6XT89XHMqKC4qKS8pIHsKKwkgICAgJHZhciA9ICQxOworCSAgICAkb2JqcyA9ICQyOworCX0KKwlpZiAoZGVmaW5lZCgkb2JqcykpIHsKKwkgICAgIyB0ZXN0IGlmIHRoZSBsaW5lIGVuZHMgd2l0aCBhIGJhY2tzbGFzaAorCSAgICBpZiAoJG9ianMgPX4gbSwoLiopXFwkLCkgeworCQkkb2JqcyA9ICQxOworCQkkY29udCA9IDE7CisJICAgIH0KKworCSAgICBmb3JlYWNoIG15ICRvYmogKHNwbGl0IC9ccysvLCRvYmpzKSB7CisJCSRvYmogPX4gcy8tL18vZzsKKwkJaWYgKCRvYmogPX4gLyguKilcLm8kLykgeworCQkgICAgIyBPYmplY3RzIG1heSBiZXMgZW5hYmxlZCBieSBtb3JlIHRoYW4gb25lIGNvbmZpZy4KKwkJICAgICMgU3RvcmUgY29uZmlncyBpbiBhbiBhcnJheS4KKwkJICAgIG15IEBhcnI7CisKKwkJICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyQxfSkpIHsKKwkJCUBhcnIgPSBAeyRvYmplY3RzeyQxfX07CisJCSAgICB9CisKKwkJICAgICRhcnJbJCNhcnIrMV0gPSAkdmFyOworCisJCSAgICAjIFRoZSBvYmplY3RzIGhhdmUgYSBoYXNoIG1hcHBpbmcgdG8gYSByZWZlcmVuY2UKKwkJICAgICMgb2YgYW4gYXJyYXkgb2YgY29uZmlncy4KKwkJICAgICRvYmplY3RzeyQxfSA9IFxAYXJyOworCQl9CisJICAgIH0KKwl9CisgICAgfQorICAgIGNsb3NlKE1JTik7Cit9CisKK215ICVtb2R1bGVzOworCisjIHNlZSB3aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBvbiB0aGlzIHN5c3RlbQorb3BlbihMSU4sIi9zYmluL2xzbW9kfCIpIHx8IGRpZSAiQ2FudCBsc21vZCI7Cit3aGlsZSAoPExJTj4pIHsKKwluZXh0IGlmICgvXk1vZHVsZS8pOyAgIyBTa2lwIHRoZSBmaXJzdCBsaW5lLgorCWlmICgvXihcUyspLykgeworCQkkbW9kdWxlc3skMX0gPSAxOworCX0KK30KK2Nsb3NlIChMSU4pOworCisjIGFkZCB0byB0aGUgY29uZmlncyBoYXNoIGFsbCBjb25maWdzIHRoYXQgYXJlIG5lZWRlZCB0byBlbmFibGUKKyMgYSBsb2FkZWQgbW9kdWxlLgorbXkgJWNvbmZpZ3M7Citmb3JlYWNoIG15ICRtb2R1bGUgKGtleXMoJW1vZHVsZXMpKSB7CisgICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JG1vZHVsZX0pKSB7CisJQGFyciA9IEB7JG9iamVjdHN7JG1vZHVsZX19OworCWZvcmVhY2ggbXkgJGNvbmYgKEBhcnIpIHsKKwkgICAgJGNvbmZpZ3N7JGNvbmZ9ID0gJG1vZHVsZTsKKwl9CisgICAgfSBlbHNlIHsKKwkjIE1vc3QgbGlrZWx5LCBzb21lb25lIGhhcyBhIGN1c3RvbSAoYmluYXJ5PykgbW9kdWxlIGxvYWRlZC4KKwlwcmludCBTVERFUlIgIiRtb2R1bGUgY29uZmlnIG5vdCBmb3VuZCEhXG4iOworICAgIH0KK30KKworbXkgJHZhbGlkID0gIkEtWmEtel8wLTkiOworbXkgJHJlcGVhdCA9IDE7CisKKyMKKyMgTm90ZSwgd2UgZG8gbm90IGNhcmUgYWJvdXQgb3BlcmFuZHMgKGxpa2U6ICYmLCB8fCwgISkgd2Ugd2FudCB0byBhZGQgYW55CisjIGNvbmZpZyB0aGF0IGlzIGluIHRoZSBkZXBlbmQgbGlzdCBvZiBhbm90aGVyIGNvbmZpZy4gVGhpcyBzY3JpcHQgZG9lcworIyBub3QgZW5hYmxlIGNvbmZpZ3MgdGhhdCBhcmUgbm90IGFscmVhZHkgZW5hYmxlZC4gSWYgd2UgY29tZSBhY3Jvc3MgYQorIyBjb25maWcgQSB0aGF0IGRlcGVuZHMgb24gIUIsIHdlIGNhbiBzdGlsbCBhZGQgQiB0byB0aGUgbGlzdCBvZiBkZXBlbmRzCisjIHRvIGtlZXAgb24uIElmIEEgd2FzIG9uIGluIHRoZSBvcmlnaW5hbCBjb25maWcsIEIgd291bGQgbm90IGhhdmUgYmVlbgorIyBhbmQgQiB3b3VsZCBub3QgYmUgdHVybmVkIG9uIGJ5IHRoaXMgc2NyaXB0LgorIworc3ViIHBhcnNlX2NvbmZpZ19kZXBfc2VsZWN0Cit7CisgICAgbXkgKCRwKSA9IEBfOworCisgICAgd2hpbGUgKCRwID1+IC9bJHZhbGlkXS8pIHsKKworCWlmICgkcCA9fiAvXlteJHZhbGlkXSooWyR2YWxpZF0rKS8pIHsKKwkgICAgbXkgJGNvbmYgPSAiQ09ORklHXyIgLiAkMTsKKworCSAgICAkcCA9fiBzL15bXiR2YWxpZF0qWyR2YWxpZF0rLy87CisKKwkgICAgaWYgKCFkZWZpbmVkKCRjb25maWdzeyRjb25mfSkpIHsKKwkJIyBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGhhcyBpdHMKKwkJIyBkZXBlbmRlbmNpZXMgbWV0LgorCQkkcmVwZWF0ID0gMTsgIyBkbyBhZ2FpbgorCQkkY29uZmlnc3skY29uZn0gPSAxOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZGllICJ0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4iOworCX0KKyAgICB9Cit9CisKK3doaWxlICgkcmVwZWF0KSB7CisgICAgJHJlcGVhdCA9IDA7CisKKyAgICBmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJWNvbmZpZ3MpIHsKKwkkY29uZmlnID1+IHMvXkNPTkZJR18vLzsKKworCWlmIChkZWZpbmVkKCRkZXBlbmRzeyRjb25maWd9KSkgeworCSAgICAjIFRoaXMgY29uZmlnIGhhcyBkZXBlbmRlbmNpZXMuIE1ha2Ugc3VyZSB0aGV5IGFyZSBhbHNvIGluY2x1ZGVkCisJICAgIHBhcnNlX2NvbmZpZ19kZXBfc2VsZWN0ICRkZXBlbmRzeyRjb25maWd9OworCX0KKworCWlmIChkZWZpbmVkKCRwcm9tcHR7JGNvbmZpZ30pIHx8ICFkZWZpbmVkKCRzZWxlY3RzeyRjb25maWd9KSkgeworCSAgICBuZXh0OworCX0KKworCSMgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIG11c3QgYmUgc2VsZWN0ZWQuCisJcGFyc2VfY29uZmlnX2RlcF9zZWxlY3QgJHNlbGVjdHN7JGNvbmZpZ307CisgICAgfQorfQorCitteSAlc2V0Y29uZmlnczsKKworIyBGaW5hbGx5LCByZWFkIHRoZSAuY29uZmlnIGZpbGUgYW5kIHR1cm4gb2ZmIGFueSBtb2R1bGUgZW5hYmxlZCB0aGF0CisjIHdlIGNvdWxkIG5vdCBmaW5kIGEgcmVhc29uIHRvIGtlZXAgZW5hYmxlZC4KK3doaWxlKDxDSU4+KSB7CisKKyAgICBpZiAoL0NPTkZJR19JS0NPTkZJRy8pIHsKKwlpZiAoLyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQvKSB7CisJICAgICMgZW5hYmxlIElLQ09ORklHIGF0IGxlYXN0IGFzIGEgbW9kdWxlCisJICAgIHByaW50ICJDT05GSUdfSUtDT05GSUc9bVxuIjsKKwkgICAgIyBkb24ndCBhc2sgYWJvdXQgUFJPQworCSAgICBwcmludCAiIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0XG4iOworCX0gZWxzZSB7CisJICAgIHByaW50OworCX0KKwluZXh0OworICAgIH0KKworICAgIGlmICgvXihDT05GSUcuKik9KG18eSkvKSB7CisJaWYgKGRlZmluZWQoJGNvbmZpZ3N7JDF9KSkgeworCSAgICAkc2V0Y29uZmlnc3skMX0gPSAkMjsKKwl9IGVsc2lmICgkMiBlcSAibSIpIHsKKwkgICAgcHJpbnQgIiMgJDEgaXMgbm90IHNldFxuIjsKKwkgICAgbmV4dDsKKwl9CisgICAgfQorICAgIHByaW50OworfQorY2xvc2UoQ0lOKTsKKworIyBJbnRlZ3JpdHkgY2hlY2ssIG1ha2Ugc3VyZSBhbGwgbW9kdWxlcyB0aGF0IHdlIHdhbnQgZW5hYmxlZCBkbworIyBpbmRlZWQgaGF2ZSB0aGVpciBjb25maWdzIHNldC4KK2xvb3A6Citmb3JlYWNoIG15ICRtb2R1bGUgKGtleXMoJW1vZHVsZXMpKSB7CisgICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JG1vZHVsZX0pKSB7CisJbXkgQGFyciA9IEB7JG9iamVjdHN7JG1vZHVsZX19OworCWZvcmVhY2ggbXkgJGNvbmYgKEBhcnIpIHsKKwkgICAgaWYgKGRlZmluZWQoJHNldGNvbmZpZ3N7JGNvbmZ9KSkgeworCQluZXh0IGxvb3A7CisJICAgIH0KKwl9CisJcHJpbnQgU1RERVJSICJtb2R1bGUgJG1vZHVsZSBkaWQgbm90IGhhdmUgY29uZmlncyI7CisJZm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICBwcmludCBTVERFUlIgIiAiICwgJGNvbmY7CisJfQorCXByaW50IFNUREVSUiAiXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9zYW05ZzIwX3dtODczMS5jIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKaW5kZXggMTMwYjEyMS4uODg1YmEwMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKKysrIGIvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMKQEAgLTE5MywzOCArMTkzLDYgQEAKIAkuc2V0X2JpYXNfbGV2ZWwgPSBhdDkxc2FtOWcyMGVrX3NldF9iaWFzX2xldmVsLAogfTsKIAotLyoKLSAqIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGJvZGdlIHRvIGF2b2lkIGNyb3NzLXRyZWUgbWVyZ2UgaXNzdWVzLgotICogTmV3IGRyaXZlcnMgc2hvdWxkIHJlZ2lzdGVyIHRoZSB3bTg3MzEgSTJDIGRldmljZSBpbiB0aGUgbWFjaGluZQotICogc2V0dXAgY29kZSAodW5kZXIgYXJjaC9hcm0gZm9yIEFSTSBzeXN0ZW1zKS4KLSAqLwotc3RhdGljIGludCB3bTg3MzFfaTJjX3JlZ2lzdGVyKHZvaWQpCi17Ci0Jc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0KLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlpbmZvLmFkZHIgPSAweDFiOwotCXN0cmxjcHkoaW5mby50eXBlLCAid204NzMxIiwgSTJDX05BTUVfU0laRSk7Ci0KLQlhZGFwdGVyID0gaTJjX2dldF9hZGFwdGVyKDApOwotCWlmICghYWRhcHRlcikgewotCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGdldCBpMmMgYWRhcHRlciAwXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JY2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCWkyY19wdXRfYWRhcHRlcihhZGFwdGVyKTsKLQlpZiAoIWNsaWVudCkgewotCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFkZCBpMmMgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkodW5zaWduZWQgaW50KWluZm8uYWRkcik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGF0OTFzYW05ZzIwZWtfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19hdDkxc2FtOWcyMGVrLAogCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTg3MzEsCkBAIC0yNzksMTAgKzI0Nyw2IEBACiAJfQogCXNzY19wLT5zc2MgPSBzc2M7CiAKLQlyZXQgPSB3bTg3MzFfaTJjX3JlZ2lzdGVyKCk7Ci0JaWYgKHJldCAhPSAwKQotCQlnb3RvIGVycl9zc2M7Ci0KIAlhdDkxc2FtOWcyMGVrX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKIAlpZiAoIWF0OTFzYW05ZzIwZWtfc25kX2RldmljZSkgewogCQlwcmludGsoS0VSTl9FUlIgIkFTb0M6IFBsYXRmb3JtIGRldmljZSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LWFjOTcuaCBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCmluZGV4IGE5NmRjYWQuLmU5NmY5NDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCisrKyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtYWM5Ny5oCkBAIC0yMCwxMiArMjAsNiBAQAogI2RlZmluZSBBQ19DTURfQUREUih4KSAoeCA8PCAxNikKICNkZWZpbmUgQUNfQ01EX0RBVEEoeCkgKHggJiAweGZmZmYpCiAKLSNpZmRlZiBDT05GSUdfQ1BVX1MzQzI0NDAKLSNkZWZpbmUgSVJRX1MzQzI0NHhfQUM5NyBJUlFfUzNDMjQ0MF9BQzk3Ci0jZWxzZQotI2RlZmluZSBJUlFfUzNDMjQ0eF9BQzk3IElSUV9TM0MyNDQzX0FDOTcKLSNlbmRpZgotCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIHMzYzI0NDNfYWM5N19kYWlbXTsKIAogI2VuZGlmIC8qUzNDMjRYWEFDOTdfSF8qLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmggYi90b29scy9wZXJmL3BlcmYuaAppbmRleCBlNTE0OGUyLi4yYWJlYjIwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuaAorKysgYi90b29scy9wZXJmL3BlcmYuaApAQCAtNDEsNiArNDEsMTIgQEAKICNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7CiAjZW5kaWYKIAorI2lmZGVmIF9fc3BhcmNfXworI2luY2x1ZGUgIi4uLy4uL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgiCisjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5IikKKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisjZW5kaWYKKwogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWNlMzYKLS0tIC9kZXYvbnVsbAorKysgYi92aXJ0L2t2bS9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKKyMgS1ZNIGNvbW1vbiBjb25maWd1cmF0aW9uIGl0ZW1zIGFuZCBkZWZhdWx0cworCitjb25maWcgSEFWRV9LVk0KKyAgICAgICBib29sCisKK2NvbmZpZyBIQVZFX0tWTV9JUlFDSElQCisgICAgICAgYm9vbAorCitjb25maWcgSEFWRV9LVk1fRVZFTlRGRAorICAgICAgIGJvb2wKKyAgICAgICBzZWxlY3QgRVZFTlRGRAorCitjb25maWcgS1ZNX0FQSUNfQVJDSElURUNUVVJFCisgICAgICAgYm9vbApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmMKaW5kZXggNWFlNjIwZC4uMDRkNjljZCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYworKysgYi92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5jCkBAIC0xNCwzMiArMTQsMjggQEAKIAogI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlvLmgiCiAKLXN0YXRpYyBpbnQgY29hbGVzY2VkX21taW9faW5fcmFuZ2Uoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCi0JCQkJICAgZ3BhX3QgYWRkciwgaW50IGxlbiwgaW50IGlzX3dyaXRlKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqdG9fbW1pbyhzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2ICpkZXYgPQotCQkJCShzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiopdGhpcy0+cHJpdmF0ZTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYsIGRldik7Cit9CisKK3N0YXRpYyBpbnQgY29hbGVzY2VkX21taW9faW5fcmFuZ2Uoc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYgKmRldiwKKwkJCQkgICBncGFfdCBhZGRyLCBpbnQgbGVuKQorewogCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSAqem9uZTsKLQlpbnQgbmV4dDsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKnJpbmc7CisJdW5zaWduZWQgYXZhaWw7CiAJaW50IGk7CiAKLQlpZiAoIWlzX3dyaXRlKQotCQlyZXR1cm4gMDsKLQotCS8qIGt2bS0+bG9jayBpcyB0YWtlbiBieSB0aGUgY2FsbGVyIGFuZCBtdXN0IGJlIG5vdCByZWxlYXNlZCBiZWZvcmUKLSAgICAgICAgICogZGV2LnJlYWQvd3JpdGUKLSAgICAgICAgICovCi0KIAkvKiBBcmUgd2UgYWJsZSB0byBiYXRjaCBpdCA/ICovCiAKIAkvKiBsYXN0IGlzIHRoZSBmaXJzdCBmcmVlIGVudHJ5CiAJICogY2hlY2sgaWYgd2UgZG9uJ3QgbWVldCB0aGUgZmlyc3QgdXNlZCBlbnRyeQogCSAqIHRoZXJlIGlzIGFsd2F5cyBvbmUgdW51c2VkIGVudHJ5IGluIHRoZSBidWZmZXIKIAkgKi8KLQotCW5leHQgPSAoZGV2LT5rdm0tPmNvYWxlc2NlZF9tbWlvX3JpbmctPmxhc3QgKyAxKSAlCi0JCQkJCQkJS1ZNX0NPQUxFU0NFRF9NTUlPX01BWDsKLQlpZiAobmV4dCA9PSBkZXYtPmt2bS0+Y29hbGVzY2VkX21taW9fcmluZy0+Zmlyc3QpIHsKKwlyaW5nID0gZGV2LT5rdm0tPmNvYWxlc2NlZF9tbWlvX3Jpbmc7CisJYXZhaWwgPSAocmluZy0+Zmlyc3QgLSByaW5nLT5sYXN0IC0gMSkgJSBLVk1fQ09BTEVTQ0VEX01NSU9fTUFYOworCWlmIChhdmFpbCA8IEtWTV9NQVhfVkNQVVMpIHsKIAkJLyogZnVsbCAqLwogCQlyZXR1cm4gMDsKIAl9CkBAIC02MCwxNCArNTYsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY29hbGVzY2VkX21taW9fd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCi0JCQkJIGdwYV90IGFkZHIsIGludCBsZW4sIGNvbnN0IHZvaWQgKnZhbCkKK3N0YXRpYyBpbnQgY29hbGVzY2VkX21taW9fd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCQkJZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKQogewotCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2ICpkZXYgPQotCQkJCShzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiopdGhpcy0+cHJpdmF0ZTsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2ID0gdG9fbW1pbyh0aGlzKTsKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3JpbmcgKnJpbmcgPSBkZXYtPmt2bS0+Y29hbGVzY2VkX21taW9fcmluZzsKKwlpZiAoIWNvYWxlc2NlZF9tbWlvX2luX3JhbmdlKGRldiwgYWRkciwgbGVuKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JLyoga3ZtLT5sb2NrIG11c3QgYmUgdGFrZW4gYnkgY2FsbGVyIGJlZm9yZSBjYWxsIHRvIGluX3JhbmdlKCkqLworCXNwaW5fbG9jaygmZGV2LT5sb2NrKTsKIAogCS8qIGNvcHkgZGF0YSBpbiBmaXJzdCBmcmVlIGVudHJ5IG9mIHRoZSByaW5nICovCiAKQEAgLTc2LDI5ICs3Myw0MCBAQAogCW1lbWNweShyaW5nLT5jb2FsZXNjZWRfbW1pb1tyaW5nLT5sYXN0XS5kYXRhLCB2YWwsIGxlbik7CiAJc21wX3dtYigpOwogCXJpbmctPmxhc3QgPSAocmluZy0+bGFzdCArIDEpICUgS1ZNX0NPQUxFU0NFRF9NTUlPX01BWDsKKwlzcGluX3VubG9jaygmZGV2LT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY29hbGVzY2VkX21taW9fZGVzdHJ1Y3RvcihzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcykKIHsKLQlrZnJlZSh0aGlzKTsKKwlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2ID0gdG9fbW1pbyh0aGlzKTsKKworCWtmcmVlKGRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgY29hbGVzY2VkX21taW9fb3BzID0geworCS53cml0ZSAgICAgID0gY29hbGVzY2VkX21taW9fd3JpdGUsCisJLmRlc3RydWN0b3IgPSBjb2FsZXNjZWRfbW1pb19kZXN0cnVjdG9yLAorfTsKKwogaW50IGt2bV9jb2FsZXNjZWRfbW1pb19pbml0KHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2OworCWludCByZXQ7CiAKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKLQlkZXYtPmRldi53cml0ZSAgPSBjb2FsZXNjZWRfbW1pb193cml0ZTsKLQlkZXYtPmRldi5pbl9yYW5nZSAgPSBjb2FsZXNjZWRfbW1pb19pbl9yYW5nZTsKLQlkZXYtPmRldi5kZXN0cnVjdG9yICA9IGNvYWxlc2NlZF9tbWlvX2Rlc3RydWN0b3I7Ci0JZGV2LT5kZXYucHJpdmF0ZSAgPSBkZXY7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJa3ZtX2lvZGV2aWNlX2luaXQoJmRldi0+ZGV2LCAmY29hbGVzY2VkX21taW9fb3BzKTsKIAlkZXYtPmt2bSA9IGt2bTsKIAlrdm0tPmNvYWxlc2NlZF9tbWlvX2RldiA9IGRldjsKLQlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5tbWlvX2J1cywgJmRldi0+ZGV2KTsKIAotCXJldHVybiAwOworCXJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgJmt2bS0+bW1pb19idXMsICZkZXYtPmRldik7CisJaWYgKHJldCA8IDApCisJCWtmcmVlKGRldik7CisKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQga3ZtX3ZtX2lvY3RsX3JlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTEwOSwxNiArMTE3LDE2IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAlpZiAoZGV2LT5uYl96b25lcyA+PSBLVk1fQ09BTEVTQ0VEX01NSU9fWk9ORV9NQVgpIHsKLQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAkJcmV0dXJuIC1FTk9CVUZTOwogCX0KIAogCWRldi0+em9uZVtkZXYtPm5iX3pvbmVzXSA9ICp6b25lOwogCWRldi0+bmJfem9uZXMrKzsKIAotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMyLDcgKzE0MCw3IEBACiAJaWYgKGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKIAogCWkgPSBkZXYtPm5iX3pvbmVzOwogCXdoaWxlKGkpIHsKQEAgLTE1MCw3ICsxNTgsNyBAQAogCQlpLS07CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5oIGIvdmlydC9rdm0vY29hbGVzY2VkX21taW8uaAppbmRleCA1YWMwZWM2Li40YjQ5ZjI3IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5oCisrKyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmgKQEAgLTEyLDYgKzEyLDcgQEAKIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fZGV2IHsKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSBkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOworCXNwaW5sb2NrX3QgbG9jazsKIAlpbnQgbmJfem9uZXM7CiAJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lIHpvbmVbS1ZNX0NPQUxFU0NFRF9NTUlPX1pPTkVfTUFYXTsKIH07CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9ldmVudGZkLmMgYi92aXJ0L2t2bS9ldmVudGZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0ZWJkOAotLS0gL2Rldi9udWxsCisrKyBiL3ZpcnQva3ZtL2V2ZW50ZmQuYwpAQCAtMCwwICsxLDU3OCBAQAorLyoKKyAqIGt2bSBldmVudGZkIHN1cHBvcnQgLSB1c2UgZXZlbnRmZCBvYmplY3RzIHRvIHNpZ25hbCB2YXJpb3VzIEtWTSBldmVudHMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBOb3ZlbGwuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEF1dGhvcjoKKyAqCUdyZWdvcnkgSGFza2lucyA8Z2hhc2tpbnNAbm92ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgImlvZGV2LmgiCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaXJxZmQ6IEFsbG93cyBhbiBmZCB0byBiZSB1c2VkIHRvIGluamVjdCBhbiBpbnRlcnJ1cHQgdG8gdGhlIGd1ZXN0CisgKgorICogQ3JlZGl0IGdvZXMgdG8gQXZpIEtpdml0eSBmb3IgdGhlIG9yaWdpbmFsIGlkZWEuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBfaXJxZmQgeworCXN0cnVjdCBrdm0gICAgICAgICAgICAgICAqa3ZtOworCXN0cnVjdCBldmVudGZkX2N0eCAgICAgICAqZXZlbnRmZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgIGdzaTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgIGxpc3Q7CisJcG9sbF90YWJsZSAgICAgICAgICAgICAgICBwdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgKndxaDsKKwl3YWl0X3F1ZXVlX3QgICAgICAgICAgICAgIHdhaXQ7CisJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICBpbmplY3Q7CisJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICBzaHV0ZG93bjsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaXJxZmRfY2xlYW51cF93cTsKKworc3RhdGljIHZvaWQKK2lycWZkX2luamVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IF9pcnFmZCAqaXJxZmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IF9pcnFmZCwgaW5qZWN0KTsKKwlzdHJ1Y3Qga3ZtICprdm0gPSBpcnFmZC0+a3ZtOworCisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CisJa3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsIGlycWZkLT5nc2ksIDEpOworCWt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELCBpcnFmZC0+Z3NpLCAwKTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOworfQorCisvKgorICogUmFjZS1mcmVlIGRlY291cGxlIGxvZ2ljIChvcmRlcmluZyBpcyBjcml0aWNhbCkKKyAqLworc3RhdGljIHZvaWQKK2lycWZkX3NodXRkb3duKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgX2lycWZkICppcnFmZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgX2lycWZkLCBzaHV0ZG93bik7CisKKwkvKgorCSAqIFN5bmNocm9uaXplIHdpdGggdGhlIHdhaXQtcXVldWUgYW5kIHVuaG9vayBvdXJzZWx2ZXMgdG8gcHJldmVudAorCSAqIGZ1cnRoZXIgZXZlbnRzLgorCSAqLworCXJlbW92ZV93YWl0X3F1ZXVlKGlycWZkLT53cWgsICZpcnFmZC0+d2FpdCk7CisKKwkvKgorCSAqIFdlIGtub3cgbm8gbmV3IGV2ZW50cyB3aWxsIGJlIHNjaGVkdWxlZCBhdCB0aGlzIHBvaW50LCBzbyBibG9jaworCSAqIHVudGlsIGFsbCBwcmV2aW91c2x5IG91dHN0YW5kaW5nIGV2ZW50cyBoYXZlIGNvbXBsZXRlZAorCSAqLworCWZsdXNoX3dvcmsoJmlycWZkLT5pbmplY3QpOworCisJLyoKKwkgKiBJdCBpcyBub3cgc2FmZSB0byByZWxlYXNlIHRoZSBvYmplY3QncyByZXNvdXJjZXMKKwkgKi8KKwlldmVudGZkX2N0eF9wdXQoaXJxZmQtPmV2ZW50ZmQpOworCWtmcmVlKGlycWZkKTsKK30KKworCisvKiBhc3N1bWVzIGt2bS0+aXJxZmRzLmxvY2sgaXMgaGVsZCAqLworc3RhdGljIGJvb2wKK2lycWZkX2lzX2FjdGl2ZShzdHJ1Y3QgX2lycWZkICppcnFmZCkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmaXJxZmQtPmxpc3QpID8gZmFsc2UgOiB0cnVlOworfQorCisvKgorICogTWFyayB0aGUgaXJxZmQgYXMgaW5hY3RpdmUgYW5kIHNjaGVkdWxlIGl0IGZvciByZW1vdmFsCisgKgorICogYXNzdW1lcyBrdm0tPmlycWZkcy5sb2NrIGlzIGhlbGQKKyAqLworc3RhdGljIHZvaWQKK2lycWZkX2RlYWN0aXZhdGUoc3RydWN0IF9pcnFmZCAqaXJxZmQpCit7CisJQlVHX09OKCFpcnFmZF9pc19hY3RpdmUoaXJxZmQpKTsKKworCWxpc3RfZGVsX2luaXQoJmlycWZkLT5saXN0KTsKKworCXF1ZXVlX3dvcmsoaXJxZmRfY2xlYW51cF93cSwgJmlycWZkLT5zaHV0ZG93bik7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCB3cWgtPmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZAorICovCitzdGF0aWMgaW50CitpcnFmZF93YWtldXAod2FpdF9xdWV1ZV90ICp3YWl0LCB1bnNpZ25lZCBtb2RlLCBpbnQgc3luYywgdm9pZCAqa2V5KQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBfaXJxZmQsIHdhaXQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAodW5zaWduZWQgbG9uZylrZXk7CisKKwlpZiAoZmxhZ3MgJiBQT0xMSU4pCisJCS8qIEFuIGV2ZW50IGhhcyBiZWVuIHNpZ25hbGVkLCBpbmplY3QgYW4gaW50ZXJydXB0ICovCisJCXNjaGVkdWxlX3dvcmsoJmlycWZkLT5pbmplY3QpOworCisJaWYgKGZsYWdzICYgUE9MTEhVUCkgeworCQkvKiBUaGUgZXZlbnRmZCBpcyBjbG9zaW5nLCBkZXRhY2ggZnJvbSBLVk0gKi8KKwkJc3RydWN0IGt2bSAqa3ZtID0gaXJxZmQtPmt2bTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgma3ZtLT5pcnFmZHMubG9jaywgZmxhZ3MpOworCisJCS8qCisJCSAqIFdlIG11c3QgY2hlY2sgaWYgc29tZW9uZSBkZWFjdGl2YXRlZCB0aGUgaXJxZmQgYmVmb3JlCisJCSAqIHdlIGNvdWxkIGFjcXVpcmUgdGhlIGlycWZkcy5sb2NrIHNpbmNlIHRoZSBpdGVtIGlzCisJCSAqIGRlYWN0aXZhdGVkIGZyb20gdGhlIEtWTSBzaWRlIGJlZm9yZSBpdCBpcyB1bmhvb2tlZCBmcm9tCisJCSAqIHRoZSB3YWl0LXF1ZXVlLiAgSWYgaXQgaXMgYWxyZWFkeSBkZWFjdGl2YXRlZCwgd2UgY2FuCisJCSAqIHNpbXBseSByZXR1cm4ga25vd2luZyB0aGUgb3RoZXIgc2lkZSB3aWxsIGNsZWFudXAgZm9yIHVzLgorCQkgKiBXZSBjYW5ub3QgcmFjZSBhZ2FpbnN0IHRoZSBpcnFmZCBnb2luZyBhd2F5IHNpbmNlIHRoZQorCQkgKiBvdGhlciBzaWRlIGlzIHJlcXVpcmVkIHRvIGFjcXVpcmUgd3FoLT5sb2NrLCB3aGljaCB3ZSBob2xkCisJCSAqLworCQlpZiAoaXJxZmRfaXNfYWN0aXZlKGlycWZkKSkKKwkJCWlycWZkX2RlYWN0aXZhdGUoaXJxZmQpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmt2bS0+aXJxZmRzLmxvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2lycWZkX3B0YWJsZV9xdWV1ZV9wcm9jKHN0cnVjdCBmaWxlICpmaWxlLCB3YWl0X3F1ZXVlX2hlYWRfdCAqd3FoLAorCQkJcG9sbF90YWJsZSAqcHQpCit7CisJc3RydWN0IF9pcnFmZCAqaXJxZmQgPSBjb250YWluZXJfb2YocHQsIHN0cnVjdCBfaXJxZmQsIHB0KTsKKworCWlycWZkLT53cWggPSB3cWg7CisJYWRkX3dhaXRfcXVldWUod3FoLCAmaXJxZmQtPndhaXQpOworfQorCitzdGF0aWMgaW50Citrdm1faXJxZmRfYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgaW50IGZkLCBpbnQgZ3NpKQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkOworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmV2ZW50ZmQgPSBOVUxMOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGV2ZW50czsKKworCWlycWZkID0ga3phbGxvYyhzaXplb2YoKmlycWZkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpcnFmZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpcnFmZC0+a3ZtID0ga3ZtOworCWlycWZkLT5nc2kgPSBnc2k7CisJSU5JVF9MSVNUX0hFQUQoJmlycWZkLT5saXN0KTsKKwlJTklUX1dPUksoJmlycWZkLT5pbmplY3QsIGlycWZkX2luamVjdCk7CisJSU5JVF9XT1JLKCZpcnFmZC0+c2h1dGRvd24sIGlycWZkX3NodXRkb3duKTsKKworCWZpbGUgPSBldmVudGZkX2ZnZXQoZmQpOworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihmaWxlKTsKKwkJZ290byBmYWlsOworCX0KKworCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9maWxlZ2V0KGZpbGUpOworCWlmIChJU19FUlIoZXZlbnRmZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihldmVudGZkKTsKKwkJZ290byBmYWlsOworCX0KKworCWlycWZkLT5ldmVudGZkID0gZXZlbnRmZDsKKworCS8qCisJICogSW5zdGFsbCBvdXIgb3duIGN1c3RvbSB3YWtlLXVwIGhhbmRsaW5nIHNvIHdlIGFyZSBub3RpZmllZCB2aWEKKwkgKiBhIGNhbGxiYWNrIHdoZW5ldmVyIHNvbWVvbmUgc2lnbmFscyB0aGUgdW5kZXJseWluZyBldmVudGZkCisJICovCisJaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgmaXJxZmQtPndhaXQsIGlycWZkX3dha2V1cCk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJmlycWZkLT5wdCwgaXJxZmRfcHRhYmxlX3F1ZXVlX3Byb2MpOworCisJZXZlbnRzID0gZmlsZS0+Zl9vcC0+cG9sbChmaWxlLCAmaXJxZmQtPnB0KTsKKworCXNwaW5fbG9ja19pcnEoJmt2bS0+aXJxZmRzLmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmlycWZkLT5saXN0LCAma3ZtLT5pcnFmZHMuaXRlbXMpOworCXNwaW5fdW5sb2NrX2lycSgma3ZtLT5pcnFmZHMubG9jayk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBldmVudCBhbHJlYWR5IHBlbmRpbmcgb24gdGhlIGV2ZW50ZmQKKwkgKiBiZWZvcmUgd2UgcmVnaXN0ZXJlZCwgYW5kIHRyaWdnZXIgaXQgYXMgaWYgd2UgZGlkbid0IG1pc3MgaXQuCisJICovCisJaWYgKGV2ZW50cyAmIFBPTExJTikKKwkJc2NoZWR1bGVfd29yaygmaXJxZmQtPmluamVjdCk7CisKKwkvKgorCSAqIGRvIG5vdCBkcm9wIHRoZSBmaWxlIHVudGlsIHRoZSBpcnFmZCBpcyBmdWxseSBpbml0aWFsaXplZCwgb3RoZXJ3aXNlCisJICogd2UgbWlnaHQgcmFjZSBhZ2FpbnN0IHRoZSBQT0xMSFVQCisJICovCisJZnB1dChmaWxlKTsKKworCXJldHVybiAwOworCitmYWlsOgorCWlmIChldmVudGZkICYmICFJU19FUlIoZXZlbnRmZCkpCisJCWV2ZW50ZmRfY3R4X3B1dChldmVudGZkKTsKKworCWlmICghSVNfRVJSKGZpbGUpKQorCQlmcHV0KGZpbGUpOworCisJa2ZyZWUoaXJxZmQpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2t2bV9ldmVudGZkX2luaXQoc3RydWN0IGt2bSAqa3ZtKQoreworCXNwaW5fbG9ja19pbml0KCZrdm0tPmlycWZkcy5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgma3ZtLT5pcnFmZHMuaXRlbXMpOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlvZXZlbnRmZHMpOworfQorCisvKgorICogc2h1dGRvd24gYW55IGlycWZkJ3MgdGhhdCBtYXRjaCBmZCtnc2kKKyAqLworc3RhdGljIGludAora3ZtX2lycWZkX2RlYXNzaWduKHN0cnVjdCBrdm0gKmt2bSwgaW50IGZkLCBpbnQgZ3NpKQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkLCAqdG1wOworCXN0cnVjdCBldmVudGZkX2N0eCAqZXZlbnRmZDsKKworCWV2ZW50ZmQgPSBldmVudGZkX2N0eF9mZGdldChmZCk7CisJaWYgKElTX0VSUihldmVudGZkKSkKKwkJcmV0dXJuIFBUUl9FUlIoZXZlbnRmZCk7CisKKwlzcGluX2xvY2tfaXJxKCZrdm0tPmlycWZkcy5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpcnFmZCwgdG1wLCAma3ZtLT5pcnFmZHMuaXRlbXMsIGxpc3QpIHsKKwkJaWYgKGlycWZkLT5ldmVudGZkID09IGV2ZW50ZmQgJiYgaXJxZmQtPmdzaSA9PSBnc2kpCisJCQlpcnFmZF9kZWFjdGl2YXRlKGlycWZkKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJmt2bS0+aXJxZmRzLmxvY2spOworCWV2ZW50ZmRfY3R4X3B1dChldmVudGZkKTsKKworCS8qCisJICogQmxvY2sgdW50aWwgd2Uga25vdyBhbGwgb3V0c3RhbmRpbmcgc2h1dGRvd24gam9icyBoYXZlIGNvbXBsZXRlZAorCSAqIHNvIHRoYXQgd2UgZ3VhcmFudGVlIHRoZXJlIHdpbGwgbm90IGJlIGFueSBtb3JlIGludGVycnVwdHMgb24gdGhpcworCSAqIGdzaSBvbmNlIHRoaXMgZGVhc3NpZ24gZnVuY3Rpb24gcmV0dXJucy4KKwkgKi8KKwlmbHVzaF93b3JrcXVldWUoaXJxZmRfY2xlYW51cF93cSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50Citrdm1faXJxZmQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgZmQsIGludCBnc2ksIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBLVk1fSVJRRkRfRkxBR19ERUFTU0lHTikKKwkJcmV0dXJuIGt2bV9pcnFmZF9kZWFzc2lnbihrdm0sIGZkLCBnc2kpOworCisJcmV0dXJuIGt2bV9pcnFmZF9hc3NpZ24oa3ZtLCBmZCwgZ3NpKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIHRoZSBrdm0gVk0gZmQgaXMgYmVpbmcgcmVsZWFzZWQuIFNodXRkb3duIGFsbAorICogaXJxZmRzIHRoYXQgc3RpbGwgcmVtYWluIG9wZW4KKyAqLwordm9pZAora3ZtX2lycWZkX3JlbGVhc2Uoc3RydWN0IGt2bSAqa3ZtKQoreworCXN0cnVjdCBfaXJxZmQgKmlycWZkLCAqdG1wOworCisJc3Bpbl9sb2NrX2lycSgma3ZtLT5pcnFmZHMubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXJxZmQsIHRtcCwgJmt2bS0+aXJxZmRzLml0ZW1zLCBsaXN0KQorCQlpcnFmZF9kZWFjdGl2YXRlKGlycWZkKTsKKworCXNwaW5fdW5sb2NrX2lycSgma3ZtLT5pcnFmZHMubG9jayk7CisKKwkvKgorCSAqIEJsb2NrIHVudGlsIHdlIGtub3cgYWxsIG91dHN0YW5kaW5nIHNodXRkb3duIGpvYnMgaGF2ZSBjb21wbGV0ZWQKKwkgKiBzaW5jZSB3ZSBkbyBub3QgdGFrZSBhIGt2bSogcmVmZXJlbmNlLgorCSAqLworCWZsdXNoX3dvcmtxdWV1ZShpcnFmZF9jbGVhbnVwX3dxKTsKKworfQorCisvKgorICogY3JlYXRlIGEgaG9zdC13aWRlIHdvcmtxdWV1ZSBmb3IgaXNzdWluZyBkZWZlcnJlZCBzaHV0ZG93biByZXF1ZXN0cworICogYWdncmVnYXRlZCBmcm9tIGFsbCB2bSogaW5zdGFuY2VzLiBXZSBuZWVkIG91ciBvd24gaXNvbGF0ZWQgc2luZ2xlLXRocmVhZAorICogcXVldWUgdG8gcHJldmVudCBkZWFkbG9jayBhZ2FpbnN0IGZsdXNoaW5nIHRoZSBub3JtYWwgd29yay1xdWV1ZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgaXJxZmRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpcnFmZF9jbGVhbnVwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImt2bS1pcnFmZC1jbGVhbnVwIik7CisJaWYgKCFpcnFmZF9jbGVhbnVwX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXJxZmRfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShpcnFmZF9jbGVhbnVwX3dxKTsKK30KKworbW9kdWxlX2luaXQoaXJxZmRfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoaXJxZmRfbW9kdWxlX2V4aXQpOworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGlvZXZlbnRmZDogdHJhbnNsYXRlIGEgUElPL01NSU8gbWVtb3J5IHdyaXRlIHRvIGFuIGV2ZW50ZmQgc2lnbmFsLgorICoKKyAqIHVzZXJzcGFjZSBjYW4gcmVnaXN0ZXIgYSBQSU8vTU1JTyBhZGRyZXNzIHdpdGggYW4gZXZlbnRmZCBmb3IgcmVjZWl2aW5nCisgKiBub3RpZmljYXRpb24gd2hlbiB0aGUgbWVtb3J5IGhhcyBiZWVuIHRvdWNoZWQuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBfaW9ldmVudGZkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICBsaXN0OworCXU2NCAgICAgICAgICAgICAgICAgIGFkZHI7CisJaW50ICAgICAgICAgICAgICAgICAgbGVuZ3RoOworCXN0cnVjdCBldmVudGZkX2N0eCAgKmV2ZW50ZmQ7CisJdTY0ICAgICAgICAgICAgICAgICAgZGF0YW1hdGNoOworCXN0cnVjdCBrdm1faW9fZGV2aWNlIGRldjsKKwlib29sICAgICAgICAgICAgICAgICB3aWxkY2FyZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9pb2V2ZW50ZmQgKgordG9faW9ldmVudGZkKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBfaW9ldmVudGZkLCBkZXYpOworfQorCitzdGF0aWMgdm9pZAoraW9ldmVudGZkX3JlbGVhc2Uoc3RydWN0IF9pb2V2ZW50ZmQgKnApCit7CisJZXZlbnRmZF9jdHhfcHV0KHAtPmV2ZW50ZmQpOworCWxpc3RfZGVsKCZwLT5saXN0KTsKKwlrZnJlZShwKTsKK30KKworc3RhdGljIGJvb2wKK2lvZXZlbnRmZF9pbl9yYW5nZShzdHJ1Y3QgX2lvZXZlbnRmZCAqcCwgZ3BhX3QgYWRkciwgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKQoreworCXU2NCBfdmFsOworCisJaWYgKCEoYWRkciA9PSBwLT5hZGRyICYmIGxlbiA9PSBwLT5sZW5ndGgpKQorCQkvKiBhZGRyZXNzLXJhbmdlIG11c3QgYmUgcHJlY2lzZSBmb3IgYSBoaXQgKi8KKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHAtPndpbGRjYXJkKQorCQkvKiBhbGwgZWxzZSBlcXVhbCwgd2lsZGNhcmQgaXMgYWx3YXlzIGEgaGl0ICovCisJCXJldHVybiB0cnVlOworCisJLyogb3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGFjdHVhbGx5IGNvbXBhcmUgdGhlIGRhdGEgKi8KKworCUJVR19PTighSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZyl2YWwsIGxlbikpOworCisJc3dpdGNoIChsZW4pIHsKKwljYXNlIDE6CisJCV92YWwgPSAqKHU4ICopdmFsOworCQlicmVhazsKKwljYXNlIDI6CisJCV92YWwgPSAqKHUxNiAqKXZhbDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlfdmFsID0gKih1MzIgKil2YWw7CisJCWJyZWFrOworCWNhc2UgODoKKwkJX3ZhbCA9ICoodTY0ICopdmFsOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIF92YWwgPT0gcC0+ZGF0YW1hdGNoID8gdHJ1ZSA6IGZhbHNlOworfQorCisvKiBNTUlPL1BJTyB3cml0ZXMgdHJpZ2dlciBhbiBldmVudCBpZiB0aGUgYWRkci92YWwgbWF0Y2ggKi8KK3N0YXRpYyBpbnQKK2lvZXZlbnRmZF93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwgaW50IGxlbiwKKwkJY29uc3Qgdm9pZCAqdmFsKQoreworCXN0cnVjdCBfaW9ldmVudGZkICpwID0gdG9faW9ldmVudGZkKHRoaXMpOworCisJaWYgKCFpb2V2ZW50ZmRfaW5fcmFuZ2UocCwgYWRkciwgbGVuLCB2YWwpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlldmVudGZkX3NpZ25hbChwLT5ldmVudGZkLCAxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFzIEtWTSBpcyBjb21wbGV0ZWx5IHNodXR0aW5nIGRvd24uICBXZSBkbyBub3QKKyAqIG5lZWQgdG8gd29ycnkgYWJvdXQgbG9ja2luZyBqdXN0IG51a2UgYW55dGhpbmcgd2UgaGF2ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlCisgKi8KK3N0YXRpYyB2b2lkCitpb2V2ZW50ZmRfZGVzdHJ1Y3RvcihzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcykKK3sKKwlzdHJ1Y3QgX2lvZXZlbnRmZCAqcCA9IHRvX2lvZXZlbnRmZCh0aGlzKTsKKworCWlvZXZlbnRmZF9yZWxlYXNlKHApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGt2bV9pb19kZXZpY2Vfb3BzIGlvZXZlbnRmZF9vcHMgPSB7CisJLndyaXRlICAgICAgPSBpb2V2ZW50ZmRfd3JpdGUsCisJLmRlc3RydWN0b3IgPSBpb2V2ZW50ZmRfZGVzdHJ1Y3RvciwKK307CisKKy8qIGFzc3VtZXMga3ZtLT5zbG90c19sb2NrIGhlbGQgKi8KK3N0YXRpYyBib29sCitpb2V2ZW50ZmRfY2hlY2tfY29sbGlzaW9uKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IF9pb2V2ZW50ZmQgKnApCit7CisJc3RydWN0IF9pb2V2ZW50ZmQgKl9wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShfcCwgJmt2bS0+aW9ldmVudGZkcywgbGlzdCkKKwkJaWYgKF9wLT5hZGRyID09IHAtPmFkZHIgJiYgX3AtPmxlbmd0aCA9PSBwLT5sZW5ndGggJiYKKwkJICAgIChfcC0+d2lsZGNhcmQgfHwgcC0+d2lsZGNhcmQgfHwKKwkJICAgICBfcC0+ZGF0YW1hdGNoID09IHAtPmRhdGFtYXRjaCkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludAora3ZtX2Fzc2lnbl9pb2V2ZW50ZmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCAqYXJncykKK3sKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgIHBpbyA9IGFyZ3MtPmZsYWdzICYgS1ZNX0lPRVZFTlRGRF9GTEFHX1BJTzsKKwlzdHJ1Y3Qga3ZtX2lvX2J1cyAgICAgICAgKmJ1cyA9IHBpbyA/ICZrdm0tPnBpb19idXMgOiAma3ZtLT5tbWlvX2J1czsKKwlzdHJ1Y3QgX2lvZXZlbnRmZCAgICAgICAgKnA7CisJc3RydWN0IGV2ZW50ZmRfY3R4ICAgICAgICpldmVudGZkOworCWludCAgICAgICAgICAgICAgICAgICAgICAgcmV0OworCisJLyogbXVzdCBiZSBuYXR1cmFsLXdvcmQgc2l6ZWQgKi8KKwlzd2l0Y2ggKGFyZ3MtPmxlbikgeworCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgZm9yIHJhbmdlIG92ZXJmbG93ICovCisJaWYgKGFyZ3MtPmFkZHIgKyBhcmdzLT5sZW4gPCBhcmdzLT5hZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNoZWNrIGZvciBleHRyYSBmbGFncyB0aGF0IHdlIGRvbid0IHVuZGVyc3RhbmQgKi8KKwlpZiAoYXJncy0+ZmxhZ3MgJiB+S1ZNX0lPRVZFTlRGRF9WQUxJRF9GTEFHX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCisJZXZlbnRmZCA9IGV2ZW50ZmRfY3R4X2ZkZ2V0KGFyZ3MtPmZkKTsKKwlpZiAoSVNfRVJSKGV2ZW50ZmQpKQorCQlyZXR1cm4gUFRSX0VSUihldmVudGZkKTsKKworCXAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCWlmICghcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnAtPmxpc3QpOworCXAtPmFkZHIgICAgPSBhcmdzLT5hZGRyOworCXAtPmxlbmd0aCAgPSBhcmdzLT5sZW47CisJcC0+ZXZlbnRmZCA9IGV2ZW50ZmQ7CisKKwkvKiBUaGUgZGF0YW1hdGNoIGZlYXR1cmUgaXMgb3B0aW9uYWwsIG90aGVyd2lzZSB0aGlzIGlzIGEgd2lsZGNhcmQgKi8KKwlpZiAoYXJncy0+ZmxhZ3MgJiBLVk1fSU9FVkVOVEZEX0ZMQUdfREFUQU1BVENIKQorCQlwLT5kYXRhbWF0Y2ggPSBhcmdzLT5kYXRhbWF0Y2g7CisJZWxzZQorCQlwLT53aWxkY2FyZCA9IHRydWU7CisKKwlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCisJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXNudCBhIG1hdGNoIGFscmVhZHkgKi8KKwlpZiAoaW9ldmVudGZkX2NoZWNrX2NvbGxpc2lvbihrdm0sIHApKSB7CisJCXJldCA9IC1FRVhJU1Q7CisJCWdvdG8gdW5sb2NrX2ZhaWw7CisJfQorCisJa3ZtX2lvZGV2aWNlX2luaXQoJnAtPmRldiwgJmlvZXZlbnRmZF9vcHMpOworCisJcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2RldihidXMsICZwLT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIHVubG9ja19mYWlsOworCisJbGlzdF9hZGRfdGFpbCgmcC0+bGlzdCwgJmt2bS0+aW9ldmVudGZkcyk7CisKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKworCXJldHVybiAwOworCit1bmxvY2tfZmFpbDoKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKworZmFpbDoKKwlrZnJlZShwKTsKKwlldmVudGZkX2N0eF9wdXQoZXZlbnRmZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Citrdm1fZGVhc3NpZ25faW9ldmVudGZkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2V2ZW50ZmQgKmFyZ3MpCit7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICBwaW8gPSBhcmdzLT5mbGFncyAmIEtWTV9JT0VWRU5URkRfRkxBR19QSU87CisJc3RydWN0IGt2bV9pb19idXMgICAgICAgICpidXMgPSBwaW8gPyAma3ZtLT5waW9fYnVzIDogJmt2bS0+bW1pb19idXM7CisJc3RydWN0IF9pb2V2ZW50ZmQgICAgICAgICpwLCAqdG1wOworCXN0cnVjdCBldmVudGZkX2N0eCAgICAgICAqZXZlbnRmZDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FTk9FTlQ7CisKKwlldmVudGZkID0gZXZlbnRmZF9jdHhfZmRnZXQoYXJncy0+ZmQpOworCWlmIChJU19FUlIoZXZlbnRmZCkpCisJCXJldHVybiBQVFJfRVJSKGV2ZW50ZmQpOworCisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZrdm0tPmlvZXZlbnRmZHMsIGxpc3QpIHsKKwkJYm9vbCB3aWxkY2FyZCA9ICEoYXJncy0+ZmxhZ3MgJiBLVk1fSU9FVkVOVEZEX0ZMQUdfREFUQU1BVENIKTsKKworCQlpZiAocC0+ZXZlbnRmZCAhPSBldmVudGZkICB8fAorCQkgICAgcC0+YWRkciAhPSBhcmdzLT5hZGRyICB8fAorCQkgICAgcC0+bGVuZ3RoICE9IGFyZ3MtPmxlbiB8fAorCQkgICAgcC0+d2lsZGNhcmQgIT0gd2lsZGNhcmQpCisJCQljb250aW51ZTsKKworCQlpZiAoIXAtPndpbGRjYXJkICYmIHAtPmRhdGFtYXRjaCAhPSBhcmdzLT5kYXRhbWF0Y2gpCisJCQljb250aW51ZTsKKworCQlfX2t2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoYnVzLCAmcC0+ZGV2KTsKKwkJaW9ldmVudGZkX3JlbGVhc2UocCk7CisJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKworCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCisJZXZlbnRmZF9jdHhfcHV0KGV2ZW50ZmQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50Citrdm1faW9ldmVudGZkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2V2ZW50ZmQgKmFyZ3MpCit7CisJaWYgKGFyZ3MtPmZsYWdzICYgS1ZNX0lPRVZFTlRGRF9GTEFHX0RFQVNTSUdOKQorCQlyZXR1cm4ga3ZtX2RlYXNzaWduX2lvZXZlbnRmZChrdm0sIGFyZ3MpOworCisJcmV0dXJuIGt2bV9hc3NpZ25faW9ldmVudGZkKGt2bSwgYXJncyk7Cit9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuYyBiL3ZpcnQva3ZtL2lvYXBpYy5jCmluZGV4IDExNTBjNmQuLjlmZTE0MGIgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5jCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva3ZtLmg+CiAKICNpbmNsdWRlICJpb2FwaWMuaCIKICNpbmNsdWRlICJsYXBpYy5oIgpAQCAtMTAzLDYgKzEwNCw3IEBACiB7CiAJdW5zaWduZWQgaW5kZXg7CiAJYm9vbCBtYXNrX2JlZm9yZSwgbWFza19hZnRlcjsKKwl1bmlvbiBrdm1faW9hcGljX3JlZGlyZWN0X2VudHJ5ICplOwogCiAJc3dpdGNoIChpb2FwaWMtPmlvcmVnc2VsKSB7CiAJY2FzZSBJT0FQSUNfUkVHX1ZFUlNJT046CkBAIC0xMjIsMTkgKzEyNCwyMCBAQAogCQlpb2FwaWNfZGVidWcoImNoYW5nZSByZWRpciBpbmRleCAleCB2YWwgJXhcbiIsIGluZGV4LCB2YWwpOwogCQlpZiAoaW5kZXggPj0gSU9BUElDX05VTV9QSU5TKQogCQkJcmV0dXJuOwotCQltYXNrX2JlZm9yZSA9IGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5tYXNrOworCQllID0gJmlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdOworCQltYXNrX2JlZm9yZSA9IGUtPmZpZWxkcy5tYXNrOwogCQlpZiAoaW9hcGljLT5pb3JlZ3NlbCAmIDEpIHsKLQkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgJj0gMHhmZmZmZmZmZjsKLQkJCWlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmJpdHMgfD0gKHU2NCkgdmFsIDw8IDMyOworCQkJZS0+Yml0cyAmPSAweGZmZmZmZmZmOworCQkJZS0+Yml0cyB8PSAodTY0KSB2YWwgPDwgMzI7CiAJCX0gZWxzZSB7Ci0JCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzICY9IH4weGZmZmZmZmZmVUxMOwotCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyB8PSAodTMyKSB2YWw7Ci0JCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMucmVtb3RlX2lyciA9IDA7CisJCQllLT5iaXRzICY9IH4weGZmZmZmZmZmVUxMOworCQkJZS0+Yml0cyB8PSAodTMyKSB2YWw7CisJCQllLT5maWVsZHMucmVtb3RlX2lyciA9IDA7CiAJCX0KLQkJbWFza19hZnRlciA9IGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5tYXNrOworCQltYXNrX2FmdGVyID0gZS0+ZmllbGRzLm1hc2s7CiAJCWlmIChtYXNrX2JlZm9yZSAhPSBtYXNrX2FmdGVyKQogCQkJa3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoaW9hcGljLT5rdm0sIGluZGV4LCBtYXNrX2FmdGVyKTsKLQkJaWYgKGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcKKwkJaWYgKGUtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcKIAkJICAgICYmIGlvYXBpYy0+aXJyICYgKDEgPDwgaW5kZXgpKQogCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpbmRleCk7CiAJCWJyZWFrOwpAQCAtMTY0LDcgKzE2Nyw5IEBACiAJLyogQWx3YXlzIGRlbGl2ZXJ5IFBJVCBpbnRlcnJ1cHQgdG8gdmNwdSAwICovCiAJaWYgKGlycSA9PSAwKSB7CiAJCWlycWUuZGVzdF9tb2RlID0gMDsgLyogUGh5c2ljYWwgbW9kZS4gKi8KLQkJaXJxZS5kZXN0X2lkID0gaW9hcGljLT5rdm0tPnZjcHVzWzBdLT52Y3B1X2lkOworCQkvKiBuZWVkIHRvIHJlYWQgYXBpY19pZCBmcm9tIGFwaWMgcmVnaWVzdCBzaW5jZQorCQkgKiBpdCBjYW4gYmUgcmV3cml0dGVuICovCisJCWlycWUuZGVzdF9pZCA9IGlvYXBpYy0+a3ZtLT5ic3BfdmNwdS0+dmNwdV9pZDsKIAl9CiAjZW5kaWYKIAlyZXR1cm4ga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKGlvYXBpYy0+a3ZtLCBOVUxMLCAmaXJxZSk7CkBAIC0xODgsNyArMTkzLDEwIEBACiAJCQlpZiAoKGVkZ2UgJiYgb2xkX2lyciAhPSBpb2FwaWMtPmlycikgfHwKIAkJCSAgICAoIWVkZ2UgJiYgIWVudHJ5LmZpZWxkcy5yZW1vdGVfaXJyKSkKIAkJCQlyZXQgPSBpb2FwaWNfc2VydmljZShpb2FwaWMsIGlycSk7CisJCQllbHNlCisJCQkJcmV0ID0gMDsgLyogcmVwb3J0IGNvYWxlc2NlZCBpbnRlcnJ1cHQgKi8KIAkJfQorCQl0cmFjZV9rdm1faW9hcGljX3NldF9pcnEoZW50cnkuYml0cywgaXJxLCByZXQgPT0gMCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yMjAsMjQgKzIyOCwyOSBAQAogCQkJX19rdm1faW9hcGljX3VwZGF0ZV9lb2koaW9hcGljLCBpLCB0cmlnZ2VyX21vZGUpOwogfQogCi1zdGF0aWMgaW50IGlvYXBpY19pbl9yYW5nZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywgZ3BhX3QgYWRkciwKLQkJCSAgIGludCBsZW4sIGludCBpc193cml0ZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGt2bV9pb2FwaWMgKnRvX2lvYXBpYyhzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSAoc3RydWN0IGt2bV9pb2FwaWMgKil0aGlzLT5wcml2YXRlOworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qga3ZtX2lvYXBpYywgZGV2KTsKK30KIAorc3RhdGljIGlubGluZSBpbnQgaW9hcGljX2luX3JhbmdlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGdwYV90IGFkZHIpCit7CiAJcmV0dXJuICgoYWRkciA+PSBpb2FwaWMtPmJhc2VfYWRkcmVzcyAmJgogCQkgKGFkZHIgPCBpb2FwaWMtPmJhc2VfYWRkcmVzcyArIElPQVBJQ19NRU1fTEVOR1RIKSkpOwogfQogCi1zdGF0aWMgdm9pZCBpb2FwaWNfbW1pb19yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLCBpbnQgbGVuLAotCQkJICAgICB2b2lkICp2YWwpCitzdGF0aWMgaW50IGlvYXBpY19tbWlvX3JlYWQoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsIGludCBsZW4sCisJCQkgICAgdm9pZCAqdmFsKQogewotCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSAoc3RydWN0IGt2bV9pb2FwaWMgKil0aGlzLT5wcml2YXRlOworCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSB0b19pb2FwaWModGhpcyk7CiAJdTMyIHJlc3VsdDsKKwlpZiAoIWlvYXBpY19pbl9yYW5nZShpb2FwaWMsIGFkZHIpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpb2FwaWNfZGVidWcoImFkZHIgJWx4XG4iLCAodW5zaWduZWQgbG9uZylhZGRyKTsKIAlBU1NFUlQoIShhZGRyICYgMHhmKSk7CS8qIGNoZWNrIGFsaWdubWVudCAqLwogCisJbXV0ZXhfbG9jaygmaW9hcGljLT5rdm0tPmlycV9sb2NrKTsKIAlhZGRyICY9IDB4ZmY7CiAJc3dpdGNoIChhZGRyKSB7CiAJY2FzZSBJT0FQSUNfUkVHX1NFTEVDVDoKQEAgLTI2NCwyMiArMjc3LDI4IEBACiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW9hcGljOiB3cm9uZyBsZW5ndGggJWRcbiIsIGxlbik7CiAJfQorCW11dGV4X3VubG9jaygmaW9hcGljLT5rdm0tPmlycV9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW9hcGljX21taW9fd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsIGdwYV90IGFkZHIsIGludCBsZW4sCi0JCQkgICAgICBjb25zdCB2b2lkICp2YWwpCitzdGF0aWMgaW50IGlvYXBpY19tbWlvX3dyaXRlKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLCBpbnQgbGVuLAorCQkJICAgICBjb25zdCB2b2lkICp2YWwpCiB7Ci0Jc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IChzdHJ1Y3Qga3ZtX2lvYXBpYyAqKXRoaXMtPnByaXZhdGU7CisJc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IHRvX2lvYXBpYyh0aGlzKTsKIAl1MzIgZGF0YTsKKwlpZiAoIWlvYXBpY19pbl9yYW5nZShpb2FwaWMsIGFkZHIpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpb2FwaWNfZGVidWcoImlvYXBpY19tbWlvX3dyaXRlIGFkZHI9JXAgbGVuPSVkIHZhbD0lcFxuIiwKIAkJICAgICAodm9pZCopYWRkciwgbGVuLCB2YWwpOwogCUFTU0VSVCghKGFkZHIgJiAweGYpKTsJLyogY2hlY2sgYWxpZ25tZW50ICovCisKKwltdXRleF9sb2NrKCZpb2FwaWMtPmt2bS0+aXJxX2xvY2spOwogCWlmIChsZW4gPT0gNCB8fCBsZW4gPT0gOCkKIAkJZGF0YSA9ICoodTMyICopIHZhbDsKIAllbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW9hcGljOiBVbnN1cHBvcnRlZCBzaXplICVkXG4iLCBsZW4pOwotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrOwogCX0KIAogCWFkZHIgJj0gMHhmZjsKQEAgLTMwMCw2ICszMTksOSBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KK3VubG9jazoKKwltdXRleF91bmxvY2soJmlvYXBpYy0+a3ZtLT5pcnFfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKQpAQCAtMzE0LDIxICszMzYsMjcgQEAKIAlpb2FwaWMtPmlkID0gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyBpb2FwaWNfbW1pb19vcHMgPSB7CisJLnJlYWQgICAgID0gaW9hcGljX21taW9fcmVhZCwKKwkud3JpdGUgICAgPSBpb2FwaWNfbW1pb193cml0ZSwKK307CisKIGludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWM7CisJaW50IHJldDsKIAogCWlvYXBpYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1faW9hcGljKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpb2FwaWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWt2bS0+YXJjaC52aW9hcGljID0gaW9hcGljOwogCWt2bV9pb2FwaWNfcmVzZXQoaW9hcGljKTsKLQlpb2FwaWMtPmRldi5yZWFkID0gaW9hcGljX21taW9fcmVhZDsKLQlpb2FwaWMtPmRldi53cml0ZSA9IGlvYXBpY19tbWlvX3dyaXRlOwotCWlvYXBpYy0+ZGV2LmluX3JhbmdlID0gaW9hcGljX2luX3JhbmdlOwotCWlvYXBpYy0+ZGV2LnByaXZhdGUgPSBpb2FwaWM7CisJa3ZtX2lvZGV2aWNlX2luaXQoJmlvYXBpYy0+ZGV2LCAmaW9hcGljX21taW9fb3BzKTsKIAlpb2FwaWMtPmt2bSA9IGt2bTsKLQlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5tbWlvX2J1cywgJmlvYXBpYy0+ZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sICZrdm0tPm1taW9fYnVzLCAmaW9hcGljLT5kZXYpOworCWlmIChyZXQgPCAwKQorCQlrZnJlZShpb2FwaWMpOworCisJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9kZXYuaCBiL3ZpcnQva3ZtL2lvZGV2LmgKaW5kZXggNTVlODg0Ni4uMTJmZDNjYSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9kZXYuaAorKysgYi92aXJ0L2t2bS9pb2Rldi5oCkBAIC0xNyw0OSArMTcsNTQgQEAKICNkZWZpbmUgX19LVk1fSU9ERVZfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9rdm1fdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KIAotc3RydWN0IGt2bV9pb19kZXZpY2UgewotCXZvaWQgKCpyZWFkKShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcywKK3N0cnVjdCBrdm1faW9fZGV2aWNlOworCisvKioKKyAqIGt2bV9pb19kZXZpY2Vfb3BzIGFyZSBjYWxsZWQgdW5kZXIga3ZtIHNsb3RzX2xvY2suCisgKiByZWFkIGFuZCB3cml0ZSBoYW5kbGVycyByZXR1cm4gMCBpZiB0aGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gaGFuZGxlZCwKKyAqIG9yIG5vbi16ZXJvIHRvIGhhdmUgaXQgcGFzc2VkIHRvIHRoZSBuZXh0IGRldmljZS4KKyAqKi8KK3N0cnVjdCBrdm1faW9fZGV2aWNlX29wcyB7CisJaW50ICgqcmVhZCkoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCisJCSAgICBncGFfdCBhZGRyLAorCQkgICAgaW50IGxlbiwKKwkJICAgIHZvaWQgKnZhbCk7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLAogCQkgICAgIGdwYV90IGFkZHIsCiAJCSAgICAgaW50IGxlbiwKLQkJICAgICB2b2lkICp2YWwpOwotCXZvaWQgKCp3cml0ZSkoc3RydWN0IGt2bV9pb19kZXZpY2UgKnRoaXMsCi0JCSAgICAgIGdwYV90IGFkZHIsCi0JCSAgICAgIGludCBsZW4sCi0JCSAgICAgIGNvbnN0IHZvaWQgKnZhbCk7Ci0JaW50ICgqaW5fcmFuZ2UpKHN0cnVjdCBrdm1faW9fZGV2aWNlICp0aGlzLCBncGFfdCBhZGRyLCBpbnQgbGVuLAotCQkJaW50IGlzX3dyaXRlKTsKKwkJICAgICBjb25zdCB2b2lkICp2YWwpOwogCXZvaWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqdGhpcyk7Ci0KLQl2b2lkICAgICAgICAgICAgICpwcml2YXRlOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIGt2bV9pb2RldmljZV9yZWFkKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYsCi0JCQkJICAgICBncGFfdCBhZGRyLAotCQkJCSAgICAgaW50IGxlbiwKLQkJCQkgICAgIHZvaWQgKnZhbCkKKworc3RydWN0IGt2bV9pb19kZXZpY2UgeworCWNvbnN0IHN0cnVjdCBrdm1faW9fZGV2aWNlX29wcyAqb3BzOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIGt2bV9pb2RldmljZV9pbml0KHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgKm9wcykKIHsKLQlkZXYtPnJlYWQoZGV2LCBhZGRyLCBsZW4sIHZhbCk7CisJZGV2LT5vcHMgPSBvcHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1faW9kZXZpY2Vfd3JpdGUoc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldiwKLQkJCQkgICAgICBncGFfdCBhZGRyLAotCQkJCSAgICAgIGludCBsZW4sCi0JCQkJICAgICAgY29uc3Qgdm9pZCAqdmFsKQorc3RhdGljIGlubGluZSBpbnQga3ZtX2lvZGV2aWNlX3JlYWQoc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldiwKKwkJCQkgICAgZ3BhX3QgYWRkciwgaW50IGwsIHZvaWQgKnYpCiB7Ci0JZGV2LT53cml0ZShkZXYsIGFkZHIsIGxlbiwgdmFsKTsKKwlyZXR1cm4gZGV2LT5vcHMtPnJlYWQgPyBkZXYtPm9wcy0+cmVhZChkZXYsIGFkZHIsIGwsIHYpIDogLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGt2bV9pb2RldmljZV9pbnJhbmdlKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIGdwYV90IGFkZHIsIGludCBsZW4sIGludCBpc193cml0ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGt2bV9pb2RldmljZV93cml0ZShzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2LAorCQkJCSAgICAgZ3BhX3QgYWRkciwgaW50IGwsIGNvbnN0IHZvaWQgKnYpCiB7Ci0JcmV0dXJuIGRldi0+aW5fcmFuZ2UoZGV2LCBhZGRyLCBsZW4sIGlzX3dyaXRlKTsKKwlyZXR1cm4gZGV2LT5vcHMtPndyaXRlID8gZGV2LT5vcHMtPndyaXRlKGRldiwgYWRkciwgbCwgdikgOiAtRU9QTk9UU1VQUDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGt2bV9pb2RldmljZV9kZXN0cnVjdG9yKHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGRldi0+ZGVzdHJ1Y3RvcikKLQkJZGV2LT5kZXN0cnVjdG9yKGRldik7CisJaWYgKGRldi0+b3BzLT5kZXN0cnVjdG9yKQorCQlkZXYtPm9wcy0+ZGVzdHJ1Y3RvcihkZXYpOwogfQogCiAjZW5kaWYgLyogX19LVk1fSU9ERVZfSF9fICovCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pcnFfY29tbS5jIGIvdmlydC9rdm0vaXJxX2NvbW0uYwppbmRleCBkZGMxN2YwLi4wMDE2NjNmIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pcnFfY29tbS5jCisrKyBiL3ZpcnQva3ZtL2lycV9jb21tLmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva3ZtLmg+CiAKICNpbmNsdWRlIDxhc20vbXNpZGVmLmg+CiAjaWZkZWYgQ09ORklHX0lBNjQKQEAgLTYyLDE0ICs2MywxNCBAQAogCWludCBpLCByID0gLTE7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCAqbG93ZXN0ID0gTlVMTDsKIAorCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgma3ZtLT5pcnFfbG9jaykpOworCiAJaWYgKGlycS0+ZGVzdF9tb2RlID09IDAgJiYgaXJxLT5kZXN0X2lkID09IDB4ZmYgJiYKIAkJCWt2bV9pc19kbV9sb3dlc3RfcHJpbyhpcnEpKQogCQlwcmludGsoS0VSTl9JTkZPICJrdm06IGFwaWM6IHBoeXMgYnJvYWRjYXN0IGFuZCBsb3dlc3QgcHJpb1xuIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7Ci0JCXZjcHUgPSBrdm0tPnZjcHVzW2ldOwotCi0JCWlmICghdmNwdSB8fCAha3ZtX2FwaWNfcHJlc2VudCh2Y3B1KSkKKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKKwkJaWYgKCFrdm1fYXBpY19wcmVzZW50KHZjcHUpKQogCQkJY29udGludWU7CiAKIAkJaWYgKCFrdm1fYXBpY19tYXRjaF9kZXN0KHZjcHUsIHNyYywgaXJxLT5zaG9ydGhhbmQsCkBAIC05OSw2ICsxMDAsOCBAQAogewogCXN0cnVjdCBrdm1fbGFwaWNfaXJxIGlycTsKIAorCXRyYWNlX2t2bV9tc2lfc2V0X2lycShlLT5tc2kuYWRkcmVzc19sbywgZS0+bXNpLmRhdGEpOworCiAJaXJxLmRlc3RfaWQgPSAoZS0+bXNpLmFkZHJlc3NfbG8gJgogCQkJTVNJX0FERFJfREVTVF9JRF9NQVNLKSA+PiBNU0lfQUREUl9ERVNUX0lEX1NISUZUOwogCWlycS52ZWN0b3IgPSAoZS0+bXNpLmRhdGEgJgpAQCAtMTEzLDcgKzExNiw3IEBACiAJcmV0dXJuIGt2bV9pcnFfZGVsaXZlcnlfdG9fYXBpYyhrdm0sIE5VTEwsICZpcnEpOwogfQogCi0vKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5sb2NrIG11dGV4IGhlbGQKKy8qIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBrdm0tPmlycV9sb2NrIG11dGV4IGhlbGQKICAqIFJldHVybiB2YWx1ZToKICAqICA8IDAgICBJbnRlcnJ1cHQgd2FzIGlnbm9yZWQgKG1hc2tlZCBvciBub3QgZGVsaXZlcmVkIGZvciBvdGhlciByZWFzb25zKQogICogID0gMCAgIEludGVycnVwdCB3YXMgY29hbGVzY2VkIChwcmV2aW91cyBpcnEgaXMgc3RpbGwgcGVuZGluZykKQEAgLTEyNSw2ICsxMjgsMTAgQEAKIAl1bnNpZ25lZCBsb25nICppcnFfc3RhdGUsIHNpZ19sZXZlbDsKIAlpbnQgcmV0ID0gLTE7CiAKKwl0cmFjZV9rdm1fc2V0X2lycShpcnEsIGxldmVsLCBpcnFfc291cmNlX2lkKTsKKworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgma3ZtLT5pcnFfbG9jaykpOworCiAJaWYgKGlycSA8IEtWTV9JT0FQSUNfTlVNX1BJTlMpIHsKIAkJaXJxX3N0YXRlID0gKHVuc2lnbmVkIGxvbmcgKikma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaXJxXTsKIApAQCAtMTM0LDcgKzE0MSw5IEBACiAJCWVsc2UKIAkJCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOwogCQlzaWdfbGV2ZWwgPSAhISgqaXJxX3N0YXRlKTsKLQl9IGVsc2UgLyogRGVhbCB3aXRoIE1TSS9NU0ktWCAqLworCX0gZWxzZSBpZiAoIWxldmVsKQorCQlyZXR1cm4gcmV0OworCWVsc2UgLyogRGVhbCB3aXRoIE1TSS9NU0ktWCAqLwogCQlzaWdfbGV2ZWwgPSAxOwogCiAJLyogTm90IHBvc3NpYmxlIHRvIGRldGVjdCBpZiB0aGUgZ3Vlc3QgdXNlcyB0aGUgUElDIG9yIHRoZQpAQCAtMTU5LDYgKzE2OCw4IEBACiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAJdW5zaWduZWQgZ3NpID0gcGluOwogCisJdHJhY2Vfa3ZtX2Fja19pcnEoaXJxY2hpcCwgcGluKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmt2bS0+aXJxX3JvdXRpbmcsIGxpbmspCiAJCWlmIChlLT50eXBlID09IEtWTV9JUlFfUk9VVElOR19JUlFDSElQICYmCiAJCSAgICBlLT5pcnFjaGlwLmlycWNoaXAgPT0gaXJxY2hpcCAmJgpAQCAtMTc1LDE5ICsxODYsMjYgQEAKIHZvaWQga3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAogCQkJCSAgIHN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbikKIHsKKwltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAlobGlzdF9hZGRfaGVhZCgma2lhbi0+bGluaywgJmt2bS0+YXJjaC5pcnFfYWNrX25vdGlmaWVyX2xpc3QpOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiB9CiAKLXZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pCit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLAorCQkJCSAgICBzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pCiB7CisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJaGxpc3RfZGVsX2luaXQoJmtpYW4tPmxpbmspOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiB9CiAKLS8qIFRoZSBjYWxsZXIgbXVzdCBob2xkIGt2bS0+bG9jayBtdXRleCAqLwogaW50IGt2bV9yZXF1ZXN0X2lycV9zb3VyY2VfaWQoc3RydWN0IGt2bSAqa3ZtKQogewogCXVuc2lnbmVkIGxvbmcgKmJpdG1hcCA9ICZrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwOwotCWludCBpcnFfc291cmNlX2lkID0gZmluZF9maXJzdF96ZXJvX2JpdChiaXRtYXAsCisJaW50IGlycV9zb3VyY2VfaWQ7CisKKwltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKKwlpcnFfc291cmNlX2lkID0gZmluZF9maXJzdF96ZXJvX2JpdChiaXRtYXAsCiAJCQkJc2l6ZW9mKGt2bS0+YXJjaC5pcnFfc291cmNlc19iaXRtYXApKTsKIAogCWlmIChpcnFfc291cmNlX2lkID49IHNpemVvZihrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwKSkgewpAQCAtMTk3LDYgKzIxNSw3IEBACiAKIAlBU1NFUlQoaXJxX3NvdXJjZV9pZCAhPSBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQpOwogCXNldF9iaXQoaXJxX3NvdXJjZV9pZCwgYml0bWFwKTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwogCiAJcmV0dXJuIGlycV9zb3VyY2VfaWQ7CiB9CkBAIC0yMDcsNiArMjI2LDcgQEAKIAogCUFTU0VSVChpcnFfc291cmNlX2lkICE9IEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCk7CiAKKwltdXRleF9sb2NrKCZrdm0tPmlycV9sb2NrKTsKIAlpZiAoaXJxX3NvdXJjZV9pZCA8IDAgfHwKIAkgICAgaXJxX3NvdXJjZV9pZCA+PSBzaXplb2Yoa3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJrdm06IElSUSBzb3VyY2UgSUQgb3V0IG9mIHJhbmdlIVxuIik7CkBAIC0yMTUsMTkgKzIzNSwyNCBAQAogCWZvciAoaSA9IDA7IGkgPCBLVk1fSU9BUElDX05VTV9QSU5TOyBpKyspCiAJCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaV0pOwogCWNsZWFyX2JpdChpcnFfc291cmNlX2lkLCAma3ZtLT5hcmNoLmlycV9zb3VyY2VzX2JpdG1hcCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIH0KIAogdm9pZCBrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAogCQkJCSAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKQogeworCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCWtpbW4tPmlycSA9IGlycTsKIAlobGlzdF9hZGRfaGVhZCgma2ltbi0+bGluaywgJmt2bS0+bWFza19ub3RpZmllcl9saXN0KTsKKwltdXRleF91bmxvY2soJmt2bS0+aXJxX2xvY2spOwogfQogCiB2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKIAkJCQkgICAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKQogeworCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCWhsaXN0X2RlbCgma2ltbi0+bGluayk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmlycV9sb2NrKTsKIH0KIAogdm9pZCBrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsIGJvb2wgbWFzaykKQEAgLTIzNSw2ICsyNjAsOCBAQAogCXN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW47CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CiAKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmt2bS0+aXJxX2xvY2spKTsKKwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpbW4sIG4sICZrdm0tPm1hc2tfbm90aWZpZXJfbGlzdCwgbGluaykKIAkJaWYgKGtpbW4tPmlycSA9PSBpcnEpCiAJCQlraW1uLT5mdW5jKGtpbW4sIG1hc2spOwpAQCAtMjUwLDcgKzI3Nyw5IEBACiAKIHZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKQogeworCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwogCV9fa3ZtX2ZyZWVfaXJxX3JvdXRpbmcoJmt2bS0+aXJxX3JvdXRpbmcpOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgc2V0dXBfcm91dGluZ19lbnRyeShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKQEAgLTMyNSwxMyArMzU0LDEzIEBACiAJCWUgPSBOVUxMOwogCX0KIAotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJbGlzdF9zcGxpY2UoJmt2bS0+aXJxX3JvdXRpbmcsICZ0bXApOwogCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlycV9yb3V0aW5nKTsKIAlsaXN0X3NwbGljZSgmaXJxX2xpc3QsICZrdm0tPmlycV9yb3V0aW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmaXJxX2xpc3QpOwogCWxpc3Rfc3BsaWNlKCZ0bXAsICZpcnFfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiAKIAlyID0gMDsKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjg4NGJhZi4uODk3YmZmMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC01OSw5ICs1OSwxOCBAQAogI2luY2x1ZGUgImlycS5oIgogI2VuZGlmCiAKKyNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rdm0uaD4KKwogTU9EVUxFX0FVVEhPUigiUXVtcmFuZXQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorLyoKKyAqIE9yZGVyaW5nIG9mIGxvY2tzOgorICoKKyAqIAkJa3ZtLT5zbG90c19sb2NrIC0tPiBrdm0tPmxvY2sgLS0+IGt2bS0+aXJxX2xvY2sKKyAqLworCiBERUZJTkVfU1BJTkxPQ0soa3ZtX2xvY2spOwogTElTVF9IRUFEKHZtX2xpc3QpOwogCkBAIC03OSw2ICs4OCw4IEBACiAKIHN0YXRpYyBib29sIGt2bV9yZWJvb3Rpbmc7CiAKK3N0YXRpYyBib29sIGxhcmdlcGFnZXNfZW5hYmxlZCA9IHRydWU7CisKICNpZmRlZiBLVk1fQ0FQX0RFVklDRV9BU1NJR05NRU5UCiBzdGF0aWMgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICprdm1fZmluZF9hc3NpZ25lZF9kZXYoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCQkJCSAgICAgIGludCBhc3NpZ25lZF9kZXZfaWQpCkBAIC0xMjAsMTcgKzEzMSwxMyBAQAogewogCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqYXNzaWduZWRfZGV2OwogCXN0cnVjdCBrdm0gKmt2bTsKLQlpbnQgaXJxLCBpOworCWludCBpOwogCiAJYXNzaWduZWRfZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCwKIAkJCQkgICAgaW50ZXJydXB0X3dvcmspOwogCWt2bSA9IGFzc2lnbmVkX2Rldi0+a3ZtOwogCi0JLyogVGhpcyBpcyB0YWtlbiB0byBzYWZlbHkgaW5qZWN0IGlycSBpbnNpZGUgdGhlIGd1ZXN0LiBXaGVuCi0JICogdGhlIGludGVycnVwdCBpbmplY3Rpb24gKG9yIHRoZSBpb2FwaWMgY29kZSkgdXNlcyBhCi0JICogZmluZXItZ3JhaW5lZCBsb2NrLCB1cGRhdGUgdGhpcwotCSAqLwotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJbXV0ZXhfbG9jaygma3ZtLT5pcnFfbG9jayk7CiAJc3Bpbl9sb2NrX2lycSgmYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfbG9jayk7CiAJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0RFVl9JUlFfSE9TVF9NU0lYKSB7CiAJCXN0cnVjdCBrdm1fZ3Vlc3RfbXNpeF9lbnRyeSAqZ3Vlc3RfZW50cmllcyA9CkBAIC0xNDMsMjMgKzE1MCwxMyBAQAogCQkJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sCiAJCQkJICAgIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKIAkJCQkgICAgZ3Vlc3RfZW50cmllc1tpXS52ZWN0b3IsIDEpOwotCQkJaXJxID0gYXNzaWduZWRfZGV2LT5ob3N0X21zaXhfZW50cmllc1tpXS52ZWN0b3I7Ci0JCQlpZiAoaXJxICE9IDApCi0JCQkJZW5hYmxlX2lycShpcnEpOwotCQkJYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IGZhbHNlOwogCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJa3ZtX3NldF9pcnEoYXNzaWduZWRfZGV2LT5rdm0sIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKIAkJCSAgICBhc3NpZ25lZF9kZXYtPmd1ZXN0X2lycSwgMSk7Ci0JCWlmIChhc3NpZ25lZF9kZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmCi0JCQkJS1ZNX0RFVl9JUlFfR1VFU1RfTVNJKSB7Ci0JCQllbmFibGVfaXJxKGFzc2lnbmVkX2Rldi0+aG9zdF9pcnEpOwotCQkJYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IGZhbHNlOwotCQl9Ci0JfQogCiAJc3Bpbl91bmxvY2tfaXJxKCZhc3NpZ25lZF9kZXYtPmFzc2lnbmVkX2Rldl9sb2NrKTsKLQltdXRleF91bmxvY2soJmFzc2lnbmVkX2Rldi0+a3ZtLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmFzc2lnbmVkX2Rldi0+a3ZtLT5pcnFfbG9jayk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBrdm1fYXNzaWduZWRfZGV2X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMTc5LDggKzE3NiwxMCBAQAogCiAJc2NoZWR1bGVfd29yaygmYXNzaWduZWRfZGV2LT5pbnRlcnJ1cHRfd29yayk7CiAKLQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlhc3NpZ25lZF9kZXYtPmhvc3RfaXJxX2Rpc2FibGVkID0gdHJ1ZTsKKwlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fREVWX0lSUV9HVUVTVF9JTlRYKSB7CisJCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCQlhc3NpZ25lZF9kZXYtPmhvc3RfaXJxX2Rpc2FibGVkID0gdHJ1ZTsKKwl9CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc3NpZ25lZF9kZXYtPmFzc2lnbmVkX2Rldl9sb2NrLCBmbGFncyk7CkBAIC0yMTUsNyArMjE0LDcgQEAKIHN0YXRpYyB2b2lkIGRlYXNzaWduX2d1ZXN0X2lycShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkgICAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9kZXZfa2VybmVsICphc3NpZ25lZF9kZXYpCiB7Ci0Ja3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcigmYXNzaWduZWRfZGV2LT5hY2tfbm90aWZpZXIpOworCWt2bV91bnJlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoa3ZtLCAmYXNzaWduZWRfZGV2LT5hY2tfbm90aWZpZXIpOwogCWFzc2lnbmVkX2Rldi0+YWNrX25vdGlmaWVyLmdzaSA9IC0xOwogCiAJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCAhPSAtMSkKQEAgLTQxNyw2ICs0MTYsNyBAQAogewogCWRldi0+Z3Vlc3RfaXJxID0gaXJxLT5ndWVzdF9pcnE7CiAJZGV2LT5hY2tfbm90aWZpZXIuZ3NpID0gLTE7CisJZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IGZhbHNlOwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC00MjcsNiArNDI3LDcgQEAKIHsKIAlkZXYtPmd1ZXN0X2lycSA9IGlycS0+Z3Vlc3RfaXJxOwogCWRldi0+YWNrX25vdGlmaWVyLmdzaSA9IC0xOworCWRldi0+aG9zdF9pcnFfZGlzYWJsZWQgPSBmYWxzZTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNjkzLDExICs2OTQsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX3ZjcHUoaW50IG4pCi17Ci0JcmV0dXJuIGxpa2VseShuID49IDAgJiYgbiA8IEtWTV9NQVhfVkNQVVMpOwotfQotCiBpbmxpbmUgaW50IGt2bV9pc19tbWlvX3BmbihwZm5fdCBwZm4pCiB7CiAJaWYgKHBmbl92YWxpZChwZm4pKSB7CkBAIC03NDUsMTIgKzc0MSw5IEBACiAJaWYgKGFsbG9jX2NwdW1hc2tfdmFyKCZjcHVzLCBHRlBfQVRPTUlDKSkKIAkJY3B1bWFza19jbGVhcihjcHVzKTsKIAotCW1lID0gZ2V0X2NwdSgpOwogCXNwaW5fbG9jaygma3ZtLT5yZXF1ZXN0c19sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgKytpKSB7Ci0JCXZjcHUgPSBrdm0tPnZjcHVzW2ldOwotCQlpZiAoIXZjcHUpCi0JCQljb250aW51ZTsKKwltZSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQocmVxLCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJY29udGludWU7CiAJCWNwdSA9IHZjcHUtPmNwdTsKQEAgLTc2NCw3ICs3NTcsNiBAQAogCWVsc2UKIAkJY2FsbGVkID0gZmFsc2U7CiAJc3Bpbl91bmxvY2soJmt2bS0+cmVxdWVzdHNfbG9jayk7Ci0JcHV0X2NwdSgpOwogCWZyZWVfY3B1bWFza192YXIoY3B1cyk7CiAJcmV0dXJuIGNhbGxlZDsKIH0KQEAgLTk4Niw3ICs5NzgsOSBAQAogCXNwaW5fbG9ja19pbml0KCZrdm0tPm1tdV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5yZXF1ZXN0c19sb2NrKTsKIAlrdm1faW9fYnVzX2luaXQoJmt2bS0+cGlvX2J1cyk7CisJa3ZtX2V2ZW50ZmRfaW5pdChrdm0pOwogCW11dGV4X2luaXQoJmt2bS0+bG9jayk7CisJbXV0ZXhfaW5pdCgma3ZtLT5pcnFfbG9jayk7CiAJa3ZtX2lvX2J1c19pbml0KCZrdm0tPm1taW9fYnVzKTsKIAlpbml0X3J3c2VtKCZrdm0tPnNsb3RzX2xvY2spOwogCWF0b21pY19zZXQoJmt2bS0+dXNlcnNfY291bnQsIDEpOwpAQCAtMTAwNiwxOSArMTAwMCwyNSBAQAogc3RhdGljIHZvaWQga3ZtX2ZyZWVfcGh5c21lbV9zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKmZyZWUsCiAJCQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpkb250KQogeworCWludCBpOworCiAJaWYgKCFkb250IHx8IGZyZWUtPnJtYXAgIT0gZG9udC0+cm1hcCkKIAkJdmZyZWUoZnJlZS0+cm1hcCk7CiAKIAlpZiAoIWRvbnQgfHwgZnJlZS0+ZGlydHlfYml0bWFwICE9IGRvbnQtPmRpcnR5X2JpdG1hcCkKIAkJdmZyZWUoZnJlZS0+ZGlydHlfYml0bWFwKTsKIAotCWlmICghZG9udCB8fCBmcmVlLT5scGFnZV9pbmZvICE9IGRvbnQtPmxwYWdlX2luZm8pCi0JCXZmcmVlKGZyZWUtPmxwYWdlX2luZm8pOworCisJZm9yIChpID0gMDsgaSA8IEtWTV9OUl9QQUdFX1NJWkVTIC0gMTsgKytpKSB7CisJCWlmICghZG9udCB8fCBmcmVlLT5scGFnZV9pbmZvW2ldICE9IGRvbnQtPmxwYWdlX2luZm9baV0pIHsKKwkJCXZmcmVlKGZyZWUtPmxwYWdlX2luZm9baV0pOworCQkJZnJlZS0+bHBhZ2VfaW5mb1tpXSA9IE5VTEw7CisJCX0KKwl9CiAKIAlmcmVlLT5ucGFnZXMgPSAwOwogCWZyZWUtPmRpcnR5X2JpdG1hcCA9IE5VTEw7CiAJZnJlZS0+cm1hcCA9IE5VTEw7Ci0JZnJlZS0+bHBhZ2VfaW5mbyA9IE5VTEw7CiB9CiAKIHZvaWQga3ZtX2ZyZWVfcGh5c21lbShzdHJ1Y3Qga3ZtICprdm0pCkBAIC0xMDcxLDYgKzEwNzEsOCBAQAogewogCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAorCWt2bV9pcnFmZF9yZWxlYXNlKGt2bSk7CisKIAlrdm1fcHV0X2t2bShrdm0pOwogCXJldHVybiAwOwogfQpAQCAtMTA4OSw4ICsxMDkxLDggQEAKIHsKIAlpbnQgcjsKIAlnZm5fdCBiYXNlX2dmbjsKLQl1bnNpZ25lZCBsb25nIG5wYWdlcywgdWdmbjsKLQl1bnNpZ25lZCBsb25nIGxhcmdlcGFnZXMsIGk7CisJdW5zaWduZWQgbG9uZyBucGFnZXM7CisJdW5zaWduZWQgbG9uZyBpOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCBvbGQsIG5ldzsKIApAQCAtMTE2NCwzMSArMTE2Niw1MSBAQAogCQllbHNlCiAJCQluZXcudXNlcnNwYWNlX2FkZHIgPSAwOwogCX0KLQlpZiAobnBhZ2VzICYmICFuZXcubHBhZ2VfaW5mbykgewotCQlsYXJnZXBhZ2VzID0gMSArIChiYXNlX2dmbiArIG5wYWdlcyAtIDEpIC8gS1ZNX1BBR0VTX1BFUl9IUEFHRTsKLQkJbGFyZ2VwYWdlcyAtPSBiYXNlX2dmbiAvIEtWTV9QQUdFU19QRVJfSFBBR0U7CisJaWYgKCFucGFnZXMpCisJCWdvdG8gc2tpcF9scGFnZTsKIAotCQluZXcubHBhZ2VfaW5mbyA9IHZtYWxsb2MobGFyZ2VwYWdlcyAqIHNpemVvZigqbmV3LmxwYWdlX2luZm8pKTsKKwlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX1BBR0VfU0laRVMgLSAxOyArK2kpIHsKKwkJdW5zaWduZWQgbG9uZyB1Z2ZuOworCQl1bnNpZ25lZCBsb25nIGo7CisJCWludCBscGFnZXM7CisJCWludCBsZXZlbCA9IGkgKyAyOwogCi0JCWlmICghbmV3LmxwYWdlX2luZm8pCisJCS8qIEF2b2lkIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nIGlmIG5vIGxhcmdlIHBhZ2VzICovCisJCSh2b2lkKWxldmVsOworCisJCWlmIChuZXcubHBhZ2VfaW5mb1tpXSkKKwkJCWNvbnRpbnVlOworCisJCWxwYWdlcyA9IDEgKyAoYmFzZV9nZm4gKyBucGFnZXMgLSAxKSAvCisJCQkgICAgIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpOworCQlscGFnZXMgLT0gYmFzZV9nZm4gLyBLVk1fUEFHRVNfUEVSX0hQQUdFKGxldmVsKTsKKworCQluZXcubHBhZ2VfaW5mb1tpXSA9IHZtYWxsb2MobHBhZ2VzICogc2l6ZW9mKCpuZXcubHBhZ2VfaW5mb1tpXSkpOworCisJCWlmICghbmV3LmxwYWdlX2luZm9baV0pCiAJCQlnb3RvIG91dF9mcmVlOwogCi0JCW1lbXNldChuZXcubHBhZ2VfaW5mbywgMCwgbGFyZ2VwYWdlcyAqIHNpemVvZigqbmV3LmxwYWdlX2luZm8pKTsKKwkJbWVtc2V0KG5ldy5scGFnZV9pbmZvW2ldLCAwLAorCQkgICAgICAgbHBhZ2VzICogc2l6ZW9mKCpuZXcubHBhZ2VfaW5mb1tpXSkpOwogCi0JCWlmIChiYXNlX2dmbiAlIEtWTV9QQUdFU19QRVJfSFBBR0UpCi0JCQluZXcubHBhZ2VfaW5mb1swXS53cml0ZV9jb3VudCA9IDE7Ci0JCWlmICgoYmFzZV9nZm4rbnBhZ2VzKSAlIEtWTV9QQUdFU19QRVJfSFBBR0UpCi0JCQluZXcubHBhZ2VfaW5mb1tsYXJnZXBhZ2VzLTFdLndyaXRlX2NvdW50ID0gMTsKKwkJaWYgKGJhc2VfZ2ZuICUgS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkpCisJCQluZXcubHBhZ2VfaW5mb1tpXVswXS53cml0ZV9jb3VudCA9IDE7CisJCWlmICgoYmFzZV9nZm4rbnBhZ2VzKSAlIEtWTV9QQUdFU19QRVJfSFBBR0UobGV2ZWwpKQorCQkJbmV3LmxwYWdlX2luZm9baV1bbHBhZ2VzIC0gMV0ud3JpdGVfY291bnQgPSAxOwogCQl1Z2ZuID0gbmV3LnVzZXJzcGFjZV9hZGRyID4+IFBBR0VfU0hJRlQ7CiAJCS8qCiAJCSAqIElmIHRoZSBnZm4gYW5kIHVzZXJzcGFjZSBhZGRyZXNzIGFyZSBub3QgYWxpZ25lZCB3cnQgZWFjaAotCQkgKiBvdGhlciwgZGlzYWJsZSBsYXJnZSBwYWdlIHN1cHBvcnQgZm9yIHRoaXMgc2xvdAorCQkgKiBvdGhlciwgb3IgaWYgZXhwbGljaXRseSBhc2tlZCB0bywgZGlzYWJsZSBsYXJnZSBwYWdlCisJCSAqIHN1cHBvcnQgZm9yIHRoaXMgc2xvdAogCQkgKi8KLQkJaWYgKChiYXNlX2dmbiBeIHVnZm4pICYgKEtWTV9QQUdFU19QRVJfSFBBR0UgLSAxKSkKLQkJCWZvciAoaSA9IDA7IGkgPCBsYXJnZXBhZ2VzOyArK2kpCi0JCQkJbmV3LmxwYWdlX2luZm9baV0ud3JpdGVfY291bnQgPSAxOworCQlpZiAoKGJhc2VfZ2ZuIF4gdWdmbikgJiAoS1ZNX1BBR0VTX1BFUl9IUEFHRShsZXZlbCkgLSAxKSB8fAorCQkgICAgIWxhcmdlcGFnZXNfZW5hYmxlZCkKKwkJCWZvciAoaiA9IDA7IGogPCBscGFnZXM7ICsraikKKwkJCQluZXcubHBhZ2VfaW5mb1tpXVtqXS53cml0ZV9jb3VudCA9IDE7CiAJfQogCitza2lwX2xwYWdlOgorCiAJLyogQWxsb2NhdGUgcGFnZSBkaXJ0eSBiaXRtYXAgaWYgbmVlZGVkICovCiAJaWYgKChuZXcuZmxhZ3MgJiBLVk1fTUVNX0xPR19ESVJUWV9QQUdFUykgJiYgIW5ldy5kaXJ0eV9iaXRtYXApIHsKIAkJdW5zaWduZWQgZGlydHlfYnl0ZXMgPSBBTElHTihucGFnZXMsIEJJVFNfUEVSX0xPTkcpIC8gODsKQEAgLTEyMDAsNiArMTIyMiwxMCBAQAogCQlpZiAob2xkLm5wYWdlcykKIAkJCWt2bV9hcmNoX2ZsdXNoX3NoYWRvdyhrdm0pOwogCX0KKyNlbHNlICAvKiBub3QgZGVmaW5lZCBDT05GSUdfUzM5MCAqLworCW5ldy51c2VyX2FsbG9jID0gdXNlcl9hbGxvYzsKKwlpZiAodXNlcl9hbGxvYykKKwkJbmV3LnVzZXJzcGFjZV9hZGRyID0gbWVtLT51c2Vyc3BhY2VfYWRkcjsKICNlbmRpZiAvKiBub3QgZGVmaW5lZCBDT05GSUdfUzM5MCAqLwogCiAJaWYgKCFucGFnZXMpCkBAIC0xMjk5LDYgKzEzMjUsMTIgQEAKIAlyZXR1cm4gcjsKIH0KIAordm9pZCBrdm1fZGlzYWJsZV9sYXJnZXBhZ2VzKHZvaWQpCit7CisJbGFyZ2VwYWdlc19lbmFibGVkID0gZmFsc2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1fZGlzYWJsZV9sYXJnZXBhZ2VzKTsKKwogaW50IGlzX2Vycm9yX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIHBhZ2UgPT0gYmFkX3BhZ2U7CkBAIC0xNjM1LDkgKzE2NjcsNyBAQAogCWZvciAoOzspIHsKIAkJcHJlcGFyZV90b193YWl0KCZ2Y3B1LT53cSwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKLQkJaWYgKChrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZCh2Y3B1KSAmJgotCQkJCQlrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkpIHx8Ci0JCQkJa3ZtX2FyY2hfdmNwdV9ydW5uYWJsZSh2Y3B1KSkgeworCQlpZiAoa3ZtX2FyY2hfdmNwdV9ydW5uYWJsZSh2Y3B1KSkgewogCQkJc2V0X2JpdChLVk1fUkVRX1VOSEFMVCwgJnZjcHUtPnJlcXVlc3RzKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNzE0LDI0ICsxNzQ0LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgY3JlYXRlX3ZjcHVfZmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWludCBmZCA9IGFub25faW5vZGVfZ2V0ZmQoImt2bS12Y3B1IiwgJmt2bV92Y3B1X2ZvcHMsIHZjcHUsIDApOwotCWlmIChmZCA8IDApCi0JCWt2bV9wdXRfa3ZtKHZjcHUtPmt2bSk7Ci0JcmV0dXJuIGZkOworCXJldHVybiBhbm9uX2lub2RlX2dldGZkKCJrdm0tdmNwdSIsICZrdm1fdmNwdV9mb3BzLCB2Y3B1LCAwKTsKIH0KIAogLyoKICAqIENyZWF0ZXMgc29tZSB2aXJ0dWFsIGNwdXMuICBHb29kIGx1Y2sgY3JlYXRpbmcgbW9yZSB0aGFuIG9uZS4KICAqLwotc3RhdGljIGludCBrdm1fdm1faW9jdGxfY3JlYXRlX3ZjcHUoc3RydWN0IGt2bSAqa3ZtLCBpbnQgbikKK3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX2NyZWF0ZV92Y3B1KHN0cnVjdCBrdm0gKmt2bSwgdTMyIGlkKQogewogCWludCByOwotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsICp2OwogCi0JaWYgKCF2YWxpZF92Y3B1KG4pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZjcHUgPSBrdm1fYXJjaF92Y3B1X2NyZWF0ZShrdm0sIG4pOworCXZjcHUgPSBrdm1fYXJjaF92Y3B1X2NyZWF0ZShrdm0sIGlkKTsKIAlpZiAoSVNfRVJSKHZjcHUpKQogCQlyZXR1cm4gUFRSX0VSUih2Y3B1KTsKIApAQCAtMTc0MiwyMyArMTc2NiwzOCBAQAogCQlyZXR1cm4gcjsKIAogCW11dGV4X2xvY2soJmt2bS0+bG9jayk7Ci0JaWYgKGt2bS0+dmNwdXNbbl0pIHsKLQkJciA9IC1FRVhJU1Q7CisJaWYgKGF0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cykgPT0gS1ZNX01BWF9WQ1BVUykgeworCQlyID0gLUVJTlZBTDsKIAkJZ290byB2Y3B1X2Rlc3Ryb3k7CiAJfQotCWt2bS0+dmNwdXNbbl0gPSB2Y3B1OwotCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKworCWt2bV9mb3JfZWFjaF92Y3B1KHIsIHYsIGt2bSkKKwkJaWYgKHYtPnZjcHVfaWQgPT0gaWQpIHsKKwkJCXIgPSAtRUVYSVNUOworCQkJZ290byB2Y3B1X2Rlc3Ryb3k7CisJCX0KKworCUJVR19PTihrdm0tPnZjcHVzW2F0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cyldKTsKIAogCS8qIE5vdyBpdCdzIGFsbCBzZXQgdXAsIGxldCB1c2Vyc3BhY2UgcmVhY2ggaXQgKi8KIAlrdm1fZ2V0X2t2bShrdm0pOwogCXIgPSBjcmVhdGVfdmNwdV9mZCh2Y3B1KTsKLQlpZiAociA8IDApCi0JCWdvdG8gdW5saW5rOworCWlmIChyIDwgMCkgeworCQlrdm1fcHV0X2t2bShrdm0pOworCQlnb3RvIHZjcHVfZGVzdHJveTsKKwl9CisKKwlrdm0tPnZjcHVzW2F0b21pY19yZWFkKCZrdm0tPm9ubGluZV92Y3B1cyldID0gdmNwdTsKKwlzbXBfd21iKCk7CisJYXRvbWljX2luYygma3ZtLT5vbmxpbmVfdmNwdXMpOworCisjaWZkZWYgQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRQorCWlmIChrdm0tPmJzcF92Y3B1X2lkID09IGlkKQorCQlrdm0tPmJzcF92Y3B1ID0gdmNwdTsKKyNlbmRpZgorCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAlyZXR1cm4gcjsKIAotdW5saW5rOgotCW11dGV4X2xvY2soJmt2bS0+bG9jayk7Ci0Ja3ZtLT52Y3B1c1tuXSA9IE5VTEw7CiB2Y3B1X2Rlc3Ryb3k6CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCWt2bV9hcmNoX3ZjcHVfZGVzdHJveSh2Y3B1KTsKQEAgLTIxOTksNiArMjIzOCw3IEBACiAJCXZmcmVlKGVudHJpZXMpOwogCQlicmVhazsKIAl9CisjZW5kaWYgLyogS1ZNX0NBUF9JUlFfUk9VVElORyAqLwogI2lmZGVmIF9fS1ZNX0hBVkVfTVNJWAogCWNhc2UgS1ZNX0FTU0lHTl9TRVRfTVNJWF9OUjogewogCQlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX21zaXhfbnIgZW50cnlfbnI7CkBAIC0yMjIxLDcgKzIyNjEsMzUgQEAKIAkJYnJlYWs7CiAJfQogI2VuZGlmCi0jZW5kaWYgLyogS1ZNX0NBUF9JUlFfUk9VVElORyAqLworCWNhc2UgS1ZNX0lSUUZEOiB7CisJCXN0cnVjdCBrdm1faXJxZmQgZGF0YTsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCBhcmdwLCBzaXplb2YgZGF0YSkpCisJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9pcnFmZChrdm0sIGRhdGEuZmQsIGRhdGEuZ3NpLCBkYXRhLmZsYWdzKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgS1ZNX0lPRVZFTlRGRDogeworCQlzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCBkYXRhOworCisJCXIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsIGFyZ3AsIHNpemVvZiBkYXRhKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX2lvZXZlbnRmZChrdm0sICZkYXRhKTsKKwkJYnJlYWs7CisJfQorI2lmZGVmIENPTkZJR19LVk1fQVBJQ19BUkNISVRFQ1RVUkUKKwljYXNlIEtWTV9TRVRfQk9PVF9DUFVfSUQ6CisJCXIgPSAwOworCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOworCQlpZiAoYXRvbWljX3JlYWQoJmt2bS0+b25saW5lX3ZjcHVzKSAhPSAwKQorCQkJciA9IC1FQlVTWTsKKwkJZWxzZQorCQkJa3ZtLT5ic3BfdmNwdV9pZCA9IGFyZzsKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXIgPSBrdm1fYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CkBAIC0yMjg4LDYgKzIzNTYsOSBAQAogCWNhc2UgS1ZNX0NBUF9VU0VSX01FTU9SWToKIAljYXNlIEtWTV9DQVBfREVTVFJPWV9NRU1PUllfUkVHSU9OX1dPUktTOgogCWNhc2UgS1ZNX0NBUF9KT0lOX01FTU9SWV9SRUdJT05TX1dPUktTOgorI2lmZGVmIENPTkZJR19LVk1fQVBJQ19BUkNISVRFQ1RVUkUKKwljYXNlIEtWTV9DQVBfU0VUX0JPT1RfQ1BVX0lEOgorI2VuZGlmCiAJCXJldHVybiAxOwogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9JUlFDSElQCiAJY2FzZSBLVk1fQ0FQX0lSUV9ST1VUSU5HOgpAQCAtMjMzNSw3ICsyNDA2LDcgQEAKIAljYXNlIEtWTV9UUkFDRV9FTkFCTEU6CiAJY2FzZSBLVk1fVFJBQ0VfUEFVU0U6CiAJY2FzZSBLVk1fVFJBQ0VfRElTQUJMRToKLQkJciA9IGt2bV90cmFjZV9pb2N0bChpb2N0bCwgYXJnKTsKKwkJciA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4ga3ZtX2FyY2hfZGV2X2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpOwpAQCAtMjQ0OSwyNiArMjUyMCw3MSBAQAogCX0KIH0KIAotc3RydWN0IGt2bV9pb19kZXZpY2UgKmt2bV9pb19idXNfZmluZF9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKLQkJCQkJICBncGFfdCBhZGRyLCBpbnQgbGVuLCBpbnQgaXNfd3JpdGUpCisvKiBrdm1faW9fYnVzX3dyaXRlIC0gY2FsbGVkIHVuZGVyIGt2bS0+c2xvdHNfbG9jayAqLworaW50IGt2bV9pb19idXNfd3JpdGUoc3RydWN0IGt2bV9pb19idXMgKmJ1cywgZ3BhX3QgYWRkciwKKwkJICAgICBpbnQgbGVuLCBjb25zdCB2b2lkICp2YWwpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGJ1cy0+ZGV2X2NvdW50OyBpKyspCisJCWlmICgha3ZtX2lvZGV2aWNlX3dyaXRlKGJ1cy0+ZGV2c1tpXSwgYWRkciwgbGVuLCB2YWwpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisvKiBrdm1faW9fYnVzX3JlYWQgLSBjYWxsZWQgdW5kZXIga3ZtLT5zbG90c19sb2NrICovCitpbnQga3ZtX2lvX2J1c19yZWFkKHN0cnVjdCBrdm1faW9fYnVzICpidXMsIGdwYV90IGFkZHIsIGludCBsZW4sIHZvaWQgKnZhbCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVzLT5kZXZfY291bnQ7IGkrKykKKwkJaWYgKCFrdm1faW9kZXZpY2VfcmVhZChidXMtPmRldnNbaV0sIGFkZHIsIGxlbiwgdmFsKSkKKwkJCXJldHVybiAwOworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworaW50IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb19idXMgKmJ1cywKKwkJCSAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwlyZXQgPSBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGJ1cywgZGV2KTsKKwl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEFuIHVubG9ja2VkIHZlcnNpb24uIENhbGxlciBtdXN0IGhhdmUgd3JpdGUgbG9jayBvbiBzbG90c19sb2NrLiAqLworaW50IF9fa3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKKwkJCSAgICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCit7CisJaWYgKGJ1cy0+ZGV2X2NvdW50ID4gTlJfSU9CVVNfREVWUy0xKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWJ1cy0+ZGV2c1tidXMtPmRldl9jb3VudCsrXSA9IGRldjsKKworCXJldHVybiAwOworfQorCit2b2lkIGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bSAqa3ZtLAorCQkJICAgICAgIHN0cnVjdCBrdm1faW9fYnVzICpidXMsCisJCQkgICAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldikKK3sKKwlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCV9fa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2RldihidXMsIGRldik7CisJdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7Cit9CisKKy8qIEFuIHVubG9ja2VkIHZlcnNpb24uIENhbGxlciBtdXN0IGhhdmUgd3JpdGUgbG9jayBvbiBzbG90c19sb2NrLiAqLwordm9pZCBfX2t2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywKKwkJCQkgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBidXMtPmRldl9jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBrdm1faW9fZGV2aWNlICpwb3MgPSBidXMtPmRldnNbaV07Ci0KLQkJaWYgKHBvcy0+aW5fcmFuZ2UocG9zLCBhZGRyLCBsZW4sIGlzX3dyaXRlKSkKLQkJCXJldHVybiBwb3M7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bV9pb19idXMgKmJ1cywgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldikKLXsKLQlCVUdfT04oYnVzLT5kZXZfY291bnQgPiAoTlJfSU9CVVNfREVWUy0xKSk7Ci0KLQlidXMtPmRldnNbYnVzLT5kZXZfY291bnQrK10gPSBkZXY7CisJZm9yIChpID0gMDsgaSA8IGJ1cy0+ZGV2X2NvdW50OyBpKyspCisJCWlmIChidXMtPmRldnNbaV0gPT0gZGV2KSB7CisJCQlidXMtPmRldnNbaV0gPSBidXMtPmRldnNbLS1idXMtPmRldl9jb3VudF07CisJCQlicmVhazsKKwkJfQogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9jcHVfbm90aWZpZXIgPSB7CkBAIC0yNTAxLDExICsyNjE3LDkgQEAKIAkqdmFsID0gMDsKIAlzcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGt2bSwgJnZtX2xpc3QsIHZtX2xpc3QpCi0JCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyArK2kpIHsKLQkJCXZjcHUgPSBrdm0tPnZjcHVzW2ldOwotCQkJaWYgKHZjcHUpCi0JCQkJKnZhbCArPSAqKHUzMiAqKSgodm9pZCAqKXZjcHUgKyBvZmZzZXQpOwotCQl9CisJCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkKKwkJCSp2YWwgKz0gKih1MzIgKikoKHZvaWQgKil2Y3B1ICsgb2Zmc2V0KTsKKwogCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjc5LDE1ICsyNzkzLDE1IEBACiAJX19mcmVlX3BhZ2UoYmFkX3BhZ2UpOwogb3V0OgogCWt2bV9hcmNoX2V4aXQoKTsKLQlrdm1fZXhpdF9kZWJ1ZygpOwogb3V0X2ZhaWw6CisJa3ZtX2V4aXRfZGVidWcoKTsKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9pbml0KTsKIAogdm9pZCBrdm1fZXhpdCh2b2lkKQogewotCWt2bV90cmFjZV9jbGVhbnVwKCk7CisJdHJhY2Vwb2ludF9zeW5jaHJvbml6ZV91bnJlZ2lzdGVyKCk7CiAJbWlzY19kZXJlZ2lzdGVyKCZrdm1fZGV2KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koa3ZtX3ZjcHVfY2FjaGUpOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZrdm1fc3lzZGV2KTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bV90cmFjZS5jIGIvdmlydC9rdm0va3ZtX3RyYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1OTg3NDQuLjAwMDAwMDAKLS0tIGEvdmlydC9rdm0va3ZtX3RyYWNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqIGt2bSB0cmFjZQotICoKLSAqIEl0IGlzIGRlc2lnbmVkIHRvIGFsbG93IGRlYnVnZ2luZyB0cmFjZXMgb2Yga3ZtIHRvIGJlIGdlbmVyYXRlZAotICogb24gVVAgLyBTTVAgbWFjaGluZXMuICBFYWNoIHRyYWNlIGVudHJ5IGNhbiBiZSB0aW1lc3RhbXBlZCBzbyB0aGF0Ci0gKiBpdCdzIHBvc3NpYmxlIHRvIHJlY29uc3RydWN0IGEgY2hyb25vbG9naWNhbCByZWNvcmQgb2YgdHJhY2UgZXZlbnRzLgotICogVGhlIGltcGxlbWVudGF0aW9uIHJlZmVycyB0byBibGt0cmFjZSBrZXJuZWwgc3VwcG9ydC4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwNiBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+Ci0gKgotICogQXV0aG9yczogRmVuZyhFcmljKSBMaXUsIGVyaWMuZS5saXVAaW50ZWwuY29tCi0gKgotICogRGF0ZTogICAgRmViIDIwMDgKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+Ci0KLSNkZWZpbmUgS1ZNX1RSQUNFX1NUQVRFX1JVTk5JTkcgCSgxIDw8IDApCi0jZGVmaW5lIEtWTV9UUkFDRV9TVEFURV9QQVVTRSAJCSgxIDw8IDEpCi0jZGVmaW5lIEtWTV9UUkFDRV9TVEFURV9DTEVBUlVQIAkoMSA8PCAyKQotCi1zdHJ1Y3Qga3ZtX3RyYWNlIHsKLQlpbnQgdHJhY2Vfc3RhdGU7Ci0Jc3RydWN0IHJjaGFuICpyY2hhbjsKLQlzdHJ1Y3QgZGVudHJ5ICpsb3N0X2ZpbGU7Ci0JYXRvbWljX3QgbG9zdF9yZWNvcmRzOwotfTsKLXN0YXRpYyBzdHJ1Y3Qga3ZtX3RyYWNlICprdm1fdHJhY2U7Ci0KLXN0cnVjdCBrdm1fdHJhY2VfcHJvYmUgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3QgY2hhciAqZm9ybWF0OwotCXUzMiB0aW1lc3RhbXBfaW47Ci0JbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlX2Z1bmM7Ci19OwotCi1zdGF0aWMgaW5saW5lIGludCBjYWxjX3JlY19zaXplKGludCB0aW1lc3RhbXAsIGludCBleHRyYSkKLXsKLQlpbnQgcmVjX3NpemUgPSBLVk1fVFJDX0hFQURfU0laRTsKLQotCXJlY19zaXplICs9IGV4dHJhOwotCXJldHVybiB0aW1lc3RhbXAgPyByZWNfc2l6ZSArPSBLVk1fVFJDX0NZQ0xFX1NJWkUgOiByZWNfc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQga3ZtX2FkZF90cmFjZSh2b2lkICpwcm9iZV9wcml2YXRlLCB2b2lkICpjYWxsX2RhdGEsCi0JCQkgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCAqYXJncykKLXsKLQlzdHJ1Y3Qga3ZtX3RyYWNlX3Byb2JlICpwID0gcHJvYmVfcHJpdmF0ZTsKLQlzdHJ1Y3Qga3ZtX3RyYWNlICprdCA9IGt2bV90cmFjZTsKLQlzdHJ1Y3Qga3ZtX3RyYWNlX3JlYyByZWM7Ci0Jc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCWludCAgICBpLCBzaXplOwotCXUzMiAgICBleHRyYTsKLQotCWlmICh1bmxpa2VseShrdC0+dHJhY2Vfc3RhdGUgIT0gS1ZNX1RSQUNFX1NUQVRFX1JVTk5JTkcpKQotCQlyZXR1cm47Ci0KLQlyZWMucmVjX3ZhbAk9IFRSQUNFX1JFQ19FVkVOVF9JRCh2YV9hcmcoKmFyZ3MsIHUzMikpOwotCXZjcHUJCT0gdmFfYXJnKCphcmdzLCBzdHJ1Y3Qga3ZtX3ZjcHUgKik7Ci0JcmVjLnBpZAkJPSBjdXJyZW50LT50Z2lkOwotCXJlYy52Y3B1X2lkCT0gdmNwdS0+dmNwdV9pZDsKLQotCWV4dHJhICAgCT0gdmFfYXJnKCphcmdzLCB1MzIpOwotCVdBUk5fT04oIShleHRyYSA8PSBLVk1fVFJDX0VYVFJBX01BWCkpOwotCWV4dHJhIAkJPSBtaW5fdCh1MzIsIGV4dHJhLCBLVk1fVFJDX0VYVFJBX01BWCk7Ci0KLQlyZWMucmVjX3ZhbCB8PSBUUkFDRV9SRUNfVENTKHAtPnRpbWVzdGFtcF9pbikKLQkJCXwgVFJBQ0VfUkVDX05VTV9EQVRBX0FSR1MoZXh0cmEpOwotCi0JaWYgKHAtPnRpbWVzdGFtcF9pbikgewotCQlyZWMudS50aW1lc3RhbXAudGltZXN0YW1wID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBleHRyYTsgaSsrKQotCQkJcmVjLnUudGltZXN0YW1wLmV4dHJhX3UzMltpXSA9IHZhX2FyZygqYXJncywgdTMyKTsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgZXh0cmE7IGkrKykKLQkJCXJlYy51Lm5vdGltZXN0YW1wLmV4dHJhX3UzMltpXSA9IHZhX2FyZygqYXJncywgdTMyKTsKLQl9Ci0KLQlzaXplID0gY2FsY19yZWNfc2l6ZShwLT50aW1lc3RhbXBfaW4sIGV4dHJhICogc2l6ZW9mKHUzMikpOwotCXJlbGF5X3dyaXRlKGt0LT5yY2hhbiwgJnJlYywgc2l6ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qga3ZtX3RyYWNlX3Byb2JlIGt2bV90cmFjZV9wcm9iZXNbXSA9IHsKLQl7ICJrdm1fdHJhY2VfZW50cnlleGl0IiwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgMSwga3ZtX2FkZF90cmFjZSB9LAotCXsgImt2bV90cmFjZV9oYW5kbGVyIiwgIiV1ICVwICV1ICV1ICV1ICV1ICV1ICV1IiwgMCwga3ZtX2FkZF90cmFjZSB9LAotfTsKLQotc3RhdGljIGludCBsb3N0X3JlY29yZHNfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCBrdm1fdHJhY2UgKmt0ID0gZGF0YTsKLQotCSp2YWwgPSBhdG9taWNfcmVhZCgma3QtPmxvc3RfcmVjb3Jkcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLURFRklORV9TSU1QTEVfQVRUUklCVVRFKGt2bV90cmFjZV9sb3N0X29wcywgbG9zdF9yZWNvcmRzX2dldCwgTlVMTCwgIiVsbHVcbiIpOwotCi0vKgotICogIFRoZSByZWxheSBjaGFubmVsIGlzIHVzZWQgaW4gIm5vLW92ZXJ3cml0ZSIgbW9kZSwgaXQga2VlcHMgdHJhY2Ugb2YgaG93Ci0gKiAgbWFueSB0aW1lcyB3ZSBlbmNvdW50ZXJlZCBhIGZ1bGwgc3ViYnVmZmVyLCB0byB0ZWxsIHVzZXIgc3BhY2UgYXBwIHRoZQotICogIGxvc3QgcmVjb3JkcyB0aGVyZSB3ZXJlLgotICovCi1zdGF0aWMgaW50IGt2bV9zdWJidWZfc3RhcnRfY2FsbGJhY2soc3RydWN0IHJjaGFuX2J1ZiAqYnVmLCB2b2lkICpzdWJidWYsCi0JCQkJICAgICB2b2lkICpwcmV2X3N1YmJ1Ziwgc2l6ZV90IHByZXZfcGFkZGluZykKLXsKLQlzdHJ1Y3Qga3ZtX3RyYWNlICprdDsKLQotCWlmICghcmVsYXlfYnVmX2Z1bGwoYnVmKSkgewotCQlpZiAoIXByZXZfc3ViYnVmKSB7Ci0JCQkvKgotCQkJICogZXhlY3V0ZWQgb25seSBvbmNlIHdoZW4gdGhlIGNoYW5uZWwgaXMgb3BlbmVkCi0JCQkgKiBzYXZlIG1ldGFkYXRhIGFzIGZpcnN0IHJlY29yZAotCQkJICovCi0JCQlzdWJidWZfc3RhcnRfcmVzZXJ2ZShidWYsIHNpemVvZih1MzIpKTsKLQkJCSoodTMyICopc3ViYnVmID0gMHgxMjM0NTY3ODsKLQkJfQotCi0JCXJldHVybiAxOwotCX0KLQotCWt0ID0gYnVmLT5jaGFuLT5wcml2YXRlX2RhdGE7Ci0JYXRvbWljX2luYygma3QtPmxvc3RfcmVjb3Jkcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmt2bV9jcmVhdGVfYnVmX2ZpbGVfY2FsbGFjayhjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJCSBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCQkJCQkgaW50IG1vZGUsCi0JCQkJCQkgc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAotCQkJCQkJIGludCAqaXNfZ2xvYmFsKQotewotCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVuYW1lLCBtb2RlLCBwYXJlbnQsIGJ1ZiwKLQkJCQkgICAmcmVsYXlfZmlsZV9vcGVyYXRpb25zKTsKLX0KLQotc3RhdGljIGludCBrdm1fcmVtb3ZlX2J1Zl9maWxlX2NhbGxiYWNrKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlkZWJ1Z2ZzX3JlbW92ZShkZW50cnkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHJjaGFuX2NhbGxiYWNrcyBrdm1fcmVsYXlfY2FsbGJhY2tzID0gewotCS5zdWJidWZfc3RhcnQgCQk9IGt2bV9zdWJidWZfc3RhcnRfY2FsbGJhY2ssCi0JLmNyZWF0ZV9idWZfZmlsZSAJPSBrdm1fY3JlYXRlX2J1Zl9maWxlX2NhbGxhY2ssCi0JLnJlbW92ZV9idWZfZmlsZSAJPSBrdm1fcmVtb3ZlX2J1Zl9maWxlX2NhbGxiYWNrLAotfTsKLQotc3RhdGljIGludCBkb19rdm1fdHJhY2VfZW5hYmxlKHN0cnVjdCBrdm1fdXNlcl90cmFjZV9zZXR1cCAqa3V0cykKLXsKLQlzdHJ1Y3Qga3ZtX3RyYWNlICprdDsKLQlpbnQgaSwgciA9IC1FTk9NRU07Ci0KLQlpZiAoIWt1dHMtPmJ1Zl9zaXplIHx8ICFrdXRzLT5idWZfbnIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Ja3QgPSBremFsbG9jKHNpemVvZigqa3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWt0KQotCQlnb3RvIGVycjsKLQotCXIgPSAtRUlPOwotCWF0b21pY19zZXQoJmt0LT5sb3N0X3JlY29yZHMsIDApOwotCWt0LT5sb3N0X2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsb3N0X3JlY29yZHMiLCAwNDQ0LCBrdm1fZGVidWdmc19kaXIsCi0JCQkJCSAgICBrdCwgJmt2bV90cmFjZV9sb3N0X29wcyk7Ci0JaWYgKCFrdC0+bG9zdF9maWxlKQotCQlnb3RvIGVycjsKLQotCWt0LT5yY2hhbiA9IHJlbGF5X29wZW4oInRyYWNlIiwga3ZtX2RlYnVnZnNfZGlyLCBrdXRzLT5idWZfc2l6ZSwKLQkJCQlrdXRzLT5idWZfbnIsICZrdm1fcmVsYXlfY2FsbGJhY2tzLCBrdCk7Ci0JaWYgKCFrdC0+cmNoYW4pCi0JCWdvdG8gZXJyOwotCi0Ja3ZtX3RyYWNlID0ga3Q7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShrdm1fdHJhY2VfcHJvYmVzKTsgaSsrKSB7Ci0JCXN0cnVjdCBrdm1fdHJhY2VfcHJvYmUgKnAgPSAma3ZtX3RyYWNlX3Byb2Jlc1tpXTsKLQotCQlyID0gbWFya2VyX3Byb2JlX3JlZ2lzdGVyKHAtPm5hbWUsIHAtPmZvcm1hdCwgcC0+cHJvYmVfZnVuYywgcCk7Ci0JCWlmIChyKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVW5hYmxlIHRvIHJlZ2lzdGVyIHByb2JlICVzXG4iLAotCQkJICAgICAgIHAtPm5hbWUpOwotCX0KLQotCWt2bV90cmFjZS0+dHJhY2Vfc3RhdGUgPSBLVk1fVFJBQ0VfU1RBVEVfUlVOTklORzsKLQotCXJldHVybiAwOwotZXJyOgotCWlmIChrdCkgewotCQlpZiAoa3QtPmxvc3RfZmlsZSkKLQkJCWRlYnVnZnNfcmVtb3ZlKGt0LT5sb3N0X2ZpbGUpOwotCQlpZiAoa3QtPnJjaGFuKQotCQkJcmVsYXlfY2xvc2Uoa3QtPnJjaGFuKTsKLQkJa2ZyZWUoa3QpOwotCX0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBrdm1fdHJhY2VfZW5hYmxlKGNoYXIgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IGt2bV91c2VyX3RyYWNlX3NldHVwIGt1dHM7Ci0JaW50IHJldDsKLQotCXJldCA9IGNvcHlfZnJvbV91c2VyKCZrdXRzLCBhcmcsIHNpemVvZihrdXRzKSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXQgPSBkb19rdm1fdHJhY2VfZW5hYmxlKCZrdXRzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQga3ZtX3RyYWNlX3BhdXNlKHZvaWQpCi17Ci0Jc3RydWN0IGt2bV90cmFjZSAqa3QgPSBrdm1fdHJhY2U7Ci0JaW50IHIgPSAtRUlOVkFMOwotCi0JaWYgKGt0ID09IE5VTEwpCi0JCXJldHVybiByOwotCi0JaWYgKGt0LT50cmFjZV9zdGF0ZSA9PSBLVk1fVFJBQ0VfU1RBVEVfUlVOTklORykgewotCQlrdC0+dHJhY2Vfc3RhdGUgPSBLVk1fVFJBQ0VfU1RBVEVfUEFVU0U7Ci0JCXJlbGF5X2ZsdXNoKGt0LT5yY2hhbik7Ci0JCXIgPSAwOwotCX0KLQotCXJldHVybiByOwotfQotCi12b2lkIGt2bV90cmFjZV9jbGVhbnVwKHZvaWQpCi17Ci0Jc3RydWN0IGt2bV90cmFjZSAqa3QgPSBrdm1fdHJhY2U7Ci0JaW50IGk7Ci0KLQlpZiAoa3QgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKGt0LT50cmFjZV9zdGF0ZSA9PSBLVk1fVFJBQ0VfU1RBVEVfUlVOTklORyB8fAotCSAgICBrdC0+dHJhY2Vfc3RhdGUgPT0gS1ZNX1RSQUNFX1NUQVRFX1BBVVNFKSB7Ci0KLQkJa3QtPnRyYWNlX3N0YXRlID0gS1ZNX1RSQUNFX1NUQVRFX0NMRUFSVVA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoa3ZtX3RyYWNlX3Byb2Jlcyk7IGkrKykgewotCQkJc3RydWN0IGt2bV90cmFjZV9wcm9iZSAqcCA9ICZrdm1fdHJhY2VfcHJvYmVzW2ldOwotCQkJbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIocC0+bmFtZSwgcC0+cHJvYmVfZnVuYywgcCk7Ci0JCX0KLQkJbWFya2VyX3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKTsKLQotCQlyZWxheV9jbG9zZShrdC0+cmNoYW4pOwotCQlkZWJ1Z2ZzX3JlbW92ZShrdC0+bG9zdF9maWxlKTsKLQkJa2ZyZWUoa3QpOwotCX0KLX0KLQotaW50IGt2bV90cmFjZV9pb2N0bCh1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCWxvbmcgciA9IC1FSU5WQUw7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlzd2l0Y2ggKGlvY3RsKSB7Ci0JY2FzZSBLVk1fVFJBQ0VfRU5BQkxFOgotCQlyID0ga3ZtX3RyYWNlX2VuYWJsZShhcmdwKTsKLQkJYnJlYWs7Ci0JY2FzZSBLVk1fVFJBQ0VfUEFVU0U6Ci0JCXIgPSBrdm1fdHJhY2VfcGF1c2UoKTsKLQkJYnJlYWs7Ci0JY2FzZSBLVk1fVFJBQ0VfRElTQUJMRToKLQkJciA9IDA7Ci0JCWt2bV90cmFjZV9jbGVhbnVwKCk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByOwotfQo=